From neil.armstrong at linaro.org  Thu Dec  1 00:03:45 2022
From: neil.armstrong at linaro.org (Neil Armstrong)
Date: Thu, 1 Dec 2022 09:03:45 +0100
Subject: [PATCH v2 01/11] pwm: Make .get_state() callback return an error
 code
In-Reply-To: <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
 <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
Message-ID: <b19c4956-3f92-f6be-7d61-9b826e5d6fe1@linaro.org>

On 30/11/2022 16:21, Uwe Kleine-K?nig wrote:
> .get_state() might fail in some cases. To make it possible that a driver
> signals such a failure change the prototype of .get_state() to return an
> error code.
> 
> This patch was created using coccinelle and the following semantic patch:
> 
> @p1@
> identifier getstatefunc;
> identifier driver;
> @@
>   struct pwm_ops driver = {
>          ...,
>          .get_state = getstatefunc
>          ,...
>   };
> 
> @p2@
> identifier p1.getstatefunc;
> identifier chip, pwm, state;
> @@
> -void
> +int
>   getstatefunc(struct pwm_chip *chip, struct pwm_device *pwm, struct pwm_state *state)
>   {
>     ...
> -  return;
> +  return 0;
>     ...
>   }
> 
> plus the actual change of the prototype in include/linux/pwm.h (plus some
> manual fixing of indentions and empty lines).
> 
> So for now all drivers return success unconditionally. They are adapted
> in the following patches to make the changes easier reviewable.
> 
> Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de>
> ---
>   drivers/gpio/gpio-mvebu.c             |  9 ++++++---
>   drivers/gpu/drm/bridge/ti-sn65dsi86.c | 14 ++++++++------
>   drivers/leds/rgb/leds-qcom-lpg.c      | 14 ++++++++------
>   drivers/pwm/pwm-atmel.c               |  6 ++++--
>   drivers/pwm/pwm-bcm-iproc.c           |  8 +++++---
>   drivers/pwm/pwm-crc.c                 | 10 ++++++----
>   drivers/pwm/pwm-cros-ec.c             |  8 +++++---
>   drivers/pwm/pwm-dwc.c                 |  6 ++++--
>   drivers/pwm/pwm-hibvt.c               |  6 ++++--
>   drivers/pwm/pwm-imx-tpm.c             |  8 +++++---
>   drivers/pwm/pwm-imx27.c               |  8 +++++---
>   drivers/pwm/pwm-intel-lgm.c           |  6 ++++--
>   drivers/pwm/pwm-iqs620a.c             |  6 ++++--
>   drivers/pwm/pwm-keembay.c             |  6 ++++--
>   drivers/pwm/pwm-lpss.c                |  6 ++++--
>   drivers/pwm/pwm-meson.c               |  8 +++++---
>   drivers/pwm/pwm-mtk-disp.c            | 12 +++++++-----
>   drivers/pwm/pwm-pca9685.c             |  8 +++++---
>   drivers/pwm/pwm-raspberrypi-poe.c     |  8 +++++---
>   drivers/pwm/pwm-rockchip.c            | 12 +++++++-----
>   drivers/pwm/pwm-sifive.c              |  6 ++++--
>   drivers/pwm/pwm-sl28cpld.c            |  8 +++++---
>   drivers/pwm/pwm-sprd.c                |  8 +++++---
>   drivers/pwm/pwm-stm32-lp.c            |  8 +++++---
>   drivers/pwm/pwm-sun4i.c               | 12 +++++++-----
>   drivers/pwm/pwm-sunplus.c             |  6 ++++--
>   drivers/pwm/pwm-visconti.c            |  6 ++++--
>   drivers/pwm/pwm-xilinx.c              |  8 +++++---
>   include/linux/pwm.h                   |  4 ++--
>   29 files changed, 146 insertions(+), 89 deletions(-)
> 

<snip>

> diff --git a/drivers/pwm/pwm-meson.c b/drivers/pwm/pwm-meson.c
> index 57112f438c6d..16d79ca5d8f5 100644
> --- a/drivers/pwm/pwm-meson.c
> +++ b/drivers/pwm/pwm-meson.c
> @@ -318,8 +318,8 @@ static unsigned int meson_pwm_cnt_to_ns(struct pwm_chip *chip,
>   	return cnt * fin_ns * (channel->pre_div + 1);
>   }
>   
> -static void meson_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -				struct pwm_state *state)
> +static int meson_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +			       struct pwm_state *state)
>   {
>   	struct meson_pwm *meson = to_meson_pwm(chip);
>   	struct meson_pwm_channel_data *channel_data;
> @@ -327,7 +327,7 @@ static void meson_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>   	u32 value, tmp;
>   
>   	if (!state)
> -		return;
> +		return 0;
>   
>   	channel = &meson->channels[pwm->hwpwm];
>   	channel_data = &meson_pwm_per_channel_data[pwm->hwpwm];
> @@ -357,6 +357,8 @@ static void meson_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>   		state->period = 0;
>   		state->duty_cycle = 0;
>   	}
> +
> +	return 0;
>   }
>   
>   static const struct pwm_ops meson_pwm_ops = {

<snip>

For pwm-meson:

Reviewed-by: Neil Armstrong <neil.armstrong at linaro.org>



From ryder.lee at mediatek.com  Thu Dec  1 00:03:32 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Thu, 1 Dec 2022 16:03:32 +0800
Subject: [PATCH v2 5/5] wifi: mt76: mt7996: add support to configure spatial reuse parameter set
In-Reply-To: <d1c11adff6b57c9104bb16df19f62700e2505473.1669879226.git.ryder.lee@mediatek.com>
References: <d1c11adff6b57c9104bb16df19f62700e2505473.1669879226.git.ryder.lee@mediatek.com>
Message-ID: <863efa2bf5a96ad1dd68e0740805d587914cfc66.1669879226.git.ryder.lee@mediatek.com>

The SPR parameter set comprises OBSS PD threshold for SRG and
non SRG and Bitmap of BSS color and partial BSSID. This adds
support to configure fields of SPR element to firmware.

User can disable firmware SR algorithms by turning sr_scene_detect off.

Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
change since v2 - mark mt7996_mcu_enable_obss_spr()
---
 .../net/wireless/mediatek/mt76/mt7996/main.c  |   6 +-
 .../net/wireless/mediatek/mt76/mt7996/mcu.c   | 192 +++++++++++++++++-
 .../net/wireless/mediatek/mt76/mt7996/mcu.h   |   7 +
 .../wireless/mediatek/mt76/mt7996/mt7996.h    |   4 +-
 4 files changed, 196 insertions(+), 13 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/main.c b/drivers/net/wireless/mediatek/mt76/mt7996/main.c
index f2129be25d99..4421cd54311b 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/main.c
@@ -518,10 +518,8 @@ static void mt7996_bss_info_changed(struct ieee80211_hw *hw,
 		mt7996_mcu_add_sta(dev, vif, NULL, join);
 	}
 
-	if (changed & BSS_CHANGED_ASSOC) {
+	if (changed & BSS_CHANGED_ASSOC)
 		mt7996_mcu_add_bss_info(phy, vif, vif->cfg.assoc);
-		mt7996_mcu_add_obss_spr(dev, vif, info->he_obss_pd.enable);
-	}
 
 	if (changed & BSS_CHANGED_ERP_CTS_PROT)
 		mt7996_mac_enable_rtscts(dev, vif, info->use_cts_prot);
@@ -545,7 +543,7 @@ static void mt7996_bss_info_changed(struct ieee80211_hw *hw,
 		mt7996_mcu_set_tx(dev, vif);
 
 	if (changed & BSS_CHANGED_HE_OBSS_PD)
-		mt7996_mcu_add_obss_spr(dev, vif, info->he_obss_pd.enable);
+		mt7996_mcu_add_obss_spr(phy, vif, &info->he_obss_pd);
 
 	if (changed & BSS_CHANGED_HE_BSS_COLOR)
 		mt7996_update_bss_color(hw, vif, &info->he_bss_color);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
index 8193af0982f7..e0d95a4aad7a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
@@ -71,6 +71,10 @@ struct mt7996_fw_region {
 #define HE_PHY(p, c)			u8_get_bits(c, IEEE80211_HE_PHY_##p)
 #define HE_MAC(m, c)			u8_get_bits(c, IEEE80211_HE_MAC_##m)
 
+static bool sr_scene_detect = true;
+module_param(sr_scene_detect, bool, 0644);
+MODULE_PARM_DESC(sr_scene_detect, "Enable firmware scene detection algorithm");
+
 static u8
 mt7996_mcu_get_sta_nss(u16 mcs_map)
 {
@@ -3123,29 +3127,203 @@ int mt7996_mcu_set_txbf(struct mt7996_dev *dev, u8 action)
 	return mt76_mcu_skb_send_msg(&dev->mt76, skb, MCU_WM_UNI_CMD(BF), true);
 }
 
-int mt7996_mcu_add_obss_spr(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-			    bool enable)
+static int
+mt7996_mcu_enable_obss_spr(struct mt7996_phy *phy, u16 action, u8 val)
 {
-#define MT_SPR_ENABLE		1
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
+	struct mt7996_dev *dev = phy->dev;
 	struct {
 		u8 band_idx;
 		u8 __rsv[3];
 
 		__le16 tag;
 		__le16 len;
+
 		__le32 val;
 	} __packed req = {
-		.band_idx = mvif->mt76.band_idx,
-		.tag = cpu_to_le16(UNI_CMD_SR_ENABLE),
+		.band_idx = phy->mt76->band_idx,
+		.tag = cpu_to_le16(action),
+		.len = cpu_to_le16(sizeof(req) - 4),
+		.val = cpu_to_le32(val),
+	};
+
+	return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(SR),
+				 &req, sizeof(req), true);
+}
+
+static int
+mt7996_mcu_set_obss_spr_pd(struct mt7996_phy *phy,
+			   struct ieee80211_he_obss_pd *he_obss_pd)
+{
+	struct mt7996_dev *dev = phy->dev;
+	u8 max_th = 82, non_srg_max_th = 62;
+	struct {
+		u8 band_idx;
+		u8 __rsv[3];
+
+		__le16 tag;
+		__le16 len;
+
+		u8 pd_th_non_srg;
+		u8 pd_th_srg;
+		u8 period_offs;
+		u8 rcpi_src;
+		__le16 obss_pd_min;
+		__le16 obss_pd_min_srg;
+		u8 resp_txpwr_mode;
+		u8 txpwr_restrict_mode;
+		u8 txpwr_ref;
+		u8 __rsv2[3];
+	} __packed req = {
+		.band_idx = phy->mt76->band_idx,
+		.tag = cpu_to_le16(UNI_CMD_SR_SET_PARAM),
+		.len = cpu_to_le16(sizeof(req) - 4),
+		.obss_pd_min = cpu_to_le16(max_th),
+		.obss_pd_min_srg = cpu_to_le16(max_th),
+		.txpwr_restrict_mode = 2,
+		.txpwr_ref = 21
+	};
+	int ret;
+
+	/* disable firmware dynamical PD asjustment */
+	ret = mt7996_mcu_enable_obss_spr(phy, UNI_CMD_SR_ENABLE_DPD, false);
+	if (ret)
+		return ret;
+
+	if (he_obss_pd->sr_ctrl &
+	    IEEE80211_HE_SPR_NON_SRG_OBSS_PD_SR_DISALLOWED)
+		req.pd_th_non_srg = max_th;
+	else if (he_obss_pd->sr_ctrl & IEEE80211_HE_SPR_NON_SRG_OFFSET_PRESENT)
+		req.pd_th_non_srg  = max_th - he_obss_pd->non_srg_max_offset;
+	else
+		req.pd_th_non_srg  = non_srg_max_th;
+
+	if (he_obss_pd->sr_ctrl & IEEE80211_HE_SPR_SRG_INFORMATION_PRESENT)
+		req.pd_th_srg = max_th - he_obss_pd->max_offset;
+
+	return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(SR),
+				 &req, sizeof(req), true);
+}
+
+static int
+mt7996_mcu_set_obss_spr_siga(struct mt7996_phy *phy, struct ieee80211_vif *vif,
+			     struct ieee80211_he_obss_pd *he_obss_pd)
+{
+	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
+	struct mt7996_dev *dev = phy->dev;
+	u8 omac = mvif->mt76.omac_idx;
+	struct {
+		u8 band_idx;
+		u8 __rsv[3];
+
+		__le16 tag;
+		__le16 len;
+
+		u8 omac;
+		u8 __rsv2[3];
+		u8 flag[20];
+	} __packed req = {
+		.band_idx = phy->mt76->band_idx,
+		.tag = cpu_to_le16(UNI_CMD_SR_SET_SIGA),
 		.len = cpu_to_le16(sizeof(req) - 4),
-		.val = cpu_to_le32(enable),
+		.omac = omac > HW_BSSID_MAX ? omac - 12 : omac,
 	};
+	int ret;
+
+	if (he_obss_pd->sr_ctrl & IEEE80211_HE_SPR_HESIGA_SR_VAL15_ALLOWED)
+		req.flag[req.omac] = 0xf;
+	else
+		return 0;
+
+	/* switch to normal AP mode */
+	ret = mt7996_mcu_enable_obss_spr(phy, UNI_CMD_SR_ENABLE_MODE, 0);
+	if (ret)
+		return ret;
 
 	return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(SR),
 				 &req, sizeof(req), true);
 }
 
+static int
+mt7996_mcu_set_obss_spr_bitmap(struct mt7996_phy *phy,
+			       struct ieee80211_he_obss_pd *he_obss_pd)
+{
+	struct mt7996_dev *dev = phy->dev;
+	struct {
+		u8 band_idx;
+		u8 __rsv[3];
+
+		__le16 tag;
+		__le16 len;
+
+		__le32 color_l[2];
+		__le32 color_h[2];
+		__le32 bssid_l[2];
+		__le32 bssid_h[2];
+	} __packed req = {
+		.band_idx = phy->mt76->band_idx,
+		.tag = cpu_to_le16(UNI_CMD_SR_SET_SRG_BITMAP),
+		.len = cpu_to_le16(sizeof(req) - 4),
+	};
+	u32 bitmap;
+
+	memcpy(&bitmap, he_obss_pd->bss_color_bitmap, sizeof(bitmap));
+	req.color_l[req.band_idx] = cpu_to_le32(bitmap);
+
+	memcpy(&bitmap, he_obss_pd->bss_color_bitmap + 4, sizeof(bitmap));
+	req.color_h[req.band_idx] = cpu_to_le32(bitmap);
+
+	memcpy(&bitmap, he_obss_pd->partial_bssid_bitmap, sizeof(bitmap));
+	req.bssid_l[req.band_idx] = cpu_to_le32(bitmap);
+
+	memcpy(&bitmap, he_obss_pd->partial_bssid_bitmap + 4, sizeof(bitmap));
+	req.bssid_h[req.band_idx] = cpu_to_le32(bitmap);
+
+	return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(SR), &req,
+				 sizeof(req), true);
+}
+
+int mt7996_mcu_add_obss_spr(struct mt7996_phy *phy, struct ieee80211_vif *vif,
+			    struct ieee80211_he_obss_pd *he_obss_pd)
+{
+	int ret;
+
+	/* enable firmware scene detection algorithms */
+	ret = mt7996_mcu_enable_obss_spr(phy, UNI_CMD_SR_ENABLE_SD,
+					 sr_scene_detect);
+	if (ret)
+		return ret;
+
+	/* firmware dynamically adjusts PD threshold so skip manual control */
+	if (sr_scene_detect && !he_obss_pd->enable)
+		return 0;
+
+	/* enable spatial reuse */
+	ret = mt7996_mcu_enable_obss_spr(phy, UNI_CMD_SR_ENABLE,
+					 he_obss_pd->enable);
+	if (ret)
+		return ret;
+
+	if (sr_scene_detect || !he_obss_pd->enable)
+		return 0;
+
+	ret = mt7996_mcu_enable_obss_spr(phy, UNI_CMD_SR_ENABLE_TX, true);
+	if (ret)
+		return ret;
+
+	/* set SRG/non-SRG OBSS PD threshold */
+	ret = mt7996_mcu_set_obss_spr_pd(phy, he_obss_pd);
+	if (ret)
+		return ret;
+
+	/* Set SR prohibit */
+	ret = mt7996_mcu_set_obss_spr_siga(phy, vif, he_obss_pd);
+	if (ret)
+		return ret;
+
+	/* set SRG BSS color/BSSID bitmap */
+	return mt7996_mcu_set_obss_spr_bitmap(phy, he_obss_pd);
+}
+
 int mt7996_mcu_update_bss_color(struct mt7996_dev *dev, struct ieee80211_vif *vif,
 				struct cfg80211_he_bss_color *he_bss_color)
 {
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.h
index ff12a7168bd8..6084b2337598 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.h
@@ -617,6 +617,13 @@ enum {
 
 enum{
 	UNI_CMD_SR_ENABLE = 0x1,
+	UNI_CMD_SR_ENABLE_SD,
+	UNI_CMD_SR_ENABLE_MODE,
+	UNI_CMD_SR_ENABLE_DPD = 0x12,
+	UNI_CMD_SR_ENABLE_TX,
+	UNI_CMD_SR_SET_SRG_BITMAP = 0x80,
+	UNI_CMD_SR_SET_PARAM = 0xc1,
+	UNI_CMD_SR_SET_SIGA = 0xd0,
 };
 
 enum {
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h b/drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h
index 17dcd05d3459..725344791b4c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h
@@ -407,8 +407,8 @@ int mt7996_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 			  int enable);
 int mt7996_mcu_beacon_inband_discov(struct mt7996_dev *dev,
 				    struct ieee80211_vif *vif, u32 changed);
-int mt7996_mcu_add_obss_spr(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-			    bool enable);
+int mt7996_mcu_add_obss_spr(struct mt7996_phy *phy, struct ieee80211_vif *vif,
+			    struct ieee80211_he_obss_pd *he_obss_pd);
 int mt7996_mcu_add_rate_ctrl(struct mt7996_dev *dev, struct ieee80211_vif *vif,
 			     struct ieee80211_sta *sta, bool changed);
 int mt7996_set_channel(struct mt7996_phy *phy);
-- 
2.18.0



From wenst at chromium.org  Thu Dec  1 00:42:25 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu,  1 Dec 2022 16:42:25 +0800
Subject: [PATCH 0/4] arm64: dts: mediatek: Fix systimer clock description
Message-ID: <20221201084229.3464449-1-wenst@chromium.org>

Hi,

This series fixes the clock description for the systimer block. The
systimer is fed by the main 26 MHz oscillator, and internally divides
the clock, normally by 2.

However this ended up being modeled in various incorrect ways, such as
the clock divider being in the TOPCKGEN block, or as a standalone 13 MHz
oscillator.

This series fixes the description of the systimer clock input in an ABI
compatible way, i.e. the clock rate of the input clock remains the same
at 13 MHz. The clock is now modeled as a divide-by-2 fixed factor clock
being fed by the main oscillator.

An added benefit is that in Linux the systimer no longer requires the
main SoC clk driver to do an early init dance.

Please have a look.

The next step would be to fix up the systimer driver in a backward
compatible way and have it read the divider value from hardware.


Regards
ChenYu

Chen-Yu Tsai (4):
  arm64: dts: mediatek: mt8183: Fix systimer 13 MHz clock description
  arm64: dts: mediatek: mt8192: Fix systimer 13 MHz clock description
  arm64: dts: mediatek: mt8195: Fix systimer 13 MHz clock description
  arm64: dts: mediatek: mt8186: Fix systimer 13 MHz clock description

 arch/arm64/boot/dts/mediatek/mt8183.dtsi | 12 ++++++++++--
 arch/arm64/boot/dts/mediatek/mt8186.dtsi |  8 +++++---
 arch/arm64/boot/dts/mediatek/mt8192.dtsi | 12 ++++++++++--
 arch/arm64/boot/dts/mediatek/mt8195.dtsi | 11 ++++++++++-
 4 files changed, 35 insertions(+), 8 deletions(-)

-- 
2.38.1.584.g0f3c55d4c2-goog



From wenst at chromium.org  Thu Dec  1 00:42:26 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu,  1 Dec 2022 16:42:26 +0800
Subject: [PATCH 1/4] arm64: dts: mediatek: mt8183: Fix systimer 13 MHz clock description
In-Reply-To: <20221201084229.3464449-1-wenst@chromium.org>
References: <20221201084229.3464449-1-wenst@chromium.org>
Message-ID: <20221201084229.3464449-2-wenst@chromium.org>

The systimer block derives its 13 MHz clock by dividing the main 26 MHz
oscillator clock by 2 internally, not through the TOPCKGEN clock
controller.

On the MT8183 this divider is set either by power-on-reset or by the
bootloader. The bootloader may then make the divider unconfigurable to,
but can be read out by, the operating system.

Making the systimer block take the 26 MHz clock directly requires
changing the implementations. As an ABI compatible fix, change the
input clock of the systimer block a fixed factor divide-by-2 clock
that takes the 26 MHz oscillator as its input.

Fixes: 5bc8e2875ffb ("arm64: dts: mt8183: add systimer0 device node")
Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
---
 arch/arm64/boot/dts/mediatek/mt8183.dtsi | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8183.dtsi b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
index 19ff1babc359..0cbbaebe1213 100644
--- a/arch/arm64/boot/dts/mediatek/mt8183.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
@@ -585,6 +585,15 @@ psci {
 		method = "smc";
 	};
 
+	clk13m: fixed-factor-clock-13m {
+		compatible = "fixed-factor-clock";
+		#clock-cells = <0>;
+		clocks = <&clk26m>;
+		clock-div = <2>;
+		clock-mult = <1>;
+		clock-output-names = "clk13m";
+	};
+
 	clk26m: oscillator {
 		compatible = "fixed-clock";
 		#clock-cells = <0>;
@@ -968,8 +977,7 @@ systimer: timer at 10017000 {
 				     "mediatek,mt6765-timer";
 			reg = <0 0x10017000 0 0x1000>;
 			interrupts = <GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH>;
-			clocks = <&topckgen CLK_TOP_CLK13M>;
-			clock-names = "clk13m";
+			clocks = <&clk13m>;
 		};
 
 		iommu: iommu at 10205000 {
-- 
2.38.1.584.g0f3c55d4c2-goog



From wenst at chromium.org  Thu Dec  1 00:42:27 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu,  1 Dec 2022 16:42:27 +0800
Subject: [PATCH 2/4] arm64: dts: mediatek: mt8192: Fix systimer 13 MHz clock description
In-Reply-To: <20221201084229.3464449-1-wenst@chromium.org>
References: <20221201084229.3464449-1-wenst@chromium.org>
Message-ID: <20221201084229.3464449-3-wenst@chromium.org>

The systimer block derives its 13 MHz clock by dividing the main 26 MHz
oscillator clock by 2 internally, not through the TOPCKGEN clock
controller.

On the MT8192 this divider is fixed to /2 and is not configurable.

Making the systimer block take the 26 MHz clock directly requires
changing the implementations. As an ABI compatible fix, change the
input clock of the systimer block a fixed factor divide-by-2 clock
that takes the 26 MHz oscillator as its input.

Fixes: 48489980e27e ("arm64: dts: Add Mediatek SoC MT8192 and evaluation board dts and Makefile")
Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
---
 arch/arm64/boot/dts/mediatek/mt8192.dtsi | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
index fc39ccc0d4bf..ab4d4f605493 100644
--- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
@@ -29,6 +29,15 @@ aliases {
 		rdma4 = &rdma4;
 	};
 
+	clk13m: fixed-factor-clock-13m {
+		compatible = "fixed-factor-clock";
+		#clock-cells = <0>;
+		clocks = <&clk26m>;
+		clock-div = <2>;
+		clock-mult = <1>;
+		clock-output-names = "clk13m";
+	};
+
 	clk26m: oscillator0 {
 		compatible = "fixed-clock";
 		#clock-cells = <0>;
@@ -534,8 +543,7 @@ systimer: timer at 10017000 {
 				     "mediatek,mt6765-timer";
 			reg = <0 0x10017000 0 0x1000>;
 			interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH 0>;
-			clocks = <&topckgen CLK_TOP_CSW_F26M_D2>;
-			clock-names = "clk13m";
+			clocks = <&clk13m>;
 		};
 
 		pwrap: pwrap at 10026000 {
-- 
2.38.1.584.g0f3c55d4c2-goog



From wenst at chromium.org  Thu Dec  1 00:42:28 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu,  1 Dec 2022 16:42:28 +0800
Subject: [PATCH 3/4] arm64: dts: mediatek: mt8195: Fix systimer 13 MHz clock description
In-Reply-To: <20221201084229.3464449-1-wenst@chromium.org>
References: <20221201084229.3464449-1-wenst@chromium.org>
Message-ID: <20221201084229.3464449-4-wenst@chromium.org>

The systimer block derives its 13 MHz clock by dividing the main 26 MHz
oscillator clock by 2 internally, not through the TOPCKGEN clock
controller.

On the MT8195 this divider is set either by power-on-reset or by the
bootloader. The bootloader may then make the divider unconfigurable to,
but can be read out by, the operating system.

Making the systimer block take the 26 MHz clock directly requires
changing the implementations. As an ABI compatible fix, change the
input clock of the systimer block a fixed factor divide-by-2 clock
that takes the 26 MHz oscillator as its input.

Fixes: 37f2582883be ("arm64: dts: Add mediatek SoC mt8195 and evaluation board")
Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
---
 arch/arm64/boot/dts/mediatek/mt8195.dtsi | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index 5d31536f4c48..60e15833956e 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -248,6 +248,15 @@ sound: mt8195-sound {
 		status = "disabled";
 	};
 
+	clk13m: fixed-factor-clock-13m {
+		compatible = "fixed-factor-clock";
+		#clock-cells = <0>;
+		clocks = <&clk26m>;
+		clock-div = <2>;
+		clock-mult = <1>;
+		clock-output-names = "clk13m";
+	};
+
 	clk26m: oscillator-26m {
 		compatible = "fixed-clock";
 		#clock-cells = <0>;
@@ -705,7 +714,7 @@ systimer: timer at 10017000 {
 				     "mediatek,mt6765-timer";
 			reg = <0 0x10017000 0 0x1000>;
 			interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH 0>;
-			clocks = <&topckgen CLK_TOP_CLK26M_D2>;
+			clocks = <&clk13m>;
 		};
 
 		pwrap: pwrap at 10024000 {
-- 
2.38.1.584.g0f3c55d4c2-goog



From wenst at chromium.org  Thu Dec  1 00:42:29 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu,  1 Dec 2022 16:42:29 +0800
Subject: [PATCH 4/4] arm64: dts: mediatek: mt8186: Fix systimer 13 MHz clock description
In-Reply-To: <20221201084229.3464449-1-wenst@chromium.org>
References: <20221201084229.3464449-1-wenst@chromium.org>
Message-ID: <20221201084229.3464449-5-wenst@chromium.org>

The systimer block derives its 13 MHz clock by dividing the main 26 MHz
oscillator clock by 2 internally. The 13 MHz clock is not a separate
oscillator.

Fix this by making the 13 MHz clock a divide-by-2 fixed factor clock,
taking its input from the main 26 MHz oscillator.

Fixes: 2e78620b1350 ("arm64: dts: Add MediaTek MT8186 dts and evaluation board and Makefile")
Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
---
 arch/arm64/boot/dts/mediatek/mt8186.dtsi | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8186.dtsi b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
index 4a2f7ad3c6f0..209f26f12dbc 100644
--- a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
@@ -215,10 +215,12 @@ l3_0: l3-cache {
 		};
 	};
 
-	clk13m: oscillator-13m {
-		compatible = "fixed-clock";
+	clk13m: fixed-factor-clock-13m {
+		compatible = "fixed-factor-clock";
 		#clock-cells = <0>;
-		clock-frequency = <13000000>;
+		clocks = <&clk26m>;
+		clock-div = <2>;
+		clock-mult = <1>;
 		clock-output-names = "clk13m";
 	};
 
-- 
2.38.1.584.g0f3c55d4c2-goog



From angelogioacchino.delregno at collabora.com  Thu Dec  1 00:47:11 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 1 Dec 2022 09:47:11 +0100
Subject: [PATCH v3] mailbox: mtk-cmdq: Do not request irq until we are
 ready
In-Reply-To: <20221125-mtk-mailbox-v3-0-c4b635052b65@chromium.org>
References: <20221125-mtk-mailbox-v3-0-c4b635052b65@chromium.org>
Message-ID: <eee83c7f-441d-997c-de6b-56ea351f70cd@collabora.com>

Il 30/11/22 13:58, Ricardo Ribalda ha scritto:
> If the system comes from kexec() the peripheral might trigger an IRQ
> befoe we are ready for it. Triggering a crash due to an access to
> invalid memory.
> 
> Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From wenst at chromium.org  Thu Dec  1 00:56:03 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu, 1 Dec 2022 16:56:03 +0800
Subject: [PATCH resend] arm64: dts: mediatek: mt8192: Mark scp_adsp clock
 as broken
In-Reply-To: <2ec80bd8-dfef-d2e6-eb41-6e6088043e33@collabora.com>
References: <20221130031741.3176853-1-wenst@chromium.org> <2ec80bd8-dfef-d2e6-eb41-6e6088043e33@collabora.com>
Message-ID: <CAGXv+5E=X_hwg76=B_jqWrpieo8bR-=r8NLbNz2=JzE=kBwMWQ@mail.gmail.com>

On Wed, Nov 30, 2022 at 7:10 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Il 30/11/22 04:17, Chen-Yu Tsai ha scritto:
> > The scp_adsp clock controller is under the SCP_ADSP power domain. This
> > power domain is currently not supported nor defined.
> >
> > Mark the clock controller as broken for now, to avoid the system from
> > trying to access it, and causing the CPU or bus to stall.
> >
> > Fixes: 5d2b897bc6f5 ("arm64: dts: mediatek: Add mt8192 clock controllers")
> > Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
>
> ....or we can add the ADSP power domain to actually fix this properly, which looks
> like being a generally good idea :-)

Sure, but that and any driver changes have to be backported, or anything
touching the clocks will still break the system.

There's no reason we can't have both. I think having this one merged and
backported to stable first, then adding the SCP_ADSP power domain, and tying
it to the clock controller as a follow up addition works best.

What do you think?

ChenYu

> Allen, can you please take care of that?
>
> Thank you,
> Angelo
>
> > ---
> >   arch/arm64/boot/dts/mediatek/mt8192.dtsi | 2 ++
> >   1 file changed, 2 insertions(+)
> >
> > diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> > index 6b20376191a7..ef91941848ae 100644
> > --- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> > +++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> > @@ -575,6 +575,8 @@ scp_adsp: clock-controller at 10720000 {
> >                       compatible = "mediatek,mt8192-scp_adsp";
> >                       reg = <0 0x10720000 0 0x1000>;
> >                       #clock-cells = <1>;
> > +                     /* power domain dependency not upstreamed */
> > +                     status = "broken";
> >               };
> >
> >               uart0: serial at 11002000 {
> >
>


From wenst at chromium.org  Thu Dec  1 00:58:12 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu, 1 Dec 2022 16:58:12 +0800
Subject: [PATCH] arm64: dts: mt8192: Add adsp power domain controller
In-Reply-To: <20221201073328.1559-1-allen-kh.cheng@mediatek.com>
References: <20221201073328.1559-1-allen-kh.cheng@mediatek.com>
Message-ID: <CAGXv+5HtR-bAJJC2cdqiPAVbiKPT7oGd0Xj9UjbciXt+szE_pg@mail.gmail.com>

On Thu, Dec 1, 2022 at 3:33 PM Allen-KH Cheng
<allen-kh.cheng at mediatek.com> wrote:
>
> Add adsp power domain controller node for mt8192 SoC.
>
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> ---
> Ref: https://lore.kernel.org/all/2ec80bd8-dfef-d2e6-eb41-6e6088043e33 at collabora.com/
>     [Allen-KH Cheng <allen-kh.cheng at mediatek.com>]
> ---
> ---
>  arch/arm64/boot/dts/mediatek/mt8192.dtsi | 8 ++++++++
>  include/dt-bindings/power/mt8192-power.h | 1 +
>  2 files changed, 9 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> index 424fc89cc6f7..e71afba871fc 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> @@ -514,6 +514,14 @@
>                                                 };
>                                         };
>                                 };
> +
> +                               power-domain at MT8192_POWER_DOMAIN_ADSP {
> +                                       reg = <MT8192_POWER_DOMAIN_ADSP>;
> +                                       clocks = <&topckgen CLK_TOP_ADSP_SEL>;
> +                                       clock-names = "adsp";
> +                                       mediatek,infracfg = <&infracfg>;
> +                                       #power-domain-cells = <0>;
> +                               };
>                         };
>                 };
>

Please also tie the new power domain to the SCP_ADSP clock.

ChenYu

> diff --git a/include/dt-bindings/power/mt8192-power.h b/include/dt-bindings/power/mt8192-power.h
> index 4eaa53d7270a..63e81cd0d06d 100644
> --- a/include/dt-bindings/power/mt8192-power.h
> +++ b/include/dt-bindings/power/mt8192-power.h
> @@ -28,5 +28,6 @@
>  #define MT8192_POWER_DOMAIN_CAM_RAWA   18
>  #define MT8192_POWER_DOMAIN_CAM_RAWB   19
>  #define MT8192_POWER_DOMAIN_CAM_RAWC   20
> +#define MT8192_POWER_DOMAIN_ADSP       21
>
>  #endif /* _DT_BINDINGS_POWER_MT8192_POWER_H */
> --
> 2.18.0
>


From angelogioacchino.delregno at collabora.com  Thu Dec  1 01:02:24 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 1 Dec 2022 10:02:24 +0100
Subject: [PATCH resend] arm64: dts: mediatek: mt8192: Mark scp_adsp clock
 as broken
In-Reply-To: <CAGXv+5E=X_hwg76=B_jqWrpieo8bR-=r8NLbNz2=JzE=kBwMWQ@mail.gmail.com>
References: <20221130031741.3176853-1-wenst@chromium.org>
 <2ec80bd8-dfef-d2e6-eb41-6e6088043e33@collabora.com>
 <CAGXv+5E=X_hwg76=B_jqWrpieo8bR-=r8NLbNz2=JzE=kBwMWQ@mail.gmail.com>
Message-ID: <8806f4cf-2141-acb8-1f9d-cd6ade64756e@collabora.com>

Il 01/12/22 09:56, Chen-Yu Tsai ha scritto:
> On Wed, Nov 30, 2022 at 7:10 PM AngeloGioacchino Del Regno
> <angelogioacchino.delregno at collabora.com> wrote:
>>
>> Il 30/11/22 04:17, Chen-Yu Tsai ha scritto:
>>> The scp_adsp clock controller is under the SCP_ADSP power domain. This
>>> power domain is currently not supported nor defined.
>>>
>>> Mark the clock controller as broken for now, to avoid the system from
>>> trying to access it, and causing the CPU or bus to stall.
>>>
>>> Fixes: 5d2b897bc6f5 ("arm64: dts: mediatek: Add mt8192 clock controllers")
>>> Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
>>
>> ....or we can add the ADSP power domain to actually fix this properly, which looks
>> like being a generally good idea :-)
> 
> Sure, but that and any driver changes have to be backported, or anything
> touching the clocks will still break the system.
> 

I agree.

> There's no reason we can't have both. I think having this one merged and
> backported to stable first, then adding the SCP_ADSP power domain, and tying
> it to the clock controller as a follow up addition works best.
> 
> What do you think?
> 

I think that one reason to not have both is that we'd have to revert this commit
after the SCP_ADSP power domain is added (with the appropriate Fixes tags and/or
Cc stable)...

I'd expect that entire addition to be no more than 3 commits, including the dtsi
one... and if it comes out as I expect, we'd be solving that issue on all of the
affected older versions of the kernel - the right way.

Can we wait for... let's say, a day or two to check how that works, before taking
a final decision on this commit?

Cheers,
Angelo

> ChenYu
> 
>> Allen, can you please take care of that?
>>
>> Thank you,
>> Angelo
>>
>>> ---
>>>    arch/arm64/boot/dts/mediatek/mt8192.dtsi | 2 ++
>>>    1 file changed, 2 insertions(+)
>>>
>>> diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
>>> index 6b20376191a7..ef91941848ae 100644
>>> --- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
>>> +++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
>>> @@ -575,6 +575,8 @@ scp_adsp: clock-controller at 10720000 {
>>>                        compatible = "mediatek,mt8192-scp_adsp";
>>>                        reg = <0 0x10720000 0 0x1000>;
>>>                        #clock-cells = <1>;
>>> +                     /* power domain dependency not upstreamed */
>>> +                     status = "broken";
>>>                };
>>>
>>>                uart0: serial at 11002000 {
>>>
>>



From Trevor.Wu at mediatek.com  Thu Dec  1 00:43:35 2022
From: Trevor.Wu at mediatek.com (=?utf-8?B?VHJldm9yIFd1ICjlkLPmlofoia8p?=)
Date: Thu, 1 Dec 2022 08:43:35 +0000
Subject: [PATCH v2 03/12] ASoC: mediatek: mt8188: support audsys clock
In-Reply-To: <360a5f27-8abc-938c-04c7-13ea65b5a89f@collabora.com>
References: <20221021082719.18325-1-trevor.wu@mediatek.com>
	 <20221021082719.18325-4-trevor.wu@mediatek.com>
	 <de66f0e3-7694-7315-c896-9211259a1a17@collabora.com>
	 <776557c0fda5a538549ee0d4f4b7f482b0d69934.camel@mediatek.com>
	 <473d67ed-198f-82c6-9f32-5827c1f8c852@collabora.com>
	 <500f80b1ac84101af482bdfcb46671d523d51068.camel@mediatek.com>
	 <360a5f27-8abc-938c-04c7-13ea65b5a89f@collabora.com>
Message-ID: <7dfdb4866ccf7356c2a8beb0359e5b62df4f245f.camel@mediatek.com>

On Wed, 2022-10-26 at 10:18 +0200, AngeloGioacchino Del Regno wrote:
> Il 26/10/22 06:10, Trevor Wu (???) ha scritto:
> > On Tue, 2022-10-25 at 12:18 +0200, AngeloGioacchino Del Regno
> > wrote:
> > > Il 21/10/22 11:58, Trevor Wu (???) ha scritto:
> > > > On Fri, 2022-10-21 at 10:41 +0200, AngeloGioacchino Del Regno
> > > > wrote:
> > > > > Il 21/10/22 10:27, Trevor Wu ha scritto:
> > > > > > Add mt8188 audio cg clock control. Audio clock gates are
> > > > > > registered
> > > > > > to CCF
> > > > > > for reference count and clock parent management.
> > > > > > 
> > > > > > Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
> > > > > > ---
> > > > > >     sound/soc/mediatek/mt8188/mt8188-audsys-clk.c | 206
> > > > > > ++++++++++++++++++
> > > > > >     sound/soc/mediatek/mt8188/mt8188-audsys-clk.h |  15 ++
> > > > > >     .../soc/mediatek/mt8188/mt8188-audsys-clkid.h |  83
> > > > > > +++++++
> > > > > >     3 files changed, 304 insertions(+)
> > > > > >     create mode 100644 sound/soc/mediatek/mt8188/mt8188-
> > > > > > audsys-
> > > > > > clk.c
> > > > > >     create mode 100644 sound/soc/mediatek/mt8188/mt8188-
> > > > > > audsys-
> > > > > > clk.h
> > > > > >     create mode 100644 sound/soc/mediatek/mt8188/mt8188-
> > > > > > audsys-
> > > > > > clkid.h
> > > > > > 
> > > > > > diff --git a/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
> > > > > > b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
> > > > > > new file mode 100644
> > > > > > index 000000000000..1f294231d4c2
> > > > > > --- /dev/null
> > > > > > +++ b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
> > > > > > @@ -0,0 +1,206 @@
> > > > > > +// SPDX-License-Identifier: GPL-2.0
> > > > > > +/*
> > > > > > + * mt8188-audsys-clk.c  --  MediaTek 8188 audsys clock
> > > > > > control
> > > > > > + *
> > > > > > + * Copyright (c) 2022 MediaTek Inc.
> > > > > > + * Author: Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
> > > > > > + */
> > > > > > +
> > > > > > +#include <linux/clk.h>
> > > > > > +#include <linux/clk-provider.h>
> > > > > > +#include <linux/clkdev.h>
> > > > > > +#include "mt8188-afe-common.h"
> > > > > > +#include "mt8188-audsys-clk.h"
> > > > > > +#include "mt8188-audsys-clkid.h"
> > > > > > +#include "mt8188-reg.h"
> > > > > > +
> > > > > > +struct afe_gate {
> > > > > > +	int id;
> > > > > > +	const char *name;
> > > > > > +	const char *parent_name;
> > > > > > +	int reg;
> > > > > > +	u8 bit;
> > > > > > +	const struct clk_ops *ops;
> > > > > > +	unsigned long flags;
> > > > > > +	u8 cg_flags;
> > > > > > +};
> > > > > > +
> > > > > > +#define GATE_AFE_FLAGS(_id, _name, _parent, _reg, _bit,
> > > > > > _flags,
> > > > > > _cgflags) {\
> > > > > > +		.id = _id,					
> > > > > > \
> > > > > > +		.name = _name,					
> > > > > > \
> > > > > > +		.parent_name = _parent,				
> > > > > > \
> > > > > > +		.reg = _reg,					
> > > > > > \
> > > > > > +		.bit = _bit,					
> > > > > > \
> > > > > > +		.flags = _flags,				
> > > > > > \
> > > > > > +		.cg_flags = _cgflags,				
> > > > > > \
> > > > > > +	}
> > > > > > +
> > > > > > +#define GATE_AFE(_id, _name, _parent, _reg, _bit)		
> > > > > > \
> > > > > > +	GATE_AFE_FLAGS(_id, _name, _parent, _reg, _bit,		
> > > > > > \
> > > > > > +		       CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
> > > > > > CLK_GATE_SET_TO_DISABLE)
> > > > > 
> > > > > Can you please explain what's the reason for
> > > > > CLK_IGNORE_UNUSED
> > > > > here?
> > > > > Maybe we can solve some issue that you're facing in a cleaner
> > > > > way.
> > > > > 
> > > > > Regards,
> > > > > Angelo
> > > > 
> > > > Hi Angelo,
> > > > 
> > > > Because clk_disable_unused() calls clk_core_is_enabled(),
> > > > register
> > > > access happens in is_enabled() ops.
> > > > At the moment, the power for register access is not enabled, so
> > > > the
> > > > register read results in CPU hang.
> > > > 
> > > > That's why I added CLK_IGNORE_UNUSED here, but it can't resolve
> > > > all
> > > > issues. Actually, we met same problem when "cat
> > > > /sys/kernel/debug/clk/clk_summary" is used. We are still
> > > > suffering
> > > > the
> > > > problem.
> > > > 
> > > > I'm not sure if I can implement clk ops by myself, and exclude
> > > > the
> > > > registration of is_enabled() ops.
> > > > 
> > > 
> > > Is the power for register access enabled with a power domain?
> > > 
> > > Check drivers/clk/clk.c, grep for core->rpm_enabled.
> > > 
> > > If you enable runtime PM before registering the clocks, and you
> > > register them
> > > with the right struct device, the clock API will enable power for
> > > you
> > > before
> > > trying to read the clock enable status.
> > > 
> > > Regards,
> > > Angelo
> > > 
> > 
> > Hi Angelo,
> > 
> > I tried the way in MT8195, but it caused circular lock problem.
> > 
> > Because mtcmos depends on some clocks, clk_bulk_prepare_enable is
> > also
> > used in scpsys_power_on()[1].
> > If the clock also depends on the power domain, this results in the
> > circular lock problem.
> > That's why I don't bind the power domain with these clocks.
> > 
> 
> This is not supposed to happen... can you please give me a (MT8195)
> patch to
> reproduce the issue that you're seeing?
> 
> I would like to investigate that to check if I can come up with a
> good solution.
> 
> Thanks,
> Angelo


Hi Angelo,

Sorry for replying late.
The original implementation about clock depending on power domain was a
cusotomized request, and it's not based on upstream code base. So I
can't apply the implementation directly. I tried to implement the
suggested solution in upstream code, but I can't reproduce the problem
successfully. 

At the same time, we reviewed the difference between MT8195 and MT8188.
It's found that ADSP_INFRA should be kept ON to resolve the register
r/w access limitation in MT8188, so we can match the hardware design in
MT8195.

After discussing internally, we decided in favour of ADSP_INFRA
soloution. Althought the lock problem can't be seen, the new lock
relationship(prepare_lock -> genpd lock) is actually created. 

In conclusion, ADSP_INFRA will be kept always on and I will remove
CLK_IGNORE_UNUSED flag in V3.

Thanks,
Trevor

> 
> > [1]
> > 
https://urldefense.com/v3/__https://elixir.bootlin.com/linux/v6.1-rc2/source/drivers/soc/mediatek/mtk-pm-domains.c__;!!CTRNKA9wMg0ARbw!yVFCD-B4VZOxDXTGgDtpB0mJbVoY9tHODeICxthAC33lXMq6LRVTGS-4V-Dj129_cA$
> >  
> > 
> > Thanks,
> > Trevor
> > 
> > 
> 
> 
> 

From angelogioacchino.delregno at collabora.com  Thu Dec  1 01:07:28 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 1 Dec 2022 10:07:28 +0100
Subject: [PATCH] arm64: dts: mt8192: Add adsp power domain controller
In-Reply-To: <20221201073328.1559-1-allen-kh.cheng@mediatek.com>
References: <20221201073328.1559-1-allen-kh.cheng@mediatek.com>
Message-ID: <ba14a46f-477f-70af-761d-696fe8a4f41c@collabora.com>

Il 01/12/22 08:33, Allen-KH Cheng ha scritto:
> Add adsp power domain controller node for mt8192 SoC.
> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> ---
> Ref: https://lore.kernel.org/all/2ec80bd8-dfef-d2e6-eb41-6e6088043e33 at collabora.com/
>      [Allen-KH Cheng <allen-kh.cheng at mediatek.com>]
> ---
> ---
>   arch/arm64/boot/dts/mediatek/mt8192.dtsi | 8 ++++++++
>   include/dt-bindings/power/mt8192-power.h | 1 +
>   2 files changed, 9 insertions(+)
> 

Allen, thanks for this one, but it's incomplete...

First of all, you must add the power domain on the driver itself, specifically,
in drivers/soc/mediatek/mt8192-pm-domains.h - otherwise this change will have no
effect!

...Then, as Chen-Yu said, you should also add the power domain to the scp_adsp
clock node as that's solving the lockup issue...

.......and last, but not least: we need a Fixes tag to backport this fix, here
and on the commit that adds the missing power domain in the driver.

Thanks,
Angelo

> diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> index 424fc89cc6f7..e71afba871fc 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> @@ -514,6 +514,14 @@
>   						};
>   					};
>   				};
> +
> +				power-domain at MT8192_POWER_DOMAIN_ADSP {
> +					reg = <MT8192_POWER_DOMAIN_ADSP>;
> +					clocks = <&topckgen CLK_TOP_ADSP_SEL>;
> +					clock-names = "adsp";
> +					mediatek,infracfg = <&infracfg>;
> +					#power-domain-cells = <0>;
> +				};
>   			};
>   		};
>   
> diff --git a/include/dt-bindings/power/mt8192-power.h b/include/dt-bindings/power/mt8192-power.h
> index 4eaa53d7270a..63e81cd0d06d 100644
> --- a/include/dt-bindings/power/mt8192-power.h
> +++ b/include/dt-bindings/power/mt8192-power.h
> @@ -28,5 +28,6 @@
>   #define MT8192_POWER_DOMAIN_CAM_RAWA	18
>   #define MT8192_POWER_DOMAIN_CAM_RAWB	19
>   #define MT8192_POWER_DOMAIN_CAM_RAWC	20
> +#define MT8192_POWER_DOMAIN_ADSP	21
>   
>   #endif /* _DT_BINDINGS_POWER_MT8192_POWER_H */
> 



From wenst at chromium.org  Thu Dec  1 01:10:41 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu, 1 Dec 2022 17:10:41 +0800
Subject: [PATCH] arm64: dts: mt8192: Add adsp power domain controller
In-Reply-To: <ba14a46f-477f-70af-761d-696fe8a4f41c@collabora.com>
References: <20221201073328.1559-1-allen-kh.cheng@mediatek.com> <ba14a46f-477f-70af-761d-696fe8a4f41c@collabora.com>
Message-ID: <CAGXv+5Gg6ozYQcp_NPrAiH1kF-ZkfjVZhQZVhLnbSmjQBwsFwQ@mail.gmail.com>

On Thu, Dec 1, 2022 at 5:07 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Il 01/12/22 08:33, Allen-KH Cheng ha scritto:
> > Add adsp power domain controller node for mt8192 SoC.
> >
> > Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> > ---
> > Ref: https://lore.kernel.org/all/2ec80bd8-dfef-d2e6-eb41-6e6088043e33 at collabora.com/
> >      [Allen-KH Cheng <allen-kh.cheng at mediatek.com>]
> > ---
> > ---
> >   arch/arm64/boot/dts/mediatek/mt8192.dtsi | 8 ++++++++
> >   include/dt-bindings/power/mt8192-power.h | 1 +
> >   2 files changed, 9 insertions(+)
> >
>
> Allen, thanks for this one, but it's incomplete...
>
> First of all, you must add the power domain on the driver itself, specifically,
> in drivers/soc/mediatek/mt8192-pm-domains.h - otherwise this change will have no
> effect!

Actually it's worse. The driver doesn't know about the new power domain,
and so it will fail to probe. We might need to make the power domain driver
fail gracefully and skip unknown power domains.

ChenYu

> ...Then, as Chen-Yu said, you should also add the power domain to the scp_adsp
> clock node as that's solving the lockup issue...
>
> .......and last, but not least: we need a Fixes tag to backport this fix, here
> and on the commit that adds the missing power domain in the driver.
>
> Thanks,
> Angelo
>
> > diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> > index 424fc89cc6f7..e71afba871fc 100644
> > --- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> > +++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> > @@ -514,6 +514,14 @@
> >                                               };
> >                                       };
> >                               };
> > +
> > +                             power-domain at MT8192_POWER_DOMAIN_ADSP {
> > +                                     reg = <MT8192_POWER_DOMAIN_ADSP>;
> > +                                     clocks = <&topckgen CLK_TOP_ADSP_SEL>;
> > +                                     clock-names = "adsp";
> > +                                     mediatek,infracfg = <&infracfg>;
> > +                                     #power-domain-cells = <0>;
> > +                             };
> >                       };
> >               };
> >
> > diff --git a/include/dt-bindings/power/mt8192-power.h b/include/dt-bindings/power/mt8192-power.h
> > index 4eaa53d7270a..63e81cd0d06d 100644
> > --- a/include/dt-bindings/power/mt8192-power.h
> > +++ b/include/dt-bindings/power/mt8192-power.h
> > @@ -28,5 +28,6 @@
> >   #define MT8192_POWER_DOMAIN_CAM_RAWA        18
> >   #define MT8192_POWER_DOMAIN_CAM_RAWB        19
> >   #define MT8192_POWER_DOMAIN_CAM_RAWC        20
> > +#define MT8192_POWER_DOMAIN_ADSP     21
> >
> >   #endif /* _DT_BINDINGS_POWER_MT8192_POWER_H */
> >
>


From wenst at chromium.org  Thu Dec  1 01:12:21 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu, 1 Dec 2022 17:12:21 +0800
Subject: [PATCH v5 0/3] Add vcodec lat and core nodes for mt8192
In-Reply-To: <20221128143832.25584-1-allen-kh.cheng@mediatek.com>
References: <20221128143832.25584-1-allen-kh.cheng@mediatek.com>
Message-ID: <CAGXv+5HVVYb2RGE+dJ7JWpoJ5_QDnvvFEn=xo+17it-OFDCMNg@mail.gmail.com>

On Mon, Nov 28, 2022 at 10:38 PM Allen-KH Cheng
<allen-kh.cheng at mediatek.com> wrote:
>
> This series is based on linux-next.
>
> Change from v4:
>  - Add patch for removing dma-ranges
>  - Update child names to video-codec
>  - Update patch title and message
>
> Change from v3:
>  - Drop `vcodec_lat:` and `vcodec_core:`
>
> Change from v2:
>  - Add a dt-bindings patch for changing "vcodec" to "video-codec"
>  - Rename child names for vcodec lat and core nodes
>
> Change from v1:
>  - Replace node names with video-codec
>   [Allen-KH Cheng <allen-kh.cheng at mediatek.com>]
>
> Allen-KH Cheng (3):
>   media: dt-bindings: media: mediatek: Rename child node names for
>     decoder
>   media: dt-bindings: media: mediatek: Remove "dma-ranges" property for
>     decoder
>   arm64: dts: mt8192: Add video-codec nodes

Whole series is:

Tested-by: Chen-Yu Tsai <wenst at chromium.org>


From arinc.unal at arinc9.com  Thu Dec  1 01:14:21 2022
From: arinc.unal at arinc9.com (=?UTF-8?B?QXLEsW7DpyDDnE5BTA==?=)
Date: Thu, 1 Dec 2022 12:14:21 +0300
Subject: [PATCH 0/5] remove label = "cpu" from DSA dt-binding
In-Reply-To: <20221130141040.32447-1-arinc.unal@arinc9.com>
References: <20221130141040.32447-1-arinc.unal@arinc9.com>
Message-ID: <b5ed90cf-1b5d-9306-7b06-ded7c331ca2a@arinc9.com>

I'm sending a more specific mail to make sure this series doesn't fall 
through the cracks like Andrew said. I'd like this merged this week 
before the merge window closes.

Jakub, please take patch 1.
Arnd, please take patch 2 and 3.
Thomas, please take patch 4.
Michael, please take patch 5.

Ar?n?

On 30.11.2022 17:10, Ar?n? ?NAL wrote:
> Hello folks,
> 
> With this patch series, we're completely getting rid of 'label = "cpu";'
> which is not used by the DSA dt-binding at all.
> 
> Information for taking the patches for maintainers:
> Patch 1: netdev maintainers (based off netdev/net-next.git main)
> Patch 2-3: SoC maintainers (based off soc/soc.git soc/dt)
> Patch 4: MIPS maintainers (based off mips/linux.git mips-next)
> Patch 5: PowerPC maintainers (based off powerpc/linux.git next-test)
> 
> I've been meaning to submit this for a few months. Find the relevant
> conversation here:
> https://lore.kernel.org/netdev/20220913155408.GA3802998-robh at kernel.org/
> 
> Here's how I did it, for the interested (or suggestions):
> 
> Find the platforms which have got 'label = "cpu";' defined.
> grep -rnw . -e 'label = "cpu";'
> 
> Remove the line where 'label = "cpu";' is included.
> sed -i /'label = "cpu";'/,+d arch/arm/boot/dts/*
> sed -i /'label = "cpu";'/,+d arch/arm64/boot/dts/freescale/*
> sed -i /'label = "cpu";'/,+d arch/arm64/boot/dts/marvell/*
> sed -i /'label = "cpu";'/,+d arch/arm64/boot/dts/mediatek/*
> sed -i /'label = "cpu";'/,+d arch/arm64/boot/dts/rockchip/*
> sed -i /'label = "cpu";'/,+d arch/mips/boot/dts/qca/*
> sed -i /'label = "cpu";'/,+d arch/mips/boot/dts/ralink/*
> sed -i /'label = "cpu";'/,+d arch/powerpc/boot/dts/turris1x.dts
> sed -i /'label = "cpu";'/,+d Documentation/devicetree/bindings/net/qca,ar71xx.yaml
> 
> Restore the symlink files which typechange after running sed.
> 
> Ar?n? ?NAL (5):
>    dt-bindings: net: qca,ar71xx: remove label = "cpu" from examples
>    arm: dts: remove label = "cpu" from DSA dt-binding
>    arm64: dts: remove label = "cpu" from DSA dt-binding
>    mips: dts: remove label = "cpu" from DSA dt-binding
>    powerpc: dts: remove label = "cpu" from DSA dt-binding
> 
> 


From peter.wang at mediatek.com  Thu Dec  1 01:19:28 2022
From: peter.wang at mediatek.com (=?utf-8?B?UGV0ZXIgV2FuZyAo546L5L+h5Y+LKQ==?=)
Date: Thu, 1 Dec 2022 09:19:28 +0000
Subject: [PATCH v1] ufs: core: wlun suspend SSU fail recovery
In-Reply-To: <98bfafd3-c7b7-89b5-497a-aa694d0152dd@intel.com>
References: <20221101142410.31463-1-peter.wang@mediatek.com>
	 <98bfafd3-c7b7-89b5-497a-aa694d0152dd@intel.com>
Message-ID: <b773dc509936a40ec43cabeea252ff73305bd7fa.camel@mediatek.com>

On Wed, 2022-11-30 at 12:17 +0200, Adrian Hunter wrote:
> On 1/11/22 16:24, peter.wang at mediatek.com wrote:
> > From: Peter Wang <peter.wang at mediatek.com>
> > 
> > When SSU fail in wlun suspend flow, trigger error handlder and
> 
> handlder -> handler

will fix next versio, thanks.

> 
> Why / how does SSU fail?
> 

Unknow, it is seldom and we cannot catch fail the failure scenarios. We
suspect is maybe the device problem which response wrong sense code.
So, I think the driver is better to cover this error.
Here is our cmd histroy log with 3 times SSU fail, and retrun busy to
do error handler.

 26-c(1),  2576.085601525, 9396,18, rs, ret=-16, time_us=   41136,
pwr_mode=1, link_status=1
 25-r(1),  2576.085027371, 9396,
1,0x1b,t=53,db:0x       0,is:0x   80000,crypt:0,0,lba=         0,len=  
  -1,	31308
 24-r(1),  2576.084996910, 9396,
0,0x1b,t=53,db:0x       0,is:0x   80000,crypt:0,0,lba=         0,len=  
  -1,	0
 23-r(1),  2576.084919679, 9396,
1,0x1b,t=52,db:0x       0,is:0x   80000,crypt:0,0,lba=         0,len=  
  -1,	32846
 22-r(1),  2576.084887679, 9396,
0,0x1b,t=52,db:0x       0,is:0x   80000,crypt:0,0,lba=         0,len=  
  -1,	0
 21-r(1),  2576.084704295,    0,
1,0x1b,t=55,db:0x       0,is:0x   80000,crypt:0,0,lba=         0,len=  
  -1,	39777539
 20-r(1),  2576.044927679, 9396,
0,0x1b,t=55,db:0x       0,is:0x   80000,crypt:0,0,lba=         0,len=  
  -1,	0


> > return busy to break the suspend.
> > If not, wlun runtime pm status become error and the consumer will
> > stuck in runtime suspend status.
> > 
> > Signed-off-by: Peter Wang <peter.wang at mediatek.com>
> > ---
> >  drivers/ufs/core/ufshcd.c | 16 +++++++++++++++-
> >  1 file changed, 15 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> > index b1f59a5fe632..2f2d3d5d8684 100644
> > --- a/drivers/ufs/core/ufshcd.c
> > +++ b/drivers/ufs/core/ufshcd.c
> > @@ -8970,6 +8970,7 @@ static int __ufshcd_wl_suspend(struct ufs_hba
> > *hba, enum ufs_pm_op pm_op)
> >  	enum ufs_pm_level pm_lvl;
> >  	enum ufs_dev_pwr_mode req_dev_pwr_mode;
> >  	enum uic_link_state req_link_state;
> > +	unsigned long flags;
> >  
> >  	hba->pm_op_in_progress = true;
> >  	if (pm_op != UFS_SHUTDOWN_PM) {
> > @@ -9049,8 +9050,21 @@ static int __ufshcd_wl_suspend(struct
> > ufs_hba *hba, enum ufs_pm_op pm_op)
> >  
> >  		if (!hba->dev_info.b_rpm_dev_flush_capable) {
> >  			ret = ufshcd_set_dev_pwr_mode(hba,
> > req_dev_pwr_mode);
> > -			if (ret)
> > +			if (ret) {
> > +				/*
> > +				 * If retrun err in suspend flow, IO
> > will hang.
> 
> retrun -> return

will fix next version, thanks

> 
> > +				 * Trigger error handler and break
> > suspend for
> > +				 * error recovery.
> > +				 */
> > +				spin_lock_irqsave(hba->host->host_lock, 
> > flags);
> > +				hba->force_reset = true;
> > +				ufshcd_schedule_eh_work(hba);
> 
> __ufshcd_wl_suspend() is also used for shutdown and poweroff
> where scheduling EH is not appropriate.

Will check pm_op and bypass UFS_SHUTDOWN_PM next version, thanks.

> 
> > +				spin_unlock_irqrestore(hba->host-
> > >host_lock,
> > +					flags);
> > +
> > +				ret = -EBUSY;
> >  				goto enable_scaling;
> > +			}
> >  		}
> >  	}
> >  
> 
> 

From angelogioacchino.delregno at collabora.com  Thu Dec  1 01:31:41 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 1 Dec 2022 10:31:41 +0100
Subject: [PATCH 1/4] arm64: dts: mediatek: mt8183: Fix systimer 13 MHz
 clock description
In-Reply-To: <20221201084229.3464449-2-wenst@chromium.org>
References: <20221201084229.3464449-1-wenst@chromium.org>
 <20221201084229.3464449-2-wenst@chromium.org>
Message-ID: <5250d7d3-ff46-e08d-926c-4efd92390d88@collabora.com>

Il 01/12/22 09:42, Chen-Yu Tsai ha scritto:
> The systimer block derives its 13 MHz clock by dividing the main 26 MHz
> oscillator clock by 2 internally, not through the TOPCKGEN clock
> controller.
> 
> On the MT8183 this divider is set either by power-on-reset or by the
> bootloader. The bootloader may then make the divider unconfigurable to,
> but can be read out by, the operating system.
> 
> Making the systimer block take the 26 MHz clock directly requires
> changing the implementations. As an ABI compatible fix, change the
> input clock of the systimer block a fixed factor divide-by-2 clock
> that takes the 26 MHz oscillator as its input.
> 
> Fixes: 5bc8e2875ffb ("arm64: dts: mt8183: add systimer0 device node")
> Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>

I generally not just like - but *love* - this change, I had that in my mind
for a couple of months now and forgot about it because reasons.

There's just one thing that, since we're doing this now, we can clarify (and
that's important to avoid questions like "why isn't this board-specific"):
the 26MHz clock "clk26m" oscillator that we're using for the system timers
is a SoC-provided clock, and its name is "SYSCLK" as in "System bus clock".

I know that your target is to describe how we get from 26M to 13M, but at
this point it may be worth it to use the right names to help preventing
confusion about that clock not being an external crystal on the board but
something internal to the SoC.

So, I propose:
1. Change `clk26m: oscillator` to `clk26m: sysclk` or `clk26m: sysclk-26m`;
2. Add the divider as `clk13m: sysclk-div2`.

What do you think?

Cheers,
Angelo

> ---
>   arch/arm64/boot/dts/mediatek/mt8183.dtsi | 12 ++++++++++--
>   1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183.dtsi b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
> index 19ff1babc359..0cbbaebe1213 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
> @@ -585,6 +585,15 @@ psci {
>   		method = "smc";
>   	};
>   
> +	clk13m: fixed-factor-clock-13m {
> +		compatible = "fixed-factor-clock";
> +		#clock-cells = <0>;
> +		clocks = <&clk26m>;
> +		clock-div = <2>;
> +		clock-mult = <1>;
> +		clock-output-names = "clk13m";
> +	};
> +
>   	clk26m: oscillator {
>   		compatible = "fixed-clock";
>   		#clock-cells = <0>;
> @@ -968,8 +977,7 @@ systimer: timer at 10017000 {
>   				     "mediatek,mt6765-timer";
>   			reg = <0 0x10017000 0 0x1000>;
>   			interrupts = <GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH>;
> -			clocks = <&topckgen CLK_TOP_CLK13M>;
> -			clock-names = "clk13m";
> +			clocks = <&clk13m>;
>   		};
>   
>   		iommu: iommu at 10205000 {




From nobuhiro1.iwamatsu at toshiba.co.jp  Thu Dec  1 01:30:27 2022
From: nobuhiro1.iwamatsu at toshiba.co.jp (nobuhiro1.iwamatsu at toshiba.co.jp)
Date: Thu, 1 Dec 2022 09:30:27 +0000
Subject: [PATCH v2 01/11] pwm: Make .get_state() callback return an error
 code
In-Reply-To: <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
 <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
Message-ID: <TYWPR01MB94202D75C7B2B4E5DB39B77E92149@TYWPR01MB9420.jpnprd01.prod.outlook.com>

> -----Original Message-----
> From: Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de>
> Sent: Thursday, December 1, 2022 12:22 AM
> To: Thierry Reding <thierry.reding at gmail.com>
> Cc: Conor Dooley <conor.dooley at microchip.com>; Linus Walleij
> <linus.walleij at linaro.org>; Bartosz Golaszewski <brgl at bgdev.pl>; Douglas
> Anderson <dianders at chromium.org>; Pavel Machek <pavel at ucw.cz>;
> Claudiu Beznea <claudiu.beznea at microchip.com>; Nicolas Ferre
> <nicolas.ferre at microchip.com>; Alexandre Belloni
> <alexandre.belloni at bootlin.com>; Ray Jui <rjui at broadcom.com>; Scott
> Branden <sbranden at broadcom.com>; Broadcom internal kernel review list
> <bcm-kernel-feedback-list at broadcom.com>; Benson Leung
> <bleung at chromium.org>; Guenter Roeck <groeck at chromium.org>; Shawn
> Guo <shawnguo at kernel.org>; Sascha Hauer <s.hauer at pengutronix.de>;
> Pengutronix Kernel Team <kernel at pengutronix.de>; Fabio Estevam
> <festevam at gmail.com>; NXP Linux Team <linux-imx at nxp.com>; Kevin
> Hilman <khilman at baylibre.com>; Jerome Brunet <jbrunet at baylibre.com>;
> Martin Blumenstingl <martin.blumenstingl at googlemail.com>; Matthias
> Brugger <matthias.bgg at gmail.com>; Florian Fainelli <f.fainelli at gmail.com>;
> Heiko Stuebner <heiko at sntech.de>; Palmer Dabbelt
> <palmer at dabbelt.com>; Paul Walmsley <paul.walmsley at sifive.com>;
> Michael Walle <michael at walle.cc>; Orson Zhai <orsonzhai at gmail.com>;
> Baolin Wang <baolin.wang at linux.alibaba.com>; Chunyan Zhang
> <zhang.lyra at gmail.com>; Fabrice Gasnier <fabrice.gasnier at foss.st.com>;
> Maxime Coquelin <mcoquelin.stm32 at gmail.com>; Alexandre Torgue
> <alexandre.torgue at foss.st.com>; Chen-Yu Tsai <wens at csie.org>; Samuel
> Holland <samuel at sholland.org>; Hammer Hsieh
> <hammerh0314 at gmail.com>; iwamatsu nobuhiro(?? ?? ???????
> ?) <nobuhiro1.iwamatsu at toshiba.co.jp>; Sean Anderson
> <sean.anderson at seco.com>; Michal Simek <michal.simek at xilinx.com>;
> Bjorn Andersson <andersson at kernel.org>; Stephen Boyd
> <swboyd at chromium.org>; Matthias Kaehlcke <mka at chromium.org>; Satya
> Priya <quic_c_skakit at quicinc.com>; linux-pwm at vger.kernel.org;
> linux-gpio at vger.kernel.org; dri-devel at lists.freedesktop.org;
> linux-leds at vger.kernel.org; linux-arm-kernel at lists.infradead.org;
> chrome-platform at lists.linux.dev; linux-amlogic at lists.infradead.org;
> linux-mediatek at lists.infradead.org; linux-rpi-kernel at lists.infradead.org;
> linux-rockchip at lists.infradead.org; linux-riscv at lists.infradead.org;
> linux-stm32 at st-md-mailman.stormreply.com; linux-sunxi at lists.linux.dev
> Subject: [PATCH v2 01/11] pwm: Make .get_state() callback return an error
> code
> 
> .get_state() might fail in some cases. To make it possible that a driver signals
> such a failure change the prototype of .get_state() to return an error code.
> 
> This patch was created using coccinelle and the following semantic patch:
> 
> @p1@
> identifier getstatefunc;
> identifier driver;
> @@
>  struct pwm_ops driver = {
>         ...,
>         .get_state = getstatefunc
>         ,...
>  };
> 
> @p2@
> identifier p1.getstatefunc;
> identifier chip, pwm, state;
> @@
> -void
> +int
>  getstatefunc(struct pwm_chip *chip, struct pwm_device *pwm, struct
> pwm_state *state)  {
>    ...
> -  return;
> +  return 0;
>    ...
>  }
> 
> plus the actual change of the prototype in include/linux/pwm.h (plus some
> manual fixing of indentions and empty lines).
> 
> So for now all drivers return success unconditionally. They are adapted in the
> following patches to make the changes easier reviewable.
> 
> Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de>

<snip>

> a/drivers/pwm/pwm-visconti.c b/drivers/pwm/pwm-visconti.c index
> 927c4cbb1daf..e3fb79b3e2a7 100644
> --- a/drivers/pwm/pwm-visconti.c
> +++ b/drivers/pwm/pwm-visconti.c
> @@ -103,8 +103,8 @@ static int visconti_pwm_apply(struct pwm_chip *chip,
> struct pwm_device *pwm,
>  	return 0;
>  }
> 
> -static void visconti_pwm_get_state(struct pwm_chip *chip, struct
> pwm_device *pwm,
> -				   struct pwm_state *state)
> +static int visconti_pwm_get_state(struct pwm_chip *chip, struct
> pwm_device *pwm,
> +				  struct pwm_state *state)
>  {
>  	struct visconti_pwm_chip *priv = visconti_pwm_from_chip(chip);
>  	u32 period, duty, pwmc0, pwmc0_clk;
> @@ -122,6 +122,8 @@ static void visconti_pwm_get_state(struct pwm_chip
> *chip, struct pwm_device *pwm
>  		state->polarity = PWM_POLARITY_NORMAL;
> 
>  	state->enabled = true;
> +
> +	return 0;
>  }
> 
>  static const struct pwm_ops visconti_pwm_ops = { diff --git

<snip>

for the Visconti pwd:
Reviewed-by: Nobuhiro Iwamatsu <nobuhiro1.iwamatsu at toshiba.co.jp>


From peter.wang at mediatek.com  Thu Dec  1 01:31:58 2022
From: peter.wang at mediatek.com (=?utf-8?B?UGV0ZXIgV2FuZyAo546L5L+h5Y+LKQ==?=)
Date: Thu, 1 Dec 2022 09:31:58 +0000
Subject: [PATCH v1] ufs: core: wlun suspend SSU fail recovery
In-Reply-To: <5e00ce60-3859-4964-11f7-e036f6dda56a@acm.org>
References: <20221101142410.31463-1-peter.wang@mediatek.com>
	 <98bfafd3-c7b7-89b5-497a-aa694d0152dd@intel.com>
	 <5e00ce60-3859-4964-11f7-e036f6dda56a@acm.org>
Message-ID: <cc82a2ce702cd14c8373ce57308208bbb8756696.camel@mediatek.com>

On Wed, 2022-11-30 at 09:49 -0800, Bart Van Assche wrote:
> On 11/30/22 02:17, Adrian Hunter wrote:
> > On 1/11/22 16:24, peter.wang at mediatek.com wrote:
> > > From: Peter Wang <peter.wang at mediatek.com>
> > > 
> > > When SSU fail in wlun suspend flow, trigger error handlder and
> > 
> > handlder -> handler
> > 
> > Why / how does SSU fail?
> 
> I'm not sure but the issue that Peter is trying to fix with this
> patch 
> may already have been fixed by my patch series "Fix a deadlock in
> the 
> UFS driver".
> 
> Thanks,
> 
> Bart.
> 

Hi Bart,

Yes, it may also can fix by 
"[v4,07/10] scsi: ufs: Try harder to change the power mode"

But I am not sure if any outher corner case SSU will got antother err
which retry canoot fix? (ex, device always return same error sense code
which host is not expect to receive again, again and again let retry
sill fail)

By the way, in wl suspend flow, not only SSU, but also enter
hibern8(0x17) could got fail. I think it is better fix in both fail
case.
Hera is our 0x17 timeout fail log and runtime suspend retrun timeout.

473-c(1), 21140.355276017,31742,18, rs, ret=-110, time_us= 2892755,
pwr_mode=2, link_status=3
472-u(1), 21139.829423708,31742, 7,0x17,arg1=0x0,arg2=0x0,arg3=0x0,	
0
471-r(1), 21139.829361861,    0,
1,0x1b,t=46,db:0x       0,is:0x   80000,crypt:0,0,lba=         0,len=  
  -1,	1738384
470-r(1), 21139.827623708,31742,
0,0x1b,t=46,db:0x       0,is:0x   80000,crypt:0,0,lba=         0,len=  
  -1,	0


Thanks.
Peter



From angelogioacchino.delregno at collabora.com  Thu Dec  1 01:39:32 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 1 Dec 2022 10:39:32 +0100
Subject: [PATCH] arm64: dts: mt8192: Add adsp power domain controller
In-Reply-To: <CAGXv+5Gg6ozYQcp_NPrAiH1kF-ZkfjVZhQZVhLnbSmjQBwsFwQ@mail.gmail.com>
References: <20221201073328.1559-1-allen-kh.cheng@mediatek.com>
 <ba14a46f-477f-70af-761d-696fe8a4f41c@collabora.com>
 <CAGXv+5Gg6ozYQcp_NPrAiH1kF-ZkfjVZhQZVhLnbSmjQBwsFwQ@mail.gmail.com>
Message-ID: <8ae2a510-abf6-6e1b-9893-293db7d930e7@collabora.com>

Il 01/12/22 10:10, Chen-Yu Tsai ha scritto:
> On Thu, Dec 1, 2022 at 5:07 PM AngeloGioacchino Del Regno
> <angelogioacchino.delregno at collabora.com> wrote:
>>
>> Il 01/12/22 08:33, Allen-KH Cheng ha scritto:
>>> Add adsp power domain controller node for mt8192 SoC.
>>>
>>> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
>>> ---
>>> Ref: https://lore.kernel.org/all/2ec80bd8-dfef-d2e6-eb41-6e6088043e33 at collabora.com/
>>>       [Allen-KH Cheng <allen-kh.cheng at mediatek.com>]
>>> ---
>>> ---
>>>    arch/arm64/boot/dts/mediatek/mt8192.dtsi | 8 ++++++++
>>>    include/dt-bindings/power/mt8192-power.h | 1 +
>>>    2 files changed, 9 insertions(+)
>>>
>>
>> Allen, thanks for this one, but it's incomplete...
>>
>> First of all, you must add the power domain on the driver itself, specifically,
>> in drivers/soc/mediatek/mt8192-pm-domains.h - otherwise this change will have no
>> effect!
> 
> Actually it's worse. The driver doesn't know about the new power domain,
> and so it will fail to probe. We might need to make the power domain driver
> fail gracefully and skip unknown power domains.
> 

Right. It's worse. I don't know, though, if gracefully skipping unknown power
domains in the driver would be a good decision... as sometimes error messages
go unnoticed.

When the platform "explodes" instead, you're forced to read that log carefully
and get it working again... Anyway, I'm only thinking out loud, nothing less and
nothing more than that :-)

By the way, we can probably expand on that topic a bit later, as it's outside of
the scope of this specific change.

Back to topic, if we get one series containing both changes (devicetree, bindings
and driver) with the right Fixes tags and/or Cc stable, we shouldn't have such
issue on backports so we can probably ignore that potential issue, I think? :-)

Cheers,
Angelo

> ChenYu
> 
>> ...Then, as Chen-Yu said, you should also add the power domain to the scp_adsp
>> clock node as that's solving the lockup issue...
>>
>> .......and last, but not least: we need a Fixes tag to backport this fix, here
>> and on the commit that adds the missing power domain in the driver.
>>
>> Thanks,
>> Angelo
>>
>>> diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
>>> index 424fc89cc6f7..e71afba871fc 100644
>>> --- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
>>> +++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
>>> @@ -514,6 +514,14 @@
>>>                                                };
>>>                                        };
>>>                                };
>>> +
>>> +                             power-domain at MT8192_POWER_DOMAIN_ADSP {
>>> +                                     reg = <MT8192_POWER_DOMAIN_ADSP>;
>>> +                                     clocks = <&topckgen CLK_TOP_ADSP_SEL>;
>>> +                                     clock-names = "adsp";
>>> +                                     mediatek,infracfg = <&infracfg>;
>>> +                                     #power-domain-cells = <0>;
>>> +                             };
>>>                        };
>>>                };
>>>
>>> diff --git a/include/dt-bindings/power/mt8192-power.h b/include/dt-bindings/power/mt8192-power.h
>>> index 4eaa53d7270a..63e81cd0d06d 100644
>>> --- a/include/dt-bindings/power/mt8192-power.h
>>> +++ b/include/dt-bindings/power/mt8192-power.h
>>> @@ -28,5 +28,6 @@
>>>    #define MT8192_POWER_DOMAIN_CAM_RAWA        18
>>>    #define MT8192_POWER_DOMAIN_CAM_RAWB        19
>>>    #define MT8192_POWER_DOMAIN_CAM_RAWC        20
>>> +#define MT8192_POWER_DOMAIN_ADSP     21
>>>
>>>    #endif /* _DT_BINDINGS_POWER_MT8192_POWER_H */
>>>
>>




From angelogioacchino.delregno at collabora.com  Thu Dec  1 01:42:08 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 1 Dec 2022 10:42:08 +0100
Subject: [PATCH v2 03/12] ASoC: mediatek: mt8188: support audsys clock
In-Reply-To: <7dfdb4866ccf7356c2a8beb0359e5b62df4f245f.camel@mediatek.com>
References: <20221021082719.18325-1-trevor.wu@mediatek.com>
 <20221021082719.18325-4-trevor.wu@mediatek.com>
 <de66f0e3-7694-7315-c896-9211259a1a17@collabora.com>
 <776557c0fda5a538549ee0d4f4b7f482b0d69934.camel@mediatek.com>
 <473d67ed-198f-82c6-9f32-5827c1f8c852@collabora.com>
 <500f80b1ac84101af482bdfcb46671d523d51068.camel@mediatek.com>
 <360a5f27-8abc-938c-04c7-13ea65b5a89f@collabora.com>
 <7dfdb4866ccf7356c2a8beb0359e5b62df4f245f.camel@mediatek.com>
Message-ID: <6c8343c4-a8ed-1a4c-a518-1c49a9d6b056@collabora.com>

Il 01/12/22 09:43, Trevor Wu (???) ha scritto:
> On Wed, 2022-10-26 at 10:18 +0200, AngeloGioacchino Del Regno wrote:
>> Il 26/10/22 06:10, Trevor Wu (???) ha scritto:
>>> On Tue, 2022-10-25 at 12:18 +0200, AngeloGioacchino Del Regno
>>> wrote:
>>>> Il 21/10/22 11:58, Trevor Wu (???) ha scritto:
>>>>> On Fri, 2022-10-21 at 10:41 +0200, AngeloGioacchino Del Regno
>>>>> wrote:
>>>>>> Il 21/10/22 10:27, Trevor Wu ha scritto:
>>>>>>> Add mt8188 audio cg clock control. Audio clock gates are
>>>>>>> registered
>>>>>>> to CCF
>>>>>>> for reference count and clock parent management.
>>>>>>>
>>>>>>> Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
>>>>>>> ---
>>>>>>>      sound/soc/mediatek/mt8188/mt8188-audsys-clk.c | 206
>>>>>>> ++++++++++++++++++
>>>>>>>      sound/soc/mediatek/mt8188/mt8188-audsys-clk.h |  15 ++
>>>>>>>      .../soc/mediatek/mt8188/mt8188-audsys-clkid.h |  83
>>>>>>> +++++++
>>>>>>>      3 files changed, 304 insertions(+)
>>>>>>>      create mode 100644 sound/soc/mediatek/mt8188/mt8188-
>>>>>>> audsys-
>>>>>>> clk.c
>>>>>>>      create mode 100644 sound/soc/mediatek/mt8188/mt8188-
>>>>>>> audsys-
>>>>>>> clk.h
>>>>>>>      create mode 100644 sound/soc/mediatek/mt8188/mt8188-
>>>>>>> audsys-
>>>>>>> clkid.h
>>>>>>>
>>>>>>> diff --git a/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
>>>>>>> b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
>>>>>>> new file mode 100644
>>>>>>> index 000000000000..1f294231d4c2
>>>>>>> --- /dev/null
>>>>>>> +++ b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
>>>>>>> @@ -0,0 +1,206 @@
>>>>>>> +// SPDX-License-Identifier: GPL-2.0
>>>>>>> +/*
>>>>>>> + * mt8188-audsys-clk.c  --  MediaTek 8188 audsys clock
>>>>>>> control
>>>>>>> + *
>>>>>>> + * Copyright (c) 2022 MediaTek Inc.
>>>>>>> + * Author: Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
>>>>>>> + */
>>>>>>> +
>>>>>>> +#include <linux/clk.h>
>>>>>>> +#include <linux/clk-provider.h>
>>>>>>> +#include <linux/clkdev.h>
>>>>>>> +#include "mt8188-afe-common.h"
>>>>>>> +#include "mt8188-audsys-clk.h"
>>>>>>> +#include "mt8188-audsys-clkid.h"
>>>>>>> +#include "mt8188-reg.h"
>>>>>>> +
>>>>>>> +struct afe_gate {
>>>>>>> +	int id;
>>>>>>> +	const char *name;
>>>>>>> +	const char *parent_name;
>>>>>>> +	int reg;
>>>>>>> +	u8 bit;
>>>>>>> +	const struct clk_ops *ops;
>>>>>>> +	unsigned long flags;
>>>>>>> +	u8 cg_flags;
>>>>>>> +};
>>>>>>> +
>>>>>>> +#define GATE_AFE_FLAGS(_id, _name, _parent, _reg, _bit,
>>>>>>> _flags,
>>>>>>> _cgflags) {\
>>>>>>> +		.id = _id,					
>>>>>>> \
>>>>>>> +		.name = _name,					
>>>>>>> \
>>>>>>> +		.parent_name = _parent,				
>>>>>>> \
>>>>>>> +		.reg = _reg,					
>>>>>>> \
>>>>>>> +		.bit = _bit,					
>>>>>>> \
>>>>>>> +		.flags = _flags,				
>>>>>>> \
>>>>>>> +		.cg_flags = _cgflags,				
>>>>>>> \
>>>>>>> +	}
>>>>>>> +
>>>>>>> +#define GATE_AFE(_id, _name, _parent, _reg, _bit)		
>>>>>>> \
>>>>>>> +	GATE_AFE_FLAGS(_id, _name, _parent, _reg, _bit,		
>>>>>>> \
>>>>>>> +		       CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
>>>>>>> CLK_GATE_SET_TO_DISABLE)
>>>>>>
>>>>>> Can you please explain what's the reason for
>>>>>> CLK_IGNORE_UNUSED
>>>>>> here?
>>>>>> Maybe we can solve some issue that you're facing in a cleaner
>>>>>> way.
>>>>>>
>>>>>> Regards,
>>>>>> Angelo
>>>>>
>>>>> Hi Angelo,
>>>>>
>>>>> Because clk_disable_unused() calls clk_core_is_enabled(),
>>>>> register
>>>>> access happens in is_enabled() ops.
>>>>> At the moment, the power for register access is not enabled, so
>>>>> the
>>>>> register read results in CPU hang.
>>>>>
>>>>> That's why I added CLK_IGNORE_UNUSED here, but it can't resolve
>>>>> all
>>>>> issues. Actually, we met same problem when "cat
>>>>> /sys/kernel/debug/clk/clk_summary" is used. We are still
>>>>> suffering
>>>>> the
>>>>> problem.
>>>>>
>>>>> I'm not sure if I can implement clk ops by myself, and exclude
>>>>> the
>>>>> registration of is_enabled() ops.
>>>>>
>>>>
>>>> Is the power for register access enabled with a power domain?
>>>>
>>>> Check drivers/clk/clk.c, grep for core->rpm_enabled.
>>>>
>>>> If you enable runtime PM before registering the clocks, and you
>>>> register them
>>>> with the right struct device, the clock API will enable power for
>>>> you
>>>> before
>>>> trying to read the clock enable status.
>>>>
>>>> Regards,
>>>> Angelo
>>>>
>>>
>>> Hi Angelo,
>>>
>>> I tried the way in MT8195, but it caused circular lock problem.
>>>
>>> Because mtcmos depends on some clocks, clk_bulk_prepare_enable is
>>> also
>>> used in scpsys_power_on()[1].
>>> If the clock also depends on the power domain, this results in the
>>> circular lock problem.
>>> That's why I don't bind the power domain with these clocks.
>>>
>>
>> This is not supposed to happen... can you please give me a (MT8195)
>> patch to
>> reproduce the issue that you're seeing?
>>
>> I would like to investigate that to check if I can come up with a
>> good solution.
>>
>> Thanks,
>> Angelo
> 
> 
> Hi Angelo,
> 
> Sorry for replying late.
> The original implementation about clock depending on power domain was a
> cusotomized request, and it's not based on upstream code base. So I
> can't apply the implementation directly. I tried to implement the
> suggested solution in upstream code, but I can't reproduce the problem
> successfully.
> 
> At the same time, we reviewed the difference between MT8195 and MT8188.
> It's found that ADSP_INFRA should be kept ON to resolve the register
> r/w access limitation in MT8188, so we can match the hardware design in
> MT8195.
> 
> After discussing internally, we decided in favour of ADSP_INFRA
> soloution. Althought the lock problem can't be seen, the new lock
> relationship(prepare_lock -> genpd lock) is actually created.
> 
> In conclusion, ADSP_INFRA will be kept always on and I will remove
> CLK_IGNORE_UNUSED flag in V3.
> 

As far as the power consumption increase is ignorable (so, power consumption
is very little more), that's a good decision and I support that.

Regards,
Angelo

> Thanks,
> Trevor
> 
>>
>>> [1]
>>>
> https://urldefense.com/v3/__https://elixir.bootlin.com/linux/v6.1-rc2/source/drivers/soc/mediatek/mtk-pm-domains.c__;!!CTRNKA9wMg0ARbw!yVFCD-B4VZOxDXTGgDtpB0mJbVoY9tHODeICxthAC33lXMq6LRVTGS-4V-Dj129_cA$
>>>   
>>>
>>> Thanks,
>>> Trevor
>>>
>>>
>>
>>
>>




From peter.wang at mediatek.com  Thu Dec  1 01:43:58 2022
From: peter.wang at mediatek.com (peter.wang at mediatek.com)
Date: Thu, 1 Dec 2022 17:43:58 +0800
Subject: [PATCH v2] ufs: core: wlun suspend SSU/enter hibern8 fail recovery
Message-ID: <20221201094358.20700-1-peter.wang@mediatek.com>

From: Peter Wang <peter.wang at mediatek.com>

When SSU/enter hibern8 fail in wlun suspend flow, trigger error
handler and return busy to break the suspend.
If not, wlun runtime pm status become error and the consumer will
stuck in runtime suspend status.

Signed-off-by: Peter Wang <peter.wang at mediatek.com>
---
 drivers/ufs/core/ufshcd.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index b1f59a5fe632..8e5f7d9fe7c2 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -8970,6 +8970,7 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	enum ufs_pm_level pm_lvl;
 	enum ufs_dev_pwr_mode req_dev_pwr_mode;
 	enum uic_link_state req_link_state;
+	unsigned long flags;
 
 	hba->pm_op_in_progress = true;
 	if (pm_op != UFS_SHUTDOWN_PM) {
@@ -9049,6 +9050,20 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 
 		if (!hba->dev_info.b_rpm_dev_flush_capable) {
 			ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
+			if ((ret) && (pm_op != UFS_SHUTDOWN_PM)) {
+				/*
+				 * If return err in suspend flow, IO will hang.
+				 * Trigger error handler and break suspend for
+				 * error recovery.
+				 */
+				spin_lock_irqsave(hba->host->host_lock, flags);
+				hba->force_reset = true;
+				ufshcd_schedule_eh_work(hba);
+				spin_unlock_irqrestore(hba->host->host_lock,
+					flags);
+
+				ret = -EBUSY;
+			}
 			if (ret)
 				goto enable_scaling;
 		}
@@ -9060,6 +9075,20 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	 */
 	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
 	ret = ufshcd_link_state_transition(hba, req_link_state, check_for_bkops);
+	if ((ret) && (pm_op != UFS_SHUTDOWN_PM)) {
+		/*
+		 * If return err in suspend flow, IO will hang.
+		 * Trigger error handler and break suspend for
+		 * error recovery.
+		 */
+		spin_lock_irqsave(hba->host->host_lock, flags);
+		hba->force_reset = true;
+		ufshcd_schedule_eh_work(hba);
+		spin_unlock_irqrestore(hba->host->host_lock,
+			flags);
+
+		ret = -EBUSY;
+	}
 	if (ret)
 		goto set_dev_active;
 
-- 
2.18.0



From angelogioacchino.delregno at collabora.com  Thu Dec  1 01:45:41 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 1 Dec 2022 10:45:41 +0100
Subject: [PATCH v2] media: platform: mtk-mdp3: Fix return value check in
 mdp_probe()
In-Reply-To: <20221201023505.48015-1-linqiheng@huawei.com>
References: <20221201023505.48015-1-linqiheng@huawei.com>
Message-ID: <3e8aa2d9-6cd9-b155-c7b3-551fb574ac90@collabora.com>

Il 01/12/22 03:35, Qiheng Lin ha scritto:
> In case of error, the function mtk_mutex_get()
> returns ERR_PTR() and never returns NULL. The NULL test in the
> return value check should be replaced with IS_ERR().
> And also fix the err_return case.
> 
> Fixes: 61890ccaefaf ("media: platform: mtk-mdp3: add MediaTek MDP3 driver")
> Signed-off-by: Qiheng Lin <linqiheng at huawei.com>

Thanks!

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From loic.poulain at linaro.org  Thu Dec  1 01:56:45 2022
From: loic.poulain at linaro.org (Loic Poulain)
Date: Thu, 1 Dec 2022 10:56:45 +0100
Subject: [PATCH v5] wwan: core: Support slicing in port TX flow of WWAN subsystem
In-Reply-To: <20221124074725.74325-1-haozhe.chang@mediatek.com>
References: <20221124074725.74325-1-haozhe.chang@mediatek.com>
Message-ID: <CAMZdPi9JOQpmhQepBMeG5jzncP8t5mp68O2nfSOFUUZ9e_fDsQ@mail.gmail.com>

On Thu, 24 Nov 2022 at 08:47, <haozhe.chang at mediatek.com> wrote:
>
> From: haozhe chang <haozhe.chang at mediatek.com>
>
> wwan_port_fops_write inputs the SKB parameter to the TX callback of
> the WWAN device driver. However, the WWAN device (e.g., t7xx) may
> have an MTU less than the size of SKB, causing the TX buffer to be
> sliced and copied once more in the WWAN device driver.
>
> This patch implements the slicing in the WWAN subsystem and gives
> the WWAN devices driver the option to slice(by frag_len) or not. By
> doing so, the additional memory copy is reduced.
>
> Meanwhile, this patch gives WWAN devices driver the option to reserve
> headroom in fragments for the device-specific metadata.
>
> Signed-off-by: haozhe chang <haozhe.chang at mediatek.com>

Reviewed-by: Loic Poulain <loic.poulain at linaro.org>


From wenst at chromium.org  Thu Dec  1 02:05:39 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu, 1 Dec 2022 18:05:39 +0800
Subject: [PATCH] arm64: dts: mt8192: Add adsp power domain controller
In-Reply-To: <8ae2a510-abf6-6e1b-9893-293db7d930e7@collabora.com>
References: <20221201073328.1559-1-allen-kh.cheng@mediatek.com>
 <ba14a46f-477f-70af-761d-696fe8a4f41c@collabora.com> <CAGXv+5Gg6ozYQcp_NPrAiH1kF-ZkfjVZhQZVhLnbSmjQBwsFwQ@mail.gmail.com>
 <8ae2a510-abf6-6e1b-9893-293db7d930e7@collabora.com>
Message-ID: <CAGXv+5H+msQ1ct5CUzYnT_BmYPnS72HbivvyO39uOfMfXbo5qg@mail.gmail.com>

On Thu, Dec 1, 2022 at 5:39 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Il 01/12/22 10:10, Chen-Yu Tsai ha scritto:
> > On Thu, Dec 1, 2022 at 5:07 PM AngeloGioacchino Del Regno
> > <angelogioacchino.delregno at collabora.com> wrote:
> >>
> >> Il 01/12/22 08:33, Allen-KH Cheng ha scritto:
> >>> Add adsp power domain controller node for mt8192 SoC.
> >>>
> >>> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> >>> ---
> >>> Ref: https://lore.kernel.org/all/2ec80bd8-dfef-d2e6-eb41-6e6088043e33 at collabora.com/
> >>>       [Allen-KH Cheng <allen-kh.cheng at mediatek.com>]
> >>> ---
> >>> ---
> >>>    arch/arm64/boot/dts/mediatek/mt8192.dtsi | 8 ++++++++
> >>>    include/dt-bindings/power/mt8192-power.h | 1 +
> >>>    2 files changed, 9 insertions(+)
> >>>
> >>
> >> Allen, thanks for this one, but it's incomplete...
> >>
> >> First of all, you must add the power domain on the driver itself, specifically,
> >> in drivers/soc/mediatek/mt8192-pm-domains.h - otherwise this change will have no
> >> effect!
> >
> > Actually it's worse. The driver doesn't know about the new power domain,
> > and so it will fail to probe. We might need to make the power domain driver
> > fail gracefully and skip unknown power domains.
> >
>
> Right. It's worse. I don't know, though, if gracefully skipping unknown power
> domains in the driver would be a good decision... as sometimes error messages
> go unnoticed.
>
> When the platform "explodes" instead, you're forced to read that log carefully
> and get it working again... Anyway, I'm only thinking out loud, nothing less and
> nothing more than that :-)

Me too. :)

> By the way, we can probably expand on that topic a bit later, as it's outside of
> the scope of this specific change.
>
> Back to topic, if we get one series containing both changes (devicetree, bindings
> and driver) with the right Fixes tags and/or Cc stable, we shouldn't have such
> issue on backports so we can probably ignore that potential issue, I think? :-)

Everything goes through the soc tree, so they should appear in Linus's tree
and get picked by stable at more or less the same time. I think we would
want the driver change to appear before the dts change, for bisectability's
sake (because of header dependencies and driver errors).

So we probably want:
1. driver + binding header changes
2. dtsi changes

And have these merged through fixes so that the history between them is linear.


ChenYu

> Cheers,
> Angelo
>
> > ChenYu
> >
> >> ...Then, as Chen-Yu said, you should also add the power domain to the scp_adsp
> >> clock node as that's solving the lockup issue...
> >>
> >> .......and last, but not least: we need a Fixes tag to backport this fix, here
> >> and on the commit that adds the missing power domain in the driver.
> >>
> >> Thanks,
> >> Angelo
> >>
> >>> diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> >>> index 424fc89cc6f7..e71afba871fc 100644
> >>> --- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> >>> +++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> >>> @@ -514,6 +514,14 @@
> >>>                                                };
> >>>                                        };
> >>>                                };
> >>> +
> >>> +                             power-domain at MT8192_POWER_DOMAIN_ADSP {
> >>> +                                     reg = <MT8192_POWER_DOMAIN_ADSP>;
> >>> +                                     clocks = <&topckgen CLK_TOP_ADSP_SEL>;
> >>> +                                     clock-names = "adsp";
> >>> +                                     mediatek,infracfg = <&infracfg>;
> >>> +                                     #power-domain-cells = <0>;
> >>> +                             };
> >>>                        };
> >>>                };
> >>>
> >>> diff --git a/include/dt-bindings/power/mt8192-power.h b/include/dt-bindings/power/mt8192-power.h
> >>> index 4eaa53d7270a..63e81cd0d06d 100644
> >>> --- a/include/dt-bindings/power/mt8192-power.h
> >>> +++ b/include/dt-bindings/power/mt8192-power.h
> >>> @@ -28,5 +28,6 @@
> >>>    #define MT8192_POWER_DOMAIN_CAM_RAWA        18
> >>>    #define MT8192_POWER_DOMAIN_CAM_RAWB        19
> >>>    #define MT8192_POWER_DOMAIN_CAM_RAWC        20
> >>> +#define MT8192_POWER_DOMAIN_ADSP     21
> >>>
> >>>    #endif /* _DT_BINDINGS_POWER_MT8192_POWER_H */
> >>>
> >>
>
>


From Henry.Yen at mediatek.com  Thu Dec  1 02:07:50 2022
From: Henry.Yen at mediatek.com (=?utf-8?B?SGVucnkgWWVuICjpoY/kv67muqsp?=)
Date: Thu, 1 Dec 2022 10:07:50 +0000
Subject: [PATCH v2 1/2] thermal: mediatek: add support for MT7986 and
 MT7981
In-Reply-To: <Y4dYazyXF02eRGC5@makrotopia.org>
References: <Y4dYazyXF02eRGC5@makrotopia.org>
Message-ID: <5240196f01f4b2c053331ac475a571b580a988c2.camel@mediatek.com>

On Wed, 2022-11-30 at 13:19 +0000, Daniel Golle wrote:
> Add support for V3 generation thermal found in MT7986 and MT7981
> SoCs.
> Brings code to assign values from efuse as well as new function to
> convert raw temperature to millidegree celsius, as found in
> MediaTek's
> SDK sources (but cleaned up and de-duplicated)
> 
> [1]: 
> https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/baf36c7eef477aae1f8f2653b6c29e2caf48475b
> Signed-off-by: Daniel Golle <daniel at makrotopia.org>

Reviewed-by: Henry Yen <henry.yen at mediatek.com>

> ---
> Changes since v1: Drop use of adc_oe field in efuse, Henry Yen
> confirmed
> its use has been dropped intentionally in MTK SDK as well.
> 
>  drivers/thermal/mtk_thermal.c | 122
> +++++++++++++++++++++++++++++++++-

From angelogioacchino.delregno at collabora.com  Thu Dec  1 02:10:30 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 1 Dec 2022 11:10:30 +0100
Subject: [PATCH] arm64: dts: mt8192: Add adsp power domain controller
In-Reply-To: <CAGXv+5H+msQ1ct5CUzYnT_BmYPnS72HbivvyO39uOfMfXbo5qg@mail.gmail.com>
References: <20221201073328.1559-1-allen-kh.cheng@mediatek.com>
 <ba14a46f-477f-70af-761d-696fe8a4f41c@collabora.com>
 <CAGXv+5Gg6ozYQcp_NPrAiH1kF-ZkfjVZhQZVhLnbSmjQBwsFwQ@mail.gmail.com>
 <8ae2a510-abf6-6e1b-9893-293db7d930e7@collabora.com>
 <CAGXv+5H+msQ1ct5CUzYnT_BmYPnS72HbivvyO39uOfMfXbo5qg@mail.gmail.com>
Message-ID: <28d94df0-6e87-3019-dc10-a587f84488fb@collabora.com>

Il 01/12/22 11:05, Chen-Yu Tsai ha scritto:
> On Thu, Dec 1, 2022 at 5:39 PM AngeloGioacchino Del Regno
> <angelogioacchino.delregno at collabora.com> wrote:
>>
>> Il 01/12/22 10:10, Chen-Yu Tsai ha scritto:
>>> On Thu, Dec 1, 2022 at 5:07 PM AngeloGioacchino Del Regno
>>> <angelogioacchino.delregno at collabora.com> wrote:
>>>>
>>>> Il 01/12/22 08:33, Allen-KH Cheng ha scritto:
>>>>> Add adsp power domain controller node for mt8192 SoC.
>>>>>
>>>>> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
>>>>> ---
>>>>> Ref: https://lore.kernel.org/all/2ec80bd8-dfef-d2e6-eb41-6e6088043e33 at collabora.com/
>>>>>        [Allen-KH Cheng <allen-kh.cheng at mediatek.com>]
>>>>> ---
>>>>> ---
>>>>>     arch/arm64/boot/dts/mediatek/mt8192.dtsi | 8 ++++++++
>>>>>     include/dt-bindings/power/mt8192-power.h | 1 +
>>>>>     2 files changed, 9 insertions(+)
>>>>>
>>>>
>>>> Allen, thanks for this one, but it's incomplete...
>>>>
>>>> First of all, you must add the power domain on the driver itself, specifically,
>>>> in drivers/soc/mediatek/mt8192-pm-domains.h - otherwise this change will have no
>>>> effect!
>>>
>>> Actually it's worse. The driver doesn't know about the new power domain,
>>> and so it will fail to probe. We might need to make the power domain driver
>>> fail gracefully and skip unknown power domains.
>>>
>>
>> Right. It's worse. I don't know, though, if gracefully skipping unknown power
>> domains in the driver would be a good decision... as sometimes error messages
>> go unnoticed.
>>
>> When the platform "explodes" instead, you're forced to read that log carefully
>> and get it working again... Anyway, I'm only thinking out loud, nothing less and
>> nothing more than that :-)
> 
> Me too. :)
> 
>> By the way, we can probably expand on that topic a bit later, as it's outside of
>> the scope of this specific change.
>>
>> Back to topic, if we get one series containing both changes (devicetree, bindings
>> and driver) with the right Fixes tags and/or Cc stable, we shouldn't have such
>> issue on backports so we can probably ignore that potential issue, I think? :-)
> 
> Everything goes through the soc tree, so they should appear in Linus's tree
> and get picked by stable at more or less the same time. I think we would
> want the driver change to appear before the dts change, for bisectability's
> sake (because of header dependencies and driver errors).
> 
> So we probably want:
> 1. driver + binding header changes
> 2. dtsi changes
> 
> And have these merged through fixes so that the history between them is linear.
> 

Perfect, I fully agree.

> 
> ChenYu
> 
>> Cheers,
>> Angelo
>>
>>> ChenYu
>>>
>>>> ...Then, as Chen-Yu said, you should also add the power domain to the scp_adsp
>>>> clock node as that's solving the lockup issue...
>>>>
>>>> .......and last, but not least: we need a Fixes tag to backport this fix, here
>>>> and on the commit that adds the missing power domain in the driver.
>>>>
>>>> Thanks,
>>>> Angelo
>>>>
>>>>> diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
>>>>> index 424fc89cc6f7..e71afba871fc 100644
>>>>> --- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
>>>>> +++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
>>>>> @@ -514,6 +514,14 @@
>>>>>                                                 };
>>>>>                                         };
>>>>>                                 };
>>>>> +
>>>>> +                             power-domain at MT8192_POWER_DOMAIN_ADSP {
>>>>> +                                     reg = <MT8192_POWER_DOMAIN_ADSP>;
>>>>> +                                     clocks = <&topckgen CLK_TOP_ADSP_SEL>;
>>>>> +                                     clock-names = "adsp";
>>>>> +                                     mediatek,infracfg = <&infracfg>;
>>>>> +                                     #power-domain-cells = <0>;
>>>>> +                             };
>>>>>                         };
>>>>>                 };
>>>>>
>>>>> diff --git a/include/dt-bindings/power/mt8192-power.h b/include/dt-bindings/power/mt8192-power.h
>>>>> index 4eaa53d7270a..63e81cd0d06d 100644
>>>>> --- a/include/dt-bindings/power/mt8192-power.h
>>>>> +++ b/include/dt-bindings/power/mt8192-power.h
>>>>> @@ -28,5 +28,6 @@
>>>>>     #define MT8192_POWER_DOMAIN_CAM_RAWA        18
>>>>>     #define MT8192_POWER_DOMAIN_CAM_RAWB        19
>>>>>     #define MT8192_POWER_DOMAIN_CAM_RAWC        20
>>>>> +#define MT8192_POWER_DOMAIN_ADSP     21
>>>>>
>>>>>     #endif /* _DT_BINDINGS_POWER_MT8192_POWER_H */
>>>>>
>>>>
>>
>>

-- 
AngeloGioacchino Del Regno
Software Engineer

Collabora Ltd.
Platinum Building, St John's Innovation Park, Cambridge CB4 0DS, UK
Registered in England & Wales, no. 5513718



From krzysztof.kozlowski at linaro.org  Thu Dec  1 02:22:25 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Thu, 1 Dec 2022 11:22:25 +0100
Subject: [PATCH] arm64: dts: mt8192: Add adsp power domain controller
In-Reply-To: <20221201073328.1559-1-allen-kh.cheng@mediatek.com>
References: <20221201073328.1559-1-allen-kh.cheng@mediatek.com>
Message-ID: <8c1dc14f-e0b1-b5ce-aeef-68c20da5dc63@linaro.org>

On 01/12/2022 08:33, Allen-KH Cheng wrote:
> Add adsp power domain controller node for mt8192 SoC.
> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> ---
> Ref: https://lore.kernel.org/all/2ec80bd8-dfef-d2e6-eb41-6e6088043e33 at collabora.com/
>     [Allen-KH Cheng <allen-kh.cheng at mediatek.com>]
> ---
> ---
>  arch/arm64/boot/dts/mediatek/mt8192.dtsi | 8 ++++++++
>  include/dt-bindings/power/mt8192-power.h | 1 +

Bindings are separate patches.

Best regards,
Krzysztof



From andre.przywara at arm.com  Thu Dec  1 02:22:52 2022
From: andre.przywara at arm.com (Andre Przywara)
Date: Thu, 1 Dec 2022 10:22:52 +0000
Subject: [PATCH v2 01/11] pwm: Make .get_state() callback return an
 error code
In-Reply-To: <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
	<20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
Message-ID: <20221201102252.52ace284@donnerap.cambridge.arm.com>

On Wed, 30 Nov 2022 16:21:38 +0100
Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de> wrote:

Hi,

> .get_state() might fail in some cases. To make it possible that a driver
> signals such a failure change the prototype of .get_state() to return an
> error code.
> 
> This patch was created using coccinelle and the following semantic patch:
> 
> @p1@
> identifier getstatefunc;
> identifier driver;
> @@
>  struct pwm_ops driver = {
>         ...,
>         .get_state = getstatefunc
>         ,...
>  };
> 
> @p2@
> identifier p1.getstatefunc;
> identifier chip, pwm, state;
> @@
> -void
> +int
>  getstatefunc(struct pwm_chip *chip, struct pwm_device *pwm, struct pwm_state *state)
>  {
>    ...
> -  return;
> +  return 0;
>    ...
>  }
> 
> plus the actual change of the prototype in include/linux/pwm.h (plus some
> manual fixing of indentions and empty lines).
> 
> So for now all drivers return success unconditionally. They are adapted
> in the following patches to make the changes easier reviewable.
> 
> Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de>
> ---
>  drivers/gpio/gpio-mvebu.c             |  9 ++++++---
>  drivers/gpu/drm/bridge/ti-sn65dsi86.c | 14 ++++++++------
>  drivers/leds/rgb/leds-qcom-lpg.c      | 14 ++++++++------
>  drivers/pwm/pwm-atmel.c               |  6 ++++--
>  drivers/pwm/pwm-bcm-iproc.c           |  8 +++++---
>  drivers/pwm/pwm-crc.c                 | 10 ++++++----
>  drivers/pwm/pwm-cros-ec.c             |  8 +++++---
>  drivers/pwm/pwm-dwc.c                 |  6 ++++--
>  drivers/pwm/pwm-hibvt.c               |  6 ++++--
>  drivers/pwm/pwm-imx-tpm.c             |  8 +++++---
>  drivers/pwm/pwm-imx27.c               |  8 +++++---
>  drivers/pwm/pwm-intel-lgm.c           |  6 ++++--
>  drivers/pwm/pwm-iqs620a.c             |  6 ++++--
>  drivers/pwm/pwm-keembay.c             |  6 ++++--
>  drivers/pwm/pwm-lpss.c                |  6 ++++--
>  drivers/pwm/pwm-meson.c               |  8 +++++---
>  drivers/pwm/pwm-mtk-disp.c            | 12 +++++++-----
>  drivers/pwm/pwm-pca9685.c             |  8 +++++---
>  drivers/pwm/pwm-raspberrypi-poe.c     |  8 +++++---
>  drivers/pwm/pwm-rockchip.c            | 12 +++++++-----
>  drivers/pwm/pwm-sifive.c              |  6 ++++--
>  drivers/pwm/pwm-sl28cpld.c            |  8 +++++---
>  drivers/pwm/pwm-sprd.c                |  8 +++++---
>  drivers/pwm/pwm-stm32-lp.c            |  8 +++++---
>  drivers/pwm/pwm-sun4i.c               | 12 +++++++-----
>  drivers/pwm/pwm-sunplus.c             |  6 ++++--
>  drivers/pwm/pwm-visconti.c            |  6 ++++--
>  drivers/pwm/pwm-xilinx.c              |  8 +++++---
>  include/linux/pwm.h                   |  4 ++--
>  29 files changed, 146 insertions(+), 89 deletions(-)
> 

[ ... ]
> diff --git a/drivers/pwm/pwm-sun4i.c b/drivers/pwm/pwm-sun4i.c
> index c8445b0a3339..37d75e252d4e 100644
> --- a/drivers/pwm/pwm-sun4i.c
> +++ b/drivers/pwm/pwm-sun4i.c
> @@ -108,9 +108,9 @@ static inline void sun4i_pwm_writel(struct sun4i_pwm_chip *chip,
>  	writel(val, chip->base + offset);
>  }
>  
> -static void sun4i_pwm_get_state(struct pwm_chip *chip,
> -				struct pwm_device *pwm,
> -				struct pwm_state *state)
> +static int sun4i_pwm_get_state(struct pwm_chip *chip,
> +			       struct pwm_device *pwm,
> +			       struct pwm_state *state)
>  {
>  	struct sun4i_pwm_chip *sun4i_pwm = to_sun4i_pwm_chip(chip);
>  	u64 clk_rate, tmp;
> @@ -132,7 +132,7 @@ static void sun4i_pwm_get_state(struct pwm_chip *chip,
>  		state->duty_cycle = DIV_ROUND_UP_ULL(state->period, 2);
>  		state->polarity = PWM_POLARITY_NORMAL;
>  		state->enabled = true;
> -		return;
> +		return 0;
>  	}
>  
>  	if ((PWM_REG_PRESCAL(val, pwm->hwpwm) == PWM_PRESCAL_MASK) &&
> @@ -142,7 +142,7 @@ static void sun4i_pwm_get_state(struct pwm_chip *chip,
>  		prescaler = prescaler_table[PWM_REG_PRESCAL(val, pwm->hwpwm)];
>  
>  	if (prescaler == 0)
> -		return;
> +		return 0;
>  
>  	if (val & BIT_CH(PWM_ACT_STATE, pwm->hwpwm))
>  		state->polarity = PWM_POLARITY_NORMAL;
> @@ -162,6 +162,8 @@ static void sun4i_pwm_get_state(struct pwm_chip *chip,
>  
>  	tmp = (u64)prescaler * NSEC_PER_SEC * PWM_REG_PRD(val);
>  	state->period = DIV_ROUND_CLOSEST_ULL(tmp, clk_rate);
> +
> +	return 0;
>  }
>  
>  static int sun4i_pwm_calculate(struct sun4i_pwm_chip *sun4i_pwm,

For sunxi:

Reviewed-by: Andre Przywara <andre.przywara at arm.com>

Just one comment: I don't see a sunxi specific patch later in the series,
though it seems we have at least one error error exit (see prescaler == 0
above). Plus potentially another exit if clk_get_rate() (at the very
beginning) fails.
Shall I send a patch for that?

Cheers,
Andre.




From wenst at chromium.org  Thu Dec  1 02:33:59 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu, 1 Dec 2022 18:33:59 +0800
Subject: [PATCH 1/4] arm64: dts: mediatek: mt8183: Fix systimer 13 MHz
 clock description
In-Reply-To: <5250d7d3-ff46-e08d-926c-4efd92390d88@collabora.com>
References: <20221201084229.3464449-1-wenst@chromium.org> <20221201084229.3464449-2-wenst@chromium.org>
 <5250d7d3-ff46-e08d-926c-4efd92390d88@collabora.com>
Message-ID: <CAGXv+5E63+dE-=KbD_LW+BV+fBWnfaD+oH0+e9T_aS-XEffN5w@mail.gmail.com>

On Thu, Dec 1, 2022 at 5:31 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Il 01/12/22 09:42, Chen-Yu Tsai ha scritto:
> > The systimer block derives its 13 MHz clock by dividing the main 26 MHz
> > oscillator clock by 2 internally, not through the TOPCKGEN clock
> > controller.
> >
> > On the MT8183 this divider is set either by power-on-reset or by the
> > bootloader. The bootloader may then make the divider unconfigurable to,
> > but can be read out by, the operating system.
> >
> > Making the systimer block take the 26 MHz clock directly requires
> > changing the implementations. As an ABI compatible fix, change the
> > input clock of the systimer block a fixed factor divide-by-2 clock
> > that takes the 26 MHz oscillator as its input.
> >
> > Fixes: 5bc8e2875ffb ("arm64: dts: mt8183: add systimer0 device node")
> > Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
>
> I generally not just like - but *love* - this change, I had that in my mind
> for a couple of months now and forgot about it because reasons.
>
> There's just one thing that, since we're doing this now, we can clarify (and
> that's important to avoid questions like "why isn't this board-specific"):
> the 26MHz clock "clk26m" oscillator that we're using for the system timers
> is a SoC-provided clock, and its name is "SYSCLK" as in "System bus clock".

Looking at the schematics it is terribly more complicated. :(

The crystal feeds the DCXO in the PMIC, which also acts as a buffer.
The PMIC then feeds the SoC and any other chips, such as a modem.

On other platforms we describe the oscillator at the dtsi level as well.
The reason why it isn't board-specific is that the requirements and
properties of the crystal are specified in the platform's datasheet,
i.e. it is a design requirement that every board use the same crystal.

I don't see the datasheet spelling out SYSCLK though. The TOPCKGEN part
mostly just refers to it as CLK26M, or some variant of it, which likely
denotes some fan-out branch. The system timer part also just says "26M"
or "26 MHz clock source".

Also, we can't change the clock name, as "clk26m" is hard-coded into
the clk drivers.

> I know that your target is to describe how we get from 26M to 13M, but at
> this point it may be worth it to use the right names to help preventing
> confusion about that clock not being an external crystal on the board but
> something internal to the SoC.

But as I described above, it is an actual crystal on the board. We are
simply omitting parts of the signal path. Notably the PMIC needs to be
excluded due to circular dependency reasons. And also we most definitely
don't want the system to be touching it.

ChenYu

> So, I propose:
> 1. Change `clk26m: oscillator` to `clk26m: sysclk` or `clk26m: sysclk-26m`;
> 2. Add the divider as `clk13m: sysclk-div2`.
>
> What do you think?
>
> Cheers,
> Angelo
>
> > ---
> >   arch/arm64/boot/dts/mediatek/mt8183.dtsi | 12 ++++++++++--
> >   1 file changed, 10 insertions(+), 2 deletions(-)
> >
> > diff --git a/arch/arm64/boot/dts/mediatek/mt8183.dtsi b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
> > index 19ff1babc359..0cbbaebe1213 100644
> > --- a/arch/arm64/boot/dts/mediatek/mt8183.dtsi
> > +++ b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
> > @@ -585,6 +585,15 @@ psci {
> >               method = "smc";
> >       };
> >
> > +     clk13m: fixed-factor-clock-13m {
> > +             compatible = "fixed-factor-clock";
> > +             #clock-cells = <0>;
> > +             clocks = <&clk26m>;
> > +             clock-div = <2>;
> > +             clock-mult = <1>;
> > +             clock-output-names = "clk13m";
> > +     };
> > +
> >       clk26m: oscillator {
> >               compatible = "fixed-clock";
> >               #clock-cells = <0>;
> > @@ -968,8 +977,7 @@ systimer: timer at 10017000 {
> >                                    "mediatek,mt6765-timer";
> >                       reg = <0 0x10017000 0 0x1000>;
> >                       interrupts = <GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH>;
> > -                     clocks = <&topckgen CLK_TOP_CLK13M>;
> > -                     clock-names = "clk13m";
> > +                     clocks = <&clk13m>;
> >               };
> >
> >               iommu: iommu at 10205000 {
>
>


From kvalo at kernel.org  Thu Dec  1 02:39:07 2022
From: kvalo at kernel.org (Kalle Valo)
Date: Thu, 01 Dec 2022 12:39:07 +0200
Subject: [PATCH 5/9] wifi: mt76: mt7996: add MAC support
In-Reply-To: <20221122084554.9494-6-shayne.chen@mediatek.com> (Shayne Chen's
	message of "Tue, 22 Nov 2022 16:45:50 +0800")
References: <20221122084554.9494-1-shayne.chen@mediatek.com>
	<20221122084554.9494-6-shayne.chen@mediatek.com>
Message-ID: <87zgc7mmr8.fsf@kernel.org>

Shayne Chen <shayne.chen at mediatek.com> writes:

> (Split the big patch into smaller intermediate patches by functionality
> for easier review. Refer to the cover letter for more info.)
>
> Signed-off-by: Shayne Chen <shayne.chen at mediatek.com>

[...]

> +static void mt7996_mac_sta_poll(struct mt7996_dev *dev)
> +{
> +	static const u8 ac_to_tid[] = {
> +		[IEEE80211_AC_BE] = 0,
> +		[IEEE80211_AC_BK] = 1,
> +		[IEEE80211_AC_VI] = 4,
> +		[IEEE80211_AC_VO] = 6
> +	};
> +	struct ieee80211_sta *sta;
> +	struct mt7996_sta *msta;
> +	struct rate_info *rate;
> +	u32 tx_time[IEEE80211_NUM_ACS], rx_time[IEEE80211_NUM_ACS];
> +	LIST_HEAD(sta_poll_list);
> +	int i;
> +
> +	spin_lock_bh(&dev->sta_poll_lock);
> +	list_splice_init(&dev->sta_poll_list, &sta_poll_list);
> +	spin_unlock_bh(&dev->sta_poll_lock);
> +
> +	rcu_read_lock();
> +
> +	while (true) {

In upstream we have a preference that there's some kind of limit for
loops, to avoid neverending loops.

-- 
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


From mpe at ellerman.id.au  Thu Dec  1 02:42:00 2022
From: mpe at ellerman.id.au (Michael Ellerman)
Date: Thu, 01 Dec 2022 21:42:00 +1100
Subject: [PATCH 0/5] remove label = "cpu" from DSA dt-binding
In-Reply-To: <32638470-b074-3b14-bfb2-10b49307b9e3@arinc9.com>
References: <20221130141040.32447-1-arinc.unal@arinc9.com>
 <Y4d9B7VSHvqJn0iS@lunn.ch>
 <32638470-b074-3b14-bfb2-10b49307b9e3@arinc9.com>
Message-ID: <877czbs8w7.fsf@mpe.ellerman.id.au>

Ar?n? ?NAL <arinc.unal at arinc9.com> writes:
> On 30.11.2022 18:55, Andrew Lunn wrote:
>> On Wed, Nov 30, 2022 at 05:10:35PM +0300, Ar?n? ?NAL wrote:
>>> Hello folks,
>>>
>>> With this patch series, we're completely getting rid of 'label = "cpu";'
>>> which is not used by the DSA dt-binding at all.
>>>
>>> Information for taking the patches for maintainers:
>>> Patch 1: netdev maintainers (based off netdev/net-next.git main)
>>> Patch 2-3: SoC maintainers (based off soc/soc.git soc/dt)
>>> Patch 4: MIPS maintainers (based off mips/linux.git mips-next)
>>> Patch 5: PowerPC maintainers (based off powerpc/linux.git next-test)
>> 
>> Hi Ar?n?
>> 
>> So your plan is that each architecture maintainer merges one patch?
>
> Initially, I sent this series to soc at kernel.org to take it all but Rob 
> said it must be this way instead.
>
>> 
>> That is fine, but it is good to be explicit, otherwise patches will
>> fall through the cracks because nobody picks them up. I generally use
>> To: to indicate who i expect to merge a patch, and everybody else in
>> the Cc:
>
> Thanks for this, I'll follow suit if I don't see any activity for a few 
> weeks.

IMHO the best solution if the patches are truly independent is to send
them independantly to each maintainer. That way there's no confusion
about whether someone else will take the series.

It's also simpler for maintainers to apply a single standalone patch vs
pick a single patch from a larger series.

cheers


From dave.stevenson at raspberrypi.com  Thu Dec  1 02:43:03 2022
From: dave.stevenson at raspberrypi.com (Dave Stevenson)
Date: Thu, 1 Dec 2022 10:43:03 +0000
Subject: [PATCH v2 01/11] pwm: Make .get_state() callback return an error code
In-Reply-To: <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de> <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
Message-ID: <CAPY8ntDKdfL2s6bdj00o6oEvSeHHjA=UYyr1QMzg2v3eAhshkw@mail.gmail.com>

On Wed, 30 Nov 2022 at 15:23, Uwe Kleine-K?nig
<u.kleine-koenig at pengutronix.de> wrote:
>
> .get_state() might fail in some cases. To make it possible that a driver
> signals such a failure change the prototype of .get_state() to return an
> error code.
>
> This patch was created using coccinelle and the following semantic patch:
>
> @p1@
> identifier getstatefunc;
> identifier driver;
> @@
>  struct pwm_ops driver = {
>         ...,
>         .get_state = getstatefunc
>         ,...
>  };
>
> @p2@
> identifier p1.getstatefunc;
> identifier chip, pwm, state;
> @@
> -void
> +int
>  getstatefunc(struct pwm_chip *chip, struct pwm_device *pwm, struct pwm_state *state)
>  {
>    ...
> -  return;
> +  return 0;
>    ...
>  }
>
> plus the actual change of the prototype in include/linux/pwm.h (plus some
> manual fixing of indentions and empty lines).
>
> So for now all drivers return success unconditionally. They are adapted
> in the following patches to make the changes easier reviewable.
>
> Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de>
> ---
>  drivers/gpio/gpio-mvebu.c             |  9 ++++++---
>  drivers/gpu/drm/bridge/ti-sn65dsi86.c | 14 ++++++++------
>  drivers/leds/rgb/leds-qcom-lpg.c      | 14 ++++++++------
>  drivers/pwm/pwm-atmel.c               |  6 ++++--
>  drivers/pwm/pwm-bcm-iproc.c           |  8 +++++---
>  drivers/pwm/pwm-crc.c                 | 10 ++++++----
>  drivers/pwm/pwm-cros-ec.c             |  8 +++++---
>  drivers/pwm/pwm-dwc.c                 |  6 ++++--
>  drivers/pwm/pwm-hibvt.c               |  6 ++++--
>  drivers/pwm/pwm-imx-tpm.c             |  8 +++++---
>  drivers/pwm/pwm-imx27.c               |  8 +++++---
>  drivers/pwm/pwm-intel-lgm.c           |  6 ++++--
>  drivers/pwm/pwm-iqs620a.c             |  6 ++++--
>  drivers/pwm/pwm-keembay.c             |  6 ++++--
>  drivers/pwm/pwm-lpss.c                |  6 ++++--
>  drivers/pwm/pwm-meson.c               |  8 +++++---
>  drivers/pwm/pwm-mtk-disp.c            | 12 +++++++-----
>  drivers/pwm/pwm-pca9685.c             |  8 +++++---
>  drivers/pwm/pwm-raspberrypi-poe.c     |  8 +++++---
>  drivers/pwm/pwm-rockchip.c            | 12 +++++++-----
>  drivers/pwm/pwm-sifive.c              |  6 ++++--
>  drivers/pwm/pwm-sl28cpld.c            |  8 +++++---
>  drivers/pwm/pwm-sprd.c                |  8 +++++---
>  drivers/pwm/pwm-stm32-lp.c            |  8 +++++---
>  drivers/pwm/pwm-sun4i.c               | 12 +++++++-----
>  drivers/pwm/pwm-sunplus.c             |  6 ++++--
>  drivers/pwm/pwm-visconti.c            |  6 ++++--
>  drivers/pwm/pwm-xilinx.c              |  8 +++++---
>  include/linux/pwm.h                   |  4 ++--
>  29 files changed, 146 insertions(+), 89 deletions(-)
>
> diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
> index 1bb317b8dcce..91a4232ee58c 100644
> --- a/drivers/gpio/gpio-mvebu.c
> +++ b/drivers/gpio/gpio-mvebu.c
> @@ -657,9 +657,10 @@ static void mvebu_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm)
>         spin_unlock_irqrestore(&mvpwm->lock, flags);
>  }
>
> -static void mvebu_pwm_get_state(struct pwm_chip *chip,
> -                               struct pwm_device *pwm,
> -                               struct pwm_state *state) {
> +static int mvebu_pwm_get_state(struct pwm_chip *chip,
> +                              struct pwm_device *pwm,
> +                              struct pwm_state *state)
> +{
>
>         struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip);
>         struct mvebu_gpio_chip *mvchip = mvpwm->mvchip;
> @@ -693,6 +694,8 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip,
>                 state->enabled = false;
>
>         spin_unlock_irqrestore(&mvpwm->lock, flags);
> +
> +       return 0;
>  }
>
>  static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
> diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> index 3c3561942eb6..6826d2423ae9 100644
> --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> @@ -1500,8 +1500,8 @@ static int ti_sn_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return ret;
>  }
>
> -static void ti_sn_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                               struct pwm_state *state)
> +static int ti_sn_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                              struct pwm_state *state)
>  {
>         struct ti_sn65dsi86 *pdata = pwm_chip_to_ti_sn_bridge(chip);
>         unsigned int pwm_en_inv;
> @@ -1512,19 +1512,19 @@ static void ti_sn_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>
>         ret = regmap_read(pdata->regmap, SN_PWM_EN_INV_REG, &pwm_en_inv);
>         if (ret)
> -               return;
> +               return 0;
>
>         ret = ti_sn65dsi86_read_u16(pdata, SN_BACKLIGHT_SCALE_REG, &scale);
>         if (ret)
> -               return;
> +               return 0;
>
>         ret = ti_sn65dsi86_read_u16(pdata, SN_BACKLIGHT_REG, &backlight);
>         if (ret)
> -               return;
> +               return 0;
>
>         ret = regmap_read(pdata->regmap, SN_PWM_PRE_DIV_REG, &pre_div);
>         if (ret)
> -               return;
> +               return 0;
>
>         state->enabled = FIELD_GET(SN_PWM_EN_MASK, pwm_en_inv);
>         if (FIELD_GET(SN_PWM_INV_MASK, pwm_en_inv))
> @@ -1539,6 +1539,8 @@ static void ti_sn_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>
>         if (state->duty_cycle > state->period)
>                 state->duty_cycle = state->period;
> +
> +       return 0;
>  }
>
>  static const struct pwm_ops ti_sn_pwm_ops = {
> diff --git a/drivers/leds/rgb/leds-qcom-lpg.c b/drivers/leds/rgb/leds-qcom-lpg.c
> index 02f51cc61837..741cc2fd817d 100644
> --- a/drivers/leds/rgb/leds-qcom-lpg.c
> +++ b/drivers/leds/rgb/leds-qcom-lpg.c
> @@ -968,8 +968,8 @@ static int lpg_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return ret;
>  }
>
> -static void lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                             struct pwm_state *state)
> +static int lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                            struct pwm_state *state)
>  {
>         struct lpg *lpg = container_of(chip, struct lpg, pwm);
>         struct lpg_channel *chan = &lpg->channels[pwm->hwpwm];
> @@ -982,20 +982,20 @@ static void lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>
>         ret = regmap_read(lpg->map, chan->base + LPG_SIZE_CLK_REG, &val);
>         if (ret)
> -               return;
> +               return 0;
>
>         refclk = lpg_clk_rates[val & PWM_CLK_SELECT_MASK];
>         if (refclk) {
>                 ret = regmap_read(lpg->map, chan->base + LPG_PREDIV_CLK_REG, &val);
>                 if (ret)
> -                       return;
> +                       return 0;
>
>                 pre_div = lpg_pre_divs[FIELD_GET(PWM_FREQ_PRE_DIV_MASK, val)];
>                 m = FIELD_GET(PWM_FREQ_EXP_MASK, val);
>
>                 ret = regmap_bulk_read(lpg->map, chan->base + PWM_VALUE_REG, &pwm_value, sizeof(pwm_value));
>                 if (ret)
> -                       return;
> +                       return 0;
>
>                 state->period = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC * LPG_RESOLUTION * pre_div * (1 << m), refclk);
>                 state->duty_cycle = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC * pwm_value * pre_div * (1 << m), refclk);
> @@ -1006,13 +1006,15 @@ static void lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>
>         ret = regmap_read(lpg->map, chan->base + PWM_ENABLE_CONTROL_REG, &val);
>         if (ret)
> -               return;
> +               return 0;
>
>         state->enabled = FIELD_GET(LPG_ENABLE_CONTROL_OUTPUT, val);
>         state->polarity = PWM_POLARITY_NORMAL;
>
>         if (state->duty_cycle > state->period)
>                 state->duty_cycle = state->period;
> +
> +       return 0;
>  }
>
>  static const struct pwm_ops lpg_pwm_ops = {
> diff --git a/drivers/pwm/pwm-atmel.c b/drivers/pwm/pwm-atmel.c
> index 8e00a4286145..cdbc23649032 100644
> --- a/drivers/pwm/pwm-atmel.c
> +++ b/drivers/pwm/pwm-atmel.c
> @@ -356,8 +356,8 @@ static int atmel_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return 0;
>  }
>
> -static void atmel_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                               struct pwm_state *state)
> +static int atmel_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                              struct pwm_state *state)
>  {
>         struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip);
>         u32 sr, cmr;
> @@ -396,6 +396,8 @@ static void atmel_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>                 state->polarity = PWM_POLARITY_INVERSED;
>         else
>                 state->polarity = PWM_POLARITY_NORMAL;
> +
> +       return 0;
>  }
>
>  static const struct pwm_ops atmel_pwm_ops = {
> diff --git a/drivers/pwm/pwm-bcm-iproc.c b/drivers/pwm/pwm-bcm-iproc.c
> index 7251037d4dd5..97ec131eb7c1 100644
> --- a/drivers/pwm/pwm-bcm-iproc.c
> +++ b/drivers/pwm/pwm-bcm-iproc.c
> @@ -68,8 +68,8 @@ static void iproc_pwmc_disable(struct iproc_pwmc *ip, unsigned int channel)
>         ndelay(400);
>  }
>
> -static void iproc_pwmc_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                                struct pwm_state *state)
> +static int iproc_pwmc_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                               struct pwm_state *state)
>  {
>         struct iproc_pwmc *ip = to_iproc_pwmc(chip);
>         u64 tmp, multi, rate;
> @@ -91,7 +91,7 @@ static void iproc_pwmc_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         if (rate == 0) {
>                 state->period = 0;
>                 state->duty_cycle = 0;
> -               return;
> +               return 0;
>         }
>
>         value = readl(ip->base + IPROC_PWM_PRESCALE_OFFSET);
> @@ -107,6 +107,8 @@ static void iproc_pwmc_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         value = readl(ip->base + IPROC_PWM_DUTY_CYCLE_OFFSET(pwm->hwpwm));
>         tmp = (value & IPROC_PWM_PERIOD_MAX) * multi;
>         state->duty_cycle = div64_u64(tmp, rate);
> +
> +       return 0;
>  }
>
>  static int iproc_pwmc_apply(struct pwm_chip *chip, struct pwm_device *pwm,
> diff --git a/drivers/pwm/pwm-crc.c b/drivers/pwm/pwm-crc.c
> index 7b357d1cf642..4099850117ba 100644
> --- a/drivers/pwm/pwm-crc.c
> +++ b/drivers/pwm/pwm-crc.c
> @@ -121,8 +121,8 @@ static int crc_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return 0;
>  }
>
> -static void crc_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                             struct pwm_state *state)
> +static int crc_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                            struct pwm_state *state)
>  {
>         struct crystalcove_pwm *crc_pwm = to_crc_pwm(chip);
>         struct device *dev = crc_pwm->chip.dev;
> @@ -132,13 +132,13 @@ static void crc_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         error = regmap_read(crc_pwm->regmap, PWM0_CLK_DIV, &clk_div_reg);
>         if (error) {
>                 dev_err(dev, "Error reading PWM0_CLK_DIV %d\n", error);
> -               return;
> +               return 0;
>         }
>
>         error = regmap_read(crc_pwm->regmap, PWM0_DUTY_CYCLE, &duty_cycle_reg);
>         if (error) {
>                 dev_err(dev, "Error reading PWM0_DUTY_CYCLE %d\n", error);
> -               return;
> +               return 0;
>         }
>
>         clk_div = (clk_div_reg & ~PWM_OUTPUT_ENABLE) + 1;
> @@ -149,6 +149,8 @@ static void crc_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>                 DIV_ROUND_UP_ULL(duty_cycle_reg * state->period, PWM_MAX_LEVEL);
>         state->polarity = PWM_POLARITY_NORMAL;
>         state->enabled = !!(clk_div_reg & PWM_OUTPUT_ENABLE);
> +
> +       return 0;
>  }
>
>  static const struct pwm_ops crc_pwm_ops = {
> diff --git a/drivers/pwm/pwm-cros-ec.c b/drivers/pwm/pwm-cros-ec.c
> index 7f10f56c3eb6..11684edc0620 100644
> --- a/drivers/pwm/pwm-cros-ec.c
> +++ b/drivers/pwm/pwm-cros-ec.c
> @@ -183,8 +183,8 @@ static int cros_ec_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return 0;
>  }
>
> -static void cros_ec_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                                 struct pwm_state *state)
> +static int cros_ec_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                                struct pwm_state *state)
>  {
>         struct cros_ec_pwm_device *ec_pwm = pwm_to_cros_ec_pwm(chip);
>         struct cros_ec_pwm *channel = pwm_get_chip_data(pwm);
> @@ -193,7 +193,7 @@ static void cros_ec_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         ret = cros_ec_pwm_get_duty(ec_pwm, pwm->hwpwm);
>         if (ret < 0) {
>                 dev_err(chip->dev, "error getting initial duty: %d\n", ret);
> -               return;
> +               return 0;
>         }
>
>         state->enabled = (ret > 0);
> @@ -212,6 +212,8 @@ static void cros_ec_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>                 state->duty_cycle = channel->duty_cycle;
>         else
>                 state->duty_cycle = ret;
> +
> +       return 0;
>  }
>
>  static struct pwm_device *
> diff --git a/drivers/pwm/pwm-dwc.c b/drivers/pwm/pwm-dwc.c
> index 7568300bb11e..bd2308812096 100644
> --- a/drivers/pwm/pwm-dwc.c
> +++ b/drivers/pwm/pwm-dwc.c
> @@ -163,8 +163,8 @@ static int dwc_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return 0;
>  }
>
> -static void dwc_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                             struct pwm_state *state)
> +static int dwc_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                            struct pwm_state *state)
>  {
>         struct dwc_pwm *dwc = to_dwc_pwm(chip);
>         u64 duty, period;
> @@ -188,6 +188,8 @@ static void dwc_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         state->polarity = PWM_POLARITY_INVERSED;
>
>         pm_runtime_put_sync(chip->dev);
> +
> +       return 0;
>  }
>
>  static const struct pwm_ops dwc_pwm_ops = {
> diff --git a/drivers/pwm/pwm-hibvt.c b/drivers/pwm/pwm-hibvt.c
> index 333f1b18ff4e..12c05c155cab 100644
> --- a/drivers/pwm/pwm-hibvt.c
> +++ b/drivers/pwm/pwm-hibvt.c
> @@ -128,8 +128,8 @@ static void hibvt_pwm_set_polarity(struct pwm_chip *chip,
>                                 PWM_POLARITY_MASK, (0x0 << PWM_POLARITY_SHIFT));
>  }
>
> -static void hibvt_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                               struct pwm_state *state)
> +static int hibvt_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                              struct pwm_state *state)
>  {
>         struct hibvt_pwm_chip *hi_pwm_chip = to_hibvt_pwm_chip(chip);
>         void __iomem *base;
> @@ -146,6 +146,8 @@ static void hibvt_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>
>         value = readl(base + PWM_CTRL_ADDR(pwm->hwpwm));
>         state->enabled = (PWM_ENABLE_MASK & value);
> +
> +       return 0;
>  }
>
>  static int hibvt_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
> diff --git a/drivers/pwm/pwm-imx-tpm.c b/drivers/pwm/pwm-imx-tpm.c
> index e5e7b7c339a8..ed1aad96fff0 100644
> --- a/drivers/pwm/pwm-imx-tpm.c
> +++ b/drivers/pwm/pwm-imx-tpm.c
> @@ -132,9 +132,9 @@ static int pwm_imx_tpm_round_state(struct pwm_chip *chip,
>         return 0;
>  }
>
> -static void pwm_imx_tpm_get_state(struct pwm_chip *chip,
> -                                 struct pwm_device *pwm,
> -                                 struct pwm_state *state)
> +static int pwm_imx_tpm_get_state(struct pwm_chip *chip,
> +                                struct pwm_device *pwm,
> +                                struct pwm_state *state)
>  {
>         struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip);
>         u32 rate, val, prescale;
> @@ -164,6 +164,8 @@ static void pwm_imx_tpm_get_state(struct pwm_chip *chip,
>
>         /* get channel status */
>         state->enabled = FIELD_GET(PWM_IMX_TPM_CnSC_ELS, val) ? true : false;
> +
> +       return 0;
>  }
>
>  /* this function is supposed to be called with mutex hold */
> diff --git a/drivers/pwm/pwm-imx27.c b/drivers/pwm/pwm-imx27.c
> index ea91a2f81a9f..3a22c2fddc45 100644
> --- a/drivers/pwm/pwm-imx27.c
> +++ b/drivers/pwm/pwm-imx27.c
> @@ -118,8 +118,8 @@ static void pwm_imx27_clk_disable_unprepare(struct pwm_imx27_chip *imx)
>         clk_disable_unprepare(imx->clk_ipg);
>  }
>
> -static void pwm_imx27_get_state(struct pwm_chip *chip,
> -                               struct pwm_device *pwm, struct pwm_state *state)
> +static int pwm_imx27_get_state(struct pwm_chip *chip,
> +                              struct pwm_device *pwm, struct pwm_state *state)
>  {
>         struct pwm_imx27_chip *imx = to_pwm_imx27_chip(chip);
>         u32 period, prescaler, pwm_clk, val;
> @@ -128,7 +128,7 @@ static void pwm_imx27_get_state(struct pwm_chip *chip,
>
>         ret = pwm_imx27_clk_prepare_enable(imx);
>         if (ret < 0)
> -               return;
> +               return 0;
>
>         val = readl(imx->mmio_base + MX3_PWMCR);
>
> @@ -170,6 +170,8 @@ static void pwm_imx27_get_state(struct pwm_chip *chip,
>         state->duty_cycle = DIV_ROUND_UP_ULL(tmp, pwm_clk);
>
>         pwm_imx27_clk_disable_unprepare(imx);
> +
> +       return 0;
>  }
>
>  static void pwm_imx27_sw_reset(struct pwm_chip *chip)
> diff --git a/drivers/pwm/pwm-intel-lgm.c b/drivers/pwm/pwm-intel-lgm.c
> index b66c35074087..0cd7dd548e82 100644
> --- a/drivers/pwm/pwm-intel-lgm.c
> +++ b/drivers/pwm/pwm-intel-lgm.c
> @@ -86,8 +86,8 @@ static int lgm_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return lgm_pwm_enable(chip, 1);
>  }
>
> -static void lgm_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                             struct pwm_state *state)
> +static int lgm_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                            struct pwm_state *state)
>  {
>         struct lgm_pwm_chip *pc = to_lgm_pwm_chip(chip);
>         u32 duty, val;
> @@ -100,6 +100,8 @@ static void lgm_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         regmap_read(pc->regmap, LGM_PWM_FAN_CON0, &val);
>         duty = FIELD_GET(LGM_PWM_FAN_DC_MSK, val);
>         state->duty_cycle = DIV_ROUND_UP(duty * pc->period, LGM_PWM_MAX_DUTY_CYCLE);
> +
> +       return 0;
>  }
>
>  static const struct pwm_ops lgm_pwm_ops = {
> diff --git a/drivers/pwm/pwm-iqs620a.c b/drivers/pwm/pwm-iqs620a.c
> index 54bd95a5cab0..15aae53db5ab 100644
> --- a/drivers/pwm/pwm-iqs620a.c
> +++ b/drivers/pwm/pwm-iqs620a.c
> @@ -104,8 +104,8 @@ static int iqs620_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return ret;
>  }
>
> -static void iqs620_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                                struct pwm_state *state)
> +static int iqs620_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                               struct pwm_state *state)
>  {
>         struct iqs620_pwm_private *iqs620_pwm;
>
> @@ -126,6 +126,8 @@ static void iqs620_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         mutex_unlock(&iqs620_pwm->lock);
>
>         state->period = IQS620_PWM_PERIOD_NS;
> +
> +       return 0;
>  }
>
>  static int iqs620_pwm_notifier(struct notifier_block *notifier,
> diff --git a/drivers/pwm/pwm-keembay.c b/drivers/pwm/pwm-keembay.c
> index 733811b05721..ac02d8bb4a0b 100644
> --- a/drivers/pwm/pwm-keembay.c
> +++ b/drivers/pwm/pwm-keembay.c
> @@ -89,8 +89,8 @@ static void keembay_pwm_disable(struct keembay_pwm *priv, int ch)
>                                 KMB_PWM_LEADIN_OFFSET(ch));
>  }
>
> -static void keembay_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                                 struct pwm_state *state)
> +static int keembay_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                                struct pwm_state *state)
>  {
>         struct keembay_pwm *priv = to_keembay_pwm_dev(chip);
>         unsigned long long high, low;
> @@ -113,6 +113,8 @@ static void keembay_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         state->duty_cycle = DIV_ROUND_UP_ULL(high, clk_rate);
>         state->period = DIV_ROUND_UP_ULL(high + low, clk_rate);
>         state->polarity = PWM_POLARITY_NORMAL;
> +
> +       return 0;
>  }
>
>  static int keembay_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
> diff --git a/drivers/pwm/pwm-lpss.c b/drivers/pwm/pwm-lpss.c
> index accdef5dd58e..81ac297b8ba5 100644
> --- a/drivers/pwm/pwm-lpss.c
> +++ b/drivers/pwm/pwm-lpss.c
> @@ -205,8 +205,8 @@ static int pwm_lpss_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return ret;
>  }
>
> -static void pwm_lpss_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                              struct pwm_state *state)
> +static int pwm_lpss_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                             struct pwm_state *state)
>  {
>         struct pwm_lpss_chip *lpwm = to_lpwm(chip);
>         unsigned long base_unit_range;
> @@ -236,6 +236,8 @@ static void pwm_lpss_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         state->enabled = !!(ctrl & PWM_ENABLE);
>
>         pm_runtime_put(chip->dev);
> +
> +       return 0;
>  }
>
>  static const struct pwm_ops pwm_lpss_ops = {
> diff --git a/drivers/pwm/pwm-meson.c b/drivers/pwm/pwm-meson.c
> index 57112f438c6d..16d79ca5d8f5 100644
> --- a/drivers/pwm/pwm-meson.c
> +++ b/drivers/pwm/pwm-meson.c
> @@ -318,8 +318,8 @@ static unsigned int meson_pwm_cnt_to_ns(struct pwm_chip *chip,
>         return cnt * fin_ns * (channel->pre_div + 1);
>  }
>
> -static void meson_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                               struct pwm_state *state)
> +static int meson_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                              struct pwm_state *state)
>  {
>         struct meson_pwm *meson = to_meson_pwm(chip);
>         struct meson_pwm_channel_data *channel_data;
> @@ -327,7 +327,7 @@ static void meson_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         u32 value, tmp;
>
>         if (!state)
> -               return;
> +               return 0;
>
>         channel = &meson->channels[pwm->hwpwm];
>         channel_data = &meson_pwm_per_channel_data[pwm->hwpwm];
> @@ -357,6 +357,8 @@ static void meson_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>                 state->period = 0;
>                 state->duty_cycle = 0;
>         }
> +
> +       return 0;
>  }
>
>  static const struct pwm_ops meson_pwm_ops = {
> diff --git a/drivers/pwm/pwm-mtk-disp.c b/drivers/pwm/pwm-mtk-disp.c
> index c605013e4114..9a6bb334a31b 100644
> --- a/drivers/pwm/pwm-mtk-disp.c
> +++ b/drivers/pwm/pwm-mtk-disp.c
> @@ -172,9 +172,9 @@ static int mtk_disp_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return 0;
>  }
>
> -static void mtk_disp_pwm_get_state(struct pwm_chip *chip,
> -                                  struct pwm_device *pwm,
> -                                  struct pwm_state *state)
> +static int mtk_disp_pwm_get_state(struct pwm_chip *chip,
> +                                 struct pwm_device *pwm,
> +                                 struct pwm_state *state)
>  {
>         struct mtk_disp_pwm *mdp = to_mtk_disp_pwm(chip);
>         u64 rate, period, high_width;
> @@ -184,14 +184,14 @@ static void mtk_disp_pwm_get_state(struct pwm_chip *chip,
>         err = clk_prepare_enable(mdp->clk_main);
>         if (err < 0) {
>                 dev_err(chip->dev, "Can't enable mdp->clk_main: %pe\n", ERR_PTR(err));
> -               return;
> +               return 0;
>         }
>
>         err = clk_prepare_enable(mdp->clk_mm);
>         if (err < 0) {
>                 dev_err(chip->dev, "Can't enable mdp->clk_mm: %pe\n", ERR_PTR(err));
>                 clk_disable_unprepare(mdp->clk_main);
> -               return;
> +               return 0;
>         }
>
>         rate = clk_get_rate(mdp->clk_main);
> @@ -211,6 +211,8 @@ static void mtk_disp_pwm_get_state(struct pwm_chip *chip,
>         state->polarity = PWM_POLARITY_NORMAL;
>         clk_disable_unprepare(mdp->clk_mm);
>         clk_disable_unprepare(mdp->clk_main);
> +
> +       return 0;
>  }
>
>  static const struct pwm_ops mtk_disp_pwm_ops = {
> diff --git a/drivers/pwm/pwm-pca9685.c b/drivers/pwm/pwm-pca9685.c
> index f230c10d28bb..41be244e7dd3 100644
> --- a/drivers/pwm/pwm-pca9685.c
> +++ b/drivers/pwm/pwm-pca9685.c
> @@ -431,8 +431,8 @@ static int pca9685_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return ret;
>  }
>
> -static void pca9685_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                                 struct pwm_state *state)
> +static int pca9685_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                                struct pwm_state *state)
>  {
>         struct pca9685 *pca = to_pca(chip);
>         unsigned long long duty;
> @@ -458,12 +458,14 @@ static void pca9685_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>                  */
>                 state->duty_cycle = 0;
>                 state->enabled = false;
> -               return;
> +               return 0;
>         }
>
>         state->enabled = true;
>         duty = pca9685_pwm_get_duty(pca, pwm->hwpwm);
>         state->duty_cycle = DIV_ROUND_DOWN_ULL(duty * state->period, PCA9685_COUNTER_RANGE);
> +
> +       return 0;
>  }
>
>  static int pca9685_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
> diff --git a/drivers/pwm/pwm-raspberrypi-poe.c b/drivers/pwm/pwm-raspberrypi-poe.c
> index 6ff73029f367..2939b71a7ba7 100644
> --- a/drivers/pwm/pwm-raspberrypi-poe.c
> +++ b/drivers/pwm/pwm-raspberrypi-poe.c
> @@ -82,9 +82,9 @@ static int raspberrypi_pwm_get_property(struct rpi_firmware *firmware,
>         return 0;
>  }
>
> -static void raspberrypi_pwm_get_state(struct pwm_chip *chip,
> -                                     struct pwm_device *pwm,
> -                                     struct pwm_state *state)
> +static int raspberrypi_pwm_get_state(struct pwm_chip *chip,
> +                                    struct pwm_device *pwm,
> +                                    struct pwm_state *state)
>  {
>         struct raspberrypi_pwm *rpipwm = raspberrypi_pwm_from_chip(chip);
>
> @@ -93,6 +93,8 @@ static void raspberrypi_pwm_get_state(struct pwm_chip *chip,
>                                          RPI_PWM_MAX_DUTY);
>         state->enabled = !!(rpipwm->duty_cycle);
>         state->polarity = PWM_POLARITY_NORMAL;
> +
> +       return 0;
>  }
>
>  static int raspberrypi_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,

For the pwm-raspberrypi-poe part:
Reviewed-by: Dave Stevenson <dave.stevenson at raspberrypi.com>

> diff --git a/drivers/pwm/pwm-rockchip.c b/drivers/pwm/pwm-rockchip.c
> index a5af859217c1..3ec7d1756903 100644
> --- a/drivers/pwm/pwm-rockchip.c
> +++ b/drivers/pwm/pwm-rockchip.c
> @@ -57,9 +57,9 @@ static inline struct rockchip_pwm_chip *to_rockchip_pwm_chip(struct pwm_chip *c)
>         return container_of(c, struct rockchip_pwm_chip, chip);
>  }
>
> -static void rockchip_pwm_get_state(struct pwm_chip *chip,
> -                                  struct pwm_device *pwm,
> -                                  struct pwm_state *state)
> +static int rockchip_pwm_get_state(struct pwm_chip *chip,
> +                                 struct pwm_device *pwm,
> +                                 struct pwm_state *state)
>  {
>         struct rockchip_pwm_chip *pc = to_rockchip_pwm_chip(chip);
>         u32 enable_conf = pc->data->enable_conf;
> @@ -70,11 +70,11 @@ static void rockchip_pwm_get_state(struct pwm_chip *chip,
>
>         ret = clk_enable(pc->pclk);
>         if (ret)
> -               return;
> +               return 0;
>
>         ret = clk_enable(pc->clk);
>         if (ret)
> -               return;
> +               return 0;
>
>         clk_rate = clk_get_rate(pc->clk);
>
> @@ -96,6 +96,8 @@ static void rockchip_pwm_get_state(struct pwm_chip *chip,
>
>         clk_disable(pc->clk);
>         clk_disable(pc->pclk);
> +
> +       return 0;
>  }
>
>  static void rockchip_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
> diff --git a/drivers/pwm/pwm-sifive.c b/drivers/pwm/pwm-sifive.c
> index 2d4fa5e5fdd4..1e9870aa29e9 100644
> --- a/drivers/pwm/pwm-sifive.c
> +++ b/drivers/pwm/pwm-sifive.c
> @@ -105,8 +105,8 @@ static void pwm_sifive_update_clock(struct pwm_sifive_ddata *ddata,
>                 "New real_period = %u ns\n", ddata->real_period);
>  }
>
> -static void pwm_sifive_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                                struct pwm_state *state)
> +static int pwm_sifive_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                               struct pwm_state *state)
>  {
>         struct pwm_sifive_ddata *ddata = pwm_sifive_chip_to_ddata(chip);
>         u32 duty, val;
> @@ -123,6 +123,8 @@ static void pwm_sifive_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         state->duty_cycle =
>                 (u64)duty * ddata->real_period >> PWM_SIFIVE_CMPWIDTH;
>         state->polarity = PWM_POLARITY_INVERSED;
> +
> +       return 0;
>  }
>
>  static int pwm_sifive_apply(struct pwm_chip *chip, struct pwm_device *pwm,
> diff --git a/drivers/pwm/pwm-sl28cpld.c b/drivers/pwm/pwm-sl28cpld.c
> index 589aeaaa6ac8..e64900ad4ba1 100644
> --- a/drivers/pwm/pwm-sl28cpld.c
> +++ b/drivers/pwm/pwm-sl28cpld.c
> @@ -87,9 +87,9 @@ struct sl28cpld_pwm {
>  #define sl28cpld_pwm_from_chip(_chip) \
>         container_of(_chip, struct sl28cpld_pwm, pwm_chip)
>
> -static void sl28cpld_pwm_get_state(struct pwm_chip *chip,
> -                                  struct pwm_device *pwm,
> -                                  struct pwm_state *state)
> +static int sl28cpld_pwm_get_state(struct pwm_chip *chip,
> +                                 struct pwm_device *pwm,
> +                                 struct pwm_state *state)
>  {
>         struct sl28cpld_pwm *priv = sl28cpld_pwm_from_chip(chip);
>         unsigned int reg;
> @@ -115,6 +115,8 @@ static void sl28cpld_pwm_get_state(struct pwm_chip *chip,
>          * the PWM core.
>          */
>         state->duty_cycle = min(state->duty_cycle, state->period);
> +
> +       return 0;
>  }
>
>  static int sl28cpld_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
> diff --git a/drivers/pwm/pwm-sprd.c b/drivers/pwm/pwm-sprd.c
> index 7004f55bbf11..bda8bc5af976 100644
> --- a/drivers/pwm/pwm-sprd.c
> +++ b/drivers/pwm/pwm-sprd.c
> @@ -65,8 +65,8 @@ static void sprd_pwm_write(struct sprd_pwm_chip *spc, u32 hwid,
>         writel_relaxed(val, spc->base + offset);
>  }
>
> -static void sprd_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                              struct pwm_state *state)
> +static int sprd_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                             struct pwm_state *state)
>  {
>         struct sprd_pwm_chip *spc =
>                 container_of(chip, struct sprd_pwm_chip, chip);
> @@ -83,7 +83,7 @@ static void sprd_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         if (ret) {
>                 dev_err(spc->dev, "failed to enable pwm%u clocks\n",
>                         pwm->hwpwm);
> -               return;
> +               return 0;
>         }
>
>         val = sprd_pwm_read(spc, pwm->hwpwm, SPRD_PWM_ENABLE);
> @@ -113,6 +113,8 @@ static void sprd_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         /* Disable PWM clocks if the PWM channel is not in enable state. */
>         if (!state->enabled)
>                 clk_bulk_disable_unprepare(SPRD_PWM_CHN_CLKS_NUM, chn->clks);
> +
> +       return 0;
>  }
>
>  static int sprd_pwm_config(struct sprd_pwm_chip *spc, struct pwm_device *pwm,
> diff --git a/drivers/pwm/pwm-stm32-lp.c b/drivers/pwm/pwm-stm32-lp.c
> index 3115abb3f52a..39364c52cfe4 100644
> --- a/drivers/pwm/pwm-stm32-lp.c
> +++ b/drivers/pwm/pwm-stm32-lp.c
> @@ -157,9 +157,9 @@ static int stm32_pwm_lp_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return ret;
>  }
>
> -static void stm32_pwm_lp_get_state(struct pwm_chip *chip,
> -                                  struct pwm_device *pwm,
> -                                  struct pwm_state *state)
> +static int stm32_pwm_lp_get_state(struct pwm_chip *chip,
> +                                 struct pwm_device *pwm,
> +                                 struct pwm_state *state)
>  {
>         struct stm32_pwm_lp *priv = to_stm32_pwm_lp(chip);
>         unsigned long rate = clk_get_rate(priv->clk);
> @@ -185,6 +185,8 @@ static void stm32_pwm_lp_get_state(struct pwm_chip *chip,
>         tmp = prd - val;
>         tmp = (tmp << presc) * NSEC_PER_SEC;
>         state->duty_cycle = DIV_ROUND_CLOSEST_ULL(tmp, rate);
> +
> +       return 0;
>  }
>
>  static const struct pwm_ops stm32_pwm_lp_ops = {
> diff --git a/drivers/pwm/pwm-sun4i.c b/drivers/pwm/pwm-sun4i.c
> index c8445b0a3339..37d75e252d4e 100644
> --- a/drivers/pwm/pwm-sun4i.c
> +++ b/drivers/pwm/pwm-sun4i.c
> @@ -108,9 +108,9 @@ static inline void sun4i_pwm_writel(struct sun4i_pwm_chip *chip,
>         writel(val, chip->base + offset);
>  }
>
> -static void sun4i_pwm_get_state(struct pwm_chip *chip,
> -                               struct pwm_device *pwm,
> -                               struct pwm_state *state)
> +static int sun4i_pwm_get_state(struct pwm_chip *chip,
> +                              struct pwm_device *pwm,
> +                              struct pwm_state *state)
>  {
>         struct sun4i_pwm_chip *sun4i_pwm = to_sun4i_pwm_chip(chip);
>         u64 clk_rate, tmp;
> @@ -132,7 +132,7 @@ static void sun4i_pwm_get_state(struct pwm_chip *chip,
>                 state->duty_cycle = DIV_ROUND_UP_ULL(state->period, 2);
>                 state->polarity = PWM_POLARITY_NORMAL;
>                 state->enabled = true;
> -               return;
> +               return 0;
>         }
>
>         if ((PWM_REG_PRESCAL(val, pwm->hwpwm) == PWM_PRESCAL_MASK) &&
> @@ -142,7 +142,7 @@ static void sun4i_pwm_get_state(struct pwm_chip *chip,
>                 prescaler = prescaler_table[PWM_REG_PRESCAL(val, pwm->hwpwm)];
>
>         if (prescaler == 0)
> -               return;
> +               return 0;
>
>         if (val & BIT_CH(PWM_ACT_STATE, pwm->hwpwm))
>                 state->polarity = PWM_POLARITY_NORMAL;
> @@ -162,6 +162,8 @@ static void sun4i_pwm_get_state(struct pwm_chip *chip,
>
>         tmp = (u64)prescaler * NSEC_PER_SEC * PWM_REG_PRD(val);
>         state->period = DIV_ROUND_CLOSEST_ULL(tmp, clk_rate);
> +
> +       return 0;
>  }
>
>  static int sun4i_pwm_calculate(struct sun4i_pwm_chip *sun4i_pwm,
> diff --git a/drivers/pwm/pwm-sunplus.c b/drivers/pwm/pwm-sunplus.c
> index e776fd16512d..d6ebe9f03b35 100644
> --- a/drivers/pwm/pwm-sunplus.c
> +++ b/drivers/pwm/pwm-sunplus.c
> @@ -124,8 +124,8 @@ static int sunplus_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return 0;
>  }
>
> -static void sunplus_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                                 struct pwm_state *state)
> +static int sunplus_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                                struct pwm_state *state)
>  {
>         struct sunplus_pwm *priv = to_sunplus_pwm(chip);
>         u32 mode0, dd_freq, duty;
> @@ -155,6 +155,8 @@ static void sunplus_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>         }
>
>         state->polarity = PWM_POLARITY_NORMAL;
> +
> +       return 0;
>  }
>
>  static const struct pwm_ops sunplus_pwm_ops = {
> diff --git a/drivers/pwm/pwm-visconti.c b/drivers/pwm/pwm-visconti.c
> index 927c4cbb1daf..e3fb79b3e2a7 100644
> --- a/drivers/pwm/pwm-visconti.c
> +++ b/drivers/pwm/pwm-visconti.c
> @@ -103,8 +103,8 @@ static int visconti_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>         return 0;
>  }
>
> -static void visconti_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                                  struct pwm_state *state)
> +static int visconti_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                                 struct pwm_state *state)
>  {
>         struct visconti_pwm_chip *priv = visconti_pwm_from_chip(chip);
>         u32 period, duty, pwmc0, pwmc0_clk;
> @@ -122,6 +122,8 @@ static void visconti_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm
>                 state->polarity = PWM_POLARITY_NORMAL;
>
>         state->enabled = true;
> +
> +       return 0;
>  }
>
>  static const struct pwm_ops visconti_pwm_ops = {
> diff --git a/drivers/pwm/pwm-xilinx.c b/drivers/pwm/pwm-xilinx.c
> index 4dab2b86c427..f7a50fdcd9a5 100644
> --- a/drivers/pwm/pwm-xilinx.c
> +++ b/drivers/pwm/pwm-xilinx.c
> @@ -169,9 +169,9 @@ static int xilinx_pwm_apply(struct pwm_chip *chip, struct pwm_device *unused,
>         return 0;
>  }
>
> -static void xilinx_pwm_get_state(struct pwm_chip *chip,
> -                                struct pwm_device *unused,
> -                                struct pwm_state *state)
> +static int xilinx_pwm_get_state(struct pwm_chip *chip,
> +                               struct pwm_device *unused,
> +                               struct pwm_state *state)
>  {
>         struct xilinx_timer_priv *priv = xilinx_pwm_chip_to_priv(chip);
>         u32 tlr0, tlr1, tcsr0, tcsr1;
> @@ -191,6 +191,8 @@ static void xilinx_pwm_get_state(struct pwm_chip *chip,
>          */
>         if (state->period == state->duty_cycle)
>                 state->duty_cycle = 0;
> +
> +       return 0;
>  }
>
>  static const struct pwm_ops xilinx_pwm_ops = {
> diff --git a/include/linux/pwm.h b/include/linux/pwm.h
> index d70c6e5a839d..4de09163c968 100644
> --- a/include/linux/pwm.h
> +++ b/include/linux/pwm.h
> @@ -276,8 +276,8 @@ struct pwm_ops {
>                        struct pwm_capture *result, unsigned long timeout);
>         int (*apply)(struct pwm_chip *chip, struct pwm_device *pwm,
>                      const struct pwm_state *state);
> -       void (*get_state)(struct pwm_chip *chip, struct pwm_device *pwm,
> -                         struct pwm_state *state);
> +       int (*get_state)(struct pwm_chip *chip, struct pwm_device *pwm,
> +                        struct pwm_state *state);
>         struct module *owner;
>  };
>
> --
> 2.38.1
>


From nbd at nbd.name  Thu Dec  1 02:51:51 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Thu, 1 Dec 2022 11:51:51 +0100
Subject: [PATCH 5/9] wifi: mt76: mt7996: add MAC support
In-Reply-To: <87zgc7mmr8.fsf@kernel.org>
References: <20221122084554.9494-1-shayne.chen@mediatek.com>
 <20221122084554.9494-6-shayne.chen@mediatek.com> <87zgc7mmr8.fsf@kernel.org>
Message-ID: <973c3afc-2ea6-ff05-2c61-d047bf69867f@nbd.name>

On 01.12.22 11:39, Kalle Valo wrote:
> Shayne Chen <shayne.chen at mediatek.com> writes:
> 
>> (Split the big patch into smaller intermediate patches by functionality
>> for easier review. Refer to the cover letter for more info.)
>>
>> Signed-off-by: Shayne Chen <shayne.chen at mediatek.com>
> 
> [...]
> 
>> +static void mt7996_mac_sta_poll(struct mt7996_dev *dev)
>> +{
>> +	static const u8 ac_to_tid[] = {
>> +		[IEEE80211_AC_BE] = 0,
>> +		[IEEE80211_AC_BK] = 1,
>> +		[IEEE80211_AC_VI] = 4,
>> +		[IEEE80211_AC_VO] = 6
>> +	};
>> +	struct ieee80211_sta *sta;
>> +	struct mt7996_sta *msta;
>> +	struct rate_info *rate;
>> +	u32 tx_time[IEEE80211_NUM_ACS], rx_time[IEEE80211_NUM_ACS];
>> +	LIST_HEAD(sta_poll_list);
>> +	int i;
>> +
>> +	spin_lock_bh(&dev->sta_poll_lock);
>> +	list_splice_init(&dev->sta_poll_list, &sta_poll_list);
>> +	spin_unlock_bh(&dev->sta_poll_lock);
>> +
>> +	rcu_read_lock();
>> +
>> +	while (true) {
> 
> In upstream we have a preference that there's some kind of limit for
> loops, to avoid neverending loops.
This loop pulls entries from the on-stack sta_poll_list and bails out 
when the list is empty, so it's impossible for it to be neverending.

- Felix


From tsbogend at alpha.franken.de  Thu Dec  1 02:50:49 2022
From: tsbogend at alpha.franken.de (Thomas Bogendoerfer)
Date: Thu, 1 Dec 2022 11:50:49 +0100
Subject: [PATCH] mips: ralink: mt7621: fix phy-mode of external phy on
 GB-PC2
In-Reply-To: <20221128213238.3959-1-arinc.unal@arinc9.com>
References: <20221128213238.3959-1-arinc.unal@arinc9.com>
Message-ID: <20221201105049.GA6569@alpha.franken.de>

On Tue, Nov 29, 2022 at 12:32:38AM +0300, Ar?n? ?NAL wrote:
> The phy-mode property must be defined on the MAC instead of the PHY. Define
> phy-mode under gmac1 which the external phy is connected to.
> 
> Tested-by: Petr Louda <petr.louda at outlook.cz>
> Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
> ---
>  arch/mips/boot/dts/ralink/mt7621-gnubee-gb-pc2.dts | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

applied to mips-next.

Thomas.

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]


From tsbogend at alpha.franken.de  Thu Dec  1 02:51:17 2022
From: tsbogend at alpha.franken.de (Thomas Bogendoerfer)
Date: Thu, 1 Dec 2022 11:51:17 +0100
Subject: [PATCH] mips: ralink: mt7621: change DSA port labels to generic
 naming
In-Reply-To: <20221129111711.2739-1-arinc.unal@arinc9.com>
References: <20221129111711.2739-1-arinc.unal@arinc9.com>
Message-ID: <20221201105117.GB6569@alpha.franken.de>

On Tue, Nov 29, 2022 at 02:17:11PM +0300, Ar?n? ?NAL wrote:
> Change the labels of the DSA ports to generic naming for switch ports.
> 
> Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
> ---
>  arch/mips/boot/dts/ralink/mt7621.dtsi | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)

applied to mips-next.

Thomas.

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]


From tsbogend at alpha.franken.de  Thu Dec  1 02:53:20 2022
From: tsbogend at alpha.franken.de (Thomas Bogendoerfer)
Date: Thu, 1 Dec 2022 11:53:20 +0100
Subject: [PATCH 4/5] mips: dts: remove label = "cpu" from DSA dt-binding
In-Reply-To: <20221130141040.32447-5-arinc.unal@arinc9.com>
References: <20221130141040.32447-1-arinc.unal@arinc9.com>
 <20221130141040.32447-5-arinc.unal@arinc9.com>
Message-ID: <20221201105320.GD6569@alpha.franken.de>

On Wed, Nov 30, 2022 at 05:10:39PM +0300, Ar?n? ?NAL wrote:
> This is not used by the DSA dt-binding, so remove it from all devicetrees.
> 
> Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
> ---
>  arch/mips/boot/dts/qca/ar9331.dtsi    | 1 -
>  arch/mips/boot/dts/ralink/mt7621.dtsi | 1 -
>  2 files changed, 2 deletions(-)
> 
> diff --git a/arch/mips/boot/dts/qca/ar9331.dtsi b/arch/mips/boot/dts/qca/ar9331.dtsi
> index c4102b280b47..768ac0f869b1 100644
> --- a/arch/mips/boot/dts/qca/ar9331.dtsi
> +++ b/arch/mips/boot/dts/qca/ar9331.dtsi
> @@ -176,7 +176,6 @@ ports {
>  
>  						switch_port0: port at 0 {
>  							reg = <0x0>;
> -							label = "cpu";
>  							ethernet = <&eth1>;
>  
>  							phy-mode = "gmii";
> diff --git a/arch/mips/boot/dts/ralink/mt7621.dtsi b/arch/mips/boot/dts/ralink/mt7621.dtsi
> index f3f4c1f26e01..445817cbf376 100644
> --- a/arch/mips/boot/dts/ralink/mt7621.dtsi
> +++ b/arch/mips/boot/dts/ralink/mt7621.dtsi
> @@ -386,7 +386,6 @@ port at 4 {
>  
>  					port at 6 {
>  						reg = <6>;
> -						label = "cpu";
>  						ethernet = <&gmac0>;
>  						phy-mode = "trgmii";
>  
> -- 
> 2.34.1

applied to mips-next.

Thomas.

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]


From conor.dooley at microchip.com  Thu Dec  1 03:11:51 2022
From: conor.dooley at microchip.com (Conor Dooley)
Date: Thu, 1 Dec 2022 11:11:51 +0000
Subject: [PATCH v2 00/11] pwm: Allow .get_state to fail
In-Reply-To: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
Message-ID: <Y4iL9xf5bJM5pyeR@wendy>

Hey Uwe!

On Wed, Nov 30, 2022 at 04:21:37PM +0100, Uwe Kleine-K?nig wrote:
> Hello,
> 
> I forgot about this series and was remembered when I talked to Conor
> Dooley about how .get_state() should behave in an error case.

In the context of "my" driver, get_state() the proposal was to fail with
-ETIMEDOUT rather than block a caller, potentially, for seconds or
report a potentially "random" state.

Specifically, values writen to the registers that control the PWM duty
cycle are not visible to the cpu until the changes have propagated to
the waveform at the start of a new period.
The timeout would occur if the bit that signifies that the "shadow
registers" contain a value which has not yet propagated. This bit is
per PWM "controller" and not per PWM channel.

Returning from apply() without waiting, possibly for seconds, for the
writes to become visible could cause get_state() to see anything between
the new and old states, inclusive!

If anyone cares at all, the discussion is here:
https://lore.kernel.org/linux-pwm/20221110093512.333881-1-conor.dooley at microchip.com/T/#m800eeabad29067940a5684e54106fd0bb7261944

> In v1 Thierry had the concern:
> 
> | That raises the question about what to do in these cases. If we return
> | an error, that could potentially throw off consumers. So perhaps the
> | closest would be to return a disabled PWM?
> | Or perhaps it'd be up to the
> | consumer to provide some fallback configuration for invalidly configured
> | or unconfigured PWMs.
> 
> .get_state() is only called in pwm_device_request on a pwm_state that a
> consumer might see. Before my series a consumer might have seen a
> partial modified pwm_state (because .get_state() might have modified
> .period, then stumbled and returned silently). The last patch ensures
> that this partial modification isn't given out to the consumer. Instead
> they now see the same as if .get_state wasn't implemented at all.

Getting the same thing as if get_state() did not exist seems
preferable to me in this context than "lying" and pretending that a PWM
is disabled or potentially inconsistent reports from get_state() that I
mentioned above.

TL;DR, I quite like the ability to return an error and not mislead the
caller.

Thanks for sending a v2 of this so quickly :)
Conor.



From wenst at chromium.org  Thu Dec  1 03:20:14 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu, 1 Dec 2022 19:20:14 +0800
Subject: [PATCH v2] soc: mediatek: Add deprecated compatible to mmsys
In-Reply-To: <46c17d4b-d130-86a7-b5f8-73c30d7fdfdd@collabora.com>
References: <20221111082912.14557-1-matthias.bgg@kernel.org> <46c17d4b-d130-86a7-b5f8-73c30d7fdfdd@collabora.com>
Message-ID: <CAGXv+5FORS=iGe55StxR_1E3sdtk9cvitfvNa1SydqCjWGcubg@mail.gmail.com>

On Mon, Nov 14, 2022 at 7:59 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Il 11/11/22 09:29, matthias.bgg at kernel.org ha scritto:
> > From: Matthias Brugger <matthias.bgg at gmail.com>
> >
> > For backward compatibility we add the deprecated compatible.
> >
> > Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>
> ...And tested on MT8195 Cherry Chromebook.

This now seems like a bad idea. In the dtsi we have two nodes (vdosys0 and
vdosys1) that both currently use the -mmsys compatible, which in the driver
maps to vdosys0. So not only do we have vdosys1 incorrectly probing as
vdosys0, we also have duplicate clks being registered and duplicate DRM
pipelines. On my device vdosys1 ends up winning the duplicate clock race.

I suggest just reverting this. The display stuff won't be useful unless
the drivers are able to distinguish themselves from one another.

Regards
ChenYu


From wenst at chromium.org  Thu Dec  1 03:25:46 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu, 1 Dec 2022 19:25:46 +0800
Subject: [PATCH v2] soc: mediatek: Add deprecated compatible to mmsys
In-Reply-To: <CAGXv+5FORS=iGe55StxR_1E3sdtk9cvitfvNa1SydqCjWGcubg@mail.gmail.com>
References: <20221111082912.14557-1-matthias.bgg@kernel.org>
 <46c17d4b-d130-86a7-b5f8-73c30d7fdfdd@collabora.com> <CAGXv+5FORS=iGe55StxR_1E3sdtk9cvitfvNa1SydqCjWGcubg@mail.gmail.com>
Message-ID: <CAGXv+5GfZYdhSCkhdGXRvbprwhceMJy9a9j+cNxsyUFYhMNZOw@mail.gmail.com>

On Thu, Dec 1, 2022 at 7:20 PM Chen-Yu Tsai <wenst at chromium.org> wrote:
>
> On Mon, Nov 14, 2022 at 7:59 PM AngeloGioacchino Del Regno
> <angelogioacchino.delregno at collabora.com> wrote:
> >
> > Il 11/11/22 09:29, matthias.bgg at kernel.org ha scritto:
> > > From: Matthias Brugger <matthias.bgg at gmail.com>
> > >
> > > For backward compatibility we add the deprecated compatible.
> > >
> > > Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
> >
> > Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> >
> > ...And tested on MT8195 Cherry Chromebook.
>
> This now seems like a bad idea. In the dtsi we have two nodes (vdosys0 and
> vdosys1) that both currently use the -mmsys compatible, which in the driver
> maps to vdosys0. So not only do we have vdosys1 incorrectly probing as
> vdosys0, we also have duplicate clks being registered and duplicate DRM
> pipelines. On my device vdosys1 ends up winning the duplicate clock race.
>
> I suggest just reverting this. The display stuff won't be useful unless
> the drivers are able to distinguish themselves from one another.

That and try to fix the vdosys0 node ASAP.

> Regards
> ChenYu


From deren.wu at mediatek.com  Thu Dec  1 02:38:42 2022
From: deren.wu at mediatek.com (Deren Wu)
Date: Thu, 1 Dec 2022 18:38:42 +0800
Subject: [PATCH v3] wifi: mt76: mt7921e: add pci .shutdown() support
Message-ID: <f9126324d6d047dbc39a88f98a33bfcc888596bd.1669890885.git.deren.wu@mediatek.com>

From: Leon Yen <Leon.Yen at mediatek.com>

Some combinations of hosts cannnot detect mt7921e after reboot. The
interoperability issue is caused by the status mismatch between host
and chip fw. In such cases, the driver should stop chip activities
and reset chip to default state before reboot.

Suggested-by: angelogioacchino.delregno at collabora.com
Co-developed-by: Deren Wu <deren.wu at mediatek.com>
Signed-off-by: Deren Wu <deren.wu at mediatek.com>
Signed-off-by: Leon Yen <Leon.Yen at mediatek.com>
---
v3:
  - use pci .shutdown() instead of reboot notification
  - add suggested by Angelo
v2: add reboot notification block in mt76
---
 drivers/net/wireless/mediatek/mt76/mt7921/pci.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
index 28342ec940f0..cb72ded37256 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
@@ -507,6 +507,21 @@ static int mt7921_pci_resume(struct device *device)
 	return err;
 }
 
+static void mt7921_pci_shutdown(struct pci_dev *pdev)
+{
+	struct mt76_dev *mdev = pci_get_drvdata(pdev);
+	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
+	struct mt76_connac_pm *pm = &dev->pm;
+
+	cancel_delayed_work_sync(&pm->ps_work);
+	cancel_work_sync(&pm->wake_work);
+
+	/* chip cleanup before reboot */
+	mt7921_mcu_drv_pmctrl(dev);
+	mt7921_dma_cleanup(dev);
+	mt7921_wfsys_reset(dev);
+}
+
 static DEFINE_SIMPLE_DEV_PM_OPS(mt7921_pm_ops, mt7921_pci_suspend, mt7921_pci_resume);
 
 static struct pci_driver mt7921_pci_driver = {
@@ -514,6 +529,7 @@ static struct pci_driver mt7921_pci_driver = {
 	.id_table	= mt7921_pci_device_table,
 	.probe		= mt7921_pci_probe,
 	.remove		= mt7921_pci_remove,
+	.shutdown	= mt7921_pci_shutdown,
 	.driver.pm	= pm_sleep_ptr(&mt7921_pm_ops),
 };
 
-- 
2.18.0



From arinc.unal at arinc9.com  Thu Dec  1 03:37:31 2022
From: arinc.unal at arinc9.com (=?UTF-8?B?QXLEsW7DpyDDnE5BTA==?=)
Date: Thu, 1 Dec 2022 14:37:31 +0300
Subject: [PATCH 0/5] remove label = "cpu" from DSA dt-binding
In-Reply-To: <877czbs8w7.fsf@mpe.ellerman.id.au>
References: <20221130141040.32447-1-arinc.unal@arinc9.com>
 <Y4d9B7VSHvqJn0iS@lunn.ch> <32638470-b074-3b14-bfb2-10b49307b9e3@arinc9.com>
 <877czbs8w7.fsf@mpe.ellerman.id.au>
Message-ID: <83ed1490-4d87-98c5-2616-54b5f1ab64b7@arinc9.com>

On 1.12.2022 13:42, Michael Ellerman wrote:
> Ar?n? ?NAL <arinc.unal at arinc9.com> writes:
>> On 30.11.2022 18:55, Andrew Lunn wrote:
>>> On Wed, Nov 30, 2022 at 05:10:35PM +0300, Ar?n? ?NAL wrote:
>>>> Hello folks,
>>>>
>>>> With this patch series, we're completely getting rid of 'label = "cpu";'
>>>> which is not used by the DSA dt-binding at all.
>>>>
>>>> Information for taking the patches for maintainers:
>>>> Patch 1: netdev maintainers (based off netdev/net-next.git main)
>>>> Patch 2-3: SoC maintainers (based off soc/soc.git soc/dt)
>>>> Patch 4: MIPS maintainers (based off mips/linux.git mips-next)
>>>> Patch 5: PowerPC maintainers (based off powerpc/linux.git next-test)
>>>
>>> Hi Ar?n?
>>>
>>> So your plan is that each architecture maintainer merges one patch?
>>
>> Initially, I sent this series to soc at kernel.org to take it all but Rob
>> said it must be this way instead.
>>
>>>
>>> That is fine, but it is good to be explicit, otherwise patches will
>>> fall through the cracks because nobody picks them up. I generally use
>>> To: to indicate who i expect to merge a patch, and everybody else in
>>> the Cc:
>>
>> Thanks for this, I'll follow suit if I don't see any activity for a few
>> weeks.
> 
> IMHO the best solution if the patches are truly independent is to send
> them independantly to each maintainer. That way there's no confusion
> about whether someone else will take the series.
> 
> It's also simpler for maintainers to apply a single standalone patch vs
> pick a single patch from a larger series.

I agree. I'll do that next time.

Cheers.
Ar?n?


From y.oudjana at protonmail.com  Thu Dec  1 03:42:26 2022
From: y.oudjana at protonmail.com (Yassine Oudjana)
Date: Thu, 01 Dec 2022 11:42:26 +0000
Subject: [PATCH v5 1/7] dt-bindings: pinctrl: mediatek,mt6779-pinctrl: Pull pinctrl node changes from MT6795 document
In-Reply-To: <20221130152041.GA2183918-robh@kernel.org>
References: <20221118113028.145348-1-y.oudjana@protonmail.com> <20221118113028.145348-2-y.oudjana@protonmail.com> <20221130152041.GA2183918-robh@kernel.org>
Message-ID: <OlpG9EaFtnZPPSHGKPeAj0wrG-hceDitxke8L1MrF58nBbOf4Q8bsw1FC8O12qj_3GFxNpM4p_LeKwbCzchvZGaD0a_S56_uKhg7YWszZ9A=@protonmail.com>

On Wednesday, November 30th, 2022 at 6:20 PM, Rob Herring <robh at kernel.org> wrote:

> On Fri, Nov 18, 2022 at 02:30:22PM +0300, Yassine Oudjana wrote:
> 
> > From: Yassine Oudjana y.oudjana at protonmail.com
> > 
> > mediatek,pinctrl-mt6795.yaml has different node name patterns which match
> > bindings of other MediaTek pin controllers, ref for pinmux-node.yaml which
> > has a description of the pinmux property, as well as some additional
> > descriptions for some pin configuration properties. Pull those changes
> > into mediatek,mt6779-pinctrl.yaml and adjust the example DTS to match in
> > preparation to combine the MT6795 document into it.
> > 
> > Signed-off-by: Yassine Oudjana y.oudjana at protonmail.com
> > ---
> > .../pinctrl/mediatek,mt6779-pinctrl.yaml | 38 ++++++++++++++-----
> > 1 file changed, 28 insertions(+), 10 deletions(-)
> > 
> > diff --git a/Documentation/devicetree/bindings/pinctrl/mediatek,mt6779-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/mediatek,mt6779-pinctrl.yaml
> > index a2141eb0854e..d6231d11e949 100644
> > --- a/Documentation/devicetree/bindings/pinctrl/mediatek,mt6779-pinctrl.yaml
> > +++ b/Documentation/devicetree/bindings/pinctrl/mediatek,mt6779-pinctrl.yaml
> > @@ -111,19 +111,21 @@ allOf:
> > - "#interrupt-cells"
> > 
> > patternProperties:
> > - '-[0-9]*$':
> > + '-pins$':
> > type: object
> > additionalProperties: false
> > 
> > patternProperties:
> > - '-pins*$':
> > + '^pins':
> > type: object
> > description: |
> > A pinctrl node should contain at least one subnodes representing the
> > pinctrl groups available on the machine. Each subnode will list the
> > pins it needs, and how they should be configured, with regard to muxer
> > configuration, pullups, drive strength, input enable/disable and input schmitt.
> > - $ref: "/schemas/pinctrl/pincfg-node.yaml"
> > + allOf:
> > + - $ref: pinmux-node.yaml
> > + - $ref: pincfg-node.yaml
> > 
> > properties:
> > pinmux:
> > @@ -134,9 +136,25 @@ patternProperties:
> > 
> > bias-disable: true
> > 
> > - bias-pull-up: true
> > -
> > - bias-pull-down: true
> > + bias-pull-up:
> > + oneOf:
> > + - type: boolean
> > + - enum: [100, 101, 102, 103]
> > + description: Pull up PUPD/R0/R1 type define value.
> > + description: |
> > + For normal pull up type, it is not necessary to specify R1R0
> > + values; When pull up type is PUPD/R0/R1, adding R1R0 defines
> > + will set different resistance values.
> > +
> > + bias-pull-down:
> > + oneOf:
> > + - type: boolean
> > + - enum: [100, 101, 102, 103]
> 
> 
> 'bias-pull-down' is defined to be in Ohms. This doesn't look like it's
> Ohms.

That's right, these numbers appear to correspond to MTK_PUPD_SET_R1R0_*
values defined in include/dt-bindings/pinctrl/mt65xx.h, and work similar
to mediatek,pull-down-adv as defined in mediatek,mt8183-pinctrl.yaml.

Now I think the easiest thing to do in order to sort this out would be
be to stop supporting bias-pull-[up/down] properties and replace them
with mediatek,pull-[up/down]-adv, but I guess that would break old DT.
Changing the supported values to represent ohms and modifying drivers
to accommodate for that would be quite tedious since every pin group
on every SoC has different supported pull resistances, and it would
still break compatibility with old DT anyway.

Does anyone have a better idea on this? Or perhaps we could leave fixing
this for another time since issues with these bindings seem to never end
and this patch series just keeps growing.



From broonie at kernel.org  Thu Dec  1 03:43:18 2022
From: broonie at kernel.org (Mark Brown)
Date: Thu, 1 Dec 2022 11:43:18 +0000
Subject: [PATCH 1/2] regulator: mt6370: Fix potential UAF issue
In-Reply-To: <1669797463-24887-1-git-send-email-u0084500@gmail.com>
References: <1669797463-24887-1-git-send-email-u0084500@gmail.com>
Message-ID: <Y4iTVmOA5P/aN2yb@sirena.org.uk>

On Wed, Nov 30, 2022 at 04:37:42PM +0800, cy_huang wrote:

> The original code uses i2c dev as the parent in order to reuse
> the 'regulator_of_get_init_data'. But this will cause regulation
> constraint devres attached to i2c dev, not the mfd cell platform
> device.

This is a general issue which will affect a lot of MFDs, we would be
better to fix this by changing the API to provide a device to be used
for the devres allocations separately to the one used for looking up the
DT.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221201/98b36dcd/attachment.sig>

From wenst at chromium.org  Thu Dec  1 03:44:55 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu, 1 Dec 2022 19:44:55 +0800
Subject: [PATCH v28 05/11] soc: mediatek: refine code to use
 mtk_mmsys_update_bits API
In-Reply-To: <20221107072243.15748-6-nancy.lin@mediatek.com>
References: <20221107072243.15748-1-nancy.lin@mediatek.com> <20221107072243.15748-6-nancy.lin@mediatek.com>
Message-ID: <CAGXv+5Hj-H6Q3N+j2tEntd9M=9p0o7TxWYn_4aawhqFUbX7+PQ@mail.gmail.com>

On Mon, Nov 7, 2022 at 3:23 PM Nancy.Lin <nancy.lin at mediatek.com> wrote:
>
> Simplify code for update  mmsys reg.
>
> Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> Reviewed-by: CK Hu <ck.hu at mediatek.com>
> Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
> Reviewed-by: N?colas F. R. A. Prado <nfraprado at collabora.com>
> ---
>  drivers/soc/mediatek/mtk-mmsys.c | 45 ++++++++++++--------------------
>  1 file changed, 16 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
> index 9a327eb5d9d7..73c8bd27e6ae 100644
> --- a/drivers/soc/mediatek/mtk-mmsys.c
> +++ b/drivers/soc/mediatek/mtk-mmsys.c

[...]

> @@ -124,27 +129,14 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
>  {
>         struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
>         const struct mtk_mmsys_routes *routes = mmsys->data->routes;
> -       u32 reg;
>         int i;
>
>         for (i = 0; i < mmsys->data->num_routes; i++)
> -               if (cur == routes[i].from_comp && next == routes[i].to_comp) {
> -                       reg = readl_relaxed(mmsys->regs + routes[i].addr);
> -                       reg &= ~routes[i].mask;
> -                       writel_relaxed(reg, mmsys->regs + routes[i].addr);
> -               }
> +               if (cur == routes[i].from_comp && next == routes[i].to_comp)
> +                       mtk_mmsys_update_bits(mmsys, routes[i].addr, routes[i].mask, 0);
>  }
>  EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_disconnect);
>
> -static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val)
> -{
> -       u32 tmp;
> -
> -       tmp = readl_relaxed(mmsys->regs + offset);
> -       tmp = (tmp & ~mask) | val;
> -       writel_relaxed(tmp, mmsys->regs + offset);
> -}
> -
>  void mtk_mmsys_ddp_dpi_fmt_config(struct device *dev, u32 val)
>  {
>         if (val)

This hunk now doesn't apply due to

    soc: mediatek: Add all settings to mtk_mmsys_ddp_dpi_fmt_config func

touching mtk_mmsys_ddp_dpi_fmt_config() as well. It's trivial to resolve
though.

ChenYu


From yunfei.dong at mediatek.com  Thu Dec  1 04:15:24 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Thu, 1 Dec 2022 20:15:24 +0800
Subject: [PATCH v3,3/3] arm64: dts: mt8195: Add video decoder node
In-Reply-To: <20221201121525.30777-1-yunfei.dong@mediatek.com>
References: <20221201121525.30777-1-yunfei.dong@mediatek.com>
Message-ID: <20221201121525.30777-3-yunfei.dong@mediatek.com>

From: Yunfei Dong <yunfei.dong at mediatek.corp-partner.google.com>

Add video decoder node to mt8195 device tree.

Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 arch/arm64/boot/dts/mediatek/mt8195.dtsi | 70 ++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index 905d1a90b406..2f6f87a8e90b 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -1874,6 +1874,76 @@
 			power-domains = <&spm MT8195_POWER_DOMAIN_CAM>;
 		};
 
+		video-codec at 18000000 {
+			compatible = "mediatek,mt8195-vcodec-dec";
+			mediatek,scp = <&scp>;
+			iommus = <&iommu_vdo M4U_PORT_L21_VDEC_MC_EXT>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+			reg = <0 0x18000000 0 0x1000>,
+			      <0 0x18004000 0 0x1000>;
+			ranges = <0 0 0 0x18000000 0 0x26000>;
+
+			video-codec at 2000 {
+				compatible = "mediatek,mtk-vcodec-lat-soc";
+				reg = <0 0x2000 0 0x800>;
+				iommus = <&iommu_vpp M4U_PORT_L23_VDEC_UFO_ENC_EXT>,
+					 <&iommu_vpp M4U_PORT_L23_VDEC_RDMA_EXT>;
+				clocks = <&topckgen CLK_TOP_VDEC>,
+					 <&vdecsys_soc CLK_VDEC_SOC_VDEC>,
+					 <&vdecsys_soc CLK_VDEC_SOC_LAT>,
+					 <&topckgen CLK_TOP_UNIVPLL_D4>;
+				clock-names = "vdec-sel", "vdec-soc-vdec", "vdec-soc-lat", "vdec-top";
+				assigned-clocks = <&topckgen CLK_TOP_VDEC>;
+				assigned-clock-parents = <&topckgen CLK_TOP_UNIVPLL_D4>;
+				power-domains = <&spm MT8195_POWER_DOMAIN_VDEC0>;
+			};
+
+			video-codec at 10000 {
+				compatible = "mediatek,mtk-vcodec-lat";
+				reg = <0 0x10000 0 0x800>;
+				interrupts = <GIC_SPI 708 IRQ_TYPE_LEVEL_HIGH 0>;
+				iommus = <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_VLD_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_VLD2_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_AVC_MC_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_PRED_RD_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_TILE_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_WDMA_EXT>;
+				clocks = <&topckgen CLK_TOP_VDEC>,
+					 <&vdecsys_soc CLK_VDEC_SOC_VDEC>,
+					 <&vdecsys_soc CLK_VDEC_SOC_LAT>,
+					 <&topckgen CLK_TOP_UNIVPLL_D4>;
+				clock-names = "vdec-sel", "vdec-soc-vdec", "vdec-soc-lat", "vdec-top";
+				assigned-clocks = <&topckgen CLK_TOP_VDEC>;
+				assigned-clock-parents = <&topckgen CLK_TOP_UNIVPLL_D4>;
+				power-domains = <&spm MT8195_POWER_DOMAIN_VDEC0>;
+			};
+
+			video-codec at 25000 {
+				compatible = "mediatek,mtk-vcodec-core";
+				reg = <0 0x25000 0 0x1000>;		/* VDEC_CORE_MISC */
+				interrupts = <GIC_SPI 707 IRQ_TYPE_LEVEL_HIGH 0>;
+				iommus = <&iommu_vdo M4U_PORT_L21_VDEC_MC_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_UFO_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_PP_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_PRED_RD_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_PRED_WR_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_PPWRAP_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_TILE_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_VLD_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_VLD2_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_AVC_MV_EXT>;
+				clocks = <&topckgen CLK_TOP_VDEC>,
+					 <&vdecsys CLK_VDEC_VDEC>,
+					 <&vdecsys CLK_VDEC_LAT>,
+					 <&topckgen CLK_TOP_UNIVPLL_D4>;
+				clock-names = "vdec-sel", "vdec-vdec", "vdec-lat", "vdec-top";
+				assigned-clocks = <&topckgen CLK_TOP_VDEC>;
+				assigned-clock-parents = <&topckgen CLK_TOP_UNIVPLL_D4>;
+				power-domains = <&spm MT8195_POWER_DOMAIN_VDEC1>;
+			};
+		};
+
 		larb24: larb at 1800d000 {
 			compatible = "mediatek,mt8195-smi-larb";
 			reg = <0 0x1800d000 0 0x1000>;
-- 
2.18.0



From yunfei.dong at mediatek.com  Thu Dec  1 04:15:23 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Thu, 1 Dec 2022 20:15:23 +0800
Subject: [PATCH v3,2/3] media: dt-bindings: media: mediatek: vcodec: Change the max reg value to 2
In-Reply-To: <20221201121525.30777-1-yunfei.dong@mediatek.com>
References: <20221201121525.30777-1-yunfei.dong@mediatek.com>
Message-ID: <20221201121525.30777-2-yunfei.dong@mediatek.com>

From: Yunfei Dong <yunfei.dong at mediatek.corp-partner.google.com>

Need to add racing control register base in device node for mt8195 support
inner racing mode. Changing the max reg value from 1 to 2.

Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 .../bindings/media/mediatek,vcodec-subdev-decoder.yaml      | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
index 09781ef02193..d20ef15147a4 100644
--- a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
+++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
@@ -61,7 +61,10 @@ properties:
       - mediatek,mt8195-vcodec-dec
 
   reg:
-    maxItems: 1
+    minItems: 1
+    items:
+      - description: VDEC_SYS register space
+      - description: VDEC_RACING_CTRL register space
 
   iommus:
     minItems: 1
@@ -98,6 +101,7 @@ patternProperties:
 
       reg:
         maxItems: 1
+        description: VDEC_MISC register space
 
       interrupts:
         maxItems: 1
-- 
2.18.0



From krzysztof.kozlowski at linaro.org  Thu Dec  1 04:16:10 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Thu, 1 Dec 2022 13:16:10 +0100
Subject: [PATCH v5 1/2] dt-bindings: mailbox: add GCE header file for
 mt8188
In-Reply-To: <20221201071316.24583-2-Elvis.Wang@mediatek.com>
References: <20221201071316.24583-1-Elvis.Wang@mediatek.com>
 <20221201071316.24583-2-Elvis.Wang@mediatek.com>
Message-ID: <2cac7d40-1807-63b2-9be7-9e88e721b68c@linaro.org>

On 01/12/2022 08:13, Elvis.Wang wrote:
> From: Elvis Wang <Elvis.Wang at mediatek.com>
> 
> Add Global Command Engine(GCE) header file to define the GCE thread priority,
> GCE subsys id, event and constant for mt8188.
> 
> Signed-off-by: Elvis Wang <Elvis.Wang at mediatek.com>
> Reviewed-by: AngeloGioacchino Del Regno<angelogioacchino.delregno at collabora.com>
> ---

You got my ack here already.

Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Best regards,
Krzysztof



From yunfei.dong at mediatek.com  Thu Dec  1 04:15:22 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Thu, 1 Dec 2022 20:15:22 +0800
Subject: [PATCH v3,1/3] media: dt-bindings: media: mediatek: vcodec: Fix clock num not correctly
Message-ID: <20221201121525.30777-1-yunfei.dong@mediatek.com>

From: Yunfei Dong <yunfei.dong at mediatek.corp-partner.google.com>

mt8195 and mt8192 have different clock numbers, can't write 'clocks' and
'clock-names' with const value.

Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
Reference series:
[1]: v5 of this series is presend by Allen-KH Cheng.
     message-id: 20221128143832.25584-4-allen-kh.cheng at mediatek.com
---
 .../bindings/media/mediatek,vcodec-subdev-decoder.yaml   | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
index 7c5b4a91c59b..09781ef02193 100644
--- a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
+++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
@@ -110,15 +110,12 @@ patternProperties:
           Refer to bindings/iommu/mediatek,iommu.yaml.
 
       clocks:
+        minItems: 1
         maxItems: 5
 
       clock-names:
-        items:
-          - const: sel
-          - const: soc-vdec
-          - const: soc-lat
-          - const: vdec
-          - const: top
+        minItems: 1
+        maxItems: 5
 
       assigned-clocks:
         maxItems: 1
-- 
2.18.0



From angelogioacchino.delregno at collabora.com  Thu Dec  1 05:01:30 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 1 Dec 2022 14:01:30 +0100
Subject: [PATCH v3,3/3] arm64: dts: mt8195: Add video decoder node
In-Reply-To: <20221201121525.30777-3-yunfei.dong@mediatek.com>
References: <20221201121525.30777-1-yunfei.dong@mediatek.com>
 <20221201121525.30777-3-yunfei.dong@mediatek.com>
Message-ID: <0bc7c690-597c-e49f-d406-52fd9f9a4348@collabora.com>

Il 01/12/22 13:15, Yunfei Dong ha scritto:
> From: Yunfei Dong <yunfei.dong at mediatek.corp-partner.google.com>
> 
> Add video decoder node to mt8195 device tree.
> 
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Thu Dec  1 05:01:35 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 1 Dec 2022 14:01:35 +0100
Subject: [PATCH v3,2/3] media: dt-bindings: media: mediatek: vcodec:
 Change the max reg value to 2
In-Reply-To: <20221201121525.30777-2-yunfei.dong@mediatek.com>
References: <20221201121525.30777-1-yunfei.dong@mediatek.com>
 <20221201121525.30777-2-yunfei.dong@mediatek.com>
Message-ID: <e8ab56e4-0148-cb1c-78c8-c6700aa9720c@collabora.com>

Il 01/12/22 13:15, Yunfei Dong ha scritto:
> From: Yunfei Dong <yunfei.dong at mediatek.corp-partner.google.com>
> 
> Need to add racing control register base in device node for mt8195 support
> inner racing mode. Changing the max reg value from 1 to 2.
> 
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>

You forgot to mention in the commit message that you're also adding a description
for the VDEC_MISC register space.

Please add that, after which:

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Thu Dec  1 05:11:19 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 1 Dec 2022 14:11:19 +0100
Subject: [PATCH v2 08/11] pwm: mtk-disp: Propagate errors in .get_state()
 to the caller
In-Reply-To: <20221130152148.2769768-9-u.kleine-koenig@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
 <20221130152148.2769768-9-u.kleine-koenig@pengutronix.de>
Message-ID: <e3299122-8977-de7a-5030-6519bc99f658@collabora.com>

Il 30/11/22 16:21, Uwe Kleine-K?nig ha scritto:
> .get_state() can return an error indication. Make use of it to propagate
> failing hardware accesses.
> 
> Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From u.kleine-koenig at pengutronix.de  Thu Dec  1 05:16:04 2022
From: u.kleine-koenig at pengutronix.de (Uwe =?utf-8?Q?Kleine-K=C3=B6nig?=)
Date: Thu, 1 Dec 2022 14:16:04 +0100
Subject: [PATCH v2 01/11] pwm: Make .get_state() callback return an error
 code
In-Reply-To: <20221201102252.52ace284@donnerap.cambridge.arm.com>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
 <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
 <20221201102252.52ace284@donnerap.cambridge.arm.com>
Message-ID: <20221201131604.beq4l22d42tjy6dm@pengutronix.de>

Hello Andre,

On Thu, Dec 01, 2022 at 10:22:52AM +0000, Andre Przywara wrote:
> Just one comment: I don't see a sunxi specific patch later in the series,
> though it seems we have at least one error error exit (see prescaler == 0
> above). Plus potentially another exit if clk_get_rate() (at the very
> beginning) fails.
> Shall I send a patch for that?

That would we very welcome. I mentioned that shortly in the cover
letter, I wasn't entirely sure how to handle that prescaler = 0 case.

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-K?nig            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221201/04804eaa/attachment.sig>

From u.kleine-koenig at pengutronix.de  Thu Dec  1 05:19:07 2022
From: u.kleine-koenig at pengutronix.de (Uwe =?utf-8?Q?Kleine-K=C3=B6nig?=)
Date: Thu, 1 Dec 2022 14:19:07 +0100
Subject: [PATCH v2 00/11] pwm: Allow .get_state to fail
In-Reply-To: <Y4iL9xf5bJM5pyeR@wendy>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
 <Y4iL9xf5bJM5pyeR@wendy>
Message-ID: <20221201131907.bmrenldnua7uaeab@pengutronix.de>

Hello Conor,

On Thu, Dec 01, 2022 at 11:11:51AM +0000, Conor Dooley wrote:
> TL;DR, I quite like the ability to return an error and not mislead the
> caller.

Is this an Ack?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-K?nig            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221201/2ef14546/attachment-0001.sig>

From angelogioacchino.delregno at collabora.com  Thu Dec  1 05:24:17 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 1 Dec 2022 14:24:17 +0100
Subject: [PATCH v2 1/2] thermal: mediatek: add support for MT7986 and
 MT7981
In-Reply-To: <Y4dYazyXF02eRGC5@makrotopia.org>
References: <Y4dYazyXF02eRGC5@makrotopia.org>
Message-ID: <0b72a12c-286f-79d0-09e9-b1761530850a@collabora.com>

Il 30/11/22 14:19, Daniel Golle ha scritto:
> Add support for V3 generation thermal found in MT7986 and MT7981 SoCs.
> Brings code to assign values from efuse as well as new function to
> convert raw temperature to millidegree celsius, as found in MediaTek's
> SDK sources (but cleaned up and de-duplicated)
> 
> [1]: https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/baf36c7eef477aae1f8f2653b6c29e2caf48475b
> Signed-off-by: Daniel Golle <daniel at makrotopia.org>
> Reviewed-by: Henry Yen <henry.yen at mediatek.com>
> ---
> Changes since v1: Drop use of adc_oe field in efuse, Henry Yen confirmed
> its use has been dropped intentionally in MTK SDK as well.
> 
>   drivers/thermal/mtk_thermal.c | 122 +++++++++++++++++++++++++++++++++-
>   1 file changed, 119 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
> index 8440692e3890..6a69419f8960 100644
> --- a/drivers/thermal/mtk_thermal.c
> +++ b/drivers/thermal/mtk_thermal.c
> @@ -150,6 +150,21 @@
>   #define CALIB_BUF1_VALID_V2(x)		(((x) >> 4) & 0x1)
>   #define CALIB_BUF1_O_SLOPE_SIGN_V2(x)	(((x) >> 3) & 0x1)
>   
> +/*
> + * Layout of the fuses providing the calibration data
> + * These macros can be used for MT7981 and MT7986.
> + */
> +#define CALIB_BUF0_ADC_GE_V3(x)		(((x) >> 0) & 0x3ff)
> +#define CALIB_BUF0_ADC_OE_V3(x)		(((x) >> 10) & 0x3ff)
> +#define CALIB_BUF0_DEGC_CALI_V3(x)	(((x) >> 20) & 0x3f)
> +#define CALIB_BUF0_O_SLOPE_V3(x)	(((x) >> 26) & 0x3f)
> +#define CALIB_BUF1_VTS_TS1_V3(x)	(((x) >> 0) & 0x1ff)
> +#define CALIB_BUF1_VTS_TS2_V3(x)	(((x) >> 21) & 0x1ff)
> +#define CALIB_BUF1_VTS_TSABB_V3(x)	(((x) >> 9) & 0x1ff)
> +#define CALIB_BUF1_VALID_V3(x)		(((x) >> 18) & 0x1)
> +#define CALIB_BUF1_O_SLOPE_SIGN_V3(x)	(((x) >> 19) & 0x1)
> +#define CALIB_BUF1_ID_V3(x)		(((x) >> 20) & 0x1)
> +
>   enum {
>   	VTS1,
>   	VTS2,
> @@ -163,6 +178,7 @@ enum {
>   enum mtk_thermal_version {
>   	MTK_THERMAL_V1 = 1,
>   	MTK_THERMAL_V2,
> +	MTK_THERMAL_V3,
>   };
>   
>   /* MT2701 thermal sensors */
> @@ -245,6 +261,27 @@ enum mtk_thermal_version {
>   /* The calibration coefficient of sensor  */
>   #define MT8183_CALIBRATION	153
>   
> +/* AUXADC channel 11 is used for the temperature sensors */
> +#define MT7986_TEMP_AUXADC_CHANNEL	11
> +
> +/* The total number of temperature sensors in the MT7986 */
> +#define MT7986_NUM_SENSORS		1
> +
> +/* The number of banks in the MT7986 */
> +#define MT7986_NUM_ZONES		1
> +
> +/* The number of sensing points per bank */
> +#define MT7986_NUM_SENSORS_PER_ZONE	1
> +
> +/* MT7986 thermal sensors */
> +#define MT7986_TS1			0
> +
> +/* The number of controller in the MT7986 */
> +#define MT7986_NUM_CONTROLLER		1
> +
> +/* The calibration coefficient of sensor  */
> +#define MT7986_CALIBRATION		165
> +
>   struct mtk_thermal;
>   
>   struct thermal_bank_cfg {
> @@ -386,6 +423,14 @@ static const int mt7622_mux_values[MT7622_NUM_SENSORS] = { 0, };
>   static const int mt7622_vts_index[MT7622_NUM_SENSORS] = { VTS1 };
>   static const int mt7622_tc_offset[MT7622_NUM_CONTROLLER] = { 0x0, };
>   
> +/* MT7986 thermal sensor data */
> +static const int mt7986_bank_data[MT7986_NUM_SENSORS] = { MT7986_TS1, };
> +static const int mt7986_msr[MT7986_NUM_SENSORS_PER_ZONE] = { TEMP_MSR0, };
> +static const int mt7986_adcpnp[MT7986_NUM_SENSORS_PER_ZONE] = { TEMP_ADCPNP0, };
> +static const int mt7986_mux_values[MT7986_NUM_SENSORS] = { 0, };
> +static const int mt7986_vts_index[MT7986_NUM_SENSORS] = { VTS1 };
> +static const int mt7986_tc_offset[MT7986_NUM_CONTROLLER] = { 0x0, };
> +
>   /*
>    * The MT8173 thermal controller has four banks. Each bank can read up to
>    * four temperature sensors simultaneously. The MT8173 has a total of 5
> @@ -549,6 +594,30 @@ static const struct mtk_thermal_data mt8183_thermal_data = {
>   	.version = MTK_THERMAL_V1,
>   };
>   
> +/*
> + * MT7986 uses AUXADC Channel 11 for raw data access.
> + */
> +static const struct mtk_thermal_data mt7986_thermal_data = {
> +	.auxadc_channel = MT7986_TEMP_AUXADC_CHANNEL,
> +	.num_banks = MT7986_NUM_ZONES,
> +	.num_sensors = MT7986_NUM_SENSORS,
> +	.vts_index = mt7986_vts_index,
> +	.cali_val = MT7986_CALIBRATION,
> +	.num_controller = MT7986_NUM_CONTROLLER,
> +	.controller_offset = mt7986_tc_offset,
> +	.need_switch_bank = true,
> +	.bank_data = {
> +		{
> +			.num_sensors = 1,
> +			.sensors = mt7986_bank_data,
> +		},
> +	},
> +	.msr = mt7986_msr,
> +	.adcpnp = mt7986_adcpnp,
> +	.sensor_mux_values = mt7986_mux_values,
> +	.version = MTK_THERMAL_V3,
> +};
> +
>   /**
>    * raw_to_mcelsius - convert a raw ADC value to mcelsius
>    * @mt:	The thermal controller
> @@ -603,6 +672,22 @@ static int raw_to_mcelsius_v2(struct mtk_thermal *mt, int sensno, s32 raw)
>   	return (format_2 - tmp) * 100;
>   }
>   
> +static int raw_to_mcelsius_v3(struct mtk_thermal *mt, int sensno, s32 raw)
> +{
> +	s32 tmp;
> +
> +	if (raw == 0)
> +		return 0;
> +
> +	raw &= 0xfff;
> +	tmp = 100000 * 15 / 16 * 10000;
> +	tmp /= 4096 - 512 + mt->adc_ge;
> +	tmp /= 1490;
> +	tmp *= raw - mt->vts[sensno] - 2900;
> +
> +	return mt->degc_cali * 500 - tmp;
> +}
> +
>   /**
>    * mtk_thermal_get_bank - get bank
>    * @bank:	The bank
> @@ -659,9 +744,12 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
>   		if (mt->conf->version == MTK_THERMAL_V1) {
>   			temp = raw_to_mcelsius_v1(
>   				mt, conf->bank_data[bank->id].sensors[i], raw);
> -		} else {
> +		} else if (mt->conf->version == MTK_THERMAL_V2) {
>   			temp = raw_to_mcelsius_v2(
>   				mt, conf->bank_data[bank->id].sensors[i], raw);
> +		} else {
> +			temp = raw_to_mcelsius_v3(
> +				mt, conf->bank_data[bank->id].sensors[i], raw);
>   		}

What about optimizing this with assigning a function pointer?
Like that, we wouldn't check any version in there... as in that case we'd
simply do something like

temp = conf->raw_to_mcelsius(mt, conf->bank...blahblah...);

...and this would also mean that the snippet saying "the first read of a sensor
often contains very high bogus temperature value [...]" would get merged in the v2
of raw_to_mcelsius (as that function is used only in mtk_thermal_bank_temperature).

>   
>   		/*
> @@ -887,6 +975,26 @@ static int mtk_thermal_extract_efuse_v2(struct mtk_thermal *mt, u32 *buf)
>   	return 0;
>   }
>   
> +static int mtk_thermal_extract_efuse_v3(struct mtk_thermal *mt, u32 *buf)
> +{
> +	if (!CALIB_BUF1_VALID_V3(buf[1]))
> +		return -EINVAL;
> +
> +	mt->adc_oe = CALIB_BUF0_ADC_OE_V3(buf[0]);
> +	mt->adc_ge = CALIB_BUF0_ADC_GE_V3(buf[0]);
> +	mt->degc_cali = CALIB_BUF0_DEGC_CALI_V3(buf[0]);
> +	mt->o_slope = CALIB_BUF0_O_SLOPE_V3(buf[0]);
> +	mt->vts[VTS1] = CALIB_BUF1_VTS_TS1_V3(buf[1]);
> +	mt->vts[VTS2] = CALIB_BUF1_VTS_TS2_V3(buf[1]);
> +	mt->vts[VTSABB] = CALIB_BUF1_VTS_TSABB_V3(buf[1]);
> +	mt->o_slope_sign = CALIB_BUF1_O_SLOPE_SIGN_V3(buf[1]);
> +
> +	if (CALIB_BUF1_ID_V3(buf[1]) == 0)
> +		mt->o_slope = 0;
> +
> +	return 0;
> +}
> +
>   static int mtk_thermal_get_calibration_data(struct device *dev,
>   					    struct mtk_thermal *mt)
>   {
> @@ -897,6 +1005,7 @@ static int mtk_thermal_get_calibration_data(struct device *dev,
>   
>   	/* Start with default values */
>   	mt->adc_ge = 512;
> +	mt->adc_oe = 512;
>   	for (i = 0; i < mt->conf->num_sensors; i++)
>   		mt->vts[i] = 260;
>   	mt->degc_cali = 40;
> @@ -924,8 +1033,10 @@ static int mtk_thermal_get_calibration_data(struct device *dev,
>   
>   	if (mt->conf->version == MTK_THERMAL_V1)
>   		ret = mtk_thermal_extract_efuse_v1(mt, buf);
> -	else
> +	else if (mt->conf->version == MTK_THERMAL_V2)
>   		ret = mtk_thermal_extract_efuse_v2(mt, buf);
> +	else
> +		ret = mtk_thermal_extract_efuse_v3(mt, buf);

I propose to use a switch here instead.

	switch(mt->conf->version) {
	case MTK_THERMAL_V1:
		....
	case MTK_THERMAL_V2:
		....
	case MTK_THERMAL_V3:
		....
	default:
		ret = -EINVAL;
		break;
	};

This would also prevent a potential issue with getting an invalid calibration
due to us calling the wrong version of the get_calibration() function, in which
case, using the default calibration values would be at that point preferred.

Regards,
Angelo




From conor.dooley at microchip.com  Thu Dec  1 05:28:42 2022
From: conor.dooley at microchip.com (Conor Dooley)
Date: Thu, 1 Dec 2022 13:28:42 +0000
Subject: [PATCH v2 00/11] pwm: Allow .get_state to fail
In-Reply-To: <20221201131907.bmrenldnua7uaeab@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
 <Y4iL9xf5bJM5pyeR@wendy>
 <20221201131907.bmrenldnua7uaeab@pengutronix.de>
Message-ID: <Y4isCnKP9pTacksl@wendy>

On Thu, Dec 01, 2022 at 02:19:07PM +0100, Uwe Kleine-K?nig wrote:
> Hello Conor,
> 
> On Thu, Dec 01, 2022 at 11:11:51AM +0000, Conor Dooley wrote:
> > TL;DR, I quite like the ability to return an error and not mislead the
> > caller.
> 
> Is this an Ack?

It is if you want it to be! I didn't really feel qualified to do so
which is why I gave some context etc.

I did check out the callsites for the non-void returning op, and it
looked good to me, so sure, why not:

Acked-by: Conor Dooley <conor.dooley at microchip.com>

Thanks,
Conor.



From andre.przywara at arm.com  Thu Dec  1 06:17:07 2022
From: andre.przywara at arm.com (Andre Przywara)
Date: Thu, 1 Dec 2022 14:17:07 +0000
Subject: [PATCH v2 01/11] pwm: Make .get_state() callback return an
 error code
In-Reply-To: <20221201131604.beq4l22d42tjy6dm@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
	<20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
	<20221201102252.52ace284@donnerap.cambridge.arm.com>
	<20221201131604.beq4l22d42tjy6dm@pengutronix.de>
Message-ID: <20221201141707.28af0d1d@donnerap.cambridge.arm.com>

On Thu, 1 Dec 2022 14:16:04 +0100
Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de> wrote:

Hi Uwe,

> Hello Andre,
> 
> On Thu, Dec 01, 2022 at 10:22:52AM +0000, Andre Przywara wrote:
> > Just one comment: I don't see a sunxi specific patch later in the series,
> > though it seems we have at least one error error exit (see prescaler == 0
> > above). Plus potentially another exit if clk_get_rate() (at the very
> > beginning) fails.
> > Shall I send a patch for that?  
> 
> That would we very welcome. I mentioned that shortly in the cover
> letter, I wasn't entirely sure how to handle that prescaler = 0 case.

Ah right, sorry, I missed that.
So the Allwinner manual somehow marks those prescaler encodings as reserved
or invalid (it's just a "/" in there), and we never set those values in the
driver (there is an explicit check). So it could only be a leftover from
firmware/bootloader, or someone poking at this register behind our back.
I am tempted to just return some -EINVAL. As the current code stands, we
don't manipulate any state flags before that check, so it doesn't
really matter, but would be best practise, at least.

Cheers,
Andre


From krzysztof.kozlowski at linaro.org  Thu Dec  1 06:57:30 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Thu, 1 Dec 2022 15:57:30 +0100
Subject: [PATCH v5 1/3] media: dt-bindings: media: mediatek: Rename child
 node names for decoder
In-Reply-To: <20221128143832.25584-2-allen-kh.cheng@mediatek.com>
References: <20221128143832.25584-1-allen-kh.cheng@mediatek.com>
 <20221128143832.25584-2-allen-kh.cheng@mediatek.com>
Message-ID: <3f824d80-fb5a-c8af-67c6-7a9be6ca7e66@linaro.org>

On 28/11/2022 15:38, Allen-KH Cheng wrote:
> In order to make the names of the child nodes more generic, we rename
> "vcodec-lat" and "vcodec-core" to "video-codec" for decoder in
> patternProperties and example.
> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> ---
>  .../media/mediatek,vcodec-subdev-decoder.yaml | 60 ++-----------------
>  1 file changed, 4 insertions(+), 56 deletions(-)
> 


Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Best regards,
Krzysztof



From regressions at leemhuis.info  Thu Dec  1 07:08:50 2022
From: regressions at leemhuis.info (Thorsten Leemhuis)
Date: Thu, 1 Dec 2022 16:08:50 +0100
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <eb142a22-b35e-ec3f-ee0a-9e3e7b24cea6@gmail.com>
 <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
Message-ID: <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>

Hi, this is your Linux kernel regression tracker. Top-posting for once,
to make this easily accessible to everyone.

I noticed this regression didn't make any progress

Matthias, is that because Nick didn't exactly do what you asked for (he
afaics tried -next, but nevertheless patches it)? Or is there another
reason?

Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)

P.S.: As the Linux kernel's regression tracker I deal with a lot of
reports and sometimes miss something important when writing mails like
this. If that's the case here, don't hesitate to tell me in a public
reply, it's in everyone's interest to set the public record straight.

On 15.11.22 20:44, Nick wrote:
> I used now the linux-next kernel tree (with
> https://patchwork.ozlabs.org/project/linux-mtd/list/?series=327227 so
> single uImage.FIT will work).
>
> Same issue:
> 
>> [ 0.886209] Kernel BUG at regulator_check_voltage+0xb0/0xf0 [verbose
>> debug info unavailable]
>>
>> [ 0.894663] Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
>>
>> [ 0.900759] Modules linked in:
>>
>> [ 0.903819] CPU: 1 PID: 79 Comm: kworker/1:1 Tainted: G S
>> 6.1.0-rc5-next-20221115+ #0
>>
>> [ 0.904360] pstore: Using crash dump compression: deflate
>>
>> [ 0.913038] Hardware name: Bananapi BPI-R64 (DT)
>>
>> [ 0.913043] Workqueue: events dbs_work_handler
>>
>> [ 0.913056] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS
>> BTYPE=--)
>>
>> [ 0.913063] pc : regulator_check_voltage+0xb0/0xf0
>>
>> [ 0.913070] lr : regulator_set_voltage_unlocked+0x88/0x110
>>
>> [ 0.913077] sp : ffffffc00cef3b30
>>
>> [ 0.913080] x29: ffffffc00cef3b30 x28: ffffff8006f6f800 x27:
>> ffffff8006f6fa00
>>
>> [ 0.931243] mtk-pcie 1a143000.pcie: host bridge /pcie at 1a143000 ranges:
>>
>> [ 0.934474]
>>
>> [ 0.934475] x26: 00000000001312d0 x25: 0000000000000024
>>
>> [ 0.939298] mtk-pcie 1a143000.pcie: Parsing ranges property...
>>
>> [ 0.944730] x24: 0000000000118c30
>>
>> [ 0.948038] mtk-pcie 1a143000.pcie: MEM 0x0020000000..0x0027ffffff ->
>> 0x0020000000
>>
>> [ 0.955155]
>>
>> [ 0.955157] x23: 0000000000149970 x22: ffffff8000861800 x21:
>> ffffff8006f6f800
>>
>> [ 0.955166] x20: 00000000001312d0 x19: 0000000000000000 x18:
>> 00000000cfad1bd3
>>
>> [ 0.955174] x17: 000000000000000c x16: 0000000000000005 x15:
>> 0000000000000000
>>
>> [ 1.008473] x14: 0000000000000000 x13: 0000000000000165 x12:
>> 0101010101010101
>>
>> [ 1.015608] x11: 00000000017d7840 x10: 0000000000000850 x9 :
>> ffffffc00cef3900
>>
>> [ 1.017014] mmc0: new HS200 MMC card at address 0001
>>
>> [ 1.022740] x8 : ffffff8005ee9f30 x7 : 0000000000000001 x6 :
>> 00000000001312d0
>>
>> [ 1.022748] x5 : 0000000000118c30 x4 : 0000000000000000 x3 :
>> 0000000000000000
>>
>> [ 1.022756] x2 : ffffffc00cef3b68 x1 : ffffffc00cef3b6c
>>
>> [ 1.029034] mmcblk0: mmc0:0001 008G30 7.28 GiB
>>
>> [ 1.034833] x0 : ffffff8000861800
>>
>> [ 1.034838] Call trace:
>>
>> [ 1.044528] Alternate GPT is invalid, using primary GPT.
>>
>> [ 1.047175] regulator_check_voltage+0xb0/0xf0
>>
>> [ 1.052603] FIT: Selected configuration: "config-1" (OpenWrt
>> bananapi_bpi-r64)
>>
>> [ 1.055090] regulator_set_voltage+0x3c/0x64
>>
>> [ 1.057539] FIT: kernel sub-image 0x00001000..0x005200f9 "kernel-1"
>> (ARM64 OpenWrt Linux-6.1-rc2)
>>
>> [ 1.062824] mtk_cpufreq_voltage_tracking+0x12c/0x27c
>>
>> [ 1.062831] mtk_cpufreq_set_target+0x1c4/0x350
>>
>> [ 1.062837] __cpufreq_driver_target+0x2dc/0x660
>>
>> [ 1.067289] FIT: flat_dt sub-image 0x00521000..0x005272d9 "fdt-1"
>> (ARM64 OpenWrt bananapi_bpi-r64 device tree blob)
>>
>> [ 1.074484] od_dbs_update+0xb8/0x19c
>>
>> [ 1.074490] dbs_work_handler+0x3c/0x7c
>>
>> [ 1.078774] FIT: filesystem sub-image 0x00528000..0x00829fff
>> "rootfs-1" (ARM64 OpenWrt bananapi_bpi-r64 rootfs)
>>
>> [ 1.088560] process_one_work+0x200/0x3a0
>>
>> [ 1.093624] mmcblk0: p1 p2 p3 p4 p65(rootfs-1) p66(rootfs_data) p128
>>
>> [ 1.098116] worker_thread+0x170/0x4c0
>>
>> [ 1.104575] mmcblk0boot0: mmc0:0001 008G30 4.00 MiB
>>
>> [ 1.114009] kthread+0xd4/0xe0
>>
>> [ 1.114016] ret_from_fork+0x10/0x20
>>
>> [ 1.114028] Code: 6b04001f 54fffe6b 2a0003e4 17fffff3 (d4210000)
>>
>> [ 1.114033] ---[ end trace 0000000000000000 ]---
>> [ 0.878926] ------------[ cut here ]------------
>>
> 
> Full log:
> https://gist.github.com/PolynomialDivision/4a555079887b288f4795b28eb3607aa9
> 
> Big thanks to Daniel helping me to build a vanilla kernel with OpenWrt
> build system.
> 
> Bests
> Nick
> 
> On 11/10/22 12:26, Matthias Brugger wrote:
>> Hi Nick,
>>
>> On 09/11/2022 14:35, Nick wrote:
>>> Hi,
>>> while trying to bump OpenWrt Kernel to 6.1rc2 I noticed that the
>>> kernel is crashing while booting on a Banana Pi R64 (MT7622):
>>>
>>>> [??? 1.055565] ------------[ cut here ]------------
>>>> [??? 1.060204] Kernel BUG at regulator_check_voltage+0xb0/0xf0
>>>> [verbose debug info unavailable]
>>>> [??? 1.062418] mtk-pcie 1a143000.pcie: host bridge /pcie at 1a143000
>>>> ranges:
>>>> [??? 1.068656] Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
>>>> [??? 1.075248] mtk-pcie 1a143000.pcie: Parsing ranges property...
>>>> [??? 1.081257] Modules linked in:
>>>> [??? 1.081264] CPU: 1 PID: 328 Comm: kworker/1:7 Tainted: G
>>>> S???????????????? 6.1-rc2 #0
>>>> [??? 1.087088] mtk-pcie 1a143000.pcie:????? MEM
>>>> 0x0020000000..0x0027ffffff -> 0x0020000000
>>>> [??? 1.090126] Hardware name: Bananapi BPI-R64 (DT)
>>>> [??? 1.110541] Workqueue: events dbs_work_handler
>>>> [??? 1.114988] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS
>>>> BTYPE=--)
>>>> [??? 1.121944] pc : regulator_check_voltage+0xb0/0xf0
>>>> [??? 1.126728] lr : regulator_set_voltage_unlocked+0x88/0x110
>>>> [??? 1.129638] mmc1: host does not support reading read-only switch,
>>>> assuming write-enable
>>>> [??? 1.132207] sp : ffffffc00956bb30
>>>> [??? 1.132209] x29: ffffffc00956bb30 x28: ffffff8000efb400 x27:
>>>> 0000000000000024
>>>> [??? 1.132219] x26: 00000000001312d0 x25: 0000000000118c30 x24:
>>>> 00000000001312d0
>>>> [??? 1.132227] x23: 0000000000149970
>>>> [??? 1.146036] mmc1: new high speed SDHC card at address e624
>>>> [??? 1.150642]? x22: ffffff800038f800
>>>> [??? 1.159192] mmcblk1: mmc1:e624 SL16G 14.8 GiB
>>>> [??? 1.161068]? x21: ffffff8000efb100
>>>> [??? 1.161072] x20: 00000000001312d0
>>>> [??? 1.175424] GPT:partition_entry_array_crc32 values don't match:
>>>> 0xa0b5ce6d != 0xab54d286
>>>> [??? 1.177757]? x19: 0000000000000000 x18: 00000000799b2550
>>>> [??? 1.181067] GPT:Primary header thinks Alt. header is not at the
>>>> end of the disk.
>>>> [??? 1.189143] x17: 0000000000000003 x16: 0000000000000001 x15:
>>>> 0000000000000000
>>>> [??? 1.189151] x14: 0000000000000000 x13: 0000000000000146 x12:
>>>> 00000000fa83b2da
>>>> [??? 1.189159] x11: 000000000000013d x10: 0000000000000850
>>>> [??? 1.194472] GPT:305184 != 31116287
>>>> [??? 1.201842]? x9 : ffffffc00956b910
>>>> [??? 1.201846] x8 : ffffff8000b9edf0 x7 : 0000000000000001
>>>> [??? 1.208970] GPT:Alternate GPT header not at the end of the disk.
>>>> [??? 1.216092]? x6 : 00000000001312d0
>>>> [??? 1.216095] x5 : 0000000000118c30 x4 : 0000000000000000 x3 :
>>>> 0000000000000000
>>>> [??? 1.216103] x2 : ffffffc00956bb68 x1 : ffffffc00956bb6c
>>>> [??? 1.221321] GPT:305184 != 31116287
>>>> [??? 1.224706]? x0 : ffffff800038f800
>>>> [??? 1.228095] GPT: Use GNU Parted to correct GPT errors.
>>>> [??? 1.233307]
>>>> [??? 1.233309] Call trace:
>>>> [??? 1.233312]? regulator_check_voltage+0xb0/0xf0
>>>> [??? 1.242680] FIT: Selected configuration:
>>>> "config-mt7622-bananapi-bpi-r64-pcie1" (OpenWrt bananapi_bpi-r64
>>>> with mt7622-bananapi-bpi-r64-pcie1)
>>>> [??? 1.242694]? regulator_set_voltage+0x3c/0x64
>>>> [??? 1.249831] FIT:?????????? kernel sub-image
>>>> 0x00001000..0x0052fd0a "kernel-1" (ARM64 OpenWrt Linux-6.1-rc2)
>>>> [??? 1.255030]? mtk_cpufreq_voltage_tracking+0x11c/0x26c
>>>> [??? 1.255039]? mtk_cpufreq_set_target+0x1c4/0x350
>>>> [??? 1.258444] FIT:????????? flat_dt sub-image
>>>> 0x00530000..0x005380c5 "fdt-1" (ARM64 OpenWrt bananapi_bpi-r64
>>>> device tree blob)
>>>> [??? 1.261820]? __cpufreq_driver_target+0x2f4/0x674
>>>> [??? 1.261826]? od_dbs_update+0xb8/0x19c
>>>> [??? 1.266969] FIT:????????? flat_dt sub-image
>>>> 0x00539000..0x0053911a "fdt-mt7622-bananapi-bpi-r64-pcie1" (ARM64
>>>> OpenWrt bananapi_bpi-r64 device tree overlay
>>>> mt7622-bananapi-bpi-r64-pcie1)
>>>> [??? 1.268431]? dbs_work_handler+0x3c/0x7c
>>>> [??? 1.270883] FIT:????????? flat_dt sub-image
>>>> 0x0053a000..0x0053a20f "fdt-mt7622-bananapi-bpi-r64-sata" (ARM64
>>>> OpenWrt bananapi_bpi-r64 device tree overlay
>>>> mt7622-bananapi-bpi-r64-sata)
>>>> [??? 1.275297]? process_one_work+0x200/0x3a0
>>>> [??? 1.287998] FIT:?????? filesystem sub-image
>>>> 0x0053b000..0x00859fff "rootfs-1" (ARM64 OpenWrt bananapi_bpi-r64
>>>> rootfs)
>>>> [??? 1.292237]? worker_thread+0x170/0x4c0
>>>> [??? 1.292244]? kthread+0xd4/0xe0
>>>> [??? 1.302066] FIT: selecting configured loadable "rootfs-1" to be
>>>> root filesystem
>>>> [??? 1.307092]? ret_from_fork+0x10/0x20
>>>> [??? 1.311631]? mmcblk1: p1 p2 p3 p4 p5 p6 p65(rootfs-1)
>>>> p66(rootfs_data) p128
>>>> [??? 1.322903] Code: 6b04001f 54fffe6b 2a0003e4 17fffff3 (d4210000)
>>>> [??? 1.413322] ---[ end trace 0000000000000000 ]---
>>> The complete log can be found here:
>>> https://gist.githubusercontent.com/PolynomialDivision/395d009c84b426d780549c5fa1f64ff1/raw/886d621d2bf6f03429586adf8a14a6c37c8d8a7d/mt7622-6-1.log
>>>
>>> Reverting commit "cpufreq: mediatek: Refine
>>> mtk_cpufreq_voltage_tracking()" fixes the kernel bug:
>>> https://github.com/torvalds/linux/commit/6a17b3876bc8303612d7ad59ecf7cbc0db418bcd
>>>
>>> The revert commit can be found here:
>>> https://github.com/PolynomialDivision/openwrt/commit/1df941d0334000e3aced43b7d50cdac0da8bf427
>>>
>>> The branch I use to build the 6.1rc2 on a Banana Pi R64 can be found
>>> here:
>>> https://github.com/PolynomialDivision/openwrt/commits/bump-mt7622-rebase
>>>
>>
>> Thanks for the report.
>> Could you test with a plain upstream kernel? That would help us to
>> verify that this is a upstream problem and not introduced by some
>> openwrt patches.
>>
>> Regards,
>> Matthias

#regzbot ignore-activity


From broonie at kernel.org  Thu Dec  1 07:23:44 2022
From: broonie at kernel.org (Mark Brown)
Date: Thu, 1 Dec 2022 15:23:44 +0000
Subject: [PATCH v2 1/3] ASoC: hdmi-codec: Add event handler for hdmi TX
In-Reply-To: <cf9ea98a3263ffb8fc8b542888ad0ad680facfc7.camel@mediatek.com>
References: <20221125094413.4940-1-jiaxin.yu@mediatek.com>
 <20221125094413.4940-2-jiaxin.yu@mediatek.com>
 <Y4Cysgk5Gic5ae9B@sirena.org.uk>
 <18c82f6f723cd97a9d6b9a7ff16c6ed62fd005d6.camel@mediatek.com>
 <Y4Y/vEWe3dw0FPQH@sirena.org.uk>
 <cf9ea98a3263ffb8fc8b542888ad0ad680facfc7.camel@mediatek.com>
Message-ID: <Y4jHAJgmz/P58Q/C@sirena.org.uk>

On Thu, Dec 01, 2022 at 03:06:04PM +0000, Jiaxin Yu (???) wrote:
> On Tue, 2022-11-29 at 17:22 +0000, Mark Brown wrote:

> >  static const struct snd_kcontrol_new
> >  mt8186_mt6366_rt1019_rt5682s_controls[] = {
> >          SOC_DAPM_PIN_SWITCH("Speakers"),
> >          SOC_DAPM_PIN_SWITCH("Headphone"),
> >          SOC_DAPM_PIN_SWITCH("Headset Mic"),
> >          SOC_DAPM_PIN_SWITCH("HDMI1"),
> >  };

> Which operation should I use to inform bridge driver to control audio
> on or off? I'm curious why I don't see .trigger in the structure
> hdmi_codec_ops compared to the structure snd_soc_dai_ops?

You'd need to add a callback that the user of hdmi-codec passes in which
would be triggered by an event on a DAPM widget added in the audio path
rather than trying to shoehorn this into a PCM operation - a big part of
the problem here is that you're trying to add something that doesn't fit
into a PCM operation.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221201/9a355672/attachment.sig>

From lorenzo at kernel.org  Thu Dec  1 07:26:53 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Thu,  1 Dec 2022 16:26:53 +0100
Subject: [PATCH net-next] net: ethernet: mtk_wed: fix sleep while atomic in mtk_wed_wo_queue_refill
Message-ID: <67ca94bdd3d9eaeb86e52b3050fbca0bcf7bb02f.1669908312.git.lorenzo@kernel.org>

In order to fix the following sleep while atomic bug always alloc pages
with GFP_ATOMIC in mtk_wed_wo_queue_refill since page_frag_alloc runs in
spin_lock critical section.

[    9.049719] Hardware name: MediaTek MT7986a RFB (DT)
[    9.054665] Call trace:
[    9.057096]  dump_backtrace+0x0/0x154
[    9.060751]  show_stack+0x14/0x1c
[    9.064052]  dump_stack_lvl+0x64/0x7c
[    9.067702]  dump_stack+0x14/0x2c
[    9.071001]  ___might_sleep+0xec/0x120
[    9.074736]  __might_sleep+0x4c/0x9c
[    9.078296]  __alloc_pages+0x184/0x2e4
[    9.082030]  page_frag_alloc_align+0x98/0x1ac
[    9.086369]  mtk_wed_wo_queue_refill+0x134/0x234
[    9.090974]  mtk_wed_wo_init+0x174/0x2c0
[    9.094881]  mtk_wed_attach+0x7c8/0x7e0
[    9.098701]  mt7915_mmio_wed_init+0x1f0/0x3a0 [mt7915e]
[    9.103940]  mt7915_pci_probe+0xec/0x3bc [mt7915e]
[    9.108727]  pci_device_probe+0xac/0x13c
[    9.112638]  really_probe.part.0+0x98/0x2f4
[    9.116807]  __driver_probe_device+0x94/0x13c
[    9.121147]  driver_probe_device+0x40/0x114
[    9.125314]  __driver_attach+0x7c/0x180
[    9.129133]  bus_for_each_dev+0x5c/0x90
[    9.132953]  driver_attach+0x20/0x2c
[    9.136513]  bus_add_driver+0x104/0x1fc
[    9.140333]  driver_register+0x74/0x120
[    9.144153]  __pci_register_driver+0x40/0x50
[    9.148407]  mt7915_init+0x5c/0x1000 [mt7915e]
[    9.152848]  do_one_initcall+0x40/0x25c
[    9.156669]  do_init_module+0x44/0x230
[    9.160403]  load_module+0x1f30/0x2750
[    9.164135]  __do_sys_init_module+0x150/0x200
[    9.168475]  __arm64_sys_init_module+0x18/0x20
[    9.172901]  invoke_syscall.constprop.0+0x4c/0xe0
[    9.177589]  do_el0_svc+0x48/0xe0
[    9.180889]  el0_svc+0x14/0x50
[    9.183929]  el0t_64_sync_handler+0x9c/0x120
[    9.188183]  el0t_64_sync+0x158/0x15c

Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
---
 drivers/net/ethernet/mediatek/mtk_wed_wo.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_wed_wo.c b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
index 4754b6db009e..a219da85f4db 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed_wo.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
@@ -133,17 +133,18 @@ mtk_wed_wo_dequeue(struct mtk_wed_wo *wo, struct mtk_wed_wo_queue *q, u32 *len,
 
 static int
 mtk_wed_wo_queue_refill(struct mtk_wed_wo *wo, struct mtk_wed_wo_queue *q,
-			gfp_t gfp, bool rx)
+			bool rx)
 {
 	enum dma_data_direction dir = rx ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
 	int n_buf = 0;
 
 	spin_lock_bh(&q->lock);
 	while (q->queued < q->n_desc) {
-		void *buf = page_frag_alloc(&q->cache, q->buf_size, gfp);
 		struct mtk_wed_wo_queue_entry *entry;
 		dma_addr_t addr;
+		void *buf;
 
+		buf = page_frag_alloc(&q->cache, q->buf_size, GFP_ATOMIC);
 		if (!buf)
 			break;
 
@@ -215,7 +216,7 @@ mtk_wed_wo_rx_run_queue(struct mtk_wed_wo *wo, struct mtk_wed_wo_queue *q)
 			mtk_wed_mcu_rx_unsolicited_event(wo, skb);
 	}
 
-	if (mtk_wed_wo_queue_refill(wo, q, GFP_ATOMIC, true)) {
+	if (mtk_wed_wo_queue_refill(wo, q, true)) {
 		u32 index = (q->head - 1) % q->n_desc;
 
 		mtk_wed_wo_queue_kick(wo, q, index);
@@ -432,7 +433,7 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
 	if (ret)
 		goto error;
 
-	mtk_wed_wo_queue_refill(wo, &wo->q_tx, GFP_KERNEL, false);
+	mtk_wed_wo_queue_refill(wo, &wo->q_tx, false);
 	mtk_wed_wo_queue_reset(wo, &wo->q_tx);
 
 	regs.desc_base = MTK_WED_WO_CCIF_DUMMY5;
@@ -446,7 +447,7 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
 	if (ret)
 		goto error;
 
-	mtk_wed_wo_queue_refill(wo, &wo->q_rx, GFP_KERNEL, true);
+	mtk_wed_wo_queue_refill(wo, &wo->q_rx, true);
 	mtk_wed_wo_queue_reset(wo, &wo->q_rx);
 
 	/* rx queue irqmask */
-- 
2.38.1



From daniel at makrotopia.org  Thu Dec  1 07:26:54 2022
From: daniel at makrotopia.org (Daniel Golle)
Date: Thu, 1 Dec 2022 15:26:54 +0000
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <eb142a22-b35e-ec3f-ee0a-9e3e7b24cea6@gmail.com>
 <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
 <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
Message-ID: <Y4jHvomTrU8guBox@makrotopia.org>

On Thu, Dec 01, 2022 at 04:08:50PM +0100, Thorsten Leemhuis wrote:
> Hi, this is your Linux kernel regression tracker. Top-posting for once,
> to make this easily accessible to everyone.
> 
> I noticed this regression didn't make any progress
> 
> Matthias, is that because Nick didn't exactly do what you asked for (he
> afaics tried -next, but nevertheless patches it)? Or is there another
> reason?

I've also tried this on plain linux-next, also using the BPi-R64 and
can confirm the issue exists also there, without any additional patches
applied.

Reverting commit 6a17b3876b ("cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()")
fixes the issue. Unfortunately, by now it no longer reverts cleanly and
requires a tiny amount of manual clean-up...


> 
> Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)
> 
> P.S.: As the Linux kernel's regression tracker I deal with a lot of
> reports and sometimes miss something important when writing mails like
> this. If that's the case here, don't hesitate to tell me in a public
> reply, it's in everyone's interest to set the public record straight.
> 
> On 15.11.22 20:44, Nick wrote:
> > I used now the linux-next kernel tree (with
> > https://patchwork.ozlabs.org/project/linux-mtd/list/?series=327227 so
> > single uImage.FIT will work).
> >
> > Same issue:
> > 
> >> [ 0.886209] Kernel BUG at regulator_check_voltage+0xb0/0xf0 [verbose
> >> debug info unavailable]
> >>
> >> [ 0.894663] Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
> >>
> >> [ 0.900759] Modules linked in:
> >>
> >> [ 0.903819] CPU: 1 PID: 79 Comm: kworker/1:1 Tainted: G S
> >> 6.1.0-rc5-next-20221115+ #0
> >>
> >> [ 0.904360] pstore: Using crash dump compression: deflate
> >>
> >> [ 0.913038] Hardware name: Bananapi BPI-R64 (DT)
> >>
> >> [ 0.913043] Workqueue: events dbs_work_handler
> >>
> >> [ 0.913056] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS
> >> BTYPE=--)
> >>
> >> [ 0.913063] pc : regulator_check_voltage+0xb0/0xf0
> >>
> >> [ 0.913070] lr : regulator_set_voltage_unlocked+0x88/0x110
> >>
> >> [ 0.913077] sp : ffffffc00cef3b30
> >>
> >> [ 0.913080] x29: ffffffc00cef3b30 x28: ffffff8006f6f800 x27:
> >> ffffff8006f6fa00
> >>
> >> [ 0.931243] mtk-pcie 1a143000.pcie: host bridge /pcie at 1a143000 ranges:
> >>
> >> [ 0.934474]
> >>
> >> [ 0.934475] x26: 00000000001312d0 x25: 0000000000000024
> >>
> >> [ 0.939298] mtk-pcie 1a143000.pcie: Parsing ranges property...
> >>
> >> [ 0.944730] x24: 0000000000118c30
> >>
> >> [ 0.948038] mtk-pcie 1a143000.pcie: MEM 0x0020000000..0x0027ffffff ->
> >> 0x0020000000
> >>
> >> [ 0.955155]
> >>
> >> [ 0.955157] x23: 0000000000149970 x22: ffffff8000861800 x21:
> >> ffffff8006f6f800
> >>
> >> [ 0.955166] x20: 00000000001312d0 x19: 0000000000000000 x18:
> >> 00000000cfad1bd3
> >>
> >> [ 0.955174] x17: 000000000000000c x16: 0000000000000005 x15:
> >> 0000000000000000
> >>
> >> [ 1.008473] x14: 0000000000000000 x13: 0000000000000165 x12:
> >> 0101010101010101
> >>
> >> [ 1.015608] x11: 00000000017d7840 x10: 0000000000000850 x9 :
> >> ffffffc00cef3900
> >>
> >> [ 1.017014] mmc0: new HS200 MMC card at address 0001
> >>
> >> [ 1.022740] x8 : ffffff8005ee9f30 x7 : 0000000000000001 x6 :
> >> 00000000001312d0
> >>
> >> [ 1.022748] x5 : 0000000000118c30 x4 : 0000000000000000 x3 :
> >> 0000000000000000
> >>
> >> [ 1.022756] x2 : ffffffc00cef3b68 x1 : ffffffc00cef3b6c
> >>
> >> [ 1.029034] mmcblk0: mmc0:0001 008G30 7.28 GiB
> >>
> >> [ 1.034833] x0 : ffffff8000861800
> >>
> >> [ 1.034838] Call trace:
> >>
> >> [ 1.044528] Alternate GPT is invalid, using primary GPT.
> >>
> >> [ 1.047175] regulator_check_voltage+0xb0/0xf0
> >>
> >> [ 1.052603] FIT: Selected configuration: "config-1" (OpenWrt
> >> bananapi_bpi-r64)
> >>
> >> [ 1.055090] regulator_set_voltage+0x3c/0x64
> >>
> >> [ 1.057539] FIT: kernel sub-image 0x00001000..0x005200f9 "kernel-1"
> >> (ARM64 OpenWrt Linux-6.1-rc2)
> >>
> >> [ 1.062824] mtk_cpufreq_voltage_tracking+0x12c/0x27c
> >>
> >> [ 1.062831] mtk_cpufreq_set_target+0x1c4/0x350
> >>
> >> [ 1.062837] __cpufreq_driver_target+0x2dc/0x660
> >>
> >> [ 1.067289] FIT: flat_dt sub-image 0x00521000..0x005272d9 "fdt-1"
> >> (ARM64 OpenWrt bananapi_bpi-r64 device tree blob)
> >>
> >> [ 1.074484] od_dbs_update+0xb8/0x19c
> >>
> >> [ 1.074490] dbs_work_handler+0x3c/0x7c
> >>
> >> [ 1.078774] FIT: filesystem sub-image 0x00528000..0x00829fff
> >> "rootfs-1" (ARM64 OpenWrt bananapi_bpi-r64 rootfs)
> >>
> >> [ 1.088560] process_one_work+0x200/0x3a0
> >>
> >> [ 1.093624] mmcblk0: p1 p2 p3 p4 p65(rootfs-1) p66(rootfs_data) p128
> >>
> >> [ 1.098116] worker_thread+0x170/0x4c0
> >>
> >> [ 1.104575] mmcblk0boot0: mmc0:0001 008G30 4.00 MiB
> >>
> >> [ 1.114009] kthread+0xd4/0xe0
> >>
> >> [ 1.114016] ret_from_fork+0x10/0x20
> >>
> >> [ 1.114028] Code: 6b04001f 54fffe6b 2a0003e4 17fffff3 (d4210000)
> >>
> >> [ 1.114033] ---[ end trace 0000000000000000 ]---
> >> [ 0.878926] ------------[ cut here ]------------
> >>
> > 
> > Full log:
> > https://gist.github.com/PolynomialDivision/4a555079887b288f4795b28eb3607aa9
> > 
> > Big thanks to Daniel helping me to build a vanilla kernel with OpenWrt
> > build system.
> > 
> > Bests
> > Nick
> > 
> > On 11/10/22 12:26, Matthias Brugger wrote:
> >> Hi Nick,
> >>
> >> On 09/11/2022 14:35, Nick wrote:
> >>> Hi,
> >>> while trying to bump OpenWrt Kernel to 6.1rc2 I noticed that the
> >>> kernel is crashing while booting on a Banana Pi R64 (MT7622):
> >>>
> >>>> [??? 1.055565] ------------[ cut here ]------------
> >>>> [??? 1.060204] Kernel BUG at regulator_check_voltage+0xb0/0xf0
> >>>> [verbose debug info unavailable]
> >>>> [??? 1.062418] mtk-pcie 1a143000.pcie: host bridge /pcie at 1a143000
> >>>> ranges:
> >>>> [??? 1.068656] Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
> >>>> [??? 1.075248] mtk-pcie 1a143000.pcie: Parsing ranges property...
> >>>> [??? 1.081257] Modules linked in:
> >>>> [??? 1.081264] CPU: 1 PID: 328 Comm: kworker/1:7 Tainted: G
> >>>> S???????????????? 6.1-rc2 #0
> >>>> [??? 1.087088] mtk-pcie 1a143000.pcie:????? MEM
> >>>> 0x0020000000..0x0027ffffff -> 0x0020000000
> >>>> [??? 1.090126] Hardware name: Bananapi BPI-R64 (DT)
> >>>> [??? 1.110541] Workqueue: events dbs_work_handler
> >>>> [??? 1.114988] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS
> >>>> BTYPE=--)
> >>>> [??? 1.121944] pc : regulator_check_voltage+0xb0/0xf0
> >>>> [??? 1.126728] lr : regulator_set_voltage_unlocked+0x88/0x110
> >>>> [??? 1.129638] mmc1: host does not support reading read-only switch,
> >>>> assuming write-enable
> >>>> [??? 1.132207] sp : ffffffc00956bb30
> >>>> [??? 1.132209] x29: ffffffc00956bb30 x28: ffffff8000efb400 x27:
> >>>> 0000000000000024
> >>>> [??? 1.132219] x26: 00000000001312d0 x25: 0000000000118c30 x24:
> >>>> 00000000001312d0
> >>>> [??? 1.132227] x23: 0000000000149970
> >>>> [??? 1.146036] mmc1: new high speed SDHC card at address e624
> >>>> [??? 1.150642]? x22: ffffff800038f800
> >>>> [??? 1.159192] mmcblk1: mmc1:e624 SL16G 14.8 GiB
> >>>> [??? 1.161068]? x21: ffffff8000efb100
> >>>> [??? 1.161072] x20: 00000000001312d0
> >>>> [??? 1.175424] GPT:partition_entry_array_crc32 values don't match:
> >>>> 0xa0b5ce6d != 0xab54d286
> >>>> [??? 1.177757]? x19: 0000000000000000 x18: 00000000799b2550
> >>>> [??? 1.181067] GPT:Primary header thinks Alt. header is not at the
> >>>> end of the disk.
> >>>> [??? 1.189143] x17: 0000000000000003 x16: 0000000000000001 x15:
> >>>> 0000000000000000
> >>>> [??? 1.189151] x14: 0000000000000000 x13: 0000000000000146 x12:
> >>>> 00000000fa83b2da
> >>>> [??? 1.189159] x11: 000000000000013d x10: 0000000000000850
> >>>> [??? 1.194472] GPT:305184 != 31116287
> >>>> [??? 1.201842]? x9 : ffffffc00956b910
> >>>> [??? 1.201846] x8 : ffffff8000b9edf0 x7 : 0000000000000001
> >>>> [??? 1.208970] GPT:Alternate GPT header not at the end of the disk.
> >>>> [??? 1.216092]? x6 : 00000000001312d0
> >>>> [??? 1.216095] x5 : 0000000000118c30 x4 : 0000000000000000 x3 :
> >>>> 0000000000000000
> >>>> [??? 1.216103] x2 : ffffffc00956bb68 x1 : ffffffc00956bb6c
> >>>> [??? 1.221321] GPT:305184 != 31116287
> >>>> [??? 1.224706]? x0 : ffffff800038f800
> >>>> [??? 1.228095] GPT: Use GNU Parted to correct GPT errors.
> >>>> [??? 1.233307]
> >>>> [??? 1.233309] Call trace:
> >>>> [??? 1.233312]? regulator_check_voltage+0xb0/0xf0
> >>>> [??? 1.242680] FIT: Selected configuration:
> >>>> "config-mt7622-bananapi-bpi-r64-pcie1" (OpenWrt bananapi_bpi-r64
> >>>> with mt7622-bananapi-bpi-r64-pcie1)
> >>>> [??? 1.242694]? regulator_set_voltage+0x3c/0x64
> >>>> [??? 1.249831] FIT:?????????? kernel sub-image
> >>>> 0x00001000..0x0052fd0a "kernel-1" (ARM64 OpenWrt Linux-6.1-rc2)
> >>>> [??? 1.255030]? mtk_cpufreq_voltage_tracking+0x11c/0x26c
> >>>> [??? 1.255039]? mtk_cpufreq_set_target+0x1c4/0x350
> >>>> [??? 1.258444] FIT:????????? flat_dt sub-image
> >>>> 0x00530000..0x005380c5 "fdt-1" (ARM64 OpenWrt bananapi_bpi-r64
> >>>> device tree blob)
> >>>> [??? 1.261820]? __cpufreq_driver_target+0x2f4/0x674
> >>>> [??? 1.261826]? od_dbs_update+0xb8/0x19c
> >>>> [??? 1.266969] FIT:????????? flat_dt sub-image
> >>>> 0x00539000..0x0053911a "fdt-mt7622-bananapi-bpi-r64-pcie1" (ARM64
> >>>> OpenWrt bananapi_bpi-r64 device tree overlay
> >>>> mt7622-bananapi-bpi-r64-pcie1)
> >>>> [??? 1.268431]? dbs_work_handler+0x3c/0x7c
> >>>> [??? 1.270883] FIT:????????? flat_dt sub-image
> >>>> 0x0053a000..0x0053a20f "fdt-mt7622-bananapi-bpi-r64-sata" (ARM64
> >>>> OpenWrt bananapi_bpi-r64 device tree overlay
> >>>> mt7622-bananapi-bpi-r64-sata)
> >>>> [??? 1.275297]? process_one_work+0x200/0x3a0
> >>>> [??? 1.287998] FIT:?????? filesystem sub-image
> >>>> 0x0053b000..0x00859fff "rootfs-1" (ARM64 OpenWrt bananapi_bpi-r64
> >>>> rootfs)
> >>>> [??? 1.292237]? worker_thread+0x170/0x4c0
> >>>> [??? 1.292244]? kthread+0xd4/0xe0
> >>>> [??? 1.302066] FIT: selecting configured loadable "rootfs-1" to be
> >>>> root filesystem
> >>>> [??? 1.307092]? ret_from_fork+0x10/0x20
> >>>> [??? 1.311631]? mmcblk1: p1 p2 p3 p4 p5 p6 p65(rootfs-1)
> >>>> p66(rootfs_data) p128
> >>>> [??? 1.322903] Code: 6b04001f 54fffe6b 2a0003e4 17fffff3 (d4210000)
> >>>> [??? 1.413322] ---[ end trace 0000000000000000 ]---
> >>> The complete log can be found here:
> >>> https://gist.githubusercontent.com/PolynomialDivision/395d009c84b426d780549c5fa1f64ff1/raw/886d621d2bf6f03429586adf8a14a6c37c8d8a7d/mt7622-6-1.log
> >>>
> >>> Reverting commit "cpufreq: mediatek: Refine
> >>> mtk_cpufreq_voltage_tracking()" fixes the kernel bug:
> >>> https://github.com/torvalds/linux/commit/6a17b3876bc8303612d7ad59ecf7cbc0db418bcd
> >>>
> >>> The revert commit can be found here:
> >>> https://github.com/PolynomialDivision/openwrt/commit/1df941d0334000e3aced43b7d50cdac0da8bf427
> >>>
> >>> The branch I use to build the 6.1rc2 on a Banana Pi R64 can be found
> >>> here:
> >>> https://github.com/PolynomialDivision/openwrt/commits/bump-mt7622-rebase
> >>>
> >>
> >> Thanks for the report.
> >> Could you test with a plain upstream kernel? That would help us to
> >> verify that this is a upstream problem and not introduced by some
> >> openwrt patches.
> >>
> >> Regards,
> >> Matthias
> 
> #regzbot ignore-activity


From dianders at chromium.org  Thu Dec  1 07:37:08 2022
From: dianders at chromium.org (Doug Anderson)
Date: Thu, 1 Dec 2022 07:37:08 -0800
Subject: [PATCH v2 01/11] pwm: Make .get_state() callback return an error code
In-Reply-To: <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de> <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
Message-ID: <CAD=FV=VJ-YygjS9ukN8+hYxebUneFd-8=UEX3ZvSVQso7CGgng@mail.gmail.com>

Hi,

On Wed, Nov 30, 2022 at 7:22 AM Uwe Kleine-K?nig
<u.kleine-koenig at pengutronix.de> wrote:
>
> .get_state() might fail in some cases. To make it possible that a driver
> signals such a failure change the prototype of .get_state() to return an
> error code.
>
> This patch was created using coccinelle and the following semantic patch:
>
> @p1@
> identifier getstatefunc;
> identifier driver;
> @@
>  struct pwm_ops driver = {
>         ...,
>         .get_state = getstatefunc
>         ,...
>  };
>
> @p2@
> identifier p1.getstatefunc;
> identifier chip, pwm, state;
> @@
> -void
> +int
>  getstatefunc(struct pwm_chip *chip, struct pwm_device *pwm, struct pwm_state *state)
>  {
>    ...
> -  return;
> +  return 0;
>    ...
>  }
>
> plus the actual change of the prototype in include/linux/pwm.h (plus some
> manual fixing of indentions and empty lines).
>
> So for now all drivers return success unconditionally. They are adapted
> in the following patches to make the changes easier reviewable.
>
> Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de>
> ---
>  drivers/gpio/gpio-mvebu.c             |  9 ++++++---
>  drivers/gpu/drm/bridge/ti-sn65dsi86.c | 14 ++++++++------
>  drivers/leds/rgb/leds-qcom-lpg.c      | 14 ++++++++------
>  drivers/pwm/pwm-atmel.c               |  6 ++++--
>  drivers/pwm/pwm-bcm-iproc.c           |  8 +++++---
>  drivers/pwm/pwm-crc.c                 | 10 ++++++----
>  drivers/pwm/pwm-cros-ec.c             |  8 +++++---
>  drivers/pwm/pwm-dwc.c                 |  6 ++++--
>  drivers/pwm/pwm-hibvt.c               |  6 ++++--
>  drivers/pwm/pwm-imx-tpm.c             |  8 +++++---
>  drivers/pwm/pwm-imx27.c               |  8 +++++---
>  drivers/pwm/pwm-intel-lgm.c           |  6 ++++--
>  drivers/pwm/pwm-iqs620a.c             |  6 ++++--
>  drivers/pwm/pwm-keembay.c             |  6 ++++--
>  drivers/pwm/pwm-lpss.c                |  6 ++++--
>  drivers/pwm/pwm-meson.c               |  8 +++++---
>  drivers/pwm/pwm-mtk-disp.c            | 12 +++++++-----
>  drivers/pwm/pwm-pca9685.c             |  8 +++++---
>  drivers/pwm/pwm-raspberrypi-poe.c     |  8 +++++---
>  drivers/pwm/pwm-rockchip.c            | 12 +++++++-----
>  drivers/pwm/pwm-sifive.c              |  6 ++++--
>  drivers/pwm/pwm-sl28cpld.c            |  8 +++++---
>  drivers/pwm/pwm-sprd.c                |  8 +++++---
>  drivers/pwm/pwm-stm32-lp.c            |  8 +++++---
>  drivers/pwm/pwm-sun4i.c               | 12 +++++++-----
>  drivers/pwm/pwm-sunplus.c             |  6 ++++--
>  drivers/pwm/pwm-visconti.c            |  6 ++++--
>  drivers/pwm/pwm-xilinx.c              |  8 +++++---
>  include/linux/pwm.h                   |  4 ++--
>  29 files changed, 146 insertions(+), 89 deletions(-)

For ti-sn65dsi86.c:

Acked-by: Douglas Anderson <dianders at chromium.org>


From regressions at leemhuis.info  Thu Dec  1 07:39:50 2022
From: regressions at leemhuis.info (Thorsten Leemhuis)
Date: Thu, 1 Dec 2022 16:39:50 +0100
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <Y4jHvomTrU8guBox@makrotopia.org>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <eb142a22-b35e-ec3f-ee0a-9e3e7b24cea6@gmail.com>
 <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
 <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
Message-ID: <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>



On 01.12.22 16:26, Daniel Golle wrote:
> On Thu, Dec 01, 2022 at 04:08:50PM +0100, Thorsten Leemhuis wrote:
>> Hi, this is your Linux kernel regression tracker. Top-posting for once,
>> to make this easily accessible to everyone.
>>
>> I noticed this regression didn't make any progress
>>
>> Matthias, is that because Nick didn't exactly do what you asked for (he
>> afaics tried -next, but nevertheless patches it)? Or is there another
>> reason?
> 
> I've also tried this on plain linux-next, also using the BPi-R64 and
> can confirm the issue exists also there, without any additional patches
> applied.
> 
> Reverting commit 6a17b3876b ("cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()")
> fixes the issue. Unfortunately, by now it no longer reverts cleanly and
> requires a tiny amount of manual clean-up...

Thx for clarifying. And I noticed I made a mistake: I should have
directed my earlier question wrt to any progress here more into the
direction of Jia-Wei Chang (who authored 6a17b3876b) and Viresh Kumar
(who committed it).

Sorry Matthias.

Ciao, Thorsten

>> Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)
>>
>> P.S.: As the Linux kernel's regression tracker I deal with a lot of
>> reports and sometimes miss something important when writing mails like
>> this. If that's the case here, don't hesitate to tell me in a public
>> reply, it's in everyone's interest to set the public record straight.
>>
>> On 15.11.22 20:44, Nick wrote:
>>> I used now the linux-next kernel tree (with
>>> https://patchwork.ozlabs.org/project/linux-mtd/list/?series=327227 so
>>> single uImage.FIT will work).
>>>
>>> Same issue:
>>>
>>>> [ 0.886209] Kernel BUG at regulator_check_voltage+0xb0/0xf0 [verbose
>>>> debug info unavailable]
>>>>
>>>> [ 0.894663] Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
>>>>
>>>> [ 0.900759] Modules linked in:
>>>>
>>>> [ 0.903819] CPU: 1 PID: 79 Comm: kworker/1:1 Tainted: G S
>>>> 6.1.0-rc5-next-20221115+ #0
>>>>
>>>> [ 0.904360] pstore: Using crash dump compression: deflate
>>>>
>>>> [ 0.913038] Hardware name: Bananapi BPI-R64 (DT)
>>>>
>>>> [ 0.913043] Workqueue: events dbs_work_handler
>>>>
>>>> [ 0.913056] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS
>>>> BTYPE=--)
>>>>
>>>> [ 0.913063] pc : regulator_check_voltage+0xb0/0xf0
>>>>
>>>> [ 0.913070] lr : regulator_set_voltage_unlocked+0x88/0x110
>>>>
>>>> [ 0.913077] sp : ffffffc00cef3b30
>>>>
>>>> [ 0.913080] x29: ffffffc00cef3b30 x28: ffffff8006f6f800 x27:
>>>> ffffff8006f6fa00
>>>>
>>>> [ 0.931243] mtk-pcie 1a143000.pcie: host bridge /pcie at 1a143000 ranges:
>>>>
>>>> [ 0.934474]
>>>>
>>>> [ 0.934475] x26: 00000000001312d0 x25: 0000000000000024
>>>>
>>>> [ 0.939298] mtk-pcie 1a143000.pcie: Parsing ranges property...
>>>>
>>>> [ 0.944730] x24: 0000000000118c30
>>>>
>>>> [ 0.948038] mtk-pcie 1a143000.pcie: MEM 0x0020000000..0x0027ffffff ->
>>>> 0x0020000000
>>>>
>>>> [ 0.955155]
>>>>
>>>> [ 0.955157] x23: 0000000000149970 x22: ffffff8000861800 x21:
>>>> ffffff8006f6f800
>>>>
>>>> [ 0.955166] x20: 00000000001312d0 x19: 0000000000000000 x18:
>>>> 00000000cfad1bd3
>>>>
>>>> [ 0.955174] x17: 000000000000000c x16: 0000000000000005 x15:
>>>> 0000000000000000
>>>>
>>>> [ 1.008473] x14: 0000000000000000 x13: 0000000000000165 x12:
>>>> 0101010101010101
>>>>
>>>> [ 1.015608] x11: 00000000017d7840 x10: 0000000000000850 x9 :
>>>> ffffffc00cef3900
>>>>
>>>> [ 1.017014] mmc0: new HS200 MMC card at address 0001
>>>>
>>>> [ 1.022740] x8 : ffffff8005ee9f30 x7 : 0000000000000001 x6 :
>>>> 00000000001312d0
>>>>
>>>> [ 1.022748] x5 : 0000000000118c30 x4 : 0000000000000000 x3 :
>>>> 0000000000000000
>>>>
>>>> [ 1.022756] x2 : ffffffc00cef3b68 x1 : ffffffc00cef3b6c
>>>>
>>>> [ 1.029034] mmcblk0: mmc0:0001 008G30 7.28 GiB
>>>>
>>>> [ 1.034833] x0 : ffffff8000861800
>>>>
>>>> [ 1.034838] Call trace:
>>>>
>>>> [ 1.044528] Alternate GPT is invalid, using primary GPT.
>>>>
>>>> [ 1.047175] regulator_check_voltage+0xb0/0xf0
>>>>
>>>> [ 1.052603] FIT: Selected configuration: "config-1" (OpenWrt
>>>> bananapi_bpi-r64)
>>>>
>>>> [ 1.055090] regulator_set_voltage+0x3c/0x64
>>>>
>>>> [ 1.057539] FIT: kernel sub-image 0x00001000..0x005200f9 "kernel-1"
>>>> (ARM64 OpenWrt Linux-6.1-rc2)
>>>>
>>>> [ 1.062824] mtk_cpufreq_voltage_tracking+0x12c/0x27c
>>>>
>>>> [ 1.062831] mtk_cpufreq_set_target+0x1c4/0x350
>>>>
>>>> [ 1.062837] __cpufreq_driver_target+0x2dc/0x660
>>>>
>>>> [ 1.067289] FIT: flat_dt sub-image 0x00521000..0x005272d9 "fdt-1"
>>>> (ARM64 OpenWrt bananapi_bpi-r64 device tree blob)
>>>>
>>>> [ 1.074484] od_dbs_update+0xb8/0x19c
>>>>
>>>> [ 1.074490] dbs_work_handler+0x3c/0x7c
>>>>
>>>> [ 1.078774] FIT: filesystem sub-image 0x00528000..0x00829fff
>>>> "rootfs-1" (ARM64 OpenWrt bananapi_bpi-r64 rootfs)
>>>>
>>>> [ 1.088560] process_one_work+0x200/0x3a0
>>>>
>>>> [ 1.093624] mmcblk0: p1 p2 p3 p4 p65(rootfs-1) p66(rootfs_data) p128
>>>>
>>>> [ 1.098116] worker_thread+0x170/0x4c0
>>>>
>>>> [ 1.104575] mmcblk0boot0: mmc0:0001 008G30 4.00 MiB
>>>>
>>>> [ 1.114009] kthread+0xd4/0xe0
>>>>
>>>> [ 1.114016] ret_from_fork+0x10/0x20
>>>>
>>>> [ 1.114028] Code: 6b04001f 54fffe6b 2a0003e4 17fffff3 (d4210000)
>>>>
>>>> [ 1.114033] ---[ end trace 0000000000000000 ]---
>>>> [ 0.878926] ------------[ cut here ]------------
>>>>
>>>
>>> Full log:
>>> https://gist.github.com/PolynomialDivision/4a555079887b288f4795b28eb3607aa9
>>>
>>> Big thanks to Daniel helping me to build a vanilla kernel with OpenWrt
>>> build system.
>>>
>>> Bests
>>> Nick
>>>
>>> On 11/10/22 12:26, Matthias Brugger wrote:
>>>> Hi Nick,
>>>>
>>>> On 09/11/2022 14:35, Nick wrote:
>>>>> Hi,
>>>>> while trying to bump OpenWrt Kernel to 6.1rc2 I noticed that the
>>>>> kernel is crashing while booting on a Banana Pi R64 (MT7622):
>>>>>
>>>>>> [??? 1.055565] ------------[ cut here ]------------
>>>>>> [??? 1.060204] Kernel BUG at regulator_check_voltage+0xb0/0xf0
>>>>>> [verbose debug info unavailable]
>>>>>> [??? 1.062418] mtk-pcie 1a143000.pcie: host bridge /pcie at 1a143000
>>>>>> ranges:
>>>>>> [??? 1.068656] Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
>>>>>> [??? 1.075248] mtk-pcie 1a143000.pcie: Parsing ranges property...
>>>>>> [??? 1.081257] Modules linked in:
>>>>>> [??? 1.081264] CPU: 1 PID: 328 Comm: kworker/1:7 Tainted: G
>>>>>> S???????????????? 6.1-rc2 #0
>>>>>> [??? 1.087088] mtk-pcie 1a143000.pcie:????? MEM
>>>>>> 0x0020000000..0x0027ffffff -> 0x0020000000
>>>>>> [??? 1.090126] Hardware name: Bananapi BPI-R64 (DT)
>>>>>> [??? 1.110541] Workqueue: events dbs_work_handler
>>>>>> [??? 1.114988] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS
>>>>>> BTYPE=--)
>>>>>> [??? 1.121944] pc : regulator_check_voltage+0xb0/0xf0
>>>>>> [??? 1.126728] lr : regulator_set_voltage_unlocked+0x88/0x110
>>>>>> [??? 1.129638] mmc1: host does not support reading read-only switch,
>>>>>> assuming write-enable
>>>>>> [??? 1.132207] sp : ffffffc00956bb30
>>>>>> [??? 1.132209] x29: ffffffc00956bb30 x28: ffffff8000efb400 x27:
>>>>>> 0000000000000024
>>>>>> [??? 1.132219] x26: 00000000001312d0 x25: 0000000000118c30 x24:
>>>>>> 00000000001312d0
>>>>>> [??? 1.132227] x23: 0000000000149970
>>>>>> [??? 1.146036] mmc1: new high speed SDHC card at address e624
>>>>>> [??? 1.150642]? x22: ffffff800038f800
>>>>>> [??? 1.159192] mmcblk1: mmc1:e624 SL16G 14.8 GiB
>>>>>> [??? 1.161068]? x21: ffffff8000efb100
>>>>>> [??? 1.161072] x20: 00000000001312d0
>>>>>> [??? 1.175424] GPT:partition_entry_array_crc32 values don't match:
>>>>>> 0xa0b5ce6d != 0xab54d286
>>>>>> [??? 1.177757]? x19: 0000000000000000 x18: 00000000799b2550
>>>>>> [??? 1.181067] GPT:Primary header thinks Alt. header is not at the
>>>>>> end of the disk.
>>>>>> [??? 1.189143] x17: 0000000000000003 x16: 0000000000000001 x15:
>>>>>> 0000000000000000
>>>>>> [??? 1.189151] x14: 0000000000000000 x13: 0000000000000146 x12:
>>>>>> 00000000fa83b2da
>>>>>> [??? 1.189159] x11: 000000000000013d x10: 0000000000000850
>>>>>> [??? 1.194472] GPT:305184 != 31116287
>>>>>> [??? 1.201842]? x9 : ffffffc00956b910
>>>>>> [??? 1.201846] x8 : ffffff8000b9edf0 x7 : 0000000000000001
>>>>>> [??? 1.208970] GPT:Alternate GPT header not at the end of the disk.
>>>>>> [??? 1.216092]? x6 : 00000000001312d0
>>>>>> [??? 1.216095] x5 : 0000000000118c30 x4 : 0000000000000000 x3 :
>>>>>> 0000000000000000
>>>>>> [??? 1.216103] x2 : ffffffc00956bb68 x1 : ffffffc00956bb6c
>>>>>> [??? 1.221321] GPT:305184 != 31116287
>>>>>> [??? 1.224706]? x0 : ffffff800038f800
>>>>>> [??? 1.228095] GPT: Use GNU Parted to correct GPT errors.
>>>>>> [??? 1.233307]
>>>>>> [??? 1.233309] Call trace:
>>>>>> [??? 1.233312]? regulator_check_voltage+0xb0/0xf0
>>>>>> [??? 1.242680] FIT: Selected configuration:
>>>>>> "config-mt7622-bananapi-bpi-r64-pcie1" (OpenWrt bananapi_bpi-r64
>>>>>> with mt7622-bananapi-bpi-r64-pcie1)
>>>>>> [??? 1.242694]? regulator_set_voltage+0x3c/0x64
>>>>>> [??? 1.249831] FIT:?????????? kernel sub-image
>>>>>> 0x00001000..0x0052fd0a "kernel-1" (ARM64 OpenWrt Linux-6.1-rc2)
>>>>>> [??? 1.255030]? mtk_cpufreq_voltage_tracking+0x11c/0x26c
>>>>>> [??? 1.255039]? mtk_cpufreq_set_target+0x1c4/0x350
>>>>>> [??? 1.258444] FIT:????????? flat_dt sub-image
>>>>>> 0x00530000..0x005380c5 "fdt-1" (ARM64 OpenWrt bananapi_bpi-r64
>>>>>> device tree blob)
>>>>>> [??? 1.261820]? __cpufreq_driver_target+0x2f4/0x674
>>>>>> [??? 1.261826]? od_dbs_update+0xb8/0x19c
>>>>>> [??? 1.266969] FIT:????????? flat_dt sub-image
>>>>>> 0x00539000..0x0053911a "fdt-mt7622-bananapi-bpi-r64-pcie1" (ARM64
>>>>>> OpenWrt bananapi_bpi-r64 device tree overlay
>>>>>> mt7622-bananapi-bpi-r64-pcie1)
>>>>>> [??? 1.268431]? dbs_work_handler+0x3c/0x7c
>>>>>> [??? 1.270883] FIT:????????? flat_dt sub-image
>>>>>> 0x0053a000..0x0053a20f "fdt-mt7622-bananapi-bpi-r64-sata" (ARM64
>>>>>> OpenWrt bananapi_bpi-r64 device tree overlay
>>>>>> mt7622-bananapi-bpi-r64-sata)
>>>>>> [??? 1.275297]? process_one_work+0x200/0x3a0
>>>>>> [??? 1.287998] FIT:?????? filesystem sub-image
>>>>>> 0x0053b000..0x00859fff "rootfs-1" (ARM64 OpenWrt bananapi_bpi-r64
>>>>>> rootfs)
>>>>>> [??? 1.292237]? worker_thread+0x170/0x4c0
>>>>>> [??? 1.292244]? kthread+0xd4/0xe0
>>>>>> [??? 1.302066] FIT: selecting configured loadable "rootfs-1" to be
>>>>>> root filesystem
>>>>>> [??? 1.307092]? ret_from_fork+0x10/0x20
>>>>>> [??? 1.311631]? mmcblk1: p1 p2 p3 p4 p5 p6 p65(rootfs-1)
>>>>>> p66(rootfs_data) p128
>>>>>> [??? 1.322903] Code: 6b04001f 54fffe6b 2a0003e4 17fffff3 (d4210000)
>>>>>> [??? 1.413322] ---[ end trace 0000000000000000 ]---
>>>>> The complete log can be found here:
>>>>> https://gist.githubusercontent.com/PolynomialDivision/395d009c84b426d780549c5fa1f64ff1/raw/886d621d2bf6f03429586adf8a14a6c37c8d8a7d/mt7622-6-1.log
>>>>>
>>>>> Reverting commit "cpufreq: mediatek: Refine
>>>>> mtk_cpufreq_voltage_tracking()" fixes the kernel bug:
>>>>> https://github.com/torvalds/linux/commit/6a17b3876bc8303612d7ad59ecf7cbc0db418bcd
>>>>>
>>>>> The revert commit can be found here:
>>>>> https://github.com/PolynomialDivision/openwrt/commit/1df941d0334000e3aced43b7d50cdac0da8bf427
>>>>>
>>>>> The branch I use to build the 6.1rc2 on a Banana Pi R64 can be found
>>>>> here:
>>>>> https://github.com/PolynomialDivision/openwrt/commits/bump-mt7622-rebase
>>>>>
>>>>
>>>> Thanks for the report.
>>>> Could you test with a plain upstream kernel? That would help us to
>>>> verify that this is a upstream problem and not introduced by some
>>>> openwrt patches.
>>>>
>>>> Regards,
>>>> Matthias
>>
>> #regzbot ignore-activity
> 


From Jiaxin.Yu at mediatek.com  Thu Dec  1 07:06:04 2022
From: Jiaxin.Yu at mediatek.com (=?utf-8?B?SmlheGluIFl1ICjkv57lrrbpkasp?=)
Date: Thu, 1 Dec 2022 15:06:04 +0000
Subject: [PATCH v2 1/3] ASoC: hdmi-codec: Add event handler for hdmi TX
In-Reply-To: <Y4Y/vEWe3dw0FPQH@sirena.org.uk>
References: <20221125094413.4940-1-jiaxin.yu@mediatek.com>
	 <20221125094413.4940-2-jiaxin.yu@mediatek.com>
	 <Y4Cysgk5Gic5ae9B@sirena.org.uk>
	 <18c82f6f723cd97a9d6b9a7ff16c6ed62fd005d6.camel@mediatek.com>
	 <Y4Y/vEWe3dw0FPQH@sirena.org.uk>
Message-ID: <cf9ea98a3263ffb8fc8b542888ad0ad680facfc7.camel@mediatek.com>

On Tue, 2022-11-29 at 17:22 +0000, Mark Brown wrote:
> On Mon, Nov 28, 2022 at 03:07:22PM +0000, Jiaxin Yu (???) wrote:
> > On Fri, 2022-11-25 at 12:18 +0000, Mark Brown wrote:
> > > On Fri, Nov 25, 2022 at 05:44:11PM +0800, Jiaxin Yu wrote:
> > > I'm a little unclear why this is being implemented as a DAPM
> > > operation
> > > rather than having the driver forward the PCM trigger op if it's
> > > needed?
> > > Or alternatively if a DAPM callback is needed why not provide one
> > > directly rather than hooking into the trigger function - that's
> > > going
> > > to
> > > be called out of sequence with the rest of DAPM and be
> > > potentially
> > > confusing given the very different environments that trigger and
> > > DAPM
> > > operations run in.  A quick glance at the it6505 driver suggests
> > > it'd
> > > be
> > > happier with a DAPM callback.
> > Let me describe the hardware connection about mt8186 with
> > it6505(hdmi)
> > and rt1015p(speakers).
> >                        ==>it6505 
> >                      = 
> > DL1(FE) ==>I2S3(BE) =
> >                      =
> >                        ==>rt1015p
> > They shared the same one i2s port, but we'd like to control them
> > separately. So if hdmi-codec use the PCM trigger op, whne we turn
> > on
> > the speaker, hdmi-codec's PCM trigger op is also executed,
> > resulting in
> > sound on both devices.
> > Is there another way to control them separately? Thank you.
> 
> If you just need power control for one or both devices then the
> machine
> driver can add a _PIN_SWITCH() on the output of the device, that'll
> cause DAPM to keep the device powered down when not in use.  That
> should
> work well with the suggestion to provide a DAPM callback instead of a
> a
> trigger operation.

Yes, we do use a _PIN_SWITCH() on the outout of the device:

>  static const struct snd_kcontrol_new
>  mt8186_mt6366_rt1019_rt5682s_controls[] = {
>          SOC_DAPM_PIN_SWITCH("Speakers"),
>          SOC_DAPM_PIN_SWITCH("Headphone"),
>          SOC_DAPM_PIN_SWITCH("Headset Mic"),
>          SOC_DAPM_PIN_SWITCH("HDMI1"),
>  };

Which operation should I use to inform bridge driver to control audio
on or off? I'm curious why I don't see .trigger in the structure
hdmi_codec_ops compared to the structure snd_soc_dai_ops?






From deren.wu at mediatek.com  Thu Dec  1 07:53:37 2022
From: deren.wu at mediatek.com (Deren Wu)
Date: Thu, 1 Dec 2022 23:53:37 +0800
Subject: [PATCH v2] wifi: mt76: mt7921s: fix slab-out-of-bounds access in sdio host
Message-ID: <0cb01834f0cbcefddfd6facc27568178c139839e.1669909513.git.deren.wu@mediatek.com>

SDIO may need addtional 511 bytes to align bus operation. If the tailroom
of this skb is not big enough, we would access invalid memory region.
For low level operation, increase skb size to keep valid memory access in
SDIO host.

Error message:
[69.951] BUG: KASAN: slab-out-of-bounds in sg_copy_buffer+0xe9/0x1a0
[69.951] Read of size 64 at addr ffff88811c9cf000 by task kworker/u16:7/451
[69.951] CPU: 4 PID: 451 Comm: kworker/u16:7 Tainted: G W  OE  6.1.0-rc5 #1
[69.951] Workqueue: kvub300c vub300_cmndwork_thread [vub300]
[69.951] Call Trace:
[69.951]  <TASK>
[69.952]  dump_stack_lvl+0x49/0x63
[69.952]  print_report+0x171/0x4a8
[69.952]  kasan_report+0xb4/0x130
[69.952]  kasan_check_range+0x149/0x1e0
[69.952]  memcpy+0x24/0x70
[69.952]  sg_copy_buffer+0xe9/0x1a0
[69.952]  sg_copy_to_buffer+0x12/0x20
[69.952]  __command_write_data.isra.0+0x23c/0xbf0 [vub300]
[69.952]  vub300_cmndwork_thread+0x17f3/0x58b0 [vub300]
[69.952]  process_one_work+0x7ee/0x1320
[69.952]  worker_thread+0x53c/0x1240
[69.952]  kthread+0x2b8/0x370
[69.952]  ret_from_fork+0x1f/0x30
[69.952]  </TASK>

[69.952] Allocated by task 854:
[69.952]  kasan_save_stack+0x26/0x50
[69.952]  kasan_set_track+0x25/0x30
[69.952]  kasan_save_alloc_info+0x1b/0x30
[69.952]  __kasan_kmalloc+0x87/0xa0
[69.952]  __kmalloc_node_track_caller+0x63/0x150
[69.952]  kmalloc_reserve+0x31/0xd0
[69.952]  __alloc_skb+0xfc/0x2b0
[69.952]  __mt76_mcu_msg_alloc+0xbf/0x230 [mt76]
[69.952]  mt76_mcu_send_and_get_msg+0xab/0x110 [mt76]
[69.952]  __mt76_mcu_send_firmware.cold+0x94/0x15d [mt76]
[69.952]  mt76_connac_mcu_send_ram_firmware+0x415/0x54d [mt76_connac_lib]
[69.952]  mt76_connac2_load_ram.cold+0x118/0x4bc [mt76_connac_lib]
[69.952]  mt7921_run_firmware.cold+0x2e9/0x405 [mt7921_common]
[69.952]  mt7921s_mcu_init+0x45/0x80 [mt7921s]
[69.953]  mt7921_init_work+0xe1/0x2a0 [mt7921_common]
[69.953]  process_one_work+0x7ee/0x1320
[69.953]  worker_thread+0x53c/0x1240
[69.953]  kthread+0x2b8/0x370
[69.953]  ret_from_fork+0x1f/0x30
[69.953] The buggy address belongs to the object at ffff88811c9ce800
             which belongs to the cache kmalloc-2k of size 2048
[69.953] The buggy address is located 0 bytes to the right of
             2048-byte region [ffff88811c9ce800, ffff88811c9cf000)

[69.953] Memory state around the buggy address:
[69.953]  ffff88811c9cef00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[69.953]  ffff88811c9cef80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[69.953] >ffff88811c9cf000: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[69.953]                    ^
[69.953]  ffff88811c9cf080: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[69.953]  ffff88811c9cf100: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc

Fixes: 764dee47e2c1 ("mt76: sdio: move common code in mt76_sdio module")
Suggested-by: Lorenzo Bianconi <lorenzo at kernel.org>
Tested-by: YN Chen <YN.Chen at mediatek.com>
Signed-off-by: Deren Wu <deren.wu at mediatek.com>
---
v2:
  - use __skb_grow to increase skb size
  - add suggested by Lorenzo
---
 drivers/net/wireless/mediatek/mt76/sdio_txrx.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/sdio_txrx.c b/drivers/net/wireless/mediatek/mt76/sdio_txrx.c
index bfc4de50a4d2..ddd8c0cc744d 100644
--- a/drivers/net/wireless/mediatek/mt76/sdio_txrx.c
+++ b/drivers/net/wireless/mediatek/mt76/sdio_txrx.c
@@ -254,6 +254,10 @@ static int mt76s_tx_run_queue(struct mt76_dev *dev, struct mt76_queue *q)
 
 		if (!test_bit(MT76_STATE_MCU_RUNNING, &dev->phy.state)) {
 			__skb_put_zero(e->skb, 4);
+			err = __skb_grow(e->skb, roundup(e->skb->len,
+							 sdio->func->cur_blksize));
+			if (err)
+				return err;
 			err = __mt76s_xmit_queue(dev, e->skb->data,
 						 e->skb->len);
 			if (err)
-- 
2.18.0



From bvanassche at acm.org  Thu Dec  1 10:44:25 2022
From: bvanassche at acm.org (Bart Van Assche)
Date: Thu, 1 Dec 2022 10:44:25 -0800
Subject: [PATCH v2] ufs: core: wlun suspend SSU/enter hibern8 fail
 recovery
In-Reply-To: <20221201094358.20700-1-peter.wang@mediatek.com>
References: <20221201094358.20700-1-peter.wang@mediatek.com>
Message-ID: <c9a68946-1015-9b9c-1023-94919d001ece@acm.org>

On 12/1/22 01:43, peter.wang at mediatek.com wrote:
> @@ -9049,6 +9050,20 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
>   
>   		if (!hba->dev_info.b_rpm_dev_flush_capable) {
>   			ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
> +			if ((ret) && (pm_op != UFS_SHUTDOWN_PM)) {

Please remove the superfluous parentheses from the above statement.

> +				/*
> +				 * If return err in suspend flow, IO will hang.
> +				 * Trigger error handler and break suspend for
> +				 * error recovery.
> +				 */
> +				spin_lock_irqsave(hba->host->host_lock, flags);

__ufshcd_wl_suspend() is allowed to sleep. Please change 
spin_lock_irqsave() into spin_lock_irq().

> +				hba->force_reset = true;
> +				ufshcd_schedule_eh_work(hba);
> +				spin_unlock_irqrestore(hba->host->host_lock,
> +					flags);
> +
> +				ret = -EBUSY;

Why is the value of 'ret' changed into -EBUSY? Can the above code be 
left out?

> @@ -9060,6 +9075,20 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
>   	 */
>   	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
>   	ret = ufshcd_link_state_transition(hba, req_link_state, check_for_bkops);
> +	if ((ret) && (pm_op != UFS_SHUTDOWN_PM)) {
> +		/*
> +		 * If return err in suspend flow, IO will hang.
> +		 * Trigger error handler and break suspend for
> +		 * error recovery.
> +		 */
> +		spin_lock_irqsave(hba->host->host_lock, flags);
> +		hba->force_reset = true;
> +		ufshcd_schedule_eh_work(hba);
> +		spin_unlock_irqrestore(hba->host->host_lock,
> +			flags);
> +
> +		ret = -EBUSY;
> +	}

Same comments as above for this code block.

Thanks,

Bart.



From vincent at systemli.org  Thu Dec  1 13:40:14 2022
From: vincent at systemli.org (Nick)
Date: Thu, 1 Dec 2022 22:40:14 +0100
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <eb142a22-b35e-ec3f-ee0a-9e3e7b24cea6@gmail.com>
 <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
 <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
Message-ID: <5b1c53cd-d579-0c7e-b317-e6bce28d1305@systemli.org>

When I revert the "cpufreq-commit" and add some debug information to the 
"regulator_check_voltage" function "rdev_err(rdev,"min:%d 
max:%d",*min_uV,*max_uV);" it looks like this:

> [??? 0.969537] vcore1: min:1150000 max:1160000
> [??? 0.974922] vm: min:1150000 max:1150000
> [??? 0.986928] vcore1: min:1100000 max:1110000
> [??? 0.999054] vcore1: min:1200000 max:1210000
> [??? 1.003809] vcore1: min:1150000 max:1160000
> [??? 1.020147] vcore1: min:1200000 max:1210000
> [??? 1.024794] vcore1: min:1050000 max:1060000
> [??? 1.050438] vcore1: min:1200000 max:1210000
> [??? 1.069050] vcore1: min:1250000 max:1260000
> [??? 1.166036] vcore1: min:1310000 max:1320000
> [??? 1.167463] vcore1: min:1050000 max:1060000
> [??? 1.209071] vcore1: min:1200000 max:1210000
> [??? 1.213883] vcore1: min:1000000 max:1010000
> [??? 1.223359] vm: min:1100000 max:1110000

Without the revert it crashes with those values:
> [??? 0.939804] vcore1: min:1250000 max:1150000

More information:
https://forum.banana-pi.org/t/banana-pi-r64-trying-to-bump-openwrt-kernel-to-6-1/14189/5

Bests
Nick

On 12/1/22 16:39, Thorsten Leemhuis wrote:
>
> On 01.12.22 16:26, Daniel Golle wrote:
>> On Thu, Dec 01, 2022 at 04:08:50PM +0100, Thorsten Leemhuis wrote:
>>> Hi, this is your Linux kernel regression tracker. Top-posting for once,
>>> to make this easily accessible to everyone.
>>>
>>> I noticed this regression didn't make any progress
>>>
>>> Matthias, is that because Nick didn't exactly do what you asked for (he
>>> afaics tried -next, but nevertheless patches it)? Or is there another
>>> reason?
>> I've also tried this on plain linux-next, also using the BPi-R64 and
>> can confirm the issue exists also there, without any additional patches
>> applied.
>>
>> Reverting commit 6a17b3876b ("cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()")
>> fixes the issue. Unfortunately, by now it no longer reverts cleanly and
>> requires a tiny amount of manual clean-up...
> Thx for clarifying. And I noticed I made a mistake: I should have
> directed my earlier question wrt to any progress here more into the
> direction of Jia-Wei Chang (who authored 6a17b3876b) and Viresh Kumar
> (who committed it).
>
> Sorry Matthias.
>
> Ciao, Thorsten
>
>>> Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)
>>>
>>> P.S.: As the Linux kernel's regression tracker I deal with a lot of
>>> reports and sometimes miss something important when writing mails like
>>> this. If that's the case here, don't hesitate to tell me in a public
>>> reply, it's in everyone's interest to set the public record straight.
>>>
>>> On 15.11.22 20:44, Nick wrote:
>>>> I used now the linux-next kernel tree (with
>>>> https://patchwork.ozlabs.org/project/linux-mtd/list/?series=327227 so
>>>> single uImage.FIT will work).
>>>>
>>>> Same issue:
>>>>
>>>>> [ 0.886209] Kernel BUG at regulator_check_voltage+0xb0/0xf0 [verbose
>>>>> debug info unavailable]
>>>>>
>>>>> [ 0.894663] Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
>>>>>
>>>>> [ 0.900759] Modules linked in:
>>>>>
>>>>> [ 0.903819] CPU: 1 PID: 79 Comm: kworker/1:1 Tainted: G S
>>>>> 6.1.0-rc5-next-20221115+ #0
>>>>>
>>>>> [ 0.904360] pstore: Using crash dump compression: deflate
>>>>>
>>>>> [ 0.913038] Hardware name: Bananapi BPI-R64 (DT)
>>>>>
>>>>> [ 0.913043] Workqueue: events dbs_work_handler
>>>>>
>>>>> [ 0.913056] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS
>>>>> BTYPE=--)
>>>>>
>>>>> [ 0.913063] pc : regulator_check_voltage+0xb0/0xf0
>>>>>
>>>>> [ 0.913070] lr : regulator_set_voltage_unlocked+0x88/0x110
>>>>>
>>>>> [ 0.913077] sp : ffffffc00cef3b30
>>>>>
>>>>> [ 0.913080] x29: ffffffc00cef3b30 x28: ffffff8006f6f800 x27:
>>>>> ffffff8006f6fa00
>>>>>
>>>>> [ 0.931243] mtk-pcie 1a143000.pcie: host bridge /pcie at 1a143000 ranges:
>>>>>
>>>>> [ 0.934474]
>>>>>
>>>>> [ 0.934475] x26: 00000000001312d0 x25: 0000000000000024
>>>>>
>>>>> [ 0.939298] mtk-pcie 1a143000.pcie: Parsing ranges property...
>>>>>
>>>>> [ 0.944730] x24: 0000000000118c30
>>>>>
>>>>> [ 0.948038] mtk-pcie 1a143000.pcie: MEM 0x0020000000..0x0027ffffff ->
>>>>> 0x0020000000
>>>>>
>>>>> [ 0.955155]
>>>>>
>>>>> [ 0.955157] x23: 0000000000149970 x22: ffffff8000861800 x21:
>>>>> ffffff8006f6f800
>>>>>
>>>>> [ 0.955166] x20: 00000000001312d0 x19: 0000000000000000 x18:
>>>>> 00000000cfad1bd3
>>>>>
>>>>> [ 0.955174] x17: 000000000000000c x16: 0000000000000005 x15:
>>>>> 0000000000000000
>>>>>
>>>>> [ 1.008473] x14: 0000000000000000 x13: 0000000000000165 x12:
>>>>> 0101010101010101
>>>>>
>>>>> [ 1.015608] x11: 00000000017d7840 x10: 0000000000000850 x9 :
>>>>> ffffffc00cef3900
>>>>>
>>>>> [ 1.017014] mmc0: new HS200 MMC card at address 0001
>>>>>
>>>>> [ 1.022740] x8 : ffffff8005ee9f30 x7 : 0000000000000001 x6 :
>>>>> 00000000001312d0
>>>>>
>>>>> [ 1.022748] x5 : 0000000000118c30 x4 : 0000000000000000 x3 :
>>>>> 0000000000000000
>>>>>
>>>>> [ 1.022756] x2 : ffffffc00cef3b68 x1 : ffffffc00cef3b6c
>>>>>
>>>>> [ 1.029034] mmcblk0: mmc0:0001 008G30 7.28 GiB
>>>>>
>>>>> [ 1.034833] x0 : ffffff8000861800
>>>>>
>>>>> [ 1.034838] Call trace:
>>>>>
>>>>> [ 1.044528] Alternate GPT is invalid, using primary GPT.
>>>>>
>>>>> [ 1.047175] regulator_check_voltage+0xb0/0xf0
>>>>>
>>>>> [ 1.052603] FIT: Selected configuration: "config-1" (OpenWrt
>>>>> bananapi_bpi-r64)
>>>>>
>>>>> [ 1.055090] regulator_set_voltage+0x3c/0x64
>>>>>
>>>>> [ 1.057539] FIT: kernel sub-image 0x00001000..0x005200f9 "kernel-1"
>>>>> (ARM64 OpenWrt Linux-6.1-rc2)
>>>>>
>>>>> [ 1.062824] mtk_cpufreq_voltage_tracking+0x12c/0x27c
>>>>>
>>>>> [ 1.062831] mtk_cpufreq_set_target+0x1c4/0x350
>>>>>
>>>>> [ 1.062837] __cpufreq_driver_target+0x2dc/0x660
>>>>>
>>>>> [ 1.067289] FIT: flat_dt sub-image 0x00521000..0x005272d9 "fdt-1"
>>>>> (ARM64 OpenWrt bananapi_bpi-r64 device tree blob)
>>>>>
>>>>> [ 1.074484] od_dbs_update+0xb8/0x19c
>>>>>
>>>>> [ 1.074490] dbs_work_handler+0x3c/0x7c
>>>>>
>>>>> [ 1.078774] FIT: filesystem sub-image 0x00528000..0x00829fff
>>>>> "rootfs-1" (ARM64 OpenWrt bananapi_bpi-r64 rootfs)
>>>>>
>>>>> [ 1.088560] process_one_work+0x200/0x3a0
>>>>>
>>>>> [ 1.093624] mmcblk0: p1 p2 p3 p4 p65(rootfs-1) p66(rootfs_data) p128
>>>>>
>>>>> [ 1.098116] worker_thread+0x170/0x4c0
>>>>>
>>>>> [ 1.104575] mmcblk0boot0: mmc0:0001 008G30 4.00 MiB
>>>>>
>>>>> [ 1.114009] kthread+0xd4/0xe0
>>>>>
>>>>> [ 1.114016] ret_from_fork+0x10/0x20
>>>>>
>>>>> [ 1.114028] Code: 6b04001f 54fffe6b 2a0003e4 17fffff3 (d4210000)
>>>>>
>>>>> [ 1.114033] ---[ end trace 0000000000000000 ]---
>>>>> [ 0.878926] ------------[ cut here ]------------
>>>>>
>>>> Full log:
>>>> https://gist.github.com/PolynomialDivision/4a555079887b288f4795b28eb3607aa9
>>>>
>>>> Big thanks to Daniel helping me to build a vanilla kernel with OpenWrt
>>>> build system.
>>>>
>>>> Bests
>>>> Nick
>>>>
>>>> On 11/10/22 12:26, Matthias Brugger wrote:
>>>>> Hi Nick,
>>>>>
>>>>> On 09/11/2022 14:35, Nick wrote:
>>>>>> Hi,
>>>>>> while trying to bump OpenWrt Kernel to 6.1rc2 I noticed that the
>>>>>> kernel is crashing while booting on a Banana Pi R64 (MT7622):
>>>>>>
>>>>>>> [??? 1.055565] ------------[ cut here ]------------
>>>>>>> [??? 1.060204] Kernel BUG at regulator_check_voltage+0xb0/0xf0
>>>>>>> [verbose debug info unavailable]
>>>>>>> [??? 1.062418] mtk-pcie 1a143000.pcie: host bridge /pcie at 1a143000
>>>>>>> ranges:
>>>>>>> [??? 1.068656] Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
>>>>>>> [??? 1.075248] mtk-pcie 1a143000.pcie: Parsing ranges property...
>>>>>>> [??? 1.081257] Modules linked in:
>>>>>>> [??? 1.081264] CPU: 1 PID: 328 Comm: kworker/1:7 Tainted: G
>>>>>>> S???????????????? 6.1-rc2 #0
>>>>>>> [??? 1.087088] mtk-pcie 1a143000.pcie:????? MEM
>>>>>>> 0x0020000000..0x0027ffffff -> 0x0020000000
>>>>>>> [??? 1.090126] Hardware name: Bananapi BPI-R64 (DT)
>>>>>>> [??? 1.110541] Workqueue: events dbs_work_handler
>>>>>>> [??? 1.114988] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS
>>>>>>> BTYPE=--)
>>>>>>> [??? 1.121944] pc : regulator_check_voltage+0xb0/0xf0
>>>>>>> [??? 1.126728] lr : regulator_set_voltage_unlocked+0x88/0x110
>>>>>>> [??? 1.129638] mmc1: host does not support reading read-only switch,
>>>>>>> assuming write-enable
>>>>>>> [??? 1.132207] sp : ffffffc00956bb30
>>>>>>> [??? 1.132209] x29: ffffffc00956bb30 x28: ffffff8000efb400 x27:
>>>>>>> 0000000000000024
>>>>>>> [??? 1.132219] x26: 00000000001312d0 x25: 0000000000118c30 x24:
>>>>>>> 00000000001312d0
>>>>>>> [??? 1.132227] x23: 0000000000149970
>>>>>>> [??? 1.146036] mmc1: new high speed SDHC card at address e624
>>>>>>> [??? 1.150642]? x22: ffffff800038f800
>>>>>>> [??? 1.159192] mmcblk1: mmc1:e624 SL16G 14.8 GiB
>>>>>>> [??? 1.161068]? x21: ffffff8000efb100
>>>>>>> [??? 1.161072] x20: 00000000001312d0
>>>>>>> [??? 1.175424] GPT:partition_entry_array_crc32 values don't match:
>>>>>>> 0xa0b5ce6d != 0xab54d286
>>>>>>> [??? 1.177757]? x19: 0000000000000000 x18: 00000000799b2550
>>>>>>> [??? 1.181067] GPT:Primary header thinks Alt. header is not at the
>>>>>>> end of the disk.
>>>>>>> [??? 1.189143] x17: 0000000000000003 x16: 0000000000000001 x15:
>>>>>>> 0000000000000000
>>>>>>> [??? 1.189151] x14: 0000000000000000 x13: 0000000000000146 x12:
>>>>>>> 00000000fa83b2da
>>>>>>> [??? 1.189159] x11: 000000000000013d x10: 0000000000000850
>>>>>>> [??? 1.194472] GPT:305184 != 31116287
>>>>>>> [??? 1.201842]? x9 : ffffffc00956b910
>>>>>>> [??? 1.201846] x8 : ffffff8000b9edf0 x7 : 0000000000000001
>>>>>>> [??? 1.208970] GPT:Alternate GPT header not at the end of the disk.
>>>>>>> [??? 1.216092]? x6 : 00000000001312d0
>>>>>>> [??? 1.216095] x5 : 0000000000118c30 x4 : 0000000000000000 x3 :
>>>>>>> 0000000000000000
>>>>>>> [??? 1.216103] x2 : ffffffc00956bb68 x1 : ffffffc00956bb6c
>>>>>>> [??? 1.221321] GPT:305184 != 31116287
>>>>>>> [??? 1.224706]? x0 : ffffff800038f800
>>>>>>> [??? 1.228095] GPT: Use GNU Parted to correct GPT errors.
>>>>>>> [??? 1.233307]
>>>>>>> [??? 1.233309] Call trace:
>>>>>>> [??? 1.233312]? regulator_check_voltage+0xb0/0xf0
>>>>>>> [??? 1.242680] FIT: Selected configuration:
>>>>>>> "config-mt7622-bananapi-bpi-r64-pcie1" (OpenWrt bananapi_bpi-r64
>>>>>>> with mt7622-bananapi-bpi-r64-pcie1)
>>>>>>> [??? 1.242694]? regulator_set_voltage+0x3c/0x64
>>>>>>> [??? 1.249831] FIT:?????????? kernel sub-image
>>>>>>> 0x00001000..0x0052fd0a "kernel-1" (ARM64 OpenWrt Linux-6.1-rc2)
>>>>>>> [??? 1.255030]? mtk_cpufreq_voltage_tracking+0x11c/0x26c
>>>>>>> [??? 1.255039]? mtk_cpufreq_set_target+0x1c4/0x350
>>>>>>> [??? 1.258444] FIT:????????? flat_dt sub-image
>>>>>>> 0x00530000..0x005380c5 "fdt-1" (ARM64 OpenWrt bananapi_bpi-r64
>>>>>>> device tree blob)
>>>>>>> [??? 1.261820]? __cpufreq_driver_target+0x2f4/0x674
>>>>>>> [??? 1.261826]? od_dbs_update+0xb8/0x19c
>>>>>>> [??? 1.266969] FIT:????????? flat_dt sub-image
>>>>>>> 0x00539000..0x0053911a "fdt-mt7622-bananapi-bpi-r64-pcie1" (ARM64
>>>>>>> OpenWrt bananapi_bpi-r64 device tree overlay
>>>>>>> mt7622-bananapi-bpi-r64-pcie1)
>>>>>>> [??? 1.268431]? dbs_work_handler+0x3c/0x7c
>>>>>>> [??? 1.270883] FIT:????????? flat_dt sub-image
>>>>>>> 0x0053a000..0x0053a20f "fdt-mt7622-bananapi-bpi-r64-sata" (ARM64
>>>>>>> OpenWrt bananapi_bpi-r64 device tree overlay
>>>>>>> mt7622-bananapi-bpi-r64-sata)
>>>>>>> [??? 1.275297]? process_one_work+0x200/0x3a0
>>>>>>> [??? 1.287998] FIT:?????? filesystem sub-image
>>>>>>> 0x0053b000..0x00859fff "rootfs-1" (ARM64 OpenWrt bananapi_bpi-r64
>>>>>>> rootfs)
>>>>>>> [??? 1.292237]? worker_thread+0x170/0x4c0
>>>>>>> [??? 1.292244]? kthread+0xd4/0xe0
>>>>>>> [??? 1.302066] FIT: selecting configured loadable "rootfs-1" to be
>>>>>>> root filesystem
>>>>>>> [??? 1.307092]? ret_from_fork+0x10/0x20
>>>>>>> [??? 1.311631]? mmcblk1: p1 p2 p3 p4 p5 p6 p65(rootfs-1)
>>>>>>> p66(rootfs_data) p128
>>>>>>> [??? 1.322903] Code: 6b04001f 54fffe6b 2a0003e4 17fffff3 (d4210000)
>>>>>>> [??? 1.413322] ---[ end trace 0000000000000000 ]---
>>>>>> The complete log can be found here:
>>>>>> https://gist.githubusercontent.com/PolynomialDivision/395d009c84b426d780549c5fa1f64ff1/raw/886d621d2bf6f03429586adf8a14a6c37c8d8a7d/mt7622-6-1.log
>>>>>>
>>>>>> Reverting commit "cpufreq: mediatek: Refine
>>>>>> mtk_cpufreq_voltage_tracking()" fixes the kernel bug:
>>>>>> https://github.com/torvalds/linux/commit/6a17b3876bc8303612d7ad59ecf7cbc0db418bcd
>>>>>>
>>>>>> The revert commit can be found here:
>>>>>> https://github.com/PolynomialDivision/openwrt/commit/1df941d0334000e3aced43b7d50cdac0da8bf427
>>>>>>
>>>>>> The branch I use to build the 6.1rc2 on a Banana Pi R64 can be found
>>>>>> here:
>>>>>> https://github.com/PolynomialDivision/openwrt/commits/bump-mt7622-rebase
>>>>>>
>>>>> Thanks for the report.
>>>>> Could you test with a plain upstream kernel? That would help us to
>>>>> verify that this is a upstream problem and not introduced by some
>>>>> openwrt patches.
>>>>>
>>>>> Regards,
>>>>> Matthias
>>> #regzbot ignore-activity


From robh at kernel.org  Thu Dec  1 14:13:10 2022
From: robh at kernel.org (Rob Herring)
Date: Thu, 1 Dec 2022 16:13:10 -0600
Subject: [PATCH v2 6/6] dt-bindings: leds: ti,tca6507: correct Neil's name
In-Reply-To: <20221127204058.57111-7-krzysztof.kozlowski@linaro.org>
References: <20221127204058.57111-1-krzysztof.kozlowski@linaro.org>
 <20221127204058.57111-7-krzysztof.kozlowski@linaro.org>
Message-ID: <20221201221310.GA1518960-robh@kernel.org>

On Sun, Nov 27, 2022 at 09:40:58PM +0100, Krzysztof Kozlowski wrote:
> scripts/get_maintainers.pl is confused when name and family name are
> without space:
> 
>   $ scripts/get_maintainer.pl -f Documentation/devicetree/bindings/leds/ti,tca6507.yaml
>   - NeilBrown <neilb at suse.de> (in file)

I'm pretty sure it is correct as-is.

We should fix get_maintainers.pl so all the one name celebrities can be 
maintainers.

Rob


From robh at kernel.org  Thu Dec  1 14:20:44 2022
From: robh at kernel.org (Rob Herring)
Date: Thu, 1 Dec 2022 16:20:44 -0600
Subject: [PATCH v2 0/6] leds: dt-bindings: use
 unevaluatedProperties:false and few fixes
In-Reply-To: <20221127204058.57111-1-krzysztof.kozlowski@linaro.org>
References: <20221127204058.57111-1-krzysztof.kozlowski@linaro.org>
Message-ID: <20221201222044.GB1518960-robh@kernel.org>

On Sun, Nov 27, 2022 at 09:40:52PM +0100, Krzysztof Kozlowski wrote:
> Hi,
> 
> Changes since v1
> ================
> 1. New patch #3: dt-bindings: leds: lp55xx: switch to preferred 'gpios' suffix
>    (Fixing DTS in separate patches, see [1] [2] which superseded [3])
> 2. New patch #6: dt-bindings: leds: ti,tca6507: correct Neil's name
> 
> [1] https://lore.kernel.org/linux-devicetree/20221127203240.54955-1-krzysztof.kozlowski at linaro.org/T/#md1ccb03ee81f820e0c7b8043111d56b5ed0d1e2f
> [2] https://lore.kernel.org/linux-devicetree/20221127203034.54092-1-krzysztof.kozlowski at linaro.org/T/#m17f1d2f79a35fce43509edc351a84bc9dab980c1
> [3] https://lore.kernel.org/linux-devicetree/20221125173602.cnipos5oo4ncxsac at mercury.elektranox.org/
> 
> Best regards,
> Krzysztof
> 
> Krzysztof Kozlowski (6):
>   dt-bindings: leds: use unevaluatedProperties for common.yaml
>   dt-bindings: leds: lp55xx: allow label
>   dt-bindings: leds: lp55xx: switch to preferred 'gpios' suffix
>   dt-bindings: leds: lp55xx: rework to match multi-led
>   dt-bindings: leds: mt6360: rework to match multi-led
>   dt-bindings: leds: ti,tca6507: correct Neil's name

I've applied patches 1-5. 6 should not be applied.

Rob


From robh at kernel.org  Thu Dec  1 14:22:49 2022
From: robh at kernel.org (Rob Herring)
Date: Thu, 1 Dec 2022 16:22:49 -0600
Subject: [PATCH v3 net-next 01/10] dt-bindings: net: dsa: sf2: fix
 brcm,use-bcm-hdr documentation
In-Reply-To: <20221127224734.885526-2-colin.foster@in-advantage.com>
References: <20221127224734.885526-1-colin.foster@in-advantage.com>
 <20221127224734.885526-2-colin.foster@in-advantage.com>
Message-ID: <166993336761.1551697.12498585251946226273.robh@kernel.org>


On Sun, 27 Nov 2022 14:47:25 -0800, Colin Foster wrote:
> The property use-bcm-hdr was documented as an entry under the ports node
> for the bcm_sf2 DSA switch. This property is actually evaluated for each
> port. Correct the documentation to match the actual behavior and properly
> reference dsa-port.yaml for additional properties of the node.
> 
> Suggested-by: Rob Herring <robh at kernel.org>
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> ---
> 
> v3
>   * New patch
> 
> ---
>  .../devicetree/bindings/net/dsa/brcm,sf2.yaml     | 15 ++++++++++-----
>  1 file changed, 10 insertions(+), 5 deletions(-)
> 

Reviewed-by: Rob Herring <robh at kernel.org>


From robh at kernel.org  Thu Dec  1 14:24:44 2022
From: robh at kernel.org (Rob Herring)
Date: Thu, 1 Dec 2022 16:24:44 -0600
Subject: [PATCH v3 net-next 02/10] dt-bindings: net: dsa: qca8k: remove
 address-cells and size-cells from switch node
In-Reply-To: <20221127224734.885526-3-colin.foster@in-advantage.com>
References: <20221127224734.885526-1-colin.foster@in-advantage.com>
 <20221127224734.885526-3-colin.foster@in-advantage.com>
Message-ID: <166993348424.1554653.6511937074374406374.robh@kernel.org>


On Sun, 27 Nov 2022 14:47:26 -0800, Colin Foster wrote:
> The children of the switch node don't have a unit address, and therefore
> should not need the #address-cells or #size-cells entries. Fix the example
> schemas accordingly.
> 
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> ---
> 
> v3
>   * New patch
> 
> ---
>  Documentation/devicetree/bindings/net/dsa/qca8k.yaml | 4 ----
>  1 file changed, 4 deletions(-)
> 

Reviewed-by: Rob Herring <robh at kernel.org>


From robh at kernel.org  Thu Dec  1 14:33:09 2022
From: robh at kernel.org (Rob Herring)
Date: Thu, 1 Dec 2022 16:33:09 -0600
Subject: [PATCH v3 net-next 04/10] dt-bindings: net: dsa: allow
 additional ethernet-port properties
In-Reply-To: <Y4Wy7iSeGEtpQkgI@euler>
References: <20221127224734.885526-1-colin.foster@in-advantage.com>
 <20221127224734.885526-5-colin.foster@in-advantage.com>
 <20221128232759.GB1513198-robh@kernel.org>
 <Y4Wy7iSeGEtpQkgI@euler>
Message-ID: <20221201223309.GA1555093-robh@kernel.org>

On Mon, Nov 28, 2022 at 11:21:18PM -0800, Colin Foster wrote:
> On Mon, Nov 28, 2022 at 05:27:59PM -0600, Rob Herring wrote:
> > On Sun, Nov 27, 2022 at 02:47:28PM -0800, Colin Foster wrote:
> > > Explicitly allow additional properties for both the ethernet-port and
> > > ethernet-ports properties. This specifically will allow the qca8k.yaml
> > > binding to use shared properties.
> > > 
> > > Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> > > ---
> > > 
> > > v2 -> v3
> > >   * No change
> > > 
> > > v1 -> v2
> > >   * New patch
> > > 
> > > ---
> > >  Documentation/devicetree/bindings/net/dsa/dsa.yaml | 4 +++-
> > >  1 file changed, 3 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> > > index bd1f0f7c14a8..87475c2ab092 100644
> > > --- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> > > +++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> > > @@ -38,6 +38,8 @@ patternProperties:
> > >        '#size-cells':
> > >          const: 0
> > >  
> > > +    additionalProperties: true
> > > +
> > 
> > Where then do we restrict adding properties to ethernet-ports nodes?
> > 
> > >      patternProperties:
> > >        "^(ethernet-)?port@[0-9]+$":
> > >          type: object
> > > @@ -45,7 +47,7 @@ patternProperties:
> > >  
> > >          $ref: dsa-port.yaml#
> > >  
> > > -        unevaluatedProperties: false
> > > +        unevaluatedProperties: true
> > 
> > Same question for ethernet-port nodes.
> 
> For ethernet-port nodes, the qca8k has unevaluatedProperties: false. But
> the fact that you're asking this question means I probably misunderstood
> something...

The above is the case where you aren't adding extra properties (IIRC), 
so 'unevaluatedProperties: false' should be correct.

'unevaluatedProperties: true' is never correct in bindings. If you ref a
schema that sets it to true, you can't override it.

So qca8k, should reference dsa-port.yaml, define its extra properties 
and set 'unevaluatedProperties: false'.

> For the ethernet-ports node, I'm curious if my other follow-up answers
> that question where I realized dsa.yaml should, under the base
> definition, have additionalPrpoerties: false. But again, my guess is
> that isn't the case.

That one looks correct.

Rob


From andersson at kernel.org  Thu Dec  1 14:34:01 2022
From: andersson at kernel.org (Bjorn Andersson)
Date: Thu, 1 Dec 2022 16:34:01 -0600
Subject: [PATCH 2/5] arm: dts: remove label = "cpu" from DSA dt-binding
In-Reply-To: <20221130141040.32447-3-arinc.unal@arinc9.com>
References: <20221130141040.32447-1-arinc.unal@arinc9.com>
 <20221130141040.32447-3-arinc.unal@arinc9.com>
Message-ID: <20221201223401.5yews4hlbyyaasop@builder.lan>

On Wed, Nov 30, 2022 at 05:10:37PM +0300, Ar?n? ?NAL wrote:
[..]
>  arch/arm/boot/dts/qcom-ipq8064-rb3011.dts                 | 2 --

Acked-by: Bjorn Andersson <andersson at kernel.org>

Regards,
Bjorn


From robh at kernel.org  Thu Dec  1 14:42:40 2022
From: robh at kernel.org (Rob Herring)
Date: Thu, 1 Dec 2022 16:42:40 -0600
Subject: [PATCH v3 net-next 05/10] dt-bindings: net: dsa: qca8k: utilize
 shared dsa.yaml
In-Reply-To: <20221127224734.885526-6-colin.foster@in-advantage.com>
References: <20221127224734.885526-1-colin.foster@in-advantage.com>
 <20221127224734.885526-6-colin.foster@in-advantage.com>
Message-ID: <20221201224240.GA1565974-robh@kernel.org>

On Sun, Nov 27, 2022 at 02:47:29PM -0800, Colin Foster wrote:
> The dsa.yaml binding contains duplicated bindings for address and size
> cells, as well as the reference to dsa-port.yaml. Instead of duplicating
> this information, remove the reference to dsa-port.yaml and include the
> full reference to dsa.yaml.
> 
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> ---
> 
> v2 -> v3
>   * Remove #address-cells and #size-cells from v2. The examples were
>     incorrect and fixed elsewhere.
>   * Remove erroneous unevaluatedProperties: true under Ethernet Port.
>   * Add back ref: dsa-port.yaml#.
> 
> v1 -> v2
>   * Add #address-cells and #size-cells to the switch layer. They aren't
>     part of dsa.yaml.
>   * Add unevaluatedProperties: true to the ethernet-port layer so it can
>     correctly read properties from dsa.yaml.
> 
> ---
>  Documentation/devicetree/bindings/net/dsa/qca8k.yaml | 11 +++--------
>  1 file changed, 3 insertions(+), 8 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/net/dsa/qca8k.yaml b/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
> index 6fc9bc985726..93a9ddebcac8 100644
> --- a/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
> @@ -66,20 +66,15 @@ properties:
>                   With the legacy mapping the reg corresponding to the internal
>                   mdio is the switch reg with an offset of -1.
>  
> +$ref: "dsa.yaml#"
> +
>  patternProperties:
>    "^(ethernet-)?ports$":
>      type: object
> -    properties:
> -      '#address-cells':
> -        const: 1
> -      '#size-cells':
> -        const: 0
> -
>      patternProperties:
>        "^(ethernet-)?port@[0-6]$":
>          type: object
>          description: Ethernet switch ports
> -
>          $ref: dsa-port.yaml#

So here you need 'unevaluatedProperties: false'.

unevaluatedProperties only applies to the properties defined in a single 
node level, and child nodes properties from 2 schemas can't 'see' each 
other. IOW, what dsa.yaml has in child nodes has no effect on this node. 

>  
>          properties:
> @@ -116,7 +111,7 @@ required:
>    - compatible
>    - reg
>  
> -additionalProperties: true
> +unevaluatedProperties: false

So this has no effect on anything within "^(ethernet-)?port@[0-6]$" and 
below.

Rob


From robh at kernel.org  Thu Dec  1 15:14:19 2022
From: robh at kernel.org (Rob Herring)
Date: Thu, 1 Dec 2022 17:14:19 -0600
Subject: [PATCH v5 2/3] media: dt-bindings: media: mediatek: Remove
 "dma-ranges" property for decoder
In-Reply-To: <20221128143832.25584-3-allen-kh.cheng@mediatek.com>
References: <20221128143832.25584-1-allen-kh.cheng@mediatek.com>
 <20221128143832.25584-3-allen-kh.cheng@mediatek.com>
Message-ID: <166993645851.1660446.2817424583068885626.robh@kernel.org>


On Mon, 28 Nov 2022 22:38:31 +0800, Allen-KH Cheng wrote:
> Since commit f1ad5338a4d5 ("of: Fix "dma-ranges" handling for bus
> controllers") was merge, we don't need a dma-ranges property for IOMMU
> in mediatek video codec.
> 
> We remove the dma-ranges property and fix the example in
> mediatek,vcodec-subdev-decoder.yaml
> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> ---
>  .../bindings/media/mediatek,vcodec-subdev-decoder.yaml     | 7 -------
>  1 file changed, 7 deletions(-)
> 

Acked-by: Rob Herring <robh at kernel.org>


From dlunev at chromium.org  Thu Dec  1 15:32:53 2022
From: dlunev at chromium.org (Daniil Lunev)
Date: Fri, 2 Dec 2022 10:32:53 +1100
Subject: [PATCH v1] ufs: core: wlun suspend SSU fail recovery
In-Reply-To: <5e00ce60-3859-4964-11f7-e036f6dda56a@acm.org>
References: <20221101142410.31463-1-peter.wang@mediatek.com>
 <98bfafd3-c7b7-89b5-497a-aa694d0152dd@intel.com> <5e00ce60-3859-4964-11f7-e036f6dda56a@acm.org>
Message-ID: <CAONX=-e1NA--3taTmfbUV+hR_LOSqvBqz_=1mPmYZWaKGGR=ig@mail.gmail.com>

On Thu, Dec 1, 2022 at 4:50 AM Bart Van Assche <bvanassche at acm.org> wrote:
>
> On 11/30/22 02:17, Adrian Hunter wrote:
> > On 1/11/22 16:24, peter.wang at mediatek.com wrote:
> >> From: Peter Wang <peter.wang at mediatek.com>
> >>
> >> When SSU fail in wlun suspend flow, trigger error handlder and
> >
> > handlder -> handler
> >
> > Why / how does SSU fail?
>
> I'm not sure but the issue that Peter is trying to fix with this patch
> may already have been fixed by my patch series "Fix a deadlock in the
> UFS driver".

We observe a similar failure scenario when a device tries to change
power mode (e.g. due to autosuspend) while "purge" is in progress. It
appears that in this case the "pm_only" counter is increased on the
device queue prior to the attempt of entering a runtime suspended
state, but not reduced upon it failing due to the device being busy
with an ongoing purge. That leads to a deadlock of subsequent IO
operations to the device.

--Daniil


From robh at kernel.org  Thu Dec  1 15:33:23 2022
From: robh at kernel.org (Rob Herring)
Date: Thu, 1 Dec 2022 17:33:23 -0600
Subject: [PATCH v7 3/8] dt-bindings: soc: mediatek: convert pwrap
 documentation
In-Reply-To: <20221005-mt6357-support-v7-3-477e60126749@baylibre.com>
References: <20221005-mt6357-support-v7-0-477e60126749@baylibre.com>
 <20221005-mt6357-support-v7-3-477e60126749@baylibre.com>
Message-ID: <166993759991.1686069.16535756664012746082.robh@kernel.org>


On Tue, 29 Nov 2022 16:57:02 +0100, Alexandre Mergnat wrote:
> - Convert soc/mediatek/pwrap.txt to soc/mediatek/mediatek,pwrap.yaml
> - Add syscon compatible const for mt8186 and mt8195 to match the DTS needs,
>   which is missing from pwrap.txt.
> 
> Signed-off-by: Alexandre Mergnat <amergnat at baylibre.com>
> ---
>  .../devicetree/bindings/leds/leds-mt6323.txt       |   2 +-
>  Documentation/devicetree/bindings/mfd/mt6397.txt   |   2 +-
>  .../bindings/soc/mediatek/mediatek,pwrap.yaml      | 147 +++++++++++++++++++++
>  .../devicetree/bindings/soc/mediatek/pwrap.txt     |  75 -----------
>  4 files changed, 149 insertions(+), 77 deletions(-)
> 

Reviewed-by: Rob Herring <robh at kernel.org>


From robh at kernel.org  Thu Dec  1 15:46:28 2022
From: robh at kernel.org (Rob Herring)
Date: Thu, 1 Dec 2022 17:46:28 -0600
Subject: [PATCH 1/5] dt-bindings: net: qca,ar71xx: remove label = "cpu"
 from examples
In-Reply-To: <20221130141040.32447-2-arinc.unal@arinc9.com>
References: <20221130141040.32447-1-arinc.unal@arinc9.com>
 <20221130141040.32447-2-arinc.unal@arinc9.com>
Message-ID: <166993831623.1702506.4546645219900752750.robh@kernel.org>


On Wed, 30 Nov 2022 17:10:36 +0300, Ar?n? ?NAL wrote:
> This is not used by the DSA dt-binding, so remove it from the examples.
> 
> Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
> ---
>  Documentation/devicetree/bindings/net/qca,ar71xx.yaml | 1 -
>  1 file changed, 1 deletion(-)
> 

Acked-by: Rob Herring <robh at kernel.org>


From robh at kernel.org  Thu Dec  1 15:57:29 2022
From: robh at kernel.org (Rob Herring)
Date: Thu, 1 Dec 2022 17:57:29 -0600
Subject: [PATCH v3,1/3] media: dt-bindings: media: mediatek: vcodec: Fix
 clock num not correctly
In-Reply-To: <20221201121525.30777-1-yunfei.dong@mediatek.com>
References: <20221201121525.30777-1-yunfei.dong@mediatek.com>
Message-ID: <20221201235729.GA1718283-robh@kernel.org>

On Thu, Dec 01, 2022 at 08:15:22PM +0800, Yunfei Dong wrote:
> From: Yunfei Dong <yunfei.dong at mediatek.corp-partner.google.com>
> 
> mt8195 and mt8192 have different clock numbers, can't write 'clocks' and
> 'clock-names' with const value.
> 
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
> ---
> Reference series:
> [1]: v5 of this series is presend by Allen-KH Cheng.
>      message-id: 20221128143832.25584-4-allen-kh.cheng at mediatek.com
> ---
>  .../bindings/media/mediatek,vcodec-subdev-decoder.yaml   | 9 +++------
>  1 file changed, 3 insertions(+), 6 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
> index 7c5b4a91c59b..09781ef02193 100644
> --- a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
> +++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
> @@ -110,15 +110,12 @@ patternProperties:
>            Refer to bindings/iommu/mediatek,iommu.yaml.
>  
>        clocks:
> +        minItems: 1
>          maxItems: 5
>  
>        clock-names:
> -        items:
> -          - const: sel
> -          - const: soc-vdec
> -          - const: soc-lat
> -          - const: vdec
> -          - const: top
> +        minItems: 1
> +        maxItems: 5

Names need to be defined. This is a step backwards.

Rob

>  
>        assigned-clocks:
>          maxItems: 1
> -- 
> 2.18.0
> 
> 


From robh at kernel.org  Thu Dec  1 15:58:00 2022
From: robh at kernel.org (Rob Herring)
Date: Thu, 1 Dec 2022 17:58:00 -0600
Subject: [PATCH v3,2/3] media: dt-bindings: media: mediatek: vcodec:
 Change the max reg value to 2
In-Reply-To: <20221201121525.30777-2-yunfei.dong@mediatek.com>
References: <20221201121525.30777-1-yunfei.dong@mediatek.com>
 <20221201121525.30777-2-yunfei.dong@mediatek.com>
Message-ID: <166993907978.1720037.12508933639302184491.robh@kernel.org>


On Thu, 01 Dec 2022 20:15:23 +0800, Yunfei Dong wrote:
> From: Yunfei Dong <yunfei.dong at mediatek.corp-partner.google.com>
> 
> Need to add racing control register base in device node for mt8195 support
> inner racing mode. Changing the max reg value from 1 to 2.
> 
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
> ---
>  .../bindings/media/mediatek,vcodec-subdev-decoder.yaml      | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 

Acked-by: Rob Herring <robh at kernel.org>


From u0084500 at gmail.com  Thu Dec  1 19:35:35 2022
From: u0084500 at gmail.com (ChiYuan Huang)
Date: Fri, 2 Dec 2022 11:35:35 +0800
Subject: [PATCH 1/2] regulator: mt6370: Fix potential UAF issue
In-Reply-To: <Y4iTVmOA5P/aN2yb@sirena.org.uk>
References: <1669797463-24887-1-git-send-email-u0084500@gmail.com> <Y4iTVmOA5P/aN2yb@sirena.org.uk>
Message-ID: <CADiBU3-gr1OrH0_OtuWyAN8WwvZtPghC6zfB3NYuVTq4b+DZBw@mail.gmail.com>

Mark Brown <broonie at kernel.org> ? 2022?12?1? ?? ??7:43???
>
> On Wed, Nov 30, 2022 at 04:37:42PM +0800, cy_huang wrote:
>
> > The original code uses i2c dev as the parent in order to reuse
> > the 'regulator_of_get_init_data'. But this will cause regulation
> > constraint devres attached to i2c dev, not the mfd cell platform
> > device.
>
> This is a general issue which will affect a lot of MFDs, we would be
> better to fix this by changing the API to provide a device to be used
> for the devres allocations separately to the one used for looking up the
> DT.

Not to affect too much, the better way may change the 'regulator_register' API.
Append it as regulator_register(dev, .....
This could separate device object with devres allocation and DT lookup.


From yunfei.dong at mediatek.com  Thu Dec  1 19:44:48 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Fri, 2 Dec 2022 11:44:48 +0800
Subject: [PATCH v4,1/3] media: dt-bindings: media: mediatek: vcodec: adapt to the 'clock-names' of different platforms
Message-ID: <20221202034450.3808-1-yunfei.dong@mediatek.com>

mt8195 and mt8192 have different clock numbers, separate 'clock-names'
according to compatible name.

Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
compared with v3:
- rewrite clock-names according to different platforms.

Reference series:
[1]: v5 of this series is presend by Allen-KH Cheng.
     message-id: 20221128143832.25584-4-allen-kh.cheng at mediatek.com
---
 .../media/mediatek,vcodec-subdev-decoder.yaml | 41 ++++++++++++++++---
 1 file changed, 35 insertions(+), 6 deletions(-)

diff --git a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
index 7c5b4a91c59b..a08b2c814f40 100644
--- a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
+++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
@@ -110,15 +110,12 @@ patternProperties:
           Refer to bindings/iommu/mediatek,iommu.yaml.
 
       clocks:
+        minItems: 1
         maxItems: 5
 
       clock-names:
-        items:
-          - const: sel
-          - const: soc-vdec
-          - const: soc-lat
-          - const: vdec
-          - const: top
+        minItems: 1
+        maxItems: 5
 
       assigned-clocks:
         maxItems: 1
@@ -159,6 +156,38 @@ then:
   required:
     - interrupts
 
+allOf:
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - mediatek,mt8192-vcodec-dec
+    then:
+      properties:
+        clock-names:
+          items:
+            - const: sel
+            - const: soc-vdec
+            - const: soc-lat
+            - const: vdec
+            - const: top
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - mediatek,mt8195-vcodec-dec
+    then:
+      properties:
+        clock-names:
+          items:
+            - const: sel
+            - const: vdec
+            - const: lat
+            - const: top
+
 additionalProperties: false
 
 examples:
-- 
2.18.0



From yunfei.dong at mediatek.com  Thu Dec  1 19:44:50 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Fri, 2 Dec 2022 11:44:50 +0800
Subject: [PATCH v4,3/3] arm64: dts: mt8195: Add video decoder node
In-Reply-To: <20221202034450.3808-1-yunfei.dong@mediatek.com>
References: <20221202034450.3808-1-yunfei.dong@mediatek.com>
Message-ID: <20221202034450.3808-3-yunfei.dong@mediatek.com>

Add video decoder node to mt8195 device tree.

Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 arch/arm64/boot/dts/mediatek/mt8195.dtsi | 70 ++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index 905d1a90b406..6829aa0dcf4c 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -1874,6 +1874,76 @@
 			power-domains = <&spm MT8195_POWER_DOMAIN_CAM>;
 		};
 
+		video-codec at 18000000 {
+			compatible = "mediatek,mt8195-vcodec-dec";
+			mediatek,scp = <&scp>;
+			iommus = <&iommu_vdo M4U_PORT_L21_VDEC_MC_EXT>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+			reg = <0 0x18000000 0 0x1000>,
+			      <0 0x18004000 0 0x1000>;
+			ranges = <0 0 0 0x18000000 0 0x26000>;
+
+			video-codec at 2000 {
+				compatible = "mediatek,mtk-vcodec-lat-soc";
+				reg = <0 0x2000 0 0x800>;
+				iommus = <&iommu_vpp M4U_PORT_L23_VDEC_UFO_ENC_EXT>,
+					 <&iommu_vpp M4U_PORT_L23_VDEC_RDMA_EXT>;
+				clocks = <&topckgen CLK_TOP_VDEC>,
+					 <&vdecsys_soc CLK_VDEC_SOC_VDEC>,
+					 <&vdecsys_soc CLK_VDEC_SOC_LAT>,
+					 <&topckgen CLK_TOP_UNIVPLL_D4>;
+				clock-names = "sel", "vdec", "lat", "top";
+				assigned-clocks = <&topckgen CLK_TOP_VDEC>;
+				assigned-clock-parents = <&topckgen CLK_TOP_UNIVPLL_D4>;
+				power-domains = <&spm MT8195_POWER_DOMAIN_VDEC0>;
+			};
+
+			video-codec at 10000 {
+				compatible = "mediatek,mtk-vcodec-lat";
+				reg = <0 0x10000 0 0x800>;
+				interrupts = <GIC_SPI 708 IRQ_TYPE_LEVEL_HIGH 0>;
+				iommus = <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_VLD_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_VLD2_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_AVC_MC_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_PRED_RD_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_TILE_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_WDMA_EXT>;
+				clocks = <&topckgen CLK_TOP_VDEC>,
+					 <&vdecsys_soc CLK_VDEC_SOC_VDEC>,
+					 <&vdecsys_soc CLK_VDEC_SOC_LAT>,
+					 <&topckgen CLK_TOP_UNIVPLL_D4>;
+				clock-names = "sel", "vdec", "lat", "top";
+				assigned-clocks = <&topckgen CLK_TOP_VDEC>;
+				assigned-clock-parents = <&topckgen CLK_TOP_UNIVPLL_D4>;
+				power-domains = <&spm MT8195_POWER_DOMAIN_VDEC0>;
+			};
+
+			video-codec at 25000 {
+				compatible = "mediatek,mtk-vcodec-core";
+				reg = <0 0x25000 0 0x1000>;		/* VDEC_CORE_MISC */
+				interrupts = <GIC_SPI 707 IRQ_TYPE_LEVEL_HIGH 0>;
+				iommus = <&iommu_vdo M4U_PORT_L21_VDEC_MC_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_UFO_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_PP_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_PRED_RD_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_PRED_WR_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_PPWRAP_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_TILE_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_VLD_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_VLD2_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_AVC_MV_EXT>;
+				clocks = <&topckgen CLK_TOP_VDEC>,
+					 <&vdecsys CLK_VDEC_VDEC>,
+					 <&vdecsys CLK_VDEC_LAT>,
+					 <&topckgen CLK_TOP_UNIVPLL_D4>;
+				clock-names = "sel", "vdec", "lat", "top";
+				assigned-clocks = <&topckgen CLK_TOP_VDEC>;
+				assigned-clock-parents = <&topckgen CLK_TOP_UNIVPLL_D4>;
+				power-domains = <&spm MT8195_POWER_DOMAIN_VDEC1>;
+			};
+		};
+
 		larb24: larb at 1800d000 {
 			compatible = "mediatek,mt8195-smi-larb";
 			reg = <0 0x1800d000 0 0x1000>;
-- 
2.18.0



From patchwork-bot+netdevbpf at kernel.org  Thu Dec  1 20:10:17 2022
From: patchwork-bot+netdevbpf at kernel.org (patchwork-bot+netdevbpf at kernel.org)
Date: Fri, 02 Dec 2022 04:10:17 +0000
Subject: [PATCH 0/5] remove label = "cpu" from DSA dt-binding
In-Reply-To: <20221130141040.32447-1-arinc.unal@arinc9.com>
References: <20221130141040.32447-1-arinc.unal@arinc9.com>
Message-ID: <166995421705.16716.5360501255567828327.git-patchwork-notify@kernel.org>

Hello:

This series was applied to netdev/net-next.git (master)
by Jakub Kicinski <kuba at kernel.org>:

On Wed, 30 Nov 2022 17:10:35 +0300 you wrote:
> Hello folks,
> 
> With this patch series, we're completely getting rid of 'label = "cpu";'
> which is not used by the DSA dt-binding at all.
> 
> Information for taking the patches for maintainers:
> Patch 1: netdev maintainers (based off netdev/net-next.git main)
> Patch 2-3: SoC maintainers (based off soc/soc.git soc/dt)
> Patch 4: MIPS maintainers (based off mips/linux.git mips-next)
> Patch 5: PowerPC maintainers (based off powerpc/linux.git next-test)
> 
> [...]

Here is the summary with links:
  - [1/5] dt-bindings: net: qca,ar71xx: remove label = "cpu" from examples
    https://git.kernel.org/netdev/net-next/c/ce36d7ef4e08
  - [2/5] arm: dts: remove label = "cpu" from DSA dt-binding
    (no matching commit)
  - [3/5] arm64: dts: remove label = "cpu" from DSA dt-binding
    (no matching commit)
  - [4/5] mips: dts: remove label = "cpu" from DSA dt-binding
    (no matching commit)
  - [5/5] powerpc: dts: remove label = "cpu" from DSA dt-binding
    (no matching commit)

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html




From yunfei.dong at mediatek.com  Thu Dec  1 19:44:49 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Fri, 2 Dec 2022 11:44:49 +0800
Subject: [PATCH v4,2/3] media: dt-bindings: media: mediatek: vcodec: Change the max reg value to 2
In-Reply-To: <20221202034450.3808-1-yunfei.dong@mediatek.com>
References: <20221202034450.3808-1-yunfei.dong@mediatek.com>
Message-ID: <20221202034450.3808-2-yunfei.dong@mediatek.com>

Need to add racing control register base in device node for mt8195 support
inner racing mode. Changing the max reg value from 1 to 2.

Adding the description for VDEC_SYS and VDEC_MISC.

Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
Acked-by: Rob Herring <robh at kernel.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 .../bindings/media/mediatek,vcodec-subdev-decoder.yaml      | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
index a08b2c814f40..fffed7f515ae 100644
--- a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
+++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
@@ -61,7 +61,10 @@ properties:
       - mediatek,mt8195-vcodec-dec
 
   reg:
-    maxItems: 1
+    minItems: 1
+    items:
+      - description: VDEC_SYS register space
+      - description: VDEC_RACING_CTRL register space
 
   iommus:
     minItems: 1
@@ -98,6 +101,7 @@ patternProperties:
 
       reg:
         maxItems: 1
+        description: VDEC_MISC register space
 
       interrupts:
         maxItems: 1
-- 
2.18.0



From viresh.kumar at linaro.org  Thu Dec  1 21:26:07 2022
From: viresh.kumar at linaro.org (Viresh Kumar)
Date: Fri,  2 Dec 2022 10:56:07 +0530
Subject: [PATCH] Revert "cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()"
In-Reply-To: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
Message-ID: <18947e09733a17935af9a123ccf9b6e92faeaf9b.1669958641.git.viresh.kumar@linaro.org>

This reverts commit 6a17b3876bc8303612d7ad59ecf7cbc0db418bcd.

This commit caused regression on Banana Pi R64 (MT7622), revert until
the problem is identified and fixed properly.

Link: https://lore.kernel.org/all/930778a1-5e8b-6df6-3276-42dcdadaf682 at systemli.org/
Cc: v5.19+ <stable at vger.kernel.org> # v5.19+
Reported-by: Nick <vincent at systemli.org>
Signed-off-by: Viresh Kumar <viresh.kumar at linaro.org>
---
 drivers/cpufreq/mediatek-cpufreq.c | 147 +++++++++++++++++++----------
 1 file changed, 96 insertions(+), 51 deletions(-)

diff --git a/drivers/cpufreq/mediatek-cpufreq.c b/drivers/cpufreq/mediatek-cpufreq.c
index 7f2680bc9a0f..4466d0c91a6a 100644
--- a/drivers/cpufreq/mediatek-cpufreq.c
+++ b/drivers/cpufreq/mediatek-cpufreq.c
@@ -8,7 +8,6 @@
 #include <linux/cpu.h>
 #include <linux/cpufreq.h>
 #include <linux/cpumask.h>
-#include <linux/minmax.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_platform.h>
@@ -16,6 +15,8 @@
 #include <linux/pm_opp.h>
 #include <linux/regulator/consumer.h>
 
+#define VOLT_TOL		(10000)
+
 struct mtk_cpufreq_platform_data {
 	int min_volt_shift;
 	int max_volt_shift;
@@ -55,7 +56,6 @@ struct mtk_cpu_dvfs_info {
 	unsigned int opp_cpu;
 	unsigned long current_freq;
 	const struct mtk_cpufreq_platform_data *soc_data;
-	int vtrack_max;
 	bool ccifreq_bound;
 };
 
@@ -82,7 +82,6 @@ static int mtk_cpufreq_voltage_tracking(struct mtk_cpu_dvfs_info *info,
 	struct regulator *proc_reg = info->proc_reg;
 	struct regulator *sram_reg = info->sram_reg;
 	int pre_vproc, pre_vsram, new_vsram, vsram, vproc, ret;
-	int retry = info->vtrack_max;
 
 	pre_vproc = regulator_get_voltage(proc_reg);
 	if (pre_vproc < 0) {
@@ -90,44 +89,91 @@ static int mtk_cpufreq_voltage_tracking(struct mtk_cpu_dvfs_info *info,
 			"invalid Vproc value: %d\n", pre_vproc);
 		return pre_vproc;
 	}
+	/* Vsram should not exceed the maximum allowed voltage of SoC. */
+	new_vsram = min(new_vproc + soc_data->min_volt_shift,
+			soc_data->sram_max_volt);
+
+	if (pre_vproc < new_vproc) {
+		/*
+		 * When scaling up voltages, Vsram and Vproc scale up step
+		 * by step. At each step, set Vsram to (Vproc + 200mV) first,
+		 * then set Vproc to (Vsram - 100mV).
+		 * Keep doing it until Vsram and Vproc hit target voltages.
+		 */
+		do {
+			pre_vsram = regulator_get_voltage(sram_reg);
+			if (pre_vsram < 0) {
+				dev_err(info->cpu_dev,
+					"invalid Vsram value: %d\n", pre_vsram);
+				return pre_vsram;
+			}
+			pre_vproc = regulator_get_voltage(proc_reg);
+			if (pre_vproc < 0) {
+				dev_err(info->cpu_dev,
+					"invalid Vproc value: %d\n", pre_vproc);
+				return pre_vproc;
+			}
 
-	pre_vsram = regulator_get_voltage(sram_reg);
-	if (pre_vsram < 0) {
-		dev_err(info->cpu_dev, "invalid Vsram value: %d\n", pre_vsram);
-		return pre_vsram;
-	}
+			vsram = min(new_vsram,
+				    pre_vproc + soc_data->min_volt_shift);
 
-	new_vsram = clamp(new_vproc + soc_data->min_volt_shift,
-			  soc_data->sram_min_volt, soc_data->sram_max_volt);
+			if (vsram + VOLT_TOL >= soc_data->sram_max_volt) {
+				vsram = soc_data->sram_max_volt;
 
-	do {
-		if (pre_vproc <= new_vproc) {
-			vsram = clamp(pre_vproc + soc_data->max_volt_shift,
-				      soc_data->sram_min_volt, new_vsram);
-			ret = regulator_set_voltage(sram_reg, vsram,
-						    soc_data->sram_max_volt);
+				/*
+				 * If the target Vsram hits the maximum voltage,
+				 * try to set the exact voltage value first.
+				 */
+				ret = regulator_set_voltage(sram_reg, vsram,
+							    vsram);
+				if (ret)
+					ret = regulator_set_voltage(sram_reg,
+							vsram - VOLT_TOL,
+							vsram);
 
-			if (ret)
-				return ret;
-
-			if (vsram == soc_data->sram_max_volt ||
-			    new_vsram == soc_data->sram_min_volt)
 				vproc = new_vproc;
-			else
+			} else {
+				ret = regulator_set_voltage(sram_reg, vsram,
+							    vsram + VOLT_TOL);
+
 				vproc = vsram - soc_data->min_volt_shift;
+			}
+			if (ret)
+				return ret;
 
 			ret = regulator_set_voltage(proc_reg, vproc,
-						    soc_data->proc_max_volt);
+						    vproc + VOLT_TOL);
 			if (ret) {
 				regulator_set_voltage(sram_reg, pre_vsram,
-						      soc_data->sram_max_volt);
+						      pre_vsram);
 				return ret;
 			}
-		} else if (pre_vproc > new_vproc) {
+		} while (vproc < new_vproc || vsram < new_vsram);
+	} else if (pre_vproc > new_vproc) {
+		/*
+		 * When scaling down voltages, Vsram and Vproc scale down step
+		 * by step. At each step, set Vproc to (Vsram - 200mV) first,
+		 * then set Vproc to (Vproc + 100mV).
+		 * Keep doing it until Vsram and Vproc hit target voltages.
+		 */
+		do {
+			pre_vproc = regulator_get_voltage(proc_reg);
+			if (pre_vproc < 0) {
+				dev_err(info->cpu_dev,
+					"invalid Vproc value: %d\n", pre_vproc);
+				return pre_vproc;
+			}
+			pre_vsram = regulator_get_voltage(sram_reg);
+			if (pre_vsram < 0) {
+				dev_err(info->cpu_dev,
+					"invalid Vsram value: %d\n", pre_vsram);
+				return pre_vsram;
+			}
+
 			vproc = max(new_vproc,
 				    pre_vsram - soc_data->max_volt_shift);
 			ret = regulator_set_voltage(proc_reg, vproc,
-						    soc_data->proc_max_volt);
+						    vproc + VOLT_TOL);
 			if (ret)
 				return ret;
 
@@ -137,24 +183,32 @@ static int mtk_cpufreq_voltage_tracking(struct mtk_cpu_dvfs_info *info,
 				vsram = max(new_vsram,
 					    vproc + soc_data->min_volt_shift);
 
-			ret = regulator_set_voltage(sram_reg, vsram,
-						    soc_data->sram_max_volt);
+			if (vsram + VOLT_TOL >= soc_data->sram_max_volt) {
+				vsram = soc_data->sram_max_volt;
+
+				/*
+				 * If the target Vsram hits the maximum voltage,
+				 * try to set the exact voltage value first.
+				 */
+				ret = regulator_set_voltage(sram_reg, vsram,
+							    vsram);
+				if (ret)
+					ret = regulator_set_voltage(sram_reg,
+							vsram - VOLT_TOL,
+							vsram);
+			} else {
+				ret = regulator_set_voltage(sram_reg, vsram,
+							    vsram + VOLT_TOL);
+			}
+
 			if (ret) {
 				regulator_set_voltage(proc_reg, pre_vproc,
-						      soc_data->proc_max_volt);
+						      pre_vproc);
 				return ret;
 			}
-		}
-
-		pre_vproc = vproc;
-		pre_vsram = vsram;
-
-		if (--retry < 0) {
-			dev_err(info->cpu_dev,
-				"over loop count, failed to set voltage\n");
-			return -EINVAL;
-		}
-	} while (vproc != new_vproc || vsram != new_vsram);
+		} while (vproc > new_vproc + VOLT_TOL ||
+			 vsram > new_vsram + VOLT_TOL);
+	}
 
 	return 0;
 }
@@ -250,8 +304,8 @@ static int mtk_cpufreq_set_target(struct cpufreq_policy *policy,
 	 * If the new voltage or the intermediate voltage is higher than the
 	 * current voltage, scale up voltage first.
 	 */
-	target_vproc = max(inter_vproc, vproc);
-	if (pre_vproc <= target_vproc) {
+	target_vproc = (inter_vproc > vproc) ? inter_vproc : vproc;
+	if (pre_vproc < target_vproc) {
 		ret = mtk_cpufreq_set_voltage(info, target_vproc);
 		if (ret) {
 			dev_err(cpu_dev,
@@ -513,15 +567,6 @@ static int mtk_cpu_dvfs_info_init(struct mtk_cpu_dvfs_info *info, int cpu)
 	 */
 	info->need_voltage_tracking = (info->sram_reg != NULL);
 
-	/*
-	 * We assume min voltage is 0 and tracking target voltage using
-	 * min_volt_shift for each iteration.
-	 * The vtrack_max is 3 times of expeted iteration count.
-	 */
-	info->vtrack_max = 3 * DIV_ROUND_UP(max(info->soc_data->sram_max_volt,
-						info->soc_data->proc_max_volt),
-					    info->soc_data->min_volt_shift);
-
 	return 0;
 
 out_disable_inter_clock:
-- 
2.31.1.272.g89b43f80a514



From viresh.kumar at linaro.org  Thu Dec  1 21:27:16 2022
From: viresh.kumar at linaro.org (Viresh Kumar)
Date: Fri, 2 Dec 2022 10:57:16 +0530
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <eb142a22-b35e-ec3f-ee0a-9e3e7b24cea6@gmail.com>
 <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
 <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
Message-ID: <20221202052716.uj3kzkunazmgazeq@vireshk-i7>

On 01-12-22, 16:39, Thorsten Leemhuis wrote:
> Thx for clarifying. And I noticed I made a mistake: I should have
> directed my earlier question wrt to any progress here more into the
> direction of Jia-Wei Chang (who authored 6a17b3876b) and Viresh Kumar
> (who committed it).

I was waiting for the platform maintainers to come up with a fix. I
have sent a patch now to revert this, in-reply-to this thread.

Please confirm this is working fine. Thanks.

-- 
viresh


From peter.wang at mediatek.com  Thu Dec  1 22:47:34 2022
From: peter.wang at mediatek.com (=?utf-8?B?UGV0ZXIgV2FuZyAo546L5L+h5Y+LKQ==?=)
Date: Fri, 2 Dec 2022 06:47:34 +0000
Subject: [PATCH v2] ufs: core: wlun suspend SSU/enter hibern8 fail
 recovery
In-Reply-To: <c9a68946-1015-9b9c-1023-94919d001ece@acm.org>
References: <20221201094358.20700-1-peter.wang@mediatek.com>
	 <c9a68946-1015-9b9c-1023-94919d001ece@acm.org>
Message-ID: <4e58e0a42c00baeaa0c3c704cbef4a0642f3c0d1.camel@mediatek.com>

On Thu, 2022-12-01 at 10:44 -0800, Bart Van Assche wrote:
> On 12/1/22 01:43, peter.wang at mediatek.com wrote:
> > @@ -9049,6 +9050,20 @@ static int __ufshcd_wl_suspend(struct
> > ufs_hba *hba, enum ufs_pm_op pm_op)
> >   
> >   		if (!hba->dev_info.b_rpm_dev_flush_capable) {
> >   			ret = ufshcd_set_dev_pwr_mode(hba,
> > req_dev_pwr_mode);
> > +			if ((ret) && (pm_op != UFS_SHUTDOWN_PM)) {
> 
> Please remove the superfluous parentheses from the above statement.
> 
Hi Bart,

Okay, will change next version.

> > +				/*
> > +				 * If return err in suspend flow, IO
> > will hang.
> > +				 * Trigger error handler and break
> > suspend for
> > +				 * error recovery.
> > +				 */
> > +				spin_lock_irqsave(hba->host->host_lock, 
> > flags);
> 
> __ufshcd_wl_suspend() is allowed to sleep. Please change 
> spin_lock_irqsave() into spin_lock_irq().
> 
> > +				hba->force_reset = true;
> > +				ufshcd_schedule_eh_work(hba);
> > +				spin_unlock_irqrestore(hba->host-
> > >host_lock,
> > +					flags);
> > +
> > +				ret = -EBUSY;
> 
> Why is the value of 'ret' changed into -EBUSY? Can the above code be 
> left out?
> 

Because in runtime pm framework, return EBUSY is okay for next time
runtime suspend retry.
Return ETIMEOUT/EIO or other then EBUSY will keep error code in
veriable "runtime_error". (supplier first then consumer resume block by
supplier also get runtime_error too). Finally, lead to IO hang.


> > @@ -9060,6 +9075,20 @@ static int __ufshcd_wl_suspend(struct
> > ufs_hba *hba, enum ufs_pm_op pm_op)
> >   	 */
> >   	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
> >   	ret = ufshcd_link_state_transition(hba, req_link_state,
> > check_for_bkops);
> > +	if ((ret) && (pm_op != UFS_SHUTDOWN_PM)) {
> > +		/*
> > +		 * If return err in suspend flow, IO will hang.
> > +		 * Trigger error handler and break suspend for
> > +		 * error recovery.
> > +		 */
> > +		spin_lock_irqsave(hba->host->host_lock, flags);
> > +		hba->force_reset = true;
> > +		ufshcd_schedule_eh_work(hba);
> > +		spin_unlock_irqrestore(hba->host->host_lock,
> > +			flags);
> > +
> > +		ret = -EBUSY;
> > +	}
> 
> Same comments as above for this code block.
> 
> Thanks,
> 
> Bart.

Okay, will change next version.

Thanks
BR
Peter


> 

From peter.wang at mediatek.com  Thu Dec  1 22:40:59 2022
From: peter.wang at mediatek.com (=?utf-8?B?UGV0ZXIgV2FuZyAo546L5L+h5Y+LKQ==?=)
Date: Fri, 2 Dec 2022 06:40:59 +0000
Subject: [PATCH v1] ufs: core: wlun suspend SSU fail recovery
In-Reply-To: <CAONX=-e1NA--3taTmfbUV+hR_LOSqvBqz_=1mPmYZWaKGGR=ig@mail.gmail.com>
References: <20221101142410.31463-1-peter.wang@mediatek.com>
	 <98bfafd3-c7b7-89b5-497a-aa694d0152dd@intel.com>
	 <5e00ce60-3859-4964-11f7-e036f6dda56a@acm.org>
	 <CAONX=-e1NA--3taTmfbUV+hR_LOSqvBqz_=1mPmYZWaKGGR=ig@mail.gmail.com>
Message-ID: <c92655563231dd79ed6d4287d7d5bad4de142a18.camel@mediatek.com>

On Fri, 2022-12-02 at 10:32 +1100, Daniil Lunev wrote:
> On Thu, Dec 1, 2022 at 4:50 AM Bart Van Assche <bvanassche at acm.org>
> wrote:
> > 
> > On 11/30/22 02:17, Adrian Hunter wrote:
> > > On 1/11/22 16:24, peter.wang at mediatek.com wrote:
> > > > From: Peter Wang <peter.wang at mediatek.com>
> > > > 
> > > > When SSU fail in wlun suspend flow, trigger error handlder and
> > > 
> > > handlder -> handler
> > > 
> > > Why / how does SSU fail?
> > 
> > I'm not sure but the issue that Peter is trying to fix with this
> > patch
> > may already have been fixed by my patch series "Fix a deadlock in
> > the
> > UFS driver".
> 
> We observe a similar failure scenario when a device tries to change
> power mode (e.g. due to autosuspend) while "purge" is in progress. It
> appears that in this case the "pm_only" counter is increased on the
> device queue prior to the attempt of entering a runtime suspended
> state, but not reduced upon it failing due to the device being busy
> with an ongoing purge. That leads to a deadlock of subsequent IO
> operations to the device.
> 
> --Daniil

Hi Daniil,

May I have a question, which dievce you use in this failure scenario?  
I think it is same issue due to SSU fail, and wlun devcie pm enter
error state. So the cunsomer(scsi lu device) is block in suspend state
and connot resume to reduce pm_only lead to IO hang.

Thanks.
BR
Peter



From haozhe.chang at mediatek.com  Thu Dec  1 22:40:32 2022
From: haozhe.chang at mediatek.com (haozhe.chang at mediatek.com)
Date: Fri, 2 Dec 2022 14:40:32 +0800
Subject: [PATCH v6] wwan: core: Support slicing in port TX flow of WWAN subsystem
Message-ID: <20221202064035.57197-1-haozhe.chang@mediatek.com>

From: haozhe chang <haozhe.chang at mediatek.com>

wwan_port_fops_write inputs the SKB parameter to the TX callback of
the WWAN device driver. However, the WWAN device (e.g., t7xx) may
have an MTU less than the size of SKB, causing the TX buffer to be
sliced and copied once more in the WWAN device driver.

This patch implements the slicing in the WWAN subsystem and gives
the WWAN devices driver the option to slice(by frag_len) or not. By
doing so, the additional memory copy is reduced.

Meanwhile, this patch gives WWAN devices driver the option to reserve
headroom in fragments for the device-specific metadata.

Signed-off-by: haozhe chang <haozhe.chang at mediatek.com>
Reviewed-by: Loic Poulain <loic.poulain at linaro.org>

---
Changes in v2
  -send fragments to device driver by skb frag_list.

Changes in v3
  -move frag_len and headroom_len setting to wwan_create_port.

Changes in v4
  -change unreadable parameters to macro definition.

Changes in v5
  -optimize comments for WWAN_NO_HEADROOM, WWAN_NO_FRAGMENT.

Changes in v6
  -add reviewer to patch commit.
---
 drivers/net/wwan/iosm/iosm_ipc_port.c  |  3 +-
 drivers/net/wwan/mhi_wwan_ctrl.c       |  3 +-
 drivers/net/wwan/rpmsg_wwan_ctrl.c     |  3 +-
 drivers/net/wwan/t7xx/t7xx_port_wwan.c | 34 +++++++--------
 drivers/net/wwan/wwan_core.c           | 59 ++++++++++++++++++++------
 drivers/net/wwan/wwan_hwsim.c          |  1 +
 drivers/usb/class/cdc-wdm.c            |  3 +-
 include/linux/wwan.h                   | 16 +++++++
 8 files changed, 87 insertions(+), 35 deletions(-)

diff --git a/drivers/net/wwan/iosm/iosm_ipc_port.c b/drivers/net/wwan/iosm/iosm_ipc_port.c
index b6d81c627277..7798348f61d0 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_port.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_port.c
@@ -63,7 +63,8 @@ struct iosm_cdev *ipc_port_init(struct iosm_imem *ipc_imem,
 	ipc_port->ipc_imem = ipc_imem;
 
 	ipc_port->iosm_port = wwan_create_port(ipc_port->dev, port_type,
-					       &ipc_wwan_ctrl_ops, ipc_port);
+					       &ipc_wwan_ctrl_ops, WWAN_NO_FRAGMENT,
+					       WWAN_NO_HEADROOM, ipc_port);
 
 	return ipc_port;
 }
diff --git a/drivers/net/wwan/mhi_wwan_ctrl.c b/drivers/net/wwan/mhi_wwan_ctrl.c
index f7ca52353f40..c397aa53db5d 100644
--- a/drivers/net/wwan/mhi_wwan_ctrl.c
+++ b/drivers/net/wwan/mhi_wwan_ctrl.c
@@ -237,7 +237,8 @@ static int mhi_wwan_ctrl_probe(struct mhi_device *mhi_dev,
 
 	/* Register as a wwan port, id->driver_data contains wwan port type */
 	port = wwan_create_port(&cntrl->mhi_dev->dev, id->driver_data,
-				&wwan_pops, mhiwwan);
+				&wwan_pops, WWAN_NO_FRAGMENT, WWAN_NO_HEADROOM,
+				mhiwwan);
 	if (IS_ERR(port)) {
 		kfree(mhiwwan);
 		return PTR_ERR(port);
diff --git a/drivers/net/wwan/rpmsg_wwan_ctrl.c b/drivers/net/wwan/rpmsg_wwan_ctrl.c
index 31c24420ab2e..fc6c228b7e1c 100644
--- a/drivers/net/wwan/rpmsg_wwan_ctrl.c
+++ b/drivers/net/wwan/rpmsg_wwan_ctrl.c
@@ -129,7 +129,8 @@ static int rpmsg_wwan_ctrl_probe(struct rpmsg_device *rpdev)
 
 	/* Register as a wwan port, id.driver_data contains wwan port type */
 	port = wwan_create_port(parent, rpdev->id.driver_data,
-				&rpmsg_wwan_pops, rpwwan);
+				&rpmsg_wwan_pops, WWAN_NO_FRAGMENT,
+				WWAN_NO_HEADROOM, rpwwan);
 	if (IS_ERR(port))
 		return PTR_ERR(port);
 
diff --git a/drivers/net/wwan/t7xx/t7xx_port_wwan.c b/drivers/net/wwan/t7xx/t7xx_port_wwan.c
index 33931bfd78fd..b75bb272f861 100644
--- a/drivers/net/wwan/t7xx/t7xx_port_wwan.c
+++ b/drivers/net/wwan/t7xx/t7xx_port_wwan.c
@@ -54,13 +54,13 @@ static void t7xx_port_ctrl_stop(struct wwan_port *port)
 static int t7xx_port_ctrl_tx(struct wwan_port *port, struct sk_buff *skb)
 {
 	struct t7xx_port *port_private = wwan_port_get_drvdata(port);
-	size_t len, offset, chunk_len = 0, txq_mtu = CLDMA_MTU;
 	const struct t7xx_port_conf *port_conf;
+	struct sk_buff *cur = skb, *cloned;
 	struct t7xx_fsm_ctl *ctl;
 	enum md_state md_state;
+	int cnt = 0, ret;
 
-	len = skb->len;
-	if (!len || !port_private->chan_enable)
+	if (!port_private->chan_enable)
 		return -EINVAL;
 
 	port_conf = port_private->port_conf;
@@ -72,23 +72,21 @@ static int t7xx_port_ctrl_tx(struct wwan_port *port, struct sk_buff *skb)
 		return -ENODEV;
 	}
 
-	for (offset = 0; offset < len; offset += chunk_len) {
-		struct sk_buff *skb_ccci;
-		int ret;
-
-		chunk_len = min(len - offset, txq_mtu - sizeof(struct ccci_header));
-		skb_ccci = t7xx_port_alloc_skb(chunk_len);
-		if (!skb_ccci)
-			return -ENOMEM;
-
-		skb_put_data(skb_ccci, skb->data + offset, chunk_len);
-		ret = t7xx_port_send_skb(port_private, skb_ccci, 0, 0);
+	while (cur) {
+		cloned = skb_clone(cur, GFP_KERNEL);
+		cloned->len = skb_headlen(cur);
+		ret = t7xx_port_send_skb(port_private, cloned, 0, 0);
 		if (ret) {
-			dev_kfree_skb_any(skb_ccci);
+			dev_kfree_skb(cloned);
 			dev_err(port_private->dev, "Write error on %s port, %d\n",
 				port_conf->name, ret);
-			return ret;
+			return cnt ? cnt + ret : ret;
 		}
+		cnt += cur->len;
+		if (cur == skb)
+			cur = skb_shinfo(skb)->frag_list;
+		else
+			cur = cur->next;
 	}
 
 	dev_kfree_skb(skb);
@@ -154,13 +152,15 @@ static int t7xx_port_wwan_disable_chl(struct t7xx_port *port)
 static void t7xx_port_wwan_md_state_notify(struct t7xx_port *port, unsigned int state)
 {
 	const struct t7xx_port_conf *port_conf = port->port_conf;
+	unsigned int header_len = sizeof(struct ccci_header);
 
 	if (state != MD_STATE_READY)
 		return;
 
 	if (!port->wwan_port) {
 		port->wwan_port = wwan_create_port(port->dev, port_conf->port_type,
-						   &wwan_ops, port);
+						   &wwan_ops, CLDMA_MTU - header_len,
+						   header_len, port);
 		if (IS_ERR(port->wwan_port))
 			dev_err(port->dev, "Unable to create WWWAN port %s", port_conf->name);
 	}
diff --git a/drivers/net/wwan/wwan_core.c b/drivers/net/wwan/wwan_core.c
index 62e9f7d6c9fe..8d35513bcd4c 100644
--- a/drivers/net/wwan/wwan_core.c
+++ b/drivers/net/wwan/wwan_core.c
@@ -67,6 +67,8 @@ struct wwan_device {
  * @rxq: Buffer inbound queue
  * @waitqueue: The waitqueue for port fops (read/write/poll)
  * @data_lock: Port specific data access serialization
+ * @headroom_len: SKB reserved headroom size
+ * @frag_len: Length to fragment packet
  * @at_data: AT port specific data
  */
 struct wwan_port {
@@ -79,6 +81,8 @@ struct wwan_port {
 	struct sk_buff_head rxq;
 	wait_queue_head_t waitqueue;
 	struct mutex data_lock;	/* Port specific data access serialization */
+	size_t headroom_len;
+	size_t frag_len;
 	union {
 		struct {
 			struct ktermios termios;
@@ -422,6 +426,8 @@ static int __wwan_port_dev_assign_name(struct wwan_port *port, const char *fmt)
 struct wwan_port *wwan_create_port(struct device *parent,
 				   enum wwan_port_type type,
 				   const struct wwan_port_ops *ops,
+				   size_t frag_len,
+				   unsigned int headroom_len,
 				   void *drvdata)
 {
 	struct wwan_device *wwandev;
@@ -455,6 +461,8 @@ struct wwan_port *wwan_create_port(struct device *parent,
 
 	port->type = type;
 	port->ops = ops;
+	port->frag_len = frag_len ? frag_len : SIZE_MAX;
+	port->headroom_len = headroom_len;
 	mutex_init(&port->ops_lock);
 	skb_queue_head_init(&port->rxq);
 	init_waitqueue_head(&port->waitqueue);
@@ -698,30 +706,53 @@ static ssize_t wwan_port_fops_read(struct file *filp, char __user *buf,
 static ssize_t wwan_port_fops_write(struct file *filp, const char __user *buf,
 				    size_t count, loff_t *offp)
 {
+	struct sk_buff *skb, *head = NULL, *tail = NULL;
 	struct wwan_port *port = filp->private_data;
-	struct sk_buff *skb;
+	size_t frag_len, remain = count;
 	int ret;
 
 	ret = wwan_wait_tx(port, !!(filp->f_flags & O_NONBLOCK));
 	if (ret)
 		return ret;
 
-	skb = alloc_skb(count, GFP_KERNEL);
-	if (!skb)
-		return -ENOMEM;
+	do {
+		frag_len = min(remain, port->frag_len);
+		skb = alloc_skb(frag_len + port->headroom_len, GFP_KERNEL);
+		if (!skb) {
+			ret = -ENOMEM;
+			goto freeskb;
+		}
+		skb_reserve(skb, port->headroom_len);
+
+		if (!head) {
+			head = skb;
+		} else if (!tail) {
+			skb_shinfo(head)->frag_list = skb;
+			tail = skb;
+		} else {
+			tail->next = skb;
+			tail = skb;
+		}
 
-	if (copy_from_user(skb_put(skb, count), buf, count)) {
-		kfree_skb(skb);
-		return -EFAULT;
-	}
+		if (copy_from_user(skb_put(skb, frag_len), buf + count - remain, frag_len)) {
+			ret = -EFAULT;
+			goto freeskb;
+		}
 
-	ret = wwan_port_op_tx(port, skb, !!(filp->f_flags & O_NONBLOCK));
-	if (ret) {
-		kfree_skb(skb);
-		return ret;
-	}
+		if (skb != head) {
+			head->data_len += skb->len;
+			head->len += skb->len;
+			head->truesize += skb->truesize;
+		}
+	} while (remain -= frag_len);
+
+	ret = wwan_port_op_tx(port, head, !!(filp->f_flags & O_NONBLOCK));
+	if (!ret)
+		return count;
 
-	return count;
+freeskb:
+	kfree_skb(head);
+	return ret;
 }
 
 static __poll_t wwan_port_fops_poll(struct file *filp, poll_table *wait)
diff --git a/drivers/net/wwan/wwan_hwsim.c b/drivers/net/wwan/wwan_hwsim.c
index ff09a8cedf93..7fb54cb51628 100644
--- a/drivers/net/wwan/wwan_hwsim.c
+++ b/drivers/net/wwan/wwan_hwsim.c
@@ -205,6 +205,7 @@ static struct wwan_hwsim_port *wwan_hwsim_port_new(struct wwan_hwsim_dev *dev)
 
 	port->wwan = wwan_create_port(&dev->dev, WWAN_PORT_AT,
 				      &wwan_hwsim_port_ops,
+				      WWAN_NO_FRAGMENT, WWAN_NO_HEADROOM,
 				      port);
 	if (IS_ERR(port->wwan)) {
 		err = PTR_ERR(port->wwan);
diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
index 1f0951be15ab..e0f0bc878bbd 100644
--- a/drivers/usb/class/cdc-wdm.c
+++ b/drivers/usb/class/cdc-wdm.c
@@ -929,7 +929,8 @@ static void wdm_wwan_init(struct wdm_device *desc)
 		return;
 	}
 
-	port = wwan_create_port(&intf->dev, desc->wwanp_type, &wdm_wwan_port_ops, desc);
+	port = wwan_create_port(&intf->dev, desc->wwanp_type, &wdm_wwan_port_ops,
+				WWAN_NO_FRAGMENT, WWAN_NO_HEADROOM, desc);
 	if (IS_ERR(port)) {
 		dev_err(&intf->dev, "%s: Unable to create WWAN port\n",
 			dev_name(intf->usb_dev));
diff --git a/include/linux/wwan.h b/include/linux/wwan.h
index 5ce2acf444fb..adaf1f4a8652 100644
--- a/include/linux/wwan.h
+++ b/include/linux/wwan.h
@@ -62,11 +62,25 @@ struct wwan_port_ops {
 			    poll_table *wait);
 };
 
+/*
+ * Used to indicate that the WWAN core should not fragment control packages.
+ */
+#define WWAN_NO_FRAGMENT	0
+
+/*
+ * Used to indicate that the WWAN core should not reserve headroom in control packages.
+ */
+#define WWAN_NO_HEADROOM	0
+
 /**
  * wwan_create_port - Add a new WWAN port
  * @parent: Device to use as parent and shared by all WWAN ports
  * @type: WWAN port type
  * @ops: WWAN port operations
+ * @frag_len: WWAN port TX fragments length, if WWAN_NO_FRAGMENT is set,
+ *            the WWAN core don't fragment control packages.
+ * @headroom_len: WWAN port TX fragments reserved headroom length, if WWAN_NO_HEADROOM
+ *                is set, the WWAN core don't reserve headroom in control packages.
  * @drvdata: Pointer to caller driver data
  *
  * Allocate and register a new WWAN port. The port will be automatically exposed
@@ -84,6 +98,8 @@ struct wwan_port_ops {
 struct wwan_port *wwan_create_port(struct device *parent,
 				   enum wwan_port_type type,
 				   const struct wwan_port_ops *ops,
+				   size_t frag_len,
+				   unsigned int headroom_len,
 				   void *drvdata);
 
 /**
-- 
2.17.0



From Allen-KH.Cheng at mediatek.com  Fri Dec  2 00:00:04 2022
From: Allen-KH.Cheng at mediatek.com (=?utf-8?B?QWxsZW4tS0ggQ2hlbmcgKOeoi+WGoOWLsyk=?=)
Date: Fri, 2 Dec 2022 08:00:04 +0000
Subject: [PATCH] arm64: dts: mt8192: Add adsp power domain controller
In-Reply-To: <28d94df0-6e87-3019-dc10-a587f84488fb@collabora.com>
References: <20221201073328.1559-1-allen-kh.cheng@mediatek.com>
	 <ba14a46f-477f-70af-761d-696fe8a4f41c@collabora.com>
	 <CAGXv+5Gg6ozYQcp_NPrAiH1kF-ZkfjVZhQZVhLnbSmjQBwsFwQ@mail.gmail.com>
	 <8ae2a510-abf6-6e1b-9893-293db7d930e7@collabora.com>
	 <CAGXv+5H+msQ1ct5CUzYnT_BmYPnS72HbivvyO39uOfMfXbo5qg@mail.gmail.com>
	 <28d94df0-6e87-3019-dc10-a587f84488fb@collabora.com>
Message-ID: <fd4e49139285e8506938ab142ccd429bae980fe2.camel@mediatek.com>

Hi Angelo and Chen-Yu,

On Thu, 2022-12-01 at 11:10 +0100, AngeloGioacchino Del Regno wrote:
> Il 01/12/22 11:05, Chen-Yu Tsai ha scritto:
> > On Thu, Dec 1, 2022 at 5:39 PM AngeloGioacchino Del Regno
> > <angelogioacchino.delregno at collabora.com> wrote:
> > > 
> > > Il 01/12/22 10:10, Chen-Yu Tsai ha scritto:
> > > > On Thu, Dec 1, 2022 at 5:07 PM AngeloGioacchino Del Regno
> > > > <angelogioacchino.delregno at collabora.com> wrote:
> > > > > 
> > > > > Il 01/12/22 08:33, Allen-KH Cheng ha scritto:
> > > > > > Add adsp power domain controller node for mt8192 SoC.
> > > > > > 
> > > > > > Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> > > > > > ---
> > > > > > Ref: 
> > > > > > https://lore.kernel.org/all/2ec80bd8-dfef-d2e6-eb41-6e6088043e33 at collabora.com/
> > > > > >        [Allen-KH Cheng <allen-kh.cheng at mediatek.com>]
> > > > > > ---
> > > > > > ---
> > > > > >     arch/arm64/boot/dts/mediatek/mt8192.dtsi | 8 ++++++++
> > > > > >     include/dt-bindings/power/mt8192-power.h | 1 +
> > > > > >     2 files changed, 9 insertions(+)
> > > > > > 
> > > > > 
> > > > > Allen, thanks for this one, but it's incomplete...
> > > > > 
> > > > > First of all, you must add the power domain on the driver
> > > > > itself, specifically,
> > > > > in drivers/soc/mediatek/mt8192-pm-domains.h - otherwise this
> > > > > change will have no
> > > > > effect!
> > > > 
> > > > Actually it's worse. The driver doesn't know about the new
> > > > power domain,
> > > > and so it will fail to probe. We might need to make the power
> > > > domain driver
> > > > fail gracefully and skip unknown power domains.
> > > > 
> > > 
> > > Right. It's worse. I don't know, though, if gracefully skipping
> > > unknown power
> > > domains in the driver would be a good decision... as sometimes
> > > error messages
> > > go unnoticed.
> > > 
> > > When the platform "explodes" instead, you're forced to read that
> > > log carefully
> > > and get it working again... Anyway, I'm only thinking out loud,
> > > nothing less and
> > > nothing more than that :-)
> > 
> > Me too. :)
> > 
> > > By the way, we can probably expand on that topic a bit later, as
> > > it's outside of
> > > the scope of this specific change.
> > > 
> > > Back to topic, if we get one series containing both changes
> > > (devicetree, bindings
> > > and driver) with the right Fixes tags and/or Cc stable, we
> > > shouldn't have such
> > > issue on backports so we can probably ignore that potential
> > > issue, I think? :-)
> > 
> > Everything goes through the soc tree, so they should appear in
> > Linus's tree
> > and get picked by stable at more or less the same time. I think we
> > would
> > want the driver change to appear before the dts change, for
> > bisectability's
> > sake (because of header dependencies and driver errors).
> > 
> > So we probably want:
> > 1. driver + binding header changes
> > 2. dtsi changes
> > 
> > And have these merged through fixes so that the history between
> > them is linear.
> > 
> 
> Perfect, I fully agree.
> 

Thank you for your comments.

I need to check internally with my coworkers for driver and will update
v2.

Best Regards,
Allen

> > 
> > ChenYu
> > 
> > > Cheers,
> > > Angelo
> > > 
> > > > ChenYu
> > > > 
> > > > > ...Then, as Chen-Yu said, you should also add the power
> > > > > domain to the scp_adsp
> > > > > clock node as that's solving the lockup issue...
> > > > > 
> > > > > .......and last, but not least: we need a Fixes tag to
> > > > > backport this fix, here
> > > > > and on the commit that adds the missing power domain in the
> > > > > driver.
> > > > > 
> > > > > Thanks,
> > > > > Angelo
> > > > > 
> > > > > > diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> > > > > > b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> > > > > > index 424fc89cc6f7..e71afba871fc 100644
> > > > > > --- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> > > > > > +++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> > > > > > @@ -514,6 +514,14 @@
> > > > > >                                                 };
> > > > > >                                         };
> > > > > >                                 };
> > > > > > +
> > > > > > +                             power-domain at MT8192_POWER_DOM
> > > > > > AIN_ADSP {
> > > > > > +                                     reg =
> > > > > > <MT8192_POWER_DOMAIN_ADSP>;
> > > > > > +                                     clocks = <&topckgen
> > > > > > CLK_TOP_ADSP_SEL>;
> > > > > > +                                     clock-names = "adsp";
> > > > > > +                                     mediatek,infracfg =
> > > > > > <&infracfg>;
> > > > > > +                                     #power-domain-cells =
> > > > > > <0>;
> > > > > > +                             };
> > > > > >                         };
> > > > > >                 };
> > > > > > 
> > > > > > diff --git a/include/dt-bindings/power/mt8192-power.h
> > > > > > b/include/dt-bindings/power/mt8192-power.h
> > > > > > index 4eaa53d7270a..63e81cd0d06d 100644
> > > > > > --- a/include/dt-bindings/power/mt8192-power.h
> > > > > > +++ b/include/dt-bindings/power/mt8192-power.h
> > > > > > @@ -28,5 +28,6 @@
> > > > > >     #define MT8192_POWER_DOMAIN_CAM_RAWA        18
> > > > > >     #define MT8192_POWER_DOMAIN_CAM_RAWB        19
> > > > > >     #define MT8192_POWER_DOMAIN_CAM_RAWC        20
> > > > > > +#define MT8192_POWER_DOMAIN_ADSP     21
> > > > > > 
> > > > > >     #endif /* _DT_BINDINGS_POWER_MT8192_POWER_H */
> > > > > > 
> > > 
> > > 
> 
> 

From pavan.chebbi at broadcom.com  Fri Dec  2 00:07:38 2022
From: pavan.chebbi at broadcom.com (Pavan Chebbi)
Date: Fri, 2 Dec 2022 13:37:38 +0530
Subject: [PATCH net-next] net: ethernet: mtk_wed: fix sleep while atomic
 in mtk_wed_wo_queue_refill
In-Reply-To: <67ca94bdd3d9eaeb86e52b3050fbca0bcf7bb02f.1669908312.git.lorenzo@kernel.org>
References: <67ca94bdd3d9eaeb86e52b3050fbca0bcf7bb02f.1669908312.git.lorenzo@kernel.org>
Message-ID: <CALs4sv0fjaaYf-s6b_ArT2U8=0ySLUZEwvgM2rZ-f1F8ap3+fg@mail.gmail.com>

On Thu, Dec 1, 2022 at 8:57 PM Lorenzo Bianconi <lorenzo at kernel.org> wrote:
>
> In order to fix the following sleep while atomic bug always alloc pages
> with GFP_ATOMIC in mtk_wed_wo_queue_refill since page_frag_alloc runs in
> spin_lock critical section.
>
> [    9.049719] Hardware name: MediaTek MT7986a RFB (DT)
> [    9.054665] Call trace:
> [    9.057096]  dump_backtrace+0x0/0x154
> [    9.060751]  show_stack+0x14/0x1c
> [    9.064052]  dump_stack_lvl+0x64/0x7c
> [    9.067702]  dump_stack+0x14/0x2c
> [    9.071001]  ___might_sleep+0xec/0x120
> [    9.074736]  __might_sleep+0x4c/0x9c
> [    9.078296]  __alloc_pages+0x184/0x2e4
> [    9.082030]  page_frag_alloc_align+0x98/0x1ac
> [    9.086369]  mtk_wed_wo_queue_refill+0x134/0x234
> [    9.090974]  mtk_wed_wo_init+0x174/0x2c0
> [    9.094881]  mtk_wed_attach+0x7c8/0x7e0
> [    9.098701]  mt7915_mmio_wed_init+0x1f0/0x3a0 [mt7915e]
> [    9.103940]  mt7915_pci_probe+0xec/0x3bc [mt7915e]
> [    9.108727]  pci_device_probe+0xac/0x13c
> [    9.112638]  really_probe.part.0+0x98/0x2f4
> [    9.116807]  __driver_probe_device+0x94/0x13c
> [    9.121147]  driver_probe_device+0x40/0x114
> [    9.125314]  __driver_attach+0x7c/0x180
> [    9.129133]  bus_for_each_dev+0x5c/0x90
> [    9.132953]  driver_attach+0x20/0x2c
> [    9.136513]  bus_add_driver+0x104/0x1fc
> [    9.140333]  driver_register+0x74/0x120
> [    9.144153]  __pci_register_driver+0x40/0x50
> [    9.148407]  mt7915_init+0x5c/0x1000 [mt7915e]
> [    9.152848]  do_one_initcall+0x40/0x25c
> [    9.156669]  do_init_module+0x44/0x230
> [    9.160403]  load_module+0x1f30/0x2750
> [    9.164135]  __do_sys_init_module+0x150/0x200
> [    9.168475]  __arm64_sys_init_module+0x18/0x20
> [    9.172901]  invoke_syscall.constprop.0+0x4c/0xe0
> [    9.177589]  do_el0_svc+0x48/0xe0
> [    9.180889]  el0_svc+0x14/0x50
> [    9.183929]  el0t_64_sync_handler+0x9c/0x120
> [    9.188183]  el0t_64_sync+0x158/0x15c
>
> Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
> Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> ---

Looks OK to me.
Reviewed-by: Pavan Chebbi <pavan.chebbi at broadcom.com>

>  drivers/net/ethernet/mediatek/mtk_wed_wo.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/ethernet/mediatek/mtk_wed_wo.c b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
> index 4754b6db009e..a219da85f4db 100644
> --- a/drivers/net/ethernet/mediatek/mtk_wed_wo.c
> +++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
> @@ -133,17 +133,18 @@ mtk_wed_wo_dequeue(struct mtk_wed_wo *wo, struct mtk_wed_wo_queue *q, u32 *len,
>
>  static int
>  mtk_wed_wo_queue_refill(struct mtk_wed_wo *wo, struct mtk_wed_wo_queue *q,
> -                       gfp_t gfp, bool rx)
> +                       bool rx)
>  {
>         enum dma_data_direction dir = rx ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
>         int n_buf = 0;
>
>         spin_lock_bh(&q->lock);
>         while (q->queued < q->n_desc) {
> -               void *buf = page_frag_alloc(&q->cache, q->buf_size, gfp);
>                 struct mtk_wed_wo_queue_entry *entry;
>                 dma_addr_t addr;
> +               void *buf;
>
> +               buf = page_frag_alloc(&q->cache, q->buf_size, GFP_ATOMIC);
>                 if (!buf)
>                         break;
>
> @@ -215,7 +216,7 @@ mtk_wed_wo_rx_run_queue(struct mtk_wed_wo *wo, struct mtk_wed_wo_queue *q)
>                         mtk_wed_mcu_rx_unsolicited_event(wo, skb);
>         }
>
> -       if (mtk_wed_wo_queue_refill(wo, q, GFP_ATOMIC, true)) {
> +       if (mtk_wed_wo_queue_refill(wo, q, true)) {
>                 u32 index = (q->head - 1) % q->n_desc;
>
>                 mtk_wed_wo_queue_kick(wo, q, index);
> @@ -432,7 +433,7 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
>         if (ret)
>                 goto error;
>
> -       mtk_wed_wo_queue_refill(wo, &wo->q_tx, GFP_KERNEL, false);
> +       mtk_wed_wo_queue_refill(wo, &wo->q_tx, false);
>         mtk_wed_wo_queue_reset(wo, &wo->q_tx);
>
>         regs.desc_base = MTK_WED_WO_CCIF_DUMMY5;
> @@ -446,7 +447,7 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
>         if (ret)
>                 goto error;
>
> -       mtk_wed_wo_queue_refill(wo, &wo->q_rx, GFP_KERNEL, true);
> +       mtk_wed_wo_queue_refill(wo, &wo->q_rx, true);
>         mtk_wed_wo_queue_reset(wo, &wo->q_rx);
>
>         /* rx queue irqmask */
> --
> 2.38.1
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4209 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221202/5049eaf1/attachment-0001.p7s>

From peter.wang at mediatek.com  Thu Dec  1 23:35:32 2022
From: peter.wang at mediatek.com (peter.wang at mediatek.com)
Date: Fri, 2 Dec 2022 15:35:32 +0800
Subject: [PATCH v3] ufs: core: wlun suspend SSU/enter hibern8 fail recovery
Message-ID: <20221202073532.7884-1-peter.wang@mediatek.com>

From: Peter Wang <peter.wang at mediatek.com>

When SSU/enter hibern8 fail in wlun suspend flow, trigger error
handler and return busy to break the suspend.
If not, wlun runtime pm status become error and the consumer will
stuck in runtime suspend status.

Signed-off-by: Peter Wang <peter.wang at mediatek.com>
---
 drivers/ufs/core/ufshcd.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index b1f59a5fe632..a0dbf2c410b1 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -9049,6 +9049,19 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 
 		if (!hba->dev_info.b_rpm_dev_flush_capable) {
 			ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
+			if (ret && (pm_op != UFS_SHUTDOWN_PM)) {
+				/*
+				 * If return err in suspend flow, IO will hang.
+				 * Trigger error handler and break suspend for
+				 * error recovery.
+				 */
+				spin_lock_irq(hba->host->host_lock);
+				hba->force_reset = true;
+				ufshcd_schedule_eh_work(hba);
+				spin_unlock_irq(hba->host->host_lock);
+
+				ret = -EBUSY;
+			}
 			if (ret)
 				goto enable_scaling;
 		}
@@ -9060,6 +9073,19 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	 */
 	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
 	ret = ufshcd_link_state_transition(hba, req_link_state, check_for_bkops);
+	if ((ret) && (pm_op != UFS_SHUTDOWN_PM)) {
+		/*
+		 * If return err in suspend flow, IO will hang.
+		 * Trigger error handler and break suspend for
+		 * error recovery.
+		 */
+		spin_lock_irq(hba->host->host_lock);
+		hba->force_reset = true;
+		ufshcd_schedule_eh_work(hba);
+		spin_unlock_irq(hba->host->host_lock);
+
+		ret = -EBUSY;
+	}
 	if (ret)
 		goto set_dev_active;
 
-- 
2.18.0



From yuancan at huawei.com  Fri Dec  2 00:30:29 2022
From: yuancan at huawei.com (Yuan Can)
Date: Fri, 2 Dec 2022 08:30:29 +0000
Subject: [PATCH] net: ethernet: mtk_wed: Fix missing of_node_put() in mtk_wed_wo_hardware_init()
Message-ID: <20221202083029.87834-1-yuancan@huawei.com>

The np needs to be released through of_node_put() in the error handling
path of mtk_wed_wo_hardware_init().

Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
Signed-off-by: Yuan Can <yuancan at huawei.com>
---
 drivers/net/ethernet/mediatek/mtk_wed_wo.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_wed_wo.c b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
index 4754b6db009e..d61bd0b11331 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed_wo.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
@@ -407,8 +407,10 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
 		return -ENODEV;
 
 	wo->mmio.regs = syscon_regmap_lookup_by_phandle(np, NULL);
-	if (IS_ERR_OR_NULL(wo->mmio.regs))
-		return PTR_ERR(wo->mmio.regs);
+	if (IS_ERR_OR_NULL(wo->mmio.regs)) {
+		ret = PTR_ERR(wo->mmio.regs);
+		goto error_put;
+	}
 
 	wo->mmio.irq = irq_of_parse_and_map(np, 0);
 	wo->mmio.irq_mask = MTK_WED_WO_ALL_INT_MASK;
@@ -456,7 +458,8 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
 
 error:
 	devm_free_irq(wo->hw->dev, wo->mmio.irq, wo);
-
+error_put:
+	of_node_put(np);
 	return ret;
 }
 
-- 
2.17.1



From Allen-KH.Cheng at mediatek.com  Fri Dec  2 00:13:21 2022
From: Allen-KH.Cheng at mediatek.com (=?utf-8?B?QWxsZW4tS0ggQ2hlbmcgKOeoi+WGoOWLsyk=?=)
Date: Fri, 2 Dec 2022 08:13:21 +0000
Subject: [PATCH] arm64: dts: mt8192: Add adsp power domain controller
In-Reply-To: <8c1dc14f-e0b1-b5ce-aeef-68c20da5dc63@linaro.org>
References: <20221201073328.1559-1-allen-kh.cheng@mediatek.com>
	 <8c1dc14f-e0b1-b5ce-aeef-68c20da5dc63@linaro.org>
Message-ID: <df3f29c2cc29ffe3f251819ca7e16afd531e2d9a.camel@mediatek.com>

On Thu, 2022-12-01 at 11:22 +0100, Krzysztof Kozlowski wrote:
> On 01/12/2022 08:33, Allen-KH Cheng wrote:
> > Add adsp power domain controller node for mt8192 SoC.
> > 
> > Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> > ---
> > Ref: 
> > https://lore.kernel.org/all/2ec80bd8-dfef-d2e6-eb41-6e6088043e33 at collabora.com/
> >     [Allen-KH Cheng <allen-kh.cheng at mediatek.com>]
> > ---
> > ---
> >  arch/arm64/boot/dts/mediatek/mt8192.dtsi | 8 ++++++++
> >  include/dt-bindings/power/mt8192-power.h | 1 +
> 
> Bindings are separate patches.
> 
> Best regards,
> Krzysztof
> 

Noted, will fix in next version.

Thanks,
Allen

From hverkuil at xs4all.nl  Fri Dec  2 00:42:59 2022
From: hverkuil at xs4all.nl (Hans Verkuil)
Date: Fri, 2 Dec 2022 09:42:59 +0100
Subject: [PATCH v2] media: platform: mtk-mdp3: Fix return value check in
 mdp_probe()
In-Reply-To: <20221201023505.48015-1-linqiheng@huawei.com>
References: <20221201023505.48015-1-linqiheng@huawei.com>
Message-ID: <4f4b9ff6-73e3-a8b3-1d1c-e1d0a0b9b38c@xs4all.nl>

Hi Qiheng,

Can you rebase on top of the latest staging tree? (https://git.linuxtv.org/media_stage.git/)

This patch no longer applies.

Thanks!

	Hans

On 01/12/2022 03:35, Qiheng Lin wrote:
> In case of error, the function mtk_mutex_get()
> returns ERR_PTR() and never returns NULL. The NULL test in the
> return value check should be replaced with IS_ERR().
> And also fix the err_return case.
> 
> Fixes: 61890ccaefaf ("media: platform: mtk-mdp3: add MediaTek MDP3 driver")
> Signed-off-by: Qiheng Lin <linqiheng at huawei.com>
> ---
> 
> v2:
>  - Add fix the err_return case.
> 
>  drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
> index c413e59d4286..48f3e32fe54e 100644
> --- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
> +++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
> @@ -207,8 +207,8 @@ static int mdp_probe(struct platform_device *pdev)
>  	}
>  	for (i = 0; i < MDP_PIPE_MAX; i++) {
>  		mdp->mdp_mutex[i] = mtk_mutex_get(&mm_pdev->dev);
> -		if (!mdp->mdp_mutex[i]) {
> -			ret = -ENODEV;
> +		if (IS_ERR(mdp->mdp_mutex[i])) {
> +			ret = PTR_ERR(mdp->mdp_mutex[i]);
>  			goto err_return;
>  		}
>  	}
> @@ -288,9 +288,10 @@ static int mdp_probe(struct platform_device *pdev)
>  err_deinit_comp:
>  	mdp_comp_destroy(mdp);
>  err_return:
> -	for (i = 0; i < MDP_PIPE_MAX; i++)
> -		if (mdp)
> -			mtk_mutex_put(mdp->mdp_mutex[i]);
> +	if (mdp)
> +		for (i = 0; i < MDP_PIPE_MAX; i++)
> +			if (!IS_ERR_OR_NULL(mdp->mdp_mutex[i]))
> +				mtk_mutex_put(mdp->mdp_mutex[i]);
>  	kfree(mdp);
>  	dev_dbg(dev, "Errno %d\n", ret);
>  	return ret;



From angelogioacchino.delregno at collabora.com  Fri Dec  2 00:57:26 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 2 Dec 2022 09:57:26 +0100
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <eb142a22-b35e-ec3f-ee0a-9e3e7b24cea6@gmail.com>
 <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
 <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
Message-ID: <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>

Il 02/12/22 06:27, Viresh Kumar ha scritto:
> On 01-12-22, 16:39, Thorsten Leemhuis wrote:
>> Thx for clarifying. And I noticed I made a mistake: I should have
>> directed my earlier question wrt to any progress here more into the
>> direction of Jia-Wei Chang (who authored 6a17b3876b) and Viresh Kumar
>> (who committed it).
> 
> I was waiting for the platform maintainers to come up with a fix. I
> have sent a patch now to revert this, in-reply-to this thread.
> 
> Please confirm this is working fine. Thanks.
> 

Can you guys try this patch that I've sent a while ago?

https://lore.kernel.org/lkml/20220909093724.40078-1-angelogioacchino.delregno at collabora.com/T/#u

There were comments on it, but if that solves your issue I can push a v2
to solve what was reported.

Regards,
Angelo


From angelogioacchino.delregno at collabora.com  Fri Dec  2 01:19:58 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 2 Dec 2022 10:19:58 +0100
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <eb142a22-b35e-ec3f-ee0a-9e3e7b24cea6@gmail.com>
 <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
 <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
 <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
Message-ID: <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>

Il 02/12/22 09:57, AngeloGioacchino Del Regno ha scritto:
> Il 02/12/22 06:27, Viresh Kumar ha scritto:
>> On 01-12-22, 16:39, Thorsten Leemhuis wrote:
>>> Thx for clarifying. And I noticed I made a mistake: I should have
>>> directed my earlier question wrt to any progress here more into the
>>> direction of Jia-Wei Chang (who authored 6a17b3876b) and Viresh Kumar
>>> (who committed it).
>>
>> I was waiting for the platform maintainers to come up with a fix. I
>> have sent a patch now to revert this, in-reply-to this thread.
>>
>> Please confirm this is working fine. Thanks.
>>
> 
> Can you guys try this patch that I've sent a while ago?
> 
> https://lore.kernel.org/lkml/20220909093724.40078-1-angelogioacchino.delregno at collabora.com/T/#u
> 
> There were comments on it, but if that solves your issue I can push a v2
> to solve what was reported.
> 
> Regards,
> Angelo

Wait, sorry, I've re-read the stacktrace and that won't help at all.
MediaTek, can you please look at this issue?

Reverting the proposed commit will make MT8183 unstable.




From angelogioacchino.delregno at collabora.com  Fri Dec  2 01:52:27 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri,  2 Dec 2022 10:52:27 +0100
Subject: [PATCH] cpufreq: mediatek: Raise proc and sram max voltage for MT7622/7623
Message-ID: <20221202095227.167492-1-angelogioacchino.delregno@collabora.com>

During the addition of SRAM voltage tracking for CCI scaling, this
driver got some voltage limits set for the vtrack algorithm: these
were moved to platform data first, then enforced in a later commit
6a17b3876bc8 ("cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()")
using these as max values for the regulator_set_voltage() calls.

In this case, the vsram/vproc constraints for MT7622 and MT7623
were supposed to be the same as MT2701 (and a number of other SoCs),
but that turned out to be a mistake because the aforementioned two
SoCs' maximum voltage for both VPROC and VPROC_SRAM is 1.36V.

Fix that by adding new platform data for MT7622/7623 declaring the
right {proc,sram}_max_volt parameter.

Fixes: ead858bd128d ("cpufreq: mediatek: Move voltage limits to platform data")
Fixes: 6a17b3876bc8 ("cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()")
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/cpufreq/mediatek-cpufreq.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/cpufreq/mediatek-cpufreq.c b/drivers/cpufreq/mediatek-cpufreq.c
index 7f2680bc9a0f..f9a9f08c75c4 100644
--- a/drivers/cpufreq/mediatek-cpufreq.c
+++ b/drivers/cpufreq/mediatek-cpufreq.c
@@ -695,6 +695,15 @@ static const struct mtk_cpufreq_platform_data mt2701_platform_data = {
 	.ccifreq_supported = false,
 };
 
+static const struct mtk_cpufreq_platform_data mt7622_platform_data = {
+	.min_volt_shift = 100000,
+	.max_volt_shift = 200000,
+	.proc_max_volt = 1360000,
+	.sram_min_volt = 0,
+	.sram_max_volt = 1360000,
+	.ccifreq_supported = false,
+};
+
 static const struct mtk_cpufreq_platform_data mt8183_platform_data = {
 	.min_volt_shift = 100000,
 	.max_volt_shift = 200000,
@@ -717,8 +726,8 @@ static const struct mtk_cpufreq_platform_data mt8186_platform_data = {
 static const struct of_device_id mtk_cpufreq_machines[] __initconst = {
 	{ .compatible = "mediatek,mt2701", .data = &mt2701_platform_data },
 	{ .compatible = "mediatek,mt2712", .data = &mt2701_platform_data },
-	{ .compatible = "mediatek,mt7622", .data = &mt2701_platform_data },
-	{ .compatible = "mediatek,mt7623", .data = &mt2701_platform_data },
+	{ .compatible = "mediatek,mt7622", .data = &mt7622_platform_data },
+	{ .compatible = "mediatek,mt7623", .data = &mt7622_platform_data },
 	{ .compatible = "mediatek,mt8167", .data = &mt2701_platform_data },
 	{ .compatible = "mediatek,mt817x", .data = &mt2701_platform_data },
 	{ .compatible = "mediatek,mt8173", .data = &mt2701_platform_data },
-- 
2.38.1



From angelogioacchino.delregno at collabora.com  Fri Dec  2 02:02:34 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 2 Dec 2022 11:02:34 +0100
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <b1822bbc3775730c4cedf9652323c7d72e663e4b.camel@mediatek.com>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <eb142a22-b35e-ec3f-ee0a-9e3e7b24cea6@gmail.com>
 <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
 <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
 <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
 <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>
 <b1822bbc3775730c4cedf9652323c7d72e663e4b.camel@mediatek.com>
Message-ID: <8be3e050-f32a-6761-8ebd-49c38dfcf9eb@collabora.com>

Il 02/12/22 10:43, Allen-KH Cheng (???) ha scritto:
> Hi Angelo,
> 
> Jia-wei is working on this issue.
> 
> We will update progress ASAP.
> 

I think I've found something: the MT7622/7623 voltage constraints
set in mediatek-cpufreq's platform data seem to be wrong.

I've sent a commit to fix those [1] and that should solve the issue
that was seen on MT7622, but the code in the voltage tracking algorithm
is unsafe: this crash should be happening because we may be calling
regulator_set_voltage() with max_uV < min_uV --- and this is not legal.

That's happening due to the OPP tables in devicetree asking for a voltage
that is higher than the {proc,sram}_max_volt declared by the platform data
in the mediatek-cpufreq driver: the solution would be to either check the
validity of the constraints everytime se call regulator_set_voltage there,
which wouldn't be optimal IMO, or walk the OPP table at mediatek-cpufreq
probe time (or init time) to either:

1. Print a big warning in kmsg and always ignore all of the OPP entries
    that request a voltage that's higher than the maximum that we declared; or
2. Fail probe/init with an error explicitly saying that the OPP entries
    are declaring an out of range voltage for sram/proc.

Anyway, thanks for the response, hope that Jia-wei confirms, or denies
my findings and makes this driver more robust ASAP.

Thank you!
Angelo

[1]: 
https://lore.kernel.org/lkml/20221202095227.167492-1-angelogioacchino.delregno at collabora.com/

> Thanks,
> Allen
> 
> On Fri, 2022-12-02 at 10:19 +0100, AngeloGioacchino Del Regno wrote:
>> Il 02/12/22 09:57, AngeloGioacchino Del Regno ha scritto:
>>> Il 02/12/22 06:27, Viresh Kumar ha scritto:
>>>> On 01-12-22, 16:39, Thorsten Leemhuis wrote:
>>>>> Thx for clarifying. And I noticed I made a mistake: I should
>>>>> have
>>>>> directed my earlier question wrt to any progress here more into
>>>>> the
>>>>> direction of Jia-Wei Chang (who authored 6a17b3876b) and Viresh
>>>>> Kumar
>>>>> (who committed it).
>>>>
>>>> I was waiting for the platform maintainers to come up with a fix.
>>>> I
>>>> have sent a patch now to revert this, in-reply-to this thread.
>>>>
>>>> Please confirm this is working fine. Thanks.
>>>>
>>>
>>> Can you guys try this patch that I've sent a while ago?
>>>
>>>
> https://lore.kernel.org/lkml/20220909093724.40078-1-angelogioacchino.delregno at collabora.com/T/#u
>>>
>>> There were comments on it, but if that solves your issue I can push
>>> a v2
>>> to solve what was reported.
>>>
>>> Regards,
>>> Angelo
>>
>> Wait, sorry, I've re-read the stacktrace and that won't help at all.
>> MediaTek, can you please look at this issue?
>>
>> Reverting the proposed commit will make MT8183 unstable.
>>
>>



From linqiheng at huawei.com  Fri Dec  2 02:18:36 2022
From: linqiheng at huawei.com (Qiheng Lin)
Date: Fri, 2 Dec 2022 18:18:36 +0800
Subject: [PATCH v3] media: platform: mtk-mdp3: Fix return value check in mdp_probe()
Message-ID: <20221202101836.19858-1-linqiheng@huawei.com>

In case of error, the function mtk_mutex_get()
returns ERR_PTR() and never returns NULL. The NULL test in the
return value check should be replaced with IS_ERR().
And also fix the err_free_mutex case.

Fixes: 61890ccaefaf ("media: platform: mtk-mdp3: add MediaTek MDP3 driver")
Signed-off-by: Qiheng Lin <linqiheng at huawei.com>
---

v3:
 - rebase on top of media_stage tree.
v2:
 - Add fix the err_return case.

 drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
index 2d1f6ae9f080..97edcd9d1c81 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
@@ -207,8 +207,8 @@ static int mdp_probe(struct platform_device *pdev)
 	}
 	for (i = 0; i < MDP_PIPE_MAX; i++) {
 		mdp->mdp_mutex[i] = mtk_mutex_get(&mm_pdev->dev);
-		if (!mdp->mdp_mutex[i]) {
-			ret = -ENODEV;
+		if (IS_ERR(mdp->mdp_mutex[i])) {
+			ret = PTR_ERR(mdp->mdp_mutex[i]);
 			goto err_free_mutex;
 		}
 	}
@@ -289,7 +289,8 @@ static int mdp_probe(struct platform_device *pdev)
 	mdp_comp_destroy(mdp);
 err_free_mutex:
 	for (i = 0; i < MDP_PIPE_MAX; i++)
-		mtk_mutex_put(mdp->mdp_mutex[i]);
+		if (!IS_ERR_OR_NULL(mdp->mdp_mutex[i]))
+			mtk_mutex_put(mdp->mdp_mutex[i]);
 err_destroy_device:
 	kfree(mdp);
 err_return:
-- 
2.32.0



From angelogioacchino.delregno at collabora.com  Fri Dec  2 02:04:56 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 2 Dec 2022 11:04:56 +0100
Subject: [PATCH] cpufreq: mediatek: Raise proc and sram max voltage for
 MT7622/7623
In-Reply-To: <20221202095227.167492-1-angelogioacchino.delregno@collabora.com>
References: <20221202095227.167492-1-angelogioacchino.delregno@collabora.com>
Message-ID: <64ac15de-3324-6d48-5199-587f01b565e0@collabora.com>

Il 02/12/22 10:52, AngeloGioacchino Del Regno ha scritto:
> During the addition of SRAM voltage tracking for CCI scaling, this
> driver got some voltage limits set for the vtrack algorithm: these
> were moved to platform data first, then enforced in a later commit
> 6a17b3876bc8 ("cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()")
> using these as max values for the regulator_set_voltage() calls.
> 
> In this case, the vsram/vproc constraints for MT7622 and MT7623
> were supposed to be the same as MT2701 (and a number of other SoCs),
> but that turned out to be a mistake because the aforementioned two
> SoCs' maximum voltage for both VPROC and VPROC_SRAM is 1.36V.
> 
> Fix that by adding new platform data for MT7622/7623 declaring the
> right {proc,sram}_max_volt parameter.
> 
> Fixes: ead858bd128d ("cpufreq: mediatek: Move voltage limits to platform data")
> Fixes: 6a17b3876bc8 ("cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()")
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Hello Vincent,
in regard to the regression that you've (not so) recently reported, can you please
give this commit a try and check if this helps resolving your issue?

Many thanks,
Angelo

> ---
>   drivers/cpufreq/mediatek-cpufreq.c | 13 +++++++++++--
>   1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/cpufreq/mediatek-cpufreq.c b/drivers/cpufreq/mediatek-cpufreq.c
> index 7f2680bc9a0f..f9a9f08c75c4 100644
> --- a/drivers/cpufreq/mediatek-cpufreq.c
> +++ b/drivers/cpufreq/mediatek-cpufreq.c
> @@ -695,6 +695,15 @@ static const struct mtk_cpufreq_platform_data mt2701_platform_data = {
>   	.ccifreq_supported = false,
>   };
>   
> +static const struct mtk_cpufreq_platform_data mt7622_platform_data = {
> +	.min_volt_shift = 100000,
> +	.max_volt_shift = 200000,
> +	.proc_max_volt = 1360000,
> +	.sram_min_volt = 0,
> +	.sram_max_volt = 1360000,
> +	.ccifreq_supported = false,
> +};
> +
>   static const struct mtk_cpufreq_platform_data mt8183_platform_data = {
>   	.min_volt_shift = 100000,
>   	.max_volt_shift = 200000,
> @@ -717,8 +726,8 @@ static const struct mtk_cpufreq_platform_data mt8186_platform_data = {
>   static const struct of_device_id mtk_cpufreq_machines[] __initconst = {
>   	{ .compatible = "mediatek,mt2701", .data = &mt2701_platform_data },
>   	{ .compatible = "mediatek,mt2712", .data = &mt2701_platform_data },
> -	{ .compatible = "mediatek,mt7622", .data = &mt2701_platform_data },
> -	{ .compatible = "mediatek,mt7623", .data = &mt2701_platform_data },
> +	{ .compatible = "mediatek,mt7622", .data = &mt7622_platform_data },
> +	{ .compatible = "mediatek,mt7623", .data = &mt7622_platform_data },
>   	{ .compatible = "mediatek,mt8167", .data = &mt2701_platform_data },
>   	{ .compatible = "mediatek,mt817x", .data = &mt2701_platform_data },
>   	{ .compatible = "mediatek,mt8173", .data = &mt2701_platform_data },



From Allen-KH.Cheng at mediatek.com  Fri Dec  2 01:43:24 2022
From: Allen-KH.Cheng at mediatek.com (=?utf-8?B?QWxsZW4tS0ggQ2hlbmcgKOeoi+WGoOWLsyk=?=)
Date: Fri, 2 Dec 2022 09:43:24 +0000
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
	 <eb142a22-b35e-ec3f-ee0a-9e3e7b24cea6@gmail.com>
	 <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
	 <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
	 <Y4jHvomTrU8guBox@makrotopia.org>
	 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
	 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
	 <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
	 <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>
Message-ID: <b1822bbc3775730c4cedf9652323c7d72e663e4b.camel@mediatek.com>

Hi Angelo,

Jia-wei is working on this issue.

We will update progress ASAP.

Thanks,
Allen

On Fri, 2022-12-02 at 10:19 +0100, AngeloGioacchino Del Regno wrote:
> Il 02/12/22 09:57, AngeloGioacchino Del Regno ha scritto:
> > Il 02/12/22 06:27, Viresh Kumar ha scritto:
> > > On 01-12-22, 16:39, Thorsten Leemhuis wrote:
> > > > Thx for clarifying. And I noticed I made a mistake: I should
> > > > have
> > > > directed my earlier question wrt to any progress here more into
> > > > the
> > > > direction of Jia-Wei Chang (who authored 6a17b3876b) and Viresh
> > > > Kumar
> > > > (who committed it).
> > > 
> > > I was waiting for the platform maintainers to come up with a fix.
> > > I
> > > have sent a patch now to revert this, in-reply-to this thread.
> > > 
> > > Please confirm this is working fine. Thanks.
> > > 
> > 
> > Can you guys try this patch that I've sent a while ago?
> > 
> > 
https://lore.kernel.org/lkml/20220909093724.40078-1-angelogioacchino.delregno at collabora.com/T/#u
> > 
> > There were comments on it, but if that solves your issue I can push
> > a v2
> > to solve what was reported.
> > 
> > Regards,
> > Angelo
> 
> Wait, sorry, I've re-read the stacktrace and that won't help at all.
> MediaTek, can you please look at this issue?
> 
> Reverting the proposed commit will make MT8183 unstable.
> 
> 

From regressions at leemhuis.info  Fri Dec  2 02:41:16 2022
From: regressions at leemhuis.info (Thorsten Leemhuis)
Date: Fri, 2 Dec 2022 11:41:16 +0100
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <8be3e050-f32a-6761-8ebd-49c38dfcf9eb@collabora.com>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <eb142a22-b35e-ec3f-ee0a-9e3e7b24cea6@gmail.com>
 <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
 <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
 <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
 <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>
 <b1822bbc3775730c4cedf9652323c7d72e663e4b.camel@mediatek.com>
 <8be3e050-f32a-6761-8ebd-49c38dfcf9eb@collabora.com>
Message-ID: <c186d104-43e0-ca10-3ce2-c2f922acd8bf@leemhuis.info>

On 02.12.22 11:02, AngeloGioacchino Del Regno wrote:
> Il 02/12/22 10:43, Allen-KH Cheng (???) ha scritto:
>>
>> Jia-wei is working on this issue.
>> We will update progress ASAP.
>>
> 
> I think I've found something: the MT7622/7623 voltage constraints
> set in mediatek-cpufreq's platform data seem to be wrong.

Thx for looking into this.
> I've sent a commit to fix those [1]

Quick question: is that relative to apply at this point of the 6.1 devel
cycle? Or would it be better to revert the culprit (already introduced
in 5.19) for now and reapply it together with that fix for 6.2 (and then
backport to 6.1 stable later)?

> and that should solve the issue
> that was seen on MT7622, but the code in the voltage tracking algorithm
> is unsafe: this crash should be happening because we may be calling
> regulator_set_voltage() with max_uV < min_uV --- and this is not legal.

[...]

> [1]:
> https://lore.kernel.org/lkml/20221202095227.167492-1-angelogioacchino.delregno at collabora.com/

Side note, that patch afaics should have:

Reported-by: Nick <vincent at systemli.org>
Link:
https://lore.kernel.org/r/930778a1-5e8b-6df6-3276-42dcdadaf682 at systemli.org/

To explain: Linus[1] and others considered proper link tags important in
cases like this, as they allow anyone to look into the backstory of a
commit weeks or years later. That's nothing new, the documentation[2]
for some time says to place tags in cases like this. I care personally
(and made it a bit more explicit in the docs a while ago), because these
tags make my regression tracking efforts a whole lot easier, as they
allow my tracking bot 'regzbot' to automatically connect reports with
patches posted or committed to fix tracked regressions.

Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)

[1] for details, see:
https://lore.kernel.org/all/CAHk-=wjMmSZzMJ3Xnskdg4+GGz=5p5p+GSYyFBTh0f-DgvdBWg at mail.gmail.com/
https://lore.kernel.org/all/CAHk-=wgs38ZrfPvy=nOwVkVzjpM3VFU1zobP37Fwd_h9iAD5JQ at mail.gmail.com/
https://lore.kernel.org/all/CAHk-=wjxzafG-=J8oT30s7upn4RhBs6TX-uVFZ5rME+L5_DoJA at mail.gmail.com/

[2] see Documentation/process/submitting-patches.rst
(http://docs.kernel.org/process/submitting-patches.html) and
Documentation/process/5.Posting.rst
(https://docs.kernel.org/process/5.Posting.html)



>> Thanks,
>> Allen
>>
>> On Fri, 2022-12-02 at 10:19 +0100, AngeloGioacchino Del Regno wrote:
>>> Il 02/12/22 09:57, AngeloGioacchino Del Regno ha scritto:
>>>> Il 02/12/22 06:27, Viresh Kumar ha scritto:
>>>>> On 01-12-22, 16:39, Thorsten Leemhuis wrote:
>>>>>> Thx for clarifying. And I noticed I made a mistake: I should
>>>>>> have
>>>>>> directed my earlier question wrt to any progress here more into
>>>>>> the
>>>>>> direction of Jia-Wei Chang (who authored 6a17b3876b) and Viresh
>>>>>> Kumar
>>>>>> (who committed it).
>>>>>
>>>>> I was waiting for the platform maintainers to come up with a fix.
>>>>> I
>>>>> have sent a patch now to revert this, in-reply-to this thread.
>>>>>
>>>>> Please confirm this is working fine. Thanks.
>>>>>
>>>>
>>>> Can you guys try this patch that I've sent a while ago?
>>>>
>>>>
>> https://lore.kernel.org/lkml/20220909093724.40078-1-angelogioacchino.delregno at collabora.com/T/#u
>>>>
>>>> There were comments on it, but if that solves your issue I can push
>>>> a v2
>>>> to solve what was reported.
>>>>
>>>> Regards,
>>>> Angelo
>>>
>>> Wait, sorry, I've re-read the stacktrace and that won't help at all.
>>> MediaTek, can you please look at this issue?
>>>
>>> Reverting the proposed commit will make MT8183 unstable.
>>>
>>>

#regzbot monitor:
https://lore.kernel.org/r/930778a1-5e8b-6df6-3276-42dcdadaf682 at systemli.org/


From viresh.kumar at linaro.org  Fri Dec  2 02:47:31 2022
From: viresh.kumar at linaro.org (Viresh Kumar)
Date: Fri, 2 Dec 2022 16:17:31 +0530
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <c186d104-43e0-ca10-3ce2-c2f922acd8bf@leemhuis.info>
References: <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
 <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
 <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
 <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>
 <b1822bbc3775730c4cedf9652323c7d72e663e4b.camel@mediatek.com>
 <8be3e050-f32a-6761-8ebd-49c38dfcf9eb@collabora.com>
 <c186d104-43e0-ca10-3ce2-c2f922acd8bf@leemhuis.info>
Message-ID: <20221202104731.63mfshxwu3mqlbli@vireshk-i7>

On 02-12-22, 11:41, Thorsten Leemhuis wrote:
> Quick question: is that relative to apply at this point of the 6.1 devel
> cycle? Or would it be better to revert the culprit (already introduced
> in 5.19) for now and reapply it together with that fix for 6.2 (and then
> backport to 6.1 stable later)?

I am not comfortable applying the revert to 6.1 kernel right now, it
is too late and the revert is big enough. Also it isn't something that
came in 6.1 cycle itself, so it isn't ideal to merge it as a fix this
late.

I would like to apply the fix, if we are able to settle on one, for
6.2 and let it get backported via stable to all the affected kernels.

-- 
viresh


From regressions at leemhuis.info  Fri Dec  2 02:51:11 2022
From: regressions at leemhuis.info (Thorsten Leemhuis)
Date: Fri, 2 Dec 2022 11:51:11 +0100
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <20221202104731.63mfshxwu3mqlbli@vireshk-i7>
References: <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
 <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
 <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
 <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>
 <b1822bbc3775730c4cedf9652323c7d72e663e4b.camel@mediatek.com>
 <8be3e050-f32a-6761-8ebd-49c38dfcf9eb@collabora.com>
 <c186d104-43e0-ca10-3ce2-c2f922acd8bf@leemhuis.info>
 <20221202104731.63mfshxwu3mqlbli@vireshk-i7>
Message-ID: <13e87195-69b0-da11-b039-441dab3ef4c8@leemhuis.info>

On 02.12.22 11:47, Viresh Kumar wrote:
> On 02-12-22, 11:41, Thorsten Leemhuis wrote:
>> Quick question: is that relative to apply at this point of the 6.1 devel
>> cycle? Or would it be better to revert the culprit (already introduced
>> in 5.19) for now and reapply it together with that fix for 6.2 (and then
>> backport to 6.1 stable later)?
> 
> I am not comfortable applying the revert to 6.1 kernel right now, it
> is too late and the revert is big enough. Also it isn't something that
> came in 6.1 cycle itself, so it isn't ideal to merge it as a fix this
> late.
> 
> I would like to apply the fix, if we are able to settle on one, for
> 6.2 and let it get backported via stable to all the affected kernels.

Okay, thx, fine for me, just was wondering how to best handle this.

Ciao, Thorsten



From angelogioacchino.delregno at collabora.com  Fri Dec  2 03:00:41 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 2 Dec 2022 12:00:41 +0100
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <c186d104-43e0-ca10-3ce2-c2f922acd8bf@leemhuis.info>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <eb142a22-b35e-ec3f-ee0a-9e3e7b24cea6@gmail.com>
 <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
 <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
 <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
 <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>
 <b1822bbc3775730c4cedf9652323c7d72e663e4b.camel@mediatek.com>
 <8be3e050-f32a-6761-8ebd-49c38dfcf9eb@collabora.com>
 <c186d104-43e0-ca10-3ce2-c2f922acd8bf@leemhuis.info>
Message-ID: <37468027-6a27-dcb8-9c14-8f8426ec50d1@collabora.com>

Il 02/12/22 11:41, Thorsten Leemhuis ha scritto:
> On 02.12.22 11:02, AngeloGioacchino Del Regno wrote:
>> Il 02/12/22 10:43, Allen-KH Cheng (???) ha scritto:
>>>
>>> Jia-wei is working on this issue.
>>> We will update progress ASAP.
>>>
>>
>> I think I've found something: the MT7622/7623 voltage constraints
>> set in mediatek-cpufreq's platform data seem to be wrong.
> 
> Thx for looking into this.
>> I've sent a commit to fix those [1]
> 
> Quick question: is that relative to apply at this point of the 6.1 devel
> cycle? Or would it be better to revert the culprit (already introduced
> in 5.19) for now and reapply it together with that fix for 6.2 (and then
> backport to 6.1 stable later)?
> 
>> and that should solve the issue
>> that was seen on MT7622, but the code in the voltage tracking algorithm
>> is unsafe: this crash should be happening because we may be calling
>> regulator_set_voltage() with max_uV < min_uV --- and this is not legal.
> 
> [...]
> 
>> [1]:
>> https://lore.kernel.org/lkml/20221202095227.167492-1-angelogioacchino.delregno at collabora.com/
> 
> Side note, that patch afaics should have:
> 
> Reported-by: Nick <vincent at systemli.org>
> Link:
> https://lore.kernel.org/r/930778a1-5e8b-6df6-3276-42dcdadaf682 at systemli.org/
> 

I'm sorry, forgot about those. I'll wait for feedback on that patch first.

If Viresh can add those while applying the patch, that's fine for me - otherwise
I can send a v2 adding the two suggested missing tags.

Thanks all!
Angelo

> To explain: Linus[1] and others considered proper link tags important in
> cases like this, as they allow anyone to look into the backstory of a
> commit weeks or years later. That's nothing new, the documentation[2]
> for some time says to place tags in cases like this. I care personally
> (and made it a bit more explicit in the docs a while ago), because these
> tags make my regression tracking efforts a whole lot easier, as they
> allow my tracking bot 'regzbot' to automatically connect reports with
> patches posted or committed to fix tracked regressions.
> 
> Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)
> 
> [1] for details, see:
> https://lore.kernel.org/all/CAHk-=wjMmSZzMJ3Xnskdg4+GGz=5p5p+GSYyFBTh0f-DgvdBWg at mail.gmail.com/
> https://lore.kernel.org/all/CAHk-=wgs38ZrfPvy=nOwVkVzjpM3VFU1zobP37Fwd_h9iAD5JQ at mail.gmail.com/
> https://lore.kernel.org/all/CAHk-=wjxzafG-=J8oT30s7upn4RhBs6TX-uVFZ5rME+L5_DoJA at mail.gmail.com/
> 
> [2] see Documentation/process/submitting-patches.rst
> (http://docs.kernel.org/process/submitting-patches.html) and
> Documentation/process/5.Posting.rst
> (https://docs.kernel.org/process/5.Posting.html)
> 
> 
> 
>>> Thanks,
>>> Allen
>>>
>>> On Fri, 2022-12-02 at 10:19 +0100, AngeloGioacchino Del Regno wrote:
>>>> Il 02/12/22 09:57, AngeloGioacchino Del Regno ha scritto:
>>>>> Il 02/12/22 06:27, Viresh Kumar ha scritto:
>>>>>> On 01-12-22, 16:39, Thorsten Leemhuis wrote:
>>>>>>> Thx for clarifying. And I noticed I made a mistake: I should
>>>>>>> have
>>>>>>> directed my earlier question wrt to any progress here more into
>>>>>>> the
>>>>>>> direction of Jia-Wei Chang (who authored 6a17b3876b) and Viresh
>>>>>>> Kumar
>>>>>>> (who committed it).
>>>>>>
>>>>>> I was waiting for the platform maintainers to come up with a fix.
>>>>>> I
>>>>>> have sent a patch now to revert this, in-reply-to this thread.
>>>>>>
>>>>>> Please confirm this is working fine. Thanks.
>>>>>>
>>>>>
>>>>> Can you guys try this patch that I've sent a while ago?
>>>>>
>>>>>
>>> https://lore.kernel.org/lkml/20220909093724.40078-1-angelogioacchino.delregno at collabora.com/T/#u
>>>>>
>>>>> There were comments on it, but if that solves your issue I can push
>>>>> a v2
>>>>> to solve what was reported.
>>>>>
>>>>> Regards,
>>>>> Angelo
>>>>
>>>> Wait, sorry, I've re-read the stacktrace and that won't help at all.
>>>> MediaTek, can you please look at this issue?
>>>>
>>>> Reverting the proposed commit will make MT8183 unstable.
>>>>
>>>>
> 
> #regzbot monitor:
> https://lore.kernel.org/r/930778a1-5e8b-6df6-3276-42dcdadaf682 at systemli.org/

-- 
AngeloGioacchino Del Regno
Software Engineer

Collabora Ltd.
Platinum Building, St John's Innovation Park, Cambridge CB4 0DS, UK
Registered in England & Wales, no. 5513718



From viresh.kumar at linaro.org  Fri Dec  2 03:01:39 2022
From: viresh.kumar at linaro.org (Viresh Kumar)
Date: Fri, 2 Dec 2022 16:31:39 +0530
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <37468027-6a27-dcb8-9c14-8f8426ec50d1@collabora.com>
References: <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
 <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
 <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>
 <b1822bbc3775730c4cedf9652323c7d72e663e4b.camel@mediatek.com>
 <8be3e050-f32a-6761-8ebd-49c38dfcf9eb@collabora.com>
 <c186d104-43e0-ca10-3ce2-c2f922acd8bf@leemhuis.info>
 <37468027-6a27-dcb8-9c14-8f8426ec50d1@collabora.com>
Message-ID: <20221202110139.vmwcmoudakm2nap4@vireshk-i7>

On 02-12-22, 12:00, AngeloGioacchino Del Regno wrote:
> If Viresh can add those while applying the patch, that's fine for me - otherwise
> I can send a v2 adding the two suggested missing tags.

Sure, no problem.

-- 
viresh


From mason.zhang at mediatek.com  Fri Dec  2 02:58:17 2022
From: mason.zhang at mediatek.com (Mason Zhang)
Date: Fri, 2 Dec 2022 18:58:17 +0800
Subject: [PATCH v1 1/1] scsi: ufs: core: fix device management cmd timeout flow
Message-ID: <20221202105817.19801-1-mason.zhang@mediatek.com>

From: Mason Zhang <Mason.Zhang at mediatek.com>

In ufs error handler flow, host will send device management cmd(NOP OUT)
to device for recovery link. If cmd response timeout, and clear doorbell
fail, ufshcd_wait_for_dev_cmd will do nothing and return,
hba->dev_cmd.complete struct not set to null.

In this time, if cmd has been responsed by device, then it will
call complete() in __ufshcd_transfer_req_compl, because of complete
struct is alloced in stack, then the KE will occur.

Fix the following crash:
  ipanic_die+0x24/0x38 [mrdump]
  die+0x344/0x748
  arm64_notify_die+0x44/0x104
  do_debug_exception+0x104/0x1e0
  el1_dbg+0x38/0x54
  el1_sync_handler+0x40/0x88
  el1_sync+0x8c/0x140
  queued_spin_lock_slowpath+0x2e4/0x3c0
  __ufshcd_transfer_req_compl+0x3b0/0x1164
  ufshcd_trc_handler+0x15c/0x308
  ufshcd_host_reset_and_restore+0x54/0x260
  ufshcd_reset_and_restore+0x28c/0x57c
  ufshcd_err_handler+0xeb8/0x1b6c
  process_one_work+0x288/0x964
  worker_thread+0x4bc/0xc7c
  kthread+0x15c/0x264
  ret_from_fork+0x10/0x30

Change-Id: Id17da259894294b61bef41cf7dfb94506e7e0310
Signed-off-by: Mason Zhang <Mason.Zhang at mediatek.com>
---
 drivers/ufs/core/ufshcd.c | 46 ++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 25 deletions(-)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index b1f59a5fe632..2b4934a562a6 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -2979,35 +2979,31 @@ static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba,
 		err = -ETIMEDOUT;
 		dev_dbg(hba->dev, "%s: dev_cmd request timedout, tag %d\n",
 			__func__, lrbp->task_tag);
-		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0) {
+		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0)
 			/* successfully cleared the command, retry if needed */
 			err = -EAGAIN;
+		/*
+		 * Since clearing the command succeeded we also need to
+		 * clear the task tag bit from the outstanding_reqs
+		 * variable.
+		 */
+		spin_lock_irqsave(&hba->outstanding_lock, flags);
+		pending = test_bit(lrbp->task_tag,
+				   &hba->outstanding_reqs);
+		if (pending) {
+			hba->dev_cmd.complete = NULL;
+			__clear_bit(lrbp->task_tag,
+				    &hba->outstanding_reqs);
+		}
+		spin_unlock_irqrestore(&hba->outstanding_lock, flags);
+
+		if (!pending) {
 			/*
-			 * Since clearing the command succeeded we also need to
-			 * clear the task tag bit from the outstanding_reqs
-			 * variable.
+			 * The completion handler ran while we tried to
+			 * clear the command.
 			 */
-			spin_lock_irqsave(&hba->outstanding_lock, flags);
-			pending = test_bit(lrbp->task_tag,
-					   &hba->outstanding_reqs);
-			if (pending) {
-				hba->dev_cmd.complete = NULL;
-				__clear_bit(lrbp->task_tag,
-					    &hba->outstanding_reqs);
-			}
-			spin_unlock_irqrestore(&hba->outstanding_lock, flags);
-
-			if (!pending) {
-				/*
-				 * The completion handler ran while we tried to
-				 * clear the command.
-				 */
-				time_left = 1;
-				goto retry;
-			}
-		} else {
-			dev_err(hba->dev, "%s: failed to clear tag %d\n",
-				__func__, lrbp->task_tag);
+			time_left = 1;
+			goto retry;
 		}
 	}
 
-- 
2.18.0



From angelogioacchino.delregno at collabora.com  Fri Dec  2 03:37:16 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 2 Dec 2022 12:37:16 +0100
Subject: [PATCH v3,1/3] media: dt-bindings: media: mediatek: vcodec: Fix
 clock num not correctly
In-Reply-To: <20221201235729.GA1718283-robh@kernel.org>
References: <20221201121525.30777-1-yunfei.dong@mediatek.com>
 <20221201235729.GA1718283-robh@kernel.org>
Message-ID: <f98a2f4a-737c-fef5-551b-04a92d255d0e@collabora.com>

Il 02/12/22 00:57, Rob Herring ha scritto:
> On Thu, Dec 01, 2022 at 08:15:22PM +0800, Yunfei Dong wrote:
>> From: Yunfei Dong <yunfei.dong at mediatek.corp-partner.google.com>
>>
>> mt8195 and mt8192 have different clock numbers, can't write 'clocks' and
>> 'clock-names' with const value.
>>
>> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
>> ---
>> Reference series:
>> [1]: v5 of this series is presend by Allen-KH Cheng.
>>       message-id: 20221128143832.25584-4-allen-kh.cheng at mediatek.com
>> ---
>>   .../bindings/media/mediatek,vcodec-subdev-decoder.yaml   | 9 +++------
>>   1 file changed, 3 insertions(+), 6 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
>> index 7c5b4a91c59b..09781ef02193 100644
>> --- a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
>> +++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
>> @@ -110,15 +110,12 @@ patternProperties:
>>             Refer to bindings/iommu/mediatek,iommu.yaml.
>>   
>>         clocks:
>> +        minItems: 1
>>           maxItems: 5
>>   
>>         clock-names:
>> -        items:
>> -          - const: sel
>> -          - const: soc-vdec
>> -          - const: soc-lat
>> -          - const: vdec
>> -          - const: top
>> +        minItems: 1
>> +        maxItems: 5
> 
> Names need to be defined. This is a step backwards.
> 

I was thinking the same but wanted to wait for someone else's opinion before.

Yunfei, this would be...

- if:
     properties:
       compatible:
         .... mt8192
   then:
      clock-names:
         .... whatever we have

- if:
    properties... blah mt8195
   then:
     clock-names:
         ..... new ones

...you should know already, but I'm just trying to speed up things here.

Cheers,
Angelo

> Rob
> 
>>   
>>         assigned-clocks:
>>           maxItems: 1
>> -- 
>> 2.18.0
>>
>>




From TingHan.Shen at mediatek.com  Fri Dec  2 03:13:31 2022
From: TingHan.Shen at mediatek.com (=?utf-8?B?VGluZ0hhbiBTaGVuICjmsojlu7fnv7Ap?=)
Date: Fri, 2 Dec 2022 11:13:31 +0000
Subject: [PATCH v1] soc: mediatek: mtk-pm-domains: Allow mt8186 ADSP
 default power on
In-Reply-To: <d4856589cdbb8ba31d5139604abffa4a06c5c73b.camel@mediatek.com>
References: <20221012075434.30009-1-tinghan.shen@mediatek.com>
	 <ce1c6a1a-9183-e56d-6757-947f5fc8133d@gmail.com>
	 <d4856589cdbb8ba31d5139604abffa4a06c5c73b.camel@mediatek.com>
Message-ID: <ece0356f5e184e87a6d5e1fc5ca7fa1a3d203c13.camel@mediatek.com>

Hi Matthias,

On Wed, 2022-11-23 at 18:40 +0800, TingHan Shen wrote:
> On Wed, 2022-11-23 at 11:20 +0100, Matthias Brugger wrote:
> > 
> > On 12/10/2022 09:54, Tinghan Shen wrote:
> > > In the use case of configuring the access permissions of the ADSP core,
> > > the mt8186 SoC ADSP power will be switched on in the bootloader because
> > > the permission control registers are located in the ADSP subsys.
> > > 
> > > Signed-off-by: Tinghan Shen <tinghan.shen at mediatek.com>
> > 
> > Do we need a fixes tag here?
> > My bet is:
> > Fixes: 88590cbc1703 ("soc: mediatek: pm-domains: Add support for mt8186")
> > 
> > Or is this not yet a problem but needed to be able to implement access 
> > permission configuration in the ADSP driver?
> > 
> > Regards,
> > Matthias
> 
> This patch is needed to fix a warning when implementing the ADSP access permission configuration in preloader.
> 
> 	[    0.334154] mtk-power-controller 10006000.syscon:power-controller: /soc/syscon at 10006000/power-controller/power-domain at 18/power-domain at 19/power-domain at 20: A default off power domain has been
> ON
> 	[    0.334246] ------------[ cut here ]------------
> 	[    0.334252] top_adsp_bus already disabled
> 	[    0.334274] WARNING: CPU: 5 PID: 113 at drivers/clk/clk.c:969 clk_core_disable+0x90/0xb0
> 
> If not for this case, the pm-domain works fine.
> 
> 
> Best regards,
> TingHan

gentle ping for this.
from above descriptions, should I add the fixes tag to this patch?

Best regards,
TingHan

> 
> > 
> > > ---
> > >   drivers/soc/mediatek/mt8186-pm-domains.h | 4 +---
> > >   1 file changed, 1 insertion(+), 3 deletions(-)
> > > 
> > > diff --git a/drivers/soc/mediatek/mt8186-pm-domains.h b/drivers/soc/mediatek/mt8186-pm-domains.h
> > > index 108af61854a3..fce86f79c505 100644
> > > --- a/drivers/soc/mediatek/mt8186-pm-domains.h
> > > +++ b/drivers/soc/mediatek/mt8186-pm-domains.h
> > > @@ -304,7 +304,6 @@ static const struct scpsys_domain_data scpsys_domain_data_mt8186[] = {
> > >   		.ctl_offs = 0x9FC,
> > >   		.pwr_sta_offs = 0x16C,
> > >   		.pwr_sta2nd_offs = 0x170,
> > > -		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
> > >   	},
> > >   	[MT8186_POWER_DOMAIN_ADSP_INFRA] = {
> > >   		.name = "adsp_infra",
> > > @@ -312,7 +311,6 @@ static const struct scpsys_domain_data scpsys_domain_data_mt8186[] = {
> > >   		.ctl_offs = 0x9F8,
> > >   		.pwr_sta_offs = 0x16C,
> > >   		.pwr_sta2nd_offs = 0x170,
> > > -		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
> > >   	},
> > >   	[MT8186_POWER_DOMAIN_ADSP_TOP] = {
> > >   		.name = "adsp_top",
> > > @@ -332,7 +330,7 @@ static const struct scpsys_domain_data scpsys_domain_data_mt8186[] = {
> > >   				MT8186_TOP_AXI_PROT_EN_3_CLR,
> > >   				MT8186_TOP_AXI_PROT_EN_3_STA),
> > >   		},
> > > -		.caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
> > > +		.caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_ACTIVE_WAKEUP,
> > >   	},
> > >   };
> > >   
> 
> 

-- 
Best regards,
TingHan

From broonie at kernel.org  Fri Dec  2 04:08:13 2022
From: broonie at kernel.org (Mark Brown)
Date: Fri, 2 Dec 2022 12:08:13 +0000
Subject: [PATCH 1/2] regulator: mt6370: Fix potential UAF issue
In-Reply-To: <CADiBU3-gr1OrH0_OtuWyAN8WwvZtPghC6zfB3NYuVTq4b+DZBw@mail.gmail.com>
References: <1669797463-24887-1-git-send-email-u0084500@gmail.com>
 <Y4iTVmOA5P/aN2yb@sirena.org.uk>
 <CADiBU3-gr1OrH0_OtuWyAN8WwvZtPghC6zfB3NYuVTq4b+DZBw@mail.gmail.com>
Message-ID: <Y4nqrcw3LGfj3OZR@sirena.org.uk>

On Fri, Dec 02, 2022 at 11:35:35AM +0800, ChiYuan Huang wrote:
> Mark Brown <broonie at kernel.org> ? 2022?12?1? ?? ??7:43???
> > > The original code uses i2c dev as the parent in order to reuse
> > > the 'regulator_of_get_init_data'. But this will cause regulation
> > > constraint devres attached to i2c dev, not the mfd cell platform
> > > device.

> > This is a general issue which will affect a lot of MFDs, we would be
> > better to fix this by changing the API to provide a device to be used
> > for the devres allocations separately to the one used for looking up the
> > DT.

> Not to affect too much, the better way may change the 'regulator_register' API.
> Append it as regulator_register(dev, .....
> This could separate device object with devres allocation and DT lookup.

Yes, I think so - a new optional argument.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221202/2f501c57/attachment.sig>

From rafael at kernel.org  Fri Dec  2 04:17:56 2022
From: rafael at kernel.org (Rafael J. Wysocki)
Date: Fri, 2 Dec 2022 13:17:56 +0100
Subject: [PATCH] Revert "cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()"
In-Reply-To: <18947e09733a17935af9a123ccf9b6e92faeaf9b.1669958641.git.viresh.kumar@linaro.org>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org> <18947e09733a17935af9a123ccf9b6e92faeaf9b.1669958641.git.viresh.kumar@linaro.org>
Message-ID: <CAJZ5v0ixHocQbu6-zs3dMDsiw8vdPyv=8Re7N4kUckeGkLhUzg@mail.gmail.com>

On Fri, Dec 2, 2022 at 6:26 AM Viresh Kumar <viresh.kumar at linaro.org> wrote:
>
> This reverts commit 6a17b3876bc8303612d7ad59ecf7cbc0db418bcd.
>
> This commit caused regression on Banana Pi R64 (MT7622), revert until
> the problem is identified and fixed properly.
>
> Link: https://lore.kernel.org/all/930778a1-5e8b-6df6-3276-42dcdadaf682 at systemli.org/
> Cc: v5.19+ <stable at vger.kernel.org> # v5.19+
> Reported-by: Nick <vincent at systemli.org>
> Signed-off-by: Viresh Kumar <viresh.kumar at linaro.org>

Do you want me to push this revert for -rc8?

> ---
>  drivers/cpufreq/mediatek-cpufreq.c | 147 +++++++++++++++++++----------
>  1 file changed, 96 insertions(+), 51 deletions(-)
>
> diff --git a/drivers/cpufreq/mediatek-cpufreq.c b/drivers/cpufreq/mediatek-cpufreq.c
> index 7f2680bc9a0f..4466d0c91a6a 100644
> --- a/drivers/cpufreq/mediatek-cpufreq.c
> +++ b/drivers/cpufreq/mediatek-cpufreq.c
> @@ -8,7 +8,6 @@
>  #include <linux/cpu.h>
>  #include <linux/cpufreq.h>
>  #include <linux/cpumask.h>
> -#include <linux/minmax.h>
>  #include <linux/module.h>
>  #include <linux/of.h>
>  #include <linux/of_platform.h>
> @@ -16,6 +15,8 @@
>  #include <linux/pm_opp.h>
>  #include <linux/regulator/consumer.h>
>
> +#define VOLT_TOL               (10000)
> +
>  struct mtk_cpufreq_platform_data {
>         int min_volt_shift;
>         int max_volt_shift;
> @@ -55,7 +56,6 @@ struct mtk_cpu_dvfs_info {
>         unsigned int opp_cpu;
>         unsigned long current_freq;
>         const struct mtk_cpufreq_platform_data *soc_data;
> -       int vtrack_max;
>         bool ccifreq_bound;
>  };
>
> @@ -82,7 +82,6 @@ static int mtk_cpufreq_voltage_tracking(struct mtk_cpu_dvfs_info *info,
>         struct regulator *proc_reg = info->proc_reg;
>         struct regulator *sram_reg = info->sram_reg;
>         int pre_vproc, pre_vsram, new_vsram, vsram, vproc, ret;
> -       int retry = info->vtrack_max;
>
>         pre_vproc = regulator_get_voltage(proc_reg);
>         if (pre_vproc < 0) {
> @@ -90,44 +89,91 @@ static int mtk_cpufreq_voltage_tracking(struct mtk_cpu_dvfs_info *info,
>                         "invalid Vproc value: %d\n", pre_vproc);
>                 return pre_vproc;
>         }
> +       /* Vsram should not exceed the maximum allowed voltage of SoC. */
> +       new_vsram = min(new_vproc + soc_data->min_volt_shift,
> +                       soc_data->sram_max_volt);
> +
> +       if (pre_vproc < new_vproc) {
> +               /*
> +                * When scaling up voltages, Vsram and Vproc scale up step
> +                * by step. At each step, set Vsram to (Vproc + 200mV) first,
> +                * then set Vproc to (Vsram - 100mV).
> +                * Keep doing it until Vsram and Vproc hit target voltages.
> +                */
> +               do {
> +                       pre_vsram = regulator_get_voltage(sram_reg);
> +                       if (pre_vsram < 0) {
> +                               dev_err(info->cpu_dev,
> +                                       "invalid Vsram value: %d\n", pre_vsram);
> +                               return pre_vsram;
> +                       }
> +                       pre_vproc = regulator_get_voltage(proc_reg);
> +                       if (pre_vproc < 0) {
> +                               dev_err(info->cpu_dev,
> +                                       "invalid Vproc value: %d\n", pre_vproc);
> +                               return pre_vproc;
> +                       }
>
> -       pre_vsram = regulator_get_voltage(sram_reg);
> -       if (pre_vsram < 0) {
> -               dev_err(info->cpu_dev, "invalid Vsram value: %d\n", pre_vsram);
> -               return pre_vsram;
> -       }
> +                       vsram = min(new_vsram,
> +                                   pre_vproc + soc_data->min_volt_shift);
>
> -       new_vsram = clamp(new_vproc + soc_data->min_volt_shift,
> -                         soc_data->sram_min_volt, soc_data->sram_max_volt);
> +                       if (vsram + VOLT_TOL >= soc_data->sram_max_volt) {
> +                               vsram = soc_data->sram_max_volt;
>
> -       do {
> -               if (pre_vproc <= new_vproc) {
> -                       vsram = clamp(pre_vproc + soc_data->max_volt_shift,
> -                                     soc_data->sram_min_volt, new_vsram);
> -                       ret = regulator_set_voltage(sram_reg, vsram,
> -                                                   soc_data->sram_max_volt);
> +                               /*
> +                                * If the target Vsram hits the maximum voltage,
> +                                * try to set the exact voltage value first.
> +                                */
> +                               ret = regulator_set_voltage(sram_reg, vsram,
> +                                                           vsram);
> +                               if (ret)
> +                                       ret = regulator_set_voltage(sram_reg,
> +                                                       vsram - VOLT_TOL,
> +                                                       vsram);
>
> -                       if (ret)
> -                               return ret;
> -
> -                       if (vsram == soc_data->sram_max_volt ||
> -                           new_vsram == soc_data->sram_min_volt)
>                                 vproc = new_vproc;
> -                       else
> +                       } else {
> +                               ret = regulator_set_voltage(sram_reg, vsram,
> +                                                           vsram + VOLT_TOL);
> +
>                                 vproc = vsram - soc_data->min_volt_shift;
> +                       }
> +                       if (ret)
> +                               return ret;
>
>                         ret = regulator_set_voltage(proc_reg, vproc,
> -                                                   soc_data->proc_max_volt);
> +                                                   vproc + VOLT_TOL);
>                         if (ret) {
>                                 regulator_set_voltage(sram_reg, pre_vsram,
> -                                                     soc_data->sram_max_volt);
> +                                                     pre_vsram);
>                                 return ret;
>                         }
> -               } else if (pre_vproc > new_vproc) {
> +               } while (vproc < new_vproc || vsram < new_vsram);
> +       } else if (pre_vproc > new_vproc) {
> +               /*
> +                * When scaling down voltages, Vsram and Vproc scale down step
> +                * by step. At each step, set Vproc to (Vsram - 200mV) first,
> +                * then set Vproc to (Vproc + 100mV).
> +                * Keep doing it until Vsram and Vproc hit target voltages.
> +                */
> +               do {
> +                       pre_vproc = regulator_get_voltage(proc_reg);
> +                       if (pre_vproc < 0) {
> +                               dev_err(info->cpu_dev,
> +                                       "invalid Vproc value: %d\n", pre_vproc);
> +                               return pre_vproc;
> +                       }
> +                       pre_vsram = regulator_get_voltage(sram_reg);
> +                       if (pre_vsram < 0) {
> +                               dev_err(info->cpu_dev,
> +                                       "invalid Vsram value: %d\n", pre_vsram);
> +                               return pre_vsram;
> +                       }
> +
>                         vproc = max(new_vproc,
>                                     pre_vsram - soc_data->max_volt_shift);
>                         ret = regulator_set_voltage(proc_reg, vproc,
> -                                                   soc_data->proc_max_volt);
> +                                                   vproc + VOLT_TOL);
>                         if (ret)
>                                 return ret;
>
> @@ -137,24 +183,32 @@ static int mtk_cpufreq_voltage_tracking(struct mtk_cpu_dvfs_info *info,
>                                 vsram = max(new_vsram,
>                                             vproc + soc_data->min_volt_shift);
>
> -                       ret = regulator_set_voltage(sram_reg, vsram,
> -                                                   soc_data->sram_max_volt);
> +                       if (vsram + VOLT_TOL >= soc_data->sram_max_volt) {
> +                               vsram = soc_data->sram_max_volt;
> +
> +                               /*
> +                                * If the target Vsram hits the maximum voltage,
> +                                * try to set the exact voltage value first.
> +                                */
> +                               ret = regulator_set_voltage(sram_reg, vsram,
> +                                                           vsram);
> +                               if (ret)
> +                                       ret = regulator_set_voltage(sram_reg,
> +                                                       vsram - VOLT_TOL,
> +                                                       vsram);
> +                       } else {
> +                               ret = regulator_set_voltage(sram_reg, vsram,
> +                                                           vsram + VOLT_TOL);
> +                       }
> +
>                         if (ret) {
>                                 regulator_set_voltage(proc_reg, pre_vproc,
> -                                                     soc_data->proc_max_volt);
> +                                                     pre_vproc);
>                                 return ret;
>                         }
> -               }
> -
> -               pre_vproc = vproc;
> -               pre_vsram = vsram;
> -
> -               if (--retry < 0) {
> -                       dev_err(info->cpu_dev,
> -                               "over loop count, failed to set voltage\n");
> -                       return -EINVAL;
> -               }
> -       } while (vproc != new_vproc || vsram != new_vsram);
> +               } while (vproc > new_vproc + VOLT_TOL ||
> +                        vsram > new_vsram + VOLT_TOL);
> +       }
>
>         return 0;
>  }
> @@ -250,8 +304,8 @@ static int mtk_cpufreq_set_target(struct cpufreq_policy *policy,
>          * If the new voltage or the intermediate voltage is higher than the
>          * current voltage, scale up voltage first.
>          */
> -       target_vproc = max(inter_vproc, vproc);
> -       if (pre_vproc <= target_vproc) {
> +       target_vproc = (inter_vproc > vproc) ? inter_vproc : vproc;
> +       if (pre_vproc < target_vproc) {
>                 ret = mtk_cpufreq_set_voltage(info, target_vproc);
>                 if (ret) {
>                         dev_err(cpu_dev,
> @@ -513,15 +567,6 @@ static int mtk_cpu_dvfs_info_init(struct mtk_cpu_dvfs_info *info, int cpu)
>          */
>         info->need_voltage_tracking = (info->sram_reg != NULL);
>
> -       /*
> -        * We assume min voltage is 0 and tracking target voltage using
> -        * min_volt_shift for each iteration.
> -        * The vtrack_max is 3 times of expeted iteration count.
> -        */
> -       info->vtrack_max = 3 * DIV_ROUND_UP(max(info->soc_data->sram_max_volt,
> -                                               info->soc_data->proc_max_volt),
> -                                           info->soc_data->min_volt_shift);
> -
>         return 0;
>
>  out_disable_inter_clock:
> --
> 2.31.1.272.g89b43f80a514
>


From vincent at systemli.org  Fri Dec  2 04:25:31 2022
From: vincent at systemli.org (Nick)
Date: Fri, 2 Dec 2022 13:25:31 +0100
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <c186d104-43e0-ca10-3ce2-c2f922acd8bf@leemhuis.info>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <eb142a22-b35e-ec3f-ee0a-9e3e7b24cea6@gmail.com>
 <bf8d2a8f-7654-29be-1104-a842c6657b5e@systemli.org>
 <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
 <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
 <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>
 <b1822bbc3775730c4cedf9652323c7d72e663e4b.camel@mediatek.com>
 <8be3e050-f32a-6761-8ebd-49c38dfcf9eb@collabora.com>
 <c186d104-43e0-ca10-3ce2-c2f922acd8bf@leemhuis.info>
Message-ID: <cb0f0500-fb8a-2a01-1dd4-ab50714f595a@systemli.org>

On 12/2/22 11:41, Thorsten Leemhuis wrote:

> Reported-by: Nick<vincent at systemli.org>
You can also use "Reported-by: Nick Hainke <vincent at systemli.org>" ;)



From vincent at systemli.org  Fri Dec  2 04:37:26 2022
From: vincent at systemli.org (Nick)
Date: Fri, 2 Dec 2022 13:37:26 +0100
Subject: [PATCH] cpufreq: mediatek: Raise proc and sram max voltage for
 MT7622/7623
In-Reply-To: <20221202095227.167492-1-angelogioacchino.delregno@collabora.com>
References: <20221202095227.167492-1-angelogioacchino.delregno@collabora.com>
Message-ID: <75216e0c-9d36-7ada-1507-1bb4a91a3326@systemli.org>

It now starts, however, with a lot of those messages (I applied the 
patch to linux/master and not to linux-next, because next is currently 
not compiling anymore for me):

> [?? 10.777041] cpufreq: __target_index: Failed to change cpu 
> frequency: -22
> [?? 10.791577] cpu cpu0: cpu0: failed to scale up voltage!
The complete log:
https://gist.githubusercontent.com/PolynomialDivision/267c83c7a21a359cbb4e8d99d0303201/raw/28d3568a26634bebef2d91ebe37fc5f76ae58add/mt7622-patch-cpufreq.log

Bests
Nick

On 12/2/22 10:52, AngeloGioacchino Del Regno wrote:
> During the addition of SRAM voltage tracking for CCI scaling, this
> driver got some voltage limits set for the vtrack algorithm: these
> were moved to platform data first, then enforced in a later commit
> 6a17b3876bc8 ("cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()")
> using these as max values for the regulator_set_voltage() calls.
>
> In this case, the vsram/vproc constraints for MT7622 and MT7623
> were supposed to be the same as MT2701 (and a number of other SoCs),
> but that turned out to be a mistake because the aforementioned two
> SoCs' maximum voltage for both VPROC and VPROC_SRAM is 1.36V.
>
> Fix that by adding new platform data for MT7622/7623 declaring the
> right {proc,sram}_max_volt parameter.
>
> Fixes: ead858bd128d ("cpufreq: mediatek: Move voltage limits to platform data")
> Fixes: 6a17b3876bc8 ("cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()")
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> ---
>   drivers/cpufreq/mediatek-cpufreq.c | 13 +++++++++++--
>   1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/cpufreq/mediatek-cpufreq.c b/drivers/cpufreq/mediatek-cpufreq.c
> index 7f2680bc9a0f..f9a9f08c75c4 100644
> --- a/drivers/cpufreq/mediatek-cpufreq.c
> +++ b/drivers/cpufreq/mediatek-cpufreq.c
> @@ -695,6 +695,15 @@ static const struct mtk_cpufreq_platform_data mt2701_platform_data = {
>   	.ccifreq_supported = false,
>   };
>   
> +static const struct mtk_cpufreq_platform_data mt7622_platform_data = {
> +	.min_volt_shift = 100000,
> +	.max_volt_shift = 200000,
> +	.proc_max_volt = 1360000,
> +	.sram_min_volt = 0,
> +	.sram_max_volt = 1360000,
> +	.ccifreq_supported = false,
> +};
> +
>   static const struct mtk_cpufreq_platform_data mt8183_platform_data = {
>   	.min_volt_shift = 100000,
>   	.max_volt_shift = 200000,
> @@ -717,8 +726,8 @@ static const struct mtk_cpufreq_platform_data mt8186_platform_data = {
>   static const struct of_device_id mtk_cpufreq_machines[] __initconst = {
>   	{ .compatible = "mediatek,mt2701", .data = &mt2701_platform_data },
>   	{ .compatible = "mediatek,mt2712", .data = &mt2701_platform_data },
> -	{ .compatible = "mediatek,mt7622", .data = &mt2701_platform_data },
> -	{ .compatible = "mediatek,mt7623", .data = &mt2701_platform_data },
> +	{ .compatible = "mediatek,mt7622", .data = &mt7622_platform_data },
> +	{ .compatible = "mediatek,mt7623", .data = &mt7622_platform_data },
>   	{ .compatible = "mediatek,mt8167", .data = &mt2701_platform_data },
>   	{ .compatible = "mediatek,mt817x", .data = &mt2701_platform_data },
>   	{ .compatible = "mediatek,mt8173", .data = &mt2701_platform_data },


From vincent at systemli.org  Fri Dec  2 04:47:51 2022
From: vincent at systemli.org (Nick)
Date: Fri, 2 Dec 2022 13:47:51 +0100
Subject: [PATCH] Revert "cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()"
In-Reply-To: <18947e09733a17935af9a123ccf9b6e92faeaf9b.1669958641.git.viresh.kumar@linaro.org>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <18947e09733a17935af9a123ccf9b6e92faeaf9b.1669958641.git.viresh.kumar@linaro.org>
Message-ID: <b525cb57-7f21-fb23-1b15-9560f4685cdd@systemli.org>

I tested this again on linux/master on the Banana Pi R64 (mt7622). Seems 
to work fine:
https://gist.githubusercontent.com/PolynomialDivision/5022dec1874a1c411ece6c9dabec59b5/raw/7ac62b38d10e41a56ff1db3142571117ee6f4c26/mt7622-cpufreq-revert.log

So if you want you can add:
Reported-by: Nick Hainke <vincent at systemli.org>
Tested-by: Nick Hainke <vincent at systemli.org>

Bests
Nick

On 12/2/22 06:26, Viresh Kumar wrote:
> This reverts commit 6a17b3876bc8303612d7ad59ecf7cbc0db418bcd.
>
> This commit caused regression on Banana Pi R64 (MT7622), revert until
> the problem is identified and fixed properly.
>
> Link: https://lore.kernel.org/all/930778a1-5e8b-6df6-3276-42dcdadaf682 at systemli.org/
> Cc: v5.19+ <stable at vger.kernel.org> # v5.19+
> Reported-by: Nick <vincent at systemli.org>
> Signed-off-by: Viresh Kumar <viresh.kumar at linaro.org>
> ---
>   drivers/cpufreq/mediatek-cpufreq.c | 147 +++++++++++++++++++----------
>   1 file changed, 96 insertions(+), 51 deletions(-)
>
> diff --git a/drivers/cpufreq/mediatek-cpufreq.c b/drivers/cpufreq/mediatek-cpufreq.c
> index 7f2680bc9a0f..4466d0c91a6a 100644
> --- a/drivers/cpufreq/mediatek-cpufreq.c
> +++ b/drivers/cpufreq/mediatek-cpufreq.c
> @@ -8,7 +8,6 @@
>   #include <linux/cpu.h>
>   #include <linux/cpufreq.h>
>   #include <linux/cpumask.h>
> -#include <linux/minmax.h>
>   #include <linux/module.h>
>   #include <linux/of.h>
>   #include <linux/of_platform.h>
> @@ -16,6 +15,8 @@
>   #include <linux/pm_opp.h>
>   #include <linux/regulator/consumer.h>
>   
> +#define VOLT_TOL		(10000)
> +
>   struct mtk_cpufreq_platform_data {
>   	int min_volt_shift;
>   	int max_volt_shift;
> @@ -55,7 +56,6 @@ struct mtk_cpu_dvfs_info {
>   	unsigned int opp_cpu;
>   	unsigned long current_freq;
>   	const struct mtk_cpufreq_platform_data *soc_data;
> -	int vtrack_max;
>   	bool ccifreq_bound;
>   };
>   
> @@ -82,7 +82,6 @@ static int mtk_cpufreq_voltage_tracking(struct mtk_cpu_dvfs_info *info,
>   	struct regulator *proc_reg = info->proc_reg;
>   	struct regulator *sram_reg = info->sram_reg;
>   	int pre_vproc, pre_vsram, new_vsram, vsram, vproc, ret;
> -	int retry = info->vtrack_max;
>   
>   	pre_vproc = regulator_get_voltage(proc_reg);
>   	if (pre_vproc < 0) {
> @@ -90,44 +89,91 @@ static int mtk_cpufreq_voltage_tracking(struct mtk_cpu_dvfs_info *info,
>   			"invalid Vproc value: %d\n", pre_vproc);
>   		return pre_vproc;
>   	}
> +	/* Vsram should not exceed the maximum allowed voltage of SoC. */
> +	new_vsram = min(new_vproc + soc_data->min_volt_shift,
> +			soc_data->sram_max_volt);
> +
> +	if (pre_vproc < new_vproc) {
> +		/*
> +		 * When scaling up voltages, Vsram and Vproc scale up step
> +		 * by step. At each step, set Vsram to (Vproc + 200mV) first,
> +		 * then set Vproc to (Vsram - 100mV).
> +		 * Keep doing it until Vsram and Vproc hit target voltages.
> +		 */
> +		do {
> +			pre_vsram = regulator_get_voltage(sram_reg);
> +			if (pre_vsram < 0) {
> +				dev_err(info->cpu_dev,
> +					"invalid Vsram value: %d\n", pre_vsram);
> +				return pre_vsram;
> +			}
> +			pre_vproc = regulator_get_voltage(proc_reg);
> +			if (pre_vproc < 0) {
> +				dev_err(info->cpu_dev,
> +					"invalid Vproc value: %d\n", pre_vproc);
> +				return pre_vproc;
> +			}
>   
> -	pre_vsram = regulator_get_voltage(sram_reg);
> -	if (pre_vsram < 0) {
> -		dev_err(info->cpu_dev, "invalid Vsram value: %d\n", pre_vsram);
> -		return pre_vsram;
> -	}
> +			vsram = min(new_vsram,
> +				    pre_vproc + soc_data->min_volt_shift);
>   
> -	new_vsram = clamp(new_vproc + soc_data->min_volt_shift,
> -			  soc_data->sram_min_volt, soc_data->sram_max_volt);
> +			if (vsram + VOLT_TOL >= soc_data->sram_max_volt) {
> +				vsram = soc_data->sram_max_volt;
>   
> -	do {
> -		if (pre_vproc <= new_vproc) {
> -			vsram = clamp(pre_vproc + soc_data->max_volt_shift,
> -				      soc_data->sram_min_volt, new_vsram);
> -			ret = regulator_set_voltage(sram_reg, vsram,
> -						    soc_data->sram_max_volt);
> +				/*
> +				 * If the target Vsram hits the maximum voltage,
> +				 * try to set the exact voltage value first.
> +				 */
> +				ret = regulator_set_voltage(sram_reg, vsram,
> +							    vsram);
> +				if (ret)
> +					ret = regulator_set_voltage(sram_reg,
> +							vsram - VOLT_TOL,
> +							vsram);
>   
> -			if (ret)
> -				return ret;
> -
> -			if (vsram == soc_data->sram_max_volt ||
> -			    new_vsram == soc_data->sram_min_volt)
>   				vproc = new_vproc;
> -			else
> +			} else {
> +				ret = regulator_set_voltage(sram_reg, vsram,
> +							    vsram + VOLT_TOL);
> +
>   				vproc = vsram - soc_data->min_volt_shift;
> +			}
> +			if (ret)
> +				return ret;
>   
>   			ret = regulator_set_voltage(proc_reg, vproc,
> -						    soc_data->proc_max_volt);
> +						    vproc + VOLT_TOL);
>   			if (ret) {
>   				regulator_set_voltage(sram_reg, pre_vsram,
> -						      soc_data->sram_max_volt);
> +						      pre_vsram);
>   				return ret;
>   			}
> -		} else if (pre_vproc > new_vproc) {
> +		} while (vproc < new_vproc || vsram < new_vsram);
> +	} else if (pre_vproc > new_vproc) {
> +		/*
> +		 * When scaling down voltages, Vsram and Vproc scale down step
> +		 * by step. At each step, set Vproc to (Vsram - 200mV) first,
> +		 * then set Vproc to (Vproc + 100mV).
> +		 * Keep doing it until Vsram and Vproc hit target voltages.
> +		 */
> +		do {
> +			pre_vproc = regulator_get_voltage(proc_reg);
> +			if (pre_vproc < 0) {
> +				dev_err(info->cpu_dev,
> +					"invalid Vproc value: %d\n", pre_vproc);
> +				return pre_vproc;
> +			}
> +			pre_vsram = regulator_get_voltage(sram_reg);
> +			if (pre_vsram < 0) {
> +				dev_err(info->cpu_dev,
> +					"invalid Vsram value: %d\n", pre_vsram);
> +				return pre_vsram;
> +			}
> +
>   			vproc = max(new_vproc,
>   				    pre_vsram - soc_data->max_volt_shift);
>   			ret = regulator_set_voltage(proc_reg, vproc,
> -						    soc_data->proc_max_volt);
> +						    vproc + VOLT_TOL);
>   			if (ret)
>   				return ret;
>   
> @@ -137,24 +183,32 @@ static int mtk_cpufreq_voltage_tracking(struct mtk_cpu_dvfs_info *info,
>   				vsram = max(new_vsram,
>   					    vproc + soc_data->min_volt_shift);
>   
> -			ret = regulator_set_voltage(sram_reg, vsram,
> -						    soc_data->sram_max_volt);
> +			if (vsram + VOLT_TOL >= soc_data->sram_max_volt) {
> +				vsram = soc_data->sram_max_volt;
> +
> +				/*
> +				 * If the target Vsram hits the maximum voltage,
> +				 * try to set the exact voltage value first.
> +				 */
> +				ret = regulator_set_voltage(sram_reg, vsram,
> +							    vsram);
> +				if (ret)
> +					ret = regulator_set_voltage(sram_reg,
> +							vsram - VOLT_TOL,
> +							vsram);
> +			} else {
> +				ret = regulator_set_voltage(sram_reg, vsram,
> +							    vsram + VOLT_TOL);
> +			}
> +
>   			if (ret) {
>   				regulator_set_voltage(proc_reg, pre_vproc,
> -						      soc_data->proc_max_volt);
> +						      pre_vproc);
>   				return ret;
>   			}
> -		}
> -
> -		pre_vproc = vproc;
> -		pre_vsram = vsram;
> -
> -		if (--retry < 0) {
> -			dev_err(info->cpu_dev,
> -				"over loop count, failed to set voltage\n");
> -			return -EINVAL;
> -		}
> -	} while (vproc != new_vproc || vsram != new_vsram);
> +		} while (vproc > new_vproc + VOLT_TOL ||
> +			 vsram > new_vsram + VOLT_TOL);
> +	}
>   
>   	return 0;
>   }
> @@ -250,8 +304,8 @@ static int mtk_cpufreq_set_target(struct cpufreq_policy *policy,
>   	 * If the new voltage or the intermediate voltage is higher than the
>   	 * current voltage, scale up voltage first.
>   	 */
> -	target_vproc = max(inter_vproc, vproc);
> -	if (pre_vproc <= target_vproc) {
> +	target_vproc = (inter_vproc > vproc) ? inter_vproc : vproc;
> +	if (pre_vproc < target_vproc) {
>   		ret = mtk_cpufreq_set_voltage(info, target_vproc);
>   		if (ret) {
>   			dev_err(cpu_dev,
> @@ -513,15 +567,6 @@ static int mtk_cpu_dvfs_info_init(struct mtk_cpu_dvfs_info *info, int cpu)
>   	 */
>   	info->need_voltage_tracking = (info->sram_reg != NULL);
>   
> -	/*
> -	 * We assume min voltage is 0 and tracking target voltage using
> -	 * min_volt_shift for each iteration.
> -	 * The vtrack_max is 3 times of expeted iteration count.
> -	 */
> -	info->vtrack_max = 3 * DIV_ROUND_UP(max(info->soc_data->sram_max_volt,
> -						info->soc_data->proc_max_volt),
> -					    info->soc_data->min_volt_shift);
> -
>   	return 0;
>   
>   out_disable_inter_clock:


From broonie at kernel.org  Fri Dec  2 05:54:04 2022
From: broonie at kernel.org (Mark Brown)
Date: Fri, 02 Dec 2022 13:54:04 +0000
Subject: (subset) [PATCH v7 0/8] Add MediaTek MT6357 PMIC support
In-Reply-To: <20221005-mt6357-support-v7-0-477e60126749@baylibre.com>
References: <20221005-mt6357-support-v7-0-477e60126749@baylibre.com>
Message-ID: <166998924420.1252747.5635155323391634201.b4-ty@kernel.org>

On Tue, 29 Nov 2022 16:56:59 +0100, Alexandre Mergnat wrote:
> This patch series adds MFD, PMIC keys, and regulator support for MT6357.
> MT6357 is a MediaTek PMIC very similar to MT6358.
> 
> Currently, MTK bindings related to the PMICs are not converted yet (still .txt):
> 
> soc/mediatek/pwrap.txt (all PMIC parent)
>       |
>       V
> mfd/mt6397.txt (support lot of mt63XX PMIC)
>       +---------------+----------------+---...
>       V               V                V
> regulator/...      rtc/...          codec/...
> 
> [...]

Applied to

   broonie/regulator.git for-next

Thanks!

[2/8] regulator: dt-bindings: Add binding schema for mt6357 regulators
      commit: b4387db19d7f1caf166852782a5f0e5a393bdf24
[7/8] regulator: add mt6357 regulator
      commit: dafc7cde23dca239987d3cd000b11cdccc3728ea

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


From lorenzo at kernel.org  Fri Dec  2 09:36:33 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Fri,  2 Dec 2022 18:36:33 +0100
Subject: [PATCH net-next] net: ethernet: mtk_wed: fix possible deadlock if mtk_wed_wo_init fails
Message-ID: <a87f05e60ea1a94b571c9c87b69cc5b0e94943f2.1669999089.git.lorenzo@kernel.org>

Introduce __mtk_wed_detach() in order to avoid a possible deadlock in
mtk_wed_attach routine if mtk_wed_wo_init fails.

Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
---
 drivers/net/ethernet/mediatek/mtk_wed.c     | 24 ++++++++++++++-------
 drivers/net/ethernet/mediatek/mtk_wed_mcu.c | 10 ++++++---
 drivers/net/ethernet/mediatek/mtk_wed_wo.c  |  3 +++
 3 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
index d041615b2bac..6352abd4157e 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
@@ -174,9 +174,10 @@ mtk_wed_wo_reset(struct mtk_wed_device *dev)
 	mtk_wdma_tx_reset(dev);
 	mtk_wed_reset(dev, MTK_WED_RESET_WED);
 
-	mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
-			     MTK_WED_WO_CMD_CHANGE_STATE, &state,
-			     sizeof(state), false);
+	if (mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
+				 MTK_WED_WO_CMD_CHANGE_STATE, &state,
+				 sizeof(state), false))
+		return;
 
 	if (readx_poll_timeout(mtk_wed_wo_read_status, dev, val,
 			       val == MTK_WED_WOIF_DISABLE_DONE,
@@ -576,12 +577,10 @@ mtk_wed_deinit(struct mtk_wed_device *dev)
 }
 
 static void
-mtk_wed_detach(struct mtk_wed_device *dev)
+__mtk_wed_detach(struct mtk_wed_device *dev)
 {
 	struct mtk_wed_hw *hw = dev->hw;
 
-	mutex_lock(&hw_lock);
-
 	mtk_wed_deinit(dev);
 
 	mtk_wdma_rx_reset(dev);
@@ -612,6 +611,13 @@ mtk_wed_detach(struct mtk_wed_device *dev)
 	module_put(THIS_MODULE);
 
 	hw->wed_dev = NULL;
+}
+
+static void
+mtk_wed_detach(struct mtk_wed_device *dev)
+{
+	mutex_lock(&hw_lock);
+	__mtk_wed_detach(dev);
 	mutex_unlock(&hw_lock);
 }
 
@@ -1490,8 +1496,10 @@ mtk_wed_attach(struct mtk_wed_device *dev)
 		ret = mtk_wed_wo_init(hw);
 	}
 out:
-	if (ret)
-		mtk_wed_detach(dev);
+	if (ret) {
+		dev_err(dev->hw->dev, "failed to attach wed device\n");
+		__mtk_wed_detach(dev);
+	}
 unlock:
 	mutex_unlock(&hw_lock);
 
diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
index f9539e6233c9..b084009a32f9 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
@@ -176,6 +176,9 @@ int mtk_wed_mcu_send_msg(struct mtk_wed_wo *wo, int id, int cmd,
 	u16 seq;
 	int ret;
 
+	if (!wo)
+		return -ENODEV;
+
 	skb = mtk_wed_mcu_msg_alloc(data, len);
 	if (!skb)
 		return -ENOMEM;
@@ -202,13 +205,14 @@ int mtk_wed_mcu_send_msg(struct mtk_wed_wo *wo, int id, int cmd,
 int mtk_wed_mcu_msg_update(struct mtk_wed_device *dev, int id, void *data,
 			   int len)
 {
-	struct mtk_wed_wo *wo = dev->hw->wed_wo;
+	if (!dev->hw || !dev->hw->wed_wo)
+		return 0;
 
 	if (dev->hw->version == 1)
 		return 0;
 
-	return mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO, id, data, len,
-				    true);
+	return mtk_wed_mcu_send_msg(dev->hw->wed_wo, MTK_WED_MODULE_ID_WO, id,
+				    data, len, true);
 }
 
 static int
diff --git a/drivers/net/ethernet/mediatek/mtk_wed_wo.c b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
index a219da85f4db..92440d62e01c 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed_wo.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
@@ -464,6 +464,9 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
 static void
 mtk_wed_wo_hw_deinit(struct mtk_wed_wo *wo)
 {
+	if (!wo)
+		return;
+
 	/* disable interrupts */
 	mtk_wed_wo_set_isr(wo, 0);
 
-- 
2.38.1



From u.kleine-koenig at pengutronix.de  Fri Dec  2 10:09:32 2022
From: u.kleine-koenig at pengutronix.de (Uwe =?utf-8?Q?Kleine-K=C3=B6nig?=)
Date: Fri, 2 Dec 2022 19:09:32 +0100
Subject: [PATCH v1 1/2] arm64: dts: mediatek: mt7622: Add missing
 pwm-cells to pwm node
In-Reply-To: <20221128112028.58021-2-angelogioacchino.delregno@collabora.com>
References: <20221128112028.58021-1-angelogioacchino.delregno@collabora.com>
 <20221128112028.58021-2-angelogioacchino.delregno@collabora.com>
Message-ID: <20221202180932.5k3vymrwds5ssivq@pengutronix.de>

On Mon, Nov 28, 2022 at 12:20:27PM +0100, AngeloGioacchino Del Regno wrote:
> Specify #pwm-cells on pwm at 11006000 to make it actually usable.
> 
> Fixes: ae457b7679c4 ("arm64: dts: mt7622: add SoC and peripheral related device nodes")
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> ---
>  arch/arm64/boot/dts/mediatek/mt7622.dtsi | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/arm64/boot/dts/mediatek/mt7622.dtsi b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
> index 146e18b5b1f4..f321c6d0fd7c 100644
> --- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
> @@ -435,6 +435,7 @@ uart3: serial at 11005000 {
>  	pwm: pwm at 11006000 {
>  		compatible = "mediatek,mt7622-pwm";
>  		reg = <0 0x11006000 0 0x1000>;
> +		#pwm-cells = <2>;

3 should be possible, too. The driver does only support one
polarity, so it's not really needed, but would be nice for consistency?

Thierry, what's your take here?

Other than that: Who would pick this up, I assume it to go via an ARM
tree together with the 2nd patch in this series?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-K?nig            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221202/5de26d89/attachment.sig>

From bvanassche at acm.org  Fri Dec  2 10:49:33 2022
From: bvanassche at acm.org (Bart Van Assche)
Date: Fri, 2 Dec 2022 10:49:33 -0800
Subject: [PATCH v1 1/1] scsi: ufs: core: fix device management cmd timeout
 flow
In-Reply-To: <20221202105817.19801-1-mason.zhang@mediatek.com>
References: <20221202105817.19801-1-mason.zhang@mediatek.com>
Message-ID: <4e2a09d5-9fbf-069f-c5bf-fb577cb63232@acm.org>

On 12/2/22 02:58, Mason Zhang wrote:
> From: Mason Zhang <Mason.Zhang at mediatek.com>
> 
> In ufs error handler flow, host will send device management cmd(NOP OUT)
> to device for recovery link. If cmd response timeout, and clear doorbell
> fail, ufshcd_wait_for_dev_cmd will do nothing and return,
> hba->dev_cmd.complete struct not set to null.
> 
> In this time, if cmd has been responsed by device, then it will
> call complete() in __ufshcd_transfer_req_compl, because of complete
> struct is alloced in stack, then the KE will occur.
> 
> Fix the following crash:
>    ipanic_die+0x24/0x38 [mrdump]
>    die+0x344/0x748
>    arm64_notify_die+0x44/0x104
>    do_debug_exception+0x104/0x1e0
>    el1_dbg+0x38/0x54
>    el1_sync_handler+0x40/0x88
>    el1_sync+0x8c/0x140
>    queued_spin_lock_slowpath+0x2e4/0x3c0
>    __ufshcd_transfer_req_compl+0x3b0/0x1164
>    ufshcd_trc_handler+0x15c/0x308
>    ufshcd_host_reset_and_restore+0x54/0x260
>    ufshcd_reset_and_restore+0x28c/0x57c
>    ufshcd_err_handler+0xeb8/0x1b6c
>    process_one_work+0x288/0x964
>    worker_thread+0x4bc/0xc7c
>    kthread+0x15c/0x264
>    ret_from_fork+0x10/0x30
> 
> Change-Id: Id17da259894294b61bef41cf7dfb94506e7e0310

Please verify patches with checkpatch before posting these upstream. Checkpatch
will tell you that Change-Id tags must be removed before posting a patch upstream.

> Signed-off-by: Mason Zhang <Mason.Zhang at mediatek.com>
> ---
>   drivers/ufs/core/ufshcd.c | 46 ++++++++++++++++++---------------------
>   1 file changed, 21 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index b1f59a5fe632..2b4934a562a6 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -2979,35 +2979,31 @@ static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba,
>   		err = -ETIMEDOUT;
>   		dev_dbg(hba->dev, "%s: dev_cmd request timedout, tag %d\n",
>   			__func__, lrbp->task_tag);
> -		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0) {
> +		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0)
>   			/* successfully cleared the command, retry if needed */
>   			err = -EAGAIN;
> +		/*
> +		 * Since clearing the command succeeded we also need to
> +		 * clear the task tag bit from the outstanding_reqs
> +		 * variable.
> +		 */
> +		spin_lock_irqsave(&hba->outstanding_lock, flags);
> +		pending = test_bit(lrbp->task_tag,
> +				   &hba->outstanding_reqs);
> +		if (pending) {
> +			hba->dev_cmd.complete = NULL;
> +			__clear_bit(lrbp->task_tag,
> +				    &hba->outstanding_reqs);
> +		}
> +		spin_unlock_irqrestore(&hba->outstanding_lock, flags);

I don't think it is safe to clear the corresponding bit from outstanding_reqs
if ufshcd_clear_cmds() returns a value != 0.

Instead of making all these changes, would the following patch be sufficient?

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index bb4cbfe7fd57..d5deec621d2a 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -3008,6 +3008,9 @@ static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba,
  		} else {
  			dev_err(hba->dev, "%s: failed to clear tag %d\n",
  				__func__, lrbp->task_tag);
+			spin_lock_irqsave(&hba->outstanding_lock, flags);
+			hba->dev_cmd.complete = NULL;
+			spin_unlock_irqrestore(&hba->outstanding_lock, flags);
  		}
  	}


Thanks,

Bart.


From colin.foster at in-advantage.com  Fri Dec  2 11:31:28 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri, 2 Dec 2022 11:31:28 -0800
Subject: [PATCH v3 net-next 05/10] dt-bindings: net: dsa: qca8k: utilize
 shared dsa.yaml
In-Reply-To: <20221201224240.GA1565974-robh@kernel.org>
References: <20221127224734.885526-1-colin.foster@in-advantage.com>
 <20221127224734.885526-6-colin.foster@in-advantage.com>
 <20221201224240.GA1565974-robh@kernel.org>
Message-ID: <Y4pSkOFaGQKc7j/6@euler>

Hi Rob,

On Thu, Dec 01, 2022 at 04:42:40PM -0600, Rob Herring wrote:
> On Sun, Nov 27, 2022 at 02:47:29PM -0800, Colin Foster wrote:
> > The dsa.yaml binding contains duplicated bindings for address and size
> > cells, as well as the reference to dsa-port.yaml. Instead of duplicating
> > this information, remove the reference to dsa-port.yaml and include the
> > full reference to dsa.yaml.
> > 
> > Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> > Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> > ---
> > 
> > v2 -> v3
> >   * Remove #address-cells and #size-cells from v2. The examples were
> >     incorrect and fixed elsewhere.
> >   * Remove erroneous unevaluatedProperties: true under Ethernet Port.
> >   * Add back ref: dsa-port.yaml#.
> > 
> > v1 -> v2
> >   * Add #address-cells and #size-cells to the switch layer. They aren't
> >     part of dsa.yaml.
> >   * Add unevaluatedProperties: true to the ethernet-port layer so it can
> >     correctly read properties from dsa.yaml.
> > 
> > ---
> >  Documentation/devicetree/bindings/net/dsa/qca8k.yaml | 11 +++--------
> >  1 file changed, 3 insertions(+), 8 deletions(-)
> > 
> > diff --git a/Documentation/devicetree/bindings/net/dsa/qca8k.yaml b/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
> > index 6fc9bc985726..93a9ddebcac8 100644
> > --- a/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
> > @@ -66,20 +66,15 @@ properties:
> >                   With the legacy mapping the reg corresponding to the internal
> >                   mdio is the switch reg with an offset of -1.
> >  
> > +$ref: "dsa.yaml#"
> > +
> >  patternProperties:
> >    "^(ethernet-)?ports$":
> >      type: object
> > -    properties:
> > -      '#address-cells':
> > -        const: 1
> > -      '#size-cells':
> > -        const: 0
> > -
> >      patternProperties:
> >        "^(ethernet-)?port@[0-6]$":
> >          type: object
> >          description: Ethernet switch ports
> > -
> >          $ref: dsa-port.yaml#
> 
> So here you need 'unevaluatedProperties: false'.
> 
> unevaluatedProperties only applies to the properties defined in a single 
> node level, and child nodes properties from 2 schemas can't 'see' each 
> other. IOW, what dsa.yaml has in child nodes has no effect on this node. 

I'm buttoning up v4 right now and removing this line deletion.
unevaluatedProperties: false exists under the etherent-port node, just
at the end of the properties list.

Since the etherent-ports node in net/dsa/dsa.yaml has
unevaluatedProperties: false, I understand that isn't necessary here.

> 
> >  
> >          properties:
> > @@ -116,7 +111,7 @@ required:
> >    - compatible
> >    - reg
> >  
> > -additionalProperties: true
> > +unevaluatedProperties: false
> 
> So this has no effect on anything within "^(ethernet-)?port@[0-6]$" and 
> below.
> 
> Rob


From rafael at kernel.org  Fri Dec  2 11:46:25 2022
From: rafael at kernel.org (Rafael J. Wysocki)
Date: Fri, 2 Dec 2022 20:46:25 +0100
Subject: [PATCH] Revert "cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()"
In-Reply-To: <CAJZ5v0ixHocQbu6-zs3dMDsiw8vdPyv=8Re7N4kUckeGkLhUzg@mail.gmail.com>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <18947e09733a17935af9a123ccf9b6e92faeaf9b.1669958641.git.viresh.kumar@linaro.org>
 <CAJZ5v0ixHocQbu6-zs3dMDsiw8vdPyv=8Re7N4kUckeGkLhUzg@mail.gmail.com>
Message-ID: <CAJZ5v0hc8CsvqLKxi5iRq7iR0bkt25dRnLBd23mx-zdi2Sjgsw@mail.gmail.com>

On Fri, Dec 2, 2022 at 1:17 PM Rafael J. Wysocki <rafael at kernel.org> wrote:
>
> On Fri, Dec 2, 2022 at 6:26 AM Viresh Kumar <viresh.kumar at linaro.org> wrote:
> >
> > This reverts commit 6a17b3876bc8303612d7ad59ecf7cbc0db418bcd.
> >
> > This commit caused regression on Banana Pi R64 (MT7622), revert until
> > the problem is identified and fixed properly.
> >
> > Link: https://lore.kernel.org/all/930778a1-5e8b-6df6-3276-42dcdadaf682 at systemli.org/
> > Cc: v5.19+ <stable at vger.kernel.org> # v5.19+
> > Reported-by: Nick <vincent at systemli.org>
> > Signed-off-by: Viresh Kumar <viresh.kumar at linaro.org>
>
> Do you want me to push this revert for -rc8?

After all, I've decided to queue it up for 6.2, thanks!

> > ---
> >  drivers/cpufreq/mediatek-cpufreq.c | 147 +++++++++++++++++++----------
> >  1 file changed, 96 insertions(+), 51 deletions(-)
> >
> > diff --git a/drivers/cpufreq/mediatek-cpufreq.c b/drivers/cpufreq/mediatek-cpufreq.c
> > index 7f2680bc9a0f..4466d0c91a6a 100644
> > --- a/drivers/cpufreq/mediatek-cpufreq.c
> > +++ b/drivers/cpufreq/mediatek-cpufreq.c
> > @@ -8,7 +8,6 @@
> >  #include <linux/cpu.h>
> >  #include <linux/cpufreq.h>
> >  #include <linux/cpumask.h>
> > -#include <linux/minmax.h>
> >  #include <linux/module.h>
> >  #include <linux/of.h>
> >  #include <linux/of_platform.h>
> > @@ -16,6 +15,8 @@
> >  #include <linux/pm_opp.h>
> >  #include <linux/regulator/consumer.h>
> >
> > +#define VOLT_TOL               (10000)
> > +
> >  struct mtk_cpufreq_platform_data {
> >         int min_volt_shift;
> >         int max_volt_shift;
> > @@ -55,7 +56,6 @@ struct mtk_cpu_dvfs_info {
> >         unsigned int opp_cpu;
> >         unsigned long current_freq;
> >         const struct mtk_cpufreq_platform_data *soc_data;
> > -       int vtrack_max;
> >         bool ccifreq_bound;
> >  };
> >
> > @@ -82,7 +82,6 @@ static int mtk_cpufreq_voltage_tracking(struct mtk_cpu_dvfs_info *info,
> >         struct regulator *proc_reg = info->proc_reg;
> >         struct regulator *sram_reg = info->sram_reg;
> >         int pre_vproc, pre_vsram, new_vsram, vsram, vproc, ret;
> > -       int retry = info->vtrack_max;
> >
> >         pre_vproc = regulator_get_voltage(proc_reg);
> >         if (pre_vproc < 0) {
> > @@ -90,44 +89,91 @@ static int mtk_cpufreq_voltage_tracking(struct mtk_cpu_dvfs_info *info,
> >                         "invalid Vproc value: %d\n", pre_vproc);
> >                 return pre_vproc;
> >         }
> > +       /* Vsram should not exceed the maximum allowed voltage of SoC. */
> > +       new_vsram = min(new_vproc + soc_data->min_volt_shift,
> > +                       soc_data->sram_max_volt);
> > +
> > +       if (pre_vproc < new_vproc) {
> > +               /*
> > +                * When scaling up voltages, Vsram and Vproc scale up step
> > +                * by step. At each step, set Vsram to (Vproc + 200mV) first,
> > +                * then set Vproc to (Vsram - 100mV).
> > +                * Keep doing it until Vsram and Vproc hit target voltages.
> > +                */
> > +               do {
> > +                       pre_vsram = regulator_get_voltage(sram_reg);
> > +                       if (pre_vsram < 0) {
> > +                               dev_err(info->cpu_dev,
> > +                                       "invalid Vsram value: %d\n", pre_vsram);
> > +                               return pre_vsram;
> > +                       }
> > +                       pre_vproc = regulator_get_voltage(proc_reg);
> > +                       if (pre_vproc < 0) {
> > +                               dev_err(info->cpu_dev,
> > +                                       "invalid Vproc value: %d\n", pre_vproc);
> > +                               return pre_vproc;
> > +                       }
> >
> > -       pre_vsram = regulator_get_voltage(sram_reg);
> > -       if (pre_vsram < 0) {
> > -               dev_err(info->cpu_dev, "invalid Vsram value: %d\n", pre_vsram);
> > -               return pre_vsram;
> > -       }
> > +                       vsram = min(new_vsram,
> > +                                   pre_vproc + soc_data->min_volt_shift);
> >
> > -       new_vsram = clamp(new_vproc + soc_data->min_volt_shift,
> > -                         soc_data->sram_min_volt, soc_data->sram_max_volt);
> > +                       if (vsram + VOLT_TOL >= soc_data->sram_max_volt) {
> > +                               vsram = soc_data->sram_max_volt;
> >
> > -       do {
> > -               if (pre_vproc <= new_vproc) {
> > -                       vsram = clamp(pre_vproc + soc_data->max_volt_shift,
> > -                                     soc_data->sram_min_volt, new_vsram);
> > -                       ret = regulator_set_voltage(sram_reg, vsram,
> > -                                                   soc_data->sram_max_volt);
> > +                               /*
> > +                                * If the target Vsram hits the maximum voltage,
> > +                                * try to set the exact voltage value first.
> > +                                */
> > +                               ret = regulator_set_voltage(sram_reg, vsram,
> > +                                                           vsram);
> > +                               if (ret)
> > +                                       ret = regulator_set_voltage(sram_reg,
> > +                                                       vsram - VOLT_TOL,
> > +                                                       vsram);
> >
> > -                       if (ret)
> > -                               return ret;
> > -
> > -                       if (vsram == soc_data->sram_max_volt ||
> > -                           new_vsram == soc_data->sram_min_volt)
> >                                 vproc = new_vproc;
> > -                       else
> > +                       } else {
> > +                               ret = regulator_set_voltage(sram_reg, vsram,
> > +                                                           vsram + VOLT_TOL);
> > +
> >                                 vproc = vsram - soc_data->min_volt_shift;
> > +                       }
> > +                       if (ret)
> > +                               return ret;
> >
> >                         ret = regulator_set_voltage(proc_reg, vproc,
> > -                                                   soc_data->proc_max_volt);
> > +                                                   vproc + VOLT_TOL);
> >                         if (ret) {
> >                                 regulator_set_voltage(sram_reg, pre_vsram,
> > -                                                     soc_data->sram_max_volt);
> > +                                                     pre_vsram);
> >                                 return ret;
> >                         }
> > -               } else if (pre_vproc > new_vproc) {
> > +               } while (vproc < new_vproc || vsram < new_vsram);
> > +       } else if (pre_vproc > new_vproc) {
> > +               /*
> > +                * When scaling down voltages, Vsram and Vproc scale down step
> > +                * by step. At each step, set Vproc to (Vsram - 200mV) first,
> > +                * then set Vproc to (Vproc + 100mV).
> > +                * Keep doing it until Vsram and Vproc hit target voltages.
> > +                */
> > +               do {
> > +                       pre_vproc = regulator_get_voltage(proc_reg);
> > +                       if (pre_vproc < 0) {
> > +                               dev_err(info->cpu_dev,
> > +                                       "invalid Vproc value: %d\n", pre_vproc);
> > +                               return pre_vproc;
> > +                       }
> > +                       pre_vsram = regulator_get_voltage(sram_reg);
> > +                       if (pre_vsram < 0) {
> > +                               dev_err(info->cpu_dev,
> > +                                       "invalid Vsram value: %d\n", pre_vsram);
> > +                               return pre_vsram;
> > +                       }
> > +
> >                         vproc = max(new_vproc,
> >                                     pre_vsram - soc_data->max_volt_shift);
> >                         ret = regulator_set_voltage(proc_reg, vproc,
> > -                                                   soc_data->proc_max_volt);
> > +                                                   vproc + VOLT_TOL);
> >                         if (ret)
> >                                 return ret;
> >
> > @@ -137,24 +183,32 @@ static int mtk_cpufreq_voltage_tracking(struct mtk_cpu_dvfs_info *info,
> >                                 vsram = max(new_vsram,
> >                                             vproc + soc_data->min_volt_shift);
> >
> > -                       ret = regulator_set_voltage(sram_reg, vsram,
> > -                                                   soc_data->sram_max_volt);
> > +                       if (vsram + VOLT_TOL >= soc_data->sram_max_volt) {
> > +                               vsram = soc_data->sram_max_volt;
> > +
> > +                               /*
> > +                                * If the target Vsram hits the maximum voltage,
> > +                                * try to set the exact voltage value first.
> > +                                */
> > +                               ret = regulator_set_voltage(sram_reg, vsram,
> > +                                                           vsram);
> > +                               if (ret)
> > +                                       ret = regulator_set_voltage(sram_reg,
> > +                                                       vsram - VOLT_TOL,
> > +                                                       vsram);
> > +                       } else {
> > +                               ret = regulator_set_voltage(sram_reg, vsram,
> > +                                                           vsram + VOLT_TOL);
> > +                       }
> > +
> >                         if (ret) {
> >                                 regulator_set_voltage(proc_reg, pre_vproc,
> > -                                                     soc_data->proc_max_volt);
> > +                                                     pre_vproc);
> >                                 return ret;
> >                         }
> > -               }
> > -
> > -               pre_vproc = vproc;
> > -               pre_vsram = vsram;
> > -
> > -               if (--retry < 0) {
> > -                       dev_err(info->cpu_dev,
> > -                               "over loop count, failed to set voltage\n");
> > -                       return -EINVAL;
> > -               }
> > -       } while (vproc != new_vproc || vsram != new_vsram);
> > +               } while (vproc > new_vproc + VOLT_TOL ||
> > +                        vsram > new_vsram + VOLT_TOL);
> > +       }
> >
> >         return 0;
> >  }
> > @@ -250,8 +304,8 @@ static int mtk_cpufreq_set_target(struct cpufreq_policy *policy,
> >          * If the new voltage or the intermediate voltage is higher than the
> >          * current voltage, scale up voltage first.
> >          */
> > -       target_vproc = max(inter_vproc, vproc);
> > -       if (pre_vproc <= target_vproc) {
> > +       target_vproc = (inter_vproc > vproc) ? inter_vproc : vproc;
> > +       if (pre_vproc < target_vproc) {
> >                 ret = mtk_cpufreq_set_voltage(info, target_vproc);
> >                 if (ret) {
> >                         dev_err(cpu_dev,
> > @@ -513,15 +567,6 @@ static int mtk_cpu_dvfs_info_init(struct mtk_cpu_dvfs_info *info, int cpu)
> >          */
> >         info->need_voltage_tracking = (info->sram_reg != NULL);
> >
> > -       /*
> > -        * We assume min voltage is 0 and tracking target voltage using
> > -        * min_volt_shift for each iteration.
> > -        * The vtrack_max is 3 times of expeted iteration count.
> > -        */
> > -       info->vtrack_max = 3 * DIV_ROUND_UP(max(info->soc_data->sram_max_volt,
> > -                                               info->soc_data->proc_max_volt),
> > -                                           info->soc_data->min_volt_shift);
> > -
> >         return 0;
> >
> >  out_disable_inter_clock:
> > --


From colin.foster at in-advantage.com  Fri Dec  2 12:45:51 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  2 Dec 2022 12:45:51 -0800
Subject: [PATCH v4 net-next 1/9] dt-bindings: net: dsa: sf2: fix brcm,use-bcm-hdr documentation
In-Reply-To: <20221202204559.162619-1-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
Message-ID: <20221202204559.162619-2-colin.foster@in-advantage.com>

The property use-bcm-hdr was documented as an entry under the ports node
for the bcm_sf2 DSA switch. This property is actually evaluated for each
port. Correct the documentation to match the actual behavior and properly
reference dsa-port.yaml for additional properties of the node.

Suggested-by: Rob Herring <robh at kernel.org>
Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Acked-by: Florian Fainelli <f.fainelli at gmail.com>
Reviewed-by: Rob Herring <robh at kernel.org>
---

v3 -> v4
  * Add Acked and Reviewed tags

v3
  * New patch

---
 .../devicetree/bindings/net/dsa/brcm,sf2.yaml     | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/brcm,sf2.yaml b/Documentation/devicetree/bindings/net/dsa/brcm,sf2.yaml
index d159ac78cec1..eed16e216fb6 100644
--- a/Documentation/devicetree/bindings/net/dsa/brcm,sf2.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/brcm,sf2.yaml
@@ -85,11 +85,16 @@ properties:
   ports:
     type: object
 
-    properties:
-      brcm,use-bcm-hdr:
-        description: if present, indicates that the switch port has Broadcom
-          tags enabled (per-packet metadata)
-        type: boolean
+    patternProperties:
+      '^port@[0-9a-f]$':
+        $ref: dsa-port.yaml#
+        unevaluatedProperties: false
+
+        properties:
+          brcm,use-bcm-hdr:
+            description: if present, indicates that the switch port has Broadcom
+              tags enabled (per-packet metadata)
+            type: boolean
 
 required:
   - reg
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  2 12:45:50 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  2 Dec 2022 12:45:50 -0800
Subject: [PATCH v4 net-next 0/9] dt-binding preparation for ocelot switches
Message-ID: <20221202204559.162619-1-colin.foster@in-advantage.com>

Ocelot switches have the abilitiy to be used internally via
memory-mapped IO or externally via SPI or PCIe. This brings up issues
for documentation, where the same chip might be accessed internally in a
switchdev manner, or externally in a DSA configuration. This patch set
is perparation to bring DSA functionality to the VSC7512, utilizing as
much as possible with an almost identical VSC7514 chip.

This patch set changed quite a bit from v2, so I'll omit the background
of how those sets came to be. Rob offered a lot of very useful guidance.
My thanks.

At the end of the day, with this patch set, there should be a framework
to document Ocelot switches (and any switch) in scenarios where they can
be controlled internally (ethernet-switch) or externally (dsa-switch).

---

v3 -> v4
  * Renamed "base" to "ethernet-ports" to avoid confusion with the concept
    of a base class.
  * Squash ("dt-bindings: net: dsa: mediatek,mt7530: fix port description location")
    patch into ("dt-bindings: net: dsa: utilize base definitions for standard dsa
    switches")
  * Corrections to fix confusion about additonalProperties vs unevaluatedProperties.
    See specific patches for details.

v2 -> v3
  * Restructured everything to use a "base" iref for devices that don't
    have additional properties, and simply a "ref" for devices that do.
  * New patches to fix up brcm,sf2, qca8k, and mt7530
  * Fix unevaluatedProperties errors from previous sets (see specific
    patches for more detail)
  * Removed redundant "Device Tree Binding" from titles, where applicable.

v1 -> v2
  * Two MFD patches were brought into the MFD tree, so are dropped
  * Add first patch 1/6 to allow DSA devices to add ports and port
    properties
  * Test qca8k against new dt-bindings and fix warnings. (patch 2/6)
  * Add tags (patch 3/6)
  * Fix vsc7514 refs and properties

---

Colin Foster (9):
  dt-bindings: net: dsa: sf2: fix brcm,use-bcm-hdr documentation
  dt-bindings: net: dsa: qca8k: remove address-cells and size-cells from
    switch node
  dt-bindings: net: dsa: utilize base definitions for standard dsa
    switches
  dt-bindings: net: dsa: allow additional ethernet-port properties
  dt-bindings: net: dsa: qca8k: utilize shared dsa.yaml
  dt-bindings: net: dsa: mediatek,mt7530: remove unnecessary dsa-port
    reference
  dt-bindings: net: add generic ethernet-switch
  dt-bindings: net: add generic ethernet-switch-port binding
  dt-bindings: net: mscc,vsc7514-switch: utilize generic
    ethernet-switch.yaml

 .../bindings/net/dsa/arrow,xrs700x.yaml       |  2 +-
 .../devicetree/bindings/net/dsa/brcm,b53.yaml |  2 +-
 .../devicetree/bindings/net/dsa/brcm,sf2.yaml | 15 +++--
 .../devicetree/bindings/net/dsa/dsa-port.yaml | 24 +------
 .../devicetree/bindings/net/dsa/dsa.yaml      | 47 +++++++-------
 .../net/dsa/hirschmann,hellcreek.yaml         |  2 +-
 .../bindings/net/dsa/mediatek,mt7530.yaml     | 17 ++---
 .../bindings/net/dsa/microchip,ksz.yaml       |  2 +-
 .../bindings/net/dsa/microchip,lan937x.yaml   |  2 +-
 .../bindings/net/dsa/mscc,ocelot.yaml         |  2 +-
 .../bindings/net/dsa/nxp,sja1105.yaml         |  2 +-
 .../devicetree/bindings/net/dsa/qca8k.yaml    | 14 +----
 .../devicetree/bindings/net/dsa/realtek.yaml  |  2 +-
 .../bindings/net/dsa/renesas,rzn1-a5psw.yaml  |  2 +-
 .../bindings/net/ethernet-switch-port.yaml    | 25 ++++++++
 .../bindings/net/ethernet-switch.yaml         | 62 +++++++++++++++++++
 .../bindings/net/mscc,vsc7514-switch.yaml     | 31 +---------
 MAINTAINERS                                   |  2 +
 18 files changed, 142 insertions(+), 113 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
 create mode 100644 Documentation/devicetree/bindings/net/ethernet-switch.yaml

-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  2 12:45:52 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  2 Dec 2022 12:45:52 -0800
Subject: [PATCH v4 net-next 2/9] dt-bindings: net: dsa: qca8k: remove address-cells and size-cells from switch node
In-Reply-To: <20221202204559.162619-1-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
Message-ID: <20221202204559.162619-3-colin.foster@in-advantage.com>

The children of the switch node don't have a unit address, and therefore
should not need the #address-cells or #size-cells entries. Fix the example
schemas accordingly.

Suggested-by: Vladimir Oltean <olteanv at gmail.com>
Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
Reviewed-by: Rob Herring <robh at kernel.org>
---

v3 -> v4
  * Add Reviewed tags

v3
  * New patch

---
 Documentation/devicetree/bindings/net/dsa/qca8k.yaml | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/qca8k.yaml b/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
index 978162df51f7..6fc9bc985726 100644
--- a/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
@@ -148,8 +148,6 @@ examples:
 
         switch at 10 {
             compatible = "qca,qca8337";
-            #address-cells = <1>;
-            #size-cells = <0>;
             reset-gpios = <&gpio 42 GPIO_ACTIVE_LOW>;
             reg = <0x10>;
 
@@ -209,8 +207,6 @@ examples:
 
         switch at 10 {
             compatible = "qca,qca8337";
-            #address-cells = <1>;
-            #size-cells = <0>;
             reset-gpios = <&gpio 42 GPIO_ACTIVE_LOW>;
             reg = <0x10>;
 
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  2 12:45:54 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  2 Dec 2022 12:45:54 -0800
Subject: [PATCH v4 net-next 4/9] dt-bindings: net: dsa: allow additional ethernet-port properties
In-Reply-To: <20221202204559.162619-1-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
Message-ID: <20221202204559.162619-5-colin.foster@in-advantage.com>

Explicitly allow additional properties for both the ethernet-port and
ethernet-ports properties. This specifically will allow the qca8k.yaml
binding to use shared properties.

Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
---

v3 -> v4
  * Change ethernet-ports node to have "unevaluatedProperties: false"
    instead of "additionalProperties: true"
  * Change ethernet-port node to have "additionalProperties: true" instead
    of "unevaluatedProperties: true"
  * Add Reviewed tag

v2 -> v3
  * No change

v1 -> v2
  * New patch

---
 Documentation/devicetree/bindings/net/dsa/dsa.yaml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
index b9e366e46aed..5081f4979f1b 100644
--- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
@@ -38,6 +38,8 @@ patternProperties:
       '#size-cells':
         const: 0
 
+    unevaluatedProperties: false
+
     patternProperties:
       "^(ethernet-)?port@[0-9]+$":
         type: object
@@ -45,7 +47,7 @@ patternProperties:
 
         $ref: dsa-port.yaml#
 
-        unevaluatedProperties: false
+        additionalProperties: true
 
 oneOf:
   - required:
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  2 12:45:55 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  2 Dec 2022 12:45:55 -0800
Subject: [PATCH v4 net-next 5/9] dt-bindings: net: dsa: qca8k: utilize shared dsa.yaml
In-Reply-To: <20221202204559.162619-1-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
Message-ID: <20221202204559.162619-6-colin.foster@in-advantage.com>

The dsa.yaml binding contains duplicated bindings for address and size
cells, as well as the reference to dsa-port.yaml. Instead of duplicating
this information, remove the reference to dsa-port.yaml and include the
full reference to dsa.yaml.

Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Suggested-by: Vladimir Oltean <olteanv at gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
---

v3 -> v4
  * Add Reviewed tag
  * Remove unnecessary blank line deletion

v2 -> v3
  * Remove #address-cells and #size-cells from v2. The examples were
    incorrect and fixed elsewhere.
  * Remove erroneous unevaluatedProperties: true under Ethernet Port.
  * Add back ref: dsa-port.yaml#.

v1 -> v2
  * Add #address-cells and #size-cells to the switch layer. They aren't
    part of dsa.yaml.
  * Add unevaluatedProperties: true to the ethernet-port layer so it can
    correctly read properties from dsa.yaml.

---
 Documentation/devicetree/bindings/net/dsa/qca8k.yaml | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/qca8k.yaml b/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
index 6fc9bc985726..389892592aac 100644
--- a/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
@@ -66,15 +66,11 @@ properties:
                  With the legacy mapping the reg corresponding to the internal
                  mdio is the switch reg with an offset of -1.
 
+$ref: "dsa.yaml#"
+
 patternProperties:
   "^(ethernet-)?ports$":
     type: object
-    properties:
-      '#address-cells':
-        const: 1
-      '#size-cells':
-        const: 0
-
     patternProperties:
       "^(ethernet-)?port@[0-6]$":
         type: object
@@ -116,7 +112,7 @@ required:
   - compatible
   - reg
 
-additionalProperties: true
+unevaluatedProperties: false
 
 examples:
   - |
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  2 12:45:56 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  2 Dec 2022 12:45:56 -0800
Subject: [PATCH v4 net-next 6/9] dt-bindings: net: dsa: mediatek,mt7530: remove unnecessary dsa-port reference
In-Reply-To: <20221202204559.162619-1-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
Message-ID: <20221202204559.162619-7-colin.foster@in-advantage.com>

dsa.yaml contains a reference to dsa-port.yaml, so a duplicate reference to
the binding isn't necessary. Remove this unnecessary reference.

Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Suggested-by: Vladimir Oltean <olteanv at gmail.com>
Reviewed-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
---

v3 -> v4
  * Add Florian Reviewed tag

v2 -> v3
  * Keep "unevaluatedProperties: false" under the switch ports node.

v1 -> v2
  * Add Reviewed-by

---
 Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
index b815272531fa..b65e55be3ae2 100644
--- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
@@ -157,7 +157,6 @@ patternProperties:
     patternProperties:
       "^(ethernet-)?port@[0-9]+$":
         allOf:
-          - $ref: dsa-port.yaml#
           - if:
               required: [ ethernet ]
             then:
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  2 12:45:53 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  2 Dec 2022 12:45:53 -0800
Subject: [PATCH v4 net-next 3/9] dt-bindings: net: dsa: utilize base definitions for standard dsa switches
In-Reply-To: <20221202204559.162619-1-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
Message-ID: <20221202204559.162619-4-colin.foster@in-advantage.com>

DSA switches can fall into one of two categories: switches where all ports
follow standard '(ethernet-)?port' properties, and switches that have
additional properties for the ports.

The scenario where DSA ports are all standardized can be handled by
swtiches with a reference to the new 'dsa.yaml#/$defs/ethernet-ports'.

The scenario where DSA ports require additional properties can reference
'$dsa.yaml#' directly. This will allow switches to reference these standard
defitions of the DSA switch, but add additional properties under the port
nodes.

Suggested-by: Rob Herring <robh at kernel.org>
Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Reviewed-by: Linus Walleij <linus.walleij at linaro.org>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
Acked-by: Alvin ?ipraga <alsi at bang-olufsen.dk> # realtek
---

v3 -> v4
  * Rename "$defs/base" to "$defs/ethernet-ports" to avoid implication of a
    "base class" and fix commit message accordingly
  * Add the following to the common etherent-ports node:
      "additionalProperties: false"
      "#address-cells" property
      "#size-cells" property
  * Fix "etherenet-ports@[0-9]+" to correctly be "ethernet-port@[0-9]+"
  * Remove unnecessary newline
  * Apply changes to mediatek,mt7530.yaml that were previously in a separate patch
  * Add Reviewed and Acked tags

v3
  * New patch

---
 .../bindings/net/dsa/arrow,xrs700x.yaml       |  2 +-
 .../devicetree/bindings/net/dsa/brcm,b53.yaml |  2 +-
 .../devicetree/bindings/net/dsa/dsa.yaml      | 25 ++++++++++++++++---
 .../net/dsa/hirschmann,hellcreek.yaml         |  2 +-
 .../bindings/net/dsa/mediatek,mt7530.yaml     | 16 +++---------
 .../bindings/net/dsa/microchip,ksz.yaml       |  2 +-
 .../bindings/net/dsa/microchip,lan937x.yaml   |  2 +-
 .../bindings/net/dsa/mscc,ocelot.yaml         |  2 +-
 .../bindings/net/dsa/nxp,sja1105.yaml         |  2 +-
 .../devicetree/bindings/net/dsa/realtek.yaml  |  2 +-
 .../bindings/net/dsa/renesas,rzn1-a5psw.yaml  |  2 +-
 11 files changed, 35 insertions(+), 24 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
index 259a0c6547f3..5888e3a0169a 100644
--- a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
 title: Arrow SpeedChips XRS7000 Series Switch Device Tree Bindings
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
 
 maintainers:
   - George McCollister <george.mccollister at gmail.com>
diff --git a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
index 1219b830b1a4..5bef4128d175 100644
--- a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
@@ -66,7 +66,7 @@ required:
   - reg
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
   - if:
       properties:
         compatible:
diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
index b9d48e357e77..b9e366e46aed 100644
--- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
@@ -19,9 +19,6 @@ description:
 select: false
 
 properties:
-  $nodename:
-    pattern: "^(ethernet-)?switch(@.*)?$"
-
   dsa,member:
     minItems: 2
     maxItems: 2
@@ -58,4 +55,26 @@ oneOf:
 
 additionalProperties: true
 
+$defs:
+  ethernet-ports:
+    description: A DSA switch without any extra port properties
+    $ref: '#/'
+
+    patternProperties:
+      "^(ethernet-)?ports$":
+        type: object
+        additionalProperties: false
+
+        properties:
+          '#address-cells':
+            const: 1
+          '#size-cells':
+            const: 0
+
+        patternProperties:
+          "^(ethernet-)?port@[0-9]+$":
+            description: Ethernet switch ports
+            $ref: dsa-port.yaml#
+            unevaluatedProperties: false
+
 ...
diff --git a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
index 73b774eadd0b..748ef9983ce2 100644
--- a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
 title: Hirschmann Hellcreek TSN Switch Device Tree Bindings
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
 
 maintainers:
   - Andrew Lunn <andrew at lunn.ch>
diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
index f2e9ff3f580b..b815272531fa 100644
--- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
@@ -156,17 +156,6 @@ patternProperties:
 
     patternProperties:
       "^(ethernet-)?port@[0-9]+$":
-        type: object
-        description: Ethernet switch ports
-
-        unevaluatedProperties: false
-
-        properties:
-          reg:
-            description:
-              Port address described must be 5 or 6 for CPU port and from 0 to 5
-              for user ports.
-
         allOf:
           - $ref: dsa-port.yaml#
           - if:
@@ -174,6 +163,9 @@ patternProperties:
             then:
               properties:
                 reg:
+                  description:
+                    Port address described must be 5 or 6 for CPU port and from
+                    0 to 5 for user ports
                   enum:
                     - 5
                     - 6
@@ -238,7 +230,7 @@ $defs:
                       - sgmii
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
   - if:
       required:
         - mediatek,mcm
diff --git a/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml b/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
index 4da75b1f9533..a4b53434c85c 100644
--- a/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
@@ -11,7 +11,7 @@ maintainers:
   - Woojung Huh <Woojung.Huh at microchip.com>
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
   - $ref: /schemas/spi/spi-peripheral-props.yaml#
 
 properties:
diff --git a/Documentation/devicetree/bindings/net/dsa/microchip,lan937x.yaml b/Documentation/devicetree/bindings/net/dsa/microchip,lan937x.yaml
index 630bf0f8294b..4aee3bf4c2f4 100644
--- a/Documentation/devicetree/bindings/net/dsa/microchip,lan937x.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/microchip,lan937x.yaml
@@ -10,7 +10,7 @@ maintainers:
   - UNGLinuxDriver at microchip.com
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
 
 properties:
   compatible:
diff --git a/Documentation/devicetree/bindings/net/dsa/mscc,ocelot.yaml b/Documentation/devicetree/bindings/net/dsa/mscc,ocelot.yaml
index 8d93ed9c172c..85014a590a35 100644
--- a/Documentation/devicetree/bindings/net/dsa/mscc,ocelot.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/mscc,ocelot.yaml
@@ -78,7 +78,7 @@ required:
   - reg
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
   - if:
       properties:
         compatible:
diff --git a/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml b/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml
index 1e26d876d146..826e2db98974 100644
--- a/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml
@@ -13,7 +13,7 @@ description:
   depends on the SPI bus master driver.
 
 allOf:
-  - $ref: "dsa.yaml#"
+  - $ref: dsa.yaml#/$defs/ethernet-ports
   - $ref: /schemas/spi/spi-peripheral-props.yaml#
 
 maintainers:
diff --git a/Documentation/devicetree/bindings/net/dsa/realtek.yaml b/Documentation/devicetree/bindings/net/dsa/realtek.yaml
index 1a7d45a8ad66..cfd69c2604ea 100644
--- a/Documentation/devicetree/bindings/net/dsa/realtek.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/realtek.yaml
@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
 title: Realtek switches for unmanaged switches
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
 
 maintainers:
   - Linus Walleij <linus.walleij at linaro.org>
diff --git a/Documentation/devicetree/bindings/net/dsa/renesas,rzn1-a5psw.yaml b/Documentation/devicetree/bindings/net/dsa/renesas,rzn1-a5psw.yaml
index 0a0d62b6c00e..833d2f68daa1 100644
--- a/Documentation/devicetree/bindings/net/dsa/renesas,rzn1-a5psw.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/renesas,rzn1-a5psw.yaml
@@ -14,7 +14,7 @@ description: |
   handles 4 ports + 1 CPU management port.
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
 
 properties:
   compatible:
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  2 12:45:57 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  2 Dec 2022 12:45:57 -0800
Subject: [PATCH v4 net-next 7/9] dt-bindings: net: add generic ethernet-switch
In-Reply-To: <20221202204559.162619-1-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
Message-ID: <20221202204559.162619-8-colin.foster@in-advantage.com>

The dsa.yaml bindings had references that can apply to non-dsa switches. To
prevent duplication of this information, keep the dsa-specific information
inside dsa.yaml and move the remaining generic information to the newly
created ethernet-switch.yaml.

Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Suggested-by: Vladimir Oltean <olteanv at gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
---

v3 -> v4
  * Update ethernet-ports and ethernet-port nodes to match what the new
    dsa.yaml has. Namely:
      "unevaluatedProperties: false" instead of "additionalProperties: true"
      "additionalProperties: true" instead of "unevaluatedProperties: true"
    for ethernet-ports and ethernet-port, respectively.
  * Add Florian Reviewed tag

v2 -> v3
  * Change ethernet-switch.yaml title from "Ethernet Switch Device
    Tree Bindings" to "Generic Ethernet Switch"
  * Rework ethernet-switch.yaml description
  * Add base defs structure for switches that don't have any additional
    properties.
  * Add "additionalProperties: true" under "^(ethernet-)?ports$" node
  * Correct port reference from /schemas/net/dsa/dsa-port.yaml# to
    ethernet-controller.yaml#

v1 -> v2
  * No net change, but deletions from dsa.yaml included the changes for
    "addionalProperties: true" under ports and "unevaluatedProperties:
    true" under port.

---
 .../devicetree/bindings/net/dsa/dsa.yaml      | 28 +-------
 .../bindings/net/ethernet-switch.yaml         | 66 +++++++++++++++++++
 MAINTAINERS                                   |  1 +
 3 files changed, 69 insertions(+), 26 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/net/ethernet-switch.yaml

diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
index 5081f4979f1b..843205ea722d 100644
--- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
@@ -18,6 +18,8 @@ description:
 
 select: false
 
+$ref: "/schemas/net/ethernet-switch.yaml#"
+
 properties:
   dsa,member:
     minItems: 2
@@ -29,32 +31,6 @@ properties:
       (single device hanging off a CPU port) must not specify this property
     $ref: /schemas/types.yaml#/definitions/uint32-array
 
-patternProperties:
-  "^(ethernet-)?ports$":
-    type: object
-    properties:
-      '#address-cells':
-        const: 1
-      '#size-cells':
-        const: 0
-
-    unevaluatedProperties: false
-
-    patternProperties:
-      "^(ethernet-)?port@[0-9]+$":
-        type: object
-        description: Ethernet switch ports
-
-        $ref: dsa-port.yaml#
-
-        additionalProperties: true
-
-oneOf:
-  - required:
-      - ports
-  - required:
-      - ethernet-ports
-
 additionalProperties: true
 
 $defs:
diff --git a/Documentation/devicetree/bindings/net/ethernet-switch.yaml b/Documentation/devicetree/bindings/net/ethernet-switch.yaml
new file mode 100644
index 000000000000..afeb9ffd84c8
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/ethernet-switch.yaml
@@ -0,0 +1,66 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/ethernet-switch.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Generic Ethernet Switch
+
+maintainers:
+  - Andrew Lunn <andrew at lunn.ch>
+  - Florian Fainelli <f.fainelli at gmail.com>
+  - Vivien Didelot <vivien.didelot at gmail.com>
+
+description:
+  Ethernet switches are multi-port Ethernet controllers. Each port has
+  its own number and is represented as its own Ethernet controller.
+  The minimum required functionality is to pass packets to software.
+  They may or may not be able to forward packets automonously between
+  ports.
+
+select: false
+
+properties:
+  $nodename:
+    pattern: "^(ethernet-)?switch(@.*)?$"
+
+patternProperties:
+  "^(ethernet-)?ports$":
+    type: object
+    unevaluatedProperties: false
+
+    properties:
+      '#address-cells':
+        const: 1
+      '#size-cells':
+        const: 0
+
+    patternProperties:
+      "^(ethernet-)?port@[0-9]+$":
+        type: object
+        description: Ethernet switch ports
+
+        $ref: ethernet-controller.yaml#
+
+        additionalProperties: true
+
+oneOf:
+  - required:
+      - ports
+  - required:
+      - ethernet-ports
+
+additionalProperties: true
+
+$defs:
+  base:
+    description: An ethernet switch without any extra port properties
+    $ref: '#/'
+
+    patternProperties:
+      "^(ethernet-)?port@[0-9]+$":
+        description: Ethernet switch ports
+        $ref: ethernet-controller.yaml#
+        unevaluatedProperties: false
+
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index 52aeb86c1167..d574cae901b3 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -14337,6 +14337,7 @@ M:	Florian Fainelli <f.fainelli at gmail.com>
 M:	Vladimir Oltean <olteanv at gmail.com>
 S:	Maintained
 F:	Documentation/devicetree/bindings/net/dsa/
+F:	Documentation/devicetree/bindings/net/ethernet-switch.yaml
 F:	drivers/net/dsa/
 F:	include/linux/dsa/
 F:	include/linux/platform_data/dsa.h
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  2 12:45:58 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  2 Dec 2022 12:45:58 -0800
Subject: [PATCH v4 net-next 8/9] dt-bindings: net: add generic ethernet-switch-port binding
In-Reply-To: <20221202204559.162619-1-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
Message-ID: <20221202204559.162619-9-colin.foster@in-advantage.com>

The dsa-port.yaml binding had several references that can be common to all
ethernet ports, not just dsa-specific ones. Break out the generic bindings
to ethernet-switch-port.yaml they can be used by non-dsa drivers.

Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Suggested-by: Vladimir Oltean <olteanv at gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
---

v3 -> v4
  * Add Florian Reviewed tag

v2 -> v3
  * Change dsa-port title from "DSA Switch port Device Tree Bindings"
    to "Generic DSA Switch port"
  * Add reference to ethernet-switch-port.yaml# in dsa-port.yaml
  * Change title of ethernet-switch-port.yaml from "Ethernet Switch
    port Device Tree Bindings" to "Generic Ethernet Switch port"
  * Remove most properties from ethernet-switch-port.yaml. They're
    all in ethernet-controller, and are all allowed.
  * ethernet-switch.yaml now only references ethernet-switch-port.yaml#
    under the port node.

v1 -> v2
  * Remove accidental addition of
    "$ref: /schemas/net/ethernet-switch-port.yaml" which should be kept
    out of dsa-port so that it doesn't get referenced multiple times
    through both ethernet-switch and dsa-port.

---
 .../devicetree/bindings/net/dsa/dsa-port.yaml | 24 ++----------------
 .../bindings/net/ethernet-switch-port.yaml    | 25 +++++++++++++++++++
 .../bindings/net/ethernet-switch.yaml         |  6 +----
 MAINTAINERS                                   |  1 +
 4 files changed, 29 insertions(+), 27 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/net/ethernet-switch-port.yaml

diff --git a/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml b/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
index 9abb8eba5fad..5b457f41273a 100644
--- a/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
@@ -4,7 +4,7 @@
 $id: http://devicetree.org/schemas/net/dsa/dsa-port.yaml#
 $schema: http://devicetree.org/meta-schemas/core.yaml#
 
-title: Ethernet Switch port Device Tree Bindings
+title: Generic DSA Switch port
 
 maintainers:
   - Andrew Lunn <andrew at lunn.ch>
@@ -14,8 +14,7 @@ maintainers:
 description:
   Ethernet switch port Description
 
-allOf:
-  - $ref: /schemas/net/ethernet-controller.yaml#
+$ref: /schemas/net/ethernet-switch-port.yaml#
 
 properties:
   reg:
@@ -58,25 +57,6 @@ properties:
       - rtl8_4t
       - seville
 
-  phy-handle: true
-
-  phy-mode: true
-
-  fixed-link: true
-
-  mac-address: true
-
-  sfp: true
-
-  managed: true
-
-  rx-internal-delay-ps: true
-
-  tx-internal-delay-ps: true
-
-required:
-  - reg
-
 # CPU and DSA ports must have phylink-compatible link descriptions
 if:
   oneOf:
diff --git a/Documentation/devicetree/bindings/net/ethernet-switch-port.yaml b/Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
new file mode 100644
index 000000000000..3d7da6916fb8
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
@@ -0,0 +1,25 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/ethernet-switch-port.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Generic Ethernet Switch port
+
+maintainers:
+  - Andrew Lunn <andrew at lunn.ch>
+  - Florian Fainelli <f.fainelli at gmail.com>
+  - Vivien Didelot <vivien.didelot at gmail.com>
+
+description:
+  Ethernet switch port Description
+
+$ref: ethernet-controller.yaml#
+
+properties:
+  reg:
+    description: Port number
+
+additionalProperties: true
+
+...
diff --git a/Documentation/devicetree/bindings/net/ethernet-switch.yaml b/Documentation/devicetree/bindings/net/ethernet-switch.yaml
index afeb9ffd84c8..1e8b7649a9b2 100644
--- a/Documentation/devicetree/bindings/net/ethernet-switch.yaml
+++ b/Documentation/devicetree/bindings/net/ethernet-switch.yaml
@@ -40,10 +40,6 @@ patternProperties:
         type: object
         description: Ethernet switch ports
 
-        $ref: ethernet-controller.yaml#
-
-        additionalProperties: true
-
 oneOf:
   - required:
       - ports
@@ -60,7 +56,7 @@ $defs:
     patternProperties:
       "^(ethernet-)?port@[0-9]+$":
         description: Ethernet switch ports
-        $ref: ethernet-controller.yaml#
+        $ref: ethernet-switch-port.yaml#
         unevaluatedProperties: false
 
 ...
diff --git a/MAINTAINERS b/MAINTAINERS
index d574cae901b3..fe5f52c9864a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -14337,6 +14337,7 @@ M:	Florian Fainelli <f.fainelli at gmail.com>
 M:	Vladimir Oltean <olteanv at gmail.com>
 S:	Maintained
 F:	Documentation/devicetree/bindings/net/dsa/
+F:	Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
 F:	Documentation/devicetree/bindings/net/ethernet-switch.yaml
 F:	drivers/net/dsa/
 F:	include/linux/dsa/
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  2 12:45:59 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  2 Dec 2022 12:45:59 -0800
Subject: [PATCH v4 net-next 9/9] dt-bindings: net: mscc,vsc7514-switch: utilize generic ethernet-switch.yaml
In-Reply-To: <20221202204559.162619-1-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
Message-ID: <20221202204559.162619-10-colin.foster@in-advantage.com>

Several bindings for ethernet switches are available for non-dsa switches
by way of ethernet-switch.yaml. Remove these duplicate entries and utilize
the common bindings for the VSC7514.

Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Suggested-by: Vladimir Oltean <olteanv at gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
---

v3 -> v4
  * Add Florian Reviewed tag

v2 -> v3:
  * Reference ethernet-switch-port.yaml# instead of ethernet-controller
  * Undo the addition of "unevaluatedProperties: true" from v2. Those
    were only added because of my misunderstandings.
  * Keep #address-cells and #size-cells in the ports node.

v1 -> v2:
  * Fix "$ref: ethernet-switch.yaml" placement. Oops.
  * Add "unevaluatedProperties: true" to ethernet-ports layer so it
    can correctly read into ethernet-switch.yaml
  * Add "unevaluatedProperties: true" to ethernet-port layer so it can
    correctly read into ethernet-controller.yaml

---
 .../bindings/net/mscc,vsc7514-switch.yaml     | 31 ++-----------------
 1 file changed, 3 insertions(+), 28 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/mscc,vsc7514-switch.yaml b/Documentation/devicetree/bindings/net/mscc,vsc7514-switch.yaml
index ee0a504bdb24..5ffe831e59e4 100644
--- a/Documentation/devicetree/bindings/net/mscc,vsc7514-switch.yaml
+++ b/Documentation/devicetree/bindings/net/mscc,vsc7514-switch.yaml
@@ -18,10 +18,9 @@ description: |
   packets using CPU. Additionally, PTP is supported as well as FDMA for faster
   packet extraction/injection.
 
-properties:
-  $nodename:
-    pattern: "^switch@[0-9a-f]+$"
+$ref: ethernet-switch.yaml#
 
+properties:
   compatible:
     const: mscc,vsc7514-switch
 
@@ -100,35 +99,11 @@ properties:
 
     patternProperties:
       "^port@[0-9a-f]+$":
-        type: object
-        description: Ethernet ports handled by the switch
 
-        $ref: ethernet-controller.yaml#
+        $ref: ethernet-switch-port.yaml#
 
         unevaluatedProperties: false
 
-        properties:
-          reg:
-            description: Switch port number
-
-          phy-handle: true
-
-          phy-mode: true
-
-          fixed-link: true
-
-          mac-address: true
-
-        required:
-          - reg
-          - phy-mode
-
-        oneOf:
-          - required:
-              - phy-handle
-          - required:
-              - fixed-link
-
 required:
   - compatible
   - reg
-- 
2.25.1



From arinc.unal at arinc9.com  Fri Dec  2 13:45:34 2022
From: arinc.unal at arinc9.com (=?UTF-8?B?QXLEsW7DpyDDnE5BTA==?=)
Date: Sat, 3 Dec 2022 00:45:34 +0300
Subject: [PATCH v4 net-next 3/9] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <20221202204559.162619-4-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-4-colin.foster@in-advantage.com>
Message-ID: <bfc6810b-3c21-201b-3c4f-a0def3928597@arinc9.com>

On 2.12.2022 23:45, Colin Foster wrote:
> DSA switches can fall into one of two categories: switches where all ports
> follow standard '(ethernet-)?port' properties, and switches that have
> additional properties for the ports.
> 
> The scenario where DSA ports are all standardized can be handled by
> swtiches with a reference to the new 'dsa.yaml#/$defs/ethernet-ports'.
> 
> The scenario where DSA ports require additional properties can reference
> '$dsa.yaml#' directly. This will allow switches to reference these standard
> defitions of the DSA switch, but add additional properties under the port
> nodes.
> 
> Suggested-by: Rob Herring <robh at kernel.org>
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Reviewed-by: Linus Walleij <linus.walleij at linaro.org>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> Acked-by: Alvin ?ipraga <alsi at bang-olufsen.dk> # realtek
> ---
> 
> v3 -> v4
>    * Rename "$defs/base" to "$defs/ethernet-ports" to avoid implication of a
>      "base class" and fix commit message accordingly
>    * Add the following to the common etherent-ports node:
>        "additionalProperties: false"
>        "#address-cells" property
>        "#size-cells" property
>    * Fix "etherenet-ports@[0-9]+" to correctly be "ethernet-port@[0-9]+"
>    * Remove unnecessary newline
>    * Apply changes to mediatek,mt7530.yaml that were previously in a separate patch
>    * Add Reviewed and Acked tags
> 
> v3
>    * New patch
> 
> ---
>   .../bindings/net/dsa/arrow,xrs700x.yaml       |  2 +-
>   .../devicetree/bindings/net/dsa/brcm,b53.yaml |  2 +-
>   .../devicetree/bindings/net/dsa/dsa.yaml      | 25 ++++++++++++++++---
>   .../net/dsa/hirschmann,hellcreek.yaml         |  2 +-
>   .../bindings/net/dsa/mediatek,mt7530.yaml     | 16 +++---------
>   .../bindings/net/dsa/microchip,ksz.yaml       |  2 +-
>   .../bindings/net/dsa/microchip,lan937x.yaml   |  2 +-
>   .../bindings/net/dsa/mscc,ocelot.yaml         |  2 +-
>   .../bindings/net/dsa/nxp,sja1105.yaml         |  2 +-
>   .../devicetree/bindings/net/dsa/realtek.yaml  |  2 +-
>   .../bindings/net/dsa/renesas,rzn1-a5psw.yaml  |  2 +-
>   11 files changed, 35 insertions(+), 24 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> index 259a0c6547f3..5888e3a0169a 100644
> --- a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
>   title: Arrow SpeedChips XRS7000 Series Switch Device Tree Bindings
>   
>   allOf:
> -  - $ref: dsa.yaml#
> +  - $ref: dsa.yaml#/$defs/ethernet-ports
>   
>   maintainers:
>     - George McCollister <george.mccollister at gmail.com>
> diff --git a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> index 1219b830b1a4..5bef4128d175 100644
> --- a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> @@ -66,7 +66,7 @@ required:
>     - reg
>   
>   allOf:
> -  - $ref: dsa.yaml#
> +  - $ref: dsa.yaml#/$defs/ethernet-ports
>     - if:
>         properties:
>           compatible:
> diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> index b9d48e357e77..b9e366e46aed 100644
> --- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> @@ -19,9 +19,6 @@ description:
>   select: false
>   
>   properties:
> -  $nodename:
> -    pattern: "^(ethernet-)?switch(@.*)?$"
> -
>     dsa,member:
>       minItems: 2
>       maxItems: 2
> @@ -58,4 +55,26 @@ oneOf:
>   
>   additionalProperties: true
>   
> +$defs:
> +  ethernet-ports:
> +    description: A DSA switch without any extra port properties
> +    $ref: '#/'
> +
> +    patternProperties:
> +      "^(ethernet-)?ports$":
> +        type: object
> +        additionalProperties: false
> +
> +        properties:
> +          '#address-cells':
> +            const: 1
> +          '#size-cells':
> +            const: 0
> +
> +        patternProperties:
> +          "^(ethernet-)?port@[0-9]+$":
> +            description: Ethernet switch ports
> +            $ref: dsa-port.yaml#
> +            unevaluatedProperties: false
> +
>   ...
> diff --git a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> index 73b774eadd0b..748ef9983ce2 100644
> --- a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
>   title: Hirschmann Hellcreek TSN Switch Device Tree Bindings
>   
>   allOf:
> -  - $ref: dsa.yaml#
> +  - $ref: dsa.yaml#/$defs/ethernet-ports
>   
>   maintainers:
>     - Andrew Lunn <andrew at lunn.ch>
> diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> index f2e9ff3f580b..b815272531fa 100644
> --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> @@ -156,17 +156,6 @@ patternProperties:
>   
>       patternProperties:
>         "^(ethernet-)?port@[0-9]+$":
> -        type: object
> -        description: Ethernet switch ports
> -
> -        unevaluatedProperties: false
> -
> -        properties:
> -          reg:
> -            description:
> -              Port address described must be 5 or 6 for CPU port and from 0 to 5
> -              for user ports.

This shouldn't be moved. Please reread our conversation on the previous 
version.

> -
>           allOf:
>             - $ref: dsa-port.yaml#
>             - if:
> @@ -174,6 +163,9 @@ patternProperties:
>               then:
>                 properties:
>                   reg:
> +                  description:
> +                    Port address described must be 5 or 6 for CPU port and from
> +                    0 to 5 for user ports

Ar?n?


From keescook at chromium.org  Fri Dec  2 14:05:43 2022
From: keescook at chromium.org (coverity-bot)
Date: Fri, 2 Dec 2022 14:05:43 -0800
Subject: Coverity: mt7996_rf_regval_set(): Integer handling issues
Message-ID: <202212021405.93CF11D2A@keescook>

Hello!

This is an experimental semi-automated report about issues detected by
Coverity from a scan of next-20221202 as part of the linux-next scan project:
https://scan.coverity.com/projects/linux-next-weekly-scan

You're getting this email because you were associated with the identified
lines of code (noted below) that were touched by commits:

  Thu Dec 1 17:29:14 2022 +0100
    98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")

Coverity reported the following:

*** CID 1527816:  Integer handling issues  (INCOMPATIBLE_CAST)
drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c:657 in mt7996_rf_regval_set()
651
652     static int
653     mt7996_rf_regval_set(void *data, u64 val)
654     {
655     	struct mt7996_dev *dev = data;
656
vvv     CID 1527816:  Integer handling issues  (INCOMPATIBLE_CAST)
vvv     Pointer "&val" points to an object whose effective type is "unsigned long long" (64 bits, unsigned) but is dereferenced as a narrower "unsigned int" (32 bits, unsigned). This may lead to unexpected results depending on machine endianness.
657     	return mt7996_mcu_rf_regval(dev, dev->mt76.debugfs_reg, (u32 *)&val, true);
658     }
659
660     DEFINE_DEBUGFS_ATTRIBUTE(fops_rf_regval, mt7996_rf_regval_get,
661     			 mt7996_rf_regval_set, "0x%08llx\n");
662

If this is a false positive, please let us know so we can mark it as
such, or teach the Coverity rules to be smarter. If not, please make
sure fixes get into linux-next. :) For patches fixing this, please
include these lines (but double-check the "Fixes" first):

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527816 ("Integer handling issues")
Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")

Thanks for your attention!

-- 
Coverity-bot


From keescook at chromium.org  Fri Dec  2 14:11:33 2022
From: keescook at chromium.org (coverity-bot)
Date: Fri, 2 Dec 2022 14:11:33 -0800
Subject: Coverity: mt7996_hw_queue_read(): Integer handling issues
Message-ID: <202212021411.A5E618D3@keescook>

Hello!

This is an experimental semi-automated report about issues detected by
Coverity from a scan of next-20221202 as part of the linux-next scan project:
https://scan.coverity.com/projects/linux-next-weekly-scan

You're getting this email because you were associated with the identified
lines of code (noted below) that were touched by commits:

  Thu Dec 1 17:29:14 2022 +0100
    98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")

Coverity reported the following:

*** CID 1527813:  Integer handling issues  (SIGN_EXTENSION)
drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c:460 in mt7996_hw_queue_read()
454     	for (i = 0; i < size; i++) {
455     		u32 ctrl, head, tail, queued;
456
457     		if (val & BIT(map[i].index))
458     			continue;
459
vvv     CID 1527813:  Integer handling issues  (SIGN_EXTENSION)
vvv     Suspicious implicit sign extension: "map[i].qid" with type "u8" (8 bits, unsigned) is promoted in "map[i].qid << 24" to type "int" (32 bits, signed), then sign-extended to type "unsigned long" (64 bits, unsigned).  If "map[i].qid << 24" is greater than 0x7FFFFFFF, the upper bits of the result will all be 1.
460     		ctrl = BIT(31) | (map[i].pid << 10) | (map[i].qid << 24);
461     		mt76_wr(dev, MT_FL_Q0_CTRL, ctrl);
462
463     		head = mt76_get_field(dev, MT_FL_Q2_CTRL,
464     				      GENMASK(11, 0));
465     		tail = mt76_get_field(dev, MT_FL_Q2_CTRL,

If this is a false positive, please let us know so we can mark it as
such, or teach the Coverity rules to be smarter. If not, please make
sure fixes get into linux-next. :) For patches fixing this, please
include these lines (but double-check the "Fixes" first):

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527813 ("Integer handling issues")
Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")

Thanks for your attention!

-- 
Coverity-bot


From keescook at chromium.org  Fri Dec  2 14:13:02 2022
From: keescook at chromium.org (coverity-bot)
Date: Fri, 2 Dec 2022 14:13:02 -0800
Subject: Coverity: mt7996_mcu_rx_radar_detected(): Insecure data handling
Message-ID: <202212021413.392BADAF@keescook>

Hello!

This is an experimental semi-automated report about issues detected by
Coverity from a scan of next-20221202 as part of the linux-next scan project:
https://scan.coverity.com/projects/linux-next-weekly-scan

You're getting this email because you were associated with the identified
lines of code (noted below) that were touched by commits:

  Thu Dec 1 17:29:14 2022 +0100
    98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")

Coverity reported the following:

*** CID 1527812:  Insecure data handling  (TAINTED_SCALAR)
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c:338 in mt7996_mcu_rx_radar_detected()
332     {
333     	struct mt76_phy *mphy = &dev->mt76.phy;
334     	struct mt7996_mcu_rdd_report *r;
335
336     	r = (struct mt7996_mcu_rdd_report *)skb->data;
337
vvv     CID 1527812:  Insecure data handling  (TAINTED_SCALAR)
vvv     Using tainted variable "r->band_idx" as an index into an array "(*dev).mt76.phys".
338     	mphy = dev->mt76.phys[r->band_idx];
339     	if (!mphy)
340     		return;
341
342     	if (r->band_idx == MT_RX_SEL2)
343     		cfg80211_background_radar_event(mphy->hw->wiphy,

If this is a false positive, please let us know so we can mark it as
such, or teach the Coverity rules to be smarter. If not, please make
sure fixes get into linux-next. :) For patches fixing this, please
include these lines (but double-check the "Fixes" first):

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527812 ("Insecure data handling")
Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")

Thanks for your attention!

-- 
Coverity-bot


From keescook at chromium.org  Fri Dec  2 14:21:46 2022
From: keescook at chromium.org (coverity-bot)
Date: Fri, 2 Dec 2022 14:21:46 -0800
Subject: Coverity: mt7921_check_offload_capability(): Resource leaks
Message-ID: <202212021421.6B6D4F45@keescook>

Hello!

This is an experimental semi-automated report about issues detected by
Coverity from a scan of next-20221202 as part of the linux-next scan project:
https://scan.coverity.com/projects/linux-next-weekly-scan

You're getting this email because you were associated with the identified
lines of code (noted below) that were touched by commits:

  Thu Dec 1 17:29:13 2022 +0100
    034ae28b56f1 ("wifi: mt76: mt7921: introduce remain_on_channel support")

Coverity reported the following:

*** CID 1527806:  Resource leaks  (RESOURCE_LEAK)
drivers/net/wireless/mediatek/mt76/mt7921/init.c:178 in mt7921_check_offload_capability()
172     	ret = request_firmware(&fw, fw_wm, dev);
173     	if (ret)
174     		return ret;
175
176     	if (!fw || !fw->data || fw->size < sizeof(*hdr)) {
177     		dev_err(dev, "Invalid firmware\n");
vvv     CID 1527806:  Resource leaks  (RESOURCE_LEAK)
vvv     Variable "fw" going out of scope leaks the storage it points to.
178     		return -EINVAL;
179     	}
180
181     	data = fw->data;
182     	hdr = (const void *)(fw->data + fw->size - sizeof(*hdr));
183

If this is a false positive, please let us know so we can mark it as
such, or teach the Coverity rules to be smarter. If not, please make
sure fixes get into linux-next. :) For patches fixing this, please
include these lines (but double-check the "Fixes" first):

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527806 ("Resource leaks")
Fixes: 034ae28b56f1 ("wifi: mt76: mt7921: introduce remain_on_channel support")

Thanks for your attention!

-- 
Coverity-bot


From keescook at chromium.org  Fri Dec  2 14:23:47 2022
From: keescook at chromium.org (coverity-bot)
Date: Fri, 2 Dec 2022 14:23:47 -0800
Subject: Coverity: mt76x0_phy_get_target_power(): Memory - illegal accesses
Message-ID: <202212021423.5D5F1FD@keescook>

Hello!

This is an experimental semi-automated report about issues detected by
Coverity from a scan of next-20221202 as part of the linux-next scan project:
https://scan.coverity.com/projects/linux-next-weekly-scan

You're getting this email because you were associated with the identified
lines of code (noted below) that were touched by commits:

  Thu Dec 1 17:29:12 2022 +0100
    b376d96362d8 ("wifi: mt76: move mt76_rate_power from core to mt76x02 driver code")

Coverity reported the following:

*** CID 1527804:  Memory - illegal accesses  (OVERRUN)
drivers/net/wireless/mediatek/mt76/mt76x0/phy.c:645 in mt76x0_phy_get_target_power()
639     	case 4:
640     		/* vht rates */
641     		tx_rate = info[1] & 0xf;
642     		if (tx_rate > 9)
643     			return -EINVAL;
644
vvv     CID 1527804:  Memory - illegal accesses  (OVERRUN)
vvv     Overrunning array "dev->rate_power.vht" of 2 bytes at byte offset 9 using index "tx_rate" (which evaluates to 9).
645     		*target_power = cur_power + dev->rate_power.vht[tx_rate];
646     		*target_pa_power = mt76x0_phy_get_rf_pa_mode(dev, 1, tx_rate);
647     		break;
648     	default:
649     		/* ht rates */
650     		tx_rate = info[1] & 0x7f;

If this is a false positive, please let us know so we can mark it as
such, or teach the Coverity rules to be smarter. If not, please make
sure fixes get into linux-next. :) For patches fixing this, please
include these lines (but double-check the "Fixes" first):

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527804 ("Memory - illegal accesses")
Fixes: b376d96362d8 ("wifi: mt76: move mt76_rate_power from core to mt76x02 driver code")

Thanks for your attention!

-- 
Coverity-bot


From keescook at chromium.org  Fri Dec  2 14:24:30 2022
From: keescook at chromium.org (coverity-bot)
Date: Fri, 2 Dec 2022 14:24:30 -0800
Subject: Coverity: mt7915_mcu_get_chan_mib_info(): Memory - illegal accesses
Message-ID: <202212021424.34C0F695E4@keescook>

Hello!

This is an experimental semi-automated report about issues detected by
Coverity from a scan of next-20221202 as part of the linux-next scan project:
https://scan.coverity.com/projects/linux-next-weekly-scan

You're getting this email because you were associated with the identified
lines of code (noted below) that were touched by commits:

  Thu Feb 3 13:57:56 2022 +0100
    417a4534d223 ("mt76: mt7915: update mt7915_chan_mib_offs for mt7916")

Coverity reported the following:

*** CID 1527801:  Memory - illegal accesses  (OVERRUN)
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c:3005 in mt7915_mcu_get_chan_mib_info()
2999     		start = 5;
3000     		ofs = 0;
3001     	}
3002
3003     	for (i = 0; i < 5; i++) {
3004     		req[i].band = cpu_to_le32(phy->mt76->band_idx);
vvv     CID 1527801:  Memory - illegal accesses  (OVERRUN)
vvv     Overrunning array "offs" of 9 4-byte elements at element index 9 (byte offset 39) using index "i + start" (which evaluates to 9).
3005     		req[i].offs = cpu_to_le32(offs[i + start]);
3006
3007     		if (!is_mt7915(&dev->mt76) && i == 3)
3008     			break;
3009     	}
3010

If this is a false positive, please let us know so we can mark it as
such, or teach the Coverity rules to be smarter. If not, please make
sure fixes get into linux-next. :) For patches fixing this, please
include these lines (but double-check the "Fixes" first):

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527801 ("Memory - illegal accesses")
Fixes: 417a4534d223 ("mt76: mt7915: update mt7915_chan_mib_offs for mt7916")

Thanks for your attention!

-- 
Coverity-bot


From keescook at chromium.org  Fri Dec  2 14:26:12 2022
From: keescook at chromium.org (coverity-bot)
Date: Fri, 2 Dec 2022 14:26:12 -0800
Subject: Coverity: mt7915_rate_txpower_get(): Resource leaks
Message-ID: <202212021426.BE8F5215@keescook>

Hello!

This is an experimental semi-automated report about issues detected by
Coverity from a scan of next-20221202 as part of the linux-next scan project:
https://scan.coverity.com/projects/linux-next-weekly-scan

You're getting this email because you were associated with the identified
lines of code (noted below) that were touched by commits:

  Thu Dec 1 17:29:14 2022 +0100
    bd2404d42821 ("wifi: mt76: mt7915: add basedband Txpower info into debugfs")

Coverity reported the following:

*** CID 1527799:  Resource leaks  (RESOURCE_LEAK)
drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c:999 in mt7915_rate_txpower_get()
993     	buf = kzalloc(sz, GFP_KERNEL);
994     	if (!buf)
995     		return -ENOMEM;
996
997     	ret = mt7915_mcu_get_txpower_sku(phy, txpwr, sizeof(txpwr));
998     	if (ret)
vvv     CID 1527799:  Resource leaks  (RESOURCE_LEAK)
vvv     Variable "buf" going out of scope leaks the storage it points to.
999     		return ret;
1000
1001     	/* Txpower propagation path: TMAC -> TXV -> BBP */
1002     	len += scnprintf(buf + len, sz - len,
1003     			 "\nPhy%d Tx power table (channel %d)\n",
1004     			 phy != &dev->phy, phy->mt76->chandef.chan->hw_value);

If this is a false positive, please let us know so we can mark it as
such, or teach the Coverity rules to be smarter. If not, please make
sure fixes get into linux-next. :) For patches fixing this, please
include these lines (but double-check the "Fixes" first):

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527799 ("Resource leaks")
Fixes: bd2404d42821 ("wifi: mt76: mt7915: add basedband Txpower info into debugfs")

Thanks for your attention!

-- 
Coverity-bot


From keescook at chromium.org  Fri Dec  2 14:27:57 2022
From: keescook at chromium.org (coverity-bot)
Date: Fri, 2 Dec 2022 14:27:57 -0800
Subject: Coverity: mt7996_mcu_ie_countdown(): Insecure data handling
Message-ID: <202212021427.3A86EE0@keescook>

Hello!

This is an experimental semi-automated report about issues detected by
Coverity from a scan of next-20221202 as part of the linux-next scan project:
https://scan.coverity.com/projects/linux-next-weekly-scan

You're getting this email because you were associated with the identified
lines of code (noted below) that were touched by commits:

  Thu Dec 1 17:29:14 2022 +0100
    98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")

Coverity reported the following:

*** CID 1527797:  Insecure data handling  (TAINTED_SCALAR)
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c:415 in mt7996_mcu_ie_countdown()
409     	struct mt76_phy *mphy = &dev->mt76.phy;
410     	struct mt7996_mcu_rxd *rxd = (struct mt7996_mcu_rxd *)skb->data;
411     	const char *data = (char *)&rxd[1], *tail;
412     	struct header *hdr = (struct header *)data;
413     	struct tlv *tlv = (struct tlv *)(data + 4);
414
vvv     CID 1527797:  Insecure data handling  (TAINTED_SCALAR)
vvv     Using tainted variable "hdr->band" as an index into an array "(*dev).mt76.phys".
415     	if (hdr->band && dev->mt76.phys[hdr->band])
416     		mphy = dev->mt76.phys[hdr->band];
417
418     	tail = skb->data + le16_to_cpu(rxd->len);
419     	while (data + sizeof(struct tlv) < tail && le16_to_cpu(tlv->len)) {
420     		switch (le16_to_cpu(tlv->tag)) {

If this is a false positive, please let us know so we can mark it as
such, or teach the Coverity rules to be smarter. If not, please make
sure fixes get into linux-next. :) For patches fixing this, please
include these lines (but double-check the "Fixes" first):

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527797 ("Insecure data handling")
Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")

Thanks for your attention!

-- 
Coverity-bot


From keescook at chromium.org  Fri Dec  2 15:04:49 2022
From: keescook at chromium.org (Kees Cook)
Date: Fri, 2 Dec 2022 15:04:49 -0800
Subject: Coverity: mt7915_mcu_get_chan_mib_info(): Memory - illegal
 accesses
In-Reply-To: <1a16599dd5e4eed86bae112a232a3599af43a5f2.camel@mediatek.com>
References: <202212021424.34C0F695E4@keescook>
 <1a16599dd5e4eed86bae112a232a3599af43a5f2.camel@mediatek.com>
Message-ID: <202212021504.A1942911@keescook>

On Fri, Dec 02, 2022 at 10:56:19PM +0000, Ryder Lee wrote:
> On Fri, 2022-12-02 at 14:24 -0800, coverity-bot wrote:
> > Hello!
> > 
> > This is an experimental semi-automated report about issues detected
> > by
> > Coverity from a scan of next-20221202 as part of the linux-next scan
> > project:
> > 
> https://urldefense.com/v3/__https://scan.coverity.com/projects/linux-next-weekly-scan__;!!CTRNKA9wMg0ARbw!j7j_C0KpO4VD2yMOodvpeIexTGq4fhy2yq6nokNua9u4LToiUOLk4ou8JFFNrXkrh80d5BK2k44faRQstHE9$?
> >  
> > 
> > You're getting this email because you were associated with the
> > identified
> > lines of code (noted below) that were touched by commits:
> > 
> >   Thu Feb 3 13:57:56 2022 +0100
> >     417a4534d223 ("mt76: mt7915: update mt7915_chan_mib_offs for
> > mt7916")
> > 
> > Coverity reported the following:
> > 
> > *** CID 1527801:  Memory - illegal accesses  (OVERRUN)
> > drivers/net/wireless/mediatek/mt76/mt7915/mcu.c:3005 in
> > mt7915_mcu_get_chan_mib_info()
> > 2999     		start = 5;
> > 3000     		ofs = 0;
> > 3001     	}
> > 3002
> > 3003     	for (i = 0; i < 5; i++) {
> > 3004     		req[i].band = cpu_to_le32(phy->mt76->band_idx);
> > vvv     CID 1527801:  Memory - illegal accesses  (OVERRUN)
> > vvv     Overrunning array "offs" of 9 4-byte elements at element
> > index 9 (byte offset 39) using index "i + start" (which evaluates to
> > 9).
> > 3005     		req[i].offs = cpu_to_le32(offs[i + start]);
> > 3006
> > 3007     		if (!is_mt7915(&dev->mt76) && i == 3)
> > 3008     			break;
> > 3009     	}
> > 3010
> > 
> > If this is a false positive, please let us know so we can mark it as
> > such, or teach the Coverity rules to be smarter. If not, please make
> > sure fixes get into linux-next. :) For patches fixing this, please
> > include these lines (but double-check the "Fixes" first):
> > 
> 
> I think this is a false postive as the subsequent check 'if
> (!is_mt7915(&dev->mt76) && i == 3)' should break array "offs" of 8.

Ah, okay. What if is_mt7915(&dev->mt76) is always true?

-Kees

> 
> Ryder
> 
> > Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
> > Addresses-Coverity-ID: 1527801 ("Memory - illegal accesses")
> > Fixes: 417a4534d223 ("mt76: mt7915: update mt7915_chan_mib_offs for
> > mt7916")
> > 
> > Thanks for your attention!
> > 

-- 
Kees Cook


From Ryder.Lee at mediatek.com  Fri Dec  2 14:56:19 2022
From: Ryder.Lee at mediatek.com (Ryder Lee)
Date: Fri, 2 Dec 2022 22:56:19 +0000
Subject: Coverity: mt7915_mcu_get_chan_mib_info(): Memory - illegal
 accesses
In-Reply-To: <202212021424.34C0F695E4@keescook>
References: <202212021424.34C0F695E4@keescook>
Message-ID: <1a16599dd5e4eed86bae112a232a3599af43a5f2.camel@mediatek.com>

On Fri, 2022-12-02 at 14:24 -0800, coverity-bot wrote:
> Hello!
> 
> This is an experimental semi-automated report about issues detected
> by
> Coverity from a scan of next-20221202 as part of the linux-next scan
> project:
> 
https://urldefense.com/v3/__https://scan.coverity.com/projects/linux-next-weekly-scan__;!!CTRNKA9wMg0ARbw!j7j_C0KpO4VD2yMOodvpeIexTGq4fhy2yq6nokNua9u4LToiUOLk4ou8JFFNrXkrh80d5BK2k44faRQstHE9$?
>  
> 
> You're getting this email because you were associated with the
> identified
> lines of code (noted below) that were touched by commits:
> 
>   Thu Feb 3 13:57:56 2022 +0100
>     417a4534d223 ("mt76: mt7915: update mt7915_chan_mib_offs for
> mt7916")
> 
> Coverity reported the following:
> 
> *** CID 1527801:  Memory - illegal accesses  (OVERRUN)
> drivers/net/wireless/mediatek/mt76/mt7915/mcu.c:3005 in
> mt7915_mcu_get_chan_mib_info()
> 2999     		start = 5;
> 3000     		ofs = 0;
> 3001     	}
> 3002
> 3003     	for (i = 0; i < 5; i++) {
> 3004     		req[i].band = cpu_to_le32(phy->mt76->band_idx);
> vvv     CID 1527801:  Memory - illegal accesses  (OVERRUN)
> vvv     Overrunning array "offs" of 9 4-byte elements at element
> index 9 (byte offset 39) using index "i + start" (which evaluates to
> 9).
> 3005     		req[i].offs = cpu_to_le32(offs[i + start]);
> 3006
> 3007     		if (!is_mt7915(&dev->mt76) && i == 3)
> 3008     			break;
> 3009     	}
> 3010
> 
> If this is a false positive, please let us know so we can mark it as
> such, or teach the Coverity rules to be smarter. If not, please make
> sure fixes get into linux-next. :) For patches fixing this, please
> include these lines (but double-check the "Fixes" first):
> 

I think this is a false postive as the subsequent check 'if
(!is_mt7915(&dev->mt76) && i == 3)' should break array "offs" of 8.

Ryder

> Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
> Addresses-Coverity-ID: 1527801 ("Memory - illegal accesses")
> Fixes: 417a4534d223 ("mt76: mt7915: update mt7915_chan_mib_offs for
> mt7916")
> 
> Thanks for your attention!
> 

From Ryder.Lee at mediatek.com  Fri Dec  2 15:42:36 2022
From: Ryder.Lee at mediatek.com (Ryder Lee)
Date: Fri, 2 Dec 2022 23:42:36 +0000
Subject: Coverity: mt7915_mcu_get_chan_mib_info(): Memory - illegal
 accesses
In-Reply-To: <202212021504.A1942911@keescook>
References: <202212021424.34C0F695E4@keescook>
	 <1a16599dd5e4eed86bae112a232a3599af43a5f2.camel@mediatek.com>
	 <202212021504.A1942911@keescook>
Message-ID: <6285b967a37d7f641b13ba73c10033450ee8ea7f.camel@mediatek.com>

On Fri, 2022-12-02 at 15:04 -0800, Kees Cook wrote:
> > 
> On Fri, Dec 02, 2022 at 10:56:19PM +0000, Ryder Lee wrote:
> > On Fri, 2022-12-02 at 14:24 -0800, coverity-bot wrote:
> > > Hello!
> > > 
> > > This is an experimental semi-automated report about issues
> > > detected
> > > by
> > > Coverity from a scan of next-20221202 as part of the linux-next
> > > scan
> > > project:
> > > 
> > 
> > 
https://urldefense.com/v3/__https://scan.coverity.com/projects/linux-next-weekly-scan__;!!CTRNKA9wMg0ARbw!j7j_C0KpO4VD2yMOodvpeIexTGq4fhy2yq6nokNua9u4LToiUOLk4ou8JFFNrXkrh80d5BK2k44faRQstHE9$
> >  
> > >  
> > > 
> > > You're getting this email because you were associated with the
> > > identified
> > > lines of code (noted below) that were touched by commits:
> > > 
> > >   Thu Feb 3 13:57:56 2022 +0100
> > >     417a4534d223 ("mt76: mt7915: update mt7915_chan_mib_offs for
> > > mt7916")
> > > 
> > > Coverity reported the following:
> > > 
> > > *** CID 1527801:  Memory - illegal accesses  (OVERRUN)
> > > drivers/net/wireless/mediatek/mt76/mt7915/mcu.c:3005 in
> > > mt7915_mcu_get_chan_mib_info()
> > > 2999     		start = 5;
> > > 3000     		ofs = 0;
> > > 3001     	}
> > > 3002
> > > 3003     	for (i = 0; i < 5; i++) {
> > > 3004     		req[i].band = cpu_to_le32(phy->mt76->band_idx);
> > > vvv     CID 1527801:  Memory - illegal accesses  (OVERRUN)
> > > vvv     Overrunning array "offs" of 9 4-byte elements at element
> > > index 9 (byte offset 39) using index "i + start" (which evaluates
> > > to
> > > 9).
> > > 3005     		req[i].offs = cpu_to_le32(offs[i + start]);
> > > 3006
> > > 3007     		if (!is_mt7915(&dev->mt76) && i == 3)
> > > 3008     			break;
> > > 3009     	}
> > > 3010
> > > 
> > > If this is a false positive, please let us know so we can mark it
> > > as
> > > such, or teach the Coverity rules to be smarter. If not, please
> > > make
> > > sure fixes get into linux-next. :) For patches fixing this,
> > > please
> > > include these lines (but double-check the "Fixes" first):
> > > 
> > 
> > I think this is a false postive as the subsequent check 'if
> > (!is_mt7915(&dev->mt76) && i == 3)' should break array "offs" of 8.
> 
> Ah, okay. What if is_mt7915(&dev->mt76) is always true?
> 
> -Kees

	int start = 0;

	if (!is_mt7915(&dev->mt76)) {
		start = 5;
		ofs = 0;
	}

	for (i = 0; i < 5; i++) {
		req[i].band = cpu_to_le32(phy->band_idx);
		req[i].offs = cpu_to_le32(offs[i + start]);

		if (!is_mt7915(&dev->mt76) && i == 3) //
			break;
	}

For 'is_mt7915' case, start:0 and i: 0 1 2 3 4, whereas !is_mt7915'
case, start:5 and i: 0 1 2 3 (then break).

I know it's a bit tricky. This is used to differentiate chipset
revision.

Ryder

From keescook at chromium.org  Fri Dec  2 18:17:28 2022
From: keescook at chromium.org (Kees Cook)
Date: Fri, 2 Dec 2022 18:17:28 -0800
Subject: Coverity: mt7915_mcu_get_chan_mib_info(): Memory - illegal
 accesses
In-Reply-To: <6285b967a37d7f641b13ba73c10033450ee8ea7f.camel@mediatek.com>
References: <202212021424.34C0F695E4@keescook>
 <1a16599dd5e4eed86bae112a232a3599af43a5f2.camel@mediatek.com>
 <202212021504.A1942911@keescook>
 <6285b967a37d7f641b13ba73c10033450ee8ea7f.camel@mediatek.com>
Message-ID: <202212021817.E35115E1@keescook>

On Fri, Dec 02, 2022 at 11:42:36PM +0000, Ryder Lee wrote:
> On Fri, 2022-12-02 at 15:04 -0800, Kees Cook wrote:
> > > 
> > On Fri, Dec 02, 2022 at 10:56:19PM +0000, Ryder Lee wrote:
> > > On Fri, 2022-12-02 at 14:24 -0800, coverity-bot wrote:
> > > > Hello!
> > > > 
> > > > This is an experimental semi-automated report about issues
> > > > detected
> > > > by
> > > > Coverity from a scan of next-20221202 as part of the linux-next
> > > > scan
> > > > project:
> > > > 
> > > 
> > > 
> https://urldefense.com/v3/__https://scan.coverity.com/projects/linux-next-weekly-scan__;!!CTRNKA9wMg0ARbw!j7j_C0KpO4VD2yMOodvpeIexTGq4fhy2yq6nokNua9u4LToiUOLk4ou8JFFNrXkrh80d5BK2k44faRQstHE9$
> > >  
> > > >  
> > > > 
> > > > You're getting this email because you were associated with the
> > > > identified
> > > > lines of code (noted below) that were touched by commits:
> > > > 
> > > >   Thu Feb 3 13:57:56 2022 +0100
> > > >     417a4534d223 ("mt76: mt7915: update mt7915_chan_mib_offs for
> > > > mt7916")
> > > > 
> > > > Coverity reported the following:
> > > > 
> > > > *** CID 1527801:  Memory - illegal accesses  (OVERRUN)
> > > > drivers/net/wireless/mediatek/mt76/mt7915/mcu.c:3005 in
> > > > mt7915_mcu_get_chan_mib_info()
> > > > 2999     		start = 5;
> > > > 3000     		ofs = 0;
> > > > 3001     	}
> > > > 3002
> > > > 3003     	for (i = 0; i < 5; i++) {
> > > > 3004     		req[i].band = cpu_to_le32(phy->mt76->band_idx);
> > > > vvv     CID 1527801:  Memory - illegal accesses  (OVERRUN)
> > > > vvv     Overrunning array "offs" of 9 4-byte elements at element
> > > > index 9 (byte offset 39) using index "i + start" (which evaluates
> > > > to
> > > > 9).
> > > > 3005     		req[i].offs = cpu_to_le32(offs[i + start]);
> > > > 3006
> > > > 3007     		if (!is_mt7915(&dev->mt76) && i == 3)
> > > > 3008     			break;
> > > > 3009     	}
> > > > 3010
> > > > 
> > > > If this is a false positive, please let us know so we can mark it
> > > > as
> > > > such, or teach the Coverity rules to be smarter. If not, please
> > > > make
> > > > sure fixes get into linux-next. :) For patches fixing this,
> > > > please
> > > > include these lines (but double-check the "Fixes" first):
> > > > 
> > > 
> > > I think this is a false postive as the subsequent check 'if
> > > (!is_mt7915(&dev->mt76) && i == 3)' should break array "offs" of 8.
> > 
> > Ah, okay. What if is_mt7915(&dev->mt76) is always true?
> > 
> > -Kees
> 
> 	int start = 0;
> 
> 	if (!is_mt7915(&dev->mt76)) {
> 		start = 5;
> 		ofs = 0;
> 	}
> 
> 	for (i = 0; i < 5; i++) {
> 		req[i].band = cpu_to_le32(phy->band_idx);
> 		req[i].offs = cpu_to_le32(offs[i + start]);
> 
> 		if (!is_mt7915(&dev->mt76) && i == 3) //
> 			break;
> 	}
> 
> For 'is_mt7915' case, start:0 and i: 0 1 2 3 4, whereas !is_mt7915'
> case, start:5 and i: 0 1 2 3 (then break).
> 
> I know it's a bit tricky. This is used to differentiate chipset
> revision.

Ah-ha! Gotcha now. Thanks for the details and sorry for the noise! :)

-Kees

-- 
Kees Cook


From Yunfei.Dong at mediatek.com  Fri Dec  2 19:02:52 2022
From: Yunfei.Dong at mediatek.com (=?utf-8?B?WXVuZmVpIERvbmcgKOiRo+S6kemjnik=?=)
Date: Sat, 3 Dec 2022 03:02:52 +0000
Subject: [PATCH v3,1/3] media: dt-bindings: media: mediatek: vcodec: Fix
 clock num not correctly
In-Reply-To: <f98a2f4a-737c-fef5-551b-04a92d255d0e@collabora.com>
References: <20221201121525.30777-1-yunfei.dong@mediatek.com>
	 <20221201235729.GA1718283-robh@kernel.org>
	 <f98a2f4a-737c-fef5-551b-04a92d255d0e@collabora.com>
Message-ID: <90c13f6240ff372d4f54087d787355182dcca616.camel@mediatek.com>

Hi Angelo,

Thanks for your suggestion.

I already sent patch v4 before your suggestion. Looks the solution is
the same.

Could you please help to review patch v4 again when you are free?

Thanks.

Best Regards,
Yunfei Dong

On Fri, 2022-12-02 at 12:37 +0100, AngeloGioacchino Del Regno wrote:
> Il 02/12/22 00:57, Rob Herring ha scritto:
> > On Thu, Dec 01, 2022 at 08:15:22PM +0800, Yunfei Dong wrote:
> > > From: Yunfei Dong <yunfei.dong at mediatek.corp-partner.google.com>
> > > 
> > > mt8195 and mt8192 have different clock numbers, can't write
> > > 'clocks' and
> > > 'clock-names' with const value.
> > > 
> > > Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
> > > ---
> > > Reference series:
> > > [1]: v5 of this series is presend by Allen-KH Cheng.
> > >       message-id: 
> > > 20221128143832.25584-4-allen-kh.cheng at mediatek.com
> > > ---
> > >   .../bindings/media/mediatek,vcodec-subdev-decoder.yaml   | 9
> > > +++------
> > >   1 file changed, 3 insertions(+), 6 deletions(-)
> > > 
> > > diff --git
> > > a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-
> > > decoder.yaml
> > > b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-
> > > decoder.yaml
> > > index 7c5b4a91c59b..09781ef02193 100644
> > > --- a/Documentation/devicetree/bindings/media/mediatek,vcodec-
> > > subdev-decoder.yaml
> > > +++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-
> > > subdev-decoder.yaml
> > > @@ -110,15 +110,12 @@ patternProperties:
> > >             Refer to bindings/iommu/mediatek,iommu.yaml.
> > >   
> > >         clocks:
> > > +        minItems: 1
> > >           maxItems: 5
> > >   
> > >         clock-names:
> > > -        items:
> > > -          - const: sel
> > > -          - const: soc-vdec
> > > -          - const: soc-lat
> > > -          - const: vdec
> > > -          - const: top
> > > +        minItems: 1
> > > +        maxItems: 5
> > 
> > Names need to be defined. This is a step backwards.
> > 
> 
> I was thinking the same but wanted to wait for someone else's opinion
> before.
> 
> Yunfei, this would be...
> 
> - if:
>      properties:
>        compatible:
>          .... mt8192
>    then:
>       clock-names:
>          .... whatever we have
> 
> - if:
>     properties... blah mt8195
>    then:
>      clock-names:
>          ..... new ones
> 
> ...you should know already, but I'm just trying to speed up things
> here.
> 
> Cheers,
> Angelo
> 
> > Rob
> > 
> > >   
> > >         assigned-clocks:
> > >           maxItems: 1
> > > -- 
> > > 2.18.0
> > > 
> > > 
> 
> 

From ryder.lee at mediatek.com  Fri Dec  2 19:22:23 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Sat, 3 Dec 2022 11:22:23 +0800
Subject: [PATCH 2/4] wifi: mt76: mt7996: fix insecure data handling of mt7996_mcu_ie_countdown()
In-Reply-To: <ce05914d5a4d73cea21ef2c359f3a5bb7c61a86e.1670037462.git.ryder.lee@mediatek.com>
References: <ce05914d5a4d73cea21ef2c359f3a5bb7c61a86e.1670037462.git.ryder.lee@mediatek.com>
Message-ID: <e8b579782304fcb92b462abb8874ae4d309aa6aa.1670037462.git.ryder.lee@mediatek.com>

Coverity message:
using tainted "hdr->band" variable as an index into an array "(*dev).mt76.phys".

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527797 ("Insecure data handling")
Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7996/mcu.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
index 04e1d10bbd21..a90b7ca2df63 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
@@ -412,6 +412,9 @@ mt7996_mcu_ie_countdown(struct mt7996_dev *dev, struct sk_buff *skb)
 	struct header *hdr = (struct header *)data;
 	struct tlv *tlv = (struct tlv *)(data + 4);
 
+	if (hdr->band >= ARRAY_SIZE(dev->mt76.phys))
+		return;
+
 	if (hdr->band && dev->mt76.phys[hdr->band])
 		mphy = dev->mt76.phys[hdr->band];
 
-- 
2.18.0



From ryder.lee at mediatek.com  Fri Dec  2 19:22:24 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Sat, 3 Dec 2022 11:22:24 +0800
Subject: [PATCH 3/4] wifi: mt76: mt7996: fix insecure data handling of mt7996_mcu_rx_radar_detected()
In-Reply-To: <ce05914d5a4d73cea21ef2c359f3a5bb7c61a86e.1670037462.git.ryder.lee@mediatek.com>
References: <ce05914d5a4d73cea21ef2c359f3a5bb7c61a86e.1670037462.git.ryder.lee@mediatek.com>
Message-ID: <924d203f061a5bf98c4ade208a88d27b68b2730b.1670037462.git.ryder.lee@mediatek.com>

Coverity message:
using tainted "r->band_idx" variable as an index into an array "(*dev).mt76.phys".

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527812 ("Insecure data handling")
Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7996/mcu.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
index a90b7ca2df63..efb245c8ac84 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
@@ -335,6 +335,9 @@ mt7996_mcu_rx_radar_detected(struct mt7996_dev *dev, struct sk_buff *skb)
 
 	r = (struct mt7996_mcu_rdd_report *)skb->data;
 
+	if (r->band_idx >= ARRAY_SIZE(dev->mt76.phys))
+		return;
+
 	mphy = dev->mt76.phys[r->band_idx];
 	if (!mphy)
 		return;
-- 
2.18.0



From ryder.lee at mediatek.com  Fri Dec  2 19:22:22 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Sat, 3 Dec 2022 11:22:22 +0800
Subject: [PATCH 1/4] wifi: mt76: mt7915: fix mt7915_rate_txpower_get() resource leaks
Message-ID: <ce05914d5a4d73cea21ef2c359f3a5bb7c61a86e.1670037462.git.ryder.lee@mediatek.com>

Coverity message: variable "buf" going out of scope leaks the storage.

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527799 ("Resource leaks")
Fixes: e3296759f347 ("wifi: mt76: mt7915: enable per bandwidth power limit support")
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c
index fb46c2c1784f..a7fdcd1f3d98 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c
@@ -996,7 +996,7 @@ mt7915_rate_txpower_get(struct file *file, char __user *user_buf,
 
 	ret = mt7915_mcu_get_txpower_sku(phy, txpwr, sizeof(txpwr));
 	if (ret)
-		return ret;
+		goto out;
 
 	/* Txpower propagation path: TMAC -> TXV -> BBP */
 	len += scnprintf(buf + len, sz - len,
@@ -1047,6 +1047,8 @@ mt7915_rate_txpower_get(struct file *file, char __user *user_buf,
 			 mt76_get_field(dev, reg, MT_WF_PHY_TPC_POWER));
 
 	ret = simple_read_from_buffer(user_buf, count, ppos, buf, len);
+
+out:
 	kfree(buf);
 	return ret;
 }
-- 
2.18.0



From ryder.lee at mediatek.com  Fri Dec  2 19:22:25 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Sat, 3 Dec 2022 11:22:25 +0800
Subject: [PATCH 4/4] wifi: mt76: mt7996: fix integer handling issue of mt7996_rf_regval_set()
In-Reply-To: <ce05914d5a4d73cea21ef2c359f3a5bb7c61a86e.1670037462.git.ryder.lee@mediatek.com>
References: <ce05914d5a4d73cea21ef2c359f3a5bb7c61a86e.1670037462.git.ryder.lee@mediatek.com>
Message-ID: <c78d01e317aa97bb6778c8f700c18414b2976524.1670037462.git.ryder.lee@mediatek.com>

This code is supposed to set a u32 value, but casting will not work on
big endian systems.

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527816 ("Integer handling issues")
Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c
index 2e4a8909b9e8..99b23aef53a5 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c
@@ -653,8 +653,9 @@ static int
 mt7996_rf_regval_set(void *data, u64 val)
 {
 	struct mt7996_dev *dev = data;
+	u32 val32 = val;
 
-	return mt7996_mcu_rf_regval(dev, dev->mt76.debugfs_reg, (u32 *)&val, true);
+	return mt7996_mcu_rf_regval(dev, dev->mt76.debugfs_reg, &val32, true);
 }
 
 DEFINE_DEBUGFS_ATTRIBUTE(fops_rf_regval, mt7996_rf_regval_get,
-- 
2.18.0



From Ryder.Lee at mediatek.com  Fri Dec  2 20:40:09 2022
From: Ryder.Lee at mediatek.com (Ryder Lee)
Date: Sat, 3 Dec 2022 04:40:09 +0000
Subject: Coverity: mt7996_hw_queue_read(): Integer handling issues
In-Reply-To: <202212021411.A5E618D3@keescook>
References: <202212021411.A5E618D3@keescook>
Message-ID: <786eff1a1751a5bc0dc68d6567be585b635bddb1.camel@mediatek.com>

On Fri, 2022-12-02 at 14:11 -0800, coverity-bot wrote:
> Hello!
> 
> This is an experimental semi-automated report about issues detected
> by
> Coverity from a scan of next-20221202 as part of the linux-next scan
> project:
> 
https://urldefense.com/v3/__https://scan.coverity.com/projects/linux-next-weekly-scan__;!!CTRNKA9wMg0ARbw!jBOoj6LMqqA8E0AyjKQTa-0rVzcFiZ3BbpciEIn7so974kcMBeG4zZm-QU4AudLXY7-jNUSt0unzAt2zirSF$?
>  
> 
> You're getting this email because you were associated with the
> identified
> lines of code (noted below) that were touched by commits:
> 
>   Thu Dec 1 17:29:14 2022 +0100
>     98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi
> 7 (802.11be) devices")
> 
> Coverity reported the following:
> 
> *** CID 1527813:  Integer handling issues  (SIGN_EXTENSION)
> drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c:460 in
> mt7996_hw_queue_read()
> 454     	for (i = 0; i < size; i++) {
> 455     		u32 ctrl, head, tail, queued;
> 456
> 457     		if (val & BIT(map[i].index))
> 458     			continue;
> 459
> vvv     CID 1527813:  Integer handling issues  (SIGN_EXTENSION)
> vvv     Suspicious implicit sign extension: "map[i].qid" with type
> "u8" (8 bits, unsigned) is promoted in "map[i].qid << 24" to type
> "int" (32 bits, signed), then sign-extended to type "unsigned long"
> (64 bits, unsigned).  If "map[i].qid << 24" is greater than
> 0x7FFFFFFF, the upper bits of the result will all be 1.
> 460     		ctrl = BIT(31) | (map[i].pid << 10) |
> (map[i].qid << 24);

u32 ctrl = BIT(31) | (map[i].pid << 10) | (map[i].qid << 24);

Hmm ...where's type "int" (32 bits, signed) from?

Ryder
> 461     		mt76_wr(dev, MT_FL_Q0_CTRL, ctrl);
> 462
> 463     		head = mt76_get_field(dev, MT_FL_Q2_CTRL,
> 464     				      GENMASK(11, 0));
> 465     		tail = mt76_get_field(dev, MT_FL_Q2_CTRL,

From patchwork-bot+netdevbpf at kernel.org  Fri Dec  2 21:50:24 2022
From: patchwork-bot+netdevbpf at kernel.org (patchwork-bot+netdevbpf at kernel.org)
Date: Sat, 03 Dec 2022 05:50:24 +0000
Subject: [PATCH net-next] net: ethernet: mtk_wed: fix sleep while atomic in
 mtk_wed_wo_queue_refill
In-Reply-To: <67ca94bdd3d9eaeb86e52b3050fbca0bcf7bb02f.1669908312.git.lorenzo@kernel.org>
References: <67ca94bdd3d9eaeb86e52b3050fbca0bcf7bb02f.1669908312.git.lorenzo@kernel.org>
Message-ID: <167004662455.29967.4573439399775446639.git-patchwork-notify@kernel.org>

Hello:

This patch was applied to netdev/net-next.git (master)
by Jakub Kicinski <kuba at kernel.org>:

On Thu,  1 Dec 2022 16:26:53 +0100 you wrote:
> In order to fix the following sleep while atomic bug always alloc pages
> with GFP_ATOMIC in mtk_wed_wo_queue_refill since page_frag_alloc runs in
> spin_lock critical section.
> 
> [    9.049719] Hardware name: MediaTek MT7986a RFB (DT)
> [    9.054665] Call trace:
> [    9.057096]  dump_backtrace+0x0/0x154
> [    9.060751]  show_stack+0x14/0x1c
> [    9.064052]  dump_stack_lvl+0x64/0x7c
> [    9.067702]  dump_stack+0x14/0x2c
> [    9.071001]  ___might_sleep+0xec/0x120
> [    9.074736]  __might_sleep+0x4c/0x9c
> [    9.078296]  __alloc_pages+0x184/0x2e4
> [    9.082030]  page_frag_alloc_align+0x98/0x1ac
> [    9.086369]  mtk_wed_wo_queue_refill+0x134/0x234
> [    9.090974]  mtk_wed_wo_init+0x174/0x2c0
> [    9.094881]  mtk_wed_attach+0x7c8/0x7e0
> [    9.098701]  mt7915_mmio_wed_init+0x1f0/0x3a0 [mt7915e]
> [    9.103940]  mt7915_pci_probe+0xec/0x3bc [mt7915e]
> [    9.108727]  pci_device_probe+0xac/0x13c
> [    9.112638]  really_probe.part.0+0x98/0x2f4
> [    9.116807]  __driver_probe_device+0x94/0x13c
> [    9.121147]  driver_probe_device+0x40/0x114
> [    9.125314]  __driver_attach+0x7c/0x180
> [    9.129133]  bus_for_each_dev+0x5c/0x90
> [    9.132953]  driver_attach+0x20/0x2c
> [    9.136513]  bus_add_driver+0x104/0x1fc
> [    9.140333]  driver_register+0x74/0x120
> [    9.144153]  __pci_register_driver+0x40/0x50
> [    9.148407]  mt7915_init+0x5c/0x1000 [mt7915e]
> [    9.152848]  do_one_initcall+0x40/0x25c
> [    9.156669]  do_init_module+0x44/0x230
> [    9.160403]  load_module+0x1f30/0x2750
> [    9.164135]  __do_sys_init_module+0x150/0x200
> [    9.168475]  __arm64_sys_init_module+0x18/0x20
> [    9.172901]  invoke_syscall.constprop.0+0x4c/0xe0
> [    9.177589]  do_el0_svc+0x48/0xe0
> [    9.180889]  el0_svc+0x14/0x50
> [    9.183929]  el0t_64_sync_handler+0x9c/0x120
> [    9.188183]  el0t_64_sync+0x158/0x15c
> 
> [...]

Here is the summary with links:
  - [net-next] net: ethernet: mtk_wed: fix sleep while atomic in mtk_wed_wo_queue_refill
    https://git.kernel.org/netdev/net-next/c/65e6af6cebef

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html




From ryder.lee at mediatek.com  Fri Dec  2 23:37:54 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Sat, 3 Dec 2022 15:37:54 +0800
Subject: [PATCH] wifi: mt76: mt7915: split mcu chan_mib array up
Message-ID: <51130dcbc200962672540cb726dd9841c5ad7fe9.1670049959.git.ryder.lee@mediatek.com>

The current flow confuses coverity check that leads to false reporting,
so split the offs[] into two pieces according to chipset revision to
silence coverity tool.

Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
 .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 50 ++++++++++---------
 1 file changed, 27 insertions(+), 23 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
index b2652de082ba..ca315af3905b 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
@@ -2974,38 +2974,42 @@ int mt7915_mcu_apply_tx_dpd(struct mt7915_phy *phy)
 
 int mt7915_mcu_get_chan_mib_info(struct mt7915_phy *phy, bool chan_switch)
 {
-	/* strict order */
-	static const u32 offs[] = {
-		MIB_NON_WIFI_TIME,
-		MIB_TX_TIME,
-		MIB_RX_TIME,
-		MIB_OBSS_AIRTIME,
-		MIB_TXOP_INIT_COUNT,
-		/* v2 */
-		MIB_NON_WIFI_TIME_V2,
-		MIB_TX_TIME_V2,
-		MIB_RX_TIME_V2,
-		MIB_OBSS_AIRTIME_V2
-	};
 	struct mt76_channel_state *state = phy->mt76->chan_state;
 	struct mt76_channel_state *state_ts = &phy->state_ts;
 	struct mt7915_dev *dev = phy->dev;
 	struct mt7915_mcu_mib *res, req[5];
 	struct sk_buff *skb;
-	int i, ret, start = 0, ofs = 20;
+	static const u32 *offs;
+	int i, ret, len, offs_cc;
 	u64 cc_tx;
 
-	if (!is_mt7915(&dev->mt76)) {
-		start = 5;
-		ofs = 0;
+	/* strict order */
+	if (is_mt7915(&dev->mt76)) {
+		static const u32 chip_offs[] = {
+			MIB_NON_WIFI_TIME,
+			MIB_TX_TIME,
+			MIB_RX_TIME,
+			MIB_OBSS_AIRTIME,
+			MIB_TXOP_INIT_COUNT,
+		};
+		len = ARRAY_SIZE(chip_offs);
+		offs = chip_offs;
+		offs_cc = 20;
+	} else {
+		static const u32 chip_offs[] = {
+			MIB_NON_WIFI_TIME_V2,
+			MIB_TX_TIME_V2,
+			MIB_RX_TIME_V2,
+			MIB_OBSS_AIRTIME_V2
+		};
+		len = ARRAY_SIZE(chip_offs);
+		offs = chip_offs;
+		offs_cc = 0;
 	}
 
-	for (i = 0; i < 5; i++) {
+	for (i = 0; i < len; i++) {
 		req[i].band = cpu_to_le32(phy->mt76->band_idx);
-		req[i].offs = cpu_to_le32(offs[i + start]);
-
-		if (!is_mt7915(&dev->mt76) && i == 3)
-			break;
+		req[i].offs = cpu_to_le32(offs[i]);
 	}
 
 	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_CMD(GET_MIB_INFO),
@@ -3013,7 +3017,7 @@ int mt7915_mcu_get_chan_mib_info(struct mt7915_phy *phy, bool chan_switch)
 	if (ret)
 		return ret;
 
-	res = (struct mt7915_mcu_mib *)(skb->data + ofs);
+	res = (struct mt7915_mcu_mib *)(skb->data + offs_cc);
 
 #define __res_u64(s) le64_to_cpu(res[s].data)
 	/* subtract Tx backoff time from Tx duration */
-- 
2.18.0



From linus.walleij at linaro.org  Sat Dec  3 01:22:47 2022
From: linus.walleij at linaro.org (Linus Walleij)
Date: Sat, 3 Dec 2022 10:22:47 +0100
Subject: [PATCH v3 0/7] Remove the pins-are-numbered DT property
In-Reply-To: <20221129023401.278780-1-bero@baylibre.com>
References: <20221129023401.278780-1-bero@baylibre.com>
Message-ID: <CACRpkda75U=b50rK=WecNvaEoTdN2UzGyEwfPRaO6jG9FGyWhw@mail.gmail.com>

Hi Bero,

long time no see!

On Tue, Nov 29, 2022 at 3:34 AM Bernhard Rosenkr?nzer <bero at baylibre.com> wrote:

> During the review of my MT8365 support patchset
> (https://lore.kernel.org/linux-mediatek/20221117210356.3178578-1-bero at baylibre.com/),
> the issue of the "pins-are-numbered" DeviceTree property has come up.

(...)
> This patchset removes all uses of pins-are-numbered and marks the
> property as deprecated.

I don't remember any more why this property was introduced, but
I am happy to see it go.

> Bernhard Rosenkr?nzer (7):
>   pinctrl: mediatek: common: Remove check for pins-are-numbered
>   pinctrl: stm32: Remove check for pins-are-numbered
>   dt-bindings: pinctrl: mediatek,mt65xx: Deprecate pins-are-numbered
>   dt-bindings: pinctrl: st,stm32: Deprecate pins-are-numbered

I applied patches 1-4 to the pin control tree for v6.2,
please funnel the rest through mediatek/stm32 and
SoC trees!

Yours,
Linus Walleij


From error27 at gmail.com  Sat Dec  3 04:54:53 2022
From: error27 at gmail.com (Dan Carpenter)
Date: Sat, 3 Dec 2022 15:54:53 +0300
Subject: [bug report] wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7
 (802.11be) devices
Message-ID: <Y4tHHYLPX/6x6ztK@kili>

Hello Shayne Chen,

The patch 98686cd21624: "wifi: mt76: mt7996: add driver for MediaTek
Wi-Fi 7 (802.11be) devices" from Nov 22, 2022, leads to the following
Smatch static checker warning:

	drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c:657 mt7996_rf_regval_set()
	warn: passing casted pointer '&val' to 'mt7996_mcu_rf_regval()' 64 vs 32.

drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c
    652 static int
    653 mt7996_rf_regval_set(void *data, u64 val)
    654 {
    655         struct mt7996_dev *dev = data;
    656 
--> 657         return mt7996_mcu_rf_regval(dev, dev->mt76.debugfs_reg, (u32 *)&val, true);
                                                                        ^^^^^^^^^^^
This code only "works" on little endian systems.  You have to do
something like:

	u32 u32_val = val;

	return mt7996_mcu_rf_regval(dev, dev->mt76.debugfs_reg, &u32_val, true);

    658 }

regards,
dan carpenter


From error27 at gmail.com  Sat Dec  3 04:55:53 2022
From: error27 at gmail.com (Dan Carpenter)
Date: Sat, 3 Dec 2022 15:55:53 +0300
Subject: [bug report] wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7
 (802.11be) devices
Message-ID: <Y4tHWWBKBU4GaMkX@kili>

Hello Shayne Chen,

The patch 98686cd21624: "wifi: mt76: mt7996: add driver for MediaTek
Wi-Fi 7 (802.11be) devices" from Nov 22, 2022, leads to the following
Smatch static checker warning:

	drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c:72 mt7996_eeprom_load()
	error: uninitialized symbol 'free_block_num'.

drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c
    55 static int mt7996_eeprom_load(struct mt7996_dev *dev)
    56 {
    57         int ret;
    58 
    59         ret = mt76_eeprom_init(&dev->mt76, MT7996_EEPROM_SIZE);
    60         if (ret < 0)
    61                 return ret;
    62 
    63         if (ret) {
    64                 dev->flash_mode = true;
    65         } else {
    66                 u8 free_block_num;
    67                 u32 block_num, i;
    68 
    69                 /* TODO: check free block event */
    70                 mt7996_mcu_get_eeprom_free_block(dev, &free_block_num);

free_block_num is not initialized if mt7996_mcu_get_eeprom_free_block()
fails.

    71                 /* efuse info not enough */
--> 72                 if (free_block_num >= 59)
    73                         return -EINVAL;
    74 
    75                 /* read eeprom data from efuse */
    76                 block_num = DIV_ROUND_UP(MT7996_EEPROM_SIZE, MT7996_EEPROM_BLOCK_SIZE);
    77                 for (i = 0; i < block_num; i++)
    78                         mt7996_mcu_get_eeprom(dev, i * MT7996_EEPROM_BLOCK_SIZE);
    79         }
    80 
    81         return mt7996_check_eeprom(dev);
    82 }

regards,
dan carpenter


From lorenzo at kernel.org  Sat Dec  3 05:06:30 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Sat,  3 Dec 2022 14:06:30 +0100
Subject: [PATCH net-next] net: ethernet: mtk_wed: add reset to rx_ring_setup callback
Message-ID: <26fa16f2f212bff5edfdbe8a4f41dba7a132b0be.1670072570.git.lorenzo@kernel.org>

Introduce reset parameter to mtk_wed_rx_ring_setup signature.
This is a preliminary patch to add Wireless Ethernet Dispatcher reset
support.

Co-developed-by: Sujuan Chen <sujuan.chen at mediatek.com>
Signed-off-by: Sujuan Chen <sujuan.chen at mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
---
 drivers/net/ethernet/mediatek/mtk_wed.c  | 20 +++++++++++++-------
 drivers/net/wireless/mediatek/mt76/dma.c |  2 +-
 include/linux/soc/mediatek/mtk_wed.h     |  8 ++++----
 3 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
index 6352abd4157e..b1ec3f353b66 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
@@ -1216,7 +1216,8 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
 }
 
 static int
-mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
+mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
+			   bool reset)
 {
 	u32 desc_size = sizeof(struct mtk_wdma_desc) * dev->hw->version;
 	struct mtk_wed_ring *wdma;
@@ -1225,8 +1226,8 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
 		return -EINVAL;
 
 	wdma = &dev->tx_wdma[idx];
-	if (mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE, desc_size,
-			       true))
+	if (!reset && mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE,
+					 desc_size, true))
 		return -ENOMEM;
 
 	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
@@ -1236,6 +1237,9 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
 	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_CPU_IDX, 0);
 	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_DMA_IDX, 0);
 
+	if (reset)
+		mtk_wed_ring_reset(wdma, MTK_WED_WDMA_RING_SIZE, true);
+
 	if (!idx)  {
 		wed_w32(dev, MTK_WED_WDMA_RING_TX + MTK_WED_RING_OFS_BASE,
 			wdma->desc_phys);
@@ -1577,18 +1581,20 @@ mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
 }
 
 static int
-mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs)
+mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs,
+		      bool reset)
 {
 	struct mtk_wed_ring *ring = &dev->rx_ring[idx];
 
 	if (WARN_ON(idx >= ARRAY_SIZE(dev->rx_ring)))
 		return -EINVAL;
 
-	if (mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
-			       sizeof(*ring->desc), false))
+	if (!reset && mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
+					 sizeof(*ring->desc), false))
 		return -ENOMEM;
 
-	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE))
+	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE,
+				       reset))
 		return -ENOMEM;
 
 	ring->reg_base = MTK_WED_RING_RX_DATA(idx);
diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
index 3f8c0845fcca..f795548562f5 100644
--- a/drivers/net/wireless/mediatek/mt76/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/dma.c
@@ -648,7 +648,7 @@ mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
 			q->wed_regs = wed->txfree_ring.reg_base;
 		break;
 	case MT76_WED_Q_RX:
-		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs);
+		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs, false);
 		if (!ret)
 			q->wed_regs = wed->rx_ring[ring].reg_base;
 		break;
diff --git a/include/linux/soc/mediatek/mtk_wed.h b/include/linux/soc/mediatek/mtk_wed.h
index beb190449704..a0746d4aec20 100644
--- a/include/linux/soc/mediatek/mtk_wed.h
+++ b/include/linux/soc/mediatek/mtk_wed.h
@@ -160,7 +160,7 @@ struct mtk_wed_ops {
 	int (*tx_ring_setup)(struct mtk_wed_device *dev, int ring,
 			     void __iomem *regs, bool reset);
 	int (*rx_ring_setup)(struct mtk_wed_device *dev, int ring,
-			     void __iomem *regs);
+			     void __iomem *regs, bool reset);
 	int (*txfree_ring_setup)(struct mtk_wed_device *dev,
 				 void __iomem *regs);
 	int (*msg_update)(struct mtk_wed_device *dev, int cmd_id,
@@ -228,8 +228,8 @@ mtk_wed_get_rx_capa(struct mtk_wed_device *dev)
 	(_dev)->ops->irq_get(_dev, _mask)
 #define mtk_wed_device_irq_set_mask(_dev, _mask) \
 	(_dev)->ops->irq_set_mask(_dev, _mask)
-#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) \
-	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs)
+#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) \
+	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs, _reset)
 #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash) \
 	(_dev)->ops->ppe_check(_dev, _skb, _reason, _hash)
 #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) \
@@ -249,7 +249,7 @@ static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
 #define mtk_wed_device_reg_write(_dev, _reg, _val) do {} while (0)
 #define mtk_wed_device_irq_get(_dev, _mask) 0
 #define mtk_wed_device_irq_set_mask(_dev, _mask) do {} while (0)
-#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) -ENODEV
+#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) -ENODEV
 #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash)  do {} while (0)
 #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) -ENODEV
 #define mtk_wed_device_stop(_dev) do {} while (0)
-- 
2.38.1



From lorenzo at kernel.org  Sat Dec  3 05:20:37 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Sat,  3 Dec 2022 14:20:37 +0100
Subject: [PATCH net-next] net: mtk_eth_soc: enable flow offload support fot MT7986 SoC
Message-ID: <fdcaacd827938e6a8c4aa1ac2c13e46d2c08c821.1670072898.git.lorenzo@kernel.org>

Since Wireless Ethernet Dispatcher is now available for mt7986 in mt76,
enable hw flow support for MT7986 SoC.

Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
---
 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 8b93dab79141..e3de9a53b2d9 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -4593,6 +4593,7 @@ static const struct mtk_soc_data mt7986_data = {
 	.hw_features = MTK_HW_FEATURES,
 	.required_clks = MT7986_CLKS_BITMAP,
 	.required_pctl = false,
+	.offload_version = 2,
 	.hash_offset = 4,
 	.foe_entry_size = sizeof(struct mtk_foe_entry),
 	.txrx = {
-- 
2.38.1



From chunfeng.yun at mediatek.com  Sat Dec  3 06:55:58 2022
From: chunfeng.yun at mediatek.com (Chunfeng Yun)
Date: Sat, 3 Dec 2022 22:55:58 +0800
Subject: [PATCH v5 2/3] phy: core: add debugfs root
In-Reply-To: <20221203145559.24763-1-chunfeng.yun@mediatek.com>
References: <20221203145559.24763-1-chunfeng.yun@mediatek.com>
Message-ID: <20221203145559.24763-2-chunfeng.yun@mediatek.com>

Add a debugfs root for phy class, then phy drivers can add debugfs files
under this folder.

Signed-off-by: Chunfeng Yun <chunfeng.yun at mediatek.com>
---
v2~v5: no changes
---
 drivers/phy/phy-core.c  | 6 ++++++
 include/linux/phy/phy.h | 2 ++
 2 files changed, 8 insertions(+)

diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index d93ddf1262c5..2f9f69190519 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -11,6 +11,7 @@
 #include <linux/export.h>
 #include <linux/module.h>
 #include <linux/err.h>
+#include <linux/debugfs.h>
 #include <linux/device.h>
 #include <linux/slab.h>
 #include <linux/of.h>
@@ -1204,6 +1205,9 @@ void devm_of_phy_provider_unregister(struct device *dev,
 }
 EXPORT_SYMBOL_GPL(devm_of_phy_provider_unregister);
 
+struct dentry *phy_debug_root;
+EXPORT_SYMBOL_GPL(phy_debug_root);
+
 /**
  * phy_release() - release the phy
  * @dev: the dev member within phy
@@ -1233,6 +1237,8 @@ static int __init phy_core_init(void)
 
 	phy_class->dev_release = phy_release;
 
+	phy_debug_root = debugfs_create_dir("phy", NULL);
+
 	return 0;
 }
 device_initcall(phy_core_init);
diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
index b1413757fcc3..c398749d49b9 100644
--- a/include/linux/phy/phy.h
+++ b/include/linux/phy/phy.h
@@ -205,6 +205,8 @@ struct phy_lookup {
 #define devm_of_phy_provider_register_full(dev, children, xlate) \
 	__devm_of_phy_provider_register(dev, children, THIS_MODULE, xlate)
 
+extern struct dentry *phy_debug_root;
+
 static inline void phy_set_drvdata(struct phy *phy, void *data)
 {
 	dev_set_drvdata(&phy->dev, data);
-- 
2.18.0



From chunfeng.yun at mediatek.com  Sat Dec  3 06:55:59 2022
From: chunfeng.yun at mediatek.com (Chunfeng Yun)
Date: Sat, 3 Dec 2022 22:55:59 +0800
Subject: [PATCH v5 3/3] phy: mediatek: tphy: add debugfs files
In-Reply-To: <20221203145559.24763-1-chunfeng.yun@mediatek.com>
References: <20221203145559.24763-1-chunfeng.yun@mediatek.com>
Message-ID: <20221203145559.24763-3-chunfeng.yun@mediatek.com>

These debugfs files are mainly used to make eye diagram test easier,
especially helpful to do HQA test for a new IC without efuse enabled.

Signed-off-by: Chunfeng Yun <chunfeng.yun at mediatek.com>
---
v5: using common debugfs config CONFIG_DEBUG_FS

v4: fix build warning of sometimes uninitialized variable

v3: fix typo of "debugfs" suggested by AngeloGioacchino

v2: add CONFIG_PHY_MTK_TPHY_DEBUGFS suggested by AngeloGioacchino
---
 drivers/phy/mediatek/phy-mtk-tphy.c | 405 +++++++++++++++++++++++++++-
 1 file changed, 404 insertions(+), 1 deletion(-)

diff --git a/drivers/phy/mediatek/phy-mtk-tphy.c b/drivers/phy/mediatek/phy-mtk-tphy.c
index e906a82791bd..923e5ee119f3 100644
--- a/drivers/phy/mediatek/phy-mtk-tphy.c
+++ b/drivers/phy/mediatek/phy-mtk-tphy.c
@@ -7,6 +7,7 @@
 
 #include <dt-bindings/phy/phy.h>
 #include <linux/clk.h>
+#include <linux/debugfs.h>
 #include <linux/delay.h>
 #include <linux/iopoll.h>
 #include <linux/mfd/syscon.h>
@@ -264,6 +265,8 @@
 
 #define TPHY_CLKS_CNT	2
 
+#define USER_BUF_LEN(count) min_t(size_t, 8, (count))
+
 enum mtk_phy_version {
 	MTK_PHY_V1 = 1,
 	MTK_PHY_V2,
@@ -310,6 +313,7 @@ struct mtk_phy_instance {
 	struct clk_bulk_data clks[TPHY_CLKS_CNT];
 	u32 index;
 	u32 type;
+	struct dentry *dbgfs;
 	struct regmap *type_sw;
 	u32 type_sw_reg;
 	u32 type_sw_index;
@@ -332,10 +336,391 @@ struct mtk_tphy {
 	const struct mtk_phy_pdata *pdata;
 	struct mtk_phy_instance **phys;
 	int nphys;
+	struct dentry *dbgfs_root;
 	int src_ref_clk; /* MHZ, reference clock for slew rate calibrate */
 	int src_coef; /* coefficient for slew rate calibrate */
 };
 
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+
+enum u2_phy_params {
+	U2P_EYE_VRT = 0,
+	U2P_EYE_TERM,
+	U2P_EFUSE_EN,
+	U2P_EFUSE_INTR,
+	U2P_DISCTH,
+	U2P_PRE_EMPHASIS,
+};
+
+enum u3_phy_params {
+	U3P_EFUSE_EN = 0,
+	U3P_EFUSE_INTR,
+	U3P_EFUSE_TX_IMP,
+	U3P_EFUSE_RX_IMP,
+};
+
+static const char *const u2_phy_files[] = {
+	[U2P_EYE_VRT] = "vrt",
+	[U2P_EYE_TERM] = "term",
+	[U2P_EFUSE_EN] = "efuse",
+	[U2P_EFUSE_INTR] = "intr",
+	[U2P_DISCTH] = "discth",
+	[U2P_PRE_EMPHASIS] = "preemph",
+};
+
+static const char *const u3_phy_files[] = {
+	[U3P_EFUSE_EN] = "efuse",
+	[U3P_EFUSE_INTR] = "intr",
+	[U3P_EFUSE_TX_IMP] = "tx-imp",
+	[U3P_EFUSE_RX_IMP] = "rx-imp",
+};
+
+static int u2_phy_params_show(struct seq_file *sf, void *unused)
+{
+	struct mtk_phy_instance *inst = sf->private;
+	const char *fname = file_dentry(sf->file)->d_iname;
+	struct u2phy_banks *u2_banks = &inst->u2_banks;
+	void __iomem *com = u2_banks->com;
+	u32 max = 0;
+	u32 tmp = 0;
+	u32 val = 0;
+	int ret;
+
+	ret = match_string(u2_phy_files, ARRAY_SIZE(u2_phy_files), fname);
+	if (ret < 0)
+		return ret;
+
+	switch (ret) {
+	case U2P_EYE_VRT:
+		tmp = readl(com + U3P_USBPHYACR1);
+		val = FIELD_GET(PA1_RG_VRT_SEL, tmp);
+		max = FIELD_MAX(PA1_RG_VRT_SEL);
+		break;
+
+	case U2P_EYE_TERM:
+		tmp = readl(com + U3P_USBPHYACR1);
+		val = FIELD_GET(PA1_RG_TERM_SEL, tmp);
+		max = FIELD_MAX(PA1_RG_TERM_SEL);
+		break;
+
+	case U2P_EFUSE_EN:
+		if (u2_banks->misc) {
+			tmp = readl(u2_banks->misc + U3P_MISC_REG1);
+			max = 1;
+		}
+
+		val = !!(tmp & MR1_EFUSE_AUTO_LOAD_DIS);
+		break;
+
+	case U2P_EFUSE_INTR:
+		tmp = readl(com + U3P_USBPHYACR1);
+		val = FIELD_GET(PA1_RG_INTR_CAL, tmp);
+		max = FIELD_MAX(PA1_RG_INTR_CAL);
+		break;
+
+	case U2P_DISCTH:
+		tmp = readl(com + U3P_USBPHYACR6);
+		val = FIELD_GET(PA6_RG_U2_DISCTH, tmp);
+		max = FIELD_MAX(PA6_RG_U2_DISCTH);
+		break;
+
+	case U2P_PRE_EMPHASIS:
+		tmp = readl(com + U3P_USBPHYACR6);
+		val = FIELD_GET(PA6_RG_U2_PRE_EMP, tmp);
+		max = FIELD_MAX(PA6_RG_U2_PRE_EMP);
+		break;
+
+	default:
+		seq_printf(sf, "invalid, %d\n", ret);
+		break;
+	}
+
+	seq_printf(sf, "%s : %d [0, %d]\n", fname, val, max);
+
+	return 0;
+}
+
+static int u2_phy_params_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, u2_phy_params_show, inode->i_private);
+}
+
+static ssize_t u2_phy_params_write(struct file *file, const char __user *ubuf,
+				   size_t count, loff_t *ppos)
+{
+	const char *fname = file_dentry(file)->d_iname;
+	struct seq_file *sf = file->private_data;
+	struct mtk_phy_instance *inst = sf->private;
+	struct u2phy_banks *u2_banks = &inst->u2_banks;
+	void __iomem *com = u2_banks->com;
+	ssize_t rc;
+	u32 val;
+	int ret;
+
+	rc = kstrtouint_from_user(ubuf, USER_BUF_LEN(count), 0, &val);
+	if (rc)
+		return rc;
+
+	ret = match_string(u2_phy_files, ARRAY_SIZE(u2_phy_files), fname);
+	if (ret < 0)
+		return (ssize_t)ret;
+
+	switch (ret) {
+	case U2P_EYE_VRT:
+		mtk_phy_update_field(com + U3P_USBPHYACR1, PA1_RG_VRT_SEL, val);
+		break;
+
+	case U2P_EYE_TERM:
+		mtk_phy_update_field(com + U3P_USBPHYACR1, PA1_RG_TERM_SEL, val);
+		break;
+
+	case U2P_EFUSE_EN:
+		if (u2_banks->misc)
+			mtk_phy_update_field(u2_banks->misc + U3P_MISC_REG1,
+					     MR1_EFUSE_AUTO_LOAD_DIS, !!val);
+		break;
+
+	case U2P_EFUSE_INTR:
+		mtk_phy_update_field(com + U3P_USBPHYACR1, PA1_RG_INTR_CAL, val);
+		break;
+
+	case U2P_DISCTH:
+		mtk_phy_update_field(com + U3P_USBPHYACR6, PA6_RG_U2_DISCTH, val);
+		break;
+
+	case U2P_PRE_EMPHASIS:
+		mtk_phy_update_field(com + U3P_USBPHYACR6, PA6_RG_U2_PRE_EMP, val);
+		break;
+
+	default:
+		break;
+	}
+
+	return count;
+}
+
+static const struct file_operations u2_phy_fops = {
+	.open = u2_phy_params_open,
+	.write = u2_phy_params_write,
+	.read = seq_read,
+	.llseek = seq_lseek,
+	.release = single_release,
+};
+
+static void u2_phy_dbgfs_files_create(struct mtk_phy_instance *inst)
+{
+	u32 count = ARRAY_SIZE(u2_phy_files);
+	int i;
+
+	for (i = 0; i < count; i++)
+		debugfs_create_file(u2_phy_files[i], 0644, inst->dbgfs, inst, &u2_phy_fops);
+}
+
+static int u3_phy_params_show(struct seq_file *sf, void *unused)
+{
+	struct mtk_phy_instance *inst = sf->private;
+	const char *fname = file_dentry(sf->file)->d_iname;
+	struct u3phy_banks *u3_banks = &inst->u3_banks;
+	u32 val = 0;
+	u32 max = 0;
+	u32 tmp;
+	int ret;
+
+	ret = match_string(u3_phy_files, ARRAY_SIZE(u3_phy_files), fname);
+	if (ret < 0)
+		return ret;
+
+	switch (ret) {
+	case U3P_EFUSE_EN:
+		tmp = readl(u3_banks->phyd + U3P_U3_PHYD_RSV);
+		val = !!(tmp & P3D_RG_EFUSE_AUTO_LOAD_DIS);
+		max = 1;
+		break;
+
+	case U3P_EFUSE_INTR:
+		tmp = readl(u3_banks->phya + U3P_U3_PHYA_REG0);
+		val = FIELD_GET(P3A_RG_IEXT_INTR, tmp);
+		max = FIELD_MAX(P3A_RG_IEXT_INTR);
+		break;
+
+	case U3P_EFUSE_TX_IMP:
+		tmp = readl(u3_banks->phyd + U3P_U3_PHYD_IMPCAL0);
+		val = FIELD_GET(P3D_RG_TX_IMPEL, tmp);
+		max = FIELD_MAX(P3D_RG_TX_IMPEL);
+		break;
+
+	case U3P_EFUSE_RX_IMP:
+		tmp = readl(u3_banks->phyd + U3P_U3_PHYD_IMPCAL1);
+		val = FIELD_GET(P3D_RG_RX_IMPEL, tmp);
+		max = FIELD_MAX(P3D_RG_RX_IMPEL);
+		break;
+
+	default:
+		seq_printf(sf, "invalid, %d\n", ret);
+		break;
+	}
+
+	seq_printf(sf, "%s : %d [0, %d]\n", fname, val, max);
+
+	return 0;
+}
+
+static int u3_phy_params_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, u3_phy_params_show, inode->i_private);
+}
+
+static ssize_t u3_phy_params_write(struct file *file, const char __user *ubuf,
+				   size_t count, loff_t *ppos)
+{
+	const char *fname = file_dentry(file)->d_iname;
+	struct seq_file *sf = file->private_data;
+	struct mtk_phy_instance *inst = sf->private;
+	struct u3phy_banks *u3_banks = &inst->u3_banks;
+	void __iomem *phyd = u3_banks->phyd;
+	ssize_t rc;
+	u32 val;
+	int ret;
+
+	rc = kstrtouint_from_user(ubuf, USER_BUF_LEN(count), 0, &val);
+	if (rc)
+		return rc;
+
+	ret = match_string(u3_phy_files, ARRAY_SIZE(u3_phy_files), fname);
+	if (ret < 0)
+		return (ssize_t)ret;
+
+	switch (ret) {
+	case U3P_EFUSE_EN:
+		mtk_phy_update_field(phyd + U3P_U3_PHYD_RSV,
+				     P3D_RG_EFUSE_AUTO_LOAD_DIS, !!val);
+		break;
+
+	case U3P_EFUSE_INTR:
+		mtk_phy_update_field(u3_banks->phya + U3P_U3_PHYA_REG0, P3A_RG_IEXT_INTR, val);
+		break;
+
+	case U3P_EFUSE_TX_IMP:
+		mtk_phy_update_field(phyd + U3P_U3_PHYD_IMPCAL0, P3D_RG_TX_IMPEL, val);
+		mtk_phy_set_bits(phyd + U3P_U3_PHYD_IMPCAL0, P3D_RG_FORCE_TX_IMPEL);
+		break;
+
+	case U3P_EFUSE_RX_IMP:
+		mtk_phy_update_field(phyd + U3P_U3_PHYD_IMPCAL1, P3D_RG_RX_IMPEL, val);
+		mtk_phy_set_bits(phyd + U3P_U3_PHYD_IMPCAL1, P3D_RG_FORCE_RX_IMPEL);
+		break;
+
+	default:
+		break;
+	}
+
+	return count;
+}
+
+static const struct file_operations u3_phy_fops = {
+	.open = u3_phy_params_open,
+	.write = u3_phy_params_write,
+	.read = seq_read,
+	.llseek = seq_lseek,
+	.release = single_release,
+};
+
+static void u3_phy_dbgfs_files_create(struct mtk_phy_instance *inst)
+{
+	u32 count = ARRAY_SIZE(u3_phy_files);
+	int i;
+
+	for (i = 0; i < count; i++)
+		debugfs_create_file(u3_phy_files[i], 0644, inst->dbgfs, inst, &u3_phy_fops);
+}
+
+static int tphy_type_show(struct seq_file *sf, void *unused)
+{
+	struct mtk_phy_instance *inst = sf->private;
+	const char *type;
+
+	switch (inst->type) {
+	case PHY_TYPE_USB2:
+		type = "USB2";
+		break;
+	case PHY_TYPE_USB3:
+		type = "USB3";
+		break;
+	case PHY_TYPE_PCIE:
+		type = "PCIe";
+		break;
+	case PHY_TYPE_SGMII:
+		type = "SGMII";
+		break;
+	case PHY_TYPE_SATA:
+		type = "SATA";
+		break;
+	default:
+		type = "";
+	}
+
+	seq_printf(sf, "%s\n", type);
+
+	return 0;
+}
+
+DEFINE_SHOW_ATTRIBUTE(tphy_type);
+
+static void tphy_debugfs_init(struct mtk_tphy *tphy, struct mtk_phy_instance *inst)
+{
+	char name[16];
+
+	snprintf(name, sizeof(name) - 1, "phy.%d", inst->index);
+	inst->dbgfs = debugfs_create_dir(name, tphy->dbgfs_root);
+
+	debugfs_create_file("type", 0444, inst->dbgfs, inst, &tphy_type_fops);
+
+	switch (inst->type) {
+	case PHY_TYPE_USB2:
+		u2_phy_dbgfs_files_create(inst);
+		break;
+	case PHY_TYPE_USB3:
+	case PHY_TYPE_PCIE:
+		u3_phy_dbgfs_files_create(inst);
+		break;
+	default:
+		break;
+	}
+}
+
+static void tphy_debugfs_exit(struct mtk_phy_instance *inst)
+{
+	debugfs_remove_recursive(inst->dbgfs);
+	inst->dbgfs = NULL;
+}
+
+static void tphy_debugfs_root_create(struct mtk_tphy *tphy)
+{
+	tphy->dbgfs_root = debugfs_create_dir(dev_name(tphy->dev), phy_debug_root);
+}
+
+static void tphy_debugfs_root_remove(struct mtk_tphy *tphy)
+{
+	debugfs_remove_recursive(tphy->dbgfs_root);
+	tphy->dbgfs_root = NULL;
+}
+
+#else
+
+static void tphy_debugfs_init(struct mtk_tphy *tphy, struct mtk_phy_instance *inst)
+{}
+
+static void tphy_debugfs_exit(struct mtk_phy_instance *inst)
+{}
+
+static void tphy_debugfs_root_create(struct mtk_tphy *tphy)
+{}
+
+static void tphy_debugfs_root_remove(struct mtk_tphy *tphy)
+{}
+
+#endif
+
 static void hs_slew_rate_calibrate(struct mtk_tphy *tphy,
 	struct mtk_phy_instance *instance)
 {
@@ -1032,6 +1417,8 @@ static int mtk_phy_init(struct phy *phy)
 		return -EINVAL;
 	}
 
+	tphy_debugfs_init(tphy, instance);
+
 	return 0;
 }
 
@@ -1068,6 +1455,8 @@ static int mtk_phy_exit(struct phy *phy)
 	struct mtk_phy_instance *instance = phy_get_drvdata(phy);
 	struct mtk_tphy *tphy = dev_get_drvdata(phy->dev.parent);
 
+	tphy_debugfs_exit(instance);
+
 	if (instance->type == PHY_TYPE_USB2)
 		u2_phy_instance_exit(tphy, instance);
 
@@ -1295,15 +1684,29 @@ static int mtk_tphy_probe(struct platform_device *pdev)
 	}
 
 	provider = devm_of_phy_provider_register(dev, mtk_phy_xlate);
+	if (IS_ERR(provider))
+		return dev_err_probe(dev, PTR_ERR(provider), "probe failed\n");
+
+	tphy_debugfs_root_create(tphy);
+	return 0;
 
-	return PTR_ERR_OR_ZERO(provider);
 put_child:
 	of_node_put(child_np);
 	return retval;
 }
 
+static int mtk_tphy_remove(struct platform_device *pdev)
+{
+	struct mtk_tphy *tphy;
+
+	tphy = platform_get_drvdata(pdev);
+	tphy_debugfs_root_remove(tphy);
+	return 0;
+}
+
 static struct platform_driver mtk_tphy_driver = {
 	.probe		= mtk_tphy_probe,
+	.remove		= mtk_tphy_remove,
 	.driver		= {
 		.name	= "mtk-tphy",
 		.of_match_table = mtk_tphy_id_table,
-- 
2.18.0



From Chunfeng.Yun at mediatek.com  Sat Dec  3 06:53:19 2022
From: Chunfeng.Yun at mediatek.com (=?utf-8?B?Q2h1bmZlbmcgWXVuICjkupHmmKXls7Ap?=)
Date: Sat, 3 Dec 2022 14:53:19 +0000
Subject: [PATCH v4 3/3] phy: mediatek: tphy: add debugfs files
In-Reply-To: <Y4S/GhUcrxJ9W/gE@lunn.ch>
References: <20221110132716.12294-1-chunfeng.yun@mediatek.com>
	 <20221110132716.12294-3-chunfeng.yun@mediatek.com>
	 <Y3+uGjpMQcEWQrew@matsya>
	 <70407a789b48a4fbd498e392450eb9db76e025bf.camel@mediatek.com>
	 <Y4S/GhUcrxJ9W/gE@lunn.ch>
Message-ID: <5c0cc00a37c4cfa03d91e834fb649d52d4ddb041.camel@mediatek.com>

On Mon, 2022-11-28 at 15:00 +0100, Andrew Lunn wrote:
> On Mon, Nov 28, 2022 at 07:26:02AM +0000, Chunfeng Yun (???) wrote:
> > On Thu, 2022-11-24 at 23:17 +0530, Vinod Koul wrote:
> > > On 10-11-22, 21:27, Chunfeng Yun wrote:
> > > > These debugfs files are mainly used to make eye diagram test
> > > > easier,
> > > > especially helpful to do HQA test for a new IC without efuse
> > > > enabled.
> 
> Exporting data for eye diagrams seems like something many PHYs could
> use. Please consider adding an official uniform API which any PHY
> could use, so we don't end up with lots of incompatible formats in
> debugfs.
Good idea, but it seems difficult to do it due to the settings of phy
controllers are not common.

> 
> 	Andrew

From chunfeng.yun at mediatek.com  Sat Dec  3 06:55:57 2022
From: chunfeng.yun at mediatek.com (Chunfeng Yun)
Date: Sat, 3 Dec 2022 22:55:57 +0800
Subject: [PATCH v5 1/3] phy: mediatek: fix build warning caused by clang for powerpc
Message-ID: <20221203145559.24763-1-chunfeng.yun@mediatek.com>

Remove the temporary @mask_, this may cause build warning when use clang
compiler for powerpc, but can't reproduce it when compile for arm64.
the build warning is -Wtautological-constant-out-of-range-compare, and
caused by
"BUILD_BUG_ON_MSG(__bf_cast_unsigned(_mask, _mask)"

After removing @mask_, there is a "CHECK:MACRO_ARG_REUSE" when run
checkpatch.pl, due to @mask is constant, no reuse problem will happen.

Fixes: 84513eccd678 ("phy: mediatek: fix build warning of FIELD_PREP()")
Reported-by: kernel test robot <lkp at intel.com>
Signed-off-by: Chunfeng Yun <chunfeng.yun at mediatek.com>
---
v5: no changes
v4 new patch, I'm not sure it can fix build warning, due to I don't cross compile
    it for powerpc using clang in office.
---
 drivers/phy/mediatek/phy-mtk-io.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/phy/mediatek/phy-mtk-io.h b/drivers/phy/mediatek/phy-mtk-io.h
index d20ad5e5be81..58f06db822cb 100644
--- a/drivers/phy/mediatek/phy-mtk-io.h
+++ b/drivers/phy/mediatek/phy-mtk-io.h
@@ -39,8 +39,8 @@ static inline void mtk_phy_update_bits(void __iomem *reg, u32 mask, u32 val)
 /* field @mask shall be constant and continuous */
 #define mtk_phy_update_field(reg, mask, val) \
 ({ \
-	typeof(mask) mask_ = (mask);	\
-	mtk_phy_update_bits(reg, mask_, FIELD_PREP(mask_, val)); \
+	BUILD_BUG_ON_MSG(!__builtin_constant_p(mask), "mask is not constant"); \
+	mtk_phy_update_bits(reg, mask, FIELD_PREP(mask, val)); \
 })
 
 #endif
-- 
2.18.0



From frank-w at public-files.de  Sat Dec  3 07:38:15 2022
From: frank-w at public-files.de (Frank Wunderlich)
Date: Sat, 03 Dec 2022 16:38:15 +0100
Subject: =?US-ASCII?Q?Re=3A_=5BPATCH_net-next=5D_net=3A_mtk=5Feth=5Fsoc=3A_e?= =?US-ASCII?Q?nable_flow_offload_support_fot_MT7986_SoC?=
In-Reply-To: <fdcaacd827938e6a8c4aa1ac2c13e46d2c08c821.1670072898.git.lorenzo@kernel.org>
References: <fdcaacd827938e6a8c4aa1ac2c13e46d2c08c821.1670072898.git.lorenzo@kernel.org>
Message-ID: <70E22A48-DEE2-403A-975F-AD7D418B78CA@public-files.de>

Hi,

thanks for the Patch, i only noticed a typo in Subject (s/fot/for/).
regards Frank


From andrew at lunn.ch  Sat Dec  3 07:38:44 2022
From: andrew at lunn.ch (Andrew Lunn)
Date: Sat, 3 Dec 2022 16:38:44 +0100
Subject: [PATCH v4 3/3] phy: mediatek: tphy: add debugfs files
In-Reply-To: <5c0cc00a37c4cfa03d91e834fb649d52d4ddb041.camel@mediatek.com>
References: <20221110132716.12294-1-chunfeng.yun@mediatek.com>
 <20221110132716.12294-3-chunfeng.yun@mediatek.com>
 <Y3+uGjpMQcEWQrew@matsya>
 <70407a789b48a4fbd498e392450eb9db76e025bf.camel@mediatek.com>
 <Y4S/GhUcrxJ9W/gE@lunn.ch>
 <5c0cc00a37c4cfa03d91e834fb649d52d4ddb041.camel@mediatek.com>
Message-ID: <Y4tthBgulCK3ggBT@lunn.ch>

On Sat, Dec 03, 2022 at 02:53:19PM +0000, Chunfeng Yun (???) wrote:
> On Mon, 2022-11-28 at 15:00 +0100, Andrew Lunn wrote:
> > On Mon, Nov 28, 2022 at 07:26:02AM +0000, Chunfeng Yun (???) wrote:
> > > On Thu, 2022-11-24 at 23:17 +0530, Vinod Koul wrote:
> > > > On 10-11-22, 21:27, Chunfeng Yun wrote:
> > > > > These debugfs files are mainly used to make eye diagram test
> > > > > easier,
> > > > > especially helpful to do HQA test for a new IC without efuse
> > > > > enabled.
> > 
> > Exporting data for eye diagrams seems like something many PHYs could
> > use. Please consider adding an official uniform API which any PHY
> > could use, so we don't end up with lots of incompatible formats in
> > debugfs.
> Good idea, but it seems difficult to do it due to the settings of phy
> controllers are not common.

Do you have clear documentation about the values are exporting? Do you
have a documented procedure for the tests?

We need to collect together documentation from multiple vendors and
see what is common. Maybe nothing is common, maybe a lot is in common.
We won't know until we actually compare them.

I implemented cable testing for Ethernet PHYs. They are all different,
but actual give very similar results, so can have one common
description. How many different ways is there to make eye diagram
tests?

	Andrew


From ryder.lee at mediatek.com  Sat Dec  3 11:29:19 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Sun, 4 Dec 2022 03:29:19 +0800
Subject: [PATCH 3/3] wifi: mt76: mt7915: check the correctness of event data first
In-Reply-To: <ba197e342d4d99d2e1be2e731ae989f57f5cf8a9.1670095617.git.ryder.lee@mediatek.com>
References: <ba197e342d4d99d2e1be2e731ae989f57f5cf8a9.1670095617.git.ryder.lee@mediatek.com>
Message-ID: <57af9227896a13eadc062b52d238f179d4ebd049.1670095617.git.ryder.lee@mediatek.com>

The mcu event might not be reliable, so check the correctness of data
before handling it.

Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
 .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 21 +++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
index f9e4c3e80af0..7cb45cd55ada 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
@@ -232,8 +232,11 @@ mt7915_mcu_rx_csa_notify(struct mt7915_dev *dev, struct sk_buff *skb)
 
 	c = (struct mt7915_mcu_csa_notify *)skb->data;
 
+	if (c->band_idx > MT_BAND1)
+		return;
+
 	if ((c->band_idx && !dev->phy.mt76->band_idx) &&
-	     dev->mt76.phys[MT_BAND1])
+	    dev->mt76.phys[MT_BAND1])
 		mphy = dev->mt76.phys[MT_BAND1];
 
 	ieee80211_iterate_active_interfaces_atomic(mphy->hw,
@@ -252,8 +255,11 @@ mt7915_mcu_rx_thermal_notify(struct mt7915_dev *dev, struct sk_buff *skb)
 	if (t->ctrl.ctrl_id != THERMAL_PROTECT_ENABLE)
 		return;
 
+	if (t->ctrl.band_idx > MT_BAND1)
+		return;
+
 	if ((t->ctrl.band_idx && !dev->phy.mt76->band_idx) &&
-	     dev->mt76.phys[MT_BAND1])
+	    dev->mt76.phys[MT_BAND1])
 		mphy = dev->mt76.phys[MT_BAND1];
 
 	phy = (struct mt7915_phy *)mphy->priv;
@@ -268,8 +274,11 @@ mt7915_mcu_rx_radar_detected(struct mt7915_dev *dev, struct sk_buff *skb)
 
 	r = (struct mt7915_mcu_rdd_report *)skb->data;
 
+	if (r->band_idx > MT_BAND1)
+		return;
+
 	if ((r->band_idx && !dev->phy.mt76->band_idx) &&
-	     dev->mt76.phys[MT_BAND1])
+	    dev->mt76.phys[MT_BAND1])
 		mphy = dev->mt76.phys[MT_BAND1];
 
 	if (r->band_idx == MT_RX_SEL2)
@@ -326,7 +335,11 @@ mt7915_mcu_rx_bcc_notify(struct mt7915_dev *dev, struct sk_buff *skb)
 
 	b = (struct mt7915_mcu_bcc_notify *)skb->data;
 
-	if ((b->band_idx && !dev->phy.mt76->band_idx) && dev->mt76.phys[MT_BAND1])
+	if (b->band_idx > MT_BAND1)
+		return;
+
+	if ((b->band_idx && !dev->phy.mt76->band_idx) &&
+	    dev->mt76.phys[MT_BAND1])
 		mphy = dev->mt76.phys[MT_BAND1];
 
 	ieee80211_iterate_active_interfaces_atomic(mphy->hw,
-- 
2.18.0



From ryder.lee at mediatek.com  Sat Dec  3 11:29:17 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Sun, 4 Dec 2022 03:29:17 +0800
Subject: [PATCH 1/3] wifi: mt76: mt7996: check return value before accessing free_block_num
Message-ID: <ba197e342d4d99d2e1be2e731ae989f57f5cf8a9.1670095617.git.ryder.lee@mediatek.com>

Check return value of mt7996_mcu_get_eeprom_free_block() first before
accessing free_block_num.

Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c | 8 +++++---
 drivers/net/wireless/mediatek/mt76/mt7996/mcu.c    | 4 ++--
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c
index b9f62bedbc48..b61d12dafc9f 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c
@@ -66,9 +66,11 @@ static int mt7996_eeprom_load(struct mt7996_dev *dev)
 		u8 free_block_num;
 		u32 block_num, i;
 
-		/* TODO: check free block event */
-		mt7996_mcu_get_eeprom_free_block(dev, &free_block_num);
-		/* efuse info not enough */
+		ret = mt7996_mcu_get_eeprom_free_block(dev, &free_block_num);
+		if (ret < 0)
+			return ret;
+
+		/* efuse info isn't enough */
 		if (free_block_num >= 59)
 			return -EINVAL;
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
index efb245c8ac84..e4ec395426a7 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
@@ -2927,8 +2927,8 @@ int mt7996_mcu_get_eeprom(struct mt7996_dev *dev, u32 offset)
 	bool valid;
 	int ret;
 
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_WM_UNI_CMD_QUERY(EFUSE_CTRL), &req,
-					sizeof(req), true, &skb);
+	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_WM_UNI_CMD_QUERY(EFUSE_CTRL),
+					&req, sizeof(req), true, &skb);
 	if (ret)
 		return ret;
 
-- 
2.18.0



From ryder.lee at mediatek.com  Sat Dec  3 11:29:18 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Sun, 4 Dec 2022 03:29:18 +0800
Subject: [PATCH 2/3] wifi: mt76: mt7915: check return value before accessing free_block_num
In-Reply-To: <ba197e342d4d99d2e1be2e731ae989f57f5cf8a9.1670095617.git.ryder.lee@mediatek.com>
References: <ba197e342d4d99d2e1be2e731ae989f57f5cf8a9.1670095617.git.ryder.lee@mediatek.com>
Message-ID: <dd5fe6b099de6c47fa00ecd4b698ba846d6963ce.1670095617.git.ryder.lee@mediatek.com>

Check return value of mt7915_mcu_get_eeprom_free_block() first before
accessing free_block_num.

Fixes: bbc1d4154ec1 ("mt76: mt7915: add default calibrated data support")
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c | 7 +++++--
 drivers/net/wireless/mediatek/mt76/mt7915/mcu.c    | 4 ++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
index 59069fb86414..3ab07ad0c26e 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
@@ -111,8 +111,11 @@ static int mt7915_eeprom_load(struct mt7915_dev *dev)
 		u8 free_block_num;
 		u32 block_num, i;
 
-		mt7915_mcu_get_eeprom_free_block(dev, &free_block_num);
-		/* efuse info not enough */
+		ret = mt7915_mcu_get_eeprom_free_block(dev, &free_block_num);
+		if (ret < 0)
+			return ret;
+
+		/* efuse info isn't enough */
 		if (free_block_num >= 29)
 			return -EINVAL;
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
index ca315af3905b..f9e4c3e80af0 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
@@ -2792,8 +2792,8 @@ int mt7915_mcu_get_eeprom(struct mt7915_dev *dev, u32 offset)
 	int ret;
 	u8 *buf;
 
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_QUERY(EFUSE_ACCESS), &req,
-				sizeof(req), true, &skb);
+	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_QUERY(EFUSE_ACCESS),
+					&req, sizeof(req), true, &skb);
 	if (ret)
 		return ret;
 
-- 
2.18.0



From ryder.lee at mediatek.com  Sat Dec  3 13:33:19 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Sun, 4 Dec 2022 05:33:19 +0800
Subject: [PATCH v2 3/3] wifi: mt76: mt7915: check the correctness of event data
In-Reply-To: <3fec8b8c618a78d1197f4060f89fa8bdd836b425.1670102099.git.ryder.lee@mediatek.com>
References: <3fec8b8c618a78d1197f4060f89fa8bdd836b425.1670102099.git.ryder.lee@mediatek.com>
Message-ID: <4872e6fb6ca30b62a45d45a46c623a413acfaae2.1670102099.git.ryder.lee@mediatek.com>

The mcu event might not be reliable, so check the correctness of data
before handling it.

Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
 .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 21 +++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
index 86ec767266cc..37a3c1f082d9 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
@@ -232,8 +232,11 @@ mt7915_mcu_rx_csa_notify(struct mt7915_dev *dev, struct sk_buff *skb)
 
 	c = (struct mt7915_mcu_csa_notify *)skb->data;
 
+	if (c->band_idx > MT_BAND1)
+		return;
+
 	if ((c->band_idx && !dev->phy.mt76->band_idx) &&
-	     dev->mt76.phys[MT_BAND1])
+	    dev->mt76.phys[MT_BAND1])
 		mphy = dev->mt76.phys[MT_BAND1];
 
 	ieee80211_iterate_active_interfaces_atomic(mphy->hw,
@@ -252,8 +255,11 @@ mt7915_mcu_rx_thermal_notify(struct mt7915_dev *dev, struct sk_buff *skb)
 	if (t->ctrl.ctrl_id != THERMAL_PROTECT_ENABLE)
 		return;
 
+	if (t->ctrl.band_idx > MT_BAND1)
+		return;
+
 	if ((t->ctrl.band_idx && !dev->phy.mt76->band_idx) &&
-	     dev->mt76.phys[MT_BAND1])
+	    dev->mt76.phys[MT_BAND1])
 		mphy = dev->mt76.phys[MT_BAND1];
 
 	phy = (struct mt7915_phy *)mphy->priv;
@@ -268,8 +274,11 @@ mt7915_mcu_rx_radar_detected(struct mt7915_dev *dev, struct sk_buff *skb)
 
 	r = (struct mt7915_mcu_rdd_report *)skb->data;
 
+	if (r->band_idx > MT_BAND1)
+		return;
+
 	if ((r->band_idx && !dev->phy.mt76->band_idx) &&
-	     dev->mt76.phys[MT_BAND1])
+	    dev->mt76.phys[MT_BAND1])
 		mphy = dev->mt76.phys[MT_BAND1];
 
 	if (r->band_idx == MT_RX_SEL2)
@@ -326,7 +335,11 @@ mt7915_mcu_rx_bcc_notify(struct mt7915_dev *dev, struct sk_buff *skb)
 
 	b = (struct mt7915_mcu_bcc_notify *)skb->data;
 
-	if ((b->band_idx && !dev->phy.mt76->band_idx) && dev->mt76.phys[MT_BAND1])
+	if (b->band_idx > MT_BAND1)
+		return;
+
+	if ((b->band_idx && !dev->phy.mt76->band_idx) &&
+	    dev->mt76.phys[MT_BAND1])
 		mphy = dev->mt76.phys[MT_BAND1];
 
 	ieee80211_iterate_active_interfaces_atomic(mphy->hw,
-- 
2.18.0



From ryder.lee at mediatek.com  Sat Dec  3 13:33:18 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Sun, 4 Dec 2022 05:33:18 +0800
Subject: [PATCH v2 2/3] wifi: mt76: mt7996: check return value before accessing free_block_num
In-Reply-To: <3fec8b8c618a78d1197f4060f89fa8bdd836b425.1670102099.git.ryder.lee@mediatek.com>
References: <3fec8b8c618a78d1197f4060f89fa8bdd836b425.1670102099.git.ryder.lee@mediatek.com>
Message-ID: <9ccf148192bb47462468ec286c8b3657051ddb02.1670102099.git.ryder.lee@mediatek.com>

Check return value of mt7996_mcu_get_eeprom_free_block() first before
accessing free_block_num.

Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
change since v2 - check return value of mt7996_mcu_get_eeprom as well.
---
 .../net/wireless/mediatek/mt76/mt7996/eeprom.c | 18 ++++++++++++------
 .../net/wireless/mediatek/mt76/mt7996/mcu.c    |  5 +++--
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c
index b9f62bedbc48..5d8e0353627e 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c
@@ -65,17 +65,23 @@ static int mt7996_eeprom_load(struct mt7996_dev *dev)
 	} else {
 		u8 free_block_num;
 		u32 block_num, i;
+		u32 eeprom_blk_size = MT7996_EEPROM_BLOCK_SIZE;
 
-		/* TODO: check free block event */
-		mt7996_mcu_get_eeprom_free_block(dev, &free_block_num);
-		/* efuse info not enough */
+		ret = mt7996_mcu_get_eeprom_free_block(dev, &free_block_num);
+		if (ret < 0)
+			return ret;
+
+		/* efuse info isn't enough */
 		if (free_block_num >= 59)
 			return -EINVAL;
 
 		/* read eeprom data from efuse */
-		block_num = DIV_ROUND_UP(MT7996_EEPROM_SIZE, MT7996_EEPROM_BLOCK_SIZE);
-		for (i = 0; i < block_num; i++)
-			mt7996_mcu_get_eeprom(dev, i * MT7996_EEPROM_BLOCK_SIZE);
+		block_num = DIV_ROUND_UP(MT7996_EEPROM_SIZE, eeprom_blk_size);
+		for (i = 0; i < block_num; i++) {
+			ret = mt7996_mcu_get_eeprom(dev, i * eeprom_blk_size);
+			if (ret < 0)
+				return ret;
+		}
 	}
 
 	return mt7996_check_eeprom(dev);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
index efb245c8ac84..da72684e4308 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
@@ -2927,8 +2927,9 @@ int mt7996_mcu_get_eeprom(struct mt7996_dev *dev, u32 offset)
 	bool valid;
 	int ret;
 
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_WM_UNI_CMD_QUERY(EFUSE_CTRL), &req,
-					sizeof(req), true, &skb);
+	ret = mt76_mcu_send_and_get_msg(&dev->mt76,
+					MCU_WM_UNI_CMD_QUERY(EFUSE_CTRL),
+					&req, sizeof(req), true, &skb);
 	if (ret)
 		return ret;
 
-- 
2.18.0



From ryder.lee at mediatek.com  Sat Dec  3 13:33:17 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Sun, 4 Dec 2022 05:33:17 +0800
Subject: [PATCH v2 1/3] wifi: mt76: mt7915: check return value before accessing free_block_num
Message-ID: <3fec8b8c618a78d1197f4060f89fa8bdd836b425.1670102099.git.ryder.lee@mediatek.com>

Check return value of mt7915_mcu_get_eeprom_free_block() first before
accessing free_block_num.

Fixes: bbc1d4154ec1 ("mt76: mt7915: add default calibrated data support")
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
change since v2 - check return value of mt7915_mcu_get_eeprom() as well.
---
 .../wireless/mediatek/mt76/mt7915/eeprom.c    | 19 ++++++++++++-------
 .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 10 ++++++----
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
index 59069fb86414..24efa280dd86 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
@@ -110,18 +110,23 @@ static int mt7915_eeprom_load(struct mt7915_dev *dev)
 	} else {
 		u8 free_block_num;
 		u32 block_num, i;
+		u32 eeprom_blk_size = MT7915_EEPROM_BLOCK_SIZE;
 
-		mt7915_mcu_get_eeprom_free_block(dev, &free_block_num);
-		/* efuse info not enough */
+		ret = mt7915_mcu_get_eeprom_free_block(dev, &free_block_num);
+		if (ret < 0)
+			return ret;
+
+		/* efuse info isn't enough */
 		if (free_block_num >= 29)
 			return -EINVAL;
 
 		/* read eeprom data from efuse */
-		block_num = DIV_ROUND_UP(eeprom_size,
-					 MT7915_EEPROM_BLOCK_SIZE);
-		for (i = 0; i < block_num; i++)
-			mt7915_mcu_get_eeprom(dev,
-					      i * MT7915_EEPROM_BLOCK_SIZE);
+		block_num = DIV_ROUND_UP(eeprom_size, eeprom_blk_size);
+		for (i = 0; i < block_num; i++) {
+			ret = mt7915_mcu_get_eeprom(dev, i * eeprom_blk_size);
+			if (ret < 0)
+				return ret;
+		}
 	}
 
 	return mt7915_check_eeprom(dev);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
index ca315af3905b..86ec767266cc 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
@@ -2792,8 +2792,9 @@ int mt7915_mcu_get_eeprom(struct mt7915_dev *dev, u32 offset)
 	int ret;
 	u8 *buf;
 
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_QUERY(EFUSE_ACCESS), &req,
-				sizeof(req), true, &skb);
+	ret = mt76_mcu_send_and_get_msg(&dev->mt76,
+					MCU_EXT_QUERY(EFUSE_ACCESS),
+					&req, sizeof(req), true, &skb);
 	if (ret)
 		return ret;
 
@@ -2818,8 +2819,9 @@ int mt7915_mcu_get_eeprom_free_block(struct mt7915_dev *dev, u8 *block_num)
 	struct sk_buff *skb;
 	int ret;
 
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_QUERY(EFUSE_FREE_BLOCK), &req,
-					sizeof(req), true, &skb);
+	ret = mt76_mcu_send_and_get_msg(&dev->mt76,
+					MCU_EXT_QUERY(EFUSE_FREE_BLOCK),
+					&req, sizeof(req), true, &skb);
 	if (ret)
 		return ret;
 
-- 
2.18.0



From ryder.lee at mediatek.com  Sat Dec  3 23:18:14 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Sun, 4 Dec 2022 15:18:14 +0800
Subject: [PATCH 1/2] wifi: mt76: mt7915: drop always true condition of __mt7915_reg_addr()
Message-ID: <c7a43d2a715d0ed911780712edc60c7adbee806d.1670137513.git.ryder.lee@mediatek.com>

smatch warnings:
addr <= MT_CBTOP2_PHY_END(0xffffffff) is always true (<= u32max),
so drop it.

Fixes: c2bf05db6c78 ("mt76: mt7915: refine register definition")
Reported-by: kernel test robot <lkp at intel.com>
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7915/mmio.c | 2 +-
 drivers/net/wireless/mediatek/mt76/mt7915/regs.h | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
index 0a95c3da241b..52be55dff947 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
@@ -495,7 +495,7 @@ static u32 __mt7915_reg_addr(struct mt7915_dev *dev, u32 addr)
 
 	if (dev_is_pci(dev->mt76.dev) &&
 	    ((addr >= MT_CBTOP1_PHY_START && addr <= MT_CBTOP1_PHY_END) ||
-	     (addr >= MT_CBTOP2_PHY_START && addr <= MT_CBTOP2_PHY_END)))
+	    addr >= MT_CBTOP2_PHY_START))
 		return mt7915_reg_map_l1(dev, addr);
 
 	/* CONN_INFRA: covert to phyiscal addr and use layer 1 remap */
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/regs.h b/drivers/net/wireless/mediatek/mt76/mt7915/regs.h
index aca1b2f1e9e3..7e0d86366c77 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/regs.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/regs.h
@@ -803,7 +803,6 @@ enum offs_rev {
 #define MT_CBTOP1_PHY_START		0x70000000
 #define MT_CBTOP1_PHY_END		__REG(CBTOP1_PHY_END)
 #define MT_CBTOP2_PHY_START		0xf0000000
-#define MT_CBTOP2_PHY_END		0xffffffff
 #define MT_INFRA_MCU_START		0x7c000000
 #define MT_INFRA_MCU_END		__REG(INFRA_MCU_ADDR_END)
 #define MT_CONN_INFRA_OFFSET(p)		((p) - MT_INFRA_BASE)
-- 
2.18.0



From ryder.lee at mediatek.com  Sat Dec  3 23:18:15 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Sun, 4 Dec 2022 15:18:15 +0800
Subject: [PATCH 2/2] wifi: mt76: mt7996: drop always true condition of __mt7996_reg_addr()
In-Reply-To: <c7a43d2a715d0ed911780712edc60c7adbee806d.1670137513.git.ryder.lee@mediatek.com>
References: <c7a43d2a715d0ed911780712edc60c7adbee806d.1670137513.git.ryder.lee@mediatek.com>
Message-ID: <50f23916e9ec9082ab209fbb7ded9e211ad50384.1670137513.git.ryder.lee@mediatek.com>

addr <= MT_CBTOP2_PHY_END(0xffffffff) is always true (<= u32max),
so drop it.

Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7996/mmio.c | 2 +-
 drivers/net/wireless/mediatek/mt76/mt7996/regs.h | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mmio.c b/drivers/net/wireless/mediatek/mt76/mt7996/mmio.c
index 521769eb6b0e..60781d046216 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mmio.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mmio.c
@@ -149,7 +149,7 @@ static u32 __mt7996_reg_addr(struct mt7996_dev *dev, u32 addr)
 
 	if (dev_is_pci(dev->mt76.dev) &&
 	    ((addr >= MT_CBTOP1_PHY_START && addr <= MT_CBTOP1_PHY_END) ||
-	     (addr >= MT_CBTOP2_PHY_START && addr <= MT_CBTOP2_PHY_END)))
+	    addr >= MT_CBTOP2_PHY_START))
 		return mt7996_reg_map_l1(dev, addr);
 
 	/* CONN_INFRA: covert to phyiscal addr and use layer 1 remap */
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/regs.h b/drivers/net/wireless/mediatek/mt76/mt7996/regs.h
index 794f61b93a46..42980b97b4d4 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/regs.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/regs.h
@@ -463,7 +463,6 @@ enum base_rev {
 #define MT_CBTOP1_PHY_START			0x70000000
 #define MT_CBTOP1_PHY_END			0x77ffffff
 #define MT_CBTOP2_PHY_START			0xf0000000
-#define MT_CBTOP2_PHY_END			0xffffffff
 #define MT_INFRA_MCU_START			0x7c000000
 #define MT_INFRA_MCU_END			0x7c3fffff
 
-- 
2.18.0



From deren.wu at mediatek.com  Sun Dec  4 00:24:16 2022
From: deren.wu at mediatek.com (Deren Wu)
Date: Sun, 4 Dec 2022 16:24:16 +0800
Subject: [PATCH] mmc: vub300: fix warning - do not call blocking ops when !TASK_RUNNING
Message-ID: <87dc45b122d26d63c80532976813c9365d7160b3.1670140888.git.deren.wu@mediatek.com>

vub300_enable_sdio_irq() works with mutex and need TASK_RUNNING here.
Ensure that we mark current as TASK_RUNNING for sleepable context.

[   77.554641] do not call blocking ops when !TASK_RUNNING; state=1 set at [<ffffffff92a72c1d>] sdio_irq_thread+0x17d/0x5b0
[   77.554652] WARNING: CPU: 2 PID: 1983 at kernel/sched/core.c:9813 __might_sleep+0x116/0x160
[   77.554905] CPU: 2 PID: 1983 Comm: ksdioirqd/mmc1 Tainted: G           OE      6.1.0-rc5 #1
[   77.554910] Hardware name: Intel(R) Client Systems NUC8i7BEH/NUC8BEB, BIOS BECFL357.86A.0081.2020.0504.1834 05/04/2020
[   77.554912] RIP: 0010:__might_sleep+0x116/0x160
[   77.554920] RSP: 0018:ffff888107b7fdb8 EFLAGS: 00010282
[   77.554923] RAX: 0000000000000000 RBX: ffff888118c1b740 RCX: 0000000000000000
[   77.554926] RDX: 0000000000000001 RSI: 0000000000000004 RDI: ffffed1020f6ffa9
[   77.554928] RBP: ffff888107b7fde0 R08: 0000000000000001 R09: ffffed1043ea60ba
[   77.554930] R10: ffff88821f5305cb R11: ffffed1043ea60b9 R12: ffffffff93aa3a60
[   77.554932] R13: 000000000000011b R14: 7fffffffffffffff R15: ffffffffc0558660
[   77.554934] FS:  0000000000000000(0000) GS:ffff88821f500000(0000) knlGS:0000000000000000
[   77.554937] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   77.554939] CR2: 00007f8a44010d68 CR3: 000000024421a003 CR4: 00000000003706e0
[   77.554942] Call Trace:
[   77.554944]  <TASK>
[   77.554952]  mutex_lock+0x78/0xf0
[   77.554973]  vub300_enable_sdio_irq+0x103/0x3c0 [vub300]
[   77.554981]  sdio_irq_thread+0x25c/0x5b0
[   77.555006]  kthread+0x2b8/0x370
[   77.555017]  ret_from_fork+0x1f/0x30
[   77.555023]  </TASK>
[   77.555025] ---[ end trace 0000000000000000 ]---

Fixes: 88095e7b473a ("mmc: Add new VUB300 USB-to-SD/SDIO/MMC driver")
Signed-off-by: Deren Wu <deren.wu at mediatek.com>
---
 drivers/mmc/host/vub300.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/mmc/host/vub300.c b/drivers/mmc/host/vub300.c
index 97beece62fec..b58a1a869ed8 100644
--- a/drivers/mmc/host/vub300.c
+++ b/drivers/mmc/host/vub300.c
@@ -2049,6 +2049,7 @@ static void vub300_enable_sdio_irq(struct mmc_host *mmc, int enable)
 		return;
 	kref_get(&vub300->kref);
 	if (enable) {
+		set_current_state(TASK_RUNNING);
 		mutex_lock(&vub300->irq_mutex);
 		if (vub300->irqs_queued) {
 			vub300->irqs_queued -= 1;
@@ -2064,6 +2065,7 @@ static void vub300_enable_sdio_irq(struct mmc_host *mmc, int enable)
 			vub300_queue_poll_work(vub300, 0);
 		}
 		mutex_unlock(&vub300->irq_mutex);
+		set_current_state(TASK_INTERRUPTIBLE);
 	} else {
 		vub300->irq_enabled = 0;
 	}
-- 
2.18.0



From leon at kernel.org  Sun Dec  4 04:32:44 2022
From: leon at kernel.org (Leon Romanovsky)
Date: Sun, 4 Dec 2022 14:32:44 +0200
Subject: [PATCH] net: ethernet: mtk_wed: Fix missing of_node_put() in
 mtk_wed_wo_hardware_init()
In-Reply-To: <20221202083029.87834-1-yuancan@huawei.com>
References: <20221202083029.87834-1-yuancan@huawei.com>
Message-ID: <Y4yTbO0+7MmhTvVT@unreal>

On Fri, Dec 02, 2022 at 08:30:29AM +0000, Yuan Can wrote:
> The np needs to be released through of_node_put() in the error handling
> path of mtk_wed_wo_hardware_init().
> 
> Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
> Signed-off-by: Yuan Can <yuancan at huawei.com>
> ---
>  drivers/net/ethernet/mediatek/mtk_wed_wo.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)

Please use [PATCH net-next] ... format in title.

> 
> diff --git a/drivers/net/ethernet/mediatek/mtk_wed_wo.c b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
> index 4754b6db009e..d61bd0b11331 100644
> --- a/drivers/net/ethernet/mediatek/mtk_wed_wo.c
> +++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
> @@ -407,8 +407,10 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
>  		return -ENODEV;
>  
>  	wo->mmio.regs = syscon_regmap_lookup_by_phandle(np, NULL);
> -	if (IS_ERR_OR_NULL(wo->mmio.regs))

syscon_regmap_lookup_by_phandle() returns or error or valid pointer.
The right check needs to be IS_ERR(wo->mmio.regs)

Thanks

> -		return PTR_ERR(wo->mmio.regs);
> +	if (IS_ERR_OR_NULL(wo->mmio.regs)) {
> +		ret = PTR_ERR(wo->mmio.regs);
> +		goto error_put;
> +	}
>  
>  	wo->mmio.irq = irq_of_parse_and_map(np, 0);
>  	wo->mmio.irq_mask = MTK_WED_WO_ALL_INT_MASK;
> @@ -456,7 +458,8 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
>  
>  error:
>  	devm_free_irq(wo->hw->dev, wo->mmio.irq, wo);
> -
> +error_put:
> +	of_node_put(np);
>  	return ret;
>  }
>  
> -- 
> 2.17.1
> 


From frank-w at public-files.de  Sun Dec  4 04:35:35 2022
From: frank-w at public-files.de (Frank Wunderlich)
Date: Sun, 4 Dec 2022 13:35:35 +0100
Subject: Aw: [PATCH 5/5] net: ethernet: mtk_eth_soc: drop generic vlan rx
 offload, only use DSA untagging
In-Reply-To: <20221123095754.36821-5-nbd@nbd.name>
References: <20221123095754.36821-1-nbd@nbd.name>
 <20221123095754.36821-5-nbd@nbd.name>
Message-ID: <trinity-4e4e0da1-db81-4a48-986c-a68328a84b45-1670157335627@3c-app-gmx-bap34>

Hi,

tested this series on 6.1-next and it fixes my vlan-issues on gmac (Bananapi-R3 sfp-wan). maybe it can be
backported including depencies to 6.1 as this becomes the next lts?

this series on 6.1 is not enough to fix vlan-issue...so i miss anything there

but for next

Tested-By: Frank Wunderlich <frank-w at public-files.de>

regards Frank


From leon at kernel.org  Sun Dec  4 05:06:54 2022
From: leon at kernel.org (Leon Romanovsky)
Date: Sun, 4 Dec 2022 15:06:54 +0200
Subject: [PATCH net-next] net: ethernet: mtk_wed: fix possible deadlock
 if mtk_wed_wo_init fails
In-Reply-To: <a87f05e60ea1a94b571c9c87b69cc5b0e94943f2.1669999089.git.lorenzo@kernel.org>
References: <a87f05e60ea1a94b571c9c87b69cc5b0e94943f2.1669999089.git.lorenzo@kernel.org>
Message-ID: <Y4ybbkn+nXkGsqWe@unreal>

On Fri, Dec 02, 2022 at 06:36:33PM +0100, Lorenzo Bianconi wrote:
> Introduce __mtk_wed_detach() in order to avoid a possible deadlock in
> mtk_wed_attach routine if mtk_wed_wo_init fails.
> 
> Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
> Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> ---
>  drivers/net/ethernet/mediatek/mtk_wed.c     | 24 ++++++++++++++-------
>  drivers/net/ethernet/mediatek/mtk_wed_mcu.c | 10 ++++++---
>  drivers/net/ethernet/mediatek/mtk_wed_wo.c  |  3 +++
>  3 files changed, 26 insertions(+), 11 deletions(-)

<...>

> diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> index f9539e6233c9..b084009a32f9 100644
> --- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> @@ -176,6 +176,9 @@ int mtk_wed_mcu_send_msg(struct mtk_wed_wo *wo, int id, int cmd,
>  	u16 seq;
>  	int ret;
>  
> +	if (!wo)
> +		return -ENODEV;

<...>

>  static void
>  mtk_wed_wo_hw_deinit(struct mtk_wed_wo *wo)
>  {
> +	if (!wo)
> +		return;

How are these changes related to the written in deadlock?
How is it possible to get internal mtk functions without valid wo?

Thanks

> +
>  	/* disable interrupts */
>  	mtk_wed_wo_set_isr(wo, 0);
>  
> -- 
> 2.38.1
> 


From lorenzo at kernel.org  Sun Dec  4 07:09:21 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Sun, 4 Dec 2022 16:09:21 +0100
Subject: [PATCH net-next] net: ethernet: mtk_wed: fix possible deadlock
 if mtk_wed_wo_init fails
In-Reply-To: <Y4ybbkn+nXkGsqWe@unreal>
References: <a87f05e60ea1a94b571c9c87b69cc5b0e94943f2.1669999089.git.lorenzo@kernel.org>
 <Y4ybbkn+nXkGsqWe@unreal>
Message-ID: <Y4y4If8XXu+wErIj@lore-desk>

> On Fri, Dec 02, 2022 at 06:36:33PM +0100, Lorenzo Bianconi wrote:
> > Introduce __mtk_wed_detach() in order to avoid a possible deadlock in
> > mtk_wed_attach routine if mtk_wed_wo_init fails.
> > 
> > Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
> > Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> > ---
> >  drivers/net/ethernet/mediatek/mtk_wed.c     | 24 ++++++++++++++-------
> >  drivers/net/ethernet/mediatek/mtk_wed_mcu.c | 10 ++++++---
> >  drivers/net/ethernet/mediatek/mtk_wed_wo.c  |  3 +++
> >  3 files changed, 26 insertions(+), 11 deletions(-)
> 
> <...>
> 
> > diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > index f9539e6233c9..b084009a32f9 100644
> > --- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > @@ -176,6 +176,9 @@ int mtk_wed_mcu_send_msg(struct mtk_wed_wo *wo, int id, int cmd,
> >  	u16 seq;
> >  	int ret;
> >  
> > +	if (!wo)
> > +		return -ENODEV;
> 
> <...>
> 
> >  static void
> >  mtk_wed_wo_hw_deinit(struct mtk_wed_wo *wo)
> >  {
> > +	if (!wo)
> > +		return;
> 
> How are these changes related to the written in deadlock?
> How is it possible to get internal mtk functions without valid wo?

Hi Leon,

if mtk_wed_rro_alloc() fails in mtk_wed_attach(), we will end up running
__mtk_wed_detach() when wo struct is not allocated yet (wo is allocated in
mtk_wed_wo_init()).
Moreover __mtk_wed_detach() can run mtk_wed_wo_reset() and mtk_wed_wo_deinit()
so we will need to check if wo pointer is properly set. We will face the same
issue if wo allocation fails in mtk_wed_wo_init routine.
If we remove the deadlock we need to take into account even these conditions.

Regards,
Lorenzo

> 
> Thanks
> 
> > +
> >  	/* disable interrupts */
> >  	mtk_wed_wo_set_isr(wo, 0);
> >  
> > -- 
> > 2.38.1
> > 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221204/5da8e8cb/attachment.sig>

From daniel.lezcano at linaro.org  Sun Dec  4 08:33:44 2022
From: daniel.lezcano at linaro.org (Daniel Lezcano)
Date: Sun, 4 Dec 2022 17:33:44 +0100
Subject: [PATCH v2 2/2] dt-bindings: thermal: mediatek: add compatible
 string for MT7986 and MT7981 SoC
In-Reply-To: <Y4dYpoVBmKZSaX2q@makrotopia.org>
References: <Y4dYpoVBmKZSaX2q@makrotopia.org>
Message-ID: <b31c5497-2f14-8a5b-0980-72fb6a87e227@linaro.org>

On 30/11/2022 14:20, Daniel Golle wrote:
> Document compatible string 'mediatek,mt7986-thermal' for V3 thermal
> unit found in MT7986 SoCs.
> 'mediatek,mt7981-thermal' is also added as it is identical with the
> thermal unit of MT7986.
> 
> Signed-off-by: Daniel Golle <daniel at makrotopia.org>
> ---

Applied, thanks

-- 
<http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog



From daniel.lezcano at linaro.org  Sun Dec  4 09:26:07 2022
From: daniel.lezcano at linaro.org (Daniel Lezcano)
Date: Sun, 4 Dec 2022 18:26:07 +0100
Subject: [PATCH v7 4/4] thermal: mediatek: add another get_temp ops for
 thermal sensors
In-Reply-To: <20221018-up-i350-thermal-bringup-v7-4-ebf08ff2eddb@baylibre.com>
References: <20221018-up-i350-thermal-bringup-v7-0-ebf08ff2eddb@baylibre.com>
 <20221018-up-i350-thermal-bringup-v7-4-ebf08ff2eddb@baylibre.com>
Message-ID: <4121bb6b-30db-7a23-f4c8-40afdda7a0b5@linaro.org>

On 18/11/2022 12:04, Amjad Ouled-Ameur wrote:
> Provide thermal zone to read thermal sensor in the SoC. We can read all the
> thermal sensors value in the SoC by the node /sys/class/thermal/
> 
> In mtk_thermal_bank_temperature, return -EAGAIN instead of -EACCESS
> on the first read of sensor that often are bogus values.
> This can avoid following warning on boot:
> 
>    thermal thermal_zone6: failed to read out thermal zone (-13)
> 
> Signed-off-by: Michael Kao <michael.kao at mediatek.com>
> Signed-off-by: Hsin-Yi Wang <hsinyi at chromium.org>
> Signed-off-by: Amjad Ouled-Ameur <aouledameur at baylibre.com>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> ---
>   drivers/thermal/mtk_thermal.c | 99 ++++++++++++++++++++++++++++++++-----------
>   1 file changed, 74 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
> index 3a5df1440822..b1f4d19edd4f 100644
> --- a/drivers/thermal/mtk_thermal.c
> +++ b/drivers/thermal/mtk_thermal.c
> @@ -259,6 +259,11 @@ enum mtk_thermal_version {
>   
>   struct mtk_thermal;
>   
> +struct mtk_thermal_zone {
> +	struct mtk_thermal *mt;
> +	int id;
> +};
> +
>   struct thermal_bank_cfg {
>   	unsigned int num_sensors;
>   	const int *sensors;
> @@ -307,6 +312,8 @@ struct mtk_thermal {
>   
>   	const struct mtk_thermal_data *conf;
>   	struct mtk_thermal_bank banks[MAX_NUM_ZONES];
> +
> +	int (*raw_to_mcelsius)(struct mtk_thermal *mt, int sensno, s32 raw);
>   };
>   
>   /* MT8183 thermal sensor data */
> @@ -709,6 +716,29 @@ static void mtk_thermal_put_bank(struct mtk_thermal_bank *bank)
>   		mutex_unlock(&mt->lock);
>   }
>   
> +static int _get_sensor_temp(struct mtk_thermal *mt, int id)
> +{
> +	u32 raw;
> +	int temp;
> +
> +	const struct mtk_thermal_data *conf = mt->conf;
> +
> +	raw = readl(mt->thermal_base + conf->msr[id]);
> +
> +	temp = mt->raw_to_mcelsius(mt, id, raw);
> +
> +	/*
> +	 * The first read of a sensor often contains very high bogus
> +	 * temperature value. Filter these out so that the system does
> +	 * not immediately shut down.
> +	 */
> +
> +	if (temp > 200000)
> +		return -EAGAIN;
> +	else
> +		return temp;
> +}
> +
>   /**
>    * mtk_thermal_bank_temperature - get the temperature of a bank
>    * @bank:	The bank
> @@ -721,26 +751,9 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
>   	struct mtk_thermal *mt = bank->mt;
>   	const struct mtk_thermal_data *conf = mt->conf;
>   	int i, temp = INT_MIN, max = INT_MIN;
> -	u32 raw;
>   
>   	for (i = 0; i < conf->bank_data[bank->id].num_sensors; i++) {
> -		raw = readl(mt->thermal_base + conf->msr[i]);
> -
> -		if (mt->conf->version == MTK_THERMAL_V1) {
> -			temp = raw_to_mcelsius_v1(
> -				mt, conf->bank_data[bank->id].sensors[i], raw);
> -		} else {
> -			temp = raw_to_mcelsius_v2(
> -				mt, conf->bank_data[bank->id].sensors[i], raw);
> -		}
> -
> -		/*
> -		 * The first read of a sensor often contains very high bogus
> -		 * temperature value. Filter these out so that the system does
> -		 * not immediately shut down.
> -		 */
> -		if (temp > 200000)
> -			temp = 0;
> +		temp = _get_sensor_temp(mt, i);
>   
>   		if (temp > max)
>   			max = temp;
> @@ -749,9 +762,10 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
>   	return max;
>   }
>   
> -static int mtk_read_temp(struct thermal_zone_device *tz, int *temperature)
> +static int mtk_read_temp(struct thermal_zone_device *tzdev, int *temperature)
>   {
> -	struct mtk_thermal *mt = tz->devdata;
> +	struct mtk_thermal_zone *tz = tzdev->devdata;
> +	struct mtk_thermal *mt = tz->mt;
>   	int i;
>   	int tempmax = INT_MIN;
>   
> @@ -770,10 +784,28 @@ static int mtk_read_temp(struct thermal_zone_device *tz, int *temperature)
>   	return 0;
>   }
>   
> +static int mtk_read_sensor_temp(struct thermal_zone_device *tzdev, int *temperature)
> +{
> +	struct mtk_thermal_zone *tz = tzdev->devdata;
> +	struct mtk_thermal *mt = tz->mt;
> +	int id = tz->id - 1;
> +
> +	if (id < 0)
> +		return -EACCES;
> +
> +	*temperature = _get_sensor_temp(mt, id);
> +
> +	return 0;
> +}
> +
>   static const struct thermal_zone_device_ops mtk_thermal_ops = {
>   	.get_temp = mtk_read_temp,
>   };
>   
> +static const struct thermal_zone_device_ops mtk_thermal_sensor_ops = {
> +	.get_temp = mtk_read_sensor_temp,
> +};
> +
>   static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
>   				  u32 apmixed_phys_base, u32 auxadc_phys_base,
>   				  int ctrl_id)
> @@ -1072,6 +1104,7 @@ static int mtk_thermal_probe(struct platform_device *pdev)
>   	u64 auxadc_phys_base, apmixed_phys_base;
>   	struct thermal_zone_device *tzdev;
>   	void __iomem *apmixed_base, *auxadc_base;
> +	struct mtk_thermal_zone *tz;
>   
>   	mt = devm_kzalloc(&pdev->dev, sizeof(*mt), GFP_KERNEL);
>   	if (!mt)
> @@ -1150,6 +1183,9 @@ static int mtk_thermal_probe(struct platform_device *pdev)
>   
>   	mtk_thermal_turn_on_buffer(mt, apmixed_base);
>   
> +	mt->raw_to_mcelsius = (mt->conf->version == MTK_THERMAL_V1) ?
> +				raw_to_mcelsius_v1 : raw_to_mcelsius_v2;
> +
>   	if (mt->conf->version == MTK_THERMAL_V2) {
>   		mtk_thermal_release_periodic_ts(mt, auxadc_base);
>   	}
> @@ -1161,11 +1197,24 @@ static int mtk_thermal_probe(struct platform_device *pdev)
>   
>   	platform_set_drvdata(pdev, mt);
>   
> -	tzdev = devm_thermal_of_zone_register(&pdev->dev, 0, mt,
> -					      &mtk_thermal_ops);
> -	if (IS_ERR(tzdev)) {
> -		ret = PTR_ERR(tzdev);
> -		goto err_disable_clk_peri_therm;
> +	for (i = 0; i < mt->conf->num_sensors + 1; i++) {
> +		tz = devm_kmalloc(&pdev->dev, sizeof(*tz), GFP_KERNEL);
> +		if (!tz)
> +			return -ENOMEM;
> +
> +		tz->mt = mt;
> +		tz->id = i;
> +
> +		tzdev = devm_thermal_of_zone_register(&pdev->dev, i, tz, (i == 0) ?
> +							     &mtk_thermal_ops :
> +							     &mtk_thermal_sensor_ops);

Here you use again the aggregation

> +
> +		if (IS_ERR(tzdev)) {
> +			ret = PTR_ERR(tzdev);
> +			if (ret == -ENODEV)
> +				continue;
> +			goto err_disable_clk_peri_therm;
> +		}
>   	}
>   
>   	ret = devm_thermal_add_hwmon_sysfs(tzdev);
> 

-- 
<http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog



From ryazanov.s.a at gmail.com  Sun Dec  4 10:52:38 2022
From: ryazanov.s.a at gmail.com (Sergey Ryazanov)
Date: Sun, 4 Dec 2022 22:52:38 +0400
Subject: [PATCH net-next v1 01/13] net: wwan: tmi: Add PCIe core
In-Reply-To: <20221122111152.160377-2-yanchao.yang@mediatek.com>
References: <20221122111152.160377-1-yanchao.yang@mediatek.com>
 <20221122111152.160377-2-yanchao.yang@mediatek.com>
Message-ID: <64aada78-8029-1b05-b802-a005549503c9@gmail.com>

Hello Yanchao,

On 22.11.2022 15:11, Yanchao Yang wrote:
> From: MediaTek Corporation <linuxwwan at mediatek.com>
> 
> Registers the TMI device driver with the kernel. Set up all the fundamental
> configurations for the device: PCIe layer, Modem Host Cross Core Interface
> (MHCCIF), Reset Generation Unit (RGU), modem common control operations and
> build infrastructure.
> 
> * PCIe layer code implements driver probe and removal, MSI-X interrupt
> initialization and de-initialization, and the way of resetting the device.
> * MHCCIF provides interrupt channels to communicate events such as handshake,
> PM and port enumeration.
> * RGU provides interrupt channels to generate notifications from the device
> so that the TMI driver could get the device reset.
> * Modem common control operations provide the basic read/write functions of
> the device's hardware registers, mask/unmask/get/clear functions of the
> device's interrupt registers and inquiry functions of the device's status.
> 
> Signed-off-by: Ting Wang <ting.wang at mediatek.com>
> Signed-off-by: MediaTek Corporation <linuxwwan at mediatek.com>
> ---
>   drivers/net/wwan/Kconfig                 |   11 +
>   drivers/net/wwan/Makefile                |    1 +
>   drivers/net/wwan/mediatek/Makefile       |   12 +
>   drivers/net/wwan/mediatek/mtk_common.h   |   30 +
>   drivers/net/wwan/mediatek/mtk_dev.c      |   50 +
>   drivers/net/wwan/mediatek/mtk_dev.h      |  503 ++++++++++
>   drivers/net/wwan/mediatek/pcie/mtk_pci.c | 1164 ++++++++++++++++++++++
>   drivers/net/wwan/mediatek/pcie/mtk_pci.h |  150 +++
>   drivers/net/wwan/mediatek/pcie/mtk_reg.h |   69 ++
>   9 files changed, 1990 insertions(+)
>   create mode 100644 drivers/net/wwan/mediatek/Makefile
>   create mode 100644 drivers/net/wwan/mediatek/mtk_common.h
>   create mode 100644 drivers/net/wwan/mediatek/mtk_dev.c
>   create mode 100644 drivers/net/wwan/mediatek/mtk_dev.h
>   create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_pci.c
>   create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_pci.h
>   create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_reg.h
> 
> diff --git a/drivers/net/wwan/Kconfig b/drivers/net/wwan/Kconfig
> index 3486ffe94ac4..a93a0c511d50 100644
> --- a/drivers/net/wwan/Kconfig
> +++ b/drivers/net/wwan/Kconfig
> @@ -119,6 +119,17 @@ config MTK_T7XX
>   
>   	  If unsure, say N.
>   
> +config MTK_TMI
> +	tristate "TMI Driver for Mediatek T-series Device"
> +	depends on PCI
> +	help
> +	  This driver enables Mediatek T-series WWAN Device communication.
> +
> +	  If you have one of those Mediatek T-series WWAN Modules and wish to
> +	  use it in Linux say Y/M here.

 From this and the series descriptions, it is unclear which modem chips 
this driver is intended for and how does it correlate with the T7xx 
driver? Is the TMI driver a drop-in replacement for the t7xx driver, or 
does the TMI driver support any T-series chips except t7xx?

> +
> +	  If unsure, say N.
> +
>   endif # WWAN
>   
>   endmenu
> diff --git a/drivers/net/wwan/Makefile b/drivers/net/wwan/Makefile
> index 3960c0ae2445..198d8074851f 100644
> --- a/drivers/net/wwan/Makefile
> +++ b/drivers/net/wwan/Makefile
> @@ -14,3 +14,4 @@ obj-$(CONFIG_QCOM_BAM_DMUX) += qcom_bam_dmux.o
>   obj-$(CONFIG_RPMSG_WWAN_CTRL) += rpmsg_wwan_ctrl.o
>   obj-$(CONFIG_IOSM) += iosm/
>   obj-$(CONFIG_MTK_T7XX) += t7xx/
> +obj-$(CONFIG_MTK_TMI) += mediatek/

The driver is called mtk_tmi, but its code is placed to the directory 
with too generic name 'mediatek'. Do you plan too keep all possible 
future drivers in this directory?

--
Sergey


From ryazanov.s.a at gmail.com  Sun Dec  4 10:58:21 2022
From: ryazanov.s.a at gmail.com (Sergey Ryazanov)
Date: Sun, 4 Dec 2022 22:58:21 +0400
Subject: [PATCH net-next v1 02/13] net: wwan: tmi: Add buffer management
In-Reply-To: <20221122111152.160377-3-yanchao.yang@mediatek.com>
References: <20221122111152.160377-1-yanchao.yang@mediatek.com>
 <20221122111152.160377-3-yanchao.yang@mediatek.com>
Message-ID: <14db8809-6144-1d10-59e7-298079b2e6e2@gmail.com>

On 22.11.2022 15:11, Yanchao Yang wrote:
> From: MediaTek Corporation <linuxwwan at mediatek.com>
> 
> To malloc I/O memory as soon as possible, buffer management comes into being.
> It creates buffer pools that reserve some buffers through deferred works when
> the driver isn't busy.
> 
> The buffer management provides unified memory allocation/de-allocation
> interfaces for other modules. It supports two buffer types of SKB and page.
> Two reload work queues with different priority values are provided to meet
> various requirements of the control plane and the data plane.
> 
> When the reserved buffer count of the pool is less than a threshold (default
> is 2/3 of the pool size), the reload work will restart to allocate buffers
> from the OS until the buffer pool becomes full. When the buffer pool fills,
> the OS will recycle the buffer freed by the user.
> 
> Signed-off-by: Mingliang Xu <mingliang.xu at mediatek.com>
> Signed-off-by: MediaTek Corporation <linuxwwan at mediatek.com>
> ---
>   drivers/net/wwan/mediatek/Makefile  |   3 +-
>   drivers/net/wwan/mediatek/mtk_bm.c  | 369 ++++++++++++++++++++++++++++
>   drivers/net/wwan/mediatek/mtk_bm.h  |  79 ++++++
>   drivers/net/wwan/mediatek/mtk_dev.c |  11 +-
>   drivers/net/wwan/mediatek/mtk_dev.h |   1 +
>   5 files changed, 461 insertions(+), 2 deletions(-)
>   create mode 100644 drivers/net/wwan/mediatek/mtk_bm.c
>   create mode 100644 drivers/net/wwan/mediatek/mtk_bm.h

Yanchao, can you share some numbers, how this custom pool is outperform 
the regular kernel allocator?

--
Sergey


From dlunev at chromium.org  Sun Dec  4 12:02:29 2022
From: dlunev at chromium.org (Daniil Lunev)
Date: Mon, 5 Dec 2022 07:02:29 +1100
Subject: [PATCH v1] ufs: core: wlun suspend SSU fail recovery
In-Reply-To: <c92655563231dd79ed6d4287d7d5bad4de142a18.camel@mediatek.com>
References: <20221101142410.31463-1-peter.wang@mediatek.com>
 <98bfafd3-c7b7-89b5-497a-aa694d0152dd@intel.com> <5e00ce60-3859-4964-11f7-e036f6dda56a@acm.org>
 <CAONX=-e1NA--3taTmfbUV+hR_LOSqvBqz_=1mPmYZWaKGGR=ig@mail.gmail.com> <c92655563231dd79ed6d4287d7d5bad4de142a18.camel@mediatek.com>
Message-ID: <CAONX=-d1Hiif9WFuGVQaMr7iUFxOpOSE7bkJriTrqh-Pvtdq0A@mail.gmail.com>

> May I have a question, which dievce you use in this failure scenario?
> I think it is same issue due to SSU fail, and wlun devcie pm enter
> error state. So the cunsomer(scsi lu device) is block in suspend state
> and connot resume to reduce pm_only lead to IO hang.
>
> Thanks.
> BR
> Peter

I don't think it is device specific. I am pretty sure it is the same
problem, for it traces to the same origin and your patch fixes the
issue (though with a lot of log spam which is a bit unfortunate, but
we can live with that)

--Daniil


From linus.walleij at linaro.org  Sun Dec  4 13:31:40 2022
From: linus.walleij at linaro.org (Linus Walleij)
Date: Sun, 4 Dec 2022 22:31:40 +0100
Subject: [PATCH 2/5] arm: dts: remove label = "cpu" from DSA dt-binding
In-Reply-To: <20221130141040.32447-3-arinc.unal@arinc9.com>
References: <20221130141040.32447-1-arinc.unal@arinc9.com> <20221130141040.32447-3-arinc.unal@arinc9.com>
Message-ID: <CACRpkdbojTVjR2G+95YS1Xqvau9XmwTkp_KtpaeE7-+v41hgeg@mail.gmail.com>

On Wed, Nov 30, 2022 at 3:13 PM Ar?n? ?NAL <arinc.unal at arinc9.com> wrote:

> This is not used by the DSA dt-binding, so remove it from all devicetrees.
>
> Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>

Acked-by: Linus Walleij <linus.walleij at linaro.org>

Yours,
Linus Walleij


From yuancan at huawei.com  Sun Dec  4 17:58:47 2022
From: yuancan at huawei.com (Yuan Can)
Date: Mon, 5 Dec 2022 01:58:47 +0000
Subject: [PATCH] net: ethernet: mtk_wed: Fix missing of_node_put() in mtk_wed_wo_hardware_init()
Message-ID: <20221205015847.27356-1-yuancan@huawei.com>

The np needs to be released through of_node_put() in the error handling
path of mtk_wed_wo_hardware_init().

Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
Signed-off-by: Yuan Can <yuancan at huawei.com>
---
 drivers/net/ethernet/mediatek/mtk_wed_wo.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_wed_wo.c b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
index 4754b6db009e..fcc4b3206d2d 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed_wo.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
@@ -407,8 +407,10 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
 		return -ENODEV;
 
 	wo->mmio.regs = syscon_regmap_lookup_by_phandle(np, NULL);
-	if (IS_ERR_OR_NULL(wo->mmio.regs))
-		return PTR_ERR(wo->mmio.regs);
+	if (IS_ERR(wo->mmio.regs)) {
+		ret = PTR_ERR(wo->mmio.regs);
+		goto error_put;
+	}
 
 	wo->mmio.irq = irq_of_parse_and_map(np, 0);
 	wo->mmio.irq_mask = MTK_WED_WO_ALL_INT_MASK;
@@ -456,7 +458,8 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
 
 error:
 	devm_free_irq(wo->hw->dev, wo->mmio.irq, wo);
-
+error_put:
+	of_node_put(np);
 	return ret;
 }
 
-- 
2.17.1



From mason.zhang at mediatek.com  Sun Dec  4 17:42:03 2022
From: mason.zhang at mediatek.com (Mason Zhang)
Date: Mon, 5 Dec 2022 09:42:03 +0800
Subject: [PATCH v2 1/1] scsi: ufs: core: fix device management cmd timeout flow
Message-ID: <20221205014202.2672-1-mason.zhang@mediatek.com>

From: Mason Zhang <Mason.Zhang at mediatek.com>

In ufs error handler flow, host will send device management cmd(NOP OUT)
to device for recovery link. If cmd response timeout, and clear doorbell
fail, ufshcd_wait_for_dev_cmd will do nothing and return,
hba->dev_cmd.complete struct not set to null.

In this time, if cmd has been responsed by device, then it will
call complete() in __ufshcd_transfer_req_compl, because of complete
struct is alloced in stack, then the KE will occur.

Fix the following crash:
  ipanic_die+0x24/0x38 [mrdump]
  die+0x344/0x748
  arm64_notify_die+0x44/0x104
  do_debug_exception+0x104/0x1e0
  el1_dbg+0x38/0x54
  el1_sync_handler+0x40/0x88
  el1_sync+0x8c/0x140
  queued_spin_lock_slowpath+0x2e4/0x3c0
  __ufshcd_transfer_req_compl+0x3b0/0x1164
  ufshcd_trc_handler+0x15c/0x308
  ufshcd_host_reset_and_restore+0x54/0x260
  ufshcd_reset_and_restore+0x28c/0x57c
  ufshcd_err_handler+0xeb8/0x1b6c
  process_one_work+0x288/0x964
  worker_thread+0x4bc/0xc7c
  kthread+0x15c/0x264
  ret_from_fork+0x10/0x30

Signed-off-by: Mason Zhang <Mason.Zhang at mediatek.com>
---
 drivers/ufs/core/ufshcd.c | 46 ++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 25 deletions(-)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index b1f59a5fe632..2b4934a562a6 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -2979,35 +2979,31 @@ static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba,
 		err = -ETIMEDOUT;
 		dev_dbg(hba->dev, "%s: dev_cmd request timedout, tag %d\n",
 			__func__, lrbp->task_tag);
-		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0) {
+		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0)
 			/* successfully cleared the command, retry if needed */
 			err = -EAGAIN;
+		/*
+		 * Since clearing the command succeeded we also need to
+		 * clear the task tag bit from the outstanding_reqs
+		 * variable.
+		 */
+		spin_lock_irqsave(&hba->outstanding_lock, flags);
+		pending = test_bit(lrbp->task_tag,
+				   &hba->outstanding_reqs);
+		if (pending) {
+			hba->dev_cmd.complete = NULL;
+			__clear_bit(lrbp->task_tag,
+				    &hba->outstanding_reqs);
+		}
+		spin_unlock_irqrestore(&hba->outstanding_lock, flags);
+
+		if (!pending) {
 			/*
-			 * Since clearing the command succeeded we also need to
-			 * clear the task tag bit from the outstanding_reqs
-			 * variable.
+			 * The completion handler ran while we tried to
+			 * clear the command.
 			 */
-			spin_lock_irqsave(&hba->outstanding_lock, flags);
-			pending = test_bit(lrbp->task_tag,
-					   &hba->outstanding_reqs);
-			if (pending) {
-				hba->dev_cmd.complete = NULL;
-				__clear_bit(lrbp->task_tag,
-					    &hba->outstanding_reqs);
-			}
-			spin_unlock_irqrestore(&hba->outstanding_lock, flags);
-
-			if (!pending) {
-				/*
-				 * The completion handler ran while we tried to
-				 * clear the command.
-				 */
-				time_left = 1;
-				goto retry;
-			}
-		} else {
-			dev_err(hba->dev, "%s: failed to clear tag %d\n",
-				__func__, lrbp->task_tag);
+			time_left = 1;
+			goto retry;
 		}
 	}
 
-- 
2.18.0



From yuancan at huawei.com  Sun Dec  4 19:42:10 2022
From: yuancan at huawei.com (Yuan Can)
Date: Mon, 5 Dec 2022 11:42:10 +0800
Subject: [PATCH] net: ethernet: mtk_wed: Fix missing of_node_put() in
 mtk_wed_wo_hardware_init()
In-Reply-To: <20221205015847.27356-1-yuancan@huawei.com>
References: <20221205015847.27356-1-yuancan@huawei.com>
Message-ID: <e876afcd-b3ca-a2e4-a9da-65ad11515cd5@huawei.com>

Please ignore this mail, sorry about the noise.

? 2022/12/5 9:58, Yuan Can ??:
> The np needs to be released through of_node_put() in the error handling
> path of mtk_wed_wo_hardware_init().
>
> Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
> Signed-off-by: Yuan Can <yuancan at huawei.com>
> ---
>   drivers/net/ethernet/mediatek/mtk_wed_wo.c | 9 ++++++---
>   1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/mediatek/mtk_wed_wo.c b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
> index 4754b6db009e..fcc4b3206d2d 100644
> --- a/drivers/net/ethernet/mediatek/mtk_wed_wo.c
> +++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
> @@ -407,8 +407,10 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
>   		return -ENODEV;
>   
>   	wo->mmio.regs = syscon_regmap_lookup_by_phandle(np, NULL);
> -	if (IS_ERR_OR_NULL(wo->mmio.regs))
> -		return PTR_ERR(wo->mmio.regs);
> +	if (IS_ERR(wo->mmio.regs)) {
> +		ret = PTR_ERR(wo->mmio.regs);
> +		goto error_put;
> +	}
>   
>   	wo->mmio.irq = irq_of_parse_and_map(np, 0);
>   	wo->mmio.irq_mask = MTK_WED_WO_ALL_INT_MASK;
> @@ -456,7 +458,8 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
>   
>   error:
>   	devm_free_irq(wo->hw->dev, wo->mmio.irq, wo);
> -
> +error_put:
> +	of_node_put(np);
>   	return ret;
>   }
>   

-- 
Best regards,
Yuan Can



From yuancan at huawei.com  Sun Dec  4 19:43:39 2022
From: yuancan at huawei.com (Yuan Can)
Date: Mon, 5 Dec 2022 03:43:39 +0000
Subject: [PATCH net-next v2] net: ethernet: mtk_wed: Fix missing of_node_put() in mtk_wed_wo_hardware_init()
Message-ID: <20221205034339.112163-1-yuancan@huawei.com>

The np needs to be released through of_node_put() in the error handling
path of mtk_wed_wo_hardware_init().

Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
Signed-off-by: Yuan Can <yuancan at huawei.com>
---
Changes in v2:
- Replace IS_ERR_OR_NULL() with IS_ERR() to check wo->mmio.regs.
- Add net-next tag.

 drivers/net/ethernet/mediatek/mtk_wed_wo.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_wed_wo.c b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
index 4754b6db009e..fcc4b3206d2d 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed_wo.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
@@ -407,8 +407,10 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
 		return -ENODEV;
 
 	wo->mmio.regs = syscon_regmap_lookup_by_phandle(np, NULL);
-	if (IS_ERR_OR_NULL(wo->mmio.regs))
-		return PTR_ERR(wo->mmio.regs);
+	if (IS_ERR(wo->mmio.regs)) {
+		ret = PTR_ERR(wo->mmio.regs);
+		goto error_put;
+	}
 
 	wo->mmio.irq = irq_of_parse_and_map(np, 0);
 	wo->mmio.irq_mask = MTK_WED_WO_ALL_INT_MASK;
@@ -456,7 +458,8 @@ mtk_wed_wo_hardware_init(struct mtk_wed_wo *wo)
 
 error:
 	devm_free_irq(wo->hw->dev, wo->mmio.irq, wo);
-
+error_put:
+	of_node_put(np);
 	return ret;
 }
 
-- 
2.17.1



From viresh.kumar at linaro.org  Sun Dec  4 20:30:44 2022
From: viresh.kumar at linaro.org (Viresh Kumar)
Date: Mon, 5 Dec 2022 10:00:44 +0530
Subject: [PATCH] Revert "cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()"
In-Reply-To: <CAJZ5v0hc8CsvqLKxi5iRq7iR0bkt25dRnLBd23mx-zdi2Sjgsw@mail.gmail.com>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <18947e09733a17935af9a123ccf9b6e92faeaf9b.1669958641.git.viresh.kumar@linaro.org>
 <CAJZ5v0ixHocQbu6-zs3dMDsiw8vdPyv=8Re7N4kUckeGkLhUzg@mail.gmail.com>
 <CAJZ5v0hc8CsvqLKxi5iRq7iR0bkt25dRnLBd23mx-zdi2Sjgsw@mail.gmail.com>
Message-ID: <20221205043044.bgecubnw7d3xlyi5@vireshk-i7>

On 02-12-22, 20:46, Rafael J. Wysocki wrote:
> On Fri, Dec 2, 2022 at 1:17 PM Rafael J. Wysocki <rafael at kernel.org> wrote:
> >
> > On Fri, Dec 2, 2022 at 6:26 AM Viresh Kumar <viresh.kumar at linaro.org> wrote:
> > >
> > > This reverts commit 6a17b3876bc8303612d7ad59ecf7cbc0db418bcd.
> > >
> > > This commit caused regression on Banana Pi R64 (MT7622), revert until
> > > the problem is identified and fixed properly.
> > >
> > > Link: https://lore.kernel.org/all/930778a1-5e8b-6df6-3276-42dcdadaf682 at systemli.org/
> > > Cc: v5.19+ <stable at vger.kernel.org> # v5.19+
> > > Reported-by: Nick <vincent at systemli.org>
> > > Signed-off-by: Viresh Kumar <viresh.kumar at linaro.org>
> >
> > Do you want me to push this revert for -rc8?

No, I was planning to make it part of my pull request.

> After all, I've decided to queue it up for 6.2, thanks!

Can you please drop that ? AngeloGioacchino already reported that
Reverting the proposed commit will make MT8183 unstable.

So the right thing to do now is apply the fix, which is on the list
and getting tested.

-- 
viresh


From xiangsheng.hou at mediatek.com  Sun Dec  4 22:57:53 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 5 Dec 2022 14:57:53 +0800
Subject: [PATCH v2 6/9] spi: mtk-snfi: Add snfi sample delay and read latency adjustment
In-Reply-To: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221205065756.26875-7-xiangsheng.hou@mediatek.com>

Add snfi sample delay and read latency adjustment which can get
from dts property.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 drivers/spi/spi-mtk-snfi.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index 85644308df23..32a9a817869c 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -195,6 +195,8 @@
 #define DATA_READ_MODE_X4 2
 #define DATA_READ_MODE_DUAL 5
 #define DATA_READ_MODE_QUAD 6
+#define DATA_READ_LATCH_LAT GENMASK(9, 8)
+#define DATA_READ_LATCH_LAT_S 8
 #define PG_LOAD_CUSTOM_EN BIT(7)
 #define DATARD_CUSTOM_EN BIT(6)
 #define CS_DESELECT_CYC_S 0
@@ -205,6 +207,9 @@
 
 #define SNF_DLY_CTL3 0x548
 #define SFCK_SAM_DLY_S 0
+#define SFCK_SAM_DLY GENMASK(5, 0)
+#define SFCK_SAM_DLY_TOTAL 9
+#define SFCK_SAM_DLY_RANGE 47
 
 #define SNF_STA_CTL1 0x550
 #define CUS_PG_DONE BIT(28)
@@ -1368,6 +1373,7 @@ static int mtk_snand_probe(struct platform_device *pdev)
 	const struct of_device_id *dev_id;
 	struct spi_controller *ctlr;
 	struct mtk_snand *ms;
+	u32 val = 0;
 	int ret;
 
 	dev_id = of_match_node(mtk_snand_ids, np);
@@ -1446,6 +1452,16 @@ static int mtk_snand_probe(struct platform_device *pdev)
 	// switch to SNFI mode
 	nfi_write32(ms, SNF_CFG, SPI_MODE);
 
+	ret = of_property_read_u32(np, "rx-sample-delay-ns", &val);
+	if (!ret)
+		nfi_rmw32(ms, SNF_DLY_CTL3, SFCK_SAM_DLY,
+			  val * SFCK_SAM_DLY_RANGE / SFCK_SAM_DLY_TOTAL);
+
+	ret = of_property_read_u32(np, "mediatek,rx-latch-latency", &val);
+	if (!ret)
+		nfi_rmw32(ms, SNF_MISC_CTL, DATA_READ_LATCH_LAT,
+			  val << DATA_READ_LATCH_LAT_S);
+
 	// setup an initial page format for ops matching page_cache_op template
 	// before ECC is called.
 	ret = mtk_snand_setup_pagefmt(ms, SZ_2K, SZ_64);
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec  4 22:57:52 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 5 Dec 2022 14:57:52 +0800
Subject: [PATCH v2 5/9] dt-bindings: spi: mtk-snfi: Add compatible for MT7986
In-Reply-To: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221205065756.26875-6-xiangsheng.hou@mediatek.com>

1. Add dt-bindings documentation of SPI NAND controller
for MediaTek MT7986 SoC platform.
2. Add optional nfi_hclk property which needed for MT7986.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 .../bindings/spi/mediatek,spi-mtk-snfi.yaml   | 51 +++++++++++++++----
 1 file changed, 42 insertions(+), 9 deletions(-)

diff --git a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
index 6e6e02c91780..bab23f1b11fd 100644
--- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
+++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
@@ -18,14 +18,12 @@ description: |
   using the accompanying ECC engine. There should be only one spi
   slave device following generic spi bindings.
 
-allOf:
-  - $ref: /schemas/spi/spi-controller.yaml#
-
 properties:
   compatible:
     enum:
       - mediatek,mt7622-snand
       - mediatek,mt7629-snand
+      - mediatek,mt7986-snand
 
   reg:
     items:
@@ -36,14 +34,12 @@ properties:
       - description: NFI interrupt
 
   clocks:
-    items:
-      - description: clock used for the controller
-      - description: clock used for the SPI bus
+    minItems: 2
+    maxItems: 3
 
   clock-names:
-    items:
-      - const: nfi_clk
-      - const: pad_clk
+    minItems: 2
+    maxItems: 3
 
   nand-ecc-engine:
     description: device-tree node of the accompanying ECC engine.
@@ -57,6 +53,43 @@ required:
   - clock-names
   - nand-ecc-engine
 
+allOf:
+  - $ref: /schemas/spi/spi-controller.yaml#
+  - if:
+      properties:
+        compatible:
+          enum:
+            - mediatek,mt7622-snand
+            - mediatek,mt7629-snand
+    then:
+      properties:
+        clocks:
+          items:
+            - description: clock used for the controller
+            - description: clock used for the SPI bus
+        clock-names:
+          items:
+            - const: nfi_clk
+            - const: pad_clk
+
+  - if:
+      properties:
+        compatible:
+          enum:
+            - mediatek,mt7986-snand
+    then:
+      properties:
+        clocks:
+          items:
+            - description: clock used for the controller
+            - description: clock used for the SPI bus
+            - description: clock used for the AHB bus
+        clock-names:
+          items:
+            - const: nfi_clk
+            - const: pad_clk
+            - const: nfi_hclk
+
 unevaluatedProperties: false
 
 examples:
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec  4 22:57:51 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 5 Dec 2022 14:57:51 +0800
Subject: [PATCH v2 4/9] mtd: nand: ecc-mtk: Add ECC support fot MT7986 IC
In-Reply-To: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221205065756.26875-5-xiangsheng.hou@mediatek.com>

Add ECC support fot MT7986 IC.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 drivers/mtd/nand/ecc-mtk.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/mtd/nand/ecc-mtk.c b/drivers/mtd/nand/ecc-mtk.c
index 9f9b201fe706..c2f6cfa76a04 100644
--- a/drivers/mtd/nand/ecc-mtk.c
+++ b/drivers/mtd/nand/ecc-mtk.c
@@ -79,6 +79,10 @@ static const u8 ecc_strength_mt7622[] = {
 	4, 6, 8, 10, 12
 };
 
+static const u8 ecc_strength_mt7986[] = {
+	4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24
+};
+
 enum mtk_ecc_regs {
 	ECC_ENCPAR00,
 	ECC_ENCIRQ_EN,
@@ -483,6 +487,17 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt7622 = {
 	.pg_irq_sel = 0,
 };
 
+static const struct mtk_ecc_caps mtk_ecc_caps_mt7986 = {
+	.err_mask = 0x1f,
+	.err_shift = 8,
+	.ecc_strength = ecc_strength_mt7986,
+	.ecc_regs = mt2712_ecc_regs,
+	.num_ecc_strength = 11,
+	.ecc_mode_shift = 5,
+	.parity_bits = 14,
+	.pg_irq_sel = 1,
+};
+
 static const struct of_device_id mtk_ecc_dt_match[] = {
 	{
 		.compatible = "mediatek,mt2701-ecc",
@@ -493,6 +508,9 @@ static const struct of_device_id mtk_ecc_dt_match[] = {
 	}, {
 		.compatible = "mediatek,mt7622-ecc",
 		.data = &mtk_ecc_caps_mt7622,
+	}, {
+		.compatible = "mediatek,mt7986-ecc",
+		.data = &mtk_ecc_caps_mt7986,
 	},
 	{},
 };
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec  4 22:57:54 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 5 Dec 2022 14:57:54 +0800
Subject: [PATCH v2 7/9] dt-bindings: spi: mtk-snfi: Add read latch latency property
In-Reply-To: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221205065756.26875-8-xiangsheng.hou@mediatek.com>

Add mediatek,rx-latch-latency property which adjust read delay in the
unit of clock cycle.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 .../devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml     | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
index bab23f1b11fd..6e6ff8d73fcd 100644
--- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
+++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
@@ -45,6 +45,13 @@ properties:
     description: device-tree node of the accompanying ECC engine.
     $ref: /schemas/types.yaml#/definitions/phandle
 
+  mediatek,rx-latch-latency:
+    description: Rx delay to sample data with this value, the value
+                 unit is clock cycle.
+    $ref: /schemas/types.yaml#/definitions/uint32
+    enum: [0, 1, 2, 3]
+    default: 0
+
 required:
   - compatible
   - reg
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec  4 22:57:49 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 5 Dec 2022 14:57:49 +0800
Subject: [PATCH v2 2/9] spi: mtk-snfi: Change default page format to setup default setting
In-Reply-To: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221205065756.26875-3-xiangsheng.hou@mediatek.com>

Change default page format to setup default setting since the sector
size 1024 on MT7986 will lead to probe fail.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 drivers/spi/spi-mtk-snfi.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index fa8412ba20e2..719fc6f53ab1 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -1430,8 +1430,7 @@ static int mtk_snand_probe(struct platform_device *pdev)
 
 	// setup an initial page format for ops matching page_cache_op template
 	// before ECC is called.
-	ret = mtk_snand_setup_pagefmt(ms, ms->caps->sector_size,
-				      ms->caps->spare_sizes[0]);
+	ret = mtk_snand_setup_pagefmt(ms, SZ_2K, SZ_64);
 	if (ret) {
 		dev_err(ms->dev, "failed to set initial page format\n");
 		goto disable_clk;
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec  4 22:57:56 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 5 Dec 2022 14:57:56 +0800
Subject: [PATCH v2 9/9] dt-bindings: mtd: ecc-mtk: Add compatible for MT7986
In-Reply-To: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221205065756.26875-10-xiangsheng.hou@mediatek.com>

Add dt-bindings documentation of ECC for MediaTek MT7986 SoC
platform.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 .../devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml        | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
index b13d801eda76..505baf1e8830 100644
--- a/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
+++ b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
@@ -18,6 +18,7 @@ properties:
       - mediatek,mt2701-ecc
       - mediatek,mt2712-ecc
       - mediatek,mt7622-ecc
+      - mediatek,mt7986-ecc
 
   reg:
     items:
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec  4 22:57:55 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 5 Dec 2022 14:57:55 +0800
Subject: [PATCH v2 8/9] dt-bindings: mtd: Split ECC engine with rawnand controller
In-Reply-To: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221205065756.26875-9-xiangsheng.hou@mediatek.com>

1. Split MediaTek ECC engine with rawnand controller and convert to
YAML schema.
2. Change the existing node name in order to match NAND controller DT
bindings.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 .../bindings/mtd/mediatek,mtk-nfc.yaml        | 171 +++++++++++++++++
 .../mtd/mediatek,nand-ecc-engine.yaml         |  62 ++++++
 .../devicetree/bindings/mtd/mtk-nand.txt      | 176 ------------------
 arch/arm/boot/dts/mt2701.dtsi                 |   2 +-
 arch/arm64/boot/dts/mediatek/mt2712e.dtsi     |   2 +-
 arch/arm64/boot/dts/mediatek/mt7622.dtsi      |   2 +-
 6 files changed, 236 insertions(+), 179 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
 delete mode 100644 Documentation/devicetree/bindings/mtd/mtk-nand.txt

diff --git a/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
new file mode 100644
index 000000000000..2b1c92edc9d0
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
@@ -0,0 +1,171 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mtd/mediatek,mtk-nfc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek(MTK) SoCs raw NAND FLASH controller (NFC)
+
+maintainers:
+  - Xiangsheng Hou <xiangsheng.hou at mediatek.com>
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt2701-nfc
+      - mediatek,mt2712-nfc
+      - mediatek,mt7622-nfc
+
+  reg:
+    items:
+      - description: Base physical address and size of NFI.
+
+  interrupts:
+    items:
+      - description: NFI interrupt
+
+  clocks:
+    items:
+      - description: clock used for the controller
+      - description: clock used for the pad
+
+  clock-names:
+    items:
+      - const: nfi_clk
+      - const: pad_clk
+
+  ecc-engine: true
+
+  partitions:
+    $ref: mtd.yaml#
+
+allOf:
+  - $ref: nand-controller.yaml#
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: mediatek,mt2701-nfc
+    then:
+      patternProperties:
+        "^nand@[a-f0-9]$":
+          type: object
+          properties:
+            reg:
+              minimum: 0
+              maximum: 1
+            nand-ecc-mode:
+              const: hw
+            nand-ecc-step-size:
+              enum: [ 512, 1024 ]
+            nand-ecc-strength:
+              enum: [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36,
+                     40, 44, 48, 52, 56, 60]
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: mediatek,mt2712-nfc
+    then:
+      patternProperties:
+        "^nand@[a-f0-9]$":
+          type: object
+          properties:
+            reg:
+              minimum: 0
+              maximum: 1
+            nand-ecc-mode:
+              const: hw
+            nand-ecc-step-size:
+              enum: [ 512, 1024 ]
+            nand-ecc-strength:
+              enum: [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36,
+                     40, 44, 48, 52, 56, 60, 68, 72, 80]
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: mediatek,mt7622-nfc
+    then:
+      patternProperties:
+        "^nand@[a-f0-9]$":
+          type: object
+          properties:
+            reg:
+              minimum: 0
+              maximum: 1
+            nand-ecc-mode:
+              const: hw
+            nand-ecc-step-size:
+              const: 512
+            nand-ecc-strength:
+              enum: [4, 6, 8, 10, 12]
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+  - clock-names
+  - ecc-engine
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt2701-clk.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    soc {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        nand-controller at 1100d000 {
+            compatible = "mediatek,mt2701-nfc";
+            reg = <0 0x1100d000 0 0x1000>;
+            interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
+            clocks = <&pericfg CLK_PERI_NFI>,
+                     <&pericfg CLK_PERI_NFI_PAD>;
+            clock-names = "nfi_clk", "pad_clk";
+            ecc-engine = <&bch>;
+            #address-cells = <1>;
+            #size-cells = <0>;
+
+            nand at 0 {
+                reg = <0>;
+
+                nand-on-flash-bbt;
+                nand-ecc-mode = "hw";
+                nand-ecc-step-size = <1024>;
+                nand-ecc-strength = <24>;
+
+                partitions {
+                    compatible = "fixed-partitions";
+                    #address-cells = <1>;
+                    #size-cells = <1>;
+
+                    preloader at 0 {
+                        label = "pl";
+                        read-only;
+                        reg = <0x0 0x400000>;
+                    };
+                    android at 400000 {
+                        label = "android";
+                        reg = <0x400000 0x12c00000>;
+                    };
+                };
+            };
+        };
+
+        bch: ecc at 1100e000 {
+            compatible = "mediatek,mt2701-ecc";
+            reg = <0 0x1100e000 0 0x1000>;
+            interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_LOW>;
+            clocks = <&pericfg CLK_PERI_NFI_ECC>;
+            clock-names = "nfiecc_clk";
+        };
+    };
diff --git a/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
new file mode 100644
index 000000000000..b13d801eda76
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mtd/mediatek,nand-ecc-engine.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek(MTK) SoCs NAND ECC engine
+
+maintainers:
+  - Xiangsheng Hou <xiangsheng.hou at mediatek.com>
+
+description: |
+  MTK NAND ECC engine can cowork with MTK raw NAND and SPI NAND controller.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt2701-ecc
+      - mediatek,mt2712-ecc
+      - mediatek,mt7622-ecc
+
+  reg:
+    items:
+      - description: Base physical address and size of ECC.
+
+  interrupts:
+    items:
+      - description: ECC interrupt
+
+  clocks:
+    maxItems: 1
+
+  clock-names:
+    const: nfiecc_clk
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+  - clock-names
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt2701-clk.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    soc {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        bch: ecc at 1100e000 {
+            compatible = "mediatek,mt2701-ecc";
+            reg = <0 0x1100e000 0 0x1000>;
+            interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_LOW>;
+            clocks = <&pericfg CLK_PERI_NFI_ECC>;
+            clock-names = "nfiecc_clk";
+        };
+    };
diff --git a/Documentation/devicetree/bindings/mtd/mtk-nand.txt b/Documentation/devicetree/bindings/mtd/mtk-nand.txt
deleted file mode 100644
index 839ea2f93d04..000000000000
--- a/Documentation/devicetree/bindings/mtd/mtk-nand.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-MTK SoCs NAND FLASH controller (NFC) DT binding
-
-This file documents the device tree bindings for MTK SoCs NAND controllers.
-The functional split of the controller requires two drivers to operate:
-the nand controller interface driver and the ECC engine driver.
-
-The hardware description for both devices must be captured as device
-tree nodes.
-
-1) NFC NAND Controller Interface (NFI):
-=======================================
-
-The first part of NFC is NAND Controller Interface (NFI) HW.
-Required NFI properties:
-- compatible:			Should be one of
-				"mediatek,mt2701-nfc",
-				"mediatek,mt2712-nfc",
-				"mediatek,mt7622-nfc".
-- reg:				Base physical address and size of NFI.
-- interrupts:			Interrupts of NFI.
-- clocks:			NFI required clocks.
-- clock-names:			NFI clocks internal name.
-- ecc-engine:			Required ECC Engine node.
-- #address-cells:		NAND chip index, should be 1.
-- #size-cells:			Should be 0.
-
-Example:
-
-	nandc: nfi at 1100d000 {
-		compatible = "mediatek,mt2701-nfc";
-		reg = <0 0x1100d000 0 0x1000>;
-		interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
-		clocks = <&pericfg CLK_PERI_NFI>,
-			 <&pericfg CLK_PERI_NFI_PAD>;
-		clock-names = "nfi_clk", "pad_clk";
-		ecc-engine = <&bch>;
-		#address-cells = <1>;
-		#size-cells = <0>;
-        };
-
-Platform related properties, should be set in {platform_name}.dts:
-- children nodes:	NAND chips.
-
-Children nodes properties:
-- reg:			Chip Select Signal, default 0.
-			Set as reg = <0>, <1> when need 2 CS.
-Optional:
-- nand-on-flash-bbt:	Store BBT on NAND Flash.
-- nand-ecc-mode:	the NAND ecc mode (check driver for supported modes)
-- nand-ecc-step-size:	Number of data bytes covered by a single ECC step.
-			valid values:
-			512 and 1024 on mt2701 and mt2712.
-			512 only on mt7622.
-			1024 is recommended for large page NANDs.
-- nand-ecc-strength:	Number of bits to correct per ECC step.
-			The valid values that each controller supports:
-			mt2701: 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28,
-				32, 36, 40, 44, 48, 52, 56, 60.
-			mt2712: 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28,
-				32, 36, 40, 44, 48, 52, 56, 60, 68, 72, 80.
-			mt7622: 4, 6, 8, 10, 12, 14, 16.
-			The strength should be calculated as follows:
-			E = (S - F) * 8 / B
-			S = O / (P / Q)
-				E :	nand-ecc-strength.
-				S :	spare size per sector.
-				F :	FDM size, should be in the range [1,8].
-					It is used to store free oob data.
-				O :	oob size.
-				P :	page size.
-				Q :	nand-ecc-step-size.
-				B :	number of parity bits needed to correct
-					1 bitflip.
-					According to MTK NAND controller design,
-					this number depends on max ecc step size
-					that MTK NAND controller supports.
-					If max ecc step size supported is 1024,
-					then it should be always 14. And if max
-					ecc step size is 512, then it should be
-					always 13.
-			If the result does not match any one of the listed
-			choices above, please select the smaller valid value from
-			the list.
-			(otherwise the driver will do the adjustment at runtime)
-- pinctrl-names:	Default NAND pin GPIO setting name.
-- pinctrl-0:		GPIO setting node.
-
-Example:
-	&pio {
-		nand_pins_default: nanddefault {
-			pins_dat {
-				pinmux = <MT2701_PIN_111_MSDC0_DAT7__FUNC_NLD7>,
-					 <MT2701_PIN_112_MSDC0_DAT6__FUNC_NLD6>,
-					 <MT2701_PIN_114_MSDC0_DAT4__FUNC_NLD4>,
-					 <MT2701_PIN_118_MSDC0_DAT3__FUNC_NLD3>,
-					 <MT2701_PIN_121_MSDC0_DAT0__FUNC_NLD0>,
-					 <MT2701_PIN_120_MSDC0_DAT1__FUNC_NLD1>,
-					 <MT2701_PIN_113_MSDC0_DAT5__FUNC_NLD5>,
-					 <MT2701_PIN_115_MSDC0_RSTB__FUNC_NLD8>,
-					 <MT2701_PIN_119_MSDC0_DAT2__FUNC_NLD2>;
-				input-enable;
-				drive-strength = <MTK_DRIVE_8mA>;
-				bias-pull-up;
-			};
-
-			pins_we {
-				pinmux = <MT2701_PIN_117_MSDC0_CLK__FUNC_NWEB>;
-				drive-strength = <MTK_DRIVE_8mA>;
-				bias-pull-up = <MTK_PUPD_SET_R1R0_10>;
-			};
-
-			pins_ale {
-				pinmux = <MT2701_PIN_116_MSDC0_CMD__FUNC_NALE>;
-				drive-strength = <MTK_DRIVE_8mA>;
-				bias-pull-down = <MTK_PUPD_SET_R1R0_10>;
-			};
-		};
-	};
-
-	&nandc {
-		status = "okay";
-		pinctrl-names = "default";
-		pinctrl-0 = <&nand_pins_default>;
-		nand at 0 {
-			reg = <0>;
-			nand-on-flash-bbt;
-			nand-ecc-mode = "hw";
-			nand-ecc-strength = <24>;
-			nand-ecc-step-size = <1024>;
-		};
-	};
-
-NAND chip optional subnodes:
-- Partitions, see Documentation/devicetree/bindings/mtd/mtd.yaml
-
-Example:
-	nand at 0 {
-		partitions {
-			compatible = "fixed-partitions";
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			preloader at 0 {
-				label = "pl";
-				read-only;
-				reg = <0x00000000 0x00400000>;
-			};
-			android at 00400000 {
-				label = "android";
-				reg = <0x00400000 0x12c00000>;
-			};
-		};
-	};
-
-2) ECC Engine:
-==============
-
-Required BCH properties:
-- compatible:	Should be one of
-		"mediatek,mt2701-ecc",
-		"mediatek,mt2712-ecc",
-		"mediatek,mt7622-ecc".
-- reg:		Base physical address and size of ECC.
-- interrupts:	Interrupts of ECC.
-- clocks:	ECC required clocks.
-- clock-names:	ECC clocks internal name.
-
-Example:
-
-	bch: ecc at 1100e000 {
-		compatible = "mediatek,mt2701-ecc";
-		reg = <0 0x1100e000 0 0x1000>;
-		interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_LOW>;
-		clocks = <&pericfg CLK_PERI_NFI_ECC>;
-		clock-names = "nfiecc_clk";
-	};
diff --git a/arch/arm/boot/dts/mt2701.dtsi b/arch/arm/boot/dts/mt2701.dtsi
index b8eba3ba153c..049ed797766b 100644
--- a/arch/arm/boot/dts/mt2701.dtsi
+++ b/arch/arm/boot/dts/mt2701.dtsi
@@ -360,7 +360,7 @@ thermal: thermal at 1100b000 {
 		mediatek,apmixedsys = <&apmixedsys>;
 	};
 
-	nandc: nfi at 1100d000 {
+	nandc: nand-controller at 1100d000 {
 		compatible = "mediatek,mt2701-nfc";
 		reg = <0 0x1100d000 0 0x1000>;
 		interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
diff --git a/arch/arm64/boot/dts/mediatek/mt2712e.dtsi b/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
index 92212cddd37e..cfbec2a2ed9d 100644
--- a/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
@@ -560,7 +560,7 @@ spi0: spi at 1100a000 {
 		status = "disabled";
 	};
 
-	nandc: nfi at 1100e000 {
+	nandc: nand-controller at 1100e000 {
 		compatible = "mediatek,mt2712-nfc";
 		reg = <0 0x1100e000 0 0x1000>;
 		interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_LOW>;
diff --git a/arch/arm64/boot/dts/mediatek/mt7622.dtsi b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
index 146e18b5b1f4..d98aa4936092 100644
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
@@ -539,7 +539,7 @@ bluetooth {
 		};
 	};
 
-	nandc: nfi at 1100d000 {
+	nandc: nand-controller at 1100d000 {
 		compatible = "mediatek,mt7622-nfc";
 		reg = <0 0x1100D000 0 0x1000>;
 		interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_LOW>;
-- 
2.25.1



From leon at kernel.org  Sun Dec  4 23:07:59 2022
From: leon at kernel.org (Leon Romanovsky)
Date: Mon, 5 Dec 2022 09:07:59 +0200
Subject: [PATCH net-next] net: ethernet: mtk_wed: add reset to
 rx_ring_setup callback
In-Reply-To: <26fa16f2f212bff5edfdbe8a4f41dba7a132b0be.1670072570.git.lorenzo@kernel.org>
References: <26fa16f2f212bff5edfdbe8a4f41dba7a132b0be.1670072570.git.lorenzo@kernel.org>
Message-ID: <Y42Yz2hhwk1Rw1hz@unreal>

On Sat, Dec 03, 2022 at 02:06:30PM +0100, Lorenzo Bianconi wrote:
> Introduce reset parameter to mtk_wed_rx_ring_setup signature.
> This is a preliminary patch to add Wireless Ethernet Dispatcher reset
> support.

So please submit it as part the relevant series.

Thanks

> 
> Co-developed-by: Sujuan Chen <sujuan.chen at mediatek.com>
> Signed-off-by: Sujuan Chen <sujuan.chen at mediatek.com>
> Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> ---
>  drivers/net/ethernet/mediatek/mtk_wed.c  | 20 +++++++++++++-------
>  drivers/net/wireless/mediatek/mt76/dma.c |  2 +-
>  include/linux/soc/mediatek/mtk_wed.h     |  8 ++++----
>  3 files changed, 18 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
> index 6352abd4157e..b1ec3f353b66 100644
> --- a/drivers/net/ethernet/mediatek/mtk_wed.c
> +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
> @@ -1216,7 +1216,8 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
>  }
>  
>  static int
> -mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
> +mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
> +			   bool reset)
>  {
>  	u32 desc_size = sizeof(struct mtk_wdma_desc) * dev->hw->version;
>  	struct mtk_wed_ring *wdma;
> @@ -1225,8 +1226,8 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
>  		return -EINVAL;
>  
>  	wdma = &dev->tx_wdma[idx];
> -	if (mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE, desc_size,
> -			       true))
> +	if (!reset && mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE,
> +					 desc_size, true))
>  		return -ENOMEM;
>  
>  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
> @@ -1236,6 +1237,9 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
>  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_CPU_IDX, 0);
>  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_DMA_IDX, 0);
>  
> +	if (reset)
> +		mtk_wed_ring_reset(wdma, MTK_WED_WDMA_RING_SIZE, true);
> +
>  	if (!idx)  {
>  		wed_w32(dev, MTK_WED_WDMA_RING_TX + MTK_WED_RING_OFS_BASE,
>  			wdma->desc_phys);
> @@ -1577,18 +1581,20 @@ mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
>  }
>  
>  static int
> -mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs)
> +mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs,
> +		      bool reset)
>  {
>  	struct mtk_wed_ring *ring = &dev->rx_ring[idx];
>  
>  	if (WARN_ON(idx >= ARRAY_SIZE(dev->rx_ring)))
>  		return -EINVAL;
>  
> -	if (mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
> -			       sizeof(*ring->desc), false))
> +	if (!reset && mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
> +					 sizeof(*ring->desc), false))
>  		return -ENOMEM;
>  
> -	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE))
> +	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE,
> +				       reset))
>  		return -ENOMEM;
>  
>  	ring->reg_base = MTK_WED_RING_RX_DATA(idx);
> diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
> index 3f8c0845fcca..f795548562f5 100644
> --- a/drivers/net/wireless/mediatek/mt76/dma.c
> +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> @@ -648,7 +648,7 @@ mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
>  			q->wed_regs = wed->txfree_ring.reg_base;
>  		break;
>  	case MT76_WED_Q_RX:
> -		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs);
> +		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs, false);
>  		if (!ret)
>  			q->wed_regs = wed->rx_ring[ring].reg_base;
>  		break;
> diff --git a/include/linux/soc/mediatek/mtk_wed.h b/include/linux/soc/mediatek/mtk_wed.h
> index beb190449704..a0746d4aec20 100644
> --- a/include/linux/soc/mediatek/mtk_wed.h
> +++ b/include/linux/soc/mediatek/mtk_wed.h
> @@ -160,7 +160,7 @@ struct mtk_wed_ops {
>  	int (*tx_ring_setup)(struct mtk_wed_device *dev, int ring,
>  			     void __iomem *regs, bool reset);
>  	int (*rx_ring_setup)(struct mtk_wed_device *dev, int ring,
> -			     void __iomem *regs);
> +			     void __iomem *regs, bool reset);
>  	int (*txfree_ring_setup)(struct mtk_wed_device *dev,
>  				 void __iomem *regs);
>  	int (*msg_update)(struct mtk_wed_device *dev, int cmd_id,
> @@ -228,8 +228,8 @@ mtk_wed_get_rx_capa(struct mtk_wed_device *dev)
>  	(_dev)->ops->irq_get(_dev, _mask)
>  #define mtk_wed_device_irq_set_mask(_dev, _mask) \
>  	(_dev)->ops->irq_set_mask(_dev, _mask)
> -#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) \
> -	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs)
> +#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) \
> +	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs, _reset)
>  #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash) \
>  	(_dev)->ops->ppe_check(_dev, _skb, _reason, _hash)
>  #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) \
> @@ -249,7 +249,7 @@ static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
>  #define mtk_wed_device_reg_write(_dev, _reg, _val) do {} while (0)
>  #define mtk_wed_device_irq_get(_dev, _mask) 0
>  #define mtk_wed_device_irq_set_mask(_dev, _mask) do {} while (0)
> -#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) -ENODEV
> +#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) -ENODEV
>  #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash)  do {} while (0)
>  #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) -ENODEV
>  #define mtk_wed_device_stop(_dev) do {} while (0)
> -- 
> 2.38.1
> 


From xiangsheng.hou at mediatek.com  Sun Dec  4 22:57:47 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 5 Dec 2022 14:57:47 +0800
Subject: [PATCH v2 0/9] Add MediaTek MT7986 SPI NAND and ECC support
Message-ID: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>

This patch series add MediaTek MT7986 SPI NAND and ECC controller
support, split ECC engine with rawnand controller in bindings and
hange to YAML schema.

Changes since V1:
 - Use existing sample delay property.
 - Add restricting for optional nfi_hclk.
 - Improve and perfect dt-bindings documentation.
 - Change existing node name to match NAND controller DT bingings.
 - Fix issues reported by dt_binding_check.
 - Fix issues reported by dtbs_check.

Xiangsheng Hou (9):
  spi: mtk-snfi: Add snfi support for MT7986 IC
  spi: mtk-snfi: Change default page format to setup default setting
  spi: mtk-snfi: Add optional nfi_hclk which needed for MT7986
  mtd: nand: ecc-mtk: Add ECC support fot MT7986 IC
  dt-bindings: spi: mtk-snfi: Add compatible for MT7986
  spi: mtk-snfi: Add snfi sample delay and read latency adjustment
  dt-bindings: spi: mtk-snfi: Add read latch latency property
  dt-bindings: mtd: Split ECC engine with rawnand controller
  dt-bindings: mtd: ecc-mtk: Add compatible for MT7986

 .../bindings/mtd/mediatek,mtk-nfc.yaml        | 171 +++++++++++++++++
 .../mtd/mediatek,nand-ecc-engine.yaml         |  63 +++++++
 .../devicetree/bindings/mtd/mtk-nand.txt      | 176 ------------------
 .../bindings/spi/mediatek,spi-mtk-snfi.yaml   |  58 +++++-
 arch/arm/boot/dts/mt2701.dtsi                 |   2 +-
 arch/arm64/boot/dts/mediatek/mt2712e.dtsi     |   2 +-
 arch/arm64/boot/dts/mediatek/mt7622.dtsi      |   2 +-
 drivers/mtd/nand/ecc-mtk.c                    |  18 ++
 drivers/spi/spi-mtk-snfi.c                    |  66 ++++++-
 9 files changed, 366 insertions(+), 192 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
 delete mode 100644 Documentation/devicetree/bindings/mtd/mtk-nand.txt

-- 
2.25.1



From Jia-wei.Chang at mediatek.com  Sun Dec  4 22:24:34 2022
From: Jia-wei.Chang at mediatek.com (=?utf-8?B?SmlhLXdlaSBDaGFuZyAo5by15L2z5YGJKQ==?=)
Date: Mon, 5 Dec 2022 06:24:34 +0000
Subject: [PATCH] cpufreq: mediatek: Raise proc and sram max voltage for
 MT7622/7623
In-Reply-To: <75216e0c-9d36-7ada-1507-1bb4a91a3326@systemli.org>
References: <20221202095227.167492-1-angelogioacchino.delregno@collabora.com>
	 <75216e0c-9d36-7ada-1507-1bb4a91a3326@systemli.org>
Message-ID: <28308227f830dd200e4c933cc6baa27910644367.camel@mediatek.com>

Mail loop Sean.Wang for MT7622 cpufreq.


On Fri, 2022-12-02 at 13:37 +0100, Nick wrote:
> It now starts, however, with a lot of those messages (I applied the 
> patch to linux/master and not to linux-next, because next is
> currently 
> not compiling anymore for me):
> 
> > [   10.777041] cpufreq: __target_index: Failed to change cpu 
> > frequency: -22

Hi Nick,

The errno occurs when cpufreq platform driver attempts to do
mtk_cpufreq_voltage_tracking() but it is not able to accomplish voltage
scaling within a certain of times, vtrack_max.

It will needs further debug message to figure it out.

> > [   10.791577] cpu cpu0: cpu0: failed to scale up voltage!
> 
> The complete log:
> 
https://urldefense.com/v3/__https://gist.githubusercontent.com/PolynomialDivision/267c83c7a21a359cbb4e8d99d0303201/raw/28d3568a26634bebef2d91ebe37fc5f76ae58add/mt7622-patch-cpufreq.log__;!!CTRNKA9wMg0ARbw!msWJync96Qc5bvMB-5gCpepj-5zYWizO_98rjuaLWc7fSBNSSpPMPvZqq1mprBgRq11GAqYvf4hUzwZkX_IhM6k0$?
> 

May I know if this failure log can be 100 % reproduced on your
platform?

Thanks.

>  
> 
> Bests
> Nick
> 
> On 12/2/22 10:52, AngeloGioacchino Del Regno wrote:
> > During the addition of SRAM voltage tracking for CCI scaling, this
> > driver got some voltage limits set for the vtrack algorithm: these
> > were moved to platform data first, then enforced in a later commit
> > 6a17b3876bc8 ("cpufreq: mediatek: Refine
> > mtk_cpufreq_voltage_tracking()")
> > using these as max values for the regulator_set_voltage() calls.
> > 
> > In this case, the vsram/vproc constraints for MT7622 and MT7623
> > were supposed to be the same as MT2701 (and a number of other
> > SoCs),
> > but that turned out to be a mistake because the aforementioned two
> > SoCs' maximum voltage for both VPROC and VPROC_SRAM is 1.36V.
> > 
> > Fix that by adding new platform data for MT7622/7623 declaring the
> > right {proc,sram}_max_volt parameter.
> > 
> > Fixes: ead858bd128d ("cpufreq: mediatek: Move voltage limits to
> > platform data")
> > Fixes: 6a17b3876bc8 ("cpufreq: mediatek: Refine
> > mtk_cpufreq_voltage_tracking()")
> > Signed-off-by: AngeloGioacchino Del Regno <
> > angelogioacchino.delregno at collabora.com>
> > ---
> >   drivers/cpufreq/mediatek-cpufreq.c | 13 +++++++++++--
> >   1 file changed, 11 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/cpufreq/mediatek-cpufreq.c
> > b/drivers/cpufreq/mediatek-cpufreq.c
> > index 7f2680bc9a0f..f9a9f08c75c4 100644
> > --- a/drivers/cpufreq/mediatek-cpufreq.c
> > +++ b/drivers/cpufreq/mediatek-cpufreq.c
> > @@ -695,6 +695,15 @@ static const struct mtk_cpufreq_platform_data
> > mt2701_platform_data = {
> >   	.ccifreq_supported = false,
> >   };
> >   
> > +static const struct mtk_cpufreq_platform_data mt7622_platform_data
> > = {
> > +	.min_volt_shift = 100000,
> > +	.max_volt_shift = 200000,
> > +	.proc_max_volt = 1360000,
> > +	.sram_min_volt = 0,
> > +	.sram_max_volt = 1360000,
> > +	.ccifreq_supported = false,
> > +};
> > +
> >   static const struct mtk_cpufreq_platform_data
> > mt8183_platform_data = {
> >   	.min_volt_shift = 100000,
> >   	.max_volt_shift = 200000,
> > @@ -717,8 +726,8 @@ static const struct mtk_cpufreq_platform_data
> > mt8186_platform_data = {
> >   static const struct of_device_id mtk_cpufreq_machines[]
> > __initconst = {
> >   	{ .compatible = "mediatek,mt2701", .data =
> > &mt2701_platform_data },
> >   	{ .compatible = "mediatek,mt2712", .data =
> > &mt2701_platform_data },
> > -	{ .compatible = "mediatek,mt7622", .data =
> > &mt2701_platform_data },
> > -	{ .compatible = "mediatek,mt7623", .data =
> > &mt2701_platform_data },
> > +	{ .compatible = "mediatek,mt7622", .data =
> > &mt7622_platform_data },
> > +	{ .compatible = "mediatek,mt7623", .data =
> > &mt7622_platform_data },
> >   	{ .compatible = "mediatek,mt8167", .data =
> > &mt2701_platform_data },
> >   	{ .compatible = "mediatek,mt817x", .data =
> > &mt2701_platform_data },
> >   	{ .compatible = "mediatek,mt8173", .data =
> > &mt2701_platform_data },

Hi Angelo,

Thanks for your help.

I also found the similar problem that platforms using incorrect
vsram/vproc constraint platform data.  They are MT8167 and MT8516 which
refer to mt8516.dtsi and the max voltage value of vproc is 1300 mV.

Can you help to fix the correct platform data for MT8167 and MT8516 as
well?

Thanks.

From xiangsheng.hou at mediatek.com  Sun Dec  4 22:57:50 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 5 Dec 2022 14:57:50 +0800
Subject: [PATCH v2 3/9] spi: mtk-snfi: Add optional nfi_hclk which needed for MT7986
In-Reply-To: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221205065756.26875-4-xiangsheng.hou@mediatek.com>

Add optional nfi_hclk which needed for MT7986.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 drivers/spi/spi-mtk-snfi.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index 719fc6f53ab1..85644308df23 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -297,6 +297,7 @@ struct mtk_snand {
 	struct device *dev;
 	struct clk *nfi_clk;
 	struct clk *pad_clk;
+	struct clk *nfi_hclk;
 	void __iomem *nfi_base;
 	int irq;
 	struct completion op_done;
@@ -1339,7 +1340,16 @@ static int mtk_snand_enable_clk(struct mtk_snand *ms)
 		dev_err(ms->dev, "unable to enable pad clk\n");
 		goto err1;
 	}
+	ret = clk_prepare_enable(ms->nfi_hclk);
+	if (ret) {
+		dev_err(ms->dev, "unable to enable nfi hclk\n");
+		goto err2;
+	}
+
 	return 0;
+
+err2:
+	clk_disable_unprepare(ms->pad_clk);
 err1:
 	clk_disable_unprepare(ms->nfi_clk);
 	return ret;
@@ -1347,6 +1357,7 @@ static int mtk_snand_enable_clk(struct mtk_snand *ms)
 
 static void mtk_snand_disable_clk(struct mtk_snand *ms)
 {
+	clk_disable_unprepare(ms->nfi_hclk);
 	clk_disable_unprepare(ms->pad_clk);
 	clk_disable_unprepare(ms->nfi_clk);
 }
@@ -1401,6 +1412,13 @@ static int mtk_snand_probe(struct platform_device *pdev)
 		goto release_ecc;
 	}
 
+	ms->nfi_hclk = devm_clk_get_optional(&pdev->dev, "nfi_hclk");
+	if (IS_ERR(ms->nfi_hclk)) {
+		ret = PTR_ERR(ms->nfi_hclk);
+		dev_err(&pdev->dev, "unable to get nfi_hclk, err = %d\n", ret);
+		goto release_ecc;
+	}
+
 	ret = mtk_snand_enable_clk(ms);
 	if (ret)
 		goto release_ecc;
-- 
2.25.1



From leon at kernel.org  Sun Dec  4 23:29:30 2022
From: leon at kernel.org (Leon Romanovsky)
Date: Mon, 5 Dec 2022 09:29:30 +0200
Subject: [PATCH net-next] net: ethernet: mtk_wed: fix possible deadlock
 if mtk_wed_wo_init fails
In-Reply-To: <Y4y4If8XXu+wErIj@lore-desk>
References: <a87f05e60ea1a94b571c9c87b69cc5b0e94943f2.1669999089.git.lorenzo@kernel.org>
 <Y4ybbkn+nXkGsqWe@unreal>
 <Y4y4If8XXu+wErIj@lore-desk>
Message-ID: <Y42d2us5Pv1UqhEj@unreal>

On Sun, Dec 04, 2022 at 04:09:21PM +0100, Lorenzo Bianconi wrote:
> > On Fri, Dec 02, 2022 at 06:36:33PM +0100, Lorenzo Bianconi wrote:
> > > Introduce __mtk_wed_detach() in order to avoid a possible deadlock in
> > > mtk_wed_attach routine if mtk_wed_wo_init fails.
> > > 
> > > Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
> > > Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> > > ---
> > >  drivers/net/ethernet/mediatek/mtk_wed.c     | 24 ++++++++++++++-------
> > >  drivers/net/ethernet/mediatek/mtk_wed_mcu.c | 10 ++++++---
> > >  drivers/net/ethernet/mediatek/mtk_wed_wo.c  |  3 +++
> > >  3 files changed, 26 insertions(+), 11 deletions(-)
> > 
> > <...>
> > 
> > > diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > > index f9539e6233c9..b084009a32f9 100644
> > > --- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > > +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > > @@ -176,6 +176,9 @@ int mtk_wed_mcu_send_msg(struct mtk_wed_wo *wo, int id, int cmd,
> > >  	u16 seq;
> > >  	int ret;
> > >  
> > > +	if (!wo)
> > > +		return -ENODEV;
> > 
> > <...>
> > 
> > >  static void
> > >  mtk_wed_wo_hw_deinit(struct mtk_wed_wo *wo)
> > >  {
> > > +	if (!wo)
> > > +		return;
> > 
> > How are these changes related to the written in deadlock?
> > How is it possible to get internal mtk functions without valid wo?
> 
> Hi Leon,
> 
> if mtk_wed_rro_alloc() fails in mtk_wed_attach(), we will end up running
> __mtk_wed_detach() when wo struct is not allocated yet (wo is allocated in
> mtk_wed_wo_init()).

IMHO, it is a culprit, proper error unwind means that you won't call to
uninit functions for something that is not initialized yet. It is better
to fix it instead of adding "if (!wo) ..." checks.

> Moreover __mtk_wed_detach() can run mtk_wed_wo_reset() and mtk_wed_wo_deinit()

This is another side of same coin. If you can run them in parallel, you
need locking protection and ability to cancel work, so nothing is going
to be executed once cleanup succeeded.

These were my 2 cents, totally IMHO.

Thanks


From xiangsheng.hou at mediatek.com  Sun Dec  4 22:57:48 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 5 Dec 2022 14:57:48 +0800
Subject: [PATCH v2 1/9] spi: mtk-snfi: Add snfi support for MT7986 IC
In-Reply-To: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221205065756.26875-2-xiangsheng.hou@mediatek.com>

Add snfi support for MT7986 IC.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 drivers/spi/spi-mtk-snfi.c | 29 +++++++++++++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index d66bf9762557..fa8412ba20e2 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -126,7 +126,8 @@
 #define STR_DATA BIT(0)
 
 #define NFI_STA 0x060
-#define NFI_NAND_FSM GENMASK(28, 24)
+#define NFI_NAND_FSM_7622 GENMASK(28, 24)
+#define NFI_NAND_FSM_7986 GENMASK(29, 23)
 #define NFI_FSM GENMASK(19, 16)
 #define READ_EMPTY BIT(12)
 
@@ -158,6 +159,7 @@
 #define MAS_WR GENMASK(5, 3)
 #define MAS_RDDLY GENMASK(2, 0)
 #define NFI_MASTERSTA_MASK_7622 (MAS_ADDR | MAS_RD | MAS_WR | MAS_RDDLY)
+#define NFI_MASTERSTA_MASK_7986 3
 
 // SNFI registers
 #define SNF_MAC_CTL 0x500
@@ -220,6 +222,11 @@
 
 static const u8 mt7622_spare_sizes[] = { 16, 26, 27, 28 };
 
+static const u8 mt7986_spare_sizes[] = {
+	16, 26, 27, 28, 32, 36, 40, 44, 48, 49, 50, 51, 52, 62, 61, 63, 64, 67,
+	74
+};
+
 struct mtk_snand_caps {
 	u16 sector_size;
 	u16 max_sectors;
@@ -230,6 +237,7 @@ struct mtk_snand_caps {
 	bool bbm_swap;
 	bool empty_page_check;
 	u32 mastersta_mask;
+	u32 nandfsm_mask;
 
 	const u8 *spare_sizes;
 	u32 num_spare_size;
@@ -244,6 +252,7 @@ static const struct mtk_snand_caps mt7622_snand_caps = {
 	.bbm_swap = false,
 	.empty_page_check = false,
 	.mastersta_mask = NFI_MASTERSTA_MASK_7622,
+	.nandfsm_mask = NFI_NAND_FSM_7622,
 	.spare_sizes = mt7622_spare_sizes,
 	.num_spare_size = ARRAY_SIZE(mt7622_spare_sizes)
 };
@@ -257,10 +266,25 @@ static const struct mtk_snand_caps mt7629_snand_caps = {
 	.bbm_swap = true,
 	.empty_page_check = false,
 	.mastersta_mask = NFI_MASTERSTA_MASK_7622,
+	.nandfsm_mask = NFI_NAND_FSM_7622,
 	.spare_sizes = mt7622_spare_sizes,
 	.num_spare_size = ARRAY_SIZE(mt7622_spare_sizes)
 };
 
+static const struct mtk_snand_caps mt7986_snand_caps = {
+	.sector_size = 1024,
+	.max_sectors = 8,
+	.fdm_size = 8,
+	.fdm_ecc_size = 1,
+	.fifo_size = 64,
+	.bbm_swap = true,
+	.empty_page_check = true,
+	.mastersta_mask = NFI_MASTERSTA_MASK_7986,
+	.nandfsm_mask = NFI_NAND_FSM_7986,
+	.spare_sizes = mt7986_spare_sizes,
+	.num_spare_size = ARRAY_SIZE(mt7986_spare_sizes)
+};
+
 struct mtk_snand_conf {
 	size_t page_size;
 	size_t oob_size;
@@ -360,7 +384,7 @@ static int mtk_nfi_reset(struct mtk_snand *snf)
 	}
 
 	ret = readl_poll_timeout(snf->nfi_base + NFI_STA, val,
-				 !(val & (NFI_FSM | NFI_NAND_FSM)), 0,
+				 !(val & (NFI_FSM | snf->caps->nandfsm_mask)), 0,
 				 SNFI_POLL_INTERVAL);
 	if (ret) {
 		dev_err(snf->dev, "Failed to reset NFI\n");
@@ -1295,6 +1319,7 @@ static irqreturn_t mtk_snand_irq(int irq, void *id)
 static const struct of_device_id mtk_snand_ids[] = {
 	{ .compatible = "mediatek,mt7622-snand", .data = &mt7622_snand_caps },
 	{ .compatible = "mediatek,mt7629-snand", .data = &mt7629_snand_caps },
+	{ .compatible = "mediatek,mt7986-snand", .data = &mt7986_snand_caps },
 	{},
 };
 
-- 
2.25.1



From peter.wang at mediatek.com  Sun Dec  4 23:39:27 2022
From: peter.wang at mediatek.com (=?utf-8?B?UGV0ZXIgV2FuZyAo546L5L+h5Y+LKQ==?=)
Date: Mon, 5 Dec 2022 07:39:27 +0000
Subject: [PATCH v1] ufs: core: wlun suspend SSU fail recovery
In-Reply-To: <CAONX=-d1Hiif9WFuGVQaMr7iUFxOpOSE7bkJriTrqh-Pvtdq0A@mail.gmail.com>
References: <20221101142410.31463-1-peter.wang@mediatek.com>
	 <98bfafd3-c7b7-89b5-497a-aa694d0152dd@intel.com>
	 <5e00ce60-3859-4964-11f7-e036f6dda56a@acm.org>
	 <CAONX=-e1NA--3taTmfbUV+hR_LOSqvBqz_=1mPmYZWaKGGR=ig@mail.gmail.com>
	 <c92655563231dd79ed6d4287d7d5bad4de142a18.camel@mediatek.com>
	 <CAONX=-d1Hiif9WFuGVQaMr7iUFxOpOSE7bkJriTrqh-Pvtdq0A@mail.gmail.com>
Message-ID: <f24e8e5a252715494049ac16d0c1da7d8f1ff467.camel@mediatek.com>

Hi Daniil,

Thanks your feedback. 
I am glad to hear your problem can be solved by this patch.
Please also help have a review of my v3 patch

https://patchwork.kernel.org/project/linux-scsi/patch/20221202073532.7884-1-peter.wang at mediatek.com/

Thanks.
BR
Peter



On Mon, 2022-12-05 at 07:02 +1100, Daniil Lunev wrote:
> > May I have a question, which dievce you use in this failure
> > scenario?
> > I think it is same issue due to SSU fail, and wlun devcie pm enter
> > error state. So the cunsomer(scsi lu device) is block in suspend
> > state
> > and connot resume to reduce pm_only lead to IO hang.
> > 
> > Thanks.
> > BR
> > Peter
> 
> I don't think it is device specific. I am pretty sure it is the same
> problem, for it traces to the same origin and your patch fixes the
> issue (though with a lot of log spam which is a bit unfortunate, but
> we can live with that)
> 
> --Daniil

From leon at kernel.org  Mon Dec  5 00:00:12 2022
From: leon at kernel.org (Leon Romanovsky)
Date: Mon, 5 Dec 2022 10:00:12 +0200
Subject: [PATCH net-next v2] net: ethernet: mtk_wed: Fix missing
 of_node_put() in mtk_wed_wo_hardware_init()
In-Reply-To: <20221205034339.112163-1-yuancan@huawei.com>
References: <20221205034339.112163-1-yuancan@huawei.com>
Message-ID: <Y42lDNzhBeYcevRL@unreal>

On Mon, Dec 05, 2022 at 03:43:39AM +0000, Yuan Can wrote:
> The np needs to be released through of_node_put() in the error handling
> path of mtk_wed_wo_hardware_init().
> 
> Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
> Signed-off-by: Yuan Can <yuancan at huawei.com>
> ---
> Changes in v2:
> - Replace IS_ERR_OR_NULL() with IS_ERR() to check wo->mmio.regs.
> - Add net-next tag.
> 
>  drivers/net/ethernet/mediatek/mtk_wed_wo.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 

Thanks,
Reviewed-by: Leon Romanovsky <leonro at nvidia.com>


From lorenzo at kernel.org  Mon Dec  5 00:53:41 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Mon, 5 Dec 2022 09:53:41 +0100
Subject: [PATCH net-next] net: ethernet: mtk_wed: add reset to
 rx_ring_setup callback
In-Reply-To: <Y42Yz2hhwk1Rw1hz@unreal>
References: <26fa16f2f212bff5edfdbe8a4f41dba7a132b0be.1670072570.git.lorenzo@kernel.org>
 <Y42Yz2hhwk1Rw1hz@unreal>
Message-ID: <Y42xlcjeuys4pW4j@lore-desk>

> On Sat, Dec 03, 2022 at 02:06:30PM +0100, Lorenzo Bianconi wrote:
> > Introduce reset parameter to mtk_wed_rx_ring_setup signature.
> > This is a preliminary patch to add Wireless Ethernet Dispatcher reset
> > support.
> 
> So please submit it as part the relevant series.

I have not included this patch in my previous reset series since mt76 bit
were missing (merged now in net-next). I posted this now as standalone patch
to be aligned with mtk_wed_tx_ring_setup counterpart that is already merged
into net-next.

@Dave,Eric,Jakub,Paolo: I am fine both ways, what do you prefer?

Regards,
Lorenzo

> 
> Thanks
> 
> > 
> > Co-developed-by: Sujuan Chen <sujuan.chen at mediatek.com>
> > Signed-off-by: Sujuan Chen <sujuan.chen at mediatek.com>
> > Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> > ---
> >  drivers/net/ethernet/mediatek/mtk_wed.c  | 20 +++++++++++++-------
> >  drivers/net/wireless/mediatek/mt76/dma.c |  2 +-
> >  include/linux/soc/mediatek/mtk_wed.h     |  8 ++++----
> >  3 files changed, 18 insertions(+), 12 deletions(-)
> > 
> > diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
> > index 6352abd4157e..b1ec3f353b66 100644
> > --- a/drivers/net/ethernet/mediatek/mtk_wed.c
> > +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
> > @@ -1216,7 +1216,8 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
> >  }
> >  
> >  static int
> > -mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
> > +mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
> > +			   bool reset)
> >  {
> >  	u32 desc_size = sizeof(struct mtk_wdma_desc) * dev->hw->version;
> >  	struct mtk_wed_ring *wdma;
> > @@ -1225,8 +1226,8 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
> >  		return -EINVAL;
> >  
> >  	wdma = &dev->tx_wdma[idx];
> > -	if (mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE, desc_size,
> > -			       true))
> > +	if (!reset && mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE,
> > +					 desc_size, true))
> >  		return -ENOMEM;
> >  
> >  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
> > @@ -1236,6 +1237,9 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
> >  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_CPU_IDX, 0);
> >  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_DMA_IDX, 0);
> >  
> > +	if (reset)
> > +		mtk_wed_ring_reset(wdma, MTK_WED_WDMA_RING_SIZE, true);
> > +
> >  	if (!idx)  {
> >  		wed_w32(dev, MTK_WED_WDMA_RING_TX + MTK_WED_RING_OFS_BASE,
> >  			wdma->desc_phys);
> > @@ -1577,18 +1581,20 @@ mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
> >  }
> >  
> >  static int
> > -mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs)
> > +mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs,
> > +		      bool reset)
> >  {
> >  	struct mtk_wed_ring *ring = &dev->rx_ring[idx];
> >  
> >  	if (WARN_ON(idx >= ARRAY_SIZE(dev->rx_ring)))
> >  		return -EINVAL;
> >  
> > -	if (mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
> > -			       sizeof(*ring->desc), false))
> > +	if (!reset && mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
> > +					 sizeof(*ring->desc), false))
> >  		return -ENOMEM;
> >  
> > -	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE))
> > +	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE,
> > +				       reset))
> >  		return -ENOMEM;
> >  
> >  	ring->reg_base = MTK_WED_RING_RX_DATA(idx);
> > diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
> > index 3f8c0845fcca..f795548562f5 100644
> > --- a/drivers/net/wireless/mediatek/mt76/dma.c
> > +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> > @@ -648,7 +648,7 @@ mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
> >  			q->wed_regs = wed->txfree_ring.reg_base;
> >  		break;
> >  	case MT76_WED_Q_RX:
> > -		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs);
> > +		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs, false);
> >  		if (!ret)
> >  			q->wed_regs = wed->rx_ring[ring].reg_base;
> >  		break;
> > diff --git a/include/linux/soc/mediatek/mtk_wed.h b/include/linux/soc/mediatek/mtk_wed.h
> > index beb190449704..a0746d4aec20 100644
> > --- a/include/linux/soc/mediatek/mtk_wed.h
> > +++ b/include/linux/soc/mediatek/mtk_wed.h
> > @@ -160,7 +160,7 @@ struct mtk_wed_ops {
> >  	int (*tx_ring_setup)(struct mtk_wed_device *dev, int ring,
> >  			     void __iomem *regs, bool reset);
> >  	int (*rx_ring_setup)(struct mtk_wed_device *dev, int ring,
> > -			     void __iomem *regs);
> > +			     void __iomem *regs, bool reset);
> >  	int (*txfree_ring_setup)(struct mtk_wed_device *dev,
> >  				 void __iomem *regs);
> >  	int (*msg_update)(struct mtk_wed_device *dev, int cmd_id,
> > @@ -228,8 +228,8 @@ mtk_wed_get_rx_capa(struct mtk_wed_device *dev)
> >  	(_dev)->ops->irq_get(_dev, _mask)
> >  #define mtk_wed_device_irq_set_mask(_dev, _mask) \
> >  	(_dev)->ops->irq_set_mask(_dev, _mask)
> > -#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) \
> > -	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs)
> > +#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) \
> > +	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs, _reset)
> >  #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash) \
> >  	(_dev)->ops->ppe_check(_dev, _skb, _reason, _hash)
> >  #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) \
> > @@ -249,7 +249,7 @@ static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
> >  #define mtk_wed_device_reg_write(_dev, _reg, _val) do {} while (0)
> >  #define mtk_wed_device_irq_get(_dev, _mask) 0
> >  #define mtk_wed_device_irq_set_mask(_dev, _mask) do {} while (0)
> > -#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) -ENODEV
> > +#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) -ENODEV
> >  #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash)  do {} while (0)
> >  #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) -ENODEV
> >  #define mtk_wed_device_stop(_dev) do {} while (0)
> > -- 
> > 2.38.1
> > 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221205/f42b0953/attachment.sig>

From lorenzo at kernel.org  Mon Dec  5 01:04:07 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Mon, 5 Dec 2022 10:04:07 +0100
Subject: [PATCH net-next] net: ethernet: mtk_wed: fix possible deadlock
 if mtk_wed_wo_init fails
In-Reply-To: <Y42d2us5Pv1UqhEj@unreal>
References: <a87f05e60ea1a94b571c9c87b69cc5b0e94943f2.1669999089.git.lorenzo@kernel.org>
 <Y4ybbkn+nXkGsqWe@unreal>
 <Y4y4If8XXu+wErIj@lore-desk>
 <Y42d2us5Pv1UqhEj@unreal>
Message-ID: <Y420B4/IpwFHJAck@lore-desk>

On Dec 05, Leon Romanovsky wrote:
> On Sun, Dec 04, 2022 at 04:09:21PM +0100, Lorenzo Bianconi wrote:
> > > On Fri, Dec 02, 2022 at 06:36:33PM +0100, Lorenzo Bianconi wrote:
> > > > Introduce __mtk_wed_detach() in order to avoid a possible deadlock in
> > > > mtk_wed_attach routine if mtk_wed_wo_init fails.
> > > > 
> > > > Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
> > > > Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> > > > ---
> > > >  drivers/net/ethernet/mediatek/mtk_wed.c     | 24 ++++++++++++++-------
> > > >  drivers/net/ethernet/mediatek/mtk_wed_mcu.c | 10 ++++++---
> > > >  drivers/net/ethernet/mediatek/mtk_wed_wo.c  |  3 +++
> > > >  3 files changed, 26 insertions(+), 11 deletions(-)
> > > 
> > > <...>
> > > 
> > > > diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > > > index f9539e6233c9..b084009a32f9 100644
> > > > --- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > > > +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > > > @@ -176,6 +176,9 @@ int mtk_wed_mcu_send_msg(struct mtk_wed_wo *wo, int id, int cmd,
> > > >  	u16 seq;
> > > >  	int ret;
> > > >  
> > > > +	if (!wo)
> > > > +		return -ENODEV;
> > > 
> > > <...>
> > > 
> > > >  static void
> > > >  mtk_wed_wo_hw_deinit(struct mtk_wed_wo *wo)
> > > >  {
> > > > +	if (!wo)
> > > > +		return;
> > > 
> > > How are these changes related to the written in deadlock?
> > > How is it possible to get internal mtk functions without valid wo?
> > 
> > Hi Leon,
> > 
> > if mtk_wed_rro_alloc() fails in mtk_wed_attach(), we will end up running
> > __mtk_wed_detach() when wo struct is not allocated yet (wo is allocated in
> > mtk_wed_wo_init()).
> 
> IMHO, it is a culprit, proper error unwind means that you won't call to
> uninit functions for something that is not initialized yet. It is better
> to fix it instead of adding "if (!wo) ..." checks.

So, iiuc, you would prefer to do something like:

__mtk_wed_detach()
{
	...
	if (mtk_wed_get_rx_capa(dev) && wo) {
		mtk_wed_wo_reset(dev);
		mtk_wed_free_rx_rings(dev);
		mtk_wed_wo_deinit(hw);
	}
	...
	
Right? I am fine both ways :)

> 
> > Moreover __mtk_wed_detach() can run mtk_wed_wo_reset() and mtk_wed_wo_deinit()
> 
> This is another side of same coin. If you can run them in parallel, you
> need locking protection and ability to cancel work, so nothing is going
> to be executed once cleanup succeeded.

Sorry, I did not get what you mean here with 'in parallel'. __mtk_wed_detach()
always run with hw_lock mutex help in both mtk_wed_attach() or
mtk_wed_detach().

Regards,
Lorenzo

> 
> These were my 2 cents, totally IMHO.
> 
> Thanks
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221205/e14d663d/attachment.sig>

From bayi.cheng at mediatek.com  Mon Dec  5 00:24:19 2022
From: bayi.cheng at mediatek.com (Bayi Cheng)
Date: Mon, 5 Dec 2022 16:24:19 +0800
Subject: [PATCH v1] spi: spi-mtk-nor: Add recovery mechanism for dma read timeout
Message-ID: <20221205082419.29170-1-bayi.cheng@mediatek.com>

From: bayi cheng <bayi.cheng at mediatek.com>

The state machine of MTK spi nor controller may be disturbed by some
glitch signals from the relevant BUS during dma read, Although the
possibility of causing the dma read to fail is next to nothing,
However, if error-handling is not implemented, which makes the feature
somewhat risky.

Add an error-handling mechanism here, reset the state machine and
re-read the data when an error occurs.

Signed-off-by: bayi cheng <bayi.cheng at mediatek.com>
---
Change in v1:
  -Reset the state machine when dma read fails and read again.
---
---
 drivers/spi/spi-mtk-nor.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/spi/spi-mtk-nor.c b/drivers/spi/spi-mtk-nor.c
index d167699a1a96..c77d79da9a4c 100644
--- a/drivers/spi/spi-mtk-nor.c
+++ b/drivers/spi/spi-mtk-nor.c
@@ -80,6 +80,9 @@
 #define MTK_NOR_REG_DMA_FADR		0x71c
 #define MTK_NOR_REG_DMA_DADR		0x720
 #define MTK_NOR_REG_DMA_END_DADR	0x724
+#define MTK_NOR_REG_CG_DIS		0x728
+#define MTK_NOR_SFC_SW_RST		BIT(2)
+
 #define MTK_NOR_REG_DMA_DADR_HB		0x738
 #define MTK_NOR_REG_DMA_END_DADR_HB	0x73c
 
@@ -616,7 +619,18 @@ static int mtk_nor_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)
 			mtk_nor_set_addr(sp, op);
 			return mtk_nor_read_pio(sp, op);
 		} else {
-			return mtk_nor_read_dma(sp, op);
+			ret = mtk_nor_read_dma(sp, op);
+			if (ret) {
+				dev_err(sp->dev, "try to read again\n");
+				mtk_nor_rmw(sp, MTK_NOR_REG_CG_DIS, 0, MTK_NOR_SFC_SW_RST);
+				mb(); /* flush previous writes */
+				mtk_nor_rmw(sp, MTK_NOR_REG_CG_DIS, MTK_NOR_SFC_SW_RST, 0);
+				mb(); /* flush previous writes */
+				writel(MTK_NOR_ENABLE_SF_CMD, sp->base + MTK_NOR_REG_WP);
+				mtk_nor_setup_bus(sp, op);
+				ret = mtk_nor_read_dma(sp, op);
+			}
+			return ret;
 		}
 	}
 
-- 
2.18.0



From krzysztof.kozlowski at linaro.org  Mon Dec  5 01:05:50 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Mon, 5 Dec 2022 10:05:50 +0100
Subject: [PATCH v2 5/9] dt-bindings: spi: mtk-snfi: Add compatible for
 MT7986
In-Reply-To: <20221205065756.26875-6-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-6-xiangsheng.hou@mediatek.com>
Message-ID: <3e141d37-497b-e9dd-44af-22ec57881b04@linaro.org>

On 05/12/2022 07:57, Xiangsheng Hou wrote:
> 1. Add dt-bindings documentation of SPI NAND controller
> for MediaTek MT7986 SoC platform.
> 2. Add optional nfi_hclk property which needed for MT7986.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> ---


Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Best regards,
Krzysztof



From krzysztof.kozlowski at linaro.org  Mon Dec  5 01:06:32 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Mon, 5 Dec 2022 10:06:32 +0100
Subject: [PATCH v2 7/9] dt-bindings: spi: mtk-snfi: Add read latch latency
 property
In-Reply-To: <20221205065756.26875-8-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-8-xiangsheng.hou@mediatek.com>
Message-ID: <d320f49f-b304-4ef7-1d50-5c909c6fd108@linaro.org>

On 05/12/2022 07:57, Xiangsheng Hou wrote:
> Add mediatek,rx-latch-latency property which adjust read delay in the
> unit of clock cycle.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>


Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Best regards,
Krzysztof



From leon at kernel.org  Mon Dec  5 01:21:14 2022
From: leon at kernel.org (Leon Romanovsky)
Date: Mon, 5 Dec 2022 11:21:14 +0200
Subject: [PATCH net-next] net: ethernet: mtk_wed: add reset to
 rx_ring_setup callback
In-Reply-To: <Y42xlcjeuys4pW4j@lore-desk>
References: <26fa16f2f212bff5edfdbe8a4f41dba7a132b0be.1670072570.git.lorenzo@kernel.org>
 <Y42Yz2hhwk1Rw1hz@unreal>
 <Y42xlcjeuys4pW4j@lore-desk>
Message-ID: <Y424Cr8rTXtSUzAz@unreal>

On Mon, Dec 05, 2022 at 09:53:41AM +0100, Lorenzo Bianconi wrote:
> > On Sat, Dec 03, 2022 at 02:06:30PM +0100, Lorenzo Bianconi wrote:
> > > Introduce reset parameter to mtk_wed_rx_ring_setup signature.
> > > This is a preliminary patch to add Wireless Ethernet Dispatcher reset
> > > support.
> > 
> > So please submit it as part the relevant series.
> 
> I have not included this patch in my previous reset series since mt76 bit
> were missing (merged now in net-next). I posted this now as standalone patch
> to be aligned with mtk_wed_tx_ring_setup counterpart that is already merged
> into net-next.
> 
> @Dave,Eric,Jakub,Paolo: I am fine both ways, what do you prefer?

Just update commit message from being "preliminary patch" to be "update,
align, e.t.c" with pointer to the series which needs it.

Thanks

> 
> Regards,
> Lorenzo
> 
> > 
> > Thanks
> > 
> > > 
> > > Co-developed-by: Sujuan Chen <sujuan.chen at mediatek.com>
> > > Signed-off-by: Sujuan Chen <sujuan.chen at mediatek.com>
> > > Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> > > ---
> > >  drivers/net/ethernet/mediatek/mtk_wed.c  | 20 +++++++++++++-------
> > >  drivers/net/wireless/mediatek/mt76/dma.c |  2 +-
> > >  include/linux/soc/mediatek/mtk_wed.h     |  8 ++++----
> > >  3 files changed, 18 insertions(+), 12 deletions(-)
> > > 
> > > diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
> > > index 6352abd4157e..b1ec3f353b66 100644
> > > --- a/drivers/net/ethernet/mediatek/mtk_wed.c
> > > +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
> > > @@ -1216,7 +1216,8 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
> > >  }
> > >  
> > >  static int
> > > -mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
> > > +mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
> > > +			   bool reset)
> > >  {
> > >  	u32 desc_size = sizeof(struct mtk_wdma_desc) * dev->hw->version;
> > >  	struct mtk_wed_ring *wdma;
> > > @@ -1225,8 +1226,8 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
> > >  		return -EINVAL;
> > >  
> > >  	wdma = &dev->tx_wdma[idx];
> > > -	if (mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE, desc_size,
> > > -			       true))
> > > +	if (!reset && mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE,
> > > +					 desc_size, true))
> > >  		return -ENOMEM;
> > >  
> > >  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
> > > @@ -1236,6 +1237,9 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
> > >  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_CPU_IDX, 0);
> > >  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_DMA_IDX, 0);
> > >  
> > > +	if (reset)
> > > +		mtk_wed_ring_reset(wdma, MTK_WED_WDMA_RING_SIZE, true);
> > > +
> > >  	if (!idx)  {
> > >  		wed_w32(dev, MTK_WED_WDMA_RING_TX + MTK_WED_RING_OFS_BASE,
> > >  			wdma->desc_phys);
> > > @@ -1577,18 +1581,20 @@ mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
> > >  }
> > >  
> > >  static int
> > > -mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs)
> > > +mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs,
> > > +		      bool reset)
> > >  {
> > >  	struct mtk_wed_ring *ring = &dev->rx_ring[idx];
> > >  
> > >  	if (WARN_ON(idx >= ARRAY_SIZE(dev->rx_ring)))
> > >  		return -EINVAL;
> > >  
> > > -	if (mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
> > > -			       sizeof(*ring->desc), false))
> > > +	if (!reset && mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
> > > +					 sizeof(*ring->desc), false))
> > >  		return -ENOMEM;
> > >  
> > > -	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE))
> > > +	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE,
> > > +				       reset))
> > >  		return -ENOMEM;
> > >  
> > >  	ring->reg_base = MTK_WED_RING_RX_DATA(idx);
> > > diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
> > > index 3f8c0845fcca..f795548562f5 100644
> > > --- a/drivers/net/wireless/mediatek/mt76/dma.c
> > > +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> > > @@ -648,7 +648,7 @@ mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
> > >  			q->wed_regs = wed->txfree_ring.reg_base;
> > >  		break;
> > >  	case MT76_WED_Q_RX:
> > > -		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs);
> > > +		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs, false);
> > >  		if (!ret)
> > >  			q->wed_regs = wed->rx_ring[ring].reg_base;
> > >  		break;
> > > diff --git a/include/linux/soc/mediatek/mtk_wed.h b/include/linux/soc/mediatek/mtk_wed.h
> > > index beb190449704..a0746d4aec20 100644
> > > --- a/include/linux/soc/mediatek/mtk_wed.h
> > > +++ b/include/linux/soc/mediatek/mtk_wed.h
> > > @@ -160,7 +160,7 @@ struct mtk_wed_ops {
> > >  	int (*tx_ring_setup)(struct mtk_wed_device *dev, int ring,
> > >  			     void __iomem *regs, bool reset);
> > >  	int (*rx_ring_setup)(struct mtk_wed_device *dev, int ring,
> > > -			     void __iomem *regs);
> > > +			     void __iomem *regs, bool reset);
> > >  	int (*txfree_ring_setup)(struct mtk_wed_device *dev,
> > >  				 void __iomem *regs);
> > >  	int (*msg_update)(struct mtk_wed_device *dev, int cmd_id,
> > > @@ -228,8 +228,8 @@ mtk_wed_get_rx_capa(struct mtk_wed_device *dev)
> > >  	(_dev)->ops->irq_get(_dev, _mask)
> > >  #define mtk_wed_device_irq_set_mask(_dev, _mask) \
> > >  	(_dev)->ops->irq_set_mask(_dev, _mask)
> > > -#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) \
> > > -	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs)
> > > +#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) \
> > > +	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs, _reset)
> > >  #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash) \
> > >  	(_dev)->ops->ppe_check(_dev, _skb, _reason, _hash)
> > >  #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) \
> > > @@ -249,7 +249,7 @@ static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
> > >  #define mtk_wed_device_reg_write(_dev, _reg, _val) do {} while (0)
> > >  #define mtk_wed_device_irq_get(_dev, _mask) 0
> > >  #define mtk_wed_device_irq_set_mask(_dev, _mask) do {} while (0)
> > > -#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) -ENODEV
> > > +#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) -ENODEV
> > >  #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash)  do {} while (0)
> > >  #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) -ENODEV
> > >  #define mtk_wed_device_stop(_dev) do {} while (0)
> > > -- 
> > > 2.38.1
> > > 




From krzysztof.kozlowski at linaro.org  Mon Dec  5 01:21:59 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Mon, 5 Dec 2022 10:21:59 +0100
Subject: [PATCH v2 8/9] dt-bindings: mtd: Split ECC engine with rawnand
 controller
In-Reply-To: <20221205065756.26875-9-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-9-xiangsheng.hou@mediatek.com>
Message-ID: <3a9b5a27-e18f-226b-065b-f09c568b4d85@linaro.org>

On 05/12/2022 07:57, Xiangsheng Hou wrote:
> 1. Split MediaTek ECC engine with rawnand controller and convert to
> YAML schema.
> 2. Change the existing node name in order to match NAND controller DT
> bindings.

One patch - one logical change. Not two. This applies to all your
patches, so whenever you want to enumerate, please think twice.

> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> ---
>  .../bindings/mtd/mediatek,mtk-nfc.yaml        | 171 +++++++++++++++++
>  .../mtd/mediatek,nand-ecc-engine.yaml         |  62 ++++++
>  .../devicetree/bindings/mtd/mtk-nand.txt      | 176 ------------------
>  arch/arm/boot/dts/mt2701.dtsi                 |   2 +-
>  arch/arm64/boot/dts/mediatek/mt2712e.dtsi     |   2 +-
>  arch/arm64/boot/dts/mediatek/mt7622.dtsi      |   2 +-

Do not combine bindings and DTS.

>  6 files changed, 236 insertions(+), 179 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
>  create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
>  delete mode 100644 Documentation/devicetree/bindings/mtd/mtk-nand.txt
> 
> diff --git a/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
> new file mode 100644
> index 000000000000..2b1c92edc9d0
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
> @@ -0,0 +1,171 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/mtd/mediatek,mtk-nfc.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: MediaTek(MTK) SoCs raw NAND FLASH controller (NFC)
> +
> +maintainers:
> +  - Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> +
> +properties:
> +  compatible:
> +    enum:
> +      - mediatek,mt2701-nfc
> +      - mediatek,mt2712-nfc
> +      - mediatek,mt7622-nfc
> +
> +  reg:
> +    items:
> +      - description: Base physical address and size of NFI.
> +
> +  interrupts:
> +    items:
> +      - description: NFI interrupt
> +
> +  clocks:
> +    items:
> +      - description: clock used for the controller
> +      - description: clock used for the pad
> +
> +  clock-names:
> +    items:
> +      - const: nfi_clk
> +      - const: pad_clk
> +
> +  ecc-engine: true

I don't think this could be anything. You need to describe it, so $ref
and description.

> +
> +  partitions:
> +    $ref: mtd.yaml#

How the partitions are MTD device? Open that file and see how it should
be defined... Anyway mtd.yaml is part of nand-chip, not nand-controller.

> +
> +allOf:
> +  - $ref: nand-controller.yaml#
> +
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            const: mediatek,mt2701-nfc
> +    then:
> +      patternProperties:
> +        "^nand@[a-f0-9]$":
> +          type: object

No need for type, the definition is already there through
nand-controller.yaml.

> +          properties:
> +            reg:
> +              minimum: 0
> +              maximum: 1

This is the same as other variant, so should be defined in top-level
pattern properties.

> +            nand-ecc-mode:
> +              const: hw

Ditto

> +            nand-ecc-step-size:
> +              enum: [ 512, 1024 ]> +            nand-ecc-strength:
> +              enum: [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36,
> +                     40, 44, 48, 52, 56, 60]
> +
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            const: mediatek,mt2712-nfc
> +    then:
> +      patternProperties:
> +        "^nand@[a-f0-9]$":
> +          type: object
> +          properties:
> +            reg:
> +              minimum: 0
> +              maximum: 1
> +            nand-ecc-mode:
> +              const: hw
> +            nand-ecc-step-size:
> +              enum: [ 512, 1024 ]
> +            nand-ecc-strength:
> +              enum: [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36,
> +                     40, 44, 48, 52, 56, 60, 68, 72, 80]
> +
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            const: mediatek,mt7622-nfc
> +    then:
> +      patternProperties:
> +        "^nand@[a-f0-9]$":
> +          type: object
> +          properties:
> +            reg:
> +              minimum: 0
> +              maximum: 1
> +            nand-ecc-mode:
> +              const: hw
> +            nand-ecc-step-size:
> +              const: 512
> +            nand-ecc-strength:
> +              enum: [4, 6, 8, 10, 12]
> +
> +required:
> +  - compatible
> +  - reg
> +  - interrupts
> +  - clocks
> +  - clock-names
> +  - ecc-engine
> +
> +unevaluatedProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/clock/mt2701-clk.h>
> +    #include <dt-bindings/interrupt-controller/arm-gic.h>
> +    #include <dt-bindings/interrupt-controller/irq.h>
> +
> +    soc {
> +        #address-cells = <2>;
> +        #size-cells = <2>;
> +
> +        nand-controller at 1100d000 {
> +            compatible = "mediatek,mt2701-nfc";
> +            reg = <0 0x1100d000 0 0x1000>;
> +            interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
> +            clocks = <&pericfg CLK_PERI_NFI>,
> +                     <&pericfg CLK_PERI_NFI_PAD>;
> +            clock-names = "nfi_clk", "pad_clk";
> +            ecc-engine = <&bch>;
> +            #address-cells = <1>;
> +            #size-cells = <0>;
> +
> +            nand at 0 {
> +                reg = <0>;
> +
> +                nand-on-flash-bbt;
> +                nand-ecc-mode = "hw";
> +                nand-ecc-step-size = <1024>;
> +                nand-ecc-strength = <24>;
> +
> +                partitions {
> +                    compatible = "fixed-partitions";
> +                    #address-cells = <1>;
> +                    #size-cells = <1>;
> +
> +                    preloader at 0 {
> +                        label = "pl";
> +                        read-only;
> +                        reg = <0x0 0x400000>;
> +                    };
> +                    android at 400000 {
> +                        label = "android";
> +                        reg = <0x400000 0x12c00000>;
> +                    };
> +                };
> +            };
> +        };
> +
> +        bch: ecc at 1100e000 {
> +            compatible = "mediatek,mt2701-ecc";
> +            reg = <0 0x1100e000 0 0x1000>;
> +            interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_LOW>;
> +            clocks = <&pericfg CLK_PERI_NFI_ECC>;
> +            clock-names = "nfiecc_clk";

You already have example of ecc in other binding, so drop from this one.

> +        };
> +    };
> diff --git a/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
> new file mode 100644
> index 000000000000..b13d801eda76
> --- /dev/null


Best regards,
Krzysztof



From krzysztof.kozlowski at linaro.org  Mon Dec  5 01:22:48 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Mon, 5 Dec 2022 10:22:48 +0100
Subject: [PATCH v2 9/9] dt-bindings: mtd: ecc-mtk: Add compatible for
 MT7986
In-Reply-To: <20221205065756.26875-10-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-10-xiangsheng.hou@mediatek.com>
Message-ID: <6ba5f4c6-d725-0bee-9fb2-eddfae5760ca@linaro.org>

On 05/12/2022 07:57, Xiangsheng Hou wrote:
> Add dt-bindings documentation of ECC for MediaTek MT7986 SoC
> platform.
> 

Now your subject prefix does not match file. Filename is
"mediatek,nand-ecc-engine." so use it instead of "ecc-mtk".


Best regards,
Krzysztof



From leon at kernel.org  Mon Dec  5 01:32:03 2022
From: leon at kernel.org (Leon Romanovsky)
Date: Mon, 5 Dec 2022 11:32:03 +0200
Subject: [PATCH net-next] net: ethernet: mtk_wed: fix possible deadlock
 if mtk_wed_wo_init fails
In-Reply-To: <Y420B4/IpwFHJAck@lore-desk>
References: <a87f05e60ea1a94b571c9c87b69cc5b0e94943f2.1669999089.git.lorenzo@kernel.org>
 <Y4ybbkn+nXkGsqWe@unreal>
 <Y4y4If8XXu+wErIj@lore-desk>
 <Y42d2us5Pv1UqhEj@unreal>
 <Y420B4/IpwFHJAck@lore-desk>
Message-ID: <Y426k9VzOzYlXuOo@unreal>

On Mon, Dec 05, 2022 at 10:04:07AM +0100, Lorenzo Bianconi wrote:
> On Dec 05, Leon Romanovsky wrote:
> > On Sun, Dec 04, 2022 at 04:09:21PM +0100, Lorenzo Bianconi wrote:
> > > > On Fri, Dec 02, 2022 at 06:36:33PM +0100, Lorenzo Bianconi wrote:
> > > > > Introduce __mtk_wed_detach() in order to avoid a possible deadlock in
> > > > > mtk_wed_attach routine if mtk_wed_wo_init fails.
> > > > > 
> > > > > Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
> > > > > Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> > > > > ---
> > > > >  drivers/net/ethernet/mediatek/mtk_wed.c     | 24 ++++++++++++++-------
> > > > >  drivers/net/ethernet/mediatek/mtk_wed_mcu.c | 10 ++++++---
> > > > >  drivers/net/ethernet/mediatek/mtk_wed_wo.c  |  3 +++
> > > > >  3 files changed, 26 insertions(+), 11 deletions(-)
> > > > 
> > > > <...>
> > > > 
> > > > > diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > > > > index f9539e6233c9..b084009a32f9 100644
> > > > > --- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > > > > +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > > > > @@ -176,6 +176,9 @@ int mtk_wed_mcu_send_msg(struct mtk_wed_wo *wo, int id, int cmd,
> > > > >  	u16 seq;
> > > > >  	int ret;
> > > > >  
> > > > > +	if (!wo)
> > > > > +		return -ENODEV;
> > > > 
> > > > <...>
> > > > 
> > > > >  static void
> > > > >  mtk_wed_wo_hw_deinit(struct mtk_wed_wo *wo)
> > > > >  {
> > > > > +	if (!wo)
> > > > > +		return;
> > > > 
> > > > How are these changes related to the written in deadlock?
> > > > How is it possible to get internal mtk functions without valid wo?
> > > 
> > > Hi Leon,
> > > 
> > > if mtk_wed_rro_alloc() fails in mtk_wed_attach(), we will end up running
> > > __mtk_wed_detach() when wo struct is not allocated yet (wo is allocated in
> > > mtk_wed_wo_init()).
> > 
> > IMHO, it is a culprit, proper error unwind means that you won't call to
> > uninit functions for something that is not initialized yet. It is better
> > to fix it instead of adding "if (!wo) ..." checks.
> 
> So, iiuc, you would prefer to do something like:
> 
> __mtk_wed_detach()
> {
> 	...
> 	if (mtk_wed_get_rx_capa(dev) && wo) {
> 		mtk_wed_wo_reset(dev);
> 		mtk_wed_free_rx_rings(dev);
> 		mtk_wed_wo_deinit(hw);
> 	}
> 	...
> 	
> Right? I am fine both ways :)

Yes

> 
> > 
> > > Moreover __mtk_wed_detach() can run mtk_wed_wo_reset() and mtk_wed_wo_deinit()
> > 
> > This is another side of same coin. If you can run them in parallel, you
> > need locking protection and ability to cancel work, so nothing is going
> > to be executed once cleanup succeeded.
> 
> Sorry, I did not get what you mean here with 'in parallel'. __mtk_wed_detach()
> always run with hw_lock mutex help in both mtk_wed_attach() or
> mtk_wed_detach().

Lock is not enough, you need to make sure that no underlying code is
called without wo. You suggestion above is fine. The less low level code
will have "if (!wo) ...", the better will be.

Thanks

> 
> Regards,
> Lorenzo
> 
> > 
> > These were my 2 cents, totally IMHO.
> > 
> > Thanks




From chengci.xu at mediatek.com  Mon Dec  5 01:49:58 2022
From: chengci.xu at mediatek.com (Chengci.Xu)
Date: Mon, 5 Dec 2022 17:49:58 +0800
Subject: [PATCH v5 1/4] dt-bindings: mediatek: mt8188: Add binding for MM & INFRA IOMMU
In-Reply-To: <20221205095001.31918-1-chengci.xu@mediatek.com>
References: <20221205095001.31918-1-chengci.xu@mediatek.com>
Message-ID: <20221205095001.31918-2-chengci.xu@mediatek.com>

Adds descriptions for mt8188 IOMMU which also use ARM Short-Descriptor
translation table format.

In mt8188, there are two smi-common HW and IOMMU, one is for vdo(video
output), the other is for vpp(video processing pipe). They connects
with different smi-larbs, then some setting(larbid_remap) is different.
Differentiate them with the compatible string.

Something like this:

  IOMMU(VDO)          IOMMU(VPP)
      |                   |
SMI_COMMON_VDO      SMI_COMMON_VPP
---------------     ----------------
  |     |    ...      |     |    ...
larb0 larb2  ...    larb1 larb3  ...

We also have an IOMMU that is for infra master like PCIe.
And infra master don't have the larb and ports.

Signed-off-by: Chengci.Xu <chengci.xu at mediatek.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Reviewed-by: Yong Wu <yong.wu at mediatek.com>
---
 .../bindings/iommu/mediatek,iommu.yaml        |  12 +-
 .../memory/mediatek,mt8188-memory-port.h      | 482 ++++++++++++++++++
 2 files changed, 493 insertions(+), 1 deletion(-)
 create mode 100644 include/dt-bindings/memory/mediatek,mt8188-memory-port.h

diff --git a/Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml b/Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
index 5b6395bc10e0..ea6b0f5f24de 100644
--- a/Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
+++ b/Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
@@ -78,6 +78,9 @@ properties:
           - mediatek,mt8173-m4u  # generation two
           - mediatek,mt8183-m4u  # generation two
           - mediatek,mt8186-iommu-mm         # generation two
+          - mediatek,mt8188-iommu-vdo        # generation two
+          - mediatek,mt8188-iommu-vpp        # generation two
+          - mediatek,mt8188-iommu-infra      # generation two
           - mediatek,mt8192-m4u  # generation two
           - mediatek,mt8195-iommu-vdo        # generation two
           - mediatek,mt8195-iommu-vpp        # generation two
@@ -123,6 +126,7 @@ properties:
     description: |
       This is the mtk_m4u_id according to the HW. Specifies the mtk_m4u_id as
       defined in
+      dt-binding/memory/mediatek,mt8188-memory-port.h for mt8188,
       dt-binding/memory/mt2701-larb-port.h for mt2701 and mt7623,
       dt-binding/memory/mt2712-larb-port.h for mt2712,
       dt-binding/memory/mt6779-larb-port.h for mt6779,
@@ -155,6 +159,8 @@ allOf:
               - mediatek,mt6795-m4u
               - mediatek,mt8173-m4u
               - mediatek,mt8186-iommu-mm
+              - mediatek,mt8188-iommu-vdo
+              - mediatek,mt8188-iommu-vpp
               - mediatek,mt8192-m4u
               - mediatek,mt8195-iommu-vdo
               - mediatek,mt8195-iommu-vpp
@@ -168,6 +174,8 @@ allOf:
         compatible:
           enum:
             - mediatek,mt8186-iommu-mm
+            - mediatek,mt8188-iommu-vdo
+            - mediatek,mt8188-iommu-vpp
             - mediatek,mt8192-m4u
             - mediatek,mt8195-iommu-vdo
             - mediatek,mt8195-iommu-vpp
@@ -194,7 +202,9 @@ allOf:
         properties:
           compatible:
             contains:
-              const: mediatek,mt8195-iommu-infra
+              enum:
+                - mediatek,mt8188-iommu-infra
+                - mediatek,mt8195-iommu-infra
 
     then:
       required:
diff --git a/include/dt-bindings/memory/mediatek,mt8188-memory-port.h b/include/dt-bindings/memory/mediatek,mt8188-memory-port.h
new file mode 100644
index 000000000000..9d14d819bd4d
--- /dev/null
+++ b/include/dt-bindings/memory/mediatek,mt8188-memory-port.h
@@ -0,0 +1,482 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Chengci Xu <chengci.xu at mediatek.com>
+ */
+#ifndef _DT_BINDINGS_MEMORY_MEDIATEK_MT8188_LARB_PORT_H_
+#define _DT_BINDINGS_MEMORY_MEDIATEK_MT8188_LARB_PORT_H_
+
+#include <dt-bindings/memory/mtk-memory-port.h>
+
+/*
+ * MM IOMMU supports 16GB dma address. We separate it to four ranges:
+ * 0 ~ 4G; 4G ~ 8G; 8G ~ 12G; 12G ~ 16G, we could adjust these masters
+ * locate in anyone region. BUT:
+ * a) Make sure all the ports inside a larb are in one range.
+ * b) The iova of any master can NOT cross the 4G/8G/12G boundary.
+ *
+ * This is the suggested mapping in this SoC:
+ *
+ * modules    dma-address-region	larbs-ports
+ * disp         0 ~ 4G                  larb0/1/2/3
+ * vcodec      4G ~ 8G                  larb19/21/23
+ * cam/mdp     8G ~ 12G                 the other larbs.
+ * N/A         12G ~ 16G
+ * CCU0   0x24000_0000 ~ 0x243ff_ffff   larb27: port 0/1
+ * CCU1   0x24400_0000 ~ 0x247ff_ffff   larb27: port 2/3
+ *
+ * This SoC have two MM IOMMU HWs, this is the connected information:
+ * iommu-vdo: larb0/2/5/9/10/11A/11C/13/16B/17B/19/21
+ * iommu-vpp: larb1/3/4/6/7/11B/12/14/15/16A/17A/23/27
+ */
+
+/* MM IOMMU larbs */
+#define SMI_L0_ID		0
+#define SMI_L1_ID		1
+#define SMI_L2_ID		2
+#define SMI_L3_ID		3
+#define SMI_L4_ID		4
+#define SMI_L5_ID		5
+#define SMI_L6_ID		6
+#define SMI_L7_ID		7
+#define SMI_L9_ID		8
+#define SMI_L10_ID		9
+#define SMI_L11A_ID		10
+#define SMI_L11B_ID		11
+#define SMI_L11C_ID		12
+#define SMI_L12_ID		13
+#define SMI_L13_ID		14
+#define SMI_L14_ID		15
+#define SMI_L15_ID		16
+#define SMI_L16A_ID		17
+#define SMI_L16B_ID		18
+#define SMI_L17A_ID		19
+#define SMI_L17B_ID		20
+#define SMI_L19_ID		21
+#define SMI_L21_ID		22
+#define SMI_L23_ID		23
+#define SMI_L27_ID		24
+#define SMI_L28_ID		25
+
+/* MM IOMMU ports */
+/* LARB 0 -- VDO-0 */
+#define M4U_PORT_L0_DISP_RDMA1			MTK_M4U_ID(SMI_L0_ID, 0)
+#define M4U_PORT_L0_DISP_WDMA0			MTK_M4U_ID(SMI_L0_ID, 1)
+#define M4U_PORT_L0_DISP_OVL0_RDMA0		MTK_M4U_ID(SMI_L0_ID, 2)
+#define M4U_PORT_L0_DISP_OVL0_RDMA1		MTK_M4U_ID(SMI_L0_ID, 3)
+#define M4U_PORT_L0_DISP_OVL0_HDR		MTK_M4U_ID(SMI_L0_ID, 4)
+#define M4U_PORT_L0_DISP_POSTMASK0		MTK_M4U_ID(SMI_L0_ID, 5)
+#define M4U_PORT_L0_DISP_FAKE_ENG0		MTK_M4U_ID(SMI_L0_ID, 6)
+
+/* LARB 1 -- VD0-0 */
+#define M4U_PORT_L1_DISP_RDMA0			MTK_M4U_ID(SMI_L1_ID, 0)
+#define M4U_PORT_L1_DISP_WDMA1			MTK_M4U_ID(SMI_L1_ID, 1)
+#define M4U_PORT_L1_DISP_OVL1_RDMA0		MTK_M4U_ID(SMI_L1_ID, 2)
+#define M4U_PORT_L1_DISP_OVL1_RDMA1		MTK_M4U_ID(SMI_L1_ID, 3)
+#define M4U_PORT_L1_DISP_OVL1_HDR		MTK_M4U_ID(SMI_L1_ID, 4)
+#define M4U_PORT_L1_DISP_WROT0			MTK_M4U_ID(SMI_L1_ID, 5)
+#define M4U_PORT_L1_DISP_FAKE_ENG1		MTK_M4U_ID(SMI_L1_ID, 6)
+
+/* LARB 2 -- VDO-1 */
+#define M4U_PORT_L2_MDP_RDMA0			MTK_M4U_ID(SMI_L2_ID, 0)
+#define M4U_PORT_L2_MDP_RDMA2			MTK_M4U_ID(SMI_L2_ID, 1)
+#define M4U_PORT_L2_MDP_RDMA4			MTK_M4U_ID(SMI_L2_ID, 2)
+#define M4U_PORT_L2_MDP_RDMA6			MTK_M4U_ID(SMI_L2_ID, 3)
+#define M4U_PORT_L2_DISP_FAKE1			MTK_M4U_ID(SMI_L2_ID, 4)
+
+/* LARB 3 -- VDO-1 */
+#define M4U_PORT_L3_MDP_RDMA1			MTK_M4U_ID(SMI_L3_ID, 0)
+#define M4U_PORT_L3_MDP_RDMA3			MTK_M4U_ID(SMI_L3_ID, 1)
+#define M4U_PORT_L3_MDP_RDMA5			MTK_M4U_ID(SMI_L3_ID, 2)
+#define M4U_PORT_L3_MDP_RDMA7			MTK_M4U_ID(SMI_L3_ID, 3)
+#define M4U_PORT_L3_HDR_DS_SMI			MTK_M4U_ID(SMI_L3_ID, 4)
+#define M4U_PORT_L3_HDR_ADL_SMI			MTK_M4U_ID(SMI_L3_ID, 5)
+#define M4U_PORT_L3_DISP_FAKE1			MTK_M4U_ID(SMI_L3_ID, 6)
+
+/* LARB 4 -- VPP-0 */
+#define M4U_PORT_L4_MDP_RDMA			MTK_M4U_ID(SMI_L4_ID, 0)
+#define M4U_PORT_L4_MDP_FG			MTK_M4U_ID(SMI_L4_ID, 1)
+#define M4U_PORT_L4_MDP_OVL			MTK_M4U_ID(SMI_L4_ID, 2)
+#define M4U_PORT_L4_MDP_WROT			MTK_M4U_ID(SMI_L4_ID, 3)
+#define M4U_PORT_L4_FAKE_ENG			MTK_M4U_ID(SMI_L4_ID, 4)
+#define M4U_PORT_L4_DISP_RDMA			MTK_M4U_ID(SMI_L4_ID, 5)
+#define M4U_PORT_L4_DISP_WDMA			MTK_M4U_ID(SMI_L4_ID, 6)
+
+/* LARB 5 -- VPP-1 */
+#define M4U_PORT_L5_SVPP1_MDP_RDMA		MTK_M4U_ID(SMI_L5_ID, 0)
+#define M4U_PORT_L5_SVPP1_MDP_FG		MTK_M4U_ID(SMI_L5_ID, 1)
+#define M4U_PORT_L5_SVPP1_MDP_OVL		MTK_M4U_ID(SMI_L5_ID, 2)
+#define M4U_PORT_L5_SVPP1_MDP_WROT		MTK_M4U_ID(SMI_L5_ID, 3)
+#define M4U_PORT_L5_SVPP2_MDP_RDMA		MTK_M4U_ID(SMI_L5_ID, 4)
+#define M4U_PORT_L5_SVPP2_MDP_FG		MTK_M4U_ID(SMI_L5_ID, 5)
+#define M4U_PORT_L5_SVPP2_MDP_WROT		MTK_M4U_ID(SMI_L5_ID, 6)
+#define M4U_PORT_L5_LARB5_FAKE_ENG		MTK_M4U_ID(SMI_L5_ID, 7)
+
+/* LARB 6 -- VPP-1 */
+#define M4U_PORT_L6_SVPP3_MDP_RDMA		MTK_M4U_ID(SMI_L6_ID, 0)
+#define M4U_PORT_L6_SVPP3_MDP_FG		MTK_M4U_ID(SMI_L6_ID, 1)
+#define M4U_PORT_L6_SVPP3_MDP_WROT		MTK_M4U_ID(SMI_L6_ID, 2)
+#define M4U_PORT_L6_LARB6_FAKE_ENG		MTK_M4U_ID(SMI_L6_ID, 3)
+
+/* LARB 7 -- WPE */
+#define M4U_PORT_L7_WPE_RDMA_0			MTK_M4U_ID(SMI_L7_ID, 0)
+#define M4U_PORT_L7_WPE_RDMA_1			MTK_M4U_ID(SMI_L7_ID, 1)
+#define M4U_PORT_L7_WPE_WDMA_0			MTK_M4U_ID(SMI_L7_ID, 2)
+
+/* LARB 9 -- IMG-M */
+#define M4U_PORT_L9_IMGI_T1_A			MTK_M4U_ID(SMI_L9_ID, 0)
+#define M4U_PORT_L9_UFDI_T1_A			MTK_M4U_ID(SMI_L9_ID, 1)
+#define M4U_PORT_L9_IMGBI_T1_A			MTK_M4U_ID(SMI_L9_ID, 2)
+#define M4U_PORT_L9_IMGCI_T1_A			MTK_M4U_ID(SMI_L9_ID, 3)
+#define M4U_PORT_L9_SMTI_T1_A			MTK_M4U_ID(SMI_L9_ID, 4)
+#define M4U_PORT_L9_SMTI_T4_A			MTK_M4U_ID(SMI_L9_ID, 5)
+#define M4U_PORT_L9_TNCSTI_T1_A			MTK_M4U_ID(SMI_L9_ID, 6)
+#define M4U_PORT_L9_TNCSTI_T4_A			MTK_M4U_ID(SMI_L9_ID, 7)
+#define M4U_PORT_L9_YUVO_T1_A			MTK_M4U_ID(SMI_L9_ID, 8)
+#define M4U_PORT_L9_YUVBO_T1_A			MTK_M4U_ID(SMI_L9_ID, 9)
+#define M4U_PORT_L9_YUVCO_T1_A			MTK_M4U_ID(SMI_L9_ID, 10)
+#define M4U_PORT_L9_TIMGO_T1_A			MTK_M4U_ID(SMI_L9_ID, 11)
+#define M4U_PORT_L9_YUVO_T2_A			MTK_M4U_ID(SMI_L9_ID, 12)
+#define M4U_PORT_L9_YUVO_T5_A			MTK_M4U_ID(SMI_L9_ID, 13)
+#define M4U_PORT_L9_IMGI_T1_B			MTK_M4U_ID(SMI_L9_ID, 14)
+#define M4U_PORT_L9_IMGBI_T1_B			MTK_M4U_ID(SMI_L9_ID, 15)
+#define M4U_PORT_L9_IMGCI_T1_B			MTK_M4U_ID(SMI_L9_ID, 16)
+#define M4U_PORT_L9_SMTI_T4_B			MTK_M4U_ID(SMI_L9_ID, 17)
+#define M4U_PORT_L9_TNCSO_T1_A			MTK_M4U_ID(SMI_L9_ID, 18)
+#define M4U_PORT_L9_SMTO_T1_A			MTK_M4U_ID(SMI_L9_ID, 19)
+#define M4U_PORT_L9_SMTO_T4_A			MTK_M4U_ID(SMI_L9_ID, 20)
+#define M4U_PORT_L9_TNCSTO_T1_A			MTK_M4U_ID(SMI_L9_ID, 21)
+#define M4U_PORT_L9_YUVO_T2_B			MTK_M4U_ID(SMI_L9_ID, 22)
+#define M4U_PORT_L9_YUVO_T5_B			MTK_M4U_ID(SMI_L9_ID, 23)
+#define M4U_PORT_L9_SMTO_T4_B			MTK_M4U_ID(SMI_L9_ID, 24)
+
+/* LARB 10 -- IMG-D */
+#define M4U_PORT_L10_IMGI_D1			MTK_M4U_ID(SMI_L10_ID, 0)
+#define M4U_PORT_L10_IMGBI_D1			MTK_M4U_ID(SMI_L10_ID, 1)
+#define M4U_PORT_L10_IMGCI_D1			MTK_M4U_ID(SMI_L10_ID, 2)
+#define M4U_PORT_L10_IMGDI_D1			MTK_M4U_ID(SMI_L10_ID, 3)
+#define M4U_PORT_L10_DEPI_D1			MTK_M4U_ID(SMI_L10_ID, 4)
+#define M4U_PORT_L10_DMGI_D1			MTK_M4U_ID(SMI_L10_ID, 5)
+#define M4U_PORT_L10_SMTI_D1			MTK_M4U_ID(SMI_L10_ID, 6)
+#define M4U_PORT_L10_RECI_D1			MTK_M4U_ID(SMI_L10_ID, 7)
+#define M4U_PORT_L10_RECI_D1_N			MTK_M4U_ID(SMI_L10_ID, 8)
+#define M4U_PORT_L10_TNRWI_D1			MTK_M4U_ID(SMI_L10_ID, 9)
+#define M4U_PORT_L10_TNRCI_D1			MTK_M4U_ID(SMI_L10_ID, 10)
+#define M4U_PORT_L10_TNRCI_D1_N			MTK_M4U_ID(SMI_L10_ID, 11)
+#define M4U_PORT_L10_IMG4O_D1			MTK_M4U_ID(SMI_L10_ID, 12)
+#define M4U_PORT_L10_IMG4BO_D1			MTK_M4U_ID(SMI_L10_ID, 13)
+#define M4U_PORT_L10_SMTI_D8			MTK_M4U_ID(SMI_L10_ID, 14)
+#define M4U_PORT_L10_SMTO_D1			MTK_M4U_ID(SMI_L10_ID, 15)
+#define M4U_PORT_L10_TNRMO_D1			MTK_M4U_ID(SMI_L10_ID, 16)
+#define M4U_PORT_L10_TNRMO_D1_N			MTK_M4U_ID(SMI_L10_ID, 17)
+#define M4U_PORT_L10_SMTO_D8			MTK_M4U_ID(SMI_L10_ID, 18)
+#define M4U_PORT_L10_DBGO_D1			MTK_M4U_ID(SMI_L10_ID, 19)
+
+/* LARB 11A -- IMG-D */
+#define M4U_PORT_L11A_WPE_RDMA_0		MTK_M4U_ID(SMI_L11A_ID, 0)
+#define M4U_PORT_L11A_WPE_RDMA_1		MTK_M4U_ID(SMI_L11A_ID, 1)
+#define M4U_PORT_L11A_WPE_RDMA_4P_0		MTK_M4U_ID(SMI_L11A_ID, 2)
+#define M4U_PORT_L11A_WPE_RDMA_4P_1		MTK_M4U_ID(SMI_L11A_ID, 3)
+#define M4U_PORT_L11A_WPE_CQ0			MTK_M4U_ID(SMI_L11A_ID, 4)
+#define M4U_PORT_L11A_WPE_CQ1			MTK_M4U_ID(SMI_L11A_ID, 5)
+#define M4U_PORT_L11A_PIMGI_P1			MTK_M4U_ID(SMI_L11A_ID, 6)
+#define M4U_PORT_L11A_PIMGBI_P1			MTK_M4U_ID(SMI_L11A_ID, 7)
+#define M4U_PORT_L11A_PIMGCI_P1			MTK_M4U_ID(SMI_L11A_ID, 8)
+#define M4U_PORT_L11A_IMGI_T1_C			MTK_M4U_ID(SMI_L11A_ID, 9)
+#define M4U_PORT_L11A_IMGBI_T1_C		MTK_M4U_ID(SMI_L11A_ID, 10)
+#define M4U_PORT_L11A_IMGCI_T1_C		MTK_M4U_ID(SMI_L11A_ID, 11)
+#define M4U_PORT_L11A_SMTI_T1_C			MTK_M4U_ID(SMI_L11A_ID, 12)
+#define M4U_PORT_L11A_SMTI_T4_C			MTK_M4U_ID(SMI_L11A_ID, 13)
+#define M4U_PORT_L11A_SMTI_T6_C			MTK_M4U_ID(SMI_L11A_ID, 14)
+#define M4U_PORT_L11A_YUVO_T1_C			MTK_M4U_ID(SMI_L11A_ID, 15)
+#define M4U_PORT_L11A_YUVBO_T1_C		MTK_M4U_ID(SMI_L11A_ID, 16)
+#define M4U_PORT_L11A_YUVCO_T1_C		MTK_M4U_ID(SMI_L11A_ID, 17)
+#define M4U_PORT_L11A_WPE_WDMA_0		MTK_M4U_ID(SMI_L11A_ID, 18)
+#define M4U_PORT_L11A_WPE_WDMA_4P_0		MTK_M4U_ID(SMI_L11A_ID, 19)
+#define M4U_PORT_L11A_WROT_P1			MTK_M4U_ID(SMI_L11A_ID, 20)
+#define M4U_PORT_L11A_TCCSO_P1			MTK_M4U_ID(SMI_L11A_ID, 21)
+#define M4U_PORT_L11A_TCCSI_P1			MTK_M4U_ID(SMI_L11A_ID, 22)
+#define M4U_PORT_L11A_TIMGO_T1_C		MTK_M4U_ID(SMI_L11A_ID, 23)
+#define M4U_PORT_L11A_YUVO_T2_C			MTK_M4U_ID(SMI_L11A_ID, 24)
+#define M4U_PORT_L11A_YUVO_T5_C			MTK_M4U_ID(SMI_L11A_ID, 25)
+#define M4U_PORT_L11A_SMTO_T1_C			MTK_M4U_ID(SMI_L11A_ID, 26)
+#define M4U_PORT_L11A_SMTO_T4_C			MTK_M4U_ID(SMI_L11A_ID, 27)
+#define M4U_PORT_L11A_SMTO_T6_C			MTK_M4U_ID(SMI_L11A_ID, 28)
+#define M4U_PORT_L11A_DBGO_T1_C			MTK_M4U_ID(SMI_L11A_ID, 29)
+
+/* LARB 11B -- IMG-D */
+#define M4U_PORT_L11B_WPE_RDMA_0		MTK_M4U_ID(SMI_L11B_ID, 0)
+#define M4U_PORT_L11B_WPE_RDMA_1		MTK_M4U_ID(SMI_L11B_ID, 1)
+#define M4U_PORT_L11B_WPE_RDMA_4P_0		MTK_M4U_ID(SMI_L11B_ID, 2)
+#define M4U_PORT_L11B_WPE_RDMA_4P_1		MTK_M4U_ID(SMI_L11B_ID, 3)
+#define M4U_PORT_L11B_WPE_CQ0			MTK_M4U_ID(SMI_L11B_ID, 4)
+#define M4U_PORT_L11B_WPE_CQ1			MTK_M4U_ID(SMI_L11B_ID, 5)
+#define M4U_PORT_L11B_PIMGI_P1			MTK_M4U_ID(SMI_L11B_ID, 6)
+#define M4U_PORT_L11B_PIMGBI_P1			MTK_M4U_ID(SMI_L11B_ID, 7)
+#define M4U_PORT_L11B_PIMGCI_P1			MTK_M4U_ID(SMI_L11B_ID, 8)
+#define M4U_PORT_L11B_IMGI_T1_C			MTK_M4U_ID(SMI_L11B_ID, 9)
+#define M4U_PORT_L11B_IMGBI_T1_C		MTK_M4U_ID(SMI_L11B_ID, 10)
+#define M4U_PORT_L11B_IMGCI_T1_C		MTK_M4U_ID(SMI_L11B_ID, 11)
+#define M4U_PORT_L11B_SMTI_T1_C			MTK_M4U_ID(SMI_L11B_ID, 12)
+#define M4U_PORT_L11B_SMTI_T4_C			MTK_M4U_ID(SMI_L11B_ID, 13)
+#define M4U_PORT_L11B_SMTI_T6_C			MTK_M4U_ID(SMI_L11B_ID, 14)
+#define M4U_PORT_L11B_YUVO_T1_C			MTK_M4U_ID(SMI_L11B_ID, 15)
+#define M4U_PORT_L11B_YUVBO_T1_C		MTK_M4U_ID(SMI_L11B_ID, 16)
+#define M4U_PORT_L11B_YUVCO_T1_C		MTK_M4U_ID(SMI_L11B_ID, 17)
+#define M4U_PORT_L11B_WPE_WDMA_0		MTK_M4U_ID(SMI_L11B_ID, 18)
+#define M4U_PORT_L11B_WPE_WDMA_4P_0		MTK_M4U_ID(SMI_L11B_ID, 19)
+#define M4U_PORT_L11B_WROT_P1			MTK_M4U_ID(SMI_L11B_ID, 20)
+#define M4U_PORT_L11B_TCCSO_P1			MTK_M4U_ID(SMI_L11B_ID, 21)
+#define M4U_PORT_L11B_TCCSI_P1			MTK_M4U_ID(SMI_L11B_ID, 22)
+#define M4U_PORT_L11B_TIMGO_T1_C		MTK_M4U_ID(SMI_L11B_ID, 23)
+#define M4U_PORT_L11B_YUVO_T2_C			MTK_M4U_ID(SMI_L11B_ID, 24)
+#define M4U_PORT_L11B_YUVO_T5_C			MTK_M4U_ID(SMI_L11B_ID, 25)
+#define M4U_PORT_L11B_SMTO_T1_C			MTK_M4U_ID(SMI_L11B_ID, 26)
+#define M4U_PORT_L11B_SMTO_T4_C			MTK_M4U_ID(SMI_L11B_ID, 27)
+#define M4U_PORT_L11B_SMTO_T6_C			MTK_M4U_ID(SMI_L11B_ID, 28)
+#define M4U_PORT_L11B_DBGO_T1_C			MTK_M4U_ID(SMI_L11B_ID, 29)
+
+/* LARB 11C -- IMG-D */
+#define M4U_PORT_L11C_WPE_RDMA_0		MTK_M4U_ID(SMI_L11C_ID, 0)
+#define M4U_PORT_L11C_WPE_RDMA_1		MTK_M4U_ID(SMI_L11C_ID, 1)
+#define M4U_PORT_L11C_WPE_RDMA_4P_0		MTK_M4U_ID(SMI_L11C_ID, 2)
+#define M4U_PORT_L11C_WPE_RDMA_4P_1		MTK_M4U_ID(SMI_L11C_ID, 3)
+#define M4U_PORT_L11C_WPE_CQ0			MTK_M4U_ID(SMI_L11C_ID, 4)
+#define M4U_PORT_L11C_WPE_CQ1			MTK_M4U_ID(SMI_L11C_ID, 5)
+#define M4U_PORT_L11C_PIMGI_P1			MTK_M4U_ID(SMI_L11C_ID, 6)
+#define M4U_PORT_L11C_PIMGBI_P1			MTK_M4U_ID(SMI_L11C_ID, 7)
+#define M4U_PORT_L11C_PIMGCI_P1			MTK_M4U_ID(SMI_L11C_ID, 8)
+#define M4U_PORT_L11C_IMGI_T1_C			MTK_M4U_ID(SMI_L11C_ID, 9)
+#define M4U_PORT_L11C_IMGBI_T1_C		MTK_M4U_ID(SMI_L11C_ID, 10)
+#define M4U_PORT_L11C_IMGCI_T1_C		MTK_M4U_ID(SMI_L11C_ID, 11)
+#define M4U_PORT_L11C_SMTI_T1_C			MTK_M4U_ID(SMI_L11C_ID, 12)
+#define M4U_PORT_L11C_SMTI_T4_C			MTK_M4U_ID(SMI_L11C_ID, 13)
+#define M4U_PORT_L11C_SMTI_T6_C			MTK_M4U_ID(SMI_L11C_ID, 14)
+#define M4U_PORT_L11C_YUVO_T1_C			MTK_M4U_ID(SMI_L11C_ID, 15)
+#define M4U_PORT_L11C_YUVBO_T1_C		MTK_M4U_ID(SMI_L11C_ID, 16)
+#define M4U_PORT_L11C_YUVCO_T1_C		MTK_M4U_ID(SMI_L11C_ID, 17)
+#define M4U_PORT_L11C_WPE_WDMA_0		MTK_M4U_ID(SMI_L11C_ID, 18)
+#define M4U_PORT_L11C_WPE_WDMA_4P_0		MTK_M4U_ID(SMI_L11C_ID, 19)
+#define M4U_PORT_L11C_WROT_P1			MTK_M4U_ID(SMI_L11C_ID, 20)
+#define M4U_PORT_L11C_TCCSO_P1			MTK_M4U_ID(SMI_L11C_ID, 21)
+#define M4U_PORT_L11C_TCCSI_P1			MTK_M4U_ID(SMI_L11C_ID, 22)
+#define M4U_PORT_L11C_TIMGO_T1_C		MTK_M4U_ID(SMI_L11C_ID, 23)
+#define M4U_PORT_L11C_YUVO_T2_C			MTK_M4U_ID(SMI_L11C_ID, 24)
+#define M4U_PORT_L11C_YUVO_T5_C			MTK_M4U_ID(SMI_L11C_ID, 25)
+#define M4U_PORT_L11C_SMTO_T1_C			MTK_M4U_ID(SMI_L11C_ID, 26)
+#define M4U_PORT_L11C_SMTO_T4_C			MTK_M4U_ID(SMI_L11C_ID, 27)
+#define M4U_PORT_L11C_SMTO_T6_C			MTK_M4U_ID(SMI_L11C_ID, 28)
+#define M4U_PORT_L11C_DBGO_T1_C			MTK_M4U_ID(SMI_L11C_ID, 29)
+
+/* LARB 12 -- IPE */
+#define M4U_PORT_L12_FDVT_RDA_0			MTK_M4U_ID(SMI_L12_ID, 0)
+#define M4U_PORT_L12_FDVT_RDB_0			MTK_M4U_ID(SMI_L12_ID, 1)
+#define M4U_PORT_L12_FDVT_WRA_0			MTK_M4U_ID(SMI_L12_ID, 2)
+#define M4U_PORT_L12_FDVT_WRB_0			MTK_M4U_ID(SMI_L12_ID, 3)
+#define M4U_PORT_L12_ME_RDMA			MTK_M4U_ID(SMI_L12_ID, 4)
+#define M4U_PORT_L12_ME_WDMA			MTK_M4U_ID(SMI_L12_ID, 5)
+#define M4U_PORT_L12_DVS_RDMA			MTK_M4U_ID(SMI_L12_ID, 6)
+#define M4U_PORT_L12_DVS_WDMA			MTK_M4U_ID(SMI_L12_ID, 7)
+#define M4U_PORT_L12_DVP_RDMA			MTK_M4U_ID(SMI_L12_ID, 8)
+#define M4U_PORT_L12_DVP_WDMA			MTK_M4U_ID(SMI_L12_ID, 9)
+#define M4U_PORT_L12_FDVT_2ND_RDA_0		MTK_M4U_ID(SMI_L12_ID, 10)
+#define M4U_PORT_L12_FDVT_2ND_RDB_0		MTK_M4U_ID(SMI_L12_ID, 11)
+#define M4U_PORT_L12_FDVT_2ND_WRA_0		MTK_M4U_ID(SMI_L12_ID, 12)
+#define M4U_PORT_L12_FDVT_2ND_WRB_0		MTK_M4U_ID(SMI_L12_ID, 13)
+#define M4U_PORT_L12_DHZEI_E1			MTK_M4U_ID(SMI_L12_ID, 14)
+#define M4U_PORT_L12_DHZEO_E1			MTK_M4U_ID(SMI_L12_ID, 15)
+
+/* LARB 13 -- CAM-1 */
+#define M4U_PORT_L13_CAMSV_CQI_E1		MTK_M4U_ID(SMI_L13_ID, 0)
+#define M4U_PORT_L13_CAMSV_CQI_E2		MTK_M4U_ID(SMI_L13_ID, 1)
+#define M4U_PORT_L13_GCAMSV_A_IMGO_1		MTK_M4U_ID(SMI_L13_ID, 2)
+#define M4U_PORT_L13_GCAMSV_C_IMGO_1		MTK_M4U_ID(SMI_L13_ID, 3)
+#define M4U_PORT_L13_GCAMSV_A_IMGO_2		MTK_M4U_ID(SMI_L13_ID, 4)
+#define M4U_PORT_L13_GCAMSV_C_IMGO_2		MTK_M4U_ID(SMI_L13_ID, 5)
+#define M4U_PORT_L13_PDAI_A_0			MTK_M4U_ID(SMI_L13_ID, 6)
+#define M4U_PORT_L13_PDAI_A_1			MTK_M4U_ID(SMI_L13_ID, 7)
+#define M4U_PORT_L13_CAMSV_CQI_B_E1		MTK_M4U_ID(SMI_L13_ID, 8)
+#define M4U_PORT_L13_CAMSV_CQI_B_E2		MTK_M4U_ID(SMI_L13_ID, 9)
+#define M4U_PORT_L13_CAMSV_CQI_C_E1		MTK_M4U_ID(SMI_L13_ID, 10)
+#define M4U_PORT_L13_CAMSV_CQI_C_E2		MTK_M4U_ID(SMI_L13_ID, 11)
+#define M4U_PORT_L13_GCAMSV_E_IMGO_1		MTK_M4U_ID(SMI_L13_ID, 12)
+#define M4U_PORT_L13_GCAMSV_E_IMGO_2		MTK_M4U_ID(SMI_L13_ID, 13)
+#define M4U_PORT_L13_GCAMSV_A_UFEO_1		MTK_M4U_ID(SMI_L13_ID, 14)
+#define M4U_PORT_L13_GCAMSV_C_UFEO_1		MTK_M4U_ID(SMI_L13_ID, 15)
+#define M4U_PORT_L13_GCAMSV_A_UFEO_2		MTK_M4U_ID(SMI_L13_ID, 16)
+#define M4U_PORT_L13_GCAMSV_C_UFEO_2		MTK_M4U_ID(SMI_L13_ID, 17)
+#define M4U_PORT_L13_GCAMSV_E_UFEO_1		MTK_M4U_ID(SMI_L13_ID, 18)
+#define M4U_PORT_L13_GCAMSV_E_UFEO_2		MTK_M4U_ID(SMI_L13_ID, 19)
+#define M4U_PORT_L13_GCAMSV_G_IMGO_1		MTK_M4U_ID(SMI_L13_ID, 20)
+#define M4U_PORT_L13_GCAMSV_G_IMGO_2		MTK_M4U_ID(SMI_L13_ID, 21)
+#define M4U_PORT_L13_PDAO_A			MTK_M4U_ID(SMI_L13_ID, 22)
+#define M4U_PORT_L13_PDAO_C			MTK_M4U_ID(SMI_L13_ID, 23)
+
+/* LARB 14 -- CAM-1 */
+#define M4U_PORT_L14_GCAMSV_B_IMGO_1		MTK_M4U_ID(SMI_L14_ID, 0)
+#define M4U_PORT_L14_GCAMSV_B_IMGO_2		MTK_M4U_ID(SMI_L14_ID, 1)
+#define M4U_PORT_L14_SCAMSV_A_IMGO_1		MTK_M4U_ID(SMI_L14_ID, 2)
+#define M4U_PORT_L14_SCAMSV_A_IMGO_2		MTK_M4U_ID(SMI_L14_ID, 3)
+#define M4U_PORT_L14_SCAMSV_B_IMGO_1		MTK_M4U_ID(SMI_L14_ID, 4)
+#define M4U_PORT_L14_SCAMSV_B_IMGO_2		MTK_M4U_ID(SMI_L14_ID, 5)
+#define M4U_PORT_L14_PDAI_B_0			MTK_M4U_ID(SMI_L14_ID, 6)
+#define M4U_PORT_L14_PDAI_B_1			MTK_M4U_ID(SMI_L14_ID, 7)
+#define M4U_PORT_L14_GCAMSV_D_IMGO_1		MTK_M4U_ID(SMI_L14_ID, 8)
+#define M4U_PORT_L14_GCAMSV_D_IMGO_2		MTK_M4U_ID(SMI_L14_ID, 9)
+#define M4U_PORT_L14_GCAMSV_F_IMGO_1		MTK_M4U_ID(SMI_L14_ID, 10)
+#define M4U_PORT_L14_GCAMSV_F_IMGO_2		MTK_M4U_ID(SMI_L14_ID, 11)
+#define M4U_PORT_L14_GCAMSV_H_IMGO_1		MTK_M4U_ID(SMI_L14_ID, 12)
+#define M4U_PORT_L14_GCAMSV_H_IMGO_2		MTK_M4U_ID(SMI_L14_ID, 13)
+#define M4U_PORT_L14_GCAMSV_B_UFEO_1		MTK_M4U_ID(SMI_L14_ID, 14)
+#define M4U_PORT_L14_GCAMSV_B_UFEO_2		MTK_M4U_ID(SMI_L14_ID, 15)
+#define M4U_PORT_L14_GCAMSV_D_UFEO_1		MTK_M4U_ID(SMI_L14_ID, 16)
+#define M4U_PORT_L14_GCAMSV_D_UFEO_2		MTK_M4U_ID(SMI_L14_ID, 17)
+#define M4U_PORT_L14_PDAO_B			MTK_M4U_ID(SMI_L14_ID, 18)
+#define M4U_PORT_L14_IPUI			MTK_M4U_ID(SMI_L14_ID, 19)
+#define M4U_PORT_L14_IPUO			MTK_M4U_ID(SMI_L14_ID, 20)
+#define M4U_PORT_L14_IPU3O			MTK_M4U_ID(SMI_L14_ID, 21)
+#define M4U_PORT_L14_FAKE			MTK_M4U_ID(SMI_L14_ID, 22)
+
+/* LARB 15 -- IMG-D */
+#define M4U_PORT_L15_VIPI_D1			MTK_M4U_ID(SMI_L15_ID, 0)
+#define M4U_PORT_L15_VIPBI_D1			MTK_M4U_ID(SMI_L15_ID, 1)
+#define M4U_PORT_L15_SMTI_D6			MTK_M4U_ID(SMI_L15_ID, 2)
+#define M4U_PORT_L15_TNCSTI_D1			MTK_M4U_ID(SMI_L15_ID, 3)
+#define M4U_PORT_L15_TNCSTI_D4			MTK_M4U_ID(SMI_L15_ID, 4)
+#define M4U_PORT_L15_SMTI_D4			MTK_M4U_ID(SMI_L15_ID, 5)
+#define M4U_PORT_L15_IMG3O_D1			MTK_M4U_ID(SMI_L15_ID, 6)
+#define M4U_PORT_L15_IMG3BO_D1			MTK_M4U_ID(SMI_L15_ID, 7)
+#define M4U_PORT_L15_IMG3CO_D1			MTK_M4U_ID(SMI_L15_ID, 8)
+#define M4U_PORT_L15_IMG2O_D1			MTK_M4U_ID(SMI_L15_ID, 9)
+#define M4U_PORT_L15_SMTI_D9			MTK_M4U_ID(SMI_L15_ID, 10)
+#define M4U_PORT_L15_SMTO_D4			MTK_M4U_ID(SMI_L15_ID, 11)
+#define M4U_PORT_L15_FEO_D1			MTK_M4U_ID(SMI_L15_ID, 12)
+#define M4U_PORT_L15_TNCSO_D1			MTK_M4U_ID(SMI_L15_ID, 13)
+#define M4U_PORT_L15_TNCSTO_D1			MTK_M4U_ID(SMI_L15_ID, 14)
+#define M4U_PORT_L15_SMTO_D6			MTK_M4U_ID(SMI_L15_ID, 15)
+#define M4U_PORT_L15_SMTO_D9			MTK_M4U_ID(SMI_L15_ID, 16)
+#define M4U_PORT_L15_TNCO_D1			MTK_M4U_ID(SMI_L15_ID, 17)
+#define M4U_PORT_L15_TNCO_D1_N			MTK_M4U_ID(SMI_L15_ID, 18)
+
+/* LARB 16A -- CAM */
+#define M4U_PORT_L16A_IMGO_R1			MTK_M4U_ID(SMI_L16A_ID, 0)
+#define M4U_PORT_L16A_CQI_R1			MTK_M4U_ID(SMI_L16A_ID, 1)
+#define M4U_PORT_L16A_CQI_R2			MTK_M4U_ID(SMI_L16A_ID, 2)
+#define M4U_PORT_L16A_BPCI_R1			MTK_M4U_ID(SMI_L16A_ID, 3)
+#define M4U_PORT_L16A_LSCI_R1			MTK_M4U_ID(SMI_L16A_ID, 4)
+#define M4U_PORT_L16A_RAWI_R2			MTK_M4U_ID(SMI_L16A_ID, 5)
+#define M4U_PORT_L16A_RAWI_R3			MTK_M4U_ID(SMI_L16A_ID, 6)
+#define M4U_PORT_L16A_UFDI_R2			MTK_M4U_ID(SMI_L16A_ID, 7)
+#define M4U_PORT_L16A_UFDI_R3			MTK_M4U_ID(SMI_L16A_ID, 8)
+#define M4U_PORT_L16A_RAWI_R4			MTK_M4U_ID(SMI_L16A_ID, 9)
+#define M4U_PORT_L16A_RAWI_R5			MTK_M4U_ID(SMI_L16A_ID, 10)
+#define M4U_PORT_L16A_AAI_R1			MTK_M4U_ID(SMI_L16A_ID, 11)
+#define M4U_PORT_L16A_UFDI_R5			MTK_M4U_ID(SMI_L16A_ID, 12)
+#define M4U_PORT_L16A_FHO_R1			MTK_M4U_ID(SMI_L16A_ID, 13)
+#define M4U_PORT_L16A_AAO_R1			MTK_M4U_ID(SMI_L16A_ID, 14)
+#define M4U_PORT_L16A_TSFSO_R1			MTK_M4U_ID(SMI_L16A_ID, 15)
+#define M4U_PORT_L16A_FLKO_R1			MTK_M4U_ID(SMI_L16A_ID, 16)
+
+/* LARB 16B -- CAM */
+#define M4U_PORT_L16B_IMGO_R1			MTK_M4U_ID(SMI_L16B_ID, 0)
+#define M4U_PORT_L16B_CQI_R1			MTK_M4U_ID(SMI_L16B_ID, 1)
+#define M4U_PORT_L16B_CQI_R2			MTK_M4U_ID(SMI_L16B_ID, 2)
+#define M4U_PORT_L16B_BPCI_R1			MTK_M4U_ID(SMI_L16B_ID, 3)
+#define M4U_PORT_L16B_LSCI_R1			MTK_M4U_ID(SMI_L16B_ID, 4)
+#define M4U_PORT_L16B_RAWI_R2			MTK_M4U_ID(SMI_L16B_ID, 5)
+#define M4U_PORT_L16B_RAWI_R3			MTK_M4U_ID(SMI_L16B_ID, 6)
+#define M4U_PORT_L16B_UFDI_R2			MTK_M4U_ID(SMI_L16B_ID, 7)
+#define M4U_PORT_L16B_UFDI_R3			MTK_M4U_ID(SMI_L16B_ID, 8)
+#define M4U_PORT_L16B_RAWI_R4			MTK_M4U_ID(SMI_L16B_ID, 9)
+#define M4U_PORT_L16B_RAWI_R5			MTK_M4U_ID(SMI_L16B_ID, 10)
+#define M4U_PORT_L16B_AAI_R1			MTK_M4U_ID(SMI_L16B_ID, 11)
+#define M4U_PORT_L16B_UFDI_R5			MTK_M4U_ID(SMI_L16B_ID, 12)
+#define M4U_PORT_L16B_FHO_R1			MTK_M4U_ID(SMI_L16B_ID, 13)
+#define M4U_PORT_L16B_AAO_R1			MTK_M4U_ID(SMI_L16B_ID, 14)
+#define M4U_PORT_L16B_TSFSO_R1			MTK_M4U_ID(SMI_L16B_ID, 15)
+#define M4U_PORT_L16B_FLKO_R1			MTK_M4U_ID(SMI_L16B_ID, 16)
+
+/* LARB 17A -- CAM */
+#define M4U_PORT_L17A_YUVO_R1			MTK_M4U_ID(SMI_L17A_ID, 0)
+#define M4U_PORT_L17A_YUVO_R3			MTK_M4U_ID(SMI_L17A_ID, 1)
+#define M4U_PORT_L17A_YUVCO_R1			MTK_M4U_ID(SMI_L17A_ID, 2)
+#define M4U_PORT_L17A_YUVO_R2			MTK_M4U_ID(SMI_L17A_ID, 3)
+#define M4U_PORT_L17A_RZH1N2TO_R1		MTK_M4U_ID(SMI_L17A_ID, 4)
+#define M4U_PORT_L17A_DRZS4NO_R1		MTK_M4U_ID(SMI_L17A_ID, 5)
+#define M4U_PORT_L17A_TNCSO_R1			MTK_M4U_ID(SMI_L17A_ID, 6)
+
+/* LARB 17B -- CAM */
+#define M4U_PORT_L17B_YUVO_R1			MTK_M4U_ID(SMI_L17B_ID, 0)
+#define M4U_PORT_L17B_YUVO_R3			MTK_M4U_ID(SMI_L17B_ID, 1)
+#define M4U_PORT_L17B_YUVCO_R1			MTK_M4U_ID(SMI_L17B_ID, 2)
+#define M4U_PORT_L17B_YUVO_R2			MTK_M4U_ID(SMI_L17B_ID, 3)
+#define M4U_PORT_L17B_RZH1N2TO_R1		MTK_M4U_ID(SMI_L17B_ID, 4)
+#define M4U_PORT_L17B_DRZS4NO_R1		MTK_M4U_ID(SMI_L17B_ID, 5)
+#define M4U_PORT_L17B_TNCSO_R1			MTK_M4U_ID(SMI_L17B_ID, 6)
+
+/* LARB 19 -- VENC */
+#define M4U_PORT_L19_VENC_RCPU			MTK_M4U_ID(SMI_L19_ID, 0)
+#define M4U_PORT_L19_VENC_REC			MTK_M4U_ID(SMI_L19_ID, 1)
+#define M4U_PORT_L19_VENC_BSDMA			MTK_M4U_ID(SMI_L19_ID, 2)
+#define M4U_PORT_L19_VENC_SV_COMV		MTK_M4U_ID(SMI_L19_ID, 3)
+#define M4U_PORT_L19_VENC_RD_COMV		MTK_M4U_ID(SMI_L19_ID, 4)
+#define M4U_PORT_L19_VENC_NBM_RDMA		MTK_M4U_ID(SMI_L19_ID, 5)
+#define M4U_PORT_L19_VENC_NBM_RDMA_LITE		MTK_M4U_ID(SMI_L19_ID, 6)
+#define M4U_PORT_L19_JPGENC_Y_RDMA		MTK_M4U_ID(SMI_L19_ID, 7)
+#define M4U_PORT_L19_JPGENC_C_RDMA		MTK_M4U_ID(SMI_L19_ID, 8)
+#define M4U_PORT_L19_JPGENC_Q_TABLE		MTK_M4U_ID(SMI_L19_ID, 9)
+#define M4U_PORT_L19_VENC_SUB_W_LUMA		MTK_M4U_ID(SMI_L19_ID, 10)
+#define M4U_PORT_L19_VENC_FCS_NBM_RDMA		MTK_M4U_ID(SMI_L19_ID, 11)
+#define M4U_PORT_L19_JPGENC_BSDMA		MTK_M4U_ID(SMI_L19_ID, 12)
+#define M4U_PORT_L19_JPGDEC_WDMA_0		MTK_M4U_ID(SMI_L19_ID, 13)
+#define M4U_PORT_L19_JPGDEC_BSDMA_0		MTK_M4U_ID(SMI_L19_ID, 14)
+#define M4U_PORT_L19_VENC_NBM_WDMA		MTK_M4U_ID(SMI_L19_ID, 15)
+#define M4U_PORT_L19_VENC_NBM_WDMA_LITE		MTK_M4U_ID(SMI_L19_ID, 16)
+#define M4U_PORT_L19_VENC_FCS_NBM_WDMA		MTK_M4U_ID(SMI_L19_ID, 17)
+#define M4U_PORT_L19_JPGDEC_WDMA_1		MTK_M4U_ID(SMI_L19_ID, 18)
+#define M4U_PORT_L19_JPGDEC_BSDMA_1		MTK_M4U_ID(SMI_L19_ID, 19)
+#define M4U_PORT_L19_JPGDEC_HUFF_OFFSET_1	MTK_M4U_ID(SMI_L19_ID, 20)
+#define M4U_PORT_L19_JPGDEC_HUFF_OFFSET_0	MTK_M4U_ID(SMI_L19_ID, 21)
+#define M4U_PORT_L19_VENC_CUR_LUMA		MTK_M4U_ID(SMI_L19_ID, 22)
+#define M4U_PORT_L19_VENC_CUR_CHROMA		MTK_M4U_ID(SMI_L19_ID, 23)
+#define M4U_PORT_L19_VENC_REF_LUMA		MTK_M4U_ID(SMI_L19_ID, 24)
+#define M4U_PORT_L19_VENC_REF_CHROMA		MTK_M4U_ID(SMI_L19_ID, 25)
+#define M4U_PORT_L19_VENC_SUB_R_LUMA		MTK_M4U_ID(SMI_L19_ID, 26)
+
+/* LARB 21 -- VDEC-CORE0 */
+#define M4U_PORT_L21_HW_VDEC_MC_EXT		MTK_M4U_ID(SMI_L21_ID, 0)
+#define M4U_PORT_L21_HW_VDEC_UFO_EXT		MTK_M4U_ID(SMI_L21_ID, 1)
+#define M4U_PORT_L21_HW_VDEC_PP_EXT		MTK_M4U_ID(SMI_L21_ID, 2)
+#define M4U_PORT_L21_HW_VDEC_PRED_RD_EXT	MTK_M4U_ID(SMI_L21_ID, 3)
+#define M4U_PORT_L21_HW_VDEC_PRED_WR_EXT	MTK_M4U_ID(SMI_L21_ID, 4)
+#define M4U_PORT_L21_HW_VDEC_PPWRAP_EXT		MTK_M4U_ID(SMI_L21_ID, 5)
+#define M4U_PORT_L21_HW_VDEC_TILE_EXT		MTK_M4U_ID(SMI_L21_ID, 6)
+#define M4U_PORT_L21_HW_VDEC_VLD_EXT		MTK_M4U_ID(SMI_L21_ID, 7)
+#define M4U_PORT_L21_HW_VDEC_VLD2_EXT		MTK_M4U_ID(SMI_L21_ID, 8)
+#define M4U_PORT_L21_HW_VDEC_AVC_MV_EXT		MTK_M4U_ID(SMI_L21_ID, 9)
+#define M4U_PORT_L21_HW_VDEC_UFO_EXT_C		MTK_M4U_ID(SMI_L21_ID, 10)
+
+/* LARB 23 -- VDEC-SOC */
+#define M4U_PORT_L23_HW_VDEC_LAT0_VLD_EXT	MTK_M4U_ID(SMI_L23_ID, 0)
+#define M4U_PORT_L23_HW_VDEC_LAT0_VLD2_EXT	MTK_M4U_ID(SMI_L23_ID, 1)
+#define M4U_PORT_L23_HW_VDEC_LAT0_AVC_MV_EXT	MTK_M4U_ID(SMI_L23_ID, 2)
+#define M4U_PORT_L23_HW_VDEC_LAT0_PRED_RD_EXT	MTK_M4U_ID(SMI_L23_ID, 3)
+#define M4U_PORT_L23_HW_VDEC_LAT0_TILE_EXT	MTK_M4U_ID(SMI_L23_ID, 4)
+#define M4U_PORT_L23_HW_VDEC_LAT0_WDMA_EXT	MTK_M4U_ID(SMI_L23_ID, 5)
+#define M4U_PORT_L23_HW_VDEC_UFO_ENC_EXT	MTK_M4U_ID(SMI_L23_ID, 6)
+#define M4U_PORT_L23_HW_VDEC_UFO_ENC_EXT_C	MTK_M4U_ID(SMI_L23_ID, 7)
+#define M4U_PORT_L23_HW_VDEC_MC_EXT_C		MTK_M4U_ID(SMI_L23_ID, 8)
+
+/* LARB 27 -- CCU */
+#define M4U_PORT_L27_CCUI			MTK_M4U_ID(SMI_L27_ID, 0)
+#define M4U_PORT_L27_CCUO			MTK_M4U_ID(SMI_L27_ID, 1)
+#define M4U_PORT_L27_CCUI2			MTK_M4U_ID(SMI_L27_ID, 2)
+#define M4U_PORT_L27_CCUO2			MTK_M4U_ID(SMI_L27_ID, 3)
+
+/* LARB 28 -- AXI-CCU */
+#define M4U_PORT_L28_CCU_AXI_0			MTK_M4U_ID(SMI_L28_ID, 0)
+
+/* infra/peri */
+#define IFR_IOMMU_PORT_PCIE_0			MTK_IFAIOMMU_PERI_ID(0)
+
+#endif
-- 
2.25.1



From chengci.xu at mediatek.com  Mon Dec  5 01:50:00 2022
From: chengci.xu at mediatek.com (Chengci.Xu)
Date: Mon, 5 Dec 2022 17:50:00 +0800
Subject: [PATCH v5 3/4] iommu/mediatek: Add enable IOMMU SMC command for INFRA master
In-Reply-To: <20221205095001.31918-1-chengci.xu@mediatek.com>
References: <20221205095001.31918-1-chengci.xu@mediatek.com>
Message-ID: <20221205095001.31918-4-chengci.xu@mediatek.com>

The register which can enable IOMMU for INFRA master should be setted
in secure world for security concerns. Therefore, we add a SMC command
for INFRA master to enable/disable INFRA IOMMU in ATF. This function is
prepared for MT8188.

Signed-off-by: Chengci.Xu <chengci.xu at mediatek.com>
Reviewed-by: Yong Wu <yong.wu at mediatek.com>
---
 drivers/iommu/mtk_iommu.c  | 32 ++++++++++++++++++++++----------
 include/soc/mediatek/smi.h |  1 +
 2 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index 7cf9a9c32fb1..5d70c50b9068 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -3,6 +3,7 @@
  * Copyright (c) 2015-2016 MediaTek Inc.
  * Author: Yong Wu <yong.wu at mediatek.com>
  */
+#include <linux/arm-smccc.h>
 #include <linux/bitfield.h>
 #include <linux/bug.h>
 #include <linux/clk.h>
@@ -28,6 +29,7 @@
 #include <linux/slab.h>
 #include <linux/spinlock.h>
 #include <linux/soc/mediatek/infracfg.h>
+#include <linux/soc/mediatek/mtk_sip_svc.h>
 #include <asm/barrier.h>
 #include <soc/mediatek/smi.h>
 
@@ -144,6 +146,7 @@
 #define PGTABLE_PA_35_EN		BIT(17)
 #define TF_PORT_TO_ADDR_MT8173		BIT(18)
 #define INT_ID_PORT_WIDTH_6		BIT(19)
+#define CFG_IFA_MASTER_IN_ATF		BIT(20)
 
 #define MTK_IOMMU_HAS_FLAG_MASK(pdata, _x, mask)	\
 				((((pdata)->flags) & (mask)) == (_x))
@@ -546,6 +549,7 @@ static int mtk_iommu_config(struct mtk_iommu_data *data, struct device *dev,
 	struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
 	const struct mtk_iommu_iova_region *region;
 	unsigned long portid_msk = 0;
+	struct arm_smccc_res res;
 	int i, ret = 0;
 
 	for (i = 0; i < fwspec->num_ids; ++i) {
@@ -571,17 +575,24 @@ static int mtk_iommu_config(struct mtk_iommu_data *data, struct device *dev,
 		else
 			larb_mmu->mmu &= ~portid_msk;
 	} else if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_INFRA)) {
-		/* PCI dev has only one output id, enable the next writing bit for PCIe */
-		if (dev_is_pci(dev)) {
-			if (fwspec->num_ids != 1) {
-				dev_err(dev, "PCI dev can only have one port.\n");
-				return -ENODEV;
+		if (MTK_IOMMU_HAS_FLAG(data->plat_data, CFG_IFA_MASTER_IN_ATF)) {
+			arm_smccc_smc(MTK_SIP_KERNEL_IOMMU_CONTROL,
+				      IOMMU_ATF_CMD_CONFIG_INFRA_IOMMU,
+				      portid_msk, enable, 0, 0, 0, 0, &res);
+			ret = res.a0;
+		} else {
+			/* PCI dev has only one output id, enable the next writing bit for PCIe */
+			if (dev_is_pci(dev)) {
+				if (fwspec->num_ids != 1) {
+					dev_err(dev, "PCI dev can only have one port.\n");
+					return -ENODEV;
+				}
+				portid_msk |= BIT(portid + 1);
 			}
-			portid_msk |= BIT(portid + 1);
-		}
 
-		ret = regmap_update_bits(data->pericfg, PERICFG_IOMMU_1,
-					 (u32)portid_msk, enable ? (u32)portid_msk : 0);
+			ret = regmap_update_bits(data->pericfg, PERICFG_IOMMU_1,
+						 (u32)portid_msk, enable ? (u32)portid_msk : 0);
+		}
 		if (ret)
 			dev_err(dev, "%s iommu(%s) inframaster 0x%lx fail(%d).\n",
 				enable ? "enable" : "disable",
@@ -1236,7 +1247,8 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 			dev_err_probe(dev, ret, "mm dts parse fail\n");
 			goto out_runtime_disable;
 		}
-	} else if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_INFRA)) {
+	} else if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_INFRA) &&
+		   !MTK_IOMMU_HAS_FLAG(data->plat_data, CFG_IFA_MASTER_IN_ATF)) {
 		p = data->plat_data->pericfg_comp_str;
 		data->pericfg = syscon_regmap_lookup_by_compatible(p);
 		if (IS_ERR(data->pericfg)) {
diff --git a/include/soc/mediatek/smi.h b/include/soc/mediatek/smi.h
index dfd8efca5e60..000eb1cf68b7 100644
--- a/include/soc/mediatek/smi.h
+++ b/include/soc/mediatek/smi.h
@@ -13,6 +13,7 @@
 
 enum iommu_atf_cmd {
 	IOMMU_ATF_CMD_CONFIG_SMI_LARB,		/* For mm master to en/disable iommu */
+	IOMMU_ATF_CMD_CONFIG_INFRA_IOMMU,	/* For infra master to enable iommu */
 	IOMMU_ATF_CMD_MAX,
 };
 
-- 
2.25.1



From chengci.xu at mediatek.com  Mon Dec  5 01:50:01 2022
From: chengci.xu at mediatek.com (Chengci.Xu)
Date: Mon, 5 Dec 2022 17:50:01 +0800
Subject: [PATCH v5 4/4] iommu/mediatek: Add MT8188 IOMMU Support
In-Reply-To: <20221205095001.31918-1-chengci.xu@mediatek.com>
References: <20221205095001.31918-1-chengci.xu@mediatek.com>
Message-ID: <20221205095001.31918-5-chengci.xu@mediatek.com>

MT8188 has 3 IOMMU, containing 2 MM IOMMUs, one is for vdo, the other
is for vpp. and 1 INFRA IOMMU.

Signed-off-by: Chengci.Xu <chengci.xu at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Yong Wu <yong.wu at mediatek.com>
---
 drivers/iommu/mtk_iommu.c | 49 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index 5d70c50b9068..bdd8ff884ca7 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -171,6 +171,7 @@ enum mtk_iommu_plat {
 	M4U_MT8173,
 	M4U_MT8183,
 	M4U_MT8186,
+	M4U_MT8188,
 	M4U_MT8192,
 	M4U_MT8195,
 	M4U_MT8365,
@@ -1488,6 +1489,51 @@ static const struct mtk_iommu_plat_data mt8186_data_mm = {
 	.iova_region_nr = ARRAY_SIZE(mt8192_multi_dom),
 };
 
+static const struct mtk_iommu_plat_data mt8188_data_infra = {
+	.m4u_plat	  = M4U_MT8188,
+	.flags            = WR_THROT_EN | DCM_DISABLE | STD_AXI_MODE | PM_CLK_AO |
+			    MTK_IOMMU_TYPE_INFRA | IFA_IOMMU_PCIE_SUPPORT |
+			    PGTABLE_PA_35_EN | CFG_IFA_MASTER_IN_ATF,
+	.inv_sel_reg      = REG_MMU_INV_SEL_GEN2,
+	.banks_num	  = 1,
+	.banks_enable     = {true},
+	.iova_region      = single_domain,
+	.iova_region_nr   = ARRAY_SIZE(single_domain),
+};
+
+static const struct mtk_iommu_plat_data mt8188_data_vdo = {
+	.m4u_plat	= M4U_MT8188,
+	.flags          = HAS_BCLK | HAS_SUB_COMM_3BITS | OUT_ORDER_WR_EN |
+			  WR_THROT_EN | IOVA_34_EN | SHARE_PGTABLE |
+			  PGTABLE_PA_35_EN | MTK_IOMMU_TYPE_MM,
+	.hw_list        = &m4ulist,
+	.inv_sel_reg    = REG_MMU_INV_SEL_GEN2,
+	.banks_num      = 1,
+	.banks_enable   = {true},
+	.iova_region	= mt8192_multi_dom,
+	.iova_region_nr	= ARRAY_SIZE(mt8192_multi_dom),
+	.larbid_remap   = {{2}, {0}, {21}, {0}, {19}, {9, 10,
+			   11 /* 11a */, 25 /* 11c */},
+			   {13, 0, 29 /* 16b */, 30 /* 17b */, 0}, {5}},
+};
+
+static const struct mtk_iommu_plat_data mt8188_data_vpp = {
+	.m4u_plat	= M4U_MT8188,
+	.flags          = HAS_BCLK | HAS_SUB_COMM_3BITS | OUT_ORDER_WR_EN |
+			  WR_THROT_EN | IOVA_34_EN | SHARE_PGTABLE |
+			  PGTABLE_PA_35_EN | MTK_IOMMU_TYPE_MM,
+	.hw_list        = &m4ulist,
+	.inv_sel_reg    = REG_MMU_INV_SEL_GEN2,
+	.banks_num      = 1,
+	.banks_enable   = {true},
+	.iova_region	= mt8192_multi_dom,
+	.iova_region_nr	= ARRAY_SIZE(mt8192_multi_dom),
+	.larbid_remap   = {{1}, {3}, {23}, {7}, {MTK_INVALID_LARBID},
+			   {12, 15, 24 /* 11b */}, {14, MTK_INVALID_LARBID,
+			   16 /* 16a */, 17 /* 17a */, MTK_INVALID_LARBID,
+			   27, 28 /* ccu0 */, MTK_INVALID_LARBID}, {4, 6}},
+};
+
 static const struct mtk_iommu_plat_data mt8192_data = {
 	.m4u_plat       = M4U_MT8192,
 	.flags          = HAS_BCLK | HAS_SUB_COMM_2BITS | OUT_ORDER_WR_EN |
@@ -1567,6 +1613,9 @@ static const struct of_device_id mtk_iommu_of_ids[] = {
 	{ .compatible = "mediatek,mt8173-m4u", .data = &mt8173_data},
 	{ .compatible = "mediatek,mt8183-m4u", .data = &mt8183_data},
 	{ .compatible = "mediatek,mt8186-iommu-mm",    .data = &mt8186_data_mm}, /* mm: m4u */
+	{ .compatible = "mediatek,mt8188-iommu-infra", .data = &mt8188_data_infra},
+	{ .compatible = "mediatek,mt8188-iommu-vdo",   .data = &mt8188_data_vdo},
+	{ .compatible = "mediatek,mt8188-iommu-vpp",   .data = &mt8188_data_vpp},
 	{ .compatible = "mediatek,mt8192-m4u", .data = &mt8192_data},
 	{ .compatible = "mediatek,mt8195-iommu-infra", .data = &mt8195_data_infra},
 	{ .compatible = "mediatek,mt8195-iommu-vdo",   .data = &mt8195_data_vdo},
-- 
2.25.1



From chengci.xu at mediatek.com  Mon Dec  5 01:49:59 2022
From: chengci.xu at mediatek.com (Chengci.Xu)
Date: Mon, 5 Dec 2022 17:49:59 +0800
Subject: [PATCH v5 2/4] iommu/mediatek: Adjust mtk_iommu_config flow
In-Reply-To: <20221205095001.31918-1-chengci.xu@mediatek.com>
References: <20221205095001.31918-1-chengci.xu@mediatek.com>
Message-ID: <20221205095001.31918-3-chengci.xu@mediatek.com>

For reduce indention without functional change, prepare for MT8188.
If there are many port in a same larb, current flow will update
larb_mmu->mmu or update INFRA register for too many times.
So we save all port to portid_msk in the front of mtk_iommu_config(),
and then update only once for IOMMU configure. By this modification,
we can prevent MT8188 from sending to many SMC calls, avoiding enter
ATF for each port.

Signed-off-by: Chengci.Xu <chengci.xu at mediatek.com>
---
 drivers/iommu/mtk_iommu.c | 58 +++++++++++++++++++++------------------
 1 file changed, 32 insertions(+), 26 deletions(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index 5dc1009a19ed..7cf9a9c32fb1 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -545,41 +545,47 @@ static int mtk_iommu_config(struct mtk_iommu_data *data, struct device *dev,
 	unsigned int                 larbid, portid;
 	struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
 	const struct mtk_iommu_iova_region *region;
-	u32 peri_mmuen, peri_mmuen_msk;
+	unsigned long portid_msk = 0;
 	int i, ret = 0;
 
 	for (i = 0; i < fwspec->num_ids; ++i) {
-		larbid = MTK_M4U_TO_LARB(fwspec->ids[i]);
 		portid = MTK_M4U_TO_PORT(fwspec->ids[i]);
+		portid_msk |= BIT(portid);
+	}
 
-		if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_MM)) {
-			larb_mmu = &data->larb_imu[larbid];
+	if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_MM)) {
+		/* All ports should be in the same larb. just use 0 here */
+		larbid = MTK_M4U_TO_LARB(fwspec->ids[0]);
+		larb_mmu = &data->larb_imu[larbid];
+		region = data->plat_data->iova_region + regionid;
 
-			region = data->plat_data->iova_region + regionid;
+		for_each_set_bit(portid, &portid_msk, 32)
 			larb_mmu->bank[portid] = upper_32_bits(region->iova_base);
 
-			dev_dbg(dev, "%s iommu for larb(%s) port %d region %d rgn-bank %d.\n",
-				enable ? "enable" : "disable", dev_name(larb_mmu->dev),
-				portid, regionid, larb_mmu->bank[portid]);
-
-			if (enable)
-				larb_mmu->mmu |= MTK_SMI_MMU_EN(portid);
-			else
-				larb_mmu->mmu &= ~MTK_SMI_MMU_EN(portid);
-		} else if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_INFRA)) {
-			peri_mmuen_msk = BIT(portid);
-			/* PCI dev has only one output id, enable the next writing bit for PCIe */
-			if (dev_is_pci(dev))
-				peri_mmuen_msk |= BIT(portid + 1);
-
-			peri_mmuen = enable ? peri_mmuen_msk : 0;
-			ret = regmap_update_bits(data->pericfg, PERICFG_IOMMU_1,
-						 peri_mmuen_msk, peri_mmuen);
-			if (ret)
-				dev_err(dev, "%s iommu(%s) inframaster 0x%x fail(%d).\n",
-					enable ? "enable" : "disable",
-					dev_name(data->dev), peri_mmuen_msk, ret);
+		dev_dbg(dev, "%s iommu for larb(%s) port 0x%lx region %d rgn-bank %d.\n",
+			enable ? "enable" : "disable", dev_name(larb_mmu->dev),
+			portid_msk, regionid, upper_32_bits(region->iova_base));
+
+		if (enable)
+			larb_mmu->mmu |= portid_msk;
+		else
+			larb_mmu->mmu &= ~portid_msk;
+	} else if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_INFRA)) {
+		/* PCI dev has only one output id, enable the next writing bit for PCIe */
+		if (dev_is_pci(dev)) {
+			if (fwspec->num_ids != 1) {
+				dev_err(dev, "PCI dev can only have one port.\n");
+				return -ENODEV;
+			}
+			portid_msk |= BIT(portid + 1);
 		}
+
+		ret = regmap_update_bits(data->pericfg, PERICFG_IOMMU_1,
+					 (u32)portid_msk, enable ? (u32)portid_msk : 0);
+		if (ret)
+			dev_err(dev, "%s iommu(%s) inframaster 0x%lx fail(%d).\n",
+				enable ? "enable" : "disable",
+				dev_name(data->dev), portid_msk, ret);
 	}
 	return ret;
 }
-- 
2.25.1



From ruanjinjie at huawei.com  Mon Dec  5 01:51:15 2022
From: ruanjinjie at huawei.com (ruanjinjie)
Date: Mon, 5 Dec 2022 17:51:15 +0800
Subject: [PATCH] drm/mediatek: mtk_drm_crtc: Add checks for devm_kcalloc
Message-ID: <20221205095115.2905090-1-ruanjinjie@huawei.com>

As the devm_kcalloc may return NULL, the return value needs to be checked
to avoid NULL poineter dereference.

Fixes: 31c5558dae05 ("drm/mediatek: Refactor plane init")
Signed-off-by: ruanjinjie <ruanjinjie at huawei.com>
---
 drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
index 112615817dcb..5071f1263216 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
@@ -945,6 +945,8 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
 
 	mtk_crtc->planes = devm_kcalloc(dev, num_comp_planes,
 					sizeof(struct drm_plane), GFP_KERNEL);
+	if (!mtk_crtc->planes)
+		return -ENOMEM;
 
 	for (i = 0; i < mtk_crtc->ddp_comp_nr; i++) {
 		ret = mtk_drm_crtc_init_comp_planes(drm_dev, mtk_crtc, i,
-- 
2.25.1



From wangyufen at huawei.com  Mon Dec  5 01:56:28 2022
From: wangyufen at huawei.com (Wang Yufen)
Date: Mon, 5 Dec 2022 17:56:28 +0800
Subject: [PATCH] ASoC: mediatek: mt8183: fix refcount leak in mt8183_mt6358_ts3a227_max98357_dev_probe()
Message-ID: <1670234188-23596-1-git-send-email-wangyufen@huawei.com>

The node returned by of_parse_phandle() with refcount incremented,
of_node_put() needs be called when finish using it. So add it in the
error path in mt8183_mt6358_ts3a227_max98357_dev_probe().

Fixes: 11c0269017b2 ("ASoC: Mediatek: MT8183: Add machine driver with TS3A227")
Signed-off-by: Wang Yufen <wangyufen at huawei.com>
---
 sound/soc/mediatek/mt8183/mt8183-mt6358-ts3a227-max98357.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/sound/soc/mediatek/mt8183/mt8183-mt6358-ts3a227-max98357.c b/sound/soc/mediatek/mt8183/mt8183-mt6358-ts3a227-max98357.c
index a860852..48c14be 100644
--- a/sound/soc/mediatek/mt8183/mt8183-mt6358-ts3a227-max98357.c
+++ b/sound/soc/mediatek/mt8183/mt8183-mt6358-ts3a227-max98357.c
@@ -677,8 +677,10 @@ static int mt8183_i2s2_init(struct snd_soc_pcm_runtime *rtd)
 	}
 
 	card = (struct snd_soc_card *)of_device_get_match_data(&pdev->dev);
-	if (!card)
+	if (!card) {
+		of_node_put(platform_node);
 		return -EINVAL;
+	}
 	card->dev = &pdev->dev;
 
 	ec_codec = of_parse_phandle(pdev->dev.of_node, "mediatek,ec-codec", 0);
@@ -767,8 +769,10 @@ static int mt8183_i2s2_init(struct snd_soc_pcm_runtime *rtd)
 	}
 
 	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
-	if (!priv)
-		return -ENOMEM;
+	if (!priv) {
+		ret = -ENOMEM;
+		goto out;
+	}
 
 	snd_soc_card_set_drvdata(card, priv);
 
@@ -776,7 +780,8 @@ static int mt8183_i2s2_init(struct snd_soc_pcm_runtime *rtd)
 	if (IS_ERR(priv->pinctrl)) {
 		dev_err(&pdev->dev, "%s devm_pinctrl_get failed\n",
 			__func__);
-		return PTR_ERR(priv->pinctrl);
+		ret = PTR_ERR(priv->pinctrl);
+		goto out;
 	}
 
 	for (i = 0; i < PIN_STATE_MAX; i++) {
@@ -809,6 +814,7 @@ static int mt8183_i2s2_init(struct snd_soc_pcm_runtime *rtd)
 
 	ret = devm_snd_soc_register_card(&pdev->dev, card);
 
+out:
 	of_node_put(platform_node);
 	of_node_put(ec_codec);
 	of_node_put(hdmi_codec);
-- 
1.8.3.1



From wangyufen at huawei.com  Mon Dec  5 02:04:24 2022
From: wangyufen at huawei.com (Wang Yufen)
Date: Mon, 5 Dec 2022 18:04:24 +0800
Subject: [PATCH] ASoC: mediatek: mt8173-rt5650-rt5514: fix refcount leak in mt8173_rt5650_rt5514_dev_probe()
Message-ID: <1670234664-24246-1-git-send-email-wangyufen@huawei.com>

The node returned by of_parse_phandle() with refcount incremented,
of_node_put() needs be called when finish using it. So add it in the
error path in mt8173_rt5650_rt5514_dev_probe().

Fixes: 0d1d7a664288 ("ASoC: mediatek: Refine mt8173 driver and change config option")
Signed-off-by: Wang Yufen <wangyufen at huawei.com>
---
 sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c b/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c
index 12f40c8..f803f12 100644
--- a/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c
+++ b/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c
@@ -200,14 +200,16 @@ static int mt8173_rt5650_rt5514_dev_probe(struct platform_device *pdev)
 	if (!mt8173_rt5650_rt5514_dais[DAI_LINK_CODEC_I2S].codecs[0].of_node) {
 		dev_err(&pdev->dev,
 			"Property 'audio-codec' missing or invalid\n");
-		return -EINVAL;
+		ret = -EINVAL;
+		goto out;
 	}
 	mt8173_rt5650_rt5514_dais[DAI_LINK_CODEC_I2S].codecs[1].of_node =
 		of_parse_phandle(pdev->dev.of_node, "mediatek,audio-codec", 1);
 	if (!mt8173_rt5650_rt5514_dais[DAI_LINK_CODEC_I2S].codecs[1].of_node) {
 		dev_err(&pdev->dev,
 			"Property 'audio-codec' missing or invalid\n");
-		return -EINVAL;
+		ret = -EINVAL;
+		goto out;
 	}
 	mt8173_rt5650_rt5514_codec_conf[0].dlc.of_node =
 		mt8173_rt5650_rt5514_dais[DAI_LINK_CODEC_I2S].codecs[1].of_node;
@@ -216,6 +218,7 @@ static int mt8173_rt5650_rt5514_dev_probe(struct platform_device *pdev)
 
 	ret = devm_snd_soc_register_card(&pdev->dev, card);
 
+out:
 	of_node_put(platform_node);
 	return ret;
 }
-- 
1.8.3.1



From Jiaxin.Yu at mediatek.com  Mon Dec  5 01:34:17 2022
From: Jiaxin.Yu at mediatek.com (=?utf-8?B?SmlheGluIFl1ICjkv57lrrbpkasp?=)
Date: Mon, 5 Dec 2022 09:34:17 +0000
Subject: [PATCH v2 1/3] ASoC: hdmi-codec: Add event handler for hdmi TX
In-Reply-To: <Y4jHAJgmz/P58Q/C@sirena.org.uk>
References: <20221125094413.4940-1-jiaxin.yu@mediatek.com>
	 <20221125094413.4940-2-jiaxin.yu@mediatek.com>
	 <Y4Cysgk5Gic5ae9B@sirena.org.uk>
	 <18c82f6f723cd97a9d6b9a7ff16c6ed62fd005d6.camel@mediatek.com>
	 <Y4Y/vEWe3dw0FPQH@sirena.org.uk>
	 <cf9ea98a3263ffb8fc8b542888ad0ad680facfc7.camel@mediatek.com>
	 <Y4jHAJgmz/P58Q/C@sirena.org.uk>
Message-ID: <7023a2c7b471d6888d9079563a6c01f22599201f.camel@mediatek.com>

On Thu, 2022-12-01 at 15:23 +0000, Mark Brown wrote:
> On Thu, Dec 01, 2022 at 03:06:04PM +0000, Jiaxin Yu (???) wrote:
> > On Tue, 2022-11-29 at 17:22 +0000, Mark Brown wrote:
> > >  static const struct snd_kcontrol_new
> > >  mt8186_mt6366_rt1019_rt5682s_controls[] = {
> > >          SOC_DAPM_PIN_SWITCH("Speakers"),
> > >          SOC_DAPM_PIN_SWITCH("Headphone"),
> > >          SOC_DAPM_PIN_SWITCH("Headset Mic"),
> > >          SOC_DAPM_PIN_SWITCH("HDMI1"),
> > >  };
> > Which operation should I use to inform bridge driver to control
> > audio
> > on or off? I'm curious why I don't see .trigger in the structure
> > hdmi_codec_ops compared to the structure snd_soc_dai_ops?
> 
> You'd need to add a callback that the user of hdmi-codec passes in
> which
> would be triggered by an event on a DAPM widget added in the audio
> path
> rather than trying to shoehorn this into a PCM operation - a big part
> of
> the problem here is that you're trying to add something that doesn't
> fit
> into a PCM operation.

Dear Mark,

1. I have added a DAPM widget that is "SDB", when we open or close HDMI
PIN_SWITCH, the callback 'hdmi_tx_event' registered in the widget will
be triggered. Maybe you mean I shouldn't use SNDRV_PCM_TRIGGER_START
and SNDRV_PCM_TRIGGER_STOP?

2. If I don't use hcd.ops->trigger notifies the bridge ic driver to
switch the audio, which ops should I use?
I actually want to know hdmi-codec.c and it6505.c except
hdmi_codec_ops, is there any other way to communicate?

My understanding is not deep enough, so please help explain more in
detail, thank you very much!

+static int hdmi_tx_event(struct snd_soc_dapm_widget *w,
+               struct snd_kcontrol *kcontrol, int event)
+{
+       struct snd_soc_component *component =
snd_soc_dapm_to_component(w->dapm);
+       struct hdmi_codec_priv *hcp =
snd_soc_component_get_drvdata(component);
+
+       switch (event) {
+       case SND_SOC_DAPM_PRE_PMU:
+               if (hcp->hcd.ops->trigger)
+                       hcp->hcd.ops->trigger(component->dev->parent,
SNDRV_PCM_TRIGGER_START);
+               break;
+       case SND_SOC_DAPM_POST_PMD:
+               if (hcp->hcd.ops->trigger)
+                       hcp->hcd.ops->trigger(component->dev->parent,
SNDRV_PCM_TRIGGER_STOP);
+               break;
+       default:
+               break;
+       }
+
+       return 0;
+}
+
 static const struct snd_soc_dapm_widget hdmi_widgets[] = {
+       SND_SOC_DAPM_OUT_DRV_E("SDB", SND_SOC_NOPM, 0, 0, NULL, 0,
hdmi_tx_event,
+                              SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_PRE_PMU),
        SND_SOC_DAPM_OUTPUT("TX"),
        SND_SOC_DAPM_OUTPUT("RX"),
 };

From angelogioacchino.delregno at collabora.com  Mon Dec  5 02:37:14 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 5 Dec 2022 11:37:14 +0100
Subject: [PATCH] cpufreq: mediatek: Raise proc and sram max voltage for
 MT7622/7623
In-Reply-To: <75216e0c-9d36-7ada-1507-1bb4a91a3326@systemli.org>
References: <20221202095227.167492-1-angelogioacchino.delregno@collabora.com>
 <75216e0c-9d36-7ada-1507-1bb4a91a3326@systemli.org>
Message-ID: <4ab6ce42-4769-8a8b-495a-8a7edda91dea@collabora.com>

Il 02/12/22 13:37, Nick ha scritto:
> It now starts, however, with a lot of those messages (I applied the patch to 
> linux/master and not to linux-next, because next is currently not compiling anymore 
> for me):
> 
>> [?? 10.777041] cpufreq: __target_index: Failed to change cpu frequency: -22
>> [?? 10.791577] cpu cpu0: cpu0: failed to scale up voltage!
> The complete log:
> https://gist.githubusercontent.com/PolynomialDivision/267c83c7a21a359cbb4e8d99d0303201/raw/28d3568a26634bebef2d91ebe37fc5f76ae58add/mt7622-patch-cpufreq.log
> 

Thanks for the feedback!

I am totally sure that the platform_data is correct as that's based on datasheets.

Checking mt6380-regulator.c and mt6380.dtsi also confirms that the min/max volt
shift and proc/sram max voltage that I've specified is currently supported.

That "failed to scale up voltage!" is a bit strange, as this means that
the regulator_set_voltage() call returns -EINVAL for .. reasons, and that's a bit
strange, since the constraints look good in the code, unless there's anything that
I'm missing here.

Can you please try a vanilla kernel?

Also, since I don't have any MT7622/7623 board to test with, if the issue persists,
it would be helpful if you could place some debugging prints in mediatek-cpufreq.c
to specifically check which regulator_set_voltage() call fails, as to try to make
me have a better overview on the problem that you're facing.

Alternatively, we can eventually setup a debugging session on IRC to make things
a bit faster.

Cheers,
Angelo

> Bests
> Nick
> 
> On 12/2/22 10:52, AngeloGioacchino Del Regno wrote:
>> During the addition of SRAM voltage tracking for CCI scaling, this
>> driver got some voltage limits set for the vtrack algorithm: these
>> were moved to platform data first, then enforced in a later commit
>> 6a17b3876bc8 ("cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()")
>> using these as max values for the regulator_set_voltage() calls.
>>
>> In this case, the vsram/vproc constraints for MT7622 and MT7623
>> were supposed to be the same as MT2701 (and a number of other SoCs),
>> but that turned out to be a mistake because the aforementioned two
>> SoCs' maximum voltage for both VPROC and VPROC_SRAM is 1.36V.
>>
>> Fix that by adding new platform data for MT7622/7623 declaring the
>> right {proc,sram}_max_volt parameter.
>>
>> Fixes: ead858bd128d ("cpufreq: mediatek: Move voltage limits to platform data")
>> Fixes: 6a17b3876bc8 ("cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()")
>> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>> ---
>> ? drivers/cpufreq/mediatek-cpufreq.c | 13 +++++++++++--
>> ? 1 file changed, 11 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/cpufreq/mediatek-cpufreq.c b/drivers/cpufreq/mediatek-cpufreq.c
>> index 7f2680bc9a0f..f9a9f08c75c4 100644
>> --- a/drivers/cpufreq/mediatek-cpufreq.c
>> +++ b/drivers/cpufreq/mediatek-cpufreq.c
>> @@ -695,6 +695,15 @@ static const struct mtk_cpufreq_platform_data 
>> mt2701_platform_data = {
>> ????? .ccifreq_supported = false,
>> ? };
>> +static const struct mtk_cpufreq_platform_data mt7622_platform_data = {
>> +??? .min_volt_shift = 100000,
>> +??? .max_volt_shift = 200000,
>> +??? .proc_max_volt = 1360000,
>> +??? .sram_min_volt = 0,
>> +??? .sram_max_volt = 1360000,
>> +??? .ccifreq_supported = false,
>> +};
>> +
>> ? static const struct mtk_cpufreq_platform_data mt8183_platform_data = {
>> ????? .min_volt_shift = 100000,
>> ????? .max_volt_shift = 200000,
>> @@ -717,8 +726,8 @@ static const struct mtk_cpufreq_platform_data 
>> mt8186_platform_data = {
>> ? static const struct of_device_id mtk_cpufreq_machines[] __initconst = {
>> ????? { .compatible = "mediatek,mt2701", .data = &mt2701_platform_data },
>> ????? { .compatible = "mediatek,mt2712", .data = &mt2701_platform_data },
>> -??? { .compatible = "mediatek,mt7622", .data = &mt2701_platform_data },
>> -??? { .compatible = "mediatek,mt7623", .data = &mt2701_platform_data },
>> +??? { .compatible = "mediatek,mt7622", .data = &mt7622_platform_data },
>> +??? { .compatible = "mediatek,mt7623", .data = &mt7622_platform_data },
>> ????? { .compatible = "mediatek,mt8167", .data = &mt2701_platform_data },
>> ????? { .compatible = "mediatek,mt817x", .data = &mt2701_platform_data },
>> ????? { .compatible = "mediatek,mt8173", .data = &mt2701_platform_data },



From chengci.xu at mediatek.com  Mon Dec  5 01:49:57 2022
From: chengci.xu at mediatek.com (Chengci.Xu)
Date: Mon, 5 Dec 2022 17:49:57 +0800
Subject: [PATCH v5 0/4] MT8188 IOMMU SUPPORT
Message-ID: <20221205095001.31918-1-chengci.xu@mediatek.com>

Adds MT8188 IOMMU support.

MT8188 have 3 IOMMU HWs. 2 IOMMU HW is for multimedia, and 1 IOMMU HW
is for infra-master, like PCIe.

About the 2 MM IOMMU HW, the connection could be something like this:

        IOMMU(VDO)          IOMMU(VPP)
           |                   |
      SMI_COMMON(VDO)      SMI_COMMON(VPP)
      ---------------     ----------------
      |      |   ...      |      |     ...
    larb0 larb2  ...    larb1 larb3    ...

INFRA IOMMU does not have SMI, the master connects to IOMMU directly.

Although multiple banks supported in MT8188, we only use one of them,
which means PCIe is put in bank0 of INFRA IOMMU.

So we have two pgtable for MT8188, specifically, these two MM IOMMU HW
share a pgtable while INFRA IOMMU HW use a independent pgtable.

Another change is that we add some SMC command for INFRA master to 
enable/disable INFRA IOMMU in ATF considering security concerns.

We also adjust the flow of mtk_iommu_config to reduce indention.

changes since v5:
  - base on tag: next-20221205
  - add flag PGTABLE_PA_35_EN for all IOMMU in MT8188.
  - modify the type of "portid_msk" from "u32" to "unsigned long".

changes since v4:
  - base on tag: next-20221018.
  - add patch[2/4] to reduce indention by adjust mtk_iommu_config flow.

changes since v3:
  - base on tag: next-20220916.
  - use license "GPL-2.0-only OR BSD-2-Clause" in bingings head file.
  - drop redundant "portid" assignment when configure infra master.
  - reduce indentation by using "else if" when config infra master.
  - update probe flow about "pericfg" for CFG_IFA_MASTER_IN_ATF.
  - drop unused "pericfg_comp_str" in mt8188_data_infra.
  - drop words like "This commit/patch".

changes since v2:
  - base on tag: next-20220831.
  - rename "mt8188-memory-port.h" to "mediatek,mt8188-memory-port.h".
  - use dual-license in "mediatek,mt8188-memory-port.h"
  - remove unnecessary "()" when define SMI_LARB_ID

changes since v1:
  - base on tag: next-20220803.
  - adds MT8188 IOMMU support.

Chengci.Xu (4):
  dt-bindings: mediatek: mt8188: Add binding for MM & INFRA IOMMU
  iommu/mediatek: Adjust mtk_iommu_config flow
  iommu/mediatek: Add enable IOMMU SMC command for INFRA master
  iommu/mediatek: Add MT8188 IOMMU Support

 .../bindings/iommu/mediatek,iommu.yaml        |  12 +-
 drivers/iommu/mtk_iommu.c                     | 113 +++-
 .../memory/mediatek,mt8188-memory-port.h      | 482 ++++++++++++++++++
 include/soc/mediatek/smi.h                    |   1 +
 4 files changed, 584 insertions(+), 24 deletions(-)
 create mode 100644 include/dt-bindings/memory/mediatek,mt8188-memory-port.h

-- 
2.25.1



From aouledameur at baylibre.com  Mon Dec  5 02:41:00 2022
From: aouledameur at baylibre.com (Amjad Ouled-Ameur)
Date: Mon, 05 Dec 2022 11:41:00 +0100
Subject: [PATCH v7 4/4] thermal: mediatek: add another get_temp ops for
 thermal sensors
In-Reply-To: <4121bb6b-30db-7a23-f4c8-40afdda7a0b5@linaro.org>
References: <20221018-up-i350-thermal-bringup-v7-0-ebf08ff2eddb@baylibre.com> <20221018-up-i350-thermal-bringup-v7-4-ebf08ff2eddb@baylibre.com> <4121bb6b-30db-7a23-f4c8-40afdda7a0b5@linaro.org>
Message-ID: <COTTJX635TNF.1WL2TEZN7VW9O@amjad-ThinkPad-T490>

Hi Daniel,
On Sun Dec 4, 2022 at 6:26 PM CET, Daniel Lezcano wrote:
> On 18/11/2022 12:04, Amjad Ouled-Ameur wrote:
> > Provide thermal zone to read thermal sensor in the SoC. We can read all the
> > thermal sensors value in the SoC by the node /sys/class/thermal/
> > 
> > In mtk_thermal_bank_temperature, return -EAGAIN instead of -EACCESS
> > on the first read of sensor that often are bogus values.
> > This can avoid following warning on boot:
> > 
> >    thermal thermal_zone6: failed to read out thermal zone (-13)
> > 
> > Signed-off-by: Michael Kao <michael.kao at mediatek.com>
> > Signed-off-by: Hsin-Yi Wang <hsinyi at chromium.org>
> > Signed-off-by: Amjad Ouled-Ameur <aouledameur at baylibre.com>
> > Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> > ---
> >   drivers/thermal/mtk_thermal.c | 99 ++++++++++++++++++++++++++++++++-----------
> >   1 file changed, 74 insertions(+), 25 deletions(-)
> > 
> > diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
> > index 3a5df1440822..b1f4d19edd4f 100644
> > --- a/drivers/thermal/mtk_thermal.c
> > +++ b/drivers/thermal/mtk_thermal.c
> > @@ -259,6 +259,11 @@ enum mtk_thermal_version {
> >   
> >   struct mtk_thermal;
> >   
> > +struct mtk_thermal_zone {
> > +	struct mtk_thermal *mt;
> > +	int id;
> > +};
> > +
> >   struct thermal_bank_cfg {
> >   	unsigned int num_sensors;
> >   	const int *sensors;
> > @@ -307,6 +312,8 @@ struct mtk_thermal {
> >   
> >   	const struct mtk_thermal_data *conf;
> >   	struct mtk_thermal_bank banks[MAX_NUM_ZONES];
> > +
> > +	int (*raw_to_mcelsius)(struct mtk_thermal *mt, int sensno, s32 raw);
> >   };
> >   
> >   /* MT8183 thermal sensor data */
> > @@ -709,6 +716,29 @@ static void mtk_thermal_put_bank(struct mtk_thermal_bank *bank)
> >   		mutex_unlock(&mt->lock);
> >   }
> >   
> > +static int _get_sensor_temp(struct mtk_thermal *mt, int id)
> > +{
> > +	u32 raw;
> > +	int temp;
> > +
> > +	const struct mtk_thermal_data *conf = mt->conf;
> > +
> > +	raw = readl(mt->thermal_base + conf->msr[id]);
> > +
> > +	temp = mt->raw_to_mcelsius(mt, id, raw);
> > +
> > +	/*
> > +	 * The first read of a sensor often contains very high bogus
> > +	 * temperature value. Filter these out so that the system does
> > +	 * not immediately shut down.
> > +	 */
> > +
> > +	if (temp > 200000)
> > +		return -EAGAIN;
> > +	else
> > +		return temp;
> > +}
> > +
> >   /**
> >    * mtk_thermal_bank_temperature - get the temperature of a bank
> >    * @bank:	The bank
> > @@ -721,26 +751,9 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
> >   	struct mtk_thermal *mt = bank->mt;
> >   	const struct mtk_thermal_data *conf = mt->conf;
> >   	int i, temp = INT_MIN, max = INT_MIN;
> > -	u32 raw;
> >   
> >   	for (i = 0; i < conf->bank_data[bank->id].num_sensors; i++) {
> > -		raw = readl(mt->thermal_base + conf->msr[i]);
> > -
> > -		if (mt->conf->version == MTK_THERMAL_V1) {
> > -			temp = raw_to_mcelsius_v1(
> > -				mt, conf->bank_data[bank->id].sensors[i], raw);
> > -		} else {
> > -			temp = raw_to_mcelsius_v2(
> > -				mt, conf->bank_data[bank->id].sensors[i], raw);
> > -		}
> > -
> > -		/*
> > -		 * The first read of a sensor often contains very high bogus
> > -		 * temperature value. Filter these out so that the system does
> > -		 * not immediately shut down.
> > -		 */
> > -		if (temp > 200000)
> > -			temp = 0;
> > +		temp = _get_sensor_temp(mt, i);
> >   
> >   		if (temp > max)
> >   			max = temp;
> > @@ -749,9 +762,10 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
> >   	return max;
> >   }
> >   
> > -static int mtk_read_temp(struct thermal_zone_device *tz, int *temperature)
> > +static int mtk_read_temp(struct thermal_zone_device *tzdev, int *temperature)
> >   {
> > -	struct mtk_thermal *mt = tz->devdata;
> > +	struct mtk_thermal_zone *tz = tzdev->devdata;
> > +	struct mtk_thermal *mt = tz->mt;
> >   	int i;
> >   	int tempmax = INT_MIN;
> >   
> > @@ -770,10 +784,28 @@ static int mtk_read_temp(struct thermal_zone_device *tz, int *temperature)
> >   	return 0;
> >   }
> >   
> > +static int mtk_read_sensor_temp(struct thermal_zone_device *tzdev, int *temperature)
> > +{
> > +	struct mtk_thermal_zone *tz = tzdev->devdata;
> > +	struct mtk_thermal *mt = tz->mt;
> > +	int id = tz->id - 1;
> > +
> > +	if (id < 0)
> > +		return -EACCES;
> > +
> > +	*temperature = _get_sensor_temp(mt, id);
> > +
> > +	return 0;
> > +}
> > +
> >   static const struct thermal_zone_device_ops mtk_thermal_ops = {
> >   	.get_temp = mtk_read_temp,
> >   };
> >   
> > +static const struct thermal_zone_device_ops mtk_thermal_sensor_ops = {
> > +	.get_temp = mtk_read_sensor_temp,
> > +};
> > +
> >   static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
> >   				  u32 apmixed_phys_base, u32 auxadc_phys_base,
> >   				  int ctrl_id)
> > @@ -1072,6 +1104,7 @@ static int mtk_thermal_probe(struct platform_device *pdev)
> >   	u64 auxadc_phys_base, apmixed_phys_base;
> >   	struct thermal_zone_device *tzdev;
> >   	void __iomem *apmixed_base, *auxadc_base;
> > +	struct mtk_thermal_zone *tz;
> >   
> >   	mt = devm_kzalloc(&pdev->dev, sizeof(*mt), GFP_KERNEL);
> >   	if (!mt)
> > @@ -1150,6 +1183,9 @@ static int mtk_thermal_probe(struct platform_device *pdev)
> >   
> >   	mtk_thermal_turn_on_buffer(mt, apmixed_base);
> >   
> > +	mt->raw_to_mcelsius = (mt->conf->version == MTK_THERMAL_V1) ?
> > +				raw_to_mcelsius_v1 : raw_to_mcelsius_v2;
> > +
> >   	if (mt->conf->version == MTK_THERMAL_V2) {
> >   		mtk_thermal_release_periodic_ts(mt, auxadc_base);
> >   	}
> > @@ -1161,11 +1197,24 @@ static int mtk_thermal_probe(struct platform_device *pdev)
> >   
> >   	platform_set_drvdata(pdev, mt);
> >   
> > -	tzdev = devm_thermal_of_zone_register(&pdev->dev, 0, mt,
> > -					      &mtk_thermal_ops);
> > -	if (IS_ERR(tzdev)) {
> > -		ret = PTR_ERR(tzdev);
> > -		goto err_disable_clk_peri_therm;
> > +	for (i = 0; i < mt->conf->num_sensors + 1; i++) {
> > +		tz = devm_kmalloc(&pdev->dev, sizeof(*tz), GFP_KERNEL);
> > +		if (!tz)
> > +			return -ENOMEM;
> > +
> > +		tz->mt = mt;
> > +		tz->id = i;
> > +
> > +		tzdev = devm_thermal_of_zone_register(&pdev->dev, i, tz, (i == 0) ?
> > +							     &mtk_thermal_ops :
> > +							     &mtk_thermal_sensor_ops);
>
> Here you use again the aggregation
I addressed this concern in V6, could you please take a look and let me
know what you think [0].

[0]: https://lore.kernel.org/all/5eb0cdc2-e9f9-dd42-bf80-b7dcd8bcc196 at baylibre.com/

Regards,
Amjad
>
> > +
> > +		if (IS_ERR(tzdev)) {
> > +			ret = PTR_ERR(tzdev);
> > +			if (ret == -ENODEV)
> > +				continue;
> > +			goto err_disable_clk_peri_therm;
> > +		}
> >   	}
> >   
> >   	ret = devm_thermal_add_hwmon_sysfs(tzdev);
> > 
>
> -- 
> <http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs
>
> Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
> <http://twitter.com/#!/linaroorg> Twitter |
> <http://www.linaro.org/linaro-blog/> Blog



From joro at 8bytes.org  Mon Dec  5 02:46:26 2022
From: joro at 8bytes.org (Joerg Roedel)
Date: Mon, 5 Dec 2022 11:46:26 +0100
Subject: [PATCH v7 0/6] iommu/mediatek: Improve safety from invalid dts
 input
In-Reply-To: <20221018024258.19073-1-yong.wu@mediatek.com>
References: <20221018024258.19073-1-yong.wu@mediatek.com>
Message-ID: <Y43MAvPRx2BrRy/X@8bytes.org>

On Tue, Oct 18, 2022 at 10:42:52AM +0800, Yong Wu wrote:
> Guenter Roeck (1):
>   iommu/mediatek: Validate number of phandles associated with
>     "mediatek,larbs"
> 
> Yong Wu (5):
>   iommu/mediatek: Add platform_device_put for recovering the device
>     refcnt
>   iommu/mediatek: Use component_match_add
>   iommu/mediatek: Add error path for loop of mm_dts_parse
>   iommu/mediatek: Improve safety for mediatek,smi property in larb nodes
>   iommu/mediatek: Remove unused "mapping" member from mtk_iommu_data

Applied, thanks.


From joro at 8bytes.org  Mon Dec  5 02:55:45 2022
From: joro at 8bytes.org (Joerg Roedel)
Date: Mon, 5 Dec 2022 11:55:45 +0100
Subject: [PATCH v2] iommu/mediatek: Fix crash on isr after kexec()
In-Reply-To: <20221125-mtk-iommu-v2-0-e168dff7d43e@chromium.org>
References: <20221125-mtk-iommu-v2-0-e168dff7d43e@chromium.org>
Message-ID: <Y43OMbwJUTv0dmOt@8bytes.org>

On Mon, Nov 28, 2022 at 11:16:48PM +0100, Ricardo Ribalda wrote:
> If the system is rebooted via isr(), the IRQ handler might be triggerd
> before the domain is initialized. Resulting on an invalid memory access
> error.
> 
> Fix:
> [    0.500930] Unable to handle kernel read from unreadable memory at virtual address 0000000000000070
> [    0.501166] Call trace:
> [    0.501174]  report_iommu_fault+0x28/0xfc
> [    0.501180]  mtk_iommu_isr+0x10c/0x1c0
> 
> Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>

Applied with commit-message spelling fix.



From lorenzo at kernel.org  Mon Dec  5 03:14:41 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Mon,  5 Dec 2022 12:14:41 +0100
Subject: [PATCH v2 net-next] net: ethernet: mtk_wed: fix possible deadlock if mtk_wed_wo_init fails
Message-ID: <5a29aae6c4a26e807844210d4ddac7950ca5f63d.1670238731.git.lorenzo@kernel.org>

Introduce __mtk_wed_detach() in order to avoid a possible deadlock in
mtk_wed_attach routine if mtk_wed_wo_init fails.
Check wo pointer is properly allocated before running mtk_wed_wo_reset()
and mtk_wed_wo_deinit() in __mtk_wed_detach routine.
Honor mtk_wed_mcu_send_msg return value in mtk_wed_wo_reset().

Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
---
Changes since v1:
- move wo pointer checks in __mtk_wed_detach()
---
 drivers/net/ethernet/mediatek/mtk_wed.c     | 30 ++++++++++++++-------
 drivers/net/ethernet/mediatek/mtk_wed_mcu.c |  3 +++
 2 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
index d041615b2bac..2ce9fbb1c66d 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
@@ -174,9 +174,10 @@ mtk_wed_wo_reset(struct mtk_wed_device *dev)
 	mtk_wdma_tx_reset(dev);
 	mtk_wed_reset(dev, MTK_WED_RESET_WED);
 
-	mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
-			     MTK_WED_WO_CMD_CHANGE_STATE, &state,
-			     sizeof(state), false);
+	if (mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
+				 MTK_WED_WO_CMD_CHANGE_STATE, &state,
+				 sizeof(state), false))
+		return;
 
 	if (readx_poll_timeout(mtk_wed_wo_read_status, dev, val,
 			       val == MTK_WED_WOIF_DISABLE_DONE,
@@ -576,12 +577,10 @@ mtk_wed_deinit(struct mtk_wed_device *dev)
 }
 
 static void
-mtk_wed_detach(struct mtk_wed_device *dev)
+__mtk_wed_detach(struct mtk_wed_device *dev)
 {
 	struct mtk_wed_hw *hw = dev->hw;
 
-	mutex_lock(&hw_lock);
-
 	mtk_wed_deinit(dev);
 
 	mtk_wdma_rx_reset(dev);
@@ -590,9 +589,11 @@ mtk_wed_detach(struct mtk_wed_device *dev)
 	mtk_wed_free_tx_rings(dev);
 
 	if (mtk_wed_get_rx_capa(dev)) {
-		mtk_wed_wo_reset(dev);
+		if (hw->wed_wo)
+			mtk_wed_wo_reset(dev);
 		mtk_wed_free_rx_rings(dev);
-		mtk_wed_wo_deinit(hw);
+		if (hw->wed_wo)
+			mtk_wed_wo_deinit(hw);
 	}
 
 	if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) {
@@ -612,6 +613,13 @@ mtk_wed_detach(struct mtk_wed_device *dev)
 	module_put(THIS_MODULE);
 
 	hw->wed_dev = NULL;
+}
+
+static void
+mtk_wed_detach(struct mtk_wed_device *dev)
+{
+	mutex_lock(&hw_lock);
+	__mtk_wed_detach(dev);
 	mutex_unlock(&hw_lock);
 }
 
@@ -1490,8 +1498,10 @@ mtk_wed_attach(struct mtk_wed_device *dev)
 		ret = mtk_wed_wo_init(hw);
 	}
 out:
-	if (ret)
-		mtk_wed_detach(dev);
+	if (ret) {
+		dev_err(dev->hw->dev, "failed to attach wed device\n");
+		__mtk_wed_detach(dev);
+	}
 unlock:
 	mutex_unlock(&hw_lock);
 
diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
index f9539e6233c9..3dd02889d972 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
@@ -207,6 +207,9 @@ int mtk_wed_mcu_msg_update(struct mtk_wed_device *dev, int id, void *data,
 	if (dev->hw->version == 1)
 		return 0;
 
+	if (!wo)
+		return -ENODEV;
+
 	return mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO, id, data, len,
 				    true);
 }
-- 
2.38.1



From lorenzo at kernel.org  Mon Dec  5 03:34:42 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Mon,  5 Dec 2022 12:34:42 +0100
Subject: [PATCH v2 net-next] net: ethernet: mtk_wed: add reset to rx_ring_setup callback
Message-ID: <29c6e7a5469e784406cf3e2920351d1207713d05.1670239984.git.lorenzo@kernel.org>

This patch adds reset parameter to mtk_wed_rx_ring_setup signature
in order to align rx_ring_setup callback to tx_ring_setup one introduced
in 'commit 23dca7a90017 ("net: ethernet: mtk_wed: add reset to
tx_ring_setup callback")'

Co-developed-by: Sujuan Chen <sujuan.chen at mediatek.com>
Signed-off-by: Sujuan Chen <sujuan.chen at mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
---
Changes since v1:
- update commit message
---
 drivers/net/ethernet/mediatek/mtk_wed.c  | 20 +++++++++++++-------
 drivers/net/wireless/mediatek/mt76/dma.c |  2 +-
 include/linux/soc/mediatek/mtk_wed.h     |  8 ++++----
 3 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
index 2ce9fbb1c66d..a6271449617f 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
@@ -1218,7 +1218,8 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
 }
 
 static int
-mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
+mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
+			   bool reset)
 {
 	u32 desc_size = sizeof(struct mtk_wdma_desc) * dev->hw->version;
 	struct mtk_wed_ring *wdma;
@@ -1227,8 +1228,8 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
 		return -EINVAL;
 
 	wdma = &dev->tx_wdma[idx];
-	if (mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE, desc_size,
-			       true))
+	if (!reset && mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE,
+					 desc_size, true))
 		return -ENOMEM;
 
 	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
@@ -1238,6 +1239,9 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
 	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_CPU_IDX, 0);
 	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_DMA_IDX, 0);
 
+	if (reset)
+		mtk_wed_ring_reset(wdma, MTK_WED_WDMA_RING_SIZE, true);
+
 	if (!idx)  {
 		wed_w32(dev, MTK_WED_WDMA_RING_TX + MTK_WED_RING_OFS_BASE,
 			wdma->desc_phys);
@@ -1579,18 +1583,20 @@ mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
 }
 
 static int
-mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs)
+mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs,
+		      bool reset)
 {
 	struct mtk_wed_ring *ring = &dev->rx_ring[idx];
 
 	if (WARN_ON(idx >= ARRAY_SIZE(dev->rx_ring)))
 		return -EINVAL;
 
-	if (mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
-			       sizeof(*ring->desc), false))
+	if (!reset && mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
+					 sizeof(*ring->desc), false))
 		return -ENOMEM;
 
-	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE))
+	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE,
+				       reset))
 		return -ENOMEM;
 
 	ring->reg_base = MTK_WED_RING_RX_DATA(idx);
diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
index 3f8c0845fcca..f795548562f5 100644
--- a/drivers/net/wireless/mediatek/mt76/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/dma.c
@@ -648,7 +648,7 @@ mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
 			q->wed_regs = wed->txfree_ring.reg_base;
 		break;
 	case MT76_WED_Q_RX:
-		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs);
+		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs, false);
 		if (!ret)
 			q->wed_regs = wed->rx_ring[ring].reg_base;
 		break;
diff --git a/include/linux/soc/mediatek/mtk_wed.h b/include/linux/soc/mediatek/mtk_wed.h
index beb190449704..a0746d4aec20 100644
--- a/include/linux/soc/mediatek/mtk_wed.h
+++ b/include/linux/soc/mediatek/mtk_wed.h
@@ -160,7 +160,7 @@ struct mtk_wed_ops {
 	int (*tx_ring_setup)(struct mtk_wed_device *dev, int ring,
 			     void __iomem *regs, bool reset);
 	int (*rx_ring_setup)(struct mtk_wed_device *dev, int ring,
-			     void __iomem *regs);
+			     void __iomem *regs, bool reset);
 	int (*txfree_ring_setup)(struct mtk_wed_device *dev,
 				 void __iomem *regs);
 	int (*msg_update)(struct mtk_wed_device *dev, int cmd_id,
@@ -228,8 +228,8 @@ mtk_wed_get_rx_capa(struct mtk_wed_device *dev)
 	(_dev)->ops->irq_get(_dev, _mask)
 #define mtk_wed_device_irq_set_mask(_dev, _mask) \
 	(_dev)->ops->irq_set_mask(_dev, _mask)
-#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) \
-	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs)
+#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) \
+	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs, _reset)
 #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash) \
 	(_dev)->ops->ppe_check(_dev, _skb, _reason, _hash)
 #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) \
@@ -249,7 +249,7 @@ static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
 #define mtk_wed_device_reg_write(_dev, _reg, _val) do {} while (0)
 #define mtk_wed_device_irq_get(_dev, _mask) 0
 #define mtk_wed_device_irq_set_mask(_dev, _mask) do {} while (0)
-#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) -ENODEV
+#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) -ENODEV
 #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash)  do {} while (0)
 #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) -ENODEV
 #define mtk_wed_device_stop(_dev) do {} while (0)
-- 
2.38.1



From angelogioacchino.delregno at collabora.com  Mon Dec  5 03:52:54 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 5 Dec 2022 12:52:54 +0100
Subject: [PATCH] drm/mediatek: mtk_drm_crtc: Add checks for devm_kcalloc
In-Reply-To: <20221205095115.2905090-1-ruanjinjie@huawei.com>
References: <20221205095115.2905090-1-ruanjinjie@huawei.com>
Message-ID: <378232f4-5c2e-ad56-c4ec-4d9f72f08755@collabora.com>

Il 05/12/22 10:51, ruanjinjie ha scritto:
> As the devm_kcalloc may return NULL, the return value needs to be checked
> to avoid NULL poineter dereference.
> 
> Fixes: 31c5558dae05 ("drm/mediatek: Refactor plane init")
> Signed-off-by: ruanjinjie <ruanjinjie at huawei.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>



From angelogioacchino.delregno at collabora.com  Mon Dec  5 03:58:24 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 5 Dec 2022 12:58:24 +0100
Subject: [PATCH v3] media: platform: mtk-mdp3: Fix return value check in
 mdp_probe()
In-Reply-To: <20221202101836.19858-1-linqiheng@huawei.com>
References: <20221202101836.19858-1-linqiheng@huawei.com>
Message-ID: <5c5d7bce-b0bf-d1ae-1044-3c3ff20c82d6@collabora.com>

Il 02/12/22 11:18, Qiheng Lin ha scritto:
> In case of error, the function mtk_mutex_get()
> returns ERR_PTR() and never returns NULL. The NULL test in the
> return value check should be replaced with IS_ERR().
> And also fix the err_free_mutex case.
> 
> Fixes: 61890ccaefaf ("media: platform: mtk-mdp3: add MediaTek MDP3 driver")
> Signed-off-by: Qiheng Lin <linqiheng at huawei.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>



From broonie at kernel.org  Mon Dec  5 04:07:20 2022
From: broonie at kernel.org (Mark Brown)
Date: Mon, 5 Dec 2022 12:07:20 +0000
Subject: [PATCH v2 1/3] ASoC: hdmi-codec: Add event handler for hdmi TX
In-Reply-To: <7023a2c7b471d6888d9079563a6c01f22599201f.camel@mediatek.com>
References: <20221125094413.4940-1-jiaxin.yu@mediatek.com>
 <20221125094413.4940-2-jiaxin.yu@mediatek.com>
 <Y4Cysgk5Gic5ae9B@sirena.org.uk>
 <18c82f6f723cd97a9d6b9a7ff16c6ed62fd005d6.camel@mediatek.com>
 <Y4Y/vEWe3dw0FPQH@sirena.org.uk>
 <cf9ea98a3263ffb8fc8b542888ad0ad680facfc7.camel@mediatek.com>
 <Y4jHAJgmz/P58Q/C@sirena.org.uk>
 <7023a2c7b471d6888d9079563a6c01f22599201f.camel@mediatek.com>
Message-ID: <Y43e+EsNCrCpZSIH@sirena.org.uk>

On Mon, Dec 05, 2022 at 09:34:17AM +0000, Jiaxin Yu (???) wrote:

> 1. I have added a DAPM widget that is "SDB", when we open or close HDMI
> PIN_SWITCH, the callback 'hdmi_tx_event' registered in the widget will
> be triggered. Maybe you mean I shouldn't use SNDRV_PCM_TRIGGER_START
> and SNDRV_PCM_TRIGGER_STOP?

No, I mean that if you want to control the enable and disable of the
output path you should implement a DAPM widget.

> 2. If I don't use hcd.ops->trigger notifies the bridge ic driver to
> switch the audio, which ops should I use?
> I actually want to know hdmi-codec.c and it6505.c except
> hdmi_codec_ops, is there any other way to communicate?

Like I said you should use the event on the DAPM widget.  This will
require providing operations for the events to the drivers.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221205/683775c1/attachment.sig>

From rafael at kernel.org  Mon Dec  5 04:08:47 2022
From: rafael at kernel.org (Rafael J. Wysocki)
Date: Mon, 5 Dec 2022 13:08:47 +0100
Subject: [PATCH] Revert "cpufreq: mediatek: Refine mtk_cpufreq_voltage_tracking()"
In-Reply-To: <20221205043044.bgecubnw7d3xlyi5@vireshk-i7>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <18947e09733a17935af9a123ccf9b6e92faeaf9b.1669958641.git.viresh.kumar@linaro.org>
 <CAJZ5v0ixHocQbu6-zs3dMDsiw8vdPyv=8Re7N4kUckeGkLhUzg@mail.gmail.com>
 <CAJZ5v0hc8CsvqLKxi5iRq7iR0bkt25dRnLBd23mx-zdi2Sjgsw@mail.gmail.com> <20221205043044.bgecubnw7d3xlyi5@vireshk-i7>
Message-ID: <CAJZ5v0gTV5LM_qRKncPq5Z2TRENMgVer6oZiGAKJn6ndrNSKxg@mail.gmail.com>

On Mon, Dec 5, 2022 at 5:30 AM Viresh Kumar <viresh.kumar at linaro.org> wrote:
>
> On 02-12-22, 20:46, Rafael J. Wysocki wrote:
> > On Fri, Dec 2, 2022 at 1:17 PM Rafael J. Wysocki <rafael at kernel.org> wrote:
> > >
> > > On Fri, Dec 2, 2022 at 6:26 AM Viresh Kumar <viresh.kumar at linaro.org> wrote:
> > > >
> > > > This reverts commit 6a17b3876bc8303612d7ad59ecf7cbc0db418bcd.
> > > >
> > > > This commit caused regression on Banana Pi R64 (MT7622), revert until
> > > > the problem is identified and fixed properly.
> > > >
> > > > Link: https://lore.kernel.org/all/930778a1-5e8b-6df6-3276-42dcdadaf682 at systemli.org/
> > > > Cc: v5.19+ <stable at vger.kernel.org> # v5.19+
> > > > Reported-by: Nick <vincent at systemli.org>
> > > > Signed-off-by: Viresh Kumar <viresh.kumar at linaro.org>
> > >
> > > Do you want me to push this revert for -rc8?
>
> No, I was planning to make it part of my pull request.

Well, this was a bit unclear.

> > After all, I've decided to queue it up for 6.2, thanks!
>
> Can you please drop that ? AngeloGioacchino already reported that
> Reverting the proposed commit will make MT8183 unstable.

OK, dropped now.

> So the right thing to do now is apply the fix, which is on the list
> and getting tested.

Alright then, I'll assume that the proper fix will come in through
your pull request for 6.2 (but please send that one before the merge
window opens), thanks!


From Yanchao.Yang at mediatek.com  Mon Dec  5 04:40:52 2022
From: Yanchao.Yang at mediatek.com (=?utf-8?B?WWFuY2hhbyBZYW5nICjmnajlvabotoUp?=)
Date: Mon, 5 Dec 2022 12:40:52 +0000
Subject: [PATCH net-next v1 01/13] net: wwan: tmi: Add PCIe core
In-Reply-To: <1cca2790-5805-b4fc-f8e8-2c490db487f6@collabora.com>
References: <20221122111152.160377-1-yanchao.yang@mediatek.com>
	 <20221122111152.160377-2-yanchao.yang@mediatek.com>
	 <1cca2790-5805-b4fc-f8e8-2c490db487f6@collabora.com>
Message-ID: <e7d3bfeed57157e8859a24f501b7efb74e21f0f9.camel@mediatek.com>

On Thu, 2022-11-24 at 12:06 +0100, AngeloGioacchino Del Regno wrote:
> Il 22/11/22 12:11, Yanchao Yang ha scritto:
> > From: MediaTek Corporation <linuxwwan at mediatek.com>
> > 
> > Registers the TMI device driver with the kernel. Set up all the
> > fundamental
> > configurations for the device: PCIe layer, Modem Host Cross Core
> > Interface
> > (MHCCIF), Reset Generation Unit (RGU), modem common control
> > operations and
> > build infrastructure.
> > 
> > * PCIe layer code implements driver probe and removal, MSI-X
> > interrupt
> > initialization and de-initialization, and the way of resetting the
> > device.
> > * MHCCIF provides interrupt channels to communicate events such as
> > handshake,
> > PM and port enumeration.
> > * RGU provides interrupt channels to generate notifications from
> > the device
> > so that the TMI driver could get the device reset.
> > * Modem common control operations provide the basic read/write
> > functions of
> > the device's hardware registers, mask/unmask/get/clear functions of
> > the
> > device's interrupt registers and inquiry functions of the device's
> > status.
> > 
> > Signed-off-by: Ting Wang <ting.wang at mediatek.com>
> > Signed-off-by: MediaTek Corporation <linuxwwan at mediatek.com>

Hello Angelo,

> Hello Yanchao,
> thanks for the patch! However, there are some things to improve...
> 
> First of all, you have to signoff (in your name) all patches that you
> send.

Thank your suggestion. Fix it next version (add Signed-off-by: Yanchao
Yang <yanchao.yang at mediatek.com> for all patches)
> Check below for more comments...
> 
> > ---
> >   drivers/net/wwan/Kconfig                 |   11 +
> >   drivers/net/wwan/Makefile                |    1 +
> >   drivers/net/wwan/mediatek/Makefile       |   12 +
> >   drivers/net/wwan/mediatek/mtk_common.h   |   30 +
> >   drivers/net/wwan/mediatek/mtk_dev.c      |   50 +
> >   drivers/net/wwan/mediatek/mtk_dev.h      |  503 ++++++++++
> >   drivers/net/wwan/mediatek/pcie/mtk_pci.c | 1164
> > ++++++++++++++++++++++
> >   drivers/net/wwan/mediatek/pcie/mtk_pci.h |  150 +++
> >   drivers/net/wwan/mediatek/pcie/mtk_reg.h |   69 ++
> >   9 files changed, 1990 insertions(+)
> >   create mode 100644 drivers/net/wwan/mediatek/Makefile
> >   create mode 100644 drivers/net/wwan/mediatek/mtk_common.h
> >   create mode 100644 drivers/net/wwan/mediatek/mtk_dev.c
> >   create mode 100644 drivers/net/wwan/mediatek/mtk_dev.h
> >   create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_pci.c
> >   create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_pci.h
> >   create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_reg.h
> > 
> 
> 
> > diff --git a/drivers/net/wwan/Makefile b/drivers/net/wwan/Makefile
> > index 3960c0ae2445..198d8074851f 100644
> > --- a/drivers/net/wwan/Makefile
> > +++ b/drivers/net/wwan/Makefile
> > @@ -14,3 +14,4 @@ obj-$(CONFIG_QCOM_BAM_DMUX) += qcom_bam_dmux.o
> >   obj-$(CONFIG_RPMSG_WWAN_CTRL) += rpmsg_wwan_ctrl.o
> >   obj-$(CONFIG_IOSM) += iosm/
> >   obj-$(CONFIG_MTK_T7XX) += t7xx/
> > +obj-$(CONFIG_MTK_TMI) += mediatek/
> > diff --git a/drivers/net/wwan/mediatek/Makefile
> > b/drivers/net/wwan/mediatek/Makefile
> > new file mode 100644
> > index 000000000000..ae5f8a5ba05a
> > --- /dev/null
> > +++ b/drivers/net/wwan/mediatek/Makefile
> > @@ -0,0 +1,12 @@
> > +# SPDX-License-Identifier: BSD-3-Clause-Clear
> > +
> > +MODULE_NAME := mtk_tmi
> > +
> > +mtk_tmi-y = \
> > +	pcie/mtk_pci.o	\
> > +	mtk_dev.o
> > +
> > +ccflags-y += -I$(srctree)/$(src)/
> > +ccflags-y += -I$(srctree)/$(src)/pcie/
> > +
> > +obj-$(CONFIG_MTK_TMI) += mtk_tmi.o
> > diff --git a/drivers/net/wwan/mediatek/mtk_common.h
> > b/drivers/net/wwan/mediatek/mtk_common.h
> > new file mode 100644
> > index 000000000000..516d3d9e02cf
> > --- /dev/null
> > +++ b/drivers/net/wwan/mediatek/mtk_common.h
> > @@ -0,0 +1,30 @@
> > +/* SPDX-License-Identifier: BSD-3-Clause-Clear
> > + *
> > + * Copyright (c) 2022, MediaTek Inc.
> > + */
> > +
> > +#ifndef _MTK_COMMON_H
> > +#define _MTK_COMMON_H
> > +
> > +#include <linux/device.h>
> > +
> > +#define MTK_UEVENT_INFO_LEN 128
> > +
> > +/* MTK uevent */
> > +enum mtk_uevent_id {
> > +	MTK_UEVENT_FSM = 1,
> > +	MTK_UEVENT_MAX
> > +};
> > +
> > +static inline void mtk_uevent_notify(struct device *dev, enum
> > mtk_uevent_id id, const char *info)
> > +{
> > +	char buf[MTK_UEVENT_INFO_LEN];
> > +	char *ext[2] = {NULL, NULL};
> > +
> > +	snprintf(buf, MTK_UEVENT_INFO_LEN, "%s:event_id=%d, info=%s",
> > +		 dev->kobj.name, id, info);
> > +	ext[0] = buf;
> > +	kobject_uevent_env(&dev->kobj, KOBJ_CHANGE, ext);
> > +}
> > +
> > +#endif /* _MTK_COMMON_H */
> > diff --git a/drivers/net/wwan/mediatek/mtk_dev.c
> > b/drivers/net/wwan/mediatek/mtk_dev.c
> > new file mode 100644
> > index 000000000000..d3d7bf940d78
> > --- /dev/null
> > +++ b/drivers/net/wwan/mediatek/mtk_dev.c
> > @@ -0,0 +1,50 @@
> > +// SPDX-License-Identifier: BSD-3-Clause-Clear
> > +/*
> > + * Copyright (c) 2022, MediaTek Inc.
> > + */
> > +
> > +#include "mtk_dev.h"
> > +
> > +int mtk_dev_init(struct mtk_md_dev *mdev)
> 
> Empty function: not needed.
> 
> I know that you're actually populating this one later, but each
> commit
> must be fine, so please introduce this function in a later commit,
> where
> you actually make use of it.

Ok, fix it next version (remove this empty function).
> 
> > +{
> > +	return 0;
> > +}
> > +
> > +void mtk_dev_exit(struct mtk_md_dev *mdev)
> > +{
> 
> Same here.

Ok, remove it next version.
> 
> > +}
> > +
> > +int mtk_dev_start(struct mtk_md_dev *mdev)
> > +{
> 
> And same here, and for the remaining two functions in this file.

Ok, remove it next version.
> 
> > +	return 0;
> > +}
> > +
> > +int mtk_dma_map_single(struct mtk_md_dev *mdev, dma_addr_t *addr,
> > +		       void *mem, size_t size, int direction)
> > +{
> > +	if (!addr)
> > +		return -EINVAL;
> 
> Further comments on this one: you're not doing anything MediaTek
> specific here.
> You're only doing

Ok, remove it and user kernel API directly next version.
> 
> > +
> > +	*addr = dma_map_single(mdev->dev, mem, size, direction);
> > +	if (unlikely(dma_mapping_error(mdev->dev, *addr))) {
> > +		dev_err(mdev->dev, "Failed to map dma!\n");
> > +		return -ENOMEM;
> 
> I know that dma_mapping_error() either returns -ENOMEM or zero, but
> you should
> *not* assume that it won't ever change (even if that's very
> unlikely).
> 
> ret = dma_mapping_error(...);
> if (unlikely(ret)) {
> 	dev_err(...)
> 	return ret;
> }
> 
> return 0;
> 
> 

Got it and change it as following: 
dma_addr_t data_dma_addr;
data_dma_addr = dma_map_single(hw->mdev->dev, skb->data, skb->len,
DMA_TO_DEVICE);
ret = dma_mapping_error(hw->mdev->dev, data_dma_addr);
if (unlikely(ret)) {
	dev_err(hw->mdev->dev, "Failed to map dma!\n");
	return ret;
}
> ...also, I'm not sure that you really need this helper, but that's
> for another day.
> 
> > +	}
> > +
> > +	return 0;
> > +}
> > +
> > +int mtk_dma_map_page(struct mtk_md_dev *mdev, dma_addr_t *addr,
> > +		     struct page *page, unsigned long offset, size_t
> > size, int direction)
> 
> Same comments as mtk_dma_map_single() here too.

Ok, remove it and user kernel API directly next version.
> 
> > +{
> > +	if (!addr)
> > +		return -EINVAL;
> > +
> > +	*addr = dma_map_page(mdev->dev, page, offset, size, direction);
> > +	if (unlikely(dma_mapping_error(mdev->dev, *addr))) {
> > +		dev_err(mdev->dev, "Failed to map dma!\n");
> > +		return -ENOMEM;
> > +	}
> > +
> > +	return 0;
> > +}
> > diff --git a/drivers/net/wwan/mediatek/mtk_dev.h
> > b/drivers/net/wwan/mediatek/mtk_dev.h
> > new file mode 100644
> > index 000000000000..bd7b1dc11daf
> > --- /dev/null
> > +++ b/drivers/net/wwan/mediatek/mtk_dev.h
> > @@ -0,0 +1,503 @@
> > +/* SPDX-License-Identifier: BSD-3-Clause-Clear
> > + *
> > + * Copyright (c) 2022, MediaTek Inc.
> > + */
> > +
> > +#ifndef __MTK_DEV_H__
> > +#define __MTK_DEV_H__
> > +
> > +#include <linux/dma-mapping.h>
> > +#include <linux/dmapool.h>
> > +
> > +#define MTK_DEV_STR_LEN 16
> > +
> > +enum mtk_irq_src {
> > +	MTK_IRQ_SRC_MIN,
> > +	MTK_IRQ_SRC_MHCCIF,
> > +	MTK_IRQ_SRC_SAP_RGU,
> > +	MTK_IRQ_SRC_DPMAIF,
> > +	MTK_IRQ_SRC_DPMAIF2,
> > +	MTK_IRQ_SRC_CLDMA0,
> > +	MTK_IRQ_SRC_CLDMA1,
> > +	MTK_IRQ_SRC_CLDMA2,
> > +	MTK_IRQ_SRC_CLDMA3,
> > +	MTK_IRQ_SRC_PM_LOCK,
> > +	MTK_IRQ_SRC_DPMAIF3,
> > +	MTK_IRQ_SRC_MAX
> > +};
> > +
> > +enum mtk_user_id {
> > +	MTK_USER_HW,
> > +	MTK_USER_CTRL,
> > +	MTK_USER_DPMAIF,
> > +	MTK_USER_PM,
> > +	MTK_USER_EXCEPT,
> > +	MTK_USER_MAX
> > +};
> > +
> > +enum mtk_reset_type {
> > +	RESET_FLDR,
> > +	RESET_PLDR,
> > +	RESET_RGU,
> > +};
> > +
> > +enum mtk_reinit_type {
> > +	REINIT_TYPE_RESUME,
> > +	REINIT_TYPE_EXP,
> > +};
> > +
> > +enum mtk_l1ss_grp {
> > +	L1SS_PM,
> > +	L1SS_EXT_EVT,
> > +};
> > +
> > +#define L1SS_BIT_L1(grp)     BIT(((grp) << 2) + 1)
> > +#define L1SS_BIT_L1_1(grp)   BIT(((grp) << 2) + 2)
> > +#define L1SS_BIT_L1_2(grp)   BIT(((grp) << 2) + 3)
> > +
> > +struct mtk_md_dev;
> > +
> > +/* struct mtk_hw_ops - The HW layer operations provided to
> > transaction layer.
> 
> That's good documentation. You should fix some indentation and, after
> that, you
> should actually make it kerneldoc.

Ok, thanks your suggestion. We will check it and follow kernel-doc
rule.
> 
> /**
>   * struct mtk_hw_ops - ....
>   * (etc)
> 
> 


https://urldefense.com/v3/__https://docs.kernel.org/doc-guide/kernel-doc.html__;!!CTRNKA9wMg0ARbw!37J98KirRCUF2fzx-jQSzasz6tYsYkRYYG5cqalmhtRe4fT-ZaMVAq3fcHxbUU9Q2fPr$
>  
> 
> > + * @read32:         Callback to read 32-bit register.
> > + * @write32:        Callback to write 32-bit register.
> > + * @get_dev_state:  Callback to get the device's state.
> > + * @ack_dev_state:  Callback to acknowledge device state.
> > + * @get_ds_status:  Callback to get device deep sleep status.
> > + * @ds_lock:        Callback to lock the deep sleep of device.
> > + * @ds_unlock:      Callback to unlock the deep sleep of device.
> > + * @set_l1ss:       Callback to set the link L1 and L1ss
> > enable/disable.
> > + * @get_resume_state:Callback to get PM resume information that
> > device writes.
> > + * @get_irq_id:     Callback to get the irq id specific IP on a
> > chip.
> > + * @get_virq_id:     Callback to get the system virtual IRQ.
> > + * @register_irq:   Callback to register callback function to
> > specific hardware IP.
> > + * @unregister_irq: Callback to unregister callback function to
> > specific hardware IP.
> > + * @mask_irq:       Callback to mask the interrupt of specific
> > hardware IP.
> > + * @unmask_irq:     Callback to unmask the interrupt of specific
> > hardware IP.
> > + * @clear_irq:      Callback to clear the interrupt of specific
> > hardware IP.
> > + * @register_ext_evt:Callback to register HW Layer external event.
> > + * @unregister_ext_evt:Callback to unregister HW Layer external
> > event.
> > + * @mask_ext_evt:   Callback to mask HW Layer external event.
> > + * @unmask_ext_evt: Callback to unmask HW Layer external event.
> > + * @clear_ext_evt:  Callback to clear HW Layer external event
> > status.
> > + * @send_ext_evt:   Callback to send HW Layer external event.
> > + * @get_ext_evt_status:Callback to get HW Layer external event
> > status.
> > + * @reset:          Callback to reset device.
> > + * @reinit:         Callback to execute device re-initialization.
> > + * @get_hp_status:  Callback to get link hotplug status.
> > + */
> > +struct mtk_hw_ops {
> > +	/* Read value from MD. For PCIe, it's BAR 2/3 MMIO read */
> 
> Compress all these comments in the kerneldoc description: you either
> document
> the members here inline, or up there.
> I prefer up there.

Ok, we will check it and follow kernel-doc rule.
> 
> > +	u32 (*read32)(struct mtk_md_dev *mdev, u64 addr);
> 
> ..snip..

do you mean we should remove read function wrapper?

We plan to support other HW interface in the same driver in future,
such as SDIO. Thereforce, reading a device register over different
interface may need different implementations. So we want to abstract
the adaptation layer to uniform the upper layer usage.
> 
> > +
> > +/* mtk_md_dev defines the structure of MTK modem device */
> 
> This structure is already partially documented: it takes 2 minutes to
> finish
> the documentation as kerneldoc. Please do that.

Ok, we will check it and follow kernel-doc rule.
> 
> > +struct mtk_md_dev {
> > +	struct device *dev;
> > +	const struct mtk_hw_ops *hw_ops; /* The operations provided by
> > hw layer */
> > +	void *hw_priv;
> > +	u32 hw_ver;
> > +	int msi_nvecs;
> > +	char dev_str[MTK_DEV_STR_LEN];
> > +};
> > +
> > +int mtk_dev_init(struct mtk_md_dev *mdev);
> > +void mtk_dev_exit(struct mtk_md_dev *mdev);
> > +int mtk_dev_start(struct mtk_md_dev *mdev);
> > +
> > +/* mtk_hw_read32() -Read dword from register.
> 
> Same here and everywhere else, this won't get parsed by kerneldoc:
> please fix.

Ok, we will check it and follow kernel-doc rule.
> 
> /**
>   * mtk_hw_read32() - Read dword from register
>   *
>   * @mdev .....etc
> 
> > + *
> > + * @mdev: Device instance.
> > + * @addr: Register address.
> > + *
> > + * Return: Dword register value.
> > + */
> > +static inline u32 mtk_hw_read32(struct mtk_md_dev *mdev, u64 addr)
> > +{
> > +	return mdev->hw_ops->read32(mdev, addr);
> > +}
> > +
> 
> ..snip..

do you mean we should remove read function wrapper?

We plan to support other HW interface in the same driver in future,
such as SDIO. Thereforce, reading a device register over different
interface may need different implementations. So we want to abstract
the adaptation layer to uniform the upper layer usage.
> 
> > +static inline void *mtk_dma_alloc_coherent(struct mtk_md_dev
> > *mdev,
> > +					   size_t size, dma_addr_t
> > *addr, gfp_t flag)
> > +{
> > +	if (addr)
> > +		return dma_alloc_coherent(mdev->dev, size, addr, flag);
> > +	return NULL;
> 
> You're not doing anything special here: drop this function.

Ok, remove it and user kernel API directly next version.
> 
> > +}
> > +
> > +static inline int mtk_dma_free_coherent(struct mtk_md_dev *mdev,
> > +					size_t size, void *cpu_addr,
> > dma_addr_t addr)
> > +{
> > +	if (!addr)
> > +		return -EINVAL;
> > +	dma_free_coherent(mdev->dev, size, cpu_addr, addr);
> 
> Same here.

Ok, remove it and user kernel API directly next version.
> 
> > +	return 0;
> > +}
> > +
> > +static inline struct dma_pool *mtk_dma_pool_create(struct
> > mtk_md_dev *mdev,
> > +						   const char *name,
> > size_t size,
> > +						   size_t align, size_t
> > allocation)
> > +{
> > +	return dma_pool_create(name, mdev->dev, size, align,
> > allocation);
> 
> Ditto.

Ok, remove it and user kernel API directly next version.
> 
> > +}
> > +
> > +static inline void mtk_dma_pool_destroy(struct dma_pool *pool)
> > +{
> > +	dma_pool_destroy(pool);
> 
> Again...

Ok, remove it and user kernel API directly next version.
> 
> > +}
> > +
> > +static inline void *mtk_dma_pool_alloc(struct dma_pool *pool,
> > gfp_t mem_flags, dma_addr_t *addr)
> > +{
> > +	if (!pool || !addr)
> > +		return NULL;
> > +	return dma_pool_zalloc(pool, mem_flags, addr);
> 
> ...and again...

Ok, remove it and user kernel API directly next version.
> 
> > +}
> > +
> > +static inline int mtk_dma_pool_free(struct dma_pool *pool, void
> > *cpu_addr, dma_addr_t addr)
> > +{
> > +	if (!pool || !addr)
> > +		return -EINVAL;
> > +	dma_pool_free(pool, cpu_addr, addr);
> 
> ...this too..

Ok, remove it and user kernel API directly next version.
> 
> > +	return 0;
> > +}
> > +
> > +int mtk_dma_map_single(struct mtk_md_dev *mdev, dma_addr_t *addr,
> > +		       void *mem, size_t size, int direction);
> > +static inline int mtk_dma_unmap_single(struct mtk_md_dev *mdev,
> > +				       dma_addr_t addr, size_t size,
> > int direction)
> > +{
> > +	if (!addr)
> > +		return -EINVAL;
> > +	dma_unmap_single(mdev->dev, addr, size, direction);
> 
> and this

Ok, remove it and user kernel API directly next version.
> 
> > +	return 0;
> > +}
> > +
> > +int mtk_dma_map_page(struct mtk_md_dev *mdev, dma_addr_t *addr,
> > +		     struct page *page, unsigned long offset, size_t
> > size, int direction);
> > +static inline int mtk_dma_unmap_page(struct mtk_md_dev *mdev,
> > +				     dma_addr_t addr, size_t size, int
> > direction)
> > +{
> > +	if (!addr)
> > +		return -EINVAL;
> > +	dma_unmap_page(mdev->dev, addr, size, direction);
> 
> ...and this.

Ok, remove it and user kernel API directly next version.
> 
> > +	return 0;
> > +}
> > +
> > +#endif /* __MTK_DEV_H__ */
> > diff --git a/drivers/net/wwan/mediatek/pcie/mtk_pci.c
> > b/drivers/net/wwan/mediatek/pcie/mtk_pci.c
> > new file mode 100644
> > index 000000000000..5be61178d30d
> > --- /dev/null
> > +++ b/drivers/net/wwan/mediatek/pcie/mtk_pci.c
> > @@ -0,0 +1,1164 @@
> > +// SPDX-License-Identifier: BSD-3-Clause-Clear
> > +/*
> > + * Copyright (c) 2022, MediaTek Inc.
> > + */
> > +
> > +#include <linux/acpi.h>
> > +#include <linux/aer.h>
> > +#include <linux/delay.h>
> > +#include <linux/device.h>
> > +#include <linux/dma-mapping.h>
> > +#include <linux/kernel.h>
> > +#include <linux/module.h>
> > +
> > +#include "mtk_pci.h"
> > +#include "mtk_reg.h"
> > +
> > +#define MTK_PCI_TRANSPARENT_ATR_SIZE	(0x3F)
> > +
> > +/* This table records which bits of the interrupt status register
> > each interrupt corresponds to
> > + * when there are different numbers of msix interrupts.
> > + */
> 
> Whenever >= 80 columns is possible, please use that boundary: it
> doesn't really
> make a lot of sense to have a 96 columns comment.

Ok, we will reduce the length of comments  to ensure not exceed 80
columns per line.
> 
> /*
>   * This table records which bits of the interrupt status register
>   * corresponds to which interrupt when there are different numbers
>   * of MSI-X interrupts.
>   */
> 
> > +static const u32 mtk_msix_bits_map[MTK_IRQ_CNT_MAX / 2][5] = {
> > +	{0xFFFFFFFF, 0x55555555, 0x11111111, 0x01010101, 0x00010001},
> > +	{0x00000000, 0xAAAAAAAA, 0x22222222, 0x02020202, 0x00020002},
> > +	{0x00000000, 0x00000000, 0x44444444, 0x04040404, 0x00040004},
> > +	{0x00000000, 0x00000000, 0x88888888, 0x08080808, 0x00080008},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x10101010, 0x00100010},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x20202020, 0x00200020},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x40404040, 0x00400040},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x80808080, 0x00800080},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01000100},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000200},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04000400},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000800},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10001000},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20002000},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40004000},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80008000},
> > +};
> > +
> > +static u32 mtk_pci_mac_read32(struct mtk_pci_priv *priv, u64 addr)
> > +{
> > +	return ioread32(priv->mac_reg_base + addr);
> > +}
> > +
> > +static void mtk_pci_mac_write32(struct mtk_pci_priv *priv, u64
> > addr, u32 val)
> > +{
> > +	iowrite32(val, priv->mac_reg_base + addr);
> > +}
> > +
> > +static void mtk_pci_set_msix_merged(struct mtk_pci_priv *priv, int
> > irq_cnt)
> > +{
> > +	mtk_pci_mac_write32(priv, REG_PCIE_CFG_MSIX, ffs(irq_cnt) * 2 -
> > 1);
> > +}
> > +
> > +static int mtk_pci_setup_atr(struct mtk_md_dev *mdev, struct
> > mtk_atr_cfg *cfg)
> > +{
> > +	struct mtk_pci_priv *priv = mdev->hw_priv;
> > +	u32 addr, val, size_h, size_l;
> > +	int atr_size, pos, offset;
> > +
> > +	if (cfg->transparent) {
> > +		atr_size = MTK_PCI_TRANSPARENT_ATR_SIZE; /* No address
> > conversion is performed */
> > +	} else {
> > +		if (cfg->src_addr & (cfg->size - 1)) {
> > +			dev_err(mdev->dev, "Invalid atr src addr is not
> > aligned to size\n");
> > +			return -EFAULT;
> > +		}
> > +		if (cfg->trsl_addr & (cfg->size - 1)) {
> > +			dev_err(mdev->dev, "Invalid atr trsl addr is
> > not aligned to size, %llx, %llx\n",
> > +				cfg->trsl_addr, cfg->size - 1);
> > +			return -EFAULT;
> > +		}
> > +
> > +		size_l = cfg->size & 0xFFFFFFFF;
> 
> You're using bitfields a lot, please use the macros that you can find
> in
> include/linux/bitfield.h - that will simplify things a lot, other
> than adding
> a couple of build-time checks that will help sanitizing in case
> something is
> horribly wrong (or becomes horribly wrong in the future).
> 
> size_l = FIELD_PREP(SOME_FIELD, cfg->size);
> 
> Whenever it does not make sense to use bitfield macros, you should
> anyway never
> use magic numbers, and you should actually make use of other kernel
> provided
> bit macros, such as GENMASK() and others (which you *are* using
> later).

Ok, follow your suggestion to use bitfield interface instead.
> 
> > +		size_h = cfg->size >> 32;
> > +		pos = ffs(size_l);
> > +		if (pos) {
> > +			/* Address Translate Space Size is equal to
> > 2^(atr_size+1)
> > +			 * "-2" means "-1-1", the first "-1" is because
> > of the atr_size register,
> > +			 * the second is because of the ffs() will
> > increase by one.
> > +			 */
> > +			atr_size = pos - 2;
> > +		} else {
> > +			pos = ffs(size_h);
> > +			/* "+30" means "+32-1-1", the meaning of "-1-
> > 1" 
> > is same as above,
> > +			 * "+32" is because atr_size is large,
> > exceeding 32-bits.
> > +			 */
> > +			atr_size = pos + 30;
> > +		}
> > +	}
> > +
> > +	/* Calculate table offset */
> > +	offset = ATR_PORT_OFFSET * cfg->port + ATR_TABLE_OFFSET * cfg-
> > > table;
> > 
> > +	/* SRC_ADDR_H */
> > +	addr = REG_ATR_PCIE_WIN0_T0_SRC_ADDR_MSB + offset;
> > +	val = (u32)(cfg->src_addr >> 32);
> > +	mtk_pci_mac_write32(priv, addr, val);
> > +	/* SRC_ADDR_L */
> > +	addr = REG_ATR_PCIE_WIN0_T0_SRC_ADDR_LSB + offset;
> > +	val = (u32)(cfg->src_addr & 0xFFFFF000) | (atr_size << 1) |
> > 0x1;
> > +	mtk_pci_mac_write32(priv, addr, val);
> > +
> > +	/* TRSL_ADDR_H */
> > +	addr = REG_ATR_PCIE_WIN0_T0_TRSL_ADDR_MSB + offset;
> > +	val = (u32)(cfg->trsl_addr >> 32);
> > +	mtk_pci_mac_write32(priv, addr, val);
> > +	/* TRSL_ADDR_L */
> > +	addr = REG_ATR_PCIE_WIN0_T0_TRSL_ADDR_LSB + offset;
> > +	val = (u32)(cfg->trsl_addr & 0xFFFFF000);
> > +	mtk_pci_mac_write32(priv, addr, val);
> > +
> > +	/* TRSL_PARAM */
> > +	addr = REG_ATR_PCIE_WIN0_T0_TRSL_PARAM + offset;
> > +	val = (cfg->trsl_param << 16) | cfg->trsl_id;
> > +	mtk_pci_mac_write32(priv, addr, val);
> > +
> > +	return 0;
> > +}
> > +
> 
> ..snip..
> 

we don't know which lines should be removed. can you help share more
detail?
All of them are used to set up mapping relationship between host memory
view and device side. They are necessary from my viewpoint
> > +
> > +static int mtk_pci_reinit(struct mtk_md_dev *mdev, enum
> > mtk_reinit_type type)
> > +{
> > +	struct pci_dev *pdev = to_pci_dev(mdev->dev);
> > +	struct mtk_pci_priv *priv = mdev->hw_priv;
> > +	int ret, ltr, l1ss;
> > +
> > +	/* restore ltr */
> > +	ltr = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_LTR);
> > +	if (ltr) {
> > +		pci_write_config_word(pdev, ltr +
> > PCI_LTR_MAX_SNOOP_LAT,
> > +				      priv->ltr_max_snoop_lat);
> > +		pci_write_config_word(pdev, ltr +
> > PCI_LTR_MAX_NOSNOOP_LAT,
> > +				      priv->ltr_max_nosnoop_lat);
> > +	}
> > +	/* restore l1ss */
> > +	l1ss = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_L1SS);
> > +	if (l1ss) {
> > +		pci_write_config_dword(pdev, l1ss + PCI_L1SS_CTL1,
> > priv->l1ss_ctl1);
> > +		pci_write_config_dword(pdev, l1ss + PCI_L1SS_CTL2,
> > priv->l1ss_ctl2);
> > +	}
> > +
> > +	ret = mtk_pci_atr_init(mdev);
> > +	if (ret)
> > +		return ret;
> > +
> > +	if (priv->irq_type == PCI_IRQ_MSIX) {
> > +		if (priv->irq_cnt != MTK_IRQ_CNT_MAX)
> > +			mtk_pci_set_msix_merged(priv, priv->irq_cnt);
> > +	}
> > +
> > +	mtk_pci_unmask_irq(mdev, priv->rgu_irq_id);
> > +	mtk_pci_unmask_irq(mdev, priv->mhccif_irq_id);
> > +
> > +	/* In L2 resume, device would disable PCIe interrupt,
> > +	 * and this step would re-enable PCIe interrupt.
> > +	 * For L3, just do this with no effect.
> > +	 */
> > +	if (type == REINIT_TYPE_RESUME)
> > +		mtk_pci_mac_write32(priv, priv->cfg-
> > > istatus_host_ctrl_addr, 0);
> > 
> > +
> > +	dev_info(mdev->dev, "PCIe reinit type=%d\n", type);
> 
> I'm not sure that this message provides any valuable information to
> the user,
> this should be a dev_dbg().

Ok, fix it next version (replace dev_info with dev_dbg).
> 
> > +
> > +	return 0;
> > +}
> > +
> 
> ..snip..

do you mean we should return void for this function?
> 
> > +
> > +static void mtk_mhccif_isr_work(struct work_struct *work)
> > +{
> > +	struct mtk_pci_priv *priv = container_of(work, struct
> > mtk_pci_priv, mhccif_work);
> > +	struct mtk_md_dev *mdev = priv->irq_desc->mdev;
> > +	struct mtk_mhccif_cb *cb;
> > +	unsigned long flag;
> > +	u32 stat, mask;
> > +
> > +	stat = mtk_mhccif_get_evt_status(mdev);
> > +	mask = mtk_pci_read32(mdev, priv->cfg->mhccif_rc_base_addr
> > +		+ MHCCIF_EP2RC_SW_INT_EAP_MASK);
> > +	dev_info(mdev->dev, "External events: mhccif_stat=0x%08X
> > mask=0x%08X\n", stat, mask);
> 
> This print is going to be a bit spammy... dev_dbg().

Ok, fix it next version (replace dev_info with dev_dbg).
> 
> > +
> > +	if (unlikely(stat == U32_MAX && mtk_pci_link_check(mdev))) {
> > +		/* When link failed, we don't need to unmask/clear. */
> > +		dev_err(mdev->dev, "Failed to check link in MHCCIF
> > handler.\n");
> > +		return;
> > +	}
> > +
> > +	stat &= ~mask;
> > +	spin_lock_irqsave(&priv->mhccif_lock, flag);
> > +	list_for_each_entry(cb, &priv->mhccif_cb_list, entry) {
> > +		if (cb->chs & stat)
> > +			cb->evt_cb(cb->chs & stat, cb->data);
> > +	}
> > +	spin_unlock_irqrestore(&priv->mhccif_lock, flag);
> > +
> > +	mtk_pci_clear_irq(mdev, priv->mhccif_irq_id);
> > +	mtk_pci_unmask_irq(mdev, priv->mhccif_irq_id);
> > +}
> > +
> 
> ..snip..

do you mean we should remove this function from patch-1? 
And add it back while the following patch need this function?
> 
> > +
> > +static int mtk_pci_request_irq(struct mtk_md_dev *mdev, int
> > max_irq_cnt, int irq_type)
> > +{
> > +	struct pci_dev *pdev = to_pci_dev(mdev->dev);
> > +	int irq_cnt;
> > +	int ret;
> > +
> > +	irq_cnt = pci_alloc_irq_vectors(pdev, MTK_IRQ_CNT_MIN,
> > max_irq_cnt, irq_type);
> > +	mdev->msi_nvecs = irq_cnt;
> > +
> > +	if (irq_cnt < MTK_IRQ_CNT_MIN) {
> > +		dev_err(mdev->dev,
> > +			"Unable to alloc pci irq vectors. ret=%d
> > maxirqcnt=%d irqtype=0x%x\n",
> > +			irq_cnt, max_irq_cnt, irq_type);
> > +		ret = -EFAULT;
> > +		goto err;
> 
> 
> 		return -EFAULT;
> 
> 

Ok, remove "got err" as following:
	if (irq_cnt < MTK_IRQ_CNT_MIN) {
		dev_err(mdev->dev,
			"Unable to alloc pci irq vectors. ret=%d
maxirqcnt=%d irqtype=0x%x\n",
			irq_cnt, max_irq_cnt, irq_type);
		return -EFAULT;
> > +	}
> > +
> > +	ret = mtk_pci_request_irq_msix(mdev, irq_cnt);
> 
> 
> 	return mtk_pci_request_irq_msix(dev, irq_cnt);

Ok, fix it next version. (remove local variable "ret"-->return
mtk_pci_request_irq_msix(dev, irq_cnt))
> }
> 
> 
> > +err:
> > +	return ret;
> > +}
> > +
> 
> Regards,
> Angelo
> 

many thanks.
yanchao.yang

From angelogioacchino.delregno at collabora.com  Mon Dec  5 04:47:40 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 5 Dec 2022 13:47:40 +0100
Subject: [PATCH net-next v1 01/13] net: wwan: tmi: Add PCIe core
In-Reply-To: <e7d3bfeed57157e8859a24f501b7efb74e21f0f9.camel@mediatek.com>
References: <20221122111152.160377-1-yanchao.yang@mediatek.com>
 <20221122111152.160377-2-yanchao.yang@mediatek.com>
 <1cca2790-5805-b4fc-f8e8-2c490db487f6@collabora.com>
 <e7d3bfeed57157e8859a24f501b7efb74e21f0f9.camel@mediatek.com>
Message-ID: <4411cfd9-7286-32fd-2032-622caa099e91@collabora.com>

Il 05/12/22 13:40, Yanchao Yang (???) ha scritto:
> On Thu, 2022-11-24 at 12:06 +0100, AngeloGioacchino Del Regno wrote:
>> Il 22/11/22 12:11, Yanchao Yang ha scritto:
>>> From: MediaTek Corporation <linuxwwan at mediatek.com>
>>>
>>> Registers the TMI device driver with the kernel. Set up all the
>>> fundamental
>>> configurations for the device: PCIe layer, Modem Host Cross Core
>>> Interface
>>> (MHCCIF), Reset Generation Unit (RGU), modem common control
>>> operations and
>>> build infrastructure.
>>>
>>> * PCIe layer code implements driver probe and removal, MSI-X
>>> interrupt
>>> initialization and de-initialization, and the way of resetting the
>>> device.
>>> * MHCCIF provides interrupt channels to communicate events such as
>>> handshake,
>>> PM and port enumeration.
>>> * RGU provides interrupt channels to generate notifications from
>>> the device
>>> so that the TMI driver could get the device reset.
>>> * Modem common control operations provide the basic read/write
>>> functions of
>>> the device's hardware registers, mask/unmask/get/clear functions of
>>> the
>>> device's interrupt registers and inquiry functions of the device's
>>> status.
>>>
>>> Signed-off-by: Ting Wang <ting.wang at mediatek.com>
>>> Signed-off-by: MediaTek Corporation <linuxwwan at mediatek.com>
> 
> Hello Angelo,
> 
>> Hello Yanchao,
>> thanks for the patch! However, there are some things to improve...
>>
>> First of all, you have to signoff (in your name) all patches that you
>> send.
> 
> Thank your suggestion. Fix it next version (add Signed-off-by: Yanchao
> Yang <yanchao.yang at mediatek.com> for all patches)
>> Check below for more comments...
>>
>>> ---

..snip.. :-)

There's a misunderstanding here: when I write

"..snip.."

I mean "I'm snipping out lines of code for which I have no comments, or
for which comments are redundant"

I do that to increase readability of reviews and decrease the size of the
mail that's going out, nothing else.

>>
>>> +	u32 (*read32)(struct mtk_md_dev *mdev, u64 addr);
>>
>> ..snip..
> 
> do you mean we should remove read function wrapper?

No, that's fine.

Regards,
Angelo


From khilman at kernel.org  Mon Dec  5 05:16:08 2022
From: khilman at kernel.org (Kevin Hilman)
Date: Mon, 05 Dec 2022 05:16:08 -0800
Subject: [PATCH v7 0/8] Add MediaTek MT6357 PMIC support
In-Reply-To: <20221005-mt6357-support-v7-0-477e60126749@baylibre.com>
References: <20221005-mt6357-support-v7-0-477e60126749@baylibre.com>
Message-ID: <7hr0xe56uf.fsf@baylibre.com>

Matthias,

Alexandre Mergnat <amergnat at baylibre.com> writes:

> This patch series adds MFD, PMIC keys, and regulator support for MT6357.
> MT6357 is a MediaTek PMIC very similar to MT6358.

The regulator driver (and bindings) were merged by Mark.  Could you take
the rest of this series via your mediatek tree?  The input driver (and
bindings) are ack'd by Dmitry.

Kevin






From khilman at baylibre.com  Mon Dec  5 05:20:32 2022
From: khilman at baylibre.com (Kevin Hilman)
Date: Mon, 05 Dec 2022 05:20:32 -0800
Subject: [PATCH v3 5/7] arm64: dts: mediatek: Remove pins-are-numbered
 property
In-Reply-To: <20221129023401.278780-6-bero@baylibre.com>
References: <20221129023401.278780-1-bero@baylibre.com>
 <20221129023401.278780-6-bero@baylibre.com>
Message-ID: <7ho7si56n3.fsf@baylibre.com>

Matthias,

Bernhard Rosenkr?nzer <bero at baylibre.com> writes:

> Remove the unnecessary pins-are-numbered property from
> arm64 Mediatek DeviceTrees
>
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> Acked-by: Kevin Hilman <khilman at baylibre.com>

Now that the driver/binding parts are queued, I'm assuming you'll take this patch
(and patch 6) via the mediatek tree?

Thanks,

Kevin


From khilman at baylibre.com  Mon Dec  5 05:21:36 2022
From: khilman at baylibre.com (Kevin Hilman)
Date: Mon, 05 Dec 2022 05:21:36 -0800
Subject: [PATCH v3 7/7] ARM: dts: stm32: Remove the pins-are-numbered
 property
In-Reply-To: <20221129023401.278780-8-bero@baylibre.com>
References: <20221129023401.278780-1-bero@baylibre.com>
 <20221129023401.278780-8-bero@baylibre.com>
Message-ID: <7hlenm56lb.fsf@baylibre.com>

Alexandre,

Bernhard Rosenkr?nzer <bero at baylibre.com> writes:

> Remove the pins-are-numbered property from STM32 DeviceTrees
>
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
> Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>

Now that the driver & binding qre queued, I'm assuming you'll queue this
one via the stm32 tree?

Thanks,

Kevin


From bero at baylibre.com  Mon Dec  5 05:51:55 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Mon,  5 Dec 2022 14:51:55 +0100
Subject: [PATCH v4 0/3] Remove the pins-are-numbered DT property
Message-ID: <20221205135158.1842465-1-bero@baylibre.com>

During the review of my MT8365 support patchset
(https://lore.kernel.org/linux-mediatek/20221117210356.3178578-1-bero at baylibre.com/),
the issue of the "pins-are-numbered" DeviceTree property has come up.

This property is unique to Mediatek MT65xx and STM32 pinctrls, and
doesn't seem to serve any purpose (both the Mediatek and STM32 drivers
simply refuse to deal with a device unless pins-are-numbered is set to
true).

There is no other use of this property in the kernel or in other projects
using DeviceTrees (checked u-boot and FreeBSD -- in both of those, the
flag is present in Mediatek and STM devicetrees, but not used anywhere).

There is also no known use in userspace (in fact, a userland application
relying on the property would be broken because it would get true on
any Mediatek or STM chipset and false on all others, even though other
chipsets use numbered pins).

This patchset removes all uses of pins-are-numbered and marks the
property as deprecated.

v4:
  - The generic pinctrl related patches are now in the pinctrl tree
    for v6.2 - remove them and repost the remaining bits of the patch
    set. No other changes.

v3:
  - No functional changes; add recent Reviewed-Bys and Acked-Bys,
    add linux-gpio to Cc

v2:
  - Deprecate the property instead of removing it completely from
    schemas
  - squash some related commits

Bernhard Rosenkr?nzer (3):
  arm64: dts: mediatek: Remove pins-are-numbered property
  ARM: dts: mediatek: Remove pins-are-numbered property
  ARM: dts: stm32: Remove the pins-are-numbered property

 arch/arm/boot/dts/mt2701.dtsi                | 1 -
 arch/arm/boot/dts/mt7623.dtsi                | 1 -
 arch/arm/boot/dts/mt8135.dtsi                | 1 -
 arch/arm/boot/dts/stm32f4-pinctrl.dtsi       | 1 -
 arch/arm/boot/dts/stm32f7-pinctrl.dtsi       | 1 -
 arch/arm/boot/dts/stm32h743.dtsi             | 1 -
 arch/arm/boot/dts/stm32mp131.dtsi            | 1 -
 arch/arm/boot/dts/stm32mp151.dtsi            | 2 --
 arch/arm64/boot/dts/mediatek/mt2712e.dtsi    | 1 -
 arch/arm64/boot/dts/mediatek/mt8167.dtsi     | 1 -
 arch/arm64/boot/dts/mediatek/mt8173-elm.dtsi | 1 -
 arch/arm64/boot/dts/mediatek/mt8173.dtsi     | 1 -
 arch/arm64/boot/dts/mediatek/mt8516.dtsi     | 1 -
 13 files changed, 14 deletions(-)

-- 
2.38.1



From bero at baylibre.com  Mon Dec  5 05:51:56 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Mon,  5 Dec 2022 14:51:56 +0100
Subject: [PATCH v4 1/3] arm64: dts: mediatek: Remove pins-are-numbered property
In-Reply-To: <20221205135158.1842465-1-bero@baylibre.com>
References: <20221205135158.1842465-1-bero@baylibre.com>
Message-ID: <20221205135158.1842465-2-bero@baylibre.com>

Remove the unnecessary pins-are-numbered property from
arm64 Mediatek DeviceTrees

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Acked-by: Kevin Hilman <khilman at baylibre.com>
---
 arch/arm64/boot/dts/mediatek/mt2712e.dtsi    | 1 -
 arch/arm64/boot/dts/mediatek/mt8167.dtsi     | 1 -
 arch/arm64/boot/dts/mediatek/mt8173-elm.dtsi | 1 -
 arch/arm64/boot/dts/mediatek/mt8173.dtsi     | 1 -
 arch/arm64/boot/dts/mediatek/mt8516.dtsi     | 1 -
 5 files changed, 5 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt2712e.dtsi b/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
index 92212cddd37e6..879dff24dcd3b 100644
--- a/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
@@ -270,7 +270,6 @@ pio: pinctrl at 1000b000 {
 		compatible = "mediatek,mt2712-pinctrl";
 		reg = <0 0x1000b000 0 0x1000>;
 		mediatek,pctl-regmap = <&syscfg_pctl_a>;
-		pins-are-numbered;
 		gpio-controller;
 		#gpio-cells = <2>;
 		interrupt-controller;
diff --git a/arch/arm64/boot/dts/mediatek/mt8167.dtsi b/arch/arm64/boot/dts/mediatek/mt8167.dtsi
index fbe1a1128cc6a..6a54315cf6502 100644
--- a/arch/arm64/boot/dts/mediatek/mt8167.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8167.dtsi
@@ -117,7 +117,6 @@ pio: pinctrl at 1000b000 {
 			compatible = "mediatek,mt8167-pinctrl";
 			reg = <0 0x1000b000 0 0x1000>;
 			mediatek,pctl-regmap = <&syscfg_pctl>;
-			pins-are-numbered;
 			gpio-controller;
 			#gpio-cells = <2>;
 			interrupt-controller;
diff --git a/arch/arm64/boot/dts/mediatek/mt8173-elm.dtsi b/arch/arm64/boot/dts/mediatek/mt8173-elm.dtsi
index e21feb85d822b..18e214464a2d3 100644
--- a/arch/arm64/boot/dts/mediatek/mt8173-elm.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8173-elm.dtsi
@@ -929,7 +929,6 @@ clock: mt6397clock {
 
 		pio6397: pinctrl {
 			compatible = "mediatek,mt6397-pinctrl";
-			pins-are-numbered;
 			gpio-controller;
 			#gpio-cells = <2>;
 		};
diff --git a/arch/arm64/boot/dts/mediatek/mt8173.dtsi b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
index 7640b5158ff9d..c47d7d900f283 100644
--- a/arch/arm64/boot/dts/mediatek/mt8173.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
@@ -375,7 +375,6 @@ pio: pinctrl at 1000b000 {
 			compatible = "mediatek,mt8173-pinctrl";
 			reg = <0 0x1000b000 0 0x1000>;
 			mediatek,pctl-regmap = <&syscfg_pctl_a>;
-			pins-are-numbered;
 			gpio-controller;
 			#gpio-cells = <2>;
 			interrupt-controller;
diff --git a/arch/arm64/boot/dts/mediatek/mt8516.dtsi b/arch/arm64/boot/dts/mediatek/mt8516.dtsi
index d1b67c82d7617..118025263a29b 100644
--- a/arch/arm64/boot/dts/mediatek/mt8516.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8516.dtsi
@@ -229,7 +229,6 @@ pio: pinctrl at 1000b000 {
 			compatible = "mediatek,mt8516-pinctrl";
 			reg = <0 0x1000b000 0 0x1000>;
 			mediatek,pctl-regmap = <&syscfg_pctl>;
-			pins-are-numbered;
 			gpio-controller;
 			#gpio-cells = <2>;
 			interrupt-controller;
-- 
2.38.1



From bero at baylibre.com  Mon Dec  5 05:51:57 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Mon,  5 Dec 2022 14:51:57 +0100
Subject: [PATCH v4 2/3] ARM: dts: mediatek: Remove pins-are-numbered property
In-Reply-To: <20221205135158.1842465-1-bero@baylibre.com>
References: <20221205135158.1842465-1-bero@baylibre.com>
Message-ID: <20221205135158.1842465-3-bero@baylibre.com>

Remove the unnecessary pins-are-numbered property from
Mediatek ARM DeviceTrees

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Acked-by: Kevin Hilman <khilman at baylibre.com>
---
 arch/arm/boot/dts/mt2701.dtsi | 1 -
 arch/arm/boot/dts/mt7623.dtsi | 1 -
 arch/arm/boot/dts/mt8135.dtsi | 1 -
 3 files changed, 3 deletions(-)

diff --git a/arch/arm/boot/dts/mt2701.dtsi b/arch/arm/boot/dts/mt2701.dtsi
index b8eba3ba153c2..0a0fe8c5a4059 100644
--- a/arch/arm/boot/dts/mt2701.dtsi
+++ b/arch/arm/boot/dts/mt2701.dtsi
@@ -178,7 +178,6 @@ pio: pinctrl at 1000b000 {
 		compatible = "mediatek,mt2701-pinctrl";
 		reg = <0 0x1000b000 0 0x1000>;
 		mediatek,pctl-regmap = <&syscfg_pctl_a>;
-		pins-are-numbered;
 		gpio-controller;
 		#gpio-cells = <2>;
 		interrupt-controller;
diff --git a/arch/arm/boot/dts/mt7623.dtsi b/arch/arm/boot/dts/mt7623.dtsi
index 25d31e40a5535..11379c3e6b4ca 100644
--- a/arch/arm/boot/dts/mt7623.dtsi
+++ b/arch/arm/boot/dts/mt7623.dtsi
@@ -253,7 +253,6 @@ pio: pinctrl at 10005000 {
 		compatible = "mediatek,mt7623-pinctrl";
 		reg = <0 0x1000b000 0 0x1000>;
 		mediatek,pctl-regmap = <&syscfg_pctl_a>;
-		pins-are-numbered;
 		gpio-controller;
 		#gpio-cells = <2>;
 		interrupt-controller;
diff --git a/arch/arm/boot/dts/mt8135.dtsi b/arch/arm/boot/dts/mt8135.dtsi
index a031b36363187..0f291ad22d3af 100644
--- a/arch/arm/boot/dts/mt8135.dtsi
+++ b/arch/arm/boot/dts/mt8135.dtsi
@@ -152,7 +152,6 @@ pio: pinctrl at 10005000 {
 			compatible = "mediatek,mt8135-pinctrl";
 			reg = <0 0x1000b000 0 0x1000>;
 			mediatek,pctl-regmap = <&syscfg_pctl_a &syscfg_pctl_b>;
-			pins-are-numbered;
 			gpio-controller;
 			#gpio-cells = <2>;
 			interrupt-controller;
-- 
2.38.1



From bero at baylibre.com  Mon Dec  5 05:51:58 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Mon,  5 Dec 2022 14:51:58 +0100
Subject: [PATCH v4 3/3] ARM: dts: stm32: Remove the pins-are-numbered property
In-Reply-To: <20221205135158.1842465-1-bero@baylibre.com>
References: <20221205135158.1842465-1-bero@baylibre.com>
Message-ID: <20221205135158.1842465-4-bero@baylibre.com>

Remove the pins-are-numbered property from STM32 DeviceTrees

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>
---
 arch/arm/boot/dts/stm32f4-pinctrl.dtsi | 1 -
 arch/arm/boot/dts/stm32f7-pinctrl.dtsi | 1 -
 arch/arm/boot/dts/stm32h743.dtsi       | 1 -
 arch/arm/boot/dts/stm32mp131.dtsi      | 1 -
 arch/arm/boot/dts/stm32mp151.dtsi      | 2 --
 5 files changed, 6 deletions(-)

diff --git a/arch/arm/boot/dts/stm32f4-pinctrl.dtsi b/arch/arm/boot/dts/stm32f4-pinctrl.dtsi
index 500bcc302d422..4523c63475e4c 100644
--- a/arch/arm/boot/dts/stm32f4-pinctrl.dtsi
+++ b/arch/arm/boot/dts/stm32f4-pinctrl.dtsi
@@ -51,7 +51,6 @@ pinctrl: pinctrl at 40020000 {
 			ranges = <0 0x40020000 0x3000>;
 			interrupt-parent = <&exti>;
 			st,syscfg = <&syscfg 0x8>;
-			pins-are-numbered;
 
 			gpioa: gpio at 40020000 {
 				gpio-controller;
diff --git a/arch/arm/boot/dts/stm32f7-pinctrl.dtsi b/arch/arm/boot/dts/stm32f7-pinctrl.dtsi
index 8f37aefa73150..c8e6c52fb248e 100644
--- a/arch/arm/boot/dts/stm32f7-pinctrl.dtsi
+++ b/arch/arm/boot/dts/stm32f7-pinctrl.dtsi
@@ -15,7 +15,6 @@ pinctrl: pinctrl at 40020000 {
 			ranges = <0 0x40020000 0x3000>;
 			interrupt-parent = <&exti>;
 			st,syscfg = <&syscfg 0x8>;
-			pins-are-numbered;
 
 			gpioa: gpio at 40020000 {
 				gpio-controller;
diff --git a/arch/arm/boot/dts/stm32h743.dtsi b/arch/arm/boot/dts/stm32h743.dtsi
index 28e3deb20e1e1..f30796f7adf36 100644
--- a/arch/arm/boot/dts/stm32h743.dtsi
+++ b/arch/arm/boot/dts/stm32h743.dtsi
@@ -588,7 +588,6 @@ pinctrl: pinctrl at 58020000 {
 			ranges = <0 0x58020000 0x3000>;
 			interrupt-parent = <&exti>;
 			st,syscfg = <&syscfg 0x8>;
-			pins-are-numbered;
 
 			gpioa: gpio at 58020000 {
 				gpio-controller;
diff --git a/arch/arm/boot/dts/stm32mp131.dtsi b/arch/arm/boot/dts/stm32mp131.dtsi
index accc3824f7e98..6b86e031f60e6 100644
--- a/arch/arm/boot/dts/stm32mp131.dtsi
+++ b/arch/arm/boot/dts/stm32mp131.dtsi
@@ -547,7 +547,6 @@ pinctrl: pinctrl at 50002000 {
 			ranges = <0 0x50002000 0x8400>;
 			interrupt-parent = <&exti>;
 			st,syscfg = <&exti 0x60 0xff>;
-			pins-are-numbered;
 
 			gpioa: gpio at 50002000 {
 				gpio-controller;
diff --git a/arch/arm/boot/dts/stm32mp151.dtsi b/arch/arm/boot/dts/stm32mp151.dtsi
index 5491b6c4dec20..4e437d3f2ed66 100644
--- a/arch/arm/boot/dts/stm32mp151.dtsi
+++ b/arch/arm/boot/dts/stm32mp151.dtsi
@@ -1660,7 +1660,6 @@ pinctrl: pinctrl at 50002000 {
 			ranges = <0 0x50002000 0xa400>;
 			interrupt-parent = <&exti>;
 			st,syscfg = <&exti 0x60 0xff>;
-			pins-are-numbered;
 
 			gpioa: gpio at 50002000 {
 				gpio-controller;
@@ -1789,7 +1788,6 @@ pinctrl_z: pinctrl at 54004000 {
 			#size-cells = <1>;
 			compatible = "st,stm32mp157-z-pinctrl";
 			ranges = <0 0x54004000 0x400>;
-			pins-are-numbered;
 			interrupt-parent = <&exti>;
 			st,syscfg = <&exti 0x60 0xff>;
 
-- 
2.38.1



From angelogioacchino.delregno at collabora.com  Mon Dec  5 06:01:27 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 5 Dec 2022 15:01:27 +0100
Subject: [PATCH v1] spi: spi-mtk-nor: Add recovery mechanism for dma read
 timeout
In-Reply-To: <20221205082419.29170-1-bayi.cheng@mediatek.com>
References: <20221205082419.29170-1-bayi.cheng@mediatek.com>
Message-ID: <d5bcc6aa-bdb5-9705-a7dd-79a276f4ea01@collabora.com>

Il 05/12/22 09:24, Bayi Cheng ha scritto:
> From: bayi cheng <bayi.cheng at mediatek.com>
> 
> The state machine of MTK spi nor controller may be disturbed by some
> glitch signals from the relevant BUS during dma read, Although the
> possibility of causing the dma read to fail is next to nothing,
> However, if error-handling is not implemented, which makes the feature
> somewhat risky.
> 
> Add an error-handling mechanism here, reset the state machine and
> re-read the data when an error occurs.
> 
> Signed-off-by: bayi cheng <bayi.cheng at mediatek.com>
> ---
> Change in v1:
>    -Reset the state machine when dma read fails and read again.
> ---
> ---
>   drivers/spi/spi-mtk-nor.c | 16 +++++++++++++++-
>   1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/spi/spi-mtk-nor.c b/drivers/spi/spi-mtk-nor.c
> index d167699a1a96..c77d79da9a4c 100644
> --- a/drivers/spi/spi-mtk-nor.c
> +++ b/drivers/spi/spi-mtk-nor.c
> @@ -80,6 +80,9 @@
>   #define MTK_NOR_REG_DMA_FADR		0x71c
>   #define MTK_NOR_REG_DMA_DADR		0x720
>   #define MTK_NOR_REG_DMA_END_DADR	0x724
> +#define MTK_NOR_REG_CG_DIS		0x728
> +#define MTK_NOR_SFC_SW_RST		BIT(2)
> +
>   #define MTK_NOR_REG_DMA_DADR_HB		0x738
>   #define MTK_NOR_REG_DMA_END_DADR_HB	0x73c
>   
> @@ -616,7 +619,18 @@ static int mtk_nor_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)
>   			mtk_nor_set_addr(sp, op);
>   			return mtk_nor_read_pio(sp, op);
>   		} else {
> -			return mtk_nor_read_dma(sp, op);
> +			ret = mtk_nor_read_dma(sp, op);
> +			if (ret) {
> +				dev_err(sp->dev, "try to read again\n");
> +				mtk_nor_rmw(sp, MTK_NOR_REG_CG_DIS, 0, MTK_NOR_SFC_SW_RST);
> +				mb(); /* flush previous writes */
> +				mtk_nor_rmw(sp, MTK_NOR_REG_CG_DIS, MTK_NOR_SFC_SW_RST, 0);
> +				mb(); /* flush previous writes */
> +				writel(MTK_NOR_ENABLE_SF_CMD, sp->base + MTK_NOR_REG_WP);

 From what I understand, you're introducing a way to perform a flush+reset on
the controller.

At this point, I'd put that in a separate function like `mtk_nor_reset()`, as
to both increase readability and to possibly reuse it somewhere else in the
future, if needed.

So this would become...

		} else {
			ret = mtk_nor_read_dma(sp, op);
			if (unlikely(ret)) {
				/* Handle rare bus glitch */
				mtk_nor_reset(sp);
				mtk_nor_setup_bus(sp, op);
				return mtk_nor_read_dma(sp, op);
			}
			return ret;
		}

...or something alike :-)

Regards,
Angelo



From angelogioacchino.delregno at collabora.com  Mon Dec  5 06:21:19 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 5 Dec 2022 15:21:19 +0100
Subject: [PATCH v2 6/9] spi: mtk-snfi: Add snfi sample delay and read
 latency adjustment
In-Reply-To: <20221205065756.26875-7-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-7-xiangsheng.hou@mediatek.com>
Message-ID: <49870a0c-495b-c159-b5e0-2c47a92a906e@collabora.com>

Il 05/12/22 07:57, Xiangsheng Hou ha scritto:
> Add snfi sample delay and read latency adjustment which can get
> from dts property.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>



From angelogioacchino.delregno at collabora.com  Mon Dec  5 06:21:21 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 5 Dec 2022 15:21:21 +0100
Subject: [PATCH v2 4/9] mtd: nand: ecc-mtk: Add ECC support fot MT7986 IC
In-Reply-To: <20221205065756.26875-5-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-5-xiangsheng.hou@mediatek.com>
Message-ID: <50ede482-7f03-ff55-5ad0-aa6249027cbe@collabora.com>

Il 05/12/22 07:57, Xiangsheng Hou ha scritto:
> Add ECC support fot MT7986 IC.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> ---
>   drivers/mtd/nand/ecc-mtk.c | 18 ++++++++++++++++++
>   1 file changed, 18 insertions(+)
> 
> diff --git a/drivers/mtd/nand/ecc-mtk.c b/drivers/mtd/nand/ecc-mtk.c
> index 9f9b201fe706..c2f6cfa76a04 100644
> --- a/drivers/mtd/nand/ecc-mtk.c
> +++ b/drivers/mtd/nand/ecc-mtk.c
> @@ -79,6 +79,10 @@ static const u8 ecc_strength_mt7622[] = {
>   	4, 6, 8, 10, 12
>   };
>   
> +static const u8 ecc_strength_mt7986[] = {
> +	4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24
> +};
> +
>   enum mtk_ecc_regs {
>   	ECC_ENCPAR00,
>   	ECC_ENCIRQ_EN,
> @@ -483,6 +487,17 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt7622 = {
>   	.pg_irq_sel = 0,
>   };
>   
> +static const struct mtk_ecc_caps mtk_ecc_caps_mt7986 = {
> +	.err_mask = 0x1f,

Can't we use GENMASK() to define err_mask instead?

#define MT7986_ERRNUM	GENMASK(4, 0)

P.S.: Did I get that right? Is that referred to the ERRNUM(x) bits?

Regards,
Angelo




From angelogioacchino.delregno at collabora.com  Mon Dec  5 06:21:28 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 5 Dec 2022 15:21:28 +0100
Subject: [PATCH v2 7/9] dt-bindings: spi: mtk-snfi: Add read latch latency
 property
In-Reply-To: <20221205065756.26875-8-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-8-xiangsheng.hou@mediatek.com>
Message-ID: <ce449a0c-efcc-0ac1-fb8e-c2b4148a5bc1@collabora.com>

Il 05/12/22 07:57, Xiangsheng Hou ha scritto:
> Add mediatek,rx-latch-latency property which adjust read delay in the
> unit of clock cycle.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
> ---
>   .../devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml     | 7 +++++++
>   1 file changed, 7 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
> index bab23f1b11fd..6e6ff8d73fcd 100644
> --- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
> +++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
> @@ -45,6 +45,13 @@ properties:
>       description: device-tree node of the accompanying ECC engine.
>       $ref: /schemas/types.yaml#/definitions/phandle
>   
> +  mediatek,rx-latch-latency:
> +    description: Rx delay to sample data with this value, the value
> +                 unit is clock cycle.

Can't we use nanoseconds or microseconds as a unit here, instead of clock cycles?

Regards,
Angelo





From angelogioacchino.delregno at collabora.com  Mon Dec  5 06:21:35 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 5 Dec 2022 15:21:35 +0100
Subject: [PATCH v2 3/9] spi: mtk-snfi: Add optional nfi_hclk which needed
 for MT7986
In-Reply-To: <20221205065756.26875-4-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-4-xiangsheng.hou@mediatek.com>
Message-ID: <ef2e6859-56e1-bbf0-dbde-44ea3d7d2f3f@collabora.com>

Il 05/12/22 07:57, Xiangsheng Hou ha scritto:
> Add optional nfi_hclk which needed for MT7986.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>

Is there any operation for which you need NFI_HCLK enabled, but at the same time
PAD_CLK and/or NFI_CLK can be disabled?

If NFI_HCLK and NFI_CLK must always be ON at the same time, adding this clock to
spi-mtk-snfi.c is *not* an optimal way of doing things: you can, at this point,
set NFI_HCLK as parent of NFI_CLK in the MT7986 clock driver instead, without
making any addition to this driver at all.

Regards,
Angelo




From angelogioacchino.delregno at collabora.com  Mon Dec  5 06:21:39 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 5 Dec 2022 15:21:39 +0100
Subject: [PATCH v2 1/9] spi: mtk-snfi: Add snfi support for MT7986 IC
In-Reply-To: <20221205065756.26875-2-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-2-xiangsheng.hou@mediatek.com>
Message-ID: <8544ba11-7a87-665b-e0d1-5ed52559f083@collabora.com>

Il 05/12/22 07:57, Xiangsheng Hou ha scritto:
> Add snfi support for MT7986 IC.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Mon Dec  5 06:29:01 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 5 Dec 2022 15:29:01 +0100
Subject: [PATCH] wifi: mt76: mt7915: split mcu chan_mib array up
In-Reply-To: <51130dcbc200962672540cb726dd9841c5ad7fe9.1670049959.git.ryder.lee@mediatek.com>
References: <51130dcbc200962672540cb726dd9841c5ad7fe9.1670049959.git.ryder.lee@mediatek.com>
Message-ID: <efca1639-9dcd-4d72-7c43-4b7bf20db8c4@collabora.com>

Il 03/12/22 08:37, Ryder Lee ha scritto:
> The current flow confuses coverity check that leads to false reporting,
> so split the offs[] into two pieces according to chipset revision to
> silence coverity tool.
> 
> Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
> ---
>   .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 50 ++++++++++---------
>   1 file changed, 27 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> index b2652de082ba..ca315af3905b 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> @@ -2974,38 +2974,42 @@ int mt7915_mcu_apply_tx_dpd(struct mt7915_phy *phy)
>   
>   int mt7915_mcu_get_chan_mib_info(struct mt7915_phy *phy, bool chan_switch)
>   {
> -	/* strict order */
> -	static const u32 offs[] = {
> -		MIB_NON_WIFI_TIME,
> -		MIB_TX_TIME,
> -		MIB_RX_TIME,
> -		MIB_OBSS_AIRTIME,
> -		MIB_TXOP_INIT_COUNT,
> -		/* v2 */
> -		MIB_NON_WIFI_TIME_V2,
> -		MIB_TX_TIME_V2,
> -		MIB_RX_TIME_V2,
> -		MIB_OBSS_AIRTIME_V2
> -	};
>   	struct mt76_channel_state *state = phy->mt76->chan_state;
>   	struct mt76_channel_state *state_ts = &phy->state_ts;
>   	struct mt7915_dev *dev = phy->dev;
>   	struct mt7915_mcu_mib *res, req[5];
>   	struct sk_buff *skb;
> -	int i, ret, start = 0, ofs = 20;
> +	static const u32 *offs;
> +	int i, ret, len, offs_cc;
>   	u64 cc_tx;
>   

A more readable option would be

	/* strict order */
	static const u32 chip_offs_v1[] = {
		MIB_NON_WIFI_TIME,
		MIB_TX_TIME,
		MIB_RX_TIME,
		MIB_OBSS_AIRTIME,
		MIB_TXOP_INIT_COUNT,
	};

	static const u32 chip_offs_v2[] = {
		MIB_NON_WIFI_TIME_V2,
		MIB_TX_TIME_V2,
		MIB_RX_TIME_V2,
		MIB_OBSS_AIRTIME_V2
	};

	if (is_mt7915(&dev->mt76)) {
		len = ARRAY_SIZE(chip_offs_v1);
		offs = chip_offs_v1;
		offs_cc = 20;
	} else {
		len = ARRAY_SIZE(chip_offs_v2);
		offs = chip_offs_v2;
		offs_cc = 20;
	}

Regards,
Angelo




From leon at kernel.org  Mon Dec  5 08:58:35 2022
From: leon at kernel.org (Leon Romanovsky)
Date: Mon, 5 Dec 2022 18:58:35 +0200
Subject: [PATCH v2 net-next] net: ethernet: mtk_wed: fix possible
 deadlock if mtk_wed_wo_init fails
In-Reply-To: <5a29aae6c4a26e807844210d4ddac7950ca5f63d.1670238731.git.lorenzo@kernel.org>
References: <5a29aae6c4a26e807844210d4ddac7950ca5f63d.1670238731.git.lorenzo@kernel.org>
Message-ID: <Y44jO1ZT9RgqYtxF@unreal>

On Mon, Dec 05, 2022 at 12:14:41PM +0100, Lorenzo Bianconi wrote:
> Introduce __mtk_wed_detach() in order to avoid a possible deadlock in
> mtk_wed_attach routine if mtk_wed_wo_init fails.
> Check wo pointer is properly allocated before running mtk_wed_wo_reset()
> and mtk_wed_wo_deinit() in __mtk_wed_detach routine.
> Honor mtk_wed_mcu_send_msg return value in mtk_wed_wo_reset().
> 
> Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
> Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> ---
> Changes since v1:
> - move wo pointer checks in __mtk_wed_detach()
> ---
>  drivers/net/ethernet/mediatek/mtk_wed.c     | 30 ++++++++++++++-------
>  drivers/net/ethernet/mediatek/mtk_wed_mcu.c |  3 +++
>  2 files changed, 23 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
> index d041615b2bac..2ce9fbb1c66d 100644
> --- a/drivers/net/ethernet/mediatek/mtk_wed.c
> +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
> @@ -174,9 +174,10 @@ mtk_wed_wo_reset(struct mtk_wed_device *dev)
>  	mtk_wdma_tx_reset(dev);
>  	mtk_wed_reset(dev, MTK_WED_RESET_WED);
>  
> -	mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
> -			     MTK_WED_WO_CMD_CHANGE_STATE, &state,
> -			     sizeof(state), false);
> +	if (mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
> +				 MTK_WED_WO_CMD_CHANGE_STATE, &state,
> +				 sizeof(state), false))
> +		return;
>  
>  	if (readx_poll_timeout(mtk_wed_wo_read_status, dev, val,
>  			       val == MTK_WED_WOIF_DISABLE_DONE,
> @@ -576,12 +577,10 @@ mtk_wed_deinit(struct mtk_wed_device *dev)
>  }
>  
>  static void
> -mtk_wed_detach(struct mtk_wed_device *dev)
> +__mtk_wed_detach(struct mtk_wed_device *dev)
>  {
>  	struct mtk_wed_hw *hw = dev->hw;
>  
> -	mutex_lock(&hw_lock);
> -
>  	mtk_wed_deinit(dev);
>  
>  	mtk_wdma_rx_reset(dev);
> @@ -590,9 +589,11 @@ mtk_wed_detach(struct mtk_wed_device *dev)
>  	mtk_wed_free_tx_rings(dev);
>  
>  	if (mtk_wed_get_rx_capa(dev)) {
> -		mtk_wed_wo_reset(dev);
> +		if (hw->wed_wo)
> +			mtk_wed_wo_reset(dev);
>  		mtk_wed_free_rx_rings(dev);
> -		mtk_wed_wo_deinit(hw);
> +		if (hw->wed_wo)
> +			mtk_wed_wo_deinit(hw);
>  	}
>  
>  	if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) {
> @@ -612,6 +613,13 @@ mtk_wed_detach(struct mtk_wed_device *dev)
>  	module_put(THIS_MODULE);
>  
>  	hw->wed_dev = NULL;
> +}
> +
> +static void
> +mtk_wed_detach(struct mtk_wed_device *dev)
> +{
> +	mutex_lock(&hw_lock);
> +	__mtk_wed_detach(dev);
>  	mutex_unlock(&hw_lock);
>  }
>  
> @@ -1490,8 +1498,10 @@ mtk_wed_attach(struct mtk_wed_device *dev)
>  		ret = mtk_wed_wo_init(hw);
>  	}
>  out:
> -	if (ret)
> -		mtk_wed_detach(dev);
> +	if (ret) {
> +		dev_err(dev->hw->dev, "failed to attach wed device\n");
> +		__mtk_wed_detach(dev);
> +	}
>  unlock:
>  	mutex_unlock(&hw_lock);
>  
> diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> index f9539e6233c9..3dd02889d972 100644
> --- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> @@ -207,6 +207,9 @@ int mtk_wed_mcu_msg_update(struct mtk_wed_device *dev, int id, void *data,
>  	if (dev->hw->version == 1)
>  		return 0;
>  
> +	if (!wo)
> +		return -ENODEV;
> +

Can you please help me to understand how and when this mtk_wed_mcu_msg_update()
function is called?

I see this line .msg_update = mtk_wed_mcu_msg_update, and
relevant mtk_wed_device_update_msg() define, but nothing calls to this
define.



>  	return mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO, id, data, len,
>  				    true);
>  }
> -- 
> 2.38.1
> 


From lorenzo.bianconi at redhat.com  Mon Dec  5 09:05:49 2022
From: lorenzo.bianconi at redhat.com (Lorenzo Bianconi)
Date: Mon, 5 Dec 2022 18:05:49 +0100
Subject: [PATCH v2 net-next] net: ethernet: mtk_wed: fix possible
 deadlock if mtk_wed_wo_init fails
In-Reply-To: <Y44jO1ZT9RgqYtxF@unreal>
References: <5a29aae6c4a26e807844210d4ddac7950ca5f63d.1670238731.git.lorenzo@kernel.org>
 <Y44jO1ZT9RgqYtxF@unreal>
Message-ID: <Y44k7X5YYbuSntd2@lore-desk>

> On Mon, Dec 05, 2022 at 12:14:41PM +0100, Lorenzo Bianconi wrote:
> > Introduce __mtk_wed_detach() in order to avoid a possible deadlock in
> > mtk_wed_attach routine if mtk_wed_wo_init fails.
> > Check wo pointer is properly allocated before running mtk_wed_wo_reset()
> > and mtk_wed_wo_deinit() in __mtk_wed_detach routine.
> > Honor mtk_wed_mcu_send_msg return value in mtk_wed_wo_reset().
> > 
> > Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
> > Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> > ---
> > Changes since v1:
> > - move wo pointer checks in __mtk_wed_detach()
> > ---
> >  drivers/net/ethernet/mediatek/mtk_wed.c     | 30 ++++++++++++++-------
> >  drivers/net/ethernet/mediatek/mtk_wed_mcu.c |  3 +++
> >  2 files changed, 23 insertions(+), 10 deletions(-)
> > 
> > diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
> > index d041615b2bac..2ce9fbb1c66d 100644
> > --- a/drivers/net/ethernet/mediatek/mtk_wed.c
> > +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
> > @@ -174,9 +174,10 @@ mtk_wed_wo_reset(struct mtk_wed_device *dev)
> >  	mtk_wdma_tx_reset(dev);
> >  	mtk_wed_reset(dev, MTK_WED_RESET_WED);
> >  
> > -	mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
> > -			     MTK_WED_WO_CMD_CHANGE_STATE, &state,
> > -			     sizeof(state), false);
> > +	if (mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
> > +				 MTK_WED_WO_CMD_CHANGE_STATE, &state,
> > +				 sizeof(state), false))
> > +		return;
> >  
> >  	if (readx_poll_timeout(mtk_wed_wo_read_status, dev, val,
> >  			       val == MTK_WED_WOIF_DISABLE_DONE,
> > @@ -576,12 +577,10 @@ mtk_wed_deinit(struct mtk_wed_device *dev)
> >  }
> >  
> >  static void
> > -mtk_wed_detach(struct mtk_wed_device *dev)
> > +__mtk_wed_detach(struct mtk_wed_device *dev)
> >  {
> >  	struct mtk_wed_hw *hw = dev->hw;
> >  
> > -	mutex_lock(&hw_lock);
> > -
> >  	mtk_wed_deinit(dev);
> >  
> >  	mtk_wdma_rx_reset(dev);
> > @@ -590,9 +589,11 @@ mtk_wed_detach(struct mtk_wed_device *dev)
> >  	mtk_wed_free_tx_rings(dev);
> >  
> >  	if (mtk_wed_get_rx_capa(dev)) {
> > -		mtk_wed_wo_reset(dev);
> > +		if (hw->wed_wo)
> > +			mtk_wed_wo_reset(dev);
> >  		mtk_wed_free_rx_rings(dev);
> > -		mtk_wed_wo_deinit(hw);
> > +		if (hw->wed_wo)
> > +			mtk_wed_wo_deinit(hw);
> >  	}
> >  
> >  	if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) {
> > @@ -612,6 +613,13 @@ mtk_wed_detach(struct mtk_wed_device *dev)
> >  	module_put(THIS_MODULE);
> >  
> >  	hw->wed_dev = NULL;
> > +}
> > +
> > +static void
> > +mtk_wed_detach(struct mtk_wed_device *dev)
> > +{
> > +	mutex_lock(&hw_lock);
> > +	__mtk_wed_detach(dev);
> >  	mutex_unlock(&hw_lock);
> >  }
> >  
> > @@ -1490,8 +1498,10 @@ mtk_wed_attach(struct mtk_wed_device *dev)
> >  		ret = mtk_wed_wo_init(hw);
> >  	}
> >  out:
> > -	if (ret)
> > -		mtk_wed_detach(dev);
> > +	if (ret) {
> > +		dev_err(dev->hw->dev, "failed to attach wed device\n");
> > +		__mtk_wed_detach(dev);
> > +	}
> >  unlock:
> >  	mutex_unlock(&hw_lock);
> >  
> > diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > index f9539e6233c9..3dd02889d972 100644
> > --- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > @@ -207,6 +207,9 @@ int mtk_wed_mcu_msg_update(struct mtk_wed_device *dev, int id, void *data,
> >  	if (dev->hw->version == 1)
> >  		return 0;
> >  
> > +	if (!wo)
> > +		return -ENODEV;
> > +
> 
> Can you please help me to understand how and when this mtk_wed_mcu_msg_update()
> function is called?
> 
> I see this line .msg_update = mtk_wed_mcu_msg_update, and
> relevant mtk_wed_device_update_msg() define, but nothing calls to this
> define.

mtk_wed_device_update_msg() is currently run by mt7915 driver in
mt7915_mcu_wed_enable_rx_stats() and in mt76_connac_mcu_sta_wed_update().
At the moment we always run mtk_wed_mcu_msg_update with non-NULL wo pointer,
but I would prefer to add this safety check.

Regards,
Lorenzo

> 
> 
> 
> >  	return mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO, id, data, len,
> >  				    true);
> >  }
> > -- 
> > 2.38.1
> > 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221205/0d90a0c9/attachment.sig>

From leon at kernel.org  Mon Dec  5 09:38:34 2022
From: leon at kernel.org (Leon Romanovsky)
Date: Mon, 5 Dec 2022 19:38:34 +0200
Subject: [PATCH v2 net-next] net: ethernet: mtk_wed: fix possible
 deadlock if mtk_wed_wo_init fails
In-Reply-To: <Y44k7X5YYbuSntd2@lore-desk>
References: <5a29aae6c4a26e807844210d4ddac7950ca5f63d.1670238731.git.lorenzo@kernel.org>
 <Y44jO1ZT9RgqYtxF@unreal>
 <Y44k7X5YYbuSntd2@lore-desk>
Message-ID: <Y44smiGYEI/WlG1D@unreal>

On Mon, Dec 05, 2022 at 06:05:49PM +0100, Lorenzo Bianconi wrote:
> > On Mon, Dec 05, 2022 at 12:14:41PM +0100, Lorenzo Bianconi wrote:
> > > Introduce __mtk_wed_detach() in order to avoid a possible deadlock in
> > > mtk_wed_attach routine if mtk_wed_wo_init fails.
> > > Check wo pointer is properly allocated before running mtk_wed_wo_reset()
> > > and mtk_wed_wo_deinit() in __mtk_wed_detach routine.
> > > Honor mtk_wed_mcu_send_msg return value in mtk_wed_wo_reset().
> > > 
> > > Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
> > > Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> > > ---
> > > Changes since v1:
> > > - move wo pointer checks in __mtk_wed_detach()
> > > ---
> > >  drivers/net/ethernet/mediatek/mtk_wed.c     | 30 ++++++++++++++-------
> > >  drivers/net/ethernet/mediatek/mtk_wed_mcu.c |  3 +++
> > >  2 files changed, 23 insertions(+), 10 deletions(-)
> > > 
> > > diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
> > > index d041615b2bac..2ce9fbb1c66d 100644
> > > --- a/drivers/net/ethernet/mediatek/mtk_wed.c
> > > +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
> > > @@ -174,9 +174,10 @@ mtk_wed_wo_reset(struct mtk_wed_device *dev)
> > >  	mtk_wdma_tx_reset(dev);
> > >  	mtk_wed_reset(dev, MTK_WED_RESET_WED);
> > >  
> > > -	mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
> > > -			     MTK_WED_WO_CMD_CHANGE_STATE, &state,
> > > -			     sizeof(state), false);
> > > +	if (mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
> > > +				 MTK_WED_WO_CMD_CHANGE_STATE, &state,
> > > +				 sizeof(state), false))
> > > +		return;
> > >  
> > >  	if (readx_poll_timeout(mtk_wed_wo_read_status, dev, val,
> > >  			       val == MTK_WED_WOIF_DISABLE_DONE,
> > > @@ -576,12 +577,10 @@ mtk_wed_deinit(struct mtk_wed_device *dev)
> > >  }
> > >  
> > >  static void
> > > -mtk_wed_detach(struct mtk_wed_device *dev)
> > > +__mtk_wed_detach(struct mtk_wed_device *dev)
> > >  {
> > >  	struct mtk_wed_hw *hw = dev->hw;
> > >  
> > > -	mutex_lock(&hw_lock);
> > > -
> > >  	mtk_wed_deinit(dev);
> > >  
> > >  	mtk_wdma_rx_reset(dev);
> > > @@ -590,9 +589,11 @@ mtk_wed_detach(struct mtk_wed_device *dev)
> > >  	mtk_wed_free_tx_rings(dev);
> > >  
> > >  	if (mtk_wed_get_rx_capa(dev)) {
> > > -		mtk_wed_wo_reset(dev);
> > > +		if (hw->wed_wo)
> > > +			mtk_wed_wo_reset(dev);
> > >  		mtk_wed_free_rx_rings(dev);
> > > -		mtk_wed_wo_deinit(hw);
> > > +		if (hw->wed_wo)
> > > +			mtk_wed_wo_deinit(hw);
> > >  	}
> > >  
> > >  	if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) {
> > > @@ -612,6 +613,13 @@ mtk_wed_detach(struct mtk_wed_device *dev)
> > >  	module_put(THIS_MODULE);
> > >  
> > >  	hw->wed_dev = NULL;
> > > +}
> > > +
> > > +static void
> > > +mtk_wed_detach(struct mtk_wed_device *dev)
> > > +{
> > > +	mutex_lock(&hw_lock);
> > > +	__mtk_wed_detach(dev);
> > >  	mutex_unlock(&hw_lock);
> > >  }
> > >  
> > > @@ -1490,8 +1498,10 @@ mtk_wed_attach(struct mtk_wed_device *dev)
> > >  		ret = mtk_wed_wo_init(hw);
> > >  	}
> > >  out:
> > > -	if (ret)
> > > -		mtk_wed_detach(dev);
> > > +	if (ret) {
> > > +		dev_err(dev->hw->dev, "failed to attach wed device\n");
> > > +		__mtk_wed_detach(dev);
> > > +	}
> > >  unlock:
> > >  	mutex_unlock(&hw_lock);
> > >  
> > > diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > > index f9539e6233c9..3dd02889d972 100644
> > > --- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > > +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
> > > @@ -207,6 +207,9 @@ int mtk_wed_mcu_msg_update(struct mtk_wed_device *dev, int id, void *data,
> > >  	if (dev->hw->version == 1)
> > >  		return 0;
> > >  
> > > +	if (!wo)
> > > +		return -ENODEV;
> > > +
> > 
> > Can you please help me to understand how and when this mtk_wed_mcu_msg_update()
> > function is called?
> > 
> > I see this line .msg_update = mtk_wed_mcu_msg_update, and
> > relevant mtk_wed_device_update_msg() define, but nothing calls to this
> > define.
> 
> mtk_wed_device_update_msg() is currently run by mt7915 driver in
> mt7915_mcu_wed_enable_rx_stats() and in mt76_connac_mcu_sta_wed_update().

I see, I didn't fetch latest net-next.

> At the moment we always run mtk_wed_mcu_msg_update with non-NULL wo pointer,
> but I would prefer to add this safety check.

If it is impossible, please add WARN_ON(!wo) instead of "if ...". It
describes better what is expected here.

Thanks

> 
> Regards,
> Lorenzo
> 
> > 
> > 
> > 
> > >  	return mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO, id, data, len,
> > >  				    true);
> > >  }
> > > -- 
> > > 2.38.1
> > > 
> > 




From leon at kernel.org  Mon Dec  5 09:41:58 2022
From: leon at kernel.org (Leon Romanovsky)
Date: Mon, 5 Dec 2022 19:41:58 +0200
Subject: [PATCH v2 net-next] net: ethernet: mtk_wed: add reset to
 rx_ring_setup callback
In-Reply-To: <29c6e7a5469e784406cf3e2920351d1207713d05.1670239984.git.lorenzo@kernel.org>
References: <29c6e7a5469e784406cf3e2920351d1207713d05.1670239984.git.lorenzo@kernel.org>
Message-ID: <Y44tZlaHPdJhXCGd@unreal>

On Mon, Dec 05, 2022 at 12:34:42PM +0100, Lorenzo Bianconi wrote:
> This patch adds reset parameter to mtk_wed_rx_ring_setup signature
> in order to align rx_ring_setup callback to tx_ring_setup one introduced
> in 'commit 23dca7a90017 ("net: ethernet: mtk_wed: add reset to
> tx_ring_setup callback")'
> 
> Co-developed-by: Sujuan Chen <sujuan.chen at mediatek.com>
> Signed-off-by: Sujuan Chen <sujuan.chen at mediatek.com>
> Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> ---
> Changes since v1:
> - update commit message
> ---
>  drivers/net/ethernet/mediatek/mtk_wed.c  | 20 +++++++++++++-------
>  drivers/net/wireless/mediatek/mt76/dma.c |  2 +-
>  include/linux/soc/mediatek/mtk_wed.h     |  8 ++++----
>  3 files changed, 18 insertions(+), 12 deletions(-)
> 

Thanks,
Reviewed-by: Leon Romanovsky <leonro at nvidia.com>


From daniel at makrotopia.org  Mon Dec  5 09:42:12 2022
From: daniel at makrotopia.org (Daniel Golle)
Date: Mon, 5 Dec 2022 17:42:12 +0000
Subject: [PATCH v2 1/2] thermal: mediatek: add support for MT7986 and
 MT7981
In-Reply-To: <0b72a12c-286f-79d0-09e9-b1761530850a@collabora.com>
References: <Y4dYazyXF02eRGC5@makrotopia.org>
 <0b72a12c-286f-79d0-09e9-b1761530850a@collabora.com>
Message-ID: <Y44tdASIQ2DpL9re@makrotopia.org>

Hi Angelo,

On Thu, Dec 01, 2022 at 02:24:17PM +0100, AngeloGioacchino Del Regno wrote:
> Il 30/11/22 14:19, Daniel Golle ha scritto:
> > Add support for V3 generation thermal found in MT7986 and MT7981 SoCs.
> > Brings code to assign values from efuse as well as new function to
> > convert raw temperature to millidegree celsius, as found in MediaTek's
> > SDK sources (but cleaned up and de-duplicated)
> > 
> > [1]: https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/baf36c7eef477aae1f8f2653b6c29e2caf48475b
> > Signed-off-by: Daniel Golle <daniel at makrotopia.org>
> > Reviewed-by: Henry Yen <henry.yen at mediatek.com>
> > ---
> > Changes since v1: Drop use of adc_oe field in efuse, Henry Yen confirmed
> > its use has been dropped intentionally in MTK SDK as well.
> > 
> >   drivers/thermal/mtk_thermal.c | 122 +++++++++++++++++++++++++++++++++-
> >   1 file changed, 119 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
> > index 8440692e3890..6a69419f8960 100644
> > --- a/drivers/thermal/mtk_thermal.c
> > +++ b/drivers/thermal/mtk_thermal.c
> > @@ -150,6 +150,21 @@
> >   #define CALIB_BUF1_VALID_V2(x)		(((x) >> 4) & 0x1)
> >   #define CALIB_BUF1_O_SLOPE_SIGN_V2(x)	(((x) >> 3) & 0x1)
> > +/*
> > + * Layout of the fuses providing the calibration data
> > + * These macros can be used for MT7981 and MT7986.
> > + */
> > +#define CALIB_BUF0_ADC_GE_V3(x)		(((x) >> 0) & 0x3ff)
> > +#define CALIB_BUF0_ADC_OE_V3(x)		(((x) >> 10) & 0x3ff)
> > +#define CALIB_BUF0_DEGC_CALI_V3(x)	(((x) >> 20) & 0x3f)
> > +#define CALIB_BUF0_O_SLOPE_V3(x)	(((x) >> 26) & 0x3f)
> > +#define CALIB_BUF1_VTS_TS1_V3(x)	(((x) >> 0) & 0x1ff)
> > +#define CALIB_BUF1_VTS_TS2_V3(x)	(((x) >> 21) & 0x1ff)
> > +#define CALIB_BUF1_VTS_TSABB_V3(x)	(((x) >> 9) & 0x1ff)
> > +#define CALIB_BUF1_VALID_V3(x)		(((x) >> 18) & 0x1)
> > +#define CALIB_BUF1_O_SLOPE_SIGN_V3(x)	(((x) >> 19) & 0x1)
> > +#define CALIB_BUF1_ID_V3(x)		(((x) >> 20) & 0x1)
> > +
> >   enum {
> >   	VTS1,
> >   	VTS2,
> > @@ -163,6 +178,7 @@ enum {
> >   enum mtk_thermal_version {
> >   	MTK_THERMAL_V1 = 1,
> >   	MTK_THERMAL_V2,
> > +	MTK_THERMAL_V3,
> >   };
> >   /* MT2701 thermal sensors */
> > @@ -245,6 +261,27 @@ enum mtk_thermal_version {
> >   /* The calibration coefficient of sensor  */
> >   #define MT8183_CALIBRATION	153
> > +/* AUXADC channel 11 is used for the temperature sensors */
> > +#define MT7986_TEMP_AUXADC_CHANNEL	11
> > +
> > +/* The total number of temperature sensors in the MT7986 */
> > +#define MT7986_NUM_SENSORS		1
> > +
> > +/* The number of banks in the MT7986 */
> > +#define MT7986_NUM_ZONES		1
> > +
> > +/* The number of sensing points per bank */
> > +#define MT7986_NUM_SENSORS_PER_ZONE	1
> > +
> > +/* MT7986 thermal sensors */
> > +#define MT7986_TS1			0
> > +
> > +/* The number of controller in the MT7986 */
> > +#define MT7986_NUM_CONTROLLER		1
> > +
> > +/* The calibration coefficient of sensor  */
> > +#define MT7986_CALIBRATION		165
> > +
> >   struct mtk_thermal;
> >   struct thermal_bank_cfg {
> > @@ -386,6 +423,14 @@ static const int mt7622_mux_values[MT7622_NUM_SENSORS] = { 0, };
> >   static const int mt7622_vts_index[MT7622_NUM_SENSORS] = { VTS1 };
> >   static const int mt7622_tc_offset[MT7622_NUM_CONTROLLER] = { 0x0, };
> > +/* MT7986 thermal sensor data */
> > +static const int mt7986_bank_data[MT7986_NUM_SENSORS] = { MT7986_TS1, };
> > +static const int mt7986_msr[MT7986_NUM_SENSORS_PER_ZONE] = { TEMP_MSR0, };
> > +static const int mt7986_adcpnp[MT7986_NUM_SENSORS_PER_ZONE] = { TEMP_ADCPNP0, };
> > +static const int mt7986_mux_values[MT7986_NUM_SENSORS] = { 0, };
> > +static const int mt7986_vts_index[MT7986_NUM_SENSORS] = { VTS1 };
> > +static const int mt7986_tc_offset[MT7986_NUM_CONTROLLER] = { 0x0, };
> > +
> >   /*
> >    * The MT8173 thermal controller has four banks. Each bank can read up to
> >    * four temperature sensors simultaneously. The MT8173 has a total of 5
> > @@ -549,6 +594,30 @@ static const struct mtk_thermal_data mt8183_thermal_data = {
> >   	.version = MTK_THERMAL_V1,
> >   };
> > +/*
> > + * MT7986 uses AUXADC Channel 11 for raw data access.
> > + */
> > +static const struct mtk_thermal_data mt7986_thermal_data = {
> > +	.auxadc_channel = MT7986_TEMP_AUXADC_CHANNEL,
> > +	.num_banks = MT7986_NUM_ZONES,
> > +	.num_sensors = MT7986_NUM_SENSORS,
> > +	.vts_index = mt7986_vts_index,
> > +	.cali_val = MT7986_CALIBRATION,
> > +	.num_controller = MT7986_NUM_CONTROLLER,
> > +	.controller_offset = mt7986_tc_offset,
> > +	.need_switch_bank = true,
> > +	.bank_data = {
> > +		{
> > +			.num_sensors = 1,
> > +			.sensors = mt7986_bank_data,
> > +		},
> > +	},
> > +	.msr = mt7986_msr,
> > +	.adcpnp = mt7986_adcpnp,
> > +	.sensor_mux_values = mt7986_mux_values,
> > +	.version = MTK_THERMAL_V3,
> > +};
> > +
> >   /**
> >    * raw_to_mcelsius - convert a raw ADC value to mcelsius
> >    * @mt:	The thermal controller
> > @@ -603,6 +672,22 @@ static int raw_to_mcelsius_v2(struct mtk_thermal *mt, int sensno, s32 raw)
> >   	return (format_2 - tmp) * 100;
> >   }
> > +static int raw_to_mcelsius_v3(struct mtk_thermal *mt, int sensno, s32 raw)
> > +{
> > +	s32 tmp;
> > +
> > +	if (raw == 0)
> > +		return 0;
> > +
> > +	raw &= 0xfff;
> > +	tmp = 100000 * 15 / 16 * 10000;
> > +	tmp /= 4096 - 512 + mt->adc_ge;
> > +	tmp /= 1490;
> > +	tmp *= raw - mt->vts[sensno] - 2900;
> > +
> > +	return mt->degc_cali * 500 - tmp;
> > +}
> > +
> >   /**
> >    * mtk_thermal_get_bank - get bank
> >    * @bank:	The bank
> > @@ -659,9 +744,12 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
> >   		if (mt->conf->version == MTK_THERMAL_V1) {
> >   			temp = raw_to_mcelsius_v1(
> >   				mt, conf->bank_data[bank->id].sensors[i], raw);
> > -		} else {
> > +		} else if (mt->conf->version == MTK_THERMAL_V2) {
> >   			temp = raw_to_mcelsius_v2(
> >   				mt, conf->bank_data[bank->id].sensors[i], raw);
> > +		} else {
> > +			temp = raw_to_mcelsius_v3(
> > +				mt, conf->bank_data[bank->id].sensors[i], raw);
> >   		}
> 
> What about optimizing this with assigning a function pointer?
> Like that, we wouldn't check any version in there... as in that case we'd
> simply do something like
> 
> temp = conf->raw_to_mcelsius(mt, conf->bank...blahblah...);
> 
> ...and this would also mean that the snippet saying "the first read of a sensor
> often contains very high bogus temperature value [...]" would get merged in the v2
> of raw_to_mcelsius (as that function is used only in mtk_thermal_bank_temperature).

I found that Amjad Ouled-Ameur is taking care of converting that series
of if-else options into a function pointer allowing to easily call the
right raw_to_mcelsius function.

[PATCH v7 0/4] thermal: mediatek: Add support for MT8365 SoC
https://lore.kernel.org/linux-arm-kernel/4121bb6b-30db-7a23-f4c8-40afdda7a0b5 at linaro.org/T/

Should I wait until this series is merged and then submit support
for MT7986 thermal on top of that?


> 
> >   		/*
> > @@ -887,6 +975,26 @@ static int mtk_thermal_extract_efuse_v2(struct mtk_thermal *mt, u32 *buf)
> >   	return 0;
> >   }
> > +static int mtk_thermal_extract_efuse_v3(struct mtk_thermal *mt, u32 *buf)
> > +{
> > +	if (!CALIB_BUF1_VALID_V3(buf[1]))
> > +		return -EINVAL;
> > +
> > +	mt->adc_oe = CALIB_BUF0_ADC_OE_V3(buf[0]);
> > +	mt->adc_ge = CALIB_BUF0_ADC_GE_V3(buf[0]);
> > +	mt->degc_cali = CALIB_BUF0_DEGC_CALI_V3(buf[0]);
> > +	mt->o_slope = CALIB_BUF0_O_SLOPE_V3(buf[0]);
> > +	mt->vts[VTS1] = CALIB_BUF1_VTS_TS1_V3(buf[1]);
> > +	mt->vts[VTS2] = CALIB_BUF1_VTS_TS2_V3(buf[1]);
> > +	mt->vts[VTSABB] = CALIB_BUF1_VTS_TSABB_V3(buf[1]);
> > +	mt->o_slope_sign = CALIB_BUF1_O_SLOPE_SIGN_V3(buf[1]);
> > +
> > +	if (CALIB_BUF1_ID_V3(buf[1]) == 0)
> > +		mt->o_slope = 0;
> > +
> > +	return 0;
> > +}
> > +
> >   static int mtk_thermal_get_calibration_data(struct device *dev,
> >   					    struct mtk_thermal *mt)
> >   {
> > @@ -897,6 +1005,7 @@ static int mtk_thermal_get_calibration_data(struct device *dev,
> >   	/* Start with default values */
> >   	mt->adc_ge = 512;
> > +	mt->adc_oe = 512;
> >   	for (i = 0; i < mt->conf->num_sensors; i++)
> >   		mt->vts[i] = 260;
> >   	mt->degc_cali = 40;
> > @@ -924,8 +1033,10 @@ static int mtk_thermal_get_calibration_data(struct device *dev,
> >   	if (mt->conf->version == MTK_THERMAL_V1)
> >   		ret = mtk_thermal_extract_efuse_v1(mt, buf);
> > -	else
> > +	else if (mt->conf->version == MTK_THERMAL_V2)
> >   		ret = mtk_thermal_extract_efuse_v2(mt, buf);
> > +	else
> > +		ret = mtk_thermal_extract_efuse_v3(mt, buf);
> 
> I propose to use a switch here instead.
> 
> 	switch(mt->conf->version) {
> 	case MTK_THERMAL_V1:
> 		....
> 	case MTK_THERMAL_V2:
> 		....
> 	case MTK_THERMAL_V3:
> 		....
> 	default:
> 		ret = -EINVAL;
> 		break;
> 	};
> 
> This would also prevent a potential issue with getting an invalid calibration
> due to us calling the wrong version of the get_calibration() function, in which
> case, using the default calibration values would be at that point preferred.
> 
> Regards,
> Angelo
> 
> 
> 


From robh at kernel.org  Mon Dec  5 09:54:30 2022
From: robh at kernel.org (Rob Herring)
Date: Mon, 5 Dec 2022 11:54:30 -0600
Subject: [PATCH v4,1/3] media: dt-bindings: media: mediatek: vcodec:
 adapt to the 'clock-names' of different platforms
In-Reply-To: <20221202034450.3808-1-yunfei.dong@mediatek.com>
References: <20221202034450.3808-1-yunfei.dong@mediatek.com>
Message-ID: <20221205175430.GA2136513-robh@kernel.org>

On Fri, Dec 02, 2022 at 11:44:48AM +0800, Yunfei Dong wrote:
> mt8195 and mt8192 have different clock numbers, separate 'clock-names'
> according to compatible name.
> 
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
> ---
> compared with v3:
> - rewrite clock-names according to different platforms.
> 
> Reference series:
> [1]: v5 of this series is presend by Allen-KH Cheng.
>      message-id: 20221128143832.25584-4-allen-kh.cheng at mediatek.com
> ---
>  .../media/mediatek,vcodec-subdev-decoder.yaml | 41 ++++++++++++++++---
>  1 file changed, 35 insertions(+), 6 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
> index 7c5b4a91c59b..a08b2c814f40 100644
> --- a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
> +++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
> @@ -110,15 +110,12 @@ patternProperties:
>            Refer to bindings/iommu/mediatek,iommu.yaml.
>  
>        clocks:
> +        minItems: 1

Why 1? Looks like it should be 4 or 5 clocks.

>          maxItems: 5
>  
>        clock-names:
> -        items:
> -          - const: sel
> -          - const: soc-vdec
> -          - const: soc-lat
> -          - const: vdec
> -          - const: top
> +        minItems: 1
> +        maxItems: 5
>  
>        assigned-clocks:
>          maxItems: 1
> @@ -159,6 +156,38 @@ then:
>    required:
>      - interrupts
>  
> +allOf:
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            enum:
> +              - mediatek,mt8192-vcodec-dec
> +    then:
> +      properties:
> +        clock-names:
> +          items:
> +            - const: sel
> +            - const: soc-vdec
> +            - const: soc-lat
> +            - const: vdec
> +            - const: top
> +
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            enum:
> +              - mediatek,mt8195-vcodec-dec
> +    then:
> +      properties:
> +        clock-names:
> +          items:
> +            - const: sel
> +            - const: vdec
> +            - const: lat
> +            - const: top
> +
>  additionalProperties: false
>  
>  examples:
> -- 
> 2.18.0
> 
> 


From colin.foster at in-advantage.com  Mon Dec  5 18:20:15 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Mon, 5 Dec 2022 18:20:15 -0800
Subject: [PATCH v4 net-next 3/9] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <bfc6810b-3c21-201b-3c4f-a0def3928597@arinc9.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-4-colin.foster@in-advantage.com>
 <bfc6810b-3c21-201b-3c4f-a0def3928597@arinc9.com>
Message-ID: <Y46m3/oqtoqJWFlv@COLIN-DESKTOP1.localdomain>

On Sat, Dec 03, 2022 at 12:45:34AM +0300, Ar?n? ?NAL wrote:
> On 2.12.2022 23:45, Colin Foster wrote:
> > DSA switches can fall into one of two categories: switches where all ports
> > follow standard '(ethernet-)?port' properties, and switches that have
> > additional properties for the ports.
> > 
> > The scenario where DSA ports are all standardized can be handled by
> > swtiches with a reference to the new 'dsa.yaml#/$defs/ethernet-ports'.
> > 
> > The scenario where DSA ports require additional properties can reference
> > '$dsa.yaml#' directly. This will allow switches to reference these standard
> > defitions of the DSA switch, but add additional properties under the port
> > nodes.
> > 
> > Suggested-by: Rob Herring <robh at kernel.org>
> > Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> > Reviewed-by: Linus Walleij <linus.walleij at linaro.org>
> > Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> > Acked-by: Alvin ?ipraga <alsi at bang-olufsen.dk> # realtek
> > ---
> > 
> > v3 -> v4
> >    * Rename "$defs/base" to "$defs/ethernet-ports" to avoid implication of a
> >      "base class" and fix commit message accordingly
> >    * Add the following to the common etherent-ports node:
> >        "additionalProperties: false"
> >        "#address-cells" property
> >        "#size-cells" property
> >    * Fix "etherenet-ports@[0-9]+" to correctly be "ethernet-port@[0-9]+"
> >    * Remove unnecessary newline
> >    * Apply changes to mediatek,mt7530.yaml that were previously in a separate patch
> >    * Add Reviewed and Acked tags
> > 
> > v3
> >    * New patch
> > 
> > ---
> >   .../bindings/net/dsa/arrow,xrs700x.yaml       |  2 +-
> >   .../devicetree/bindings/net/dsa/brcm,b53.yaml |  2 +-
> >   .../devicetree/bindings/net/dsa/dsa.yaml      | 25 ++++++++++++++++---
> >   .../net/dsa/hirschmann,hellcreek.yaml         |  2 +-
> >   .../bindings/net/dsa/mediatek,mt7530.yaml     | 16 +++---------
> >   .../bindings/net/dsa/microchip,ksz.yaml       |  2 +-
> >   .../bindings/net/dsa/microchip,lan937x.yaml   |  2 +-
> >   .../bindings/net/dsa/mscc,ocelot.yaml         |  2 +-
> >   .../bindings/net/dsa/nxp,sja1105.yaml         |  2 +-
> >   .../devicetree/bindings/net/dsa/realtek.yaml  |  2 +-
> >   .../bindings/net/dsa/renesas,rzn1-a5psw.yaml  |  2 +-
> >   11 files changed, 35 insertions(+), 24 deletions(-)
> > 
> > diff --git a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> > index 259a0c6547f3..5888e3a0169a 100644
> > --- a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> > @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
> >   title: Arrow SpeedChips XRS7000 Series Switch Device Tree Bindings
> >   allOf:
> > -  - $ref: dsa.yaml#
> > +  - $ref: dsa.yaml#/$defs/ethernet-ports
> >   maintainers:
> >     - George McCollister <george.mccollister at gmail.com>
> > diff --git a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> > index 1219b830b1a4..5bef4128d175 100644
> > --- a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> > @@ -66,7 +66,7 @@ required:
> >     - reg
> >   allOf:
> > -  - $ref: dsa.yaml#
> > +  - $ref: dsa.yaml#/$defs/ethernet-ports
> >     - if:
> >         properties:
> >           compatible:
> > diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> > index b9d48e357e77..b9e366e46aed 100644
> > --- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> > @@ -19,9 +19,6 @@ description:
> >   select: false
> >   properties:
> > -  $nodename:
> > -    pattern: "^(ethernet-)?switch(@.*)?$"
> > -
> >     dsa,member:
> >       minItems: 2
> >       maxItems: 2
> > @@ -58,4 +55,26 @@ oneOf:
> >   additionalProperties: true
> > +$defs:
> > +  ethernet-ports:
> > +    description: A DSA switch without any extra port properties
> > +    $ref: '#/'
> > +
> > +    patternProperties:
> > +      "^(ethernet-)?ports$":
> > +        type: object
> > +        additionalProperties: false
> > +
> > +        properties:
> > +          '#address-cells':
> > +            const: 1
> > +          '#size-cells':
> > +            const: 0
> > +
> > +        patternProperties:
> > +          "^(ethernet-)?port@[0-9]+$":
> > +            description: Ethernet switch ports
> > +            $ref: dsa-port.yaml#
> > +            unevaluatedProperties: false
> > +
> >   ...
> > diff --git a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> > index 73b774eadd0b..748ef9983ce2 100644
> > --- a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> > @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
> >   title: Hirschmann Hellcreek TSN Switch Device Tree Bindings
> >   allOf:
> > -  - $ref: dsa.yaml#
> > +  - $ref: dsa.yaml#/$defs/ethernet-ports
> >   maintainers:
> >     - Andrew Lunn <andrew at lunn.ch>
> > diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> > index f2e9ff3f580b..b815272531fa 100644
> > --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> > @@ -156,17 +156,6 @@ patternProperties:
> >       patternProperties:
> >         "^(ethernet-)?port@[0-9]+$":
> > -        type: object
> > -        description: Ethernet switch ports
> > -
> > -        unevaluatedProperties: false
> > -
> > -        properties:
> > -          reg:
> > -            description:
> > -              Port address described must be 5 or 6 for CPU port and from 0 to 5
> > -              for user ports.
> 
> This shouldn't be moved. Please reread our conversation on the previous
> version.

I see - I missed your point. My apologies. This binding should keep the
reg properties where they were. I'll wait a few more days for any
additional feedback.

> 
> > -
> >           allOf:
> >             - $ref: dsa-port.yaml#
> >             - if:
> > @@ -174,6 +163,9 @@ patternProperties:
> >               then:
> >                 properties:
> >                   reg:
> > +                  description:
> > +                    Port address described must be 5 or 6 for CPU port and from
> > +                    0 to 5 for user ports
> 
> Ar?n?


From arinc.unal at arinc9.com  Mon Dec  5 10:29:50 2022
From: arinc.unal at arinc9.com (=?UTF-8?B?QXLEsW7DpyDDnE5BTA==?=)
Date: Mon, 5 Dec 2022 21:29:50 +0300
Subject: [PATCH v4 net-next 3/9] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <Y46m3/oqtoqJWFlv@COLIN-DESKTOP1.localdomain>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-4-colin.foster@in-advantage.com>
 <bfc6810b-3c21-201b-3c4f-a0def3928597@arinc9.com>
 <Y46m3/oqtoqJWFlv@COLIN-DESKTOP1.localdomain>
Message-ID: <25804819-f767-6272-4ef1-9b9e92d825cb@arinc9.com>

On 6.12.2022 05:20, Colin Foster wrote:
> On Sat, Dec 03, 2022 at 12:45:34AM +0300, Ar?n? ?NAL wrote:
>> On 2.12.2022 23:45, Colin Foster wrote:
>>> DSA switches can fall into one of two categories: switches where all ports
>>> follow standard '(ethernet-)?port' properties, and switches that have
>>> additional properties for the ports.
>>>
>>> The scenario where DSA ports are all standardized can be handled by
>>> swtiches with a reference to the new 'dsa.yaml#/$defs/ethernet-ports'.
>>>
>>> The scenario where DSA ports require additional properties can reference
>>> '$dsa.yaml#' directly. This will allow switches to reference these standard
>>> defitions of the DSA switch, but add additional properties under the port
>>> nodes.
>>>
>>> Suggested-by: Rob Herring <robh at kernel.org>
>>> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
>>> Reviewed-by: Linus Walleij <linus.walleij at linaro.org>
>>> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
>>> Acked-by: Alvin ?ipraga <alsi at bang-olufsen.dk> # realtek
>>> ---
>>>
>>> v3 -> v4
>>>     * Rename "$defs/base" to "$defs/ethernet-ports" to avoid implication of a
>>>       "base class" and fix commit message accordingly
>>>     * Add the following to the common etherent-ports node:
>>>         "additionalProperties: false"
>>>         "#address-cells" property
>>>         "#size-cells" property
>>>     * Fix "etherenet-ports@[0-9]+" to correctly be "ethernet-port@[0-9]+"
>>>     * Remove unnecessary newline
>>>     * Apply changes to mediatek,mt7530.yaml that were previously in a separate patch
>>>     * Add Reviewed and Acked tags
>>>
>>> v3
>>>     * New patch
>>>
>>> ---
>>>    .../bindings/net/dsa/arrow,xrs700x.yaml       |  2 +-
>>>    .../devicetree/bindings/net/dsa/brcm,b53.yaml |  2 +-
>>>    .../devicetree/bindings/net/dsa/dsa.yaml      | 25 ++++++++++++++++---
>>>    .../net/dsa/hirschmann,hellcreek.yaml         |  2 +-
>>>    .../bindings/net/dsa/mediatek,mt7530.yaml     | 16 +++---------
>>>    .../bindings/net/dsa/microchip,ksz.yaml       |  2 +-
>>>    .../bindings/net/dsa/microchip,lan937x.yaml   |  2 +-
>>>    .../bindings/net/dsa/mscc,ocelot.yaml         |  2 +-
>>>    .../bindings/net/dsa/nxp,sja1105.yaml         |  2 +-
>>>    .../devicetree/bindings/net/dsa/realtek.yaml  |  2 +-
>>>    .../bindings/net/dsa/renesas,rzn1-a5psw.yaml  |  2 +-
>>>    11 files changed, 35 insertions(+), 24 deletions(-)
>>>
>>> diff --git a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
>>> index 259a0c6547f3..5888e3a0169a 100644
>>> --- a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
>>> +++ b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
>>> @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
>>>    title: Arrow SpeedChips XRS7000 Series Switch Device Tree Bindings
>>>    allOf:
>>> -  - $ref: dsa.yaml#
>>> +  - $ref: dsa.yaml#/$defs/ethernet-ports
>>>    maintainers:
>>>      - George McCollister <george.mccollister at gmail.com>
>>> diff --git a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
>>> index 1219b830b1a4..5bef4128d175 100644
>>> --- a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
>>> +++ b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
>>> @@ -66,7 +66,7 @@ required:
>>>      - reg
>>>    allOf:
>>> -  - $ref: dsa.yaml#
>>> +  - $ref: dsa.yaml#/$defs/ethernet-ports
>>>      - if:
>>>          properties:
>>>            compatible:
>>> diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
>>> index b9d48e357e77..b9e366e46aed 100644
>>> --- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
>>> +++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
>>> @@ -19,9 +19,6 @@ description:
>>>    select: false
>>>    properties:
>>> -  $nodename:
>>> -    pattern: "^(ethernet-)?switch(@.*)?$"
>>> -
>>>      dsa,member:
>>>        minItems: 2
>>>        maxItems: 2
>>> @@ -58,4 +55,26 @@ oneOf:
>>>    additionalProperties: true
>>> +$defs:
>>> +  ethernet-ports:
>>> +    description: A DSA switch without any extra port properties
>>> +    $ref: '#/'
>>> +
>>> +    patternProperties:
>>> +      "^(ethernet-)?ports$":
>>> +        type: object
>>> +        additionalProperties: false
>>> +
>>> +        properties:
>>> +          '#address-cells':
>>> +            const: 1
>>> +          '#size-cells':
>>> +            const: 0
>>> +
>>> +        patternProperties:
>>> +          "^(ethernet-)?port@[0-9]+$":
>>> +            description: Ethernet switch ports
>>> +            $ref: dsa-port.yaml#
>>> +            unevaluatedProperties: false
>>> +
>>>    ...
>>> diff --git a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
>>> index 73b774eadd0b..748ef9983ce2 100644
>>> --- a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
>>> +++ b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
>>> @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
>>>    title: Hirschmann Hellcreek TSN Switch Device Tree Bindings
>>>    allOf:
>>> -  - $ref: dsa.yaml#
>>> +  - $ref: dsa.yaml#/$defs/ethernet-ports
>>>    maintainers:
>>>      - Andrew Lunn <andrew at lunn.ch>
>>> diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
>>> index f2e9ff3f580b..b815272531fa 100644
>>> --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
>>> +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
>>> @@ -156,17 +156,6 @@ patternProperties:
>>>        patternProperties:
>>>          "^(ethernet-)?port@[0-9]+$":
>>> -        type: object
>>> -        description: Ethernet switch ports
>>> -
>>> -        unevaluatedProperties: false
>>> -
>>> -        properties:
>>> -          reg:
>>> -            description:
>>> -              Port address described must be 5 or 6 for CPU port and from 0 to 5
>>> -              for user ports.
>>
>> This shouldn't be moved. Please reread our conversation on the previous
>> version.
> 
> I see - I missed your point. My apologies. This binding should keep the
> reg properties where they were. I'll wait a few more days for any
> additional feedback.

Feel free to add my acked-by with the next version.

Acked-by: Ar?n? ?NAL <arinc.unal at arinc9.com>

Ar?n?


From bvanassche at acm.org  Mon Dec  5 10:41:59 2022
From: bvanassche at acm.org (Bart Van Assche)
Date: Mon, 5 Dec 2022 10:41:59 -0800
Subject: [PATCH v3] ufs: core: wlun suspend SSU/enter hibern8 fail
 recovery
In-Reply-To: <20221202073532.7884-1-peter.wang@mediatek.com>
References: <20221202073532.7884-1-peter.wang@mediatek.com>
Message-ID: <6785696a-cb52-5934-dbd6-28472b4cd7c6@acm.org>

On 12/1/22 23:35, peter.wang at mediatek.com wrote:
> From: Peter Wang <peter.wang at mediatek.com>
> 
> When SSU/enter hibern8 fail in wlun suspend flow, trigger error
> handler and return busy to break the suspend.
> If not, wlun runtime pm status become error and the consumer will
> stuck in runtime suspend status.
> 
> Signed-off-by: Peter Wang <peter.wang at mediatek.com>
> ---
>   drivers/ufs/core/ufshcd.c | 26 ++++++++++++++++++++++++++
>   1 file changed, 26 insertions(+)
> 
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index b1f59a5fe632..a0dbf2c410b1 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -9049,6 +9049,19 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
>   
>   		if (!hba->dev_info.b_rpm_dev_flush_capable) {
>   			ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
> +			if (ret && (pm_op != UFS_SHUTDOWN_PM)) {
> +				/*
> +				 * If return err in suspend flow, IO will hang.
> +				 * Trigger error handler and break suspend for
> +				 * error recovery.
> +				 */
> +				spin_lock_irq(hba->host->host_lock);
> +				hba->force_reset = true;
> +				ufshcd_schedule_eh_work(hba);
> +				spin_unlock_irq(hba->host->host_lock);
> +
> +				ret = -EBUSY;
> +			}
>   			if (ret)
>   				goto enable_scaling;
>   		}
> @@ -9060,6 +9073,19 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
>   	 */
>   	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
>   	ret = ufshcd_link_state_transition(hba, req_link_state, check_for_bkops);
> +	if ((ret) && (pm_op != UFS_SHUTDOWN_PM)) {
> +		/*
> +		 * If return err in suspend flow, IO will hang.
> +		 * Trigger error handler and break suspend for
> +		 * error recovery.
> +		 */
> +		spin_lock_irq(hba->host->host_lock);
> +		hba->force_reset = true;
> +		ufshcd_schedule_eh_work(hba);
> +		spin_unlock_irq(hba->host->host_lock);
> +
> +		ret = -EBUSY;
> +	}
>   	if (ret)
>   		goto set_dev_active;
>   

Please follow the coding style that is used elsewhere in the kernel and
remove the superfluous parentheses from this patch. "if (ret && (pm_op !=
UFS_SHUTDOWN_PM)) {" can be changed into "if (ret && pm_op !=
UFS_SHUTDOWN_PM) {" and "if ((ret) && (pm_op != UFS_SHUTDOWN_PM)) {" can be
changed into "if ((ret) && (pm_op != UFS_SHUTDOWN_PM)) {".

Otherwise this patch looks good to me.

Thanks,

Bart.


From daniel.lezcano at linaro.org  Mon Dec  5 11:39:29 2022
From: daniel.lezcano at linaro.org (Daniel Lezcano)
Date: Mon, 5 Dec 2022 20:39:29 +0100
Subject: [PATCH v7 4/4] thermal: mediatek: add another get_temp ops for
 thermal sensors
In-Reply-To: <COTTJX635TNF.1WL2TEZN7VW9O@amjad-ThinkPad-T490>
References: <20221018-up-i350-thermal-bringup-v7-0-ebf08ff2eddb@baylibre.com>
 <20221018-up-i350-thermal-bringup-v7-4-ebf08ff2eddb@baylibre.com>
 <4121bb6b-30db-7a23-f4c8-40afdda7a0b5@linaro.org>
 <COTTJX635TNF.1WL2TEZN7VW9O@amjad-ThinkPad-T490>
Message-ID: <adfe41f7-00e5-876b-7803-3127919fba13@linaro.org>


Hi Amjad,


On 05/12/2022 11:41, Amjad Ouled-Ameur wrote:

[ ... ]

>>> @@ -1161,11 +1197,24 @@ static int mtk_thermal_probe(struct platform_device *pdev)
>>>    
>>>    	platform_set_drvdata(pdev, mt);
>>>    
>>> -	tzdev = devm_thermal_of_zone_register(&pdev->dev, 0, mt,
>>> -					      &mtk_thermal_ops);
>>> -	if (IS_ERR(tzdev)) {
>>> -		ret = PTR_ERR(tzdev);
>>> -		goto err_disable_clk_peri_therm;
>>> +	for (i = 0; i < mt->conf->num_sensors + 1; i++) {
>>> +		tz = devm_kmalloc(&pdev->dev, sizeof(*tz), GFP_KERNEL);
>>> +		if (!tz)
>>> +			return -ENOMEM;
>>> +
>>> +		tz->mt = mt;
>>> +		tz->id = i;
>>> +
>>> +		tzdev = devm_thermal_of_zone_register(&pdev->dev, i, tz, (i == 0) ?
>>> +							     &mtk_thermal_ops :
>>> +							     &mtk_thermal_sensor_ops);
>>
>> Here you use again the aggregation
> I addressed this concern in V6, could you please take a look and let me
> know what you think [0].
> 
> [0]: https://lore.kernel.org/all/5eb0cdc2-e9f9-dd42-bf80-b7dcd8bcc196 at baylibre.com/

May I misunderstanding but AFAICS, this patch is setting the 
mtk_thermal_ops if the sensor id is zero. The get_temp is computing the 
max temperature in this ops which is what we don't want to do.


-- 
<http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog



From quic_asutoshd at quicinc.com  Mon Dec  5 11:50:50 2022
From: quic_asutoshd at quicinc.com (Asutosh Das)
Date: Mon, 5 Dec 2022 11:50:50 -0800
Subject: [PATCH v2 1/1] scsi: ufs: core: fix device management cmd
 timeout flow
In-Reply-To: <20221205014202.2672-1-mason.zhang@mediatek.com>
References: <20221205014202.2672-1-mason.zhang@mediatek.com>
Message-ID: <20221205195050.GA15334@asutoshd-linux1.qualcomm.com>

On Mon, Dec 05 2022 at 17:53 -0800, Mason Zhang wrote:
>From: Mason Zhang <Mason.Zhang at mediatek.com>
>
>In ufs error handler flow, host will send device management cmd(NOP OUT)
>to device for recovery link. If cmd response timeout, and clear doorbell
>fail, ufshcd_wait_for_dev_cmd will do nothing and return,
>hba->dev_cmd.complete struct not set to null.
>
>In this time, if cmd has been responsed by device, then it will
>call complete() in __ufshcd_transfer_req_compl, because of complete
>struct is alloced in stack, then the KE will occur.
>
What is KE?

>Fix the following crash:
>  ipanic_die+0x24/0x38 [mrdump]
>  die+0x344/0x748
>  arm64_notify_die+0x44/0x104
>  do_debug_exception+0x104/0x1e0
>  el1_dbg+0x38/0x54
>  el1_sync_handler+0x40/0x88
>  el1_sync+0x8c/0x140
>  queued_spin_lock_slowpath+0x2e4/0x3c0
>  __ufshcd_transfer_req_compl+0x3b0/0x1164
>  ufshcd_trc_handler+0x15c/0x308
>  ufshcd_host_reset_and_restore+0x54/0x260
>  ufshcd_reset_and_restore+0x28c/0x57c
>  ufshcd_err_handler+0xeb8/0x1b6c
>  process_one_work+0x288/0x964
>  worker_thread+0x4bc/0xc7c
>  kthread+0x15c/0x264
>  ret_from_fork+0x10/0x30
>
>Signed-off-by: Mason Zhang <Mason.Zhang at mediatek.com>
>---
> drivers/ufs/core/ufshcd.c | 46 ++++++++++++++++++---------------------
> 1 file changed, 21 insertions(+), 25 deletions(-)
>
>diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
>index b1f59a5fe632..2b4934a562a6 100644
>--- a/drivers/ufs/core/ufshcd.c
>+++ b/drivers/ufs/core/ufshcd.c
>@@ -2979,35 +2979,31 @@ static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba,
> 		err = -ETIMEDOUT;
> 		dev_dbg(hba->dev, "%s: dev_cmd request timedout, tag %d\n",
> 			__func__, lrbp->task_tag);
>-		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0) {
>+		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0)
> 			/* successfully cleared the command, retry if needed */
> 			err = -EAGAIN;
>+		/*
>+		 * Since clearing the command succeeded we also need to
>+		 * clear the task tag bit from the outstanding_reqs
>+		 * variable.
>+		 */
Does this comment still hold true? Perhaps this needs to be updated?
Also, perhaps you missed Bart's comments in v1.
Also, please can you add a section for changes from v1 -> v2?

-asd

>+		spin_lock_irqsave(&hba->outstanding_lock, flags);
>+		pending = test_bit(lrbp->task_tag,
>+				   &hba->outstanding_reqs);
>+		if (pending) {
>+			hba->dev_cmd.complete = NULL;
>+			__clear_bit(lrbp->task_tag,
>+				    &hba->outstanding_reqs);
>+		}
>+		spin_unlock_irqrestore(&hba->outstanding_lock, flags);
>+
>+		if (!pending) {
> 			/*
>-			 * Since clearing the command succeeded we also need to
>-			 * clear the task tag bit from the outstanding_reqs
>-			 * variable.
>+			 * The completion handler ran while we tried to
>+			 * clear the command.
> 			 */
>-			spin_lock_irqsave(&hba->outstanding_lock, flags);
>-			pending = test_bit(lrbp->task_tag,
>-					   &hba->outstanding_reqs);
>-			if (pending) {
>-				hba->dev_cmd.complete = NULL;
>-				__clear_bit(lrbp->task_tag,
>-					    &hba->outstanding_reqs);
>-			}
>-			spin_unlock_irqrestore(&hba->outstanding_lock, flags);
>-
>-			if (!pending) {
>-				/*
>-				 * The completion handler ran while we tried to
>-				 * clear the command.
>-				 */
>-				time_left = 1;
>-				goto retry;
>-			}
>-		} else {
>-			dev_err(hba->dev, "%s: failed to clear tag %d\n",
>-				__func__, lrbp->task_tag);
>+			time_left = 1;
>+			goto retry;
> 		}
> 	}
>
>-- 
>2.18.0
>


From jernej.skrabec at gmail.com  Mon Dec  5 12:10:54 2022
From: jernej.skrabec at gmail.com (Jernej =?utf-8?B?xaBrcmFiZWM=?=)
Date: Mon, 05 Dec 2022 21:10:54 +0100
Subject: [PATCH 2/5] arm: dts: remove label = "cpu" from DSA dt-binding
In-Reply-To: <20221130141040.32447-3-arinc.unal@arinc9.com>
References: <20221130141040.32447-1-arinc.unal@arinc9.com> <20221130141040.32447-3-arinc.unal@arinc9.com>
Message-ID: <5625120.DvuYhMxLoT@kista>

Dne sreda, 30. november 2022 ob 15:10:37 CET je Ar?n? ?NAL napisal(a):
> This is not used by the DSA dt-binding, so remove it from all devicetrees.
> 
> Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
> ---
>  arch/arm/boot/dts/armada-370-rd.dts                       | 1 -
>  arch/arm/boot/dts/armada-381-netgear-gs110emx.dts         | 1 -
>  arch/arm/boot/dts/armada-385-clearfog-gtr-l8.dts          | 1 -
>  arch/arm/boot/dts/armada-385-clearfog-gtr-s4.dts          | 1 -
>  arch/arm/boot/dts/armada-385-linksys.dtsi                 | 1 -
>  arch/arm/boot/dts/armada-385-turris-omnia.dts             | 1 -
>  arch/arm/boot/dts/armada-388-clearfog.dts                 | 1 -
>  arch/arm/boot/dts/armada-xp-linksys-mamba.dts             | 1 -
>  arch/arm/boot/dts/at91-sama5d2_icp.dts                    | 1 -
>  arch/arm/boot/dts/at91-sama5d3_ksz9477_evb.dts            | 1 -
>  arch/arm/boot/dts/bcm-cygnus.dtsi                         | 1 -
>  arch/arm/boot/dts/bcm4708-buffalo-wzr-1166dhp-common.dtsi | 1 -
>  arch/arm/boot/dts/bcm4708-luxul-xap-1510.dts              | 1 -
>  arch/arm/boot/dts/bcm4708-luxul-xwc-1000.dts              | 1 -
>  arch/arm/boot/dts/bcm4708-netgear-r6250.dts               | 1 -
>  arch/arm/boot/dts/bcm4708-smartrg-sr400ac.dts             | 1 -
>  arch/arm/boot/dts/bcm47081-buffalo-wzr-600dhp2.dts        | 1 -
>  arch/arm/boot/dts/bcm47081-luxul-xap-1410.dts             | 1 -
>  arch/arm/boot/dts/bcm47081-luxul-xwr-1200.dts             | 1 -
>  arch/arm/boot/dts/bcm4709-netgear-r8000.dts               | 1 -
>  arch/arm/boot/dts/bcm47094-asus-rt-ac88u.dts              | 3 ---
>  arch/arm/boot/dts/bcm47094-dlink-dir-885l.dts             | 1 -
>  arch/arm/boot/dts/bcm47094-linksys-panamera.dts           | 4 ----
>  arch/arm/boot/dts/bcm47094-luxul-abr-4500.dts             | 1 -
>  arch/arm/boot/dts/bcm47094-luxul-xap-1610.dts             | 1 -
>  arch/arm/boot/dts/bcm47094-luxul-xbr-4500.dts             | 1 -
>  arch/arm/boot/dts/bcm47094-luxul-xwc-2000.dts             | 1 -
>  arch/arm/boot/dts/bcm47094-luxul-xwr-3100.dts             | 1 -
>  arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts          | 1 -
>  arch/arm/boot/dts/bcm47189-tenda-ac9.dts                  | 1 -
>  arch/arm/boot/dts/bcm53015-meraki-mr26.dts                | 1 -
>  arch/arm/boot/dts/bcm53016-meraki-mr32.dts                | 1 -
>  arch/arm/boot/dts/bcm953012er.dts                         | 1 -
>  arch/arm/boot/dts/bcm958622hr.dts                         | 1 -
>  arch/arm/boot/dts/bcm958623hr.dts                         | 1 -
>  arch/arm/boot/dts/bcm958625hr.dts                         | 1 -
>  arch/arm/boot/dts/bcm958625k.dts                          | 1 -
>  arch/arm/boot/dts/bcm988312hr.dts                         | 1 -
>  arch/arm/boot/dts/gemini-dlink-dir-685.dts                | 1 -
>  arch/arm/boot/dts/gemini-sl93512r.dts                     | 1 -
>  arch/arm/boot/dts/gemini-sq201.dts                        | 1 -
>  arch/arm/boot/dts/imx51-zii-rdu1.dts                      | 1 -
>  arch/arm/boot/dts/imx51-zii-scu2-mezz.dts                 | 1 -
>  arch/arm/boot/dts/imx51-zii-scu3-esb.dts                  | 1 -
>  arch/arm/boot/dts/imx53-kp-hsc.dts                        | 1 -
>  arch/arm/boot/dts/imx6dl-yapp4-common.dtsi                | 1 -
>  arch/arm/boot/dts/imx6q-b450v3.dts                        | 1 -
>  arch/arm/boot/dts/imx6q-b650v3.dts                        | 1 -
>  arch/arm/boot/dts/imx6q-b850v3.dts                        | 1 -
>  arch/arm/boot/dts/imx6qdl-gw5904.dtsi                     | 1 -
>  arch/arm/boot/dts/imx6qdl-skov-cpu.dtsi                   | 1 -
>  arch/arm/boot/dts/imx6qdl-zii-rdu2.dtsi                   | 1 -
>  arch/arm/boot/dts/imx6qp-prtwd3.dts                       | 1 -
>  arch/arm/boot/dts/imx7d-zii-rpu2.dts                      | 1 -
>  arch/arm/boot/dts/kirkwood-dir665.dts                     | 1 -
>  arch/arm/boot/dts/kirkwood-l-50.dts                       | 1 -
>  arch/arm/boot/dts/kirkwood-linksys-viper.dts              | 1 -
>  arch/arm/boot/dts/kirkwood-mv88f6281gtw-ge.dts            | 1 -
>  arch/arm/boot/dts/kirkwood-rd88f6281.dtsi                 | 1 -
>  arch/arm/boot/dts/mt7623a-rfb-emmc.dts                    | 1 -
>  arch/arm/boot/dts/mt7623a-rfb-nand.dts                    | 1 -
>  arch/arm/boot/dts/mt7623n-bananapi-bpi-r2.dts             | 1 -
>  arch/arm/boot/dts/mt7623n-rfb-emmc.dts                    | 1 -
>  arch/arm/boot/dts/orion5x-netgear-wnr854t.dts             | 1 -
>  arch/arm/boot/dts/qcom-ipq8064-rb3011.dts                 | 2 --
>  arch/arm/boot/dts/r9a06g032.dtsi                          | 1 -
>  arch/arm/boot/dts/stm32mp151a-prtt1c.dts                  | 1 -
>  arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts                 | 1 -

For sun7i:

Acked-by: Jernej Skrabec <jernej.skrabec at gmail.com>

Best regards,
Jernej

>  arch/arm/boot/dts/vf610-zii-cfu1.dts                      | 1 -
>  arch/arm/boot/dts/vf610-zii-dev-rev-b.dts                 | 1 -
>  arch/arm/boot/dts/vf610-zii-dev-rev-c.dts                 | 1 -
>  arch/arm/boot/dts/vf610-zii-scu4-aib.dts                  | 1 -
>  arch/arm/boot/dts/vf610-zii-spb4.dts                      | 1 -
>  arch/arm/boot/dts/vf610-zii-ssmb-dtu.dts                  | 1 -
>  arch/arm/boot/dts/vf610-zii-ssmb-spu3.dts                 | 1 -
>  75 files changed, 81 deletions(-)





From nfraprado at collabora.com  Mon Dec  5 12:32:14 2022
From: nfraprado at collabora.com (=?utf-8?B?TsOtY29sYXMgRi4gUi4gQS4=?= Prado)
Date: Mon, 5 Dec 2022 17:32:14 -0300
Subject: [PATCH v5 2/3] media: dt-bindings: media: mediatek: Remove
 "dma-ranges" property for decoder
In-Reply-To: <20221128143832.25584-3-allen-kh.cheng@mediatek.com>
References: <20221128143832.25584-1-allen-kh.cheng@mediatek.com>
 <20221128143832.25584-3-allen-kh.cheng@mediatek.com>
Message-ID: <20221205203214.megeq5nr7ksvb5vw@notapiano>

On Mon, Nov 28, 2022 at 10:38:31PM +0800, Allen-KH Cheng wrote:
> Since commit f1ad5338a4d5 ("of: Fix "dma-ranges" handling for bus
> controllers") was merge, we don't need a dma-ranges property for IOMMU
> in mediatek video codec.

This description isn't right, as it gives the impression that the mentioned
commit removed the need for having a dma-ranges property, but that isn't the
case, the property wasn't needed even before that commit. That commit did
however expose the fact that having this property didn't make sense in the first
place.

Here's a suggestion:

	The decoder nodes already make use of the iommus property to configure the IOMMU
	for address translations, so also having a dma-ranges property doesn't make
	sense.

	In fact, after commit f1ad5338a4d5 ("of: Fix "dma-ranges" handling for bus
	controllers"), having a dma-ranges property causes IOMMU faults.

	Remove the dma-ranges property and update the example.

Reviewed-by: N?colas F. R. A. Prado <nfraprado at collabora.com>

Thanks,
N?colas


From jernej.skrabec at gmail.com  Mon Dec  5 12:50:24 2022
From: jernej.skrabec at gmail.com (Jernej =?utf-8?B?xaBrcmFiZWM=?=)
Date: Mon, 05 Dec 2022 21:50:24 +0100
Subject: [PATCH v2 01/11] pwm: Make .get_state() callback return an error code
In-Reply-To: <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de> <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
Message-ID: <22881769.6Emhk5qWAg@kista>

Dne sreda, 30. november 2022 ob 16:21:38 CET je Uwe Kleine-K?nig napisal(a):
> .get_state() might fail in some cases. To make it possible that a driver
> signals such a failure change the prototype of .get_state() to return an
> error code.
> 
> This patch was created using coccinelle and the following semantic patch:
> 
> @p1@
> identifier getstatefunc;
> identifier driver;
> @@
>  struct pwm_ops driver = {
>         ...,
>         .get_state = getstatefunc
>         ,...
>  };
> 
> @p2@
> identifier p1.getstatefunc;
> identifier chip, pwm, state;
> @@
> -void
> +int
>  getstatefunc(struct pwm_chip *chip, struct pwm_device *pwm, struct
> pwm_state *state) {
>    ...
> -  return;
> +  return 0;
>    ...
>  }
> 
> plus the actual change of the prototype in include/linux/pwm.h (plus some
> manual fixing of indentions and empty lines).
> 
> So for now all drivers return success unconditionally. They are adapted
> in the following patches to make the changes easier reviewable.
> 
> Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de>
> ---
>  drivers/gpio/gpio-mvebu.c             |  9 ++++++---
>  drivers/gpu/drm/bridge/ti-sn65dsi86.c | 14 ++++++++------
>  drivers/leds/rgb/leds-qcom-lpg.c      | 14 ++++++++------
>  drivers/pwm/pwm-atmel.c               |  6 ++++--
>  drivers/pwm/pwm-bcm-iproc.c           |  8 +++++---
>  drivers/pwm/pwm-crc.c                 | 10 ++++++----
>  drivers/pwm/pwm-cros-ec.c             |  8 +++++---
>  drivers/pwm/pwm-dwc.c                 |  6 ++++--
>  drivers/pwm/pwm-hibvt.c               |  6 ++++--
>  drivers/pwm/pwm-imx-tpm.c             |  8 +++++---
>  drivers/pwm/pwm-imx27.c               |  8 +++++---
>  drivers/pwm/pwm-intel-lgm.c           |  6 ++++--
>  drivers/pwm/pwm-iqs620a.c             |  6 ++++--
>  drivers/pwm/pwm-keembay.c             |  6 ++++--
>  drivers/pwm/pwm-lpss.c                |  6 ++++--
>  drivers/pwm/pwm-meson.c               |  8 +++++---
>  drivers/pwm/pwm-mtk-disp.c            | 12 +++++++-----
>  drivers/pwm/pwm-pca9685.c             |  8 +++++---
>  drivers/pwm/pwm-raspberrypi-poe.c     |  8 +++++---
>  drivers/pwm/pwm-rockchip.c            | 12 +++++++-----
>  drivers/pwm/pwm-sifive.c              |  6 ++++--
>  drivers/pwm/pwm-sl28cpld.c            |  8 +++++---
>  drivers/pwm/pwm-sprd.c                |  8 +++++---
>  drivers/pwm/pwm-stm32-lp.c            |  8 +++++---
>  drivers/pwm/pwm-sun4i.c               | 12 +++++++-----
>  drivers/pwm/pwm-sunplus.c             |  6 ++++--
>  drivers/pwm/pwm-visconti.c            |  6 ++++--
>  drivers/pwm/pwm-xilinx.c              |  8 +++++---
>  include/linux/pwm.h                   |  4 ++--
>  29 files changed, 146 insertions(+), 89 deletions(-)
> 
<snip>
> diff --git a/drivers/pwm/pwm-sun4i.c b/drivers/pwm/pwm-sun4i.c
> index c8445b0a3339..37d75e252d4e 100644
> --- a/drivers/pwm/pwm-sun4i.c
> +++ b/drivers/pwm/pwm-sun4i.c
> @@ -108,9 +108,9 @@ static inline void sun4i_pwm_writel(struct
> sun4i_pwm_chip *chip, writel(val, chip->base + offset);
>  }
> 
> -static void sun4i_pwm_get_state(struct pwm_chip *chip,
> -				struct pwm_device *pwm,
> -				struct pwm_state *state)
> +static int sun4i_pwm_get_state(struct pwm_chip *chip,
> +			       struct pwm_device *pwm,
> +			       struct pwm_state *state)
>  {
>  	struct sun4i_pwm_chip *sun4i_pwm = to_sun4i_pwm_chip(chip);
>  	u64 clk_rate, tmp;
> @@ -132,7 +132,7 @@ static void sun4i_pwm_get_state(struct pwm_chip *chip,
>  		state->duty_cycle = DIV_ROUND_UP_ULL(state->period, 2);
>  		state->polarity = PWM_POLARITY_NORMAL;
>  		state->enabled = true;
> -		return;
> +		return 0;
>  	}
> 
>  	if ((PWM_REG_PRESCAL(val, pwm->hwpwm) == PWM_PRESCAL_MASK) &&
> @@ -142,7 +142,7 @@ static void sun4i_pwm_get_state(struct pwm_chip *chip,
>  		prescaler = prescaler_table[PWM_REG_PRESCAL(val, pwm-
>hwpwm)];
> 
>  	if (prescaler == 0)
> -		return;
> +		return 0;
> 
>  	if (val & BIT_CH(PWM_ACT_STATE, pwm->hwpwm))
>  		state->polarity = PWM_POLARITY_NORMAL;
> @@ -162,6 +162,8 @@ static void sun4i_pwm_get_state(struct pwm_chip *chip,
> 
>  	tmp = (u64)prescaler * NSEC_PER_SEC * PWM_REG_PRD(val);
>  	state->period = DIV_ROUND_CLOSEST_ULL(tmp, clk_rate);
> +
> +	return 0;
>  }
> 
>  static int sun4i_pwm_calculate(struct sun4i_pwm_chip *sun4i_pwm,

For sun4i:

Acked-by: Jernej Skrabec <jernej.skrabec at gmail.com>

Best regards,
Jernej




From nfraprado at collabora.com  Mon Dec  5 13:04:33 2022
From: nfraprado at collabora.com (=?utf-8?B?TsOtY29sYXMgRi4gUi4gQS4=?= Prado)
Date: Mon, 5 Dec 2022 18:04:33 -0300
Subject: [PATCH v5 3/3] arm64: dts: mt8192: Add video-codec nodes
In-Reply-To: <20221128143832.25584-4-allen-kh.cheng@mediatek.com>
References: <20221128143832.25584-1-allen-kh.cheng@mediatek.com>
 <20221128143832.25584-4-allen-kh.cheng@mediatek.com>
Message-ID: <20221205210433.w3nbwmegcnvsyesc@notapiano>

On Mon, Nov 28, 2022 at 10:38:32PM +0800, Allen-KH Cheng wrote:
> Add video-codec lat and core nodes for mt8192 SoC.

Even though the rule is to use generic names in the DT, here in the commit
message and title I would have called them "video decoder nodes", to be more
specific and differentiate from the encoder nodes. But the way you wrote is not
wrong, so feel free to ignore this comment and leave it as it is.

> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>

Reviewed-by: N?colas F. R. A. Prado <nfraprado at collabora.com>
Tested-by: N?colas F. R. A. Prado <nfraprado at collabora.com>

Thanks,
N?colas


From nfraprado at collabora.com  Mon Dec  5 13:32:04 2022
From: nfraprado at collabora.com (=?utf-8?B?TsOtY29sYXMgRi4gUi4gQS4=?= Prado)
Date: Mon, 5 Dec 2022 18:32:04 -0300
Subject: [PATCH v5 1/3] media: dt-bindings: media: mediatek: Rename child
 node names for decoder
In-Reply-To: <20221128143832.25584-2-allen-kh.cheng@mediatek.com>
References: <20221128143832.25584-1-allen-kh.cheng@mediatek.com>
 <20221128143832.25584-2-allen-kh.cheng@mediatek.com>
Message-ID: <20221205213204.ftnarhtsk33pprq3@notapiano>

On Mon, Nov 28, 2022 at 10:38:30PM +0800, Allen-KH Cheng wrote:
> In order to make the names of the child nodes more generic, we rename
> "vcodec-lat" and "vcodec-core" to "video-codec" for decoder in
> patternProperties and example.
> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> ---
>  .../media/mediatek,vcodec-subdev-decoder.yaml | 60 ++-----------------
>  1 file changed, 4 insertions(+), 56 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
> index c4f20acdc1f8..695402041e04 100644
> --- a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
> +++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
> @@ -91,12 +91,13 @@ properties:
>  
>  # Required child node:
>  patternProperties:
> -  '^vcodec-lat@[0-9a-f]+$':
> +  '^video-codec@[0-9a-f]+$':
>      type: object
>  
>      properties:
>        compatible:
>          enum:
> +          - mediatek,mtk-vcodec-core
>            - mediatek,mtk-vcodec-lat
>            - mediatek,mtk-vcodec-lat-soc
>  
> @@ -145,59 +146,6 @@ patternProperties:
>  
>      additionalProperties: false
>  
> -  '^vcodec-core@[0-9a-f]+$':
> -    type: object
> -
> -    properties:
> -      compatible:
> -        const: mediatek,mtk-vcodec-core
> -
> -      reg:
> -        maxItems: 1
> -
> -      interrupts:
> -        maxItems: 1
> -
> -      iommus:
> -        minItems: 1
> -        maxItems: 32
> -        description: |
> -          List of the hardware port in respective IOMMU block for current Socs.
> -          Refer to bindings/iommu/mediatek,iommu.yaml.
> -
> -      clocks:
> -        maxItems: 5
> -
> -      clock-names:
> -        items:
> -          - const: sel
> -          - const: soc-vdec
> -          - const: soc-lat
> -          - const: vdec
> -          - const: top
> -
> -      assigned-clocks:
> -        maxItems: 1
> -
> -      assigned-clock-parents:
> -        maxItems: 1
> -
> -      power-domains:
> -        maxItems: 1
> -
> -    required:
> -      - compatible
> -      - reg
> -      - interrupts

Looks like interrupts was required for vcodec-core, but it isn't for the generic
video-codec node. Which seems correct, given that the vcodec-lat-soc doesn't
have an interrupt [1]. So I guess this is just the generic video-codec node in
the binding being too generic for some cases. Ideally we would override
interrupts to be required based on which subnode we're dealing with (for lat and
core, but not lat-soc), but given these are subnodes matched through
patternProperties, I'm not sure that would be possible.

[1] https://lore.kernel.org/all/20221202034450.3808-3-yunfei.dong at mediatek.com/

Thanks,
N?colas

> -      - iommus
> -      - clocks
> -      - clock-names
> -      - assigned-clocks
> -      - assigned-clock-parents
> -      - power-domains
> -
> -    additionalProperties: false
> -


From robh at kernel.org  Mon Dec  5 13:42:10 2022
From: robh at kernel.org (Rob Herring)
Date: Mon, 5 Dec 2022 15:42:10 -0600
Subject: [PATCH v4 net-next 3/9] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <20221202204559.162619-4-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-4-colin.foster@in-advantage.com>
Message-ID: <167027652411.2674430.15313904791062984653.robh@kernel.org>


On Fri, 02 Dec 2022 12:45:53 -0800, Colin Foster wrote:
> DSA switches can fall into one of two categories: switches where all ports
> follow standard '(ethernet-)?port' properties, and switches that have
> additional properties for the ports.
> 
> The scenario where DSA ports are all standardized can be handled by
> swtiches with a reference to the new 'dsa.yaml#/$defs/ethernet-ports'.
> 
> The scenario where DSA ports require additional properties can reference
> '$dsa.yaml#' directly. This will allow switches to reference these standard
> defitions of the DSA switch, but add additional properties under the port
> nodes.
> 
> Suggested-by: Rob Herring <robh at kernel.org>
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Reviewed-by: Linus Walleij <linus.walleij at linaro.org>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> Acked-by: Alvin ?ipraga <alsi at bang-olufsen.dk> # realtek
> ---
> 
> v3 -> v4
>   * Rename "$defs/base" to "$defs/ethernet-ports" to avoid implication of a
>     "base class" and fix commit message accordingly
>   * Add the following to the common etherent-ports node:
>       "additionalProperties: false"
>       "#address-cells" property
>       "#size-cells" property
>   * Fix "etherenet-ports@[0-9]+" to correctly be "ethernet-port@[0-9]+"
>   * Remove unnecessary newline
>   * Apply changes to mediatek,mt7530.yaml that were previously in a separate patch
>   * Add Reviewed and Acked tags
> 
> v3
>   * New patch
> 
> ---
>  .../bindings/net/dsa/arrow,xrs700x.yaml       |  2 +-
>  .../devicetree/bindings/net/dsa/brcm,b53.yaml |  2 +-
>  .../devicetree/bindings/net/dsa/dsa.yaml      | 25 ++++++++++++++++---
>  .../net/dsa/hirschmann,hellcreek.yaml         |  2 +-
>  .../bindings/net/dsa/mediatek,mt7530.yaml     | 16 +++---------
>  .../bindings/net/dsa/microchip,ksz.yaml       |  2 +-
>  .../bindings/net/dsa/microchip,lan937x.yaml   |  2 +-
>  .../bindings/net/dsa/mscc,ocelot.yaml         |  2 +-
>  .../bindings/net/dsa/nxp,sja1105.yaml         |  2 +-
>  .../devicetree/bindings/net/dsa/realtek.yaml  |  2 +-
>  .../bindings/net/dsa/renesas,rzn1-a5psw.yaml  |  2 +-
>  11 files changed, 35 insertions(+), 24 deletions(-)
> 

Reviewed-by: Rob Herring <robh at kernel.org>


From robh at kernel.org  Mon Dec  5 13:42:22 2022
From: robh at kernel.org (Rob Herring)
Date: Mon, 5 Dec 2022 15:42:22 -0600
Subject: [PATCH v4 net-next 4/9] dt-bindings: net: dsa: allow additional
 ethernet-port properties
In-Reply-To: <20221202204559.162619-5-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-5-colin.foster@in-advantage.com>
Message-ID: <167027654137.2674912.5511174194632704012.robh@kernel.org>


On Fri, 02 Dec 2022 12:45:54 -0800, Colin Foster wrote:
> Explicitly allow additional properties for both the ethernet-port and
> ethernet-ports properties. This specifically will allow the qca8k.yaml
> binding to use shared properties.
> 
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> ---
> 
> v3 -> v4
>   * Change ethernet-ports node to have "unevaluatedProperties: false"
>     instead of "additionalProperties: true"
>   * Change ethernet-port node to have "additionalProperties: true" instead
>     of "unevaluatedProperties: true"
>   * Add Reviewed tag
> 
> v2 -> v3
>   * No change
> 
> v1 -> v2
>   * New patch
> 
> ---
>  Documentation/devicetree/bindings/net/dsa/dsa.yaml | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 

Reviewed-by: Rob Herring <robh at kernel.org>


From robh at kernel.org  Mon Dec  5 13:42:35 2022
From: robh at kernel.org (Rob Herring)
Date: Mon, 5 Dec 2022 15:42:35 -0600
Subject: [PATCH v4 net-next 5/9] dt-bindings: net: dsa: qca8k: utilize
 shared dsa.yaml
In-Reply-To: <20221202204559.162619-6-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-6-colin.foster@in-advantage.com>
Message-ID: <167027655461.2675313.2465931055798706710.robh@kernel.org>


On Fri, 02 Dec 2022 12:45:55 -0800, Colin Foster wrote:
> The dsa.yaml binding contains duplicated bindings for address and size
> cells, as well as the reference to dsa-port.yaml. Instead of duplicating
> this information, remove the reference to dsa-port.yaml and include the
> full reference to dsa.yaml.
> 
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> ---
> 
> v3 -> v4
>   * Add Reviewed tag
>   * Remove unnecessary blank line deletion
> 
> v2 -> v3
>   * Remove #address-cells and #size-cells from v2. The examples were
>     incorrect and fixed elsewhere.
>   * Remove erroneous unevaluatedProperties: true under Ethernet Port.
>   * Add back ref: dsa-port.yaml#.
> 
> v1 -> v2
>   * Add #address-cells and #size-cells to the switch layer. They aren't
>     part of dsa.yaml.
>   * Add unevaluatedProperties: true to the ethernet-port layer so it can
>     correctly read properties from dsa.yaml.
> 
> ---
>  Documentation/devicetree/bindings/net/dsa/qca8k.yaml | 10 +++-------
>  1 file changed, 3 insertions(+), 7 deletions(-)
> 

Reviewed-by: Rob Herring <robh at kernel.org>


From robh at kernel.org  Mon Dec  5 13:44:39 2022
From: robh at kernel.org (Rob Herring)
Date: Mon, 5 Dec 2022 15:44:39 -0600
Subject: [PATCH v4 net-next 6/9] dt-bindings: net: dsa: mediatek,mt7530:
 remove unnecessary dsa-port reference
In-Reply-To: <20221202204559.162619-7-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-7-colin.foster@in-advantage.com>
Message-ID: <167027667922.2678357.1832683707932570480.robh@kernel.org>


On Fri, 02 Dec 2022 12:45:56 -0800, Colin Foster wrote:
> dsa.yaml contains a reference to dsa-port.yaml, so a duplicate reference to
> the binding isn't necessary. Remove this unnecessary reference.
> 
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> Reviewed-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> ---
> 
> v3 -> v4
>   * Add Florian Reviewed tag
> 
> v2 -> v3
>   * Keep "unevaluatedProperties: false" under the switch ports node.
> 
> v1 -> v2
>   * Add Reviewed-by
> 
> ---
>  Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml | 1 -
>  1 file changed, 1 deletion(-)
> 

Reviewed-by: Rob Herring <robh at kernel.org>


From robh at kernel.org  Mon Dec  5 13:45:06 2022
From: robh at kernel.org (Rob Herring)
Date: Mon, 5 Dec 2022 15:45:06 -0600
Subject: [PATCH v4 net-next 8/9] dt-bindings: net: add generic
 ethernet-switch-port binding
In-Reply-To: <20221202204559.162619-9-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-9-colin.foster@in-advantage.com>
Message-ID: <167027670592.2679068.10166179243095082377.robh@kernel.org>


On Fri, 02 Dec 2022 12:45:58 -0800, Colin Foster wrote:
> The dsa-port.yaml binding had several references that can be common to all
> ethernet ports, not just dsa-specific ones. Break out the generic bindings
> to ethernet-switch-port.yaml they can be used by non-dsa drivers.
> 
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> ---
> 
> v3 -> v4
>   * Add Florian Reviewed tag
> 
> v2 -> v3
>   * Change dsa-port title from "DSA Switch port Device Tree Bindings"
>     to "Generic DSA Switch port"
>   * Add reference to ethernet-switch-port.yaml# in dsa-port.yaml
>   * Change title of ethernet-switch-port.yaml from "Ethernet Switch
>     port Device Tree Bindings" to "Generic Ethernet Switch port"
>   * Remove most properties from ethernet-switch-port.yaml. They're
>     all in ethernet-controller, and are all allowed.
>   * ethernet-switch.yaml now only references ethernet-switch-port.yaml#
>     under the port node.
> 
> v1 -> v2
>   * Remove accidental addition of
>     "$ref: /schemas/net/ethernet-switch-port.yaml" which should be kept
>     out of dsa-port so that it doesn't get referenced multiple times
>     through both ethernet-switch and dsa-port.
> 
> ---
>  .../devicetree/bindings/net/dsa/dsa-port.yaml | 24 ++----------------
>  .../bindings/net/ethernet-switch-port.yaml    | 25 +++++++++++++++++++
>  .../bindings/net/ethernet-switch.yaml         |  6 +----
>  MAINTAINERS                                   |  1 +
>  4 files changed, 29 insertions(+), 27 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
> 

Reviewed-by: Rob Herring <robh at kernel.org>


From robh at kernel.org  Mon Dec  5 13:47:47 2022
From: robh at kernel.org (Rob Herring)
Date: Mon, 5 Dec 2022 15:47:47 -0600
Subject: [PATCH v4 net-next 7/9] dt-bindings: net: add generic
 ethernet-switch
In-Reply-To: <20221202204559.162619-8-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-8-colin.foster@in-advantage.com>
Message-ID: <20221205214747.GA2679200-robh@kernel.org>

On Fri, Dec 02, 2022 at 12:45:57PM -0800, Colin Foster wrote:
> The dsa.yaml bindings had references that can apply to non-dsa switches. To
> prevent duplication of this information, keep the dsa-specific information
> inside dsa.yaml and move the remaining generic information to the newly
> created ethernet-switch.yaml.
> 
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> ---
> 
> v3 -> v4
>   * Update ethernet-ports and ethernet-port nodes to match what the new
>     dsa.yaml has. Namely:
>       "unevaluatedProperties: false" instead of "additionalProperties: true"
>       "additionalProperties: true" instead of "unevaluatedProperties: true"
>     for ethernet-ports and ethernet-port, respectively.
>   * Add Florian Reviewed tag
> 
> v2 -> v3
>   * Change ethernet-switch.yaml title from "Ethernet Switch Device
>     Tree Bindings" to "Generic Ethernet Switch"
>   * Rework ethernet-switch.yaml description
>   * Add base defs structure for switches that don't have any additional
>     properties.
>   * Add "additionalProperties: true" under "^(ethernet-)?ports$" node
>   * Correct port reference from /schemas/net/dsa/dsa-port.yaml# to
>     ethernet-controller.yaml#
> 
> v1 -> v2
>   * No net change, but deletions from dsa.yaml included the changes for
>     "addionalProperties: true" under ports and "unevaluatedProperties:
>     true" under port.
> 
> ---
>  .../devicetree/bindings/net/dsa/dsa.yaml      | 28 +-------
>  .../bindings/net/ethernet-switch.yaml         | 66 +++++++++++++++++++
>  MAINTAINERS                                   |  1 +
>  3 files changed, 69 insertions(+), 26 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/net/ethernet-switch.yaml
> 
> diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> index 5081f4979f1b..843205ea722d 100644
> --- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> @@ -18,6 +18,8 @@ description:
>  
>  select: false
>  
> +$ref: "/schemas/net/ethernet-switch.yaml#"

You can drop quotes here.

With that,

Reviewed-by: Rob Herring <robh at kernel.org>

This is a nice clean-up.

Rob


From pavel at ucw.cz  Mon Dec  5 14:30:35 2022
From: pavel at ucw.cz (Pavel Machek)
Date: Mon, 5 Dec 2022 23:30:35 +0100
Subject: [PATCH v2 01/11] pwm: Make .get_state() callback return an error
 code
In-Reply-To: <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
 <20221130152148.2769768-2-u.kleine-koenig@pengutronix.de>
Message-ID: <Y45xC/Gwhrr+fctN@duo.ucw.cz>

Hi!

> .get_state() might fail in some cases. To make it possible that a driver
> signals such a failure change the prototype of .get_state() to return an
> error code.
> 
> This patch was created using coccinelle and the following semantic patch:
> 
> @p1@
> identifier getstatefunc;
> identifier driver;
> @@
>  struct pwm_ops driver = {
>         ...,
>         .get_state = getstatefunc
>         ,...
>  };
> 
> @p2@
> identifier p1.getstatefunc;
> identifier chip, pwm, state;
> @@
> -void
> +int
>  getstatefunc(struct pwm_chip *chip, struct pwm_device *pwm, struct pwm_state *state)
>  {
>    ...
> -  return;
> +  return 0;
>    ...
>  }
> 
> plus the actual change of the prototype in include/linux/pwm.h (plus some
> manual fixing of indentions and empty lines).
> 
> So for now all drivers return success unconditionally. They are adapted
> in the following patches to make the changes easier reviewable.
> 
> Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de>

LED part:

Acked-by: Pavel Machek <pavel at ucw.cz>

Best regards,
							Pavel

>  static const struct pwm_ops ti_sn_pwm_ops = {
> diff --git a/drivers/leds/rgb/leds-qcom-lpg.c b/drivers/leds/rgb/leds-qcom-lpg.c
> index 02f51cc61837..741cc2fd817d 100644
> --- a/drivers/leds/rgb/leds-qcom-lpg.c
> +++ b/drivers/leds/rgb/leds-qcom-lpg.c
> @@ -968,8 +968,8 @@ static int lpg_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>  	return ret;
>  }
>  
> -static void lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -			      struct pwm_state *state)
> +static int lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +			     struct pwm_state *state)
>  {
>  	struct lpg *lpg = container_of(chip, struct lpg, pwm);
>  	struct lpg_channel *chan = &lpg->channels[pwm->hwpwm];
> @@ -982,20 +982,20 @@ static void lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>  
>  	ret = regmap_read(lpg->map, chan->base + LPG_SIZE_CLK_REG, &val);
>  	if (ret)
> -		return;
> +		return 0;
>  
>  	refclk = lpg_clk_rates[val & PWM_CLK_SELECT_MASK];
>  	if (refclk) {
>  		ret = regmap_read(lpg->map, chan->base + LPG_PREDIV_CLK_REG, &val);
>  		if (ret)
> -			return;
> +			return 0;
>  
>  		pre_div = lpg_pre_divs[FIELD_GET(PWM_FREQ_PRE_DIV_MASK, val)];
>  		m = FIELD_GET(PWM_FREQ_EXP_MASK, val);
>  
>  		ret = regmap_bulk_read(lpg->map, chan->base + PWM_VALUE_REG, &pwm_value, sizeof(pwm_value));
>  		if (ret)
> -			return;
> +			return 0;
>  
>  		state->period = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC * LPG_RESOLUTION * pre_div * (1 << m), refclk);
>  		state->duty_cycle = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC * pwm_value * pre_div * (1 << m), refclk);
> @@ -1006,13 +1006,15 @@ static void lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>  
>  	ret = regmap_read(lpg->map, chan->base + PWM_ENABLE_CONTROL_REG, &val);
>  	if (ret)
> -		return;
> +		return 0;
>  
>  	state->enabled = FIELD_GET(LPG_ENABLE_CONTROL_OUTPUT, val);
>  	state->polarity = PWM_POLARITY_NORMAL;
>  
>  	if (state->duty_cycle > state->period)
>  		state->duty_cycle = state->period;
> +
> +	return 0;
>  }

-- 
People of Russia, stop Putin before his war on Ukraine escalates.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221205/9beb6abb/attachment-0001.sig>

From chunkuang.hu at kernel.org  Mon Dec  5 15:16:02 2022
From: chunkuang.hu at kernel.org (Chun-Kuang Hu)
Date: Tue, 6 Dec 2022 07:16:02 +0800
Subject: [PATCH v3] mailbox: mtk-cmdq: Do not request irq until we are ready
In-Reply-To: <20221125-mtk-mailbox-v3-0-c4b635052b65@chromium.org>
References: <20221125-mtk-mailbox-v3-0-c4b635052b65@chromium.org>
Message-ID: <CAAOTY__8uYdjFHGTrtq-ZTqvt7gaXeEKv9T3X0e=v4iZ52EE9g@mail.gmail.com>

Ricardo Ribalda <ribalda at chromium.org> ? 2022?11?30? ?? ??8:59???
>
> If the system comes from kexec() the peripheral might trigger an IRQ
> befoe we are ready for it. Triggering a crash due to an access to
> invalid memory.

Reviewed-by: Chun-Kuang Hu <chunkuang.hu at kernel.org>

>
> Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
> ---
> To: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> To: Jassi Brar <jassisinghbrar at gmail.com>
> To: Matthias Brugger <matthias.bgg at gmail.com>
> Cc: linux-kernel at vger.kernel.org
> Cc: linux-arm-kernel at lists.infradead.org
> Cc: linux-mediatek at lists.infradead.org
> ---
> Changes in v3:
> - Rebase on top of https://patchwork.kernel.org/project/linux-mediatek/patch/20221102100736.37815-1-angelogioacchino.delregno at collabora.com/
> - Link to v2: https://lore.kernel.org/r/20221125-mtk-mailbox-v2-0-886f70c7173c at chromium.org
>
> Changes in v2:
> - I have managed to repro a different panic. Moving the irq enabling to the very end of probe.
> - Link to v1: https://lore.kernel.org/r/20221125-mtk-mailbox-v1-0-2e3ee120850c at chromium.org
> ---
>  drivers/mailbox/mtk-cmdq-mailbox.c | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c b/drivers/mailbox/mtk-cmdq-mailbox.c
> index a460ee26eb11..b18d47ea13a0 100644
> --- a/drivers/mailbox/mtk-cmdq-mailbox.c
> +++ b/drivers/mailbox/mtk-cmdq-mailbox.c
> @@ -569,12 +569,6 @@ static int cmdq_probe(struct platform_device *pdev)
>         }
>
>         cmdq->irq_mask = GENMASK(cmdq->pdata->thread_nr - 1, 0);
> -       err = devm_request_irq(dev, cmdq->irq, cmdq_irq_handler, IRQF_SHARED,
> -                              "mtk_cmdq", cmdq);
> -       if (err < 0) {
> -               dev_err(dev, "failed to register ISR (%d)\n", err);
> -               return err;
> -       }
>
>         dev_dbg(dev, "cmdq device: addr:0x%p, va:0x%p, irq:%d\n",
>                 dev, cmdq->base, cmdq->irq);
> @@ -641,6 +635,13 @@ static int cmdq_probe(struct platform_device *pdev)
>
>         cmdq_init(cmdq);
>
> +       err = devm_request_irq(dev, cmdq->irq, cmdq_irq_handler, IRQF_SHARED,
> +                              "mtk_cmdq", cmdq);
> +       if (err < 0) {
> +               dev_err(dev, "failed to register ISR (%d)\n", err);
> +               return err;
> +       }
> +
>         return 0;
>  }
>
>
> ---
> base-commit: 1642107db81361b4339643eb90af4839e2cf229f
> change-id: 20221125-mtk-mailbox-ba6cbd1d91b6
>
> Best regards,
> --
> Ricardo Ribalda <ribalda at chromium.org>
>


From viresh.kumar at linaro.org  Mon Dec  5 15:30:59 2022
From: viresh.kumar at linaro.org (Viresh Kumar)
Date: Tue, 6 Dec 2022 05:00:59 +0530
Subject: [PATCH] Revert "cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()"
In-Reply-To: <CAJZ5v0gTV5LM_qRKncPq5Z2TRENMgVer6oZiGAKJn6ndrNSKxg@mail.gmail.com>
References: <930778a1-5e8b-6df6-3276-42dcdadaf682@systemli.org>
 <18947e09733a17935af9a123ccf9b6e92faeaf9b.1669958641.git.viresh.kumar@linaro.org>
 <CAJZ5v0ixHocQbu6-zs3dMDsiw8vdPyv=8Re7N4kUckeGkLhUzg@mail.gmail.com>
 <CAJZ5v0hc8CsvqLKxi5iRq7iR0bkt25dRnLBd23mx-zdi2Sjgsw@mail.gmail.com>
 <20221205043044.bgecubnw7d3xlyi5@vireshk-i7>
 <CAJZ5v0gTV5LM_qRKncPq5Z2TRENMgVer6oZiGAKJn6ndrNSKxg@mail.gmail.com>
Message-ID: <20221205233059.izdqcilbhjmkh6ew@vireshk-i7>

On 05-12-22, 13:08, Rafael J. Wysocki wrote:
> Well, this was a bit unclear.

Hmm, yeah. I assumed that the arm stuff will go via my tree and you
will be in sync with this. But yeah, a comment in the patch won't have
hurt.

> Alright then, I'll assume that the proper fix will come in through
> your pull request for 6.2 (but please send that one before the merge
> window opens), thanks!

I was ready with pull request since several days, was just waiting for
this to get sorted out. And I think this may get delayed a bit too, so
I better send the first pull request now and worry about this later.

-- 
viresh


From howard-yh.hsu at mediatek.com  Mon Dec  5 17:29:49 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Tue, 6 Dec 2022 09:29:49 +0800
Subject: [PATCH 1/3] wifi: mt76: mt7915: rework mt7915_thermal_set_cur_throttle_state()
In-Reply-To: <20221206012951.10719-1-howard-yh.hsu@mediatek.com>
References: <20221206012951.10719-1-howard-yh.hsu@mediatek.com>
Message-ID: <20221206012951.10719-2-howard-yh.hsu@mediatek.com>

This patch includes 3 changes:
1. The maximum throttle state can be set to 100 to fix the problem that maximum tx
cyle can only be set to 99.
2. Throttle state do not need to be different from the previous state.
This will make it is impossible for users to just change the
trigger/restore temp but not the throttle state.
3. Add dev_err so that it is easier to see invalid setting while looking at dmesg.

Fixes: 9fee8f3736eb ("mt76: mt7915e: Fix degraded performance after temporary overheat")
Co-developed-by: Ryder Lee <ryder.lee at mediatek.com>
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
Signed-off-by: Howard Hsu <howard-yh.hsu at mediatek.com>
---
 .../net/wireless/mediatek/mt76/mt7915/init.c   | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
index c810c31fbd6e..abeecf15f1c8 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
@@ -131,14 +131,17 @@ mt7915_thermal_set_cur_throttle_state(struct thermal_cooling_device *cdev,
 	u8 throttling = MT7915_THERMAL_THROTTLE_MAX - state;
 	int ret;
 
-	if (state > MT7915_CDEV_THROTTLE_MAX)
+	if (state > MT7915_THERMAL_THROTTLE_MAX) {
+		dev_err(phy->dev->mt76.dev,
+			"please specify a valid throttling state\n");
 		return -EINVAL;
+	}
 
-	if (phy->throttle_temp[0] > phy->throttle_temp[1])
-		return 0;
-
-	if (state == phy->cdev_state)
-		return 0;
+	if (phy->throttle_temp[0] > phy->throttle_temp[1]) {
+		dev_err(phy->dev->mt76.dev,
+			"temp1_crit shall not be greater than temp1_max\n");
+		return -EINVAL;
+	}
 
 	/*
 	 * cooling_device convention: 0 = no cooling, more = more cooling
@@ -164,7 +167,7 @@ static void mt7915_unregister_thermal(struct mt7915_phy *phy)
 	struct wiphy *wiphy = phy->mt76->hw->wiphy;
 
 	if (!phy->cdev)
-	    return;
+		return;
 
 	sysfs_remove_link(&wiphy->dev.kobj, "cooling_device");
 	thermal_cooling_device_unregister(phy->cdev);
@@ -1101,7 +1104,6 @@ static void mt7915_stop_hardware(struct mt7915_dev *dev)
 		mt7986_wmac_disable(dev);
 }
 
-
 int mt7915_register_device(struct mt7915_dev *dev)
 {
 	struct ieee80211_hw *hw = mt76_hw(dev);
-- 
2.18.0



From howard-yh.hsu at mediatek.com  Mon Dec  5 17:29:50 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Tue, 6 Dec 2022 09:29:50 +0800
Subject: [PATCH 2/3] wifi: mt76: mt7915: call mt7915_mcu_set_thermal_throttling() only after init_work
In-Reply-To: <20221206012951.10719-1-howard-yh.hsu@mediatek.com>
References: <20221206012951.10719-1-howard-yh.hsu@mediatek.com>
Message-ID: <20221206012951.10719-3-howard-yh.hsu@mediatek.com>

Enable thermal management by default shall not be executed during mcu
init. This causes thermal configuration being reset to the firmware
default settings.

Fixes: c67df0d3130a ("mt76: mt7915e: Enable thermal management by default")
Signed-off-by: Howard Hsu <howard-yh.hsu at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7915/init.c | 3 +--
 drivers/net/wireless/mediatek/mt76/mt7915/main.c | 5 +++++
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
index abeecf15f1c8..8f4561eed5db 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
@@ -204,8 +204,7 @@ static int mt7915_thermal_init(struct mt7915_phy *phy)
 	phy->throttle_temp[0] = 110;
 	phy->throttle_temp[1] = 120;
 
-	return mt7915_mcu_set_thermal_throttling(phy,
-						 MT7915_THERMAL_THROTTLE_MAX);
+	return 0;
 }
 
 static void mt7915_led_set_config(struct led_classdev *led_cdev,
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
index 0511d6a505b0..fc87216e40b1 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
@@ -57,6 +57,11 @@ int mt7915_run(struct ieee80211_hw *hw)
 		mt7915_mac_enable_nf(dev, phy->mt76->band_idx);
 	}
 
+	ret = mt7915_mcu_set_thermal_throttling(phy, MT7915_THERMAL_THROTTLE_MAX);
+
+	if (ret)
+		goto out;
+
 	ret = mt76_connac_mcu_set_rts_thresh(&dev->mt76, 0x92b,
 					     phy->mt76->band_idx);
 	if (ret)
-- 
2.18.0



From kuba at kernel.org  Mon Dec  5 17:44:41 2022
From: kuba at kernel.org (Jakub Kicinski)
Date: Mon, 5 Dec 2022 17:44:41 -0800
Subject: [PATCH net-next] net: ethernet: mtk_wed: fix possible deadlock
 if mtk_wed_wo_init fails
In-Reply-To: <Y420B4/IpwFHJAck@lore-desk>
References: <a87f05e60ea1a94b571c9c87b69cc5b0e94943f2.1669999089.git.lorenzo@kernel.org>
	<Y4ybbkn+nXkGsqWe@unreal>
	<Y4y4If8XXu+wErIj@lore-desk>
	<Y42d2us5Pv1UqhEj@unreal>
	<Y420B4/IpwFHJAck@lore-desk>
Message-ID: <20221205174441.30741550@kernel.org>

On Mon, 5 Dec 2022 10:04:07 +0100 Lorenzo Bianconi wrote:
> > IMHO, it is a culprit, proper error unwind means that you won't call to
> > uninit functions for something that is not initialized yet. It is better
> > to fix it instead of adding "if (!wo) ..." checks.  
> 
> So, iiuc, you would prefer to do something like:
> 
> __mtk_wed_detach()
> {
> 	...
> 	if (mtk_wed_get_rx_capa(dev) && wo) {
> 		mtk_wed_wo_reset(dev);
> 		mtk_wed_free_rx_rings(dev);
> 		mtk_wed_wo_deinit(hw);
> 	}
> 	...
> 	
> Right? I am fine both ways :)

FWIW, that does seem slightly better to me as well.
Also - aren't you really fixing multiple issues here 
(even if on the same error path)? The locking, 
the null-checking and the change in mtk_wed_wo_reset()?


From howard-yh.hsu at mediatek.com  Mon Dec  5 17:29:48 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Tue, 6 Dec 2022 09:29:48 +0800
Subject: [PATCH 0/3] wifi: mt76: mt7915: rework thermal protection
Message-ID: <20221206012951.10719-1-howard-yh.hsu@mediatek.com>

*** BLURB HERE ***

Howard Hsu (3):
  wifi: mt76: mt7915: rework mt7915_thermal_set_cur_throttle_state()
  wifi: mt76: mt7915: call mt7915_mcu_set_thermal_throttling() only
    after init_work
  wifi: mt76: mt7915: rework mt7915_mcu_set_thermal_throttling()

 .../net/wireless/mediatek/mt76/mt7915/init.c  | 21 ++++++++++---------
 .../net/wireless/mediatek/mt76/mt7915/main.c  |  5 +++++
 .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 17 ++++++++-------
 3 files changed, 26 insertions(+), 17 deletions(-)

-- 
2.18.0



From nathan.lu at mediatek.com  Mon Dec  5 18:00:42 2022
From: nathan.lu at mediatek.com (nathan.lu)
Date: Tue, 6 Dec 2022 10:00:42 +0800
Subject: [PATCH v4 2/6] dt-bindings: mediatek: modify VDOSYS0 mmsys device tree Documentations for MT8188
In-Reply-To: <20221206020046.11333-1-nathan.lu@mediatek.com>
References: <20221206020046.11333-1-nathan.lu@mediatek.com>
Message-ID: <20221206020046.11333-3-nathan.lu@mediatek.com>

From: Nathan Lu <nathan.lu at mediatek.com>

modify VDOSYS0 mmsys device tree Documentations for MT8188.

Signed-off-by: Nathan Lu <nathan.lu at mediatek.com>
---
 .../devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml         | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
index 0711f1834fbd..84de12709323 100644
--- a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
+++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
@@ -31,6 +31,7 @@ properties:
               - mediatek,mt8173-mmsys
               - mediatek,mt8183-mmsys
               - mediatek,mt8186-mmsys
+              - mediatek,mt8188-vdosys0
               - mediatek,mt8192-mmsys
               - mediatek,mt8365-mmsys
           - const: syscon
-- 
2.18.0



From nathan.lu at mediatek.com  Mon Dec  5 18:00:45 2022
From: nathan.lu at mediatek.com (nathan.lu)
Date: Tue, 6 Dec 2022 10:00:45 +0800
Subject: [PATCH v4 5/6] soc: mediatek: add mtk-mutex support for mt8188 vdosys0
In-Reply-To: <20221206020046.11333-1-nathan.lu@mediatek.com>
References: <20221206020046.11333-1-nathan.lu@mediatek.com>
Message-ID: <20221206020046.11333-6-nathan.lu@mediatek.com>

From: Nathan Lu <nathan.lu at mediatek.com>

add mtk-mutex support for mt8188 vdosys0.

Signed-off-by: amy zhang <Amy.Zhang at mediatek.com>
Signed-off-by: Nathan Lu <nathan.lu at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/soc/mediatek/mtk-mutex.c | 53 ++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/drivers/soc/mediatek/mtk-mutex.c b/drivers/soc/mediatek/mtk-mutex.c
index c1a33d52038e..77d1c084cbb1 100644
--- a/drivers/soc/mediatek/mtk-mutex.c
+++ b/drivers/soc/mediatek/mtk-mutex.c
@@ -116,6 +116,21 @@
 #define MT8173_MUTEX_MOD_DISP_PWM1		24
 #define MT8173_MUTEX_MOD_DISP_OD		25
 
+#define MT8188_MUTEX_MOD_DISP_OVL0		0
+#define MT8188_MUTEX_MOD_DISP_WDMA0		1
+#define MT8188_MUTEX_MOD_DISP_RDMA0		2
+#define MT8188_MUTEX_MOD_DISP_COLOR0		3
+#define MT8188_MUTEX_MOD_DISP_CCORR0		4
+#define MT8188_MUTEX_MOD_DISP_AAL0		5
+#define MT8188_MUTEX_MOD_DISP_GAMMA0		6
+#define MT8188_MUTEX_MOD_DISP_DITHER0		7
+#define MT8188_MUTEX_MOD_DISP_DSI0		8
+#define MT8188_MUTEX_MOD_DISP_DSC_WRAP0_CORE0	9
+#define MT8188_MUTEX_MOD_DISP_VPP_MERGE		20
+#define MT8188_MUTEX_MOD_DISP_DP_INTF0		21
+#define MT8188_MUTEX_MOD_DISP_POSTMASK0		24
+#define MT8188_MUTEX_MOD2_DISP_PWM0		33
+
 #define MT8195_MUTEX_MOD_DISP_OVL0		0
 #define MT8195_MUTEX_MOD_DISP_WDMA0		1
 #define MT8195_MUTEX_MOD_DISP_RDMA0		2
@@ -180,6 +195,8 @@
 #define MT8167_MUTEX_SOF_DPI1			3
 #define MT8183_MUTEX_SOF_DSI0			1
 #define MT8183_MUTEX_SOF_DPI0			2
+#define MT8188_MUTEX_SOF_DSI0			1
+#define MT8188_MUTEX_SOF_DP_INTF0		3
 #define MT8195_MUTEX_SOF_DSI0			1
 #define MT8195_MUTEX_SOF_DSI1			2
 #define MT8195_MUTEX_SOF_DP_INTF0		3
@@ -189,6 +206,8 @@
 
 #define MT8183_MUTEX_EOF_DSI0			(MT8183_MUTEX_SOF_DSI0 << 6)
 #define MT8183_MUTEX_EOF_DPI0			(MT8183_MUTEX_SOF_DPI0 << 6)
+#define MT8188_MUTEX_EOF_DSI0			(MT8188_MUTEX_SOF_DSI0 << 7)
+#define MT8188_MUTEX_EOF_DP_INTF0		(MT8188_MUTEX_SOF_DP_INTF0 << 7)
 #define MT8195_MUTEX_EOF_DSI0			(MT8195_MUTEX_SOF_DSI0 << 7)
 #define MT8195_MUTEX_EOF_DSI1			(MT8195_MUTEX_SOF_DSI1 << 7)
 #define MT8195_MUTEX_EOF_DP_INTF0		(MT8195_MUTEX_SOF_DP_INTF0 << 7)
@@ -344,6 +363,23 @@ static const unsigned int mt8186_mdp_mutex_table_mod[MUTEX_MOD_IDX_MAX] = {
 	[MUTEX_MOD_IDX_MDP_COLOR0] = MT8186_MUTEX_MOD_MDP_COLOR0,
 };
 
+static const unsigned int mt8188_mutex_mod[DDP_COMPONENT_ID_MAX] = {
+	[DDP_COMPONENT_OVL0] = MT8188_MUTEX_MOD_DISP_OVL0,
+	[DDP_COMPONENT_WDMA0] = MT8188_MUTEX_MOD_DISP_WDMA0,
+	[DDP_COMPONENT_RDMA0] = MT8188_MUTEX_MOD_DISP_RDMA0,
+	[DDP_COMPONENT_COLOR0] = MT8188_MUTEX_MOD_DISP_COLOR0,
+	[DDP_COMPONENT_CCORR] = MT8188_MUTEX_MOD_DISP_CCORR0,
+	[DDP_COMPONENT_AAL0] = MT8188_MUTEX_MOD_DISP_AAL0,
+	[DDP_COMPONENT_GAMMA] = MT8188_MUTEX_MOD_DISP_GAMMA0,
+	[DDP_COMPONENT_POSTMASK0] = MT8188_MUTEX_MOD_DISP_POSTMASK0,
+	[DDP_COMPONENT_DITHER0] = MT8188_MUTEX_MOD_DISP_DITHER0,
+	[DDP_COMPONENT_MERGE0] = MT8188_MUTEX_MOD_DISP_VPP_MERGE,
+	[DDP_COMPONENT_DSC0] = MT8188_MUTEX_MOD_DISP_DSC_WRAP0_CORE0,
+	[DDP_COMPONENT_DSI0] = MT8188_MUTEX_MOD_DISP_DSI0,
+	[DDP_COMPONENT_PWM0] = MT8188_MUTEX_MOD2_DISP_PWM0,
+	[DDP_COMPONENT_DP_INTF0] = MT8188_MUTEX_MOD_DISP_DP_INTF0,
+};
+
 static const unsigned int mt8192_mutex_mod[DDP_COMPONENT_ID_MAX] = {
 	[DDP_COMPONENT_AAL0] = MT8192_MUTEX_MOD_DISP_AAL0,
 	[DDP_COMPONENT_CCORR] = MT8192_MUTEX_MOD_DISP_CCORR0,
@@ -435,6 +471,14 @@ static const unsigned int mt8186_mutex_sof[MUTEX_SOF_DSI3 + 1] = {
  * but also detect the error at end of frame(EAEOF) when EOF signal
  * arrives.
  */
+static const unsigned int mt8188_mutex_sof[DDP_MUTEX_SOF_MAX] = {
+	[MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE,
+	[MUTEX_SOF_DSI0] =
+		MT8188_MUTEX_SOF_DSI0 | MT8188_MUTEX_EOF_DSI0,
+	[MUTEX_SOF_DP_INTF0] =
+		MT8188_MUTEX_SOF_DP_INTF0 | MT8188_MUTEX_EOF_DP_INTF0,
+};
+
 static const unsigned int mt8195_mutex_sof[DDP_MUTEX_SOF_MAX] = {
 	[MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE,
 	[MUTEX_SOF_DSI0] = MT8195_MUTEX_SOF_DSI0 | MT8195_MUTEX_EOF_DSI0,
@@ -505,6 +549,13 @@ static const struct mtk_mutex_data mt8186_mutex_driver_data = {
 	.mutex_sof_reg = MT8183_MUTEX0_SOF0,
 };
 
+static const struct mtk_mutex_data mt8188_mutex_driver_data = {
+	.mutex_mod = mt8188_mutex_mod,
+	.mutex_sof = mt8188_mutex_sof,
+	.mutex_mod_reg = MT8183_MUTEX0_MOD0,
+	.mutex_sof_reg = MT8183_MUTEX0_SOF0,
+};
+
 static const struct mtk_mutex_data mt8192_mutex_driver_data = {
 	.mutex_mod = mt8192_mutex_mod,
 	.mutex_sof = mt8183_mutex_sof,
@@ -854,6 +905,8 @@ static const struct of_device_id mutex_driver_dt_match[] = {
 	  .data = &mt8186_mutex_driver_data},
 	{ .compatible = "mediatek,mt8186-mdp3-mutex",
 	  .data = &mt8186_mdp_mutex_driver_data},
+	{ .compatible = "mediatek,mt8188-disp-mutex",
+	  .data = &mt8188_mutex_driver_data},
 	{ .compatible = "mediatek,mt8192-disp-mutex",
 	  .data = &mt8192_mutex_driver_data},
 	{ .compatible = "mediatek,mt8195-disp-mutex",
-- 
2.18.0



From nathan.lu at mediatek.com  Mon Dec  5 18:00:43 2022
From: nathan.lu at mediatek.com (nathan.lu)
Date: Tue, 6 Dec 2022 10:00:43 +0800
Subject: [PATCH v4 3/6] dt-bindings: mediatek: modify VDOSYS0 mutex device tree Documentations for MT8188
In-Reply-To: <20221206020046.11333-1-nathan.lu@mediatek.com>
References: <20221206020046.11333-1-nathan.lu@mediatek.com>
Message-ID: <20221206020046.11333-4-nathan.lu@mediatek.com>

From: Nathan Lu <nathan.lu at mediatek.com>

modify VDOSYS0 mutex device tree Documentations for MT8188.

Signed-off-by: Nathan Lu <nathan.lu at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../devicetree/bindings/soc/mediatek/mediatek,mutex.yaml         | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/soc/mediatek/mediatek,mutex.yaml b/Documentation/devicetree/bindings/soc/mediatek/mediatek,mutex.yaml
index 9241e5fc7cff..15c133cac315 100644
--- a/Documentation/devicetree/bindings/soc/mediatek/mediatek,mutex.yaml
+++ b/Documentation/devicetree/bindings/soc/mediatek/mediatek,mutex.yaml
@@ -32,6 +32,7 @@ properties:
       - mediatek,mt8183-disp-mutex
       - mediatek,mt8186-disp-mutex
       - mediatek,mt8186-mdp3-mutex
+      - mediatek,mt8188-disp-mutex
       - mediatek,mt8192-disp-mutex
       - mediatek,mt8195-disp-mutex
 
-- 
2.18.0



From nathan.lu at mediatek.com  Mon Dec  5 18:00:46 2022
From: nathan.lu at mediatek.com (nathan.lu)
Date: Tue, 6 Dec 2022 10:00:46 +0800
Subject: [PATCH v4 6/6] drm/mediatek: add mediatek-drm of vdosys0 support for mt8188
In-Reply-To: <20221206020046.11333-1-nathan.lu@mediatek.com>
References: <20221206020046.11333-1-nathan.lu@mediatek.com>
Message-ID: <20221206020046.11333-7-nathan.lu@mediatek.com>

From: Nathan Lu <nathan.lu at mediatek.com>

add driver data of mt8188 vdosys0 to mediatek-drm and the sub driver.

Signed-off-by: amy zhang <Amy.Zhang at mediatek.com>
Signed-off-by: Nathan Lu <nathan.lu at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/gpu/drm/mediatek/mtk_drm_drv.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index b12e5b977c50..8058a5ec2f1d 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -176,6 +176,18 @@ static const enum mtk_ddp_comp_id mt8186_mtk_ddp_ext[] = {
 	DDP_COMPONENT_DPI0,
 };
 
+static const enum mtk_ddp_comp_id mt8188_mtk_ddp_main[] = {
+	DDP_COMPONENT_OVL0,
+	DDP_COMPONENT_RDMA0,
+	DDP_COMPONENT_COLOR0,
+	DDP_COMPONENT_CCORR,
+	DDP_COMPONENT_AAL0,
+	DDP_COMPONENT_GAMMA,
+	DDP_COMPONENT_POSTMASK0,
+	DDP_COMPONENT_DITHER0,
+	DDP_COMPONENT_DP_INTF0,
+};
+
 static const enum mtk_ddp_comp_id mt8192_mtk_ddp_main[] = {
 	DDP_COMPONENT_OVL0,
 	DDP_COMPONENT_OVL_2L0,
@@ -259,6 +271,11 @@ static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {
 	.ext_len = ARRAY_SIZE(mt8186_mtk_ddp_ext),
 };
 
+static const struct mtk_mmsys_driver_data mt8188_vdosys0_driver_data = {
+	.main_path = mt8188_mtk_ddp_main,
+	.main_len = ARRAY_SIZE(mt8188_mtk_ddp_main),
+};
+
 static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
 	.main_path = mt8192_mtk_ddp_main,
 	.main_len = ARRAY_SIZE(mt8192_mtk_ddp_main),
@@ -516,6 +533,8 @@ static const struct of_device_id mtk_ddp_comp_dt_ids[] = {
 	  .data = (void *)MTK_DISP_MUTEX },
 	{ .compatible = "mediatek,mt8186-disp-mutex",
 	  .data = (void *)MTK_DISP_MUTEX },
+	{ .compatible = "mediatek,mt8188-disp-mutex",
+	  .data = (void *)MTK_DISP_MUTEX },
 	{ .compatible = "mediatek,mt8192-disp-mutex",
 	  .data = (void *)MTK_DISP_MUTEX },
 	{ .compatible = "mediatek,mt8195-disp-mutex",
@@ -600,6 +619,8 @@ static const struct of_device_id mtk_drm_of_ids[] = {
 	  .data = &mt8183_mmsys_driver_data},
 	{ .compatible = "mediatek,mt8186-mmsys",
 	  .data = &mt8186_mmsys_driver_data},
+	{ .compatible = "mediatek,mt8188-vdosys0",
+	  .data = &mt8188_vdosys0_driver_data},
 	{ .compatible = "mediatek,mt8192-mmsys",
 	  .data = &mt8192_mmsys_driver_data},
 	{ .compatible = "mediatek,mt8195-mmsys",
-- 
2.18.0



From patchwork-bot+netdevbpf at kernel.org  Mon Dec  5 18:20:15 2022
From: patchwork-bot+netdevbpf at kernel.org (patchwork-bot+netdevbpf at kernel.org)
Date: Tue, 06 Dec 2022 02:20:15 +0000
Subject: [PATCH net-next] net: mtk_eth_soc: enable flow offload support fot
 MT7986 SoC
In-Reply-To: <fdcaacd827938e6a8c4aa1ac2c13e46d2c08c821.1670072898.git.lorenzo@kernel.org>
References: <fdcaacd827938e6a8c4aa1ac2c13e46d2c08c821.1670072898.git.lorenzo@kernel.org>
Message-ID: <167029321565.12541.13204122359496761946.git-patchwork-notify@kernel.org>

Hello:

This patch was applied to netdev/net-next.git (master)
by Jakub Kicinski <kuba at kernel.org>:

On Sat,  3 Dec 2022 14:20:37 +0100 you wrote:
> Since Wireless Ethernet Dispatcher is now available for mt7986 in mt76,
> enable hw flow support for MT7986 SoC.
> 
> Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> ---
>  drivers/net/ethernet/mediatek/mtk_eth_soc.c | 1 +
>  1 file changed, 1 insertion(+)

Here is the summary with links:
  - [net-next] net: mtk_eth_soc: enable flow offload support fot MT7986 SoC
    https://git.kernel.org/netdev/net-next/c/c9f8d73645b6

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html




From howard-yh.hsu at mediatek.com  Mon Dec  5 17:29:51 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Tue, 6 Dec 2022 09:29:51 +0800
Subject: [PATCH 3/3] wifi: mt76: mt7915: rework mt7915_mcu_set_thermal_throttling()
In-Reply-To: <20221206012951.10719-1-howard-yh.hsu@mediatek.com>
References: <20221206012951.10719-1-howard-yh.hsu@mediatek.com>
Message-ID: <20221206012951.10719-4-howard-yh.hsu@mediatek.com>

Firmware expects to disable thermal protect first before reconfiguring.

Fixes: afab0e8202ff ("mt76: mt7915: add thermal cooling device support")
Signed-off-by: Howard Hsu <howard-yh.hsu at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7915/mcu.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
index b2652de082ba..e1b6d644cc14 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
@@ -3070,18 +3070,22 @@ int mt7915_mcu_set_thermal_throttling(struct mt7915_phy *phy, u8 state)
 	} __packed req = {
 		.ctrl = {
 			.band_idx = phy->mt76->band_idx,
+			.type.protect_type = 1,
+			.type.trigger_type = 1,
 		},
 	};
-	int level;
+	int level, ret;
 
-	if (!state) {
-		req.ctrl.ctrl_id = THERMAL_PROTECT_DISABLE;
-		goto out;
-	}
+	req.ctrl.ctrl_id = THERMAL_PROTECT_DISABLE;
+
+	ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(THERMAL_PROT),
+				&req, sizeof(req.ctrl), false);
+
+	if (ret || !state)
+		return ret;
 
 	/* set duty cycle and level */
 	for (level = 0; level < 4; level++) {
-		int ret;
 
 		req.ctrl.ctrl_id = THERMAL_PROTECT_DUTY_CONFIG;
 		req.ctrl.duty.duty_level = level;
@@ -3101,7 +3105,6 @@ int mt7915_mcu_set_thermal_throttling(struct mt7915_phy *phy, u8 state)
 	req.trigger_temp = cpu_to_le32(phy->throttle_temp[1]);
 	req.sustain_time = cpu_to_le16(10);
 
-out:
 	req.ctrl.type.protect_type = 1;
 	req.ctrl.type.trigger_type = 1;
 
-- 
2.18.0



From nathan.lu at mediatek.com  Mon Dec  5 18:00:40 2022
From: nathan.lu at mediatek.com (nathan.lu)
Date: Tue, 6 Dec 2022 10:00:40 +0800
Subject: [PATCH v4 0/6] Add first version mt8188 vdosys0 driver
Message-ID: <20221206020046.11333-1-nathan.lu@mediatek.com>

From: Nathan Lu <nathan.lu at mediatek.com>

This patch is to add first version mt8188 vdosys0 driver
Modify and add new files include:
1. bindings documents
2. mtk mmsys
3. mtk mutex
4. mtk drm driver

Change in V4:
- based on [1]
[1] Change mmsys compatible for mt8195 mediatek-drm
    - https://patchwork.kernel.org/project/linux-mediatek/list/?series=699386
- Modify mediatek,mmsys.yaml, move mt8188-vdosys0 to ****mmsys
- Modify mt8188_mmsysy.h DSI mux setting

Change in V3:
- based on [1]
[1] Change mmsys compatible for mt8195 mediatek-drm
    - https://patchwork.kernel.org/project/linux-mediatek/list/?series=699386
- Modify mediatek,mmsys.yaml mt8188-mmsys name to mt8188-vdosys0
- Modify mtk-mmsys.c compatible name to mt8188-vdosys0
- Add DSI mutex in mtk-mutex.c
- Modify mtk_drm_drv.c mt8188-mmsysy name to mt8188-vdosys0


Change in V2:
- based on [2] and [3]
[2] Add MediaTek SoC(vdosys1) support for mt8195
    - https://patchwork.kernel.org/project/linux-mediatek/list/?series=658416
[3] Add MediaTek SoC DRM (vdosys1) support for mt8195
    - https://patchwork.kernel.org/project/linux-mediatek/list/?series=665269
- Seperate bindings doucment into mmsys/mutex/display 3 parts
- Remove redundent char in mediatek,gamma.yaml
- Add another mediatek,mt8188-disp-rdma in mediatek,rdma.yaml
- Remove io_start variable setting in mtk_drm_drv.c and mtk_mmsys.c

Nathan Lu (6):
  dt-bindings: mediatek: modify VDOSYS0 display device tree
    Documentations for MT8188
  dt-bindings: mediatek: modify VDOSYS0 mmsys device tree Documentations
    for MT8188
  dt-bindings: mediatek: modify VDOSYS0 mutex device tree Documentations
    for MT8188
  soc: mediatek: add mtk-mmsys support for mt8188 vdosys0
  soc: mediatek: add mtk-mutex support for mt8188 vdosys0
  drm/mediatek: add mediatek-drm of vdosys0 support for mt8188

 .../bindings/arm/mediatek/mediatek,mmsys.yaml |   1 +
 .../display/mediatek/mediatek,aal.yaml        |   1 +
 .../display/mediatek/mediatek,ccorr.yaml      |   1 +
 .../display/mediatek/mediatek,color.yaml      |   1 +
 .../display/mediatek/mediatek,dither.yaml     |   1 +
 .../display/mediatek/mediatek,gamma.yaml      |   1 +
 .../display/mediatek/mediatek,ovl.yaml        |   1 +
 .../display/mediatek/mediatek,postmask.yaml   |   1 +
 .../display/mediatek/mediatek,rdma.yaml       |   4 +
 .../bindings/soc/mediatek/mediatek,mutex.yaml |   1 +
 drivers/gpu/drm/mediatek/mtk_drm_drv.c        |  21 +++
 drivers/soc/mediatek/mt8188-mmsys.h           | 149 ++++++++++++++++++
 drivers/soc/mediatek/mtk-mmsys.c              |  11 ++
 drivers/soc/mediatek/mtk-mutex.c              |  53 +++++++
 14 files changed, 247 insertions(+)
 create mode 100644 drivers/soc/mediatek/mt8188-mmsys.h

-- 
2.18.0



From nathan.lu at mediatek.com  Mon Dec  5 18:00:44 2022
From: nathan.lu at mediatek.com (nathan.lu)
Date: Tue, 6 Dec 2022 10:00:44 +0800
Subject: [PATCH v4 4/6] soc: mediatek: add mtk-mmsys support for mt8188 vdosys0
In-Reply-To: <20221206020046.11333-1-nathan.lu@mediatek.com>
References: <20221206020046.11333-1-nathan.lu@mediatek.com>
Message-ID: <20221206020046.11333-5-nathan.lu@mediatek.com>

From: Nathan Lu <nathan.lu at mediatek.com>

1. add mt8188 mmsys
2. add mt8188 vdosys0 routing table settings

Signed-off-by: amy zhang <Amy.Zhang at mediatek.com>
Signed-off-by: Nathan Lu <nathan.lu at mediatek.com>
---
 drivers/soc/mediatek/mt8188-mmsys.h | 149 ++++++++++++++++++++++++++++
 drivers/soc/mediatek/mtk-mmsys.c    |  11 ++
 2 files changed, 160 insertions(+)
 create mode 100644 drivers/soc/mediatek/mt8188-mmsys.h

diff --git a/drivers/soc/mediatek/mt8188-mmsys.h b/drivers/soc/mediatek/mt8188-mmsys.h
new file mode 100644
index 000000000000..448cc3761b43
--- /dev/null
+++ b/drivers/soc/mediatek/mt8188-mmsys.h
@@ -0,0 +1,149 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef __SOC_MEDIATEK_MT8188_MMSYS_H
+#define __SOC_MEDIATEK_MT8188_MMSYS_H
+
+#define MT8188_VDO0_OVL_MOUT_EN				0xf14
+#define MT8188_MOUT_DISP_OVL0_TO_DISP_RDMA0		BIT(0)
+#define MT8188_MOUT_DISP_OVL0_TO_DISP_WDMA0		BIT(1)
+#define MT8188_MOUT_DISP_OVL0_TO_DISP_OVL1		BIT(2)
+#define MT8188_MOUT_DISP_OVL1_TO_DISP_RDMA1		BIT(4)
+#define MT8188_MOUT_DISP_OVL1_TO_DISP_WDMA1		BIT(5)
+#define MT8188_MOUT_DISP_OVL1_TO_DISP_OVL0		BIT(6)
+
+#define MT8188_VDO0_SEL_IN				0xf34
+#define MT8188_VDO0_SEL_OUT				0xf38
+
+#define MT8188_VDO0_DISP_RDMA_SEL			0xf40
+#define MT8188_SOUT_DISP_RDMA0_TO_MASK			GENMASK(2, 0)
+#define MT8188_SOUT_DISP_RDMA0_TO_DISP_COLOR0		(0 << 0)
+#define MT8188_SOUT_DISP_RDMA0_TO_DISP_DSI0		(1 << 0)
+#define MT8188_SOUT_DISP_RDMA0_TO_DISP_DP_INTF0		(5 << 0)
+#define MT8188_SEL_IN_DISP_RDMA0_FROM_MASK		GENMASK(8, 8)
+#define MT8188_SEL_IN_DISP_RDMA0_FROM_DISP_OVL0		(0 << 8)
+#define MT8188_SEL_IN_DISP_RDMA0_FROM_DISP_RSZ0		(1 << 8)
+
+
+#define MT8188_VDO0_DSI0_SEL_IN				0xf44
+#define MT8188_SEL_IN_DSI0_FROM_MASK			BIT(0)
+#define MT8188_SEL_IN_DSI0_FROM_DSC_WRAP0_OUT		(0 << 0)
+#define MT8188_SEL_IN_DSI0_FROM_DISP_DITHER0		(1 << 0)
+
+#define MT8188_VDO0_DP_INTF0_SEL_IN			0xf4C
+#define MT8188_SEL_IN_DP_INTF0_FROM_MASK		GENMASK(2, 0)
+#define MT8188_SEL_IN_DP_INTF0_FROM_DSC_WRAP0C1_OUT	(0 << 0)
+#define MT8188_SEL_IN_DP_INTF0_FROM_VPP_MERGE		(1 << 0)
+#define MT8188_SEL_IN_DP_INTF0_FROM_DISP_DITHER0	(3 << 0)
+
+#define MT8188_VDO0_DISP_DITHER0_SEL_OUT		0xf58
+#define MT8188_SOUT_DISP_DITHER0_TO_MASK		GENMASK(2, 0)
+#define MT8188_SOUT_DISP_DITHER0_TO_DSC_WRAP0_IN	(0 << 0)
+#define MT8188_SOUT_DISP_DITHER0_TO_DSI0		(1 << 0)
+#define MT8188_SOUT_DISP_DITHER0_TO_VPP_MERGE0		(6 << 0)
+#define MT8188_SOUT_DISP_DITHER0_TO_DP_INTF0		(7 << 0)
+
+#define MT8188_VDO0_VPP_MERGE_SEL			0xf60
+#define MT8188_SEL_IN_VPP_MERGE_FROM_MASK		GENMASK(1, 0)
+#define MT8188_SEL_IN_VPP_MERGE_FROM_DSC_WRAP0_OUT	(0 << 0)
+#define MT8188_SEL_IN_VPP_MERGE_FROM_DITHER0_OUT	(3 << 0)
+
+#define MT8188_SOUT_VPP_MERGE_TO_MASK			GENMASK(6, 4)
+#define MT8188_SOUT_VPP_MERGE_TO_DSI1			(0 << 4)
+#define MT8188_SOUT_VPP_MERGE_TO_DP_INTF0		(1 << 4)
+#define MT8188_SOUT_VPP_MERGE_TO_SINA_VIRTUAL0		(2 << 4)
+#define MT8188_SOUT_VPP_MERGE_TO_DISP_WDMA1		(3 << 4)
+#define MT8188_SOUT_VPP_MERGE_TO_DSC_WRAP0_IN		(4 << 4)
+#define MT8188_SOUT_VPP_MERGE_TO_DISP_WDMA0		(5 << 4)
+#define MT8188_SOUT_VPP_MERGE_TO_DSC_WRAP1_IN_MASK	GENMASK(11, 11)
+#define MT8188_SOUT_VPP_MERGE_TO_DSC_WRAP1_IN		(0 << 11)
+
+#define MT8188_VDO0_DSC_WARP_SEL			0xf64
+#define MT8188_SEL_IN_DSC_WRAP0C0_IN_FROM_MASK		GENMASK(0, 0)
+#define MT8188_SEL_IN_DSC_WRAP0C0_IN_FROM_DISP_DITHER0	(0 << 0)
+#define MT8188_SEL_IN_DSC_WRAP0C0_IN_FROM_VPP_MERGE	(1 << 0)
+#define MT8188_SOUT_DSC_WRAP0_OUT_TO_MASK		GENMASK(19, 16)
+#define MT8188_SOUT_DSC_WRAP0_OUT_TO_DSI0		BIT(16)
+#define MT8188_SOUT_DSC_WRAP0_OUT_TO_SINB_VIRTUAL0	BIT(17)
+#define MT8188_SOUT_DSC_WRAP0_OUT_TO_VPP_MERGE		BIT(18)
+#define MT8188_SOUT_DSC_WRAP0_OUT_TO_DISP_WDMA0		BIT(19)
+
+static const struct mtk_mmsys_routes mmsys_mt8188_routing_table[] = {
+	{
+		DDP_COMPONENT_OVL0, DDP_COMPONENT_RDMA0,
+		MT8188_VDO0_OVL_MOUT_EN, MT8188_MOUT_DISP_OVL0_TO_DISP_RDMA0,
+		MT8188_MOUT_DISP_OVL0_TO_DISP_RDMA0
+	}, {
+		DDP_COMPONENT_OVL0, DDP_COMPONENT_WDMA0,
+		MT8188_VDO0_OVL_MOUT_EN, MT8188_MOUT_DISP_OVL0_TO_DISP_WDMA0,
+		MT8188_MOUT_DISP_OVL0_TO_DISP_WDMA0
+	}, {
+		DDP_COMPONENT_OVL0, DDP_COMPONENT_RDMA0,
+		MT8188_VDO0_DISP_RDMA_SEL, MT8188_SEL_IN_DISP_RDMA0_FROM_MASK,
+		MT8188_SEL_IN_DISP_RDMA0_FROM_DISP_OVL0
+	}, {
+		DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0,
+		MT8188_VDO0_DSI0_SEL_IN, MT8188_SEL_IN_DSI0_FROM_MASK,
+		MT8188_SEL_IN_DSI0_FROM_DISP_DITHER0
+	}, {
+		DDP_COMPONENT_DITHER0, DDP_COMPONENT_MERGE0,
+		MT8188_VDO0_VPP_MERGE_SEL, MT8188_SEL_IN_VPP_MERGE_FROM_MASK,
+		MT8188_SEL_IN_VPP_MERGE_FROM_DITHER0_OUT
+	}, {
+		DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSC0,
+		MT8188_VDO0_DSC_WARP_SEL,
+		MT8188_SEL_IN_DSC_WRAP0C0_IN_FROM_MASK,
+		MT8188_SEL_IN_DSC_WRAP0C0_IN_FROM_DISP_DITHER0
+	}, {
+		DDP_COMPONENT_DITHER0, DDP_COMPONENT_DP_INTF0,
+		MT8188_VDO0_DP_INTF0_SEL_IN, MT8188_SEL_IN_DP_INTF0_FROM_MASK,
+		MT8188_SEL_IN_DP_INTF0_FROM_DISP_DITHER0
+	}, {
+		DDP_COMPONENT_DSC0, DDP_COMPONENT_MERGE0,
+		MT8188_VDO0_VPP_MERGE_SEL, MT8188_SEL_IN_VPP_MERGE_FROM_MASK,
+		MT8188_SEL_IN_VPP_MERGE_FROM_DSC_WRAP0_OUT
+	}, {
+		DDP_COMPONENT_DSC0, DDP_COMPONENT_DSI0,
+		MT8188_VDO0_DSI0_SEL_IN, MT8188_SEL_IN_DSI0_FROM_MASK,
+		MT8188_SEL_IN_DSI0_FROM_DSC_WRAP0_OUT
+	}, {
+		DDP_COMPONENT_RDMA0, DDP_COMPONENT_COLOR0,
+		MT8188_VDO0_DISP_RDMA_SEL, MT8188_SOUT_DISP_RDMA0_TO_MASK,
+		MT8188_SOUT_DISP_RDMA0_TO_DISP_COLOR0
+	},  {
+		DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0,
+		MT8188_VDO0_DISP_DITHER0_SEL_OUT,
+		MT8188_SOUT_DISP_DITHER0_TO_MASK,
+		MT8188_SOUT_DISP_DITHER0_TO_DSI0
+	},  {
+		DDP_COMPONENT_DITHER0, DDP_COMPONENT_DP_INTF0,
+		MT8188_VDO0_DISP_DITHER0_SEL_OUT,
+		MT8188_SOUT_DISP_DITHER0_TO_MASK,
+		MT8188_SOUT_DISP_DITHER0_TO_DP_INTF0
+	}, {
+		DDP_COMPONENT_MERGE0, DDP_COMPONENT_DP_INTF0,
+		MT8188_VDO0_VPP_MERGE_SEL, MT8188_SOUT_VPP_MERGE_TO_MASK,
+		MT8188_SOUT_VPP_MERGE_TO_DP_INTF0
+	}, {
+		DDP_COMPONENT_MERGE0, DDP_COMPONENT_DPI0,
+		MT8188_VDO0_VPP_MERGE_SEL, MT8188_SOUT_VPP_MERGE_TO_MASK,
+		MT8188_SOUT_VPP_MERGE_TO_SINA_VIRTUAL0
+	}, {
+		DDP_COMPONENT_MERGE0, DDP_COMPONENT_WDMA0,
+		MT8188_VDO0_VPP_MERGE_SEL, MT8188_SOUT_VPP_MERGE_TO_MASK,
+		MT8188_SOUT_VPP_MERGE_TO_DISP_WDMA0
+	}, {
+		DDP_COMPONENT_MERGE0, DDP_COMPONENT_DSC0,
+		MT8188_VDO0_VPP_MERGE_SEL, MT8188_SOUT_VPP_MERGE_TO_MASK,
+		MT8188_SOUT_VPP_MERGE_TO_DSC_WRAP0_IN
+	}, {
+		DDP_COMPONENT_DSC0, DDP_COMPONENT_DSI0,
+		MT8188_VDO0_DSC_WARP_SEL, MT8188_SOUT_DSC_WRAP0_OUT_TO_MASK,
+		MT8188_SOUT_DSC_WRAP0_OUT_TO_DSI0
+	}, {
+		DDP_COMPONENT_DSC0, DDP_COMPONENT_MERGE0,
+		MT8188_VDO0_DSC_WARP_SEL, MT8188_SOUT_DSC_WRAP0_OUT_TO_MASK,
+		MT8188_SOUT_DSC_WRAP0_OUT_TO_VPP_MERGE
+	},
+};
+
+#endif /* __SOC_MEDIATEK_MT8188_MMSYS_H */
diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index f3431448e843..9974b5199377 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -16,6 +16,7 @@
 #include "mt8167-mmsys.h"
 #include "mt8183-mmsys.h"
 #include "mt8186-mmsys.h"
+#include "mt8188-mmsys.h"
 #include "mt8192-mmsys.h"
 #include "mt8195-mmsys.h"
 #include "mt8365-mmsys.h"
@@ -67,6 +68,12 @@ static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {
 	.sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
 };
 
+static const struct mtk_mmsys_driver_data mt8188_vdosys0_driver_data = {
+	.clk_driver = "clk-mt8188-vdo0",
+	.routes = mmsys_mt8188_routing_table,
+	.num_routes = ARRAY_SIZE(mmsys_mt8188_routing_table),
+};
+
 static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
 	.clk_driver = "clk-mt8192-mm",
 	.routes = mmsys_mt8192_routing_table,
@@ -299,6 +306,10 @@ static const struct of_device_id of_match_mtk_mmsys[] = {
 		.compatible = "mediatek,mt8186-mmsys",
 		.data = &mt8186_mmsys_driver_data,
 	},
+	{
+		.compatible = "mediatek,mt8188-vdosys0",
+		.data = &mt8188_vdosys0_driver_data,
+	},
 	{
 		.compatible = "mediatek,mt8192-mmsys",
 		.data = &mt8192_mmsys_driver_data,
-- 
2.18.0



From nathan.lu at mediatek.com  Mon Dec  5 18:00:41 2022
From: nathan.lu at mediatek.com (nathan.lu)
Date: Tue, 6 Dec 2022 10:00:41 +0800
Subject: [PATCH v4 1/6] dt-bindings: mediatek: modify VDOSYS0 display device tree Documentations for MT8188
In-Reply-To: <20221206020046.11333-1-nathan.lu@mediatek.com>
References: <20221206020046.11333-1-nathan.lu@mediatek.com>
Message-ID: <20221206020046.11333-2-nathan.lu@mediatek.com>

From: Nathan Lu <nathan.lu at mediatek.com>

modify VDOSYS0 display device tree Documentations for MT8188.

Signed-off-by: Nathan Lu <nathan.lu at mediatek.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 .../devicetree/bindings/display/mediatek/mediatek,aal.yaml    | 1 +
 .../devicetree/bindings/display/mediatek/mediatek,ccorr.yaml  | 1 +
 .../devicetree/bindings/display/mediatek/mediatek,color.yaml  | 1 +
 .../devicetree/bindings/display/mediatek/mediatek,dither.yaml | 1 +
 .../devicetree/bindings/display/mediatek/mediatek,gamma.yaml  | 1 +
 .../devicetree/bindings/display/mediatek/mediatek,ovl.yaml    | 1 +
 .../bindings/display/mediatek/mediatek,postmask.yaml          | 1 +
 .../devicetree/bindings/display/mediatek/mediatek,rdma.yaml   | 4 ++++
 8 files changed, 11 insertions(+)

diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,aal.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,aal.yaml
index d4d585485e7b..92741486c24d 100644
--- a/Documentation/devicetree/bindings/display/mediatek/mediatek,aal.yaml
+++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,aal.yaml
@@ -31,6 +31,7 @@ properties:
       - items:
           - enum:
               - mediatek,mt8186-disp-aal
+              - mediatek,mt8188-disp-aal
               - mediatek,mt8192-disp-aal
               - mediatek,mt8195-disp-aal
           - const: mediatek,mt8183-disp-aal
diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,ccorr.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,ccorr.yaml
index 63fb02014a56..fe444beff558 100644
--- a/Documentation/devicetree/bindings/display/mediatek/mediatek,ccorr.yaml
+++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,ccorr.yaml
@@ -27,6 +27,7 @@ properties:
           - const: mediatek,mt8192-disp-ccorr
       - items:
           - enum:
+              - mediatek,mt8188-disp-ccorr
               - mediatek,mt8195-disp-ccorr
           - const: mediatek,mt8192-disp-ccorr
       - items:
diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,color.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,color.yaml
index d2f89ee7996f..62306c88f485 100644
--- a/Documentation/devicetree/bindings/display/mediatek/mediatek,color.yaml
+++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,color.yaml
@@ -37,6 +37,7 @@ properties:
           - enum:
               - mediatek,mt8183-disp-color
               - mediatek,mt8186-disp-color
+              - mediatek,mt8188-disp-color
               - mediatek,mt8192-disp-color
               - mediatek,mt8195-disp-color
           - const: mediatek,mt8173-disp-color
diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,dither.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,dither.yaml
index 8ad8187c02d1..5c7445c174e5 100644
--- a/Documentation/devicetree/bindings/display/mediatek/mediatek,dither.yaml
+++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,dither.yaml
@@ -27,6 +27,7 @@ properties:
       - items:
           - enum:
               - mediatek,mt8186-disp-dither
+              - mediatek,mt8188-disp-dither
               - mediatek,mt8192-disp-dither
               - mediatek,mt8195-disp-dither
           - const: mediatek,mt8183-disp-dither
diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,gamma.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,gamma.yaml
index a89ea0ea7542..a5c6a91fac71 100644
--- a/Documentation/devicetree/bindings/display/mediatek/mediatek,gamma.yaml
+++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,gamma.yaml
@@ -28,6 +28,7 @@ properties:
       - items:
           - enum:
               - mediatek,mt8186-disp-gamma
+              - mediatek,mt8188-disp-gamma
               - mediatek,mt8192-disp-gamma
               - mediatek,mt8195-disp-gamma
           - const: mediatek,mt8183-disp-gamma
diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,ovl.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,ovl.yaml
index a2a27d0ca038..065e526f950e 100644
--- a/Documentation/devicetree/bindings/display/mediatek/mediatek,ovl.yaml
+++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,ovl.yaml
@@ -36,6 +36,7 @@ properties:
           - const: mediatek,mt2701-disp-ovl
       - items:
           - enum:
+              - mediatek,mt8188-disp-ovl
               - mediatek,mt8195-disp-ovl
           - const: mediatek,mt8183-disp-ovl
       - items:
diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,postmask.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,postmask.yaml
index 654080bfbdfb..27de64495401 100644
--- a/Documentation/devicetree/bindings/display/mediatek/mediatek,postmask.yaml
+++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,postmask.yaml
@@ -26,6 +26,7 @@ properties:
       - items:
           - enum:
               - mediatek,mt8186-disp-postmask
+              - mediatek,mt8188-disp-postmask
           - const: mediatek,mt8192-disp-postmask
 
   reg:
diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,rdma.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,rdma.yaml
index 0882ae86e6c4..3ade2ece3fed 100644
--- a/Documentation/devicetree/bindings/display/mediatek/mediatek,rdma.yaml
+++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,rdma.yaml
@@ -31,6 +31,10 @@ properties:
           - const: mediatek,mt8183-disp-rdma
       - items:
           - const: mediatek,mt8195-disp-rdma
+      - items:
+          - enum:
+              - mediatek,mt8188-disp-rdma
+          - const: mediatek,mt8195-disp-rdma
       - items:
           - enum:
               - mediatek,mt7623-disp-rdma
-- 
2.18.0



From peter.wang at mediatek.com  Mon Dec  5 19:07:40 2022
From: peter.wang at mediatek.com (=?utf-8?B?UGV0ZXIgV2FuZyAo546L5L+h5Y+LKQ==?=)
Date: Tue, 6 Dec 2022 03:07:40 +0000
Subject: [PATCH v3] ufs: core: wlun suspend SSU/enter hibern8 fail
 recovery
In-Reply-To: <6785696a-cb52-5934-dbd6-28472b4cd7c6@acm.org>
References: <20221202073532.7884-1-peter.wang@mediatek.com>
	 <6785696a-cb52-5934-dbd6-28472b4cd7c6@acm.org>
Message-ID: <f27ddbdef80a8007c8c0cf170a7a442a40c91b37.camel@mediatek.com>

On Mon, 2022-12-05 at 10:41 -0800, Bart Van Assche wrote:
> On 12/1/22 23:35, peter.wang at mediatek.com wrote:
> > From: Peter Wang <peter.wang at mediatek.com>
> > 
> > When SSU/enter hibern8 fail in wlun suspend flow, trigger error
> > handler and return busy to break the suspend.
> > If not, wlun runtime pm status become error and the consumer will
> > stuck in runtime suspend status.
> > 
> > Signed-off-by: Peter Wang <peter.wang at mediatek.com>
> > ---
> >   drivers/ufs/core/ufshcd.c | 26 ++++++++++++++++++++++++++
> >   1 file changed, 26 insertions(+)
> > 
> > diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> > index b1f59a5fe632..a0dbf2c410b1 100644
> > --- a/drivers/ufs/core/ufshcd.c
> > +++ b/drivers/ufs/core/ufshcd.c
> > @@ -9049,6 +9049,19 @@ static int __ufshcd_wl_suspend(struct
> > ufs_hba *hba, enum ufs_pm_op pm_op)
> >   
> >   		if (!hba->dev_info.b_rpm_dev_flush_capable) {
> >   			ret = ufshcd_set_dev_pwr_mode(hba,
> > req_dev_pwr_mode);
> > +			if (ret && (pm_op != UFS_SHUTDOWN_PM)) {
> > +				/*
> > +				 * If return err in suspend flow, IO
> > will hang.
> > +				 * Trigger error handler and break
> > suspend for
> > +				 * error recovery.
> > +				 */
> > +				spin_lock_irq(hba->host->host_lock);
> > +				hba->force_reset = true;
> > +				ufshcd_schedule_eh_work(hba);
> > +				spin_unlock_irq(hba->host->host_lock);
> > +
> > +				ret = -EBUSY;
> > +			}
> >   			if (ret)
> >   				goto enable_scaling;
> >   		}
> > @@ -9060,6 +9073,19 @@ static int __ufshcd_wl_suspend(struct
> > ufs_hba *hba, enum ufs_pm_op pm_op)
> >   	 */
> >   	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
> >   	ret = ufshcd_link_state_transition(hba, req_link_state,
> > check_for_bkops);
> > +	if ((ret) && (pm_op != UFS_SHUTDOWN_PM)) {
> > +		/*
> > +		 * If return err in suspend flow, IO will hang.
> > +		 * Trigger error handler and break suspend for
> > +		 * error recovery.
> > +		 */
> > +		spin_lock_irq(hba->host->host_lock);
> > +		hba->force_reset = true;
> > +		ufshcd_schedule_eh_work(hba);
> > +		spin_unlock_irq(hba->host->host_lock);
> > +
> > +		ret = -EBUSY;
> > +	}
> >   	if (ret)
> >   		goto set_dev_active;
> >   
> 
> Please follow the coding style that is used elsewhere in the kernel
> and
> remove the superfluous parentheses from this patch. "if (ret &&
> (pm_op !=
> UFS_SHUTDOWN_PM)) {" can be changed into "if (ret && pm_op !=
> UFS_SHUTDOWN_PM) {" and "if ((ret) && (pm_op != UFS_SHUTDOWN_PM)) {"
> can be
> changed into "if ((ret) && (pm_op != UFS_SHUTDOWN_PM)) {".
> 
> Otherwise this patch looks good to me.
> 
> Thanks,

Hi Bart,

Got it, will remove parentheses next version.
Thanks for review.

BR
Peter


> 
> Bart.

From Sujuan.Chen at mediatek.com  Mon Dec  5 19:18:03 2022
From: Sujuan.Chen at mediatek.com (=?utf-8?B?U3VqdWFuIENoZW4gKOmZiOe0oOWonyk=?=)
Date: Tue, 6 Dec 2022 03:18:03 +0000
Subject: [PATCH v3 net-next 2/8] dt-bindings: net: mediatek: add WED RX
 binding for MT7986 eth driver
In-Reply-To: <62fcc16e-51cb-fee4-ca8d-3ff546552595@linaro.org>
References: <cover.1667466887.git.lorenzo@kernel.org>
	 <2d92c3e282c6a788e54370604f966fc7a5b479bf.1667466887.git.lorenzo@kernel.org>
	 <6d1bd86e-29f0-a3b2-700b-978d64990d56@linaro.org>
	 <Y2P/jq34IjyM2iXu@lore-desk>
	 <aa7e325f-2986-005a-3d0a-579ac46491f6@linaro.org>
	 <Y2QImkLcWIcwiTjW@lore-desk>
	 <62fcc16e-51cb-fee4-ca8d-3ff546552595@linaro.org>
Message-ID: <323e31e3ace1ed15bf8d1c009389fb9c6eca561e.camel@mediatek.com>

On Mon, 2022-11-07 at 11:04 +0100, Krzysztof Kozlowski wrote:
> On 03/11/2022 19:29, Lorenzo Bianconi wrote:
> > > On 03/11/2022 13:51, Lorenzo Bianconi wrote:
> > > > > > diff --git
> > > > > > a/Documentation/devicetree/bindings/arm/mediatek/mediatek,m
> > > > > > t7986-wo-boot.yaml
> > > > > > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,m
> > > > > > t7986-wo-boot.yaml
> > > > > > new file mode 100644
> > > > > > index 000000000000..6c3c514c48ef
> > > > > > --- /dev/null
> > > > > > +++
> > > > > > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,m
> > > > > > t7986-wo-boot.yaml
> > 
> > Regarding "mediatek,mt7986-wed" compatible string it has been added
> > to
> > mt7986a.dtsi in the commit below:
> > 
> > commit 00b9903996b3e1e287c748928606d738944e45de
> > Author: Lorenzo Bianconi <lorenzo at kernel.org>
> > Date:   Tue Sep 20 12:11:13 2022 +0200
> > 
> > arm64: dts: mediatek: mt7986: add support for Wireless Ethernet
> > Dispatch
> > 
> > > > > 
> > > > > arm is only for top-level stuff. Choose appropriate
> > > > > subsystem, soc as
> > > > > last resort.
> > > > 
> > > > these chips are used only for networking so is net folder fine?
> > > 
> > > So this is some MMIO and no actual device? Then rather soc.
> > 
> > ack, I will move them there
> > 
> > > 
> > > > 
> > > > > 
> > > > > > @@ -0,0 +1,47 @@
> > > > > > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> > > > > > +%YAML 1.2
> > > > > > +---
> > > > > > +$id: 
> > > > > > https://urldefense.com/v3/__http://devicetree.org/schemas/arm/mediatek/mediatek,mt7986-wo-boot.yaml*__;Iw!!CTRNKA9wMg0ARbw!zwfPbJpcAbOIOvolZM17U38coXpSGcUDmLW5g8m4760Crj_jruCb42rt9lXOq8svAEM$
> > > > > >  
> > > > > > +$schema: 
> > > > > > https://urldefense.com/v3/__http://devicetree.org/meta-schemas/core.yaml*__;Iw!!CTRNKA9wMg0ARbw!zwfPbJpcAbOIOvolZM17U38coXpSGcUDmLW5g8m4760Crj_jruCb42rt9lXOpl37_FI$
> > > > > >  
> > > > > > +
> > > > > > +title:
> > > > > > +  MediaTek Wireless Ethernet Dispatch WO boot controller
> > > > > > interface for MT7986
> > > > > > +
> > > > > > +maintainers:
> > > > > > +  - Lorenzo Bianconi <lorenzo at kernel.org>
> > > > > > +  - Felix Fietkau <nbd at nbd.name>
> > > > > > +
> > > > > > +description:
> > > > > > +  The mediatek wo-boot provides a configuration interface
> > > > > > for WED WO
> > > > > > +  boot controller on MT7986 soc.
> > > > > 
> > > > > And what is "WED WO boot controller?
> > > > 
> > > > WED WO is a chip used for networking packet processing
> > > > offloaded to the Soc
> > > > (e.g. packet reordering). WED WO boot is the memory used to
> > > > store start address
> > > > of wo firmware. Anyway I will let Sujuan comment on this.
> > > 
> > > A bit more should be in description.
> > 
> > I will let Sujuan adding more details (since I do not have them :))
> > 

 
The mcu of wo borrows a part of dram to store and boot its firmware.
the right entry point address of the firmware must be passed to the mcu
to boot correctly, so we need to write the dram address of the entry
point to the boot register, In addition, there are some registers that
need to be set to control the reset of the mcu.

> > > 
> > > > 
> > > > > 
> > > > > > +
> > > > > > +properties:
> > > > > > +  compatible:
> > > > > > +    items:
> > > > > > +      - enum:
> > > > > > +          - mediatek,mt7986-wo-boot
> > > > > > +      - const: syscon
> > > > > > +
> > > > > > +  reg:
> > > > > > +    maxItems: 1
> > > > > > +
> > > > > > +  interrupts:
> > > > > > +    maxItems: 1
> > > > > > +
> > > > > > +required:
> > > > > > +  - compatible
> > > > > > +  - reg
> > > > > > +
> > > > > > +additionalProperties: false
> > > > > > +
> > > > > > +examples:
> > > > > > +  - |
> > > > > > +    soc {
> > > > > > +      #address-cells = <2>;
> > > > > > +      #size-cells = <2>;
> > > > > > +
> > > > > > +      wo_boot: syscon at 15194000 {
> > > > > > +        compatible = "mediatek,mt7986-wo-boot", "syscon";
> > > > > > +        reg = <0 0x15194000 0 0x1000>;
> > > > > > +      };
> > > > > > +    };
> > > > > > diff --git
> > > > > > a/Documentation/devicetree/bindings/arm/mediatek/mediatek,m
> > > > > > t7986-wo-ccif.yaml
> > > > > > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,m
> > > > > > t7986-wo-ccif.yaml
> > > > > > new file mode 100644
> > > > > > index 000000000000..6357a206587a
> > > > > > --- /dev/null
> > > > > > +++
> > > > > > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,m
> > > > > > t7986-wo-ccif.yaml
> > > > > > @@ -0,0 +1,50 @@
> > > > > > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> > > > > > +%YAML 1.2
> > > > > > +---
> > > > > > +$id: 
> > > > > > https://urldefense.com/v3/__http://devicetree.org/schemas/arm/mediatek/mediatek,mt7986-wo-ccif.yaml*__;Iw!!CTRNKA9wMg0ARbw!zwfPbJpcAbOIOvolZM17U38coXpSGcUDmLW5g8m4760Crj_jruCb42rt9lXO3mf70UY$
> > > > > >  
> > > > > > +$schema: 
> > > > > > https://urldefense.com/v3/__http://devicetree.org/meta-schemas/core.yaml*__;Iw!!CTRNKA9wMg0ARbw!zwfPbJpcAbOIOvolZM17U38coXpSGcUDmLW5g8m4760Crj_jruCb42rt9lXOpl37_FI$
> > > > > >  
> > > > > > +
> > > > > > +title: MediaTek Wireless Ethernet Dispatch WO controller
> > > > > > interface for MT7986
> > > > > > +
> > > > > > +maintainers:
> > > > > > +  - Lorenzo Bianconi <lorenzo at kernel.org>
> > > > > > +  - Felix Fietkau <nbd at nbd.name>
> > > > > > +
> > > > > > +description:
> > > > > > +  The mediatek wo-ccif provides a configuration interface
> > > > > > for WED WO
> > > > > > +  controller on MT7986 soc.
> > > > > 
> > > > > All previous comments apply.
> > > > > 
> > > > > > +
> > > > > > +properties:
> > > > > > +  compatible:
> > > > > > +    items:
> > > > > > +      - enum:
> > > > > > +          - mediatek,mt7986-wo-ccif
> > > > > > +      - const: syscon
> > > > > > +
> > > > > > +  reg:
> > > > > > +    maxItems: 1
> > > > > > +
> > > > > > +  interrupts:
> > > > > > +    maxItems: 1
> > > > > > +
> > > > > > +required:
> > > > > > +  - compatible
> > > > > > +  - reg
> > > > > > +  - interrupts
> > > > > > +
> > > > > > +additionalProperties: false
> > > > > > +
> > > > > > +examples:
> > > > > > +  - |
> > > > > > +    #include <dt-bindings/interrupt-controller/arm-gic.h>
> > > > > > +    #include <dt-bindings/interrupt-controller/irq.h>
> > > > > > +    soc {
> > > > > > +      #address-cells = <2>;
> > > > > > +      #size-cells = <2>;
> > > > > > +
> > > > > > +      wo_ccif0: syscon at 151a5000 {
> > > > > > +        compatible = "mediatek,mt7986-wo-ccif", "syscon";
> > > > > > +        reg = <0 0x151a5000 0 0x1000>;
> > > > > > +        interrupts = <GIC_SPI 205 IRQ_TYPE_LEVEL_HIGH>;
> > > > > > +      };
> > > > > > +    };
> > > > > > diff --git
> > > > > > a/Documentation/devicetree/bindings/arm/mediatek/mediatek,m
> > > > > > t7986-wo-dlm.yaml
> > > > > > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,m
> > > > > > t7986-wo-dlm.yaml
> > > > > > new file mode 100644
> > > > > > index 000000000000..a499956d9e07
> > > > > > --- /dev/null
> > > > > > +++
> > > > > > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,m
> > > > > > t7986-wo-dlm.yaml
> > > > > > @@ -0,0 +1,50 @@
> > > > > > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> > > > > > +%YAML 1.2
> > > > > > +---
> > > > > > +$id: 
> > > > > > https://urldefense.com/v3/__http://devicetree.org/schemas/arm/mediatek/mediatek,mt7986-wo-dlm.yaml*__;Iw!!CTRNKA9wMg0ARbw!zwfPbJpcAbOIOvolZM17U38coXpSGcUDmLW5g8m4760Crj_jruCb42rt9lXOVVd58hA$
> > > > > >  
> > > > > > +$schema: 
> > > > > > https://urldefense.com/v3/__http://devicetree.org/meta-schemas/core.yaml*__;Iw!!CTRNKA9wMg0ARbw!zwfPbJpcAbOIOvolZM17U38coXpSGcUDmLW5g8m4760Crj_jruCb42rt9lXOpl37_FI$
> > > > > >  
> > > > > > +
> > > > > > +title: MediaTek Wireless Ethernet Dispatch WO hw rx ring
> > > > > > interface for MT7986
> > > > > > +
> > > > > > +maintainers:
> > > > > > +  - Lorenzo Bianconi <lorenzo at kernel.org>
> > > > > > +  - Felix Fietkau <nbd at nbd.name>
> > > > > > +
> > > > > > +description:
> > > > > > +  The mediatek wo-dlm provides a configuration interface
> > > > > > for WED WO
> > > > > > +  rx ring on MT7986 soc.
> > > > > > +
> > > > > > +properties:
> > > > > > +  compatible:
> > > > > > +    const: mediatek,mt7986-wo-dlm
> > > > > > +
> > > > > > +  reg:
> > > > > > +    maxItems: 1
> > > > > > +
> > > > > > +  resets:
> > > > > > +    maxItems: 1
> > > > > > +
> > > > > > +  reset-names:
> > > > > > +    maxItems: 1
> > > > > > +
> > > > > > +required:
> > > > > > +  - compatible
> > > > > > +  - reg
> > > > > > +  - resets
> > > > > > +  - reset-names
> > > > > > +
> > > > > > +additionalProperties: false
> > > > > > +
> > > > > > +examples:
> > > > > > +  - |
> > > > > > +    soc {
> > > > > > +      #address-cells = <2>;
> > > > > > +      #size-cells = <2>;
> > > > > > +
> > > > > > +      wo_dlm0: wo-dlm at 151e8000 {
> > > > > 
> > > > > Node names should be generic.
> > > > > 
https://urldefense.com/v3/__https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html*generic-names-recommendation__;Iw!!CTRNKA9wMg0ARbw!zwfPbJpcAbOIOvolZM17U38coXpSGcUDmLW5g8m4760Crj_jruCb42rt9lXOeva6xv4$
> > > > >  
> > > > 
> > > > DLM is a chip used to store the data rx ring of wo firmware. I
> > > > do not have a
> > > > better node name (naming is always hard). Can you please
> > > > suggest a better name?
> > > 
> > > The problem is that you added three new devices which seem to be
> > > for the
> > > same device - WED. It looks like some hacky way of avoid proper
> > > hardware
> > > description - let's model everything as MMIO and syscons...
> > 
> > is it fine to use syscon as node name even if we do not declare it
> > in compatible
> > string for dlm?
> > 
> 
> No, rather not. It's a shortcut and if used without actual syscon it
> would be confusing. You could still call it system-controller,
> though.
> 
> Best regards,
> Krzysztof
> 

From peter.wang at mediatek.com  Mon Dec  5 19:11:09 2022
From: peter.wang at mediatek.com (peter.wang at mediatek.com)
Date: Tue, 6 Dec 2022 11:11:09 +0800
Subject: [PATCH v4] ufs: core: wlun suspend SSU/enter hibern8 fail recovery
Message-ID: <20221206031109.10609-1-peter.wang@mediatek.com>

From: Peter Wang <peter.wang at mediatek.com>

When SSU/enter hibern8 fail in wlun suspend flow, trigger error
handler and return busy to break the suspend.
If not, wlun runtime pm status become error and the consumer will
stuck in runtime suspend status.

Signed-off-by: Peter Wang <peter.wang at mediatek.com>
---
 drivers/ufs/core/ufshcd.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index b1f59a5fe632..98f105f32877 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -9049,6 +9049,19 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 
 		if (!hba->dev_info.b_rpm_dev_flush_capable) {
 			ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
+			if (ret && pm_op != UFS_SHUTDOWN_PM) {
+				/*
+				 * If return err in suspend flow, IO will hang.
+				 * Trigger error handler and break suspend for
+				 * error recovery.
+				 */
+				spin_lock_irq(hba->host->host_lock);
+				hba->force_reset = true;
+				ufshcd_schedule_eh_work(hba);
+				spin_unlock_irq(hba->host->host_lock);
+
+				ret = -EBUSY;
+			}
 			if (ret)
 				goto enable_scaling;
 		}
@@ -9060,6 +9073,19 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	 */
 	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
 	ret = ufshcd_link_state_transition(hba, req_link_state, check_for_bkops);
+	if (ret && pm_op != UFS_SHUTDOWN_PM) {
+		/*
+		 * If return err in suspend flow, IO will hang.
+		 * Trigger error handler and break suspend for
+		 * error recovery.
+		 */
+		spin_lock_irq(hba->host->host_lock);
+		hba->force_reset = true;
+		ufshcd_schedule_eh_work(hba);
+		spin_unlock_irq(hba->host->host_lock);
+
+		ret = -EBUSY;
+	}
 	if (ret)
 		goto set_dev_active;
 
-- 
2.18.0



From chu.stanley at gmail.com  Mon Dec  5 19:33:34 2022
From: chu.stanley at gmail.com (Stanley Chu)
Date: Tue, 6 Dec 2022 11:33:34 +0800
Subject: [PATCH v4] ufs: core: wlun suspend SSU/enter hibern8 fail recovery
In-Reply-To: <20221206031109.10609-1-peter.wang@mediatek.com>
References: <20221206031109.10609-1-peter.wang@mediatek.com>
Message-ID: <CAGaU9a-e7CkOvQaSHJKR+zYx3YyTnKubS7o_O5SHj-tSqFKyCA@mail.gmail.com>

On Tue, Dec 6, 2022 at 11:18 AM <peter.wang at mediatek.com> wrote:
>
> From: Peter Wang <peter.wang at mediatek.com>
>
> When SSU/enter hibern8 fail in wlun suspend flow, trigger error
> handler and return busy to break the suspend.
> If not, wlun runtime pm status become error and the consumer will
> stuck in runtime suspend status.
>
> Signed-off-by: Peter Wang <peter.wang at mediatek.com>

Reviewed-by: Stanley Chu <stanley.chu at mediatek.com>


From Sujuan.Chen at mediatek.com  Mon Dec  5 19:17:42 2022
From: Sujuan.Chen at mediatek.com (=?utf-8?B?U3VqdWFuIENoZW4gKOmZiOe0oOWonyk=?=)
Date: Tue, 6 Dec 2022 03:17:42 +0000
Subject: [PATCH] wifi: mt76: mt7915: add wds support when wed is enabled
In-Reply-To: <Y3t9NOKseNw2myzE@lore-desk>
References: <af04db938bf9633225c4358058a39aa3be0e218e.1669022945.git.sujuan.chen@mediatek.com>
	 <Y3t9NOKseNw2myzE@lore-desk>
Message-ID: <bad26e4fa3855aac14d9be7f24531fd7f3b40e9a.camel@mediatek.com>

On Mon, 2022-11-21 at 14:29 +0100, Lorenzo Bianconi wrote:
> > The current WED only supports 256 wcid, whereas mt7986 can support
> > up to 512 entries,
> > so firmware provides a rule to get sta_info by DA when wcid is set
> > to 0x3ff by txd.
> > Also, WED provides a register to overwrite txd wcid, that is,
> > wcid[9:8] can
> > be overwritten by 0x3 and wcid[7:0] is set to 0xff by host driver.
> > 
> > However, firmware is unable to get sta_info from DA as DA != RA for
> > 4addr cases,
> > so firmware and wifi host driver both use wcid (256 - 271) and (768
> > ~ 783)
> > for sync up to get correct sta_info
> > 
> > Tested-by: Sujuan Chen <sujuan.chen at mediatek.com>
> > Co-developed-by: Bo Jiao <bo.jiao at mediatek.com>
> > Signed-off-by: Bo Jiao <bo.jiao at mediatek.com>
> > Signed-off-by: Sujuan Chen <sujuan.chen at mediatek.com>
> > ---
> > This patch is based on 
> > 
https://patchwork.kernel.org/project/linux-mediatek/list/?series=697444
> > ---
> >  drivers/net/wireless/mediatek/mt76/mt76.h     |  6 +++
> >  .../net/wireless/mediatek/mt76/mt7603/main.c  |  2 +-
> >  .../net/wireless/mediatek/mt76/mt7615/main.c  |  2 +-
> >  .../wireless/mediatek/mt76/mt7615/pci_init.c  |  2 +-
> >  .../wireless/mediatek/mt76/mt7615/usb_sdio.c  |  2 +-
> >  .../net/wireless/mediatek/mt76/mt76x02_util.c |  2 +-
> >  .../net/wireless/mediatek/mt76/mt7915/init.c  |  2 +-
> >  .../net/wireless/mediatek/mt76/mt7915/main.c  | 24 +++++++++--
> >  .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 11 ++++-
> >  .../net/wireless/mediatek/mt76/mt7915/mcu.h   |  1 +
> >  .../net/wireless/mediatek/mt76/mt7915/mmio.c  |  3 ++
> >  .../net/wireless/mediatek/mt76/mt7921/init.c  |  2 +-
> >  .../net/wireless/mediatek/mt76/mt7921/main.c  |  2 +-
> >  .../net/wireless/mediatek/mt76/mt7996/init.c  |  2 +-
> >  .../net/wireless/mediatek/mt76/mt7996/main.c  |  2 +-
> >  drivers/net/wireless/mediatek/mt76/util.c     | 42
> > ++++++++++++++++++-
> >  drivers/net/wireless/mediatek/mt76/util.h     |  2 +-
> >  17 files changed, 91 insertions(+), 18 deletions(-)
> > 
> 
> Hi Sujuan,
> 
> I took just a brief look at the patch, but I think you can
> significantly
> reduce the patch size doing something like:
> 
> int __mt76_wcid_alloc(u32 *mask, int size, u8 flag)
> {
> 	...
> }
> 
> static inline int mt76_wcid_alloc(u32 *mask, int size)
> {
> 	return __mt76_wcid_alloc(, 0);
> }
> 
Hi Lore,

ack, thanks. I will do it in v2.

> > diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h
> > b/drivers/net/wireless/mediatek/mt76/mt76.h
> > index 33f87e518d68..1763b582c020 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt76.h
> > +++ b/drivers/net/wireless/mediatek/mt76/mt76.h
> > @@ -38,6 +38,12 @@
> >  #define MT_WED_Q_RX(_n)		__MT_WED_Q(MT76_WED_Q_RX, _n)
> >  #define MT_WED_Q_TXFREE		__MT_WED_Q(MT76_WED_Q_TXFREE,
> > 0)
> >  
> > +enum mt76_wed_state {
> > +	MT76_WED_DISABLED,
> > +	MT76_WED_ACTIVE,
> > +	MT76_WED_WDS_ACTIVE,
> > +};
> > +
> >  struct mt76_dev;
> >  struct mt76_phy;
> >  struct mt76_wcid;
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/main.c
> > b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
> > index ca50feb0b3a9..d788bb59a113 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7603/main.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
> > @@ -347,7 +347,7 @@ mt7603_sta_add(struct mt76_dev *mdev, struct
> > ieee80211_vif *vif,
> >  	int idx;
> >  	int ret = 0;
> >  
> > -	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7603_WTBL_STA -
> > 1);
> > +	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7603_WTBL_STA - 1,
> > 0);
> >  	if (idx < 0)
> >  		return -ENOSPC;
> >  
> 
> [...]
> 
> >  	mt76_connac_mcu_wtbl_update_hdr_trans(&dev->mt76, vif, sta);
> >  }
> >  
> > @@ -1448,15 +1462,19 @@ mt7915_net_fill_forward_path(struct
> > ieee80211_hw *hw,
> >  	if (!mtk_wed_device_active(wed))
> >  		return -ENODEV;
> >  
> > -	if (msta->wcid.idx > 0xff)
> > +	if (msta->wcid.idx > MT7915_WTBL_STA)
> >  		return -EIO;
> >  
> >  	path->type = DEV_PATH_MTK_WDMA;
> >  	path->dev = ctx->dev;
> >  	path->mtk_wdma.wdma_idx = wed->wdma_idx;
> >  	path->mtk_wdma.bss = mvif->mt76.idx;
> > -	path->mtk_wdma.wcid = is_mt7915(&dev->mt76) ? msta->wcid.idx :
> > 0x3ff;
> >  	path->mtk_wdma.queue = phy != &dev->phy;
> > +	if (test_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags) ||
> > +	    is_mt7915(&dev->mt76))
> > +		path->mtk_wdma.wcid = msta->wcid.idx;
> > +	else
> > +		path->mtk_wdma.wcid = 0x3ff;
> >  
> >  	ctx->dev = NULL;
> >  
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> > b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> > index 2769d6c897d9..aeeeff9b2143 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> > @@ -2303,8 +2303,15 @@ int mt7915_mcu_init_firmware(struct
> > mt7915_dev *dev)
> >  	if (ret)
> >  		return ret;
> >  
> > -	if (mtk_wed_device_active(&dev->mt76.mmio.wed) &&
> > is_mt7915(&dev->mt76))
> > -		mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(CAPABILITY), 0,
> > 0, 0);
> > +	if (mtk_wed_device_active(&dev->mt76.mmio.wed)) {
> > +		if (is_mt7915(&dev->mt76))
> > +			mt7915_mcu_wa_cmd(dev,
> > MCU_WA_PARAM_CMD(CAPABILITY),
> > +					  0, 0, 0);
> > +		else
> > +			mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET),
> > +					  MCU_WA_PARAM_WED_VERSION,
> > +					  dev->mt76.mmio.wed.rev_id,
> > 0);
> > +	}
> 
> can you please honor mt7915_mcu_wa_cmd() returned value?
> 

Ack.

> >  
> >  	ret = mt7915_mcu_set_mwds(dev, 1);
> >  	if (ret)
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> > b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> > index c19b5d66c0e1..59e1ea35f77f 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> > @@ -260,6 +260,7 @@ enum {
> >  	MCU_WA_PARAM_PDMA_RX = 0x04,
> >  	MCU_WA_PARAM_CPU_UTIL = 0x0b,
> >  	MCU_WA_PARAM_RED = 0x0e,
> > +	MCU_WA_PARAM_WED_VERSION = 0x32,
> >  };
> >  
> >  enum mcu_mmps_mode {
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > index 1fcf34f57a16..d90793d082b8 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > @@ -773,6 +773,9 @@ int mt7915_mmio_wed_init(struct mt7915_dev
> > *dev, void *pdev_ptr,
> >  
> >  	dev->mt76.rx_token_size = wed->wlan.rx_npkt;
> >  
> > +	if (!is_mt7915(&dev->mt76))
> > +		wed->wlan.wcid_512 = true;
> > +
> >  	if (mtk_wed_device_attach(wed))
> >  		return 0;
> >  
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > index 79b8055ce4c4..702ff300f8f7 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > @@ -283,7 +283,7 @@ static int mt7921_init_wcid(struct mt7921_dev
> > *dev)
> >  	int idx;
> >  
> >  	/* Beacon and mgmt frames should occupy wcid 0 */
> > -	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7921_WTBL_STA -
> > 1);
> > +	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7921_WTBL_STA - 1,
> > 0);
> >  	if (idx)
> >  		return -ENOSPC;
> >  
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
> > b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
> > index 41df17efdb3a..3d8771fcb847 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
> > @@ -814,7 +814,7 @@ int mt7921_mac_sta_add(struct mt76_dev *mdev,
> > struct ieee80211_vif *vif,
> >  	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
> >  	int ret, idx;
> >  
> > -	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7921_WTBL_STA -
> > 1);
> > +	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7921_WTBL_STA - 1,
> > 0);
> >  	if (idx < 0)
> >  		return -ENOSPC;
> >  
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/init.c
> > b/drivers/net/wireless/mediatek/mt76/mt7996/init.c
> > index cd1657e3585d..4cf055040519 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7996/init.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7996/init.c
> > @@ -433,7 +433,7 @@ static int mt7996_init_hardware(struct
> > mt7996_dev *dev)
> >  		return ret;
> >  
> >  	/* Beacon and mgmt frames should occupy wcid 0 */
> > -	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7996_WTBL_STA);
> > +	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7996_WTBL_STA, 0);
> >  	if (idx)
> >  		return -ENOSPC;
> >  
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/main.c
> > b/drivers/net/wireless/mediatek/mt76/mt7996/main.c
> > index 21dea3fa7dc1..fd40b515cc5b 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7996/main.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7996/main.c
> > @@ -579,7 +579,7 @@ int mt7996_mac_sta_add(struct mt76_dev *mdev,
> > struct ieee80211_vif *vif,
> >  	u8 band_idx = mvif->phy->mt76->band_idx;
> >  	int ret, idx;
> >  
> > -	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7996_WTBL_STA);
> > +	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7996_WTBL_STA, 0);
> >  	if (idx < 0)
> >  		return -ENOSPC;
> >  
> > diff --git a/drivers/net/wireless/mediatek/mt76/util.c
> > b/drivers/net/wireless/mediatek/mt76/util.c
> > index 581964425468..0850149f4200 100644
> > --- a/drivers/net/wireless/mediatek/mt76/util.c
> > +++ b/drivers/net/wireless/mediatek/mt76/util.c
> > @@ -42,9 +42,14 @@ bool __mt76_poll_msec(struct mt76_dev *dev, u32
> > offset, u32 mask, u32 val,
> >  }
> >  EXPORT_SYMBOL_GPL(__mt76_poll_msec);
> >  
> > -int mt76_wcid_alloc(u32 *mask, int size)
> > +int mt76_wcid_alloc(u32 *mask, int size, u8 flag)
> >  {
> > +#define MT76_WED_WDS_MIN    256
> > +#define MT76_WED_WDS_CNT    16
> > +
> >  	int i, idx = 0, cur;
> > +	int min = MT76_WED_WDS_MIN;
> > +	int max = min + MT76_WED_WDS_CNT;
> >  
> >  	for (i = 0; i < DIV_ROUND_UP(size, 32); i++) {
> >  		idx = ffs(~mask[i]);
> > @@ -53,13 +58,46 @@ int mt76_wcid_alloc(u32 *mask, int size)
> >  
> >  		idx--;
> >  		cur = i * 32 + idx;
> > -		if (cur >= size)
> 
> I think it easier to understand the code if you run the code below
> just if wed
> is active, right?
> 
> 		if (!mtk_wed_device_active())
> 			break;
> 

Actually, it's a bit more complicated.
Using only mtk_wed_device_active() cannot cover all cases.
for wed on(MT76_WED_ACTIVE), We should use wcid outside of (256~271).
and when wed on but sta exceeds (512-16), we should use wcid(256~271).
for wed on and sta is wds case(MT76_WED_WDS_ACTIVE), we
use wcid(256~271) .

> Regards,
> Lorenzo
> 
> > +
> > +		switch (flag) {
> > +		case MT76_WED_DISABLED:
> > +			if (cur >= size)
> > +				goto error;
> > +
> >  			break;
> > +		case MT76_WED_ACTIVE:
> > +			if (cur >= min && cur < max)
> > +				continue;
> > +
> > +			if (cur >= size) {
> > +				u32 end = MT76_WED_WDS_CNT - 1;
> > +
> > +				i = min / 32;
> > +				idx = ffs(~mask[i] & GENMASK(end, 0));
> > +				if (!idx)
> > +					goto error;
> > +				idx--;
> > +				cur = min + idx;
> > +			}
> > +
> > +			break;
> > +		case MT76_WED_WDS_ACTIVE:
> > +			if (cur < min)
> > +				continue;
> > +			if (cur >= max)
> > +				goto error;
> > +
> > +			break;
> > +		default:
> > +			WARN_ON(1);
> > +			break;
> > +		}
> >  
> >  		mask[i] |= BIT(idx);
> >  		return cur;
> >  	}
> >  
> > +error:
> >  	return -1;
> >  }
> >  EXPORT_SYMBOL_GPL(mt76_wcid_alloc);
> > diff --git a/drivers/net/wireless/mediatek/mt76/util.h
> > b/drivers/net/wireless/mediatek/mt76/util.h
> > index 260965dde94c..c72460e78389 100644
> > --- a/drivers/net/wireless/mediatek/mt76/util.h
> > +++ b/drivers/net/wireless/mediatek/mt76/util.h
> > @@ -27,7 +27,7 @@ enum {
> >  #define MT76_INCR(_var, _size) \
> >  	(_var = (((_var) + 1) % (_size)))
> >  
> > -int mt76_wcid_alloc(u32 *mask, int size);
> > +int mt76_wcid_alloc(u32 *mask, int size, u8 flag);
> >  
> >  static inline void
> >  mt76_wcid_mask_set(u32 *mask, int idx)
> > -- 
> > 2.18.0
> > 

From kuba at kernel.org  Mon Dec  5 20:06:11 2022
From: kuba at kernel.org (Jakub Kicinski)
Date: Mon, 5 Dec 2022 20:06:11 -0800
Subject: [PATCH net-next] net: mtk_eth_soc: enable flow offload support
 fot MT7986 SoC
In-Reply-To: <70E22A48-DEE2-403A-975F-AD7D418B78CA@public-files.de>
References: <fdcaacd827938e6a8c4aa1ac2c13e46d2c08c821.1670072898.git.lorenzo@kernel.org>
	<70E22A48-DEE2-403A-975F-AD7D418B78CA@public-files.de>
Message-ID: <20221205200611.6b488918@kernel.org>

On Sat, 03 Dec 2022 16:38:15 +0100 Frank Wunderlich wrote:
> thanks for the Patch, i only noticed a typo in Subject (s/fot/for/).
> regards Frank

The message from the bot does not reflect that but FWIW
 - fixed when applying.


From Sujuan.Chen at mediatek.com  Mon Dec  5 19:17:53 2022
From: Sujuan.Chen at mediatek.com (=?utf-8?B?U3VqdWFuIENoZW4gKOmZiOe0oOWonyk=?=)
Date: Tue, 6 Dec 2022 03:17:53 +0000
Subject: [PATCH] wifi: mt76: mt7915: add wds support when wed is enabled
In-Reply-To: <Y3t9NOKseNw2myzE@lore-desk>
References: <af04db938bf9633225c4358058a39aa3be0e218e.1669022945.git.sujuan.chen@mediatek.com>
	 <Y3t9NOKseNw2myzE@lore-desk>
Message-ID: <b2f69e22fffced5cf47f92155a31ccc4b1393b14.camel@mediatek.com>

On Mon, 2022-11-21 at 14:29 +0100, Lorenzo Bianconi wrote:
> > The current WED only supports 256 wcid, whereas mt7986 can support
> > up to 512 entries,
> > so firmware provides a rule to get sta_info by DA when wcid is set
> > to 0x3ff by txd.
> > Also, WED provides a register to overwrite txd wcid, that is,
> > wcid[9:8] can
> > be overwritten by 0x3 and wcid[7:0] is set to 0xff by host driver.
> > 
> > However, firmware is unable to get sta_info from DA as DA != RA for
> > 4addr cases,
> > so firmware and wifi host driver both use wcid (256 - 271) and (768
> > ~ 783)
> > for sync up to get correct sta_info
> > 
> > Tested-by: Sujuan Chen <sujuan.chen at mediatek.com>
> > Co-developed-by: Bo Jiao <bo.jiao at mediatek.com>
> > Signed-off-by: Bo Jiao <bo.jiao at mediatek.com>
> > Signed-off-by: Sujuan Chen <sujuan.chen at mediatek.com>
> > ---
> > This patch is based on 
> > 

https://patchwork.kernel.org/project/linux-mediatek/list/?series=697444
> > ---
> >  drivers/net/wireless/mediatek/mt76/mt76.h     |  6 +++
> >  .../net/wireless/mediatek/mt76/mt7603/main.c  |  2 +-
> >  .../net/wireless/mediatek/mt76/mt7615/main.c  |  2 +-
> >  .../wireless/mediatek/mt76/mt7615/pci_init.c  |  2 +-
> >  .../wireless/mediatek/mt76/mt7615/usb_sdio.c  |  2 +-
> >  .../net/wireless/mediatek/mt76/mt76x02_util.c |  2 +-
> >  .../net/wireless/mediatek/mt76/mt7915/init.c  |  2 +-
> >  .../net/wireless/mediatek/mt76/mt7915/main.c  | 24 +++++++++--
> >  .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 11 ++++-
> >  .../net/wireless/mediatek/mt76/mt7915/mcu.h   |  1 +
> >  .../net/wireless/mediatek/mt76/mt7915/mmio.c  |  3 ++
> >  .../net/wireless/mediatek/mt76/mt7921/init.c  |  2 +-
> >  .../net/wireless/mediatek/mt76/mt7921/main.c  |  2 +-
> >  .../net/wireless/mediatek/mt76/mt7996/init.c  |  2 +-
> >  .../net/wireless/mediatek/mt76/mt7996/main.c  |  2 +-
> >  drivers/net/wireless/mediatek/mt76/util.c     | 42
> > ++++++++++++++++++-
> >  drivers/net/wireless/mediatek/mt76/util.h     |  2 +-
> >  17 files changed, 91 insertions(+), 18 deletions(-)
> > 
> 
> Hi Sujuan,
> 
> I took just a brief look at the patch, but I think you can
> significantly
> reduce the patch size doing something like:
> 
> int __mt76_wcid_alloc(u32 *mask, int size, u8 flag)
> {
> 	...
> }
> 
> static inline int mt76_wcid_alloc(u32 *mask, int size)
> {
> 	return __mt76_wcid_alloc(, 0);
> }
> 

Hi Lore,

ack, thanks. I will do it in v2.

> > diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h
> > b/drivers/net/wireless/mediatek/mt76/mt76.h
> > index 33f87e518d68..1763b582c020 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt76.h
> > +++ b/drivers/net/wireless/mediatek/mt76/mt76.h
> > @@ -38,6 +38,12 @@
> >  #define MT_WED_Q_RX(_n)		__MT_WED_Q(MT76_WED_Q_RX, _n)
> >  #define MT_WED_Q_TXFREE		__MT_WED_Q(MT76_WED_Q_TXFREE,
> > 0)
> >  
> > +enum mt76_wed_state {
> > +	MT76_WED_DISABLED,
> > +	MT76_WED_ACTIVE,
> > +	MT76_WED_WDS_ACTIVE,
> > +};
> > +
> >  struct mt76_dev;
> >  struct mt76_phy;
> >  struct mt76_wcid;
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/main.c
> > b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
> > index ca50feb0b3a9..d788bb59a113 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7603/main.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
> > @@ -347,7 +347,7 @@ mt7603_sta_add(struct mt76_dev *mdev, struct
> > ieee80211_vif *vif,
> >  	int idx;
> >  	int ret = 0;
> >  
> > -	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7603_WTBL_STA -
> > 1);
> > +	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7603_WTBL_STA - 1,
> > 0);
> >  	if (idx < 0)
> >  		return -ENOSPC;
> >  
> 
> [...]
> 
> >  	mt76_connac_mcu_wtbl_update_hdr_trans(&dev->mt76, vif, sta);
> >  }
> >  
> > @@ -1448,15 +1462,19 @@ mt7915_net_fill_forward_path(struct
> > ieee80211_hw *hw,
> >  	if (!mtk_wed_device_active(wed))
> >  		return -ENODEV;
> >  
> > -	if (msta->wcid.idx > 0xff)
> > +	if (msta->wcid.idx > MT7915_WTBL_STA)
> >  		return -EIO;
> >  
> >  	path->type = DEV_PATH_MTK_WDMA;
> >  	path->dev = ctx->dev;
> >  	path->mtk_wdma.wdma_idx = wed->wdma_idx;
> >  	path->mtk_wdma.bss = mvif->mt76.idx;
> > -	path->mtk_wdma.wcid = is_mt7915(&dev->mt76) ? msta->wcid.idx :
> > 0x3ff;
> >  	path->mtk_wdma.queue = phy != &dev->phy;
> > +	if (test_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags) ||
> > +	    is_mt7915(&dev->mt76))
> > +		path->mtk_wdma.wcid = msta->wcid.idx;
> > +	else
> > +		path->mtk_wdma.wcid = 0x3ff;
> >  
> >  	ctx->dev = NULL;
> >  
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> > b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> > index 2769d6c897d9..aeeeff9b2143 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> > @@ -2303,8 +2303,15 @@ int mt7915_mcu_init_firmware(struct
> > mt7915_dev *dev)
> >  	if (ret)
> >  		return ret;
> >  
> > -	if (mtk_wed_device_active(&dev->mt76.mmio.wed) &&
> > is_mt7915(&dev->mt76))
> > -		mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(CAPABILITY), 0,
> > 0, 0);
> > +	if (mtk_wed_device_active(&dev->mt76.mmio.wed)) {
> > +		if (is_mt7915(&dev->mt76))
> > +			mt7915_mcu_wa_cmd(dev,
> > MCU_WA_PARAM_CMD(CAPABILITY),
> > +					  0, 0, 0);
> > +		else
> > +			mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET),
> > +					  MCU_WA_PARAM_WED_VERSION,
> > +					  dev->mt76.mmio.wed.rev_id,
> > 0);
> > +	}
> 
> can you please honor mt7915_mcu_wa_cmd() returned value?
> 

Ack.

> >  
> >  	ret = mt7915_mcu_set_mwds(dev, 1);
> >  	if (ret)
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> > b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> > index c19b5d66c0e1..59e1ea35f77f 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> > @@ -260,6 +260,7 @@ enum {
> >  	MCU_WA_PARAM_PDMA_RX = 0x04,
> >  	MCU_WA_PARAM_CPU_UTIL = 0x0b,
> >  	MCU_WA_PARAM_RED = 0x0e,
> > +	MCU_WA_PARAM_WED_VERSION = 0x32,
> >  };
> >  
> >  enum mcu_mmps_mode {
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > index 1fcf34f57a16..d90793d082b8 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > @@ -773,6 +773,9 @@ int mt7915_mmio_wed_init(struct mt7915_dev
> > *dev, void *pdev_ptr,
> >  
> >  	dev->mt76.rx_token_size = wed->wlan.rx_npkt;
> >  
> > +	if (!is_mt7915(&dev->mt76))
> > +		wed->wlan.wcid_512 = true;
> > +
> >  	if (mtk_wed_device_attach(wed))
> >  		return 0;
> >  
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > index 79b8055ce4c4..702ff300f8f7 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > @@ -283,7 +283,7 @@ static int mt7921_init_wcid(struct mt7921_dev
> > *dev)
> >  	int idx;
> >  
> >  	/* Beacon and mgmt frames should occupy wcid 0 */
> > -	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7921_WTBL_STA -
> > 1);
> > +	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7921_WTBL_STA - 1,
> > 0);
> >  	if (idx)
> >  		return -ENOSPC;
> >  
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
> > b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
> > index 41df17efdb3a..3d8771fcb847 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
> > @@ -814,7 +814,7 @@ int mt7921_mac_sta_add(struct mt76_dev *mdev,
> > struct ieee80211_vif *vif,
> >  	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
> >  	int ret, idx;
> >  
> > -	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7921_WTBL_STA -
> > 1);
> > +	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7921_WTBL_STA - 1,
> > 0);
> >  	if (idx < 0)
> >  		return -ENOSPC;
> >  
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/init.c
> > b/drivers/net/wireless/mediatek/mt76/mt7996/init.c
> > index cd1657e3585d..4cf055040519 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7996/init.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7996/init.c
> > @@ -433,7 +433,7 @@ static int mt7996_init_hardware(struct
> > mt7996_dev *dev)
> >  		return ret;
> >  
> >  	/* Beacon and mgmt frames should occupy wcid 0 */
> > -	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7996_WTBL_STA);
> > +	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7996_WTBL_STA, 0);
> >  	if (idx)
> >  		return -ENOSPC;
> >  
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/main.c
> > b/drivers/net/wireless/mediatek/mt76/mt7996/main.c
> > index 21dea3fa7dc1..fd40b515cc5b 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7996/main.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7996/main.c
> > @@ -579,7 +579,7 @@ int mt7996_mac_sta_add(struct mt76_dev *mdev,
> > struct ieee80211_vif *vif,
> >  	u8 band_idx = mvif->phy->mt76->band_idx;
> >  	int ret, idx;
> >  
> > -	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7996_WTBL_STA);
> > +	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7996_WTBL_STA, 0);
> >  	if (idx < 0)
> >  		return -ENOSPC;
> >  
> > diff --git a/drivers/net/wireless/mediatek/mt76/util.c
> > b/drivers/net/wireless/mediatek/mt76/util.c
> > index 581964425468..0850149f4200 100644
> > --- a/drivers/net/wireless/mediatek/mt76/util.c
> > +++ b/drivers/net/wireless/mediatek/mt76/util.c
> > @@ -42,9 +42,14 @@ bool __mt76_poll_msec(struct mt76_dev *dev, u32
> > offset, u32 mask, u32 val,
> >  }
> >  EXPORT_SYMBOL_GPL(__mt76_poll_msec);
> >  
> > -int mt76_wcid_alloc(u32 *mask, int size)
> > +int mt76_wcid_alloc(u32 *mask, int size, u8 flag)
> >  {
> > +#define MT76_WED_WDS_MIN    256
> > +#define MT76_WED_WDS_CNT    16
> > +
> >  	int i, idx = 0, cur;
> > +	int min = MT76_WED_WDS_MIN;
> > +	int max = min + MT76_WED_WDS_CNT;
> >  
> >  	for (i = 0; i < DIV_ROUND_UP(size, 32); i++) {
> >  		idx = ffs(~mask[i]);
> > @@ -53,13 +58,46 @@ int mt76_wcid_alloc(u32 *mask, int size)
> >  
> >  		idx--;
> >  		cur = i * 32 + idx;
> > -		if (cur >= size)
> 
> I think it easier to understand the code if you run the code below
> just if wed
> is active, right?
> 
> 		if (!mtk_wed_device_active())
> 			break;
> 

mtk_wed_device_active() need mt76_dev to get wed.
!mtk_wed_device_active() is include in MT76_WED_DISABLED.
Would it be better to run if (!mtk_wed_device_active())?

Actually, the logic is a bit more complicated.
Using only mtk_wed_device_active() cannot cover all cases.
wcid(256~271) is special using for WDS when WED is enabled.
and wcid(256~271) will be used for normal sta when wcid(exclude
256~271) is run out.

I will change MT76_WED_DISABLED to MT76_WED_DEFAULT which includes
below situation:
	(wed is disabled || beacon wcid(0))

is it ok?

> Regards,
> Lorenzo
> 
> > +
> > +		switch (flag) {
> > +		case MT76_WED_DISABLED:
> > +			if (cur >= size)
> > +				goto error;
> > +
> >  			break;
> > +		case MT76_WED_ACTIVE:
> > +			if (cur >= min && cur < max)
> > +				continue;
> > +
> > +			if (cur >= size) {
> > +				u32 end = MT76_WED_WDS_CNT - 1;
> > +
> > +				i = min / 32;
> > +				idx = ffs(~mask[i] & GENMASK(end, 0));
> > +				if (!idx)
> > +					goto error;
> > +				idx--;
> > +				cur = min + idx;
> > +			}
> > +
> > +			break;
> > +		case MT76_WED_WDS_ACTIVE:
> > +			if (cur < min)
> > +				continue;
> > +			if (cur >= max)
> > +				goto error;
> > +
> > +			break;
> > +		default:
> > +			WARN_ON(1);
> > +			break;
> > +		}
> >  
> >  		mask[i] |= BIT(idx);
> >  		return cur;
> >  	}
> >  
> > +error:
> >  	return -1;
> >  }
> >  EXPORT_SYMBOL_GPL(mt76_wcid_alloc);
> > diff --git a/drivers/net/wireless/mediatek/mt76/util.h
> > b/drivers/net/wireless/mediatek/mt76/util.h
> > index 260965dde94c..c72460e78389 100644
> > --- a/drivers/net/wireless/mediatek/mt76/util.h
> > +++ b/drivers/net/wireless/mediatek/mt76/util.h
> > @@ -27,7 +27,7 @@ enum {
> >  #define MT76_INCR(_var, _size) \
> >  	(_var = (((_var) + 1) % (_size)))
> >  
> > -int mt76_wcid_alloc(u32 *mask, int size);
> > +int mt76_wcid_alloc(u32 *mask, int size, u8 flag);
> >  
> >  static inline void
> >  mt76_wcid_mask_set(u32 *mask, int idx)
> > -- 
> > 2.18.0
> > 

From bayi.cheng at mediatek.com  Mon Dec  5 21:30:13 2022
From: bayi.cheng at mediatek.com (=?utf-8?B?QmF5aSBDaGVuZyAo56iL5YWr5oSPKQ==?=)
Date: Tue, 6 Dec 2022 05:30:13 +0000
Subject: [PATCH v1] spi: spi-mtk-nor: Add recovery mechanism for dma read
 timeout
In-Reply-To: <d5bcc6aa-bdb5-9705-a7dd-79a276f4ea01@collabora.com>
References: <20221205082419.29170-1-bayi.cheng@mediatek.com>
	 <d5bcc6aa-bdb5-9705-a7dd-79a276f4ea01@collabora.com>
Message-ID: <ffa970e5a28d869c097a39f9fd4fc81e5dbbd8de.camel@mediatek.com>

On Mon, 2022-12-05 at 15:01 +0100, AngeloGioacchino Del Regno wrote:
> Il 05/12/22 09:24, Bayi Cheng ha scritto:
> > From: bayi cheng <bayi.cheng at mediatek.com>
> > 
> > The state machine of MTK spi nor controller may be disturbed by
> > some
> > glitch signals from the relevant BUS during dma read, Although the
> > possibility of causing the dma read to fail is next to nothing,
> > However, if error-handling is not implemented, which makes the
> > feature
> > somewhat risky.
> > 
> > Add an error-handling mechanism here, reset the state machine and
> > re-read the data when an error occurs.
> > 
> > Signed-off-by: bayi cheng <bayi.cheng at mediatek.com>
> > ---
> > Change in v1:
> >    -Reset the state machine when dma read fails and read again.
> > ---
> > ---
> >   drivers/spi/spi-mtk-nor.c | 16 +++++++++++++++-
> >   1 file changed, 15 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/spi/spi-mtk-nor.c b/drivers/spi/spi-mtk-nor.c
> > index d167699a1a96..c77d79da9a4c 100644
> > --- a/drivers/spi/spi-mtk-nor.c
> > +++ b/drivers/spi/spi-mtk-nor.c
> > @@ -80,6 +80,9 @@
> >   #define MTK_NOR_REG_DMA_FADR		0x71c
> >   #define MTK_NOR_REG_DMA_DADR		0x720
> >   #define MTK_NOR_REG_DMA_END_DADR	0x724
> > +#define MTK_NOR_REG_CG_DIS		0x728
> > +#define MTK_NOR_SFC_SW_RST		BIT(2)
> > +
> >   #define MTK_NOR_REG_DMA_DADR_HB		0x738
> >   #define MTK_NOR_REG_DMA_END_DADR_HB	0x73c
> >   
> > @@ -616,7 +619,18 @@ static int mtk_nor_exec_op(struct spi_mem
> > *mem, const struct spi_mem_op *op)
> >   			mtk_nor_set_addr(sp, op);
> >   			return mtk_nor_read_pio(sp, op);
> >   		} else {
> > -			return mtk_nor_read_dma(sp, op);
> > +			ret = mtk_nor_read_dma(sp, op);
> > +			if (ret) {
> > +				dev_err(sp->dev, "try to read
> > again\n");
> > +				mtk_nor_rmw(sp, MTK_NOR_REG_CG_DIS, 0,
> > MTK_NOR_SFC_SW_RST);
> > +				mb(); /* flush previous writes */
> > +				mtk_nor_rmw(sp, MTK_NOR_REG_CG_DIS,
> > MTK_NOR_SFC_SW_RST, 0);
> > +				mb(); /* flush previous writes */
> > +				writel(MTK_NOR_ENABLE_SF_CMD, sp->base
> > + MTK_NOR_REG_WP);
> 
>  From what I understand, you're introducing a way to perform a
> flush+reset on
> the controller.
> 
> At this point, I'd put that in a separate function like
> `mtk_nor_reset()`, as
> to both increase readability and to possibly reuse it somewhere else
> in the
> future, if needed.
> 
> So this would become...
> 
> 		} else {
> 			ret = mtk_nor_read_dma(sp, op);
> 			if (unlikely(ret)) {
> 				/* Handle rare bus glitch */
> 				mtk_nor_reset(sp);
> 				mtk_nor_setup_bus(sp, op);
> 				return mtk_nor_read_dma(sp, op);
> 			}
> 			return ret;
> 		}
> 
> ...or something alike :-)
> 
> Regards,
> Angelo
> 
Hi Angelo,

Thanks for your comments! I will fix it in the next patch.

Regards,
Bayi

From Yunfei.Dong at mediatek.com  Mon Dec  5 22:43:54 2022
From: Yunfei.Dong at mediatek.com (=?utf-8?B?WXVuZmVpIERvbmcgKOiRo+S6kemjnik=?=)
Date: Tue, 6 Dec 2022 06:43:54 +0000
Subject: [PATCH v4,1/3] media: dt-bindings: media: mediatek: vcodec: adapt
 to the 'clock-names' of different platforms
In-Reply-To: <20221205175430.GA2136513-robh@kernel.org>
References: <20221202034450.3808-1-yunfei.dong@mediatek.com>
	 <20221205175430.GA2136513-robh@kernel.org>
Message-ID: <71003e4babe09bb7a5448bd7d0d5a987c9eb9c08.camel@mediatek.com>

Hi Rob,

Thanks for your suggestion.

On Mon, 2022-12-05 at 11:54 -0600, Rob Herring wrote:
> On Fri, Dec 02, 2022 at 11:44:48AM +0800, Yunfei Dong wrote:
> > mt8195 and mt8192 have different clock numbers, separate 'clock-
> > names'
> > according to compatible name.
> > 
> > Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
> > ---
> > compared with v3:
> > - rewrite clock-names according to different platforms.
> > 
> > Reference series:
> > [1]: v5 of this series is presend by Allen-KH Cheng.
> >      message-id: 20221128143832.25584-4-allen-kh.cheng at mediatek.com
> > ---
> >  .../media/mediatek,vcodec-subdev-decoder.yaml | 41
> > ++++++++++++++++---
> >  1 file changed, 35 insertions(+), 6 deletions(-)
> > 
> > diff --git
> > a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-
> > decoder.yaml
> > b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-
> > decoder.yaml
> > index 7c5b4a91c59b..a08b2c814f40 100644
> > --- a/Documentation/devicetree/bindings/media/mediatek,vcodec-
> > subdev-decoder.yaml
> > +++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-
> > subdev-decoder.yaml
> > @@ -110,15 +110,12 @@ patternProperties:
> >            Refer to bindings/iommu/mediatek,iommu.yaml.
> >  
> >        clocks:
> > +        minItems: 1
> 
> Why 1? Looks like it should be 4 or 5 clocks.
> 
Yes, I should write this vale to 4, will change it again if 1 is used
in the future.

Best regards,
Yunfei Dong
> >          maxItems: 5
> >  
> >        clock-names:
> > -        items:
> > -          - const: sel
> > -          - const: soc-vdec
> > -          - const: soc-lat
> > -          - const: vdec
> > -          - const: top
> > +        minItems: 1
> > +        maxItems: 5
> >  
> >        assigned-clocks:
> >          maxItems: 1
> > @@ -159,6 +156,38 @@ then:
> >    required:
> >      - interrupts
> >  
> > +allOf:
> > +  - if:
> > +      properties:
> > +        compatible:
> > +          contains:
> > +            enum:
> > +              - mediatek,mt8192-vcodec-dec
> > +    then:
> > +      properties:
> > +        clock-names:
> > +          items:
> > +            - const: sel
> > +            - const: soc-vdec
> > +            - const: soc-lat
> > +            - const: vdec
> > +            - const: top
> > +
> > +  - if:
> > +      properties:
> > +        compatible:
> > +          contains:
> > +            enum:
> > +              - mediatek,mt8195-vcodec-dec
> > +    then:
> > +      properties:
> > +        clock-names:
> > +          items:
> > +            - const: sel
> > +            - const: vdec
> > +            - const: lat
> > +            - const: top
> > +
> >  additionalProperties: false
> >  
> >  examples:
> > -- 
> > 2.18.0
> > 
> > 

From yunfei.dong at mediatek.com  Mon Dec  5 22:45:35 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Tue, 6 Dec 2022 14:45:35 +0800
Subject: [PATCH v5,2/3] media: dt-bindings: media: mediatek: vcodec: Change the max reg value to 2
In-Reply-To: <20221206064536.16592-1-yunfei.dong@mediatek.com>
References: <20221206064536.16592-1-yunfei.dong@mediatek.com>
Message-ID: <20221206064536.16592-2-yunfei.dong@mediatek.com>

Need to add racing control register base in device node for mt8195 support
inner racing mode. Changing the max reg value from 1 to 2.

Adding the description for VDEC_SYS and VDEC_MISC.

Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
Acked-by: Rob Herring <robh at kernel.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 .../bindings/media/mediatek,vcodec-subdev-decoder.yaml      | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
index c56af1c1d9db..30917b66d62d 100644
--- a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
+++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
@@ -61,7 +61,10 @@ properties:
       - mediatek,mt8195-vcodec-dec
 
   reg:
-    maxItems: 1
+    minItems: 1
+    items:
+      - description: VDEC_SYS register space
+      - description: VDEC_RACING_CTRL register space
 
   iommus:
     minItems: 1
@@ -98,6 +101,7 @@ patternProperties:
 
       reg:
         maxItems: 1
+        description: VDEC_MISC register space
 
       interrupts:
         maxItems: 1
-- 
2.18.0



From yunfei.dong at mediatek.com  Mon Dec  5 22:45:34 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Tue, 6 Dec 2022 14:45:34 +0800
Subject: [PATCH v5,1/3] media: dt-bindings: media: mediatek: vcodec: adapt to the 'clock-names' of different platforms
Message-ID: <20221206064536.16592-1-yunfei.dong@mediatek.com>

mt8195 and mt8192 have different clock numbers, separate 'clock-names'
according to compatible name.

Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
compared with v4:
- change min clocks and clock-names from 1 to 4
compared with v3:
- rewrite clock-names according to different platforms.

Reference series:
[1]: v5 of this series is presend by Allen-KH Cheng.
     message-id: 20221128143832.25584-4-allen-kh.cheng at mediatek.com
---
 .../media/mediatek,vcodec-subdev-decoder.yaml | 41 ++++++++++++++++---
 1 file changed, 35 insertions(+), 6 deletions(-)

diff --git a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
index 7c5b4a91c59b..c56af1c1d9db 100644
--- a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
+++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
@@ -110,15 +110,12 @@ patternProperties:
           Refer to bindings/iommu/mediatek,iommu.yaml.
 
       clocks:
+        minItems: 4
         maxItems: 5
 
       clock-names:
-        items:
-          - const: sel
-          - const: soc-vdec
-          - const: soc-lat
-          - const: vdec
-          - const: top
+        minItems: 4
+        maxItems: 5
 
       assigned-clocks:
         maxItems: 1
@@ -159,6 +156,38 @@ then:
   required:
     - interrupts
 
+allOf:
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - mediatek,mt8192-vcodec-dec
+    then:
+      properties:
+        clock-names:
+          items:
+            - const: sel
+            - const: soc-vdec
+            - const: soc-lat
+            - const: vdec
+            - const: top
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - mediatek,mt8195-vcodec-dec
+    then:
+      properties:
+        clock-names:
+          items:
+            - const: sel
+            - const: vdec
+            - const: lat
+            - const: top
+
 additionalProperties: false
 
 examples:
-- 
2.18.0



From yunfei.dong at mediatek.com  Mon Dec  5 22:45:36 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Tue, 6 Dec 2022 14:45:36 +0800
Subject: [PATCH v5,3/3] arm64: dts: mt8195: Add video decoder node
In-Reply-To: <20221206064536.16592-1-yunfei.dong@mediatek.com>
References: <20221206064536.16592-1-yunfei.dong@mediatek.com>
Message-ID: <20221206064536.16592-3-yunfei.dong@mediatek.com>

Add video decoder node to mt8195 device tree.

Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 arch/arm64/boot/dts/mediatek/mt8195.dtsi | 70 ++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index 905d1a90b406..6829aa0dcf4c 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -1874,6 +1874,76 @@
 			power-domains = <&spm MT8195_POWER_DOMAIN_CAM>;
 		};
 
+		video-codec at 18000000 {
+			compatible = "mediatek,mt8195-vcodec-dec";
+			mediatek,scp = <&scp>;
+			iommus = <&iommu_vdo M4U_PORT_L21_VDEC_MC_EXT>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+			reg = <0 0x18000000 0 0x1000>,
+			      <0 0x18004000 0 0x1000>;
+			ranges = <0 0 0 0x18000000 0 0x26000>;
+
+			video-codec at 2000 {
+				compatible = "mediatek,mtk-vcodec-lat-soc";
+				reg = <0 0x2000 0 0x800>;
+				iommus = <&iommu_vpp M4U_PORT_L23_VDEC_UFO_ENC_EXT>,
+					 <&iommu_vpp M4U_PORT_L23_VDEC_RDMA_EXT>;
+				clocks = <&topckgen CLK_TOP_VDEC>,
+					 <&vdecsys_soc CLK_VDEC_SOC_VDEC>,
+					 <&vdecsys_soc CLK_VDEC_SOC_LAT>,
+					 <&topckgen CLK_TOP_UNIVPLL_D4>;
+				clock-names = "sel", "vdec", "lat", "top";
+				assigned-clocks = <&topckgen CLK_TOP_VDEC>;
+				assigned-clock-parents = <&topckgen CLK_TOP_UNIVPLL_D4>;
+				power-domains = <&spm MT8195_POWER_DOMAIN_VDEC0>;
+			};
+
+			video-codec at 10000 {
+				compatible = "mediatek,mtk-vcodec-lat";
+				reg = <0 0x10000 0 0x800>;
+				interrupts = <GIC_SPI 708 IRQ_TYPE_LEVEL_HIGH 0>;
+				iommus = <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_VLD_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_VLD2_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_AVC_MC_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_PRED_RD_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_TILE_EXT>,
+					 <&iommu_vdo M4U_PORT_L24_VDEC_LAT0_WDMA_EXT>;
+				clocks = <&topckgen CLK_TOP_VDEC>,
+					 <&vdecsys_soc CLK_VDEC_SOC_VDEC>,
+					 <&vdecsys_soc CLK_VDEC_SOC_LAT>,
+					 <&topckgen CLK_TOP_UNIVPLL_D4>;
+				clock-names = "sel", "vdec", "lat", "top";
+				assigned-clocks = <&topckgen CLK_TOP_VDEC>;
+				assigned-clock-parents = <&topckgen CLK_TOP_UNIVPLL_D4>;
+				power-domains = <&spm MT8195_POWER_DOMAIN_VDEC0>;
+			};
+
+			video-codec at 25000 {
+				compatible = "mediatek,mtk-vcodec-core";
+				reg = <0 0x25000 0 0x1000>;		/* VDEC_CORE_MISC */
+				interrupts = <GIC_SPI 707 IRQ_TYPE_LEVEL_HIGH 0>;
+				iommus = <&iommu_vdo M4U_PORT_L21_VDEC_MC_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_UFO_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_PP_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_PRED_RD_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_PRED_WR_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_PPWRAP_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_TILE_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_VLD_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_VLD2_EXT>,
+					 <&iommu_vdo M4U_PORT_L21_VDEC_AVC_MV_EXT>;
+				clocks = <&topckgen CLK_TOP_VDEC>,
+					 <&vdecsys CLK_VDEC_VDEC>,
+					 <&vdecsys CLK_VDEC_LAT>,
+					 <&topckgen CLK_TOP_UNIVPLL_D4>;
+				clock-names = "sel", "vdec", "lat", "top";
+				assigned-clocks = <&topckgen CLK_TOP_VDEC>;
+				assigned-clock-parents = <&topckgen CLK_TOP_UNIVPLL_D4>;
+				power-domains = <&spm MT8195_POWER_DOMAIN_VDEC1>;
+			};
+		};
+
 		larb24: larb at 1800d000 {
 			compatible = "mediatek,mt8195-smi-larb";
 			reg = <0 0x1800d000 0 0x1000>;
-- 
2.18.0



From angelogioacchino.delregno at collabora.com  Tue Dec  6 00:28:16 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 6 Dec 2022 09:28:16 +0100
Subject: [PATCH v2 1/2] thermal: mediatek: add support for MT7986 and
 MT7981
In-Reply-To: <Y44tdASIQ2DpL9re@makrotopia.org>
References: <Y4dYazyXF02eRGC5@makrotopia.org>
 <0b72a12c-286f-79d0-09e9-b1761530850a@collabora.com>
 <Y44tdASIQ2DpL9re@makrotopia.org>
Message-ID: <adc67800-beae-2f42-9cc7-5f041e390b61@collabora.com>

Il 05/12/22 18:42, Daniel Golle ha scritto:
> Hi Angelo,
> 
> On Thu, Dec 01, 2022 at 02:24:17PM +0100, AngeloGioacchino Del Regno wrote:
>> Il 30/11/22 14:19, Daniel Golle ha scritto:
>>> Add support for V3 generation thermal found in MT7986 and MT7981 SoCs.
>>> Brings code to assign values from efuse as well as new function to
>>> convert raw temperature to millidegree celsius, as found in MediaTek's
>>> SDK sources (but cleaned up and de-duplicated)
>>>
>>> [1]: https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/baf36c7eef477aae1f8f2653b6c29e2caf48475b
>>> Signed-off-by: Daniel Golle <daniel at makrotopia.org>
>>> Reviewed-by: Henry Yen <henry.yen at mediatek.com>
>>> ---
>>> Changes since v1: Drop use of adc_oe field in efuse, Henry Yen confirmed
>>> its use has been dropped intentionally in MTK SDK as well.
>>>
>>>    drivers/thermal/mtk_thermal.c | 122 +++++++++++++++++++++++++++++++++-
>>>    1 file changed, 119 insertions(+), 3 deletions(-)
>>>

...

>>
>> What about optimizing this with assigning a function pointer?
>> Like that, we wouldn't check any version in there... as in that case we'd
>> simply do something like
>>
>> temp = conf->raw_to_mcelsius(mt, conf->bank...blahblah...);
>>
>> ...and this would also mean that the snippet saying "the first read of a sensor
>> often contains very high bogus temperature value [...]" would get merged in the v2
>> of raw_to_mcelsius (as that function is used only in mtk_thermal_bank_temperature).
> 
> I found that Amjad Ouled-Ameur is taking care of converting that series
> of if-else options into a function pointer allowing to easily call the
> right raw_to_mcelsius function.
> 
> [PATCH v7 0/4] thermal: mediatek: Add support for MT8365 SoC
> https://lore.kernel.org/linux-arm-kernel/4121bb6b-30db-7a23-f4c8-40afdda7a0b5 at linaro.org/T/
> 
> Should I wait until this series is merged and then submit support
> for MT7986 thermal on top of that?
> 

Right - that may be sensible. Please coordinate with him, so that one of the two
series actually depends on the other (and they don't conflict with each other).

I've added him to the loop.

Regards,
Angelo




From angelogioacchino.delregno at collabora.com  Tue Dec  6 00:56:30 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 6 Dec 2022 09:56:30 +0100
Subject: [PATCH v5,1/3] media: dt-bindings: media: mediatek: vcodec: adapt
 to the 'clock-names' of different platforms
In-Reply-To: <20221206064536.16592-1-yunfei.dong@mediatek.com>
References: <20221206064536.16592-1-yunfei.dong@mediatek.com>
Message-ID: <b41bd5ed-bd95-90f0-1907-cd99a63b402b@collabora.com>

Il 06/12/22 07:45, Yunfei Dong ha scritto:
> mt8195 and mt8192 have different clock numbers, separate 'clock-names'
> according to compatible name.
> 
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From aouledameur at baylibre.com  Tue Dec  6 01:18:14 2022
From: aouledameur at baylibre.com (Amjad Ouled-Ameur)
Date: Tue, 06 Dec 2022 10:18:14 +0100
Subject: [PATCH v7 4/4] thermal: mediatek: add another get_temp ops for
 thermal sensors
In-Reply-To: <adfe41f7-00e5-876b-7803-3127919fba13@linaro.org>
References: <20221018-up-i350-thermal-bringup-v7-0-ebf08ff2eddb@baylibre.com> <20221018-up-i350-thermal-bringup-v7-4-ebf08ff2eddb@baylibre.com> <4121bb6b-30db-7a23-f4c8-40afdda7a0b5@linaro.org> <COTTJX635TNF.1WL2TEZN7VW9O@amjad-ThinkPad-T490> <adfe41f7-00e5-876b-7803-3127919fba13@linaro.org>
Message-ID: <COUMF3IZ9Y63.LA3KFHJSUZIC@amjad-ThinkPad-T490>

Hi Daniel,
On Mon Dec 5, 2022 at 8:39 PM CET, Daniel Lezcano wrote:
>
> Hi Amjad,
>
>
> On 05/12/2022 11:41, Amjad Ouled-Ameur wrote:
>
> [ ... ]
>
> >>> @@ -1161,11 +1197,24 @@ static int mtk_thermal_probe(struct platform_device *pdev)
> >>>    
> >>>    	platform_set_drvdata(pdev, mt);
> >>>    
> >>> -	tzdev = devm_thermal_of_zone_register(&pdev->dev, 0, mt,
> >>> -					      &mtk_thermal_ops);
> >>> -	if (IS_ERR(tzdev)) {
> >>> -		ret = PTR_ERR(tzdev);
> >>> -		goto err_disable_clk_peri_therm;
> >>> +	for (i = 0; i < mt->conf->num_sensors + 1; i++) {
> >>> +		tz = devm_kmalloc(&pdev->dev, sizeof(*tz), GFP_KERNEL);
> >>> +		if (!tz)
> >>> +			return -ENOMEM;
> >>> +
> >>> +		tz->mt = mt;
> >>> +		tz->id = i;
> >>> +
> >>> +		tzdev = devm_thermal_of_zone_register(&pdev->dev, i, tz, (i == 0) ?
> >>> +							     &mtk_thermal_ops :
> >>> +							     &mtk_thermal_sensor_ops);
> >>
> >> Here you use again the aggregation
> > I addressed this concern in V6, could you please take a look and let me
> > know what you think [0].
> > 
> > [0]: https://lore.kernel.org/all/5eb0cdc2-e9f9-dd42-bf80-b7dcd8bcc196 at baylibre.com/
>
> May I misunderstanding but AFAICS, this patch is setting the 
> mtk_thermal_ops if the sensor id is zero. The get_temp is computing the 
> max temperature in this ops which is what we don't want to do.

Correct, but I think that is out of scope of this patchset, as the current
driver already uses mtk_thermal_ops for sensor 0. The focus of this patchset
is to add support for the other sensors.

Besides, what do you suggest as a clean implementation if the current one
no longer meets thermal core requirements ?

Regards,
Amjad
>
>
> -- 
> <http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs
>
> Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
> <http://twitter.com/#!/linaroorg> Twitter |
> <http://www.linaro.org/linaro-blog/> Blog



From Xiangsheng.Hou at mediatek.com  Tue Dec  6 01:05:05 2022
From: Xiangsheng.Hou at mediatek.com (=?utf-8?B?WGlhbmdzaGVuZyBIb3UgKOS+r+elpeiDnCk=?=)
Date: Tue, 6 Dec 2022 09:05:05 +0000
Subject: [PATCH v2 8/9] dt-bindings: mtd: Split ECC engine with rawnand
 controller
In-Reply-To: <3a9b5a27-e18f-226b-065b-f09c568b4d85@linaro.org>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
	 <20221205065756.26875-9-xiangsheng.hou@mediatek.com>
	 <3a9b5a27-e18f-226b-065b-f09c568b4d85@linaro.org>
Message-ID: <7e507c3a4832d12471a24b75033bd1e742151f03.camel@mediatek.com>

Hi Krzysztof,

On Mon, 2022-12-05 at 10:21 +0100, Krzysztof Kozlowski wrote:
> On 05/12/2022 07:57, Xiangsheng Hou wrote:
> > 1. Split MediaTek ECC engine with rawnand controller and convert to
> > YAML schema.
> > 2. Change the existing node name in order to match NAND controller
> > DT
> > bindings.
> 
> One patch - one logical change. Not two. This applies to all your
> patches, so whenever you want to enumerate, please think twice.

Will be corrected in next series.

> 
> > 
> > Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> > ---
> >  .../bindings/mtd/mediatek,mtk-nfc.yaml        | 171
> > +++++++++++++++++
> >  .../mtd/mediatek,nand-ecc-engine.yaml         |  62 ++++++
> >  .../devicetree/bindings/mtd/mtk-nand.txt      | 176 --------------
> > ----
> >  arch/arm/boot/dts/mt2701.dtsi                 |   2 +-
> >  arch/arm64/boot/dts/mediatek/mt2712e.dtsi     |   2 +-
> >  arch/arm64/boot/dts/mediatek/mt7622.dtsi      |   2 +-
> 
> Do not combine bindings and DTS.

The DTS modification will be separated.

> > 
> > +
> > +  ecc-engine: true
> 
> I don't think this could be anything. You need to describe it, so
> $ref
> and description.

Will do.

> > +
> > +  partitions:
> > +    $ref: mtd.yaml#
> 
> How the partitions are MTD device? Open that file and see how it
> should
> be defined... Anyway mtd.yaml is part of nand-chip, not nand-
> controller.

This will be dropped in next series since nand-chip is part of nand-
controller.

> > +
> > +allOf:
> > +  - $ref: nand-controller.yaml#
> > +
> > +  - if:
> > +      properties:
> > +        compatible:
> > +          contains:
> > +            const: mediatek,mt2701-nfc
> > +    then:
> > +      patternProperties:
> > +        "^nand@[a-f0-9]$":
> > +          type: object
> 
> No need for type, the definition is already there through
> nand-controller.yaml.
> 
> > +          properties:
> > +            reg:
> > +              minimum: 0
> > +              maximum: 1
> 
> This is the same as other variant, so should be defined in top-level
> pattern properties.
> 
> > +            nand-ecc-mode:
> > +              const: hw
> 
> Ditto

Will be fixed in next series.

Thanks
Xiangsheng Hou

From Xiangsheng.Hou at mediatek.com  Tue Dec  6 01:04:21 2022
From: Xiangsheng.Hou at mediatek.com (=?utf-8?B?WGlhbmdzaGVuZyBIb3UgKOS+r+elpeiDnCk=?=)
Date: Tue, 6 Dec 2022 09:04:21 +0000
Subject: [PATCH v2 7/9] dt-bindings: spi: mtk-snfi: Add read latch latency
 property
In-Reply-To: <ce449a0c-efcc-0ac1-fb8e-c2b4148a5bc1@collabora.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
	 <20221205065756.26875-8-xiangsheng.hou@mediatek.com>
	 <ce449a0c-efcc-0ac1-fb8e-c2b4148a5bc1@collabora.com>
Message-ID: <a8f706b37f5decf91bfa9a9ac8cf04be4346dd85.camel@mediatek.com>

Hi Angelo,

On Mon, 2022-12-05 at 15:21 +0100, AngeloGioacchino Del Regno wrote:
> Il 05/12/22 07:57, Xiangsheng Hou ha scritto:
> > Add mediatek,rx-latch-latency property which adjust read delay in
> > the
> > unit of clock cycle.
> > 
> > Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> > Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
> > ---
> >   .../devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml     | 7
> > +++++++
> >   1 file changed, 7 insertions(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/spi/mediatek,spi-
> > mtk-snfi.yaml b/Documentation/devicetree/bindings/spi/mediatek,spi-
> > mtk-snfi.yaml
> > index bab23f1b11fd..6e6ff8d73fcd 100644
> > --- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-
> > snfi.yaml
> > +++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-
> > snfi.yaml
> > @@ -45,6 +45,13 @@ properties:
> >       description: device-tree node of the accompanying ECC engine.
> >       $ref: /schemas/types.yaml#/definitions/phandle
> >   
> > +  mediatek,rx-latch-latency:
> > +    description: Rx delay to sample data with this value, the
> > value
> > +                 unit is clock cycle.
> 
> Can't we use nanoseconds or microseconds as a unit here, instead of
> clock cycles?

The clock cycle will be various with MediaTek SPI NAND controller which
clock frequency can support 26/52/68/81/104MHz...
It`s may be easy to configure and understand with clock cycle in unit.

Thanks
Xiangsheng Hou

From sashal at kernel.org  Tue Dec  6 01:49:08 2022
From: sashal at kernel.org (Sasha Levin)
Date: Tue,  6 Dec 2022 04:49:08 -0500
Subject: [PATCH AUTOSEL 6.0 05/13] pinctrl: meditatek: Startup with the IRQs disabled
In-Reply-To: <20221206094916.987259-1-sashal@kernel.org>
References: <20221206094916.987259-1-sashal@kernel.org>
Message-ID: <20221206094916.987259-5-sashal@kernel.org>

From: Ricardo Ribalda <ribalda at chromium.org>

[ Upstream commit 11780e37565db4dd064d3243ca68f755c13f65b4 ]

If the system is restarted via kexec(), the peripherals do not start
with a known state.

If the previous system had enabled an IRQs we will receive unexected
IRQs that can lock the system.

[   28.109251] watchdog: BUG: soft lockup - CPU#0 stuck for 26s!
[swapper/0:0]
[   28.109263] Modules linked in:
[   28.109273] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
5.15.79-14458-g4b9edf7b1ac6 #1 9f2e76613148af94acccd64c609a552fb4b4354b
[   28.109284] Hardware name: Google Elm (DT)
[   28.109290] pstate: 40400005 (nZcv daif +PAN -UAO -TCO -DIT -SSBS
		BTYPE=--)
[   28.109298] pc : __do_softirq+0xa0/0x388
[   28.109309] lr : __do_softirq+0x70/0x388
[   28.109316] sp : ffffffc008003ee0
[   28.109321] x29: ffffffc008003f00 x28: 000000000000000a x27:
0000000000000080
[   28.109334] x26: 0000000000000001 x25: ffffffefa7b350c0 x24:
ffffffefa7b47480
[   28.109346] x23: ffffffefa7b3d000 x22: 0000000000000000 x21:
ffffffefa7b0fa40
[   28.109358] x20: ffffffefa7b005b0 x19: ffffffefa7b47480 x18:
0000000000065b6b
[   28.109370] x17: ffffffefa749c8b0 x16: 000000000000018c x15:
00000000000001b8
[   28.109382] x14: 00000000000d3b6b x13: 0000000000000006 x12:
0000000000057e91
[   28.109394] x11: 0000000000000000 x10: 0000000000000000 x9 :
ffffffefa7b47480
[   28.109406] x8 : 00000000000000e0 x7 : 000000000f424000 x6 :
0000000000000000
[   28.109418] x5 : ffffffefa7dfaca0 x4 : ffffffefa7dfadf0 x3 :
000000000000000f
[   28.109429] x2 : 0000000000000000 x1 : 0000000000000100 x0 :
0000000001ac65c5
[   28.109441] Call trace:
[   28.109447]  __do_softirq+0xa0/0x388
[   28.109454]  irq_exit+0xc0/0xe0
[   28.109464]  handle_domain_irq+0x68/0x90
[   28.109473]  gic_handle_irq+0xac/0xf0
[   28.109480]  call_on_irq_stack+0x28/0x50
[   28.109488]  do_interrupt_handler+0x44/0x58
[   28.109496]  el1_interrupt+0x30/0x58
[   28.109506]  el1h_64_irq_handler+0x18/0x24
[   28.109512]  el1h_64_irq+0x7c/0x80
[   28.109519]  arch_local_irq_enable+0xc/0x18
[   28.109529]  default_idle_call+0x40/0x140
[   28.109539]  do_idle+0x108/0x290
[   28.109547]  cpu_startup_entry+0x2c/0x30
[   28.109554]  rest_init+0xe8/0xf8
[   28.109562]  arch_call_rest_init+0x18/0x24
[   28.109571]  start_kernel+0x338/0x42c
[   28.109578]  __primary_switched+0xbc/0xc4
[   28.109588] Kernel panic - not syncing: softlockup: hung tasks

Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
Link: https://lore.kernel.org/r/20221122-mtk-pinctrl-v1-1-bedf5655a3d2 at chromium.org
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>
Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/pinctrl/mediatek/mtk-eint.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/pinctrl/mediatek/mtk-eint.c b/drivers/pinctrl/mediatek/mtk-eint.c
index f7b54a551764..c24583bffa99 100644
--- a/drivers/pinctrl/mediatek/mtk-eint.c
+++ b/drivers/pinctrl/mediatek/mtk-eint.c
@@ -287,12 +287,15 @@ static struct irq_chip mtk_eint_irq_chip = {
 
 static unsigned int mtk_eint_hw_init(struct mtk_eint *eint)
 {
-	void __iomem *reg = eint->base + eint->regs->dom_en;
+	void __iomem *dom_en = eint->base + eint->regs->dom_en;
+	void __iomem *mask_set = eint->base + eint->regs->mask_set;
 	unsigned int i;
 
 	for (i = 0; i < eint->hw->ap_num; i += 32) {
-		writel(0xffffffff, reg);
-		reg += 4;
+		writel(0xffffffff, dom_en);
+		writel(0xffffffff, mask_set);
+		dom_en += 4;
+		mask_set += 4;
 	}
 
 	return 0;
-- 
2.35.1



From sashal at kernel.org  Tue Dec  6 01:49:47 2022
From: sashal at kernel.org (Sasha Levin)
Date: Tue,  6 Dec 2022 04:49:47 -0500
Subject: [PATCH AUTOSEL 5.15 05/12] pinctrl: meditatek: Startup with the IRQs disabled
In-Reply-To: <20221206094955.987437-1-sashal@kernel.org>
References: <20221206094955.987437-1-sashal@kernel.org>
Message-ID: <20221206094955.987437-5-sashal@kernel.org>

From: Ricardo Ribalda <ribalda at chromium.org>

[ Upstream commit 11780e37565db4dd064d3243ca68f755c13f65b4 ]

If the system is restarted via kexec(), the peripherals do not start
with a known state.

If the previous system had enabled an IRQs we will receive unexected
IRQs that can lock the system.

[   28.109251] watchdog: BUG: soft lockup - CPU#0 stuck for 26s!
[swapper/0:0]
[   28.109263] Modules linked in:
[   28.109273] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
5.15.79-14458-g4b9edf7b1ac6 #1 9f2e76613148af94acccd64c609a552fb4b4354b
[   28.109284] Hardware name: Google Elm (DT)
[   28.109290] pstate: 40400005 (nZcv daif +PAN -UAO -TCO -DIT -SSBS
		BTYPE=--)
[   28.109298] pc : __do_softirq+0xa0/0x388
[   28.109309] lr : __do_softirq+0x70/0x388
[   28.109316] sp : ffffffc008003ee0
[   28.109321] x29: ffffffc008003f00 x28: 000000000000000a x27:
0000000000000080
[   28.109334] x26: 0000000000000001 x25: ffffffefa7b350c0 x24:
ffffffefa7b47480
[   28.109346] x23: ffffffefa7b3d000 x22: 0000000000000000 x21:
ffffffefa7b0fa40
[   28.109358] x20: ffffffefa7b005b0 x19: ffffffefa7b47480 x18:
0000000000065b6b
[   28.109370] x17: ffffffefa749c8b0 x16: 000000000000018c x15:
00000000000001b8
[   28.109382] x14: 00000000000d3b6b x13: 0000000000000006 x12:
0000000000057e91
[   28.109394] x11: 0000000000000000 x10: 0000000000000000 x9 :
ffffffefa7b47480
[   28.109406] x8 : 00000000000000e0 x7 : 000000000f424000 x6 :
0000000000000000
[   28.109418] x5 : ffffffefa7dfaca0 x4 : ffffffefa7dfadf0 x3 :
000000000000000f
[   28.109429] x2 : 0000000000000000 x1 : 0000000000000100 x0 :
0000000001ac65c5
[   28.109441] Call trace:
[   28.109447]  __do_softirq+0xa0/0x388
[   28.109454]  irq_exit+0xc0/0xe0
[   28.109464]  handle_domain_irq+0x68/0x90
[   28.109473]  gic_handle_irq+0xac/0xf0
[   28.109480]  call_on_irq_stack+0x28/0x50
[   28.109488]  do_interrupt_handler+0x44/0x58
[   28.109496]  el1_interrupt+0x30/0x58
[   28.109506]  el1h_64_irq_handler+0x18/0x24
[   28.109512]  el1h_64_irq+0x7c/0x80
[   28.109519]  arch_local_irq_enable+0xc/0x18
[   28.109529]  default_idle_call+0x40/0x140
[   28.109539]  do_idle+0x108/0x290
[   28.109547]  cpu_startup_entry+0x2c/0x30
[   28.109554]  rest_init+0xe8/0xf8
[   28.109562]  arch_call_rest_init+0x18/0x24
[   28.109571]  start_kernel+0x338/0x42c
[   28.109578]  __primary_switched+0xbc/0xc4
[   28.109588] Kernel panic - not syncing: softlockup: hung tasks

Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
Link: https://lore.kernel.org/r/20221122-mtk-pinctrl-v1-1-bedf5655a3d2 at chromium.org
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>
Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/pinctrl/mediatek/mtk-eint.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/pinctrl/mediatek/mtk-eint.c b/drivers/pinctrl/mediatek/mtk-eint.c
index f7b54a551764..c24583bffa99 100644
--- a/drivers/pinctrl/mediatek/mtk-eint.c
+++ b/drivers/pinctrl/mediatek/mtk-eint.c
@@ -287,12 +287,15 @@ static struct irq_chip mtk_eint_irq_chip = {
 
 static unsigned int mtk_eint_hw_init(struct mtk_eint *eint)
 {
-	void __iomem *reg = eint->base + eint->regs->dom_en;
+	void __iomem *dom_en = eint->base + eint->regs->dom_en;
+	void __iomem *mask_set = eint->base + eint->regs->mask_set;
 	unsigned int i;
 
 	for (i = 0; i < eint->hw->ap_num; i += 32) {
-		writel(0xffffffff, reg);
-		reg += 4;
+		writel(0xffffffff, dom_en);
+		writel(0xffffffff, mask_set);
+		dom_en += 4;
+		mask_set += 4;
 	}
 
 	return 0;
-- 
2.35.1



From sashal at kernel.org  Tue Dec  6 01:50:22 2022
From: sashal at kernel.org (Sasha Levin)
Date: Tue,  6 Dec 2022 04:50:22 -0500
Subject: [PATCH AUTOSEL 5.10 05/10] pinctrl: meditatek: Startup with the IRQs disabled
In-Reply-To: <20221206095027.987587-1-sashal@kernel.org>
References: <20221206095027.987587-1-sashal@kernel.org>
Message-ID: <20221206095027.987587-5-sashal@kernel.org>

From: Ricardo Ribalda <ribalda at chromium.org>

[ Upstream commit 11780e37565db4dd064d3243ca68f755c13f65b4 ]

If the system is restarted via kexec(), the peripherals do not start
with a known state.

If the previous system had enabled an IRQs we will receive unexected
IRQs that can lock the system.

[   28.109251] watchdog: BUG: soft lockup - CPU#0 stuck for 26s!
[swapper/0:0]
[   28.109263] Modules linked in:
[   28.109273] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
5.15.79-14458-g4b9edf7b1ac6 #1 9f2e76613148af94acccd64c609a552fb4b4354b
[   28.109284] Hardware name: Google Elm (DT)
[   28.109290] pstate: 40400005 (nZcv daif +PAN -UAO -TCO -DIT -SSBS
		BTYPE=--)
[   28.109298] pc : __do_softirq+0xa0/0x388
[   28.109309] lr : __do_softirq+0x70/0x388
[   28.109316] sp : ffffffc008003ee0
[   28.109321] x29: ffffffc008003f00 x28: 000000000000000a x27:
0000000000000080
[   28.109334] x26: 0000000000000001 x25: ffffffefa7b350c0 x24:
ffffffefa7b47480
[   28.109346] x23: ffffffefa7b3d000 x22: 0000000000000000 x21:
ffffffefa7b0fa40
[   28.109358] x20: ffffffefa7b005b0 x19: ffffffefa7b47480 x18:
0000000000065b6b
[   28.109370] x17: ffffffefa749c8b0 x16: 000000000000018c x15:
00000000000001b8
[   28.109382] x14: 00000000000d3b6b x13: 0000000000000006 x12:
0000000000057e91
[   28.109394] x11: 0000000000000000 x10: 0000000000000000 x9 :
ffffffefa7b47480
[   28.109406] x8 : 00000000000000e0 x7 : 000000000f424000 x6 :
0000000000000000
[   28.109418] x5 : ffffffefa7dfaca0 x4 : ffffffefa7dfadf0 x3 :
000000000000000f
[   28.109429] x2 : 0000000000000000 x1 : 0000000000000100 x0 :
0000000001ac65c5
[   28.109441] Call trace:
[   28.109447]  __do_softirq+0xa0/0x388
[   28.109454]  irq_exit+0xc0/0xe0
[   28.109464]  handle_domain_irq+0x68/0x90
[   28.109473]  gic_handle_irq+0xac/0xf0
[   28.109480]  call_on_irq_stack+0x28/0x50
[   28.109488]  do_interrupt_handler+0x44/0x58
[   28.109496]  el1_interrupt+0x30/0x58
[   28.109506]  el1h_64_irq_handler+0x18/0x24
[   28.109512]  el1h_64_irq+0x7c/0x80
[   28.109519]  arch_local_irq_enable+0xc/0x18
[   28.109529]  default_idle_call+0x40/0x140
[   28.109539]  do_idle+0x108/0x290
[   28.109547]  cpu_startup_entry+0x2c/0x30
[   28.109554]  rest_init+0xe8/0xf8
[   28.109562]  arch_call_rest_init+0x18/0x24
[   28.109571]  start_kernel+0x338/0x42c
[   28.109578]  __primary_switched+0xbc/0xc4
[   28.109588] Kernel panic - not syncing: softlockup: hung tasks

Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
Link: https://lore.kernel.org/r/20221122-mtk-pinctrl-v1-1-bedf5655a3d2 at chromium.org
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>
Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/pinctrl/mediatek/mtk-eint.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/pinctrl/mediatek/mtk-eint.c b/drivers/pinctrl/mediatek/mtk-eint.c
index 22736f60c16c..64a32d3ca481 100644
--- a/drivers/pinctrl/mediatek/mtk-eint.c
+++ b/drivers/pinctrl/mediatek/mtk-eint.c
@@ -278,12 +278,15 @@ static struct irq_chip mtk_eint_irq_chip = {
 
 static unsigned int mtk_eint_hw_init(struct mtk_eint *eint)
 {
-	void __iomem *reg = eint->base + eint->regs->dom_en;
+	void __iomem *dom_en = eint->base + eint->regs->dom_en;
+	void __iomem *mask_set = eint->base + eint->regs->mask_set;
 	unsigned int i;
 
 	for (i = 0; i < eint->hw->ap_num; i += 32) {
-		writel(0xffffffff, reg);
-		reg += 4;
+		writel(0xffffffff, dom_en);
+		writel(0xffffffff, mask_set);
+		dom_en += 4;
+		mask_set += 4;
 	}
 
 	return 0;
-- 
2.35.1



From sashal at kernel.org  Tue Dec  6 01:50:52 2022
From: sashal at kernel.org (Sasha Levin)
Date: Tue,  6 Dec 2022 04:50:52 -0500
Subject: [PATCH AUTOSEL 5.4 2/5] pinctrl: meditatek: Startup with the IRQs disabled
In-Reply-To: <20221206095055.987728-1-sashal@kernel.org>
References: <20221206095055.987728-1-sashal@kernel.org>
Message-ID: <20221206095055.987728-2-sashal@kernel.org>

From: Ricardo Ribalda <ribalda at chromium.org>

[ Upstream commit 11780e37565db4dd064d3243ca68f755c13f65b4 ]

If the system is restarted via kexec(), the peripherals do not start
with a known state.

If the previous system had enabled an IRQs we will receive unexected
IRQs that can lock the system.

[   28.109251] watchdog: BUG: soft lockup - CPU#0 stuck for 26s!
[swapper/0:0]
[   28.109263] Modules linked in:
[   28.109273] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
5.15.79-14458-g4b9edf7b1ac6 #1 9f2e76613148af94acccd64c609a552fb4b4354b
[   28.109284] Hardware name: Google Elm (DT)
[   28.109290] pstate: 40400005 (nZcv daif +PAN -UAO -TCO -DIT -SSBS
		BTYPE=--)
[   28.109298] pc : __do_softirq+0xa0/0x388
[   28.109309] lr : __do_softirq+0x70/0x388
[   28.109316] sp : ffffffc008003ee0
[   28.109321] x29: ffffffc008003f00 x28: 000000000000000a x27:
0000000000000080
[   28.109334] x26: 0000000000000001 x25: ffffffefa7b350c0 x24:
ffffffefa7b47480
[   28.109346] x23: ffffffefa7b3d000 x22: 0000000000000000 x21:
ffffffefa7b0fa40
[   28.109358] x20: ffffffefa7b005b0 x19: ffffffefa7b47480 x18:
0000000000065b6b
[   28.109370] x17: ffffffefa749c8b0 x16: 000000000000018c x15:
00000000000001b8
[   28.109382] x14: 00000000000d3b6b x13: 0000000000000006 x12:
0000000000057e91
[   28.109394] x11: 0000000000000000 x10: 0000000000000000 x9 :
ffffffefa7b47480
[   28.109406] x8 : 00000000000000e0 x7 : 000000000f424000 x6 :
0000000000000000
[   28.109418] x5 : ffffffefa7dfaca0 x4 : ffffffefa7dfadf0 x3 :
000000000000000f
[   28.109429] x2 : 0000000000000000 x1 : 0000000000000100 x0 :
0000000001ac65c5
[   28.109441] Call trace:
[   28.109447]  __do_softirq+0xa0/0x388
[   28.109454]  irq_exit+0xc0/0xe0
[   28.109464]  handle_domain_irq+0x68/0x90
[   28.109473]  gic_handle_irq+0xac/0xf0
[   28.109480]  call_on_irq_stack+0x28/0x50
[   28.109488]  do_interrupt_handler+0x44/0x58
[   28.109496]  el1_interrupt+0x30/0x58
[   28.109506]  el1h_64_irq_handler+0x18/0x24
[   28.109512]  el1h_64_irq+0x7c/0x80
[   28.109519]  arch_local_irq_enable+0xc/0x18
[   28.109529]  default_idle_call+0x40/0x140
[   28.109539]  do_idle+0x108/0x290
[   28.109547]  cpu_startup_entry+0x2c/0x30
[   28.109554]  rest_init+0xe8/0xf8
[   28.109562]  arch_call_rest_init+0x18/0x24
[   28.109571]  start_kernel+0x338/0x42c
[   28.109578]  __primary_switched+0xbc/0xc4
[   28.109588] Kernel panic - not syncing: softlockup: hung tasks

Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
Link: https://lore.kernel.org/r/20221122-mtk-pinctrl-v1-1-bedf5655a3d2 at chromium.org
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>
Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/pinctrl/mediatek/mtk-eint.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/pinctrl/mediatek/mtk-eint.c b/drivers/pinctrl/mediatek/mtk-eint.c
index 7e526bcf5e0b..24502dfeb83f 100644
--- a/drivers/pinctrl/mediatek/mtk-eint.c
+++ b/drivers/pinctrl/mediatek/mtk-eint.c
@@ -277,12 +277,15 @@ static struct irq_chip mtk_eint_irq_chip = {
 
 static unsigned int mtk_eint_hw_init(struct mtk_eint *eint)
 {
-	void __iomem *reg = eint->base + eint->regs->dom_en;
+	void __iomem *dom_en = eint->base + eint->regs->dom_en;
+	void __iomem *mask_set = eint->base + eint->regs->mask_set;
 	unsigned int i;
 
 	for (i = 0; i < eint->hw->ap_num; i += 32) {
-		writel(0xffffffff, reg);
-		reg += 4;
+		writel(0xffffffff, dom_en);
+		writel(0xffffffff, mask_set);
+		dom_en += 4;
+		mask_set += 4;
 	}
 
 	return 0;
-- 
2.35.1



From sashal at kernel.org  Tue Dec  6 01:51:08 2022
From: sashal at kernel.org (Sasha Levin)
Date: Tue,  6 Dec 2022 04:51:08 -0500
Subject: [PATCH AUTOSEL 4.19 2/5] pinctrl: meditatek: Startup with the IRQs disabled
In-Reply-To: <20221206095112.987799-1-sashal@kernel.org>
References: <20221206095112.987799-1-sashal@kernel.org>
Message-ID: <20221206095112.987799-2-sashal@kernel.org>

From: Ricardo Ribalda <ribalda at chromium.org>

[ Upstream commit 11780e37565db4dd064d3243ca68f755c13f65b4 ]

If the system is restarted via kexec(), the peripherals do not start
with a known state.

If the previous system had enabled an IRQs we will receive unexected
IRQs that can lock the system.

[   28.109251] watchdog: BUG: soft lockup - CPU#0 stuck for 26s!
[swapper/0:0]
[   28.109263] Modules linked in:
[   28.109273] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
5.15.79-14458-g4b9edf7b1ac6 #1 9f2e76613148af94acccd64c609a552fb4b4354b
[   28.109284] Hardware name: Google Elm (DT)
[   28.109290] pstate: 40400005 (nZcv daif +PAN -UAO -TCO -DIT -SSBS
		BTYPE=--)
[   28.109298] pc : __do_softirq+0xa0/0x388
[   28.109309] lr : __do_softirq+0x70/0x388
[   28.109316] sp : ffffffc008003ee0
[   28.109321] x29: ffffffc008003f00 x28: 000000000000000a x27:
0000000000000080
[   28.109334] x26: 0000000000000001 x25: ffffffefa7b350c0 x24:
ffffffefa7b47480
[   28.109346] x23: ffffffefa7b3d000 x22: 0000000000000000 x21:
ffffffefa7b0fa40
[   28.109358] x20: ffffffefa7b005b0 x19: ffffffefa7b47480 x18:
0000000000065b6b
[   28.109370] x17: ffffffefa749c8b0 x16: 000000000000018c x15:
00000000000001b8
[   28.109382] x14: 00000000000d3b6b x13: 0000000000000006 x12:
0000000000057e91
[   28.109394] x11: 0000000000000000 x10: 0000000000000000 x9 :
ffffffefa7b47480
[   28.109406] x8 : 00000000000000e0 x7 : 000000000f424000 x6 :
0000000000000000
[   28.109418] x5 : ffffffefa7dfaca0 x4 : ffffffefa7dfadf0 x3 :
000000000000000f
[   28.109429] x2 : 0000000000000000 x1 : 0000000000000100 x0 :
0000000001ac65c5
[   28.109441] Call trace:
[   28.109447]  __do_softirq+0xa0/0x388
[   28.109454]  irq_exit+0xc0/0xe0
[   28.109464]  handle_domain_irq+0x68/0x90
[   28.109473]  gic_handle_irq+0xac/0xf0
[   28.109480]  call_on_irq_stack+0x28/0x50
[   28.109488]  do_interrupt_handler+0x44/0x58
[   28.109496]  el1_interrupt+0x30/0x58
[   28.109506]  el1h_64_irq_handler+0x18/0x24
[   28.109512]  el1h_64_irq+0x7c/0x80
[   28.109519]  arch_local_irq_enable+0xc/0x18
[   28.109529]  default_idle_call+0x40/0x140
[   28.109539]  do_idle+0x108/0x290
[   28.109547]  cpu_startup_entry+0x2c/0x30
[   28.109554]  rest_init+0xe8/0xf8
[   28.109562]  arch_call_rest_init+0x18/0x24
[   28.109571]  start_kernel+0x338/0x42c
[   28.109578]  __primary_switched+0xbc/0xc4
[   28.109588] Kernel panic - not syncing: softlockup: hung tasks

Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
Link: https://lore.kernel.org/r/20221122-mtk-pinctrl-v1-1-bedf5655a3d2 at chromium.org
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>
Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/pinctrl/mediatek/mtk-eint.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/pinctrl/mediatek/mtk-eint.c b/drivers/pinctrl/mediatek/mtk-eint.c
index 564cfaee129d..55e3305ede81 100644
--- a/drivers/pinctrl/mediatek/mtk-eint.c
+++ b/drivers/pinctrl/mediatek/mtk-eint.c
@@ -277,12 +277,15 @@ static struct irq_chip mtk_eint_irq_chip = {
 
 static unsigned int mtk_eint_hw_init(struct mtk_eint *eint)
 {
-	void __iomem *reg = eint->base + eint->regs->dom_en;
+	void __iomem *dom_en = eint->base + eint->regs->dom_en;
+	void __iomem *mask_set = eint->base + eint->regs->mask_set;
 	unsigned int i;
 
 	for (i = 0; i < eint->hw->ap_num; i += 32) {
-		writel(0xffffffff, reg);
-		reg += 4;
+		writel(0xffffffff, dom_en);
+		writel(0xffffffff, mask_set);
+		dom_en += 4;
+		mask_set += 4;
 	}
 
 	return 0;
-- 
2.35.1



From Xiangsheng.Hou at mediatek.com  Tue Dec  6 01:04:39 2022
From: Xiangsheng.Hou at mediatek.com (=?utf-8?B?WGlhbmdzaGVuZyBIb3UgKOS+r+elpeiDnCk=?=)
Date: Tue, 6 Dec 2022 09:04:39 +0000
Subject: [PATCH v2 4/9] mtd: nand: ecc-mtk: Add ECC support fot MT7986 IC
In-Reply-To: <50ede482-7f03-ff55-5ad0-aa6249027cbe@collabora.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
	 <20221205065756.26875-5-xiangsheng.hou@mediatek.com>
	 <50ede482-7f03-ff55-5ad0-aa6249027cbe@collabora.com>
Message-ID: <149100d0dc205a317ed352cdfb391f2147a2afab.camel@mediatek.com>

Hi Angelo,

On Mon, 2022-12-05 at 15:21 +0100, AngeloGioacchino Del Regno wrote:
> Il 05/12/22 07:57, Xiangsheng Hou ha scritto:
> > Add ECC support fot MT7986 IC.
> > 
> > Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> > ---
> >   drivers/mtd/nand/ecc-mtk.c | 18 ++++++++++++++++++
> >   1 file changed, 18 insertions(+)
> > 
> > diff --git a/drivers/mtd/nand/ecc-mtk.c b/drivers/mtd/nand/ecc-
> > mtk.c
> > index 9f9b201fe706..c2f6cfa76a04 100644
> > --- a/drivers/mtd/nand/ecc-mtk.c
> > +++ b/drivers/mtd/nand/ecc-mtk.c
> > @@ -79,6 +79,10 @@ static const u8 ecc_strength_mt7622[] = {
> >   	4, 6, 8, 10, 12
> >   };
> >   
> > +static const u8 ecc_strength_mt7986[] = {
> > +	4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24
> > +};
> > +
> >   enum mtk_ecc_regs {
> >   	ECC_ENCPAR00,
> >   	ECC_ENCIRQ_EN,
> > @@ -483,6 +487,17 @@ static const struct mtk_ecc_caps
> > mtk_ecc_caps_mt7622 = {
> >   	.pg_irq_sel = 0,
> >   };
> >   
> > +static const struct mtk_ecc_caps mtk_ecc_caps_mt7986 = {
> > +	.err_mask = 0x1f,
> 
> Can't we use GENMASK() to define err_mask instead?
> 
> #define MT7986_ERRNUM	GENMASK(4, 0)
> 
> P.S.: Did I get that right? Is that referred to the ERRNUM(x) bits

Yes, you are right.
I will change like
#define ECC_ERRMASK(x) GENMASK(x, 0),
since other IC driver data will use 0x3f and 0x7f err_mask.


Thanks
Xiangsheng Hou

From angelogioacchino.delregno at collabora.com  Tue Dec  6 03:23:25 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue,  6 Dec 2022 12:23:25 +0100
Subject: [PATCH 0/5] Add CPU caches information for some MediaTek SoCs
Message-ID: <20221206112330.78431-1-angelogioacchino.delregno@collabora.com>

In devicetrees for MediaTek SoCs the CPU caches information, if
present, is incomplete as it misses cache size, cache line size
and number of cache sets which, in turn, will also prevent any
cache associativity calculation.

For all of the SoCs that I know and/or I have information for,
I've added the right information for I/D, L2 and L3 where present.
This will also make the cacheinfo driver to correctly export the
CPU cache information to sysfs.

AngeloGioacchino Del Regno (5):
  arm64: dts: mt8195: Add complete CPU caches information
  arm64: dts: mt8192: Add complete CPU caches information
  arm64: dts: mt8186: Add complete CPU caches information
  arm64: dts: mt8183: Add complete CPU caches information
  arm64: dts: mt6795: Add complete CPU caches information

 arch/arm64/boot/dts/mediatek/mt6795.dtsi | 50 ++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt8183.dtsi | 74 ++++++++++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt8186.dtsi | 58 +++++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt8192.dtsi | 58 +++++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt8195.dtsi | 58 +++++++++++++++++++
 5 files changed, 298 insertions(+)

-- 
2.38.1



From angelogioacchino.delregno at collabora.com  Tue Dec  6 03:23:28 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue,  6 Dec 2022 12:23:28 +0100
Subject: [PATCH 3/5] arm64: dts: mt8186: Add complete CPU caches information
In-Reply-To: <20221206112330.78431-1-angelogioacchino.delregno@collabora.com>
References: <20221206112330.78431-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221206112330.78431-4-angelogioacchino.delregno@collabora.com>

This SoC features two clusters composed of:
 - 6x Cortex A55: 32KB I-cache and 32KB D-cache, 4-way set associative,
                  per-cpu 128KB L2 cache, 4-way set associative;
 - 2x Cortex A76: 64KB I-cache and 64KB D-cache, 4-way set associative,
                  per-cpu 256KB L2 cache, 8-way set associative;
Moreover, the two clusters are sharing a DSU L3 cache with size 1MB,
16-way set associative.

With that in mind, add the appropriate properties needed to specify the
caches information for this SoC, which will now be correctly exported
to sysfs.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 arch/arm64/boot/dts/mediatek/mt8186.dtsi | 58 ++++++++++++++++++++++++
 1 file changed, 58 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8186.dtsi b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
index 4a2f7ad3c6f0..c4a80ce3124c 100644
--- a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
@@ -69,6 +69,12 @@ cpu0: cpu at 0 {
 			clock-frequency = <2000000000>;
 			capacity-dmips-mhz = <382>;
 			cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 		};
@@ -81,6 +87,12 @@ cpu1: cpu at 100 {
 			clock-frequency = <2000000000>;
 			capacity-dmips-mhz = <382>;
 			cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 		};
@@ -93,6 +105,12 @@ cpu2: cpu at 200 {
 			clock-frequency = <2000000000>;
 			capacity-dmips-mhz = <382>;
 			cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 		};
@@ -105,6 +123,12 @@ cpu3: cpu at 300 {
 			clock-frequency = <2000000000>;
 			capacity-dmips-mhz = <382>;
 			cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 		};
@@ -117,6 +141,12 @@ cpu4: cpu at 400 {
 			clock-frequency = <2000000000>;
 			capacity-dmips-mhz = <382>;
 			cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 		};
@@ -129,6 +159,12 @@ cpu5: cpu at 500 {
 			clock-frequency = <2000000000>;
 			capacity-dmips-mhz = <382>;
 			cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 		};
@@ -141,6 +177,12 @@ cpu6: cpu at 600 {
 			clock-frequency = <2050000000>;
 			capacity-dmips-mhz = <1024>;
 			cpu-idle-states = <&cpu_off_b &cluster_off_b>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
 			next-level-cache = <&l2_1>;
 			#cooling-cells = <2>;
 		};
@@ -153,6 +195,12 @@ cpu7: cpu at 700 {
 			clock-frequency = <2050000000>;
 			capacity-dmips-mhz = <1024>;
 			cpu-idle-states = <&cpu_off_b &cluster_off_b>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
 			next-level-cache = <&l2_1>;
 			#cooling-cells = <2>;
 		};
@@ -200,18 +248,28 @@ cluster_off_b: cluster-off-b {
 		l2_0: l2-cache0 {
 			compatible = "cache";
 			cache-level = <2>;
+			cache-size = <131072>;
+			cache-line-size = <64>;
+			cache-sets = <512>;
 			next-level-cache = <&l3_0>;
 		};
 
 		l2_1: l2-cache1 {
 			compatible = "cache";
 			cache-level = <2>;
+			cache-size = <262144>;
+			cache-line-size = <64>;
+			cache-sets = <512>;
 			next-level-cache = <&l3_0>;
 		};
 
 		l3_0: l3-cache {
 			compatible = "cache";
 			cache-level = <3>;
+			cache-size = <1048576>;
+			cache-line-size = <64>;
+			cache-sets = <1024>;
+			cache-unified;
 		};
 	};
 
-- 
2.38.1



From angelogioacchino.delregno at collabora.com  Tue Dec  6 03:23:27 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue,  6 Dec 2022 12:23:27 +0100
Subject: [PATCH 2/5] arm64: dts: mt8192: Add complete CPU caches information
In-Reply-To: <20221206112330.78431-1-angelogioacchino.delregno@collabora.com>
References: <20221206112330.78431-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221206112330.78431-3-angelogioacchino.delregno@collabora.com>

This SoC features two clusters composed of:
 - 4x Cortex A55: 32KB I-cache and 32KB D-cache, 4-way set associative,
                  per-cpu 128KB L2 cache, 4-way set associative;
 - 4x Cortex A76: 64KB I-cache and 64KB D-cache, 4-way set associative,
                  per-cpu 256KB L2 cache, 8-way set associative;
Moreover, the two clusters are sharing a DSU L3 cache with size 2MB,
16-way set associative.

With that in mind, add the appropriate properties needed to specify the
caches information for this SoC, which will now be correctly exported
to sysfs.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 arch/arm64/boot/dts/mediatek/mt8192.dtsi | 58 ++++++++++++++++++++++++
 1 file changed, 58 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
index 424fc89cc6f7..3b5d49bf174d 100644
--- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
@@ -54,6 +54,12 @@ cpu0: cpu at 0 {
 			enable-method = "psci";
 			clock-frequency = <1701000000>;
 			cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			capacity-dmips-mhz = <530>;
 		};
@@ -65,6 +71,12 @@ cpu1: cpu at 100 {
 			enable-method = "psci";
 			clock-frequency = <1701000000>;
 			cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			capacity-dmips-mhz = <530>;
 		};
@@ -76,6 +88,12 @@ cpu2: cpu at 200 {
 			enable-method = "psci";
 			clock-frequency = <1701000000>;
 			cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			capacity-dmips-mhz = <530>;
 		};
@@ -87,6 +105,12 @@ cpu3: cpu at 300 {
 			enable-method = "psci";
 			clock-frequency = <1701000000>;
 			cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			capacity-dmips-mhz = <530>;
 		};
@@ -98,6 +122,12 @@ cpu4: cpu at 400 {
 			enable-method = "psci";
 			clock-frequency = <2171000000>;
 			cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
 			next-level-cache = <&l2_1>;
 			capacity-dmips-mhz = <1024>;
 		};
@@ -109,6 +139,12 @@ cpu5: cpu at 500 {
 			enable-method = "psci";
 			clock-frequency = <2171000000>;
 			cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
 			next-level-cache = <&l2_1>;
 			capacity-dmips-mhz = <1024>;
 		};
@@ -120,6 +156,12 @@ cpu6: cpu at 600 {
 			enable-method = "psci";
 			clock-frequency = <2171000000>;
 			cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
 			next-level-cache = <&l2_1>;
 			capacity-dmips-mhz = <1024>;
 		};
@@ -131,6 +173,12 @@ cpu7: cpu at 700 {
 			enable-method = "psci";
 			clock-frequency = <2171000000>;
 			cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
 			next-level-cache = <&l2_1>;
 			capacity-dmips-mhz = <1024>;
 		};
@@ -170,18 +218,28 @@ core3 {
 		l2_0: l2-cache0 {
 			compatible = "cache";
 			cache-level = <2>;
+			cache-size = <131072>;
+			cache-line-size = <64>;
+			cache-sets = <512>;
 			next-level-cache = <&l3_0>;
 		};
 
 		l2_1: l2-cache1 {
 			compatible = "cache";
 			cache-level = <2>;
+			cache-size = <262144>;
+			cache-line-size = <64>;
+			cache-sets = <512>;
 			next-level-cache = <&l3_0>;
 		};
 
 		l3_0: l3-cache {
 			compatible = "cache";
 			cache-level = <3>;
+			cache-size = <2097152>;
+			cache-line-size = <64>;
+			cache-sets = <2048>;
+			cache-unified;
 		};
 
 		idle-states {
-- 
2.38.1



From angelogioacchino.delregno at collabora.com  Tue Dec  6 03:23:26 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue,  6 Dec 2022 12:23:26 +0100
Subject: [PATCH 1/5] arm64: dts: mt8195: Add complete CPU caches information
In-Reply-To: <20221206112330.78431-1-angelogioacchino.delregno@collabora.com>
References: <20221206112330.78431-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221206112330.78431-2-angelogioacchino.delregno@collabora.com>

This SoC features two clusters composed of:
 - 4x Cortex A55: 32KB I-cache and 32KB D-cache, 4-way set associative,
                  per-cpu 128KB L2 cache, 4-way set associative;
 - 4x Cortex A78: 64KB I-cache and 64KB D-cache, 4-way set associative,
                  per-cpu 256KB L2 cache, 8-way set associative;
Moreover, the two clusters are sharing a DSU L3 cache with size 2MB,
16-way set associative.

With that in mind, add the appropriate properties needed to specify the
caches information for this SoC, which will now be correctly exported
to sysfs.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 arch/arm64/boot/dts/mediatek/mt8195.dtsi | 58 ++++++++++++++++++++++++
 1 file changed, 58 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index 5d31536f4c48..539c49324d64 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -39,6 +39,12 @@ cpu0: cpu at 0 {
 			clock-frequency = <1701000000>;
 			capacity-dmips-mhz = <308>;
 			cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 		};
@@ -52,6 +58,12 @@ cpu1: cpu at 100 {
 			clock-frequency = <1701000000>;
 			capacity-dmips-mhz = <308>;
 			cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 		};
@@ -65,6 +77,12 @@ cpu2: cpu at 200 {
 			clock-frequency = <1701000000>;
 			capacity-dmips-mhz = <308>;
 			cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 		};
@@ -78,6 +96,12 @@ cpu3: cpu at 300 {
 			clock-frequency = <1701000000>;
 			capacity-dmips-mhz = <308>;
 			cpu-idle-states = <&cpu_off_l &cluster_off_l>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <128>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 		};
@@ -91,6 +115,12 @@ cpu4: cpu at 400 {
 			clock-frequency = <2171000000>;
 			capacity-dmips-mhz = <1024>;
 			cpu-idle-states = <&cpu_off_b &cluster_off_b>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
 			next-level-cache = <&l2_1>;
 			#cooling-cells = <2>;
 		};
@@ -104,6 +134,12 @@ cpu5: cpu at 500 {
 			clock-frequency = <2171000000>;
 			capacity-dmips-mhz = <1024>;
 			cpu-idle-states = <&cpu_off_b &cluster_off_b>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
 			next-level-cache = <&l2_1>;
 			#cooling-cells = <2>;
 		};
@@ -117,6 +153,12 @@ cpu6: cpu at 600 {
 			clock-frequency = <2171000000>;
 			capacity-dmips-mhz = <1024>;
 			cpu-idle-states = <&cpu_off_b &cluster_off_b>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
 			next-level-cache = <&l2_1>;
 			#cooling-cells = <2>;
 		};
@@ -130,6 +172,12 @@ cpu7: cpu at 700 {
 			clock-frequency = <2171000000>;
 			capacity-dmips-mhz = <1024>;
 			cpu-idle-states = <&cpu_off_b &cluster_off_b>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
 			next-level-cache = <&l2_1>;
 			#cooling-cells = <2>;
 		};
@@ -215,18 +263,28 @@ cluster_off_b: cluster-off-b {
 		l2_0: l2-cache0 {
 			compatible = "cache";
 			cache-level = <2>;
+			cache-size = <131072>;
+			cache-line-size = <64>;
+			cache-sets = <512>;
 			next-level-cache = <&l3_0>;
 		};
 
 		l2_1: l2-cache1 {
 			compatible = "cache";
 			cache-level = <2>;
+			cache-size = <262144>;
+			cache-line-size = <64>;
+			cache-sets = <512>;
 			next-level-cache = <&l3_0>;
 		};
 
 		l3_0: l3-cache {
 			compatible = "cache";
 			cache-level = <3>;
+			cache-size = <2097152>;
+			cache-line-size = <64>;
+			cache-sets = <2048>;
+			cache-unified;
 		};
 	};
 
-- 
2.38.1



From angelogioacchino.delregno at collabora.com  Tue Dec  6 03:23:29 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue,  6 Dec 2022 12:23:29 +0100
Subject: [PATCH 4/5] arm64: dts: mt8183: Add complete CPU caches information
In-Reply-To: <20221206112330.78431-1-angelogioacchino.delregno@collabora.com>
References: <20221206112330.78431-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221206112330.78431-5-angelogioacchino.delregno@collabora.com>

This SoC features two clusters composed of:
 - 4x Cortex A53: 32KB I-cache, 2-way set associative,
                  32KB D-cache, 4-way set associative,
                  unified 1MB L2 cache, 16-way set associative;
 - 4x Cortex A73: 64KB I-cache and 64KB D-cache, 4-way set associative,
                  unified 1MB L2 cache, 16-way set associative;

With that in mind, add the appropriate properties needed to specify the
caches information for this SoC, which will now be correctly exported
to sysfs.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 arch/arm64/boot/dts/mediatek/mt8183.dtsi | 74 ++++++++++++++++++++++++
 1 file changed, 74 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8183.dtsi b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
index a70b669c49ba..12f61cd20da5 100644
--- a/arch/arm64/boot/dts/mediatek/mt8183.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
@@ -336,6 +336,13 @@ cpu0: cpu at 0 {
 			clock-names = "cpu", "intermediate";
 			operating-points-v2 = <&cluster0_opp>;
 			dynamic-power-coefficient = <84>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
+			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 			mediatek,cci = <&cci>;
 		};
@@ -352,6 +359,13 @@ cpu1: cpu at 1 {
 			clock-names = "cpu", "intermediate";
 			operating-points-v2 = <&cluster0_opp>;
 			dynamic-power-coefficient = <84>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
+			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 			mediatek,cci = <&cci>;
 		};
@@ -368,6 +382,13 @@ cpu2: cpu at 2 {
 			clock-names = "cpu", "intermediate";
 			operating-points-v2 = <&cluster0_opp>;
 			dynamic-power-coefficient = <84>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
+			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 			mediatek,cci = <&cci>;
 		};
@@ -384,6 +405,13 @@ cpu3: cpu at 3 {
 			clock-names = "cpu", "intermediate";
 			operating-points-v2 = <&cluster0_opp>;
 			dynamic-power-coefficient = <84>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
+			next-level-cache = <&l2_0>;
 			#cooling-cells = <2>;
 			mediatek,cci = <&cci>;
 		};
@@ -400,6 +428,13 @@ cpu4: cpu at 100 {
 			clock-names = "cpu", "intermediate";
 			operating-points-v2 = <&cluster1_opp>;
 			dynamic-power-coefficient = <211>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
+			next-level-cache = <&l2_1>;
 			#cooling-cells = <2>;
 			mediatek,cci = <&cci>;
 		};
@@ -416,6 +451,13 @@ cpu5: cpu at 101 {
 			clock-names = "cpu", "intermediate";
 			operating-points-v2 = <&cluster1_opp>;
 			dynamic-power-coefficient = <211>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
+			next-level-cache = <&l2_1>;
 			#cooling-cells = <2>;
 			mediatek,cci = <&cci>;
 		};
@@ -432,6 +474,13 @@ cpu6: cpu at 102 {
 			clock-names = "cpu", "intermediate";
 			operating-points-v2 = <&cluster1_opp>;
 			dynamic-power-coefficient = <211>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
+			next-level-cache = <&l2_1>;
 			#cooling-cells = <2>;
 			mediatek,cci = <&cci>;
 		};
@@ -448,6 +497,13 @@ cpu7: cpu at 103 {
 			clock-names = "cpu", "intermediate";
 			operating-points-v2 = <&cluster1_opp>;
 			dynamic-power-coefficient = <211>;
+			i-cache-size = <65536>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <65536>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
+			next-level-cache = <&l2_1>;
 			#cooling-cells = <2>;
 			mediatek,cci = <&cci>;
 		};
@@ -481,6 +537,24 @@ CLUSTER_SLEEP1: cluster-sleep-1 {
 				min-residency-us = <1300>;
 			};
 		};
+
+		l2_0: l2-cache0 {
+			compatible = "cache";
+			cache-level = <2>;
+			cache-size = <1048576>;
+			cache-line-size = <64>;
+			cache-sets = <1024>;
+			cache-unified;
+		};
+
+		l2_1: l2-cache1 {
+			compatible = "cache";
+			cache-level = <2>;
+			cache-size = <1048576>;
+			cache-line-size = <64>;
+			cache-sets = <1024>;
+			cache-unified;
+		};
 	};
 
 	gpu_opp_table: opp-table-0 {
-- 
2.38.1



From angelogioacchino.delregno at collabora.com  Tue Dec  6 03:23:30 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue,  6 Dec 2022 12:23:30 +0100
Subject: [PATCH 5/5] arm64: dts: mt6795: Add complete CPU caches information
In-Reply-To: <20221206112330.78431-1-angelogioacchino.delregno@collabora.com>
References: <20221206112330.78431-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221206112330.78431-6-angelogioacchino.delregno@collabora.com>

This SoC's AP subsystem has 8x Cortex-A53 CPUs, specifically,
four CPUs per cluster, with two CPU clusters.

Each CPU has:
 - A 32KB I-cache, 2-way set associative;
 - A 32KB D-cache, 4-way set associative.

Each cluster has a unified 1MB L2 cache, 16-way set associative.

With that in mind, add the appropriate properties needed to specify the
caches information for this SoC, which will now be correctly exported
to sysfs.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 arch/arm64/boot/dts/mediatek/mt6795.dtsi | 50 ++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt6795.dtsi b/arch/arm64/boot/dts/mediatek/mt6795.dtsi
index bb575837e4ce..b3fc76d837a9 100644
--- a/arch/arm64/boot/dts/mediatek/mt6795.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt6795.dtsi
@@ -40,6 +40,12 @@ cpu1: cpu at 1 {
 			enable-method = "psci";
 			reg = <0x001>;
 			cci-control-port = <&cci_control2>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 		};
 
@@ -49,6 +55,12 @@ cpu2: cpu at 2 {
 			enable-method = "psci";
 			reg = <0x002>;
 			cci-control-port = <&cci_control2>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 		};
 
@@ -58,6 +70,12 @@ cpu3: cpu at 3 {
 			enable-method = "psci";
 			reg = <0x003>;
 			cci-control-port = <&cci_control2>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_0>;
 		};
 
@@ -67,6 +85,12 @@ cpu4: cpu at 100 {
 			enable-method = "psci";
 			reg = <0x100>;
 			cci-control-port = <&cci_control1>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_1>;
 		};
 
@@ -76,6 +100,12 @@ cpu5: cpu at 101 {
 			enable-method = "psci";
 			reg = <0x101>;
 			cci-control-port = <&cci_control1>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_1>;
 		};
 
@@ -85,6 +115,12 @@ cpu6: cpu at 102 {
 			enable-method = "psci";
 			reg = <0x102>;
 			cci-control-port = <&cci_control1>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_1>;
 		};
 
@@ -94,6 +130,12 @@ cpu7: cpu at 103 {
 			enable-method = "psci";
 			reg = <0x103>;
 			cci-control-port = <&cci_control1>;
+			i-cache-size = <32768>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <32768>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <128>;
 			next-level-cache = <&l2_1>;
 		};
 
@@ -138,11 +180,19 @@ core3 {
 		l2_0: l2-cache0 {
 			compatible = "cache";
 			cache-level = <2>;
+			cache-size = <1048576>;
+			cache-line-size = <64>;
+			cache-sets = <1024>;
+			cache-unified;
 		};
 
 		l2_1: l2-cache1 {
 			compatible = "cache";
 			cache-level = <2>;
+			cache-size = <1048576>;
+			cache-line-size = <64>;
+			cache-sets = <1024>;
+			cache-unified;
 		};
 	};
 
-- 
2.38.1



From lpieralisi at kernel.org  Tue Dec  6 03:32:27 2022
From: lpieralisi at kernel.org (Lorenzo Pieralisi)
Date: Tue, 6 Dec 2022 12:32:27 +0100
Subject: [next v7 0/8] Add BananaPi R3
In-Reply-To: <20221127114142.156573-1-linux@fw-web.de>
References: <20221127114142.156573-1-linux@fw-web.de>
Message-ID: <Y48oS3+vR4Pv6izh@lpieralisi>

On Sun, Nov 27, 2022 at 12:41:34PM +0100, Frank Wunderlich wrote:
> From: Frank Wunderlich <frank-w at public-files.de>
> 
> This Series adds some Nodes to mt7986 devicetree and the BananaPi R3
> 
> This version is rebased on linux next from 2022/11/27.
> 
> i included sams series for mt7986 DTS with small changes
> https://patchwork.kernel.org/project/linux-mediatek/cover/20220427124741.18245->
> 
> i had run full dtbs-check but i end up with some strange warnings in
> ethernet-node that should not come up as phy-handle and sfp/managed
> properties are already defined. These errors also came up for mt7986a-rfb.
> 
> phy-handle made optional
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/net/mediatek,net.yaml#n265
> 
> property sfp/managed (which is included for mac subnode in yaml above):
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/net/ethernet-controller.yaml#n137
> 
> changes:
> v7:
> - rebase on next so dropped already applied patches
> - squashed overlay-patch into the bpi-r3 base support
> - moved regulators from mmc-dts to common dtsi
> - changed dtsi to dts (as board base dtb) and mmc-dts to overlays
> - renamed overlays to dtso
> - removed angelos RB because of changes in bpi-r3 patch
> 
> v6:
> - dropped regulators from usb-patch as suggested by chunfeng yun
> - moved 3v3 regulator to mmc-patch as it is needed for emmc to work
>   rfbs were tested by sam shih, r3 by me
> - dropped RB from AngeloGioacchino from mmc-patch due to this change
> - fixed links in coverletter which were broken in v5
> - i hope this series is sent without errors now (my mailprovider limited
>   mails last 2 times while sending part 10)
> 
> v5:
> - changed usb ranges/reg/unit-adress
> - added reviewd-by's except usb-part due to changes
> 
> v4:
> - dropped RFC prefix
> - rebase on matthias' mtk dts-next (for 6.2) branch
> - added author information to overlays
> - fixed sfp binding error
> - added fix for moving wed_pcie node
> - readded missing compatible patches
> 
> v3:
> - changed mmc pull-ups
> - added patch for board binding (sent separately before)
> - added pcie node in mt7986 (not yet again in r3)
> - added dt overlays
> 
> Frank Wunderlich (5):
>   dt-bindings: phy: mediatek,tphy: add support for mt7986
>   dt-bindings: usb: mtk-xhci: add support for mt7986
>   dt-bindings: PCI: mediatek-gen3: add SoC based clock config
>   dt-bindings: PCI: mediatek-gen3: add support for mt7986
>   arm64: dts: mt7986: add Bananapi R3
> 
> Sam Shih (3):
>   arm64: dts: mt7986: add usb related device nodes
>   arm64: dts: mt7986: add mmc related device nodes
>   arm64: dts: mt7986: add pcie related device nodes
> 
>  .../bindings/pci/mediatek-pcie-gen3.yaml      |  64 ++-
>  .../bindings/phy/mediatek,tphy.yaml           |   1 +
>  .../bindings/usb/mediatek,mtk-xhci.yaml       |   1 +
>  arch/arm64/boot/dts/mediatek/Makefile         |   5 +
>  .../mt7986a-bananapi-bpi-r3-emmc.dtso         |  30 ++
>  .../mt7986a-bananapi-bpi-r3-nand.dtso         |  55 +++
>  .../mediatek/mt7986a-bananapi-bpi-r3-nor.dtso |  68 +++
>  .../mediatek/mt7986a-bananapi-bpi-r3-sd.dtso  |  24 +
>  .../dts/mediatek/mt7986a-bananapi-bpi-r3.dts  | 448 ++++++++++++++++++
>  arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts  | 120 +++++
>  arch/arm64/boot/dts/mediatek/mt7986a.dtsi     | 122 +++++
>  arch/arm64/boot/dts/mediatek/mt7986b-rfb.dts  |   8 +
>  12 files changed, 934 insertions(+), 12 deletions(-)
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts

Should I pick up patches [3,4] into the PCI tree ?

Thanks,
Lorenzo


From angelogioacchino.delregno at collabora.com  Tue Dec  6 04:19:51 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 6 Dec 2022 13:19:51 +0100
Subject: [PATCH v2 7/9] dt-bindings: spi: mtk-snfi: Add read latch latency
 property
In-Reply-To: <a8f706b37f5decf91bfa9a9ac8cf04be4346dd85.camel@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-8-xiangsheng.hou@mediatek.com>
 <ce449a0c-efcc-0ac1-fb8e-c2b4148a5bc1@collabora.com>
 <a8f706b37f5decf91bfa9a9ac8cf04be4346dd85.camel@mediatek.com>
Message-ID: <9992c9a5-059a-9396-32ce-7ed63cd12a96@collabora.com>

Il 06/12/22 10:04, Xiangsheng Hou (???) ha scritto:
> Hi Angelo,
> 
> On Mon, 2022-12-05 at 15:21 +0100, AngeloGioacchino Del Regno wrote:
>> Il 05/12/22 07:57, Xiangsheng Hou ha scritto:
>>> Add mediatek,rx-latch-latency property which adjust read delay in
>>> the
>>> unit of clock cycle.
>>>
>>> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
>>> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
>>> ---
>>>    .../devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml     | 7
>>> +++++++
>>>    1 file changed, 7 insertions(+)
>>>
>>> diff --git a/Documentation/devicetree/bindings/spi/mediatek,spi-
>>> mtk-snfi.yaml b/Documentation/devicetree/bindings/spi/mediatek,spi-
>>> mtk-snfi.yaml
>>> index bab23f1b11fd..6e6ff8d73fcd 100644
>>> --- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-
>>> snfi.yaml
>>> +++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-
>>> snfi.yaml
>>> @@ -45,6 +45,13 @@ properties:
>>>        description: device-tree node of the accompanying ECC engine.
>>>        $ref: /schemas/types.yaml#/definitions/phandle
>>>    
>>> +  mediatek,rx-latch-latency:
>>> +    description: Rx delay to sample data with this value, the
>>> value
>>> +                 unit is clock cycle.
>>
>> Can't we use nanoseconds or microseconds as a unit here, instead of
>> clock cycles?
> 
> The clock cycle will be various with MediaTek SPI NAND controller which
> clock frequency can support 26/52/68/81/104MHz...
> It`s may be easy to configure and understand with clock cycle in unit.
> 

Yes, but whatever clock frequency we use, the target is to always wait for
X nanoseconds, right?

Waiting for 5 clock cycles at 104MHz is obviously not the same as waiting
for the same 5 clock cycles at 26MHz: in that case, expressing the value
in nanoseconds or microseconds would make that independent from the
controller's clock frequency as the calculation from `time` to `cycles`
would be performed inside of the driver.

Regards,
Angelo



From angelogioacchino.delregno at collabora.com  Tue Dec  6 04:22:04 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 6 Dec 2022 13:22:04 +0100
Subject: [PATCH v2 4/9] mtd: nand: ecc-mtk: Add ECC support fot MT7986 IC
In-Reply-To: <149100d0dc205a317ed352cdfb391f2147a2afab.camel@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-5-xiangsheng.hou@mediatek.com>
 <50ede482-7f03-ff55-5ad0-aa6249027cbe@collabora.com>
 <149100d0dc205a317ed352cdfb391f2147a2afab.camel@mediatek.com>
Message-ID: <b55ee8fa-7ad6-3bf9-4983-41a90bd75ce4@collabora.com>

Il 06/12/22 10:04, Xiangsheng Hou (???) ha scritto:
> Hi Angelo,
> 
> On Mon, 2022-12-05 at 15:21 +0100, AngeloGioacchino Del Regno wrote:
>> Il 05/12/22 07:57, Xiangsheng Hou ha scritto:
>>> Add ECC support fot MT7986 IC.
>>>
>>> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
>>> ---
>>>    drivers/mtd/nand/ecc-mtk.c | 18 ++++++++++++++++++
>>>    1 file changed, 18 insertions(+)
>>>
>>> diff --git a/drivers/mtd/nand/ecc-mtk.c b/drivers/mtd/nand/ecc-
>>> mtk.c
>>> index 9f9b201fe706..c2f6cfa76a04 100644
>>> --- a/drivers/mtd/nand/ecc-mtk.c
>>> +++ b/drivers/mtd/nand/ecc-mtk.c
>>> @@ -79,6 +79,10 @@ static const u8 ecc_strength_mt7622[] = {
>>>    	4, 6, 8, 10, 12
>>>    };
>>>    
>>> +static const u8 ecc_strength_mt7986[] = {
>>> +	4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24
>>> +};
>>> +
>>>    enum mtk_ecc_regs {
>>>    	ECC_ENCPAR00,
>>>    	ECC_ENCIRQ_EN,
>>> @@ -483,6 +487,17 @@ static const struct mtk_ecc_caps
>>> mtk_ecc_caps_mt7622 = {
>>>    	.pg_irq_sel = 0,
>>>    };
>>>    
>>> +static const struct mtk_ecc_caps mtk_ecc_caps_mt7986 = {
>>> +	.err_mask = 0x1f,
>>
>> Can't we use GENMASK() to define err_mask instead?
>>
>> #define MT7986_ERRNUM	GENMASK(4, 0)
>>
>> P.S.: Did I get that right? Is that referred to the ERRNUM(x) bits
> 
> Yes, you are right.
> I will change like
> #define ECC_ERRMASK(x) GENMASK(x, 0),
> since other IC driver data will use 0x3f and 0x7f err_mask.
> 

I would prefer, instead, something like

#define MT7986_ERRNUM	GENMASK(....)
#define MT7622_ERRNUM	GENMASK(....)
#define MT.... (etc)

instead of a macro calling another macro.

Regards,
Angelo




From olteanv at gmail.com  Tue Dec  6 07:18:51 2022
From: olteanv at gmail.com (Vladimir Oltean)
Date: Tue, 6 Dec 2022 17:18:51 +0200
Subject: [PATCH v4 net-next 3/9] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <20221202204559.162619-4-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-4-colin.foster@in-advantage.com>
Message-ID: <20221206151851.hnqqwf6zgaa2c7tb@skbuf>

On Fri, Dec 02, 2022 at 12:45:53PM -0800, Colin Foster wrote:
> DSA switches can fall into one of two categories: switches where all ports
> follow standard '(ethernet-)?port' properties, and switches that have
> additional properties for the ports.
> 
> The scenario where DSA ports are all standardized can be handled by
> swtiches with a reference to the new 'dsa.yaml#/$defs/ethernet-ports'.
> 
> The scenario where DSA ports require additional properties can reference
> '$dsa.yaml#' directly. This will allow switches to reference these standard
> defitions of the DSA switch, but add additional properties under the port
> nodes.
> ---
> diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> index b9d48e357e77..b9e366e46aed 100644
> --- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> @@ -19,9 +19,6 @@ description:
>  select: false
>  
>  properties:
> -  $nodename:
> -    pattern: "^(ethernet-)?switch(@.*)?$"
> -

Does this deletion belong to this patch or to "dt-bindings: net: add
generic ethernet-switch"?

>    dsa,member:
>      minItems: 2
>      maxItems: 2
> @@ -58,4 +55,26 @@ oneOf:
>  
>  additionalProperties: true


From olteanv at gmail.com  Tue Dec  6 07:37:34 2022
From: olteanv at gmail.com (Vladimir Oltean)
Date: Tue, 6 Dec 2022 17:37:34 +0200
Subject: [PATCH v4 net-next 3/9] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <20221202204559.162619-4-colin.foster@in-advantage.com>
 <20221202204559.162619-4-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-4-colin.foster@in-advantage.com>
 <20221202204559.162619-4-colin.foster@in-advantage.com>
Message-ID: <20221206153734.4os4effdzlt2calg@skbuf>

On Fri, Dec 02, 2022 at 12:45:53PM -0800, Colin Foster wrote:
> diff --git a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> index 259a0c6547f3..5888e3a0169a 100644
> --- a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
>  title: Arrow SpeedChips XRS7000 Series Switch Device Tree Bindings
>  
>  allOf:
> -  - $ref: dsa.yaml#
> +  - $ref: dsa.yaml#/$defs/ethernet-ports
>  
>  maintainers:
>    - George McCollister <george.mccollister at gmail.com>
> diff --git a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> index 1219b830b1a4..5bef4128d175 100644
> --- a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> @@ -66,7 +66,7 @@ required:
>    - reg
>  
>  allOf:
> -  - $ref: dsa.yaml#
> +  - $ref: dsa.yaml#/$defs/ethernet-ports

I'm wondering if "ethernet-ports" is the best name for this schema.
Not very scientific, but what about "just-standard-props"?


From lpieralisi at kernel.org  Tue Dec  6 07:42:50 2022
From: lpieralisi at kernel.org (Lorenzo Pieralisi)
Date: Tue,  6 Dec 2022 16:42:50 +0100
Subject: (subset) [next v7 0/8] Add BananaPi R3
In-Reply-To: <20221127114142.156573-1-linux@fw-web.de>
References: <20221127114142.156573-1-linux@fw-web.de>
Message-ID: <167034135386.88271.140848740488398853.b4-ty@kernel.org>

On Sun, 27 Nov 2022 12:41:34 +0100, Frank Wunderlich wrote:
> From: Frank Wunderlich <frank-w at public-files.de>
> 
> This Series adds some Nodes to mt7986 devicetree and the BananaPi R3
> 
> This version is rebased on linux next from 2022/11/27.
> 
> i included sams series for mt7986 DTS with small changes
> https://patchwork.kernel.org/project/linux-mediatek/cover/20220427124741.18245->
> 
> [...]

Applied to pci/dt, thanks!

[3/8] dt-bindings: PCI: mediatek-gen3: add SoC based clock config
      https://git.kernel.org/lpieralisi/pci/c/ec9eaf68c1dc
[4/8] dt-bindings: PCI: mediatek-gen3: add support for mt7986
      https://git.kernel.org/lpieralisi/pci/c/d3fd0ee7a4a1

Thanks,
Lorenzo


From krzysztof.kozlowski at linaro.org  Tue Dec  6 07:45:06 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Tue, 6 Dec 2022 16:45:06 +0100
Subject: [PATCH v4 2/6] dt-bindings: mediatek: modify VDOSYS0 mmsys device
 tree Documentations for MT8188
In-Reply-To: <20221206020046.11333-3-nathan.lu@mediatek.com>
References: <20221206020046.11333-1-nathan.lu@mediatek.com>
 <20221206020046.11333-3-nathan.lu@mediatek.com>
Message-ID: <d17bef48-0804-3ccc-a14e-9043ae615573@linaro.org>

On 06/12/2022 03:00, nathan.lu wrote:
> From: Nathan Lu <nathan.lu at mediatek.com>
> 
> modify VDOSYS0 mmsys device tree Documentations for MT8188.
> 
> Signed-off-by: Nathan Lu <nathan.lu at mediatek.com>


Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Best regards,
Krzysztof



From olteanv at gmail.com  Tue Dec  6 07:50:49 2022
From: olteanv at gmail.com (Vladimir Oltean)
Date: Tue, 6 Dec 2022 17:50:49 +0200
Subject: [PATCH v4 net-next 8/9] dt-bindings: net: add generic
 ethernet-switch-port binding
In-Reply-To: <20221202204559.162619-9-colin.foster@in-advantage.com>
 <20221202204559.162619-9-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-9-colin.foster@in-advantage.com>
 <20221202204559.162619-9-colin.foster@in-advantage.com>
Message-ID: <20221206155049.erpgwrvt5gzdf2e6@skbuf>

On Fri, Dec 02, 2022 at 12:45:58PM -0800, Colin Foster wrote:
> The dsa-port.yaml binding had several references that can be common to all
> ethernet ports, not just dsa-specific ones. Break out the generic bindings
> to ethernet-switch-port.yaml they can be used by non-dsa drivers.
> 
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> ---
> 
> v3 -> v4
>   * Add Florian Reviewed tag
> 
> v2 -> v3
>   * Change dsa-port title from "DSA Switch port Device Tree Bindings"
>     to "Generic DSA Switch port"
>   * Add reference to ethernet-switch-port.yaml# in dsa-port.yaml
>   * Change title of ethernet-switch-port.yaml from "Ethernet Switch
>     port Device Tree Bindings" to "Generic Ethernet Switch port"
>   * Remove most properties from ethernet-switch-port.yaml. They're
>     all in ethernet-controller, and are all allowed.
>   * ethernet-switch.yaml now only references ethernet-switch-port.yaml#
>     under the port node.
> 
> v1 -> v2
>   * Remove accidental addition of
>     "$ref: /schemas/net/ethernet-switch-port.yaml" which should be kept
>     out of dsa-port so that it doesn't get referenced multiple times
>     through both ethernet-switch and dsa-port.
> 
> ---
>  .../devicetree/bindings/net/dsa/dsa-port.yaml | 24 ++----------------
>  .../bindings/net/ethernet-switch-port.yaml    | 25 +++++++++++++++++++
>  .../bindings/net/ethernet-switch.yaml         |  6 +----
>  MAINTAINERS                                   |  1 +
>  4 files changed, 29 insertions(+), 27 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
> 
> diff --git a/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml b/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
> index 9abb8eba5fad..5b457f41273a 100644
> --- a/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
> @@ -4,7 +4,7 @@
>  $id: http://devicetree.org/schemas/net/dsa/dsa-port.yaml#
>  $schema: http://devicetree.org/meta-schemas/core.yaml#
>  
> -title: Ethernet Switch port Device Tree Bindings
> +title: Generic DSA Switch port

What are the capitalization rules in titles? Looks odd that "port" is
lowercase but "switch" isn't.

>  
>  maintainers:
>    - Andrew Lunn <andrew at lunn.ch>
> @@ -14,8 +14,7 @@ maintainers:
>  description:
>    Ethernet switch port Description
>  
> -allOf:
> -  - $ref: /schemas/net/ethernet-controller.yaml#
> +$ref: /schemas/net/ethernet-switch-port.yaml#
>  
>  properties:
>    reg:
> @@ -58,25 +57,6 @@ properties:
>        - rtl8_4t
>        - seville
>  
> -  phy-handle: true
> -
> -  phy-mode: true
> -
> -  fixed-link: true
> -
> -  mac-address: true
> -
> -  sfp: true
> -
> -  managed: true
> -
> -  rx-internal-delay-ps: true
> -
> -  tx-internal-delay-ps: true
> -
> -required:
> -  - reg
> -
>  # CPU and DSA ports must have phylink-compatible link descriptions
>  if:
>    oneOf:
> diff --git a/Documentation/devicetree/bindings/net/ethernet-switch-port.yaml b/Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
> new file mode 100644
> index 000000000000..3d7da6916fb8
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
> @@ -0,0 +1,25 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/net/ethernet-switch-port.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Generic Ethernet Switch port
> +
> +maintainers:
> +  - Andrew Lunn <andrew at lunn.ch>
> +  - Florian Fainelli <f.fainelli at gmail.com>
> +  - Vivien Didelot <vivien.didelot at gmail.com>
> +
> +description:
> +  Ethernet switch port Description

Sounds a bit too "lorem ipsum dolor sit amet". You can say that a port
is a component of a switch which manages one MAC, and can pass Ethernet
frames.

> +
> +$ref: ethernet-controller.yaml#
> +
> +properties:
> +  reg:
> +    description: Port number
> +
> +additionalProperties: true
> +
> +...
> diff --git a/Documentation/devicetree/bindings/net/ethernet-switch.yaml b/Documentation/devicetree/bindings/net/ethernet-switch.yaml
> index afeb9ffd84c8..1e8b7649a9b2 100644
> --- a/Documentation/devicetree/bindings/net/ethernet-switch.yaml
> +++ b/Documentation/devicetree/bindings/net/ethernet-switch.yaml
> @@ -40,10 +40,6 @@ patternProperties:
>          type: object
>          description: Ethernet switch ports
>  
> -        $ref: ethernet-controller.yaml#
> -
> -        additionalProperties: true
> -
>  oneOf:
>    - required:
>        - ports
> @@ -60,7 +56,7 @@ $defs:
>      patternProperties:
>        "^(ethernet-)?port@[0-9]+$":
>          description: Ethernet switch ports
> -        $ref: ethernet-controller.yaml#
> +        $ref: ethernet-switch-port.yaml#
>          unevaluatedProperties: false
>  
>  ...
> diff --git a/MAINTAINERS b/MAINTAINERS
> index d574cae901b3..fe5f52c9864a 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -14337,6 +14337,7 @@ M:	Florian Fainelli <f.fainelli at gmail.com>
>  M:	Vladimir Oltean <olteanv at gmail.com>
>  S:	Maintained
>  F:	Documentation/devicetree/bindings/net/dsa/
> +F:	Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
>  F:	Documentation/devicetree/bindings/net/ethernet-switch.yaml
>  F:	drivers/net/dsa/
>  F:	include/linux/dsa/
> -- 
> 2.25.1
> 



From broonie at kernel.org  Tue Dec  6 08:04:21 2022
From: broonie at kernel.org (Mark Brown)
Date: Tue, 06 Dec 2022 16:04:21 +0000
Subject: (subset) [PATCH v2 0/9] Add MediaTek MT7986 SPI NAND and ECC support
In-Reply-To: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
Message-ID: <167034266187.169562.7872281598428362203.b4-ty@kernel.org>

On Mon, 5 Dec 2022 14:57:47 +0800, Xiangsheng Hou wrote:
> This patch series add MediaTek MT7986 SPI NAND and ECC controller
> support, split ECC engine with rawnand controller in bindings and
> hange to YAML schema.
> 
> Changes since V1:
>  - Use existing sample delay property.
>  - Add restricting for optional nfi_hclk.
>  - Improve and perfect dt-bindings documentation.
>  - Change existing node name to match NAND controller DT bingings.
>  - Fix issues reported by dt_binding_check.
>  - Fix issues reported by dtbs_check.
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next

Thanks!

[1/9] spi: mtk-snfi: Add snfi support for MT7986 IC
      commit: 7073888c86601389e17f3ee8ab15ab7aef148839

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


From olteanv at gmail.com  Tue Dec  6 08:04:30 2022
From: olteanv at gmail.com (Vladimir Oltean)
Date: Tue, 6 Dec 2022 18:04:30 +0200
Subject: [PATCH v4 net-next 0/9] dt-binding preparation for ocelot
 switches
In-Reply-To: <20221202204559.162619-1-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
Message-ID: <20221206160430.4kiyrzrumcc6dp2g@skbuf>

Hi Colin,

On Fri, Dec 02, 2022 at 12:45:50PM -0800, Colin Foster wrote:
> Ocelot switches have the abilitiy to be used internally via
> memory-mapped IO or externally via SPI or PCIe. This brings up issues
> for documentation, where the same chip might be accessed internally in a
> switchdev manner, or externally in a DSA configuration. This patch set
> is perparation to bring DSA functionality to the VSC7512, utilizing as
> much as possible with an almost identical VSC7514 chip.
> 
> This patch set changed quite a bit from v2, so I'll omit the background
> of how those sets came to be. Rob offered a lot of very useful guidance.
> My thanks.
> 
> At the end of the day, with this patch set, there should be a framework
> to document Ocelot switches (and any switch) in scenarios where they can
> be controlled internally (ethernet-switch) or externally (dsa-switch).
> 
> ---

This looks like a very clean implementation of what I had in mind
(better than I could have done it). Sorry for not being able to help
with the json-schema bits and thanks to Rob for doing so.

Would you mind adding one more patch at the beginning of the series
which syncs the maintainers from the DSA (and now also ethernet-switch)
dt-bindings with the MAINTAINERS file? That would mean removing Vivien
(see commit 6ce3df596be2 ("MAINTAINERS: Move Vivien to CREDITS")) and
adding myself. This is in principle such that you don't carry around a
not-up-to-date list of maintainers when adding new schemas.

I don't know if we could do something about maintainer entries in
schemas not becoming out of date w.r.t. the MAINTAINERS file.


From bero at baylibre.com  Tue Dec  6 08:25:21 2022
From: bero at baylibre.com (=?UTF-8?Q?Bernhard_Rosenkr=C3=A4nzer?=)
Date: Tue, 6 Dec 2022 17:25:21 +0100
Subject: [PATCH v3 0/7] Remove the pins-are-numbered DT property
In-Reply-To: <CACRpkda75U=b50rK=WecNvaEoTdN2UzGyEwfPRaO6jG9FGyWhw@mail.gmail.com>
References: <20221129023401.278780-1-bero@baylibre.com> <CACRpkda75U=b50rK=WecNvaEoTdN2UzGyEwfPRaO6jG9FGyWhw@mail.gmail.com>
Message-ID: <CAP2ifjN-czBPKsm6o9U0Zx3dgau6bydFSrZmtwNJecSQu9VMzg@mail.gmail.com>

On Sat, Dec 3, 2022 at 10:22 AM Linus Walleij <linus.walleij at linaro.org> wrote:
>
> Hi Bero,
>
> long time no see!

Hi Linus,
indeed, I've been doing mostly userland stuff lately, and my latest
kernel patch was x86 (got to keep all of my hardware working ;) ). Now
that I've changed jobs, I'm expecting to be more active on the kernel
side (though still doing a lot of userland).

> > This patchset removes all uses of pins-are-numbered and marks the
> > property as deprecated.
>
> I don't remember any more why this property was introduced, but
> I am happy to see it go.

I couldn't find why it was introduced either (and git blame wasn't
much help). I'm assuming there was some other mode in vendor trees
that never made it into mainline (but the flag for switching between
the modes did).

> I applied patches 1-4 to the pin control tree for v6.2,
> please funnel the rest through mediatek/stm32 and
> SoC trees!

Thanks! Remaining patches reposted and currently waiting.

ttyl
bero


From nfraprado at collabora.com  Tue Dec  6 10:30:37 2022
From: nfraprado at collabora.com (=?utf-8?B?TsOtY29sYXMgRi4gUi4gQS4=?= Prado)
Date: Tue, 6 Dec 2022 15:30:37 -0300
Subject: [PATCH v3 01/10] arm64: dts: mt8183: Fix Mali GPU clock
In-Reply-To: <20220927101128.44758-2-angelogioacchino.delregno@collabora.com>
References: <20220927101128.44758-1-angelogioacchino.delregno@collabora.com>
 <20220927101128.44758-2-angelogioacchino.delregno@collabora.com>
Message-ID: <20221206183037.3jnssar4yxcx5hpb@notapiano>

On Tue, Sep 27, 2022 at 12:11:19PM +0200, AngeloGioacchino Del Regno wrote:
> From: Chen-Yu Tsai <wenst at chromium.org>
> 
> The actual clock feeding into the Mali GPU on the MT8183 is from the
> clock gate in the MFGCFG block, not CLK_TOP_MFGPLL_CK from the TOPCKGEN
> block, which itself is simply a pass-through placeholder for the MFGPLL
> in the APMIXEDSYS block.
> 
> Fix the hardware description with the correct clock reference.
> 
> Fixes: a8168cebf1bc ("arm64: dts: mt8183: Add node for the Mali GPU")
> Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Hi,

it seems that while all other patches on this series were applied by Chen-Yu
through the clk tree, this commit never made it to the mediatek tree.

As a result, MT8183-based machines (or at least mt8183-kukui-jacuzzi, where I
tested on) currently hang during boot not only on next, but also on mainline,
v6.1-rc8. With this commit applied I've confirmed that the machine boots fine
again.

Matthias, could you please apply this commit and make sure it makes its way to
v6.1? Given the Fixes tag it should eventually make its way there anyway, but if
still possible would be good to have it fixed right from v6.1.

Tested-by: N?colas F. R. A. Prado <nfraprado at collabora.com>

Thanks,
N?colas

> ---
>  arch/arm64/boot/dts/mediatek/mt8183.dtsi | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183.dtsi b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
> index a70b669c49ba..402136bfd535 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
> @@ -1678,7 +1678,7 @@ gpu: gpu at 13040000 {
>  				<GIC_SPI 278 IRQ_TYPE_LEVEL_LOW>;
>  			interrupt-names = "job", "mmu", "gpu";
>  
> -			clocks = <&topckgen CLK_TOP_MFGPLL_CK>;
> +			clocks = <&mfgcfg CLK_MFG_BG3D>;
>  
>  			power-domains =
>  				<&spm MT8183_POWER_DOMAIN_MFG_CORE0>,
> -- 
> 2.37.2
> 
> 
> 


From bvanassche at acm.org  Tue Dec  6 10:59:25 2022
From: bvanassche at acm.org (Bart Van Assche)
Date: Tue, 6 Dec 2022 10:59:25 -0800
Subject: [PATCH v4] ufs: core: wlun suspend SSU/enter hibern8 fail
 recovery
In-Reply-To: <20221206031109.10609-1-peter.wang@mediatek.com>
References: <20221206031109.10609-1-peter.wang@mediatek.com>
Message-ID: <2f88c2df-abc0-2415-8085-162e96de356c@acm.org>

On 12/5/22 19:11, peter.wang at mediatek.com wrote:
> From: Peter Wang <peter.wang at mediatek.com>
> 
> When SSU/enter hibern8 fail in wlun suspend flow, trigger error
> handler and return busy to break the suspend.
> If not, wlun runtime pm status become error and the consumer will
> stuck in runtime suspend status.

Reviewed-by: Bart Van Assche <bvanassche at acm.org>


From robh at kernel.org  Tue Dec  6 13:15:55 2022
From: robh at kernel.org (Rob Herring)
Date: Tue,  6 Dec 2022 15:15:55 -0600
Subject: [PATCH] dt-bindings: Add missing 'unevaluatedProperties' to regulator nodes
Message-ID: <20221206211554.92005-1-robh@kernel.org>

Several regulator schemas are missing 'unevaluatedProperties' constraint
which means any extra properties are allowed. Upon adding the
constraint, there's numerous warnings from using the deprecated
'regulator-compatible' property. Remove the usage as examples shouldn't
be using long since deprecated properties.

Signed-off-by: Rob Herring <robh at kernel.org>
---
I'd suggest that Mark take this if that's okay with Lee. Or I can take 
it.

 Documentation/devicetree/bindings/mfd/max77650.yaml  |  2 --
 .../devicetree/bindings/mfd/mediatek,mt6360.yaml     |  9 ---------
 .../bindings/power/supply/mt6360_charger.yaml        |  2 +-
 .../bindings/regulator/max77650-regulator.yaml       |  1 +
 .../devicetree/bindings/regulator/max8660.yaml       |  6 +-----
 .../bindings/regulator/mt6360-regulator.yaml         | 12 +++---------
 6 files changed, 6 insertions(+), 26 deletions(-)

diff --git a/Documentation/devicetree/bindings/mfd/max77650.yaml b/Documentation/devicetree/bindings/mfd/max77650.yaml
index b0a0f0d3d9d4..4181174fcf58 100644
--- a/Documentation/devicetree/bindings/mfd/max77650.yaml
+++ b/Documentation/devicetree/bindings/mfd/max77650.yaml
@@ -100,14 +100,12 @@ examples:
                 compatible = "maxim,max77650-regulator";
 
                 max77650_ldo: regulator-ldo {
-                    regulator-compatible = "ldo";
                     regulator-name = "max77650-ldo";
                     regulator-min-microvolt = <1350000>;
                     regulator-max-microvolt = <2937500>;
                 };
 
                 max77650_sbb0: regulator-sbb0 {
-                    regulator-compatible = "sbb0";
                     regulator-name = "max77650-sbb0";
                     regulator-min-microvolt = <800000>;
                     regulator-max-microvolt = <1587500>;
diff --git a/Documentation/devicetree/bindings/mfd/mediatek,mt6360.yaml b/Documentation/devicetree/bindings/mfd/mediatek,mt6360.yaml
index 28eee02441ee..fb65abf30d57 100644
--- a/Documentation/devicetree/bindings/mfd/mediatek,mt6360.yaml
+++ b/Documentation/devicetree/bindings/mfd/mediatek,mt6360.yaml
@@ -83,7 +83,6 @@ examples:
                 richtek,vinovp-microvolt = <14500000>;
 
                 otg_vbus_regulator: usb-otg-vbus-regulator {
-                    regulator-compatible = "usb-otg-vbus";
                     regulator-name = "usb-otg-vbus";
                     regulator-min-microvolt = <4425000>;
                     regulator-max-microvolt = <5825000>;
@@ -145,7 +144,6 @@ examples:
                 compatible = "mediatek,mt6360-regulator";
                 LDO_VIN3-supply = <&BUCK2>;
                 buck1 {
-                    regulator-compatible = "BUCK1";
                     regulator-name = "mt6360,buck1";
                     regulator-min-microvolt = <300000>;
                     regulator-max-microvolt = <1300000>;
@@ -154,7 +152,6 @@ examples:
                          MT6360_OPMODE_ULP>;
                 };
                 BUCK2: buck2 {
-                    regulator-compatible = "BUCK2";
                     regulator-name = "mt6360,buck2";
                     regulator-min-microvolt = <300000>;
                     regulator-max-microvolt = <1300000>;
@@ -163,7 +160,6 @@ examples:
                          MT6360_OPMODE_ULP>;
                 };
                 ldo6 {
-                    regulator-compatible = "LDO6";
                     regulator-name = "mt6360,ldo6";
                     regulator-min-microvolt = <500000>;
                     regulator-max-microvolt = <2100000>;
@@ -171,7 +167,6 @@ examples:
                          MT6360_OPMODE_LP>;
                 };
                 ldo7 {
-                    regulator-compatible = "LDO7";
                     regulator-name = "mt6360,ldo7";
                     regulator-min-microvolt = <500000>;
                     regulator-max-microvolt = <2100000>;
@@ -179,7 +174,6 @@ examples:
                          MT6360_OPMODE_LP>;
                 };
                 ldo1 {
-                    regulator-compatible = "LDO1";
                     regulator-name = "mt6360,ldo1";
                     regulator-min-microvolt = <1200000>;
                     regulator-max-microvolt = <3600000>;
@@ -187,7 +181,6 @@ examples:
                          MT6360_OPMODE_LP>;
                 };
                 ldo2 {
-                    regulator-compatible = "LDO2";
                     regulator-name = "mt6360,ldo2";
                     regulator-min-microvolt = <1200000>;
                     regulator-max-microvolt = <3600000>;
@@ -195,7 +188,6 @@ examples:
                          MT6360_OPMODE_LP>;
                 };
                 ldo3 {
-                    regulator-compatible = "LDO3";
                     regulator-name = "mt6360,ldo3";
                     regulator-min-microvolt = <1200000>;
                     regulator-max-microvolt = <3600000>;
@@ -203,7 +195,6 @@ examples:
                          MT6360_OPMODE_LP>;
                 };
                 ldo5 {
-                    regulator-compatible = "LDO5";
                     regulator-name = "mt6360,ldo5";
                     regulator-min-microvolt = <2700000>;
                     regulator-max-microvolt = <3600000>;
diff --git a/Documentation/devicetree/bindings/power/supply/mt6360_charger.yaml b/Documentation/devicetree/bindings/power/supply/mt6360_charger.yaml
index b89b15a5bfa4..4c74cc78729e 100644
--- a/Documentation/devicetree/bindings/power/supply/mt6360_charger.yaml
+++ b/Documentation/devicetree/bindings/power/supply/mt6360_charger.yaml
@@ -26,6 +26,7 @@ properties:
     type: object
     description: OTG boost regulator.
     $ref: /schemas/regulator/regulator.yaml#
+    unevaluatedProperties: false
 
 required:
   - compatible
@@ -39,7 +40,6 @@ examples:
       richtek,vinovp-microvolt = <14500000>;
 
       otg_vbus_regulator: usb-otg-vbus-regulator {
-        regulator-compatible = "usb-otg-vbus";
         regulator-name = "usb-otg-vbus";
         regulator-min-microvolt = <4425000>;
         regulator-max-microvolt = <5825000>;
diff --git a/Documentation/devicetree/bindings/regulator/max77650-regulator.yaml b/Documentation/devicetree/bindings/regulator/max77650-regulator.yaml
index ce0a4021ae7f..01b9775a92d1 100644
--- a/Documentation/devicetree/bindings/regulator/max77650-regulator.yaml
+++ b/Documentation/devicetree/bindings/regulator/max77650-regulator.yaml
@@ -26,6 +26,7 @@ properties:
 patternProperties:
   "^regulator-(ldo|sbb[0-2])$":
     $ref: "regulator.yaml#"
+    unevaluatedProperties: false
 
 required:
   - compatible
diff --git a/Documentation/devicetree/bindings/regulator/max8660.yaml b/Documentation/devicetree/bindings/regulator/max8660.yaml
index 4d550ca396eb..35792a927b03 100644
--- a/Documentation/devicetree/bindings/regulator/max8660.yaml
+++ b/Documentation/devicetree/bindings/regulator/max8660.yaml
@@ -26,6 +26,7 @@ properties:
     patternProperties:
       "^regulator-.+$":
         $ref: "regulator.yaml#"
+        unevaluatedProperties: false
 
     additionalProperties: false
 
@@ -43,31 +44,26 @@ examples:
 
         regulators {
           regulator-V3 {
-            regulator-compatible= "V3(DCDC)";
             regulator-min-microvolt = <725000>;
             regulator-max-microvolt = <1800000>;
           };
 
           regulator-V4 {
-            regulator-compatible= "V4(DCDC)";
             regulator-min-microvolt = <725000>;
             regulator-max-microvolt = <1800000>;
           };
 
           regulator-V5 {
-            regulator-compatible= "V5(LDO)";
             regulator-min-microvolt = <1700000>;
             regulator-max-microvolt = <2000000>;
           };
 
           regulator-V6 {
-            regulator-compatible= "V6(LDO)";
             regulator-min-microvolt = <1800000>;
             regulator-max-microvolt = <3300000>;
           };
 
           regulator-V7 {
-            regulator-compatible= "V7(LDO)";
             regulator-min-microvolt = <1800000>;
             regulator-max-microvolt = <3300000>;
           };
diff --git a/Documentation/devicetree/bindings/regulator/mt6360-regulator.yaml b/Documentation/devicetree/bindings/regulator/mt6360-regulator.yaml
index a462d99a25cc..8a0931dc2f30 100644
--- a/Documentation/devicetree/bindings/regulator/mt6360-regulator.yaml
+++ b/Documentation/devicetree/bindings/regulator/mt6360-regulator.yaml
@@ -27,9 +27,11 @@ properties:
 patternProperties:
   "^buck[12]$":
     $ref: "regulator.yaml#"
+    unevaluatedProperties: false
 
   "^ldo[123567]$":
     $ref: "regulator.yaml#"
+    unevaluatedProperties: false
 
 required:
   - compatible
@@ -44,7 +46,6 @@ examples:
       compatible = "mediatek,mt6360-regulator";
       LDO_VIN3-supply = <&BUCK2>;
       buck1 {
-        regulator-compatible = "BUCK1";
         regulator-name = "mt6360,buck1";
         regulator-min-microvolt = <300000>;
         regulator-max-microvolt = <1300000>;
@@ -53,7 +54,6 @@ examples:
              MT6360_OPMODE_ULP>;
       };
       BUCK2: buck2 {
-        regulator-compatible = "BUCK2";
         regulator-name = "mt6360,buck2";
         regulator-min-microvolt = <300000>;
         regulator-max-microvolt = <1300000>;
@@ -62,7 +62,6 @@ examples:
              MT6360_OPMODE_ULP>;
       };
       ldo6 {
-        regulator-compatible = "LDO6";
         regulator-name = "mt6360,ldo6";
         regulator-min-microvolt = <500000>;
         regulator-max-microvolt = <2100000>;
@@ -70,7 +69,6 @@ examples:
              MT6360_OPMODE_LP>;
       };
       ldo7 {
-        regulator-compatible = "LDO7";
         regulator-name = "mt6360,ldo7";
         regulator-min-microvolt = <500000>;
         regulator-max-microvolt = <2100000>;
@@ -78,15 +76,13 @@ examples:
              MT6360_OPMODE_LP>;
       };
       ldo1 {
-        regulator-compatible = "LDO1";
         regulator-name = "mt6360,ldo1";
         regulator-min-microvolt = <1200000>;
         regulator-max-microvolt = <3600000>;
         regulator-allowed-modes = <MT6360_OPMODE_NORMAL
              MT6360_OPMODE_LP>;
       };
-        ldo2 {
-        regulator-compatible = "LDO2";
+      ldo2 {
         regulator-name = "mt6360,ldo2";
         regulator-min-microvolt = <1200000>;
         regulator-max-microvolt = <3600000>;
@@ -94,7 +90,6 @@ examples:
              MT6360_OPMODE_LP>;
       };
       ldo3 {
-        regulator-compatible = "LDO3";
         regulator-name = "mt6360,ldo3";
         regulator-min-microvolt = <1200000>;
         regulator-max-microvolt = <3600000>;
@@ -102,7 +97,6 @@ examples:
              MT6360_OPMODE_LP>;
       };
       ldo5 {
-        regulator-compatible = "LDO5";
         regulator-name = "mt6360,ldo5";
         regulator-min-microvolt = <2700000>;
         regulator-max-microvolt = <3600000>;
-- 
2.35.1



From keescook at chromium.org  Tue Dec  6 15:37:05 2022
From: keescook at chromium.org (Kees Cook)
Date: Tue, 6 Dec 2022 15:37:05 -0800
Subject: Coverity: mt7996_hw_queue_read(): Integer handling issues
In-Reply-To: <786eff1a1751a5bc0dc68d6567be585b635bddb1.camel@mediatek.com>
References: <202212021411.A5E618D3@keescook>
 <786eff1a1751a5bc0dc68d6567be585b635bddb1.camel@mediatek.com>
Message-ID: <202212061535.5D3DA489FB@keescook>

On Sat, Dec 03, 2022 at 04:40:09AM +0000, Ryder Lee wrote:
> On Fri, 2022-12-02 at 14:11 -0800, coverity-bot wrote:
> > Hello!
> > 
> > This is an experimental semi-automated report about issues detected
> > by
> > Coverity from a scan of next-20221202 as part of the linux-next scan
> > project:
> > 
> https://urldefense.com/v3/__https://scan.coverity.com/projects/linux-next-weekly-scan__;!!CTRNKA9wMg0ARbw!jBOoj6LMqqA8E0AyjKQTa-0rVzcFiZ3BbpciEIn7so974kcMBeG4zZm-QU4AudLXY7-jNUSt0unzAt2zirSF$?
> >  
> > 
> > You're getting this email because you were associated with the
> > identified
> > lines of code (noted below) that were touched by commits:
> > 
> >   Thu Dec 1 17:29:14 2022 +0100
> >     98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi
> > 7 (802.11be) devices")
> > 
> > Coverity reported the following:
> > 
> > *** CID 1527813:  Integer handling issues  (SIGN_EXTENSION)
> > drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c:460 in
> > mt7996_hw_queue_read()
> > 454     	for (i = 0; i < size; i++) {
> > 455     		u32 ctrl, head, tail, queued;
> > 456
> > 457     		if (val & BIT(map[i].index))
> > 458     			continue;
> > 459
> > vvv     CID 1527813:  Integer handling issues  (SIGN_EXTENSION)
> > vvv     Suspicious implicit sign extension: "map[i].qid" with type
> > "u8" (8 bits, unsigned) is promoted in "map[i].qid << 24" to type
> > "int" (32 bits, signed), then sign-extended to type "unsigned long"
> > (64 bits, unsigned).  If "map[i].qid << 24" is greater than
> > 0x7FFFFFFF, the upper bits of the result will all be 1.
> > 460     		ctrl = BIT(31) | (map[i].pid << 10) |
> > (map[i].qid << 24);
> 
> u32 ctrl = BIT(31) | (map[i].pid << 10) | (map[i].qid << 24);
> 
> Hmm ...where's type "int" (32 bits, signed) from?

	map[i].qid is promoted to int before the "<< 24".

-- 
Kees Cook


From lorenzo at kernel.org  Tue Dec  6 15:52:28 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Wed, 7 Dec 2022 00:52:28 +0100
Subject: [PATCH net-next] net: ethernet: mtk_wed: fix possible deadlock
 if mtk_wed_wo_init fails
In-Reply-To: <20221205174441.30741550@kernel.org>
References: <a87f05e60ea1a94b571c9c87b69cc5b0e94943f2.1669999089.git.lorenzo@kernel.org>
 <Y4ybbkn+nXkGsqWe@unreal>
 <Y4y4If8XXu+wErIj@lore-desk>
 <Y42d2us5Pv1UqhEj@unreal>
 <Y420B4/IpwFHJAck@lore-desk>
 <20221205174441.30741550@kernel.org>
Message-ID: <Y4/VvGi2d0/0RrRW@lore-desk>

> > > IMHO, it is a culprit, proper error unwind means that you won't call to
> > > uninit functions for something that is not initialized yet. It is better
> > > to fix it instead of adding "if (!wo) ..." checks.  
> > 
> > So, iiuc, you would prefer to do something like:
> > 
> > __mtk_wed_detach()
> > {
> > 	...
> > 	if (mtk_wed_get_rx_capa(dev) && wo) {
> > 		mtk_wed_wo_reset(dev);
> > 		mtk_wed_free_rx_rings(dev);
> > 		mtk_wed_wo_deinit(hw);
> > 	}
> > 	...
> > 	
> > Right? I am fine both ways :)
> 
> FWIW, that does seem slightly better to me as well.
> Also - aren't you really fixing multiple issues here 
> (even if on the same error path)? The locking, 
> the null-checking and the change in mtk_wed_wo_reset()?

wo NULL pointer issue was not hit before for the deadlock one (so I fixed them
in the same patch).
Do you prefer to split them in two patches? (wo null pointer fix first).

I have posted v2 addressing Leon's comments but I need to post a v3 to add
missing WARN_ON.

Regards,
Lorenzo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221207/6cd157f3/attachment-0001.sig>

From kuba at kernel.org  Tue Dec  6 17:24:26 2022
From: kuba at kernel.org (Jakub Kicinski)
Date: Tue, 6 Dec 2022 17:24:26 -0800
Subject: [PATCH net-next] net: ethernet: mtk_wed: fix possible deadlock
 if mtk_wed_wo_init fails
In-Reply-To: <Y4/VvGi2d0/0RrRW@lore-desk>
References: <a87f05e60ea1a94b571c9c87b69cc5b0e94943f2.1669999089.git.lorenzo@kernel.org>
	<Y4ybbkn+nXkGsqWe@unreal>
	<Y4y4If8XXu+wErIj@lore-desk>
	<Y42d2us5Pv1UqhEj@unreal>
	<Y420B4/IpwFHJAck@lore-desk>
	<20221205174441.30741550@kernel.org>
	<Y4/VvGi2d0/0RrRW@lore-desk>
Message-ID: <20221206172426.7e7cf3bf@kernel.org>

On Wed, 7 Dec 2022 00:52:28 +0100 Lorenzo Bianconi wrote:
> > FWIW, that does seem slightly better to me as well.
> > Also - aren't you really fixing multiple issues here 
> > (even if on the same error path)? The locking, 
> > the null-checking and the change in mtk_wed_wo_reset()?  
> 
> wo NULL pointer issue was not hit before for the deadlock one (so I fixed them
> in the same patch).
> Do you prefer to split them in two patches? (wo null pointer fix first).

Yes, I think they are different issues even if once "covers" the other.
I think it'd make the review / judgment easier.

> I have posted v2 addressing Leon's comments but I need to post a v3 to add
> missing WARN_ON.



From Xiangsheng.Hou at mediatek.com  Tue Dec  6 18:01:15 2022
From: Xiangsheng.Hou at mediatek.com (=?utf-8?B?WGlhbmdzaGVuZyBIb3UgKOS+r+elpeiDnCk=?=)
Date: Wed, 7 Dec 2022 02:01:15 +0000
Subject: [PATCH v2 4/9] mtd: nand: ecc-mtk: Add ECC support fot MT7986 IC
In-Reply-To: <b55ee8fa-7ad6-3bf9-4983-41a90bd75ce4@collabora.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
	 <20221205065756.26875-5-xiangsheng.hou@mediatek.com>
	 <50ede482-7f03-ff55-5ad0-aa6249027cbe@collabora.com>
	 <149100d0dc205a317ed352cdfb391f2147a2afab.camel@mediatek.com>
	 <b55ee8fa-7ad6-3bf9-4983-41a90bd75ce4@collabora.com>
Message-ID: <fb7a26a5c3456796e6388dd2b6e952303a984cf5.camel@mediatek.com>

On Tue, 2022-12-06 at 13:22 +0100, AngeloGioacchino Del Regno wrote:
> Il 06/12/22 10:04, Xiangsheng Hou (???) ha scritto:
> > Hi Angelo,
> > 
> > On Mon, 2022-12-05 at 15:21 +0100, AngeloGioacchino Del Regno
> > wrote:
> > > Il 05/12/22 07:57, Xiangsheng Hou ha scritto:
> > > > Add ECC support fot MT7986 IC.
> > > > 
> > > > Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> > > > ---
> > > >    drivers/mtd/nand/ecc-mtk.c | 18 ++++++++++++++++++
> > > >    1 file changed, 18 insertions(+)
> > > > 
> > > > diff --git a/drivers/mtd/nand/ecc-mtk.c b/drivers/mtd/nand/ecc-
> > > > mtk.c
> > > > index 9f9b201fe706..c2f6cfa76a04 100644
> > > > --- a/drivers/mtd/nand/ecc-mtk.c
> > > > +++ b/drivers/mtd/nand/ecc-mtk.c
> > > > @@ -79,6 +79,10 @@ static const u8 ecc_strength_mt7622[] = {
> > > >    	4, 6, 8, 10, 12
> > > >    };
> > > >    
> > > > +static const u8 ecc_strength_mt7986[] = {
> > > > +	4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24
> > > > +};
> > > > +
> > > >    enum mtk_ecc_regs {
> > > >    	ECC_ENCPAR00,
> > > >    	ECC_ENCIRQ_EN,
> > > > @@ -483,6 +487,17 @@ static const struct mtk_ecc_caps
> > > > mtk_ecc_caps_mt7622 = {
> > > >    	.pg_irq_sel = 0,
> > > >    };
> > > >    
> > > > +static const struct mtk_ecc_caps mtk_ecc_caps_mt7986 = {
> > > > +	.err_mask = 0x1f,
> > > 
> > > Can't we use GENMASK() to define err_mask instead?
> > > 
> > > #define MT7986_ERRNUM	GENMASK(4, 0)
> > > 
> > > P.S.: Did I get that right? Is that referred to the ERRNUM(x)
> > > bits
> > 
> > Yes, you are right.
> > I will change like
> > #define ECC_ERRMASK(x) GENMASK(x, 0),
> > since other IC driver data will use 0x3f and 0x7f err_mask.
> > 
> 
> I would prefer, instead, something like
> 
> #define MT7986_ERRNUM	GENMASK(....)
> #define MT7622_ERRNUM	GENMASK(....)
> #define MT.... (etc)
> 
> instead of a macro calling another macro.

Will do.

Thanks
Xiangsheng Hou

From Xiangsheng.Hou at mediatek.com  Tue Dec  6 17:42:03 2022
From: Xiangsheng.Hou at mediatek.com (=?utf-8?B?WGlhbmdzaGVuZyBIb3UgKOS+r+elpeiDnCk=?=)
Date: Wed, 7 Dec 2022 01:42:03 +0000
Subject: [PATCH v2 3/9] spi: mtk-snfi: Add optional nfi_hclk which needed
 for MT7986
In-Reply-To: <ef2e6859-56e1-bbf0-dbde-44ea3d7d2f3f@collabora.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
	 <20221205065756.26875-4-xiangsheng.hou@mediatek.com>
	 <ef2e6859-56e1-bbf0-dbde-44ea3d7d2f3f@collabora.com>
Message-ID: <4db35ac3914e444b754f9075141fd69e07e7c858.camel@mediatek.com>

Hi Angelo,

On Mon, 2022-12-05 at 15:21 +0100, AngeloGioacchino Del Regno wrote:
> Il 05/12/22 07:57, Xiangsheng Hou ha scritto:
> > Add optional nfi_hclk which needed for MT7986.
> > 
> > Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> 
> Is there any operation for which you need NFI_HCLK enabled, but at
> the same time
> PAD_CLK and/or NFI_CLK can be disabled?

No, for the new IP design on MT7986, will need the
PAD_CLK/NFI_CLK/NFI_HCLK enabled at the same time.

> If NFI_HCLK and NFI_CLK must always be ON at the same time, adding
> this clock to
> spi-mtk-snfi.c is *not* an optimal way of doing things: you can, at
> this point,
> set NFI_HCLK as parent of NFI_CLK in the MT7986 clock driver instead,
> without
> making any addition to this driver at all.

For some IC, there may have only NFI_CLK/PAD_CLK, and have no NFI_HCLK,
this rely on IC design.

Thanks
Xiangsheng Hou

From colin.foster at in-advantage.com  Tue Dec  6 18:24:44 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Tue, 6 Dec 2022 18:24:44 -0800
Subject: [PATCH v4 net-next 3/9] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <20221206151851.hnqqwf6zgaa2c7tb@skbuf>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-4-colin.foster@in-advantage.com>
 <20221206151851.hnqqwf6zgaa2c7tb@skbuf>
Message-ID: <Y4/5bFMlpVLAQgEf@euler>

On Tue, Dec 06, 2022 at 05:18:51PM +0200, Vladimir Oltean wrote:
> On Fri, Dec 02, 2022 at 12:45:53PM -0800, Colin Foster wrote:
> > DSA switches can fall into one of two categories: switches where all ports
> > follow standard '(ethernet-)?port' properties, and switches that have
> > additional properties for the ports.
> > 
> > The scenario where DSA ports are all standardized can be handled by
> > swtiches with a reference to the new 'dsa.yaml#/$defs/ethernet-ports'.
> > 
> > The scenario where DSA ports require additional properties can reference
> > '$dsa.yaml#' directly. This will allow switches to reference these standard
> > defitions of the DSA switch, but add additional properties under the port
> > nodes.
> > ---
> > diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> > index b9d48e357e77..b9e366e46aed 100644
> > --- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> > @@ -19,9 +19,6 @@ description:
> >  select: false
> >  
> >  properties:
> > -  $nodename:
> > -    pattern: "^(ethernet-)?switch(@.*)?$"
> > -
> 
> Does this deletion belong to this patch or to "dt-bindings: net: add
> generic ethernet-switch"?

Good catch. I'll move it.

> 
> >    dsa,member:
> >      minItems: 2
> >      maxItems: 2
> > @@ -58,4 +55,26 @@ oneOf:
> >  
> >  additionalProperties: true


From colin.foster at in-advantage.com  Tue Dec  6 18:27:17 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Tue, 6 Dec 2022 18:27:17 -0800
Subject: [PATCH v4 net-next 3/9] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <20221206153734.4os4effdzlt2calg@skbuf>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-4-colin.foster@in-advantage.com>
 <20221202204559.162619-4-colin.foster@in-advantage.com>
 <20221206153734.4os4effdzlt2calg@skbuf>
Message-ID: <Y4/6BWW+dTjR9f72@euler>

On Tue, Dec 06, 2022 at 05:37:34PM +0200, Vladimir Oltean wrote:
> On Fri, Dec 02, 2022 at 12:45:53PM -0800, Colin Foster wrote:
> > diff --git a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> > index 259a0c6547f3..5888e3a0169a 100644
> > --- a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> > @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
> >  title: Arrow SpeedChips XRS7000 Series Switch Device Tree Bindings
> >  
> >  allOf:
> > -  - $ref: dsa.yaml#
> > +  - $ref: dsa.yaml#/$defs/ethernet-ports
> >  
> >  maintainers:
> >    - George McCollister <george.mccollister at gmail.com>
> > diff --git a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> > index 1219b830b1a4..5bef4128d175 100644
> > --- a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> > @@ -66,7 +66,7 @@ required:
> >    - reg
> >  
> >  allOf:
> > -  - $ref: dsa.yaml#
> > +  - $ref: dsa.yaml#/$defs/ethernet-ports
> 
> I'm wondering if "ethernet-ports" is the best name for this schema.
> Not very scientific, but what about "just-standard-props"?

I have no strong opinions on this topic (except that I confused myself
when writing the commit message and it was 'base'). Anyone else care to
chime in?


From Xiangsheng.Hou at mediatek.com  Tue Dec  6 18:00:17 2022
From: Xiangsheng.Hou at mediatek.com (=?utf-8?B?WGlhbmdzaGVuZyBIb3UgKOS+r+elpeiDnCk=?=)
Date: Wed, 7 Dec 2022 02:00:17 +0000
Subject: [PATCH v2 7/9] dt-bindings: spi: mtk-snfi: Add read latch latency
 property
In-Reply-To: <9992c9a5-059a-9396-32ce-7ed63cd12a96@collabora.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
	 <20221205065756.26875-8-xiangsheng.hou@mediatek.com>
	 <ce449a0c-efcc-0ac1-fb8e-c2b4148a5bc1@collabora.com>
	 <a8f706b37f5decf91bfa9a9ac8cf04be4346dd85.camel@mediatek.com>
	 <9992c9a5-059a-9396-32ce-7ed63cd12a96@collabora.com>
Message-ID: <e2ccf42f94152ccacad3a2eaec234ae0566474ec.camel@mediatek.com>

Hi Angelo,

On Tue, 2022-12-06 at 13:19 +0100, AngeloGioacchino Del Regno wrote:
> > > > diff --git
> > > > a/Documentation/devicetree/bindings/spi/mediatek,spi-
> > > > mtk-snfi.yaml
> > > > b/Documentation/devicetree/bindings/spi/mediatek,spi-
> > > > mtk-snfi.yaml
> > > > index bab23f1b11fd..6e6ff8d73fcd 100644
> > > > --- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-
> > > > snfi.yaml
> > > > +++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-
> > > > snfi.yaml
> > > > @@ -45,6 +45,13 @@ properties:
> > > >        description: device-tree node of the accompanying ECC
> > > > engine.
> > > >        $ref: /schemas/types.yaml#/definitions/phandle
> > > >    
> > > > +  mediatek,rx-latch-latency:
> > > > +    description: Rx delay to sample data with this value, the
> > > > value
> > > > +                 unit is clock cycle.
> > > 
> > > Can't we use nanoseconds or microseconds as a unit here, instead
> > > of
> > > clock cycles?
> > 
> > The clock cycle will be various with MediaTek SPI NAND controller
> > which
> > clock frequency can support 26/52/68/81/104MHz...
> > It`s may be easy to configure and understand with clock cycle in
> > unit.
> > 
> 
> Yes, but whatever clock frequency we use, the target is to always
> wait for
> X nanoseconds, right?
> 
> Waiting for 5 clock cycles at 104MHz is obviously not the same as
> waiting
> for the same 5 clock cycles at 26MHz: in that case, expressing the
> value
> in nanoseconds or microseconds would make that independent from the
> controller's clock frequency as the calculation from `time` to
> `cycles`
> would be performed inside of the driver.

There have two rx related timing properties in spi-peripheral-props.
The rx-sample-delay-ns have been used in Mediatek snfi driver to adjust
controller sample delay.
However another spi-rx-delay-us is in microseconds. Take 52MHz for
example, the clock cycle will be 19.23ns which lower than 1us. This may
not easy to by one clock cycle.

Thanks
Xiangsheng Hou

From Yanchao.Yang at mediatek.com  Tue Dec  6 18:33:54 2022
From: Yanchao.Yang at mediatek.com (=?utf-8?B?WWFuY2hhbyBZYW5nICjmnajlvabotoUp?=)
Date: Wed, 7 Dec 2022 02:33:54 +0000
Subject: [PATCH net-next v1 01/13] net: wwan: tmi: Add PCIe core
In-Reply-To: <64aada78-8029-1b05-b802-a005549503c9@gmail.com>
References: <20221122111152.160377-1-yanchao.yang@mediatek.com>
	 <20221122111152.160377-2-yanchao.yang@mediatek.com>
	 <64aada78-8029-1b05-b802-a005549503c9@gmail.com>
Message-ID: <8878ed64fadfda9b3d3c8cd8b4564dd9019349b6.camel@mediatek.com>

Hello Sergey,

On Sun, 2022-12-04 at 22:52 +0400, Sergey Ryazanov wrote:
> Hello Yanchao,
> 
> On 22.11.2022 15:11, Yanchao Yang wrote:
> > From: MediaTek Corporation <linuxwwan at mediatek.com>
> > 
> > Registers the TMI device driver with the kernel. Set up all the
> > fundamental
> > configurations for the device: PCIe layer, Modem Host Cross Core
> > Interface
> > (MHCCIF), Reset Generation Unit (RGU), modem common control
> > operations and
> > build infrastructure.
> > 
> > * PCIe layer code implements driver probe and removal, MSI-X
> > interrupt
> > initialization and de-initialization, and the way of resetting the
> > device.
> > * MHCCIF provides interrupt channels to communicate events such as
> > handshake,
> > PM and port enumeration.
> > * RGU provides interrupt channels to generate notifications from
> > the device
> > so that the TMI driver could get the device reset.
> > * Modem common control operations provide the basic read/write
> > functions of
> > the device's hardware registers, mask/unmask/get/clear functions of
> > the
> > device's interrupt registers and inquiry functions of the device's
> > status.
> > 
> > Signed-off-by: Ting Wang <ting.wang at mediatek.com>
> > Signed-off-by: MediaTek Corporation <linuxwwan at mediatek.com>
> > ---
> >   drivers/net/wwan/Kconfig                 |   11 +
> >   drivers/net/wwan/Makefile                |    1 +
> >   drivers/net/wwan/mediatek/Makefile       |   12 +
> >   drivers/net/wwan/mediatek/mtk_common.h   |   30 +
> >   drivers/net/wwan/mediatek/mtk_dev.c      |   50 +
> >   drivers/net/wwan/mediatek/mtk_dev.h      |  503 ++++++++++
> >   drivers/net/wwan/mediatek/pcie/mtk_pci.c | 1164
> > ++++++++++++++++++++++
> >   drivers/net/wwan/mediatek/pcie/mtk_pci.h |  150 +++
> >   drivers/net/wwan/mediatek/pcie/mtk_reg.h |   69 ++
> >   9 files changed, 1990 insertions(+)
> >   create mode 100644 drivers/net/wwan/mediatek/Makefile
> >   create mode 100644 drivers/net/wwan/mediatek/mtk_common.h
> >   create mode 100644 drivers/net/wwan/mediatek/mtk_dev.c
> >   create mode 100644 drivers/net/wwan/mediatek/mtk_dev.h
> >   create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_pci.c
> >   create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_pci.h
> >   create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_reg.h
> > 
> > diff --git a/drivers/net/wwan/Kconfig b/drivers/net/wwan/Kconfig
> > index 3486ffe94ac4..a93a0c511d50 100644
> > --- a/drivers/net/wwan/Kconfig
> > +++ b/drivers/net/wwan/Kconfig
> > @@ -119,6 +119,17 @@ config MTK_T7XX
> >   
> >   	  If unsure, say N.
> >   
> > +config MTK_TMI
> > +	tristate "TMI Driver for Mediatek T-series Device"
> > +	depends on PCI
> > +	help
> > +	  This driver enables Mediatek T-series WWAN Device
> > communication.
> > +
> > +	  If you have one of those Mediatek T-series WWAN Modules and
> > wish to
> > +	  use it in Linux say Y/M here.
> 
>  From this and the series descriptions, it is unclear which modem
> chips 
> this driver is intended for and how does it correlate with the T7xx 
> driver? Is the TMI driver a drop-in replacement for the t7xx driver,
> or 
> does the TMI driver support any T-series chips except t7xx?
The driver is intended for t8xx or later T-series modem chips in the
future. Currently, t7xx is not support.
> 
> > +
> > +	  If unsure, say N.
> > +
> >   endif # WWAN
> >   
> >   endmenu
> > diff --git a/drivers/net/wwan/Makefile b/drivers/net/wwan/Makefile
> > index 3960c0ae2445..198d8074851f 100644
> > --- a/drivers/net/wwan/Makefile
> > +++ b/drivers/net/wwan/Makefile
> > @@ -14,3 +14,4 @@ obj-$(CONFIG_QCOM_BAM_DMUX) += qcom_bam_dmux.o
> >   obj-$(CONFIG_RPMSG_WWAN_CTRL) += rpmsg_wwan_ctrl.o
> >   obj-$(CONFIG_IOSM) += iosm/
> >   obj-$(CONFIG_MTK_T7XX) += t7xx/
> > +obj-$(CONFIG_MTK_TMI) += mediatek/
> 
> The driver is called mtk_tmi, but its code is placed to the
> directory 
> with too generic name 'mediatek'. Do you plan too keep all possible 
> future drivers in this directory?
Yes, we plan to put all mediatek's wwan driver into the same directory.
Currently, there is only T-series modem driver. So we don't create
'tmi' folder under 'mediatek' directory explicitly.
> 
> --
> Sergey

Many thanks.
Yanchao.yang

From colin.foster at in-advantage.com  Tue Dec  6 18:49:22 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Tue, 6 Dec 2022 18:49:22 -0800
Subject: [PATCH v4 net-next 8/9] dt-bindings: net: add generic
 ethernet-switch-port binding
In-Reply-To: <20221206155049.erpgwrvt5gzdf2e6@skbuf>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-9-colin.foster@in-advantage.com>
 <20221202204559.162619-9-colin.foster@in-advantage.com>
 <20221206155049.erpgwrvt5gzdf2e6@skbuf>
Message-ID: <Y4//Mtb0a3VHDN+K@euler>

On Tue, Dec 06, 2022 at 05:50:49PM +0200, Vladimir Oltean wrote:
> On Fri, Dec 02, 2022 at 12:45:58PM -0800, Colin Foster wrote:
> > --- a/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
> > @@ -4,7 +4,7 @@
> >  $id: http://devicetree.org/schemas/net/dsa/dsa-port.yaml#
> >  $schema: http://devicetree.org/meta-schemas/core.yaml#
> >  
> > -title: Ethernet Switch port Device Tree Bindings
> > +title: Generic DSA Switch port
> 
> What are the capitalization rules in titles? Looks odd that "port" is
> lowercase but "switch" isn't.

Agreed. A quick grep for "title:\ " shows... a fair amount of
inconsistency. I'd lean toward Port. [insert nautical and/or fortified
wine joke here]

> 
> >  
> >  maintainers:
> >    - Andrew Lunn <andrew at lunn.ch>
> > @@ -14,8 +14,7 @@ maintainers:
> >  description:
> >    Ethernet switch port Description
> >  
> > -allOf:
> > -  - $ref: /schemas/net/ethernet-controller.yaml#
> > +$ref: /schemas/net/ethernet-switch-port.yaml#
> >  
> >  properties:
> >    reg:
> > @@ -58,25 +57,6 @@ properties:
> >        - rtl8_4t
> >        - seville
> >  
> > -  phy-handle: true
> > -
> > -  phy-mode: true
> > -
> > -  fixed-link: true
> > -
> > -  mac-address: true
> > -
> > -  sfp: true
> > -
> > -  managed: true
> > -
> > -  rx-internal-delay-ps: true
> > -
> > -  tx-internal-delay-ps: true
> > -
> > -required:
> > -  - reg
> > -
> >  # CPU and DSA ports must have phylink-compatible link descriptions
> >  if:
> >    oneOf:
> > diff --git a/Documentation/devicetree/bindings/net/ethernet-switch-port.yaml b/Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
> > new file mode 100644
> > index 000000000000..3d7da6916fb8
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
> > @@ -0,0 +1,25 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/net/ethernet-switch-port.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Generic Ethernet Switch port
> > +
> > +maintainers:
> > +  - Andrew Lunn <andrew at lunn.ch>
> > +  - Florian Fainelli <f.fainelli at gmail.com>
> > +  - Vivien Didelot <vivien.didelot at gmail.com>
> > +
> > +description:
> > +  Ethernet switch port Description
> 
> Sounds a bit too "lorem ipsum dolor sit amet". You can say that a port
> is a component of a switch which manages one MAC, and can pass Ethernet
> frames.

Good suggestion again. Happy to change this as well. I'm planning to
send an update late tomorrow (Wednesday) to give a couple days before
Sunday. Hopefully that's enough time for any suggestions on these last
couple issues.



From colin.foster at in-advantage.com  Tue Dec  6 19:07:54 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Tue, 6 Dec 2022 19:07:54 -0800
Subject: [PATCH v4 net-next 0/9] dt-binding preparation for ocelot
 switches
In-Reply-To: <20221206160430.4kiyrzrumcc6dp2g@skbuf>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221206160430.4kiyrzrumcc6dp2g@skbuf>
Message-ID: <Y5ADis5/a0KrHM10@euler>

On Tue, Dec 06, 2022 at 06:04:30PM +0200, Vladimir Oltean wrote:
> Hi Colin,
> 
> On Fri, Dec 02, 2022 at 12:45:50PM -0800, Colin Foster wrote:
> > Ocelot switches have the abilitiy to be used internally via
> > memory-mapped IO or externally via SPI or PCIe. This brings up issues
> > for documentation, where the same chip might be accessed internally in a
> > switchdev manner, or externally in a DSA configuration. This patch set
> > is perparation to bring DSA functionality to the VSC7512, utilizing as
> > much as possible with an almost identical VSC7514 chip.
> > 
> > This patch set changed quite a bit from v2, so I'll omit the background
> > of how those sets came to be. Rob offered a lot of very useful guidance.
> > My thanks.
> > 
> > At the end of the day, with this patch set, there should be a framework
> > to document Ocelot switches (and any switch) in scenarios where they can
> > be controlled internally (ethernet-switch) or externally (dsa-switch).
> > 
> > ---
> 
> This looks like a very clean implementation of what I had in mind
> (better than I could have done it). Sorry for not being able to help
> with the json-schema bits and thanks to Rob for doing so.

It seems like it worked out well. Thanks Rob for all the help on this!

> 
> Would you mind adding one more patch at the beginning of the series
> which syncs the maintainers from the DSA (and now also ethernet-switch)
> dt-bindings with the MAINTAINERS file? That would mean removing Vivien
> (see commit 6ce3df596be2 ("MAINTAINERS: Move Vivien to CREDITS")) and
> adding myself. This is in principle such that you don't carry around a
> not-up-to-date list of maintainers when adding new schemas.

Yep. I'll get that in the next set.

> 
> I don't know if we could do something about maintainer entries in
> schemas not becoming out of date w.r.t. the MAINTAINERS file.

Sounds like a nice feature. Maybe part of dt_binding_check / checkpatch?
I'm running out of hours in a day...


From patchwork-bot+netdevbpf at kernel.org  Tue Dec  6 20:50:17 2022
From: patchwork-bot+netdevbpf at kernel.org (patchwork-bot+netdevbpf at kernel.org)
Date: Wed, 07 Dec 2022 04:50:17 +0000
Subject: [PATCH v2 net-next] net: ethernet: mtk_wed: add reset to
 rx_ring_setup callback
In-Reply-To: <29c6e7a5469e784406cf3e2920351d1207713d05.1670239984.git.lorenzo@kernel.org>
References: <29c6e7a5469e784406cf3e2920351d1207713d05.1670239984.git.lorenzo@kernel.org>
Message-ID: <167038861707.25696.6418625611096340423.git-patchwork-notify@kernel.org>

Hello:

This patch was applied to netdev/net-next.git (master)
by Jakub Kicinski <kuba at kernel.org>:

On Mon,  5 Dec 2022 12:34:42 +0100 you wrote:
> This patch adds reset parameter to mtk_wed_rx_ring_setup signature
> in order to align rx_ring_setup callback to tx_ring_setup one introduced
> in 'commit 23dca7a90017 ("net: ethernet: mtk_wed: add reset to
> tx_ring_setup callback")'
> 
> Co-developed-by: Sujuan Chen <sujuan.chen at mediatek.com>
> Signed-off-by: Sujuan Chen <sujuan.chen at mediatek.com>
> Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> 
> [...]

Here is the summary with links:
  - [v2,net-next] net: ethernet: mtk_wed: add reset to rx_ring_setup callback
    https://git.kernel.org/netdev/net-next/c/ed883bec679b

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html




From howard-yh.hsu at mediatek.com  Tue Dec  6 21:25:00 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Wed, 7 Dec 2022 13:25:00 +0800
Subject: [PATCH v2 3/3] wifi: mt76: mt7915: rework mt7915_mcu_set_thermal_throttling()
In-Reply-To: <20221207052500.10855-1-howard-yh.hsu@mediatek.com>
References: <20221207052500.10855-1-howard-yh.hsu@mediatek.com>
Message-ID: <20221207052500.10855-4-howard-yh.hsu@mediatek.com>

Firmware expects to disable thermal protect first before reconfiguring.

Fixes: 34b877d972be ("mt76: mt7915: add thermal cooling device support")
Signed-off-by: Howard Hsu <howard-yh.hsu at mediatek.com>
---
 .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
index b2652de082ba..176d293eb32a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
@@ -3070,19 +3070,22 @@ int mt7915_mcu_set_thermal_throttling(struct mt7915_phy *phy, u8 state)
 	} __packed req = {
 		.ctrl = {
 			.band_idx = phy->mt76->band_idx,
+			.type.protect_type = 1,
+			.type.trigger_type = 1,
 		},
 	};
-	int level;
+	int level, ret;
 
-	if (!state) {
-		req.ctrl.ctrl_id = THERMAL_PROTECT_DISABLE;
-		goto out;
-	}
+	req.ctrl.ctrl_id = THERMAL_PROTECT_DISABLE;
+
+	ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(THERMAL_PROT),
+				&req, sizeof(req.ctrl), false);
+
+	if (ret || !state)
+		return ret;
 
 	/* set duty cycle and level */
 	for (level = 0; level < 4; level++) {
-		int ret;
-
 		req.ctrl.ctrl_id = THERMAL_PROTECT_DUTY_CONFIG;
 		req.ctrl.duty.duty_level = level;
 		req.ctrl.duty.duty_cycle = state;
@@ -3100,8 +3103,6 @@ int mt7915_mcu_set_thermal_throttling(struct mt7915_phy *phy, u8 state)
 	req.restore_temp = cpu_to_le32(phy->throttle_temp[0] - 10);
 	req.trigger_temp = cpu_to_le32(phy->throttle_temp[1]);
 	req.sustain_time = cpu_to_le16(10);
-
-out:
 	req.ctrl.type.protect_type = 1;
 	req.ctrl.type.trigger_type = 1;
 
-- 
2.18.0



From howard-yh.hsu at mediatek.com  Tue Dec  6 21:24:57 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Wed, 7 Dec 2022 13:24:57 +0800
Subject: [PATCH v2 0/3] wifi: mt76: mt7915: rework thermal protection
Message-ID: <20221207052500.10855-1-howard-yh.hsu@mediatek.com>

*** BLURB HERE ***

Howard Hsu (3):
  wifi: mt76: mt7915: rework mt7915_thermal_set_cur_throttle_state()
  wifi: mt76: mt7915: call mt7915_mcu_set_thermal_throttling() only
    after init_work
  wifi: mt76: mt7915: rework mt7915_mcu_set_thermal_throttling()

 .../net/wireless/mediatek/mt76/mt7915/init.c  | 21 ++++++++++---------
 .../net/wireless/mediatek/mt76/mt7915/main.c  |  5 +++++
 .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 19 +++++++++--------
 3 files changed, 26 insertions(+), 19 deletions(-)

-- 
2.18.0



From howard-yh.hsu at mediatek.com  Tue Dec  6 21:24:58 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Wed, 7 Dec 2022 13:24:58 +0800
Subject: [PATCH v2 1/3] wifi: mt76: mt7915: rework mt7915_thermal_set_cur_throttle_state()
In-Reply-To: <20221207052500.10855-1-howard-yh.hsu@mediatek.com>
References: <20221207052500.10855-1-howard-yh.hsu@mediatek.com>
Message-ID: <20221207052500.10855-2-howard-yh.hsu@mediatek.com>

This patch includes 3 changes:
1. The maximum throttle state can be set to 100 to fix the problem that
thermal_protect_disable can never be triggered.
2. Throttle state do not need to be different from the previous state.
This will make it is impossible for users to just change the
trigger/restore temp but not the throttle state.
3. Add dev_err so that it is easier to see invalid setting while looking at dmesg.

Fixes: 771cd8d4c369 ("mt76: mt7915e: Fix degraded performance after temporary overheat")
Co-developed-by: Ryder Lee <ryder.lee at mediatek.com>
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
Signed-off-by: Howard Hsu <howard-yh.hsu at mediatek.com>
---
 .../net/wireless/mediatek/mt76/mt7915/init.c   | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
index c810c31fbd6e..abeecf15f1c8 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
@@ -131,14 +131,17 @@ mt7915_thermal_set_cur_throttle_state(struct thermal_cooling_device *cdev,
 	u8 throttling = MT7915_THERMAL_THROTTLE_MAX - state;
 	int ret;
 
-	if (state > MT7915_CDEV_THROTTLE_MAX)
+	if (state > MT7915_THERMAL_THROTTLE_MAX) {
+		dev_err(phy->dev->mt76.dev,
+			"please specify a valid throttling state\n");
 		return -EINVAL;
+	}
 
-	if (phy->throttle_temp[0] > phy->throttle_temp[1])
-		return 0;
-
-	if (state == phy->cdev_state)
-		return 0;
+	if (phy->throttle_temp[0] > phy->throttle_temp[1]) {
+		dev_err(phy->dev->mt76.dev,
+			"temp1_crit shall not be greater than temp1_max\n");
+		return -EINVAL;
+	}
 
 	/*
 	 * cooling_device convention: 0 = no cooling, more = more cooling
@@ -164,7 +167,7 @@ static void mt7915_unregister_thermal(struct mt7915_phy *phy)
 	struct wiphy *wiphy = phy->mt76->hw->wiphy;
 
 	if (!phy->cdev)
-	    return;
+		return;
 
 	sysfs_remove_link(&wiphy->dev.kobj, "cooling_device");
 	thermal_cooling_device_unregister(phy->cdev);
@@ -1101,7 +1104,6 @@ static void mt7915_stop_hardware(struct mt7915_dev *dev)
 		mt7986_wmac_disable(dev);
 }
 
-
 int mt7915_register_device(struct mt7915_dev *dev)
 {
 	struct ieee80211_hw *hw = mt76_hw(dev);
-- 
2.18.0



From howard-yh.hsu at mediatek.com  Tue Dec  6 21:24:59 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Wed, 7 Dec 2022 13:24:59 +0800
Subject: [PATCH v2 2/3] wifi: mt76: mt7915: call mt7915_mcu_set_thermal_throttling() only after init_work
In-Reply-To: <20221207052500.10855-1-howard-yh.hsu@mediatek.com>
References: <20221207052500.10855-1-howard-yh.hsu@mediatek.com>
Message-ID: <20221207052500.10855-3-howard-yh.hsu@mediatek.com>

Enable thermal management by default shall not be executed during mcu
init. This causes thermal configuration being reset to the firmware
default settings.

Fixes: 0063b86c9120 ("mt76: mt7915e: Enable thermal management by default")
Signed-off-by: Howard Hsu <howard-yh.hsu at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7915/init.c | 3 +--
 drivers/net/wireless/mediatek/mt76/mt7915/main.c | 5 +++++
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
index abeecf15f1c8..8f4561eed5db 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
@@ -204,8 +204,7 @@ static int mt7915_thermal_init(struct mt7915_phy *phy)
 	phy->throttle_temp[0] = 110;
 	phy->throttle_temp[1] = 120;
 
-	return mt7915_mcu_set_thermal_throttling(phy,
-						 MT7915_THERMAL_THROTTLE_MAX);
+	return 0;
 }
 
 static void mt7915_led_set_config(struct led_classdev *led_cdev,
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
index 0511d6a505b0..fc87216e40b1 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
@@ -57,6 +57,11 @@ int mt7915_run(struct ieee80211_hw *hw)
 		mt7915_mac_enable_nf(dev, phy->mt76->band_idx);
 	}
 
+	ret = mt7915_mcu_set_thermal_throttling(phy, MT7915_THERMAL_THROTTLE_MAX);
+
+	if (ret)
+		goto out;
+
 	ret = mt76_connac_mcu_set_rts_thresh(&dev->mt76, 0x92b,
 					     phy->mt76->band_idx);
 	if (ret)
-- 
2.18.0



From allen-kh.cheng at mediatek.com  Tue Dec  6 21:51:04 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Wed, 7 Dec 2022 13:51:04 +0800
Subject: [PATCH v6 0/3] Add vcodec lat and core nodes for mt8192
Message-ID: <20221207055107.11333-1-allen-kh.cheng@mediatek.com>

This series is based on linux-next.

Change from v5:
 - Add required interrupts for mediatek,mtk-vcodec-core
 - Rewrite commit message for 'Remove "dma-ranges" property for decoder' PATCH

Change from v4:
 - Add patch for removing dma-ranges
 - Update child names to video-codec
 - Update patch title and message

Change from v3:
 - Drop `vcodec_lat:` and `vcodec_core:`

Change from v2:
 - Add a dt-bindings patch for changing "vcodec" to "video-codec"
 - Rename child names for vcodec lat and core nodes

Change from v1:
 - Replace node names with video-codec
  [Allen-KH Cheng <allen-kh.cheng at mediatek.com>]

Allen-KH Cheng (3):
  media: dt-bindings: media: mediatek: Rename child node names for
    decoder
  media: dt-bindings: media: mediatek: Remove "dma-ranges" property for
    decoder
  arm64: dts: mt8192: Add video-codec nodes

 .../media/mediatek,vcodec-subdev-decoder.yaml | 68 ++-----------------
 arch/arm64/boot/dts/mediatek/mt8192.dtsi      | 59 ++++++++++++++++
 2 files changed, 64 insertions(+), 63 deletions(-)

-- 
2.18.0



From deren.wu at mediatek.com  Tue Dec  6 21:03:41 2022
From: deren.wu at mediatek.com (Deren Wu)
Date: Wed, 7 Dec 2022 13:03:41 +0800
Subject: [PATCH] wifi: mt76: mt7921: add support to update fw capability with MTFG table
Message-ID: <ef603fd5b6aa31e92cd45646d9a4db4fe30bc347.1670389254.git.deren.wu@mediatek.com>

From: Quan Zhou <quan.zhou at mediatek.com>

In ACPI enabled devices, mt7921 should read MTFG table from platform
hardware. Apply necessary settings for firmware capabilities through CLC
command.

Co-developed-by: Deren Wu <deren.wu at mediatek.com>
Signed-off-by: Deren Wu <deren.wu at mediatek.com>
Signed-off-by: Quan Zhou <quan.zhou at mediatek.com>
---
 .../wireless/mediatek/mt76/mt7921/acpi_sar.c  | 55 +++++++++++++++++++
 .../wireless/mediatek/mt76/mt7921/acpi_sar.h  | 12 ++++
 .../net/wireless/mediatek/mt76/mt7921/mcu.c   |  4 +-
 .../wireless/mediatek/mt76/mt7921/mt7921.h    |  7 +++
 4 files changed, 77 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.c b/drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.c
index 47e034a9b003..a98d0fb42d0a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.c
@@ -135,6 +135,22 @@ mt7921_asar_acpi_read_mtgs(struct mt7921_dev *dev, u8 **table, u8 version)
 	return ret;
 }
 
+/* MTFG : Flag Table */
+static int
+mt7921_asar_acpi_read_mtfg(struct mt7921_dev *dev, u8 **table)
+{
+	int len, ret;
+
+	ret = mt7921_acpi_read(dev, MT7921_ACPI_MTFG, table, &len);
+	if (ret)
+		return ret;
+
+	if (len < MT7921_ASAR_MIN_FG)
+		ret = -EINVAL;
+
+	return ret;
+}
+
 int mt7921_init_acpi_sar(struct mt7921_dev *dev)
 {
 	struct mt7921_acpi_sar *asar;
@@ -162,6 +178,12 @@ int mt7921_init_acpi_sar(struct mt7921_dev *dev)
 		asar->geo = NULL;
 	}
 
+	/* MTFG is optional */
+	ret = mt7921_asar_acpi_read_mtfg(dev, (u8 **)&asar->fg);
+	if (ret) {
+		devm_kfree(dev->mt76.dev, asar->fg);
+		asar->fg = NULL;
+	}
 	dev->phy.acpisar = asar;
 
 	return 0;
@@ -280,3 +302,36 @@ int mt7921_init_acpi_sar_power(struct mt7921_phy *phy, bool set_default)
 
 	return 0;
 }
+
+u8 mt7921_acpi_get_flags(struct mt7921_phy *phy)
+{
+	struct mt7921_asar_fg *fg;
+	struct {
+		u8 acpi_idx;
+		u8 chip_idx;
+	} map[] = {
+		{1, 1},
+		{4, 2},
+	};
+	u8 flags = BIT(0);
+	int i, j;
+
+	if (!phy->acpisar)
+		return 0;
+
+	fg = phy->acpisar->fg;
+	if (!fg)
+		return flags;
+
+	/* pickup necessary settings per device and
+	 * translate the index of bitmap for chip command.
+	 */
+	for (i = 0; i < fg->nr_flag; i++)
+		for (j = 0; j < ARRAY_SIZE(map); j++)
+			if (fg->flag[i] == map[j].acpi_idx) {
+				flags |= BIT(map[j].chip_idx);
+				break;
+			}
+
+	return flags;
+}
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.h b/drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.h
index 23f86bfae0c0..35268b0890ad 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.h
@@ -8,10 +8,12 @@
 #define MT7921_ASAR_MAX_DYN		8
 #define MT7921_ASAR_MIN_GEO		3
 #define MT7921_ASAR_MAX_GEO		8
+#define MT7921_ASAR_MIN_FG		8
 
 #define MT7921_ACPI_MTCL		"MTCL"
 #define MT7921_ACPI_MTDS		"MTDS"
 #define MT7921_ACPI_MTGS		"MTGS"
+#define MT7921_ACPI_MTFG		"MTFG"
 
 struct mt7921_asar_dyn_limit {
 	u8 idx;
@@ -77,6 +79,15 @@ struct mt7921_asar_cl {
 	u8 cl6g[6];
 } __packed;
 
+struct mt7921_asar_fg {
+	u8 names[4];
+	u8 version;
+	u8 rsvd;
+	u8 nr_flag;
+	u8 rsvd1;
+	u8 flag[0];
+} __packed;
+
 struct mt7921_acpi_sar {
 	u8 ver;
 	union {
@@ -88,6 +99,7 @@ struct mt7921_acpi_sar {
 		struct mt7921_asar_geo_v2 *geo_v2;
 	};
 	struct mt7921_asar_cl *countrylist;
+	struct mt7921_asar_fg *fg;
 };
 
 #endif
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
index fb9c0f66cb27..8930b5a4467c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
@@ -1184,13 +1184,15 @@ int __mt7921_mcu_set_clc(struct mt7921_dev *dev, u8 *alpha2,
 		__le16 len;
 		u8 idx;
 		u8 env;
-		u8 pad1[2];
+		u8 acpi_conf;
+		u8 pad1;
 		u8 alpha2[2];
 		u8 type[2];
 		u8 rsvd[64];
 	} __packed req = {
 		.idx = idx,
 		.env = env_cap,
+		.acpi_conf = mt7921_acpi_get_flags(&dev->phy),
 	};
 	int ret, valid_cnt = 0;
 	u8 i, *pos;
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
index 15d6b7fe1c6c..efff4d43d796 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
@@ -554,6 +554,7 @@ int mt7921_mcu_uni_add_beacon_offload(struct mt7921_dev *dev,
 #ifdef CONFIG_ACPI
 int mt7921_init_acpi_sar(struct mt7921_dev *dev);
 int mt7921_init_acpi_sar_power(struct mt7921_phy *phy, bool set_default);
+u8 mt7921_acpi_get_flags(struct mt7921_phy *phy);
 #else
 static inline int
 mt7921_init_acpi_sar(struct mt7921_dev *dev)
@@ -566,6 +567,12 @@ mt7921_init_acpi_sar_power(struct mt7921_phy *phy, bool set_default)
 {
 	return 0;
 }
+
+static inline u8
+mt7921_acpi_get_flags(struct mt7921_phy *phy)
+{
+	return 0;
+}
 #endif
 int mt7921_set_tx_sar_pwr(struct ieee80211_hw *hw,
 			  const struct cfg80211_sar_specs *sar);
-- 
2.18.0



From allen-kh.cheng at mediatek.com  Tue Dec  6 21:51:05 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Wed, 7 Dec 2022 13:51:05 +0800
Subject: [PATCH v6 1/3] media: dt-bindings: media: mediatek: Rename child node names for decoder
In-Reply-To: <20221207055107.11333-1-allen-kh.cheng@mediatek.com>
References: <20221207055107.11333-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221207055107.11333-2-allen-kh.cheng@mediatek.com>

In order to make the names of the child nodes more generic, we rename
"vcodec-lat" and "vcodec-core" to "video-codec" for decoder in
patternProperties and example.

Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../media/mediatek,vcodec-subdev-decoder.yaml | 61 ++-----------------
 1 file changed, 5 insertions(+), 56 deletions(-)

diff --git a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
index c4f20acdc1f8..46308cdaacc0 100644
--- a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
+++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
@@ -91,12 +91,13 @@ properties:
 
 # Required child node:
 patternProperties:
-  '^vcodec-lat@[0-9a-f]+$':
+  '^video-codec@[0-9a-f]+$':
     type: object
 
     properties:
       compatible:
         enum:
+          - mediatek,mtk-vcodec-core
           - mediatek,mtk-vcodec-lat
           - mediatek,mtk-vcodec-lat-soc
 
@@ -145,59 +146,6 @@ patternProperties:
 
     additionalProperties: false
 
-  '^vcodec-core@[0-9a-f]+$':
-    type: object
-
-    properties:
-      compatible:
-        const: mediatek,mtk-vcodec-core
-
-      reg:
-        maxItems: 1
-
-      interrupts:
-        maxItems: 1
-
-      iommus:
-        minItems: 1
-        maxItems: 32
-        description: |
-          List of the hardware port in respective IOMMU block for current Socs.
-          Refer to bindings/iommu/mediatek,iommu.yaml.
-
-      clocks:
-        maxItems: 5
-
-      clock-names:
-        items:
-          - const: sel
-          - const: soc-vdec
-          - const: soc-lat
-          - const: vdec
-          - const: top
-
-      assigned-clocks:
-        maxItems: 1
-
-      assigned-clock-parents:
-        maxItems: 1
-
-      power-domains:
-        maxItems: 1
-
-    required:
-      - compatible
-      - reg
-      - interrupts
-      - iommus
-      - clocks
-      - clock-names
-      - assigned-clocks
-      - assigned-clock-parents
-      - power-domains
-
-    additionalProperties: false
-
 required:
   - compatible
   - reg
@@ -211,6 +159,7 @@ if:
     compatible:
       contains:
         enum:
+          - mediatek,mtk-vcodec-core
           - mediatek,mtk-vcodec-lat
 
 then:
@@ -241,7 +190,7 @@ examples:
             #size-cells = <2>;
             ranges = <0 0 0 0x16000000 0 0x40000>;
             reg = <0 0x16000000 0 0x1000>;		/* VDEC_SYS */
-            vcodec-lat at 10000 {
+            video-codec at 10000 {
                 compatible = "mediatek,mtk-vcodec-lat";
                 reg = <0 0x10000 0 0x800>;
                 interrupts = <GIC_SPI 426 IRQ_TYPE_LEVEL_HIGH 0>;
@@ -264,7 +213,7 @@ examples:
                 power-domains = <&spm MT8192_POWER_DOMAIN_VDEC>;
             };
 
-            vcodec-core at 25000 {
+            video-codec at 25000 {
                 compatible = "mediatek,mtk-vcodec-core";
                 reg = <0 0x25000 0 0x1000>;
                 interrupts = <GIC_SPI 425 IRQ_TYPE_LEVEL_HIGH 0>;
-- 
2.18.0



From allen-kh.cheng at mediatek.com  Tue Dec  6 21:51:06 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Wed, 7 Dec 2022 13:51:06 +0800
Subject: [PATCH v6 2/3] media: dt-bindings: media: mediatek: Remove "dma-ranges" property for decoder
In-Reply-To: <20221207055107.11333-1-allen-kh.cheng@mediatek.com>
References: <20221207055107.11333-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221207055107.11333-3-allen-kh.cheng@mediatek.com>

Because the decoder nodes already make use of the iommus property to
configure the IOMMU for address translations, having a dma-ranges
property makes no sense.

In fact, after commit f1ad5338a4d5 ("of: Fix "dma-ranges" handling for
bus controllers"), having a dma-ranges property causes IOMMU faults.

Remove the dma-ranges property and update the example.

Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Acked-by: Rob Herring <robh at kernel.org>
Reviewed-by: N?colas F. R. A. Prado <nfraprado at collabora.com>
---
 .../bindings/media/mediatek,vcodec-subdev-decoder.yaml     | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
index 46308cdaacc0..7efc70ae4406 100644
--- a/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
+++ b/Documentation/devicetree/bindings/media/mediatek,vcodec-subdev-decoder.yaml
@@ -76,11 +76,6 @@ properties:
       The node of system control processor (SCP), using
       the remoteproc & rpmsg framework.
 
-  dma-ranges:
-    maxItems: 1
-    description: |
-      Describes the physical address space of IOMMU maps to memory.
-
   "#address-cells":
     const: 2
 
@@ -151,7 +146,6 @@ required:
   - reg
   - iommus
   - mediatek,scp
-  - dma-ranges
   - ranges
 
 if:
@@ -185,7 +179,6 @@ examples:
             compatible = "mediatek,mt8192-vcodec-dec";
             mediatek,scp = <&scp>;
             iommus = <&iommu0 M4U_PORT_L4_VDEC_MC_EXT>;
-            dma-ranges = <0x1 0x0 0x0 0x40000000 0x0 0xfff00000>;
             #address-cells = <2>;
             #size-cells = <2>;
             ranges = <0 0 0 0x16000000 0 0x40000>;
-- 
2.18.0



From bayi.cheng at mediatek.com  Tue Dec  6 21:54:35 2022
From: bayi.cheng at mediatek.com (Bayi Cheng)
Date: Wed, 7 Dec 2022 13:54:35 +0800
Subject: [PATCH v2] spi: spi-mtk-nor: Add recovery mechanism for dma read timeout
Message-ID: <20221207055435.30557-1-bayi.cheng@mediatek.com>

From: bayi cheng <bayi.cheng at mediatek.com>

The state machine of MTK spi nor controller may be disturbed by some
glitch signals from the relevant BUS during dma read, Although the
possibility of causing the dma read to fail is next to nothing,
However, if error-handling is not implemented, which makes the feature
somewhat risky.

Add an error-handling mechanism here, reset the state machine and
re-read the data when an error occurs.

Signed-off-by: bayi cheng <bayi.cheng at mediatek.com>
---
Change in v2:
  -Add a new function mtk_nor_reset() to reset host state machine.

Change in v1:
  -Reset the state machine when dma read fails and read again.
---
---
 drivers/spi/spi-mtk-nor.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/spi/spi-mtk-nor.c b/drivers/spi/spi-mtk-nor.c
index d167699a1a96..d07f50337f43 100644
--- a/drivers/spi/spi-mtk-nor.c
+++ b/drivers/spi/spi-mtk-nor.c
@@ -80,6 +80,9 @@
 #define MTK_NOR_REG_DMA_FADR		0x71c
 #define MTK_NOR_REG_DMA_DADR		0x720
 #define MTK_NOR_REG_DMA_END_DADR	0x724
+#define MTK_NOR_REG_CG_DIS		0x728
+#define MTK_NOR_SFC_SW_RST		BIT(2)
+
 #define MTK_NOR_REG_DMA_DADR_HB		0x738
 #define MTK_NOR_REG_DMA_END_DADR_HB	0x73c
 
@@ -147,6 +150,15 @@ static inline int mtk_nor_cmd_exec(struct mtk_nor *sp, u32 cmd, ulong clk)
 	return ret;
 }
 
+static void mtk_nor_reset(struct mtk_nor *sp)
+{
+	mtk_nor_rmw(sp, MTK_NOR_REG_CG_DIS, 0, MTK_NOR_SFC_SW_RST);
+	mb(); /* flush previous writes */
+	mtk_nor_rmw(sp, MTK_NOR_REG_CG_DIS, MTK_NOR_SFC_SW_RST, 0);
+	mb(); /* flush previous writes */
+	writel(MTK_NOR_ENABLE_SF_CMD, sp->base + MTK_NOR_REG_WP);
+}
+
 static void mtk_nor_set_addr(struct mtk_nor *sp, const struct spi_mem_op *op)
 {
 	u32 addr = op->addr.val;
@@ -616,7 +628,15 @@ static int mtk_nor_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)
 			mtk_nor_set_addr(sp, op);
 			return mtk_nor_read_pio(sp, op);
 		} else {
-			return mtk_nor_read_dma(sp, op);
+			ret = mtk_nor_read_dma(sp, op);
+			if (unlikely(ret)) {
+				/* Handle rare bus glitch */
+				mtk_nor_reset(sp);
+				mtk_nor_setup_bus(sp, op);
+				return mtk_nor_read_dma(sp, op);
+			}
+
+			return ret;
 		}
 	}
 
-- 
2.18.0



From allen-kh.cheng at mediatek.com  Tue Dec  6 21:51:07 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Wed, 7 Dec 2022 13:51:07 +0800
Subject: [PATCH v6 3/3] arm64: dts: mt8192: Add video-codec nodes
In-Reply-To: <20221207055107.11333-1-allen-kh.cheng@mediatek.com>
References: <20221207055107.11333-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221207055107.11333-4-allen-kh.cheng@mediatek.com>

Add video-codec lat and core nodes for mt8192 SoC.

Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: N?colas F. R. A. Prado <nfraprado at collabora.com>
Tested-by: N?colas F. R. A. Prado <nfraprado at collabora.com>
---
 arch/arm64/boot/dts/mediatek/mt8192.dtsi | 59 ++++++++++++++++++++++++
 1 file changed, 59 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
index 6b20376191a7..fffddef5c92f 100644
--- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
@@ -1449,6 +1449,65 @@
 			power-domains = <&spm MT8192_POWER_DOMAIN_ISP2>;
 		};
 
+		vcodec_dec: video-codec at 16000000 {
+			compatible = "mediatek,mt8192-vcodec-dec";
+			reg = <0 0x16000000 0 0x1000>;
+			mediatek,scp = <&scp>;
+			iommus = <&iommu0 M4U_PORT_L4_VDEC_MC_EXT>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+			ranges = <0 0 0 0x16000000 0 0x26000>;
+
+			video-codec at 10000 {
+				compatible = "mediatek,mtk-vcodec-lat";
+				reg = <0x0 0x10000 0 0x800>;
+				interrupts = <GIC_SPI 426 IRQ_TYPE_LEVEL_HIGH 0>;
+				iommus = <&iommu0 M4U_PORT_L5_VDEC_LAT0_VLD_EXT>,
+					 <&iommu0 M4U_PORT_L5_VDEC_LAT0_VLD2_EXT>,
+					 <&iommu0 M4U_PORT_L5_VDEC_LAT0_AVC_MV_EXT>,
+					 <&iommu0 M4U_PORT_L5_VDEC_LAT0_PRED_RD_EXT>,
+					 <&iommu0 M4U_PORT_L5_VDEC_LAT0_TILE_EXT>,
+					 <&iommu0 M4U_PORT_L5_VDEC_LAT0_WDMA_EXT>,
+					 <&iommu0 M4U_PORT_L5_VDEC_LAT0_RG_CTRL_DMA_EXT>,
+					 <&iommu0 M4U_PORT_L5_VDEC_UFO_ENC_EXT>;
+				clocks = <&topckgen CLK_TOP_VDEC_SEL>,
+					 <&vdecsys_soc CLK_VDEC_SOC_VDEC>,
+					 <&vdecsys_soc CLK_VDEC_SOC_LAT>,
+					 <&vdecsys_soc CLK_VDEC_SOC_LARB1>,
+					 <&topckgen CLK_TOP_MAINPLL_D4>;
+				clock-names = "sel", "soc-vdec", "soc-lat", "vdec", "top";
+				assigned-clocks = <&topckgen CLK_TOP_VDEC_SEL>;
+				assigned-clock-parents = <&topckgen CLK_TOP_MAINPLL_D4>;
+				power-domains = <&spm MT8192_POWER_DOMAIN_VDEC>;
+			};
+
+			video-codec at 25000 {
+				compatible = "mediatek,mtk-vcodec-core";
+				reg = <0 0x25000 0 0x1000>;
+				interrupts = <GIC_SPI 425 IRQ_TYPE_LEVEL_HIGH 0>;
+				iommus = <&iommu0 M4U_PORT_L4_VDEC_MC_EXT>,
+					 <&iommu0 M4U_PORT_L4_VDEC_UFO_EXT>,
+					 <&iommu0 M4U_PORT_L4_VDEC_PP_EXT>,
+					 <&iommu0 M4U_PORT_L4_VDEC_PRED_RD_EXT>,
+					 <&iommu0 M4U_PORT_L4_VDEC_PRED_WR_EXT>,
+					 <&iommu0 M4U_PORT_L4_VDEC_PPWRAP_EXT>,
+					 <&iommu0 M4U_PORT_L4_VDEC_TILE_EXT>,
+					 <&iommu0 M4U_PORT_L4_VDEC_VLD_EXT>,
+					 <&iommu0 M4U_PORT_L4_VDEC_VLD2_EXT>,
+					 <&iommu0 M4U_PORT_L4_VDEC_AVC_MV_EXT>,
+					 <&iommu0 M4U_PORT_L4_VDEC_RG_CTRL_DMA_EXT>;
+				clocks = <&topckgen CLK_TOP_VDEC_SEL>,
+					 <&vdecsys CLK_VDEC_VDEC>,
+					 <&vdecsys CLK_VDEC_LAT>,
+					 <&vdecsys CLK_VDEC_LARB1>,
+					 <&topckgen CLK_TOP_MAINPLL_D4>;
+				clock-names = "sel", "soc-vdec", "soc-lat", "vdec", "top";
+				assigned-clocks = <&topckgen CLK_TOP_VDEC_SEL>;
+				assigned-clock-parents = <&topckgen CLK_TOP_MAINPLL_D4>;
+				power-domains = <&spm MT8192_POWER_DOMAIN_VDEC2>;
+			};
+		};
+
 		larb5: larb at 1600d000 {
 			compatible = "mediatek,mt8192-smi-larb";
 			reg = <0 0x1600d000 0 0x1000>;
-- 
2.18.0



From ryder.lee at mediatek.com  Tue Dec  6 23:30:05 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Wed, 7 Dec 2022 15:30:05 +0800
Subject: [PATCH 2/2] wifi: mt76: mt7915: fix unintended sign extension of mt7915_hw_queue_read()
In-Reply-To: <a882942479ff8f20189580a69174202b40210682.1670396836.git.ryder.lee@mediatek.com>
References: <a882942479ff8f20189580a69174202b40210682.1670396836.git.ryder.lee@mediatek.com>
Message-ID: <1c3c811a6f0a3ad54499729c1020e0504fea6c7d.1670396836.git.ryder.lee@mediatek.com>

In the expression "map[i].qid << 24" starts as u8, but is promoted to
"signed int", then sign-extended to type "unsigned long", which is not
intended. Cast to u32 to avoid the sign extension.

Fixes: 776ec4e77aa6 ("mt76: mt7915: rework debugfs queue info")
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c
index a7fdcd1f3d98..5a46813a59ea 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c
@@ -811,7 +811,7 @@ mt7915_hw_queue_read(struct seq_file *s, u32 size,
 		if (val & BIT(map[i].index))
 			continue;
 
-		ctrl = BIT(31) | (map[i].pid << 10) | (map[i].qid << 24);
+		ctrl = BIT(31) | (map[i].pid << 10) | ((u32)map[i].qid << 24);
 		mt76_wr(dev, MT_FL_Q0_CTRL, ctrl);
 
 		head = mt76_get_field(dev, MT_FL_Q2_CTRL,
-- 
2.18.0



From ryder.lee at mediatek.com  Tue Dec  6 23:30:04 2022
From: ryder.lee at mediatek.com (Ryder Lee)
Date: Wed, 7 Dec 2022 15:30:04 +0800
Subject: [PATCH 1/2] wifi: mt76: mt7996: fix unintended sign extension of mt7996_hw_queue_read()
Message-ID: <a882942479ff8f20189580a69174202b40210682.1670396836.git.ryder.lee@mediatek.com>

In the expression "map[i].qid << 24" starts as u8, but is promoted to
"signed int", then sign-extended to type "unsigned long", which is not
intended. Cast to u32 to avoid the sign extension.

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527813 ("Integer handling issues")
Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c
index 99b23aef53a5..3d4fbbbcc206 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c
@@ -457,7 +457,7 @@ mt7996_hw_queue_read(struct seq_file *s, u32 size,
 		if (val & BIT(map[i].index))
 			continue;
 
-		ctrl = BIT(31) | (map[i].pid << 10) | (map[i].qid << 24);
+		ctrl = BIT(31) | (map[i].pid << 10) | ((u32)map[i].qid << 24);
 		mt76_wr(dev, MT_FL_Q0_CTRL, ctrl);
 
 		head = mt76_get_field(dev, MT_FL_Q2_CTRL,
-- 
2.18.0



From nicolas.cavallari at green-communications.fr  Wed Dec  7 00:15:32 2022
From: nicolas.cavallari at green-communications.fr (Nicolas Cavallari)
Date: Wed, 7 Dec 2022 09:15:32 +0100
Subject: [PATCH v2 1/3] wifi: mt76: mt7915: rework
 mt7915_thermal_set_cur_throttle_state()
In-Reply-To: <20221207052500.10855-2-howard-yh.hsu@mediatek.com>
References: <20221207052500.10855-1-howard-yh.hsu@mediatek.com>
 <20221207052500.10855-2-howard-yh.hsu@mediatek.com>
Message-ID: <8e8cfe60-c040-bf02-665b-a980852864aa@green-communications.fr>

On 07/12/2022 06:24, Howard Hsu wrote:
> This patch includes 3 changes:
> 1. The maximum throttle state can be set to 100 to fix the problem that
> thermal_protect_disable can never be triggered.

You are modifying the cooling_device part.  The cooling_device is 
explicitly configured to have a max state of MT7915_CDEV_THROTTLE_MAX 
(=99), so the thermal subsystem will probably prevent 
mt7915_thermal_set_cur_throttle_state from being called with a higher 
value.  It will also probably complain if get_cur_state starts returning 
values above MT7915_CDEV_THROTTLE_MAX.

And, as the comment below indicates, the thermal subsystem expect that a 
higher state provide more cooling.  So if 99 means "maximum cooling", 
100 cannot mean "disable cooling".

Also, last time I tried, thermal_protect_disable didn't work; It didn't 
disable anything, the previous thermal throttle kept being applied. 
Maybe a new firmware fixed this, but the kernel cannot simply expect the 
firmware to be up to date.

> 2. Throttle state do not need to be different from the previous state.
> This will make it is impossible for users to just change the
> trigger/restore temp but not the throttle state.

The throttle state is mostly set by the kernel's thermal governor and 
the user has only very little control over it.  The thermal governor 
runs every X seconds and will change the state if it thinks it is too 
low or too high.

The default step_wise governor will aggressively set it to zero if the 
system isn't overheating, for example.

> 3. Add dev_err so that it is easier to see invalid setting while looking at dmesg.
> 
> Fixes: 771cd8d4c369 ("mt76: mt7915e: Fix degraded performance after temporary overheat")
> Co-developed-by: Ryder Lee <ryder.lee at mediatek.com>
> Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
> Signed-off-by: Howard Hsu <howard-yh.hsu at mediatek.com>
> ---
>   .../net/wireless/mediatek/mt76/mt7915/init.c   | 18 ++++++++++--------
>   1 file changed, 10 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
> index c810c31fbd6e..abeecf15f1c8 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
> @@ -131,14 +131,17 @@ mt7915_thermal_set_cur_throttle_state(struct thermal_cooling_device *cdev,
>   	u8 throttling = MT7915_THERMAL_THROTTLE_MAX - state;
>   	int ret;
>   
> -	if (state > MT7915_CDEV_THROTTLE_MAX)
> +	if (state > MT7915_THERMAL_THROTTLE_MAX) {
> +		dev_err(phy->dev->mt76.dev,
> +			"please specify a valid throttling state\n");
>   		return -EINVAL;
> +	}
>   
> -	if (phy->throttle_temp[0] > phy->throttle_temp[1])
> -		return 0;
> -
> -	if (state == phy->cdev_state)
> -		return 0;
> +	if (phy->throttle_temp[0] > phy->throttle_temp[1]) {
> +		dev_err(phy->dev->mt76.dev,
> +			"temp1_crit shall not be greater than temp1_max\n");
> +		return -EINVAL;
> +	}
>   
>   	/*
>   	 * cooling_device convention: 0 = no cooling, more = more cooling
            ^^^^^^^^^^^^^^^^^^^^^^^^^



From moudy.ho at mediatek.com  Wed Dec  7 00:44:05 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 16:44:05 +0800
Subject: [PATCH v2 05/12] media: platform: mtk-mdp3: introduce more pipelines from 8195
In-Reply-To: <20221207084412.14075-1-moudy.ho@mediatek.com>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
Message-ID: <20221207084412.14075-6-moudy.ho@mediatek.com>

By expanding the MMSYS and MUTEX of each two sets in MT8195,
more pipelines can be arranged.

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
---
 .../platform/mediatek/mdp3/mtk-mdp3-cmdq.c    | 80 ++++++++++++-------
 .../platform/mediatek/mdp3/mtk-mdp3-core.h    |  7 ++
 2 files changed, 60 insertions(+), 27 deletions(-)

diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
index 5472d7183a5e..365efe6a6c92 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
@@ -56,6 +56,43 @@ static struct mtk_mutex *__get_mutex(const struct mdp_dev *mdp_dev,
 	return m;
 }
 
+static enum mdp_pipe_id __get_pipe(const struct mdp_dev *mdp_dev,
+				   enum mtk_mdp_comp_id id)
+{
+	enum mdp_pipe_id pipe_id;
+
+	switch (id) {
+	case MDP_COMP_RDMA0:
+		pipe_id = MDP_PIPE_RDMA0;
+		break;
+	case MDP_COMP_ISP_IMGI:
+		pipe_id = MDP_PIPE_IMGI;
+		break;
+	case MDP_COMP_WPEI:
+		pipe_id = MDP_PIPE_WPEI;
+		break;
+	case MDP_COMP_WPEI2:
+		pipe_id = MDP_PIPE_WPEI2;
+		break;
+	case MDP_COMP_RDMA1:
+		pipe_id = MDP_PIPE_RDMA1;
+		break;
+	case MDP_COMP_RDMA2:
+		pipe_id = MDP_PIPE_RDMA2;
+		break;
+	case MDP_COMP_RDMA3:
+		pipe_id = MDP_PIPE_RDMA3;
+		break;
+	default:
+		/* Avoid exceptions when operating MUTEX */
+		pipe_id = MDP_PIPE_RDMA0;
+		dev_err(&mdp_dev->pdev->dev, "Unknown pipeline id %d", id);
+		break;
+	}
+
+	return pipe_id;
+}
+
 static int mdp_path_subfrm_require(const struct mdp_path *path,
 				   struct mdp_cmdq_cmd *cmd,
 				   struct mdp_pipe_info *p, u32 count)
@@ -63,7 +100,6 @@ static int mdp_path_subfrm_require(const struct mdp_path *path,
 	const int plat_id = path->mdp_dev->mdp_data->mdp_plat_id;
 	const struct mdp_comp_ctx *ctx;
 	const struct mtk_mdp_driver_data *data = path->mdp_dev->mdp_data;
-	struct device *dev = &path->mdp_dev->pdev->dev;
 	struct mtk_mutex *mutex;
 	int id, index;
 	u32 num_comp = 0;
@@ -72,23 +108,7 @@ static int mdp_path_subfrm_require(const struct mdp_path *path,
 		num_comp = CFG_GET(MT8183, path->config, num_components);
 
 	/* Decide which mutex to use based on the current pipeline */
-	switch (path->comps[0].comp->public_id) {
-	case MDP_COMP_RDMA0:
-		index = MDP_PIPE_RDMA0;
-		break;
-	case MDP_COMP_ISP_IMGI:
-		index = MDP_PIPE_IMGI;
-		break;
-	case MDP_COMP_WPEI:
-		index = MDP_PIPE_WPEI;
-		break;
-	case MDP_COMP_WPEI2:
-		index = MDP_PIPE_WPEI2;
-		break;
-	default:
-		dev_err(dev, "Unknown pipeline and no mutex is assigned");
-		return -EINVAL;
-	}
+	index = __get_pipe(path->mdp_dev, path->comps[0].comp->public_id);
 	memcpy(p, &data->pipe_info[index], sizeof(struct mdp_pipe_info));
 	mutex = __get_mutex(path->mdp_dev, p);
 
@@ -342,11 +362,13 @@ static void mdp_auto_release_work(struct work_struct *work)
 	struct mdp_cmdq_cmd *cmd;
 	struct mdp_dev *mdp;
 	struct mtk_mutex *mutex;
+	enum mdp_pipe_id pipe_id;
 
 	cmd = container_of(work, struct mdp_cmdq_cmd, auto_release_work);
 	mdp = cmd->mdp;
 
-	mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[MDP_PIPE_RDMA0]);
+	pipe_id = __get_pipe(mdp, cmd->comps[0].public_id);
+	mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[pipe_id]);
 	mtk_mutex_unprepare(mutex);
 	mdp_comp_clocks_off(&mdp->pdev->dev, cmd->comps,
 			    cmd->num_comps);
@@ -367,6 +389,7 @@ static void mdp_handle_cmdq_callback(struct mbox_client *cl, void *mssg)
 	struct cmdq_cb_data *data;
 	struct mdp_dev *mdp;
 	struct device *dev;
+	enum mdp_pipe_id pipe_id;
 
 	if (!mssg) {
 		pr_info("%s:no callback data\n", __func__);
@@ -394,7 +417,8 @@ static void mdp_handle_cmdq_callback(struct mbox_client *cl, void *mssg)
 		struct mtk_mutex *mutex;
 
 		dev_err(dev, "%s:queue_work fail!\n", __func__);
-		mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[MDP_PIPE_RDMA0]);
+		pipe_id = __get_pipe(mdp, cmd->comps[0].public_id);
+		mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[pipe_id]);
 		mtk_mutex_unprepare(mutex);
 		mdp_comp_clocks_off(&mdp->pdev->dev, cmd->comps,
 				    cmd->num_comps);
@@ -417,6 +441,7 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
 	struct mdp_comp *comps = NULL;
 	struct device *dev = &mdp->pdev->dev;
 	struct mtk_mutex *mutex = NULL;
+	enum mdp_pipe_id pipe_id;
 	const int id = mdp->mdp_data->mdp_plat_id;
 	int i, ret;
 	u32 num_comp = 0;
@@ -453,13 +478,6 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
 		goto err_free_comps;
 	}
 
-	mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[MDP_PIPE_RDMA0]);
-	ret = mtk_mutex_prepare(mutex);
-	if (ret) {
-		dev_err(dev, "Fail to enable mutex clk\n");
-		goto err_free_path;
-	}
-
 	path->mdp_dev = mdp;
 	path->config = param->config;
 	path->param = param->param;
@@ -479,6 +497,14 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
 		goto err_free_path;
 	}
 
+	pipe_id = __get_pipe(mdp, path->comps[0].comp->public_id);
+	mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[pipe_id]);
+	ret = mtk_mutex_prepare(mutex);
+	if (ret) {
+		dev_err(dev, "Fail to enable mutex clk\n");
+		goto err_free_path;
+	}
+
 	ret = mdp_path_config(mdp, cmd, path);
 	if (ret) {
 		dev_err(dev, "mdp_path_config error\n");
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
index 3ffad6be95ad..49b6e9c8e089 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
@@ -49,6 +49,13 @@ enum mdp_pipe_id {
 	MDP_PIPE_IMGI,
 	MDP_PIPE_WPEI,
 	MDP_PIPE_WPEI2,
+	MDP_PIPE_RDMA1,
+	MDP_PIPE_RDMA2,
+	MDP_PIPE_RDMA3,
+	MDP_PIPE_SPLIT,
+	MDP_PIPE_SPLIT2,
+	MDP_PIPE_VPP0_SOUT,
+	MDP_PIPE_VPP1_SOUT,
 	MDP_PIPE_MAX
 };
 
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 00:44:02 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 16:44:02 +0800
Subject: [PATCH v2 02/12] arm64: dts: mediatek: mt8195: add MDP3 nodes
In-Reply-To: <20221207084412.14075-1-moudy.ho@mediatek.com>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
Message-ID: <20221207084412.14075-3-moudy.ho@mediatek.com>

Add device nodes for Media Data Path 3 (MDP3) modules.

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
---
 arch/arm64/boot/dts/mediatek/mt8195.dtsi | 398 +++++++++++++++++++++++
 1 file changed, 398 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index 0ece3b46b66a..556d2121d290 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -1639,6 +1639,133 @@
 			#clock-cells = <1>;
 		};
 
+		mdp3-rdma0 at 14001000 {
+			compatible = "mediatek,mt8195-mdp3-rdma";
+			reg = <0 0x14001000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x1000 0x1000>;
+			mediatek,gce-events = <CMDQ_EVENT_VPP0_MDP_RDMA_SOF>,
+					      <CMDQ_EVENT_VPP0_MDP_RDMA_FRAME_DONE>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>,
+					<&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+			iommus = <&iommu_vpp M4U_PORT_L4_MDP_RDMA>,
+				 <&iommu_vpp M4U_PORT_L4_MDP_WROT>;
+			clocks = <&vppsys0 CLK_VPP0_MDP_RDMA>,
+				 <&topckgen CLK_TOP_CFG_VPP0>,
+				 <&topckgen CLK_TOP_CFG_26M_VPP0>,
+				 <&vppsys0 CLK_VPP0_WARP0_ASYNC_TX>,
+				 <&vppsys0 CLK_VPP0_WARP0_RELAY>,
+				 <&vppsys0 CLK_VPP0_WARP0_MDP_DL_ASYNC>,
+				 <&vppsys0 CLK_VPP0_WARP1_ASYNC_TX>,
+				 <&vppsys0 CLK_VPP0_WARP1_RELAY>,
+				 <&vppsys0 CLK_VPP0_WARP1_MDP_DL_ASYNC>,
+				 <&vppsys0 CLK_VPP0_VPP02VPP1_RELAY>,
+				 <&vppsys1 CLK_VPP1_DL_ASYNC>,
+				 <&vppsys1 CLK_VPP1_VPP0_DL_ASYNC>,
+				 <&vppsys1 CLK_VPP1_VPP0_DL_RELAY>,
+				 <&vppsys0 CLK_VPP0_VPP12VPP0_ASYNC>,
+				 <&vppsys1 CLK_VPP1_VPP0_DL1_RELAY>,
+				 <&vppsys1 CLK_VPP1_SVPP2_VDO0_DL_RELAY>,
+				 <&vppsys1 CLK_VPP1_SVPP3_VDO1_DL_RELAY>,
+				 <&vppsys1 CLK_VPP1_SVPP2_VDO1_DL_RELAY>,
+				 <&vppsys1 CLK_VPP1_SVPP3_VDO0_DL_RELAY>;
+			mboxes = <&gce1 12 CMDQ_THR_PRIO_1>,
+				 <&gce1 13 CMDQ_THR_PRIO_1>,
+				 <&gce1 14 CMDQ_THR_PRIO_1>,
+				 <&gce1 21 CMDQ_THR_PRIO_1>,
+				 <&gce1 22 CMDQ_THR_PRIO_1>;
+		};
+
+		mdp3-fg0 at 14002000 {
+			compatible = "mediatek,mt8195-mdp3-fg";
+			reg = <0 0x14002000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x2000 0x1000>;
+			clocks = <&vppsys0 CLK_VPP0_MDP_FG>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+		};
+
+		mdp3-stich0 at 14003000 {
+			compatible = "mediatek,mt8195-mdp3-stitch";
+			reg = <0 0x14003000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x3000 0x1000>;
+			clocks = <&vppsys0 CLK_VPP0_STITCH>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+		};
+
+		mdp3-hdr0 at 14004000 {
+			compatible = "mediatek,mt8195-mdp3-hdr";
+			reg = <0 0x14004000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x4000 0x1000>;
+			clocks = <&vppsys0 CLK_VPP0_MDP_HDR>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+		};
+
+		mdp3-aal0 at 14005000 {
+			compatible = "mediatek,mt8195-mdp3-aal";
+			reg = <0 0x14005000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x5000 0x1000>;
+			clocks = <&vppsys0 CLK_VPP0_MDP_AAL>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+		};
+
+		mdp3-rsz0 at 14006000 {
+			compatible = "mediatek,mt8183-mdp3-rsz";
+			reg = <0 0x14006000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x6000 0x1000>;
+			clocks = <&vppsys0 CLK_VPP0_MDP_RSZ>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+		};
+
+		mdp3-tdshp0 at 14007000 {
+			compatible = "mediatek,mt8195-mdp3-tdshp";
+			reg = <0 0x14007000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x7000 0x1000>;
+			clocks = <&vppsys0 CLK_VPP0_MDP_TDSHP>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+		};
+
+		mdp3-color0 at 14008000 {
+			compatible = "mediatek,mt8195-mdp3-color";
+			reg = <0 0x14008000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x8000 0x1000>;
+			clocks = <&vppsys0 CLK_VPP0_MDP_COLOR>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+		};
+
+		mdp3-ovl0 at 14009000 {
+			compatible = "mediatek,mt8195-mdp3-ovl";
+			reg = <0 0x14009000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x9000 0x1000>;
+			clocks = <&vppsys0 CLK_VPP0_MDP_OVL>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+		};
+
+		mdp3-pad0 at 1400a000 {
+			compatible = "mediatek,mt8195-mdp3-pad";
+			reg = <0 0x1400a000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0xa000 0x1000>;
+			clocks = <&vppsys0 CLK_VPP0_PADDING>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+		};
+
+		mdp3-tcc0 at 1400b000 {
+			compatible = "mediatek,mt8195-mdp3-tcc";
+			reg = <0 0x1400b000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0xb000 0x1000>;
+			clocks = <&vppsys0 CLK_VPP0_MDP_TCC>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+		};
+
+		mdp3-wrot0 at 1400c000 {
+			compatible = "mediatek,mt8183-mdp3-wrot";
+			reg = <0 0x1400c000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0xc000 0x1000>;
+			mediatek,gce-events = <CMDQ_EVENT_VPP0_MDP_WROT_SOF>,
+					      <CMDQ_EVENT_VPP0_MDP_WROT_VIDO_WDONE>;
+			clocks = <&vppsys0 CLK_VPP0_MDP_WROT>;
+			iommus = <&iommu_vpp M4U_PORT_L4_MDP_WROT>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+		};
+
 		mutex at 1400f000 {
 			compatible = "mediatek,mt8195-vpp-mutex";
 			reg = <0 0x1400f000 0 0x1000>;
@@ -1787,6 +1914,277 @@
 			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
 		};
 
+		mdp3-split0 at 14f06000 {
+			compatible = "mediatek,mt8195-mdp3-split";
+			reg = <0 0x14f06000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f0XXXX 0x6000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_VPP_SPLIT>,
+				 <&vppsys1 CLK_VPP1_HDMI_META>,
+				 <&vppsys1 CLK_VPP1_VPP_SPLIT_HDMI>,
+				 <&vppsys1 CLK_VPP1_DGI_IN>,
+				 <&vppsys1 CLK_VPP1_DGI_OUT>,
+				 <&vppsys1 CLK_VPP1_VPP_SPLIT_DGI>,
+				 <&vppsys1 CLK_VPP1_VPP_SPLIT_26M>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-tcc1 at 14f07000 {
+			compatible = "mediatek,mt8195-mdp3-tcc";
+			reg = <0 0x14f07000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f0XXXX 0x7000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP1_MDP_TCC>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-rdma1 at 14f08000 {
+			compatible = "mediatek,mt8195-mdp3-rdma";
+			reg = <0 0x14f08000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f0XXXX 0x8000 0x1000>;
+			mediatek,gce-events = <CMDQ_EVENT_VPP1_SVPP1_MDP_RDMA_SOF>,
+					      <CMDQ_EVENT_VPP1_SVPP1_MDP_RDMA_FRAME_DONE>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP1_MDP_RDMA>,
+				 <&topckgen CLK_TOP_CFG_VPP1>,
+				 <&topckgen CLK_TOP_CFG_26M_VPP1>;
+			iommus = <&iommu_vdo M4U_PORT_L5_SVPP1_MDP_RDMA>,
+				 <&iommu_vdo M4U_PORT_L5_SVPP1_MDP_WROT>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-rdma2 at 14f09000 {
+			compatible = "mediatek,mt8195-mdp3-rdma";
+			reg = <0 0x14f09000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f0XXXX 0x9000 0x1000>;
+			mediatek,gce-events = <CMDQ_EVENT_VPP1_SVPP2_MDP_RDMA_SOF>,
+					      <CMDQ_EVENT_VPP1_SVPP2_MDP_RDMA_FRAME_DONE>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP2_MDP_RDMA>,
+				 <&topckgen CLK_TOP_CFG_VPP1>,
+				 <&topckgen CLK_TOP_CFG_26M_VPP1>;
+			iommus = <&iommu_vdo M4U_PORT_L5_SVPP2_MDP_RDMA>,
+				 <&iommu_vdo M4U_PORT_L5_SVPP2_MDP_WROT>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-rdma3 at 14f0a000 {
+			compatible = "mediatek,mt8195-mdp3-rdma";
+			reg = <0 0x14f0a000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f0XXXX 0xa000 0x1000>;
+			mediatek,gce-events = <CMDQ_EVENT_VPP1_SVPP3_MDP_RDMA_SOF>,
+					      <CMDQ_EVENT_VPP1_SVPP3_MDP_RDMA_FRAME_DONE>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP3_MDP_RDMA>,
+				 <&topckgen CLK_TOP_CFG_VPP1>,
+				 <&topckgen CLK_TOP_CFG_26M_VPP1>;
+			iommus = <&iommu_vpp M4U_PORT_L6_SVPP3_MDP_RDMA>,
+				 <&iommu_vpp M4U_PORT_L6_SVPP3_MDP_WROT>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-fg1 at 14f0b000 {
+			compatible = "mediatek,mt8195-mdp3-fg";
+			reg = <0 0x14f0b000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f0XXXX 0xb000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP1_MDP_FG>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-fg2 at 14f0c000 {
+			compatible = "mediatek,mt8195-mdp3-fg";
+			reg = <0 0x14f0c000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f0XXXX 0xc000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP2_MDP_FG>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-fg3 at 14f0d000 {
+			compatible = "mediatek,mt8195-mdp3-fg";
+			reg = <0 0x14f0d000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f0XXXX 0xd000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP3_MDP_FG>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-hdr1 at 14f0e000 {
+			compatible = "mediatek,mt8195-mdp3-hdr";
+			reg = <0 0x14f0e000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f0XXXX 0xe000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP1_MDP_HDR>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-hdr2 at 14f0f000 {
+			compatible = "mediatek,mt8195-mdp3-hdr";
+			reg = <0 0x14f0f000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f0XXXX 0xf000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP2_MDP_HDR>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-hdr3 at 14f10000 {
+			compatible = "mediatek,mt8195-mdp3-hdr";
+			reg = <0 0x14f10000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP3_MDP_HDR>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-aal1 at 14f11000 {
+			compatible = "mediatek,mt8195-mdp3-aal";
+			reg = <0 0x14f11000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0x1000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP1_MDP_AAL>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-aal2 at 14f12000 {
+			compatible = "mediatek,mt8195-mdp3-aal";
+			reg = <0 0x14f12000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0x2000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP2_MDP_AAL>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-aal3 at 14f13000 {
+			compatible = "mediatek,mt8195-mdp3-aal";
+			reg = <0 0x14f13000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0x3000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP3_MDP_AAL>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-rsz1 at 14f14000 {
+			compatible = "mediatek,mt8183-mdp3-rsz";
+			reg = <0 0x14f14000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0x4000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP1_MDP_RSZ>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-rsz2 at 14f15000 {
+			compatible = "mediatek,mt8183-mdp3-rsz";
+			reg = <0 0x14f15000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0x5000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP2_MDP_RSZ>,
+				 <&vppsys1 CLK_VPP1_SVPP2_VPP_MERGE>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-rsz3 at 14f16000 {
+			compatible = "mediatek,mt8183-mdp3-rsz";
+			reg = <0 0x14f16000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0x6000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP3_MDP_RSZ>,
+				 <&vppsys1 CLK_VPP1_SVPP3_VPP_MERGE>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-tdshp1 at 14f17000 {
+			compatible = "mediatek,mt8195-mdp3-tdshp";
+			reg = <0 0x14f17000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0x7000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP1_MDP_TDSHP>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-tdshp2 at 14f18000 {
+			compatible = "mediatek,mt8195-mdp3-tdshp";
+			reg = <0 0x14f18000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0x8000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP2_MDP_TDSHP>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-tdshp3 at 14f19000 {
+			compatible = "mediatek,mt8195-mdp3-tdshp";
+			reg = <0 0x14f19000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0x9000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP3_MDP_TDSHP>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-merge0 at 14f1a000 {
+			compatible = "mediatek,mt8195-mdp3-merge";
+			reg = <0 0x14f1a000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0xa000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP2_VPP_MERGE>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-merge1 at 14f1b000 {
+			compatible = "mediatek,mt8195-mdp3-merge";
+			reg = <0 0x14f1b000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0xb000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP3_VPP_MERGE>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-color1 at 14f1c000 {
+			compatible = "mediatek,mt8195-mdp3-color";
+			reg = <0 0x14f1c000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0xc000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP1_MDP_COLOR>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-color2 at 14f1d000 {
+			compatible = "mediatek,mt8195-mdp3-color";
+			reg = <0 0x14f1d000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0xd000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP2_MDP_COLOR>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-color3 at 14f1e000 {
+			compatible = "mediatek,mt8195-mdp3-color";
+			reg = <0 0x14f1e000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0xe000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP3_MDP_COLOR>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-ovl1 at 14f1f000 {
+			compatible = "mediatek,mt8195-mdp3-ovl";
+			reg = <0 0x14f1f000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0xf000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP1_MDP_OVL>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-pad1 at 14f20000 {
+			compatible = "mediatek,mt8195-mdp3-pad";
+			reg = <0 0x14f20000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f2XXXX 0 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP1_VPP_PAD>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-pad2 at 14f21000 {
+			compatible = "mediatek,mt8195-mdp3-pad";
+			reg = <0 0x14f21000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f2XXXX 0x1000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP2_VPP_PAD>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-pad3 at 14f22000 {
+			compatible = "mediatek,mt8195-mdp3-pad";
+			reg = <0 0x14f22000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f2XXXX 0x2000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP3_VPP_PAD>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
+		mdp3-wrot1 at 14f23000 {
+			compatible = "mediatek,mt8183-mdp3-wrot";
+			reg = <0 0x14f23000 0 0x1000>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f2XXXX 0x3000 0x1000>;
+			mediatek,gce-events = <CMDQ_EVENT_VPP1_SVPP1_MDP_WROT_SOF>,
+					      <CMDQ_EVENT_VPP1_SVPP1_MDP_WROT_FRAME_DONE>;
+			clocks = <&vppsys1 CLK_VPP1_SVPP1_MDP_WROT>;
+			iommus = <&iommu_vdo M4U_PORT_L5_SVPP1_MDP_WROT>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
 		imgsys: clock-controller at 15000000 {
 			compatible = "mediatek,mt8195-imgsys";
 			reg = <0 0x15000000 0 0x1000>;
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 00:44:06 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 16:44:06 +0800
Subject: [PATCH v2 06/12] media: platform: mtk-mdp3: introduce more MDP3 components
In-Reply-To: <20221207084412.14075-1-moudy.ho@mediatek.com>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
Message-ID: <20221207084412.14075-7-moudy.ho@mediatek.com>

Add more MDP3 component configuration in MT8195 platform.

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
---
 .../platform/mediatek/mdp3/mdp_reg_aal.h      | 25 ++++++
 .../platform/mediatek/mdp3/mdp_reg_color.h    | 31 +++++++
 .../media/platform/mediatek/mdp3/mdp_reg_fg.h | 23 +++++
 .../platform/mediatek/mdp3/mdp_reg_hdr.h      | 31 +++++++
 .../platform/mediatek/mdp3/mdp_reg_merge.h    | 25 ++++++
 .../platform/mediatek/mdp3/mdp_reg_ovl.h      | 25 ++++++
 .../platform/mediatek/mdp3/mdp_reg_pad.h      | 21 +++++
 .../platform/mediatek/mdp3/mdp_reg_rdma.h     | 24 ++++++
 .../platform/mediatek/mdp3/mdp_reg_rsz.h      |  2 +
 .../platform/mediatek/mdp3/mdp_reg_tdshp.h    | 34 ++++++++
 .../platform/mediatek/mdp3/mdp_reg_wrot.h     |  8 ++
 .../platform/mediatek/mdp3/mtk-mdp3-comp.h    | 85 +++++++++++++++----
 12 files changed, 318 insertions(+), 16 deletions(-)
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_aal.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_color.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_fg.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_hdr.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_merge.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_ovl.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_pad.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_tdshp.h

diff --git a/drivers/media/platform/mediatek/mdp3/mdp_reg_aal.h b/drivers/media/platform/mediatek/mdp3/mdp_reg_aal.h
new file mode 100644
index 000000000000..4b9513e54543
--- /dev/null
+++ b/drivers/media/platform/mediatek/mdp3/mdp_reg_aal.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Ping-Hsun Wu <ping-hsun.wu at mediatek.com>
+ */
+
+#ifndef __MDP_REG_AAL_H__
+#define __MDP_REG_AAL_H__
+
+#define MDP_AAL_EN			(0x000)
+#define MDP_AAL_CFG			(0x020)
+#define MDP_AAL_SIZE			(0x030)
+#define MDP_AAL_OUTPUT_SIZE		(0x034)
+#define MDP_AAL_OUTPUT_OFFSET		(0x038)
+#define MDP_AAL_CFG_MAIN		(0x200)
+
+/* MASK */
+#define MDP_AAL_EN_MASK			(0x01)
+#define MDP_AAL_CFG_MASK		(0x70FF00B3)
+#define MDP_AAL_SIZE_MASK		(0x1FFF1FFF)
+#define MDP_AAL_OUTPUT_SIZE_MASK	(0x1FFF1FFF)
+#define MDP_AAL_OUTPUT_OFFSET_MASK	(0x0FF00FF)
+#define MDP_AAL_CFG_MAIN_MASK		(0x0FE)
+
+#endif  // __MDP_REG_AAL_H__
diff --git a/drivers/media/platform/mediatek/mdp3/mdp_reg_color.h b/drivers/media/platform/mediatek/mdp3/mdp_reg_color.h
new file mode 100644
index 000000000000..f72503975b24
--- /dev/null
+++ b/drivers/media/platform/mediatek/mdp3/mdp_reg_color.h
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Ping-Hsun Wu <ping-hsun.wu at mediatek.com>
+ */
+
+#ifndef __MDP_REG_COLOR_H__
+#define __MDP_REG_COLOR_H__
+
+#define MDP_COLOR_WIN_X_MAIN			(0x40C)
+#define MDP_COLOR_WIN_Y_MAIN			(0x410)
+#define MDP_COLOR_START				(0xC00)
+#define MDP_COLOR_INTEN				(0xC04)
+#define MDP_COLOR_OUT_SEL			(0xC0C)
+#define MDP_COLOR_INTERNAL_IP_WIDTH		(0xC50)
+#define MDP_COLOR_INTERNAL_IP_HEIGHT		(0xC54)
+#define MDP_COLOR_CM1_EN			(0xC60)
+#define MDP_COLOR_CM2_EN			(0xCA0)
+
+/* MASK */
+#define MDP_COLOR_WIN_X_MAIN_MASK		(0xFFFFFFFF)
+#define MDP_COLOR_WIN_Y_MAIN_MASK		(0xFFFFFFFF)
+#define MDP_COLOR_START_MASK			(0x0FF013F)
+#define MDP_COLOR_INTEN_MASK			(0x07)
+#define MDP_COLOR_OUT_SEL_MASK			(0x0777)
+#define MDP_COLOR_INTERNAL_IP_WIDTH_MASK	(0x03FFF)
+#define MDP_COLOR_INTERNAL_IP_HEIGHT_MASK	(0x03FFF)
+#define MDP_COLOR_CM1_EN_MASK			(0x03)
+#define MDP_COLOR_CM2_EN_MASK			(0x017)
+
+#endif  // __MDP_REG_COLOR_H__
diff --git a/drivers/media/platform/mediatek/mdp3/mdp_reg_fg.h b/drivers/media/platform/mediatek/mdp3/mdp_reg_fg.h
new file mode 100644
index 000000000000..d90bcad33a59
--- /dev/null
+++ b/drivers/media/platform/mediatek/mdp3/mdp_reg_fg.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Ping-Hsun Wu <ping-hsun.wu at mediatek.com>
+ */
+
+#ifndef __MDP_REG_FG_H__
+#define __MDP_REG_FG_H__
+
+#define MDP_FG_TRIGGER			(0x0)
+#define MDP_FG_FG_CTRL_0		(0x20)
+#define MDP_FG_FG_CK_EN			(0x24)
+#define MDP_FG_TILE_INFO_0		(0x418)
+#define MDP_FG_TILE_INFO_1		(0x41c)
+
+/* MASK */
+#define MDP_FG_TRIGGER_MASK		(0x00000007)
+#define MDP_FG_FG_CTRL_0_MASK		(0x00000033)
+#define MDP_FG_FG_CK_EN_MASK		(0x0000000F)
+#define MDP_FG_TILE_INFO_0_MASK		(0xFFFFFFFF)
+#define MDP_FG_TILE_INFO_1_MASK		(0xFFFFFFFF)
+
+#endif  //__MDP_REG_FG_H__
diff --git a/drivers/media/platform/mediatek/mdp3/mdp_reg_hdr.h b/drivers/media/platform/mediatek/mdp3/mdp_reg_hdr.h
new file mode 100644
index 000000000000..c19fbba39fc0
--- /dev/null
+++ b/drivers/media/platform/mediatek/mdp3/mdp_reg_hdr.h
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Ping-Hsun Wu <ping-hsun.wu at mediatek.com>
+ */
+
+#ifndef __MDP_REG_HDR_H__
+#define __MDP_REG_HDR_H__
+
+#define MDP_HDR_TOP			(0x000)
+#define MDP_HDR_RELAY			(0x004)
+#define MDP_HDR_SIZE_0			(0x014)
+#define MDP_HDR_SIZE_1			(0x018)
+#define MDP_HDR_SIZE_2			(0x01C)
+#define MDP_HDR_HIST_CTRL_0		(0x020)
+#define MDP_HDR_HIST_CTRL_1		(0x024)
+#define MDP_HDR_HIST_ADDR		(0x0DC)
+#define MDP_HDR_TILE_POS		(0x118)
+
+/* MASK */
+#define MDP_HDR_RELAY_MASK		(0x01)
+#define MDP_HDR_TOP_MASK		(0xFF0FEB6D)
+#define MDP_HDR_SIZE_0_MASK		(0x1FFF1FFF)
+#define MDP_HDR_SIZE_1_MASK		(0x1FFF1FFF)
+#define MDP_HDR_SIZE_2_MASK		(0x1FFF1FFF)
+#define MDP_HDR_HIST_CTRL_0_MASK	(0x1FFF1FFF)
+#define MDP_HDR_HIST_CTRL_1_MASK	(0x1FFF1FFF)
+#define MDP_HDR_HIST_ADDR_MASK		(0xBF3F2F3F)
+#define MDP_HDR_TILE_POS_MASK		(0x1FFF1FFF)
+
+#endif // __MDP_REG_HDR_H__
diff --git a/drivers/media/platform/mediatek/mdp3/mdp_reg_merge.h b/drivers/media/platform/mediatek/mdp3/mdp_reg_merge.h
new file mode 100644
index 000000000000..46be27e2a656
--- /dev/null
+++ b/drivers/media/platform/mediatek/mdp3/mdp_reg_merge.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Ping-Hsun Wu <ping-hsun.wu at mediatek.com>
+ */
+
+#ifndef __MDP_REG_MERGE_H__
+#define __MDP_REG_MERGE_H__
+
+#define MDP_MERGE_ENABLE	(0x000)
+#define MDP_MERGE_CFG_0		(0x010)
+#define MDP_MERGE_CFG_4		(0x020)
+#define MDP_MERGE_CFG_12	(0x040)
+#define MDP_MERGE_CFG_24	(0x070)
+#define MDP_MERGE_CFG_25	(0x074)
+
+/* MASK */
+#define MDP_MERGE_ENABLE_MASK	(0xFFFFFFFF)
+#define MDP_MERGE_CFG_0_MASK	(0xFFFFFFFF)
+#define MDP_MERGE_CFG_4_MASK	(0xFFFFFFFF)
+#define MDP_MERGE_CFG_12_MASK	(0xFFFFFFFF)
+#define MDP_MERGE_CFG_24_MASK	(0xFFFFFFFF)
+#define MDP_MERGE_CFG_25_MASK	(0xFFFFFFFF)
+
+#endif //__MDP_REG_MERGE_H__
diff --git a/drivers/media/platform/mediatek/mdp3/mdp_reg_ovl.h b/drivers/media/platform/mediatek/mdp3/mdp_reg_ovl.h
new file mode 100644
index 000000000000..21d2d0323293
--- /dev/null
+++ b/drivers/media/platform/mediatek/mdp3/mdp_reg_ovl.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Ping-Hsun Wu <ping-hsun.wu at mediatek.com>
+ */
+
+#ifndef __MDP_REG_OVL_H__
+#define __MDP_REG_OVL_H__
+
+#define MDP_OVL_EN			(0x00c)
+#define MDP_OVL_ROI_SIZE		(0x020)
+#define MDP_OVL_DP_CON			(0x024)
+#define MDP_OVL_SRC_CON			(0x02c)
+#define MDP_OVL_L0_CON			(0x030)
+#define MDP_OVL_L0_SRC_SIZE		(0x038)
+
+/* MASK */
+#define MDP_OVL_DP_CON_MASK		(0x0FFFFFFF)
+#define MDP_OVL_EN_MASK			(0xB07D07B1)
+#define MDP_OVL_L0_CON_MASK		(0xFFFFFFFF)
+#define MDP_OVL_L0_SRC_SIZE_MASK	(0x1FFF1FFF)
+#define MDP_OVL_ROI_SIZE_MASK		(0x1FFF1FFF)
+#define MDP_OVL_SRC_CON_MASK		(0x0000031F)
+
+#endif  //__MDP_REG_OVL_H__
diff --git a/drivers/media/platform/mediatek/mdp3/mdp_reg_pad.h b/drivers/media/platform/mediatek/mdp3/mdp_reg_pad.h
new file mode 100644
index 000000000000..0e89f1db19ed
--- /dev/null
+++ b/drivers/media/platform/mediatek/mdp3/mdp_reg_pad.h
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Ping-Hsun Wu <ping-hsun.wu at mediatek.com>
+ */
+
+#ifndef __MDP_REG_PAD_H__
+#define __MDP_REG_PAD_H__
+
+#define MDP_PAD_CON			(0x000)
+#define MDP_PAD_PIC_SIZE		(0x004)
+#define MDP_PAD_W_SIZE			(0x008)
+#define MDP_PAD_H_SIZE			(0x00c)
+
+/* MASK */
+#define MDP_PAD_CON_MASK		(0x00000007)
+#define MDP_PAD_PIC_SIZE_MASK		(0xFFFFFFFF)
+#define MDP_PAD_W_SIZE_MASK		(0x1FFF1FFF)
+#define MDP_PAD_H_SIZE_MASK		(0x1FFF1FFF)
+
+#endif  // __MDP_REG_PAD_H__
diff --git a/drivers/media/platform/mediatek/mdp3/mdp_reg_rdma.h b/drivers/media/platform/mediatek/mdp3/mdp_reg_rdma.h
index be4065e252d3..0affb2a3b958 100644
--- a/drivers/media/platform/mediatek/mdp3/mdp_reg_rdma.h
+++ b/drivers/media/platform/mediatek/mdp3/mdp_reg_rdma.h
@@ -26,6 +26,18 @@
 #define MDP_RDMA_SRC_OFFSET_2           0x128
 #define MDP_RDMA_SRC_OFFSET_0_P         0x148
 #define MDP_RDMA_TRANSFORM_0            0x200
+#define MDP_RDMA_DMABUF_CON_0           0x240
+#define MDP_RDMA_ULTRA_TH_HIGH_CON_0    0x248
+#define MDP_RDMA_ULTRA_TH_LOW_CON_0     0x250
+#define MDP_RDMA_DMABUF_CON_1           0x258
+#define MDP_RDMA_ULTRA_TH_HIGH_CON_1    0x260
+#define MDP_RDMA_ULTRA_TH_LOW_CON_1     0x268
+#define MDP_RDMA_DMABUF_CON_2           0x270
+#define MDP_RDMA_ULTRA_TH_HIGH_CON_2    0x278
+#define MDP_RDMA_ULTRA_TH_LOW_CON_2     0x280
+#define MDP_RDMA_DMABUF_CON_3           0x288
+#define MDP_RDMA_ULTRA_TH_HIGH_CON_3    0x290
+#define MDP_RDMA_ULTRA_TH_LOW_CON_3     0x298
 #define MDP_RDMA_RESV_DUMMY_0           0x2a0
 #define MDP_RDMA_MON_STA_1              0x408
 #define MDP_RDMA_SRC_BASE_0             0xf00
@@ -54,6 +66,18 @@
 #define MDP_RDMA_SRC_OFFSET_2_MASK          0xffffffff
 #define MDP_RDMA_SRC_OFFSET_0_P_MASK        0xffffffff
 #define MDP_RDMA_TRANSFORM_0_MASK           0xff110777
+#define MDP_RDMA_DMABUF_CON_0_MASK          0x0fff00ff
+#define MDP_RDMA_ULTRA_TH_HIGH_CON_0_MASK   0x3fffffff
+#define MDP_RDMA_ULTRA_TH_LOW_CON_0_MASK    0x3fffffff
+#define MDP_RDMA_DMABUF_CON_1_MASK          0x0f7f007f
+#define MDP_RDMA_ULTRA_TH_HIGH_CON_1_MASK   0x3fffffff
+#define MDP_RDMA_ULTRA_TH_LOW_CON_1_MASK    0x3fffffff
+#define MDP_RDMA_DMABUF_CON_2_MASK          0x0f3f003f
+#define MDP_RDMA_ULTRA_TH_HIGH_CON_2_MASK   0x3fffffff
+#define MDP_RDMA_ULTRA_TH_LOW_CON_2_MASK    0x3fffffff
+#define MDP_RDMA_DMABUF_CON_3_MASK          0x0f3f003f
+#define MDP_RDMA_ULTRA_TH_HIGH_CON_3_MASK   0x3fffffff
+#define MDP_RDMA_ULTRA_TH_LOW_CON_3_MASK    0x3fffffff
 #define MDP_RDMA_RESV_DUMMY_0_MASK          0xffffffff
 #define MDP_RDMA_MON_STA_1_MASK             0xffffffff
 #define MDP_RDMA_SRC_BASE_0_MASK            0xffffffff
diff --git a/drivers/media/platform/mediatek/mdp3/mdp_reg_rsz.h b/drivers/media/platform/mediatek/mdp3/mdp_reg_rsz.h
index 484f6d60641f..187531db8e3b 100644
--- a/drivers/media/platform/mediatek/mdp3/mdp_reg_rsz.h
+++ b/drivers/media/platform/mediatek/mdp3/mdp_reg_rsz.h
@@ -20,6 +20,7 @@
 #define PRZ_LUMA_VERTICAL_SUBPIXEL_OFFSET                 0x02c
 #define PRZ_CHROMA_HORIZONTAL_INTEGER_OFFSET              0x030
 #define PRZ_CHROMA_HORIZONTAL_SUBPIXEL_OFFSET             0x034
+#define RSZ_ETC_CONTROL                                   0x22c
 
 /* MASK */
 #define PRZ_ENABLE_MASK                                   0x00010001
@@ -35,5 +36,6 @@
 #define PRZ_LUMA_VERTICAL_SUBPIXEL_OFFSET_MASK            0x001fffff
 #define PRZ_CHROMA_HORIZONTAL_INTEGER_OFFSET_MASK         0x0000ffff
 #define PRZ_CHROMA_HORIZONTAL_SUBPIXEL_OFFSET_MASK        0x001fffff
+#define RSZ_ETC_CONTROL_MASK                              0xff770000
 
 #endif // __MDP_REG_RSZ_H__
diff --git a/drivers/media/platform/mediatek/mdp3/mdp_reg_tdshp.h b/drivers/media/platform/mediatek/mdp3/mdp_reg_tdshp.h
new file mode 100644
index 000000000000..83b5f9b432d8
--- /dev/null
+++ b/drivers/media/platform/mediatek/mdp3/mdp_reg_tdshp.h
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Ping-Hsun Wu <ping-hsun.wu at mediatek.com>
+ */
+
+#ifndef __MDP_REG_TDSHP_H__
+#define __MDP_REG_TDSHP_H__
+
+#define MDP_HIST_CFG_00				(0x064)
+#define MDP_HIST_CFG_01				(0x068)
+#define MDP_TDSHP_CTRL				(0x100)
+#define MDP_TDSHP_CFG				(0x110)
+#define MDP_TDSHP_INPUT_SIZE			(0x120)
+#define MDP_TDSHP_OUTPUT_OFFSET			(0x124)
+#define MDP_TDSHP_OUTPUT_SIZE			(0x128)
+#define MDP_LUMA_HIST_INIT			(0x200)
+#define MDP_DC_TWO_D_W1_RESULT_INIT		(0x260)
+#define MDP_CONTOUR_HIST_INIT			(0x398)
+
+/* MASK */
+#define MDP_HIST_CFG_00_MASK			(0xFFFFFFFF)
+#define MDP_HIST_CFG_01_MASK			(0xFFFFFFFF)
+#define MDP_LUMA_HIST_MASK			(0xFFFFFFFF)
+#define MDP_TDSHP_CTRL_MASK			(0x07)
+#define MDP_TDSHP_CFG_MASK			(0x03F7)
+#define MDP_TDSHP_INPUT_SIZE_MASK		(0x1FFF1FFF)
+#define MDP_TDSHP_OUTPUT_OFFSET_MASK		(0x0FF00FF)
+#define MDP_TDSHP_OUTPUT_SIZE_MASK		(0x1FFF1FFF)
+#define MDP_LUMA_HIST_INIT_MASK			(0xFFFFFFFF)
+#define MDP_DC_TWO_D_W1_RESULT_INIT_MASK	(0x007FFFFF)
+#define MDP_CONTOUR_HIST_INIT_MASK		(0xFFFFFFFF)
+
+#endif  // __MDP_REG_TDSHP_H__
diff --git a/drivers/media/platform/mediatek/mdp3/mdp_reg_wrot.h b/drivers/media/platform/mediatek/mdp3/mdp_reg_wrot.h
index 6d3ff0e2b672..b6f016d2c29d 100644
--- a/drivers/media/platform/mediatek/mdp3/mdp_reg_wrot.h
+++ b/drivers/media/platform/mediatek/mdp3/mdp_reg_wrot.h
@@ -17,14 +17,18 @@
 #define VIDO_STRIDE                 0x030
 #define VIDO_OFST_ADDR_C            0x038
 #define VIDO_STRIDE_C               0x03c
+#define VIDO_CTRL_2                 0x048
 #define VIDO_DITHER                 0x054
 #define VIDO_STRIDE_V               0x06c
 #define VIDO_OFST_ADDR_V            0x068
 #define VIDO_RSV_1                  0x070
+#define VIDO_DMA_PREULTRA           0x074
 #define VIDO_IN_SIZE                0x078
 #define VIDO_ROT_EN                 0x07c
 #define VIDO_FIFO_TEST              0x080
 #define VIDO_MAT_CTRL               0x084
+#define VIDO_SCAN_10BIT             0x0dc
+#define VIDO_PENDING_ZERO           0x0e0
 #define VIDO_BASE_ADDR              0xf00
 #define VIDO_BASE_ADDR_C            0xf04
 #define VIDO_BASE_ADDR_V            0xf08
@@ -40,14 +44,18 @@
 #define VIDO_STRIDE_MASK                0x0000ffff
 #define VIDO_OFST_ADDR_C_MASK           0x0fffffff
 #define VIDO_STRIDE_C_MASK              0x0000ffff
+#define VIDO_CTRL_2_MASK                0x0000000f
 #define VIDO_DITHER_MASK                0xff000001
 #define VIDO_STRIDE_V_MASK              0x0000ffff
 #define VIDO_OFST_ADDR_V_MASK           0x0fffffff
 #define VIDO_RSV_1_MASK                 0xffffffff
+#define VIDO_DMA_PREULTRA_MASK		0x00ffffff
 #define VIDO_IN_SIZE_MASK               0x1fff1fff
 #define VIDO_ROT_EN_MASK                0x00000001
 #define VIDO_FIFO_TEST_MASK             0x00000fff
 #define VIDO_MAT_CTRL_MASK              0x000000f3
+#define VIDO_SCAN_10BIT_MASK            0x0000000f
+#define VIDO_PENDING_ZERO_MASK          0x07ffffff
 #define VIDO_BASE_ADDR_MASK             0xffffffff
 #define VIDO_BASE_ADDR_C_MASK           0xffffffff
 #define VIDO_BASE_ADDR_V_MASK           0xffffffff
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.h b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.h
index afec66c49f77..fd6054673b40 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.h
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.h
@@ -84,22 +84,66 @@ enum mtk_mdp_comp_id {
 	MDP_COMP_CAMIN,		/* 9 */
 	MDP_COMP_CAMIN2,	/* 10 */
 	MDP_COMP_RDMA0,		/* 11 */
-	MDP_COMP_AAL0,		/* 12 */
-	MDP_COMP_CCORR0,	/* 13 */
-	MDP_COMP_RSZ0,		/* 14 */
-	MDP_COMP_RSZ1,		/* 15 */
-	MDP_COMP_TDSHP0,	/* 16 */
-	MDP_COMP_COLOR0,	/* 17 */
-	MDP_COMP_PATH0_SOUT,	/* 18 */
-	MDP_COMP_PATH1_SOUT,	/* 19 */
-	MDP_COMP_WROT0,		/* 20 */
-	MDP_COMP_WDMA,		/* 21 */
-
-	/* Dummy Engine */
-	MDP_COMP_RDMA1,		/* 22 */
-	MDP_COMP_RSZ2,		/* 23 */
-	MDP_COMP_TDSHP1,	/* 24 */
-	MDP_COMP_WROT1,		/* 25 */
+	MDP_COMP_RDMA1,		/* 12 */
+	MDP_COMP_RDMA2,		/* 13 */
+	MDP_COMP_RDMA3,		/* 14 */
+	MDP_COMP_AAL0,		/* 15 */
+	MDP_COMP_AAL1,		/* 16 */
+	MDP_COMP_AAL2,		/* 17 */
+	MDP_COMP_AAL3,		/* 18 */
+	MDP_COMP_CCORR0,	/* 19 */
+	MDP_COMP_RSZ0,		/* 20 */
+	MDP_COMP_RSZ1,		/* 21 */
+	MDP_COMP_RSZ2,		/* 22 */
+	MDP_COMP_RSZ3,		/* 23 */
+	MDP_COMP_TDSHP0,	/* 24 */
+	MDP_COMP_TDSHP1,	/* 25 */
+	MDP_COMP_TDSHP2,	/* 26 */
+	MDP_COMP_TDSHP3,	/* 27 */
+	MDP_COMP_COLOR0,	/* 28 */
+	MDP_COMP_COLOR1,	/* 29 */
+	MDP_COMP_COLOR2,	/* 30 */
+	MDP_COMP_COLOR3,	/* 31 */
+	MDP_COMP_PATH0_SOUT,	/* 32 */
+	MDP_COMP_PATH1_SOUT,	/* 33 */
+	MDP_COMP_WROT0,		/* 34 */
+	MDP_COMP_WROT1,		/* 35 */
+	MDP_COMP_WROT2,		/* 36 */
+	MDP_COMP_WROT3,		/* 37 */
+	MDP_COMP_WDMA,		/* 38 */
+	MDP_COMP_SPLIT,		/* 39 */
+	MDP_COMP_SPLIT2,	/* 40 */
+	MDP_COMP_STITCH,	/* 41 */
+	MDP_COMP_FG0,		/* 42 */
+	MDP_COMP_FG1,		/* 43 */
+	MDP_COMP_FG2,		/* 44 */
+	MDP_COMP_FG3,		/* 45 */
+	MDP_COMP_TO_SVPP2MOUT,	/* 46 */
+	MDP_COMP_TO_SVPP3MOUT,	/* 47 */
+	MDP_COMP_TO_WARP0MOUT,	/* 48 */
+	MDP_COMP_TO_WARP1MOUT,	/* 49 */
+	MDP_COMP_VPP0_SOUT,	/* 50 */
+	MDP_COMP_VPP1_SOUT,	/* 51 */
+	MDP_COMP_PQ0_SOUT,	/* 52 */
+	MDP_COMP_PQ1_SOUT,	/* 53 */
+	MDP_COMP_HDR0,		/* 54 */
+	MDP_COMP_HDR1,		/* 55 */
+	MDP_COMP_HDR2,		/* 56 */
+	MDP_COMP_HDR3,		/* 57 */
+	MDP_COMP_OVL0,		/* 58 */
+	MDP_COMP_OVL1,		/* 59 */
+	MDP_COMP_PAD0,		/* 60 */
+	MDP_COMP_PAD1,		/* 61 */
+	MDP_COMP_PAD2,		/* 62 */
+	MDP_COMP_PAD3,		/* 63 */
+	MDP_COMP_TCC0,		/* 64 */
+	MDP_COMP_TCC1,		/* 65 */
+	MDP_COMP_MERGE2,	/* 66 */
+	MDP_COMP_MERGE3,	/* 67 */
+	MDP_COMP_VDO0DL0,	/* 68 */
+	MDP_COMP_VDO1DL0,	/* 69 */
+	MDP_COMP_VDO0DL1,	/* 70 */
+	MDP_COMP_VDO1DL1,	/* 71 */
 
 	MDP_MAX_COMP_COUNT	/* ALWAYS keep at the end */
 };
@@ -117,12 +161,21 @@ enum mdp_comp_type {
 	MDP_COMP_TYPE_COLOR,
 	MDP_COMP_TYPE_DRE,
 	MDP_COMP_TYPE_CCORR,
+	MDP_COMP_TYPE_AAL,
+	MDP_COMP_TYPE_TCC,
 	MDP_COMP_TYPE_HDR,
+	MDP_COMP_TYPE_SPLIT,
+	MDP_COMP_TYPE_STITCH,
+	MDP_COMP_TYPE_FG,
+	MDP_COMP_TYPE_OVL,
+	MDP_COMP_TYPE_PAD,
+	MDP_COMP_TYPE_MERGE,
 
 	MDP_COMP_TYPE_IMGI,
 	MDP_COMP_TYPE_WPEI,
 	MDP_COMP_TYPE_EXTO,	/* External path */
 	MDP_COMP_TYPE_DL_PATH,	/* Direct-link path */
+	MDP_COMP_TYPE_DUMMY,
 
 	MDP_COMP_TYPE_COUNT	/* ALWAYS keep at the end */
 };
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 00:44:12 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 16:44:12 +0800
Subject: [PATCH v2 12/12] media: platform: mtk-mdp3: add 8195 component settings
In-Reply-To: <20221207084412.14075-1-moudy.ho@mediatek.com>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
Message-ID: <20221207084412.14075-13-moudy.ho@mediatek.com>

Extend the MDP3 component settings used in MT8195 platform.
Besides, all component settings need to be read in a specific way to
align shared memory data structure lengths in each platform.

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
---
 .../platform/mediatek/mdp3/mtk-mdp3-cmdq.c    |  57 ++
 .../platform/mediatek/mdp3/mtk-mdp3-comp.c    | 781 +++++++++++++++++-
 2 files changed, 836 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
index d22b6a62cf21..9731b6e3523d 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
@@ -38,6 +38,10 @@ static bool is_output_disabled(int id, const struct img_compparam *param, u32 co
 		num = CFG_COMP(MT8183, param, num_subfrms);
 		dis_output = CFG_COMP(MT8183, param, frame.output_disable);
 		dis_tile = CFG_COMP(MT8183, param, frame.output_disable);
+	} else if (CFG_CHECK(MT8195, id)) {
+		num = CFG_COMP(MT8195, param, num_subfrms);
+		dis_output = CFG_COMP(MT8195, param, frame.output_disable);
+		dis_tile = CFG_COMP(MT8195, param, frame.output_disable);
 	}
 
 	return (count < num) ? (dis_output || dis_tile) : true;
@@ -113,6 +117,8 @@ static int mdp_path_subfrm_require(const struct mdp_path *path,
 
 	if (CFG_CHECK(MT8183, plat_id))
 		num_comp = CFG_GET(MT8183, path->config, num_components);
+	else if (CFG_CHECK(MT8195, plat_id))
+		num_comp = CFG_GET(MT8195, path->config, num_components);
 
 	/* Decide which mutex to use based on the current pipeline */
 	index = __get_pipe(path->mdp_dev, path->comps[0].comp->public_id);
@@ -125,6 +131,9 @@ static int mdp_path_subfrm_require(const struct mdp_path *path,
 
 		if (CFG_CHECK(MT8183, plat_id))
 			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		else if (CFG_CHECK(MT8195, plat_id))
+			inner_id = CFG_GET(MT8195, path->config, components[index].type);
+
 		if (is_dummy_engine(path->mdp_dev, inner_id))
 			continue;
 		ctx = &path->comps[index];
@@ -160,12 +169,17 @@ static int mdp_path_subfrm_run(const struct mdp_path *path,
 
 	if (CFG_CHECK(MT8183, id))
 		num_comp = CFG_GET(MT8183, path->config, num_components);
+	else if (CFG_CHECK(MT8195, id))
+		num_comp = CFG_GET(MT8195, path->config, num_components);
 
 	/* Wait WROT SRAM shared to DISP RDMA */
 	/* Clear SOF event for each engine */
 	for (index = 0; index < num_comp; index++) {
 		if (CFG_CHECK(MT8183, id))
 			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		else if (CFG_CHECK(MT8195, id))
+			inner_id = CFG_GET(MT8195, path->config, components[index].type);
+
 		if (is_dummy_engine(path->mdp_dev, inner_id))
 			continue;
 		ctx = &path->comps[index];
@@ -184,6 +198,9 @@ static int mdp_path_subfrm_run(const struct mdp_path *path,
 	for (index = 0; index < num_comp; index++) {
 		if (CFG_CHECK(MT8183, id))
 			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		else if (CFG_CHECK(MT8195, id))
+			inner_id = CFG_GET(MT8195, path->config, components[index].type);
+
 		if (is_dummy_engine(path->mdp_dev, inner_id))
 			continue;
 		ctx = &path->comps[index];
@@ -206,6 +223,8 @@ static int mdp_path_ctx_init(struct mdp_dev *mdp, struct mdp_path *path)
 
 	if (CFG_CHECK(MT8183, id))
 		num_comp = CFG_GET(MT8183, path->config, num_components);
+	else if (CFG_CHECK(MT8195, id))
+		num_comp = CFG_GET(MT8195, path->config, num_components);
 
 	if (num_comp < 1)
 		return -EINVAL;
@@ -215,10 +234,15 @@ static int mdp_path_ctx_init(struct mdp_dev *mdp, struct mdp_path *path)
 
 		if (CFG_CHECK(MT8183, id))
 			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		else if (CFG_CHECK(MT8195, id))
+			inner_id = CFG_GET(MT8195, path->config, components[index].type);
+
 		if (is_dummy_engine(path->mdp_dev, inner_id))
 			continue;
 		if (CFG_CHECK(MT8183, id))
 			param = (void *)CFG_ADDR(MT8183, path->config, components[index]);
+		else if (CFG_CHECK(MT8195, id))
+			param = (void *)CFG_ADDR(MT8195, path->config, components[index]);
 		ret = mdp_comp_ctx_config(mdp, &path->comps[index],
 					  param, path->param);
 		if (ret)
@@ -242,9 +266,13 @@ static int mdp_path_config_subfrm(struct mdp_cmdq_cmd *cmd,
 
 	if (CFG_CHECK(MT8183, id))
 		num_comp = CFG_GET(MT8183, path->config, num_components);
+	else if (CFG_CHECK(MT8195, id))
+		num_comp = CFG_GET(MT8195, path->config, num_components);
 
 	if (CFG_CHECK(MT8183, id))
 		ctrl = CFG_ADDR(MT8183, path->config, ctrls[count]);
+	else if (CFG_CHECK(MT8195, id))
+		ctrl = CFG_ADDR(MT8195, path->config, ctrls[count]);
 
 	/* Acquire components */
 	ret = mdp_path_subfrm_require(path, cmd, &pipe, count);
@@ -260,6 +288,9 @@ static int mdp_path_config_subfrm(struct mdp_cmdq_cmd *cmd,
 	for (index = (num_comp - 1); index >= 0; index--) {
 		if (CFG_CHECK(MT8183, id))
 			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		else if (CFG_CHECK(MT8195, id))
+			inner_id = CFG_GET(MT8195, path->config, components[index].type);
+
 		if (is_dummy_engine(path->mdp_dev, inner_id))
 			continue;
 		ctx = &path->comps[index];
@@ -277,6 +308,9 @@ static int mdp_path_config_subfrm(struct mdp_cmdq_cmd *cmd,
 	for (index = 0; index < num_comp; index++) {
 		if (CFG_CHECK(MT8183, id))
 			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		else if (CFG_CHECK(MT8195, id))
+			inner_id = CFG_GET(MT8195, path->config, components[index].type);
+
 		if (is_dummy_engine(path->mdp_dev, inner_id))
 			continue;
 		ctx = &path->comps[index];
@@ -290,6 +324,9 @@ static int mdp_path_config_subfrm(struct mdp_cmdq_cmd *cmd,
 	for (index = 0; index < num_comp; index++) {
 		if (CFG_CHECK(MT8183, id))
 			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		else if (CFG_CHECK(MT8195, id))
+			inner_id = CFG_GET(MT8195, path->config, components[index].type);
+
 		if (is_dummy_engine(path->mdp_dev, inner_id))
 			continue;
 		ctx = &path->comps[index];
@@ -319,15 +356,22 @@ static int mdp_path_config(struct mdp_dev *mdp, struct mdp_cmdq_cmd *cmd,
 
 	if (CFG_CHECK(MT8183, id))
 		num_comp = CFG_GET(MT8183, path->config, num_components);
+	else if (CFG_CHECK(MT8195, id))
+		num_comp = CFG_GET(MT8195, path->config, num_components);
 
 	if (CFG_CHECK(MT8183, id))
 		num_sub = CFG_GET(MT8183, path->config, num_subfrms);
+	else if (CFG_CHECK(MT8195, id))
+		num_sub = CFG_GET(MT8195, path->config, num_subfrms);
 
 	/* Config path frame */
 	/* Reset components */
 	for (index = 0; index < num_comp; index++) {
 		if (CFG_CHECK(MT8183, id))
 			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		else if (CFG_CHECK(MT8195, id))
+			inner_id = CFG_GET(MT8195, path->config, components[index].type);
+
 		if (is_dummy_engine(path->mdp_dev, inner_id))
 			continue;
 		ctx = &path->comps[index];
@@ -342,11 +386,16 @@ static int mdp_path_config(struct mdp_dev *mdp, struct mdp_cmdq_cmd *cmd,
 
 		if (CFG_CHECK(MT8183, id))
 			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		else if (CFG_CHECK(MT8195, id))
+			inner_id = CFG_GET(MT8195, path->config, components[index].type);
+
 		if (is_dummy_engine(path->mdp_dev, inner_id))
 			continue;
 
 		if (CFG_CHECK(MT8183, id))
 			out = CFG_COMP(MT8183, ctx->param, outputs[0]);
+		else if (CFG_CHECK(MT8195, id))
+			out = CFG_COMP(MT8195, ctx->param, outputs[0]);
 
 		compose = path->composes[out];
 		ctx = &path->comps[index];
@@ -365,6 +414,9 @@ static int mdp_path_config(struct mdp_dev *mdp, struct mdp_cmdq_cmd *cmd,
 	for (index = 0; index < num_comp; index++) {
 		if (CFG_CHECK(MT8183, id))
 			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		else if (CFG_CHECK(MT8195, id))
+			inner_id = CFG_GET(MT8195, path->config, components[index].type);
+
 		if (is_dummy_engine(path->mdp_dev, inner_id))
 			continue;
 		ctx = &path->comps[index];
@@ -519,6 +571,8 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
 
 	if (CFG_CHECK(MT8183, id))
 		num_comp = CFG_GET(MT8183, param->config, num_components);
+	else if (CFG_CHECK(MT8195, id))
+		num_comp = CFG_GET(MT8195, param->config, num_components);
 	else
 		goto err_destroy_pkt;
 	comps = kcalloc(num_comp, sizeof(*comps), GFP_KERNEL);
@@ -572,6 +626,9 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
 
 		if (CFG_CHECK(MT8183, id))
 			inner_id = CFG_GET(MT8183, path->config, components[i].type);
+		else if (CFG_CHECK(MT8195, id))
+			inner_id = CFG_GET(MT8195, path->config, components[i].type);
+
 		if (is_dummy_engine(mdp, inner_id))
 			continue;
 		memcpy(&comps[i], path->comps[i].comp,
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
index d54d7319af9a..59559a354e1b 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
@@ -15,6 +15,14 @@
 #include "mdp_reg_rdma.h"
 #include "mdp_reg_ccorr.h"
 #include "mdp_reg_rsz.h"
+#include "mdp_reg_fg.h"
+#include "mdp_reg_aal.h"
+#include "mdp_reg_tdshp.h"
+#include "mdp_reg_hdr.h"
+#include "mdp_reg_color.h"
+#include "mdp_reg_ovl.h"
+#include "mdp_reg_pad.h"
+#include "mdp_reg_merge.h"
 #include "mdp_reg_wrot.h"
 #include "mdp_reg_wdma.h"
 
@@ -114,6 +122,7 @@ static int config_rdma_frame(struct mdp_comp_ctx *ctx,
 	bool en_ufo = MDP_COLOR_IS_UFP(colorformat);
 	phys_addr_t base = ctx->comp->reg_base;
 	u8 subsys_id = ctx->comp->subsys_id;
+	u32 rdma_con_mask = 0;
 	u32 reg = 0;
 
 	if (mdp_cfg && mdp_cfg->rdma_support_10bit) {
@@ -134,6 +143,8 @@ static int config_rdma_frame(struct mdp_comp_ctx *ctx,
 	/* Setup source frame info */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.src_ctrl);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.src_ctrl);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_SRC_CON, reg,
 		     0x03C8FE0F);
 
@@ -142,69 +153,161 @@ static int config_rdma_frame(struct mdp_comp_ctx *ctx,
 			/* Setup source buffer base */
 			if (CFG_CHECK(MT8183, p_id))
 				reg = CFG_COMP(MT8183, ctx->param, rdma.ufo_dec_y);
+			else if (CFG_CHECK(MT8195, p_id))
+				reg = CFG_COMP(MT8195, ctx->param, rdma.ufo_dec_y);
 			MM_REG_WRITE(cmd, subsys_id,
 				     base, MDP_RDMA_UFO_DEC_LENGTH_BASE_Y,
 				     reg, 0xFFFFFFFF);
+
 			if (CFG_CHECK(MT8183, p_id))
 				reg = CFG_COMP(MT8183, ctx->param, rdma.ufo_dec_c);
+			else if (CFG_CHECK(MT8195, p_id))
+				reg = CFG_COMP(MT8195, ctx->param, rdma.ufo_dec_c);
 			MM_REG_WRITE(cmd, subsys_id,
 				     base, MDP_RDMA_UFO_DEC_LENGTH_BASE_C,
 				     reg, 0xFFFFFFFF);
+
 			/* Set 10bit source frame pitch */
 			if (block10bit) {
 				if (CFG_CHECK(MT8183, p_id))
 					reg = CFG_COMP(MT8183, ctx->param, rdma.mf_bkgd_in_pxl);
+				else if (CFG_CHECK(MT8195, p_id))
+					reg = CFG_COMP(MT8195, ctx->param, rdma.mf_bkgd_in_pxl);
 				MM_REG_WRITE(cmd, subsys_id,
 					     base, MDP_RDMA_MF_BKGD_SIZE_IN_PXL,
 					     reg, 0x001FFFFF);
 			}
 		}
 
-	if (CFG_CHECK(MT8183, p_id))
+	if (CFG_CHECK(MT8183, p_id)) {
 		reg = CFG_COMP(MT8183, ctx->param, rdma.control);
+		rdma_con_mask = 0x1110;
+	} else if (CFG_CHECK(MT8195, p_id)) {
+		reg = CFG_COMP(MT8195, ctx->param, rdma.control);
+		rdma_con_mask = 0x1130;
+	}
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_CON, reg,
-		     0x1110);
+		     rdma_con_mask);
+
 	/* Setup source buffer base */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.iova[0]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.iova[0]);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_SRC_BASE_0, reg,
 		     0xFFFFFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.iova[1]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.iova[1]);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_SRC_BASE_1, reg,
 		     0xFFFFFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.iova[2]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.iova[2]);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_SRC_BASE_2, reg,
 		     0xFFFFFFFF);
+
 	/* Setup source buffer end */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.iova_end[0]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.iova_end[0]);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_SRC_END_0,
 		     reg, 0xFFFFFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.iova_end[1]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.iova_end[1]);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_SRC_END_1,
 		     reg, 0xFFFFFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.iova_end[2]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.iova_end[2]);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_SRC_END_2,
 		     reg, 0xFFFFFFFF);
+
 	/* Setup source frame pitch */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.mf_bkgd);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.mf_bkgd);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_MF_BKGD_SIZE_IN_BYTE,
 		     reg, 0x001FFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.sf_bkgd);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.sf_bkgd);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_SF_BKGD_SIZE_IN_BYTE,
 		     reg, 0x001FFFFF);
+
 	/* Setup color transform */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.transform);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.transform);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_TRANSFORM_0,
 		     reg, 0x0F110000);
 
+	if (mdp_cfg && mdp_cfg->rdma_esl_setting) {
+		if (CFG_CHECK(MT8195, p_id))
+			reg = CFG_COMP(MT8195, ctx->param, rdma.dmabuf_con0);
+		MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_DMABUF_CON_0,
+			     reg, 0x0FFF00FF);
+
+		if (CFG_CHECK(MT8195, p_id))
+			reg = CFG_COMP(MT8195, ctx->param, rdma.ultra_th_high_con0);
+		MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_ULTRA_TH_HIGH_CON_0,
+			     reg, 0x3FFFFFFF);
+
+		if (CFG_CHECK(MT8195, p_id))
+			reg = CFG_COMP(MT8195, ctx->param, rdma.ultra_th_low_con0);
+		MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_ULTRA_TH_LOW_CON_0,
+			     reg, 0x3FFFFFFF);
+
+		if (CFG_CHECK(MT8195, p_id))
+			reg = CFG_COMP(MT8195, ctx->param, rdma.dmabuf_con1);
+		MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_DMABUF_CON_1,
+			     reg, 0x0F7F007F);
+
+		if (CFG_CHECK(MT8195, p_id))
+			reg = CFG_COMP(MT8195, ctx->param, rdma.ultra_th_high_con1);
+		MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_ULTRA_TH_HIGH_CON_1,
+			     reg, 0x3FFFFFFF);
+
+		if (CFG_CHECK(MT8195, p_id))
+			reg = CFG_COMP(MT8195, ctx->param, rdma.ultra_th_low_con1);
+		MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_ULTRA_TH_LOW_CON_1,
+			     reg, 0x3FFFFFFF);
+
+		if (CFG_CHECK(MT8195, p_id))
+			reg = CFG_COMP(MT8195, ctx->param, rdma.dmabuf_con2);
+		MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_DMABUF_CON_2,
+			     reg, 0x0F3F003F);
+
+		if (CFG_CHECK(MT8195, p_id))
+			reg = CFG_COMP(MT8195, ctx->param, rdma.ultra_th_high_con2);
+		MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_ULTRA_TH_HIGH_CON_2,
+			     reg, 0x3FFFFFFF);
+
+		if (CFG_CHECK(MT8195, p_id))
+			reg = CFG_COMP(MT8195, ctx->param, rdma.ultra_th_low_con2);
+		MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_ULTRA_TH_LOW_CON_2,
+			     reg, 0x3FFFFFFF);
+
+		if (CFG_CHECK(MT8195, p_id))
+			reg = CFG_COMP(MT8195, ctx->param, rdma.dmabuf_con3);
+		MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_DMABUF_CON_3,
+			     reg, 0x0F3F003F);
+	}
+
 	return 0;
 }
 
@@ -226,6 +329,8 @@ static int config_rdma_subfrm(struct mdp_comp_ctx *ctx,
 	/* Set Y pixel offset */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.subfrms[index].offset[0]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.subfrms[index].offset[0]);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_SRC_OFFSET_0,
 		     reg, 0xFFFFFFFF);
 
@@ -234,6 +339,8 @@ static int config_rdma_subfrm(struct mdp_comp_ctx *ctx,
 		if (mdp_cfg->rdma_support_10bit && block10bit && en_ufo) {
 			if (CFG_CHECK(MT8183, p_id))
 				reg = CFG_COMP(MT8183, ctx->param, rdma.subfrms[index].offset_0_p);
+			else if (CFG_CHECK(MT8195, p_id))
+				reg = CFG_COMP(MT8195, ctx->param, rdma.subfrms[index].offset_0_p);
 			MM_REG_WRITE(cmd, subsys_id, base,
 				     MDP_RDMA_SRC_OFFSET_0_P,
 				     reg, 0xFFFFFFFF);
@@ -243,32 +350,49 @@ static int config_rdma_subfrm(struct mdp_comp_ctx *ctx,
 	/* Set U pixel offset */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.subfrms[index].offset[1]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.subfrms[index].offset[1]);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_SRC_OFFSET_1,
 		     reg, 0xFFFFFFFF);
+
 	/* Set V pixel offset */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.subfrms[index].offset[2]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.subfrms[index].offset[2]);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_SRC_OFFSET_2,
 		     reg, 0xFFFFFFFF);
+
 	/* Set source size */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.subfrms[index].src);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.subfrms[index].src);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_MF_SRC_SIZE, reg,
 		     0x1FFF1FFF);
+
 	/* Set target size */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.subfrms[index].clip);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.subfrms[index].clip);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_MF_CLIP_SIZE,
 		     reg, 0x1FFF1FFF);
+
 	/* Set crop offset */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rdma.subfrms[index].clip_ofst);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rdma.subfrms[index].clip_ofst);
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_MF_OFFSET_1,
 		     reg, 0x003F001F);
 
 	if (CFG_CHECK(MT8183, p_id)) {
 		csf_l = CFG_COMP(MT8183, ctx->param, subfrms[index].in.left);
 		csf_r = CFG_COMP(MT8183, ctx->param, subfrms[index].in.right);
+	} else if (CFG_CHECK(MT8195, p_id)) {
+		csf_l = CFG_COMP(MT8195, ctx->param, subfrms[index].in.left);
+		csf_r = CFG_COMP(MT8195, ctx->param, subfrms[index].in.right);
 	}
 	if (mdp_cfg && mdp_cfg->rdma_upsample_repeat_only)
 		if ((csf_r - csf_l + 1) > 320)
@@ -305,6 +429,61 @@ static const struct mdp_comp_ops rdma_ops = {
 	.wait_comp_event = wait_rdma_event,
 };
 
+static int init_fg(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_FG_TRIGGER, BIT(2), BIT(2));
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_FG_TRIGGER, 0x0, BIT(2));
+
+	return 0;
+}
+
+static int config_fg_frame(struct mdp_comp_ctx *ctx,
+			   struct mdp_cmdq_cmd *cmd,
+			   const struct v4l2_rect *compose)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 reg = 0;
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, fg.ctrl_0);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_FG_FG_CTRL_0, reg, BIT(0));
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, fg.ck_en);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_FG_FG_CK_EN, reg, 0x7);
+
+	return 0;
+}
+
+static int config_fg_subfrm(struct mdp_comp_ctx *ctx,
+			    struct mdp_cmdq_cmd *cmd, u32 index)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 reg = 0;
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, fg.subfrms[index].info_0);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_FG_TILE_INFO_0, reg, 0xFFFFFFFF);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, fg.subfrms[index].info_1);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_FG_TILE_INFO_1, reg, 0xFFFFFFFF);
+
+	return 0;
+}
+
+static const struct mdp_comp_ops fg_ops = {
+	.get_comp_flag = get_comp_flag,
+	.init_comp = init_fg,
+	.config_frame = config_fg_frame,
+	.config_subfrm = config_fg_subfrm,
+};
+
 static int init_rsz(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
 {
 	phys_addr_t base = ctx->comp->reg_base;
@@ -315,6 +494,10 @@ static int init_rsz(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
 	MM_REG_WRITE(cmd, subsys_id, base, PRZ_ENABLE, 0x0, BIT(16));
 	/* Enable RSZ */
 	MM_REG_WRITE(cmd, subsys_id, base, PRZ_ENABLE, BIT(0), BIT(0));
+
+	if (CFG_CHECK(MT8195, p_id))
+		mtk_mmsys_vpp_rsz_dcm_config(ctx->comp->mdp_dev->mdp_mmsys2, true);
+
 	return 0;
 }
 
@@ -322,13 +505,19 @@ static int config_rsz_frame(struct mdp_comp_ctx *ctx,
 			    struct mdp_cmdq_cmd *cmd,
 			    const struct v4l2_rect *compose)
 {
+	const struct mdp_platform_config *mdp_cfg = __get_plat_cfg(ctx);
 	phys_addr_t base = ctx->comp->reg_base;
 	u8 subsys_id = ctx->comp->subsys_id;
 	bool bypass = FALSE;
 	u32 reg = 0;
 
+	if (mdp_cfg && mdp_cfg->rsz_etc_control)
+		MM_REG_WRITE(cmd, subsys_id, base, RSZ_ETC_CONTROL, 0x0, 0xFFFFFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		bypass = CFG_COMP(MT8183, ctx->param, frame.bypass);
+	else if (CFG_CHECK(MT8195, p_id))
+		bypass = CFG_COMP(MT8195, ctx->param, frame.bypass);
 
 	if (bypass) {
 		/* Disable RSZ */
@@ -338,20 +527,32 @@ static int config_rsz_frame(struct mdp_comp_ctx *ctx,
 
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rsz.control1);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rsz.control1);
 	MM_REG_WRITE(cmd, subsys_id, base, PRZ_CONTROL_1, reg,
 		     0x03FFFDF3);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rsz.control2);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rsz.control2);
 	MM_REG_WRITE(cmd, subsys_id, base, PRZ_CONTROL_2, reg,
 		     0x0FFFC290);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rsz.coeff_step_x);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rsz.coeff_step_x);
 	MM_REG_WRITE(cmd, subsys_id, base, PRZ_HORIZONTAL_COEFF_STEP,
 		     reg, 0x007FFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rsz.coeff_step_y);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rsz.coeff_step_y);
 	MM_REG_WRITE(cmd, subsys_id, base, PRZ_VERTICAL_COEFF_STEP,
 		     reg, 0x007FFFFF);
+
 	return 0;
 }
 
@@ -361,21 +562,30 @@ static int config_rsz_subfrm(struct mdp_comp_ctx *ctx,
 	const struct mdp_platform_config *mdp_cfg = __get_plat_cfg(ctx);
 	phys_addr_t base = ctx->comp->reg_base;
 	u8 subsys_id = ctx->comp->subsys_id;
+	u32 id;
 	u32 csf_l = 0, csf_r = 0;
 	u32 reg = 0;
 
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rsz.subfrms[index].control2);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rsz.subfrms[index].control2);
 	MM_REG_WRITE(cmd, subsys_id, base, PRZ_CONTROL_2, reg,
 		     0x00003800);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rsz.subfrms[index].src);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rsz.subfrms[index].src);
 	MM_REG_WRITE(cmd, subsys_id, base, PRZ_INPUT_IMAGE, reg,
 		     0xFFFFFFFF);
 
 	if (CFG_CHECK(MT8183, p_id)) {
 		csf_l = CFG_COMP(MT8183, ctx->param, subfrms[index].in.left);
 		csf_r = CFG_COMP(MT8183, ctx->param, subfrms[index].in.right);
+	} else if (CFG_CHECK(MT8195, p_id)) {
+		csf_l = CFG_COMP(MT8195, ctx->param, subfrms[index].in.left);
+		csf_r = CFG_COMP(MT8195, ctx->param, subfrms[index].in.right);
 	}
 	if (mdp_cfg && mdp_cfg->rsz_disable_dcm_small_sample)
 		if ((csf_r - csf_l + 1) <= 16)
@@ -384,37 +594,95 @@ static int config_rsz_subfrm(struct mdp_comp_ctx *ctx,
 
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, subfrms[index].luma.left);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, subfrms[index].luma.left);
 	MM_REG_WRITE(cmd, subsys_id, base, PRZ_LUMA_HORIZONTAL_INTEGER_OFFSET,
 		     reg, 0xFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, subfrms[index].luma.left_subpix);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, subfrms[index].luma.left_subpix);
 	MM_REG_WRITE(cmd, subsys_id,
 		     base, PRZ_LUMA_HORIZONTAL_SUBPIXEL_OFFSET,
 		     reg, 0x1FFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, subfrms[index].luma.top);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, subfrms[index].luma.top);
 	MM_REG_WRITE(cmd, subsys_id, base, PRZ_LUMA_VERTICAL_INTEGER_OFFSET,
 		     reg, 0xFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, subfrms[index].luma.top_subpix);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, subfrms[index].luma.top_subpix);
 	MM_REG_WRITE(cmd, subsys_id, base, PRZ_LUMA_VERTICAL_SUBPIXEL_OFFSET,
 		     reg, 0x1FFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, subfrms[index].chroma.left);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, subfrms[index].chroma.left);
 	MM_REG_WRITE(cmd, subsys_id,
 		     base, PRZ_CHROMA_HORIZONTAL_INTEGER_OFFSET,
 		     reg, 0xFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, subfrms[index].chroma.left_subpix);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, subfrms[index].chroma.left_subpix);
 	MM_REG_WRITE(cmd, subsys_id,
 		     base, PRZ_CHROMA_HORIZONTAL_SUBPIXEL_OFFSET,
 		     reg, 0x1FFFFF);
 
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, rsz.subfrms[index].clip);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, rsz.subfrms[index].clip);
 	MM_REG_WRITE(cmd, subsys_id, base, PRZ_OUTPUT_IMAGE, reg,
 		     0xFFFFFFFF);
 
+	if (CFG_CHECK(MT8195, p_id)) {
+		struct mdp_comp *merge;
+		const struct mtk_mdp_driver_data *data = ctx->comp->mdp_dev->mdp_data;
+		enum mtk_mdp_comp_id public_id = ctx->comp->public_id;
+
+		switch (public_id) {
+		case MDP_COMP_RSZ2:
+			merge = ctx->comp->mdp_dev->comp[MDP_COMP_MERGE2];
+			break;
+		case MDP_COMP_RSZ3:
+			merge = ctx->comp->mdp_dev->comp[MDP_COMP_MERGE3];
+			break;
+		default:
+			goto rsz_subfrm_done;
+		}
+		id = data->comp_data[public_id].match.alias_id;
+		if (CFG_CHECK(MT8195, p_id))
+			reg = CFG_COMP(MT8195, ctx->param, rsz.subfrms[index].rsz_switch);
+		mtk_mmsys_vpp_rsz_merge_config(ctx->comp->mdp_dev->mdp_mmsys2, id, reg);
+
+		if (CFG_CHECK(MT8195, p_id))
+			reg = CFG_COMP(MT8195, ctx->param, rsz.subfrms[index].merge_cfg);
+		MM_REG_WRITE(cmd, merge->subsys_id, merge->reg_base,
+			     MDP_MERGE_CFG_0, reg, 0xFFFFFFFF);
+		MM_REG_WRITE(cmd, merge->subsys_id, merge->reg_base,
+			     MDP_MERGE_CFG_4, reg, 0xFFFFFFFF);
+		MM_REG_WRITE(cmd, merge->subsys_id, merge->reg_base,
+			     MDP_MERGE_CFG_24, reg, 0xFFFFFFFF);
+		MM_REG_WRITE(cmd, merge->subsys_id, merge->reg_base,
+			     MDP_MERGE_CFG_25, reg, 0xFFFFFFFF);
+
+		/* Bypass mode */
+		MM_REG_WRITE(cmd, merge->subsys_id, merge->reg_base,
+			     MDP_MERGE_CFG_12, BIT(0), 0xFFFFFFFF);
+		MM_REG_WRITE(cmd, merge->subsys_id, merge->reg_base,
+			     MDP_MERGE_ENABLE, BIT(0), 0xFFFFFFFF);
+	}
+
+rsz_subfrm_done:
 	return 0;
 }
 
@@ -431,6 +699,9 @@ static int advance_rsz_subfrm(struct mdp_comp_ctx *ctx,
 		if (CFG_CHECK(MT8183, p_id)) {
 			csf_l = CFG_COMP(MT8183, ctx->param, subfrms[index].in.left);
 			csf_r = CFG_COMP(MT8183, ctx->param, subfrms[index].in.right);
+		} else if (CFG_CHECK(MT8195, p_id)) {
+			csf_l = CFG_COMP(MT8195, ctx->param, subfrms[index].in.left);
+			csf_r = CFG_COMP(MT8195, ctx->param, subfrms[index].in.right);
 		}
 
 		if ((csf_r - csf_l + 1) <= 16)
@@ -449,6 +720,410 @@ static const struct mdp_comp_ops rsz_ops = {
 	.advance_subfrm = advance_rsz_subfrm,
 };
 
+static int init_aal(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+
+	/* Always set MDP_AAL enable to 1 */
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_AAL_EN, BIT(0), BIT(0));
+
+	return 0;
+}
+
+static int config_aal_frame(struct mdp_comp_ctx *ctx,
+			    struct mdp_cmdq_cmd *cmd,
+			    const struct v4l2_rect *compose)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 reg = 0;
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, aal.cfg_main);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_AAL_CFG_MAIN, reg, BIT(7));
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, aal.cfg);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_AAL_CFG, reg, BIT(0));
+
+	return 0;
+}
+
+static int config_aal_subfrm(struct mdp_comp_ctx *ctx,
+			     struct mdp_cmdq_cmd *cmd, u32 index)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 reg = 0;
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, aal.subfrms[index].src);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_AAL_SIZE,
+		     reg, MDP_AAL_SIZE_MASK);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, aal.subfrms[index].clip_ofst);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_AAL_OUTPUT_OFFSET,
+		     reg, 0x00FF00FF);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, aal.subfrms[index].clip);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_AAL_OUTPUT_SIZE,
+		     reg, MDP_AAL_OUTPUT_SIZE_MASK);
+
+	return 0;
+}
+
+static const struct mdp_comp_ops aal_ops = {
+	.get_comp_flag = get_comp_flag,
+	.init_comp = init_aal,
+	.config_frame = config_aal_frame,
+	.config_subfrm = config_aal_subfrm,
+};
+
+static int init_hdr(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+
+	/* Always set MDP_HDR enable to 1 */
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_HDR_TOP, BIT(0), BIT(0));
+
+	return 0;
+}
+
+static int config_hdr_frame(struct mdp_comp_ctx *ctx,
+			    struct mdp_cmdq_cmd *cmd,
+			    const struct v4l2_rect *compose)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 reg = 0;
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, hdr.top);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_HDR_TOP, reg, BIT(29) | BIT(28));
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, hdr.relay);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_HDR_RELAY, reg, BIT(0));
+
+	return 0;
+}
+
+static int config_hdr_subfrm(struct mdp_comp_ctx *ctx,
+			     struct mdp_cmdq_cmd *cmd, u32 index)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 reg = 0;
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, hdr.subfrms[index].win_size);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_HDR_TILE_POS,
+		     reg, MDP_HDR_TILE_POS_MASK);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, hdr.subfrms[index].src);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_HDR_SIZE_0, reg, 0x1FFF1FFF);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, hdr.subfrms[index].clip_ofst0);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_HDR_SIZE_1, reg, 0x1FFF1FFF);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, hdr.subfrms[index].clip_ofst1);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_HDR_SIZE_2, reg, 0x1FFF1FFF);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, hdr.subfrms[index].hist_ctrl_0);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_HDR_HIST_CTRL_0, reg, 0x00003FFF);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, hdr.subfrms[index].hist_ctrl_1);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_HDR_HIST_CTRL_1, reg, 0x00003FFF);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, hdr.subfrms[index].hdr_top);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_HDR_TOP, reg, BIT(6) | BIT(5));
+
+	/* Enable histogram */
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, hdr.subfrms[index].hist_addr);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_HDR_HIST_ADDR, reg, BIT(9));
+
+	return 0;
+}
+
+static const struct mdp_comp_ops hdr_ops = {
+	.get_comp_flag = get_comp_flag,
+	.init_comp = init_hdr,
+	.config_frame = config_hdr_frame,
+	.config_subfrm = config_hdr_subfrm,
+};
+
+static void reset_luma_hist(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
+{
+	const struct mdp_platform_config *mdp_cfg = __get_plat_cfg(ctx);
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 hist_num = mdp_cfg->tdshp_hist_num;
+	u32 i;
+
+	/* Reset histogram */
+	for (i = 0; i <= hist_num; i++)
+		MM_REG_WRITE_MASK(cmd, subsys_id, base,
+				  (MDP_LUMA_HIST_INIT + (i << 2)),
+				  0, 0xFFFFFFFF);
+
+	if (mdp_cfg && mdp_cfg->tdshp_constrain)
+		MM_REG_WRITE(cmd, subsys_id, base,
+			     MDP_DC_TWO_D_W1_RESULT_INIT, 0, 0xFFFFFFFF);
+
+	if (mdp_cfg && mdp_cfg->tdshp_contour)
+		for (i = 0; i < hist_num; i++)
+			MM_REG_WRITE_MASK(cmd, subsys_id, base,
+					  (MDP_CONTOUR_HIST_INIT + (i << 2)),
+					  0, 0xFFFFFFFF);
+}
+
+static int init_tdshp(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_TDSHP_CTRL, BIT(0), BIT(0));
+	/* Enable FIFO */
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_TDSHP_CFG, BIT(1), BIT(1));
+	reset_luma_hist(ctx, cmd);
+
+	return 0;
+}
+
+static int config_tdshp_frame(struct mdp_comp_ctx *ctx,
+			      struct mdp_cmdq_cmd *cmd,
+			      const struct v4l2_rect *compose)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 reg = 0;
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, tdshp.cfg);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_TDSHP_CFG, reg, BIT(0));
+
+	return 0;
+}
+
+static int config_tdshp_subfrm(struct mdp_comp_ctx *ctx,
+			       struct mdp_cmdq_cmd *cmd, u32 index)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 reg = 0;
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, tdshp.subfrms[index].src);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_TDSHP_INPUT_SIZE,
+		     reg, MDP_TDSHP_INPUT_SIZE_MASK);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, tdshp.subfrms[index].clip_ofst);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_TDSHP_OUTPUT_OFFSET,
+		     reg, 0x00FF00FF);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, tdshp.subfrms[index].clip);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_TDSHP_OUTPUT_SIZE,
+		     reg, MDP_TDSHP_OUTPUT_SIZE_MASK);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, tdshp.subfrms[index].hist_cfg_0);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_HIST_CFG_00, reg, 0xFFFFFFFF);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, tdshp.subfrms[index].hist_cfg_1);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_HIST_CFG_01, reg, 0xFFFFFFFF);
+
+	return 0;
+}
+
+static const struct mdp_comp_ops tdshp_ops = {
+	.get_comp_flag = get_comp_flag,
+	.init_comp = init_tdshp,
+	.config_frame = config_tdshp_frame,
+	.config_subfrm = config_tdshp_subfrm,
+};
+
+static int init_color(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+
+	MM_REG_WRITE(cmd, subsys_id, base,
+		     MDP_COLOR_START, 0x1, BIT(1) | BIT(0));
+	MM_REG_WRITE(cmd, subsys_id, base,
+		     MDP_COLOR_WIN_X_MAIN, 0xFFFF0000, 0xFFFFFFFF);
+	MM_REG_WRITE(cmd, subsys_id, base,
+		     MDP_COLOR_WIN_Y_MAIN, 0xFFFF0000, 0xFFFFFFFF);
+
+	/* Reset color matrix */
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_COLOR_CM1_EN, 0x0, BIT(0));
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_COLOR_CM2_EN, 0x0, BIT(0));
+
+	/* Enable interrupt */
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_COLOR_INTEN, 0x7, 0x7);
+
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_COLOR_OUT_SEL, 0x333, 0x333);
+
+	return 0;
+}
+
+static int config_color_frame(struct mdp_comp_ctx *ctx,
+			      struct mdp_cmdq_cmd *cmd,
+			      const struct v4l2_rect *compose)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 reg = 0;
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, color.start);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_COLOR_START,
+		     reg, MDP_COLOR_START_MASK);
+
+	return 0;
+}
+
+static int config_color_subfrm(struct mdp_comp_ctx *ctx,
+			       struct mdp_cmdq_cmd *cmd, u32 index)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 reg = 0;
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, color.subfrms[index].in_hsize);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_COLOR_INTERNAL_IP_WIDTH,
+		     reg, 0x00003FFF);
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, color.subfrms[index].in_vsize);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_COLOR_INTERNAL_IP_HEIGHT,
+		     reg, 0x00003FFF);
+
+	return 0;
+}
+
+static const struct mdp_comp_ops color_ops = {
+	.get_comp_flag = get_comp_flag,
+	.init_comp = init_color,
+	.config_frame = config_color_frame,
+	.config_subfrm = config_color_subfrm,
+};
+
+static int init_ovl(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_OVL_EN,
+		     BIT(0), MDP_OVL_EN_MASK);
+
+	/* Set to relay mode */
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_OVL_SRC_CON,
+		     BIT(9), MDP_OVL_SRC_CON_MASK);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_OVL_DP_CON,
+		     BIT(0), MDP_OVL_DP_CON_MASK);
+
+	return 0;
+}
+
+static int config_ovl_frame(struct mdp_comp_ctx *ctx,
+			    struct mdp_cmdq_cmd *cmd,
+			    const struct v4l2_rect *compose)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 reg = 0;
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, ovl.L0_con);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_OVL_L0_CON, reg, BIT(29) | BIT(28));
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, ovl.src_con);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_OVL_SRC_CON, reg, BIT(0));
+
+	return 0;
+}
+
+static int config_ovl_subfrm(struct mdp_comp_ctx *ctx,
+			     struct mdp_cmdq_cmd *cmd, u32 index)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 reg = 0;
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, ovl.subfrms[index].L0_src_size);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_OVL_L0_SRC_SIZE,
+		     reg, MDP_OVL_L0_SRC_SIZE_MASK);
+
+	/* Setup output size */
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, ovl.subfrms[index].roi_size);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_OVL_ROI_SIZE,
+		     reg, MDP_OVL_ROI_SIZE_MASK);
+
+	return 0;
+}
+
+static const struct mdp_comp_ops ovl_ops = {
+	.get_comp_flag = get_comp_flag,
+	.init_comp = init_ovl,
+	.config_frame = config_ovl_frame,
+	.config_subfrm = config_ovl_subfrm,
+};
+
+static int init_pad(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_PAD_CON,
+		     BIT(1), MDP_PAD_CON_MASK);
+	/* Reset */
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_PAD_W_SIZE,
+		     0, MDP_PAD_W_SIZE_MASK);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_PAD_H_SIZE,
+		     0, MDP_PAD_H_SIZE_MASK);
+
+	return 0;
+}
+
+static int config_pad_subfrm(struct mdp_comp_ctx *ctx,
+			     struct mdp_cmdq_cmd *cmd, u32 index)
+{
+	phys_addr_t base = ctx->comp->reg_base;
+	u16 subsys_id = ctx->comp->subsys_id;
+	u32 reg = 0;
+
+	if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, pad.subfrms[index].pic_size);
+	MM_REG_WRITE(cmd, subsys_id, base, MDP_PAD_PIC_SIZE,
+		     reg, MDP_PAD_PIC_SIZE_MASK);
+
+	return 0;
+}
+
+static const struct mdp_comp_ops pad_ops = {
+	.get_comp_flag = get_comp_flag,
+	.init_comp = init_pad,
+	.config_subfrm = config_pad_subfrm,
+};
+
 static int init_wrot(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
 {
 	phys_addr_t base = ctx->comp->reg_base;
@@ -457,6 +1132,11 @@ static int init_wrot(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
 	/* Reset WROT */
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_SOFT_RST, BIT(0), BIT(0));
 	MM_REG_POLL(cmd, subsys_id, base, VIDO_SOFT_RST_STAT, BIT(0), BIT(0));
+
+	/* Reset setting */
+	if (CFG_CHECK(MT8195, p_id))
+		MM_REG_WRITE(cmd, subsys_id, base, VIDO_CTRL, 0x0, 0xFFFFFFFF);
+
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_SOFT_RST, 0x0, BIT(0));
 	MM_REG_POLL(cmd, subsys_id, base, VIDO_SOFT_RST_STAT, 0x0, BIT(0));
 	return 0;
@@ -474,57 +1154,120 @@ static int config_wrot_frame(struct mdp_comp_ctx *ctx,
 	/* Write frame base address */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.iova[0]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.iova[0]);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_BASE_ADDR, reg,
 		     0xFFFFFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.iova[1]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.iova[1]);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_BASE_ADDR_C, reg,
 		     0xFFFFFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.iova[2]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.iova[2]);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_BASE_ADDR_V, reg,
 		     0xFFFFFFFF);
+
+	if (mdp_cfg) {
+		if (mdp_cfg->wrot_support_10bit) {
+			if (CFG_CHECK(MT8195, p_id))
+				reg = CFG_COMP(MT8195, ctx->param, wrot.scan_10bit);
+			MM_REG_WRITE(cmd, subsys_id, base, VIDO_SCAN_10BIT,
+				     reg, 0x0000000F);
+
+			if (CFG_CHECK(MT8195, p_id))
+				reg = CFG_COMP(MT8195, ctx->param, wrot.pending_zero);
+			MM_REG_WRITE(cmd, subsys_id, base, VIDO_PENDING_ZERO,
+				     reg, 0x04000000);
+		}
+
+		if (CFG_CHECK(MT8195, p_id)) {
+			reg = CFG_COMP(MT8195, ctx->param, wrot.bit_number);
+			MM_REG_WRITE(cmd, subsys_id, base, VIDO_CTRL_2,
+				     reg, 0x00000007);
+		}
+	}
+
 	/* Write frame related registers */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.control);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.control);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_CTRL, reg,
 		     0xF131510F);
+
+	/* Write pre-ultra threshold */
+	if (CFG_CHECK(MT8195, p_id)) {
+		reg = CFG_COMP(MT8195, ctx->param, wrot.pre_ultra);
+		MM_REG_WRITE(cmd, subsys_id, base, VIDO_DMA_PREULTRA, reg,
+			     0x00FFFFFF);
+	}
+
 	/* Write frame Y pitch */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.stride[0]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.stride[0]);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_STRIDE, reg,
 		     0x0000FFFF);
+
 	/* Write frame UV pitch */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.stride[1]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.stride[1]);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_STRIDE_C, reg,
 		     0xFFFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.stride[2]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.stride[2]);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_STRIDE_V, reg,
 		     0xFFFF);
+
 	/* Write matrix control */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.mat_ctrl);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.mat_ctrl);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_MAT_CTRL, reg, 0xF3);
 
 	/* Set the fixed ALPHA as 0xFF */
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_DITHER, 0xFF000000,
 		     0xFF000000);
+
 	/* Set VIDO_EOL_SEL */
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_RSV_1, BIT(31), BIT(31));
+
 	/* Set VIDO_FIFO_TEST */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.fifo_test);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.fifo_test);
+
 	if (reg != 0)
 		MM_REG_WRITE(cmd, subsys_id, base, VIDO_FIFO_TEST,
 			     reg, 0xFFF);
+
 	/* Filter enable */
 	if (mdp_cfg && mdp_cfg->wrot_filter_constraint) {
 		if (CFG_CHECK(MT8183, p_id))
 			reg = CFG_COMP(MT8183, ctx->param, wrot.filter);
+		else if (CFG_CHECK(MT8195, p_id))
+			reg = CFG_COMP(MT8195, ctx->param, wrot.filter);
 		MM_REG_WRITE(cmd, subsys_id, base, VIDO_MAIN_BUF_SIZE,
 			     reg, 0x77);
+
+		/* Turn off WROT dma dcm */
+		if (CFG_CHECK(MT8195, p_id))
+			MM_REG_WRITE(cmd, subsys_id, base, VIDO_ROT_EN,
+				     (0x1 << 23) + (0x1 << 20), 0x900000);
 	}
 
 	return 0;
@@ -540,35 +1283,54 @@ static int config_wrot_subfrm(struct mdp_comp_ctx *ctx,
 	/* Write Y pixel offset */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.subfrms[index].offset[0]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.subfrms[index].offset[0]);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_OFST_ADDR,
 		     reg, 0x0FFFFFFF);
+
 	/* Write U pixel offset */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.subfrms[index].offset[1]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.subfrms[index].offset[1]);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_OFST_ADDR_C,
 		     reg, 0x0FFFFFFF);
+
 	/* Write V pixel offset */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.subfrms[index].offset[2]);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.subfrms[index].offset[2]);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_OFST_ADDR_V,
 		     reg, 0x0FFFFFFF);
+
 	/* Write source size */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.subfrms[index].src);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.subfrms[index].src);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_IN_SIZE, reg,
 		     0x1FFF1FFF);
+
 	/* Write target size */
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.subfrms[index].clip);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.subfrms[index].clip);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_TAR_SIZE, reg,
 		     0x1FFF1FFF);
+
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.subfrms[index].clip_ofst);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.subfrms[index].clip_ofst);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_CROP_OFST, reg,
 		     0x1FFF1FFF);
 
 	if (CFG_CHECK(MT8183, p_id))
 		reg = CFG_COMP(MT8183, ctx->param, wrot.subfrms[index].main_buf);
+	else if (CFG_CHECK(MT8195, p_id))
+		reg = CFG_COMP(MT8195, ctx->param, wrot.subfrms[index].main_buf);
 	MM_REG_WRITE(cmd, subsys_id, base, VIDO_MAIN_BUF_SIZE,
 		     reg, 0x1FFF7F00);
 
@@ -778,6 +1540,13 @@ static const struct mdp_comp_ops *mdp_comp_ops[MDP_COMP_TYPE_COUNT] = {
 	[MDP_COMP_TYPE_WROT] =		&wrot_ops,
 	[MDP_COMP_TYPE_WDMA] =		&wdma_ops,
 	[MDP_COMP_TYPE_CCORR] =		&ccorr_ops,
+	[MDP_COMP_TYPE_HDR] =		&hdr_ops,
+	[MDP_COMP_TYPE_FG] =		&fg_ops,
+	[MDP_COMP_TYPE_AAL] =		&aal_ops,
+	[MDP_COMP_TYPE_TDSHP] =		&tdshp_ops,
+	[MDP_COMP_TYPE_COLOR] =		&color_ops,
+	[MDP_COMP_TYPE_OVL] =		&ovl_ops,
+	[MDP_COMP_TYPE_PAD] =		&pad_ops,
 };
 
 static const struct of_device_id mdp_comp_dt_ids[] = {
@@ -1226,6 +1995,8 @@ int mdp_comp_ctx_config(struct mdp_dev *mdp, struct mdp_comp_ctx *ctx,
 
 	if (CFG_CHECK(MT8183, p_id))
 		arg = CFG_COMP(MT8183, param, type);
+	else if (CFG_CHECK(MT8195, p_id))
+		arg = CFG_COMP(MT8195, param, type);
 	else
 		return -EINVAL;
 	public_id = get_comp_public_id(mdp, arg);
@@ -1243,16 +2014,22 @@ int mdp_comp_ctx_config(struct mdp_dev *mdp, struct mdp_comp_ctx *ctx,
 	ctx->param = param;
 	if (CFG_CHECK(MT8183, p_id))
 		arg = CFG_COMP(MT8183, param, input);
+	else if (CFG_CHECK(MT8195, p_id))
+		arg = CFG_COMP(MT8195, param, input);
 	else
 		return -EINVAL;
 	ctx->input = &frame->inputs[arg];
 	if (CFG_CHECK(MT8183, p_id))
 		idx = CFG_COMP(MT8183, param, num_outputs);
+	else if (CFG_CHECK(MT8195, p_id))
+		idx = CFG_COMP(MT8195, param, num_outputs);
 	else
 		return -EINVAL;
 	for (i = 0; i < idx; i++) {
 		if (CFG_CHECK(MT8183, p_id))
 			arg = CFG_COMP(MT8183, param, outputs[i]);
+		else if (CFG_CHECK(MT8195, p_id))
+			arg = CFG_COMP(MT8195, param, outputs[i]);
 		else
 			return -EINVAL;
 		ctx->outputs[i] = &frame->outputs[arg];
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 00:44:08 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 16:44:08 +0800
Subject: [PATCH v2 08/12] media: platform: mtk-mdp3: avoid multiple driver registrations
In-Reply-To: <20221207084412.14075-1-moudy.ho@mediatek.com>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
Message-ID: <20221207084412.14075-9-moudy.ho@mediatek.com>

The number of MDP3 driver probes depends on the registered clocks of MMSYS.
Because VPPSYS0 and VPPSYS1 are used in MT8195 MDP3, it is necessary to
avoid multiple driver registrations.

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
---
 drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c | 7 ++++++-
 drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h | 1 +
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
index 56c42bd3f16b..6e3abadef6cd 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
@@ -187,6 +187,11 @@ static int mdp_probe(struct platform_device *pdev)
 	mdp->pdev = pdev;
 	mdp->mdp_data = of_device_get_match_data(&pdev->dev);
 
+	if (strcmp(dev->of_node->name, MDP_NODE_NAME)) {
+		platform_set_drvdata(pdev, mdp);
+		goto success_return;
+	}
+
 	mm_pdev = __get_pdev_by_id(pdev, NULL, MDP_INFRA_MMSYS);
 	if (IS_ERR_OR_NULL(mm_pdev)) {
 		ret = -ENODEV;
@@ -224,7 +229,6 @@ static int mdp_probe(struct platform_device *pdev)
 		p = (id && mm2_pdev) ? mm2_pdev : mm_pdev;
 		m = (id && mm2_pdev) ?
 			mdp->mdp_mutex2 : mdp->mdp_mutex;
-
 		if (m[mutex_id])
 			continue;
 		m[mutex_id] = mtk_mutex_get(&p->dev);
@@ -293,6 +297,7 @@ static int mdp_probe(struct platform_device *pdev)
 		goto err_unregister_device;
 	}
 
+success_return:
 	dev_dbg(dev, "mdp-%d registered successfully\n", pdev->id);
 	return 0;
 
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
index 49b6e9c8e089..e5bd75ff90ee 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
@@ -14,6 +14,7 @@
 #include "mtk-mdp3-comp.h"
 #include "mtk-mdp3-vpu.h"
 
+#define MDP_NODE_NAME		"mdp3-rdma0"
 #define MDP_MODULE_NAME		"mtk-mdp3"
 #define MDP_DEVICE_NAME		"MediaTek MDP3"
 #define MDP_PHANDLE_NAME	"mediatek,mdp3"
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 00:44:09 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 16:44:09 +0800
Subject: [PATCH v2 09/12] media: platform: mtk-mdp3: extend GCE event waiting in RDMA and WROT
In-Reply-To: <20221207084412.14075-1-moudy.ho@mediatek.com>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
Message-ID: <20221207084412.14075-10-moudy.ho@mediatek.com>

Support for multiple RDMA/WROT waits for GCE events.

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
---
 .../mediatek/mdp3/mt8183/mdp3-plat-mt8183.h     |  2 ++
 .../platform/mediatek/mdp3/mtk-mdp3-comp.c      | 17 +++++++++++------
 .../platform/mediatek/mdp3/mtk-mdp3-core.h      |  2 ++
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/drivers/media/platform/mediatek/mdp3/mt8183/mdp3-plat-mt8183.h b/drivers/media/platform/mediatek/mdp3/mt8183/mdp3-plat-mt8183.h
index fb9b34fa901a..f6a8aad33521 100644
--- a/drivers/media/platform/mediatek/mdp3/mt8183/mdp3-plat-mt8183.h
+++ b/drivers/media/platform/mediatek/mdp3/mt8183/mdp3-plat-mt8183.h
@@ -11,8 +11,10 @@ static const struct mdp_platform_config mt8183_plat_cfg = {
 	.rdma_support_10bit		= true,
 	.rdma_rsz1_sram_sharing		= true,
 	.rdma_upsample_repeat_only	= true,
+	.rdma_event_num			= 1,
 	.rsz_disable_dcm_small_sample	= false,
 	.wrot_filter_constraint		= false,
+	.wrot_event_num			= 1,
 };
 
 static const struct of_device_id mt8183_mdp_probe_infra[MDP_INFRA_MAX] = {
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
index e6d2da173d6f..265b712d762f 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
@@ -280,14 +280,17 @@ static int config_rdma_subfrm(struct mdp_comp_ctx *ctx,
 
 static int wait_rdma_event(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
 {
+	const struct mdp_platform_config *mdp_cfg = __get_plat_cfg(ctx);
 	struct device *dev = &ctx->comp->mdp_dev->pdev->dev;
 	phys_addr_t base = ctx->comp->reg_base;
 	u8 subsys_id = ctx->comp->subsys_id;
 
-	if (ctx->comp->alias_id == 0)
+	if (ctx->comp->alias_id < mdp_cfg->rdma_event_num) {
 		MM_REG_WAIT(cmd, ctx->comp->gce_event[MDP_GCE_EVENT_EOF]);
-	else
-		dev_err(dev, "Do not support RDMA1_DONE event\n");
+	} else {
+		dev_err(dev, "Invalid RDMA event %d\n", ctx->comp->alias_id);
+		return -EINVAL;
+	}
 
 	/* Disable RDMA */
 	MM_REG_WRITE(cmd, subsys_id, base, MDP_RDMA_EN, 0x0, BIT(0));
@@ -582,10 +585,12 @@ static int wait_wrot_event(struct mdp_comp_ctx *ctx, struct mdp_cmdq_cmd *cmd)
 	phys_addr_t base = ctx->comp->reg_base;
 	u8 subsys_id = ctx->comp->subsys_id;
 
-	if (ctx->comp->alias_id == 0)
+	if (ctx->comp->alias_id < mdp_cfg->wrot_event_num) {
 		MM_REG_WAIT(cmd, ctx->comp->gce_event[MDP_GCE_EVENT_EOF]);
-	else
-		dev_err(dev, "Do not support WROT1_DONE event\n");
+	} else {
+		dev_err(dev, "Invalid WROT event %d!\n", ctx->comp->alias_id);
+		return -EINVAL;
+	}
 
 	if (mdp_cfg && mdp_cfg->wrot_filter_constraint)
 		MM_REG_WRITE(cmd, subsys_id, base, VIDO_MAIN_BUF_SIZE, 0x0,
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
index e5bd75ff90ee..d0a2ec11e67f 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
@@ -40,8 +40,10 @@ struct mdp_platform_config {
 	bool	rdma_support_10bit;
 	bool	rdma_rsz1_sram_sharing;
 	bool	rdma_upsample_repeat_only;
+	u32	rdma_event_num;
 	bool	rsz_disable_dcm_small_sample;
 	bool	wrot_filter_constraint;
+	u32	wrot_event_num;
 };
 
 /* indicate which mutex is used by each pipepline */
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 00:44:07 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 16:44:07 +0800
Subject: [PATCH v2 07/12] media: platform: mtk-mdp3: add checks for dummy components
In-Reply-To: <20221207084412.14075-1-moudy.ho@mediatek.com>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
Message-ID: <20221207084412.14075-8-moudy.ho@mediatek.com>

Some MDP3 components are only used as bridges and do not require configuration.

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
---
 .../platform/mediatek/mdp3/mtk-mdp3-cmdq.c    | 64 ++++++++++++++++++-
 1 file changed, 63 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
index 365efe6a6c92..d22b6a62cf21 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
@@ -43,6 +43,13 @@ static bool is_output_disabled(int id, const struct img_compparam *param, u32 co
 	return (count < num) ? (dis_output || dis_tile) : true;
 }
 
+static bool is_dummy_engine(struct mdp_dev *mdp_dev, s32 inner_id)
+{
+	enum mtk_mdp_comp_id public_id = get_comp_public_id(mdp_dev, inner_id);
+
+	return (mdp_dev->mdp_data->comp_data[public_id].match.type == MDP_COMP_TYPE_DUMMY);
+}
+
 static struct mtk_mutex *__get_mutex(const struct mdp_dev *mdp_dev,
 				     const struct mdp_pipe_info *p)
 {
@@ -114,6 +121,12 @@ static int mdp_path_subfrm_require(const struct mdp_path *path,
 
 	/* Set mutex mod */
 	for (index = 0; index < num_comp; index++) {
+		s32 inner_id = MDP_COMP_NONE;
+
+		if (CFG_CHECK(MT8183, plat_id))
+			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		if (is_dummy_engine(path->mdp_dev, inner_id))
+			continue;
 		ctx = &path->comps[index];
 		if (is_output_disabled(plat_id, ctx->param, count))
 			continue;
@@ -138,6 +151,7 @@ static int mdp_path_subfrm_run(const struct mdp_path *path,
 	int index;
 	u32 num_comp = 0;
 	s32 event;
+	s32 inner_id = MDP_COMP_NONE;
 
 	if (-1 == p->mutex_id) {
 		dev_err(dev, "Incorrect mutex id");
@@ -150,6 +164,10 @@ static int mdp_path_subfrm_run(const struct mdp_path *path,
 	/* Wait WROT SRAM shared to DISP RDMA */
 	/* Clear SOF event for each engine */
 	for (index = 0; index < num_comp; index++) {
+		if (CFG_CHECK(MT8183, id))
+			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		if (is_dummy_engine(path->mdp_dev, inner_id))
+			continue;
 		ctx = &path->comps[index];
 		if (is_output_disabled(id, ctx->param, count))
 			continue;
@@ -164,6 +182,10 @@ static int mdp_path_subfrm_run(const struct mdp_path *path,
 
 	/* Wait SOF events and clear mutex modules (optional) */
 	for (index = 0; index < num_comp; index++) {
+		if (CFG_CHECK(MT8183, id))
+			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		if (is_dummy_engine(path->mdp_dev, inner_id))
+			continue;
 		ctx = &path->comps[index];
 		if (is_output_disabled(id, ctx->param, count))
 			continue;
@@ -189,6 +211,12 @@ static int mdp_path_ctx_init(struct mdp_dev *mdp, struct mdp_path *path)
 		return -EINVAL;
 
 	for (index = 0; index < num_comp; index++) {
+		s32 inner_id = MDP_COMP_NONE;
+
+		if (CFG_CHECK(MT8183, id))
+			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		if (is_dummy_engine(path->mdp_dev, inner_id))
+			continue;
 		if (CFG_CHECK(MT8183, id))
 			param = (void *)CFG_ADDR(MT8183, path->config, components[index]);
 		ret = mdp_comp_ctx_config(mdp, &path->comps[index],
@@ -210,6 +238,7 @@ static int mdp_path_config_subfrm(struct mdp_cmdq_cmd *cmd,
 	struct mdp_pipe_info pipe;
 	int index, ret;
 	u32 num_comp = 0;
+	s32 inner_id = MDP_COMP_NONE;
 
 	if (CFG_CHECK(MT8183, id))
 		num_comp = CFG_GET(MT8183, path->config, num_components);
@@ -229,6 +258,10 @@ static int mdp_path_config_subfrm(struct mdp_cmdq_cmd *cmd,
 	}
 	/* Config sub-frame information */
 	for (index = (num_comp - 1); index >= 0; index--) {
+		if (CFG_CHECK(MT8183, id))
+			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		if (is_dummy_engine(path->mdp_dev, inner_id))
+			continue;
 		ctx = &path->comps[index];
 		if (is_output_disabled(id, ctx->param, count))
 			continue;
@@ -242,6 +275,10 @@ static int mdp_path_config_subfrm(struct mdp_cmdq_cmd *cmd,
 		return ret;
 	/* Wait components done */
 	for (index = 0; index < num_comp; index++) {
+		if (CFG_CHECK(MT8183, id))
+			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		if (is_dummy_engine(path->mdp_dev, inner_id))
+			continue;
 		ctx = &path->comps[index];
 		if (is_output_disabled(id, ctx->param, count))
 			continue;
@@ -251,6 +288,10 @@ static int mdp_path_config_subfrm(struct mdp_cmdq_cmd *cmd,
 	}
 	/* Advance to the next sub-frame */
 	for (index = 0; index < num_comp; index++) {
+		if (CFG_CHECK(MT8183, id))
+			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		if (is_dummy_engine(path->mdp_dev, inner_id))
+			continue;
 		ctx = &path->comps[index];
 		ret = call_op(ctx, advance_subfrm, cmd, count);
 		if (ret)
@@ -274,6 +315,7 @@ static int mdp_path_config(struct mdp_dev *mdp, struct mdp_cmdq_cmd *cmd,
 	int index, count, ret;
 	u32 num_comp = 0;
 	u32 num_sub = 0;
+	s32 inner_id = MDP_COMP_NONE;
 
 	if (CFG_CHECK(MT8183, id))
 		num_comp = CFG_GET(MT8183, path->config, num_components);
@@ -284,6 +326,10 @@ static int mdp_path_config(struct mdp_dev *mdp, struct mdp_cmdq_cmd *cmd,
 	/* Config path frame */
 	/* Reset components */
 	for (index = 0; index < num_comp; index++) {
+		if (CFG_CHECK(MT8183, id))
+			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		if (is_dummy_engine(path->mdp_dev, inner_id))
+			continue;
 		ctx = &path->comps[index];
 		ret = call_op(ctx, init_comp, cmd);
 		if (ret)
@@ -294,6 +340,11 @@ static int mdp_path_config(struct mdp_dev *mdp, struct mdp_cmdq_cmd *cmd,
 		const struct v4l2_rect *compose;
 		u32 out = 0;
 
+		if (CFG_CHECK(MT8183, id))
+			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		if (is_dummy_engine(path->mdp_dev, inner_id))
+			continue;
+
 		if (CFG_CHECK(MT8183, id))
 			out = CFG_COMP(MT8183, ctx->param, outputs[0]);
 
@@ -312,6 +363,10 @@ static int mdp_path_config(struct mdp_dev *mdp, struct mdp_cmdq_cmd *cmd,
 	}
 	/* Post processing information */
 	for (index = 0; index < num_comp; index++) {
+		if (CFG_CHECK(MT8183, id))
+			inner_id = CFG_GET(MT8183, path->config, components[index].type);
+		if (is_dummy_engine(path->mdp_dev, inner_id))
+			continue;
 		ctx = &path->comps[index];
 		ret = call_op(ctx, post_process, cmd);
 		if (ret)
@@ -512,9 +567,16 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
 	}
 	cmdq_pkt_finalize(&cmd->pkt);
 
-	for (i = 0; i < num_comp; i++)
+	for (i = 0; i < num_comp; i++) {
+		s32 inner_id = MDP_COMP_NONE;
+
+		if (CFG_CHECK(MT8183, id))
+			inner_id = CFG_GET(MT8183, path->config, components[i].type);
+		if (is_dummy_engine(mdp, inner_id))
+			continue;
 		memcpy(&comps[i], path->comps[i].comp,
 		       sizeof(struct mdp_comp));
+	}
 
 	mdp->cmdq_clt->client.rx_callback = mdp_handle_cmdq_callback;
 	cmd->mdp = mdp;
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 00:44:03 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 16:44:03 +0800
Subject: [PATCH v2 03/12] media: platform: mtk-mdp3: add support second sets of MMSYS
In-Reply-To: <20221207084412.14075-1-moudy.ho@mediatek.com>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
Message-ID: <20221207084412.14075-4-moudy.ho@mediatek.com>

In MT8195, there are two sets of MMSYS named VPPSYS0 and VPPSYS1,
which are used to coordinate and control the clock, power and
register settings required by the components of MDP3.

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
---
 .../mediatek/mdp3/mt8183/mdp3-plat-mt8183.h   | 44 +++++++++----------
 .../platform/mediatek/mdp3/mtk-mdp3-comp.h    |  1 +
 .../platform/mediatek/mdp3/mtk-mdp3-core.c    | 40 +++++++++++------
 .../platform/mediatek/mdp3/mtk-mdp3-core.h    |  3 ++
 4 files changed, 53 insertions(+), 35 deletions(-)

diff --git a/drivers/media/platform/mediatek/mdp3/mt8183/mdp3-plat-mt8183.h b/drivers/media/platform/mediatek/mdp3/mt8183/mdp3-plat-mt8183.h
index eb0ab1880fe2..fb9b34fa901a 100644
--- a/drivers/media/platform/mediatek/mdp3/mt8183/mdp3-plat-mt8183.h
+++ b/drivers/media/platform/mediatek/mdp3/mt8183/mdp3-plat-mt8183.h
@@ -22,10 +22,10 @@ static const struct of_device_id mt8183_mdp_probe_infra[MDP_INFRA_MAX] = {
 };
 
 static const struct mdp_pipe_info mt8183_pipe_info[] = {
-	[MDP_PIPE_RDMA0] = {MDP_PIPE_RDMA0, 0},
-	[MDP_PIPE_IMGI] = {MDP_PIPE_IMGI, 1},
-	[MDP_PIPE_WPEI] = {MDP_PIPE_WPEI, 2},
-	[MDP_PIPE_WPEI2] = {MDP_PIPE_WPEI2, 3}
+	[MDP_PIPE_RDMA0] = {MDP_PIPE_RDMA0, 0, 0},
+	[MDP_PIPE_IMGI] = {MDP_PIPE_IMGI, 0, 1},
+	[MDP_PIPE_WPEI] = {MDP_PIPE_WPEI, 0, 2},
+	[MDP_PIPE_WPEI2] = {MDP_PIPE_WPEI2, 0, 3}
 };
 
 static const u32 mt8183_mutex_idx[MDP_MAX_COMP_COUNT] = {
@@ -89,75 +89,75 @@ enum mt8183_mdp_comp_id {
 
 static const struct mdp_comp_data mt8183_mdp_comp_data[MDP_MAX_COMP_COUNT] = {
 	[MDP_COMP_WPEI] = {
-		{MDP_COMP_TYPE_WPEI, 0, MT8183_MDP_COMP_WPEI},
+		{MDP_COMP_TYPE_WPEI, 0, MT8183_MDP_COMP_WPEI, 0},
 		{0, 0, 0}
 	},
 	[MDP_COMP_WPEO] = {
-		{MDP_COMP_TYPE_EXTO, 2, MT8183_MDP_COMP_WPEO},
+		{MDP_COMP_TYPE_EXTO, 2, MT8183_MDP_COMP_WPEO, 0},
 		{0, 0, 0}
 	},
 	[MDP_COMP_WPEI2] = {
-		{MDP_COMP_TYPE_WPEI, 1, MT8183_MDP_COMP_WPEI2},
+		{MDP_COMP_TYPE_WPEI, 1, MT8183_MDP_COMP_WPEI2, 0},
 		{0, 0, 0}
 	},
 	[MDP_COMP_WPEO2] = {
-		{MDP_COMP_TYPE_EXTO, 3, MT8183_MDP_COMP_WPEO2},
+		{MDP_COMP_TYPE_EXTO, 3, MT8183_MDP_COMP_WPEO2, 0},
 		{0, 0, 0}
 	},
 	[MDP_COMP_ISP_IMGI] = {
-		{MDP_COMP_TYPE_IMGI, 0, MT8183_MDP_COMP_ISP_IMGI},
+		{MDP_COMP_TYPE_IMGI, 0, MT8183_MDP_COMP_ISP_IMGI, 0},
 		{0, 0, 4}
 	},
 	[MDP_COMP_ISP_IMGO] = {
-		{MDP_COMP_TYPE_EXTO, 0, MT8183_MDP_COMP_ISP_IMGO},
+		{MDP_COMP_TYPE_EXTO, 0, MT8183_MDP_COMP_ISP_IMGO, 0},
 		{0, 0, 4}
 	},
 	[MDP_COMP_ISP_IMG2O] = {
-		{MDP_COMP_TYPE_EXTO, 1, MT8183_MDP_COMP_ISP_IMG2O},
+		{MDP_COMP_TYPE_EXTO, 1, MT8183_MDP_COMP_ISP_IMG2O, 0},
 		{0, 0, 0}
 	},
 	[MDP_COMP_CAMIN] = {
-		{MDP_COMP_TYPE_DL_PATH, 0, MT8183_MDP_COMP_CAMIN},
+		{MDP_COMP_TYPE_DL_PATH, 0, MT8183_MDP_COMP_CAMIN, 0},
 		{2, 2, 1}
 	},
 	[MDP_COMP_CAMIN2] = {
-		{MDP_COMP_TYPE_DL_PATH, 1, MT8183_MDP_COMP_CAMIN2},
+		{MDP_COMP_TYPE_DL_PATH, 1, MT8183_MDP_COMP_CAMIN2, 0},
 		{2, 4, 1}
 	},
 	[MDP_COMP_RDMA0] = {
-		{MDP_COMP_TYPE_RDMA, 0, MT8183_MDP_COMP_RDMA0},
+		{MDP_COMP_TYPE_RDMA, 0, MT8183_MDP_COMP_RDMA0, 0},
 		{2, 0, 0}
 	},
 	[MDP_COMP_CCORR0] = {
-		{MDP_COMP_TYPE_CCORR, 0, MT8183_MDP_COMP_CCORR0},
+		{MDP_COMP_TYPE_CCORR, 0, MT8183_MDP_COMP_CCORR0, 0},
 		{1, 0, 0}
 	},
 	[MDP_COMP_RSZ0] = {
-		{MDP_COMP_TYPE_RSZ, 0, MT8183_MDP_COMP_RSZ0},
+		{MDP_COMP_TYPE_RSZ, 0, MT8183_MDP_COMP_RSZ0, 0},
 		{1, 0, 0}
 	},
 	[MDP_COMP_RSZ1] = {
-		{MDP_COMP_TYPE_RSZ, 1, MT8183_MDP_COMP_RSZ1},
+		{MDP_COMP_TYPE_RSZ, 1, MT8183_MDP_COMP_RSZ1, 0},
 		{1, 0, 0}
 	},
 	[MDP_COMP_TDSHP0] = {
-		{MDP_COMP_TYPE_TDSHP, 0, MT8183_MDP_COMP_TDSHP0},
+		{MDP_COMP_TYPE_TDSHP, 0, MT8183_MDP_COMP_TDSHP0, 0},
 		{0, 0, 0}
 	},
 	[MDP_COMP_PATH0_SOUT] = {
-		{MDP_COMP_TYPE_PATH, 0, MT8183_MDP_COMP_PATH0_SOUT},
+		{MDP_COMP_TYPE_PATH, 0, MT8183_MDP_COMP_PATH0_SOUT, 0},
 		{0, 0, 0}
 	},
 	[MDP_COMP_PATH1_SOUT] = {
-		{MDP_COMP_TYPE_PATH, 1, MT8183_MDP_COMP_PATH1_SOUT},
+		{MDP_COMP_TYPE_PATH, 1, MT8183_MDP_COMP_PATH1_SOUT, 0},
 		{0, 0, 0}
 	},
 	[MDP_COMP_WROT0] = {
-		{MDP_COMP_TYPE_WROT, 0, MT8183_MDP_COMP_WROT0},
+		{MDP_COMP_TYPE_WROT, 0, MT8183_MDP_COMP_WROT0, 0},
 		{1, 0, 0}
 	},
 	[MDP_COMP_WDMA] = {
-		{MDP_COMP_TYPE_WDMA, 0, MT8183_MDP_COMP_WDMA},
+		{MDP_COMP_TYPE_WDMA, 0, MT8183_MDP_COMP_WDMA, 0},
 		{1, 0, 0}
 	},
 };
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.h b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.h
index 5188aa0821c4..afec66c49f77 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.h
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.h
@@ -138,6 +138,7 @@ struct mdp_comp_match {
 	enum mdp_comp_type type;
 	u32 alias_id;
 	s32 inner_id;
+	u32 mmsys_id;
 };
 
 /* Used to describe the item order in MDP property */
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
index 8daa7245c90b..927d3d65751a 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
@@ -41,39 +41,45 @@ static const struct of_device_id mdp_of_ids[] = {
 MODULE_DEVICE_TABLE(of, mdp_of_ids);
 
 static struct platform_device *__get_pdev_by_id(struct platform_device *pdev,
+						struct platform_device *from,
 						enum mdp_infra_id id)
 {
-	struct device_node *node;
+	struct device_node *node, *f = NULL;
 	struct platform_device *mdp_pdev = NULL;
 	const struct mtk_mdp_driver_data *mdp_data;
 	const char *compat;
 
 	if (!pdev)
-		return NULL;
+		return ERR_PTR(-ENODEV);
 
 	if (id < MDP_INFRA_MMSYS || id >= MDP_INFRA_MAX) {
 		dev_err(&pdev->dev, "Illegal infra id %d\n", id);
-		return NULL;
+		return ERR_PTR(-ENODEV);
 	}
 
 	mdp_data = of_device_get_match_data(&pdev->dev);
 	if (!mdp_data) {
 		dev_err(&pdev->dev, "have no driver data to find node\n");
-		return NULL;
+		return ERR_PTR(-ENODEV);
 	}
+
 	compat = mdp_data->mdp_probe_infra[id].compatible;
+	if (strlen(compat) == 0)
+		return NULL;
 
-	node = of_find_compatible_node(NULL, NULL, compat);
+	if (from)
+		f = from->dev.of_node;
+	node = of_find_compatible_node(f, NULL, compat);
 	if (WARN_ON(!node)) {
 		dev_err(&pdev->dev, "find node from id %d failed\n", id);
-		return NULL;
+		return ERR_PTR(-ENODEV);
 	}
 
 	mdp_pdev = of_find_device_by_node(node);
 	of_node_put(node);
 	if (WARN_ON(!mdp_pdev)) {
 		dev_err(&pdev->dev, "find pdev from id %d failed\n", id);
-		return NULL;
+		return ERR_PTR(-ENODEV);
 	}
 
 	return mdp_pdev;
@@ -167,7 +173,7 @@ static int mdp_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct mdp_dev *mdp;
-	struct platform_device *mm_pdev;
+	struct platform_device *mm_pdev, *mm2_pdev;
 	int ret, i, mutex_id;
 
 	mdp = kzalloc(sizeof(*mdp), GFP_KERNEL);
@@ -179,15 +185,23 @@ static int mdp_probe(struct platform_device *pdev)
 	mdp->pdev = pdev;
 	mdp->mdp_data = of_device_get_match_data(&pdev->dev);
 
-	mm_pdev = __get_pdev_by_id(pdev, MDP_INFRA_MMSYS);
-	if (!mm_pdev) {
+	mm_pdev = __get_pdev_by_id(pdev, NULL, MDP_INFRA_MMSYS);
+	if (IS_ERR_OR_NULL(mm_pdev)) {
 		ret = -ENODEV;
 		goto err_destroy_device;
 	}
 	mdp->mdp_mmsys = &mm_pdev->dev;
 
-	mm_pdev = __get_pdev_by_id(pdev, MDP_INFRA_MUTEX);
-	if (WARN_ON(!mm_pdev)) {
+	/* Not all chips have MMSYS2, config may be null */
+	mm2_pdev = __get_pdev_by_id(pdev, mm_pdev, MDP_INFRA_MMSYS2);
+	if (IS_ERR(mm2_pdev)) {
+		ret = PTR_ERR(mm2_pdev);
+		goto err_destroy_device;
+	}
+	mdp->mdp_mmsys2 = &mm2_pdev->dev;
+
+	mm_pdev = __get_pdev_by_id(pdev, NULL, MDP_INFRA_MUTEX);
+	if (IS_ERR_OR_NULL(mm_pdev)) {
 		ret = -ENODEV;
 		goto err_destroy_device;
 	}
@@ -223,7 +237,7 @@ static int mdp_probe(struct platform_device *pdev)
 		goto err_destroy_job_wq;
 	}
 
-	mm_pdev = __get_pdev_by_id(pdev, MDP_INFRA_SCP);
+	mm_pdev = __get_pdev_by_id(pdev, NULL, MDP_INFRA_SCP);
 	if (WARN_ON(!mm_pdev)) {
 		dev_err(&pdev->dev, "Could not get scp device\n");
 		ret = -ENODEV;
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
index 4591109eaf62..50c0bc6c358f 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
@@ -20,6 +20,7 @@
 
 enum mdp_infra_id {
 	MDP_INFRA_MMSYS,
+	MDP_INFRA_MMSYS2,
 	MDP_INFRA_MUTEX,
 	MDP_INFRA_SCP,
 	MDP_INFRA_MAX
@@ -68,6 +69,7 @@ struct mtk_mdp_driver_data {
 struct mdp_dev {
 	struct platform_device			*pdev;
 	struct device				*mdp_mmsys;
+	struct device				*mdp_mmsys2;
 	struct mtk_mutex			*mdp_mutex[MDP_PIPE_MAX];
 	struct mdp_comp				*comp[MDP_MAX_COMP_COUNT];
 	const struct mtk_mdp_driver_data	*mdp_data;
@@ -96,6 +98,7 @@ struct mdp_dev {
 
 struct mdp_pipe_info {
 	enum mdp_pipe_id pipe_id;
+	u32 mmsys_id;
 	u32 mutex_id;
 };
 
-- 
2.18.0



From lorenzo at kernel.org  Wed Dec  7 00:58:34 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Wed, 7 Dec 2022 09:58:34 +0100
Subject: [PATCH net-next] net: ethernet: mtk_wed: fix possible deadlock
 if mtk_wed_wo_init fails
In-Reply-To: <20221206172426.7e7cf3bf@kernel.org>
References: <a87f05e60ea1a94b571c9c87b69cc5b0e94943f2.1669999089.git.lorenzo@kernel.org>
 <Y4ybbkn+nXkGsqWe@unreal>
 <Y4y4If8XXu+wErIj@lore-desk>
 <Y42d2us5Pv1UqhEj@unreal>
 <Y420B4/IpwFHJAck@lore-desk>
 <20221205174441.30741550@kernel.org>
 <Y4/VvGi2d0/0RrRW@lore-desk>
 <20221206172426.7e7cf3bf@kernel.org>
Message-ID: <Y5BVunJ8Ti8xJ2IC@lore-desk>

> On Wed, 7 Dec 2022 00:52:28 +0100 Lorenzo Bianconi wrote:
> > > FWIW, that does seem slightly better to me as well.
> > > Also - aren't you really fixing multiple issues here 
> > > (even if on the same error path)? The locking, 
> > > the null-checking and the change in mtk_wed_wo_reset()?  
> > 
> > wo NULL pointer issue was not hit before for the deadlock one (so I fixed them
> > in the same patch).
> > Do you prefer to split them in two patches? (wo null pointer fix first).
> 
> Yes, I think they are different issues even if once "covers" the other.
> I think it'd make the review / judgment easier.

ok, I will post v3 splitting them.

Regards,
Lorenzo

> 
> > I have posted v2 addressing Leon's comments but I need to post a v3 to add
> > missing WARN_ON.
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221207/235b665b/attachment.sig>

From moudy.ho at mediatek.com  Wed Dec  7 00:44:11 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 16:44:11 +0800
Subject: [PATCH v2 11/12] media: platform: mtk-mdp3: add 8195 shared memory configurations
In-Reply-To: <20221207084412.14075-1-moudy.ho@mediatek.com>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
Message-ID: <20221207084412.14075-12-moudy.ho@mediatek.com>

The configuration of the MT8195 components in the shared memory
is defined in the header file "mdp3-comp-mt8195.h".

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
---
 .../mediatek/mdp3/mt8195/mdp3-comp-mt8195.h   | 283 ++++++++++++++++++
 .../platform/mediatek/mdp3/mtk-img-ipi.h      |   3 +
 2 files changed, 286 insertions(+)
 create mode 100644 drivers/media/platform/mediatek/mdp3/mt8195/mdp3-comp-mt8195.h

diff --git a/drivers/media/platform/mediatek/mdp3/mt8195/mdp3-comp-mt8195.h b/drivers/media/platform/mediatek/mdp3/mt8195/mdp3-comp-mt8195.h
new file mode 100644
index 000000000000..2f791597bd7b
--- /dev/null
+++ b/drivers/media/platform/mediatek/mdp3/mt8195/mdp3-comp-mt8195.h
@@ -0,0 +1,283 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Ping-Hsun Wu <ping-hsun.wu at mediatek.com>
+ */
+
+#ifndef __MDP3_COMP_MT8195_H__
+#define __MDP3_COMP_MT8195_H__
+
+#include "mtk-mdp3-type.h"
+
+/*
+ * ISP-MDP generic output information
+ * MD5 of the target SCP blob:
+ *     6da52bdcf4bf76a0983b313e1d4745d6
+ */
+
+#define IMG_MAX_SUBFRAMES_8195      14
+
+struct img_comp_frame_8195 {
+	u32 output_disable;
+	u32 bypass;
+	u32 in_width;
+	u32 in_height;
+	u32 out_width;
+	u32 out_height;
+	struct img_crop crop;
+	u32 in_total_width;
+	u32 out_total_width;
+} __packed;
+
+struct img_comp_subfrm_8195 {
+	u32 tile_disable;
+	struct img_region in;
+	struct img_region out;
+	struct img_offset luma;
+	struct img_offset chroma;
+	s32 out_vertical; /* Output vertical index */
+	s32 out_horizontal; /* Output horizontal index */
+} __packed;
+
+struct mdp_rdma_subfrm_8195 {
+	u32 offset[IMG_MAX_PLANES];
+	u32 offset_0_p;
+	u32 src;
+	u32 clip;
+	u32 clip_ofst;
+	u32 in_tile_xleft;
+	u32 in_tile_ytop;
+} __packed;
+
+struct mdp_rdma_data_8195 {
+	u32 src_ctrl;
+	u32 comp_ctrl;
+	u32 control;
+	u32 iova[IMG_MAX_PLANES];
+	u32 iova_end[IMG_MAX_PLANES];
+	u32 mf_bkgd;
+	u32 mf_bkgd_in_pxl;
+	u32 sf_bkgd;
+	u32 ufo_dec_y;
+	u32 ufo_dec_c;
+	u32 transform;
+	u32 dmabuf_con0;
+	u32 ultra_th_high_con0;
+	u32 ultra_th_low_con0;
+	u32 dmabuf_con1;
+	u32 ultra_th_high_con1;
+	u32 ultra_th_low_con1;
+	u32 dmabuf_con2;
+	u32 ultra_th_high_con2;
+	u32 ultra_th_low_con2;
+	u32 dmabuf_con3;
+	struct mdp_rdma_subfrm_8195 subfrms[IMG_MAX_SUBFRAMES_8195];
+} __packed;
+
+struct mdp_fg_subfrm_8195 {
+	u32 info_0;
+	u32 info_1;
+} __packed;
+
+struct mdp_fg_data_8195 {
+	u32 ctrl_0;
+	u32 ck_en;
+	struct mdp_fg_subfrm_8195 subfrms[IMG_MAX_SUBFRAMES_8195];
+} __packed;
+
+struct mdp_hdr_subfrm_8195 {
+	u32 win_size;
+	u32 src;
+	u32 clip_ofst0;
+	u32 clip_ofst1;
+	u32 hist_ctrl_0;
+	u32 hist_ctrl_1;
+	u32 hdr_top;
+	u32 hist_addr;
+} __packed;
+
+struct mdp_hdr_data_8195 {
+	u32 top;
+	u32 relay;
+	struct mdp_hdr_subfrm_8195   subfrms[IMG_MAX_SUBFRAMES_8195];
+} __packed;
+
+struct mdp_aal_subfrm_8195 {
+	u32 src;
+	u32 clip;
+	u32 clip_ofst;
+} __packed;
+
+struct mdp_aal_data_8195 {
+	u32 cfg_main;
+	u32 cfg;
+	struct mdp_aal_subfrm_8195   subfrms[IMG_MAX_SUBFRAMES_8195];
+} __packed;
+
+struct mdp_rsz_subfrm_8195 {
+	u32 control2;
+	u32 src;
+	u32 clip;
+	u32 hdmirx_en;
+	u32 luma_h_int_ofst;
+	u32 luma_h_sub_ofst;
+	u32 luma_v_int_ofst;
+	u32 luma_v_sub_ofst;
+	u32 chroma_h_int_ofst;
+	u32 chroma_h_sub_ofst;
+	u32 rsz_switch;
+	u32 merge_cfg;
+} __packed;
+
+struct mdp_rsz_data_8195 {
+	u32 coeff_step_x;
+	u32 coeff_step_y;
+	u32 control1;
+	u32 control2;
+	u32 etc_control;
+	u32 prz_enable;
+	u32 ibse_softclip;
+	u32 tap_adapt;
+	u32 ibse_gaincontrol1;
+	u32 ibse_gaincontrol2;
+	u32 ibse_ylevel_1;
+	u32 ibse_ylevel_2;
+	u32 ibse_ylevel_3;
+	u32 ibse_ylevel_4;
+	u32 ibse_ylevel_5;
+	struct mdp_rsz_subfrm_8195 subfrms[IMG_MAX_SUBFRAMES_8195];
+} __packed;
+
+struct mdp_tdshp_subfrm_8195 {
+	u32 src;
+	u32 clip;
+	u32 clip_ofst;
+	u32 hist_cfg_0;
+	u32 hist_cfg_1;
+} __packed;
+
+struct mdp_tdshp_data_8195 {
+	u32 cfg;
+	struct mdp_tdshp_subfrm_8195 subfrms[IMG_MAX_SUBFRAMES_8195];
+} __packed;
+
+struct mdp_color_subfrm_8195 {
+	u32 in_hsize;
+	u32 in_vsize;
+} __packed;
+
+struct mdp_color_data_8195 {
+	u32 start;
+	struct mdp_color_subfrm_8195 subfrms[IMG_MAX_SUBFRAMES_8195];
+} __packed;
+
+struct mdp_ovl_subfrm_8195 {
+	u32 L0_src_size;
+	u32 roi_size;
+} __packed;
+
+struct mdp_ovl_data_8195 {
+	u32 L0_con;
+	u32 src_con;
+	struct mdp_ovl_subfrm_8195 subfrms[IMG_MAX_SUBFRAMES_8195];
+} __packed;
+
+struct mdp_pad_subfrm_8195 {
+	u32 pic_size;
+} __packed;
+
+struct mdp_pad_data_8195 {
+	struct mdp_pad_subfrm_8195 subfrms[IMG_MAX_SUBFRAMES_8195];
+} __packed;
+
+struct mdp_tcc_subfrm_8195 {
+	u32 pic_size;
+} __packed;
+
+struct mdp_tcc_data_8195 {
+	struct mdp_tcc_subfrm_8195 subfrms[IMG_MAX_SUBFRAMES_8195];
+} __packed;
+
+struct mdp_wrot_subfrm_8195 {
+	u32 offset[IMG_MAX_PLANES];
+	u32 src;
+	u32 clip;
+	u32 clip_ofst;
+	u32 main_buf;
+} __packed;
+
+struct mdp_wrot_data_8195 {
+	u32 iova[IMG_MAX_PLANES];
+	u32 control;
+	u32 stride[IMG_MAX_PLANES];
+	u32 mat_ctrl;
+	u32 fifo_test;
+	u32 filter;
+	u32 pre_ultra;
+	u32 framesize;
+	u32 afbc_yuvtrans;
+	u32 scan_10bit;
+	u32 pending_zero;
+	u32 bit_number;
+	u32 pvric;
+	u32 vpp02vpp1;
+	struct mdp_wrot_subfrm_8195 subfrms[IMG_MAX_SUBFRAMES_8195];
+} __packed;
+
+struct mdp_wdma_subfrm_8195 {
+	u32 offset[IMG_MAX_PLANES];
+	u32 src;
+	u32 clip;
+	u32 clip_ofst;
+} __packed;
+
+struct mdp_wdma_data_8195 {
+	u32 wdma_cfg;
+	u32 iova[IMG_MAX_PLANES];
+	u32 w_in_byte;
+	u32 uv_stride;
+	struct mdp_wdma_subfrm_8195 subfrms[IMG_MAX_SUBFRAMES_8195];
+} __packed;
+
+struct isp_data_8195 {
+	u64 dl_flags; /* 1 << (enum mdp_comp_type) */
+	u32 smxi_iova[4];
+	u32 cq_idx;
+	u32 cq_iova;
+	u32 tpipe_iova[IMG_MAX_SUBFRAMES_8195];
+} __packed;
+
+struct img_compparam_8195 {
+	u32 type; /* enum mdp_comp_id */
+	u32 id; /* engine alias_id */
+	u32 input;
+	u32 outputs[IMG_MAX_HW_OUTPUTS];
+	u32 num_outputs;
+	struct img_comp_frame_8195 frame;
+	struct img_comp_subfrm_8195 subfrms[IMG_MAX_SUBFRAMES_8195];
+	u32 num_subfrms;
+	union {
+		struct mdp_rdma_data_8195 rdma;
+		struct mdp_fg_data_8195 fg;
+		struct mdp_hdr_data_8195 hdr;
+		struct mdp_aal_data_8195 aal;
+		struct mdp_rsz_data_8195 rsz;
+		struct mdp_tdshp_data_8195 tdshp;
+		struct mdp_color_data_8195 color;
+		struct mdp_ovl_data_8195 ovl;
+		struct mdp_pad_data_8195 pad;
+		struct mdp_tcc_data_8195 tcc;
+		struct mdp_wrot_data_8195 wrot;
+		struct mdp_wdma_data_8195 wdma;
+		struct isp_data_8195 isp;
+	};
+} __packed;
+
+struct img_config_8195 {
+	struct img_compparam_8195 components[IMG_MAX_COMPONENTS];
+	u32 num_components;
+	struct img_mmsys_ctrl ctrls[IMG_MAX_SUBFRAMES_8195];
+	u32 num_subfrms;
+} __packed;
+
+#endif  /* __MDP3_COMP_MT8195_H__ */
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-img-ipi.h b/drivers/media/platform/mediatek/mdp3/mtk-img-ipi.h
index 412b6ab06a82..5dc97894c435 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-img-ipi.h
+++ b/drivers/media/platform/mediatek/mdp3/mtk-img-ipi.h
@@ -12,6 +12,7 @@
 #include <linux/err.h>
 #include "mtk-mdp3-type.h"
 #include "mt8183/mdp3-comp-mt8183.h"
+#include "mt8195/mdp3-comp-mt8195.h"
 
 /* ISP-MDP generic input information */
 
@@ -135,12 +136,14 @@ struct img_frameparam {
 struct img_config {
 	union {
 		struct img_config_8183 config_8183;
+		struct img_config_8195 config_8195;
 	};
 } __packed;
 
 struct img_compparam {
 	union {
 		struct img_compparam_8183 comp_8183;
+		struct img_compparam_8195 comp_8195;
 	};
 } __packed;
 
-- 
2.18.0



From deren.wu at mediatek.com  Wed Dec  7 01:22:06 2022
From: deren.wu at mediatek.com (Deren Wu)
Date: Wed, 7 Dec 2022 17:22:06 +0800
Subject: [PATCH] wifi: mt76: fix coverity uninit_use_in_call in mt76_connac2_reverse_frag0_hdr_trans()
Message-ID: <200ea97407b6f121da7ccd4567fde4b0426c5d9c.1670404791.git.deren.wu@mediatek.com>

The default case for frame_contorl is invalid. We should always
assign addr3 of this frame properly.

Coverity error message:
if (ieee80211_has_a4(hdr.frame_control))
(19) Event uninit_use_in_call:	Using uninitialized value "hdr".
Field "hdr.addr3" is uninitialized when calling "memcpy".
	memcpy(skb_push(skb, sizeof(hdr)), &hdr, sizeof(hdr));
else
	memcpy(skb_push(skb, sizeof(hdr) - 6), &hdr, sizeof(hdr) - 6);

Signed-off-by: Deren Wu <deren.wu at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
index fd60123fb284..c8d0c84e688b 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
@@ -930,7 +930,7 @@ int mt76_connac2_reverse_frag0_hdr_trans(struct ieee80211_vif *vif,
 		ether_addr_copy(hdr.addr4, eth_hdr->h_source);
 		break;
 	default:
-		break;
+		return -EINVAL;
 	}
 
 	skb_pull(skb, hdr_offset + sizeof(struct ethhdr) - 2);
-- 
2.18.0



From Mason.Zhang at mediatek.com  Wed Dec  7 01:24:19 2022
From: Mason.Zhang at mediatek.com (=?utf-8?B?TWFzb24gWmhhbmcgKOeroOi+iSk=?=)
Date: Wed, 7 Dec 2022 09:24:19 +0000
Subject: [PATCH v2 1/1] scsi: ufs: core: fix device management cmd timeout
 flow
In-Reply-To: <20221205195050.GA15334@asutoshd-linux1.qualcomm.com>
References: <20221205014202.2672-1-mason.zhang@mediatek.com>
	 <20221205195050.GA15334@asutoshd-linux1.qualcomm.com>
Message-ID: <5be85d35baab205d236652b4edae6cacf658a669.camel@mediatek.com>

On Mon, 2022-12-05 at 11:50 -0800, Asutosh Das wrote:
> On Mon, Dec 05 2022 at 17:53 -0800, Mason Zhang wrote:
> > From: Mason Zhang <Mason.Zhang at mediatek.com>
> > 
> > In ufs error handler flow, host will send device management cmd(NOP
> > OUT)
> > to device for recovery link. If cmd response timeout, and clear
> > doorbell
> > fail, ufshcd_wait_for_dev_cmd will do nothing and return,
> > hba->dev_cmd.complete struct not set to null.
> > 
> > In this time, if cmd has been responsed by device, then it will
> > call complete() in __ufshcd_transfer_req_compl, because of complete
> > struct is alloced in stack, then the KE will occur.
> > 
> 
> What is KE?
> 
> > Fix the following crash:
> >  ipanic_die+0x24/0x38 [mrdump]
> >  die+0x344/0x748
> >  arm64_notify_die+0x44/0x104
> >  do_debug_exception+0x104/0x1e0
> >  el1_dbg+0x38/0x54
> >  el1_sync_handler+0x40/0x88
> >  el1_sync+0x8c/0x140
> >  queued_spin_lock_slowpath+0x2e4/0x3c0
> >  __ufshcd_transfer_req_compl+0x3b0/0x1164
> >  ufshcd_trc_handler+0x15c/0x308
> >  ufshcd_host_reset_and_restore+0x54/0x260
> >  ufshcd_reset_and_restore+0x28c/0x57c
> >  ufshcd_err_handler+0xeb8/0x1b6c
> >  process_one_work+0x288/0x964
> >  worker_thread+0x4bc/0xc7c
> >  kthread+0x15c/0x264
> >  ret_from_fork+0x10/0x30
> > 
> > Signed-off-by: Mason Zhang <Mason.Zhang at mediatek.com>
> > ---
> > drivers/ufs/core/ufshcd.c | 46 ++++++++++++++++++----------------
> > -----
> > 1 file changed, 21 insertions(+), 25 deletions(-)
> > 
> > diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> > index b1f59a5fe632..2b4934a562a6 100644
> > --- a/drivers/ufs/core/ufshcd.c
> > +++ b/drivers/ufs/core/ufshcd.c
> > @@ -2979,35 +2979,31 @@ static int ufshcd_wait_for_dev_cmd(struct
> > ufs_hba *hba,
> > 		err = -ETIMEDOUT;
> > 		dev_dbg(hba->dev, "%s: dev_cmd request timedout, tag
> > %d\n",
> > 			__func__, lrbp->task_tag);
> > -		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0)
> > {
> > +		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0)
> > 			/* successfully cleared the command, retry if
> > needed */
> > 			err = -EAGAIN;
> > +		/*
> > +		 * Since clearing the command succeeded we also need to
> > +		 * clear the task tag bit from the outstanding_reqs
> > +		 * variable.
> > +		 */
> 
> Does this comment still hold true? Perhaps this needs to be updated?
> Also, perhaps you missed Bart's comments in v1.
> Also, please can you add a section for changes from v1 -> v2?
> 
> -asd
> 
> > +		spin_lock_irqsave(&hba->outstanding_lock, flags);
> > +		pending = test_bit(lrbp->task_tag,
> > +				   &hba->outstanding_reqs);
> > +		if (pending) {
> > +			hba->dev_cmd.complete = NULL;
> > +			__clear_bit(lrbp->task_tag,
> > +				    &hba->outstanding_reqs);
> > +		}
> > +		spin_unlock_irqrestore(&hba->outstanding_lock, flags);
> > +
> > +		if (!pending) {
> > 			/*
> > -			 * Since clearing the command succeeded we also
> > need to
> > -			 * clear the task tag bit from the
> > outstanding_reqs
> > -			 * variable.
> > +			 * The completion handler ran while we tried to
> > +			 * clear the command.
> > 			 */
> > -			spin_lock_irqsave(&hba->outstanding_lock,
> > flags);
> > -			pending = test_bit(lrbp->task_tag,
> > -					   &hba->outstanding_reqs);
> > -			if (pending) {
> > -				hba->dev_cmd.complete = NULL;
> > -				__clear_bit(lrbp->task_tag,
> > -					    &hba->outstanding_reqs);
> > -			}
> > -			spin_unlock_irqrestore(&hba->outstanding_lock,
> > flags);
> > -
> > -			if (!pending) {
> > -				/*
> > -				 * The completion handler ran while we
> > tried to
> > -				 * clear the command.
> > -				 */
> > -				time_left = 1;
> > -				goto retry;
> > -			}
> > -		} else {
> > -			dev_err(hba->dev, "%s: failed to clear tag
> > %d\n",
> > -				__func__, lrbp->task_tag);
> > +			time_left = 1;
> > +			goto retry;
> > 		}
> > 	}
> > 
> > -- 
> > 2.18.0
> > 
Dear Asutosh and Bart:
	
	Thanks for yours comments~

	I think if clear db fail and then clear outstanding_reqs is not
a problem, because it means cmd is send to device but device not
responed, so host should do device reset and clear all outstanding_reqs
or return error and retry, it also will clear this outstanding_reqs.
	And because of we have do test_bit outstanding_reqs first in
spin_lock, so it also will not have race condition between cmd complete
flow.

	And about KE, KE means 'kernel exception', because of complete
stuct has been released in stack. 
	And I wil remove this comment in patchv3.

	Thank you again~

Thanks
Mason


From moudy.ho at mediatek.com  Wed Dec  7 00:44:10 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 16:44:10 +0800
Subject: [PATCH v2 10/12] media: platform: mtk-mdp3: add 8195 platform configuration
In-Reply-To: <20221207084412.14075-1-moudy.ho@mediatek.com>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
Message-ID: <20221207084412.14075-11-moudy.ho@mediatek.com>

Add MT8195 basic configuration in header file "mdp3-plat-mt8195.h"
and corresponding driver data.

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
---
 .../mediatek/mdp3/mt8195/mdp3-plat-mt8195.h   | 652 ++++++++++++++++++
 .../platform/mediatek/mdp3/mtk-img-ipi.h      |   1 +
 .../platform/mediatek/mdp3/mtk-mdp3-comp.c    |  36 +
 .../platform/mediatek/mdp3/mtk-mdp3-core.c    |  19 +
 .../platform/mediatek/mdp3/mtk-mdp3-core.h    |   6 +
 5 files changed, 714 insertions(+)
 create mode 100644 drivers/media/platform/mediatek/mdp3/mt8195/mdp3-plat-mt8195.h

diff --git a/drivers/media/platform/mediatek/mdp3/mt8195/mdp3-plat-mt8195.h b/drivers/media/platform/mediatek/mdp3/mt8195/mdp3-plat-mt8195.h
new file mode 100644
index 000000000000..d90a67e1af8b
--- /dev/null
+++ b/drivers/media/platform/mediatek/mdp3/mt8195/mdp3-plat-mt8195.h
@@ -0,0 +1,652 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Ping-Hsun Wu <ping-hsun.wu at mediatek.com>
+ */
+
+#ifndef __MDP3_PLAT_MT8195_H__
+#define __MDP3_PLAT_MT8195_H__
+
+static const struct mdp_platform_config mt8195_plat_cfg = {
+	.rdma_support_10bit             = true,
+	.rdma_rsz1_sram_sharing         = false,
+	.rdma_upsample_repeat_only      = false,
+	.rdma_esl_setting		= true,
+	.rdma_event_num			= 4,
+	.rsz_disable_dcm_small_sample   = false,
+	.rsz_etc_control		= true,
+	.wrot_filter_constraint		= false,
+	.wrot_event_num			= 4,
+	.tdshp_hist_num			= 17,
+	.tdshp_constrain		= true,
+	.tdshp_contour			= true,
+};
+
+static const struct of_device_id mt8195_mdp_probe_infra[MDP_INFRA_MAX] = {
+	[MDP_INFRA_MMSYS] = { .compatible = "mediatek,mt8195-vppsys0" },
+	[MDP_INFRA_MMSYS2] = { .compatible = "mediatek,mt8195-vppsys1" },
+	[MDP_INFRA_MUTEX] = { .compatible = "mediatek,mt8195-vpp-mutex" },
+	[MDP_INFRA_MUTEX2] = { .compatible = "mediatek,mt8195-vpp-mutex" },
+	[MDP_INFRA_SCP] = { .compatible = "mediatek,mt8195-scp" }
+};
+
+static const struct mdp_pipe_info mt8195_pipe_info[] = {
+	[MDP_PIPE_RDMA0] = {MDP_PIPE_RDMA0, 0, 2},
+	[MDP_PIPE_WPEI] = {MDP_PIPE_WPEI, 0, 0},
+	[MDP_PIPE_WPEI2] = {MDP_PIPE_WPEI2, 0, 1},
+	[MDP_PIPE_RDMA1] = {MDP_PIPE_RDMA1, 1, 1},
+	[MDP_PIPE_RDMA2] = {MDP_PIPE_RDMA2, 1, 2},
+	[MDP_PIPE_RDMA3] = {MDP_PIPE_RDMA3, 1, 3},
+	[MDP_PIPE_SPLIT] = {MDP_PIPE_SPLIT, 1, 2},
+	[MDP_PIPE_SPLIT2] = {MDP_PIPE_SPLIT2, 1, 3},
+	[MDP_PIPE_VPP1_SOUT] = {MDP_PIPE_VPP1_SOUT, 0, 3},
+	[MDP_PIPE_VPP0_SOUT] = {MDP_PIPE_VPP0_SOUT, 1, 4},
+};
+
+static const u32 mt8195_mutex_idx[MDP_MAX_COMP_COUNT] = {
+	[MDP_COMP_RDMA0] = MUTEX_MOD_IDX_MDP_RDMA0,
+	[MDP_COMP_RDMA1] = MUTEX_MOD_IDX_MDP_RDMA1,
+	[MDP_COMP_RDMA2] = MUTEX_MOD_IDX_MDP_RDMA2,
+	[MDP_COMP_RDMA3] = MUTEX_MOD_IDX_MDP_RDMA3,
+	[MDP_COMP_STITCH] = MUTEX_MOD_IDX_MDP_STITCH0,
+	[MDP_COMP_FG0] = MUTEX_MOD_IDX_MDP_FG0,
+	[MDP_COMP_FG1] = MUTEX_MOD_IDX_MDP_FG1,
+	[MDP_COMP_FG2] = MUTEX_MOD_IDX_MDP_FG2,
+	[MDP_COMP_FG3] = MUTEX_MOD_IDX_MDP_FG3,
+	[MDP_COMP_HDR0] = MUTEX_MOD_IDX_MDP_HDR0,
+	[MDP_COMP_HDR1] = MUTEX_MOD_IDX_MDP_HDR1,
+	[MDP_COMP_HDR2] = MUTEX_MOD_IDX_MDP_HDR2,
+	[MDP_COMP_HDR3] = MUTEX_MOD_IDX_MDP_HDR3,
+	[MDP_COMP_AAL0] = MUTEX_MOD_IDX_MDP_AAL0,
+	[MDP_COMP_AAL1] = MUTEX_MOD_IDX_MDP_AAL1,
+	[MDP_COMP_AAL2] = MUTEX_MOD_IDX_MDP_AAL2,
+	[MDP_COMP_AAL3] = MUTEX_MOD_IDX_MDP_AAL3,
+	[MDP_COMP_RSZ0] = MUTEX_MOD_IDX_MDP_RSZ0,
+	[MDP_COMP_RSZ1] = MUTEX_MOD_IDX_MDP_RSZ1,
+	[MDP_COMP_RSZ2] = MUTEX_MOD_IDX_MDP_RSZ2,
+	[MDP_COMP_RSZ3] = MUTEX_MOD_IDX_MDP_RSZ3,
+	[MDP_COMP_MERGE2] = MUTEX_MOD_IDX_MDP_MERGE2,
+	[MDP_COMP_MERGE3] = MUTEX_MOD_IDX_MDP_MERGE3,
+	[MDP_COMP_TDSHP0] = MUTEX_MOD_IDX_MDP_TDSHP0,
+	[MDP_COMP_TDSHP1] = MUTEX_MOD_IDX_MDP_TDSHP1,
+	[MDP_COMP_TDSHP2] = MUTEX_MOD_IDX_MDP_TDSHP2,
+	[MDP_COMP_TDSHP3] = MUTEX_MOD_IDX_MDP_TDSHP3,
+	[MDP_COMP_COLOR0] = MUTEX_MOD_IDX_MDP_COLOR0,
+	[MDP_COMP_COLOR1] = MUTEX_MOD_IDX_MDP_COLOR1,
+	[MDP_COMP_COLOR2] = MUTEX_MOD_IDX_MDP_COLOR2,
+	[MDP_COMP_COLOR3] = MUTEX_MOD_IDX_MDP_COLOR3,
+	[MDP_COMP_OVL0] = MUTEX_MOD_IDX_MDP_OVL0,
+	[MDP_COMP_OVL1] = MUTEX_MOD_IDX_MDP_OVL1,
+	[MDP_COMP_PAD0] = MUTEX_MOD_IDX_MDP_PAD0,
+	[MDP_COMP_PAD1] = MUTEX_MOD_IDX_MDP_PAD1,
+	[MDP_COMP_PAD2] = MUTEX_MOD_IDX_MDP_PAD2,
+	[MDP_COMP_PAD3] = MUTEX_MOD_IDX_MDP_PAD3,
+	[MDP_COMP_TCC0] = MUTEX_MOD_IDX_MDP_TCC0,
+	[MDP_COMP_TCC1] = MUTEX_MOD_IDX_MDP_TCC1,
+	[MDP_COMP_WROT0] = MUTEX_MOD_IDX_MDP_WROT0,
+	[MDP_COMP_WROT1] = MUTEX_MOD_IDX_MDP_WROT1,
+	[MDP_COMP_WROT2] = MUTEX_MOD_IDX_MDP_WROT2,
+	[MDP_COMP_WROT3] = MUTEX_MOD_IDX_MDP_WROT3,
+};
+
+static const struct of_device_id mt8195_sub_comp_dt_ids[] = {
+	{}
+};
+
+enum mt8195_mdp_comp_id {
+	/* MT8195 Comp id */
+	/* ISP */
+	MT8195_MDP_COMP_WPEI = 0,
+	MT8195_MDP_COMP_WPEO,           /* 1 */
+	MT8195_MDP_COMP_WPEI2,          /* 2 */
+	MT8195_MDP_COMP_WPEO2,          /* 3 */
+
+	/* MDP */
+	MT8195_MDP_COMP_CAMIN,          /* 4 */
+	MT8195_MDP_COMP_CAMIN2,         /* 5 */
+	MT8195_MDP_COMP_SPLIT,          /* 6 */
+	MT8195_MDP_COMP_SPLIT2,         /* 7 */
+	MT8195_MDP_COMP_RDMA0,          /* 8 */
+	MT8195_MDP_COMP_RDMA1,          /* 9 */
+	MT8195_MDP_COMP_RDMA2,          /* 10 */
+	MT8195_MDP_COMP_RDMA3,          /* 11 */
+	MT8195_MDP_COMP_STITCH,         /* 12 */
+	MT8195_MDP_COMP_FG0,            /* 13 */
+	MT8195_MDP_COMP_FG1,            /* 14 */
+	MT8195_MDP_COMP_FG2,            /* 15 */
+	MT8195_MDP_COMP_FG3,            /* 16 */
+	MT8195_MDP_COMP_TO_SVPP2MOUT,   /* 17 */
+	MT8195_MDP_COMP_TO_SVPP3MOUT,   /* 18 */
+	MT8195_MDP_COMP_TO_WARP0MOUT,   /* 19 */
+	MT8195_MDP_COMP_TO_WARP1MOUT,   /* 20 */
+	MT8195_MDP_COMP_VPP0_SOUT,      /* 21 */
+	MT8195_MDP_COMP_VPP1_SOUT,      /* 22 */
+	MT8195_MDP_COMP_PQ0_SOUT,       /* 23 */
+	MT8195_MDP_COMP_PQ1_SOUT,       /* 24 */
+	MT8195_MDP_COMP_HDR0,           /* 25 */
+	MT8195_MDP_COMP_HDR1,           /* 26 */
+	MT8195_MDP_COMP_HDR2,           /* 27 */
+	MT8195_MDP_COMP_HDR3,           /* 28 */
+	MT8195_MDP_COMP_AAL0,           /* 29 */
+	MT8195_MDP_COMP_AAL1,           /* 30 */
+	MT8195_MDP_COMP_AAL2,           /* 31 */
+	MT8195_MDP_COMP_AAL3,           /* 32 */
+	MT8195_MDP_COMP_RSZ0,           /* 33 */
+	MT8195_MDP_COMP_RSZ1,           /* 34 */
+	MT8195_MDP_COMP_RSZ2,           /* 35 */
+	MT8195_MDP_COMP_RSZ3,           /* 36 */
+	MT8195_MDP_COMP_TDSHP0,         /* 37 */
+	MT8195_MDP_COMP_TDSHP1,         /* 38 */
+	MT8195_MDP_COMP_TDSHP2,         /* 39 */
+	MT8195_MDP_COMP_TDSHP3,         /* 40 */
+	MT8195_MDP_COMP_COLOR0,         /* 41 */
+	MT8195_MDP_COMP_COLOR1,         /* 42 */
+	MT8195_MDP_COMP_COLOR2,         /* 43 */
+	MT8195_MDP_COMP_COLOR3,         /* 44 */
+	MT8195_MDP_COMP_OVL0,           /* 45 */
+	MT8195_MDP_COMP_OVL1,           /* 46 */
+	MT8195_MDP_COMP_PAD0,           /* 47 */
+	MT8195_MDP_COMP_PAD1,           /* 48 */
+	MT8195_MDP_COMP_PAD2,           /* 49 */
+	MT8195_MDP_COMP_PAD3,           /* 50 */
+	MT8195_MDP_COMP_TCC0,           /* 51 */
+	MT8195_MDP_COMP_TCC1,           /* 52 */
+	MT8195_MDP_COMP_WROT0,          /* 53 */
+	MT8195_MDP_COMP_WROT1,          /* 54 */
+	MT8195_MDP_COMP_WROT2,          /* 55 */
+	MT8195_MDP_COMP_WROT3,          /* 56 */
+	MT8195_MDP_COMP_MERGE2,         /* 57 */
+	MT8195_MDP_COMP_MERGE3,         /* 58 */
+
+	MT8195_MDP_COMP_VDO0DL0,        /* 59 */
+	MT8195_MDP_COMP_VDO1DL0,        /* 60 */
+	MT8195_MDP_COMP_VDO0DL1,        /* 61 */
+	MT8195_MDP_COMP_VDO1DL1,        /* 62 */
+};
+
+static const struct mdp_comp_data mt8195_mdp_comp_data[MDP_MAX_COMP_COUNT] = {
+	[MDP_COMP_WPEI] = {
+		{MDP_COMP_TYPE_WPEI, 0, MT8195_MDP_COMP_WPEI, 0},
+		{0, 0, 0}
+	},
+	[MDP_COMP_WPEO] = {
+		{MDP_COMP_TYPE_EXTO, 2, MT8195_MDP_COMP_WPEO, 0},
+		{0, 0, 0}
+	},
+	[MDP_COMP_WPEI2] = {
+		{MDP_COMP_TYPE_WPEI, 1, MT8195_MDP_COMP_WPEI2, 0},
+		{0, 0, 0}
+	},
+	[MDP_COMP_WPEO2] = {
+		{MDP_COMP_TYPE_EXTO, 3, MT8195_MDP_COMP_WPEO2, 0},
+		{0, 0, 0}
+	},
+	[MDP_COMP_CAMIN] = {
+		{MDP_COMP_TYPE_DL_PATH, 0, MT8195_MDP_COMP_CAMIN, 0},
+		{3, 3, 0}
+	},
+	[MDP_COMP_CAMIN2] = {
+		{MDP_COMP_TYPE_DL_PATH, 1, MT8195_MDP_COMP_CAMIN2, 0},
+		{3, 6, 0}
+	},
+	[MDP_COMP_SPLIT] = {
+		{MDP_COMP_TYPE_SPLIT, 0, MT8195_MDP_COMP_SPLIT, 1},
+		{7, 0, 0}
+	},
+	[MDP_COMP_SPLIT2] = {
+		{MDP_COMP_TYPE_SPLIT, 1, MT8195_MDP_COMP_SPLIT2, 1},
+		{7, 0, 0}
+	},
+	[MDP_COMP_RDMA0] = {
+		{MDP_COMP_TYPE_RDMA, 0, MT8195_MDP_COMP_RDMA0, 0},
+		{3, 0, 0}
+	},
+	[MDP_COMP_RDMA1] = {
+		{MDP_COMP_TYPE_RDMA, 1, MT8195_MDP_COMP_RDMA1, 1},
+		{3, 0, 0}
+	},
+	[MDP_COMP_RDMA2] = {
+		{MDP_COMP_TYPE_RDMA, 2, MT8195_MDP_COMP_RDMA2, 1},
+		{3, 0, 0}
+	},
+	[MDP_COMP_RDMA3] = {
+		{MDP_COMP_TYPE_RDMA, 3, MT8195_MDP_COMP_RDMA3, 1},
+		{3, 0, 0}
+	},
+	[MDP_COMP_STITCH] = {
+		{MDP_COMP_TYPE_STITCH, 0, MT8195_MDP_COMP_STITCH, 0},
+		{1, 0, 0}
+	},
+	[MDP_COMP_FG0] = {
+		{MDP_COMP_TYPE_FG, 0, MT8195_MDP_COMP_FG0, 0},
+		{1, 0, 0}
+	},
+	[MDP_COMP_FG1] = {
+		{MDP_COMP_TYPE_FG, 1, MT8195_MDP_COMP_FG1, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_FG2] = {
+		{MDP_COMP_TYPE_FG, 2, MT8195_MDP_COMP_FG2, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_FG3] = {
+		{MDP_COMP_TYPE_FG, 3, MT8195_MDP_COMP_FG3, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_HDR0] = {
+		{MDP_COMP_TYPE_HDR, 0, MT8195_MDP_COMP_HDR0, 0},
+		{1, 0, 0}
+	},
+	[MDP_COMP_HDR1] = {
+		{MDP_COMP_TYPE_HDR, 1, MT8195_MDP_COMP_HDR1, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_HDR2] = {
+		{MDP_COMP_TYPE_HDR, 2, MT8195_MDP_COMP_HDR2, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_HDR3] = {
+		{MDP_COMP_TYPE_HDR, 3, MT8195_MDP_COMP_HDR3, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_AAL0] = {
+		{MDP_COMP_TYPE_AAL, 0, MT8195_MDP_COMP_AAL0, 0},
+		{1, 0, 0}
+	},
+	[MDP_COMP_AAL1] = {
+		{MDP_COMP_TYPE_AAL, 1, MT8195_MDP_COMP_AAL1, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_AAL2] = {
+		{MDP_COMP_TYPE_AAL, 2, MT8195_MDP_COMP_AAL2, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_AAL3] = {
+		{MDP_COMP_TYPE_AAL, 3, MT8195_MDP_COMP_AAL3, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_RSZ0] = {
+		{MDP_COMP_TYPE_RSZ, 0, MT8195_MDP_COMP_RSZ0, 0},
+		{1, 0, 0}
+	},
+	[MDP_COMP_RSZ1] = {
+		{MDP_COMP_TYPE_RSZ, 1, MT8195_MDP_COMP_RSZ1, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_RSZ2] = {
+		{MDP_COMP_TYPE_RSZ, 2, MT8195_MDP_COMP_RSZ2, 1},
+		{2, 0, 0}
+	},
+	[MDP_COMP_RSZ3] = {
+		{MDP_COMP_TYPE_RSZ, 3, MT8195_MDP_COMP_RSZ3, 1},
+		{2, 0, 0}
+	},
+	[MDP_COMP_TDSHP0] = {
+		{MDP_COMP_TYPE_TDSHP, 0, MT8195_MDP_COMP_TDSHP0, 0},
+		{1, 0, 0}
+	},
+	[MDP_COMP_TDSHP1] = {
+		{MDP_COMP_TYPE_TDSHP, 1, MT8195_MDP_COMP_TDSHP1, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_TDSHP2] = {
+		{MDP_COMP_TYPE_TDSHP, 2, MT8195_MDP_COMP_TDSHP2, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_TDSHP3] = {
+		{MDP_COMP_TYPE_TDSHP, 3, MT8195_MDP_COMP_TDSHP3, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_COLOR0] = {
+		{MDP_COMP_TYPE_COLOR, 0, MT8195_MDP_COMP_COLOR0, 0},
+		{1, 0, 0}
+	},
+	[MDP_COMP_COLOR1] = {
+		{MDP_COMP_TYPE_COLOR, 1, MT8195_MDP_COMP_COLOR1, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_COLOR2] = {
+		{MDP_COMP_TYPE_COLOR, 2, MT8195_MDP_COMP_COLOR2, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_COLOR3] = {
+		{MDP_COMP_TYPE_COLOR, 3, MT8195_MDP_COMP_COLOR3, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_OVL0] = {
+		{MDP_COMP_TYPE_OVL, 0, MT8195_MDP_COMP_OVL0, 0},
+		{1, 0, 0}
+	},
+	[MDP_COMP_OVL1] = {
+		{MDP_COMP_TYPE_OVL, 1, MT8195_MDP_COMP_OVL1, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_PAD0] = {
+		{MDP_COMP_TYPE_PAD, 0, MT8195_MDP_COMP_PAD0, 0},
+		{1, 0, 0}
+	},
+	[MDP_COMP_PAD1] = {
+		{MDP_COMP_TYPE_PAD, 1, MT8195_MDP_COMP_PAD1, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_PAD2] = {
+		{MDP_COMP_TYPE_PAD, 2, MT8195_MDP_COMP_PAD2, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_PAD3] = {
+		{MDP_COMP_TYPE_PAD, 3, MT8195_MDP_COMP_PAD3, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_TCC0] = {
+		{MDP_COMP_TYPE_TCC, 0, MT8195_MDP_COMP_TCC0, 0},
+		{1, 0, 0}
+	},
+	[MDP_COMP_TCC1] = {
+		{MDP_COMP_TYPE_TCC, 1, MT8195_MDP_COMP_TCC1, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_WROT0] = {
+		{MDP_COMP_TYPE_WROT, 0, MT8195_MDP_COMP_WROT0, 0},
+		{1, 0, 0}
+	},
+	[MDP_COMP_WROT1] = {
+		{MDP_COMP_TYPE_WROT, 1, MT8195_MDP_COMP_WROT1, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_WROT2] = {
+		{MDP_COMP_TYPE_WROT, 2, MT8195_MDP_COMP_WROT2, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_WROT3] = {
+		{MDP_COMP_TYPE_WROT, 3, MT8195_MDP_COMP_WROT3, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_MERGE2] = {
+		{MDP_COMP_TYPE_MERGE, 0, MT8195_MDP_COMP_MERGE2, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_MERGE3] = {
+		{MDP_COMP_TYPE_MERGE, 1, MT8195_MDP_COMP_MERGE3, 1},
+		{1, 0, 0}
+	},
+	[MDP_COMP_PQ0_SOUT] = {
+		{MDP_COMP_TYPE_DUMMY, 0, MT8195_MDP_COMP_PQ0_SOUT, 0},
+		{0, 0, 0}
+	},
+	[MDP_COMP_PQ1_SOUT] = {
+		{MDP_COMP_TYPE_DUMMY, 1, MT8195_MDP_COMP_PQ1_SOUT, 1},
+		{0, 0, 0}
+	},
+	[MDP_COMP_TO_WARP0MOUT] = {
+		{MDP_COMP_TYPE_DUMMY, 2, MT8195_MDP_COMP_TO_WARP0MOUT, 0},
+		{0, 0, 0}
+	},
+	[MDP_COMP_TO_WARP1MOUT] = {
+		{MDP_COMP_TYPE_DUMMY, 3, MT8195_MDP_COMP_TO_WARP1MOUT, 0},
+		{0, 0, 0}
+	},
+	[MDP_COMP_TO_SVPP2MOUT] = {
+		{MDP_COMP_TYPE_DUMMY, 4, MT8195_MDP_COMP_TO_SVPP2MOUT, 1},
+		{0, 0, 0}
+	},
+	[MDP_COMP_TO_SVPP3MOUT] = {
+		{MDP_COMP_TYPE_DUMMY, 5, MT8195_MDP_COMP_TO_SVPP3MOUT, 1},
+		{0, 0, 0}
+	},
+	[MDP_COMP_VPP0_SOUT] = {
+		{MDP_COMP_TYPE_PATH, 0, MT8195_MDP_COMP_VPP0_SOUT, 1},
+		{4, 9, 0}
+	},
+	[MDP_COMP_VPP1_SOUT] = {
+		{MDP_COMP_TYPE_PATH, 1, MT8195_MDP_COMP_VPP1_SOUT, 0},
+		{2, 13, 0}
+	},
+	[MDP_COMP_VDO0DL0] = {
+		{MDP_COMP_TYPE_DL_PATH, 0, MT8195_MDP_COMP_VDO0DL0, 1},
+		{1, 15, 0}
+	},
+	[MDP_COMP_VDO1DL0] = {
+		{MDP_COMP_TYPE_DL_PATH, 0, MT8195_MDP_COMP_VDO1DL0, 1},
+		{1, 17, 0}
+	},
+	[MDP_COMP_VDO0DL1] = {
+		{MDP_COMP_TYPE_DL_PATH, 0, MT8195_MDP_COMP_VDO0DL1, 1},
+		{1, 18, 0}
+	},
+	[MDP_COMP_VDO1DL1] = {
+		{MDP_COMP_TYPE_DL_PATH, 0, MT8195_MDP_COMP_VDO1DL1, 1},
+		{1, 16, 0}
+	},
+};
+
+/*
+ * All 10-bit related formats are not added in the basic format list,
+ * please add the corresponding format settings before use.
+ */
+static const struct mdp_format mt8195_formats[] = {
+	{
+		.pixelformat	= V4L2_PIX_FMT_GREY,
+		.mdp_color	= MDP_COLOR_GREY,
+		.depth		= { 8 },
+		.row_depth	= { 8 },
+		.num_planes	= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_RGB565X,
+		.mdp_color	= MDP_COLOR_BGR565,
+		.depth		= { 16 },
+		.row_depth	= { 16 },
+		.num_planes	= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_RGB565,
+		.mdp_color	= MDP_COLOR_RGB565,
+		.depth		= { 16 },
+		.row_depth	= { 16 },
+		.num_planes	= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_RGB24,
+		.mdp_color	= MDP_COLOR_RGB888,
+		.depth		= { 24 },
+		.row_depth	= { 24 },
+		.num_planes	= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_BGR24,
+		.mdp_color	= MDP_COLOR_BGR888,
+		.depth		= { 24 },
+		.row_depth	= { 24 },
+		.num_planes	= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_ABGR32,
+		.mdp_color	= MDP_COLOR_BGRA8888,
+		.depth		= { 32 },
+		.row_depth	= { 32 },
+		.num_planes	= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_ARGB32,
+		.mdp_color	= MDP_COLOR_ARGB8888,
+		.depth		= { 32 },
+		.row_depth	= { 32 },
+		.num_planes	= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_UYVY,
+		.mdp_color	= MDP_COLOR_UYVY,
+		.depth		= { 16 },
+		.row_depth	= { 16 },
+		.num_planes	= 1,
+		.walign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_VYUY,
+		.mdp_color	= MDP_COLOR_VYUY,
+		.depth		= { 16 },
+		.row_depth	= { 16 },
+		.num_planes	= 1,
+		.walign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_YUYV,
+		.mdp_color	= MDP_COLOR_YUYV,
+		.depth		= { 16 },
+		.row_depth	= { 16 },
+		.num_planes	= 1,
+		.walign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_YVYU,
+		.mdp_color	= MDP_COLOR_YVYU,
+		.depth		= { 16 },
+		.row_depth	= { 16 },
+		.num_planes	= 1,
+		.walign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_YUV420,
+		.mdp_color	= MDP_COLOR_I420,
+		.depth		= { 12 },
+		.row_depth	= { 8 },
+		.num_planes	= 1,
+		.walign		= 1,
+		.halign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_YVU420,
+		.mdp_color	= MDP_COLOR_YV12,
+		.depth		= { 12 },
+		.row_depth	= { 8 },
+		.num_planes	= 1,
+		.walign		= 1,
+		.halign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_NV12,
+		.mdp_color	= MDP_COLOR_NV12,
+		.depth		= { 12 },
+		.row_depth	= { 8 },
+		.num_planes	= 1,
+		.walign		= 1,
+		.halign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_NV21,
+		.mdp_color	= MDP_COLOR_NV21,
+		.depth		= { 12 },
+		.row_depth	= { 8 },
+		.num_planes	= 1,
+		.walign		= 1,
+		.halign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_NV16,
+		.mdp_color	= MDP_COLOR_NV16,
+		.depth		= { 16 },
+		.row_depth	= { 8 },
+		.num_planes	= 1,
+		.walign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_NV61,
+		.mdp_color	= MDP_COLOR_NV61,
+		.depth		= { 16 },
+		.row_depth	= { 8 },
+		.num_planes	= 1,
+		.walign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_NV12M,
+		.mdp_color	= MDP_COLOR_NV12,
+		.depth		= { 8, 4 },
+		.row_depth	= { 8, 8 },
+		.num_planes	= 2,
+		.walign		= 1,
+		.halign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_NV21M,
+		.mdp_color	= MDP_COLOR_NV21,
+		.depth		= { 8, 4 },
+		.row_depth	= { 8, 8 },
+		.num_planes	= 2,
+		.walign		= 1,
+		.halign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_NV16M,
+		.mdp_color	= MDP_COLOR_NV16,
+		.depth		= { 8, 8 },
+		.row_depth	= { 8, 8 },
+		.num_planes	= 2,
+		.walign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_NV61M,
+		.mdp_color	= MDP_COLOR_NV61,
+		.depth		= { 8, 8 },
+		.row_depth	= { 8, 8 },
+		.num_planes	= 2,
+		.walign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_YUV420M,
+		.mdp_color	= MDP_COLOR_I420,
+		.depth		= { 8, 2, 2 },
+		.row_depth	= { 8, 4, 4 },
+		.num_planes	= 3,
+		.walign		= 1,
+		.halign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_YVU420M,
+		.mdp_color	= MDP_COLOR_YV12,
+		.depth		= { 8, 2, 2 },
+		.row_depth	= { 8, 4, 4 },
+		.num_planes	= 3,
+		.walign		= 1,
+		.halign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_YUV422M,
+		.mdp_color	= MDP_COLOR_I422,
+		.depth		= { 8, 4, 4 },
+		.row_depth	= { 8, 4, 4 },
+		.num_planes	= 3,
+		.walign		= 1,
+		.halign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}, {
+		.pixelformat	= V4L2_PIX_FMT_YVU422M,
+		.mdp_color	= MDP_COLOR_YV16,
+		.depth		= { 8, 4, 4 },
+		.row_depth	= { 8, 4, 4 },
+		.num_planes	= 3,
+		.walign		= 1,
+		.halign		= 1,
+		.flags		= MDP_FMT_FLAG_OUTPUT | MDP_FMT_FLAG_CAPTURE,
+	}
+};
+
+static const struct mdp_limit mt8195_mdp_def_limit = {
+	.out_limit = {
+		.wmin	= 64,
+		.hmin	= 64,
+		.wmax	= 4096,
+		.hmax	= 4096,
+	},
+	.cap_limit = {
+		.wmin	= 64,
+		.hmin	= 64,
+		.wmax	= 4096,
+		.hmax	= 4096,
+	},
+	.h_scale_up_max = 64,
+	.v_scale_up_max = 64,
+	.h_scale_down_max = 128,
+	.v_scale_down_max = 128,
+};
+
+#endif  /* __MDP3_PLAT_MT8195_H__ */
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-img-ipi.h b/drivers/media/platform/mediatek/mdp3/mtk-img-ipi.h
index 3bd504d9af13..412b6ab06a82 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-img-ipi.h
+++ b/drivers/media/platform/mediatek/mdp3/mtk-img-ipi.h
@@ -116,6 +116,7 @@ struct img_frameparam {
 
 /* Platform config indicator */
 #define MT8183 8183
+#define MT8195 8195
 
 #define CFG_CHECK(plat, id) (plat == id)
 
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
index 265b712d762f..d54d7319af9a 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
@@ -796,6 +796,42 @@ static const struct of_device_id mdp_comp_dt_ids[] = {
 	}, {
 		.compatible = "mediatek,mt8183-mdp3-wdma",
 		.data = (void *)MDP_COMP_TYPE_WDMA,
+	}, {
+		.compatible = "mediatek,mt8195-mdp3-rdma",
+		.data = (void *)MDP_COMP_TYPE_RDMA,
+	}, {
+		.compatible = "mediatek,mt8195-mdp3-split",
+		.data = (void *)MDP_COMP_TYPE_SPLIT,
+	}, {
+		.compatible = "mediatek,mt8195-mdp3-stitch",
+		.data = (void *)MDP_COMP_TYPE_STITCH,
+	}, {
+		.compatible = "mediatek,mt8195-mdp3-fg",
+		.data = (void *)MDP_COMP_TYPE_FG,
+	}, {
+		.compatible = "mediatek,mt8195-mdp3-hdr",
+		.data = (void *)MDP_COMP_TYPE_HDR,
+	}, {
+		.compatible = "mediatek,mt8195-mdp3-aal",
+		.data = (void *)MDP_COMP_TYPE_AAL,
+	}, {
+		.compatible = "mediatek,mt8195-mdp3-merge",
+		.data = (void *)MDP_COMP_TYPE_MERGE,
+	}, {
+		.compatible = "mediatek,mt8195-mdp3-tdshp",
+		.data = (void *)MDP_COMP_TYPE_TDSHP,
+	}, {
+		.compatible = "mediatek,mt8195-mdp3-color",
+		.data = (void *)MDP_COMP_TYPE_COLOR,
+	}, {
+		.compatible = "mediatek,mt8195-mdp3-ovl",
+		.data = (void *)MDP_COMP_TYPE_OVL,
+	}, {
+		.compatible = "mediatek,mt8195-mdp3-pad",
+		.data = (void *)MDP_COMP_TYPE_PAD,
+	}, {
+		.compatible = "mediatek,mt8195-mdp3-tcc",
+		.data = (void *)MDP_COMP_TYPE_TCC,
 	},
 	{}
 };
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
index 6e3abadef6cd..1699da1c684b 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
@@ -16,6 +16,7 @@
 #include "mtk-mdp3-core.h"
 #include "mtk-mdp3-m2m.h"
 #include "mt8183/mdp3-plat-mt8183.h"
+#include "mt8195/mdp3-plat-mt8195.h"
 
 static const struct mtk_mdp_driver_data mt8183_mdp_driver_data = {
 	.mdp_plat_id = MT8183,
@@ -32,10 +33,28 @@ static const struct mtk_mdp_driver_data mt8183_mdp_driver_data = {
 	.def_limit = &mt8183_mdp_def_limit,
 };
 
+static const struct mtk_mdp_driver_data mt8195_mdp_driver_data = {
+	.mdp_plat_id = MT8195,
+	.mdp_probe_infra = mt8195_mdp_probe_infra,
+	.mdp_sub_comp_dt_ids = mt8195_sub_comp_dt_ids,
+	.mdp_cfg = &mt8195_plat_cfg,
+	.mdp_mutex_table_idx = mt8195_mutex_idx,
+	.comp_data = mt8195_mdp_comp_data,
+	.comp_data_len = ARRAY_SIZE(mt8195_mdp_comp_data),
+	.pipe_info = mt8195_pipe_info,
+	.pipe_info_len = ARRAY_SIZE(mt8195_pipe_info),
+	.format = mt8195_formats,
+	.format_len = ARRAY_SIZE(mt8195_formats),
+	.def_limit = &mt8195_mdp_def_limit,
+};
+
 static const struct of_device_id mdp_of_ids[] = {
 	{ .compatible = "mediatek,mt8183-mdp3-rdma",
 	  .data = &mt8183_mdp_driver_data,
 	},
+	{ .compatible = "mediatek,mt8195-mdp3-rdma",
+	  .data = &mt8195_mdp_driver_data,
+	},
 	{},
 };
 MODULE_DEVICE_TABLE(of, mdp_of_ids);
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
index d0a2ec11e67f..fe5bea7bbeaa 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
@@ -40,10 +40,16 @@ struct mdp_platform_config {
 	bool	rdma_support_10bit;
 	bool	rdma_rsz1_sram_sharing;
 	bool	rdma_upsample_repeat_only;
+	bool	rdma_esl_setting;
 	u32	rdma_event_num;
 	bool	rsz_disable_dcm_small_sample;
+	bool	rsz_etc_control;
 	bool	wrot_filter_constraint;
+	bool	wrot_support_10bit;
 	u32	wrot_event_num;
+	u32	tdshp_hist_num;
+	bool	tdshp_constrain;
+	bool	tdshp_contour;
 };
 
 /* indicate which mutex is used by each pipepline */
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 00:44:01 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 16:44:01 +0800
Subject: [PATCH v2 01/12] dt-binding: mediatek: add bindings for MediaTek 8195 MDP3 components
In-Reply-To: <20221207084412.14075-1-moudy.ho@mediatek.com>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
Message-ID: <20221207084412.14075-2-moudy.ho@mediatek.com>

This patch adds support for MT8195 MDP3 RDMA, and introduce more
MDP3 components present in MT8195.

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
---
 .../bindings/media/mediatek,mdp3-aal.yaml     | 64 ++++++++++++++++
 .../bindings/media/mediatek,mdp3-color.yaml   | 64 ++++++++++++++++
 .../bindings/media/mediatek,mdp3-fg.yaml      | 64 ++++++++++++++++
 .../bindings/media/mediatek,mdp3-hdr.yaml     | 63 +++++++++++++++
 .../bindings/media/mediatek,mdp3-merge.yaml   | 64 ++++++++++++++++
 .../bindings/media/mediatek,mdp3-ovl.yaml     | 64 ++++++++++++++++
 .../bindings/media/mediatek,mdp3-pad.yaml     | 64 ++++++++++++++++
 .../bindings/media/mediatek,mdp3-rdma.yaml    |  5 +-
 .../bindings/media/mediatek,mdp3-split.yaml   | 76 +++++++++++++++++++
 .../bindings/media/mediatek,mdp3-stitch.yaml  | 64 ++++++++++++++++
 .../bindings/media/mediatek,mdp3-tcc.yaml     | 63 +++++++++++++++
 .../bindings/media/mediatek,mdp3-tdshp.yaml   | 64 ++++++++++++++++
 12 files changed, 717 insertions(+), 2 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-aal.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-color.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-fg.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-hdr.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-merge.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-ovl.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-pad.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-split.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-stitch.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-tcc.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-tdshp.yaml

diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-aal.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-aal.yaml
new file mode 100644
index 000000000000..5b59e0802357
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-aal.yaml
@@ -0,0 +1,64 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/mediatek,mdp3-aal.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek Media Data Path 3 AAL Device Tree Bindings
+
+maintainers:
+  - Matthias Brugger <matthias.bgg at gmail.com>
+  - Moudy Ho <moudy.ho at mediatek.com>
+
+description: |
+  One of Media Data Path 3 (MDP3) components is responsible for backlight
+  power saving and sunlight visibility improving.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt8195-mdp3-aal
+
+  reg:
+    maxItems: 1
+
+  mediatek,gce-client-reg:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      items:
+        - description: phandle of GCE
+        - description: GCE subsys id
+        - description: register offset
+        - description: register size
+    description: The register of client driver can be configured by gce with
+      4 arguments defined in this property. Each GCE subsys id is mapping to
+      a client defined in the header include/dt-bindings/gce/<chip>-gce.h.
+
+  clocks:
+    minItems: 1
+
+  power-domains:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - mediatek,gce-client-reg
+  - clocks
+  - power-domains
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt8195-clk.h>
+    #include <dt-bindings/gce/mt8195-gce.h>
+    #include <dt-bindings/power/mt8195-power.h>
+
+    mdp3-aal0 at 14005000 {
+      compatible = "mediatek,mt8195-mdp3-aal";
+      reg = <0x14005000 0x1000>;
+      mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x5000 0x1000>;
+      clocks = <&vppsys0 CLK_VPP0_MDP_AAL>;
+      power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+    };
diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-color.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-color.yaml
new file mode 100644
index 000000000000..7a34d8af11a9
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-color.yaml
@@ -0,0 +1,64 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/mediatek,mdp3-color.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek Media Data Path 3 COLOR Device Tree Bindings
+
+maintainers:
+  - Matthias Brugger <matthias.bgg at gmail.com>
+  - Moudy Ho <moudy.ho at mediatek.com>
+
+description: |
+  One of Media Data Path 3 (MDP3) components used to adjust hue, luma and
+  saturation to get better picture quality.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt8195-mdp3-color
+
+  reg:
+    maxItems: 1
+
+  mediatek,gce-client-reg:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      items:
+        - description: phandle of GCE
+        - description: GCE subsys id
+        - description: register offset
+        - description: register size
+    description: The register of client driver can be configured by gce with
+      4 arguments defined in this property. Each GCE subsys id is mapping to
+      a client defined in the header include/dt-bindings/gce/<chip>-gce.h.
+
+  clocks:
+    minItems: 1
+
+  power-domains:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - mediatek,gce-client-reg
+  - clocks
+  - power-domains
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt8195-clk.h>
+    #include <dt-bindings/gce/mt8195-gce.h>
+    #include <dt-bindings/power/mt8195-power.h>
+
+    mdp3-color0 at 14008000 {
+      compatible = "mediatek,mt8195-mdp3-color";
+      reg = <0x14008000 0x1000>;
+      mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x8000 0x1000>;
+      clocks = <&vppsys0 CLK_VPP0_MDP_COLOR>;
+      power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+    };
diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-fg.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-fg.yaml
new file mode 100644
index 000000000000..1e17b3908d3d
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-fg.yaml
@@ -0,0 +1,64 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/mediatek,mdp3-fg.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek Media Data Path 3 FG Device Tree Bindings
+
+maintainers:
+  - Matthias Brugger <matthias.bgg at gmail.com>
+  - Moudy Ho <moudy.ho at mediatek.com>
+
+description: |
+  One of Media Data Path 3 (MDP3) components used to add film grain
+  according to AV1 spec.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt8195-mdp3-fg
+
+  reg:
+    maxItems: 1
+
+  mediatek,gce-client-reg:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      items:
+        - description: phandle of GCE
+        - description: GCE subsys id
+        - description: register offset
+        - description: register size
+    description: The register of client driver can be configured by gce with
+      4 arguments defined in this property. Each GCE subsys id is mapping to
+      a client defined in the header include/dt-bindings/gce/<chip>-gce.h.
+
+  clocks:
+    minItems: 1
+
+  power-domains:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - mediatek,gce-client-reg
+  - clocks
+  - power-domains
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt8195-clk.h>
+    #include <dt-bindings/gce/mt8195-gce.h>
+    #include <dt-bindings/power/mt8195-power.h>
+
+    mdp3-fg0 at 14002000 {
+      compatible = "mediatek,mt8195-mdp3-fg";
+      reg = <0x14002000 0x1000>;
+      mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x2000 0x1000>;
+      clocks = <&vppsys0 CLK_VPP0_MDP_FG>;
+      power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+    };
diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-hdr.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-hdr.yaml
new file mode 100644
index 000000000000..ad27f60e5825
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-hdr.yaml
@@ -0,0 +1,63 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/mediatek,mdp3-hdr.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek Media Data Path 3 HDR Device Tree Bindings
+
+maintainers:
+  - Matthias Brugger <matthias.bgg at gmail.com>
+  - Moudy Ho <moudy.ho at mediatek.com>
+
+description: |
+  One of Media Data Path 3 (MDP3) components used to perform HDR to SDR
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt8195-mdp3-hdr
+
+  reg:
+    maxItems: 1
+
+  mediatek,gce-client-reg:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      items:
+        - description: phandle of GCE
+        - description: GCE subsys id
+        - description: register offset
+        - description: register size
+    description: The register of client driver can be configured by gce with
+      4 arguments defined in this property. Each GCE subsys id is mapping to
+      a client defined in the header include/dt-bindings/gce/<chip>-gce.h.
+
+  clocks:
+    minItems: 1
+
+  power-domains:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - mediatek,gce-client-reg
+  - clocks
+  - power-domains
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt8195-clk.h>
+    #include <dt-bindings/gce/mt8195-gce.h>
+    #include <dt-bindings/power/mt8195-power.h>
+
+    mdp3-hdr0 at 14004000 {
+      compatible = "mediatek,mt8195-mdp3-hdr";
+      reg = <0x14004000 0x1000>;
+      mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x4000 0x1000>;
+      clocks = <&vppsys0 CLK_VPP0_MDP_HDR>;
+      power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+    };
diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-merge.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-merge.yaml
new file mode 100644
index 000000000000..4e0ef4a9f77d
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-merge.yaml
@@ -0,0 +1,64 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/mediatek,mdp3-merge.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek Media Data Path 3 MERGE Device Tree Bindings
+
+maintainers:
+  - Matthias Brugger <matthias.bgg at gmail.com>
+  - Moudy Ho <moudy.ho at mediatek.com>
+
+description: |
+  One of Media Data Path 3 (MDP3) components used to merge
+  two slice-per-line inputs into one side-by-side output.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt8195-mdp3-merge
+
+  reg:
+    maxItems: 1
+
+  mediatek,gce-client-reg:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      items:
+        - description: phandle of GCE
+        - description: GCE subsys id
+        - description: register offset
+        - description: register size
+    description: The register of client driver can be configured by gce with
+      4 arguments defined in this property. Each GCE subsys id is mapping to
+      a client defined in the header include/dt-bindings/gce/<chip>-gce.h.
+
+  clocks:
+    minItems: 1
+
+  power-domains:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - mediatek,gce-client-reg
+  - clocks
+  - power-domains
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt8195-clk.h>
+    #include <dt-bindings/gce/mt8195-gce.h>
+    #include <dt-bindings/power/mt8195-power.h>
+
+    mdp3-merge0 at 14f1a000 {
+      compatible = "mediatek,mt8195-mdp3-merge";
+      reg = <0x14f1a000 0x1000>;
+      mediatek,gce-client-reg = <&gce1 SUBSYS_14f1XXXX 0xa000 0x1000>;
+      clocks = <&vppsys1 CLK_VPP1_SVPP2_VPP_MERGE>;
+      power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+    };
diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-ovl.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-ovl.yaml
new file mode 100644
index 000000000000..388e6dbab1e4
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-ovl.yaml
@@ -0,0 +1,64 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/mediatek,mdp3-ovl.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek Media Data Path 3 OVL Device Tree Bindings
+
+maintainers:
+  - Matthias Brugger <matthias.bgg at gmail.com>
+  - Moudy Ho <moudy.ho at mediatek.com>
+
+description: |
+  One of Media Data Path 3 (MDP3) components used to perform
+  alpha blending from the memory.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt8195-mdp3-ovl
+
+  reg:
+    maxItems: 1
+
+  mediatek,gce-client-reg:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      items:
+        - description: phandle of GCE
+        - description: GCE subsys id
+        - description: register offset
+        - description: register size
+    description: The register of client driver can be configured by gce with
+      4 arguments defined in this property. Each GCE subsys id is mapping to
+      a client defined in the header include/dt-bindings/gce/<chip>-gce.h.
+
+  clocks:
+    minItems: 1
+
+  power-domains:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - mediatek,gce-client-reg
+  - clocks
+  - power-domains
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt8195-clk.h>
+    #include <dt-bindings/gce/mt8195-gce.h>
+    #include <dt-bindings/power/mt8195-power.h>
+
+    mdp3-ovl0 at 14009000 {
+      compatible = "mediatek,mt8195-mdp3-ovl";
+      reg = <0x14009000 0x1000>;
+      mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x9000 0x1000>;
+      clocks = <&vppsys0 CLK_VPP0_MDP_OVL>;
+      power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+    };
diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-pad.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-pad.yaml
new file mode 100644
index 000000000000..a66b1dcb7d43
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-pad.yaml
@@ -0,0 +1,64 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/mediatek,mdp3-pad.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek Media Data Path 3 PADDING Device Tree Bindings
+
+maintainers:
+  - Matthias Brugger <matthias.bgg at gmail.com>
+  - Moudy Ho <moudy.ho at mediatek.com>
+
+description: |
+  One of Media Data Path 3 (MDP3) components used to insert
+  pre-defined color or alpha value to arbitrary side of image.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt8195-mdp3-pad
+
+  reg:
+    maxItems: 1
+
+  mediatek,gce-client-reg:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      items:
+        - description: phandle of GCE
+        - description: GCE subsys id
+        - description: register offset
+        - description: register size
+    description: The register of client driver can be configured by gce with
+      4 arguments defined in this property. Each GCE subsys id is mapping to
+      a client defined in the header include/dt-bindings/gce/<chip>-gce.h.
+
+  clocks:
+    minItems: 1
+
+  power-domains:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - mediatek,gce-client-reg
+  - clocks
+  - power-domains
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt8195-clk.h>
+    #include <dt-bindings/gce/mt8195-gce.h>
+    #include <dt-bindings/power/mt8195-power.h>
+
+    mdp3-pad0 at 1400a000 {
+      compatible = "mediatek,mt8195-mdp3-pad";
+      reg = <0x1400a000 0x1000>;
+      mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0xa000 0x1000>;
+      clocks = <&vppsys0 CLK_VPP0_PADDING>;
+      power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+    };
diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-rdma.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-rdma.yaml
index 9cfc0c7d23e0..7fe9ed62aadf 100644
--- a/Documentation/devicetree/bindings/media/mediatek,mdp3-rdma.yaml
+++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-rdma.yaml
@@ -20,8 +20,9 @@ description: |
 
 properties:
   compatible:
-    items:
-      - const: mediatek,mt8183-mdp3-rdma
+    enum:
+      - mediatek,mt8183-mdp3-rdma
+      - mediatek,mt8195-mdp3-rdma
 
   reg:
     maxItems: 1
diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-split.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-split.yaml
new file mode 100644
index 000000000000..25824a0ace75
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-split.yaml
@@ -0,0 +1,76 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/mediatek,mdp3-split.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek Media Data Path 3 SPLIT Device Tree Bindings
+
+maintainers:
+  - Matthias Brugger <matthias.bgg at gmail.com>
+  - Moudy Ho <moudy.ho at mediatek.com>
+
+description: |
+  One of Media Data Path 3 (MDP3) components used to split hdmi rx into two stream
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt8195-mdp3-split
+
+  reg:
+    maxItems: 1
+
+  mediatek,gce-client-reg:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      items:
+        - description: phandle of GCE
+        - description: GCE subsys id
+        - description: register offset
+        - description: register size
+    description: The register of client driver can be configured by gce with
+      4 arguments defined in this property. Each GCE subsys id is mapping to
+      a client defined in the header include/dt-bindings/gce/<chip>-gce.h.
+
+  clocks:
+    items:
+      - description: Engine Clock
+      - description: HDMI Clock
+      - description: MDHI Clock
+      - description: Digital Clock
+      - description: Digital Clock
+      - description: Digital Clock
+      - description: HS Clock
+
+  power-domains:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - mediatek,gce-client-reg
+  - clocks
+  - power-domains
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt8195-clk.h>
+    #include <dt-bindings/gce/mt8195-gce.h>
+    #include <dt-bindings/power/mt8195-power.h>
+
+    mdp3-split0 at 14f06000 {
+      compatible = "mediatek,mt8195-mdp3-split";
+      reg = <0x14f06000 0x1000>;
+      mediatek,gce-client-reg = <&gce1 SUBSYS_14f0XXXX 0x6000 0x1000>;
+      clocks = <&vppsys1 CLK_VPP1_VPP_SPLIT>,
+               <&vppsys1 CLK_VPP1_HDMI_META>,
+               <&vppsys1 CLK_VPP1_VPP_SPLIT_HDMI>,
+               <&vppsys1 CLK_VPP1_DGI_IN>,
+               <&vppsys1 CLK_VPP1_DGI_OUT>,
+               <&vppsys1 CLK_VPP1_VPP_SPLIT_DGI>,
+               <&vppsys1 CLK_VPP1_VPP_SPLIT_26M>;
+      power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+    };
diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-stitch.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-stitch.yaml
new file mode 100644
index 000000000000..6bf15a65047e
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-stitch.yaml
@@ -0,0 +1,64 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/mediatek,mdp3-stitch.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek Media Data Path 3 STITCH Device Tree Bindings
+
+maintainers:
+  - Matthias Brugger <matthias.bgg at gmail.com>
+  - Moudy Ho <moudy.ho at mediatek.com>
+
+description: |
+  One of Media Data Path 3 (MDP3) components used to combine multiple video frame
+  with overlapping fields of view to produce a segmented panorame.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt8195-mdp3-stitch
+
+  reg:
+    maxItems: 1
+
+  mediatek,gce-client-reg:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      items:
+        - description: phandle of GCE
+        - description: GCE subsys id
+        - description: register offset
+        - description: register size
+    description: The register of client driver can be configured by gce with
+      4 arguments defined in this property. Each GCE subsys id is mapping to
+      a client defined in the header include/dt-bindings/gce/<chip>-gce.h.
+
+  clocks:
+    minItems: 1
+
+  power-domains:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - mediatek,gce-client-reg
+  - clocks
+  - power-domains
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt8195-clk.h>
+    #include <dt-bindings/gce/mt8195-gce.h>
+    #include <dt-bindings/power/mt8195-power.h>
+
+    mdp3-stich0 at 14003000 {
+      compatible = "mediatek,mt8195-mdp3-stitch";
+      reg = <0x14003000 0x1000>;
+      mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x3000 0x1000>;
+      clocks = <&vppsys0 CLK_VPP0_STITCH>;
+      power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+    };
diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-tcc.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-tcc.yaml
new file mode 100644
index 000000000000..396cdf1e94e1
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-tcc.yaml
@@ -0,0 +1,63 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/mediatek,mdp3-tcc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek Media Data Path 3 TCC Device Tree Bindings
+
+maintainers:
+  - Matthias Brugger <matthias.bgg at gmail.com>
+
+description: |
+  One of Media Data Path 3 (MDP3) components used to support
+  HDR gamma curve conversion HDR displays.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt8195-mdp3-tcc
+
+  reg:
+    maxItems: 1
+
+  mediatek,gce-client-reg:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      items:
+        - description: phandle of GCE
+        - description: GCE subsys id
+        - description: register offset
+        - description: register size
+    description: The register of client driver can be configured by gce with
+      4 arguments defined in this property. Each GCE subsys id is mapping to
+      a client defined in the header include/dt-bindings/gce/<chip>-gce.h.
+
+  clocks:
+    minItems: 1
+
+  power-domains:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - mediatek,gce-client-reg
+  - clocks
+  - power-domains
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt8195-clk.h>
+    #include <dt-bindings/gce/mt8195-gce.h>
+    #include <dt-bindings/power/mt8195-power.h>
+
+    mdp3-tcc0 at 1400b000 {
+      compatible = "mediatek,mt8195-mdp3-tcc";
+      reg = <0x1400b000 0x1000>;
+      mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0xb000 0x1000>;
+      clocks = <&vppsys0 CLK_VPP0_MDP_TCC>;
+      power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+    };
diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-tdshp.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-tdshp.yaml
new file mode 100644
index 000000000000..90ce0c5ea151
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-tdshp.yaml
@@ -0,0 +1,64 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/mediatek,mdp3-tdshp.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek Media Data Path 3 TDSHP Device Tree Bindings
+
+maintainers:
+  - Matthias Brugger <matthias.bgg at gmail.com>
+  - Moudy Ho <moudy.ho at mediatek.com>
+
+description: |
+  One of Media Data Path 3 (MDP3) components used to improve image
+  sharpness and contrast.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt8195-mdp3-tdshp
+
+  reg:
+    maxItems: 1
+
+  mediatek,gce-client-reg:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      items:
+        - description: phandle of GCE
+        - description: GCE subsys id
+        - description: register offset
+        - description: register size
+    description: The register of client driver can be configured by gce with
+      4 arguments defined in this property. Each GCE subsys id is mapping to
+      a client defined in the header include/dt-bindings/gce/<chip>-gce.h.
+
+  clocks:
+    minItems: 1
+
+  power-domains:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - mediatek,gce-client-reg
+  - clocks
+  - power-domains
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt8195-clk.h>
+    #include <dt-bindings/gce/mt8195-gce.h>
+    #include <dt-bindings/power/mt8195-power.h>
+
+    mdp3-tdshp0 at 14007000 {
+      compatible = "mediatek,mt8195-mdp3-tdshp";
+      reg = <0x14007000 0x1000>;
+      mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x7000 0x1000>;
+      clocks = <&vppsys0 CLK_VPP0_MDP_TDSHP>;
+      power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+    };
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 00:44:04 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 16:44:04 +0800
Subject: [PATCH v2 04/12] media: platform: mtk-mdp3: add support second sets of MUTEX
In-Reply-To: <20221207084412.14075-1-moudy.ho@mediatek.com>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
Message-ID: <20221207084412.14075-5-moudy.ho@mediatek.com>

After configuring the second set of MMSYS (VPPSYS1), a corresponding
second set of MUTEX (MUTEX2) is required to help handle SOF/EOF

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
---
 .../platform/mediatek/mdp3/mtk-mdp3-cmdq.c    | 64 ++++++++++++-------
 .../platform/mediatek/mdp3/mtk-mdp3-core.c    | 30 +++++++--
 .../platform/mediatek/mdp3/mtk-mdp3-core.h    |  2 +
 3 files changed, 67 insertions(+), 29 deletions(-)

diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
index 3617c99f8e4c..5472d7183a5e 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
@@ -43,15 +43,28 @@ static bool is_output_disabled(int id, const struct img_compparam *param, u32 co
 	return (count < num) ? (dis_output || dis_tile) : true;
 }
 
+static struct mtk_mutex *__get_mutex(const struct mdp_dev *mdp_dev,
+				     const struct mdp_pipe_info *p)
+{
+	struct mtk_mutex *m;
+
+	if (p->mmsys_id)
+		m = mdp_dev->mdp_mutex2[p->mutex_id];
+	else
+		m = mdp_dev->mdp_mutex[p->mutex_id];
+
+	return m;
+}
+
 static int mdp_path_subfrm_require(const struct mdp_path *path,
 				   struct mdp_cmdq_cmd *cmd,
-				   s32 *mutex_id, u32 count)
+				   struct mdp_pipe_info *p, u32 count)
 {
 	const int plat_id = path->mdp_dev->mdp_data->mdp_plat_id;
 	const struct mdp_comp_ctx *ctx;
 	const struct mtk_mdp_driver_data *data = path->mdp_dev->mdp_data;
 	struct device *dev = &path->mdp_dev->pdev->dev;
-	struct mtk_mutex **mutex = path->mdp_dev->mdp_mutex;
+	struct mtk_mutex *mutex;
 	int id, index;
 	u32 num_comp = 0;
 
@@ -76,7 +89,8 @@ static int mdp_path_subfrm_require(const struct mdp_path *path,
 		dev_err(dev, "Unknown pipeline and no mutex is assigned");
 		return -EINVAL;
 	}
-	*mutex_id = data->pipe_info[index].mutex_id;
+	memcpy(p, &data->pipe_info[index], sizeof(struct mdp_pipe_info));
+	mutex = __get_mutex(path->mdp_dev, p);
 
 	/* Set mutex mod */
 	for (index = 0; index < num_comp; index++) {
@@ -84,29 +98,28 @@ static int mdp_path_subfrm_require(const struct mdp_path *path,
 		if (is_output_disabled(plat_id, ctx->param, count))
 			continue;
 		id = ctx->comp->public_id;
-		mtk_mutex_write_mod(mutex[*mutex_id],
-				    data->mdp_mutex_table_idx[id], false);
+		mtk_mutex_write_mod(mutex, data->mdp_mutex_table_idx[id], false);
+
 	}
 
-	mtk_mutex_write_sof(mutex[*mutex_id],
-			    MUTEX_SOF_IDX_SINGLE_MODE);
+	mtk_mutex_write_sof(mutex, MUTEX_SOF_IDX_SINGLE_MODE);
 
 	return 0;
 }
 
 static int mdp_path_subfrm_run(const struct mdp_path *path,
 			       struct mdp_cmdq_cmd *cmd,
-			       s32 *mutex_id, u32 count)
+			       struct mdp_pipe_info *p, u32 count)
 {
 	const int id = path->mdp_dev->mdp_data->mdp_plat_id;
 	const struct mdp_comp_ctx *ctx;
 	struct device *dev = &path->mdp_dev->pdev->dev;
-	struct mtk_mutex **mutex = path->mdp_dev->mdp_mutex;
+	struct mtk_mutex *mutex;
 	int index;
 	u32 num_comp = 0;
 	s32 event;
 
-	if (-1 == *mutex_id) {
+	if (-1 == p->mutex_id) {
 		dev_err(dev, "Incorrect mutex id");
 		return -EINVAL;
 	}
@@ -126,7 +139,8 @@ static int mdp_path_subfrm_run(const struct mdp_path *path,
 	}
 
 	/* Enable the mutex */
-	mtk_mutex_enable_by_cmdq(mutex[*mutex_id], (void *)&cmd->pkt);
+	mutex = __get_mutex(path->mdp_dev, p);
+	mtk_mutex_enable_by_cmdq(mutex, (void *)&cmd->pkt);
 
 	/* Wait SOF events and clear mutex modules (optional) */
 	for (index = 0; index < num_comp; index++) {
@@ -173,7 +187,7 @@ static int mdp_path_config_subfrm(struct mdp_cmdq_cmd *cmd,
 	const struct img_mmsys_ctrl *ctrl = NULL;
 	const struct img_mux *set;
 	struct mdp_comp_ctx *ctx;
-	s32 mutex_id;
+	struct mdp_pipe_info pipe;
 	int index, ret;
 	u32 num_comp = 0;
 
@@ -184,7 +198,7 @@ static int mdp_path_config_subfrm(struct mdp_cmdq_cmd *cmd,
 		ctrl = CFG_ADDR(MT8183, path->config, ctrls[count]);
 
 	/* Acquire components */
-	ret = mdp_path_subfrm_require(path, cmd, &mutex_id, count);
+	ret = mdp_path_subfrm_require(path, cmd, &pipe, count);
 	if (ret)
 		return ret;
 	/* Enable mux settings */
@@ -203,7 +217,7 @@ static int mdp_path_config_subfrm(struct mdp_cmdq_cmd *cmd,
 			return ret;
 	}
 	/* Run components */
-	ret = mdp_path_subfrm_run(path, cmd, &mutex_id, count);
+	ret = mdp_path_subfrm_run(path, cmd, &pipe, count);
 	if (ret)
 		return ret;
 	/* Wait components done */
@@ -327,13 +341,13 @@ static void mdp_auto_release_work(struct work_struct *work)
 {
 	struct mdp_cmdq_cmd *cmd;
 	struct mdp_dev *mdp;
-	int id;
+	struct mtk_mutex *mutex;
 
 	cmd = container_of(work, struct mdp_cmdq_cmd, auto_release_work);
 	mdp = cmd->mdp;
 
-	id = mdp->mdp_data->pipe_info[MDP_PIPE_RDMA0].mutex_id;
-	mtk_mutex_unprepare(mdp->mdp_mutex[id]);
+	mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[MDP_PIPE_RDMA0]);
+	mtk_mutex_unprepare(mutex);
 	mdp_comp_clocks_off(&mdp->pdev->dev, cmd->comps,
 			    cmd->num_comps);
 
@@ -353,7 +367,6 @@ static void mdp_handle_cmdq_callback(struct mbox_client *cl, void *mssg)
 	struct cmdq_cb_data *data;
 	struct mdp_dev *mdp;
 	struct device *dev;
-	int id;
 
 	if (!mssg) {
 		pr_info("%s:no callback data\n", __func__);
@@ -378,9 +391,11 @@ static void mdp_handle_cmdq_callback(struct mbox_client *cl, void *mssg)
 
 	INIT_WORK(&cmd->auto_release_work, mdp_auto_release_work);
 	if (!queue_work(mdp->clock_wq, &cmd->auto_release_work)) {
+		struct mtk_mutex *mutex;
+
 		dev_err(dev, "%s:queue_work fail!\n", __func__);
-		id = mdp->mdp_data->pipe_info[MDP_PIPE_RDMA0].mutex_id;
-		mtk_mutex_unprepare(mdp->mdp_mutex[id]);
+		mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[MDP_PIPE_RDMA0]);
+		mtk_mutex_unprepare(mutex);
 		mdp_comp_clocks_off(&mdp->pdev->dev, cmd->comps,
 				    cmd->num_comps);
 
@@ -401,6 +416,7 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
 	struct mdp_cmdq_cmd *cmd = NULL;
 	struct mdp_comp *comps = NULL;
 	struct device *dev = &mdp->pdev->dev;
+	struct mtk_mutex *mutex = NULL;
 	const int id = mdp->mdp_data->mdp_plat_id;
 	int i, ret;
 	u32 num_comp = 0;
@@ -437,8 +453,8 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
 		goto err_free_comps;
 	}
 
-	i = mdp->mdp_data->pipe_info[MDP_PIPE_RDMA0].mutex_id;
-	ret = mtk_mutex_prepare(mdp->mdp_mutex[i]);
+	mutex = __get_mutex(mdp, &mdp->mdp_data->pipe_info[MDP_PIPE_RDMA0]);
+	ret = mtk_mutex_prepare(mutex);
 	if (ret) {
 		dev_err(dev, "Fail to enable mutex clk\n");
 		goto err_free_path;
@@ -503,8 +519,8 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
 	mdp_comp_clocks_off(&mdp->pdev->dev, cmd->comps,
 			    cmd->num_comps);
 err_free_path:
-	i = mdp->mdp_data->pipe_info[MDP_PIPE_RDMA0].mutex_id;
-	mtk_mutex_unprepare(mdp->mdp_mutex[i]);
+	if (mutex)
+		mtk_mutex_unprepare(mutex);
 	kfree(path);
 err_free_comps:
 	kfree(comps);
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
index 927d3d65751a..56c42bd3f16b 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
@@ -161,8 +161,10 @@ void mdp_video_device_release(struct video_device *vdev)
 	vb2_dma_contig_clear_max_seg_size(&mdp->pdev->dev);
 
 	mdp_comp_destroy(mdp);
-	for (i = 0; i < MDP_PIPE_MAX; i++)
+	for (i = 0; i < MDP_PIPE_MAX; i++) {
 		mtk_mutex_put(mdp->mdp_mutex[i]);
+		mtk_mutex_put(mdp->mdp_mutex2[i]);
+	}
 
 	mdp_vpu_shared_mem_free(&mdp->vpu);
 	v4l2_m2m_release(mdp->m2m_dev);
@@ -205,12 +207,28 @@ static int mdp_probe(struct platform_device *pdev)
 		ret = -ENODEV;
 		goto err_destroy_device;
 	}
+	mm2_pdev = __get_pdev_by_id(pdev, mm_pdev, MDP_INFRA_MUTEX2);
+	/* MUTEX2 must works with MMSYS2 */
+	if ((IS_ERR(mm2_pdev)) ||
+	    (mm2_pdev && IS_ERR_OR_NULL(mdp->mdp_mmsys2))) {
+		ret = -ENODEV;
+		goto err_destroy_device;
+	}
 	for (i = 0; i < mdp->mdp_data->pipe_info_len; i++) {
+		struct platform_device *p;
+		struct mtk_mutex **m;
+		u32 id;
+
 		mutex_id = mdp->mdp_data->pipe_info[i].mutex_id;
-		if (mdp->mdp_mutex[mutex_id])
+		id = mdp->mdp_data->pipe_info[i].mmsys_id;
+		p = (id && mm2_pdev) ? mm2_pdev : mm_pdev;
+		m = (id && mm2_pdev) ?
+			mdp->mdp_mutex2 : mdp->mdp_mutex;
+
+		if (m[mutex_id])
 			continue;
-		mdp->mdp_mutex[mutex_id] = mtk_mutex_get(&mm_pdev->dev);
-		if (!mdp->mdp_mutex[mutex_id]) {
+		m[mutex_id] = mtk_mutex_get(&p->dev);
+		if (!m[mutex_id]) {
 			ret = -ENODEV;
 			goto err_free_mutex;
 		}
@@ -291,8 +309,10 @@ static int mdp_probe(struct platform_device *pdev)
 err_deinit_comp:
 	mdp_comp_destroy(mdp);
 err_free_mutex:
-	for (i = 0; i < mdp->mdp_data->pipe_info_len; i++)
+	for (i = 0; i < mdp->mdp_data->pipe_info_len; i++) {
 		mtk_mutex_put(mdp->mdp_mutex[i]);
+		mtk_mutex_put(mdp->mdp_mutex2[i]);
+	}
 err_destroy_device:
 	kfree(mdp);
 err_return:
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
index 50c0bc6c358f..3ffad6be95ad 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
@@ -22,6 +22,7 @@ enum mdp_infra_id {
 	MDP_INFRA_MMSYS,
 	MDP_INFRA_MMSYS2,
 	MDP_INFRA_MUTEX,
+	MDP_INFRA_MUTEX2,
 	MDP_INFRA_SCP,
 	MDP_INFRA_MAX
 };
@@ -71,6 +72,7 @@ struct mdp_dev {
 	struct device				*mdp_mmsys;
 	struct device				*mdp_mmsys2;
 	struct mtk_mutex			*mdp_mutex[MDP_PIPE_MAX];
+	struct mtk_mutex			*mdp_mutex2[MDP_PIPE_MAX];
 	struct mdp_comp				*comp[MDP_MAX_COMP_COUNT];
 	const struct mtk_mdp_driver_data	*mdp_data;
 
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 00:44:00 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 16:44:00 +0800
Subject: [PATCH v2 00/12] add support MDP3 on MT8195 platform
Message-ID: <20221207084412.14075-1-moudy.ho@mediatek.com>

From: mtk18742 <moudy.ho at mediatek.com>

Changes since v1:
- Depend on :
  [1] MDP3 : https://patchwork.kernel.org/project/linux-mediatek/list/?series=698872
  [2] MMSYS/MUTEX: https://patchwork.kernel.org/project/linux-mediatek/list/?series=684959
- Fix compilation failure due to use of undeclared identifier in file "mtk-mdp3-cmdq.c"

Hello,

This patch is used to add support for MDP3 on the MT8195 platform that
contains more picture quality components, and can arrange more pipelines
through two sets of MMSYS and MUTEX respectively.

Moudy Ho (12):
  dt-binding: mediatek: add bindings for MediaTek 8195 MDP3 components
  arm64: dts: mediatek: mt8195: add MDP3 nodes
  media: platform: mtk-mdp3: add support second sets of MMSYS
  media: platform: mtk-mdp3: add support second sets of MUTEX
  media: platform: mtk-mdp3: introduce more pipelines from 8195
  media: platform: mtk-mdp3: introduce more MDP3 components
  media: platform: mtk-mdp3: add checks for dummy components
  media: platform: mtk-mdp3: avoid multiple driver registrations
  media: platform: mtk-mdp3: extend GCE event waiting in RDMA and WROT
  media: platform: mtk-mdp3: add 8195 platform configuration
  media: platform: mtk-mdp3: add 8195 shared memory configurations
  media: platform: mtk-mdp3: add 8195 component settings

 .../bindings/media/mediatek,mdp3-aal.yaml     |  64 ++
 .../bindings/media/mediatek,mdp3-color.yaml   |  64 ++
 .../bindings/media/mediatek,mdp3-fg.yaml      |  64 ++
 .../bindings/media/mediatek,mdp3-hdr.yaml     |  63 ++
 .../bindings/media/mediatek,mdp3-merge.yaml   |  64 ++
 .../bindings/media/mediatek,mdp3-ovl.yaml     |  64 ++
 .../bindings/media/mediatek,mdp3-pad.yaml     |  64 ++
 .../bindings/media/mediatek,mdp3-rdma.yaml    |   5 +-
 .../bindings/media/mediatek,mdp3-split.yaml   |  76 ++
 .../bindings/media/mediatek,mdp3-stitch.yaml  |  64 ++
 .../bindings/media/mediatek,mdp3-tcc.yaml     |  63 ++
 .../bindings/media/mediatek,mdp3-tdshp.yaml   |  64 ++
 arch/arm64/boot/dts/mediatek/mt8195.dtsi      | 398 +++++++++
 .../platform/mediatek/mdp3/mdp_reg_aal.h      |  25 +
 .../platform/mediatek/mdp3/mdp_reg_color.h    |  31 +
 .../media/platform/mediatek/mdp3/mdp_reg_fg.h |  23 +
 .../platform/mediatek/mdp3/mdp_reg_hdr.h      |  31 +
 .../platform/mediatek/mdp3/mdp_reg_merge.h    |  25 +
 .../platform/mediatek/mdp3/mdp_reg_ovl.h      |  25 +
 .../platform/mediatek/mdp3/mdp_reg_pad.h      |  21 +
 .../platform/mediatek/mdp3/mdp_reg_rdma.h     |  24 +
 .../platform/mediatek/mdp3/mdp_reg_rsz.h      |   2 +
 .../platform/mediatek/mdp3/mdp_reg_tdshp.h    |  34 +
 .../platform/mediatek/mdp3/mdp_reg_wrot.h     |   8 +
 .../mediatek/mdp3/mt8183/mdp3-plat-mt8183.h   |  46 +-
 .../mediatek/mdp3/mt8195/mdp3-comp-mt8195.h   | 283 ++++++
 .../mediatek/mdp3/mt8195/mdp3-plat-mt8195.h   | 652 ++++++++++++++
 .../platform/mediatek/mdp3/mtk-img-ipi.h      |   4 +
 .../platform/mediatek/mdp3/mtk-mdp3-cmdq.c    | 257 +++++-
 .../platform/mediatek/mdp3/mtk-mdp3-comp.c    | 834 +++++++++++++++++-
 .../platform/mediatek/mdp3/mtk-mdp3-comp.h    |  86 +-
 .../platform/mediatek/mdp3/mtk-mdp3-core.c    |  94 +-
 .../platform/mediatek/mdp3/mtk-mdp3-core.h    |  21 +
 33 files changed, 3529 insertions(+), 114 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-aal.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-color.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-fg.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-hdr.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-merge.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-ovl.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-pad.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-split.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-stitch.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-tcc.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-tdshp.yaml
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_aal.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_color.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_fg.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_hdr.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_merge.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_ovl.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_pad.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mdp_reg_tdshp.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mt8195/mdp3-comp-mt8195.h
 create mode 100644 drivers/media/platform/mediatek/mdp3/mt8195/mdp3-plat-mt8195.h

-- 
2.18.0



From angelogioacchino.delregno at collabora.com  Wed Dec  7 01:48:44 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 7 Dec 2022 10:48:44 +0100
Subject: [PATCH v2 7/9] dt-bindings: spi: mtk-snfi: Add read latch latency
 property
In-Reply-To: <e2ccf42f94152ccacad3a2eaec234ae0566474ec.camel@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-8-xiangsheng.hou@mediatek.com>
 <ce449a0c-efcc-0ac1-fb8e-c2b4148a5bc1@collabora.com>
 <a8f706b37f5decf91bfa9a9ac8cf04be4346dd85.camel@mediatek.com>
 <9992c9a5-059a-9396-32ce-7ed63cd12a96@collabora.com>
 <e2ccf42f94152ccacad3a2eaec234ae0566474ec.camel@mediatek.com>
Message-ID: <b877af37-462e-c923-41c0-09c370062700@collabora.com>

Il 07/12/22 03:00, Xiangsheng Hou (???) ha scritto:
> Hi Angelo,
> 
> On Tue, 2022-12-06 at 13:19 +0100, AngeloGioacchino Del Regno wrote:
>>>>> diff --git
>>>>> a/Documentation/devicetree/bindings/spi/mediatek,spi-
>>>>> mtk-snfi.yaml
>>>>> b/Documentation/devicetree/bindings/spi/mediatek,spi-
>>>>> mtk-snfi.yaml
>>>>> index bab23f1b11fd..6e6ff8d73fcd 100644
>>>>> --- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-
>>>>> snfi.yaml
>>>>> +++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-
>>>>> snfi.yaml
>>>>> @@ -45,6 +45,13 @@ properties:
>>>>>         description: device-tree node of the accompanying ECC
>>>>> engine.
>>>>>         $ref: /schemas/types.yaml#/definitions/phandle
>>>>>     
>>>>> +  mediatek,rx-latch-latency:
>>>>> +    description: Rx delay to sample data with this value, the
>>>>> value
>>>>> +                 unit is clock cycle.
>>>>
>>>> Can't we use nanoseconds or microseconds as a unit here, instead
>>>> of
>>>> clock cycles?
>>>
>>> The clock cycle will be various with MediaTek SPI NAND controller
>>> which
>>> clock frequency can support 26/52/68/81/104MHz...
>>> It`s may be easy to configure and understand with clock cycle in
>>> unit.
>>>
>>
>> Yes, but whatever clock frequency we use, the target is to always
>> wait for
>> X nanoseconds, right?
>>
>> Waiting for 5 clock cycles at 104MHz is obviously not the same as
>> waiting
>> for the same 5 clock cycles at 26MHz: in that case, expressing the
>> value
>> in nanoseconds or microseconds would make that independent from the
>> controller's clock frequency as the calculation from `time` to
>> `cycles`
>> would be performed inside of the driver.
> 
> There have two rx related timing properties in spi-peripheral-props.
> The rx-sample-delay-ns have been used in Mediatek snfi driver to adjust
> controller sample delay.
> However another spi-rx-delay-us is in microseconds. Take 52MHz for
> example, the clock cycle will be 19.23ns which lower than 1us. This may
> not easy to by one clock cycle.
> 

I agree, but nothing prevents you from adding your own property for that.

I propose "mediatek,rx-latch-latency-ns" or "mediatek,rx-latency-ns", so that
we can specify the delay in nanoseconds: in that case, when we specify 19ns,
the driver will safely round that resulting in 52MHz == 19.23ns => 19ns valid.

Regards,
Angelo



From moudy.ho at mediatek.com  Wed Dec  7 01:49:16 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 17:49:16 +0800
Subject: [PATCH v4 3/8] arm64: dts: mediatek: mt8195: add MMSYS configuration for VPPSYS
In-Reply-To: <20221207094921.15450-1-moudy.ho@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
Message-ID: <20221207094921.15450-4-moudy.ho@mediatek.com>

From: "Roy-CW.Yeh" <roy-cw.yeh at mediatek.com>

With the change of the MMSYS binding file for MT8195, the compatible
name of VPPSYS in dts need to be fixed to match the definition.

Signed-off-by: Roy-CW.Yeh <roy-cw.yeh at mediatek.com>
Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
---
 arch/arm64/boot/dts/mediatek/mt8195.dtsi | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index 5d31536f4c48..bd33b414c484 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -1632,8 +1632,9 @@
 			#clock-cells = <1>;
 		};
 
-		vppsys0: clock-controller at 14000000 {
-			compatible = "mediatek,mt8195-vppsys0";
+		vppsys0: syscon at 14000000 {
+			compatible = "mediatek,mt8195-vppsys0",
+				     "mediatek,mt8195-mmsys", "syscon";
 			reg = <0 0x14000000 0 0x1000>;
 			#clock-cells = <1>;
 		};
@@ -1737,8 +1738,9 @@
 			power-domains = <&spm MT8195_POWER_DOMAIN_WPESYS>;
 		};
 
-		vppsys1: clock-controller at 14f00000 {
-			compatible = "mediatek,mt8195-vppsys1";
+		vppsys1: syscon at 14f00000 {
+			compatible = "mediatek,mt8195-vppsys1",
+				     "mediatek,mt8195-mmsys", "syscon";
 			reg = <0 0x14f00000 0 0x1000>;
 			#clock-cells = <1>;
 		};
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 01:49:13 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 17:49:13 +0800
Subject: [PATCH v4 0/8] add support MDP3 on MT8195 platform
Message-ID: <20221207094921.15450-1-moudy.ho@mediatek.com>

From: mtk18742 <moudy.ho at mediatek.com>

Changes since v3:
- Rebase on linux-next

Changes since v2:
- Depend on :
  [1] https://patchwork.kernel.org/project/linux-mediatek/list/?series=681097
- Split dts settings into two patches based on belonging to MMSYS or MUTEX.

Changes since v1:
- Depend on :
  [1] https://patchwork.kernel.org/project/linux-mediatek/list/?series=681097
- Add compatible names to VPPSYS0 and VPPSYS1 in MMSYS binding file.
- Fix VPPSYS's MMSYS and MUTEX dts to pass the dtsb_check.
- Rename mtk_mmsys_merge_config() and mtk_mmsys_rsz_dcm_config() to
  mtk_mmsys_vpp_rsz_merge_config() and mtk_mmsys_vpp_rsz_dcm_config().
- Clean up mtk_mmsys_vpp_rsz_dcm_config().
- Add a comment to mtk_mutex_write_mod() and clean it up for use in more
  than 32 mods.

Hi,

This series add support for MT8195's two VPPSYS(Video Processor Pipe Subsystem),
under which there will be corresponding MMSYS and MUTEX settings that
need to be configured.

Moudy Ho (2):
  dt-bindings: arm: mediatek: mmsys: Add support for MT8195 VPPSYS
  arm64: dts: mediatek: mt8195: add MUTEX configuration for VPPSYS

Roy-CW.Yeh (6):
  dt-bindings: soc: mediatek: Add support for MT8195 VPPSYS
  arm64: dts: mediatek: mt8195: add MMSYS configuration for VPPSYS
  soc: mediatek: mmsys: add support for MT8195 VPPSYS
  soc: mediatek: mmsys: add config api for RSZ switching and DCM
  soc: mediatek: mutex: Add mtk_mutex_set_mod support to set MOD1
  soc: mediatek: mutex: support MT8195 VPPSYS

 .../bindings/arm/mediatek/mediatek,mmsys.yaml |   5 +-
 .../bindings/soc/mediatek/mediatek,mutex.yaml |   1 +
 arch/arm64/boot/dts/mediatek/mt8195.dtsi      |  28 +++-
 drivers/soc/mediatek/mt8195-mmsys.h           |  13 ++
 drivers/soc/mediatek/mtk-mmsys.c              |  64 +++++++++
 drivers/soc/mediatek/mtk-mmsys.h              |   1 +
 drivers/soc/mediatek/mtk-mutex.c              | 135 +++++++++++++++++-
 include/linux/soc/mediatek/mtk-mmsys.h        |   4 +
 include/linux/soc/mediatek/mtk-mutex.h        |  35 +++++
 9 files changed, 274 insertions(+), 12 deletions(-)

-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 01:49:18 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 17:49:18 +0800
Subject: [PATCH v4 5/8] soc: mediatek: mmsys: add support for MT8195 VPPSYS
In-Reply-To: <20221207094921.15450-1-moudy.ho@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
Message-ID: <20221207094921.15450-6-moudy.ho@mediatek.com>

From: "Roy-CW.Yeh" <roy-cw.yeh at mediatek.com>

Add MT8195 VPPSYS0 and VPPSYS1 driver data.

Signed-off-by: Roy-CW.Yeh <roy-cw.yeh at mediatek.com>
Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/soc/mediatek/mtk-mmsys.c | 22 ++++++++++++++++++++++
 drivers/soc/mediatek/mtk-mmsys.h |  1 +
 2 files changed, 23 insertions(+)

diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index f3431448e843..5a3189544c5a 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -80,6 +80,16 @@ static const struct mtk_mmsys_driver_data mt8195_vdosys0_driver_data = {
 	.num_routes = ARRAY_SIZE(mmsys_mt8195_routing_table),
 };
 
+static const struct mtk_mmsys_driver_data mt8195_vppsys0_driver_data = {
+	.clk_driver = "clk-mt8195-vpp0",
+	.is_vppsys = true,
+};
+
+static const struct mtk_mmsys_driver_data mt8195_vppsys1_driver_data = {
+	.clk_driver = "clk-mt8195-vpp1",
+	.is_vppsys = true,
+};
+
 static const struct mtk_mmsys_driver_data mt8365_mmsys_driver_data = {
 	.clk_driver = "clk-mt8365-mm",
 	.routes = mt8365_mmsys_routing_table,
@@ -256,6 +266,9 @@ static int mtk_mmsys_probe(struct platform_device *pdev)
 	if (IS_ERR(clks))
 		return PTR_ERR(clks);
 
+	if (mmsys->data->is_vppsys)
+		goto out_probe_done;
+
 	drm = platform_device_register_data(&pdev->dev, "mediatek-drm",
 					    PLATFORM_DEVID_AUTO, NULL, 0);
 	if (IS_ERR(drm)) {
@@ -263,6 +276,7 @@ static int mtk_mmsys_probe(struct platform_device *pdev)
 		return PTR_ERR(drm);
 	}
 
+out_probe_done:
 	return 0;
 }
 
@@ -311,6 +325,14 @@ static const struct of_device_id of_match_mtk_mmsys[] = {
 		.compatible = "mediatek,mt8195-vdosys0",
 		.data = &mt8195_vdosys0_driver_data,
 	},
+	{
+		.compatible = "mediatek,mt8195-vppsys0",
+		.data = &mt8195_vppsys0_driver_data,
+	},
+	{
+		.compatible = "mediatek,mt8195-vppsys1",
+		.data = &mt8195_vppsys1_driver_data,
+	},
 	{
 		.compatible = "mediatek,mt8365-mmsys",
 		.data = &mt8365_mmsys_driver_data,
diff --git a/drivers/soc/mediatek/mtk-mmsys.h b/drivers/soc/mediatek/mtk-mmsys.h
index 77f37f8c715b..54a96b83afb4 100644
--- a/drivers/soc/mediatek/mtk-mmsys.h
+++ b/drivers/soc/mediatek/mtk-mmsys.h
@@ -91,6 +91,7 @@ struct mtk_mmsys_driver_data {
 	const struct mtk_mmsys_routes *routes;
 	const unsigned int num_routes;
 	const u16 sw0_rst_offset;
+	const bool is_vppsys;
 };
 
 /*
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 01:49:15 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 17:49:15 +0800
Subject: [PATCH v4 2/8] dt-bindings: soc: mediatek: Add support for MT8195 VPPSYS
In-Reply-To: <20221207094921.15450-1-moudy.ho@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
Message-ID: <20221207094921.15450-3-moudy.ho@mediatek.com>

From: "Roy-CW.Yeh" <roy-cw.yeh at mediatek.com>

Add compatible for MT8195 VPPSYS on MUTEX.

Signed-off-by: Roy-CW.Yeh <roy-cw.yeh at mediatek.com>
Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../devicetree/bindings/soc/mediatek/mediatek,mutex.yaml         | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/soc/mediatek/mediatek,mutex.yaml b/Documentation/devicetree/bindings/soc/mediatek/mediatek,mutex.yaml
index 9241e5fc7cff..5f044ba183fd 100644
--- a/Documentation/devicetree/bindings/soc/mediatek/mediatek,mutex.yaml
+++ b/Documentation/devicetree/bindings/soc/mediatek/mediatek,mutex.yaml
@@ -34,6 +34,7 @@ properties:
       - mediatek,mt8186-mdp3-mutex
       - mediatek,mt8192-disp-mutex
       - mediatek,mt8195-disp-mutex
+      - mediatek,mt8195-vpp-mutex
 
   reg:
     maxItems: 1
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 01:49:14 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 17:49:14 +0800
Subject: [PATCH v4 1/8] dt-bindings: arm: mediatek: mmsys: Add support for MT8195 VPPSYS
In-Reply-To: <20221207094921.15450-1-moudy.ho@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
Message-ID: <20221207094921.15450-2-moudy.ho@mediatek.com>

For MT8195, VPPSYS0 and VPPSYS1 are 2 display pipes with
hardware differences in power domains, clocks and subsystem counts,
which should be determined by compatible names.

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml     | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
index 0711f1834fbd..493aa9e8d484 100644
--- a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
+++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
@@ -48,7 +48,10 @@ properties:
           - const: syscon
 
       - items:
-          - const: mediatek,mt8195-vdosys0
+          - enum:
+              - mediatek,mt8195-vdosys0
+              - mediatek,mt8195-vppsys0
+              - mediatek,mt8195-vppsys1
           - const: mediatek,mt8195-mmsys
           - const: syscon
 
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 01:49:21 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 17:49:21 +0800
Subject: [PATCH v4 8/8] soc: mediatek: mutex: support MT8195 VPPSYS
In-Reply-To: <20221207094921.15450-1-moudy.ho@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
Message-ID: <20221207094921.15450-9-moudy.ho@mediatek.com>

From: "Roy-CW.Yeh" <roy-cw.yeh at mediatek.com>

Add MT8195 VPPSYS0 and VPPSYS1 mutex info to driver data

Signed-off-by: Roy-CW.Yeh <roy-cw.yeh at mediatek.com>
Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/soc/mediatek/mtk-mutex.c       | 102 +++++++++++++++++++++++++
 include/linux/soc/mediatek/mtk-mutex.h |  35 +++++++++
 2 files changed, 137 insertions(+)

diff --git a/drivers/soc/mediatek/mtk-mutex.c b/drivers/soc/mediatek/mtk-mutex.c
index a2be15a5c93a..86b9372080c4 100644
--- a/drivers/soc/mediatek/mtk-mutex.c
+++ b/drivers/soc/mediatek/mtk-mutex.c
@@ -131,6 +131,53 @@
 #define MT8195_MUTEX_MOD_DISP_DP_INTF0		21
 #define MT8195_MUTEX_MOD_DISP_PWM0		27
 
+/* VPPSYS0 */
+#define MT8195_MUTEX_MOD_MDP_RDMA0             0
+#define MT8195_MUTEX_MOD_MDP_FG0               1
+#define MT8195_MUTEX_MOD_MDP_STITCH0           2
+#define MT8195_MUTEX_MOD_MDP_HDR0              3
+#define MT8195_MUTEX_MOD_MDP_AAL0              4
+#define MT8195_MUTEX_MOD_MDP_RSZ0              5
+#define MT8195_MUTEX_MOD_MDP_TDSHP0            6
+#define MT8195_MUTEX_MOD_MDP_COLOR0            7
+#define MT8195_MUTEX_MOD_MDP_OVL0              8
+#define MT8195_MUTEX_MOD_MDP_PAD0              9
+#define MT8195_MUTEX_MOD_MDP_TCC0              10
+#define MT8195_MUTEX_MOD_MDP_WROT0             11
+
+/* VPPSYS1 */
+#define MT8195_MUTEX_MOD_MDP_TCC1              3
+#define MT8195_MUTEX_MOD_MDP_RDMA1             4
+#define MT8195_MUTEX_MOD_MDP_RDMA2             5
+#define MT8195_MUTEX_MOD_MDP_RDMA3             6
+#define MT8195_MUTEX_MOD_MDP_FG1               7
+#define MT8195_MUTEX_MOD_MDP_FG2               8
+#define MT8195_MUTEX_MOD_MDP_FG3               9
+#define MT8195_MUTEX_MOD_MDP_HDR1              10
+#define MT8195_MUTEX_MOD_MDP_HDR2              11
+#define MT8195_MUTEX_MOD_MDP_HDR3              12
+#define MT8195_MUTEX_MOD_MDP_AAL1              13
+#define MT8195_MUTEX_MOD_MDP_AAL2              14
+#define MT8195_MUTEX_MOD_MDP_AAL3              15
+#define MT8195_MUTEX_MOD_MDP_RSZ1              16
+#define MT8195_MUTEX_MOD_MDP_RSZ2              17
+#define MT8195_MUTEX_MOD_MDP_RSZ3              18
+#define MT8195_MUTEX_MOD_MDP_TDSHP1            19
+#define MT8195_MUTEX_MOD_MDP_TDSHP2            20
+#define MT8195_MUTEX_MOD_MDP_TDSHP3            21
+#define MT8195_MUTEX_MOD_MDP_MERGE2            22
+#define MT8195_MUTEX_MOD_MDP_MERGE3            23
+#define MT8195_MUTEX_MOD_MDP_COLOR1            24
+#define MT8195_MUTEX_MOD_MDP_COLOR2            25
+#define MT8195_MUTEX_MOD_MDP_COLOR3            26
+#define MT8195_MUTEX_MOD_MDP_OVL1              27
+#define MT8195_MUTEX_MOD_MDP_PAD1              28
+#define MT8195_MUTEX_MOD_MDP_PAD2              29
+#define MT8195_MUTEX_MOD_MDP_PAD3              30
+#define MT8195_MUTEX_MOD_MDP_WROT1             31
+#define MT8195_MUTEX_MOD_MDP_WROT2             32
+#define MT8195_MUTEX_MOD_MDP_WROT3             33
+
 #define MT8365_MUTEX_MOD_DISP_OVL0		7
 #define MT8365_MUTEX_MOD_DISP_OVL0_2L		8
 #define MT8365_MUTEX_MOD_DISP_RDMA0		9
@@ -375,6 +422,52 @@ static const unsigned int mt8195_mutex_mod[DDP_COMPONENT_ID_MAX] = {
 	[DDP_COMPONENT_DP_INTF0] = MT8195_MUTEX_MOD_DISP_DP_INTF0,
 };
 
+static const unsigned int mt8195_mutex_table_mod[MUTEX_MOD_IDX_MAX] = {
+	[MUTEX_MOD_IDX_MDP_RDMA0] = MT8195_MUTEX_MOD_MDP_RDMA0,
+	[MUTEX_MOD_IDX_MDP_RDMA1] = MT8195_MUTEX_MOD_MDP_RDMA1,
+	[MUTEX_MOD_IDX_MDP_RDMA2] = MT8195_MUTEX_MOD_MDP_RDMA2,
+	[MUTEX_MOD_IDX_MDP_RDMA3] = MT8195_MUTEX_MOD_MDP_RDMA3,
+	[MUTEX_MOD_IDX_MDP_STITCH0] = MT8195_MUTEX_MOD_MDP_STITCH0,
+	[MUTEX_MOD_IDX_MDP_FG0] = MT8195_MUTEX_MOD_MDP_FG0,
+	[MUTEX_MOD_IDX_MDP_FG1] = MT8195_MUTEX_MOD_MDP_FG1,
+	[MUTEX_MOD_IDX_MDP_FG2] = MT8195_MUTEX_MOD_MDP_FG2,
+	[MUTEX_MOD_IDX_MDP_FG3] = MT8195_MUTEX_MOD_MDP_FG3,
+	[MUTEX_MOD_IDX_MDP_HDR0] = MT8195_MUTEX_MOD_MDP_HDR0,
+	[MUTEX_MOD_IDX_MDP_HDR1] = MT8195_MUTEX_MOD_MDP_HDR1,
+	[MUTEX_MOD_IDX_MDP_HDR2] = MT8195_MUTEX_MOD_MDP_HDR2,
+	[MUTEX_MOD_IDX_MDP_HDR3] = MT8195_MUTEX_MOD_MDP_HDR3,
+	[MUTEX_MOD_IDX_MDP_AAL0] = MT8195_MUTEX_MOD_MDP_AAL0,
+	[MUTEX_MOD_IDX_MDP_AAL1] = MT8195_MUTEX_MOD_MDP_AAL1,
+	[MUTEX_MOD_IDX_MDP_AAL2] = MT8195_MUTEX_MOD_MDP_AAL2,
+	[MUTEX_MOD_IDX_MDP_AAL3] = MT8195_MUTEX_MOD_MDP_AAL3,
+	[MUTEX_MOD_IDX_MDP_RSZ0] = MT8195_MUTEX_MOD_MDP_RSZ0,
+	[MUTEX_MOD_IDX_MDP_RSZ1] = MT8195_MUTEX_MOD_MDP_RSZ1,
+	[MUTEX_MOD_IDX_MDP_RSZ2] = MT8195_MUTEX_MOD_MDP_RSZ2,
+	[MUTEX_MOD_IDX_MDP_RSZ3] = MT8195_MUTEX_MOD_MDP_RSZ3,
+	[MUTEX_MOD_IDX_MDP_MERGE2] = MT8195_MUTEX_MOD_MDP_MERGE2,
+	[MUTEX_MOD_IDX_MDP_MERGE3] = MT8195_MUTEX_MOD_MDP_MERGE3,
+	[MUTEX_MOD_IDX_MDP_TDSHP0] = MT8195_MUTEX_MOD_MDP_TDSHP0,
+	[MUTEX_MOD_IDX_MDP_TDSHP1] = MT8195_MUTEX_MOD_MDP_TDSHP1,
+	[MUTEX_MOD_IDX_MDP_TDSHP2] = MT8195_MUTEX_MOD_MDP_TDSHP2,
+	[MUTEX_MOD_IDX_MDP_TDSHP3] = MT8195_MUTEX_MOD_MDP_TDSHP3,
+	[MUTEX_MOD_IDX_MDP_COLOR0] = MT8195_MUTEX_MOD_MDP_COLOR0,
+	[MUTEX_MOD_IDX_MDP_COLOR1] = MT8195_MUTEX_MOD_MDP_COLOR1,
+	[MUTEX_MOD_IDX_MDP_COLOR2] = MT8195_MUTEX_MOD_MDP_COLOR2,
+	[MUTEX_MOD_IDX_MDP_COLOR3] = MT8195_MUTEX_MOD_MDP_COLOR3,
+	[MUTEX_MOD_IDX_MDP_OVL0] = MT8195_MUTEX_MOD_MDP_OVL0,
+	[MUTEX_MOD_IDX_MDP_OVL1] = MT8195_MUTEX_MOD_MDP_OVL1,
+	[MUTEX_MOD_IDX_MDP_PAD0] = MT8195_MUTEX_MOD_MDP_PAD0,
+	[MUTEX_MOD_IDX_MDP_PAD1] = MT8195_MUTEX_MOD_MDP_PAD1,
+	[MUTEX_MOD_IDX_MDP_PAD2] = MT8195_MUTEX_MOD_MDP_PAD2,
+	[MUTEX_MOD_IDX_MDP_PAD3] = MT8195_MUTEX_MOD_MDP_PAD3,
+	[MUTEX_MOD_IDX_MDP_TCC0] = MT8195_MUTEX_MOD_MDP_TCC0,
+	[MUTEX_MOD_IDX_MDP_TCC1] = MT8195_MUTEX_MOD_MDP_TCC1,
+	[MUTEX_MOD_IDX_MDP_WROT0] = MT8195_MUTEX_MOD_MDP_WROT0,
+	[MUTEX_MOD_IDX_MDP_WROT1] = MT8195_MUTEX_MOD_MDP_WROT1,
+	[MUTEX_MOD_IDX_MDP_WROT2] = MT8195_MUTEX_MOD_MDP_WROT2,
+	[MUTEX_MOD_IDX_MDP_WROT3] = MT8195_MUTEX_MOD_MDP_WROT3,
+};
+
 static const unsigned int mt8365_mutex_mod[DDP_COMPONENT_ID_MAX] = {
 	[DDP_COMPONENT_AAL0] = MT8365_MUTEX_MOD_DISP_AAL,
 	[DDP_COMPONENT_CCORR] = MT8365_MUTEX_MOD_DISP_CCORR,
@@ -520,6 +613,13 @@ static const struct mtk_mutex_data mt8195_mutex_driver_data = {
 	.mutex_sof_reg = MT8183_MUTEX0_SOF0,
 };
 
+static const struct mtk_mutex_data mt8195_vpp_mutex_driver_data = {
+	.mutex_sof = mt8195_mutex_sof,
+	.mutex_mod_reg = MT8183_MUTEX0_MOD0,
+	.mutex_sof_reg = MT8183_MUTEX0_SOF0,
+	.mutex_table_mod = mt8195_mutex_table_mod,
+};
+
 static const struct mtk_mutex_data mt8365_mutex_driver_data = {
 	.mutex_mod = mt8365_mutex_mod,
 	.mutex_sof = mt8183_mutex_sof,
@@ -877,6 +977,8 @@ static const struct of_device_id mutex_driver_dt_match[] = {
 	  .data = &mt8192_mutex_driver_data},
 	{ .compatible = "mediatek,mt8195-disp-mutex",
 	  .data = &mt8195_mutex_driver_data},
+	{ .compatible = "mediatek,mt8195-vpp-mutex",
+	  .data = &mt8195_vpp_mutex_driver_data},
 	{ .compatible = "mediatek,mt8365-disp-mutex",
 	  .data = &mt8365_mutex_driver_data},
 	{},
diff --git a/include/linux/soc/mediatek/mtk-mutex.h b/include/linux/soc/mediatek/mtk-mutex.h
index b335c2837cd8..635218e3ac68 100644
--- a/include/linux/soc/mediatek/mtk-mutex.h
+++ b/include/linux/soc/mediatek/mtk-mutex.h
@@ -22,6 +22,41 @@ enum mtk_mutex_mod_index {
 	MUTEX_MOD_IDX_MDP_CCORR0,
 	MUTEX_MOD_IDX_MDP_HDR0,
 	MUTEX_MOD_IDX_MDP_COLOR0,
+	MUTEX_MOD_IDX_MDP_RDMA1,
+	MUTEX_MOD_IDX_MDP_RDMA2,
+	MUTEX_MOD_IDX_MDP_RDMA3,
+	MUTEX_MOD_IDX_MDP_STITCH0,
+	MUTEX_MOD_IDX_MDP_FG0,
+	MUTEX_MOD_IDX_MDP_FG1,
+	MUTEX_MOD_IDX_MDP_FG2,
+	MUTEX_MOD_IDX_MDP_FG3,
+	MUTEX_MOD_IDX_MDP_HDR1,
+	MUTEX_MOD_IDX_MDP_HDR2,
+	MUTEX_MOD_IDX_MDP_HDR3,
+	MUTEX_MOD_IDX_MDP_AAL1,
+	MUTEX_MOD_IDX_MDP_AAL2,
+	MUTEX_MOD_IDX_MDP_AAL3,
+	MUTEX_MOD_IDX_MDP_RSZ2,
+	MUTEX_MOD_IDX_MDP_RSZ3,
+	MUTEX_MOD_IDX_MDP_MERGE2,
+	MUTEX_MOD_IDX_MDP_MERGE3,
+	MUTEX_MOD_IDX_MDP_TDSHP1,
+	MUTEX_MOD_IDX_MDP_TDSHP2,
+	MUTEX_MOD_IDX_MDP_TDSHP3,
+	MUTEX_MOD_IDX_MDP_COLOR1,
+	MUTEX_MOD_IDX_MDP_COLOR2,
+	MUTEX_MOD_IDX_MDP_COLOR3,
+	MUTEX_MOD_IDX_MDP_OVL0,
+	MUTEX_MOD_IDX_MDP_OVL1,
+	MUTEX_MOD_IDX_MDP_PAD0,
+	MUTEX_MOD_IDX_MDP_PAD1,
+	MUTEX_MOD_IDX_MDP_PAD2,
+	MUTEX_MOD_IDX_MDP_PAD3,
+	MUTEX_MOD_IDX_MDP_TCC0,
+	MUTEX_MOD_IDX_MDP_TCC1,
+	MUTEX_MOD_IDX_MDP_WROT1,
+	MUTEX_MOD_IDX_MDP_WROT2,
+	MUTEX_MOD_IDX_MDP_WROT3,
 
 	MUTEX_MOD_IDX_MAX		/* ALWAYS keep at the end */
 };
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 01:49:20 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 17:49:20 +0800
Subject: [PATCH v4 7/8] soc: mediatek: mutex: Add mtk_mutex_set_mod support to set MOD1
In-Reply-To: <20221207094921.15450-1-moudy.ho@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
Message-ID: <20221207094921.15450-8-moudy.ho@mediatek.com>

From: "Roy-CW.Yeh" <roy-cw.yeh at mediatek.com>

Add mtk_mutex_set_mod support to set MOD1

Signed-off-by: Roy-CW.Yeh <roy-cw.yeh at mediatek.com>
Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/soc/mediatek/mtk-mutex.c | 33 +++++++++++++++++++++++++-------
 1 file changed, 26 insertions(+), 7 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-mutex.c b/drivers/soc/mediatek/mtk-mutex.c
index c1a33d52038e..a2be15a5c93a 100644
--- a/drivers/soc/mediatek/mtk-mutex.c
+++ b/drivers/soc/mediatek/mtk-mutex.c
@@ -23,6 +23,7 @@
 #define DISP_REG_MUTEX(n)			(0x24 + 0x20 * (n))
 #define DISP_REG_MUTEX_RST(n)			(0x28 + 0x20 * (n))
 #define DISP_REG_MUTEX_MOD(mutex_mod_reg, n)	(mutex_mod_reg + 0x20 * (n))
+#define DISP_REG_MUTEX_MOD1(mutex_mod_reg, n)	((mutex_mod_reg) + 0x20 * (n) + 0x4)
 #define DISP_REG_MUTEX_SOF(mutex_sof_reg, n)	(mutex_sof_reg + 0x20 * (n))
 #define DISP_REG_MUTEX_MOD2(n)			(0x34 + 0x20 * (n))
 
@@ -740,7 +741,7 @@ int mtk_mutex_write_mod(struct mtk_mutex *mutex,
 	struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx,
 						 mutex[mutex->id]);
 	unsigned int reg;
-	unsigned int offset;
+	u32 reg_offset, id_offset = 0;
 
 	WARN_ON(&mtx->mutex[mutex->id] != mutex);
 
@@ -750,16 +751,34 @@ int mtk_mutex_write_mod(struct mtk_mutex *mutex,
 		return -EINVAL;
 	}
 
-	offset = DISP_REG_MUTEX_MOD(mtx->data->mutex_mod_reg,
-				    mutex->id);
-	reg = readl_relaxed(mtx->regs + offset);
+	/*
+	 * Some SoCs may have multiple MUTEX_MOD registers as more than 32 mods
+	 * are present, hence requiring multiple 32-bits registers.
+	 *
+	 * The mutex_table_mod fully represents that by defining the number of
+	 * the mod sequentially, later used as a bit number, which can be more
+	 * than 0..31.
+	 *
+	 * In order to retain compatibility with older SoCs, we perform R/W on
+	 * the single 32 bits registers, but this requires us to translate the
+	 * mutex ID bit accordingly.
+	 */
+	if (mtx->data->mutex_table_mod[idx] < 32) {
+		reg_offset = DISP_REG_MUTEX_MOD(mtx->data->mutex_mod_reg,
+						mutex->id);
+	} else {
+		reg_offset = DISP_REG_MUTEX_MOD1(mtx->data->mutex_mod_reg,
+						 mutex->id);
+		id_offset = 32;
+	}
 
+	reg = readl_relaxed(mtx->regs + reg_offset);
 	if (clear)
-		reg &= ~BIT(mtx->data->mutex_table_mod[idx]);
+		reg &= ~BIT(mtx->data->mutex_table_mod[idx] - id_offset);
 	else
-		reg |= BIT(mtx->data->mutex_table_mod[idx]);
+		reg |= BIT(mtx->data->mutex_table_mod[idx] - id_offset);
 
-	writel_relaxed(reg, mtx->regs + offset);
+	writel_relaxed(reg, mtx->regs + reg_offset);
 
 	return 0;
 }
-- 
2.18.0



From moudy.ho at mediatek.com  Wed Dec  7 01:49:19 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 17:49:19 +0800
Subject: [PATCH v4 6/8] soc: mediatek: mmsys: add config api for RSZ switching and DCM
In-Reply-To: <20221207094921.15450-1-moudy.ho@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
Message-ID: <20221207094921.15450-7-moudy.ho@mediatek.com>

From: "Roy-CW.Yeh" <roy-cw.yeh at mediatek.com>

Due to MT8195 HW design, some RSZs have additional settings that
need to be configured in MMSYS.

Signed-off-by: Roy-CW.Yeh <roy-cw.yeh at mediatek.com>
Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/soc/mediatek/mt8195-mmsys.h    | 13 ++++++++
 drivers/soc/mediatek/mtk-mmsys.c       | 42 ++++++++++++++++++++++++++
 include/linux/soc/mediatek/mtk-mmsys.h |  4 +++
 3 files changed, 59 insertions(+)

diff --git a/drivers/soc/mediatek/mt8195-mmsys.h b/drivers/soc/mediatek/mt8195-mmsys.h
index abfe94a30248..a1b8e3fd037e 100644
--- a/drivers/soc/mediatek/mt8195-mmsys.h
+++ b/drivers/soc/mediatek/mt8195-mmsys.h
@@ -75,6 +75,19 @@
 #define MT8195_SOUT_DSC_WRAP1_OUT_TO_SINA_VIRTUAL0		(2 << 16)
 #define MT8195_SOUT_DSC_WRAP1_OUT_TO_VPP_MERGE			(3 << 16)
 
+/* VPPSYS1 */
+#define MT8195_VPP1_HW_DCM_1ST_DIS0				0x150
+#define MT8195_VPP1_HW_DCM_1ST_DIS1				0x160
+#define MT8195_VPP1_HW_DCM_2ND_DIS0				0x1a0
+#define MT8195_VPP1_HW_DCM_2ND_DIS1				0x1b0
+#define MT8195_SVPP2_BUF_BF_RSZ_SWITCH				0xf48
+#define MT8195_SVPP3_BUF_BF_RSZ_SWITCH				0xf74
+
+/* VPPSYS1 HW DCM client*/
+#define MT8195_SVPP1_MDP_RSZ					BIT(25)
+#define MT8195_SVPP2_MDP_RSZ					BIT(4)
+#define MT8195_SVPP3_MDP_RSZ					BIT(5)
+
 static const struct mtk_mmsys_routes mmsys_mt8195_routing_table[] = {
 	{
 		DDP_COMPONENT_OVL0, DDP_COMPONENT_RDMA0,
diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index 5a3189544c5a..d98e16408680 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -175,6 +175,48 @@ void mtk_mmsys_ddp_dpi_fmt_config(struct device *dev, u32 val)
 }
 EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_dpi_fmt_config);
 
+void mtk_mmsys_vpp_rsz_merge_config(struct device *dev, u32 id, bool enable)
+{
+	u32 reg;
+
+	switch (id) {
+	case 2:
+		reg = MT8195_SVPP2_BUF_BF_RSZ_SWITCH;
+		break;
+	case 3:
+		reg = MT8195_SVPP3_BUF_BF_RSZ_SWITCH;
+		break;
+	default:
+		dev_err(dev, "Invalid id %d\n", id);
+		return;
+	}
+
+	mtk_mmsys_update_bits(dev_get_drvdata(dev), reg, ~0, enable);
+}
+EXPORT_SYMBOL_GPL(mtk_mmsys_vpp_rsz_merge_config);
+
+void mtk_mmsys_vpp_rsz_dcm_config(struct device *dev, bool enable)
+{
+	u32 client;
+
+	client = MT8195_SVPP1_MDP_RSZ;
+	mtk_mmsys_update_bits(dev_get_drvdata(dev),
+			      MT8195_VPP1_HW_DCM_1ST_DIS0, client,
+			      ((enable) ? client : 0));
+	mtk_mmsys_update_bits(dev_get_drvdata(dev),
+			      MT8195_VPP1_HW_DCM_2ND_DIS0, client,
+			      ((enable) ? client : 0));
+
+	client = MT8195_SVPP2_MDP_RSZ | MT8195_SVPP3_MDP_RSZ;
+	mtk_mmsys_update_bits(dev_get_drvdata(dev),
+			      MT8195_VPP1_HW_DCM_1ST_DIS1, client,
+			      ((enable) ? client : 0));
+	mtk_mmsys_update_bits(dev_get_drvdata(dev),
+			      MT8195_VPP1_HW_DCM_2ND_DIS1, client,
+			      ((enable) ? client : 0));
+}
+EXPORT_SYMBOL_GPL(mtk_mmsys_vpp_rsz_dcm_config);
+
 static int mtk_mmsys_reset_update(struct reset_controller_dev *rcdev, unsigned long id,
 				  bool assert)
 {
diff --git a/include/linux/soc/mediatek/mtk-mmsys.h b/include/linux/soc/mediatek/mtk-mmsys.h
index b85f66db33e1..5ed593cccfe6 100644
--- a/include/linux/soc/mediatek/mtk-mmsys.h
+++ b/include/linux/soc/mediatek/mtk-mmsys.h
@@ -74,4 +74,8 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
 
 void mtk_mmsys_ddp_dpi_fmt_config(struct device *dev, u32 val);
 
+void mtk_mmsys_vpp_rsz_merge_config(struct device *dev, u32 id, bool enable);
+
+void mtk_mmsys_vpp_rsz_dcm_config(struct device *dev, bool enable);
+
 #endif /* __MTK_MMSYS_H */
-- 
2.18.0



From angelogioacchino.delregno at collabora.com  Wed Dec  7 02:08:38 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 7 Dec 2022 11:08:38 +0100
Subject: [PATCH v2 3/9] spi: mtk-snfi: Add optional nfi_hclk which needed
 for MT7986
In-Reply-To: <4db35ac3914e444b754f9075141fd69e07e7c858.camel@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-4-xiangsheng.hou@mediatek.com>
 <ef2e6859-56e1-bbf0-dbde-44ea3d7d2f3f@collabora.com>
 <4db35ac3914e444b754f9075141fd69e07e7c858.camel@mediatek.com>
Message-ID: <ff2931b5-948f-f013-056d-b0a78d7272d6@collabora.com>

Il 07/12/22 02:42, Xiangsheng Hou (???) ha scritto:
> Hi Angelo,
> 
> On Mon, 2022-12-05 at 15:21 +0100, AngeloGioacchino Del Regno wrote:
>> Il 05/12/22 07:57, Xiangsheng Hou ha scritto:
>>> Add optional nfi_hclk which needed for MT7986.
>>>
>>> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
>>
>> Is there any operation for which you need NFI_HCLK enabled, but at
>> the same time
>> PAD_CLK and/or NFI_CLK can be disabled?
> 
> No, for the new IP design on MT7986, will need the
> PAD_CLK/NFI_CLK/NFI_HCLK enabled at the same time.
> 
>> If NFI_HCLK and NFI_CLK must always be ON at the same time, adding
>> this clock to
>> spi-mtk-snfi.c is *not* an optimal way of doing things: you can, at
>> this point,
>> set NFI_HCLK as parent of NFI_CLK in the MT7986 clock driver instead,
>> without
>> making any addition to this driver at all.
> 
> For some IC, there may have only NFI_CLK/PAD_CLK, and have no NFI_HCLK,
> this rely on IC design.
> 

I've just checked clk-mt7986-infracfg and we can't reparent NFI1_CK, nor SPINFI1_CK
as they have xxxx_sel parents already, which are not common with the HCK.

You're right, the addition of the nfi_hclk clock is needed, which means that for
this commit, you get my


Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>


P.S.: Thanks for clarifying!

Regards,
Angelo


From angelogioacchino.delregno at collabora.com  Wed Dec  7 02:15:41 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 7 Dec 2022 11:15:41 +0100
Subject: [PATCH v4 3/8] arm64: dts: mediatek: mt8195: add MMSYS
 configuration for VPPSYS
In-Reply-To: <20221207094921.15450-4-moudy.ho@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
 <20221207094921.15450-4-moudy.ho@mediatek.com>
Message-ID: <fa7d4a05-d224-47e6-cd4d-fdb246d70e27@collabora.com>

Il 07/12/22 10:49, Moudy Ho ha scritto:
> From: "Roy-CW.Yeh" <roy-cw.yeh at mediatek.com>
> 
> With the change of the MMSYS binding file for MT8195, the compatible
> name of VPPSYS in dts need to be fixed to match the definition.
> 
> Signed-off-by: Roy-CW.Yeh <roy-cw.yeh at mediatek.com>
> Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Wed Dec  7 02:15:42 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 7 Dec 2022 11:15:42 +0100
Subject: [PATCH v4 1/8] dt-bindings: arm: mediatek: mmsys: Add support for
 MT8195 VPPSYS
In-Reply-To: <20221207094921.15450-2-moudy.ho@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
 <20221207094921.15450-2-moudy.ho@mediatek.com>
Message-ID: <5c1dbeb0-c19f-cf47-a272-3346913a30c8@collabora.com>

Il 07/12/22 10:49, Moudy Ho ha scritto:
> For MT8195, VPPSYS0 and VPPSYS1 are 2 display pipes with
> hardware differences in power domains, clocks and subsystem counts,
> which should be determined by compatible names.
> 
> Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From moudy.ho at mediatek.com  Wed Dec  7 01:49:17 2022
From: moudy.ho at mediatek.com (Moudy Ho)
Date: Wed, 7 Dec 2022 17:49:17 +0800
Subject: [PATCH v4 4/8] arm64: dts: mediatek: mt8195: add MUTEX configuration for VPPSYS
In-Reply-To: <20221207094921.15450-1-moudy.ho@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
Message-ID: <20221207094921.15450-5-moudy.ho@mediatek.com>

In MT8195, the MMSYS has two Video Processor Pipepline Subsystems
named VPPSYS0 and VPPSYS1, each with specific MUTEX to control
Start of Frame(SOF) and End of Frame (EOF) signals.
Before working with them, the addresses, interrupts, clocks and power
domains need to be set up in dts.

Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 arch/arm64/boot/dts/mediatek/mt8195.dtsi | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index bd33b414c484..0ece3b46b66a 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -1639,6 +1639,15 @@
 			#clock-cells = <1>;
 		};
 
+		mutex at 1400f000 {
+			compatible = "mediatek,mt8195-vpp-mutex";
+			reg = <0 0x1400f000 0 0x1000>;
+			interrupts = <GIC_SPI 592 IRQ_TYPE_LEVEL_HIGH 0>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0xf000 0x1000>;
+			clocks = <&vppsys0 CLK_VPP0_MUTEX>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
+		};
+
 		smi_sub_common_vpp0_vpp1_2x1: smi at 14010000 {
 			compatible = "mediatek,mt8195-smi-sub-common";
 			reg = <0 0x14010000 0 0x1000>;
@@ -1745,6 +1754,15 @@
 			#clock-cells = <1>;
 		};
 
+		mutex at 14f01000 {
+			compatible = "mediatek,mt8195-vpp-mutex";
+			reg = <0 0x14f01000 0 0x1000>;
+			interrupts = <GIC_SPI 635 IRQ_TYPE_LEVEL_HIGH 0>;
+			mediatek,gce-client-reg = <&gce1 SUBSYS_14f0XXXX 0x1000 0x1000>;
+			clocks = <&vppsys1 CLK_VPP1_DISP_MUTEX>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS1>;
+		};
+
 		larb5: larb at 14f02000 {
 			compatible = "mediatek,mt8195-smi-larb";
 			reg = <0 0x14f02000 0 0x1000>;
-- 
2.18.0



From patchwork-bot+netdevbpf at kernel.org  Wed Dec  7 03:00:16 2022
From: patchwork-bot+netdevbpf at kernel.org (patchwork-bot+netdevbpf at kernel.org)
Date: Wed, 07 Dec 2022 11:00:16 +0000
Subject: [PATCH net-next v2] net: ethernet: mtk_wed: Fix missing of_node_put()
 in mtk_wed_wo_hardware_init()
In-Reply-To: <20221205034339.112163-1-yuancan@huawei.com>
References: <20221205034339.112163-1-yuancan@huawei.com>
Message-ID: <167041081608.7212.15407463858879760365.git-patchwork-notify@kernel.org>

Hello:

This patch was applied to netdev/net-next.git (master)
by Paolo Abeni <pabeni at redhat.com>:

On Mon, 5 Dec 2022 03:43:39 +0000 you wrote:
> The np needs to be released through of_node_put() in the error handling
> path of mtk_wed_wo_hardware_init().
> 
> Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
> Signed-off-by: Yuan Can <yuancan at huawei.com>
> ---
> Changes in v2:
> - Replace IS_ERR_OR_NULL() with IS_ERR() to check wo->mmio.regs.
> - Add net-next tag.
> 
> [...]

Here is the summary with links:
  - [net-next,v2] net: ethernet: mtk_wed: Fix missing of_node_put() in mtk_wed_wo_hardware_init()
    https://git.kernel.org/netdev/net-next/c/e22dcbc9aa32

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html




From brgl at bgdev.pl  Wed Dec  7 04:37:39 2022
From: brgl at bgdev.pl (Bartosz Golaszewski)
Date: Wed, 7 Dec 2022 13:37:39 +0100
Subject: [PATCH] dt-bindings: Add missing 'unevaluatedProperties' to
 regulator nodes
In-Reply-To: <20221206211554.92005-1-robh@kernel.org>
References: <20221206211554.92005-1-robh@kernel.org>
Message-ID: <CAMRc=Mf0HdoH4Ca0o85j-4-beGGPFr+_bF2OGUP=Fc=tmNd5Og@mail.gmail.com>

On Tue, Dec 6, 2022 at 10:18 PM Rob Herring <robh at kernel.org> wrote:
>
> Several regulator schemas are missing 'unevaluatedProperties' constraint
> which means any extra properties are allowed. Upon adding the
> constraint, there's numerous warnings from using the deprecated
> 'regulator-compatible' property. Remove the usage as examples shouldn't
> be using long since deprecated properties.
>
> Signed-off-by: Rob Herring <robh at kernel.org>
> ---
> I'd suggest that Mark take this if that's okay with Lee. Or I can take
> it.
>
>  Documentation/devicetree/bindings/mfd/max77650.yaml  |  2 --
>  .../devicetree/bindings/mfd/mediatek,mt6360.yaml     |  9 ---------
>  .../bindings/power/supply/mt6360_charger.yaml        |  2 +-
>  .../bindings/regulator/max77650-regulator.yaml       |  1 +
>  .../devicetree/bindings/regulator/max8660.yaml       |  6 +-----
>  .../bindings/regulator/mt6360-regulator.yaml         | 12 +++---------
>  6 files changed, 6 insertions(+), 26 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/mfd/max77650.yaml b/Documentation/devicetree/bindings/mfd/max77650.yaml
> index b0a0f0d3d9d4..4181174fcf58 100644
> --- a/Documentation/devicetree/bindings/mfd/max77650.yaml
> +++ b/Documentation/devicetree/bindings/mfd/max77650.yaml
> @@ -100,14 +100,12 @@ examples:
>                  compatible = "maxim,max77650-regulator";
>
>                  max77650_ldo: regulator-ldo {
> -                    regulator-compatible = "ldo";
>                      regulator-name = "max77650-ldo";
>                      regulator-min-microvolt = <1350000>;
>                      regulator-max-microvolt = <2937500>;
>                  };
>
>                  max77650_sbb0: regulator-sbb0 {
> -                    regulator-compatible = "sbb0";
>                      regulator-name = "max77650-sbb0";
>                      regulator-min-microvolt = <800000>;
>                      regulator-max-microvolt = <1587500>;

Acked-by: Bartosz Golaszewski <bartosz.golaszewski at linaro.org>


From ulf.hansson at linaro.org  Wed Dec  7 04:37:40 2022
From: ulf.hansson at linaro.org (Ulf Hansson)
Date: Wed, 7 Dec 2022 13:37:40 +0100
Subject: [PATCH] mmc: vub300: fix warning - do not call blocking ops when !TASK_RUNNING
In-Reply-To: <87dc45b122d26d63c80532976813c9365d7160b3.1670140888.git.deren.wu@mediatek.com>
References: <87dc45b122d26d63c80532976813c9365d7160b3.1670140888.git.deren.wu@mediatek.com>
Message-ID: <CAPDyKFo-cU1RD1kBR+EsuAdFyJ8HmhdqZukMWJVjrHF_91qZwA@mail.gmail.com>

On Sun, 4 Dec 2022 at 09:27, Deren Wu <deren.wu at mediatek.com> wrote:
>
> vub300_enable_sdio_irq() works with mutex and need TASK_RUNNING here.
> Ensure that we mark current as TASK_RUNNING for sleepable context.
>
> [   77.554641] do not call blocking ops when !TASK_RUNNING; state=1 set at [<ffffffff92a72c1d>] sdio_irq_thread+0x17d/0x5b0
> [   77.554652] WARNING: CPU: 2 PID: 1983 at kernel/sched/core.c:9813 __might_sleep+0x116/0x160
> [   77.554905] CPU: 2 PID: 1983 Comm: ksdioirqd/mmc1 Tainted: G           OE      6.1.0-rc5 #1
> [   77.554910] Hardware name: Intel(R) Client Systems NUC8i7BEH/NUC8BEB, BIOS BECFL357.86A.0081.2020.0504.1834 05/04/2020
> [   77.554912] RIP: 0010:__might_sleep+0x116/0x160
> [   77.554920] RSP: 0018:ffff888107b7fdb8 EFLAGS: 00010282
> [   77.554923] RAX: 0000000000000000 RBX: ffff888118c1b740 RCX: 0000000000000000
> [   77.554926] RDX: 0000000000000001 RSI: 0000000000000004 RDI: ffffed1020f6ffa9
> [   77.554928] RBP: ffff888107b7fde0 R08: 0000000000000001 R09: ffffed1043ea60ba
> [   77.554930] R10: ffff88821f5305cb R11: ffffed1043ea60b9 R12: ffffffff93aa3a60
> [   77.554932] R13: 000000000000011b R14: 7fffffffffffffff R15: ffffffffc0558660
> [   77.554934] FS:  0000000000000000(0000) GS:ffff88821f500000(0000) knlGS:0000000000000000
> [   77.554937] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [   77.554939] CR2: 00007f8a44010d68 CR3: 000000024421a003 CR4: 00000000003706e0
> [   77.554942] Call Trace:
> [   77.554944]  <TASK>
> [   77.554952]  mutex_lock+0x78/0xf0
> [   77.554973]  vub300_enable_sdio_irq+0x103/0x3c0 [vub300]
> [   77.554981]  sdio_irq_thread+0x25c/0x5b0
> [   77.555006]  kthread+0x2b8/0x370
> [   77.555017]  ret_from_fork+0x1f/0x30
> [   77.555023]  </TASK>
> [   77.555025] ---[ end trace 0000000000000000 ]---
>
> Fixes: 88095e7b473a ("mmc: Add new VUB300 USB-to-SD/SDIO/MMC driver")
> Signed-off-by: Deren Wu <deren.wu at mediatek.com>

Ideally this driver should be converted to use the sdio_signal_irq()
interface and thus move away from the legacy mmc_signal_sdio_irq()
interface. However, as a fix for stable kernels, this looks good to
me!

So, applied for next and by adding a stable tag, thanks!

Kind regards
Uffe


> ---
>  drivers/mmc/host/vub300.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/drivers/mmc/host/vub300.c b/drivers/mmc/host/vub300.c
> index 97beece62fec..b58a1a869ed8 100644
> --- a/drivers/mmc/host/vub300.c
> +++ b/drivers/mmc/host/vub300.c
> @@ -2049,6 +2049,7 @@ static void vub300_enable_sdio_irq(struct mmc_host *mmc, int enable)
>                 return;
>         kref_get(&vub300->kref);
>         if (enable) {
> +               set_current_state(TASK_RUNNING);
>                 mutex_lock(&vub300->irq_mutex);
>                 if (vub300->irqs_queued) {
>                         vub300->irqs_queued -= 1;
> @@ -2064,6 +2065,7 @@ static void vub300_enable_sdio_irq(struct mmc_host *mmc, int enable)
>                         vub300_queue_poll_work(vub300, 0);
>                 }
>                 mutex_unlock(&vub300->irq_mutex);
> +               set_current_state(TASK_INTERRUPTIBLE);
>         } else {
>                 vub300->irq_enabled = 0;
>         }
> --
> 2.18.0
>


From angelogioacchino.delregno at collabora.com  Wed Dec  7 05:14:34 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 7 Dec 2022 14:14:34 +0100
Subject: [PATCH v6 1/3] media: dt-bindings: media: mediatek: Rename child
 node names for decoder
In-Reply-To: <20221207055107.11333-2-allen-kh.cheng@mediatek.com>
References: <20221207055107.11333-1-allen-kh.cheng@mediatek.com>
 <20221207055107.11333-2-allen-kh.cheng@mediatek.com>
Message-ID: <1829bd00-4d6c-d49e-9251-e5f42bc40525@collabora.com>

Il 07/12/22 06:51, Allen-KH Cheng ha scritto:
> In order to make the names of the child nodes more generic, we rename
> "vcodec-lat" and "vcodec-core" to "video-codec" for decoder in
> patternProperties and example.
> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Wed Dec  7 05:17:23 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 7 Dec 2022 14:17:23 +0100
Subject: [PATCH] wifi: mt76: fix coverity uninit_use_in_call in
 mt76_connac2_reverse_frag0_hdr_trans()
In-Reply-To: <200ea97407b6f121da7ccd4567fde4b0426c5d9c.1670404791.git.deren.wu@mediatek.com>
References: <200ea97407b6f121da7ccd4567fde4b0426c5d9c.1670404791.git.deren.wu@mediatek.com>
Message-ID: <65220c33-dc2d-9f3d-578b-dc973b9c043a@collabora.com>

Il 07/12/22 10:22, Deren Wu ha scritto:
> The default case for frame_contorl is invalid. We should always
> assign addr3 of this frame properly.
> 
> Coverity error message:
> if (ieee80211_has_a4(hdr.frame_control))
> (19) Event uninit_use_in_call:	Using uninitialized value "hdr".
> Field "hdr.addr3" is uninitialized when calling "memcpy".
> 	memcpy(skb_push(skb, sizeof(hdr)), &hdr, sizeof(hdr));
> else
> 	memcpy(skb_push(skb, sizeof(hdr) - 6), &hdr, sizeof(hdr) - 6);
> 
> Signed-off-by: Deren Wu <deren.wu at mediatek.com>

Please add the appropriate Fixes tag to this commit.

Thanks,
Angelo



From angelogioacchino.delregno at collabora.com  Wed Dec  7 05:21:56 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 7 Dec 2022 14:21:56 +0100
Subject: [PATCH v2] spi: spi-mtk-nor: Add recovery mechanism for dma read
 timeout
In-Reply-To: <20221207055435.30557-1-bayi.cheng@mediatek.com>
References: <20221207055435.30557-1-bayi.cheng@mediatek.com>
Message-ID: <8bec1bdb-2e22-d2bd-18bf-505f6dc75024@collabora.com>

Il 07/12/22 06:54, Bayi Cheng ha scritto:
> From: bayi cheng <bayi.cheng at mediatek.com>
> 
> The state machine of MTK spi nor controller may be disturbed by some
> glitch signals from the relevant BUS during dma read, Although the
> possibility of causing the dma read to fail is next to nothing,
> However, if error-handling is not implemented, which makes the feature
> somewhat risky.
> 
> Add an error-handling mechanism here, reset the state machine and
> re-read the data when an error occurs.
> 
> Signed-off-by: bayi cheng <bayi.cheng at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>





From lorenzo at kernel.org  Wed Dec  7 06:04:53 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Wed,  7 Dec 2022 15:04:53 +0100
Subject: [PATCH v3 net-next 0/2] fix possible deadlock during WED attach
Message-ID: <cover.1670421354.git.lorenzo@kernel.org>

Fix a possible deadlock in mtk_wed_attach if mtk_wed_wo_init routine fails.
Check wo pointer is properly allocated before running mtk_wed_wo_reset() and
mtk_wed_wo_deinit().

Changes sice v2:
- add WARN_ON in mtk_wed_mcu_msg_update()
- split in two patches
Changes since v1:
- move wo pointer checks in __mtk_wed_detach()

Lorenzo Bianconi (2):
  net: ethernet: mtk_wed: fix some possible NULL pointer dereferences
  net: ethernet: mtk_wed: fix possible deadlock if mtk_wed_wo_init fails

 drivers/net/ethernet/mediatek/mtk_wed.c     | 30 ++++++++++++++-------
 drivers/net/ethernet/mediatek/mtk_wed_mcu.c |  3 +++
 2 files changed, 23 insertions(+), 10 deletions(-)

-- 
2.38.1



From lorenzo at kernel.org  Wed Dec  7 06:04:54 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Wed,  7 Dec 2022 15:04:54 +0100
Subject: [PATCH v3 net-next 1/2] net: ethernet: mtk_wed: fix some possible NULL pointer dereferences
In-Reply-To: <cover.1670421354.git.lorenzo@kernel.org>
References: <cover.1670421354.git.lorenzo@kernel.org>
Message-ID: <44cba2491b6dd1a64d0e8099efbab836e6758490.1670421354.git.lorenzo@kernel.org>

Fix possible NULL pointer dereference in mtk_wed_detach routine checking
wo pointer is properly allocated before running mtk_wed_wo_reset() and
mtk_wed_wo_deinit().
Even if it is just a theoretical issue at the moment check wo pointer is
not NULL in mtk_wed_mcu_msg_update.
Moreover, honor mtk_wed_mcu_send_msg return value in mtk_wed_wo_reset()

Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
---
 drivers/net/ethernet/mediatek/mtk_wed.c     | 13 ++++++++-----
 drivers/net/ethernet/mediatek/mtk_wed_mcu.c |  3 +++
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
index 06b6cc53fa02..4ef23eadd69e 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
@@ -174,9 +174,10 @@ mtk_wed_wo_reset(struct mtk_wed_device *dev)
 	mtk_wdma_tx_reset(dev);
 	mtk_wed_reset(dev, MTK_WED_RESET_WED);
 
-	mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
-			     MTK_WED_WO_CMD_CHANGE_STATE, &state,
-			     sizeof(state), false);
+	if (mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
+				 MTK_WED_WO_CMD_CHANGE_STATE, &state,
+				 sizeof(state), false))
+		return;
 
 	if (readx_poll_timeout(mtk_wed_wo_read_status, dev, val,
 			       val == MTK_WED_WOIF_DISABLE_DONE,
@@ -590,9 +591,11 @@ mtk_wed_detach(struct mtk_wed_device *dev)
 	mtk_wed_free_tx_rings(dev);
 
 	if (mtk_wed_get_rx_capa(dev)) {
-		mtk_wed_wo_reset(dev);
+		if (hw->wed_wo)
+			mtk_wed_wo_reset(dev);
 		mtk_wed_free_rx_rings(dev);
-		mtk_wed_wo_deinit(hw);
+		if (hw->wed_wo)
+			mtk_wed_wo_deinit(hw);
 	}
 
 	if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) {
diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
index f9539e6233c9..6bad0d262f28 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
@@ -207,6 +207,9 @@ int mtk_wed_mcu_msg_update(struct mtk_wed_device *dev, int id, void *data,
 	if (dev->hw->version == 1)
 		return 0;
 
+	if (WARN_ON(!wo))
+		return -ENODEV;
+
 	return mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO, id, data, len,
 				    true);
 }
-- 
2.38.1



From lorenzo at kernel.org  Wed Dec  7 06:04:55 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Wed,  7 Dec 2022 15:04:55 +0100
Subject: [PATCH v3 net-next 2/2] net: ethernet: mtk_wed: fix possible deadlock if mtk_wed_wo_init fails
In-Reply-To: <cover.1670421354.git.lorenzo@kernel.org>
References: <cover.1670421354.git.lorenzo@kernel.org>
Message-ID: <b28b55a639002a56b77c0651a4122ebede041936.1670421354.git.lorenzo@kernel.org>

Introduce __mtk_wed_detach() in order to avoid a deadlock in
mtk_wed_attach routine if mtk_wed_wo_init fails since both
mtk_wed_attach and mtk_wed_detach run holding hw_lock mutex.

Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
---
 drivers/net/ethernet/mediatek/mtk_wed.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
index 4ef23eadd69e..a6271449617f 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
@@ -577,12 +577,10 @@ mtk_wed_deinit(struct mtk_wed_device *dev)
 }
 
 static void
-mtk_wed_detach(struct mtk_wed_device *dev)
+__mtk_wed_detach(struct mtk_wed_device *dev)
 {
 	struct mtk_wed_hw *hw = dev->hw;
 
-	mutex_lock(&hw_lock);
-
 	mtk_wed_deinit(dev);
 
 	mtk_wdma_rx_reset(dev);
@@ -615,6 +613,13 @@ mtk_wed_detach(struct mtk_wed_device *dev)
 	module_put(THIS_MODULE);
 
 	hw->wed_dev = NULL;
+}
+
+static void
+mtk_wed_detach(struct mtk_wed_device *dev)
+{
+	mutex_lock(&hw_lock);
+	__mtk_wed_detach(dev);
 	mutex_unlock(&hw_lock);
 }
 
@@ -1497,8 +1502,10 @@ mtk_wed_attach(struct mtk_wed_device *dev)
 		ret = mtk_wed_wo_init(hw);
 	}
 out:
-	if (ret)
-		mtk_wed_detach(dev);
+	if (ret) {
+		dev_err(dev->hw->dev, "failed to attach wed device\n");
+		__mtk_wed_detach(dev);
+	}
 unlock:
 	mutex_unlock(&hw_lock);
 
-- 
2.38.1



From Deren.Wu at mediatek.com  Wed Dec  7 07:31:32 2022
From: Deren.Wu at mediatek.com (=?utf-8?B?RGVyZW4gV3UgKOatpuW+t+S7gSk=?=)
Date: Wed, 7 Dec 2022 15:31:32 +0000
Subject: [PATCH] wifi: mt76: fix coverity uninit_use_in_call in
 mt76_connac2_reverse_frag0_hdr_trans()
In-Reply-To: <65220c33-dc2d-9f3d-578b-dc973b9c043a@collabora.com>
References: <200ea97407b6f121da7ccd4567fde4b0426c5d9c.1670404791.git.deren.wu@mediatek.com>
	 <65220c33-dc2d-9f3d-578b-dc973b9c043a@collabora.com>
Message-ID: <b88d62e351689bb3b9223f214dc7ce4eaf4c8cfe.camel@mediatek.com>

On Wed, 2022-12-07 at 14:17 +0100, AngeloGioacchino Del Regno wrote:
> Il 07/12/22 10:22, Deren Wu ha scritto:
> > The default case for frame_contorl is invalid. We should always
> > assign addr3 of this frame properly.
> > 
> > Coverity error message:
> > if (ieee80211_has_a4(hdr.frame_control))
> > (19) Event uninit_use_in_call:	Using uninitialized value
> > "hdr".
> > Field "hdr.addr3" is uninitialized when calling "memcpy".
> > 	memcpy(skb_push(skb, sizeof(hdr)), &hdr, sizeof(hdr));
> > else
> > 	memcpy(skb_push(skb, sizeof(hdr) - 6), &hdr, sizeof(hdr) - 6);
> > 
> > Signed-off-by: Deren Wu <deren.wu at mediatek.com>
> 
> Please add the appropriate Fixes tag to this commit.
> 
> Thanks,
> Angelo
> 
Thanks, Angelo. I will post a new version with Fixes tag.





From vincent at systemli.org  Wed Dec  7 07:34:33 2022
From: vincent at systemli.org (Nick)
Date: Wed, 7 Dec 2022 16:34:33 +0100
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <20221202110139.vmwcmoudakm2nap4@vireshk-i7>
References: <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
 <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
 <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>
 <b1822bbc3775730c4cedf9652323c7d72e663e4b.camel@mediatek.com>
 <8be3e050-f32a-6761-8ebd-49c38dfcf9eb@collabora.com>
 <c186d104-43e0-ca10-3ce2-c2f922acd8bf@leemhuis.info>
 <37468027-6a27-dcb8-9c14-8f8426ec50d1@collabora.com>
 <20221202110139.vmwcmoudakm2nap4@vireshk-i7>
Message-ID: <f70d7c09-df0d-4fa9-92c9-63f31cf56483@systemli.org>

Did something changed on master? I compiled now the image I use on the 
BPI-R64 a bit differently.
I used the openwrt toolchain "aarch64-openwrt-linux-musl-" to 
cross-compile the original linux repository on current master. Than I 
compiled with OpenWrt-Buildsystem a initramfs, put that together with 
mkimage to a "itb" and booted it. Suddenly it works:
https://gist.githubusercontent.com/PolynomialDivision/5e49529206ba5d273bf6a416c42c6234/raw/7ecff7be397a6e9a41ef120c3fa61060c488cf5b/mt7622-bpi-vanilla

Bests
Nick

On 12/2/22 12:01, Viresh Kumar wrote:
> On 02-12-22, 12:00, AngeloGioacchino Del Regno wrote:
>> If Viresh can add those while applying the patch, that's fine for me - otherwise
>> I can send a v2 adding the two suggested missing tags.
> Sure, no problem.
>


From error27 at gmail.com  Wed Dec  7 07:56:09 2022
From: error27 at gmail.com (Dan Carpenter)
Date: Wed, 7 Dec 2022 18:56:09 +0300
Subject: [PATCH] iommu/mediatek: Fix forever loop in error handling
Message-ID: <Y5C3mTam2nkbaz6o@kili>

There is a typo so this loop does i++ where i-- was intended.  It will
result in looping until the kernel crashes.

Fixes: 26593928564c ("iommu/mediatek: Add error path for loop of mm_dts_parse")
Signed-off-by: Dan Carpenter <error27 at gmail.com>
---
 drivers/iommu/mtk_iommu.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index 3e46bc8b0714..2badd6acfb23 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -1160,8 +1160,7 @@ static int mtk_iommu_mm_dts_parse(struct device *dev, struct component_match **m
 	return 0;
 
 err_larbdev_put:
-	/* id may be not linear mapping, loop whole the array */
-	for (i = MTK_LARB_NR_MAX - 1; i >= 0; i++) {
+	for (i = MTK_LARB_NR_MAX - 1; i >= 0; i--) {
 		if (!data->larb_imu[i].dev)
 			continue;
 		put_device(data->larb_imu[i].dev);
-- 
2.35.1



From deren.wu at mediatek.com  Wed Dec  7 08:03:10 2022
From: deren.wu at mediatek.com (Deren Wu)
Date: Thu, 8 Dec 2022 00:03:10 +0800
Subject: [PATCH v2] wifi: mt76: fix coverity uninit_use_in_call in mt76_connac2_reverse_frag0_hdr_trans()
Message-ID: <bde6335dde0a79d2c2b43323167fd5c2beb45645.1670427543.git.deren.wu@mediatek.com>

The default case for frame_contorl is invalid. We should always
assign addr3 of this frame properly.

Coverity error message:
if (ieee80211_has_a4(hdr.frame_control))
(19) Event uninit_use_in_call:	Using uninitialized value "hdr".
Field "hdr.addr3" is uninitialized when calling "memcpy".
	memcpy(skb_push(skb, sizeof(hdr)), &hdr, sizeof(hdr));
else
	memcpy(skb_push(skb, sizeof(hdr) - 6), &hdr, sizeof(hdr) - 6);

Fixes: 0880d40871d1 ("mt76: connac: move mt76_connac2_reverse_frag0_hdr_trans in mt76-connac module")
Signed-off-by: Deren Wu <deren.wu at mediatek.com>
---
v2 : add Fixes tag
---
 drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
index fd60123fb284..c8d0c84e688b 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
@@ -930,7 +930,7 @@ int mt76_connac2_reverse_frag0_hdr_trans(struct ieee80211_vif *vif,
 		ether_addr_copy(hdr.addr4, eth_hdr->h_source);
 		break;
 	default:
-		break;
+		return -EINVAL;
 	}
 
 	skb_pull(skb, hdr_offset + sizeof(struct ethhdr) - 2);
-- 
2.18.0



From broonie at kernel.org  Wed Dec  7 08:21:06 2022
From: broonie at kernel.org (Mark Brown)
Date: Wed, 07 Dec 2022 16:21:06 +0000
Subject: [PATCH v2] spi: spi-mtk-nor: Add recovery mechanism for dma read timeout
In-Reply-To: <20221207055435.30557-1-bayi.cheng@mediatek.com>
References: <20221207055435.30557-1-bayi.cheng@mediatek.com>
Message-ID: <167043006609.286366.2467608192853584896.b4-ty@kernel.org>

On Wed, 07 Dec 2022 13:54:35 +0800, Bayi Cheng wrote:
> The state machine of MTK spi nor controller may be disturbed by some
> glitch signals from the relevant BUS during dma read, Although the
> possibility of causing the dma read to fail is next to nothing,
> However, if error-handling is not implemented, which makes the feature
> somewhat risky.
> 
> Add an error-handling mechanism here, reset the state machine and
> re-read the data when an error occurs.
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next

Thanks!

[1/1] spi: spi-mtk-nor: Add recovery mechanism for dma read timeout
      commit: 8330e9e8269bb76dd502e84efb5f351016512cf8

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


From sebastian.reichel at collabora.com  Wed Dec  7 08:59:32 2022
From: sebastian.reichel at collabora.com (Sebastian Reichel)
Date: Wed, 7 Dec 2022 17:59:32 +0100
Subject: [PATCH] dt-bindings: Add missing 'unevaluatedProperties' to
 regulator nodes
In-Reply-To: <20221206211554.92005-1-robh@kernel.org>
References: <20221206211554.92005-1-robh@kernel.org>
Message-ID: <20221207165932.hmgj4giz5ivei46i@mercury.elektranox.org>

Hi,

On Tue, Dec 06, 2022 at 03:15:55PM -0600, Rob Herring wrote:
> Several regulator schemas are missing 'unevaluatedProperties' constraint
> which means any extra properties are allowed. Upon adding the
> constraint, there's numerous warnings from using the deprecated
> 'regulator-compatible' property. Remove the usage as examples shouldn't
> be using long since deprecated properties.
> 
> Signed-off-by: Rob Herring <robh at kernel.org>
> ---
> I'd suggest that Mark take this if that's okay with Lee. Or I can take 
> it.
> 
>  Documentation/devicetree/bindings/mfd/max77650.yaml  |  2 --
>  .../devicetree/bindings/mfd/mediatek,mt6360.yaml     |  9 ---------
>  .../bindings/power/supply/mt6360_charger.yaml        |  2 +-
>  .../bindings/regulator/max77650-regulator.yaml       |  1 +
>  .../devicetree/bindings/regulator/max8660.yaml       |  6 +-----
>  .../bindings/regulator/mt6360-regulator.yaml         | 12 +++---------
>  6 files changed, 6 insertions(+), 26 deletions(-)
> 
> [...]
>
> diff --git a/Documentation/devicetree/bindings/power/supply/mt6360_charger.yaml b/Documentation/devicetree/bindings/power/supply/mt6360_charger.yaml
> index b89b15a5bfa4..4c74cc78729e 100644
> --- a/Documentation/devicetree/bindings/power/supply/mt6360_charger.yaml
> +++ b/Documentation/devicetree/bindings/power/supply/mt6360_charger.yaml
> @@ -26,6 +26,7 @@ properties:
>      type: object
>      description: OTG boost regulator.
>      $ref: /schemas/regulator/regulator.yaml#
> +    unevaluatedProperties: false
>  
>  required:
>    - compatible
> @@ -39,7 +40,6 @@ examples:
>        richtek,vinovp-microvolt = <14500000>;
>  
>        otg_vbus_regulator: usb-otg-vbus-regulator {
> -        regulator-compatible = "usb-otg-vbus";
>          regulator-name = "usb-otg-vbus";
>          regulator-min-microvolt = <4425000>;
>          regulator-max-microvolt = <5825000>;

Acked-by: Sebastian Reichel <sebastian.reichel at collabora.com>

> [...]

-- Sebastian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221207/c3f8d36e/attachment.sig>

From adrian.hunter at intel.com  Wed Dec  7 09:17:27 2022
From: adrian.hunter at intel.com (Adrian Hunter)
Date: Wed, 7 Dec 2022 19:17:27 +0200
Subject: [PATCH v4] ufs: core: wlun suspend SSU/enter hibern8 fail
 recovery
In-Reply-To: <20221206031109.10609-1-peter.wang@mediatek.com>
References: <20221206031109.10609-1-peter.wang@mediatek.com>
Message-ID: <4ddd814b-c8ed-8ac8-710d-aa317882fdb1@intel.com>

On 6/12/22 05:11, peter.wang at mediatek.com wrote:
> From: Peter Wang <peter.wang at mediatek.com>
> 
> When SSU/enter hibern8 fail in wlun suspend flow, trigger error
> handler and return busy to break the suspend.
> If not, wlun runtime pm status become error and the consumer will
> stuck in runtime suspend status.
> 
> Signed-off-by: Peter Wang <peter.wang at mediatek.com>

Should this have a Fixes or stable tag?

Another minor comment below, otherwise:

Reviewed-by: Adrian Hunter <adrian.hunter at intel.com>

> ---
>  drivers/ufs/core/ufshcd.c | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index b1f59a5fe632..98f105f32877 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -9049,6 +9049,19 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
>  
>  		if (!hba->dev_info.b_rpm_dev_flush_capable) {
>  			ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
> +			if (ret && pm_op != UFS_SHUTDOWN_PM) {
> +				/*
> +				 * If return err in suspend flow, IO will hang.
> +				 * Trigger error handler and break suspend for
> +				 * error recovery.
> +				 */
> +				spin_lock_irq(hba->host->host_lock);
> +				hba->force_reset = true;
> +				ufshcd_schedule_eh_work(hba);
> +				spin_unlock_irq(hba->host->host_lock);
> +
> +				ret = -EBUSY;
> +			}
>  			if (ret)
>  				goto enable_scaling;
>  		}
> @@ -9060,6 +9073,19 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
>  	 */
>  	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
>  	ret = ufshcd_link_state_transition(hba, req_link_state, check_for_bkops);
> +	if (ret && pm_op != UFS_SHUTDOWN_PM) {
> +		/*
> +		 * If return err in suspend flow, IO will hang.
> +		 * Trigger error handler and break suspend for
> +		 * error recovery.
> +		 */
> +		spin_lock_irq(hba->host->host_lock);
> +		hba->force_reset = true;
> +		ufshcd_schedule_eh_work(hba);
> +		spin_unlock_irq(hba->host->host_lock);

Same 4 lines of code could be separated into a helper function.

> +
> +		ret = -EBUSY;
> +	}
>  	if (ret)
>  		goto set_dev_active;
>  



From robh at kernel.org  Wed Dec  7 09:23:47 2022
From: robh at kernel.org (Rob Herring)
Date: Wed, 7 Dec 2022 11:23:47 -0600
Subject: [PATCH v5,1/3] media: dt-bindings: media: mediatek: vcodec:
 adapt to the 'clock-names' of different platforms
In-Reply-To: <20221206064536.16592-1-yunfei.dong@mediatek.com>
References: <20221206064536.16592-1-yunfei.dong@mediatek.com>
Message-ID: <167043382716.2437231.1367322252075275050.robh@kernel.org>


On Tue, 06 Dec 2022 14:45:34 +0800, Yunfei Dong wrote:
> mt8195 and mt8192 have different clock numbers, separate 'clock-names'
> according to compatible name.
> 
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
> ---
> compared with v4:
> - change min clocks and clock-names from 1 to 4
> compared with v3:
> - rewrite clock-names according to different platforms.
> 
> Reference series:
> [1]: v5 of this series is presend by Allen-KH Cheng.
>      message-id: 20221128143832.25584-4-allen-kh.cheng at mediatek.com
> ---
>  .../media/mediatek,vcodec-subdev-decoder.yaml | 41 ++++++++++++++++---
>  1 file changed, 35 insertions(+), 6 deletions(-)
> 

Reviewed-by: Rob Herring <robh at kernel.org>


From broonie at kernel.org  Wed Dec  7 09:37:35 2022
From: broonie at kernel.org (Mark Brown)
Date: Wed, 07 Dec 2022 17:37:35 +0000
Subject: [PATCH] ASoC: mediatek: mt8183: fix refcount leak in
 mt8183_mt6358_ts3a227_max98357_dev_probe()
In-Reply-To: <1670234188-23596-1-git-send-email-wangyufen@huawei.com>
References: <1670234188-23596-1-git-send-email-wangyufen@huawei.com>
Message-ID: <167043465528.393374.16429232928958937003.b4-ty@kernel.org>

On Mon, 05 Dec 2022 17:56:28 +0800, Wang Yufen wrote:
> The node returned by of_parse_phandle() with refcount incremented,
> of_node_put() needs be called when finish using it. So add it in the
> error path in mt8183_mt6358_ts3a227_max98357_dev_probe().
> 
> 

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/1] ASoC: mediatek: mt8183: fix refcount leak in mt8183_mt6358_ts3a227_max98357_dev_probe()
      commit: 38eef3be38ab895959c442702864212cc3beb96c

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


From broonie at kernel.org  Wed Dec  7 09:37:38 2022
From: broonie at kernel.org (Mark Brown)
Date: Wed, 07 Dec 2022 17:37:38 +0000
Subject: [PATCH] ASoC: mediatek: mt8173-rt5650-rt5514: fix refcount leak
 in mt8173_rt5650_rt5514_dev_probe()
In-Reply-To: <1670234664-24246-1-git-send-email-wangyufen@huawei.com>
References: <1670234664-24246-1-git-send-email-wangyufen@huawei.com>
Message-ID: <167043465894.393374.8060472153388836896.b4-ty@kernel.org>

On Mon, 05 Dec 2022 18:04:24 +0800, Wang Yufen wrote:
> The node returned by of_parse_phandle() with refcount incremented,
> of_node_put() needs be called when finish using it. So add it in the
> error path in mt8173_rt5650_rt5514_dev_probe().
> 
> 

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/1] ASoC: mediatek: mt8173-rt5650-rt5514: fix refcount leak in mt8173_rt5650_rt5514_dev_probe()
      commit: 3327d721114c109ba0575f86f8fda3b525404054

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


From daniel at makrotopia.org  Wed Dec  7 12:07:01 2022
From: daniel at makrotopia.org (Daniel Golle)
Date: Wed, 7 Dec 2022 20:07:01 +0000
Subject: [PATCH v3] thermal: mediatek: add support for MT7986 and MT7981
Message-ID: <e7122cc9ae519394cba9eeb50b650484686b7bc4.1670442987.git.daniel@makrotopia.org>

Add support for V3 generation thermal found in MT7986 and MT7981 SoCs.
Brings code to assign values from efuse as well as new function to
convert raw temperature to millidegree celsius, as found in MediaTek's
SDK sources (but cleaned up and de-duplicated).

Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
This patch depends on series
"thermal: mediatek: Add support for MT8365 SoC"[1] being merged first.

Changes since v2: Rebase on top of pending patch introducing
raw_to_mcelsius function pointer.
Drop left-over macro extracting the unused adc_oe field.
Use switch (...) instead of if-else-if-else-... statements.
For now, return -EINVAL as default in case of unknown version. Imho
this should be BUG(), as this version is only defined within this
driver.

Changes since v1: Drop use of adc_oe field in efuse, Henry Yen
confirmed its use has been dropped intentionally in MTK SDK as well.

[1]: https://lore.kernel.org/linux-arm-kernel/4121bb6b-30db-7a23-f4c8-40afdda7a0b5 at linaro.org/T/

 drivers/thermal/mtk_thermal.c | 149 ++++++++++++++++++++++++++++++++--
 1 file changed, 142 insertions(+), 7 deletions(-)

diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
index b1f4d19edd4f..4993ed6d3e21 100644
--- a/drivers/thermal/mtk_thermal.c
+++ b/drivers/thermal/mtk_thermal.c
@@ -151,6 +151,20 @@
 #define CALIB_BUF1_VALID_V2(x)		(((x) >> 4) & 0x1)
 #define CALIB_BUF1_O_SLOPE_SIGN_V2(x)	(((x) >> 3) & 0x1)
 
+/*
+ * Layout of the fuses providing the calibration data
+ * These macros can be used for MT7981 and MT7986.
+ */
+#define CALIB_BUF0_ADC_GE_V3(x)		(((x) >> 0) & 0x3ff)
+#define CALIB_BUF0_DEGC_CALI_V3(x)	(((x) >> 20) & 0x3f)
+#define CALIB_BUF0_O_SLOPE_V3(x)	(((x) >> 26) & 0x3f)
+#define CALIB_BUF1_VTS_TS1_V3(x)	(((x) >> 0) & 0x1ff)
+#define CALIB_BUF1_VTS_TS2_V3(x)	(((x) >> 21) & 0x1ff)
+#define CALIB_BUF1_VTS_TSABB_V3(x)	(((x) >> 9) & 0x1ff)
+#define CALIB_BUF1_VALID_V3(x)		(((x) >> 18) & 0x1)
+#define CALIB_BUF1_O_SLOPE_SIGN_V3(x)	(((x) >> 19) & 0x1)
+#define CALIB_BUF1_ID_V3(x)		(((x) >> 20) & 0x1)
+
 enum {
 	VTS1,
 	VTS2,
@@ -164,6 +178,7 @@ enum {
 enum mtk_thermal_version {
 	MTK_THERMAL_V1 = 1,
 	MTK_THERMAL_V2,
+	MTK_THERMAL_V3,
 };
 
 /* MT2701 thermal sensors */
@@ -257,6 +272,27 @@ enum mtk_thermal_version {
 #define MT8365_TS2 1
 #define MT8365_TS3 2
 
+/* AUXADC channel 11 is used for the temperature sensors */
+#define MT7986_TEMP_AUXADC_CHANNEL	11
+
+/* The total number of temperature sensors in the MT7986 */
+#define MT7986_NUM_SENSORS		1
+
+/* The number of banks in the MT7986 */
+#define MT7986_NUM_ZONES		1
+
+/* The number of sensing points per bank */
+#define MT7986_NUM_SENSORS_PER_ZONE	1
+
+/* MT7986 thermal sensors */
+#define MT7986_TS1			0
+
+/* The number of controller in the MT7986 */
+#define MT7986_NUM_CONTROLLER		1
+
+/* The calibration coefficient of sensor  */
+#define MT7986_CALIBRATION		165
+
 struct mtk_thermal;
 
 struct mtk_thermal_zone {
@@ -426,6 +462,14 @@ static const int mt8365_tc_offset[MT8365_NUM_CONTROLLER] = { 0 };
 
 static const int mt8365_vts_index[MT8365_NUM_SENSORS] = { VTS1, VTS2, VTS3 };
 
+/* MT7986 thermal sensor data */
+static const int mt7986_bank_data[MT7986_NUM_SENSORS] = { MT7986_TS1, };
+static const int mt7986_msr[MT7986_NUM_SENSORS_PER_ZONE] = { TEMP_MSR0, };
+static const int mt7986_adcpnp[MT7986_NUM_SENSORS_PER_ZONE] = { TEMP_ADCPNP0, };
+static const int mt7986_mux_values[MT7986_NUM_SENSORS] = { 0, };
+static const int mt7986_vts_index[MT7986_NUM_SENSORS] = { VTS1 };
+static const int mt7986_tc_offset[MT7986_NUM_CONTROLLER] = { 0x0, };
+
 /*
  * The MT8173 thermal controller has four banks. Each bank can read up to
  * four temperature sensors simultaneously. The MT8173 has a total of 5
@@ -626,6 +670,30 @@ static const struct mtk_thermal_data mt8183_thermal_data = {
 	.version = MTK_THERMAL_V1,
 };
 
+/*
+ * MT7986 uses AUXADC Channel 11 for raw data access.
+ */
+static const struct mtk_thermal_data mt7986_thermal_data = {
+	.auxadc_channel = MT7986_TEMP_AUXADC_CHANNEL,
+	.num_banks = MT7986_NUM_ZONES,
+	.num_sensors = MT7986_NUM_SENSORS,
+	.vts_index = mt7986_vts_index,
+	.cali_val = MT7986_CALIBRATION,
+	.num_controller = MT7986_NUM_CONTROLLER,
+	.controller_offset = mt7986_tc_offset,
+	.need_switch_bank = true,
+	.bank_data = {
+		{
+			.num_sensors = 1,
+			.sensors = mt7986_bank_data,
+		},
+	},
+	.msr = mt7986_msr,
+	.adcpnp = mt7986_adcpnp,
+	.sensor_mux_values = mt7986_mux_values,
+	.version = MTK_THERMAL_V3,
+};
+
 /**
  * raw_to_mcelsius - convert a raw ADC value to mcelsius
  * @mt:	The thermal controller
@@ -680,6 +748,22 @@ static int raw_to_mcelsius_v2(struct mtk_thermal *mt, int sensno, s32 raw)
 	return (format_2 - tmp) * 100;
 }
 
+static int raw_to_mcelsius_v3(struct mtk_thermal *mt, int sensno, s32 raw)
+{
+	s32 tmp;
+
+	if (raw == 0)
+		return 0;
+
+	raw &= 0xfff;
+	tmp = 100000 * 15 / 16 * 10000;
+	tmp /= 4096 - 512 + mt->adc_ge;
+	tmp /= 1490;
+	tmp *= raw - mt->vts[sensno] - 2900;
+
+	return mt->degc_cali * 500 - tmp;
+}
+
 /**
  * mtk_thermal_get_bank - get bank
  * @bank:	The bank
@@ -989,6 +1072,25 @@ static int mtk_thermal_extract_efuse_v2(struct mtk_thermal *mt, u32 *buf)
 	return 0;
 }
 
+static int mtk_thermal_extract_efuse_v3(struct mtk_thermal *mt, u32 *buf)
+{
+	if (!CALIB_BUF1_VALID_V3(buf[1]))
+		return -EINVAL;
+
+	mt->adc_ge = CALIB_BUF0_ADC_GE_V3(buf[0]);
+	mt->degc_cali = CALIB_BUF0_DEGC_CALI_V3(buf[0]);
+	mt->o_slope = CALIB_BUF0_O_SLOPE_V3(buf[0]);
+	mt->vts[VTS1] = CALIB_BUF1_VTS_TS1_V3(buf[1]);
+	mt->vts[VTS2] = CALIB_BUF1_VTS_TS2_V3(buf[1]);
+	mt->vts[VTSABB] = CALIB_BUF1_VTS_TSABB_V3(buf[1]);
+	mt->o_slope_sign = CALIB_BUF1_O_SLOPE_SIGN_V3(buf[1]);
+
+	if (CALIB_BUF1_ID_V3(buf[1]) == 0)
+		mt->o_slope = 0;
+
+	return 0;
+}
+
 static int mtk_thermal_get_calibration_data(struct device *dev,
 					    struct mtk_thermal *mt)
 {
@@ -1024,10 +1126,23 @@ static int mtk_thermal_get_calibration_data(struct device *dev,
 		goto out;
 	}
 
-	if (mt->conf->version == MTK_THERMAL_V1)
+	switch (mt->conf->version) {
+	case MTK_THERMAL_V1:
 		ret = mtk_thermal_extract_efuse_v1(mt, buf);
-	else
+		break;
+
+	case MTK_THERMAL_V2:
 		ret = mtk_thermal_extract_efuse_v2(mt, buf);
+		break;
+
+	case MTK_THERMAL_V3:
+		ret = mtk_thermal_extract_efuse_v3(mt, buf);
+		break;
+
+	default:
+		ret = -EINVAL;
+		break;
+	}
 
 	if (ret) {
 		dev_info(dev, "Device not calibrated, using default calibration values\n");
@@ -1057,6 +1172,10 @@ static const struct of_device_id mtk_thermal_of_match[] = {
 		.compatible = "mediatek,mt7622-thermal",
 		.data = (void *)&mt7622_thermal_data,
 	},
+	{
+		.compatible = "mediatek,mt7986-thermal",
+		.data = (void *)&mt7986_thermal_data,
+	},
 	{
 		.compatible = "mediatek,mt8183-thermal",
 		.data = (void *)&mt8183_thermal_data,
@@ -1181,12 +1300,28 @@ static int mtk_thermal_probe(struct platform_device *pdev)
 		goto err_disable_clk_auxadc;
 	}
 
-	mtk_thermal_turn_on_buffer(mt, apmixed_base);
+	switch (mt->conf->version) {
+	case MTK_THERMAL_V1:
+		mt->raw_to_mcelsius = raw_to_mcelsius_v1;
+		break;
+
+	case MTK_THERMAL_V2:
+		mt->raw_to_mcelsius = raw_to_mcelsius_v2;
+		break;
 
-	mt->raw_to_mcelsius = (mt->conf->version == MTK_THERMAL_V1) ?
-				raw_to_mcelsius_v1 : raw_to_mcelsius_v2;
+	case MTK_THERMAL_V3:
+		mt->raw_to_mcelsius = raw_to_mcelsius_v3;
+		break;
+
+	default:
+		ret = -EINVAL;
+		goto err_disable_clk_peri_therm;
+	}
+
+	mtk_thermal_turn_on_buffer(mt, apmixed_base);
 
-	if (mt->conf->version == MTK_THERMAL_V2) {
+	if (mt->conf->version == MTK_THERMAL_V2 ||
+	    mt->conf->version == MTK_THERMAL_V3) {
 		mtk_thermal_release_periodic_ts(mt, auxadc_base);
 	}
 
-- 
2.38.1



From Yong.Wu at mediatek.com  Wed Dec  7 17:06:08 2022
From: Yong.Wu at mediatek.com (=?utf-8?B?WW9uZyBXdSAo5ZC05YuHKQ==?=)
Date: Thu, 8 Dec 2022 01:06:08 +0000
Subject: [PATCH] iommu/mediatek: Fix forever loop in error handling
In-Reply-To: <Y5C3mTam2nkbaz6o@kili>
References: <Y5C3mTam2nkbaz6o@kili>
Message-ID: <68cb1ee26fc61a290a9e69b15234848ec8a02b8c.camel@mediatek.com>

On Wed, 2022-12-07 at 18:56 +0300, Dan Carpenter wrote:
> There is a typo so this loop does i++ where i-- was intended.  It
> will
> result in looping until the kernel crashes.
> 
> Fixes: 26593928564c ("iommu/mediatek: Add error path for loop of
> mm_dts_parse")
> Signed-off-by: Dan Carpenter <error27 at gmail.com>

Sorry for this.

Reviewed-by: Yong Wu <yong.wu at mediatek.com>

Thanks Dan.

> ---
>  drivers/iommu/mtk_iommu.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
> index 3e46bc8b0714..2badd6acfb23 100644
> --- a/drivers/iommu/mtk_iommu.c
> +++ b/drivers/iommu/mtk_iommu.c
> @@ -1160,8 +1160,7 @@ static int mtk_iommu_mm_dts_parse(struct device
> *dev, struct component_match **m
>  	return 0;
>  
>  err_larbdev_put:
> -	/* id may be not linear mapping, loop whole the array */
> -	for (i = MTK_LARB_NR_MAX - 1; i >= 0; i++) {
> +	for (i = MTK_LARB_NR_MAX - 1; i >= 0; i--) {
>  		if (!data->larb_imu[i].dev)
>  			continue;
>  		put_device(data->larb_imu[i].dev);

From Xiangsheng.Hou at mediatek.com  Wed Dec  7 17:15:19 2022
From: Xiangsheng.Hou at mediatek.com (=?utf-8?B?WGlhbmdzaGVuZyBIb3UgKOS+r+elpeiDnCk=?=)
Date: Thu, 8 Dec 2022 01:15:19 +0000
Subject: [PATCH v2 7/9] dt-bindings: spi: mtk-snfi: Add read latch latency
 property
In-Reply-To: <b877af37-462e-c923-41c0-09c370062700@collabora.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
	 <20221205065756.26875-8-xiangsheng.hou@mediatek.com>
	 <ce449a0c-efcc-0ac1-fb8e-c2b4148a5bc1@collabora.com>
	 <a8f706b37f5decf91bfa9a9ac8cf04be4346dd85.camel@mediatek.com>
	 <9992c9a5-059a-9396-32ce-7ed63cd12a96@collabora.com>
	 <e2ccf42f94152ccacad3a2eaec234ae0566474ec.camel@mediatek.com>
	 <b877af37-462e-c923-41c0-09c370062700@collabora.com>
Message-ID: <97408c484927b6520ec79b23220496d628156e5f.camel@mediatek.com>

On Wed, 2022-12-07 at 10:48 +0100, AngeloGioacchino Del Regno wrote:
> Il 07/12/22 03:00, Xiangsheng Hou (???) ha scritto:
> > Hi Angelo,
> > 
> > On Tue, 2022-12-06 at 13:19 +0100, AngeloGioacchino Del Regno
> > wrote:
> > > > > > diff --git
> > > > > > a/Documentation/devicetree/bindings/spi/mediatek,spi-
> > > > > > mtk-snfi.yaml
> > > > > > b/Documentation/devicetree/bindings/spi/mediatek,spi-
> > > > > > mtk-snfi.yaml
> > > > > > index bab23f1b11fd..6e6ff8d73fcd 100644
> > > > > > --- a/Documentation/devicetree/bindings/spi/mediatek,spi-
> > > > > > mtk-
> > > > > > snfi.yaml
> > > > > > +++ b/Documentation/devicetree/bindings/spi/mediatek,spi-
> > > > > > mtk-
> > > > > > snfi.yaml
> > > > > > @@ -45,6 +45,13 @@ properties:
> > > > > >         description: device-tree node of the accompanying
> > > > > > ECC
> > > > > > engine.
> > > > > >         $ref: /schemas/types.yaml#/definitions/phandle
> > > > > >     
> > > > > > +  mediatek,rx-latch-latency:
> > > > > > +    description: Rx delay to sample data with this value,
> > > > > > the
> > > > > > value
> > > > > > +                 unit is clock cycle.
> > > > > 
> > > > > Can't we use nanoseconds or microseconds as a unit here,
> > > > > instead
> > > > > of
> > > > > clock cycles?
> > > > 
> > > > The clock cycle will be various with MediaTek SPI NAND
> > > > controller
> > > > which
> > > > clock frequency can support 26/52/68/81/104MHz...
> > > > It`s may be easy to configure and understand with clock cycle
> > > > in
> > > > unit.
> > > > 
> > > 
> > > Yes, but whatever clock frequency we use, the target is to always
> > > wait for
> > > X nanoseconds, right?
> > > 
> > > Waiting for 5 clock cycles at 104MHz is obviously not the same as
> > > waiting
> > > for the same 5 clock cycles at 26MHz: in that case, expressing
> > > the
> > > value
> > > in nanoseconds or microseconds would make that independent from
> > > the
> > > controller's clock frequency as the calculation from `time` to
> > > `cycles`
> > > would be performed inside of the driver.
> > 
> > There have two rx related timing properties in spi-peripheral-
> > props.
> > The rx-sample-delay-ns have been used in Mediatek snfi driver to
> > adjust
> > controller sample delay.
> > However another spi-rx-delay-us is in microseconds. Take 52MHz for
> > example, the clock cycle will be 19.23ns which lower than 1us. This
> > may
> > not easy to by one clock cycle.
> > 
> 
> I agree, but nothing prevents you from adding your own property for
> that.
> 
> I propose "mediatek,rx-latch-latency-ns" or "mediatek,rx-latency-ns", 
> so that
> we can specify the delay in nanoseconds: in that case, when we
> specify 19ns,
> the driver will safely round that resulting in 52MHz == 19.23ns =>
> 19ns valid.

Will be fixed in next series.

Thanks
Xiangsheng Hou

From peter.wang at mediatek.com  Wed Dec  7 19:01:23 2022
From: peter.wang at mediatek.com (=?utf-8?B?UGV0ZXIgV2FuZyAo546L5L+h5Y+LKQ==?=)
Date: Thu, 8 Dec 2022 03:01:23 +0000
Subject: [PATCH v4] ufs: core: wlun suspend SSU/enter hibern8 fail
 recovery
In-Reply-To: <4ddd814b-c8ed-8ac8-710d-aa317882fdb1@intel.com>
References: <20221206031109.10609-1-peter.wang@mediatek.com>
	 <4ddd814b-c8ed-8ac8-710d-aa317882fdb1@intel.com>
Message-ID: <7f998f91d7bfa263f4dfd29167b02e2ff4b6c5c5.camel@mediatek.com>

On Wed, 2022-12-07 at 19:17 +0200, Adrian Hunter wrote:
> On 6/12/22 05:11, peter.wang at mediatek.com wrote:
> > From: Peter Wang <peter.wang at mediatek.com>
> > 
> > When SSU/enter hibern8 fail in wlun suspend flow, trigger error
> > handler and return busy to break the suspend.
> > If not, wlun runtime pm status become error and the consumer will
> > stuck in runtime suspend status.
> > 
> > Signed-off-by: Peter Wang <peter.wang at mediatek.com>
> 
> Should this have a Fixes or stable tag?
> 
> Another minor comment below, otherwise:
> 
> Reviewed-by: Adrian Hunter <adrian.hunter at intel.com>
> 
> > ---
> >  drivers/ufs/core/ufshcd.c | 26 ++++++++++++++++++++++++++
> >  1 file changed, 26 insertions(+)
> > 
> > diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> > index b1f59a5fe632..98f105f32877 100644
> > --- a/drivers/ufs/core/ufshcd.c
> > +++ b/drivers/ufs/core/ufshcd.c
> > @@ -9049,6 +9049,19 @@ static int __ufshcd_wl_suspend(struct
> > ufs_hba *hba, enum ufs_pm_op pm_op)
> >  
> >  		if (!hba->dev_info.b_rpm_dev_flush_capable) {
> >  			ret = ufshcd_set_dev_pwr_mode(hba,
> > req_dev_pwr_mode);
> > +			if (ret && pm_op != UFS_SHUTDOWN_PM) {
> > +				/*
> > +				 * If return err in suspend flow, IO
> > will hang.
> > +				 * Trigger error handler and break
> > suspend for
> > +				 * error recovery.
> > +				 */
> > +				spin_lock_irq(hba->host->host_lock);
> > +				hba->force_reset = true;
> > +				ufshcd_schedule_eh_work(hba);
> > +				spin_unlock_irq(hba->host->host_lock);
> > +
> > +				ret = -EBUSY;
> > +			}
> >  			if (ret)
> >  				goto enable_scaling;
> >  		}
> > @@ -9060,6 +9073,19 @@ static int __ufshcd_wl_suspend(struct
> > ufs_hba *hba, enum ufs_pm_op pm_op)
> >  	 */
> >  	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
> >  	ret = ufshcd_link_state_transition(hba, req_link_state,
> > check_for_bkops);
> > +	if (ret && pm_op != UFS_SHUTDOWN_PM) {
> > +		/*
> > +		 * If return err in suspend flow, IO will hang.
> > +		 * Trigger error handler and break suspend for
> > +		 * error recovery.
> > +		 */
> > +		spin_lock_irq(hba->host->host_lock);
> > +		hba->force_reset = true;
> > +		ufshcd_schedule_eh_work(hba);
> > +		spin_unlock_irq(hba->host->host_lock);
> 
> Same 4 lines of code could be separated into a helper function.
> 
> > +
> > +		ret = -EBUSY;
> > +	}
> >  	if (ret)
> >  		goto set_dev_active;
> >  
> 
> 

From trevor.wu at mediatek.com  Wed Dec  7 19:31:46 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Thu, 8 Dec 2022 11:31:46 +0800
Subject: [PATCH v3 10/12] dt-bindings: mediatek: mt8188: add audio afe document
In-Reply-To: <20221208033148.21866-1-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
Message-ID: <20221208033148.21866-11-trevor.wu@mediatek.com>

Add mt8188 audio afe document.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 .../devicetree/bindings/sound/mt8188-afe.yaml | 196 ++++++++++++++++++
 1 file changed, 196 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/mt8188-afe.yaml

diff --git a/Documentation/devicetree/bindings/sound/mt8188-afe.yaml b/Documentation/devicetree/bindings/sound/mt8188-afe.yaml
new file mode 100644
index 000000000000..6ab26494d924
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/mt8188-afe.yaml
@@ -0,0 +1,196 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/sound/mt8188-afe.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek AFE PCM controller for mt8188
+
+maintainers:
+  - Trevor Wu <trevor.wu at mediatek.com>
+
+properties:
+  compatible:
+    const: mediatek,mt8188-afe
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  resets:
+    maxItems: 1
+
+  reset-names:
+    const: audiosys
+
+  mediatek,topckgen:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description: The phandle of the mediatek topckgen controller
+
+  power-domains:
+    maxItems: 1
+
+  clocks:
+    items:
+      - description: 26M clock
+      - description: audio pll1 clock
+      - description: audio pll2 clock
+      - description: clock divider for i2si1_mck
+      - description: clock divider for i2si2_mck
+      - description: clock divider for i2so1_mck
+      - description: clock divider for i2so2_mck
+      - description: clock divider for dptx_mck
+      - description: a1sys hoping clock
+      - description: audio intbus clock
+      - description: audio hires clock
+      - description: audio local bus clock
+      - description: mux for dptx_mck
+      - description: mux for i2so1_mck
+      - description: mux for i2so2_mck
+      - description: mux for i2si1_mck
+      - description: mux for i2si2_mck
+      - description: audio 26m clock
+
+  clock-names:
+    items:
+      - const: clk26m
+      - const: apll1_ck
+      - const: apll2_ck
+      - const: apll12_div0
+      - const: apll12_div1
+      - const: apll12_div2
+      - const: apll12_div3
+      - const: apll12_div9
+      - const: a1sys_hp_sel
+      - const: aud_intbus_sel
+      - const: audio_h_sel
+      - const: audio_local_bus_sel
+      - const: dptx_m_sel
+      - const: i2so1_m_sel
+      - const: i2so2_m_sel
+      - const: i2si1_m_sel
+      - const: i2si2_m_sel
+      - const: adsp_audio_26m
+
+patternProperties:
+  "^mediatek,etdm-in[1-2]-chn-disabled$":
+    $ref: /schemas/types.yaml#/definitions/uint8-array
+    minItems: 1
+    maxItems: 16
+    description:
+      By default, all data received from ETDM pins will be outputed to
+      memory. etdm in supports disable_out in direct mode(w/o interconn).
+      User can specify the channel ID which they hope dropping and then
+      the specified channel won't be seen on memory.
+    uniqueItems: true
+    items:
+      minimum: 0
+      maximum: 15
+
+  "^mediatek,etdm-in[1-2]-mclk-always-on-rate-hz$":
+    description: Specify etdm in mclk output rate for always on case.
+
+  "^mediatek,etdm-out[1-3]-mclk-always-on-rate-hz$":
+    description: Specify etdm out mclk output rate for always on case.
+
+  "^mediatek,etdm-in[1-2]-multi-pin-mode$":
+    type: boolean
+    description: if present, the etdm data mode is I2S.
+
+  "^mediatek,etdm-out[1-3]-multi-pin-mode$":
+    type: boolean
+    description: if present, the etdm data mode is I2S.
+
+  "^mediatek,etdm-in[1-2]-cowork-source$":
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      etdm modules can share the same external clock pin. Specify
+      which etdm clock source is required by this etdm in moudule.
+    enum:
+      - 0 # etdm1_in
+      - 1 # etdm2_in
+      - 2 # etdm1_out
+      - 3 # etdm2_out
+
+  "^mediatek,etdm-out[1-2]-cowork-source$":
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: |
+      etdm modules can share the same external clock pin. Specify
+      which etdm clock source is required by this etdm out moudule.
+    enum:
+      - 0 # etdm1_in
+      - 1 # etdm2_in
+      - 2 # etdm1_out
+      - 3 # etdm2_out
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - resets
+  - reset-names
+  - mediatek,topckgen
+  - power-domains
+  - clocks
+  - clock-names
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    afe: afe at 10b10000 {
+        compatible = "mediatek,mt8188-afe";
+        reg = <0x10b10000 0x10000>;
+        interrupts = <GIC_SPI 822 IRQ_TYPE_LEVEL_HIGH 0>;
+        resets = <&watchdog 14>;
+        reset-names = "audiosys";
+        mediatek,topckgen = <&topckgen>;
+        power-domains = <&spm 13>; //MT8188_POWER_DOMAIN_AUDIO
+        mediatek,etdm-in2-cowork-source = <2>;
+        mediatek,etdm-out2-cowork-source = <0>;
+        mediatek,etdm-in1-multi-pin-mode;
+        mediatek,etdm-in1-chn-disabled = /bits/ 8 <0x0 0x2>;
+        clocks = <&clk26m>,
+                 <&topckgen 72>, //CLK_TOP_APLL1
+                 <&topckgen 73>, //CLK_TOP_APLL2
+                 <&topckgen 186>, //CLK_TOP_APLL12_CK_DIV0
+                 <&topckgen 187>, //CLK_TOP_APLL12_CK_DIV1
+                 <&topckgen 188>, //CLK_TOP_APLL12_CK_DIV2
+                 <&topckgen 189>, //CLK_TOP_APLL12_CK_DIV3
+                 <&topckgen 191>, //CLK_TOP_APLL12_CK_DIV9
+                 <&topckgen 83>, //CLK_TOP_A1SYS_HP
+                 <&topckgen 31>, //CLK_TOP_AUD_INTBUS
+                 <&topckgen 32>, //CLK_TOP_AUDIO_H
+                 <&topckgen 69>, //CLK_TOP_AUDIO_LOCAL_BUS
+                 <&topckgen 81>, //CLK_TOP_DPTX
+                 <&topckgen 77>, //CLK_TOP_I2SO1
+                 <&topckgen 78>, //CLK_TOP_I2SO2
+                 <&topckgen 79>, //CLK_TOP_I2SI1
+                 <&topckgen 80>, //CLK_TOP_I2SI2
+                 <&adsp_audio26m 0>; //CLK_AUDIODSP_AUDIO26M
+        clock-names = "clk26m",
+                      "apll1_ck",
+                      "apll2_ck",
+                      "apll12_div0",
+                      "apll12_div1",
+                      "apll12_div2",
+                      "apll12_div3",
+                      "apll12_div9",
+                      "a1sys_hp_sel",
+                      "aud_intbus_sel",
+                      "audio_h_sel",
+                      "audio_local_bus_sel",
+                      "dptx_m_sel",
+                      "i2so1_m_sel",
+                      "i2so2_m_sel",
+                      "i2si1_m_sel",
+                      "i2si2_m_sel",
+                      "adsp_audio_26m";
+    };
+
+...
-- 
2.18.0



From trevor.wu at mediatek.com  Wed Dec  7 19:31:47 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Thu, 8 Dec 2022 11:31:47 +0800
Subject: [PATCH v3 11/12] ASoC: mediatek: mt8188: add machine driver with mt6359
In-Reply-To: <20221208033148.21866-1-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
Message-ID: <20221208033148.21866-12-trevor.wu@mediatek.com>

Add support for mt8188 board with mt6359.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 sound/soc/mediatek/Kconfig                |  10 +
 sound/soc/mediatek/mt8188/Makefile        |   3 +
 sound/soc/mediatek/mt8188/mt8188-mt6359.c | 808 ++++++++++++++++++++++
 3 files changed, 821 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-mt6359.c

diff --git a/sound/soc/mediatek/Kconfig b/sound/soc/mediatek/Kconfig
index 7b28a8043f72..4095033e1147 100644
--- a/sound/soc/mediatek/Kconfig
+++ b/sound/soc/mediatek/Kconfig
@@ -219,6 +219,16 @@ config SND_SOC_MT8188
 	  Select Y if you have such device.
 	  If unsure select "N".
 
+config SND_SOC_MT8188_MT6359
+	tristate "ASoC Audio driver for MT8188 with MT6359 and I2S codecs"
+	depends on SND_SOC_MT8188 && MTK_PMIC_WRAP
+	select SND_SOC_HDMI_CODEC
+	help
+	  This adds support for ASoC machine driver for MediaTek MT8188
+	  boards with the MT6359 and other I2S audio codecs.
+	  Select Y if you have such device.
+	  If unsure select "N".
+
 config SND_SOC_MT8192
 	tristate "ASoC support for Mediatek MT8192 chip"
 	depends on ARCH_MEDIATEK
diff --git a/sound/soc/mediatek/mt8188/Makefile b/sound/soc/mediatek/mt8188/Makefile
index fa5d383c5e47..781e61cbb22b 100644
--- a/sound/soc/mediatek/mt8188/Makefile
+++ b/sound/soc/mediatek/mt8188/Makefile
@@ -10,3 +10,6 @@ snd-soc-mt8188-afe-objs := \
 	mt8188-dai-pcm.o
 
 obj-$(CONFIG_SND_SOC_MT8188) += snd-soc-mt8188-afe.o
+
+# machine driver
+obj-$(CONFIG_SND_SOC_MT8188_MT6359) += mt8188-mt6359.o
diff --git a/sound/soc/mediatek/mt8188/mt8188-mt6359.c b/sound/soc/mediatek/mt8188/mt8188-mt6359.c
new file mode 100644
index 000000000000..33030ef0d5c8
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-mt6359.c
@@ -0,0 +1,808 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * mt8188-mt6359.c  --  MT8188-MT6359 ALSA SoC machine driver
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Trevor Wu <trevor.wu at mediatek.com>
+ */
+
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/pm_runtime.h>
+#include <sound/jack.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include "mt8188-afe-common.h"
+#include "../../codecs/mt6359.h"
+#include "../common/mtk-afe-platform-driver.h"
+
+/* FE */
+SND_SOC_DAILINK_DEFS(playback2,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL2")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(playback3,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL3")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(playback6,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL6")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(playback7,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL7")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(playback8,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL8")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(playback10,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL10")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(playback11,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL11")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture1,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL1")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture2,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL2")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture3,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL3")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture4,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL4")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture5,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL5")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture6,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL6")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture8,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL8")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture9,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL9")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture10,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL10")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+/* BE */
+SND_SOC_DAILINK_DEFS(adda,
+		     DAILINK_COMP_ARRAY(COMP_CPU("ADDA")),
+		     DAILINK_COMP_ARRAY(COMP_CODEC("mt6359-sound",
+						   "mt6359-snd-codec-aif1")),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(dptx,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DPTX")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(etdm1_in,
+		     DAILINK_COMP_ARRAY(COMP_CPU("ETDM1_IN")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(etdm2_in,
+		     DAILINK_COMP_ARRAY(COMP_CPU("ETDM2_IN")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(etdm1_out,
+		     DAILINK_COMP_ARRAY(COMP_CPU("ETDM1_OUT")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(etdm2_out,
+		     DAILINK_COMP_ARRAY(COMP_CPU("ETDM2_OUT")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(etdm3_out,
+		     DAILINK_COMP_ARRAY(COMP_CPU("ETDM3_OUT")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(pcm1,
+		     DAILINK_COMP_ARRAY(COMP_CPU("PCM1")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+struct mt8188_mt6359_priv {
+	struct snd_soc_jack dp_jack;
+	struct snd_soc_jack hdmi_jack;
+};
+
+struct mt8188_card_data {
+	const char *name;
+	unsigned long quirk;
+};
+
+static const struct snd_soc_dapm_widget mt8188_mt6359_widgets[] = {
+	SND_SOC_DAPM_HP("Headphone", NULL),
+	SND_SOC_DAPM_MIC("Headset Mic", NULL),
+};
+
+static const struct snd_kcontrol_new mt8188_mt6359_controls[] = {
+	SOC_DAPM_PIN_SWITCH("Headphone"),
+	SOC_DAPM_PIN_SWITCH("Headset Mic"),
+};
+
+#define CKSYS_AUD_TOP_CFG 0x032c
+#define CKSYS_AUD_TOP_MON 0x0330
+
+static int mt8188_mt6359_mtkaif_calibration(struct snd_soc_pcm_runtime *rtd)
+{
+	struct snd_soc_component *cmpnt_afe =
+		snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME);
+	struct snd_soc_component *cmpnt_codec =
+		asoc_rtd_to_codec(rtd, 0)->component;
+	struct mtk_base_afe *afe;
+	struct mt8188_afe_private *afe_priv;
+	struct mtkaif_param *param;
+	int chosen_phase_1, chosen_phase_2;
+	int prev_cycle_1, prev_cycle_2;
+	int test_done_1, test_done_2;
+	int cycle_1, cycle_2;
+	int mtkaif_chosen_phase[MT8188_MTKAIF_MISO_NUM];
+	int mtkaif_phase_cycle[MT8188_MTKAIF_MISO_NUM];
+	int mtkaif_calibration_num_phase;
+	bool mtkaif_calibration_ok;
+	unsigned int monitor = 0;
+	int counter;
+	int phase;
+	int i;
+
+	if (!cmpnt_afe)
+		return -EINVAL;
+
+	afe = snd_soc_component_get_drvdata(cmpnt_afe);
+	afe_priv = afe->platform_priv;
+	param = &afe_priv->mtkaif_params;
+
+	dev_dbg(afe->dev, "%s(), start\n", __func__);
+
+	param->mtkaif_calibration_ok = false;
+	for (i = 0; i < MT8188_MTKAIF_MISO_NUM; i++) {
+		param->mtkaif_chosen_phase[i] = -1;
+		param->mtkaif_phase_cycle[i] = 0;
+		mtkaif_chosen_phase[i] = -1;
+		mtkaif_phase_cycle[i] = 0;
+	}
+
+	if (IS_ERR(afe_priv->topckgen)) {
+		dev_info(afe->dev, "%s() Cannot find topckgen controller\n",
+			 __func__);
+		return 0;
+	}
+
+	pm_runtime_get_sync(afe->dev);
+	mt6359_mtkaif_calibration_enable(cmpnt_codec);
+
+	/* set test type to synchronizer pulse */
+	regmap_update_bits(afe_priv->topckgen,
+			   CKSYS_AUD_TOP_CFG, 0xffff, 0x4);
+	mtkaif_calibration_num_phase = 42;	/* mt6359: 0 ~ 42 */
+	mtkaif_calibration_ok = true;
+
+	for (phase = 0;
+	     phase <= mtkaif_calibration_num_phase && mtkaif_calibration_ok;
+	     phase++) {
+		mt6359_set_mtkaif_calibration_phase(cmpnt_codec,
+						    phase, phase, phase);
+
+		regmap_set_bits(afe_priv->topckgen, CKSYS_AUD_TOP_CFG, 0x1);
+
+		test_done_1 = 0;
+		test_done_2 = 0;
+
+		cycle_1 = -1;
+		cycle_2 = -1;
+
+		counter = 0;
+		while (!(test_done_1 & test_done_2)) {
+			regmap_read(afe_priv->topckgen,
+				    CKSYS_AUD_TOP_MON, &monitor);
+			test_done_1 = (monitor >> 28) & 0x1;
+			test_done_2 = (monitor >> 29) & 0x1;
+
+			if (test_done_1 == 1)
+				cycle_1 = monitor & 0xf;
+
+			if (test_done_2 == 1)
+				cycle_2 = (monitor >> 4) & 0xf;
+
+			/* handle if never test done */
+			if (++counter > 10000) {
+				dev_info(afe->dev, "%s(), test fail, cycle_1 %d, cycle_2 %d, monitor 0x%x\n",
+					 __func__,
+					 cycle_1, cycle_2, monitor);
+				mtkaif_calibration_ok = false;
+				break;
+			}
+		}
+
+		if (phase == 0) {
+			prev_cycle_1 = cycle_1;
+			prev_cycle_2 = cycle_2;
+		}
+
+		if (cycle_1 != prev_cycle_1 &&
+		    mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] < 0) {
+			mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] = phase - 1;
+			mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0] = prev_cycle_1;
+		}
+
+		if (cycle_2 != prev_cycle_2 &&
+		    mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] < 0) {
+			mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] = phase - 1;
+			mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1] = prev_cycle_2;
+		}
+
+		regmap_clear_bits(afe_priv->topckgen, CKSYS_AUD_TOP_CFG, 0x1);
+
+		if (mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] >= 0 &&
+		    mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] >= 0)
+			break;
+	}
+
+	if (mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] < 0) {
+		mtkaif_calibration_ok = false;
+		chosen_phase_1 = 0;
+	} else {
+		chosen_phase_1 = mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0];
+	}
+
+	if (mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] < 0) {
+		mtkaif_calibration_ok = false;
+		chosen_phase_2 = 0;
+	} else {
+		chosen_phase_2 = mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1];
+	}
+
+	mt6359_set_mtkaif_calibration_phase(cmpnt_codec,
+					    chosen_phase_1,
+					    chosen_phase_2,
+					    0);
+
+	mt6359_mtkaif_calibration_disable(cmpnt_codec);
+	pm_runtime_put(afe->dev);
+
+	param->mtkaif_calibration_ok = mtkaif_calibration_ok;
+	param->mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] = chosen_phase_1;
+	param->mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] = chosen_phase_2;
+
+	for (i = 0; i < MT8188_MTKAIF_MISO_NUM; i++)
+		param->mtkaif_phase_cycle[i] = mtkaif_phase_cycle[i];
+
+	dev_info(afe->dev, "%s(), end, calibration ok %d\n",
+		 __func__, param->mtkaif_calibration_ok);
+
+	return 0;
+}
+
+static int mt8188_mt6359_init(struct snd_soc_pcm_runtime *rtd)
+{
+	struct snd_soc_component *cmpnt_codec =
+		asoc_rtd_to_codec(rtd, 0)->component;
+	struct snd_soc_card *card = rtd->card;
+	struct snd_soc_dapm_context *dapm = &card->dapm;
+
+	/* set mtkaif protocol */
+	mt6359_set_mtkaif_protocol(cmpnt_codec,
+				   MT6359_MTKAIF_PROTOCOL_2_CLK_P2);
+
+	/* mtkaif calibration */
+	mt8188_mt6359_mtkaif_calibration(rtd);
+
+	/* disable widget at init, in case of unexpected completed path */
+	snd_soc_dapm_disable_pin(dapm, "Receiver");
+	snd_soc_dapm_disable_pin(dapm, "Headphone L");
+	snd_soc_dapm_disable_pin(dapm, "Headphone R");
+	snd_soc_dapm_disable_pin(dapm, "Headphone L Ext Spk Amp");
+	snd_soc_dapm_disable_pin(dapm, "Headphone R Ext Spk Amp");
+	snd_soc_dapm_disable_pin(dapm, "LINEOUT L");
+
+	return 0;
+}
+
+enum {
+	DAI_LINK_DL2_FE,
+	DAI_LINK_DL3_FE,
+	DAI_LINK_DL6_FE,
+	DAI_LINK_DL7_FE,
+	DAI_LINK_DL8_FE,
+	DAI_LINK_DL10_FE,
+	DAI_LINK_DL11_FE,
+	DAI_LINK_UL1_FE,
+	DAI_LINK_UL2_FE,
+	DAI_LINK_UL3_FE,
+	DAI_LINK_UL4_FE,
+	DAI_LINK_UL5_FE,
+	DAI_LINK_UL6_FE,
+	DAI_LINK_UL8_FE,
+	DAI_LINK_UL9_FE,
+	DAI_LINK_UL10_FE,
+	DAI_LINK_ADDA_BE,
+	DAI_LINK_DPTX_BE,
+	DAI_LINK_ETDM1_IN_BE,
+	DAI_LINK_ETDM2_IN_BE,
+	DAI_LINK_ETDM1_OUT_BE,
+	DAI_LINK_ETDM2_OUT_BE,
+	DAI_LINK_ETDM3_OUT_BE,
+	DAI_LINK_PCM1_BE,
+};
+
+static int mt8188_dptx_hw_params(struct snd_pcm_substream *substream,
+				 struct snd_pcm_hw_params *params)
+{
+	struct snd_soc_pcm_runtime *rtd = substream->private_data;
+	unsigned int rate = params_rate(params);
+	unsigned int mclk_fs_ratio = 256;
+	unsigned int mclk_fs = rate * mclk_fs_ratio;
+	struct snd_soc_dai *dai = asoc_rtd_to_cpu(rtd, 0);
+
+	return snd_soc_dai_set_sysclk(dai, 0, mclk_fs, SND_SOC_CLOCK_OUT);
+}
+
+static const struct snd_soc_ops mt8188_dptx_ops = {
+	.hw_params = mt8188_dptx_hw_params,
+};
+
+static int mt8188_dptx_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
+				       struct snd_pcm_hw_params *params)
+{
+	/* fix BE i2s format to 32bit, clean param mask first */
+	snd_mask_reset_range(hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT),
+			     0, SNDRV_PCM_FORMAT_LAST);
+
+	params_set_format(params, SNDRV_PCM_FORMAT_S32_LE);
+
+	return 0;
+}
+
+static int mt8188_hdmi_codec_init(struct snd_soc_pcm_runtime *rtd)
+{
+	struct mt8188_mt6359_priv *priv = snd_soc_card_get_drvdata(rtd->card);
+	struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component;
+	int ret = 0;
+
+	ret = snd_soc_card_jack_new(rtd->card, "HDMI Jack", SND_JACK_LINEOUT,
+				    &priv->hdmi_jack);
+	if (ret) {
+		dev_info(rtd->dev, "%s, new jack failed: %d\n", __func__, ret);
+		return ret;
+	}
+
+	ret = snd_soc_component_set_jack(component, &priv->hdmi_jack, NULL);
+	if (ret)
+		dev_info(rtd->dev, "%s, set jack failed on %s (ret=%d)\n",
+			 __func__, component->name, ret);
+
+	return ret;
+}
+
+static int mt8188_dptx_codec_init(struct snd_soc_pcm_runtime *rtd)
+{
+	struct mt8188_mt6359_priv *priv = snd_soc_card_get_drvdata(rtd->card);
+	struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component;
+	int ret = 0;
+
+	ret = snd_soc_card_jack_new(rtd->card, "DP Jack", SND_JACK_LINEOUT,
+				    &priv->dp_jack);
+	if (ret) {
+		dev_info(rtd->dev, "%s, new jack failed: %d\n", __func__, ret);
+		return ret;
+	}
+
+	ret = snd_soc_component_set_jack(component, &priv->dp_jack, NULL);
+	if (ret)
+		dev_info(rtd->dev, "%s, set jack failed on %s (ret=%d)\n",
+			 __func__, component->name, ret);
+
+	return ret;
+}
+
+static struct snd_soc_dai_link mt8188_mt6359_dai_links[] = {
+	/* FE */
+	[DAI_LINK_DL2_FE] = {
+		.name = "DL2_FE",
+		.stream_name = "DL2 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback2),
+	},
+	[DAI_LINK_DL3_FE] = {
+		.name = "DL3_FE",
+		.stream_name = "DL3 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback3),
+	},
+	[DAI_LINK_DL6_FE] = {
+		.name = "DL6_FE",
+		.stream_name = "DL6 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback6),
+	},
+	[DAI_LINK_DL7_FE] = {
+		.name = "DL7_FE",
+		.stream_name = "DL7 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_PRE,
+			SND_SOC_DPCM_TRIGGER_PRE,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback7),
+	},
+	[DAI_LINK_DL8_FE] = {
+		.name = "DL8_FE",
+		.stream_name = "DL8 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback8),
+	},
+	[DAI_LINK_DL10_FE] = {
+		.name = "DL10_FE",
+		.stream_name = "DL10 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback10),
+	},
+	[DAI_LINK_DL11_FE] = {
+		.name = "DL11_FE",
+		.stream_name = "DL11 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback11),
+	},
+	[DAI_LINK_UL1_FE] = {
+		.name = "UL1_FE",
+		.stream_name = "UL1 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_PRE,
+			SND_SOC_DPCM_TRIGGER_PRE,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture1),
+	},
+	[DAI_LINK_UL2_FE] = {
+		.name = "UL2_FE",
+		.stream_name = "UL2 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture2),
+	},
+	[DAI_LINK_UL3_FE] = {
+		.name = "UL3_FE",
+		.stream_name = "UL3 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture3),
+	},
+	[DAI_LINK_UL4_FE] = {
+		.name = "UL4_FE",
+		.stream_name = "UL4 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture4),
+	},
+	[DAI_LINK_UL5_FE] = {
+		.name = "UL5_FE",
+		.stream_name = "UL5 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture5),
+	},
+	[DAI_LINK_UL6_FE] = {
+		.name = "UL6_FE",
+		.stream_name = "UL6 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_PRE,
+			SND_SOC_DPCM_TRIGGER_PRE,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture6),
+	},
+	[DAI_LINK_UL8_FE] = {
+		.name = "UL8_FE",
+		.stream_name = "UL8 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture8),
+	},
+	[DAI_LINK_UL9_FE] = {
+		.name = "UL9_FE",
+		.stream_name = "UL9 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture9),
+	},
+	[DAI_LINK_UL10_FE] = {
+		.name = "UL10_FE",
+		.stream_name = "UL10 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture10),
+	},
+	/* BE */
+	[DAI_LINK_ADDA_BE] = {
+		.name = "ADDA_BE",
+		.no_pcm = 1,
+		.dpcm_playback = 1,
+		.dpcm_capture = 1,
+		.init = mt8188_mt6359_init,
+		SND_SOC_DAILINK_REG(adda),
+	},
+	[DAI_LINK_DPTX_BE] = {
+		.name = "DPTX_BE",
+		.ops = &mt8188_dptx_ops,
+		.be_hw_params_fixup = mt8188_dptx_hw_params_fixup,
+		.no_pcm = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(dptx),
+	},
+	[DAI_LINK_ETDM1_IN_BE] = {
+		.name = "ETDM1_IN_BE",
+		.no_pcm = 1,
+		.dai_fmt = SND_SOC_DAIFMT_I2S |
+			SND_SOC_DAIFMT_NB_NF |
+			SND_SOC_DAIFMT_CBP_CFP,
+		.dpcm_capture = 1,
+		.ignore_suspend = 1,
+		SND_SOC_DAILINK_REG(etdm1_in),
+	},
+	[DAI_LINK_ETDM2_IN_BE] = {
+		.name = "ETDM2_IN_BE",
+		.no_pcm = 1,
+		.dai_fmt = SND_SOC_DAIFMT_I2S |
+			SND_SOC_DAIFMT_NB_NF |
+			SND_SOC_DAIFMT_CBP_CFP,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(etdm2_in),
+	},
+	[DAI_LINK_ETDM1_OUT_BE] = {
+		.name = "ETDM1_OUT_BE",
+		.no_pcm = 1,
+		.dai_fmt = SND_SOC_DAIFMT_I2S |
+			SND_SOC_DAIFMT_NB_NF |
+			SND_SOC_DAIFMT_CBC_CFC,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(etdm1_out),
+	},
+	[DAI_LINK_ETDM2_OUT_BE] = {
+		.name = "ETDM2_OUT_BE",
+		.no_pcm = 1,
+		.dai_fmt = SND_SOC_DAIFMT_I2S |
+			SND_SOC_DAIFMT_NB_NF |
+			SND_SOC_DAIFMT_CBC_CFC,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(etdm2_out),
+	},
+	[DAI_LINK_ETDM3_OUT_BE] = {
+		.name = "ETDM3_OUT_BE",
+		.no_pcm = 1,
+		.dai_fmt = SND_SOC_DAIFMT_I2S |
+			SND_SOC_DAIFMT_NB_NF |
+			SND_SOC_DAIFMT_CBC_CFC,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(etdm3_out),
+	},
+	[DAI_LINK_PCM1_BE] = {
+		.name = "PCM1_BE",
+		.no_pcm = 1,
+		.dai_fmt = SND_SOC_DAIFMT_I2S |
+			SND_SOC_DAIFMT_NB_NF |
+			SND_SOC_DAIFMT_CBC_CFC,
+		.dpcm_playback = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(pcm1),
+	},
+};
+
+static struct snd_soc_card mt8188_mt6359_soc_card = {
+	.owner = THIS_MODULE,
+	.dai_link = mt8188_mt6359_dai_links,
+	.num_links = ARRAY_SIZE(mt8188_mt6359_dai_links),
+	.dapm_widgets = mt8188_mt6359_widgets,
+	.num_dapm_widgets = ARRAY_SIZE(mt8188_mt6359_widgets),
+	.controls = mt8188_mt6359_controls,
+	.num_controls = ARRAY_SIZE(mt8188_mt6359_controls),
+};
+
+static int mt8188_mt6359_dev_probe(struct platform_device *pdev)
+{
+	struct snd_soc_card *card = &mt8188_mt6359_soc_card;
+	struct device_node *platform_node, *dp_node, *hdmi_node;
+	struct mt8188_mt6359_priv *priv;
+	struct mt8188_card_data *card_data;
+	struct snd_soc_dai_link *dai_link;
+	int ret, i;
+
+	card_data = (struct mt8188_card_data *)of_device_get_match_data(&pdev->dev);
+	card->dev = &pdev->dev;
+
+	ret = snd_soc_of_parse_card_name(card, "model");
+	if (ret)
+		return dev_err_probe(&pdev->dev, ret, "%s new card name parsing error\n",
+				     __func__);
+
+	if (!card->name)
+		card->name = card_data->name;
+
+	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return  -ENOMEM;
+
+	if (of_property_read_bool(pdev->dev.of_node, "audio-routing")) {
+		ret = snd_soc_of_parse_audio_routing(card, "audio-routing");
+		if (ret)
+			return ret;
+	}
+
+	platform_node = of_parse_phandle(pdev->dev.of_node,
+					 "mediatek,platform", 0);
+	if (!platform_node) {
+		ret = -EINVAL;
+		return dev_err_probe(&pdev->dev, ret, "Property 'platform' missing or invalid\n");
+	}
+
+	dp_node = of_parse_phandle(pdev->dev.of_node, "mediatek,dptx-codec", 0);
+	hdmi_node = of_parse_phandle(pdev->dev.of_node,
+				     "mediatek,hdmi-codec", 0);
+	for_each_card_prelinks(card, i, dai_link) {
+		if (dai_link->platforms->name)
+			continue;
+		dai_link->platforms->of_node = platform_node;
+
+		if (strcmp(dai_link->name, "DPTX_BE") == 0) {
+			if (!dp_node) {
+				dev_dbg(&pdev->dev, "No property 'dptx-codec'\n");
+			} else {
+				dai_link->codecs->of_node = dp_node;
+				dai_link->codecs->name = NULL;
+				dai_link->codecs->dai_name = "i2s-hifi";
+				dai_link->init = mt8188_dptx_codec_init;
+			}
+		} else if (strcmp(dai_link->name, "ETDM3_OUT_BE") == 0) {
+			if (!hdmi_node) {
+				dev_dbg(&pdev->dev, "No property 'hdmi-codec'\n");
+			} else {
+				dai_link->codecs->of_node = hdmi_node;
+				dai_link->codecs->name = NULL;
+				dai_link->codecs->dai_name = "i2s-hifi";
+				dai_link->init = mt8188_hdmi_codec_init;
+			}
+		}
+	}
+
+	snd_soc_card_set_drvdata(card, priv);
+
+	ret = devm_snd_soc_register_card(&pdev->dev, card);
+	if (ret)
+		dev_err_probe(&pdev->dev, ret, "%s snd_soc_register_card fail\n",
+			      __func__);
+
+	of_node_put(dp_node);
+	of_node_put(hdmi_node);
+	of_node_put(platform_node);
+
+	return ret;
+}
+
+static struct mt8188_card_data mt8188_evb_card = {
+	.name = "mt8188_mt6359",
+};
+
+static const struct of_device_id mt8188_mt6359_dt_match[] = {
+	{
+		.compatible = "mediatek,mt8188-mt6359-evb",
+		.data = &mt8188_evb_card,
+	},
+	{},
+};
+MODULE_DEVICE_TABLE(of, mt8188_mt6359_dt_match);
+
+static struct platform_driver mt8188_mt6359_driver = {
+	.driver = {
+		.name = "mt8188_mt6359",
+		.of_match_table = mt8188_mt6359_dt_match,
+		.pm = &snd_soc_pm_ops,
+	},
+	.probe = mt8188_mt6359_dev_probe,
+};
+
+module_platform_driver(mt8188_mt6359_driver);
+
+/* Module information */
+MODULE_DESCRIPTION("MT8188-MT6359 ALSA SoC machine driver");
+MODULE_AUTHOR("Trevor Wu <trevor.wu at mediatek.com>");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("mt8188 mt6359 soc card");
-- 
2.18.0



From trevor.wu at mediatek.com  Wed Dec  7 19:31:42 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Thu, 8 Dec 2022 11:31:42 +0800
Subject: [PATCH v3 06/12] ASoC: mediatek: mt8188: support pcmif in platform driver
In-Reply-To: <20221208033148.21866-1-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
Message-ID: <20221208033148.21866-7-trevor.wu@mediatek.com>

Add mt8188 pcmif dai driver support

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 sound/soc/mediatek/mt8188/mt8188-dai-pcm.c | 367 +++++++++++++++++++++
 1 file changed, 367 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-pcm.c

diff --git a/sound/soc/mediatek/mt8188/mt8188-dai-pcm.c b/sound/soc/mediatek/mt8188/mt8188-dai-pcm.c
new file mode 100644
index 000000000000..3f1696dcf81c
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-dai-pcm.c
@@ -0,0 +1,367 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MediaTek ALSA SoC Audio DAI PCM I/F Control
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#include <linux/bitfield.h>
+#include <linux/regmap.h>
+#include <sound/pcm_params.h>
+#include "mt8188-afe-clk.h"
+#include "mt8188-afe-common.h"
+#include "mt8188-reg.h"
+
+enum {
+	MTK_DAI_PCM_FMT_I2S,
+	MTK_DAI_PCM_FMT_EIAJ,
+	MTK_DAI_PCM_FMT_MODEA,
+	MTK_DAI_PCM_FMT_MODEB,
+};
+
+enum {
+	MTK_DAI_PCM_CLK_A1SYS,
+	MTK_DAI_PCM_CLK_A2SYS,
+	MTK_DAI_PCM_CLK_26M_48K,
+	MTK_DAI_PCM_CLK_26M_441K,
+};
+
+struct mtk_dai_pcm_rate {
+	unsigned int rate;
+	unsigned int reg_value;
+};
+
+struct mtk_dai_pcmif_priv {
+	unsigned int slave_mode;
+	unsigned int lrck_inv;
+	unsigned int bck_inv;
+	unsigned int format;
+};
+
+static const struct mtk_dai_pcm_rate mtk_dai_pcm_rates[] = {
+	{ .rate = 8000, .reg_value = 0, },
+	{ .rate = 16000, .reg_value = 1, },
+	{ .rate = 32000, .reg_value = 2, },
+	{ .rate = 48000, .reg_value = 3, },
+	{ .rate = 11025, .reg_value = 1, },
+	{ .rate = 22050, .reg_value = 2, },
+	{ .rate = 44100, .reg_value = 3, },
+};
+
+static int mtk_dai_pcm_mode(unsigned int rate)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(mtk_dai_pcm_rates); i++)
+		if (mtk_dai_pcm_rates[i].rate == rate)
+			return mtk_dai_pcm_rates[i].reg_value;
+
+	return -EINVAL;
+}
+
+static const struct snd_kcontrol_new mtk_dai_pcm_o000_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN0, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN0_2, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_pcm_o001_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN1, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN1_2, 7, 1, 0),
+};
+
+static const struct snd_soc_dapm_widget mtk_dai_pcm_widgets[] = {
+	SND_SOC_DAPM_MIXER("I002", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I003", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("O000", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_pcm_o000_mix,
+			   ARRAY_SIZE(mtk_dai_pcm_o000_mix)),
+	SND_SOC_DAPM_MIXER("O001", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_pcm_o001_mix,
+			   ARRAY_SIZE(mtk_dai_pcm_o001_mix)),
+
+	SND_SOC_DAPM_SUPPLY("PCM_1_EN", PCM_INTF_CON1, 0, 0, NULL, 0),
+
+	SND_SOC_DAPM_INPUT("PCM1_INPUT"),
+	SND_SOC_DAPM_OUTPUT("PCM1_OUTPUT"),
+
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_asrc11"),
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_asrc12"),
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_pcmif"),
+};
+
+static const struct snd_soc_dapm_route mtk_dai_pcm_routes[] = {
+	{"I002", NULL, "PCM1 Capture"},
+	{"I003", NULL, "PCM1 Capture"},
+
+	{"O000", "I000 Switch", "I000"},
+	{"O001", "I001 Switch", "I001"},
+
+	{"O000", "I070 Switch", "I070"},
+	{"O001", "I071 Switch", "I071"},
+
+	{"PCM1 Playback", NULL, "O000"},
+	{"PCM1 Playback", NULL, "O001"},
+
+	{"PCM1 Playback", NULL, "PCM_1_EN"},
+	{"PCM1 Playback", NULL, "aud_asrc12"},
+	{"PCM1 Playback", NULL, "aud_pcmif"},
+
+	{"PCM1 Capture", NULL, "PCM_1_EN"},
+	{"PCM1 Capture", NULL, "aud_asrc11"},
+	{"PCM1 Capture", NULL, "aud_pcmif"},
+
+	{"PCM1_OUTPUT", NULL, "PCM1 Playback"},
+	{"PCM1 Capture", NULL, "PCM1_INPUT"},
+};
+
+static int mtk_dai_pcm_configure(struct snd_pcm_substream *substream,
+				 struct snd_soc_dai *dai)
+{
+	struct snd_pcm_runtime * const runtime = substream->runtime;
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_pcmif_priv *pcmif_priv = NULL;
+	unsigned int slave_mode;
+	unsigned int lrck_inv;
+	unsigned int bck_inv;
+	unsigned int fmt;
+	unsigned int bit_width = dai->sample_bits;
+	unsigned int val = 0;
+	unsigned int mask = 0;
+	int fs = 0;
+	int mode = 0;
+
+	if (dai->id < 0)
+		return -EINVAL;
+
+	pcmif_priv = afe_priv->dai_priv[dai->id];
+	slave_mode = pcmif_priv->slave_mode;
+	lrck_inv = pcmif_priv->lrck_inv;
+	bck_inv = pcmif_priv->bck_inv;
+	fmt = pcmif_priv->format;
+
+	/* sync freq mode */
+	fs = mt8188_afe_fs_timing(runtime->rate);
+	if (fs < 0)
+		return -EINVAL;
+
+	val |= FIELD_PREP(PCM_INTF_CON2_SYNC_FREQ_MODE_MASK, fs);
+	mask |= PCM_INTF_CON2_SYNC_FREQ_MODE_MASK;
+
+	/* clk domain sel */
+	if (runtime->rate % 8000)
+		val |= FIELD_PREP(PCM_INTF_CON2_CLK_DOMAIN_SEL_MASK,
+				  MTK_DAI_PCM_CLK_26M_441K);
+	else
+		val |= FIELD_PREP(PCM_INTF_CON2_CLK_DOMAIN_SEL_MASK,
+				  MTK_DAI_PCM_CLK_26M_48K);
+	mask |= PCM_INTF_CON2_CLK_DOMAIN_SEL_MASK;
+
+	regmap_update_bits(afe->regmap, PCM_INTF_CON2, mask, val);
+
+	val = 0;
+	mask = 0;
+
+	/* pcm mode */
+	mode = mtk_dai_pcm_mode(runtime->rate);
+	if (mode < 0)
+		return -EINVAL;
+
+	val |= FIELD_PREP(PCM_INTF_CON1_PCM_MODE_MASK, mode);
+	mask |= PCM_INTF_CON1_PCM_MODE_MASK;
+
+	/* pcm format */
+	val |= FIELD_PREP(PCM_INTF_CON1_PCM_FMT_MASK, fmt);
+	mask |= PCM_INTF_CON1_PCM_FMT_MASK;
+
+	/* pcm sync length */
+	if (fmt == MTK_DAI_PCM_FMT_MODEA ||
+	    fmt == MTK_DAI_PCM_FMT_MODEB)
+		val |= FIELD_PREP(PCM_INTF_CON1_SYNC_LENGTH_MASK, 1);
+	else
+		val |= FIELD_PREP(PCM_INTF_CON1_SYNC_LENGTH_MASK, bit_width);
+	mask |= PCM_INTF_CON1_SYNC_LENGTH_MASK;
+
+	/* pcm bits, word length */
+	if (bit_width > 16) {
+		val |= PCM_INTF_CON1_PCM_24BIT;
+		val |= PCM_INTF_CON1_PCM_WLEN_64BCK;
+	} else {
+		val |= PCM_INTF_CON1_PCM_16BIT;
+		val |= PCM_INTF_CON1_PCM_WLEN_32BCK;
+	}
+	mask |= PCM_INTF_CON1_PCM_BIT_MASK;
+	mask |= PCM_INTF_CON1_PCM_WLEN_MASK;
+
+	/* master/slave */
+	if (!slave_mode) {
+		val |= PCM_INTF_CON1_PCM_MASTER;
+
+		if (lrck_inv)
+			val |= PCM_INTF_CON1_SYNC_OUT_INV;
+		if (bck_inv)
+			val |= PCM_INTF_CON1_BCLK_OUT_INV;
+		mask |= PCM_INTF_CON1_CLK_OUT_INV_MASK;
+	} else {
+		val |= PCM_INTF_CON1_PCM_SLAVE;
+
+		if (lrck_inv)
+			val |= PCM_INTF_CON1_SYNC_IN_INV;
+		if (bck_inv)
+			val |= PCM_INTF_CON1_BCLK_IN_INV;
+		mask |= PCM_INTF_CON1_CLK_IN_INV_MASK;
+
+		// TODO: add asrc setting for slave mode
+	}
+	mask |= PCM_INTF_CON1_PCM_M_S_MASK;
+
+	regmap_update_bits(afe->regmap, PCM_INTF_CON1, mask, val);
+
+	return 0;
+}
+
+/* dai ops */
+static int mtk_dai_pcm_prepare(struct snd_pcm_substream *substream,
+			       struct snd_soc_dai *dai)
+{
+	if (dai->playback_widget->active || dai->capture_widget->active)
+		return 0;
+
+	return mtk_dai_pcm_configure(substream, dai);
+}
+
+static int mtk_dai_pcm_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_pcmif_priv *pcmif_priv = NULL;
+
+	dev_dbg(dai->dev, "%s fmt 0x%x\n", __func__, fmt);
+
+	if (dai->id < 0)
+		return -EINVAL;
+
+	pcmif_priv = afe_priv->dai_priv[dai->id];
+
+	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+	case SND_SOC_DAIFMT_I2S:
+		pcmif_priv->format = MTK_DAI_PCM_FMT_I2S;
+		break;
+	case SND_SOC_DAIFMT_DSP_A:
+		pcmif_priv->format = MTK_DAI_PCM_FMT_MODEA;
+		break;
+	case SND_SOC_DAIFMT_DSP_B:
+		pcmif_priv->format = MTK_DAI_PCM_FMT_MODEB;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+	case SND_SOC_DAIFMT_NB_NF:
+		pcmif_priv->bck_inv = 0;
+		pcmif_priv->lrck_inv = 0;
+		break;
+	case SND_SOC_DAIFMT_NB_IF:
+		pcmif_priv->bck_inv = 0;
+		pcmif_priv->lrck_inv = 1;
+		break;
+	case SND_SOC_DAIFMT_IB_NF:
+		pcmif_priv->bck_inv = 1;
+		pcmif_priv->lrck_inv = 0;
+		break;
+	case SND_SOC_DAIFMT_IB_IF:
+		pcmif_priv->bck_inv = 1;
+		pcmif_priv->lrck_inv = 1;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
+	case SND_SOC_DAIFMT_BC_FC:
+		pcmif_priv->slave_mode = 1;
+		break;
+	case SND_SOC_DAIFMT_BP_FP:
+		pcmif_priv->slave_mode = 0;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static const struct snd_soc_dai_ops mtk_dai_pcm_ops = {
+	.prepare	= mtk_dai_pcm_prepare,
+	.set_fmt	= mtk_dai_pcm_set_fmt,
+};
+
+/* dai driver */
+#define MTK_PCM_RATES (SNDRV_PCM_RATE_8000_48000)
+
+#define MTK_PCM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
+			 SNDRV_PCM_FMTBIT_S24_LE |\
+			 SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_driver mtk_dai_pcm_driver[] = {
+	{
+		.name = "PCM1",
+		.id = MT8188_AFE_IO_PCM,
+		.playback = {
+			.stream_name = "PCM1 Playback",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.capture = {
+			.stream_name = "PCM1 Capture",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mtk_dai_pcm_ops,
+		.symmetric_rate = 1,
+		.symmetric_sample_bits = 1,
+	},
+};
+
+static int init_pcmif_priv_data(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_pcmif_priv *pcmif_priv;
+
+	pcmif_priv = devm_kzalloc(afe->dev, sizeof(struct mtk_dai_pcmif_priv),
+				  GFP_KERNEL);
+	if (!pcmif_priv)
+		return -ENOMEM;
+
+	afe_priv->dai_priv[MT8188_AFE_IO_PCM] = pcmif_priv;
+	return 0;
+}
+
+int mt8188_dai_pcm_register(struct mtk_base_afe *afe)
+{
+	struct mtk_base_afe_dai *dai;
+
+	dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
+	if (!dai)
+		return -ENOMEM;
+
+	list_add(&dai->list, &afe->sub_dais);
+
+	dai->dai_drivers = mtk_dai_pcm_driver;
+	dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_pcm_driver);
+
+	dai->dapm_widgets = mtk_dai_pcm_widgets;
+	dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_pcm_widgets);
+	dai->dapm_routes = mtk_dai_pcm_routes;
+	dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_pcm_routes);
+
+	return init_pcmif_priv_data(afe);
+}
-- 
2.18.0



From trevor.wu at mediatek.com  Wed Dec  7 19:31:43 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Thu, 8 Dec 2022 11:31:43 +0800
Subject: [PATCH v3 07/12] ASoC: mediatek: mt8188: support audio clock control
In-Reply-To: <20221208033148.21866-1-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
Message-ID: <20221208033148.21866-8-trevor.wu@mediatek.com>

Add audio clock wrapper and audio tuner control.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 sound/soc/mediatek/mt8188/mt8188-afe-clk.c | 656 +++++++++++++++++++++
 sound/soc/mediatek/mt8188/mt8188-afe-clk.h | 114 ++++
 2 files changed, 770 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-clk.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-clk.h

diff --git a/sound/soc/mediatek/mt8188/mt8188-afe-clk.c b/sound/soc/mediatek/mt8188/mt8188-afe-clk.c
new file mode 100644
index 000000000000..67fecc5eeaf9
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-afe-clk.c
@@ -0,0 +1,656 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * mt8188-afe-clk.c  --  MediaTek 8188 afe clock ctrl
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#include <linux/clk.h>
+
+#include "mt8188-afe-common.h"
+#include "mt8188-afe-clk.h"
+#include "mt8188-audsys-clk.h"
+#include "mt8188-reg.h"
+
+static const char *aud_clks[MT8188_CLK_NUM] = {
+	/* xtal */
+	[MT8188_CLK_XTAL_26M] = "clk26m",
+
+	/* divider */
+	[MT8188_CLK_TOP_APLL1] = "apll1_ck",
+	[MT8188_CLK_TOP_APLL2] = "apll2_ck",
+	[MT8188_CLK_TOP_APLL12_DIV0] = "apll12_div0",
+	[MT8188_CLK_TOP_APLL12_DIV1] = "apll12_div1",
+	[MT8188_CLK_TOP_APLL12_DIV2] = "apll12_div2",
+	[MT8188_CLK_TOP_APLL12_DIV3] = "apll12_div3",
+	[MT8188_CLK_TOP_APLL12_DIV9] = "apll12_div9",
+
+	/* mux */
+	[MT8188_CLK_TOP_A1SYS_HP_SEL] = "top_a1sys_hp",
+	[MT8188_CLK_TOP_AUD_INTBUS_SEL] = "top_aud_intbus",
+	[MT8188_CLK_TOP_AUDIO_H_SEL] = "top_audio_h",
+	[MT8188_CLK_TOP_AUDIO_LOCAL_BUS_SEL] = "top_audio_local_bus",
+	[MT8188_CLK_TOP_DPTX_M_SEL] = "top_dptx",
+	[MT8188_CLK_TOP_I2SO1_M_SEL] = "top_i2so1",
+	[MT8188_CLK_TOP_I2SO2_M_SEL] = "top_i2so2",
+	[MT8188_CLK_TOP_I2SI1_M_SEL] = "top_i2si1",
+	[MT8188_CLK_TOP_I2SI2_M_SEL] = "top_i2si2",
+
+	/* clock gate */
+	[MT8188_CLK_ADSP_AUDIO_26M] = "adsp_audio_26m",
+	/* afe clock gate */
+	[MT8188_CLK_AUD_AFE] = "aud_afe",
+	[MT8188_CLK_AUD_APLL1_TUNER] = "aud_apll1_tuner",
+	[MT8188_CLK_AUD_APLL2_TUNER] = "aud_apll2_tuner",
+	[MT8188_CLK_AUD_APLL] = "aud_apll",
+	[MT8188_CLK_AUD_APLL2] = "aud_apll2",
+	[MT8188_CLK_AUD_DAC] = "aud_dac",
+	[MT8188_CLK_AUD_ADC] = "aud_adc",
+	[MT8188_CLK_AUD_DAC_HIRES] = "aud_dac_hires",
+	[MT8188_CLK_AUD_A1SYS_HP] = "aud_a1sys_hp",
+	[MT8188_CLK_AUD_ADC_HIRES] = "aud_adc_hires",
+	[MT8188_CLK_AUD_I2SIN] = "aud_i2sin",
+	[MT8188_CLK_AUD_TDM_IN] = "aud_tdm_in",
+	[MT8188_CLK_AUD_I2S_OUT] = "aud_i2s_out",
+	[MT8188_CLK_AUD_TDM_OUT] = "aud_tdm_out",
+	[MT8188_CLK_AUD_HDMI_OUT] = "aud_hdmi_out",
+	[MT8188_CLK_AUD_ASRC11] = "aud_asrc11",
+	[MT8188_CLK_AUD_ASRC12] = "aud_asrc12",
+	[MT8188_CLK_AUD_A1SYS] = "aud_a1sys",
+	[MT8188_CLK_AUD_A2SYS] = "aud_a2sys",
+	[MT8188_CLK_AUD_PCMIF] = "aud_pcmif",
+	[MT8188_CLK_AUD_MEMIF_UL1] = "aud_memif_ul1",
+	[MT8188_CLK_AUD_MEMIF_UL2] = "aud_memif_ul2",
+	[MT8188_CLK_AUD_MEMIF_UL3] = "aud_memif_ul3",
+	[MT8188_CLK_AUD_MEMIF_UL4] = "aud_memif_ul4",
+	[MT8188_CLK_AUD_MEMIF_UL5] = "aud_memif_ul5",
+	[MT8188_CLK_AUD_MEMIF_UL6] = "aud_memif_ul6",
+	[MT8188_CLK_AUD_MEMIF_UL8] = "aud_memif_ul8",
+	[MT8188_CLK_AUD_MEMIF_UL9] = "aud_memif_ul9",
+	[MT8188_CLK_AUD_MEMIF_UL10] = "aud_memif_ul10",
+	[MT8188_CLK_AUD_MEMIF_DL2] = "aud_memif_dl2",
+	[MT8188_CLK_AUD_MEMIF_DL3] = "aud_memif_dl3",
+	[MT8188_CLK_AUD_MEMIF_DL6] = "aud_memif_dl6",
+	[MT8188_CLK_AUD_MEMIF_DL7] = "aud_memif_dl7",
+	[MT8188_CLK_AUD_MEMIF_DL8] = "aud_memif_dl8",
+	[MT8188_CLK_AUD_MEMIF_DL10] = "aud_memif_dl10",
+	[MT8188_CLK_AUD_MEMIF_DL11] = "aud_memif_dl11",
+};
+
+struct mt8188_afe_tuner_cfg {
+	unsigned int id;
+	int apll_div_reg;
+	unsigned int apll_div_shift;
+	unsigned int apll_div_maskbit;
+	unsigned int apll_div_default;
+	int ref_ck_sel_reg;
+	unsigned int ref_ck_sel_shift;
+	unsigned int ref_ck_sel_maskbit;
+	unsigned int ref_ck_sel_default;
+	int tuner_en_reg;
+	unsigned int tuner_en_shift;
+	unsigned int tuner_en_maskbit;
+	int upper_bound_reg;
+	unsigned int upper_bound_shift;
+	unsigned int upper_bound_maskbit;
+	unsigned int upper_bound_default;
+	spinlock_t ctrl_lock; /* lock for apll tuner ctrl*/
+	int ref_cnt;
+};
+
+static struct mt8188_afe_tuner_cfg
+	mt8188_afe_tuner_cfgs[MT8188_AUD_PLL_NUM] = {
+	[MT8188_AUD_PLL1] = {
+		.id = MT8188_AUD_PLL1,
+		.apll_div_reg = AFE_APLL_TUNER_CFG,
+		.apll_div_shift = 4,
+		.apll_div_maskbit = 0xf,
+		.apll_div_default = 0x7,
+		.ref_ck_sel_reg = AFE_APLL_TUNER_CFG,
+		.ref_ck_sel_shift = 1,
+		.ref_ck_sel_maskbit = 0x3,
+		.ref_ck_sel_default = 0x2,
+		.tuner_en_reg = AFE_APLL_TUNER_CFG,
+		.tuner_en_shift = 0,
+		.tuner_en_maskbit = 0x1,
+		.upper_bound_reg = AFE_APLL_TUNER_CFG,
+		.upper_bound_shift = 8,
+		.upper_bound_maskbit = 0xff,
+		.upper_bound_default = 0x3,
+	},
+	[MT8188_AUD_PLL2] = {
+		.id = MT8188_AUD_PLL2,
+		.apll_div_reg = AFE_APLL_TUNER_CFG1,
+		.apll_div_shift = 4,
+		.apll_div_maskbit = 0xf,
+		.apll_div_default = 0x7,
+		.ref_ck_sel_reg = AFE_APLL_TUNER_CFG1,
+		.ref_ck_sel_shift = 1,
+		.ref_ck_sel_maskbit = 0x3,
+		.ref_ck_sel_default = 0x1,
+		.tuner_en_reg = AFE_APLL_TUNER_CFG1,
+		.tuner_en_shift = 0,
+		.tuner_en_maskbit = 0x1,
+		.upper_bound_reg = AFE_APLL_TUNER_CFG1,
+		.upper_bound_shift = 8,
+		.upper_bound_maskbit = 0xff,
+		.upper_bound_default = 0x3,
+	},
+	[MT8188_AUD_PLL3] = {
+		.id = MT8188_AUD_PLL3,
+		.apll_div_reg = AFE_EARC_APLL_TUNER_CFG,
+		.apll_div_shift = 4,
+		.apll_div_maskbit = 0x3f,
+		.apll_div_default = 0x3,
+		.ref_ck_sel_reg = AFE_EARC_APLL_TUNER_CFG,
+		.ref_ck_sel_shift = 24,
+		.ref_ck_sel_maskbit = 0x3,
+		.ref_ck_sel_default = 0x0,
+		.tuner_en_reg = AFE_EARC_APLL_TUNER_CFG,
+		.tuner_en_shift = 0,
+		.tuner_en_maskbit = 0x1,
+		.upper_bound_reg = AFE_EARC_APLL_TUNER_CFG,
+		.upper_bound_shift = 12,
+		.upper_bound_maskbit = 0xff,
+		.upper_bound_default = 0x4,
+	},
+	[MT8188_AUD_PLL4] = {
+		.id = MT8188_AUD_PLL4,
+		.apll_div_reg = AFE_SPDIFIN_APLL_TUNER_CFG,
+		.apll_div_shift = 4,
+		.apll_div_maskbit = 0x3f,
+		.apll_div_default = 0x7,
+		.ref_ck_sel_reg = AFE_SPDIFIN_APLL_TUNER_CFG1,
+		.ref_ck_sel_shift = 8,
+		.ref_ck_sel_maskbit = 0x1,
+		.ref_ck_sel_default = 0,
+		.tuner_en_reg = AFE_SPDIFIN_APLL_TUNER_CFG,
+		.tuner_en_shift = 0,
+		.tuner_en_maskbit = 0x1,
+		.upper_bound_reg = AFE_SPDIFIN_APLL_TUNER_CFG,
+		.upper_bound_shift = 12,
+		.upper_bound_maskbit = 0xff,
+		.upper_bound_default = 0x4,
+	},
+	[MT8188_AUD_PLL5] = {
+		.id = MT8188_AUD_PLL5,
+		.apll_div_reg = AFE_LINEIN_APLL_TUNER_CFG,
+		.apll_div_shift = 4,
+		.apll_div_maskbit = 0x3f,
+		.apll_div_default = 0x3,
+		.ref_ck_sel_reg = AFE_LINEIN_APLL_TUNER_CFG,
+		.ref_ck_sel_shift = 24,
+		.ref_ck_sel_maskbit = 0x1,
+		.ref_ck_sel_default = 0,
+		.tuner_en_reg = AFE_LINEIN_APLL_TUNER_CFG,
+		.tuner_en_shift = 0,
+		.tuner_en_maskbit = 0x1,
+		.upper_bound_reg = AFE_LINEIN_APLL_TUNER_CFG,
+		.upper_bound_shift = 12,
+		.upper_bound_maskbit = 0xff,
+		.upper_bound_default = 0x4,
+	},
+};
+
+static struct mt8188_afe_tuner_cfg *mt8188_afe_found_apll_tuner(unsigned int id)
+{
+	if (id >= MT8188_AUD_PLL_NUM)
+		return NULL;
+
+	return &mt8188_afe_tuner_cfgs[id];
+}
+
+static int mt8188_afe_init_apll_tuner(unsigned int id)
+{
+	struct mt8188_afe_tuner_cfg *cfg = mt8188_afe_found_apll_tuner(id);
+
+	if (!cfg)
+		return -EINVAL;
+
+	cfg->ref_cnt = 0;
+	spin_lock_init(&cfg->ctrl_lock);
+
+	return 0;
+}
+
+static int mt8188_afe_setup_apll_tuner(struct mtk_base_afe *afe, unsigned int id)
+{
+	const struct mt8188_afe_tuner_cfg *cfg = mt8188_afe_found_apll_tuner(id);
+
+	if (!cfg)
+		return -EINVAL;
+
+	regmap_update_bits(afe->regmap,
+			   cfg->apll_div_reg,
+			   cfg->apll_div_maskbit << cfg->apll_div_shift,
+			   cfg->apll_div_default << cfg->apll_div_shift);
+
+	regmap_update_bits(afe->regmap,
+			   cfg->ref_ck_sel_reg,
+			   cfg->ref_ck_sel_maskbit << cfg->ref_ck_sel_shift,
+			   cfg->ref_ck_sel_default << cfg->ref_ck_sel_shift);
+
+	regmap_update_bits(afe->regmap,
+			   cfg->upper_bound_reg,
+			   cfg->upper_bound_maskbit << cfg->upper_bound_shift,
+			   cfg->upper_bound_default << cfg->upper_bound_shift);
+
+	return 0;
+}
+
+static int mt8188_afe_enable_tuner_clk(struct mtk_base_afe *afe,
+				       unsigned int id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	switch (id) {
+	case MT8188_AUD_PLL1:
+		mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL]);
+		mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL1_TUNER]);
+		break;
+	case MT8188_AUD_PLL2:
+		mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL2]);
+		mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL2_TUNER]);
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int mt8188_afe_disable_tuner_clk(struct mtk_base_afe *afe,
+					unsigned int id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	switch (id) {
+	case MT8188_AUD_PLL1:
+		mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL1_TUNER]);
+		mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL]);
+		break;
+	case MT8188_AUD_PLL2:
+		mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL2_TUNER]);
+		mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL2]);
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int mt8188_afe_enable_apll_tuner(struct mtk_base_afe *afe, unsigned int id)
+{
+	struct mt8188_afe_tuner_cfg *cfg = mt8188_afe_found_apll_tuner(id);
+	unsigned long flags;
+	int ret;
+
+	if (!cfg)
+		return -EINVAL;
+
+	ret = mt8188_afe_setup_apll_tuner(afe, id);
+	if (ret)
+		return ret;
+
+	ret = mt8188_afe_enable_tuner_clk(afe, id);
+	if (ret)
+		return ret;
+
+	spin_lock_irqsave(&cfg->ctrl_lock, flags);
+
+	cfg->ref_cnt++;
+	if (cfg->ref_cnt == 1)
+		regmap_update_bits(afe->regmap,
+				   cfg->tuner_en_reg,
+				   cfg->tuner_en_maskbit << cfg->tuner_en_shift,
+				   BIT(cfg->tuner_en_shift));
+
+	spin_unlock_irqrestore(&cfg->ctrl_lock, flags);
+
+	return 0;
+}
+
+static int mt8188_afe_disable_apll_tuner(struct mtk_base_afe *afe, unsigned int id)
+{
+	struct mt8188_afe_tuner_cfg *cfg = mt8188_afe_found_apll_tuner(id);
+	unsigned long flags;
+	int ret;
+
+	if (!cfg)
+		return -EINVAL;
+
+	spin_lock_irqsave(&cfg->ctrl_lock, flags);
+
+	cfg->ref_cnt--;
+	if (cfg->ref_cnt == 0)
+		regmap_update_bits(afe->regmap,
+				   cfg->tuner_en_reg,
+				   cfg->tuner_en_maskbit << cfg->tuner_en_shift,
+				   0 << cfg->tuner_en_shift);
+	else if (cfg->ref_cnt < 0)
+		cfg->ref_cnt = 0;
+
+	spin_unlock_irqrestore(&cfg->ctrl_lock, flags);
+
+	ret = mt8188_afe_disable_tuner_clk(afe, id);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+int mt8188_afe_get_mclk_source_clk_id(int sel)
+{
+	switch (sel) {
+	case MT8188_MCK_SEL_26M:
+		return MT8188_CLK_XTAL_26M;
+	case MT8188_MCK_SEL_APLL1:
+		return MT8188_CLK_TOP_APLL1;
+	case MT8188_MCK_SEL_APLL2:
+		return MT8188_CLK_TOP_APLL2;
+	default:
+		return -EINVAL;
+	}
+}
+
+int mt8188_afe_get_mclk_source_rate(struct mtk_base_afe *afe, int apll)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	int clk_id = mt8188_afe_get_mclk_source_clk_id(apll);
+
+	if (clk_id < 0) {
+		dev_dbg(afe->dev, "invalid clk id\n");
+		return 0;
+	}
+
+	return clk_get_rate(afe_priv->clk[clk_id]);
+}
+
+int mt8188_afe_get_default_mclk_source_by_rate(int rate)
+{
+	return ((rate % 8000) == 0) ?
+		MT8188_MCK_SEL_APLL1 : MT8188_MCK_SEL_APLL2;
+}
+
+int mt8188_afe_init_clock(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	int i, ret;
+
+	ret = mt8188_audsys_clk_register(afe);
+	if (ret) {
+		dev_err(afe->dev, "register audsys clk fail %d\n", ret);
+		return ret;
+	}
+
+	afe_priv->clk =
+		devm_kcalloc(afe->dev, MT8188_CLK_NUM, sizeof(*afe_priv->clk),
+			     GFP_KERNEL);
+	if (!afe_priv->clk)
+		return -ENOMEM;
+
+	for (i = 0; i < MT8188_CLK_NUM; i++) {
+		afe_priv->clk[i] = devm_clk_get(afe->dev, aud_clks[i]);
+		if (IS_ERR(afe_priv->clk[i])) {
+			dev_err(afe->dev, "%s(), devm_clk_get %s fail, ret %ld\n",
+				__func__, aud_clks[i],
+				PTR_ERR(afe_priv->clk[i]));
+			return PTR_ERR(afe_priv->clk[i]);
+		}
+	}
+
+	/* initial tuner */
+	for (i = 0; i < MT8188_AUD_PLL_NUM; i++) {
+		ret = mt8188_afe_init_apll_tuner(i);
+		if (ret) {
+			dev_info(afe->dev, "%s(), init apll_tuner%d failed",
+				 __func__, (i + 1));
+			return -EINVAL;
+		}
+	}
+
+	return 0;
+}
+
+void mt8188_afe_deinit_clock(void *priv)
+{
+	struct mtk_base_afe *afe = priv;
+
+	mt8188_audsys_clk_unregister(afe);
+}
+
+int mt8188_afe_enable_clk(struct mtk_base_afe *afe, struct clk *clk)
+{
+	int ret;
+
+	if (clk) {
+		ret = clk_prepare_enable(clk);
+		if (ret) {
+			dev_dbg(afe->dev, "%s(), failed to enable clk\n",
+				__func__);
+			return ret;
+		}
+	} else {
+		dev_dbg(afe->dev, "NULL clk\n");
+	}
+	return 0;
+}
+EXPORT_SYMBOL_GPL(mt8188_afe_enable_clk);
+
+void mt8188_afe_disable_clk(struct mtk_base_afe *afe, struct clk *clk)
+{
+	if (clk)
+		clk_disable_unprepare(clk);
+	else
+		dev_dbg(afe->dev, "NULL clk\n");
+}
+EXPORT_SYMBOL_GPL(mt8188_afe_disable_clk);
+
+int mt8188_afe_set_clk_rate(struct mtk_base_afe *afe, struct clk *clk,
+			    unsigned int rate)
+{
+	int ret;
+
+	if (clk) {
+		ret = clk_set_rate(clk, rate);
+		if (ret) {
+			dev_dbg(afe->dev, "%s(), failed to set clk rate\n",
+				__func__);
+			return ret;
+		}
+	}
+
+	return 0;
+}
+
+int mt8188_afe_set_clk_parent(struct mtk_base_afe *afe, struct clk *clk,
+			      struct clk *parent)
+{
+	int ret;
+
+	if (clk && parent) {
+		ret = clk_set_parent(clk, parent);
+		if (ret) {
+			dev_dbg(afe->dev, "%s(), failed to set clk parent\n",
+				__func__);
+			return ret;
+		}
+	}
+
+	return 0;
+}
+
+static unsigned int get_top_cg_reg(unsigned int cg_type)
+{
+	switch (cg_type) {
+	case MT8188_TOP_CG_A1SYS_TIMING:
+	case MT8188_TOP_CG_A2SYS_TIMING:
+	case MT8188_TOP_CG_26M_TIMING:
+		return ASYS_TOP_CON;
+	default:
+		return 0;
+	}
+}
+
+static unsigned int get_top_cg_mask(unsigned int cg_type)
+{
+	switch (cg_type) {
+	case MT8188_TOP_CG_A1SYS_TIMING:
+		return ASYS_TOP_CON_A1SYS_TIMING_ON;
+	case MT8188_TOP_CG_A2SYS_TIMING:
+		return ASYS_TOP_CON_A2SYS_TIMING_ON;
+	case MT8188_TOP_CG_26M_TIMING:
+		return ASYS_TOP_CON_26M_TIMING_ON;
+	default:
+		return 0;
+	}
+}
+
+static unsigned int get_top_cg_on_val(unsigned int cg_type)
+{
+	switch (cg_type) {
+	case MT8188_TOP_CG_A1SYS_TIMING:
+	case MT8188_TOP_CG_A2SYS_TIMING:
+	case MT8188_TOP_CG_26M_TIMING:
+		return get_top_cg_mask(cg_type);
+	default:
+		return 0;
+	}
+}
+
+static unsigned int get_top_cg_off_val(unsigned int cg_type)
+{
+	switch (cg_type) {
+	case MT8188_TOP_CG_A1SYS_TIMING:
+	case MT8188_TOP_CG_A2SYS_TIMING:
+	case MT8188_TOP_CG_26M_TIMING:
+		return 0;
+	default:
+		return get_top_cg_mask(cg_type);
+	}
+}
+
+static int mt8188_afe_enable_top_cg(struct mtk_base_afe *afe, unsigned int cg_type)
+{
+	unsigned int reg = get_top_cg_reg(cg_type);
+	unsigned int mask = get_top_cg_mask(cg_type);
+	unsigned int val = get_top_cg_on_val(cg_type);
+
+	regmap_update_bits(afe->regmap, reg, mask, val);
+
+	return 0;
+}
+
+static int mt8188_afe_disable_top_cg(struct mtk_base_afe *afe, unsigned int cg_type)
+{
+	unsigned int reg = get_top_cg_reg(cg_type);
+	unsigned int mask = get_top_cg_mask(cg_type);
+	unsigned int val = get_top_cg_off_val(cg_type);
+
+	regmap_update_bits(afe->regmap, reg, mask, val);
+
+	return 0;
+}
+
+int mt8188_afe_enable_reg_rw_clk(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	/* bus clock for AFE external access, like DRAM */
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_TOP_AUDIO_LOCAL_BUS_SEL]);
+
+	/* bus clock for AFE internal access, like AFE SRAM */
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_TOP_AUD_INTBUS_SEL]);
+
+	/* audio 26m clock source */
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_ADSP_AUDIO_26M]);
+
+	/* AFE hw clock */
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_AFE]);
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A1SYS_HP]);
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A1SYS]);
+
+	return 0;
+}
+
+int mt8188_afe_disable_reg_rw_clk(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A1SYS]);
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A1SYS_HP]);
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_AFE]);
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_ADSP_AUDIO_26M]);
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_TOP_AUD_INTBUS_SEL]);
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_TOP_AUDIO_LOCAL_BUS_SEL]);
+
+	return 0;
+}
+
+static int mt8188_afe_enable_afe_on(struct mtk_base_afe *afe)
+{
+	regmap_update_bits(afe->regmap, AFE_DAC_CON0, 0x1, 0x1);
+	return 0;
+}
+
+static int mt8188_afe_disable_afe_on(struct mtk_base_afe *afe)
+{
+	regmap_update_bits(afe->regmap, AFE_DAC_CON0, 0x1, 0x0);
+	return 0;
+}
+
+static int mt8188_afe_enable_timing_sys(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A1SYS]);
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A2SYS]);
+
+	mt8188_afe_enable_top_cg(afe, MT8188_TOP_CG_A1SYS_TIMING);
+	mt8188_afe_enable_top_cg(afe, MT8188_TOP_CG_A2SYS_TIMING);
+	mt8188_afe_enable_top_cg(afe, MT8188_TOP_CG_26M_TIMING);
+
+	return 0;
+}
+
+static int mt8188_afe_disable_timing_sys(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A1SYS]);
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A2SYS]);
+
+	mt8188_afe_disable_top_cg(afe, MT8188_TOP_CG_26M_TIMING);
+	mt8188_afe_disable_top_cg(afe, MT8188_TOP_CG_A2SYS_TIMING);
+	mt8188_afe_disable_top_cg(afe, MT8188_TOP_CG_A1SYS_TIMING);
+
+	return 0;
+}
+
+int mt8188_afe_enable_main_clock(struct mtk_base_afe *afe)
+{
+	mt8188_afe_enable_timing_sys(afe);
+
+	mt8188_afe_enable_afe_on(afe);
+
+	mt8188_afe_enable_apll_tuner(afe, MT8188_AUD_PLL1);
+	mt8188_afe_enable_apll_tuner(afe, MT8188_AUD_PLL2);
+
+	return 0;
+}
+
+int mt8188_afe_disable_main_clock(struct mtk_base_afe *afe)
+{
+	mt8188_afe_disable_apll_tuner(afe, MT8188_AUD_PLL2);
+	mt8188_afe_disable_apll_tuner(afe, MT8188_AUD_PLL1);
+
+	mt8188_afe_disable_afe_on(afe);
+
+	mt8188_afe_disable_timing_sys(afe);
+
+	return 0;
+}
diff --git a/sound/soc/mediatek/mt8188/mt8188-afe-clk.h b/sound/soc/mediatek/mt8188/mt8188-afe-clk.h
new file mode 100644
index 000000000000..ea38767d3876
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-afe-clk.h
@@ -0,0 +1,114 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * mt8188-afe-clk.h  --  MediaTek 8188 afe clock ctrl definition
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#ifndef _MT8188_AFE_CLK_H_
+#define _MT8188_AFE_CLK_H_
+
+enum {
+	/* xtal */
+	MT8188_CLK_XTAL_26M,
+	/* divider */
+	MT8188_CLK_TOP_APLL1,
+	MT8188_CLK_TOP_APLL2,
+	MT8188_CLK_TOP_APLL12_DIV0,
+	MT8188_CLK_TOP_APLL12_DIV1,
+	MT8188_CLK_TOP_APLL12_DIV2,
+	MT8188_CLK_TOP_APLL12_DIV3,
+	MT8188_CLK_TOP_APLL12_DIV9,
+	/* mux */
+	MT8188_CLK_TOP_A1SYS_HP_SEL,
+	MT8188_CLK_TOP_AUD_INTBUS_SEL,
+	MT8188_CLK_TOP_AUDIO_H_SEL,
+	MT8188_CLK_TOP_AUDIO_LOCAL_BUS_SEL,
+	MT8188_CLK_TOP_DPTX_M_SEL,
+	MT8188_CLK_TOP_I2SO1_M_SEL,
+	MT8188_CLK_TOP_I2SO2_M_SEL,
+	MT8188_CLK_TOP_I2SI1_M_SEL,
+	MT8188_CLK_TOP_I2SI2_M_SEL,
+	/* clock gate */
+	MT8188_CLK_ADSP_AUDIO_26M,
+	MT8188_CLK_AUD_AFE,
+	MT8188_CLK_AUD_APLL1_TUNER,
+	MT8188_CLK_AUD_APLL2_TUNER,
+	MT8188_CLK_AUD_TOP0_SPDF,
+	MT8188_CLK_AUD_APLL,
+	MT8188_CLK_AUD_APLL2,
+	MT8188_CLK_AUD_DAC,
+	MT8188_CLK_AUD_ADC,
+	MT8188_CLK_AUD_DAC_HIRES,
+	MT8188_CLK_AUD_A1SYS_HP,
+	MT8188_CLK_AUD_ADC_HIRES,
+	MT8188_CLK_AUD_I2SIN,
+	MT8188_CLK_AUD_TDM_IN,
+	MT8188_CLK_AUD_I2S_OUT,
+	MT8188_CLK_AUD_TDM_OUT,
+	MT8188_CLK_AUD_HDMI_OUT,
+	MT8188_CLK_AUD_ASRC11,
+	MT8188_CLK_AUD_ASRC12,
+	MT8188_CLK_AUD_A1SYS,
+	MT8188_CLK_AUD_A2SYS,
+	MT8188_CLK_AUD_PCMIF,
+	MT8188_CLK_AUD_MEMIF_UL1,
+	MT8188_CLK_AUD_MEMIF_UL2,
+	MT8188_CLK_AUD_MEMIF_UL3,
+	MT8188_CLK_AUD_MEMIF_UL4,
+	MT8188_CLK_AUD_MEMIF_UL5,
+	MT8188_CLK_AUD_MEMIF_UL6,
+	MT8188_CLK_AUD_MEMIF_UL8,
+	MT8188_CLK_AUD_MEMIF_UL9,
+	MT8188_CLK_AUD_MEMIF_UL10,
+	MT8188_CLK_AUD_MEMIF_DL2,
+	MT8188_CLK_AUD_MEMIF_DL3,
+	MT8188_CLK_AUD_MEMIF_DL6,
+	MT8188_CLK_AUD_MEMIF_DL7,
+	MT8188_CLK_AUD_MEMIF_DL8,
+	MT8188_CLK_AUD_MEMIF_DL10,
+	MT8188_CLK_AUD_MEMIF_DL11,
+	MT8188_CLK_NUM,
+};
+
+enum {
+	MT8188_AUD_PLL1,
+	MT8188_AUD_PLL2,
+	MT8188_AUD_PLL3,
+	MT8188_AUD_PLL4,
+	MT8188_AUD_PLL5,
+	MT8188_AUD_PLL_NUM,
+};
+
+enum {
+	MT8188_MCK_SEL_26M,
+	MT8188_MCK_SEL_APLL1,
+	MT8188_MCK_SEL_APLL2,
+	MT8188_MCK_SEL_APLL3,
+	MT8188_MCK_SEL_APLL4,
+	MT8188_MCK_SEL_APLL5,
+	MT8188_MCK_SEL_NUM,
+};
+
+struct mtk_base_afe;
+
+int mt8188_afe_get_mclk_source_clk_id(int sel);
+int mt8188_afe_get_mclk_source_rate(struct mtk_base_afe *afe, int apll);
+int mt8188_afe_get_default_mclk_source_by_rate(int rate);
+int mt8188_afe_init_clock(struct mtk_base_afe *afe);
+void mt8188_afe_deinit_clock(void *priv);
+int mt8188_afe_enable_clk(struct mtk_base_afe *afe, struct clk *clk);
+void mt8188_afe_disable_clk(struct mtk_base_afe *afe, struct clk *clk);
+int mt8188_afe_set_clk_rate(struct mtk_base_afe *afe, struct clk *clk,
+			    unsigned int rate);
+int mt8188_afe_set_clk_parent(struct mtk_base_afe *afe, struct clk *clk,
+			      struct clk *parent);
+int mt8188_afe_enable_main_clock(struct mtk_base_afe *afe);
+int mt8188_afe_disable_main_clock(struct mtk_base_afe *afe);
+int mt8188_afe_enable_reg_rw_clk(struct mtk_base_afe *afe);
+int mt8188_afe_disable_reg_rw_clk(struct mtk_base_afe *afe);
+
+#endif
-- 
2.18.0



From trevor.wu at mediatek.com  Wed Dec  7 19:31:41 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Thu, 8 Dec 2022 11:31:41 +0800
Subject: [PATCH v3 05/12] ASoC: mediatek: mt8188: support etdm in platform driver
In-Reply-To: <20221208033148.21866-1-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
Message-ID: <20221208033148.21866-6-trevor.wu@mediatek.com>

Add mt8188 etdm dai driver support.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
I don't add Reviewed-by tag because one new header file is included
in the patch to resolve compiling issue found by kernel test robot.
Additionally, I re-layout the code for better understanding of the
follow-up patch.
---
 sound/soc/mediatek/mt8188/mt8188-dai-etdm.c | 2591 +++++++++++++++++++
 1 file changed, 2591 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-etdm.c

diff --git a/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c b/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
new file mode 100644
index 000000000000..c653fa5e3f85
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
@@ -0,0 +1,2591 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MediaTek ALSA SoC Audio DAI eTDM Control
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#include <linux/bitfield.h>
+#include <linux/pm_runtime.h>
+#include <linux/regmap.h>
+#include <sound/pcm_params.h>
+#include "mt8188-afe-clk.h"
+#include "mt8188-afe-common.h"
+#include "mt8188-reg.h"
+
+#define MT8188_ETDM_MAX_CHANNELS 16
+#define MT8188_ETDM_NORMAL_MAX_BCK_RATE 24576000
+#define ETDM_TO_DAI_ID(x) ((x) + MT8188_AFE_IO_ETDM_START)
+#define ENUM_TO_STR(x)	#x
+
+enum {
+	MTK_DAI_ETDM_FORMAT_I2S = 0,
+	MTK_DAI_ETDM_FORMAT_LJ,
+	MTK_DAI_ETDM_FORMAT_RJ,
+	MTK_DAI_ETDM_FORMAT_EIAJ,
+	MTK_DAI_ETDM_FORMAT_DSPA,
+	MTK_DAI_ETDM_FORMAT_DSPB,
+};
+
+enum {
+	MTK_DAI_ETDM_DATA_ONE_PIN = 0,
+	MTK_DAI_ETDM_DATA_MULTI_PIN,
+};
+
+enum {
+	ETDM_IN,
+	ETDM_OUT,
+};
+
+enum {
+	COWORK_ETDM_NONE = 0,
+	COWORK_ETDM_IN1_M = 2,
+	COWORK_ETDM_IN1_S = 3,
+	COWORK_ETDM_IN2_M = 4,
+	COWORK_ETDM_IN2_S = 5,
+	COWORK_ETDM_OUT1_M = 10,
+	COWORK_ETDM_OUT1_S = 11,
+	COWORK_ETDM_OUT2_M = 12,
+	COWORK_ETDM_OUT2_S = 13,
+	COWORK_ETDM_OUT3_M = 14,
+	COWORK_ETDM_OUT3_S = 15,
+};
+
+enum {
+	ETDM_RELATCH_TIMING_A1A2SYS,
+	ETDM_RELATCH_TIMING_A3SYS,
+	ETDM_RELATCH_TIMING_A4SYS,
+};
+
+enum {
+	ETDM_SYNC_NONE,
+	ETDM_SYNC_FROM_IN1 = 2,
+	ETDM_SYNC_FROM_IN2 = 4,
+	ETDM_SYNC_FROM_OUT1 = 10,
+	ETDM_SYNC_FROM_OUT2 = 12,
+	ETDM_SYNC_FROM_OUT3 = 14,
+};
+
+struct etdm_con_reg {
+	unsigned int con0;
+	unsigned int con1;
+	unsigned int con2;
+	unsigned int con3;
+	unsigned int con4;
+	unsigned int con5;
+};
+
+struct mtk_dai_etdm_rate {
+	unsigned int rate;
+	unsigned int reg_value;
+};
+
+struct mtk_dai_etdm_priv {
+	unsigned int clock_mode;
+	unsigned int data_mode;
+	bool slave_mode;
+	bool lrck_inv;
+	bool bck_inv;
+	unsigned int format;
+	unsigned int slots;
+	unsigned int lrck_width;
+	unsigned int mclk_freq;
+	unsigned int mclk_fixed_apll;
+	unsigned int mclk_apll;
+	unsigned int mclk_dir;
+	int cowork_source_id; //dai id
+	unsigned int cowork_slv_count;
+	int cowork_slv_id[MT8188_AFE_IO_ETDM_NUM - 1]; //dai_id
+	bool in_disable_ch[MT8188_ETDM_MAX_CHANNELS];
+	unsigned int en_ref_cnt;
+	bool is_prepared;
+};
+
+static const struct mtk_dai_etdm_rate mt8188_etdm_rates[] = {
+	{ .rate = 8000, .reg_value = 0, },
+	{ .rate = 12000, .reg_value = 1, },
+	{ .rate = 16000, .reg_value = 2, },
+	{ .rate = 24000, .reg_value = 3, },
+	{ .rate = 32000, .reg_value = 4, },
+	{ .rate = 48000, .reg_value = 5, },
+	{ .rate = 96000, .reg_value = 7, },
+	{ .rate = 192000, .reg_value = 9, },
+	{ .rate = 384000, .reg_value = 11, },
+	{ .rate = 11025, .reg_value = 16, },
+	{ .rate = 22050, .reg_value = 17, },
+	{ .rate = 44100, .reg_value = 18, },
+	{ .rate = 88200, .reg_value = 19, },
+	{ .rate = 176400, .reg_value = 20, },
+	{ .rate = 352800, .reg_value = 21, },
+};
+
+static int get_etdm_fs_timing(unsigned int rate)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(mt8188_etdm_rates); i++)
+		if (mt8188_etdm_rates[i].rate == rate)
+			return mt8188_etdm_rates[i].reg_value;
+
+	return -EINVAL;
+}
+
+static unsigned int get_etdm_ch_fixup(unsigned int channels)
+{
+	if (channels > 16)
+		return 24;
+	else if (channels > 8)
+		return 16;
+	else if (channels > 4)
+		return 8;
+	else if (channels > 2)
+		return 4;
+	else
+		return 2;
+}
+
+static int get_etdm_reg(unsigned int dai_id, struct etdm_con_reg *etdm_reg)
+{
+	switch (dai_id) {
+	case MT8188_AFE_IO_ETDM1_IN:
+		etdm_reg->con0 = ETDM_IN1_CON0;
+		etdm_reg->con1 = ETDM_IN1_CON1;
+		etdm_reg->con2 = ETDM_IN1_CON2;
+		etdm_reg->con3 = ETDM_IN1_CON3;
+		etdm_reg->con4 = ETDM_IN1_CON4;
+		etdm_reg->con5 = ETDM_IN1_CON5;
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		etdm_reg->con0 = ETDM_IN2_CON0;
+		etdm_reg->con1 = ETDM_IN2_CON1;
+		etdm_reg->con2 = ETDM_IN2_CON2;
+		etdm_reg->con3 = ETDM_IN2_CON3;
+		etdm_reg->con4 = ETDM_IN2_CON4;
+		etdm_reg->con5 = ETDM_IN2_CON5;
+		break;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		etdm_reg->con0 = ETDM_OUT1_CON0;
+		etdm_reg->con1 = ETDM_OUT1_CON1;
+		etdm_reg->con2 = ETDM_OUT1_CON2;
+		etdm_reg->con3 = ETDM_OUT1_CON3;
+		etdm_reg->con4 = ETDM_OUT1_CON4;
+		etdm_reg->con5 = ETDM_OUT1_CON5;
+		break;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		etdm_reg->con0 = ETDM_OUT2_CON0;
+		etdm_reg->con1 = ETDM_OUT2_CON1;
+		etdm_reg->con2 = ETDM_OUT2_CON2;
+		etdm_reg->con3 = ETDM_OUT2_CON3;
+		etdm_reg->con4 = ETDM_OUT2_CON4;
+		etdm_reg->con5 = ETDM_OUT2_CON5;
+		break;
+	case MT8188_AFE_IO_ETDM3_OUT:
+	case MT8188_AFE_IO_DPTX:
+		etdm_reg->con0 = ETDM_OUT3_CON0;
+		etdm_reg->con1 = ETDM_OUT3_CON1;
+		etdm_reg->con2 = ETDM_OUT3_CON2;
+		etdm_reg->con3 = ETDM_OUT3_CON3;
+		etdm_reg->con4 = ETDM_OUT3_CON4;
+		etdm_reg->con5 = ETDM_OUT3_CON5;
+		break;
+	default:
+		return -EINVAL;
+	}
+	return 0;
+}
+
+static int get_etdm_dir(unsigned int dai_id)
+{
+	switch (dai_id) {
+	case MT8188_AFE_IO_ETDM1_IN:
+	case MT8188_AFE_IO_ETDM2_IN:
+		return ETDM_IN;
+	case MT8188_AFE_IO_ETDM1_OUT:
+	case MT8188_AFE_IO_ETDM2_OUT:
+	case MT8188_AFE_IO_ETDM3_OUT:
+		return ETDM_OUT;
+	default:
+		return -EINVAL;
+	}
+}
+
+static int get_etdm_wlen(unsigned int bitwidth)
+{
+	return bitwidth <= 16 ? 16 : 32;
+}
+
+static bool is_valid_etdm_dai(int dai_id)
+{
+	if (dai_id < MT8188_AFE_IO_ETDM_START || dai_id >= MT8188_AFE_IO_ETDM_END)
+		return false;
+	else
+		return true;
+}
+
+static int is_cowork_mode(struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	return (etdm_data->cowork_slv_count > 0 ||
+		etdm_data->cowork_source_id != COWORK_ETDM_NONE);
+}
+
+static int sync_to_dai_id(int source_sel)
+{
+	switch (source_sel) {
+	case ETDM_SYNC_FROM_IN1:
+		return MT8188_AFE_IO_ETDM1_IN;
+	case ETDM_SYNC_FROM_IN2:
+		return MT8188_AFE_IO_ETDM2_IN;
+	case ETDM_SYNC_FROM_OUT1:
+		return MT8188_AFE_IO_ETDM1_OUT;
+	case ETDM_SYNC_FROM_OUT2:
+		return MT8188_AFE_IO_ETDM2_OUT;
+	case ETDM_SYNC_FROM_OUT3:
+		return MT8188_AFE_IO_ETDM3_OUT;
+	default:
+		return 0;
+	}
+}
+
+static int get_etdm_cowork_master_id(struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	int dai_id;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+	dai_id = etdm_data->cowork_source_id;
+
+	if (dai_id == COWORK_ETDM_NONE)
+		dai_id = dai->id;
+
+	return dai_id;
+}
+
+static int mtk_dai_etdm_get_cg_id_by_dai_id(int dai_id)
+{
+	int cg_id = -1;
+
+	switch (dai_id) {
+	case MT8188_AFE_IO_DPTX:
+		cg_id = MT8188_CLK_AUD_HDMI_OUT;
+		break;
+	case MT8188_AFE_IO_ETDM1_IN:
+		cg_id = MT8188_CLK_AUD_TDM_IN;
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		cg_id = MT8188_CLK_AUD_I2SIN;
+		break;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		cg_id = MT8188_CLK_AUD_TDM_OUT;
+		break;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		cg_id = MT8188_CLK_AUD_I2S_OUT;
+		break;
+	case MT8188_AFE_IO_ETDM3_OUT:
+		cg_id = MT8188_CLK_AUD_HDMI_OUT;
+		break;
+	default:
+		break;
+	}
+
+	return cg_id;
+}
+
+static int mtk_dai_etdm_get_clk_id_by_dai_id(int dai_id)
+{
+	int clk_id = -1;
+
+	switch (dai_id) {
+	case MT8188_AFE_IO_DPTX:
+		clk_id = MT8188_CLK_TOP_DPTX_M_SEL;
+		break;
+	case MT8188_AFE_IO_ETDM1_IN:
+		clk_id = MT8188_CLK_TOP_I2SI1_M_SEL;
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		clk_id = MT8188_CLK_TOP_I2SI2_M_SEL;
+		break;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		clk_id = MT8188_CLK_TOP_I2SO1_M_SEL;
+		break;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		clk_id = MT8188_CLK_TOP_I2SO2_M_SEL;
+		break;
+	case MT8188_AFE_IO_ETDM3_OUT:
+	default:
+		break;
+	}
+
+	return clk_id;
+}
+
+static int mtk_dai_etdm_get_clkdiv_id_by_dai_id(int dai_id)
+{
+	int clk_id = -1;
+
+	switch (dai_id) {
+	case MT8188_AFE_IO_DPTX:
+		clk_id = MT8188_CLK_TOP_APLL12_DIV9;
+		break;
+	case MT8188_AFE_IO_ETDM1_IN:
+		clk_id = MT8188_CLK_TOP_APLL12_DIV0;
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		clk_id = MT8188_CLK_TOP_APLL12_DIV1;
+		break;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		clk_id = MT8188_CLK_TOP_APLL12_DIV2;
+		break;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		clk_id = MT8188_CLK_TOP_APLL12_DIV3;
+		break;
+	case MT8188_AFE_IO_ETDM3_OUT:
+	default:
+		break;
+	}
+
+	return clk_id;
+}
+
+static int mtk_dai_etdm_enable_mclk(struct mtk_base_afe *afe, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	int clkdiv_id = mtk_dai_etdm_get_clkdiv_id_by_dai_id(dai_id);
+
+	if (clkdiv_id < 0)
+		return -EINVAL;
+
+	mt8188_afe_enable_clk(afe, afe_priv->clk[clkdiv_id]);
+
+	return 0;
+}
+
+static int mtk_dai_etdm_disable_mclk(struct mtk_base_afe *afe, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	int clkdiv_id = mtk_dai_etdm_get_clkdiv_id_by_dai_id(dai_id);
+
+	if (clkdiv_id < 0)
+		return -EINVAL;
+
+	mt8188_afe_disable_clk(afe, afe_priv->clk[clkdiv_id]);
+
+	return 0;
+}
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o048_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN48, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN48, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN48_1, 14, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN48_2, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o049_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN49, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN49, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN49_1, 15, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN49_2, 7, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o050_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN50, 24, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN50_1, 16, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o051_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN51, 25, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN51_1, 17, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o052_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN52, 26, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN52_1, 18, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o053_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN53, 27, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN53_1, 19, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o054_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN54, 28, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN54_1, 20, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o055_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN55, 29, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN55_1, 21, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o056_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I030 Switch", AFE_CONN56, 30, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I054 Switch", AFE_CONN56_1, 22, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o057_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I031 Switch", AFE_CONN57, 31, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I055 Switch", AFE_CONN57_1, 23, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o058_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I032 Switch", AFE_CONN58_1, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I056 Switch", AFE_CONN58_1, 24, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o059_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I033 Switch", AFE_CONN59_1, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I057 Switch", AFE_CONN59_1, 25, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o060_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I034 Switch", AFE_CONN60_1, 2, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I058 Switch", AFE_CONN60_1, 26, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o061_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I035 Switch", AFE_CONN61_1, 3, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I059 Switch", AFE_CONN61_1, 27, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o062_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I036 Switch", AFE_CONN62_1, 4, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I060 Switch", AFE_CONN62_1, 28, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o063_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I037 Switch", AFE_CONN63_1, 5, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I061 Switch", AFE_CONN63_1, 29, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o072_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN72, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN72, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN72_1, 14, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN72_2, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o073_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN73, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN73, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN73_1, 15, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN73_2, 7, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o074_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN74, 24, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN74_1, 16, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o075_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN75, 25, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN75_1, 17, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o076_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN76, 26, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN76_1, 18, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o077_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN77, 27, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN77_1, 19, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o078_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN78, 28, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN78_1, 20, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o079_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN79, 29, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN79_1, 21, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o080_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I030 Switch", AFE_CONN80, 30, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I054 Switch", AFE_CONN80_1, 22, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o081_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I031 Switch", AFE_CONN81, 31, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I055 Switch", AFE_CONN81_1, 23, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o082_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I032 Switch", AFE_CONN82_1, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I056 Switch", AFE_CONN82_1, 24, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o083_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I033 Switch", AFE_CONN83_1, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I057 Switch", AFE_CONN83_1, 25, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o084_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I034 Switch", AFE_CONN84_1, 2, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I058 Switch", AFE_CONN84_1, 26, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o085_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I035 Switch", AFE_CONN85_1, 3, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I059 Switch", AFE_CONN85_1, 27, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o086_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I036 Switch", AFE_CONN86_1, 4, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I060 Switch", AFE_CONN86_1, 28, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o087_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I037 Switch", AFE_CONN87_1, 5, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I061 Switch", AFE_CONN87_1, 29, 1, 0),
+};
+
+static const char * const mt8188_etdm_clk_src_sel_text[] = {
+	"26m",
+	"a1sys_a2sys",
+	"a3sys",
+	"a4sys",
+};
+
+static SOC_ENUM_SINGLE_EXT_DECL(etdmout_clk_src_enum,
+	mt8188_etdm_clk_src_sel_text);
+
+static const char * const hdmitx_dptx_mux_map[] = {
+	"Disconnect", "Connect",
+};
+
+static int hdmitx_dptx_mux_map_value[] = {
+	0, 1,
+};
+
+/* HDMI_OUT_MUX */
+static SOC_VALUE_ENUM_SINGLE_AUTODISABLE_DECL(hdmi_out_mux_map_enum,
+				SND_SOC_NOPM,
+				0,
+				1,
+				hdmitx_dptx_mux_map,
+				hdmitx_dptx_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_out_mux_control =
+	SOC_DAPM_ENUM("HDMI_OUT_MUX", hdmi_out_mux_map_enum);
+
+/* DPTX_OUT_MUX */
+static SOC_VALUE_ENUM_SINGLE_AUTODISABLE_DECL(dptx_out_mux_map_enum,
+				SND_SOC_NOPM,
+				0,
+				1,
+				hdmitx_dptx_mux_map,
+				hdmitx_dptx_mux_map_value);
+
+static const struct snd_kcontrol_new dptx_out_mux_control =
+	SOC_DAPM_ENUM("DPTX_OUT_MUX", dptx_out_mux_map_enum);
+
+/* HDMI_CH0_MUX ~ HDMI_CH7_MUX */
+static const char *const afe_conn_hdmi_mux_map[] = {
+	"CH0", "CH1", "CH2", "CH3", "CH4", "CH5", "CH6", "CH7",
+};
+
+static int afe_conn_hdmi_mux_map_value[] = {
+	0, 1, 2, 3, 4, 5, 6, 7,
+};
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch0_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				0,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch0_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH0_MUX", hdmi_ch0_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch1_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				4,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch1_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH1_MUX", hdmi_ch1_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch2_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				8,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch2_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH2_MUX", hdmi_ch2_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch3_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				12,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch3_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH3_MUX", hdmi_ch3_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch4_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				16,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch4_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH4_MUX", hdmi_ch4_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch5_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				20,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch5_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH5_MUX", hdmi_ch5_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch6_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				24,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch6_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH6_MUX", hdmi_ch6_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch7_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				28,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch7_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH7_MUX", hdmi_ch7_mux_map_enum);
+
+static int mt8188_etdm_clk_src_sel_put(struct snd_kcontrol *kcontrol,
+				       struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
+	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	unsigned int source = ucontrol->value.enumerated.item[0];
+	unsigned int val;
+	unsigned int old_val;
+	unsigned int mask;
+	unsigned int reg;
+	unsigned int shift;
+
+	if (source >= e->items)
+		return -EINVAL;
+
+	reg = 0;
+	if (!strcmp(kcontrol->id.name, "ETDM_OUT1_Clock_Source")) {
+		reg = ETDM_OUT1_CON4;
+		mask = ETDM_OUT_CON4_CLOCK_MASK;
+		shift = ETDM_OUT_CON4_CLOCK_SHIFT;
+		val = FIELD_PREP(ETDM_OUT_CON4_CLOCK_MASK, source);
+	} else if (!strcmp(kcontrol->id.name, "ETDM_OUT2_Clock_Source")) {
+		reg = ETDM_OUT2_CON4;
+		mask = ETDM_OUT_CON4_CLOCK_MASK;
+		shift = ETDM_OUT_CON4_CLOCK_SHIFT;
+		val = FIELD_PREP(ETDM_OUT_CON4_CLOCK_MASK, source);
+	} else if (!strcmp(kcontrol->id.name, "ETDM_OUT3_Clock_Source")) {
+		reg = ETDM_OUT3_CON4;
+		mask = ETDM_OUT_CON4_CLOCK_MASK;
+		shift = ETDM_OUT_CON4_CLOCK_SHIFT;
+		val = FIELD_PREP(ETDM_OUT_CON4_CLOCK_MASK, source);
+	} else if (!strcmp(kcontrol->id.name, "ETDM_IN1_Clock_Source")) {
+		reg = ETDM_IN1_CON2;
+		mask = ETDM_IN_CON2_CLOCK_MASK;
+		shift = ETDM_IN_CON2_CLOCK_SHIFT;
+		val = FIELD_PREP(ETDM_IN_CON2_CLOCK_MASK, source);
+	} else if (!strcmp(kcontrol->id.name, "ETDM_IN2_Clock_Source")) {
+		reg = ETDM_IN2_CON2;
+		mask = ETDM_IN_CON2_CLOCK_MASK;
+		shift = ETDM_IN_CON2_CLOCK_SHIFT;
+		val = FIELD_PREP(ETDM_IN_CON2_CLOCK_MASK, source);
+	}
+
+	if (reg) {
+		regmap_read(afe->regmap, reg, &old_val);
+		old_val &= mask;
+		old_val >>= shift;
+
+		if (old_val == val)
+			return 0;
+
+		regmap_update_bits(afe->regmap, reg, mask, val);
+	}
+
+	return 1;
+}
+
+static int mt8188_etdm_clk_src_sel_get(struct snd_kcontrol *kcontrol,
+				       struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component =
+		snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	unsigned int value = 0;
+	unsigned int reg = 0;
+	unsigned int mask = 0;
+	unsigned int shift = 0;
+
+	if (!strcmp(kcontrol->id.name, "ETDM_OUT1_Clock_Source")) {
+		reg = ETDM_OUT1_CON4;
+		mask = ETDM_OUT_CON4_CLOCK_MASK;
+		shift = ETDM_OUT_CON4_CLOCK_SHIFT;
+	} else if (!strcmp(kcontrol->id.name, "ETDM_OUT2_Clock_Source")) {
+		reg = ETDM_OUT2_CON4;
+		mask = ETDM_OUT_CON4_CLOCK_MASK;
+		shift = ETDM_OUT_CON4_CLOCK_SHIFT;
+	} else if (!strcmp(kcontrol->id.name, "ETDM_OUT3_Clock_Source")) {
+		reg = ETDM_OUT3_CON4;
+		mask = ETDM_OUT_CON4_CLOCK_MASK;
+		shift = ETDM_OUT_CON4_CLOCK_SHIFT;
+	} else if (!strcmp(kcontrol->id.name, "ETDM_IN1_Clock_Source")) {
+		reg = ETDM_IN1_CON2;
+		mask = ETDM_IN_CON2_CLOCK_MASK;
+		shift = ETDM_IN_CON2_CLOCK_SHIFT;
+	} else if (!strcmp(kcontrol->id.name, "ETDM_IN2_Clock_Source")) {
+		reg = ETDM_IN2_CON2;
+		mask = ETDM_IN_CON2_CLOCK_MASK;
+		shift = ETDM_IN_CON2_CLOCK_SHIFT;
+	}
+
+	if (reg)
+		regmap_read(afe->regmap, reg, &value);
+
+	value &= mask;
+	value >>= shift;
+	ucontrol->value.enumerated.item[0] = value;
+	return 0;
+}
+
+static const struct snd_kcontrol_new mtk_dai_etdm_controls[] = {
+	SOC_ENUM_EXT("ETDM_OUT1_Clock_Source", etdmout_clk_src_enum,
+		     mt8188_etdm_clk_src_sel_get,
+		     mt8188_etdm_clk_src_sel_put),
+	SOC_ENUM_EXT("ETDM_OUT2_Clock_Source", etdmout_clk_src_enum,
+		     mt8188_etdm_clk_src_sel_get,
+		     mt8188_etdm_clk_src_sel_put),
+	SOC_ENUM_EXT("ETDM_OUT3_Clock_Source", etdmout_clk_src_enum,
+		     mt8188_etdm_clk_src_sel_get,
+		     mt8188_etdm_clk_src_sel_put),
+	SOC_ENUM_EXT("ETDM_IN1_Clock_Source", etdmout_clk_src_enum,
+		     mt8188_etdm_clk_src_sel_get,
+		     mt8188_etdm_clk_src_sel_put),
+	SOC_ENUM_EXT("ETDM_IN2_Clock_Source", etdmout_clk_src_enum,
+		     mt8188_etdm_clk_src_sel_get,
+		     mt8188_etdm_clk_src_sel_put),
+};
+
+static const struct snd_soc_dapm_widget mtk_dai_etdm_widgets[] = {
+	/* eTDM_IN2 */
+	SND_SOC_DAPM_MIXER("I012", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I013", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I014", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I015", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I016", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I017", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I018", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I019", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I188", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I189", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I190", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I191", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I192", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I193", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I194", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I195", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	/* eTDM_IN1 */
+	SND_SOC_DAPM_MIXER("I072", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I073", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I074", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I075", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I076", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I077", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I078", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I079", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I080", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I081", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I082", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I083", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I084", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I085", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I086", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I087", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	/* eTDM_OUT2 */
+	SND_SOC_DAPM_MIXER("O048", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o048_mix, ARRAY_SIZE(mtk_dai_etdm_o048_mix)),
+	SND_SOC_DAPM_MIXER("O049", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o049_mix, ARRAY_SIZE(mtk_dai_etdm_o049_mix)),
+	SND_SOC_DAPM_MIXER("O050", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o050_mix, ARRAY_SIZE(mtk_dai_etdm_o050_mix)),
+	SND_SOC_DAPM_MIXER("O051", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o051_mix, ARRAY_SIZE(mtk_dai_etdm_o051_mix)),
+	SND_SOC_DAPM_MIXER("O052", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o052_mix, ARRAY_SIZE(mtk_dai_etdm_o052_mix)),
+	SND_SOC_DAPM_MIXER("O053", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o053_mix, ARRAY_SIZE(mtk_dai_etdm_o053_mix)),
+	SND_SOC_DAPM_MIXER("O054", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o054_mix, ARRAY_SIZE(mtk_dai_etdm_o054_mix)),
+	SND_SOC_DAPM_MIXER("O055", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o055_mix, ARRAY_SIZE(mtk_dai_etdm_o055_mix)),
+	SND_SOC_DAPM_MIXER("O056", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o056_mix, ARRAY_SIZE(mtk_dai_etdm_o056_mix)),
+	SND_SOC_DAPM_MIXER("O057", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o057_mix, ARRAY_SIZE(mtk_dai_etdm_o057_mix)),
+	SND_SOC_DAPM_MIXER("O058", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o058_mix, ARRAY_SIZE(mtk_dai_etdm_o058_mix)),
+	SND_SOC_DAPM_MIXER("O059", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o059_mix, ARRAY_SIZE(mtk_dai_etdm_o059_mix)),
+	SND_SOC_DAPM_MIXER("O060", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o060_mix, ARRAY_SIZE(mtk_dai_etdm_o060_mix)),
+	SND_SOC_DAPM_MIXER("O061", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o061_mix, ARRAY_SIZE(mtk_dai_etdm_o061_mix)),
+	SND_SOC_DAPM_MIXER("O062", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o062_mix, ARRAY_SIZE(mtk_dai_etdm_o062_mix)),
+	SND_SOC_DAPM_MIXER("O063", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o063_mix, ARRAY_SIZE(mtk_dai_etdm_o063_mix)),
+
+	/* eTDM_OUT1 */
+	SND_SOC_DAPM_MIXER("O072", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o072_mix, ARRAY_SIZE(mtk_dai_etdm_o072_mix)),
+	SND_SOC_DAPM_MIXER("O073", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o073_mix, ARRAY_SIZE(mtk_dai_etdm_o073_mix)),
+	SND_SOC_DAPM_MIXER("O074", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o074_mix, ARRAY_SIZE(mtk_dai_etdm_o074_mix)),
+	SND_SOC_DAPM_MIXER("O075", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o075_mix, ARRAY_SIZE(mtk_dai_etdm_o075_mix)),
+	SND_SOC_DAPM_MIXER("O076", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o076_mix, ARRAY_SIZE(mtk_dai_etdm_o076_mix)),
+	SND_SOC_DAPM_MIXER("O077", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o077_mix, ARRAY_SIZE(mtk_dai_etdm_o077_mix)),
+	SND_SOC_DAPM_MIXER("O078", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o078_mix, ARRAY_SIZE(mtk_dai_etdm_o078_mix)),
+	SND_SOC_DAPM_MIXER("O079", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o079_mix, ARRAY_SIZE(mtk_dai_etdm_o079_mix)),
+	SND_SOC_DAPM_MIXER("O080", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o080_mix, ARRAY_SIZE(mtk_dai_etdm_o080_mix)),
+	SND_SOC_DAPM_MIXER("O081", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o081_mix, ARRAY_SIZE(mtk_dai_etdm_o081_mix)),
+	SND_SOC_DAPM_MIXER("O082", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o082_mix, ARRAY_SIZE(mtk_dai_etdm_o082_mix)),
+	SND_SOC_DAPM_MIXER("O083", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o083_mix, ARRAY_SIZE(mtk_dai_etdm_o083_mix)),
+	SND_SOC_DAPM_MIXER("O084", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o084_mix, ARRAY_SIZE(mtk_dai_etdm_o084_mix)),
+	SND_SOC_DAPM_MIXER("O085", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o085_mix, ARRAY_SIZE(mtk_dai_etdm_o085_mix)),
+	SND_SOC_DAPM_MIXER("O086", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o086_mix, ARRAY_SIZE(mtk_dai_etdm_o086_mix)),
+	SND_SOC_DAPM_MIXER("O087", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o087_mix, ARRAY_SIZE(mtk_dai_etdm_o087_mix)),
+
+	/* eTDM_OUT3 */
+	SND_SOC_DAPM_MUX("HDMI_OUT_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_out_mux_control),
+	SND_SOC_DAPM_MUX("DPTX_OUT_MUX", SND_SOC_NOPM, 0, 0,
+			 &dptx_out_mux_control),
+
+	SND_SOC_DAPM_MUX("HDMI_CH0_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch0_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH1_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch1_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH2_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch2_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH3_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch3_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH4_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch4_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH5_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch5_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH6_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch6_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH7_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch7_mux_control),
+
+	SND_SOC_DAPM_INPUT("ETDM_INPUT"),
+	SND_SOC_DAPM_OUTPUT("ETDM_OUTPUT"),
+};
+
+static const struct snd_soc_dapm_route mtk_dai_etdm_routes[] = {
+	{"I012", NULL, "ETDM2_IN"},
+	{"I013", NULL, "ETDM2_IN"},
+	{"I014", NULL, "ETDM2_IN"},
+	{"I015", NULL, "ETDM2_IN"},
+	{"I016", NULL, "ETDM2_IN"},
+	{"I017", NULL, "ETDM2_IN"},
+	{"I018", NULL, "ETDM2_IN"},
+	{"I019", NULL, "ETDM2_IN"},
+	{"I188", NULL, "ETDM2_IN"},
+	{"I189", NULL, "ETDM2_IN"},
+	{"I190", NULL, "ETDM2_IN"},
+	{"I191", NULL, "ETDM2_IN"},
+	{"I192", NULL, "ETDM2_IN"},
+	{"I193", NULL, "ETDM2_IN"},
+	{"I194", NULL, "ETDM2_IN"},
+	{"I195", NULL, "ETDM2_IN"},
+
+	{"I072", NULL, "ETDM1_IN"},
+	{"I073", NULL, "ETDM1_IN"},
+	{"I074", NULL, "ETDM1_IN"},
+	{"I075", NULL, "ETDM1_IN"},
+	{"I076", NULL, "ETDM1_IN"},
+	{"I077", NULL, "ETDM1_IN"},
+	{"I078", NULL, "ETDM1_IN"},
+	{"I079", NULL, "ETDM1_IN"},
+	{"I080", NULL, "ETDM1_IN"},
+	{"I081", NULL, "ETDM1_IN"},
+	{"I082", NULL, "ETDM1_IN"},
+	{"I083", NULL, "ETDM1_IN"},
+	{"I084", NULL, "ETDM1_IN"},
+	{"I085", NULL, "ETDM1_IN"},
+	{"I086", NULL, "ETDM1_IN"},
+	{"I087", NULL, "ETDM1_IN"},
+
+	{"UL8", NULL, "ETDM1_IN"},
+	{"UL3", NULL, "ETDM2_IN"},
+
+	{"ETDM2_OUT", NULL, "O048"},
+	{"ETDM2_OUT", NULL, "O049"},
+	{"ETDM2_OUT", NULL, "O050"},
+	{"ETDM2_OUT", NULL, "O051"},
+	{"ETDM2_OUT", NULL, "O052"},
+	{"ETDM2_OUT", NULL, "O053"},
+	{"ETDM2_OUT", NULL, "O054"},
+	{"ETDM2_OUT", NULL, "O055"},
+	{"ETDM2_OUT", NULL, "O056"},
+	{"ETDM2_OUT", NULL, "O057"},
+	{"ETDM2_OUT", NULL, "O058"},
+	{"ETDM2_OUT", NULL, "O059"},
+	{"ETDM2_OUT", NULL, "O060"},
+	{"ETDM2_OUT", NULL, "O061"},
+	{"ETDM2_OUT", NULL, "O062"},
+	{"ETDM2_OUT", NULL, "O063"},
+
+	{"ETDM1_OUT", NULL, "O072"},
+	{"ETDM1_OUT", NULL, "O073"},
+	{"ETDM1_OUT", NULL, "O074"},
+	{"ETDM1_OUT", NULL, "O075"},
+	{"ETDM1_OUT", NULL, "O076"},
+	{"ETDM1_OUT", NULL, "O077"},
+	{"ETDM1_OUT", NULL, "O078"},
+	{"ETDM1_OUT", NULL, "O079"},
+	{"ETDM1_OUT", NULL, "O080"},
+	{"ETDM1_OUT", NULL, "O081"},
+	{"ETDM1_OUT", NULL, "O082"},
+	{"ETDM1_OUT", NULL, "O083"},
+	{"ETDM1_OUT", NULL, "O084"},
+	{"ETDM1_OUT", NULL, "O085"},
+	{"ETDM1_OUT", NULL, "O086"},
+	{"ETDM1_OUT", NULL, "O087"},
+
+	{"O048", "I020 Switch", "I020"},
+	{"O049", "I021 Switch", "I021"},
+
+	{"O048", "I022 Switch", "I022"},
+	{"O049", "I023 Switch", "I023"},
+	{"O050", "I024 Switch", "I024"},
+	{"O051", "I025 Switch", "I025"},
+	{"O052", "I026 Switch", "I026"},
+	{"O053", "I027 Switch", "I027"},
+	{"O054", "I028 Switch", "I028"},
+	{"O055", "I029 Switch", "I029"},
+	{"O056", "I030 Switch", "I030"},
+	{"O057", "I031 Switch", "I031"},
+	{"O058", "I032 Switch", "I032"},
+	{"O059", "I033 Switch", "I033"},
+	{"O060", "I034 Switch", "I034"},
+	{"O061", "I035 Switch", "I035"},
+	{"O062", "I036 Switch", "I036"},
+	{"O063", "I037 Switch", "I037"},
+
+	{"O048", "I046 Switch", "I046"},
+	{"O049", "I047 Switch", "I047"},
+	{"O050", "I048 Switch", "I048"},
+	{"O051", "I049 Switch", "I049"},
+	{"O052", "I050 Switch", "I050"},
+	{"O053", "I051 Switch", "I051"},
+	{"O054", "I052 Switch", "I052"},
+	{"O055", "I053 Switch", "I053"},
+	{"O056", "I054 Switch", "I054"},
+	{"O057", "I055 Switch", "I055"},
+	{"O058", "I056 Switch", "I056"},
+	{"O059", "I057 Switch", "I057"},
+	{"O060", "I058 Switch", "I058"},
+	{"O061", "I059 Switch", "I059"},
+	{"O062", "I060 Switch", "I060"},
+	{"O063", "I061 Switch", "I061"},
+
+	{"O048", "I070 Switch", "I070"},
+	{"O049", "I071 Switch", "I071"},
+
+	{"O072", "I020 Switch", "I020"},
+	{"O073", "I021 Switch", "I021"},
+
+	{"O072", "I022 Switch", "I022"},
+	{"O073", "I023 Switch", "I023"},
+	{"O074", "I024 Switch", "I024"},
+	{"O075", "I025 Switch", "I025"},
+	{"O076", "I026 Switch", "I026"},
+	{"O077", "I027 Switch", "I027"},
+	{"O078", "I028 Switch", "I028"},
+	{"O079", "I029 Switch", "I029"},
+	{"O080", "I030 Switch", "I030"},
+	{"O081", "I031 Switch", "I031"},
+	{"O082", "I032 Switch", "I032"},
+	{"O083", "I033 Switch", "I033"},
+	{"O084", "I034 Switch", "I034"},
+	{"O085", "I035 Switch", "I035"},
+	{"O086", "I036 Switch", "I036"},
+	{"O087", "I037 Switch", "I037"},
+
+	{"O072", "I046 Switch", "I046"},
+	{"O073", "I047 Switch", "I047"},
+	{"O074", "I048 Switch", "I048"},
+	{"O075", "I049 Switch", "I049"},
+	{"O076", "I050 Switch", "I050"},
+	{"O077", "I051 Switch", "I051"},
+	{"O078", "I052 Switch", "I052"},
+	{"O079", "I053 Switch", "I053"},
+	{"O080", "I054 Switch", "I054"},
+	{"O081", "I055 Switch", "I055"},
+	{"O082", "I056 Switch", "I056"},
+	{"O083", "I057 Switch", "I057"},
+	{"O084", "I058 Switch", "I058"},
+	{"O085", "I059 Switch", "I059"},
+	{"O086", "I060 Switch", "I060"},
+	{"O087", "I061 Switch", "I061"},
+
+	{"O072", "I070 Switch", "I070"},
+	{"O073", "I071 Switch", "I071"},
+
+	{"HDMI_CH0_MUX", "CH0", "DL10"},
+	{"HDMI_CH0_MUX", "CH1", "DL10"},
+	{"HDMI_CH0_MUX", "CH2", "DL10"},
+	{"HDMI_CH0_MUX", "CH3", "DL10"},
+	{"HDMI_CH0_MUX", "CH4", "DL10"},
+	{"HDMI_CH0_MUX", "CH5", "DL10"},
+	{"HDMI_CH0_MUX", "CH6", "DL10"},
+	{"HDMI_CH0_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH1_MUX", "CH0", "DL10"},
+	{"HDMI_CH1_MUX", "CH1", "DL10"},
+	{"HDMI_CH1_MUX", "CH2", "DL10"},
+	{"HDMI_CH1_MUX", "CH3", "DL10"},
+	{"HDMI_CH1_MUX", "CH4", "DL10"},
+	{"HDMI_CH1_MUX", "CH5", "DL10"},
+	{"HDMI_CH1_MUX", "CH6", "DL10"},
+	{"HDMI_CH1_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH2_MUX", "CH0", "DL10"},
+	{"HDMI_CH2_MUX", "CH1", "DL10"},
+	{"HDMI_CH2_MUX", "CH2", "DL10"},
+	{"HDMI_CH2_MUX", "CH3", "DL10"},
+	{"HDMI_CH2_MUX", "CH4", "DL10"},
+	{"HDMI_CH2_MUX", "CH5", "DL10"},
+	{"HDMI_CH2_MUX", "CH6", "DL10"},
+	{"HDMI_CH2_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH3_MUX", "CH0", "DL10"},
+	{"HDMI_CH3_MUX", "CH1", "DL10"},
+	{"HDMI_CH3_MUX", "CH2", "DL10"},
+	{"HDMI_CH3_MUX", "CH3", "DL10"},
+	{"HDMI_CH3_MUX", "CH4", "DL10"},
+	{"HDMI_CH3_MUX", "CH5", "DL10"},
+	{"HDMI_CH3_MUX", "CH6", "DL10"},
+	{"HDMI_CH3_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH4_MUX", "CH0", "DL10"},
+	{"HDMI_CH4_MUX", "CH1", "DL10"},
+	{"HDMI_CH4_MUX", "CH2", "DL10"},
+	{"HDMI_CH4_MUX", "CH3", "DL10"},
+	{"HDMI_CH4_MUX", "CH4", "DL10"},
+	{"HDMI_CH4_MUX", "CH5", "DL10"},
+	{"HDMI_CH4_MUX", "CH6", "DL10"},
+	{"HDMI_CH4_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH5_MUX", "CH0", "DL10"},
+	{"HDMI_CH5_MUX", "CH1", "DL10"},
+	{"HDMI_CH5_MUX", "CH2", "DL10"},
+	{"HDMI_CH5_MUX", "CH3", "DL10"},
+	{"HDMI_CH5_MUX", "CH4", "DL10"},
+	{"HDMI_CH5_MUX", "CH5", "DL10"},
+	{"HDMI_CH5_MUX", "CH6", "DL10"},
+	{"HDMI_CH5_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH6_MUX", "CH0", "DL10"},
+	{"HDMI_CH6_MUX", "CH1", "DL10"},
+	{"HDMI_CH6_MUX", "CH2", "DL10"},
+	{"HDMI_CH6_MUX", "CH3", "DL10"},
+	{"HDMI_CH6_MUX", "CH4", "DL10"},
+	{"HDMI_CH6_MUX", "CH5", "DL10"},
+	{"HDMI_CH6_MUX", "CH6", "DL10"},
+	{"HDMI_CH6_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH7_MUX", "CH0", "DL10"},
+	{"HDMI_CH7_MUX", "CH1", "DL10"},
+	{"HDMI_CH7_MUX", "CH2", "DL10"},
+	{"HDMI_CH7_MUX", "CH3", "DL10"},
+	{"HDMI_CH7_MUX", "CH4", "DL10"},
+	{"HDMI_CH7_MUX", "CH5", "DL10"},
+	{"HDMI_CH7_MUX", "CH6", "DL10"},
+	{"HDMI_CH7_MUX", "CH7", "DL10"},
+
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH0_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH1_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH2_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH3_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH4_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH5_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH6_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH7_MUX"},
+
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH0_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH1_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH2_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH3_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH4_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH5_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH6_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH7_MUX"},
+
+	{"ETDM3_OUT", NULL, "HDMI_OUT_MUX"},
+	{"DPTX", NULL, "DPTX_OUT_MUX"},
+
+	{"ETDM_OUTPUT", NULL, "DPTX"},
+	{"ETDM_OUTPUT", NULL, "ETDM1_OUT"},
+	{"ETDM_OUTPUT", NULL, "ETDM2_OUT"},
+	{"ETDM_OUTPUT", NULL, "ETDM3_OUT"},
+	{"ETDM1_IN", NULL, "ETDM_INPUT"},
+	{"ETDM2_IN", NULL, "ETDM_INPUT"},
+};
+
+static int mt8188_afe_enable_etdm(struct mtk_base_afe *afe, int dai_id)
+{
+	int ret = 0;
+	struct etdm_con_reg etdm_reg;
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	unsigned long flags;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+
+	dev_dbg(afe->dev, "%s [%d]%d\n", __func__, dai_id, etdm_data->en_ref_cnt);
+	spin_lock_irqsave(&afe_priv->afe_ctrl_lock, flags);
+	etdm_data->en_ref_cnt++;
+	if (etdm_data->en_ref_cnt == 1) {
+		ret = get_etdm_reg(dai_id, &etdm_reg);
+		if (ret < 0)
+			goto out;
+
+		regmap_set_bits(afe->regmap, etdm_reg.con0, ETDM_CON0_EN);
+	}
+
+out:
+	spin_unlock_irqrestore(&afe_priv->afe_ctrl_lock, flags);
+	return ret;
+}
+
+static int mt8188_afe_disable_etdm(struct mtk_base_afe *afe, int dai_id)
+{
+	int ret = 0;
+	struct etdm_con_reg etdm_reg;
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	unsigned long flags;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+
+	dev_dbg(afe->dev, "%s [%d]%d\n", __func__, dai_id, etdm_data->en_ref_cnt);
+	spin_lock_irqsave(&afe_priv->afe_ctrl_lock, flags);
+	if (etdm_data->en_ref_cnt > 0) {
+		etdm_data->en_ref_cnt--;
+		if (etdm_data->en_ref_cnt == 0) {
+			ret = get_etdm_reg(dai_id, &etdm_reg);
+			if (ret < 0)
+				goto out;
+			regmap_clear_bits(afe->regmap, etdm_reg.con0,
+					  ETDM_CON0_EN);
+		}
+	}
+
+out:
+	spin_unlock_irqrestore(&afe_priv->afe_ctrl_lock, flags);
+	return ret;
+}
+
+static int etdm_cowork_slv_sel(int id, int slave_mode)
+{
+	if (slave_mode) {
+		switch (id) {
+		case MT8188_AFE_IO_ETDM1_IN:
+			return COWORK_ETDM_IN1_S;
+		case MT8188_AFE_IO_ETDM2_IN:
+			return COWORK_ETDM_IN2_S;
+		case MT8188_AFE_IO_ETDM1_OUT:
+			return COWORK_ETDM_OUT1_S;
+		case MT8188_AFE_IO_ETDM2_OUT:
+			return COWORK_ETDM_OUT2_S;
+		case MT8188_AFE_IO_ETDM3_OUT:
+			return COWORK_ETDM_OUT3_S;
+		default:
+			return -EINVAL;
+		}
+	} else {
+		switch (id) {
+		case MT8188_AFE_IO_ETDM1_IN:
+			return COWORK_ETDM_IN1_M;
+		case MT8188_AFE_IO_ETDM2_IN:
+			return COWORK_ETDM_IN2_M;
+		case MT8188_AFE_IO_ETDM1_OUT:
+			return COWORK_ETDM_OUT1_M;
+		case MT8188_AFE_IO_ETDM2_OUT:
+			return COWORK_ETDM_OUT2_M;
+		case MT8188_AFE_IO_ETDM3_OUT:
+			return COWORK_ETDM_OUT3_M;
+		default:
+			return -EINVAL;
+		}
+	}
+}
+
+static int etdm_cowork_sync_sel(int id)
+{
+	switch (id) {
+	case MT8188_AFE_IO_ETDM1_IN:
+		return ETDM_SYNC_FROM_IN1;
+	case MT8188_AFE_IO_ETDM2_IN:
+		return ETDM_SYNC_FROM_IN2;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		return ETDM_SYNC_FROM_OUT1;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		return ETDM_SYNC_FROM_OUT2;
+	case MT8188_AFE_IO_ETDM3_OUT:
+		return ETDM_SYNC_FROM_OUT3;
+	default:
+		return -EINVAL;
+	}
+}
+
+static int mt8188_etdm_sync_mode_slv(struct mtk_base_afe *afe, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	unsigned int reg = 0;
+	unsigned int mask;
+	unsigned int val;
+	int cowork_source_sel;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+
+	cowork_source_sel = etdm_cowork_slv_sel(etdm_data->cowork_source_id,
+						true);
+	if (cowork_source_sel < 0)
+		return cowork_source_sel;
+
+	switch (dai_id) {
+	case MT8188_AFE_IO_ETDM1_IN:
+		reg = ETDM_COWORK_CON1;
+		mask = ETDM_IN1_SLAVE_SEL_MASK;
+		val = FIELD_PREP(ETDM_IN1_SLAVE_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		reg = ETDM_COWORK_CON2;
+		mask = ETDM_IN2_SLAVE_SEL_MASK;
+		val = FIELD_PREP(ETDM_IN2_SLAVE_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		reg = ETDM_COWORK_CON0;
+		mask = ETDM_OUT1_SLAVE_SEL_MASK;
+		val = FIELD_PREP(ETDM_OUT1_SLAVE_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		reg = ETDM_COWORK_CON2;
+		mask = ETDM_OUT2_SLAVE_SEL_MASK;
+		val = FIELD_PREP(ETDM_OUT2_SLAVE_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM3_OUT:
+		reg = ETDM_COWORK_CON2;
+		mask = ETDM_OUT3_SLAVE_SEL_MASK;
+		val = FIELD_PREP(ETDM_OUT3_SLAVE_SEL_MASK, cowork_source_sel);
+		break;
+	default:
+		return 0;
+	}
+
+	regmap_update_bits(afe->regmap, reg, mask, val);
+
+	return 0;
+}
+
+static int mt8188_etdm_sync_mode_mst(struct mtk_base_afe *afe, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	struct etdm_con_reg etdm_reg;
+	unsigned int reg = 0;
+	unsigned int mask;
+	unsigned int val;
+	int cowork_source_sel;
+	int ret;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+
+	cowork_source_sel = etdm_cowork_sync_sel(etdm_data->cowork_source_id);
+	if (cowork_source_sel < 0)
+		return cowork_source_sel;
+
+	switch (dai_id) {
+	case MT8188_AFE_IO_ETDM1_IN:
+		reg = ETDM_COWORK_CON1;
+		mask = ETDM_IN1_SYNC_SEL_MASK;
+		val = FIELD_PREP(ETDM_IN1_SYNC_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		reg = ETDM_COWORK_CON2;
+		mask = ETDM_IN2_SYNC_SEL_MASK;
+		val = FIELD_PREP(ETDM_IN2_SYNC_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		reg = ETDM_COWORK_CON0;
+		mask = ETDM_OUT1_SYNC_SEL_MASK;
+		val = FIELD_PREP(ETDM_OUT1_SYNC_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		reg = ETDM_COWORK_CON2;
+		mask = ETDM_OUT2_SYNC_SEL_MASK;
+		val = FIELD_PREP(ETDM_OUT2_SYNC_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM3_OUT:
+		reg = ETDM_COWORK_CON2;
+		mask = ETDM_OUT3_SYNC_SEL_MASK;
+		val = FIELD_PREP(ETDM_OUT3_SYNC_SEL_MASK, cowork_source_sel);
+		break;
+	default:
+		return 0;
+	}
+
+	ret = get_etdm_reg(dai_id, &etdm_reg);
+	if (ret < 0)
+		return ret;
+
+	regmap_update_bits(afe->regmap, reg, mask, val);
+
+	regmap_set_bits(afe->regmap, etdm_reg.con0, ETDM_CON0_SYNC_MODE);
+
+	return 0;
+}
+
+static int mt8188_etdm_sync_mode_configure(struct mtk_base_afe *afe, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+
+	if (etdm_data->cowork_source_id == COWORK_ETDM_NONE)
+		return 0;
+
+	if (etdm_data->slave_mode)
+		mt8188_etdm_sync_mode_slv(afe, dai_id);
+	else
+		mt8188_etdm_sync_mode_mst(afe, dai_id);
+
+	return 0;
+}
+
+/* dai ops */
+static int mtk_dai_etdm_startup(struct snd_pcm_substream *substream,
+				struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *mst_etdm_data;
+	int cg_id;
+	int mst_dai_id;
+	int slv_dai_id;
+	int i;
+
+	if (is_cowork_mode(dai)) {
+		mst_dai_id = get_etdm_cowork_master_id(dai);
+		if (!is_valid_etdm_dai(mst_dai_id))
+			return -EINVAL;
+		mtk_dai_etdm_enable_mclk(afe, mst_dai_id);
+
+		cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(mst_dai_id);
+		if (cg_id >= 0)
+			mt8188_afe_enable_clk(afe, afe_priv->clk[cg_id]);
+
+		mst_etdm_data = afe_priv->dai_priv[mst_dai_id];
+
+		for (i = 0; i < mst_etdm_data->cowork_slv_count; i++) {
+			slv_dai_id = mst_etdm_data->cowork_slv_id[i];
+			cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(slv_dai_id);
+			if (cg_id >= 0)
+				mt8188_afe_enable_clk(afe,
+						      afe_priv->clk[cg_id]);
+		}
+	} else {
+		mtk_dai_etdm_enable_mclk(afe, dai->id);
+
+		cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(dai->id);
+		if (cg_id >= 0)
+			mt8188_afe_enable_clk(afe, afe_priv->clk[cg_id]);
+	}
+
+	return 0;
+}
+
+static void mtk_dai_etdm_shutdown(struct snd_pcm_substream *substream,
+				  struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *mst_etdm_data = afe_priv->dai_priv[dai->id];
+	int cg_id;
+	int mst_dai_id;
+	int slv_dai_id;
+	int i;
+	int ret = 0;
+
+	dev_dbg(afe->dev, "%s(), dai id %d, prepared %d\n", __func__, dai->id,
+		mst_etdm_data->is_prepared);
+
+	if (mst_etdm_data->is_prepared) {
+		mst_etdm_data->is_prepared = false;
+
+		if (is_cowork_mode(dai)) {
+			mst_dai_id = get_etdm_cowork_master_id(dai);
+			if (!is_valid_etdm_dai(mst_dai_id))
+				return;
+			mst_etdm_data = afe_priv->dai_priv[mst_dai_id];
+
+			ret |= mt8188_afe_disable_etdm(afe, mst_dai_id);
+			for (i = 0; i < mst_etdm_data->cowork_slv_count; i++) {
+				slv_dai_id = mst_etdm_data->cowork_slv_id[i];
+				ret |= mt8188_afe_disable_etdm(afe, slv_dai_id);
+			}
+		} else {
+			ret = mt8188_afe_disable_etdm(afe, dai->id);
+		}
+
+		if (ret)
+			dev_dbg(afe->dev, "%s disable failed\n", __func__);
+	}
+
+	if (is_cowork_mode(dai)) {
+		mst_dai_id = get_etdm_cowork_master_id(dai);
+		if (!is_valid_etdm_dai(mst_dai_id))
+			return;
+		cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(mst_dai_id);
+		if (cg_id >= 0)
+			mt8188_afe_disable_clk(afe, afe_priv->clk[cg_id]);
+
+		mst_etdm_data = afe_priv->dai_priv[mst_dai_id];
+		for (i = 0; i < mst_etdm_data->cowork_slv_count; i++) {
+			slv_dai_id = mst_etdm_data->cowork_slv_id[i];
+			cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(slv_dai_id);
+			if (cg_id >= 0)
+				mt8188_afe_disable_clk(afe,
+						       afe_priv->clk[cg_id]);
+		}
+		mtk_dai_etdm_disable_mclk(afe, mst_dai_id);
+	} else {
+		cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(dai->id);
+		if (cg_id >= 0)
+			mt8188_afe_disable_clk(afe, afe_priv->clk[cg_id]);
+
+		mtk_dai_etdm_disable_mclk(afe, dai->id);
+	}
+}
+
+static int mtk_dai_etdm_fifo_mode(struct mtk_base_afe *afe,
+				  int dai_id, unsigned int rate)
+{
+	unsigned int mode = 0;
+	unsigned int reg = 0;
+	unsigned int val = 0;
+	unsigned int mask = (ETDM_IN_AFIFO_MODE_MASK | ETDM_IN_USE_AFIFO);
+
+	if (rate != 0)
+		mode = mt8188_afe_fs_timing(rate);
+
+	switch (dai_id) {
+	case MT8188_AFE_IO_ETDM1_IN:
+		reg = ETDM_IN1_AFIFO_CON;
+		if (rate == 0)
+			mode = MT8188_ETDM_IN1_1X_EN;
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		reg = ETDM_IN2_AFIFO_CON;
+		if (rate == 0)
+			mode = MT8188_ETDM_IN2_1X_EN;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	val = (mode | ETDM_IN_USE_AFIFO);
+
+	regmap_update_bits(afe->regmap, reg, mask, val);
+	return 0;
+}
+
+static int mtk_dai_etdm_in_configure(struct mtk_base_afe *afe,
+				     unsigned int rate,
+				     unsigned int channels,
+				     int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data = afe_priv->dai_priv[dai_id];
+	struct etdm_con_reg etdm_reg;
+	bool slave_mode = etdm_data->slave_mode;
+	unsigned int data_mode = etdm_data->data_mode;
+	unsigned int lrck_width = etdm_data->lrck_width;
+	unsigned int val = 0;
+	unsigned int mask = 0;
+	int i;
+	int ret;
+
+	dev_dbg(afe->dev, "%s rate %u channels %u, id %d\n",
+		__func__, rate, channels, dai_id);
+
+	ret = get_etdm_reg(dai_id, &etdm_reg);
+	if (ret < 0)
+		return ret;
+
+	/* afifo */
+	if (slave_mode)
+		mtk_dai_etdm_fifo_mode(afe, dai_id, 0);
+	else
+		mtk_dai_etdm_fifo_mode(afe, dai_id, rate);
+
+	/* con1 */
+	if (lrck_width > 0) {
+		mask |= (ETDM_IN_CON1_LRCK_AUTO_MODE |
+			ETDM_IN_CON1_LRCK_WIDTH_MASK);
+		val |= FIELD_PREP(ETDM_IN_CON1_LRCK_WIDTH_MASK, lrck_width - 1);
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con1, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	/* con2 */
+	if (!slave_mode) {
+		mask |= ETDM_IN_CON2_UPDATE_GAP_MASK;
+		if (rate == 352800 || rate == 384000)
+			val |= FIELD_PREP(ETDM_IN_CON2_UPDATE_GAP_MASK, 4);
+		else
+			val |= FIELD_PREP(ETDM_IN_CON2_UPDATE_GAP_MASK, 3);
+	}
+	mask |= (ETDM_IN_CON2_MULTI_IP_2CH_MODE |
+		ETDM_IN_CON2_MULTI_IP_TOTAL_CH_MASK);
+	if (data_mode == MTK_DAI_ETDM_DATA_MULTI_PIN) {
+		val |= ETDM_IN_CON2_MULTI_IP_2CH_MODE |
+		       FIELD_PREP(ETDM_IN_CON2_MULTI_IP_TOTAL_CH_MASK, channels - 1);
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con2, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	/* con3 */
+	mask |= ETDM_IN_CON3_DISABLE_OUT_MASK;
+	for (i = 0; i < channels; i += 2) {
+		if (etdm_data->in_disable_ch[i] &&
+		    etdm_data->in_disable_ch[i + 1])
+			val |= ETDM_IN_CON3_DISABLE_OUT(i >> 1);
+	}
+	if (!slave_mode) {
+		mask |= ETDM_IN_CON3_FS_MASK;
+		val |= FIELD_PREP(ETDM_IN_CON3_FS_MASK, get_etdm_fs_timing(rate));
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con3, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	/* con4 */
+	mask |= (ETDM_IN_CON4_MASTER_LRCK_INV | ETDM_IN_CON4_MASTER_BCK_INV |
+		ETDM_IN_CON4_SLAVE_LRCK_INV | ETDM_IN_CON4_SLAVE_BCK_INV);
+	if (slave_mode) {
+		if (etdm_data->lrck_inv)
+			val |= ETDM_IN_CON4_SLAVE_LRCK_INV;
+		if (etdm_data->bck_inv)
+			val |= ETDM_IN_CON4_SLAVE_BCK_INV;
+	} else {
+		if (etdm_data->lrck_inv)
+			val |= ETDM_IN_CON4_MASTER_LRCK_INV;
+		if (etdm_data->bck_inv)
+			val |= ETDM_IN_CON4_MASTER_BCK_INV;
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con4, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	/* con5 */
+	mask |= ETDM_IN_CON5_LR_SWAP_MASK;
+	mask |= ETDM_IN_CON5_ENABLE_ODD_MASK;
+	for (i = 0; i < channels; i += 2) {
+		if (etdm_data->in_disable_ch[i] &&
+		    !etdm_data->in_disable_ch[i + 1]) {
+			val |= ETDM_IN_CON5_LR_SWAP(i >> 1);
+			val |= ETDM_IN_CON5_ENABLE_ODD(i >> 1);
+		} else if (!etdm_data->in_disable_ch[i] &&
+			   etdm_data->in_disable_ch[i + 1]) {
+			val |= ETDM_IN_CON5_ENABLE_ODD(i >> 1);
+		}
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con5, mask, val);
+	return 0;
+}
+
+static int mtk_dai_etdm_out_configure(struct mtk_base_afe *afe,
+				      unsigned int rate,
+				      unsigned int channels,
+				      int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data = afe_priv->dai_priv[dai_id];
+	struct etdm_con_reg etdm_reg;
+	bool slave_mode = etdm_data->slave_mode;
+	unsigned int lrck_width = etdm_data->lrck_width;
+	unsigned int val = 0;
+	unsigned int mask = 0;
+	int ret;
+	int fs = 0;
+
+	dev_dbg(afe->dev, "%s rate %u channels %u, id %d\n",
+		__func__, rate, channels, dai_id);
+
+	ret = get_etdm_reg(dai_id, &etdm_reg);
+	if (ret < 0)
+		return ret;
+
+	/* con0 */
+	mask = ETDM_OUT_CON0_RELATCH_DOMAIN_MASK;
+	val = FIELD_PREP(ETDM_OUT_CON0_RELATCH_DOMAIN_MASK,
+			 ETDM_RELATCH_TIMING_A1A2SYS);
+	regmap_update_bits(afe->regmap, etdm_reg.con0, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	/* con1 */
+	if (lrck_width > 0) {
+		mask |= (ETDM_OUT_CON1_LRCK_AUTO_MODE |
+			ETDM_OUT_CON1_LRCK_WIDTH_MASK);
+		val |= FIELD_PREP(ETDM_OUT_CON1_LRCK_WIDTH_MASK, lrck_width - 1);
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con1, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	if (!slave_mode) {
+		/* con4 */
+		mask |= ETDM_OUT_CON4_FS_MASK;
+		val |= FIELD_PREP(ETDM_OUT_CON4_FS_MASK, get_etdm_fs_timing(rate));
+	}
+
+	mask |= ETDM_OUT_CON4_RELATCH_EN_MASK;
+	if (dai_id == MT8188_AFE_IO_ETDM1_OUT)
+		fs = MT8188_ETDM_OUT1_1X_EN;
+	else if (dai_id == MT8188_AFE_IO_ETDM2_OUT)
+		fs = MT8188_ETDM_OUT2_1X_EN;
+
+	val |= FIELD_PREP(ETDM_OUT_CON4_RELATCH_EN_MASK, fs);
+
+	regmap_update_bits(afe->regmap, etdm_reg.con4, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	/* con5 */
+	mask |= (ETDM_OUT_CON5_MASTER_LRCK_INV | ETDM_OUT_CON5_MASTER_BCK_INV |
+		ETDM_OUT_CON5_SLAVE_LRCK_INV | ETDM_OUT_CON5_SLAVE_BCK_INV);
+	if (slave_mode) {
+		if (etdm_data->lrck_inv)
+			val |= ETDM_OUT_CON5_SLAVE_LRCK_INV;
+		if (etdm_data->bck_inv)
+			val |= ETDM_OUT_CON5_SLAVE_BCK_INV;
+	} else {
+		if (etdm_data->lrck_inv)
+			val |= ETDM_OUT_CON5_MASTER_LRCK_INV;
+		if (etdm_data->bck_inv)
+			val |= ETDM_OUT_CON5_MASTER_BCK_INV;
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con5, mask, val);
+
+	return 0;
+}
+
+static int mtk_dai_etdm_mclk_configure(struct mtk_base_afe *afe, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data = afe_priv->dai_priv[dai_id];
+	int clk_id = mtk_dai_etdm_get_clk_id_by_dai_id(dai_id);
+	int clkdiv_id = mtk_dai_etdm_get_clkdiv_id_by_dai_id(dai_id);
+	int apll;
+	int apll_clk_id;
+	struct etdm_con_reg etdm_reg;
+	int ret = 0;
+
+	if (clk_id < 0 || clkdiv_id < 0)
+		return 0;
+
+	ret = get_etdm_reg(dai_id, &etdm_reg);
+	if (ret < 0)
+		return ret;
+
+	if (etdm_data->mclk_dir == SND_SOC_CLOCK_OUT)
+		regmap_set_bits(afe->regmap, etdm_reg.con1,
+				ETDM_CON1_MCLK_OUTPUT);
+	else
+		regmap_clear_bits(afe->regmap, etdm_reg.con1,
+				  ETDM_CON1_MCLK_OUTPUT);
+
+	if (etdm_data->mclk_freq) {
+		apll = etdm_data->mclk_apll;
+		apll_clk_id = mt8188_afe_get_mclk_source_clk_id(apll);
+		if (apll_clk_id < 0)
+			return apll_clk_id;
+
+		/* select apll */
+		ret = mt8188_afe_set_clk_parent(afe, afe_priv->clk[clk_id],
+						afe_priv->clk[apll_clk_id]);
+		if (ret)
+			return ret;
+
+		/* set rate */
+		ret = mt8188_afe_set_clk_rate(afe, afe_priv->clk[clkdiv_id],
+					      etdm_data->mclk_freq);
+	} else {
+		if (etdm_data->mclk_dir == SND_SOC_CLOCK_OUT)
+			dev_dbg(afe->dev, "%s mclk freq = 0\n", __func__);
+	}
+
+	return ret;
+}
+
+static int mtk_dai_etdm_configure(struct mtk_base_afe *afe,
+				  unsigned int rate,
+				  unsigned int channels,
+				  unsigned int bit_width,
+				  int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data = afe_priv->dai_priv[dai_id];
+	struct etdm_con_reg etdm_reg;
+	bool slave_mode = etdm_data->slave_mode;
+	unsigned int etdm_channels;
+	unsigned int val = 0;
+	unsigned int mask = 0;
+	unsigned int bck;
+	unsigned int wlen = get_etdm_wlen(bit_width);
+	int ret;
+
+	ret = get_etdm_reg(dai_id, &etdm_reg);
+	if (ret < 0)
+		return ret;
+
+	dev_dbg(afe->dev, "%s fmt %u data %u lrck %d-%u bck %d, clock %u slv %u\n",
+		__func__, etdm_data->format, etdm_data->data_mode,
+		etdm_data->lrck_inv, etdm_data->lrck_width, etdm_data->bck_inv,
+		etdm_data->clock_mode, etdm_data->slave_mode);
+	dev_dbg(afe->dev, "%s rate %u channels %u bitwidth %u, id %d\n",
+		__func__, rate, channels, bit_width, dai_id);
+
+	etdm_channels = (etdm_data->data_mode == MTK_DAI_ETDM_DATA_ONE_PIN) ?
+			get_etdm_ch_fixup(channels) : 2;
+
+	bck = rate * etdm_channels * wlen;
+	if (bck > MT8188_ETDM_NORMAL_MAX_BCK_RATE) {
+		dev_info(afe->dev, "%s bck rate %u not support\n",
+			 __func__, bck);
+		return -EINVAL;
+	}
+
+	/* con0 */
+	mask |= ETDM_CON0_BIT_LEN_MASK;
+	val |= FIELD_PREP(ETDM_CON0_BIT_LEN_MASK, bit_width - 1);
+	mask |= ETDM_CON0_WORD_LEN_MASK;
+	val |= FIELD_PREP(ETDM_CON0_WORD_LEN_MASK, wlen - 1);
+	mask |= ETDM_CON0_FORMAT_MASK;
+	val |= FIELD_PREP(ETDM_CON0_FORMAT_MASK, etdm_data->format);
+	mask |= ETDM_CON0_CH_NUM_MASK;
+	val |= FIELD_PREP(ETDM_CON0_CH_NUM_MASK, etdm_channels - 1);
+
+	mask |= ETDM_CON0_SLAVE_MODE;
+	if (slave_mode) {
+		if (dai_id == MT8188_AFE_IO_ETDM1_OUT) {
+			dev_info(afe->dev, "%s id %d only support master mode\n",
+				 __func__, dai_id);
+			return -EINVAL;
+		}
+		val |= ETDM_CON0_SLAVE_MODE;
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con0, mask, val);
+
+	if (get_etdm_dir(dai_id) == ETDM_IN)
+		mtk_dai_etdm_in_configure(afe, rate, channels, dai_id);
+	else
+		mtk_dai_etdm_out_configure(afe, rate, channels, dai_id);
+
+	return 0;
+}
+
+static int mtk_dai_etdm_hw_params(struct snd_pcm_substream *substream,
+				  struct snd_pcm_hw_params *params,
+				  struct snd_soc_dai *dai)
+{
+	int ret = 0;
+	unsigned int rate = params_rate(params);
+	unsigned int bit_width = params_width(params);
+	unsigned int channels = params_channels(params);
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *mst_etdm_data;
+	int mst_dai_id;
+	int slv_dai_id;
+	int i;
+
+	dev_dbg(afe->dev, "%s '%s' period %u-%u\n",
+		__func__, snd_pcm_stream_str(substream),
+		params_period_size(params), params_periods(params));
+
+	if (is_cowork_mode(dai)) {
+		mst_dai_id = get_etdm_cowork_master_id(dai);
+
+		ret = mtk_dai_etdm_mclk_configure(afe, mst_dai_id);
+		if (ret)
+			return ret;
+
+		ret = mtk_dai_etdm_configure(afe, rate, channels,
+					     bit_width, mst_dai_id);
+		if (ret)
+			return ret;
+
+		mst_etdm_data = afe_priv->dai_priv[mst_dai_id];
+		for (i = 0; i < mst_etdm_data->cowork_slv_count; i++) {
+			slv_dai_id = mst_etdm_data->cowork_slv_id[i];
+			ret = mtk_dai_etdm_configure(afe, rate, channels,
+						     bit_width, slv_dai_id);
+			if (ret)
+				return ret;
+
+			ret = mt8188_etdm_sync_mode_configure(afe, slv_dai_id);
+			if (ret)
+				return ret;
+		}
+	} else {
+		ret = mtk_dai_etdm_mclk_configure(afe, dai->id);
+		if (ret)
+			return ret;
+
+		ret = mtk_dai_etdm_configure(afe, rate, channels,
+					     bit_width, dai->id);
+	}
+
+	return ret;
+}
+
+static int mtk_dai_etdm_prepare(struct snd_pcm_substream *substream,
+				struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *mst_etdm_data;
+	int mst_dai_id;
+	int slv_dai_id;
+	int i;
+	int ret = 0;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	mst_etdm_data = afe_priv->dai_priv[dai->id];
+
+	dev_dbg(afe->dev, "%s(), dai id %d, prepared %d\n", __func__, dai->id,
+		mst_etdm_data->is_prepared);
+
+	if (mst_etdm_data->is_prepared)
+		return 0;
+
+	mst_etdm_data->is_prepared = true;
+
+	if (is_cowork_mode(dai)) {
+		mst_dai_id = get_etdm_cowork_master_id(dai);
+		mst_etdm_data = afe_priv->dai_priv[mst_dai_id];
+
+		for (i = 0; i < mst_etdm_data->cowork_slv_count; i++) {
+			slv_dai_id = mst_etdm_data->cowork_slv_id[i];
+			ret |= mt8188_afe_enable_etdm(afe, slv_dai_id);
+		}
+
+		ret |= mt8188_afe_enable_etdm(afe, mst_dai_id);
+	} else {
+		ret = mt8188_afe_enable_etdm(afe, dai->id);
+	}
+
+	return ret;
+}
+
+static int mtk_dai_etdm_cal_mclk(struct mtk_base_afe *afe, int freq, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	int apll;
+	int apll_rate;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+
+	if (freq == 0) {
+		etdm_data->mclk_freq = freq;
+		return 0;
+	}
+
+	if (etdm_data->mclk_fixed_apll == 0)
+		apll = mt8188_afe_get_default_mclk_source_by_rate(freq);
+	else
+		apll = etdm_data->mclk_apll;
+
+	apll_rate = mt8188_afe_get_mclk_source_rate(afe, apll);
+
+	if (freq > apll_rate) {
+		dev_info(afe->dev, "freq %d > apll rate %d\n", freq, apll_rate);
+		return -EINVAL;
+	}
+
+	if (apll_rate % freq != 0) {
+		dev_info(afe->dev, "APLL%d cannot generate freq Hz\n", apll);
+		return -EINVAL;
+	}
+
+	if (etdm_data->mclk_fixed_apll == 0)
+		etdm_data->mclk_apll = apll;
+	etdm_data->mclk_freq = freq;
+
+	return 0;
+}
+
+static int mtk_dai_etdm_set_sysclk(struct snd_soc_dai *dai,
+				   int clk_id, unsigned int freq, int dir)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	int dai_id;
+
+	dev_dbg(dai->dev, "%s id %d freq %u, dir %d\n",
+		__func__, dai->id, freq, dir);
+	if (is_cowork_mode(dai))
+		dai_id = get_etdm_cowork_master_id(dai);
+	else
+		dai_id = dai->id;
+
+	etdm_data = afe_priv->dai_priv[dai_id];
+	etdm_data->mclk_dir = dir;
+	return mtk_dai_etdm_cal_mclk(afe, freq, dai_id);
+}
+
+static int mtk_dai_etdm_set_tdm_slot(struct snd_soc_dai *dai,
+				     unsigned int tx_mask, unsigned int rx_mask,
+				     int slots, int slot_width)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	dev_dbg(dai->dev, "%s id %d slot_width %d\n",
+		__func__, dai->id, slot_width);
+
+	etdm_data->slots = slots;
+	etdm_data->lrck_width = slot_width;
+	return 0;
+}
+
+static int mtk_dai_etdm_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+	case SND_SOC_DAIFMT_I2S:
+		etdm_data->format = MTK_DAI_ETDM_FORMAT_I2S;
+		break;
+	case SND_SOC_DAIFMT_LEFT_J:
+		etdm_data->format = MTK_DAI_ETDM_FORMAT_LJ;
+		break;
+	case SND_SOC_DAIFMT_RIGHT_J:
+		etdm_data->format = MTK_DAI_ETDM_FORMAT_RJ;
+		break;
+	case SND_SOC_DAIFMT_DSP_A:
+		etdm_data->format = MTK_DAI_ETDM_FORMAT_DSPA;
+		break;
+	case SND_SOC_DAIFMT_DSP_B:
+		etdm_data->format = MTK_DAI_ETDM_FORMAT_DSPB;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+	case SND_SOC_DAIFMT_NB_NF:
+		etdm_data->bck_inv = false;
+		etdm_data->lrck_inv = false;
+		break;
+	case SND_SOC_DAIFMT_NB_IF:
+		etdm_data->bck_inv = false;
+		etdm_data->lrck_inv = true;
+		break;
+	case SND_SOC_DAIFMT_IB_NF:
+		etdm_data->bck_inv = true;
+		etdm_data->lrck_inv = false;
+		break;
+	case SND_SOC_DAIFMT_IB_IF:
+		etdm_data->bck_inv = true;
+		etdm_data->lrck_inv = true;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
+	case SND_SOC_DAIFMT_BC_FC:
+		etdm_data->slave_mode = true;
+		break;
+	case SND_SOC_DAIFMT_BP_FP:
+		etdm_data->slave_mode = false;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int mtk_dai_hdmitx_dptx_startup(struct snd_pcm_substream *substream,
+				       struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	int cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(dai->id);
+
+	if (cg_id >= 0)
+		mt8188_afe_enable_clk(afe, afe_priv->clk[cg_id]);
+
+	mtk_dai_etdm_enable_mclk(afe, dai->id);
+
+	return 0;
+}
+
+static void mtk_dai_hdmitx_dptx_shutdown(struct snd_pcm_substream *substream,
+					 struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	int cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(dai->id);
+	struct mtk_dai_etdm_priv *etdm_data;
+	int ret = 0;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	if (etdm_data->is_prepared) {
+		etdm_data->is_prepared = false;
+		/* disable etdm_out3 */
+		ret = mt8188_afe_disable_etdm(afe, dai->id);
+
+		if (ret)
+			dev_dbg(afe->dev, "%s disable failed\n", __func__);
+
+		/* disable dptx interface */
+		if (dai->id == MT8188_AFE_IO_DPTX)
+			regmap_clear_bits(afe->regmap, AFE_DPTX_CON,
+					  AFE_DPTX_CON_ON);
+	}
+
+	mtk_dai_etdm_disable_mclk(afe, dai->id);
+
+	if (cg_id >= 0)
+		mt8188_afe_disable_clk(afe, afe_priv->clk[cg_id]);
+}
+
+static unsigned int mtk_dai_get_dptx_ch_en(unsigned int channel)
+{
+	switch (channel) {
+	case 1 ... 2:
+		return AFE_DPTX_CON_CH_EN_2CH;
+	case 3 ... 4:
+		return AFE_DPTX_CON_CH_EN_4CH;
+	case 5 ... 6:
+		return AFE_DPTX_CON_CH_EN_6CH;
+	case 7 ... 8:
+		return AFE_DPTX_CON_CH_EN_8CH;
+	default:
+		return AFE_DPTX_CON_CH_EN_2CH;
+	}
+}
+
+static unsigned int mtk_dai_get_dptx_ch(unsigned int ch)
+{
+	return (ch > 2) ?
+		AFE_DPTX_CON_CH_NUM_8CH : AFE_DPTX_CON_CH_NUM_2CH;
+}
+
+static unsigned int mtk_dai_get_dptx_wlen(snd_pcm_format_t format)
+{
+	return snd_pcm_format_physical_width(format) <= 16 ?
+		AFE_DPTX_CON_16BIT : AFE_DPTX_CON_24BIT;
+}
+
+static int mtk_dai_hdmitx_dptx_hw_params(struct snd_pcm_substream *substream,
+					 struct snd_pcm_hw_params *params,
+					 struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	unsigned int rate = params_rate(params);
+	unsigned int channels = params_channels(params);
+	snd_pcm_format_t format = params_format(params);
+	int width = snd_pcm_format_physical_width(format);
+	int ret = 0;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	/* dptx configure */
+	if (dai->id == MT8188_AFE_IO_DPTX) {
+		regmap_update_bits(afe->regmap, AFE_DPTX_CON,
+				   AFE_DPTX_CON_CH_EN_MASK,
+				   mtk_dai_get_dptx_ch_en(channels));
+		regmap_update_bits(afe->regmap, AFE_DPTX_CON,
+				   AFE_DPTX_CON_CH_NUM_MASK,
+				   mtk_dai_get_dptx_ch(channels));
+		regmap_update_bits(afe->regmap, AFE_DPTX_CON,
+				   AFE_DPTX_CON_16BIT_MASK,
+				   mtk_dai_get_dptx_wlen(format));
+
+		if (mtk_dai_get_dptx_ch(channels) == AFE_DPTX_CON_CH_NUM_8CH) {
+			etdm_data->data_mode = MTK_DAI_ETDM_DATA_ONE_PIN;
+			channels = 8;
+		} else {
+			channels = 2;
+		}
+	} else {
+		etdm_data->data_mode = MTK_DAI_ETDM_DATA_MULTI_PIN;
+	}
+
+	ret = mtk_dai_etdm_mclk_configure(afe, dai->id);
+	if (ret)
+		return ret;
+
+	ret = mtk_dai_etdm_configure(afe, rate, channels, width, dai->id);
+
+	return ret;
+}
+
+static int mtk_dai_hdmitx_dptx_prepare(struct snd_pcm_substream *substream,
+				       struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	int ret = 0;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	dev_dbg(afe->dev, "%s(), dai id %d, prepared %d\n", __func__, dai->id,
+		etdm_data->is_prepared);
+
+	if (etdm_data->is_prepared)
+		return 0;
+
+	etdm_data->is_prepared = true;
+
+	/* enable dptx interface */
+	if (dai->id == MT8188_AFE_IO_DPTX)
+		regmap_set_bits(afe->regmap, AFE_DPTX_CON, AFE_DPTX_CON_ON);
+
+	/* enable etdm_out3 */
+	ret = mt8188_afe_enable_etdm(afe, dai->id);
+
+	return ret;
+}
+
+static int mtk_dai_hdmitx_dptx_set_sysclk(struct snd_soc_dai *dai,
+					  int clk_id,
+					  unsigned int freq,
+					  int dir)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	dev_dbg(dai->dev, "%s id %d freq %u, dir %d\n",
+		__func__, dai->id, freq, dir);
+
+	etdm_data->mclk_dir = dir;
+	return mtk_dai_etdm_cal_mclk(afe, freq, dai->id);
+}
+
+static const struct snd_soc_dai_ops mtk_dai_etdm_ops = {
+	.startup = mtk_dai_etdm_startup,
+	.shutdown = mtk_dai_etdm_shutdown,
+	.hw_params = mtk_dai_etdm_hw_params,
+	.prepare = mtk_dai_etdm_prepare,
+	.set_sysclk = mtk_dai_etdm_set_sysclk,
+	.set_fmt = mtk_dai_etdm_set_fmt,
+	.set_tdm_slot = mtk_dai_etdm_set_tdm_slot,
+};
+
+static const struct snd_soc_dai_ops mtk_dai_hdmitx_dptx_ops = {
+	.startup	= mtk_dai_hdmitx_dptx_startup,
+	.shutdown	= mtk_dai_hdmitx_dptx_shutdown,
+	.hw_params	= mtk_dai_hdmitx_dptx_hw_params,
+	.prepare	= mtk_dai_hdmitx_dptx_prepare,
+	.set_sysclk	= mtk_dai_hdmitx_dptx_set_sysclk,
+	.set_fmt	= mtk_dai_etdm_set_fmt,
+};
+
+/* dai driver */
+#define MTK_ETDM_RATES (SNDRV_PCM_RATE_8000_192000)
+
+#define MTK_ETDM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
+			  SNDRV_PCM_FMTBIT_S24_LE |\
+			  SNDRV_PCM_FMTBIT_S32_LE)
+
+static int mtk_dai_etdm_probe(struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	dev_dbg(dai->dev, "%s id %d\n", __func__, dai->id);
+
+	if (etdm_data->mclk_freq) {
+		dev_dbg(afe->dev, "MCLK always on, rate %d\n",
+			etdm_data->mclk_freq);
+		pm_runtime_get_sync(afe->dev);
+		mtk_dai_etdm_mclk_configure(afe, dai->id);
+		mtk_dai_etdm_enable_mclk(afe, dai->id);
+		pm_runtime_put_sync(afe->dev);
+	}
+	return 0;
+}
+
+static struct snd_soc_dai_driver mtk_dai_etdm_driver[] = {
+	{
+		.name = "DPTX",
+		.id = MT8188_AFE_IO_DPTX,
+		.playback = {
+			.stream_name = "DPTX",
+			.channels_min = 1,
+			.channels_max = 8,
+			.rates = MTK_ETDM_RATES,
+			.formats = MTK_ETDM_FORMATS,
+		},
+		.ops = &mtk_dai_hdmitx_dptx_ops,
+	},
+	{
+		.name = "ETDM1_IN",
+		.id = MT8188_AFE_IO_ETDM1_IN,
+		.capture = {
+			.stream_name = "ETDM1_IN",
+			.channels_min = 1,
+			.channels_max = 16,
+			.rates = MTK_ETDM_RATES,
+			.formats = MTK_ETDM_FORMATS,
+		},
+		.ops = &mtk_dai_etdm_ops,
+		.probe = mtk_dai_etdm_probe,
+	},
+	{
+		.name = "ETDM2_IN",
+		.id = MT8188_AFE_IO_ETDM2_IN,
+		.capture = {
+			.stream_name = "ETDM2_IN",
+			.channels_min = 1,
+			.channels_max = 16,
+			.rates = MTK_ETDM_RATES,
+			.formats = MTK_ETDM_FORMATS,
+		},
+		.ops = &mtk_dai_etdm_ops,
+		.probe = mtk_dai_etdm_probe,
+	},
+	{
+		.name = "ETDM1_OUT",
+		.id = MT8188_AFE_IO_ETDM1_OUT,
+		.playback = {
+			.stream_name = "ETDM1_OUT",
+			.channels_min = 1,
+			.channels_max = 16,
+			.rates = MTK_ETDM_RATES,
+			.formats = MTK_ETDM_FORMATS,
+		},
+		.ops = &mtk_dai_etdm_ops,
+		.probe = mtk_dai_etdm_probe,
+	},
+	{
+		.name = "ETDM2_OUT",
+		.id = MT8188_AFE_IO_ETDM2_OUT,
+		.playback = {
+			.stream_name = "ETDM2_OUT",
+			.channels_min = 1,
+			.channels_max = 16,
+			.rates = MTK_ETDM_RATES,
+			.formats = MTK_ETDM_FORMATS,
+		},
+		.ops = &mtk_dai_etdm_ops,
+		.probe = mtk_dai_etdm_probe,
+	},
+	{
+		.name = "ETDM3_OUT",
+		.id = MT8188_AFE_IO_ETDM3_OUT,
+		.playback = {
+			.stream_name = "ETDM3_OUT",
+			.channels_min = 1,
+			.channels_max = 8,
+			.rates = MTK_ETDM_RATES,
+			.formats = MTK_ETDM_FORMATS,
+		},
+		.ops = &mtk_dai_hdmitx_dptx_ops,
+		.probe = mtk_dai_etdm_probe,
+	},
+};
+
+static void mt8188_etdm_update_sync_info(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	struct mtk_dai_etdm_priv *mst_data;
+	int i;
+	int mst_dai_id;
+
+	for (i = MT8188_AFE_IO_ETDM_START; i < MT8188_AFE_IO_ETDM_END; i++) {
+		etdm_data = afe_priv->dai_priv[i];
+		if (etdm_data->cowork_source_id != COWORK_ETDM_NONE) {
+			mst_dai_id = etdm_data->cowork_source_id;
+			mst_data = afe_priv->dai_priv[mst_dai_id];
+			if (mst_data->cowork_source_id != COWORK_ETDM_NONE)
+				dev_info(afe->dev, "%s [%d] wrong sync source\n"
+					 , __func__, i);
+			mst_data->cowork_slv_id[mst_data->cowork_slv_count] = i;
+			mst_data->cowork_slv_count++;
+		}
+	}
+}
+
+static void mt8188_dai_etdm_parse_of(struct mtk_base_afe *afe)
+{
+	const struct device_node *of_node = afe->dev->of_node;
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	int i, j;
+	char prop[48];
+	u8 disable_chn[MT8188_ETDM_MAX_CHANNELS];
+	int max_chn = MT8188_ETDM_MAX_CHANNELS;
+	u32 sel;
+	int ret;
+	int dai_id;
+	unsigned int sync_id;
+	struct {
+		const char *name;
+		const unsigned int sync_id;
+	} of_afe_etdms[MT8188_AFE_IO_ETDM_NUM] = {
+		{"etdm-in1", ETDM_SYNC_FROM_IN1},
+		{"etdm-in2", ETDM_SYNC_FROM_IN2},
+		{"etdm-out1", ETDM_SYNC_FROM_OUT1},
+		{"etdm-out2", ETDM_SYNC_FROM_OUT2},
+		{"etdm-out3", ETDM_SYNC_FROM_OUT3},
+	};
+
+	for (i = 0; i < MT8188_AFE_IO_ETDM_NUM; i++) {
+		dai_id = ETDM_TO_DAI_ID(i);
+		etdm_data = afe_priv->dai_priv[dai_id];
+
+		ret = snprintf(prop, sizeof(prop),
+			       "mediatek,%s-mclk-always-on-rate",
+			       of_afe_etdms[i].name);
+		if (ret < 0) {
+			dev_info(afe->dev, "%s snprintf err=%d\n",
+				 __func__, ret);
+			return;
+		}
+		ret = of_property_read_u32(of_node, prop, &sel);
+		if (ret == 0) {
+			etdm_data->mclk_dir = SND_SOC_CLOCK_OUT;
+			if (mtk_dai_etdm_cal_mclk(afe, sel, dai_id))
+				dev_info(afe->dev, "%s unsupported mclk %uHz\n",
+					 __func__, sel);
+		}
+
+		ret = snprintf(prop, sizeof(prop),
+			       "mediatek,%s-multi-pin-mode",
+			       of_afe_etdms[i].name);
+		if (ret < 0) {
+			dev_info(afe->dev, "%s snprintf err=%d\n",
+				 __func__, ret);
+			return;
+		}
+		etdm_data->data_mode = of_property_read_bool(of_node, prop);
+
+		ret = snprintf(prop, sizeof(prop),
+			       "mediatek,%s-cowork-source",
+			       of_afe_etdms[i].name);
+		if (ret < 0) {
+			dev_info(afe->dev, "%s snprintf err=%d\n",
+				 __func__, ret);
+			return;
+		}
+		ret = of_property_read_u32(of_node, prop, &sel);
+		if (ret == 0) {
+			if (sel >= MT8188_AFE_IO_ETDM_NUM) {
+				dev_info(afe->dev, "%s invalid id=%d\n",
+					 __func__, sel);
+				etdm_data->cowork_source_id = COWORK_ETDM_NONE;
+			} else {
+				sync_id = of_afe_etdms[sel].sync_id;
+				etdm_data->cowork_source_id =
+					sync_to_dai_id(sync_id);
+			}
+		} else {
+			etdm_data->cowork_source_id = COWORK_ETDM_NONE;
+		}
+	}
+
+	/* etdm in only */
+	for (i = 0; i < 2; i++) {
+		ret = snprintf(prop, sizeof(prop),
+			       "mediatek,%s-chn-disabled",
+			       of_afe_etdms[i].name);
+		if (ret < 0) {
+			dev_info(afe->dev, "%s snprintf err=%d\n",
+				 __func__, ret);
+			return;
+		}
+		ret = of_property_read_variable_u8_array(of_node, prop,
+							 disable_chn,
+							 1, max_chn);
+		if (ret < 0)
+			continue;
+
+		for (j = 0; j < ret; j++) {
+			if (disable_chn[j] >= MT8188_ETDM_MAX_CHANNELS)
+				dev_info(afe->dev, "%s [%d] invalid chn %u\n",
+					 __func__, j, disable_chn[j]);
+			else
+				etdm_data->in_disable_ch[disable_chn[j]] = true;
+		}
+	}
+	mt8188_etdm_update_sync_info(afe);
+}
+
+static int init_etdm_priv_data(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_priv;
+	int i;
+
+	for (i = MT8188_AFE_IO_ETDM_START; i < MT8188_AFE_IO_ETDM_END; i++) {
+		etdm_priv = devm_kzalloc(afe->dev,
+					 sizeof(struct mtk_dai_etdm_priv),
+					 GFP_KERNEL);
+		if (!etdm_priv)
+			return -ENOMEM;
+
+		afe_priv->dai_priv[i] = etdm_priv;
+	}
+
+	afe_priv->dai_priv[MT8188_AFE_IO_DPTX] =
+		afe_priv->dai_priv[MT8188_AFE_IO_ETDM3_OUT];
+
+	mt8188_dai_etdm_parse_of(afe);
+	return 0;
+}
+
+int mt8188_dai_etdm_register(struct mtk_base_afe *afe)
+{
+	struct mtk_base_afe_dai *dai;
+
+	dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
+	if (!dai)
+		return -ENOMEM;
+
+	list_add(&dai->list, &afe->sub_dais);
+
+	dai->dai_drivers = mtk_dai_etdm_driver;
+	dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_etdm_driver);
+
+	dai->dapm_widgets = mtk_dai_etdm_widgets;
+	dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_etdm_widgets);
+	dai->dapm_routes = mtk_dai_etdm_routes;
+	dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_etdm_routes);
+	dai->controls = mtk_dai_etdm_controls;
+	dai->num_controls = ARRAY_SIZE(mtk_dai_etdm_controls);
+
+	return init_etdm_priv_data(afe);
+}
-- 
2.18.0



From trevor.wu at mediatek.com  Wed Dec  7 19:31:44 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Thu, 8 Dec 2022 11:31:44 +0800
Subject: [PATCH v3 08/12] ASoC: mediatek: mt8188: add platform driver
In-Reply-To: <20221208033148.21866-1-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
Message-ID: <20221208033148.21866-9-trevor.wu@mediatek.com>

Add mt8188 platform driver.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
Reported-by: kernel test robot <lkp at intel.com>
---
 sound/soc/mediatek/Kconfig                 |   13 +
 sound/soc/mediatek/Makefile                |    1 +
 sound/soc/mediatek/mt8188/Makefile         |   12 +
 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c | 2853 ++++++++++++++++++++
 4 files changed, 2879 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/Makefile
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c

diff --git a/sound/soc/mediatek/Kconfig b/sound/soc/mediatek/Kconfig
index 363fa4d47680..7b28a8043f72 100644
--- a/sound/soc/mediatek/Kconfig
+++ b/sound/soc/mediatek/Kconfig
@@ -206,6 +206,19 @@ config SND_SOC_MTK_BTCVSD
 	  Select Y if you have such device.
 	  If unsure select "N".
 
+config SND_SOC_MT8188
+	tristate "ASoC support for MediaTek MT8188 chip"
+	depends on ARCH_MEDIATEK || COMPILE_TEST
+	depends on COMMON_CLK
+	select SND_SOC_MEDIATEK
+	select SND_SOC_MT6359
+	select MFD_SYSCON if SND_SOC_MT6359
+	help
+	  This adds ASoC platform driver support for MediaTek MT8188 chip
+	  that can be used with other codecs.
+	  Select Y if you have such device.
+	  If unsure select "N".
+
 config SND_SOC_MT8192
 	tristate "ASoC support for Mediatek MT8192 chip"
 	depends on ARCH_MEDIATEK
diff --git a/sound/soc/mediatek/Makefile b/sound/soc/mediatek/Makefile
index 5571c640a288..3de38cfc69e5 100644
--- a/sound/soc/mediatek/Makefile
+++ b/sound/soc/mediatek/Makefile
@@ -5,5 +5,6 @@ obj-$(CONFIG_SND_SOC_MT6797) += mt6797/
 obj-$(CONFIG_SND_SOC_MT8173) += mt8173/
 obj-$(CONFIG_SND_SOC_MT8183) += mt8183/
 obj-$(CONFIG_SND_SOC_MT8186) += mt8186/
+obj-$(CONFIG_SND_SOC_MT8188) += mt8188/
 obj-$(CONFIG_SND_SOC_MT8192) += mt8192/
 obj-$(CONFIG_SND_SOC_MT8195) += mt8195/
diff --git a/sound/soc/mediatek/mt8188/Makefile b/sound/soc/mediatek/mt8188/Makefile
new file mode 100644
index 000000000000..fa5d383c5e47
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/Makefile
@@ -0,0 +1,12 @@
+# SPDX-License-Identifier: GPL-2.0
+
+# platform driver
+snd-soc-mt8188-afe-objs := \
+	mt8188-afe-clk.o \
+	mt8188-afe-pcm.o \
+	mt8188-audsys-clk.o \
+	mt8188-dai-adda.o \
+	mt8188-dai-etdm.o \
+	mt8188-dai-pcm.o
+
+obj-$(CONFIG_SND_SOC_MT8188) += snd-soc-mt8188-afe.o
diff --git a/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c b/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
new file mode 100644
index 000000000000..6bef980846fa
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
@@ -0,0 +1,2853 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MediaTek ALSA SoC AFE platform driver for 8188
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#include <linux/arm-smccc.h>
+#include <linux/delay.h>
+#include <linux/dma-mapping.h>
+#include <linux/module.h>
+#include <linux/mfd/syscon.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_platform.h>
+#include <linux/pm_runtime.h>
+#include <linux/reset.h>
+#include <sound/pcm_params.h>
+#include "mt8188-afe-common.h"
+#include "mt8188-afe-clk.h"
+#include "mt8188-reg.h"
+#include "../common/mtk-afe-platform-driver.h"
+#include "../common/mtk-afe-fe-dai.h"
+
+#define MT8188_MEMIF_BUFFER_BYTES_ALIGN  (0x40)
+#define MT8188_MEMIF_DL7_MAX_PERIOD_SIZE (0x3fff)
+
+#define MEMIF_AXI_MINLEN 9 /* register default value */
+
+struct mtk_dai_memif_priv {
+	unsigned int asys_timing_sel;
+	unsigned int fs_timing;
+};
+
+static const struct snd_pcm_hardware mt8188_afe_hardware = {
+	.info = SNDRV_PCM_INFO_MMAP |
+		SNDRV_PCM_INFO_INTERLEAVED |
+		SNDRV_PCM_INFO_MMAP_VALID,
+	.formats = SNDRV_PCM_FMTBIT_S16_LE |
+		   SNDRV_PCM_FMTBIT_S24_LE |
+		   SNDRV_PCM_FMTBIT_S32_LE,
+	.period_bytes_min = 64,
+	.period_bytes_max = 256 * 1024,
+	.periods_min = 2,
+	.periods_max = 256,
+	.buffer_bytes_max = 256 * 2 * 1024,
+};
+
+struct mt8188_afe_rate {
+	unsigned int rate;
+	unsigned int reg_value;
+};
+
+static const struct mt8188_afe_rate mt8188_afe_rates[] = {
+	{ .rate = 8000, .reg_value = 0, },
+	{ .rate = 12000, .reg_value = 1, },
+	{ .rate = 16000, .reg_value = 2, },
+	{ .rate = 24000, .reg_value = 3, },
+	{ .rate = 32000, .reg_value = 4, },
+	{ .rate = 48000, .reg_value = 5, },
+	{ .rate = 96000, .reg_value = 6, },
+	{ .rate = 192000, .reg_value = 7, },
+	{ .rate = 384000, .reg_value = 8, },
+	{ .rate = 7350, .reg_value = 16, },
+	{ .rate = 11025, .reg_value = 17, },
+	{ .rate = 14700, .reg_value = 18, },
+	{ .rate = 22050, .reg_value = 19, },
+	{ .rate = 29400, .reg_value = 20, },
+	{ .rate = 44100, .reg_value = 21, },
+	{ .rate = 88200, .reg_value = 22, },
+	{ .rate = 176400, .reg_value = 23, },
+	{ .rate = 352800, .reg_value = 24, },
+};
+
+int mt8188_afe_fs_timing(unsigned int rate)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(mt8188_afe_rates); i++)
+		if (mt8188_afe_rates[i].rate == rate)
+			return mt8188_afe_rates[i].reg_value;
+
+	return -EINVAL;
+}
+
+static int mt8188_memif_fs(struct snd_pcm_substream *substream,
+			   unsigned int rate)
+{
+	struct snd_soc_pcm_runtime *rtd = substream->private_data;
+	struct snd_soc_component *component = NULL;
+	struct mtk_base_afe *afe = NULL;
+	struct mt8188_afe_private *afe_priv = NULL;
+	struct mtk_base_afe_memif *memif = NULL;
+	struct mtk_dai_memif_priv *memif_priv = NULL;
+	int fs = mt8188_afe_fs_timing(rate);
+	int id = asoc_rtd_to_cpu(rtd, 0)->id;
+
+	if (id < 0)
+		return -EINVAL;
+
+	component = snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME);
+	if (!component)
+		return -EINVAL;
+
+	afe = snd_soc_component_get_drvdata(component);
+	memif = &afe->memif[id];
+
+	switch (memif->data->id) {
+	case MT8188_AFE_MEMIF_DL10:
+		fs = MT8188_ETDM_OUT3_1X_EN;
+		break;
+	case MT8188_AFE_MEMIF_UL8:
+		fs = MT8188_ETDM_IN1_NX_EN;
+		break;
+	case MT8188_AFE_MEMIF_UL3:
+		fs = MT8188_ETDM_IN2_NX_EN;
+		break;
+	default:
+		afe_priv = afe->platform_priv;
+		memif_priv = afe_priv->dai_priv[id];
+		if (memif_priv->fs_timing)
+			fs = memif_priv->fs_timing;
+		break;
+	}
+
+	return fs;
+}
+
+static int mt8188_irq_fs(struct snd_pcm_substream *substream,
+			 unsigned int rate)
+{
+	int fs = mt8188_memif_fs(substream, rate);
+
+	switch (fs) {
+	case MT8188_ETDM_IN1_NX_EN:
+		fs = MT8188_ETDM_IN1_1X_EN;
+		break;
+	case MT8188_ETDM_IN2_NX_EN:
+		fs = MT8188_ETDM_IN2_1X_EN;
+		break;
+	default:
+		break;
+	}
+
+	return fs;
+}
+
+enum {
+	MT8188_AFE_CM0,
+	MT8188_AFE_CM1,
+	MT8188_AFE_CM2,
+	MT8188_AFE_CM_NUM,
+};
+
+struct mt8188_afe_channel_merge {
+	int id;
+	int reg;
+	unsigned int sel_shift;
+	unsigned int sel_maskbit;
+	unsigned int sel_default;
+	unsigned int ch_num_shift;
+	unsigned int ch_num_maskbit;
+	unsigned int en_shift;
+	unsigned int en_maskbit;
+	unsigned int update_cnt_shift;
+	unsigned int update_cnt_maskbit;
+	unsigned int update_cnt_default;
+};
+
+static const struct mt8188_afe_channel_merge
+	mt8188_afe_cm[MT8188_AFE_CM_NUM] = {
+	[MT8188_AFE_CM0] = {
+		.id = MT8188_AFE_CM0,
+		.reg = AFE_CM0_CON,
+		.sel_shift = 30,
+		.sel_maskbit = 0x1,
+		.sel_default = 1,
+		.ch_num_shift = 2,
+		.ch_num_maskbit = 0x3f,
+		.en_shift = 0,
+		.en_maskbit = 0x1,
+		.update_cnt_shift = 16,
+		.update_cnt_maskbit = 0x1fff,
+		.update_cnt_default = 0x3,
+	},
+	[MT8188_AFE_CM1] = {
+		.id = MT8188_AFE_CM1,
+		.reg = AFE_CM1_CON,
+		.sel_shift = 30,
+		.sel_maskbit = 0x1,
+		.sel_default = 1,
+		.ch_num_shift = 2,
+		.ch_num_maskbit = 0x1f,
+		.en_shift = 0,
+		.en_maskbit = 0x1,
+		.update_cnt_shift = 16,
+		.update_cnt_maskbit = 0x1fff,
+		.update_cnt_default = 0x3,
+	},
+	[MT8188_AFE_CM2] = {
+		.id = MT8188_AFE_CM2,
+		.reg = AFE_CM2_CON,
+		.sel_shift = 30,
+		.sel_maskbit = 0x1,
+		.sel_default = 1,
+		.ch_num_shift = 2,
+		.ch_num_maskbit = 0x1f,
+		.en_shift = 0,
+		.en_maskbit = 0x1,
+		.update_cnt_shift = 16,
+		.update_cnt_maskbit = 0x1fff,
+		.update_cnt_default = 0x3,
+	},
+};
+
+static int mt8188_afe_memif_is_ul(int id)
+{
+	if (id >= MT8188_AFE_MEMIF_UL_START && id < MT8188_AFE_MEMIF_END)
+		return 1;
+	else
+		return 0;
+}
+
+static const struct mt8188_afe_channel_merge *
+	mt8188_afe_found_cm(struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	int id = -EINVAL;
+
+	if (mt8188_afe_memif_is_ul(dai->id) == 0)
+		return NULL;
+
+	switch (dai->id) {
+	case MT8188_AFE_MEMIF_UL9:
+		id = MT8188_AFE_CM0;
+		break;
+	case MT8188_AFE_MEMIF_UL2:
+		id = MT8188_AFE_CM1;
+		break;
+	case MT8188_AFE_MEMIF_UL10:
+		id = MT8188_AFE_CM2;
+		break;
+	default:
+		break;
+	}
+
+	if (id < 0) {
+		dev_dbg(afe->dev, "%s, memif %d cannot find CM!\n", __func__, dai->id);
+		return NULL;
+	}
+
+	return &mt8188_afe_cm[id];
+}
+
+static int mt8188_afe_config_cm(struct mtk_base_afe *afe,
+				const struct mt8188_afe_channel_merge *cm,
+				unsigned int channels)
+{
+	if (!cm)
+		return -EINVAL;
+
+	regmap_update_bits(afe->regmap,
+			   cm->reg,
+			   cm->sel_maskbit << cm->sel_shift,
+			   cm->sel_default << cm->sel_shift);
+
+	regmap_update_bits(afe->regmap,
+			   cm->reg,
+			   cm->ch_num_maskbit << cm->ch_num_shift,
+			   (channels - 1) << cm->ch_num_shift);
+
+	regmap_update_bits(afe->regmap,
+			   cm->reg,
+			   cm->update_cnt_maskbit << cm->update_cnt_shift,
+			   cm->update_cnt_default << cm->update_cnt_shift);
+
+	return 0;
+}
+
+static int mt8188_afe_enable_cm(struct mtk_base_afe *afe,
+				const struct mt8188_afe_channel_merge *cm,
+				bool enable)
+{
+	if (!cm)
+		return -EINVAL;
+
+	regmap_update_bits(afe->regmap,
+			   cm->reg,
+			   cm->en_maskbit << cm->en_shift,
+			   enable << cm->en_shift);
+
+	return 0;
+}
+
+static int mt8188_afe_fe_startup(struct snd_pcm_substream *substream,
+				 struct snd_soc_dai *dai)
+{
+	struct snd_soc_pcm_runtime *rtd = substream->private_data;
+	struct snd_pcm_runtime *runtime = substream->runtime;
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	int id = asoc_rtd_to_cpu(rtd, 0)->id;
+	int ret;
+
+	ret = mtk_afe_fe_startup(substream, dai);
+
+	snd_pcm_hw_constraint_step(runtime, 0,
+				   SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
+				   MT8188_MEMIF_BUFFER_BYTES_ALIGN);
+
+	if (id != MT8188_AFE_MEMIF_DL7)
+		goto out;
+
+	ret = snd_pcm_hw_constraint_minmax(runtime,
+					   SNDRV_PCM_HW_PARAM_PERIOD_SIZE, 1,
+					   MT8188_MEMIF_DL7_MAX_PERIOD_SIZE);
+	if (ret < 0)
+		dev_dbg(afe->dev, "hw_constraint_minmax failed\n");
+out:
+	return ret;
+}
+
+static void mt8188_afe_fe_shutdown(struct snd_pcm_substream *substream,
+				   struct snd_soc_dai *dai)
+{
+	mtk_afe_fe_shutdown(substream, dai);
+}
+
+static int mt8188_afe_fe_hw_params(struct snd_pcm_substream *substream,
+				   struct snd_pcm_hw_params *params,
+				   struct snd_soc_dai *dai)
+{
+	struct snd_soc_pcm_runtime *rtd = substream->private_data;
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	int id = asoc_rtd_to_cpu(rtd, 0)->id;
+	struct mtk_base_afe_memif *memif = &afe->memif[id];
+	const struct mtk_base_memif_data *data = memif->data;
+	const struct mt8188_afe_channel_merge *cm = mt8188_afe_found_cm(dai);
+	unsigned int channels = params_channels(params);
+
+	mt8188_afe_config_cm(afe, cm, channels);
+
+	if (data->ch_num_reg >= 0) {
+		regmap_update_bits(afe->regmap, data->ch_num_reg,
+				   data->ch_num_maskbit << data->ch_num_shift,
+				   channels << data->ch_num_shift);
+	}
+
+	return mtk_afe_fe_hw_params(substream, params, dai);
+}
+
+static int mt8188_afe_fe_trigger(struct snd_pcm_substream *substream, int cmd,
+				 struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	const struct mt8188_afe_channel_merge *cm = mt8188_afe_found_cm(dai);
+	struct snd_soc_pcm_runtime *rtd = substream->private_data;
+	struct snd_pcm_runtime * const runtime = substream->runtime;
+	int id = asoc_rtd_to_cpu(rtd, 0)->id;
+	struct mtk_base_afe_memif *memif = &afe->memif[id];
+	struct mtk_base_afe_irq *irqs = &afe->irqs[memif->irq_usage];
+	const struct mtk_base_irq_data *irq_data = irqs->irq_data;
+	unsigned int counter = runtime->period_size;
+	int fs;
+	int ret;
+
+	switch (cmd) {
+	case SNDRV_PCM_TRIGGER_START:
+	case SNDRV_PCM_TRIGGER_RESUME:
+		mt8188_afe_enable_cm(afe, cm, true);
+
+		ret = mtk_memif_set_enable(afe, id);
+		if (ret) {
+			dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n",
+				__func__, id, ret);
+			return ret;
+		}
+
+		/* set irq counter */
+		regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg,
+				   irq_data->irq_cnt_maskbit << irq_data->irq_cnt_shift,
+				   counter << irq_data->irq_cnt_shift);
+
+		/* set irq fs */
+		fs = afe->irq_fs(substream, runtime->rate);
+
+		if (fs < 0)
+			return -EINVAL;
+
+		if (irq_data->irq_fs_reg >= 0)
+			regmap_update_bits(afe->regmap, irq_data->irq_fs_reg,
+					   irq_data->irq_fs_maskbit << irq_data->irq_fs_shift,
+					   fs << irq_data->irq_fs_shift);
+
+		/* delay for uplink */
+		if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
+			u32 sample_delay;
+
+			sample_delay = ((MEMIF_AXI_MINLEN + 1) * 64 +
+					(runtime->channels * runtime->sample_bits - 1)) /
+					(runtime->channels * runtime->sample_bits) + 1;
+
+			udelay(sample_delay * 1000000 / runtime->rate);
+		}
+
+		/* enable interrupt */
+		regmap_set_bits(afe->regmap, irq_data->irq_en_reg,
+				BIT(irq_data->irq_en_shift));
+		return 0;
+	case SNDRV_PCM_TRIGGER_STOP:
+	case SNDRV_PCM_TRIGGER_SUSPEND:
+		mt8188_afe_enable_cm(afe, cm, false);
+
+		ret = mtk_memif_set_disable(afe, id);
+		if (ret)
+			dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n",
+				__func__, id, ret);
+
+		/* disable interrupt */
+
+		regmap_clear_bits(afe->regmap, irq_data->irq_en_reg,
+				  BIT(irq_data->irq_en_shift));
+		/* and clear pending IRQ */
+		regmap_write(afe->regmap, irq_data->irq_clr_reg,
+			     BIT(irq_data->irq_clr_shift));
+		return ret;
+	default:
+		return -EINVAL;
+	}
+}
+
+static const struct snd_soc_dai_ops mt8188_afe_fe_dai_ops = {
+	.startup	= mt8188_afe_fe_startup,
+	.shutdown	= mt8188_afe_fe_shutdown,
+	.hw_params	= mt8188_afe_fe_hw_params,
+	.hw_free	= mtk_afe_fe_hw_free,
+	.prepare	= mtk_afe_fe_prepare,
+	.trigger	= mt8188_afe_fe_trigger,
+};
+
+#define MTK_PCM_RATES (SNDRV_PCM_RATE_8000_48000 |\
+		       SNDRV_PCM_RATE_88200 |\
+		       SNDRV_PCM_RATE_96000 |\
+		       SNDRV_PCM_RATE_176400 |\
+		       SNDRV_PCM_RATE_192000 |\
+		       SNDRV_PCM_RATE_352800 |\
+		       SNDRV_PCM_RATE_384000)
+
+#define MTK_PCM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
+			 SNDRV_PCM_FMTBIT_S24_LE |\
+			 SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_driver mt8188_memif_dai_driver[] = {
+	/* FE DAIs: memory intefaces to CPU */
+	{
+		.name = "DL2",
+		.id = MT8188_AFE_MEMIF_DL2,
+		.playback = {
+			.stream_name = "DL2",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "DL3",
+		.id = MT8188_AFE_MEMIF_DL3,
+		.playback = {
+			.stream_name = "DL3",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "DL6",
+		.id = MT8188_AFE_MEMIF_DL6,
+		.playback = {
+			.stream_name = "DL6",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "DL7",
+		.id = MT8188_AFE_MEMIF_DL7,
+		.playback = {
+			.stream_name = "DL7",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "DL8",
+		.id = MT8188_AFE_MEMIF_DL8,
+		.playback = {
+			.stream_name = "DL8",
+			.channels_min = 1,
+			.channels_max = 16,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "DL10",
+		.id = MT8188_AFE_MEMIF_DL10,
+		.playback = {
+			.stream_name = "DL10",
+			.channels_min = 1,
+			.channels_max = 8,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "DL11",
+		.id = MT8188_AFE_MEMIF_DL11,
+		.playback = {
+			.stream_name = "DL11",
+			.channels_min = 1,
+			.channels_max = 32,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL1",
+		.id = MT8188_AFE_MEMIF_UL1,
+		.capture = {
+			.stream_name = "UL1",
+			.channels_min = 1,
+			.channels_max = 8,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL2",
+		.id = MT8188_AFE_MEMIF_UL2,
+		.capture = {
+			.stream_name = "UL2",
+			.channels_min = 1,
+			.channels_max = 8,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL3",
+		.id = MT8188_AFE_MEMIF_UL3,
+		.capture = {
+			.stream_name = "UL3",
+			.channels_min = 1,
+			.channels_max = 16,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL4",
+		.id = MT8188_AFE_MEMIF_UL4,
+		.capture = {
+			.stream_name = "UL4",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL5",
+		.id = MT8188_AFE_MEMIF_UL5,
+		.capture = {
+			.stream_name = "UL5",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL6",
+		.id = MT8188_AFE_MEMIF_UL6,
+		.capture = {
+			.stream_name = "UL6",
+			.channels_min = 1,
+			.channels_max = 8,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL8",
+		.id = MT8188_AFE_MEMIF_UL8,
+		.capture = {
+			.stream_name = "UL8",
+			.channels_min = 1,
+			.channels_max = 24,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL9",
+		.id = MT8188_AFE_MEMIF_UL9,
+		.capture = {
+			.stream_name = "UL9",
+			.channels_min = 1,
+			.channels_max = 32,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL10",
+		.id = MT8188_AFE_MEMIF_UL10,
+		.capture = {
+			.stream_name = "UL10",
+			.channels_min = 1,
+			.channels_max = 4,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+};
+
+static const struct snd_kcontrol_new o002_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN2, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN2, 12, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN2, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN2, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN2_2, 6, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN2_2, 8, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN2_5, 8, 1, 0),
+};
+
+static const struct snd_kcontrol_new o003_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN3, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN3, 13, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN3, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN3, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN3_2, 7, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN3_2, 9, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN3_5, 9, 1, 0),
+};
+
+static const struct snd_kcontrol_new o004_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN4, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I014 Switch", AFE_CONN4, 14, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN4, 24, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I074 Switch", AFE_CONN4_2, 10, 1, 0),
+};
+
+static const struct snd_kcontrol_new o005_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN5, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I015 Switch", AFE_CONN5, 15, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN5, 25, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I075 Switch", AFE_CONN5_2, 11, 1, 0),
+};
+
+static const struct snd_kcontrol_new o006_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN6, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I016 Switch", AFE_CONN6, 16, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN6, 26, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I076 Switch", AFE_CONN6_2, 12, 1, 0),
+};
+
+static const struct snd_kcontrol_new o007_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN7, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I017 Switch", AFE_CONN7, 17, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN7, 27, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I077 Switch", AFE_CONN7_2, 13, 1, 0),
+};
+
+static const struct snd_kcontrol_new o008_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I018 Switch", AFE_CONN8, 18, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN8, 28, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I078 Switch", AFE_CONN8_2, 14, 1, 0),
+};
+
+static const struct snd_kcontrol_new o009_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I019 Switch", AFE_CONN9, 19, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN9, 29, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I079 Switch", AFE_CONN9_2, 15, 1, 0),
+};
+
+static const struct snd_kcontrol_new o010_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN10, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I030 Switch", AFE_CONN10, 30, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN10_1, 14, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN10_2, 8, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I080 Switch", AFE_CONN10_2, 16, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I188 Switch", AFE_CONN10_5, 28, 1, 0),
+};
+
+static const struct snd_kcontrol_new o011_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN11, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I031 Switch", AFE_CONN11, 31, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN11_1, 15, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN11_2, 9, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I081 Switch", AFE_CONN11_2, 17, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I189 Switch", AFE_CONN11_5, 29, 1, 0),
+};
+
+static const struct snd_kcontrol_new o012_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN12, 24, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I032 Switch", AFE_CONN12_1, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN12_1, 16, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I074 Switch", AFE_CONN12_2, 10, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I082 Switch", AFE_CONN12_2, 18, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I190 Switch", AFE_CONN12_5, 30, 1, 0),
+};
+
+static const struct snd_kcontrol_new o013_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN13, 25, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I033 Switch", AFE_CONN13_1, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN13_1, 17, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I075 Switch", AFE_CONN13_2, 11, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I083 Switch", AFE_CONN13_2, 19, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I191 Switch", AFE_CONN13_5, 31, 1, 0),
+};
+
+static const struct snd_kcontrol_new o014_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN14, 26, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I034 Switch", AFE_CONN14_1, 2, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN14_1, 18, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I076 Switch", AFE_CONN14_2, 12, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I084 Switch", AFE_CONN14_2, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I192 Switch", AFE_CONN14_6, 0, 1, 0),
+};
+
+static const struct snd_kcontrol_new o015_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN15, 27, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I035 Switch", AFE_CONN15_1, 3, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN15_1, 19, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I077 Switch", AFE_CONN15_2, 13, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I085 Switch", AFE_CONN15_2, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I193 Switch", AFE_CONN15_6, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new o016_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN16, 28, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I036 Switch", AFE_CONN16_1, 4, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN16_1, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I078 Switch", AFE_CONN16_2, 14, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I086 Switch", AFE_CONN16_2, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I194 Switch", AFE_CONN16_6, 2, 1, 0),
+};
+
+static const struct snd_kcontrol_new o017_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN17, 29, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I037 Switch", AFE_CONN17_1, 5, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN17_1, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I079 Switch", AFE_CONN17_2, 15, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I087 Switch", AFE_CONN17_2, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I195 Switch", AFE_CONN17_6, 3, 1, 0),
+};
+
+static const struct snd_kcontrol_new o018_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I080 Switch", AFE_CONN18_2, 16, 1, 0),
+};
+
+static const struct snd_kcontrol_new o019_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I081 Switch", AFE_CONN19_2, 17, 1, 0),
+};
+
+static const struct snd_kcontrol_new o020_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I082 Switch", AFE_CONN20_2, 18, 1, 0),
+};
+
+static const struct snd_kcontrol_new o021_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I083 Switch", AFE_CONN21_2, 19, 1, 0),
+};
+
+static const struct snd_kcontrol_new o022_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I084 Switch", AFE_CONN22_2, 20, 1, 0),
+};
+
+static const struct snd_kcontrol_new o023_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I085 Switch", AFE_CONN23_2, 21, 1, 0),
+};
+
+static const struct snd_kcontrol_new o024_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I086 Switch", AFE_CONN24_2, 22, 1, 0),
+};
+
+static const struct snd_kcontrol_new o025_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I087 Switch", AFE_CONN25_2, 23, 1, 0),
+};
+
+static const struct snd_kcontrol_new o026_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN26_1, 14, 1, 0),
+};
+
+static const struct snd_kcontrol_new o027_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN27_1, 15, 1, 0),
+};
+
+static const struct snd_kcontrol_new o028_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN28_1, 16, 1, 0),
+};
+
+static const struct snd_kcontrol_new o029_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN29_1, 17, 1, 0),
+};
+
+static const struct snd_kcontrol_new o030_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN30_1, 18, 1, 0),
+};
+
+static const struct snd_kcontrol_new o031_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN31_1, 19, 1, 0),
+};
+
+static const struct snd_kcontrol_new o032_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN32_1, 20, 1, 0),
+};
+
+static const struct snd_kcontrol_new o033_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN33_1, 21, 1, 0),
+};
+
+static const struct snd_kcontrol_new o034_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN34, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I002 Switch", AFE_CONN34, 2, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN34, 12, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN34, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN34_2, 6, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN34_2, 8, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN34_5, 8, 1, 0),
+};
+
+static const struct snd_kcontrol_new o035_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN35, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I003 Switch", AFE_CONN35, 3, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN35, 13, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN35, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN35_2, 7, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN35_2, 9, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN35_5, 8, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN35_5, 9, 1, 0),
+};
+
+static const struct snd_kcontrol_new o036_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN36, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN36, 12, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN36, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN36_2, 6, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN36_5, 8, 1, 0),
+};
+
+static const struct snd_kcontrol_new o037_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN37, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN37, 13, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN37, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN37_2, 7, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN37_5, 9, 1, 0),
+};
+
+static const struct snd_kcontrol_new o038_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN38, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN38_5, 8, 1, 0),
+};
+
+static const struct snd_kcontrol_new o039_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN39, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN39_5, 9, 1, 0),
+};
+
+static const struct snd_kcontrol_new o040_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I002 Switch", AFE_CONN40, 2, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN40, 12, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN40, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN40_5, 8, 1, 0),
+};
+
+static const struct snd_kcontrol_new o041_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I003 Switch", AFE_CONN41, 3, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN41, 13, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN41, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN41_5, 9, 1, 0),
+};
+
+static const struct snd_kcontrol_new o042_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I014 Switch", AFE_CONN42, 14, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN42, 24, 1, 0),
+};
+
+static const struct snd_kcontrol_new o043_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I015 Switch", AFE_CONN43, 15, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN43, 25, 1, 0),
+};
+
+static const struct snd_kcontrol_new o044_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I016 Switch", AFE_CONN44, 16, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN44, 26, 1, 0),
+};
+
+static const struct snd_kcontrol_new o045_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I017 Switch", AFE_CONN45, 17, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN45, 27, 1, 0),
+};
+
+static const struct snd_kcontrol_new o046_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I018 Switch", AFE_CONN46, 18, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN46, 28, 1, 0),
+};
+
+static const struct snd_kcontrol_new o047_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I019 Switch", AFE_CONN47, 19, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN47, 29, 1, 0),
+};
+
+static const struct snd_kcontrol_new o182_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN182, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN182, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN182, 24, 1, 0),
+};
+
+static const struct snd_kcontrol_new o183_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN183, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN183, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN183, 25, 1, 0),
+};
+
+static const char * const dl8_dl11_data_sel_mux_text[] = {
+	"dl8", "dl11",
+};
+
+static SOC_ENUM_SINGLE_DECL(dl8_dl11_data_sel_mux_enum,
+			    AFE_DAC_CON2, 0, dl8_dl11_data_sel_mux_text);
+
+static const struct snd_kcontrol_new dl8_dl11_data_sel_mux =
+	SOC_DAPM_ENUM("DL8_DL11 Sink",
+		      dl8_dl11_data_sel_mux_enum);
+
+static const struct snd_soc_dapm_widget mt8188_memif_widgets[] = {
+	/* DL6 */
+	SND_SOC_DAPM_MIXER("I000", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I001", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	/* DL3 */
+	SND_SOC_DAPM_MIXER("I020", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I021", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	/* DL11 */
+	SND_SOC_DAPM_MIXER("I022", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I023", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I024", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I025", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I026", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I027", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I028", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I029", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I030", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I031", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I032", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I033", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I034", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I035", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I036", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I037", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	/* DL11/DL8 */
+	SND_SOC_DAPM_MIXER("I046", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I047", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I048", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I049", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I050", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I051", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I052", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I053", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I054", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I055", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I056", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I057", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I058", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I059", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I060", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I061", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	/* DL2 */
+	SND_SOC_DAPM_MIXER("I070", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I071", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	SND_SOC_DAPM_MUX("DL8_DL11 Mux",
+			 SND_SOC_NOPM, 0, 0, &dl8_dl11_data_sel_mux),
+
+	/* UL9 */
+	SND_SOC_DAPM_MIXER("O002", SND_SOC_NOPM, 0, 0,
+			   o002_mix, ARRAY_SIZE(o002_mix)),
+	SND_SOC_DAPM_MIXER("O003", SND_SOC_NOPM, 0, 0,
+			   o003_mix, ARRAY_SIZE(o003_mix)),
+	SND_SOC_DAPM_MIXER("O004", SND_SOC_NOPM, 0, 0,
+			   o004_mix, ARRAY_SIZE(o004_mix)),
+	SND_SOC_DAPM_MIXER("O005", SND_SOC_NOPM, 0, 0,
+			   o005_mix, ARRAY_SIZE(o005_mix)),
+	SND_SOC_DAPM_MIXER("O006", SND_SOC_NOPM, 0, 0,
+			   o006_mix, ARRAY_SIZE(o006_mix)),
+	SND_SOC_DAPM_MIXER("O007", SND_SOC_NOPM, 0, 0,
+			   o007_mix, ARRAY_SIZE(o007_mix)),
+	SND_SOC_DAPM_MIXER("O008", SND_SOC_NOPM, 0, 0,
+			   o008_mix, ARRAY_SIZE(o008_mix)),
+	SND_SOC_DAPM_MIXER("O009", SND_SOC_NOPM, 0, 0,
+			   o009_mix, ARRAY_SIZE(o009_mix)),
+	SND_SOC_DAPM_MIXER("O010", SND_SOC_NOPM, 0, 0,
+			   o010_mix, ARRAY_SIZE(o010_mix)),
+	SND_SOC_DAPM_MIXER("O011", SND_SOC_NOPM, 0, 0,
+			   o011_mix, ARRAY_SIZE(o011_mix)),
+	SND_SOC_DAPM_MIXER("O012", SND_SOC_NOPM, 0, 0,
+			   o012_mix, ARRAY_SIZE(o012_mix)),
+	SND_SOC_DAPM_MIXER("O013", SND_SOC_NOPM, 0, 0,
+			   o013_mix, ARRAY_SIZE(o013_mix)),
+	SND_SOC_DAPM_MIXER("O014", SND_SOC_NOPM, 0, 0,
+			   o014_mix, ARRAY_SIZE(o014_mix)),
+	SND_SOC_DAPM_MIXER("O015", SND_SOC_NOPM, 0, 0,
+			   o015_mix, ARRAY_SIZE(o015_mix)),
+	SND_SOC_DAPM_MIXER("O016", SND_SOC_NOPM, 0, 0,
+			   o016_mix, ARRAY_SIZE(o016_mix)),
+	SND_SOC_DAPM_MIXER("O017", SND_SOC_NOPM, 0, 0,
+			   o017_mix, ARRAY_SIZE(o017_mix)),
+	SND_SOC_DAPM_MIXER("O018", SND_SOC_NOPM, 0, 0,
+			   o018_mix, ARRAY_SIZE(o018_mix)),
+	SND_SOC_DAPM_MIXER("O019", SND_SOC_NOPM, 0, 0,
+			   o019_mix, ARRAY_SIZE(o019_mix)),
+	SND_SOC_DAPM_MIXER("O020", SND_SOC_NOPM, 0, 0,
+			   o020_mix, ARRAY_SIZE(o020_mix)),
+	SND_SOC_DAPM_MIXER("O021", SND_SOC_NOPM, 0, 0,
+			   o021_mix, ARRAY_SIZE(o021_mix)),
+	SND_SOC_DAPM_MIXER("O022", SND_SOC_NOPM, 0, 0,
+			   o022_mix, ARRAY_SIZE(o022_mix)),
+	SND_SOC_DAPM_MIXER("O023", SND_SOC_NOPM, 0, 0,
+			   o023_mix, ARRAY_SIZE(o023_mix)),
+	SND_SOC_DAPM_MIXER("O024", SND_SOC_NOPM, 0, 0,
+			   o024_mix, ARRAY_SIZE(o024_mix)),
+	SND_SOC_DAPM_MIXER("O025", SND_SOC_NOPM, 0, 0,
+			   o025_mix, ARRAY_SIZE(o025_mix)),
+	SND_SOC_DAPM_MIXER("O026", SND_SOC_NOPM, 0, 0,
+			   o026_mix, ARRAY_SIZE(o026_mix)),
+	SND_SOC_DAPM_MIXER("O027", SND_SOC_NOPM, 0, 0,
+			   o027_mix, ARRAY_SIZE(o027_mix)),
+	SND_SOC_DAPM_MIXER("O028", SND_SOC_NOPM, 0, 0,
+			   o028_mix, ARRAY_SIZE(o028_mix)),
+	SND_SOC_DAPM_MIXER("O029", SND_SOC_NOPM, 0, 0,
+			   o029_mix, ARRAY_SIZE(o029_mix)),
+	SND_SOC_DAPM_MIXER("O030", SND_SOC_NOPM, 0, 0,
+			   o030_mix, ARRAY_SIZE(o030_mix)),
+	SND_SOC_DAPM_MIXER("O031", SND_SOC_NOPM, 0, 0,
+			   o031_mix, ARRAY_SIZE(o031_mix)),
+	SND_SOC_DAPM_MIXER("O032", SND_SOC_NOPM, 0, 0,
+			   o032_mix, ARRAY_SIZE(o032_mix)),
+	SND_SOC_DAPM_MIXER("O033", SND_SOC_NOPM, 0, 0,
+			   o033_mix, ARRAY_SIZE(o033_mix)),
+
+	/* UL4 */
+	SND_SOC_DAPM_MIXER("O034", SND_SOC_NOPM, 0, 0,
+			   o034_mix, ARRAY_SIZE(o034_mix)),
+	SND_SOC_DAPM_MIXER("O035", SND_SOC_NOPM, 0, 0,
+			   o035_mix, ARRAY_SIZE(o035_mix)),
+
+	/* UL5 */
+	SND_SOC_DAPM_MIXER("O036", SND_SOC_NOPM, 0, 0,
+			   o036_mix, ARRAY_SIZE(o036_mix)),
+	SND_SOC_DAPM_MIXER("O037", SND_SOC_NOPM, 0, 0,
+			   o037_mix, ARRAY_SIZE(o037_mix)),
+
+	/* UL10 */
+	SND_SOC_DAPM_MIXER("O038", SND_SOC_NOPM, 0, 0,
+			   o038_mix, ARRAY_SIZE(o038_mix)),
+	SND_SOC_DAPM_MIXER("O039", SND_SOC_NOPM, 0, 0,
+			   o039_mix, ARRAY_SIZE(o039_mix)),
+	SND_SOC_DAPM_MIXER("O182", SND_SOC_NOPM, 0, 0,
+			   o182_mix, ARRAY_SIZE(o182_mix)),
+	SND_SOC_DAPM_MIXER("O183", SND_SOC_NOPM, 0, 0,
+			   o183_mix, ARRAY_SIZE(o183_mix)),
+
+	/* UL2 */
+	SND_SOC_DAPM_MIXER("O040", SND_SOC_NOPM, 0, 0,
+			   o040_mix, ARRAY_SIZE(o040_mix)),
+	SND_SOC_DAPM_MIXER("O041", SND_SOC_NOPM, 0, 0,
+			   o041_mix, ARRAY_SIZE(o041_mix)),
+	SND_SOC_DAPM_MIXER("O042", SND_SOC_NOPM, 0, 0,
+			   o042_mix, ARRAY_SIZE(o042_mix)),
+	SND_SOC_DAPM_MIXER("O043", SND_SOC_NOPM, 0, 0,
+			   o043_mix, ARRAY_SIZE(o043_mix)),
+	SND_SOC_DAPM_MIXER("O044", SND_SOC_NOPM, 0, 0,
+			   o044_mix, ARRAY_SIZE(o044_mix)),
+	SND_SOC_DAPM_MIXER("O045", SND_SOC_NOPM, 0, 0,
+			   o045_mix, ARRAY_SIZE(o045_mix)),
+	SND_SOC_DAPM_MIXER("O046", SND_SOC_NOPM, 0, 0,
+			   o046_mix, ARRAY_SIZE(o046_mix)),
+	SND_SOC_DAPM_MIXER("O047", SND_SOC_NOPM, 0, 0,
+			   o047_mix, ARRAY_SIZE(o047_mix)),
+};
+
+static const struct snd_soc_dapm_route mt8188_memif_routes[] = {
+	{"I000", NULL, "DL6"},
+	{"I001", NULL, "DL6"},
+
+	{"I020", NULL, "DL3"},
+	{"I021", NULL, "DL3"},
+
+	{"I022", NULL, "DL11"},
+	{"I023", NULL, "DL11"},
+	{"I024", NULL, "DL11"},
+	{"I025", NULL, "DL11"},
+	{"I026", NULL, "DL11"},
+	{"I027", NULL, "DL11"},
+	{"I028", NULL, "DL11"},
+	{"I029", NULL, "DL11"},
+	{"I030", NULL, "DL11"},
+	{"I031", NULL, "DL11"},
+	{"I032", NULL, "DL11"},
+	{"I033", NULL, "DL11"},
+	{"I034", NULL, "DL11"},
+	{"I035", NULL, "DL11"},
+	{"I036", NULL, "DL11"},
+	{"I037", NULL, "DL11"},
+
+	{"DL8_DL11 Mux", "dl8", "DL8"},
+	{"DL8_DL11 Mux", "dl11", "DL11"},
+
+	{"I046", NULL, "DL8_DL11 Mux"},
+	{"I047", NULL, "DL8_DL11 Mux"},
+	{"I048", NULL, "DL8_DL11 Mux"},
+	{"I049", NULL, "DL8_DL11 Mux"},
+	{"I050", NULL, "DL8_DL11 Mux"},
+	{"I051", NULL, "DL8_DL11 Mux"},
+	{"I052", NULL, "DL8_DL11 Mux"},
+	{"I053", NULL, "DL8_DL11 Mux"},
+	{"I054", NULL, "DL8_DL11 Mux"},
+	{"I055", NULL, "DL8_DL11 Mux"},
+	{"I056", NULL, "DL8_DL11 Mux"},
+	{"I057", NULL, "DL8_DL11 Mux"},
+	{"I058", NULL, "DL8_DL11 Mux"},
+	{"I059", NULL, "DL8_DL11 Mux"},
+	{"I060", NULL, "DL8_DL11 Mux"},
+	{"I061", NULL, "DL8_DL11 Mux"},
+
+	{"I070", NULL, "DL2"},
+	{"I071", NULL, "DL2"},
+
+	{"UL9", NULL, "O002"},
+	{"UL9", NULL, "O003"},
+	{"UL9", NULL, "O004"},
+	{"UL9", NULL, "O005"},
+	{"UL9", NULL, "O006"},
+	{"UL9", NULL, "O007"},
+	{"UL9", NULL, "O008"},
+	{"UL9", NULL, "O009"},
+	{"UL9", NULL, "O010"},
+	{"UL9", NULL, "O011"},
+	{"UL9", NULL, "O012"},
+	{"UL9", NULL, "O013"},
+	{"UL9", NULL, "O014"},
+	{"UL9", NULL, "O015"},
+	{"UL9", NULL, "O016"},
+	{"UL9", NULL, "O017"},
+	{"UL9", NULL, "O018"},
+	{"UL9", NULL, "O019"},
+	{"UL9", NULL, "O020"},
+	{"UL9", NULL, "O021"},
+	{"UL9", NULL, "O022"},
+	{"UL9", NULL, "O023"},
+	{"UL9", NULL, "O024"},
+	{"UL9", NULL, "O025"},
+	{"UL9", NULL, "O026"},
+	{"UL9", NULL, "O027"},
+	{"UL9", NULL, "O028"},
+	{"UL9", NULL, "O029"},
+	{"UL9", NULL, "O030"},
+	{"UL9", NULL, "O031"},
+	{"UL9", NULL, "O032"},
+	{"UL9", NULL, "O033"},
+
+	{"UL4", NULL, "O034"},
+	{"UL4", NULL, "O035"},
+
+	{"UL5", NULL, "O036"},
+	{"UL5", NULL, "O037"},
+
+	{"UL10", NULL, "O038"},
+	{"UL10", NULL, "O039"},
+	{"UL10", NULL, "O182"},
+	{"UL10", NULL, "O183"},
+
+	{"UL2", NULL, "O040"},
+	{"UL2", NULL, "O041"},
+	{"UL2", NULL, "O042"},
+	{"UL2", NULL, "O043"},
+	{"UL2", NULL, "O044"},
+	{"UL2", NULL, "O045"},
+	{"UL2", NULL, "O046"},
+	{"UL2", NULL, "O047"},
+
+	{"O004", "I000 Switch", "I000"},
+	{"O005", "I001 Switch", "I001"},
+
+	{"O006", "I000 Switch", "I000"},
+	{"O007", "I001 Switch", "I001"},
+
+	{"O010", "I022 Switch", "I022"},
+	{"O011", "I023 Switch", "I023"},
+	{"O012", "I024 Switch", "I024"},
+	{"O013", "I025 Switch", "I025"},
+	{"O014", "I026 Switch", "I026"},
+	{"O015", "I027 Switch", "I027"},
+	{"O016", "I028 Switch", "I028"},
+	{"O017", "I029 Switch", "I029"},
+
+	{"O010", "I046 Switch", "I046"},
+	{"O011", "I047 Switch", "I047"},
+	{"O012", "I048 Switch", "I048"},
+	{"O013", "I049 Switch", "I049"},
+	{"O014", "I050 Switch", "I050"},
+	{"O015", "I051 Switch", "I051"},
+	{"O016", "I052 Switch", "I052"},
+	{"O017", "I053 Switch", "I053"},
+
+	{"O002", "I022 Switch", "I022"},
+	{"O003", "I023 Switch", "I023"},
+	{"O004", "I024 Switch", "I024"},
+	{"O005", "I025 Switch", "I025"},
+	{"O006", "I026 Switch", "I026"},
+	{"O007", "I027 Switch", "I027"},
+	{"O008", "I028 Switch", "I028"},
+	{"O009", "I029 Switch", "I029"},
+	{"O010", "I030 Switch", "I030"},
+	{"O011", "I031 Switch", "I031"},
+	{"O012", "I032 Switch", "I032"},
+	{"O013", "I033 Switch", "I033"},
+	{"O014", "I034 Switch", "I034"},
+	{"O015", "I035 Switch", "I035"},
+	{"O016", "I036 Switch", "I036"},
+	{"O017", "I037 Switch", "I037"},
+	{"O026", "I046 Switch", "I046"},
+	{"O027", "I047 Switch", "I047"},
+	{"O028", "I048 Switch", "I048"},
+	{"O029", "I049 Switch", "I049"},
+	{"O030", "I050 Switch", "I050"},
+	{"O031", "I051 Switch", "I051"},
+	{"O032", "I052 Switch", "I052"},
+	{"O033", "I053 Switch", "I053"},
+
+	{"O002", "I000 Switch", "I000"},
+	{"O003", "I001 Switch", "I001"},
+	{"O002", "I020 Switch", "I020"},
+	{"O003", "I021 Switch", "I021"},
+	{"O002", "I070 Switch", "I070"},
+	{"O003", "I071 Switch", "I071"},
+
+	{"O034", "I000 Switch", "I000"},
+	{"O035", "I001 Switch", "I001"},
+	{"O034", "I002 Switch", "I002"},
+	{"O035", "I003 Switch", "I003"},
+	{"O034", "I012 Switch", "I012"},
+	{"O035", "I013 Switch", "I013"},
+	{"O034", "I020 Switch", "I020"},
+	{"O035", "I021 Switch", "I021"},
+	{"O034", "I070 Switch", "I070"},
+	{"O035", "I071 Switch", "I071"},
+	{"O034", "I072 Switch", "I072"},
+	{"O035", "I073 Switch", "I073"},
+
+	{"O036", "I000 Switch", "I000"},
+	{"O037", "I001 Switch", "I001"},
+	{"O036", "I012 Switch", "I012"},
+	{"O037", "I013 Switch", "I013"},
+	{"O036", "I020 Switch", "I020"},
+	{"O037", "I021 Switch", "I021"},
+	{"O036", "I070 Switch", "I070"},
+	{"O037", "I071 Switch", "I071"},
+	{"O036", "I168 Switch", "I168"},
+	{"O037", "I169 Switch", "I169"},
+
+	{"O038", "I022 Switch", "I022"},
+	{"O039", "I023 Switch", "I023"},
+	{"O182", "I024 Switch", "I024"},
+	{"O183", "I025 Switch", "I025"},
+
+	{"O038", "I168 Switch", "I168"},
+	{"O039", "I169 Switch", "I169"},
+
+	{"O182", "I020 Switch", "I020"},
+	{"O183", "I021 Switch", "I021"},
+
+	{"O182", "I022 Switch", "I022"},
+	{"O183", "I023 Switch", "I023"},
+
+	{"O040", "I022 Switch", "I022"},
+	{"O041", "I023 Switch", "I023"},
+	{"O042", "I024 Switch", "I024"},
+	{"O043", "I025 Switch", "I025"},
+	{"O044", "I026 Switch", "I026"},
+	{"O045", "I027 Switch", "I027"},
+	{"O046", "I028 Switch", "I028"},
+	{"O047", "I029 Switch", "I029"},
+
+	{"O040", "I002 Switch", "I002"},
+	{"O041", "I003 Switch", "I003"},
+
+	{"O002", "I012 Switch", "I012"},
+	{"O003", "I013 Switch", "I013"},
+	{"O004", "I014 Switch", "I014"},
+	{"O005", "I015 Switch", "I015"},
+	{"O006", "I016 Switch", "I016"},
+	{"O007", "I017 Switch", "I017"},
+	{"O008", "I018 Switch", "I018"},
+	{"O009", "I019 Switch", "I019"},
+	{"O010", "I188 Switch", "I188"},
+	{"O011", "I189 Switch", "I189"},
+	{"O012", "I190 Switch", "I190"},
+	{"O013", "I191 Switch", "I191"},
+	{"O014", "I192 Switch", "I192"},
+	{"O015", "I193 Switch", "I193"},
+	{"O016", "I194 Switch", "I194"},
+	{"O017", "I195 Switch", "I195"},
+
+	{"O040", "I012 Switch", "I012"},
+	{"O041", "I013 Switch", "I013"},
+	{"O042", "I014 Switch", "I014"},
+	{"O043", "I015 Switch", "I015"},
+	{"O044", "I016 Switch", "I016"},
+	{"O045", "I017 Switch", "I017"},
+	{"O046", "I018 Switch", "I018"},
+	{"O047", "I019 Switch", "I019"},
+
+	{"O002", "I072 Switch", "I072"},
+	{"O003", "I073 Switch", "I073"},
+	{"O004", "I074 Switch", "I074"},
+	{"O005", "I075 Switch", "I075"},
+	{"O006", "I076 Switch", "I076"},
+	{"O007", "I077 Switch", "I077"},
+	{"O008", "I078 Switch", "I078"},
+	{"O009", "I079 Switch", "I079"},
+	{"O010", "I080 Switch", "I080"},
+	{"O011", "I081 Switch", "I081"},
+	{"O012", "I082 Switch", "I082"},
+	{"O013", "I083 Switch", "I083"},
+	{"O014", "I084 Switch", "I084"},
+	{"O015", "I085 Switch", "I085"},
+	{"O016", "I086 Switch", "I086"},
+	{"O017", "I087 Switch", "I087"},
+
+	{"O010", "I072 Switch", "I072"},
+	{"O011", "I073 Switch", "I073"},
+	{"O012", "I074 Switch", "I074"},
+	{"O013", "I075 Switch", "I075"},
+	{"O014", "I076 Switch", "I076"},
+	{"O015", "I077 Switch", "I077"},
+	{"O016", "I078 Switch", "I078"},
+	{"O017", "I079 Switch", "I079"},
+	{"O018", "I080 Switch", "I080"},
+	{"O019", "I081 Switch", "I081"},
+	{"O020", "I082 Switch", "I082"},
+	{"O021", "I083 Switch", "I083"},
+	{"O022", "I084 Switch", "I084"},
+	{"O023", "I085 Switch", "I085"},
+	{"O024", "I086 Switch", "I086"},
+	{"O025", "I087 Switch", "I087"},
+
+	{"O002", "I168 Switch", "I168"},
+	{"O003", "I169 Switch", "I169"},
+
+	{"O034", "I168 Switch", "I168"},
+	{"O035", "I168 Switch", "I168"},
+	{"O035", "I169 Switch", "I169"},
+
+	{"O040", "I168 Switch", "I168"},
+	{"O041", "I169 Switch", "I169"},
+};
+
+static const struct snd_soc_component_driver mt8188_afe_pcm_dai_component = {
+	.name = "mt8188-afe-pcm-dai",
+};
+
+static const struct mtk_base_memif_data memif_data[MT8188_AFE_MEMIF_NUM] = {
+	[MT8188_AFE_MEMIF_DL2] = {
+		.name = "DL2",
+		.id = MT8188_AFE_MEMIF_DL2,
+		.reg_ofs_base = AFE_DL2_BASE,
+		.reg_ofs_cur = AFE_DL2_CUR,
+		.reg_ofs_end = AFE_DL2_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON0,
+		.fs_shift = 10,
+		.fs_maskbit = 0x1f,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 18,
+		.hd_reg = AFE_DL2_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 18,
+		.ch_num_reg = AFE_DL2_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x1f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 18,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 18,
+	},
+	[MT8188_AFE_MEMIF_DL3] = {
+		.name = "DL3",
+		.id = MT8188_AFE_MEMIF_DL3,
+		.reg_ofs_base = AFE_DL3_BASE,
+		.reg_ofs_cur = AFE_DL3_CUR,
+		.reg_ofs_end = AFE_DL3_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON0,
+		.fs_shift = 15,
+		.fs_maskbit = 0x1f,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 19,
+		.hd_reg = AFE_DL3_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 19,
+		.ch_num_reg = AFE_DL3_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x1f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 19,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 19,
+	},
+	[MT8188_AFE_MEMIF_DL6] = {
+		.name = "DL6",
+		.id = MT8188_AFE_MEMIF_DL6,
+		.reg_ofs_base = AFE_DL6_BASE,
+		.reg_ofs_cur = AFE_DL6_CUR,
+		.reg_ofs_end = AFE_DL6_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON1,
+		.fs_shift = 0,
+		.fs_maskbit = 0x1f,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 22,
+		.hd_reg = AFE_DL6_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 22,
+		.ch_num_reg = AFE_DL6_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x1f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 22,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 22,
+	},
+	[MT8188_AFE_MEMIF_DL7] = {
+		.name = "DL7",
+		.id = MT8188_AFE_MEMIF_DL7,
+		.reg_ofs_base = AFE_DL7_BASE,
+		.reg_ofs_cur = AFE_DL7_CUR,
+		.reg_ofs_end = AFE_DL7_END,
+		.fs_reg = -1,
+		.fs_shift = 0,
+		.fs_maskbit = 0,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 23,
+		.hd_reg = AFE_DL7_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 23,
+		.ch_num_reg = AFE_DL7_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x1f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 23,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 23,
+	},
+	[MT8188_AFE_MEMIF_DL8] = {
+		.name = "DL8",
+		.id = MT8188_AFE_MEMIF_DL8,
+		.reg_ofs_base = AFE_DL8_BASE,
+		.reg_ofs_cur = AFE_DL8_CUR,
+		.reg_ofs_end = AFE_DL8_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON1,
+		.fs_shift = 10,
+		.fs_maskbit = 0x1f,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 24,
+		.hd_reg = AFE_DL8_CON0,
+		.hd_shift = 6,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 24,
+		.ch_num_reg = AFE_DL8_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x3f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 24,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 24,
+	},
+	[MT8188_AFE_MEMIF_DL10] = {
+		.name = "DL10",
+		.id = MT8188_AFE_MEMIF_DL10,
+		.reg_ofs_base = AFE_DL10_BASE,
+		.reg_ofs_cur = AFE_DL10_CUR,
+		.reg_ofs_end = AFE_DL10_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON1,
+		.fs_shift = 20,
+		.fs_maskbit = 0x1f,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 26,
+		.hd_reg = AFE_DL10_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 26,
+		.ch_num_reg = AFE_DL10_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x1f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 26,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 26,
+	},
+	[MT8188_AFE_MEMIF_DL11] = {
+		.name = "DL11",
+		.id = MT8188_AFE_MEMIF_DL11,
+		.reg_ofs_base = AFE_DL11_BASE,
+		.reg_ofs_cur = AFE_DL11_CUR,
+		.reg_ofs_end = AFE_DL11_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON1,
+		.fs_shift = 25,
+		.fs_maskbit = 0x1f,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 27,
+		.hd_reg = AFE_DL11_CON0,
+		.hd_shift = 7,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 27,
+		.ch_num_reg = AFE_DL11_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x7f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 27,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 27,
+	},
+	[MT8188_AFE_MEMIF_UL1] = {
+		.name = "UL1",
+		.id = MT8188_AFE_MEMIF_UL1,
+		.reg_ofs_base = AFE_UL1_BASE,
+		.reg_ofs_cur = AFE_UL1_CUR,
+		.reg_ofs_end = AFE_UL1_END,
+		.fs_reg = -1,
+		.fs_shift = 0,
+		.fs_maskbit = 0,
+		.mono_reg = AFE_UL1_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL1_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 1,
+		.hd_reg = AFE_UL1_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 0,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 0,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 0,
+	},
+	[MT8188_AFE_MEMIF_UL2] = {
+		.name = "UL2",
+		.id = MT8188_AFE_MEMIF_UL2,
+		.reg_ofs_base = AFE_UL2_BASE,
+		.reg_ofs_cur = AFE_UL2_CUR,
+		.reg_ofs_end = AFE_UL2_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON2,
+		.fs_shift = 5,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL2_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL2_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 2,
+		.hd_reg = AFE_UL2_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 1,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 1,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 1,
+	},
+	[MT8188_AFE_MEMIF_UL3] = {
+		.name = "UL3",
+		.id = MT8188_AFE_MEMIF_UL3,
+		.reg_ofs_base = AFE_UL3_BASE,
+		.reg_ofs_cur = AFE_UL3_CUR,
+		.reg_ofs_end = AFE_UL3_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON2,
+		.fs_shift = 10,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL3_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL3_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 3,
+		.hd_reg = AFE_UL3_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 2,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 2,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 2,
+	},
+	[MT8188_AFE_MEMIF_UL4] = {
+		.name = "UL4",
+		.id = MT8188_AFE_MEMIF_UL4,
+		.reg_ofs_base = AFE_UL4_BASE,
+		.reg_ofs_cur = AFE_UL4_CUR,
+		.reg_ofs_end = AFE_UL4_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON2,
+		.fs_shift = 15,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL4_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL4_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 4,
+		.hd_reg = AFE_UL4_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 3,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 3,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 3,
+	},
+	[MT8188_AFE_MEMIF_UL5] = {
+		.name = "UL5",
+		.id = MT8188_AFE_MEMIF_UL5,
+		.reg_ofs_base = AFE_UL5_BASE,
+		.reg_ofs_cur = AFE_UL5_CUR,
+		.reg_ofs_end = AFE_UL5_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON2,
+		.fs_shift = 20,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL5_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL5_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 5,
+		.hd_reg = AFE_UL5_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 4,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 4,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 4,
+	},
+	[MT8188_AFE_MEMIF_UL6] = {
+		.name = "UL6",
+		.id = MT8188_AFE_MEMIF_UL6,
+		.reg_ofs_base = AFE_UL6_BASE,
+		.reg_ofs_cur = AFE_UL6_CUR,
+		.reg_ofs_end = AFE_UL6_END,
+		.fs_reg = -1,
+		.fs_shift = 0,
+		.fs_maskbit = 0,
+		.mono_reg = AFE_UL6_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL6_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 6,
+		.hd_reg = AFE_UL6_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 5,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 5,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 5,
+	},
+	[MT8188_AFE_MEMIF_UL8] = {
+		.name = "UL8",
+		.id = MT8188_AFE_MEMIF_UL8,
+		.reg_ofs_base = AFE_UL8_BASE,
+		.reg_ofs_cur = AFE_UL8_CUR,
+		.reg_ofs_end = AFE_UL8_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON3,
+		.fs_shift = 5,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL8_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL8_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 8,
+		.hd_reg = AFE_UL8_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 7,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 7,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 7,
+	},
+	[MT8188_AFE_MEMIF_UL9] = {
+		.name = "UL9",
+		.id = MT8188_AFE_MEMIF_UL9,
+		.reg_ofs_base = AFE_UL9_BASE,
+		.reg_ofs_cur = AFE_UL9_CUR,
+		.reg_ofs_end = AFE_UL9_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON3,
+		.fs_shift = 10,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL9_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL9_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 9,
+		.hd_reg = AFE_UL9_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 8,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 8,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 8,
+	},
+	[MT8188_AFE_MEMIF_UL10] = {
+		.name = "UL10",
+		.id = MT8188_AFE_MEMIF_UL10,
+		.reg_ofs_base = AFE_UL10_BASE,
+		.reg_ofs_cur = AFE_UL10_CUR,
+		.reg_ofs_end = AFE_UL10_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON3,
+		.fs_shift = 15,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL10_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL10_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 10,
+		.hd_reg = AFE_UL10_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 9,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 9,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 9,
+	},
+};
+
+static const struct mtk_base_irq_data irq_data[MT8188_AFE_IRQ_NUM] = {
+	[MT8188_AFE_IRQ_1] = {
+		.id = MT8188_AFE_IRQ_1,
+		.irq_cnt_reg = -1,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0,
+		.irq_fs_reg = -1,
+		.irq_fs_shift = 0,
+		.irq_fs_maskbit = 0,
+		.irq_en_reg = AFE_IRQ1_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg = AFE_IRQ_MCU_CLR,
+		.irq_clr_shift = 0,
+		.irq_status_shift = 16,
+	},
+	[MT8188_AFE_IRQ_2] = {
+		.id = MT8188_AFE_IRQ_2,
+		.irq_cnt_reg = -1,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0,
+		.irq_fs_reg = -1,
+		.irq_fs_shift = 0,
+		.irq_fs_maskbit = 0,
+		.irq_en_reg = AFE_IRQ2_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg = AFE_IRQ_MCU_CLR,
+		.irq_clr_shift = 1,
+		.irq_status_shift = 17,
+	},
+	[MT8188_AFE_IRQ_3] = {
+		.id = MT8188_AFE_IRQ_3,
+		.irq_cnt_reg = AFE_IRQ3_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = -1,
+		.irq_fs_shift = 0,
+		.irq_fs_maskbit = 0,
+		.irq_en_reg = AFE_IRQ3_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg = AFE_IRQ_MCU_CLR,
+		.irq_clr_shift = 2,
+		.irq_status_shift = 18,
+	},
+	[MT8188_AFE_IRQ_8] = {
+		.id = MT8188_AFE_IRQ_8,
+		.irq_cnt_reg = -1,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0,
+		.irq_fs_reg = -1,
+		.irq_fs_shift = 0,
+		.irq_fs_maskbit = 0,
+		.irq_en_reg = AFE_IRQ8_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg = AFE_IRQ_MCU_CLR,
+		.irq_clr_shift = 7,
+		.irq_status_shift = 23,
+	},
+	[MT8188_AFE_IRQ_9] = {
+		.id = MT8188_AFE_IRQ_9,
+		.irq_cnt_reg = AFE_IRQ9_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = -1,
+		.irq_fs_shift = 0,
+		.irq_fs_maskbit = 0,
+		.irq_en_reg = AFE_IRQ9_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg = AFE_IRQ_MCU_CLR,
+		.irq_clr_shift = 8,
+		.irq_status_shift = 24,
+	},
+	[MT8188_AFE_IRQ_10] = {
+		.id = MT8188_AFE_IRQ_10,
+		.irq_cnt_reg = -1,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0,
+		.irq_fs_reg = -1,
+		.irq_fs_shift = 0,
+		.irq_fs_maskbit = 0,
+		.irq_en_reg = AFE_IRQ10_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg = AFE_IRQ_MCU_CLR,
+		.irq_clr_shift = 9,
+		.irq_status_shift = 25,
+	},
+	[MT8188_AFE_IRQ_13] = {
+		.id = MT8188_AFE_IRQ_13,
+		.irq_cnt_reg = ASYS_IRQ1_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ1_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ1_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 0,
+		.irq_status_shift = 0,
+	},
+	[MT8188_AFE_IRQ_14] = {
+		.id = MT8188_AFE_IRQ_14,
+		.irq_cnt_reg = ASYS_IRQ2_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ2_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ2_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 1,
+		.irq_status_shift = 1,
+	},
+	[MT8188_AFE_IRQ_15] = {
+		.id = MT8188_AFE_IRQ_15,
+		.irq_cnt_reg = ASYS_IRQ3_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ3_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ3_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 2,
+		.irq_status_shift = 2,
+	},
+	[MT8188_AFE_IRQ_16] = {
+		.id = MT8188_AFE_IRQ_16,
+		.irq_cnt_reg = ASYS_IRQ4_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ4_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ4_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 3,
+		.irq_status_shift = 3,
+	},
+	[MT8188_AFE_IRQ_17] = {
+		.id = MT8188_AFE_IRQ_17,
+		.irq_cnt_reg = ASYS_IRQ5_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ5_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ5_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 4,
+		.irq_status_shift = 4,
+	},
+	[MT8188_AFE_IRQ_18] = {
+		.id = MT8188_AFE_IRQ_18,
+		.irq_cnt_reg = ASYS_IRQ6_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ6_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ6_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 5,
+		.irq_status_shift = 5,
+	},
+	[MT8188_AFE_IRQ_19] = {
+		.id = MT8188_AFE_IRQ_19,
+		.irq_cnt_reg = ASYS_IRQ7_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ7_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ7_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 6,
+		.irq_status_shift = 6,
+	},
+	[MT8188_AFE_IRQ_20] = {
+		.id = MT8188_AFE_IRQ_20,
+		.irq_cnt_reg = ASYS_IRQ8_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ8_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ8_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 7,
+		.irq_status_shift = 7,
+	},
+	[MT8188_AFE_IRQ_21] = {
+		.id = MT8188_AFE_IRQ_21,
+		.irq_cnt_reg = ASYS_IRQ9_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ9_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ9_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 8,
+		.irq_status_shift = 8,
+	},
+	[MT8188_AFE_IRQ_22] = {
+		.id = MT8188_AFE_IRQ_22,
+		.irq_cnt_reg = ASYS_IRQ10_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ10_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ10_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 9,
+		.irq_status_shift = 9,
+	},
+	[MT8188_AFE_IRQ_23] = {
+		.id = MT8188_AFE_IRQ_23,
+		.irq_cnt_reg = ASYS_IRQ11_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ11_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ11_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 10,
+		.irq_status_shift = 10,
+	},
+	[MT8188_AFE_IRQ_24] = {
+		.id = MT8188_AFE_IRQ_24,
+		.irq_cnt_reg = ASYS_IRQ12_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ12_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ12_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 11,
+		.irq_status_shift = 11,
+	},
+	[MT8188_AFE_IRQ_25] = {
+		.id = MT8188_AFE_IRQ_25,
+		.irq_cnt_reg = ASYS_IRQ13_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ13_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ13_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 12,
+		.irq_status_shift = 12,
+	},
+	[MT8188_AFE_IRQ_26] = {
+		.id = MT8188_AFE_IRQ_26,
+		.irq_cnt_reg = ASYS_IRQ14_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ14_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ14_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 13,
+		.irq_status_shift = 13,
+	},
+	[MT8188_AFE_IRQ_27] = {
+		.id = MT8188_AFE_IRQ_27,
+		.irq_cnt_reg = ASYS_IRQ15_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ15_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ15_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 14,
+		.irq_status_shift = 14,
+	},
+	[MT8188_AFE_IRQ_28] = {
+		.id = MT8188_AFE_IRQ_28,
+		.irq_cnt_reg = ASYS_IRQ16_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ16_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ16_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 15,
+		.irq_status_shift = 15,
+	},
+};
+
+static const int mt8188_afe_memif_const_irqs[MT8188_AFE_MEMIF_NUM] = {
+	[MT8188_AFE_MEMIF_DL2] = MT8188_AFE_IRQ_13,
+	[MT8188_AFE_MEMIF_DL3] = MT8188_AFE_IRQ_14,
+	[MT8188_AFE_MEMIF_DL6] = MT8188_AFE_IRQ_15,
+	[MT8188_AFE_MEMIF_DL7] = MT8188_AFE_IRQ_1,
+	[MT8188_AFE_MEMIF_DL8] = MT8188_AFE_IRQ_16,
+	[MT8188_AFE_MEMIF_DL10] = MT8188_AFE_IRQ_17,
+	[MT8188_AFE_MEMIF_DL11] = MT8188_AFE_IRQ_18,
+	[MT8188_AFE_MEMIF_UL1] = MT8188_AFE_IRQ_3,
+	[MT8188_AFE_MEMIF_UL2] = MT8188_AFE_IRQ_19,
+	[MT8188_AFE_MEMIF_UL3] = MT8188_AFE_IRQ_20,
+	[MT8188_AFE_MEMIF_UL4] = MT8188_AFE_IRQ_21,
+	[MT8188_AFE_MEMIF_UL5] = MT8188_AFE_IRQ_22,
+	[MT8188_AFE_MEMIF_UL6] = MT8188_AFE_IRQ_9,
+	[MT8188_AFE_MEMIF_UL8] = MT8188_AFE_IRQ_23,
+	[MT8188_AFE_MEMIF_UL9] = MT8188_AFE_IRQ_24,
+	[MT8188_AFE_MEMIF_UL10] = MT8188_AFE_IRQ_25,
+};
+
+static bool mt8188_is_volatile_reg(struct device *dev, unsigned int reg)
+{
+	/* these auto-gen reg has read-only bit, so put it as volatile */
+	/* volatile reg cannot be cached, so cannot be set when power off */
+	switch (reg) {
+	case AUDIO_TOP_CON0:
+	case AUDIO_TOP_CON1:
+	case AUDIO_TOP_CON3:
+	case AUDIO_TOP_CON4:
+	case AUDIO_TOP_CON5:
+	case AUDIO_TOP_CON6:
+	case ASYS_IRQ_CLR:
+	case ASYS_IRQ_STATUS:
+	case ASYS_IRQ_MON1:
+	case ASYS_IRQ_MON2:
+	case AFE_IRQ_MCU_CLR:
+	case AFE_IRQ_STATUS:
+	case AFE_IRQ3_CON_MON:
+	case AFE_IRQ_MCU_MON2:
+	case ADSP_IRQ_STATUS:
+	case AUDIO_TOP_STA0:
+	case AUDIO_TOP_STA1:
+	case AFE_GAIN1_CUR:
+	case AFE_GAIN2_CUR:
+	case AFE_IEC_BURST_INFO:
+	case AFE_IEC_CHL_STAT0:
+	case AFE_IEC_CHL_STAT1:
+	case AFE_IEC_CHR_STAT0:
+	case AFE_IEC_CHR_STAT1:
+	case AFE_SPDIFIN_CHSTS1:
+	case AFE_SPDIFIN_CHSTS2:
+	case AFE_SPDIFIN_CHSTS3:
+	case AFE_SPDIFIN_CHSTS4:
+	case AFE_SPDIFIN_CHSTS5:
+	case AFE_SPDIFIN_CHSTS6:
+	case AFE_SPDIFIN_DEBUG1:
+	case AFE_SPDIFIN_DEBUG2:
+	case AFE_SPDIFIN_DEBUG3:
+	case AFE_SPDIFIN_DEBUG4:
+	case AFE_SPDIFIN_EC:
+	case AFE_SPDIFIN_CKLOCK_CFG:
+	case AFE_SPDIFIN_BR_DBG1:
+	case AFE_SPDIFIN_CKFBDIV:
+	case AFE_SPDIFIN_INT_EXT:
+	case AFE_SPDIFIN_INT_EXT2:
+	case SPDIFIN_FREQ_STATUS:
+	case SPDIFIN_USERCODE1:
+	case SPDIFIN_USERCODE2:
+	case SPDIFIN_USERCODE3:
+	case SPDIFIN_USERCODE4:
+	case SPDIFIN_USERCODE5:
+	case SPDIFIN_USERCODE6:
+	case SPDIFIN_USERCODE7:
+	case SPDIFIN_USERCODE8:
+	case SPDIFIN_USERCODE9:
+	case SPDIFIN_USERCODE10:
+	case SPDIFIN_USERCODE11:
+	case SPDIFIN_USERCODE12:
+	case AFE_LINEIN_APLL_TUNER_MON:
+	case AFE_EARC_APLL_TUNER_MON:
+	case AFE_CM0_MON:
+	case AFE_CM1_MON:
+	case AFE_CM2_MON:
+	case AFE_MPHONE_MULTI_DET_MON0:
+	case AFE_MPHONE_MULTI_DET_MON1:
+	case AFE_MPHONE_MULTI_DET_MON2:
+	case AFE_MPHONE_MULTI2_DET_MON0:
+	case AFE_MPHONE_MULTI2_DET_MON1:
+	case AFE_MPHONE_MULTI2_DET_MON2:
+	case AFE_ADDA_MTKAIF_MON0:
+	case AFE_ADDA_MTKAIF_MON1:
+	case AFE_AUD_PAD_TOP:
+	case AFE_ADDA6_MTKAIF_MON0:
+	case AFE_ADDA6_MTKAIF_MON1:
+	case AFE_ADDA6_SRC_DEBUG_MON0:
+	case AFE_ADDA6_UL_SRC_MON0:
+	case AFE_ADDA6_UL_SRC_MON1:
+	case AFE_ASRC11_NEW_CON8:
+	case AFE_ASRC11_NEW_CON9:
+	case AFE_ASRC12_NEW_CON8:
+	case AFE_ASRC12_NEW_CON9:
+	case AFE_LRCK_CNT:
+	case AFE_DAC_MON0:
+	case AFE_DL2_CUR:
+	case AFE_DL3_CUR:
+	case AFE_DL6_CUR:
+	case AFE_DL7_CUR:
+	case AFE_DL8_CUR:
+	case AFE_DL10_CUR:
+	case AFE_DL11_CUR:
+	case AFE_UL1_CUR:
+	case AFE_UL2_CUR:
+	case AFE_UL3_CUR:
+	case AFE_UL4_CUR:
+	case AFE_UL5_CUR:
+	case AFE_UL6_CUR:
+	case AFE_UL8_CUR:
+	case AFE_UL9_CUR:
+	case AFE_UL10_CUR:
+	case AFE_DL8_CHK_SUM1:
+	case AFE_DL8_CHK_SUM2:
+	case AFE_DL8_CHK_SUM3:
+	case AFE_DL8_CHK_SUM4:
+	case AFE_DL8_CHK_SUM5:
+	case AFE_DL8_CHK_SUM6:
+	case AFE_DL10_CHK_SUM1:
+	case AFE_DL10_CHK_SUM2:
+	case AFE_DL10_CHK_SUM3:
+	case AFE_DL10_CHK_SUM4:
+	case AFE_DL10_CHK_SUM5:
+	case AFE_DL10_CHK_SUM6:
+	case AFE_DL11_CHK_SUM1:
+	case AFE_DL11_CHK_SUM2:
+	case AFE_DL11_CHK_SUM3:
+	case AFE_DL11_CHK_SUM4:
+	case AFE_DL11_CHK_SUM5:
+	case AFE_DL11_CHK_SUM6:
+	case AFE_UL1_CHK_SUM1:
+	case AFE_UL1_CHK_SUM2:
+	case AFE_UL2_CHK_SUM1:
+	case AFE_UL2_CHK_SUM2:
+	case AFE_UL3_CHK_SUM1:
+	case AFE_UL3_CHK_SUM2:
+	case AFE_UL4_CHK_SUM1:
+	case AFE_UL4_CHK_SUM2:
+	case AFE_UL5_CHK_SUM1:
+	case AFE_UL5_CHK_SUM2:
+	case AFE_UL6_CHK_SUM1:
+	case AFE_UL6_CHK_SUM2:
+	case AFE_UL8_CHK_SUM1:
+	case AFE_UL8_CHK_SUM2:
+	case AFE_DL2_CHK_SUM1:
+	case AFE_DL2_CHK_SUM2:
+	case AFE_DL3_CHK_SUM1:
+	case AFE_DL3_CHK_SUM2:
+	case AFE_DL6_CHK_SUM1:
+	case AFE_DL6_CHK_SUM2:
+	case AFE_DL7_CHK_SUM1:
+	case AFE_DL7_CHK_SUM2:
+	case AFE_UL9_CHK_SUM1:
+	case AFE_UL9_CHK_SUM2:
+	case AFE_BUS_MON1:
+	case UL1_MOD2AGT_CNT_LAT:
+	case UL2_MOD2AGT_CNT_LAT:
+	case UL3_MOD2AGT_CNT_LAT:
+	case UL4_MOD2AGT_CNT_LAT:
+	case UL5_MOD2AGT_CNT_LAT:
+	case UL6_MOD2AGT_CNT_LAT:
+	case UL8_MOD2AGT_CNT_LAT:
+	case UL9_MOD2AGT_CNT_LAT:
+	case UL10_MOD2AGT_CNT_LAT:
+	case AFE_MEMIF_BUF_FULL_MON:
+	case AFE_MEMIF_BUF_MON1:
+	case AFE_MEMIF_BUF_MON3:
+	case AFE_MEMIF_BUF_MON4:
+	case AFE_MEMIF_BUF_MON5:
+	case AFE_MEMIF_BUF_MON6:
+	case AFE_MEMIF_BUF_MON7:
+	case AFE_MEMIF_BUF_MON8:
+	case AFE_MEMIF_BUF_MON9:
+	case AFE_MEMIF_BUF_MON10:
+	case DL2_AGENT2MODULE_CNT:
+	case DL3_AGENT2MODULE_CNT:
+	case DL6_AGENT2MODULE_CNT:
+	case DL7_AGENT2MODULE_CNT:
+	case DL8_AGENT2MODULE_CNT:
+	case DL10_AGENT2MODULE_CNT:
+	case DL11_AGENT2MODULE_CNT:
+	case UL1_MODULE2AGENT_CNT:
+	case UL2_MODULE2AGENT_CNT:
+	case UL3_MODULE2AGENT_CNT:
+	case UL4_MODULE2AGENT_CNT:
+	case UL5_MODULE2AGENT_CNT:
+	case UL6_MODULE2AGENT_CNT:
+	case UL8_MODULE2AGENT_CNT:
+	case UL9_MODULE2AGENT_CNT:
+	case UL10_MODULE2AGENT_CNT:
+	case AFE_DMIC0_SRC_DEBUG_MON0:
+	case AFE_DMIC0_UL_SRC_MON0:
+	case AFE_DMIC0_UL_SRC_MON1:
+	case AFE_DMIC1_SRC_DEBUG_MON0:
+	case AFE_DMIC1_UL_SRC_MON0:
+	case AFE_DMIC1_UL_SRC_MON1:
+	case AFE_DMIC2_SRC_DEBUG_MON0:
+	case AFE_DMIC2_UL_SRC_MON0:
+	case AFE_DMIC2_UL_SRC_MON1:
+	case AFE_DMIC3_SRC_DEBUG_MON0:
+	case AFE_DMIC3_UL_SRC_MON0:
+	case AFE_DMIC3_UL_SRC_MON1:
+	case DMIC_GAIN1_CUR:
+	case DMIC_GAIN2_CUR:
+	case DMIC_GAIN3_CUR:
+	case DMIC_GAIN4_CUR:
+	case ETDM_IN1_MONITOR:
+	case ETDM_IN2_MONITOR:
+	case ETDM_OUT1_MONITOR:
+	case ETDM_OUT2_MONITOR:
+	case ETDM_OUT3_MONITOR:
+	case AFE_ADDA_SRC_DEBUG_MON0:
+	case AFE_ADDA_SRC_DEBUG_MON1:
+	case AFE_ADDA_DL_SDM_FIFO_MON:
+	case AFE_ADDA_DL_SRC_LCH_MON:
+	case AFE_ADDA_DL_SRC_RCH_MON:
+	case AFE_ADDA_DL_SDM_OUT_MON:
+	case AFE_GASRC0_NEW_CON8:
+	case AFE_GASRC0_NEW_CON9:
+	case AFE_GASRC0_NEW_CON12:
+	case AFE_GASRC1_NEW_CON8:
+	case AFE_GASRC1_NEW_CON9:
+	case AFE_GASRC1_NEW_CON12:
+	case AFE_GASRC2_NEW_CON8:
+	case AFE_GASRC2_NEW_CON9:
+	case AFE_GASRC2_NEW_CON12:
+	case AFE_GASRC3_NEW_CON8:
+	case AFE_GASRC3_NEW_CON9:
+	case AFE_GASRC3_NEW_CON12:
+	case AFE_GASRC4_NEW_CON8:
+	case AFE_GASRC4_NEW_CON9:
+	case AFE_GASRC4_NEW_CON12:
+	case AFE_GASRC5_NEW_CON8:
+	case AFE_GASRC5_NEW_CON9:
+	case AFE_GASRC5_NEW_CON12:
+	case AFE_GASRC6_NEW_CON8:
+	case AFE_GASRC6_NEW_CON9:
+	case AFE_GASRC6_NEW_CON12:
+	case AFE_GASRC7_NEW_CON8:
+	case AFE_GASRC7_NEW_CON9:
+	case AFE_GASRC7_NEW_CON12:
+	case AFE_GASRC8_NEW_CON8:
+	case AFE_GASRC8_NEW_CON9:
+	case AFE_GASRC8_NEW_CON12:
+	case AFE_GASRC9_NEW_CON8:
+	case AFE_GASRC9_NEW_CON9:
+	case AFE_GASRC9_NEW_CON12:
+	case AFE_GASRC10_NEW_CON8:
+	case AFE_GASRC10_NEW_CON9:
+	case AFE_GASRC10_NEW_CON12:
+	case AFE_GASRC11_NEW_CON8:
+	case AFE_GASRC11_NEW_CON9:
+	case AFE_GASRC11_NEW_CON12:
+		return true;
+	default:
+		return false;
+	};
+}
+
+static const struct regmap_config mt8188_afe_regmap_config = {
+	.reg_bits = 32,
+	.reg_stride = 4,
+	.val_bits = 32,
+	.volatile_reg = mt8188_is_volatile_reg,
+	.max_register = AFE_MAX_REGISTER,
+	.num_reg_defaults_raw = ((AFE_MAX_REGISTER / 4) + 1),
+	.cache_type = REGCACHE_FLAT,
+};
+
+#define AFE_IRQ_CLR_BITS (0x387)
+#define ASYS_IRQ_CLR_BITS (0xffff)
+
+static irqreturn_t mt8188_afe_irq_handler(int irq_id, void *dev_id)
+{
+	struct mtk_base_afe *afe = dev_id;
+	unsigned int val = 0;
+	unsigned int asys_irq_clr_bits = 0;
+	unsigned int afe_irq_clr_bits = 0;
+	unsigned int irq_status_bits = 0;
+	unsigned int irq_clr_bits = 0;
+	unsigned int mcu_irq_mask = 0;
+	int i = 0;
+	int ret = 0;
+
+	ret = regmap_read(afe->regmap, AFE_IRQ_STATUS, &val);
+	if (ret) {
+		dev_err(afe->dev, "%s irq status err\n", __func__);
+		afe_irq_clr_bits = AFE_IRQ_CLR_BITS;
+		asys_irq_clr_bits = ASYS_IRQ_CLR_BITS;
+		goto err_irq;
+	}
+
+	ret = regmap_read(afe->regmap, AFE_IRQ_MASK, &mcu_irq_mask);
+	if (ret) {
+		dev_err(afe->dev, "%s read irq mask err\n", __func__);
+		afe_irq_clr_bits = AFE_IRQ_CLR_BITS;
+		asys_irq_clr_bits = ASYS_IRQ_CLR_BITS;
+		goto err_irq;
+	}
+
+	/* only clr cpu irq */
+	val &= mcu_irq_mask;
+
+	for (i = 0; i < MT8188_AFE_MEMIF_NUM; i++) {
+		struct mtk_base_afe_memif *memif = &afe->memif[i];
+		struct mtk_base_irq_data const *irq_data;
+
+		if (memif->irq_usage < 0)
+			continue;
+
+		irq_data = afe->irqs[memif->irq_usage].irq_data;
+
+		irq_status_bits = BIT(irq_data->irq_status_shift);
+		irq_clr_bits = BIT(irq_data->irq_clr_shift);
+
+		if (!(val & irq_status_bits))
+			continue;
+
+		if (irq_data->irq_clr_reg == ASYS_IRQ_CLR)
+			asys_irq_clr_bits |= irq_clr_bits;
+		else
+			afe_irq_clr_bits |= irq_clr_bits;
+
+		snd_pcm_period_elapsed(memif->substream);
+	}
+
+err_irq:
+	/* clear irq */
+	if (asys_irq_clr_bits)
+		regmap_write(afe->regmap, ASYS_IRQ_CLR, asys_irq_clr_bits);
+	if (afe_irq_clr_bits)
+		regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, afe_irq_clr_bits);
+
+	return IRQ_HANDLED;
+}
+
+static int mt8188_afe_runtime_suspend(struct device *dev)
+{
+	struct mtk_base_afe *afe = dev_get_drvdata(dev);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)
+		goto skip_regmap;
+
+	mt8188_afe_disable_main_clock(afe);
+
+	regcache_cache_only(afe->regmap, true);
+	regcache_mark_dirty(afe->regmap);
+
+skip_regmap:
+	mt8188_afe_disable_reg_rw_clk(afe);
+
+	return 0;
+}
+
+static int mt8188_afe_runtime_resume(struct device *dev)
+{
+	struct mtk_base_afe *afe = dev_get_drvdata(dev);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct arm_smccc_res res;
+
+	arm_smccc_smc(MTK_SIP_AUDIO_CONTROL,
+		      MTK_AUDIO_SMC_OP_DOMAIN_SIDEBANDS,
+		      0, 0, 0, 0, 0, 0, &res);
+
+	mt8188_afe_enable_reg_rw_clk(afe);
+
+	if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)
+		goto skip_regmap;
+
+	regcache_cache_only(afe->regmap, false);
+	regcache_sync(afe->regmap);
+
+	mt8188_afe_enable_main_clock(afe);
+skip_regmap:
+	return 0;
+}
+
+static int mt8188_afe_component_probe(struct snd_soc_component *component)
+{
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	int ret;
+
+	snd_soc_component_init_regmap(component, afe->regmap);
+
+	ret = mtk_afe_add_sub_dai_control(component);
+
+	return ret;
+}
+
+static const struct snd_soc_component_driver mt8188_afe_component = {
+	.name = AFE_PCM_NAME,
+	.pointer       = mtk_afe_pcm_pointer,
+	.pcm_construct = mtk_afe_pcm_new,
+	.probe         = mt8188_afe_component_probe,
+};
+
+static int init_memif_priv_data(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_memif_priv *memif_priv;
+	int i;
+
+	for (i = MT8188_AFE_MEMIF_START; i < MT8188_AFE_MEMIF_END; i++) {
+		memif_priv = devm_kzalloc(afe->dev,
+					  sizeof(struct mtk_dai_memif_priv),
+					  GFP_KERNEL);
+		if (!memif_priv)
+			return -ENOMEM;
+
+		afe_priv->dai_priv[i] = memif_priv;
+	}
+
+	return 0;
+}
+
+static int mt8188_dai_memif_register(struct mtk_base_afe *afe)
+{
+	struct mtk_base_afe_dai *dai;
+
+	dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
+	if (!dai)
+		return -ENOMEM;
+
+	list_add(&dai->list, &afe->sub_dais);
+
+	dai->dai_drivers = mt8188_memif_dai_driver;
+	dai->num_dai_drivers = ARRAY_SIZE(mt8188_memif_dai_driver);
+
+	dai->dapm_widgets = mt8188_memif_widgets;
+	dai->num_dapm_widgets = ARRAY_SIZE(mt8188_memif_widgets);
+	dai->dapm_routes = mt8188_memif_routes;
+	dai->num_dapm_routes = ARRAY_SIZE(mt8188_memif_routes);
+
+	return init_memif_priv_data(afe);
+}
+
+typedef int (*dai_register_cb)(struct mtk_base_afe *);
+static const dai_register_cb dai_register_cbs[] = {
+	mt8188_dai_adda_register,
+	mt8188_dai_etdm_register,
+	mt8188_dai_pcm_register,
+	mt8188_dai_memif_register,
+};
+
+static const struct reg_sequence mt8188_afe_reg_defaults[] = {
+	{ AFE_IRQ_MASK, 0x387ffff },
+	{ AFE_IRQ3_CON, BIT(30) },
+	{ AFE_IRQ9_CON, BIT(30) },
+	{ ETDM_IN1_CON4, 0x12000100 },
+	{ ETDM_IN2_CON4, 0x12000100 },
+};
+
+static const struct reg_sequence mt8188_cg_patch[] = {
+	{ AUDIO_TOP_CON0, 0xfffffffb },
+	{ AUDIO_TOP_CON1, 0xfffffff8 },
+};
+
+static int mt8188_afe_init_registers(struct mtk_base_afe *afe)
+{
+	return regmap_multi_reg_write(afe->regmap,
+				      mt8188_afe_reg_defaults,
+				      ARRAY_SIZE(mt8188_afe_reg_defaults));
+}
+
+static int mt8188_afe_parse_of(struct mtk_base_afe *afe,
+			       struct device_node *np)
+{
+#if IS_ENABLED(CONFIG_SND_SOC_MT6359)
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	afe_priv->topckgen = syscon_regmap_lookup_by_phandle(afe->dev->of_node,
+							     "mediatek,topckgen");
+	if (IS_ERR(afe_priv->topckgen))
+		return dev_err_probe(afe->dev,  PTR_ERR(afe_priv->topckgen),
+				     "%s() Cannot find topckgen controller\n",
+				     __func__);
+#endif
+	return 0;
+}
+
+static int mt8188_afe_pcm_dev_probe(struct platform_device *pdev)
+{
+	struct mtk_base_afe *afe;
+	struct mt8188_afe_private *afe_priv;
+	struct device *dev;
+	int i, irq_id, ret;
+	struct snd_soc_component *component;
+	struct reset_control *rstc;
+
+	ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(33));
+	if (ret)
+		return ret;
+
+	afe = devm_kzalloc(&pdev->dev, sizeof(*afe), GFP_KERNEL);
+	if (!afe)
+		return -ENOMEM;
+
+	afe->platform_priv = devm_kzalloc(&pdev->dev, sizeof(*afe_priv),
+					  GFP_KERNEL);
+	if (!afe->platform_priv)
+		return -ENOMEM;
+
+	afe_priv = afe->platform_priv;
+	afe->dev = &pdev->dev;
+	dev = afe->dev;
+
+	afe->base_addr = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(afe->base_addr))
+		return dev_err_probe(dev, PTR_ERR(afe->base_addr),
+				     "AFE base_addr not found\n");
+
+	/* reset controller to reset audio regs before regmap cache */
+	rstc = devm_reset_control_get_exclusive(dev, "audiosys");
+	if (IS_ERR(rstc))
+		return dev_err_probe(dev, PTR_ERR(rstc),
+				     "could not get audiosys reset\n");
+
+	ret = reset_control_reset(rstc);
+	if (ret) {
+		dev_err(dev, "failed to trigger audio reset:%d\n", ret);
+		return ret;
+	}
+
+	/* initial audio related clock */
+	ret = mt8188_afe_init_clock(afe);
+	if (ret)
+		return dev_err_probe(dev, ret, "init clock error");
+
+	ret = devm_add_action_or_reset(dev, mt8188_afe_deinit_clock, (void *)afe);
+	if (ret)
+		return ret;
+
+	spin_lock_init(&afe_priv->afe_ctrl_lock);
+
+	mutex_init(&afe->irq_alloc_lock);
+
+	/* irq initialize */
+	afe->irqs_size = MT8188_AFE_IRQ_NUM;
+	afe->irqs = devm_kcalloc(dev, afe->irqs_size, sizeof(*afe->irqs),
+				 GFP_KERNEL);
+	if (!afe->irqs)
+		return -ENOMEM;
+
+	for (i = 0; i < afe->irqs_size; i++)
+		afe->irqs[i].irq_data = &irq_data[i];
+
+	/* init memif */
+	afe->memif_size = MT8188_AFE_MEMIF_NUM;
+	afe->memif = devm_kcalloc(dev, afe->memif_size, sizeof(*afe->memif),
+				  GFP_KERNEL);
+	if (!afe->memif)
+		return -ENOMEM;
+
+	for (i = 0; i < afe->memif_size; i++) {
+		afe->memif[i].data = &memif_data[i];
+		afe->memif[i].irq_usage = mt8188_afe_memif_const_irqs[i];
+		afe->memif[i].const_irq = 1;
+		afe->irqs[afe->memif[i].irq_usage].irq_occupyed = true;
+	}
+
+	/* request irq */
+	irq_id = platform_get_irq(pdev, 0);
+	if (irq_id < 0)
+		return dev_err_probe(dev, irq_id < 0 ? irq_id : -ENXIO,
+				     "no irq found");
+
+	ret = devm_request_irq(dev, irq_id, mt8188_afe_irq_handler,
+			       IRQF_TRIGGER_NONE, "asys-isr", (void *)afe);
+	if (ret)
+		return dev_err_probe(dev, ret, "could not request_irq for asys-isr\n");
+
+	/* init sub_dais */
+	INIT_LIST_HEAD(&afe->sub_dais);
+
+	for (i = 0; i < ARRAY_SIZE(dai_register_cbs); i++) {
+		ret = dai_register_cbs[i](afe);
+		if (ret)
+			return dev_err_probe(dev, ret, "dai register i %d fail\n", i);
+	}
+
+	/* init dai_driver and component_driver */
+	ret = mtk_afe_combine_sub_dai(afe);
+	if (ret)
+		return dev_err_probe(dev, ret, "mtk_afe_combine_sub_dai fail\n");
+
+	afe->mtk_afe_hardware = &mt8188_afe_hardware;
+	afe->memif_fs = mt8188_memif_fs;
+	afe->irq_fs = mt8188_irq_fs;
+
+	afe->runtime_resume = mt8188_afe_runtime_resume;
+	afe->runtime_suspend = mt8188_afe_runtime_suspend;
+
+	platform_set_drvdata(pdev, afe);
+
+	ret = mt8188_afe_parse_of(afe, pdev->dev.of_node);
+	if (ret)
+		return ret;
+
+	ret = devm_pm_runtime_enable(dev);
+	if (ret)
+		return ret;
+
+	/* enable clock for regcache get default value from hw */
+	afe_priv->pm_runtime_bypass_reg_ctl = true;
+	ret = pm_runtime_resume_and_get(dev);
+	if (ret)
+		return dev_err_probe(dev, ret, "failed to resume device\n");
+
+	afe->regmap = devm_regmap_init_mmio(&pdev->dev, afe->base_addr,
+					    &mt8188_afe_regmap_config);
+	if (IS_ERR(afe->regmap)) {
+		ret = PTR_ERR(afe->regmap);
+		goto err_pm_put;
+	}
+
+	ret = regmap_register_patch(afe->regmap, mt8188_cg_patch,
+				    ARRAY_SIZE(mt8188_cg_patch));
+	if (ret < 0) {
+		dev_info(dev, "Failed to apply cg patch\n");
+		goto err_pm_put;
+	}
+
+	/* register component */
+	ret = devm_snd_soc_register_component(dev, &mt8188_afe_component,
+					      NULL, 0);
+	if (ret) {
+		dev_warn(dev, "err_platform\n");
+		goto err_pm_put;
+	}
+
+	component = devm_kzalloc(&pdev->dev, sizeof(*component), GFP_KERNEL);
+	if (!component) {
+		ret = -ENOMEM;
+		goto err_pm_put;
+	}
+
+	ret = snd_soc_component_initialize(component,
+					   &mt8188_afe_pcm_dai_component,
+					   &pdev->dev);
+	if (ret)
+		goto err_pm_put;
+#ifdef CONFIG_DEBUG_FS
+	component->debugfs_prefix = "pcm";
+#endif
+	ret = snd_soc_add_component(component,
+				    afe->dai_drivers,
+				    afe->num_dai_drivers);
+	if (ret) {
+		dev_warn(dev, "err_add_component\n");
+		goto err_pm_put;
+	}
+
+	mt8188_afe_init_registers(afe);
+
+	pm_runtime_put_sync(&pdev->dev);
+	afe_priv->pm_runtime_bypass_reg_ctl = false;
+
+	regcache_cache_only(afe->regmap, true);
+	regcache_mark_dirty(afe->regmap);
+
+	return 0;
+err_pm_put:
+	pm_runtime_put_sync(dev);
+
+	return ret;
+}
+
+static int mt8188_afe_pcm_dev_remove(struct platform_device *pdev)
+{
+	snd_soc_unregister_component(&pdev->dev);
+
+	return 0;
+}
+
+static const struct of_device_id mt8188_afe_pcm_dt_match[] = {
+	{ .compatible = "mediatek,mt8188-afe", },
+	{},
+};
+MODULE_DEVICE_TABLE(of, mt8188_afe_pcm_dt_match);
+
+static const struct dev_pm_ops mt8188_afe_pm_ops = {
+	SET_RUNTIME_PM_OPS(mt8188_afe_runtime_suspend,
+			   mt8188_afe_runtime_resume, NULL)
+};
+
+static struct platform_driver mt8188_afe_pcm_driver = {
+	.driver = {
+		   .name = "mt8188-audio",
+		   .of_match_table = mt8188_afe_pcm_dt_match,
+		   .pm = &mt8188_afe_pm_ops,
+	},
+	.probe = mt8188_afe_pcm_dev_probe,
+	.remove = mt8188_afe_pcm_dev_remove,
+};
+
+module_platform_driver(mt8188_afe_pcm_driver);
+
+MODULE_DESCRIPTION("MediaTek SoC AFE platform driver for ALSA 8188");
+MODULE_AUTHOR("Chun-Chia.Chiu <chun-chia.chiu at mediatek.com>");
+MODULE_LICENSE("GPL");
-- 
2.18.0



From trevor.wu at mediatek.com  Wed Dec  7 19:31:48 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Thu, 8 Dec 2022 11:31:48 +0800
Subject: [PATCH v3 12/12] dt-bindings: mediatek: mt8188: add mt8188-mt6359 document
In-Reply-To: <20221208033148.21866-1-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
Message-ID: <20221208033148.21866-13-trevor.wu@mediatek.com>

Add document for mt8188 board with mt6359.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 .../bindings/sound/mt8188-mt6359.yaml         | 60 +++++++++++++++++++
 1 file changed, 60 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/mt8188-mt6359.yaml

diff --git a/Documentation/devicetree/bindings/sound/mt8188-mt6359.yaml b/Documentation/devicetree/bindings/sound/mt8188-mt6359.yaml
new file mode 100644
index 000000000000..eac1c87b693a
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/mt8188-mt6359.yaml
@@ -0,0 +1,60 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/sound/mt8188-mt6359.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek MT8188 ASoC sound card
+
+maintainers:
+  - Trevor Wu <trevor.wu at mediatek.com>
+
+properties:
+  compatible:
+    const: mediatek,mt8188-mt6359-evb
+
+  model:
+    $ref: /schemas/types.yaml#/definitions/string
+    description: User specified audio sound card name
+
+  audio-routing:
+    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
+    description:
+      A list of the connections between audio components. Each entry is a
+      sink/source pair of strings. Valid names could be the input or output
+      widgets of audio components, power supplies, MicBias of codec and the
+      software switch.
+
+  mediatek,platform:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description: The phandle of MT8188 ASoC platform.
+
+  mediatek,dptx-codec:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description: The phandle of MT8188 Display Port Tx codec node.
+
+  mediatek,hdmi-codec:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description: The phandle of MT8188 HDMI codec node.
+
+additionalProperties: false
+
+required:
+  - compatible
+  - mediatek,platform
+
+examples:
+  - |
+
+    sound: mt8188-sound {
+        compatible = "mediatek,mt8188-mt6359-evb";
+        mediatek,platform = <&afe>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&aud_pins_default>;
+        audio-routing =
+            "Headphone", "Headphone L",
+            "Headphone", "Headphone R",
+            "AIN1", "Headset Mic";
+    };
+
+...
-- 
2.18.0



From trevor.wu at mediatek.com  Wed Dec  7 19:31:45 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Thu, 8 Dec 2022 11:31:45 +0800
Subject: [PATCH v3 09/12] ASoC: mediatek: mt8188: add control for timing select
In-Reply-To: <20221208033148.21866-1-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
Message-ID: <20221208033148.21866-10-trevor.wu@mediatek.com>

Add mixer control for irq and memif timing selection.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c | 506 +++++++++++++++++++++
 1 file changed, 506 insertions(+)

diff --git a/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c b/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
index 6bef980846fa..57a31330e5f4 100644
--- a/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
+++ b/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
@@ -1394,6 +1394,510 @@ static const struct snd_soc_dapm_route mt8188_memif_routes[] = {
 	{"O041", "I169 Switch", "I169"},
 };
 
+static const char * const mt8188_afe_1x_en_sel_text[] = {
+	"a1sys_a2sys", "a3sys", "a4sys",
+};
+
+static const unsigned int mt8188_afe_1x_en_sel_values[] = {
+	0, 1, 2,
+};
+
+static SOC_VALUE_ENUM_SINGLE_DECL(dl2_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 18, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl3_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 20, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl6_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 22, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl7_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 24, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl8_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 26, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl10_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 28, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl11_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 30, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul1_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 0, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul2_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 2, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul3_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 4, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul4_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 6, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul5_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 8, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul6_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 10, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul8_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 12, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul9_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 14, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul10_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 16, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq1_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 0, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq2_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 2, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq3_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 4, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq4_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 6, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq5_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 8, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq6_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 10, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq7_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 12, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq8_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 14, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq9_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 16, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq10_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 18, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq11_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 20, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq12_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 22, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq13_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 24, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq14_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 26, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq15_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 28, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq16_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 30, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+
+static const char * const mt8188_afe_fs_timing_sel_text[] = {
+	"asys",
+	"etdmout1_1x_en",
+	"etdmout2_1x_en",
+	"etdmout3_1x_en",
+	"etdmin1_1x_en",
+	"etdmin2_1x_en",
+	"etdmin1_nx_en",
+	"etdmin2_nx_en",
+};
+
+static const unsigned int mt8188_afe_fs_timing_sel_values[] = {
+	0,
+	MT8188_ETDM_OUT1_1X_EN,
+	MT8188_ETDM_OUT2_1X_EN,
+	MT8188_ETDM_OUT3_1X_EN,
+	MT8188_ETDM_IN1_1X_EN,
+	MT8188_ETDM_IN2_1X_EN,
+	MT8188_ETDM_IN1_NX_EN,
+	MT8188_ETDM_IN2_NX_EN,
+};
+
+static SOC_VALUE_ENUM_SINGLE_DECL(dl2_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl3_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl6_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl8_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl11_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul2_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul4_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul5_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul9_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul10_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+
+static int mt8188_memif_1x_en_sel_put(struct snd_kcontrol *kcontrol,
+				      struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component =
+		snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_memif_priv *memif_priv;
+	unsigned int dai_id = kcontrol->id.device;
+	long val = ucontrol->value.integer.value[0];
+	int ret = 0;
+
+	memif_priv = afe_priv->dai_priv[dai_id];
+
+	if (val == memif_priv->asys_timing_sel)
+		return 0;
+
+	ret = snd_soc_put_enum_double(kcontrol, ucontrol);
+
+	memif_priv->asys_timing_sel = val;
+
+	return ret;
+}
+
+static int mt8188_asys_irq_1x_en_sel_put(struct snd_kcontrol *kcontrol,
+					 struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component =
+		snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	unsigned int id = kcontrol->id.device;
+	long val = ucontrol->value.integer.value[0];
+	int ret = 0;
+
+	if (val == afe_priv->irq_priv[id].asys_timing_sel)
+		return 0;
+
+	ret = snd_soc_put_enum_double(kcontrol, ucontrol);
+
+	afe_priv->irq_priv[id].asys_timing_sel = val;
+
+	return ret;
+}
+
+static int mt8188_memif_fs_timing_sel_get(struct snd_kcontrol *kcontrol,
+					  struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_memif_priv *memif_priv;
+	unsigned int dai_id = kcontrol->id.device;
+	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
+
+	memif_priv = afe_priv->dai_priv[dai_id];
+
+	ucontrol->value.enumerated.item[0] =
+		snd_soc_enum_val_to_item(e, memif_priv->fs_timing);
+
+	return 0;
+}
+
+static int mt8188_memif_fs_timing_sel_put(struct snd_kcontrol *kcontrol,
+					  struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_memif_priv *memif_priv;
+	unsigned int dai_id = kcontrol->id.device;
+	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
+	unsigned int *item = ucontrol->value.enumerated.item;
+	unsigned int prev_item = 0;
+
+	if (item[0] >= e->items)
+		return -EINVAL;
+
+	memif_priv = afe_priv->dai_priv[dai_id];
+
+	prev_item = snd_soc_enum_val_to_item(e, memif_priv->fs_timing);
+
+	if (item[0] == prev_item)
+		return 0;
+
+	memif_priv->fs_timing = snd_soc_enum_item_to_val(e, item[0]);
+
+	return 1;
+}
+
+static const struct snd_kcontrol_new mt8188_memif_controls[] = {
+	MT8188_SOC_ENUM_EXT("dl2_1x_en_sel",
+			    dl2_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL2),
+	MT8188_SOC_ENUM_EXT("dl3_1x_en_sel",
+			    dl3_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL3),
+	MT8188_SOC_ENUM_EXT("dl6_1x_en_sel",
+			    dl6_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL6),
+	MT8188_SOC_ENUM_EXT("dl7_1x_en_sel",
+			    dl7_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL7),
+	MT8188_SOC_ENUM_EXT("dl8_1x_en_sel",
+			    dl8_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL8),
+	MT8188_SOC_ENUM_EXT("dl10_1x_en_sel",
+			    dl10_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL10),
+	MT8188_SOC_ENUM_EXT("dl11_1x_en_sel",
+			    dl11_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL11),
+	MT8188_SOC_ENUM_EXT("ul1_1x_en_sel",
+			    ul1_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL1),
+	MT8188_SOC_ENUM_EXT("ul2_1x_en_sel",
+			    ul2_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL2),
+	MT8188_SOC_ENUM_EXT("ul3_1x_en_sel",
+			    ul3_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL3),
+	MT8188_SOC_ENUM_EXT("ul4_1x_en_sel",
+			    ul4_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL4),
+	MT8188_SOC_ENUM_EXT("ul5_1x_en_sel",
+			    ul5_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL5),
+	MT8188_SOC_ENUM_EXT("ul6_1x_en_sel",
+			    ul6_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL6),
+	MT8188_SOC_ENUM_EXT("ul8_1x_en_sel",
+			    ul8_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL8),
+	MT8188_SOC_ENUM_EXT("ul9_1x_en_sel",
+			    ul9_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL9),
+	MT8188_SOC_ENUM_EXT("ul10_1x_en_sel",
+			    ul10_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL10),
+	MT8188_SOC_ENUM_EXT("asys_irq1_1x_en_sel",
+			    asys_irq1_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_13),
+	MT8188_SOC_ENUM_EXT("asys_irq2_1x_en_sel",
+			    asys_irq2_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_14),
+	MT8188_SOC_ENUM_EXT("asys_irq3_1x_en_sel",
+			    asys_irq3_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_15),
+	MT8188_SOC_ENUM_EXT("asys_irq4_1x_en_sel",
+			    asys_irq4_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_16),
+	MT8188_SOC_ENUM_EXT("asys_irq5_1x_en_sel",
+			    asys_irq5_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_17),
+	MT8188_SOC_ENUM_EXT("asys_irq6_1x_en_sel",
+			    asys_irq6_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_18),
+	MT8188_SOC_ENUM_EXT("asys_irq7_1x_en_sel",
+			    asys_irq7_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_19),
+	MT8188_SOC_ENUM_EXT("asys_irq8_1x_en_sel",
+			    asys_irq8_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_20),
+	MT8188_SOC_ENUM_EXT("asys_irq9_1x_en_sel",
+			    asys_irq9_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_21),
+	MT8188_SOC_ENUM_EXT("asys_irq10_1x_en_sel",
+			    asys_irq10_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_22),
+	MT8188_SOC_ENUM_EXT("asys_irq11_1x_en_sel",
+			    asys_irq11_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_23),
+	MT8188_SOC_ENUM_EXT("asys_irq12_1x_en_sel",
+			    asys_irq12_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_24),
+	MT8188_SOC_ENUM_EXT("asys_irq13_1x_en_sel",
+			    asys_irq13_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_25),
+	MT8188_SOC_ENUM_EXT("asys_irq14_1x_en_sel",
+			    asys_irq14_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_26),
+	MT8188_SOC_ENUM_EXT("asys_irq15_1x_en_sel",
+			    asys_irq15_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_27),
+	MT8188_SOC_ENUM_EXT("asys_irq16_1x_en_sel",
+			    asys_irq16_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_28),
+	MT8188_SOC_ENUM_EXT("dl2_fs_timing_sel",
+			    dl2_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_DL2),
+	MT8188_SOC_ENUM_EXT("dl3_fs_timing_sel",
+			    dl3_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_DL3),
+	MT8188_SOC_ENUM_EXT("dl6_fs_timing_sel",
+			    dl6_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_DL6),
+	MT8188_SOC_ENUM_EXT("dl8_fs_timing_sel",
+			    dl8_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_DL8),
+	MT8188_SOC_ENUM_EXT("dl11_fs_timing_sel",
+			    dl11_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_DL11),
+	MT8188_SOC_ENUM_EXT("ul2_fs_timing_sel",
+			    ul2_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_UL2),
+	MT8188_SOC_ENUM_EXT("ul4_fs_timing_sel",
+			    ul4_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_UL4),
+	MT8188_SOC_ENUM_EXT("ul5_fs_timing_sel",
+			    ul5_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_UL5),
+	MT8188_SOC_ENUM_EXT("ul9_fs_timing_sel",
+			    ul9_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_UL9),
+	MT8188_SOC_ENUM_EXT("ul10_fs_timing_sel",
+			    ul10_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_UL10),
+};
+
 static const struct snd_soc_component_driver mt8188_afe_pcm_dai_component = {
 	.name = "mt8188-afe-pcm-dai",
 };
@@ -2583,6 +3087,8 @@ static int mt8188_dai_memif_register(struct mtk_base_afe *afe)
 	dai->num_dapm_widgets = ARRAY_SIZE(mt8188_memif_widgets);
 	dai->dapm_routes = mt8188_memif_routes;
 	dai->num_dapm_routes = ARRAY_SIZE(mt8188_memif_routes);
+	dai->controls = mt8188_memif_controls;
+	dai->num_controls = ARRAY_SIZE(mt8188_memif_controls);
 
 	return init_memif_priv_data(afe);
 }
-- 
2.18.0



From trevor.wu at mediatek.com  Wed Dec  7 19:31:40 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Thu, 8 Dec 2022 11:31:40 +0800
Subject: [PATCH v3 04/12] ASoC: mediatek: mt8188: support adda in platform driver
In-Reply-To: <20221208033148.21866-1-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
Message-ID: <20221208033148.21866-5-trevor.wu@mediatek.com>

Add mt8188 adda dai driver support.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
I don't add Reviewed-by tag because one new header file is included
in the patch to resolve compiling issue found by kernel test robot.
---
 sound/soc/mediatek/mt8188/mt8188-dai-adda.c | 632 ++++++++++++++++++++
 1 file changed, 632 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-adda.c

diff --git a/sound/soc/mediatek/mt8188/mt8188-dai-adda.c b/sound/soc/mediatek/mt8188/mt8188-dai-adda.c
new file mode 100644
index 000000000000..2f3080ff9e21
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-dai-adda.c
@@ -0,0 +1,632 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MediaTek ALSA SoC Audio DAI ADDA Control
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#include <linux/bitfield.h>
+#include <linux/delay.h>
+#include <linux/regmap.h>
+#include "mt8188-afe-clk.h"
+#include "mt8188-afe-common.h"
+#include "mt8188-reg.h"
+
+#define ADDA_HIRES_THRES 48000
+
+enum {
+	SUPPLY_SEQ_CLOCK_SEL,
+	SUPPLY_SEQ_ADDA_DL_ON,
+	SUPPLY_SEQ_ADDA_MTKAIF_CFG,
+	SUPPLY_SEQ_ADDA_UL_ON,
+	SUPPLY_SEQ_ADDA_AFE_ON,
+};
+
+enum {
+	MTK_AFE_ADDA_DL_RATE_8K = 0,
+	MTK_AFE_ADDA_DL_RATE_11K = 1,
+	MTK_AFE_ADDA_DL_RATE_12K = 2,
+	MTK_AFE_ADDA_DL_RATE_16K = 3,
+	MTK_AFE_ADDA_DL_RATE_22K = 4,
+	MTK_AFE_ADDA_DL_RATE_24K = 5,
+	MTK_AFE_ADDA_DL_RATE_32K = 6,
+	MTK_AFE_ADDA_DL_RATE_44K = 7,
+	MTK_AFE_ADDA_DL_RATE_48K = 8,
+	MTK_AFE_ADDA_DL_RATE_96K = 9,
+	MTK_AFE_ADDA_DL_RATE_192K = 10,
+};
+
+enum {
+	MTK_AFE_ADDA_UL_RATE_8K = 0,
+	MTK_AFE_ADDA_UL_RATE_16K = 1,
+	MTK_AFE_ADDA_UL_RATE_32K = 2,
+	MTK_AFE_ADDA_UL_RATE_48K = 3,
+	MTK_AFE_ADDA_UL_RATE_96K = 4,
+	MTK_AFE_ADDA_UL_RATE_192K = 5,
+};
+
+enum {
+	DELAY_DATA_MISO1 = 0,
+	DELAY_DATA_MISO0 = 1,
+};
+
+struct mtk_dai_adda_priv {
+	unsigned int dl_rate;
+	unsigned int ul_rate;
+};
+
+static unsigned int afe_adda_dl_rate_transform(struct mtk_base_afe *afe,
+					       unsigned int rate)
+{
+	switch (rate) {
+	case 8000:
+		return MTK_AFE_ADDA_DL_RATE_8K;
+	case 11025:
+		return MTK_AFE_ADDA_DL_RATE_11K;
+	case 12000:
+		return MTK_AFE_ADDA_DL_RATE_12K;
+	case 16000:
+		return MTK_AFE_ADDA_DL_RATE_16K;
+	case 22050:
+		return MTK_AFE_ADDA_DL_RATE_22K;
+	case 24000:
+		return MTK_AFE_ADDA_DL_RATE_24K;
+	case 32000:
+		return MTK_AFE_ADDA_DL_RATE_32K;
+	case 44100:
+		return MTK_AFE_ADDA_DL_RATE_44K;
+	case 48000:
+		return MTK_AFE_ADDA_DL_RATE_48K;
+	case 96000:
+		return MTK_AFE_ADDA_DL_RATE_96K;
+	case 192000:
+		return MTK_AFE_ADDA_DL_RATE_192K;
+	default:
+		dev_info(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
+			 __func__, rate);
+		return MTK_AFE_ADDA_DL_RATE_48K;
+	}
+}
+
+static unsigned int afe_adda_ul_rate_transform(struct mtk_base_afe *afe,
+					       unsigned int rate)
+{
+	switch (rate) {
+	case 8000:
+		return MTK_AFE_ADDA_UL_RATE_8K;
+	case 16000:
+		return MTK_AFE_ADDA_UL_RATE_16K;
+	case 32000:
+		return MTK_AFE_ADDA_UL_RATE_32K;
+	case 48000:
+		return MTK_AFE_ADDA_UL_RATE_48K;
+	case 96000:
+		return MTK_AFE_ADDA_UL_RATE_96K;
+	case 192000:
+		return MTK_AFE_ADDA_UL_RATE_192K;
+	default:
+		dev_info(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n",
+			 __func__, rate);
+		return MTK_AFE_ADDA_UL_RATE_48K;
+	}
+}
+
+static int mt8188_adda_mtkaif_init(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtkaif_param *param = &afe_priv->mtkaif_params;
+	int delay_data;
+	int delay_cycle;
+	unsigned int mask = 0;
+	unsigned int val = 0;
+
+	/* set rx protocol 2 & mtkaif_rxif_clkinv_adc inverse */
+	regmap_set_bits(afe->regmap, AFE_ADDA_MTKAIF_CFG0,
+			MTKAIF_RXIF_CLKINV_ADC | MTKAIF_RXIF_PROTOCOL2);
+
+	regmap_set_bits(afe->regmap, AFE_AUD_PAD_TOP, RG_RX_PROTOCOL2);
+
+	if (!param->mtkaif_calibration_ok) {
+		dev_info(afe->dev, "%s(), calibration fail\n",  __func__);
+		return 0;
+	}
+
+	/* set delay for ch1, ch2 */
+	if (param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0] >=
+	    param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1]) {
+		delay_data = DELAY_DATA_MISO1;
+		delay_cycle =
+			param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0] -
+			param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1];
+	} else {
+		delay_data = DELAY_DATA_MISO0;
+		delay_cycle =
+			param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1] -
+			param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0];
+	}
+
+	val = 0;
+	mask = (MTKAIF_RXIF_DELAY_DATA | MTKAIF_RXIF_DELAY_CYCLE_MASK);
+	val |= FIELD_PREP(MTKAIF_RXIF_DELAY_CYCLE_MASK, delay_cycle);
+	val |= FIELD_PREP(MTKAIF_RXIF_DELAY_DATA, delay_data);
+	regmap_update_bits(afe->regmap, AFE_ADDA_MTKAIF_RX_CFG2, mask, val);
+
+	return 0;
+}
+
+static int mtk_adda_mtkaif_cfg_event(struct snd_soc_dapm_widget *w,
+				     struct snd_kcontrol *kcontrol,
+				     int event)
+{
+	struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+
+	dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n",
+		__func__, w->name, event);
+
+	switch (event) {
+	case SND_SOC_DAPM_PRE_PMU:
+		mt8188_adda_mtkaif_init(afe);
+		break;
+	default:
+		break;
+	}
+
+	return 0;
+}
+
+static int mtk_adda_dl_event(struct snd_soc_dapm_widget *w,
+			     struct snd_kcontrol *kcontrol,
+			     int event)
+{
+	struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+
+	dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n",
+		__func__, w->name, event);
+
+	switch (event) {
+	case SND_SOC_DAPM_POST_PMD:
+		/* should delayed 1/fs(smallest is 8k) = 125us before afe off */
+		usleep_range(125, 135);
+		break;
+	default:
+		break;
+	}
+
+	return 0;
+}
+
+static void mtk_adda_ul_mictype(struct mtk_base_afe *afe, bool dmic)
+{
+	unsigned int reg = AFE_ADDA_UL_SRC_CON0;
+	unsigned int val;
+
+	val = (UL_SDM3_LEVEL_CTL | UL_MODE_3P25M_CH1_CTL |
+	       UL_MODE_3P25M_CH2_CTL);
+
+	/* turn on dmic, ch1, ch2 */
+	if (dmic)
+		regmap_set_bits(afe->regmap, reg, val);
+	else
+		regmap_clear_bits(afe->regmap, reg, val);
+}
+
+static int mtk_adda_ul_event(struct snd_soc_dapm_widget *w,
+			     struct snd_kcontrol *kcontrol,
+			     int event)
+{
+	struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtkaif_param *param = &afe_priv->mtkaif_params;
+
+	dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n",
+		__func__, w->name, event);
+
+	switch (event) {
+	case SND_SOC_DAPM_PRE_PMU:
+		mtk_adda_ul_mictype(afe, param->mtkaif_dmic_on);
+		break;
+	case SND_SOC_DAPM_POST_PMD:
+		/* should delayed 1/fs(smallest is 8k) = 125us before afe off */
+		usleep_range(125, 135);
+		break;
+	default:
+		break;
+	}
+
+	return 0;
+}
+
+static int mtk_audio_hires_event(struct snd_soc_dapm_widget *w,
+				 struct snd_kcontrol *kcontrol,
+				 int event)
+{
+	struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct clk *clk = afe_priv->clk[MT8188_CLK_TOP_AUDIO_H_SEL];
+	struct clk *clk_parent;
+
+	dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n",
+		__func__, w->name, event);
+
+	switch (event) {
+	case SND_SOC_DAPM_PRE_PMU:
+		clk_parent = afe_priv->clk[MT8188_CLK_TOP_APLL1];
+		break;
+	case SND_SOC_DAPM_POST_PMD:
+		clk_parent = afe_priv->clk[MT8188_CLK_XTAL_26M];
+		break;
+	default:
+		return 0;
+	}
+	mt8188_afe_set_clk_parent(afe, clk, clk_parent);
+
+	return 0;
+}
+
+static int mtk_afe_adc_hires_connect(struct snd_soc_dapm_widget *source,
+				     struct snd_soc_dapm_widget *sink)
+{
+	struct snd_soc_dapm_widget *w = source;
+	struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_adda_priv *adda_priv;
+
+	adda_priv = afe_priv->dai_priv[MT8188_AFE_IO_ADDA];
+
+	if (!adda_priv) {
+		dev_err(afe->dev, "%s adda_priv == NULL", __func__);
+		return 0;
+	}
+
+	return !!(adda_priv->ul_rate > ADDA_HIRES_THRES);
+}
+
+static int mtk_afe_dac_hires_connect(struct snd_soc_dapm_widget *source,
+				     struct snd_soc_dapm_widget *sink)
+{
+	struct snd_soc_dapm_widget *w = source;
+	struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_adda_priv *adda_priv;
+
+	adda_priv = afe_priv->dai_priv[MT8188_AFE_IO_ADDA];
+
+	if (!adda_priv) {
+		dev_err(afe->dev, "%s adda_priv == NULL", __func__);
+		return 0;
+	}
+
+	return !!(adda_priv->dl_rate > ADDA_HIRES_THRES);
+}
+
+static const struct snd_kcontrol_new mtk_dai_adda_o176_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN176, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I002 Switch", AFE_CONN176, 2, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN176, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN176, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN176_2, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_adda_o177_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN177, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I003 Switch", AFE_CONN177, 3, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN177, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN177, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN177_2, 7, 1, 0),
+};
+
+static const char * const adda_dlgain_mux_map[] = {
+	"Bypass", "Connect",
+};
+
+static SOC_ENUM_SINGLE_DECL(adda_dlgain_mux_map_enum,
+			    SND_SOC_NOPM, 0,
+			    adda_dlgain_mux_map);
+
+static const struct snd_kcontrol_new adda_dlgain_mux_control =
+	SOC_DAPM_ENUM("DL_GAIN_MUX", adda_dlgain_mux_map_enum);
+
+static const struct snd_soc_dapm_widget mtk_dai_adda_widgets[] = {
+	SND_SOC_DAPM_MIXER("I168", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I169", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	SND_SOC_DAPM_MIXER("O176", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_adda_o176_mix,
+			   ARRAY_SIZE(mtk_dai_adda_o176_mix)),
+	SND_SOC_DAPM_MIXER("O177", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_adda_o177_mix,
+			   ARRAY_SIZE(mtk_dai_adda_o177_mix)),
+
+	SND_SOC_DAPM_SUPPLY_S("ADDA Enable", SUPPLY_SEQ_ADDA_AFE_ON,
+			      AFE_ADDA_UL_DL_CON0,
+			      ADDA_AFE_ON_SHIFT, 0,
+			      NULL,
+			      0),
+
+	SND_SOC_DAPM_SUPPLY_S("ADDA Playback Enable", SUPPLY_SEQ_ADDA_DL_ON,
+			      AFE_ADDA_DL_SRC2_CON0,
+			      DL_2_SRC_ON_TMP_CTRL_PRE_SHIFT, 0,
+			      mtk_adda_dl_event,
+			      SND_SOC_DAPM_POST_PMD),
+
+	SND_SOC_DAPM_SUPPLY_S("ADDA Capture Enable", SUPPLY_SEQ_ADDA_UL_ON,
+			      AFE_ADDA_UL_SRC_CON0,
+			      UL_SRC_ON_TMP_CTL_SHIFT, 0,
+			      mtk_adda_ul_event,
+			      SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
+
+	SND_SOC_DAPM_SUPPLY_S("AUDIO_HIRES", SUPPLY_SEQ_CLOCK_SEL,
+			      SND_SOC_NOPM,
+			      0, 0,
+			      mtk_audio_hires_event,
+			      SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
+
+	SND_SOC_DAPM_SUPPLY_S("ADDA_MTKAIF_CFG", SUPPLY_SEQ_ADDA_MTKAIF_CFG,
+			      SND_SOC_NOPM,
+			      0, 0,
+			      mtk_adda_mtkaif_cfg_event,
+			      SND_SOC_DAPM_PRE_PMU),
+
+	SND_SOC_DAPM_MUX("DL_GAIN_MUX", SND_SOC_NOPM, 0, 0,
+			 &adda_dlgain_mux_control),
+
+	SND_SOC_DAPM_PGA("DL_GAIN", AFE_ADDA_DL_SRC2_CON0,
+			 DL_2_GAIN_ON_CTL_PRE_SHIFT, 0, NULL, 0),
+
+	SND_SOC_DAPM_INPUT("ADDA_INPUT"),
+	SND_SOC_DAPM_OUTPUT("ADDA_OUTPUT"),
+
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_dac"),
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_adc"),
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_dac_hires"),
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_adc_hires"),
+};
+
+static const struct snd_soc_dapm_route mtk_dai_adda_routes[] = {
+	{"ADDA Capture", NULL, "ADDA Enable"},
+	{"ADDA Capture", NULL, "ADDA Capture Enable"},
+	{"ADDA Capture", NULL, "ADDA_MTKAIF_CFG"},
+	{"ADDA Capture", NULL, "aud_adc"},
+	{"ADDA Capture", NULL, "aud_adc_hires", mtk_afe_adc_hires_connect},
+	{"aud_adc_hires", NULL, "AUDIO_HIRES"},
+
+	{"I168", NULL, "ADDA Capture"},
+	{"I169", NULL, "ADDA Capture"},
+
+	{"ADDA Playback", NULL, "ADDA Enable"},
+	{"ADDA Playback", NULL, "ADDA Playback Enable"},
+	{"ADDA Playback", NULL, "aud_dac"},
+	{"ADDA Playback", NULL, "aud_dac_hires", mtk_afe_dac_hires_connect},
+	{"aud_dac_hires", NULL, "AUDIO_HIRES"},
+
+	{"DL_GAIN", NULL, "O176"},
+	{"DL_GAIN", NULL, "O177"},
+
+	{"DL_GAIN_MUX", "Bypass", "O176"},
+	{"DL_GAIN_MUX", "Bypass", "O177"},
+	{"DL_GAIN_MUX", "Connect", "DL_GAIN"},
+
+	{"ADDA Playback", NULL, "DL_GAIN_MUX"},
+
+	{"O176", "I000 Switch", "I000"},
+	{"O177", "I001 Switch", "I001"},
+
+	{"O176", "I002 Switch", "I002"},
+	{"O177", "I003 Switch", "I003"},
+
+	{"O176", "I020 Switch", "I020"},
+	{"O177", "I021 Switch", "I021"},
+
+	{"O176", "I022 Switch", "I022"},
+	{"O177", "I023 Switch", "I023"},
+
+	{"O176", "I070 Switch", "I070"},
+	{"O177", "I071 Switch", "I071"},
+
+	{"ADDA Capture", NULL, "ADDA_INPUT"},
+	{"ADDA_OUTPUT", NULL, "ADDA Playback"},
+};
+
+static int mt8188_adda_dmic_get(struct snd_kcontrol *kcontrol,
+				struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtkaif_param *param = &afe_priv->mtkaif_params;
+
+	ucontrol->value.integer.value[0] = param->mtkaif_dmic_on;
+	return 0;
+}
+
+static int mt8188_adda_dmic_set(struct snd_kcontrol *kcontrol,
+				struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtkaif_param *param = &afe_priv->mtkaif_params;
+	int dmic_on;
+
+	dmic_on = !!ucontrol->value.integer.value[0];
+
+	dev_dbg(afe->dev, "%s(), kcontrol name %s, dmic_on %d\n",
+		__func__, kcontrol->id.name, dmic_on);
+
+	if (param->mtkaif_dmic_on == dmic_on)
+		return 0;
+
+	param->mtkaif_dmic_on = dmic_on;
+	return 1;
+}
+
+static const struct snd_kcontrol_new mtk_dai_adda_controls[] = {
+	SOC_SINGLE("ADDA_DL_GAIN", AFE_ADDA_DL_SRC2_CON1,
+		   DL_2_GAIN_CTL_PRE_SHIFT, 65535, 0),
+	SOC_SINGLE_BOOL_EXT("MTKAIF_DMIC Switch", 0,
+			    mt8188_adda_dmic_get, mt8188_adda_dmic_set),
+};
+
+static int mtk_dai_da_configure(struct mtk_base_afe *afe,
+				unsigned int rate, int id)
+{
+	unsigned int val = 0;
+	unsigned int mask = 0;
+
+	/* set sampling rate */
+	mask |= DL_2_INPUT_MODE_CTL_MASK;
+	val |= FIELD_PREP(DL_2_INPUT_MODE_CTL_MASK,
+			  afe_adda_dl_rate_transform(afe, rate));
+
+	/* turn off saturation */
+	mask |= DL_2_CH1_SATURATION_EN_CTL;
+	mask |= DL_2_CH2_SATURATION_EN_CTL;
+
+	/* turn off mute function */
+	mask |= DL_2_MUTE_CH1_OFF_CTL_PRE;
+	mask |= DL_2_MUTE_CH2_OFF_CTL_PRE;
+	val |= DL_2_MUTE_CH1_OFF_CTL_PRE;
+	val |= DL_2_MUTE_CH2_OFF_CTL_PRE;
+
+	/* set voice input data if input sample rate is 8k or 16k */
+	mask |= DL_2_VOICE_MODE_CTL_PRE;
+	if (rate == 8000 || rate == 16000)
+		val |= DL_2_VOICE_MODE_CTL_PRE;
+
+	regmap_update_bits(afe->regmap, AFE_ADDA_DL_SRC2_CON0, mask, val);
+
+	/* new 2nd sdm */
+	regmap_set_bits(afe->regmap, AFE_ADDA_DL_SDM_DCCOMP_CON,
+			DL_USE_NEW_2ND_SDM);
+
+	return 0;
+}
+
+static int mtk_dai_ad_configure(struct mtk_base_afe *afe,
+				unsigned int rate, int id)
+{
+	unsigned int val;
+	unsigned int mask;
+
+	mask = UL_VOICE_MODE_CTL_MASK;
+	val = FIELD_PREP(UL_VOICE_MODE_CTL_MASK,
+			 afe_adda_ul_rate_transform(afe, rate));
+
+	regmap_update_bits(afe->regmap, AFE_ADDA_UL_SRC_CON0,
+			   mask, val);
+	return 0;
+}
+
+static int mtk_dai_adda_hw_params(struct snd_pcm_substream *substream,
+				  struct snd_pcm_hw_params *params,
+				  struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_adda_priv *adda_priv = afe_priv->dai_priv[dai->id];
+	unsigned int rate = params_rate(params);
+	int id = dai->id;
+	int ret = 0;
+
+	dev_dbg(afe->dev, "%s(), id %d, stream %d, rate %d\n",
+		__func__, id, substream->stream, rate);
+
+	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+		adda_priv->dl_rate = rate;
+		ret = mtk_dai_da_configure(afe, rate, id);
+	} else {
+		adda_priv->ul_rate = rate;
+		ret = mtk_dai_ad_configure(afe, rate, id);
+	}
+
+	return ret;
+}
+
+static const struct snd_soc_dai_ops mtk_dai_adda_ops = {
+	.hw_params = mtk_dai_adda_hw_params,
+};
+
+/* dai driver */
+#define MTK_ADDA_PLAYBACK_RATES (SNDRV_PCM_RATE_8000_48000 |\
+				 SNDRV_PCM_RATE_96000 |\
+				 SNDRV_PCM_RATE_192000)
+
+#define MTK_ADDA_CAPTURE_RATES (SNDRV_PCM_RATE_8000 |\
+				SNDRV_PCM_RATE_16000 |\
+				SNDRV_PCM_RATE_32000 |\
+				SNDRV_PCM_RATE_48000 |\
+				SNDRV_PCM_RATE_96000 |\
+				SNDRV_PCM_RATE_192000)
+
+#define MTK_ADDA_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
+			  SNDRV_PCM_FMTBIT_S24_LE |\
+			  SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_driver mtk_dai_adda_driver[] = {
+	{
+		.name = "ADDA",
+		.id = MT8188_AFE_IO_ADDA,
+		.playback = {
+			.stream_name = "ADDA Playback",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_ADDA_PLAYBACK_RATES,
+			.formats = MTK_ADDA_FORMATS,
+		},
+		.capture = {
+			.stream_name = "ADDA Capture",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_ADDA_CAPTURE_RATES,
+			.formats = MTK_ADDA_FORMATS,
+		},
+		.ops = &mtk_dai_adda_ops,
+	},
+};
+
+static int init_adda_priv_data(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_adda_priv *adda_priv;
+
+	adda_priv = devm_kzalloc(afe->dev, sizeof(struct mtk_dai_adda_priv),
+				 GFP_KERNEL);
+	if (!adda_priv)
+		return -ENOMEM;
+
+	afe_priv->dai_priv[MT8188_AFE_IO_ADDA] = adda_priv;
+
+	return 0;
+}
+
+int mt8188_dai_adda_register(struct mtk_base_afe *afe)
+{
+	struct mtk_base_afe_dai *dai;
+
+	dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
+	if (!dai)
+		return -ENOMEM;
+
+	list_add(&dai->list, &afe->sub_dais);
+
+	dai->dai_drivers = mtk_dai_adda_driver;
+	dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_adda_driver);
+
+	dai->dapm_widgets = mtk_dai_adda_widgets;
+	dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_adda_widgets);
+	dai->dapm_routes = mtk_dai_adda_routes;
+	dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_adda_routes);
+	dai->controls = mtk_dai_adda_controls;
+	dai->num_controls = ARRAY_SIZE(mtk_dai_adda_controls);
+
+	return init_adda_priv_data(afe);
+}
-- 
2.18.0



From peter.wang at mediatek.com  Wed Dec  7 18:59:39 2022
From: peter.wang at mediatek.com (=?utf-8?B?UGV0ZXIgV2FuZyAo546L5L+h5Y+LKQ==?=)
Date: Thu, 8 Dec 2022 02:59:39 +0000
Subject: [PATCH v4] ufs: core: wlun suspend SSU/enter hibern8 fail
 recovery
In-Reply-To: <4ddd814b-c8ed-8ac8-710d-aa317882fdb1@intel.com>
References: <20221206031109.10609-1-peter.wang@mediatek.com>
	 <4ddd814b-c8ed-8ac8-710d-aa317882fdb1@intel.com>
Message-ID: <440e135732277e1cb12e688036325150e510b2f5.camel@mediatek.com>

On Wed, 2022-12-07 at 19:17 +0200, Adrian Hunter wrote:
> On 6/12/22 05:11, peter.wang at mediatek.com wrote:
> > From: Peter Wang <peter.wang at mediatek.com>
> > 
> > When SSU/enter hibern8 fail in wlun suspend flow, trigger error
> > handler and return busy to break the suspend.
> > If not, wlun runtime pm status become error and the consumer will
> > stuck in runtime suspend status.
> > 
> > Signed-off-by: Peter Wang <peter.wang at mediatek.com>
> 
> Should this have a Fixes or stable tag?
> 

Hi Adrian,

Yes, will add Fixes tag. 
Thanks for reminder.


> Another minor comment below, otherwise:
> 
> Reviewed-by: Adrian Hunter <adrian.hunter at intel.com>
> 
> > ---
> >  drivers/ufs/core/ufshcd.c | 26 ++++++++++++++++++++++++++
> >  1 file changed, 26 insertions(+)
> > 
> > diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> > index b1f59a5fe632..98f105f32877 100644
> > --- a/drivers/ufs/core/ufshcd.c
> > +++ b/drivers/ufs/core/ufshcd.c
> > @@ -9049,6 +9049,19 @@ static int __ufshcd_wl_suspend(struct
> > ufs_hba *hba, enum ufs_pm_op pm_op)
> >  
> >  		if (!hba->dev_info.b_rpm_dev_flush_capable) {
> >  			ret = ufshcd_set_dev_pwr_mode(hba,
> > req_dev_pwr_mode);
> > +			if (ret && pm_op != UFS_SHUTDOWN_PM) {
> > +				/*
> > +				 * If return err in suspend flow, IO
> > will hang.
> > +				 * Trigger error handler and break
> > suspend for
> > +				 * error recovery.
> > +				 */
> > +				spin_lock_irq(hba->host->host_lock);
> > +				hba->force_reset = true;
> > +				ufshcd_schedule_eh_work(hba);
> > +				spin_unlock_irq(hba->host->host_lock);
> > +
> > +				ret = -EBUSY;
> > +			}
> >  			if (ret)
> >  				goto enable_scaling;
> >  		}
> > @@ -9060,6 +9073,19 @@ static int __ufshcd_wl_suspend(struct
> > ufs_hba *hba, enum ufs_pm_op pm_op)
> >  	 */
> >  	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
> >  	ret = ufshcd_link_state_transition(hba, req_link_state,
> > check_for_bkops);
> > +	if (ret && pm_op != UFS_SHUTDOWN_PM) {
> > +		/*
> > +		 * If return err in suspend flow, IO will hang.
> > +		 * Trigger error handler and break suspend for
> > +		 * error recovery.
> > +		 */
> > +		spin_lock_irq(hba->host->host_lock);
> > +		hba->force_reset = true;
> > +		ufshcd_schedule_eh_work(hba);
> > +		spin_unlock_irq(hba->host->host_lock);
> 
> Same 4 lines of code could be separated into a helper function.

OK, will change next version.
Thanks for review.

> 
> > +
> > +		ret = -EBUSY;
> > +	}
> >  	if (ret)
> >  		goto set_dev_active;
> >  
> 
> 

From trevor.wu at mediatek.com  Wed Dec  7 19:31:38 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Thu, 8 Dec 2022 11:31:38 +0800
Subject: [PATCH v3 02/12] ASoC: mediatek: mt8188: add common header
In-Reply-To: <20221208033148.21866-1-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
Message-ID: <20221208033148.21866-3-trevor.wu@mediatek.com>

Add header files for register definition and structure.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 sound/soc/mediatek/mt8188/mt8188-afe-common.h |  151 +
 sound/soc/mediatek/mt8188/mt8188-reg.h        | 3180 +++++++++++++++++
 2 files changed, 3331 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-common.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-reg.h

diff --git a/sound/soc/mediatek/mt8188/mt8188-afe-common.h b/sound/soc/mediatek/mt8188/mt8188-afe-common.h
new file mode 100644
index 000000000000..eb7e57c239bd
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-afe-common.h
@@ -0,0 +1,151 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * mt8188-afe-common.h  --  MediaTek 8188 audio driver definitions
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#ifndef _MT_8188_AFE_COMMON_H_
+#define _MT_8188_AFE_COMMON_H_
+
+#include <linux/list.h>
+#include <linux/regmap.h>
+#include <sound/soc.h>
+#include "../common/mtk-base-afe.h"
+
+enum {
+	MT8188_DAI_START,
+	MT8188_AFE_MEMIF_START = MT8188_DAI_START,
+	MT8188_AFE_MEMIF_DL2 = MT8188_AFE_MEMIF_START,
+	MT8188_AFE_MEMIF_DL3,
+	MT8188_AFE_MEMIF_DL6,
+	MT8188_AFE_MEMIF_DL7,
+	MT8188_AFE_MEMIF_DL8,
+	MT8188_AFE_MEMIF_DL10,
+	MT8188_AFE_MEMIF_DL11,
+	MT8188_AFE_MEMIF_UL_START,
+	MT8188_AFE_MEMIF_UL1 = MT8188_AFE_MEMIF_UL_START,
+	MT8188_AFE_MEMIF_UL2,
+	MT8188_AFE_MEMIF_UL3,
+	MT8188_AFE_MEMIF_UL4,
+	MT8188_AFE_MEMIF_UL5,
+	MT8188_AFE_MEMIF_UL6,
+	MT8188_AFE_MEMIF_UL8,
+	MT8188_AFE_MEMIF_UL9,
+	MT8188_AFE_MEMIF_UL10,
+	MT8188_AFE_MEMIF_END,
+	MT8188_AFE_MEMIF_NUM = (MT8188_AFE_MEMIF_END - MT8188_AFE_MEMIF_START),
+	MT8188_AFE_IO_START = MT8188_AFE_MEMIF_END,
+	MT8188_AFE_IO_ADDA = MT8188_AFE_IO_START,
+	MT8188_AFE_IO_DMIC_IN,
+	MT8188_AFE_IO_DPTX,
+	MT8188_AFE_IO_ETDM_START,
+	MT8188_AFE_IO_ETDM1_IN = MT8188_AFE_IO_ETDM_START,
+	MT8188_AFE_IO_ETDM2_IN,
+	MT8188_AFE_IO_ETDM1_OUT,
+	MT8188_AFE_IO_ETDM2_OUT,
+	MT8188_AFE_IO_ETDM3_OUT,
+	MT8188_AFE_IO_ETDM_END,
+	MT8188_AFE_IO_ETDM_NUM =
+		(MT8188_AFE_IO_ETDM_END - MT8188_AFE_IO_ETDM_START),
+	MT8188_AFE_IO_PCM = MT8188_AFE_IO_ETDM_END,
+	MT8188_AFE_IO_END,
+	MT8188_AFE_IO_NUM = (MT8188_AFE_IO_END - MT8188_AFE_IO_START),
+	MT8188_DAI_END = MT8188_AFE_IO_END,
+	MT8188_DAI_NUM = (MT8188_DAI_END - MT8188_DAI_START),
+};
+
+enum {
+	MT8188_TOP_CG_A1SYS_TIMING,
+	MT8188_TOP_CG_A2SYS_TIMING,
+	MT8188_TOP_CG_26M_TIMING,
+	MT8188_TOP_CG_NUM,
+};
+
+enum {
+	MT8188_AFE_IRQ_1,
+	MT8188_AFE_IRQ_2,
+	MT8188_AFE_IRQ_3,
+	MT8188_AFE_IRQ_8,
+	MT8188_AFE_IRQ_9,
+	MT8188_AFE_IRQ_10,
+	MT8188_AFE_IRQ_13,
+	MT8188_AFE_IRQ_14,
+	MT8188_AFE_IRQ_15,
+	MT8188_AFE_IRQ_16,
+	MT8188_AFE_IRQ_17,
+	MT8188_AFE_IRQ_18,
+	MT8188_AFE_IRQ_19,
+	MT8188_AFE_IRQ_20,
+	MT8188_AFE_IRQ_21,
+	MT8188_AFE_IRQ_22,
+	MT8188_AFE_IRQ_23,
+	MT8188_AFE_IRQ_24,
+	MT8188_AFE_IRQ_25,
+	MT8188_AFE_IRQ_26,
+	MT8188_AFE_IRQ_27,
+	MT8188_AFE_IRQ_28,
+	MT8188_AFE_IRQ_NUM,
+};
+
+enum {
+	MT8188_ETDM_OUT1_1X_EN = 9,
+	MT8188_ETDM_OUT2_1X_EN = 10,
+	MT8188_ETDM_OUT3_1X_EN = 11,
+	MT8188_ETDM_IN1_1X_EN = 12,
+	MT8188_ETDM_IN2_1X_EN = 13,
+	MT8188_ETDM_IN1_NX_EN = 25,
+	MT8188_ETDM_IN2_NX_EN = 26,
+};
+
+enum {
+	MT8188_MTKAIF_MISO_0,
+	MT8188_MTKAIF_MISO_1,
+	MT8188_MTKAIF_MISO_NUM,
+};
+
+struct mtk_dai_memif_irq_priv {
+	unsigned int asys_timing_sel;
+};
+
+struct mtkaif_param {
+	bool mtkaif_calibration_ok;
+	int mtkaif_chosen_phase[MT8188_MTKAIF_MISO_NUM];
+	int mtkaif_phase_cycle[MT8188_MTKAIF_MISO_NUM];
+	int mtkaif_dmic_on;
+};
+
+struct clk;
+
+struct mt8188_afe_private {
+	struct clk **clk;
+	struct clk_lookup **lookup;
+	struct regmap *topckgen;
+	int pm_runtime_bypass_reg_ctl;
+	spinlock_t afe_ctrl_lock; /* Lock for afe control */
+	struct mtk_dai_memif_irq_priv irq_priv[MT8188_AFE_IRQ_NUM];
+	struct mtkaif_param mtkaif_params;
+
+	/* dai */
+	void *dai_priv[MT8188_DAI_NUM];
+};
+
+int mt8188_afe_fs_timing(unsigned int rate);
+/* dai register */
+int mt8188_dai_adda_register(struct mtk_base_afe *afe);
+int mt8188_dai_etdm_register(struct mtk_base_afe *afe);
+int mt8188_dai_pcm_register(struct mtk_base_afe *afe);
+
+#define MT8188_SOC_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put, id) \
+{ \
+	.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
+	.info = snd_soc_info_enum_double, \
+	.get = xhandler_get, .put = xhandler_put, \
+	.device = id, \
+	.private_value = (unsigned long)&(xenum), \
+}
+
+#endif
diff --git a/sound/soc/mediatek/mt8188/mt8188-reg.h b/sound/soc/mediatek/mt8188/mt8188-reg.h
new file mode 100644
index 000000000000..51cd1a83dd9d
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-reg.h
@@ -0,0 +1,3180 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * mt8188-reg.h  --  MediaTek 8188 audio driver reg definition
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#ifndef _MT8188_REG_H_
+#define _MT8188_REG_H_
+
+#define AUDIO_TOP_CON0                    (0x0000)
+#define AUDIO_TOP_CON1                    (0x0004)
+#define AUDIO_TOP_CON2                    (0x0008)
+#define AUDIO_TOP_CON3                    (0x000c)
+#define AUDIO_TOP_CON4                    (0x0010)
+#define AUDIO_TOP_CON5                    (0x0014)
+#define AUDIO_TOP_CON6                    (0x0018)
+#define AFE_MAS_HADDR_MSB                 (0x0020)
+#define AFE_MEMIF_ONE_HEART               (0x0024)
+#define AFE_MUX_SEL_CFG                   (0x0044)
+#define PWR1_ASM_CON1                     (0x0108)
+#define ASYS_IRQ_CONFIG                   (0x0110)
+#define ASYS_IRQ1_CON                     (0x0114)
+#define ASYS_IRQ2_CON                     (0x0118)
+#define ASYS_IRQ3_CON                     (0x011c)
+#define ASYS_IRQ4_CON                     (0x0120)
+#define ASYS_IRQ5_CON                     (0x0124)
+#define ASYS_IRQ6_CON                     (0x0128)
+#define ASYS_IRQ7_CON                     (0x012c)
+#define ASYS_IRQ8_CON                     (0x0130)
+#define ASYS_IRQ9_CON                     (0x0134)
+#define ASYS_IRQ10_CON                    (0x0138)
+#define ASYS_IRQ11_CON                    (0x013c)
+#define ASYS_IRQ12_CON                    (0x0140)
+#define ASYS_IRQ13_CON                    (0x0144)
+#define ASYS_IRQ14_CON                    (0x0148)
+#define ASYS_IRQ15_CON                    (0x014c)
+#define ASYS_IRQ16_CON                    (0x0150)
+#define ASYS_IRQ_CLR                      (0x0154)
+#define ASYS_IRQ_STATUS                   (0x0158)
+#define ASYS_IRQ_MON1                     (0x015c)
+#define ASYS_IRQ_MON2                     (0x0160)
+#define AFE_IRQ1_CON                      (0x0164)
+#define AFE_IRQ2_CON                      (0x0168)
+#define AFE_IRQ3_CON                      (0x016c)
+#define AFE_IRQ_MCU_CLR                   (0x0170)
+#define AFE_IRQ_STATUS                    (0x0174)
+#define AFE_IRQ_MASK                      (0x0178)
+#define ASYS_IRQ_MASK                     (0x017c)
+#define AFE_IRQ3_CON_MON                  (0x01b0)
+#define AFE_IRQ_MCU_MON2                  (0x01b4)
+#define AFE_IRQ8_CON                      (0x01b8)
+#define AFE_IRQ9_CON                      (0x01bc)
+#define AFE_IRQ10_CON                     (0x01c0)
+#define AFE_IRQ9_CON_MON                  (0x01c4)
+#define ADSP_IRQ_MASK                     (0x01c8)
+#define ADSP_IRQ_STATUS                   (0x01cc)
+#define AFE_SINEGEN_CON0                  (0x01f0)
+#define AFE_SINEGEN_CON1                  (0x01f4)
+#define AFE_SINEGEN_CON2                  (0x01f8)
+#define AFE_SINEGEN_CON3                  (0x01fc)
+#define AFE_SPDIF_OUT_CON0                (0x0380)
+#define AFE_TDMOUT_CONN0                  (0x0390)
+#define PWR1_ASM_CON2                     (0x03b0)
+#define PWR1_ASM_CON3                     (0x03b4)
+#define AFE_APLL_TUNER_CFG                (0x03f8)
+#define AFE_APLL_TUNER_CFG1               (0x03fc)
+#define AUDIO_TOP_STA0                    (0x0400)
+#define AUDIO_TOP_STA1                    (0x0404)
+#define AFE_GAIN1_CON0                    (0x0410)
+#define AFE_GAIN1_CON1                    (0x0414)
+#define AFE_GAIN1_CON2                    (0x0418)
+#define AFE_GAIN1_CON3                    (0x041c)
+#define AFE_GAIN1_CUR                     (0x0424)
+#define AFE_GAIN2_CON0                    (0x0428)
+#define AFE_GAIN2_CON1                    (0x042c)
+#define AFE_GAIN2_CON2                    (0x0430)
+#define AFE_GAIN2_CON3                    (0x0434)
+#define AFE_GAIN2_CUR                     (0x043c)
+#define AFE_IEC_CFG                       (0x0480)
+#define AFE_IEC_NSNUM                     (0x0484)
+#define AFE_IEC_BURST_INFO                (0x0488)
+#define AFE_IEC_BURST_LEN                 (0x048c)
+#define AFE_IEC_NSADR                     (0x0490)
+#define AFE_IEC_CHL_STAT0                 (0x04a0)
+#define AFE_IEC_CHL_STAT1                 (0x04a4)
+#define AFE_IEC_CHR_STAT0                 (0x04a8)
+#define AFE_IEC_CHR_STAT1                 (0x04ac)
+#define AFE_SPDIFIN_CFG0                  (0x0500)
+#define AFE_SPDIFIN_CFG1                  (0x0504)
+#define AFE_SPDIFIN_CHSTS1                (0x0508)
+#define AFE_SPDIFIN_CHSTS2                (0x050c)
+#define AFE_SPDIFIN_CHSTS3                (0x0510)
+#define AFE_SPDIFIN_CHSTS4                (0x0514)
+#define AFE_SPDIFIN_CHSTS5                (0x0518)
+#define AFE_SPDIFIN_CHSTS6                (0x051c)
+#define AFE_SPDIFIN_DEBUG1                (0x0520)
+#define AFE_SPDIFIN_DEBUG2                (0x0524)
+#define AFE_SPDIFIN_DEBUG3                (0x0528)
+#define AFE_SPDIFIN_DEBUG4                (0x052c)
+#define AFE_SPDIFIN_EC                    (0x0530)
+#define AFE_SPDIFIN_CKLOCK_CFG            (0x0534)
+#define AFE_SPDIFIN_BR                    (0x053c)
+#define AFE_SPDIFIN_BR_DBG1               (0x0540)
+#define AFE_SPDIFIN_CKFBDIV               (0x0544)
+#define AFE_SPDIFIN_INT_EXT               (0x0548)
+#define AFE_SPDIFIN_INT_EXT2              (0x054c)
+#define SPDIFIN_FREQ_INFO                 (0x0550)
+#define SPDIFIN_FREQ_INFO_2               (0x0554)
+#define SPDIFIN_FREQ_INFO_3               (0x0558)
+#define SPDIFIN_FREQ_STATUS               (0x055c)
+#define SPDIFIN_USERCODE1                 (0x0560)
+#define SPDIFIN_USERCODE2                 (0x0564)
+#define SPDIFIN_USERCODE3                 (0x0568)
+#define SPDIFIN_USERCODE4                 (0x056c)
+#define SPDIFIN_USERCODE5                 (0x0570)
+#define SPDIFIN_USERCODE6                 (0x0574)
+#define SPDIFIN_USERCODE7                 (0x0578)
+#define SPDIFIN_USERCODE8                 (0x057c)
+#define SPDIFIN_USERCODE9                 (0x0580)
+#define SPDIFIN_USERCODE10                (0x0584)
+#define SPDIFIN_USERCODE11                (0x0588)
+#define SPDIFIN_USERCODE12                (0x058c)
+#define AFE_SPDIFIN_APLL_TUNER_CFG        (0x0594)
+#define AFE_SPDIFIN_APLL_TUNER_CFG1       (0x0598)
+#define ASYS_TOP_CON                      (0x0600)
+#define AFE_LINEIN_APLL_TUNER_CFG         (0x0610)
+#define AFE_LINEIN_APLL_TUNER_MON         (0x0614)
+#define AFE_EARC_APLL_TUNER_CFG           (0x0618)
+#define AFE_EARC_APLL_TUNER_MON           (0x061c)
+#define PWR2_TOP_CON0                     (0x0634)
+#define PWR2_TOP_CON1                     (0x0638)
+#define PCM_INTF_CON1                     (0x063c)
+#define PCM_INTF_CON2                     (0x0640)
+#define AFE_CM0_CON                       (0x0660)
+#define AFE_CM1_CON                       (0x0664)
+#define AFE_CM2_CON                       (0x0668)
+#define AFE_CM0_MON                       (0x0670)
+#define AFE_CM1_MON                       (0x0674)
+#define AFE_CM2_MON                       (0x0678)
+#define AFE_MPHONE_MULTI_CON0             (0x06a4)
+#define AFE_MPHONE_MULTI_CON1             (0x06a8)
+#define AFE_MPHONE_MULTI_CON2             (0x06ac)
+#define AFE_MPHONE_MULTI_MON              (0x06b0)
+#define AFE_MPHONE_MULTI_DET_REG_CON0     (0x06b4)
+#define AFE_MPHONE_MULTI_DET_REG_CON1     (0x06b8)
+#define AFE_MPHONE_MULTI_DET_REG_CON2     (0x06bc)
+#define AFE_MPHONE_MULTI_DET_REG_CON3     (0x06c0)
+#define AFE_MPHONE_MULTI_DET_MON0         (0x06c4)
+#define AFE_MPHONE_MULTI_DET_MON1         (0x06c8)
+#define AFE_MPHONE_MULTI_DET_MON2         (0x06d0)
+#define AFE_MPHONE_MULTI2_CON0            (0x06d4)
+#define AFE_MPHONE_MULTI2_CON1            (0x06d8)
+#define AFE_MPHONE_MULTI2_CON2            (0x06dc)
+#define AFE_MPHONE_MULTI2_MON             (0x06e0)
+#define AFE_MPHONE_MULTI2_DET_REG_CON0    (0x06e4)
+#define AFE_MPHONE_MULTI2_DET_REG_CON1    (0x06e8)
+#define AFE_MPHONE_MULTI2_DET_REG_CON2    (0x06ec)
+#define AFE_MPHONE_MULTI2_DET_REG_CON3    (0x06f0)
+#define AFE_MPHONE_MULTI2_DET_MON0        (0x06f4)
+#define AFE_MPHONE_MULTI2_DET_MON1        (0x06f8)
+#define AFE_MPHONE_MULTI2_DET_MON2        (0x06fc)
+#define AFE_ADDA_IIR_COEF_02_01           (0x0700)
+#define AFE_ADDA_IIR_COEF_04_03           (0x0704)
+#define AFE_ADDA_IIR_COEF_06_05           (0x0708)
+#define AFE_ADDA_IIR_COEF_08_07           (0x070c)
+#define AFE_ADDA_IIR_COEF_10_09           (0x0710)
+#define AFE_ADDA_ULCF_CFG_02_01           (0x0714)
+#define AFE_ADDA_ULCF_CFG_04_03           (0x0718)
+#define AFE_ADDA_ULCF_CFG_06_05           (0x071c)
+#define AFE_ADDA_ULCF_CFG_08_07           (0x0720)
+#define AFE_ADDA_ULCF_CFG_10_09           (0x0724)
+#define AFE_ADDA_ULCF_CFG_12_11           (0x0728)
+#define AFE_ADDA_ULCF_CFG_14_13           (0x072c)
+#define AFE_ADDA_ULCF_CFG_16_15           (0x0730)
+#define AFE_ADDA_ULCF_CFG_18_17           (0x0734)
+#define AFE_ADDA_ULCF_CFG_20_19           (0x0738)
+#define AFE_ADDA_ULCF_CFG_22_21           (0x073c)
+#define AFE_ADDA_ULCF_CFG_24_23           (0x0740)
+#define AFE_ADDA_ULCF_CFG_26_25           (0x0744)
+#define AFE_ADDA_ULCF_CFG_28_27           (0x0748)
+#define AFE_ADDA_ULCF_CFG_30_29           (0x074c)
+#define AFE_ADDA6_IIR_COEF_02_01          (0x0750)
+#define AFE_ADDA6_IIR_COEF_04_03          (0x0754)
+#define AFE_ADDA6_IIR_COEF_06_05          (0x0758)
+#define AFE_ADDA6_IIR_COEF_08_07          (0x075c)
+#define AFE_ADDA6_IIR_COEF_10_09          (0x0760)
+#define AFE_ADDA6_ULCF_CFG_02_01          (0x0764)
+#define AFE_ADDA6_ULCF_CFG_04_03          (0x0768)
+#define AFE_ADDA6_ULCF_CFG_06_05          (0x076c)
+#define AFE_ADDA6_ULCF_CFG_08_07          (0x0770)
+#define AFE_ADDA6_ULCF_CFG_10_09          (0x0774)
+#define AFE_ADDA6_ULCF_CFG_12_11          (0x0778)
+#define AFE_ADDA6_ULCF_CFG_14_13          (0x077c)
+#define AFE_ADDA6_ULCF_CFG_16_15          (0x0780)
+#define AFE_ADDA6_ULCF_CFG_18_17          (0x0784)
+#define AFE_ADDA6_ULCF_CFG_20_19          (0x0788)
+#define AFE_ADDA6_ULCF_CFG_22_21          (0x078c)
+#define AFE_ADDA6_ULCF_CFG_24_23          (0x0790)
+#define AFE_ADDA6_ULCF_CFG_26_25          (0x0794)
+#define AFE_ADDA6_ULCF_CFG_28_27          (0x0798)
+#define AFE_ADDA6_ULCF_CFG_30_29          (0x079c)
+#define AFE_ADDA_MTKAIF_CFG0              (0x07a0)
+#define AFE_ADDA_MTKAIF_SYNCWORD_CFG      (0x07a8)
+#define AFE_ADDA_MTKAIF_RX_CFG0           (0x07b4)
+#define AFE_ADDA_MTKAIF_RX_CFG1           (0x07b8)
+#define AFE_ADDA_MTKAIF_RX_CFG2           (0x07bc)
+#define AFE_ADDA_MTKAIF_MON0              (0x07c8)
+#define AFE_ADDA_MTKAIF_MON1              (0x07cc)
+#define AFE_AUD_PAD_TOP                   (0x07d4)
+#define AFE_ADDA6_MTKAIF_MON0             (0x07d8)
+#define AFE_ADDA6_MTKAIF_MON1             (0x07dc)
+#define AFE_ADDA6_MTKAIF_CFG0             (0x07e0)
+#define AFE_ADDA6_MTKAIF_RX_CFG0          (0x07e4)
+#define AFE_ADDA6_MTKAIF_RX_CFG1          (0x07e8)
+#define AFE_ADDA6_MTKAIF_RX_CFG2          (0x07ec)
+#define AFE_ADDA6_TOP_CON0                (0x07f0)
+#define AFE_ADDA6_UL_SRC_CON0             (0x07f4)
+#define AFE_ADDA6_UL_SRC_CON1             (0x07f8)
+#define AFE_ADDA6_SRC_DEBUG               (0x0800)
+#define AFE_ADDA6_SRC_DEBUG_MON0          (0x0804)
+#define AFE_ADDA6_UL_SRC_MON0             (0x0818)
+#define AFE_ADDA6_UL_SRC_MON1             (0x081c)
+#define AFE_CONN0_5                       (0x0830)
+#define AFE_CONN1_5                       (0x0834)
+#define AFE_CONN2_5                       (0x0838)
+#define AFE_CONN3_5                       (0x083c)
+#define AFE_CONN4_5                       (0x0840)
+#define AFE_CONN5_5                       (0x0844)
+#define AFE_CONN6_5                       (0x0848)
+#define AFE_CONN7_5                       (0x084c)
+#define AFE_CONN8_5                       (0x0850)
+#define AFE_CONN9_5                       (0x0854)
+#define AFE_CONN10_5                      (0x0858)
+#define AFE_CONN11_5                      (0x085c)
+#define AFE_CONN12_5                      (0x0860)
+#define AFE_CONN13_5                      (0x0864)
+#define AFE_CONN14_5                      (0x0868)
+#define AFE_CONN15_5                      (0x086c)
+#define AFE_CONN16_5                      (0x0870)
+#define AFE_CONN17_5                      (0x0874)
+#define AFE_CONN18_5                      (0x0878)
+#define AFE_CONN19_5                      (0x087c)
+#define AFE_CONN20_5                      (0x0880)
+#define AFE_CONN21_5                      (0x0884)
+#define AFE_CONN22_5                      (0x0888)
+#define AFE_CONN23_5                      (0x088c)
+#define AFE_CONN24_5                      (0x0890)
+#define AFE_CONN25_5                      (0x0894)
+#define AFE_CONN26_5                      (0x0898)
+#define AFE_CONN27_5                      (0x089c)
+#define AFE_CONN28_5                      (0x08a0)
+#define AFE_CONN29_5                      (0x08a4)
+#define AFE_CONN30_5                      (0x08a8)
+#define AFE_CONN31_5                      (0x08ac)
+#define AFE_CONN32_5                      (0x08b0)
+#define AFE_CONN33_5                      (0x08b4)
+#define AFE_CONN34_5                      (0x08b8)
+#define AFE_CONN35_5                      (0x08bc)
+#define AFE_CONN36_5                      (0x08c0)
+#define AFE_CONN37_5                      (0x08c4)
+#define AFE_CONN38_5                      (0x08c8)
+#define AFE_CONN39_5                      (0x08cc)
+#define AFE_CONN40_5                      (0x08d0)
+#define AFE_CONN41_5                      (0x08d4)
+#define AFE_CONN42_5                      (0x08d8)
+#define AFE_CONN43_5                      (0x08dc)
+#define AFE_CONN44_5                      (0x08e0)
+#define AFE_CONN45_5                      (0x08e4)
+#define AFE_CONN46_5                      (0x08e8)
+#define AFE_CONN47_5                      (0x08ec)
+#define AFE_CONN48_5                      (0x08f0)
+#define AFE_CONN49_5                      (0x08f4)
+#define AFE_CONN50_5                      (0x08f8)
+#define AFE_CONN51_5                      (0x08fc)
+#define AFE_CONN52_5                      (0x0900)
+#define AFE_CONN53_5                      (0x0904)
+#define AFE_CONN54_5                      (0x0908)
+#define AFE_CONN55_5                      (0x090c)
+#define AFE_CONN56_5                      (0x0910)
+#define AFE_CONN57_5                      (0x0914)
+#define AFE_CONN58_5                      (0x0918)
+#define AFE_CONN59_5                      (0x091c)
+#define AFE_CONN60_5                      (0x0920)
+#define AFE_CONN61_5                      (0x0924)
+#define AFE_CONN62_5                      (0x0928)
+#define AFE_CONN63_5                      (0x092c)
+#define AFE_CONN64_5                      (0x0930)
+#define AFE_CONN65_5                      (0x0934)
+#define AFE_CONN66_5                      (0x0938)
+#define AFE_CONN67_5                      (0x093c)
+#define AFE_CONN68_5                      (0x0940)
+#define AFE_CONN69_5                      (0x0944)
+#define AFE_CONN70_5                      (0x0948)
+#define AFE_CONN71_5                      (0x094c)
+#define AFE_CONN72_5                      (0x0950)
+#define AFE_CONN73_5                      (0x0954)
+#define AFE_CONN74_5                      (0x0958)
+#define AFE_CONN75_5                      (0x095c)
+#define AFE_CONN76_5                      (0x0960)
+#define AFE_CONN77_5                      (0x0964)
+#define AFE_CONN78_5                      (0x0968)
+#define AFE_CONN79_5                      (0x096c)
+#define AFE_CONN80_5                      (0x0970)
+#define AFE_CONN81_5                      (0x0974)
+#define AFE_CONN82_5                      (0x0978)
+#define AFE_CONN83_5                      (0x097c)
+#define AFE_CONN84_5                      (0x0980)
+#define AFE_CONN85_5                      (0x0984)
+#define AFE_CONN86_5                      (0x0988)
+#define AFE_CONN87_5                      (0x098c)
+#define AFE_CONN88_5                      (0x0990)
+#define AFE_CONN89_5                      (0x0994)
+#define AFE_CONN90_5                      (0x0998)
+#define AFE_CONN91_5                      (0x099c)
+#define AFE_CONN92_5                      (0x09a0)
+#define AFE_CONN93_5                      (0x09a4)
+#define AFE_CONN94_5                      (0x09a8)
+#define AFE_CONN95_5                      (0x09ac)
+#define AFE_CONN96_5                      (0x09b0)
+#define AFE_CONN97_5                      (0x09b4)
+#define AFE_CONN98_5                      (0x09b8)
+#define AFE_CONN99_5                      (0x09bc)
+#define AFE_CONN100_5                     (0x09c0)
+#define AFE_CONN101_5                     (0x09c4)
+#define AFE_CONN102_5                     (0x09c8)
+#define AFE_CONN103_5                     (0x09cc)
+#define AFE_CONN104_5                     (0x09d0)
+#define AFE_CONN105_5                     (0x09d4)
+#define AFE_CONN106_5                     (0x09d8)
+#define AFE_CONN107_5                     (0x09dc)
+#define AFE_CONN108_5                     (0x09e0)
+#define AFE_CONN109_5                     (0x09e4)
+#define AFE_CONN110_5                     (0x09e8)
+#define AFE_CONN111_5                     (0x09ec)
+#define AFE_CONN112_5                     (0x09f0)
+#define AFE_CONN113_5                     (0x09f4)
+#define AFE_CONN114_5                     (0x09f8)
+#define AFE_CONN115_5                     (0x09fc)
+#define AFE_CONN116_5                     (0x0a00)
+#define AFE_CONN117_5                     (0x0a04)
+#define AFE_CONN118_5                     (0x0a08)
+#define AFE_CONN119_5                     (0x0a0c)
+#define AFE_CONN120_5                     (0x0a10)
+#define AFE_CONN121_5                     (0x0a14)
+#define AFE_CONN122_5                     (0x0a18)
+#define AFE_CONN123_5                     (0x0a1c)
+#define AFE_CONN124_5                     (0x0a20)
+#define AFE_CONN125_5                     (0x0a24)
+#define AFE_CONN126_5                     (0x0a28)
+#define AFE_CONN127_5                     (0x0a2c)
+#define AFE_CONN128_5                     (0x0a30)
+#define AFE_CONN129_5                     (0x0a34)
+#define AFE_CONN130_5                     (0x0a38)
+#define AFE_CONN131_5                     (0x0a3c)
+#define AFE_CONN132_5                     (0x0a40)
+#define AFE_CONN133_5                     (0x0a44)
+#define AFE_CONN134_5                     (0x0a48)
+#define AFE_CONN135_5                     (0x0a4c)
+#define AFE_CONN136_5                     (0x0a50)
+#define AFE_CONN137_5                     (0x0a54)
+#define AFE_CONN138_5                     (0x0a58)
+#define AFE_CONN139_5                     (0x0a5c)
+#define AFE_CONN_RS_5                     (0x0a60)
+#define AFE_CONN_DI_5                     (0x0a64)
+#define AFE_CONN_16BIT_5                  (0x0a68)
+#define AFE_CONN_24BIT_5                  (0x0a6c)
+#define AFE_SECURE_MASK_CONN53_5          (0x0a70)
+#define AFE_SECURE_MASK_CONN54_5          (0x0a74)
+#define AFE_SECURE_MASK_CONN55_5          (0x0a78)
+#define AFE_SECURE_MASK_CONN56_5          (0x0a7c)
+#define AFE_SECURE_MASK_CONN57_5          (0x0a80)
+#define AFE_SECURE_MASK_CONN58_5          (0x0a84)
+#define AFE_SECURE_MASK_CONN59_5          (0x0a88)
+#define AFE_SECURE_MASK_CONN60_5          (0x0a8c)
+#define AFE_SECURE_MASK_CONN61_5          (0x0a90)
+#define AFE_SECURE_MASK_CONN62_5          (0x0a94)
+#define AFE_SECURE_MASK_CONN63_5          (0x0a98)
+#define AFE_SECURE_MASK_CONN64_5          (0x0a9c)
+#define AFE_SECURE_MASK_CONN65_5          (0x0aa0)
+#define AFE_SECURE_MASK_CONN66_5          (0x0aa4)
+#define AFE_SECURE_MASK_CONN67_5          (0x0aa8)
+#define AFE_SECURE_MASK_CONN68_5          (0x0aac)
+#define AFE_SECURE_MASK_CONN69_5          (0x0ab0)
+#define AFE_SECURE_MASK_CONN70_5          (0x0ab4)
+#define AFE_SECURE_MASK_CONN71_5          (0x0ab8)
+#define AFE_SECURE_MASK_CONN72_5          (0x0abc)
+#define AFE_SECURE_MASK_CONN73_5          (0x0ac0)
+#define AFE_SECURE_MASK_CONN74_5          (0x0ac4)
+#define AFE_SECURE_MASK_CONN75_5          (0x0ac8)
+#define AFE_SECURE_MASK_CONN76_5          (0x0acc)
+#define AFE_SECURE_MASK_CONN77_5          (0x0ad0)
+#define AFE_SECURE_MASK_CONN78_5          (0x0ad4)
+#define AFE_SECURE_MASK_CONN79_5          (0x0ad8)
+#define AFE_SECURE_MASK_CONN80_5          (0x0adc)
+#define AFE_SECURE_MASK_CONN81_5          (0x0ae0)
+#define AFE_SECURE_MASK_CONN82_5          (0x0ae4)
+#define AFE_SECURE_MASK_CONN83_5          (0x0ae8)
+#define AFE_SECURE_MASK_CONN84_5          (0x0aec)
+#define AFE_SECURE_MASK_CONN85_5          (0x0af0)
+#define AFE_SECURE_MASK_CONN86_5          (0x0af4)
+#define AFE_SECURE_MASK_CONN87_5          (0x0af8)
+#define AFE_SECURE_MASK_CONN88_5          (0x0afc)
+#define AFE_SECURE_MASK_CONN89_5          (0x0b00)
+#define AFE_SECURE_MASK_CONN90_5          (0x0b04)
+#define AFE_SECURE_MASK_CONN91_5          (0x0b08)
+#define AFE_SECURE_MASK_CONN92_5          (0x0b0c)
+#define AFE_SECURE_MASK_CONN93_5          (0x0b10)
+#define AFE_SECURE_MASK_CONN94_5          (0x0b14)
+#define AFE_SECURE_MASK_CONN95_5          (0x0b18)
+#define AFE_SECURE_MASK_CONN96_5          (0x0b1c)
+#define AFE_SECURE_MASK_CONN97_5          (0x0b20)
+#define AFE_SECURE_MASK_CONN98_5          (0x0b24)
+#define AFE_SECURE_MASK_CONN99_5          (0x0b28)
+#define AFE_SECURE_MASK_CONN100_5         (0x0b2c)
+#define AFE_SECURE_MASK_CONN101_5         (0x0b30)
+#define AFE_SECURE_MASK_CONN102_5         (0x0b34)
+#define AFE_SECURE_MASK_CONN103_5         (0x0b38)
+#define AFE_SECURE_MASK_CONN104_5         (0x0b3c)
+#define AFE_SECURE_MASK_CONN105_5         (0x0b40)
+#define AFE_SECURE_MASK_CONN106_5         (0x0b44)
+#define AFE_SECURE_MASK_CONN107_5         (0x0b48)
+#define AFE_SECURE_MASK_CONN108_5         (0x0b4c)
+#define AFE_SECURE_MASK_CONN109_5         (0x0b50)
+#define AFE_SECURE_MASK_CONN110_5         (0x0b54)
+#define AFE_SECURE_MASK_CONN111_5         (0x0b58)
+#define AFE_SECURE_MASK_CONN112_5         (0x0b5c)
+#define AFE_SECURE_MASK_CONN113_5         (0x0b60)
+#define AFE_SECURE_MASK_CONN114_5         (0x0b64)
+#define AFE_SECURE_MASK_CONN115_5         (0x0b68)
+#define AFE_SECURE_MASK_CONN116_5         (0x0b6c)
+#define AFE_SECURE_MASK_CONN117_5         (0x0b70)
+#define AFE_SECURE_MASK_CONN118_5         (0x0b74)
+#define AFE_SECURE_MASK_CONN119_5         (0x0b78)
+#define AFE_SECURE_MASK_CONN120_5         (0x0b7c)
+#define AFE_SECURE_MASK_CONN121_5         (0x0b80)
+#define AFE_SECURE_MASK_CONN122_5         (0x0b84)
+#define AFE_SECURE_MASK_CONN123_5         (0x0b88)
+#define AFE_SECURE_MASK_CONN124_5         (0x0b8c)
+#define AFE_SECURE_MASK_CONN125_5         (0x0b90)
+#define AFE_SECURE_MASK_CONN126_5         (0x0b94)
+#define AFE_SECURE_MASK_CONN127_5         (0x0b98)
+#define AFE_SECURE_MASK_CONN128_5         (0x0b9c)
+#define AFE_SECURE_MASK_CONN129_5         (0x0ba0)
+#define AFE_SECURE_MASK_CONN130_5         (0x0ba4)
+#define AFE_SECURE_MASK_CONN131_5         (0x0ba8)
+#define AFE_SECURE_MASK_CONN132_5         (0x0bac)
+#define AFE_SECURE_MASK_CONN133_5         (0x0bb0)
+#define AFE_SECURE_MASK_CONN134_5         (0x0bb4)
+#define AFE_SECURE_MASK_CONN135_5         (0x0bb8)
+#define AFE_SECURE_MASK_CONN136_5         (0x0bbc)
+#define AFE_SECURE_MASK_CONN137_5         (0x0bc0)
+#define AFE_SECURE_MASK_CONN138_5         (0x0bc4)
+#define AFE_SECURE_MASK_CONN139_5         (0x0bc8)
+#define AFE_SECURE_MASK_CONN_RS_5         (0x0bcc)
+#define AFE_SECURE_MASK_CONN_16BIT_5      (0x0bd0)
+#define AFE_SECURE_MASK_CONN_24BIT_5      (0x0bd4)
+#define AFE_ASRC11_NEW_CON0               (0x0d80)
+#define AFE_ASRC11_NEW_CON1               (0x0d84)
+#define AFE_ASRC11_NEW_CON2               (0x0d88)
+#define AFE_ASRC11_NEW_CON3               (0x0d8c)
+#define AFE_ASRC11_NEW_CON4               (0x0d90)
+#define AFE_ASRC11_NEW_CON5               (0x0d94)
+#define AFE_ASRC11_NEW_CON6               (0x0d98)
+#define AFE_ASRC11_NEW_CON7               (0x0d9c)
+#define AFE_ASRC11_NEW_CON8               (0x0da0)
+#define AFE_ASRC11_NEW_CON9               (0x0da4)
+#define AFE_ASRC11_NEW_CON10              (0x0da8)
+#define AFE_ASRC11_NEW_CON11              (0x0dac)
+#define AFE_ASRC11_NEW_CON13              (0x0db4)
+#define AFE_ASRC11_NEW_CON14              (0x0db8)
+#define AFE_ASRC12_NEW_CON0               (0x0dc0)
+#define AFE_ASRC12_NEW_CON1               (0x0dc4)
+#define AFE_ASRC12_NEW_CON2               (0x0dc8)
+#define AFE_ASRC12_NEW_CON3               (0x0dcc)
+#define AFE_ASRC12_NEW_CON4               (0x0dd0)
+#define AFE_ASRC12_NEW_CON5               (0x0dd4)
+#define AFE_ASRC12_NEW_CON6               (0x0dd8)
+#define AFE_ASRC12_NEW_CON7               (0x0ddc)
+#define AFE_ASRC12_NEW_CON8               (0x0de0)
+#define AFE_ASRC12_NEW_CON9               (0x0de4)
+#define AFE_ASRC12_NEW_CON10              (0x0de8)
+#define AFE_ASRC12_NEW_CON11              (0x0dec)
+#define AFE_ASRC12_NEW_CON13              (0x0df4)
+#define AFE_ASRC12_NEW_CON14              (0x0df8)
+#define AFE_SECURE_MASK_CONN176           (0x0fe0)
+#define AFE_SECURE_MASK_CONN176_1         (0x0fe4)
+#define AFE_SECURE_MASK_CONN176_2         (0x0fe8)
+#define AFE_SECURE_MASK_CONN176_3         (0x0fec)
+#define AFE_SECURE_MASK_CONN176_4         (0x0ff0)
+#define AFE_SECURE_MASK_CONN176_5         (0x0ff4)
+#define AFE_SECURE_MASK_CONN177           (0x0ff8)
+#define AFE_SECURE_MASK_CONN177_1         (0x0ffc)
+#define AFE_LRCK_CNT                      (0x1018)
+#define AFE_SECURE_MASK_CONN177_2         (0x1020)
+#define AFE_SECURE_MASK_CONN177_3         (0x1024)
+#define AFE_SECURE_MASK_CONN177_4         (0x1028)
+#define AFE_SECURE_MASK_CONN177_5         (0x102c)
+#define AFE_SECURE_MASK_CONN182           (0x1090)
+#define AFE_SECURE_MASK_CONN182_1         (0x1094)
+#define AFE_SECURE_MASK_CONN182_2         (0x1098)
+#define AFE_SECURE_MASK_CONN182_3         (0x109c)
+#define AFE_SECURE_MASK_CONN182_4         (0x10a0)
+#define AFE_SECURE_MASK_CONN182_5         (0x10a4)
+#define AFE_SECURE_MASK_CONN183           (0x10a8)
+#define AFE_SECURE_MASK_CONN183_1         (0x10ac)
+#define AFE_SECURE_MASK_CONN183_2         (0x10b0)
+#define AFE_SECURE_MASK_CONN183_3         (0x10b4)
+#define AFE_SECURE_MASK_CONN183_4         (0x10b8)
+#define AFE_SECURE_MASK_CONN183_5         (0x10bc)
+#define AFE_DAC_CON0                      (0x1200)
+#define AFE_DAC_CON1                      (0x1204)
+#define AFE_DAC_CON2                      (0x1208)
+#define AFE_DAC_MON0                      (0x1218)
+#define AFE_DL1_BASE                      (0x1240)
+#define AFE_DL1_CUR                       (0x1244)
+#define AFE_DL1_END                       (0x1248)
+#define AFE_DL1_CON0                      (0x124c)
+#define AFE_DL2_BASE                      (0x1250)
+#define AFE_DL2_CUR                       (0x1254)
+#define AFE_DL2_END                       (0x1258)
+#define AFE_DL2_CON0                      (0x125c)
+#define AFE_DL3_BASE                      (0x1260)
+#define AFE_DL3_CUR                       (0x1264)
+#define AFE_DL3_END                       (0x1268)
+#define AFE_DL3_CON0                      (0x126c)
+#define AFE_DL6_BASE                      (0x1290)
+#define AFE_DL6_CUR                       (0x1294)
+#define AFE_DL6_END                       (0x1298)
+#define AFE_DL6_CON0                      (0x129c)
+#define AFE_DL7_BASE                      (0x12a0)
+#define AFE_DL7_CUR                       (0x12a4)
+#define AFE_DL7_END                       (0x12a8)
+#define AFE_DL7_CON0                      (0x12ac)
+#define AFE_DL8_BASE                      (0x12b0)
+#define AFE_DL8_CUR                       (0x12b4)
+#define AFE_DL8_END                       (0x12b8)
+#define AFE_DL8_CON0                      (0x12bc)
+#define AFE_DL10_BASE                     (0x12d0)
+#define AFE_DL10_CUR                      (0x12d4)
+#define AFE_DL10_END                      (0x12d8)
+#define AFE_DL10_CON0                     (0x12dc)
+#define AFE_DL11_BASE                     (0x12e0)
+#define AFE_DL11_CUR                      (0x12e4)
+#define AFE_DL11_END                      (0x12e8)
+#define AFE_DL11_CON0                     (0x12ec)
+#define AFE_UL1_BASE                      (0x1300)
+#define AFE_UL1_CUR                       (0x1304)
+#define AFE_UL1_END                       (0x1308)
+#define AFE_UL1_CON0                      (0x130c)
+#define AFE_UL2_BASE                      (0x1310)
+#define AFE_UL2_CUR                       (0x1314)
+#define AFE_UL2_END                       (0x1318)
+#define AFE_UL2_CON0                      (0x131c)
+#define AFE_UL3_BASE                      (0x1320)
+#define AFE_UL3_CUR                       (0x1324)
+#define AFE_UL3_END                       (0x1328)
+#define AFE_UL3_CON0                      (0x132c)
+#define AFE_UL4_BASE                      (0x1330)
+#define AFE_UL4_CUR                       (0x1334)
+#define AFE_UL4_END                       (0x1338)
+#define AFE_UL4_CON0                      (0x133c)
+#define AFE_UL5_BASE                      (0x1340)
+#define AFE_UL5_CUR                       (0x1344)
+#define AFE_UL5_END                       (0x1348)
+#define AFE_UL5_CON0                      (0x134c)
+#define AFE_UL6_BASE                      (0x1350)
+#define AFE_UL6_CUR                       (0x1354)
+#define AFE_UL6_END                       (0x1358)
+#define AFE_UL6_CON0                      (0x135c)
+#define AFE_UL8_BASE                      (0x1370)
+#define AFE_UL8_CUR                       (0x1374)
+#define AFE_UL8_END                       (0x1378)
+#define AFE_UL8_CON0                      (0x137c)
+#define AFE_UL9_BASE                      (0x1380)
+#define AFE_UL9_CUR                       (0x1384)
+#define AFE_UL9_END                       (0x1388)
+#define AFE_UL9_CON0                      (0x138c)
+#define AFE_UL10_BASE                     (0x13d0)
+#define AFE_UL10_CUR                      (0x13d4)
+#define AFE_UL10_END                      (0x13d8)
+#define AFE_UL10_CON0                     (0x13dc)
+#define AFE_DL8_CHK_SUM1                  (0x1400)
+#define AFE_DL8_CHK_SUM2                  (0x1404)
+#define AFE_DL8_CHK_SUM3                  (0x1408)
+#define AFE_DL8_CHK_SUM4                  (0x140c)
+#define AFE_DL8_CHK_SUM5                  (0x1410)
+#define AFE_DL8_CHK_SUM6                  (0x1414)
+#define AFE_DL10_CHK_SUM1                 (0x1418)
+#define AFE_DL10_CHK_SUM2                 (0x141c)
+#define AFE_DL10_CHK_SUM3                 (0x1420)
+#define AFE_DL10_CHK_SUM4                 (0x1424)
+#define AFE_DL10_CHK_SUM5                 (0x1428)
+#define AFE_DL10_CHK_SUM6                 (0x142c)
+#define AFE_DL11_CHK_SUM1                 (0x1430)
+#define AFE_DL11_CHK_SUM2                 (0x1434)
+#define AFE_DL11_CHK_SUM3                 (0x1438)
+#define AFE_DL11_CHK_SUM4                 (0x143c)
+#define AFE_DL11_CHK_SUM5                 (0x1440)
+#define AFE_DL11_CHK_SUM6                 (0x1444)
+#define AFE_UL1_CHK_SUM1                  (0x1450)
+#define AFE_UL1_CHK_SUM2                  (0x1454)
+#define AFE_UL2_CHK_SUM1                  (0x1458)
+#define AFE_UL2_CHK_SUM2                  (0x145c)
+#define AFE_UL3_CHK_SUM1                  (0x1460)
+#define AFE_UL3_CHK_SUM2                  (0x1464)
+#define AFE_UL4_CHK_SUM1                  (0x1468)
+#define AFE_UL4_CHK_SUM2                  (0x146c)
+#define AFE_UL5_CHK_SUM1                  (0x1470)
+#define AFE_UL5_CHK_SUM2                  (0x1474)
+#define AFE_UL6_CHK_SUM1                  (0x1478)
+#define AFE_UL6_CHK_SUM2                  (0x147c)
+#define AFE_UL8_CHK_SUM1                  (0x1488)
+#define AFE_UL8_CHK_SUM2                  (0x148c)
+#define AFE_DL1_CHK_SUM1                  (0x1490)
+#define AFE_DL1_CHK_SUM2                  (0x1494)
+#define AFE_DL2_CHK_SUM1                  (0x14a0)
+#define AFE_DL2_CHK_SUM2                  (0x14a4)
+#define AFE_DL3_CHK_SUM1                  (0x14b0)
+#define AFE_DL3_CHK_SUM2                  (0x14b4)
+#define AFE_DL6_CHK_SUM1                  (0x14e0)
+#define AFE_DL6_CHK_SUM2                  (0x14e4)
+#define AFE_DL7_CHK_SUM1                  (0x14f0)
+#define AFE_DL7_CHK_SUM2                  (0x14f4)
+#define AFE_UL9_CHK_SUM1                  (0x1528)
+#define AFE_UL9_CHK_SUM2                  (0x152c)
+#define AFE_BUS_MON1                      (0x1540)
+#define AFE_UL10_CHK_SUM1                 (0x1550)
+#define AFE_UL10_CHK_SUM2                 (0x1554)
+#define UL1_MOD2AGT_CNT_LAT               (0x1568)
+#define UL2_MOD2AGT_CNT_LAT               (0x156c)
+#define UL3_MOD2AGT_CNT_LAT               (0x1570)
+#define UL4_MOD2AGT_CNT_LAT               (0x1574)
+#define UL5_MOD2AGT_CNT_LAT               (0x1578)
+#define UL6_MOD2AGT_CNT_LAT               (0x157c)
+#define UL8_MOD2AGT_CNT_LAT               (0x1588)
+#define UL9_MOD2AGT_CNT_LAT               (0x158c)
+#define UL10_MOD2AGT_CNT_LAT              (0x1590)
+#define AFE_MEMIF_AGENT_FS_CON0           (0x15a0)
+#define AFE_MEMIF_AGENT_FS_CON1           (0x15a4)
+#define AFE_MEMIF_AGENT_FS_CON2           (0x15a8)
+#define AFE_MEMIF_AGENT_FS_CON3           (0x15ac)
+#define AFE_MEMIF_BURST_CFG               (0x1600)
+#define AFE_MEMIF_BUF_FULL_MON            (0x1610)
+#define AFE_MEMIF_BUF_MON0                (0x1618)
+#define AFE_MEMIF_BUF_MON1                (0x161c)
+#define AFE_MEMIF_BUF_MON3                (0x1624)
+#define AFE_MEMIF_BUF_MON4                (0x1628)
+#define AFE_MEMIF_BUF_MON5                (0x162c)
+#define AFE_MEMIF_BUF_MON6                (0x1630)
+#define AFE_MEMIF_BUF_MON7                (0x1634)
+#define AFE_MEMIF_BUF_MON8                (0x1638)
+#define AFE_MEMIF_BUF_MON9                (0x163c)
+#define AFE_MEMIF_BUF_MON10               (0x1640)
+#define DL1_AGENT2MODULE_CNT              (0x1674)
+#define DL2_AGENT2MODULE_CNT              (0x1678)
+#define DL3_AGENT2MODULE_CNT              (0x167c)
+#define DL6_AGENT2MODULE_CNT              (0x1688)
+#define DL7_AGENT2MODULE_CNT              (0x168c)
+#define DL8_AGENT2MODULE_CNT              (0x1690)
+#define DL10_AGENT2MODULE_CNT             (0x1698)
+#define DL11_AGENT2MODULE_CNT             (0x169c)
+#define UL1_MODULE2AGENT_CNT              (0x16a0)
+#define UL2_MODULE2AGENT_CNT              (0x16a4)
+#define UL3_MODULE2AGENT_CNT              (0x16a8)
+#define UL4_MODULE2AGENT_CNT              (0x16ac)
+#define UL5_MODULE2AGENT_CNT              (0x16b0)
+#define UL6_MODULE2AGENT_CNT              (0x16b4)
+#define UL8_MODULE2AGENT_CNT              (0x16bc)
+#define UL9_MODULE2AGENT_CNT              (0x16c0)
+#define UL10_MODULE2AGENT_CNT             (0x16c4)
+#define AFE_SECURE_CON2                   (0x1798)
+#define AFE_SECURE_CON1                   (0x179c)
+#define AFE_SECURE_CON                    (0x17a0)
+#define AFE_SRAM_BOUND                    (0x17a4)
+#define AFE_SE_SECURE_CON                 (0x17a8)
+#define AFE_SECURE_MASK_LOOPBACK          (0x17bc)
+#define AFE_SRAM_SECURE_CON               (0x1800)
+#define AFE_SRAM_SECURE_CON1              (0x1804)
+#define AFE_SRAM_SECURE_CON2              (0x1808)
+#define AFE_SECURE_SIDEBAND0              (0x1908)
+#define AFE_SECURE_SIDEBAND1              (0x190c)
+#define AFE_SECURE_SIDEBAND2              (0x1910)
+#define AFE_SECURE_SIDEBAND3              (0x1914)
+#define AFE_SECURE_MASK_BASE_ADR_MSB      (0x1920)
+#define AFE_SECURE_MASK_END_ADR_MSB       (0x1924)
+#define AFE_NORMAL_BASE_ADR_MSB           (0x192c)
+#define AFE_NORMAL_END_ADR_MSB            (0x1930)
+#define AFE_SECURE_MASK_LOOPBACK0         (0x1940)
+#define AFE_SECURE_MASK_LOOPBACK1         (0x1944)
+#define AFE_SECURE_MASK_LOOPBACK2         (0x1948)
+#define AFE_LOOPBACK_CFG0                 (0x1950)
+#define AFE_LOOPBACK_CFG1                 (0x1954)
+#define AFE_LOOPBACK_CFG2                 (0x1958)
+#define AFE_DMIC0_UL_SRC_CON0             (0x1a00)
+#define AFE_DMIC0_UL_SRC_CON1             (0x1a04)
+#define AFE_DMIC0_SRC_DEBUG               (0x1a08)
+#define AFE_DMIC0_SRC_DEBUG_MON0          (0x1a0c)
+#define AFE_DMIC0_UL_SRC_MON0             (0x1a10)
+#define AFE_DMIC0_UL_SRC_MON1             (0x1a14)
+#define AFE_DMIC0_IIR_COEF_02_01          (0x1a18)
+#define AFE_DMIC0_IIR_COEF_04_03          (0x1a1c)
+#define AFE_DMIC0_IIR_COEF_06_05          (0x1a20)
+#define AFE_DMIC0_IIR_COEF_08_07          (0x1a24)
+#define AFE_DMIC0_IIR_COEF_10_09          (0x1a28)
+#define AFE_DMIC1_UL_SRC_CON0             (0x1a68)
+#define AFE_DMIC1_UL_SRC_CON1             (0x1a6c)
+#define AFE_DMIC1_SRC_DEBUG               (0x1a70)
+#define AFE_DMIC1_SRC_DEBUG_MON0          (0x1a74)
+#define AFE_DMIC1_UL_SRC_MON0             (0x1a78)
+#define AFE_DMIC1_UL_SRC_MON1             (0x1a7c)
+#define AFE_DMIC1_IIR_COEF_02_01          (0x1a80)
+#define AFE_DMIC1_IIR_COEF_04_03          (0x1a84)
+#define AFE_DMIC1_IIR_COEF_06_05          (0x1a88)
+#define AFE_DMIC1_IIR_COEF_08_07          (0x1a8c)
+#define AFE_DMIC1_IIR_COEF_10_09          (0x1a90)
+#define AFE_DMIC2_UL_SRC_CON0             (0x1ad0)
+#define AFE_DMIC2_UL_SRC_CON1             (0x1ad4)
+#define AFE_DMIC2_SRC_DEBUG               (0x1ad8)
+#define AFE_DMIC2_SRC_DEBUG_MON0          (0x1adc)
+#define AFE_DMIC2_UL_SRC_MON0             (0x1ae0)
+#define AFE_DMIC2_UL_SRC_MON1             (0x1ae4)
+#define AFE_DMIC2_IIR_COEF_02_01          (0x1ae8)
+#define AFE_DMIC2_IIR_COEF_04_03          (0x1aec)
+#define AFE_DMIC2_IIR_COEF_06_05          (0x1af0)
+#define AFE_DMIC2_IIR_COEF_08_07          (0x1af4)
+#define AFE_DMIC2_IIR_COEF_10_09          (0x1af8)
+#define AFE_DMIC3_UL_SRC_CON0             (0x1b38)
+#define AFE_DMIC3_UL_SRC_CON1             (0x1b3c)
+#define AFE_DMIC3_SRC_DEBUG               (0x1b40)
+#define AFE_DMIC3_SRC_DEBUG_MON0          (0x1b44)
+#define AFE_DMIC3_UL_SRC_MON0             (0x1b48)
+#define AFE_DMIC3_UL_SRC_MON1             (0x1b4c)
+#define AFE_DMIC3_IIR_COEF_02_01          (0x1b50)
+#define AFE_DMIC3_IIR_COEF_04_03          (0x1b54)
+#define AFE_DMIC3_IIR_COEF_06_05          (0x1b58)
+#define AFE_DMIC3_IIR_COEF_08_07          (0x1b5c)
+#define AFE_DMIC3_IIR_COEF_10_09          (0x1b60)
+#define DMIC_BYPASS_HW_GAIN               (0x1bf0)
+#define DMIC_GAIN1_CON0                   (0x1c00)
+#define DMIC_GAIN1_CON1                   (0x1c04)
+#define DMIC_GAIN1_CON2                   (0x1c08)
+#define DMIC_GAIN1_CON3                   (0x1c0c)
+#define DMIC_GAIN1_CUR                    (0x1c10)
+#define DMIC_GAIN2_CON0                   (0x1c20)
+#define DMIC_GAIN2_CON1                   (0x1c24)
+#define DMIC_GAIN2_CON2                   (0x1c28)
+#define DMIC_GAIN2_CON3                   (0x1c2c)
+#define DMIC_GAIN2_CUR                    (0x1c30)
+#define DMIC_GAIN3_CON0                   (0x1c40)
+#define DMIC_GAIN3_CON1                   (0x1c44)
+#define DMIC_GAIN3_CON2                   (0x1c48)
+#define DMIC_GAIN3_CON3                   (0x1c4c)
+#define DMIC_GAIN3_CUR                    (0x1c50)
+#define DMIC_GAIN4_CON0                   (0x1c60)
+#define DMIC_GAIN4_CON1                   (0x1c64)
+#define DMIC_GAIN4_CON2                   (0x1c68)
+#define DMIC_GAIN4_CON3                   (0x1c6c)
+#define DMIC_GAIN4_CUR                    (0x1c70)
+#define ETDM_OUT1_DSD_FADE_CON            (0x2260)
+#define ETDM_OUT1_DSD_FADE_CON1           (0x2264)
+#define ETDM_OUT3_DSD_FADE_CON            (0x2280)
+#define ETDM_OUT3_DSD_FADE_CON1           (0x2284)
+#define ETDM_IN1_AFIFO_CON                (0x2294)
+#define ETDM_IN2_AFIFO_CON                (0x2298)
+#define ETDM_IN1_MONITOR                  (0x22c0)
+#define ETDM_IN2_MONITOR                  (0x22c4)
+#define ETDM_OUT1_MONITOR                 (0x22d0)
+#define ETDM_OUT2_MONITOR                 (0x22d4)
+#define ETDM_OUT3_MONITOR                 (0x22d8)
+#define ETDM_COWORK_SEC_CON0              (0x22e0)
+#define ETDM_COWORK_SEC_CON1              (0x22e4)
+#define ETDM_COWORK_SEC_CON2              (0x22e8)
+#define ETDM_COWORK_SEC_CON3              (0x22ec)
+#define ETDM_COWORK_CON0                  (0x22f0)
+#define ETDM_COWORK_CON1                  (0x22f4)
+#define ETDM_COWORK_CON2                  (0x22f8)
+#define ETDM_COWORK_CON3                  (0x22fc)
+#define ETDM_IN1_CON0                     (0x2300)
+#define ETDM_IN1_CON1                     (0x2304)
+#define ETDM_IN1_CON2                     (0x2308)
+#define ETDM_IN1_CON3                     (0x230c)
+#define ETDM_IN1_CON4                     (0x2310)
+#define ETDM_IN1_CON5                     (0x2314)
+#define ETDM_IN1_CON6                     (0x2318)
+#define ETDM_IN1_CON7                     (0x231c)
+#define ETDM_IN2_CON0                     (0x2320)
+#define ETDM_IN2_CON1                     (0x2324)
+#define ETDM_IN2_CON2                     (0x2328)
+#define ETDM_IN2_CON3                     (0x232c)
+#define ETDM_IN2_CON4                     (0x2330)
+#define ETDM_IN2_CON5                     (0x2334)
+#define ETDM_IN2_CON6                     (0x2338)
+#define ETDM_IN2_CON7                     (0x233c)
+#define ETDM_OUT1_CON0                    (0x2380)
+#define ETDM_OUT1_CON1                    (0x2384)
+#define ETDM_OUT1_CON2                    (0x2388)
+#define ETDM_OUT1_CON3                    (0x238c)
+#define ETDM_OUT1_CON4                    (0x2390)
+#define ETDM_OUT1_CON5                    (0x2394)
+#define ETDM_OUT1_CON6                    (0x2398)
+#define ETDM_OUT1_CON7                    (0x239c)
+#define ETDM_OUT2_CON0                    (0x23a0)
+#define ETDM_OUT2_CON1                    (0x23a4)
+#define ETDM_OUT2_CON2                    (0x23a8)
+#define ETDM_OUT2_CON3                    (0x23ac)
+#define ETDM_OUT2_CON4                    (0x23b0)
+#define ETDM_OUT2_CON5                    (0x23b4)
+#define ETDM_OUT2_CON6                    (0x23b8)
+#define ETDM_OUT2_CON7                    (0x23bc)
+#define ETDM_OUT3_CON0                    (0x23c0)
+#define ETDM_OUT3_CON1                    (0x23c4)
+#define ETDM_OUT3_CON2                    (0x23c8)
+#define ETDM_OUT3_CON3                    (0x23cc)
+#define ETDM_OUT3_CON4                    (0x23d0)
+#define ETDM_OUT3_CON5                    (0x23d4)
+#define ETDM_OUT3_CON6                    (0x23d8)
+#define ETDM_OUT3_CON7                    (0x23dc)
+#define ETDM_OUT3_CON8                    (0x23e0)
+#define ETDM_OUT1_CON8                    (0x23e4)
+#define ETDM_OUT2_CON8                    (0x23e8)
+#define GASRC_TIMING_CON0                 (0x2414)
+#define GASRC_TIMING_CON1                 (0x2418)
+#define GASRC_TIMING_CON2                 (0x241c)
+#define GASRC_TIMING_CON3                 (0x2420)
+#define GASRC_TIMING_CON4                 (0x2424)
+#define GASRC_TIMING_CON5                 (0x2428)
+#define A3_A4_TIMING_SEL0                 (0x2440)
+#define A3_A4_TIMING_SEL1                 (0x2444)
+#define A3_A4_TIMING_SEL2                 (0x2448)
+#define A3_A4_TIMING_SEL3                 (0x244c)
+#define A3_A4_TIMING_SEL4                 (0x2450)
+#define A3_A4_TIMING_SEL5                 (0x2454)
+#define A3_A4_TIMING_SEL6                 (0x2458)
+#define ASYS_TOP_DEBUG                    (0x2500)
+#define AFE_DPTX_CON                      (0x2558)
+#define AFE_DPTX_MON                      (0x255c)
+#define AFE_ADDA_DL_SRC2_CON0             (0x2d00)
+#define AFE_ADDA_DL_SRC2_CON1             (0x2d04)
+#define AFE_ADDA_TOP_CON0                 (0x2d0c)
+#define AFE_ADDA_UL_DL_CON0               (0x2d10)
+#define AFE_ADDA_SRC_DEBUG                (0x2d14)
+#define AFE_ADDA_SRC_DEBUG_MON0           (0x2d18)
+#define AFE_ADDA_SRC_DEBUG_MON1           (0x2d20)
+#define AFE_ADDA_PREDIS_CON0              (0x2d24)
+#define AFE_ADDA_PREDIS_CON1              (0x2d28)
+#define AFE_ADDA_PREDIS_CON2              (0x2d2c)
+#define AFE_ADDA_PREDIS_CON3              (0x2d30)
+#define AFE_ADDA_DL_SDM_DCCOMP_CON        (0x2d34)
+#define AFE_ADDA_DL_SDM_TEST              (0x2d38)
+#define AFE_ADDA_DL_DC_COMP_CFG0          (0x2d3c)
+#define AFE_ADDA_DL_DC_COMP_CFG1          (0x2d40)
+#define AFE_ADDA_DL_SDM_FIFO_MON          (0x2d44)
+#define AFE_ADDA_DL_SRC_LCH_MON           (0x2d50)
+#define AFE_ADDA_DL_SRC_RCH_MON           (0x2d54)
+#define AFE_ADDA_DL_SDM_OUT_MON           (0x2d58)
+#define AFE_ADDA_DL_SDM_DITHER_CON        (0x2d5c)
+#define AFE_ADDA_DL_SDM_AUTO_RESET_CON    (0x2d60)
+#define AFE_ADDA_UL_SRC_CON0              (0x2e3c)
+#define AFE_ADDA_UL_SRC_CON1              (0x2e40)
+#define AFE_CONN0                         (0x3000)
+#define AFE_CONN0_1                       (0x3004)
+#define AFE_CONN0_2                       (0x3008)
+#define AFE_CONN0_3                       (0x300c)
+#define AFE_CONN0_4                       (0x3010)
+#define AFE_CONN1                         (0x3014)
+#define AFE_CONN1_1                       (0x3018)
+#define AFE_CONN1_2                       (0x301c)
+#define AFE_CONN1_3                       (0x3020)
+#define AFE_CONN1_4                       (0x3024)
+#define AFE_CONN2                         (0x3028)
+#define AFE_CONN2_1                       (0x302c)
+#define AFE_CONN2_2                       (0x3030)
+#define AFE_CONN2_3                       (0x3034)
+#define AFE_CONN2_4                       (0x3038)
+#define AFE_CONN3                         (0x303c)
+#define AFE_CONN3_1                       (0x3040)
+#define AFE_CONN3_2                       (0x3044)
+#define AFE_CONN3_3                       (0x3048)
+#define AFE_CONN3_4                       (0x304c)
+#define AFE_CONN4                         (0x3050)
+#define AFE_CONN4_1                       (0x3054)
+#define AFE_CONN4_2                       (0x3058)
+#define AFE_CONN4_3                       (0x305c)
+#define AFE_CONN4_4                       (0x3060)
+#define AFE_CONN5                         (0x3064)
+#define AFE_CONN5_1                       (0x3068)
+#define AFE_CONN5_2                       (0x306c)
+#define AFE_CONN5_3                       (0x3070)
+#define AFE_CONN5_4                       (0x3074)
+#define AFE_CONN6                         (0x3078)
+#define AFE_CONN6_1                       (0x307c)
+#define AFE_CONN6_2                       (0x3080)
+#define AFE_CONN6_3                       (0x3084)
+#define AFE_CONN6_4                       (0x3088)
+#define AFE_CONN7                         (0x308c)
+#define AFE_CONN7_1                       (0x3090)
+#define AFE_CONN7_2                       (0x3094)
+#define AFE_CONN7_3                       (0x3098)
+#define AFE_CONN7_4                       (0x309c)
+#define AFE_CONN8                         (0x30a0)
+#define AFE_CONN8_1                       (0x30a4)
+#define AFE_CONN8_2                       (0x30a8)
+#define AFE_CONN8_3                       (0x30ac)
+#define AFE_CONN8_4                       (0x30b0)
+#define AFE_CONN9                         (0x30b4)
+#define AFE_CONN9_1                       (0x30b8)
+#define AFE_CONN9_2                       (0x30bc)
+#define AFE_CONN9_3                       (0x30c0)
+#define AFE_CONN9_4                       (0x30c4)
+#define AFE_CONN10                        (0x30c8)
+#define AFE_CONN10_1                      (0x30cc)
+#define AFE_CONN10_2                      (0x30d0)
+#define AFE_CONN10_3                      (0x30d4)
+#define AFE_CONN10_4                      (0x30d8)
+#define AFE_CONN11                        (0x30dc)
+#define AFE_CONN11_1                      (0x30e0)
+#define AFE_CONN11_2                      (0x30e4)
+#define AFE_CONN11_3                      (0x30e8)
+#define AFE_CONN11_4                      (0x30ec)
+#define AFE_CONN12                        (0x30f0)
+#define AFE_CONN12_1                      (0x30f4)
+#define AFE_CONN12_2                      (0x30f8)
+#define AFE_CONN12_3                      (0x30fc)
+#define AFE_CONN12_4                      (0x3100)
+#define AFE_CONN13                        (0x3104)
+#define AFE_CONN13_1                      (0x3108)
+#define AFE_CONN13_2                      (0x310c)
+#define AFE_CONN13_3                      (0x3110)
+#define AFE_CONN13_4                      (0x3114)
+#define AFE_CONN14                        (0x3118)
+#define AFE_CONN14_1                      (0x311c)
+#define AFE_CONN14_2                      (0x3120)
+#define AFE_CONN14_3                      (0x3124)
+#define AFE_CONN14_4                      (0x3128)
+#define AFE_CONN15                        (0x312c)
+#define AFE_CONN15_1                      (0x3130)
+#define AFE_CONN15_2                      (0x3134)
+#define AFE_CONN15_3                      (0x3138)
+#define AFE_CONN15_4                      (0x313c)
+#define AFE_CONN16                        (0x3140)
+#define AFE_CONN16_1                      (0x3144)
+#define AFE_CONN16_2                      (0x3148)
+#define AFE_CONN16_3                      (0x314c)
+#define AFE_CONN16_4                      (0x3150)
+#define AFE_CONN17                        (0x3154)
+#define AFE_CONN17_1                      (0x3158)
+#define AFE_CONN17_2                      (0x315c)
+#define AFE_CONN17_3                      (0x3160)
+#define AFE_CONN17_4                      (0x3164)
+#define AFE_CONN18                        (0x3168)
+#define AFE_CONN18_1                      (0x316c)
+#define AFE_CONN18_2                      (0x3170)
+#define AFE_CONN18_3                      (0x3174)
+#define AFE_CONN18_4                      (0x3178)
+#define AFE_CONN19                        (0x317c)
+#define AFE_CONN19_1                      (0x3180)
+#define AFE_CONN19_2                      (0x3184)
+#define AFE_CONN19_3                      (0x3188)
+#define AFE_CONN19_4                      (0x318c)
+#define AFE_CONN20                        (0x3190)
+#define AFE_CONN20_1                      (0x3194)
+#define AFE_CONN20_2                      (0x3198)
+#define AFE_CONN20_3                      (0x319c)
+#define AFE_CONN20_4                      (0x31a0)
+#define AFE_CONN21                        (0x31a4)
+#define AFE_CONN21_1                      (0x31a8)
+#define AFE_CONN21_2                      (0x31ac)
+#define AFE_CONN21_3                      (0x31b0)
+#define AFE_CONN21_4                      (0x31b4)
+#define AFE_CONN22                        (0x31b8)
+#define AFE_CONN22_1                      (0x31bc)
+#define AFE_CONN22_2                      (0x31c0)
+#define AFE_CONN22_3                      (0x31c4)
+#define AFE_CONN22_4                      (0x31c8)
+#define AFE_CONN23                        (0x31cc)
+#define AFE_CONN23_1                      (0x31d0)
+#define AFE_CONN23_2                      (0x31d4)
+#define AFE_CONN23_3                      (0x31d8)
+#define AFE_CONN23_4                      (0x31dc)
+#define AFE_CONN24                        (0x31e0)
+#define AFE_CONN24_1                      (0x31e4)
+#define AFE_CONN24_2                      (0x31e8)
+#define AFE_CONN24_3                      (0x31ec)
+#define AFE_CONN24_4                      (0x31f0)
+#define AFE_CONN25                        (0x31f4)
+#define AFE_CONN25_1                      (0x31f8)
+#define AFE_CONN25_2                      (0x31fc)
+#define AFE_CONN25_3                      (0x3200)
+#define AFE_CONN25_4                      (0x3204)
+#define AFE_CONN26                        (0x3208)
+#define AFE_CONN26_1                      (0x320c)
+#define AFE_CONN26_2                      (0x3210)
+#define AFE_CONN26_3                      (0x3214)
+#define AFE_CONN26_4                      (0x3218)
+#define AFE_CONN27                        (0x321c)
+#define AFE_CONN27_1                      (0x3220)
+#define AFE_CONN27_2                      (0x3224)
+#define AFE_CONN27_3                      (0x3228)
+#define AFE_CONN27_4                      (0x322c)
+#define AFE_CONN28                        (0x3230)
+#define AFE_CONN28_1                      (0x3234)
+#define AFE_CONN28_2                      (0x3238)
+#define AFE_CONN28_3                      (0x323c)
+#define AFE_CONN28_4                      (0x3240)
+#define AFE_CONN29                        (0x3244)
+#define AFE_CONN29_1                      (0x3248)
+#define AFE_CONN29_2                      (0x324c)
+#define AFE_CONN29_3                      (0x3250)
+#define AFE_CONN29_4                      (0x3254)
+#define AFE_CONN30                        (0x3258)
+#define AFE_CONN30_1                      (0x325c)
+#define AFE_CONN30_2                      (0x3260)
+#define AFE_CONN30_3                      (0x3264)
+#define AFE_CONN30_4                      (0x3268)
+#define AFE_CONN31                        (0x326c)
+#define AFE_CONN31_1                      (0x3270)
+#define AFE_CONN31_2                      (0x3274)
+#define AFE_CONN31_3                      (0x3278)
+#define AFE_CONN31_4                      (0x327c)
+#define AFE_CONN32                        (0x3280)
+#define AFE_CONN32_1                      (0x3284)
+#define AFE_CONN32_2                      (0x3288)
+#define AFE_CONN32_3                      (0x328c)
+#define AFE_CONN32_4                      (0x3290)
+#define AFE_CONN33                        (0x3294)
+#define AFE_CONN33_1                      (0x3298)
+#define AFE_CONN33_2                      (0x329c)
+#define AFE_CONN33_3                      (0x32a0)
+#define AFE_CONN33_4                      (0x32a4)
+#define AFE_CONN34                        (0x32a8)
+#define AFE_CONN34_1                      (0x32ac)
+#define AFE_CONN34_2                      (0x32b0)
+#define AFE_CONN34_3                      (0x32b4)
+#define AFE_CONN34_4                      (0x32b8)
+#define AFE_CONN35                        (0x32bc)
+#define AFE_CONN35_1                      (0x32c0)
+#define AFE_CONN35_2                      (0x32c4)
+#define AFE_CONN35_3                      (0x32c8)
+#define AFE_CONN35_4                      (0x32cc)
+#define AFE_CONN36                        (0x32d0)
+#define AFE_CONN36_1                      (0x32d4)
+#define AFE_CONN36_2                      (0x32d8)
+#define AFE_CONN36_3                      (0x32dc)
+#define AFE_CONN36_4                      (0x32e0)
+#define AFE_CONN37                        (0x32e4)
+#define AFE_CONN37_1                      (0x32e8)
+#define AFE_CONN37_2                      (0x32ec)
+#define AFE_CONN37_3                      (0x32f0)
+#define AFE_CONN37_4                      (0x32f4)
+#define AFE_CONN38                        (0x32f8)
+#define AFE_CONN38_1                      (0x32fc)
+#define AFE_CONN38_2                      (0x3300)
+#define AFE_CONN38_3                      (0x3304)
+#define AFE_CONN38_4                      (0x3308)
+#define AFE_CONN39                        (0x330c)
+#define AFE_CONN39_1                      (0x3310)
+#define AFE_CONN39_2                      (0x3314)
+#define AFE_CONN39_3                      (0x3318)
+#define AFE_CONN39_4                      (0x331c)
+#define AFE_CONN40                        (0x3320)
+#define AFE_CONN40_1                      (0x3324)
+#define AFE_CONN40_2                      (0x3328)
+#define AFE_CONN40_3                      (0x332c)
+#define AFE_CONN40_4                      (0x3330)
+#define AFE_CONN41                        (0x3334)
+#define AFE_CONN41_1                      (0x3338)
+#define AFE_CONN41_2                      (0x333c)
+#define AFE_CONN41_3                      (0x3340)
+#define AFE_CONN41_4                      (0x3344)
+#define AFE_CONN42                        (0x3348)
+#define AFE_CONN42_1                      (0x334c)
+#define AFE_CONN42_2                      (0x3350)
+#define AFE_CONN42_3                      (0x3354)
+#define AFE_CONN42_4                      (0x3358)
+#define AFE_CONN43                        (0x335c)
+#define AFE_CONN43_1                      (0x3360)
+#define AFE_CONN43_2                      (0x3364)
+#define AFE_CONN43_3                      (0x3368)
+#define AFE_CONN43_4                      (0x336c)
+#define AFE_CONN44                        (0x3370)
+#define AFE_CONN44_1                      (0x3374)
+#define AFE_CONN44_2                      (0x3378)
+#define AFE_CONN44_3                      (0x337c)
+#define AFE_CONN44_4                      (0x3380)
+#define AFE_CONN45                        (0x3384)
+#define AFE_CONN45_1                      (0x3388)
+#define AFE_CONN45_2                      (0x338c)
+#define AFE_CONN45_3                      (0x3390)
+#define AFE_CONN45_4                      (0x3394)
+#define AFE_CONN46                        (0x3398)
+#define AFE_CONN46_1                      (0x339c)
+#define AFE_CONN46_2                      (0x33a0)
+#define AFE_CONN46_3                      (0x33a4)
+#define AFE_CONN46_4                      (0x33a8)
+#define AFE_CONN47                        (0x33ac)
+#define AFE_CONN47_1                      (0x33b0)
+#define AFE_CONN47_2                      (0x33b4)
+#define AFE_CONN47_3                      (0x33b8)
+#define AFE_CONN47_4                      (0x33bc)
+#define AFE_CONN48                        (0x33c0)
+#define AFE_CONN48_1                      (0x33c4)
+#define AFE_CONN48_2                      (0x33c8)
+#define AFE_CONN48_3                      (0x33cc)
+#define AFE_CONN48_4                      (0x33d0)
+#define AFE_CONN49                        (0x33d4)
+#define AFE_CONN49_1                      (0x33d8)
+#define AFE_CONN49_2                      (0x33dc)
+#define AFE_CONN49_3                      (0x33e0)
+#define AFE_CONN49_4                      (0x33e4)
+#define AFE_CONN50                        (0x33e8)
+#define AFE_CONN50_1                      (0x33ec)
+#define AFE_CONN50_2                      (0x33f0)
+#define AFE_CONN50_3                      (0x33f4)
+#define AFE_CONN50_4                      (0x33f8)
+#define AFE_CONN51                        (0x33fc)
+#define AFE_CONN51_1                      (0x3400)
+#define AFE_CONN51_2                      (0x3404)
+#define AFE_CONN51_3                      (0x3408)
+#define AFE_CONN51_4                      (0x340c)
+#define AFE_CONN52                        (0x3410)
+#define AFE_CONN52_1                      (0x3414)
+#define AFE_CONN52_2                      (0x3418)
+#define AFE_CONN52_3                      (0x341c)
+#define AFE_CONN52_4                      (0x3420)
+#define AFE_CONN53                        (0x3424)
+#define AFE_CONN53_1                      (0x3428)
+#define AFE_CONN53_2                      (0x342c)
+#define AFE_CONN53_3                      (0x3430)
+#define AFE_CONN53_4                      (0x3434)
+#define AFE_CONN54                        (0x3438)
+#define AFE_CONN54_1                      (0x343c)
+#define AFE_CONN54_2                      (0x3440)
+#define AFE_CONN54_3                      (0x3444)
+#define AFE_CONN54_4                      (0x3448)
+#define AFE_CONN55                        (0x344c)
+#define AFE_CONN55_1                      (0x3450)
+#define AFE_CONN55_2                      (0x3454)
+#define AFE_CONN55_3                      (0x3458)
+#define AFE_CONN55_4                      (0x345c)
+#define AFE_CONN56                        (0x3460)
+#define AFE_CONN56_1                      (0x3464)
+#define AFE_CONN56_2                      (0x3468)
+#define AFE_CONN56_3                      (0x346c)
+#define AFE_CONN56_4                      (0x3470)
+#define AFE_CONN57                        (0x3474)
+#define AFE_CONN57_1                      (0x3478)
+#define AFE_CONN57_2                      (0x347c)
+#define AFE_CONN57_3                      (0x3480)
+#define AFE_CONN57_4                      (0x3484)
+#define AFE_CONN58                        (0x3488)
+#define AFE_CONN58_1                      (0x348c)
+#define AFE_CONN58_2                      (0x3490)
+#define AFE_CONN58_3                      (0x3494)
+#define AFE_CONN58_4                      (0x3498)
+#define AFE_CONN59                        (0x349c)
+#define AFE_CONN59_1                      (0x34a0)
+#define AFE_CONN59_2                      (0x34a4)
+#define AFE_CONN59_3                      (0x34a8)
+#define AFE_CONN59_4                      (0x34ac)
+#define AFE_CONN60                        (0x34b0)
+#define AFE_CONN60_1                      (0x34b4)
+#define AFE_CONN60_2                      (0x34b8)
+#define AFE_CONN60_3                      (0x34bc)
+#define AFE_CONN60_4                      (0x34c0)
+#define AFE_CONN61                        (0x34c4)
+#define AFE_CONN61_1                      (0x34c8)
+#define AFE_CONN61_2                      (0x34cc)
+#define AFE_CONN61_3                      (0x34d0)
+#define AFE_CONN61_4                      (0x34d4)
+#define AFE_CONN62                        (0x34d8)
+#define AFE_CONN62_1                      (0x34dc)
+#define AFE_CONN62_2                      (0x34e0)
+#define AFE_CONN62_3                      (0x34e4)
+#define AFE_CONN62_4                      (0x34e8)
+#define AFE_CONN63                        (0x34ec)
+#define AFE_CONN63_1                      (0x34f0)
+#define AFE_CONN63_2                      (0x34f4)
+#define AFE_CONN63_3                      (0x34f8)
+#define AFE_CONN63_4                      (0x34fc)
+#define AFE_CONN64                        (0x3500)
+#define AFE_CONN64_1                      (0x3504)
+#define AFE_CONN64_2                      (0x3508)
+#define AFE_CONN64_3                      (0x350c)
+#define AFE_CONN64_4                      (0x3510)
+#define AFE_CONN65                        (0x3514)
+#define AFE_CONN65_1                      (0x3518)
+#define AFE_CONN65_2                      (0x351c)
+#define AFE_CONN65_3                      (0x3520)
+#define AFE_CONN65_4                      (0x3524)
+#define AFE_CONN66                        (0x3528)
+#define AFE_CONN66_1                      (0x352c)
+#define AFE_CONN66_2                      (0x3530)
+#define AFE_CONN66_3                      (0x3534)
+#define AFE_CONN66_4                      (0x3538)
+#define AFE_CONN67                        (0x353c)
+#define AFE_CONN67_1                      (0x3540)
+#define AFE_CONN67_2                      (0x3544)
+#define AFE_CONN67_3                      (0x3548)
+#define AFE_CONN67_4                      (0x354c)
+#define AFE_CONN68                        (0x3550)
+#define AFE_CONN68_1                      (0x3554)
+#define AFE_CONN68_2                      (0x3558)
+#define AFE_CONN68_3                      (0x355c)
+#define AFE_CONN68_4                      (0x3560)
+#define AFE_CONN69                        (0x3564)
+#define AFE_CONN69_1                      (0x3568)
+#define AFE_CONN69_2                      (0x356c)
+#define AFE_CONN69_3                      (0x3570)
+#define AFE_CONN69_4                      (0x3574)
+#define AFE_CONN70                        (0x3578)
+#define AFE_CONN70_1                      (0x357c)
+#define AFE_CONN70_2                      (0x3580)
+#define AFE_CONN70_3                      (0x3584)
+#define AFE_CONN70_4                      (0x3588)
+#define AFE_CONN71                        (0x358c)
+#define AFE_CONN71_1                      (0x3590)
+#define AFE_CONN71_2                      (0x3594)
+#define AFE_CONN71_3                      (0x3598)
+#define AFE_CONN71_4                      (0x359c)
+#define AFE_CONN72                        (0x35a0)
+#define AFE_CONN72_1                      (0x35a4)
+#define AFE_CONN72_2                      (0x35a8)
+#define AFE_CONN72_3                      (0x35ac)
+#define AFE_CONN72_4                      (0x35b0)
+#define AFE_CONN73                        (0x35b4)
+#define AFE_CONN73_1                      (0x35b8)
+#define AFE_CONN73_2                      (0x35bc)
+#define AFE_CONN73_3                      (0x35c0)
+#define AFE_CONN73_4                      (0x35c4)
+#define AFE_CONN74                        (0x35c8)
+#define AFE_CONN74_1                      (0x35cc)
+#define AFE_CONN74_2                      (0x35d0)
+#define AFE_CONN74_3                      (0x35d4)
+#define AFE_CONN74_4                      (0x35d8)
+#define AFE_CONN75                        (0x35dc)
+#define AFE_CONN75_1                      (0x35e0)
+#define AFE_CONN75_2                      (0x35e4)
+#define AFE_CONN75_3                      (0x35e8)
+#define AFE_CONN75_4                      (0x35ec)
+#define AFE_CONN76                        (0x35f0)
+#define AFE_CONN76_1                      (0x35f4)
+#define AFE_CONN76_2                      (0x35f8)
+#define AFE_CONN76_3                      (0x35fc)
+#define AFE_CONN76_4                      (0x3600)
+#define AFE_CONN77                        (0x3604)
+#define AFE_CONN77_1                      (0x3608)
+#define AFE_CONN77_2                      (0x360c)
+#define AFE_CONN77_3                      (0x3610)
+#define AFE_CONN77_4                      (0x3614)
+#define AFE_CONN78                        (0x3618)
+#define AFE_CONN78_1                      (0x361c)
+#define AFE_CONN78_2                      (0x3620)
+#define AFE_CONN78_3                      (0x3624)
+#define AFE_CONN78_4                      (0x3628)
+#define AFE_CONN79                        (0x362c)
+#define AFE_CONN79_1                      (0x3630)
+#define AFE_CONN79_2                      (0x3634)
+#define AFE_CONN79_3                      (0x3638)
+#define AFE_CONN79_4                      (0x363c)
+#define AFE_CONN80                        (0x3640)
+#define AFE_CONN80_1                      (0x3644)
+#define AFE_CONN80_2                      (0x3648)
+#define AFE_CONN80_3                      (0x364c)
+#define AFE_CONN80_4                      (0x3650)
+#define AFE_CONN81                        (0x3654)
+#define AFE_CONN81_1                      (0x3658)
+#define AFE_CONN81_2                      (0x365c)
+#define AFE_CONN81_3                      (0x3660)
+#define AFE_CONN81_4                      (0x3664)
+#define AFE_CONN82                        (0x3668)
+#define AFE_CONN82_1                      (0x366c)
+#define AFE_CONN82_2                      (0x3670)
+#define AFE_CONN82_3                      (0x3674)
+#define AFE_CONN82_4                      (0x3678)
+#define AFE_CONN83                        (0x367c)
+#define AFE_CONN83_1                      (0x3680)
+#define AFE_CONN83_2                      (0x3684)
+#define AFE_CONN83_3                      (0x3688)
+#define AFE_CONN83_4                      (0x368c)
+#define AFE_CONN84                        (0x3690)
+#define AFE_CONN84_1                      (0x3694)
+#define AFE_CONN84_2                      (0x3698)
+#define AFE_CONN84_3                      (0x369c)
+#define AFE_CONN84_4                      (0x36a0)
+#define AFE_CONN85                        (0x36a4)
+#define AFE_CONN85_1                      (0x36a8)
+#define AFE_CONN85_2                      (0x36ac)
+#define AFE_CONN85_3                      (0x36b0)
+#define AFE_CONN85_4                      (0x36b4)
+#define AFE_CONN86                        (0x36b8)
+#define AFE_CONN86_1                      (0x36bc)
+#define AFE_CONN86_2                      (0x36c0)
+#define AFE_CONN86_3                      (0x36c4)
+#define AFE_CONN86_4                      (0x36c8)
+#define AFE_CONN87                        (0x36cc)
+#define AFE_CONN87_1                      (0x36d0)
+#define AFE_CONN87_2                      (0x36d4)
+#define AFE_CONN87_3                      (0x36d8)
+#define AFE_CONN87_4                      (0x36dc)
+#define AFE_CONN88                        (0x36e0)
+#define AFE_CONN88_1                      (0x36e4)
+#define AFE_CONN88_2                      (0x36e8)
+#define AFE_CONN88_3                      (0x36ec)
+#define AFE_CONN88_4                      (0x36f0)
+#define AFE_CONN89                        (0x36f4)
+#define AFE_CONN89_1                      (0x36f8)
+#define AFE_CONN89_2                      (0x36fc)
+#define AFE_CONN89_3                      (0x3700)
+#define AFE_CONN89_4                      (0x3704)
+#define AFE_CONN90                        (0x3708)
+#define AFE_CONN90_1                      (0x370c)
+#define AFE_CONN90_2                      (0x3710)
+#define AFE_CONN90_3                      (0x3714)
+#define AFE_CONN90_4                      (0x3718)
+#define AFE_CONN91                        (0x371c)
+#define AFE_CONN91_1                      (0x3720)
+#define AFE_CONN91_2                      (0x3724)
+#define AFE_CONN91_3                      (0x3728)
+#define AFE_CONN91_4                      (0x372c)
+#define AFE_CONN92                        (0x3730)
+#define AFE_CONN92_1                      (0x3734)
+#define AFE_CONN92_2                      (0x3738)
+#define AFE_CONN92_3                      (0x373c)
+#define AFE_CONN92_4                      (0x3740)
+#define AFE_CONN93                        (0x3744)
+#define AFE_CONN93_1                      (0x3748)
+#define AFE_CONN93_2                      (0x374c)
+#define AFE_CONN93_3                      (0x3750)
+#define AFE_CONN93_4                      (0x3754)
+#define AFE_CONN94                        (0x3758)
+#define AFE_CONN94_1                      (0x375c)
+#define AFE_CONN94_2                      (0x3760)
+#define AFE_CONN94_3                      (0x3764)
+#define AFE_CONN94_4                      (0x3768)
+#define AFE_CONN95                        (0x376c)
+#define AFE_CONN95_1                      (0x3770)
+#define AFE_CONN95_2                      (0x3774)
+#define AFE_CONN95_3                      (0x3778)
+#define AFE_CONN95_4                      (0x377c)
+#define AFE_CONN96                        (0x3780)
+#define AFE_CONN96_1                      (0x3784)
+#define AFE_CONN96_2                      (0x3788)
+#define AFE_CONN96_3                      (0x378c)
+#define AFE_CONN96_4                      (0x3790)
+#define AFE_CONN97                        (0x3794)
+#define AFE_CONN97_1                      (0x3798)
+#define AFE_CONN97_2                      (0x379c)
+#define AFE_CONN97_3                      (0x37a0)
+#define AFE_CONN97_4                      (0x37a4)
+#define AFE_CONN98                        (0x37a8)
+#define AFE_CONN98_1                      (0x37ac)
+#define AFE_CONN98_2                      (0x37b0)
+#define AFE_CONN98_3                      (0x37b4)
+#define AFE_CONN98_4                      (0x37b8)
+#define AFE_CONN99                        (0x37bc)
+#define AFE_CONN99_1                      (0x37c0)
+#define AFE_CONN99_2                      (0x37c4)
+#define AFE_CONN99_3                      (0x37c8)
+#define AFE_CONN99_4                      (0x37cc)
+#define AFE_CONN100                       (0x37d0)
+#define AFE_CONN100_1                     (0x37d4)
+#define AFE_CONN100_2                     (0x37d8)
+#define AFE_CONN100_3                     (0x37dc)
+#define AFE_CONN100_4                     (0x37e0)
+#define AFE_CONN101                       (0x37e4)
+#define AFE_CONN101_1                     (0x37e8)
+#define AFE_CONN101_2                     (0x37ec)
+#define AFE_CONN101_3                     (0x37f0)
+#define AFE_CONN101_4                     (0x37f4)
+#define AFE_CONN102                       (0x37f8)
+#define AFE_CONN102_1                     (0x37fc)
+#define AFE_CONN102_2                     (0x3800)
+#define AFE_CONN102_3                     (0x3804)
+#define AFE_CONN102_4                     (0x3808)
+#define AFE_CONN103                       (0x380c)
+#define AFE_CONN103_1                     (0x3810)
+#define AFE_CONN103_2                     (0x3814)
+#define AFE_CONN103_3                     (0x3818)
+#define AFE_CONN103_4                     (0x381c)
+#define AFE_CONN104                       (0x3820)
+#define AFE_CONN104_1                     (0x3824)
+#define AFE_CONN104_2                     (0x3828)
+#define AFE_CONN104_3                     (0x382c)
+#define AFE_CONN104_4                     (0x3830)
+#define AFE_CONN105                       (0x3834)
+#define AFE_CONN105_1                     (0x3838)
+#define AFE_CONN105_2                     (0x383c)
+#define AFE_CONN105_3                     (0x3840)
+#define AFE_CONN105_4                     (0x3844)
+#define AFE_CONN106                       (0x3848)
+#define AFE_CONN106_1                     (0x384c)
+#define AFE_CONN106_2                     (0x3850)
+#define AFE_CONN106_3                     (0x3854)
+#define AFE_CONN106_4                     (0x3858)
+#define AFE_CONN107                       (0x385c)
+#define AFE_CONN107_1                     (0x3860)
+#define AFE_CONN107_2                     (0x3864)
+#define AFE_CONN107_3                     (0x3868)
+#define AFE_CONN107_4                     (0x386c)
+#define AFE_CONN108                       (0x3870)
+#define AFE_CONN108_1                     (0x3874)
+#define AFE_CONN108_2                     (0x3878)
+#define AFE_CONN108_3                     (0x387c)
+#define AFE_CONN108_4                     (0x3880)
+#define AFE_CONN109                       (0x3884)
+#define AFE_CONN109_1                     (0x3888)
+#define AFE_CONN109_2                     (0x388c)
+#define AFE_CONN109_3                     (0x3890)
+#define AFE_CONN109_4                     (0x3894)
+#define AFE_CONN110                       (0x3898)
+#define AFE_CONN110_1                     (0x389c)
+#define AFE_CONN110_2                     (0x38a0)
+#define AFE_CONN110_3                     (0x38a4)
+#define AFE_CONN110_4                     (0x38a8)
+#define AFE_CONN111                       (0x38ac)
+#define AFE_CONN111_1                     (0x38b0)
+#define AFE_CONN111_2                     (0x38b4)
+#define AFE_CONN111_3                     (0x38b8)
+#define AFE_CONN111_4                     (0x38bc)
+#define AFE_CONN112                       (0x38c0)
+#define AFE_CONN112_1                     (0x38c4)
+#define AFE_CONN112_2                     (0x38c8)
+#define AFE_CONN112_3                     (0x38cc)
+#define AFE_CONN112_4                     (0x38d0)
+#define AFE_CONN113                       (0x38d4)
+#define AFE_CONN113_1                     (0x38d8)
+#define AFE_CONN113_2                     (0x38dc)
+#define AFE_CONN113_3                     (0x38e0)
+#define AFE_CONN113_4                     (0x38e4)
+#define AFE_CONN114                       (0x38e8)
+#define AFE_CONN114_1                     (0x38ec)
+#define AFE_CONN114_2                     (0x38f0)
+#define AFE_CONN114_3                     (0x38f4)
+#define AFE_CONN114_4                     (0x38f8)
+#define AFE_CONN115                       (0x38fc)
+#define AFE_CONN115_1                     (0x3900)
+#define AFE_CONN115_2                     (0x3904)
+#define AFE_CONN115_3                     (0x3908)
+#define AFE_CONN115_4                     (0x390c)
+#define AFE_CONN116                       (0x3910)
+#define AFE_CONN116_1                     (0x3914)
+#define AFE_CONN116_2                     (0x3918)
+#define AFE_CONN116_3                     (0x391c)
+#define AFE_CONN116_4                     (0x3920)
+#define AFE_CONN117                       (0x3924)
+#define AFE_CONN117_1                     (0x3928)
+#define AFE_CONN117_2                     (0x392c)
+#define AFE_CONN117_3                     (0x3930)
+#define AFE_CONN117_4                     (0x3934)
+#define AFE_CONN118                       (0x3938)
+#define AFE_CONN118_1                     (0x393c)
+#define AFE_CONN118_2                     (0x3940)
+#define AFE_CONN118_3                     (0x3944)
+#define AFE_CONN118_4                     (0x3948)
+#define AFE_CONN119                       (0x394c)
+#define AFE_CONN119_1                     (0x3950)
+#define AFE_CONN119_2                     (0x3954)
+#define AFE_CONN119_3                     (0x3958)
+#define AFE_CONN119_4                     (0x395c)
+#define AFE_CONN120                       (0x3960)
+#define AFE_CONN120_1                     (0x3964)
+#define AFE_CONN120_2                     (0x3968)
+#define AFE_CONN120_3                     (0x396c)
+#define AFE_CONN120_4                     (0x3970)
+#define AFE_CONN121                       (0x3974)
+#define AFE_CONN121_1                     (0x3978)
+#define AFE_CONN121_2                     (0x397c)
+#define AFE_CONN121_3                     (0x3980)
+#define AFE_CONN121_4                     (0x3984)
+#define AFE_CONN122                       (0x3988)
+#define AFE_CONN122_1                     (0x398c)
+#define AFE_CONN122_2                     (0x3990)
+#define AFE_CONN122_3                     (0x3994)
+#define AFE_CONN122_4                     (0x3998)
+#define AFE_CONN123                       (0x399c)
+#define AFE_CONN123_1                     (0x39a0)
+#define AFE_CONN123_2                     (0x39a4)
+#define AFE_CONN123_3                     (0x39a8)
+#define AFE_CONN123_4                     (0x39ac)
+#define AFE_CONN124                       (0x39b0)
+#define AFE_CONN124_1                     (0x39b4)
+#define AFE_CONN124_2                     (0x39b8)
+#define AFE_CONN124_3                     (0x39bc)
+#define AFE_CONN124_4                     (0x39c0)
+#define AFE_CONN125                       (0x39c4)
+#define AFE_CONN125_1                     (0x39c8)
+#define AFE_CONN125_2                     (0x39cc)
+#define AFE_CONN125_3                     (0x39d0)
+#define AFE_CONN125_4                     (0x39d4)
+#define AFE_CONN126                       (0x39d8)
+#define AFE_CONN126_1                     (0x39dc)
+#define AFE_CONN126_2                     (0x39e0)
+#define AFE_CONN126_3                     (0x39e4)
+#define AFE_CONN126_4                     (0x39e8)
+#define AFE_CONN127                       (0x39ec)
+#define AFE_CONN127_1                     (0x39f0)
+#define AFE_CONN127_2                     (0x39f4)
+#define AFE_CONN127_3                     (0x39f8)
+#define AFE_CONN127_4                     (0x39fc)
+#define AFE_CONN128                       (0x3a00)
+#define AFE_CONN128_1                     (0x3a04)
+#define AFE_CONN128_2                     (0x3a08)
+#define AFE_CONN128_3                     (0x3a0c)
+#define AFE_CONN128_4                     (0x3a10)
+#define AFE_CONN129                       (0x3a14)
+#define AFE_CONN129_1                     (0x3a18)
+#define AFE_CONN129_2                     (0x3a1c)
+#define AFE_CONN129_3                     (0x3a20)
+#define AFE_CONN129_4                     (0x3a24)
+#define AFE_CONN130                       (0x3a28)
+#define AFE_CONN130_1                     (0x3a2c)
+#define AFE_CONN130_2                     (0x3a30)
+#define AFE_CONN130_3                     (0x3a34)
+#define AFE_CONN130_4                     (0x3a38)
+#define AFE_CONN131                       (0x3a3c)
+#define AFE_CONN131_1                     (0x3a40)
+#define AFE_CONN131_2                     (0x3a44)
+#define AFE_CONN131_3                     (0x3a48)
+#define AFE_CONN131_4                     (0x3a4c)
+#define AFE_CONN132                       (0x3a50)
+#define AFE_CONN132_1                     (0x3a54)
+#define AFE_CONN132_2                     (0x3a58)
+#define AFE_CONN132_3                     (0x3a5c)
+#define AFE_CONN132_4                     (0x3a60)
+#define AFE_CONN133                       (0x3a64)
+#define AFE_CONN133_1                     (0x3a68)
+#define AFE_CONN133_2                     (0x3a6c)
+#define AFE_CONN133_3                     (0x3a70)
+#define AFE_CONN133_4                     (0x3a74)
+#define AFE_CONN134                       (0x3a78)
+#define AFE_CONN134_1                     (0x3a7c)
+#define AFE_CONN134_2                     (0x3a80)
+#define AFE_CONN134_3                     (0x3a84)
+#define AFE_CONN134_4                     (0x3a88)
+#define AFE_CONN135                       (0x3a8c)
+#define AFE_CONN135_1                     (0x3a90)
+#define AFE_CONN135_2                     (0x3a94)
+#define AFE_CONN135_3                     (0x3a98)
+#define AFE_CONN135_4                     (0x3a9c)
+#define AFE_CONN136                       (0x3aa0)
+#define AFE_CONN136_1                     (0x3aa4)
+#define AFE_CONN136_2                     (0x3aa8)
+#define AFE_CONN136_3                     (0x3aac)
+#define AFE_CONN136_4                     (0x3ab0)
+#define AFE_CONN137                       (0x3ab4)
+#define AFE_CONN137_1                     (0x3ab8)
+#define AFE_CONN137_2                     (0x3abc)
+#define AFE_CONN137_3                     (0x3ac0)
+#define AFE_CONN137_4                     (0x3ac4)
+#define AFE_CONN138                       (0x3ac8)
+#define AFE_CONN138_1                     (0x3acc)
+#define AFE_CONN138_2                     (0x3ad0)
+#define AFE_CONN138_3                     (0x3ad4)
+#define AFE_CONN138_4                     (0x3ad8)
+#define AFE_CONN139                       (0x3adc)
+#define AFE_CONN139_1                     (0x3ae0)
+#define AFE_CONN139_2                     (0x3ae4)
+#define AFE_CONN139_3                     (0x3ae8)
+#define AFE_CONN139_4                     (0x3aec)
+#define AFE_CONN_RS                       (0x3af0)
+#define AFE_CONN_RS_1                     (0x3af4)
+#define AFE_CONN_RS_2                     (0x3af8)
+#define AFE_CONN_RS_3                     (0x3afc)
+#define AFE_CONN_RS_4                     (0x3b00)
+#define AFE_CONN_16BIT                    (0x3b04)
+#define AFE_CONN_16BIT_1                  (0x3b08)
+#define AFE_CONN_16BIT_2                  (0x3b0c)
+#define AFE_CONN_16BIT_3                  (0x3b10)
+#define AFE_CONN_16BIT_4                  (0x3b14)
+#define AFE_CONN_24BIT                    (0x3b18)
+#define AFE_CONN_24BIT_1                  (0x3b1c)
+#define AFE_CONN_24BIT_2                  (0x3b20)
+#define AFE_CONN_24BIT_3                  (0x3b24)
+#define AFE_CONN_24BIT_4                  (0x3b28)
+#define AFE_CONN_DI                       (0x3b2c)
+#define AFE_CONN_DI_1                     (0x3b30)
+#define AFE_CONN_DI_2                     (0x3b34)
+#define AFE_CONN_DI_3                     (0x3b38)
+#define AFE_CONN_DI_4                     (0x3b3c)
+#define AFE_CONN176                       (0x3ea0)
+#define AFE_CONN176_1                     (0x3ea4)
+#define AFE_CONN176_2                     (0x3ea8)
+#define AFE_CONN176_3                     (0x3eac)
+#define AFE_CONN176_4                     (0x3eb0)
+#define AFE_CONN176_5                     (0x3eb4)
+#define AFE_CONN177                       (0x3eb8)
+#define AFE_CONN177_1                     (0x3ebc)
+#define AFE_CONN177_2                     (0x3ec0)
+#define AFE_CONN177_3                     (0x3ec4)
+#define AFE_CONN177_4                     (0x3ec8)
+#define AFE_CONN177_5                     (0x3ecc)
+#define AFE_CONN182                       (0x3f30)
+#define AFE_CONN182_1                     (0x3f34)
+#define AFE_CONN182_2                     (0x3f38)
+#define AFE_CONN182_3                     (0x3f3c)
+#define AFE_CONN182_4                     (0x3f40)
+#define AFE_CONN182_5                     (0x3f44)
+#define AFE_CONN183                       (0x3f48)
+#define AFE_CONN183_1                     (0x3f4c)
+#define AFE_CONN183_2                     (0x3f50)
+#define AFE_CONN183_3                     (0x3f54)
+#define AFE_CONN183_4                     (0x3f58)
+#define AFE_CONN183_5                     (0x3f5c)
+#define AFE_SECURE_MASK_CONN0             (0x4000)
+#define AFE_SECURE_MASK_CONN0_1           (0x4004)
+#define AFE_SECURE_MASK_CONN0_2           (0x4008)
+#define AFE_SECURE_MASK_CONN0_3           (0x400c)
+#define AFE_SECURE_MASK_CONN0_4           (0x4010)
+#define AFE_SECURE_MASK_CONN1             (0x4014)
+#define AFE_SECURE_MASK_CONN1_1           (0x4018)
+#define AFE_SECURE_MASK_CONN1_2           (0x401c)
+#define AFE_SECURE_MASK_CONN1_3           (0x4020)
+#define AFE_SECURE_MASK_CONN1_4           (0x4024)
+#define AFE_SECURE_MASK_CONN2             (0x4028)
+#define AFE_SECURE_MASK_CONN2_1           (0x402c)
+#define AFE_SECURE_MASK_CONN2_2           (0x4030)
+#define AFE_SECURE_MASK_CONN2_3           (0x4034)
+#define AFE_SECURE_MASK_CONN2_4           (0x4038)
+#define AFE_SECURE_MASK_CONN3             (0x403c)
+#define AFE_SECURE_MASK_CONN3_1           (0x4040)
+#define AFE_SECURE_MASK_CONN3_2           (0x4044)
+#define AFE_SECURE_MASK_CONN3_3           (0x4048)
+#define AFE_SECURE_MASK_CONN3_4           (0x404c)
+#define AFE_SECURE_MASK_CONN4             (0x4050)
+#define AFE_SECURE_MASK_CONN4_1           (0x4054)
+#define AFE_SECURE_MASK_CONN4_2           (0x4058)
+#define AFE_SECURE_MASK_CONN4_3           (0x405c)
+#define AFE_SECURE_MASK_CONN4_4           (0x4060)
+#define AFE_SECURE_MASK_CONN5             (0x4064)
+#define AFE_SECURE_MASK_CONN5_1           (0x4068)
+#define AFE_SECURE_MASK_CONN5_2           (0x406c)
+#define AFE_SECURE_MASK_CONN5_3           (0x4070)
+#define AFE_SECURE_MASK_CONN5_4           (0x4074)
+#define AFE_SECURE_MASK_CONN6             (0x4078)
+#define AFE_SECURE_MASK_CONN6_1           (0x407c)
+#define AFE_SECURE_MASK_CONN6_2           (0x4080)
+#define AFE_SECURE_MASK_CONN6_3           (0x4084)
+#define AFE_SECURE_MASK_CONN6_4           (0x4088)
+#define AFE_SECURE_MASK_CONN7             (0x408c)
+#define AFE_SECURE_MASK_CONN7_1           (0x4090)
+#define AFE_SECURE_MASK_CONN7_2           (0x4094)
+#define AFE_SECURE_MASK_CONN7_3           (0x4098)
+#define AFE_SECURE_MASK_CONN7_4           (0x409c)
+#define AFE_SECURE_MASK_CONN8             (0x40a0)
+#define AFE_SECURE_MASK_CONN8_1           (0x40a4)
+#define AFE_SECURE_MASK_CONN8_2           (0x40a8)
+#define AFE_SECURE_MASK_CONN8_3           (0x40ac)
+#define AFE_SECURE_MASK_CONN8_4           (0x40b0)
+#define AFE_SECURE_MASK_CONN9             (0x40b4)
+#define AFE_SECURE_MASK_CONN9_1           (0x40b8)
+#define AFE_SECURE_MASK_CONN9_2           (0x40bc)
+#define AFE_SECURE_MASK_CONN9_3           (0x40c0)
+#define AFE_SECURE_MASK_CONN9_4           (0x40c4)
+#define AFE_SECURE_MASK_CONN10            (0x40c8)
+#define AFE_SECURE_MASK_CONN10_1          (0x40cc)
+#define AFE_SECURE_MASK_CONN10_2          (0x40d0)
+#define AFE_SECURE_MASK_CONN10_3          (0x40d4)
+#define AFE_SECURE_MASK_CONN10_4          (0x40d8)
+#define AFE_SECURE_MASK_CONN11            (0x40dc)
+#define AFE_SECURE_MASK_CONN11_1          (0x40e0)
+#define AFE_SECURE_MASK_CONN11_2          (0x40e4)
+#define AFE_SECURE_MASK_CONN11_3          (0x40e8)
+#define AFE_SECURE_MASK_CONN11_4          (0x40ec)
+#define AFE_SECURE_MASK_CONN12            (0x40f0)
+#define AFE_SECURE_MASK_CONN12_1          (0x40f4)
+#define AFE_SECURE_MASK_CONN12_2          (0x40f8)
+#define AFE_SECURE_MASK_CONN12_3          (0x40fc)
+#define AFE_SECURE_MASK_CONN12_4          (0x4100)
+#define AFE_SECURE_MASK_CONN13            (0x4104)
+#define AFE_SECURE_MASK_CONN13_1          (0x4108)
+#define AFE_SECURE_MASK_CONN13_2          (0x410c)
+#define AFE_SECURE_MASK_CONN13_3          (0x4110)
+#define AFE_SECURE_MASK_CONN13_4          (0x4114)
+#define AFE_SECURE_MASK_CONN14            (0x4118)
+#define AFE_SECURE_MASK_CONN14_1          (0x411c)
+#define AFE_SECURE_MASK_CONN14_2          (0x4120)
+#define AFE_SECURE_MASK_CONN14_3          (0x4124)
+#define AFE_SECURE_MASK_CONN14_4          (0x4128)
+#define AFE_SECURE_MASK_CONN15            (0x412c)
+#define AFE_SECURE_MASK_CONN15_1          (0x4130)
+#define AFE_SECURE_MASK_CONN15_2          (0x4134)
+#define AFE_SECURE_MASK_CONN15_3          (0x4138)
+#define AFE_SECURE_MASK_CONN15_4          (0x413c)
+#define AFE_SECURE_MASK_CONN16            (0x4140)
+#define AFE_SECURE_MASK_CONN16_1          (0x4144)
+#define AFE_SECURE_MASK_CONN16_2          (0x4148)
+#define AFE_SECURE_MASK_CONN16_3          (0x414c)
+#define AFE_SECURE_MASK_CONN16_4          (0x4150)
+#define AFE_SECURE_MASK_CONN17            (0x4154)
+#define AFE_SECURE_MASK_CONN17_1          (0x4158)
+#define AFE_SECURE_MASK_CONN17_2          (0x415c)
+#define AFE_SECURE_MASK_CONN17_3          (0x4160)
+#define AFE_SECURE_MASK_CONN17_4          (0x4164)
+#define AFE_SECURE_MASK_CONN18            (0x4168)
+#define AFE_SECURE_MASK_CONN18_1          (0x416c)
+#define AFE_SECURE_MASK_CONN18_2          (0x4170)
+#define AFE_SECURE_MASK_CONN18_3          (0x4174)
+#define AFE_SECURE_MASK_CONN18_4          (0x4178)
+#define AFE_SECURE_MASK_CONN19            (0x417c)
+#define AFE_SECURE_MASK_CONN19_1          (0x4180)
+#define AFE_SECURE_MASK_CONN19_2          (0x4184)
+#define AFE_SECURE_MASK_CONN19_3          (0x4188)
+#define AFE_SECURE_MASK_CONN19_4          (0x418c)
+#define AFE_SECURE_MASK_CONN20            (0x4190)
+#define AFE_SECURE_MASK_CONN20_1          (0x4194)
+#define AFE_SECURE_MASK_CONN20_2          (0x4198)
+#define AFE_SECURE_MASK_CONN20_3          (0x419c)
+#define AFE_SECURE_MASK_CONN20_4          (0x41a0)
+#define AFE_SECURE_MASK_CONN21            (0x41a4)
+#define AFE_SECURE_MASK_CONN21_1          (0x41a8)
+#define AFE_SECURE_MASK_CONN21_2          (0x41ac)
+#define AFE_SECURE_MASK_CONN21_3          (0x41b0)
+#define AFE_SECURE_MASK_CONN21_4          (0x41b4)
+#define AFE_SECURE_MASK_CONN22            (0x41b8)
+#define AFE_SECURE_MASK_CONN22_1          (0x41bc)
+#define AFE_SECURE_MASK_CONN22_2          (0x41c0)
+#define AFE_SECURE_MASK_CONN22_3          (0x41c4)
+#define AFE_SECURE_MASK_CONN22_4          (0x41c8)
+#define AFE_SECURE_MASK_CONN23            (0x41cc)
+#define AFE_SECURE_MASK_CONN23_1          (0x41d0)
+#define AFE_SECURE_MASK_CONN23_2          (0x41d4)
+#define AFE_SECURE_MASK_CONN23_3          (0x41d8)
+#define AFE_SECURE_MASK_CONN23_4          (0x41dc)
+#define AFE_SECURE_MASK_CONN24            (0x41e0)
+#define AFE_SECURE_MASK_CONN24_1          (0x41e4)
+#define AFE_SECURE_MASK_CONN24_2          (0x41e8)
+#define AFE_SECURE_MASK_CONN24_3          (0x41ec)
+#define AFE_SECURE_MASK_CONN24_4          (0x41f0)
+#define AFE_SECURE_MASK_CONN25            (0x41f4)
+#define AFE_SECURE_MASK_CONN25_1          (0x41f8)
+#define AFE_SECURE_MASK_CONN25_2          (0x41fc)
+#define AFE_SECURE_MASK_CONN25_3          (0x4200)
+#define AFE_SECURE_MASK_CONN25_4          (0x4204)
+#define AFE_SECURE_MASK_CONN26            (0x4208)
+#define AFE_SECURE_MASK_CONN26_1          (0x420c)
+#define AFE_SECURE_MASK_CONN26_2          (0x4210)
+#define AFE_SECURE_MASK_CONN26_3          (0x4214)
+#define AFE_SECURE_MASK_CONN26_4          (0x4218)
+#define AFE_SECURE_MASK_CONN27            (0x421c)
+#define AFE_SECURE_MASK_CONN27_1          (0x4220)
+#define AFE_SECURE_MASK_CONN27_2          (0x4224)
+#define AFE_SECURE_MASK_CONN27_3          (0x4228)
+#define AFE_SECURE_MASK_CONN27_4          (0x422c)
+#define AFE_SECURE_MASK_CONN28            (0x4230)
+#define AFE_SECURE_MASK_CONN28_1          (0x4234)
+#define AFE_SECURE_MASK_CONN28_2          (0x4238)
+#define AFE_SECURE_MASK_CONN28_3          (0x423c)
+#define AFE_SECURE_MASK_CONN28_4          (0x4240)
+#define AFE_SECURE_MASK_CONN29            (0x4244)
+#define AFE_SECURE_MASK_CONN29_1          (0x4248)
+#define AFE_SECURE_MASK_CONN29_2          (0x424c)
+#define AFE_SECURE_MASK_CONN29_3          (0x4250)
+#define AFE_SECURE_MASK_CONN29_4          (0x4254)
+#define AFE_SECURE_MASK_CONN30            (0x4258)
+#define AFE_SECURE_MASK_CONN30_1          (0x425c)
+#define AFE_SECURE_MASK_CONN30_2          (0x4260)
+#define AFE_SECURE_MASK_CONN30_3          (0x4264)
+#define AFE_SECURE_MASK_CONN30_4          (0x4268)
+#define AFE_SECURE_MASK_CONN31            (0x426c)
+#define AFE_SECURE_MASK_CONN31_1          (0x4270)
+#define AFE_SECURE_MASK_CONN31_2          (0x4274)
+#define AFE_SECURE_MASK_CONN31_3          (0x4278)
+#define AFE_SECURE_MASK_CONN31_4          (0x427c)
+#define AFE_SECURE_MASK_CONN32            (0x4280)
+#define AFE_SECURE_MASK_CONN32_1          (0x4284)
+#define AFE_SECURE_MASK_CONN32_2          (0x4288)
+#define AFE_SECURE_MASK_CONN32_3          (0x428c)
+#define AFE_SECURE_MASK_CONN32_4          (0x4290)
+#define AFE_SECURE_MASK_CONN33            (0x4294)
+#define AFE_SECURE_MASK_CONN33_1          (0x4298)
+#define AFE_SECURE_MASK_CONN33_2          (0x429c)
+#define AFE_SECURE_MASK_CONN33_3          (0x42a0)
+#define AFE_SECURE_MASK_CONN33_4          (0x42a4)
+#define AFE_SECURE_MASK_CONN34            (0x42a8)
+#define AFE_SECURE_MASK_CONN34_1          (0x42ac)
+#define AFE_SECURE_MASK_CONN34_2          (0x42b0)
+#define AFE_SECURE_MASK_CONN34_3          (0x42b4)
+#define AFE_SECURE_MASK_CONN34_4          (0x42b8)
+#define AFE_SECURE_MASK_CONN35            (0x42bc)
+#define AFE_SECURE_MASK_CONN35_1          (0x42c0)
+#define AFE_SECURE_MASK_CONN35_2          (0x42c4)
+#define AFE_SECURE_MASK_CONN35_3          (0x42c8)
+#define AFE_SECURE_MASK_CONN35_4          (0x42cc)
+#define AFE_SECURE_MASK_CONN36            (0x42d0)
+#define AFE_SECURE_MASK_CONN36_1          (0x42d4)
+#define AFE_SECURE_MASK_CONN36_2          (0x42d8)
+#define AFE_SECURE_MASK_CONN36_3          (0x42dc)
+#define AFE_SECURE_MASK_CONN36_4          (0x42e0)
+#define AFE_SECURE_MASK_CONN37            (0x42e4)
+#define AFE_SECURE_MASK_CONN37_1          (0x42e8)
+#define AFE_SECURE_MASK_CONN37_2          (0x42ec)
+#define AFE_SECURE_MASK_CONN37_3          (0x42f0)
+#define AFE_SECURE_MASK_CONN37_4          (0x42f4)
+#define AFE_SECURE_MASK_CONN38            (0x42f8)
+#define AFE_SECURE_MASK_CONN38_1          (0x42fc)
+#define AFE_SECURE_MASK_CONN38_2          (0x4300)
+#define AFE_SECURE_MASK_CONN38_3          (0x4304)
+#define AFE_SECURE_MASK_CONN38_4          (0x4308)
+#define AFE_SECURE_MASK_CONN39            (0x430c)
+#define AFE_SECURE_MASK_CONN39_1          (0x4310)
+#define AFE_SECURE_MASK_CONN39_2          (0x4314)
+#define AFE_SECURE_MASK_CONN39_3          (0x4318)
+#define AFE_SECURE_MASK_CONN39_4          (0x431c)
+#define AFE_SECURE_MASK_CONN40            (0x4320)
+#define AFE_SECURE_MASK_CONN40_1          (0x4324)
+#define AFE_SECURE_MASK_CONN40_2          (0x4328)
+#define AFE_SECURE_MASK_CONN40_3          (0x432c)
+#define AFE_SECURE_MASK_CONN40_4          (0x4330)
+#define AFE_SECURE_MASK_CONN41            (0x4334)
+#define AFE_SECURE_MASK_CONN41_1          (0x4338)
+#define AFE_SECURE_MASK_CONN41_2          (0x433c)
+#define AFE_SECURE_MASK_CONN41_3          (0x4340)
+#define AFE_SECURE_MASK_CONN41_4          (0x4344)
+#define AFE_SECURE_MASK_CONN42            (0x4348)
+#define AFE_SECURE_MASK_CONN42_1          (0x434c)
+#define AFE_SECURE_MASK_CONN42_2          (0x4350)
+#define AFE_SECURE_MASK_CONN42_3          (0x4354)
+#define AFE_SECURE_MASK_CONN42_4          (0x4358)
+#define AFE_SECURE_MASK_CONN43            (0x435c)
+#define AFE_SECURE_MASK_CONN43_1          (0x4360)
+#define AFE_SECURE_MASK_CONN43_2          (0x4364)
+#define AFE_SECURE_MASK_CONN43_3          (0x4368)
+#define AFE_SECURE_MASK_CONN43_4          (0x436c)
+#define AFE_SECURE_MASK_CONN44            (0x4370)
+#define AFE_SECURE_MASK_CONN44_1          (0x4374)
+#define AFE_SECURE_MASK_CONN44_2          (0x4378)
+#define AFE_SECURE_MASK_CONN44_3          (0x437c)
+#define AFE_SECURE_MASK_CONN44_4          (0x4380)
+#define AFE_SECURE_MASK_CONN45            (0x4384)
+#define AFE_SECURE_MASK_CONN45_1          (0x4388)
+#define AFE_SECURE_MASK_CONN45_2          (0x438c)
+#define AFE_SECURE_MASK_CONN45_3          (0x4390)
+#define AFE_SECURE_MASK_CONN45_4          (0x4394)
+#define AFE_SECURE_MASK_CONN46            (0x4398)
+#define AFE_SECURE_MASK_CONN46_1          (0x439c)
+#define AFE_SECURE_MASK_CONN46_2          (0x43a0)
+#define AFE_SECURE_MASK_CONN46_3          (0x43a4)
+#define AFE_SECURE_MASK_CONN46_4          (0x43a8)
+#define AFE_SECURE_MASK_CONN47            (0x43ac)
+#define AFE_SECURE_MASK_CONN47_1          (0x43b0)
+#define AFE_SECURE_MASK_CONN47_2          (0x43b4)
+#define AFE_SECURE_MASK_CONN47_3          (0x43b8)
+#define AFE_SECURE_MASK_CONN47_4          (0x43bc)
+#define AFE_SECURE_MASK_CONN48            (0x43c0)
+#define AFE_SECURE_MASK_CONN48_1          (0x43c4)
+#define AFE_SECURE_MASK_CONN48_2          (0x43c8)
+#define AFE_SECURE_MASK_CONN48_3          (0x43cc)
+#define AFE_SECURE_MASK_CONN48_4          (0x43d0)
+#define AFE_SECURE_MASK_CONN49            (0x43d4)
+#define AFE_SECURE_MASK_CONN49_1          (0x43d8)
+#define AFE_SECURE_MASK_CONN49_2          (0x43dc)
+#define AFE_SECURE_MASK_CONN49_3          (0x43e0)
+#define AFE_SECURE_MASK_CONN49_4          (0x43e4)
+#define AFE_SECURE_MASK_CONN50            (0x43e8)
+#define AFE_SECURE_MASK_CONN50_1          (0x43ec)
+#define AFE_SECURE_MASK_CONN50_2          (0x43f0)
+#define AFE_SECURE_MASK_CONN50_3          (0x43f4)
+#define AFE_SECURE_MASK_CONN50_4          (0x43f8)
+#define AFE_SECURE_MASK_CONN51            (0x43fc)
+#define AFE_SECURE_MASK_CONN51_1          (0x4400)
+#define AFE_SECURE_MASK_CONN51_2          (0x4404)
+#define AFE_SECURE_MASK_CONN51_3          (0x4408)
+#define AFE_SECURE_MASK_CONN51_4          (0x440c)
+#define AFE_SECURE_MASK_CONN52            (0x4410)
+#define AFE_SECURE_MASK_CONN52_1          (0x4414)
+#define AFE_SECURE_MASK_CONN52_2          (0x4418)
+#define AFE_SECURE_MASK_CONN52_3          (0x441c)
+#define AFE_SECURE_MASK_CONN52_4          (0x4420)
+#define AFE_SECURE_MASK_CONN53            (0x4424)
+#define AFE_SECURE_MASK_CONN53_1          (0x4428)
+#define AFE_SECURE_MASK_CONN53_2          (0x442c)
+#define AFE_SECURE_MASK_CONN53_3          (0x4430)
+#define AFE_SECURE_MASK_CONN53_4          (0x4434)
+#define AFE_SECURE_MASK_CONN54            (0x4438)
+#define AFE_SECURE_MASK_CONN54_1          (0x443c)
+#define AFE_SECURE_MASK_CONN54_2          (0x4440)
+#define AFE_SECURE_MASK_CONN54_3          (0x4444)
+#define AFE_SECURE_MASK_CONN54_4          (0x4448)
+#define AFE_SECURE_MASK_CONN55            (0x444c)
+#define AFE_SECURE_MASK_CONN55_1          (0x4450)
+#define AFE_SECURE_MASK_CONN55_2          (0x4454)
+#define AFE_SECURE_MASK_CONN55_3          (0x4458)
+#define AFE_SECURE_MASK_CONN55_4          (0x445c)
+#define AFE_SECURE_MASK_CONN56            (0x4460)
+#define AFE_SECURE_MASK_CONN56_1          (0x4464)
+#define AFE_SECURE_MASK_CONN56_2          (0x4468)
+#define AFE_SECURE_MASK_CONN56_3          (0x446c)
+#define AFE_SECURE_MASK_CONN56_4          (0x4470)
+#define AFE_SECURE_MASK_CONN57            (0x4474)
+#define AFE_SECURE_MASK_CONN57_1          (0x4478)
+#define AFE_SECURE_MASK_CONN57_2          (0x447c)
+#define AFE_SECURE_MASK_CONN57_3          (0x4480)
+#define AFE_SECURE_MASK_CONN57_4          (0x4484)
+#define AFE_SECURE_MASK_CONN58            (0x4488)
+#define AFE_SECURE_MASK_CONN58_1          (0x448c)
+#define AFE_SECURE_MASK_CONN58_2          (0x4490)
+#define AFE_SECURE_MASK_CONN58_3          (0x4494)
+#define AFE_SECURE_MASK_CONN58_4          (0x4498)
+#define AFE_SECURE_MASK_CONN59            (0x449c)
+#define AFE_SECURE_MASK_CONN59_1          (0x44a0)
+#define AFE_SECURE_MASK_CONN59_2          (0x44a4)
+#define AFE_SECURE_MASK_CONN59_3          (0x44a8)
+#define AFE_SECURE_MASK_CONN59_4          (0x44ac)
+#define AFE_SECURE_MASK_CONN60            (0x44b0)
+#define AFE_SECURE_MASK_CONN60_1          (0x44b4)
+#define AFE_SECURE_MASK_CONN60_2          (0x44b8)
+#define AFE_SECURE_MASK_CONN60_3          (0x44bc)
+#define AFE_SECURE_MASK_CONN60_4          (0x44c0)
+#define AFE_SECURE_MASK_CONN61            (0x44c4)
+#define AFE_SECURE_MASK_CONN61_1          (0x44c8)
+#define AFE_SECURE_MASK_CONN61_2          (0x44cc)
+#define AFE_SECURE_MASK_CONN61_3          (0x44d0)
+#define AFE_SECURE_MASK_CONN61_4          (0x44d4)
+#define AFE_SECURE_MASK_CONN62            (0x44d8)
+#define AFE_SECURE_MASK_CONN62_1          (0x44dc)
+#define AFE_SECURE_MASK_CONN62_2          (0x44e0)
+#define AFE_SECURE_MASK_CONN62_3          (0x44e4)
+#define AFE_SECURE_MASK_CONN62_4          (0x44e8)
+#define AFE_SECURE_MASK_CONN63            (0x44ec)
+#define AFE_SECURE_MASK_CONN63_1          (0x44f0)
+#define AFE_SECURE_MASK_CONN63_2          (0x44f4)
+#define AFE_SECURE_MASK_CONN63_3          (0x44f8)
+#define AFE_SECURE_MASK_CONN63_4          (0x44fc)
+#define AFE_SECURE_MASK_CONN64            (0x4500)
+#define AFE_SECURE_MASK_CONN64_1          (0x4504)
+#define AFE_SECURE_MASK_CONN64_2          (0x4508)
+#define AFE_SECURE_MASK_CONN64_3          (0x450c)
+#define AFE_SECURE_MASK_CONN64_4          (0x4510)
+#define AFE_SECURE_MASK_CONN65            (0x4514)
+#define AFE_SECURE_MASK_CONN65_1          (0x4518)
+#define AFE_SECURE_MASK_CONN65_2          (0x451c)
+#define AFE_SECURE_MASK_CONN65_3          (0x4520)
+#define AFE_SECURE_MASK_CONN65_4          (0x4524)
+#define AFE_SECURE_MASK_CONN66            (0x4528)
+#define AFE_SECURE_MASK_CONN66_1          (0x452c)
+#define AFE_SECURE_MASK_CONN66_2          (0x4530)
+#define AFE_SECURE_MASK_CONN66_3          (0x4534)
+#define AFE_SECURE_MASK_CONN66_4          (0x4538)
+#define AFE_SECURE_MASK_CONN67            (0x453c)
+#define AFE_SECURE_MASK_CONN67_1          (0x4540)
+#define AFE_SECURE_MASK_CONN67_2          (0x4544)
+#define AFE_SECURE_MASK_CONN67_3          (0x4548)
+#define AFE_SECURE_MASK_CONN67_4          (0x454c)
+#define AFE_SECURE_MASK_CONN68            (0x4550)
+#define AFE_SECURE_MASK_CONN68_1          (0x4554)
+#define AFE_SECURE_MASK_CONN68_2          (0x4558)
+#define AFE_SECURE_MASK_CONN68_3          (0x455c)
+#define AFE_SECURE_MASK_CONN68_4          (0x4560)
+#define AFE_SECURE_MASK_CONN69            (0x4564)
+#define AFE_SECURE_MASK_CONN69_1          (0x4568)
+#define AFE_SECURE_MASK_CONN69_2          (0x456c)
+#define AFE_SECURE_MASK_CONN69_3          (0x4570)
+#define AFE_SECURE_MASK_CONN69_4          (0x4574)
+#define AFE_SECURE_MASK_CONN70            (0x4578)
+#define AFE_SECURE_MASK_CONN70_1          (0x457c)
+#define AFE_SECURE_MASK_CONN70_2          (0x4580)
+#define AFE_SECURE_MASK_CONN70_3          (0x4584)
+#define AFE_SECURE_MASK_CONN70_4          (0x4588)
+#define AFE_SECURE_MASK_CONN71            (0x458c)
+#define AFE_SECURE_MASK_CONN71_1          (0x4590)
+#define AFE_SECURE_MASK_CONN71_2          (0x4594)
+#define AFE_SECURE_MASK_CONN71_3          (0x4598)
+#define AFE_SECURE_MASK_CONN71_4          (0x459c)
+#define AFE_SECURE_MASK_CONN72            (0x45a0)
+#define AFE_SECURE_MASK_CONN72_1          (0x45a4)
+#define AFE_SECURE_MASK_CONN72_2          (0x45a8)
+#define AFE_SECURE_MASK_CONN72_3          (0x45ac)
+#define AFE_SECURE_MASK_CONN72_4          (0x45b0)
+#define AFE_SECURE_MASK_CONN73            (0x45b4)
+#define AFE_SECURE_MASK_CONN73_1          (0x45b8)
+#define AFE_SECURE_MASK_CONN73_2          (0x45bc)
+#define AFE_SECURE_MASK_CONN73_3          (0x45c0)
+#define AFE_SECURE_MASK_CONN73_4          (0x45c4)
+#define AFE_SECURE_MASK_CONN74            (0x45c8)
+#define AFE_SECURE_MASK_CONN74_1          (0x45cc)
+#define AFE_SECURE_MASK_CONN74_2          (0x45d0)
+#define AFE_SECURE_MASK_CONN74_3          (0x45d4)
+#define AFE_SECURE_MASK_CONN74_4          (0x45d8)
+#define AFE_SECURE_MASK_CONN75            (0x45dc)
+#define AFE_SECURE_MASK_CONN75_1          (0x45e0)
+#define AFE_SECURE_MASK_CONN75_2          (0x45e4)
+#define AFE_SECURE_MASK_CONN75_3          (0x45e8)
+#define AFE_SECURE_MASK_CONN75_4          (0x45ec)
+#define AFE_SECURE_MASK_CONN76            (0x45f0)
+#define AFE_SECURE_MASK_CONN76_1          (0x45f4)
+#define AFE_SECURE_MASK_CONN76_2          (0x45f8)
+#define AFE_SECURE_MASK_CONN76_3          (0x45fc)
+#define AFE_SECURE_MASK_CONN76_4          (0x4600)
+#define AFE_SECURE_MASK_CONN77            (0x4604)
+#define AFE_SECURE_MASK_CONN77_1          (0x4608)
+#define AFE_SECURE_MASK_CONN77_2          (0x460c)
+#define AFE_SECURE_MASK_CONN77_3          (0x4610)
+#define AFE_SECURE_MASK_CONN77_4          (0x4614)
+#define AFE_SECURE_MASK_CONN78            (0x4618)
+#define AFE_SECURE_MASK_CONN78_1          (0x461c)
+#define AFE_SECURE_MASK_CONN78_2          (0x4620)
+#define AFE_SECURE_MASK_CONN78_3          (0x4624)
+#define AFE_SECURE_MASK_CONN78_4          (0x4628)
+#define AFE_SECURE_MASK_CONN79            (0x462c)
+#define AFE_SECURE_MASK_CONN79_1          (0x4630)
+#define AFE_SECURE_MASK_CONN79_2          (0x4634)
+#define AFE_SECURE_MASK_CONN79_3          (0x4638)
+#define AFE_SECURE_MASK_CONN79_4          (0x463c)
+#define AFE_SECURE_MASK_CONN80            (0x4640)
+#define AFE_SECURE_MASK_CONN80_1          (0x4644)
+#define AFE_SECURE_MASK_CONN80_2          (0x4648)
+#define AFE_SECURE_MASK_CONN80_3          (0x464c)
+#define AFE_SECURE_MASK_CONN80_4          (0x4650)
+#define AFE_SECURE_MASK_CONN81            (0x4654)
+#define AFE_SECURE_MASK_CONN81_1          (0x4658)
+#define AFE_SECURE_MASK_CONN81_2          (0x465c)
+#define AFE_SECURE_MASK_CONN81_3          (0x4660)
+#define AFE_SECURE_MASK_CONN81_4          (0x4664)
+#define AFE_SECURE_MASK_CONN82            (0x4668)
+#define AFE_SECURE_MASK_CONN82_1          (0x466c)
+#define AFE_SECURE_MASK_CONN82_2          (0x4670)
+#define AFE_SECURE_MASK_CONN82_3          (0x4674)
+#define AFE_SECURE_MASK_CONN82_4          (0x4678)
+#define AFE_SECURE_MASK_CONN83            (0x467c)
+#define AFE_SECURE_MASK_CONN83_1          (0x4680)
+#define AFE_SECURE_MASK_CONN83_2          (0x4684)
+#define AFE_SECURE_MASK_CONN83_3          (0x4688)
+#define AFE_SECURE_MASK_CONN83_4          (0x468c)
+#define AFE_SECURE_MASK_CONN84            (0x4690)
+#define AFE_SECURE_MASK_CONN84_1          (0x4694)
+#define AFE_SECURE_MASK_CONN84_2          (0x4698)
+#define AFE_SECURE_MASK_CONN84_3          (0x469c)
+#define AFE_SECURE_MASK_CONN84_4          (0x46a0)
+#define AFE_SECURE_MASK_CONN85            (0x46a4)
+#define AFE_SECURE_MASK_CONN85_1          (0x46a8)
+#define AFE_SECURE_MASK_CONN85_2          (0x46ac)
+#define AFE_SECURE_MASK_CONN85_3          (0x46b0)
+#define AFE_SECURE_MASK_CONN85_4          (0x46b4)
+#define AFE_SECURE_MASK_CONN86            (0x46b8)
+#define AFE_SECURE_MASK_CONN86_1          (0x46bc)
+#define AFE_SECURE_MASK_CONN86_2          (0x46c0)
+#define AFE_SECURE_MASK_CONN86_3          (0x46c4)
+#define AFE_SECURE_MASK_CONN86_4          (0x46c8)
+#define AFE_SECURE_MASK_CONN87            (0x46cc)
+#define AFE_SECURE_MASK_CONN87_1          (0x46d0)
+#define AFE_SECURE_MASK_CONN87_2          (0x46d4)
+#define AFE_SECURE_MASK_CONN87_3          (0x46d8)
+#define AFE_SECURE_MASK_CONN87_4          (0x46dc)
+#define AFE_SECURE_MASK_CONN88            (0x46e0)
+#define AFE_SECURE_MASK_CONN88_1          (0x46e4)
+#define AFE_SECURE_MASK_CONN88_2          (0x46e8)
+#define AFE_SECURE_MASK_CONN88_3          (0x46ec)
+#define AFE_SECURE_MASK_CONN88_4          (0x46f0)
+#define AFE_SECURE_MASK_CONN89            (0x46f4)
+#define AFE_SECURE_MASK_CONN89_1          (0x46f8)
+#define AFE_SECURE_MASK_CONN89_2          (0x46fc)
+#define AFE_SECURE_MASK_CONN89_3          (0x4700)
+#define AFE_SECURE_MASK_CONN89_4          (0x4704)
+#define AFE_SECURE_MASK_CONN90            (0x4708)
+#define AFE_SECURE_MASK_CONN90_1          (0x470c)
+#define AFE_SECURE_MASK_CONN90_2          (0x4710)
+#define AFE_SECURE_MASK_CONN90_3          (0x4714)
+#define AFE_SECURE_MASK_CONN90_4          (0x4718)
+#define AFE_SECURE_MASK_CONN91            (0x471c)
+#define AFE_SECURE_MASK_CONN91_1          (0x4720)
+#define AFE_SECURE_MASK_CONN91_2          (0x4724)
+#define AFE_SECURE_MASK_CONN91_3          (0x4728)
+#define AFE_SECURE_MASK_CONN91_4          (0x472c)
+#define AFE_SECURE_MASK_CONN92            (0x4730)
+#define AFE_SECURE_MASK_CONN92_1          (0x4734)
+#define AFE_SECURE_MASK_CONN92_2          (0x4738)
+#define AFE_SECURE_MASK_CONN92_3          (0x473c)
+#define AFE_SECURE_MASK_CONN92_4          (0x4740)
+#define AFE_SECURE_MASK_CONN93            (0x4744)
+#define AFE_SECURE_MASK_CONN93_1          (0x4748)
+#define AFE_SECURE_MASK_CONN93_2          (0x474c)
+#define AFE_SECURE_MASK_CONN93_3          (0x4750)
+#define AFE_SECURE_MASK_CONN93_4          (0x4754)
+#define AFE_SECURE_MASK_CONN94            (0x4758)
+#define AFE_SECURE_MASK_CONN94_1          (0x475c)
+#define AFE_SECURE_MASK_CONN94_2          (0x4760)
+#define AFE_SECURE_MASK_CONN94_3          (0x4764)
+#define AFE_SECURE_MASK_CONN94_4          (0x4768)
+#define AFE_SECURE_MASK_CONN95            (0x476c)
+#define AFE_SECURE_MASK_CONN95_1          (0x4770)
+#define AFE_SECURE_MASK_CONN95_2          (0x4774)
+#define AFE_SECURE_MASK_CONN95_3          (0x4778)
+#define AFE_SECURE_MASK_CONN95_4          (0x477c)
+#define AFE_SECURE_MASK_CONN96            (0x4780)
+#define AFE_SECURE_MASK_CONN96_1          (0x4784)
+#define AFE_SECURE_MASK_CONN96_2          (0x4788)
+#define AFE_SECURE_MASK_CONN96_3          (0x478c)
+#define AFE_SECURE_MASK_CONN96_4          (0x4790)
+#define AFE_SECURE_MASK_CONN97            (0x4794)
+#define AFE_SECURE_MASK_CONN97_1          (0x4798)
+#define AFE_SECURE_MASK_CONN97_2          (0x479c)
+#define AFE_SECURE_MASK_CONN97_3          (0x47a0)
+#define AFE_SECURE_MASK_CONN97_4          (0x47a4)
+#define AFE_SECURE_MASK_CONN98            (0x47a8)
+#define AFE_SECURE_MASK_CONN98_1          (0x47ac)
+#define AFE_SECURE_MASK_CONN98_2          (0x47b0)
+#define AFE_SECURE_MASK_CONN98_3          (0x47b4)
+#define AFE_SECURE_MASK_CONN98_4          (0x47b8)
+#define AFE_SECURE_MASK_CONN99            (0x47bc)
+#define AFE_SECURE_MASK_CONN99_1          (0x47c0)
+#define AFE_SECURE_MASK_CONN99_2          (0x47c4)
+#define AFE_SECURE_MASK_CONN99_3          (0x47c8)
+#define AFE_SECURE_MASK_CONN99_4          (0x47cc)
+#define AFE_SECURE_MASK_CONN100           (0x47d0)
+#define AFE_SECURE_MASK_CONN100_1         (0x47d4)
+#define AFE_SECURE_MASK_CONN100_2         (0x47d8)
+#define AFE_SECURE_MASK_CONN100_3         (0x47dc)
+#define AFE_SECURE_MASK_CONN100_4         (0x47e0)
+#define AFE_SECURE_MASK_CONN101           (0x47e4)
+#define AFE_SECURE_MASK_CONN101_1         (0x47e8)
+#define AFE_SECURE_MASK_CONN101_2         (0x47ec)
+#define AFE_SECURE_MASK_CONN101_3         (0x47f0)
+#define AFE_SECURE_MASK_CONN101_4         (0x47f4)
+#define AFE_SECURE_MASK_CONN102           (0x47f8)
+#define AFE_SECURE_MASK_CONN102_1         (0x47fc)
+#define AFE_SECURE_MASK_CONN102_2         (0x4800)
+#define AFE_SECURE_MASK_CONN102_3         (0x4804)
+#define AFE_SECURE_MASK_CONN102_4         (0x4808)
+#define AFE_SECURE_MASK_CONN103           (0x480c)
+#define AFE_SECURE_MASK_CONN103_1         (0x4810)
+#define AFE_SECURE_MASK_CONN103_2         (0x4814)
+#define AFE_SECURE_MASK_CONN103_3         (0x4818)
+#define AFE_SECURE_MASK_CONN103_4         (0x481c)
+#define AFE_SECURE_MASK_CONN104           (0x4820)
+#define AFE_SECURE_MASK_CONN104_1         (0x4824)
+#define AFE_SECURE_MASK_CONN104_2         (0x4828)
+#define AFE_SECURE_MASK_CONN104_3         (0x482c)
+#define AFE_SECURE_MASK_CONN104_4         (0x4830)
+#define AFE_SECURE_MASK_CONN105           (0x4834)
+#define AFE_SECURE_MASK_CONN105_1         (0x4838)
+#define AFE_SECURE_MASK_CONN105_2         (0x483c)
+#define AFE_SECURE_MASK_CONN105_3         (0x4840)
+#define AFE_SECURE_MASK_CONN105_4         (0x4844)
+#define AFE_SECURE_MASK_CONN106           (0x4848)
+#define AFE_SECURE_MASK_CONN106_1         (0x484c)
+#define AFE_SECURE_MASK_CONN106_2         (0x4850)
+#define AFE_SECURE_MASK_CONN106_3         (0x4854)
+#define AFE_SECURE_MASK_CONN106_4         (0x4858)
+#define AFE_SECURE_MASK_CONN107           (0x485c)
+#define AFE_SECURE_MASK_CONN107_1         (0x4860)
+#define AFE_SECURE_MASK_CONN107_2         (0x4864)
+#define AFE_SECURE_MASK_CONN107_3         (0x4868)
+#define AFE_SECURE_MASK_CONN107_4         (0x486c)
+#define AFE_SECURE_MASK_CONN108           (0x4870)
+#define AFE_SECURE_MASK_CONN108_1         (0x4874)
+#define AFE_SECURE_MASK_CONN108_2         (0x4878)
+#define AFE_SECURE_MASK_CONN108_3         (0x487c)
+#define AFE_SECURE_MASK_CONN108_4         (0x4880)
+#define AFE_SECURE_MASK_CONN109           (0x4884)
+#define AFE_SECURE_MASK_CONN109_1         (0x4888)
+#define AFE_SECURE_MASK_CONN109_2         (0x488c)
+#define AFE_SECURE_MASK_CONN109_3         (0x4890)
+#define AFE_SECURE_MASK_CONN109_4         (0x4894)
+#define AFE_SECURE_MASK_CONN110           (0x4898)
+#define AFE_SECURE_MASK_CONN110_1         (0x489c)
+#define AFE_SECURE_MASK_CONN110_2         (0x48a0)
+#define AFE_SECURE_MASK_CONN110_3         (0x48a4)
+#define AFE_SECURE_MASK_CONN110_4         (0x48a8)
+#define AFE_SECURE_MASK_CONN111           (0x48ac)
+#define AFE_SECURE_MASK_CONN111_1         (0x48b0)
+#define AFE_SECURE_MASK_CONN111_2         (0x48b4)
+#define AFE_SECURE_MASK_CONN111_3         (0x48b8)
+#define AFE_SECURE_MASK_CONN111_4         (0x48bc)
+#define AFE_SECURE_MASK_CONN112           (0x48c0)
+#define AFE_SECURE_MASK_CONN112_1         (0x48c4)
+#define AFE_SECURE_MASK_CONN112_2         (0x48c8)
+#define AFE_SECURE_MASK_CONN112_3         (0x48cc)
+#define AFE_SECURE_MASK_CONN112_4         (0x48d0)
+#define AFE_SECURE_MASK_CONN113           (0x48d4)
+#define AFE_SECURE_MASK_CONN113_1         (0x48d8)
+#define AFE_SECURE_MASK_CONN113_2         (0x48dc)
+#define AFE_SECURE_MASK_CONN113_3         (0x48e0)
+#define AFE_SECURE_MASK_CONN113_4         (0x48e4)
+#define AFE_SECURE_MASK_CONN114           (0x48e8)
+#define AFE_SECURE_MASK_CONN114_1         (0x48ec)
+#define AFE_SECURE_MASK_CONN114_2         (0x48f0)
+#define AFE_SECURE_MASK_CONN114_3         (0x48f4)
+#define AFE_SECURE_MASK_CONN114_4         (0x48f8)
+#define AFE_SECURE_MASK_CONN115           (0x48fc)
+#define AFE_SECURE_MASK_CONN115_1         (0x4900)
+#define AFE_SECURE_MASK_CONN115_2         (0x4904)
+#define AFE_SECURE_MASK_CONN115_3         (0x4908)
+#define AFE_SECURE_MASK_CONN115_4         (0x490c)
+#define AFE_SECURE_MASK_CONN116           (0x4910)
+#define AFE_SECURE_MASK_CONN116_1         (0x4914)
+#define AFE_SECURE_MASK_CONN116_2         (0x4918)
+#define AFE_SECURE_MASK_CONN116_3         (0x491c)
+#define AFE_SECURE_MASK_CONN116_4         (0x4920)
+#define AFE_SECURE_MASK_CONN117           (0x4924)
+#define AFE_SECURE_MASK_CONN117_1         (0x4928)
+#define AFE_SECURE_MASK_CONN117_2         (0x492c)
+#define AFE_SECURE_MASK_CONN117_3         (0x4930)
+#define AFE_SECURE_MASK_CONN117_4         (0x4934)
+#define AFE_SECURE_MASK_CONN118           (0x4938)
+#define AFE_SECURE_MASK_CONN118_1         (0x493c)
+#define AFE_SECURE_MASK_CONN118_2         (0x4940)
+#define AFE_SECURE_MASK_CONN118_3         (0x4944)
+#define AFE_SECURE_MASK_CONN118_4         (0x4948)
+#define AFE_SECURE_MASK_CONN119           (0x494c)
+#define AFE_SECURE_MASK_CONN119_1         (0x4950)
+#define AFE_SECURE_MASK_CONN119_2         (0x4954)
+#define AFE_SECURE_MASK_CONN119_3         (0x4958)
+#define AFE_SECURE_MASK_CONN119_4         (0x495c)
+#define AFE_SECURE_MASK_CONN120           (0x4960)
+#define AFE_SECURE_MASK_CONN120_1         (0x4964)
+#define AFE_SECURE_MASK_CONN120_2         (0x4968)
+#define AFE_SECURE_MASK_CONN120_3         (0x496c)
+#define AFE_SECURE_MASK_CONN120_4         (0x4970)
+#define AFE_SECURE_MASK_CONN121           (0x4974)
+#define AFE_SECURE_MASK_CONN121_1         (0x4978)
+#define AFE_SECURE_MASK_CONN121_2         (0x497c)
+#define AFE_SECURE_MASK_CONN121_3         (0x4980)
+#define AFE_SECURE_MASK_CONN121_4         (0x4984)
+#define AFE_SECURE_MASK_CONN122           (0x4988)
+#define AFE_SECURE_MASK_CONN122_1         (0x498c)
+#define AFE_SECURE_MASK_CONN122_2         (0x4990)
+#define AFE_SECURE_MASK_CONN122_3         (0x4994)
+#define AFE_SECURE_MASK_CONN122_4         (0x4998)
+#define AFE_SECURE_MASK_CONN123           (0x499c)
+#define AFE_SECURE_MASK_CONN123_1         (0x49a0)
+#define AFE_SECURE_MASK_CONN123_2         (0x49a4)
+#define AFE_SECURE_MASK_CONN123_3         (0x49a8)
+#define AFE_SECURE_MASK_CONN123_4         (0x49ac)
+#define AFE_SECURE_MASK_CONN124           (0x49b0)
+#define AFE_SECURE_MASK_CONN124_1         (0x49b4)
+#define AFE_SECURE_MASK_CONN124_2         (0x49b8)
+#define AFE_SECURE_MASK_CONN124_3         (0x49bc)
+#define AFE_SECURE_MASK_CONN124_4         (0x49c0)
+#define AFE_SECURE_MASK_CONN125           (0x49c4)
+#define AFE_SECURE_MASK_CONN125_1         (0x49c8)
+#define AFE_SECURE_MASK_CONN125_2         (0x49cc)
+#define AFE_SECURE_MASK_CONN125_3         (0x49d0)
+#define AFE_SECURE_MASK_CONN125_4         (0x49d4)
+#define AFE_SECURE_MASK_CONN126           (0x49d8)
+#define AFE_SECURE_MASK_CONN126_1         (0x49dc)
+#define AFE_SECURE_MASK_CONN126_2         (0x49e0)
+#define AFE_SECURE_MASK_CONN126_3         (0x49e4)
+#define AFE_SECURE_MASK_CONN126_4         (0x49e8)
+#define AFE_SECURE_MASK_CONN127           (0x49ec)
+#define AFE_SECURE_MASK_CONN127_1         (0x49f0)
+#define AFE_SECURE_MASK_CONN127_2         (0x49f4)
+#define AFE_SECURE_MASK_CONN127_3         (0x49f8)
+#define AFE_SECURE_MASK_CONN127_4         (0x49fc)
+#define AFE_SECURE_MASK_CONN128           (0x4a00)
+#define AFE_SECURE_MASK_CONN128_1         (0x4a04)
+#define AFE_SECURE_MASK_CONN128_2         (0x4a08)
+#define AFE_SECURE_MASK_CONN128_3         (0x4a0c)
+#define AFE_SECURE_MASK_CONN128_4         (0x4a10)
+#define AFE_SECURE_MASK_CONN129           (0x4a14)
+#define AFE_SECURE_MASK_CONN129_1         (0x4a18)
+#define AFE_SECURE_MASK_CONN129_2         (0x4a1c)
+#define AFE_SECURE_MASK_CONN129_3         (0x4a20)
+#define AFE_SECURE_MASK_CONN129_4         (0x4a24)
+#define AFE_SECURE_MASK_CONN130           (0x4a28)
+#define AFE_SECURE_MASK_CONN130_1         (0x4a2c)
+#define AFE_SECURE_MASK_CONN130_2         (0x4a30)
+#define AFE_SECURE_MASK_CONN130_3         (0x4a34)
+#define AFE_SECURE_MASK_CONN130_4         (0x4a38)
+#define AFE_SECURE_MASK_CONN131           (0x4a3c)
+#define AFE_SECURE_MASK_CONN131_1         (0x4a40)
+#define AFE_SECURE_MASK_CONN131_2         (0x4a44)
+#define AFE_SECURE_MASK_CONN131_3         (0x4a48)
+#define AFE_SECURE_MASK_CONN131_4         (0x4a4c)
+#define AFE_SECURE_MASK_CONN132           (0x4a50)
+#define AFE_SECURE_MASK_CONN132_1         (0x4a54)
+#define AFE_SECURE_MASK_CONN132_2         (0x4a58)
+#define AFE_SECURE_MASK_CONN132_3         (0x4a5c)
+#define AFE_SECURE_MASK_CONN132_4         (0x4a60)
+#define AFE_SECURE_MASK_CONN133           (0x4a64)
+#define AFE_SECURE_MASK_CONN133_1         (0x4a68)
+#define AFE_SECURE_MASK_CONN133_2         (0x4a6c)
+#define AFE_SECURE_MASK_CONN133_3         (0x4a70)
+#define AFE_SECURE_MASK_CONN133_4         (0x4a74)
+#define AFE_SECURE_MASK_CONN134           (0x4a78)
+#define AFE_SECURE_MASK_CONN134_1         (0x4a7c)
+#define AFE_SECURE_MASK_CONN134_2         (0x4a80)
+#define AFE_SECURE_MASK_CONN134_3         (0x4a84)
+#define AFE_SECURE_MASK_CONN134_4         (0x4a88)
+#define AFE_SECURE_MASK_CONN135           (0x4a8c)
+#define AFE_SECURE_MASK_CONN135_1         (0x4a90)
+#define AFE_SECURE_MASK_CONN135_2         (0x4a94)
+#define AFE_SECURE_MASK_CONN135_3         (0x4a98)
+#define AFE_SECURE_MASK_CONN135_4         (0x4a9c)
+#define AFE_SECURE_MASK_CONN136           (0x4aa0)
+#define AFE_SECURE_MASK_CONN136_1         (0x4aa4)
+#define AFE_SECURE_MASK_CONN136_2         (0x4aa8)
+#define AFE_SECURE_MASK_CONN136_3         (0x4aac)
+#define AFE_SECURE_MASK_CONN136_4         (0x4ab0)
+#define AFE_SECURE_MASK_CONN137           (0x4ab4)
+#define AFE_SECURE_MASK_CONN137_1         (0x4ab8)
+#define AFE_SECURE_MASK_CONN137_2         (0x4abc)
+#define AFE_SECURE_MASK_CONN137_3         (0x4ac0)
+#define AFE_SECURE_MASK_CONN137_4         (0x4ac4)
+#define AFE_SECURE_MASK_CONN138           (0x4ac8)
+#define AFE_SECURE_MASK_CONN138_1         (0x4acc)
+#define AFE_SECURE_MASK_CONN138_2         (0x4ad0)
+#define AFE_SECURE_MASK_CONN138_3         (0x4ad4)
+#define AFE_SECURE_MASK_CONN138_4         (0x4ad8)
+#define AFE_SECURE_MASK_CONN139           (0x4adc)
+#define AFE_SECURE_MASK_CONN139_1         (0x4ae0)
+#define AFE_SECURE_MASK_CONN139_2         (0x4ae4)
+#define AFE_SECURE_MASK_CONN139_3         (0x4ae8)
+#define AFE_SECURE_MASK_CONN139_4         (0x4aec)
+#define AFE_SECURE_MASK_CONN_RS           (0x4af0)
+#define AFE_SECURE_MASK_CONN_RS_1         (0x4af4)
+#define AFE_SECURE_MASK_CONN_RS_2         (0x4af8)
+#define AFE_SECURE_MASK_CONN_RS_3         (0x4afc)
+#define AFE_SECURE_MASK_CONN_RS_4         (0x4b00)
+#define AFE_SECURE_MASK_CONN_16BIT        (0x4b04)
+#define AFE_SECURE_MASK_CONN_16BIT_1      (0x4b08)
+#define AFE_SECURE_MASK_CONN_16BIT_2      (0x4b0c)
+#define AFE_SECURE_MASK_CONN_16BIT_3      (0x4b10)
+#define AFE_SECURE_MASK_CONN_16BIT_4      (0x4b14)
+#define AFE_SECURE_MASK_CONN_24BIT        (0x4b18)
+#define AFE_SECURE_MASK_CONN_24BIT_1      (0x4b1c)
+#define AFE_SECURE_MASK_CONN_24BIT_2      (0x4b20)
+#define AFE_SECURE_MASK_CONN_24BIT_3      (0x4b24)
+#define AFE_SECURE_MASK_CONN_24BIT_4      (0x4b28)
+#define AFE_SECURE_MASK_CONN0_5           (0x4b2c)
+#define AFE_SECURE_MASK_CONN1_5           (0x4b30)
+#define AFE_SECURE_MASK_CONN2_5           (0x4b34)
+#define AFE_SECURE_MASK_CONN3_5           (0x4b38)
+#define AFE_SECURE_MASK_CONN4_5           (0x4b3c)
+#define AFE_SECURE_MASK_CONN5_5           (0x4b40)
+#define AFE_SECURE_MASK_CONN6_5           (0x4b44)
+#define AFE_SECURE_MASK_CONN7_5           (0x4b48)
+#define AFE_SECURE_MASK_CONN8_5           (0x4b4c)
+#define AFE_SECURE_MASK_CONN9_5           (0x4b50)
+#define AFE_SECURE_MASK_CONN10_5          (0x4b54)
+#define AFE_SECURE_MASK_CONN11_5          (0x4b58)
+#define AFE_SECURE_MASK_CONN12_5          (0x4b5c)
+#define AFE_SECURE_MASK_CONN13_5          (0x4b60)
+#define AFE_SECURE_MASK_CONN14_5          (0x4b64)
+#define AFE_SECURE_MASK_CONN15_5          (0x4b68)
+#define AFE_SECURE_MASK_CONN16_5          (0x4b6c)
+#define AFE_SECURE_MASK_CONN17_5          (0x4b70)
+#define AFE_SECURE_MASK_CONN18_5          (0x4b74)
+#define AFE_SECURE_MASK_CONN19_5          (0x4b78)
+#define AFE_SECURE_MASK_CONN20_5          (0x4b7c)
+#define AFE_SECURE_MASK_CONN21_5          (0x4b80)
+#define AFE_SECURE_MASK_CONN22_5          (0x4b84)
+#define AFE_SECURE_MASK_CONN23_5          (0x4b88)
+#define AFE_SECURE_MASK_CONN24_5          (0x4b8c)
+#define AFE_SECURE_MASK_CONN25_5          (0x4b90)
+#define AFE_SECURE_MASK_CONN26_5          (0x4b94)
+#define AFE_SECURE_MASK_CONN27_5          (0x4b98)
+#define AFE_SECURE_MASK_CONN28_5          (0x4b9c)
+#define AFE_SECURE_MASK_CONN29_5          (0x4ba0)
+#define AFE_SECURE_MASK_CONN30_5          (0x4ba4)
+#define AFE_SECURE_MASK_CONN31_5          (0x4ba8)
+#define AFE_SECURE_MASK_CONN32_5          (0x4bac)
+#define AFE_SECURE_MASK_CONN33_5          (0x4bb0)
+#define AFE_SECURE_MASK_CONN34_5          (0x4bb4)
+#define AFE_SECURE_MASK_CONN35_5          (0x4bb8)
+#define AFE_SECURE_MASK_CONN36_5          (0x4bbc)
+#define AFE_SECURE_MASK_CONN37_5          (0x4bc0)
+#define AFE_SECURE_MASK_CONN38_5          (0x4bc4)
+#define AFE_SECURE_MASK_CONN39_5          (0x4bc8)
+#define AFE_SECURE_MASK_CONN40_5          (0x4bcc)
+#define AFE_SECURE_MASK_CONN41_5          (0x4bd0)
+#define AFE_SECURE_MASK_CONN42_5          (0x4bd4)
+#define AFE_SECURE_MASK_CONN43_5          (0x4bd8)
+#define AFE_SECURE_MASK_CONN44_5          (0x4bdc)
+#define AFE_SECURE_MASK_CONN45_5          (0x4be0)
+#define AFE_SECURE_MASK_CONN46_5          (0x4be4)
+#define AFE_SECURE_MASK_CONN47_5          (0x4be8)
+#define AFE_SECURE_MASK_CONN48_5          (0x4bec)
+#define AFE_SECURE_MASK_CONN49_5          (0x4bf0)
+#define AFE_SECURE_MASK_CONN50_5          (0x4bf4)
+#define AFE_SECURE_MASK_CONN51_5          (0x4bf8)
+#define AFE_SECURE_MASK_CONN52_5          (0x4bfc)
+#define AFE_GASRC0_NEW_CON0               (0x4c40)
+#define AFE_GASRC0_NEW_CON1               (0x4c44)
+#define AFE_GASRC0_NEW_CON2               (0x4c48)
+#define AFE_GASRC0_NEW_CON3               (0x4c4c)
+#define AFE_GASRC0_NEW_CON4               (0x4c50)
+#define AFE_GASRC0_NEW_CON5               (0x4c54)
+#define AFE_GASRC0_NEW_CON6               (0x4c58)
+#define AFE_GASRC0_NEW_CON7               (0x4c5c)
+#define AFE_GASRC0_NEW_CON8               (0x4c60)
+#define AFE_GASRC0_NEW_CON9               (0x4c64)
+#define AFE_GASRC0_NEW_CON10              (0x4c68)
+#define AFE_GASRC0_NEW_CON11              (0x4c6c)
+#define AFE_GASRC0_NEW_CON12              (0x4c70)
+#define AFE_GASRC0_NEW_CON13              (0x4c74)
+#define AFE_GASRC0_NEW_CON14              (0x4c78)
+#define AFE_GASRC1_NEW_CON0               (0x4c80)
+#define AFE_GASRC1_NEW_CON1               (0x4c84)
+#define AFE_GASRC1_NEW_CON2               (0x4c88)
+#define AFE_GASRC1_NEW_CON3               (0x4c8c)
+#define AFE_GASRC1_NEW_CON4               (0x4c90)
+#define AFE_GASRC1_NEW_CON5               (0x4c94)
+#define AFE_GASRC1_NEW_CON6               (0x4c98)
+#define AFE_GASRC1_NEW_CON7               (0x4c9c)
+#define AFE_GASRC1_NEW_CON8               (0x4ca0)
+#define AFE_GASRC1_NEW_CON9               (0x4ca4)
+#define AFE_GASRC1_NEW_CON10              (0x4ca8)
+#define AFE_GASRC1_NEW_CON11              (0x4cac)
+#define AFE_GASRC1_NEW_CON12              (0x4cb0)
+#define AFE_GASRC1_NEW_CON13              (0x4cb4)
+#define AFE_GASRC1_NEW_CON14              (0x4cb8)
+#define AFE_GASRC2_NEW_CON0               (0x4cc0)
+#define AFE_GASRC2_NEW_CON1               (0x4cc4)
+#define AFE_GASRC2_NEW_CON2               (0x4cc8)
+#define AFE_GASRC2_NEW_CON3               (0x4ccc)
+#define AFE_GASRC2_NEW_CON4               (0x4cd0)
+#define AFE_GASRC2_NEW_CON5               (0x4cd4)
+#define AFE_GASRC2_NEW_CON6               (0x4cd8)
+#define AFE_GASRC2_NEW_CON7               (0x4cdc)
+#define AFE_GASRC2_NEW_CON8               (0x4ce0)
+#define AFE_GASRC2_NEW_CON9               (0x4ce4)
+#define AFE_GASRC2_NEW_CON10              (0x4ce8)
+#define AFE_GASRC2_NEW_CON11              (0x4cec)
+#define AFE_GASRC2_NEW_CON12              (0x4cf0)
+#define AFE_GASRC2_NEW_CON13              (0x4cf4)
+#define AFE_GASRC2_NEW_CON14              (0x4cf8)
+#define AFE_GASRC3_NEW_CON0               (0x4d00)
+#define AFE_GASRC3_NEW_CON1               (0x4d04)
+#define AFE_GASRC3_NEW_CON2               (0x4d08)
+#define AFE_GASRC3_NEW_CON3               (0x4d0c)
+#define AFE_GASRC3_NEW_CON4               (0x4d10)
+#define AFE_GASRC3_NEW_CON5               (0x4d14)
+#define AFE_GASRC3_NEW_CON6               (0x4d18)
+#define AFE_GASRC3_NEW_CON7               (0x4d1c)
+#define AFE_GASRC3_NEW_CON8               (0x4d20)
+#define AFE_GASRC3_NEW_CON9               (0x4d24)
+#define AFE_GASRC3_NEW_CON10              (0x4d28)
+#define AFE_GASRC3_NEW_CON11              (0x4d2c)
+#define AFE_GASRC3_NEW_CON12              (0x4d30)
+#define AFE_GASRC3_NEW_CON13              (0x4d34)
+#define AFE_GASRC3_NEW_CON14              (0x4d38)
+#define AFE_GASRC4_NEW_CON0               (0x4d40)
+#define AFE_GASRC4_NEW_CON1               (0x4d44)
+#define AFE_GASRC4_NEW_CON2               (0x4d48)
+#define AFE_GASRC4_NEW_CON3               (0x4d4c)
+#define AFE_GASRC4_NEW_CON4               (0x4d50)
+#define AFE_GASRC4_NEW_CON5               (0x4d54)
+#define AFE_GASRC4_NEW_CON6               (0x4d58)
+#define AFE_GASRC4_NEW_CON7               (0x4d5c)
+#define AFE_GASRC4_NEW_CON8               (0x4d60)
+#define AFE_GASRC4_NEW_CON9               (0x4d64)
+#define AFE_GASRC4_NEW_CON10              (0x4d68)
+#define AFE_GASRC4_NEW_CON11              (0x4d6c)
+#define AFE_GASRC4_NEW_CON12              (0x4d70)
+#define AFE_GASRC4_NEW_CON13              (0x4d74)
+#define AFE_GASRC4_NEW_CON14              (0x4d78)
+#define AFE_GASRC5_NEW_CON0               (0x4d80)
+#define AFE_GASRC5_NEW_CON1               (0x4d84)
+#define AFE_GASRC5_NEW_CON2               (0x4d88)
+#define AFE_GASRC5_NEW_CON3               (0x4d8c)
+#define AFE_GASRC5_NEW_CON4               (0x4d90)
+#define AFE_GASRC5_NEW_CON5               (0x4d94)
+#define AFE_GASRC5_NEW_CON6               (0x4d98)
+#define AFE_GASRC5_NEW_CON7               (0x4d9c)
+#define AFE_GASRC5_NEW_CON8               (0x4da0)
+#define AFE_GASRC5_NEW_CON9               (0x4da4)
+#define AFE_GASRC5_NEW_CON10              (0x4da8)
+#define AFE_GASRC5_NEW_CON11              (0x4dac)
+#define AFE_GASRC5_NEW_CON12              (0x4db0)
+#define AFE_GASRC5_NEW_CON13              (0x4db4)
+#define AFE_GASRC5_NEW_CON14              (0x4db8)
+#define AFE_GASRC6_NEW_CON0               (0x4dc0)
+#define AFE_GASRC6_NEW_CON1               (0x4dc4)
+#define AFE_GASRC6_NEW_CON2               (0x4dc8)
+#define AFE_GASRC6_NEW_CON3               (0x4dcc)
+#define AFE_GASRC6_NEW_CON4               (0x4dd0)
+#define AFE_GASRC6_NEW_CON5               (0x4dd4)
+#define AFE_GASRC6_NEW_CON6               (0x4dd8)
+#define AFE_GASRC6_NEW_CON7               (0x4ddc)
+#define AFE_GASRC6_NEW_CON8               (0x4de0)
+#define AFE_GASRC6_NEW_CON9               (0x4de4)
+#define AFE_GASRC6_NEW_CON10              (0x4de8)
+#define AFE_GASRC6_NEW_CON11              (0x4dec)
+#define AFE_GASRC6_NEW_CON12              (0x4df0)
+#define AFE_GASRC6_NEW_CON13              (0x4df4)
+#define AFE_GASRC6_NEW_CON14              (0x4df8)
+#define AFE_GASRC7_NEW_CON0               (0x4e00)
+#define AFE_GASRC7_NEW_CON1               (0x4e04)
+#define AFE_GASRC7_NEW_CON2               (0x4e08)
+#define AFE_GASRC7_NEW_CON3               (0x4e0c)
+#define AFE_GASRC7_NEW_CON4               (0x4e10)
+#define AFE_GASRC7_NEW_CON5               (0x4e14)
+#define AFE_GASRC7_NEW_CON6               (0x4e18)
+#define AFE_GASRC7_NEW_CON7               (0x4e1c)
+#define AFE_GASRC7_NEW_CON8               (0x4e20)
+#define AFE_GASRC7_NEW_CON9               (0x4e24)
+#define AFE_GASRC7_NEW_CON10              (0x4e28)
+#define AFE_GASRC7_NEW_CON11              (0x4e2c)
+#define AFE_GASRC7_NEW_CON12              (0x4e30)
+#define AFE_GASRC7_NEW_CON13              (0x4e34)
+#define AFE_GASRC7_NEW_CON14              (0x4e38)
+#define AFE_GASRC8_NEW_CON0               (0x4e40)
+#define AFE_GASRC8_NEW_CON1               (0x4e44)
+#define AFE_GASRC8_NEW_CON2               (0x4e48)
+#define AFE_GASRC8_NEW_CON3               (0x4e4c)
+#define AFE_GASRC8_NEW_CON4               (0x4e50)
+#define AFE_GASRC8_NEW_CON5               (0x4e54)
+#define AFE_GASRC8_NEW_CON6               (0x4e58)
+#define AFE_GASRC8_NEW_CON7               (0x4e5c)
+#define AFE_GASRC8_NEW_CON8               (0x4e60)
+#define AFE_GASRC8_NEW_CON9               (0x4e64)
+#define AFE_GASRC8_NEW_CON10              (0x4e68)
+#define AFE_GASRC8_NEW_CON11              (0x4e6c)
+#define AFE_GASRC8_NEW_CON12              (0x4e70)
+#define AFE_GASRC8_NEW_CON13              (0x4e74)
+#define AFE_GASRC8_NEW_CON14              (0x4e78)
+#define AFE_GASRC9_NEW_CON0               (0x4e80)
+#define AFE_GASRC9_NEW_CON1               (0x4e84)
+#define AFE_GASRC9_NEW_CON2               (0x4e88)
+#define AFE_GASRC9_NEW_CON3               (0x4e8c)
+#define AFE_GASRC9_NEW_CON4               (0x4e90)
+#define AFE_GASRC9_NEW_CON5               (0x4e94)
+#define AFE_GASRC9_NEW_CON6               (0x4e98)
+#define AFE_GASRC9_NEW_CON7               (0x4e9c)
+#define AFE_GASRC9_NEW_CON8               (0x4ea0)
+#define AFE_GASRC9_NEW_CON9               (0x4ea4)
+#define AFE_GASRC9_NEW_CON10              (0x4ea8)
+#define AFE_GASRC9_NEW_CON11              (0x4eac)
+#define AFE_GASRC9_NEW_CON12              (0x4eb0)
+#define AFE_GASRC9_NEW_CON13              (0x4eb4)
+#define AFE_GASRC9_NEW_CON14              (0x4eb8)
+#define AFE_GASRC10_NEW_CON0              (0x4ec0)
+#define AFE_GASRC10_NEW_CON1              (0x4ec4)
+#define AFE_GASRC10_NEW_CON2              (0x4ec8)
+#define AFE_GASRC10_NEW_CON3              (0x4ecc)
+#define AFE_GASRC10_NEW_CON4              (0x4ed0)
+#define AFE_GASRC10_NEW_CON5              (0x4ed4)
+#define AFE_GASRC10_NEW_CON6              (0x4ed8)
+#define AFE_GASRC10_NEW_CON7              (0x4edc)
+#define AFE_GASRC10_NEW_CON8              (0x4ee0)
+#define AFE_GASRC10_NEW_CON9              (0x4ee4)
+#define AFE_GASRC10_NEW_CON10             (0x4ee8)
+#define AFE_GASRC10_NEW_CON11             (0x4eec)
+#define AFE_GASRC10_NEW_CON12             (0x4ef0)
+#define AFE_GASRC10_NEW_CON13             (0x4ef4)
+#define AFE_GASRC10_NEW_CON14             (0x4ef8)
+#define AFE_GASRC11_NEW_CON0              (0x4f00)
+#define AFE_GASRC11_NEW_CON1              (0x4f04)
+#define AFE_GASRC11_NEW_CON2              (0x4f08)
+#define AFE_GASRC11_NEW_CON3              (0x4f0c)
+#define AFE_GASRC11_NEW_CON4              (0x4f10)
+#define AFE_GASRC11_NEW_CON5              (0x4f14)
+#define AFE_GASRC11_NEW_CON6              (0x4f18)
+#define AFE_GASRC11_NEW_CON7              (0x4f1c)
+#define AFE_GASRC11_NEW_CON8              (0x4f20)
+#define AFE_GASRC11_NEW_CON9              (0x4f24)
+#define AFE_GASRC11_NEW_CON10             (0x4f28)
+#define AFE_GASRC11_NEW_CON11             (0x4f2c)
+#define AFE_GASRC11_NEW_CON12             (0x4f30)
+#define AFE_GASRC11_NEW_CON13             (0x4f34)
+#define AFE_GASRC11_NEW_CON14             (0x4f38)
+
+#define AFE_IEC_BURST_INFO_MON            (0x64b0)
+#define AFE_SPDIFOUT_IP_VERSION           (0x64b4)
+#define AFE_SPDIF_OUT_CFG0                (0x64b8)
+#define AFE_SPDIF_OUT_CFG1                (0x64bc)
+#define AFE_SPDIF_OUT_CHSTS1              (0x64c0)
+#define AFE_SPDIF_OUT_CHSTS2              (0x64c4)
+#define AFE_SPDIF_OUT_CHSTS3              (0x64c8)
+#define AFE_SPDIF_OUT_CHSTS4              (0x64cc)
+#define AFE_SPDIF_OUT_CHSTS5              (0x64d0)
+#define AFE_SPDIF_OUT_CHSTS6              (0x64d4)
+#define AFE_SPDIF_OUT_USERCODE1           (0x64d8)
+#define AFE_SPDIF_OUT_USERCODE2           (0x64dc)
+#define AFE_SPDIF_OUT_USERCODE3           (0x64e0)
+#define AFE_SPDIF_OUT_USERCODE4           (0x64e4)
+#define AFE_SPDIF_OUT_USERCODE5           (0x64e8)
+#define AFE_SPDIF_OUT_USERCODE6           (0x64ec)
+#define AFE_SPDIF_OUT_BURST_PRE0          (0x64f0)
+#define AFE_SPDIF_OUT_BURST_PRE1          (0x64f4)
+#define AFE_SPDIF_OUT_MON0                (0x64f8)
+#define AFE_SPDIF_OUT_MON1                (0x64fc)
+#define AFE_SPDIF_OUT_MON2                (0x6500)
+#define AFE_SPDIF_OUT_MON3                (0x6504)
+#define AFE_SPDIF_OUT_MON4                (0x6508)
+#define AFE_SPDIF_OUT_MON5                (0x650c)
+#define AFE_CONN0_6                       (0x7000)
+#define AFE_CONN1_6                       (0x7004)
+#define AFE_CONN2_6                       (0x7008)
+#define AFE_CONN3_6                       (0x700c)
+#define AFE_CONN4_6                       (0x7010)
+#define AFE_CONN5_6                       (0x7014)
+#define AFE_CONN6_6                       (0x7018)
+#define AFE_CONN7_6                       (0x701c)
+#define AFE_CONN8_6                       (0x7020)
+#define AFE_CONN9_6                       (0x7024)
+#define AFE_CONN10_6                      (0x7028)
+#define AFE_CONN11_6                      (0x702c)
+#define AFE_CONN12_6                      (0x7030)
+#define AFE_CONN13_6                      (0x7034)
+#define AFE_CONN14_6                      (0x7038)
+#define AFE_CONN15_6                      (0x703c)
+#define AFE_CONN16_6                      (0x7040)
+#define AFE_CONN17_6                      (0x7044)
+#define AFE_CONN18_6                      (0x7048)
+#define AFE_CONN19_6                      (0x704c)
+#define AFE_CONN20_6                      (0x7050)
+#define AFE_CONN21_6                      (0x7054)
+#define AFE_CONN22_6                      (0x7058)
+#define AFE_CONN23_6                      (0x705c)
+#define AFE_CONN24_6                      (0x7060)
+#define AFE_CONN25_6                      (0x7064)
+#define AFE_CONN26_6                      (0x7068)
+#define AFE_CONN27_6                      (0x706c)
+#define AFE_CONN28_6                      (0x7070)
+#define AFE_CONN29_6                      (0x7074)
+#define AFE_CONN30_6                      (0x7078)
+#define AFE_CONN31_6                      (0x707c)
+#define AFE_CONN32_6                      (0x7080)
+#define AFE_CONN33_6                      (0x7084)
+#define AFE_CONN34_6                      (0x7088)
+#define AFE_CONN35_6                      (0x708c)
+#define AFE_CONN36_6                      (0x7090)
+#define AFE_CONN37_6                      (0x7094)
+#define AFE_CONN38_6                      (0x7098)
+#define AFE_CONN39_6                      (0x709c)
+#define AFE_CONN40_6                      (0x70a0)
+#define AFE_CONN41_6                      (0x70a4)
+#define AFE_CONN42_6                      (0x70a8)
+#define AFE_CONN43_6                      (0x70ac)
+#define AFE_CONN44_6                      (0x70b0)
+#define AFE_CONN45_6                      (0x70b4)
+#define AFE_CONN46_6                      (0x70b8)
+#define AFE_CONN47_6                      (0x70bc)
+#define AFE_CONN48_6                      (0x70c0)
+#define AFE_CONN49_6                      (0x70c4)
+#define AFE_CONN50_6                      (0x70c8)
+#define AFE_CONN51_6                      (0x70cc)
+#define AFE_CONN52_6                      (0x70d0)
+#define AFE_CONN53_6                      (0x70d4)
+#define AFE_CONN54_6                      (0x70d8)
+#define AFE_CONN55_6                      (0x70dc)
+#define AFE_CONN56_6                      (0x70e0)
+#define AFE_CONN57_6                      (0x70e4)
+#define AFE_CONN58_6                      (0x70e8)
+#define AFE_CONN59_6                      (0x70ec)
+#define AFE_CONN60_6                      (0x70f0)
+#define AFE_CONN61_6                      (0x70f4)
+#define AFE_CONN62_6                      (0x70f8)
+#define AFE_CONN63_6                      (0x70fc)
+#define AFE_CONN64_6                      (0x7100)
+#define AFE_CONN65_6                      (0x7104)
+#define AFE_CONN66_6                      (0x7108)
+#define AFE_CONN67_6                      (0x710c)
+#define AFE_CONN68_6                      (0x7110)
+#define AFE_CONN69_6                      (0x7114)
+#define AFE_CONN70_6                      (0x7118)
+#define AFE_CONN71_6                      (0x711c)
+#define AFE_CONN72_6                      (0x7120)
+#define AFE_CONN73_6                      (0x7124)
+#define AFE_CONN74_6                      (0x7128)
+#define AFE_CONN75_6                      (0x712c)
+#define AFE_CONN76_6                      (0x7130)
+#define AFE_CONN77_6                      (0x7134)
+#define AFE_CONN78_6                      (0x7138)
+#define AFE_CONN79_6                      (0x713c)
+#define AFE_CONN80_6                      (0x7140)
+#define AFE_CONN81_6                      (0x7144)
+#define AFE_CONN82_6                      (0x7148)
+#define AFE_CONN83_6                      (0x714c)
+#define AFE_CONN84_6                      (0x7150)
+#define AFE_CONN85_6                      (0x7154)
+#define AFE_CONN86_6                      (0x7158)
+#define AFE_CONN87_6                      (0x715c)
+#define AFE_CONN88_6                      (0x7160)
+#define AFE_CONN89_6                      (0x7164)
+#define AFE_CONN90_6                      (0x7168)
+#define AFE_CONN91_6                      (0x716c)
+#define AFE_CONN92_6                      (0x7170)
+#define AFE_CONN93_6                      (0x7174)
+#define AFE_CONN94_6                      (0x7178)
+#define AFE_CONN95_6                      (0x717c)
+#define AFE_CONN96_6                      (0x7180)
+#define AFE_CONN97_6                      (0x7184)
+#define AFE_CONN98_6                      (0x7188)
+#define AFE_CONN99_6                      (0x718c)
+#define AFE_CONN100_6                     (0x7190)
+#define AFE_CONN101_6                     (0x7194)
+#define AFE_CONN102_6                     (0x7198)
+#define AFE_CONN103_6                     (0x719c)
+#define AFE_CONN104_6                     (0x71a0)
+#define AFE_CONN105_6                     (0x71a4)
+#define AFE_CONN106_6                     (0x71a8)
+#define AFE_CONN107_6                     (0x71ac)
+#define AFE_CONN108_6                     (0x71b0)
+#define AFE_CONN109_6                     (0x71b4)
+#define AFE_CONN110_6                     (0x71b8)
+#define AFE_CONN111_6                     (0x71bc)
+#define AFE_CONN112_6                     (0x71c0)
+#define AFE_CONN113_6                     (0x71c4)
+#define AFE_CONN114_6                     (0x71c8)
+#define AFE_CONN115_6                     (0x71cc)
+#define AFE_CONN116_6                     (0x71d0)
+#define AFE_CONN117_6                     (0x71d4)
+#define AFE_CONN118_6                     (0x71d8)
+#define AFE_CONN119_6                     (0x71dc)
+#define AFE_CONN120_6                     (0x71e0)
+#define AFE_CONN121_6                     (0x71e4)
+#define AFE_CONN122_6                     (0x71e8)
+#define AFE_CONN123_6                     (0x71ec)
+#define AFE_CONN124_6                     (0x71f0)
+#define AFE_CONN125_6                     (0x71f4)
+#define AFE_CONN126_6                     (0x71f8)
+#define AFE_CONN127_6                     (0x71fc)
+#define AFE_CONN128_6                     (0x7200)
+#define AFE_CONN129_6                     (0x7204)
+#define AFE_CONN130_6                     (0x7208)
+#define AFE_CONN131_6                     (0x720c)
+#define AFE_CONN132_6                     (0x7210)
+#define AFE_CONN133_6                     (0x7214)
+#define AFE_CONN134_6                     (0x7218)
+#define AFE_CONN135_6                     (0x721c)
+#define AFE_CONN136_6                     (0x7220)
+#define AFE_CONN137_6                     (0x7224)
+#define AFE_CONN138_6                     (0x7228)
+#define AFE_CONN139_6                     (0x722c)
+#define AFE_CONN176_6                     (0x72c0)
+#define AFE_CONN177_6                     (0x72c4)
+#define AFE_CONN182_6                     (0x72d8)
+#define AFE_CONN183_6                     (0x72dc)
+
+#define AFE_MAX_REGISTER                  (AFE_CONN183_6)
+
+/* PWR1_ASM_CON1 */
+#define PWR1_ASM_CON1_GASRC0_CALI_CK_SEL_MASK   BIT(2)
+#define PWR1_ASM_CON1_GASRC1_CALI_CK_SEL_MASK   BIT(5)
+#define PWR1_ASM_CON1_GASRC2_CALI_CK_SEL_MASK   BIT(20)
+#define PWR1_ASM_CON1_GASRC3_CALI_CK_SEL_MASK   BIT(23)
+
+/* PWR1_ASM_CON2 */
+#define PWR1_ASM_CON2_GASRC4_CALI_CK_SEL_MASK   BIT(2)
+#define PWR1_ASM_CON2_GASRC5_CALI_CK_SEL_MASK   BIT(7)
+#define PWR1_ASM_CON2_GASRC6_CALI_CK_SEL_MASK   BIT(12)
+#define PWR1_ASM_CON2_GASRC7_CALI_CK_SEL_MASK   BIT(17)
+#define PWR1_ASM_CON2_GASRC8_CALI_CK_SEL_MASK   BIT(22)
+#define PWR1_ASM_CON2_GASRC9_CALI_CK_SEL_MASK   BIT(27)
+
+/* PWR1_ASM_CON3 */
+#define PWR1_ASM_CON3_GASRC10_CALI_CK_SEL_MASK   BIT(2)
+#define PWR1_ASM_CON3_GASRC11_CALI_CK_SEL_MASK   BIT(7)
+
+/* AUDIO_TOP_CON0 */
+#define AUDIO_TOP_CON0_PDN_AFE            BIT(2)
+#define AUDIO_TOP_CON0_PDN_APLL           BIT(23)
+#define AUDIO_TOP_CON0_PDN_APLL_TUNER     BIT(19)
+#define AUDIO_TOP_CON0_PDN_APLL2          BIT(24)
+#define AUDIO_TOP_CON0_PDN_APLL2_TUNER    BIT(20)
+#define AUDIO_TOP_CON0_PDN_DAC            BIT(25)
+#define AUDIO_TOP_CON0_PDN_DAC_HIRES      BIT(31)
+#define AUDIO_TOP_CON0_PDN_DAC_PREDIS     BIT(26)
+#define AUDIO_TOP_CON0_PDN_SPDIFIN_TUNER  BIT(10)
+#define AUDIO_TOP_CON0_PDN_ADC            BIT(28)
+#define AUDIO_TOP_CON0_PDN_SPDF           BIT(21)
+#define AUDIO_TOP_CON0_PDN_TML            BIT(27)
+#define AUDIO_TOP_CON0_PDN_UL_TML         BIT(18)
+
+/* AUDIO_TOP_CON1 */
+#define AUDIO_TOP_CON1_PDN_ADC_HIRES      BIT(17)
+#define AUDIO_TOP_CON1_PDN_ADDA6_ADC      BIT(18)
+#define AUDIO_TOP_CON1_PDN_ADDA6_HIRES    BIT(19)
+#define AUDIO_TOP_CON1_PDN_UL_TML_HIRES   BIT(16)
+#define AUDIO_TOP_CON1_PDN_DMIC_TML       BIT(14)
+#define AUDIO_TOP_CON1_PDN_A1SYS_HOPING   BIT(2)
+#define AUDIO_TOP_CON1_PDN_DMIC0          BIT(10)
+#define AUDIO_TOP_CON1_PDN_DMIC1          BIT(11)
+#define AUDIO_TOP_CON1_PDN_DMIC2          BIT(12)
+#define AUDIO_TOP_CON1_PDN_DMIC3          BIT(13)
+
+/* AUDIO_TOP_CON3 */
+#define AUDIO_TOP_CON3_PDN_EARC_TUNER     BIT(7)
+#define AUDIO_TOP_CON3_PDN_LINEIN_TUNER   BIT(5)
+
+/* AUDIO_TOP_CON4 */
+#define AUDIO_TOP_CON4_PDN_I2S_IN          BIT(0)
+#define AUDIO_TOP_CON4_PDN_TDM_IN          BIT(1)
+#define AUDIO_TOP_CON4_PDN_I2S_OUT         BIT(6)
+#define AUDIO_TOP_CON4_PDN_TDM_OUT         BIT(7)
+#define AUDIO_TOP_CON4_PDN_HDMI_OUT        BIT(8)
+#define AUDIO_TOP_CON4_PDN_ASRC11          BIT(16)
+#define AUDIO_TOP_CON4_PDN_ASRC12          BIT(17)
+#define AUDIO_TOP_CON4_PDN_A1SYS           BIT(21)
+#define AUDIO_TOP_CON4_PDN_A2SYS           BIT(22)
+#define AUDIO_TOP_CON4_PDN_A3SYS           BIT(30)
+#define AUDIO_TOP_CON4_PDN_A4SYS           BIT(31)
+#define AUDIO_TOP_CON4_PDN_PCMIF           BIT(24)
+#define AUDIO_TOP_CON4_PDN_INTDIR          BIT(20)
+#define AUDIO_TOP_CON4_PDN_MULTI_IN        BIT(19)
+
+/* AUDIO_TOP_CON6 */
+#define AUDIO_TOP_CON6_PDN_GASRC11         BIT(11)
+#define AUDIO_TOP_CON6_PDN_GASRC10         BIT(10)
+#define AUDIO_TOP_CON6_PDN_GASRC9          BIT(9)
+#define AUDIO_TOP_CON6_PDN_GASRC8          BIT(8)
+#define AUDIO_TOP_CON6_PDN_GASRC7          BIT(7)
+#define AUDIO_TOP_CON6_PDN_GASRC6          BIT(6)
+#define AUDIO_TOP_CON6_PDN_GASRC5          BIT(5)
+#define AUDIO_TOP_CON6_PDN_GASRC4          BIT(4)
+#define AUDIO_TOP_CON6_PDN_GASRC3          BIT(3)
+#define AUDIO_TOP_CON6_PDN_GASRC2          BIT(2)
+#define AUDIO_TOP_CON6_PDN_GASRC1          BIT(1)
+#define AUDIO_TOP_CON6_PDN_GASRC0          BIT(0)
+
+/* AFE_GAINx_CON0 */
+#define AFE_GAIN_CON0_SAMPLE_PER_STEP_MASK  GENMASK(15, 8)
+#define AFE_GAIN_CON0_GAIN_MODE_MASK        GENMASK(7, 3)
+#define AFE_GAIN_CON0_GAIN_ON_MASK          BIT(0)
+
+/* AFE_GAINx_CON1 */
+#define AFE_GAIN_CON1_TARGET_MASK           GENMASK(19, 0)
+
+/* AFE_GAINx_CON2 */
+#define AFE_GAIN_CON2_DOWN_STEP_MASK        GENMASK(19, 0)
+
+/* AFE_GAINx_CON3 */
+#define AFE_GAIN_CON3_UP_STEP_MASK          GENMASK(19, 0)
+
+/* AFE_GAINx_CUR */
+#define AFE_GAIN_CUR_GAIN_MASK              GENMASK(19, 0)
+
+/* ASYS_TOP_CON */
+#define ASYS_TOP_CON_A1SYS_TIMING_ON       BIT(0)
+#define ASYS_TOP_CON_A2SYS_TIMING_ON       BIT(1)
+#define ASYS_TOP_CON_A3SYS_TIMING_ON       BIT(4)
+#define ASYS_TOP_CON_A4SYS_TIMING_ON       BIT(5)
+#define ASYS_TOP_CON_26M_TIMING_ON         BIT(2)
+
+/* PWR2_TOP_CON0 */
+#define PWR2_TOP_CON_DMIC8_SRC_SEL_MASK     GENMASK(31, 29)
+#define PWR2_TOP_CON_DMIC7_SRC_SEL_MASK     GENMASK(28, 26)
+#define PWR2_TOP_CON_DMIC6_SRC_SEL_MASK     GENMASK(25, 23)
+#define PWR2_TOP_CON_DMIC5_SRC_SEL_MASK     GENMASK(22, 20)
+#define PWR2_TOP_CON_DMIC4_SRC_SEL_MASK     GENMASK(19, 17)
+#define PWR2_TOP_CON_DMIC3_SRC_SEL_MASK     GENMASK(16, 14)
+#define PWR2_TOP_CON_DMIC2_SRC_SEL_MASK     GENMASK(13, 11)
+#define PWR2_TOP_CON_DMIC1_SRC_SEL_MASK     GENMASK(10, 8)
+
+/* PWR2_TOP_CON1 */
+#define PWR2_TOP_CON1_DMIC_CKDIV_ON        BIT(1)
+
+/* PCM_INTF_CON1 */
+#define PCM_INTF_CON1_SYNC_OUT_INV     BIT(23)
+#define PCM_INTF_CON1_BCLK_OUT_INV     BIT(22)
+#define PCM_INTF_CON1_CLK_OUT_INV_MASK GENMASK(23, 22)
+#define PCM_INTF_CON1_SYNC_IN_INV      BIT(21)
+#define PCM_INTF_CON1_BCLK_IN_INV      BIT(20)
+#define PCM_INTF_CON1_CLK_IN_INV_MASK  GENMASK(21, 20)
+#define PCM_INTF_CON1_PCM_24BIT        BIT(16)
+#define PCM_INTF_CON1_PCM_16BIT        (0 << 16)
+#define PCM_INTF_CON1_PCM_BIT_MASK     BIT(16)
+#define PCM_INTF_CON1_PCM_WLEN_32BCK   (0 << 14)
+#define PCM_INTF_CON1_PCM_WLEN_64BCK   BIT(14)
+#define PCM_INTF_CON1_PCM_WLEN_MASK    BIT(14)
+#define PCM_INTF_CON1_SYNC_LENGTH_MASK GENMASK(13, 9)
+#define PCM_INTF_CON1_PCM_SLAVE        BIT(5)
+#define PCM_INTF_CON1_PCM_MASTER       (0 << 5)
+#define PCM_INTF_CON1_PCM_M_S_MASK     BIT(5)
+#define PCM_INTF_CON1_PCM_MODE_MASK    GENMASK(4, 3)
+#define PCM_INTF_CON1_PCM_FMT_MASK     GENMASK(2, 1)
+#define PCM_INTF_CON1_PCM_EN           BIT(0)
+
+/* PCM_INTF_CON2 */
+#define PCM_INTF_CON2_CLK_DOMAIN_SEL_MASK GENMASK(24, 23)
+#define PCM_INTF_CON2_SYNC_FREQ_MODE_MASK GENMASK(16, 12)
+#define PCM_INTF_CON2_PCM_TX2RX_LPBK      BIT(8)
+
+/* AFE_MPHONE_MULTIx_CON0 */
+#define AFE_MPHONE_MULTI_CON0_16BIT_SWAP       BIT(3)
+#define AFE_MPHONE_MULTI_CON0_16BIT_SWAP_MASK  BIT(3)
+#define AFE_MPHONE_MULTI_CON0_24BIT_DATA       (0x1 << 1)
+#define AFE_MPHONE_MULTI_CON0_16BIT_DATA       (0x0 << 1)
+#define AFE_MPHONE_MULIT_CON0_24BIT_DATA_MASK  BIT(1)
+#define AFE_MPHONE_MULTI_CON0_EN               BIT(0)
+
+/* AFE_MPHONE_MULTIx_CON1 */
+#define AFE_MPHONE_MULTI_CON1_SYNC_ON                BIT(24)
+#define AFE_MPHONE_MULTI_CON1_24BIT_SWAP_BYPASS      BIT(22)
+#define AFE_MPHONE_MULTI_CON1_NON_COMPACT_MODE       (0x1 << 19)
+#define AFE_MPHONE_MULTI_CON1_COMPACT_MODE           (0x0 << 19)
+#define AFE_MPHONE_MULTI_CON1_NON_COMPACT_MODE_MASK  BIT(19)
+#define AFE_MPHONE_MULTI_CON1_HBR_MODE               BIT(18)
+#define AFE_MPHONE_MULTI_CON1_LRCK_32_CYCLE          (0x2 << 16)
+#define AFE_MPHONE_MULTI_CON1_LRCK_24_CYCLE          (0x1 << 16)
+#define AFE_MPHONE_MULTI_CON1_LRCK_16_CYCLE          (0x0 << 16)
+#define AFE_MPHONE_MULTI_CON1_LRCK_CYCLE_SEL_MASK    GENMASK(17, 16)
+#define AFE_MPHONE_MULTI_CON1_LRCK_INV               BIT(15)
+#define AFE_MPHONE_MULTI_CON1_DELAY_DATA             BIT(14)
+#define AFE_MPHONE_MULTI_CON1_LEFT_ALIGN             BIT(13)
+#define AFE_MPHONE_MULTI_CON1_BIT_NUM_MASK           GENMASK(12, 8)
+#define AFE_MPHONE_MULTI_CON1_BCK_INV                BIT(6)
+#define AFE_MPHONE_MULTI_CON1_CH_NUM_MASK            GENMASK(1, 0)
+
+/* AFE_MPHONE_MULTIx_CON2 */
+#define AFE_MPHONE_MULTI_CON2_SEL_SPDIFIN        BIT(19)
+/* AFE_AUD_PAD_TOP */
+#define RG_RX_PROTOCOL2			BIT(3)
+#define RG_RX_FIFO_ON			BIT(0)
+
+/* AFE_ADDA_MTKAIF_CFG0 */
+#define MTKAIF_RXIF_CLKINV_ADC		BIT(31)
+#define MTKAIF_RXIF_PROTOCOL2		BIT(16)
+#define MTKAIF_TXIF_PROTOCOL2		BIT(4)
+#define MTKAIF_TXIF_8TO5		BIT(2)
+#define MTKAIF_RXIF_8TO5		BIT(1)
+#define MTKAIF_IF_LOOPBACK1		BIT(0)
+
+/* AFE_ADDA_MTKAIF_RX_CFG2 */
+#define MTKAIF_RXIF_DELAY_CYCLE_MASK	GENMASK(15, 12)
+#define MTKAIF_RXIF_DELAY_DATA		BIT(8)
+
+/* AFE_ADDA_MTKAIF_SYNCWORD_CFG */
+#define ADDA6_MTKAIF_RX_SYNC_WORD2_DISABLE	BIT(23)
+
+/* AFE_DMICx_UL_SRC_CON0 */
+#define AFE_DMIC_UL_SRC_CON0_UL_PHASE_SEL_CH1(x)	(((x) & 0x7) << 27)
+#define AFE_DMIC_UL_SRC_CON0_UL_PHASE_SEL_CH2(x)	(((x) & 0x7) << 24)
+#define AFE_DMIC_UL_SRC_CON0_UL_PHASE_SEL_MASK		GENMASK(29, 24)
+#define AFE_DMIC_UL_SRC_CON0_UL_TWO_WIRE_MODE_CTL	BIT(23)
+#define AFE_DMIC_UL_SRC_CON0_UL_MODE_3P25M_CH2_CTL	BIT(22)
+#define AFE_DMIC_UL_SRC_CON0_UL_MODE_3P25M_CH1_CTL	BIT(21)
+
+#define AFE_DMIC_UL_VOICE_MODE_MASK			GENMASK(19, 17)
+#define AFE_DMIC_UL_CON0_VOCIE_MODE_8K			AFE_DMIC_UL_VOICE_MODE(0)
+#define AFE_DMIC_UL_CON0_VOCIE_MODE_16K			AFE_DMIC_UL_VOICE_MODE(1)
+#define AFE_DMIC_UL_CON0_VOCIE_MODE_32K			AFE_DMIC_UL_VOICE_MODE(2)
+#define AFE_DMIC_UL_CON0_VOCIE_MODE_48K			AFE_DMIC_UL_VOICE_MODE(3)
+#define AFE_DMIC_UL_CON0_VOCIE_MODE_96K			AFE_DMIC_UL_VOICE_MODE(4)
+#define AFE_DMIC_UL_SRC_CON0_UL_IIR_MODE_CTL_MASK	GENMASK(9, 7)
+#define AFE_DMIC_UL_SRC_CON0_UL_IIR_ON_TMP_CTL		BIT(10)
+#define AFE_DMIC_UL_SRC_CON0_UL_SDM_3_LEVEL_CTL		BIT(1)
+#define AFE_DMIC_UL_SRC_CON0_UL_SRC_ON_TMP_CTL		BIT(0)
+
+/* DMIC_BYPASS_HW_GAIN */
+#define DMIC_BYPASS_HW_GAIN4_ONE_HEART		BIT(10)
+#define DMIC_BYPASS_HW_GAIN3_ONE_HEART		BIT(9)
+#define DMIC_BYPASS_HW_GAIN2_ONE_HEART		BIT(8)
+#define DMIC_BYPASS_HW_GAIN_DMIC4_BYPASS	BIT(4)
+#define DMIC_BYPASS_HW_GAIN_DMIC3_BYPASS	BIT(3)
+#define DMIC_BYPASS_HW_GAIN_DMIC2_BYPASS	BIT(2)
+#define DMIC_BYPASS_HW_GAIN_DMIC1_BYPASS	BIT(1)
+
+/* DMIC_GAINx_CON0 */
+#define DMIC_GAIN_CON0_GAIN_ON			BIT(0)
+#define DMIC_GAIN_CON0_SAMPLE_PER_STEP_MASK	GENMASK(15, 8)
+
+/* DMIC_GAINx_CON1 */
+#define DMIC_GAIN_CON1_TARGET_MASK	GENMASK(27, 0)
+
+/* DMIC_GAINx_CON2 */
+#define DMIC_GAIN_CON2_DOWN_STEP	GENMASK(19, 0)
+
+/* DMIC_GAINx_CON3 */
+#define DMIC_GAIN_CON3_UP_STEP		GENMASK(19, 0)
+
+/* DMIC_GAINx_CUR */
+#define DMIC_GAIN_CUR_GAIN_MASK		GENMASK(27, 0)
+
+/* ETDM_INx_AFIFO_CON */
+#define ETDM_IN_USE_AFIFO		BIT(8)
+#define ETDM_IN_AFIFO_CLOCK_MASK	GENMASK(7, 5)
+#define ETDM_IN_AFIFO_MODE_MASK		GENMASK(4, 0)
+
+/* ETDM_COWORK_CON0 */
+#define ETDM_OUT1_SLAVE_SEL_MASK	GENMASK(23, 20)
+#define ETDM_OUT1_SLAVE_SEL_SHIFT	20
+#define ETDM_OUT1_SYNC_SEL_MASK		GENMASK(19, 16)
+#define ETDM_OUT1_SYNC_SEL_SHIFT	16
+
+/* ETDM_COWORK_CON1 */
+#define ETDM_IN1_SDATA_SEL_MASK		GENMASK(23, 20)
+#define ETDM_IN1_SDATA_SEL_SHIFT	20
+#define ETDM_IN1_SDATA0_SEL_MASK	GENMASK(19, 16)
+#define ETDM_IN1_SDATA0_SEL_SHIFT	16
+#define ETDM_IN1_SYNC_SEL_MASK		GENMASK(15, 12)
+#define ETDM_IN1_SYNC_SEL_SHIFT		12
+#define ETDM_IN1_SLAVE_SEL_MASK		GENMASK(11, 8)
+#define ETDM_IN1_SLAVE_SEL_SHIFT	8
+
+/* ETDM_COWORK_CON2 */
+#define ETDM_IN2_SYNC_SEL_MASK		GENMASK(31, 28)
+#define ETDM_IN2_SYNC_SEL_SHIFT		28
+#define ETDM_IN2_SLAVE_SEL_MASK		GENMASK(27, 24)
+#define ETDM_IN2_SLAVE_SEL_SHIFT	24
+#define ETDM_OUT3_SLAVE_SEL_MASK	GENMASK(23, 20)
+#define ETDM_OUT3_SLAVE_SEL_SHIFT	20
+#define ETDM_OUT3_SYNC_SEL_MASK		GENMASK(19, 16)
+#define ETDM_OUT3_SYNC_SEL_SHIFT	16
+#define ETDM_OUT2_SLAVE_SEL_MASK	GENMASK(11, 8)
+#define ETDM_OUT2_SLAVE_SEL_SHIFT	8
+#define ETDM_OUT2_SYNC_SEL_MASK		GENMASK(7, 4)
+#define ETDM_OUT2_SYNC_SEL_SHIFT	4
+
+/* ETDM_COWORK_CON3 */
+#define ETDM_IN2_SDATA_SEL_MASK		GENMASK(7, 4)
+#define ETDM_IN2_SDATA_SEL_SHIFT	4
+#define ETDM_IN2_SDATA0_SEL_MASK	GENMASK(3, 0)
+#define ETDM_IN2_SDATA0_SEL_SHIFT	0
+
+/* ETDM_x_CONx */
+#define ETDM_CON0_CH_NUM_MASK		GENMASK(27, 23)
+#define ETDM_CON0_WORD_LEN_MASK		GENMASK(20, 16)
+#define ETDM_CON0_BIT_LEN_MASK		GENMASK(15, 11)
+#define ETDM_CON0_FORMAT_MASK		GENMASK(8, 6)
+#define ETDM_CON0_SLAVE_MODE		BIT(5)
+#define ETDM_CON0_SYNC_MODE		BIT(1)
+#define ETDM_CON0_EN			BIT(0)
+
+#define ETDM_OUT_CON0_RELATCH_DOMAIN_MASK	GENMASK(29, 28)
+
+#define ETDM_CON1_MCLK_OUTPUT			BIT(16)
+
+#define ETDM_IN_CON1_LRCK_AUTO_MODE		BIT(31)
+#define ETDM_IN_CON1_LRCK_WIDTH_MASK		GENMASK(29, 20)
+
+#define ETDM_OUT_CON1_LRCK_AUTO_MODE		BIT(29)
+#define ETDM_OUT_CON1_LRCK_WIDTH_MASK		GENMASK(28, 19)
+
+#define ETDM_IN_CON2_MULTI_IP_2CH_MODE		BIT(31)
+#define ETDM_IN_CON2_MULTI_IP_TOTAL_CH_MASK	GENMASK(19, 15)
+#define ETDM_IN_CON2_CLOCK_MASK			GENMASK(12, 10)
+#define ETDM_IN_CON2_CLOCK_SHIFT		10
+#define ETDM_IN_CON2_UPDATE_GAP_MASK		GENMASK(9, 5)
+
+#define ETDM_OUT_CON2_LRCK_DELAY_BCK_INV	BIT(30)
+#define ETDM_OUT_CON2_LRCK_DELAY_0P5T_EN	BIT(29)
+
+#define ETDM_IN_CON3_FS_MASK			GENMASK(30, 26)
+#define ETDM_IN_CON3_DISABLE_OUT(x)		BIT(((x) & 0xffff))
+#define ETDM_IN_CON3_DISABLE_OUT_MASK		GENMASK(15, 0)
+
+#define ETDM_IN_CON4_MASTER_LRCK_INV		BIT(19)
+#define ETDM_IN_CON4_MASTER_BCK_INV		BIT(18)
+#define ETDM_IN_CON4_SLAVE_LRCK_INV		BIT(17)
+#define ETDM_IN_CON4_SLAVE_BCK_INV		BIT(16)
+
+#define ETDM_OUT_CON4_RELATCH_EN_MASK		GENMASK(28, 24)
+#define ETDM_OUT_CON4_CLOCK_MASK		GENMASK(8, 6)
+#define ETDM_OUT_CON4_CLOCK_SHIFT		6
+#define ETDM_OUT_CON4_FS_MASK			GENMASK(4, 0)
+
+#define ETDM_IN_CON5_LR_SWAP(x)			BIT(((x) & 0xffff) + 16)
+#define ETDM_IN_CON5_LR_SWAP_MASK		GENMASK(31, 16)
+#define ETDM_IN_CON5_ENABLE_ODD(x)		BIT(((x) & 0xffff))
+#define ETDM_IN_CON5_ENABLE_ODD_MASK		GENMASK(15, 0)
+
+#define ETDM_OUT_CON5_MASTER_LRCK_INV		BIT(10)
+#define ETDM_OUT_CON5_MASTER_BCK_INV		BIT(9)
+#define ETDM_OUT_CON5_SLAVE_LRCK_INV		BIT(8)
+#define ETDM_OUT_CON5_SLAVE_BCK_INV		BIT(7)
+
+/* GASRC_TIMING_CON0 */
+#define GASRC_TIMING_CON0_GASRC0_IN_MODE_MASK   GENMASK(4, 0)
+#define GASRC_TIMING_CON0_GASRC1_IN_MODE_MASK   GENMASK(9, 5)
+#define GASRC_TIMING_CON0_GASRC2_IN_MODE_MASK   GENMASK(14, 10)
+#define GASRC_TIMING_CON0_GASRC3_IN_MODE_MASK   GENMASK(19, 15)
+#define GASRC_TIMING_CON0_GASRC4_IN_MODE_MASK   GENMASK(24, 20)
+#define GASRC_TIMING_CON0_GASRC5_IN_MODE_MASK   GENMASK(29, 25)
+
+/* GASRC_TIMING_CON1 */
+#define GASRC_TIMING_CON1_GASRC6_IN_MODE_MASK   GENMASK(4, 0)
+#define GASRC_TIMING_CON1_GASRC7_IN_MODE_MASK   GENMASK(9, 5)
+#define GASRC_TIMING_CON1_GASRC8_IN_MODE_MASK   GENMASK(14, 10)
+#define GASRC_TIMING_CON1_GASRC9_IN_MODE_MASK   GENMASK(19, 15)
+#define GASRC_TIMING_CON1_GASRC10_IN_MODE_MASK  GENMASK(24, 20)
+#define GASRC_TIMING_CON1_GASRC11_IN_MODE_MASK  GENMASK(29, 25)
+
+/* GASRC_TIMING_CON2 */
+#define GASRC_TIMING_CON2_GASRC12_IN_MODE_MASK  GENMASK(4, 0)
+#define GASRC_TIMING_CON2_GASRC13_IN_MODE_MASK  GENMASK(9, 5)
+#define GASRC_TIMING_CON2_GASRC14_IN_MODE_MASK  GENMASK(14, 10)
+#define GASRC_TIMING_CON2_GASRC15_IN_MODE_MASK  GENMASK(19, 15)
+#define GASRC_TIMING_CON2_GASRC16_IN_MODE_MASK  GENMASK(24, 20)
+#define GASRC_TIMING_CON2_GASRC17_IN_MODE_MASK  GENMASK(29, 25)
+
+/* GASRC_TIMING_CON3 */
+#define GASRC_TIMING_CON3_GASRC18_IN_MODE_MASK  GENMASK(4, 0)
+#define GASRC_TIMING_CON3_GASRC19_IN_MODE_MASK  GENMASK(9, 5)
+
+/* GASRC_TIMING_CON4 */
+#define GASRC_TIMING_CON4_GASRC0_OUT_MODE_MASK   GENMASK(4, 0)
+#define GASRC_TIMING_CON4_GASRC1_OUT_MODE_MASK   GENMASK(9, 5)
+#define GASRC_TIMING_CON4_GASRC2_OUT_MODE_MASK   GENMASK(14, 10)
+#define GASRC_TIMING_CON4_GASRC3_OUT_MODE_MASK   GENMASK(19, 15)
+#define GASRC_TIMING_CON4_GASRC4_OUT_MODE_MASK   GENMASK(24, 20)
+#define GASRC_TIMING_CON4_GASRC5_OUT_MODE_MASK   GENMASK(29, 25)
+
+/* GASRC_TIMING_CON5 */
+#define GASRC_TIMING_CON5_GASRC6_OUT_MODE_MASK   GENMASK(4, 0)
+#define GASRC_TIMING_CON5_GASRC7_OUT_MODE_MASK   GENMASK(9, 5)
+#define GASRC_TIMING_CON5_GASRC8_OUT_MODE_MASK   GENMASK(14, 10)
+#define GASRC_TIMING_CON5_GASRC9_OUT_MODE_MASK   GENMASK(19, 15)
+#define GASRC_TIMING_CON5_GASRC10_OUT_MODE_MASK  GENMASK(24, 20)
+#define GASRC_TIMING_CON5_GASRC11_OUT_MODE_MASK  GENMASK(29, 25)
+
+/* AFE_DPTX_CON */
+#define AFE_DPTX_CON_CH_EN_2CH		GENMASK(9, 8)
+#define AFE_DPTX_CON_CH_EN_4CH		GENMASK(11, 8)
+#define AFE_DPTX_CON_CH_EN_6CH		GENMASK(13, 8)
+#define AFE_DPTX_CON_CH_EN_8CH		GENMASK(15, 8)
+#define AFE_DPTX_CON_CH_EN_MASK		GENMASK(15, 8)
+#define AFE_DPTX_CON_16BIT		(0x1 << 2)
+#define AFE_DPTX_CON_24BIT		(0x0 << 2)
+#define AFE_DPTX_CON_16BIT_MASK		BIT(2)
+#define AFE_DPTX_CON_CH_NUM_2CH		(0x0 << 1)
+#define AFE_DPTX_CON_CH_NUM_8CH		(0x1 << 1)
+#define AFE_DPTX_CON_CH_NUM_MASK	BIT(1)
+#define AFE_DPTX_CON_ON			BIT(0)
+
+/* AFE_ADDA_DL_SRC2_CON0 */
+#define DL_2_INPUT_MODE_CTL_MASK	GENMASK(31, 28)
+#define DL_2_CH1_SATURATION_EN_CTL	BIT(27)
+#define DL_2_CH2_SATURATION_EN_CTL	BIT(26)
+#define DL_2_MUTE_CH1_OFF_CTL_PRE	BIT(12)
+#define DL_2_MUTE_CH2_OFF_CTL_PRE	BIT(11)
+#define DL_2_VOICE_MODE_CTL_PRE		BIT(5)
+#define DL_2_GAIN_ON_CTL_PRE_SHIFT	1
+#define DL_2_SRC_ON_TMP_CTRL_PRE_SHIFT	0
+
+/* AFE_ADDA_DL_SRC2_CON1 */
+#define DL_2_GAIN_CTL_PRE_MASK		GENMASK(31, 16)
+#define DL_2_GAIN_CTL_PRE_SHIFT		16
+
+/* AFE_ADDA_TOP_CON0 */
+#define C_LOOPBACK_MODE_CTL_MASK	GENMASK(15, 12)
+#define DL_INPUT_FROM_SINEGEN		(4 << 12)
+
+/* AFE_ADDA_UL_DL_CON0 */
+#define ADDA_AFE_ON_SHIFT		0
+
+/* AFE_ADDA_DL_SDM_DCCOMP_CON */
+#define DL_USE_NEW_2ND_SDM		BIT(30)
+#define ATTGAIN_CTL_MASK		GENMASK(5, 0)
+
+/* AFE_ADDA_UL_SRC_CON0 */
+#define UL_MODE_3P25M_CH2_CTL		BIT(22)
+#define UL_MODE_3P25M_CH1_CTL		BIT(21)
+#define UL_VOICE_MODE_CTL_MASK		GENMASK(19, 17)
+#define UL_LOOPBACK_MODE_CTL		BIT(2)
+#define UL_SDM3_LEVEL_CTL		BIT(1)
+#define UL_SRC_ON_TMP_CTL_SHIFT		0
+
+/* AFE_GASRCx_NEW_CON0 */
+#define AFE_GASRC_NEW_CON0_ONE_HEART                BIT(31)
+#define AFE_GASRC_NEW_CON0_CHSET0_CLR_IIR_HISTORY   BIT(17)
+#define AFE_GASRC_NEW_CON0_CHSET0_OFS_SEL_MASK      GENMASK(15, 14)
+#define AFE_GASRC_NEW_CON0_CHSET0_OFS_SEL_TX        (0 << 14)
+#define AFE_GASRC_NEW_CON0_CHSET0_OFS_SEL_RX        BIT(14)
+#define AFE_GASRC_NEW_CON0_CHSET0_IFS_SEL_MASK      GENMASK(13, 12)
+#define AFE_GASRC_NEW_CON0_CHSET0_IFS_SEL_TX        (3 << 12)
+#define AFE_GASRC_NEW_CON0_CHSET0_IFS_SEL_RX        (2 << 12)
+#define AFE_GASRC_NEW_CON0_CHSET0_IIR_EN            BIT(11)
+#define AFE_GASRC_NEW_CON0_CHSET0_IIR_STAGE_MASK    GENMASK(10, 8)
+#define AFE_GASRC_NEW_CON0_CHSET_STR_CLR            BIT(4)
+#define AFE_GASRC_NEW_CON0_COEFF_SRAM_CTRL          BIT(1)
+#define AFE_GASRC_NEW_CON0_ASM_ON                   BIT(0)
+
+/* AFE_GASRCx_NEW_CON5 */
+#define AFE_GASRC_NEW_CON5_CALI_LRCK_SEL_MASK   GENMASK(3, 1)
+#define AFE_GASRC_NEW_CON5_SOFT_RESET           BIT(0)
+
+/* AFE_GASRCx_NEW_CON6 */
+#define AFE_GASRC_NEW_CON6_FREQ_CALI_CYCLE_MASK     GENMASK(31, 16)
+#define AFE_GASRC_NEW_CON6_AUTO_TUNE_FREQ3          BIT(12)
+#define AFE_GASRC_NEW_CON6_COMP_FREQ_RES_EN         BIT(11)
+#define AFE_GASRC_NEW_CON6_CALI_SIG_MUX_SEL_MASK    GENMASK(9, 8)
+#define AFE_GASRC_NEW_CON6_FREQ_CALI_BP_DGL         BIT(7)
+#define AFE_GASRC_NEW_CON6_AUTO_TUNE_FREQ2          BIT(3)
+#define AFE_GASRC_NEW_CON6_FREQ_CALI_AUTO_RESTART   BIT(2)
+#define AFE_GASRC_NEW_CON6_CALI_USE_FREQ_OUT        BIT(1)
+#define AFE_GASRC_NEW_CON6_CALI_EN                  BIT(0)
+
+/* AFE_GASRCx_NEW_CON7 */
+#define AFE_GASRC_NEW_CON7_FREQ_CALC_DENOMINATOR_MASK    GENMASK(23, 0)
+#define AFE_GASRC_NEW_CON7_FREQ_CALC_DENOMINATOR_49M     (0x3c00)
+#define AFE_GASRC_NEW_CON7_FREQ_CALC_DENOMINATOR_45M     (0x3720)
+
+#endif
-- 
2.18.0



From trevor.wu at mediatek.com  Wed Dec  7 19:31:37 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Thu, 8 Dec 2022 11:31:37 +0800
Subject: [PATCH v3 01/12] ASoC: mediatek: common: add SMC ops and SMC CMD
In-Reply-To: <20221208033148.21866-1-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
Message-ID: <20221208033148.21866-2-trevor.wu@mediatek.com>

SMC call is required to communicate with ATF for some secure operations,
so we add SMC ops IDs and SMC CMD ID to common header.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 sound/soc/mediatek/common/mtk-base-afe.h | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/sound/soc/mediatek/common/mtk-base-afe.h b/sound/soc/mediatek/common/mtk-base-afe.h
index ef83e78c22a8..f51578b6c50a 100644
--- a/sound/soc/mediatek/common/mtk-base-afe.h
+++ b/sound/soc/mediatek/common/mtk-base-afe.h
@@ -9,7 +9,26 @@
 #ifndef _MTK_BASE_AFE_H_
 #define _MTK_BASE_AFE_H_
 
+#include <linux/soc/mediatek/mtk_sip_svc.h>
+
 #define MTK_STREAM_NUM (SNDRV_PCM_STREAM_LAST + 1)
+#define MTK_SIP_AUDIO_CONTROL MTK_SIP_SMC_CMD(0x517)
+
+/* SMC CALL Operations */
+enum mtk_audio_smc_call_op {
+	MTK_AUDIO_SMC_OP_INIT = 0,
+	MTK_AUDIO_SMC_OP_DRAM_REQUEST,
+	MTK_AUDIO_SMC_OP_DRAM_RELEASE,
+	MTK_AUDIO_SMC_OP_SRAM_REQUEST,
+	MTK_AUDIO_SMC_OP_SRAM_RELEASE,
+	MTK_AUDIO_SMC_OP_ADSP_REQUEST,
+	MTK_AUDIO_SMC_OP_ADSP_RELEASE,
+	MTK_AUDIO_SMC_OP_DOMAIN_SIDEBANDS,
+	MTK_AUDIO_SMC_OP_BTCVSD_WRITE,
+	MTK_AUDIO_SMC_OP_BTCVSD_UPDATE_CTRL_CLEAR,
+	MTK_AUDIO_SMC_OP_BTCVSD_UPDATE_CTRL_UNDERFLOW,
+	MTK_AUDIO_SMC_OP_NUM
+};
 
 struct mtk_base_memif_data {
 	int id;
-- 
2.18.0



From trevor.wu at mediatek.com  Wed Dec  7 19:31:39 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Thu, 8 Dec 2022 11:31:39 +0800
Subject: [PATCH v3 03/12] ASoC: mediatek: mt8188: support audsys clock
In-Reply-To: <20221208033148.21866-1-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
Message-ID: <20221208033148.21866-4-trevor.wu@mediatek.com>

Add mt8188 audio cg clock control. Audio clock gates are registered to CCF
for reference count and clock parent management.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 sound/soc/mediatek/mt8188/mt8188-audsys-clk.c | 205 ++++++++++++++++++
 sound/soc/mediatek/mt8188/mt8188-audsys-clk.h |  15 ++
 .../soc/mediatek/mt8188/mt8188-audsys-clkid.h |  83 +++++++
 3 files changed, 303 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clk.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clkid.h

diff --git a/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
new file mode 100644
index 000000000000..be1c53bf4729
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
@@ -0,0 +1,205 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * mt8188-audsys-clk.c  --  MediaTek 8188 audsys clock control
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/clkdev.h>
+#include "mt8188-afe-common.h"
+#include "mt8188-audsys-clk.h"
+#include "mt8188-audsys-clkid.h"
+#include "mt8188-reg.h"
+
+struct afe_gate {
+	int id;
+	const char *name;
+	const char *parent_name;
+	int reg;
+	u8 bit;
+	const struct clk_ops *ops;
+	unsigned long flags;
+	u8 cg_flags;
+};
+
+#define GATE_AFE_FLAGS(_id, _name, _parent, _reg, _bit, _flags, _cgflags) {\
+		.id = _id,					\
+		.name = _name,					\
+		.parent_name = _parent,				\
+		.reg = _reg,					\
+		.bit = _bit,					\
+		.flags = _flags,				\
+		.cg_flags = _cgflags,				\
+	}
+
+#define GATE_AFE(_id, _name, _parent, _reg, _bit)		\
+	GATE_AFE_FLAGS(_id, _name, _parent, _reg, _bit,		\
+		       CLK_SET_RATE_PARENT, CLK_GATE_SET_TO_DISABLE)
+
+#define GATE_AUD0(_id, _name, _parent, _bit)			\
+	GATE_AFE(_id, _name, _parent, AUDIO_TOP_CON0, _bit)
+
+#define GATE_AUD1(_id, _name, _parent, _bit)			\
+	GATE_AFE(_id, _name, _parent, AUDIO_TOP_CON1, _bit)
+
+#define GATE_AUD3(_id, _name, _parent, _bit)			\
+	GATE_AFE(_id, _name, _parent, AUDIO_TOP_CON3, _bit)
+
+#define GATE_AUD4(_id, _name, _parent, _bit)			\
+	GATE_AFE(_id, _name, _parent, AUDIO_TOP_CON4, _bit)
+
+#define GATE_AUD5(_id, _name, _parent, _bit)			\
+	GATE_AFE(_id, _name, _parent, AUDIO_TOP_CON5, _bit)
+
+#define GATE_AUD6(_id, _name, _parent, _bit)			\
+	GATE_AFE(_id, _name, _parent, AUDIO_TOP_CON6, _bit)
+
+static const struct afe_gate aud_clks[CLK_AUD_NR_CLK] = {
+	/* AUD0 */
+	GATE_AUD0(CLK_AUD_AFE, "aud_afe", "top_a1sys_hp", 2),
+	GATE_AUD0(CLK_AUD_LRCK_CNT, "aud_lrck_cnt", "top_a1sys_hp", 4),
+	GATE_AUD0(CLK_AUD_SPDIFIN_TUNER_APLL, "aud_spdifin_tuner_apll", "top_apll4", 10),
+	GATE_AUD0(CLK_AUD_SPDIFIN_TUNER_DBG, "aud_spdifin_tuner_dbg", "top_apll4", 11),
+	GATE_AUD0(CLK_AUD_UL_TML, "aud_ul_tml", "top_a1sys_hp", 18),
+	GATE_AUD0(CLK_AUD_APLL1_TUNER, "aud_apll1_tuner", "top_apll1", 19),
+	GATE_AUD0(CLK_AUD_APLL2_TUNER, "aud_apll2_tuner", "top_apll2", 20),
+	GATE_AUD0(CLK_AUD_TOP0_SPDF, "aud_top0_spdf", "top_aud_iec_clk", 21),
+	GATE_AUD0(CLK_AUD_APLL, "aud_apll", "top_apll1", 23),
+	GATE_AUD0(CLK_AUD_APLL2, "aud_apll2", "top_apll2", 24),
+	GATE_AUD0(CLK_AUD_DAC, "aud_dac", "top_a1sys_hp", 25),
+	GATE_AUD0(CLK_AUD_DAC_PREDIS, "aud_dac_predis", "top_a1sys_hp", 26),
+	GATE_AUD0(CLK_AUD_TML, "aud_tml", "top_a1sys_hp", 27),
+	GATE_AUD0(CLK_AUD_ADC, "aud_adc", "top_a1sys_hp", 28),
+	GATE_AUD0(CLK_AUD_DAC_HIRES, "aud_dac_hires", "top_audio_h", 31),
+
+	/* AUD1 */
+	GATE_AUD1(CLK_AUD_A1SYS_HP, "aud_a1sys_hp", "top_a1sys_hp", 2),
+	GATE_AUD1(CLK_AUD_AFE_DMIC1, "aud_afe_dmic1", "top_a1sys_hp", 10),
+	GATE_AUD1(CLK_AUD_AFE_DMIC2, "aud_afe_dmic2", "top_a1sys_hp", 11),
+	GATE_AUD1(CLK_AUD_AFE_DMIC3, "aud_afe_dmic3", "top_a1sys_hp", 12),
+	GATE_AUD1(CLK_AUD_AFE_DMIC4, "aud_afe_dmic4", "top_a1sys_hp", 13),
+	GATE_AUD1(CLK_AUD_AFE_26M_DMIC_TM, "aud_afe_26m_dmic_tm", "top_a1sys_hp", 14),
+	GATE_AUD1(CLK_AUD_UL_TML_HIRES, "aud_ul_tml_hires", "top_audio_h", 16),
+	GATE_AUD1(CLK_AUD_ADC_HIRES, "aud_adc_hires", "top_audio_h", 17),
+
+	/* AUD3 */
+	GATE_AUD3(CLK_AUD_LINEIN_TUNER, "aud_linein_tuner", "top_apll5", 5),
+	GATE_AUD3(CLK_AUD_EARC_TUNER, "aud_earc_tuner", "top_apll3", 7),
+
+	/* AUD4 */
+	GATE_AUD4(CLK_AUD_I2SIN, "aud_i2sin", "top_a1sys_hp", 0),
+	GATE_AUD4(CLK_AUD_TDM_IN, "aud_tdm_in", "top_a1sys_hp", 1),
+	GATE_AUD4(CLK_AUD_I2S_OUT, "aud_i2s_out", "top_a1sys_hp", 6),
+	GATE_AUD4(CLK_AUD_TDM_OUT, "aud_tdm_out", "top_a1sys_hp", 7),
+	GATE_AUD4(CLK_AUD_HDMI_OUT, "aud_hdmi_out", "top_a1sys_hp", 8),
+	GATE_AUD4(CLK_AUD_ASRC11, "aud_asrc11", "top_a1sys_hp", 16),
+	GATE_AUD4(CLK_AUD_ASRC12, "aud_asrc12", "top_a1sys_hp", 17),
+	GATE_AUD4(CLK_AUD_MULTI_IN, "aud_multi_in", "mphone_slave_b", 19),
+	GATE_AUD4(CLK_AUD_INTDIR, "aud_intdir", "top_intdir", 20),
+	GATE_AUD4(CLK_AUD_A1SYS, "aud_a1sys", "top_a1sys_hp", 21),
+	GATE_AUD4(CLK_AUD_A2SYS, "aud_a2sys", "top_a2sys", 22),
+	GATE_AUD4(CLK_AUD_PCMIF, "aud_pcmif", "top_a1sys_hp", 24),
+	GATE_AUD4(CLK_AUD_A3SYS, "aud_a3sys", "top_a3sys", 30),
+	GATE_AUD4(CLK_AUD_A4SYS, "aud_a4sys", "top_a4sys", 31),
+
+	/* AUD5 */
+	GATE_AUD5(CLK_AUD_MEMIF_UL1, "aud_memif_ul1", "top_a1sys_hp", 0),
+	GATE_AUD5(CLK_AUD_MEMIF_UL2, "aud_memif_ul2", "top_a1sys_hp", 1),
+	GATE_AUD5(CLK_AUD_MEMIF_UL3, "aud_memif_ul3", "top_a1sys_hp", 2),
+	GATE_AUD5(CLK_AUD_MEMIF_UL4, "aud_memif_ul4", "top_a1sys_hp", 3),
+	GATE_AUD5(CLK_AUD_MEMIF_UL5, "aud_memif_ul5", "top_a1sys_hp", 4),
+	GATE_AUD5(CLK_AUD_MEMIF_UL6, "aud_memif_ul6", "top_a1sys_hp", 5),
+	GATE_AUD5(CLK_AUD_MEMIF_UL8, "aud_memif_ul8", "top_a1sys_hp", 7),
+	GATE_AUD5(CLK_AUD_MEMIF_UL9, "aud_memif_ul9", "top_a1sys_hp", 8),
+	GATE_AUD5(CLK_AUD_MEMIF_UL10, "aud_memif_ul10", "top_a1sys_hp", 9),
+	GATE_AUD5(CLK_AUD_MEMIF_DL2, "aud_memif_dl2", "top_a1sys_hp", 18),
+	GATE_AUD5(CLK_AUD_MEMIF_DL3, "aud_memif_dl3", "top_a1sys_hp", 19),
+	GATE_AUD5(CLK_AUD_MEMIF_DL6, "aud_memif_dl6", "top_a1sys_hp", 22),
+	GATE_AUD5(CLK_AUD_MEMIF_DL7, "aud_memif_dl7", "top_a1sys_hp", 23),
+	GATE_AUD5(CLK_AUD_MEMIF_DL8, "aud_memif_dl8", "top_a1sys_hp", 24),
+	GATE_AUD5(CLK_AUD_MEMIF_DL10, "aud_memif_dl10", "top_a1sys_hp", 26),
+	GATE_AUD5(CLK_AUD_MEMIF_DL11, "aud_memif_dl11", "top_a1sys_hp", 27),
+
+	/* AUD6 */
+	GATE_AUD6(CLK_AUD_GASRC0, "aud_gasrc0", "top_asm_h", 0),
+	GATE_AUD6(CLK_AUD_GASRC1, "aud_gasrc1", "top_asm_h", 1),
+	GATE_AUD6(CLK_AUD_GASRC2, "aud_gasrc2", "top_asm_h", 2),
+	GATE_AUD6(CLK_AUD_GASRC3, "aud_gasrc3", "top_asm_h", 3),
+	GATE_AUD6(CLK_AUD_GASRC4, "aud_gasrc4", "top_asm_h", 4),
+	GATE_AUD6(CLK_AUD_GASRC5, "aud_gasrc5", "top_asm_h", 5),
+	GATE_AUD6(CLK_AUD_GASRC6, "aud_gasrc6", "top_asm_h", 6),
+	GATE_AUD6(CLK_AUD_GASRC7, "aud_gasrc7", "top_asm_h", 7),
+	GATE_AUD6(CLK_AUD_GASRC8, "aud_gasrc8", "top_asm_h", 8),
+	GATE_AUD6(CLK_AUD_GASRC9, "aud_gasrc9", "top_asm_h", 9),
+	GATE_AUD6(CLK_AUD_GASRC10, "aud_gasrc10", "top_asm_h", 10),
+	GATE_AUD6(CLK_AUD_GASRC11, "aud_gasrc11", "top_asm_h", 11),
+};
+
+int mt8188_audsys_clk_register(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct clk *clk;
+	struct clk_lookup *cl;
+	int i;
+
+	afe_priv->lookup = devm_kcalloc(afe->dev, CLK_AUD_NR_CLK,
+					sizeof(*afe_priv->lookup),
+					GFP_KERNEL);
+
+	if (!afe_priv->lookup)
+		return -ENOMEM;
+
+	for (i = 0; i < ARRAY_SIZE(aud_clks); i++) {
+		const struct afe_gate *gate = &aud_clks[i];
+
+		clk = clk_register_gate(afe->dev, gate->name, gate->parent_name,
+					gate->flags, afe->base_addr + gate->reg,
+					gate->bit, gate->cg_flags, NULL);
+
+		if (IS_ERR(clk)) {
+			dev_err(afe->dev, "Failed to register clk %s: %ld\n",
+				gate->name, PTR_ERR(clk));
+			continue;
+		}
+
+		/* add clk_lookup for devm_clk_get(SND_SOC_DAPM_CLOCK_SUPPLY) */
+		cl = kzalloc(sizeof(*cl), GFP_KERNEL);
+		if (!cl)
+			return -ENOMEM;
+
+		cl->clk = clk;
+		cl->con_id = gate->name;
+		cl->dev_id = dev_name(afe->dev);
+		cl->clk_hw = NULL;
+		clkdev_add(cl);
+
+		afe_priv->lookup[i] = cl;
+	}
+
+	return 0;
+}
+
+void mt8188_audsys_clk_unregister(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct clk *clk;
+	struct clk_lookup *cl;
+	int i;
+
+	if (!afe_priv)
+		return;
+
+	for (i = 0; i < CLK_AUD_NR_CLK; i++) {
+		cl = afe_priv->lookup[i];
+		if (!cl)
+			continue;
+
+		clk = cl->clk;
+		clk_unregister_gate(clk);
+
+		clkdev_drop(cl);
+	}
+}
diff --git a/sound/soc/mediatek/mt8188/mt8188-audsys-clk.h b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.h
new file mode 100644
index 000000000000..6c5f463ad7e4
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.h
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * mt8188-audsys-clk.h  --  MediaTek 8188 audsys clock definition
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#ifndef _MT8188_AUDSYS_CLK_H_
+#define _MT8188_AUDSYS_CLK_H_
+
+int mt8188_audsys_clk_register(struct mtk_base_afe *afe);
+void mt8188_audsys_clk_unregister(struct mtk_base_afe *afe);
+
+#endif
diff --git a/sound/soc/mediatek/mt8188/mt8188-audsys-clkid.h b/sound/soc/mediatek/mt8188/mt8188-audsys-clkid.h
new file mode 100644
index 000000000000..6f34ffc760e0
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-audsys-clkid.h
@@ -0,0 +1,83 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * mt8188-audsys-clkid.h  --  MediaTek 8188 audsys clock id definition
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#ifndef _MT8188_AUDSYS_CLKID_H_
+#define _MT8188_AUDSYS_CLKID_H_
+
+enum{
+	CLK_AUD_AFE,
+	CLK_AUD_LRCK_CNT,
+	CLK_AUD_SPDIFIN_TUNER_APLL,
+	CLK_AUD_SPDIFIN_TUNER_DBG,
+	CLK_AUD_UL_TML,
+	CLK_AUD_APLL1_TUNER,
+	CLK_AUD_APLL2_TUNER,
+	CLK_AUD_TOP0_SPDF,
+	CLK_AUD_APLL,
+	CLK_AUD_APLL2,
+	CLK_AUD_DAC,
+	CLK_AUD_DAC_PREDIS,
+	CLK_AUD_TML,
+	CLK_AUD_ADC,
+	CLK_AUD_DAC_HIRES,
+	CLK_AUD_A1SYS_HP,
+	CLK_AUD_AFE_DMIC1,
+	CLK_AUD_AFE_DMIC2,
+	CLK_AUD_AFE_DMIC3,
+	CLK_AUD_AFE_DMIC4,
+	CLK_AUD_AFE_26M_DMIC_TM,
+	CLK_AUD_UL_TML_HIRES,
+	CLK_AUD_ADC_HIRES,
+	CLK_AUD_LINEIN_TUNER,
+	CLK_AUD_EARC_TUNER,
+	CLK_AUD_I2SIN,
+	CLK_AUD_TDM_IN,
+	CLK_AUD_I2S_OUT,
+	CLK_AUD_TDM_OUT,
+	CLK_AUD_HDMI_OUT,
+	CLK_AUD_ASRC11,
+	CLK_AUD_ASRC12,
+	CLK_AUD_MULTI_IN,
+	CLK_AUD_INTDIR,
+	CLK_AUD_A1SYS,
+	CLK_AUD_A2SYS,
+	CLK_AUD_PCMIF,
+	CLK_AUD_A3SYS,
+	CLK_AUD_A4SYS,
+	CLK_AUD_MEMIF_UL1,
+	CLK_AUD_MEMIF_UL2,
+	CLK_AUD_MEMIF_UL3,
+	CLK_AUD_MEMIF_UL4,
+	CLK_AUD_MEMIF_UL5,
+	CLK_AUD_MEMIF_UL6,
+	CLK_AUD_MEMIF_UL8,
+	CLK_AUD_MEMIF_UL9,
+	CLK_AUD_MEMIF_UL10,
+	CLK_AUD_MEMIF_DL2,
+	CLK_AUD_MEMIF_DL3,
+	CLK_AUD_MEMIF_DL6,
+	CLK_AUD_MEMIF_DL7,
+	CLK_AUD_MEMIF_DL8,
+	CLK_AUD_MEMIF_DL10,
+	CLK_AUD_MEMIF_DL11,
+	CLK_AUD_GASRC0,
+	CLK_AUD_GASRC1,
+	CLK_AUD_GASRC2,
+	CLK_AUD_GASRC3,
+	CLK_AUD_GASRC4,
+	CLK_AUD_GASRC5,
+	CLK_AUD_GASRC6,
+	CLK_AUD_GASRC7,
+	CLK_AUD_GASRC8,
+	CLK_AUD_GASRC9,
+	CLK_AUD_GASRC10,
+	CLK_AUD_GASRC11,
+	CLK_AUD_NR_CLK,
+};
+
+#endif
-- 
2.18.0



From trevor.wu at mediatek.com  Wed Dec  7 19:31:36 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Thu, 8 Dec 2022 11:31:36 +0800
Subject: [PATCH v3 00/12] ASoC: mediatek: Add support for MT8188 SoC
Message-ID: <20221208033148.21866-1-trevor.wu@mediatek.com>

This series of patches adds support for Mediatek AFE of MT8188 SoC.
Patches are based on broonie tree "for-next" branch.

Changes since v2:
  - drop CLK_IGNORE_UNUSED flag 
  - include bitfield.h to reslove the issue reported by kernel test robot
  - rename mt8188-afe-pcm.yaml to mt8188-afe.yaml
  - refine dt-binding files based on reviewer's suggestions

Changes since v1:
  - remove bus protection functions in case of unmerged dependency problem
  - replace some bit operation macro with FIELD_PREP
  - simplify register control by regmap_set_bits and regmap_clear_bits
  - fix dt-binding errors
  - rename compatible string for recognition

Trevor Wu (12):
  ASoC: mediatek: common: add SMC ops and SMC CMD
  ASoC: mediatek: mt8188: add common header
  ASoC: mediatek: mt8188: support audsys clock
  ASoC: mediatek: mt8188: support adda in platform driver
  ASoC: mediatek: mt8188: support etdm in platform driver
  ASoC: mediatek: mt8188: support pcmif in platform driver
  ASoC: mediatek: mt8188: support audio clock control
  ASoC: mediatek: mt8188: add platform driver
  ASoC: mediatek: mt8188: add control for timing select
  dt-bindings: mediatek: mt8188: add audio afe document
  ASoC: mediatek: mt8188: add machine driver with mt6359
  dt-bindings: mediatek: mt8188: add mt8188-mt6359 document

 .../devicetree/bindings/sound/mt8188-afe.yaml |  196 +
 .../bindings/sound/mt8188-mt6359.yaml         |   60 +
 sound/soc/mediatek/Kconfig                    |   23 +
 sound/soc/mediatek/Makefile                   |    1 +
 sound/soc/mediatek/common/mtk-base-afe.h      |   19 +
 sound/soc/mediatek/mt8188/Makefile            |   15 +
 sound/soc/mediatek/mt8188/mt8188-afe-clk.c    |  656 ++++
 sound/soc/mediatek/mt8188/mt8188-afe-clk.h    |  114 +
 sound/soc/mediatek/mt8188/mt8188-afe-common.h |  151 +
 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c    | 3359 +++++++++++++++++
 sound/soc/mediatek/mt8188/mt8188-audsys-clk.c |  205 +
 sound/soc/mediatek/mt8188/mt8188-audsys-clk.h |   15 +
 .../soc/mediatek/mt8188/mt8188-audsys-clkid.h |   83 +
 sound/soc/mediatek/mt8188/mt8188-dai-adda.c   |  632 ++++
 sound/soc/mediatek/mt8188/mt8188-dai-etdm.c   | 2591 +++++++++++++
 sound/soc/mediatek/mt8188/mt8188-dai-pcm.c    |  367 ++
 sound/soc/mediatek/mt8188/mt8188-mt6359.c     |  808 ++++
 sound/soc/mediatek/mt8188/mt8188-reg.h        | 3180 ++++++++++++++++
 18 files changed, 12475 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/mt8188-afe.yaml
 create mode 100644 Documentation/devicetree/bindings/sound/mt8188-mt6359.yaml
 create mode 100644 sound/soc/mediatek/mt8188/Makefile
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-clk.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-clk.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-common.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clk.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clkid.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-adda.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-pcm.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-mt6359.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-reg.h

-- 
2.18.0



From peter.wang at mediatek.com  Wed Dec  7 22:10:37 2022
From: peter.wang at mediatek.com (peter.wang at mediatek.com)
Date: Thu, 8 Dec 2022 14:10:37 +0800
Subject: [PATCH v5] ufs: core: wlun suspend SSU/enter hibern8 fail recovery
Message-ID: <20221208061037.24313-1-peter.wang@mediatek.com>

From: Peter Wang <peter.wang at mediatek.com>

When SSU/enter hibern8 fail in wlun suspend flow, trigger error
handler and return busy to break the suspend.
If not, wlun runtime pm status become error and the consumer will
stuck in runtime suspend status.

Fixes: b294ff3e3449 ("scsi: ufs: core: Enable power management for wlun")
Cc: stable at vger.kernel.org
Signed-off-by: Peter Wang <peter.wang at mediatek.com>
---
 drivers/ufs/core/ufshcd.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index b1f59a5fe632..c91d58d1486a 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -106,6 +106,13 @@
 		       16, 4, buf, __len, false);                        \
 } while (0)
 
+#define ufshcd_force_error_recovery(hba) do {                           \
+	spin_lock_irq(hba->host->host_lock);                            \
+	hba->force_reset = true;                                        \
+	ufshcd_schedule_eh_work(hba);                                   \
+	spin_unlock_irq(hba->host->host_lock);                          \
+} while (0)
+
 int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t len,
 		     const char *prefix)
 {
@@ -9049,6 +9056,15 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 
 		if (!hba->dev_info.b_rpm_dev_flush_capable) {
 			ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
+			if (ret && pm_op != UFS_SHUTDOWN_PM) {
+				/*
+				 * If return err in suspend flow, IO will hang.
+				 * Trigger error handler and break suspend for
+				 * error recovery.
+				 */
+				ufshcd_force_error_recovery(hba);
+				ret = -EBUSY;
+			}
 			if (ret)
 				goto enable_scaling;
 		}
@@ -9060,6 +9076,15 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	 */
 	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
 	ret = ufshcd_link_state_transition(hba, req_link_state, check_for_bkops);
+	if (ret && pm_op != UFS_SHUTDOWN_PM) {
+		/*
+		 * If return err in suspend flow, IO will hang.
+		 * Trigger error handler and break suspend for
+		 * error recovery.
+		 */
+		ufshcd_force_error_recovery(hba);
+		ret = -EBUSY;
+	}
 	if (ret)
 		goto set_dev_active;
 
-- 
2.18.0



From xiangsheng.hou at mediatek.com  Wed Dec  7 22:29:50 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Thu, 8 Dec 2022 14:29:50 +0800
Subject: [PATCH v3 4/9] dt-bindings: spi: mtk-snfi: Add compatible for MT7986
In-Reply-To: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221208062955.2546-5-xiangsheng.hou@mediatek.com>

Add dt-bindings documentation of SPI NAND controller
for MediaTek MT7986 SoC platform. And add optional
nfi_hclk property which is needed for MT7986.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../bindings/spi/mediatek,spi-mtk-snfi.yaml   | 51 +++++++++++++++----
 1 file changed, 42 insertions(+), 9 deletions(-)

diff --git a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
index 6e6e02c91780..bab23f1b11fd 100644
--- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
+++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
@@ -18,14 +18,12 @@ description: |
   using the accompanying ECC engine. There should be only one spi
   slave device following generic spi bindings.
 
-allOf:
-  - $ref: /schemas/spi/spi-controller.yaml#
-
 properties:
   compatible:
     enum:
       - mediatek,mt7622-snand
       - mediatek,mt7629-snand
+      - mediatek,mt7986-snand
 
   reg:
     items:
@@ -36,14 +34,12 @@ properties:
       - description: NFI interrupt
 
   clocks:
-    items:
-      - description: clock used for the controller
-      - description: clock used for the SPI bus
+    minItems: 2
+    maxItems: 3
 
   clock-names:
-    items:
-      - const: nfi_clk
-      - const: pad_clk
+    minItems: 2
+    maxItems: 3
 
   nand-ecc-engine:
     description: device-tree node of the accompanying ECC engine.
@@ -57,6 +53,43 @@ required:
   - clock-names
   - nand-ecc-engine
 
+allOf:
+  - $ref: /schemas/spi/spi-controller.yaml#
+  - if:
+      properties:
+        compatible:
+          enum:
+            - mediatek,mt7622-snand
+            - mediatek,mt7629-snand
+    then:
+      properties:
+        clocks:
+          items:
+            - description: clock used for the controller
+            - description: clock used for the SPI bus
+        clock-names:
+          items:
+            - const: nfi_clk
+            - const: pad_clk
+
+  - if:
+      properties:
+        compatible:
+          enum:
+            - mediatek,mt7986-snand
+    then:
+      properties:
+        clocks:
+          items:
+            - description: clock used for the controller
+            - description: clock used for the SPI bus
+            - description: clock used for the AHB bus
+        clock-names:
+          items:
+            - const: nfi_clk
+            - const: pad_clk
+            - const: nfi_hclk
+
 unevaluatedProperties: false
 
 examples:
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Wed Dec  7 22:29:52 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Thu, 8 Dec 2022 14:29:52 +0800
Subject: [PATCH v3 6/9] dt-bindings: spi: mtk-snfi: Add read latch latency property
In-Reply-To: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221208062955.2546-7-xiangsheng.hou@mediatek.com>

Add mediatek,rx-latch-latency-ns property which adjust data read
latch latency in the unit of nanoseconds.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml         | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
index bab23f1b11fd..1e5e89a693c3 100644
--- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
+++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
@@ -45,6 +45,9 @@ properties:
     description: device-tree node of the accompanying ECC engine.
     $ref: /schemas/types.yaml#/definitions/phandle
 
+  mediatek,rx-latch-latency-ns:
+    description: Data read latch latency, unit is nanoseconds.
+
 required:
   - compatible
   - reg
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Wed Dec  7 22:29:54 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Thu, 8 Dec 2022 14:29:54 +0800
Subject: [PATCH v3 8/9] arm/arm64: dts: mediatek: Fix existing NAND controller node name
In-Reply-To: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221208062955.2546-9-xiangsheng.hou@mediatek.com>

Change the existing node name in order to match NAND controller DT
bindings.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 arch/arm/boot/dts/mt2701.dtsi             | 2 +-
 arch/arm64/boot/dts/mediatek/mt2712e.dtsi | 2 +-
 arch/arm64/boot/dts/mediatek/mt7622.dtsi  | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/arm/boot/dts/mt2701.dtsi b/arch/arm/boot/dts/mt2701.dtsi
index b8eba3ba153c..049ed797766b 100644
--- a/arch/arm/boot/dts/mt2701.dtsi
+++ b/arch/arm/boot/dts/mt2701.dtsi
@@ -360,7 +360,7 @@ thermal: thermal at 1100b000 {
 		mediatek,apmixedsys = <&apmixedsys>;
 	};
 
-	nandc: nfi at 1100d000 {
+	nandc: nand-controller at 1100d000 {
 		compatible = "mediatek,mt2701-nfc";
 		reg = <0 0x1100d000 0 0x1000>;
 		interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
diff --git a/arch/arm64/boot/dts/mediatek/mt2712e.dtsi b/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
index 92212cddd37e..cfbec2a2ed9d 100644
--- a/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
@@ -560,7 +560,7 @@ spi0: spi at 1100a000 {
 		status = "disabled";
 	};
 
-	nandc: nfi at 1100e000 {
+	nandc: nand-controller at 1100e000 {
 		compatible = "mediatek,mt2712-nfc";
 		reg = <0 0x1100e000 0 0x1000>;
 		interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_LOW>;
diff --git a/arch/arm64/boot/dts/mediatek/mt7622.dtsi b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
index 146e18b5b1f4..d98aa4936092 100644
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
@@ -539,7 +539,7 @@ bluetooth {
 		};
 	};
 
-	nandc: nfi at 1100d000 {
+	nandc: nand-controller at 1100d000 {
 		compatible = "mediatek,mt7622-nfc";
 		reg = <0 0x1100D000 0 0x1000>;
 		interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_LOW>;
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Wed Dec  7 22:29:51 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Thu, 8 Dec 2022 14:29:51 +0800
Subject: [PATCH v3 5/9] spi: mtk-snfi: Add snfi sample delay and read latency adjustment
In-Reply-To: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221208062955.2546-6-xiangsheng.hou@mediatek.com>

Add snfi sample delay and read latency adjustment which can get
from dts property.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/spi/spi-mtk-snfi.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index 85644308df23..f3f95eb37365 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -195,6 +195,8 @@
 #define DATA_READ_MODE_X4 2
 #define DATA_READ_MODE_DUAL 5
 #define DATA_READ_MODE_QUAD 6
+#define DATA_READ_LATCH_LAT GENMASK(9, 8)
+#define DATA_READ_LATCH_LAT_S 8
 #define PG_LOAD_CUSTOM_EN BIT(7)
 #define DATARD_CUSTOM_EN BIT(6)
 #define CS_DESELECT_CYC_S 0
@@ -205,6 +207,9 @@
 
 #define SNF_DLY_CTL3 0x548
 #define SFCK_SAM_DLY_S 0
+#define SFCK_SAM_DLY GENMASK(5, 0)
+#define SFCK_SAM_DLY_TOTAL 9
+#define SFCK_SAM_DLY_RANGE 47
 
 #define SNF_STA_CTL1 0x550
 #define CUS_PG_DONE BIT(28)
@@ -1368,6 +1373,8 @@ static int mtk_snand_probe(struct platform_device *pdev)
 	const struct of_device_id *dev_id;
 	struct spi_controller *ctlr;
 	struct mtk_snand *ms;
+	unsigned long spi_freq;
+	u32 val = 0;
 	int ret;
 
 	dev_id = of_match_node(mtk_snand_ids, np);
@@ -1446,6 +1453,19 @@ static int mtk_snand_probe(struct platform_device *pdev)
 	// switch to SNFI mode
 	nfi_write32(ms, SNF_CFG, SPI_MODE);
 
+	ret = of_property_read_u32(np, "rx-sample-delay-ns", &val);
+	if (!ret)
+		nfi_rmw32(ms, SNF_DLY_CTL3, SFCK_SAM_DLY,
+			  val * SFCK_SAM_DLY_RANGE / SFCK_SAM_DLY_TOTAL);
+
+	ret = of_property_read_u32(np, "mediatek,rx-latch-latency-ns", &val);
+	if (!ret) {
+		spi_freq = clk_get_rate(ms->pad_clk);
+		val = DIV_ROUND_CLOSEST(val, NSEC_PER_SEC / spi_freq);
+		nfi_rmw32(ms, SNF_MISC_CTL, DATA_READ_LATCH_LAT,
+			  val << DATA_READ_LATCH_LAT_S);
+	}
+
 	// setup an initial page format for ops matching page_cache_op template
 	// before ECC is called.
 	ret = mtk_snand_setup_pagefmt(ms, SZ_2K, SZ_64);
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Wed Dec  7 22:29:53 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Thu, 8 Dec 2022 14:29:53 +0800
Subject: [PATCH v3 7/9] dt-bindings: mtd: Split ECC engine with rawnand controller
In-Reply-To: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221208062955.2546-8-xiangsheng.hou@mediatek.com>

Split MediaTek ECC engine with rawnand controller and convert to
YAML schema.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 .../bindings/mtd/mediatek,mtk-nfc.yaml        | 154 +++++++++++++++
 .../mtd/mediatek,nand-ecc-engine.yaml         |  62 ++++++
 .../devicetree/bindings/mtd/mtk-nand.txt      | 176 ------------------
 3 files changed, 216 insertions(+), 176 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
 delete mode 100644 Documentation/devicetree/bindings/mtd/mtk-nand.txt

diff --git a/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
new file mode 100644
index 000000000000..eb1a44c7ae4e
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
@@ -0,0 +1,154 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mtd/mediatek,mtk-nfc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek(MTK) SoCs raw NAND FLASH controller (NFC)
+
+maintainers:
+  - Xiangsheng Hou <xiangsheng.hou at mediatek.com>
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt2701-nfc
+      - mediatek,mt2712-nfc
+      - mediatek,mt7622-nfc
+
+  reg:
+    items:
+      - description: Base physical address and size of NFI.
+
+  interrupts:
+    items:
+      - description: NFI interrupt
+
+  clocks:
+    items:
+      - description: clock used for the controller
+      - description: clock used for the pad
+
+  clock-names:
+    items:
+      - const: nfi_clk
+      - const: pad_clk
+
+  ecc-engine:
+    description: device-tree node of the required ECC engine.
+    $ref: /schemas/types.yaml#/definitions/phandle
+
+patternProperties:
+  "^nand@[a-f0-9]$":
+    type: object
+    properties:
+      reg:
+        minimum: 0
+        maximum: 1
+      nand-ecc-mode:
+        const: hw
+
+allOf:
+  - $ref: nand-controller.yaml#
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: mediatek,mt2701-nfc
+    then:
+      patternProperties:
+        "^nand@[a-f0-9]$":
+          properties:
+            nand-ecc-step-size:
+              enum: [ 512, 1024 ]
+            nand-ecc-strength:
+              enum: [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36,
+                     40, 44, 48, 52, 56, 60]
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: mediatek,mt2712-nfc
+    then:
+      patternProperties:
+        "^nand@[a-f0-9]$":
+          properties:
+            nand-ecc-step-size:
+              enum: [ 512, 1024 ]
+            nand-ecc-strength:
+              enum: [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36,
+                     40, 44, 48, 52, 56, 60, 68, 72, 80]
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: mediatek,mt7622-nfc
+    then:
+      patternProperties:
+        "^nand@[a-f0-9]$":
+          properties:
+            nand-ecc-step-size:
+              const: 512
+            nand-ecc-strength:
+              enum: [4, 6, 8, 10, 12]
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+  - clock-names
+  - ecc-engine
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt2701-clk.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    soc {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        nand-controller at 1100d000 {
+            compatible = "mediatek,mt2701-nfc";
+            reg = <0 0x1100d000 0 0x1000>;
+            interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
+            clocks = <&pericfg CLK_PERI_NFI>,
+                     <&pericfg CLK_PERI_NFI_PAD>;
+            clock-names = "nfi_clk", "pad_clk";
+            ecc-engine = <&bch>;
+            #address-cells = <1>;
+            #size-cells = <0>;
+
+            nand at 0 {
+                reg = <0>;
+
+                nand-on-flash-bbt;
+                nand-ecc-mode = "hw";
+                nand-ecc-step-size = <1024>;
+                nand-ecc-strength = <24>;
+
+                partitions {
+                    compatible = "fixed-partitions";
+                    #address-cells = <1>;
+                    #size-cells = <1>;
+
+                    preloader at 0 {
+                        label = "pl";
+                        read-only;
+                        reg = <0x0 0x400000>;
+                    };
+                    android at 400000 {
+                        label = "android";
+                        reg = <0x400000 0x12c00000>;
+                    };
+                };
+            };
+        };
+    };
diff --git a/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
new file mode 100644
index 000000000000..b13d801eda76
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mtd/mediatek,nand-ecc-engine.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek(MTK) SoCs NAND ECC engine
+
+maintainers:
+  - Xiangsheng Hou <xiangsheng.hou at mediatek.com>
+
+description: |
+  MTK NAND ECC engine can cowork with MTK raw NAND and SPI NAND controller.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt2701-ecc
+      - mediatek,mt2712-ecc
+      - mediatek,mt7622-ecc
+
+  reg:
+    items:
+      - description: Base physical address and size of ECC.
+
+  interrupts:
+    items:
+      - description: ECC interrupt
+
+  clocks:
+    maxItems: 1
+
+  clock-names:
+    const: nfiecc_clk
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+  - clock-names
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt2701-clk.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    soc {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        bch: ecc at 1100e000 {
+            compatible = "mediatek,mt2701-ecc";
+            reg = <0 0x1100e000 0 0x1000>;
+            interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_LOW>;
+            clocks = <&pericfg CLK_PERI_NFI_ECC>;
+            clock-names = "nfiecc_clk";
+        };
+    };
diff --git a/Documentation/devicetree/bindings/mtd/mtk-nand.txt b/Documentation/devicetree/bindings/mtd/mtk-nand.txt
deleted file mode 100644
index 839ea2f93d04..000000000000
--- a/Documentation/devicetree/bindings/mtd/mtk-nand.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-MTK SoCs NAND FLASH controller (NFC) DT binding
-
-This file documents the device tree bindings for MTK SoCs NAND controllers.
-The functional split of the controller requires two drivers to operate:
-the nand controller interface driver and the ECC engine driver.
-
-The hardware description for both devices must be captured as device
-tree nodes.
-
-1) NFC NAND Controller Interface (NFI):
-=======================================
-
-The first part of NFC is NAND Controller Interface (NFI) HW.
-Required NFI properties:
-- compatible:			Should be one of
-				"mediatek,mt2701-nfc",
-				"mediatek,mt2712-nfc",
-				"mediatek,mt7622-nfc".
-- reg:				Base physical address and size of NFI.
-- interrupts:			Interrupts of NFI.
-- clocks:			NFI required clocks.
-- clock-names:			NFI clocks internal name.
-- ecc-engine:			Required ECC Engine node.
-- #address-cells:		NAND chip index, should be 1.
-- #size-cells:			Should be 0.
-
-Example:
-
-	nandc: nfi at 1100d000 {
-		compatible = "mediatek,mt2701-nfc";
-		reg = <0 0x1100d000 0 0x1000>;
-		interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
-		clocks = <&pericfg CLK_PERI_NFI>,
-			 <&pericfg CLK_PERI_NFI_PAD>;
-		clock-names = "nfi_clk", "pad_clk";
-		ecc-engine = <&bch>;
-		#address-cells = <1>;
-		#size-cells = <0>;
-        };
-
-Platform related properties, should be set in {platform_name}.dts:
-- children nodes:	NAND chips.
-
-Children nodes properties:
-- reg:			Chip Select Signal, default 0.
-			Set as reg = <0>, <1> when need 2 CS.
-Optional:
-- nand-on-flash-bbt:	Store BBT on NAND Flash.
-- nand-ecc-mode:	the NAND ecc mode (check driver for supported modes)
-- nand-ecc-step-size:	Number of data bytes covered by a single ECC step.
-			valid values:
-			512 and 1024 on mt2701 and mt2712.
-			512 only on mt7622.
-			1024 is recommended for large page NANDs.
-- nand-ecc-strength:	Number of bits to correct per ECC step.
-			The valid values that each controller supports:
-			mt2701: 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28,
-				32, 36, 40, 44, 48, 52, 56, 60.
-			mt2712: 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28,
-				32, 36, 40, 44, 48, 52, 56, 60, 68, 72, 80.
-			mt7622: 4, 6, 8, 10, 12, 14, 16.
-			The strength should be calculated as follows:
-			E = (S - F) * 8 / B
-			S = O / (P / Q)
-				E :	nand-ecc-strength.
-				S :	spare size per sector.
-				F :	FDM size, should be in the range [1,8].
-					It is used to store free oob data.
-				O :	oob size.
-				P :	page size.
-				Q :	nand-ecc-step-size.
-				B :	number of parity bits needed to correct
-					1 bitflip.
-					According to MTK NAND controller design,
-					this number depends on max ecc step size
-					that MTK NAND controller supports.
-					If max ecc step size supported is 1024,
-					then it should be always 14. And if max
-					ecc step size is 512, then it should be
-					always 13.
-			If the result does not match any one of the listed
-			choices above, please select the smaller valid value from
-			the list.
-			(otherwise the driver will do the adjustment at runtime)
-- pinctrl-names:	Default NAND pin GPIO setting name.
-- pinctrl-0:		GPIO setting node.
-
-Example:
-	&pio {
-		nand_pins_default: nanddefault {
-			pins_dat {
-				pinmux = <MT2701_PIN_111_MSDC0_DAT7__FUNC_NLD7>,
-					 <MT2701_PIN_112_MSDC0_DAT6__FUNC_NLD6>,
-					 <MT2701_PIN_114_MSDC0_DAT4__FUNC_NLD4>,
-					 <MT2701_PIN_118_MSDC0_DAT3__FUNC_NLD3>,
-					 <MT2701_PIN_121_MSDC0_DAT0__FUNC_NLD0>,
-					 <MT2701_PIN_120_MSDC0_DAT1__FUNC_NLD1>,
-					 <MT2701_PIN_113_MSDC0_DAT5__FUNC_NLD5>,
-					 <MT2701_PIN_115_MSDC0_RSTB__FUNC_NLD8>,
-					 <MT2701_PIN_119_MSDC0_DAT2__FUNC_NLD2>;
-				input-enable;
-				drive-strength = <MTK_DRIVE_8mA>;
-				bias-pull-up;
-			};
-
-			pins_we {
-				pinmux = <MT2701_PIN_117_MSDC0_CLK__FUNC_NWEB>;
-				drive-strength = <MTK_DRIVE_8mA>;
-				bias-pull-up = <MTK_PUPD_SET_R1R0_10>;
-			};
-
-			pins_ale {
-				pinmux = <MT2701_PIN_116_MSDC0_CMD__FUNC_NALE>;
-				drive-strength = <MTK_DRIVE_8mA>;
-				bias-pull-down = <MTK_PUPD_SET_R1R0_10>;
-			};
-		};
-	};
-
-	&nandc {
-		status = "okay";
-		pinctrl-names = "default";
-		pinctrl-0 = <&nand_pins_default>;
-		nand at 0 {
-			reg = <0>;
-			nand-on-flash-bbt;
-			nand-ecc-mode = "hw";
-			nand-ecc-strength = <24>;
-			nand-ecc-step-size = <1024>;
-		};
-	};
-
-NAND chip optional subnodes:
-- Partitions, see Documentation/devicetree/bindings/mtd/mtd.yaml
-
-Example:
-	nand at 0 {
-		partitions {
-			compatible = "fixed-partitions";
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			preloader at 0 {
-				label = "pl";
-				read-only;
-				reg = <0x00000000 0x00400000>;
-			};
-			android at 00400000 {
-				label = "android";
-				reg = <0x00400000 0x12c00000>;
-			};
-		};
-	};
-
-2) ECC Engine:
-==============
-
-Required BCH properties:
-- compatible:	Should be one of
-		"mediatek,mt2701-ecc",
-		"mediatek,mt2712-ecc",
-		"mediatek,mt7622-ecc".
-- reg:		Base physical address and size of ECC.
-- interrupts:	Interrupts of ECC.
-- clocks:	ECC required clocks.
-- clock-names:	ECC clocks internal name.
-
-Example:
-
-	bch: ecc at 1100e000 {
-		compatible = "mediatek,mt2701-ecc";
-		reg = <0 0x1100e000 0 0x1000>;
-		interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_LOW>;
-		clocks = <&pericfg CLK_PERI_NFI_ECC>;
-		clock-names = "nfiecc_clk";
-	};
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Wed Dec  7 22:29:55 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Thu, 8 Dec 2022 14:29:55 +0800
Subject: [PATCH v3 9/9] dt-bindings: mtd: mediatek,nand-ecc-engine: Add compatible for MT7986
In-Reply-To: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221208062955.2546-10-xiangsheng.hou@mediatek.com>

Add dt-bindings documentation of ECC for MediaTek MT7986 SoC
platform.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 .../devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml        | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
index b13d801eda76..505baf1e8830 100644
--- a/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
+++ b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
@@ -18,6 +18,7 @@ properties:
       - mediatek,mt2701-ecc
       - mediatek,mt2712-ecc
       - mediatek,mt7622-ecc
+      - mediatek,mt7986-ecc
 
   reg:
     items:
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Wed Dec  7 22:29:49 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Thu, 8 Dec 2022 14:29:49 +0800
Subject: [PATCH v3 3/9] mtd: nand: ecc-mtk: Add ECC support fot MT7986 IC
In-Reply-To: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221208062955.2546-4-xiangsheng.hou@mediatek.com>

Add ECC support fot MT7986 IC, and change err_mask value with
GENMASK macro.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 drivers/mtd/nand/ecc-mtk.c | 28 +++++++++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/ecc-mtk.c b/drivers/mtd/nand/ecc-mtk.c
index 9f9b201fe706..c75bb8b80cc1 100644
--- a/drivers/mtd/nand/ecc-mtk.c
+++ b/drivers/mtd/nand/ecc-mtk.c
@@ -40,6 +40,10 @@
 #define ECC_IDLE_REG(op)	((op) == ECC_ENCODE ? ECC_ENCIDLE : ECC_DECIDLE)
 #define ECC_CTL_REG(op)		((op) == ECC_ENCODE ? ECC_ENCCON : ECC_DECCON)
 
+#define ECC_ERRMASK_MT7622	GENMASK(4, 0)
+#define ECC_ERRMASK_MT2701	GENMASK(5, 0)
+#define ECC_ERRMASK_MT2712	GENMASK(6, 0)
+
 struct mtk_ecc_caps {
 	u32 err_mask;
 	u32 err_shift;
@@ -79,6 +83,10 @@ static const u8 ecc_strength_mt7622[] = {
 	4, 6, 8, 10, 12
 };
 
+static const u8 ecc_strength_mt7986[] = {
+	4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24
+};
+
 enum mtk_ecc_regs {
 	ECC_ENCPAR00,
 	ECC_ENCIRQ_EN,
@@ -451,7 +459,7 @@ unsigned int mtk_ecc_get_parity_bits(struct mtk_ecc *ecc)
 EXPORT_SYMBOL(mtk_ecc_get_parity_bits);
 
 static const struct mtk_ecc_caps mtk_ecc_caps_mt2701 = {
-	.err_mask = 0x3f,
+	.err_mask = ECC_ERRMASK_MT2701,
 	.err_shift = 8,
 	.ecc_strength = ecc_strength_mt2701,
 	.ecc_regs = mt2701_ecc_regs,
@@ -462,7 +470,7 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt2701 = {
 };
 
 static const struct mtk_ecc_caps mtk_ecc_caps_mt2712 = {
-	.err_mask = 0x7f,
+	.err_mask = ECC_ERRMASK_MT2712,
 	.err_shift = 8,
 	.ecc_strength = ecc_strength_mt2712,
 	.ecc_regs = mt2712_ecc_regs,
@@ -473,7 +481,7 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt2712 = {
 };
 
 static const struct mtk_ecc_caps mtk_ecc_caps_mt7622 = {
-	.err_mask = 0x1f,
+	.err_mask = ECC_ERRMASK_MT7622,
 	.err_shift = 5,
 	.ecc_strength = ecc_strength_mt7622,
 	.ecc_regs = mt7622_ecc_regs,
@@ -483,6 +491,17 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt7622 = {
 	.pg_irq_sel = 0,
 };
 
+static const struct mtk_ecc_caps mtk_ecc_caps_mt7986 = {
+	.err_mask = ECC_ERRMASK_MT7622,
+	.err_shift = 8,
+	.ecc_strength = ecc_strength_mt7986,
+	.ecc_regs = mt2712_ecc_regs,
+	.num_ecc_strength = 11,
+	.ecc_mode_shift = 5,
+	.parity_bits = 14,
+	.pg_irq_sel = 1,
+};
+
 static const struct of_device_id mtk_ecc_dt_match[] = {
 	{
 		.compatible = "mediatek,mt2701-ecc",
@@ -493,6 +512,9 @@ static const struct of_device_id mtk_ecc_dt_match[] = {
 	}, {
 		.compatible = "mediatek,mt7622-ecc",
 		.data = &mtk_ecc_caps_mt7622,
+	}, {
+		.compatible = "mediatek,mt7986-ecc",
+		.data = &mtk_ecc_caps_mt7986,
 	},
 	{},
 };
-- 
2.25.1



From chu.stanley at gmail.com  Wed Dec  7 22:34:05 2022
From: chu.stanley at gmail.com (Stanley Chu)
Date: Thu, 8 Dec 2022 14:34:05 +0800
Subject: [PATCH v5] ufs: core: wlun suspend SSU/enter hibern8 fail recovery
In-Reply-To: <20221208061037.24313-1-peter.wang@mediatek.com>
References: <20221208061037.24313-1-peter.wang@mediatek.com>
Message-ID: <CAGaU9a_RCpoJggFUmtBmq-xx8EPAaabMK0ptA8y_nm5ahLTMUw@mail.gmail.com>

Hi Peter,

Please update the patch version and bring all tags (review, ack
...etc.) to your new patch : )

On Thu, Dec 8, 2022 at 2:17 PM <peter.wang at mediatek.com> wrote:
>
> From: Peter Wang <peter.wang at mediatek.com>
>
> When SSU/enter hibern8 fail in wlun suspend flow, trigger error
> handler and return busy to break the suspend.
> If not, wlun runtime pm status become error and the consumer will
> stuck in runtime suspend status.
>
> Fixes: b294ff3e3449 ("scsi: ufs: core: Enable power management for wlun")
> Cc: stable at vger.kernel.org
> Signed-off-by: Peter Wang <peter.wang at mediatek.com>
> ---
>  drivers/ufs/core/ufshcd.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
>
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index b1f59a5fe632..c91d58d1486a 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -106,6 +106,13 @@
>                        16, 4, buf, __len, false);                        \
>  } while (0)
>
> +#define ufshcd_force_error_recovery(hba) do {                           \
> +       spin_lock_irq(hba->host->host_lock);                            \
> +       hba->force_reset = true;                                        \
> +       ufshcd_schedule_eh_work(hba);                                   \
> +       spin_unlock_irq(hba->host->host_lock);                          \
> +} while (0)
> +
>  int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t len,
>                      const char *prefix)
>  {
> @@ -9049,6 +9056,15 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
>
>                 if (!hba->dev_info.b_rpm_dev_flush_capable) {
>                         ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
> +                       if (ret && pm_op != UFS_SHUTDOWN_PM) {
> +                               /*
> +                                * If return err in suspend flow, IO will hang.
> +                                * Trigger error handler and break suspend for
> +                                * error recovery.
> +                                */
> +                               ufshcd_force_error_recovery(hba);
> +                               ret = -EBUSY;
> +                       }
>                         if (ret)
>                                 goto enable_scaling;
>                 }
> @@ -9060,6 +9076,15 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
>          */
>         check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
>         ret = ufshcd_link_state_transition(hba, req_link_state, check_for_bkops);
> +       if (ret && pm_op != UFS_SHUTDOWN_PM) {
> +               /*
> +                * If return err in suspend flow, IO will hang.
> +                * Trigger error handler and break suspend for
> +                * error recovery.
> +                */
> +               ufshcd_force_error_recovery(hba);
> +               ret = -EBUSY;
> +       }
>         if (ret)
>                 goto set_dev_active;
>
> --
> 2.18.0
>


-- 
Yours truly,

??? (Stanley Chu)


From adrian.hunter at intel.com  Wed Dec  7 22:41:57 2022
From: adrian.hunter at intel.com (Adrian Hunter)
Date: Thu, 8 Dec 2022 08:41:57 +0200
Subject: [PATCH v5] ufs: core: wlun suspend SSU/enter hibern8 fail
 recovery
In-Reply-To: <20221208061037.24313-1-peter.wang@mediatek.com>
References: <20221208061037.24313-1-peter.wang@mediatek.com>
Message-ID: <ce72f874-f403-82cf-115e-55d08532bd66@intel.com>

On 8/12/22 08:10, peter.wang at mediatek.com wrote:
> From: Peter Wang <peter.wang at mediatek.com>
> 
> When SSU/enter hibern8 fail in wlun suspend flow, trigger error
> handler and return busy to break the suspend.
> If not, wlun runtime pm status become error and the consumer will
> stuck in runtime suspend status.
> 
> Fixes: b294ff3e3449 ("scsi: ufs: core: Enable power management for wlun")
> Cc: stable at vger.kernel.org
> Signed-off-by: Peter Wang <peter.wang at mediatek.com>
> ---
>  drivers/ufs/core/ufshcd.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index b1f59a5fe632..c91d58d1486a 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -106,6 +106,13 @@
>  		       16, 4, buf, __len, false);                        \
>  } while (0)
>  
> +#define ufshcd_force_error_recovery(hba) do {                           \
> +	spin_lock_irq(hba->host->host_lock);                            \
> +	hba->force_reset = true;                                        \
> +	ufshcd_schedule_eh_work(hba);                                   \
> +	spin_unlock_irq(hba->host->host_lock);                          \
> +} while (0)

Thanks for separating it out, but there is no reason to make this
a macro, so it should be a function, because functions offer nicer
structure and less chance of surprises. It need not be an inline
function either because the compiler can determine that, and this
is not a hot path. i.e.

static void ufshcd_force_error_recovery(struct ufs_hba *hba)
{
	spin_lock_irq(hba->host->host_lock);
	hba->force_reset = true;
	ufshcd_schedule_eh_work(hba);
	spin_unlock_irq(hba->host->host_lock);
}

> +
>  int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t len,
>  		     const char *prefix)
>  {
> @@ -9049,6 +9056,15 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
>  
>  		if (!hba->dev_info.b_rpm_dev_flush_capable) {
>  			ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
> +			if (ret && pm_op != UFS_SHUTDOWN_PM) {
> +				/*
> +				 * If return err in suspend flow, IO will hang.
> +				 * Trigger error handler and break suspend for
> +				 * error recovery.
> +				 */
> +				ufshcd_force_error_recovery(hba);
> +				ret = -EBUSY;
> +			}
>  			if (ret)
>  				goto enable_scaling;
>  		}
> @@ -9060,6 +9076,15 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
>  	 */
>  	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
>  	ret = ufshcd_link_state_transition(hba, req_link_state, check_for_bkops);
> +	if (ret && pm_op != UFS_SHUTDOWN_PM) {
> +		/*
> +		 * If return err in suspend flow, IO will hang.
> +		 * Trigger error handler and break suspend for
> +		 * error recovery.
> +		 */
> +		ufshcd_force_error_recovery(hba);
> +		ret = -EBUSY;
> +	}
>  	if (ret)
>  		goto set_dev_active;
>  



From xiangsheng.hou at mediatek.com  Wed Dec  7 22:29:46 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Thu, 8 Dec 2022 14:29:46 +0800
Subject: [PATCH v3 0/9] Add MediaTek MT7986 SPI NAND and ECC support
Message-ID: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>

Changes since V2:
 - Change ECC err_mask value with GENMASK macro.
 - Change snfi mediatek,rx-latch-latency to mediatek,rx-latch-latency-ns.
 - Add a separate patch for DTS change.
 - Move common description to top-level pattern properties.
 - Drop redundant parts in dt-bindings.

Changes since V1:
 - Use existing sample delay property.
 - Add restricting for optional nfi_hclk.
 - Improve and perfect dt-bindings documentation.
 - Change existing node name to match NAND controller DT bingings.
 - Fix issues reported by dt_binding_check.
 - Fix issues reported by dtbs_check.

Xiangsheng Hou (9):
  spi: mtk-snfi: Change default page format to setup default setting
  spi: mtk-snfi: Add optional nfi_hclk which is needed for MT7986
  mtd: nand: ecc-mtk: Add ECC support fot MT7986 IC
  dt-bindings: spi: mtk-snfi: Add compatible for MT7986
  spi: mtk-snfi: Add snfi sample delay and read latency adjustment
  dt-bindings: spi: mtk-snfi: Add read latch latency property
  dt-bindings: mtd: Split ECC engine with rawnand controller
  arm/arm64: dts: mediatek: Fix existing NAND controller node name
  dt-bindings: mtd: mediatek,nand-ecc-engine: Add compatible for MT7986

 .../bindings/mtd/mediatek,mtk-nfc.yaml        | 154 +++++++++++++++
 .../mtd/mediatek,nand-ecc-engine.yaml         |  63 +++++++
 .../devicetree/bindings/mtd/mtk-nand.txt      | 176 ------------------
 .../bindings/spi/mediatek,spi-mtk-snfi.yaml   |  54 +++++-
 arch/arm/boot/dts/mt2701.dtsi                 |   2 +-
 arch/arm64/boot/dts/mediatek/mt2712e.dtsi     |   2 +-
 arch/arm64/boot/dts/mediatek/mt7622.dtsi      |   2 +-
 drivers/mtd/nand/ecc-mtk.c                    |  28 ++-
 drivers/spi/spi-mtk-snfi.c                    |  41 +++-
 9 files changed, 329 insertions(+), 193 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
 delete mode 100644 Documentation/devicetree/bindings/mtd/mtk-nand.txt

-- 
2.25.1



From peter.wang at mediatek.com  Wed Dec  7 23:03:07 2022
From: peter.wang at mediatek.com (=?utf-8?B?UGV0ZXIgV2FuZyAo546L5L+h5Y+LKQ==?=)
Date: Thu, 8 Dec 2022 07:03:07 +0000
Subject: [PATCH v5] ufs: core: wlun suspend SSU/enter hibern8 fail
 recovery
In-Reply-To: <ce72f874-f403-82cf-115e-55d08532bd66@intel.com>
References: <20221208061037.24313-1-peter.wang@mediatek.com>
	 <ce72f874-f403-82cf-115e-55d08532bd66@intel.com>
Message-ID: <1c5f2847e7237e3e12bcdf8d2d981d5c161d35f9.camel@mediatek.com>

On Thu, 2022-12-08 at 08:41 +0200, Adrian Hunter wrote:
> On 8/12/22 08:10, peter.wang at mediatek.com wrote:
> > From: Peter Wang <peter.wang at mediatek.com>
> > 
> > When SSU/enter hibern8 fail in wlun suspend flow, trigger error
> > handler and return busy to break the suspend.
> > If not, wlun runtime pm status become error and the consumer will
> > stuck in runtime suspend status.
> > 
> > Fixes: b294ff3e3449 ("scsi: ufs: core: Enable power management for
> > wlun")
> > Cc: stable at vger.kernel.org
> > Signed-off-by: Peter Wang <peter.wang at mediatek.com>
> > ---
> >  drivers/ufs/core/ufshcd.c | 25 +++++++++++++++++++++++++
> >  1 file changed, 25 insertions(+)
> > 
> > diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> > index b1f59a5fe632..c91d58d1486a 100644
> > --- a/drivers/ufs/core/ufshcd.c
> > +++ b/drivers/ufs/core/ufshcd.c
> > @@ -106,6 +106,13 @@
> >  		       16, 4, buf, __len,
> > false);                        \
> >  } while (0)
> >  
> > +#define ufshcd_force_error_recovery(hba) do
> > {                           \
> > +	spin_lock_irq(hba->host-
> > >host_lock);                            \
> > +	hba->force_reset =
> > true;                                        \
> > +	ufshcd_schedule_eh_work(hba);                                  
> >  \
> > +	spin_unlock_irq(hba->host-
> > >host_lock);                          \
> > +} while (0)
> 
> Thanks for separating it out, but there is no reason to make this
> a macro, so it should be a function, because functions offer nicer
> structure and less chance of surprises. It need not be an inline
> function either because the compiler can determine that, and this
> is not a hot path. i.e.
> 
> static void ufshcd_force_error_recovery(struct ufs_hba *hba)
> {
> 	spin_lock_irq(hba->host->host_lock);
> 	hba->force_reset = true;
> 	ufshcd_schedule_eh_work(hba);
> 	spin_unlock_irq(hba->host->host_lock);
> }
> 

Hi Adrian,

Okay, will change to static function next version, 
Thank you very much. :)

Peter


> > +
> >  int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t
> > len,
> >  		     const char *prefix)
> >  {
> > @@ -9049,6 +9056,15 @@ static int __ufshcd_wl_suspend(struct
> > ufs_hba *hba, enum ufs_pm_op pm_op)
> >  
> >  		if (!hba->dev_info.b_rpm_dev_flush_capable) {
> >  			ret = ufshcd_set_dev_pwr_mode(hba,
> > req_dev_pwr_mode);
> > +			if (ret && pm_op != UFS_SHUTDOWN_PM) {
> > +				/*
> > +				 * If return err in suspend flow, IO
> > will hang.
> > +				 * Trigger error handler and break
> > suspend for
> > +				 * error recovery.
> > +				 */
> > +				ufshcd_force_error_recovery(hba);
> > +				ret = -EBUSY;
> > +			}
> >  			if (ret)
> >  				goto enable_scaling;
> >  		}
> > @@ -9060,6 +9076,15 @@ static int __ufshcd_wl_suspend(struct
> > ufs_hba *hba, enum ufs_pm_op pm_op)
> >  	 */
> >  	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
> >  	ret = ufshcd_link_state_transition(hba, req_link_state,
> > check_for_bkops);
> > +	if (ret && pm_op != UFS_SHUTDOWN_PM) {
> > +		/*
> > +		 * If return err in suspend flow, IO will hang.
> > +		 * Trigger error handler and break suspend for
> > +		 * error recovery.
> > +		 */
> > +		ufshcd_force_error_recovery(hba);
> > +		ret = -EBUSY;
> > +	}
> >  	if (ret)
> >  		goto set_dev_active;
> >  
> 
> 

From xiangsheng.hou at mediatek.com  Wed Dec  7 22:29:47 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Thu, 8 Dec 2022 14:29:47 +0800
Subject: [PATCH v3 1/9] spi: mtk-snfi: Change default page format to setup default setting
In-Reply-To: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221208062955.2546-2-xiangsheng.hou@mediatek.com>

Change default page format to setup default setting since the sector
size 1024 on MT7986 will lead to probe fail.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 drivers/spi/spi-mtk-snfi.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index fa8412ba20e2..719fc6f53ab1 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -1430,8 +1430,7 @@ static int mtk_snand_probe(struct platform_device *pdev)
 
 	// setup an initial page format for ops matching page_cache_op template
 	// before ECC is called.
-	ret = mtk_snand_setup_pagefmt(ms, ms->caps->sector_size,
-				      ms->caps->spare_sizes[0]);
+	ret = mtk_snand_setup_pagefmt(ms, SZ_2K, SZ_64);
 	if (ret) {
 		dev_err(ms->dev, "failed to set initial page format\n");
 		goto disable_clk;
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Wed Dec  7 22:29:48 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Thu, 8 Dec 2022 14:29:48 +0800
Subject: [PATCH v3 2/9] spi: mtk-snfi: Add optional nfi_hclk which is needed for MT7986
In-Reply-To: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221208062955.2546-3-xiangsheng.hou@mediatek.com>

Add optional nfi_hclk which is needed for MT7986.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/spi/spi-mtk-snfi.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index 719fc6f53ab1..85644308df23 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -297,6 +297,7 @@ struct mtk_snand {
 	struct device *dev;
 	struct clk *nfi_clk;
 	struct clk *pad_clk;
+	struct clk *nfi_hclk;
 	void __iomem *nfi_base;
 	int irq;
 	struct completion op_done;
@@ -1339,7 +1340,16 @@ static int mtk_snand_enable_clk(struct mtk_snand *ms)
 		dev_err(ms->dev, "unable to enable pad clk\n");
 		goto err1;
 	}
+	ret = clk_prepare_enable(ms->nfi_hclk);
+	if (ret) {
+		dev_err(ms->dev, "unable to enable nfi hclk\n");
+		goto err2;
+	}
+
 	return 0;
+
+err2:
+	clk_disable_unprepare(ms->pad_clk);
 err1:
 	clk_disable_unprepare(ms->nfi_clk);
 	return ret;
@@ -1347,6 +1357,7 @@ static int mtk_snand_enable_clk(struct mtk_snand *ms)
 
 static void mtk_snand_disable_clk(struct mtk_snand *ms)
 {
+	clk_disable_unprepare(ms->nfi_hclk);
 	clk_disable_unprepare(ms->pad_clk);
 	clk_disable_unprepare(ms->nfi_clk);
 }
@@ -1401,6 +1412,13 @@ static int mtk_snand_probe(struct platform_device *pdev)
 		goto release_ecc;
 	}
 
+	ms->nfi_hclk = devm_clk_get_optional(&pdev->dev, "nfi_hclk");
+	if (IS_ERR(ms->nfi_hclk)) {
+		ret = PTR_ERR(ms->nfi_hclk);
+		dev_err(&pdev->dev, "unable to get nfi_hclk, err = %d\n", ret);
+		goto release_ecc;
+	}
+
 	ret = mtk_snand_enable_clk(ms);
 	if (ret)
 		goto release_ecc;
-- 
2.25.1



From peter.wang at mediatek.com  Wed Dec  7 23:25:20 2022
From: peter.wang at mediatek.com (peter.wang at mediatek.com)
Date: Thu, 8 Dec 2022 15:25:20 +0800
Subject: [PATCH v6] ufs: core: wlun suspend SSU/enter hibern8 fail recovery
Message-ID: <20221208072520.26210-1-peter.wang@mediatek.com>

From: Peter Wang <peter.wang at mediatek.com>

When SSU/enter hibern8 fail in wlun suspend flow, trigger error
handler and return busy to break the suspend.
If not, wlun runtime pm status become error and the consumer will
stuck in runtime suspend status.

Fixes: b294ff3e3449 ("scsi: ufs: core: Enable power management for wlun")
Cc: stable at vger.kernel.org
Signed-off-by: Peter Wang <peter.wang at mediatek.com>
Reviewed-by: Stanley Chu <stanley.chu at mediatek.com>
Reviewed-by: Bart Van Assche <bvanassche at acm.org>
Reviewed-by: Adrian Hunter <adrian.hunter at intel.com>
---
 drivers/ufs/core/ufshcd.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index b1f59a5fe632..31ed3fdb5266 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -6070,6 +6070,14 @@ void ufshcd_schedule_eh_work(struct ufs_hba *hba)
 	}
 }
 
+static void ufshcd_force_error_recovery(struct ufs_hba *hba) 
+{
+	spin_lock_irq(hba->host->host_lock);
+	hba->force_reset = true;
+	ufshcd_schedule_eh_work(hba);
+	spin_unlock_irq(hba->host->host_lock);
+}
+
 static void ufshcd_clk_scaling_allow(struct ufs_hba *hba, bool allow)
 {
 	down_write(&hba->clk_scaling_lock);
@@ -9049,6 +9057,15 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 
 		if (!hba->dev_info.b_rpm_dev_flush_capable) {
 			ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
+			if (ret && pm_op != UFS_SHUTDOWN_PM) {
+				/*
+				 * If return err in suspend flow, IO will hang.
+				 * Trigger error handler and break suspend for
+				 * error recovery.
+				 */
+				ufshcd_force_error_recovery(hba);
+				ret = -EBUSY;
+			}
 			if (ret)
 				goto enable_scaling;
 		}
@@ -9060,6 +9077,15 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	 */
 	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
 	ret = ufshcd_link_state_transition(hba, req_link_state, check_for_bkops);
+	if (ret && pm_op != UFS_SHUTDOWN_PM) {
+		/*
+		 * If return err in suspend flow, IO will hang.
+		 * Trigger error handler and break suspend for
+		 * error recovery.
+		 */
+		ufshcd_force_error_recovery(hba);
+		ret = -EBUSY;
+	}
 	if (ret)
 		goto set_dev_active;
 
-- 
2.18.0



From gregkh at linuxfoundation.org  Thu Dec  8 00:02:53 2022
From: gregkh at linuxfoundation.org (Greg KH)
Date: Thu, 8 Dec 2022 09:02:53 +0100
Subject: [PATCH v6] ufs: core: wlun suspend SSU/enter hibern8 fail
 recovery
In-Reply-To: <20221208072520.26210-1-peter.wang@mediatek.com>
References: <20221208072520.26210-1-peter.wang@mediatek.com>
Message-ID: <Y5GaLX6AYEtHFU9F@kroah.com>

On Thu, Dec 08, 2022 at 03:25:20PM +0800, peter.wang at mediatek.com wrote:
> From: Peter Wang <peter.wang at mediatek.com>
> 
> When SSU/enter hibern8 fail in wlun suspend flow, trigger error
> handler and return busy to break the suspend.
> If not, wlun runtime pm status become error and the consumer will
> stuck in runtime suspend status.
> 
> Fixes: b294ff3e3449 ("scsi: ufs: core: Enable power management for wlun")
> Cc: stable at vger.kernel.org
> Signed-off-by: Peter Wang <peter.wang at mediatek.com>
> Reviewed-by: Stanley Chu <stanley.chu at mediatek.com>
> Reviewed-by: Bart Van Assche <bvanassche at acm.org>
> Reviewed-by: Adrian Hunter <adrian.hunter at intel.com>
> ---
>  drivers/ufs/core/ufshcd.c | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index b1f59a5fe632..31ed3fdb5266 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -6070,6 +6070,14 @@ void ufshcd_schedule_eh_work(struct ufs_hba *hba)
>  	}
>  }
>  
> +static void ufshcd_force_error_recovery(struct ufs_hba *hba) 
> +{
> +	spin_lock_irq(hba->host->host_lock);
> +	hba->force_reset = true;
> +	ufshcd_schedule_eh_work(hba);
> +	spin_unlock_irq(hba->host->host_lock);
> +}
> +
>  static void ufshcd_clk_scaling_allow(struct ufs_hba *hba, bool allow)
>  {
>  	down_write(&hba->clk_scaling_lock);
> @@ -9049,6 +9057,15 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
>  
>  		if (!hba->dev_info.b_rpm_dev_flush_capable) {
>  			ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
> +			if (ret && pm_op != UFS_SHUTDOWN_PM) {
> +				/*
> +				 * If return err in suspend flow, IO will hang.
> +				 * Trigger error handler and break suspend for
> +				 * error recovery.
> +				 */
> +				ufshcd_force_error_recovery(hba);
> +				ret = -EBUSY;
> +			}
>  			if (ret)
>  				goto enable_scaling;
>  		}
> @@ -9060,6 +9077,15 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
>  	 */
>  	check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
>  	ret = ufshcd_link_state_transition(hba, req_link_state, check_for_bkops);
> +	if (ret && pm_op != UFS_SHUTDOWN_PM) {
> +		/*
> +		 * If return err in suspend flow, IO will hang.
> +		 * Trigger error handler and break suspend for
> +		 * error recovery.
> +		 */
> +		ufshcd_force_error_recovery(hba);
> +		ret = -EBUSY;
> +	}
>  	if (ret)
>  		goto set_dev_active;
>  
> -- 
> 2.18.0
> 

Hi,

This is the friendly patch-bot of Greg Kroah-Hartman.  You have sent him
a patch that has triggered this response.  He used to manually respond
to these common problems, but in order to save his sanity (he kept
writing the same thing over and over, yet to different people), I was
created.  Hopefully you will not take offence and will fix the problem
in your patch and resubmit it so that it can be accepted into the Linux
kernel tree.

You are receiving this message because of the following common error(s)
as indicated below:

- This looks like a new version of a previously submitted patch, but you
  did not list below the --- line any changes from the previous version.
  Please read the section entitled "The canonical patch format" in the
  kernel file, Documentation/SubmittingPatches for what needs to be done
  here to properly describe this.

If you wish to discuss this problem further, or you have questions about
how to resolve this issue, please feel free to respond to this email and
Greg will reply once he has dug out from the pending patches received
from other developers.

thanks,

greg k-h's patch email bot


From leon at kernel.org  Thu Dec  8 00:44:21 2022
From: leon at kernel.org (Leon Romanovsky)
Date: Thu, 8 Dec 2022 10:44:21 +0200
Subject: [PATCH v3 net-next 1/2] net: ethernet: mtk_wed: fix some
 possible NULL pointer dereferences
In-Reply-To: <44cba2491b6dd1a64d0e8099efbab836e6758490.1670421354.git.lorenzo@kernel.org>
References: <cover.1670421354.git.lorenzo@kernel.org>
 <44cba2491b6dd1a64d0e8099efbab836e6758490.1670421354.git.lorenzo@kernel.org>
Message-ID: <Y5Gj5fgVmQLRdorx@unreal>

On Wed, Dec 07, 2022 at 03:04:54PM +0100, Lorenzo Bianconi wrote:
> Fix possible NULL pointer dereference in mtk_wed_detach routine checking
> wo pointer is properly allocated before running mtk_wed_wo_reset() and
> mtk_wed_wo_deinit().
> Even if it is just a theoretical issue at the moment check wo pointer is
> not NULL in mtk_wed_mcu_msg_update.
> Moreover, honor mtk_wed_mcu_send_msg return value in mtk_wed_wo_reset()
> 
> Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
> Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
> Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> ---
>  drivers/net/ethernet/mediatek/mtk_wed.c     | 13 ++++++++-----
>  drivers/net/ethernet/mediatek/mtk_wed_mcu.c |  3 +++
>  2 files changed, 11 insertions(+), 5 deletions(-)
> 

Thanks,
Reviewed-by: Leon Romanovsky <leonro at nvidia.com>


From leon at kernel.org  Thu Dec  8 00:44:31 2022
From: leon at kernel.org (Leon Romanovsky)
Date: Thu, 8 Dec 2022 10:44:31 +0200
Subject: [PATCH v3 net-next 2/2] net: ethernet: mtk_wed: fix possible
 deadlock if mtk_wed_wo_init fails
In-Reply-To: <b28b55a639002a56b77c0651a4122ebede041936.1670421354.git.lorenzo@kernel.org>
References: <cover.1670421354.git.lorenzo@kernel.org>
 <b28b55a639002a56b77c0651a4122ebede041936.1670421354.git.lorenzo@kernel.org>
Message-ID: <Y5Gj7y0412M9zNpD@unreal>

On Wed, Dec 07, 2022 at 03:04:55PM +0100, Lorenzo Bianconi wrote:
> Introduce __mtk_wed_detach() in order to avoid a deadlock in
> mtk_wed_attach routine if mtk_wed_wo_init fails since both
> mtk_wed_attach and mtk_wed_detach run holding hw_lock mutex.
> 
> Fixes: 4c5de09eb0d0 ("net: ethernet: mtk_wed: add configure wed wo support")
> Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
> ---
>  drivers/net/ethernet/mediatek/mtk_wed.c | 17 ++++++++++++-----
>  1 file changed, 12 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
> index 4ef23eadd69e..a6271449617f 100644
> --- a/drivers/net/ethernet/mediatek/mtk_wed.c
> +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
> @@ -577,12 +577,10 @@ mtk_wed_deinit(struct mtk_wed_device *dev)
>  }
>  

Thanks,
Reviewed-by: Leon Romanovsky <leonro at nvidia.com>


From krzysztof.kozlowski at linaro.org  Thu Dec  8 00:46:26 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Thu, 8 Dec 2022 09:46:26 +0100
Subject: [PATCH v2 7/9] dt-bindings: spi: mtk-snfi: Add read latch latency
 property
In-Reply-To: <97408c484927b6520ec79b23220496d628156e5f.camel@mediatek.com>
References: <20221205065756.26875-1-xiangsheng.hou@mediatek.com>
 <20221205065756.26875-8-xiangsheng.hou@mediatek.com>
 <ce449a0c-efcc-0ac1-fb8e-c2b4148a5bc1@collabora.com>
 <a8f706b37f5decf91bfa9a9ac8cf04be4346dd85.camel@mediatek.com>
 <9992c9a5-059a-9396-32ce-7ed63cd12a96@collabora.com>
 <e2ccf42f94152ccacad3a2eaec234ae0566474ec.camel@mediatek.com>
 <b877af37-462e-c923-41c0-09c370062700@collabora.com>
 <97408c484927b6520ec79b23220496d628156e5f.camel@mediatek.com>
Message-ID: <d5f58e82-2644-3e16-f27a-de72ed8ab74d@linaro.org>

On 08/12/2022 02:15, Xiangsheng Hou (???) wrote:
>>>
>>> There have two rx related timing properties in spi-peripheral-
>>> props.
>>> The rx-sample-delay-ns have been used in Mediatek snfi driver to
>>> adjust
>>> controller sample delay.
>>> However another spi-rx-delay-us is in microseconds. Take 52MHz for
>>> example, the clock cycle will be 19.23ns which lower than 1us. This
>>> may
>>> not easy to by one clock cycle.
>>>
>>
>> I agree, but nothing prevents you from adding your own property for
>> that.
>>
>> I propose "mediatek,rx-latch-latency-ns" or "mediatek,rx-latency-ns", 
>> so that
>> we can specify the delay in nanoseconds: in that case, when we
>> specify 19ns,
>> the driver will safely round that resulting in 52MHz == 19.23ns =>
>> 19ns valid.
> 
> Will be fixed in next series.

I am fine with this approach, but after explanations I was also fine
with clock cycles as unit. It's still quite specific unit and I think
several timings on buses are clock-cycle dependent, not time dependent.

Best regards,
Krzysztof



From krzysztof.kozlowski at linaro.org  Thu Dec  8 01:44:17 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Thu, 8 Dec 2022 10:44:17 +0100
Subject: [PATCH v3 7/9] dt-bindings: mtd: Split ECC engine with rawnand
 controller
In-Reply-To: <20221208062955.2546-8-xiangsheng.hou@mediatek.com>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
 <20221208062955.2546-8-xiangsheng.hou@mediatek.com>
Message-ID: <fe70d964-229a-8bda-a414-e009dd955e5e@linaro.org>

On 08/12/2022 07:29, Xiangsheng Hou wrote:
> Split MediaTek ECC engine with rawnand controller and convert to
> YAML schema.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> ---
>  .../bindings/mtd/mediatek,mtk-nfc.yaml        | 154 +++++++++++++++
>  .../mtd/mediatek,nand-ecc-engine.yaml         |  62 ++++++
>  .../devicetree/bindings/mtd/mtk-nand.txt      | 176 ------------------
>  3 files changed, 216 insertions(+), 176 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
>  create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
>  delete mode 100644 Documentation/devicetree/bindings/mtd/mtk-nand.txt
> 
> diff --git a/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
> new file mode 100644
> index 000000000000..eb1a44c7ae4e
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
> @@ -0,0 +1,154 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/mtd/mediatek,mtk-nfc.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: MediaTek(MTK) SoCs raw NAND FLASH controller (NFC)
> +
> +maintainers:
> +  - Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> +
> +properties:
> +  compatible:
> +    enum:
> +      - mediatek,mt2701-nfc
> +      - mediatek,mt2712-nfc
> +      - mediatek,mt7622-nfc
> +
> +  reg:
> +    items:
> +      - description: Base physical address and size of NFI.
> +
> +  interrupts:
> +    items:
> +      - description: NFI interrupt
> +
> +  clocks:
> +    items:
> +      - description: clock used for the controller
> +      - description: clock used for the pad
> +
> +  clock-names:
> +    items:
> +      - const: nfi_clk
> +      - const: pad_clk
> +
> +  ecc-engine:
> +    description: device-tree node of the required ECC engine.
> +    $ref: /schemas/types.yaml#/definitions/phandle
> +
> +patternProperties:
> +  "^nand@[a-f0-9]$":
> +    type: object

This should be instead:
    $ref: nand-chip.yaml#
    unevaluatedProperties: false

and then properties below (due to current dtschema limitations) should
list properties from nand-controller.yaml:

      nand-on-flash-bbt: true

Optionally, we could create additional schema - nand-controller-chip,
which would be referenced directly by nand-controller and itself would
ref nand-chip.

> +    properties:
> +      reg:
> +        minimum: 0

no need, 0 is the minimum.

> +        maximum: 1
> +      nand-ecc-mode:
> +        const: hw
> +
> +allOf:
> +  - $ref: nand-controller.yaml#
> +
> +  - if:

Best regards,
Krzysztof



From krzysztof.kozlowski at linaro.org  Thu Dec  8 01:44:40 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Thu, 8 Dec 2022 10:44:40 +0100
Subject: [PATCH v3 9/9] dt-bindings: mtd: mediatek,nand-ecc-engine: Add
 compatible for MT7986
In-Reply-To: <20221208062955.2546-10-xiangsheng.hou@mediatek.com>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
 <20221208062955.2546-10-xiangsheng.hou@mediatek.com>
Message-ID: <4dd69cca-3ae1-7fda-b1ad-01087449afa0@linaro.org>

On 08/12/2022 07:29, Xiangsheng Hou wrote:
> Add dt-bindings documentation of ECC for MediaTek MT7986 SoC
> platform.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>


Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Best regards,
Krzysztof



From miquel.raynal at bootlin.com  Thu Dec  8 02:00:35 2022
From: miquel.raynal at bootlin.com (Miquel Raynal)
Date: Thu, 8 Dec 2022 11:00:35 +0100
Subject: [PATCH v3 7/9] dt-bindings: mtd: Split ECC engine with rawnand
 controller
In-Reply-To: <fe70d964-229a-8bda-a414-e009dd955e5e@linaro.org>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
	<20221208062955.2546-8-xiangsheng.hou@mediatek.com>
	<fe70d964-229a-8bda-a414-e009dd955e5e@linaro.org>
Message-ID: <20221208110035.5649a051@xps-13>

Hi Krzysztof,

krzysztof.kozlowski at linaro.org wrote on Thu, 8 Dec 2022 10:44:17 +0100:

> On 08/12/2022 07:29, Xiangsheng Hou wrote:
> > Split MediaTek ECC engine with rawnand controller and convert to
> > YAML schema.
> > 
> > Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> > ---
> >  .../bindings/mtd/mediatek,mtk-nfc.yaml        | 154 +++++++++++++++
> >  .../mtd/mediatek,nand-ecc-engine.yaml         |  62 ++++++
> >  .../devicetree/bindings/mtd/mtk-nand.txt      | 176 ------------------
> >  3 files changed, 216 insertions(+), 176 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
> >  create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
> >  delete mode 100644 Documentation/devicetree/bindings/mtd/mtk-nand.txt
> > 
> > diff --git a/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
> > new file mode 100644
> > index 000000000000..eb1a44c7ae4e
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
> > @@ -0,0 +1,154 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/mtd/mediatek,mtk-nfc.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: MediaTek(MTK) SoCs raw NAND FLASH controller (NFC)
> > +
> > +maintainers:
> > +  - Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> > +
> > +properties:
> > +  compatible:
> > +    enum:
> > +      - mediatek,mt2701-nfc
> > +      - mediatek,mt2712-nfc
> > +      - mediatek,mt7622-nfc
> > +
> > +  reg:
> > +    items:
> > +      - description: Base physical address and size of NFI.
> > +
> > +  interrupts:
> > +    items:
> > +      - description: NFI interrupt
> > +
> > +  clocks:
> > +    items:
> > +      - description: clock used for the controller
> > +      - description: clock used for the pad
> > +
> > +  clock-names:
> > +    items:
> > +      - const: nfi_clk
> > +      - const: pad_clk
> > +
> > +  ecc-engine:
> > +    description: device-tree node of the required ECC engine.
> > +    $ref: /schemas/types.yaml#/definitions/phandle
> > +
> > +patternProperties:
> > +  "^nand@[a-f0-9]$":
> > +    type: object  
> 
> This should be instead:
>     $ref: nand-chip.yaml#
>     unevaluatedProperties: false
> 
> and then properties below (due to current dtschema limitations) should
> list properties from nand-controller.yaml:
> 
>       nand-on-flash-bbt: true
> 
> Optionally, we could create additional schema - nand-controller-chip,
> which would be referenced directly by nand-controller and itself would
> ref nand-chip.

Isn't this enough? (in linux-next)
https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git/tree/Documentation/devicetree/bindings/mtd/nand-controller.yaml?h=mtd/next#n54

Thanks,
Miqu?l


From lee at kernel.org  Thu Dec  8 02:16:22 2022
From: lee at kernel.org (Lee Jones)
Date: Thu, 8 Dec 2022 10:16:22 +0000
Subject: [PATCH] dt-bindings: Add missing 'unevaluatedProperties' to
 regulator nodes
In-Reply-To: <20221206211554.92005-1-robh@kernel.org>
References: <20221206211554.92005-1-robh@kernel.org>
Message-ID: <Y5G5duIqBYuEXqJU@google.com>

On Tue, 06 Dec 2022, Rob Herring wrote:

> Several regulator schemas are missing 'unevaluatedProperties' constraint
> which means any extra properties are allowed. Upon adding the
> constraint, there's numerous warnings from using the deprecated
> 'regulator-compatible' property. Remove the usage as examples shouldn't
> be using long since deprecated properties.
> 
> Signed-off-by: Rob Herring <robh at kernel.org>
> ---
> I'd suggest that Mark take this if that's okay with Lee. Or I can take 
> it.

No problem from my side.

>  Documentation/devicetree/bindings/mfd/max77650.yaml  |  2 --
>  .../devicetree/bindings/mfd/mediatek,mt6360.yaml     |  9 ---------
>  .../bindings/power/supply/mt6360_charger.yaml        |  2 +-
>  .../bindings/regulator/max77650-regulator.yaml       |  1 +
>  .../devicetree/bindings/regulator/max8660.yaml       |  6 +-----
>  .../bindings/regulator/mt6360-regulator.yaml         | 12 +++---------
>  6 files changed, 6 insertions(+), 26 deletions(-)

Acked-by: Lee Jones <lee at kernel.org>

-- 
Lee Jones [???]


From krzysztof.kozlowski at linaro.org  Thu Dec  8 02:27:27 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Thu, 8 Dec 2022 11:27:27 +0100
Subject: [PATCH v3 7/9] dt-bindings: mtd: Split ECC engine with rawnand
 controller
In-Reply-To: <20221208110035.5649a051@xps-13>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
 <20221208062955.2546-8-xiangsheng.hou@mediatek.com>
 <fe70d964-229a-8bda-a414-e009dd955e5e@linaro.org>
 <20221208110035.5649a051@xps-13>
Message-ID: <f3e3a3d0-6d21-c782-38a2-c8b2c36242c3@linaro.org>

On 08/12/2022 11:00, Miquel Raynal wrote:
> Hi Krzysztof,
> 
> krzysztof.kozlowski at linaro.org wrote on Thu, 8 Dec 2022 10:44:17 +0100:
> 
>> On 08/12/2022 07:29, Xiangsheng Hou wrote:
>>> Split MediaTek ECC engine with rawnand controller and convert to
>>> YAML schema.
>>>
>>> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
>>> ---
>>>  .../bindings/mtd/mediatek,mtk-nfc.yaml        | 154 +++++++++++++++
>>>  .../mtd/mediatek,nand-ecc-engine.yaml         |  62 ++++++
>>>  .../devicetree/bindings/mtd/mtk-nand.txt      | 176 ------------------
>>>  3 files changed, 216 insertions(+), 176 deletions(-)
>>>  create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
>>>  create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
>>>  delete mode 100644 Documentation/devicetree/bindings/mtd/mtk-nand.txt
>>>
>>> diff --git a/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
>>> new file mode 100644
>>> index 000000000000..eb1a44c7ae4e
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
>>> @@ -0,0 +1,154 @@
>>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>>> +%YAML 1.2
>>> +---
>>> +$id: http://devicetree.org/schemas/mtd/mediatek,mtk-nfc.yaml#
>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>>> +
>>> +title: MediaTek(MTK) SoCs raw NAND FLASH controller (NFC)
>>> +
>>> +maintainers:
>>> +  - Xiangsheng Hou <xiangsheng.hou at mediatek.com>
>>> +
>>> +properties:
>>> +  compatible:
>>> +    enum:
>>> +      - mediatek,mt2701-nfc
>>> +      - mediatek,mt2712-nfc
>>> +      - mediatek,mt7622-nfc
>>> +
>>> +  reg:
>>> +    items:
>>> +      - description: Base physical address and size of NFI.
>>> +
>>> +  interrupts:
>>> +    items:
>>> +      - description: NFI interrupt
>>> +
>>> +  clocks:
>>> +    items:
>>> +      - description: clock used for the controller
>>> +      - description: clock used for the pad
>>> +
>>> +  clock-names:
>>> +    items:
>>> +      - const: nfi_clk
>>> +      - const: pad_clk
>>> +
>>> +  ecc-engine:
>>> +    description: device-tree node of the required ECC engine.
>>> +    $ref: /schemas/types.yaml#/definitions/phandle
>>> +
>>> +patternProperties:
>>> +  "^nand@[a-f0-9]$":
>>> +    type: object  
>>
>> This should be instead:
>>     $ref: nand-chip.yaml#
>>     unevaluatedProperties: false
>>
>> and then properties below (due to current dtschema limitations) should
>> list properties from nand-controller.yaml:
>>
>>       nand-on-flash-bbt: true
>>
>> Optionally, we could create additional schema - nand-controller-chip,
>> which would be referenced directly by nand-controller and itself would
>> ref nand-chip.
> 
> Isn't this enough? (in linux-next)
> https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git/tree/Documentation/devicetree/bindings/mtd/nand-controller.yaml?h=mtd/next#n54

No, I tested it and it does not work as intended. In this particular
case. I think this is a limitation of dtschema, because binding itself
looks fine. The problem is that you have:
1. mtk-nfc having nand@ children. mtk-nfc references nand-controller
which brings these children.
2. However nand-controller while bringing these children does two things:
a. ref: nand-chip
b. add more propeties

3. The mtk-nfc must further extend the nand@ child.
4. If you add "unevaluatedProperties: false" you notice warnings of
unevaluated propertie from nand-controller children.

Best regards,
Krzysztof



From Howard-YH.Hsu at mediatek.com  Thu Dec  8 04:44:11 2022
From: Howard-YH.Hsu at mediatek.com (=?utf-8?B?SG93YXJkLVlIIEhzdSAo6Kix6IKy6LGqKQ==?=)
Date: Thu, 8 Dec 2022 12:44:11 +0000
Subject: [PATCH v2 1/3] wifi: mt76: mt7915: rework
 mt7915_thermal_set_cur_throttle_state()
In-Reply-To: <8e8cfe60-c040-bf02-665b-a980852864aa@green-communications.fr>
References: <20221207052500.10855-1-howard-yh.hsu@mediatek.com>
	 <20221207052500.10855-2-howard-yh.hsu@mediatek.com>
	 <8e8cfe60-c040-bf02-665b-a980852864aa@green-communications.fr>
Message-ID: <1813da6bd8bf9448474ee0f61c23ba4d07470c55.camel@mediatek.com>

On Wed, 2022-12-07 at 09:15 +0100, Nicolas Cavallari wrote:
> On 07/12/2022 06:24, Howard Hsu wrote:
> > This patch includes 3 changes:
> > 1. The maximum throttle state can be set to 100 to fix the problem
> > that
> > thermal_protect_disable can never be triggered.
> 
> You are modifying the cooling_device part.  The cooling_device is 
> explicitly configured to have a max state of
> MT7915_CDEV_THROTTLE_MAX 
> (=99), so the thermal subsystem will probably prevent 
> mt7915_thermal_set_cur_throttle_state from being called with a
> higher 
> value.  It will also probably complain if get_cur_state starts
> returning 
> values above MT7915_CDEV_THROTTLE_MAX.
> 
> And, as the comment below indicates, the thermal subsystem expect
> that a 
> higher state provide more cooling.  So if 99 means "maximum
> cooling", 
> 100 cannot mean "disable cooling".
> 
> Also, last time I tried, thermal_protect_disable didn't work; It
> didn't 
> disable anything, the previous thermal throttle kept being applied. 
> Maybe a new firmware fixed this, but the kernel cannot simply expect
> the 
> firmware to be up to date.
> 

Thanks for your comments. Let me give you an example to confirm with
you if I understand your comments correctly.

1. The current cooling state of the cooling device is 50 (cur_state =
50).
2. The cooling state is set to 100 for "disable cooling".
3. The thermal subsystem decides to decrease state because the rest of
system is cooler. And then it will adjust it downward based on
cur_state, which is 100. For example, thermal subsytem set cur_state to
90. But obviously this will make the performance worse than at step 1,
even though the system is cooler. The design for 100 mean "disable
cooling" will mess up the thermal governor.

Let me know if there is any misunderstanding. And I will remove the
first change of this patch.

> > 2. Throttle state do not need to be different from the previous
> > state.
> > This will make it is impossible for users to just change the
> > trigger/restore temp but not the throttle state.
> 
> The throttle state is mostly set by the kernel's thermal governor
> and 
> the user has only very little control over it.  The thermal governor 
> runs every X seconds and will change the state if it thinks it is
> too 
> low or too high.
> 
> The default step_wise governor will aggressively set it to zero if
> the 
> system isn't overheating, for example.
> 

I don't think there is any conflict between your comment and second
change. If we keep the check that previous cooling state shall be
different from the new cooling state, this will bother users who only
wants to change the temp1_crit but not the cur_state. It is
unreasonable for the user, if they wants the new temp1_crit to take
effect in the firmware, they must set a differnt cooling state.

 
> > 3. Add dev_err so that it is easier to see invalid setting while
> > looking at dmesg.
> > 
> > Fixes: 771cd8d4c369 ("mt76: mt7915e: Fix degraded performance after
> > temporary overheat")
> > Co-developed-by: Ryder Lee <ryder.lee at mediatek.com>
> > Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
> > Signed-off-by: Howard Hsu <howard-yh.hsu at mediatek.com>
> > ---
> >   .../net/wireless/mediatek/mt76/mt7915/init.c   | 18 ++++++++++---
> > -----
> >   1 file changed, 10 insertions(+), 8 deletions(-)
> > 
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
> > b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
> > index c810c31fbd6e..abeecf15f1c8 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
> > @@ -131,14 +131,17 @@ mt7915_thermal_set_cur_throttle_state(struct
> > thermal_cooling_device *cdev,
> >   	u8 throttling = MT7915_THERMAL_THROTTLE_MAX - state;
> >   	int ret;
> >   
> > -	if (state > MT7915_CDEV_THROTTLE_MAX)
> > +	if (state > MT7915_THERMAL_THROTTLE_MAX) {
> > +		dev_err(phy->dev->mt76.dev,
> > +			"please specify a valid throttling state\n");
> >   		return -EINVAL;
> > +	}
> >   
> > -	if (phy->throttle_temp[0] > phy->throttle_temp[1])
> > -		return 0;
> > -
> > -	if (state == phy->cdev_state)
> > -		return 0;
> > +	if (phy->throttle_temp[0] > phy->throttle_temp[1]) {
> > +		dev_err(phy->dev->mt76.dev,
> > +			"temp1_crit shall not be greater than
> > temp1_max\n");
> > +		return -EINVAL;
> > +	}
> >   
> >   	/*
> >   	 * cooling_device convention: 0 = no cooling, more = more
> > cooling
> 
>             ^^^^^^^^^^^^^^^^^^^^^^^^^
> 

From broonie at kernel.org  Thu Dec  8 05:02:30 2022
From: broonie at kernel.org (Mark Brown)
Date: Thu, 08 Dec 2022 13:02:30 +0000
Subject: [PATCH] dt-bindings: Add missing 'unevaluatedProperties' to
 regulator nodes
In-Reply-To: <20221206211554.92005-1-robh@kernel.org>
References: <20221206211554.92005-1-robh@kernel.org>
Message-ID: <167050455059.159009.6147291983377925638.b4-ty@kernel.org>

On Tue, 06 Dec 2022 15:15:55 -0600, Rob Herring wrote:
> Several regulator schemas are missing 'unevaluatedProperties' constraint
> which means any extra properties are allowed. Upon adding the
> constraint, there's numerous warnings from using the deprecated
> 'regulator-compatible' property. Remove the usage as examples shouldn't
> be using long since deprecated properties.
> 
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git for-next

Thanks!

[1/1] dt-bindings: Add missing 'unevaluatedProperties' to regulator nodes
      commit: 2a17ddfdca25ac4cbb0d317362608ec32f98fd82

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


From broonie at kernel.org  Thu Dec  8 05:48:18 2022
From: broonie at kernel.org (Mark Brown)
Date: Thu, 8 Dec 2022 13:48:18 +0000
Subject: next/master bisection: baseline.login on mt8173-elm-hana
In-Reply-To: <6391e1c4.170a0220.b562d.3c9c@mx.google.com>
References: <6391e1c4.170a0220.b562d.3c9c@mx.google.com>
Message-ID: <Y5HrIhEfuEgGKuMB@sirena.org.uk>

On Thu, Dec 08, 2022 at 05:08:20AM -0800, KernelCI bot wrote:

The KernelCI bisection bot found a boot failure in today's -next on
mt8173-elm-hana was triggered by 26593928564cf ("iommu/mediatek: Add
error path for loop of mm_dts_parse").  We get an oops towards the end
of boot:

<6>[    0.840037] printk: bootconsole [mtk8250] disabled
<6>[    0.840037] printk: bootconsole [mtk8250] disabled
<1>[    0.854924] Unable to handle kernel read from unreadable memory at virtual address 000000000000003b

<1>[    0.864288] Mem abort info:
<1>[    0.867374]   ESR = 0x0000000096000005
<1>[    0.871408]   EC = 0x25: DABT (current EL), IL = 32 bits
<1>[    0.877005]   SET = 0, FnV = 0
<1>[    0.880350]   EA = 0, S1PTW = 0
<1>[    0.883776]   FSC = 0x05: level 1 translation fault
<1>[    0.888938] Data abort info:

...

<4>[    1.027320]  kobject_put+0x18/0xf0
<4>[    1.030996]  put_device+0x1c/0x28

<4>[    1.034586]  mtk_iommu_mm_dts_parse+0x2d0/0x31c
<4>[    1.039394]  mtk_iommu_probe+0x2dc/0x4c0
<4>[    1.043592]  platform_probe+0xb0/0xd0
<4>[    1.047530]  really_probe+0xf8/0x280
<4>[    1.051377]  __driver_probe_device+0xbc/0xe8

<4>[    1.055923]  driver_probe_device+0x44/0x104
<4>[    1.060380]  __driver_attach+0xb4/0x108
<4>[    1.064487]  bus_for_each_dev+0x88/0xd4
<4>[    1.068598]  driver_attach+0x2c/0x38
<4>[    1.072445]  bus_add_driver+0x114/0x1f4
<4>[    1.076554]  driver_register+0x6c/0x108
<4>[    1.080663]  __platform_driver_register+0x2c/0x38
<4>[    1.085640]  mtk_iommu_driver_init+0x24/0x30

I've left the full report from the bot below, including links to more
detailed information and a Reported-by tag for the bot below, the log
links got mangled and should be:

   https://storage.kernelci.org/next/master/next-20221208/arm64/cros---chromeos-5.10-arm64-chromiumos-mediatek.flavour.config%2Barm64-chromebook/clang-13/lab-collabora/baseline-mt8173-elm-hana.html
   https://storage.kernelci.org/next/master/next-20221208/arm64/cros---chromeos-5.10-arm64-chromiumos-mediatek.flavour.config%2Barm64-chromebook/clang-13/lab-collabora/baseline-mt8173-elm-hana.txt

> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
> * This automated bisection report was sent to you on the basis  *
> * that you may be involved with the breaking commit it has      *
> * found.  No manual investigation has been done to verify it,   *
> * and the root cause of the problem may be somewhere else.      *
> *                                                               *
> * If you do send a fix, please include this trailer:            *
> *   Reported-by: "kernelci.org bot" <bot at kernelci.org>          *
> *                                                               *
> * Hope this helps!                                              *
> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
> 
> next/master bisection: baseline.login on mt8173-elm-hana
> 
> Summary:
>   Start:      f925116b24c0c Add linux-next specific files for 20221208
>   Plain log:  https://storage.kernelci.org/next/master/next-20221208/arm64/cros://chromeos-5.10/arm64/chromiumos-arm64.flavour.config+arm64-chromebook/clang-13/lab-collabora/baseline-mt8173-elm-hana.txt
>   HTML log:   https://storage.kernelci.org/next/master/next-20221208/arm64/cros://chromeos-5.10/arm64/chromiumos-arm64.flavour.config+arm64-chromebook/clang-13/lab-collabora/baseline-mt8173-elm-hana.html
>   Result:     26593928564cf iommu/mediatek: Add error path for loop of mm_dts_parse
> 
> Checks:
>   revert:     PASS
>   verify:     PASS
> 
> Parameters:
>   Tree:       next
>   URL:        https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
>   Branch:     master
>   Target:     mt8173-elm-hana
>   CPU arch:   arm64
>   Lab:        lab-collabora
>   Compiler:   clang-13
>   Config:     cros://chromeos-5.10/arm64/chromiumos-arm64.flavour.config+arm64-chromebook
>   Test case:  baseline.login
> 
> Breaking commit found:
> 
> -------------------------------------------------------------------------------
> commit 26593928564cf5b576ff05d3cbd958f57c9534bb
> Author: Yong Wu <yong.wu at mediatek.com>
> Date:   Tue Oct 18 10:42:55 2022 +0800
> 
>     iommu/mediatek: Add error path for loop of mm_dts_parse
>     
>     The mtk_iommu_mm_dts_parse will parse the smi larbs nodes. if the i+1
>     larb is parsed fail, we should put_device for the i..0 larbs.
>     
>     There are two places need to comment:
>     1) The larbid may be not linear mapping, we should loop whole
>        the array in the error path.
>     2) I move this line position: "data->larb_imu[id].dev = &plarbdev->dev;"
>        before "if (!plarbdev->dev.driver)", That means set
>        data->larb_imu[id].dev before the error path. then we don't need
>        "platform_device_put(plarbdev)" again in probe_defer case. All depend
>        on "put_device" of the error path in error cases.
>     
>     Fixes: d2e9a1102cfc ("iommu/mediatek: Contain MM IOMMU flow with the MM TYPE")
>     Signed-off-by: Yong Wu <yong.wu at mediatek.com>
>     Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>     Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>
>     Link: https://lore.kernel.org/r/20221018024258.19073-4-yong.wu at mediatek.com
>     Signed-off-by: Joerg Roedel <jroedel at suse.de>
> 
> diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
> index df490236e1fb5..e0c669b75271d 100644
> --- a/drivers/iommu/mtk_iommu.c
> +++ b/drivers/iommu/mtk_iommu.c
> @@ -1067,8 +1067,10 @@ static int mtk_iommu_mm_dts_parse(struct device *dev, struct component_match **m
>  		u32 id;
>  
>  		larbnode = of_parse_phandle(dev->of_node, "mediatek,larbs", i);
> -		if (!larbnode)
> -			return -EINVAL;
> +		if (!larbnode) {
> +			ret = -EINVAL;
> +			goto err_larbdev_put;
> +		}
>  
>  		if (!of_device_is_available(larbnode)) {
>  			of_node_put(larbnode);
> @@ -1081,14 +1083,16 @@ static int mtk_iommu_mm_dts_parse(struct device *dev, struct component_match **m
>  
>  		plarbdev = of_find_device_by_node(larbnode);
>  		of_node_put(larbnode);
> -		if (!plarbdev)
> -			return -ENODEV;
> +		if (!plarbdev) {
> +			ret = -ENODEV;
> +			goto err_larbdev_put;
> +		}
> +		data->larb_imu[id].dev = &plarbdev->dev;
>  
>  		if (!plarbdev->dev.driver) {
> -			platform_device_put(plarbdev);
> -			return -EPROBE_DEFER;
> +			ret = -EPROBE_DEFER;
> +			goto err_larbdev_put;
>  		}
> -		data->larb_imu[id].dev = &plarbdev->dev;
>  
>  		component_match_add(dev, match, component_compare_dev, &plarbdev->dev);
>  		platform_device_put(plarbdev);
> @@ -1123,6 +1127,15 @@ static int mtk_iommu_mm_dts_parse(struct device *dev, struct component_match **m
>  		return -EINVAL;
>  	}
>  	return 0;
> +
> +err_larbdev_put:
> +	/* id may be not linear mapping, loop whole the array */
> +	for (i = MTK_LARB_NR_MAX - 1; i >= 0; i++) {
> +		if (!data->larb_imu[i].dev)
> +			continue;
> +		put_device(data->larb_imu[i].dev);
> +	}
> +	return ret;
>  }
>  
>  static int mtk_iommu_probe(struct platform_device *pdev)
> -------------------------------------------------------------------------------
> 
> 
> Git bisection log:
> 
> -------------------------------------------------------------------------------
> git bisect start
> # good: [479174d402bcf60789106eedc4def3957c060bad] Merge tag 'platform-drivers-x86-v6.1-5' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86
> git bisect good 479174d402bcf60789106eedc4def3957c060bad
> # bad: [f925116b24c0c42dc6d5ab5111c55fd7f74e8dc7] Add linux-next specific files for 20221208
> git bisect bad f925116b24c0c42dc6d5ab5111c55fd7f74e8dc7
> # good: [a1c975859da787104f6f2610f0f5507ef794dea4] Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
> git bisect good a1c975859da787104f6f2610f0f5507ef794dea4
> # bad: [df52ed561d70653b4d82a468026450374161693b] Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git
> git bisect bad df52ed561d70653b4d82a468026450374161693b
> # good: [ddf1b69a1f2e0704bc0d5f7f71e4f8c4891a3bbb] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
> git bisect good ddf1b69a1f2e0704bc0d5f7f71e4f8c4891a3bbb
> # good: [b5cb3c9818c0085928c1d795e1e2a78add3dbca5] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
> git bisect good b5cb3c9818c0085928c1d795e1e2a78add3dbca5
> # bad: [b07fcd1e4269638ae72abc499543eb72605bd34b] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git
> git bisect bad b07fcd1e4269638ae72abc499543eb72605bd34b
> # bad: [147cf2079e0afce372e3d14089396736a025ecda] Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git
> git bisect bad 147cf2079e0afce372e3d14089396736a025ecda
> # good: [14d40e4c74b85c390e076712a6d2831e9464b786] Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd.git
> git bisect good 14d40e4c74b85c390e076712a6d2831e9464b786
> # good: [b169a180bef26679b44484ad24b7d8ae32623a10] iommu/io-pgtable: Remove map/unmap
> git bisect good b169a180bef26679b44484ad24b7d8ae32623a10
> # good: [f04ae51dd965bc0b7f2e01c5d85fc214877b4061] Merge tag 'arm-smmu-updates' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into arm/smmu
> git bisect good f04ae51dd965bc0b7f2e01c5d85fc214877b4061
> # bad: [4dd549a66a969ccd3ed344f37fb9b9e9516fc1e6] Merge branches 'iommu/fixes', 'arm/allwinner', 'arm/exynos', 'arm/mediatek', 'arm/rockchip', 'arm/smmu', 'ppc/pamu', 's390', 'x86/vt-d', 'x86/amd' and 'core' into next
> git bisect bad 4dd549a66a969ccd3ed344f37fb9b9e9516fc1e6
> # good: [21c1f9021f0e7d28c3edfcc70e1ca1926ea3774e] s390/pci: use lock-free I/O translation updates
> git bisect good 21c1f9021f0e7d28c3edfcc70e1ca1926ea3774e
> # bad: [00ef8885a945c37551547d8ac8361cacd20c4e42] iommu/mediatek: Fix crash on isr after kexec()
> git bisect bad 00ef8885a945c37551547d8ac8361cacd20c4e42
> # good: [dcb40e9fcce9bd251eaff19f3724131db522846c] iommu/mediatek: Add platform_device_put for recovering the device refcnt
> git bisect good dcb40e9fcce9bd251eaff19f3724131db522846c
> # bad: [ef693a8440926884bfd9cc3d6d36f65719513350] iommu/mediatek: Validate number of phandles associated with "mediatek,larbs"
> git bisect bad ef693a8440926884bfd9cc3d6d36f65719513350
> # bad: [26593928564cf5b576ff05d3cbd958f57c9534bb] iommu/mediatek: Add error path for loop of mm_dts_parse
> git bisect bad 26593928564cf5b576ff05d3cbd958f57c9534bb
> # good: [b5765a1b44bea9dfcae69c53ffeb4c689d0922a7] iommu/mediatek: Use component_match_add
> git bisect good b5765a1b44bea9dfcae69c53ffeb4c689d0922a7
> # first bad commit: [26593928564cf5b576ff05d3cbd958f57c9534bb] iommu/mediatek: Add error path for loop of mm_dts_parse
> -------------------------------------------------------------------------------
> 
> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Groups.io Links: You receive all messages sent to this group.
> View/Reply Online (#35262): https://groups.io/g/kernelci-results/message/35262
> Mute This Topic: https://groups.io/mt/95537191/1131744
> Group Owner: kernelci-results+owner at groups.io
> Unsubscribe: https://groups.io/g/kernelci-results/unsub [broonie at kernel.org]
> -=-=-=-=-=-=-=-=-=-=-=-
> 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221208/e0966105/attachment.sig>

From bero at baylibre.com  Thu Dec  8 07:30:34 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Thu,  8 Dec 2022 16:30:34 +0100
Subject: [PATCH v4 1/7] dt-bindings: arm64: dts: mediatek: Add mt8365-evk board
In-Reply-To: <20221208153041.3965378-1-bero@baylibre.com>
References: <20221208153041.3965378-1-bero@baylibre.com>
Message-ID: <20221208153041.3965378-2-bero@baylibre.com>

Add bindings for the Mediatek mt8365-evk board.

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
---
 Documentation/devicetree/bindings/arm/mediatek.yaml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/mediatek.yaml b/Documentation/devicetree/bindings/arm/mediatek.yaml
index 2275e5d93721b..ae12b1cab9fbd 100644
--- a/Documentation/devicetree/bindings/arm/mediatek.yaml
+++ b/Documentation/devicetree/bindings/arm/mediatek.yaml
@@ -244,6 +244,10 @@ properties:
           - enum:
               - mediatek,mt8183-pumpkin
           - const: mediatek,mt8183
+      - items:
+          - enum:
+              - mediatek,mt8365-evk
+          - const: mediatek,mt8365
       - items:
           - enum:
               - mediatek,mt8516-pumpkin
-- 
2.38.1



From bero at baylibre.com  Thu Dec  8 07:30:33 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Thu,  8 Dec 2022 16:30:33 +0100
Subject: [PATCH v4 0/7] Add minimal MT8365 and MT8365-EVK support
Message-ID: <20221208153041.3965378-1-bero@baylibre.com>

This adds minimal support for the MediaTek 8365 SOC and the EVK reference
board, allowing the board to boot to initramfs with serial port I/O.

v4:
  - Remove pins-are-numbered references that have been holding things up
    now that the patches removing it from dt-bindings have landed in linux-next

v3:
  - Remove a number of components that are not yet supported (they will
    come back alongside the corresponding drivers)
  - Address issues found by dt_binding_check (mostly fixing pinctrl
    bindings)
  - Address issues pointed out in comments
  - Reorder patches

v2:
  - Add missing dt-bindings documentation
  - Small cleanups addressing issues in v1 pointed out by Krzysztof Kozlowski



Bernhard Rosenkr?nzer (4):
  dt-bindings: arm64: dts: mediatek: Add mt8365-evk board
  dt-bindings: irq: mtk, sysirq: add support for mt8365
  dt-bindings: mfd: syscon: Add mt8365-syscfg
  dt-bindings: pinctrl: add bindings for Mediatek MT8365 SoC

Fabien Parent (3):
  dt-bindings: usb: mediatek,mtu3: add MT8365 SoC bindings
  dt-bindings: usb: mediatek,mtk-xhci: add MT8365 SoC bindings
  arm64: dts: mediatek: Initial mt8365-evk support

 .../devicetree/bindings/arm/mediatek.yaml     |   4 +
 .../interrupt-controller/mediatek,sysirq.txt  |   1 +
 .../devicetree/bindings/mfd/syscon.yaml       |   1 +
 .../pinctrl/mediatek,mt8365-pinctrl.yaml      | 197 ++++++++++
 .../bindings/usb/mediatek,mtk-xhci.yaml       |   1 +
 .../bindings/usb/mediatek,mtu3.yaml           |   1 +
 arch/arm64/boot/dts/mediatek/Makefile         |   1 +
 arch/arm64/boot/dts/mediatek/mt8365-evk.dts   | 163 +++++++++
 arch/arm64/boot/dts/mediatek/mt8365.dtsi      | 343 ++++++++++++++++++
 9 files changed, 712 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
 create mode 100644 arch/arm64/boot/dts/mediatek/mt8365-evk.dts
 create mode 100644 arch/arm64/boot/dts/mediatek/mt8365.dtsi

-- 
2.38.1



From bero at baylibre.com  Thu Dec  8 07:30:35 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Thu,  8 Dec 2022 16:30:35 +0100
Subject: [PATCH v4 2/7] dt-bindings: irq: mtk, sysirq: add support for mt8365
In-Reply-To: <20221208153041.3965378-1-bero@baylibre.com>
References: <20221208153041.3965378-1-bero@baylibre.com>
Message-ID: <20221208153041.3965378-3-bero@baylibre.com>

Add binding documentation of mediatek,sysirq for mt8365 SoC.

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../devicetree/bindings/interrupt-controller/mediatek,sysirq.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt b/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt
index 84ced3f4179b9..3ffc60184e445 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt
+++ b/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt
@@ -25,6 +25,7 @@ Required properties:
 	"mediatek,mt6577-sysirq": for MT6577
 	"mediatek,mt2712-sysirq", "mediatek,mt6577-sysirq": for MT2712
 	"mediatek,mt2701-sysirq", "mediatek,mt6577-sysirq": for MT2701
+	"mediatek,mt8365-sysirq", "mediatek,mt6577-sysirq": for MT8365
 - interrupt-controller : Identifies the node as an interrupt controller
 - #interrupt-cells : Use the same format as specified by GIC in arm,gic.txt.
 - reg: Physical base address of the intpol registers and length of memory
-- 
2.38.1



From bero at baylibre.com  Thu Dec  8 07:30:36 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Thu,  8 Dec 2022 16:30:36 +0100
Subject: [PATCH v4 3/7] dt-bindings: mfd: syscon: Add mt8365-syscfg
In-Reply-To: <20221208153041.3965378-1-bero@baylibre.com>
References: <20221208153041.3965378-1-bero@baylibre.com>
Message-ID: <20221208153041.3965378-4-bero@baylibre.com>

Document Mediatek mt8365-syscfg

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 Documentation/devicetree/bindings/mfd/syscon.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/mfd/syscon.yaml b/Documentation/devicetree/bindings/mfd/syscon.yaml
index 1b01bd0104316..7beeb0abc4db0 100644
--- a/Documentation/devicetree/bindings/mfd/syscon.yaml
+++ b/Documentation/devicetree/bindings/mfd/syscon.yaml
@@ -50,6 +50,7 @@ properties:
               - marvell,armada-3700-usb2-host-misc
               - mediatek,mt8135-pctl-a-syscfg
               - mediatek,mt8135-pctl-b-syscfg
+              - mediatek,mt8365-syscfg
               - microchip,lan966x-cpu-syscon
               - microchip,sparx5-cpu-syscon
               - mstar,msc313-pmsleep
-- 
2.38.1



From bero at baylibre.com  Thu Dec  8 07:30:38 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Thu,  8 Dec 2022 16:30:38 +0100
Subject: [PATCH v4 5/7] dt-bindings: usb: mediatek,mtu3: add MT8365 SoC bindings
In-Reply-To: <20221208153041.3965378-1-bero@baylibre.com>
References: <20221208153041.3965378-1-bero@baylibre.com>
Message-ID: <20221208153041.3965378-6-bero@baylibre.com>

From: Fabien Parent <fparent at baylibre.com>

Add binding documentation for the MT8365 SoC.

Signed-off-by: Fabien Parent <fparent at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
---
 Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml b/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
index 7168110e2f9de..d2655173e108c 100644
--- a/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
+++ b/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
@@ -28,6 +28,7 @@ properties:
           - mediatek,mt8188-mtu3
           - mediatek,mt8192-mtu3
           - mediatek,mt8195-mtu3
+          - mediatek,mt8365-mtu3
       - const: mediatek,mtu3
 
   reg:
-- 
2.38.1



From bero at baylibre.com  Thu Dec  8 07:30:39 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Thu,  8 Dec 2022 16:30:39 +0100
Subject: [PATCH v4 6/7] dt-bindings: usb: mediatek,mtk-xhci: add MT8365 SoC bindings
In-Reply-To: <20221208153041.3965378-1-bero@baylibre.com>
References: <20221208153041.3965378-1-bero@baylibre.com>
Message-ID: <20221208153041.3965378-7-bero@baylibre.com>

From: Fabien Parent <fparent at baylibre.com>

Add binding documentation for the MT8365 SoC.

Signed-off-by: Fabien Parent <fparent at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
---
 Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml b/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml
index 939623867a646..3b92725bbc99b 100644
--- a/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml
+++ b/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml
@@ -34,6 +34,7 @@ properties:
           - mediatek,mt8188-xhci
           - mediatek,mt8192-xhci
           - mediatek,mt8195-xhci
+          - mediatek,mt8365-xhci
       - const: mediatek,mtk-xhci
 
   reg:
-- 
2.38.1



From bero at baylibre.com  Thu Dec  8 07:30:37 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Thu,  8 Dec 2022 16:30:37 +0100
Subject: [PATCH v4 4/7] dt-bindings: pinctrl: add bindings for Mediatek MT8365 SoC
In-Reply-To: <20221208153041.3965378-1-bero@baylibre.com>
References: <20221208153041.3965378-1-bero@baylibre.com>
Message-ID: <20221208153041.3965378-5-bero@baylibre.com>

Add devicetree bindings for Mediatek MT8365 pinctrl driver.

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
---
 .../pinctrl/mediatek,mt8365-pinctrl.yaml      | 197 ++++++++++++++++++
 1 file changed, 197 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml

diff --git a/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
new file mode 100644
index 0000000000000..9560e1d2898d0
--- /dev/null
+++ b/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
@@ -0,0 +1,197 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/pinctrl/mediatek,mt8365-pinctrl.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Mediatek MT8365 Pin Controller
+
+maintainers:
+  - Zhiyong Tao <zhiyong.tao at mediatek.com>
+  - Bernhard Rosenkr?nzer <bero at baylibre.com>
+
+description: |+
+  The MediaTek's MT8365 Pin controller is used to control SoC pins.
+
+properties:
+  compatible:
+    const: mediatek,mt8365-pinctrl
+
+  reg:
+    maxItems: 1
+
+  mediatek,pctl-regmap:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      maxItems: 1
+    minItems: 1
+    maxItems: 2
+    description: |
+      Should be phandles of the syscfg node.
+
+  gpio-controller: true
+
+  "#gpio-cells":
+    const: 2
+    description: |
+      Number of cells in GPIO specifier. Since the generic GPIO
+      binding is used, the amount of cells must be specified as 2. See the below
+      mentioned gpio binding representation for description of particular cells.
+
+  interrupt-controller: true
+
+  interrupts:
+    maxItems: 1
+
+  "#interrupt-cells":
+    const: 2
+
+patternProperties:
+  '-pins$':
+    type: object
+    additionalProperties: false
+    patternProperties:
+      'pins$':
+        type: object
+        additionalProperties: false
+        description: |
+          A pinctrl node should contain at least one subnode representing the
+          pinctrl groups available on the machine. Each subnode will list the
+          pins it needs, and how they should be configured, with regard to muxer
+          configuration, pullups, drive strength, input enable/disable and input
+          schmitt.
+        $ref: /schemas/pinctrl/pincfg-node.yaml
+
+        properties:
+          pinmux:
+            description:
+              integer array, represents gpio pin number and mux setting.
+              Supported pin number and mux varies for different SoCs, and are
+              defined as macros in <soc>-pinfunc.h directly.
+
+          bias-disable: true
+
+          bias-pull-up:
+            description: |
+              Besides generic pinconfig options, it can be used as the pull up
+              settings for 2 pull resistors, R0 and R1. User can configure those
+              special pins.
+
+          bias-pull-down: true
+
+          input-enable: true
+
+          input-disable: true
+
+          output-low: true
+
+          output-high: true
+
+          input-schmitt-enable: true
+
+          input-schmitt-disable: true
+
+          mediatek,drive-strength-adv:
+            description: |
+              Describe the specific driving setup property.
+              For I2C pins, the existing generic driving setup can only support
+              2/4/6/8/10/12/14/16mA driving. But in specific driving setup, they
+              can support 0.125/0.25/0.5/1mA adjustment. If we enable specific
+              driving setup, the existing generic setup will be disabled.
+              The specific driving setup is controlled by E1E0EN.
+              When E1=0/E0=0, the strength is 0.125mA.
+              When E1=0/E0=1, the strength is 0.25mA.
+              When E1=1/E0=0, the strength is 0.5mA.
+              When E1=1/E0=1, the strength is 1mA.
+              EN is used to enable or disable the specific driving setup.
+              Valid arguments are described as below:
+              0: (E1, E0, EN) = (0, 0, 0)
+              1: (E1, E0, EN) = (0, 0, 1)
+              2: (E1, E0, EN) = (0, 1, 0)
+              3: (E1, E0, EN) = (0, 1, 1)
+              4: (E1, E0, EN) = (1, 0, 0)
+              5: (E1, E0, EN) = (1, 0, 1)
+              6: (E1, E0, EN) = (1, 1, 0)
+              7: (E1, E0, EN) = (1, 1, 1)
+              So the valid arguments are from 0 to 7.
+            $ref: /schemas/types.yaml#/definitions/uint32
+            enum: [0, 1, 2, 3, 4, 5, 6, 7]
+
+          mediatek,pull-up-adv:
+            description: |
+              Pull up setings for 2 pull resistors, R0 and R1. User can
+              configure those special pins. Valid arguments are described as below:
+              0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
+              1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
+              2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
+              3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
+            $ref: /schemas/types.yaml#/definitions/uint32
+            enum: [0, 1, 2, 3]
+
+          mediatek,pull-down-adv:
+            description: |
+              Pull down settings for 2 pull resistors, R0 and R1. User can
+              configure those special pins. Valid arguments are described as below:
+              0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
+              1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
+              2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
+              3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
+            $ref: /schemas/types.yaml#/definitions/uint32
+            enum: [0, 1, 2, 3]
+
+          mediatek,tdsel:
+            description: |
+              An integer describing the steps for output level shifter duty
+              cycle when asserted (high pulse width adjustment). Valid arguments
+              are from 0 to 15.
+            $ref: /schemas/types.yaml#/definitions/uint32
+
+          mediatek,rdsel:
+            description: |
+              An integer describing the steps for input level shifter duty cycle
+              when asserted (high pulse width adjustment). Valid arguments are
+              from 0 to 63.
+            $ref: /schemas/types.yaml#/definitions/uint32
+
+        required:
+          - pinmux
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/pinctrl/mt8365-pinfunc.h>
+    soc {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        pio: pinctrl at 1000b000 {
+          compatible = "mediatek,mt8365-pinctrl";
+          reg = <0 0x1000b000 0 0x1000>;
+          mediatek,pctl-regmap = <&syscfg_pctl>;
+          gpio-controller;
+          #gpio-cells = <2>;
+          interrupt-controller;
+          #interrupt-cells = <2>;
+          interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
+
+          pio-pins {
+            pins {
+              pinmux = <MT8365_PIN_59_SDA1__FUNC_SDA1_0>, <MT8365_PIN_60_SCL1__FUNC_SCL1_0>;
+              mediatek,pull-up-adv = <3>;
+              mediatek,drive-strength-adv = <00>;
+              bias-pull-up;
+            };
+          };
+        };
+    };
+
+required:
+  - compatible
+  - reg
+  - gpio-controller
+  - "#gpio-cells"
+
+allOf:
+  - $ref: pinctrl.yaml#
-- 
2.38.1



From bero at baylibre.com  Thu Dec  8 07:30:40 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Thu,  8 Dec 2022 16:30:40 +0100
Subject: [PATCH v4 7/7] arm64: dts: mediatek: Initial mt8365-evk support
In-Reply-To: <20221208153041.3965378-1-bero@baylibre.com>
References: <20221208153041.3965378-1-bero@baylibre.com>
Message-ID: <20221208153041.3965378-8-bero@baylibre.com>

From: Fabien Parent <fparent at baylibre.com>

This adds minimal support for the Mediatek 8365 SOC and the EVK reference
board, allowing the board to boot to initramfs with serial port I/O.

Signed-off-by: Fabien Parent <fparent at baylibre.com>
[bero at baylibre.com: Removed parts depending on drivers that aren't upstream yet, cleanups, add L2 cache]
Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Tested-by: Kevin Hilman <khilman at baylibre.com>
---
 arch/arm64/boot/dts/mediatek/Makefile       |   1 +
 arch/arm64/boot/dts/mediatek/mt8365-evk.dts | 163 ++++++++++
 arch/arm64/boot/dts/mediatek/mt8365.dtsi    | 343 ++++++++++++++++++++
 3 files changed, 507 insertions(+)
 create mode 100644 arch/arm64/boot/dts/mediatek/mt8365-evk.dts
 create mode 100644 arch/arm64/boot/dts/mediatek/mt8365.dtsi

diff --git a/arch/arm64/boot/dts/mediatek/Makefile b/arch/arm64/boot/dts/mediatek/Makefile
index 813e735c5b96d..d78523c5a7dd6 100644
--- a/arch/arm64/boot/dts/mediatek/Makefile
+++ b/arch/arm64/boot/dts/mediatek/Makefile
@@ -47,4 +47,5 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += mt8195-cherry-tomato-r2.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8195-cherry-tomato-r3.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8195-demo.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8195-evb.dtb
+dtb-$(CONFIG_ARCH_MEDIATEK) += mt8365-evk.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8516-pumpkin.dtb
diff --git a/arch/arm64/boot/dts/mediatek/mt8365-evk.dts b/arch/arm64/boot/dts/mediatek/mt8365-evk.dts
new file mode 100644
index 0000000000000..972843f9e4e9d
--- /dev/null
+++ b/arch/arm64/boot/dts/mediatek/mt8365-evk.dts
@@ -0,0 +1,163 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2021-2022 BayLibre, SAS.
+ * Authors:
+ * Fabien Parent <fparent at baylibre.com>
+ * Bernhard Rosenkr?nzer <bero at baylibre.com>
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/pinctrl/mt8365-pinfunc.h>
+#include "mt8365.dtsi"
+
+/ {
+	model = "MediaTek MT8365 Open Platform EVK";
+	compatible = "mediatek,mt8365-evk", "mediatek,mt8365";
+
+	aliases {
+		serial0 = &uart0;
+	};
+
+	chosen {
+		stdout-path = "serial0:921600n8";
+	};
+
+	firmware {
+		optee {
+			compatible = "linaro,optee-tz";
+			method = "smc";
+		};
+	};
+
+	gpio-keys {
+		compatible = "gpio-keys";
+		input-name = "gpio-keys";
+		pinctrl-names = "default";
+		pinctrl-0 = <&gpio_keys>;
+
+		key-volume-up {
+			gpios = <&pio 24 GPIO_ACTIVE_LOW>;
+			label = "volume_up";
+			linux,code = <KEY_VOLUMEUP>;
+			wakeup-source;
+			debounce-interval = <15>;
+		};
+	};
+
+	memory at 40000000 {
+		device_type = "memory";
+		reg = <0 0x40000000 0 0xc0000000>;
+	};
+
+	usb_otg_vbus: regulator-0 {
+		compatible = "regulator-fixed";
+		regulator-name = "otg_vbus";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		gpio = <&pio 16 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
+	reserved-memory {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+
+		/* 12 MiB reserved for OP-TEE (BL32)
+		 * +-----------------------+ 0x43e0_0000
+		 * |      SHMEM 2MiB       |
+		 * +-----------------------+ 0x43c0_0000
+		 * |        | TA_RAM  8MiB |
+		 * + TZDRAM +--------------+ 0x4340_0000
+		 * |        | TEE_RAM 2MiB |
+		 * +-----------------------+ 0x4320_0000
+		 */
+		optee_reserved: optee at 43200000 {
+			no-map;
+			reg = <0 0x43200000 0 0x00c00000>;
+		};
+	};
+};
+
+&pio {
+	gpio_keys: gpio-keys-pins {
+		pins {
+			pinmux = <MT8365_PIN_24_KPCOL0__FUNC_KPCOL0>;
+			bias-pull-up;
+			input-enable;
+		};
+	};
+
+	uart0_pins: uart0-pins {
+		pins {
+			pinmux = <MT8365_PIN_35_URXD0__FUNC_URXD0>,
+				 <MT8365_PIN_36_UTXD0__FUNC_UTXD0>;
+		};
+	};
+
+	uart1_pins: uart1-pins {
+		pins {
+			pinmux = <MT8365_PIN_37_URXD1__FUNC_URXD1>,
+				 <MT8365_PIN_38_UTXD1__FUNC_UTXD1>;
+		};
+	};
+
+	uart2_pins: uart2-pins {
+		pins {
+			pinmux = <MT8365_PIN_39_URXD2__FUNC_URXD2>,
+				 <MT8365_PIN_40_UTXD2__FUNC_UTXD2>;
+		};
+	};
+
+	usb_pins: usb-pins {
+		pins-id {
+			pinmux = <MT8365_PIN_17_GPIO17__FUNC_GPIO17>;
+			input-enable;
+			bias-pull-up;
+		};
+
+		pins-usb0-vbus {
+			pinmux = <MT8365_PIN_16_GPIO16__FUNC_USB_DRVVBUS>;
+			output-high;
+		};
+
+		pin-usb1-vbus {
+			pinmux = <MT8365_PIN_18_GPIO18__FUNC_GPIO18>;
+			output-high;
+		};
+	};
+
+	pwm_pins: pwm-pins {
+		pins {
+			pinmux = <MT8365_PIN_19_DISP_PWM__FUNC_PWM_A>,
+				 <MT8365_PIN_116_I2S_BCK__FUNC_PWM_C>;
+		};
+	};
+};
+
+&pwm {
+	pinctrl-0 = <&pwm_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&uart0 {
+	pinctrl-0 = <&uart0_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&uart1 {
+	pinctrl-0 = <&uart1_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&uart2 {
+	pinctrl-0 = <&uart2_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
diff --git a/arch/arm64/boot/dts/mediatek/mt8365.dtsi b/arch/arm64/boot/dts/mediatek/mt8365.dtsi
new file mode 100644
index 0000000000000..2c4ef9b92b68b
--- /dev/null
+++ b/arch/arm64/boot/dts/mediatek/mt8365.dtsi
@@ -0,0 +1,343 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * (C) 2018 MediaTek Inc.
+ * Copyright (C) 2022 BayLibre SAS
+ * Fabien Parent <fparent at baylibre.com>
+ * Bernhard Rosenkr?nzer <bero at baylibre.com>
+ */
+#include <dt-bindings/clock/mediatek,mt8365-clk.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/phy/phy.h>
+#include <dt-bindings/thermal/thermal.h>
+
+/ {
+	compatible = "mediatek,mt8365";
+	interrupt-parent = <&sysirq>;
+	#address-cells = <2>;
+	#size-cells = <2>;
+
+	cpus: cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cpu-map {
+			cluster0: cluster0 {
+				core0 {
+					cpu = <&cpu0>;
+				};
+				core1 {
+					cpu = <&cpu1>;
+				};
+				core2 {
+					cpu = <&cpu2>;
+				};
+				core3 {
+					cpu = <&cpu3>;
+				};
+			};
+		};
+
+		cpu0: cpu at 0 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a53";
+			reg = <0x0>;
+			#cooling-cells = <2>;
+			enable-method = "psci";
+			next-level-cache = <&l2>;
+		};
+
+		cpu1: cpu at 1 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a53";
+			reg = <0x1>;
+			#cooling-cells = <2>;
+			enable-method = "psci";
+			next-level-cache = <&l2>;
+		};
+
+		cpu2: cpu at 2 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a53";
+			reg = <0x2>;
+			#cooling-cells = <2>;
+			enable-method = "psci";
+			next-level-cache = <&l2>;
+		};
+
+		cpu3: cpu at 3 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a53";
+			reg = <0x3>;
+			#cooling-cells = <2>;
+			enable-method = "psci";
+			next-level-cache = <&l2>;
+		};
+
+		l2: l2-cache {
+			compatible = "cache";
+		};
+	};
+
+	clk26m: oscillator {
+		compatible = "fixed-clock";
+		#clock-cells = <0>;
+		clock-frequency = <26000000>;
+		clock-output-names = "clk26m";
+	};
+
+	psci {
+		compatible = "arm,psci-1.0";
+		method = "smc";
+	};
+
+	reserved-memory {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+
+		/* 128 KiB reserved for ARM Trusted Firmware (BL31) */
+		bl31_secmon_reserved: secmon at 43000000 {
+			no-map;
+			reg = <0 0x43000000 0 0x20000>;
+		};
+	};
+
+	soc {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		compatible = "simple-bus";
+		ranges;
+
+		gic: interrupt-controller at c000000 {
+			compatible = "arm,gic-v3";
+			#interrupt-cells = <4>;
+			interrupt-parent = <&gic>;
+			interrupt-controller;
+			reg = <0 0x0c000000 0 0x80000>, <0 0x0c080000 0 0x80000>;
+
+			interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH 0>;
+		};
+
+		topckgen: syscon at 10000000 {
+			compatible = "mediatek,mt8365-topckgen", "syscon";
+			reg = <0 0x10000000 0 0x1000>;
+			#clock-cells = <1>;
+		};
+
+		infracfg: syscon at 10001000 {
+			compatible = "mediatek,mt8365-infracfg", "syscon";
+			reg = <0 0x10001000 0 0x1000>;
+			#clock-cells = <1>;
+		};
+
+		pericfg: syscon at 10003000 {
+			compatible = "mediatek,mt8365-pericfg", "syscon";
+			reg = <0 0x10003000 0 0x1000>;
+			#clock-cells = <1>;
+		};
+
+		syscfg_pctl: syscfg-pctl at 10005000 {
+			compatible = "mediatek,mt8365-syscfg", "syscon";
+			reg = <0 0x10005000 0 0x1000>;
+		};
+
+		pio: pinctrl at 1000b000 {
+			compatible = "mediatek,mt8365-pinctrl";
+			reg = <0 0x1000b000 0 0x1000>;
+			mediatek,pctl-regmap = <&syscfg_pctl>;
+			gpio-controller;
+			#gpio-cells = <2>;
+			interrupt-controller;
+			#interrupt-cells = <2>;
+			interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
+		};
+
+		apmixedsys: syscon at 1000c000 {
+			compatible = "mediatek,mt8365-apmixedsys", "syscon";
+			reg = <0 0x1000c000 0 0x1000>;
+			#clock-cells = <1>;
+		};
+
+		keypad: keypad at 10010000 {
+			compatible = "mediatek,mt6779-keypad";
+			reg = <0 0x10010000 0 0x1000>;
+			wakeup-source;
+			interrupts = <GIC_SPI 124 IRQ_TYPE_EDGE_FALLING>;
+			clocks = <&clk26m>;
+			clock-names = "kpd";
+			status = "disabled";
+		};
+
+		mcucfg: syscon at 10200000 {
+			compatible = "mediatek,mt8365-mcucfg", "syscon";
+			reg = <0 0x10200000 0 0x2000>;
+			#clock-cells = <1>;
+		};
+
+		sysirq: interrupt-controller at 10200a80 {
+			compatible = "mediatek,mt8365-sysirq", "mediatek,mt6577-sysirq";
+			interrupt-controller;
+			#interrupt-cells = <3>;
+			interrupt-parent = <&gic>;
+			reg = <0 0x10200a80 0 0x20>;
+		};
+
+		infracfg_nao: infracfg at 1020e000 {
+			compatible = "mediatek,mt8365-infracfg", "syscon";
+			reg = <0 0x1020e000 0 0x1000>;
+		};
+
+		rng: rng at 1020f000 {
+			compatible = "mediatek,mt8365-rng", "mediatek,mt7623-rng";
+			reg = <0 0x1020f000 0 0x100>;
+			clocks = <&infracfg CLK_IFR_TRNG>;
+			clock-names = "rng";
+		};
+
+		apdma: dma-controller at 11000280 {
+			compatible = "mediatek,mt8365-uart-dma", "mediatek,mt6577-uart-dma";
+			reg = <0 0x11000280 0 0x80>,
+			      <0 0x11000300 0 0x80>,
+			      <0 0x11000380 0 0x80>,
+			      <0 0x11000400 0 0x80>,
+			      <0 0x11000580 0 0x80>,
+			      <0 0x11000600 0 0x80>;
+			interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 46 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 47 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 48 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 51 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 52 IRQ_TYPE_LEVEL_LOW>;
+			dma-requests = <6>;
+			clocks = <&infracfg CLK_IFR_AP_DMA>;
+			clock-names = "apdma";
+			#dma-cells = <1>;
+		};
+
+		uart0: serial at 11002000 {
+			compatible = "mediatek,mt8365-uart", "mediatek,mt6577-uart";
+			reg = <0 0x11002000 0 0x1000>;
+			interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&clk26m>, <&infracfg CLK_IFR_UART0>;
+			clock-names = "baud", "bus";
+			dmas = <&apdma 0>, <&apdma 1>;
+			dma-names = "tx", "rx";
+			status = "disabled";
+		};
+
+		uart1: serial at 11003000 {
+			compatible = "mediatek,mt8365-uart", "mediatek,mt6577-uart";
+			reg = <0 0x11003000 0 0x1000>;
+			interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&clk26m>, <&infracfg CLK_IFR_UART1>;
+			clock-names = "baud", "bus";
+			dmas = <&apdma 2>, <&apdma 3>;
+			dma-names = "tx", "rx";
+			status = "disabled";
+		};
+
+		uart2: serial at 11004000 {
+			compatible = "mediatek,mt8365-uart", "mediatek,mt6577-uart";
+			reg = <0 0x11004000 0 0x1000>;
+			interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&clk26m>, <&infracfg CLK_IFR_UART2>;
+			clock-names = "baud", "bus";
+			dmas = <&apdma 4>, <&apdma 5>;
+			dma-names = "tx", "rx";
+			status = "disabled";
+		};
+
+		pwm: pwm at 11006000 {
+			compatible = "mediatek,mt8365-pwm";
+			reg = <0 0x11006000 0 0x1000>;
+			#pwm-cells = <2>;
+			interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&infracfg CLK_IFR_PWM_HCLK>,
+				 <&infracfg CLK_IFR_PWM>,
+				 <&infracfg CLK_IFR_PWM1>,
+				 <&infracfg CLK_IFR_PWM2>,
+				 <&infracfg CLK_IFR_PWM3>;
+			clock-names = "top", "main", "pwm1", "pwm2", "pwm3";
+		};
+
+		spi: spi at 1100a000 {
+			compatible = "mediatek,mt8365-spi", "mediatek,mt7622-spi";
+			reg = <0 0x1100a000 0 0x100>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+			interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&topckgen CLK_TOP_UNIVPLL2_D4>,
+				 <&topckgen CLK_TOP_SPI_SEL>,
+				 <&infracfg CLK_IFR_SPI0>;
+			clock-names = "parent-clk", "sel-clk", "spi-clk";
+			status = "disabled";
+		};
+
+		ssusb: usb at 11201000 {
+			compatible = "mediatek,mt8365-mtu3", "mediatek,mtu3";
+			reg = <0 0x11201000 0 0x2e00>, <0 0x11203e00 0 0x0100>;
+			reg-names = "mac", "ippc";
+			interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_LOW>;
+			phys = <&u2port0 PHY_TYPE_USB2>,
+			       <&u2port1 PHY_TYPE_USB2>;
+			clocks = <&topckgen CLK_TOP_SSUSB_TOP_CK_EN>,
+				 <&infracfg CLK_IFR_SSUSB_REF>,
+				 <&infracfg CLK_IFR_SSUSB_SYS>,
+				 <&infracfg CLK_IFR_ICUSB>;
+			clock-names = "sys_ck", "ref_ck", "mcu_ck", "dma_ck";
+			#address-cells = <2>;
+			#size-cells = <2>;
+			ranges;
+			status = "disabled";
+
+			usb_host: usb at 11200000 {
+				compatible = "mediatek,mt8365-xhci", "mediatek,mtk-xhci";
+				reg = <0 0x11200000 0 0x1000>;
+				reg-names = "mac";
+				interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_LOW>;
+				clocks = <&topckgen CLK_TOP_SSUSB_TOP_CK_EN>,
+					 <&infracfg CLK_IFR_SSUSB_REF>,
+					 <&infracfg CLK_IFR_SSUSB_SYS>,
+					 <&infracfg CLK_IFR_ICUSB>,
+					 <&infracfg CLK_IFR_SSUSB_XHCI>;
+				clock-names = "sys_ck", "ref_ck", "mcu_ck",
+					      "dma_ck", "xhci_ck";
+				status = "disabled";
+			};
+		};
+
+		u3phy: phy at 11cc0000 {
+			compatible = "mediatek,mt8365-tphy", "mediatek,generic-tphy-v2";
+			#address-cells = <2>;
+			#size-cells = <2>;
+			#phy-cells = <1>;
+			ranges;
+
+			u2port0: usb-phy at 11cc0000 {
+				reg = <0 0x11cc0000 0 0x400>;
+				clocks = <&topckgen CLK_TOP_SSUSB_PHY_CK_EN>,
+					 <&topckgen CLK_TOP_USB20_48M_EN>;
+				clock-names = "ref", "da_ref";
+				#phy-cells = <1>;
+			};
+
+			u2port1: usb-phy at 11cc1000 {
+				reg = <0 0x11cc1000 0 0x400>;
+				clocks = <&topckgen CLK_TOP_SSUSB_PHY_CK_EN>,
+					 <&topckgen CLK_TOP_USB20_48M_EN>;
+				clock-names = "ref", "da_ref";
+				#phy-cells = <1>;
+			};
+		};
+	};
+
+	timer {
+		compatible = "arm,armv8-timer";
+		interrupt-parent = <&gic>;
+		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW 0>,
+			     <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW 0>,
+			     <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW 0>,
+			     <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW 0>;
+	};
+};
-- 
2.38.1



From gregkh at linuxfoundation.org  Thu Dec  8 07:37:14 2022
From: gregkh at linuxfoundation.org (Greg KH)
Date: Thu, 8 Dec 2022 16:37:14 +0100
Subject: [PATCH] usb: mtu3: fix sleep-in-atomic-context bug caused by
 usleep_range()
In-Reply-To: <20221128063207.100596-1-duoming@zju.edu.cn>
References: <20221128063207.100596-1-duoming@zju.edu.cn>
Message-ID: <Y5IEqo8EeDiBnzwM@kroah.com>

On Mon, Nov 28, 2022 at 02:32:07PM +0800, Duoming Zhou wrote:
> The function zero_autoresume() is a timer handler that runs in
> atomic context. It is used to wake up the host connected to the
> gadget. when used by usb mtu3, the zero_autoresume() calls
> usleep_range() that can sleep. As a result, the sleep-in-atomic-
> context bug will happen. The process is shown below.
> 
>     (atomic context)
> zero_autoresume()
>   usb_gadget_wakeup()
>     mtu3_gadget_wakeup()
>       usleep_range() //sleep
> 
> This patch changes usleep_range(10000, 11000) to mdelay(10)
> in order to mitigate the bug.
> 
> Fixes: df2069acb005 ("usb: Add MediaTek USB3 DRD driver")
> Signed-off-by: Duoming Zhou <duoming at zju.edu.cn>
> ---
>  drivers/usb/mtu3/mtu3_gadget.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/mtu3/mtu3_gadget.c b/drivers/usb/mtu3/mtu3_gadget.c
> index 80236e7b089..e366c4a97d7 100644
> --- a/drivers/usb/mtu3/mtu3_gadget.c
> +++ b/drivers/usb/mtu3/mtu3_gadget.c
> @@ -468,7 +468,7 @@ static int mtu3_gadget_wakeup(struct usb_gadget *gadget)
>  	} else {
>  		mtu3_setbits(mtu->mac_base, U3D_POWER_MANAGEMENT, RESUME);
>  		spin_unlock_irqrestore(&mtu->lock, flags);
> -		usleep_range(10000, 11000);
> +		mdelay(10);
>  		spin_lock_irqsave(&mtu->lock, flags);
>  		mtu3_clrbits(mtu->mac_base, U3D_POWER_MANAGEMENT, RESUME);
>  	}
> -- 
> 2.17.1
> 

Have you tested this on real hardware?  How come the original code does
not trigger any run-time warnings?  Does your change solve the runtime
issue?

thanks,

greg k-h


From shayne.chen at mediatek.com  Thu Dec  8 08:01:37 2022
From: shayne.chen at mediatek.com (Shayne Chen)
Date: Fri, 9 Dec 2022 00:01:37 +0800
Subject: [PATCH] wifi: mt76: mt7915: add chip id condition in mt7915_check_eeprom()
Message-ID: <20221208160137.3855-1-shayne.chen@mediatek.com>

When flash mode is enabled, and the eeprom data in the flash is not for
the current chipset, it'll still be checked valid, and the default
eeprom bin won't be loaded.
(e.g., mt7915 NIC inserted with mt7916 eeprom data in the flash.)

Fix this kind of case by adding chip id into consideration in
mt7915_check_eeprom().

Reported-by: Cheng-Ji Li <cheng-ji.li at mediatek.com>
Signed-off-by: Shayne Chen <shayne.chen at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
index 59069fb86414..e21aa03c85b1 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
@@ -33,14 +33,12 @@ static int mt7915_check_eeprom(struct mt7915_dev *dev)
 	u8 *eeprom = dev->mt76.eeprom.data;
 	u16 val = get_unaligned_le16(eeprom);
 
-	switch (val) {
-	case 0x7915:
-	case 0x7916:
-	case 0x7986:
+	if ((is_mt7915(&dev->mt76) && val == 0x7915) ||
+	    (is_mt7916(&dev->mt76) && val == 0x7916) ||
+	    (is_mt7986(&dev->mt76) && val == 0x7986))
 		return 0;
-	default:
-		return -EINVAL;
-	}
+
+	return -EINVAL;
 }
 
 static char *mt7915_eeprom_name(struct mt7915_dev *dev)
-- 
2.25.1



From Nicolas.Cavallari at green-communications.fr  Thu Dec  8 08:30:19 2022
From: Nicolas.Cavallari at green-communications.fr (Nicolas Cavallari)
Date: Thu, 8 Dec 2022 17:30:19 +0100
Subject: [PATCH v2 1/3] wifi: mt76: mt7915: rework
 mt7915_thermal_set_cur_throttle_state()
In-Reply-To: <1813da6bd8bf9448474ee0f61c23ba4d07470c55.camel@mediatek.com>
References: <20221207052500.10855-1-howard-yh.hsu@mediatek.com>
 <20221207052500.10855-2-howard-yh.hsu@mediatek.com>
 <8e8cfe60-c040-bf02-665b-a980852864aa@green-communications.fr>
 <1813da6bd8bf9448474ee0f61c23ba4d07470c55.camel@mediatek.com>
Message-ID: <24e23388-8f3f-006e-88b5-a07dfd675e13@green-communications.fr>

On 08/12/2022 13:44, Howard-YH Hsu (???) wrote:
> On Wed, 2022-12-07 at 09:15 +0100, Nicolas Cavallari wrote:
>> On 07/12/2022 06:24, Howard Hsu wrote:
>> > This patch includes 3 changes:
>> > 1. The maximum throttle state can be set to 100 to fix the problem
>> > that
>> > thermal_protect_disable can never be triggered.
>> 
>> You are modifying the cooling_device part.  The cooling_device is 
>> explicitly configured to have a max state of
>> MT7915_CDEV_THROTTLE_MAX 
>> (=99), so the thermal subsystem will probably prevent 
>> mt7915_thermal_set_cur_throttle_state from being called with a
>> higher 
>> value.  It will also probably complain if get_cur_state starts
>> returning 
>> values above MT7915_CDEV_THROTTLE_MAX.
>> 
>> And, as the comment below indicates, the thermal subsystem expect
>> that a 
>> higher state provide more cooling.  So if 99 means "maximum
>> cooling", 
>> 100 cannot mean "disable cooling".
>> 
>> Also, last time I tried, thermal_protect_disable didn't work; It
>> didn't 
>> disable anything, the previous thermal throttle kept being applied. 
>> Maybe a new firmware fixed this, but the kernel cannot simply expect
>> the 
>> firmware to be up to date.
>> 
> 
> Thanks for your comments. Let me give you an example to confirm with
> you if I understand your comments correctly.
> 
> 1. The current cooling state of the cooling device is 50 (cur_state =
> 50).
> 2. The cooling state is set to 100 for "disable cooling".
> 3. The thermal subsystem decides to decrease state because the rest of
> system is cooler. And then it will adjust it downward based on
> cur_state, which is 100. For example, thermal subsytem set cur_state to
> 90. But obviously this will make the performance worse than at step 1,
> even though the system is cooler. The design for 100 mean "disable
> cooling" will mess up the thermal governor.
> 
> Let me know if there is any misunderstanding. And I will remove the
> first change of this patch.

This is pretty much my second point.

The other case is if the system is overheating a lot and the kernel bumps the 
state from e.g. 80 to 100, then the system should not disable throttling.

> 
>> > 2. Throttle state do not need to be different from the previous
>> > state.
>> > This will make it is impossible for users to just change the
>> > trigger/restore temp but not the throttle state.
>> 
>> The throttle state is mostly set by the kernel's thermal governor
>> and 
>> the user has only very little control over it.  The thermal governor 
>> runs every X seconds and will change the state if it thinks it is
>> too 
>> low or too high.
>> 
>> The default step_wise governor will aggressively set it to zero if
>> the 
>> system isn't overheating, for example.
>> 
> 
> I don't think there is any conflict between your comment and second
> change. If we keep the check that previous cooling state shall be
> different from the new cooling state, this will bother users who only
> wants to change the temp1_crit but not the cur_state. It is
> unreasonable for the user, if they wants the new temp1_crit to take
> effect in the firmware, they must set a differnt cooling state.

The point I wanted to make is that the kernel sets the throttle state a lot, and 
I assumed that it could also do it even if the state does not change, which 
would send unnecessary mcu commands. But it's apparently not the case.

Also, if the user changes temp1_crit or temp1_max, the changes should probably 
be applied immediately instead of expecting the user to change the state afterward.


From sean.wang at mediatek.com  Thu Dec  8 15:01:57 2022
From: sean.wang at mediatek.com (sean.wang at mediatek.com)
Date: Fri, 9 Dec 2022 07:01:57 +0800
Subject: [PATCH] wifi: mt76: mt7921: resource leaks at mt7921_check_offload_capability()
Message-ID: <1670540517-21517-1-git-send-email-sean.wang@mediatek.com>

From: Sean Wang <sean.wang at mediatek.com>

Fixed coverity issue with resource leaks at variable "fw" going out of
scope leaks the storage it points to mt7921_check_offload_capability().

Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
Addresses-Coverity-ID: 1527806 ("Resource leaks")
Fixes: 034ae28b56f1 ("wifi: mt76: mt7921: introduce remain_on_channel support")
Signed-off-by: Sean Wang <sean.wang at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7921/init.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
index 542dfd425129..d4b681d7e1d2 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
@@ -175,7 +175,7 @@ u8 mt7921_check_offload_capability(struct device *dev, const char *fw_wm)
 
 	if (!fw || !fw->data || fw->size < sizeof(*hdr)) {
 		dev_err(dev, "Invalid firmware\n");
-		return -EINVAL;
+		goto out;
 	}
 
 	data = fw->data;
@@ -206,6 +206,7 @@ u8 mt7921_check_offload_capability(struct device *dev, const char *fw_wm)
 		data += le16_to_cpu(rel_info->len) + rel_info->pad_len;
 	}
 
+out:
 	release_firmware(fw);
 
 	return features ? features->data : 0;
-- 
2.25.1



From julian.calaby at gmail.com  Thu Dec  8 15:14:50 2022
From: julian.calaby at gmail.com (Julian Calaby)
Date: Fri, 9 Dec 2022 10:14:50 +1100
Subject: [PATCH] wifi: mt76: mt7915: add chip id condition in mt7915_check_eeprom()
In-Reply-To: <20221208160137.3855-1-shayne.chen@mediatek.com>
References: <20221208160137.3855-1-shayne.chen@mediatek.com>
Message-ID: <CAGRGNgWvT7e5DkTO96PaMazDae-wTe3ctBx8-n6EGhYxFPwCHQ@mail.gmail.com>

Hi Shayne,

On Fri, Dec 9, 2022 at 3:06 AM Shayne Chen <shayne.chen at mediatek.com> wrote:
>
> When flash mode is enabled, and the eeprom data in the flash is not for
> the current chipset, it'll still be checked valid, and the default
> eeprom bin won't be loaded.
> (e.g., mt7915 NIC inserted with mt7916 eeprom data in the flash.)
>
> Fix this kind of case by adding chip id into consideration in
> mt7915_check_eeprom().
>
> Reported-by: Cheng-Ji Li <cheng-ji.li at mediatek.com>
> Signed-off-by: Shayne Chen <shayne.chen at mediatek.com>
> ---
>  drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c | 12 +++++-------
>  1 file changed, 5 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
> index 59069fb86414..e21aa03c85b1 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
> @@ -33,14 +33,12 @@ static int mt7915_check_eeprom(struct mt7915_dev *dev)
>         u8 *eeprom = dev->mt76.eeprom.data;
>         u16 val = get_unaligned_le16(eeprom);
>
> -       switch (val) {
> -       case 0x7915:
> -       case 0x7916:
> -       case 0x7986:
> +       if ((is_mt7915(&dev->mt76) && val == 0x7915) ||
> +           (is_mt7916(&dev->mt76) && val == 0x7916) ||
> +           (is_mt7986(&dev->mt76) && val == 0x7986))
>                 return 0;
> -       default:
> -               return -EINVAL;
> -       }
> +
> +       return -EINVAL;

If this returned a bool, you could write this as:

switch (val) {
        case 0x7915:
                return is_mt7915(&dev->mt76);
}

Thanks,

-- 
Julian Calaby

Email: julian.calaby at gmail.com
Profile: http://www.google.com/profiles/julian.calaby/


From quic_asutoshd at quicinc.com  Thu Dec  8 15:18:27 2022
From: quic_asutoshd at quicinc.com (Asutosh Das)
Date: Thu, 8 Dec 2022 15:18:27 -0800
Subject: [PATCH v11 01/16] ufs: core: Optimize duplicate code to read extended feature
In-Reply-To: <cover.1670541363.git.quic_asutoshd@quicinc.com>
References: <cover.1670541363.git.quic_asutoshd@quicinc.com>
Message-ID: <f5bae5e9e3d04c1a0dc0f39e2c6239f8ea450404.1670541363.git.quic_asutoshd@quicinc.com>

The code to parse the extended feature is duplicated twice
in the ufs core. Replace the duplicated code with a
function.

Signed-off-by: Asutosh Das <quic_asutoshd at quicinc.com>
Reviewed-by: Bart Van Assche <bvanassche at acm.org>
Reviewed-by: Manivannan Sadhasivam <mani at kernel.org>
Reviewed-by: Stanley Chu <stanley.chu at mediatek.com>
---
 drivers/ufs/core/ufshcd.c | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 2dbe249..6ea22b5 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -215,6 +215,17 @@ ufs_get_desired_pm_lvl_for_dev_link_state(enum ufs_dev_pwr_mode dev_state,
 	return UFS_PM_LVL_0;
 }
 
+static unsigned int ufs_get_ext_ufs_feature(struct ufs_hba *hba,
+					    const u8 *desc_buf)
+{
+	if (hba->desc_size[QUERY_DESC_IDN_DEVICE] <
+	    DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP + 4)
+		return 0;
+
+	return get_unaligned_be32(desc_buf +
+				  DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP);
+}
+
 static const struct ufs_dev_quirk ufs_fixups[] = {
 	/* UFS cards deviations table */
 	{ .wmanufacturerid = UFS_VENDOR_MICRON,
@@ -7608,13 +7619,7 @@ static void ufshcd_wb_probe(struct ufs_hba *hba, const u8 *desc_buf)
 	     (hba->dev_quirks & UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES)))
 		goto wb_disabled;
 
-	if (hba->desc_size[QUERY_DESC_IDN_DEVICE] <
-	    DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP + 4)
-		goto wb_disabled;
-
-	ext_ufs_feature = get_unaligned_be32(desc_buf +
-					DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP);
-
+	ext_ufs_feature = ufs_get_ext_ufs_feature(hba, desc_buf);
 	if (!(ext_ufs_feature & UFS_DEV_WRITE_BOOSTER_SUP))
 		goto wb_disabled;
 
@@ -7668,7 +7673,7 @@ static void ufshcd_temp_notif_probe(struct ufs_hba *hba, const u8 *desc_buf)
 	if (!(hba->caps & UFSHCD_CAP_TEMP_NOTIF) || dev_info->wspecversion < 0x300)
 		return;
 
-	ext_ufs_feature = get_unaligned_be32(desc_buf + DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP);
+	ext_ufs_feature = ufs_get_ext_ufs_feature(hba, desc_buf);
 
 	if (ext_ufs_feature & UFS_DEV_LOW_TEMP_NOTIF)
 		mask |= MASK_EE_TOO_LOW_TEMP;
-- 
2.7.4



From quic_asutoshd at quicinc.com  Thu Dec  8 15:18:28 2022
From: quic_asutoshd at quicinc.com (Asutosh Das)
Date: Thu, 8 Dec 2022 15:18:28 -0800
Subject: [PATCH v11 02/16] ufs: core: Probe for ext_iid support
In-Reply-To: <cover.1670541363.git.quic_asutoshd@quicinc.com>
References: <cover.1670541363.git.quic_asutoshd@quicinc.com>
Message-ID: <b4e77e41e3d4e7a804a300a68c4f1208fa819119.1670541364.git.quic_asutoshd@quicinc.com>

Task Tag is limited to 8 bits and this restricts the number
of active IOs to 255.
In Multi-circular queue mode, this may not be enough.
The specification provides EXT_IID which can be used to increase
the number of IOs if the UFS device and UFSHC support it.
This patch adds support to probe for ext_iid support in
ufs device and UFSHC.

Co-developed-by: Can Guo <quic_cang at quicinc.com>
Signed-off-by: Can Guo <quic_cang at quicinc.com>
Signed-off-by: Asutosh Das <quic_asutoshd at quicinc.com>
Reviewed-by: Bart Van Assche <bvanassche at acm.org>
Reviewed-by: Avri Altman <avri.altman at wdc.com>
Reviewed-by: Manivannan Sadhasivam <mani at kernel.org>
Reviewed-by: Stanley Chu <stanley.chu at mediatek.com>
---
 drivers/ufs/core/ufshcd.c | 31 +++++++++++++++++++++++++++++++
 include/ufs/ufs.h         |  4 ++++
 include/ufs/ufshcd.h      |  4 ++++
 include/ufs/ufshci.h      |  7 +++++++
 4 files changed, 46 insertions(+)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 6ea22b5..595fd3c 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -2258,6 +2258,10 @@ static inline int ufshcd_hba_capabilities(struct ufs_hba *hba)
 	if (err)
 		dev_err(hba->dev, "crypto setup failed\n");
 
+	hba->mcq_capabilities = ufshcd_readl(hba, REG_MCQCAP);
+	hba->ext_iid_sup = FIELD_GET(MASK_EXT_IID_SUPPORT,
+				     hba->mcq_capabilities);
+
 	return err;
 }
 
@@ -7687,6 +7691,30 @@ static void ufshcd_temp_notif_probe(struct ufs_hba *hba, const u8 *desc_buf)
 	}
 }
 
+static void ufshcd_ext_iid_probe(struct ufs_hba *hba, u8 *desc_buf)
+{
+	struct ufs_dev_info *dev_info = &hba->dev_info;
+	u32 ext_ufs_feature;
+	u32 ext_iid_en = 0;
+	int err;
+
+	/* Only UFS-4.0 and above may support EXT_IID */
+	if (dev_info->wspecversion < 0x400)
+		goto out;
+
+	ext_ufs_feature = ufs_get_ext_ufs_feature(hba, desc_buf);
+	if (!(ext_ufs_feature & UFS_DEV_EXT_IID_SUP))
+		goto out;
+
+	err = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_READ_ATTR,
+				      QUERY_ATTR_IDN_EXT_IID_EN, 0, 0, &ext_iid_en);
+	if (err)
+		dev_err(hba->dev, "failed reading bEXTIIDEn. err = %d\n", err);
+
+out:
+	dev_info->b_ext_iid_en = ext_iid_en;
+}
+
 void ufshcd_fixup_dev_quirks(struct ufs_hba *hba,
 			     const struct ufs_dev_quirk *fixups)
 {
@@ -7785,6 +7813,9 @@ static int ufs_get_device_desc(struct ufs_hba *hba)
 
 	ufshcd_temp_notif_probe(hba, desc_buf);
 
+	if (hba->ext_iid_sup)
+		ufshcd_ext_iid_probe(hba, desc_buf);
+
 	/*
 	 * ufshcd_read_string_desc returns size of the string
 	 * reset the error value
diff --git a/include/ufs/ufs.h b/include/ufs/ufs.h
index 1bba3fe..ba2a1d8 100644
--- a/include/ufs/ufs.h
+++ b/include/ufs/ufs.h
@@ -165,6 +165,7 @@ enum attr_idn {
 	QUERY_ATTR_IDN_AVAIL_WB_BUFF_SIZE       = 0x1D,
 	QUERY_ATTR_IDN_WB_BUFF_LIFE_TIME_EST    = 0x1E,
 	QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE        = 0x1F,
+	QUERY_ATTR_IDN_EXT_IID_EN		= 0x2A,
 };
 
 /* Descriptor idn for Query requests */
@@ -352,6 +353,7 @@ enum {
 	UFS_DEV_EXT_TEMP_NOTIF		= BIT(6),
 	UFS_DEV_HPB_SUPPORT		= BIT(7),
 	UFS_DEV_WRITE_BOOSTER_SUP	= BIT(8),
+	UFS_DEV_EXT_IID_SUP		= BIT(16),
 };
 #define UFS_DEV_HPB_SUPPORT_VERSION		0x310
 
@@ -601,6 +603,8 @@ struct ufs_dev_info {
 
 	bool	b_rpm_dev_flush_capable;
 	u8	b_presrv_uspc_en;
+	/* UFS EXT_IID Enable */
+	bool	b_ext_iid_en;
 };
 
 /*
diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h
index 5cf81df..aec37cb9 100644
--- a/include/ufs/ufshcd.h
+++ b/include/ufs/ufshcd.h
@@ -747,6 +747,7 @@ struct ufs_hba_monitor {
  * @outstanding_lock: Protects @outstanding_reqs.
  * @outstanding_reqs: Bits representing outstanding transfer requests
  * @capabilities: UFS Controller Capabilities
+ * @mcq_capabilities: UFS Multi Circular Queue capabilities
  * @nutrs: Transfer Request Queue depth supported by controller
  * @nutmrs: Task Management Queue depth supported by controller
  * @reserved_slot: Used to submit device commands. Protected by @dev_cmd.lock.
@@ -830,6 +831,7 @@ struct ufs_hba_monitor {
  *	device
  * @complete_put: whether or not to call ufshcd_rpm_put() from inside
  *	ufshcd_resume_complete()
+ * @ext_iid_sup: is EXT_IID is supported by UFSHC
  */
 struct ufs_hba {
 	void __iomem *mmio_base;
@@ -871,6 +873,7 @@ struct ufs_hba {
 
 	u32 capabilities;
 	int nutrs;
+	u32 mcq_capabilities;
 	int nutmrs;
 	u32 reserved_slot;
 	u32 ufs_version;
@@ -978,6 +981,7 @@ struct ufs_hba {
 #endif
 	u32 luns_avail;
 	bool complete_put;
+	bool ext_iid_sup;
 };
 
 /* Returns true if clocks can be gated. Otherwise false */
diff --git a/include/ufs/ufshci.h b/include/ufs/ufshci.h
index f525566..4d4da06 100644
--- a/include/ufs/ufshci.h
+++ b/include/ufs/ufshci.h
@@ -22,6 +22,7 @@ enum {
 /* UFSHCI Registers */
 enum {
 	REG_CONTROLLER_CAPABILITIES		= 0x00,
+	REG_MCQCAP				= 0x04,
 	REG_UFS_VERSION				= 0x08,
 	REG_CONTROLLER_DEV_ID			= 0x10,
 	REG_CONTROLLER_PROD_ID			= 0x14,
@@ -68,6 +69,12 @@ enum {
 	MASK_OUT_OF_ORDER_DATA_DELIVERY_SUPPORT	= 0x02000000,
 	MASK_UIC_DME_TEST_MODE_SUPPORT		= 0x04000000,
 	MASK_CRYPTO_SUPPORT			= 0x10000000,
+	MASK_MCQ_SUPPORT			= 0x40000000,
+};
+
+/* MCQ capability mask */
+enum {
+	MASK_EXT_IID_SUPPORT = 0x00000400,
 };
 
 #define UFS_MASK(mask, offset)		((mask) << (offset))
-- 
2.7.4



From quic_asutoshd at quicinc.com  Thu Dec  8 15:18:29 2022
From: quic_asutoshd at quicinc.com (Asutosh Das)
Date: Thu, 8 Dec 2022 15:18:29 -0800
Subject: [PATCH v11 03/16] ufs: core: Introduce Multi-circular queue capability
In-Reply-To: <cover.1670541363.git.quic_asutoshd@quicinc.com>
References: <cover.1670541363.git.quic_asutoshd@quicinc.com>
Message-ID: <49921a49f2ad5b64a7c46535c485f281877baf7a.1670541364.git.quic_asutoshd@quicinc.com>

Add support to check for MCQ capability in the UFSHC.
Add a module parameter to disable MCQ if needed.

Co-developed-by: Can Guo <quic_cang at quicinc.com>
Signed-off-by: Can Guo <quic_cang at quicinc.com>
Signed-off-by: Asutosh Das <quic_asutoshd at quicinc.com>
Reviewed-by: Bart Van Assche <bvanassche at acm.org>
Reviewed-by: Manivannan Sadhasivam <mani at kernel.org>
Reviewed-by: Stanley Chu <stanley.chu at mediatek.com>
---
 drivers/ufs/core/ufshcd.c | 26 ++++++++++++++++++++++++++
 include/ufs/ufshcd.h      |  2 ++
 2 files changed, 28 insertions(+)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 595fd3c..eca15b0 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -89,6 +89,28 @@
 /* Polling time to wait for fDeviceInit */
 #define FDEVICEINIT_COMPL_TIMEOUT 1500 /* millisecs */
 
+/* UFSHC 4.0 compliant HC support this mode, refer param_set_mcq_mode() */
+static bool use_mcq_mode = true;
+
+static int param_set_mcq_mode(const char *val, const struct kernel_param *kp)
+{
+	int ret;
+
+	ret = param_set_bool(val, kp);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+static const struct kernel_param_ops mcq_mode_ops = {
+	.set = param_set_mcq_mode,
+	.get = param_get_bool,
+};
+
+module_param_cb(use_mcq_mode, &mcq_mode_ops, &use_mcq_mode, 0644);
+MODULE_PARM_DESC(use_mcq_mode, "Control MCQ mode for controllers starting from UFSHCI 4.0. 1 - enable MCQ, 0 - disable MCQ. MCQ is enabled by default");
+
 #define ufshcd_toggle_vreg(_dev, _vreg, _on)				\
 	({                                                              \
 		int _ret;                                               \
@@ -2258,6 +2280,10 @@ static inline int ufshcd_hba_capabilities(struct ufs_hba *hba)
 	if (err)
 		dev_err(hba->dev, "crypto setup failed\n");
 
+	hba->mcq_sup = FIELD_GET(MASK_MCQ_SUPPORT, hba->capabilities);
+	if (!hba->mcq_sup)
+		return err;
+
 	hba->mcq_capabilities = ufshcd_readl(hba, REG_MCQCAP);
 	hba->ext_iid_sup = FIELD_GET(MASK_EXT_IID_SUPPORT,
 				     hba->mcq_capabilities);
diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h
index aec37cb9..70c0f9f 100644
--- a/include/ufs/ufshcd.h
+++ b/include/ufs/ufshcd.h
@@ -832,6 +832,7 @@ struct ufs_hba_monitor {
  * @complete_put: whether or not to call ufshcd_rpm_put() from inside
  *	ufshcd_resume_complete()
  * @ext_iid_sup: is EXT_IID is supported by UFSHC
+ * @mcq_sup: is mcq supported by UFSHC
  */
 struct ufs_hba {
 	void __iomem *mmio_base;
@@ -982,6 +983,7 @@ struct ufs_hba {
 	u32 luns_avail;
 	bool complete_put;
 	bool ext_iid_sup;
+	bool mcq_sup;
 };
 
 /* Returns true if clocks can be gated. Otherwise false */
-- 
2.7.4



From Yong.Wu at mediatek.com  Thu Dec  8 18:20:36 2022
From: Yong.Wu at mediatek.com (=?utf-8?B?WW9uZyBXdSAo5ZC05YuHKQ==?=)
Date: Fri, 9 Dec 2022 02:20:36 +0000
Subject: [PATCH] iommu/mediatek: Fix forever loop in error handling
In-Reply-To: <68cb1ee26fc61a290a9e69b15234848ec8a02b8c.camel@mediatek.com>
References: <Y5C3mTam2nkbaz6o@kili>
	 <68cb1ee26fc61a290a9e69b15234848ec8a02b8c.camel@mediatek.com>
Message-ID: <b28e0163c75e320b2dc1b9fe7007277d1847bb56.camel@mediatek.com>

Hi Joerg,

On Thu, 2022-12-08 at 09:06 +0800, YongWu wrote:
> On Wed, 2022-12-07 at 18:56 +0300, Dan Carpenter wrote:
> > There is a typo so this loop does i++ where i-- was intended.  It
> > will
> > result in looping until the kernel crashes.
> > 
> > Fixes: 26593928564c ("iommu/mediatek: Add error path for loop of
> > mm_dts_parse")
> > Signed-off-by: Dan Carpenter <error27 at gmail.com>
> 
> Sorry for this.
> 
> Reviewed-by: Yong Wu <yong.wu at mediatek.com>
> 
> Thanks Dan.

Could you help apply this?

I reproduced this below issue, and it could be fixed by this patch.

https://lore.kernel.org/linux-mediatek/Y5HrIhEfuEgGKuMB at sirena.org.uk/

Thanks.

> 
> > ---
> >  drivers/iommu/mtk_iommu.c | 3 +--
> >  1 file changed, 1 insertion(+), 2 deletions(-)
> > 
> > diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
> > index 3e46bc8b0714..2badd6acfb23 100644
> > --- a/drivers/iommu/mtk_iommu.c
> > +++ b/drivers/iommu/mtk_iommu.c
> > @@ -1160,8 +1160,7 @@ static int mtk_iommu_mm_dts_parse(struct
> > device
> > *dev, struct component_match **m
> >  	return 0;
> >  
> >  err_larbdev_put:
> > -	/* id may be not linear mapping, loop whole the array */
> > -	for (i = MTK_LARB_NR_MAX - 1; i >= 0; i++) {
> > +	for (i = MTK_LARB_NR_MAX - 1; i >= 0; i--) {
> >  		if (!data->larb_imu[i].dev)
> >  			continue;
> >  		put_device(data->larb_imu[i].dev);

From yc.hung at mediatek.com  Thu Dec  8 19:10:53 2022
From: yc.hung at mediatek.com (YC Hung)
Date: Fri, 9 Dec 2022 11:10:53 +0800
Subject: [PATCH] ASoC: mediatek: mt8195: add sof be ops to check audio active
Message-ID: <20221209031053.8444-1-yc.hung@mediatek.com>

In MT8195 SOF design, both DSP and audio driver would access audio
registers. Before DSP accesses audio registers, audio power and clock
should be enabled. DSP will hang up if DSP access audio register but
audio power and clock are disabled. Therefore, we add audio pm runtime
active checking before accessing audio registers in SOF BE's callback
hw_params function to avoid this situation.

Signed-off-by: YC Hung <yc.hung at mediatek.com>
---
 sound/soc/mediatek/mt8195/mt8195-mt6359.c | 30 +++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/sound/soc/mediatek/mt8195/mt8195-mt6359.c b/sound/soc/mediatek/mt8195/mt8195-mt6359.c
index 61be66f47723..4682748d82be 100644
--- a/sound/soc/mediatek/mt8195/mt8195-mt6359.c
+++ b/sound/soc/mediatek/mt8195/mt8195-mt6359.c
@@ -633,6 +633,32 @@ static const struct snd_soc_ops mt8195_rt1011_etdm_ops = {
 	.hw_params = mt8195_rt1011_etdm_hw_params,
 };
 
+static int mt8195_sof_be_hw_params(struct snd_pcm_substream *substream,
+				   struct snd_pcm_hw_params *params)
+{
+	struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
+	struct snd_soc_component *cmpnt_afe = NULL;
+	struct snd_soc_pcm_runtime *runtime;
+
+	/* find afe component */
+	for_each_card_rtds(rtd->card, runtime) {
+		cmpnt_afe = snd_soc_rtdcom_lookup(runtime, AFE_PCM_NAME);
+		if (cmpnt_afe)
+			break;
+	}
+
+	if (cmpnt_afe && !pm_runtime_active(cmpnt_afe->dev)) {
+		dev_err(rtd->dev, "afe pm runtime is not active!!\n");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static const struct snd_soc_ops mt8195_sof_be_ops = {
+	.hw_params = mt8195_sof_be_hw_params,
+};
+
 static int mt8195_rt1011_init(struct snd_soc_pcm_runtime *rtd)
 {
 	struct snd_soc_card *card = rtd->card;
@@ -1272,24 +1298,28 @@ static struct snd_soc_dai_link mt8195_mt6359_dai_links[] = {
 		.name = "AFE_SOF_DL2",
 		.no_pcm = 1,
 		.dpcm_playback = 1,
+		.ops = &mt8195_sof_be_ops,
 		SND_SOC_DAILINK_REG(AFE_SOF_DL2),
 	},
 	[DAI_LINK_SOF_DL3_BE] = {
 		.name = "AFE_SOF_DL3",
 		.no_pcm = 1,
 		.dpcm_playback = 1,
+		.ops = &mt8195_sof_be_ops,
 		SND_SOC_DAILINK_REG(AFE_SOF_DL3),
 	},
 	[DAI_LINK_SOF_UL4_BE] = {
 		.name = "AFE_SOF_UL4",
 		.no_pcm = 1,
 		.dpcm_capture = 1,
+		.ops = &mt8195_sof_be_ops,
 		SND_SOC_DAILINK_REG(AFE_SOF_UL4),
 	},
 	[DAI_LINK_SOF_UL5_BE] = {
 		.name = "AFE_SOF_UL5",
 		.no_pcm = 1,
 		.dpcm_capture = 1,
+		.ops = &mt8195_sof_be_ops,
 		SND_SOC_DAILINK_REG(AFE_SOF_UL5),
 	},
 };
-- 
2.18.0



From patchwork-bot+netdevbpf at kernel.org  Thu Dec  8 19:50:16 2022
From: patchwork-bot+netdevbpf at kernel.org (patchwork-bot+netdevbpf at kernel.org)
Date: Fri, 09 Dec 2022 03:50:16 +0000
Subject: [PATCH v3 net-next 0/2] fix possible deadlock during WED attach
In-Reply-To: <cover.1670421354.git.lorenzo@kernel.org>
References: <cover.1670421354.git.lorenzo@kernel.org>
Message-ID: <167055781666.4041.15328883962417059725.git-patchwork-notify@kernel.org>

Hello:

This series was applied to netdev/net-next.git (master)
by Jakub Kicinski <kuba at kernel.org>:

On Wed,  7 Dec 2022 15:04:53 +0100 you wrote:
> Fix a possible deadlock in mtk_wed_attach if mtk_wed_wo_init routine fails.
> Check wo pointer is properly allocated before running mtk_wed_wo_reset() and
> mtk_wed_wo_deinit().
> 
> Changes sice v2:
> - add WARN_ON in mtk_wed_mcu_msg_update()
> - split in two patches
> Changes since v1:
> - move wo pointer checks in __mtk_wed_detach()
> 
> [...]

Here is the summary with links:
  - [v3,net-next,1/2] net: ethernet: mtk_wed: fix some possible NULL pointer dereferences
    https://git.kernel.org/netdev/net-next/c/c79e0af5ae5e
  - [v3,net-next,2/2] net: ethernet: mtk_wed: fix possible deadlock if mtk_wed_wo_init fails
    https://git.kernel.org/netdev/net-next/c/587585e1bbeb

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html




From xiangsheng.hou at mediatek.com  Thu Dec  8 22:43:08 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Fri, 9 Dec 2022 14:43:08 +0800
Subject: [PATCH v4 0/9] Add MediaTek MT7986 SPI NAND and ECC support
Message-ID: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>

This patch series add MediaTek MT7986 SPI NAND and ECC controller
support, split ECC engine with rawnand controller in bindings and
change to YAML schema.

Changes since V3:
 - Correct mediatek,mtk-nfc.yaml dt-bindings.

Changes since V2:
 - Change ECC err_mask value with GENMASK macro.
 - Change snfi mediatek,rx-latch-latency to mediatek,rx-latch-latency-ns.
 - Add a separate patch for DTS change.
 - Move common description to top-level pattern properties.
 - Drop redundant parts in dt-bindings.

Changes since V1:
 - Use existing sample delay property.
 - Add restricting for optional nfi_hclk.
 - Improve and perfect dt-bindings documentation.
 - Change existing node name to match NAND controller DT bingings.
 - Fix issues reported by dt_binding_check.
 - Fix issues reported by dtbs_check.

Xiangsheng Hou (9):
  spi: mtk-snfi: Change default page format to setup default setting
  spi: mtk-snfi: Add optional nfi_hclk which is needed for MT7986
  mtd: nand: ecc-mtk: Add ECC support fot MT7986 IC
  dt-bindings: spi: mtk-snfi: Add compatible for MT7986
  spi: mtk-snfi: Add snfi sample delay and read latency adjustment
  dt-bindings: spi: mtk-snfi: Add read latch latency property
  dt-bindings: mtd: Split ECC engine with rawnand controller
  arm/arm64: dts: mediatek: Fix existing NAND controller node name
  dt-bindings: mtd: mediatek,nand-ecc-engine: Add compatible for MT7986

 .../bindings/mtd/mediatek,mtk-nfc.yaml        | 155 +++++++++++++++
 .../mtd/mediatek,nand-ecc-engine.yaml         |  63 +++++++
 .../devicetree/bindings/mtd/mtk-nand.txt      | 176 ------------------
 .../bindings/spi/mediatek,spi-mtk-snfi.yaml   |  54 +++++-
 arch/arm/boot/dts/mt2701.dtsi                 |   2 +-
 arch/arm64/boot/dts/mediatek/mt2712e.dtsi     |   2 +-
 arch/arm64/boot/dts/mediatek/mt7622.dtsi      |   2 +-
 drivers/mtd/nand/ecc-mtk.c                    |  28 ++-
 drivers/spi/spi-mtk-snfi.c                    |  41 +++-
 9 files changed, 330 insertions(+), 193 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
 delete mode 100644 Documentation/devicetree/bindings/mtd/mtk-nand.txt

-- 
2.25.1



From xiangsheng.hou at mediatek.com  Thu Dec  8 22:43:13 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Fri, 9 Dec 2022 14:43:13 +0800
Subject: [PATCH v4 5/9] spi: mtk-snfi: Add snfi sample delay and read latency adjustment
In-Reply-To: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221209064317.2828-6-xiangsheng.hou@mediatek.com>

Add snfi sample delay and read latency adjustment which can get
from dts property.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/spi/spi-mtk-snfi.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index 85644308df23..f3f95eb37365 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -195,6 +195,8 @@
 #define DATA_READ_MODE_X4 2
 #define DATA_READ_MODE_DUAL 5
 #define DATA_READ_MODE_QUAD 6
+#define DATA_READ_LATCH_LAT GENMASK(9, 8)
+#define DATA_READ_LATCH_LAT_S 8
 #define PG_LOAD_CUSTOM_EN BIT(7)
 #define DATARD_CUSTOM_EN BIT(6)
 #define CS_DESELECT_CYC_S 0
@@ -205,6 +207,9 @@
 
 #define SNF_DLY_CTL3 0x548
 #define SFCK_SAM_DLY_S 0
+#define SFCK_SAM_DLY GENMASK(5, 0)
+#define SFCK_SAM_DLY_TOTAL 9
+#define SFCK_SAM_DLY_RANGE 47
 
 #define SNF_STA_CTL1 0x550
 #define CUS_PG_DONE BIT(28)
@@ -1368,6 +1373,8 @@ static int mtk_snand_probe(struct platform_device *pdev)
 	const struct of_device_id *dev_id;
 	struct spi_controller *ctlr;
 	struct mtk_snand *ms;
+	unsigned long spi_freq;
+	u32 val = 0;
 	int ret;
 
 	dev_id = of_match_node(mtk_snand_ids, np);
@@ -1446,6 +1453,19 @@ static int mtk_snand_probe(struct platform_device *pdev)
 	// switch to SNFI mode
 	nfi_write32(ms, SNF_CFG, SPI_MODE);
 
+	ret = of_property_read_u32(np, "rx-sample-delay-ns", &val);
+	if (!ret)
+		nfi_rmw32(ms, SNF_DLY_CTL3, SFCK_SAM_DLY,
+			  val * SFCK_SAM_DLY_RANGE / SFCK_SAM_DLY_TOTAL);
+
+	ret = of_property_read_u32(np, "mediatek,rx-latch-latency-ns", &val);
+	if (!ret) {
+		spi_freq = clk_get_rate(ms->pad_clk);
+		val = DIV_ROUND_CLOSEST(val, NSEC_PER_SEC / spi_freq);
+		nfi_rmw32(ms, SNF_MISC_CTL, DATA_READ_LATCH_LAT,
+			  val << DATA_READ_LATCH_LAT_S);
+	}
+
 	// setup an initial page format for ops matching page_cache_op template
 	// before ECC is called.
 	ret = mtk_snand_setup_pagefmt(ms, SZ_2K, SZ_64);
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Thu Dec  8 22:43:12 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Fri, 9 Dec 2022 14:43:12 +0800
Subject: [PATCH v4 4/9] dt-bindings: spi: mtk-snfi: Add compatible for MT7986
In-Reply-To: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221209064317.2828-5-xiangsheng.hou@mediatek.com>

Add dt-bindings documentation of SPI NAND controller
for MediaTek MT7986 SoC platform. And add optional
nfi_hclk property which is needed for MT7986.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../bindings/spi/mediatek,spi-mtk-snfi.yaml   | 51 +++++++++++++++----
 1 file changed, 42 insertions(+), 9 deletions(-)

diff --git a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
index 6e6e02c91780..bab23f1b11fd 100644
--- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
+++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
@@ -18,14 +18,12 @@ description: |
   using the accompanying ECC engine. There should be only one spi
   slave device following generic spi bindings.
 
-allOf:
-  - $ref: /schemas/spi/spi-controller.yaml#
-
 properties:
   compatible:
     enum:
       - mediatek,mt7622-snand
       - mediatek,mt7629-snand
+      - mediatek,mt7986-snand
 
   reg:
     items:
@@ -36,14 +34,12 @@ properties:
       - description: NFI interrupt
 
   clocks:
-    items:
-      - description: clock used for the controller
-      - description: clock used for the SPI bus
+    minItems: 2
+    maxItems: 3
 
   clock-names:
-    items:
-      - const: nfi_clk
-      - const: pad_clk
+    minItems: 2
+    maxItems: 3
 
   nand-ecc-engine:
     description: device-tree node of the accompanying ECC engine.
@@ -57,6 +53,43 @@ required:
   - clock-names
   - nand-ecc-engine
 
+allOf:
+  - $ref: /schemas/spi/spi-controller.yaml#
+  - if:
+      properties:
+        compatible:
+          enum:
+            - mediatek,mt7622-snand
+            - mediatek,mt7629-snand
+    then:
+      properties:
+        clocks:
+          items:
+            - description: clock used for the controller
+            - description: clock used for the SPI bus
+        clock-names:
+          items:
+            - const: nfi_clk
+            - const: pad_clk
+
+  - if:
+      properties:
+        compatible:
+          enum:
+            - mediatek,mt7986-snand
+    then:
+      properties:
+        clocks:
+          items:
+            - description: clock used for the controller
+            - description: clock used for the SPI bus
+            - description: clock used for the AHB bus
+        clock-names:
+          items:
+            - const: nfi_clk
+            - const: pad_clk
+            - const: nfi_hclk
+
 unevaluatedProperties: false
 
 examples:
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Thu Dec  8 22:43:11 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Fri, 9 Dec 2022 14:43:11 +0800
Subject: [PATCH v4 3/9] mtd: nand: ecc-mtk: Add ECC support fot MT7986 IC
In-Reply-To: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221209064317.2828-4-xiangsheng.hou@mediatek.com>

Add ECC support fot MT7986 IC, and change err_mask value with
GENMASK macro.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 drivers/mtd/nand/ecc-mtk.c | 28 +++++++++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/ecc-mtk.c b/drivers/mtd/nand/ecc-mtk.c
index 9f9b201fe706..c75bb8b80cc1 100644
--- a/drivers/mtd/nand/ecc-mtk.c
+++ b/drivers/mtd/nand/ecc-mtk.c
@@ -40,6 +40,10 @@
 #define ECC_IDLE_REG(op)	((op) == ECC_ENCODE ? ECC_ENCIDLE : ECC_DECIDLE)
 #define ECC_CTL_REG(op)		((op) == ECC_ENCODE ? ECC_ENCCON : ECC_DECCON)
 
+#define ECC_ERRMASK_MT7622	GENMASK(4, 0)
+#define ECC_ERRMASK_MT2701	GENMASK(5, 0)
+#define ECC_ERRMASK_MT2712	GENMASK(6, 0)
+
 struct mtk_ecc_caps {
 	u32 err_mask;
 	u32 err_shift;
@@ -79,6 +83,10 @@ static const u8 ecc_strength_mt7622[] = {
 	4, 6, 8, 10, 12
 };
 
+static const u8 ecc_strength_mt7986[] = {
+	4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24
+};
+
 enum mtk_ecc_regs {
 	ECC_ENCPAR00,
 	ECC_ENCIRQ_EN,
@@ -451,7 +459,7 @@ unsigned int mtk_ecc_get_parity_bits(struct mtk_ecc *ecc)
 EXPORT_SYMBOL(mtk_ecc_get_parity_bits);
 
 static const struct mtk_ecc_caps mtk_ecc_caps_mt2701 = {
-	.err_mask = 0x3f,
+	.err_mask = ECC_ERRMASK_MT2701,
 	.err_shift = 8,
 	.ecc_strength = ecc_strength_mt2701,
 	.ecc_regs = mt2701_ecc_regs,
@@ -462,7 +470,7 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt2701 = {
 };
 
 static const struct mtk_ecc_caps mtk_ecc_caps_mt2712 = {
-	.err_mask = 0x7f,
+	.err_mask = ECC_ERRMASK_MT2712,
 	.err_shift = 8,
 	.ecc_strength = ecc_strength_mt2712,
 	.ecc_regs = mt2712_ecc_regs,
@@ -473,7 +481,7 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt2712 = {
 };
 
 static const struct mtk_ecc_caps mtk_ecc_caps_mt7622 = {
-	.err_mask = 0x1f,
+	.err_mask = ECC_ERRMASK_MT7622,
 	.err_shift = 5,
 	.ecc_strength = ecc_strength_mt7622,
 	.ecc_regs = mt7622_ecc_regs,
@@ -483,6 +491,17 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt7622 = {
 	.pg_irq_sel = 0,
 };
 
+static const struct mtk_ecc_caps mtk_ecc_caps_mt7986 = {
+	.err_mask = ECC_ERRMASK_MT7622,
+	.err_shift = 8,
+	.ecc_strength = ecc_strength_mt7986,
+	.ecc_regs = mt2712_ecc_regs,
+	.num_ecc_strength = 11,
+	.ecc_mode_shift = 5,
+	.parity_bits = 14,
+	.pg_irq_sel = 1,
+};
+
 static const struct of_device_id mtk_ecc_dt_match[] = {
 	{
 		.compatible = "mediatek,mt2701-ecc",
@@ -493,6 +512,9 @@ static const struct of_device_id mtk_ecc_dt_match[] = {
 	}, {
 		.compatible = "mediatek,mt7622-ecc",
 		.data = &mtk_ecc_caps_mt7622,
+	}, {
+		.compatible = "mediatek,mt7986-ecc",
+		.data = &mtk_ecc_caps_mt7986,
 	},
 	{},
 };
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Thu Dec  8 22:43:17 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Fri, 9 Dec 2022 14:43:17 +0800
Subject: [PATCH v4 9/9] dt-bindings: mtd: mediatek,nand-ecc-engine: Add compatible for MT7986
In-Reply-To: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221209064317.2828-10-xiangsheng.hou@mediatek.com>

Add dt-bindings documentation of ECC for MediaTek MT7986 SoC
platform.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml        | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
index b13d801eda76..505baf1e8830 100644
--- a/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
+++ b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
@@ -18,6 +18,7 @@ properties:
       - mediatek,mt2701-ecc
       - mediatek,mt2712-ecc
       - mediatek,mt7622-ecc
+      - mediatek,mt7986-ecc
 
   reg:
     items:
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Thu Dec  8 22:43:15 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Fri, 9 Dec 2022 14:43:15 +0800
Subject: [PATCH v4 7/9] dt-bindings: mtd: Split ECC engine with rawnand controller
In-Reply-To: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221209064317.2828-8-xiangsheng.hou@mediatek.com>

Split MediaTek ECC engine with rawnand controller and convert to
YAML schema.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 .../bindings/mtd/mediatek,mtk-nfc.yaml        | 155 +++++++++++++++
 .../mtd/mediatek,nand-ecc-engine.yaml         |  62 ++++++
 .../devicetree/bindings/mtd/mtk-nand.txt      | 176 ------------------
 3 files changed, 217 insertions(+), 176 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
 delete mode 100644 Documentation/devicetree/bindings/mtd/mtk-nand.txt

diff --git a/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
new file mode 100644
index 000000000000..a6e7f123eda7
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
@@ -0,0 +1,155 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mtd/mediatek,mtk-nfc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek(MTK) SoCs raw NAND FLASH controller (NFC)
+
+maintainers:
+  - Xiangsheng Hou <xiangsheng.hou at mediatek.com>
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt2701-nfc
+      - mediatek,mt2712-nfc
+      - mediatek,mt7622-nfc
+
+  reg:
+    items:
+      - description: Base physical address and size of NFI.
+
+  interrupts:
+    items:
+      - description: NFI interrupt
+
+  clocks:
+    items:
+      - description: clock used for the controller
+      - description: clock used for the pad
+
+  clock-names:
+    items:
+      - const: nfi_clk
+      - const: pad_clk
+
+  ecc-engine:
+    description: device-tree node of the required ECC engine.
+    $ref: /schemas/types.yaml#/definitions/phandle
+
+patternProperties:
+  "^nand@[a-f0-9]$":
+    $ref: nand-chip.yaml#
+    unevaluatedProperties: false
+    properties:
+      reg:
+        maximum: 1
+      nand-on-flash-bbt: true
+      nand-ecc-mode:
+        const: hw
+
+allOf:
+  - $ref: nand-controller.yaml#
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: mediatek,mt2701-nfc
+    then:
+      patternProperties:
+        "^nand@[a-f0-9]$":
+          properties:
+            nand-ecc-step-size:
+              enum: [ 512, 1024 ]
+            nand-ecc-strength:
+              enum: [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36,
+                     40, 44, 48, 52, 56, 60]
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: mediatek,mt2712-nfc
+    then:
+      patternProperties:
+        "^nand@[a-f0-9]$":
+          properties:
+            nand-ecc-step-size:
+              enum: [ 512, 1024 ]
+            nand-ecc-strength:
+              enum: [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36,
+                     40, 44, 48, 52, 56, 60, 68, 72, 80]
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: mediatek,mt7622-nfc
+    then:
+      patternProperties:
+        "^nand@[a-f0-9]$":
+          properties:
+            nand-ecc-step-size:
+              const: 512
+            nand-ecc-strength:
+              enum: [4, 6, 8, 10, 12]
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+  - clock-names
+  - ecc-engine
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt2701-clk.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    soc {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        nand-controller at 1100d000 {
+            compatible = "mediatek,mt2701-nfc";
+            reg = <0 0x1100d000 0 0x1000>;
+            interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
+            clocks = <&pericfg CLK_PERI_NFI>,
+                     <&pericfg CLK_PERI_NFI_PAD>;
+            clock-names = "nfi_clk", "pad_clk";
+            ecc-engine = <&bch>;
+            #address-cells = <1>;
+            #size-cells = <0>;
+
+            nand at 0 {
+                reg = <0>;
+
+                nand-on-flash-bbt;
+                nand-ecc-mode = "hw";
+                nand-ecc-step-size = <1024>;
+                nand-ecc-strength = <24>;
+
+                partitions {
+                    compatible = "fixed-partitions";
+                    #address-cells = <1>;
+                    #size-cells = <1>;
+
+                    preloader at 0 {
+                        label = "pl";
+                        read-only;
+                        reg = <0x0 0x400000>;
+                    };
+                    android at 400000 {
+                        label = "android";
+                        reg = <0x400000 0x12c00000>;
+                    };
+                };
+            };
+        };
+    };
diff --git a/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
new file mode 100644
index 000000000000..b13d801eda76
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mtd/mediatek,nand-ecc-engine.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek(MTK) SoCs NAND ECC engine
+
+maintainers:
+  - Xiangsheng Hou <xiangsheng.hou at mediatek.com>
+
+description: |
+  MTK NAND ECC engine can cowork with MTK raw NAND and SPI NAND controller.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt2701-ecc
+      - mediatek,mt2712-ecc
+      - mediatek,mt7622-ecc
+
+  reg:
+    items:
+      - description: Base physical address and size of ECC.
+
+  interrupts:
+    items:
+      - description: ECC interrupt
+
+  clocks:
+    maxItems: 1
+
+  clock-names:
+    const: nfiecc_clk
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+  - clock-names
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt2701-clk.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    soc {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        bch: ecc at 1100e000 {
+            compatible = "mediatek,mt2701-ecc";
+            reg = <0 0x1100e000 0 0x1000>;
+            interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_LOW>;
+            clocks = <&pericfg CLK_PERI_NFI_ECC>;
+            clock-names = "nfiecc_clk";
+        };
+    };
diff --git a/Documentation/devicetree/bindings/mtd/mtk-nand.txt b/Documentation/devicetree/bindings/mtd/mtk-nand.txt
deleted file mode 100644
index 839ea2f93d04..000000000000
--- a/Documentation/devicetree/bindings/mtd/mtk-nand.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-MTK SoCs NAND FLASH controller (NFC) DT binding
-
-This file documents the device tree bindings for MTK SoCs NAND controllers.
-The functional split of the controller requires two drivers to operate:
-the nand controller interface driver and the ECC engine driver.
-
-The hardware description for both devices must be captured as device
-tree nodes.
-
-1) NFC NAND Controller Interface (NFI):
-=======================================
-
-The first part of NFC is NAND Controller Interface (NFI) HW.
-Required NFI properties:
-- compatible:			Should be one of
-				"mediatek,mt2701-nfc",
-				"mediatek,mt2712-nfc",
-				"mediatek,mt7622-nfc".
-- reg:				Base physical address and size of NFI.
-- interrupts:			Interrupts of NFI.
-- clocks:			NFI required clocks.
-- clock-names:			NFI clocks internal name.
-- ecc-engine:			Required ECC Engine node.
-- #address-cells:		NAND chip index, should be 1.
-- #size-cells:			Should be 0.
-
-Example:
-
-	nandc: nfi at 1100d000 {
-		compatible = "mediatek,mt2701-nfc";
-		reg = <0 0x1100d000 0 0x1000>;
-		interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
-		clocks = <&pericfg CLK_PERI_NFI>,
-			 <&pericfg CLK_PERI_NFI_PAD>;
-		clock-names = "nfi_clk", "pad_clk";
-		ecc-engine = <&bch>;
-		#address-cells = <1>;
-		#size-cells = <0>;
-        };
-
-Platform related properties, should be set in {platform_name}.dts:
-- children nodes:	NAND chips.
-
-Children nodes properties:
-- reg:			Chip Select Signal, default 0.
-			Set as reg = <0>, <1> when need 2 CS.
-Optional:
-- nand-on-flash-bbt:	Store BBT on NAND Flash.
-- nand-ecc-mode:	the NAND ecc mode (check driver for supported modes)
-- nand-ecc-step-size:	Number of data bytes covered by a single ECC step.
-			valid values:
-			512 and 1024 on mt2701 and mt2712.
-			512 only on mt7622.
-			1024 is recommended for large page NANDs.
-- nand-ecc-strength:	Number of bits to correct per ECC step.
-			The valid values that each controller supports:
-			mt2701: 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28,
-				32, 36, 40, 44, 48, 52, 56, 60.
-			mt2712: 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28,
-				32, 36, 40, 44, 48, 52, 56, 60, 68, 72, 80.
-			mt7622: 4, 6, 8, 10, 12, 14, 16.
-			The strength should be calculated as follows:
-			E = (S - F) * 8 / B
-			S = O / (P / Q)
-				E :	nand-ecc-strength.
-				S :	spare size per sector.
-				F :	FDM size, should be in the range [1,8].
-					It is used to store free oob data.
-				O :	oob size.
-				P :	page size.
-				Q :	nand-ecc-step-size.
-				B :	number of parity bits needed to correct
-					1 bitflip.
-					According to MTK NAND controller design,
-					this number depends on max ecc step size
-					that MTK NAND controller supports.
-					If max ecc step size supported is 1024,
-					then it should be always 14. And if max
-					ecc step size is 512, then it should be
-					always 13.
-			If the result does not match any one of the listed
-			choices above, please select the smaller valid value from
-			the list.
-			(otherwise the driver will do the adjustment at runtime)
-- pinctrl-names:	Default NAND pin GPIO setting name.
-- pinctrl-0:		GPIO setting node.
-
-Example:
-	&pio {
-		nand_pins_default: nanddefault {
-			pins_dat {
-				pinmux = <MT2701_PIN_111_MSDC0_DAT7__FUNC_NLD7>,
-					 <MT2701_PIN_112_MSDC0_DAT6__FUNC_NLD6>,
-					 <MT2701_PIN_114_MSDC0_DAT4__FUNC_NLD4>,
-					 <MT2701_PIN_118_MSDC0_DAT3__FUNC_NLD3>,
-					 <MT2701_PIN_121_MSDC0_DAT0__FUNC_NLD0>,
-					 <MT2701_PIN_120_MSDC0_DAT1__FUNC_NLD1>,
-					 <MT2701_PIN_113_MSDC0_DAT5__FUNC_NLD5>,
-					 <MT2701_PIN_115_MSDC0_RSTB__FUNC_NLD8>,
-					 <MT2701_PIN_119_MSDC0_DAT2__FUNC_NLD2>;
-				input-enable;
-				drive-strength = <MTK_DRIVE_8mA>;
-				bias-pull-up;
-			};
-
-			pins_we {
-				pinmux = <MT2701_PIN_117_MSDC0_CLK__FUNC_NWEB>;
-				drive-strength = <MTK_DRIVE_8mA>;
-				bias-pull-up = <MTK_PUPD_SET_R1R0_10>;
-			};
-
-			pins_ale {
-				pinmux = <MT2701_PIN_116_MSDC0_CMD__FUNC_NALE>;
-				drive-strength = <MTK_DRIVE_8mA>;
-				bias-pull-down = <MTK_PUPD_SET_R1R0_10>;
-			};
-		};
-	};
-
-	&nandc {
-		status = "okay";
-		pinctrl-names = "default";
-		pinctrl-0 = <&nand_pins_default>;
-		nand at 0 {
-			reg = <0>;
-			nand-on-flash-bbt;
-			nand-ecc-mode = "hw";
-			nand-ecc-strength = <24>;
-			nand-ecc-step-size = <1024>;
-		};
-	};
-
-NAND chip optional subnodes:
-- Partitions, see Documentation/devicetree/bindings/mtd/mtd.yaml
-
-Example:
-	nand at 0 {
-		partitions {
-			compatible = "fixed-partitions";
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			preloader at 0 {
-				label = "pl";
-				read-only;
-				reg = <0x00000000 0x00400000>;
-			};
-			android at 00400000 {
-				label = "android";
-				reg = <0x00400000 0x12c00000>;
-			};
-		};
-	};
-
-2) ECC Engine:
-==============
-
-Required BCH properties:
-- compatible:	Should be one of
-		"mediatek,mt2701-ecc",
-		"mediatek,mt2712-ecc",
-		"mediatek,mt7622-ecc".
-- reg:		Base physical address and size of ECC.
-- interrupts:	Interrupts of ECC.
-- clocks:	ECC required clocks.
-- clock-names:	ECC clocks internal name.
-
-Example:
-
-	bch: ecc at 1100e000 {
-		compatible = "mediatek,mt2701-ecc";
-		reg = <0 0x1100e000 0 0x1000>;
-		interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_LOW>;
-		clocks = <&pericfg CLK_PERI_NFI_ECC>;
-		clock-names = "nfiecc_clk";
-	};
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Thu Dec  8 22:43:14 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Fri, 9 Dec 2022 14:43:14 +0800
Subject: [PATCH v4 6/9] dt-bindings: spi: mtk-snfi: Add read latch latency property
In-Reply-To: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221209064317.2828-7-xiangsheng.hou@mediatek.com>

Add mediatek,rx-latch-latency-ns property which adjust data read
latch latency in the unit of nanoseconds.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml         | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
index bab23f1b11fd..1e5e89a693c3 100644
--- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
+++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
@@ -45,6 +45,9 @@ properties:
     description: device-tree node of the accompanying ECC engine.
     $ref: /schemas/types.yaml#/definitions/phandle
 
+  mediatek,rx-latch-latency-ns:
+    description: Data read latch latency, unit is nanoseconds.
+
 required:
   - compatible
   - reg
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Thu Dec  8 22:43:09 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Fri, 9 Dec 2022 14:43:09 +0800
Subject: [PATCH v4 1/9] spi: mtk-snfi: Change default page format to setup default setting
In-Reply-To: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221209064317.2828-2-xiangsheng.hou@mediatek.com>

Change default page format to setup default setting since the sector
size 1024 on MT7986 will lead to probe fail.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 drivers/spi/spi-mtk-snfi.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index fa8412ba20e2..719fc6f53ab1 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -1430,8 +1430,7 @@ static int mtk_snand_probe(struct platform_device *pdev)
 
 	// setup an initial page format for ops matching page_cache_op template
 	// before ECC is called.
-	ret = mtk_snand_setup_pagefmt(ms, ms->caps->sector_size,
-				      ms->caps->spare_sizes[0]);
+	ret = mtk_snand_setup_pagefmt(ms, SZ_2K, SZ_64);
 	if (ret) {
 		dev_err(ms->dev, "failed to set initial page format\n");
 		goto disable_clk;
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Thu Dec  8 22:43:16 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Fri, 9 Dec 2022 14:43:16 +0800
Subject: [PATCH v4 8/9] arm/arm64: dts: mediatek: Fix existing NAND controller node name
In-Reply-To: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221209064317.2828-9-xiangsheng.hou@mediatek.com>

Change the existing node name in order to match NAND controller DT
bindings.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 arch/arm/boot/dts/mt2701.dtsi             | 2 +-
 arch/arm64/boot/dts/mediatek/mt2712e.dtsi | 2 +-
 arch/arm64/boot/dts/mediatek/mt7622.dtsi  | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/arm/boot/dts/mt2701.dtsi b/arch/arm/boot/dts/mt2701.dtsi
index b8eba3ba153c..049ed797766b 100644
--- a/arch/arm/boot/dts/mt2701.dtsi
+++ b/arch/arm/boot/dts/mt2701.dtsi
@@ -360,7 +360,7 @@ thermal: thermal at 1100b000 {
 		mediatek,apmixedsys = <&apmixedsys>;
 	};
 
-	nandc: nfi at 1100d000 {
+	nandc: nand-controller at 1100d000 {
 		compatible = "mediatek,mt2701-nfc";
 		reg = <0 0x1100d000 0 0x1000>;
 		interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
diff --git a/arch/arm64/boot/dts/mediatek/mt2712e.dtsi b/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
index 92212cddd37e..cfbec2a2ed9d 100644
--- a/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
@@ -560,7 +560,7 @@ spi0: spi at 1100a000 {
 		status = "disabled";
 	};
 
-	nandc: nfi at 1100e000 {
+	nandc: nand-controller at 1100e000 {
 		compatible = "mediatek,mt2712-nfc";
 		reg = <0 0x1100e000 0 0x1000>;
 		interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_LOW>;
diff --git a/arch/arm64/boot/dts/mediatek/mt7622.dtsi b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
index 146e18b5b1f4..d98aa4936092 100644
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
@@ -539,7 +539,7 @@ bluetooth {
 		};
 	};
 
-	nandc: nfi at 1100d000 {
+	nandc: nand-controller at 1100d000 {
 		compatible = "mediatek,mt7622-nfc";
 		reg = <0 0x1100D000 0 0x1000>;
 		interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_LOW>;
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Thu Dec  8 22:43:10 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Fri, 9 Dec 2022 14:43:10 +0800
Subject: [PATCH v4 2/9] spi: mtk-snfi: Add optional nfi_hclk which is needed for MT7986
In-Reply-To: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221209064317.2828-3-xiangsheng.hou@mediatek.com>

Add optional nfi_hclk which is needed for MT7986.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/spi/spi-mtk-snfi.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index 719fc6f53ab1..85644308df23 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -297,6 +297,7 @@ struct mtk_snand {
 	struct device *dev;
 	struct clk *nfi_clk;
 	struct clk *pad_clk;
+	struct clk *nfi_hclk;
 	void __iomem *nfi_base;
 	int irq;
 	struct completion op_done;
@@ -1339,7 +1340,16 @@ static int mtk_snand_enable_clk(struct mtk_snand *ms)
 		dev_err(ms->dev, "unable to enable pad clk\n");
 		goto err1;
 	}
+	ret = clk_prepare_enable(ms->nfi_hclk);
+	if (ret) {
+		dev_err(ms->dev, "unable to enable nfi hclk\n");
+		goto err2;
+	}
+
 	return 0;
+
+err2:
+	clk_disable_unprepare(ms->pad_clk);
 err1:
 	clk_disable_unprepare(ms->nfi_clk);
 	return ret;
@@ -1347,6 +1357,7 @@ static int mtk_snand_enable_clk(struct mtk_snand *ms)
 
 static void mtk_snand_disable_clk(struct mtk_snand *ms)
 {
+	clk_disable_unprepare(ms->nfi_hclk);
 	clk_disable_unprepare(ms->pad_clk);
 	clk_disable_unprepare(ms->nfi_clk);
 }
@@ -1401,6 +1412,13 @@ static int mtk_snand_probe(struct platform_device *pdev)
 		goto release_ecc;
 	}
 
+	ms->nfi_hclk = devm_clk_get_optional(&pdev->dev, "nfi_hclk");
+	if (IS_ERR(ms->nfi_hclk)) {
+		ret = PTR_ERR(ms->nfi_hclk);
+		dev_err(&pdev->dev, "unable to get nfi_hclk, err = %d\n", ret);
+		goto release_ecc;
+	}
+
 	ret = mtk_snand_enable_clk(ms);
 	if (ret)
 		goto release_ecc;
-- 
2.25.1



From krzysztof.kozlowski at linaro.org  Fri Dec  9 00:15:05 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Fri, 9 Dec 2022 09:15:05 +0100
Subject: [PATCH v4 1/7] dt-bindings: arm64: dts: mediatek: Add mt8365-evk
 board
In-Reply-To: <20221208153041.3965378-2-bero@baylibre.com>
References: <20221208153041.3965378-1-bero@baylibre.com>
 <20221208153041.3965378-2-bero@baylibre.com>
Message-ID: <6e5a2d2a-6d97-a84e-97c2-819053f1dd59@linaro.org>

On 08/12/2022 16:30, Bernhard Rosenkr?nzer wrote:
> Add bindings for the Mediatek mt8365-evk board.
> 
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
> ---


Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Best regards,
Krzysztof



From krzysztof.kozlowski at linaro.org  Fri Dec  9 00:18:04 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Fri, 9 Dec 2022 09:18:04 +0100
Subject: [PATCH v4 4/7] dt-bindings: pinctrl: add bindings for Mediatek
 MT8365 SoC
In-Reply-To: <20221208153041.3965378-5-bero@baylibre.com>
References: <20221208153041.3965378-1-bero@baylibre.com>
 <20221208153041.3965378-5-bero@baylibre.com>
Message-ID: <22dacd0a-d482-d4e6-fc69-187f9ae79956@linaro.org>

On 08/12/2022 16:30, Bernhard Rosenkr?nzer wrote:
> Add devicetree bindings for Mediatek MT8365 pinctrl driver.
> 
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
> ---
>  .../pinctrl/mediatek,mt8365-pinctrl.yaml      | 197 ++++++++++++++++++
>  1 file changed, 197 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
> 
> diff --git a/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
> new file mode 100644
> index 0000000000000..9560e1d2898d0
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
> @@ -0,0 +1,197 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/pinctrl/mediatek,mt8365-pinctrl.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Mediatek MT8365 Pin Controller
> +
> +maintainers:
> +  - Zhiyong Tao <zhiyong.tao at mediatek.com>
> +  - Bernhard Rosenkr?nzer <bero at baylibre.com>
> +
> +description: |+
> +  The MediaTek's MT8365 Pin controller is used to control SoC pins.
> +
> +properties:
> +  compatible:
> +    const: mediatek,mt8365-pinctrl
> +
> +  reg:
> +    maxItems: 1
> +
> +  mediatek,pctl-regmap:
> +    $ref: /schemas/types.yaml#/definitions/phandle-array
> +    items:
> +      maxItems: 1
> +    minItems: 1
> +    maxItems: 2
> +    description: |
> +      Should be phandles of the syscfg node.
> +
> +  gpio-controller: true
> +
> +  "#gpio-cells":
> +    const: 2
> +    description: |
> +      Number of cells in GPIO specifier. Since the generic GPIO
> +      binding is used, the amount of cells must be specified as 2. See the below
> +      mentioned gpio binding representation for description of particular cells.
> +
> +  interrupt-controller: true
> +
> +  interrupts:
> +    maxItems: 1
> +
> +  "#interrupt-cells":

Use consistent quotes - ' or "

> +    const: 2
> +
> +patternProperties:
> +  '-pins$':
> +    type: object

(...)

> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/interrupt-controller/arm-gic.h>
> +    #include <dt-bindings/pinctrl/mt8365-pinfunc.h>
> +    soc {
> +        #address-cells = <2>;
> +        #size-cells = <2>;
> +
> +        pio: pinctrl at 1000b000 {
> +          compatible = "mediatek,mt8365-pinctrl";
> +          reg = <0 0x1000b000 0 0x1000>;
> +          mediatek,pctl-regmap = <&syscfg_pctl>;
> +          gpio-controller;
> +          #gpio-cells = <2>;
> +          interrupt-controller;
> +          #interrupt-cells = <2>;
> +          interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
> +
> +          pio-pins {
> +            pins {
> +              pinmux = <MT8365_PIN_59_SDA1__FUNC_SDA1_0>, <MT8365_PIN_60_SCL1__FUNC_SCL1_0>;
> +              mediatek,pull-up-adv = <3>;
> +              mediatek,drive-strength-adv = <00>;
> +              bias-pull-up;
> +            };
> +          };
> +        };
> +    };
> +
> +required:
> +  - compatible
> +  - reg
> +  - gpio-controller
> +  - "#gpio-cells"
> +
> +allOf:
> +  - $ref: pinctrl.yaml#

The order of your top-level entries is mixed up. required and allOf  are
never after the example. Please open example-schema and align the order.

Best regards,
Krzysztof



From krzysztof.kozlowski at linaro.org  Fri Dec  9 00:52:43 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Fri, 9 Dec 2022 09:52:43 +0100
Subject: [PATCH v4 7/9] dt-bindings: mtd: Split ECC engine with rawnand
 controller
In-Reply-To: <20221209064317.2828-8-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
 <20221209064317.2828-8-xiangsheng.hou@mediatek.com>
Message-ID: <500f9bdf-0de1-d6b2-1f09-11128699ce3a@linaro.org>

On 09/12/2022 07:43, Xiangsheng Hou wrote:
> Split MediaTek ECC engine with rawnand controller and convert to
> YAML schema.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> ---


Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Best regards,
Krzysztof



From krzysztof.kozlowski at linaro.org  Fri Dec  9 01:10:47 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Fri, 9 Dec 2022 10:10:47 +0100
Subject: [PATCH v4 net-next 3/9] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <20221202204559.162619-4-colin.foster@in-advantage.com>
References: <20221202204559.162619-1-colin.foster@in-advantage.com>
 <20221202204559.162619-4-colin.foster@in-advantage.com>
Message-ID: <15d9461c-5b31-dfb5-ec9d-4b79ea120aeb@linaro.org>

On 02/12/2022 21:45, Colin Foster wrote:
> DSA switches can fall into one of two categories: switches where all ports
> follow standard '(ethernet-)?port' properties, and switches that have
> additional properties for the ports.
> 
> The scenario where DSA ports are all standardized can be handled by
> swtiches with a reference to the new 'dsa.yaml#/$defs/ethernet-ports'.

typo: switches

> 
> The scenario where DSA ports require additional properties can reference
> '$dsa.yaml#' directly. This will allow switches to reference these standard
> defitions of the DSA switch, but add additional properties under the port

typo: definitions


Best regards,
Krzysztof



From miquel.raynal at bootlin.com  Fri Dec  9 01:14:43 2022
From: miquel.raynal at bootlin.com (Miquel Raynal)
Date: Fri, 9 Dec 2022 10:14:43 +0100
Subject: [PATCH v3 7/9] dt-bindings: mtd: Split ECC engine with rawnand
 controller
In-Reply-To: <f3e3a3d0-6d21-c782-38a2-c8b2c36242c3@linaro.org>
References: <20221208062955.2546-1-xiangsheng.hou@mediatek.com>
	<20221208062955.2546-8-xiangsheng.hou@mediatek.com>
	<fe70d964-229a-8bda-a414-e009dd955e5e@linaro.org>
	<20221208110035.5649a051@xps-13>
	<f3e3a3d0-6d21-c782-38a2-c8b2c36242c3@linaro.org>
Message-ID: <20221209101443.77fbbe49@xps-13>

Hi Krzysztof,

krzysztof.kozlowski at linaro.org wrote on Thu, 8 Dec 2022 11:27:27 +0100:

> On 08/12/2022 11:00, Miquel Raynal wrote:
> > Hi Krzysztof,
> > 
> > krzysztof.kozlowski at linaro.org wrote on Thu, 8 Dec 2022 10:44:17 +0100:
> >   
> >> On 08/12/2022 07:29, Xiangsheng Hou wrote:  
> >>> Split MediaTek ECC engine with rawnand controller and convert to
> >>> YAML schema.
> >>>
> >>> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> >>> ---
> >>>  .../bindings/mtd/mediatek,mtk-nfc.yaml        | 154 +++++++++++++++
> >>>  .../mtd/mediatek,nand-ecc-engine.yaml         |  62 ++++++
> >>>  .../devicetree/bindings/mtd/mtk-nand.txt      | 176 ------------------
> >>>  3 files changed, 216 insertions(+), 176 deletions(-)
> >>>  create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
> >>>  create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
> >>>  delete mode 100644 Documentation/devicetree/bindings/mtd/mtk-nand.txt
> >>>
> >>> diff --git a/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
> >>> new file mode 100644
> >>> index 000000000000..eb1a44c7ae4e
> >>> --- /dev/null
> >>> +++ b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
> >>> @@ -0,0 +1,154 @@
> >>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> >>> +%YAML 1.2
> >>> +---
> >>> +$id: http://devicetree.org/schemas/mtd/mediatek,mtk-nfc.yaml#
> >>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> >>> +
> >>> +title: MediaTek(MTK) SoCs raw NAND FLASH controller (NFC)
> >>> +
> >>> +maintainers:
> >>> +  - Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> >>> +
> >>> +properties:
> >>> +  compatible:
> >>> +    enum:
> >>> +      - mediatek,mt2701-nfc
> >>> +      - mediatek,mt2712-nfc
> >>> +      - mediatek,mt7622-nfc
> >>> +
> >>> +  reg:
> >>> +    items:
> >>> +      - description: Base physical address and size of NFI.
> >>> +
> >>> +  interrupts:
> >>> +    items:
> >>> +      - description: NFI interrupt
> >>> +
> >>> +  clocks:
> >>> +    items:
> >>> +      - description: clock used for the controller
> >>> +      - description: clock used for the pad
> >>> +
> >>> +  clock-names:
> >>> +    items:
> >>> +      - const: nfi_clk
> >>> +      - const: pad_clk
> >>> +
> >>> +  ecc-engine:
> >>> +    description: device-tree node of the required ECC engine.
> >>> +    $ref: /schemas/types.yaml#/definitions/phandle
> >>> +
> >>> +patternProperties:
> >>> +  "^nand@[a-f0-9]$":
> >>> +    type: object    
> >>
> >> This should be instead:
> >>     $ref: nand-chip.yaml#
> >>     unevaluatedProperties: false
> >>
> >> and then properties below (due to current dtschema limitations) should
> >> list properties from nand-controller.yaml:
> >>
> >>       nand-on-flash-bbt: true
> >>
> >> Optionally, we could create additional schema - nand-controller-chip,
> >> which would be referenced directly by nand-controller and itself would
> >> ref nand-chip.  
> > 
> > Isn't this enough? (in linux-next)
> > https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git/tree/Documentation/devicetree/bindings/mtd/nand-controller.yaml?h=mtd/next#n54  
> 
> No, I tested it and it does not work as intended. In this particular
> case. I think this is a limitation of dtschema, because binding itself
> looks fine. The problem is that you have:
> 1. mtk-nfc having nand@ children. mtk-nfc references nand-controller
> which brings these children.
> 2. However nand-controller while bringing these children does two things:
> a. ref: nand-chip
> b. add more propeties
> 
> 3. The mtk-nfc must further extend the nand@ child.
> 4. If you add "unevaluatedProperties: false" you notice warnings of
> unevaluated propertie from nand-controller children.

Thanks for the details. Any chances this can eventually be fixed at
dt-schema level?

Thanks,
Miqu?l


From krzysztof.kozlowski at linaro.org  Fri Dec  9 02:15:37 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Fri, 9 Dec 2022 11:15:37 +0100
Subject: [PATCH v3 10/12] dt-bindings: mediatek: mt8188: add audio afe
 document
In-Reply-To: <20221208033148.21866-11-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
 <20221208033148.21866-11-trevor.wu@mediatek.com>
Message-ID: <d7d9f3c7-b3e3-1e13-a80f-c7bf7b38a5b1@linaro.org>

On 08/12/2022 04:31, Trevor Wu wrote:
> Add mt8188 audio afe document.

Use subject prefixes matching the subsystem (git log --oneline -- ...).

> 
> Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
> ---
>  .../devicetree/bindings/sound/mt8188-afe.yaml | 196 ++++++++++++++++++
>  1 file changed, 196 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/sound/mt8188-afe.yaml
> 
> diff --git a/Documentation/devicetree/bindings/sound/mt8188-afe.yaml b/Documentation/devicetree/bindings/sound/mt8188-afe.yaml
> new file mode 100644
> index 000000000000..6ab26494d924
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/sound/mt8188-afe.yaml


This is a friendly reminder during the review process.

It seems my previous comments were not fully addressed. Maybe my
feedback got lost between the quotes, maybe you just forgot to apply it.
Please go back to the previous discussion and either implement all
requested changes or keep discussing them.

Thank you.

Comment was about filename matching compatible, so with vendor prefix.

> @@ -0,0 +1,196 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/sound/mt8188-afe.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: MediaTek AFE PCM controller for mt8188
> +
> +maintainers:
> +  - Trevor Wu <trevor.wu at mediatek.com>
> +
> +properties:
> +  compatible:
> +    const: mediatek,mt8188-afe
> +
> +  reg:
> +    maxItems: 1
> +
> +  interrupts:
> +    maxItems: 1
> +
> +  resets:
> +    maxItems: 1
> +
> +  reset-names:
> +    const: audiosys
> +
> +  mediatek,topckgen:
> +    $ref: /schemas/types.yaml#/definitions/phandle
> +    description: The phandle of the mediatek topckgen controller
> +
> +  power-domains:
> +    maxItems: 1
> +
> +  clocks:
> +    items:
> +      - description: 26M clock
> +      - description: audio pll1 clock
> +      - description: audio pll2 clock
> +      - description: clock divider for i2si1_mck
> +      - description: clock divider for i2si2_mck
> +      - description: clock divider for i2so1_mck
> +      - description: clock divider for i2so2_mck
> +      - description: clock divider for dptx_mck
> +      - description: a1sys hoping clock
> +      - description: audio intbus clock
> +      - description: audio hires clock
> +      - description: audio local bus clock
> +      - description: mux for dptx_mck
> +      - description: mux for i2so1_mck
> +      - description: mux for i2so2_mck
> +      - description: mux for i2si1_mck
> +      - description: mux for i2si2_mck
> +      - description: audio 26m clock
> +
> +  clock-names:
> +    items:
> +      - const: clk26m
> +      - const: apll1_ck
> +      - const: apll2_ck
> +      - const: apll12_div0
> +      - const: apll12_div1
> +      - const: apll12_div2
> +      - const: apll12_div3
> +      - const: apll12_div9
> +      - const: a1sys_hp_sel
> +      - const: aud_intbus_sel
> +      - const: audio_h_sel
> +      - const: audio_local_bus_sel
> +      - const: dptx_m_sel
> +      - const: i2so1_m_sel
> +      - const: i2so2_m_sel
> +      - const: i2si1_m_sel
> +      - const: i2si2_m_sel
> +      - const: adsp_audio_26m
> +
> +patternProperties:
> +  "^mediatek,etdm-in[1-2]-chn-disabled$":
> +    $ref: /schemas/types.yaml#/definitions/uint8-array
> +    minItems: 1
> +    maxItems: 16
> +    description:
> +      By default, all data received from ETDM pins will be outputed to
> +      memory. etdm in supports disable_out in direct mode(w/o interconn).
> +      User can specify the channel ID which they hope dropping and then
> +      the specified channel won't be seen on memory.

So we know what are the IDs but it's a mystery what are the values.
Especially with unique values - how any of these should case that
channel "won't be seen in memory"?

> +    uniqueItems: true
> +    items:
> +      minimum: 0
> +      maximum: 15
> +
> +  "^mediatek,etdm-in[1-2]-mclk-always-on-rate-hz$":
> +    description: Specify etdm in mclk output rate for always on case.

How is it different than assigned-clock-rates?

> +
> +  "^mediatek,etdm-out[1-3]-mclk-always-on-rate-hz$":
> +    description: Specify etdm out mclk output rate for always on case.
> +
> +  "^mediatek,etdm-in[1-2]-multi-pin-mode$":
> +    type: boolean
> +    description: if present, the etdm data mode is I2S.
> +
> +  "^mediatek,etdm-out[1-3]-multi-pin-mode$":
> +    type: boolean
> +    description: if present, the etdm data mode is I2S.
> +
> +  "^mediatek,etdm-in[1-2]-cowork-source$":
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    description:
> +      etdm modules can share the same external clock pin. Specify
> +      which etdm clock source is required by this etdm in moudule.

typo: module

> +    enum:
> +      - 0 # etdm1_in
> +      - 1 # etdm2_in
> +      - 2 # etdm1_out

I don't get. This suggests that etdm1_out can be clock source of
etdm-in1. Or etdm1_in can be clock source of etdm-in1... It does not
make sense...

> +      - 3 # etdm2_out
> +
> +  "^mediatek,etdm-out[1-2]-cowork-source$":
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    description: |
> +      etdm modules can share the same external clock pin. Specify
> +      which etdm clock source is required by this etdm out moudule.
> +    enum:
> +      - 0 # etdm1_in
> +      - 1 # etdm2_in
> +      - 2 # etdm1_out
> +      - 3 # etdm2_out
> +
> +required:
> +  - compatible
> +  - reg
> +  - interrupts
> +  - resets
> +  - reset-names
> +  - mediatek,topckgen
> +  - power-domains
> +  - clocks
> +  - clock-names
> +
Best regards,
Krzysztof



From krzysztof.kozlowski at linaro.org  Fri Dec  9 02:18:45 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Fri, 9 Dec 2022 11:18:45 +0100
Subject: [PATCH v3 12/12] dt-bindings: mediatek: mt8188: add mt8188-mt6359
 document
In-Reply-To: <20221208033148.21866-13-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
 <20221208033148.21866-13-trevor.wu@mediatek.com>
Message-ID: <6350def8-bb1f-8aeb-4c98-4d02a4c59aed@linaro.org>

On 08/12/2022 04:31, Trevor Wu wrote:
> Add document for mt8188 board with mt6359.
> 
> Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
> ---
>  .../bindings/sound/mt8188-mt6359.yaml         | 60 +++++++++++++++++++
>  1 file changed, 60 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/sound/mt8188-mt6359.yaml
> 
> diff --git a/Documentation/devicetree/bindings/sound/mt8188-mt6359.yaml b/Documentation/devicetree/bindings/sound/mt8188-mt6359.yaml
> new file mode 100644
> index 000000000000..eac1c87b693a
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/sound/mt8188-mt6359.yaml

Missing vendor prefix. You got comments for it already.

> @@ -0,0 +1,60 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/sound/mt8188-mt6359.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: MediaTek MT8188 ASoC sound card
> +
> +maintainers:
> +  - Trevor Wu <trevor.wu at mediatek.com>
> +
> +properties:
> +  compatible:
> +    const: mediatek,mt8188-mt6359-evb
> +
> +  model:
> +    $ref: /schemas/types.yaml#/definitions/string
> +    description: User specified audio sound card name
> +
> +  audio-routing:
> +    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
> +    description:
> +      A list of the connections between audio components. Each entry is a
> +      sink/source pair of strings. Valid names could be the input or output
> +      widgets of audio components, power supplies, MicBias of codec and the
> +      software switch.
> +
> +  mediatek,platform:
> +    $ref: /schemas/types.yaml#/definitions/phandle
> +    description: The phandle of MT8188 ASoC platform.
> +
> +  mediatek,dptx-codec:
> +    $ref: /schemas/types.yaml#/definitions/phandle
> +    description: The phandle of MT8188 Display Port Tx codec node.
> +
> +  mediatek,hdmi-codec:
> +    $ref: /schemas/types.yaml#/definitions/phandle
> +    description: The phandle of MT8188 HDMI codec node.

Why you do not use DAI links for all these?

> +
> +additionalProperties: false
> +
> +required:
> +  - compatible
> +  - mediatek,platform
> +
> +examples:
> +  - |
> +

Drop blank line.

> +    sound: mt8188-sound {

Drop label, not used. Use generic node names, so just "sound".

> +        compatible = "mediatek,mt8188-mt6359-evb";

Best regards,
Krzysztof



From mason.zhang at mediatek.com  Fri Dec  9 02:13:22 2022
From: mason.zhang at mediatek.com (Mason Zhang)
Date: Fri, 9 Dec 2022 18:13:22 +0800
Subject: [PATCH v3 1/1] scsi: ufs: core: fix device management cmd timeout flow
Message-ID: <20221209101321.30671-1-mason.zhang@mediatek.com>

From: Mason Zhang <Mason.Zhang at mediatek.com>

In ufs error handler flow, host will send device management cmd(NOP OUT)
to device for recovery link. If cmd response timeout, and clear doorbell
fail, ufshcd_wait_for_dev_cmd will do nothing and return,
hba->dev_cmd.complete struct not set to null.

In this time, if cmd has been responsed by device, then it will
call complete() in __ufshcd_transfer_req_compl, because of complete
struct is alloced in stack, then the KE will occur.

Fix the following crash:
  ipanic_die+0x24/0x38 [mrdump]
  die+0x344/0x748
  arm64_notify_die+0x44/0x104
  do_debug_exception+0x104/0x1e0
  el1_dbg+0x38/0x54
  el1_sync_handler+0x40/0x88
  el1_sync+0x8c/0x140
  queued_spin_lock_slowpath+0x2e4/0x3c0
  __ufshcd_transfer_req_compl+0x3b0/0x1164
  ufshcd_trc_handler+0x15c/0x308
  ufshcd_host_reset_and_restore+0x54/0x260
  ufshcd_reset_and_restore+0x28c/0x57c
  ufshcd_err_handler+0xeb8/0x1b6c
  process_one_work+0x288/0x964
  worker_thread+0x4bc/0xc7c
  kthread+0x15c/0x264
  ret_from_fork+0x10/0x30

Signed-off-by: Mason Zhang <Mason.Zhang at mediatek.com>
---
changes since v2:
* Modified comment after clear doorbell.
  Updated the patch in v3.
changes since v1:
* Remove change id.
---
 drivers/ufs/core/ufshcd.c | 46 ++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 25 deletions(-)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index b1f59a5fe632..6fe51b8d41f9 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -2979,35 +2979,31 @@ static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba,
 		err = -ETIMEDOUT;
 		dev_dbg(hba->dev, "%s: dev_cmd request timedout, tag %d\n",
 			__func__, lrbp->task_tag);
-		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0) {
+		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0)
 			/* successfully cleared the command, retry if needed */
 			err = -EAGAIN;
+		/*
+		 * in case of an error, after clearing the doorbell,
+		 * we also need to clear the task tag bit from the
+		 * outstanding_reqs variable.
+		 */
+		spin_lock_irqsave(&hba->outstanding_lock, flags);
+		pending = test_bit(lrbp->task_tag,
+				   &hba->outstanding_reqs);
+		if (pending) {
+			hba->dev_cmd.complete = NULL;
+			__clear_bit(lrbp->task_tag,
+				    &hba->outstanding_reqs);
+		}
+		spin_unlock_irqrestore(&hba->outstanding_lock, flags);
+
+		if (!pending) {
 			/*
-			 * Since clearing the command succeeded we also need to
-			 * clear the task tag bit from the outstanding_reqs
-			 * variable.
+			 * The completion handler ran while we tried to
+			 * clear the command.
 			 */
-			spin_lock_irqsave(&hba->outstanding_lock, flags);
-			pending = test_bit(lrbp->task_tag,
-					   &hba->outstanding_reqs);
-			if (pending) {
-				hba->dev_cmd.complete = NULL;
-				__clear_bit(lrbp->task_tag,
-					    &hba->outstanding_reqs);
-			}
-			spin_unlock_irqrestore(&hba->outstanding_lock, flags);
-
-			if (!pending) {
-				/*
-				 * The completion handler ran while we tried to
-				 * clear the command.
-				 */
-				time_left = 1;
-				goto retry;
-			}
-		} else {
-			dev_err(hba->dev, "%s: failed to clear tag %d\n",
-				__func__, lrbp->task_tag);
+			time_left = 1;
+			goto retry;
 		}
 	}
 
-- 
2.18.0



From Yanchao.Yang at mediatek.com  Fri Dec  9 02:26:09 2022
From: Yanchao.Yang at mediatek.com (=?utf-8?B?WWFuY2hhbyBZYW5nICjmnajlvabotoUp?=)
Date: Fri, 9 Dec 2022 10:26:09 +0000
Subject: [PATCH net-next v1 02/13] net: wwan: tmi: Add buffer management
In-Reply-To: <14db8809-6144-1d10-59e7-298079b2e6e2@gmail.com>
References: <20221122111152.160377-1-yanchao.yang@mediatek.com>
	 <20221122111152.160377-3-yanchao.yang@mediatek.com>
	 <14db8809-6144-1d10-59e7-298079b2e6e2@gmail.com>
Message-ID: <a9d4eebb99d53224366c387ae314173b870d134c.camel@mediatek.com>

Hello Sergey,

On Sun, 2022-12-04 at 22:58 +0400, Sergey Ryazanov wrote:
> On 22.11.2022 15:11, Yanchao Yang wrote:
> > From: MediaTek Corporation <linuxwwan at mediatek.com>
> > 
> > To malloc I/O memory as soon as possible, buffer management comes
> > into being.
> > It creates buffer pools that reserve some buffers through deferred
> > works when
> > the driver isn't busy.
> > 
> > The buffer management provides unified memory allocation/de-
> > allocation
> > interfaces for other modules. It supports two buffer types of SKB
> > and page.
> > Two reload work queues with different priority values are provided
> > to meet
> > various requirements of the control plane and the data plane.
> > 
> > When the reserved buffer count of the pool is less than a threshold
> > (default
> > is 2/3 of the pool size), the reload work will restart to allocate
> > buffers
> > from the OS until the buffer pool becomes full. When the buffer
> > pool fills,
> > the OS will recycle the buffer freed by the user.
> > 
> > Signed-off-by: Mingliang Xu <mingliang.xu at mediatek.com>
> > Signed-off-by: MediaTek Corporation <linuxwwan at mediatek.com>
> > ---
> >   drivers/net/wwan/mediatek/Makefile  |   3 +-
> >   drivers/net/wwan/mediatek/mtk_bm.c  | 369
> > ++++++++++++++++++++++++++++
> >   drivers/net/wwan/mediatek/mtk_bm.h  |  79 ++++++
> >   drivers/net/wwan/mediatek/mtk_dev.c |  11 +-
> >   drivers/net/wwan/mediatek/mtk_dev.h |   1 +
> >   5 files changed, 461 insertions(+), 2 deletions(-)
> >   create mode 100644 drivers/net/wwan/mediatek/mtk_bm.c
> >   create mode 100644 drivers/net/wwan/mediatek/mtk_bm.h
> 
> Yanchao, can you share some numbers, how this custom pool is
> outperform 
> the regular kernel allocator?
Prepare 2 drivers *.ko for comparison.
Driver A (following named A):  enable pre-allocate buffer pool.
Driver B (following named A):  disenable pre-allocate buffer pool. It
uses kernel API directly (__dev_alloc_skb and netdev_alloc_frag)

Test Instrument: Keysight UXM TA
Iperf command:
Server Command: iperf3 -s -p 5002 -i 1
Client Command: iperf3 -c 192.168.2.1 -p 5002 -i 1 -w 8M -t 30 -R -P 5

Test result: Fig 1. A?s TCP DL throughput Fig 2. B?s TCP DL throughput
(Ref attachment)

From the results, it represents that the A?s IP packets throughput
reaches 7Gbits/sec, while B?s throughput is 4.7Gbits/sec. A?s
throughput is up about 50% compared with B.

In addition, from ftrace, it represents following results.
A: it takes 14.241828s for allocating 33211099 buffers. The average
time is about 0.4us.
B: it takes 7.677069s for allocating 10890789 buffers. The average time
is about 0.7us.
> 
> --
> Sergey

many thanks.
Yanchao.Yang
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fig1.jpg
Type: image/jpeg
Size: 35073 bytes
Desc: fig1.jpg
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221209/d4a1cf3d/attachment-0002.jpg>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fig2.jpg
Type: image/jpeg
Size: 36156 bytes
Desc: fig2.jpg
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221209/d4a1cf3d/attachment-0003.jpg>

From Trevor.Wu at mediatek.com  Fri Dec  9 02:56:02 2022
From: Trevor.Wu at mediatek.com (=?utf-8?B?VHJldm9yIFd1ICjlkLPmlofoia8p?=)
Date: Fri, 9 Dec 2022 10:56:02 +0000
Subject: [PATCH v3 10/12] dt-bindings: mediatek: mt8188: add audio afe
 document
In-Reply-To: <d7d9f3c7-b3e3-1e13-a80f-c7bf7b38a5b1@linaro.org>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
	 <20221208033148.21866-11-trevor.wu@mediatek.com>
	 <d7d9f3c7-b3e3-1e13-a80f-c7bf7b38a5b1@linaro.org>
Message-ID: <45b4b287dfd57b99e0ba5675bf99194f6d84d9da.camel@mediatek.com>

On Fri, 2022-12-09 at 11:15 +0100, Krzysztof Kozlowski wrote:
> On 08/12/2022 04:31, Trevor Wu wrote:
> > Add mt8188 audio afe document.
> 
> Use subject prefixes matching the subsystem (git log --oneline --
> ...).
> 
> > 
> > Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
> > ---
> >  .../devicetree/bindings/sound/mt8188-afe.yaml | 196
> > ++++++++++++++++++
> >  1 file changed, 196 insertions(+)
> >  create mode 100644 Documentation/devicetree/bindings/sound/mt8188-
> > afe.yaml
> > 
> > diff --git a/Documentation/devicetree/bindings/sound/mt8188-
> > afe.yaml b/Documentation/devicetree/bindings/sound/mt8188-afe.yaml
> > new file mode 100644
> > index 000000000000..6ab26494d924
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/sound/mt8188-afe.yaml
> 
> 
> This is a friendly reminder during the review process.
> 
> It seems my previous comments were not fully addressed. Maybe my
> feedback got lost between the quotes, maybe you just forgot to apply
> it.
> Please go back to the previous discussion and either implement all
> requested changes or keep discussing them.
> 
> Thank you.
> 
> Comment was about filename matching compatible, so with vendor
> prefix.

Hi Krzysztof,

Thanks for your review first.
I aplogyize for my misunderstanding to your comment.
I just renamed the file name(mt8188-afe-pcm.yaml -> mt8188-afe.yaml),
and I didn't notice vendor prefix should be included.
I will correct the name in v4.

> 
> > @@ -0,0 +1,196 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: 
> > https://urldefense.com/v3/__http://devicetree.org/schemas/sound/mt8188-afe.yaml*__;Iw!!CTRNKA9wMg0ARbw!kiYsaIYR-KZ9KTQq3rOBRr3GeIC2UtnjFMWMKExmd_V7pW75AaEz30DuKv0nifWtMlknW8os7MiJ2pCCVT7ixRMsg7TpXw$?
> >  
> > +$schema: 
> > https://urldefense.com/v3/__http://devicetree.org/meta-schemas/core.yaml*__;Iw!!CTRNKA9wMg0ARbw!kiYsaIYR-KZ9KTQq3rOBRr3GeIC2UtnjFMWMKExmd_V7pW75AaEz30DuKv0nifWtMlknW8os7MiJ2pCCVT7ixRO-2YqhFw$?
> >  
> > +
> > +title: MediaTek AFE PCM controller for mt8188
> > +
> > +maintainers:
> > +  - Trevor Wu <trevor.wu at mediatek.com>
> > +
> > +properties:
> > +  compatible:
> > +    const: mediatek,mt8188-afe
> > +
> > +  reg:
> > +    maxItems: 1
> > +
> > +  interrupts:
> > +    maxItems: 1
> > +
> > +  resets:
> > +    maxItems: 1
> > +
> > +  reset-names:
> > +    const: audiosys
> > +
> > +  mediatek,topckgen:
> > +    $ref: /schemas/types.yaml#/definitions/phandle
> > +    description: The phandle of the mediatek topckgen controller
> > +
> > +  power-domains:
> > +    maxItems: 1
> > +
> > +  clocks:
> > +    items:
> > +      - description: 26M clock
> > +      - description: audio pll1 clock
> > +      - description: audio pll2 clock
> > +      - description: clock divider for i2si1_mck
> > +      - description: clock divider for i2si2_mck
> > +      - description: clock divider for i2so1_mck
> > +      - description: clock divider for i2so2_mck
> > +      - description: clock divider for dptx_mck
> > +      - description: a1sys hoping clock
> > +      - description: audio intbus clock
> > +      - description: audio hires clock
> > +      - description: audio local bus clock
> > +      - description: mux for dptx_mck
> > +      - description: mux for i2so1_mck
> > +      - description: mux for i2so2_mck
> > +      - description: mux for i2si1_mck
> > +      - description: mux for i2si2_mck
> > +      - description: audio 26m clock
> > +
> > +  clock-names:
> > +    items:
> > +      - const: clk26m
> > +      - const: apll1_ck
> > +      - const: apll2_ck
> > +      - const: apll12_div0
> > +      - const: apll12_div1
> > +      - const: apll12_div2
> > +      - const: apll12_div3
> > +      - const: apll12_div9
> > +      - const: a1sys_hp_sel
> > +      - const: aud_intbus_sel
> > +      - const: audio_h_sel
> > +      - const: audio_local_bus_sel
> > +      - const: dptx_m_sel
> > +      - const: i2so1_m_sel
> > +      - const: i2so2_m_sel
> > +      - const: i2si1_m_sel
> > +      - const: i2si2_m_sel
> > +      - const: adsp_audio_26m
> > +
> > +patternProperties:
> > +  "^mediatek,etdm-in[1-2]-chn-disabled$":
> > +    $ref: /schemas/types.yaml#/definitions/uint8-array
> > +    minItems: 1
> > +    maxItems: 16
> > +    description:
> > +      By default, all data received from ETDM pins will be
> > outputed to
> > +      memory. etdm in supports disable_out in direct mode(w/o
> > interconn).
> > +      User can specify the channel ID which they hope dropping and
> > then
> > +      the specified channel won't be seen on memory.
> 
> So we know what are the IDs but it's a mystery what are the values.
> Especially with unique values - how any of these should case that
> channel "won't be seen in memory"?
> 
For example,
FE can support 14ch, but BE(etdm) can't support 14ch(it can support
16ch).
In the case, we can configure 16ch to etdm and make use of the property
to disable the last two channels.

mediatek,etdm-in1-chn-disabled = /bits/ 8 <0xE 0xF>;


> > +    uniqueItems: true
> > +    items:
> > +      minimum: 0
> > +      maximum: 15
> > +
> > +  "^mediatek,etdm-in[1-2]-mclk-always-on-rate-hz$":
> > +    description: Specify etdm in mclk output rate for always on
> > case.
> 
> How is it different than assigned-clock-rates?
> 
This includes clock enabling at init stage.

> > +
> > +  "^mediatek,etdm-out[1-3]-mclk-always-on-rate-hz$":
> > +    description: Specify etdm out mclk output rate for always on
> > case.
> > +
> > +  "^mediatek,etdm-in[1-2]-multi-pin-mode$":
> > +    type: boolean
> > +    description: if present, the etdm data mode is I2S.
> > +
> > +  "^mediatek,etdm-out[1-3]-multi-pin-mode$":
> > +    type: boolean
> > +    description: if present, the etdm data mode is I2S.
> > +
> > +  "^mediatek,etdm-in[1-2]-cowork-source$":
> > +    $ref: /schemas/types.yaml#/definitions/uint32
> > +    description:
> > +      etdm modules can share the same external clock pin. Specify
> > +      which etdm clock source is required by this etdm in moudule.
> 
> typo: module
> 
Thanks, I will correct it in v4.

> > +    enum:
> > +      - 0 # etdm1_in
> > +      - 1 # etdm2_in
> > +      - 2 # etdm1_out
> 
> I don't get. This suggests that etdm1_out can be clock source of
> etdm-in1. Or etdm1_in can be clock source of etdm-in1... It does not
> make sense...
> 
You are correct.
etdm1_in should only choose other etdm as its clock source when user
needs this property, so etdm1_in should not be included in the enum
items for etdm-in1-cowork-source.
I will separate these properties in v4.

Thanks,
Trevor

> > +      - 3 # etdm2_out
> > +
> > +  "^mediatek,etdm-out[1-2]-cowork-source$":
> > +    $ref: /schemas/types.yaml#/definitions/uint32
> > +    description: |
> > +      etdm modules can share the same external clock pin. Specify
> > +      which etdm clock source is required by this etdm out
> > moudule.
> > +    enum:
> > +      - 0 # etdm1_in
> > +      - 1 # etdm2_in
> > +      - 2 # etdm1_out
> > +      - 3 # etdm2_out
> > +
> > +required:
> > +  - compatible
> > +  - reg
> > +  - interrupts
> > +  - resets
> > +  - reset-names
> > +  - mediatek,topckgen
> > +  - power-domains
> > +  - clocks
> > +  - clock-names
> > +
> 
> Best regards,
> Krzysztof
> 

From nbd at nbd.name  Fri Dec  9 04:32:24 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Fri, 9 Dec 2022 13:32:24 +0100
Subject: [PATCH,v2] wifi: mt76: mt7915: add wds support when wed is
 enabled
In-Reply-To: <e603722d58079af98c57a3dc117274d824d1d832.1669798063.git.sujuan.chen@mediatek.com>
References: <e603722d58079af98c57a3dc117274d824d1d832.1669798063.git.sujuan.chen@mediatek.com>
Message-ID: <c4f01e3e-4ae6-3d60-4fd0-b8d8bc5f4573@nbd.name>

On 30.11.22 10:18, Sujuan Chen wrote:
> The current WED only supports 256 wcid, whereas mt7986 can support up to 512 entries,
> so firmware provides a rule to get sta_info by DA when wcid is set to 0x3ff by txd.
> Also, WED provides a register to overwrite txd wcid, that is, wcid[9:8] can
> be overwritten by 0x3 and wcid[7:0] is set to 0xff by host driver.
> 
> However, firmware is unable to get sta_info from DA as DA != RA for 4addr cases,
> so firmware and wifi host driver both use wcid (256 - 271) and (768 ~ 783)
> for sync up to get correct sta_info
> 
> Tested-by: Sujuan Chen <sujuan.chen at mediatek.com>
> Co-developed-by: Bo Jiao <bo.jiao at mediatek.com>
> Signed-off-by: Bo Jiao <bo.jiao at mediatek.com>
> Signed-off-by: Sujuan Chen <sujuan.chen at mediatek.com>
> ---
> v2:
>   - drop duplicate settings
>   - reduce the patch size by redefining mt76_wcid_alloc
> ---
>   drivers/net/wireless/mediatek/mt76/mt76.h     |  6 +++
>   .../net/wireless/mediatek/mt76/mt7915/main.c  | 24 +++++++++--
>   .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 13 +++++-
>   .../net/wireless/mediatek/mt76/mt7915/mcu.h   |  1 +
>   drivers/net/wireless/mediatek/mt76/util.c     | 40 +++++++++++++++++--
>   drivers/net/wireless/mediatek/mt76/util.h     |  7 +++-
>   6 files changed, 82 insertions(+), 9 deletions(-)
> 

> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
> index c40b6098f19a..46a9e4f0396e 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
> @@ -1115,6 +1122,13 @@ static void mt7915_sta_set_4addr(struct ieee80211_hw *hw,
>   	else
>   		clear_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags);
>   
> +	if (mtk_wed_device_active(&dev->mt76.mmio.wed) &&
> +	    !is_mt7915(&dev->mt76)) {
> +		mt7915_sta_remove(hw, vif, sta);
> +		mt76_sta_pre_rcu_remove(hw, vif, sta);
> +		mt7915_sta_add(hw, vif, sta);
> +	}
> +
>   	mt76_connac_mcu_wtbl_update_hdr_trans(&dev->mt76, vif, sta);
>   }
>   
I suspect that this may a bit racy if there is concurrent tx activity 
(e.g. for EAP auth). Not sure if this could cause problems for the 
firmware or other kinds of bugs.

While my idea may need some rework of the existing functions, I think a 
better flow would be:

1. mt76_sta_pre_rcu_remove
2. save old wcid
3. mt7915_sta_add
4. synchronize_rcu()
5. remove firmware state for old wcid entry

- Felix


From krzysztof.kozlowski at linaro.org  Fri Dec  9 06:56:24 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Fri, 9 Dec 2022 15:56:24 +0100
Subject: [PATCH v3 10/12] dt-bindings: mediatek: mt8188: add audio afe
 document
In-Reply-To: <45b4b287dfd57b99e0ba5675bf99194f6d84d9da.camel@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
 <20221208033148.21866-11-trevor.wu@mediatek.com>
 <d7d9f3c7-b3e3-1e13-a80f-c7bf7b38a5b1@linaro.org>
 <45b4b287dfd57b99e0ba5675bf99194f6d84d9da.camel@mediatek.com>
Message-ID: <fb34e446-2904-a357-e54b-3e82a2b0745c@linaro.org>

On 09/12/2022 11:56, Trevor Wu (???) wrote:
>>> +
>>> +patternProperties:
>>> +  "^mediatek,etdm-in[1-2]-chn-disabled$":
>>> +    $ref: /schemas/types.yaml#/definitions/uint8-array
>>> +    minItems: 1
>>> +    maxItems: 16
>>> +    description:
>>> +      By default, all data received from ETDM pins will be
>>> outputed to
>>> +      memory. etdm in supports disable_out in direct mode(w/o
>>> interconn).
>>> +      User can specify the channel ID which they hope dropping and
>>> then
>>> +      the specified channel won't be seen on memory.
>>
>> So we know what are the IDs but it's a mystery what are the values.
>> Especially with unique values - how any of these should case that
>> channel "won't be seen in memory"?
>>
> For example,
> FE can support 14ch, but BE(etdm) can't support 14ch(it can support
> 16ch).
> In the case, we can configure 16ch to etdm and make use of the property
> to disable the last two channels.
> 
> mediatek,etdm-in1-chn-disabled = /bits/ 8 <0xE 0xF>;

Your description should explain that this is a list of channel IDs which
should be disabled.

> 
> 
>>> +    uniqueItems: true
>>> +    items:
>>> +      minimum: 0
>>> +      maximum: 15
>>> +
>>> +  "^mediatek,etdm-in[1-2]-mclk-always-on-rate-hz$":
>>> +    description: Specify etdm in mclk output rate for always on
>>> case.
>>
>> How is it different than assigned-clock-rates?
>>
> This includes clock enabling at init stage.

assigned-clock-rates are also at init stage. I asked what is different.

> 
>>> +
>>> +  "^mediatek,etdm-out[1-3]-mclk-always-on-rate-hz$":
>>> +    description: Specify etdm out mclk output rate for always on
>>> case.
>>> +
>>> +  "^mediatek,etdm-in[1-2]-multi-pin-mode$":
>>> +    type: boolean
>>> +    description: if present, the etdm data mode is I2S.
>>> +
>>> +  "^mediatek,etdm-out[1-3]-multi-pin-mode$":
>>> +    type: boolean
>>> +    description: if present, the etdm data mode is I2S.
>>> +
>>> +  "^mediatek,etdm-in[1-2]-cowork-source$":
>>> +    $ref: /schemas/types.yaml#/definitions/uint32
>>> +    description:
>>> +      etdm modules can share the same external clock pin. Specify
>>> +      which etdm clock source is required by this etdm in moudule.
>>
>> typo: module
>>

Best regards,
Krzysztof



From cujomalainey at google.com  Fri Dec  9 10:27:14 2022
From: cujomalainey at google.com (Curtis Malainey)
Date: Fri, 9 Dec 2022 10:27:14 -0800
Subject: [PATCH] ASoC: mediatek: mt8195: add sof be ops to check audio active
In-Reply-To: <20221209031053.8444-1-yc.hung@mediatek.com>
References: <20221209031053.8444-1-yc.hung@mediatek.com>
Message-ID: <CAOReqxh=27P7PogzhFr+37XBfRh5Nxu1x46JpdCH=ZRDVhRbeQ@mail.gmail.com>

On Thu, Dec 8, 2022 at 7:11 PM YC Hung <yc.hung at mediatek.com> wrote:
>
> In MT8195 SOF design, both DSP and audio driver would access audio
> registers. Before DSP accesses audio registers, audio power and clock
> should be enabled. DSP will hang up if DSP access audio register but
> audio power and clock are disabled. Therefore, we add audio pm runtime
> active checking before accessing audio registers in SOF BE's callback
> hw_params function to avoid this situation.
>
> Signed-off-by: YC Hung <yc.hung at mediatek.com>

Acked-by: Curtis Malainey <cujomalainey at chromium.org>

> ---
>  sound/soc/mediatek/mt8195/mt8195-mt6359.c | 30 +++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
>
> diff --git a/sound/soc/mediatek/mt8195/mt8195-mt6359.c b/sound/soc/mediatek/mt8195/mt8195-mt6359.c
> index 61be66f47723..4682748d82be 100644
> --- a/sound/soc/mediatek/mt8195/mt8195-mt6359.c
> +++ b/sound/soc/mediatek/mt8195/mt8195-mt6359.c
> @@ -633,6 +633,32 @@ static const struct snd_soc_ops mt8195_rt1011_etdm_ops = {
>         .hw_params = mt8195_rt1011_etdm_hw_params,
>  };
>
> +static int mt8195_sof_be_hw_params(struct snd_pcm_substream *substream,
> +                                  struct snd_pcm_hw_params *params)
> +{
> +       struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
> +       struct snd_soc_component *cmpnt_afe = NULL;
> +       struct snd_soc_pcm_runtime *runtime;
> +
> +       /* find afe component */
> +       for_each_card_rtds(rtd->card, runtime) {
> +               cmpnt_afe = snd_soc_rtdcom_lookup(runtime, AFE_PCM_NAME);
> +               if (cmpnt_afe)
> +                       break;
> +       }
> +
> +       if (cmpnt_afe && !pm_runtime_active(cmpnt_afe->dev)) {
> +               dev_err(rtd->dev, "afe pm runtime is not active!!\n");
> +               return -EINVAL;
> +       }
> +
> +       return 0;
> +}
> +
> +static const struct snd_soc_ops mt8195_sof_be_ops = {
> +       .hw_params = mt8195_sof_be_hw_params,
> +};
> +
>  static int mt8195_rt1011_init(struct snd_soc_pcm_runtime *rtd)
>  {
>         struct snd_soc_card *card = rtd->card;
> @@ -1272,24 +1298,28 @@ static struct snd_soc_dai_link mt8195_mt6359_dai_links[] = {
>                 .name = "AFE_SOF_DL2",
>                 .no_pcm = 1,
>                 .dpcm_playback = 1,
> +               .ops = &mt8195_sof_be_ops,
>                 SND_SOC_DAILINK_REG(AFE_SOF_DL2),
>         },
>         [DAI_LINK_SOF_DL3_BE] = {
>                 .name = "AFE_SOF_DL3",
>                 .no_pcm = 1,
>                 .dpcm_playback = 1,
> +               .ops = &mt8195_sof_be_ops,
>                 SND_SOC_DAILINK_REG(AFE_SOF_DL3),
>         },
>         [DAI_LINK_SOF_UL4_BE] = {
>                 .name = "AFE_SOF_UL4",
>                 .no_pcm = 1,
>                 .dpcm_capture = 1,
> +               .ops = &mt8195_sof_be_ops,
>                 SND_SOC_DAILINK_REG(AFE_SOF_UL4),
>         },
>         [DAI_LINK_SOF_UL5_BE] = {
>                 .name = "AFE_SOF_UL5",
>                 .no_pcm = 1,
>                 .dpcm_capture = 1,
> +               .ops = &mt8195_sof_be_ops,
>                 SND_SOC_DAILINK_REG(AFE_SOF_UL5),
>         },
>  };
> --
> 2.18.0
>


From bvanassche at acm.org  Fri Dec  9 10:50:48 2022
From: bvanassche at acm.org (Bart Van Assche)
Date: Fri, 9 Dec 2022 10:50:48 -0800
Subject: [PATCH v3 1/1] scsi: ufs: core: fix device management cmd timeout
 flow
In-Reply-To: <20221209101321.30671-1-mason.zhang@mediatek.com>
References: <20221209101321.30671-1-mason.zhang@mediatek.com>
Message-ID: <d53f0b3e-a831-ed1e-9a8e-3c6902a81fdf@acm.org>

On 12/9/22 02:13, Mason Zhang wrote:
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index b1f59a5fe632..6fe51b8d41f9 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -2979,35 +2979,31 @@ static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba,
>   		err = -ETIMEDOUT;
>   		dev_dbg(hba->dev, "%s: dev_cmd request timedout, tag %d\n",
>   			__func__, lrbp->task_tag);
> -		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0) {
> +		if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0)
>   			/* successfully cleared the command, retry if needed */
>   			err = -EAGAIN;
> +		/*
> +		 * in case of an error, after clearing the doorbell,
> +		 * we also need to clear the task tag bit from the
> +		 * outstanding_reqs variable.
> +		 */
> +		spin_lock_irqsave(&hba->outstanding_lock, flags);
> +		pending = test_bit(lrbp->task_tag,
> +				   &hba->outstanding_reqs);
> +		if (pending) {
> +			hba->dev_cmd.complete = NULL;
> +			__clear_bit(lrbp->task_tag,
> +				    &hba->outstanding_reqs);
> +		}
> +		spin_unlock_irqrestore(&hba->outstanding_lock, flags);

This patch causes the 'task_tag' bit to be cleared from outstanding_reqs 
even if ufshcd_clear_cmds() failed. I think that's wrong.

Bart.


From robh at kernel.org  Fri Dec  9 13:06:31 2022
From: robh at kernel.org (Rob Herring)
Date: Fri, 9 Dec 2022 15:06:31 -0600
Subject: [PATCH v2 01/12] dt-binding: mediatek: add bindings for MediaTek
 8195 MDP3 components
In-Reply-To: <20221207084412.14075-2-moudy.ho@mediatek.com>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
 <20221207084412.14075-2-moudy.ho@mediatek.com>
Message-ID: <20221209210631.GA3840519-robh@kernel.org>

On Wed, Dec 07, 2022 at 04:44:01PM +0800, Moudy Ho wrote:
> This patch adds support for MT8195 MDP3 RDMA, and introduce more
> MDP3 components present in MT8195.
> 
> Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
> ---
>  .../bindings/media/mediatek,mdp3-aal.yaml     | 64 ++++++++++++++++
>  .../bindings/media/mediatek,mdp3-color.yaml   | 64 ++++++++++++++++
>  .../bindings/media/mediatek,mdp3-fg.yaml      | 64 ++++++++++++++++
>  .../bindings/media/mediatek,mdp3-hdr.yaml     | 63 +++++++++++++++
>  .../bindings/media/mediatek,mdp3-merge.yaml   | 64 ++++++++++++++++
>  .../bindings/media/mediatek,mdp3-ovl.yaml     | 64 ++++++++++++++++
>  .../bindings/media/mediatek,mdp3-pad.yaml     | 64 ++++++++++++++++
>  .../bindings/media/mediatek,mdp3-rdma.yaml    |  5 +-
>  .../bindings/media/mediatek,mdp3-split.yaml   | 76 +++++++++++++++++++
>  .../bindings/media/mediatek,mdp3-stitch.yaml  | 64 ++++++++++++++++
>  .../bindings/media/mediatek,mdp3-tcc.yaml     | 63 +++++++++++++++
>  .../bindings/media/mediatek,mdp3-tdshp.yaml   | 64 ++++++++++++++++
>  12 files changed, 717 insertions(+), 2 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-aal.yaml
>  create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-color.yaml
>  create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-fg.yaml
>  create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-hdr.yaml
>  create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-merge.yaml
>  create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-ovl.yaml
>  create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-pad.yaml
>  create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-split.yaml
>  create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-stitch.yaml
>  create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-tcc.yaml
>  create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-tdshp.yaml
> 
> diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-aal.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-aal.yaml
> new file mode 100644
> index 000000000000..5b59e0802357
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-aal.yaml
> @@ -0,0 +1,64 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/media/mediatek,mdp3-aal.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: MediaTek Media Data Path 3 AAL Device Tree Bindings

Drop ' Device Tree Bindings' from titles.

> +
> +maintainers:
> +  - Matthias Brugger <matthias.bgg at gmail.com>
> +  - Moudy Ho <moudy.ho at mediatek.com>
> +
> +description: |

Don't need '|'

> +  One of Media Data Path 3 (MDP3) components is responsible for backlight
> +  power saving and sunlight visibility improving.
> +
> +properties:
> +  compatible:
> +    enum:
> +      - mediatek,mt8195-mdp3-aal
> +
> +  reg:
> +    maxItems: 1
> +
> +  mediatek,gce-client-reg:
> +    $ref: /schemas/types.yaml#/definitions/phandle-array
> +    items:
> +      items:
> +        - description: phandle of GCE
> +        - description: GCE subsys id
> +        - description: register offset
> +        - description: register size
> +    description: The register of client driver can be configured by gce with
> +      4 arguments defined in this property. Each GCE subsys id is mapping to
> +      a client defined in the header include/dt-bindings/gce/<chip>-gce.h.

How many 4 cell entries? This allows any number. If 1, then you need 
'maxItems: 1' with the outer 'items'.

> +
> +  clocks:
> +    minItems: 1
> +
> +  power-domains:
> +    maxItems: 1
> +
> +required:
> +  - compatible
> +  - reg
> +  - mediatek,gce-client-reg
> +  - clocks
> +  - power-domains
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/clock/mt8195-clk.h>
> +    #include <dt-bindings/gce/mt8195-gce.h>
> +    #include <dt-bindings/power/mt8195-power.h>
> +
> +    mdp3-aal0 at 14005000 {
> +      compatible = "mediatek,mt8195-mdp3-aal";
> +      reg = <0x14005000 0x1000>;
> +      mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x5000 0x1000>;
> +      clocks = <&vppsys0 CLK_VPP0_MDP_AAL>;
> +      power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;

Indent by 4 spaces here.

> +    };

Same comments for the rest...



From andriy.shevchenko at intel.com  Fri Dec  9 13:47:54 2022
From: andriy.shevchenko at intel.com (Andy Shevchenko)
Date: Fri, 9 Dec 2022 23:47:54 +0200
Subject: [PATCH v2 00/11] pwm: Allow .get_state to fail
In-Reply-To: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
Message-ID: <Y5OtCjQOQjjltGPa@smile.fi.intel.com>

On Wed, Nov 30, 2022 at 04:21:37PM +0100, Uwe Kleine-K?nig wrote:
> Hello,
> 
> I forgot about this series and was remembered when I talked to Conor
> Dooley about how .get_state() should behave in an error case.
> 
> Compared to (implicit) v1, sent with Message-Id: 20220916151506.298488-1-u.kleine-koenig at pengutronix.de
> I changed:
> 
>  - Patch #1 which does the prototype change now just adds "return 0" to
>    all implementations and so gets simpler and doesn't change behaviour.
>    The adaptions to the different .get_state() implementations are split
>    out into individual patches to ease review.
>  - One minor inconsistency fixed in "pwm: Handle .get_state() failures"
>    that I noticed while looking into this patch.
>  - I skipped changing sun4i.c as I don't know how to handle the error
>    there. Someone might want to have a look. (That's not ideal, but it's
>    not worse than the same issue before this series.)
> 
> In v1 Thierry had the concern:
> 
> | That raises the question about what to do in these cases. If we return
> | an error, that could potentially throw off consumers. So perhaps the
> | closest would be to return a disabled PWM? Or perhaps it'd be up to the
> | consumer to provide some fallback configuration for invalidly configured
> | or unconfigured PWMs.
> 
> .get_state() is only called in pwm_device_request on a pwm_state that a
> consumer might see. Before my series a consumer might have seen a
> partial modified pwm_state (because .get_state() might have modified
> .period, then stumbled and returned silently). The last patch ensures
> that this partial modification isn't given out to the consumer. Instead
> they now see the same as if .get_state wasn't implemented at all.

I'm wondering why we didn't see a compiler warning about mistyped function
prototypes in some drivers.

P.S. The series is good thing to do, thank you.

-- 
With Best Regards,
Andy Shevchenko




From colin.foster at in-advantage.com  Fri Dec  9 19:30:24 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  9 Dec 2022 19:30:24 -0800
Subject: [PATCH v5 net-next 01/10] dt-bindings: dsa: sync with maintainers
In-Reply-To: <20221210033033.662553-1-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
Message-ID: <20221210033033.662553-2-colin.foster@in-advantage.com>

The MAINTAINERS file has Andrew Lunn, Florian Fainelli, and Vladimir Oltean
listed as the maintainers for generic dsa bindings. Update dsa.yaml and
dsa-port.yaml accordingly.

Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Suggested-by: Vladimir Oltean <olteanv at gmail.com>

---

v5
  * New patch

---
 Documentation/devicetree/bindings/net/dsa/dsa-port.yaml | 2 +-
 Documentation/devicetree/bindings/net/dsa/dsa.yaml      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml b/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
index 9abb8eba5fad..2b8317911bef 100644
--- a/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
@@ -9,7 +9,7 @@ title: Ethernet Switch port Device Tree Bindings
 maintainers:
   - Andrew Lunn <andrew at lunn.ch>
   - Florian Fainelli <f.fainelli at gmail.com>
-  - Vivien Didelot <vivien.didelot at gmail.com>
+  - Vladimir Oltean <olteanv at gmail.com>
 
 description:
   Ethernet switch port Description
diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
index b9d48e357e77..5efc0ee8edcb 100644
--- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
@@ -9,7 +9,7 @@ title: Ethernet Switch Device Tree Bindings
 maintainers:
   - Andrew Lunn <andrew at lunn.ch>
   - Florian Fainelli <f.fainelli at gmail.com>
-  - Vivien Didelot <vivien.didelot at gmail.com>
+  - Vladimir Oltean <olteanv at gmail.com>
 
 description:
   This binding represents Ethernet Switches which have a dedicated CPU
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  9 19:30:23 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  9 Dec 2022 19:30:23 -0800
Subject: [PATCH v5 net-next 00/10] dt-binding preparation for ocelot switches
Message-ID: <20221210033033.662553-1-colin.foster@in-advantage.com>

Ocelot switches have the abilitiy to be used internally via
memory-mapped IO or externally via SPI or PCIe. This brings up issues
for documentation, where the same chip might be accessed internally in a
switchdev manner, or externally in a DSA configuration. This patch set
is perparation to bring DSA functionality to the VSC7512, utilizing as
much as possible with an almost identical VSC7514 chip.

This patch set changed quite a bit from v2, so I'll omit the background
of how those sets came to be. Rob offered a lot of very useful guidance.
My thanks.

At the end of the day, with this patch set, there should be a framework
to document Ocelot switches (and any switch) in scenarios where they can
be controlled internally (ethernet-switch) or externally (dsa-switch).

---

v4 -> v5
  * Sync DSA maintainers with MAINTAINERS file (new patch 1)
  * Undo move of port description of mediatek,mt7530.yaml (patch 4)
  * Move removal of "^(ethernet-)?switch(@.*)?$" in dsa.yaml from patch 4
    to patch 8
  * Add more consistent capitalization in title lines and better Ethernet
    switch port description. (patch 8)

v3 -> v4
  * Renamed "base" to "ethernet-ports" to avoid confusion with the concept
    of a base class.
  * Squash ("dt-bindings: net: dsa: mediatek,mt7530: fix port description location")
    patch into ("dt-bindings: net: dsa: utilize base definitions for standard dsa
    switches")
  * Corrections to fix confusion about additonalProperties vs unevaluatedProperties.
    See specific patches for details.

v2 -> v3
  * Restructured everything to use a "base" iref for devices that don't
    have additional properties, and simply a "ref" for devices that do.
  * New patches to fix up brcm,sf2, qca8k, and mt7530
  * Fix unevaluatedProperties errors from previous sets (see specific
    patches for more detail)
  * Removed redundant "Device Tree Binding" from titles, where applicable.

v1 -> v2
  * Two MFD patches were brought into the MFD tree, so are dropped
  * Add first patch 1/6 to allow DSA devices to add ports and port
    properties
  * Test qca8k against new dt-bindings and fix warnings. (patch 2/6)
  * Add tags (patch 3/6)
  * Fix vsc7514 refs and properties

---
Colin Foster (10):
  dt-bindings: dsa: sync with maintainers
  dt-bindings: net: dsa: sf2: fix brcm,use-bcm-hdr documentation
  dt-bindings: net: dsa: qca8k: remove address-cells and size-cells from
    switch node
  dt-bindings: net: dsa: utilize base definitions for standard dsa
    switches
  dt-bindings: net: dsa: allow additional ethernet-port properties
  dt-bindings: net: dsa: qca8k: utilize shared dsa.yaml
  dt-bindings: net: dsa: mediatek,mt7530: remove unnecessary dsa-port
    reference
  dt-bindings: net: add generic ethernet-switch
  dt-bindings: net: add generic ethernet-switch-port binding
  dt-bindings: net: mscc,vsc7514-switch: utilize generic
    ethernet-switch.yaml

 .../bindings/net/dsa/arrow,xrs700x.yaml       |  2 +-
 .../devicetree/bindings/net/dsa/brcm,b53.yaml |  2 +-
 .../devicetree/bindings/net/dsa/brcm,sf2.yaml | 15 +++--
 .../devicetree/bindings/net/dsa/dsa-port.yaml | 29 ++-------
 .../devicetree/bindings/net/dsa/dsa.yaml      | 49 +++++++--------
 .../net/dsa/hirschmann,hellcreek.yaml         |  2 +-
 .../bindings/net/dsa/mediatek,mt7530.yaml     |  6 +-
 .../bindings/net/dsa/microchip,ksz.yaml       |  2 +-
 .../bindings/net/dsa/microchip,lan937x.yaml   |  2 +-
 .../bindings/net/dsa/mscc,ocelot.yaml         |  2 +-
 .../bindings/net/dsa/nxp,sja1105.yaml         |  2 +-
 .../devicetree/bindings/net/dsa/qca8k.yaml    | 14 +----
 .../devicetree/bindings/net/dsa/realtek.yaml  |  2 +-
 .../bindings/net/dsa/renesas,rzn1-a5psw.yaml  |  2 +-
 .../bindings/net/ethernet-switch-port.yaml    | 25 ++++++++
 .../bindings/net/ethernet-switch.yaml         | 62 +++++++++++++++++++
 .../bindings/net/mscc,vsc7514-switch.yaml     | 31 +---------
 MAINTAINERS                                   |  2 +
 18 files changed, 143 insertions(+), 108 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
 create mode 100644 Documentation/devicetree/bindings/net/ethernet-switch.yaml

-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  9 19:30:25 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  9 Dec 2022 19:30:25 -0800
Subject: [PATCH v5 net-next 02/10] dt-bindings: net: dsa: sf2: fix brcm,use-bcm-hdr documentation
In-Reply-To: <20221210033033.662553-1-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
Message-ID: <20221210033033.662553-3-colin.foster@in-advantage.com>

The property use-bcm-hdr was documented as an entry under the ports node
for the bcm_sf2 DSA switch. This property is actually evaluated for each
port. Correct the documentation to match the actual behavior and properly
reference dsa-port.yaml for additional properties of the node.

Suggested-by: Rob Herring <robh at kernel.org>
Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Acked-by: Florian Fainelli <f.fainelli at gmail.com>
Reviewed-by: Rob Herring <robh at kernel.org>
---

v4 -> v5
  * No change

v3 -> v4
  * Add Acked and Reviewed tags

v3
  * New patch

---
 .../devicetree/bindings/net/dsa/brcm,sf2.yaml     | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/brcm,sf2.yaml b/Documentation/devicetree/bindings/net/dsa/brcm,sf2.yaml
index d159ac78cec1..eed16e216fb6 100644
--- a/Documentation/devicetree/bindings/net/dsa/brcm,sf2.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/brcm,sf2.yaml
@@ -85,11 +85,16 @@ properties:
   ports:
     type: object
 
-    properties:
-      brcm,use-bcm-hdr:
-        description: if present, indicates that the switch port has Broadcom
-          tags enabled (per-packet metadata)
-        type: boolean
+    patternProperties:
+      '^port@[0-9a-f]$':
+        $ref: dsa-port.yaml#
+        unevaluatedProperties: false
+
+        properties:
+          brcm,use-bcm-hdr:
+            description: if present, indicates that the switch port has Broadcom
+              tags enabled (per-packet metadata)
+            type: boolean
 
 required:
   - reg
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  9 19:30:26 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  9 Dec 2022 19:30:26 -0800
Subject: [PATCH v5 net-next 03/10] dt-bindings: net: dsa: qca8k: remove address-cells and size-cells from switch node
In-Reply-To: <20221210033033.662553-1-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
Message-ID: <20221210033033.662553-4-colin.foster@in-advantage.com>

The children of the switch node don't have a unit address, and therefore
should not need the #address-cells or #size-cells entries. Fix the example
schemas accordingly.

Suggested-by: Vladimir Oltean <olteanv at gmail.com>
Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
Reviewed-by: Rob Herring <robh at kernel.org>
---

v4 -> v5
  * No change

v3 -> v4
  * Add Reviewed tags

v3
  * New patch

---
 Documentation/devicetree/bindings/net/dsa/qca8k.yaml | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/qca8k.yaml b/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
index 978162df51f7..6fc9bc985726 100644
--- a/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
@@ -148,8 +148,6 @@ examples:
 
         switch at 10 {
             compatible = "qca,qca8337";
-            #address-cells = <1>;
-            #size-cells = <0>;
             reset-gpios = <&gpio 42 GPIO_ACTIVE_LOW>;
             reg = <0x10>;
 
@@ -209,8 +207,6 @@ examples:
 
         switch at 10 {
             compatible = "qca,qca8337";
-            #address-cells = <1>;
-            #size-cells = <0>;
             reset-gpios = <&gpio 42 GPIO_ACTIVE_LOW>;
             reg = <0x10>;
 
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  9 19:30:27 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  9 Dec 2022 19:30:27 -0800
Subject: [PATCH v5 net-next 04/10] dt-bindings: net: dsa: utilize base definitions for standard dsa switches
In-Reply-To: <20221210033033.662553-1-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
Message-ID: <20221210033033.662553-5-colin.foster@in-advantage.com>

DSA switches can fall into one of two categories: switches where all ports
follow standard '(ethernet-)?port' properties, and switches that have
additional properties for the ports.

The scenario where DSA ports are all standardized can be handled by
switches with a reference to the new 'dsa.yaml#/$defs/ethernet-ports'.

The scenario where DSA ports require additional properties can reference
'$dsa.yaml#' directly. This will allow switches to reference these standard
definitions of the DSA switch, but add additional properties under the port
nodes.

Suggested-by: Rob Herring <robh at kernel.org>
Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Reviewed-by: Linus Walleij <linus.walleij at linaro.org>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
Reviewed-by: Rob Herring <robh at kernel.org>
Acked-by: Alvin ?ipraga <alsi at bang-olufsen.dk> # realtek
Acked-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---

v4 -> v5
  * Add Rob Reviewed, Ar?n? Acked
  * Defer the removal of "^(ethernet-)?switch(@.*)?$" in dsa.yaml until a
    later patch
  * Undo the move of ethernet switch ports description in mediatek,mt7530.yaml
  * Fix typos in commit message

v3 -> v4
  * Rename "$defs/base" to "$defs/ethernet-ports" to avoid implication of a
    "base class" and fix commit message accordingly
  * Add the following to the common etherent-ports node:
      "additionalProperties: false"
      "#address-cells" property
      "#size-cells" property
  * Fix "etherenet-ports@[0-9]+" to correctly be "ethernet-port@[0-9]+"
  * Remove unnecessary newline
  * Apply changes to mediatek,mt7530.yaml that were previously in a separate patch
  * Add Reviewed and Acked tags

v3
  * New patch

---
 .../bindings/net/dsa/arrow,xrs700x.yaml       |  2 +-
 .../devicetree/bindings/net/dsa/brcm,b53.yaml |  2 +-
 .../devicetree/bindings/net/dsa/dsa.yaml      | 22 +++++++++++++++++++
 .../net/dsa/hirschmann,hellcreek.yaml         |  2 +-
 .../bindings/net/dsa/mediatek,mt7530.yaml     |  5 +----
 .../bindings/net/dsa/microchip,ksz.yaml       |  2 +-
 .../bindings/net/dsa/microchip,lan937x.yaml   |  2 +-
 .../bindings/net/dsa/mscc,ocelot.yaml         |  2 +-
 .../bindings/net/dsa/nxp,sja1105.yaml         |  2 +-
 .../devicetree/bindings/net/dsa/realtek.yaml  |  2 +-
 .../bindings/net/dsa/renesas,rzn1-a5psw.yaml  |  2 +-
 11 files changed, 32 insertions(+), 13 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
index 259a0c6547f3..5888e3a0169a 100644
--- a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
 title: Arrow SpeedChips XRS7000 Series Switch Device Tree Bindings
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
 
 maintainers:
   - George McCollister <george.mccollister at gmail.com>
diff --git a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
index 1219b830b1a4..5bef4128d175 100644
--- a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
@@ -66,7 +66,7 @@ required:
   - reg
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
   - if:
       properties:
         compatible:
diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
index 5efc0ee8edcb..9375cdcfbf96 100644
--- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
@@ -58,4 +58,26 @@ oneOf:
 
 additionalProperties: true
 
+$defs:
+  ethernet-ports:
+    description: A DSA switch without any extra port properties
+    $ref: '#/'
+
+    patternProperties:
+      "^(ethernet-)?ports$":
+        type: object
+        additionalProperties: false
+
+        properties:
+          '#address-cells':
+            const: 1
+          '#size-cells':
+            const: 0
+
+        patternProperties:
+          "^(ethernet-)?port@[0-9]+$":
+            description: Ethernet switch ports
+            $ref: dsa-port.yaml#
+            unevaluatedProperties: false
+
 ...
diff --git a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
index 73b774eadd0b..748ef9983ce2 100644
--- a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
 title: Hirschmann Hellcreek TSN Switch Device Tree Bindings
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
 
 maintainers:
   - Andrew Lunn <andrew at lunn.ch>
diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
index f2e9ff3f580b..20312f5d1944 100644
--- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
@@ -157,9 +157,6 @@ patternProperties:
     patternProperties:
       "^(ethernet-)?port@[0-9]+$":
         type: object
-        description: Ethernet switch ports
-
-        unevaluatedProperties: false
 
         properties:
           reg:
@@ -238,7 +235,7 @@ $defs:
                       - sgmii
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
   - if:
       required:
         - mediatek,mcm
diff --git a/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml b/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
index 4da75b1f9533..a4b53434c85c 100644
--- a/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
@@ -11,7 +11,7 @@ maintainers:
   - Woojung Huh <Woojung.Huh at microchip.com>
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
   - $ref: /schemas/spi/spi-peripheral-props.yaml#
 
 properties:
diff --git a/Documentation/devicetree/bindings/net/dsa/microchip,lan937x.yaml b/Documentation/devicetree/bindings/net/dsa/microchip,lan937x.yaml
index 630bf0f8294b..4aee3bf4c2f4 100644
--- a/Documentation/devicetree/bindings/net/dsa/microchip,lan937x.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/microchip,lan937x.yaml
@@ -10,7 +10,7 @@ maintainers:
   - UNGLinuxDriver at microchip.com
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
 
 properties:
   compatible:
diff --git a/Documentation/devicetree/bindings/net/dsa/mscc,ocelot.yaml b/Documentation/devicetree/bindings/net/dsa/mscc,ocelot.yaml
index 8d93ed9c172c..85014a590a35 100644
--- a/Documentation/devicetree/bindings/net/dsa/mscc,ocelot.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/mscc,ocelot.yaml
@@ -78,7 +78,7 @@ required:
   - reg
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
   - if:
       properties:
         compatible:
diff --git a/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml b/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml
index 1e26d876d146..826e2db98974 100644
--- a/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml
@@ -13,7 +13,7 @@ description:
   depends on the SPI bus master driver.
 
 allOf:
-  - $ref: "dsa.yaml#"
+  - $ref: dsa.yaml#/$defs/ethernet-ports
   - $ref: /schemas/spi/spi-peripheral-props.yaml#
 
 maintainers:
diff --git a/Documentation/devicetree/bindings/net/dsa/realtek.yaml b/Documentation/devicetree/bindings/net/dsa/realtek.yaml
index 1a7d45a8ad66..cfd69c2604ea 100644
--- a/Documentation/devicetree/bindings/net/dsa/realtek.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/realtek.yaml
@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
 title: Realtek switches for unmanaged switches
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
 
 maintainers:
   - Linus Walleij <linus.walleij at linaro.org>
diff --git a/Documentation/devicetree/bindings/net/dsa/renesas,rzn1-a5psw.yaml b/Documentation/devicetree/bindings/net/dsa/renesas,rzn1-a5psw.yaml
index 0a0d62b6c00e..833d2f68daa1 100644
--- a/Documentation/devicetree/bindings/net/dsa/renesas,rzn1-a5psw.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/renesas,rzn1-a5psw.yaml
@@ -14,7 +14,7 @@ description: |
   handles 4 ports + 1 CPU management port.
 
 allOf:
-  - $ref: dsa.yaml#
+  - $ref: dsa.yaml#/$defs/ethernet-ports
 
 properties:
   compatible:
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  9 19:30:28 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  9 Dec 2022 19:30:28 -0800
Subject: [PATCH v5 net-next 05/10] dt-bindings: net: dsa: allow additional ethernet-port properties
In-Reply-To: <20221210033033.662553-1-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
Message-ID: <20221210033033.662553-6-colin.foster@in-advantage.com>

Explicitly allow additional properties for both the ethernet-port and
ethernet-ports properties. This specifically will allow the qca8k.yaml
binding to use shared properties.

Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
Reviewed-by: Rob Herring <robh at kernel.org>
---

v4 -> v5
  * Add Rob Reviewed

v3 -> v4
  * Change ethernet-ports node to have "unevaluatedProperties: false"
    instead of "additionalProperties: true"
  * Change ethernet-port node to have "additionalProperties: true" instead
    of "unevaluatedProperties: true"
  * Add Reviewed tag

v2 -> v3
  * No change

v1 -> v2
  * New patch

---
 Documentation/devicetree/bindings/net/dsa/dsa.yaml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
index 9375cdcfbf96..98a79be3bffe 100644
--- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
@@ -41,6 +41,8 @@ patternProperties:
       '#size-cells':
         const: 0
 
+    unevaluatedProperties: false
+
     patternProperties:
       "^(ethernet-)?port@[0-9]+$":
         type: object
@@ -48,7 +50,7 @@ patternProperties:
 
         $ref: dsa-port.yaml#
 
-        unevaluatedProperties: false
+        additionalProperties: true
 
 oneOf:
   - required:
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  9 19:30:29 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  9 Dec 2022 19:30:29 -0800
Subject: [PATCH v5 net-next 06/10] dt-bindings: net: dsa: qca8k: utilize shared dsa.yaml
In-Reply-To: <20221210033033.662553-1-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
Message-ID: <20221210033033.662553-7-colin.foster@in-advantage.com>

The dsa.yaml binding contains duplicated bindings for address and size
cells, as well as the reference to dsa-port.yaml. Instead of duplicating
this information, remove the reference to dsa-port.yaml and include the
full reference to dsa.yaml.

Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Suggested-by: Vladimir Oltean <olteanv at gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
Reviewed-by: Rob Herring <robh at kernel.org>
---

v4 -> v5
  * Add Rob Reviewed

v3 -> v4
  * Add Reviewed tag
  * Remove unnecessary blank line deletion

v2 -> v3
  * Remove #address-cells and #size-cells from v2. The examples were
    incorrect and fixed elsewhere.
  * Remove erroneous unevaluatedProperties: true under Ethernet Port.
  * Add back ref: dsa-port.yaml#.

v1 -> v2
  * Add #address-cells and #size-cells to the switch layer. They aren't
    part of dsa.yaml.
  * Add unevaluatedProperties: true to the ethernet-port layer so it can
    correctly read properties from dsa.yaml.

---
 Documentation/devicetree/bindings/net/dsa/qca8k.yaml | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/qca8k.yaml b/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
index 6fc9bc985726..389892592aac 100644
--- a/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/qca8k.yaml
@@ -66,15 +66,11 @@ properties:
                  With the legacy mapping the reg corresponding to the internal
                  mdio is the switch reg with an offset of -1.
 
+$ref: "dsa.yaml#"
+
 patternProperties:
   "^(ethernet-)?ports$":
     type: object
-    properties:
-      '#address-cells':
-        const: 1
-      '#size-cells':
-        const: 0
-
     patternProperties:
       "^(ethernet-)?port@[0-6]$":
         type: object
@@ -116,7 +112,7 @@ required:
   - compatible
   - reg
 
-additionalProperties: true
+unevaluatedProperties: false
 
 examples:
   - |
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  9 19:30:30 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  9 Dec 2022 19:30:30 -0800
Subject: [PATCH v5 net-next 07/10] dt-bindings: net: dsa: mediatek,mt7530: remove unnecessary dsa-port reference
In-Reply-To: <20221210033033.662553-1-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
Message-ID: <20221210033033.662553-8-colin.foster@in-advantage.com>

dsa.yaml contains a reference to dsa-port.yaml, so a duplicate reference to
the binding isn't necessary. Remove this unnecessary reference.

Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Suggested-by: Vladimir Oltean <olteanv at gmail.com>
Reviewed-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
Reviewed-by: Rob Herring <robh at kernel.org>
---

v4 -> v5
  * Add Rob reviewed tag

v3 -> v4
  * Add Florian Reviewed tag

v2 -> v3
  * Keep "unevaluatedProperties: false" under the switch ports node.

v1 -> v2
  * Add Reviewed-by

---
 Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
index 20312f5d1944..08667bff74a5 100644
--- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
@@ -165,7 +165,6 @@ patternProperties:
               for user ports.
 
         allOf:
-          - $ref: dsa-port.yaml#
           - if:
               required: [ ethernet ]
             then:
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  9 19:30:31 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  9 Dec 2022 19:30:31 -0800
Subject: [PATCH v5 net-next 08/10] dt-bindings: net: add generic ethernet-switch
In-Reply-To: <20221210033033.662553-1-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
Message-ID: <20221210033033.662553-9-colin.foster@in-advantage.com>

The dsa.yaml bindings had references that can apply to non-dsa switches. To
prevent duplication of this information, keep the dsa-specific information
inside dsa.yaml and move the remaining generic information to the newly
created ethernet-switch.yaml.

Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Suggested-by: Vladimir Oltean <olteanv at gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
Reviewed-by: Rob Herring <robh at kernel.org>
---

v4 -> v5
  * Add Rob Reviewed tag
  * Remove "^(ethernet-)?switch(@.*)?$" from dsa.yaml in this patch, instead
    of dt-bindings: net: dsa: allow additional ethernet-port properties
  * Change Vivien to Vladimir to sync with MAINTAINERS
  * Remove quotes around ref: /schemas/net/ethernet-switch.yaml#

v3 -> v4
  * Update ethernet-ports and ethernet-port nodes to match what the new
    dsa.yaml has. Namely:
      "unevaluatedProperties: false" instead of "additionalProperties: true"
      "additionalProperties: true" instead of "unevaluatedProperties: true"
    for ethernet-ports and ethernet-port, respectively.
  * Add Florian Reviewed tag

v2 -> v3
  * Change ethernet-switch.yaml title from "Ethernet Switch Device
    Tree Bindings" to "Generic Ethernet Switch"
  * Rework ethernet-switch.yaml description
  * Add base defs structure for switches that don't have any additional
    properties.
  * Add "additionalProperties: true" under "^(ethernet-)?ports$" node
  * Correct port reference from /schemas/net/dsa/dsa-port.yaml# to
    ethernet-controller.yaml#

v1 -> v2
  * No net change, but deletions from dsa.yaml included the changes for
    "addionalProperties: true" under ports and "unevaluatedProperties:
    true" under port.

---
 .../devicetree/bindings/net/dsa/dsa.yaml      | 31 +--------
 .../bindings/net/ethernet-switch.yaml         | 66 +++++++++++++++++++
 MAINTAINERS                                   |  1 +
 3 files changed, 69 insertions(+), 29 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/net/ethernet-switch.yaml

diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
index 98a79be3bffe..4a90168b15b7 100644
--- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
@@ -18,10 +18,9 @@ description:
 
 select: false
 
-properties:
-  $nodename:
-    pattern: "^(ethernet-)?switch(@.*)?$"
+$ref: /schemas/net/ethernet-switch.yaml#
 
+properties:
   dsa,member:
     minItems: 2
     maxItems: 2
@@ -32,32 +31,6 @@ properties:
       (single device hanging off a CPU port) must not specify this property
     $ref: /schemas/types.yaml#/definitions/uint32-array
 
-patternProperties:
-  "^(ethernet-)?ports$":
-    type: object
-    properties:
-      '#address-cells':
-        const: 1
-      '#size-cells':
-        const: 0
-
-    unevaluatedProperties: false
-
-    patternProperties:
-      "^(ethernet-)?port@[0-9]+$":
-        type: object
-        description: Ethernet switch ports
-
-        $ref: dsa-port.yaml#
-
-        additionalProperties: true
-
-oneOf:
-  - required:
-      - ports
-  - required:
-      - ethernet-ports
-
 additionalProperties: true
 
 $defs:
diff --git a/Documentation/devicetree/bindings/net/ethernet-switch.yaml b/Documentation/devicetree/bindings/net/ethernet-switch.yaml
new file mode 100644
index 000000000000..2466d05f9a6f
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/ethernet-switch.yaml
@@ -0,0 +1,66 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/ethernet-switch.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Generic Ethernet Switch
+
+maintainers:
+  - Andrew Lunn <andrew at lunn.ch>
+  - Florian Fainelli <f.fainelli at gmail.com>
+  - Vladimir Oltean <olteanv at gmail.com>
+
+description:
+  Ethernet switches are multi-port Ethernet controllers. Each port has
+  its own number and is represented as its own Ethernet controller.
+  The minimum required functionality is to pass packets to software.
+  They may or may not be able to forward packets automonously between
+  ports.
+
+select: false
+
+properties:
+  $nodename:
+    pattern: "^(ethernet-)?switch(@.*)?$"
+
+patternProperties:
+  "^(ethernet-)?ports$":
+    type: object
+    unevaluatedProperties: false
+
+    properties:
+      '#address-cells':
+        const: 1
+      '#size-cells':
+        const: 0
+
+    patternProperties:
+      "^(ethernet-)?port@[0-9]+$":
+        type: object
+        description: Ethernet switch ports
+
+        $ref: ethernet-controller.yaml#
+
+        additionalProperties: true
+
+oneOf:
+  - required:
+      - ports
+  - required:
+      - ethernet-ports
+
+additionalProperties: true
+
+$defs:
+  base:
+    description: An ethernet switch without any extra port properties
+    $ref: '#/'
+
+    patternProperties:
+      "^(ethernet-)?port@[0-9]+$":
+        description: Ethernet switch ports
+        $ref: ethernet-controller.yaml#
+        unevaluatedProperties: false
+
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index 52aeb86c1167..d574cae901b3 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -14337,6 +14337,7 @@ M:	Florian Fainelli <f.fainelli at gmail.com>
 M:	Vladimir Oltean <olteanv at gmail.com>
 S:	Maintained
 F:	Documentation/devicetree/bindings/net/dsa/
+F:	Documentation/devicetree/bindings/net/ethernet-switch.yaml
 F:	drivers/net/dsa/
 F:	include/linux/dsa/
 F:	include/linux/platform_data/dsa.h
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  9 19:30:32 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  9 Dec 2022 19:30:32 -0800
Subject: [PATCH v5 net-next 09/10] dt-bindings: net: add generic ethernet-switch-port binding
In-Reply-To: <20221210033033.662553-1-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
Message-ID: <20221210033033.662553-10-colin.foster@in-advantage.com>

The dsa-port.yaml binding had several references that can be common to all
ethernet ports, not just dsa-specific ones. Break out the generic bindings
to ethernet-switch-port.yaml they can be used by non-dsa drivers.

Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Suggested-by: Vladimir Oltean <olteanv at gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
Reviewed-by: Rob Herring <robh at kernel.org>
---

v4 -> v5
  * Add Rob Reviewed tag
  * Change Vivien to Vladimir to match MAINTAINERS
  * Capitalize all words in title line (Generic DSA Switch Port)
  * Add better description of an Ethernet switch port

v3 -> v4
  * Add Florian Reviewed tag

v2 -> v3
  * Change dsa-port title from "DSA Switch port Device Tree Bindings"
    to "Generic DSA Switch port"
  * Add reference to ethernet-switch-port.yaml# in dsa-port.yaml
  * Change title of ethernet-switch-port.yaml from "Ethernet Switch
    port Device Tree Bindings" to "Generic Ethernet Switch port"
  * Remove most properties from ethernet-switch-port.yaml. They're
    all in ethernet-controller, and are all allowed.
  * ethernet-switch.yaml now only references ethernet-switch-port.yaml#
    under the port node.

v1 -> v2
  * Remove accidental addition of
    "$ref: /schemas/net/ethernet-switch-port.yaml" which should be kept
    out of dsa-port so that it doesn't get referenced multiple times
    through both ethernet-switch and dsa-port.

---
 .../devicetree/bindings/net/dsa/dsa-port.yaml | 27 +++----------------
 .../bindings/net/ethernet-switch-port.yaml    | 25 +++++++++++++++++
 .../bindings/net/ethernet-switch.yaml         |  6 +----
 MAINTAINERS                                   |  1 +
 4 files changed, 31 insertions(+), 28 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/net/ethernet-switch-port.yaml

diff --git a/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml b/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
index 2b8317911bef..8a29b4c140fb 100644
--- a/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
@@ -4,7 +4,7 @@
 $id: http://devicetree.org/schemas/net/dsa/dsa-port.yaml#
 $schema: http://devicetree.org/meta-schemas/core.yaml#
 
-title: Ethernet Switch port Device Tree Bindings
+title: Generic DSA Switch Port
 
 maintainers:
   - Andrew Lunn <andrew at lunn.ch>
@@ -12,10 +12,10 @@ maintainers:
   - Vladimir Oltean <olteanv at gmail.com>
 
 description:
-  Ethernet switch port Description
+  An Ethernet switch port is a component of a switch that manages one MAC, and
+  can pass Ethernet frames.
 
-allOf:
-  - $ref: /schemas/net/ethernet-controller.yaml#
+$ref: /schemas/net/ethernet-switch-port.yaml#
 
 properties:
   reg:
@@ -58,25 +58,6 @@ properties:
       - rtl8_4t
       - seville
 
-  phy-handle: true
-
-  phy-mode: true
-
-  fixed-link: true
-
-  mac-address: true
-
-  sfp: true
-
-  managed: true
-
-  rx-internal-delay-ps: true
-
-  tx-internal-delay-ps: true
-
-required:
-  - reg
-
 # CPU and DSA ports must have phylink-compatible link descriptions
 if:
   oneOf:
diff --git a/Documentation/devicetree/bindings/net/ethernet-switch-port.yaml b/Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
new file mode 100644
index 000000000000..126bc0c12cb8
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
@@ -0,0 +1,25 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/ethernet-switch-port.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Generic Ethernet Switch Port
+
+maintainers:
+  - Andrew Lunn <andrew at lunn.ch>
+  - Florian Fainelli <f.fainelli at gmail.com>
+  - Vladimir Oltean <olteanv at gmail.com>
+
+description:
+  Ethernet switch port Description
+
+$ref: ethernet-controller.yaml#
+
+properties:
+  reg:
+    description: Port number
+
+additionalProperties: true
+
+...
diff --git a/Documentation/devicetree/bindings/net/ethernet-switch.yaml b/Documentation/devicetree/bindings/net/ethernet-switch.yaml
index 2466d05f9a6f..a04f8ef744aa 100644
--- a/Documentation/devicetree/bindings/net/ethernet-switch.yaml
+++ b/Documentation/devicetree/bindings/net/ethernet-switch.yaml
@@ -40,10 +40,6 @@ patternProperties:
         type: object
         description: Ethernet switch ports
 
-        $ref: ethernet-controller.yaml#
-
-        additionalProperties: true
-
 oneOf:
   - required:
       - ports
@@ -60,7 +56,7 @@ $defs:
     patternProperties:
       "^(ethernet-)?port@[0-9]+$":
         description: Ethernet switch ports
-        $ref: ethernet-controller.yaml#
+        $ref: ethernet-switch-port.yaml#
         unevaluatedProperties: false
 
 ...
diff --git a/MAINTAINERS b/MAINTAINERS
index d574cae901b3..fe5f52c9864a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -14337,6 +14337,7 @@ M:	Florian Fainelli <f.fainelli at gmail.com>
 M:	Vladimir Oltean <olteanv at gmail.com>
 S:	Maintained
 F:	Documentation/devicetree/bindings/net/dsa/
+F:	Documentation/devicetree/bindings/net/ethernet-switch-port.yaml
 F:	Documentation/devicetree/bindings/net/ethernet-switch.yaml
 F:	drivers/net/dsa/
 F:	include/linux/dsa/
-- 
2.25.1



From colin.foster at in-advantage.com  Fri Dec  9 19:30:33 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Fri,  9 Dec 2022 19:30:33 -0800
Subject: [PATCH v5 net-next 10/10] dt-bindings: net: mscc,vsc7514-switch: utilize generic ethernet-switch.yaml
In-Reply-To: <20221210033033.662553-1-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
Message-ID: <20221210033033.662553-11-colin.foster@in-advantage.com>

Several bindings for ethernet switches are available for non-dsa switches
by way of ethernet-switch.yaml. Remove these duplicate entries and utilize
the common bindings for the VSC7514.

Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
Suggested-by: Vladimir Oltean <olteanv at gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
Reviewed-by: Rob Herring <robh at kernel.org>
---

v4 -> v5
  * Add Rob Reviewed tag

v3 -> v4
  * Add Florian Reviewed tag

v2 -> v3:
  * Reference ethernet-switch-port.yaml# instead of ethernet-controller
  * Undo the addition of "unevaluatedProperties: true" from v2. Those
    were only added because of my misunderstandings.
  * Keep #address-cells and #size-cells in the ports node.

v1 -> v2:
  * Fix "$ref: ethernet-switch.yaml" placement. Oops.
  * Add "unevaluatedProperties: true" to ethernet-ports layer so it
    can correctly read into ethernet-switch.yaml
  * Add "unevaluatedProperties: true" to ethernet-port layer so it can
    correctly read into ethernet-controller.yaml

---
 .../bindings/net/mscc,vsc7514-switch.yaml     | 31 ++-----------------
 1 file changed, 3 insertions(+), 28 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/mscc,vsc7514-switch.yaml b/Documentation/devicetree/bindings/net/mscc,vsc7514-switch.yaml
index ee0a504bdb24..5ffe831e59e4 100644
--- a/Documentation/devicetree/bindings/net/mscc,vsc7514-switch.yaml
+++ b/Documentation/devicetree/bindings/net/mscc,vsc7514-switch.yaml
@@ -18,10 +18,9 @@ description: |
   packets using CPU. Additionally, PTP is supported as well as FDMA for faster
   packet extraction/injection.
 
-properties:
-  $nodename:
-    pattern: "^switch@[0-9a-f]+$"
+$ref: ethernet-switch.yaml#
 
+properties:
   compatible:
     const: mscc,vsc7514-switch
 
@@ -100,35 +99,11 @@ properties:
 
     patternProperties:
       "^port@[0-9a-f]+$":
-        type: object
-        description: Ethernet ports handled by the switch
 
-        $ref: ethernet-controller.yaml#
+        $ref: ethernet-switch-port.yaml#
 
         unevaluatedProperties: false
 
-        properties:
-          reg:
-            description: Switch port number
-
-          phy-handle: true
-
-          phy-mode: true
-
-          fixed-link: true
-
-          mac-address: true
-
-        required:
-          - reg
-          - phy-mode
-
-        oneOf:
-          - required:
-              - phy-handle
-          - required:
-              - fixed-link
-
 required:
   - compatible
   - reg
-- 
2.25.1



From yunfei.dong at mediatek.com  Fri Dec  9 23:32:14 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Sat, 10 Dec 2022 15:32:14 +0800
Subject: [PATCH 1/5] media: mediatek: vcodec: add params to record lat and core lat_buf count
In-Reply-To: <20221210073218.17350-1-yunfei.dong@mediatek.com>
References: <20221210073218.17350-1-yunfei.dong@mediatek.com>
Message-ID: <20221210073218.17350-2-yunfei.dong@mediatek.com>

Using lat_buf to share decoder information between lat and core work
queue, adding params to record the buf count.

Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 .../platform/mediatek/vcodec/vdec_msg_queue.c | 32 ++++++++++++++++++-
 .../platform/mediatek/vcodec/vdec_msg_queue.h |  9 ++++++
 2 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
index dc2004790a47..af7ddba1923a 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
@@ -52,6 +52,30 @@ static struct list_head *vdec_get_buf_list(int hardware_index, struct vdec_lat_b
 	}
 }
 
+static void vdec_msg_queue_inc(struct vdec_msg_queue *msg_queue, int hardware_index)
+{
+	mutex_lock(&msg_queue->list_cnt_mutex);
+
+	if (hardware_index == MTK_VDEC_CORE)
+		atomic_inc(&msg_queue->core_list_cnt);
+	else
+		atomic_inc(&msg_queue->lat_list_cnt);
+
+	mutex_unlock(&msg_queue->list_cnt_mutex);
+}
+
+static void vdec_msg_queue_dec(struct vdec_msg_queue *msg_queue, int hardware_index)
+{
+	mutex_lock(&msg_queue->list_cnt_mutex);
+
+	if (hardware_index == MTK_VDEC_CORE)
+		atomic_dec(&msg_queue->core_list_cnt);
+	else
+		atomic_dec(&msg_queue->lat_list_cnt);
+
+	mutex_unlock(&msg_queue->list_cnt_mutex);
+}
+
 int vdec_msg_queue_qbuf(struct vdec_msg_queue_ctx *msg_ctx, struct vdec_lat_buf *buf)
 {
 	struct list_head *head;
@@ -72,6 +96,7 @@ int vdec_msg_queue_qbuf(struct vdec_msg_queue_ctx *msg_ctx, struct vdec_lat_buf
 		queue_work(buf->ctx->dev->core_workqueue,
 			   &buf->ctx->msg_queue.core_work);
 
+	vdec_msg_queue_inc(&buf->ctx->msg_queue, msg_ctx->hardware_index);
 	mtk_v4l2_debug(3, "enqueue buf type: %d addr: 0x%p num: %d",
 		       msg_ctx->hardware_index, buf, msg_ctx->ready_num);
 	spin_unlock(&msg_ctx->ready_lock);
@@ -127,6 +152,7 @@ struct vdec_lat_buf *vdec_msg_queue_dqbuf(struct vdec_msg_queue_ctx *msg_ctx)
 		return NULL;
 	}
 	list_del(head);
+	vdec_msg_queue_dec(&buf->ctx->msg_queue, msg_ctx->hardware_index);
 
 	msg_ctx->ready_num--;
 	mtk_v4l2_debug(3, "dqueue buf type:%d addr: 0x%p num: %d",
@@ -241,10 +267,14 @@ int vdec_msg_queue_init(struct vdec_msg_queue *msg_queue,
 
 	vdec_msg_queue_init_ctx(&msg_queue->lat_ctx, MTK_VDEC_LAT0);
 	INIT_WORK(&msg_queue->core_work, vdec_msg_queue_core_work);
+
+	atomic_set(&msg_queue->lat_list_cnt, 0);
+	atomic_set(&msg_queue->core_list_cnt, 0);
+	mutex_init(&msg_queue->list_cnt_mutex);
+
 	msg_queue->wdma_addr.size =
 		vde_msg_queue_get_trans_size(ctx->picinfo.buf_w,
 					     ctx->picinfo.buf_h);
-
 	err = mtk_vcodec_mem_alloc(ctx, &msg_queue->wdma_addr);
 	if (err) {
 		mtk_v4l2_err("failed to allocate wdma_addr buf");
diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
index c43d427f5f54..94e01a618c5a 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
@@ -72,6 +72,10 @@ struct vdec_lat_buf {
  * @wdma_wptr_addr: ube write point
  * @core_work: core hardware work
  * @lat_ctx: used to store lat buffer list
+ *
+ * @lat_list_cnt: used to record each instance lat list count
+ * @core_list_cnt: used to record each instance core list count
+ * @list_cnt_mutex: used to protect list count
  */
 struct vdec_msg_queue {
 	struct vdec_lat_buf lat_buf[NUM_BUFFER_COUNT];
@@ -82,6 +86,11 @@ struct vdec_msg_queue {
 
 	struct work_struct core_work;
 	struct vdec_msg_queue_ctx lat_ctx;
+
+	atomic_t lat_list_cnt;
+	atomic_t core_list_cnt;
+	/* Protects access to lat and core list cnt */
+	struct mutex list_cnt_mutex;
 };
 
 /**
-- 
2.18.0



From yunfei.dong at mediatek.com  Fri Dec  9 23:32:18 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Sat, 10 Dec 2022 15:32:18 +0800
Subject: [PATCH 5/5] media: mediatek: vcodec: remove unused lat_buf
In-Reply-To: <20221210073218.17350-1-yunfei.dong@mediatek.com>
References: <20221210073218.17350-1-yunfei.dong@mediatek.com>
Message-ID: <20221210073218.17350-6-yunfei.dong@mediatek.com>

Remove unused lat_buf from core list, or leading to core list access
NULL point.

Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 .../platform/mediatek/vcodec/vdec_msg_queue.c | 20 ++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
index 9bbbd3fa20eb..3f18eca7dbdd 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
@@ -185,7 +185,7 @@ bool vdec_msg_queue_wait_lat_buf_full(struct vdec_msg_queue *msg_queue)
 	struct vdec_lat_buf *buf, *tmp;
 	struct vdec_msg_queue_ctx *core_ctx;
 	long timeout_jiff;
-	int ret;
+	int ret, count = 0;
 
 	core_ctx = &msg_queue->ctx->dev->msg_queue_core_ctx;
 	spin_lock(&core_ctx->ready_lock);
@@ -209,8 +209,22 @@ bool vdec_msg_queue_wait_lat_buf_full(struct vdec_msg_queue *msg_queue)
 			       msg_queue->lat_ctx.ready_num);
 		return true;
 	}
-	mtk_v4l2_err("failed with lat buf isn't full: %d",
-		     msg_queue->lat_ctx.ready_num);
+
+	spin_lock(&core_ctx->ready_lock);
+	list_for_each_entry_safe(buf, tmp, &core_ctx->ready_queue, core_list) {
+		if (buf && buf->ctx == msg_queue->ctx) {
+			count++;
+			spin_lock(&msg_queue->lat_ctx.ready_lock);
+			list_del(&buf->core_list);
+			spin_unlock(&msg_queue->lat_ctx.ready_lock);
+		}
+	}
+	spin_unlock(&core_ctx->ready_lock);
+
+	mtk_v4l2_err("failed with lat buf isn't full: list(%d %d) count:%d",
+		     atomic_read(&msg_queue->lat_list_cnt),
+		     atomic_read(&msg_queue->core_list_cnt), count);
+
 	return false;
 }
 
-- 
2.18.0



From yunfei.dong at mediatek.com  Fri Dec  9 23:32:13 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Sat, 10 Dec 2022 15:32:13 +0800
Subject: [PATCH 0/5] media: mediatek: vcodec: Fix power_VideoCall test fail
Message-ID: <20221210073218.17350-1-yunfei.dong@mediatek.com>

Random getting below error message when test power_VideoCall/control.49_vp9:
pc : __list_del_entry_valid+0xb0/0xfc
lr : __list_del_entry_valid+0xac/0xfc
sp : ffffffc020f23ce0

The lat_buf in core list won't be deleted when one instance decode done.
Will access invalid released lat_buf list when queue work continue to decode.
Firstly, remove all unused lat_buf to the top of core list, making sure
these buffers can be decoded in highest priority; lastly, remove all unused
lat_buf when the instance is freed.

patch 1 add params to record lat and core lat_buf count.
patch 2 using each instance lat_buf count replace core ready list.
patch 3 move lat_buf to the top of core list.
patch 4 add core decode done event.
patch 5 remove unused lat_buf.
---
Yunfei Dong (5):
  media: mediatek: vcodec: add params to record lat and core lat_buf
    count
  media: mediatek: vcodec: using each instance lat_buf count replace
    core ready list
  media: mediatek: vcodec: move lat_buf to the top of core list
  media: mediatek: vcodec: add core decode done event
  media: mediatek: vcodec: remove unused lat_buf

 .../platform/mediatek/vcodec/vdec_msg_queue.c | 74 +++++++++++++++++--
 .../platform/mediatek/vcodec/vdec_msg_queue.h | 13 ++++
 2 files changed, 81 insertions(+), 6 deletions(-)

-- 
2.18.0



From yunfei.dong at mediatek.com  Fri Dec  9 23:32:16 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Sat, 10 Dec 2022 15:32:16 +0800
Subject: [PATCH 3/5] media: mediatek: vcodec: move lat_buf to the top of core list
In-Reply-To: <20221210073218.17350-1-yunfei.dong@mediatek.com>
References: <20221210073218.17350-1-yunfei.dong@mediatek.com>
Message-ID: <20221210073218.17350-4-yunfei.dong@mediatek.com>

Current instance will decode done when begin to wait lat buf full,
move the lat_buf of current instance to the top of core list to make
sure current instance's lat_buf will be used firstly.

Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 .../platform/mediatek/vcodec/vdec_msg_queue.c    | 16 ++++++++++++++++
 .../platform/mediatek/vcodec/vdec_msg_queue.h    |  2 ++
 2 files changed, 18 insertions(+)

diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
index 2b88065d4d2a..6275536d5063 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
@@ -182,9 +182,24 @@ void vdec_msg_queue_update_ube_wptr(struct vdec_msg_queue *msg_queue, uint64_t u
 
 bool vdec_msg_queue_wait_lat_buf_full(struct vdec_msg_queue *msg_queue)
 {
+	struct vdec_lat_buf *buf, *tmp;
+	struct vdec_msg_queue_ctx *core_ctx;
 	long timeout_jiff;
 	int ret;
 
+	core_ctx = &msg_queue->ctx->dev->msg_queue_core_ctx;
+	spin_lock(&core_ctx->ready_lock);
+	list_for_each_entry_safe(buf, tmp, &core_ctx->ready_queue, core_list) {
+		if (buf && buf->ctx == msg_queue->ctx) {
+			spin_lock(&msg_queue->lat_ctx.ready_lock);
+			list_move(&buf->core_list, &core_ctx->ready_queue);
+			spin_unlock(&msg_queue->lat_ctx.ready_lock);
+			queue_work(buf->ctx->dev->core_workqueue,
+				   &buf->ctx->msg_queue.core_work);
+		}
+	}
+	spin_unlock(&core_ctx->ready_lock);
+
 	timeout_jiff = msecs_to_jiffies(1000 * (NUM_BUFFER_COUNT + 2));
 	ret = wait_event_timeout(msg_queue->lat_ctx.ready_to_use,
 				 msg_queue->lat_ctx.ready_num == NUM_BUFFER_COUNT,
@@ -268,6 +283,7 @@ int vdec_msg_queue_init(struct vdec_msg_queue *msg_queue,
 	vdec_msg_queue_init_ctx(&msg_queue->lat_ctx, MTK_VDEC_LAT0);
 	INIT_WORK(&msg_queue->core_work, vdec_msg_queue_core_work);
 
+	msg_queue->ctx = ctx;
 	atomic_set(&msg_queue->lat_list_cnt, 0);
 	atomic_set(&msg_queue->core_list_cnt, 0);
 	mutex_init(&msg_queue->list_cnt_mutex);
diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
index 94e01a618c5a..53ad05396c8c 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
@@ -72,6 +72,7 @@ struct vdec_lat_buf {
  * @wdma_wptr_addr: ube write point
  * @core_work: core hardware work
  * @lat_ctx: used to store lat buffer list
+ * @ctx: point to mtk_vcodec_ctx
  *
  * @lat_list_cnt: used to record each instance lat list count
  * @core_list_cnt: used to record each instance core list count
@@ -86,6 +87,7 @@ struct vdec_msg_queue {
 
 	struct work_struct core_work;
 	struct vdec_msg_queue_ctx lat_ctx;
+	struct mtk_vcodec_ctx *ctx;
 
 	atomic_t lat_list_cnt;
 	atomic_t core_list_cnt;
-- 
2.18.0



From yunfei.dong at mediatek.com  Fri Dec  9 23:32:15 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Sat, 10 Dec 2022 15:32:15 +0800
Subject: [PATCH 2/5] media: mediatek: vcodec: using each instance lat_buf count replace core ready list
In-Reply-To: <20221210073218.17350-1-yunfei.dong@mediatek.com>
References: <20221210073218.17350-1-yunfei.dong@mediatek.com>
Message-ID: <20221210073218.17350-3-yunfei.dong@mediatek.com>

Core Hardware decoder depends on each instance lat_buf count,
calling queue_work decode again when the lat_buf count of each instance
isn't zero.

Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
index af7ddba1923a..2b88065d4d2a 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
@@ -247,7 +247,7 @@ static void vdec_msg_queue_core_work(struct work_struct *work)
 	mtk_vcodec_dec_disable_hardware(ctx, MTK_VDEC_CORE);
 	vdec_msg_queue_qbuf(&ctx->msg_queue.lat_ctx, lat_buf);
 
-	if (!list_empty(&dev->msg_queue_core_ctx.ready_queue)) {
+	if (atomic_read(&lat_buf->ctx->msg_queue.core_list_cnt)) {
 		mtk_v4l2_debug(3, "re-schedule to decode for core: %d",
 			       dev->msg_queue_core_ctx.ready_num);
 		queue_work(dev->core_workqueue, &msg_queue->core_work);
-- 
2.18.0



From yunfei.dong at mediatek.com  Fri Dec  9 23:32:17 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Sat, 10 Dec 2022 15:32:17 +0800
Subject: [PATCH 4/5] media: mediatek: vcodec: add core decode done event
In-Reply-To: <20221210073218.17350-1-yunfei.dong@mediatek.com>
References: <20221210073218.17350-1-yunfei.dong@mediatek.com>
Message-ID: <20221210073218.17350-5-yunfei.dong@mediatek.com>

Need to make sure core decode done before current instance is free.

Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c | 4 +++-
 drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h | 2 ++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
index 6275536d5063..9bbbd3fa20eb 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
@@ -201,7 +201,7 @@ bool vdec_msg_queue_wait_lat_buf_full(struct vdec_msg_queue *msg_queue)
 	spin_unlock(&core_ctx->ready_lock);
 
 	timeout_jiff = msecs_to_jiffies(1000 * (NUM_BUFFER_COUNT + 2));
-	ret = wait_event_timeout(msg_queue->lat_ctx.ready_to_use,
+	ret = wait_event_timeout(msg_queue->ctx->msg_queue.core_dec_done,
 				 msg_queue->lat_ctx.ready_num == NUM_BUFFER_COUNT,
 				 timeout_jiff);
 	if (ret) {
@@ -262,6 +262,7 @@ static void vdec_msg_queue_core_work(struct work_struct *work)
 	mtk_vcodec_dec_disable_hardware(ctx, MTK_VDEC_CORE);
 	vdec_msg_queue_qbuf(&ctx->msg_queue.lat_ctx, lat_buf);
 
+	wake_up_all(&ctx->msg_queue.core_dec_done);
 	if (atomic_read(&lat_buf->ctx->msg_queue.core_list_cnt)) {
 		mtk_v4l2_debug(3, "re-schedule to decode for core: %d",
 			       dev->msg_queue_core_ctx.ready_num);
@@ -287,6 +288,7 @@ int vdec_msg_queue_init(struct vdec_msg_queue *msg_queue,
 	atomic_set(&msg_queue->lat_list_cnt, 0);
 	atomic_set(&msg_queue->core_list_cnt, 0);
 	mutex_init(&msg_queue->list_cnt_mutex);
+	init_waitqueue_head(&msg_queue->core_dec_done);
 
 	msg_queue->wdma_addr.size =
 		vde_msg_queue_get_trans_size(ctx->picinfo.buf_w,
diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
index 53ad05396c8c..0944b6436fb6 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
@@ -77,6 +77,7 @@ struct vdec_lat_buf {
  * @lat_list_cnt: used to record each instance lat list count
  * @core_list_cnt: used to record each instance core list count
  * @list_cnt_mutex: used to protect list count
+ * @core_dec_done: core work queue decode done event
  */
 struct vdec_msg_queue {
 	struct vdec_lat_buf lat_buf[NUM_BUFFER_COUNT];
@@ -93,6 +94,7 @@ struct vdec_msg_queue {
 	atomic_t core_list_cnt;
 	/* Protects access to lat and core list cnt */
 	struct mutex list_cnt_mutex;
+	wait_queue_head_t core_dec_done;
 };
 
 /**
-- 
2.18.0



From u.kleine-koenig at pengutronix.de  Sat Dec 10 01:18:33 2022
From: u.kleine-koenig at pengutronix.de (Uwe =?utf-8?Q?Kleine-K=C3=B6nig?=)
Date: Sat, 10 Dec 2022 10:18:33 +0100
Subject: [PATCH v2 00/11] pwm: Allow .get_state to fail
In-Reply-To: <Y5OtCjQOQjjltGPa@smile.fi.intel.com>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
 <Y5OtCjQOQjjltGPa@smile.fi.intel.com>
Message-ID: <20221210091833.vdfir63nq4kpj5cm@pengutronix.de>

Hello Andy,

On Fri, Dec 09, 2022 at 11:47:54PM +0200, Andy Shevchenko wrote:
> On Wed, Nov 30, 2022 at 04:21:37PM +0100, Uwe Kleine-K?nig wrote:
> > In v1 Thierry had the concern:
> > 
> > | That raises the question about what to do in these cases. If we return
> > | an error, that could potentially throw off consumers. So perhaps the
> > | closest would be to return a disabled PWM? Or perhaps it'd be up to the
> > | consumer to provide some fallback configuration for invalidly configured
> > | or unconfigured PWMs.
> > 
> > .get_state() is only called in pwm_device_request on a pwm_state that a
> > consumer might see. Before my series a consumer might have seen a
> > partial modified pwm_state (because .get_state() might have modified
> > .period, then stumbled and returned silently). The last patch ensures
> > that this partial modification isn't given out to the consumer. Instead
> > they now see the same as if .get_state wasn't implemented at all.
> 
> I'm wondering why we didn't see a compiler warning about mistyped function
> prototypes in some drivers.

I don't understand where you expected a warning. Care to elaborate?

> P.S. The series is good thing to do, thank you.

It's already too late for an ack, the series is already in Thierry's
tree.

Best regards
Uwe
 
-- 
Pengutronix e.K.                           | Uwe Kleine-K?nig            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221210/05467229/attachment.sig>

From kurt at linutronix.de  Sat Dec 10 02:18:29 2022
From: kurt at linutronix.de (Kurt Kanzenbach)
Date: Sat, 10 Dec 2022 11:18:29 +0100
Subject: [PATCH v5 net-next 01/10] dt-bindings: dsa: sync with maintainers
In-Reply-To: <20221210033033.662553-2-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-2-colin.foster@in-advantage.com>
Message-ID: <87o7sbh896.fsf@kurt>

On Fri Dec 09 2022, Colin Foster wrote:
> The MAINTAINERS file has Andrew Lunn, Florian Fainelli, and Vladimir Oltean
> listed as the maintainers for generic dsa bindings. Update dsa.yaml and
> dsa-port.yaml accordingly.
>
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
>
> ---
>
> v5
>   * New patch
>
> ---
>  Documentation/devicetree/bindings/net/dsa/dsa-port.yaml | 2 +-
>  Documentation/devicetree/bindings/net/dsa/dsa.yaml      | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml b/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
> index 9abb8eba5fad..2b8317911bef 100644
> --- a/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/dsa-port.yaml
> @@ -9,7 +9,7 @@ title: Ethernet Switch port Device Tree Bindings
>  maintainers:
>    - Andrew Lunn <andrew at lunn.ch>
>    - Florian Fainelli <f.fainelli at gmail.com>
> -  - Vivien Didelot <vivien.didelot at gmail.com>
> +  - Vladimir Oltean <olteanv at gmail.com>
>  
>  description:
>    Ethernet switch port Description
> diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> index b9d48e357e77..5efc0ee8edcb 100644
> --- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> @@ -9,7 +9,7 @@ title: Ethernet Switch Device Tree Bindings
>  maintainers:
>    - Andrew Lunn <andrew at lunn.ch>
>    - Florian Fainelli <f.fainelli at gmail.com>
> -  - Vivien Didelot <vivien.didelot at gmail.com>
> +  - Vladimir Oltean <olteanv at gmail.com>

You can update the hellcreek binding as well. Thanks.

diff --git a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
index 73b774eadd0b..1d7dab31457d 100644
--- a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
@@ -12,7 +12,7 @@ allOf:
 maintainers:
   - Andrew Lunn <andrew at lunn.ch>
   - Florian Fainelli <f.fainelli at gmail.com>
-  - Vivien Didelot <vivien.didelot at gmail.com>
+  - Vladimir Oltean <olteanv at gmail.com>
   - Kurt Kanzenbach <kurt at linutronix.de>
 
 description:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 861 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221210/7977bc0d/attachment-0001.sig>

From arinc.unal at arinc9.com  Sat Dec 10 08:24:42 2022
From: arinc.unal at arinc9.com (=?UTF-8?B?QXLEsW7DpyDDnE5BTA==?=)
Date: Sat, 10 Dec 2022 19:24:42 +0300
Subject: [PATCH v5 net-next 04/10] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <20221210033033.662553-5-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-5-colin.foster@in-advantage.com>
Message-ID: <1df417b5-a924-33d4-a302-eb526f7124b4@arinc9.com>

On 10.12.2022 06:30, Colin Foster wrote:
> DSA switches can fall into one of two categories: switches where all ports
> follow standard '(ethernet-)?port' properties, and switches that have
> additional properties for the ports.
> 
> The scenario where DSA ports are all standardized can be handled by
> switches with a reference to the new 'dsa.yaml#/$defs/ethernet-ports'.
> 
> The scenario where DSA ports require additional properties can reference
> '$dsa.yaml#' directly. This will allow switches to reference these standard
> definitions of the DSA switch, but add additional properties under the port
> nodes.
> 
> Suggested-by: Rob Herring <robh at kernel.org>
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Reviewed-by: Linus Walleij <linus.walleij at linaro.org>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> Reviewed-by: Rob Herring <robh at kernel.org>
> Acked-by: Alvin ?ipraga <alsi at bang-olufsen.dk> # realtek
> Acked-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
> ---
> 
> v4 -> v5
>    * Add Rob Reviewed, Ar?n? Acked
>    * Defer the removal of "^(ethernet-)?switch(@.*)?$" in dsa.yaml until a
>      later patch
>    * Undo the move of ethernet switch ports description in mediatek,mt7530.yaml
>    * Fix typos in commit message
> 
> v3 -> v4
>    * Rename "$defs/base" to "$defs/ethernet-ports" to avoid implication of a
>      "base class" and fix commit message accordingly
>    * Add the following to the common etherent-ports node:
>        "additionalProperties: false"
>        "#address-cells" property
>        "#size-cells" property
>    * Fix "etherenet-ports@[0-9]+" to correctly be "ethernet-port@[0-9]+"
>    * Remove unnecessary newline
>    * Apply changes to mediatek,mt7530.yaml that were previously in a separate patch
>    * Add Reviewed and Acked tags
> 
> v3
>    * New patch
> 
> ---
>   .../bindings/net/dsa/arrow,xrs700x.yaml       |  2 +-
>   .../devicetree/bindings/net/dsa/brcm,b53.yaml |  2 +-
>   .../devicetree/bindings/net/dsa/dsa.yaml      | 22 +++++++++++++++++++
>   .../net/dsa/hirschmann,hellcreek.yaml         |  2 +-
>   .../bindings/net/dsa/mediatek,mt7530.yaml     |  5 +----
>   .../bindings/net/dsa/microchip,ksz.yaml       |  2 +-
>   .../bindings/net/dsa/microchip,lan937x.yaml   |  2 +-
>   .../bindings/net/dsa/mscc,ocelot.yaml         |  2 +-
>   .../bindings/net/dsa/nxp,sja1105.yaml         |  2 +-
>   .../devicetree/bindings/net/dsa/realtek.yaml  |  2 +-
>   .../bindings/net/dsa/renesas,rzn1-a5psw.yaml  |  2 +-
>   11 files changed, 32 insertions(+), 13 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> index 259a0c6547f3..5888e3a0169a 100644
> --- a/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
> @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
>   title: Arrow SpeedChips XRS7000 Series Switch Device Tree Bindings
>   
>   allOf:
> -  - $ref: dsa.yaml#
> +  - $ref: dsa.yaml#/$defs/ethernet-ports
>   
>   maintainers:
>     - George McCollister <george.mccollister at gmail.com>
> diff --git a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> index 1219b830b1a4..5bef4128d175 100644
> --- a/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
> @@ -66,7 +66,7 @@ required:
>     - reg
>   
>   allOf:
> -  - $ref: dsa.yaml#
> +  - $ref: dsa.yaml#/$defs/ethernet-ports
>     - if:
>         properties:
>           compatible:
> diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.yaml b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> index 5efc0ee8edcb..9375cdcfbf96 100644
> --- a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> @@ -58,4 +58,26 @@ oneOf:
>   
>   additionalProperties: true
>   
> +$defs:
> +  ethernet-ports:
> +    description: A DSA switch without any extra port properties
> +    $ref: '#/'
> +
> +    patternProperties:
> +      "^(ethernet-)?ports$":
> +        type: object
> +        additionalProperties: false
> +
> +        properties:
> +          '#address-cells':
> +            const: 1
> +          '#size-cells':
> +            const: 0
> +
> +        patternProperties:
> +          "^(ethernet-)?port@[0-9]+$":
> +            description: Ethernet switch ports
> +            $ref: dsa-port.yaml#
> +            unevaluatedProperties: false

I've got moderate experience in json-schema but shouldn't you put 'type: 
object' here like you did for "^(ethernet-)?ports$"?

> +
>   ...
> diff --git a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> index 73b774eadd0b..748ef9983ce2 100644
> --- a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
>   title: Hirschmann Hellcreek TSN Switch Device Tree Bindings
>   
>   allOf:
> -  - $ref: dsa.yaml#
> +  - $ref: dsa.yaml#/$defs/ethernet-ports
>   
>   maintainers:
>     - Andrew Lunn <andrew at lunn.ch>
> diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> index f2e9ff3f580b..20312f5d1944 100644
> --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> @@ -157,9 +157,6 @@ patternProperties:
>       patternProperties:
>         "^(ethernet-)?port@[0-9]+$":
>           type: object

This line was being removed on the previous version. Must be related to 
above.

> -        description: Ethernet switch ports
> -
> -        unevaluatedProperties: false
>   
>           properties:
>             reg:

Ar?n?


From colin.foster at in-advantage.com  Sat Dec 10 10:02:43 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Sat, 10 Dec 2022 10:02:43 -0800
Subject: [PATCH v5 net-next 04/10] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <1df417b5-a924-33d4-a302-eb526f7124b4@arinc9.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-5-colin.foster@in-advantage.com>
 <1df417b5-a924-33d4-a302-eb526f7124b4@arinc9.com>
Message-ID: <Y5TJw+zcEDf2ItZ5@euler>

Hi Ar?n?,
On Sat, Dec 10, 2022 at 07:24:42PM +0300, Ar?n? ?NAL wrote:
> On 10.12.2022 06:30, Colin Foster wrote:
> > DSA a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> > @@ -58,4 +58,26 @@ oneOf:
> >   additionalProperties: true
> > +$defs:
> > +  ethernet-ports:
> > +    description: A DSA switch without any extra port properties
> > +    $ref: '#/'
> > +
> > +    patternProperties:
> > +      "^(ethernet-)?ports$":
> > +        type: object
> > +        additionalProperties: false
> > +
> > +        properties:
> > +          '#address-cells':
> > +            const: 1
> > +          '#size-cells':
> > +            const: 0
> > +
> > +        patternProperties:
> > +          "^(ethernet-)?port@[0-9]+$":
> > +            description: Ethernet switch ports
> > +            $ref: dsa-port.yaml#
> > +            unevaluatedProperties: false
> 
> I've got moderate experience in json-schema but shouldn't you put 'type:
> object' here like you did for "^(ethernet-)?ports$"?

I can't say for sure, but adding "type: object" here and removing it
from mediatek,mt7530.yaml still causes the same issue I mention below.

Rob's initial suggestion for this patch set (which was basically the
entire implementation... many thanks again Rob) can be found here:
https://lore.kernel.org/netdev/20221104200212.GA2315642-robh at kernel.org/

>From what I can tell, the omission of "type: object" here was
intentional. At the very least, it doesn't seem to have any effect on
warnings.

> 
> > +
> >   ...
> > diff --git a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> > index 73b774eadd0b..748ef9983ce2 100644
> > --- a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> > @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
> >   title: Hirschmann Hellcreek TSN Switch Device Tree Bindings
> >   allOf:
> > -  - $ref: dsa.yaml#
> > +  - $ref: dsa.yaml#/$defs/ethernet-ports
> >   maintainers:
> >     - Andrew Lunn <andrew at lunn.ch>
> > diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> > index f2e9ff3f580b..20312f5d1944 100644
> > --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> > @@ -157,9 +157,6 @@ patternProperties:
> >       patternProperties:
> >         "^(ethernet-)?port@[0-9]+$":
> >           type: object
> 
> This line was being removed on the previous version. Must be related to
> above.

Without the 'object' type here, I get the following warning:

Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml: patternProperties:^(ethernet-)?ports$:patternProperties:^(ethernet-)?port@[0-9]+$: 'anyOf' conditional failed, one must be fixed:
        'type' is a required property
        '$ref' is a required property
        hint: node schemas must have a type or $ref
        from schema $id: http://devicetree.org/meta-schemas/core.yaml#
./Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml: Error in referenced schema matching $id: http://devicetree.org/schemas/net/dsa/mediatek,mt7530.yaml
  SCHEMA  Documentation/devicetree/bindings/processed-schema.json
/home/colin/src/work/linux_vsc/linux-imx/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml: ignoring, error in schema: patternProperties: ^(ethernet-)?ports$: patternProperties: ^(ethernet-)?port@[0-9]+$


I'm testing this now and I'm noticing something is going on with the
"ref: dsa-port.yaml"


Everything seems to work fine (in that I don't see any warnings) when I
have this diff:


diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
index 20312f5d1944..db0122020f98 100644
--- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yam
@@ -156,8 +156,7 @@ patternProperties:

     patternProperties:
       "^(ethernet-)?port@[0-9]+$":
-        type: object
-
+        $ref: dsa-port.yaml#
         properties:
           reg:
             description:
@@ -165,7 +164,6 @@ patternProperties:
               for user ports.

         allOf:
-          - $ref: dsa-port.yaml#
           - if:
               required: [ ethernet ]
             then:



This one has me [still] scratching my head...



> 
> > -        description: Ethernet switch ports
> > -
> > -        unevaluatedProperties: false
> >           properties:
> >             reg:
> 
> Ar?n?


From andriy.shevchenko at intel.com  Sat Dec 10 12:57:16 2022
From: andriy.shevchenko at intel.com (Andy Shevchenko)
Date: Sat, 10 Dec 2022 22:57:16 +0200
Subject: [PATCH v2 00/11] pwm: Allow .get_state to fail
In-Reply-To: <20221210091833.vdfir63nq4kpj5cm@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
 <Y5OtCjQOQjjltGPa@smile.fi.intel.com>
 <20221210091833.vdfir63nq4kpj5cm@pengutronix.de>
Message-ID: <Y5TyrO5maz5VYic3@smile.fi.intel.com>

On Sat, Dec 10, 2022 at 10:18:33AM +0100, Uwe Kleine-K?nig wrote:
> On Fri, Dec 09, 2022 at 11:47:54PM +0200, Andy Shevchenko wrote:
> > On Wed, Nov 30, 2022 at 04:21:37PM +0100, Uwe Kleine-K?nig wrote:

...

> > I'm wondering why we didn't see a compiler warning about mistyped function
> > prototypes in some drivers.
> 
> I don't understand where you expected a warning. Care to elaborate?

intel-lpss.c has the prototype that returns an int. IIRC it was like this
before your patches. Now the above wondering passage...

-- 
With Best Regards,
Andy Shevchenko




From lkp at intel.com  Sat Dec 10 14:37:47 2022
From: lkp at intel.com (kernel test robot)
Date: Sun, 11 Dec 2022 06:37:47 +0800
Subject: [PATCH v3 11/12] ASoC: mediatek: mt8188: add machine driver with
 mt6359
In-Reply-To: <20221208033148.21866-12-trevor.wu@mediatek.com>
References: <20221208033148.21866-12-trevor.wu@mediatek.com>
Message-ID: <202212110628.KZNpCcSA-lkp@intel.com>

Hi Trevor,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on broonie-sound/for-next]
[also build test WARNING on broonie-spi/for-next tiwai-sound/for-next tiwai-sound/for-linus linus/master v6.1-rc8 next-20221208]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Trevor-Wu/ASoC-mediatek-Add-support-for-MT8188-SoC/20221208-113341
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
patch link:    https://lore.kernel.org/r/20221208033148.21866-12-trevor.wu%40mediatek.com
patch subject: [PATCH v3 11/12] ASoC: mediatek: mt8188: add machine driver with mt6359
config: microblaze-randconfig-s042-20221211
compiler: microblaze-linux-gcc (GCC) 12.1.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.4-39-gce1a6720-dirty
        # https://github.com/intel-lab-lkp/linux/commit/dab49faa06751591b72eafac0c4bf98de9882cfa
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Trevor-Wu/ASoC-mediatek-Add-support-for-MT8188-SoC/20221208-113341
        git checkout dab49faa06751591b72eafac0c4bf98de9882cfa
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=microblaze SHELL=/bin/bash sound/soc/mediatek/mt8188/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp at intel.com>

sparse warnings: (new ones prefixed by >>)
>> sound/soc/mediatek/mt8188/mt8188-mt6359.c:388:33: sparse: sparse: incorrect type in argument 3 (different base types) @@     expected unsigned int to @@     got restricted snd_pcm_format_t [usertype] @@
   sound/soc/mediatek/mt8188/mt8188-mt6359.c:388:33: sparse:     expected unsigned int to
   sound/soc/mediatek/mt8188/mt8188-mt6359.c:388:33: sparse:     got restricted snd_pcm_format_t [usertype]

vim +388 sound/soc/mediatek/mt8188/mt8188-mt6359.c

   382	
   383	static int mt8188_dptx_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
   384					       struct snd_pcm_hw_params *params)
   385	{
   386		/* fix BE i2s format to 32bit, clean param mask first */
   387		snd_mask_reset_range(hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT),
 > 388				     0, SNDRV_PCM_FORMAT_LAST);
   389	
   390		params_set_format(params, SNDRV_PCM_FORMAT_S32_LE);
   391	
   392		return 0;
   393	}
   394	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
-------------- next part --------------
#
# Automatically generated file; DO NOT EDIT.
# Linux/microblaze 6.1.0-rc6 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="microblaze-linux-gcc (GCC) 12.1.0"
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=120100
CONFIG_CLANG_VERSION=0
CONFIG_AS_IS_GNU=y
CONFIG_AS_VERSION=23800
CONFIG_LD_IS_BFD=y
CONFIG_LD_VERSION=23800
CONFIG_LLD_VERSION=0
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
CONFIG_PAHOLE_VERSION=123
CONFIG_CONSTRUCTORS=y
CONFIG_IRQ_WORK=y
CONFIG_BUILDTIME_TABLE_SORT=y

#
# General setup
#
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_COMPILE_TEST=y
# CONFIG_WERROR is not set
CONFIG_LOCALVERSION=""
CONFIG_BUILD_SALT=""
CONFIG_DEFAULT_INIT=""
CONFIG_DEFAULT_HOSTNAME="(none)"
# CONFIG_SYSVIPC is not set
# CONFIG_WATCH_QUEUE is not set
# CONFIG_CROSS_MEMORY_ATTACH is not set
# CONFIG_USELIB is not set

#
# IRQ subsystem
#
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_INJECTION=y
CONFIG_GENERIC_IRQ_CHIP=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_SIM=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_GENERIC_MSI_IRQ=y
CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
CONFIG_SPARSE_IRQ=y
CONFIG_GENERIC_IRQ_DEBUGFS=y
# end of IRQ subsystem

CONFIG_GENERIC_IRQ_MULTI_HANDLER=y
CONFIG_GENERIC_CLOCKEVENTS=y

#
# Timers subsystem
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
CONFIG_NO_HZ_IDLE=y
# CONFIG_NO_HZ is not set
CONFIG_HIGH_RES_TIMERS=y
# end of Timers subsystem

#
# BPF subsystem
#
# CONFIG_BPF_SYSCALL is not set
# end of BPF subsystem

CONFIG_PREEMPT_VOLUNTARY_BUILD=y
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set

#
# CPU/Task time and stats accounting
#
CONFIG_TICK_CPU_ACCOUNTING=y
CONFIG_PSI=y
CONFIG_PSI_DEFAULT_DISABLED=y
# end of CPU/Task time and stats accounting

CONFIG_CPU_ISOLATION=y

#
# RCU Subsystem
#
CONFIG_TINY_RCU=y
# CONFIG_RCU_EXPERT is not set
CONFIG_SRCU=y
CONFIG_TINY_SRCU=y
# end of RCU Subsystem

CONFIG_IKCONFIG=m
# CONFIG_IKCONFIG_PROC is not set
# CONFIG_IKHEADERS is not set
CONFIG_LOG_BUF_SHIFT=17
CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
CONFIG_PRINTK_INDEX=y
CONFIG_GENERIC_SCHED_CLOCK=y

#
# Scheduler features
#
# end of Scheduler features

CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_GCC12_NO_ARRAY_BOUNDS=y
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_CGROUPS=y
# CONFIG_CGROUP_FAVOR_DYNMODS is not set
# CONFIG_MEMCG is not set
# CONFIG_BLK_CGROUP is not set
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
# CONFIG_RT_GROUP_SCHED is not set
# CONFIG_CGROUP_PIDS is not set
CONFIG_CGROUP_RDMA=y
# CONFIG_CGROUP_FREEZER is not set
CONFIG_CGROUP_DEVICE=y
# CONFIG_CGROUP_CPUACCT is not set
# CONFIG_CGROUP_MISC is not set
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CHECKPOINT_RESTORE=y
# CONFIG_SCHED_AUTOGROUP is not set
# CONFIG_SYSFS_DEPRECATED is not set
CONFIG_RELAY=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_GZIP=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
CONFIG_RD_XZ=y
CONFIG_RD_LZO=y
# CONFIG_RD_LZ4 is not set
CONFIG_RD_ZSTD=y
CONFIG_BOOT_CONFIG=y
CONFIG_BOOT_CONFIG_EMBED=y
CONFIG_BOOT_CONFIG_EMBED_FILE=""
CONFIG_INITRAMFS_PRESERVE_MTIME=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_EXPERT=y
# CONFIG_MULTIUSER is not set
CONFIG_SGETMASK_SYSCALL=y
# CONFIG_SYSFS_SYSCALL is not set
# CONFIG_FHANDLE is not set
CONFIG_POSIX_TIMERS=y
CONFIG_PRINTK=y
# CONFIG_BUG is not set
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
# CONFIG_FUTEX is not set
# CONFIG_EPOLL is not set
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
# CONFIG_SHMEM is not set
CONFIG_AIO=y
CONFIG_IO_URING=y
# CONFIG_ADVISE_SYSCALLS is not set
# CONFIG_MEMBARRIER is not set
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
CONFIG_KALLSYMS_BASE_RELATIVE=y
CONFIG_KCMP=y
# CONFIG_EMBEDDED is not set
CONFIG_PC104=y

#
# Kernel Performance Events And Counters
#
# end of Kernel Performance Events And Counters

CONFIG_SYSTEM_DATA_VERIFICATION=y
CONFIG_PROFILING=y
# end of General setup

CONFIG_MICROBLAZE=y
# CONFIG_CPU_BIG_ENDIAN is not set
CONFIG_CPU_LITTLE_ENDIAN=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_GENERIC_CSUM=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y

#
# Platform options
#
# CONFIG_OPT_LIB_FUNCTION is not set

#
# Definitions for MICROBLAZE0
#
CONFIG_KERNEL_BASE_ADDR=0x90000000
CONFIG_XILINX_MICROBLAZE0_FAMILY="virtex5"
CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR=0
CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR=0
CONFIG_XILINX_MICROBLAZE0_USE_BARREL=0
CONFIG_XILINX_MICROBLAZE0_USE_DIV=0
CONFIG_XILINX_MICROBLAZE0_USE_HW_MUL=0
CONFIG_XILINX_MICROBLAZE0_USE_FPU=0
CONFIG_XILINX_MICROBLAZE0_HW_VER="7.10.d"
# end of Platform options

#
# Processor type and features
#
CONFIG_HZ_100=y
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=100
CONFIG_SCHED_HRTICK=y
CONFIG_MMU=y

#
# Boot options
#
# CONFIG_CMDLINE_BOOL is not set
# end of Processor type and features

#
# Kernel features
#
CONFIG_NR_CPUS=1
CONFIG_ADVANCED_OPTIONS=y
# CONFIG_HIGHMEM is not set
CONFIG_LOWMEM_SIZE_BOOL=y
CONFIG_LOWMEM_SIZE=0x30000000
CONFIG_MANUAL_RESET_VECTOR=0x0
# CONFIG_KERNEL_START_BOOL is not set
CONFIG_KERNEL_START=0xc0000000
CONFIG_TASK_SIZE_BOOL=y
CONFIG_TASK_SIZE=0x80000000
# CONFIG_MB_MANAGER is not set
# end of Kernel features

#
# Bus Options
#
# end of Bus Options

#
# General architecture-dependent options
#
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HAVE_DMA_CONTIGUOUS=y
CONFIG_GENERIC_IDLE_POLL_SETUP=y
CONFIG_ARCH_32BIT_OFF_T=y
CONFIG_MMU_GATHER_NO_RANGE=y
CONFIG_MMU_GATHER_MERGE_VMAS=y
CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
CONFIG_HAVE_ARCH_SECCOMP=y
# CONFIG_SECCOMP is not set
CONFIG_LTO_NONE=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_PGTABLE_LEVELS=2
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
CONFIG_HAVE_ARCH_HASH=y
CONFIG_CLONE_BACKWARDS3=y
CONFIG_COMPAT_32BIT_TIME=y
CONFIG_CPU_NO_EFFICIENT_FFS=y
# CONFIG_LOCK_EVENT_COUNTS is not set

#
# GCOV-based kernel profiling
#
CONFIG_GCOV_KERNEL=y
CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
# end of GCOV-based kernel profiling
# end of General architecture-dependent options

CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULE_SIG_FORMAT=y
CONFIG_MODULES=y
CONFIG_MODULE_FORCE_LOAD=y
# CONFIG_MODULE_UNLOAD is not set
CONFIG_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_FORCE=y
# CONFIG_MODULE_SIG_ALL is not set

#
# Do not forget to sign required modules with scripts/sign-file
#
# CONFIG_MODULE_SIG_SHA1 is not set
# CONFIG_MODULE_SIG_SHA224 is not set
CONFIG_MODULE_SIG_SHA256=y
# CONFIG_MODULE_SIG_SHA384 is not set
# CONFIG_MODULE_SIG_SHA512 is not set
CONFIG_MODULE_SIG_HASH="sha256"
# CONFIG_MODULE_COMPRESS_NONE is not set
# CONFIG_MODULE_COMPRESS_GZIP is not set
CONFIG_MODULE_COMPRESS_XZ=y
# CONFIG_MODULE_COMPRESS_ZSTD is not set
CONFIG_MODULE_DECOMPRESS=y
# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set
CONFIG_MODPROBE_PATH="/sbin/modprobe"
CONFIG_BLOCK=y
# CONFIG_BLOCK_LEGACY_AUTOLOAD is not set
CONFIG_BLK_DEV_BSG_COMMON=y
CONFIG_BLK_DEV_BSGLIB=y
# CONFIG_BLK_DEV_INTEGRITY is not set
# CONFIG_BLK_DEV_ZONED is not set
CONFIG_BLK_WBT=y
CONFIG_BLK_WBT_MQ=y
# CONFIG_BLK_DEBUG_FS is not set
# CONFIG_BLK_SED_OPAL is not set
CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
CONFIG_AIX_PARTITION=y
# CONFIG_OSF_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
CONFIG_ATARI_PARTITION=y
# CONFIG_MAC_PARTITION is not set
# CONFIG_MSDOS_PARTITION is not set
CONFIG_LDM_PARTITION=y
# CONFIG_LDM_DEBUG is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
CONFIG_SUN_PARTITION=y
# CONFIG_KARMA_PARTITION is not set
CONFIG_EFI_PARTITION=y
# CONFIG_SYSV68_PARTITION is not set
# CONFIG_CMDLINE_PARTITION is not set
# end of Partition Types

CONFIG_BLK_MQ_VIRTIO=y
CONFIG_BLOCK_HOLDER_DEPRECATED=y

#
# IO Schedulers
#
# CONFIG_MQ_IOSCHED_DEADLINE is not set
# CONFIG_MQ_IOSCHED_KYBER is not set
# CONFIG_IOSCHED_BFQ is not set
# end of IO Schedulers

CONFIG_ASN1=y
CONFIG_UNINLINE_SPIN_UNLOCK=y

#
# Executable file formats
#
CONFIG_BINFMT_ELF=y
CONFIG_ELFCORE=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
CONFIG_BINFMT_SCRIPT=y
CONFIG_BINFMT_MISC=m
CONFIG_COREDUMP=y
# end of Executable file formats

#
# Memory Management options
#
CONFIG_ARCH_NO_SWAP=y

#
# SLAB allocator options
#
CONFIG_SLAB=y
# CONFIG_SLUB is not set
# CONFIG_SLOB is not set
CONFIG_SLAB_MERGE_DEFAULT=y
CONFIG_SLAB_FREELIST_RANDOM=y
# CONFIG_SLAB_FREELIST_HARDENED is not set
# end of SLAB allocator options

CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
# CONFIG_COMPAT_BRK is not set
CONFIG_FLATMEM=y
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_COMPACTION=y
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
CONFIG_PAGE_REPORTING=y
CONFIG_MIGRATION=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_NEED_PER_CPU_KM=y
# CONFIG_CMA is not set
# CONFIG_IDLE_PAGE_TRACKING is not set
CONFIG_ZONE_DMA=y
# CONFIG_VM_EVENT_COUNTERS is not set
CONFIG_PERCPU_STATS=y
CONFIG_GUP_TEST=y
CONFIG_USERFAULTFD=y
# CONFIG_LRU_GEN is not set

#
# Data Access Monitoring
#
# CONFIG_DAMON is not set
# end of Data Access Monitoring
# end of Memory Management options

# CONFIG_NET is not set

#
# Device Drivers
#
CONFIG_HAVE_PCI=y
# CONFIG_PCI is not set
CONFIG_PCCARD=m
CONFIG_PCMCIA=m
# CONFIG_PCMCIA_LOAD_CIS is not set

#
# PC-card bridges
#

#
# Generic Driver Options
#
CONFIG_UEVENT_HELPER=y
CONFIG_UEVENT_HELPER_PATH=""
# CONFIG_DEVTMPFS is not set
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y

#
# Firmware loader
#
CONFIG_FW_LOADER=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_EXTRA_FIRMWARE=""
CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
CONFIG_FW_LOADER_COMPRESS=y
CONFIG_FW_LOADER_COMPRESS_XZ=y
# CONFIG_FW_LOADER_COMPRESS_ZSTD is not set
# CONFIG_FW_UPLOAD is not set
# end of Firmware loader

CONFIG_WANT_DEV_COREDUMP=y
# CONFIG_ALLOW_DEV_COREDUMP is not set
# CONFIG_DEBUG_DRIVER is not set
CONFIG_DEBUG_DEVRES=y
CONFIG_DEBUG_TEST_DRIVER_REMOVE=y
# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set
CONFIG_GENERIC_CPU_DEVICES=y
CONFIG_SOC_BUS=y
CONFIG_REGMAP=y
CONFIG_REGMAP_AC97=m
CONFIG_REGMAP_I2C=y
CONFIG_REGMAP_SPI=y
CONFIG_REGMAP_SPMI=m
CONFIG_REGMAP_W1=m
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
CONFIG_REGMAP_SCCB=y
CONFIG_REGMAP_SPI_AVMM=y
CONFIG_DMA_SHARED_BUFFER=y
# CONFIG_DMA_FENCE_TRACE is not set
# end of Generic Driver Options

#
# Bus devices
#
# CONFIG_ARM_INTEGRATOR_LM is not set
CONFIG_BT1_APB=y
# CONFIG_BT1_AXI is not set
CONFIG_MOXTET=m
CONFIG_HISILICON_LPC=y
# CONFIG_INTEL_IXP4XX_EB is not set
CONFIG_QCOM_EBI2=y
CONFIG_MHI_BUS=m
# CONFIG_MHI_BUS_DEBUG is not set
# CONFIG_MHI_BUS_EP is not set
# end of Bus devices

#
# Firmware Drivers
#

#
# ARM System Control and Management Interface Protocol
#
# CONFIG_ARM_SCMI_PROTOCOL is not set
CONFIG_ARM_SCMI_POWER_DOMAIN=y
CONFIG_ARM_SCMI_POWER_CONTROL=m
# end of ARM System Control and Management Interface Protocol

CONFIG_ARM_SCPI_POWER_DOMAIN=y
CONFIG_FIRMWARE_MEMMAP=y
CONFIG_QCOM_SCM=y
CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT=y
CONFIG_BCM47XX_NVRAM=y
# CONFIG_BCM47XX_SPROM is not set
CONFIG_TEE_BNXT_FW=m
CONFIG_FW_CS_DSP=m
CONFIG_GOOGLE_FIRMWARE=y
CONFIG_GOOGLE_COREBOOT_TABLE=m
CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
CONFIG_GOOGLE_VPD=m

#
# Tegra firmware driver
#
# end of Tegra firmware driver
# end of Firmware Drivers

CONFIG_GNSS=y
CONFIG_GNSS_SERIAL=y
CONFIG_GNSS_MTK_SERIAL=m
# CONFIG_GNSS_SIRF_SERIAL is not set
CONFIG_GNSS_UBX_SERIAL=y
CONFIG_GNSS_USB=m
# CONFIG_MTD is not set
CONFIG_DTC=y
CONFIG_OF=y
CONFIG_OF_UNITTEST=y
# CONFIG_OF_ALL_DTBS is not set
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_OF_KOBJ=y
CONFIG_OF_DYNAMIC=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_IRQ=y
CONFIG_OF_RESERVED_MEM=y
CONFIG_OF_RESOLVE=y
CONFIG_OF_OVERLAY=y
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
CONFIG_PARPORT=m
CONFIG_PARPORT_PC=m
# CONFIG_PARPORT_PC_FIFO is not set
# CONFIG_PARPORT_PC_SUPERIO is not set
CONFIG_PARPORT_PC_PCMCIA=m
CONFIG_PARPORT_AX88796=m
CONFIG_PARPORT_1284=y
CONFIG_PARPORT_NOT_PC=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_NULL_BLK=y
# CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION is not set
CONFIG_CDROM=m
CONFIG_PARIDE=m

#
# Parallel IDE high-level drivers
#
# CONFIG_PARIDE_PD is not set
CONFIG_PARIDE_PCD=m
CONFIG_PARIDE_PF=m
CONFIG_PARIDE_PT=m
CONFIG_PARIDE_PG=m

#
# Parallel IDE protocol modules
#
# CONFIG_PARIDE_ATEN is not set
CONFIG_PARIDE_BPCK=m
CONFIG_PARIDE_BPCK6=m
CONFIG_PARIDE_COMM=m
CONFIG_PARIDE_DSTR=m
CONFIG_PARIDE_FIT2=m
# CONFIG_PARIDE_FIT3 is not set
CONFIG_PARIDE_EPAT=m
CONFIG_PARIDE_EPATC8=y
# CONFIG_PARIDE_EPIA is not set
CONFIG_PARIDE_FRIQ=m
CONFIG_PARIDE_FRPW=m
CONFIG_PARIDE_KBIC=m
CONFIG_PARIDE_KTTI=m
CONFIG_PARIDE_ON20=m
CONFIG_PARIDE_ON26=m
# CONFIG_ZRAM is not set
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8

#
# DRBD disabled because PROC_FS or INET not selected
#
CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
# CONFIG_CDROM_PKTCDVD is not set
CONFIG_VIRTIO_BLK=y
CONFIG_BLK_DEV_UBLK=m

#
# NVME Support
#
CONFIG_NVME_COMMON=y
CONFIG_NVME_CORE=y
CONFIG_NVME_MULTIPATH=y
# CONFIG_NVME_VERBOSE_ERRORS is not set
CONFIG_NVME_FABRICS=y
CONFIG_NVME_FC=y
CONFIG_NVME_AUTH=y
# CONFIG_NVME_TARGET is not set
# end of NVME Support

#
# Misc devices
#
CONFIG_SENSORS_LIS3LV02D=y
# CONFIG_AD525X_DPOT is not set
CONFIG_DUMMY_IRQ=m
CONFIG_ICS932S401=m
CONFIG_ATMEL_SSC=y
# CONFIG_ENCLOSURE_SERVICES is not set
CONFIG_GEHC_ACHC=m
# CONFIG_HI6421V600_IRQ is not set
# CONFIG_QCOM_COINCELL is not set
CONFIG_QCOM_FASTRPC=m
# CONFIG_APDS9802ALS is not set
# CONFIG_ISL29003 is not set
CONFIG_ISL29020=m
CONFIG_SENSORS_TSL2550=m
CONFIG_SENSORS_BH1770=m
CONFIG_SENSORS_APDS990X=m
CONFIG_HMC6352=y
CONFIG_DS1682=y
CONFIG_LATTICE_ECP3_CONFIG=m
# CONFIG_SRAM is not set
# CONFIG_XILINX_SDFEC is not set
CONFIG_MISC_RTSX=y
CONFIG_HISI_HIKEY_USB=m
CONFIG_OPEN_DICE=y
CONFIG_VCPU_STALL_DETECTOR=m
CONFIG_C2PORT=m

#
# EEPROM support
#
# CONFIG_EEPROM_AT24 is not set
CONFIG_EEPROM_AT25=m
CONFIG_EEPROM_LEGACY=y
CONFIG_EEPROM_MAX6875=m
CONFIG_EEPROM_93CX6=y
CONFIG_EEPROM_93XX46=y
CONFIG_EEPROM_IDT_89HPESX=m
# CONFIG_EEPROM_EE1004 is not set
# end of EEPROM support

#
# Texas Instruments shared transport line discipline
#
# end of Texas Instruments shared transport line discipline

CONFIG_SENSORS_LIS3_SPI=y
# CONFIG_SENSORS_LIS3_I2C is not set
# CONFIG_ALTERA_STAPL is not set
CONFIG_ECHO=m
CONFIG_MISC_RTSX_USB=y
# CONFIG_UACCE is not set
CONFIG_PVPANIC=y
CONFIG_PVPANIC_MMIO=y
# end of Misc devices

#
# SCSI device support
#
CONFIG_SCSI_MOD=y
CONFIG_RAID_ATTRS=m
CONFIG_SCSI_COMMON=y
CONFIG_SCSI=y
CONFIG_SCSI_DMA=y
# CONFIG_SCSI_PROC_FS is not set

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=m
# CONFIG_BLK_DEV_SR is not set
CONFIG_CHR_DEV_SG=m
# CONFIG_BLK_DEV_BSG is not set
# CONFIG_CHR_DEV_SCH is not set
# CONFIG_SCSI_CONSTANTS is not set
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SCAN_ASYNC=y

#
# SCSI Transports
#
# CONFIG_SCSI_SPI_ATTRS is not set
CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_SAS_LIBSAS=m
# CONFIG_SCSI_SAS_ATA is not set
CONFIG_SCSI_SAS_HOST_SMP=y
# CONFIG_SCSI_SRP_ATTRS is not set
# end of SCSI Transports

# CONFIG_SCSI_LOWLEVEL is not set
CONFIG_SCSI_DH=y
# CONFIG_SCSI_DH_RDAC is not set
CONFIG_SCSI_DH_HP_SW=y
# CONFIG_SCSI_DH_EMC is not set
# CONFIG_SCSI_DH_ALUA is not set
# end of SCSI device support

CONFIG_ATA=y
CONFIG_SATA_HOST=y
# CONFIG_ATA_VERBOSE_ERROR is not set
CONFIG_ATA_FORCE=y
CONFIG_SATA_PMP=y

#
# Controllers with non-SFF native interface
#
# CONFIG_SATA_AHCI_PLATFORM is not set
CONFIG_AHCI_BRCM=y
# CONFIG_AHCI_DA850 is not set
CONFIG_AHCI_DM816=m
CONFIG_AHCI_DWC=m
# CONFIG_AHCI_ST is not set
CONFIG_AHCI_IMX=y
CONFIG_AHCI_CEVA=m
CONFIG_AHCI_MTK=y
CONFIG_AHCI_MVEBU=y
# CONFIG_AHCI_SUNXI is not set
CONFIG_AHCI_TEGRA=m
CONFIG_AHCI_XGENE=y
# CONFIG_AHCI_QORIQ is not set
# CONFIG_SATA_FSL is not set
CONFIG_SATA_GEMINI=m
# CONFIG_SATA_AHCI_SEATTLE is not set
# CONFIG_ATA_SFF is not set
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD_AUTODETECT=y
CONFIG_MD_LINEAR=m
CONFIG_MD_RAID0=m
CONFIG_MD_RAID1=m
# CONFIG_MD_RAID10 is not set
# CONFIG_MD_RAID456 is not set
# CONFIG_MD_MULTIPATH is not set
# CONFIG_MD_FAULTY is not set
CONFIG_BCACHE=y
CONFIG_BCACHE_DEBUG=y
CONFIG_BCACHE_CLOSURES_DEBUG=y
# CONFIG_BCACHE_ASYNC_REGISTRATION is not set
# CONFIG_BLK_DEV_DM is not set
# CONFIG_TARGET_CORE is not set

#
# IEEE 1394 (FireWire) support
#
# CONFIG_FIREWIRE is not set
# end of IEEE 1394 (FireWire) support

#
# Input device support
#
CONFIG_INPUT=y
# CONFIG_INPUT_LEDS is not set
CONFIG_INPUT_FF_MEMLESS=y
CONFIG_INPUT_SPARSEKMAP=y
CONFIG_INPUT_MATRIXKMAP=y
CONFIG_INPUT_VIVALDIFMAP=y

#
# Userland interfaces
#
# CONFIG_INPUT_MOUSEDEV is not set
CONFIG_INPUT_JOYDEV=m
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_EVBUG=y

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_QT1050 is not set
CONFIG_KEYBOARD_QT1070=y
CONFIG_KEYBOARD_QT2160=m
CONFIG_KEYBOARD_CLPS711X=m
CONFIG_KEYBOARD_DLINK_DIR685=m
CONFIG_KEYBOARD_LKKBD=m
# CONFIG_KEYBOARD_EP93XX is not set
CONFIG_KEYBOARD_GPIO=m
# CONFIG_KEYBOARD_GPIO_POLLED is not set
# CONFIG_KEYBOARD_TCA6416 is not set
CONFIG_KEYBOARD_TCA8418=y
CONFIG_KEYBOARD_MATRIX=y
CONFIG_KEYBOARD_LM8323=m
CONFIG_KEYBOARD_LM8333=y
CONFIG_KEYBOARD_MAX7359=y
CONFIG_KEYBOARD_MCS=m
CONFIG_KEYBOARD_MPR121=y
CONFIG_KEYBOARD_SNVS_PWRKEY=y
CONFIG_KEYBOARD_IMX=m
CONFIG_KEYBOARD_NEWTON=m
# CONFIG_KEYBOARD_OPENCORES is not set
CONFIG_KEYBOARD_PINEPHONE=m
CONFIG_KEYBOARD_PMIC8XXX=m
CONFIG_KEYBOARD_SAMSUNG=y
CONFIG_KEYBOARD_GOLDFISH_EVENTS=m
# CONFIG_KEYBOARD_STOWAWAY is not set
CONFIG_KEYBOARD_ST_KEYSCAN=m
# CONFIG_KEYBOARD_SUNKBD is not set
CONFIG_KEYBOARD_SH_KEYSC=m
CONFIG_KEYBOARD_OMAP4=y
CONFIG_KEYBOARD_TC3589X=m
CONFIG_KEYBOARD_TM2_TOUCHKEY=y
CONFIG_KEYBOARD_TWL4030=m
# CONFIG_KEYBOARD_XTKBD is not set
CONFIG_KEYBOARD_CAP11XX=m
CONFIG_KEYBOARD_BCM=m
CONFIG_KEYBOARD_MT6779=y
# CONFIG_KEYBOARD_MTK_PMIC is not set
CONFIG_KEYBOARD_CYPRESS_SF=y
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
CONFIG_MOUSE_PS2_ALPS=y
# CONFIG_MOUSE_PS2_BYD is not set
# CONFIG_MOUSE_PS2_LOGIPS2PP is not set
# CONFIG_MOUSE_PS2_SYNAPTICS is not set
# CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS is not set
# CONFIG_MOUSE_PS2_CYPRESS is not set
# CONFIG_MOUSE_PS2_TRACKPOINT is not set
# CONFIG_MOUSE_PS2_ELANTECH is not set
CONFIG_MOUSE_PS2_SENTELIC=y
CONFIG_MOUSE_PS2_TOUCHKIT=y
CONFIG_MOUSE_PS2_FOCALTECH=y
CONFIG_MOUSE_SERIAL=y
CONFIG_MOUSE_APPLETOUCH=m
CONFIG_MOUSE_BCM5974=m
# CONFIG_MOUSE_CYAPA is not set
CONFIG_MOUSE_ELAN_I2C=m
# CONFIG_MOUSE_ELAN_I2C_I2C is not set
CONFIG_MOUSE_ELAN_I2C_SMBUS=y
CONFIG_MOUSE_VSXXXAA=m
CONFIG_MOUSE_GPIO=y
CONFIG_MOUSE_SYNAPTICS_I2C=y
CONFIG_MOUSE_SYNAPTICS_USB=m
CONFIG_INPUT_JOYSTICK=y
CONFIG_JOYSTICK_ANALOG=y
# CONFIG_JOYSTICK_A3D is not set
CONFIG_JOYSTICK_ADC=m
CONFIG_JOYSTICK_ADI=m
CONFIG_JOYSTICK_COBRA=y
CONFIG_JOYSTICK_GF2K=y
CONFIG_JOYSTICK_GRIP=m
CONFIG_JOYSTICK_GRIP_MP=m
CONFIG_JOYSTICK_GUILLEMOT=y
CONFIG_JOYSTICK_INTERACT=m
# CONFIG_JOYSTICK_SIDEWINDER is not set
# CONFIG_JOYSTICK_TMDC is not set
CONFIG_JOYSTICK_IFORCE=m
CONFIG_JOYSTICK_IFORCE_USB=m
CONFIG_JOYSTICK_IFORCE_232=m
CONFIG_JOYSTICK_WARRIOR=m
CONFIG_JOYSTICK_MAGELLAN=m
# CONFIG_JOYSTICK_SPACEORB is not set
CONFIG_JOYSTICK_SPACEBALL=m
CONFIG_JOYSTICK_STINGER=m
# CONFIG_JOYSTICK_TWIDJOY is not set
CONFIG_JOYSTICK_ZHENHUA=y
CONFIG_JOYSTICK_DB9=m
CONFIG_JOYSTICK_GAMECON=m
# CONFIG_JOYSTICK_TURBOGRAFX is not set
# CONFIG_JOYSTICK_AS5011 is not set
CONFIG_JOYSTICK_JOYDUMP=y
# CONFIG_JOYSTICK_XPAD is not set
# CONFIG_JOYSTICK_WALKERA0701 is not set
CONFIG_JOYSTICK_PSXPAD_SPI=y
# CONFIG_JOYSTICK_PSXPAD_SPI_FF is not set
# CONFIG_JOYSTICK_PXRC is not set
# CONFIG_JOYSTICK_QWIIC is not set
CONFIG_JOYSTICK_FSIA6B=y
# CONFIG_JOYSTICK_SENSEHAT is not set
# CONFIG_INPUT_TABLET is not set
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_88PM860X=m
CONFIG_TOUCHSCREEN_ADS7846=m
CONFIG_TOUCHSCREEN_AD7877=m
# CONFIG_TOUCHSCREEN_AD7879 is not set
# CONFIG_TOUCHSCREEN_ADC is not set
CONFIG_TOUCHSCREEN_AR1021_I2C=y
CONFIG_TOUCHSCREEN_ATMEL_MXT=y
# CONFIG_TOUCHSCREEN_ATMEL_MXT_T37 is not set
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
CONFIG_TOUCHSCREEN_BU21013=y
# CONFIG_TOUCHSCREEN_BU21029 is not set
CONFIG_TOUCHSCREEN_CHIPONE_ICN8318=y
CONFIG_TOUCHSCREEN_CY8CTMA140=y
CONFIG_TOUCHSCREEN_CY8CTMG110=y
# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set
# CONFIG_TOUCHSCREEN_CYTTSP4_CORE is not set
# CONFIG_TOUCHSCREEN_DA9052 is not set
# CONFIG_TOUCHSCREEN_DYNAPRO is not set
CONFIG_TOUCHSCREEN_HAMPSHIRE=y
# CONFIG_TOUCHSCREEN_EETI is not set
# CONFIG_TOUCHSCREEN_EGALAX is not set
CONFIG_TOUCHSCREEN_EGALAX_SERIAL=y
CONFIG_TOUCHSCREEN_EXC3000=y
CONFIG_TOUCHSCREEN_FUJITSU=y
CONFIG_TOUCHSCREEN_GOODIX=y
CONFIG_TOUCHSCREEN_HIDEEP=y
CONFIG_TOUCHSCREEN_HYCON_HY46XX=y
CONFIG_TOUCHSCREEN_ILI210X=y
CONFIG_TOUCHSCREEN_ILITEK=y
CONFIG_TOUCHSCREEN_IPROC=y
CONFIG_TOUCHSCREEN_S6SY761=y
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=y
CONFIG_TOUCHSCREEN_WACOM_W8001=y
CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TOUCHSCREEN_MAX11801=m
# CONFIG_TOUCHSCREEN_MCS5000 is not set
# CONFIG_TOUCHSCREEN_MMS114 is not set
CONFIG_TOUCHSCREEN_MELFAS_MIP4=m
CONFIG_TOUCHSCREEN_MSG2638=y
# CONFIG_TOUCHSCREEN_MTOUCH is not set
CONFIG_TOUCHSCREEN_IMAGIS=y
CONFIG_TOUCHSCREEN_IMX6UL_TSC=y
CONFIG_TOUCHSCREEN_INEXIO=y
CONFIG_TOUCHSCREEN_MK712=y
CONFIG_TOUCHSCREEN_PENMOUNT=y
CONFIG_TOUCHSCREEN_EDT_FT5X06=y
# CONFIG_TOUCHSCREEN_RASPBERRYPI_FW is not set
# CONFIG_TOUCHSCREEN_MIGOR is not set
CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
CONFIG_TOUCHSCREEN_UCB1400=m
# CONFIG_TOUCHSCREEN_PIXCIR is not set
# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set
CONFIG_TOUCHSCREEN_WM831X=m
CONFIG_TOUCHSCREEN_WM97XX=m
CONFIG_TOUCHSCREEN_WM9705=y
# CONFIG_TOUCHSCREEN_WM9712 is not set
# CONFIG_TOUCHSCREEN_WM9713 is not set
CONFIG_TOUCHSCREEN_USB_COMPOSITE=y
CONFIG_TOUCHSCREEN_MX25=m
# CONFIG_TOUCHSCREEN_MC13783 is not set
CONFIG_TOUCHSCREEN_USB_EGALAX=y
# CONFIG_TOUCHSCREEN_USB_PANJIT is not set
# CONFIG_TOUCHSCREEN_USB_3M is not set
CONFIG_TOUCHSCREEN_USB_ITM=y
# CONFIG_TOUCHSCREEN_USB_ETURBO is not set
CONFIG_TOUCHSCREEN_USB_GUNZE=y
CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
# CONFIG_TOUCHSCREEN_USB_IDEALTEK is not set
CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
CONFIG_TOUCHSCREEN_USB_GOTOP=y
CONFIG_TOUCHSCREEN_USB_JASTEC=y
CONFIG_TOUCHSCREEN_USB_ELO=y
CONFIG_TOUCHSCREEN_USB_E2I=y
# CONFIG_TOUCHSCREEN_USB_ZYTRONIC is not set
CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
CONFIG_TOUCHSCREEN_USB_NEXIO=y
CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y
CONFIG_TOUCHSCREEN_TOUCHIT213=m
CONFIG_TOUCHSCREEN_TS4800=m
# CONFIG_TOUCHSCREEN_TSC_SERIO is not set
CONFIG_TOUCHSCREEN_TSC200X_CORE=y
# CONFIG_TOUCHSCREEN_TSC2004 is not set
CONFIG_TOUCHSCREEN_TSC2005=y
CONFIG_TOUCHSCREEN_TSC2007=m
# CONFIG_TOUCHSCREEN_TSC2007_IIO is not set
CONFIG_TOUCHSCREEN_PCAP=m
# CONFIG_TOUCHSCREEN_RM_TS is not set
CONFIG_TOUCHSCREEN_SILEAD=m
# CONFIG_TOUCHSCREEN_SIS_I2C is not set
CONFIG_TOUCHSCREEN_ST1232=m
# CONFIG_TOUCHSCREEN_STMFTS is not set
CONFIG_TOUCHSCREEN_SUR40=m
# CONFIG_TOUCHSCREEN_SURFACE3_SPI is not set
# CONFIG_TOUCHSCREEN_SX8654 is not set
CONFIG_TOUCHSCREEN_TPS6507X=m
CONFIG_TOUCHSCREEN_ZET6223=y
CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TOUCHSCREEN_COLIBRI_VF50 is not set
CONFIG_TOUCHSCREEN_ROHM_BU21023=y
CONFIG_TOUCHSCREEN_IQS5XX=m
CONFIG_TOUCHSCREEN_ZINITIX=m
CONFIG_INPUT_MISC=y
CONFIG_INPUT_88PM860X_ONKEY=y
CONFIG_INPUT_88PM80X_ONKEY=m
# CONFIG_INPUT_AD714X is not set
CONFIG_INPUT_ARIEL_PWRBUTTON=m
# CONFIG_INPUT_ARIZONA_HAPTICS is not set
CONFIG_INPUT_ATMEL_CAPTOUCH=m
# CONFIG_INPUT_BMA150 is not set
# CONFIG_INPUT_E3X0_BUTTON is not set
CONFIG_INPUT_PM8XXX_VIBRATOR=m
# CONFIG_INPUT_PMIC8XXX_PWRKEY is not set
CONFIG_INPUT_MAX77650_ONKEY=m
CONFIG_INPUT_MAX77693_HAPTIC=y
CONFIG_INPUT_MAX8925_ONKEY=m
# CONFIG_INPUT_MC13783_PWRBUTTON is not set
CONFIG_INPUT_MMA8450=m
CONFIG_INPUT_GPIO_BEEPER=m
# CONFIG_INPUT_GPIO_DECODER is not set
CONFIG_INPUT_GPIO_VIBRA=y
CONFIG_INPUT_CPCAP_PWRBUTTON=m
CONFIG_INPUT_ATI_REMOTE2=m
CONFIG_INPUT_KEYSPAN_REMOTE=m
# CONFIG_INPUT_KXTJ9 is not set
# CONFIG_INPUT_POWERMATE is not set
# CONFIG_INPUT_YEALINK is not set
CONFIG_INPUT_CM109=y
CONFIG_INPUT_REGULATOR_HAPTIC=y
CONFIG_INPUT_TPS65218_PWRBUTTON=m
CONFIG_INPUT_AXP20X_PEK=y
CONFIG_INPUT_TWL4030_PWRBUTTON=y
# CONFIG_INPUT_TWL4030_VIBRA is not set
CONFIG_INPUT_TWL6040_VIBRA=m
# CONFIG_INPUT_UINPUT is not set
CONFIG_INPUT_PALMAS_PWRBUTTON=y
CONFIG_INPUT_PCF50633_PMU=m
CONFIG_INPUT_PCF8574=y
# CONFIG_INPUT_PWM_BEEPER is not set
CONFIG_INPUT_PWM_VIBRA=y
# CONFIG_INPUT_RK805_PWRKEY is not set
CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
# CONFIG_INPUT_DA7280_HAPTICS is not set
CONFIG_INPUT_DA9052_ONKEY=m
# CONFIG_INPUT_DA9055_ONKEY is not set
CONFIG_INPUT_DA9063_ONKEY=m
CONFIG_INPUT_WM831X_ON=y
CONFIG_INPUT_PCAP=y
CONFIG_INPUT_ADXL34X=y
CONFIG_INPUT_ADXL34X_I2C=y
# CONFIG_INPUT_ADXL34X_SPI is not set
CONFIG_INPUT_IBM_PANEL=y
CONFIG_INPUT_IMS_PCU=y
# CONFIG_INPUT_IQS269A is not set
# CONFIG_INPUT_IQS626A is not set
CONFIG_INPUT_IQS7222=m
CONFIG_INPUT_CMA3000=y
CONFIG_INPUT_CMA3000_I2C=y
# CONFIG_INPUT_DRV260X_HAPTICS is not set
CONFIG_INPUT_DRV2665_HAPTICS=y
# CONFIG_INPUT_DRV2667_HAPTICS is not set
# CONFIG_INPUT_HISI_POWERKEY is not set
CONFIG_INPUT_RAVE_SP_PWRBUTTON=m
CONFIG_INPUT_SC27XX_VIBRA=m
CONFIG_INPUT_RT5120_PWRKEY=m
CONFIG_RMI4_CORE=m
CONFIG_RMI4_I2C=m
# CONFIG_RMI4_SPI is not set
# CONFIG_RMI4_SMB is not set
CONFIG_RMI4_F03=y
CONFIG_RMI4_F03_SERIO=m
CONFIG_RMI4_2D_SENSOR=y
CONFIG_RMI4_F11=y
# CONFIG_RMI4_F12 is not set
CONFIG_RMI4_F30=y
CONFIG_RMI4_F34=y
CONFIG_RMI4_F3A=y
# CONFIG_RMI4_F54 is not set
CONFIG_RMI4_F55=y

#
# Hardware I/O ports
#
CONFIG_SERIO=y
# CONFIG_SERIO_PARKBD is not set
CONFIG_SERIO_LIBPS2=y
CONFIG_SERIO_RAW=m
CONFIG_SERIO_XILINX_XPS_PS2=y
# CONFIG_SERIO_ALTERA_PS2 is not set
# CONFIG_SERIO_PS2MULT is not set
# CONFIG_SERIO_ARC_PS2 is not set
# CONFIG_SERIO_APBPS2 is not set
CONFIG_SERIO_OLPC_APSP=m
# CONFIG_SERIO_SUN4I_PS2 is not set
CONFIG_SERIO_GPIO_PS2=m
CONFIG_USERIO=m
CONFIG_GAMEPORT=y
# CONFIG_GAMEPORT_NS558 is not set
CONFIG_GAMEPORT_L4=m
# end of Hardware I/O ports
# end of Input device support

#
# Character devices
#
# CONFIG_TTY is not set
CONFIG_SERIAL_DEV_BUS=y
# CONFIG_PRINTER is not set
CONFIG_PPDEV=m
CONFIG_IPMI_HANDLER=y
CONFIG_IPMI_PLAT_DATA=y
CONFIG_IPMI_PANIC_EVENT=y
# CONFIG_IPMI_PANIC_STRING is not set
CONFIG_IPMI_DEVICE_INTERFACE=y
CONFIG_IPMI_SI=m
# CONFIG_IPMI_SSIF is not set
CONFIG_IPMI_IPMB=y
CONFIG_IPMI_WATCHDOG=m
CONFIG_IPMI_POWEROFF=y
CONFIG_IPMI_KCS_BMC=y
CONFIG_ASPEED_KCS_IPMI_BMC=y
# CONFIG_NPCM7XX_KCS_IPMI_BMC is not set
CONFIG_IPMI_KCS_BMC_CDEV_IPMI=y
CONFIG_IPMI_KCS_BMC_SERIO=m
CONFIG_ASPEED_BT_IPMI_BMC=y
CONFIG_IPMB_DEVICE_INTERFACE=y
# CONFIG_HW_RANDOM is not set
CONFIG_XILINX_HWICAP=y

#
# PCMCIA character devices
#
CONFIG_CARDMAN_4000=m
CONFIG_CARDMAN_4040=m
CONFIG_SCR24X=m
# end of PCMCIA character devices

# CONFIG_DEVMEM is not set
CONFIG_TCG_TPM=m
CONFIG_TCG_TIS_CORE=m
CONFIG_TCG_TIS=m
CONFIG_TCG_TIS_SPI=m
CONFIG_TCG_TIS_SPI_CR50=y
CONFIG_TCG_TIS_I2C=m
# CONFIG_TCG_TIS_SYNQUACER is not set
CONFIG_TCG_TIS_I2C_CR50=m
# CONFIG_TCG_TIS_I2C_ATMEL is not set
# CONFIG_TCG_TIS_I2C_INFINEON is not set
# CONFIG_TCG_TIS_I2C_NUVOTON is not set
CONFIG_TCG_ATMEL=m
CONFIG_TCG_VTPM_PROXY=m
CONFIG_TCG_TIS_ST33ZP24=m
CONFIG_TCG_TIS_ST33ZP24_I2C=m
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_XILLYBUS_CLASS=y
CONFIG_XILLYBUS=y
CONFIG_XILLYBUS_OF=y
# CONFIG_XILLYUSB is not set
CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RANDOM_TRUST_BOOTLOADER=y
# end of Character devices

#
# I2C support
#
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
# CONFIG_I2C_COMPAT is not set
# CONFIG_I2C_CHARDEV is not set
CONFIG_I2C_MUX=y

#
# Multiplexer I2C Chip support
#
CONFIG_I2C_ARB_GPIO_CHALLENGE=y
# CONFIG_I2C_MUX_GPIO is not set
CONFIG_I2C_MUX_GPMUX=m
CONFIG_I2C_MUX_LTC4306=y
CONFIG_I2C_MUX_PCA9541=y
# CONFIG_I2C_MUX_PCA954x is not set
# CONFIG_I2C_MUX_REG is not set
# CONFIG_I2C_MUX_MLXCPLD is not set
# end of Multiplexer I2C Chip support

# CONFIG_I2C_HELPER_AUTO is not set
CONFIG_I2C_SMBUS=y

#
# I2C Algorithms
#
CONFIG_I2C_ALGOBIT=y
CONFIG_I2C_ALGOPCF=m
CONFIG_I2C_ALGOPCA=y
# end of I2C Algorithms

#
# I2C Hardware Bus support
#
CONFIG_I2C_HIX5HD2=m

#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
# CONFIG_I2C_ALTERA is not set
CONFIG_I2C_ASPEED=y
# CONFIG_I2C_AT91 is not set
# CONFIG_I2C_AXXIA is not set
CONFIG_I2C_BCM2835=m
CONFIG_I2C_BCM_IPROC=y
CONFIG_I2C_BCM_KONA=y
# CONFIG_I2C_BRCMSTB is not set
CONFIG_I2C_CADENCE=m
CONFIG_I2C_CBUS_GPIO=y
CONFIG_I2C_DAVINCI=m
CONFIG_I2C_DESIGNWARE_CORE=y
CONFIG_I2C_DESIGNWARE_SLAVE=y
CONFIG_I2C_DESIGNWARE_PLATFORM=y
# CONFIG_I2C_DIGICOLOR is not set
# CONFIG_I2C_EMEV2 is not set
# CONFIG_I2C_EXYNOS5 is not set
CONFIG_I2C_GPIO=y
# CONFIG_I2C_GPIO_FAULT_INJECTOR is not set
CONFIG_I2C_HIGHLANDER=y
# CONFIG_I2C_HISI is not set
CONFIG_I2C_IMG=y
# CONFIG_I2C_IMX is not set
CONFIG_I2C_IMX_LPI2C=m
CONFIG_I2C_IOP3XX=m
CONFIG_I2C_JZ4780=m
CONFIG_I2C_KEMPLD=m
# CONFIG_I2C_LPC2K is not set
CONFIG_I2C_MESON=y
CONFIG_I2C_MICROCHIP_CORE=y
CONFIG_I2C_MT65XX=m
CONFIG_I2C_MT7621=m
CONFIG_I2C_MV64XXX=y
# CONFIG_I2C_MXS is not set
# CONFIG_I2C_NPCM is not set
CONFIG_I2C_OCORES=y
CONFIG_I2C_OMAP=m
# CONFIG_I2C_OWL is not set
CONFIG_I2C_APPLE=y
CONFIG_I2C_PCA_PLATFORM=y
CONFIG_I2C_PNX=m
# CONFIG_I2C_PXA is not set
CONFIG_I2C_QCOM_CCI=m
CONFIG_I2C_QUP=m
# CONFIG_I2C_RIIC is not set
# CONFIG_I2C_RK3X is not set
CONFIG_I2C_RZV2M=m
CONFIG_I2C_S3C2410=y
CONFIG_I2C_SH_MOBILE=y
# CONFIG_I2C_SIMTEC is not set
CONFIG_I2C_SPRD=y
CONFIG_I2C_ST=y
CONFIG_I2C_STM32F4=y
CONFIG_I2C_STM32F7=y
CONFIG_I2C_SUN6I_P2WI=y
CONFIG_I2C_SYNQUACER=m
CONFIG_I2C_TEGRA_BPMP=m
# CONFIG_I2C_UNIPHIER is not set
CONFIG_I2C_UNIPHIER_F=y
CONFIG_I2C_VERSATILE=m
CONFIG_I2C_WMT=y
CONFIG_I2C_XILINX=y
CONFIG_I2C_XLP9XX=m
CONFIG_I2C_RCAR=m

#
# External I2C/SMBus adapter drivers
#
CONFIG_I2C_DIOLAN_U2C=m
CONFIG_I2C_DLN2=m
CONFIG_I2C_CP2615=y
# CONFIG_I2C_PARPORT is not set
CONFIG_I2C_ROBOTFUZZ_OSIF=m
# CONFIG_I2C_TINY_USB is not set
CONFIG_I2C_VIPERBOARD=m

#
# Other I2C/SMBus bus drivers
#
CONFIG_I2C_MLXCPLD=y
CONFIG_I2C_FSI=m
CONFIG_I2C_VIRTIO=m
# end of I2C Hardware Bus support

CONFIG_I2C_STUB=m
CONFIG_I2C_SLAVE=y
# CONFIG_I2C_SLAVE_EEPROM is not set
# CONFIG_I2C_SLAVE_TESTUNIT is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# end of I2C support

# CONFIG_I3C is not set
CONFIG_SPI=y
# CONFIG_SPI_DEBUG is not set
CONFIG_SPI_MASTER=y
CONFIG_SPI_MEM=y

#
# SPI Master Controller Drivers
#
# CONFIG_SPI_ALTERA is not set
# CONFIG_SPI_ALTERA_CORE is not set
# CONFIG_SPI_AR934X is not set
CONFIG_SPI_ATH79=y
CONFIG_SPI_ARMADA_3700=y
CONFIG_SPI_ASPEED_SMC=y
CONFIG_SPI_ATMEL=m
# CONFIG_SPI_AT91_USART is not set
CONFIG_SPI_ATMEL_QUADSPI=m
CONFIG_SPI_AXI_SPI_ENGINE=y
# CONFIG_SPI_BCM2835 is not set
CONFIG_SPI_BCM2835AUX=m
CONFIG_SPI_BCM63XX=m
# CONFIG_SPI_BCM63XX_HSSPI is not set
CONFIG_SPI_BCM_QSPI=m
CONFIG_SPI_BITBANG=y
# CONFIG_SPI_BUTTERFLY is not set
CONFIG_SPI_CADENCE=y
CONFIG_SPI_CADENCE_QUADSPI=m
CONFIG_SPI_CADENCE_XSPI=y
# CONFIG_SPI_CLPS711X is not set
CONFIG_SPI_DESIGNWARE=m
CONFIG_SPI_DW_DMA=y
# CONFIG_SPI_DW_MMIO is not set
CONFIG_SPI_DW_BT1=m
# CONFIG_SPI_DW_BT1_DIRMAP is not set
CONFIG_SPI_DLN2=y
CONFIG_SPI_EP93XX=y
CONFIG_SPI_FSI=m
CONFIG_SPI_FSL_LPSPI=m
CONFIG_SPI_FSL_QUADSPI=y
CONFIG_SPI_GXP=m
CONFIG_SPI_HISI_KUNPENG=m
CONFIG_SPI_HISI_SFC_V3XX=m
CONFIG_SPI_NXP_FLEXSPI=m
# CONFIG_SPI_GPIO is not set
CONFIG_SPI_IMG_SPFI=m
CONFIG_SPI_IMX=y
# CONFIG_SPI_INGENIC is not set
# CONFIG_SPI_INTEL_PLATFORM is not set
CONFIG_SPI_JCORE=m
CONFIG_SPI_LM70_LLP=m
CONFIG_SPI_LP8841_RTC=y
CONFIG_SPI_FSL_LIB=m
CONFIG_SPI_FSL_SPI=m
CONFIG_SPI_FSL_DSPI=y
CONFIG_SPI_MESON_SPICC=y
CONFIG_SPI_MESON_SPIFC=m
# CONFIG_SPI_MICROCHIP_CORE is not set
# CONFIG_SPI_MICROCHIP_CORE_QSPI is not set
# CONFIG_SPI_MT65XX is not set
CONFIG_SPI_MT7621=y
CONFIG_SPI_MTK_NOR=m
CONFIG_SPI_NPCM_FIU=y
# CONFIG_SPI_NPCM_PSPI is not set
# CONFIG_SPI_LANTIQ_SSC is not set
CONFIG_SPI_OC_TINY=m
CONFIG_SPI_OMAP24XX=m
CONFIG_SPI_TI_QSPI=m
CONFIG_SPI_OMAP_100K=m
CONFIG_SPI_ORION=y
# CONFIG_SPI_PIC32 is not set
CONFIG_SPI_PIC32_SQI=m
CONFIG_SPI_PXA2XX=y
# CONFIG_SPI_ROCKCHIP is not set
# CONFIG_SPI_ROCKCHIP_SFC is not set
CONFIG_SPI_RPCIF=m
# CONFIG_SPI_RSPI is not set
CONFIG_SPI_QUP=y
# CONFIG_SPI_S3C64XX is not set
# CONFIG_SPI_SC18IS602 is not set
# CONFIG_SPI_SH_MSIOF is not set
CONFIG_SPI_SH=m
CONFIG_SPI_SH_HSPI=m
CONFIG_SPI_SIFIVE=y
CONFIG_SPI_SPRD=m
CONFIG_SPI_SPRD_ADI=y
CONFIG_SPI_STM32=m
CONFIG_SPI_STM32_QSPI=y
# CONFIG_SPI_ST_SSC4 is not set
CONFIG_SPI_SUN4I=m
CONFIG_SPI_SUN6I=m
CONFIG_SPI_SUNPLUS_SP7021=y
CONFIG_SPI_SYNQUACER=m
# CONFIG_SPI_MXIC is not set
# CONFIG_SPI_TEGRA210_QUAD is not set
# CONFIG_SPI_TEGRA114 is not set
CONFIG_SPI_TEGRA20_SFLASH=m
CONFIG_SPI_TEGRA20_SLINK=m
CONFIG_SPI_UNIPHIER=y
CONFIG_SPI_XCOMM=y
CONFIG_SPI_XILINX=m
CONFIG_SPI_XLP=y
CONFIG_SPI_XTENSA_XTFPGA=m
# CONFIG_SPI_ZYNQ_QSPI is not set
CONFIG_SPI_ZYNQMP_GQSPI=m
CONFIG_SPI_AMD=m

#
# SPI Multiplexer support
#
# CONFIG_SPI_MUX is not set

#
# SPI Protocol Masters
#
# CONFIG_SPI_SPIDEV is not set
# CONFIG_SPI_LOOPBACK_TEST is not set
CONFIG_SPI_TLE62X0=m
# CONFIG_SPI_SLAVE is not set
CONFIG_SPI_DYNAMIC=y
CONFIG_SPMI=y
CONFIG_SPMI_HISI3670=y
CONFIG_SPMI_MSM_PMIC_ARB=y
CONFIG_SPMI_MTK_PMIF=y
CONFIG_HSI=y
CONFIG_HSI_BOARDINFO=y

#
# HSI controllers
#

#
# HSI clients
#
CONFIG_HSI_CHAR=m
CONFIG_PPS=m
# CONFIG_PPS_DEBUG is not set

#
# PPS clients support
#
# CONFIG_PPS_CLIENT_KTIMER is not set
# CONFIG_PPS_CLIENT_PARPORT is not set
CONFIG_PPS_CLIENT_GPIO=m

#
# PPS generators support
#

#
# PTP clock support
#
CONFIG_PTP_1588_CLOCK_OPTIONAL=y

#
# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
#
# end of PTP clock support

# CONFIG_PINCTRL is not set
CONFIG_GPIOLIB=y
CONFIG_GPIOLIB_FASTPATH_LIMIT=512
CONFIG_OF_GPIO=y
CONFIG_GPIOLIB_IRQCHIP=y
CONFIG_DEBUG_GPIO=y
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_CDEV=y
CONFIG_GPIO_CDEV_V1=y
CONFIG_GPIO_GENERIC=y
CONFIG_GPIO_MAX730X=y

#
# Memory mapped GPIO drivers
#
CONFIG_GPIO_74XX_MMIO=m
# CONFIG_GPIO_ALTERA is not set
CONFIG_GPIO_ASPEED=m
CONFIG_GPIO_ASPEED_SGPIO=y
# CONFIG_GPIO_ATH79 is not set
# CONFIG_GPIO_RASPBERRYPI_EXP is not set
CONFIG_GPIO_BCM_KONA=y
CONFIG_GPIO_BCM_XGS_IPROC=y
# CONFIG_GPIO_BRCMSTB is not set
# CONFIG_GPIO_CADENCE is not set
# CONFIG_GPIO_CLPS711X is not set
CONFIG_GPIO_DWAPB=y
CONFIG_GPIO_EIC_SPRD=y
CONFIG_GPIO_EM=y
CONFIG_GPIO_FTGPIO010=y
CONFIG_GPIO_GENERIC_PLATFORM=y
CONFIG_GPIO_GRGPIO=y
CONFIG_GPIO_HISI=y
CONFIG_GPIO_HLWD=m
CONFIG_GPIO_IOP=y
CONFIG_GPIO_LOGICVC=m
CONFIG_GPIO_LPC18XX=y
CONFIG_GPIO_LPC32XX=m
# CONFIG_GPIO_MB86S7X is not set
CONFIG_GPIO_MPC8XXX=y
# CONFIG_GPIO_MT7621 is not set
# CONFIG_GPIO_MXC is not set
# CONFIG_GPIO_MXS is not set
# CONFIG_GPIO_PMIC_EIC_SPRD is not set
CONFIG_GPIO_PXA=y
CONFIG_GPIO_RCAR=y
CONFIG_GPIO_RDA=y
CONFIG_GPIO_ROCKCHIP=y
CONFIG_GPIO_SAMA5D2_PIOBU=m
# CONFIG_GPIO_SIFIVE is not set
CONFIG_GPIO_SIOX=m
CONFIG_GPIO_SNPS_CREG=y
CONFIG_GPIO_SPRD=m
# CONFIG_GPIO_STP_XWAY is not set
CONFIG_GPIO_SYSCON=y
CONFIG_GPIO_TEGRA=m
CONFIG_GPIO_TEGRA186=m
CONFIG_GPIO_TS4800=y
CONFIG_GPIO_UNIPHIER=y
CONFIG_GPIO_VISCONTI=m
# CONFIG_GPIO_XGENE_SB is not set
# CONFIG_GPIO_XILINX is not set
# CONFIG_GPIO_XLP is not set
CONFIG_GPIO_AMD_FCH=m
CONFIG_GPIO_IDT3243X=y
# end of Memory mapped GPIO drivers

#
# I2C GPIO expanders
#
CONFIG_GPIO_ADNP=m
# CONFIG_GPIO_GW_PLD is not set
CONFIG_GPIO_MAX7300=y
# CONFIG_GPIO_MAX732X is not set
# CONFIG_GPIO_PCA953X is not set
CONFIG_GPIO_PCA9570=y
CONFIG_GPIO_PCF857X=y
CONFIG_GPIO_TPIC2810=m
CONFIG_GPIO_TS4900=m
# end of I2C GPIO expanders

#
# MFD GPIO expanders
#
CONFIG_GPIO_ARIZONA=m
# CONFIG_GPIO_BD9571MWV is not set
CONFIG_GPIO_DA9052=y
CONFIG_GPIO_DA9055=m
# CONFIG_GPIO_DLN2 is not set
CONFIG_GPIO_KEMPLD=m
# CONFIG_GPIO_LP3943 is not set
# CONFIG_GPIO_LP873X is not set
CONFIG_GPIO_MAX77650=m
# CONFIG_GPIO_PALMAS is not set
CONFIG_GPIO_RC5T583=y
# CONFIG_GPIO_SL28CPLD is not set
# CONFIG_GPIO_TC3589X is not set
CONFIG_GPIO_TPS65086=m
# CONFIG_GPIO_TPS65910 is not set
# CONFIG_GPIO_TPS65912 is not set
# CONFIG_GPIO_TQMX86 is not set
# CONFIG_GPIO_TWL4030 is not set
CONFIG_GPIO_TWL6040=y
CONFIG_GPIO_UCB1400=m
CONFIG_GPIO_WM831X=m
CONFIG_GPIO_WM8994=m
# end of MFD GPIO expanders

#
# SPI GPIO expanders
#
# CONFIG_GPIO_74X164 is not set
CONFIG_GPIO_MAX3191X=m
CONFIG_GPIO_MAX7301=y
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_PISOSR is not set
# CONFIG_GPIO_XRA1403 is not set
CONFIG_GPIO_MOXTET=m
# end of SPI GPIO expanders

#
# USB GPIO expanders
#
# CONFIG_GPIO_VIPERBOARD is not set
# end of USB GPIO expanders

#
# Virtual GPIO drivers
#
CONFIG_GPIO_AGGREGATOR=y
CONFIG_GPIO_MOCKUP=m
CONFIG_GPIO_VIRTIO=y
CONFIG_GPIO_SIM=m
# end of Virtual GPIO drivers

CONFIG_W1=m

#
# 1-wire Bus Masters
#
CONFIG_W1_MASTER_DS2490=m
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_MXC=m
CONFIG_W1_MASTER_DS1WM=m
CONFIG_W1_MASTER_GPIO=m
# CONFIG_W1_MASTER_SGI is not set
# end of 1-wire Bus Masters

#
# 1-wire Slaves
#
CONFIG_W1_SLAVE_THERM=m
CONFIG_W1_SLAVE_SMEM=m
# CONFIG_W1_SLAVE_DS2405 is not set
CONFIG_W1_SLAVE_DS2408=m
CONFIG_W1_SLAVE_DS2408_READBACK=y
CONFIG_W1_SLAVE_DS2413=m
CONFIG_W1_SLAVE_DS2406=m
# CONFIG_W1_SLAVE_DS2423 is not set
# CONFIG_W1_SLAVE_DS2805 is not set
CONFIG_W1_SLAVE_DS2430=m
# CONFIG_W1_SLAVE_DS2431 is not set
CONFIG_W1_SLAVE_DS2433=m
# CONFIG_W1_SLAVE_DS2433_CRC is not set
CONFIG_W1_SLAVE_DS2438=m
CONFIG_W1_SLAVE_DS250X=m
CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
# CONFIG_W1_SLAVE_DS28E04 is not set
# CONFIG_W1_SLAVE_DS28E17 is not set
# end of 1-wire Slaves

CONFIG_POWER_RESET=y
CONFIG_POWER_RESET_AS3722=y
CONFIG_POWER_RESET_BRCMKONA=y
# CONFIG_POWER_RESET_BRCMSTB is not set
CONFIG_POWER_RESET_GEMINI_POWEROFF=y
# CONFIG_POWER_RESET_GPIO is not set
CONFIG_POWER_RESET_GPIO_RESTART=y
CONFIG_POWER_RESET_OCELOT_RESET=y
CONFIG_POWER_RESET_LTC2952=y
CONFIG_POWER_RESET_REGULATOR=y
CONFIG_POWER_RESET_RESTART=y
CONFIG_POWER_RESET_TPS65086=y
CONFIG_POWER_RESET_KEYSTONE=y
CONFIG_POWER_RESET_SYSCON=y
CONFIG_POWER_RESET_SYSCON_POWEROFF=y
CONFIG_POWER_RESET_RMOBILE=y
CONFIG_REBOOT_MODE=y
CONFIG_SYSCON_REBOOT_MODE=y
CONFIG_POWER_RESET_SC27XX=m
CONFIG_NVMEM_REBOOT_MODE=y
CONFIG_POWER_SUPPLY=y
CONFIG_POWER_SUPPLY_DEBUG=y
CONFIG_PDA_POWER=m
CONFIG_GENERIC_ADC_BATTERY=m
CONFIG_IP5XXX_POWER=m
# CONFIG_MAX8925_POWER is not set
CONFIG_WM831X_BACKUP=y
CONFIG_WM831X_POWER=y
CONFIG_TEST_POWER=y
# CONFIG_BATTERY_88PM860X is not set
# CONFIG_CHARGER_ADP5061 is not set
CONFIG_BATTERY_ACT8945A=m
# CONFIG_BATTERY_CPCAP is not set
CONFIG_BATTERY_CW2015=m
CONFIG_BATTERY_DS2760=m
CONFIG_BATTERY_DS2780=m
# CONFIG_BATTERY_DS2781 is not set
CONFIG_BATTERY_DS2782=m
CONFIG_BATTERY_LEGO_EV3=m
CONFIG_BATTERY_SAMSUNG_SDI=y
# CONFIG_BATTERY_INGENIC is not set
CONFIG_BATTERY_SBS=m
CONFIG_CHARGER_SBS=m
# CONFIG_MANAGER_SBS is not set
CONFIG_BATTERY_BQ27XXX=m
# CONFIG_BATTERY_BQ27XXX_I2C is not set
CONFIG_BATTERY_BQ27XXX_HDQ=m
CONFIG_BATTERY_DA9052=m
CONFIG_CHARGER_DA9150=m
CONFIG_BATTERY_DA9150=m
# CONFIG_CHARGER_AXP20X is not set
# CONFIG_BATTERY_AXP20X is not set
CONFIG_AXP20X_POWER=m
CONFIG_BATTERY_MAX17040=m
CONFIG_BATTERY_MAX17042=m
CONFIG_BATTERY_MAX1721X=m
CONFIG_BATTERY_TWL4030_MADC=m
CONFIG_CHARGER_PCF50633=m
CONFIG_BATTERY_RX51=m
# CONFIG_CHARGER_CPCAP is not set
# CONFIG_CHARGER_ISP1704 is not set
CONFIG_CHARGER_MAX8903=y
# CONFIG_CHARGER_TWL4030 is not set
# CONFIG_CHARGER_LP8727 is not set
CONFIG_CHARGER_GPIO=m
# CONFIG_CHARGER_MANAGER is not set
CONFIG_CHARGER_LT3651=m
CONFIG_CHARGER_LTC4162L=m
# CONFIG_CHARGER_DETECTOR_MAX14656 is not set
# CONFIG_CHARGER_MAX77650 is not set
CONFIG_CHARGER_MAX77693=m
CONFIG_CHARGER_MAX77976=m
# CONFIG_CHARGER_MAX8998 is not set
# CONFIG_CHARGER_MT6360 is not set
CONFIG_CHARGER_MT6370=m
CONFIG_CHARGER_QCOM_SMBB=m
CONFIG_CHARGER_BQ2415X=y
CONFIG_CHARGER_BQ24190=m
# CONFIG_CHARGER_BQ24257 is not set
CONFIG_CHARGER_BQ24735=y
CONFIG_CHARGER_BQ2515X=m
CONFIG_CHARGER_BQ25890=m
CONFIG_CHARGER_BQ25980=m
# CONFIG_CHARGER_BQ256XX is not set
CONFIG_CHARGER_RK817=m
CONFIG_CHARGER_SMB347=y
# CONFIG_CHARGER_TPS65217 is not set
# CONFIG_BATTERY_GAUGE_LTC2941 is not set
CONFIG_BATTERY_GOLDFISH=y
# CONFIG_BATTERY_RT5033 is not set
CONFIG_CHARGER_RT9455=m
# CONFIG_CHARGER_SC2731 is not set
# CONFIG_FUEL_GAUGE_SC27XX is not set
CONFIG_CHARGER_UCS1002=m
# CONFIG_CHARGER_BD99954 is not set
# CONFIG_RN5T618_POWER is not set
CONFIG_BATTERY_UG3105=m
# CONFIG_HWMON is not set
CONFIG_THERMAL=y
# CONFIG_THERMAL_STATISTICS is not set
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
CONFIG_THERMAL_OF=y
# CONFIG_THERMAL_WRITABLE_TRIPS is not set
# CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE is not set
CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
CONFIG_THERMAL_GOV_FAIR_SHARE=y
# CONFIG_THERMAL_GOV_STEP_WISE is not set
# CONFIG_THERMAL_GOV_BANG_BANG is not set
# CONFIG_THERMAL_GOV_USER_SPACE is not set
# CONFIG_CPU_THERMAL is not set
CONFIG_DEVFREQ_THERMAL=y
# CONFIG_THERMAL_EMULATION is not set
CONFIG_THERMAL_MMIO=m
CONFIG_HISI_THERMAL=m
CONFIG_IMX_THERMAL=y
# CONFIG_IMX8MM_THERMAL is not set
CONFIG_K3_THERMAL=m
CONFIG_QORIQ_THERMAL=y
CONFIG_SPEAR_THERMAL=m
CONFIG_SUN8I_THERMAL=m
CONFIG_ROCKCHIP_THERMAL=m
# CONFIG_RCAR_THERMAL is not set
CONFIG_RCAR_GEN3_THERMAL=m
CONFIG_RZG2L_THERMAL=y
# CONFIG_KIRKWOOD_THERMAL is not set
CONFIG_DOVE_THERMAL=m
# CONFIG_ARMADA_THERMAL is not set
# CONFIG_DA9062_THERMAL is not set
# CONFIG_MTK_THERMAL is not set

#
# Intel thermal drivers
#

#
# ACPI INT340X thermal drivers
#
# end of ACPI INT340X thermal drivers
# end of Intel thermal drivers

#
# Broadcom thermal drivers
#
CONFIG_BCM2711_THERMAL=m
CONFIG_BCM2835_THERMAL=m
CONFIG_BRCMSTB_THERMAL=y
# CONFIG_BCM_NS_THERMAL is not set
# CONFIG_BCM_SR_THERMAL is not set
# end of Broadcom thermal drivers

#
# Texas Instruments thermal drivers
#
CONFIG_TI_SOC_THERMAL=y
CONFIG_TI_THERMAL=y
CONFIG_OMAP3_THERMAL=y
# CONFIG_OMAP4_THERMAL is not set
# CONFIG_OMAP5_THERMAL is not set
# CONFIG_DRA752_THERMAL is not set
# end of Texas Instruments thermal drivers

#
# Samsung thermal drivers
#
CONFIG_EXYNOS_THERMAL=y
# end of Samsung thermal drivers

#
# NVIDIA Tegra thermal drivers
#
# CONFIG_TEGRA_SOCTHERM is not set
# CONFIG_TEGRA_BPMP_THERMAL is not set
# CONFIG_TEGRA30_TSENSOR is not set
# end of NVIDIA Tegra thermal drivers

# CONFIG_GENERIC_ADC_THERMAL is not set

#
# Qualcomm thermal drivers
#
CONFIG_QCOM_TSENS=y
# CONFIG_QCOM_SPMI_ADC_TM5 is not set
CONFIG_QCOM_SPMI_TEMP_ALARM=m
# end of Qualcomm thermal drivers

# CONFIG_UNIPHIER_THERMAL is not set
CONFIG_SPRD_THERMAL=y
CONFIG_KHADAS_MCU_FAN_THERMAL=y
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_CORE=y
CONFIG_WATCHDOG_NOWAYOUT=y
# CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED is not set
CONFIG_WATCHDOG_OPEN_TIMEOUT=0
# CONFIG_WATCHDOG_SYSFS is not set
# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set

#
# Watchdog Pretimeout Governors
#
# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set

#
# Watchdog Device Drivers
#
CONFIG_SOFT_WATCHDOG=m
CONFIG_BD957XMUF_WATCHDOG=m
CONFIG_DA9052_WATCHDOG=m
CONFIG_DA9055_WATCHDOG=m
# CONFIG_DA9063_WATCHDOG is not set
CONFIG_DA9062_WATCHDOG=y
CONFIG_GPIO_WATCHDOG=y
CONFIG_GPIO_WATCHDOG_ARCH_INITCALL=y
CONFIG_MENF21BMC_WATCHDOG=y
# CONFIG_WM831X_WATCHDOG is not set
# CONFIG_XILINX_WATCHDOG is not set
# CONFIG_ZIIRAVE_WATCHDOG is not set
# CONFIG_RAVE_SP_WATCHDOG is not set
CONFIG_SL28CPLD_WATCHDOG=m
CONFIG_ARMADA_37XX_WATCHDOG=y
CONFIG_ASM9260_WATCHDOG=m
# CONFIG_AT91RM9200_WATCHDOG is not set
# CONFIG_AT91SAM9X_WATCHDOG is not set
# CONFIG_SAMA5D4_WATCHDOG is not set
# CONFIG_CADENCE_WATCHDOG is not set
CONFIG_FTWDT010_WATCHDOG=m
CONFIG_S3C2410_WATCHDOG=y
CONFIG_DW_WATCHDOG=y
# CONFIG_EP93XX_WATCHDOG is not set
# CONFIG_OMAP_WATCHDOG is not set
CONFIG_PNX4008_WATCHDOG=m
# CONFIG_DAVINCI_WATCHDOG is not set
# CONFIG_K3_RTI_WATCHDOG is not set
CONFIG_RN5T618_WATCHDOG=m
# CONFIG_SUNXI_WATCHDOG is not set
# CONFIG_NPCM7XX_WATCHDOG is not set
# CONFIG_TWL4030_WATCHDOG is not set
CONFIG_STMP3XXX_RTC_WATCHDOG=y
CONFIG_TS4800_WATCHDOG=y
CONFIG_TS72XX_WATCHDOG=y
CONFIG_MAX63XX_WATCHDOG=y
# CONFIG_MAX77620_WATCHDOG is not set
CONFIG_IMX2_WDT=y
CONFIG_IMX7ULP_WDT=y
CONFIG_MOXART_WDT=y
CONFIG_ST_LPC_WATCHDOG=m
CONFIG_TEGRA_WATCHDOG=y
CONFIG_QCOM_WDT=y
CONFIG_MESON_GXBB_WATCHDOG=y
CONFIG_MESON_WATCHDOG=y
# CONFIG_MEDIATEK_WATCHDOG is not set
CONFIG_DIGICOLOR_WATCHDOG=m
CONFIG_LPC18XX_WATCHDOG=m
CONFIG_RENESAS_WDT=m
CONFIG_RENESAS_RZAWDT=y
# CONFIG_RENESAS_RZN1WDT is not set
CONFIG_RENESAS_RZG2LWDT=y
CONFIG_ASPEED_WATCHDOG=y
CONFIG_UNIPHIER_WATCHDOG=y
CONFIG_RTD119X_WATCHDOG=y
CONFIG_REALTEK_OTTO_WDT=m
# CONFIG_SPRD_WATCHDOG is not set
CONFIG_VISCONTI_WATCHDOG=y
CONFIG_MSC313E_WATCHDOG=m
CONFIG_APPLE_WATCHDOG=m
CONFIG_SUNPLUS_WATCHDOG=y
CONFIG_SC520_WDT=y
# CONFIG_KEMPLD_WDT is not set
CONFIG_BCM47XX_WDT=y
CONFIG_BCM2835_WDT=m
# CONFIG_BCM_KONA_WDT is not set
CONFIG_BCM7038_WDT=m
# CONFIG_IMGPDC_WDT is not set
CONFIG_MPC5200_WDT=y
# CONFIG_MEN_A21_WDT is not set
# CONFIG_UML_WATCHDOG is not set

#
# USB-based Watchdog Cards
#
CONFIG_USBPCWATCHDOG=m
CONFIG_SSB_POSSIBLE=y
# CONFIG_SSB is not set
CONFIG_BCMA_POSSIBLE=y
CONFIG_BCMA=m
CONFIG_BCMA_HOST_SOC=y
CONFIG_BCMA_DRIVER_MIPS=y
CONFIG_BCMA_PFLASH=y
CONFIG_BCMA_SFLASH=y
CONFIG_BCMA_NFLASH=y
# CONFIG_BCMA_DRIVER_GMAC_CMN is not set
CONFIG_BCMA_DRIVER_GPIO=y
# CONFIG_BCMA_DEBUG is not set

#
# Multifunction device drivers
#
CONFIG_MFD_CORE=y
CONFIG_MFD_ACT8945A=m
CONFIG_MFD_SUN4I_GPADC=m
CONFIG_MFD_AS3711=y
CONFIG_MFD_AS3722=y
# CONFIG_PMIC_ADP5520 is not set
# CONFIG_MFD_AAT2870_CORE is not set
CONFIG_MFD_AT91_USART=m
CONFIG_MFD_ATMEL_FLEXCOM=m
CONFIG_MFD_ATMEL_HLCDC=y
CONFIG_MFD_ATMEL_SMC=y
# CONFIG_MFD_BCM590XX is not set
CONFIG_MFD_BD9571MWV=y
CONFIG_MFD_AXP20X=y
CONFIG_MFD_AXP20X_I2C=y
# CONFIG_MFD_MADERA is not set
CONFIG_MFD_ASIC3=y
# CONFIG_PMIC_DA903X is not set
CONFIG_PMIC_DA9052=y
CONFIG_MFD_DA9052_SPI=y
# CONFIG_MFD_DA9052_I2C is not set
CONFIG_MFD_DA9055=y
CONFIG_MFD_DA9062=m
# CONFIG_MFD_DA9063 is not set
CONFIG_MFD_DA9150=m
CONFIG_MFD_DLN2=y
CONFIG_MFD_ENE_KB3930=y
CONFIG_MFD_EXYNOS_LPASS=m
CONFIG_MFD_GATEWORKS_GSC=y
CONFIG_MFD_MC13XXX=m
CONFIG_MFD_MC13XXX_SPI=m
CONFIG_MFD_MC13XXX_I2C=m
CONFIG_MFD_MP2629=y
# CONFIG_MFD_MXS_LRADC is not set
CONFIG_MFD_MX25_TSADC=m
CONFIG_MFD_HI6421_PMIC=y
CONFIG_MFD_HI6421_SPMI=m
CONFIG_MFD_HI655X_PMIC=m
CONFIG_HTC_PASIC3=m
# CONFIG_HTC_I2CPLD is not set
# CONFIG_INTEL_SOC_PMIC is not set
# CONFIG_MFD_IQS62X is not set
CONFIG_MFD_KEMPLD=m
CONFIG_MFD_88PM800=m
CONFIG_MFD_88PM805=m
CONFIG_MFD_88PM860X=y
# CONFIG_MFD_MAX14577 is not set
# CONFIG_MFD_MAX77620 is not set
CONFIG_MFD_MAX77650=m
CONFIG_MFD_MAX77686=m
CONFIG_MFD_MAX77693=m
# CONFIG_MFD_MAX77714 is not set
CONFIG_MFD_MAX77843=y
# CONFIG_MFD_MAX8907 is not set
CONFIG_MFD_MAX8925=y
# CONFIG_MFD_MAX8997 is not set
CONFIG_MFD_MAX8998=y
CONFIG_MFD_MT6360=y
CONFIG_MFD_MT6370=m
# CONFIG_MFD_MT6397 is not set
# CONFIG_MFD_MENF21BMC is not set
CONFIG_MFD_OCELOT=m
CONFIG_EZX_PCAP=y
CONFIG_MFD_CPCAP=m
CONFIG_MFD_VIPERBOARD=m
CONFIG_MFD_NTXEC=y
# CONFIG_MFD_RETU is not set
CONFIG_MFD_PCF50633=m
CONFIG_PCF50633_ADC=m
CONFIG_PCF50633_GPIO=m
CONFIG_UCB1400_CORE=m
CONFIG_MFD_PM8XXX=y
# CONFIG_MFD_SPMI_PMIC is not set
CONFIG_MFD_SY7636A=m
# CONFIG_MFD_RT4831 is not set
# CONFIG_MFD_RT5033 is not set
# CONFIG_MFD_RT5120 is not set
CONFIG_MFD_RC5T583=y
CONFIG_MFD_RK808=y
CONFIG_MFD_RN5T618=m
CONFIG_MFD_SEC_CORE=m
# CONFIG_MFD_SI476X_CORE is not set
CONFIG_MFD_SIMPLE_MFD_I2C=m
# CONFIG_MFD_SL28CPLD is not set
CONFIG_MFD_SM501=y
# CONFIG_MFD_SM501_GPIO is not set
CONFIG_MFD_SKY81452=y
# CONFIG_MFD_SC27XX_PMIC is not set
CONFIG_ABX500_CORE=y
# CONFIG_MFD_STMPE is not set
CONFIG_MFD_SUN6I_PRCM=y
CONFIG_MFD_SYSCON=y
# CONFIG_MFD_TI_AM335X_TSCADC is not set
CONFIG_MFD_LP3943=m
# CONFIG_MFD_LP8788 is not set
# CONFIG_MFD_TI_LMU is not set
CONFIG_MFD_OMAP_USB_HOST=y
CONFIG_MFD_PALMAS=y
CONFIG_TPS6105X=m
# CONFIG_TPS65010 is not set
CONFIG_TPS6507X=y
CONFIG_MFD_TPS65086=m
# CONFIG_MFD_TPS65090 is not set
CONFIG_MFD_TPS65217=m
CONFIG_MFD_TI_LP873X=y
# CONFIG_MFD_TI_LP87565 is not set
# CONFIG_MFD_TPS65218 is not set
# CONFIG_MFD_TPS6586X is not set
CONFIG_MFD_TPS65910=y
CONFIG_MFD_TPS65912=y
CONFIG_MFD_TPS65912_I2C=y
# CONFIG_MFD_TPS65912_SPI is not set
CONFIG_TWL4030_CORE=y
CONFIG_MFD_TWL4030_AUDIO=y
CONFIG_TWL6040_CORE=y
# CONFIG_MFD_WL1273_CORE is not set
CONFIG_MFD_LM3533=y
CONFIG_MFD_TC3589X=y
# CONFIG_MFD_TQMX86 is not set
CONFIG_MFD_LOCHNAGAR=y
CONFIG_MFD_ARIZONA=m
# CONFIG_MFD_ARIZONA_I2C is not set
CONFIG_MFD_ARIZONA_SPI=m
# CONFIG_MFD_CS47L24 is not set
CONFIG_MFD_WM5102=y
# CONFIG_MFD_WM5110 is not set
CONFIG_MFD_WM8997=y
CONFIG_MFD_WM8998=y
CONFIG_MFD_WM8400=y
CONFIG_MFD_WM831X=y
CONFIG_MFD_WM831X_I2C=y
# CONFIG_MFD_WM831X_SPI is not set
# CONFIG_MFD_WM8350_I2C is not set
CONFIG_MFD_WM8994=m
CONFIG_MFD_STW481X=m
# CONFIG_MFD_ROHM_BD718XX is not set
# CONFIG_MFD_ROHM_BD71828 is not set
CONFIG_MFD_ROHM_BD957XMUF=m
CONFIG_MFD_STM32_LPTIMER=m
CONFIG_MFD_STM32_TIMERS=m
# CONFIG_MFD_STPMIC1 is not set
CONFIG_MFD_STMFX=y
# CONFIG_MFD_ATC260X_I2C is not set
CONFIG_MFD_KHADAS_MCU=y
# CONFIG_MFD_ACER_A500_EC is not set
CONFIG_MFD_QCOM_PM8008=m
CONFIG_RAVE_SP_CORE=m
CONFIG_MFD_INTEL_M10_BMC=y
CONFIG_MFD_RSMU_I2C=m
CONFIG_MFD_RSMU_SPI=m
# end of Multifunction device drivers

CONFIG_REGULATOR=y
CONFIG_REGULATOR_DEBUG=y
CONFIG_REGULATOR_FIXED_VOLTAGE=m
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
CONFIG_REGULATOR_USERSPACE_CONSUMER=y
# CONFIG_REGULATOR_88PG86X is not set
CONFIG_REGULATOR_88PM800=m
# CONFIG_REGULATOR_88PM8607 is not set
# CONFIG_REGULATOR_ACT8865 is not set
CONFIG_REGULATOR_ACT8945A=m
# CONFIG_REGULATOR_AD5398 is not set
CONFIG_REGULATOR_ANATOP=m
# CONFIG_REGULATOR_ARIZONA_LDO1 is not set
# CONFIG_REGULATOR_ARIZONA_MICSUPP is not set
CONFIG_REGULATOR_AS3711=m
# CONFIG_REGULATOR_AS3722 is not set
CONFIG_REGULATOR_AXP20X=y
CONFIG_REGULATOR_BD9571MWV=m
CONFIG_REGULATOR_BD957XMUF=m
# CONFIG_REGULATOR_CPCAP is not set
# CONFIG_REGULATOR_DA9052 is not set
# CONFIG_REGULATOR_DA9055 is not set
CONFIG_REGULATOR_DA9062=m
CONFIG_REGULATOR_DA9121=m
# CONFIG_REGULATOR_DA9210 is not set
CONFIG_REGULATOR_DA9211=y
CONFIG_REGULATOR_FAN53555=y
CONFIG_REGULATOR_FAN53880=y
# CONFIG_REGULATOR_GPIO is not set
CONFIG_REGULATOR_HI6421=m
# CONFIG_REGULATOR_HI6421V530 is not set
CONFIG_REGULATOR_HI655X=m
# CONFIG_REGULATOR_HI6421V600 is not set
CONFIG_REGULATOR_ISL9305=m
# CONFIG_REGULATOR_ISL6271A is not set
CONFIG_REGULATOR_LOCHNAGAR=y
CONFIG_REGULATOR_LP3971=y
CONFIG_REGULATOR_LP3972=y
# CONFIG_REGULATOR_LP872X is not set
CONFIG_REGULATOR_LP873X=y
# CONFIG_REGULATOR_LP8755 is not set
# CONFIG_REGULATOR_LTC3589 is not set
CONFIG_REGULATOR_LTC3676=m
CONFIG_REGULATOR_MAX1586=y
CONFIG_REGULATOR_MAX77620=y
# CONFIG_REGULATOR_MAX77650 is not set
CONFIG_REGULATOR_MAX8649=y
CONFIG_REGULATOR_MAX8660=m
CONFIG_REGULATOR_MAX8893=y
CONFIG_REGULATOR_MAX8907=m
# CONFIG_REGULATOR_MAX8925 is not set
# CONFIG_REGULATOR_MAX8952 is not set
# CONFIG_REGULATOR_MAX8973 is not set
CONFIG_REGULATOR_MAX8998=m
CONFIG_REGULATOR_MAX20086=m
# CONFIG_REGULATOR_MAX77686 is not set
# CONFIG_REGULATOR_MAX77693 is not set
# CONFIG_REGULATOR_MAX77802 is not set
CONFIG_REGULATOR_MAX77826=y
CONFIG_REGULATOR_MC13XXX_CORE=m
CONFIG_REGULATOR_MC13783=m
# CONFIG_REGULATOR_MC13892 is not set
# CONFIG_REGULATOR_MCP16502 is not set
CONFIG_REGULATOR_MP5416=m
# CONFIG_REGULATOR_MP8859 is not set
CONFIG_REGULATOR_MP886X=m
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
CONFIG_REGULATOR_MT6315=m
CONFIG_REGULATOR_MT6360=y
CONFIG_REGULATOR_MT6370=m
CONFIG_REGULATOR_MT6380=m
# CONFIG_REGULATOR_PALMAS is not set
# CONFIG_REGULATOR_PBIAS is not set
# CONFIG_REGULATOR_PCA9450 is not set
CONFIG_REGULATOR_PCAP=m
CONFIG_REGULATOR_PCF50633=m
# CONFIG_REGULATOR_PF8X00 is not set
CONFIG_REGULATOR_PFUZE100=m
# CONFIG_REGULATOR_PV88060 is not set
CONFIG_REGULATOR_PV88080=y
# CONFIG_REGULATOR_PV88090 is not set
CONFIG_REGULATOR_PWM=m
CONFIG_REGULATOR_QCOM_RPMH=m
# CONFIG_REGULATOR_QCOM_SMD_RPM is not set
CONFIG_REGULATOR_QCOM_SPMI=m
CONFIG_REGULATOR_QCOM_USB_VBUS=m
# CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY is not set
CONFIG_REGULATOR_RC5T583=y
# CONFIG_REGULATOR_RK808 is not set
CONFIG_REGULATOR_RN5T618=m
CONFIG_REGULATOR_RT4801=m
# CONFIG_REGULATOR_RT5190A is not set
# CONFIG_REGULATOR_RT5759 is not set
CONFIG_REGULATOR_RT6160=m
CONFIG_REGULATOR_RT6245=m
CONFIG_REGULATOR_RTQ2134=m
CONFIG_REGULATOR_RTMV20=y
CONFIG_REGULATOR_RTQ6752=y
CONFIG_REGULATOR_S2MPA01=m
# CONFIG_REGULATOR_S2MPS11 is not set
CONFIG_REGULATOR_S5M8767=y
CONFIG_REGULATOR_SC2731=y
CONFIG_REGULATOR_SKY81452=m
CONFIG_REGULATOR_SLG51000=m
CONFIG_REGULATOR_STM32_BOOSTER=m
CONFIG_REGULATOR_STM32_VREFBUF=m
CONFIG_REGULATOR_STM32_PWR=y
CONFIG_REGULATOR_TI_ABB=y
CONFIG_REGULATOR_STW481X_VMMC=y
# CONFIG_REGULATOR_SY7636A is not set
CONFIG_REGULATOR_SY8106A=m
CONFIG_REGULATOR_SY8824X=y
CONFIG_REGULATOR_SY8827N=m
CONFIG_REGULATOR_TPS51632=m
# CONFIG_REGULATOR_TPS6105X is not set
CONFIG_REGULATOR_TPS62360=m
CONFIG_REGULATOR_TPS6286X=y
CONFIG_REGULATOR_TPS65023=m
# CONFIG_REGULATOR_TPS6507X is not set
# CONFIG_REGULATOR_TPS65086 is not set
CONFIG_REGULATOR_TPS65132=m
CONFIG_REGULATOR_TPS65217=m
CONFIG_REGULATOR_TPS6524X=m
CONFIG_REGULATOR_TPS65910=m
# CONFIG_REGULATOR_TPS65912 is not set
CONFIG_REGULATOR_TPS68470=m
CONFIG_REGULATOR_TWL4030=y
CONFIG_REGULATOR_UNIPHIER=m
CONFIG_REGULATOR_VCTRL=y
CONFIG_REGULATOR_WM831X=m
CONFIG_REGULATOR_WM8400=y
CONFIG_REGULATOR_WM8994=m
CONFIG_REGULATOR_QCOM_LABIBB=y
# CONFIG_RC_CORE is not set
CONFIG_CEC_CORE=y
CONFIG_CEC_NOTIFIER=y

#
# CEC support
#
CONFIG_MEDIA_CEC_SUPPORT=y
# CONFIG_CEC_CH7322 is not set
CONFIG_CEC_MESON_AO=y
CONFIG_CEC_MESON_G12A_AO=m
# CONFIG_CEC_GPIO is not set
# CONFIG_CEC_SAMSUNG_S5P is not set
# CONFIG_CEC_STI is not set
CONFIG_CEC_STM32=m
CONFIG_CEC_TEGRA=m
# end of CEC support

CONFIG_MEDIA_SUPPORT=y
# CONFIG_MEDIA_SUPPORT_FILTER is not set
CONFIG_MEDIA_SUBDRV_AUTOSELECT=y

#
# Media device types
#
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_SDR_SUPPORT=y
CONFIG_MEDIA_PLATFORM_SUPPORT=y
CONFIG_MEDIA_TEST_SUPPORT=y
# end of Media device types

#
# Media core support
#
CONFIG_VIDEO_DEV=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_DVB_CORE=y
# end of Media core support

#
# Video4Linux options
#
CONFIG_VIDEO_V4L2_I2C=y
CONFIG_VIDEO_V4L2_SUBDEV_API=y
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
CONFIG_VIDEO_TUNER=y
CONFIG_V4L2_MEM2MEM_DEV=m
# CONFIG_V4L2_FLASH_LED_CLASS is not set
CONFIG_V4L2_FWNODE=y
CONFIG_V4L2_ASYNC=y
# end of Video4Linux options

#
# Media controller options
#
CONFIG_MEDIA_CONTROLLER_DVB=y
CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
# end of Media controller options

#
# Digital TV options
#
# CONFIG_DVB_MMAP is not set
CONFIG_DVB_MAX_ADAPTERS=16
CONFIG_DVB_DYNAMIC_MINORS=y
CONFIG_DVB_DEMUX_SECTION_LOSS_LOG=y
CONFIG_DVB_ULE_DEBUG=y
# end of Digital TV options

#
# Media drivers
#

#
# Media drivers
#
CONFIG_MEDIA_USB_SUPPORT=y

#
# Webcam devices
#
CONFIG_USB_GSPCA=m
# CONFIG_USB_GSPCA_BENQ is not set
# CONFIG_USB_GSPCA_CONEX is not set
CONFIG_USB_GSPCA_CPIA1=m
CONFIG_USB_GSPCA_DTCS033=m
CONFIG_USB_GSPCA_ETOMS=m
# CONFIG_USB_GSPCA_FINEPIX is not set
CONFIG_USB_GSPCA_JEILINJ=m
CONFIG_USB_GSPCA_JL2005BCD=m
CONFIG_USB_GSPCA_KINECT=m
CONFIG_USB_GSPCA_KONICA=m
CONFIG_USB_GSPCA_MARS=m
CONFIG_USB_GSPCA_MR97310A=m
CONFIG_USB_GSPCA_NW80X=m
# CONFIG_USB_GSPCA_OV519 is not set
CONFIG_USB_GSPCA_OV534=m
# CONFIG_USB_GSPCA_OV534_9 is not set
CONFIG_USB_GSPCA_PAC207=m
CONFIG_USB_GSPCA_PAC7302=m
# CONFIG_USB_GSPCA_PAC7311 is not set
# CONFIG_USB_GSPCA_SE401 is not set
CONFIG_USB_GSPCA_SN9C2028=m
CONFIG_USB_GSPCA_SN9C20X=m
CONFIG_USB_GSPCA_SONIXB=m
CONFIG_USB_GSPCA_SONIXJ=m
# CONFIG_USB_GSPCA_SPCA1528 is not set
# CONFIG_USB_GSPCA_SPCA500 is not set
CONFIG_USB_GSPCA_SPCA501=m
# CONFIG_USB_GSPCA_SPCA505 is not set
CONFIG_USB_GSPCA_SPCA506=m
CONFIG_USB_GSPCA_SPCA508=m
CONFIG_USB_GSPCA_SPCA561=m
CONFIG_USB_GSPCA_SQ905=m
CONFIG_USB_GSPCA_SQ905C=m
CONFIG_USB_GSPCA_SQ930X=m
CONFIG_USB_GSPCA_STK014=m
CONFIG_USB_GSPCA_STK1135=m
CONFIG_USB_GSPCA_STV0680=m
CONFIG_USB_GSPCA_SUNPLUS=m
CONFIG_USB_GSPCA_T613=m
# CONFIG_USB_GSPCA_TOPRO is not set
CONFIG_USB_GSPCA_TOUPTEK=m
CONFIG_USB_GSPCA_TV8532=m
CONFIG_USB_GSPCA_VC032X=m
CONFIG_USB_GSPCA_VICAM=m
CONFIG_USB_GSPCA_XIRLINK_CIT=m
CONFIG_USB_GSPCA_ZC3XX=m
CONFIG_USB_GL860=m
CONFIG_USB_M5602=m
CONFIG_USB_STV06XX=m
# CONFIG_USB_PWC is not set
CONFIG_USB_S2255=m
CONFIG_VIDEO_USBTV=m
CONFIG_USB_VIDEO_CLASS=y
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y

#
# Analog TV USB devices
#
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
CONFIG_VIDEO_GO7007_LOADER=m
CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m
# CONFIG_VIDEO_HDPVR is not set
CONFIG_VIDEO_PVRUSB2=m
# CONFIG_VIDEO_PVRUSB2_SYSFS is not set
# CONFIG_VIDEO_PVRUSB2_DVB is not set
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160=m

#
# Analog/digital TV USB devices
#
CONFIG_VIDEO_AU0828=y
# CONFIG_VIDEO_AU0828_V4L2 is not set
CONFIG_VIDEO_CX231XX=y
CONFIG_VIDEO_CX231XX_ALSA=m
# CONFIG_VIDEO_CX231XX_DVB is not set

#
# Digital TV USB devices
#
CONFIG_DVB_AS102=m
# CONFIG_DVB_B2C2_FLEXCOP_USB is not set
CONFIG_DVB_USB_V2=y
CONFIG_DVB_USB_AF9015=y
# CONFIG_DVB_USB_AF9035 is not set
CONFIG_DVB_USB_ANYSEE=y
CONFIG_DVB_USB_AU6610=m
# CONFIG_DVB_USB_AZ6007 is not set
CONFIG_DVB_USB_CE6230=m
CONFIG_DVB_USB_DVBSKY=m
CONFIG_DVB_USB_EC168=y
# CONFIG_DVB_USB_GL861 is not set
CONFIG_DVB_USB_MXL111SF=y
# CONFIG_DVB_USB_RTL28XXU is not set
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_SMS_USB_DRV is not set

#
# Webcam, TV (analog/digital) USB devices
#
CONFIG_VIDEO_EM28XX=m
CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_EM28XX_ALSA=m
# CONFIG_VIDEO_EM28XX_DVB is not set

#
# Software defined radio USB devices
#
# CONFIG_USB_AIRSPY is not set
CONFIG_USB_HACKRF=m
CONFIG_USB_MSI2500=m
CONFIG_RADIO_ADAPTERS=y
# CONFIG_RADIO_SAA7706H is not set
CONFIG_RADIO_SHARK=m
# CONFIG_RADIO_SHARK2 is not set
CONFIG_RADIO_SI4713=m
CONFIG_RADIO_TEA575X=m
# CONFIG_RADIO_TEA5764 is not set
# CONFIG_RADIO_TEF6862 is not set
# CONFIG_RADIO_WL1273 is not set
# CONFIG_USB_DSBR is not set
CONFIG_USB_KEENE=m
# CONFIG_USB_MA901 is not set
CONFIG_USB_MR800=m
CONFIG_USB_RAREMONO=m
CONFIG_RADIO_SI470X=y
CONFIG_USB_SI470X=y
CONFIG_I2C_SI470X=y
# CONFIG_USB_SI4713 is not set
CONFIG_PLATFORM_SI4713=m
CONFIG_I2C_SI4713=m
# CONFIG_V4L_RADIO_ISA_DRIVERS is not set
# CONFIG_MEDIA_PLATFORM_DRIVERS is not set
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VIDEO_VIM2M=m
CONFIG_VIDEO_VICODEC=m
CONFIG_VIDEO_VIMC=m
CONFIG_VIDEO_VIVID=m
# CONFIG_VIDEO_VIVID_CEC is not set
CONFIG_VIDEO_VIVID_MAX_DEVS=64
CONFIG_DVB_TEST_DRIVERS=y
CONFIG_DVB_VIDTV=m
CONFIG_CYPRESS_FIRMWARE=m
CONFIG_VIDEO_CX2341X=y
CONFIG_VIDEO_TVEEPROM=y
CONFIG_VIDEO_V4L2_TPG=m
CONFIG_VIDEOBUF2_CORE=y
CONFIG_VIDEOBUF2_V4L2=y
CONFIG_VIDEOBUF2_MEMOPS=y
CONFIG_VIDEOBUF2_DMA_CONTIG=m
CONFIG_VIDEOBUF2_VMALLOC=y
CONFIG_VIDEOBUF2_DMA_SG=y
# end of Media drivers

#
# Media ancillary drivers
#
CONFIG_MEDIA_ATTACH=y

#
# Camera sensor devices
#
CONFIG_VIDEO_APTINA_PLL=m
CONFIG_VIDEO_CCS_PLL=m
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_HI556=y
# CONFIG_VIDEO_HI846 is not set
# CONFIG_VIDEO_HI847 is not set
CONFIG_VIDEO_IMX208=y
CONFIG_VIDEO_IMX214=m
CONFIG_VIDEO_IMX219=y
CONFIG_VIDEO_IMX258=m
CONFIG_VIDEO_IMX274=y
CONFIG_VIDEO_IMX290=y
# CONFIG_VIDEO_IMX319 is not set
CONFIG_VIDEO_IMX334=m
# CONFIG_VIDEO_IMX335 is not set
CONFIG_VIDEO_IMX355=y
CONFIG_VIDEO_IMX412=m
CONFIG_VIDEO_MAX9271_LIB=m
CONFIG_VIDEO_MT9M001=m
CONFIG_VIDEO_MT9M032=m
CONFIG_VIDEO_MT9M111=m
# CONFIG_VIDEO_MT9P031 is not set
CONFIG_VIDEO_MT9T001=m
CONFIG_VIDEO_MT9T112=m
CONFIG_VIDEO_MT9V011=y
# CONFIG_VIDEO_MT9V032 is not set
# CONFIG_VIDEO_MT9V111 is not set
CONFIG_VIDEO_NOON010PC30=m
CONFIG_VIDEO_OG01A1B=y
CONFIG_VIDEO_OV02A10=y
# CONFIG_VIDEO_OV08D10 is not set
# CONFIG_VIDEO_OV13858 is not set
CONFIG_VIDEO_OV13B10=y
CONFIG_VIDEO_OV2640=m
# CONFIG_VIDEO_OV2659 is not set
CONFIG_VIDEO_OV2680=y
CONFIG_VIDEO_OV2685=y
CONFIG_VIDEO_OV2740=m
CONFIG_VIDEO_OV5640=y
CONFIG_VIDEO_OV5645=y
CONFIG_VIDEO_OV5647=m
# CONFIG_VIDEO_OV5670 is not set
CONFIG_VIDEO_OV5675=y
CONFIG_VIDEO_OV5693=y
CONFIG_VIDEO_OV5695=m
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
CONFIG_VIDEO_OV7640=m
# CONFIG_VIDEO_OV7670 is not set
CONFIG_VIDEO_OV772X=y
# CONFIG_VIDEO_OV7740 is not set
CONFIG_VIDEO_OV8856=y
CONFIG_VIDEO_OV9282=m
# CONFIG_VIDEO_OV9640 is not set
CONFIG_VIDEO_OV9650=y
CONFIG_VIDEO_OV9734=y
# CONFIG_VIDEO_RDACM20 is not set
CONFIG_VIDEO_RDACM21=m
CONFIG_VIDEO_RJ54N1=y
# CONFIG_VIDEO_S5C73M3 is not set
CONFIG_VIDEO_S5K4ECGX=m
CONFIG_VIDEO_S5K5BAF=y
CONFIG_VIDEO_S5K6A3=y
# CONFIG_VIDEO_S5K6AA is not set
CONFIG_VIDEO_SR030PC30=m
CONFIG_VIDEO_VS6624=m
CONFIG_VIDEO_CCS=m
# CONFIG_VIDEO_ET8EK8 is not set
# CONFIG_VIDEO_M5MOLS is not set
# end of Camera sensor devices

#
# Lens drivers
#
CONFIG_VIDEO_AD5820=y
CONFIG_VIDEO_AK7375=y
# CONFIG_VIDEO_DW9714 is not set
CONFIG_VIDEO_DW9768=m
CONFIG_VIDEO_DW9807_VCM=m
# end of Lens drivers

#
# Flash devices
#
CONFIG_VIDEO_ADP1653=m
CONFIG_VIDEO_LM3560=y
CONFIG_VIDEO_LM3646=m
# end of Flash devices

#
# Audio decoders, processors and mixers
#
# CONFIG_VIDEO_CS3308 is not set
CONFIG_VIDEO_CS5345=m
CONFIG_VIDEO_CS53L32A=m
CONFIG_VIDEO_MSP3400=m
CONFIG_VIDEO_SONY_BTF_MPX=y
CONFIG_VIDEO_TDA1997X=m
# CONFIG_VIDEO_TDA7432 is not set
# CONFIG_VIDEO_TDA9840 is not set
CONFIG_VIDEO_TEA6415C=m
# CONFIG_VIDEO_TEA6420 is not set
CONFIG_VIDEO_TLV320AIC23B=y
# CONFIG_VIDEO_TVAUDIO is not set
CONFIG_VIDEO_UDA1342=m
# CONFIG_VIDEO_VP27SMPX is not set
# CONFIG_VIDEO_WM8739 is not set
CONFIG_VIDEO_WM8775=m
# end of Audio decoders, processors and mixers

#
# RDS decoders
#
# CONFIG_VIDEO_SAA6588 is not set
# end of RDS decoders

#
# Video decoders
#
CONFIG_VIDEO_ADV7180=y
CONFIG_VIDEO_ADV7183=y
CONFIG_VIDEO_ADV748X=m
CONFIG_VIDEO_ADV7604=y
# CONFIG_VIDEO_ADV7604_CEC is not set
CONFIG_VIDEO_ADV7842=y
# CONFIG_VIDEO_ADV7842_CEC is not set
# CONFIG_VIDEO_BT819 is not set
CONFIG_VIDEO_BT856=y
# CONFIG_VIDEO_BT866 is not set
CONFIG_VIDEO_ISL7998X=m
CONFIG_VIDEO_KS0127=y
# CONFIG_VIDEO_MAX9286 is not set
CONFIG_VIDEO_ML86V7667=m
# CONFIG_VIDEO_SAA7110 is not set
CONFIG_VIDEO_SAA711X=m
# CONFIG_VIDEO_TC358743 is not set
# CONFIG_VIDEO_TVP514X is not set
CONFIG_VIDEO_TVP5150=y
# CONFIG_VIDEO_TVP7002 is not set
CONFIG_VIDEO_TW2804=y
CONFIG_VIDEO_TW9903=m
CONFIG_VIDEO_TW9906=m
# CONFIG_VIDEO_TW9910 is not set
CONFIG_VIDEO_VPX3220=y

#
# Video and audio decoders
#
# CONFIG_VIDEO_SAA717X is not set
CONFIG_VIDEO_CX25840=y
# end of Video decoders

#
# Video encoders
#
# CONFIG_VIDEO_AD9389B is not set
CONFIG_VIDEO_ADV7170=m
CONFIG_VIDEO_ADV7175=y
# CONFIG_VIDEO_ADV7343 is not set
CONFIG_VIDEO_ADV7393=y
# CONFIG_VIDEO_ADV7511 is not set
CONFIG_VIDEO_AK881X=m
# CONFIG_VIDEO_SAA7127 is not set
# CONFIG_VIDEO_SAA7185 is not set
CONFIG_VIDEO_THS8200=y
# end of Video encoders

#
# Video improvement chips
#
# CONFIG_VIDEO_UPD64031A is not set
CONFIG_VIDEO_UPD64083=y
# end of Video improvement chips

#
# Audio/Video compression chips
#
# CONFIG_VIDEO_SAA6752HS is not set
# end of Audio/Video compression chips

#
# SDR tuner chips
#
CONFIG_SDR_MAX2175=y
# end of SDR tuner chips

#
# Miscellaneous helper chips
#
CONFIG_VIDEO_I2C=y
CONFIG_VIDEO_M52790=y
# CONFIG_VIDEO_ST_MIPID02 is not set
CONFIG_VIDEO_THS7303=y
# end of Miscellaneous helper chips

#
# Media SPI Adapters
#
CONFIG_CXD2880_SPI_DRV=m
CONFIG_VIDEO_GS1662=y
# end of Media SPI Adapters

CONFIG_MEDIA_TUNER=y

#
# Customize TV tuners
#
# CONFIG_MEDIA_TUNER_E4000 is not set
CONFIG_MEDIA_TUNER_FC0011=y
# CONFIG_MEDIA_TUNER_FC0012 is not set
CONFIG_MEDIA_TUNER_FC0013=y
# CONFIG_MEDIA_TUNER_FC2580 is not set
CONFIG_MEDIA_TUNER_IT913X=m
CONFIG_MEDIA_TUNER_M88RS6000T=m
# CONFIG_MEDIA_TUNER_MAX2165 is not set
CONFIG_MEDIA_TUNER_MC44S803=y
CONFIG_MEDIA_TUNER_MSI001=y
CONFIG_MEDIA_TUNER_MT2060=y
CONFIG_MEDIA_TUNER_MT2063=y
CONFIG_MEDIA_TUNER_MT20XX=y
CONFIG_MEDIA_TUNER_MT2131=m
# CONFIG_MEDIA_TUNER_MT2266 is not set
# CONFIG_MEDIA_TUNER_MXL301RF is not set
CONFIG_MEDIA_TUNER_MXL5005S=y
CONFIG_MEDIA_TUNER_MXL5007T=y
# CONFIG_MEDIA_TUNER_QM1D1B0004 is not set
# CONFIG_MEDIA_TUNER_QM1D1C0042 is not set
CONFIG_MEDIA_TUNER_QT1010=y
CONFIG_MEDIA_TUNER_R820T=y
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_TUNER_SIMPLE=y
CONFIG_MEDIA_TUNER_TDA18212=y
CONFIG_MEDIA_TUNER_TDA18218=y
# CONFIG_MEDIA_TUNER_TDA18250 is not set
CONFIG_MEDIA_TUNER_TDA18271=y
CONFIG_MEDIA_TUNER_TDA827X=y
CONFIG_MEDIA_TUNER_TDA8290=y
CONFIG_MEDIA_TUNER_TDA9887=y
CONFIG_MEDIA_TUNER_TEA5761=y
CONFIG_MEDIA_TUNER_TEA5767=y
CONFIG_MEDIA_TUNER_TUA9001=m
CONFIG_MEDIA_TUNER_XC2028=y
CONFIG_MEDIA_TUNER_XC4000=y
CONFIG_MEDIA_TUNER_XC5000=y
# end of Customize TV tuners

#
# Customise DVB Frontends
#

#
# Multistandard (satellite) frontends
#
CONFIG_DVB_M88DS3103=m
# CONFIG_DVB_MXL5XX is not set
CONFIG_DVB_STB0899=y
CONFIG_DVB_STB6100=m
CONFIG_DVB_STV090x=y
# CONFIG_DVB_STV0910 is not set
CONFIG_DVB_STV6110x=m
# CONFIG_DVB_STV6111 is not set

#
# Multistandard (cable + terrestrial) frontends
#
CONFIG_DVB_DRXK=y
CONFIG_DVB_MN88472=m
# CONFIG_DVB_MN88473 is not set
# CONFIG_DVB_SI2165 is not set
# CONFIG_DVB_TDA18271C2DD is not set

#
# DVB-S (satellite) frontends
#
# CONFIG_DVB_CX24110 is not set
CONFIG_DVB_CX24116=y
CONFIG_DVB_CX24117=m
# CONFIG_DVB_CX24120 is not set
CONFIG_DVB_CX24123=m
CONFIG_DVB_DS3000=y
CONFIG_DVB_MB86A16=y
CONFIG_DVB_MT312=m
# CONFIG_DVB_S5H1420 is not set
# CONFIG_DVB_SI21XX is not set
CONFIG_DVB_STB6000=y
# CONFIG_DVB_STV0288 is not set
CONFIG_DVB_STV0299=y
CONFIG_DVB_STV0900=y
CONFIG_DVB_STV6110=y
CONFIG_DVB_TDA10071=y
CONFIG_DVB_TDA10086=y
CONFIG_DVB_TDA8083=m
CONFIG_DVB_TDA8261=y
# CONFIG_DVB_TDA826X is not set
CONFIG_DVB_TS2020=m
# CONFIG_DVB_TUA6100 is not set
# CONFIG_DVB_TUNER_CX24113 is not set
# CONFIG_DVB_TUNER_ITD1000 is not set
# CONFIG_DVB_VES1X93 is not set
CONFIG_DVB_ZL10036=y
# CONFIG_DVB_ZL10039 is not set

#
# DVB-T (terrestrial) frontends
#
CONFIG_DVB_AF9013=y
CONFIG_DVB_AS102_FE=m
CONFIG_DVB_CX22700=y
# CONFIG_DVB_CX22702 is not set
CONFIG_DVB_CXD2820R=y
CONFIG_DVB_CXD2841ER=m
CONFIG_DVB_DIB3000MB=m
# CONFIG_DVB_DIB3000MC is not set
# CONFIG_DVB_DIB7000M is not set
CONFIG_DVB_DIB7000P=y
# CONFIG_DVB_DIB9000 is not set
CONFIG_DVB_DRXD=m
CONFIG_DVB_EC100=y
CONFIG_DVB_L64781=m
CONFIG_DVB_MT352=y
CONFIG_DVB_NXT6000=m
CONFIG_DVB_RTL2830=y
CONFIG_DVB_RTL2832=y
CONFIG_DVB_RTL2832_SDR=y
CONFIG_DVB_S5H1432=m
CONFIG_DVB_SI2168=m
CONFIG_DVB_SP887X=m
# CONFIG_DVB_STV0367 is not set
# CONFIG_DVB_TDA10048 is not set
CONFIG_DVB_TDA1004X=m
CONFIG_DVB_ZD1301_DEMOD=y
CONFIG_DVB_ZL10353=y
# CONFIG_DVB_CXD2880 is not set

#
# DVB-C (cable) frontends
#
# CONFIG_DVB_STV0297 is not set
# CONFIG_DVB_TDA10021 is not set
CONFIG_DVB_TDA10023=y
CONFIG_DVB_VES1820=y

#
# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
#
CONFIG_DVB_AU8522=y
CONFIG_DVB_AU8522_DTV=y
# CONFIG_DVB_AU8522_V4L is not set
CONFIG_DVB_BCM3510=m
CONFIG_DVB_LG2160=y
CONFIG_DVB_LGDT3305=y
# CONFIG_DVB_LGDT3306A is not set
CONFIG_DVB_LGDT330X=m
CONFIG_DVB_MXL692=y
CONFIG_DVB_NXT200X=m
# CONFIG_DVB_OR51132 is not set
# CONFIG_DVB_OR51211 is not set
# CONFIG_DVB_S5H1409 is not set
# CONFIG_DVB_S5H1411 is not set

#
# ISDB-T (terrestrial) frontends
#
CONFIG_DVB_DIB8000=m
CONFIG_DVB_MB86A20S=y
CONFIG_DVB_S921=m

#
# ISDB-S (satellite) & ISDB-T (terrestrial) frontends
#
CONFIG_DVB_MN88443X=m
CONFIG_DVB_TC90522=y

#
# Digital terrestrial only tuners/PLL
#
CONFIG_DVB_PLL=y
CONFIG_DVB_TUNER_DIB0070=y
# CONFIG_DVB_TUNER_DIB0090 is not set

#
# SEC control devices for DVB-S
#
# CONFIG_DVB_A8293 is not set
# CONFIG_DVB_AF9033 is not set
# CONFIG_DVB_ASCOT2E is not set
CONFIG_DVB_ATBM8830=m
CONFIG_DVB_HELENE=m
# CONFIG_DVB_HORUS3A is not set
CONFIG_DVB_ISL6405=y
# CONFIG_DVB_ISL6421 is not set
CONFIG_DVB_ISL6423=y
CONFIG_DVB_IX2505V=m
# CONFIG_DVB_LGS8GL5 is not set
CONFIG_DVB_LGS8GXX=m
CONFIG_DVB_LNBH25=m
# CONFIG_DVB_LNBH29 is not set
CONFIG_DVB_LNBP21=y
CONFIG_DVB_LNBP22=m
CONFIG_DVB_M88RS2000=y
CONFIG_DVB_TDA665x=m
# CONFIG_DVB_DRX39XYJ is not set

#
# Common Interface (EN50221) controller drivers
#
# CONFIG_DVB_CXD2099 is not set
CONFIG_DVB_SP2=m
# end of Customise DVB Frontends

#
# Tools to develop new frontends
#
CONFIG_DVB_DUMMY_FE=y
# end of Media ancillary drivers

#
# Graphics support
#
CONFIG_APERTURE_HELPERS=y
CONFIG_IMX_IPUV3_CORE=y
# CONFIG_DRM is not set
CONFIG_DRM_DEBUG_MODESET_LOCK=y

#
# ARM devices
#
# end of ARM devices

#
# Frame buffer Devices
#
CONFIG_FB_CMDLINE=y
CONFIG_FB_NOTIFY=y
CONFIG_FB=m
# CONFIG_FIRMWARE_EDID is not set
CONFIG_FB_CFB_FILLRECT=m
CONFIG_FB_CFB_COPYAREA=m
CONFIG_FB_CFB_IMAGEBLIT=m
CONFIG_FB_CFB_REV_PIXELS_IN_BYTE=y
CONFIG_FB_SYS_FILLRECT=m
CONFIG_FB_SYS_COPYAREA=m
CONFIG_FB_SYS_IMAGEBLIT=m
# CONFIG_FB_FOREIGN_ENDIAN is not set
CONFIG_FB_SYS_FOPS=m
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_BACKLIGHT=m
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y

#
# Frame buffer hardware drivers
#
CONFIG_FB_CLPS711X=m
CONFIG_FB_IMX=m
# CONFIG_FB_ARC is not set
# CONFIG_FB_PVR2 is not set
# CONFIG_FB_OPENCORES is not set
CONFIG_FB_S1D13XXX=m
CONFIG_FB_ATMEL=m
# CONFIG_FB_PXA168 is not set
# CONFIG_FB_W100 is not set
# CONFIG_FB_SH_MOBILE_LCDC is not set
CONFIG_FB_TMIO=m
CONFIG_FB_TMIO_ACCELL=y
CONFIG_FB_S3C=m
CONFIG_FB_S3C_DEBUG_REGWRITE=y
# CONFIG_FB_SM501 is not set
CONFIG_FB_SMSCUFX=m
CONFIG_FB_UDL=m
CONFIG_FB_IBM_GXT4500=m
CONFIG_FB_XILINX=m
CONFIG_FB_GOLDFISH=m
CONFIG_FB_DA8XX=m
CONFIG_FB_VIRTUAL=m
# CONFIG_FB_METRONOME is not set
CONFIG_FB_BROADSHEET=m
CONFIG_FB_SIMPLE=m
# CONFIG_FB_SSD1307 is not set
# CONFIG_FB_OMAP2 is not set
CONFIG_MMP_DISP=m
# CONFIG_MMP_DISP_CONTROLLER is not set
# CONFIG_MMP_PANEL_TPOHVGA is not set
CONFIG_MMP_FB=m
# end of Frame buffer Devices

#
# Backlight & LCD device support
#
CONFIG_LCD_CLASS_DEVICE=m
CONFIG_LCD_L4F00242T03=m
# CONFIG_LCD_LMS283GF05 is not set
CONFIG_LCD_LTV350QV=m
CONFIG_LCD_ILI922X=m
CONFIG_LCD_ILI9320=m
CONFIG_LCD_TDO24M=m
CONFIG_LCD_VGG2432A4=m
CONFIG_LCD_PLATFORM=m
CONFIG_LCD_AMS369FG06=m
CONFIG_LCD_LMS501KF03=m
# CONFIG_LCD_HX8357 is not set
CONFIG_LCD_OTM3225A=m
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_ATMEL_LCDC=y
# CONFIG_BACKLIGHT_KTD253 is not set
CONFIG_BACKLIGHT_LM3533=m
CONFIG_BACKLIGHT_OMAP1=m
CONFIG_BACKLIGHT_PWM=y
CONFIG_BACKLIGHT_DA9052=y
CONFIG_BACKLIGHT_MAX8925=m
# CONFIG_BACKLIGHT_MT6370 is not set
CONFIG_BACKLIGHT_QCOM_WLED=m
CONFIG_BACKLIGHT_WM831X=m
CONFIG_BACKLIGHT_ADP8860=y
# CONFIG_BACKLIGHT_ADP8870 is not set
CONFIG_BACKLIGHT_88PM860X=m
CONFIG_BACKLIGHT_PCF50633=m
CONFIG_BACKLIGHT_LM3630A=y
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=y
CONFIG_BACKLIGHT_PANDORA=m
CONFIG_BACKLIGHT_SKY81452=y
CONFIG_BACKLIGHT_TPS65217=m
CONFIG_BACKLIGHT_AS3711=m
CONFIG_BACKLIGHT_GPIO=m
CONFIG_BACKLIGHT_LV5207LP=m
CONFIG_BACKLIGHT_BD6107=m
# CONFIG_BACKLIGHT_ARCXCNN is not set
CONFIG_BACKLIGHT_RAVE_SP=m
CONFIG_BACKLIGHT_LED=y
# end of Backlight & LCD device support

CONFIG_VIDEOMODE_HELPERS=y
CONFIG_HDMI=y
# CONFIG_LOGO is not set
# end of Graphics support

CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE=y
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
CONFIG_SND=m
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
CONFIG_SND_PCM_ELD=y
CONFIG_SND_PCM_IEC958=y
CONFIG_SND_DMAENGINE_PCM=m
CONFIG_SND_HWDEP=m
CONFIG_SND_RAWMIDI=m
CONFIG_SND_COMPRESS_OFFLOAD=m
CONFIG_SND_JACK=y
CONFIG_SND_JACK_INPUT_DEV=y
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
# CONFIG_SND_PCM_OSS_PLUGINS is not set
# CONFIG_SND_PCM_TIMER is not set
CONFIG_SND_HRTIMER=m
CONFIG_SND_DYNAMIC_MINORS=y
CONFIG_SND_MAX_CARDS=32
CONFIG_SND_SUPPORT_OLD_API=y
# CONFIG_SND_PROC_FS is not set
CONFIG_SND_VERBOSE_PRINTK=y
# CONFIG_SND_CTL_FAST_LOOKUP is not set
CONFIG_SND_DEBUG=y
# CONFIG_SND_DEBUG_VERBOSE is not set
# CONFIG_SND_CTL_INPUT_VALIDATION is not set
# CONFIG_SND_CTL_DEBUG is not set
CONFIG_SND_JACK_INJECTION_DEBUG=y
CONFIG_SND_VMASTER=y
CONFIG_SND_CTL_LED=m
# CONFIG_SND_SEQUENCER is not set
CONFIG_SND_VX_LIB=m
CONFIG_SND_DRIVERS=y
# CONFIG_SND_DUMMY is not set
CONFIG_SND_ALOOP=m
CONFIG_SND_MTPAV=m
CONFIG_SND_MTS64=m
CONFIG_SND_SERIAL_U16550=m
CONFIG_SND_SERIAL_GENERIC=m
# CONFIG_SND_MPU401 is not set
# CONFIG_SND_PORTMAN2X4 is not set

#
# HD-Audio
#
CONFIG_SND_HDA=m
CONFIG_SND_HDA_GENERIC_LEDS=y
CONFIG_SND_HDA_HWDEP=y
CONFIG_SND_HDA_RECONFIG=y
CONFIG_SND_HDA_INPUT_BEEP=y
CONFIG_SND_HDA_INPUT_BEEP_MODE=1
CONFIG_SND_HDA_PATCH_LOADER=y
CONFIG_SND_HDA_CODEC_REALTEK=m
CONFIG_SND_HDA_CODEC_ANALOG=m
CONFIG_SND_HDA_CODEC_SIGMATEL=m
# CONFIG_SND_HDA_CODEC_VIA is not set
# CONFIG_SND_HDA_CODEC_HDMI is not set
CONFIG_SND_HDA_CODEC_CIRRUS=m
CONFIG_SND_HDA_CODEC_CS8409=m
# CONFIG_SND_HDA_CODEC_CONEXANT is not set
CONFIG_SND_HDA_CODEC_CA0110=m
CONFIG_SND_HDA_CODEC_CA0132=m
# CONFIG_SND_HDA_CODEC_CA0132_DSP is not set
# CONFIG_SND_HDA_CODEC_CMEDIA is not set
CONFIG_SND_HDA_CODEC_SI3054=m
CONFIG_SND_HDA_GENERIC=m
# end of HD-Audio

CONFIG_SND_HDA_CORE=m
CONFIG_SND_HDA_EXT_CORE=m
CONFIG_SND_HDA_PREALLOC_SIZE=64
CONFIG_SND_PXA2XX_LIB=m
CONFIG_SND_SPI=y
# CONFIG_SND_AT73C213 is not set
# CONFIG_SND_USB is not set
CONFIG_SND_PCMCIA=y
CONFIG_SND_VXPOCKET=m
CONFIG_SND_PDAUDIOCF=m
CONFIG_SND_SOC=m
CONFIG_SND_SOC_AC97_BUS=y
CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
CONFIG_SND_SOC_COMPRESS=y
# CONFIG_SND_SOC_ADI is not set
CONFIG_SND_SOC_AMD_ACP=m
CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_AMD_ACP_CONFIG is not set
# CONFIG_SND_SOC_APPLE_MCA is not set
# CONFIG_SND_ATMEL_SOC is not set
CONFIG_SND_BCM2835_SOC_I2S=m
# CONFIG_SND_SOC_CYGNUS is not set
# CONFIG_SND_BCM63XX_I2S_WHISTLER is not set
CONFIG_SND_EP93XX_SOC=m
# CONFIG_SND_DESIGNWARE_I2S is not set

#
# SoC Audio for Freescale CPUs
#

#
# Common SoC Audio options for Freescale CPUs:
#
CONFIG_SND_SOC_FSL_ASRC=m
# CONFIG_SND_SOC_FSL_SAI is not set
# CONFIG_SND_SOC_FSL_AUDMIX is not set
CONFIG_SND_SOC_FSL_SSI=m
# CONFIG_SND_SOC_FSL_SPDIF is not set
CONFIG_SND_SOC_FSL_ESAI=m
# CONFIG_SND_SOC_FSL_MICFIL is not set
# CONFIG_SND_SOC_FSL_EASRC is not set
CONFIG_SND_SOC_FSL_XCVR=m
CONFIG_SND_SOC_FSL_AUD2HTX=m
# CONFIG_SND_SOC_FSL_RPMSG is not set
CONFIG_SND_SOC_IMX_AUDMUX=m
# CONFIG_SND_IMX_SOC is not set
# end of SoC Audio for Freescale CPUs

# CONFIG_SND_I2S_HI6210_I2S is not set
CONFIG_SND_JZ4740_SOC_I2S=m
# CONFIG_SND_KIRKWOOD_SOC is not set
# CONFIG_SND_SOC_IMG is not set
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
CONFIG_SND_SOC_INTEL_KEEMBAY=m
CONFIG_SND_SOC_INTEL_MACH=y
CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y
CONFIG_SND_SOC_MEDIATEK=m
# CONFIG_SND_SOC_MT8186 is not set
CONFIG_SND_SOC_MTK_BTCVSD=m
CONFIG_SND_SOC_MT8188=m
CONFIG_SND_SOC_MT8188_MT6359=m
# CONFIG_SND_SOC_MT8195 is not set

#
# ASoC support for Amlogic platforms
#
# CONFIG_SND_MESON_AIU is not set
CONFIG_SND_MESON_AXG_FIFO=m
CONFIG_SND_MESON_AXG_FRDDR=m
CONFIG_SND_MESON_AXG_TODDR=m
CONFIG_SND_MESON_AXG_TDM_FORMATTER=m
CONFIG_SND_MESON_AXG_TDM_INTERFACE=m
CONFIG_SND_MESON_AXG_TDMIN=m
CONFIG_SND_MESON_AXG_TDMOUT=m
# CONFIG_SND_MESON_AXG_SOUND_CARD is not set
CONFIG_SND_MESON_AXG_SPDIFOUT=m
CONFIG_SND_MESON_AXG_SPDIFIN=m
CONFIG_SND_MESON_AXG_PDM=m
CONFIG_SND_MESON_CARD_UTILS=m
CONFIG_SND_MESON_CODEC_GLUE=m
CONFIG_SND_MESON_GX_SOUND_CARD=m
# CONFIG_SND_MESON_G12A_TOACODEC is not set
CONFIG_SND_MESON_G12A_TOHDMITX=m
CONFIG_SND_SOC_MESON_T9015=m
# end of ASoC support for Amlogic platforms

CONFIG_SND_MXS_SOC=m
# CONFIG_SND_SOC_MXS_SGTL5000 is not set
CONFIG_SND_PXA2XX_SOC=m
CONFIG_SND_SOC_QCOM=m
# CONFIG_SND_SOC_STORM is not set
# CONFIG_SND_SOC_QCOM_COMMON is not set
CONFIG_SND_SOC_ROCKCHIP=m
CONFIG_SND_SOC_ROCKCHIP_I2S=m
# CONFIG_SND_SOC_ROCKCHIP_I2S_TDM is not set
# CONFIG_SND_SOC_ROCKCHIP_PDM is not set
# CONFIG_SND_SOC_ROCKCHIP_SPDIF is not set
CONFIG_SND_SOC_ROCKCHIP_MAX98090=m
# CONFIG_SND_SOC_ROCKCHIP_RT5645 is not set
# CONFIG_SND_SOC_RK3288_HDMI_ANALOG is not set
CONFIG_SND_SOC_RK3399_GRU_SOUND=m
CONFIG_SND_SOC_SAMSUNG=m
CONFIG_SND_S3C24XX_I2S=m
CONFIG_SND_SAMSUNG_PCM=m
CONFIG_SND_SAMSUNG_SPDIF=m
CONFIG_SND_SAMSUNG_I2S=m
CONFIG_SND_SOC_SAMSUNG_NEO1973_WM8753=m
CONFIG_SND_SOC_SAMSUNG_SMDK_WM8580=m
# CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994 is not set
CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X=m
# CONFIG_SND_SOC_SAMSUNG_SIMTEC_TLV320AIC23 is not set
# CONFIG_SND_SOC_SAMSUNG_SIMTEC_HERMES is not set
CONFIG_SND_SOC_SAMSUNG_H1940_UDA1380=m
CONFIG_SND_SOC_SAMSUNG_RX1950_UDA1380=m
# CONFIG_SND_SOC_SMARTQ is not set
# CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF is not set
CONFIG_SND_SOC_SMDK_WM8994_PCM=m
# CONFIG_SND_SOC_SPEYSIDE is not set
CONFIG_SND_SOC_TOBERMORY=m
CONFIG_SND_SOC_LOWLAND=m
CONFIG_SND_SOC_LITTLEMILL=m
# CONFIG_SND_SOC_SNOW is not set
CONFIG_SND_SOC_ODROID=m
CONFIG_SND_SOC_ARNDALE=m
CONFIG_SND_SOC_SAMSUNG_ARIES_WM8994=m
# CONFIG_SND_SOC_SAMSUNG_MIDAS_WM1811 is not set

#
# SoC Audio support for Renesas SoCs
#
CONFIG_SND_SOC_SH4_FSI=m
CONFIG_SND_SOC_RCAR=m
# CONFIG_SND_SOC_RZ is not set
# end of SoC Audio support for Renesas SoCs

# CONFIG_SND_SOC_SOF_TOPLEVEL is not set
# CONFIG_SND_SOC_SPRD is not set
# CONFIG_SND_SOC_STI is not set

#
# STMicroelectronics STM32 SOC audio support
#
# CONFIG_SND_SOC_STM32_SAI is not set
CONFIG_SND_SOC_STM32_I2S=m
# CONFIG_SND_SOC_STM32_SPDIFRX is not set
# CONFIG_SND_SOC_STM32_DFSDM is not set
# end of STMicroelectronics STM32 SOC audio support

#
# Allwinner SoC Audio support
#
CONFIG_SND_SUN4I_CODEC=m
CONFIG_SND_SUN8I_CODEC=m
CONFIG_SND_SUN8I_CODEC_ANALOG=m
CONFIG_SND_SUN50I_CODEC_ANALOG=m
# CONFIG_SND_SUN4I_I2S is not set
CONFIG_SND_SUN4I_SPDIF=m
CONFIG_SND_SUN50I_DMIC=m
CONFIG_SND_SUN8I_ADDA_PR_REGMAP=m
# end of Allwinner SoC Audio support

CONFIG_SND_SOC_TEGRA=m
CONFIG_SND_SOC_TEGRA20_AC97=m
CONFIG_SND_SOC_TEGRA20_DAS=m
CONFIG_SND_SOC_TEGRA20_I2S=m
CONFIG_SND_SOC_TEGRA20_SPDIF=m
CONFIG_SND_SOC_TEGRA30_AHUB=m
CONFIG_SND_SOC_TEGRA30_I2S=m
CONFIG_SND_SOC_TEGRA210_AHUB=m
CONFIG_SND_SOC_TEGRA210_DMIC=m
# CONFIG_SND_SOC_TEGRA210_I2S is not set
CONFIG_SND_SOC_TEGRA210_OPE=m
CONFIG_SND_SOC_TEGRA186_ASRC=m
# CONFIG_SND_SOC_TEGRA186_DSPK is not set
CONFIG_SND_SOC_TEGRA210_ADMAIF=m
# CONFIG_SND_SOC_TEGRA210_MVC is not set
CONFIG_SND_SOC_TEGRA210_SFC=m
# CONFIG_SND_SOC_TEGRA210_AMX is not set
# CONFIG_SND_SOC_TEGRA210_ADX is not set
# CONFIG_SND_SOC_TEGRA210_MIXER is not set
CONFIG_SND_SOC_TEGRA_AUDIO_GRAPH_CARD=m
CONFIG_SND_SOC_TEGRA_MACHINE_DRV=m
CONFIG_SND_SOC_TEGRA_RT5640=m
# CONFIG_SND_SOC_TEGRA_WM8753 is not set
CONFIG_SND_SOC_TEGRA_WM8903=m
CONFIG_SND_SOC_TEGRA_WM9712=m
CONFIG_SND_SOC_TEGRA_TRIMSLICE=m
CONFIG_SND_SOC_TEGRA_ALC5632=m
CONFIG_SND_SOC_TEGRA_MAX98090=m
CONFIG_SND_SOC_TEGRA_RT5677=m
CONFIG_SND_SOC_TEGRA_SGTL5000=m

#
# Audio support for Texas Instruments SoCs
#
CONFIG_SND_SOC_TI_EDMA_PCM=m
CONFIG_SND_SOC_TI_SDMA_PCM=m
CONFIG_SND_SOC_TI_UDMA_PCM=m

#
# Texas Instruments DAI support for:
#
# CONFIG_SND_SOC_DAVINCI_ASP is not set
CONFIG_SND_SOC_DAVINCI_MCASP=m
CONFIG_SND_SOC_DAVINCI_VCIF=m
CONFIG_SND_SOC_OMAP_DMIC=m
CONFIG_SND_SOC_OMAP_MCBSP=m
CONFIG_SND_SOC_OMAP_MCPDM=m

#
# Audio support for boards with Texas Instruments SoCs
#
CONFIG_SND_SOC_OMAP3_TWL4030=m
CONFIG_SND_SOC_OMAP_ABE_TWL6040=m
CONFIG_SND_SOC_OMAP_HDMI=m
CONFIG_SND_SOC_J721E_EVM=m
# end of Audio support for Texas Instruments SoCs

CONFIG_SND_SOC_UNIPHIER=m
CONFIG_SND_SOC_UNIPHIER_AIO=m
CONFIG_SND_SOC_UNIPHIER_LD11=m
CONFIG_SND_SOC_UNIPHIER_PXS2=m
CONFIG_SND_SOC_UNIPHIER_EVEA_CODEC=m
# CONFIG_SND_SOC_XILINX_I2S is not set
CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=m
# CONFIG_SND_SOC_XILINX_SPDIF is not set
CONFIG_SND_SOC_XTFPGA_I2S=m
CONFIG_SND_SOC_I2C_AND_SPI=m

#
# CODEC drivers
#
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_88PM860X=m
CONFIG_SND_SOC_ARIZONA=m
CONFIG_SND_SOC_WM_HUBS=m
CONFIG_SND_SOC_WM_ADSP=m
CONFIG_SND_SOC_AB8500_CODEC=m
# CONFIG_SND_SOC_AC97_CODEC is not set
CONFIG_SND_SOC_AD1836=m
CONFIG_SND_SOC_AD193X=m
CONFIG_SND_SOC_AD193X_SPI=m
CONFIG_SND_SOC_AD193X_I2C=m
CONFIG_SND_SOC_AD1980=m
CONFIG_SND_SOC_AD73311=m
CONFIG_SND_SOC_ADAU_UTILS=m
CONFIG_SND_SOC_ADAU1372=m
CONFIG_SND_SOC_ADAU1372_I2C=m
# CONFIG_SND_SOC_ADAU1372_SPI is not set
CONFIG_SND_SOC_ADAU1373=m
CONFIG_SND_SOC_ADAU1701=m
CONFIG_SND_SOC_ADAU17X1=m
CONFIG_SND_SOC_ADAU1761=m
# CONFIG_SND_SOC_ADAU1761_I2C is not set
CONFIG_SND_SOC_ADAU1761_SPI=m
CONFIG_SND_SOC_ADAU1781=m
CONFIG_SND_SOC_ADAU1781_I2C=m
CONFIG_SND_SOC_ADAU1781_SPI=m
CONFIG_SND_SOC_ADAU1977=m
CONFIG_SND_SOC_ADAU1977_SPI=m
CONFIG_SND_SOC_ADAU1977_I2C=m
# CONFIG_SND_SOC_ADAU7002 is not set
CONFIG_SND_SOC_ADAU7118=m
# CONFIG_SND_SOC_ADAU7118_HW is not set
CONFIG_SND_SOC_ADAU7118_I2C=m
CONFIG_SND_SOC_ADAV80X=m
CONFIG_SND_SOC_ADAV801=m
CONFIG_SND_SOC_ADAV803=m
CONFIG_SND_SOC_ADS117X=m
# CONFIG_SND_SOC_AK4104 is not set
CONFIG_SND_SOC_AK4118=m
CONFIG_SND_SOC_AK4375=m
CONFIG_SND_SOC_AK4458=m
CONFIG_SND_SOC_AK4535=m
CONFIG_SND_SOC_AK4554=m
# CONFIG_SND_SOC_AK4613 is not set
CONFIG_SND_SOC_AK4641=m
# CONFIG_SND_SOC_AK4642 is not set
CONFIG_SND_SOC_AK4671=m
CONFIG_SND_SOC_AK5386=m
CONFIG_SND_SOC_AK5558=m
CONFIG_SND_SOC_ALC5623=m
CONFIG_SND_SOC_ALC5632=m
# CONFIG_SND_SOC_AW8738 is not set
CONFIG_SND_SOC_BD28623=m
CONFIG_SND_SOC_BT_SCO=m
CONFIG_SND_SOC_CPCAP=m
CONFIG_SND_SOC_CQ0093VC=m
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
# CONFIG_SND_SOC_CS35L32 is not set
CONFIG_SND_SOC_CS35L33=m
CONFIG_SND_SOC_CS35L34=m
# CONFIG_SND_SOC_CS35L35 is not set
CONFIG_SND_SOC_CS35L36=m
CONFIG_SND_SOC_CS35L41_LIB=m
CONFIG_SND_SOC_CS35L41=m
CONFIG_SND_SOC_CS35L41_SPI=m
CONFIG_SND_SOC_CS35L41_I2C=m
CONFIG_SND_SOC_CS35L45_TABLES=m
CONFIG_SND_SOC_CS35L45=m
CONFIG_SND_SOC_CS35L45_SPI=m
CONFIG_SND_SOC_CS35L45_I2C=m
CONFIG_SND_SOC_CS42L42_CORE=m
CONFIG_SND_SOC_CS42L42=m
CONFIG_SND_SOC_CS42L51=m
CONFIG_SND_SOC_CS42L51_I2C=m
# CONFIG_SND_SOC_CS42L52 is not set
CONFIG_SND_SOC_CS42L56=m
# CONFIG_SND_SOC_CS42L73 is not set
CONFIG_SND_SOC_CS42L83=m
CONFIG_SND_SOC_CS4234=m
# CONFIG_SND_SOC_CS4265 is not set
CONFIG_SND_SOC_CS4270=m
CONFIG_SND_SOC_CS4271=m
CONFIG_SND_SOC_CS4271_I2C=m
# CONFIG_SND_SOC_CS4271_SPI is not set
CONFIG_SND_SOC_CS42XX8=m
CONFIG_SND_SOC_CS42XX8_I2C=m
CONFIG_SND_SOC_CS43130=m
CONFIG_SND_SOC_CS4341=m
CONFIG_SND_SOC_CS4349=m
# CONFIG_SND_SOC_CS47L15 is not set
# CONFIG_SND_SOC_CS47L24 is not set
# CONFIG_SND_SOC_CS47L35 is not set
# CONFIG_SND_SOC_CS47L85 is not set
# CONFIG_SND_SOC_CS47L90 is not set
# CONFIG_SND_SOC_CS47L92 is not set
CONFIG_SND_SOC_CS53L30=m
# CONFIG_SND_SOC_CX20442 is not set
CONFIG_SND_SOC_CX2072X=m
CONFIG_SND_SOC_JZ4740_CODEC=m
# CONFIG_SND_SOC_JZ4725B_CODEC is not set
# CONFIG_SND_SOC_JZ4760_CODEC is not set
CONFIG_SND_SOC_JZ4770_CODEC=m
CONFIG_SND_SOC_L3=m
CONFIG_SND_SOC_DA7210=m
# CONFIG_SND_SOC_DA7213 is not set
CONFIG_SND_SOC_DA7218=m
CONFIG_SND_SOC_DA7219=m
CONFIG_SND_SOC_DA732X=m
CONFIG_SND_SOC_DA9055=m
CONFIG_SND_SOC_DMIC=m
CONFIG_SND_SOC_HDMI_CODEC=m
# CONFIG_SND_SOC_ES7134 is not set
CONFIG_SND_SOC_ES7241=m
# CONFIG_SND_SOC_ES8316 is not set
CONFIG_SND_SOC_ES8326=m
CONFIG_SND_SOC_ES8328=m
CONFIG_SND_SOC_ES8328_I2C=m
CONFIG_SND_SOC_ES8328_SPI=m
CONFIG_SND_SOC_GTM601=m
CONFIG_SND_SOC_HDAC_HDMI=m
CONFIG_SND_SOC_HDAC_HDA=m
CONFIG_SND_SOC_HDA=m
CONFIG_SND_SOC_ICS43432=m
# CONFIG_SND_SOC_INNO_RK3036 is not set
CONFIG_SND_SOC_ISABELLE=m
CONFIG_SND_SOC_LM49453=m
CONFIG_SND_SOC_LOCHNAGAR_SC=m
CONFIG_SND_SOC_MAX98088=m
CONFIG_SND_SOC_MAX98090=m
CONFIG_SND_SOC_MAX98095=m
CONFIG_SND_SOC_MAX98357A=m
CONFIG_SND_SOC_MAX98371=m
CONFIG_SND_SOC_MAX98504=m
# CONFIG_SND_SOC_MAX9867 is not set
CONFIG_SND_SOC_MAX98925=m
CONFIG_SND_SOC_MAX98926=m
CONFIG_SND_SOC_MAX98927=m
CONFIG_SND_SOC_MAX98520=m
CONFIG_SND_SOC_MAX98373=m
CONFIG_SND_SOC_MAX98373_I2C=m
# CONFIG_SND_SOC_MAX98373_SDW is not set
CONFIG_SND_SOC_MAX98390=m
CONFIG_SND_SOC_MAX98396=m
CONFIG_SND_SOC_MAX9850=m
CONFIG_SND_SOC_MAX9860=m
CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m
CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m
CONFIG_SND_SOC_PCM1681=m
# CONFIG_SND_SOC_PCM1789_I2C is not set
CONFIG_SND_SOC_PCM179X=m
CONFIG_SND_SOC_PCM179X_I2C=m
CONFIG_SND_SOC_PCM179X_SPI=m
# CONFIG_SND_SOC_PCM186X_I2C is not set
# CONFIG_SND_SOC_PCM186X_SPI is not set
CONFIG_SND_SOC_PCM3008=m
# CONFIG_SND_SOC_PCM3060_I2C is not set
# CONFIG_SND_SOC_PCM3060_SPI is not set
CONFIG_SND_SOC_PCM3168A=m
CONFIG_SND_SOC_PCM3168A_I2C=m
# CONFIG_SND_SOC_PCM3168A_SPI is not set
# CONFIG_SND_SOC_PCM5102A is not set
CONFIG_SND_SOC_PCM512x=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
CONFIG_SND_SOC_PCM512x_SPI=m
CONFIG_SND_SOC_RK3328=m
CONFIG_SND_SOC_RK817=m
CONFIG_SND_SOC_RL6231=m
CONFIG_SND_SOC_RL6347A=m
CONFIG_SND_SOC_RT274=m
CONFIG_SND_SOC_RT286=m
CONFIG_SND_SOC_RT298=m
CONFIG_SND_SOC_RT1011=m
CONFIG_SND_SOC_RT1015=m
CONFIG_SND_SOC_RT1015P=m
CONFIG_SND_SOC_RT1016=m
CONFIG_SND_SOC_RT1019=m
CONFIG_SND_SOC_RT1305=m
CONFIG_SND_SOC_RT1308=m
# CONFIG_SND_SOC_RT1308_SDW is not set
# CONFIG_SND_SOC_RT1316_SDW is not set
# CONFIG_SND_SOC_RT1318_SDW is not set
CONFIG_SND_SOC_RT5514=m
CONFIG_SND_SOC_RT5514_SPI=m
CONFIG_SND_SOC_RT5616=m
CONFIG_SND_SOC_RT5631=m
CONFIG_SND_SOC_RT5640=m
CONFIG_SND_SOC_RT5645=m
CONFIG_SND_SOC_RT5651=m
CONFIG_SND_SOC_RT5659=m
CONFIG_SND_SOC_RT5660=m
CONFIG_SND_SOC_RT5663=m
CONFIG_SND_SOC_RT5665=m
CONFIG_SND_SOC_RT5668=m
CONFIG_SND_SOC_RT5670=m
CONFIG_SND_SOC_RT5677=m
CONFIG_SND_SOC_RT5677_SPI=m
CONFIG_SND_SOC_RT5682=m
CONFIG_SND_SOC_RT5682_I2C=m
# CONFIG_SND_SOC_RT5682_SDW is not set
CONFIG_SND_SOC_RT5682S=m
# CONFIG_SND_SOC_RT700_SDW is not set
# CONFIG_SND_SOC_RT711_SDW is not set
# CONFIG_SND_SOC_RT711_SDCA_SDW is not set
# CONFIG_SND_SOC_RT715_SDW is not set
# CONFIG_SND_SOC_RT715_SDCA_SDW is not set
# CONFIG_SND_SOC_RT9120 is not set
# CONFIG_SND_SOC_SDW_MOCKUP is not set
CONFIG_SND_SOC_SGTL5000=m
CONFIG_SND_SOC_SI476X=m
CONFIG_SND_SOC_SIGMADSP=m
CONFIG_SND_SOC_SIGMADSP_I2C=m
CONFIG_SND_SOC_SIGMADSP_REGMAP=m
# CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set
# CONFIG_SND_SOC_SIMPLE_MUX is not set
CONFIG_SND_SOC_SPDIF=m
CONFIG_SND_SOC_SRC4XXX_I2C=m
CONFIG_SND_SOC_SRC4XXX=m
CONFIG_SND_SOC_SSM2305=m
# CONFIG_SND_SOC_SSM2518 is not set
CONFIG_SND_SOC_SSM2602=m
CONFIG_SND_SOC_SSM2602_SPI=m
CONFIG_SND_SOC_SSM2602_I2C=m
CONFIG_SND_SOC_SSM4567=m
CONFIG_SND_SOC_STA32X=m
CONFIG_SND_SOC_STA350=m
CONFIG_SND_SOC_STA529=m
CONFIG_SND_SOC_STAC9766=m
CONFIG_SND_SOC_STI_SAS=m
CONFIG_SND_SOC_TAS2552=m
# CONFIG_SND_SOC_TAS2562 is not set
# CONFIG_SND_SOC_TAS2764 is not set
CONFIG_SND_SOC_TAS2770=m
CONFIG_SND_SOC_TAS2780=m
# CONFIG_SND_SOC_TAS5086 is not set
# CONFIG_SND_SOC_TAS571X is not set
CONFIG_SND_SOC_TAS5720=m
CONFIG_SND_SOC_TAS5805M=m
CONFIG_SND_SOC_TAS6424=m
# CONFIG_SND_SOC_TDA7419 is not set
# CONFIG_SND_SOC_TFA9879 is not set
# CONFIG_SND_SOC_TFA989X is not set
CONFIG_SND_SOC_TLV320ADC3XXX=m
CONFIG_SND_SOC_TLV320AIC23=m
CONFIG_SND_SOC_TLV320AIC23_I2C=m
CONFIG_SND_SOC_TLV320AIC23_SPI=m
CONFIG_SND_SOC_TLV320AIC26=m
# CONFIG_SND_SOC_TLV320AIC31XX is not set
CONFIG_SND_SOC_TLV320AIC32X4=m
CONFIG_SND_SOC_TLV320AIC32X4_I2C=m
# CONFIG_SND_SOC_TLV320AIC32X4_SPI is not set
CONFIG_SND_SOC_TLV320AIC3X=m
CONFIG_SND_SOC_TLV320AIC3X_I2C=m
# CONFIG_SND_SOC_TLV320AIC3X_SPI is not set
CONFIG_SND_SOC_TLV320DAC33=m
# CONFIG_SND_SOC_TLV320ADCX140 is not set
CONFIG_SND_SOC_TS3A227E=m
# CONFIG_SND_SOC_TSCS42XX is not set
# CONFIG_SND_SOC_TSCS454 is not set
CONFIG_SND_SOC_TWL4030=m
CONFIG_SND_SOC_TWL6040=m
CONFIG_SND_SOC_UDA1334=m
CONFIG_SND_SOC_UDA134X=m
CONFIG_SND_SOC_UDA1380=m
# CONFIG_SND_SOC_WCD9335 is not set
# CONFIG_SND_SOC_WCD934X is not set
# CONFIG_SND_SOC_WCD938X_SDW is not set
CONFIG_SND_SOC_WL1273=m
CONFIG_SND_SOC_WM0010=m
CONFIG_SND_SOC_WM1250_EV1=m
CONFIG_SND_SOC_WM2000=m
CONFIG_SND_SOC_WM2200=m
CONFIG_SND_SOC_WM5100=m
CONFIG_SND_SOC_WM5102=m
# CONFIG_SND_SOC_WM5110 is not set
# CONFIG_SND_SOC_WM8350 is not set
CONFIG_SND_SOC_WM8400=m
# CONFIG_SND_SOC_WM8510 is not set
CONFIG_SND_SOC_WM8523=m
CONFIG_SND_SOC_WM8524=m
CONFIG_SND_SOC_WM8580=m
CONFIG_SND_SOC_WM8711=m
CONFIG_SND_SOC_WM8727=m
CONFIG_SND_SOC_WM8728=m
CONFIG_SND_SOC_WM8731=m
CONFIG_SND_SOC_WM8731_I2C=m
CONFIG_SND_SOC_WM8731_SPI=m
# CONFIG_SND_SOC_WM8737 is not set
CONFIG_SND_SOC_WM8741=m
# CONFIG_SND_SOC_WM8750 is not set
CONFIG_SND_SOC_WM8753=m
CONFIG_SND_SOC_WM8770=m
CONFIG_SND_SOC_WM8776=m
# CONFIG_SND_SOC_WM8782 is not set
CONFIG_SND_SOC_WM8804=m
CONFIG_SND_SOC_WM8804_I2C=m
# CONFIG_SND_SOC_WM8804_SPI is not set
CONFIG_SND_SOC_WM8900=m
CONFIG_SND_SOC_WM8903=m
CONFIG_SND_SOC_WM8904=m
# CONFIG_SND_SOC_WM8940 is not set
CONFIG_SND_SOC_WM8955=m
# CONFIG_SND_SOC_WM8960 is not set
CONFIG_SND_SOC_WM8961=m
CONFIG_SND_SOC_WM8962=m
CONFIG_SND_SOC_WM8971=m
# CONFIG_SND_SOC_WM8974 is not set
# CONFIG_SND_SOC_WM8978 is not set
CONFIG_SND_SOC_WM8983=m
CONFIG_SND_SOC_WM8985=m
CONFIG_SND_SOC_WM8988=m
CONFIG_SND_SOC_WM8990=m
CONFIG_SND_SOC_WM8991=m
CONFIG_SND_SOC_WM8993=m
CONFIG_SND_SOC_WM8994=m
CONFIG_SND_SOC_WM8995=m
CONFIG_SND_SOC_WM8996=m
CONFIG_SND_SOC_WM8997=m
CONFIG_SND_SOC_WM8998=m
CONFIG_SND_SOC_WM9081=m
CONFIG_SND_SOC_WM9090=m
CONFIG_SND_SOC_WM9705=m
CONFIG_SND_SOC_WM9712=m
CONFIG_SND_SOC_WM9713=m
# CONFIG_SND_SOC_WSA881X is not set
# CONFIG_SND_SOC_WSA883X is not set
CONFIG_SND_SOC_ZL38060=m
CONFIG_SND_SOC_LM4857=m
CONFIG_SND_SOC_MAX9759=m
CONFIG_SND_SOC_MAX9768=m
CONFIG_SND_SOC_MAX9877=m
CONFIG_SND_SOC_MC13783=m
CONFIG_SND_SOC_ML26124=m
CONFIG_SND_SOC_MT6351=m
# CONFIG_SND_SOC_MT6358 is not set
CONFIG_SND_SOC_MT6359=m
CONFIG_SND_SOC_MT6359_ACCDET=m
CONFIG_SND_SOC_MT6660=m
CONFIG_SND_SOC_NAU8315=m
CONFIG_SND_SOC_NAU8540=m
CONFIG_SND_SOC_NAU8810=m
CONFIG_SND_SOC_NAU8821=m
# CONFIG_SND_SOC_NAU8822 is not set
CONFIG_SND_SOC_NAU8824=m
CONFIG_SND_SOC_NAU8825=m
CONFIG_SND_SOC_TPA6130A2=m
CONFIG_SND_SOC_LPASS_MACRO_COMMON=m
CONFIG_SND_SOC_LPASS_WSA_MACRO=m
CONFIG_SND_SOC_LPASS_VA_MACRO=m
# CONFIG_SND_SOC_LPASS_RX_MACRO is not set
# CONFIG_SND_SOC_LPASS_TX_MACRO is not set
# end of CODEC drivers

CONFIG_SND_SIMPLE_CARD_UTILS=m
CONFIG_SND_SIMPLE_CARD=m
CONFIG_SND_AUDIO_GRAPH_CARD=m
# CONFIG_SND_AUDIO_GRAPH_CARD2 is not set
CONFIG_SND_TEST_COMPONENT=m
# CONFIG_SND_VIRTIO is not set
CONFIG_AC97_BUS=m

#
# HID support
#
CONFIG_HID=y
# CONFIG_HID_BATTERY_STRENGTH is not set
# CONFIG_HIDRAW is not set
# CONFIG_UHID is not set
CONFIG_HID_GENERIC=y

#
# Special HID drivers
#
# CONFIG_HID_A4TECH is not set
# CONFIG_HID_ACCUTOUCH is not set
# CONFIG_HID_ACRUX is not set
# CONFIG_HID_APPLE is not set
# CONFIG_HID_APPLEIR is not set
# CONFIG_HID_ASUS is not set
# CONFIG_HID_AUREAL is not set
# CONFIG_HID_BELKIN is not set
# CONFIG_HID_BETOP_FF is not set
# CONFIG_HID_BIGBEN_FF is not set
# CONFIG_HID_CHERRY is not set
# CONFIG_HID_CHICONY is not set
# CONFIG_HID_CORSAIR is not set
# CONFIG_HID_COUGAR is not set
# CONFIG_HID_MACALLY is not set
# CONFIG_HID_PRODIKEYS is not set
# CONFIG_HID_CMEDIA is not set
# CONFIG_HID_CREATIVE_SB0540 is not set
# CONFIG_HID_CYPRESS is not set
# CONFIG_HID_DRAGONRISE is not set
# CONFIG_HID_EMS_FF is not set
# CONFIG_HID_ELAN is not set
# CONFIG_HID_ELECOM is not set
# CONFIG_HID_ELO is not set
# CONFIG_HID_EZKEY is not set
# CONFIG_HID_GEMBIRD is not set
# CONFIG_HID_GFRM is not set
# CONFIG_HID_GLORIOUS is not set
# CONFIG_HID_HOLTEK is not set
# CONFIG_HID_VIVALDI is not set
# CONFIG_HID_GT683R is not set
# CONFIG_HID_KEYTOUCH is not set
# CONFIG_HID_KYE is not set
# CONFIG_HID_UCLOGIC is not set
# CONFIG_HID_WALTOP is not set
# CONFIG_HID_VIEWSONIC is not set
# CONFIG_HID_VRC2 is not set
# CONFIG_HID_XIAOMI is not set
# CONFIG_HID_GYRATION is not set
# CONFIG_HID_ICADE is not set
# CONFIG_HID_ITE is not set
# CONFIG_HID_JABRA is not set
# CONFIG_HID_TWINHAN is not set
# CONFIG_HID_KENSINGTON is not set
# CONFIG_HID_LCPOWER is not set
# CONFIG_HID_LED is not set
# CONFIG_HID_LENOVO is not set
# CONFIG_HID_LETSKETCH is not set
# CONFIG_HID_LOGITECH is not set
# CONFIG_HID_MAGICMOUSE is not set
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
# CONFIG_HID_MEGAWORLD_FF is not set
# CONFIG_HID_REDRAGON is not set
# CONFIG_HID_MICROSOFT is not set
# CONFIG_HID_MONTEREY is not set
# CONFIG_HID_MULTITOUCH is not set
# CONFIG_HID_NINTENDO is not set
# CONFIG_HID_NTI is not set
# CONFIG_HID_NTRIG is not set
# CONFIG_HID_ORTEK is not set
# CONFIG_HID_PANTHERLORD is not set
# CONFIG_HID_PENMOUNT is not set
# CONFIG_HID_PETALYNX is not set
# CONFIG_HID_PICOLCD is not set
# CONFIG_HID_PLANTRONICS is not set
# CONFIG_HID_PLAYSTATION is not set
# CONFIG_HID_PXRC is not set
# CONFIG_HID_RAZER is not set
# CONFIG_HID_PRIMAX is not set
# CONFIG_HID_RETRODE is not set
# CONFIG_HID_ROCCAT is not set
# CONFIG_HID_SAITEK is not set
# CONFIG_HID_SAMSUNG is not set
# CONFIG_HID_SEMITEK is not set
# CONFIG_HID_SIGMAMICRO is not set
# CONFIG_HID_SONY is not set
# CONFIG_HID_SPEEDLINK is not set
# CONFIG_HID_STEAM is not set
# CONFIG_HID_STEELSERIES is not set
# CONFIG_HID_SUNPLUS is not set
# CONFIG_HID_RMI is not set
# CONFIG_HID_GREENASIA is not set
# CONFIG_HID_SMARTJOYPLUS is not set
# CONFIG_HID_TIVO is not set
# CONFIG_HID_TOPSEED is not set
# CONFIG_HID_TOPRE is not set
# CONFIG_HID_THINGM is not set
# CONFIG_HID_THRUSTMASTER is not set
# CONFIG_HID_UDRAW_PS3 is not set
# CONFIG_HID_WACOM is not set
# CONFIG_HID_WIIMOTE is not set
# CONFIG_HID_XINMO is not set
# CONFIG_HID_ZEROPLUS is not set
# CONFIG_HID_ZYDACRON is not set
# CONFIG_HID_SENSOR_HUB is not set
# CONFIG_HID_ALPS is not set
# CONFIG_HID_MCP2221 is not set
# end of Special HID drivers

#
# USB HID support
#
CONFIG_USB_HID=y
# CONFIG_HID_PID is not set
# CONFIG_USB_HIDDEV is not set
# end of USB HID support

#
# I2C HID support
#
# CONFIG_I2C_HID_OF is not set
# CONFIG_I2C_HID_OF_ELAN is not set
# CONFIG_I2C_HID_OF_GOODIX is not set
# end of I2C HID support
# end of HID support

CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y
CONFIG_USB_EHCI_BIG_ENDIAN_DESC=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_COMMON=y
# CONFIG_USB_LED_TRIG is not set
CONFIG_USB_ULPI_BUS=y
# CONFIG_USB_CONN_GPIO is not set
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y

#
# Miscellaneous USB options
#
# CONFIG_USB_DEFAULT_PERSIST is not set
CONFIG_USB_FEW_INIT_RETRIES=y
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_OTG_PRODUCTLIST is not set
CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB=y
CONFIG_USB_LEDS_TRIGGER_USBPORT=m
CONFIG_USB_AUTOSUSPEND_DELAY=2
# CONFIG_USB_MON is not set

#
# USB Host Controller Drivers
#
CONFIG_USB_C67X00_HCD=y
CONFIG_USB_XHCI_HCD=y
# CONFIG_USB_XHCI_PCI_RENESAS is not set
CONFIG_USB_XHCI_PLATFORM=y
CONFIG_USB_XHCI_HISTB=m
CONFIG_USB_XHCI_MTK=m
CONFIG_USB_XHCI_MVEBU=m
CONFIG_USB_XHCI_RCAR=m
CONFIG_USB_EHCI_BRCMSTB=y
CONFIG_USB_BRCMSTB=y
CONFIG_USB_EHCI_HCD=y
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
CONFIG_XPS_USB_HCD_XILINX=y
# CONFIG_USB_EHCI_FSL is not set
# CONFIG_USB_EHCI_HCD_NPCM7XX is not set
CONFIG_USB_EHCI_HCD_OMAP=m
CONFIG_USB_EHCI_HCD_ORION=m
CONFIG_USB_EHCI_HCD_SPEAR=y
CONFIG_USB_EHCI_HCD_STI=y
CONFIG_USB_EHCI_HCD_AT91=m
# CONFIG_USB_EHCI_SH is not set
CONFIG_USB_EHCI_EXYNOS=m
# CONFIG_USB_EHCI_MV is not set
# CONFIG_USB_CNS3XXX_EHCI is not set
CONFIG_USB_EHCI_HCD_PLATFORM=y
CONFIG_USB_OXU210HP_HCD=m
CONFIG_USB_ISP116X_HCD=y
CONFIG_USB_ISP1362_HCD=y
# CONFIG_USB_FOTG210_HCD is not set
CONFIG_USB_MAX3421_HCD=m
# CONFIG_USB_OHCI_HCD is not set
CONFIG_USB_U132_HCD=m
CONFIG_USB_SL811_HCD=m
CONFIG_USB_SL811_HCD_ISO=y
CONFIG_USB_SL811_CS=m
CONFIG_USB_R8A66597_HCD=y
CONFIG_USB_RENESAS_USBHS_HCD=m
CONFIG_USB_HCD_BCMA=m
# CONFIG_USB_HCD_TEST_MODE is not set
CONFIG_USB_RENESAS_USBHS=m

#
# USB Device Class drivers
#
CONFIG_USB_PRINTER=m
CONFIG_USB_WDM=m
# CONFIG_USB_TMC is not set

#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#

#
# also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_REALTEK is not set
CONFIG_USB_STORAGE_DATAFAB=y
CONFIG_USB_STORAGE_FREECOM=y
# CONFIG_USB_STORAGE_ISD200 is not set
# CONFIG_USB_STORAGE_USBAT is not set
CONFIG_USB_STORAGE_SDDR09=m
CONFIG_USB_STORAGE_SDDR55=m
# CONFIG_USB_STORAGE_JUMPSHOT is not set
CONFIG_USB_STORAGE_ALAUDA=m
CONFIG_USB_STORAGE_ONETOUCH=y
# CONFIG_USB_STORAGE_KARMA is not set
CONFIG_USB_STORAGE_CYPRESS_ATACB=m
CONFIG_USB_STORAGE_ENE_UB6250=y
CONFIG_USB_UAS=m

#
# USB Imaging devices
#
CONFIG_USB_MDC800=y
CONFIG_USB_MICROTEK=y
CONFIG_USB_CDNS_SUPPORT=m
CONFIG_USB_CDNS_HOST=y
CONFIG_USB_CDNS3=m
# CONFIG_USB_CDNS3_GADGET is not set
CONFIG_USB_CDNS3_HOST=y
CONFIG_USB_CDNS3_TI=m
# CONFIG_USB_CDNS3_IMX is not set
CONFIG_USB_MTU3=m
CONFIG_USB_MTU3_HOST=y
# CONFIG_USB_MTU3_GADGET is not set
# CONFIG_USB_MTU3_DUAL_ROLE is not set
# CONFIG_USB_MTU3_DEBUG is not set
CONFIG_USB_MUSB_HDRC=y
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_GADGET is not set
CONFIG_USB_MUSB_DUAL_ROLE=y

#
# Platform Glue Layer
#
CONFIG_USB_MUSB_DSPS=m
# CONFIG_USB_MUSB_UX500 is not set
# CONFIG_USB_MUSB_MEDIATEK is not set
CONFIG_USB_MUSB_POLARFIRE_SOC=m

#
# MUSB DMA mode
#
# CONFIG_MUSB_PIO_ONLY is not set
# CONFIG_USB_INVENTRA_DMA is not set
# CONFIG_USB_DWC3 is not set
CONFIG_USB_DWC2=y
# CONFIG_USB_DWC2_HOST is not set

#
# Gadget/Dual-role mode requires USB Gadget support to be enabled
#
# CONFIG_USB_DWC2_PERIPHERAL is not set
CONFIG_USB_DWC2_DUAL_ROLE=y
# CONFIG_USB_DWC2_DEBUG is not set
# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
CONFIG_USB_CHIPIDEA=y
# CONFIG_USB_CHIPIDEA_UDC is not set
# CONFIG_USB_CHIPIDEA_HOST is not set
CONFIG_USB_CHIPIDEA_MSM=y
# CONFIG_USB_CHIPIDEA_IMX is not set
CONFIG_USB_CHIPIDEA_GENERIC=m
# CONFIG_USB_CHIPIDEA_TEGRA is not set
CONFIG_USB_ISP1760=y
CONFIG_USB_ISP1760_HCD=y
CONFIG_USB_ISP1760_HOST_ROLE=y
# CONFIG_USB_ISP1760_GADGET_ROLE is not set
# CONFIG_USB_ISP1760_DUAL_ROLE is not set

#
# USB port drivers
#
# CONFIG_USB_USS720 is not set

#
# USB Miscellaneous drivers
#
CONFIG_USB_EMI62=m
CONFIG_USB_EMI26=m
# CONFIG_USB_ADUTUX is not set
CONFIG_USB_SEVSEG=y
CONFIG_USB_LEGOTOWER=m
CONFIG_USB_LCD=y
# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
CONFIG_USB_IDMOUSE=y
CONFIG_USB_FTDI_ELAN=m
CONFIG_USB_APPLEDISPLAY=y
CONFIG_USB_QCOM_EUD=y
CONFIG_APPLE_MFI_FASTCHARGE=m
# CONFIG_USB_SISUSBVGA is not set
# CONFIG_USB_LD is not set
CONFIG_USB_TRANCEVIBRATOR=m
CONFIG_USB_IOWARRIOR=y
# CONFIG_USB_TEST is not set
CONFIG_USB_EHSET_TEST_FIXTURE=y
CONFIG_USB_ISIGHTFW=m
CONFIG_USB_YUREX=y
CONFIG_USB_EZUSB_FX2=y
CONFIG_USB_HUB_USB251XB=y
# CONFIG_USB_HSIC_USB3503 is not set
# CONFIG_USB_HSIC_USB4604 is not set
# CONFIG_USB_LINK_LAYER_TEST is not set
CONFIG_BRCM_USB_PINMAP=y
CONFIG_USB_ONBOARD_HUB=m

#
# USB Physical Layer drivers
#
CONFIG_USB_PHY=y
CONFIG_KEYSTONE_USB_PHY=m
CONFIG_NOP_USB_XCEIV=m
# CONFIG_AM335X_PHY_USB is not set
CONFIG_USB_GPIO_VBUS=y
CONFIG_USB_ISP1301=y
CONFIG_USB_TEGRA_PHY=y
CONFIG_USB_ULPI=y
CONFIG_USB_ULPI_VIEWPORT=y
# CONFIG_JZ4770_PHY is not set
# end of USB Physical Layer drivers

CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_DEBUG=y
# CONFIG_USB_GADGET_VERBOSE is not set
CONFIG_USB_GADGET_DEBUG_FILES=y
# CONFIG_USB_GADGET_DEBUG_FS is not set
CONFIG_USB_GADGET_VBUS_DRAW=2
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2

#
# USB Peripheral Controller
#
# CONFIG_USB_LPC32XX is not set
# CONFIG_USB_FUSB300 is not set
CONFIG_USB_FOTG210_UDC=y
CONFIG_USB_GR_UDC=m
CONFIG_USB_R8A66597=m
# CONFIG_USB_RENESAS_USBHS_UDC is not set
CONFIG_USB_RENESAS_USB3=m
CONFIG_USB_PXA27X=m
CONFIG_USB_MV_UDC=m
CONFIG_USB_MV_U3D=m
CONFIG_USB_SNP_CORE=m
CONFIG_USB_SNP_UDC_PLAT=m
CONFIG_USB_M66592=y
# CONFIG_USB_BDC_UDC is not set
CONFIG_USB_NET2272=m
# CONFIG_USB_NET2272_DMA is not set
# CONFIG_USB_GADGET_XILINX is not set
CONFIG_USB_MAX3420_UDC=m
CONFIG_USB_ASPEED_UDC=y
CONFIG_USB_ASPEED_VHUB=m
CONFIG_USB_DUMMY_HCD=m
# end of USB Peripheral Controller

CONFIG_USB_LIBCOMPOSITE=y
CONFIG_USB_U_AUDIO=m
CONFIG_USB_F_MASS_STORAGE=y
CONFIG_USB_F_FS=y
CONFIG_USB_F_UAC2=m
CONFIG_USB_F_UVC=y
CONFIG_USB_F_HID=y
CONFIG_USB_F_PRINTER=y
CONFIG_USB_CONFIGFS=y
# CONFIG_USB_CONFIGFS_MASS_STORAGE is not set
# CONFIG_USB_CONFIGFS_F_LB_SS is not set
# CONFIG_USB_CONFIGFS_F_FS is not set
# CONFIG_USB_CONFIGFS_F_UAC1 is not set
# CONFIG_USB_CONFIGFS_F_UAC1_LEGACY is not set
CONFIG_USB_CONFIGFS_F_UAC2=y
# CONFIG_USB_CONFIGFS_F_MIDI is not set
CONFIG_USB_CONFIGFS_F_HID=y
CONFIG_USB_CONFIGFS_F_UVC=y
# CONFIG_USB_CONFIGFS_F_PRINTER is not set

#
# USB Gadget precomposed configurations
#
# CONFIG_USB_ZERO is not set
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_GADGETFS is not set
CONFIG_USB_FUNCTIONFS=y
CONFIG_USB_FUNCTIONFS_GENERIC=y
CONFIG_USB_MASS_STORAGE=y
# CONFIG_USB_MIDI_GADGET is not set
CONFIG_USB_G_PRINTER=y
CONFIG_USB_G_HID=y
CONFIG_USB_G_WEBCAM=y
CONFIG_USB_RAW_GADGET=m
# end of USB Gadget precomposed configurations

CONFIG_TYPEC=y
CONFIG_TYPEC_TCPM=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_RT1711H=m
CONFIG_TYPEC_MT6360=m
CONFIG_TYPEC_TCPCI_MT6370=m
CONFIG_TYPEC_TCPCI_MAXIM=m
CONFIG_TYPEC_FUSB302=m
# CONFIG_TYPEC_UCSI is not set
CONFIG_TYPEC_TPS6598X=y
CONFIG_TYPEC_ANX7411=m
# CONFIG_TYPEC_RT1719 is not set
CONFIG_TYPEC_HD3SS3220=m
CONFIG_TYPEC_STUSB160X=y
CONFIG_TYPEC_QCOM_PMIC=y
CONFIG_TYPEC_WUSB3801=y

#
# USB Type-C Multiplexer/DeMultiplexer Switch support
#
CONFIG_TYPEC_MUX_FSA4480=y
# CONFIG_TYPEC_MUX_PI3USB30532 is not set
# end of USB Type-C Multiplexer/DeMultiplexer Switch support

#
# USB Type-C Alternate Mode drivers
#
# end of USB Type-C Alternate Mode drivers

CONFIG_USB_ROLE_SWITCH=y
# CONFIG_MMC is not set
CONFIG_SCSI_UFSHCD=y
# CONFIG_SCSI_UFS_BSG is not set
CONFIG_SCSI_UFS_CRYPTO=y
CONFIG_SCSI_UFS_HPB=y
# CONFIG_SCSI_UFS_FAULT_INJECTION is not set
CONFIG_SCSI_UFSHCD_PLATFORM=y
CONFIG_SCSI_UFS_CDNS_PLATFORM=m
# CONFIG_SCSI_UFS_DWC_TC_PLATFORM is not set
CONFIG_SCSI_UFS_HISI=y
# CONFIG_SCSI_UFS_RENESAS is not set
CONFIG_SCSI_UFS_TI_J721E=m
CONFIG_SCSI_UFS_EXYNOS=y
# CONFIG_MEMSTICK is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
CONFIG_LEDS_CLASS_FLASH=m
CONFIG_LEDS_CLASS_MULTICOLOR=m
CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y

#
# LED drivers
#
CONFIG_LEDS_88PM860X=y
CONFIG_LEDS_AN30259A=y
CONFIG_LEDS_ARIEL=y
CONFIG_LEDS_AW2013=y
CONFIG_LEDS_BCM6328=y
CONFIG_LEDS_BCM6358=m
CONFIG_LEDS_CPCAP=m
CONFIG_LEDS_CR0014114=y
CONFIG_LEDS_EL15203000=y
CONFIG_LEDS_TURRIS_OMNIA=m
CONFIG_LEDS_LM3530=y
CONFIG_LEDS_LM3532=m
# CONFIG_LEDS_LM3533 is not set
# CONFIG_LEDS_LM3642 is not set
CONFIG_LEDS_LM3692X=m
# CONFIG_LEDS_S3C24XX is not set
CONFIG_LEDS_COBALT_QUBE=m
CONFIG_LEDS_COBALT_RAQ=y
CONFIG_LEDS_PCA9532=y
# CONFIG_LEDS_PCA9532_GPIO is not set
CONFIG_LEDS_GPIO=m
CONFIG_LEDS_LP3944=y
# CONFIG_LEDS_LP3952 is not set
# CONFIG_LEDS_LP50XX is not set
CONFIG_LEDS_LP55XX_COMMON=m
CONFIG_LEDS_LP5521=m
CONFIG_LEDS_LP5523=m
CONFIG_LEDS_LP5562=m
# CONFIG_LEDS_LP8501 is not set
CONFIG_LEDS_LP8860=m
# CONFIG_LEDS_PCA955X is not set
CONFIG_LEDS_PCA963X=m
CONFIG_LEDS_WM831X_STATUS=m
CONFIG_LEDS_DA9052=m
CONFIG_LEDS_DAC124S085=m
# CONFIG_LEDS_PWM is not set
# CONFIG_LEDS_REGULATOR is not set
CONFIG_LEDS_BD2802=y
CONFIG_LEDS_LT3593=m
CONFIG_LEDS_MC13783=m
# CONFIG_LEDS_NS2 is not set
# CONFIG_LEDS_NETXBIG is not set
CONFIG_LEDS_ASIC3=y
CONFIG_LEDS_TCA6507=m
CONFIG_LEDS_TLC591XX=y
# CONFIG_LEDS_MAX77650 is not set
CONFIG_LEDS_LM355x=y
CONFIG_LEDS_OT200=m
# CONFIG_LEDS_IS31FL319X is not set
CONFIG_LEDS_IS31FL32XX=y

#
# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
#
# CONFIG_LEDS_BLINKM is not set
# CONFIG_LEDS_SYSCON is not set
CONFIG_LEDS_PM8058=y
# CONFIG_LEDS_MLXREG is not set
CONFIG_LEDS_USER=m
CONFIG_LEDS_SPI_BYTE=y
CONFIG_LEDS_TI_LMU_COMMON=y
CONFIG_LEDS_LM3697=m
# CONFIG_LEDS_TPS6105X is not set
CONFIG_LEDS_IP30=y
CONFIG_LEDS_BCM63138=y
CONFIG_LEDS_LGM=m

#
# Flash and Torch LED drivers
#
CONFIG_LEDS_AS3645A=m
# CONFIG_LEDS_KTD2692 is not set
# CONFIG_LEDS_LM3601X is not set
# CONFIG_LEDS_MAX77693 is not set
CONFIG_LEDS_MT6360=m
CONFIG_LEDS_RT4505=m
CONFIG_LEDS_RT8515=m
CONFIG_LEDS_SGM3140=m

#
# RGB LED drivers
#
# CONFIG_LEDS_PWM_MULTICOLOR is not set
CONFIG_LEDS_QCOM_LPG=m

#
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_ONESHOT=y
# CONFIG_LEDS_TRIGGER_DISK is not set
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CPU=y
# CONFIG_LEDS_TRIGGER_ACTIVITY is not set
CONFIG_LEDS_TRIGGER_GPIO=m
CONFIG_LEDS_TRIGGER_DEFAULT_ON=m

#
# iptables trigger is under Netfilter config (LED target)
#
CONFIG_LEDS_TRIGGER_TRANSIENT=y
CONFIG_LEDS_TRIGGER_CAMERA=m
CONFIG_LEDS_TRIGGER_PANIC=y
# CONFIG_LEDS_TRIGGER_PATTERN is not set
CONFIG_LEDS_TRIGGER_AUDIO=m

#
# Simple LED drivers
#
# CONFIG_ACCESSIBILITY is not set
# CONFIG_RTC_CLASS is not set
# CONFIG_DMADEVICES is not set

#
# DMABUF options
#
# CONFIG_SYNC_FILE is not set
# CONFIG_UDMABUF is not set
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_DEBUG is not set
CONFIG_DMABUF_SELFTESTS=y
# CONFIG_DMABUF_HEAPS is not set
# CONFIG_DMABUF_SYSFS_STATS is not set
# end of DMABUF options

# CONFIG_AUXDISPLAY is not set
# CONFIG_PANEL is not set
CONFIG_UIO=m
CONFIG_UIO_PDRV_GENIRQ=m
# CONFIG_UIO_DMEM_GENIRQ is not set
CONFIG_UIO_PRUSS=m
CONFIG_VFIO=y
CONFIG_VFIO_VIRQFD=y
# CONFIG_VFIO_NOIOMMU is not set
CONFIG_VFIO_PLATFORM=y
CONFIG_VFIO_AMBA=m
CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET=m
# CONFIG_VFIO_PLATFORM_AMDXGBE_RESET is not set
CONFIG_VFIO_PLATFORM_BCMFLEXRM_RESET=y
CONFIG_VFIO_MDEV=m
CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_ANCHOR=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_MENU=y
# CONFIG_VIRTIO_BALLOON is not set
# CONFIG_VIRTIO_INPUT is not set
CONFIG_VIRTIO_MMIO=y
# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set
CONFIG_VHOST_MENU=y
CONFIG_VHOST_CROSS_ENDIAN_LEGACY=y

#
# Microsoft Hyper-V guest support
#
# end of Microsoft Hyper-V guest support

# CONFIG_GREYBUS is not set
# CONFIG_COMEDI is not set
CONFIG_STAGING=y

#
# IIO staging drivers
#

#
# Accelerometers
#
CONFIG_ADIS16203=m
CONFIG_ADIS16240=m
# end of Accelerometers

#
# Analog to digital converters
#
CONFIG_AD7816=m
# end of Analog to digital converters

#
# Analog digital bi-direction converters
#
# CONFIG_ADT7316 is not set
# end of Analog digital bi-direction converters

#
# Direct Digital Synthesis
#
# CONFIG_AD9832 is not set
CONFIG_AD9834=m
# end of Direct Digital Synthesis

#
# Network Analyzer, Impedance Converters
#
CONFIG_AD5933=m
# end of Network Analyzer, Impedance Converters

#
# Active energy metering IC
#
CONFIG_ADE7854=m
CONFIG_ADE7854_I2C=m
# CONFIG_ADE7854_SPI is not set
# end of Active energy metering IC

#
# Resolver to digital converters
#
# CONFIG_AD2S1210 is not set
# end of Resolver to digital converters
# end of IIO staging drivers

CONFIG_USB_EMXX=m
# CONFIG_STAGING_MEDIA is not set
# CONFIG_STAGING_BOARD is not set
CONFIG_FB_TFT=m
CONFIG_FB_TFT_AGM1264K_FL=m
# CONFIG_FB_TFT_BD663474 is not set
CONFIG_FB_TFT_HX8340BN=m
CONFIG_FB_TFT_HX8347D=m
# CONFIG_FB_TFT_HX8353D is not set
CONFIG_FB_TFT_HX8357D=m
CONFIG_FB_TFT_ILI9163=m
CONFIG_FB_TFT_ILI9320=m
CONFIG_FB_TFT_ILI9325=m
CONFIG_FB_TFT_ILI9340=m
CONFIG_FB_TFT_ILI9341=m
CONFIG_FB_TFT_ILI9481=m
# CONFIG_FB_TFT_ILI9486 is not set
CONFIG_FB_TFT_PCD8544=m
CONFIG_FB_TFT_RA8875=m
# CONFIG_FB_TFT_S6D02A1 is not set
# CONFIG_FB_TFT_S6D1121 is not set
CONFIG_FB_TFT_SEPS525=m
CONFIG_FB_TFT_SH1106=m
CONFIG_FB_TFT_SSD1289=m
# CONFIG_FB_TFT_SSD1305 is not set
# CONFIG_FB_TFT_SSD1306 is not set
# CONFIG_FB_TFT_SSD1331 is not set
# CONFIG_FB_TFT_SSD1351 is not set
# CONFIG_FB_TFT_ST7735R is not set
# CONFIG_FB_TFT_ST7789V is not set
CONFIG_FB_TFT_TINYLCD=m
CONFIG_FB_TFT_TLS8204=m
# CONFIG_FB_TFT_UC1611 is not set
CONFIG_FB_TFT_UC1701=m
# CONFIG_FB_TFT_UPD161704 is not set
CONFIG_MOST_COMPONENTS=m
CONFIG_MOST_VIDEO=m
CONFIG_MOST_DIM2=m
# CONFIG_MOST_I2C is not set
# CONFIG_BCM_VIDEOCORE is not set
CONFIG_PI433=y
CONFIG_XIL_AXIS_FIFO=m
# CONFIG_FIELDBUS_DEV is not set
# CONFIG_GOLDFISH is not set
CONFIG_CHROME_PLATFORMS=y
# CONFIG_CROS_EC is not set
# CONFIG_MELLANOX_PLATFORM is not set
CONFIG_OLPC_XO175=y
# CONFIG_SURFACE_PLATFORMS is not set
CONFIG_HAVE_CLK=y
CONFIG_HAVE_CLK_PREPARE=y
CONFIG_COMMON_CLK=y
CONFIG_COMMON_CLK_WM831X=y

#
# Clock driver for ARM Reference designs
#
# CONFIG_CLK_ICST is not set
CONFIG_CLK_SP810=y
# end of Clock driver for ARM Reference designs

# CONFIG_CLK_HSDK is not set
CONFIG_LMK04832=m
CONFIG_COMMON_CLK_APPLE_NCO=y
# CONFIG_COMMON_CLK_MAX77686 is not set
CONFIG_COMMON_CLK_MAX9485=y
# CONFIG_COMMON_CLK_RK808 is not set
CONFIG_COMMON_CLK_HI655X=y
CONFIG_COMMON_CLK_SCMI=y
CONFIG_COMMON_CLK_SCPI=y
# CONFIG_COMMON_CLK_SI5341 is not set
CONFIG_COMMON_CLK_SI5351=y
# CONFIG_COMMON_CLK_SI514 is not set
# CONFIG_COMMON_CLK_SI544 is not set
CONFIG_COMMON_CLK_SI570=y
# CONFIG_COMMON_CLK_BM1880 is not set
CONFIG_COMMON_CLK_CDCE706=m
# CONFIG_COMMON_CLK_TPS68470 is not set
CONFIG_COMMON_CLK_CDCE925=y
CONFIG_COMMON_CLK_CS2000_CP=m
CONFIG_COMMON_CLK_EN7523=y
CONFIG_COMMON_CLK_FSL_FLEXSPI=y
# CONFIG_COMMON_CLK_FSL_SAI is not set
CONFIG_COMMON_CLK_GEMINI=y
CONFIG_COMMON_CLK_LAN966X=m
# CONFIG_COMMON_CLK_ASPEED is not set
CONFIG_COMMON_CLK_S2MPS11=m
CONFIG_CLK_TWL6040=y
CONFIG_COMMON_CLK_AXI_CLKGEN=m
# CONFIG_CLK_QORIQ is not set
# CONFIG_CLK_LS1028A_PLLDIG is not set
# CONFIG_COMMON_CLK_XGENE is not set
# CONFIG_COMMON_CLK_LOCHNAGAR is not set
CONFIG_COMMON_CLK_PALMAS=m
CONFIG_COMMON_CLK_PWM=m
# CONFIG_COMMON_CLK_OXNAS is not set
CONFIG_COMMON_CLK_RS9_PCIE=y
CONFIG_COMMON_CLK_VC5=m
CONFIG_COMMON_CLK_VC7=y
CONFIG_COMMON_CLK_MMP2_AUDIO=m
CONFIG_COMMON_CLK_FIXED_MMIO=y
# CONFIG_CLK_ACTIONS is not set
CONFIG_CLK_BAIKAL_T1=y
# CONFIG_CLK_BT1_CCU_PLL is not set
# CONFIG_CLK_BT1_CCU_DIV is not set
# CONFIG_CLK_BT1_CCU_RST is not set
CONFIG_CLK_BCM2711_DVP=y
CONFIG_CLK_BCM2835=y
CONFIG_CLK_BCM_63XX=y
CONFIG_CLK_BCM_63XX_GATE=y
CONFIG_CLK_BCM_KONA=y
CONFIG_COMMON_CLK_IPROC=y
# CONFIG_CLK_BCM_CYGNUS is not set
# CONFIG_CLK_BCM_HR2 is not set
CONFIG_CLK_BCM_NSP=y
CONFIG_CLK_BCM_NS2=y
CONFIG_CLK_BCM_SR=y
# CONFIG_CLK_RASPBERRYPI is not set
# CONFIG_COMMON_CLK_HI3516CV300 is not set
# CONFIG_COMMON_CLK_HI3519 is not set
CONFIG_COMMON_CLK_HI3559A=y
CONFIG_COMMON_CLK_HI3660=y
CONFIG_COMMON_CLK_HI3670=y
CONFIG_COMMON_CLK_HI3798CV200=m
# CONFIG_COMMON_CLK_HI6220 is not set
CONFIG_RESET_HISI=y
# CONFIG_COMMON_CLK_BOSTON is not set
CONFIG_MXC_CLK=y
# CONFIG_CLK_IMX8MM is not set
# CONFIG_CLK_IMX8MN is not set
CONFIG_CLK_IMX8MP=y
CONFIG_CLK_IMX8MQ=y
CONFIG_CLK_IMX8ULP=m
CONFIG_CLK_IMX93=y

#
# Ingenic SoCs drivers
#
CONFIG_INGENIC_CGU_COMMON=y
CONFIG_INGENIC_CGU_JZ4740=y
# CONFIG_INGENIC_CGU_JZ4725B is not set
# CONFIG_INGENIC_CGU_JZ4760 is not set
# CONFIG_INGENIC_CGU_JZ4770 is not set
# CONFIG_INGENIC_CGU_JZ4780 is not set
CONFIG_INGENIC_CGU_X1000=y
CONFIG_INGENIC_CGU_X1830=y
# CONFIG_INGENIC_TCU_CLK is not set
# end of Ingenic SoCs drivers

CONFIG_COMMON_CLK_KEYSTONE=m
# CONFIG_TI_SYSCON_CLK is not set

#
# Clock driver for MediaTek SoC
#
CONFIG_COMMON_CLK_MEDIATEK=y
# CONFIG_COMMON_CLK_MT2701 is not set
# CONFIG_COMMON_CLK_MT2712 is not set
# CONFIG_COMMON_CLK_MT6765 is not set
CONFIG_COMMON_CLK_MT6779=m
CONFIG_COMMON_CLK_MT6779_MMSYS=m
CONFIG_COMMON_CLK_MT6779_IMGSYS=m
CONFIG_COMMON_CLK_MT6779_IPESYS=m
CONFIG_COMMON_CLK_MT6779_CAMSYS=m
CONFIG_COMMON_CLK_MT6779_VDECSYS=m
CONFIG_COMMON_CLK_MT6779_VENCSYS=m
# CONFIG_COMMON_CLK_MT6779_MFGCFG is not set
CONFIG_COMMON_CLK_MT6779_AUDSYS=m
# CONFIG_COMMON_CLK_MT6795 is not set
CONFIG_COMMON_CLK_MT6797=y
CONFIG_COMMON_CLK_MT6797_MMSYS=y
CONFIG_COMMON_CLK_MT6797_IMGSYS=y
# CONFIG_COMMON_CLK_MT6797_VDECSYS is not set
CONFIG_COMMON_CLK_MT6797_VENCSYS=y
CONFIG_COMMON_CLK_MT7622=y
CONFIG_COMMON_CLK_MT7622_ETHSYS=y
# CONFIG_COMMON_CLK_MT7622_HIFSYS is not set
CONFIG_COMMON_CLK_MT7622_AUDSYS=y
CONFIG_COMMON_CLK_MT7629=y
CONFIG_COMMON_CLK_MT7629_ETHSYS=y
# CONFIG_COMMON_CLK_MT7629_HIFSYS is not set
# CONFIG_COMMON_CLK_MT7986 is not set
CONFIG_COMMON_CLK_MT8135=y
# CONFIG_COMMON_CLK_MT8167 is not set
# CONFIG_COMMON_CLK_MT8173 is not set
# CONFIG_COMMON_CLK_MT8183 is not set
CONFIG_COMMON_CLK_MT8186=y
# CONFIG_COMMON_CLK_MT8192 is not set
CONFIG_COMMON_CLK_MT8195=y
CONFIG_COMMON_CLK_MT8365=m
CONFIG_COMMON_CLK_MT8365_APU=m
CONFIG_COMMON_CLK_MT8365_CAM=m
CONFIG_COMMON_CLK_MT8365_MFG=m
# CONFIG_COMMON_CLK_MT8365_MMSYS is not set
CONFIG_COMMON_CLK_MT8365_VDEC=m
# CONFIG_COMMON_CLK_MT8365_VENC is not set
# CONFIG_COMMON_CLK_MT8516 is not set
# end of Clock driver for MediaTek SoC

#
# Clock support for Amlogic platforms
#
# CONFIG_COMMON_CLK_AXG_AUDIO is not set
# end of Clock support for Amlogic platforms

CONFIG_MSTAR_MSC313_MPLL=y
# CONFIG_MCHP_CLK_MPFS is not set
CONFIG_COMMON_CLK_PISTACHIO=y
CONFIG_QCOM_GDSC=y
CONFIG_QCOM_RPMCC=y
CONFIG_COMMON_CLK_QCOM=y
CONFIG_QCOM_A53PLL=y
CONFIG_QCOM_A7PLL=m
# CONFIG_QCOM_CLK_APCS_MSM8916 is not set
CONFIG_QCOM_CLK_APCS_SDX55=y
CONFIG_QCOM_CLK_SMD_RPM=m
# CONFIG_QCOM_CLK_RPMH is not set
CONFIG_APQ_GCC_8084=y
CONFIG_APQ_MMCC_8084=y
# CONFIG_IPQ_APSS_PLL is not set
# CONFIG_IPQ_APSS_6018 is not set
CONFIG_IPQ_GCC_4019=m
CONFIG_IPQ_GCC_6018=m
CONFIG_IPQ_GCC_806X=y
CONFIG_IPQ_LCC_806X=y
CONFIG_IPQ_GCC_8074=y
# CONFIG_MSM_GCC_8660 is not set
# CONFIG_MSM_GCC_8909 is not set
CONFIG_MSM_GCC_8916=m
CONFIG_MSM_GCC_8939=m
CONFIG_MSM_GCC_8960=y
CONFIG_MSM_LCC_8960=y
# CONFIG_MDM_GCC_9607 is not set
CONFIG_MDM_GCC_9615=y
# CONFIG_MDM_LCC_9615 is not set
# CONFIG_MSM_MMCC_8960 is not set
CONFIG_MSM_GCC_8953=m
CONFIG_MSM_GCC_8974=y
# CONFIG_MSM_MMCC_8974 is not set
CONFIG_MSM_GCC_8976=m
# CONFIG_MSM_MMCC_8994 is not set
CONFIG_MSM_GCC_8994=m
# CONFIG_MSM_GCC_8996 is not set
# CONFIG_MSM_MMCC_8996 is not set
CONFIG_MSM_GCC_8998=m
# CONFIG_MSM_GPUCC_8998 is not set
# CONFIG_MSM_MMCC_8998 is not set
CONFIG_QCM_GCC_2290=y
CONFIG_QCM_DISPCC_2290=y
# CONFIG_QCS_GCC_404 is not set
# CONFIG_SC_CAMCC_7180 is not set
CONFIG_SC_CAMCC_7280=m
CONFIG_SC_DISPCC_7180=m
# CONFIG_SC_DISPCC_7280 is not set
CONFIG_SC_GCC_7180=y
CONFIG_SC_GCC_7280=y
# CONFIG_SC_GCC_8180X is not set
CONFIG_SC_GCC_8280XP=y
CONFIG_SC_GPUCC_7180=m
CONFIG_SC_GPUCC_7280=m
CONFIG_SC_GPUCC_8280XP=y
CONFIG_SC_LPASSCC_7280=y
# CONFIG_SC_LPASS_CORECC_7180 is not set
CONFIG_SC_LPASS_CORECC_7280=y
# CONFIG_SC_MSS_7180 is not set
CONFIG_SC_VIDEOCC_7180=m
CONFIG_SC_VIDEOCC_7280=y
# CONFIG_SDM_CAMCC_845 is not set
CONFIG_SDM_GCC_660=m
CONFIG_SDM_MMCC_660=m
# CONFIG_SDM_GPUCC_660 is not set
CONFIG_QCS_TURING_404=m
# CONFIG_QCS_Q6SSTOP_404 is not set
CONFIG_SDM_GCC_845=y
CONFIG_SDM_GPUCC_845=m
CONFIG_SDM_VIDEOCC_845=m
CONFIG_SDM_DISPCC_845=y
# CONFIG_SDM_LPASSCC_845 is not set
CONFIG_SDX_GCC_55=y
CONFIG_SDX_GCC_65=m
# CONFIG_SM_CAMCC_8250 is not set
# CONFIG_SM_CAMCC_8450 is not set
CONFIG_SM_DISPCC_6115=y
# CONFIG_SM_DISPCC_6125 is not set
CONFIG_SM_DISPCC_8250=m
# CONFIG_SM_DISPCC_6350 is not set
# CONFIG_SM_DISPCC_8450 is not set
CONFIG_SM_GCC_6115=y
CONFIG_SM_GCC_6125=m
CONFIG_SM_GCC_6350=y
# CONFIG_SM_GCC_6375 is not set
CONFIG_SM_GCC_8150=y
CONFIG_SM_GCC_8250=m
CONFIG_SM_GCC_8350=m
CONFIG_SM_GCC_8450=y
CONFIG_SM_GPUCC_6350=m
CONFIG_SM_GPUCC_8150=y
# CONFIG_SM_GPUCC_8250 is not set
CONFIG_SM_GPUCC_8350=m
CONFIG_SM_VIDEOCC_8150=y
CONFIG_SM_VIDEOCC_8250=m
CONFIG_SPMI_PMIC_CLKDIV=y
# CONFIG_QCOM_HFPLL is not set
CONFIG_KPSS_XCC=y
# CONFIG_CLK_GFM_LPASS_SM8250 is not set
# CONFIG_CLK_MT7621 is not set
CONFIG_CLK_RENESAS=y
CONFIG_CLK_EMEV2=y
# CONFIG_CLK_RZA1 is not set
CONFIG_CLK_R7S9210=y
# CONFIG_CLK_R8A73A4 is not set
CONFIG_CLK_R8A7740=y
CONFIG_CLK_R8A7742=y
CONFIG_CLK_R8A7743=y
# CONFIG_CLK_R8A7745 is not set
# CONFIG_CLK_R8A77470 is not set
CONFIG_CLK_R8A774A1=y
# CONFIG_CLK_R8A774B1 is not set
# CONFIG_CLK_R8A774C0 is not set
# CONFIG_CLK_R8A774E1 is not set
CONFIG_CLK_R8A7778=y
# CONFIG_CLK_R8A7779 is not set
# CONFIG_CLK_R8A7790 is not set
CONFIG_CLK_R8A7791=y
CONFIG_CLK_R8A7792=y
# CONFIG_CLK_R8A7794 is not set
CONFIG_CLK_R8A7795=y
# CONFIG_CLK_R8A77960 is not set
# CONFIG_CLK_R8A77961 is not set
CONFIG_CLK_R8A77965=y
# CONFIG_CLK_R8A77970 is not set
CONFIG_CLK_R8A77980=y
# CONFIG_CLK_R8A77990 is not set
# CONFIG_CLK_R8A77995 is not set
# CONFIG_CLK_R8A779A0 is not set
CONFIG_CLK_R8A779F0=y
CONFIG_CLK_R8A779G0=y
# CONFIG_CLK_R9A06G032 is not set
CONFIG_CLK_R9A07G043=y
# CONFIG_CLK_R9A07G044 is not set
# CONFIG_CLK_R9A07G054 is not set
# CONFIG_CLK_R9A09G011 is not set
CONFIG_CLK_SH73A0=y
CONFIG_CLK_RCAR_CPG_LIB=y
CONFIG_CLK_RCAR_GEN2_CPG=y
CONFIG_CLK_RCAR_GEN3_CPG=y
CONFIG_CLK_RCAR_GEN4_CPG=y
# CONFIG_CLK_RCAR_USB2_CLOCK_SEL is not set
CONFIG_CLK_RZG2L=y
CONFIG_CLK_RENESAS_CPG_MSSR=y
CONFIG_CLK_RENESAS_CPG_MSTP=y
CONFIG_CLK_RENESAS_DIV6=y
CONFIG_COMMON_CLK_SAMSUNG=y
# CONFIG_S3C64XX_COMMON_CLK is not set
CONFIG_S5PV210_COMMON_CLK=y
# CONFIG_EXYNOS_3250_COMMON_CLK is not set
CONFIG_EXYNOS_4_COMMON_CLK=y
CONFIG_EXYNOS_5250_COMMON_CLK=y
CONFIG_EXYNOS_5260_COMMON_CLK=y
CONFIG_EXYNOS_5410_COMMON_CLK=y
# CONFIG_EXYNOS_5420_COMMON_CLK is not set
CONFIG_EXYNOS_ARM64_COMMON_CLK=y
CONFIG_EXYNOS_AUDSS_CLK_CON=m
CONFIG_EXYNOS_CLKOUT=y
CONFIG_S3C2410_COMMON_CLK=y
# CONFIG_S3C2412_COMMON_CLK is not set
CONFIG_S3C2443_COMMON_CLK=y
CONFIG_TESLA_FSD_COMMON_CLK=y
# CONFIG_CLK_SIFIVE is not set
# CONFIG_CLK_INTEL_SOCFPGA is not set
# CONFIG_SPRD_COMMON_CLK is not set
CONFIG_CLK_STARFIVE_JH7100=y
CONFIG_CLK_STARFIVE_JH7100_AUDIO=y
CONFIG_CLK_SUNXI=y
# CONFIG_CLK_SUNXI_CLOCKS is not set
CONFIG_CLK_SUNXI_PRCM_SUN6I=y
# CONFIG_CLK_SUNXI_PRCM_SUN8I is not set
CONFIG_CLK_SUNXI_PRCM_SUN9I=y
# CONFIG_SUNXI_CCU is not set
CONFIG_COMMON_CLK_TI_ADPLL=y
CONFIG_CLK_UNIPHIER=y
# CONFIG_COMMON_CLK_VISCONTI is not set
# CONFIG_CLK_LGM_CGU is not set
CONFIG_XILINX_VCU=y
# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set
# CONFIG_COMMON_CLK_ZYNQMP is not set
# CONFIG_HWSPINLOCK is not set

#
# Clock Source drivers
#
CONFIG_TIMER_OF=y
CONFIG_TIMER_PROBE=y
CONFIG_CLKSRC_MMIO=y
# CONFIG_BCM2835_TIMER is not set
CONFIG_BCM_KONA_TIMER=y
CONFIG_DAVINCI_TIMER=y
CONFIG_DIGICOLOR_TIMER=y
CONFIG_OMAP_DM_TIMER=y
CONFIG_DW_APB_TIMER=y
CONFIG_FTTMR010_TIMER=y
# CONFIG_IXP4XX_TIMER is not set
# CONFIG_MESON6_TIMER is not set
# CONFIG_OWL_TIMER is not set
# CONFIG_RDA_TIMER is not set
# CONFIG_SUN4I_TIMER is not set
# CONFIG_SUN5I_HSTIMER is not set
# CONFIG_TEGRA_TIMER is not set
# CONFIG_TEGRA186_TIMER is not set
CONFIG_VT8500_TIMER=y
CONFIG_NPCM7XX_TIMER=y
CONFIG_CADENCE_TTC_TIMER=y
# CONFIG_ASM9260_TIMER is not set
CONFIG_CLKSRC_DBX500_PRCMU=y
# CONFIG_CLPS711X_TIMER is not set
# CONFIG_MXS_TIMER is not set
CONFIG_NSPIRE_TIMER=y
# CONFIG_INTEGRATOR_AP_TIMER is not set
# CONFIG_CLKSRC_PISTACHIO is not set
# CONFIG_CLKSRC_TI_32K is not set
# CONFIG_CLKSRC_STM32_LP is not set
CONFIG_CLKSRC_MPS2=y
CONFIG_ARC_TIMERS=y
CONFIG_ARC_TIMERS_64BIT=y
CONFIG_ARM_TIMER_SP804=y
CONFIG_ARMV7M_SYSTICK=y
CONFIG_ATMEL_PIT=y
CONFIG_ATMEL_ST=y
# CONFIG_CLKSRC_SAMSUNG_PWM is not set
# CONFIG_FSL_FTM_TIMER is not set
CONFIG_OXNAS_RPS_TIMER=y
# CONFIG_MTK_TIMER is not set
CONFIG_SPRD_TIMER=y
CONFIG_CLKSRC_JCORE_PIT=y
# CONFIG_SH_TIMER_CMT is not set
# CONFIG_SH_TIMER_MTU2 is not set
# CONFIG_RENESAS_OSTM is not set
# CONFIG_SH_TIMER_TMU is not set
CONFIG_EM_TIMER_STI=y
# CONFIG_CLKSRC_VERSATILE is not set
CONFIG_CLKSRC_PXA=y
CONFIG_TIMER_IMX_SYS_CTR=y
# CONFIG_CLKSRC_ST_LPC is not set
# CONFIG_GXP_TIMER is not set
CONFIG_MSC313E_TIMER=y
CONFIG_INGENIC_TIMER=y
CONFIG_INGENIC_SYSOST=y
# CONFIG_INGENIC_OST is not set
CONFIG_MICROCHIP_PIT64B=y
# end of Clock Source drivers

# CONFIG_MAILBOX is not set
CONFIG_IOMMU_API=y
CONFIG_IOMMU_SUPPORT=y

#
# Generic IOMMU Pagetable Support
#
CONFIG_IOMMU_IO_PGTABLE=y
CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S_SELFTEST is not set
# end of Generic IOMMU Pagetable Support

# CONFIG_IOMMU_DEBUGFS is not set
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
CONFIG_OF_IOMMU=y
CONFIG_OMAP_IOMMU=y
# CONFIG_OMAP_IOMMU_DEBUG is not set
# CONFIG_ROCKCHIP_IOMMU is not set
CONFIG_SUN50I_IOMMU=y
# CONFIG_EXYNOS_IOMMU is not set
# CONFIG_S390_CCW_IOMMU is not set
# CONFIG_S390_AP_IOMMU is not set
CONFIG_MTK_IOMMU=m
# CONFIG_SPRD_IOMMU is not set

#
# Remoteproc drivers
#
CONFIG_REMOTEPROC=y
# CONFIG_REMOTEPROC_CDEV is not set
# CONFIG_INGENIC_VPU_RPROC is not set
CONFIG_MTK_SCP=m
# CONFIG_MESON_MX_AO_ARC_REMOTEPROC is not set
CONFIG_RCAR_REMOTEPROC=y
# end of Remoteproc drivers

#
# Rpmsg drivers
#
CONFIG_RPMSG=m
CONFIG_RPMSG_CTRL=m
CONFIG_RPMSG_NS=m
CONFIG_RPMSG_MTK_SCP=m
# CONFIG_RPMSG_VIRTIO is not set
# end of Rpmsg drivers

# CONFIG_SOUNDWIRE is not set

#
# SOC (System On Chip) specific Drivers
#

#
# Amlogic SoC drivers
#
CONFIG_MESON_CANVAS=y
CONFIG_MESON_CLK_MEASURE=m
# CONFIG_MESON_GX_SOCINFO is not set
CONFIG_MESON_MX_SOCINFO=y
# end of Amlogic SoC drivers

#
# Apple SoC drivers
#
# CONFIG_APPLE_SART is not set
# end of Apple SoC drivers

#
# ASPEED SoC drivers
#
# CONFIG_ASPEED_LPC_CTRL is not set
# CONFIG_ASPEED_LPC_SNOOP is not set
CONFIG_ASPEED_UART_ROUTING=y
CONFIG_ASPEED_P2A_CTRL=y
# CONFIG_ASPEED_SOCINFO is not set
# end of ASPEED SoC drivers

CONFIG_AT91_SOC_ID=y
# CONFIG_AT91_SOC_SFR is not set

#
# Broadcom SoC drivers
#
CONFIG_BCM2835_POWER=y
CONFIG_SOC_BCM63XX=y
CONFIG_SOC_BRCMSTB=y
CONFIG_BCM63XX_POWER=y
# CONFIG_BCM_PMB is not set
# end of Broadcom SoC drivers

#
# NXP/Freescale QorIQ SoC drivers
#
CONFIG_QUICC_ENGINE=y
CONFIG_DPAA2_CONSOLE=m
# end of NXP/Freescale QorIQ SoC drivers

#
# fujitsu SoC drivers
#
# end of fujitsu SoC drivers

#
# i.MX SoC drivers
#
CONFIG_SOC_IMX8M=y
CONFIG_SOC_IMX9=m
# end of i.MX SoC drivers

#
# IXP4xx SoC drivers
#
CONFIG_IXP4XX_QMGR=m
CONFIG_IXP4XX_NPE=m
# end of IXP4xx SoC drivers

#
# Enable LiteX SoC Builder specific drivers
#
# CONFIG_LITEX_SOC_CONTROLLER is not set
# end of Enable LiteX SoC Builder specific drivers

#
# MediaTek SoC drivers
#
# CONFIG_MTK_CMDQ is not set
CONFIG_MTK_DEVAPC=y
CONFIG_MTK_INFRACFG=y
CONFIG_MTK_PMIC_WRAP=m
CONFIG_MTK_SCPSYS=y
# CONFIG_MTK_MMSYS is not set
CONFIG_MTK_SVS=m
# end of MediaTek SoC drivers

#
# Qualcomm SoC drivers
#
CONFIG_QCOM_COMMAND_DB=m
# CONFIG_QCOM_GENI_SE is not set
CONFIG_QCOM_GSBI=y
CONFIG_QCOM_LLCC=y
CONFIG_QCOM_RPMH=m
# CONFIG_QCOM_RPMHPD is not set
CONFIG_QCOM_SMD_RPM=m
CONFIG_QCOM_SPM=y
CONFIG_QCOM_WCNSS_CTRL=m
# CONFIG_QCOM_ICC_BWMON is not set
# end of Qualcomm SoC drivers

CONFIG_SOC_RENESAS=y
# CONFIG_RST_RCAR is not set
CONFIG_SYSC_RCAR=y
CONFIG_SYSC_RCAR_GEN4=y
# CONFIG_SYSC_R8A77995 is not set
# CONFIG_SYSC_R8A7794 is not set
# CONFIG_SYSC_R8A77990 is not set
CONFIG_SYSC_R8A7779=y
CONFIG_SYSC_R8A7790=y
# CONFIG_SYSC_R8A7795 is not set
CONFIG_SYSC_R8A7791=y
# CONFIG_SYSC_R8A77965 is not set
# CONFIG_SYSC_R8A77960 is not set
CONFIG_SYSC_R8A77961=y
# CONFIG_SYSC_R8A779F0 is not set
# CONFIG_SYSC_R8A7792 is not set
CONFIG_SYSC_R8A77980=y
CONFIG_SYSC_R8A77970=y
CONFIG_SYSC_R8A779A0=y
CONFIG_SYSC_R8A779G0=y
CONFIG_SYSC_RMOBILE=y
CONFIG_SYSC_R8A77470=y
# CONFIG_SYSC_R8A7745 is not set
CONFIG_SYSC_R8A7742=y
# CONFIG_SYSC_R8A7743 is not set
CONFIG_SYSC_R8A774C0=y
CONFIG_SYSC_R8A774E1=y
# CONFIG_SYSC_R8A774A1 is not set
CONFIG_SYSC_R8A774B1=y
# CONFIG_ROCKCHIP_GRF is not set
CONFIG_ROCKCHIP_IODOMAIN=y
CONFIG_SOC_SAMSUNG=y
# CONFIG_EXYNOS_ASV_ARM is not set
CONFIG_EXYNOS_CHIPID=y
CONFIG_EXYNOS_USI=m
CONFIG_EXYNOS_PM_DOMAINS=y
CONFIG_EXYNOS_REGULATOR_COUPLER=y
# CONFIG_SOC_TEGRA20_VOLTAGE_COUPLER is not set
CONFIG_SOC_TEGRA30_VOLTAGE_COUPLER=y
CONFIG_SOC_TI=y
CONFIG_UX500_SOC_ID=y

#
# Xilinx SoC drivers
#
# end of Xilinx SoC drivers
# end of SOC (System On Chip) specific Drivers

CONFIG_PM_DEVFREQ=y

#
# DEVFREQ Governors
#
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
CONFIG_DEVFREQ_GOV_PERFORMANCE=m
CONFIG_DEVFREQ_GOV_POWERSAVE=m
CONFIG_DEVFREQ_GOV_USERSPACE=m
CONFIG_DEVFREQ_GOV_PASSIVE=y

#
# DEVFREQ Drivers
#
CONFIG_ARM_EXYNOS_BUS_DEVFREQ=y
# CONFIG_ARM_IMX_BUS_DEVFREQ is not set
# CONFIG_ARM_TEGRA_DEVFREQ is not set
CONFIG_ARM_MEDIATEK_CCI_DEVFREQ=m
# CONFIG_ARM_SUN8I_A33_MBUS_DEVFREQ is not set
CONFIG_PM_DEVFREQ_EVENT=y
# CONFIG_DEVFREQ_EVENT_EXYNOS_NOCP is not set
CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU=y
# CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI is not set
CONFIG_EXTCON=y

#
# Extcon Device Drivers
#
# CONFIG_EXTCON_ADC_JACK is not set
CONFIG_EXTCON_FSA9480=m
CONFIG_EXTCON_GPIO=y
CONFIG_EXTCON_MAX3355=m
CONFIG_EXTCON_MAX77693=m
# CONFIG_EXTCON_MAX77843 is not set
# CONFIG_EXTCON_PALMAS is not set
# CONFIG_EXTCON_PTN5150 is not set
CONFIG_EXTCON_QCOM_SPMI_MISC=y
# CONFIG_EXTCON_RT8973A is not set
CONFIG_EXTCON_SM5502=y
CONFIG_EXTCON_USB_GPIO=y
CONFIG_EXTCON_USBC_TUSB320=y
CONFIG_MEMORY=y
CONFIG_DDR=y
CONFIG_ATMEL_SDRAMC=y
CONFIG_ATMEL_EBI=y
# CONFIG_BRCMSTB_DPFE is not set
# CONFIG_BRCMSTB_MEMC is not set
# CONFIG_BT1_L2_CTL is not set
CONFIG_TI_AEMIF=y
# CONFIG_TI_EMIF is not set
CONFIG_OMAP_GPMC=y
CONFIG_OMAP_GPMC_DEBUG=y
# CONFIG_MVEBU_DEVBUS is not set
CONFIG_FSL_CORENET_CF=m
CONFIG_FSL_IFC=y
# CONFIG_JZ4780_NEMC is not set
CONFIG_MTK_SMI=m
CONFIG_DA8XX_DDRCTL=y
CONFIG_RENESAS_RPCIF=y
# CONFIG_STM32_FMC2_EBI is not set
CONFIG_SAMSUNG_MC=y
CONFIG_EXYNOS5422_DMC=y
# CONFIG_EXYNOS_SROM is not set
CONFIG_TEGRA_MC=y
CONFIG_TEGRA20_EMC=y
# CONFIG_TEGRA30_EMC is not set
CONFIG_TEGRA124_EMC=m
# CONFIG_TEGRA210_EMC is not set
CONFIG_IIO=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER_DMA=m
CONFIG_IIO_BUFFER_DMAENGINE=m
CONFIG_IIO_BUFFER_HW_CONSUMER=m
CONFIG_IIO_KFIFO_BUF=m
CONFIG_IIO_TRIGGERED_BUFFER=m
# CONFIG_IIO_CONFIGFS is not set
CONFIG_IIO_TRIGGER=y
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
# CONFIG_IIO_SW_DEVICE is not set
# CONFIG_IIO_SW_TRIGGER is not set
CONFIG_IIO_TRIGGERED_EVENT=m

#
# Accelerometers
#
# CONFIG_ADIS16201 is not set
# CONFIG_ADIS16209 is not set
CONFIG_ADXL313=m
CONFIG_ADXL313_I2C=m
CONFIG_ADXL313_SPI=m
# CONFIG_ADXL355_I2C is not set
# CONFIG_ADXL355_SPI is not set
CONFIG_ADXL367=m
CONFIG_ADXL367_SPI=m
CONFIG_ADXL367_I2C=m
CONFIG_ADXL372=m
# CONFIG_ADXL372_SPI is not set
CONFIG_ADXL372_I2C=m
CONFIG_BMA180=m
CONFIG_BMA220=m
CONFIG_BMA400=m
CONFIG_BMA400_I2C=m
CONFIG_BMA400_SPI=m
# CONFIG_BMC150_ACCEL is not set
CONFIG_BMI088_ACCEL=m
CONFIG_BMI088_ACCEL_SPI=m
CONFIG_DA280=m
CONFIG_DA311=m
CONFIG_DMARD06=m
# CONFIG_DMARD09 is not set
# CONFIG_DMARD10 is not set
CONFIG_FXLS8962AF=m
CONFIG_FXLS8962AF_I2C=m
CONFIG_FXLS8962AF_SPI=m
# CONFIG_KXSD9 is not set
CONFIG_KXCJK1013=m
CONFIG_MC3230=m
CONFIG_MMA7455=m
CONFIG_MMA7455_I2C=m
# CONFIG_MMA7455_SPI is not set
CONFIG_MMA7660=m
CONFIG_MMA8452=m
CONFIG_MMA9551_CORE=m
CONFIG_MMA9551=m
# CONFIG_MMA9553 is not set
CONFIG_MSA311=m
CONFIG_MXC4005=m
CONFIG_MXC6255=m
# CONFIG_SCA3000 is not set
CONFIG_SCA3300=m
CONFIG_STK8312=m
CONFIG_STK8BA50=m
# end of Accelerometers

#
# Analog to digital converters
#
CONFIG_AD_SIGMA_DELTA=m
# CONFIG_AD7091R5 is not set
# CONFIG_AD7124 is not set
CONFIG_AD7192=m
CONFIG_AD7266=m
CONFIG_AD7280=m
CONFIG_AD7291=m
CONFIG_AD7292=m
CONFIG_AD7298=m
# CONFIG_AD7476 is not set
CONFIG_AD7606=m
CONFIG_AD7606_IFACE_PARALLEL=m
# CONFIG_AD7606_IFACE_SPI is not set
# CONFIG_AD7766 is not set
CONFIG_AD7768_1=m
# CONFIG_AD7780 is not set
CONFIG_AD7791=m
# CONFIG_AD7793 is not set
CONFIG_AD7887=m
# CONFIG_AD7923 is not set
CONFIG_AD7949=m
CONFIG_AD799X=m
# CONFIG_AD9467 is not set
CONFIG_ADI_AXI_ADC=m
CONFIG_ASPEED_ADC=m
# CONFIG_AT91_ADC is not set
CONFIG_AT91_SAMA5D2_ADC=m
CONFIG_AXP20X_ADC=m
CONFIG_AXP288_ADC=m
# CONFIG_BCM_IPROC_ADC is not set
CONFIG_BERLIN2_ADC=m
# CONFIG_CC10001_ADC is not set
CONFIG_CPCAP_ADC=m
CONFIG_DA9150_GPADC=m
CONFIG_DLN2_ADC=m
CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EXYNOS_ADC=m
# CONFIG_FSL_MX25_ADC is not set
# CONFIG_HI8435 is not set
# CONFIG_HX711 is not set
CONFIG_INA2XX_ADC=m
CONFIG_INGENIC_ADC=m
CONFIG_IMX7D_ADC=m
# CONFIG_IMX8QXP_ADC is not set
CONFIG_LPC18XX_ADC=m
# CONFIG_LPC32XX_ADC is not set
CONFIG_LTC2471=m
CONFIG_LTC2485=m
# CONFIG_LTC2496 is not set
CONFIG_LTC2497=m
CONFIG_MAX1027=m
CONFIG_MAX11100=m
CONFIG_MAX1118=m
CONFIG_MAX11205=m
# CONFIG_MAX1241 is not set
# CONFIG_MAX1363 is not set
CONFIG_MAX9611=m
# CONFIG_MCP320X is not set
CONFIG_MCP3422=m
# CONFIG_MCP3911 is not set
# CONFIG_MEDIATEK_MT6360_ADC is not set
CONFIG_MEDIATEK_MT6577_AUXADC=m
CONFIG_MESON_SARADC=m
# CONFIG_MP2629_ADC is not set
CONFIG_NAU7802=m
# CONFIG_NPCM_ADC is not set
CONFIG_PALMAS_GPADC=m
CONFIG_QCOM_VADC_COMMON=m
CONFIG_QCOM_PM8XXX_XOADC=m
# CONFIG_QCOM_SPMI_IADC is not set
CONFIG_QCOM_SPMI_VADC=m
CONFIG_QCOM_SPMI_ADC5=m
CONFIG_RCAR_GYRO_ADC=m
CONFIG_RN5T618_ADC=m
CONFIG_ROCKCHIP_SARADC=m
CONFIG_RICHTEK_RTQ6056=m
# CONFIG_RZG2L_ADC is not set
CONFIG_SC27XX_ADC=m
CONFIG_SPEAR_ADC=m
# CONFIG_SD_ADC_MODULATOR is not set
CONFIG_STM32_ADC_CORE=m
CONFIG_STM32_ADC=m
CONFIG_STM32_DFSDM_CORE=m
CONFIG_STM32_DFSDM_ADC=m
CONFIG_SUN4I_GPADC=m
# CONFIG_TI_ADC081C is not set
CONFIG_TI_ADC0832=m
CONFIG_TI_ADC084S021=m
# CONFIG_TI_ADC12138 is not set
CONFIG_TI_ADC108S102=m
CONFIG_TI_ADC128S052=m
CONFIG_TI_ADC161S626=m
# CONFIG_TI_ADS1015 is not set
# CONFIG_TI_ADS7950 is not set
CONFIG_TI_ADS8344=m
CONFIG_TI_ADS8688=m
CONFIG_TI_ADS124S08=m
CONFIG_TI_ADS131E08=m
CONFIG_TI_TLC4541=m
CONFIG_TI_TSC2046=m
CONFIG_TWL4030_MADC=m
CONFIG_TWL6030_GPADC=m
CONFIG_VF610_ADC=m
# CONFIG_VIPERBOARD_ADC is not set
CONFIG_XILINX_XADC=m
# CONFIG_XILINX_AMS is not set
# end of Analog to digital converters

#
# Analog to digital and digital to analog converters
#
# CONFIG_AD74413R is not set
# end of Analog to digital and digital to analog converters

#
# Analog Front Ends
#
CONFIG_IIO_RESCALE=m
# end of Analog Front Ends

#
# Amplifiers
#
CONFIG_AD8366=m
CONFIG_ADA4250=m
CONFIG_HMC425=m
# end of Amplifiers

#
# Capacitance to digital converters
#
CONFIG_AD7150=m
CONFIG_AD7746=m
# end of Capacitance to digital converters

#
# Chemical Sensors
#
CONFIG_ATLAS_PH_SENSOR=m
CONFIG_ATLAS_EZO_SENSOR=m
CONFIG_BME680=m
CONFIG_BME680_I2C=m
CONFIG_BME680_SPI=m
# CONFIG_CCS811 is not set
# CONFIG_IAQCORE is not set
# CONFIG_PMS7003 is not set
CONFIG_SCD30_CORE=m
# CONFIG_SCD30_I2C is not set
CONFIG_SCD30_SERIAL=m
CONFIG_SCD4X=m
CONFIG_SENSIRION_SGP30=m
CONFIG_SENSIRION_SGP40=m
CONFIG_SPS30=m
CONFIG_SPS30_I2C=m
CONFIG_SPS30_SERIAL=m
# CONFIG_SENSEAIR_SUNRISE_CO2 is not set
# CONFIG_VZ89X is not set
# end of Chemical Sensors

#
# Hid Sensor IIO Common
#
# end of Hid Sensor IIO Common

#
# IIO SCMI Sensors
#
# end of IIO SCMI Sensors

#
# SSP Sensor Common
#
CONFIG_IIO_SSP_SENSORS_COMMONS=m
CONFIG_IIO_SSP_SENSORHUB=m
# end of SSP Sensor Common

CONFIG_IIO_ST_SENSORS_SPI=m
CONFIG_IIO_ST_SENSORS_CORE=m

#
# Digital to analog converters
#
# CONFIG_AD3552R is not set
CONFIG_AD5064=m
CONFIG_AD5360=m
CONFIG_AD5380=m
# CONFIG_AD5421 is not set
# CONFIG_AD5446 is not set
# CONFIG_AD5449 is not set
CONFIG_AD5592R_BASE=m
# CONFIG_AD5592R is not set
CONFIG_AD5593R=m
CONFIG_AD5504=m
# CONFIG_AD5624R_SPI is not set
CONFIG_LTC2688=m
CONFIG_AD5686=m
CONFIG_AD5686_SPI=m
CONFIG_AD5696_I2C=m
# CONFIG_AD5755 is not set
CONFIG_AD5758=m
CONFIG_AD5761=m
CONFIG_AD5764=m
CONFIG_AD5766=m
CONFIG_AD5770R=m
CONFIG_AD5791=m
# CONFIG_AD7293 is not set
CONFIG_AD7303=m
# CONFIG_AD8801 is not set
CONFIG_DPOT_DAC=m
# CONFIG_DS4424 is not set
CONFIG_LPC18XX_DAC=m
# CONFIG_LTC1660 is not set
CONFIG_LTC2632=m
CONFIG_M62332=m
# CONFIG_MAX517 is not set
# CONFIG_MAX5821 is not set
CONFIG_MCP4725=m
# CONFIG_MCP4922 is not set
CONFIG_STM32_DAC=m
CONFIG_STM32_DAC_CORE=m
CONFIG_TI_DAC082S085=m
# CONFIG_TI_DAC5571 is not set
# CONFIG_TI_DAC7311 is not set
# CONFIG_TI_DAC7612 is not set
CONFIG_VF610_DAC=m
# end of Digital to analog converters

#
# IIO dummy driver
#
# end of IIO dummy driver

#
# Filters
#
# end of Filters

#
# Frequency Synthesizers DDS/PLL
#

#
# Clock Generator/Distribution
#
# CONFIG_AD9523 is not set
# end of Clock Generator/Distribution

#
# Phase-Locked Loop (PLL) frequency synthesizers
#
# CONFIG_ADF4350 is not set
# CONFIG_ADF4371 is not set
CONFIG_ADMV1013=m
# CONFIG_ADMV4420 is not set
CONFIG_ADRF6780=m
# end of Phase-Locked Loop (PLL) frequency synthesizers
# end of Frequency Synthesizers DDS/PLL

#
# Digital gyroscope sensors
#
CONFIG_ADIS16080=m
CONFIG_ADIS16130=m
CONFIG_ADIS16136=m
# CONFIG_ADIS16260 is not set
CONFIG_ADXRS290=m
# CONFIG_ADXRS450 is not set
CONFIG_BMG160=m
CONFIG_BMG160_I2C=m
CONFIG_BMG160_SPI=m
CONFIG_FXAS21002C=m
CONFIG_FXAS21002C_I2C=m
CONFIG_FXAS21002C_SPI=m
CONFIG_MPU3050=m
CONFIG_MPU3050_I2C=m
# CONFIG_IIO_ST_GYRO_3AXIS is not set
# CONFIG_ITG3200 is not set
# end of Digital gyroscope sensors

#
# Health Sensors
#

#
# Heart Rate Monitors
#
CONFIG_AFE4403=m
CONFIG_AFE4404=m
CONFIG_MAX30100=m
# CONFIG_MAX30102 is not set
# end of Heart Rate Monitors
# end of Health Sensors

#
# Humidity sensors
#
CONFIG_AM2315=m
CONFIG_DHT11=m
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
# CONFIG_HTS221 is not set
# CONFIG_HTU21 is not set
CONFIG_SI7005=m
# CONFIG_SI7020 is not set
# end of Humidity sensors

#
# Inertial measurement units
#
CONFIG_ADIS16400=m
CONFIG_ADIS16460=m
CONFIG_ADIS16475=m
# CONFIG_ADIS16480 is not set
CONFIG_BMI160=m
CONFIG_BMI160_I2C=m
# CONFIG_BMI160_SPI is not set
CONFIG_BOSCH_BNO055=m
# CONFIG_BOSCH_BNO055_SERIAL is not set
CONFIG_BOSCH_BNO055_I2C=m
CONFIG_FXOS8700=m
# CONFIG_FXOS8700_I2C is not set
CONFIG_FXOS8700_SPI=m
CONFIG_KMX61=m
CONFIG_INV_ICM42600=m
CONFIG_INV_ICM42600_I2C=m
CONFIG_INV_ICM42600_SPI=m
CONFIG_INV_MPU6050_IIO=m
CONFIG_INV_MPU6050_I2C=m
CONFIG_INV_MPU6050_SPI=m
CONFIG_IIO_ST_LSM6DSX=m
CONFIG_IIO_ST_LSM6DSX_I2C=m
CONFIG_IIO_ST_LSM6DSX_SPI=m
# end of Inertial measurement units

CONFIG_IIO_ADIS_LIB=m
CONFIG_IIO_ADIS_LIB_BUFFER=y

#
# Light sensors
#
# CONFIG_ADJD_S311 is not set
# CONFIG_ADUX1020 is not set
CONFIG_AL3010=m
CONFIG_AL3320A=m
CONFIG_APDS9300=m
CONFIG_APDS9960=m
# CONFIG_AS73211 is not set
CONFIG_BH1750=m
# CONFIG_BH1780 is not set
CONFIG_CM32181=m
CONFIG_CM3232=m
CONFIG_CM3323=m
# CONFIG_CM3605 is not set
CONFIG_CM36651=m
# CONFIG_GP2AP002 is not set
CONFIG_GP2AP020A00F=m
CONFIG_IQS621_ALS=m
# CONFIG_SENSORS_ISL29018 is not set
CONFIG_SENSORS_ISL29028=m
CONFIG_ISL29125=m
CONFIG_JSA1212=m
# CONFIG_RPR0521 is not set
# CONFIG_SENSORS_LM3533 is not set
CONFIG_LTR501=m
CONFIG_LTRF216A=m
CONFIG_LV0104CS=m
CONFIG_MAX44000=m
CONFIG_MAX44009=m
CONFIG_NOA1305=m
CONFIG_OPT3001=m
CONFIG_PA12203001=m
CONFIG_SI1133=m
CONFIG_SI1145=m
# CONFIG_STK3310 is not set
# CONFIG_ST_UVIS25 is not set
CONFIG_TCS3414=m
# CONFIG_TCS3472 is not set
CONFIG_SENSORS_TSL2563=m
CONFIG_TSL2583=m
CONFIG_TSL2591=m
CONFIG_TSL2772=m
CONFIG_TSL4531=m
CONFIG_US5182D=m
CONFIG_VCNL4000=m
CONFIG_VCNL4035=m
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
CONFIG_VL6180=m
CONFIG_ZOPT2201=m
# end of Light sensors

#
# Magnetometer sensors
#
CONFIG_AK8974=m
CONFIG_AK8975=m
CONFIG_AK09911=m
# CONFIG_BMC150_MAGN_I2C is not set
# CONFIG_BMC150_MAGN_SPI is not set
CONFIG_MAG3110=m
# CONFIG_MMC35240 is not set
CONFIG_IIO_ST_MAGN_3AXIS=m
# CONFIG_IIO_ST_MAGN_I2C_3AXIS is not set
CONFIG_IIO_ST_MAGN_SPI_3AXIS=m
CONFIG_SENSORS_HMC5843=m
# CONFIG_SENSORS_HMC5843_I2C is not set
CONFIG_SENSORS_HMC5843_SPI=m
CONFIG_SENSORS_RM3100=m
CONFIG_SENSORS_RM3100_I2C=m
CONFIG_SENSORS_RM3100_SPI=m
CONFIG_YAMAHA_YAS530=m
# end of Magnetometer sensors

#
# Multiplexers
#
# CONFIG_IIO_MUX is not set
# end of Multiplexers

#
# Inclinometer sensors
#
# end of Inclinometer sensors

#
# Triggers - standalone
#
# CONFIG_IIO_INTERRUPT_TRIGGER is not set
CONFIG_IIO_STM32_LPTIMER_TRIGGER=m
CONFIG_IIO_STM32_TIMER_TRIGGER=m
CONFIG_IIO_SYSFS_TRIGGER=m
# end of Triggers - standalone

#
# Linear and angular position sensors
#
CONFIG_IQS624_POS=m
# end of Linear and angular position sensors

#
# Digital potentiometers
#
CONFIG_AD5110=m
CONFIG_AD5272=m
# CONFIG_DS1803 is not set
CONFIG_MAX5432=m
CONFIG_MAX5481=m
CONFIG_MAX5487=m
CONFIG_MCP4018=m
CONFIG_MCP4131=m
CONFIG_MCP4531=m
CONFIG_MCP41010=m
CONFIG_TPL0102=m
# end of Digital potentiometers

#
# Digital potentiostats
#
# CONFIG_LMP91000 is not set
# end of Digital potentiostats

#
# Pressure sensors
#
CONFIG_ABP060MG=m
# CONFIG_BMP280 is not set
# CONFIG_DLHL60D is not set
CONFIG_DPS310=m
CONFIG_HP03=m
CONFIG_ICP10100=m
CONFIG_MPL115=m
CONFIG_MPL115_I2C=m
# CONFIG_MPL115_SPI is not set
# CONFIG_MPL3115 is not set
CONFIG_MS5611=m
# CONFIG_MS5611_I2C is not set
CONFIG_MS5611_SPI=m
# CONFIG_MS5637 is not set
# CONFIG_IIO_ST_PRESS is not set
CONFIG_T5403=m
# CONFIG_HP206C is not set
CONFIG_ZPA2326=m
CONFIG_ZPA2326_I2C=m
CONFIG_ZPA2326_SPI=m
# end of Pressure sensors

#
# Lightning sensors
#
CONFIG_AS3935=m
# end of Lightning sensors

#
# Proximity and distance sensors
#
CONFIG_ISL29501=m
CONFIG_LIDAR_LITE_V2=m
CONFIG_MB1232=m
CONFIG_PING=m
CONFIG_RFD77402=m
CONFIG_SRF04=m
CONFIG_SX_COMMON=m
# CONFIG_SX9310 is not set
# CONFIG_SX9324 is not set
CONFIG_SX9360=m
CONFIG_SX9500=m
# CONFIG_SRF08 is not set
# CONFIG_VCNL3020 is not set
CONFIG_VL53L0X_I2C=m
# end of Proximity and distance sensors

#
# Resolver to digital converters
#
CONFIG_AD2S90=m
# CONFIG_AD2S1200 is not set
# end of Resolver to digital converters

#
# Temperature sensors
#
CONFIG_IQS620AT_TEMP=m
CONFIG_LTC2983=m
CONFIG_MAXIM_THERMOCOUPLE=m
CONFIG_MLX90614=m
CONFIG_MLX90632=m
# CONFIG_TMP006 is not set
CONFIG_TMP007=m
# CONFIG_TMP117 is not set
# CONFIG_TSYS01 is not set
# CONFIG_TSYS02D is not set
CONFIG_MAX31856=m
CONFIG_MAX31865=m
# end of Temperature sensors

CONFIG_PWM=y
CONFIG_PWM_SYSFS=y
CONFIG_PWM_DEBUG=y
CONFIG_PWM_ATMEL=y
CONFIG_PWM_ATMEL_HLCDC_PWM=m
CONFIG_PWM_ATMEL_TCB=m
CONFIG_PWM_BCM_IPROC=y
CONFIG_PWM_BCM_KONA=y
CONFIG_PWM_BCM2835=y
# CONFIG_PWM_BERLIN is not set
# CONFIG_PWM_BRCMSTB is not set
CONFIG_PWM_CLK=m
CONFIG_PWM_CLPS711X=y
CONFIG_PWM_EP93XX=m
CONFIG_PWM_FSL_FTM=y
CONFIG_PWM_HIBVT=m
# CONFIG_PWM_IMG is not set
CONFIG_PWM_IMX1=y
# CONFIG_PWM_IMX27 is not set
CONFIG_PWM_IMX_TPM=m
CONFIG_PWM_INTEL_LGM=y
CONFIG_PWM_IQS620A=y
# CONFIG_PWM_JZ4740 is not set
CONFIG_PWM_KEEMBAY=m
# CONFIG_PWM_LP3943 is not set
# CONFIG_PWM_LPC18XX_SCT is not set
CONFIG_PWM_LPC32XX=y
CONFIG_PWM_LPSS=m
CONFIG_PWM_LPSS_PLATFORM=m
# CONFIG_PWM_MESON is not set
# CONFIG_PWM_MTK_DISP is not set
CONFIG_PWM_MEDIATEK=y
CONFIG_PWM_MXS=y
# CONFIG_PWM_NTXEC is not set
# CONFIG_PWM_OMAP_DMTIMER is not set
CONFIG_PWM_PCA9685=m
# CONFIG_PWM_PXA is not set
# CONFIG_PWM_RASPBERRYPI_POE is not set
CONFIG_PWM_RCAR=m
# CONFIG_PWM_RENESAS_TPU is not set
CONFIG_PWM_ROCKCHIP=m
# CONFIG_PWM_SAMSUNG is not set
# CONFIG_PWM_SIFIVE is not set
# CONFIG_PWM_SL28CPLD is not set
# CONFIG_PWM_SPEAR is not set
CONFIG_PWM_SPRD=y
# CONFIG_PWM_STI is not set
CONFIG_PWM_STM32=y
CONFIG_PWM_STM32_LP=y
CONFIG_PWM_SUN4I=m
# CONFIG_PWM_SUNPLUS is not set
# CONFIG_PWM_TEGRA is not set
CONFIG_PWM_TIECAP=y
# CONFIG_PWM_TIEHRPWM is not set
# CONFIG_PWM_TWL is not set
# CONFIG_PWM_TWL_LED is not set
CONFIG_PWM_VISCONTI=m
# CONFIG_PWM_VT8500 is not set
# CONFIG_PWM_XILINX is not set

#
# IRQ chip support
#
CONFIG_IRQCHIP=y
CONFIG_AL_FIC=y
CONFIG_JCORE_AIC=y
# CONFIG_RENESAS_INTC_IRQPIN is not set
CONFIG_RENESAS_IRQC=y
# CONFIG_RENESAS_RZA1_IRQC is not set
# CONFIG_RENESAS_RZG2L_IRQC is not set
CONFIG_SL28CPLD_INTC=y
# CONFIG_TS4800_IRQ is not set
CONFIG_XILINX_INTC=y
CONFIG_INGENIC_TCU_IRQ=y
CONFIG_IRQ_UNIPHIER_AIDET=y
CONFIG_MESON_IRQ_GPIO=m
# CONFIG_IMX_IRQSTEER is not set
# CONFIG_IMX_INTMUX is not set
CONFIG_IMX_MU_MSI=y
# CONFIG_EXYNOS_IRQ_COMBINER is not set
# CONFIG_MST_IRQ is not set
# CONFIG_MCHP_EIC is not set
CONFIG_SUNPLUS_SP7021_INTC=y
# end of IRQ chip support

# CONFIG_IPACK_BUS is not set
CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_A10SR=m
# CONFIG_RESET_ATH79 is not set
# CONFIG_RESET_AXS10X is not set
# CONFIG_RESET_BCM6345 is not set
CONFIG_RESET_BERLIN=y
CONFIG_RESET_BRCMSTB=m
CONFIG_RESET_BRCMSTB_RESCAL=y
# CONFIG_RESET_HSDK is not set
# CONFIG_RESET_IMX7 is not set
# CONFIG_RESET_INTEL_GW is not set
# CONFIG_RESET_K210 is not set
# CONFIG_RESET_LANTIQ is not set
CONFIG_RESET_LPC18XX=y
# CONFIG_RESET_MCHP_SPARX5 is not set
CONFIG_RESET_MESON=m
CONFIG_RESET_MESON_AUDIO_ARB=y
CONFIG_RESET_NPCM=y
CONFIG_RESET_PISTACHIO=y
CONFIG_RESET_QCOM_AOSS=y
# CONFIG_RESET_QCOM_PDC is not set
CONFIG_RESET_RASPBERRYPI=m
# CONFIG_RESET_RZG2L_USBPHY_CTRL is not set
# CONFIG_RESET_SCMI is not set
CONFIG_RESET_SIMPLE=y
CONFIG_RESET_SOCFPGA=y
# CONFIG_RESET_STARFIVE_JH7100 is not set
CONFIG_RESET_SUNPLUS=y
# CONFIG_RESET_SUNXI is not set
CONFIG_RESET_TI_SCI=m
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESET_TN48M_CPLD=m
# CONFIG_RESET_UNIPHIER is not set
CONFIG_RESET_UNIPHIER_GLUE=y
CONFIG_RESET_ZYNQ=y
CONFIG_COMMON_RESET_HI3660=y
CONFIG_COMMON_RESET_HI6220=y

#
# PHY Subsystem
#
CONFIG_GENERIC_PHY=y
CONFIG_GENERIC_PHY_MIPI_DPHY=y
CONFIG_PHY_LPC18XX_USB_OTG=y
CONFIG_PHY_PISTACHIO_USB=m
CONFIG_PHY_XGENE=m
CONFIG_USB_LGM_PHY=m
# CONFIG_PHY_CAN_TRANSCEIVER is not set
# CONFIG_PHY_SUN4I_USB is not set
CONFIG_PHY_SUN6I_MIPI_DPHY=y
CONFIG_PHY_SUN9I_USB=y
# CONFIG_PHY_SUN50I_USB3 is not set
CONFIG_PHY_MESON8_HDMI_TX=y
# CONFIG_PHY_MESON8B_USB2 is not set
# CONFIG_PHY_MESON_GXL_USB2 is not set
# CONFIG_PHY_MESON_G12A_MIPI_DPHY_ANALOG is not set
CONFIG_PHY_MESON_G12A_USB2=y
CONFIG_PHY_MESON_G12A_USB3_PCIE=m
CONFIG_PHY_MESON_AXG_PCIE=y
# CONFIG_PHY_MESON_AXG_MIPI_PCIE_ANALOG is not set
CONFIG_PHY_MESON_AXG_MIPI_DPHY=m

#
# PHY drivers for Broadcom platforms
#
CONFIG_PHY_BCM63XX_USBH=y
CONFIG_PHY_CYGNUS_PCIE=m
# CONFIG_PHY_BCM_SR_USB is not set
CONFIG_BCM_KONA_USB2_PHY=y
# CONFIG_PHY_BCM_NS_USB2 is not set
CONFIG_PHY_NS2_USB_DRD=m
CONFIG_PHY_BRCM_SATA=m
CONFIG_PHY_BRCM_USB=y
# CONFIG_PHY_BCM_SR_PCIE is not set
# end of PHY drivers for Broadcom platforms

# CONFIG_PHY_CADENCE_TORRENT is not set
# CONFIG_PHY_CADENCE_DPHY is not set
# CONFIG_PHY_CADENCE_DPHY_RX is not set
# CONFIG_PHY_CADENCE_SIERRA is not set
CONFIG_PHY_CADENCE_SALVO=y
CONFIG_PHY_FSL_IMX8MQ_USB=y
# CONFIG_PHY_MIXEL_LVDS_PHY is not set
CONFIG_PHY_MIXEL_MIPI_DPHY=m
# CONFIG_PHY_FSL_IMX8M_PCIE is not set
CONFIG_PHY_FSL_LYNX_28G=y
CONFIG_PHY_HI6220_USB=y
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HISTB_COMBPHY is not set
CONFIG_PHY_HISI_INNO_USB2=y
CONFIG_PHY_INGENIC_USB=y
CONFIG_PHY_LANTIQ_VRX200_PCIE=m
# CONFIG_PHY_LANTIQ_RCU_USB2 is not set
CONFIG_ARMADA375_USBCLUSTER_PHY=y
# CONFIG_PHY_BERLIN_SATA is not set
# CONFIG_PHY_BERLIN_USB is not set
CONFIG_PHY_MVEBU_A3700_UTMI=m
# CONFIG_PHY_MVEBU_A38X_COMPHY is not set
CONFIG_PHY_MVEBU_CP110_UTMI=m
CONFIG_PHY_PXA_28NM_HSIC=m
CONFIG_PHY_PXA_28NM_USB2=y
# CONFIG_PHY_PXA_USB is not set
# CONFIG_PHY_MMP3_USB is not set
CONFIG_PHY_MMP3_HSIC=m
# CONFIG_PHY_MTK_PCIE is not set
# CONFIG_PHY_MTK_TPHY is not set
CONFIG_PHY_MTK_UFS=y
# CONFIG_PHY_MTK_XSPHY is not set
CONFIG_PHY_MTK_HDMI=m
# CONFIG_PHY_MTK_MIPI_DSI is not set
# CONFIG_PHY_MTK_DP is not set
# CONFIG_PHY_SPARX5_SERDES is not set
# CONFIG_PHY_LAN966X_SERDES is not set
# CONFIG_PHY_CPCAP_USB is not set
# CONFIG_PHY_MAPPHONE_MDM6600 is not set
CONFIG_PHY_OCELOT_SERDES=m
CONFIG_PHY_ATH79_USB=y
CONFIG_PHY_QCOM_EDP=m
CONFIG_PHY_QCOM_IPQ4019_USB=y
CONFIG_PHY_QCOM_PCIE2=m
CONFIG_PHY_QCOM_QMP=m
# CONFIG_PHY_QCOM_QUSB2 is not set
# CONFIG_PHY_QCOM_USB_HS is not set
CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2=m
CONFIG_PHY_QCOM_USB_HSIC=m
# CONFIG_PHY_QCOM_USB_HS_28NM is not set
CONFIG_PHY_QCOM_USB_SS=y
CONFIG_PHY_QCOM_IPQ806X_USB=y
# CONFIG_PHY_MT7621_PCI is not set
CONFIG_PHY_RALINK_USB=m
CONFIG_PHY_RCAR_GEN3_USB3=m
CONFIG_PHY_ROCKCHIP_DPHY_RX0=m
# CONFIG_PHY_ROCKCHIP_INNO_HDMI is not set
CONFIG_PHY_ROCKCHIP_INNO_USB2=y
CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY=y
CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=m
CONFIG_PHY_ROCKCHIP_PCIE=m
CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=m
CONFIG_PHY_ROCKCHIP_TYPEC=m
CONFIG_PHY_EXYNOS_DP_VIDEO=y
CONFIG_PHY_EXYNOS_MIPI_VIDEO=m
CONFIG_PHY_EXYNOS_PCIE=y
CONFIG_PHY_SAMSUNG_UFS=m
CONFIG_PHY_SAMSUNG_USB2=m
CONFIG_PHY_S5PV210_USB2=y
CONFIG_PHY_UNIPHIER_USB2=y
CONFIG_PHY_UNIPHIER_USB3=y
# CONFIG_PHY_UNIPHIER_PCIE is not set
CONFIG_PHY_UNIPHIER_AHCI=m
CONFIG_PHY_ST_SPEAR1310_MIPHY=y
CONFIG_PHY_ST_SPEAR1340_MIPHY=m
CONFIG_PHY_STIH407_USB=y
CONFIG_PHY_STM32_USBPHYC=y
# CONFIG_PHY_SUNPLUS_USB is not set
# CONFIG_PHY_TEGRA194_P2U is not set
# CONFIG_PHY_DA8XX_USB is not set
# CONFIG_PHY_DM816X_USB is not set
# CONFIG_PHY_AM654_SERDES is not set
# CONFIG_PHY_J721E_WIZ is not set
CONFIG_OMAP_CONTROL_PHY=y
CONFIG_TI_PIPE3=m
CONFIG_PHY_TUSB1210=m
CONFIG_PHY_INTEL_KEEMBAY_EMMC=y
CONFIG_PHY_INTEL_KEEMBAY_USB=y
CONFIG_PHY_INTEL_LGM_COMBO=y
CONFIG_PHY_INTEL_LGM_EMMC=y
CONFIG_PHY_INTEL_THUNDERBAY_EMMC=m
CONFIG_PHY_XILINX_ZYNQMP=y
# end of PHY Subsystem

CONFIG_POWERCAP=y
# CONFIG_DTPM is not set
# CONFIG_MCB is not set
# CONFIG_RAS is not set

#
# Android
#
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
# end of Android

CONFIG_DAX=m
CONFIG_NVMEM=y
CONFIG_NVMEM_SYSFS=y
CONFIG_NVMEM_APPLE_EFUSES=m
CONFIG_NVMEM_BCM_OCOTP=m
CONFIG_NVMEM_BRCM_NVRAM=m
CONFIG_NVMEM_IMX_IIM=m
CONFIG_NVMEM_IMX_OCOTP=m
CONFIG_NVMEM_JZ4780_EFUSE=m
CONFIG_NVMEM_LAN9662_OTPC=y
# CONFIG_NVMEM_LAYERSCAPE_SFP is not set
CONFIG_NVMEM_LPC18XX_EEPROM=m
# CONFIG_NVMEM_LPC18XX_OTP is not set
CONFIG_NVMEM_MESON_MX_EFUSE=m
# CONFIG_NVMEM_MICROCHIP_OTPC is not set
CONFIG_NVMEM_MTK_EFUSE=y
CONFIG_NVMEM_MXS_OCOTP=y
# CONFIG_NVMEM_NINTENDO_OTP is not set
CONFIG_NVMEM_QCOM_QFPROM=y
CONFIG_NVMEM_RAVE_SP_EEPROM=m
# CONFIG_NVMEM_RMEM is not set
CONFIG_NVMEM_ROCKCHIP_EFUSE=m
# CONFIG_NVMEM_ROCKCHIP_OTP is not set
CONFIG_NVMEM_SC27XX_EFUSE=y
# CONFIG_NVMEM_SNVS_LPGPR is not set
CONFIG_NVMEM_SPMI_SDAM=y
CONFIG_NVMEM_SPRD_EFUSE=m
CONFIG_NVMEM_STM32_ROMEM=y
CONFIG_NVMEM_SUNPLUS_OCOTP=m
CONFIG_NVMEM_UNIPHIER_EFUSE=y
CONFIG_NVMEM_VF610_OCOTP=m

#
# HW tracing support
#
# CONFIG_STM is not set
CONFIG_INTEL_TH=m
# CONFIG_INTEL_TH_GTH is not set
# CONFIG_INTEL_TH_MSU is not set
# CONFIG_INTEL_TH_PTI is not set
CONFIG_INTEL_TH_DEBUG=y
# end of HW tracing support

CONFIG_FPGA=m
CONFIG_FPGA_MGR_SOCFPGA=m
CONFIG_FPGA_MGR_SOCFPGA_A10=m
# CONFIG_ALTERA_PR_IP_CORE is not set
CONFIG_FPGA_MGR_ALTERA_PS_SPI=m
CONFIG_FPGA_MGR_ZYNQ_FPGA=m
# CONFIG_FPGA_MGR_XILINX_SPI is not set
CONFIG_FPGA_MGR_ICE40_SPI=m
CONFIG_FPGA_MGR_MACHXO2_SPI=m
CONFIG_FPGA_BRIDGE=m
CONFIG_ALTERA_FREEZE_BRIDGE=m
CONFIG_XILINX_PR_DECOUPLER=m
CONFIG_FPGA_REGION=m
CONFIG_OF_FPGA_REGION=m
# CONFIG_FPGA_DFL is not set
# CONFIG_FPGA_MGR_ZYNQMP_FPGA is not set
CONFIG_FPGA_MGR_VERSAL_FPGA=m
CONFIG_FPGA_MGR_MICROCHIP_SPI=m
CONFIG_FSI=m
# CONFIG_FSI_NEW_DEV_NODE is not set
CONFIG_FSI_MASTER_GPIO=m
CONFIG_FSI_MASTER_HUB=m
# CONFIG_FSI_MASTER_AST_CF is not set
CONFIG_FSI_MASTER_ASPEED=m
CONFIG_FSI_SCOM=m
CONFIG_FSI_SBEFIFO=m
CONFIG_FSI_OCC=m
CONFIG_TEE=m
CONFIG_MULTIPLEXER=m

#
# Multiplexer drivers
#
CONFIG_MUX_ADG792A=m
CONFIG_MUX_ADGS1408=m
CONFIG_MUX_GPIO=m
CONFIG_MUX_MMIO=m
# end of Multiplexer drivers

CONFIG_PM_OPP=y
CONFIG_SIOX=y
# CONFIG_SIOX_BUS_GPIO is not set
# CONFIG_SLIMBUS is not set
CONFIG_INTERCONNECT=y
CONFIG_INTERCONNECT_IMX=y
# CONFIG_INTERCONNECT_IMX8MM is not set
CONFIG_INTERCONNECT_IMX8MN=y
CONFIG_INTERCONNECT_IMX8MQ=y
# CONFIG_INTERCONNECT_IMX8MP is not set
# CONFIG_INTERCONNECT_QCOM_OSM_L3 is not set
CONFIG_INTERCONNECT_SAMSUNG=y
CONFIG_INTERCONNECT_EXYNOS=y
# CONFIG_COUNTER is not set
CONFIG_MOST=y
CONFIG_MOST_USB_HDM=y
CONFIG_MOST_CDEV=m
# CONFIG_MOST_SND is not set
CONFIG_PECI=m
# CONFIG_PECI_CPU is not set
# CONFIG_PECI_ASPEED is not set
# CONFIG_HTE is not set
# end of Device Drivers

#
# File systems
#
CONFIG_VALIDATE_FS_PARSER=y
CONFIG_FS_IOMAP=y
# CONFIG_EXT2_FS is not set
# CONFIG_EXT3_FS is not set
# CONFIG_EXT4_FS is not set
# CONFIG_REISERFS_FS is not set
CONFIG_JFS_FS=m
# CONFIG_JFS_POSIX_ACL is not set
# CONFIG_JFS_SECURITY is not set
CONFIG_JFS_DEBUG=y
# CONFIG_JFS_STATISTICS is not set
CONFIG_XFS_FS=m
# CONFIG_XFS_SUPPORT_V4 is not set
# CONFIG_XFS_QUOTA is not set
# CONFIG_XFS_POSIX_ACL is not set
# CONFIG_XFS_RT is not set
# CONFIG_XFS_ONLINE_SCRUB is not set
# CONFIG_XFS_WARN is not set
# CONFIG_XFS_DEBUG is not set
# CONFIG_GFS2_FS is not set
CONFIG_BTRFS_FS=m
# CONFIG_BTRFS_FS_POSIX_ACL is not set
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
CONFIG_BTRFS_DEBUG=y
CONFIG_BTRFS_ASSERT=y
CONFIG_BTRFS_FS_REF_VERIFY=y
CONFIG_NILFS2_FS=y
# CONFIG_F2FS_FS is not set
CONFIG_FS_POSIX_ACL=y
CONFIG_EXPORTFS=y
# CONFIG_EXPORTFS_BLOCK_OPS is not set
# CONFIG_FILE_LOCKING is not set
CONFIG_FS_ENCRYPTION=y
# CONFIG_FS_ENCRYPTION_INLINE_CRYPT is not set
# CONFIG_FS_VERITY is not set
CONFIG_FSNOTIFY=y
# CONFIG_DNOTIFY is not set
# CONFIG_INOTIFY_USER is not set
CONFIG_FANOTIFY=y
CONFIG_QUOTA=y
CONFIG_PRINT_QUOTA_WARNING=y
CONFIG_QUOTA_DEBUG=y
CONFIG_QUOTA_TREE=m
CONFIG_QFMT_V1=y
CONFIG_QFMT_V2=m
CONFIG_QUOTACTL=y
# CONFIG_AUTOFS4_FS is not set
CONFIG_AUTOFS_FS=m
CONFIG_FUSE_FS=y
CONFIG_CUSE=m
CONFIG_VIRTIO_FS=y
# CONFIG_OVERLAY_FS is not set

#
# Caches
#
# CONFIG_FSCACHE is not set
# end of Caches

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=m
# CONFIG_JOLIET is not set
# CONFIG_ZISOFS is not set
# CONFIG_UDF_FS is not set
# end of CD-ROM/DVD Filesystems

#
# DOS/FAT/EXFAT/NT Filesystems
#
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
# CONFIG_VFAT_FS is not set
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_EXFAT_FS=y
CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
CONFIG_NTFS_FS=m
CONFIG_NTFS_DEBUG=y
# CONFIG_NTFS_RW is not set
CONFIG_NTFS3_FS=y
CONFIG_NTFS3_LZX_XPRESS=y
CONFIG_NTFS3_FS_POSIX_ACL=y
# end of DOS/FAT/EXFAT/NT Filesystems

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
# CONFIG_PROC_KCORE is not set
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_PROC_CHILDREN=y
CONFIG_KERNFS=y
CONFIG_SYSFS=y
CONFIG_CONFIGFS_FS=y
# end of Pseudo filesystems

CONFIG_MISC_FILESYSTEMS=y
CONFIG_ORANGEFS_FS=y
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_HFS_FS=y
CONFIG_HFSPLUS_FS=m
# CONFIG_BEFS_FS is not set
CONFIG_BFS_FS=m
CONFIG_EFS_FS=m
# CONFIG_CRAMFS is not set
# CONFIG_SQUASHFS is not set
# CONFIG_VXFS_FS is not set
CONFIG_MINIX_FS=y
CONFIG_MINIX_FS_NATIVE_ENDIAN=y
CONFIG_OMFS_FS=m
# CONFIG_HPFS_FS is not set
CONFIG_QNX4FS_FS=y
# CONFIG_QNX6FS_FS is not set
CONFIG_ROMFS_FS=y
CONFIG_ROMFS_BACKED_BY_BLOCK=y
CONFIG_ROMFS_ON_BLOCK=y
CONFIG_PSTORE=y
CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240
# CONFIG_PSTORE_DEFLATE_COMPRESS is not set
# CONFIG_PSTORE_LZO_COMPRESS is not set
# CONFIG_PSTORE_LZ4_COMPRESS is not set
# CONFIG_PSTORE_LZ4HC_COMPRESS is not set
CONFIG_PSTORE_842_COMPRESS=y
# CONFIG_PSTORE_ZSTD_COMPRESS is not set
CONFIG_PSTORE_COMPRESS=y
CONFIG_PSTORE_842_COMPRESS_DEFAULT=y
CONFIG_PSTORE_COMPRESS_DEFAULT="842"
CONFIG_PSTORE_CONSOLE=y
# CONFIG_PSTORE_PMSG is not set
CONFIG_PSTORE_RAM=y
CONFIG_PSTORE_ZONE=m
CONFIG_PSTORE_BLK=m
CONFIG_PSTORE_BLK_BLKDEV=""
CONFIG_PSTORE_BLK_KMSG_SIZE=64
CONFIG_PSTORE_BLK_MAX_REASON=2
CONFIG_PSTORE_BLK_CONSOLE_SIZE=64
CONFIG_SYSV_FS=y
CONFIG_UFS_FS=m
# CONFIG_UFS_FS_WRITE is not set
CONFIG_UFS_DEBUG=y
CONFIG_EROFS_FS=m
CONFIG_EROFS_FS_DEBUG=y
# CONFIG_EROFS_FS_XATTR is not set
CONFIG_EROFS_FS_ZIP=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_CODEPAGE_437 is not set
CONFIG_NLS_CODEPAGE_737=y
CONFIG_NLS_CODEPAGE_775=y
# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
CONFIG_NLS_CODEPAGE_857=m
CONFIG_NLS_CODEPAGE_860=m
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
CONFIG_NLS_CODEPAGE_863=y
CONFIG_NLS_CODEPAGE_864=m
CONFIG_NLS_CODEPAGE_865=m
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
CONFIG_NLS_CODEPAGE_936=y
CONFIG_NLS_CODEPAGE_950=y
CONFIG_NLS_CODEPAGE_932=m
# CONFIG_NLS_CODEPAGE_949 is not set
CONFIG_NLS_CODEPAGE_874=m
CONFIG_NLS_ISO8859_8=m
CONFIG_NLS_CODEPAGE_1250=m
# CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ASCII is not set
# CONFIG_NLS_ISO8859_1 is not set
CONFIG_NLS_ISO8859_2=m
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
CONFIG_NLS_ISO8859_6=m
CONFIG_NLS_ISO8859_7=m
# CONFIG_NLS_ISO8859_9 is not set
CONFIG_NLS_ISO8859_13=m
# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
# CONFIG_NLS_MAC_ROMAN is not set
# CONFIG_NLS_MAC_CELTIC is not set
# CONFIG_NLS_MAC_CENTEURO is not set
CONFIG_NLS_MAC_CROATIAN=m
# CONFIG_NLS_MAC_CYRILLIC is not set
# CONFIG_NLS_MAC_GAELIC is not set
# CONFIG_NLS_MAC_GREEK is not set
CONFIG_NLS_MAC_ICELAND=m
CONFIG_NLS_MAC_INUIT=y
# CONFIG_NLS_MAC_ROMANIAN is not set
CONFIG_NLS_MAC_TURKISH=m
CONFIG_NLS_UTF8=m
CONFIG_UNICODE=y
CONFIG_UNICODE_NORMALIZATION_SELFTEST=m
CONFIG_IO_WQ=y
# end of File systems

#
# Security options
#
CONFIG_KEYS=y
# CONFIG_KEYS_REQUEST_CACHE is not set
# CONFIG_PERSISTENT_KEYRINGS is not set
CONFIG_TRUSTED_KEYS=m
CONFIG_TRUSTED_KEYS_TPM=y
# CONFIG_TRUSTED_KEYS_TEE is not set
# CONFIG_ENCRYPTED_KEYS is not set
CONFIG_KEY_DH_OPERATIONS=y
CONFIG_SECURITY_DMESG_RESTRICT=y
# CONFIG_SECURITYFS is not set
CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
CONFIG_HARDENED_USERCOPY=y
# CONFIG_STATIC_USERMODEHELPER is not set
CONFIG_DEFAULT_SECURITY_DAC=y
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,bpf"

#
# Kernel hardening options
#

#
# Memory initialization
#
CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y
# CONFIG_INIT_STACK_NONE is not set
CONFIG_INIT_STACK_ALL_PATTERN=y
# CONFIG_INIT_STACK_ALL_ZERO is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
CONFIG_INIT_ON_FREE_DEFAULT_ON=y
CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
# CONFIG_ZERO_CALL_USED_REGS is not set
# end of Memory initialization

CONFIG_RANDSTRUCT_NONE=y
# end of Kernel hardening options
# end of Security options

CONFIG_XOR_BLOCKS=m
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
CONFIG_CRYPTO_FIPS=y
CONFIG_CRYPTO_FIPS_NAME="Linux Kernel Cryptographic API"
# CONFIG_CRYPTO_FIPS_CUSTOM_VERSION is not set
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=y
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_SKCIPHER=y
CONFIG_CRYPTO_SKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_RNG_DEFAULT=y
CONFIG_CRYPTO_AKCIPHER2=y
CONFIG_CRYPTO_AKCIPHER=y
CONFIG_CRYPTO_KPP2=y
CONFIG_CRYPTO_KPP=y
CONFIG_CRYPTO_ACOMP2=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
CONFIG_CRYPTO_MANAGER_EXTRA_TESTS=y
CONFIG_CRYPTO_GF128MUL=y
CONFIG_CRYPTO_NULL=y
CONFIG_CRYPTO_NULL2=y
CONFIG_CRYPTO_CRYPTD=m
CONFIG_CRYPTO_AUTHENC=m
# CONFIG_CRYPTO_TEST is not set
# end of Crypto core or helper

#
# Public-key cryptography
#
CONFIG_CRYPTO_RSA=y
CONFIG_CRYPTO_DH=y
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_ECC=m
CONFIG_CRYPTO_ECDH=m
CONFIG_CRYPTO_ECDSA=m
# CONFIG_CRYPTO_ECRDSA is not set
# CONFIG_CRYPTO_SM2 is not set
CONFIG_CRYPTO_CURVE25519=m
# end of Public-key cryptography

#
# Block ciphers
#
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_AES_TI=y
# CONFIG_CRYPTO_ARIA is not set
CONFIG_CRYPTO_BLOWFISH=y
CONFIG_CRYPTO_BLOWFISH_COMMON=y
CONFIG_CRYPTO_CAMELLIA=m
CONFIG_CRYPTO_CAST_COMMON=m
CONFIG_CRYPTO_CAST5=m
# CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_DES is not set
CONFIG_CRYPTO_FCRYPT=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_SM4=m
CONFIG_CRYPTO_SM4_GENERIC=m
# CONFIG_CRYPTO_TWOFISH is not set
# end of Block ciphers

#
# Length-preserving ciphers and modes
#
CONFIG_CRYPTO_ADIANTUM=m
CONFIG_CRYPTO_CHACHA20=m
# CONFIG_CRYPTO_CBC is not set
CONFIG_CRYPTO_CFB=m
CONFIG_CRYPTO_CTR=y
# CONFIG_CRYPTO_CTS is not set
CONFIG_CRYPTO_ECB=y
# CONFIG_CRYPTO_HCTR2 is not set
# CONFIG_CRYPTO_KEYWRAP is not set
CONFIG_CRYPTO_LRW=y
# CONFIG_CRYPTO_OFB is not set
# CONFIG_CRYPTO_PCBC is not set
# CONFIG_CRYPTO_XTS is not set
CONFIG_CRYPTO_NHPOLY1305=m
# end of Length-preserving ciphers and modes

#
# AEAD (authenticated encryption with associated data) ciphers
#
# CONFIG_CRYPTO_AEGIS128 is not set
# CONFIG_CRYPTO_CHACHA20POLY1305 is not set
CONFIG_CRYPTO_CCM=m
CONFIG_CRYPTO_GCM=y
CONFIG_CRYPTO_SEQIV=m
CONFIG_CRYPTO_ECHAINIV=m
CONFIG_CRYPTO_ESSIV=m
# end of AEAD (authenticated encryption with associated data) ciphers

#
# Hashes, digests, and MACs
#
CONFIG_CRYPTO_BLAKE2B=y
CONFIG_CRYPTO_CMAC=m
CONFIG_CRYPTO_GHASH=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_MD4=y
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
# CONFIG_CRYPTO_POLY1305 is not set
CONFIG_CRYPTO_RMD160=m
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=y
CONFIG_CRYPTO_SHA3=y
# CONFIG_CRYPTO_SM3_GENERIC is not set
# CONFIG_CRYPTO_STREEBOG is not set
# CONFIG_CRYPTO_VMAC is not set
CONFIG_CRYPTO_WP512=m
CONFIG_CRYPTO_XCBC=y
CONFIG_CRYPTO_XXHASH=m
# end of Hashes, digests, and MACs

#
# CRCs (cyclic redundancy checks)
#
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32=y
# CONFIG_CRYPTO_CRCT10DIF is not set
CONFIG_CRYPTO_CRC64_ROCKSOFT=m
# end of CRCs (cyclic redundancy checks)

#
# Compression
#
# CONFIG_CRYPTO_DEFLATE is not set
CONFIG_CRYPTO_LZO=m
CONFIG_CRYPTO_842=y
# CONFIG_CRYPTO_LZ4 is not set
CONFIG_CRYPTO_LZ4HC=m
# CONFIG_CRYPTO_ZSTD is not set
# end of Compression

#
# Random number generation
#
# CONFIG_CRYPTO_ANSI_CPRNG is not set
CONFIG_CRYPTO_DRBG_MENU=y
CONFIG_CRYPTO_DRBG_HMAC=y
CONFIG_CRYPTO_DRBG_HASH=y
CONFIG_CRYPTO_DRBG_CTR=y
CONFIG_CRYPTO_DRBG=y
CONFIG_CRYPTO_JITTERENTROPY=y
CONFIG_CRYPTO_KDF800108_CTR=y
# end of Random number generation

#
# Userspace interface
#
# end of Userspace interface

CONFIG_CRYPTO_HASH_INFO=y
# CONFIG_CRYPTO_HW is not set
CONFIG_ASYMMETRIC_KEY_TYPE=y
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
CONFIG_X509_CERTIFICATE_PARSER=y
CONFIG_PKCS8_PRIVATE_KEY_PARSER=y
CONFIG_PKCS7_MESSAGE_PARSER=y
CONFIG_PKCS7_TEST_KEY=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_FIPS_SIGNATURE_SELFTEST=y

#
# Certificates for signature checking
#
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
# CONFIG_MODULE_SIG_KEY_TYPE_ECDSA is not set
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_SYSTEM_TRUSTED_KEYS=""
# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set
# CONFIG_SECONDARY_TRUSTED_KEYRING is not set
CONFIG_SYSTEM_BLACKLIST_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
# CONFIG_SYSTEM_REVOCATION_LIST is not set
CONFIG_SYSTEM_BLACKLIST_AUTH_UPDATE=y
# end of Certificates for signature checking

#
# Library routines
#
CONFIG_RAID6_PQ=m
CONFIG_RAID6_PQ_BENCHMARK=y
CONFIG_LINEAR_RANGES=y
# CONFIG_PACKING is not set
CONFIG_BITREVERSE=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_CORDIC=m
CONFIG_PRIME_NUMBERS=y
CONFIG_RATIONAL=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_STMP_DEVICE=y

#
# Crypto library routines
#
CONFIG_CRYPTO_LIB_UTILS=y
CONFIG_CRYPTO_LIB_AES=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=y
CONFIG_CRYPTO_LIB_CHACHA=y
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=m
# CONFIG_CRYPTO_LIB_CURVE25519 is not set
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
# CONFIG_CRYPTO_LIB_POLY1305 is not set
# CONFIG_CRYPTO_LIB_CHACHA20POLY1305 is not set
CONFIG_CRYPTO_LIB_SHA1=y
CONFIG_CRYPTO_LIB_SHA256=y
# end of Crypto library routines

CONFIG_CRC_CCITT=y
CONFIG_CRC16=m
# CONFIG_CRC_T10DIF is not set
CONFIG_CRC64_ROCKSOFT=m
CONFIG_CRC_ITU_T=y
CONFIG_CRC32=y
CONFIG_CRC32_SELFTEST=m
CONFIG_CRC32_SLICEBY8=y
# CONFIG_CRC32_SLICEBY4 is not set
# CONFIG_CRC32_SARWATE is not set
# CONFIG_CRC32_BIT is not set
CONFIG_CRC64=y
CONFIG_CRC4=m
CONFIG_CRC7=y
CONFIG_LIBCRC32C=y
CONFIG_CRC8=y
CONFIG_XXHASH=y
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_842_COMPRESS=y
CONFIG_842_DECOMPRESS=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=m
CONFIG_LZO_COMPRESS=m
CONFIG_LZO_DECOMPRESS=y
CONFIG_LZ4HC_COMPRESS=m
CONFIG_LZ4_DECOMPRESS=m
CONFIG_ZSTD_COMMON=y
CONFIG_ZSTD_COMPRESS=m
CONFIG_ZSTD_DECOMPRESS=y
CONFIG_XZ_DEC=y
# CONFIG_XZ_DEC_X86 is not set
# CONFIG_XZ_DEC_POWERPC is not set
CONFIG_XZ_DEC_IA64=y
CONFIG_XZ_DEC_ARM=y
# CONFIG_XZ_DEC_ARMTHUMB is not set
# CONFIG_XZ_DEC_SPARC is not set
CONFIG_XZ_DEC_MICROLZMA=y
CONFIG_XZ_DEC_BCJ=y
# CONFIG_XZ_DEC_TEST is not set
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_DECOMPRESS_XZ=y
CONFIG_DECOMPRESS_LZO=y
CONFIG_DECOMPRESS_ZSTD=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_REED_SOLOMON=y
CONFIG_REED_SOLOMON_ENC8=y
CONFIG_REED_SOLOMON_DEC8=y
CONFIG_REED_SOLOMON_ENC16=y
CONFIG_REED_SOLOMON_DEC16=y
CONFIG_INTERVAL_TREE=y
CONFIG_ASSOCIATIVE_ARRAY=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT_MAP=y
CONFIG_HAS_DMA=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_DMA_DECLARE_COHERENT=y
CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y
CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU=y
CONFIG_ARCH_HAS_DMA_PREP_COHERENT=y
CONFIG_DMA_NONCOHERENT_MMAP=y
CONFIG_DMA_COHERENT_POOL=y
CONFIG_DMA_DIRECT_REMAP=y
CONFIG_DMA_API_DEBUG=y
CONFIG_DMA_API_DEBUG_SG=y
# CONFIG_DMA_MAP_BENCHMARK is not set
CONFIG_SGL_ALLOC=y
CONFIG_GLOB=y
CONFIG_GLOB_SELFTEST=m
CONFIG_GENERIC_ATOMIC64=y
CONFIG_CLZ_TAB=y
# CONFIG_IRQ_POLL is not set
CONFIG_MPILIB=y
CONFIG_LIBFDT=y
CONFIG_OID_REGISTRY=y
CONFIG_FONT_SUPPORT=m
CONFIG_FONT_8x16=y
CONFIG_FONT_AUTOSELECT=y
CONFIG_SG_SPLIT=y
CONFIG_SG_POOL=y
CONFIG_STACKDEPOT=y
CONFIG_REF_TRACKER=y
CONFIG_SBITMAP=y
CONFIG_PARMAN=m
CONFIG_OBJAGG=m
# end of Library routines

CONFIG_ASN1_ENCODER=m

#
# Kernel hacking
#

#
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
CONFIG_PRINTK_CALLER=y
CONFIG_STACKTRACE_BUILD_ID=y
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
CONFIG_CONSOLE_LOGLEVEL_QUIET=4
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_DYNAMIC_DEBUG is not set
CONFIG_DYNAMIC_DEBUG_CORE=y
# CONFIG_SYMBOLIC_ERRNAME is not set
# end of printk and dmesg options

CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_MISC is not set

#
# Compile-time checks and compiler options
#
CONFIG_DEBUG_INFO=y
CONFIG_AS_HAS_NON_CONST_LEB128=y
# CONFIG_DEBUG_INFO_NONE is not set
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
# CONFIG_DEBUG_INFO_DWARF4 is not set
# CONFIG_DEBUG_INFO_DWARF5 is not set
# CONFIG_DEBUG_INFO_REDUCED is not set
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_SPLIT=y
CONFIG_PAHOLE_HAS_SPLIT_BTF=y
CONFIG_GDB_SCRIPTS=y
CONFIG_FRAME_WARN=1024
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_READABLE_ASM is not set
CONFIG_HEADERS_INSTALL=y
CONFIG_DEBUG_SECTION_MISMATCH=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
CONFIG_VMLINUX_MAP=y
CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
# end of Compile-time checks and compiler options

#
# Generic Kernel Debugging Instruments
#
# CONFIG_MAGIC_SYSRQ is not set
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_FS_ALLOW_ALL is not set
# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set
CONFIG_DEBUG_FS_ALLOW_NONE=y
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
CONFIG_UBSAN=y
CONFIG_CC_HAS_UBSAN_BOUNDS=y
CONFIG_UBSAN_BOUNDS=y
CONFIG_UBSAN_ONLY_BOUNDS=y
# CONFIG_UBSAN_SHIFT is not set
# CONFIG_UBSAN_DIV_ZERO is not set
# CONFIG_UBSAN_UNREACHABLE is not set
# CONFIG_UBSAN_BOOL is not set
# CONFIG_UBSAN_ENUM is not set
# CONFIG_TEST_UBSAN is not set
CONFIG_HAVE_KCSAN_COMPILER=y
# end of Generic Kernel Debugging Instruments

#
# Networking Debugging
#
# end of Networking Debugging

#
# Memory Debugging
#
# CONFIG_PAGE_EXTENSION is not set
CONFIG_DEBUG_PAGEALLOC=y
CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT=y
# CONFIG_DEBUG_SLAB is not set
# CONFIG_PAGE_OWNER is not set
CONFIG_PAGE_POISONING=y
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_SHRINKER_DEBUG is not set
CONFIG_HAVE_DEBUG_KMEMLEAK=y
CONFIG_DEBUG_KMEMLEAK=y
CONFIG_DEBUG_KMEMLEAK_MEM_POOL_SIZE=16000
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
# CONFIG_DEBUG_KMEMLEAK_AUTO_SCAN is not set
# CONFIG_DEBUG_STACK_USAGE is not set
CONFIG_SCHED_STACK_END_CHECK=y
CONFIG_DEBUG_VM_IRQSOFF=y
CONFIG_DEBUG_VM=y
CONFIG_DEBUG_VM_MAPLE_TREE=y
# CONFIG_DEBUG_VM_RB is not set
CONFIG_DEBUG_VM_PGFLAGS=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
# end of Memory Debugging

# CONFIG_DEBUG_SHIRQ is not set

#
# Debug Oops, Lockups and Hangs
#
# CONFIG_PANIC_ON_OOPS is not set
CONFIG_PANIC_ON_OOPS_VALUE=0
CONFIG_PANIC_TIMEOUT=0
CONFIG_LOCKUP_DETECTOR=y
CONFIG_SOFTLOCKUP_DETECTOR=y
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
# CONFIG_WQ_WATCHDOG is not set
CONFIG_TEST_LOCKUP=m
# end of Debug Oops, Lockups and Hangs

#
# Scheduler Debugging
#
CONFIG_SCHED_DEBUG=y
# CONFIG_SCHEDSTATS is not set
# end of Scheduler Debugging

# CONFIG_DEBUG_TIMEKEEPING is not set

#
# Lock Debugging (spinlocks, mutexes, etc...)
#
CONFIG_LOCK_DEBUGGING_SUPPORT=y
# CONFIG_PROVE_LOCKING is not set
CONFIG_LOCK_STAT=y
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
CONFIG_DEBUG_RWSEMS=y
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_LOCKDEP=y
CONFIG_LOCKDEP_BITS=15
CONFIG_LOCKDEP_CHAINS_BITS=16
CONFIG_LOCKDEP_STACK_TRACE_BITS=19
CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS=14
CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS=12
# CONFIG_DEBUG_LOCKDEP is not set
# CONFIG_DEBUG_ATOMIC_SLEEP is not set
CONFIG_DEBUG_LOCKING_API_SELFTESTS=y
# CONFIG_LOCK_TORTURE_TEST is not set
CONFIG_WW_MUTEX_SELFTEST=y
CONFIG_SCF_TORTURE_TEST=y
# end of Lock Debugging (spinlocks, mutexes, etc...)

CONFIG_DEBUG_IRQFLAGS=y
CONFIG_STACKTRACE=y
# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set
# CONFIG_DEBUG_KOBJECT is not set

#
# Debug kernel data structures
#
CONFIG_DEBUG_LIST=y
CONFIG_DEBUG_PLIST=y
CONFIG_DEBUG_SG=y
# CONFIG_DEBUG_NOTIFIERS is not set
CONFIG_BUG_ON_DATA_CORRUPTION=y
CONFIG_DEBUG_MAPLE_TREE=y
# end of Debug kernel data structures

CONFIG_DEBUG_CREDENTIALS=y

#
# RCU Debugging
#
CONFIG_TORTURE_TEST=y
CONFIG_RCU_SCALE_TEST=y
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_RCU_REF_SCALE_TEST is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_EQS_DEBUG=y
# end of RCU Debugging

# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
# CONFIG_LATENCYTOP is not set
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_TRACING_SUPPORT=y
# CONFIG_FTRACE is not set
# CONFIG_SAMPLES is not set
# CONFIG_STRICT_DEVMEM is not set

#
# microblaze Debugging
#
# end of microblaze Debugging

#
# Kernel Testing and Coverage
#
# CONFIG_KUNIT is not set
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_FAULT_INJECTION=y
CONFIG_FAILSLAB=y
# CONFIG_FAIL_PAGE_ALLOC is not set
CONFIG_FAULT_INJECTION_USERCOPY=y
# CONFIG_FAIL_MAKE_REQUEST is not set
CONFIG_FAIL_IO_TIMEOUT=y
# CONFIG_FAULT_INJECTION_DEBUG_FS is not set
CONFIG_CC_HAS_SANCOV_TRACE_PC=y
CONFIG_RUNTIME_TESTING_MENU=y
CONFIG_LKDTM=m
# CONFIG_TEST_MIN_HEAP is not set
# CONFIG_TEST_DIV64 is not set
CONFIG_BACKTRACE_SELF_TEST=y
CONFIG_TEST_REF_TRACKER=m
# CONFIG_RBTREE_TEST is not set
CONFIG_REED_SOLOMON_TEST=y
CONFIG_INTERVAL_TREE_TEST=y
CONFIG_PERCPU_TEST=m
# CONFIG_ATOMIC64_SELFTEST is not set
# CONFIG_TEST_HEXDUMP is not set
CONFIG_STRING_SELFTEST=m
# CONFIG_TEST_STRING_HELPERS is not set
# CONFIG_TEST_STRSCPY is not set
# CONFIG_TEST_KSTRTOX is not set
# CONFIG_TEST_PRINTF is not set
# CONFIG_TEST_SCANF is not set
CONFIG_TEST_BITMAP=y
# CONFIG_TEST_UUID is not set
CONFIG_TEST_XARRAY=y
# CONFIG_TEST_MAPLE_TREE is not set
CONFIG_TEST_RHASHTABLE=y
# CONFIG_TEST_SIPHASH is not set
CONFIG_TEST_IDA=y
CONFIG_TEST_PARMAN=m
# CONFIG_TEST_LKM is not set
CONFIG_TEST_BITOPS=m
CONFIG_TEST_VMALLOC=m
CONFIG_TEST_USER_COPY=m
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_SYSCTL is not set
CONFIG_TEST_UDELAY=m
# CONFIG_TEST_STATIC_KEYS is not set
CONFIG_TEST_MEMCAT_P=y
# CONFIG_TEST_OBJAGG is not set
CONFIG_TEST_MEMINIT=y
CONFIG_TEST_FREE_PAGES=m
# end of Kernel Testing and Coverage

#
# Rust hacking
#
# end of Rust hacking

CONFIG_WARN_MISSING_DOCUMENTS=y
# CONFIG_WARN_ABI_ERRORS is not set
# end of Kernel hacking

From u.kleine-koenig at pengutronix.de  Sat Dec 10 14:41:54 2022
From: u.kleine-koenig at pengutronix.de (Uwe =?utf-8?Q?Kleine-K=C3=B6nig?=)
Date: Sat, 10 Dec 2022 23:41:54 +0100
Subject: [PATCH v2 00/11] pwm: Allow .get_state to fail
In-Reply-To: <Y5TyrO5maz5VYic3@smile.fi.intel.com>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
 <Y5OtCjQOQjjltGPa@smile.fi.intel.com>
 <20221210091833.vdfir63nq4kpj5cm@pengutronix.de>
 <Y5TyrO5maz5VYic3@smile.fi.intel.com>
Message-ID: <20221210224154.733cd5qnrkpexq22@pengutronix.de>

Hello Andy,

On Sat, Dec 10, 2022 at 10:57:16PM +0200, Andy Shevchenko wrote:
> On Sat, Dec 10, 2022 at 10:18:33AM +0100, Uwe Kleine-K?nig wrote:
> > On Fri, Dec 09, 2022 at 11:47:54PM +0200, Andy Shevchenko wrote:
> > > On Wed, Nov 30, 2022 at 04:21:37PM +0100, Uwe Kleine-K?nig wrote:
> 
> ...
> 
> > > I'm wondering why we didn't see a compiler warning about mistyped function
> > > prototypes in some drivers.
> > 
> > I don't understand where you expected a warning. Care to elaborate?
> 
> intel-lpss.c has the prototype that returns an int. IIRC it was like this

Do you mean drivers/mfd/intel-lpss.c? That one doesn't implement a PWM?!

And drivers/pwm/pwm-lpss.c is adapted by this series.

One of us is confused ...

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-K?nig            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221210/b12400d5/attachment.sig>

From andriy.shevchenko at intel.com  Sun Dec 11 05:31:25 2022
From: andriy.shevchenko at intel.com (Andy Shevchenko)
Date: Sun, 11 Dec 2022 15:31:25 +0200
Subject: [PATCH v2 00/11] pwm: Allow .get_state to fail
In-Reply-To: <20221210224154.733cd5qnrkpexq22@pengutronix.de>
References: <20221130152148.2769768-1-u.kleine-koenig@pengutronix.de>
 <Y5OtCjQOQjjltGPa@smile.fi.intel.com>
 <20221210091833.vdfir63nq4kpj5cm@pengutronix.de>
 <Y5TyrO5maz5VYic3@smile.fi.intel.com>
 <20221210224154.733cd5qnrkpexq22@pengutronix.de>
Message-ID: <Y5XbrWTicuTxPLwN@smile.fi.intel.com>

On Sat, Dec 10, 2022 at 11:41:54PM +0100, Uwe Kleine-K?nig wrote:
> On Sat, Dec 10, 2022 at 10:57:16PM +0200, Andy Shevchenko wrote:
> > On Sat, Dec 10, 2022 at 10:18:33AM +0100, Uwe Kleine-K?nig wrote:
> > > On Fri, Dec 09, 2022 at 11:47:54PM +0200, Andy Shevchenko wrote:
> > > > On Wed, Nov 30, 2022 at 04:21:37PM +0100, Uwe Kleine-K?nig wrote:

...

> > > > I'm wondering why we didn't see a compiler warning about mistyped function
> > > > prototypes in some drivers.
> > > 
> > > I don't understand where you expected a warning. Care to elaborate?
> > 
> > intel-lpss.c has the prototype that returns an int. IIRC it was like this
> 
> Do you mean drivers/mfd/intel-lpss.c? That one doesn't implement a PWM?!

Nope, I meant pwm-lpss.c.

> And drivers/pwm/pwm-lpss.c is adapted by this series.

That's what I didn't see how.

> One of us is confused ...

Yes, because when I have checked the branch based on Linux Next I already saw
that get_state() returns a code and I wasn't aware that the series is already
there.

-- 
With Best Regards,
Andy Shevchenko




From olteanv at gmail.com  Sun Dec 11 14:58:23 2022
From: olteanv at gmail.com (Vladimir Oltean)
Date: Mon, 12 Dec 2022 00:58:23 +0200
Subject: [PATCH v5 net-next 01/10] dt-bindings: dsa: sync with maintainers
In-Reply-To: <87o7sbh896.fsf@kurt>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-2-colin.foster@in-advantage.com>
 <87o7sbh896.fsf@kurt>
Message-ID: <20221211225823.nde77nlfriok4q6x@skbuf>

On Sat, Dec 10, 2022 at 11:18:29AM +0100, Kurt Kanzenbach wrote:
> You can update the hellcreek binding as well. Thanks.
> 
> diff --git a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> index 73b774eadd0b..1d7dab31457d 100644
> --- a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> @@ -12,7 +12,7 @@ allOf:
>  maintainers:
>    - Andrew Lunn <andrew at lunn.ch>
>    - Florian Fainelli <f.fainelli at gmail.com>
> -  - Vivien Didelot <vivien.didelot at gmail.com>
> +  - Vladimir Oltean <olteanv at gmail.com>
>    - Kurt Kanzenbach <kurt at linutronix.de>
>  
>  description:

Good observation. If there are no other comments on this patch series
(which otherwise looks reasonable to me), I suppose that could be
accomplished via a parallel patch as well? The diff you're proposing
does not seem to conflict with something else that Colin is touching in
this patch set.


From Trevor.Wu at mediatek.com  Sun Dec 11 18:43:47 2022
From: Trevor.Wu at mediatek.com (=?utf-8?B?VHJldm9yIFd1ICjlkLPmlofoia8p?=)
Date: Mon, 12 Dec 2022 02:43:47 +0000
Subject: [PATCH v3 10/12] dt-bindings: mediatek: mt8188: add audio afe
 document
In-Reply-To: <fb34e446-2904-a357-e54b-3e82a2b0745c@linaro.org>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
	 <20221208033148.21866-11-trevor.wu@mediatek.com>
	 <d7d9f3c7-b3e3-1e13-a80f-c7bf7b38a5b1@linaro.org>
	 <45b4b287dfd57b99e0ba5675bf99194f6d84d9da.camel@mediatek.com>
	 <fb34e446-2904-a357-e54b-3e82a2b0745c@linaro.org>
Message-ID: <e08fab2a694313abc12e0f8303de3e2e704b388c.camel@mediatek.com>

On Fri, 2022-12-09 at 15:56 +0100, Krzysztof Kozlowski wrote:
> On 09/12/2022 11:56, Trevor Wu (???) wrote:
> > > > +
> > > > +patternProperties:
> > > > +  "^mediatek,etdm-in[1-2]-chn-disabled$":
> > > > +    $ref: /schemas/types.yaml#/definitions/uint8-array
> > > > +    minItems: 1
> > > > +    maxItems: 16
> > > > +    description:
> > > > +      By default, all data received from ETDM pins will be
> > > > outputed to
> > > > +      memory. etdm in supports disable_out in direct mode(w/o
> > > > interconn).
> > > > +      User can specify the channel ID which they hope dropping
> > > > and
> > > > then
> > > > +      the specified channel won't be seen on memory.
> > > 
> > > So we know what are the IDs but it's a mystery what are the
> > > values.
> > > Especially with unique values - how any of these should case that
> > > channel "won't be seen in memory"?
> > > 
> > 
> > For example,
> > FE can support 14ch, but BE(etdm) can't support 14ch(it can support
> > 16ch).
> > In the case, we can configure 16ch to etdm and make use of the
> > property
> > to disable the last two channels.
> > 
> > mediatek,etdm-in1-chn-disabled = /bits/ 8 <0xE 0xF>;
> 
> Your description should explain that this is a list of channel IDs
> which
> should be disabled.
> 
Hi Krzysztof,

Thanks for your suggestion.
I'll put it into the description.

> > 
> > 
> > > > +    uniqueItems: true
> > > > +    items:
> > > > +      minimum: 0
> > > > +      maximum: 15
> > > > +
> > > > +  "^mediatek,etdm-in[1-2]-mclk-always-on-rate-hz$":
> > > > +    description: Specify etdm in mclk output rate for always
> > > > on
> > > > case.
> > > 
> > > How is it different than assigned-clock-rates?
> > > 
> > 
> > This includes clock enabling at init stage.
> 
> assigned-clock-rates are also at init stage. I asked what is
> different.
> 

If the property is used, there are three parts included in dai driver
probe function.

1. set clock parent (which APLL)
2. set clock rate (MCLK rate)
3. enable clock (MCLK On)

The first two parts can be done by existing dts clock properties, but
the last one can't.
When MCLK should be enabled at boot time and kept on, this property is used. That's why I say the property is designed for always-on case.

Thanks,
Trevor.
> > 
> > > > +
> > > > +  "^mediatek,etdm-out[1-3]-mclk-always-on-rate-hz$":
> > > > +    description: Specify etdm out mclk output rate for always
> > > > on
> > > > case.
> > > > +
> > > > +  "^mediatek,etdm-in[1-2]-multi-pin-mode$":
> > > > +    type: boolean
> > > > +    description: if present, the etdm data mode is I2S.
> > > > +
> > > > +  "^mediatek,etdm-out[1-3]-multi-pin-mode$":
> > > > +    type: boolean
> > > > +    description: if present, the etdm data mode is I2S.
> > > > +
> > > > +  "^mediatek,etdm-in[1-2]-cowork-source$":
> > > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > > +    description:
> > > > +      etdm modules can share the same external clock pin.
> > > > Specify
> > > > +      which etdm clock source is required by this etdm in
> > > > moudule.
> > > 
> > > typo: module
> > > 
> 
> Best regards,
> Krzysztof
> 

From Moudy.Ho at mediatek.com  Sun Dec 11 22:28:44 2022
From: Moudy.Ho at mediatek.com (=?utf-8?B?TW91ZHkgSG8gKOS9leWul+WOnyk=?=)
Date: Mon, 12 Dec 2022 06:28:44 +0000
Subject: [PATCH v2 01/12] dt-binding: mediatek: add bindings for MediaTek
 8195 MDP3 components
In-Reply-To: <20221209210631.GA3840519-robh@kernel.org>
References: <20221207084412.14075-1-moudy.ho@mediatek.com>
	 <20221207084412.14075-2-moudy.ho@mediatek.com>
	 <20221209210631.GA3840519-robh@kernel.org>
Message-ID: <a731f459237051094940bc024ede9dee75ffde9b.camel@mediatek.com>

Hi Rob,

Thanks for helping to review this series.

On Fri, 2022-12-09 at 15:06 -0600, Rob Herring wrote:
> On Wed, Dec 07, 2022 at 04:44:01PM +0800, Moudy Ho wrote:
> > This patch adds support for MT8195 MDP3 RDMA, and introduce more
> > MDP3 components present in MT8195.
> > 
> > Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
> > ---
> >  .../bindings/media/mediatek,mdp3-aal.yaml     | 64
> > ++++++++++++++++
> >  .../bindings/media/mediatek,mdp3-color.yaml   | 64
> > ++++++++++++++++
> >  .../bindings/media/mediatek,mdp3-fg.yaml      | 64
> > ++++++++++++++++
> >  .../bindings/media/mediatek,mdp3-hdr.yaml     | 63 +++++++++++++++
> >  .../bindings/media/mediatek,mdp3-merge.yaml   | 64
> > ++++++++++++++++
> >  .../bindings/media/mediatek,mdp3-ovl.yaml     | 64
> > ++++++++++++++++
> >  .../bindings/media/mediatek,mdp3-pad.yaml     | 64
> > ++++++++++++++++
> >  .../bindings/media/mediatek,mdp3-rdma.yaml    |  5 +-
> >  .../bindings/media/mediatek,mdp3-split.yaml   | 76
> > +++++++++++++++++++
> >  .../bindings/media/mediatek,mdp3-stitch.yaml  | 64
> > ++++++++++++++++
> >  .../bindings/media/mediatek,mdp3-tcc.yaml     | 63 +++++++++++++++
> >  .../bindings/media/mediatek,mdp3-tdshp.yaml   | 64
> > ++++++++++++++++
> >  12 files changed, 717 insertions(+), 2 deletions(-)
> >  create mode 100644
> > Documentation/devicetree/bindings/media/mediatek,mdp3-aal.yaml
> >  create mode 100644
> > Documentation/devicetree/bindings/media/mediatek,mdp3-color.yaml
> >  create mode 100644
> > Documentation/devicetree/bindings/media/mediatek,mdp3-fg.yaml
> >  create mode 100644
> > Documentation/devicetree/bindings/media/mediatek,mdp3-hdr.yaml
> >  create mode 100644
> > Documentation/devicetree/bindings/media/mediatek,mdp3-merge.yaml
> >  create mode 100644
> > Documentation/devicetree/bindings/media/mediatek,mdp3-ovl.yaml
> >  create mode 100644
> > Documentation/devicetree/bindings/media/mediatek,mdp3-pad.yaml
> >  create mode 100644
> > Documentation/devicetree/bindings/media/mediatek,mdp3-split.yaml
> >  create mode 100644
> > Documentation/devicetree/bindings/media/mediatek,mdp3-stitch.yaml
> >  create mode 100644
> > Documentation/devicetree/bindings/media/mediatek,mdp3-tcc.yaml
> >  create mode 100644
> > Documentation/devicetree/bindings/media/mediatek,mdp3-tdshp.yaml
> > 
> > diff --git a/Documentation/devicetree/bindings/media/mediatek,mdp3-
> > aal.yaml b/Documentation/devicetree/bindings/media/mediatek,mdp3-
> > aal.yaml
> > new file mode 100644
> > index 000000000000..5b59e0802357
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/media/mediatek,mdp3-
> > aal.yaml
> > @@ -0,0 +1,64 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: 
> > https://urldefense.com/v3/__http://devicetree.org/schemas/media/mediatek,mdp3-aal.yaml*__;Iw!!CTRNKA9wMg0ARbw!gDIFKWscMU7roNTbdA1-AyzzrxCwA7ErPkkF-OaHo9UU8Y53_SGcVhOwp6dgB9hRhLzmmol53Sqlqg$?
> >  
> > +$schema: 
> > https://urldefense.com/v3/__http://devicetree.org/meta-schemas/core.yaml*__;Iw!!CTRNKA9wMg0ARbw!gDIFKWscMU7roNTbdA1-AyzzrxCwA7ErPkkF-OaHo9UU8Y53_SGcVhOwp6dgB9hRhLzmmolTzbOS7Q$?
> >  
> > +
> > +title: MediaTek Media Data Path 3 AAL Device Tree Bindings
> 
> Drop ' Device Tree Bindings' from titles.
> 
> > +
> > +maintainers:
> > +  - Matthias Brugger <matthias.bgg at gmail.com>
> > +  - Moudy Ho <moudy.ho at mediatek.com>
> > +
> > +description: |
> 
> Don't need '|'
> 
> > +  One of Media Data Path 3 (MDP3) components is responsible for
> > backlight
> > +  power saving and sunlight visibility improving.
> > +
> > +properties:
> > +  compatible:
> > +    enum:
> > +      - mediatek,mt8195-mdp3-aal
> > +
> > +  reg:
> > +    maxItems: 1
> > +
> > +  mediatek,gce-client-reg:
> > +    $ref: /schemas/types.yaml#/definitions/phandle-array
> > +    items:
> > +      items:
> > +        - description: phandle of GCE
> > +        - description: GCE subsys id
> > +        - description: register offset
> > +        - description: register size
> > +    description: The register of client driver can be configured
> > by gce with
> > +      4 arguments defined in this property. Each GCE subsys id is
> > mapping to
> > +      a client defined in the header include/dt-
> > bindings/gce/<chip>-gce.h.
> 
> How many 4 cell entries? This allows any number. If 1, then you need 
> 'maxItems: 1' with the outer 'items'.
> 

Sorry for the confusion here, since the GCE clients are all unique,
I'll add a "maxItems: 1" in this property.

> > +
> > +  clocks:
> > +    minItems: 1
> > +
> > +  power-domains:
> > +    maxItems: 1
> > +
> > +required:
> > +  - compatible
> > +  - reg
> > +  - mediatek,gce-client-reg
> > +  - clocks
> > +  - power-domains
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > +  - |
> > +    #include <dt-bindings/clock/mt8195-clk.h>
> > +    #include <dt-bindings/gce/mt8195-gce.h>
> > +    #include <dt-bindings/power/mt8195-power.h>
> > +
> > +    mdp3-aal0 at 14005000 {
> > +      compatible = "mediatek,mt8195-mdp3-aal";
> > +      reg = <0x14005000 0x1000>;
> > +      mediatek,gce-client-reg = <&gce1 SUBSYS_1400XXXX 0x5000
> > 0x1000>;
> > +      clocks = <&vppsys0 CLK_VPP0_MDP_AAL>;
> > +      power-domains = <&spm MT8195_POWER_DOMAIN_VPPSYS0>;
> 
> Indent by 4 spaces here.
> 

Apologies for the indentation mismatch, it will be corrected in next
version.

> > +    };
> 
> Same comments for the rest...
> 

Sincerely,
Moudy

From kurt at linutronix.de  Sun Dec 11 23:51:19 2022
From: kurt at linutronix.de (Kurt Kanzenbach)
Date: Mon, 12 Dec 2022 08:51:19 +0100
Subject: [PATCH v5 net-next 01/10] dt-bindings: dsa: sync with maintainers
In-Reply-To: <20221211225823.nde77nlfriok4q6x@skbuf>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-2-colin.foster@in-advantage.com>
 <87o7sbh896.fsf@kurt> <20221211225823.nde77nlfriok4q6x@skbuf>
Message-ID: <87mt7tt5zc.fsf@kurt>

On Mon Dec 12 2022, Vladimir Oltean wrote:
> On Sat, Dec 10, 2022 at 11:18:29AM +0100, Kurt Kanzenbach wrote:
>> You can update the hellcreek binding as well. Thanks.
>> 
>> diff --git a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
>> index 73b774eadd0b..1d7dab31457d 100644
>> --- a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
>> +++ b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
>> @@ -12,7 +12,7 @@ allOf:
>>  maintainers:
>>    - Andrew Lunn <andrew at lunn.ch>
>>    - Florian Fainelli <f.fainelli at gmail.com>
>> -  - Vivien Didelot <vivien.didelot at gmail.com>
>> +  - Vladimir Oltean <olteanv at gmail.com>
>>    - Kurt Kanzenbach <kurt at linutronix.de>
>>  
>>  description:
>
> Good observation. If there are no other comments on this patch series
> (which otherwise looks reasonable to me), I suppose that could be
> accomplished via a parallel patch as well? The diff you're proposing
> does not seem to conflict with something else that Colin is touching in
> this patch set.

Sure, it shouldn't conflict. I'll send a patch to update this
separately.

Thanks,
Kurt
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 861 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221212/4c9ee690/attachment.sig>

From Garmin.Chang at mediatek.com  Sun Dec 11 23:53:43 2022
From: Garmin.Chang at mediatek.com (=?utf-8?B?R2FybWluIENoYW5nICjlvLXlrrbpipgp?=)
Date: Mon, 12 Dec 2022 07:53:43 +0000
Subject: [PATCH v2 08/19] clk: mediatek: Add MT8188 imgsys clock support
In-Reply-To: <cb050482-cf6e-829e-7fd4-cfcde72c545b@collabora.com>
References: <20221024094254.29218-1-Garmin.Chang@mediatek.com>
	 <20221024094254.29218-9-Garmin.Chang@mediatek.com>
	 <cb050482-cf6e-829e-7fd4-cfcde72c545b@collabora.com>
Message-ID: <36f37e88feea9217864f86304cdd1045b793fc23.camel@mediatek.com>

On Thu, 2022-10-27 at 10:25 +0200, AngeloGioacchino Del Regno wrote:
> Il 24/10/22 11:42, Garmin.Chang ha scritto:
> > Add MT8188 imgsys clock controllers which provide clock gate
> > control for image IP blocks.
> > 
> > Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
> > ---
> >   drivers/clk/mediatek/Makefile         |   2 +-
> >   drivers/clk/mediatek/clk-mt8188-img.c | 124
> > ++++++++++++++++++++++++++
> >   2 files changed, 125 insertions(+), 1 deletion(-)
> >   create mode 100644 drivers/clk/mediatek/clk-mt8188-img.c
> > 
> > diff --git a/drivers/clk/mediatek/Makefile
> > b/drivers/clk/mediatek/Makefile
> > index bd0a2aa5b6fa..242b49bafa9e 100644
> > --- a/drivers/clk/mediatek/Makefile
> > +++ b/drivers/clk/mediatek/Makefile
> > @@ -84,7 +84,7 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-
> > mcu.o clk-mt8186-topckgen.o clk-mt
> >   				   clk-mt8186-cam.o clk-mt8186-mdp.o
> > clk-mt8186-ipe.o
> >   obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-
> > mt8188-topckgen.o \
> >   				   clk-mt8188-peri_ao.o clk-mt8188-
> > infra_ao.o \
> > -				   clk-mt8188-cam.o clk-mt8188-ccu.o
> > +				   clk-mt8188-cam.o clk-mt8188-ccu.o
> > clk-mt8188-img.o
> >   obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
> >   obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
> >   obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
> > diff --git a/drivers/clk/mediatek/clk-mt8188-img.c
> > b/drivers/clk/mediatek/clk-mt8188-img.c
> > new file mode 100644
> > index 000000000000..00f3bbf4d502
> > --- /dev/null
> > +++ b/drivers/clk/mediatek/clk-mt8188-img.c
> > @@ -0,0 +1,124 @@
> > +// SPDX-License-Identifier: GPL-2.0-only
> > +//
> > +// Copyright (c) 2022 MediaTek Inc.
> > +// Author: Garmin Chang <garmin.chang at mediatek.com>
> > +
> > +#include <linux/clk-provider.h>
> > +#include <linux/platform_device.h>
> > +#include <dt-bindings/clock/mediatek,mt8188-clk.h>
> > +
> > +#include "clk-gate.h"
> > +#include "clk-mtk.h"
> > +
> > +static const struct mtk_gate_regs imgsys_cg_regs = {
> > +	.set_ofs = 0x4,
> > +	.clr_ofs = 0x8,
> > +	.sta_ofs = 0x0,
> > +};
> > +
> > +#define GATE_IMGSYS(_id, _name, _parent, _shift)			
> > \
> > +	GATE_MTK(_id, _name, _parent, &imgsys_cg_regs, _shift,
> > &mtk_clk_gate_ops_setclr)
> > +
> > +static const struct mtk_gate imgsys_main_clks[] = {
> > +	GATE_IMGSYS(CLK_IMGSYS_MAIN_LARB9, "imgsys_main_larb9",
> > "top_img", 0),
> > +	GATE_IMGSYS(CLK_IMGSYS_MAIN_TRAW0, "imgsys_main_traw0",
> > "top_img", 1),
> > +	GATE_IMGSYS(CLK_IMGSYS_MAIN_TRAW1, "imgsys_main_traw1",
> > "top_img", 2),
> > +	GATE_IMGSYS(CLK_IMGSYS_MAIN_VCORE_GALS,
> > "imgsys_main_vcore_gals", "top_img", 3),
> > +	GATE_IMGSYS(CLK_IMGSYS_MAIN_DIP0, "imgsys_main_dip0",
> > "top_img", 8),
> > +	GATE_IMGSYS(CLK_IMGSYS_MAIN_WPE0, "imgsys_main_wpe0",
> > "top_img", 9),
> > +	GATE_IMGSYS(CLK_IMGSYS_MAIN_IPE, "imgsys_main_ipe", "top_img",
> > 10),
> > +	GATE_IMGSYS(CLK_IMGSYS_MAIN_WPE1, "imgsys_main_wpe1",
> > "top_img", 12),
> > +	GATE_IMGSYS(CLK_IMGSYS_MAIN_WPE2, "imgsys_main_wpe2",
> > "top_img", 13),
> > +	GATE_IMGSYS(CLK_IMGSYS_MAIN_GALS, "imgsys_main_gals",
> > "top_img", 31),
> > +};
> > +
> > +static const struct mtk_gate imgsys_wpe1_clks[] = {
> > +	GATE_IMGSYS(CLK_IMGSYS_WPE1_LARB11, "imgsys_wpe1_larb11",
> > "top_img", 0),
> > +	GATE_IMGSYS(CLK_IMGSYS_WPE1, "imgsys_wpe1", "top_img", 1),
> > +};
> > +
> > +static const struct mtk_gate imgsys_wpe2_clks[] = {
> > +	GATE_IMGSYS(CLK_IMGSYS_WPE2_LARB11, "imgsys_wpe2_larb11",
> > "top_img", 0),
> > +	GATE_IMGSYS(CLK_IMGSYS_WPE2, "imgsys_wpe2", "top_img", 1),
> > +};
> > +
> > +static const struct mtk_gate imgsys_wpe3_clks[] = {
> > +	GATE_IMGSYS(CLK_IMGSYS_WPE3_LARB11, "imgsys_wpe3_larb11",
> > "top_img", 0),
> > +	GATE_IMGSYS(CLK_IMGSYS_WPE3, "imgsys_wpe3", "top_img", 1),
> > +};
> > +
> > +static const struct mtk_gate imgsys1_dip_top_clks[] = {
> > +	GATE_IMGSYS(CLK_IMGSYS1_DIP_TOP_LARB10, "imgsys1_dip_larb10",
> > "top_img", 0),
> > +	GATE_IMGSYS(CLK_IMGSYS1_DIP_TOP_DIP_TOP, "imgsys1_dip_dip_top",
> > "top_img", 1),
> > +};
> > +
> > +static const struct mtk_gate imgsys1_dip_nr_clks[] = {
> > +	GATE_IMGSYS(CLK_IMGSYS1_DIP_NR_LARB15, "imgsys1_dip_nr_larb15",
> > "top_img", 0),
> > +	GATE_IMGSYS(CLK_IMGSYS1_DIP_NR_DIP_NR, "imgsys1_dip_nr_dip_nr",
> > "top_img", 1),
> > +};
> > +
> > +static const struct mtk_clk_desc imgsys_main_desc = {
> > +	.clks = imgsys_main_clks,
> > +	.num_clks = ARRAY_SIZE(imgsys_main_clks),
> > +};
> > +
> > +static const struct mtk_clk_desc imgsys_wpe1_desc = {
> > +	.clks = imgsys_wpe1_clks,
> > +	.num_clks = ARRAY_SIZE(imgsys_wpe1_clks),
> > +};
> > +
> > +static const struct mtk_clk_desc imgsys_wpe2_desc = {
> > +	.clks = imgsys_wpe2_clks,
> > +	.num_clks = ARRAY_SIZE(imgsys_wpe2_clks),
> > +};
> > +
> > +static const struct mtk_clk_desc imgsys_wpe3_desc = {
> > +	.clks = imgsys_wpe3_clks,
> > +	.num_clks = ARRAY_SIZE(imgsys_wpe3_clks),
> > +};
> > +
> > +static const struct mtk_clk_desc imgsys1_dip_top_desc = {
> > +	.clks = imgsys1_dip_top_clks,
> > +	.num_clks = ARRAY_SIZE(imgsys1_dip_top_clks),
> > +};
> > +
> > +static const struct mtk_clk_desc imgsys1_dip_nr_desc = {
> > +	.clks = imgsys1_dip_nr_clks,
> > +	.num_clks = ARRAY_SIZE(imgsys1_dip_nr_clks),
> > +};
> > +
> > +static const struct of_device_id of_match_clk_mt8188_imgsys_main[]
> > = {
> > +	{
> > +		.compatible = "mediatek,mt8188-imgsys",
> > +		.data = &imgsys_main_desc,
> > +	}, {
> > +		.compatible = "mediatek,mt8188-imgsys_wpe1",
> 
> I know that this was done in other clock drivers as well, but can we
> please
> stop using underscores in devicetree compatibles?
> That makes them look more consistent with the rest of the DT.
> 
> "mediatek,mt8188-imgsys-wpe1", as an example, would look a bit
> better.
> 
> P.S.: Please do the same on all of the other drivers that you are
> introducing
>        with this series.
> 
> Thanks,
> Angelo

Thank you for your suggestion.
Ok, I'll check all drivers for this underscores problem and fix them in
V3.

Thanks,
Best Regards,
Garmin

From krzysztof.kozlowski at linaro.org  Mon Dec 12 00:40:46 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Mon, 12 Dec 2022 09:40:46 +0100
Subject: [PATCH v3 10/12] dt-bindings: mediatek: mt8188: add audio afe
 document
In-Reply-To: <e08fab2a694313abc12e0f8303de3e2e704b388c.camel@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
 <20221208033148.21866-11-trevor.wu@mediatek.com>
 <d7d9f3c7-b3e3-1e13-a80f-c7bf7b38a5b1@linaro.org>
 <45b4b287dfd57b99e0ba5675bf99194f6d84d9da.camel@mediatek.com>
 <fb34e446-2904-a357-e54b-3e82a2b0745c@linaro.org>
 <e08fab2a694313abc12e0f8303de3e2e704b388c.camel@mediatek.com>
Message-ID: <e20884d2-5d30-9519-d070-8e2ac07f2171@linaro.org>

On 12/12/2022 03:43, Trevor Wu (???) wrote:
>>>
>>>>> +    uniqueItems: true
>>>>> +    items:
>>>>> +      minimum: 0
>>>>> +      maximum: 15
>>>>> +
>>>>> +  "^mediatek,etdm-in[1-2]-mclk-always-on-rate-hz$":
>>>>> +    description: Specify etdm in mclk output rate for always
>>>>> on
>>>>> case.
>>>>
>>>> How is it different than assigned-clock-rates?
>>>>
>>>
>>> This includes clock enabling at init stage.
>>
>> assigned-clock-rates are also at init stage. I asked what is
>> different.
>>
> 
> If the property is used, there are three parts included in dai driver
> probe function.
> 
> 1. set clock parent (which APLL)
> 2. set clock rate (MCLK rate)
> 3. enable clock (MCLK On)
> 
> The first two parts can be done by existing dts clock properties, but
> the last one can't.
> When MCLK should be enabled at boot time and kept on, this property is used. That's why I say the property is designed for always-on case.

Heh, so the "always on case" means this property enables clock? How is
this even DT property? That's not how clocks should be kept enabled. You
need proper clock provider and consumer.


Best regards,
Krzysztof



From angelogioacchino.delregno at collabora.com  Mon Dec 12 00:50:51 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 12 Dec 2022 09:50:51 +0100
Subject: [PATCH] ASoC: mediatek: mt8195: add sof be ops to check audio
 active
In-Reply-To: <CAOReqxh=27P7PogzhFr+37XBfRh5Nxu1x46JpdCH=ZRDVhRbeQ@mail.gmail.com>
References: <20221209031053.8444-1-yc.hung@mediatek.com>
 <CAOReqxh=27P7PogzhFr+37XBfRh5Nxu1x46JpdCH=ZRDVhRbeQ@mail.gmail.com>
Message-ID: <2caaf016-c60d-3f4d-cfcc-e34a5629f359@collabora.com>

Il 09/12/22 19:27, Curtis Malainey ha scritto:
> On Thu, Dec 8, 2022 at 7:11 PM YC Hung <yc.hung at mediatek.com> wrote:
>>
>> In MT8195 SOF design, both DSP and audio driver would access audio
>> registers. Before DSP accesses audio registers, audio power and clock
>> should be enabled. DSP will hang up if DSP access audio register but
>> audio power and clock are disabled. Therefore, we add audio pm runtime
>> active checking before accessing audio registers in SOF BE's callback
>> hw_params function to avoid this situation.
>>
>> Signed-off-by: YC Hung <yc.hung at mediatek.com>
> 
> Acked-by: Curtis Malainey <cujomalainey at chromium.org>
> 

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>



From arinc.unal at arinc9.com  Mon Dec 12 01:28:06 2022
From: arinc.unal at arinc9.com (=?UTF-8?B?QXLEsW7DpyDDnE5BTA==?=)
Date: Mon, 12 Dec 2022 12:28:06 +0300
Subject: [PATCH v5 net-next 04/10] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <Y5TJw+zcEDf2ItZ5@euler>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-5-colin.foster@in-advantage.com>
 <1df417b5-a924-33d4-a302-eb526f7124b4@arinc9.com> <Y5TJw+zcEDf2ItZ5@euler>
Message-ID: <c1e40b58-4459-2929-64f3-3e20f36f6947@arinc9.com>

On 10.12.2022 21:02, Colin Foster wrote:
> Hi Ar?n?,
> On Sat, Dec 10, 2022 at 07:24:42PM +0300, Ar?n? ?NAL wrote:
>> On 10.12.2022 06:30, Colin Foster wrote:
>>> DSA a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
>>> +++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
>>> @@ -58,4 +58,26 @@ oneOf:
>>>    additionalProperties: true
>>> +$defs:
>>> +  ethernet-ports:
>>> +    description: A DSA switch without any extra port properties
>>> +    $ref: '#/'
>>> +
>>> +    patternProperties:
>>> +      "^(ethernet-)?ports$":
>>> +        type: object
>>> +        additionalProperties: false
>>> +
>>> +        properties:
>>> +          '#address-cells':
>>> +            const: 1
>>> +          '#size-cells':
>>> +            const: 0
>>> +
>>> +        patternProperties:
>>> +          "^(ethernet-)?port@[0-9]+$":
>>> +            description: Ethernet switch ports
>>> +            $ref: dsa-port.yaml#
>>> +            unevaluatedProperties: false
>>
>> I've got moderate experience in json-schema but shouldn't you put 'type:
>> object' here like you did for "^(ethernet-)?ports$"?
> 
> I can't say for sure, but adding "type: object" here and removing it
> from mediatek,mt7530.yaml still causes the same issue I mention below.
> 
> Rob's initial suggestion for this patch set (which was basically the
> entire implementation... many thanks again Rob) can be found here:
> https://lore.kernel.org/netdev/20221104200212.GA2315642-robh at kernel.org/
> 
>  From what I can tell, the omission of "type: object" here was
> intentional. At the very least, it doesn't seem to have any effect on
> warnings.
> 
>>
>>> +
>>>    ...
>>> diff --git a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
>>> index 73b774eadd0b..748ef9983ce2 100644
>>> --- a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
>>> +++ b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
>>> @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
>>>    title: Hirschmann Hellcreek TSN Switch Device Tree Bindings
>>>    allOf:
>>> -  - $ref: dsa.yaml#
>>> +  - $ref: dsa.yaml#/$defs/ethernet-ports
>>>    maintainers:
>>>      - Andrew Lunn <andrew at lunn.ch>
>>> diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
>>> index f2e9ff3f580b..20312f5d1944 100644
>>> --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
>>> +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
>>> @@ -157,9 +157,6 @@ patternProperties:
>>>        patternProperties:
>>>          "^(ethernet-)?port@[0-9]+$":
>>>            type: object
>>
>> This line was being removed on the previous version. Must be related to
>> above.
> 
> Without the 'object' type here, I get the following warning:
> 
> Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml: patternProperties:^(ethernet-)?ports$:patternProperties:^(ethernet-)?port@[0-9]+$: 'anyOf' conditional failed, one must be fixed:
>          'type' is a required property
>          '$ref' is a required property
>          hint: node schemas must have a type or $ref
>          from schema $id: http://devicetree.org/meta-schemas/core.yaml#
> ./Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml: Error in referenced schema matching $id: http://devicetree.org/schemas/net/dsa/mediatek,mt7530.yaml
>    SCHEMA  Documentation/devicetree/bindings/processed-schema.json
> /home/colin/src/work/linux_vsc/linux-imx/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml: ignoring, error in schema: patternProperties: ^(ethernet-)?ports$: patternProperties: ^(ethernet-)?port@[0-9]+$
> 
> 
> I'm testing this now and I'm noticing something is going on with the
> "ref: dsa-port.yaml"
> 
> 
> Everything seems to work fine (in that I don't see any warnings) when I
> have this diff:
> 
> 
> diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> index 20312f5d1944..db0122020f98 100644
> --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yam
> @@ -156,8 +156,7 @@ patternProperties:
> 
>       patternProperties:
>         "^(ethernet-)?port@[0-9]+$":
> -        type: object
> -
> +        $ref: dsa-port.yaml#
>           properties:
>             reg:
>               description:
> @@ -165,7 +164,6 @@ patternProperties:
>                 for user ports.
> 
>           allOf:
> -          - $ref: dsa-port.yaml#
>             - if:
>                 required: [ ethernet ]
>               then:
> 
> 
> 
> This one has me [still] scratching my head...

Right there with you. In addition to this, having or deleting type 
object on/from "^(ethernet-)?ports$" and "^(ethernet-)?port@[0-9]+$" on 
dsa.yaml doesn't cause any warnings (checked with make dt_binding_check 
DT_SCHEMA_FILES=net/dsa) which makes me question why it's there in the 
first place.

Ar?n?


From olteanv at gmail.com  Mon Dec 12 02:55:38 2022
From: olteanv at gmail.com (Vladimir Oltean)
Date: Mon, 12 Dec 2022 12:55:38 +0200
Subject: [PATCH v5 net-next 01/10] dt-bindings: dsa: sync with maintainers
In-Reply-To: <20221210033033.662553-2-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-2-colin.foster@in-advantage.com>
Message-ID: <20221212105538.ijybw4v26tozjspr@skbuf>

On Fri, Dec 09, 2022 at 07:30:24PM -0800, Colin Foster wrote:
> The MAINTAINERS file has Andrew Lunn, Florian Fainelli, and Vladimir Oltean
> listed as the maintainers for generic dsa bindings. Update dsa.yaml and
> dsa-port.yaml accordingly.
> 
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> 
> ---

Reviewed-by: Vladimir Oltean <olteanv at gmail.com>


From joro at 8bytes.org  Mon Dec 12 03:06:39 2022
From: joro at 8bytes.org (Joerg Roedel)
Date: Mon, 12 Dec 2022 12:06:39 +0100
Subject: [PATCH] iommu/mediatek: Fix forever loop in error handling
In-Reply-To: <Y5C3mTam2nkbaz6o@kili>
References: <Y5C3mTam2nkbaz6o@kili>
Message-ID: <Y5cLPzaQzMadY4Yk@8bytes.org>

On Wed, Dec 07, 2022 at 06:56:09PM +0300, Dan Carpenter wrote:
> There is a typo so this loop does i++ where i-- was intended.  It will
> result in looping until the kernel crashes.
> 
> Fixes: 26593928564c ("iommu/mediatek: Add error path for loop of mm_dts_parse")
> Signed-off-by: Dan Carpenter <error27 at gmail.com>
> ---
>  drivers/iommu/mtk_iommu.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)

Applied, thanks.


From angelogioacchino.delregno at collabora.com  Mon Dec 12 03:15:34 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 12 Dec 2022 12:15:34 +0100
Subject: [PATCH] wifi: mt76: mt7921: resource leaks at
 mt7921_check_offload_capability()
In-Reply-To: <1670540517-21517-1-git-send-email-sean.wang@mediatek.com>
References: <1670540517-21517-1-git-send-email-sean.wang@mediatek.com>
Message-ID: <c2c71a7c-065a-2720-ac1d-8f27af2a723f@collabora.com>

Il 09/12/22 00:01, sean.wang at mediatek.com ha scritto:
> From: Sean Wang <sean.wang at mediatek.com>
> 
> Fixed coverity issue with resource leaks at variable "fw" going out of
> scope leaks the storage it points to mt7921_check_offload_capability().
> 
> Reported-by: coverity-bot <keescook+coverity-bot at chromium.org>
> Addresses-Coverity-ID: 1527806 ("Resource leaks")
> Fixes: 034ae28b56f1 ("wifi: mt76: mt7921: introduce remain_on_channel support")
> Signed-off-by: Sean Wang <sean.wang at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From Trevor.Wu at mediatek.com  Mon Dec 12 07:34:45 2022
From: Trevor.Wu at mediatek.com (=?utf-8?B?VHJldm9yIFd1ICjlkLPmlofoia8p?=)
Date: Mon, 12 Dec 2022 15:34:45 +0000
Subject: [PATCH v3 12/12] dt-bindings: mediatek: mt8188: add mt8188-mt6359
 document
In-Reply-To: <6350def8-bb1f-8aeb-4c98-4d02a4c59aed@linaro.org>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
	 <20221208033148.21866-13-trevor.wu@mediatek.com>
	 <6350def8-bb1f-8aeb-4c98-4d02a4c59aed@linaro.org>
Message-ID: <aeb2bbac8ad5ede2396408a20ff8c8942029451a.camel@mediatek.com>

On Fri, 2022-12-09 at 11:18 +0100, Krzysztof Kozlowski wrote:
> On 08/12/2022 04:31, Trevor Wu wrote:
> > Add document for mt8188 board with mt6359.
> > 
> > Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
> > ---
> >  .../bindings/sound/mt8188-mt6359.yaml         | 60
> > +++++++++++++++++++
> >  1 file changed, 60 insertions(+)
> >  create mode 100644 Documentation/devicetree/bindings/sound/mt8188-
> > mt6359.yaml
> > 
> > diff --git a/Documentation/devicetree/bindings/sound/mt8188-
> > mt6359.yaml b/Documentation/devicetree/bindings/sound/mt8188-
> > mt6359.yaml
> > new file mode 100644
> > index 000000000000..eac1c87b693a
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/sound/mt8188-mt6359.yaml
> 
> Missing vendor prefix. You got comments for it already.
Hi Krzysztof,

I will correct it in V4.

> 
> > @@ -0,0 +1,60 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: 
> > https://urldefense.com/v3/__http://devicetree.org/schemas/sound/mt8188-mt6359.yaml*__;Iw!!CTRNKA9wMg0ARbw!nw_OzBIRlXrEP6K_EtxEWAIZzuvnD3Dm_KDuv8gpLRqlnnSfVLksNfKqMmeYiFlEVVy6F2BXwmXB8oQkDPeBuEXMtfLX2w$?
> >  
> > +$schema: 
> > https://urldefense.com/v3/__http://devicetree.org/meta-schemas/core.yaml*__;Iw!!CTRNKA9wMg0ARbw!nw_OzBIRlXrEP6K_EtxEWAIZzuvnD3Dm_KDuv8gpLRqlnnSfVLksNfKqMmeYiFlEVVy6F2BXwmXB8oQkDPeBuEXodFoCJA$?
> >  
> > +
> > +title: MediaTek MT8188 ASoC sound card
> > +
> > +maintainers:
> > +  - Trevor Wu <trevor.wu at mediatek.com>
> > +
> > +properties:
> > +  compatible:
> > +    const: mediatek,mt8188-mt6359-evb
> > +
> > +  model:
> > +    $ref: /schemas/types.yaml#/definitions/string
> > +    description: User specified audio sound card name
> > +
> > +  audio-routing:
> > +    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
> > +    description:
> > +      A list of the connections between audio components. Each
> > entry is a
> > +      sink/source pair of strings. Valid names could be the input
> > or output
> > +      widgets of audio components, power supplies, MicBias of
> > codec and the
> > +      software switch.
> > +
> > +  mediatek,platform:
> > +    $ref: /schemas/types.yaml#/definitions/phandle
> > +    description: The phandle of MT8188 ASoC platform.
> > +
> > +  mediatek,dptx-codec:
> > +    $ref: /schemas/types.yaml#/definitions/phandle
> > +    description: The phandle of MT8188 Display Port Tx codec node.
> > +
> > +  mediatek,hdmi-codec:
> > +    $ref: /schemas/types.yaml#/definitions/phandle
> > +    description: The phandle of MT8188 HDMI codec node.
> 
> Why you do not use DAI links for all these?

Are the following examples "DAI links" you mean?

hdmi-dai-link {
            link-name = "HDMI Playback";
            cpu {
                sound-dai = <&q6afedai TERTIARY_MI2S_RX>;
            };

            platform {
                sound-dai = <&q6routing>;
            };

            codec {
                sound-dai = <&lt9611_codec 0>;
            };
        };

or

headset-codec {
		sound-dai = <&rt5682s>;
};


As far as I know, only "mediatek,platform" was used at the beginning.
Next, hdmi-codec was introduced, and it followed the same style to get
phandle. Finally, it became three properties in mt8195, and the
implementation of mt8188 was inherited from mt8195.

I just glanced over the usage of dai links.
As I see it, I will replace the codec parts with dai link structure
like the example above first. It seems to be easier to extend more
codecs with the same tyle.

For platform part, I need more time to check if it is better to keep
the original implementation, because we still have to take SOF related 
implementation into consideration.


> 
> > +
> > +additionalProperties: false
> > +
> > +required:
> > +  - compatible
> > +  - mediatek,platform
> > +
> > +examples:
> > +  - |
> > +
> 
> Drop blank line.
> 
OK, I will fix it in V4.

> > +    sound: mt8188-sound {
> 
> Drop label, not used. Use generic node names, so just "sound".
> 
OK, I will fix it in V4.

Thanks,
Trevor

> > +        compatible = "mediatek,mt8188-mt6359-evb";
> 
> Best regards,
> Krzysztof
> 

From robh at kernel.org  Mon Dec 12 08:51:47 2022
From: robh at kernel.org (Rob Herring)
Date: Mon, 12 Dec 2022 10:51:47 -0600
Subject: [PATCH v5 net-next 04/10] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <c1e40b58-4459-2929-64f3-3e20f36f6947@arinc9.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-5-colin.foster@in-advantage.com>
 <1df417b5-a924-33d4-a302-eb526f7124b4@arinc9.com>
 <Y5TJw+zcEDf2ItZ5@euler>
 <c1e40b58-4459-2929-64f3-3e20f36f6947@arinc9.com>
Message-ID: <20221212165147.GA1092706-robh@kernel.org>

On Mon, Dec 12, 2022 at 12:28:06PM +0300, Ar?n? ?NAL wrote:
> On 10.12.2022 21:02, Colin Foster wrote:
> > Hi Ar?n?,
> > On Sat, Dec 10, 2022 at 07:24:42PM +0300, Ar?n? ?NAL wrote:
> > > On 10.12.2022 06:30, Colin Foster wrote:
> > > > DSA a/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> > > > +++ b/Documentation/devicetree/bindings/net/dsa/dsa.yaml
> > > > @@ -58,4 +58,26 @@ oneOf:
> > > >    additionalProperties: true
> > > > +$defs:
> > > > +  ethernet-ports:
> > > > +    description: A DSA switch without any extra port properties
> > > > +    $ref: '#/'
> > > > +
> > > > +    patternProperties:
> > > > +      "^(ethernet-)?ports$":
> > > > +        type: object
> > > > +        additionalProperties: false
> > > > +
> > > > +        properties:
> > > > +          '#address-cells':
> > > > +            const: 1
> > > > +          '#size-cells':
> > > > +            const: 0
> > > > +
> > > > +        patternProperties:
> > > > +          "^(ethernet-)?port@[0-9]+$":
> > > > +            description: Ethernet switch ports
> > > > +            $ref: dsa-port.yaml#
> > > > +            unevaluatedProperties: false
> > > 
> > > I've got moderate experience in json-schema but shouldn't you put 'type:
> > > object' here like you did for "^(ethernet-)?ports$"?
> > 
> > I can't say for sure, but adding "type: object" here and removing it
> > from mediatek,mt7530.yaml still causes the same issue I mention below.
> > 
> > Rob's initial suggestion for this patch set (which was basically the
> > entire implementation... many thanks again Rob) can be found here:
> > https://lore.kernel.org/netdev/20221104200212.GA2315642-robh at kernel.org/
> > 
> >  From what I can tell, the omission of "type: object" here was
> > intentional. At the very least, it doesn't seem to have any effect on
> > warnings.
> > 
> > > 
> > > > +
> > > >    ...
> > > > diff --git a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> > > > index 73b774eadd0b..748ef9983ce2 100644
> > > > --- a/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> > > > +++ b/Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml
> > > > @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
> > > >    title: Hirschmann Hellcreek TSN Switch Device Tree Bindings
> > > >    allOf:
> > > > -  - $ref: dsa.yaml#
> > > > +  - $ref: dsa.yaml#/$defs/ethernet-ports
> > > >    maintainers:
> > > >      - Andrew Lunn <andrew at lunn.ch>
> > > > diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> > > > index f2e9ff3f580b..20312f5d1944 100644
> > > > --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> > > > +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> > > > @@ -157,9 +157,6 @@ patternProperties:
> > > >        patternProperties:
> > > >          "^(ethernet-)?port@[0-9]+$":
> > > >            type: object
> > > 
> > > This line was being removed on the previous version. Must be related to
> > > above.
> > 
> > Without the 'object' type here, I get the following warning:
> > 
> > Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml: patternProperties:^(ethernet-)?ports$:patternProperties:^(ethernet-)?port@[0-9]+$: 'anyOf' conditional failed, one must be fixed:
> >          'type' is a required property
> >          '$ref' is a required property
> >          hint: node schemas must have a type or $ref
> >          from schema $id: http://devicetree.org/meta-schemas/core.yaml#
> > ./Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml: Error in referenced schema matching $id: http://devicetree.org/schemas/net/dsa/mediatek,mt7530.yaml
> >    SCHEMA  Documentation/devicetree/bindings/processed-schema.json
> > /home/colin/src/work/linux_vsc/linux-imx/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml: ignoring, error in schema: patternProperties: ^(ethernet-)?ports$: patternProperties: ^(ethernet-)?port@[0-9]+$

Is the above warning not clear? We require either 'type' or a $ref to 
define nodes as json-schema objects.


> > I'm testing this now and I'm noticing something is going on with the
> > "ref: dsa-port.yaml"
> > 
> > 
> > Everything seems to work fine (in that I don't see any warnings) when I
> > have this diff:
> > 
> > 
> > diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> > index 20312f5d1944..db0122020f98 100644
> > --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> > +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yam
> > @@ -156,8 +156,7 @@ patternProperties:
> > 
> >       patternProperties:
> >         "^(ethernet-)?port@[0-9]+$":
> > -        type: object
> > -
> > +        $ref: dsa-port.yaml#
> >           properties:
> >             reg:
> >               description:
> > @@ -165,7 +164,6 @@ patternProperties:
> >                 for user ports.
> > 
> >           allOf:
> > -          - $ref: dsa-port.yaml#
> >             - if:
> >                 required: [ ethernet ]
> >               then:
> > 
> > 
> > 
> > This one has me [still] scratching my head...
> 
> Right there with you. In addition to this, having or deleting type object
> on/from "^(ethernet-)?ports$" and "^(ethernet-)?port@[0-9]+$" on dsa.yaml
> doesn't cause any warnings (checked with make dt_binding_check
> DT_SCHEMA_FILES=net/dsa) which makes me question why it's there in the first
> place.


That check probably doesn't consider an ref being under an 'allOf'. 
Perhaps what is missing in understanding is every schema at the 
top-level has an implicit 'type: object'. But nothing is ever implicit 
in json-schema which will silently ignore keywords which don't make 
sense for an instance type. Instead of a bunch of boilerplate, the 
processed schema has 'type' added in lots of cases such as this one.

Rob


From robh at kernel.org  Mon Dec 12 09:13:33 2022
From: robh at kernel.org (Rob Herring)
Date: Mon, 12 Dec 2022 11:13:33 -0600
Subject: [PATCH v5 net-next 01/10] dt-bindings: dsa: sync with maintainers
In-Reply-To: <20221210033033.662553-2-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-2-colin.foster@in-advantage.com>
Message-ID: <167086521259.1147694.13128574954492521303.robh@kernel.org>


On Fri, 09 Dec 2022 19:30:24 -0800, Colin Foster wrote:
> The MAINTAINERS file has Andrew Lunn, Florian Fainelli, and Vladimir Oltean
> listed as the maintainers for generic dsa bindings. Update dsa.yaml and
> dsa-port.yaml accordingly.
> 
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> 
> ---
> 
> v5
>   * New patch
> 
> ---
>  Documentation/devicetree/bindings/net/dsa/dsa-port.yaml | 2 +-
>  Documentation/devicetree/bindings/net/dsa/dsa.yaml      | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 

Acked-by: Rob Herring <robh at kernel.org>


From kuba at kernel.org  Mon Dec 12 10:29:58 2022
From: kuba at kernel.org (Jakub Kicinski)
Date: Mon, 12 Dec 2022 10:29:58 -0800
Subject: [PATCH v5 net-next 00/10] dt-binding preparation for ocelot
 switches
In-Reply-To: <20221210033033.662553-1-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
Message-ID: <20221212102958.0948b360@kernel.org>

On Fri,  9 Dec 2022 19:30:23 -0800 Colin Foster wrote:
> Ocelot switches have the abilitiy to be used internally via
> memory-mapped IO or externally via SPI or PCIe. This brings up issues
> for documentation, where the same chip might be accessed internally in a
> switchdev manner, or externally in a DSA configuration. This patch set
> is perparation to bring DSA functionality to the VSC7512, utilizing as
> much as possible with an almost identical VSC7514 chip.
> 
> This patch set changed quite a bit from v2, so I'll omit the background
> of how those sets came to be. Rob offered a lot of very useful guidance.
> My thanks.
> 
> At the end of the day, with this patch set, there should be a framework
> to document Ocelot switches (and any switch) in scenarios where they can
> be controlled internally (ethernet-switch) or externally (dsa-switch).

A lot of carried over review tags here, so please let me know if
there's anything that needs to be reviewed here, otherwise I'd like 
to merge the series for 6.2 by the end of the day.


From olteanv at gmail.com  Mon Dec 12 10:46:12 2022
From: olteanv at gmail.com (Vladimir Oltean)
Date: Mon, 12 Dec 2022 20:46:12 +0200
Subject: [PATCH v5 net-next 02/10] dt-bindings: net: dsa: sf2: fix
 brcm,use-bcm-hdr documentation
In-Reply-To: <20221210033033.662553-3-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-3-colin.foster@in-advantage.com>
Message-ID: <20221212184612.dyjlhxucybn6jh7m@skbuf>

On Fri, Dec 09, 2022 at 07:30:25PM -0800, Colin Foster wrote:
> The property use-bcm-hdr was documented as an entry under the ports node
> for the bcm_sf2 DSA switch. This property is actually evaluated for each
> port. Correct the documentation to match the actual behavior and properly
> reference dsa-port.yaml for additional properties of the node.
> 
> Suggested-by: Rob Herring <robh at kernel.org>
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Acked-by: Florian Fainelli <f.fainelli at gmail.com>
> Reviewed-by: Rob Herring <robh at kernel.org>
> ---

Reviewed-by: Vladimir Oltean <olteanv at gmail.com>


From olteanv at gmail.com  Mon Dec 12 10:46:46 2022
From: olteanv at gmail.com (Vladimir Oltean)
Date: Mon, 12 Dec 2022 20:46:46 +0200
Subject: [PATCH v5 net-next 03/10] dt-bindings: net: dsa: qca8k: remove
 address-cells and size-cells from switch node
In-Reply-To: <20221210033033.662553-4-colin.foster@in-advantage.com>
 <20221210033033.662553-4-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-4-colin.foster@in-advantage.com>
 <20221210033033.662553-4-colin.foster@in-advantage.com>
Message-ID: <20221212184646.cb6y7rd7g2nzekh4@skbuf>

On Fri, Dec 09, 2022 at 07:30:26PM -0800, Colin Foster wrote:
> The children of the switch node don't have a unit address, and therefore
> should not need the #address-cells or #size-cells entries. Fix the example
> schemas accordingly.
> 
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> Reviewed-by: Rob Herring <robh at kernel.org>
> ---

Reviewed-by: Vladimir Oltean <olteanv at gmail.com>


From olteanv at gmail.com  Mon Dec 12 10:48:41 2022
From: olteanv at gmail.com (Vladimir Oltean)
Date: Mon, 12 Dec 2022 20:48:41 +0200
Subject: [PATCH v5 net-next 04/10] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <20221210033033.662553-5-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-5-colin.foster@in-advantage.com>
Message-ID: <20221212184841.siswunoxmkyek2hb@skbuf>

On Fri, Dec 09, 2022 at 07:30:27PM -0800, Colin Foster wrote:
> DSA switches can fall into one of two categories: switches where all ports
> follow standard '(ethernet-)?port' properties, and switches that have
> additional properties for the ports.
> 
> The scenario where DSA ports are all standardized can be handled by
> switches with a reference to the new 'dsa.yaml#/$defs/ethernet-ports'.
> 
> The scenario where DSA ports require additional properties can reference
> '$dsa.yaml#' directly. This will allow switches to reference these standard
> definitions of the DSA switch, but add additional properties under the port
> nodes.
> 
> Suggested-by: Rob Herring <robh at kernel.org>
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Reviewed-by: Linus Walleij <linus.walleij at linaro.org>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> Reviewed-by: Rob Herring <robh at kernel.org>
> Acked-by: Alvin ?ipraga <alsi at bang-olufsen.dk> # realtek
> Acked-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
> ---

Reviewed-by: Vladimir Oltean <olteanv at gmail.com>


From olteanv at gmail.com  Mon Dec 12 10:51:32 2022
From: olteanv at gmail.com (Vladimir Oltean)
Date: Mon, 12 Dec 2022 20:51:32 +0200
Subject: [PATCH v5 net-next 05/10] dt-bindings: net: dsa: allow
 additional ethernet-port properties
In-Reply-To: <20221210033033.662553-6-colin.foster@in-advantage.com>
 <20221210033033.662553-6-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-6-colin.foster@in-advantage.com>
 <20221210033033.662553-6-colin.foster@in-advantage.com>
Message-ID: <20221212185132.x3ydeehlbqnu4hwe@skbuf>

On Fri, Dec 09, 2022 at 07:30:28PM -0800, Colin Foster wrote:
> Explicitly allow additional properties for both the ethernet-port and
> ethernet-ports properties. This specifically will allow the qca8k.yaml
> binding to use shared properties.
> 
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> Reviewed-by: Rob Herring <robh at kernel.org>
> ---

Reviewed-by: Vladimir Oltean <olteanv at gmail.com>


From olteanv at gmail.com  Mon Dec 12 10:52:49 2022
From: olteanv at gmail.com (Vladimir Oltean)
Date: Mon, 12 Dec 2022 20:52:49 +0200
Subject: [PATCH v5 net-next 06/10] dt-bindings: net: dsa: qca8k: utilize
 shared dsa.yaml
In-Reply-To: <20221210033033.662553-7-colin.foster@in-advantage.com>
 <20221210033033.662553-7-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-7-colin.foster@in-advantage.com>
 <20221210033033.662553-7-colin.foster@in-advantage.com>
Message-ID: <20221212185249.do7un6kajlzgnd63@skbuf>

On Fri, Dec 09, 2022 at 07:30:29PM -0800, Colin Foster wrote:
> The dsa.yaml binding contains duplicated bindings for address and size
> cells, as well as the reference to dsa-port.yaml. Instead of duplicating
> this information, remove the reference to dsa-port.yaml and include the
> full reference to dsa.yaml.
> 
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> Reviewed-by: Rob Herring <robh at kernel.org>
> ---

Reviewed-by: Vladimir Oltean <olteanv at gmail.com>


From olteanv at gmail.com  Mon Dec 12 10:53:27 2022
From: olteanv at gmail.com (Vladimir Oltean)
Date: Mon, 12 Dec 2022 20:53:27 +0200
Subject: [PATCH v5 net-next 07/10] dt-bindings: net: dsa:
 mediatek,mt7530: remove unnecessary dsa-port reference
In-Reply-To: <20221210033033.662553-8-colin.foster@in-advantage.com>
 <20221210033033.662553-8-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-8-colin.foster@in-advantage.com>
 <20221210033033.662553-8-colin.foster@in-advantage.com>
Message-ID: <20221212185327.kbkydi5gcrjgzwas@skbuf>

On Fri, Dec 09, 2022 at 07:30:30PM -0800, Colin Foster wrote:
> dsa.yaml contains a reference to dsa-port.yaml, so a duplicate reference to
> the binding isn't necessary. Remove this unnecessary reference.
> 
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> Reviewed-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> Reviewed-by: Rob Herring <robh at kernel.org>
> ---

Reviewed-by: Vladimir Oltean <olteanv at gmail.com>


From olteanv at gmail.com  Mon Dec 12 10:54:17 2022
From: olteanv at gmail.com (Vladimir Oltean)
Date: Mon, 12 Dec 2022 20:54:17 +0200
Subject: [PATCH v5 net-next 08/10] dt-bindings: net: add generic
 ethernet-switch
In-Reply-To: <20221210033033.662553-9-colin.foster@in-advantage.com>
 <20221210033033.662553-9-colin.foster@in-advantage.com>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-9-colin.foster@in-advantage.com>
 <20221210033033.662553-9-colin.foster@in-advantage.com>
Message-ID: <20221212185417.cyoqye5ql33aajaw@skbuf>

On Fri, Dec 09, 2022 at 07:30:31PM -0800, Colin Foster wrote:
> The dsa.yaml bindings had references that can apply to non-dsa switches. To
> prevent duplication of this information, keep the dsa-specific information
> inside dsa.yaml and move the remaining generic information to the newly
> created ethernet-switch.yaml.
> 
> Signed-off-by: Colin Foster <colin.foster at in-advantage.com>
> Suggested-by: Vladimir Oltean <olteanv at gmail.com>
> Reviewed-by: Florian Fainelli <f.fainelli at gmail.com>
> Reviewed-by: Rob Herring <robh at kernel.org>
> ---

Reviewed-by: Vladimir Oltean <olteanv at gmail.com>


From colin.foster at in-advantage.com  Mon Dec 12 10:55:19 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Mon, 12 Dec 2022 10:55:19 -0800
Subject: [PATCH v5 net-next 04/10] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <20221212165147.GA1092706-robh@kernel.org>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-5-colin.foster@in-advantage.com>
 <1df417b5-a924-33d4-a302-eb526f7124b4@arinc9.com>
 <Y5TJw+zcEDf2ItZ5@euler>
 <c1e40b58-4459-2929-64f3-3e20f36f6947@arinc9.com>
 <20221212165147.GA1092706-robh@kernel.org>
Message-ID: <Y5d5F9IODF4xhcps@COLIN-DESKTOP1.localdomain>

Hi Rob, Ar?n?,

On Mon, Dec 12, 2022 at 10:51:47AM -0600, Rob Herring wrote:
> On Mon, Dec 12, 2022 at 12:28:06PM +0300, Ar?n? ?NAL wrote:
> > On 10.12.2022 21:02, Colin Foster wrote:
> > > Hi Ar?n?,
> > > On Sat, Dec 10, 2022 at 07:24:42PM +0300, Ar?n? ?NAL wrote:
> > > > On 10.12.2022 06:30, Colin Foster wrote:
> > > --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> > > +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yam
> > > @@ -156,8 +156,7 @@ patternProperties:
> > > 
> > >       patternProperties:
> > >         "^(ethernet-)?port@[0-9]+$":
> > > -        type: object
> > > -
> > > +        $ref: dsa-port.yaml#
> > >           properties:
> > >             reg:
> > >               description:
> > > @@ -165,7 +164,6 @@ patternProperties:
> > >                 for user ports.
> > > 
> > >           allOf:
> > > -          - $ref: dsa-port.yaml#
> > >             - if:
> > >                 required: [ ethernet ]
> > >               then:
> > > 
> > > 
> > > 
> > > This one has me [still] scratching my head...
> > 
> > Right there with you. In addition to this, having or deleting type object
> > on/from "^(ethernet-)?ports$" and "^(ethernet-)?port@[0-9]+$" on dsa.yaml
> > doesn't cause any warnings (checked with make dt_binding_check
> > DT_SCHEMA_FILES=net/dsa) which makes me question why it's there in the first
> > place.
> 
> 
> That check probably doesn't consider an ref being under an 'allOf'. 
> Perhaps what is missing in understanding is every schema at the 
> top-level has an implicit 'type: object'. But nothing is ever implicit 
> in json-schema which will silently ignore keywords which don't make 
> sense for an instance type. Instead of a bunch of boilerplate, the 
> processed schema has 'type' added in lots of cases such as this one.
> 
> Rob

What do you suggest on this set? I think this is the only outstanding
issue, and Jakub brought up the possibility of applying end of today
(maybe 5-6 hours from now in the US).

It seems like there's an issue with the dt_bindings_check that causes
the "allOf: $ref" to throw a warning when it shouldn't. So removing the
"type: object" was supposed to be correct, but throws warnings.

It seems like keeping this patch as-is and updating it when the check
gets fixed might be an acceptable path, but I'd understand if you
disagree and prefer a resubmission.


From colin.foster at in-advantage.com  Mon Dec 12 11:03:09 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Mon, 12 Dec 2022 11:03:09 -0800
Subject: [PATCH v5 net-next 00/10] dt-binding preparation for ocelot
 switches
In-Reply-To: <20221212102958.0948b360@kernel.org>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221212102958.0948b360@kernel.org>
Message-ID: <Y5d67SPMc/YCr0Rq@COLIN-DESKTOP1.localdomain>

On Mon, Dec 12, 2022 at 10:29:58AM -0800, Jakub Kicinski wrote:
> On Fri,  9 Dec 2022 19:30:23 -0800 Colin Foster wrote:
> > Ocelot switches have the abilitiy to be used internally via
> > memory-mapped IO or externally via SPI or PCIe. This brings up issues
> > for documentation, where the same chip might be accessed internally in a
> > switchdev manner, or externally in a DSA configuration. This patch set
> > is perparation to bring DSA functionality to the VSC7512, utilizing as
> > much as possible with an almost identical VSC7514 chip.
> > 
> > This patch set changed quite a bit from v2, so I'll omit the background
> > of how those sets came to be. Rob offered a lot of very useful guidance.
> > My thanks.
> > 
> > At the end of the day, with this patch set, there should be a framework
> > to document Ocelot switches (and any switch) in scenarios where they can
> > be controlled internally (ethernet-switch) or externally (dsa-switch).
> 
> A lot of carried over review tags here, so please let me know if
> there's anything that needs to be reviewed here, otherwise I'd like 
> to merge the series for 6.2 by the end of the day.

I just responded to patch 4, which has a small (?) outstanding issue /
discussion. I asked Rob and Ar?n?'s opinions as to whether it should
hold up this series. Everything else is good to go, as far as I
understand.


From u.kleine-koenig at pengutronix.de  Mon Dec 12 14:25:48 2022
From: u.kleine-koenig at pengutronix.de (=?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?=)
Date: Mon, 12 Dec 2022 23:25:48 +0100
Subject: [PATCH 2/3] soc: mediatek: mutex: Drop empty platform remove function
In-Reply-To: <20221212222549.3779846-1-u.kleine-koenig@pengutronix.de>
References: <20221212222549.3779846-1-u.kleine-koenig@pengutronix.de>
Message-ID: <20221212222549.3779846-3-u.kleine-koenig@pengutronix.de>

A remove callback just returning 0 is equivalent to no remove callback
at all. So drop the useless function.

Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de>
---
 drivers/soc/mediatek/mtk-mutex.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-mutex.c b/drivers/soc/mediatek/mtk-mutex.c
index c1a33d52038e..85f7fd67d7c6 100644
--- a/drivers/soc/mediatek/mtk-mutex.c
+++ b/drivers/soc/mediatek/mtk-mutex.c
@@ -832,11 +832,6 @@ static int mtk_mutex_probe(struct platform_device *pdev)
 	return 0;
 }
 
-static int mtk_mutex_remove(struct platform_device *pdev)
-{
-	return 0;
-}
-
 static const struct of_device_id mutex_driver_dt_match[] = {
 	{ .compatible = "mediatek,mt2701-disp-mutex",
 	  .data = &mt2701_mutex_driver_data},
@@ -866,7 +861,6 @@ MODULE_DEVICE_TABLE(of, mutex_driver_dt_match);
 
 static struct platform_driver mtk_mutex_driver = {
 	.probe		= mtk_mutex_probe,
-	.remove		= mtk_mutex_remove,
 	.driver		= {
 		.name	= "mediatek-mutex",
 		.owner	= THIS_MODULE,
-- 
2.38.1



From u.kleine-koenig at pengutronix.de  Mon Dec 12 14:25:46 2022
From: u.kleine-koenig at pengutronix.de (=?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?=)
Date: Mon, 12 Dec 2022 23:25:46 +0100
Subject: [PATCH 0/3] soc: Drop empty platform remove function
Message-ID: <20221212222549.3779846-1-u.kleine-koenig@pengutronix.de>

Hello,

this patch series removes all platform remove functions that only return
zero below drivers/soc. There is no reason to have these, as the only
caller is platform core code doing:

        if (drv->remove) {
                int ret = drv->remove(dev);

                if (ret)
			dev_warn(...)
        }

(in platform_remove()) and so having no remove function is both
equivalent and simpler.

Best regards
Uwe

Uwe Kleine-K?nig (3):
  soc: bcm: bcm2835-power: Drop empty platform remove function
  soc: mediatek: mutex: Drop empty platform remove function
  soc: tegra: cbb: Drop empty platform remove function

 drivers/soc/bcm/bcm2835-power.c      | 6 ------
 drivers/soc/mediatek/mtk-mutex.c     | 6 ------
 drivers/soc/tegra/cbb/tegra234-cbb.c | 6 ------
 3 files changed, 18 deletions(-)


base-commit: 830b3c68c1fb1e9176028d02ef86f3cf76aa2476
-- 
2.38.1



From Sujuan.Chen at mediatek.com  Mon Dec 12 17:57:04 2022
From: Sujuan.Chen at mediatek.com (=?utf-8?B?U3VqdWFuIENoZW4gKOmZiOe0oOWonyk=?=)
Date: Tue, 13 Dec 2022 01:57:04 +0000
Subject: [PATCH,v2] wifi: mt76: mt7915: add wds support when wed is
 enabled
In-Reply-To: <c4f01e3e-4ae6-3d60-4fd0-b8d8bc5f4573@nbd.name>
References: <e603722d58079af98c57a3dc117274d824d1d832.1669798063.git.sujuan.chen@mediatek.com>
	 <c4f01e3e-4ae6-3d60-4fd0-b8d8bc5f4573@nbd.name>
Message-ID: <9a0fc8be12ac6c826cfceca63c76f8c86ea25a47.camel@mediatek.com>

On Fri, 2022-12-09 at 13:32 +0100, Felix Fietkau wrote:
> On 30.11.22 10:18, Sujuan Chen wrote:
> > The current WED only supports 256 wcid, whereas mt7986 can support
> > up to 512 entries,
> > so firmware provides a rule to get sta_info by DA when wcid is set
> > to 0x3ff by txd.
> > Also, WED provides a register to overwrite txd wcid, that is,
> > wcid[9:8] can
> > be overwritten by 0x3 and wcid[7:0] is set to 0xff by host driver.
> > 
> > However, firmware is unable to get sta_info from DA as DA != RA for
> > 4addr cases,
> > so firmware and wifi host driver both use wcid (256 - 271) and (768
> > ~ 783)
> > for sync up to get correct sta_info
> > 
> > Tested-by: Sujuan Chen <sujuan.chen at mediatek.com>
> > Co-developed-by: Bo Jiao <bo.jiao at mediatek.com>
> > Signed-off-by: Bo Jiao <bo.jiao at mediatek.com>
> > Signed-off-by: Sujuan Chen <sujuan.chen at mediatek.com>
> > ---
> > v2:
> >   - drop duplicate settings
> >   - reduce the patch size by redefining mt76_wcid_alloc
> > ---
> >   drivers/net/wireless/mediatek/mt76/mt76.h     |  6 +++
> >   .../net/wireless/mediatek/mt76/mt7915/main.c  | 24 +++++++++--
> >   .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 13 +++++-
> >   .../net/wireless/mediatek/mt76/mt7915/mcu.h   |  1 +
> >   drivers/net/wireless/mediatek/mt76/util.c     | 40
> > +++++++++++++++++--
> >   drivers/net/wireless/mediatek/mt76/util.h     |  7 +++-
> >   6 files changed, 82 insertions(+), 9 deletions(-)
> > 
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
> > b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
> > index c40b6098f19a..46a9e4f0396e 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
> > @@ -1115,6 +1122,13 @@ static void mt7915_sta_set_4addr(struct
> > ieee80211_hw *hw,
> >   	else
> >   		clear_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags);
> >   
> > +	if (mtk_wed_device_active(&dev->mt76.mmio.wed) &&
> > +	    !is_mt7915(&dev->mt76)) {
> > +		mt7915_sta_remove(hw, vif, sta);
> > +		mt76_sta_pre_rcu_remove(hw, vif, sta);
> > +		mt7915_sta_add(hw, vif, sta);
> > +	}
> > +
> >   	mt76_connac_mcu_wtbl_update_hdr_trans(&dev->mt76, vif, sta);
> >   }
> >   
> 
> I suspect that this may a bit racy if there is concurrent tx
> activity 
> (e.g. for EAP auth). Not sure if this could cause problems for the 
> firmware or other kinds of bugs.
> 
> While my idea may need some rework of the existing functions, I think
> a 
> better flow would be:
> 
> 1. mt76_sta_pre_rcu_remove
> 2. save old wcid
> 3. mt7915_sta_add
> 4. synchronize_rcu()
> 5. remove firmware state for old wcid entry
> 
> - Felix

Hi Felix,

Can we modify it like this:

1. pre_sta = kzalloc(sizeof(*sta) + sizeof(*msta), GFP_KERNEL);
2. mt76_sta_pre_rcu_remove
3. memmove(old_sta, sta, sizeof(*sta) + sizeof(*msta))
4. mt7915_sta_add
5. synchronize_rcu()
6. mt7915_sta_remove(hw, vif, pre_sta)
7. kfree(pre_sta)

we can reuse mt7915_sta_remove and keep the sta info for 
mt7915_mcu_add_sta.

if save old wcid only, we need to rework __mt76_sta_remove and
mt7915_mcu_add_sta functions by add wcid as parameter.
__mt76_sta_remove is required to delete a wcid, right?

-sujuan


From kuba at kernel.org  Mon Dec 12 19:34:47 2022
From: kuba at kernel.org (Jakub Kicinski)
Date: Mon, 12 Dec 2022 19:34:47 -0800
Subject: [PATCH v5 net-next 00/10] dt-binding preparation for ocelot
 switches
In-Reply-To: <Y5d67SPMc/YCr0Rq@COLIN-DESKTOP1.localdomain>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
	<20221212102958.0948b360@kernel.org>
	<Y5d67SPMc/YCr0Rq@COLIN-DESKTOP1.localdomain>
Message-ID: <20221212193447.0a69325e@kernel.org>

On Mon, 12 Dec 2022 11:03:09 -0800 Colin Foster wrote:
> > A lot of carried over review tags here, so please let me know if
> > there's anything that needs to be reviewed here, otherwise I'd like 
> > to merge the series for 6.2 by the end of the day.  
> 
> I just responded to patch 4, which has a small (?) outstanding issue /
> discussion. I asked Rob and Ar?n?'s opinions as to whether it should
> hold up this series. Everything else is good to go, as far as I
> understand.

No reply :( Since this is "just" DT bindings (as in shouldn't
functionally break anything) - if Rob gives us a green light
we can still pull it into the mid-merge window follow up.
But I'll drop it from pw for now so it doesn't distract us.


From daniel at makrotopia.org  Mon Dec 12 20:07:35 2022
From: daniel at makrotopia.org (Daniel Golle)
Date: Tue, 13 Dec 2022 04:07:35 +0000
Subject: [PATCH net-next] net: dsa: mt7530: remove reduntant assignment
In-Reply-To: <Y5b/Tm4GwPGzd9sR@shell.armlinux.org.uk>
References: <Y5b/Tm4GwPGzd9sR@shell.armlinux.org.uk>
Message-ID: <Y5f6h8q7rlnk1jnD@makrotopia.org>

Russell King correctly pointed out that the MAC_2500FD capability is
already added for port 5 (if not in RGMII mode) and port 6 (which only
supports SGMII) by mt7531_mac_port_get_caps. Remove the reduntant
setting of this capability flag which was added by a previous commit.

Fixes: e19de30d20 ("net: dsa: mt7530: add support for in-band link status")
Reported-by: Russell King <linux at armlinux.org.uk>
Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
 drivers/net/dsa/mt7530.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
index e74c6b406172..908fa89444c9 100644
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2919,9 +2919,6 @@ static void mt753x_phylink_get_caps(struct dsa_switch *ds, int port,
 	config->mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
 				   MAC_10 | MAC_100 | MAC_1000FD;
 
-	if ((priv->id == ID_MT7531) && mt753x_is_mac_port(port))
-		config->mac_capabilities |= MAC_2500FD;
-
 	/* This driver does not make use of the speed, duplex, pause or the
 	 * advertisement in its mac_config, so it is safe to mark this driver
 	 * as non-legacy.
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Tue Dec 13 01:09:54 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 10:09:54 +0100
Subject: [PATCH 1/5] media: mediatek: vcodec: add params to record lat and
 core lat_buf count
In-Reply-To: <20221210073218.17350-2-yunfei.dong@mediatek.com>
References: <20221210073218.17350-1-yunfei.dong@mediatek.com>
 <20221210073218.17350-2-yunfei.dong@mediatek.com>
Message-ID: <7e668b90-e3e6-5d25-e894-f754662405af@collabora.com>

Il 10/12/22 08:32, Yunfei Dong ha scritto:
> Using lat_buf to share decoder information between lat and core work
> queue, adding params to record the buf count.
> 
> Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
> ---
>   .../platform/mediatek/vcodec/vdec_msg_queue.c | 32 ++++++++++++++++++-
>   .../platform/mediatek/vcodec/vdec_msg_queue.h |  9 ++++++
>   2 files changed, 40 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
> index dc2004790a47..af7ddba1923a 100644
> --- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
> +++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
> @@ -52,6 +52,30 @@ static struct list_head *vdec_get_buf_list(int hardware_index, struct vdec_lat_b
>   	}
>   }
>   
> +static void vdec_msg_queue_inc(struct vdec_msg_queue *msg_queue, int hardware_index)
> +{
> +	mutex_lock(&msg_queue->list_cnt_mutex);

I doubt that you need to use this mutex, as you're using atomics...

> +
> +	if (hardware_index == MTK_VDEC_CORE)
> +		atomic_inc(&msg_queue->core_list_cnt);
> +	else
> +		atomic_inc(&msg_queue->lat_list_cnt);
> +

This branch (with the relevant appropriate changes) can be simplified as

	atomic_inc(&msg_queue->list_cnt[hardware_index]);

...where list_cnt is an array, and hardware_index is an enumeration.	

> +	mutex_unlock(&msg_queue->list_cnt_mutex);
> +}
> +
> +static void vdec_msg_queue_dec(struct vdec_msg_queue *msg_queue, int hardware_index)
> +{
> +	mutex_lock(&msg_queue->list_cnt_mutex);
> +
> +	if (hardware_index == MTK_VDEC_CORE)
> +		atomic_dec(&msg_queue->core_list_cnt);
> +	else
> +		atomic_dec(&msg_queue->lat_list_cnt);

Same here.

> +
> +	mutex_unlock(&msg_queue->list_cnt_mutex);
> +}
> +

Regards,
Angelo



From adam.charachuta at lokoho.com  Tue Dec 13 01:17:13 2022
From: adam.charachuta at lokoho.com (Adam Charachuta)
Date: Tue, 13 Dec 2022 09:17:13 GMT
Subject: =?UTF-8?Q?S=C5=82owa_kluczowe_do_wypozycjonowania?=
Message-ID: <20221213074501-0.1.2s.95yf.0.phc5xhmxih@lokoho.com>

Dzie? dobry,

zapozna?em si? z Pa?stwa ofert? i z przyjemno?ci? przyznaj?, ?e przyci?ga uwag? i zach?ca do dalszych rozm?w. 

Pomy?la?em, ?e mo?e m?g?bym mie? sw?j wk?ad w Pa?stwa rozw?j i pom?c dotrze? z t? ofert? do wi?kszego grona odbiorc?w. Pozycjonuj? strony www, dzi?ki czemu generuj? ?wietny ruch w sieci.

Mo?emy porozmawia? w najbli?szym czasie?


Pozdrawiam
Adam Charachuta


From angelogioacchino.delregno at collabora.com  Tue Dec 13 01:23:21 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 10:23:21 +0100
Subject: [PATCH 3/5] media: mediatek: vcodec: move lat_buf to the top of
 core list
In-Reply-To: <20221210073218.17350-4-yunfei.dong@mediatek.com>
References: <20221210073218.17350-1-yunfei.dong@mediatek.com>
 <20221210073218.17350-4-yunfei.dong@mediatek.com>
Message-ID: <a48dec82-5944-ff3d-8e0d-dc0b58139c83@collabora.com>

Il 10/12/22 08:32, Yunfei Dong ha scritto:
> Current instance will decode done when begin to wait lat buf full,
> move the lat_buf of current instance to the top of core list to make
> sure current instance's lat_buf will be used firstly.
> 
> Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
> ---
>   .../platform/mediatek/vcodec/vdec_msg_queue.c    | 16 ++++++++++++++++
>   .../platform/mediatek/vcodec/vdec_msg_queue.h    |  2 ++
>   2 files changed, 18 insertions(+)
> 
> diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
> index 2b88065d4d2a..6275536d5063 100644
> --- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
> +++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
> @@ -182,9 +182,24 @@ void vdec_msg_queue_update_ube_wptr(struct vdec_msg_queue *msg_queue, uint64_t u
>   
>   bool vdec_msg_queue_wait_lat_buf_full(struct vdec_msg_queue *msg_queue)
>   {
> +	struct vdec_lat_buf *buf, *tmp;
> +	struct vdec_msg_queue_ctx *core_ctx;
>   	long timeout_jiff;
>   	int ret;
>   
> +	core_ctx = &msg_queue->ctx->dev->msg_queue_core_ctx;
> +	spin_lock(&core_ctx->ready_lock);
> +	list_for_each_entry_safe(buf, tmp, &core_ctx->ready_queue, core_list) {
> +		if (buf && buf->ctx == msg_queue->ctx) {
> +			spin_lock(&msg_queue->lat_ctx.ready_lock);
> +			list_move(&buf->core_list, &core_ctx->ready_queue);
> +			spin_unlock(&msg_queue->lat_ctx.ready_lock);
> +			queue_work(buf->ctx->dev->core_workqueue,
> +				   &buf->ctx->msg_queue.core_work);
> +		}
> +	}
> +	spin_unlock(&core_ctx->ready_lock);
> +
>   	timeout_jiff = msecs_to_jiffies(1000 * (NUM_BUFFER_COUNT + 2));
>   	ret = wait_event_timeout(msg_queue->lat_ctx.ready_to_use,
>   				 msg_queue->lat_ctx.ready_num == NUM_BUFFER_COUNT,
> @@ -268,6 +283,7 @@ int vdec_msg_queue_init(struct vdec_msg_queue *msg_queue,
>   	vdec_msg_queue_init_ctx(&msg_queue->lat_ctx, MTK_VDEC_LAT0);
>   	INIT_WORK(&msg_queue->core_work, vdec_msg_queue_core_work);
>   
> +	msg_queue->ctx = ctx;

I'd move that at the beginning of this function, even before calling
vdec_msg_queue_init_ctx(), as this assignment is not at all expensive.

In any case,

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>


From angelogioacchino.delregno at collabora.com  Tue Dec 13 01:36:52 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 10:36:52 +0100
Subject: [PATCH v4 3/9] mtd: nand: ecc-mtk: Add ECC support fot MT7986 IC
In-Reply-To: <20221209064317.2828-4-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
 <20221209064317.2828-4-xiangsheng.hou@mediatek.com>
Message-ID: <e518539d-6573-85ae-e69c-6c5318e367fa@collabora.com>

Il 09/12/22 07:43, Xiangsheng Hou ha scritto:
> Add ECC support fot MT7986 IC, and change err_mask value with
> GENMASK macro.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>



From angelogioacchino.delregno at collabora.com  Tue Dec 13 01:37:58 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 10:37:58 +0100
Subject: [PATCH v4 4/9] dt-bindings: spi: mtk-snfi: Add compatible for
 MT7986
In-Reply-To: <20221209064317.2828-5-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
 <20221209064317.2828-5-xiangsheng.hou@mediatek.com>
Message-ID: <ce3350c4-9c43-9fa6-9aaf-a119b700778b@collabora.com>

Il 09/12/22 07:43, Xiangsheng Hou ha scritto:
> Add dt-bindings documentation of SPI NAND controller
> for MediaTek MT7986 SoC platform. And add optional
> nfi_hclk property which is needed for MT7986.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 13 01:38:52 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 10:38:52 +0100
Subject: [PATCH v4 6/9] dt-bindings: spi: mtk-snfi: Add read latch latency
 property
In-Reply-To: <20221209064317.2828-7-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
 <20221209064317.2828-7-xiangsheng.hou@mediatek.com>
Message-ID: <fc668f1e-3d04-29db-a761-73b9d7830381@collabora.com>

Il 09/12/22 07:43, Xiangsheng Hou ha scritto:
> Add mediatek,rx-latch-latency-ns property which adjust data read
> latch latency in the unit of nanoseconds.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>



From angelogioacchino.delregno at collabora.com  Tue Dec 13 01:42:56 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 10:42:56 +0100
Subject: [PATCH v4 8/9] arm/arm64: dts: mediatek: Fix existing NAND
 controller node name
In-Reply-To: <20221209064317.2828-9-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
 <20221209064317.2828-9-xiangsheng.hou@mediatek.com>
Message-ID: <3729df62-8d39-db47-0b57-2bef37cc5830@collabora.com>

Il 09/12/22 07:43, Xiangsheng Hou ha scritto:
> Change the existing node name in order to match NAND controller DT
> bindings.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> ---
>   arch/arm/boot/dts/mt2701.dtsi             | 2 +-
>   arch/arm64/boot/dts/mediatek/mt2712e.dtsi | 2 +-
>   arch/arm64/boot/dts/mediatek/mt7622.dtsi  | 2 +-
>   3 files changed, 3 insertions(+), 3 deletions(-)
> 

Splitting this in two commits, one for ARM and one for ARM64 would probably
be better, but since I don't have strong opinions on that...

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 13 01:50:18 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 10:50:18 +0100
Subject: [PATCH 2/3] soc: mediatek: mutex: Drop empty platform remove
 function
In-Reply-To: <20221212222549.3779846-3-u.kleine-koenig@pengutronix.de>
References: <20221212222549.3779846-1-u.kleine-koenig@pengutronix.de>
 <20221212222549.3779846-3-u.kleine-koenig@pengutronix.de>
Message-ID: <0670a966-2449-977d-a791-4b1c4478524b@collabora.com>

Il 12/12/22 23:25, Uwe Kleine-K?nig ha scritto:
> A remove callback just returning 0 is equivalent to no remove callback
> at all. So drop the useless function.
> 
> Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de>

Totally agree.

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>



From angelogioacchino.delregno at collabora.com  Tue Dec 13 02:45:22 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 11:45:22 +0100
Subject: [PATCH v3 04/12] ASoC: mediatek: mt8188: support adda in platform
 driver
In-Reply-To: <20221208033148.21866-5-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
 <20221208033148.21866-5-trevor.wu@mediatek.com>
Message-ID: <ff9ba731-8d17-b98c-5b24-4ff831f6aba0@collabora.com>

Il 08/12/22 04:31, Trevor Wu ha scritto:
> Add mt8188 adda dai driver support.
> 
> Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

> ---
> I don't add Reviewed-by tag because one new header file is included
> in the patch to resolve compiling issue found by kernel test robot.
> ---
>   sound/soc/mediatek/mt8188/mt8188-dai-adda.c | 632 ++++++++++++++++++++
>   1 file changed, 632 insertions(+)
>   create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-adda.c



From angelogioacchino.delregno at collabora.com  Tue Dec 13 02:45:27 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 11:45:27 +0100
Subject: [PATCH v3 02/12] ASoC: mediatek: mt8188: add common header
In-Reply-To: <20221208033148.21866-3-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
 <20221208033148.21866-3-trevor.wu@mediatek.com>
Message-ID: <476ac247-011a-caab-a7c2-b167ebb57916@collabora.com>

Il 08/12/22 04:31, Trevor Wu ha scritto:
> Add header files for register definition and structure.
> 
> Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 13 02:45:24 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 11:45:24 +0100
Subject: [PATCH v3 03/12] ASoC: mediatek: mt8188: support audsys clock
In-Reply-To: <20221208033148.21866-4-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
 <20221208033148.21866-4-trevor.wu@mediatek.com>
Message-ID: <4c26f044-de7d-26dd-65c0-7db484e4df49@collabora.com>

Il 08/12/22 04:31, Trevor Wu ha scritto:
> Add mt8188 audio cg clock control. Audio clock gates are registered to CCF
> for reference count and clock parent management.
> 
> Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 13 02:45:29 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 11:45:29 +0100
Subject: [PATCH v3 01/12] ASoC: mediatek: common: add SMC ops and SMC CMD
In-Reply-To: <20221208033148.21866-2-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
 <20221208033148.21866-2-trevor.wu@mediatek.com>
Message-ID: <6ffe412f-2921-160e-068f-cf567e9a0738@collabora.com>

Il 08/12/22 04:31, Trevor Wu ha scritto:
> SMC call is required to communicate with ATF for some secure operations,
> so we add SMC ops IDs and SMC CMD ID to common header.
> 
> Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 13 02:45:32 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 11:45:32 +0100
Subject: [PATCH v3 05/12] ASoC: mediatek: mt8188: support etdm in platform
 driver
In-Reply-To: <20221208033148.21866-6-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
 <20221208033148.21866-6-trevor.wu@mediatek.com>
Message-ID: <869cfa5a-2cfa-e5b7-b8f5-a79b9b364b25@collabora.com>

Il 08/12/22 04:31, Trevor Wu ha scritto:
> Add mt8188 etdm dai driver support.
> 
> Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
> ---
> I don't add Reviewed-by tag because one new header file is included
> in the patch to resolve compiling issue found by kernel test robot.
> Additionally, I re-layout the code for better understanding of the
> follow-up patch.
> ---
>   sound/soc/mediatek/mt8188/mt8188-dai-etdm.c | 2591 +++++++++++++++++++
>   1 file changed, 2591 insertions(+)
>   create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
> 
> diff --git a/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c b/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
> new file mode 100644
> index 000000000000..c653fa5e3f85
> --- /dev/null
> +++ b/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c

..snip..

> +
> +static void mt8188_dai_etdm_parse_of(struct mtk_base_afe *afe)
> +{
> +	const struct device_node *of_node = afe->dev->of_node;
> +	struct mt8188_afe_private *afe_priv = afe->platform_priv;
> +	struct mtk_dai_etdm_priv *etdm_data;
> +	int i, j;
> +	char prop[48];
> +	u8 disable_chn[MT8188_ETDM_MAX_CHANNELS];
> +	int max_chn = MT8188_ETDM_MAX_CHANNELS;
> +	u32 sel;
> +	int ret;
> +	int dai_id;
> +	unsigned int sync_id;
> +	struct {
> +		const char *name;
> +		const unsigned int sync_id;
> +	} of_afe_etdms[MT8188_AFE_IO_ETDM_NUM] = {
> +		{"etdm-in1", ETDM_SYNC_FROM_IN1},
> +		{"etdm-in2", ETDM_SYNC_FROM_IN2},
> +		{"etdm-out1", ETDM_SYNC_FROM_OUT1},
> +		{"etdm-out2", ETDM_SYNC_FROM_OUT2},
> +		{"etdm-out3", ETDM_SYNC_FROM_OUT3},
> +	};
> +
> +	for (i = 0; i < MT8188_AFE_IO_ETDM_NUM; i++) {
> +		dai_id = ETDM_TO_DAI_ID(i);
> +		etdm_data = afe_priv->dai_priv[dai_id];
> +
> +		ret = snprintf(prop, sizeof(prop),
> +			       "mediatek,%s-mclk-always-on-rate",
> +			       of_afe_etdms[i].name);
> +		if (ret < 0) {
> +			dev_info(afe->dev, "%s snprintf err=%d\n",

Is this property optional? If yes, this dev_info() must be a dev_dbg(),
otherwise, this must be a dev_err().

Please fix all prints to use the right message level.

> +				 __func__, ret);
> +			return;

Also, is it possible to specify this property only on selected eTDMs?

As it is right now, if anyone wants to specify this only on, for example,
etdm-out1 and out2, that won't work.
In that case, you should replace that return with a `continue`.

P.S.: I'm raising this question because you're not forcing "all or nothing"
       in commit [10/12] where you introduce the bindings for this driver,
       so I suppose that returning (hence stopping to parse) is a mistake.

> +		}
> +		ret = of_property_read_u32(of_node, prop, &sel);
> +		if (ret == 0) {
> +			etdm_data->mclk_dir = SND_SOC_CLOCK_OUT;
> +			if (mtk_dai_etdm_cal_mclk(afe, sel, dai_id))
> +				dev_info(afe->dev, "%s unsupported mclk %uHz\n",
> +					 __func__, sel);
> +		}
> +


Regards,
Angelo



From angelogioacchino.delregno at collabora.com  Tue Dec 13 02:49:43 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 11:49:43 +0100
Subject: [PATCH v3 06/12] ASoC: mediatek: mt8188: support pcmif in
 platform driver
In-Reply-To: <20221208033148.21866-7-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
 <20221208033148.21866-7-trevor.wu@mediatek.com>
Message-ID: <1dbda175-e312-52ec-d139-39cc1856be21@collabora.com>

Il 08/12/22 04:31, Trevor Wu ha scritto:
> Add mt8188 pcmif dai driver support
> 
> Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 13 02:51:20 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 11:51:20 +0100
Subject: [PATCH v3 07/12] ASoC: mediatek: mt8188: support audio clock
 control
In-Reply-To: <20221208033148.21866-8-trevor.wu@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
 <20221208033148.21866-8-trevor.wu@mediatek.com>
Message-ID: <2383be6d-8ddd-f12f-5083-cf837f9f9478@collabora.com>

Il 08/12/22 04:31, Trevor Wu ha scritto:
> Add audio clock wrapper and audio tuner control.
> 
> Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 13 03:24:57 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 12:24:57 +0100
Subject: [PATCH 1/4] arm64: dts: mediatek: mt8183: Fix systimer 13 MHz
 clock description
In-Reply-To: <CAGXv+5E63+dE-=KbD_LW+BV+fBWnfaD+oH0+e9T_aS-XEffN5w@mail.gmail.com>
References: <20221201084229.3464449-1-wenst@chromium.org>
 <20221201084229.3464449-2-wenst@chromium.org>
 <5250d7d3-ff46-e08d-926c-4efd92390d88@collabora.com>
 <CAGXv+5E63+dE-=KbD_LW+BV+fBWnfaD+oH0+e9T_aS-XEffN5w@mail.gmail.com>
Message-ID: <8d2237d3-1a00-569b-fe83-57b889c266a2@collabora.com>

Il 01/12/22 11:33, Chen-Yu Tsai ha scritto:
> On Thu, Dec 1, 2022 at 5:31 PM AngeloGioacchino Del Regno
> <angelogioacchino.delregno at collabora.com> wrote:
>>
>> Il 01/12/22 09:42, Chen-Yu Tsai ha scritto:
>>> The systimer block derives its 13 MHz clock by dividing the main 26 MHz
>>> oscillator clock by 2 internally, not through the TOPCKGEN clock
>>> controller.
>>>
>>> On the MT8183 this divider is set either by power-on-reset or by the
>>> bootloader. The bootloader may then make the divider unconfigurable to,
>>> but can be read out by, the operating system.
>>>
>>> Making the systimer block take the 26 MHz clock directly requires
>>> changing the implementations. As an ABI compatible fix, change the
>>> input clock of the systimer block a fixed factor divide-by-2 clock
>>> that takes the 26 MHz oscillator as its input.
>>>
>>> Fixes: 5bc8e2875ffb ("arm64: dts: mt8183: add systimer0 device node")
>>> Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
>>
>> I generally not just like - but *love* - this change, I had that in my mind
>> for a couple of months now and forgot about it because reasons.
>>
>> There's just one thing that, since we're doing this now, we can clarify (and
>> that's important to avoid questions like "why isn't this board-specific"):
>> the 26MHz clock "clk26m" oscillator that we're using for the system timers
>> is a SoC-provided clock, and its name is "SYSCLK" as in "System bus clock".
> 
> Looking at the schematics it is terribly more complicated. :(
> 
> The crystal feeds the DCXO in the PMIC, which also acts as a buffer.
> The PMIC then feeds the SoC and any other chips, such as a modem.
> 
> On other platforms we describe the oscillator at the dtsi level as well.
> The reason why it isn't board-specific is that the requirements and
> properties of the crystal are specified in the platform's datasheet,
> i.e. it is a design requirement that every board use the same crystal.
> 
> I don't see the datasheet spelling out SYSCLK though. The TOPCKGEN part

I think I got confused with the MCU Debug System (DEM) part. :\

> mostly just refers to it as CLK26M, or some variant of it, which likely
> denotes some fan-out branch. The system timer part also just says "26M"
> or "26 MHz clock source".
> 
> Also, we can't change the clock name, as "clk26m" is hard-coded into
> the clk drivers.
> 

I wasn't proposing to change the clock-output-names, but nevermind anyway,
on an afterthought, it's probably a good idea to just go with clk26m,
regardless of whether I'm wrong or right about sysclk, as the first one is
the name that we can also find in many (all?) downstream code for other
SoC models.

>> I know that your target is to describe how we get from 26M to 13M, but at
>> this point it may be worth it to use the right names to help preventing
>> confusion about that clock not being an external crystal on the board but
>> something internal to the SoC.
> 
> But as I described above, it is an actual crystal on the board. We are
> simply omitting parts of the signal path. Notably the PMIC needs to be
> excluded due to circular dependency reasons. And also we most definitely
> don't want the system to be touching it.
> 

Let's go with this one.

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>



From angelogioacchino.delregno at collabora.com  Tue Dec 13 03:25:14 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 12:25:14 +0100
Subject: [PATCH 2/4] arm64: dts: mediatek: mt8192: Fix systimer 13 MHz
 clock description
In-Reply-To: <20221201084229.3464449-3-wenst@chromium.org>
References: <20221201084229.3464449-1-wenst@chromium.org>
 <20221201084229.3464449-3-wenst@chromium.org>
Message-ID: <4e73921f-c8c1-7943-72a7-a95b20a68bbf@collabora.com>

Il 01/12/22 09:42, Chen-Yu Tsai ha scritto:
> The systimer block derives its 13 MHz clock by dividing the main 26 MHz
> oscillator clock by 2 internally, not through the TOPCKGEN clock
> controller.
> 
> On the MT8192 this divider is fixed to /2 and is not configurable.
> 
> Making the systimer block take the 26 MHz clock directly requires
> changing the implementations. As an ABI compatible fix, change the
> input clock of the systimer block a fixed factor divide-by-2 clock
> that takes the 26 MHz oscillator as its input.
> 
> Fixes: 48489980e27e ("arm64: dts: Add Mediatek SoC MT8192 and evaluation board dts and Makefile")
> Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>



From angelogioacchino.delregno at collabora.com  Tue Dec 13 03:25:26 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 12:25:26 +0100
Subject: [PATCH 3/4] arm64: dts: mediatek: mt8195: Fix systimer 13 MHz
 clock description
In-Reply-To: <20221201084229.3464449-4-wenst@chromium.org>
References: <20221201084229.3464449-1-wenst@chromium.org>
 <20221201084229.3464449-4-wenst@chromium.org>
Message-ID: <7d67cd32-50c7-e021-c9f8-b0aa331b6c3c@collabora.com>

Il 01/12/22 09:42, Chen-Yu Tsai ha scritto:
> The systimer block derives its 13 MHz clock by dividing the main 26 MHz
> oscillator clock by 2 internally, not through the TOPCKGEN clock
> controller.
> 
> On the MT8195 this divider is set either by power-on-reset or by the
> bootloader. The bootloader may then make the divider unconfigurable to,
> but can be read out by, the operating system.
> 
> Making the systimer block take the 26 MHz clock directly requires
> changing the implementations. As an ABI compatible fix, change the
> input clock of the systimer block a fixed factor divide-by-2 clock
> that takes the 26 MHz oscillator as its input.
> 
> Fixes: 37f2582883be ("arm64: dts: Add mediatek SoC mt8195 and evaluation board")
> Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 13 03:25:43 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 13 Dec 2022 12:25:43 +0100
Subject: [PATCH 4/4] arm64: dts: mediatek: mt8186: Fix systimer 13 MHz
 clock description
In-Reply-To: <20221201084229.3464449-5-wenst@chromium.org>
References: <20221201084229.3464449-1-wenst@chromium.org>
 <20221201084229.3464449-5-wenst@chromium.org>
Message-ID: <6db5f451-9ea0-cab1-0992-d87487e2c760@collabora.com>

Il 01/12/22 09:42, Chen-Yu Tsai ha scritto:
> The systimer block derives its 13 MHz clock by dividing the main 26 MHz
> oscillator clock by 2 internally. The 13 MHz clock is not a separate
> oscillator.
> 
> Fix this by making the 13 MHz clock a divide-by-2 fixed factor clock,
> taking its input from the main 26 MHz oscillator.
> 
> Fixes: 2e78620b1350 ("arm64: dts: Add MediaTek MT8186 dts and evaluation board and Makefile")
> Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From linux at armlinux.org.uk  Tue Dec 13 03:30:00 2022
From: linux at armlinux.org.uk (Russell King (Oracle))
Date: Tue, 13 Dec 2022 11:30:00 +0000
Subject: [PATCH net-next] net: dsa: mt7530: remove reduntant assignment
In-Reply-To: <Y5f6h8q7rlnk1jnD@makrotopia.org>
References: <Y5b/Tm4GwPGzd9sR@shell.armlinux.org.uk>
 <Y5f6h8q7rlnk1jnD@makrotopia.org>
Message-ID: <Y5hiOBaSDsx5RsmV@shell.armlinux.org.uk>

On Tue, Dec 13, 2022 at 04:07:35AM +0000, Daniel Golle wrote:
> Russell King correctly pointed out that the MAC_2500FD capability is
> already added for port 5 (if not in RGMII mode) and port 6 (which only
> supports SGMII) by mt7531_mac_port_get_caps. Remove the reduntant
> setting of this capability flag which was added by a previous commit.
> 
> Fixes: e19de30d20 ("net: dsa: mt7530: add support for in-band link status")
> Reported-by: Russell King <linux at armlinux.org.uk>

Please update the name and email address as per my reviewed-by below
(the "(Oracle)" bit is important since I now work for Oracle.)

> Signed-off-by: Daniel Golle <daniel at makrotopia.org>

Reviewed-by: Russell King (Oracle) <rmk+kernel at armlinux.org.uk>

Thanks!

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!


From yc.hung at mediatek.com  Tue Dec 13 03:56:17 2022
From: yc.hung at mediatek.com (YC Hung)
Date: Tue, 13 Dec 2022 19:56:17 +0800
Subject: [PATCH] ASoC: SOF: mediatek: initialize panic_info to zero
Message-ID: <20221213115617.25086-1-yc.hung@mediatek.com>

Coverity spotted that panic_info is not initialized to zero in
mtk_adsp_dump. Using uninitialized value panic_info.linenum when
calling snd_sof_get_status. Fix this coverity by initializing
panic_info struct as zero.

Signed-off-by: YC Hung <yc.hung at mediatek.com>
---
 sound/soc/sof/mediatek/mtk-adsp-common.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/sof/mediatek/mtk-adsp-common.c b/sound/soc/sof/mediatek/mtk-adsp-common.c
index 1e0769c668a7..de8dbe27cd0d 100644
--- a/sound/soc/sof/mediatek/mtk-adsp-common.c
+++ b/sound/soc/sof/mediatek/mtk-adsp-common.c
@@ -60,7 +60,7 @@ void mtk_adsp_dump(struct snd_sof_dev *sdev, u32 flags)
 {
 	char *level = (flags & SOF_DBG_DUMP_OPTIONAL) ? KERN_DEBUG : KERN_ERR;
 	struct sof_ipc_dsp_oops_xtensa xoops;
-	struct sof_ipc_panic_info panic_info;
+	struct sof_ipc_panic_info panic_info = {};
 	u32 stack[MTK_ADSP_STACK_DUMP_SIZE];
 	u32 status;
 
-- 
2.18.0



From arinc.unal at arinc9.com  Tue Dec 13 05:04:24 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Tue, 13 Dec 2022 16:04:24 +0300
Subject: [PATCH 0/6] Enhance Ralink pinctrl documentation
Message-ID: <20221213130430.172876-1-arinc.unal@arinc9.com>

Heyo,

This series mainly enhances the Ralink pinctrl documentation, and make a
small variable name change on the subdrivers.

I've compile-tested all the subdrivers.
I've tested the dt-binding changes with:
make dt_binding_check DT_SCHEMA_FILES=pinctrl/ralink

Ar?n? ?NAL (6):
  pinctrl: ralink: rename variables which point out the pin group
  dt-bindings: pinctrl: mt7620: add proper function muxing binding
  dt-bindings: pinctrl: mt7621: add proper function muxing binding
  dt-bindings: pinctrl: rt2880: add proper function muxing binding
  dt-bindings: pinctrl: rt305x: add proper function muxing binding
  dt-bindings: pinctrl: rt3883: add proper function muxing binding

 .../bindings/pinctrl/ralink,mt7620-pinctrl.yaml | 632 +++++++++++++++++--
 .../bindings/pinctrl/ralink,mt7621-pinctrl.yaml | 204 +++++-
 .../bindings/pinctrl/ralink,rt2880-pinctrl.yaml |  85 ++-
 .../bindings/pinctrl/ralink,rt305x-pinctrl.yaml | 235 ++++++-
 .../bindings/pinctrl/ralink,rt3883-pinctrl.yaml | 204 +++++-
 drivers/pinctrl/ralink/pinctrl-mt7620.c         | 164 ++---
 drivers/pinctrl/ralink/pinctrl-mt7621.c         |  48 +-
 drivers/pinctrl/ralink/pinctrl-rt2880.c         |  28 +-
 drivers/pinctrl/ralink/pinctrl-rt305x.c         |  82 +--
 drivers/pinctrl/ralink/pinctrl-rt3883.c         |  44 +-
 10 files changed, 1462 insertions(+), 264 deletions(-)




From arinc.unal at arinc9.com  Tue Dec 13 05:04:25 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Tue, 13 Dec 2022 16:04:25 +0300
Subject: [PATCH 1/6] pinctrl: ralink: rename variables which point out the pin group
In-Reply-To: <20221213130430.172876-1-arinc.unal@arinc9.com>
References: <20221213130430.172876-1-arinc.unal@arinc9.com>
Message-ID: <20221213130430.172876-2-arinc.unal@arinc9.com>

These variables define a list of functions which can be muxed to the pin
group which the name of the pin group was originally intended to be pointed
out on the name of the said variables.

Therefore, rename "func" to "grp" across all subdrivers where this applies.

Fixes: 18653d4bd8ab ("pinctrl: ralink: rename variable names for functions on MT7620 and MT7621")
Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 drivers/pinctrl/ralink/pinctrl-mt7620.c | 164 ++++++++++++------------
 drivers/pinctrl/ralink/pinctrl-mt7621.c |  48 +++----
 drivers/pinctrl/ralink/pinctrl-rt2880.c |  28 ++--
 drivers/pinctrl/ralink/pinctrl-rt305x.c |  82 ++++++------
 drivers/pinctrl/ralink/pinctrl-rt3883.c |  44 +++----
 5 files changed, 183 insertions(+), 183 deletions(-)

diff --git a/drivers/pinctrl/ralink/pinctrl-mt7620.c b/drivers/pinctrl/ralink/pinctrl-mt7620.c
index 22ff16eff02f..4e8d26bb3430 100644
--- a/drivers/pinctrl/ralink/pinctrl-mt7620.c
+++ b/drivers/pinctrl/ralink/pinctrl-mt7620.c
@@ -54,20 +54,20 @@
 #define MT7620_GPIO_MODE_EPHY		15
 #define MT7620_GPIO_MODE_PA		20
 
-static struct ralink_pmx_func i2c_func[] =  { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
-static struct ralink_pmx_func mdio_func[] = {
+static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
+static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
+static struct ralink_pmx_func mdio_grp[] = {
 	FUNC("mdio", MT7620_GPIO_MODE_MDIO, 22, 2),
 	FUNC("refclk", MT7620_GPIO_MODE_MDIO_REFCLK, 22, 2),
 };
-static struct ralink_pmx_func rgmii1_func[] = { FUNC("rgmii1", 0, 24, 12) };
-static struct ralink_pmx_func refclk_func[] = { FUNC("spi refclk", 0, 37, 3) };
-static struct ralink_pmx_func ephy_func[] = { FUNC("ephy", 0, 40, 5) };
-static struct ralink_pmx_func rgmii2_func[] = { FUNC("rgmii2", 0, 60, 12) };
-static struct ralink_pmx_func wled_func[] = { FUNC("wled", 0, 72, 1) };
-static struct ralink_pmx_func pa_func[] = { FUNC("pa", 0, 18, 4) };
-static struct ralink_pmx_func uartf_func[] = {
+static struct ralink_pmx_func rgmii1_grp[] = { FUNC("rgmii1", 0, 24, 12) };
+static struct ralink_pmx_func refclk_grp[] = { FUNC("spi refclk", 0, 37, 3) };
+static struct ralink_pmx_func ephy_grp[] = { FUNC("ephy", 0, 40, 5) };
+static struct ralink_pmx_func rgmii2_grp[] = { FUNC("rgmii2", 0, 60, 12) };
+static struct ralink_pmx_func wled_grp[] = { FUNC("wled", 0, 72, 1) };
+static struct ralink_pmx_func pa_grp[] = { FUNC("pa", 0, 18, 4) };
+static struct ralink_pmx_func uartf_grp[] = {
 	FUNC("uartf", MT7620_GPIO_MODE_UARTF, 7, 8),
 	FUNC("pcm uartf", MT7620_GPIO_MODE_PCM_UARTF, 7, 8),
 	FUNC("pcm i2s", MT7620_GPIO_MODE_PCM_I2S, 7, 8),
@@ -76,202 +76,202 @@ static struct ralink_pmx_func uartf_func[] = {
 	FUNC("gpio uartf", MT7620_GPIO_MODE_GPIO_UARTF, 7, 4),
 	FUNC("gpio i2s", MT7620_GPIO_MODE_GPIO_I2S, 7, 4),
 };
-static struct ralink_pmx_func wdt_func[] = {
+static struct ralink_pmx_func wdt_grp[] = {
 	FUNC("wdt rst", 0, 17, 1),
 	FUNC("wdt refclk", 0, 17, 1),
 	};
-static struct ralink_pmx_func pcie_rst_func[] = {
+static struct ralink_pmx_func pcie_rst_grp[] = {
 	FUNC("pcie rst", MT7620_GPIO_MODE_PCIE_RST, 36, 1),
 	FUNC("pcie refclk", MT7620_GPIO_MODE_PCIE_REF, 36, 1)
 };
-static struct ralink_pmx_func nd_sd_func[] = {
+static struct ralink_pmx_func nd_sd_grp[] = {
 	FUNC("nand", MT7620_GPIO_MODE_NAND, 45, 15),
 	FUNC("sd", MT7620_GPIO_MODE_SD, 47, 13)
 };
 
 static struct ralink_pmx_group mt7620a_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, MT7620_GPIO_MODE_I2C),
-	GRP("uartf", uartf_func, MT7620_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, MT7620_GPIO_MODE_I2C),
+	GRP("uartf", uartf_grp, MT7620_GPIO_MODE_UART0_MASK,
 		MT7620_GPIO_MODE_UART0_SHIFT),
-	GRP("spi", spi_func, 1, MT7620_GPIO_MODE_SPI),
-	GRP("uartlite", uartlite_func, 1, MT7620_GPIO_MODE_UART1),
-	GRP_G("wdt", wdt_func, MT7620_GPIO_MODE_WDT_MASK,
+	GRP("spi", spi_grp, 1, MT7620_GPIO_MODE_SPI),
+	GRP("uartlite", uartlite_grp, 1, MT7620_GPIO_MODE_UART1),
+	GRP_G("wdt", wdt_grp, MT7620_GPIO_MODE_WDT_MASK,
 		MT7620_GPIO_MODE_WDT_GPIO, MT7620_GPIO_MODE_WDT_SHIFT),
-	GRP_G("mdio", mdio_func, MT7620_GPIO_MODE_MDIO_MASK,
+	GRP_G("mdio", mdio_grp, MT7620_GPIO_MODE_MDIO_MASK,
 		MT7620_GPIO_MODE_MDIO_GPIO, MT7620_GPIO_MODE_MDIO_SHIFT),
-	GRP("rgmii1", rgmii1_func, 1, MT7620_GPIO_MODE_RGMII1),
-	GRP("spi refclk", refclk_func, 1, MT7620_GPIO_MODE_SPI_REF_CLK),
-	GRP_G("pcie", pcie_rst_func, MT7620_GPIO_MODE_PCIE_MASK,
+	GRP("rgmii1", rgmii1_grp, 1, MT7620_GPIO_MODE_RGMII1),
+	GRP("spi refclk", refclk_grp, 1, MT7620_GPIO_MODE_SPI_REF_CLK),
+	GRP_G("pcie", pcie_rst_grp, MT7620_GPIO_MODE_PCIE_MASK,
 		MT7620_GPIO_MODE_PCIE_GPIO, MT7620_GPIO_MODE_PCIE_SHIFT),
-	GRP_G("nd_sd", nd_sd_func, MT7620_GPIO_MODE_ND_SD_MASK,
+	GRP_G("nd_sd", nd_sd_grp, MT7620_GPIO_MODE_ND_SD_MASK,
 		MT7620_GPIO_MODE_ND_SD_GPIO, MT7620_GPIO_MODE_ND_SD_SHIFT),
-	GRP("rgmii2", rgmii2_func, 1, MT7620_GPIO_MODE_RGMII2),
-	GRP("wled", wled_func, 1, MT7620_GPIO_MODE_WLED),
-	GRP("ephy", ephy_func, 1, MT7620_GPIO_MODE_EPHY),
-	GRP("pa", pa_func, 1, MT7620_GPIO_MODE_PA),
+	GRP("rgmii2", rgmii2_grp, 1, MT7620_GPIO_MODE_RGMII2),
+	GRP("wled", wled_grp, 1, MT7620_GPIO_MODE_WLED),
+	GRP("ephy", ephy_grp, 1, MT7620_GPIO_MODE_EPHY),
+	GRP("pa", pa_grp, 1, MT7620_GPIO_MODE_PA),
 	{ 0 }
 };
 
-static struct ralink_pmx_func pwm1_func_mt76x8[] = {
+static struct ralink_pmx_func pwm1_grp_mt76x8[] = {
 	FUNC("sdxc d6", 3, 19, 1),
 	FUNC("utif", 2, 19, 1),
 	FUNC("gpio", 1, 19, 1),
 	FUNC("pwm1", 0, 19, 1),
 };
 
-static struct ralink_pmx_func pwm0_func_mt76x8[] = {
+static struct ralink_pmx_func pwm0_grp_mt76x8[] = {
 	FUNC("sdxc d7", 3, 18, 1),
 	FUNC("utif", 2, 18, 1),
 	FUNC("gpio", 1, 18, 1),
 	FUNC("pwm0", 0, 18, 1),
 };
 
-static struct ralink_pmx_func uart2_func_mt76x8[] = {
+static struct ralink_pmx_func uart2_grp_mt76x8[] = {
 	FUNC("sdxc d5 d4", 3, 20, 2),
 	FUNC("pwm", 2, 20, 2),
 	FUNC("gpio", 1, 20, 2),
 	FUNC("uart2", 0, 20, 2),
 };
 
-static struct ralink_pmx_func uart1_func_mt76x8[] = {
+static struct ralink_pmx_func uart1_grp_mt76x8[] = {
 	FUNC("sw_r", 3, 45, 2),
 	FUNC("pwm", 2, 45, 2),
 	FUNC("gpio", 1, 45, 2),
 	FUNC("uart1", 0, 45, 2),
 };
 
-static struct ralink_pmx_func i2c_func_mt76x8[] = {
+static struct ralink_pmx_func i2c_grp_mt76x8[] = {
 	FUNC("-", 3, 4, 2),
 	FUNC("debug", 2, 4, 2),
 	FUNC("gpio", 1, 4, 2),
 	FUNC("i2c", 0, 4, 2),
 };
 
-static struct ralink_pmx_func refclk_func_mt76x8[] = { FUNC("refclk", 0, 37, 1) };
-static struct ralink_pmx_func perst_func_mt76x8[] = { FUNC("perst", 0, 36, 1) };
-static struct ralink_pmx_func wdt_func_mt76x8[] = { FUNC("wdt", 0, 38, 1) };
-static struct ralink_pmx_func spi_func_mt76x8[] = { FUNC("spi", 0, 7, 4) };
+static struct ralink_pmx_func refclk_grp_mt76x8[] = { FUNC("refclk", 0, 37, 1) };
+static struct ralink_pmx_func perst_grp_mt76x8[] = { FUNC("perst", 0, 36, 1) };
+static struct ralink_pmx_func wdt_grp_mt76x8[] = { FUNC("wdt", 0, 38, 1) };
+static struct ralink_pmx_func spi_grp_mt76x8[] = { FUNC("spi", 0, 7, 4) };
 
-static struct ralink_pmx_func sd_mode_func_mt76x8[] = {
+static struct ralink_pmx_func sd_mode_grp_mt76x8[] = {
 	FUNC("jtag", 3, 22, 8),
 	FUNC("utif", 2, 22, 8),
 	FUNC("gpio", 1, 22, 8),
 	FUNC("sdxc", 0, 22, 8),
 };
 
-static struct ralink_pmx_func uart0_func_mt76x8[] = {
+static struct ralink_pmx_func uart0_grp_mt76x8[] = {
 	FUNC("-", 3, 12, 2),
 	FUNC("-", 2, 12, 2),
 	FUNC("gpio", 1, 12, 2),
 	FUNC("uart0", 0, 12, 2),
 };
 
-static struct ralink_pmx_func i2s_func_mt76x8[] = {
+static struct ralink_pmx_func i2s_grp_mt76x8[] = {
 	FUNC("antenna", 3, 0, 4),
 	FUNC("pcm", 2, 0, 4),
 	FUNC("gpio", 1, 0, 4),
 	FUNC("i2s", 0, 0, 4),
 };
 
-static struct ralink_pmx_func spi_cs1_func_mt76x8[] = {
+static struct ralink_pmx_func spi_cs1_grp_mt76x8[] = {
 	FUNC("-", 3, 6, 1),
 	FUNC("refclk", 2, 6, 1),
 	FUNC("gpio", 1, 6, 1),
 	FUNC("spi cs1", 0, 6, 1),
 };
 
-static struct ralink_pmx_func spis_func_mt76x8[] = {
+static struct ralink_pmx_func spis_grp_mt76x8[] = {
 	FUNC("pwm_uart2", 3, 14, 4),
 	FUNC("utif", 2, 14, 4),
 	FUNC("gpio", 1, 14, 4),
 	FUNC("spis", 0, 14, 4),
 };
 
-static struct ralink_pmx_func gpio_func_mt76x8[] = {
+static struct ralink_pmx_func gpio_grp_mt76x8[] = {
 	FUNC("pcie", 3, 11, 1),
 	FUNC("refclk", 2, 11, 1),
 	FUNC("gpio", 1, 11, 1),
 	FUNC("gpio", 0, 11, 1),
 };
 
-static struct ralink_pmx_func p4led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p4led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 30, 1),
 	FUNC("utif", 2, 30, 1),
 	FUNC("gpio", 1, 30, 1),
 	FUNC("p4led_kn", 0, 30, 1),
 };
 
-static struct ralink_pmx_func p3led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p3led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 31, 1),
 	FUNC("utif", 2, 31, 1),
 	FUNC("gpio", 1, 31, 1),
 	FUNC("p3led_kn", 0, 31, 1),
 };
 
-static struct ralink_pmx_func p2led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p2led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 32, 1),
 	FUNC("utif", 2, 32, 1),
 	FUNC("gpio", 1, 32, 1),
 	FUNC("p2led_kn", 0, 32, 1),
 };
 
-static struct ralink_pmx_func p1led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p1led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 33, 1),
 	FUNC("utif", 2, 33, 1),
 	FUNC("gpio", 1, 33, 1),
 	FUNC("p1led_kn", 0, 33, 1),
 };
 
-static struct ralink_pmx_func p0led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p0led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 34, 1),
 	FUNC("rsvd", 2, 34, 1),
 	FUNC("gpio", 1, 34, 1),
 	FUNC("p0led_kn", 0, 34, 1),
 };
 
-static struct ralink_pmx_func wled_kn_func_mt76x8[] = {
+static struct ralink_pmx_func wled_kn_grp_mt76x8[] = {
 	FUNC("rsvd", 3, 35, 1),
 	FUNC("rsvd", 2, 35, 1),
 	FUNC("gpio", 1, 35, 1),
 	FUNC("wled_kn", 0, 35, 1),
 };
 
-static struct ralink_pmx_func p4led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p4led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 39, 1),
 	FUNC("utif", 2, 39, 1),
 	FUNC("gpio", 1, 39, 1),
 	FUNC("p4led_an", 0, 39, 1),
 };
 
-static struct ralink_pmx_func p3led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p3led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 40, 1),
 	FUNC("utif", 2, 40, 1),
 	FUNC("gpio", 1, 40, 1),
 	FUNC("p3led_an", 0, 40, 1),
 };
 
-static struct ralink_pmx_func p2led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p2led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 41, 1),
 	FUNC("utif", 2, 41, 1),
 	FUNC("gpio", 1, 41, 1),
 	FUNC("p2led_an", 0, 41, 1),
 };
 
-static struct ralink_pmx_func p1led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p1led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 42, 1),
 	FUNC("utif", 2, 42, 1),
 	FUNC("gpio", 1, 42, 1),
 	FUNC("p1led_an", 0, 42, 1),
 };
 
-static struct ralink_pmx_func p0led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p0led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 43, 1),
 	FUNC("rsvd", 2, 43, 1),
 	FUNC("gpio", 1, 43, 1),
 	FUNC("p0led_an", 0, 43, 1),
 };
 
-static struct ralink_pmx_func wled_an_func_mt76x8[] = {
+static struct ralink_pmx_func wled_an_grp_mt76x8[] = {
 	FUNC("rsvd", 3, 44, 1),
 	FUNC("rsvd", 2, 44, 1),
 	FUNC("gpio", 1, 44, 1),
@@ -309,55 +309,55 @@ static struct ralink_pmx_func wled_an_func_mt76x8[] = {
 #define MT76X8_GPIO_MODE_GPIO		0
 
 static struct ralink_pmx_group mt76x8_pinmux_data[] = {
-	GRP_G("pwm1", pwm1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("pwm1", pwm1_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_PWM1),
-	GRP_G("pwm0", pwm0_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("pwm0", pwm0_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_PWM0),
-	GRP_G("uart2", uart2_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("uart2", uart2_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_UART2),
-	GRP_G("uart1", uart1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("uart1", uart1_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_UART1),
-	GRP_G("i2c", i2c_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("i2c", i2c_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_I2C),
-	GRP("refclk", refclk_func_mt76x8, 1, MT76X8_GPIO_MODE_REFCLK),
-	GRP("perst", perst_func_mt76x8, 1, MT76X8_GPIO_MODE_PERST),
-	GRP("wdt", wdt_func_mt76x8, 1, MT76X8_GPIO_MODE_WDT),
-	GRP("spi", spi_func_mt76x8, 1, MT76X8_GPIO_MODE_SPI),
-	GRP_G("sdmode", sd_mode_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP("refclk", refclk_grp_mt76x8, 1, MT76X8_GPIO_MODE_REFCLK),
+	GRP("perst", perst_grp_mt76x8, 1, MT76X8_GPIO_MODE_PERST),
+	GRP("wdt", wdt_grp_mt76x8, 1, MT76X8_GPIO_MODE_WDT),
+	GRP("spi", spi_grp_mt76x8, 1, MT76X8_GPIO_MODE_SPI),
+	GRP_G("sdmode", sd_mode_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_SDMODE),
-	GRP_G("uart0", uart0_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("uart0", uart0_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_UART0),
-	GRP_G("i2s", i2s_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("i2s", i2s_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_I2S),
-	GRP_G("spi cs1", spi_cs1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("spi cs1", spi_cs1_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_CS1),
-	GRP_G("spis", spis_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("spis", spis_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_SPIS),
-	GRP_G("gpio", gpio_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("gpio", gpio_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_GPIO),
-	GRP_G("wled_an", wled_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("wled_an", wled_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_WLED_AN),
-	GRP_G("p0led_an", p0led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p0led_an", p0led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P0LED_AN),
-	GRP_G("p1led_an", p1led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p1led_an", p1led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P1LED_AN),
-	GRP_G("p2led_an", p2led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p2led_an", p2led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P2LED_AN),
-	GRP_G("p3led_an", p3led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p3led_an", p3led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P3LED_AN),
-	GRP_G("p4led_an", p4led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p4led_an", p4led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P4LED_AN),
-	GRP_G("wled_kn", wled_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("wled_kn", wled_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_WLED_KN),
-	GRP_G("p0led_kn", p0led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p0led_kn", p0led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P0LED_KN),
-	GRP_G("p1led_kn", p1led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p1led_kn", p1led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P1LED_KN),
-	GRP_G("p2led_kn", p2led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p2led_kn", p2led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P2LED_KN),
-	GRP_G("p3led_kn", p3led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p3led_kn", p3led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P3LED_KN),
-	GRP_G("p4led_kn", p4led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p4led_kn", p4led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P4LED_KN),
 	{ 0 }
 };
diff --git a/drivers/pinctrl/ralink/pinctrl-mt7621.c b/drivers/pinctrl/ralink/pinctrl-mt7621.c
index b47968f40e0c..eddc0ba6d468 100644
--- a/drivers/pinctrl/ralink/pinctrl-mt7621.c
+++ b/drivers/pinctrl/ralink/pinctrl-mt7621.c
@@ -34,59 +34,59 @@
 #define MT7621_GPIO_MODE_SDHCI_SHIFT	18
 #define MT7621_GPIO_MODE_SDHCI_GPIO	1
 
-static struct ralink_pmx_func uart1_func[] =  { FUNC("uart1", 0, 1, 2) };
-static struct ralink_pmx_func i2c_func[] =  { FUNC("i2c", 0, 3, 2) };
-static struct ralink_pmx_func uart3_func[] = {
+static struct ralink_pmx_func uart1_grp[] =  { FUNC("uart1", 0, 1, 2) };
+static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 3, 2) };
+static struct ralink_pmx_func uart3_grp[] = {
 	FUNC("uart3", 0, 5, 4),
 	FUNC("i2s", 2, 5, 4),
 	FUNC("spdif3", 3, 5, 4),
 };
-static struct ralink_pmx_func uart2_func[] = {
+static struct ralink_pmx_func uart2_grp[] = {
 	FUNC("uart2", 0, 9, 4),
 	FUNC("pcm", 2, 9, 4),
 	FUNC("spdif2", 3, 9, 4),
 };
-static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 13, 5) };
-static struct ralink_pmx_func wdt_func[] = {
+static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 13, 5) };
+static struct ralink_pmx_func wdt_grp[] = {
 	FUNC("wdt rst", 0, 18, 1),
 	FUNC("wdt refclk", 2, 18, 1),
 };
-static struct ralink_pmx_func pcie_rst_func[] = {
+static struct ralink_pmx_func pcie_rst_grp[] = {
 	FUNC("pcie rst", MT7621_GPIO_MODE_PCIE_RST, 19, 1),
 	FUNC("pcie refclk", MT7621_GPIO_MODE_PCIE_REF, 19, 1)
 };
-static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 20, 2) };
-static struct ralink_pmx_func rgmii2_func[] = { FUNC("rgmii2", 0, 22, 12) };
-static struct ralink_pmx_func spi_func[] = {
+static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 20, 2) };
+static struct ralink_pmx_func rgmii2_grp[] = { FUNC("rgmii2", 0, 22, 12) };
+static struct ralink_pmx_func spi_grp[] = {
 	FUNC("spi", 0, 34, 7),
 	FUNC("nand1", 2, 34, 7),
 };
-static struct ralink_pmx_func sdhci_func[] = {
+static struct ralink_pmx_func sdhci_grp[] = {
 	FUNC("sdhci", 0, 41, 8),
 	FUNC("nand2", 2, 41, 8),
 };
-static struct ralink_pmx_func rgmii1_func[] = { FUNC("rgmii1", 0, 49, 12) };
+static struct ralink_pmx_func rgmii1_grp[] = { FUNC("rgmii1", 0, 49, 12) };
 
 static struct ralink_pmx_group mt7621_pinmux_data[] = {
-	GRP("uart1", uart1_func, 1, MT7621_GPIO_MODE_UART1),
-	GRP("i2c", i2c_func, 1, MT7621_GPIO_MODE_I2C),
-	GRP_G("uart3", uart3_func, MT7621_GPIO_MODE_UART3_MASK,
+	GRP("uart1", uart1_grp, 1, MT7621_GPIO_MODE_UART1),
+	GRP("i2c", i2c_grp, 1, MT7621_GPIO_MODE_I2C),
+	GRP_G("uart3", uart3_grp, MT7621_GPIO_MODE_UART3_MASK,
 		MT7621_GPIO_MODE_UART3_GPIO, MT7621_GPIO_MODE_UART3_SHIFT),
-	GRP_G("uart2", uart2_func, MT7621_GPIO_MODE_UART2_MASK,
+	GRP_G("uart2", uart2_grp, MT7621_GPIO_MODE_UART2_MASK,
 		MT7621_GPIO_MODE_UART2_GPIO, MT7621_GPIO_MODE_UART2_SHIFT),
-	GRP("jtag", jtag_func, 1, MT7621_GPIO_MODE_JTAG),
-	GRP_G("wdt", wdt_func, MT7621_GPIO_MODE_WDT_MASK,
+	GRP("jtag", jtag_grp, 1, MT7621_GPIO_MODE_JTAG),
+	GRP_G("wdt", wdt_grp, MT7621_GPIO_MODE_WDT_MASK,
 		MT7621_GPIO_MODE_WDT_GPIO, MT7621_GPIO_MODE_WDT_SHIFT),
-	GRP_G("pcie", pcie_rst_func, MT7621_GPIO_MODE_PCIE_MASK,
+	GRP_G("pcie", pcie_rst_grp, MT7621_GPIO_MODE_PCIE_MASK,
 		MT7621_GPIO_MODE_PCIE_GPIO, MT7621_GPIO_MODE_PCIE_SHIFT),
-	GRP_G("mdio", mdio_func, MT7621_GPIO_MODE_MDIO_MASK,
+	GRP_G("mdio", mdio_grp, MT7621_GPIO_MODE_MDIO_MASK,
 		MT7621_GPIO_MODE_MDIO_GPIO, MT7621_GPIO_MODE_MDIO_SHIFT),
-	GRP("rgmii2", rgmii2_func, 1, MT7621_GPIO_MODE_RGMII2),
-	GRP_G("spi", spi_func, MT7621_GPIO_MODE_SPI_MASK,
+	GRP("rgmii2", rgmii2_grp, 1, MT7621_GPIO_MODE_RGMII2),
+	GRP_G("spi", spi_grp, MT7621_GPIO_MODE_SPI_MASK,
 		MT7621_GPIO_MODE_SPI_GPIO, MT7621_GPIO_MODE_SPI_SHIFT),
-	GRP_G("sdhci", sdhci_func, MT7621_GPIO_MODE_SDHCI_MASK,
+	GRP_G("sdhci", sdhci_grp, MT7621_GPIO_MODE_SDHCI_MASK,
 		MT7621_GPIO_MODE_SDHCI_GPIO, MT7621_GPIO_MODE_SDHCI_SHIFT),
-	GRP("rgmii1", rgmii1_func, 1, MT7621_GPIO_MODE_RGMII1),
+	GRP("rgmii1", rgmii1_grp, 1, MT7621_GPIO_MODE_RGMII1),
 	{ 0 }
 };
 
diff --git a/drivers/pinctrl/ralink/pinctrl-rt2880.c b/drivers/pinctrl/ralink/pinctrl-rt2880.c
index 811e12df1133..3e2f1aaaf095 100644
--- a/drivers/pinctrl/ralink/pinctrl-rt2880.c
+++ b/drivers/pinctrl/ralink/pinctrl-rt2880.c
@@ -15,22 +15,22 @@
 #define RT2880_GPIO_MODE_SDRAM		BIT(6)
 #define RT2880_GPIO_MODE_PCI		BIT(7)
 
-static struct ralink_pmx_func i2c_func[] = { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 7, 8) };
-static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
-static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
-static struct ralink_pmx_func sdram_func[] = { FUNC("sdram", 0, 24, 16) };
-static struct ralink_pmx_func pci_func[] = { FUNC("pci", 0, 40, 32) };
+static struct ralink_pmx_func i2c_grp[] = { FUNC("i2c", 0, 1, 2) };
+static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 7, 8) };
+static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
+static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
+static struct ralink_pmx_func sdram_grp[] = { FUNC("sdram", 0, 24, 16) };
+static struct ralink_pmx_func pci_grp[] = { FUNC("pci", 0, 40, 32) };
 
 static struct ralink_pmx_group rt2880_pinmux_data_act[] = {
-	GRP("i2c", i2c_func, 1, RT2880_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT2880_GPIO_MODE_SPI),
-	GRP("uartlite", uartlite_func, 1, RT2880_GPIO_MODE_UART0),
-	GRP("jtag", jtag_func, 1, RT2880_GPIO_MODE_JTAG),
-	GRP("mdio", mdio_func, 1, RT2880_GPIO_MODE_MDIO),
-	GRP("sdram", sdram_func, 1, RT2880_GPIO_MODE_SDRAM),
-	GRP("pci", pci_func, 1, RT2880_GPIO_MODE_PCI),
+	GRP("i2c", i2c_grp, 1, RT2880_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT2880_GPIO_MODE_SPI),
+	GRP("uartlite", uartlite_grp, 1, RT2880_GPIO_MODE_UART0),
+	GRP("jtag", jtag_grp, 1, RT2880_GPIO_MODE_JTAG),
+	GRP("mdio", mdio_grp, 1, RT2880_GPIO_MODE_MDIO),
+	GRP("sdram", sdram_grp, 1, RT2880_GPIO_MODE_SDRAM),
+	GRP("pci", pci_grp, 1, RT2880_GPIO_MODE_PCI),
 	{ 0 }
 };
 
diff --git a/drivers/pinctrl/ralink/pinctrl-rt305x.c b/drivers/pinctrl/ralink/pinctrl-rt305x.c
index 5b204b7ca1f3..bdaee5ce1ee0 100644
--- a/drivers/pinctrl/ralink/pinctrl-rt305x.c
+++ b/drivers/pinctrl/ralink/pinctrl-rt305x.c
@@ -31,9 +31,9 @@
 #define RT3352_GPIO_MODE_LNA		18
 #define RT3352_GPIO_MODE_PA		20
 
-static struct ralink_pmx_func i2c_func[] =  { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartf_func[] = {
+static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
+static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct ralink_pmx_func uartf_grp[] = {
 	FUNC("uartf", RT305X_GPIO_MODE_UARTF, 7, 8),
 	FUNC("pcm uartf", RT305X_GPIO_MODE_PCM_UARTF, 7, 8),
 	FUNC("pcm i2s", RT305X_GPIO_MODE_PCM_I2S, 7, 8),
@@ -42,65 +42,65 @@ static struct ralink_pmx_func uartf_func[] = {
 	FUNC("gpio uartf", RT305X_GPIO_MODE_GPIO_UARTF, 7, 4),
 	FUNC("gpio i2s", RT305X_GPIO_MODE_GPIO_I2S, 7, 4),
 };
-static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
-static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
-static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
-static struct ralink_pmx_func rt5350_led_func[] = { FUNC("led", 0, 22, 5) };
-static struct ralink_pmx_func rt5350_cs1_func[] = {
+static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
+static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
+static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
+static struct ralink_pmx_func rt5350_led_grp[] = { FUNC("led", 0, 22, 5) };
+static struct ralink_pmx_func rt5350_cs1_grp[] = {
 	FUNC("spi_cs1", 0, 27, 1),
 	FUNC("wdg_cs1", 1, 27, 1),
 };
-static struct ralink_pmx_func sdram_func[] = { FUNC("sdram", 0, 24, 16) };
-static struct ralink_pmx_func rt3352_rgmii_func[] = {
+static struct ralink_pmx_func sdram_grp[] = { FUNC("sdram", 0, 24, 16) };
+static struct ralink_pmx_func rt3352_rgmii_grp[] = {
 	FUNC("rgmii", 0, 24, 12)
 };
-static struct ralink_pmx_func rgmii_func[] = { FUNC("rgmii", 0, 40, 12) };
-static struct ralink_pmx_func rt3352_lna_func[] = { FUNC("lna", 0, 36, 2) };
-static struct ralink_pmx_func rt3352_pa_func[] = { FUNC("pa", 0, 38, 2) };
-static struct ralink_pmx_func rt3352_led_func[] = { FUNC("led", 0, 40, 5) };
-static struct ralink_pmx_func rt3352_cs1_func[] = {
+static struct ralink_pmx_func rgmii_grp[] = { FUNC("rgmii", 0, 40, 12) };
+static struct ralink_pmx_func rt3352_lna_grp[] = { FUNC("lna", 0, 36, 2) };
+static struct ralink_pmx_func rt3352_pa_grp[] = { FUNC("pa", 0, 38, 2) };
+static struct ralink_pmx_func rt3352_led_grp[] = { FUNC("led", 0, 40, 5) };
+static struct ralink_pmx_func rt3352_cs1_grp[] = {
 	FUNC("spi_cs1", 0, 45, 1),
 	FUNC("wdg_cs1", 1, 45, 1),
 };
 
 static struct ralink_pmx_group rt3050_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, RT305X_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI),
-	GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
+	GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
 		RT305X_GPIO_MODE_UART0_SHIFT),
-	GRP("uartlite", uartlite_func, 1, RT305X_GPIO_MODE_UART1),
-	GRP("jtag", jtag_func, 1, RT305X_GPIO_MODE_JTAG),
-	GRP("mdio", mdio_func, 1, RT305X_GPIO_MODE_MDIO),
-	GRP("rgmii", rgmii_func, 1, RT305X_GPIO_MODE_RGMII),
-	GRP("sdram", sdram_func, 1, RT305X_GPIO_MODE_SDRAM),
+	GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
+	GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
+	GRP("mdio", mdio_grp, 1, RT305X_GPIO_MODE_MDIO),
+	GRP("rgmii", rgmii_grp, 1, RT305X_GPIO_MODE_RGMII),
+	GRP("sdram", sdram_grp, 1, RT305X_GPIO_MODE_SDRAM),
 	{ 0 }
 };
 
 static struct ralink_pmx_group rt3352_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, RT305X_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI),
-	GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
+	GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
 		RT305X_GPIO_MODE_UART0_SHIFT),
-	GRP("uartlite", uartlite_func, 1, RT305X_GPIO_MODE_UART1),
-	GRP("jtag", jtag_func, 1, RT305X_GPIO_MODE_JTAG),
-	GRP("mdio", mdio_func, 1, RT305X_GPIO_MODE_MDIO),
-	GRP("rgmii", rt3352_rgmii_func, 1, RT305X_GPIO_MODE_RGMII),
-	GRP("lna", rt3352_lna_func, 1, RT3352_GPIO_MODE_LNA),
-	GRP("pa", rt3352_pa_func, 1, RT3352_GPIO_MODE_PA),
-	GRP("led", rt3352_led_func, 1, RT5350_GPIO_MODE_PHY_LED),
-	GRP("spi_cs1", rt3352_cs1_func, 2, RT5350_GPIO_MODE_SPI_CS1),
+	GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
+	GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
+	GRP("mdio", mdio_grp, 1, RT305X_GPIO_MODE_MDIO),
+	GRP("rgmii", rt3352_rgmii_grp, 1, RT305X_GPIO_MODE_RGMII),
+	GRP("lna", rt3352_lna_grp, 1, RT3352_GPIO_MODE_LNA),
+	GRP("pa", rt3352_pa_grp, 1, RT3352_GPIO_MODE_PA),
+	GRP("led", rt3352_led_grp, 1, RT5350_GPIO_MODE_PHY_LED),
+	GRP("spi_cs1", rt3352_cs1_grp, 2, RT5350_GPIO_MODE_SPI_CS1),
 	{ 0 }
 };
 
 static struct ralink_pmx_group rt5350_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, RT305X_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI),
-	GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
+	GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
 		RT305X_GPIO_MODE_UART0_SHIFT),
-	GRP("uartlite", uartlite_func, 1, RT305X_GPIO_MODE_UART1),
-	GRP("jtag", jtag_func, 1, RT305X_GPIO_MODE_JTAG),
-	GRP("led", rt5350_led_func, 1, RT5350_GPIO_MODE_PHY_LED),
-	GRP("spi_cs1", rt5350_cs1_func, 2, RT5350_GPIO_MODE_SPI_CS1),
+	GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
+	GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
+	GRP("led", rt5350_led_grp, 1, RT5350_GPIO_MODE_PHY_LED),
+	GRP("spi_cs1", rt5350_cs1_grp, 2, RT5350_GPIO_MODE_SPI_CS1),
 	{ 0 }
 };
 
diff --git a/drivers/pinctrl/ralink/pinctrl-rt3883.c b/drivers/pinctrl/ralink/pinctrl-rt3883.c
index 44a66c3d2d2a..392208662355 100644
--- a/drivers/pinctrl/ralink/pinctrl-rt3883.c
+++ b/drivers/pinctrl/ralink/pinctrl-rt3883.c
@@ -39,9 +39,9 @@
 #define RT3883_GPIO_MODE_LNA_G_GPIO	0x3
 #define RT3883_GPIO_MODE_LNA_G		_RT3883_GPIO_MODE_LNA_G(RT3883_GPIO_MODE_LNA_G_MASK)
 
-static struct ralink_pmx_func i2c_func[] =  { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartf_func[] = {
+static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
+static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct ralink_pmx_func uartf_grp[] = {
 	FUNC("uartf", RT3883_GPIO_MODE_UARTF, 7, 8),
 	FUNC("pcm uartf", RT3883_GPIO_MODE_PCM_UARTF, 7, 8),
 	FUNC("pcm i2s", RT3883_GPIO_MODE_PCM_I2S, 7, 8),
@@ -50,34 +50,34 @@ static struct ralink_pmx_func uartf_func[] = {
 	FUNC("gpio uartf", RT3883_GPIO_MODE_GPIO_UARTF, 7, 4),
 	FUNC("gpio i2s", RT3883_GPIO_MODE_GPIO_I2S, 7, 4),
 };
-static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
-static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
-static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
-static struct ralink_pmx_func lna_a_func[] = { FUNC("lna a", 0, 32, 3) };
-static struct ralink_pmx_func lna_g_func[] = { FUNC("lna g", 0, 35, 3) };
-static struct ralink_pmx_func pci_func[] = {
+static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
+static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
+static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
+static struct ralink_pmx_func lna_a_grp[] = { FUNC("lna a", 0, 32, 3) };
+static struct ralink_pmx_func lna_g_grp[] = { FUNC("lna g", 0, 35, 3) };
+static struct ralink_pmx_func pci_grp[] = {
 	FUNC("pci-dev", 0, 40, 32),
 	FUNC("pci-host2", 1, 40, 32),
 	FUNC("pci-host1", 2, 40, 32),
 	FUNC("pci-fnc", 3, 40, 32)
 };
-static struct ralink_pmx_func ge1_func[] = { FUNC("ge1", 0, 72, 12) };
-static struct ralink_pmx_func ge2_func[] = { FUNC("ge2", 0, 84, 12) };
+static struct ralink_pmx_func ge1_grp[] = { FUNC("ge1", 0, 72, 12) };
+static struct ralink_pmx_func ge2_grp[] = { FUNC("ge2", 0, 84, 12) };
 
 static struct ralink_pmx_group rt3883_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, RT3883_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT3883_GPIO_MODE_SPI),
-	GRP("uartf", uartf_func, RT3883_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, RT3883_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT3883_GPIO_MODE_SPI),
+	GRP("uartf", uartf_grp, RT3883_GPIO_MODE_UART0_MASK,
 		RT3883_GPIO_MODE_UART0_SHIFT),
-	GRP("uartlite", uartlite_func, 1, RT3883_GPIO_MODE_UART1),
-	GRP("jtag", jtag_func, 1, RT3883_GPIO_MODE_JTAG),
-	GRP("mdio", mdio_func, 1, RT3883_GPIO_MODE_MDIO),
-	GRP("lna a", lna_a_func, 1, RT3883_GPIO_MODE_LNA_A),
-	GRP("lna g", lna_g_func, 1, RT3883_GPIO_MODE_LNA_G),
-	GRP("pci", pci_func, RT3883_GPIO_MODE_PCI_MASK,
+	GRP("uartlite", uartlite_grp, 1, RT3883_GPIO_MODE_UART1),
+	GRP("jtag", jtag_grp, 1, RT3883_GPIO_MODE_JTAG),
+	GRP("mdio", mdio_grp, 1, RT3883_GPIO_MODE_MDIO),
+	GRP("lna a", lna_a_grp, 1, RT3883_GPIO_MODE_LNA_A),
+	GRP("lna g", lna_g_grp, 1, RT3883_GPIO_MODE_LNA_G),
+	GRP("pci", pci_grp, RT3883_GPIO_MODE_PCI_MASK,
 		RT3883_GPIO_MODE_PCI_SHIFT),
-	GRP("ge1", ge1_func, 1, RT3883_GPIO_MODE_GE1),
-	GRP("ge2", ge2_func, 1, RT3883_GPIO_MODE_GE2),
+	GRP("ge1", ge1_grp, 1, RT3883_GPIO_MODE_GE1),
+	GRP("ge2", ge2_grp, 1, RT3883_GPIO_MODE_GE2),
 	{ 0 }
 };
 
-- 
2.37.2



From arinc.unal at arinc9.com  Tue Dec 13 05:04:26 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Tue, 13 Dec 2022 16:04:26 +0300
Subject: [PATCH 2/6] dt-bindings: pinctrl: mt7620: add proper function muxing binding
In-Reply-To: <20221213130430.172876-1-arinc.unal@arinc9.com>
References: <20221213130430.172876-1-arinc.unal@arinc9.com>
Message-ID: <20221213130430.172876-3-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 .../pinctrl/ralink,mt7620-pinctrl.yaml        | 632 +++++++++++++++++-
 1 file changed, 596 insertions(+), 36 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
index 6f17f3991640..06880c80ba80 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
@@ -29,47 +29,608 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [
-              # common
-              i2c, spi, wdt,
-
-              # For MT7620 SoC
-              ephy, mdio, nd_sd, pa, pcie, rgmii1, rgmii2, spi refclk,
-              uartf, uartlite, wled,
-
-              # For MT7628 and MT7688 SoCs
-              gpio, i2s, p0led_an, p0led_kn, p1led_an, p1led_kn, p2led_an,
-              p2led_kn, p3led_an, p3led_kn, p4led_an, p4led_kn, perst, pwm0,
-              pwm1, refclk, sdmode, spi cs1, spis, uart0, uart1, uart2,
-              wled_an, wled_kn,
-            ]
-
           function:
-            description: The mux function to select.
-            enum: [
-              # common
-              gpio, i2c, refclk, spi,
-
-              # For MT7620 SoC
-              ephy, gpio i2s, gpio uartf, i2s uartf, mdio, nand, pa,
-              pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf,
-              rgmii1, rgmii2, sd, spi refclk, uartf, uartlite, wdt refclk,
-              wdt rst, wled,
-
-              # For MT7628 and MT7688 SoCs
-              antenna, debug, i2s, jtag, p0led_an, p0led_kn,
-              p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
-              p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2,
-              rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi cs1,
-              spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -,
-            ]
+            description:
+              A string containing the name of the function to mux to the group.
+            anyOf:
+              - description: For MT7620 SoC
+                enum: [ephy, gpio, gpio i2s, gpio uartf, i2c, i2s uartf, mdio, nand, pa,
+                       pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf, refclk,
+                       rgmii1, rgmii2, sd, spi, spi refclk, uartf, uartlite, wdt refclk,
+                       wdt rst, wled]
+
+              - description: For MT7628 and MT7688 SoCs
+                enum: [antenna, debug, gpio, i2c, i2s, jtag, p0led_an, p0led_kn,
+                       p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
+                       p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2,
+                       refclk, rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi, spi cs1,
+                       spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -]
+
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
 
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: antenna
+            then:
+              properties:
+                groups:
+                  enum: [i2s]
+
+          - if:
+              properties:
+                function:
+                  const: debug
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: ephy
+            then:
+              properties:
+                groups:
+                  enum: [ephy]
+
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  oneOf:
+                    - description: For MT7620 SoC
+                      enum: [ephy, i2c, mdio, nd_sd, pa, pcie, rgmii1, rgmii2,
+                             spi, spi refclk, uartf, uartlite, wdt, wled]
+
+                    - description: For MT7628 and MT7688 SoCs
+                      enum: [gpio, i2c, i2s, p0led_an, p0led_kn, p1led_an,
+                             p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
+                             p4led_an, p4led_kn, perst, pwm0, pwm1, refclk,
+                             sdmode, spi, spi cs1, spis, uart0, uart1, uart2,
+                             wdt, wled_an, wled_kn]
+
+          - if:
+              properties:
+                function:
+                  const: gpio i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: gpio uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: i2s
+            then:
+              properties:
+                groups:
+                  enum: [i2s]
+
+          - if:
+              properties:
+                function:
+                  const: i2s uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [p0led_an, p0led_kn, p1led_an, p1led_kn, p2led_an,
+                         p2led_kn, p3led_an, p3led_kn, p4led_an, p4led_kn,
+                         sdmode]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: nand
+            then:
+              properties:
+                groups:
+                  enum: [nd_sd]
+
+          - if:
+              properties:
+                function:
+                  const: p0led_an
+            then:
+              properties:
+                groups:
+                  enum: [p0led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p0led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p0led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: p1led_an
+            then:
+              properties:
+                groups:
+                  enum: [p1led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p1led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p1led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: p2led_an
+            then:
+              properties:
+                groups:
+                  enum: [p2led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p2led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p2led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: p3led_an
+            then:
+              properties:
+                groups:
+                  enum: [p3led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p3led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p3led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: p4led_an
+            then:
+              properties:
+                groups:
+                  enum: [p4led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p4led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p4led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: pa
+            then:
+              properties:
+                groups:
+                  enum: [pa]
+
+          - if:
+              properties:
+                function:
+                  const: pcie
+            then:
+              properties:
+                groups:
+                  enum: [gpio]
+
+          - if:
+              properties:
+                function:
+                  const: pcie refclk
+            then:
+              properties:
+                groups:
+                  enum: [pcie]
+
+          - if:
+              properties:
+                function:
+                  const: pcie rst
+            then:
+              properties:
+                groups:
+                  enum: [pcie]
+
+          - if:
+              properties:
+                function:
+                  const: pcm
+            then:
+              properties:
+                groups:
+                  enum: [i2s]
+
+          - if:
+              properties:
+                function:
+                  const: pcm gpio
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: perst
+            then:
+              properties:
+                groups:
+                  enum: [perst]
+
+          - if:
+              properties:
+                function:
+                  const: pwm
+            then:
+              properties:
+                groups:
+                  enum: [uart1, uart2]
+
+          - if:
+              properties:
+                function:
+                  const: pwm0
+            then:
+              properties:
+                groups:
+                  enum: [pwm0]
+
+          - if:
+              properties:
+                function:
+                  const: pwm1
+            then:
+              properties:
+                groups:
+                  enum: [pwm1]
+
+          - if:
+              properties:
+                function:
+                  const: pwm_uart2
+            then:
+              properties:
+                groups:
+                  enum: [spis]
+
+          - if:
+              properties:
+                function:
+                  const: refclk
+            then:
+              properties:
+                groups:
+                  oneOf:
+                    - description: For MT7620 SoC
+                      enum: [mdio]
+
+                    - description: For MT7628 and MT7688 SoCs
+                      enum: [gpio, refclk, spi cs1]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii1
+            then:
+              properties:
+                groups:
+                  enum: [rgmii1]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii2
+            then:
+              properties:
+                groups:
+                  enum: [rgmii2]
+
+          - if:
+              properties:
+                function:
+                  const: rsvd
+            then:
+              properties:
+                groups:
+                  enum: [p0led_an, p0led_kn, wled_an, wled_kn]
+
+          - if:
+              properties:
+                function:
+                  const: sd
+            then:
+              properties:
+                groups:
+                  enum: [nd_sd]
+
+          - if:
+              properties:
+                function:
+                  const: sdxc
+            then:
+              properties:
+                groups:
+                  enum: [sdmode]
+
+          - if:
+              properties:
+                function:
+                  const: sdxc d5 d4
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: sdxc d6
+            then:
+              properties:
+                groups:
+                  enum: [pwm1]
+
+          - if:
+              properties:
+                function:
+                  const: sdxc d7
+            then:
+              properties:
+                groups:
+                  enum: [pwm0]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: spi cs1
+            then:
+              properties:
+                groups:
+                  enum: [spi cs1]
+
+          - if:
+              properties:
+                function:
+                  const: spi refclk
+            then:
+              properties:
+                groups:
+                  enum: [spi refclk]
+
+          - if:
+              properties:
+                function:
+                  const: spis
+            then:
+              properties:
+                groups:
+                  enum: [spis]
+
+          - if:
+              properties:
+                function:
+                  const: sw_r
+            then:
+              properties:
+                groups:
+                  enum: [uart1]
+
+          - if:
+              properties:
+                function:
+                  const: uart0
+            then:
+              properties:
+                groups:
+                  enum: [uart0]
+
+          - if:
+              properties:
+                function:
+                  const: uart1
+            then:
+              properties:
+                groups:
+                  enum: [uart1]
+
+          - if:
+              properties:
+                function:
+                  const: uart2
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: uartlite
+            then:
+              properties:
+                groups:
+                  enum: [uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: utif
+            then:
+              properties:
+                groups:
+                  enum: [p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an,
+                         p3led_kn, p4led_an, p4led_kn, pwm0, pwm1, sdmode, spis]
+
+          - if:
+              properties:
+                function:
+                  const: wdt
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
+          - if:
+              properties:
+                function:
+                  const: wdt refclk
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
+          - if:
+              properties:
+                function:
+                  const: wdt rst
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
+          - if:
+              properties:
+                function:
+                  const: wled
+            then:
+              properties:
+                groups:
+                  enum: [wled]
+
+          - if:
+              properties:
+                function:
+                  const: wled_an
+            then:
+              properties:
+                groups:
+                  enum: [wled_an]
+
+          - if:
+              properties:
+                function:
+                  const: wled_kn
+            then:
+              properties:
+                groups:
+                  enum: [wled_kn]
+
+          - if:
+              properties:
+                function:
+                  const: "-"
+            then:
+              properties:
+                groups:
+                  enum: [i2c, spi cs1, uart0]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -83,7 +644,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,mt7620-pinctrl";
-- 
2.37.2



From arinc.unal at arinc9.com  Tue Dec 13 05:04:27 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Tue, 13 Dec 2022 16:04:27 +0300
Subject: [PATCH 3/6] dt-bindings: pinctrl: mt7621: add proper function muxing binding
In-Reply-To: <20221213130430.172876-1-arinc.unal@arinc9.com>
References: <20221213130430.172876-1-arinc.unal@arinc9.com>
Message-ID: <20221213130430.172876-4-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 .../pinctrl/ralink,mt7621-pinctrl.yaml        | 204 +++++++++++++++++-
 1 file changed, 197 insertions(+), 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
index 61e5c847e8c8..0efb03f1d88e 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
@@ -29,21 +29,212 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [i2c, jtag, mdio, pcie, rgmii1, rgmii2, sdhci, spi, uart1,
-                   uart2, uart3, wdt]
-
           function:
-            description: The mux function to select.
+            description:
+              A string containing the name of the function to mux to the group.
             enum: [gpio, i2c, i2s, jtag, mdio, nand1, nand2, pcie refclk,
                    pcie rst, pcm, rgmii1, rgmii2, sdhci, spdif2, spdif3, spi,
                    uart1, uart2, uart3, wdt refclk, wdt rst]
 
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
+
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  enum: [i2c, jtag, mdio, pcie, rgmii1, rgmii2, sdhci, spi,
+                         uart1, uart2, uart3, wdt]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: i2s
+            then:
+              properties:
+                groups:
+                  enum: [uart3]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [jtag]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: nand1
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: nand2
+            then:
+              properties:
+                groups:
+                  enum: [sdhci]
+
+          - if:
+              properties:
+                function:
+                  const: pcie refclk
+            then:
+              properties:
+                groups:
+                  enum: [pcie]
+
+          - if:
+              properties:
+                function:
+                  const: pcie rst
+            then:
+              properties:
+                groups:
+                  enum: [pcie]
+
+          - if:
+              properties:
+                function:
+                  const: pcm
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii1
+            then:
+              properties:
+                groups:
+                  enum: [rgmii1]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii2
+            then:
+              properties:
+                groups:
+                  enum: [rgmii2]
+
+          - if:
+              properties:
+                function:
+                  const: sdhci
+            then:
+              properties:
+                groups:
+                  enum: [sdhci]
+
+          - if:
+              properties:
+                function:
+                  const: spdif2
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: spdif3
+            then:
+              properties:
+                groups:
+                  enum: [uart3]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: uart1
+            then:
+              properties:
+                groups:
+                  enum: [uart1]
+
+          - if:
+              properties:
+                function:
+                  const: uart2
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: uart3
+            then:
+              properties:
+                groups:
+                  enum: [uart3]
+
+          - if:
+              properties:
+                function:
+                  const: wdt refclk
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
+          - if:
+              properties:
+                function:
+                  const: wdt rst
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -57,7 +248,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,mt7621-pinctrl";
-- 
2.37.2



From arinc.unal at arinc9.com  Tue Dec 13 05:04:28 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Tue, 13 Dec 2022 16:04:28 +0300
Subject: [PATCH 4/6] dt-bindings: pinctrl: rt2880: add proper function muxing binding
In-Reply-To: <20221213130430.172876-1-arinc.unal@arinc9.com>
References: <20221213130430.172876-1-arinc.unal@arinc9.com>
Message-ID: <20221213130430.172876-5-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 .../pinctrl/ralink,rt2880-pinctrl.yaml        | 85 +++++++++++++++++--
 1 file changed, 79 insertions(+), 6 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml
index 56e5becabcfd..f59ddd5e6c2b 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml
@@ -29,18 +29,92 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [i2c, spi, uartlite, jtag, mdio, sdram, pci]
-
           function:
-            description: The mux function to select.
+            description:
+              A string containing the name of the function to mux to the group.
             enum: [gpio, i2c, spi, uartlite, jtag, mdio, sdram, pci]
 
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
+
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  enum: [i2c, spi, uartlite, jtag, mdio, sdram, pci]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: uartlite
+            then:
+              properties:
+                groups:
+                  enum: [uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [jtag]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: sdram
+            then:
+              properties:
+                groups:
+                  enum: [sdram]
+
+          - if:
+              properties:
+                function:
+                  const: pci
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -54,7 +128,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,rt2880-pinctrl";
-- 
2.37.2



From arinc.unal at arinc9.com  Tue Dec 13 05:04:29 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Tue, 13 Dec 2022 16:04:29 +0300
Subject: [PATCH 5/6] dt-bindings: pinctrl: rt305x: add proper function muxing binding
In-Reply-To: <20221213130430.172876-1-arinc.unal@arinc9.com>
References: <20221213130430.172876-1-arinc.unal@arinc9.com>
Message-ID: <20221213130430.172876-6-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 .../pinctrl/ralink,rt305x-pinctrl.yaml        | 235 ++++++++++++++++--
 1 file changed, 210 insertions(+), 25 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml
index f602a5d6e13a..30779a1a90b0 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml
@@ -30,38 +30,224 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [
-              # common
-              i2c, jtag, led, mdio, rgmii, spi, spi_cs1, uartf, uartlite,
-
-              # For RT3050, RT3052 and RT3350 SoCs
-              sdram,
-
-              # For RT3352 SoC
-              lna, pa
-            ]
-
           function:
-            description: The mux function to select.
-            enum: [
-              # common
-              gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag, led, mdio,
-              pcm gpio, pcm i2s, pcm uartf, rgmii, spi, spi_cs1, uartf,
-              uartlite, wdg_cs1,
+            description:
+              A string containing the name of the function to mux to the group.
+            anyOf:
+              - description: For RT3050, RT3052 and RT3350 SoCs
+                enum: [gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag, mdio,
+                       pcm gpio, pcm i2s, pcm uartf, rgmii, sdram, spi, uartf,
+                       uartlite]
 
-              # For RT3050, RT3052 and RT3350 SoCs
-              sdram,
+              - description: For RT3352 SoC
+                enum: [gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag, led,
+                       lna, mdio, pa, pcm gpio, pcm i2s, pcm uartf, rgmii, spi,
+                       spi_cs1, uartf, uartlite, wdg_cs1]
 
-              # For RT3352 SoC
-              lna, pa
-            ]
+              - description: For RT5350 SoC
+                enum: [gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag, led,
+                       pcm gpio, pcm i2s, pcm uartf, spi, spi_cs1, uartf,
+                       uartlite, wdg_cs1]
+
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
 
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  oneOf:
+                    - description: For RT3050, RT3052 and RT3350 SoCs
+                      enum: [i2c, jtag, mdio, rgmii, sdram, spi, uartf,
+                             uartlite]
+
+                    - description: For RT3352 SoC
+                      enum: [i2c, jtag, led, lna, mdio, pa, rgmii, spi, spi_cs1,
+                             uartf, uartlite]
+
+                    - description: For RT5350 SoC
+                      enum: [i2c, jtag, led, spi, spi_cs1, uartf, uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: gpio i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: gpio uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: i2s uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [jtag]
+
+          - if:
+              properties:
+                function:
+                  const: led
+            then:
+              properties:
+                groups:
+                  enum: [led]
+
+          - if:
+              properties:
+                function:
+                  const: lna
+            then:
+              properties:
+                groups:
+                  enum: [lna]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: pa
+            then:
+              properties:
+                groups:
+                  enum: [pa]
+
+          - if:
+              properties:
+                function:
+                  const: pcm gpio
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii
+            then:
+              properties:
+                groups:
+                  enum: [rgmii]
+
+          - if:
+              properties:
+                function:
+                  const: sdram
+            then:
+              properties:
+                groups:
+                  enum: [sdram]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: spi_cs1
+            then:
+              properties:
+                groups:
+                  enum: [spi_cs1]
+
+          - if:
+              properties:
+                function:
+                  const: uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: uartlite
+            then:
+              properties:
+                groups:
+                  enum: [uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: wdg_cs1
+            then:
+              properties:
+                groups:
+                  enum: [spi_cs1]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -75,7 +261,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,rt305x-pinctrl";
-- 
2.37.2



From arinc.unal at arinc9.com  Tue Dec 13 05:04:30 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Tue, 13 Dec 2022 16:04:30 +0300
Subject: [PATCH 6/6] dt-bindings: pinctrl: rt3883: add proper function muxing binding
In-Reply-To: <20221213130430.172876-1-arinc.unal@arinc9.com>
References: <20221213130430.172876-1-arinc.unal@arinc9.com>
Message-ID: <20221213130430.172876-7-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 .../pinctrl/ralink,rt3883-pinctrl.yaml        | 204 +++++++++++++++++-
 1 file changed, 197 insertions(+), 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,rt3883-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,rt3883-pinctrl.yaml
index feb6e66dcb61..9fbd6de13c03 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,rt3883-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,rt3883-pinctrl.yaml
@@ -29,21 +29,212 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [ge1, ge2, i2c, jtag, lna a, lna g, mdio, pci, spi, uartf,
-                   uartlite]
-
           function:
-            description: The mux function to select.
+            description:
+              A string containing the name of the function to mux to the group.
             enum: [ge1, ge2, gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag,
                    lna a, lna g, mdio, pci-dev, pci-fnc, pci-host1, pci-host2,
                    pcm gpio, pcm i2s, pcm uartf, spi, uartf, uartlite]
 
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
+
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: ge1
+            then:
+              properties:
+                groups:
+                  enum: [ge1]
+
+          - if:
+              properties:
+                function:
+                  const: ge2
+            then:
+              properties:
+                groups:
+                  enum: [ge2]
+
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  enum: [ge1, ge2, i2c, jtag, lna a, lna g, mdio, pci, spi,
+                         uartf, uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: gpio i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: gpio uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: i2s uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [jtag]
+
+          - if:
+              properties:
+                function:
+                  const: lna a
+            then:
+              properties:
+                groups:
+                  enum: [lna a]
+
+          - if:
+              properties:
+                function:
+                  const: lna g
+            then:
+              properties:
+                groups:
+                  enum: [lna g]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: pci-dev
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
+          - if:
+              properties:
+                function:
+                  const: pci-fnc
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
+          - if:
+              properties:
+                function:
+                  const: pci-host1
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
+          - if:
+              properties:
+                function:
+                  const: pci-host2
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
+          - if:
+              properties:
+                function:
+                  const: pcm gpio
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: uartlite
+            then:
+              properties:
+                groups:
+                  enum: [uartlite]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -57,7 +248,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,rt3883-pinctrl";
-- 
2.37.2



From krzysztof.kozlowski at linaro.org  Tue Dec 13 05:37:22 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Tue, 13 Dec 2022 14:37:22 +0100
Subject: [PATCH v3 12/12] dt-bindings: mediatek: mt8188: add mt8188-mt6359
 document
In-Reply-To: <aeb2bbac8ad5ede2396408a20ff8c8942029451a.camel@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
 <20221208033148.21866-13-trevor.wu@mediatek.com>
 <6350def8-bb1f-8aeb-4c98-4d02a4c59aed@linaro.org>
 <aeb2bbac8ad5ede2396408a20ff8c8942029451a.camel@mediatek.com>
Message-ID: <769dbb36-2223-91a3-0d6b-e23304827c43@linaro.org>

On 12/12/2022 16:34, Trevor Wu (???) wrote:
> On Fri, 2022-12-09 at 11:18 +0100, Krzysztof Kozlowski wrote:
>> On 08/12/2022 04:31, Trevor Wu wrote:
>>> Add document for mt8188 board with mt6359.
>>>
>>> Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
>>> ---
>>>  .../bindings/sound/mt8188-mt6359.yaml         | 60
>>> +++++++++++++++++++
>>>  1 file changed, 60 insertions(+)
>>>  create mode 100644 Documentation/devicetree/bindings/sound/mt8188-
>>> mt6359.yaml
>>>
>>> diff --git a/Documentation/devicetree/bindings/sound/mt8188-
>>> mt6359.yaml b/Documentation/devicetree/bindings/sound/mt8188-
>>> mt6359.yaml
>>> new file mode 100644
>>> index 000000000000..eac1c87b693a
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/sound/mt8188-mt6359.yaml
>>
>> Missing vendor prefix. You got comments for it already.
> Hi Krzysztof,
> 
> I will correct it in V4.
> 
>>
>>> @@ -0,0 +1,60 @@
>>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>>> +%YAML 1.2
>>> +---
>>> +$id: 
>>> https://urldefense.com/v3/__http://devicetree.org/schemas/sound/mt8188-mt6359.yaml*__;Iw!!CTRNKA9wMg0ARbw!nw_OzBIRlXrEP6K_EtxEWAIZzuvnD3Dm_KDuv8gpLRqlnnSfVLksNfKqMmeYiFlEVVy6F2BXwmXB8oQkDPeBuEXMtfLX2w$?
>>>  
>>> +$schema: 
>>> https://urldefense.com/v3/__http://devicetree.org/meta-schemas/core.yaml*__;Iw!!CTRNKA9wMg0ARbw!nw_OzBIRlXrEP6K_EtxEWAIZzuvnD3Dm_KDuv8gpLRqlnnSfVLksNfKqMmeYiFlEVVy6F2BXwmXB8oQkDPeBuEXodFoCJA$?
>>>  
>>> +
>>> +title: MediaTek MT8188 ASoC sound card
>>> +
>>> +maintainers:
>>> +  - Trevor Wu <trevor.wu at mediatek.com>
>>> +
>>> +properties:
>>> +  compatible:
>>> +    const: mediatek,mt8188-mt6359-evb
>>> +
>>> +  model:
>>> +    $ref: /schemas/types.yaml#/definitions/string
>>> +    description: User specified audio sound card name
>>> +
>>> +  audio-routing:
>>> +    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
>>> +    description:
>>> +      A list of the connections between audio components. Each
>>> entry is a
>>> +      sink/source pair of strings. Valid names could be the input
>>> or output
>>> +      widgets of audio components, power supplies, MicBias of
>>> codec and the
>>> +      software switch.
>>> +
>>> +  mediatek,platform:
>>> +    $ref: /schemas/types.yaml#/definitions/phandle
>>> +    description: The phandle of MT8188 ASoC platform.
>>> +
>>> +  mediatek,dptx-codec:
>>> +    $ref: /schemas/types.yaml#/definitions/phandle
>>> +    description: The phandle of MT8188 Display Port Tx codec node.
>>> +
>>> +  mediatek,hdmi-codec:
>>> +    $ref: /schemas/types.yaml#/definitions/phandle
>>> +    description: The phandle of MT8188 HDMI codec node.
>>
>> Why you do not use DAI links for all these?
> 
> Are the following examples "DAI links" you mean?
> 
> hdmi-dai-link {
>             link-name = "HDMI Playback";
>             cpu {
>                 sound-dai = <&q6afedai TERTIARY_MI2S_RX>;
>             };
> 
>             platform {
>                 sound-dai = <&q6routing>;
>             };
> 
>             codec {
>                 sound-dai = <&lt9611_codec 0>;
>             };
>         };

Yes, this one. I think this is preferred. But anyway the point is to use
sound-dai-cells, not pure (non-DAI) phandles).

> 
> or
> 
> headset-codec {
> 		sound-dai = <&rt5682s>;
> };
> 
> 
> As far as I know, only "mediatek,platform" was used at the beginning.
> Next, hdmi-codec was introduced, and it followed the same style to get
> phandle. Finally, it became three properties in mt8195, and the
> implementation of mt8188 was inherited from mt8195.

OK, if you share common code it is fine.
> 
> I just glanced over the usage of dai links.
> As I see it, I will replace the codec parts with dai link structure
> like the example above first. It seems to be easier to extend more
> codecs with the same tyle.

Would be good.

> 
> For platform part, I need more time to check if it is better to keep
> the original implementation, because we still have to take SOF related 
> implementation into consideration.

OK


Best regards,
Krzysztof



From Jiaxin.Yu at mediatek.com  Tue Dec 13 06:23:32 2022
From: Jiaxin.Yu at mediatek.com (=?utf-8?B?SmlheGluIFl1ICjkv57lrrbpkasp?=)
Date: Tue, 13 Dec 2022 14:23:32 +0000
Subject: [PATCH v2 1/3] ASoC: hdmi-codec: Add event handler for hdmi TX
In-Reply-To: <Y43e+EsNCrCpZSIH@sirena.org.uk>
References: <20221125094413.4940-1-jiaxin.yu@mediatek.com>
	 <20221125094413.4940-2-jiaxin.yu@mediatek.com>
	 <Y4Cysgk5Gic5ae9B@sirena.org.uk>
	 <18c82f6f723cd97a9d6b9a7ff16c6ed62fd005d6.camel@mediatek.com>
	 <Y4Y/vEWe3dw0FPQH@sirena.org.uk>
	 <cf9ea98a3263ffb8fc8b542888ad0ad680facfc7.camel@mediatek.com>
	 <Y4jHAJgmz/P58Q/C@sirena.org.uk>
	 <7023a2c7b471d6888d9079563a6c01f22599201f.camel@mediatek.com>
	 <Y43e+EsNCrCpZSIH@sirena.org.uk>
Message-ID: <dc50d0b21795acbcc44c77e5fd81e7cb92c65c67.camel@mediatek.com>

On Mon, 2022-12-05 at 12:07 +0000, Mark Brown wrote:
> On Mon, Dec 05, 2022 at 09:34:17AM +0000, Jiaxin Yu (???) wrote:
> 
> > 1. I have added a DAPM widget that is "SDB", when we open or close
> > HDMI
> > PIN_SWITCH, the callback 'hdmi_tx_event' registered in the widget
> > will
> > be triggered. Maybe you mean I shouldn't use
> > SNDRV_PCM_TRIGGER_START
> > and SNDRV_PCM_TRIGGER_STOP?
> 
> No, I mean that if you want to control the enable and disable of the
> output path you should implement a DAPM widget.
> 
May I ask which driver file to add a new DAPM widget? Is it the bridge
ic driver like it6505.c? Or is it linke the "SDB" added in this patch?

> > 2. If I don't use hcd.ops->trigger notifies the bridge ic driver to
> > switch the audio, which ops should I use?
> > I actually want to know hdmi-codec.c and it6505.c except
> > hdmi_codec_ops, is there any other way to communicate?
> 
> Like I said you should use the event on the DAPM widget.  This will
> require providing operations for the events to the drivers.
Yes, I should add a new set of events, such as:

enum {
    HDMI_CODEC_TRIGGER_EVENT_STOP,
    HDMI_CODEC_TRIGGER_EVENT_START,
    HDMI_CODEC_TRIGGER_EVENT_SUSPEND,
    HDMI_CODEC_TRIGGER_EVENT_RESUME,
}

Then provide handles for these events in the it6505 driver. Am I right?


Thanks,
Jiaxin.Yu

From Trevor.Wu at mediatek.com  Tue Dec 13 06:30:51 2022
From: Trevor.Wu at mediatek.com (=?utf-8?B?VHJldm9yIFd1ICjlkLPmlofoia8p?=)
Date: Tue, 13 Dec 2022 14:30:51 +0000
Subject: [PATCH v3 05/12] ASoC: mediatek: mt8188: support etdm in platform
 driver
In-Reply-To: <869cfa5a-2cfa-e5b7-b8f5-a79b9b364b25@collabora.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
	 <20221208033148.21866-6-trevor.wu@mediatek.com>
	 <869cfa5a-2cfa-e5b7-b8f5-a79b9b364b25@collabora.com>
Message-ID: <b7ef068fa748c145d98161f6e0933f6cb5f3eb5d.camel@mediatek.com>

On Tue, 2022-12-13 at 11:45 +0100, AngeloGioacchino Del Regno wrote:
> Il 08/12/22 04:31, Trevor Wu ha scritto:
> > Add mt8188 etdm dai driver support.
> > 
> > Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
> > ---
> > I don't add Reviewed-by tag because one new header file is included
> > in the patch to resolve compiling issue found by kernel test robot.
> > Additionally, I re-layout the code for better understanding of the
> > follow-up patch.
> > ---
> >   sound/soc/mediatek/mt8188/mt8188-dai-etdm.c | 2591
> > +++++++++++++++++++
> >   1 file changed, 2591 insertions(+)
> >   create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
> > 
> > diff --git a/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
> > b/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
> > new file mode 100644
> > index 000000000000..c653fa5e3f85
> > --- /dev/null
> > +++ b/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
> 
> ..snip..
> 
> > +
> > +static void mt8188_dai_etdm_parse_of(struct mtk_base_afe *afe)
> > +{
> > +	const struct device_node *of_node = afe->dev->of_node;
> > +	struct mt8188_afe_private *afe_priv = afe->platform_priv;
> > +	struct mtk_dai_etdm_priv *etdm_data;
> > +	int i, j;
> > +	char prop[48];
> > +	u8 disable_chn[MT8188_ETDM_MAX_CHANNELS];
> > +	int max_chn = MT8188_ETDM_MAX_CHANNELS;
> > +	u32 sel;
> > +	int ret;
> > +	int dai_id;
> > +	unsigned int sync_id;
> > +	struct {
> > +		const char *name;
> > +		const unsigned int sync_id;
> > +	} of_afe_etdms[MT8188_AFE_IO_ETDM_NUM] = {
> > +		{"etdm-in1", ETDM_SYNC_FROM_IN1},
> > +		{"etdm-in2", ETDM_SYNC_FROM_IN2},
> > +		{"etdm-out1", ETDM_SYNC_FROM_OUT1},
> > +		{"etdm-out2", ETDM_SYNC_FROM_OUT2},
> > +		{"etdm-out3", ETDM_SYNC_FROM_OUT3},
> > +	};
> > +
> > +	for (i = 0; i < MT8188_AFE_IO_ETDM_NUM; i++) {
> > +		dai_id = ETDM_TO_DAI_ID(i);
> > +		etdm_data = afe_priv->dai_priv[dai_id];
> > +
> > +		ret = snprintf(prop, sizeof(prop),
> > +			       "mediatek,%s-mclk-always-on-rate",
> > +			       of_afe_etdms[i].name);
> > +		if (ret < 0) {
> > +			dev_info(afe->dev, "%s snprintf err=%d\n",
> 
> Is this property optional? If yes, this dev_info() must be a
> dev_dbg(),
> otherwise, this must be a dev_err().
> 
> Please fix all prints to use the right message level.

Hi Angelo,

Yes, this property is optional, so I don't use dev_err here.
dev_dbg is hard to find the problem.
I will make use of dev_err instead of dev_info in V4.

> 
> > +				 __func__, ret);
> > +			return;
> 
> Also, is it possible to specify this property only on selected eTDMs?
> 
> As it is right now, if anyone wants to specify this only on, for
> example,
> etdm-out1 and out2, that won't work.
> In that case, you should replace that return with a `continue`.
> 
> P.S.: I'm raising this question because you're not forcing "all or
> nothing"
>        in commit [10/12] where you introduce the bindings for this
> driver,
>        so I suppose that returning (hence stopping to parse) is a
> mistake.
> 

It is OK to specify only etdm-out1 and out2 on.
This is just an simple error handling for snprintf to silence coverity.
Because it shouldn't happen, I don't return an error value to make
probe failed.

Thanks,
Trevor

> > +		}
> > +		ret = of_property_read_u32(of_node, prop, &sel);
> > +		if (ret == 0) {
> > +			etdm_data->mclk_dir = SND_SOC_CLOCK_OUT;
> > +			if (mtk_dai_etdm_cal_mclk(afe, sel, dai_id))
> > +				dev_info(afe->dev, "%s unsupported mclk
> > %uHz\n",
> > +					 __func__, sel);
> > +		}
> > +
> 
> 
> Regards,
> Angelo
> 

From Trevor.Wu at mediatek.com  Tue Dec 13 07:06:03 2022
From: Trevor.Wu at mediatek.com (=?utf-8?B?VHJldm9yIFd1ICjlkLPmlofoia8p?=)
Date: Tue, 13 Dec 2022 15:06:03 +0000
Subject: [PATCH v3 10/12] dt-bindings: mediatek: mt8188: add audio afe
 document
In-Reply-To: <e20884d2-5d30-9519-d070-8e2ac07f2171@linaro.org>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
	 <20221208033148.21866-11-trevor.wu@mediatek.com>
	 <d7d9f3c7-b3e3-1e13-a80f-c7bf7b38a5b1@linaro.org>
	 <45b4b287dfd57b99e0ba5675bf99194f6d84d9da.camel@mediatek.com>
	 <fb34e446-2904-a357-e54b-3e82a2b0745c@linaro.org>
	 <e08fab2a694313abc12e0f8303de3e2e704b388c.camel@mediatek.com>
	 <e20884d2-5d30-9519-d070-8e2ac07f2171@linaro.org>
Message-ID: <6eae5d7eef22443b6152c6655c89bdfd70e59089.camel@mediatek.com>

On Mon, 2022-12-12 at 09:40 +0100, Krzysztof Kozlowski wrote:
> On 12/12/2022 03:43, Trevor Wu (???) wrote:
> > > > 
> > > > > > +    uniqueItems: true
> > > > > > +    items:
> > > > > > +      minimum: 0
> > > > > > +      maximum: 15
> > > > > > +
> > > > > > +  "^mediatek,etdm-in[1-2]-mclk-always-on-rate-hz$":
> > > > > > +    description: Specify etdm in mclk output rate for
> > > > > > always
> > > > > > on
> > > > > > case.
> > > > > 
> > > > > How is it different than assigned-clock-rates?
> > > > > 
> > > > 
> > > > This includes clock enabling at init stage.
> > > 
> > > assigned-clock-rates are also at init stage. I asked what is
> > > different.
> > > 
> > 
> > If the property is used, there are three parts included in dai
> > driver
> > probe function.
> > 
> > 1. set clock parent (which APLL)
> > 2. set clock rate (MCLK rate)
> > 3. enable clock (MCLK On)
> > 
> > The first two parts can be done by existing dts clock properties,
> > but
> > the last one can't.
> > When MCLK should be enabled at boot time and kept on, this property
> > is used. That's why I say the property is designed for always-on
> > case.
> 
> Heh, so the "always on case" means this property enables clock? How
> is
> this even DT property? That's not how clocks should be kept enabled.
> You
> need proper clock provider and consumer.
> 
> 

Hi Krzysztof,

Sorry, I don't know it is not appropriate to notify driver that the
clock should be ketp enabled after boot.

The original idea is that enabling this clock in the machine driver,
but a property to inform machine driver is also required when the
machine driver is shared by different codec combination. And it's
easier to handle set_rate and set_parent in etdm dai driver, so I put
the property here.

Do you mean if the clock consumer(audio codec or external DSP) requries
the clock, the consumer should enable the clock by itself?

Thanks,
Trevor

From broonie at kernel.org  Tue Dec 13 08:35:14 2022
From: broonie at kernel.org (Mark Brown)
Date: Tue, 13 Dec 2022 16:35:14 +0000
Subject: [PATCH v2 1/3] ASoC: hdmi-codec: Add event handler for hdmi TX
In-Reply-To: <dc50d0b21795acbcc44c77e5fd81e7cb92c65c67.camel@mediatek.com>
References: <20221125094413.4940-1-jiaxin.yu@mediatek.com>
 <20221125094413.4940-2-jiaxin.yu@mediatek.com>
 <Y4Cysgk5Gic5ae9B@sirena.org.uk>
 <18c82f6f723cd97a9d6b9a7ff16c6ed62fd005d6.camel@mediatek.com>
 <Y4Y/vEWe3dw0FPQH@sirena.org.uk>
 <cf9ea98a3263ffb8fc8b542888ad0ad680facfc7.camel@mediatek.com>
 <Y4jHAJgmz/P58Q/C@sirena.org.uk>
 <7023a2c7b471d6888d9079563a6c01f22599201f.camel@mediatek.com>
 <Y43e+EsNCrCpZSIH@sirena.org.uk>
 <dc50d0b21795acbcc44c77e5fd81e7cb92c65c67.camel@mediatek.com>
Message-ID: <Y5ipwqzHKTK8UdlC@sirena.org.uk>

On Tue, Dec 13, 2022 at 02:23:32PM +0000, Jiaxin Yu (???) wrote:
> On Mon, 2022-12-05 at 12:07 +0000, Mark Brown wrote:
> > On Mon, Dec 05, 2022 at 09:34:17AM +0000, Jiaxin Yu (???) wrote:

> > No, I mean that if you want to control the enable and disable of the
> > output path you should implement a DAPM widget.

> May I ask which driver file to add a new DAPM widget? Is it the bridge
> ic driver like it6505.c? Or is it linke the "SDB" added in this patch?

I would expect this to follow a similar pattern to everything else with
hdmi-codec.c and have the actual ASoC stuff in there with a callback
exposed to the rest of the world.

> Yes, I should add a new set of events, such as:

> enum {
>     HDMI_CODEC_TRIGGER_EVENT_STOP,
>     HDMI_CODEC_TRIGGER_EVENT_START,
>     HDMI_CODEC_TRIGGER_EVENT_SUSPEND,
>     HDMI_CODEC_TRIGGER_EVENT_RESUME,
> }

> Then provide handles for these events in the it6505 driver. Am I right?

I'd expect more like on/off for a DAPM widget (the DAPM callbacks are
pre/post on/off) but yes.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221213/8d29f36b/attachment.sig>

From broonie at kernel.org  Tue Dec 13 09:01:26 2022
From: broonie at kernel.org (Mark Brown)
Date: Tue, 13 Dec 2022 17:01:26 +0000
Subject: [PATCH v4 1/9] spi: mtk-snfi: Change default page format to
 setup default setting
In-Reply-To: <20221209064317.2828-2-xiangsheng.hou@mediatek.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
 <20221209064317.2828-2-xiangsheng.hou@mediatek.com>
Message-ID: <Y5iv5kPsOFm0OQni@sirena.org.uk>

On Fri, Dec 09, 2022 at 02:43:09PM +0800, Xiangsheng Hou wrote:
> Change default page format to setup default setting since the sector
> size 1024 on MT7986 will lead to probe fail.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> ---
>  drivers/spi/spi-mtk-snfi.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)

Angelo, you've not reviewed this one - is there some problem with it or
was it just missed?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221213/4cade10c/attachment.sig>

From cujomalainey at google.com  Tue Dec 13 10:13:26 2022
From: cujomalainey at google.com (Curtis Malainey)
Date: Tue, 13 Dec 2022 10:13:26 -0800
Subject: [PATCH] ASoC: SOF: mediatek: initialize panic_info to zero
In-Reply-To: <20221213115617.25086-1-yc.hung@mediatek.com>
References: <20221213115617.25086-1-yc.hung@mediatek.com>
Message-ID: <CAOReqxihOWVh0rGqwqCJ3SEOnEpH3RDQv-U1PEQJ6Tj5e02Vag@mail.gmail.com>

On Tue, Dec 13, 2022 at 3:56 AM YC Hung <yc.hung at mediatek.com> wrote:
>
> Coverity spotted that panic_info is not initialized to zero in
> mtk_adsp_dump. Using uninitialized value panic_info.linenum when
> calling snd_sof_get_status. Fix this coverity by initializing
> panic_info struct as zero.
>
> Signed-off-by: YC Hung <yc.hung at mediatek.com>

Reviewed-by: Curtis Malainey <cujomalainey at chromium.org>


From bero at baylibre.com  Tue Dec 13 15:43:44 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Wed, 14 Dec 2022 00:43:44 +0100
Subject: [PATCH v5 5/7] dt-bindings: usb: mediatek,mtu3: add MT8365 SoC bindings
In-Reply-To: <20221213234346.2868828-1-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
Message-ID: <20221213234346.2868828-6-bero@baylibre.com>

From: Fabien Parent <fparent at baylibre.com>

Add binding documentation for the MT8365 SoC.

Signed-off-by: Fabien Parent <fparent at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
---
 Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml b/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
index 7168110e2f9de..d2655173e108c 100644
--- a/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
+++ b/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
@@ -28,6 +28,7 @@ properties:
           - mediatek,mt8188-mtu3
           - mediatek,mt8192-mtu3
           - mediatek,mt8195-mtu3
+          - mediatek,mt8365-mtu3
       - const: mediatek,mtu3
 
   reg:
-- 
2.39.0



From bero at baylibre.com  Tue Dec 13 15:43:39 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Wed, 14 Dec 2022 00:43:39 +0100
Subject: [PATCH v5 0/7] Add minimal MT8365 and MT8365-EVK support
Message-ID: <20221213234346.2868828-1-bero@baylibre.com>

This adds minimal support for the MediaTek 8365 SOC and the EVK reference
board, allowing the board to boot to initramfs with serial port I/O.

v5:
  - Reorder top-level entries in mediatek,mt8365-pinctrl.yaml to match
    example-schema
  - Use consistent quotes

v4:
  - Remove pins-are-numbered references that have been holding things up
    now that the patches removing it from dt-bindings have landed in linux-next

v3:
  - Remove a number of components that are not yet supported (they will
    come back alongside the corresponding drivers)
  - Address issues found by dt_binding_check (mostly fixing pinctrl
    bindings)
  - Address issues pointed out in comments
  - Reorder patches

v2:
  - Add missing dt-bindings documentation
  - Small cleanups addressing issues in v1 pointed out by Krzysztof Kozlowski

Bernhard Rosenkr?nzer (4):
  dt-bindings: arm64: dts: mediatek: Add mt8365-evk board
  dt-bindings: irq: mtk, sysirq: add support for mt8365
  dt-bindings: mfd: syscon: Add mt8365-syscfg
  dt-bindings: pinctrl: add bindings for Mediatek MT8365 SoC

Fabien Parent (3):
  dt-bindings: usb: mediatek,mtu3: add MT8365 SoC bindings
  dt-bindings: usb: mediatek,mtk-xhci: add MT8365 SoC bindings
  arm64: dts: mediatek: Initial mt8365-evk support

 .../devicetree/bindings/arm/mediatek.yaml     |   4 +
 .../interrupt-controller/mediatek,sysirq.txt  |   1 +
 .../devicetree/bindings/mfd/syscon.yaml       |   1 +
 .../pinctrl/mediatek,mt8365-pinctrl.yaml      | 197 ++++++++++
 .../bindings/usb/mediatek,mtk-xhci.yaml       |   1 +
 .../bindings/usb/mediatek,mtu3.yaml           |   1 +
 arch/arm64/boot/dts/mediatek/Makefile         |   1 +
 arch/arm64/boot/dts/mediatek/mt8365-evk.dts   | 163 +++++++++
 arch/arm64/boot/dts/mediatek/mt8365.dtsi      | 343 ++++++++++++++++++
 9 files changed, 712 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
 create mode 100644 arch/arm64/boot/dts/mediatek/mt8365-evk.dts
 create mode 100644 arch/arm64/boot/dts/mediatek/mt8365.dtsi

-- 
2.39.0



From bero at baylibre.com  Tue Dec 13 15:43:41 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Wed, 14 Dec 2022 00:43:41 +0100
Subject: [PATCH v5 2/7] dt-bindings: irq: mtk, sysirq: add support for mt8365
In-Reply-To: <20221213234346.2868828-1-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
Message-ID: <20221213234346.2868828-3-bero@baylibre.com>

Add binding documentation of mediatek,sysirq for mt8365 SoC.

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../devicetree/bindings/interrupt-controller/mediatek,sysirq.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt b/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt
index 84ced3f4179b9..3ffc60184e445 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt
+++ b/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt
@@ -25,6 +25,7 @@ Required properties:
 	"mediatek,mt6577-sysirq": for MT6577
 	"mediatek,mt2712-sysirq", "mediatek,mt6577-sysirq": for MT2712
 	"mediatek,mt2701-sysirq", "mediatek,mt6577-sysirq": for MT2701
+	"mediatek,mt8365-sysirq", "mediatek,mt6577-sysirq": for MT8365
 - interrupt-controller : Identifies the node as an interrupt controller
 - #interrupt-cells : Use the same format as specified by GIC in arm,gic.txt.
 - reg: Physical base address of the intpol registers and length of memory
-- 
2.39.0



From bero at baylibre.com  Tue Dec 13 15:43:42 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Wed, 14 Dec 2022 00:43:42 +0100
Subject: [PATCH v5 3/7] dt-bindings: mfd: syscon: Add mt8365-syscfg
In-Reply-To: <20221213234346.2868828-1-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
Message-ID: <20221213234346.2868828-4-bero@baylibre.com>

Document Mediatek mt8365-syscfg

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 Documentation/devicetree/bindings/mfd/syscon.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/mfd/syscon.yaml b/Documentation/devicetree/bindings/mfd/syscon.yaml
index 1b01bd0104316..7beeb0abc4db0 100644
--- a/Documentation/devicetree/bindings/mfd/syscon.yaml
+++ b/Documentation/devicetree/bindings/mfd/syscon.yaml
@@ -50,6 +50,7 @@ properties:
               - marvell,armada-3700-usb2-host-misc
               - mediatek,mt8135-pctl-a-syscfg
               - mediatek,mt8135-pctl-b-syscfg
+              - mediatek,mt8365-syscfg
               - microchip,lan966x-cpu-syscon
               - microchip,sparx5-cpu-syscon
               - mstar,msc313-pmsleep
-- 
2.39.0



From bero at baylibre.com  Tue Dec 13 15:43:40 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Wed, 14 Dec 2022 00:43:40 +0100
Subject: [PATCH v5 1/7] dt-bindings: arm64: dts: mediatek: Add mt8365-evk board
In-Reply-To: <20221213234346.2868828-1-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
Message-ID: <20221213234346.2868828-2-bero@baylibre.com>

Add bindings for the Mediatek mt8365-evk board.

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 Documentation/devicetree/bindings/arm/mediatek.yaml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/mediatek.yaml b/Documentation/devicetree/bindings/arm/mediatek.yaml
index 2275e5d93721b..ae12b1cab9fbd 100644
--- a/Documentation/devicetree/bindings/arm/mediatek.yaml
+++ b/Documentation/devicetree/bindings/arm/mediatek.yaml
@@ -244,6 +244,10 @@ properties:
           - enum:
               - mediatek,mt8183-pumpkin
           - const: mediatek,mt8183
+      - items:
+          - enum:
+              - mediatek,mt8365-evk
+          - const: mediatek,mt8365
       - items:
           - enum:
               - mediatek,mt8516-pumpkin
-- 
2.39.0



From bero at baylibre.com  Tue Dec 13 15:43:43 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Wed, 14 Dec 2022 00:43:43 +0100
Subject: [PATCH v5 4/7] dt-bindings: pinctrl: add bindings for Mediatek MT8365 SoC
In-Reply-To: <20221213234346.2868828-1-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
Message-ID: <20221213234346.2868828-5-bero@baylibre.com>

Add devicetree bindings for Mediatek MT8365 pinctrl driver.

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
---
 .../pinctrl/mediatek,mt8365-pinctrl.yaml      | 197 ++++++++++++++++++
 1 file changed, 197 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml

diff --git a/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
new file mode 100644
index 0000000000000..3c0248b48caff
--- /dev/null
+++ b/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
@@ -0,0 +1,197 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/pinctrl/mediatek,mt8365-pinctrl.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Mediatek MT8365 Pin Controller
+
+maintainers:
+  - Zhiyong Tao <zhiyong.tao at mediatek.com>
+  - Bernhard Rosenkr?nzer <bero at baylibre.com>
+
+description: |
+  The MediaTek's MT8365 Pin controller is used to control SoC pins.
+
+properties:
+  compatible:
+    const: mediatek,mt8365-pinctrl
+
+  reg:
+    maxItems: 1
+
+  mediatek,pctl-regmap:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      maxItems: 1
+    minItems: 1
+    maxItems: 2
+    description: |
+      Should be phandles of the syscfg node.
+
+  gpio-controller: true
+
+  "#gpio-cells":
+    const: 2
+    description: |
+      Number of cells in GPIO specifier. Since the generic GPIO
+      binding is used, the amount of cells must be specified as 2. See the below
+      mentioned gpio binding representation for description of particular cells.
+
+  interrupt-controller: true
+
+  interrupts:
+    maxItems: 1
+
+  "#interrupt-cells":
+    const: 2
+
+patternProperties:
+  "-pins$":
+    type: object
+    additionalProperties: false
+    patternProperties:
+      "pins$":
+        type: object
+        additionalProperties: false
+        description: |
+          A pinctrl node should contain at least one subnode representing the
+          pinctrl groups available on the machine. Each subnode will list the
+          pins it needs, and how they should be configured, with regard to muxer
+          configuration, pullups, drive strength, input enable/disable and input
+          schmitt.
+        $ref: /schemas/pinctrl/pincfg-node.yaml
+
+        properties:
+          pinmux:
+            description:
+              integer array, represents gpio pin number and mux setting.
+              Supported pin number and mux varies for different SoCs, and are
+              defined as macros in <soc>-pinfunc.h directly.
+
+          bias-disable: true
+
+          bias-pull-up:
+            description: |
+              Besides generic pinconfig options, it can be used as the pull up
+              settings for 2 pull resistors, R0 and R1. User can configure those
+              special pins.
+
+          bias-pull-down: true
+
+          input-enable: true
+
+          input-disable: true
+
+          output-low: true
+
+          output-high: true
+
+          input-schmitt-enable: true
+
+          input-schmitt-disable: true
+
+          mediatek,drive-strength-adv:
+            description: |
+              Describe the specific driving setup property.
+              For I2C pins, the existing generic driving setup can only support
+              2/4/6/8/10/12/14/16mA driving. But in specific driving setup, they
+              can support 0.125/0.25/0.5/1mA adjustment. If we enable specific
+              driving setup, the existing generic setup will be disabled.
+              The specific driving setup is controlled by E1E0EN.
+              When E1=0/E0=0, the strength is 0.125mA.
+              When E1=0/E0=1, the strength is 0.25mA.
+              When E1=1/E0=0, the strength is 0.5mA.
+              When E1=1/E0=1, the strength is 1mA.
+              EN is used to enable or disable the specific driving setup.
+              Valid arguments are described as below:
+              0: (E1, E0, EN) = (0, 0, 0)
+              1: (E1, E0, EN) = (0, 0, 1)
+              2: (E1, E0, EN) = (0, 1, 0)
+              3: (E1, E0, EN) = (0, 1, 1)
+              4: (E1, E0, EN) = (1, 0, 0)
+              5: (E1, E0, EN) = (1, 0, 1)
+              6: (E1, E0, EN) = (1, 1, 0)
+              7: (E1, E0, EN) = (1, 1, 1)
+              So the valid arguments are from 0 to 7.
+            $ref: /schemas/types.yaml#/definitions/uint32
+            enum: [0, 1, 2, 3, 4, 5, 6, 7]
+
+          mediatek,pull-up-adv:
+            description: |
+              Pull up setings for 2 pull resistors, R0 and R1. User can
+              configure those special pins. Valid arguments are described as below:
+              0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
+              1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
+              2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
+              3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
+            $ref: /schemas/types.yaml#/definitions/uint32
+            enum: [0, 1, 2, 3]
+
+          mediatek,pull-down-adv:
+            description: |
+              Pull down settings for 2 pull resistors, R0 and R1. User can
+              configure those special pins. Valid arguments are described as below:
+              0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
+              1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
+              2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
+              3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
+            $ref: /schemas/types.yaml#/definitions/uint32
+            enum: [0, 1, 2, 3]
+
+          mediatek,tdsel:
+            description: |
+              An integer describing the steps for output level shifter duty
+              cycle when asserted (high pulse width adjustment). Valid arguments
+              are from 0 to 15.
+            $ref: /schemas/types.yaml#/definitions/uint32
+
+          mediatek,rdsel:
+            description: |
+              An integer describing the steps for input level shifter duty cycle
+              when asserted (high pulse width adjustment). Valid arguments are
+              from 0 to 63.
+            $ref: /schemas/types.yaml#/definitions/uint32
+
+        required:
+          - pinmux
+
+required:
+  - compatible
+  - reg
+  - gpio-controller
+  - "#gpio-cells"
+
+allOf:
+  - $ref: pinctrl.yaml#
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/pinctrl/mt8365-pinfunc.h>
+    soc {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        pio: pinctrl at 1000b000 {
+          compatible = "mediatek,mt8365-pinctrl";
+          reg = <0 0x1000b000 0 0x1000>;
+          mediatek,pctl-regmap = <&syscfg_pctl>;
+          gpio-controller;
+          #gpio-cells = <2>;
+          interrupt-controller;
+          #interrupt-cells = <2>;
+          interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
+
+          pio-pins {
+            pins {
+              pinmux = <MT8365_PIN_59_SDA1__FUNC_SDA1_0>, <MT8365_PIN_60_SCL1__FUNC_SCL1_0>;
+              mediatek,pull-up-adv = <3>;
+              mediatek,drive-strength-adv = <00>;
+              bias-pull-up;
+            };
+          };
+        };
+    };
-- 
2.39.0



From bero at baylibre.com  Tue Dec 13 15:43:45 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Wed, 14 Dec 2022 00:43:45 +0100
Subject: [PATCH v5 6/7] dt-bindings: usb: mediatek,mtk-xhci: add MT8365 SoC bindings
In-Reply-To: <20221213234346.2868828-1-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
Message-ID: <20221213234346.2868828-7-bero@baylibre.com>

From: Fabien Parent <fparent at baylibre.com>

Add binding documentation for the MT8365 SoC.

Signed-off-by: Fabien Parent <fparent at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
---
 Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml b/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml
index a3c37944c6305..c119caa9ad168 100644
--- a/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml
+++ b/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml
@@ -35,6 +35,7 @@ properties:
           - mediatek,mt8188-xhci
           - mediatek,mt8192-xhci
           - mediatek,mt8195-xhci
+          - mediatek,mt8365-xhci
       - const: mediatek,mtk-xhci
 
   reg:
-- 
2.39.0



From bero at baylibre.com  Tue Dec 13 15:43:46 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Wed, 14 Dec 2022 00:43:46 +0100
Subject: [PATCH v5 7/7] arm64: dts: mediatek: Initial mt8365-evk support
In-Reply-To: <20221213234346.2868828-1-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
Message-ID: <20221213234346.2868828-8-bero@baylibre.com>

From: Fabien Parent <fparent at baylibre.com>

This adds minimal support for the Mediatek 8365 SOC and the EVK reference
board, allowing the board to boot to initramfs with serial port I/O.

Signed-off-by: Fabien Parent <fparent at baylibre.com>
[bero at baylibre.com: Removed parts depending on drivers that aren't upstream yet, cleanups, add L2 cache]
Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Tested-by: Kevin Hilman <khilman at baylibre.com>
---
 arch/arm64/boot/dts/mediatek/Makefile       |   1 +
 arch/arm64/boot/dts/mediatek/mt8365-evk.dts | 163 ++++++++++
 arch/arm64/boot/dts/mediatek/mt8365.dtsi    | 343 ++++++++++++++++++++
 3 files changed, 507 insertions(+)
 create mode 100644 arch/arm64/boot/dts/mediatek/mt8365-evk.dts
 create mode 100644 arch/arm64/boot/dts/mediatek/mt8365.dtsi

diff --git a/arch/arm64/boot/dts/mediatek/Makefile b/arch/arm64/boot/dts/mediatek/Makefile
index 813e735c5b96d..d78523c5a7dd6 100644
--- a/arch/arm64/boot/dts/mediatek/Makefile
+++ b/arch/arm64/boot/dts/mediatek/Makefile
@@ -47,4 +47,5 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += mt8195-cherry-tomato-r2.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8195-cherry-tomato-r3.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8195-demo.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8195-evb.dtb
+dtb-$(CONFIG_ARCH_MEDIATEK) += mt8365-evk.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8516-pumpkin.dtb
diff --git a/arch/arm64/boot/dts/mediatek/mt8365-evk.dts b/arch/arm64/boot/dts/mediatek/mt8365-evk.dts
new file mode 100644
index 0000000000000..972843f9e4e9d
--- /dev/null
+++ b/arch/arm64/boot/dts/mediatek/mt8365-evk.dts
@@ -0,0 +1,163 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2021-2022 BayLibre, SAS.
+ * Authors:
+ * Fabien Parent <fparent at baylibre.com>
+ * Bernhard Rosenkr?nzer <bero at baylibre.com>
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/pinctrl/mt8365-pinfunc.h>
+#include "mt8365.dtsi"
+
+/ {
+	model = "MediaTek MT8365 Open Platform EVK";
+	compatible = "mediatek,mt8365-evk", "mediatek,mt8365";
+
+	aliases {
+		serial0 = &uart0;
+	};
+
+	chosen {
+		stdout-path = "serial0:921600n8";
+	};
+
+	firmware {
+		optee {
+			compatible = "linaro,optee-tz";
+			method = "smc";
+		};
+	};
+
+	gpio-keys {
+		compatible = "gpio-keys";
+		input-name = "gpio-keys";
+		pinctrl-names = "default";
+		pinctrl-0 = <&gpio_keys>;
+
+		key-volume-up {
+			gpios = <&pio 24 GPIO_ACTIVE_LOW>;
+			label = "volume_up";
+			linux,code = <KEY_VOLUMEUP>;
+			wakeup-source;
+			debounce-interval = <15>;
+		};
+	};
+
+	memory at 40000000 {
+		device_type = "memory";
+		reg = <0 0x40000000 0 0xc0000000>;
+	};
+
+	usb_otg_vbus: regulator-0 {
+		compatible = "regulator-fixed";
+		regulator-name = "otg_vbus";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		gpio = <&pio 16 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
+	reserved-memory {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+
+		/* 12 MiB reserved for OP-TEE (BL32)
+		 * +-----------------------+ 0x43e0_0000
+		 * |      SHMEM 2MiB       |
+		 * +-----------------------+ 0x43c0_0000
+		 * |        | TA_RAM  8MiB |
+		 * + TZDRAM +--------------+ 0x4340_0000
+		 * |        | TEE_RAM 2MiB |
+		 * +-----------------------+ 0x4320_0000
+		 */
+		optee_reserved: optee at 43200000 {
+			no-map;
+			reg = <0 0x43200000 0 0x00c00000>;
+		};
+	};
+};
+
+&pio {
+	gpio_keys: gpio-keys-pins {
+		pins {
+			pinmux = <MT8365_PIN_24_KPCOL0__FUNC_KPCOL0>;
+			bias-pull-up;
+			input-enable;
+		};
+	};
+
+	uart0_pins: uart0-pins {
+		pins {
+			pinmux = <MT8365_PIN_35_URXD0__FUNC_URXD0>,
+				 <MT8365_PIN_36_UTXD0__FUNC_UTXD0>;
+		};
+	};
+
+	uart1_pins: uart1-pins {
+		pins {
+			pinmux = <MT8365_PIN_37_URXD1__FUNC_URXD1>,
+				 <MT8365_PIN_38_UTXD1__FUNC_UTXD1>;
+		};
+	};
+
+	uart2_pins: uart2-pins {
+		pins {
+			pinmux = <MT8365_PIN_39_URXD2__FUNC_URXD2>,
+				 <MT8365_PIN_40_UTXD2__FUNC_UTXD2>;
+		};
+	};
+
+	usb_pins: usb-pins {
+		pins-id {
+			pinmux = <MT8365_PIN_17_GPIO17__FUNC_GPIO17>;
+			input-enable;
+			bias-pull-up;
+		};
+
+		pins-usb0-vbus {
+			pinmux = <MT8365_PIN_16_GPIO16__FUNC_USB_DRVVBUS>;
+			output-high;
+		};
+
+		pin-usb1-vbus {
+			pinmux = <MT8365_PIN_18_GPIO18__FUNC_GPIO18>;
+			output-high;
+		};
+	};
+
+	pwm_pins: pwm-pins {
+		pins {
+			pinmux = <MT8365_PIN_19_DISP_PWM__FUNC_PWM_A>,
+				 <MT8365_PIN_116_I2S_BCK__FUNC_PWM_C>;
+		};
+	};
+};
+
+&pwm {
+	pinctrl-0 = <&pwm_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&uart0 {
+	pinctrl-0 = <&uart0_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&uart1 {
+	pinctrl-0 = <&uart1_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&uart2 {
+	pinctrl-0 = <&uart2_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
diff --git a/arch/arm64/boot/dts/mediatek/mt8365.dtsi b/arch/arm64/boot/dts/mediatek/mt8365.dtsi
new file mode 100644
index 0000000000000..2c4ef9b92b68b
--- /dev/null
+++ b/arch/arm64/boot/dts/mediatek/mt8365.dtsi
@@ -0,0 +1,343 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * (C) 2018 MediaTek Inc.
+ * Copyright (C) 2022 BayLibre SAS
+ * Fabien Parent <fparent at baylibre.com>
+ * Bernhard Rosenkr?nzer <bero at baylibre.com>
+ */
+#include <dt-bindings/clock/mediatek,mt8365-clk.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/phy/phy.h>
+#include <dt-bindings/thermal/thermal.h>
+
+/ {
+	compatible = "mediatek,mt8365";
+	interrupt-parent = <&sysirq>;
+	#address-cells = <2>;
+	#size-cells = <2>;
+
+	cpus: cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cpu-map {
+			cluster0: cluster0 {
+				core0 {
+					cpu = <&cpu0>;
+				};
+				core1 {
+					cpu = <&cpu1>;
+				};
+				core2 {
+					cpu = <&cpu2>;
+				};
+				core3 {
+					cpu = <&cpu3>;
+				};
+			};
+		};
+
+		cpu0: cpu at 0 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a53";
+			reg = <0x0>;
+			#cooling-cells = <2>;
+			enable-method = "psci";
+			next-level-cache = <&l2>;
+		};
+
+		cpu1: cpu at 1 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a53";
+			reg = <0x1>;
+			#cooling-cells = <2>;
+			enable-method = "psci";
+			next-level-cache = <&l2>;
+		};
+
+		cpu2: cpu at 2 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a53";
+			reg = <0x2>;
+			#cooling-cells = <2>;
+			enable-method = "psci";
+			next-level-cache = <&l2>;
+		};
+
+		cpu3: cpu at 3 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a53";
+			reg = <0x3>;
+			#cooling-cells = <2>;
+			enable-method = "psci";
+			next-level-cache = <&l2>;
+		};
+
+		l2: l2-cache {
+			compatible = "cache";
+		};
+	};
+
+	clk26m: oscillator {
+		compatible = "fixed-clock";
+		#clock-cells = <0>;
+		clock-frequency = <26000000>;
+		clock-output-names = "clk26m";
+	};
+
+	psci {
+		compatible = "arm,psci-1.0";
+		method = "smc";
+	};
+
+	reserved-memory {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+
+		/* 128 KiB reserved for ARM Trusted Firmware (BL31) */
+		bl31_secmon_reserved: secmon at 43000000 {
+			no-map;
+			reg = <0 0x43000000 0 0x20000>;
+		};
+	};
+
+	soc {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		compatible = "simple-bus";
+		ranges;
+
+		gic: interrupt-controller at c000000 {
+			compatible = "arm,gic-v3";
+			#interrupt-cells = <4>;
+			interrupt-parent = <&gic>;
+			interrupt-controller;
+			reg = <0 0x0c000000 0 0x80000>, <0 0x0c080000 0 0x80000>;
+
+			interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH 0>;
+		};
+
+		topckgen: syscon at 10000000 {
+			compatible = "mediatek,mt8365-topckgen", "syscon";
+			reg = <0 0x10000000 0 0x1000>;
+			#clock-cells = <1>;
+		};
+
+		infracfg: syscon at 10001000 {
+			compatible = "mediatek,mt8365-infracfg", "syscon";
+			reg = <0 0x10001000 0 0x1000>;
+			#clock-cells = <1>;
+		};
+
+		pericfg: syscon at 10003000 {
+			compatible = "mediatek,mt8365-pericfg", "syscon";
+			reg = <0 0x10003000 0 0x1000>;
+			#clock-cells = <1>;
+		};
+
+		syscfg_pctl: syscfg-pctl at 10005000 {
+			compatible = "mediatek,mt8365-syscfg", "syscon";
+			reg = <0 0x10005000 0 0x1000>;
+		};
+
+		pio: pinctrl at 1000b000 {
+			compatible = "mediatek,mt8365-pinctrl";
+			reg = <0 0x1000b000 0 0x1000>;
+			mediatek,pctl-regmap = <&syscfg_pctl>;
+			gpio-controller;
+			#gpio-cells = <2>;
+			interrupt-controller;
+			#interrupt-cells = <2>;
+			interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
+		};
+
+		apmixedsys: syscon at 1000c000 {
+			compatible = "mediatek,mt8365-apmixedsys", "syscon";
+			reg = <0 0x1000c000 0 0x1000>;
+			#clock-cells = <1>;
+		};
+
+		keypad: keypad at 10010000 {
+			compatible = "mediatek,mt6779-keypad";
+			reg = <0 0x10010000 0 0x1000>;
+			wakeup-source;
+			interrupts = <GIC_SPI 124 IRQ_TYPE_EDGE_FALLING>;
+			clocks = <&clk26m>;
+			clock-names = "kpd";
+			status = "disabled";
+		};
+
+		mcucfg: syscon at 10200000 {
+			compatible = "mediatek,mt8365-mcucfg", "syscon";
+			reg = <0 0x10200000 0 0x2000>;
+			#clock-cells = <1>;
+		};
+
+		sysirq: interrupt-controller at 10200a80 {
+			compatible = "mediatek,mt8365-sysirq", "mediatek,mt6577-sysirq";
+			interrupt-controller;
+			#interrupt-cells = <3>;
+			interrupt-parent = <&gic>;
+			reg = <0 0x10200a80 0 0x20>;
+		};
+
+		infracfg_nao: infracfg at 1020e000 {
+			compatible = "mediatek,mt8365-infracfg", "syscon";
+			reg = <0 0x1020e000 0 0x1000>;
+		};
+
+		rng: rng at 1020f000 {
+			compatible = "mediatek,mt8365-rng", "mediatek,mt7623-rng";
+			reg = <0 0x1020f000 0 0x100>;
+			clocks = <&infracfg CLK_IFR_TRNG>;
+			clock-names = "rng";
+		};
+
+		apdma: dma-controller at 11000280 {
+			compatible = "mediatek,mt8365-uart-dma", "mediatek,mt6577-uart-dma";
+			reg = <0 0x11000280 0 0x80>,
+			      <0 0x11000300 0 0x80>,
+			      <0 0x11000380 0 0x80>,
+			      <0 0x11000400 0 0x80>,
+			      <0 0x11000580 0 0x80>,
+			      <0 0x11000600 0 0x80>;
+			interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 46 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 47 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 48 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 51 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 52 IRQ_TYPE_LEVEL_LOW>;
+			dma-requests = <6>;
+			clocks = <&infracfg CLK_IFR_AP_DMA>;
+			clock-names = "apdma";
+			#dma-cells = <1>;
+		};
+
+		uart0: serial at 11002000 {
+			compatible = "mediatek,mt8365-uart", "mediatek,mt6577-uart";
+			reg = <0 0x11002000 0 0x1000>;
+			interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&clk26m>, <&infracfg CLK_IFR_UART0>;
+			clock-names = "baud", "bus";
+			dmas = <&apdma 0>, <&apdma 1>;
+			dma-names = "tx", "rx";
+			status = "disabled";
+		};
+
+		uart1: serial at 11003000 {
+			compatible = "mediatek,mt8365-uart", "mediatek,mt6577-uart";
+			reg = <0 0x11003000 0 0x1000>;
+			interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&clk26m>, <&infracfg CLK_IFR_UART1>;
+			clock-names = "baud", "bus";
+			dmas = <&apdma 2>, <&apdma 3>;
+			dma-names = "tx", "rx";
+			status = "disabled";
+		};
+
+		uart2: serial at 11004000 {
+			compatible = "mediatek,mt8365-uart", "mediatek,mt6577-uart";
+			reg = <0 0x11004000 0 0x1000>;
+			interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&clk26m>, <&infracfg CLK_IFR_UART2>;
+			clock-names = "baud", "bus";
+			dmas = <&apdma 4>, <&apdma 5>;
+			dma-names = "tx", "rx";
+			status = "disabled";
+		};
+
+		pwm: pwm at 11006000 {
+			compatible = "mediatek,mt8365-pwm";
+			reg = <0 0x11006000 0 0x1000>;
+			#pwm-cells = <2>;
+			interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&infracfg CLK_IFR_PWM_HCLK>,
+				 <&infracfg CLK_IFR_PWM>,
+				 <&infracfg CLK_IFR_PWM1>,
+				 <&infracfg CLK_IFR_PWM2>,
+				 <&infracfg CLK_IFR_PWM3>;
+			clock-names = "top", "main", "pwm1", "pwm2", "pwm3";
+		};
+
+		spi: spi at 1100a000 {
+			compatible = "mediatek,mt8365-spi", "mediatek,mt7622-spi";
+			reg = <0 0x1100a000 0 0x100>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+			interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&topckgen CLK_TOP_UNIVPLL2_D4>,
+				 <&topckgen CLK_TOP_SPI_SEL>,
+				 <&infracfg CLK_IFR_SPI0>;
+			clock-names = "parent-clk", "sel-clk", "spi-clk";
+			status = "disabled";
+		};
+
+		ssusb: usb at 11201000 {
+			compatible = "mediatek,mt8365-mtu3", "mediatek,mtu3";
+			reg = <0 0x11201000 0 0x2e00>, <0 0x11203e00 0 0x0100>;
+			reg-names = "mac", "ippc";
+			interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_LOW>;
+			phys = <&u2port0 PHY_TYPE_USB2>,
+			       <&u2port1 PHY_TYPE_USB2>;
+			clocks = <&topckgen CLK_TOP_SSUSB_TOP_CK_EN>,
+				 <&infracfg CLK_IFR_SSUSB_REF>,
+				 <&infracfg CLK_IFR_SSUSB_SYS>,
+				 <&infracfg CLK_IFR_ICUSB>;
+			clock-names = "sys_ck", "ref_ck", "mcu_ck", "dma_ck";
+			#address-cells = <2>;
+			#size-cells = <2>;
+			ranges;
+			status = "disabled";
+
+			usb_host: usb at 11200000 {
+				compatible = "mediatek,mt8365-xhci", "mediatek,mtk-xhci";
+				reg = <0 0x11200000 0 0x1000>;
+				reg-names = "mac";
+				interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_LOW>;
+				clocks = <&topckgen CLK_TOP_SSUSB_TOP_CK_EN>,
+					 <&infracfg CLK_IFR_SSUSB_REF>,
+					 <&infracfg CLK_IFR_SSUSB_SYS>,
+					 <&infracfg CLK_IFR_ICUSB>,
+					 <&infracfg CLK_IFR_SSUSB_XHCI>;
+				clock-names = "sys_ck", "ref_ck", "mcu_ck",
+					      "dma_ck", "xhci_ck";
+				status = "disabled";
+			};
+		};
+
+		u3phy: phy at 11cc0000 {
+			compatible = "mediatek,mt8365-tphy", "mediatek,generic-tphy-v2";
+			#address-cells = <2>;
+			#size-cells = <2>;
+			#phy-cells = <1>;
+			ranges;
+
+			u2port0: usb-phy at 11cc0000 {
+				reg = <0 0x11cc0000 0 0x400>;
+				clocks = <&topckgen CLK_TOP_SSUSB_PHY_CK_EN>,
+					 <&topckgen CLK_TOP_USB20_48M_EN>;
+				clock-names = "ref", "da_ref";
+				#phy-cells = <1>;
+			};
+
+			u2port1: usb-phy at 11cc1000 {
+				reg = <0 0x11cc1000 0 0x400>;
+				clocks = <&topckgen CLK_TOP_SSUSB_PHY_CK_EN>,
+					 <&topckgen CLK_TOP_USB20_48M_EN>;
+				clock-names = "ref", "da_ref";
+				#phy-cells = <1>;
+			};
+		};
+	};
+
+	timer {
+		compatible = "arm,armv8-timer";
+		interrupt-parent = <&gic>;
+		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW 0>,
+			     <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW 0>,
+			     <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW 0>,
+			     <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW 0>;
+	};
+};
-- 
2.39.0



From kuba at kernel.org  Tue Dec 13 17:17:20 2022
From: kuba at kernel.org (Jakub Kicinski)
Date: Tue, 13 Dec 2022 17:17:20 -0800
Subject: [PATCH net-next] net: dsa: mt7530: remove reduntant assignment
In-Reply-To: <Y5f6h8q7rlnk1jnD@makrotopia.org>
References: <Y5b/Tm4GwPGzd9sR@shell.armlinux.org.uk>
	<Y5f6h8q7rlnk1jnD@makrotopia.org>
Message-ID: <20221213171720.3af6fc05@kernel.org>

On Tue, 13 Dec 2022 04:07:35 +0000 Daniel Golle wrote:
> Fixes: e19de30d20 ("net: dsa: mt7530: add support for in-band link status")

Apart from the changes requested by Russell, could you also correct
this Fixes tag to have the required 12 characters of the commit ID?

You can post as [PATCH net v2], net-next has just made it to Linus
and became net.


From daniel at makrotopia.org  Tue Dec 13 17:51:06 2022
From: daniel at makrotopia.org (Daniel Golle)
Date: Wed, 14 Dec 2022 01:51:06 +0000
Subject: [PATCH net v2] net: dsa: mt7530: remove reduntant assignment
Message-ID: <Y5ksCg/Rt/2ELVOG@makrotopia.org>

Russell King correctly pointed out that the MAC_2500FD capability is
already added for port 5 (if not in RGMII mode) and port 6 (which only
supports SGMII) by mt7531_mac_port_get_caps. Remove the reduntant
setting of this capability flag which was added by a previous commit.

Fixes: e19de30d2080 ("net: dsa: mt7530: add support for in-band link status")
Reported-by: Russell King (Oracle) <rmk+kernel at armlinux.org.uk>
Reviewed-by: Russell King (Oracle) <rmk+kernel at armlinux.org.uk>
Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
 drivers/net/dsa/mt7530.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
index e74c6b406172..908fa89444c9 100644
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2919,9 +2919,6 @@ static void mt753x_phylink_get_caps(struct dsa_switch *ds, int port,
 	config->mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
 				   MAC_10 | MAC_100 | MAC_1000FD;
 
-	if ((priv->id == ID_MT7531) && mt753x_is_mac_port(port))
-		config->mac_capabilities |= MAC_2500FD;
-
 	/* This driver does not make use of the speed, duplex, pause or the
 	 * advertisement in its mac_config, so it is safe to mark this driver
 	 * as non-legacy.

base-commit: 7e68dd7d07a28faa2e6574dd6b9dbd90cdeaae91
-- 
2.39.0



From howard-yh.hsu at mediatek.com  Tue Dec 13 18:28:05 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Wed, 14 Dec 2022 10:28:05 +0800
Subject: [PATCH v3 0/4] rework thermal protection
Message-ID: <20221214022809.32087-1-howard-yh.hsu@mediatek.com>

Rework thermal protection with the following changes:
1. Send thermal fw commands only after mcu init done.
2. Firmware expects to disable thermal protect before reconfiguring thermal protect.
3. Send fw commands through mt7915_thermal_temp_store() to update firmware
temperature directly.
4. Add error messages for invalid setting.

Howard Hsu (4):
  wifi: mt76: mt7915: call mt7915_mcu_set_thermal_throttling() only
    after init_work
  wifi: mt76: mt7915: rework mt7915_mcu_set_thermal_throttling
  wifi: mt76: mt7915: rework mt7915_thermal_temp_store()
  wifi: mt76: mt7915: add error message in
    mt7915_thermal_set_cur_throttle_state()

 .../net/wireless/mediatek/mt76/mt7915/init.c  | 32 +++++++----
 .../net/wireless/mediatek/mt76/mt7915/main.c  | 11 ++++
 .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 54 +++++++++++--------
 .../wireless/mediatek/mt76/mt7915/mt7915.h    |  6 +++
 4 files changed, 70 insertions(+), 33 deletions(-)

-- 
2.18.0



From howard-yh.hsu at mediatek.com  Tue Dec 13 18:28:07 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Wed, 14 Dec 2022 10:28:07 +0800
Subject: [PATCH v3 2/4] wifi: mt76: mt7915: rework mt7915_mcu_set_thermal_throttling
In-Reply-To: <20221214022809.32087-1-howard-yh.hsu@mediatek.com>
References: <20221214022809.32087-1-howard-yh.hsu@mediatek.com>
Message-ID: <20221214022809.32087-3-howard-yh.hsu@mediatek.com>

This patch includes 2 changes:
1. Firmware expects to disable thermal protect first before
reconfiguring.
2. Separate setting thermal_protect and setting thermal_tx_duty into
different functions. These two firmware commands do not need to send
together.

Fixes: 34b877d972be ("mt76: mt7915: add thermal cooling device support")
Reviewed-by: Ryder Lee <ryder.lee at mediatek.com>
Signed-off-by: Howard Hsu <howard-yh.hsu at mediatek.com>
---
 .../net/wireless/mediatek/mt76/mt7915/init.c  |  3 --
 .../net/wireless/mediatek/mt76/mt7915/main.c  |  5 ++
 .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 54 +++++++++++--------
 .../wireless/mediatek/mt76/mt7915/mt7915.h    |  1 +
 4 files changed, 37 insertions(+), 26 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
index 11407e18e56a..be435ae56bbf 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
@@ -134,9 +134,6 @@ mt7915_thermal_set_cur_throttle_state(struct thermal_cooling_device *cdev,
 	if (state > MT7915_CDEV_THROTTLE_MAX)
 		return -EINVAL;
 
-	if (phy->throttle_temp[0] > phy->throttle_temp[1])
-		return 0;
-
 	if (state == phy->cdev_state)
 		return 0;
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
index 98af032eba09..7589af4b3dab 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
@@ -60,6 +60,11 @@ int mt7915_run(struct ieee80211_hw *hw)
 	ret = mt7915_mcu_set_thermal_throttling(phy,
 						MT7915_THERMAL_THROTTLE_MAX);
 
+	if (ret)
+		goto out;
+
+	ret = mt7915_mcu_set_thermal_protect(phy);
+
 	if (ret)
 		goto out;
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
index 37a3c1f082d9..04d1da170fac 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
@@ -3077,6 +3077,29 @@ int mt7915_mcu_get_temperature(struct mt7915_phy *phy)
 }
 
 int mt7915_mcu_set_thermal_throttling(struct mt7915_phy *phy, u8 state)
+{
+	struct mt7915_dev *dev = phy->dev;
+	struct mt7915_mcu_thermal_ctrl req = {
+		.band_idx = phy->mt76->band_idx,
+		.ctrl_id = THERMAL_PROTECT_DUTY_CONFIG,
+	};
+	int level, ret;
+
+	/* set duty cycle and level */
+	for (level = 0; level < 4; level++) {
+		req.duty.duty_level = level;
+		req.duty.duty_cycle = state;
+		state /= 2;
+
+		ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(THERMAL_PROT),
+					&req, sizeof(req), false);
+		if (ret)
+			return ret;
+	}
+	return 0;
+}
+
+int mt7915_mcu_set_thermal_protect(struct mt7915_phy *phy)
 {
 	struct mt7915_dev *dev = phy->dev;
 	struct {
@@ -3089,29 +3112,18 @@ int mt7915_mcu_set_thermal_throttling(struct mt7915_phy *phy, u8 state)
 	} __packed req = {
 		.ctrl = {
 			.band_idx = phy->mt76->band_idx,
+			.type.protect_type = 1,
+			.type.trigger_type = 1,
 		},
 	};
-	int level;
-
-	if (!state) {
-		req.ctrl.ctrl_id = THERMAL_PROTECT_DISABLE;
-		goto out;
-	}
-
-	/* set duty cycle and level */
-	for (level = 0; level < 4; level++) {
-		int ret;
+	int ret;
 
-		req.ctrl.ctrl_id = THERMAL_PROTECT_DUTY_CONFIG;
-		req.ctrl.duty.duty_level = level;
-		req.ctrl.duty.duty_cycle = state;
-		state /= 2;
+	req.ctrl.ctrl_id = THERMAL_PROTECT_DISABLE;
+	ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(THERMAL_PROT),
+				&req, sizeof(req.ctrl), false);
 
-		ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(THERMAL_PROT),
-					&req, sizeof(req.ctrl), false);
-		if (ret)
-			return ret;
-	}
+	if (ret)
+		return ret;
 
 	/* set high-temperature trigger threshold */
 	req.ctrl.ctrl_id = THERMAL_PROTECT_ENABLE;
@@ -3120,10 +3132,6 @@ int mt7915_mcu_set_thermal_throttling(struct mt7915_phy *phy, u8 state)
 	req.trigger_temp = cpu_to_le32(phy->throttle_temp[1]);
 	req.sustain_time = cpu_to_le16(10);
 
-out:
-	req.ctrl.type.protect_type = 1;
-	req.ctrl.type.trigger_type = 1;
-
 	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(THERMAL_PROT),
 				 &req, sizeof(req), false);
 }
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
index 6351feba6bdf..855779f86bde 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
@@ -543,6 +543,7 @@ int mt7915_mcu_apply_tx_dpd(struct mt7915_phy *phy);
 int mt7915_mcu_get_chan_mib_info(struct mt7915_phy *phy, bool chan_switch);
 int mt7915_mcu_get_temperature(struct mt7915_phy *phy);
 int mt7915_mcu_set_thermal_throttling(struct mt7915_phy *phy, u8 state);
+int mt7915_mcu_set_thermal_protect(struct mt7915_phy *phy);
 int mt7915_mcu_get_rx_rate(struct mt7915_phy *phy, struct ieee80211_vif *vif,
 			   struct ieee80211_sta *sta, struct rate_info *rate);
 int mt7915_mcu_rdd_background_enable(struct mt7915_phy *phy,
-- 
2.18.0



From howard-yh.hsu at mediatek.com  Tue Dec 13 18:28:06 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Wed, 14 Dec 2022 10:28:06 +0800
Subject: [PATCH v3 1/4] wifi: mt76: mt7915: call mt7915_mcu_set_thermal_throttling() only after init_work
In-Reply-To: <20221214022809.32087-1-howard-yh.hsu@mediatek.com>
References: <20221214022809.32087-1-howard-yh.hsu@mediatek.com>
Message-ID: <20221214022809.32087-2-howard-yh.hsu@mediatek.com>

Enable thermal management by default shall not be executed during mcu
init. This causes thermal configuration being reset to the firmware
default settings.

Fixes: 0063b86c9120 ("mt76: mt7915e: Enable thermal management by default")
Reviewed-by: Ryder Lee <ryder.lee at mediatek.com>
Signed-off-by: Howard Hsu <howard-yh.hsu at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7915/init.c | 3 +--
 drivers/net/wireless/mediatek/mt76/mt7915/main.c | 6 ++++++
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
index 571c94835942..11407e18e56a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
@@ -201,8 +201,7 @@ static int mt7915_thermal_init(struct mt7915_phy *phy)
 	phy->throttle_temp[0] = 110;
 	phy->throttle_temp[1] = 120;
 
-	return mt7915_mcu_set_thermal_throttling(phy,
-						 MT7915_THERMAL_THROTTLE_MAX);
+	return 0;
 }
 
 static void mt7915_led_set_config(struct led_classdev *led_cdev,
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
index 0511d6a505b0..98af032eba09 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
@@ -57,6 +57,12 @@ int mt7915_run(struct ieee80211_hw *hw)
 		mt7915_mac_enable_nf(dev, phy->mt76->band_idx);
 	}
 
+	ret = mt7915_mcu_set_thermal_throttling(phy,
+						MT7915_THERMAL_THROTTLE_MAX);
+
+	if (ret)
+		goto out;
+
 	ret = mt76_connac_mcu_set_rts_thresh(&dev->mt76, 0x92b,
 					     phy->mt76->band_idx);
 	if (ret)
-- 
2.18.0



From howard-yh.hsu at mediatek.com  Tue Dec 13 18:28:09 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Wed, 14 Dec 2022 10:28:09 +0800
Subject: [PATCH v3 4/4] wifi: mt76: mt7915: add error message in mt7915_thermal_set_cur_throttle_state()
In-Reply-To: <20221214022809.32087-1-howard-yh.hsu@mediatek.com>
References: <20221214022809.32087-1-howard-yh.hsu@mediatek.com>
Message-ID: <20221214022809.32087-5-howard-yh.hsu@mediatek.com>

Add dev_err so that it is easier to see invalid setting while looking at
dmesg.

Co-developed-by: Ryder Lee <ryder.lee at mediatek.com>
Signed-off-by: Ryder Lee <ryder.lee at mediatek.com>
Signed-off-by: Howard Hsu <howard-yh.hsu at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7915/init.c   | 12 +++++++-----
 drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h |  2 ++
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
index 0ab9e1320fac..a89b37a320c0 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
@@ -145,8 +145,11 @@ mt7915_thermal_set_cur_throttle_state(struct thermal_cooling_device *cdev,
 	u8 throttling = MT7915_THERMAL_THROTTLE_MAX - state;
 	int ret;
 
-	if (state > MT7915_CDEV_THROTTLE_MAX)
+	if (state > MT7915_CDEV_THROTTLE_MAX) {
+		dev_err(phy->dev->mt76.dev,
+			"please specify a valid throttling state\n");
 		return -EINVAL;
+	}
 
 	if (state == phy->cdev_state)
 		return 0;
@@ -175,7 +178,7 @@ static void mt7915_unregister_thermal(struct mt7915_phy *phy)
 	struct wiphy *wiphy = phy->mt76->hw->wiphy;
 
 	if (!phy->cdev)
-	    return;
+		return;
 
 	sysfs_remove_link(&wiphy->dev.kobj, "cooling_device");
 	thermal_cooling_device_unregister(phy->cdev);
@@ -209,8 +212,8 @@ static int mt7915_thermal_init(struct mt7915_phy *phy)
 		return PTR_ERR(hwmon);
 
 	/* initialize critical/maximum high temperature */
-	phy->throttle_temp[MT7915_CRIT_TEMP_IDX] = 110;
-	phy->throttle_temp[MT7915_MAX_TEMP_IDX] = 120;
+	phy->throttle_temp[MT7915_CRIT_TEMP_IDX] = MT7915_CRIT_TEMP;
+	phy->throttle_temp[MT7915_MAX_TEMP_IDX] = MT7915_MAX_TEMP;
 
 	return 0;
 }
@@ -1182,7 +1185,6 @@ static void mt7915_stop_hardware(struct mt7915_dev *dev)
 		mt7986_wmac_disable(dev);
 }
 
-
 int mt7915_register_device(struct mt7915_dev *dev)
 {
 	struct mt7915_phy *phy2;
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
index e58650bbbd14..942d70c53825 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
@@ -72,6 +72,8 @@
 
 #define MT7915_CRIT_TEMP_IDX		0
 #define MT7915_MAX_TEMP_IDX		1
+#define MT7915_CRIT_TEMP		110
+#define MT7915_MAX_TEMP			120
 
 struct mt7915_vif;
 struct mt7915_sta;
-- 
2.18.0



From martin.petersen at oracle.com  Tue Dec 13 19:16:04 2022
From: martin.petersen at oracle.com (Martin K. Petersen)
Date: Tue, 13 Dec 2022 22:16:04 -0500
Subject: [PATCH v6] ufs: core: wlun suspend SSU/enter hibern8 fail recovery
In-Reply-To: <20221208072520.26210-1-peter.wang@mediatek.com> (peter wang's
	message of "Thu, 8 Dec 2022 15:25:20 +0800")
References: <20221208072520.26210-1-peter.wang@mediatek.com>
Message-ID: <yq14jtyekv2.fsf@ca-mkp.ca.oracle.com>


Peter,

> When SSU/enter hibern8 fail in wlun suspend flow, trigger error
> handler and return busy to break the suspend.  If not, wlun runtime pm
> status become error and the consumer will stuck in runtime suspend
> status.

Applied to 6.2/scsi-staging, thanks!

-- 
Martin K. Petersen	Oracle Linux Engineering


From howard-yh.hsu at mediatek.com  Tue Dec 13 18:28:08 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Wed, 14 Dec 2022 10:28:08 +0800
Subject: [PATCH v3 3/4] wifi: mt76: mt7915: rework mt7915_thermal_temp_store()
In-Reply-To: <20221214022809.32087-1-howard-yh.hsu@mediatek.com>
References: <20221214022809.32087-1-howard-yh.hsu@mediatek.com>
Message-ID: <20221214022809.32087-4-howard-yh.hsu@mediatek.com>

Call mt7915_mcu_set_thermal_protect() through
mt7915_thermal_temp_store() to update firmware trigger/restore temp
directly.

Fixes: 02ee68b95d81 ("mt76: mt7915: add control knobs for thermal throttling")
Reviewed-by: Ryder Lee <ryder.lee at mediatek.com>
Signed-off-by: Howard Hsu <howard-yh.hsu at mediatek.com>
---
 .../net/wireless/mediatek/mt76/mt7915/init.c   | 18 ++++++++++++++++--
 .../net/wireless/mediatek/mt76/mt7915/mt7915.h |  3 +++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
index be435ae56bbf..0ab9e1320fac 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
@@ -83,9 +83,23 @@ static ssize_t mt7915_thermal_temp_store(struct device *dev,
 
 	mutex_lock(&phy->dev->mt76.mutex);
 	val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 60, 130);
+
+	if ((i - 1 == MT7915_CRIT_TEMP_IDX &&
+	     val > phy->throttle_temp[MT7915_MAX_TEMP_IDX]) ||
+	    (i - 1 == MT7915_MAX_TEMP_IDX &&
+	     val < phy->throttle_temp[MT7915_CRIT_TEMP_IDX])) {
+		dev_err(phy->dev->mt76.dev,
+			"temp1_max shall be greater than temp1_crit.");
+		return -EINVAL;
+	}
+
 	phy->throttle_temp[i - 1] = val;
 	mutex_unlock(&phy->dev->mt76.mutex);
 
+	ret = mt7915_mcu_set_thermal_protect(phy);
+	if (ret)
+		return ret;
+
 	return count;
 }
 
@@ -195,8 +209,8 @@ static int mt7915_thermal_init(struct mt7915_phy *phy)
 		return PTR_ERR(hwmon);
 
 	/* initialize critical/maximum high temperature */
-	phy->throttle_temp[0] = 110;
-	phy->throttle_temp[1] = 120;
+	phy->throttle_temp[MT7915_CRIT_TEMP_IDX] = 110;
+	phy->throttle_temp[MT7915_MAX_TEMP_IDX] = 120;
 
 	return 0;
 }
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
index 855779f86bde..e58650bbbd14 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
@@ -70,6 +70,9 @@
 
 #define MT7915_WED_RX_TOKEN_SIZE	12288
 
+#define MT7915_CRIT_TEMP_IDX		0
+#define MT7915_MAX_TEMP_IDX		1
+
 struct mt7915_vif;
 struct mt7915_sta;
 struct mt7915_dfs_pulse;
-- 
2.18.0



From howard-yh.hsu at mediatek.com  Tue Dec 13 18:28:06 2022
From: howard-yh.hsu at mediatek.com (Howard Hsu)
Date: Wed, 14 Dec 2022 10:28:06 +0800
Subject: [PATCH v3 1/4] wifi: mt76: mt7915: call mt7915_mcu_set_thermal_throttling() only after init_work
In-Reply-To: <20221214022809.32087-1-howard-yh.hsu@mediatek.com>
References: <20221214022809.32087-1-howard-yh.hsu@mediatek.com>
Message-ID: <20221214022809.32087-2-howard-yh.hsu@mediatek.com>

Enable thermal management by default shall not be executed during mcu
init. This causes thermal configuration being reset to the firmware
default settings.

Fixes: 0063b86c9120 ("mt76: mt7915e: Enable thermal management by default")
Reviewed-by: Ryder Lee <ryder.lee at mediatek.com>
Signed-off-by: Howard Hsu <howard-yh.hsu at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7915/init.c | 3 +--
 drivers/net/wireless/mediatek/mt76/mt7915/main.c | 6 ++++++
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
index 571c94835942..11407e18e56a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
@@ -201,8 +201,7 @@ static int mt7915_thermal_init(struct mt7915_phy *phy)
 	phy->throttle_temp[0] = 110;
 	phy->throttle_temp[1] = 120;
 
-	return mt7915_mcu_set_thermal_throttling(phy,
-						 MT7915_THERMAL_THROTTLE_MAX);
+	return 0;
 }
 
 static void mt7915_led_set_config(struct led_classdev *led_cdev,
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
index 0511d6a505b0..98af032eba09 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
@@ -57,6 +57,12 @@ int mt7915_run(struct ieee80211_hw *hw)
 		mt7915_mac_enable_nf(dev, phy->mt76->band_idx);
 	}
 
+	ret = mt7915_mcu_set_thermal_throttling(phy,
+						MT7915_THERMAL_THROTTLE_MAX);
+
+	if (ret)
+		goto out;
+
 	ret = mt76_connac_mcu_set_rts_thresh(&dev->mt76, 0x92b,
 					     phy->mt76->band_idx);
 	if (ret)
-- 
2.18.0



From Haozhe.Chang at mediatek.com  Wed Dec 14 00:25:30 2022
From: Haozhe.Chang at mediatek.com (=?utf-8?B?SGFvemhlIENoYW5nICjluLjmtanlk7Ip?=)
Date: Wed, 14 Dec 2022 08:25:30 +0000
Subject: [PATCH v5] wwan: core: Support slicing in port TX flow of WWAN
 subsystem
In-Reply-To: <CAMZdPi9JOQpmhQepBMeG5jzncP8t5mp68O2nfSOFUUZ9e_fDsQ@mail.gmail.com>
References: <20221124074725.74325-1-haozhe.chang@mediatek.com>
	 <CAMZdPi9JOQpmhQepBMeG5jzncP8t5mp68O2nfSOFUUZ9e_fDsQ@mail.gmail.com>
Message-ID: <54c37c8f8eb7f35e4bb983b9104bd232758bae7b.camel@mediatek.com>

HI Loic

On Thu, 2022-12-01 at 10:56 +0100, Loic Poulain wrote:
> On Thu, 24 Nov 2022 at 08:47, <haozhe.chang at mediatek.com> wrote:
> > 
> > From: haozhe chang <haozhe.chang at mediatek.com>
> > 
> > wwan_port_fops_write inputs the SKB parameter to the TX callback of
> > the WWAN device driver. However, the WWAN device (e.g., t7xx) may
> > have an MTU less than the size of SKB, causing the TX buffer to be
> > sliced and copied once more in the WWAN device driver.
> > 
> > This patch implements the slicing in the WWAN subsystem and gives
> > the WWAN devices driver the option to slice(by frag_len) or not. By
> > doing so, the additional memory copy is reduced.
> > 
> > Meanwhile, this patch gives WWAN devices driver the option to
> > reserve
> > headroom in fragments for the device-specific metadata.
> > 
> > Signed-off-by: haozhe chang <haozhe.chang at mediatek.com>
> 
> Reviewed-by: Loic Poulain <loic.poulain at linaro.org>

I have submitted patch V6 to add a reviewer, do you have any other
suggestions about the patch?

From loic.poulain at linaro.org  Wed Dec 14 01:10:54 2022
From: loic.poulain at linaro.org (Loic Poulain)
Date: Wed, 14 Dec 2022 10:10:54 +0100
Subject: [PATCH v5] wwan: core: Support slicing in port TX flow of WWAN subsystem
In-Reply-To: <54c37c8f8eb7f35e4bb983b9104bd232758bae7b.camel@mediatek.com>
References: <20221124074725.74325-1-haozhe.chang@mediatek.com>
 <CAMZdPi9JOQpmhQepBMeG5jzncP8t5mp68O2nfSOFUUZ9e_fDsQ@mail.gmail.com> <54c37c8f8eb7f35e4bb983b9104bd232758bae7b.camel@mediatek.com>
Message-ID: <CAMZdPi8NOfMn99yy043oYGrO1=UrnhhRvpZq-zWe4BfiU_08NA@mail.gmail.com>

> On Thu, 2022-12-01 at 10:56 +0100, Loic Poulain wrote:
> > On Thu, 24 Nov 2022 at 08:47, <haozhe.chang at mediatek.com> wrote:
> > >
> > > From: haozhe chang <haozhe.chang at mediatek.com>
> > >
> > > wwan_port_fops_write inputs the SKB parameter to the TX callback of
> > > the WWAN device driver. However, the WWAN device (e.g., t7xx) may
> > > have an MTU less than the size of SKB, causing the TX buffer to be
> > > sliced and copied once more in the WWAN device driver.
> > >
> > > This patch implements the slicing in the WWAN subsystem and gives
> > > the WWAN devices driver the option to slice(by frag_len) or not. By
> > > doing so, the additional memory copy is reduced.
> > >
> > > Meanwhile, this patch gives WWAN devices driver the option to
> > > reserve
> > > headroom in fragments for the device-specific metadata.
> > >
> > > Signed-off-by: haozhe chang <haozhe.chang at mediatek.com>
> >
> > Reviewed-by: Loic Poulain <loic.poulain at linaro.org>
>
> I have submitted patch V6 to add a reviewer, do you have any other
> suggestions about the patch?

You normally don't need to resubmit a version just for adding review
tags, as it is well tracked. You can see status of netdev changes from
patchwork:
https://patchwork.kernel.org/project/netdevbpf/list/?series=&submitter=207580&state=*&q=&archive=both&delegate=

Regarding this change you should however resubmit for the net-next
tree with appropriate subject since it is not a bug fix:
https://www.kernel.org/doc/html/latest/process/maintainer-netdev.html?highlight=netdev#how-do-i-indicate-which-tree-net-vs-net-next-my-patch-should-be-in

Then it should be picked by netdev maintainer(s). But note that we're
currently in the Linux 6.2 merge window, so merging for net-next can
be delayed until the mainline merge window is closed (and net-next
open):
https://www.kernel.org/doc/html/latest/process/maintainer-netdev.html?highlight=netdev#how-often-do-changes-from-these-trees-make-it-to-the-mainline-linus-tree

Regards,
Loic


From angelogioacchino.delregno at collabora.com  Wed Dec 14 03:24:07 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 14 Dec 2022 12:24:07 +0100
Subject: [PATCH v5 2/7] dt-bindings: irq: mtk, sysirq: add support for
 mt8365
In-Reply-To: <20221213234346.2868828-3-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
 <20221213234346.2868828-3-bero@baylibre.com>
Message-ID: <15d4f9cd-0141-4e30-c5da-abb8c2ee7306@collabora.com>

Il 14/12/22 00:43, Bernhard Rosenkr?nzer ha scritto:
> Add binding documentation of mediatek,sysirq for mt8365 SoC.
> 
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Wed Dec 14 03:24:08 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 14 Dec 2022 12:24:08 +0100
Subject: [PATCH v5 1/7] dt-bindings: arm64: dts: mediatek: Add mt8365-evk
 board
In-Reply-To: <20221213234346.2868828-2-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
 <20221213234346.2868828-2-bero@baylibre.com>
Message-ID: <283f26c2-f19a-4ebb-d811-224c16045de5@collabora.com>

Il 14/12/22 00:43, Bernhard Rosenkr?nzer ha scritto:
> Add bindings for the Mediatek mt8365-evk board.
> 
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Wed Dec 14 03:24:06 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 14 Dec 2022 12:24:06 +0100
Subject: [PATCH v5 6/7] dt-bindings: usb: mediatek,mtk-xhci: add MT8365
 SoC bindings
In-Reply-To: <20221213234346.2868828-7-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
 <20221213234346.2868828-7-bero@baylibre.com>
Message-ID: <643621c4-5ec5-a643-d43b-825edd481d7d@collabora.com>

Il 14/12/22 00:43, Bernhard Rosenkr?nzer ha scritto:
> From: Fabien Parent <fparent at baylibre.com>
> 
> Add binding documentation for the MT8365 SoC.
> 
> Signed-off-by: Fabien Parent <fparent at baylibre.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Wed Dec 14 03:24:15 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 14 Dec 2022 12:24:15 +0100
Subject: [PATCH v5 7/7] arm64: dts: mediatek: Initial mt8365-evk support
In-Reply-To: <20221213234346.2868828-8-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
 <20221213234346.2868828-8-bero@baylibre.com>
Message-ID: <9917f349-51dd-905f-e272-65315bb5b2cc@collabora.com>

Il 14/12/22 00:43, Bernhard Rosenkr?nzer ha scritto:
> From: Fabien Parent <fparent at baylibre.com>
> 
> This adds minimal support for the Mediatek 8365 SOC and the EVK reference
> board, allowing the board to boot to initramfs with serial port I/O.
> 
> Signed-off-by: Fabien Parent <fparent at baylibre.com>
> [bero at baylibre.com: Removed parts depending on drivers that aren't upstream yet, cleanups, add L2 cache]
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
> Tested-by: Kevin Hilman <khilman at baylibre.com>
> ---
>   arch/arm64/boot/dts/mediatek/Makefile       |   1 +
>   arch/arm64/boot/dts/mediatek/mt8365-evk.dts | 163 ++++++++++
>   arch/arm64/boot/dts/mediatek/mt8365.dtsi    | 343 ++++++++++++++++++++
>   3 files changed, 507 insertions(+)
>   create mode 100644 arch/arm64/boot/dts/mediatek/mt8365-evk.dts
>   create mode 100644 arch/arm64/boot/dts/mediatek/mt8365.dtsi
> 

..snip..

> diff --git a/arch/arm64/boot/dts/mediatek/mt8365.dtsi b/arch/arm64/boot/dts/mediatek/mt8365.dtsi
> new file mode 100644
> index 0000000000000..2c4ef9b92b68b
> --- /dev/null
> +++ b/arch/arm64/boot/dts/mediatek/mt8365.dtsi
> @@ -0,0 +1,343 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +/*
> + * (C) 2018 MediaTek Inc.
> + * Copyright (C) 2022 BayLibre SAS
> + * Fabien Parent <fparent at baylibre.com>
> + * Bernhard Rosenkr?nzer <bero at baylibre.com>
> + */
> +#include <dt-bindings/clock/mediatek,mt8365-clk.h>
> +#include <dt-bindings/interrupt-controller/arm-gic.h>
> +#include <dt-bindings/interrupt-controller/irq.h>
> +#include <dt-bindings/phy/phy.h>
> +#include <dt-bindings/thermal/thermal.h>
> +
> +/ {
> +	compatible = "mediatek,mt8365";
> +	interrupt-parent = <&sysirq>;
> +	#address-cells = <2>;
> +	#size-cells = <2>;
> +
> +	cpus: cpus {

You're not referencing `cpus` anywhere, hence this label is useless:
please remove.

> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		cpu-map {
> +			cluster0: cluster0 {

Same for this one.

> +				core0 {
> +					cpu = <&cpu0>;
> +				};
> +				core1 {
> +					cpu = <&cpu1>;
> +				};
> +				core2 {
> +					cpu = <&cpu2>;
> +				};
> +				core3 {
> +					cpu = <&cpu3>;
> +				};
> +			};
> +		};
> +
> +		cpu0: cpu at 0 {
> +			device_type = "cpu";
> +			compatible = "arm,cortex-a53";
> +			reg = <0x0>;
> +			#cooling-cells = <2>;
> +			enable-method = "psci";
> +			next-level-cache = <&l2>;

It would be nice if you described the I/D caches for all CPUs.

> +		};
> +
> +		cpu1: cpu at 1 {
> +			device_type = "cpu";
> +			compatible = "arm,cortex-a53";
> +			reg = <0x1>;
> +			#cooling-cells = <2>;
> +			enable-method = "psci";
> +			next-level-cache = <&l2>;
> +		};
> +
> +		cpu2: cpu at 2 {
> +			device_type = "cpu";
> +			compatible = "arm,cortex-a53";
> +			reg = <0x2>;
> +			#cooling-cells = <2>;
> +			enable-method = "psci";
> +			next-level-cache = <&l2>;
> +		};
> +
> +		cpu3: cpu at 3 {
> +			device_type = "cpu";
> +			compatible = "arm,cortex-a53";
> +			reg = <0x3>;
> +			#cooling-cells = <2>;
> +			enable-method = "psci";
> +			next-level-cache = <&l2>;
> +		};
> +
> +		l2: l2-cache {
> +			compatible = "cache";

....and what's the size of this L2 cache?
Is it unified, or does each CPU core have its own private L2?

> +		};
> +	};
> +
> +	clk26m: oscillator {
> +		compatible = "fixed-clock";
> +		#clock-cells = <0>;
> +		clock-frequency = <26000000>;
> +		clock-output-names = "clk26m";
> +	};
> +
> +	psci {
> +		compatible = "arm,psci-1.0";
> +		method = "smc";
> +	};
> +
> +	reserved-memory {
> +		#address-cells = <2>;
> +		#size-cells = <2>;
> +		ranges;
> +
> +		/* 128 KiB reserved for ARM Trusted Firmware (BL31) */
> +		bl31_secmon_reserved: secmon at 43000000 {

This depends on the bootloader that's flashed on your board - it's not a
global SoC property.

Please move it to your board, or explain why BL31 *must* always be
128KiB starting at 0x43000000.

> +			no-map;
> +			reg = <0 0x43000000 0 0x20000>;
> +		};
> +	};
> +
> +	soc {
> +		#address-cells = <2>;
> +		#size-cells = <2>;
> +		compatible = "simple-bus";
> +		ranges;
> +

Is there really no systimer in this SoC? Would be pretty odd....

Regards,
Angelo


From angelogioacchino.delregno at collabora.com  Wed Dec 14 03:44:27 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 14 Dec 2022 12:44:27 +0100
Subject: [PATCH v3 0/4] rework thermal protection
In-Reply-To: <20221214022809.32087-1-howard-yh.hsu@mediatek.com>
References: <20221214022809.32087-1-howard-yh.hsu@mediatek.com>
Message-ID: <b4a1c27f-44b1-0368-964c-175bc367c795@collabora.com>

Il 14/12/22 03:28, Howard Hsu ha scritto:
> Rework thermal protection with the following changes:
> 1. Send thermal fw commands only after mcu init done.
> 2. Firmware expects to disable thermal protect before reconfiguring thermal protect.
> 3. Send fw commands through mt7915_thermal_temp_store() to update firmware
> temperature directly.
> 4. Add error messages for invalid setting.
> 
> Howard Hsu (4):
>    wifi: mt76: mt7915: call mt7915_mcu_set_thermal_throttling() only
>      after init_work
>    wifi: mt76: mt7915: rework mt7915_mcu_set_thermal_throttling
>    wifi: mt76: mt7915: rework mt7915_thermal_temp_store()
>    wifi: mt76: mt7915: add error message in
>      mt7915_thermal_set_cur_throttle_state()
> 
>   .../net/wireless/mediatek/mt76/mt7915/init.c  | 32 +++++++----
>   .../net/wireless/mediatek/mt76/mt7915/main.c  | 11 ++++
>   .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 54 +++++++++++--------
>   .../wireless/mediatek/mt76/mt7915/mt7915.h    |  6 +++
>   4 files changed, 70 insertions(+), 33 deletions(-)
> 


For the entire series:

Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>


From krzysztof.kozlowski at linaro.org  Wed Dec 14 03:55:21 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Wed, 14 Dec 2022 12:55:21 +0100
Subject: [PATCH 2/6] dt-bindings: pinctrl: mt7620: add proper function
 muxing binding
In-Reply-To: <20221213130430.172876-3-arinc.unal@arinc9.com>
References: <20221213130430.172876-1-arinc.unal@arinc9.com>
 <20221213130430.172876-3-arinc.unal@arinc9.com>
Message-ID: <4ffd94b2-e72c-a081-4326-5bc254603ddf@linaro.org>

On 13/12/2022 14:04, Ar?n? ?NAL wrote:
> Not every function can be muxed to a group. Add proper binding which
> documents which function can be muxed to a group or set of groups.
> 
> Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
> ---
>  .../pinctrl/ralink,mt7620-pinctrl.yaml        | 632 +++++++++++++++++-
>  1 file changed, 596 insertions(+), 36 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
> index 6f17f3991640..06880c80ba80 100644
> --- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
> +++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
> @@ -29,47 +29,608 @@ patternProperties:
>          $ref: pinmux-node.yaml#
>  
>          properties:
> -          groups:
> -            description: The pin group to select.
> -            enum: [
> -              # common
> -              i2c, spi, wdt,
> -
> -              # For MT7620 SoC
> -              ephy, mdio, nd_sd, pa, pcie, rgmii1, rgmii2, spi refclk,
> -              uartf, uartlite, wled,
> -
> -              # For MT7628 and MT7688 SoCs
> -              gpio, i2s, p0led_an, p0led_kn, p1led_an, p1led_kn, p2led_an,
> -              p2led_kn, p3led_an, p3led_kn, p4led_an, p4led_kn, perst, pwm0,
> -              pwm1, refclk, sdmode, spi cs1, spis, uart0, uart1, uart2,
> -              wled_an, wled_kn,
> -            ]
> -
>            function:
> -            description: The mux function to select.
> -            enum: [
> -              # common
> -              gpio, i2c, refclk, spi,
> -
> -              # For MT7620 SoC
> -              ephy, gpio i2s, gpio uartf, i2s uartf, mdio, nand, pa,
> -              pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf,
> -              rgmii1, rgmii2, sd, spi refclk, uartf, uartlite, wdt refclk,
> -              wdt rst, wled,
> -
> -              # For MT7628 and MT7688 SoCs
> -              antenna, debug, i2s, jtag, p0led_an, p0led_kn,
> -              p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
> -              p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2,
> -              rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi cs1,
> -              spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -,
> -            ]
> +            description:
> +              A string containing the name of the function to mux to the group.
> +            anyOf:
> +              - description: For MT7620 SoC
> +                enum: [ephy, gpio, gpio i2s, gpio uartf, i2c, i2s uartf, mdio, nand, pa,
> +                       pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf, refclk,
> +                       rgmii1, rgmii2, sd, spi, spi refclk, uartf, uartlite, wdt refclk,
> +                       wdt rst, wled]
> +
> +              - description: For MT7628 and MT7688 SoCs
> +                enum: [antenna, debug, gpio, i2c, i2s, jtag, p0led_an, p0led_kn,
> +                       p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
> +                       p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2,
> +                       refclk, rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi, spi cs1,
> +                       spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -]
> +
> +          groups:
> +            description:
> +              An array of strings. Each string contains the name of a group.
>  
>          required:
>            - groups
>            - function
>  
> +        allOf:
> +          - if:
> +              properties:
> +                function:
> +                  const: antenna
> +            then:
> +              properties:
> +                groups:
> +                  enum: [i2s]

I have doubts such setup is maintainable and readable. I would suggest
to leave just few - maybe for gpio, jtag, refclk, utif.


Best regards,
Krzysztof



From krzysztof.kozlowski at linaro.org  Wed Dec 14 04:02:19 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Wed, 14 Dec 2022 13:02:19 +0100
Subject: [PATCH v3 10/12] dt-bindings: mediatek: mt8188: add audio afe
 document
In-Reply-To: <6eae5d7eef22443b6152c6655c89bdfd70e59089.camel@mediatek.com>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
 <20221208033148.21866-11-trevor.wu@mediatek.com>
 <d7d9f3c7-b3e3-1e13-a80f-c7bf7b38a5b1@linaro.org>
 <45b4b287dfd57b99e0ba5675bf99194f6d84d9da.camel@mediatek.com>
 <fb34e446-2904-a357-e54b-3e82a2b0745c@linaro.org>
 <e08fab2a694313abc12e0f8303de3e2e704b388c.camel@mediatek.com>
 <e20884d2-5d30-9519-d070-8e2ac07f2171@linaro.org>
 <6eae5d7eef22443b6152c6655c89bdfd70e59089.camel@mediatek.com>
Message-ID: <dd2a373e-d3a7-cec9-6608-379d61f4228f@linaro.org>

On 13/12/2022 16:06, Trevor Wu (???) wrote:
> On Mon, 2022-12-12 at 09:40 +0100, Krzysztof Kozlowski wrote:
>> On 12/12/2022 03:43, Trevor Wu (???) wrote:
>>>>>
>>>>>>> +    uniqueItems: true
>>>>>>> +    items:
>>>>>>> +      minimum: 0
>>>>>>> +      maximum: 15
>>>>>>> +
>>>>>>> +  "^mediatek,etdm-in[1-2]-mclk-always-on-rate-hz$":
>>>>>>> +    description: Specify etdm in mclk output rate for
>>>>>>> always
>>>>>>> on
>>>>>>> case.
>>>>>>
>>>>>> How is it different than assigned-clock-rates?
>>>>>>
>>>>>
>>>>> This includes clock enabling at init stage.
>>>>
>>>> assigned-clock-rates are also at init stage. I asked what is
>>>> different.
>>>>
>>>
>>> If the property is used, there are three parts included in dai
>>> driver
>>> probe function.
>>>
>>> 1. set clock parent (which APLL)
>>> 2. set clock rate (MCLK rate)
>>> 3. enable clock (MCLK On)
>>>
>>> The first two parts can be done by existing dts clock properties,
>>> but
>>> the last one can't.
>>> When MCLK should be enabled at boot time and kept on, this property
>>> is used. That's why I say the property is designed for always-on
>>> case.
>>
>> Heh, so the "always on case" means this property enables clock? How
>> is
>> this even DT property? That's not how clocks should be kept enabled.
>> You
>> need proper clock provider and consumer.
>>
>>
> 
> Hi Krzysztof,
> 
> Sorry, I don't know it is not appropriate to notify driver that the
> clock should be ketp enabled after boot.
> 
> The original idea is that enabling this clock in the machine driver,
> but a property to inform machine driver is also required when the
> machine driver is shared by different codec combination. And it's
> easier to handle set_rate and set_parent in etdm dai driver, so I put
> the property here.
> 
> Do you mean if the clock consumer(audio codec or external DSP) requries
> the clock, the consumer should enable the clock by itself?

Yes, your clocks should have consumers and they keep the clock enabled
when needed. Certain clocks can be marked as IGNORE or CRITICAL to keep
enabled without consumers (or even when consumers disable), but that's
still not a DT property.


Best regards,
Krzysztof



From daniel at makrotopia.org  Wed Dec 14 05:02:11 2022
From: daniel at makrotopia.org (Daniel Golle)
Date: Wed, 14 Dec 2022 13:02:11 +0000
Subject: [PATCH net v2] net: dsa: mt7530: remove reduntant assignment
In-Reply-To: <Y5ksCg/Rt/2ELVOG@makrotopia.org>
References: <Y5ksCg/Rt/2ELVOG@makrotopia.org>
Message-ID: <Y5nJU9ymV59TdOyK@makrotopia.org>

Frank Wunderlich has reported a typo in the commit title, and he is
right: reduntant => redundant

Please either fix this while merging or wait until I'll post v3
tomorrow.

On Wed, Dec 14, 2022 at 01:51:06AM +0000, Daniel Golle wrote:
> Russell King correctly pointed out that the MAC_2500FD capability is
> already added for port 5 (if not in RGMII mode) and port 6 (which only
> supports SGMII) by mt7531_mac_port_get_caps. Remove the reduntant
> setting of this capability flag which was added by a previous commit.
> 
> Fixes: e19de30d2080 ("net: dsa: mt7530: add support for in-band link status")
> Reported-by: Russell King (Oracle) <rmk+kernel at armlinux.org.uk>
> Reviewed-by: Russell King (Oracle) <rmk+kernel at armlinux.org.uk>
> Signed-off-by: Daniel Golle <daniel at makrotopia.org>
> ---
>  drivers/net/dsa/mt7530.c | 3 ---
>  1 file changed, 3 deletions(-)
> 
> diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
> index e74c6b406172..908fa89444c9 100644
> --- a/drivers/net/dsa/mt7530.c
> +++ b/drivers/net/dsa/mt7530.c
> @@ -2919,9 +2919,6 @@ static void mt753x_phylink_get_caps(struct dsa_switch *ds, int port,
>  	config->mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
>  				   MAC_10 | MAC_100 | MAC_1000FD;
>  
> -	if ((priv->id == ID_MT7531) && mt753x_is_mac_port(port))
> -		config->mac_capabilities |= MAC_2500FD;
> -
>  	/* This driver does not make use of the speed, duplex, pause or the
>  	 * advertisement in its mac_config, so it is safe to mark this driver
>  	 * as non-legacy.
> 
> base-commit: 7e68dd7d07a28faa2e6574dd6b9dbd90cdeaae91
> -- 
> 2.39.0
> 
> 


From arinc.unal at arinc9.com  Wed Dec 14 05:03:00 2022
From: arinc.unal at arinc9.com (=?UTF-8?B?QXLEsW7DpyDDnE5BTA==?=)
Date: Wed, 14 Dec 2022 16:03:00 +0300
Subject: [PATCH 2/6] dt-bindings: pinctrl: mt7620: add proper function
 muxing binding
In-Reply-To: <4ffd94b2-e72c-a081-4326-5bc254603ddf@linaro.org>
References: <20221213130430.172876-1-arinc.unal@arinc9.com>
 <20221213130430.172876-3-arinc.unal@arinc9.com>
 <4ffd94b2-e72c-a081-4326-5bc254603ddf@linaro.org>
Message-ID: <e4b6b334-44c3-9e73-adaa-9972ff9e6fd5@arinc9.com>

On 14.12.2022 14:55, Krzysztof Kozlowski wrote:
> On 13/12/2022 14:04, Ar?n? ?NAL wrote:
>> Not every function can be muxed to a group. Add proper binding which
>> documents which function can be muxed to a group or set of groups.
>>
>> Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
>> ---
>>   .../pinctrl/ralink,mt7620-pinctrl.yaml        | 632 +++++++++++++++++-
>>   1 file changed, 596 insertions(+), 36 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
>> index 6f17f3991640..06880c80ba80 100644
>> --- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
>> +++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
>> @@ -29,47 +29,608 @@ patternProperties:
>>           $ref: pinmux-node.yaml#
>>   
>>           properties:
>> -          groups:
>> -            description: The pin group to select.
>> -            enum: [
>> -              # common
>> -              i2c, spi, wdt,
>> -
>> -              # For MT7620 SoC
>> -              ephy, mdio, nd_sd, pa, pcie, rgmii1, rgmii2, spi refclk,
>> -              uartf, uartlite, wled,
>> -
>> -              # For MT7628 and MT7688 SoCs
>> -              gpio, i2s, p0led_an, p0led_kn, p1led_an, p1led_kn, p2led_an,
>> -              p2led_kn, p3led_an, p3led_kn, p4led_an, p4led_kn, perst, pwm0,
>> -              pwm1, refclk, sdmode, spi cs1, spis, uart0, uart1, uart2,
>> -              wled_an, wled_kn,
>> -            ]
>> -
>>             function:
>> -            description: The mux function to select.
>> -            enum: [
>> -              # common
>> -              gpio, i2c, refclk, spi,
>> -
>> -              # For MT7620 SoC
>> -              ephy, gpio i2s, gpio uartf, i2s uartf, mdio, nand, pa,
>> -              pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf,
>> -              rgmii1, rgmii2, sd, spi refclk, uartf, uartlite, wdt refclk,
>> -              wdt rst, wled,
>> -
>> -              # For MT7628 and MT7688 SoCs
>> -              antenna, debug, i2s, jtag, p0led_an, p0led_kn,
>> -              p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
>> -              p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2,
>> -              rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi cs1,
>> -              spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -,
>> -            ]
>> +            description:
>> +              A string containing the name of the function to mux to the group.
>> +            anyOf:
>> +              - description: For MT7620 SoC
>> +                enum: [ephy, gpio, gpio i2s, gpio uartf, i2c, i2s uartf, mdio, nand, pa,
>> +                       pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf, refclk,
>> +                       rgmii1, rgmii2, sd, spi, spi refclk, uartf, uartlite, wdt refclk,
>> +                       wdt rst, wled]
>> +
>> +              - description: For MT7628 and MT7688 SoCs
>> +                enum: [antenna, debug, gpio, i2c, i2s, jtag, p0led_an, p0led_kn,
>> +                       p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
>> +                       p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2,
>> +                       refclk, rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi, spi cs1,
>> +                       spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -]
>> +
>> +          groups:
>> +            description:
>> +              An array of strings. Each string contains the name of a group.
>>   
>>           required:
>>             - groups
>>             - function
>>   
>> +        allOf:
>> +          - if:
>> +              properties:
>> +                function:
>> +                  const: antenna
>> +            then:
>> +              properties:
>> +                groups:
>> +                  enum: [i2s]
> 
> I have doubts such setup is maintainable and readable. I would suggest
> to leave just few - maybe for gpio, jtag, refclk, utif.

These bindings are not going to change once all properly defined and I'm 
here as a maintainer so I don't see an issue with maintaining the binding.

It's the whole pin configuration of an SoC squashed under a single 
document. I guess this is the fate of the pinctrl bindings. The bindings 
for mt7622 is not so different:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/pinctrl/mediatek%2Cmt7622-pinctrl.yaml#n63

It's still much better than reading the code:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/pinctrl/ralink/pinctrl-mt7620.c

Ar?n?


From krzysztof.kozlowski at linaro.org  Wed Dec 14 05:10:14 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Wed, 14 Dec 2022 14:10:14 +0100
Subject: [PATCH 2/6] dt-bindings: pinctrl: mt7620: add proper function
 muxing binding
In-Reply-To: <e4b6b334-44c3-9e73-adaa-9972ff9e6fd5@arinc9.com>
References: <20221213130430.172876-1-arinc.unal@arinc9.com>
 <20221213130430.172876-3-arinc.unal@arinc9.com>
 <4ffd94b2-e72c-a081-4326-5bc254603ddf@linaro.org>
 <e4b6b334-44c3-9e73-adaa-9972ff9e6fd5@arinc9.com>
Message-ID: <286bbd0f-1632-6071-7d08-e56ed16c234c@linaro.org>

On 14/12/2022 14:03, Ar?n? ?NAL wrote:
> On 14.12.2022 14:55, Krzysztof Kozlowski wrote:
>>>   
>>> +        allOf:
>>> +          - if:
>>> +              properties:
>>> +                function:
>>> +                  const: antenna
>>> +            then:
>>> +              properties:
>>> +                groups:
>>> +                  enum: [i2s]
>>
>> I have doubts such setup is maintainable and readable. I would suggest
>> to leave just few - maybe for gpio, jtag, refclk, utif.
> 
> These bindings are not going to change once all properly defined and I'm 
> here as a maintainer so I don't see an issue with maintaining the binding.
> 
> It's the whole pin configuration of an SoC squashed under a single 
> document. I guess this is the fate of the pinctrl bindings. The bindings 
> for mt7622 is not so different:
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/pinctrl/mediatek%2Cmt7622-pinctrl.yaml#n63

It's much smaller number of if:then: than yours but if you want to
manage it then sure:

Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>


Best regards,
Krzysztof



From angelogioacchino.delregno at collabora.com  Wed Dec 14 05:11:16 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 14 Dec 2022 14:11:16 +0100
Subject: [PATCH 1/2] arm64: dts: mediatek: mt8195: Use P1 clocks for PCIe1 controller
Message-ID: <20221214131117.108008-1-angelogioacchino.delregno@collabora.com>

Despite there being some flexibility regarding the P0/P1 connections,
especially for TL and PERI, we must use P1 clocks on pcie1 otherwise
we'll be dealing with unclocked access.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 arch/arm64/boot/dts/mediatek/mt8195.dtsi | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index 5d31536f4c48..e61944510b8e 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -1258,9 +1258,9 @@ pcie1: pcie at 112f8000 {
 
 			clocks = <&infracfg_ao CLK_INFRA_AO_PCIE_PL_P_250M_P1>,
 				 <&clk26m>,
-				 <&infracfg_ao CLK_INFRA_AO_PCIE_TL_96M>,
+				 <&infracfg_ao CLK_INFRA_AO_PCIE_P1_TL_96M>,
 				 <&clk26m>,
-				 <&infracfg_ao CLK_INFRA_AO_PCIE_PERI_26M>,
+				 <&infracfg_ao CLK_INFRA_AO_PCIE_P1_PERI_26M>,
 				 /* Designer has connect pcie1 with peri_mem_p0 clock */
 				 <&pericfg_ao CLK_PERI_AO_PCIE_P0_MEM>;
 			clock-names = "pl_250m", "tl_26m", "tl_96m",
-- 
2.38.1



From angelogioacchino.delregno at collabora.com  Wed Dec 14 05:11:17 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 14 Dec 2022 14:11:17 +0100
Subject: [PATCH 2/2] arm64: dts: mediatek: mt8195: Add power domain to U3PHY1 T-PHY
In-Reply-To: <20221214131117.108008-1-angelogioacchino.delregno@collabora.com>
References: <20221214131117.108008-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221214131117.108008-2-angelogioacchino.delregno@collabora.com>

Assign power domain to the U3PHY1 T-PHY in otder to keep this PHY
alive after unused PD shutdown and to be able to completely cut
and restore power to it, for example, to save some power during
system suspend/sleep.

Fixes: 2b515194bf0c ("arm64: dts: mt8195: Add power domains controller")
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 arch/arm64/boot/dts/mediatek/mt8195.dtsi | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index e61944510b8e..131945c44dcc 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -1549,6 +1549,7 @@ u3phy1: t-phy at 11e30000 {
 			#address-cells = <1>;
 			#size-cells = <1>;
 			ranges = <0 0 0x11e30000 0xe00>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_SSUSB_PCIE_PHY>;
 			status = "disabled";
 
 			u2port1: usb-phy at 0 {
-- 
2.38.1



From krzysztof.kozlowski at linaro.org  Wed Dec 14 05:13:10 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Wed, 14 Dec 2022 14:13:10 +0100
Subject: [PATCH 3/6] dt-bindings: pinctrl: mt7621: add proper function
 muxing binding
In-Reply-To: <20221213130430.172876-4-arinc.unal@arinc9.com>
References: <20221213130430.172876-1-arinc.unal@arinc9.com>
 <20221213130430.172876-4-arinc.unal@arinc9.com>
Message-ID: <9d7bda38-69c9-95c8-e867-8bd5733debe2@linaro.org>

On 13/12/2022 14:04, Ar?n? ?NAL wrote:
> Not every function can be muxed to a group. Add proper binding which
> documents which function can be muxed to a group or set of groups.
> 
> Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
> ---
>  .../pinctrl/ralink,mt7621-pinctrl.yaml        | 204 +++++++++++++++++-
>  1 file changed, 197 insertions(+), 7 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
> index 61e5c847e8c8..0efb03f1d88e 100644
> --- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
> +++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
> @@ -29,21 +29,212 @@ patternProperties:
>          $ref: pinmux-node.yaml#
>  
>          properties:
> -          groups:
> -            description: The pin group to select.
> -            enum: [i2c, jtag, mdio, pcie, rgmii1, rgmii2, sdhci, spi, uart1,
> -                   uart2, uart3, wdt]
> -
>            function:
> -            description: The mux function to select.
> +            description:
> +              A string containing the name of the function to mux to the group.
>              enum: [gpio, i2c, i2s, jtag, mdio, nand1, nand2, pcie refclk,
>                     pcie rst, pcm, rgmii1, rgmii2, sdhci, spdif2, spdif3, spi,
>                     uart1, uart2, uart3, wdt refclk, wdt rst]
>  
> +          groups:
> +            description:
> +              An array of strings. Each string contains the name of a group.

Here and in all patches - please add maxItems:1. The definition of field
should have some constraints (and your if:then: might miss a case).

Best regards,
Krzysztof



From broonie at kernel.org  Wed Dec 14 05:32:04 2022
From: broonie at kernel.org (Mark Brown)
Date: Wed, 14 Dec 2022 13:32:04 +0000
Subject: [PATCH] ASoC: mediatek: mt8195: add sof be ops to check audio active
In-Reply-To: <20221209031053.8444-1-yc.hung@mediatek.com>
References: <20221209031053.8444-1-yc.hung@mediatek.com>
Message-ID: <167102472482.27755.57467344519009874.b4-ty@kernel.org>

On Fri, 09 Dec 2022 11:10:53 +0800, YC Hung wrote:
> In MT8195 SOF design, both DSP and audio driver would access audio
> registers. Before DSP accesses audio registers, audio power and clock
> should be enabled. DSP will hang up if DSP access audio register but
> audio power and clock are disabled. Therefore, we add audio pm runtime
> active checking before accessing audio registers in SOF BE's callback
> hw_params function to avoid this situation.
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/1] ASoC: mediatek: mt8195: add sof be ops to check audio active
      commit: 83f1b7f39af73b01edf098fe3141404670703281

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


From peter.suti at streamunlimited.com  Wed Dec 14 05:46:21 2022
From: peter.suti at streamunlimited.com (Peter Suti)
Date: Wed, 14 Dec 2022 14:46:21 +0100
Subject: [PATCH v3] mmc: meson-gx: fix SDIO interrupt handling
In-Reply-To: <52861a84-0fe2-37f0-d66a-145f2ebe1d79@gmail.com>
References: <52861a84-0fe2-37f0-d66a-145f2ebe1d79@gmail.com>
Message-ID: <20221214134620.3028726-1-peter.suti@streamunlimited.com>

With the interrupt support introduced in commit 066ecde sometimes the
Marvell-8987 wifi chip got stuck using the marvell-sd-uapsta-8987
vendor driver. The cause seems to be that after sending ack to all interrupts
the IRQ_SDIO still happens, but it is ignored.

To work around this, recheck the IRQ_SDIO after meson_mmc_request_done().

Inspired by 9e2582e ("mmc: mediatek: fix SDIO irq issue") which used a
similar fix to handle lost interrupts.

Fixes: 066ecde ("mmc: meson-gx: add SDIO interrupt support")

Signed-off-by: Peter Suti <peter.suti at streamunlimited.com>
---
Changes in v2:
	- use spin_lock instead of spin_lock_irqsave
	- only reenable interrupts if they were enabled already

Changes in v3:
	- Rework the patch based on feedback from Heiner Kallweit.
		The IRQ does not happen on 2 CPUs and the hard IRQ is not re-entrant.
		But still one SDIO IRQ is lost without this change.
		After the ack, reading the SD_EMMC_STATUS BIT(15) is set, but 
		meson_mmc_irq() is never called again.

		The fix is similar to Mediatek msdc_recheck_sdio_irq().
		That platform also loses an IRQ in some cases it seems.

 drivers/mmc/host/meson-gx-mmc.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
index 6e5ea0213b47..7d3ee2f9a7f6 100644
--- a/drivers/mmc/host/meson-gx-mmc.c
+++ b/drivers/mmc/host/meson-gx-mmc.c
@@ -1023,6 +1023,22 @@ static irqreturn_t meson_mmc_irq(int irq, void *dev_id)
 	if (ret == IRQ_HANDLED)
 		meson_mmc_request_done(host->mmc, cmd->mrq);
 
+	/*
+	* Sometimes after we ack all raised interrupts,
+	* an IRQ_SDIO can still be pending, which can get lost.
+	*
+	* To prevent this, recheck the IRQ_SDIO here and schedule
+	* it to be processed.
+	*/
+	raw_status = readl(host->regs + SD_EMMC_STATUS);
+	status = raw_status & (IRQ_EN_MASK | IRQ_SDIO);
+	if (status & IRQ_SDIO) {
+		spin_lock(&host->lock);
+		__meson_mmc_enable_sdio_irq(host->mmc, 0);
+		sdio_signal_irq(host->mmc);
+		spin_unlock(&host->lock);
+	}
+
 	return ret;
 }
 
-- 
2.25.1



From broonie at kernel.org  Wed Dec 14 06:53:48 2022
From: broonie at kernel.org (Mark Brown)
Date: Wed, 14 Dec 2022 14:53:48 +0000
Subject: [PATCH] ASoC: SOF: mediatek: initialize panic_info to zero
In-Reply-To: <20221213115617.25086-1-yc.hung@mediatek.com>
References: <20221213115617.25086-1-yc.hung@mediatek.com>
Message-ID: <167102962807.215050.16757916120691616071.b4-ty@kernel.org>

On Tue, 13 Dec 2022 19:56:17 +0800, YC Hung wrote:
> Coverity spotted that panic_info is not initialized to zero in
> mtk_adsp_dump. Using uninitialized value panic_info.linenum when
> calling snd_sof_get_status. Fix this coverity by initializing
> panic_info struct as zero.
> 
> 

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/1] ASoC: SOF: mediatek: initialize panic_info to zero
      commit: 7bd220f2ba9014b78f0304178103393554b8c4fe

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


From robh at kernel.org  Wed Dec 14 07:23:05 2022
From: robh at kernel.org (Rob Herring)
Date: Wed, 14 Dec 2022 09:23:05 -0600
Subject: [PATCH v5 0/7] Add minimal MT8365 and MT8365-EVK support
In-Reply-To: <20221213234346.2868828-1-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
Message-ID: <20221214152305.GA1080797-robh@kernel.org>

On Wed, Dec 14, 2022 at 12:43:39AM +0100, Bernhard Rosenkr?nzer wrote:
> This adds minimal support for the MediaTek 8365 SOC and the EVK reference
> board, allowing the board to boot to initramfs with serial port I/O.
> 
> v5:
>   - Reorder top-level entries in mediatek,mt8365-pinctrl.yaml to match
>     example-schema
>   - Use consistent quotes
> 
> v4:
>   - Remove pins-are-numbered references that have been holding things up
>     now that the patches removing it from dt-bindings have landed in linux-next
> 
> v3:
>   - Remove a number of components that are not yet supported (they will
>     come back alongside the corresponding drivers)
>   - Address issues found by dt_binding_check (mostly fixing pinctrl
>     bindings)
>   - Address issues pointed out in comments
>   - Reorder patches
> 
> v2:
>   - Add missing dt-bindings documentation
>   - Small cleanups addressing issues in v1 pointed out by Krzysztof Kozlowski
> 
> Bernhard Rosenkr?nzer (4):
>   dt-bindings: arm64: dts: mediatek: Add mt8365-evk board
>   dt-bindings: irq: mtk, sysirq: add support for mt8365
>   dt-bindings: mfd: syscon: Add mt8365-syscfg
>   dt-bindings: pinctrl: add bindings for Mediatek MT8365 SoC
> 
> Fabien Parent (3):
>   dt-bindings: usb: mediatek,mtu3: add MT8365 SoC bindings
>   dt-bindings: usb: mediatek,mtk-xhci: add MT8365 SoC bindings
>   arm64: dts: mediatek: Initial mt8365-evk support
> 
>  .../devicetree/bindings/arm/mediatek.yaml     |   4 +
>  .../interrupt-controller/mediatek,sysirq.txt  |   1 +
>  .../devicetree/bindings/mfd/syscon.yaml       |   1 +
>  .../pinctrl/mediatek,mt8365-pinctrl.yaml      | 197 ++++++++++
>  .../bindings/usb/mediatek,mtk-xhci.yaml       |   1 +
>  .../bindings/usb/mediatek,mtu3.yaml           |   1 +
>  arch/arm64/boot/dts/mediatek/Makefile         |   1 +
>  arch/arm64/boot/dts/mediatek/mt8365-evk.dts   | 163 +++++++++
>  arch/arm64/boot/dts/mediatek/mt8365.dtsi      | 343 ++++++++++++++++++
>  9 files changed, 712 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt8365-evk.dts
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt8365.dtsi

You've missed the subsystem maintainers on this series. gregkh/linux-usb 
for USB for example. They can pick up the individual patches.

Rob


From hkallweit1 at gmail.com  Wed Dec 14 13:33:38 2022
From: hkallweit1 at gmail.com (Heiner Kallweit)
Date: Wed, 14 Dec 2022 22:33:38 +0100
Subject: [PATCH v3] mmc: meson-gx: fix SDIO interrupt handling
In-Reply-To: <20221214134620.3028726-1-peter.suti@streamunlimited.com>
References: <52861a84-0fe2-37f0-d66a-145f2ebe1d79@gmail.com>
 <20221214134620.3028726-1-peter.suti@streamunlimited.com>
Message-ID: <c6863a3e-8855-50fe-25cb-0b38bc3a05e0@gmail.com>

On 14.12.2022 14:46, Peter Suti wrote:
> With the interrupt support introduced in commit 066ecde sometimes the
> Marvell-8987 wifi chip got stuck using the marvell-sd-uapsta-8987
> vendor driver. The cause seems to be that after sending ack to all interrupts
> the IRQ_SDIO still happens, but it is ignored.
> 
> To work around this, recheck the IRQ_SDIO after meson_mmc_request_done().
> 
> Inspired by 9e2582e ("mmc: mediatek: fix SDIO irq issue") which used a
> similar fix to handle lost interrupts.
> 
The commit description of the referenced fix isn't clear with regard to
who's fault it is that an interrupt can be lost. I'd interpret it being
a silicon bug rather than a kernel/driver bug.
Not sure whether it's the case, but it's possible that both vendors use
at least parts of the same IP in the MMC block, and therefore the issue
pops up here too.

> Fixes: 066ecde ("mmc: meson-gx: add SDIO interrupt support")
> 
> Signed-off-by: Peter Suti <peter.suti at streamunlimited.com>
> ---
> Changes in v2:
> 	- use spin_lock instead of spin_lock_irqsave
> 	- only reenable interrupts if they were enabled already
> 
> Changes in v3:
> 	- Rework the patch based on feedback from Heiner Kallweit.
> 		The IRQ does not happen on 2 CPUs and the hard IRQ is not re-entrant.
> 		But still one SDIO IRQ is lost without this change.
> 		After the ack, reading the SD_EMMC_STATUS BIT(15) is set, but 
> 		meson_mmc_irq() is never called again.
> 
> 		The fix is similar to Mediatek msdc_recheck_sdio_irq().
> 		That platform also loses an IRQ in some cases it seems.
> 
>  drivers/mmc/host/meson-gx-mmc.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
> index 6e5ea0213b47..7d3ee2f9a7f6 100644
> --- a/drivers/mmc/host/meson-gx-mmc.c
> +++ b/drivers/mmc/host/meson-gx-mmc.c
> @@ -1023,6 +1023,22 @@ static irqreturn_t meson_mmc_irq(int irq, void *dev_id)
>  	if (ret == IRQ_HANDLED)
>  		meson_mmc_request_done(host->mmc, cmd->mrq);
>  
> +	/*
> +	* Sometimes after we ack all raised interrupts,
> +	* an IRQ_SDIO can still be pending, which can get lost.
> +	*

A reader may scratch his head here and wonder how the interrupt can get lost,
and why adding a workaround instead of eliminating the root cause for losing
the interrupt. If you can't provide an explanation why the root cause for
losing the interrupt can't be fixed, presumably you would have to say that
you're adding a workaround for a suspected silicon bug.

> +	* To prevent this, recheck the IRQ_SDIO here and schedule
> +	* it to be processed.
> +	*/
> +	raw_status = readl(host->regs + SD_EMMC_STATUS);
> +	status = raw_status & (IRQ_EN_MASK | IRQ_SDIO);

This isn't needed here. Why not simply:

status = readl(host->regs + SD_EMMC_STATUS);
if (status & IRQ_SDIO)
  ...


> +	if (status & IRQ_SDIO) {
> +		spin_lock(&host->lock);
> +		__meson_mmc_enable_sdio_irq(host->mmc, 0);
> +		sdio_signal_irq(host->mmc);
> +		spin_unlock(&host->lock);
> +	}
> +
>  	return ret;
>  }
>  



From mario.limonciello at amd.com  Wed Dec 14 18:18:54 2022
From: mario.limonciello at amd.com (Mario Limonciello)
Date: Wed, 14 Dec 2022 20:18:54 -0600
Subject: [PATCH] Bluetooth: btusb: Add new PID/VID 0489:e0f2 for MT7921
Message-ID: <20221215021854.1429-1-mario.limonciello@amd.com>

This bluetooth device is found in a combo WLAN/BT card
for a MediaTek 7921e.

The device information:

T:  Bus=01 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0489 ProdID=e0f2 Rev= 1.00
S:  Manufacturer=MediaTek Inc.
S:  Product=Wireless_Device
S:  SerialNumber=000000000
C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=125us
E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
E:  Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us
E:  Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us

Cc: Sean Wang <sean.wang at mediatek.com>
Cc: Anson Tsao <anson.tsao at amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello at amd.com>
---
 drivers/bluetooth/btusb.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index f05018988a17..c413826787b5 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -473,6 +473,9 @@ static const struct usb_device_id blacklist_table[] = {
 	{ USB_DEVICE(0x0489, 0xe0e0), .driver_info = BTUSB_MEDIATEK |
 						     BTUSB_WIDEBAND_SPEECH |
 						     BTUSB_VALID_LE_STATES },
+	{ USB_DEVICE(0x0489, 0xe0f2), .driver_info = BTUSB_MEDIATEK |
+						     BTUSB_WIDEBAND_SPEECH |
+						     BTUSB_VALID_LE_STATES },
 	{ USB_DEVICE(0x04ca, 0x3802), .driver_info = BTUSB_MEDIATEK |
 						     BTUSB_WIDEBAND_SPEECH |
 						     BTUSB_VALID_LE_STATES },
-- 
2.34.1



From daniel at makrotopia.org  Wed Dec 14 19:47:59 2022
From: daniel at makrotopia.org (Daniel Golle)
Date: Thu, 15 Dec 2022 03:47:59 +0000
Subject: [PATCH net v3] net: dsa: mt7530: remove redundant assignment
Message-ID: <Y5qY7x6la5TxZxzX@makrotopia.org>

Russell King correctly pointed out that the MAC_2500FD capability is
already added for port 5 (if not in RGMII mode) and port 6 (which only
supports SGMII) by mt7531_mac_port_get_caps. Remove the reduntant
setting of this capability flag which was added by a previous commit.

Fixes: e19de30d2080 ("net: dsa: mt7530: add support for in-band link status")
Reported-by: Russell King (Oracle) <rmk+kernel at armlinux.org.uk>
Reviewed-by: Russell King (Oracle) <rmk+kernel at armlinux.org.uk>
Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
Changes since v2: correct commit title 'reduntant' -> 'redundant'
Changes since v1: Use 12 chars for fixes tag, fix Russell's contact

 drivers/net/dsa/mt7530.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
index e74c6b406172..908fa89444c9 100644
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2919,9 +2919,6 @@ static void mt753x_phylink_get_caps(struct dsa_switch *ds, int port,
 	config->mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
 				   MAC_10 | MAC_100 | MAC_1000FD;
 
-	if ((priv->id == ID_MT7531) && mt753x_is_mac_port(port))
-		config->mac_capabilities |= MAC_2500FD;
-
 	/* This driver does not make use of the speed, duplex, pause or the
 	 * advertisement in its mac_config, so it is safe to mark this driver
 	 * as non-legacy.

base-commit: 7e68dd7d07a28faa2e6574dd6b9dbd90cdeaae91
-- 
2.39.0



From yc.hung at mediatek.com  Wed Dec 14 22:10:46 2022
From: yc.hung at mediatek.com (YC Hung)
Date: Thu, 15 Dec 2022 14:10:46 +0800
Subject: [PATCH] ASoC: SOF: mediatek: mt8195: remove a redundant comparison of sram
Message-ID: <20221215061046.16934-1-yc.hung@mediatek.com>

DSP SRAM is not used for audio shared buffer between host and DSP so
TOTAL_SIZE_SHARED_SRAM_FROM_TAIL is zero. Remove the definition and
redundant comparison to fix coverity "unsigned compared against 0".

Signed-off-by: YC Hung <yc.hung at mediatek.com>
---
 sound/soc/sof/mediatek/mt8195/mt8195.c | 5 -----
 sound/soc/sof/mediatek/mt8195/mt8195.h | 2 --
 2 files changed, 7 deletions(-)

diff --git a/sound/soc/sof/mediatek/mt8195/mt8195.c b/sound/soc/sof/mediatek/mt8195/mt8195.c
index 3c81e84fcecf..7c831e18483c 100644
--- a/sound/soc/sof/mediatek/mt8195/mt8195.c
+++ b/sound/soc/sof/mediatek/mt8195/mt8195.c
@@ -215,11 +215,6 @@ static int platform_parse_resource(struct platform_device *pdev, void *data)
 
 	adsp->pa_sram = (phys_addr_t)mmio->start;
 	adsp->sramsize = resource_size(mmio);
-	if (adsp->sramsize < TOTAL_SIZE_SHARED_SRAM_FROM_TAIL) {
-		dev_err(dev, "adsp SRAM(%#x) is not enough for share\n",
-			adsp->sramsize);
-		return -EINVAL;
-	}
 
 	dev_dbg(dev, "sram pbase=%pa,%#x\n", &adsp->pa_sram, adsp->sramsize);
 
diff --git a/sound/soc/sof/mediatek/mt8195/mt8195.h b/sound/soc/sof/mediatek/mt8195/mt8195.h
index 7ffd523f936c..b4229170049f 100644
--- a/sound/soc/sof/mediatek/mt8195/mt8195.h
+++ b/sound/soc/sof/mediatek/mt8195/mt8195.h
@@ -139,8 +139,6 @@ struct snd_sof_dev;
 #define DSP_MBOX1_BAR	6
 #define DSP_MBOX2_BAR	7
 
-#define TOTAL_SIZE_SHARED_SRAM_FROM_TAIL  0x0
-
 #define SIZE_SHARED_DRAM_DL 0x40000 /*Shared buffer for Downlink*/
 #define SIZE_SHARED_DRAM_UL 0x40000 /*Shared buffer for Uplink*/
 
-- 
2.18.0



From yongqiang.niu at mediatek.com  Wed Dec 14 23:28:05 2022
From: yongqiang.niu at mediatek.com (Yongqiang Niu)
Date: Thu, 15 Dec 2022 15:28:05 +0800
Subject: [PATCH v11, 3/4] mailbox: mtk-cmdq: add gce ddr enable support flow
In-Reply-To: <20221215072806.10224-1-yongqiang.niu@mediatek.com>
References: <20221215072806.10224-1-yongqiang.niu@mediatek.com>
Message-ID: <20221215072806.10224-4-yongqiang.niu@mediatek.com>

add gce ddr enable control flow when gce suspend/resume

when all cmdq instruction task has been processed done,
we need set this gce ddr enable to disable status to tell
cmdq hardware gce there is none task need process, and the hardware
can go into idle mode and no access ddr anymore, then the spm can go
into suspend.

the original issue is gce still access ddr when cmdq suspend function
call, but there is no task run.
so, we need control gce access ddr with this flow.
when cmdq suspend function, there is no task need process, we can
disable gce access ddr, to make sure system go into suspend success.

Signed-off-by: Yongqiang Niu <yongqiang.niu at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
---
 drivers/mailbox/mtk-cmdq-mailbox.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c b/drivers/mailbox/mtk-cmdq-mailbox.c
index d2363c6b8b7a..53904511598d 100644
--- a/drivers/mailbox/mtk-cmdq-mailbox.c
+++ b/drivers/mailbox/mtk-cmdq-mailbox.c
@@ -94,6 +94,18 @@ struct gce_plat {
 	u32 gce_num;
 };
 
+static void cmdq_sw_ddr_enable(struct cmdq *cmdq, bool enable)
+{
+	WARN_ON(clk_bulk_enable(cmdq->gce_num, cmdq->clocks));
+
+	if (enable)
+		writel(GCE_DDR_EN | GCE_CTRL_BY_SW, cmdq->base + GCE_GCTL_VALUE);
+	else
+		writel(GCE_CTRL_BY_SW, cmdq->base + GCE_GCTL_VALUE);
+
+	clk_bulk_disable(cmdq->gce_num, cmdq->clocks);
+}
+
 u8 cmdq_get_shift_pa(struct mbox_chan *chan)
 {
 	struct cmdq *cmdq = container_of(chan->mbox, struct cmdq, mbox);
@@ -322,6 +334,9 @@ static int cmdq_suspend(struct device *dev)
 	if (task_running)
 		dev_warn(dev, "exist running task(s) in suspend\n");
 
+	if (cmdq->sw_ddr_en)
+		cmdq_sw_ddr_enable(cmdq, false);
+
 	clk_bulk_unprepare(cmdq->gce_num, cmdq->clocks);
 
 	return 0;
@@ -333,6 +348,10 @@ static int cmdq_resume(struct device *dev)
 
 	WARN_ON(clk_bulk_prepare(cmdq->gce_num, cmdq->clocks));
 	cmdq->suspended = false;
+
+	if (cmdq->sw_ddr_en)
+		cmdq_sw_ddr_enable(cmdq, true);
+
 	return 0;
 }
 
@@ -340,6 +359,9 @@ static int cmdq_remove(struct platform_device *pdev)
 {
 	struct cmdq *cmdq = platform_get_drvdata(pdev);
 
+	if (cmdq->sw_ddr_en)
+		cmdq_sw_ddr_enable(cmdq, false);
+
 	clk_bulk_unprepare(cmdq->gce_num, cmdq->clocks);
 	return 0;
 }
-- 
2.25.1



From yongqiang.niu at mediatek.com  Wed Dec 14 23:28:03 2022
From: yongqiang.niu at mediatek.com (Yongqiang Niu)
Date: Thu, 15 Dec 2022 15:28:03 +0800
Subject: [PATCH v11, 1/4] mailbox: mtk-cmdq: Use GCE_CTRL_BY_SW definition instead of number
In-Reply-To: <20221215072806.10224-1-yongqiang.niu@mediatek.com>
References: <20221215072806.10224-1-yongqiang.niu@mediatek.com>
Message-ID: <20221215072806.10224-2-yongqiang.niu@mediatek.com>

Use GCE_CTRL_BY_SW definition instead of number

Signed-off-by: Yongqiang Niu <yongqiang.niu at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
---
 drivers/mailbox/mtk-cmdq-mailbox.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c b/drivers/mailbox/mtk-cmdq-mailbox.c
index 9465f9081515..c3cb24f51699 100644
--- a/drivers/mailbox/mtk-cmdq-mailbox.c
+++ b/drivers/mailbox/mtk-cmdq-mailbox.c
@@ -38,6 +38,7 @@
 #define CMDQ_THR_PRIORITY		0x40
 
 #define GCE_GCTL_VALUE			0x48
+#define GCE_CTRL_BY_SW				GENMASK(2, 0)
 
 #define CMDQ_THR_ACTIVE_SLOT_CYCLES	0x3200
 #define CMDQ_THR_ENABLED		0x1
@@ -129,7 +130,8 @@ static void cmdq_init(struct cmdq *cmdq)
 
 	WARN_ON(clk_bulk_enable(cmdq->gce_num, cmdq->clocks));
 	if (cmdq->control_by_sw)
-		writel(0x7, cmdq->base + GCE_GCTL_VALUE);
+		writel(GCE_CTRL_BY_SW, cmdq->base + GCE_GCTL_VALUE);
+
 	writel(CMDQ_THR_ACTIVE_SLOT_CYCLES, cmdq->base + CMDQ_THR_SLOT_CYCLES);
 	for (i = 0; i <= CMDQ_MAX_EVENT; i++)
 		writel(i, cmdq->base + CMDQ_SYNC_TOKEN_UPDATE);
-- 
2.25.1



From yongqiang.niu at mediatek.com  Wed Dec 14 23:28:06 2022
From: yongqiang.niu at mediatek.com (Yongqiang Niu)
Date: Thu, 15 Dec 2022 15:28:06 +0800
Subject: [PATCH v11, 4/4] mailbox: mtk-cmdq: add MT8186 support
In-Reply-To: <20221215072806.10224-1-yongqiang.niu@mediatek.com>
References: <20221215072806.10224-1-yongqiang.niu@mediatek.com>
Message-ID: <20221215072806.10224-5-yongqiang.niu@mediatek.com>

add MT8186 cmdq support

Signed-off-by: Yongqiang Niu <yongqiang.niu at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
---
 drivers/mailbox/mtk-cmdq-mailbox.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c b/drivers/mailbox/mtk-cmdq-mailbox.c
index 53904511598d..c5229f377c5e 100644
--- a/drivers/mailbox/mtk-cmdq-mailbox.c
+++ b/drivers/mailbox/mtk-cmdq-mailbox.c
@@ -694,9 +694,18 @@ static const struct gce_plat gce_plat_v6 = {
 	.gce_num = 2
 };
 
+static const struct gce_plat gce_plat_v7 = {
+	.thread_nr = 24,
+	.shift = 3,
+	.control_by_sw = true,
+	.sw_ddr_en = true,
+	.gce_num = 1
+};
+
 static const struct of_device_id cmdq_of_ids[] = {
 	{.compatible = "mediatek,mt8173-gce", .data = (void *)&gce_plat_v2},
 	{.compatible = "mediatek,mt8183-gce", .data = (void *)&gce_plat_v3},
+	{.compatible = "mediatek,mt8186-gce", .data = (void *)&gce_plat_v7},
 	{.compatible = "mediatek,mt6779-gce", .data = (void *)&gce_plat_v4},
 	{.compatible = "mediatek,mt8192-gce", .data = (void *)&gce_plat_v5},
 	{.compatible = "mediatek,mt8195-gce", .data = (void *)&gce_plat_v6},
-- 
2.25.1



From yongqiang.niu at mediatek.com  Wed Dec 14 23:28:02 2022
From: yongqiang.niu at mediatek.com (Yongqiang Niu)
Date: Thu, 15 Dec 2022 15:28:02 +0800
Subject: [PATCH v11, 0/4] mailbox: mtk-cmdq: add MT8186 support
Message-ID: <20221215072806.10224-1-yongqiang.niu@mediatek.com>

change since v10:
rebase base linux-next/master, tag: next-20221215

Yongqiang Niu (4):
  mailbox: mtk-cmdq: Use GCE_CTRL_BY_SW definition instead of number
  mailbox: mtk-cmdq: add gce software ddr enable private data
  mailbox: mtk-cmdq: add gce ddr enable support flow
  mailbox: mtk-cmdq: add MT8186 support

 drivers/mailbox/mtk-cmdq-mailbox.c | 45 +++++++++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

-- 
2.25.1



From yongqiang.niu at mediatek.com  Wed Dec 14 23:28:04 2022
From: yongqiang.niu at mediatek.com (Yongqiang Niu)
Date: Thu, 15 Dec 2022 15:28:04 +0800
Subject: [PATCH v11, 2/4] mailbox: mtk-cmdq: add gce software ddr enable private data
In-Reply-To: <20221215072806.10224-1-yongqiang.niu@mediatek.com>
References: <20221215072806.10224-1-yongqiang.niu@mediatek.com>
Message-ID: <20221215072806.10224-3-yongqiang.niu@mediatek.com>

if gce work control by software, we need set software enable
for MT8186 Soc

there is a handshake flow between gce and ddr hardware,
if not set ddr enable flag of gce, ddr will fall into idle
mode, then gce instructions will not process done.
we need set this flag of gce to tell ddr when gce is idle or busy
controlled by software flow.

0x48[2:0] means control by software
0x48[18:16] means ddr enable
0x48[2:0] is pre-condition of 0x48[18:16].
if we want set 0x48[18:16] ddr enable, 0x48[2:0] must be set at same
time.
and only these bits is useful, other bits is useless bits

Signed-off-by: Yongqiang Niu <yongqiang.niu at mediatek.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
---
 drivers/mailbox/mtk-cmdq-mailbox.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c b/drivers/mailbox/mtk-cmdq-mailbox.c
index c3cb24f51699..d2363c6b8b7a 100644
--- a/drivers/mailbox/mtk-cmdq-mailbox.c
+++ b/drivers/mailbox/mtk-cmdq-mailbox.c
@@ -39,6 +39,7 @@
 
 #define GCE_GCTL_VALUE			0x48
 #define GCE_CTRL_BY_SW				GENMASK(2, 0)
+#define GCE_DDR_EN				GENMASK(18, 16)
 
 #define CMDQ_THR_ACTIVE_SLOT_CYCLES	0x3200
 #define CMDQ_THR_ENABLED		0x1
@@ -81,6 +82,7 @@ struct cmdq {
 	bool			suspended;
 	u8			shift_pa;
 	bool			control_by_sw;
+	bool			sw_ddr_en;
 	u32			gce_num;
 };
 
@@ -88,6 +90,7 @@ struct gce_plat {
 	u32 thread_nr;
 	u8 shift;
 	bool control_by_sw;
+	bool sw_ddr_en;
 	u32 gce_num;
 };
 
@@ -127,10 +130,16 @@ static void cmdq_thread_resume(struct cmdq_thread *thread)
 static void cmdq_init(struct cmdq *cmdq)
 {
 	int i;
+	u32 gctl_regval = 0;
 
 	WARN_ON(clk_bulk_enable(cmdq->gce_num, cmdq->clocks));
 	if (cmdq->control_by_sw)
-		writel(GCE_CTRL_BY_SW, cmdq->base + GCE_GCTL_VALUE);
+		gctl_regval = GCE_CTRL_BY_SW;
+	if (cmdq->sw_ddr_en)
+		gctl_regval |= GCE_DDR_EN;
+
+	if (gctl_regval)
+		writel(gctl_regval, cmdq->base + GCE_GCTL_VALUE);
 
 	writel(CMDQ_THR_ACTIVE_SLOT_CYCLES, cmdq->base + CMDQ_THR_SLOT_CYCLES);
 	for (i = 0; i <= CMDQ_MAX_EVENT; i++)
@@ -545,6 +554,7 @@ static int cmdq_probe(struct platform_device *pdev)
 	cmdq->thread_nr = plat_data->thread_nr;
 	cmdq->shift_pa = plat_data->shift;
 	cmdq->control_by_sw = plat_data->control_by_sw;
+	cmdq->sw_ddr_en = plat_data->sw_ddr_en;
 	cmdq->gce_num = plat_data->gce_num;
 	cmdq->irq_mask = GENMASK(cmdq->thread_nr - 1, 0);
 	err = devm_request_irq(dev, cmdq->irq, cmdq_irq_handler, IRQF_SHARED,
-- 
2.25.1



From Elvis.Wang at mediatek.com  Thu Dec 15 01:01:38 2022
From: Elvis.Wang at mediatek.com (=?utf-8?B?RWx2aXMgV2FuZyAo546L5YabKQ==?=)
Date: Thu, 15 Dec 2022 09:01:38 +0000
Subject: [PATCH v5 1/2] dt-bindings: mailbox: add GCE header file for
 mt8188
In-Reply-To: <2cac7d40-1807-63b2-9be7-9e88e721b68c@linaro.org>
References: <20221201071316.24583-1-Elvis.Wang@mediatek.com>
	 <20221201071316.24583-2-Elvis.Wang@mediatek.com>
	 <2cac7d40-1807-63b2-9be7-9e88e721b68c@linaro.org>
Message-ID: <b906dcacd40eb22441e54a62b7ffdd993bdb4a2f.camel@mediatek.com>

On Thu, 2022-12-01 at 13:16 +0100, Krzysztof Kozlowski wrote:
> On 01/12/2022 08:13, Elvis.Wang wrote:
> > From: Elvis Wang <Elvis.Wang at mediatek.com>
> > 
> > Add Global Command Engine(GCE) header file to define the GCE thread
> > priority,
> > GCE subsys id, event and constant for mt8188.
> > 
> > Signed-off-by: Elvis Wang <Elvis.Wang at mediatek.com>
> > Reviewed-by: AngeloGioacchino Del Regno<
> > angelogioacchino.delregno at collabora.com>
> > ---
> 
> You got my ack here already.
> 
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
> 
> Best regards,
> Krzysztof
> 
Hi Jassi,

  Do you have any comment about this series patch?

Thanks
Best regards
Elvis

From u0084500 at gmail.com  Thu Dec 15 01:21:36 2022
From: u0084500 at gmail.com (cy_huang)
Date: Thu, 15 Dec 2022 17:21:36 +0800
Subject: [PATCH] usb: typec: tcpm: Fix altmode re-registration causes sysfs create fail
Message-ID: <1671096096-20307-1-git-send-email-u0084500@gmail.com>

From: ChiYuan Huang <cy_huang at richtek.com>

There's the altmode re-registeration issue after data role
swap (DR_SWAP).

Comparing to USBPD 2.0, in USBPD 3.0, it loose the limit that only DFP
can initiate the VDM command to get partner identity information.

For a USBPD 3.0 UFP device, it may already get the identity information
from its port partner before DR_SWAP. If DR_SWAP send or receive at the
mean time, 'send_discover' flag will be raised again. It causes discover
identify action restart while entering ready state. And after all
discover actions are done, the 'tcpm_register_altmodes' will be called.
If old altmode is not unregistered, this sysfs create fail can be found.

In 'DR_SWAP_CHANGE_DR' state case, only DFP will unregister altmodes.
For UFP, the original altmodes keep registered.

This patch fix the logic that after DR_SWAP, 'tcpm_unregister_altmodes'
must be called whatever the current data role is.

Fixes: ae8a2ca8a221 ("usb: typec: Group all TCPCI/TCPM code together)
Reported-by: TommyYl Chen <tommyyl.chen at mediatek.com>
Cc: stable at vger.kernel.org
Signed-off-by: ChiYuan Huang <cy_huang at richtek.com>
---
Hi,

Below's the issue log for the reference.

*TCPM
[    3.856679] AMS DISCOVER_MODES start
[    3.856687] PD TX, header: 0x188f
[    3.858827] PD TX complete, status: 0
[    3.865330] PD RX, header: 0x2daf [1]
[    3.865340] Rx VDM cmd 0xff01a043 type 1 cmd 3 len 2
[    3.865348] AMS DISCOVER_MODES finished
[    3.865352]  Alternate mode 0: SVID 0xff01, VDO 1: 0x001c0045
[    3.865362] AMS DISCOVER_MODES start
[    3.865367] PD TX, header: 0x1a8f
[    3.867802] PD TX complete, status: 0
[    3.875208] PD RX, header: 0x2faf [1]
[    3.875216] Rx VDM cmd 0x413ca043 type 1 cmd 3 len 2
[    3.875222] AMS DISCOVER_MODES finished
[    3.875225]  Alternate mode 1: SVID 0x413c, VDO 1: 0x00000001
[    3.938243] AMS GET_SINK_CAPABILITIES start
[    3.938255] state change SNK_READY -> AMS_START [rev3 GET_SINK_CAPABILITIES]
[    3.938266] state change AMS_START -> GET_SINK_CAP [rev3 GET_SINK_CAPABILITIES]
[    3.938274] PD TX, header: 0xe88
[    3.940268] PD TX complete, status: 0
[    3.940310] pending state change GET_SINK_CAP -> GET_SINK_CAP_TIMEOUT @ 60 ms
[rev3 GET_SINK_CAPABILITIES]
[    3.946291] PD RX, header: 0x13a4 [1]
[    3.946295] Port partner FRS capable partner_frs_current:0 port_frs_current:0 enable:n
[    3.946298] state change GET_SINK_CAP -> SNK_READY [rev3 GET_SINK_CAPABILITIES]
[    3.946304] AMS GET_SINK_CAPABILITIES finished
[    4.239342] CC1: 5 -> 4, CC2: 0 -> 0 [state SNK_READY, polarity 0, connected]
[    4.256594] PD RX, header: 0x5a9 [1]
[    4.256603] state change SNK_READY -> DR_SWAP_ACCEPT [rev3 DATA_ROLE_SWAP]
[    4.256609] PD TX, header: 0x83
[    4.258528] PD TX complete, status: 0
[    4.258584] state change DR_SWAP_ACCEPT -> DR_SWAP_CHANGE_DR [rev3 DATA_ROLE_SWAP]
[    4.258591] Requesting mux state 1, usb-role 1, orientation 1
[    4.259588] AMS DATA_ROLE_SWAP finished
[    4.259592] state change DR_SWAP_CHANGE_DR -> SNK_READY [rev3 NONE_AMS]
[    4.259605] AMS DISCOVER_IDENTITY start
[    4.259609] Sink TX No Go
[    4.260874] CC1: 4 -> 5, CC2: 0 -> 0 [state SNK_READY, polarity 0, connected]
[    4.359636] AMS DISCOVER_IDENTITY start
[    4.359642] PD TX, header: 0x12af
[    4.361884] PD TX complete, status: 0
[    4.369433] PD RX, header: 0x578f [1]
[    4.369439] Rx VDM cmd 0xff00a041 type 1 cmd 1 len 5
[    4.369448] AMS DISCOVER_IDENTITY finished
[    4.369515] Identity: 413c:c013.0712
[    4.369521] AMS DISCOVER_SVIDS start
[    4.369524] PD TX, header: 0x14af
[    4.371696] PD TX complete, status: 0
[    4.378564] PD RX, header: 0x398f [1]
[    4.378573] Rx VDM cmd 0xff00a042 type 1 cmd 2 len 3
[    4.378579] AMS DISCOVER_SVIDS finished
[    4.378582] SVID 1: 0xff01
[    4.378584] SVID 2: 0x413c
[    4.378594] AMS DISCOVER_MODES start
[    4.378597] PD TX, header: 0x16af
[    4.380696] PD TX complete, status: 0
[    4.387008] PD RX, header: 0x2b8f [1]
[    4.387014] Rx VDM cmd 0xff01a043 type 1 cmd 3 len 2
[    4.387021] AMS DISCOVER_MODES finished
[    4.387023]  Alternate mode 0: SVID 0xff01, VDO 1: 0x001c0045
[    4.387029] AMS DISCOVER_MODES start
[    4.387031] PD TX, header: 0x18af
[    4.389134] PD TX complete, status: 0
[    4.395528] PD RX, header: 0x2d8f [1]
[    4.395538] Rx VDM cmd 0x413ca043 type 1 cmd 3 len 2
[    4.395546] AMS DISCOVER_MODES finished
[    4.395548]  Alternate mode 1: SVID 0x413c, VDO 1: 0x00000001

*Kernel TRACE
sysfs: cannot create duplicate filename
'/devices/platform/soc/11d01000.i2c/i2c-0/0-0034/mt6360-tcpc.6.auto/typec/port0/port0.0/partner'
CPU: 2 PID: 299 Comm: mt6360-tcpc.6.a Tainted: GO      5.15.37-mtk+g880abc5122e7 #1
Hardware name: MediaTek MT8195 demo board (DT)
Call trace:
 dump_backtrace+0x0/0x1ac
 show_stack+0x24/0x30
 dump_stack_lvl+0x68/0x84
 dump_stack+0x1c/0x38
 sysfs_warn_dup+0x70/0x90
 typec_probe+0xa4/0x134 [typec]
 really_probe.part.0+0xa4/0x310
 __device_attach_driver+0x100/0x16c
 bus_for_each_drv+0x84/0xe0
 __device_attach+0xe0/0x1ac
 device_add+0x39c/0x8b0
 device_register+0x2c/0x40
 typec_register_altmode+0x1f4/0x360 [typec]
 typec_partner_register_altmode+0x1c/0x30 [typec]
 tcpm_pd_rx_handler+0x19d4/0x1c0c [tcpm]
 kthread_worker_fn+0xb8/0x290
 kthread+0x15c/0x170
 ret_from_fork+0x10/0x20
[    4.395962] typec_displayport port0-partner.2: failed to create symlinks
[    4.395967] typec_displayport: probe of port0-partner.2 failed with error -17

It seems it's a common issue if typec port supports the modal operation.

---
 drivers/usb/typec/tcpm/tcpm.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
index 904c7b4..59b366b 100644
--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -4594,14 +4594,13 @@ static void run_state_machine(struct tcpm_port *port)
 		tcpm_set_state(port, ready_state(port), 0);
 		break;
 	case DR_SWAP_CHANGE_DR:
-		if (port->data_role == TYPEC_HOST) {
-			tcpm_unregister_altmodes(port);
+		tcpm_unregister_altmodes(port);
+		if (port->data_role == TYPEC_HOST)
 			tcpm_set_roles(port, true, port->pwr_role,
 				       TYPEC_DEVICE);
-		} else {
+		else
 			tcpm_set_roles(port, true, port->pwr_role,
 				       TYPEC_HOST);
-		}
 		tcpm_ams_finish(port);
 		tcpm_set_state(port, ready_state(port), 0);
 		break;
-- 
2.7.4



From irui.wang at mediatek.com  Thu Dec 15 01:30:26 2022
From: irui.wang at mediatek.com (Irui Wang)
Date: Thu, 15 Dec 2022 17:30:26 +0800
Subject: [PATCH] media: jpeg: refactor multi-hw judgement
Message-ID: <20221215093026.12322-1-irui.wang@mediatek.com>

From: kyrie wu <kyrie.wu at mediatek.com>

some chips have multi-hw, but others have only one,
modify the condition of multi-hw judgement

Signed-off-by: kyrie wu <kyrie.wu at mediatek.com>
Signed-off-by: irui wang <irui.wang at mediatek.com>
---
 drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c |  5 +++--
 drivers/media/platform/mtk-jpeg/mtk_jpeg_core.h | 12 ++++++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
index 4a5c6415ad08..37db8b81a935 100644
--- a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
+++ b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
@@ -1695,8 +1695,7 @@ static int mtk_jpeg_probe(struct platform_device *pdev)
 		return -EINVAL;
  	}
 
-
-	if (list_empty(&pdev->dev.devres_head)) {
+	if (!jpeg->variant->hw_arch) {
 		INIT_DELAYED_WORK(&jpeg->job_timeout_work,
 				  mtk_jpeg_job_timeout_work);
 
@@ -1890,6 +1889,7 @@ static struct mtk_jpeg_variant mtk8195_jpegenc_drvdata = {
 	.ioctl_ops = &mtk_jpeg_enc_ioctl_ops,
 	.out_q_default_fourcc = V4L2_PIX_FMT_YUYV,
 	.cap_q_default_fourcc = V4L2_PIX_FMT_JPEG,
+	.hw_arch = MTK_JPEG_HW_MULTI_CORE,
 };
 
 static const struct mtk_jpeg_variant mtk8195_jpegdec_drvdata = {
@@ -1901,6 +1901,7 @@ static const struct mtk_jpeg_variant mtk8195_jpegdec_drvdata = {
 	.ioctl_ops = &mtk_jpeg_dec_ioctl_ops,
 	.out_q_default_fourcc = V4L2_PIX_FMT_JPEG,
 	.cap_q_default_fourcc = V4L2_PIX_FMT_YUV420M,
+	.hw_arch = MTK_JPEG_HW_MULTI_CORE,
 };
 
 #if defined(CONFIG_OF)
diff --git a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.h b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.h
index b9126476be8f..ec04a8ce73cf 100644
--- a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.h
+++ b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.h
@@ -46,6 +46,16 @@ enum mtk_jpeg_ctx_state {
 	MTK_JPEG_SOURCE_CHANGE,
 };
 
+/**
+ * enum mtk_jpeg_hw_arch - arch of the jpeg hw
+ * @MTK_JPEG_HW_SINGLE_CORE:	jpeg hw is single core
+ * @MTK_JPEG_HW_MULTI_CORE:		jpeg hw is mluti-core
+ */
+enum mtk_jpeg_hw_arch {
+	MTK_JPEG_HW_SINGLE_CORE = 0,
+	MTK_JPEG_HW_MULTI_CORE = 1,
+};
+
 /**
  * struct mtk_jpeg_variant - mtk jpeg driver variant
  * @clks:			clock names
@@ -60,6 +70,7 @@ enum mtk_jpeg_ctx_state {
  * @ioctl_ops:			the callback of jpeg v4l2_ioctl_ops
  * @out_q_default_fourcc:	output queue default fourcc
  * @cap_q_default_fourcc:	capture queue default fourcc
+ * @hw_arch:            mark jpeg hw arch
  */
 struct mtk_jpeg_variant {
 	struct clk_bulk_data *clks;
@@ -74,6 +85,7 @@ struct mtk_jpeg_variant {
 	const struct v4l2_ioctl_ops *ioctl_ops;
 	u32 out_q_default_fourcc;
 	u32 cap_q_default_fourcc;
+	enum mtk_jpeg_hw_arch hw_arch;
 };
 
 struct mtk_jpeg_src_buf {
-- 
2.18.0



From gregkh at linuxfoundation.org  Thu Dec 15 01:44:22 2022
From: gregkh at linuxfoundation.org (Greg KH)
Date: Thu, 15 Dec 2022 10:44:22 +0100
Subject: [PATCH] usb: typec: tcpm: Fix altmode re-registration causes
 sysfs create fail
In-Reply-To: <1671096096-20307-1-git-send-email-u0084500@gmail.com>
References: <1671096096-20307-1-git-send-email-u0084500@gmail.com>
Message-ID: <Y5rsdo/SGHJM4UKG@kroah.com>

On Thu, Dec 15, 2022 at 05:21:36PM +0800, cy_huang wrote:
> From: ChiYuan Huang <cy_huang at richtek.com>

Why not send directly from this address so we can validate that this is
the correct email address of yours?

thanks,

greg k-h


From angelogioacchino.delregno at collabora.com  Thu Dec 15 01:45:24 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 15 Dec 2022 10:45:24 +0100
Subject: [PATCH] media: jpeg: refactor multi-hw judgement
In-Reply-To: <20221215093026.12322-1-irui.wang@mediatek.com>
References: <20221215093026.12322-1-irui.wang@mediatek.com>
Message-ID: <e265a659-c2a0-7736-ad9f-c6fe8fce5432@collabora.com>

Il 15/12/22 10:30, Irui Wang ha scritto:
> From: kyrie wu <kyrie.wu at mediatek.com>
> 
> some chips have multi-hw, but others have only one,
> modify the condition of multi-hw judgement
> 
> Signed-off-by: kyrie wu <kyrie.wu at mediatek.com>
> Signed-off-by: irui wang <irui.wang at mediatek.com>

Agreed. But this needs a Fixes tag, please add the right one.

Regards,
Angelo




From u0084500 at gmail.com  Thu Dec 15 01:53:44 2022
From: u0084500 at gmail.com (ChiYuan Huang)
Date: Thu, 15 Dec 2022 17:53:44 +0800
Subject: [PATCH] usb: typec: tcpm: Fix altmode re-registration causes
 sysfs create fail
In-Reply-To: <Y5rsdo/SGHJM4UKG@kroah.com>
References: <1671096096-20307-1-git-send-email-u0084500@gmail.com> <Y5rsdo/SGHJM4UKG@kroah.com>
Message-ID: <CADiBU3-iVLQf6Q5SzOB_pMCs2PGcFuWryjpDn5Qvz41WQ6C2RA@mail.gmail.com>

Greg KH <gregkh at linuxfoundation.org> ? 2022?12?15? ?? ??5:44???
>
> On Thu, Dec 15, 2022 at 05:21:36PM +0800, cy_huang wrote:
> > From: ChiYuan Huang <cy_huang at richtek.com>
>
> Why not send directly from this address so we can validate that this is
> the correct email address of yours?
>
It's  the company mailbox policy. To send the external mail, there's
the security text block at the bottom.
Except this, some mail address are also blocked. To avoid this, I use
my personal mail to send the patch
and leave the SoB for the Richtek mailbox.
It's lazy to fight for this.

Sorry for the inconvinence.

> thanks,
>
> greg k-h


From macpaul.lin at mediatek.com  Thu Dec 15 01:58:32 2022
From: macpaul.lin at mediatek.com (Macpaul Lin)
Date: Thu, 15 Dec 2022 17:58:32 +0800
Subject: [PATCH] usb: typec: tcpm: Fix altmode re-registration causes
 sysfs create fail
In-Reply-To: <1671096096-20307-1-git-send-email-u0084500@gmail.com>
References: <1671096096-20307-1-git-send-email-u0084500@gmail.com>
Message-ID: <d15babbe-5f69-38c0-28d4-614b6ffd1b8b@mediatek.com>

On 12/15/22 17:21, cy_huang wrote:
> From: ChiYuan Huang <cy_huang at richtek.com>
> 
> There's the altmode re-registeration issue after data role
> swap (DR_SWAP).
> 
> Comparing to USBPD 2.0, in USBPD 3.0, it loose the limit that only DFP
> can initiate the VDM command to get partner identity information.
> 
> For a USBPD 3.0 UFP device, it may already get the identity information
> from its port partner before DR_SWAP. If DR_SWAP send or receive at the
> mean time, 'send_discover' flag will be raised again. It causes discover
> identify action restart while entering ready state. And after all
> discover actions are done, the 'tcpm_register_altmodes' will be called.
> If old altmode is not unregistered, this sysfs create fail can be found.
> 
> In 'DR_SWAP_CHANGE_DR' state case, only DFP will unregister altmodes.
> For UFP, the original altmodes keep registered.
> 
> This patch fix the logic that after DR_SWAP, 'tcpm_unregister_altmodes'
> must be called whatever the current data role is.
> 
> Fixes: ae8a2ca8a221 ("usb: typec: Group all TCPCI/TCPM code together)
> Reported-by: TommyYl Chen <tommyyl.chen at mediatek.com>
> Cc: stable at vger.kernel.org
> Signed-off-by: ChiYuan Huang <cy_huang at richtek.com>
> ---
> Hi,
> 
> Below's the issue log for the reference.
> 
> *TCPM
> [    3.856679] AMS DISCOVER_MODES start
> [    3.856687] PD TX, header: 0x188f
> [    3.858827] PD TX complete, status: 0
> [    3.865330] PD RX, header: 0x2daf [1]
> [    3.865340] Rx VDM cmd 0xff01a043 type 1 cmd 3 len 2
> [    3.865348] AMS DISCOVER_MODES finished
> [    3.865352]  Alternate mode 0: SVID 0xff01, VDO 1: 0x001c0045
> [    3.865362] AMS DISCOVER_MODES start
> [    3.865367] PD TX, header: 0x1a8f
> [    3.867802] PD TX complete, status: 0
> [    3.875208] PD RX, header: 0x2faf [1]
> [    3.875216] Rx VDM cmd 0x413ca043 type 1 cmd 3 len 2
> [    3.875222] AMS DISCOVER_MODES finished
> [    3.875225]  Alternate mode 1: SVID 0x413c, VDO 1: 0x00000001
> [    3.938243] AMS GET_SINK_CAPABILITIES start
> [    3.938255] state change SNK_READY -> AMS_START [rev3 GET_SINK_CAPABILITIES]
> [    3.938266] state change AMS_START -> GET_SINK_CAP [rev3 GET_SINK_CAPABILITIES]
> [    3.938274] PD TX, header: 0xe88
> [    3.940268] PD TX complete, status: 0
> [    3.940310] pending state change GET_SINK_CAP -> GET_SINK_CAP_TIMEOUT @ 60 ms
> [rev3 GET_SINK_CAPABILITIES]
> [    3.946291] PD RX, header: 0x13a4 [1]
> [    3.946295] Port partner FRS capable partner_frs_current:0 port_frs_current:0 enable:n
> [    3.946298] state change GET_SINK_CAP -> SNK_READY [rev3 GET_SINK_CAPABILITIES]
> [    3.946304] AMS GET_SINK_CAPABILITIES finished
> [    4.239342] CC1: 5 -> 4, CC2: 0 -> 0 [state SNK_READY, polarity 0, connected]
> [    4.256594] PD RX, header: 0x5a9 [1]
> [    4.256603] state change SNK_READY -> DR_SWAP_ACCEPT [rev3 DATA_ROLE_SWAP]
> [    4.256609] PD TX, header: 0x83
> [    4.258528] PD TX complete, status: 0
> [    4.258584] state change DR_SWAP_ACCEPT -> DR_SWAP_CHANGE_DR [rev3 DATA_ROLE_SWAP]
> [    4.258591] Requesting mux state 1, usb-role 1, orientation 1
> [    4.259588] AMS DATA_ROLE_SWAP finished
> [    4.259592] state change DR_SWAP_CHANGE_DR -> SNK_READY [rev3 NONE_AMS]
> [    4.259605] AMS DISCOVER_IDENTITY start
> [    4.259609] Sink TX No Go
> [    4.260874] CC1: 4 -> 5, CC2: 0 -> 0 [state SNK_READY, polarity 0, connected]
> [    4.359636] AMS DISCOVER_IDENTITY start
> [    4.359642] PD TX, header: 0x12af
> [    4.361884] PD TX complete, status: 0
> [    4.369433] PD RX, header: 0x578f [1]
> [    4.369439] Rx VDM cmd 0xff00a041 type 1 cmd 1 len 5
> [    4.369448] AMS DISCOVER_IDENTITY finished
> [    4.369515] Identity: 413c:c013.0712
> [    4.369521] AMS DISCOVER_SVIDS start
> [    4.369524] PD TX, header: 0x14af
> [    4.371696] PD TX complete, status: 0
> [    4.378564] PD RX, header: 0x398f [1]
> [    4.378573] Rx VDM cmd 0xff00a042 type 1 cmd 2 len 3
> [    4.378579] AMS DISCOVER_SVIDS finished
> [    4.378582] SVID 1: 0xff01
> [    4.378584] SVID 2: 0x413c
> [    4.378594] AMS DISCOVER_MODES start
> [    4.378597] PD TX, header: 0x16af
> [    4.380696] PD TX complete, status: 0
> [    4.387008] PD RX, header: 0x2b8f [1]
> [    4.387014] Rx VDM cmd 0xff01a043 type 1 cmd 3 len 2
> [    4.387021] AMS DISCOVER_MODES finished
> [    4.387023]  Alternate mode 0: SVID 0xff01, VDO 1: 0x001c0045
> [    4.387029] AMS DISCOVER_MODES start
> [    4.387031] PD TX, header: 0x18af
> [    4.389134] PD TX complete, status: 0
> [    4.395528] PD RX, header: 0x2d8f [1]
> [    4.395538] Rx VDM cmd 0x413ca043 type 1 cmd 3 len 2
> [    4.395546] AMS DISCOVER_MODES finished
> [    4.395548]  Alternate mode 1: SVID 0x413c, VDO 1: 0x00000001
> 
> *Kernel TRACE
> sysfs: cannot create duplicate filename
> '/devices/platform/soc/11d01000.i2c/i2c-0/0-0034/mt6360-tcpc.6.auto/typec/port0/port0.0/partner'
> CPU: 2 PID: 299 Comm: mt6360-tcpc.6.a Tainted: GO      5.15.37-mtk+g880abc5122e7 #1
> Hardware name: MediaTek MT8195 demo board (DT)
> Call trace:
>   dump_backtrace+0x0/0x1ac
>   show_stack+0x24/0x30
>   dump_stack_lvl+0x68/0x84
>   dump_stack+0x1c/0x38
>   sysfs_warn_dup+0x70/0x90
>   typec_probe+0xa4/0x134 [typec]
>   really_probe.part.0+0xa4/0x310
>   __device_attach_driver+0x100/0x16c
>   bus_for_each_drv+0x84/0xe0
>   __device_attach+0xe0/0x1ac
>   device_add+0x39c/0x8b0
>   device_register+0x2c/0x40
>   typec_register_altmode+0x1f4/0x360 [typec]
>   typec_partner_register_altmode+0x1c/0x30 [typec]
>   tcpm_pd_rx_handler+0x19d4/0x1c0c [tcpm]
>   kthread_worker_fn+0xb8/0x290
>   kthread+0x15c/0x170
>   ret_from_fork+0x10/0x20
> [    4.395962] typec_displayport port0-partner.2: failed to create symlinks
> [    4.395967] typec_displayport: probe of port0-partner.2 failed with error -17
> 
> It seems it's a common issue if typec port supports the modal operation.
> 
> ---
>   drivers/usb/typec/tcpm/tcpm.c | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
> index 904c7b4..59b366b 100644
> --- a/drivers/usb/typec/tcpm/tcpm.c
> +++ b/drivers/usb/typec/tcpm/tcpm.c
> @@ -4594,14 +4594,13 @@ static void run_state_machine(struct tcpm_port *port)
>   		tcpm_set_state(port, ready_state(port), 0);
>   		break;
>   	case DR_SWAP_CHANGE_DR:
> -		if (port->data_role == TYPEC_HOST) {
> -			tcpm_unregister_altmodes(port);
> +		tcpm_unregister_altmodes(port);
> +		if (port->data_role == TYPEC_HOST)
>   			tcpm_set_roles(port, true, port->pwr_role,
>   				       TYPEC_DEVICE);
> -		} else {
> +		else
>   			tcpm_set_roles(port, true, port->pwr_role,
>   				       TYPEC_HOST);
> -		}
>   		tcpm_ams_finish(port);
>   		tcpm_set_state(port, ready_state(port), 0);
>   		break;

Reviewed-by: Macpaul Lin <macpaul.lin at mediatek.com>

Thank for your help.

Regards,
Macpaul Lin


From krzysztof.kozlowski at linaro.org  Thu Dec 15 02:08:44 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Thu, 15 Dec 2022 11:08:44 +0100
Subject: [PATCH v5 4/7] dt-bindings: pinctrl: add bindings for Mediatek
 MT8365 SoC
In-Reply-To: <20221213234346.2868828-5-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
 <20221213234346.2868828-5-bero@baylibre.com>
Message-ID: <85d8ca20-69d2-de77-8aa0-e5f2f77b07dc@linaro.org>

On 14/12/2022 00:43, Bernhard Rosenkr?nzer wrote:
> Add devicetree bindings for Mediatek MT8365 pinctrl driver.
> 

Please use scripts/get_maintainers.pl to get a list of necessary people
and lists to CC.  It might happen, that command when run on an older
kernel, gives you outdated entries.  Therefore please be sure you base
your patches on recent Linux kernel.

This applies to all patches as others are also not properly sent.

> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
> ---
>  .../pinctrl/mediatek,mt8365-pinctrl.yaml      | 197 ++++++++++++++++++
>  1 file changed, 197 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
> 
> diff --git a/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
> new file mode 100644
> index 0000000000000..3c0248b48caff
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
> @@ -0,0 +1,197 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/pinctrl/mediatek,mt8365-pinctrl.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Mediatek MT8365 Pin Controller
> +
> +maintainers:
> +  - Zhiyong Tao <zhiyong.tao at mediatek.com>
> +  - Bernhard Rosenkr?nzer <bero at baylibre.com>
> +
> +description: |
> +  The MediaTek's MT8365 Pin controller is used to control SoC pins.
> +
> +properties:
> +  compatible:
> +    const: mediatek,mt8365-pinctrl
> +
> +  reg:
> +    maxItems: 1
> +
> +  mediatek,pctl-regmap:
> +    $ref: /schemas/types.yaml#/definitions/phandle-array
> +    items:
> +      maxItems: 1
> +    minItems: 1
> +    maxItems: 2
> +    description: |
> +      Should be phandles of the syscfg node.
> +
> +  gpio-controller: true
> +
> +  "#gpio-cells":
> +    const: 2
> +    description: |
> +      Number of cells in GPIO specifier. Since the generic GPIO
> +      binding is used, the amount of cells must be specified as 2. See the below
> +      mentioned gpio binding representation for description of particular cells.
> +
> +  interrupt-controller: true
> +
> +  interrupts:
> +    maxItems: 1
> +
> +  "#interrupt-cells":
> +    const: 2
> +
> +patternProperties:
> +  "-pins$":
> +    type: object
> +    additionalProperties: false
> +    patternProperties:
> +      "pins$":
> +        type: object
> +        additionalProperties: false
> +        description: |
> +          A pinctrl node should contain at least one subnode representing the
> +          pinctrl groups available on the machine. Each subnode will list the
> +          pins it needs, and how they should be configured, with regard to muxer
> +          configuration, pullups, drive strength, input enable/disable and input
> +          schmitt.
> +        $ref: /schemas/pinctrl/pincfg-node.yaml
> +
> +        properties:
> +          pinmux:
> +            description:
> +              integer array, represents gpio pin number and mux setting.
> +              Supported pin number and mux varies for different SoCs, and are
> +              defined as macros in <soc>-pinfunc.h directly.
> +
> +          bias-disable: true
> +
> +          bias-pull-up:
> +            description: |
> +              Besides generic pinconfig options, it can be used as the pull up
> +              settings for 2 pull resistors, R0 and R1. User can configure those
> +              special pins.
> +
> +          bias-pull-down: true
> +
> +          input-enable: true
> +
> +          input-disable: true
> +
> +          output-low: true
> +
> +          output-high: true
> +
> +          input-schmitt-enable: true
> +
> +          input-schmitt-disable: true
> +
> +          mediatek,drive-strength-adv:
> +            description: |
> +              Describe the specific driving setup property.
> +              For I2C pins, the existing generic driving setup can only support
> +              2/4/6/8/10/12/14/16mA driving. But in specific driving setup, they
> +              can support 0.125/0.25/0.5/1mA adjustment. If we enable specific
> +              driving setup, the existing generic setup will be disabled.
> +              The specific driving setup is controlled by E1E0EN.
> +              When E1=0/E0=0, the strength is 0.125mA.
> +              When E1=0/E0=1, the strength is 0.25mA.
> +              When E1=1/E0=0, the strength is 0.5mA.
> +              When E1=1/E0=1, the strength is 1mA.
> +              EN is used to enable or disable the specific driving setup.
> +              Valid arguments are described as below:
> +              0: (E1, E0, EN) = (0, 0, 0)
> +              1: (E1, E0, EN) = (0, 0, 1)
> +              2: (E1, E0, EN) = (0, 1, 0)
> +              3: (E1, E0, EN) = (0, 1, 1)
> +              4: (E1, E0, EN) = (1, 0, 0)
> +              5: (E1, E0, EN) = (1, 0, 1)
> +              6: (E1, E0, EN) = (1, 1, 0)
> +              7: (E1, E0, EN) = (1, 1, 1)
> +              So the valid arguments are from 0 to 7.
> +            $ref: /schemas/types.yaml#/definitions/uint32
> +            enum: [0, 1, 2, 3, 4, 5, 6, 7]
> +
> +          mediatek,pull-up-adv:
> +            description: |
> +              Pull up setings for 2 pull resistors, R0 and R1. User can
> +              configure those special pins. Valid arguments are described as below:
> +              0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
> +              1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
> +              2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
> +              3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
> +            $ref: /schemas/types.yaml#/definitions/uint32
> +            enum: [0, 1, 2, 3]
> +
> +          mediatek,pull-down-adv:
> +            description: |
> +              Pull down settings for 2 pull resistors, R0 and R1. User can
> +              configure those special pins. Valid arguments are described as below:
> +              0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
> +              1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
> +              2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
> +              3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
> +            $ref: /schemas/types.yaml#/definitions/uint32
> +            enum: [0, 1, 2, 3]
> +
> +          mediatek,tdsel:
> +            description: |
> +              An integer describing the steps for output level shifter duty
> +              cycle when asserted (high pulse width adjustment). Valid arguments
> +              are from 0 to 15.
> +            $ref: /schemas/types.yaml#/definitions/uint32
> +
> +          mediatek,rdsel:
> +            description: |
> +              An integer describing the steps for input level shifter duty cycle
> +              when asserted (high pulse width adjustment). Valid arguments are
> +              from 0 to 63.
> +            $ref: /schemas/types.yaml#/definitions/uint32
> +
> +        required:
> +          - pinmux
> +
> +required:
> +  - compatible
> +  - reg
> +  - gpio-controller
> +  - "#gpio-cells"
> +
> +allOf:
> +  - $ref: pinctrl.yaml#
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/interrupt-controller/arm-gic.h>
> +    #include <dt-bindings/pinctrl/mt8365-pinfunc.h>
> +    soc {
> +        #address-cells = <2>;
> +        #size-cells = <2>;
> +
> +        pio: pinctrl at 1000b000 {
> +          compatible = "mediatek,mt8365-pinctrl";

You use inconsistent indentation in example. Stick to one - either 2 or
4 spaces.


Best regards,
Krzysztof



From angelogioacchino.delregno at collabora.com  Thu Dec 15 02:31:10 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 15 Dec 2022 11:31:10 +0100
Subject: [PATCH] ASoC: SOF: mediatek: mt8195: remove a redundant
 comparison of sram
In-Reply-To: <20221215061046.16934-1-yc.hung@mediatek.com>
References: <20221215061046.16934-1-yc.hung@mediatek.com>
Message-ID: <7e8edf6f-9971-c704-4299-be9f7098d1cd@collabora.com>

Il 15/12/22 07:10, YC Hung ha scritto:
> DSP SRAM is not used for audio shared buffer between host and DSP so
> TOTAL_SIZE_SHARED_SRAM_FROM_TAIL is zero. Remove the definition and
> redundant comparison to fix coverity "unsigned compared against 0".
> 
> Signed-off-by: YC Hung <yc.hung at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angeloigoacchino.delregno at collabora.com>




From Johnson.Wang at mediatek.com  Thu Dec 15 02:50:22 2022
From: Johnson.Wang at mediatek.com (=?utf-8?B?Sm9obnNvbiBXYW5nICjnjovogZbpkasp?=)
Date: Thu, 15 Dec 2022 10:50:22 +0000
Subject: [PATCH] media: jpeg: refactor multi-hw judgement
In-Reply-To: <20221215093026.12322-1-irui.wang@mediatek.com>
References: <20221215093026.12322-1-irui.wang@mediatek.com>
Message-ID: <1895ff3f71fe7fe6c228d76dd046ea4f43b3dbf5.camel@mediatek.com>

On Thu, 2022-12-15 at 17:30 +0800, Irui Wang wrote:
> From: kyrie wu <kyrie.wu at mediatek.com>
> 
> some chips have multi-hw, but others have only one,
> modify the condition of multi-hw judgement
> 
> Signed-off-by: kyrie wu <kyrie.wu at mediatek.com>
> Signed-off-by: irui wang <irui.wang at mediatek.com>
> ---
>  drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c |  5 +++--
>  drivers/media/platform/mtk-jpeg/mtk_jpeg_core.h | 12 ++++++++++++
>  2 files changed, 15 insertions(+), 2 deletions(-)
> 

This may conflict with kernel mainline since mtk-jpeg folder doesn't
exist.
Please fix it.

BRs,
Johnson Wang

From angelogioacchino.delregno at collabora.com  Thu Dec 15 03:09:52 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 15 Dec 2022 12:09:52 +0100
Subject: [PATCH] media: jpeg: refactor multi-hw judgement
In-Reply-To: <1895ff3f71fe7fe6c228d76dd046ea4f43b3dbf5.camel@mediatek.com>
References: <20221215093026.12322-1-irui.wang@mediatek.com>
 <1895ff3f71fe7fe6c228d76dd046ea4f43b3dbf5.camel@mediatek.com>
Message-ID: <9a7434ba-2d42-cf15-334b-637b5f1b01a3@collabora.com>

Il 15/12/22 11:50, Johnson Wang (???) ha scritto:
> On Thu, 2022-12-15 at 17:30 +0800, Irui Wang wrote:
>> From: kyrie wu <kyrie.wu at mediatek.com>
>>
>> some chips have multi-hw, but others have only one,
>> modify the condition of multi-hw judgement
>>
>> Signed-off-by: kyrie wu <kyrie.wu at mediatek.com>
>> Signed-off-by: irui wang <irui.wang at mediatek.com>
>> ---
>>   drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c |  5 +++--
>>   drivers/media/platform/mtk-jpeg/mtk_jpeg_core.h | 12 ++++++++++++
>>   2 files changed, 15 insertions(+), 2 deletions(-)
>>
> 
> This may conflict with kernel mainline since mtk-jpeg folder doesn't
> exist.
> Please fix it.
> 
> BRs,
> Johnson Wang

Ouch. I just noticed that the folder is mismatching; this didn't deserve
a R-b tag. I'll be more careful next time.



From gregkh at linuxfoundation.org  Thu Dec 15 03:43:35 2022
From: gregkh at linuxfoundation.org (Greg KH)
Date: Thu, 15 Dec 2022 12:43:35 +0100
Subject: [PATCH] usb: typec: tcpm: Fix altmode re-registration causes
 sysfs create fail
In-Reply-To: <CADiBU3-iVLQf6Q5SzOB_pMCs2PGcFuWryjpDn5Qvz41WQ6C2RA@mail.gmail.com>
References: <1671096096-20307-1-git-send-email-u0084500@gmail.com>
 <Y5rsdo/SGHJM4UKG@kroah.com>
 <CADiBU3-iVLQf6Q5SzOB_pMCs2PGcFuWryjpDn5Qvz41WQ6C2RA@mail.gmail.com>
Message-ID: <Y5sIZ3zC6o4ARDEn@kroah.com>

On Thu, Dec 15, 2022 at 05:53:44PM +0800, ChiYuan Huang wrote:
> Greg KH <gregkh at linuxfoundation.org> ? 2022?12?15? ?? ??5:44???
> >
> > On Thu, Dec 15, 2022 at 05:21:36PM +0800, cy_huang wrote:
> > > From: ChiYuan Huang <cy_huang at richtek.com>
> >
> > Why not send directly from this address so we can validate that this is
> > the correct email address of yours?
> >
> It's  the company mailbox policy. To send the external mail, there's
> the security text block at the bottom.
> Except this, some mail address are also blocked. To avoid this, I use
> my personal mail to send the patch
> and leave the SoB for the Richtek mailbox.
> It's lazy to fight for this.

Please fix it, otherwise your company's email address will be spoofed
and people can claim to be sending changes from their domain.

Please fix that up, abusing random gmail addresses like this is not ok,
sorry.

greg k-h


From allen-kh.cheng at mediatek.com  Thu Dec 15 04:00:13 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Thu, 15 Dec 2022 20:00:13 +0800
Subject: [PATCH 1/4] dt-bindings: power: Add MT8192 ADSP power domain
In-Reply-To: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
References: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221215120016.26611-2-allen-kh.cheng@mediatek.com>

Add power domain ID for the ADSP power partition found on MT8192 SoC.

Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
---
 include/dt-bindings/power/mt8192-power.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/dt-bindings/power/mt8192-power.h b/include/dt-bindings/power/mt8192-power.h
index 4eaa53d7270a..63e81cd0d06d 100644
--- a/include/dt-bindings/power/mt8192-power.h
+++ b/include/dt-bindings/power/mt8192-power.h
@@ -28,5 +28,6 @@
 #define MT8192_POWER_DOMAIN_CAM_RAWA	18
 #define MT8192_POWER_DOMAIN_CAM_RAWB	19
 #define MT8192_POWER_DOMAIN_CAM_RAWC	20
+#define MT8192_POWER_DOMAIN_ADSP	21
 
 #endif /* _DT_BINDINGS_POWER_MT8192_POWER_H */
-- 
2.18.0



From allen-kh.cheng at mediatek.com  Thu Dec 15 04:00:12 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Thu, 15 Dec 2022 20:00:12 +0800
Subject: [PATCH 0/4] Add ADSP power domains controller support for MT8192
Message-ID: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>

This series is based on matthias github, v6.1-next.

[1] https://patchwork.kernel.org/project/linux-mediatek/patch/20221201073328.1559-1-allen-kh.cheng at mediatek.com/

Allen-KH Cheng (4):
  dt-bindings: power: Add MT8192 ADSP power domain
  soc: mediatek: pm-domains: Add ADSP power domain data for MT8192
  dt-bindings: arm: mediatek: Add missing power-domains property
  arm64: dts: mediatek: Add the missing ADSP power domains controller
    for MT8192

 .../arm/mediatek/mediatek,mt8192-clock.yaml     | 17 +++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt8192.dtsi        |  9 +++++++++
 drivers/soc/mediatek/mt8192-pm-domains.h        | 16 ++++++++++++++++
 include/dt-bindings/power/mt8192-power.h        |  1 +
 4 files changed, 43 insertions(+)

-- 
2.18.0



From allen-kh.cheng at mediatek.com  Thu Dec 15 04:00:16 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Thu, 15 Dec 2022 20:00:16 +0800
Subject: [PATCH 4/4] arm64: dts: mediatek: Add the missing ADSP power domains controller for MT8192
In-Reply-To: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
References: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221215120016.26611-5-allen-kh.cheng@mediatek.com>

Add the missing ADSP power domains controller for mt8192-scp_adsp clock
controllers.

Fixes: 5d2b897bc6f5 ("arm64: dts: mediatek: Add mt8192 clock controllers")
Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
---
 arch/arm64/boot/dts/mediatek/mt8192.dtsi | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
index 6b20376191a7..6ee60db3ac23 100644
--- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
@@ -511,6 +511,14 @@
 						};
 					};
 				};
+
+				power-domain at MT8192_POWER_DOMAIN_ADSP {
+					reg = <MT8192_POWER_DOMAIN_ADSP>;
+					clocks = <&topckgen CLK_TOP_ADSP_SEL>;
+					clock-names = "adsp";
+					mediatek,infracfg = <&infracfg>;
+					#power-domain-cells = <0>;
+				};
 			};
 		};
 
@@ -574,6 +582,7 @@
 		scp_adsp: clock-controller at 10720000 {
 			compatible = "mediatek,mt8192-scp_adsp";
 			reg = <0 0x10720000 0 0x1000>;
+			power-domains = <&spm MT8192_POWER_DOMAIN_ADSP>;
 			#clock-cells = <1>;
 		};
 
-- 
2.18.0



From allen-kh.cheng at mediatek.com  Thu Dec 15 04:00:14 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Thu, 15 Dec 2022 20:00:14 +0800
Subject: [PATCH 2/4] soc: mediatek: pm-domains: Add ADSP power domain data for MT8192
In-Reply-To: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
References: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221215120016.26611-3-allen-kh.cheng@mediatek.com>

Add ADSP pm-domains (mtcmos) data for MT8192 SoC.

Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
---
 drivers/soc/mediatek/mt8192-pm-domains.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/soc/mediatek/mt8192-pm-domains.h b/drivers/soc/mediatek/mt8192-pm-domains.h
index b97b2051920f..19e58f0ca1df 100644
--- a/drivers/soc/mediatek/mt8192-pm-domains.h
+++ b/drivers/soc/mediatek/mt8192-pm-domains.h
@@ -287,6 +287,22 @@ static const struct scpsys_domain_data scpsys_domain_data_mt8192[] = {
 		.sram_pdn_bits = GENMASK(8, 8),
 		.sram_pdn_ack_bits = GENMASK(12, 12),
 	},
+	[MT8192_POWER_DOMAIN_ADSP] = {
+		.name = "adsp",
+		.sta_mask = BIT(22),
+		.ctl_offs = 0x0358,
+		.sram_pdn_bits = GENMASK(8, 8),
+		.sram_pdn_ack_bits = GENMASK(12, 12),
+		.ext_buck_iso_offs = 0x039C,
+		.ext_buck_iso_mask = BIT(2),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_ADSP,
+				    MT8192_TOP_AXI_PROT_EN_2_SET,
+				    MT8192_TOP_AXI_PROT_EN_2_CLR,
+				    MT8192_TOP_AXI_PROT_EN_2_STA1),
+		},
+		.caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_EXT_BUCK_ISO,
+	},
 	[MT8192_POWER_DOMAIN_CAM] = {
 		.name = "cam",
 		.sta_mask = BIT(23),
-- 
2.18.0



From allen-kh.cheng at mediatek.com  Thu Dec 15 04:00:15 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Thu, 15 Dec 2022 20:00:15 +0800
Subject: [PATCH 3/4] dt-bindings: arm: mediatek: Add missing power-domains property
In-Reply-To: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
References: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221215120016.26611-4-allen-kh.cheng@mediatek.com>

The "mediatek,mt8192-scp_adsp" binding requires a power domain to be
specified.

Fixes: 4a803990aeb1 ("dt-bindings: ARM: Mediatek: Add new document bindings of MT8192 clock")
Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
---
 .../arm/mediatek/mediatek,mt8192-clock.yaml     | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
index b57cc2e69efb..cbedef114103 100644
--- a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
+++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
@@ -40,6 +40,9 @@ properties:
   reg:
     maxItems: 1
 
+  power-domains:
+    maxItems: 1
+
   '#clock-cells':
     const: 1
 
@@ -49,11 +52,25 @@ required:
 
 additionalProperties: false
 
+allOf:
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - mediatek,mt8192-scp_adsp
+    then:
+      required:
+        - power-domains
+
 examples:
   - |
+    #include <dt-bindings/power/mt8192-power.h>
+
     scp_adsp: clock-controller at 10720000 {
         compatible = "mediatek,mt8192-scp_adsp";
         reg = <0x10720000 0x1000>;
+        power-domains = <&spm MT8192_POWER_DOMAIN_ADSP>;
         #clock-cells = <1>;
     };
 
-- 
2.18.0



From macpaul.lin at mediatek.com  Thu Dec 15 01:58:32 2022
From: macpaul.lin at mediatek.com (Macpaul Lin)
Date: Thu, 15 Dec 2022 17:58:32 +0800
Subject: [PATCH] usb: typec: tcpm: Fix altmode re-registration causes
 sysfs create fail
In-Reply-To: <1671096096-20307-1-git-send-email-u0084500@gmail.com>
References: <1671096096-20307-1-git-send-email-u0084500@gmail.com>
Message-ID: <d15babbe-5f69-38c0-28d4-614b6ffd1b8b@mediatek.com>

On 12/15/22 17:21, cy_huang wrote:
> From: ChiYuan Huang <cy_huang at richtek.com>
> 
> There's the altmode re-registeration issue after data role
> swap (DR_SWAP).
> 
> Comparing to USBPD 2.0, in USBPD 3.0, it loose the limit that only DFP
> can initiate the VDM command to get partner identity information.
> 
> For a USBPD 3.0 UFP device, it may already get the identity information
> from its port partner before DR_SWAP. If DR_SWAP send or receive at the
> mean time, 'send_discover' flag will be raised again. It causes discover
> identify action restart while entering ready state. And after all
> discover actions are done, the 'tcpm_register_altmodes' will be called.
> If old altmode is not unregistered, this sysfs create fail can be found.
> 
> In 'DR_SWAP_CHANGE_DR' state case, only DFP will unregister altmodes.
> For UFP, the original altmodes keep registered.
> 
> This patch fix the logic that after DR_SWAP, 'tcpm_unregister_altmodes'
> must be called whatever the current data role is.
> 
> Fixes: ae8a2ca8a221 ("usb: typec: Group all TCPCI/TCPM code together)
> Reported-by: TommyYl Chen <tommyyl.chen at mediatek.com>
> Cc: stable at vger.kernel.org
> Signed-off-by: ChiYuan Huang <cy_huang at richtek.com>
> ---
> Hi,
> 
> Below's the issue log for the reference.
> 
> *TCPM
> [    3.856679] AMS DISCOVER_MODES start
> [    3.856687] PD TX, header: 0x188f
> [    3.858827] PD TX complete, status: 0
> [    3.865330] PD RX, header: 0x2daf [1]
> [    3.865340] Rx VDM cmd 0xff01a043 type 1 cmd 3 len 2
> [    3.865348] AMS DISCOVER_MODES finished
> [    3.865352]  Alternate mode 0: SVID 0xff01, VDO 1: 0x001c0045
> [    3.865362] AMS DISCOVER_MODES start
> [    3.865367] PD TX, header: 0x1a8f
> [    3.867802] PD TX complete, status: 0
> [    3.875208] PD RX, header: 0x2faf [1]
> [    3.875216] Rx VDM cmd 0x413ca043 type 1 cmd 3 len 2
> [    3.875222] AMS DISCOVER_MODES finished
> [    3.875225]  Alternate mode 1: SVID 0x413c, VDO 1: 0x00000001
> [    3.938243] AMS GET_SINK_CAPABILITIES start
> [    3.938255] state change SNK_READY -> AMS_START [rev3 GET_SINK_CAPABILITIES]
> [    3.938266] state change AMS_START -> GET_SINK_CAP [rev3 GET_SINK_CAPABILITIES]
> [    3.938274] PD TX, header: 0xe88
> [    3.940268] PD TX complete, status: 0
> [    3.940310] pending state change GET_SINK_CAP -> GET_SINK_CAP_TIMEOUT @ 60 ms
> [rev3 GET_SINK_CAPABILITIES]
> [    3.946291] PD RX, header: 0x13a4 [1]
> [    3.946295] Port partner FRS capable partner_frs_current:0 port_frs_current:0 enable:n
> [    3.946298] state change GET_SINK_CAP -> SNK_READY [rev3 GET_SINK_CAPABILITIES]
> [    3.946304] AMS GET_SINK_CAPABILITIES finished
> [    4.239342] CC1: 5 -> 4, CC2: 0 -> 0 [state SNK_READY, polarity 0, connected]
> [    4.256594] PD RX, header: 0x5a9 [1]
> [    4.256603] state change SNK_READY -> DR_SWAP_ACCEPT [rev3 DATA_ROLE_SWAP]
> [    4.256609] PD TX, header: 0x83
> [    4.258528] PD TX complete, status: 0
> [    4.258584] state change DR_SWAP_ACCEPT -> DR_SWAP_CHANGE_DR [rev3 DATA_ROLE_SWAP]
> [    4.258591] Requesting mux state 1, usb-role 1, orientation 1
> [    4.259588] AMS DATA_ROLE_SWAP finished
> [    4.259592] state change DR_SWAP_CHANGE_DR -> SNK_READY [rev3 NONE_AMS]
> [    4.259605] AMS DISCOVER_IDENTITY start
> [    4.259609] Sink TX No Go
> [    4.260874] CC1: 4 -> 5, CC2: 0 -> 0 [state SNK_READY, polarity 0, connected]
> [    4.359636] AMS DISCOVER_IDENTITY start
> [    4.359642] PD TX, header: 0x12af
> [    4.361884] PD TX complete, status: 0
> [    4.369433] PD RX, header: 0x578f [1]
> [    4.369439] Rx VDM cmd 0xff00a041 type 1 cmd 1 len 5
> [    4.369448] AMS DISCOVER_IDENTITY finished
> [    4.369515] Identity: 413c:c013.0712
> [    4.369521] AMS DISCOVER_SVIDS start
> [    4.369524] PD TX, header: 0x14af
> [    4.371696] PD TX complete, status: 0
> [    4.378564] PD RX, header: 0x398f [1]
> [    4.378573] Rx VDM cmd 0xff00a042 type 1 cmd 2 len 3
> [    4.378579] AMS DISCOVER_SVIDS finished
> [    4.378582] SVID 1: 0xff01
> [    4.378584] SVID 2: 0x413c
> [    4.378594] AMS DISCOVER_MODES start
> [    4.378597] PD TX, header: 0x16af
> [    4.380696] PD TX complete, status: 0
> [    4.387008] PD RX, header: 0x2b8f [1]
> [    4.387014] Rx VDM cmd 0xff01a043 type 1 cmd 3 len 2
> [    4.387021] AMS DISCOVER_MODES finished
> [    4.387023]  Alternate mode 0: SVID 0xff01, VDO 1: 0x001c0045
> [    4.387029] AMS DISCOVER_MODES start
> [    4.387031] PD TX, header: 0x18af
> [    4.389134] PD TX complete, status: 0
> [    4.395528] PD RX, header: 0x2d8f [1]
> [    4.395538] Rx VDM cmd 0x413ca043 type 1 cmd 3 len 2
> [    4.395546] AMS DISCOVER_MODES finished
> [    4.395548]  Alternate mode 1: SVID 0x413c, VDO 1: 0x00000001
> 
> *Kernel TRACE
> sysfs: cannot create duplicate filename
> '/devices/platform/soc/11d01000.i2c/i2c-0/0-0034/mt6360-tcpc.6.auto/typec/port0/port0.0/partner'
> CPU: 2 PID: 299 Comm: mt6360-tcpc.6.a Tainted: GO      5.15.37-mtk+g880abc5122e7 #1
> Hardware name: MediaTek MT8195 demo board (DT)
> Call trace:
>   dump_backtrace+0x0/0x1ac
>   show_stack+0x24/0x30
>   dump_stack_lvl+0x68/0x84
>   dump_stack+0x1c/0x38
>   sysfs_warn_dup+0x70/0x90
>   typec_probe+0xa4/0x134 [typec]
>   really_probe.part.0+0xa4/0x310
>   __device_attach_driver+0x100/0x16c
>   bus_for_each_drv+0x84/0xe0
>   __device_attach+0xe0/0x1ac
>   device_add+0x39c/0x8b0
>   device_register+0x2c/0x40
>   typec_register_altmode+0x1f4/0x360 [typec]
>   typec_partner_register_altmode+0x1c/0x30 [typec]
>   tcpm_pd_rx_handler+0x19d4/0x1c0c [tcpm]
>   kthread_worker_fn+0xb8/0x290
>   kthread+0x15c/0x170
>   ret_from_fork+0x10/0x20
> [    4.395962] typec_displayport port0-partner.2: failed to create symlinks
> [    4.395967] typec_displayport: probe of port0-partner.2 failed with error -17
> 
> It seems it's a common issue if typec port supports the modal operation.
> 
> ---
>   drivers/usb/typec/tcpm/tcpm.c | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
> index 904c7b4..59b366b 100644
> --- a/drivers/usb/typec/tcpm/tcpm.c
> +++ b/drivers/usb/typec/tcpm/tcpm.c
> @@ -4594,14 +4594,13 @@ static void run_state_machine(struct tcpm_port *port)
>   		tcpm_set_state(port, ready_state(port), 0);
>   		break;
>   	case DR_SWAP_CHANGE_DR:
> -		if (port->data_role == TYPEC_HOST) {
> -			tcpm_unregister_altmodes(port);
> +		tcpm_unregister_altmodes(port);
> +		if (port->data_role == TYPEC_HOST)
>   			tcpm_set_roles(port, true, port->pwr_role,
>   				       TYPEC_DEVICE);
> -		} else {
> +		else
>   			tcpm_set_roles(port, true, port->pwr_role,
>   				       TYPEC_HOST);
> -		}
>   		tcpm_ams_finish(port);
>   		tcpm_set_state(port, ready_state(port), 0);
>   		break;

Reviewed-by: Macpaul Lin <macpaul.lin at mediatek.com>

Thank for your help.

Regards,
Macpaul Lin


From allen-kh.cheng at mediatek.com  Thu Dec 15 04:00:13 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Thu, 15 Dec 2022 20:00:13 +0800
Subject: [PATCH 1/4] dt-bindings: power: Add MT8192 ADSP power domain
In-Reply-To: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
References: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221215120016.26611-2-allen-kh.cheng@mediatek.com>

Add power domain ID for the ADSP power partition found on MT8192 SoC.

Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
---
 include/dt-bindings/power/mt8192-power.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/dt-bindings/power/mt8192-power.h b/include/dt-bindings/power/mt8192-power.h
index 4eaa53d7270a..63e81cd0d06d 100644
--- a/include/dt-bindings/power/mt8192-power.h
+++ b/include/dt-bindings/power/mt8192-power.h
@@ -28,5 +28,6 @@
 #define MT8192_POWER_DOMAIN_CAM_RAWA	18
 #define MT8192_POWER_DOMAIN_CAM_RAWB	19
 #define MT8192_POWER_DOMAIN_CAM_RAWC	20
+#define MT8192_POWER_DOMAIN_ADSP	21
 
 #endif /* _DT_BINDINGS_POWER_MT8192_POWER_H */
-- 
2.18.0



From arnd at kernel.org  Thu Dec 15 08:31:10 2022
From: arnd at kernel.org (Arnd Bergmann)
Date: Thu, 15 Dec 2022 17:31:10 +0100
Subject: [PATCH] wifi: mt76: mt7996: select CONFIG_RELAY
Message-ID: <20221215163133.4152299-1-arnd@kernel.org>

From: Arnd Bergmann <arnd at arndb.de>

Without CONFIG_RELAY, the driver fails to link:

ERROR: modpost: "relay_flush" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
ERROR: modpost: "relay_switch_subbuf" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
ERROR: modpost: "relay_open" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
ERROR: modpost: "relay_reset" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
ERROR: modpost: "relay_file_operations" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!

The same change was done in mt7915 for the corresponding copy of the code.

Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
See-also: 988845c9361a ("mt76: mt7915: add support for passing chip/firmware debug data to user space")
Signed-off-by: Arnd Bergmann <arnd at arndb.de>
---
 drivers/net/wireless/mediatek/mt76/mt7996/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/Kconfig b/drivers/net/wireless/mediatek/mt76/mt7996/Kconfig
index 5c5fc569e6d5..79fb47a73c91 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/Kconfig
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/Kconfig
@@ -2,6 +2,7 @@
 config MT7996E
 	tristate "MediaTek MT7996 (PCIe) support"
 	select MT76_CONNAC_LIB
+	select RELAY
 	depends on MAC80211
 	depends on PCI
 	help
-- 
2.35.1



From arnd at kernel.org  Thu Dec 15 08:40:08 2022
From: arnd at kernel.org (Arnd Bergmann)
Date: Thu, 15 Dec 2022 17:40:08 +0100
Subject: [PATCH] media: platform: mtk-mdp3: fix Kconfig dependencies
Message-ID: <20221215164021.694343-1-arnd@kernel.org>

From: Arnd Bergmann <arnd at arndb.de>

The new mdp3 driver uses 'select' to force-enable a couple of drivers
it depends on. This is error-prone and likely to cause dependency
loops as well as warnings like:

WARNING: unmet direct dependencies detected for VIDEO_MEDIATEK_VPU
  Depends on [n]: MEDIA_SUPPORT [=m] && MEDIA_PLATFORM_SUPPORT [=y] && MEDIA_PLATFORM_DRIVERS [=y] && V4L_MEM2MEM_DRIVERS [=n] && VIDEO_DEV [=m] && (ARCH_MEDIATEK [=y] || COMPILE_TEST [=y])
  Selected by [m]:
  - VIDEO_MEDIATEK_MDP3 [=m] && MEDIA_SUPPORT [=m] && MEDIA_PLATFORM_SUPPORT [=y] && MEDIA_PLATFORM_DRIVERS [=y] && (MTK_IOMMU [=m] || COMPILE_TEST [=y]) && VIDEO_DEV [=m] && (ARCH_MEDIATEK [=y] || COMPILE_TEST [=y]) && HAS_DMA [=y] && REMOTEPROC [=y]

This specific warning was already addressed in a previous patch,
but there are similar unnecessary 'select' statements, so turn those
into 'depends on'. This also means the dependency on ARCH_MEDIATEK
is redundant and can be dropped.

Fixes: 61890ccaefaf ("media: platform: mtk-mdp3: add MediaTek MDP3 driver")
Fixes: 9195a860ef0a ("media: platform: mtk-mdp3: remove unused VIDEO_MEDIATEK_VPU config")
Signed-off-by: Arnd Bergmann <arnd at arndb.de>
---
 drivers/media/platform/mediatek/mdp3/Kconfig | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/media/platform/mediatek/mdp3/Kconfig b/drivers/media/platform/mediatek/mdp3/Kconfig
index 846e759a8f6a..602329c44750 100644
--- a/drivers/media/platform/mediatek/mdp3/Kconfig
+++ b/drivers/media/platform/mediatek/mdp3/Kconfig
@@ -3,14 +3,13 @@ config VIDEO_MEDIATEK_MDP3
 	tristate "MediaTek MDP v3 driver"
 	depends on MTK_IOMMU || COMPILE_TEST
 	depends on VIDEO_DEV
-	depends on ARCH_MEDIATEK || COMPILE_TEST
 	depends on HAS_DMA
 	depends on REMOTEPROC
+	depends on MTK_MMSYS
+	depends on MTK_CMDQ
+	depends on MTK_SCP
 	select VIDEOBUF2_DMA_CONTIG
 	select V4L2_MEM2MEM_DEV
-	select MTK_MMSYS
-	select MTK_CMDQ
-	select MTK_SCP
 	default n
 	help
 	    It is a v4l2 driver and present in MediaTek MT8183 SoC.
-- 
2.35.1



From bo.jiao at mediatek.com  Thu Dec 15 18:29:55 2022
From: bo.jiao at mediatek.com (Bo Jiao)
Date: Fri, 16 Dec 2022 10:29:55 +0800
Subject: [PATCH] wifi: mt76: fix potential memory leakage
Message-ID: <c663e984077ae903d8d4d34ed470986c6ccb4757.1671157658.git.Bo.Jiao@mediatek.com>

From: Bo Jiao <Bo.Jiao at mediatek.com>

fix potential memory leakage, recycle rxwi when mt76_dma_add_buf() call fails.

Signed-off-by: Bo Jiao <Bo.Jiao at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/dma.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
index fc24b35..9053344 100644
--- a/drivers/net/wireless/mediatek/mt76/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/dma.c
@@ -592,6 +592,7 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
 		qbuf.len = len - offset;
 		qbuf.skip_unmap = false;
 		if (mt76_dma_add_buf(dev, q, &qbuf, 1, 0, buf, t) < 0) {
+			mt76_put_rxwi(dev, t);
 			dma_unmap_single(dev->dma_dev, addr, len,
 					 DMA_FROM_DEVICE);
 			skb_free_frag(buf);
-- 
2.18.0



From Kyrie.Wu at mediatek.com  Thu Dec 15 18:59:42 2022
From: Kyrie.Wu at mediatek.com (=?utf-8?B?S3lyaWUgV3UgKOWQtOaZlyk=?=)
Date: Fri, 16 Dec 2022 02:59:42 +0000
Subject: [PATCH] media: jpeg: refactor multi-hw judgement
In-Reply-To: <e265a659-c2a0-7736-ad9f-c6fe8fce5432@collabora.com>
References: <20221215093026.12322-1-irui.wang@mediatek.com>
	 <e265a659-c2a0-7736-ad9f-c6fe8fce5432@collabora.com>
Message-ID: <df227dbb7c2022b11b221303956d4e83d4871292.camel@mediatek.com>

On Thu, 2022-12-15 at 10:45 +0100, AngeloGioacchino Del Regno wrote:
> Il 15/12/22 10:30, Irui Wang ha scritto:
> > From: kyrie wu <kyrie.wu at mediatek.com>
> > 
> > some chips have multi-hw, but others have only one,
> > modify the condition of multi-hw judgement
> > 
> > Signed-off-by: kyrie wu <kyrie.wu at mediatek.com>
> > Signed-off-by: irui wang <irui.wang at mediatek.com>
> 
> Agreed. But this needs a Fixes tag, please add the right one.
> 
> Regards,
> Angelo

Hello Angelo,

Thanks for your kind reply, I would add it in the next version.

Regards,
Kyrie.
> 
> 

From Kyrie.Wu at mediatek.com  Thu Dec 15 19:01:07 2022
From: Kyrie.Wu at mediatek.com (=?utf-8?B?S3lyaWUgV3UgKOWQtOaZlyk=?=)
Date: Fri, 16 Dec 2022 03:01:07 +0000
Subject: [PATCH] media: jpeg: refactor multi-hw judgement
In-Reply-To: <9a7434ba-2d42-cf15-334b-637b5f1b01a3@collabora.com>
References: <20221215093026.12322-1-irui.wang@mediatek.com>
	 <1895ff3f71fe7fe6c228d76dd046ea4f43b3dbf5.camel@mediatek.com>
	 <9a7434ba-2d42-cf15-334b-637b5f1b01a3@collabora.com>
Message-ID: <84660dde69fcf0293abacb922521c26329fc63f7.camel@mediatek.com>

On Thu, 2022-12-15 at 12:09 +0100, AngeloGioacchino Del Regno wrote:
> Il 15/12/22 11:50, Johnson Wang (???) ha scritto:
> > On Thu, 2022-12-15 at 17:30 +0800, Irui Wang wrote:
> > > From: kyrie wu <kyrie.wu at mediatek.com>
> > > 
> > > some chips have multi-hw, but others have only one,
> > > modify the condition of multi-hw judgement
> > > 
> > > Signed-off-by: kyrie wu <kyrie.wu at mediatek.com>
> > > Signed-off-by: irui wang <irui.wang at mediatek.com>
> > > ---
> > >   drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c |  5 +++--
> > >   drivers/media/platform/mtk-jpeg/mtk_jpeg_core.h | 12
> > > ++++++++++++
> > >   2 files changed, 15 insertions(+), 2 deletions(-)
> > > 
> > 
> > This may conflict with kernel mainline since mtk-jpeg folder
> > doesn't
> > exist.
> > Please fix it.
> > 
> > BRs,
> > Johnson Wang
> 
> Ouch. I just noticed that the folder is mismatching; this didn't
> deserve
> a R-b tag. I'll be more careful next time.

I'm terriable sorry for this mistake, and it would be fixed in the
coming version.

Thanks.
> 

From mason.zhang at mediatek.com  Thu Dec 15 19:25:33 2022
From: mason.zhang at mediatek.com (Mason Zhang)
Date: Fri, 16 Dec 2022 11:25:33 +0800
Subject: [PATCH v4 1/1] scsi: ufs: core: fix device management cmd timeout flow
Message-ID: <20221216032532.1280-1-mason.zhang@mediatek.com>

From: Mason Zhang <Mason.Zhang at mediatek.com>

In ufs error handler flow, host will send device management cmd(NOP OUT)
to device for recovery link. If cmd response timeout, and clear doorbell
fail, ufshcd_wait_for_dev_cmd will do nothing and return,
hba->dev_cmd.complete struct not set to null.

In this time, if cmd has been responsed by device, then it will
call complete() in __ufshcd_transfer_req_compl, because of complete
struct is alloced in stack, then the KE will occur.

Fix the following crash:
  ipanic_die+0x24/0x38 [mrdump]
  die+0x344/0x748
  arm64_notify_die+0x44/0x104
  do_debug_exception+0x104/0x1e0
  el1_dbg+0x38/0x54
  el1_sync_handler+0x40/0x88
  el1_sync+0x8c/0x140
  queued_spin_lock_slowpath+0x2e4/0x3c0
  __ufshcd_transfer_req_compl+0x3b0/0x1164
  ufshcd_trc_handler+0x15c/0x308
  ufshcd_host_reset_and_restore+0x54/0x260
  ufshcd_reset_and_restore+0x28c/0x57c
  ufshcd_err_handler+0xeb8/0x1b6c
  process_one_work+0x288/0x964
  worker_thread+0x4bc/0xc7c
  kthread+0x15c/0x264
  ret_from_fork+0x10/0x30

Signed-off-by: Mason Zhang <Mason.Zhang at mediatek.com>
---
Changes since v3:
* Not clear outstanding_reqs if clear cmds fail.
  Updated the patch in v4.
Changes since v2:
* Modified comment after clear doorbell.
Changes since v1:
* Remove change id.
---
 drivers/ufs/core/ufshcd.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index b1f59a5fe632..fa86ce80f350 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -3008,6 +3008,22 @@ static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba,
 		} else {
 			dev_err(hba->dev, "%s: failed to clear tag %d\n",
 				__func__, lrbp->task_tag);
+
+			spin_lock_irqsave(&hba->outstanding_lock, flags);
+			pending = test_bit(lrbp->task_tag,
+					   &hba->outstanding_reqs);
+			if (pending)
+				hba->dev_cmd.complete = NULL;
+			spin_unlock_irqrestore(&hba->outstanding_lock, flags);
+
+			if (!pending) {
+				/*
+				 * The completion handler ran while we tried to
+				 * clear the command.
+				 */
+				time_left = 1;
+				goto retry;
+			}
 		}
 	}
 
-- 
2.18.0



From Shayne.Chen at mediatek.com  Thu Dec 15 19:43:44 2022
From: Shayne.Chen at mediatek.com (=?utf-8?B?U2hheW5lIENoZW4gKOmZs+i7kuS4nik=?=)
Date: Fri, 16 Dec 2022 03:43:44 +0000
Subject: [PATCH] wifi: mt76: mt7915: add chip id condition in
 mt7915_check_eeprom()
In-Reply-To: <CAGRGNgWvT7e5DkTO96PaMazDae-wTe3ctBx8-n6EGhYxFPwCHQ@mail.gmail.com>
References: <20221208160137.3855-1-shayne.chen@mediatek.com>
	 <CAGRGNgWvT7e5DkTO96PaMazDae-wTe3ctBx8-n6EGhYxFPwCHQ@mail.gmail.com>
Message-ID: <b19ce0fa4e0b1b534709bc787015b405ea7a23c0.camel@mediatek.com>

On Fri, 2022-12-09 at 10:14 +1100, Julian Calaby wrote:
> Hi Shayne,
> 
> On Fri, Dec 9, 2022 at 3:06 AM Shayne Chen <shayne.chen at mediatek.com>
> wrote:
> > 
> > When flash mode is enabled, and the eeprom data in the flash is not
> > for
> > the current chipset, it'll still be checked valid, and the default
> > eeprom bin won't be loaded.
> > (e.g., mt7915 NIC inserted with mt7916 eeprom data in the flash.)
> > 
> > Fix this kind of case by adding chip id into consideration in
> > mt7915_check_eeprom().
> > 
> > Reported-by: Cheng-Ji Li <cheng-ji.li at mediatek.com>
> > Signed-off-by: Shayne Chen <shayne.chen at mediatek.com>
> > ---
> >  drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c | 12 +++++-----
> > --
> >  1 file changed, 5 insertions(+), 7 deletions(-)
> > 
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
> > b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
> > index 59069fb86414..e21aa03c85b1 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
> > @@ -33,14 +33,12 @@ static int mt7915_check_eeprom(struct
> > mt7915_dev *dev)
> >         u8 *eeprom = dev->mt76.eeprom.data;
> >         u16 val = get_unaligned_le16(eeprom);
> > 
> > -       switch (val) {
> > -       case 0x7915:
> > -       case 0x7916:
> > -       case 0x7986:
> > +       if ((is_mt7915(&dev->mt76) && val == 0x7915) ||
> > +           (is_mt7916(&dev->mt76) && val == 0x7916) ||
> > +           (is_mt7986(&dev->mt76) && val == 0x7986))
> >                 return 0;
> > -       default:
> > -               return -EINVAL;
> > -       }
> > +
> > +       return -EINVAL;
> 
> If this returned a bool, you could write this as:
> 
> switch (val) {
>         case 0x7915:
>                 return is_mt7915(&dev->mt76);
> }
> 
> Thanks,
> 
Hi Julian,

Thanks for your comment.
This function returns 0 on success and -EINVAL on fail, so I'll add a
macro to convert the return value in v2.

Regards,
Shayne

From alice.chao at mediatek.com  Thu Dec 15 19:13:22 2022
From: alice.chao at mediatek.com (Alice Chao)
Date: Fri, 16 Dec 2022 11:13:22 +0800
Subject: [PATCH 1/1] scsi: Add length check to prevent invalid memory access
Message-ID: <20221216031320.2634-1-alice.chao@mediatek.com>

Device reset thread uses kobject_uevent_env() to get kobj.parent(kobj.p)
, and it races with device init thread which calls device_add() to add
kobj.parent before kobject_uevent_env().

Device init call:           Device reset call:
scsi_probe_and_add_lun()    scsi_evt_thread()
  scsi_add_lun()             scsi_evt_emit()
   scsi_sysfs_add_sdev()      kobject_uevent_env() //get kobj.parent
    scsi_target_add()           kobject_get_path()
                                 len = get_kobj_path_length ()
                                 //len=1 because parent hasn't created yet
    device_add() // add kobj.parent
      kobject_uevent_env()
       kobject_get_path()         path = kzalloc()
        fill_kobj_path()           fill_kobj_path()
                            // --length; length -= cur is a negative value
                         memcpy(path + length, kobject_name(parent), cur);
                         // slab OOB!

Above backtrace describes the problem, device reset thread will get wrong
kobj.parent when device init thread didn't add kobj/parent yet. When this
racing happened, it triggers the a KASAN dump on the final iteration:

BUG: KASAN: slab-out-of-bounds in kobject_get_path+0xf8/0x1b8
Write of size 11 at addr ffffff80d6bb94f5 by task kworker/3:1/58
<snip>

Call trace:
 __kasan_report+0x124/0x1c8
 kasan_report+0x54/0x84
 kasan_check_range+0x200/0x208
 memcpy+0xb8/0xf0
 kobject_get_path+0xf8/0x1b8
 kobject_uevent_env+0x228/0xa88
 scsi_evt_thread+0x2d0/0x5b0
 process_one_work+0x570/0xf94
 worker_thread+0x7cc/0xf80
 kthread+0x2c4/0x388

These two jobs are scheduled asynchronously, we can't guaranteed that
kobj.parent will be created in device init thread before device reset
thread calls kobject_get_path().

To prevent length -= cur from being a negative value, we add length
check in fill_kobj_path() to prevent invalid memory access.

Signed-off-by: Alice Chao <alice.chao at mediatek.com>
---
 lib/kobject.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/lib/kobject.c b/lib/kobject.c
index af1f5f2954d4..3cccb8e88d4e 100644
--- a/lib/kobject.c
+++ b/lib/kobject.c
@@ -121,6 +121,10 @@ static void fill_kobj_path(struct kobject *kobj, char *path, int length)
 		int cur = strlen(kobject_name(parent));
 		/* back up enough to print this name with '/' */
 		length -= cur;
+
+		if (length <= 0)
+			break;
+
 		memcpy(path + length, kobject_name(parent), cur);
 		*(path + --length) = '/';
 	}
-- 
2.18.0



From irui.wang at mediatek.com  Thu Dec 15 19:52:47 2022
From: irui.wang at mediatek.com (Irui Wang)
Date: Fri, 16 Dec 2022 11:52:47 +0800
Subject: [V2] media: jpeg: Fix multi-hw judgement
Message-ID: <20221216035247.18816-1-irui.wang@mediatek.com>

From: kyrie wu <kyrie.wu at mediatek.com>

some chips have multi-hw, but others have only one,
modify the condition of multi-hw judgement

Fixs: 934e8bccac95 ("mtk-jpegenc: support jpegenc multi-hardware")

Signed-off-by: kyrie wu <kyrie.wu at mediatek.com>
Signed-off-by: irui wang <irui.wang at mediatek.com>
---
 drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c |  4 +++-
 drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h | 12 ++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
index 18e867a79f12..7472c1ee23ab 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
@@ -1694,7 +1694,7 @@ static int mtk_jpeg_probe(struct platform_device *pdev)
 		return -EINVAL;
  	}
 
-	if (list_empty(&pdev->dev.devres_head)) {
+	if (!jpeg->variant->hw_arch) {
 		INIT_DELAYED_WORK(&jpeg->job_timeout_work,
 				  mtk_jpeg_job_timeout_work);
 
@@ -1889,6 +1889,7 @@ static struct mtk_jpeg_variant mtk8195_jpegenc_drvdata = {
 	.ioctl_ops = &mtk_jpeg_enc_ioctl_ops,
 	.out_q_default_fourcc = V4L2_PIX_FMT_YUYV,
 	.cap_q_default_fourcc = V4L2_PIX_FMT_JPEG,
+	.hw_arch = MTK_JPEG_HW_MULTI_CORE,
 };
 
 static const struct mtk_jpeg_variant mtk8195_jpegdec_drvdata = {
@@ -1900,6 +1901,7 @@ static const struct mtk_jpeg_variant mtk8195_jpegdec_drvdata = {
 	.ioctl_ops = &mtk_jpeg_dec_ioctl_ops,
 	.out_q_default_fourcc = V4L2_PIX_FMT_JPEG,
 	.cap_q_default_fourcc = V4L2_PIX_FMT_YUV420M,
+	.hw_arch = MTK_JPEG_HW_MULTI_CORE,
 };
 
 #if defined(CONFIG_OF)
diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h
index b9126476be8f..ec04a8ce73cf 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h
@@ -46,6 +46,16 @@ enum mtk_jpeg_ctx_state {
 	MTK_JPEG_SOURCE_CHANGE,
 };
 
+/**
+ * enum mtk_jpeg_hw_arch - arch of the jpeg hw
+ * @MTK_JPEG_HW_SINGLE_CORE:	jpeg hw is single core
+ * @MTK_JPEG_HW_MULTI_CORE:		jpeg hw is mluti-core
+ */
+enum mtk_jpeg_hw_arch {
+	MTK_JPEG_HW_SINGLE_CORE = 0,
+	MTK_JPEG_HW_MULTI_CORE = 1,
+};
+
 /**
  * struct mtk_jpeg_variant - mtk jpeg driver variant
  * @clks:			clock names
@@ -60,6 +70,7 @@ enum mtk_jpeg_ctx_state {
  * @ioctl_ops:			the callback of jpeg v4l2_ioctl_ops
  * @out_q_default_fourcc:	output queue default fourcc
  * @cap_q_default_fourcc:	capture queue default fourcc
+ * @hw_arch:            mark jpeg hw arch
  */
 struct mtk_jpeg_variant {
 	struct clk_bulk_data *clks;
@@ -74,6 +85,7 @@ struct mtk_jpeg_variant {
 	const struct v4l2_ioctl_ops *ioctl_ops;
 	u32 out_q_default_fourcc;
 	u32 cap_q_default_fourcc;
+	enum mtk_jpeg_hw_arch hw_arch;
 };
 
 struct mtk_jpeg_src_buf {
-- 
2.18.0



From patchwork-bot+netdevbpf at kernel.org  Thu Dec 15 20:30:16 2022
From: patchwork-bot+netdevbpf at kernel.org (patchwork-bot+netdevbpf at kernel.org)
Date: Fri, 16 Dec 2022 04:30:16 +0000
Subject: [PATCH net v3] net: dsa: mt7530: remove redundant assignment
In-Reply-To: <Y5qY7x6la5TxZxzX@makrotopia.org>
References: <Y5qY7x6la5TxZxzX@makrotopia.org>
Message-ID: <167116501688.3301.2964506948018173523.git-patchwork-notify@kernel.org>

Hello:

This patch was applied to netdev/net.git (master)
by Jakub Kicinski <kuba at kernel.org>:

On Thu, 15 Dec 2022 03:47:59 +0000 you wrote:
> Russell King correctly pointed out that the MAC_2500FD capability is
> already added for port 5 (if not in RGMII mode) and port 6 (which only
> supports SGMII) by mt7531_mac_port_get_caps. Remove the reduntant
> setting of this capability flag which was added by a previous commit.
> 
> Fixes: e19de30d2080 ("net: dsa: mt7530: add support for in-band link status")
> Reported-by: Russell King (Oracle) <rmk+kernel at armlinux.org.uk>
> Reviewed-by: Russell King (Oracle) <rmk+kernel at armlinux.org.uk>
> Signed-off-by: Daniel Golle <daniel at makrotopia.org>
> 
> [...]

Here is the summary with links:
  - [net,v3] net: dsa: mt7530: remove redundant assignment
    https://git.kernel.org/netdev/net/c/32f1002ed485

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html




From shayne.chen at mediatek.com  Thu Dec 15 20:05:31 2022
From: shayne.chen at mediatek.com (Shayne Chen)
Date: Fri, 16 Dec 2022 12:05:31 +0800
Subject: [PATCH v2] wifi: mt76: mt7915: add chip id condition in mt7915_check_eeprom()
Message-ID: <20221216040531.3736-1-shayne.chen@mediatek.com>

When flash mode is enabled, and the eeprom data in the flash is not for
the current chipset, it'll still be checked valid, and the default
eeprom bin won't be loaded.
(e.g., mt7915 NIC inserted with mt7916 eeprom data in the flash.)

Fix this kind of case by adding chip id into consideration in
mt7915_check_eeprom().

Reported-by: Cheng-Ji Li <cheng-ji.li at mediatek.com>
Signed-off-by: Shayne Chen <shayne.chen at mediatek.com>
---
v2:
  - use switch case and add a macro to convert return value
---
 drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
index 24efa280dd86..a79628933948 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
@@ -33,11 +33,14 @@ static int mt7915_check_eeprom(struct mt7915_dev *dev)
 	u8 *eeprom = dev->mt76.eeprom.data;
 	u16 val = get_unaligned_le16(eeprom);
 
+#define CHECK_EEPROM_ERR(match)	(match ? 0 : -EINVAL)
 	switch (val) {
 	case 0x7915:
+		return CHECK_EEPROM_ERR(is_mt7915(&dev->mt76));
 	case 0x7916:
+		return CHECK_EEPROM_ERR(is_mt7916(&dev->mt76));
 	case 0x7986:
-		return 0;
+		return CHECK_EEPROM_ERR(is_mt7986(&dev->mt76));
 	default:
 		return -EINVAL;
 	}
-- 
2.25.1



From kvalo at kernel.org  Thu Dec 15 22:22:18 2022
From: kvalo at kernel.org (Kalle Valo)
Date: Fri, 16 Dec 2022 08:22:18 +0200
Subject: [PATCH] wifi: mt76: mt7996: select CONFIG_RELAY
In-Reply-To: <20221215163133.4152299-1-arnd@kernel.org> (Arnd Bergmann's
	message of "Thu, 15 Dec 2022 17:31:10 +0100")
References: <20221215163133.4152299-1-arnd@kernel.org>
Message-ID: <87iliblvfp.fsf@kernel.org>

Arnd Bergmann <arnd at kernel.org> writes:

> From: Arnd Bergmann <arnd at arndb.de>
>
> Without CONFIG_RELAY, the driver fails to link:
>
> ERROR: modpost: "relay_flush" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
> ERROR: modpost: "relay_switch_subbuf" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
> ERROR: modpost: "relay_open" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
> ERROR: modpost: "relay_reset" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
> ERROR: modpost: "relay_file_operations" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
>
> The same change was done in mt7915 for the corresponding copy of the code.
>
> Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
> See-also: 988845c9361a ("mt76: mt7915: add support for passing chip/firmware debug data to user space")
> Signed-off-by: Arnd Bergmann <arnd at arndb.de>

Felix, should I take this to wireless tree?

-- 
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


From gregkh at linuxfoundation.org  Thu Dec 15 22:47:56 2022
From: gregkh at linuxfoundation.org (Greg KH)
Date: Fri, 16 Dec 2022 07:47:56 +0100
Subject: [PATCH 1/1] scsi: Add length check to prevent invalid memory
 access
In-Reply-To: <20221216031320.2634-1-alice.chao@mediatek.com>
References: <20221216031320.2634-1-alice.chao@mediatek.com>
Message-ID: <Y5wUnF0I+zo6TXcZ@kroah.com>

On Fri, Dec 16, 2022 at 11:13:22AM +0800, Alice Chao wrote:
> Device reset thread uses kobject_uevent_env() to get kobj.parent(kobj.p)
> , and it races with device init thread which calls device_add() to add
> kobj.parent before kobject_uevent_env().

Note, "scsi" in the subject line is wrong, this should be "kobject",
right?

> 
> Device init call:           Device reset call:
> scsi_probe_and_add_lun()    scsi_evt_thread()

Shouldn't the scsi layer be protecting these from happening at the same
time?  Or some other bus lock?

>   scsi_add_lun()             scsi_evt_emit()
>    scsi_sysfs_add_sdev()      kobject_uevent_env() //get kobj.parent
>     scsi_target_add()           kobject_get_path()
>                                  len = get_kobj_path_length ()
>                                  //len=1 because parent hasn't created yet

Wait, how can the parent be gone if it has not been added yet?  A parent
should always be present, a device can not be there if it did not have a
parent already.

>     device_add() // add kobj.parent
>       kobject_uevent_env()
>        kobject_get_path()         path = kzalloc()
>         fill_kobj_path()           fill_kobj_path()
>                             // --length; length -= cur is a negative value
>                          memcpy(path + length, kobject_name(parent), cur);
>                          // slab OOB!
> 
> Above backtrace describes the problem, device reset thread will get wrong
> kobj.parent when device init thread didn't add kobj/parent yet. When this
> racing happened, it triggers the a KASAN dump on the final iteration:
> 
> BUG: KASAN: slab-out-of-bounds in kobject_get_path+0xf8/0x1b8
> Write of size 11 at addr ffffff80d6bb94f5 by task kworker/3:1/58
> <snip>
> 
> Call trace:
>  __kasan_report+0x124/0x1c8
>  kasan_report+0x54/0x84
>  kasan_check_range+0x200/0x208
>  memcpy+0xb8/0xf0
>  kobject_get_path+0xf8/0x1b8
>  kobject_uevent_env+0x228/0xa88
>  scsi_evt_thread+0x2d0/0x5b0
>  process_one_work+0x570/0xf94
>  worker_thread+0x7cc/0xf80
>  kthread+0x2c4/0x388
> 
> These two jobs are scheduled asynchronously, we can't guaranteed that
> kobj.parent will be created in device init thread before device reset
> thread calls kobject_get_path().

Again, a parent should always be there, how is that happening?

> To prevent length -= cur from being a negative value, we add length
> check in fill_kobj_path() to prevent invalid memory access.
> 
> Signed-off-by: Alice Chao <alice.chao at mediatek.com>
> ---
>  lib/kobject.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/lib/kobject.c b/lib/kobject.c
> index af1f5f2954d4..3cccb8e88d4e 100644
> --- a/lib/kobject.c
> +++ b/lib/kobject.c
> @@ -121,6 +121,10 @@ static void fill_kobj_path(struct kobject *kobj, char *path, int length)
>  		int cur = strlen(kobject_name(parent));
>  		/* back up enough to print this name with '/' */
>  		length -= cur;
> +
> +		if (length <= 0)
> +			break;

Shouldn't you just check for cur == 0 here instead?

But again, how can we have a parent with no name?

thanks,

greg k-h


From matthias.bgg at gmail.com  Fri Dec 16 02:46:12 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 11:46:12 +0100
Subject: [PATCH v3 01/10] arm64: dts: mt8183: Fix Mali GPU clock
In-Reply-To: <20221206183037.3jnssar4yxcx5hpb@notapiano>
References: <20220927101128.44758-1-angelogioacchino.delregno@collabora.com>
 <20220927101128.44758-2-angelogioacchino.delregno@collabora.com>
 <20221206183037.3jnssar4yxcx5hpb@notapiano>
Message-ID: <ebc435fd-0acb-6588-8acd-c8d504ad4289@gmail.com>



On 06/12/2022 19:30, N?colas F. R. A. Prado wrote:
> On Tue, Sep 27, 2022 at 12:11:19PM +0200, AngeloGioacchino Del Regno wrote:
>> From: Chen-Yu Tsai <wenst at chromium.org>
>>
>> The actual clock feeding into the Mali GPU on the MT8183 is from the
>> clock gate in the MFGCFG block, not CLK_TOP_MFGPLL_CK from the TOPCKGEN
>> block, which itself is simply a pass-through placeholder for the MFGPLL
>> in the APMIXEDSYS block.
>>
>> Fix the hardware description with the correct clock reference.
>>
>> Fixes: a8168cebf1bc ("arm64: dts: mt8183: Add node for the Mali GPU")
>> Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
>> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> 
> Hi,
> 
> it seems that while all other patches on this series were applied by Chen-Yu
> through the clk tree, this commit never made it to the mediatek tree.
> 
> As a result, MT8183-based machines (or at least mt8183-kukui-jacuzzi, where I
> tested on) currently hang during boot not only on next, but also on mainline,
> v6.1-rc8. With this commit applied I've confirmed that the machine boots fine
> again.
> 
> Matthias, could you please apply this commit and make sure it makes its way to
> v6.1? Given the Fixes tag it should eventually make its way there anyway, but if
> still possible would be good to have it fixed right from v6.1.
> 
> Tested-by: N?colas F. R. A. Prado <nfraprado at collabora.com>

Applied now.

Sorry for the late reply.
Matthias

> 
> Thanks,
> N?colas
> 
>> ---
>>   arch/arm64/boot/dts/mediatek/mt8183.dtsi | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/arch/arm64/boot/dts/mediatek/mt8183.dtsi b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
>> index a70b669c49ba..402136bfd535 100644
>> --- a/arch/arm64/boot/dts/mediatek/mt8183.dtsi
>> +++ b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
>> @@ -1678,7 +1678,7 @@ gpu: gpu at 13040000 {
>>   				<GIC_SPI 278 IRQ_TYPE_LEVEL_LOW>;
>>   			interrupt-names = "job", "mmu", "gpu";
>>   
>> -			clocks = <&topckgen CLK_TOP_MFGPLL_CK>;
>> +			clocks = <&mfgcfg CLK_MFG_BG3D>;
>>   
>>   			power-domains =
>>   				<&spm MT8183_POWER_DOMAIN_MFG_CORE0>,
>> -- 
>> 2.37.2
>>
>>
>>


From hsinyi at chromium.org  Fri Dec 16 02:54:37 2022
From: hsinyi at chromium.org (Hsin-Yi Wang)
Date: Fri, 16 Dec 2022 18:54:37 +0800
Subject: [PATCH] arm64: dts: mt8183: kukui: Split out keyboard node and
 describe detachables
In-Reply-To: <20220527045353.2483042-1-hsinyi@chromium.org>
References: <20220527045353.2483042-1-hsinyi@chromium.org>
Message-ID: <CAJMQK-jWwDm4dy-ELzJ5gzLby37Ztqn9qhGT9zqFhmowdok51g@mail.gmail.com>

On Fri, May 27, 2022 at 12:54 PM Hsin-Yi Wang <hsinyi at chromium.org> wrote:
>
> Kukui devices krane, kodana, and kakadu use detachable keyboards, which
> only have switches to be registered.
>
> Change the keyboard node's compatible of those boards to the newly
> introduced "google,cros-ec-keyb-switches", which won't include matrix
> properties.
>
> Signed-off-by: Hsin-Yi Wang <hsinyi at chromium.org>
> ---

hi Matthias,

Kindly ping on this patch. Thanks.


>  arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi | 2 ++
>  arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi  | 6 ++++++
>  arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi  | 6 ++++++
>  arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi   | 6 ++++++
>  arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi         | 1 -
>  5 files changed, 20 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi
> index 2d7a193272ae..981c889a22ea 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi
> @@ -4,6 +4,8 @@
>   */
>
>  #include "mt8183-kukui.dtsi"
> +/* Must come after mt8183-kukui.dtsi to modify cros_ec */
> +#include <arm/cros-ec-keyboard.dtsi>
>
>  / {
>         panel: panel {
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi
> index 28966a65391b..4b419623c8dc 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi
> @@ -372,6 +372,12 @@ pen_eject {
>         };
>  };
>
> +&cros_ec {
> +       keyboard-controller {
> +               compatible = "google,cros-ec-keyb-switches";
> +       };
> +};
> +
>  &qca_wifi {
>         qcom,ath10k-calibration-variant = "GO_KAKADU";
>  };
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi
> index 06f8c80bf553..4864c39e53a4 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi
> @@ -339,6 +339,12 @@ touch_pin_reset: pin_reset {
>         };
>  };
>
> +&cros_ec {
> +       keyboard-controller {
> +               compatible = "google,cros-ec-keyb-switches";
> +       };
> +};
> +
>  &qca_wifi {
>         qcom,ath10k-calibration-variant = "GO_KODAMA";
>  };
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi
> index a7b0cb3ff7b0..d5f41c6c9881 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi
> @@ -343,6 +343,12 @@ rst_pin {
>         };
>  };
>
> +&cros_ec {
> +       keyboard-controller {
> +               compatible = "google,cros-ec-keyb-switches";
> +       };
> +};
> +
>  &qca_wifi {
>         qcom,ath10k-calibration-variant = "LE_Krane";
>  };
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi
> index 8d5bf73a9099..db1388550f98 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi
> @@ -986,5 +986,4 @@ hub at 1 {
>         };
>  };
>
> -#include <arm/cros-ec-keyboard.dtsi>
>  #include <arm/cros-ec-sbs.dtsi>
> --
> 2.36.1.124.g0e6072fb45-goog
>


From krzysztof.kozlowski at linaro.org  Fri Dec 16 02:56:33 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Fri, 16 Dec 2022 11:56:33 +0100
Subject: [PATCH 1/4] dt-bindings: power: Add MT8192 ADSP power domain
In-Reply-To: <20221215120016.26611-2-allen-kh.cheng@mediatek.com>
References: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
 <20221215120016.26611-2-allen-kh.cheng@mediatek.com>
Message-ID: <324cce2c-ad75-014e-0647-87c9b8e845c5@linaro.org>

On 15/12/2022 13:00, Allen-KH Cheng wrote:
> Add power domain ID for the ADSP power partition found on MT8192 SoC.
> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> ---
>  include/dt-bindings/power/mt8192-power.h | 1 +

Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Best regards,
Krzysztof



From krzysztof.kozlowski at linaro.org  Fri Dec 16 02:58:12 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Fri, 16 Dec 2022 11:58:12 +0100
Subject: [PATCH 3/4] dt-bindings: arm: mediatek: Add missing power-domains
 property
In-Reply-To: <20221215120016.26611-4-allen-kh.cheng@mediatek.com>
References: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
 <20221215120016.26611-4-allen-kh.cheng@mediatek.com>
Message-ID: <3bad1a29-6457-8958-64c2-a0002c7959a1@linaro.org>

On 15/12/2022 13:00, Allen-KH Cheng wrote:
> The "mediatek,mt8192-scp_adsp" binding requires a power domain to be
> specified.
> 
> Fixes: 4a803990aeb1 ("dt-bindings: ARM: Mediatek: Add new document bindings of MT8192 clock")
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> ---
>  .../arm/mediatek/mediatek,mt8192-clock.yaml     | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
> index b57cc2e69efb..cbedef114103 100644
> --- a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
> +++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
> @@ -40,6 +40,9 @@ properties:
>    reg:
>      maxItems: 1
>  
> +  power-domains:
> +    maxItems: 1
> +
>    '#clock-cells':
>      const: 1
>  
> @@ -49,11 +52,25 @@ required:
>  
>  additionalProperties: false
>  
> +allOf:

allOf goes just before additionalProperties.

> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            enum:
> +              - mediatek,mt8192-scp_adsp

For the future: please don't use underscores in compatibles.

> +    then:
> +      required:
> +        - power-domains
> +
>  examples:
>    - |
> +    #include <dt-bindings/power/mt8192-power.h>
> +
>      scp_adsp: clock-controller at 10720000 {
>          compatible = "mediatek,mt8192-scp_adsp";
>          reg = <0x10720000 0x1000>;
> +        power-domains = <&spm MT8192_POWER_DOMAIN_ADSP>;
>          #clock-cells = <1>;
>      };
>  

Best regards,
Krzysztof



From krzysztof.kozlowski at linaro.org  Fri Dec 16 02:58:37 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Fri, 16 Dec 2022 11:58:37 +0100
Subject: [PATCH] arm64: dts: mt8183: kukui: Split out keyboard node and
 describe detachables
In-Reply-To: <CAJMQK-jWwDm4dy-ELzJ5gzLby37Ztqn9qhGT9zqFhmowdok51g@mail.gmail.com>
References: <20220527045353.2483042-1-hsinyi@chromium.org>
 <CAJMQK-jWwDm4dy-ELzJ5gzLby37Ztqn9qhGT9zqFhmowdok51g@mail.gmail.com>
Message-ID: <e7f8b106-b71e-eac9-c2a0-83579382f0f4@linaro.org>

On 16/12/2022 11:54, Hsin-Yi Wang wrote:
> On Fri, May 27, 2022 at 12:54 PM Hsin-Yi Wang <hsinyi at chromium.org> wrote:
>>
>> Kukui devices krane, kodana, and kakadu use detachable keyboards, which
>> only have switches to be registered.
>>
>> Change the keyboard node's compatible of those boards to the newly
>> introduced "google,cros-ec-keyb-switches", which won't include matrix
>> properties.
>>
>> Signed-off-by: Hsin-Yi Wang <hsinyi at chromium.org>
>> ---
> 
> hi Matthias,
> 
> Kindly ping on this patch. Thanks.

It's a merge window, so for what do you ping now?

Best regards,
Krzysztof



From hsinyi at chromium.org  Fri Dec 16 02:59:56 2022
From: hsinyi at chromium.org (Hsin-Yi Wang)
Date: Fri, 16 Dec 2022 18:59:56 +0800
Subject: [PATCH] arm64: dts: mt8183: kukui: Split out keyboard node and
 describe detachables
In-Reply-To: <e7f8b106-b71e-eac9-c2a0-83579382f0f4@linaro.org>
References: <20220527045353.2483042-1-hsinyi@chromium.org> <CAJMQK-jWwDm4dy-ELzJ5gzLby37Ztqn9qhGT9zqFhmowdok51g@mail.gmail.com>
 <e7f8b106-b71e-eac9-c2a0-83579382f0f4@linaro.org>
Message-ID: <CAJMQK-h=H9c+sEhVs27PH4CGvefjNuXcLbXCuSkiekL-C9eucA@mail.gmail.com>

On Fri, Dec 16, 2022 at 6:58 PM Krzysztof Kozlowski
<krzysztof.kozlowski at linaro.org> wrote:
>
> On 16/12/2022 11:54, Hsin-Yi Wang wrote:
> > On Fri, May 27, 2022 at 12:54 PM Hsin-Yi Wang <hsinyi at chromium.org> wrote:
> >>
> >> Kukui devices krane, kodana, and kakadu use detachable keyboards, which
> >> only have switches to be registered.
> >>
> >> Change the keyboard node's compatible of those boards to the newly
> >> introduced "google,cros-ec-keyb-switches", which won't include matrix
> >> properties.
> >>
> >> Signed-off-by: Hsin-Yi Wang <hsinyi at chromium.org>
> >> ---
> >
> > hi Matthias,
> >
> > Kindly ping on this patch. Thanks.
>
> It's a merge window, so for what do you ping now?
>
Okay I should ping after the merge window.

> Best regards,
> Krzysztof
>


From deren.wu at mediatek.com  Fri Dec 16 03:04:38 2022
From: deren.wu at mediatek.com (Deren Wu)
Date: Fri, 16 Dec 2022 19:04:38 +0800
Subject: [PATCH] wifi: mt76: mt7921: fix channel switch fail in monitor mode
Message-ID: <4de0968684f385c7b7f03ae43b17160ec92aebda.1671172366.git.deren.wu@mediatek.com>

When the chanctx enabled, IEEE80211_CONF_CHANGE_CHANNEL in .config()
would not be called anymore. mt76 cannot control RF channel for monitor.
Add monitor type set-channel flow in .change_chanctx().

Fixes: 41ac53c899bd ("wifi: mt76: mt7921: introduce chanctx support")
Reviewed-by: Sean Wang <sean.wang at mediatek.com>
Signed-off-by: Deren Wu <deren.wu at mediatek.com>
---
 .../net/wireless/mediatek/mt76/mt7921/main.c  |  5 +-
 .../net/wireless/mediatek/mt76/mt7921/mcu.c   | 68 +++++++++++++++++++
 .../wireless/mediatek/mt76/mt7921/mt7921.h    |  2 +
 3 files changed, 74 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
index 76ac5069638f..ef1ab818e69c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
@@ -1711,7 +1711,10 @@ static void mt7921_ctx_iter(void *priv, u8 *mac,
 	if (ctx != mvif->ctx)
 		return;
 
-	mt76_connac_mcu_uni_set_chctx(mvif->phy->mt76, &mvif->mt76, ctx);
+	if (vif->type & NL80211_IFTYPE_MONITOR)
+		mt7921_mcu_config_sniffer(mvif, ctx);
+	else
+		mt76_connac_mcu_uni_set_chctx(mvif->phy->mt76, &mvif->mt76, ctx);
 }
 
 static void
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
index 8930b5a4467c..c4ca6905f050 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
@@ -1093,6 +1093,74 @@ int mt7921_mcu_set_sniffer(struct mt7921_dev *dev, struct ieee80211_vif *vif,
 				 true);
 }
 
+int mt7921_mcu_config_sniffer(struct mt7921_vif *vif,
+			      struct ieee80211_chanctx_conf *ctx)
+{
+	struct cfg80211_chan_def *chandef = &ctx->def;
+	int freq1 = chandef->center_freq1, freq2 = chandef->center_freq2;
+	const u8 ch_band[] = {
+		[NL80211_BAND_2GHZ] = 1,
+		[NL80211_BAND_5GHZ] = 2,
+		[NL80211_BAND_6GHZ] = 3,
+	};
+	const u8 ch_width[] = {
+		[NL80211_CHAN_WIDTH_20_NOHT] = 0,
+		[NL80211_CHAN_WIDTH_20] = 0,
+		[NL80211_CHAN_WIDTH_40] = 0,
+		[NL80211_CHAN_WIDTH_80] = 1,
+		[NL80211_CHAN_WIDTH_160] = 2,
+		[NL80211_CHAN_WIDTH_80P80] = 3,
+		[NL80211_CHAN_WIDTH_5] = 4,
+		[NL80211_CHAN_WIDTH_10] = 5,
+		[NL80211_CHAN_WIDTH_320] = 6,
+	};
+	struct {
+		struct {
+			u8 band_idx;
+			u8 pad[3];
+		} __packed hdr;
+		struct config_tlv {
+			__le16 tag;
+			__le16 len;
+			u16 aid;
+			u8 ch_band;
+			u8 bw;
+			u8 control_ch;
+			u8 sco;
+			u8 center_ch;
+			u8 center_ch2;
+			u8 drop_err;
+			u8 pad[3];
+		} __packed tlv;
+	} __packed req = {
+		.hdr = {
+			.band_idx = vif->mt76.band_idx,
+		},
+		.tlv = {
+			.tag = cpu_to_le16(1),
+			.len = cpu_to_le16(sizeof(req.tlv)),
+			.control_ch = chandef->chan->hw_value,
+			.center_ch = ieee80211_frequency_to_channel(freq1),
+			.drop_err = 1,
+		},
+	};
+	if (chandef->chan->band < ARRAY_SIZE(ch_band))
+		req.tlv.ch_band = ch_band[chandef->chan->band];
+	if (chandef->width < ARRAY_SIZE(ch_width))
+		req.tlv.bw = ch_width[chandef->width];
+
+	if (freq2)
+		req.tlv.center_ch2 = ieee80211_frequency_to_channel(freq2);
+
+	if (req.tlv.control_ch < req.tlv.center_ch)
+		req.tlv.sco = 1; /* SCA */
+	else if (req.tlv.control_ch > req.tlv.center_ch)
+		req.tlv.sco = 3; /* SCB */
+
+	return mt76_mcu_send_msg(vif->phy->mt76->dev, MCU_UNI_CMD(SNIFFER),
+				 &req, sizeof(req), true);
+}
+
 int
 mt7921_mcu_uni_add_beacon_offload(struct mt7921_dev *dev,
 				  struct ieee80211_hw *hw,
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
index efff4d43d796..edfaeb7ce3d6 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
@@ -529,6 +529,8 @@ void mt7921_set_ipv6_ns_work(struct work_struct *work);
 
 int mt7921_mcu_set_sniffer(struct mt7921_dev *dev, struct ieee80211_vif *vif,
 			   bool enable);
+int mt7921_mcu_config_sniffer(struct mt7921_vif *vif,
+			      struct ieee80211_chanctx_conf *ctx);
 
 int mt7921_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
 				   enum mt76_txq_id qid, struct mt76_wcid *wcid,
-- 
2.18.0



From mbrugger at suse.com  Fri Dec 16 03:07:19 2022
From: mbrugger at suse.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:07:19 +0100
Subject: [GIT PULL] arm64: dts: fixes for v6.1
Message-ID: <af4c45ce-a150-438f-dab4-e47b120c32c4@suse.com>

Hi Olof and Arnd,

Please pull the following fixes for v6.1.

Thanks,
Matthias

---
The following changes since commit 830b3c68c1fb1e9176028d02ef86f3cf76aa2476:

   Linux 6.1 (2022-12-11 14:15:18 -0800)

are available in the Git repository at:

   https://git.kernel.org/pub/scm/linux/kernel/git/matthias.bgg/linux.git/ 
tags/v6.1-dts64-fixes

for you to fetch changes up to ad2631b5645a1d0ca9bf6fecf71f77e3b0071ee5:

   arm64: dts: mt8183: Fix Mali GPU clock (2022-12-16 11:41:45 +0100)

----------------------------------------------------------------
MT8183: fix phandle for GPU clock
MT8195 demo: fix size of secmon reserved memory area

----------------------------------------------------------------
Chen-Yu Tsai (1):
       arm64: dts: mt8183: Fix Mali GPU clock

Macpaul Lin (1):
       arm64: dts: mediatek: mt8195-demo: fix the memory size of node secmon

  arch/arm64/boot/dts/mediatek/mt8183.dtsi     | 2 +-
  arch/arm64/boot/dts/mediatek/mt8195-demo.dts | 4 ++--
  2 files changed, 3 insertions(+), 3 deletions(-)


From mbrugger at suse.com  Fri Dec 16 03:09:03 2022
From: mbrugger at suse.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:09:03 +0100
Subject: [GIT PULL] soc: mediatek: fixes for v6.1
Message-ID: <29c8b913-53cf-096f-fe44-832ceaeac116@suse.com>

Hi Arnd and Olof,

Please have a look at the following fix for v6.1

Regards,
Matthias

---
The following changes since commit 830b3c68c1fb1e9176028d02ef86f3cf76aa2476:

   Linux 6.1 (2022-12-11 14:15:18 -0800)

are available in the Git repository at:

   https://git.kernel.org/pub/scm/linux/kernel/git/matthias.bgg/linux.git/ 
tags/v6.1-soc-fixes

for you to fetch changes up to dba8eb83af9dd757ef645b52200775e86883d858:

   soc: mediatek: pm-domains: Fix the power glitch issue (2022-12-16 11:41:18 +0100)

----------------------------------------------------------------
PM domains: enable isolation before resetting power

----------------------------------------------------------------
Chun-Jie Chen (1):
       soc: mediatek: pm-domains: Fix the power glitch issue

  drivers/soc/mediatek/mtk-pm-domains.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)


From matthias.bgg at gmail.com  Fri Dec 16 03:10:15 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:10:15 +0100
Subject: [PATCH] arm64: dts: mt8183: kukui: Split out keyboard node and
 describe detachables
In-Reply-To: <20220527045353.2483042-1-hsinyi@chromium.org>
References: <20220527045353.2483042-1-hsinyi@chromium.org>
Message-ID: <d2585fef-98b1-39ae-876d-523e385aebe9@gmail.com>



On 27/05/2022 06:53, Hsin-Yi Wang wrote:
> Kukui devices krane, kodana, and kakadu use detachable keyboards, which
> only have switches to be registered.
> 
> Change the keyboard node's compatible of those boards to the newly
> introduced "google,cros-ec-keyb-switches", which won't include matrix
> properties.
> 
> Signed-off-by: Hsin-Yi Wang <hsinyi at chromium.org>

Applied, thanks!

> ---
>   arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi | 2 ++
>   arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi  | 6 ++++++
>   arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi  | 6 ++++++
>   arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi   | 6 ++++++
>   arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi         | 1 -
>   5 files changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi
> index 2d7a193272ae..981c889a22ea 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi
> @@ -4,6 +4,8 @@
>    */
>   
>   #include "mt8183-kukui.dtsi"
> +/* Must come after mt8183-kukui.dtsi to modify cros_ec */
> +#include <arm/cros-ec-keyboard.dtsi>
>   
>   / {
>   	panel: panel {
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi
> index 28966a65391b..4b419623c8dc 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi
> @@ -372,6 +372,12 @@ pen_eject {
>   	};
>   };
>   
> +&cros_ec {
> +	keyboard-controller {
> +		compatible = "google,cros-ec-keyb-switches";
> +	};
> +};
> +
>   &qca_wifi {
>   	qcom,ath10k-calibration-variant = "GO_KAKADU";
>   };
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi
> index 06f8c80bf553..4864c39e53a4 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi
> @@ -339,6 +339,12 @@ touch_pin_reset: pin_reset {
>   	};
>   };
>   
> +&cros_ec {
> +	keyboard-controller {
> +		compatible = "google,cros-ec-keyb-switches";
> +	};
> +};
> +
>   &qca_wifi {
>   	qcom,ath10k-calibration-variant = "GO_KODAMA";
>   };
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi
> index a7b0cb3ff7b0..d5f41c6c9881 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi
> @@ -343,6 +343,12 @@ rst_pin {
>   	};
>   };
>   
> +&cros_ec {
> +	keyboard-controller {
> +		compatible = "google,cros-ec-keyb-switches";
> +	};
> +};
> +
>   &qca_wifi {
>   	qcom,ath10k-calibration-variant = "LE_Krane";
>   };
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi
> index 8d5bf73a9099..db1388550f98 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi
> @@ -986,5 +986,4 @@ hub at 1 {
>   	};
>   };
>   
> -#include <arm/cros-ec-keyboard.dtsi>
>   #include <arm/cros-ec-sbs.dtsi>


From matthias.bgg at gmail.com  Fri Dec 16 03:15:44 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:15:44 +0100
Subject: [PATCH 2/4] soc: mediatek: pm-domains: Add ADSP power domain data
 for MT8192
In-Reply-To: <20221215120016.26611-3-allen-kh.cheng@mediatek.com>
References: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
 <20221215120016.26611-3-allen-kh.cheng@mediatek.com>
Message-ID: <9511c5b1-203b-a7e3-b96b-614e1c52639a@gmail.com>



On 15/12/2022 13:00, Allen-KH Cheng wrote:
> Add ADSP pm-domains (mtcmos) data for MT8192 SoC.
> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> ---
>   drivers/soc/mediatek/mt8192-pm-domains.h | 16 ++++++++++++++++
>   1 file changed, 16 insertions(+)
> 
> diff --git a/drivers/soc/mediatek/mt8192-pm-domains.h b/drivers/soc/mediatek/mt8192-pm-domains.h
> index b97b2051920f..19e58f0ca1df 100644
> --- a/drivers/soc/mediatek/mt8192-pm-domains.h
> +++ b/drivers/soc/mediatek/mt8192-pm-domains.h
> @@ -287,6 +287,22 @@ static const struct scpsys_domain_data scpsys_domain_data_mt8192[] = {
>   		.sram_pdn_bits = GENMASK(8, 8),
>   		.sram_pdn_ack_bits = GENMASK(12, 12),
>   	},
> +	[MT8192_POWER_DOMAIN_ADSP] = {
> +		.name = "adsp",
> +		.sta_mask = BIT(22),
> +		.ctl_offs = 0x0358,
> +		.sram_pdn_bits = GENMASK(8, 8),
> +		.sram_pdn_ack_bits = GENMASK(12, 12),
> +		.ext_buck_iso_offs = 0x039C,
> +		.ext_buck_iso_mask = BIT(2),

Not defined in upstream. It seems we are missing something here.

Regards,
Matthias

> +		.bp_infracfg = {
> +			BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_ADSP,
> +				    MT8192_TOP_AXI_PROT_EN_2_SET,
> +				    MT8192_TOP_AXI_PROT_EN_2_CLR,
> +				    MT8192_TOP_AXI_PROT_EN_2_STA1),
> +		},
> +		.caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_EXT_BUCK_ISO,
> +	},
>   	[MT8192_POWER_DOMAIN_CAM] = {
>   		.name = "cam",
>   		.sta_mask = BIT(23),


From matthias.bgg at gmail.com  Fri Dec 16 03:18:52 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:18:52 +0100
Subject: [PATCH v5 1/7] dt-bindings: arm64: dts: mediatek: Add mt8365-evk
 board
In-Reply-To: <20221213234346.2868828-2-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
 <20221213234346.2868828-2-bero@baylibre.com>
Message-ID: <3270e0fe-2f45-62d4-e1bd-0f55546cda6c@gmail.com>



On 14/12/2022 00:43, Bernhard Rosenkr?nzer wrote:
> Add bindings for the Mediatek mt8365-evk board.
> 
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Applied, thanks!

> ---
>   Documentation/devicetree/bindings/arm/mediatek.yaml | 4 ++++
>   1 file changed, 4 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/arm/mediatek.yaml b/Documentation/devicetree/bindings/arm/mediatek.yaml
> index 2275e5d93721b..ae12b1cab9fbd 100644
> --- a/Documentation/devicetree/bindings/arm/mediatek.yaml
> +++ b/Documentation/devicetree/bindings/arm/mediatek.yaml
> @@ -244,6 +244,10 @@ properties:
>             - enum:
>                 - mediatek,mt8183-pumpkin
>             - const: mediatek,mt8183
> +      - items:
> +          - enum:
> +              - mediatek,mt8365-evk
> +          - const: mediatek,mt8365
>         - items:
>             - enum:
>                 - mediatek,mt8516-pumpkin


From matthias.bgg at gmail.com  Fri Dec 16 03:19:24 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:19:24 +0100
Subject: [PATCH v5 2/7] dt-bindings: irq: mtk, sysirq: add support for
 mt8365
In-Reply-To: <20221213234346.2868828-3-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
 <20221213234346.2868828-3-bero@baylibre.com>
Message-ID: <3c2eacc7-79d3-b961-a472-34938f1d88db@gmail.com>



On 14/12/2022 00:43, Bernhard Rosenkr?nzer wrote:
> Add binding documentation of mediatek,sysirq for mt8365 SoC.
> 
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>

> ---
>   .../devicetree/bindings/interrupt-controller/mediatek,sysirq.txt | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt b/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt
> index 84ced3f4179b9..3ffc60184e445 100644
> --- a/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt
> +++ b/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt
> @@ -25,6 +25,7 @@ Required properties:
>   	"mediatek,mt6577-sysirq": for MT6577
>   	"mediatek,mt2712-sysirq", "mediatek,mt6577-sysirq": for MT2712
>   	"mediatek,mt2701-sysirq", "mediatek,mt6577-sysirq": for MT2701
> +	"mediatek,mt8365-sysirq", "mediatek,mt6577-sysirq": for MT8365
>   - interrupt-controller : Identifies the node as an interrupt controller
>   - #interrupt-cells : Use the same format as specified by GIC in arm,gic.txt.
>   - reg: Physical base address of the intpol registers and length of memory


From matthias.bgg at gmail.com  Fri Dec 16 03:19:53 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:19:53 +0100
Subject: [PATCH v5 3/7] dt-bindings: mfd: syscon: Add mt8365-syscfg
In-Reply-To: <20221213234346.2868828-4-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
 <20221213234346.2868828-4-bero@baylibre.com>
Message-ID: <b0e5d510-9947-b54c-a8a9-c20555818bb1@gmail.com>



On 14/12/2022 00:43, Bernhard Rosenkr?nzer wrote:
> Document Mediatek mt8365-syscfg
> 
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>

> ---
>   Documentation/devicetree/bindings/mfd/syscon.yaml | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/Documentation/devicetree/bindings/mfd/syscon.yaml b/Documentation/devicetree/bindings/mfd/syscon.yaml
> index 1b01bd0104316..7beeb0abc4db0 100644
> --- a/Documentation/devicetree/bindings/mfd/syscon.yaml
> +++ b/Documentation/devicetree/bindings/mfd/syscon.yaml
> @@ -50,6 +50,7 @@ properties:
>                 - marvell,armada-3700-usb2-host-misc
>                 - mediatek,mt8135-pctl-a-syscfg
>                 - mediatek,mt8135-pctl-b-syscfg
> +              - mediatek,mt8365-syscfg
>                 - microchip,lan966x-cpu-syscon
>                 - microchip,sparx5-cpu-syscon
>                 - mstar,msc313-pmsleep


From matthias.bgg at gmail.com  Fri Dec 16 03:20:50 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:20:50 +0100
Subject: [PATCH v5 5/7] dt-bindings: usb: mediatek,mtu3: add MT8365 SoC
 bindings
In-Reply-To: <20221213234346.2868828-6-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
 <20221213234346.2868828-6-bero@baylibre.com>
Message-ID: <f16a68a1-46e5-8e5a-2d41-3b8d23a9f41f@gmail.com>



On 14/12/2022 00:43, Bernhard Rosenkr?nzer wrote:
> From: Fabien Parent <fparent at baylibre.com>
> 
> Add binding documentation for the MT8365 SoC.
> 
> Signed-off-by: Fabien Parent <fparent at baylibre.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>

Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>

> ---
>   Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml b/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
> index 7168110e2f9de..d2655173e108c 100644
> --- a/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
> +++ b/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
> @@ -28,6 +28,7 @@ properties:
>             - mediatek,mt8188-mtu3
>             - mediatek,mt8192-mtu3
>             - mediatek,mt8195-mtu3
> +          - mediatek,mt8365-mtu3
>         - const: mediatek,mtu3
>   
>     reg:


From matthias.bgg at gmail.com  Fri Dec 16 03:21:34 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:21:34 +0100
Subject: [PATCH v5 6/7] dt-bindings: usb: mediatek,mtk-xhci: add MT8365
 SoC bindings
In-Reply-To: <20221213234346.2868828-7-bero@baylibre.com>
References: <20221213234346.2868828-1-bero@baylibre.com>
 <20221213234346.2868828-7-bero@baylibre.com>
Message-ID: <ee793350-f5da-7a63-fe2f-d4d081428021@gmail.com>



On 14/12/2022 00:43, Bernhard Rosenkr?nzer wrote:
> From: Fabien Parent <fparent at baylibre.com>
> 
> Add binding documentation for the MT8365 SoC.
> 
> Signed-off-by: Fabien Parent <fparent at baylibre.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>

Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>

> ---
>   Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml b/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml
> index a3c37944c6305..c119caa9ad168 100644
> --- a/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml
> +++ b/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml
> @@ -35,6 +35,7 @@ properties:
>             - mediatek,mt8188-xhci
>             - mediatek,mt8192-xhci
>             - mediatek,mt8195-xhci
> +          - mediatek,mt8365-xhci
>         - const: mediatek,mtk-xhci
>   
>     reg:


From matthias.bgg at gmail.com  Fri Dec 16 03:23:39 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:23:39 +0100
Subject: [PATCH v3 01/10] arm64: dts: mt8183: Fix Mali GPU clock
In-Reply-To: <20220927101128.44758-2-angelogioacchino.delregno@collabora.com>
References: <20220927101128.44758-1-angelogioacchino.delregno@collabora.com>
 <20220927101128.44758-2-angelogioacchino.delregno@collabora.com>
Message-ID: <bfdb30b7-8540-15e9-678c-3bf0541425b4@gmail.com>



On 27/09/2022 12:11, AngeloGioacchino Del Regno wrote:
> From: Chen-Yu Tsai <wenst at chromium.org>
> 
> The actual clock feeding into the Mali GPU on the MT8183 is from the
> clock gate in the MFGCFG block, not CLK_TOP_MFGPLL_CK from the TOPCKGEN
> block, which itself is simply a pass-through placeholder for the MFGPLL
> in the APMIXEDSYS block.
> 
> Fix the hardware description with the correct clock reference.
> 
> Fixes: a8168cebf1bc ("arm64: dts: mt8183: Add node for the Mali GPU")
> Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Both patches applied, thanks!

> ---
>   arch/arm64/boot/dts/mediatek/mt8183.dtsi | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183.dtsi b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
> index a70b669c49ba..402136bfd535 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
> @@ -1678,7 +1678,7 @@ gpu: gpu at 13040000 {
>   				<GIC_SPI 278 IRQ_TYPE_LEVEL_LOW>;
>   			interrupt-names = "job", "mmu", "gpu";
>   
> -			clocks = <&topckgen CLK_TOP_MFGPLL_CK>;
> +			clocks = <&mfgcfg CLK_MFG_BG3D>;
>   
>   			power-domains =
>   				<&spm MT8183_POWER_DOMAIN_MFG_CORE0>,


From matthias.bgg at gmail.com  Fri Dec 16 03:24:36 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:24:36 +0100
Subject: [PATCH v4 8/9] arm/arm64: dts: mediatek: Fix existing NAND
 controller node name
In-Reply-To: <3729df62-8d39-db47-0b57-2bef37cc5830@collabora.com>
References: <20221209064317.2828-1-xiangsheng.hou@mediatek.com>
 <20221209064317.2828-9-xiangsheng.hou@mediatek.com>
 <3729df62-8d39-db47-0b57-2bef37cc5830@collabora.com>
Message-ID: <fb69f5da-1ea8-a0f3-1c3f-8269ad693f4e@gmail.com>



On 13/12/2022 10:42, AngeloGioacchino Del Regno wrote:
> Il 09/12/22 07:43, Xiangsheng Hou ha scritto:
>> Change the existing node name in order to match NAND controller DT
>> bindings.
>>
>> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
>> ---
>> ? arch/arm/boot/dts/mt2701.dtsi???????????? | 2 +-
>> ? arch/arm64/boot/dts/mediatek/mt2712e.dtsi | 2 +-
>> ? arch/arm64/boot/dts/mediatek/mt7622.dtsi? | 2 +-
>> ? 3 files changed, 3 insertions(+), 3 deletions(-)
>>
> 
> Splitting this in two commits, one for ARM and one for ARM64 would probably
> be better, but since I don't have strong opinions on that...

Yes please split this up.

Thanks!

> 
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> 
> 


From matthias.bgg at gmail.com  Fri Dec 16 03:29:20 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:29:20 +0100
Subject: [PATCH 0/4] arm64: dts: mediatek: Fix systimer clock description
In-Reply-To: <20221201084229.3464449-1-wenst@chromium.org>
References: <20221201084229.3464449-1-wenst@chromium.org>
Message-ID: <ec30d7c3-39af-197b-58df-440dcdb27a36@gmail.com>



On 01/12/2022 09:42, Chen-Yu Tsai wrote:
> Hi,
> 
> This series fixes the clock description for the systimer block. The
> systimer is fed by the main 26 MHz oscillator, and internally divides
> the clock, normally by 2.
> 
> However this ended up being modeled in various incorrect ways, such as
> the clock divider being in the TOPCKGEN block, or as a standalone 13 MHz
> oscillator.
> 
> This series fixes the description of the systimer clock input in an ABI
> compatible way, i.e. the clock rate of the input clock remains the same
> at 13 MHz. The clock is now modeled as a divide-by-2 fixed factor clock
> being fed by the main oscillator.
> 
> An added benefit is that in Linux the systimer no longer requires the
> main SoC clk driver to do an early init dance.
> 
> Please have a look.
> 
> The next step would be to fix up the systimer driver in a backward
> compatible way and have it read the divider value from hardware.
> 

Whole series applied, thanks!

> 
> Regards
> ChenYu
> 
> Chen-Yu Tsai (4):
>    arm64: dts: mediatek: mt8183: Fix systimer 13 MHz clock description
>    arm64: dts: mediatek: mt8192: Fix systimer 13 MHz clock description
>    arm64: dts: mediatek: mt8195: Fix systimer 13 MHz clock description
>    arm64: dts: mediatek: mt8186: Fix systimer 13 MHz clock description
> 
>   arch/arm64/boot/dts/mediatek/mt8183.dtsi | 12 ++++++++++--
>   arch/arm64/boot/dts/mediatek/mt8186.dtsi |  8 +++++---
>   arch/arm64/boot/dts/mediatek/mt8192.dtsi | 12 ++++++++++--
>   arch/arm64/boot/dts/mediatek/mt8195.dtsi | 11 ++++++++++-
>   4 files changed, 35 insertions(+), 8 deletions(-)
> 


From matthias.bgg at gmail.com  Fri Dec 16 03:29:44 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:29:44 +0100
Subject: [PATCH 1/2] arm64: dts: mediatek: mt8195: Use P1 clocks for PCIe1
 controller
In-Reply-To: <20221214131117.108008-1-angelogioacchino.delregno@collabora.com>
References: <20221214131117.108008-1-angelogioacchino.delregno@collabora.com>
Message-ID: <d7432483-7244-1c6e-cff7-ac56a67705a7@gmail.com>



On 14/12/2022 14:11, AngeloGioacchino Del Regno wrote:
> Despite there being some flexibility regarding the P0/P1 connections,
> especially for TL and PERI, we must use P1 clocks on pcie1 otherwise
> we'll be dealing with unclocked access.
> 
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Seems my mail got lost somewhere:
Both patches applied, thanks!

> ---
>   arch/arm64/boot/dts/mediatek/mt8195.dtsi | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> index 5d31536f4c48..e61944510b8e 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> @@ -1258,9 +1258,9 @@ pcie1: pcie at 112f8000 {
>   
>   			clocks = <&infracfg_ao CLK_INFRA_AO_PCIE_PL_P_250M_P1>,
>   				 <&clk26m>,
> -				 <&infracfg_ao CLK_INFRA_AO_PCIE_TL_96M>,
> +				 <&infracfg_ao CLK_INFRA_AO_PCIE_P1_TL_96M>,
>   				 <&clk26m>,
> -				 <&infracfg_ao CLK_INFRA_AO_PCIE_PERI_26M>,
> +				 <&infracfg_ao CLK_INFRA_AO_PCIE_P1_PERI_26M>,
>   				 /* Designer has connect pcie1 with peri_mem_p0 clock */
>   				 <&pericfg_ao CLK_PERI_AO_PCIE_P0_MEM>;
>   			clock-names = "pl_250m", "tl_26m", "tl_96m",


From matthias.bgg at gmail.com  Fri Dec 16 03:42:00 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:42:00 +0100
Subject: next/master bisection: baseline.login on mt8173-elm-hana
In-Reply-To: <Y5HrIhEfuEgGKuMB@sirena.org.uk>
References: <6391e1c4.170a0220.b562d.3c9c@mx.google.com>
 <Y5HrIhEfuEgGKuMB@sirena.org.uk>
Message-ID: <ff000931-ce9e-f413-1540-ca2edf393362@gmail.com>

Yong, Angelo, can you have a look?

If not I'd propose to drop the series for now until we understand what is going 
wrong.

Regards,
Matthias

On 08/12/2022 14:48, Mark Brown wrote:
> On Thu, Dec 08, 2022 at 05:08:20AM -0800, KernelCI bot wrote:
> 
> The KernelCI bisection bot found a boot failure in today's -next on
> mt8173-elm-hana was triggered by 26593928564cf ("iommu/mediatek: Add
> error path for loop of mm_dts_parse").  We get an oops towards the end
> of boot:
> 
> <6>[    0.840037] printk: bootconsole [mtk8250] disabled
> <6>[    0.840037] printk: bootconsole [mtk8250] disabled
> <1>[    0.854924] Unable to handle kernel read from unreadable memory at virtual address 000000000000003b
> 
> <1>[    0.864288] Mem abort info:
> <1>[    0.867374]   ESR = 0x0000000096000005
> <1>[    0.871408]   EC = 0x25: DABT (current EL), IL = 32 bits
> <1>[    0.877005]   SET = 0, FnV = 0
> <1>[    0.880350]   EA = 0, S1PTW = 0
> <1>[    0.883776]   FSC = 0x05: level 1 translation fault
> <1>[    0.888938] Data abort info:
> 
> ...
> 
> <4>[    1.027320]  kobject_put+0x18/0xf0
> <4>[    1.030996]  put_device+0x1c/0x28
> 
> <4>[    1.034586]  mtk_iommu_mm_dts_parse+0x2d0/0x31c
> <4>[    1.039394]  mtk_iommu_probe+0x2dc/0x4c0
> <4>[    1.043592]  platform_probe+0xb0/0xd0
> <4>[    1.047530]  really_probe+0xf8/0x280
> <4>[    1.051377]  __driver_probe_device+0xbc/0xe8
> 
> <4>[    1.055923]  driver_probe_device+0x44/0x104
> <4>[    1.060380]  __driver_attach+0xb4/0x108
> <4>[    1.064487]  bus_for_each_dev+0x88/0xd4
> <4>[    1.068598]  driver_attach+0x2c/0x38
> <4>[    1.072445]  bus_add_driver+0x114/0x1f4
> <4>[    1.076554]  driver_register+0x6c/0x108
> <4>[    1.080663]  __platform_driver_register+0x2c/0x38
> <4>[    1.085640]  mtk_iommu_driver_init+0x24/0x30
> 
> I've left the full report from the bot below, including links to more
> detailed information and a Reported-by tag for the bot below, the log
> links got mangled and should be:
> 
>     https://storage.kernelci.org/next/master/next-20221208/arm64/cros---chromeos-5.10-arm64-chromiumos-mediatek.flavour.config%2Barm64-chromebook/clang-13/lab-collabora/baseline-mt8173-elm-hana.html
>     https://storage.kernelci.org/next/master/next-20221208/arm64/cros---chromeos-5.10-arm64-chromiumos-mediatek.flavour.config%2Barm64-chromebook/clang-13/lab-collabora/baseline-mt8173-elm-hana.txt
> 
>> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
>> * This automated bisection report was sent to you on the basis  *
>> * that you may be involved with the breaking commit it has      *
>> * found.  No manual investigation has been done to verify it,   *
>> * and the root cause of the problem may be somewhere else.      *
>> *                                                               *
>> * If you do send a fix, please include this trailer:            *
>> *   Reported-by: "kernelci.org bot" <bot at kernelci.org>          *
>> *                                                               *
>> * Hope this helps!                                              *
>> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
>>
>> next/master bisection: baseline.login on mt8173-elm-hana
>>
>> Summary:
>>    Start:      f925116b24c0c Add linux-next specific files for 20221208
>>    Plain log:  https://storage.kernelci.org/next/master/next-20221208/arm64/cros://chromeos-5.10/arm64/chromiumos-arm64.flavour.config+arm64-chromebook/clang-13/lab-collabora/baseline-mt8173-elm-hana.txt
>>    HTML log:   https://storage.kernelci.org/next/master/next-20221208/arm64/cros://chromeos-5.10/arm64/chromiumos-arm64.flavour.config+arm64-chromebook/clang-13/lab-collabora/baseline-mt8173-elm-hana.html
>>    Result:     26593928564cf iommu/mediatek: Add error path for loop of mm_dts_parse
>>
>> Checks:
>>    revert:     PASS
>>    verify:     PASS
>>
>> Parameters:
>>    Tree:       next
>>    URL:        https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
>>    Branch:     master
>>    Target:     mt8173-elm-hana
>>    CPU arch:   arm64
>>    Lab:        lab-collabora
>>    Compiler:   clang-13
>>    Config:     cros://chromeos-5.10/arm64/chromiumos-arm64.flavour.config+arm64-chromebook
>>    Test case:  baseline.login
>>
>> Breaking commit found:
>>
>> -------------------------------------------------------------------------------
>> commit 26593928564cf5b576ff05d3cbd958f57c9534bb
>> Author: Yong Wu <yong.wu at mediatek.com>
>> Date:   Tue Oct 18 10:42:55 2022 +0800
>>
>>      iommu/mediatek: Add error path for loop of mm_dts_parse
>>      
>>      The mtk_iommu_mm_dts_parse will parse the smi larbs nodes. if the i+1
>>      larb is parsed fail, we should put_device for the i..0 larbs.
>>      
>>      There are two places need to comment:
>>      1) The larbid may be not linear mapping, we should loop whole
>>         the array in the error path.
>>      2) I move this line position: "data->larb_imu[id].dev = &plarbdev->dev;"
>>         before "if (!plarbdev->dev.driver)", That means set
>>         data->larb_imu[id].dev before the error path. then we don't need
>>         "platform_device_put(plarbdev)" again in probe_defer case. All depend
>>         on "put_device" of the error path in error cases.
>>      
>>      Fixes: d2e9a1102cfc ("iommu/mediatek: Contain MM IOMMU flow with the MM TYPE")
>>      Signed-off-by: Yong Wu <yong.wu at mediatek.com>
>>      Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>>      Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>
>>      Link: https://lore.kernel.org/r/20221018024258.19073-4-yong.wu at mediatek.com
>>      Signed-off-by: Joerg Roedel <jroedel at suse.de>
>>
>> diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
>> index df490236e1fb5..e0c669b75271d 100644
>> --- a/drivers/iommu/mtk_iommu.c
>> +++ b/drivers/iommu/mtk_iommu.c
>> @@ -1067,8 +1067,10 @@ static int mtk_iommu_mm_dts_parse(struct device *dev, struct component_match **m
>>   		u32 id;
>>   
>>   		larbnode = of_parse_phandle(dev->of_node, "mediatek,larbs", i);
>> -		if (!larbnode)
>> -			return -EINVAL;
>> +		if (!larbnode) {
>> +			ret = -EINVAL;
>> +			goto err_larbdev_put;
>> +		}
>>   
>>   		if (!of_device_is_available(larbnode)) {
>>   			of_node_put(larbnode);
>> @@ -1081,14 +1083,16 @@ static int mtk_iommu_mm_dts_parse(struct device *dev, struct component_match **m
>>   
>>   		plarbdev = of_find_device_by_node(larbnode);
>>   		of_node_put(larbnode);
>> -		if (!plarbdev)
>> -			return -ENODEV;
>> +		if (!plarbdev) {
>> +			ret = -ENODEV;
>> +			goto err_larbdev_put;
>> +		}
>> +		data->larb_imu[id].dev = &plarbdev->dev;
>>   
>>   		if (!plarbdev->dev.driver) {
>> -			platform_device_put(plarbdev);
>> -			return -EPROBE_DEFER;
>> +			ret = -EPROBE_DEFER;
>> +			goto err_larbdev_put;
>>   		}
>> -		data->larb_imu[id].dev = &plarbdev->dev;
>>   
>>   		component_match_add(dev, match, component_compare_dev, &plarbdev->dev);
>>   		platform_device_put(plarbdev);
>> @@ -1123,6 +1127,15 @@ static int mtk_iommu_mm_dts_parse(struct device *dev, struct component_match **m
>>   		return -EINVAL;
>>   	}
>>   	return 0;
>> +
>> +err_larbdev_put:
>> +	/* id may be not linear mapping, loop whole the array */
>> +	for (i = MTK_LARB_NR_MAX - 1; i >= 0; i++) {
>> +		if (!data->larb_imu[i].dev)
>> +			continue;
>> +		put_device(data->larb_imu[i].dev);
>> +	}
>> +	return ret;
>>   }
>>   
>>   static int mtk_iommu_probe(struct platform_device *pdev)
>> -------------------------------------------------------------------------------
>>
>>
>> Git bisection log:
>>
>> -------------------------------------------------------------------------------
>> git bisect start
>> # good: [479174d402bcf60789106eedc4def3957c060bad] Merge tag 'platform-drivers-x86-v6.1-5' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86
>> git bisect good 479174d402bcf60789106eedc4def3957c060bad
>> # bad: [f925116b24c0c42dc6d5ab5111c55fd7f74e8dc7] Add linux-next specific files for 20221208
>> git bisect bad f925116b24c0c42dc6d5ab5111c55fd7f74e8dc7
>> # good: [a1c975859da787104f6f2610f0f5507ef794dea4] Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
>> git bisect good a1c975859da787104f6f2610f0f5507ef794dea4
>> # bad: [df52ed561d70653b4d82a468026450374161693b] Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git
>> git bisect bad df52ed561d70653b4d82a468026450374161693b
>> # good: [ddf1b69a1f2e0704bc0d5f7f71e4f8c4891a3bbb] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
>> git bisect good ddf1b69a1f2e0704bc0d5f7f71e4f8c4891a3bbb
>> # good: [b5cb3c9818c0085928c1d795e1e2a78add3dbca5] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
>> git bisect good b5cb3c9818c0085928c1d795e1e2a78add3dbca5
>> # bad: [b07fcd1e4269638ae72abc499543eb72605bd34b] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git
>> git bisect bad b07fcd1e4269638ae72abc499543eb72605bd34b
>> # bad: [147cf2079e0afce372e3d14089396736a025ecda] Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git
>> git bisect bad 147cf2079e0afce372e3d14089396736a025ecda
>> # good: [14d40e4c74b85c390e076712a6d2831e9464b786] Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd.git
>> git bisect good 14d40e4c74b85c390e076712a6d2831e9464b786
>> # good: [b169a180bef26679b44484ad24b7d8ae32623a10] iommu/io-pgtable: Remove map/unmap
>> git bisect good b169a180bef26679b44484ad24b7d8ae32623a10
>> # good: [f04ae51dd965bc0b7f2e01c5d85fc214877b4061] Merge tag 'arm-smmu-updates' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into arm/smmu
>> git bisect good f04ae51dd965bc0b7f2e01c5d85fc214877b4061
>> # bad: [4dd549a66a969ccd3ed344f37fb9b9e9516fc1e6] Merge branches 'iommu/fixes', 'arm/allwinner', 'arm/exynos', 'arm/mediatek', 'arm/rockchip', 'arm/smmu', 'ppc/pamu', 's390', 'x86/vt-d', 'x86/amd' and 'core' into next
>> git bisect bad 4dd549a66a969ccd3ed344f37fb9b9e9516fc1e6
>> # good: [21c1f9021f0e7d28c3edfcc70e1ca1926ea3774e] s390/pci: use lock-free I/O translation updates
>> git bisect good 21c1f9021f0e7d28c3edfcc70e1ca1926ea3774e
>> # bad: [00ef8885a945c37551547d8ac8361cacd20c4e42] iommu/mediatek: Fix crash on isr after kexec()
>> git bisect bad 00ef8885a945c37551547d8ac8361cacd20c4e42
>> # good: [dcb40e9fcce9bd251eaff19f3724131db522846c] iommu/mediatek: Add platform_device_put for recovering the device refcnt
>> git bisect good dcb40e9fcce9bd251eaff19f3724131db522846c
>> # bad: [ef693a8440926884bfd9cc3d6d36f65719513350] iommu/mediatek: Validate number of phandles associated with "mediatek,larbs"
>> git bisect bad ef693a8440926884bfd9cc3d6d36f65719513350
>> # bad: [26593928564cf5b576ff05d3cbd958f57c9534bb] iommu/mediatek: Add error path for loop of mm_dts_parse
>> git bisect bad 26593928564cf5b576ff05d3cbd958f57c9534bb
>> # good: [b5765a1b44bea9dfcae69c53ffeb4c689d0922a7] iommu/mediatek: Use component_match_add
>> git bisect good b5765a1b44bea9dfcae69c53ffeb4c689d0922a7
>> # first bad commit: [26593928564cf5b576ff05d3cbd958f57c9534bb] iommu/mediatek: Add error path for loop of mm_dts_parse
>> -------------------------------------------------------------------------------
>>
>>
>> -=-=-=-=-=-=-=-=-=-=-=-
>> Groups.io Links: You receive all messages sent to this group.
>> View/Reply Online (#35262): https://groups.io/g/kernelci-results/message/35262
>> Mute This Topic: https://groups.io/mt/95537191/1131744
>> Group Owner: kernelci-results+owner at groups.io
>> Unsubscribe: https://groups.io/g/kernelci-results/unsub [broonie at kernel.org]
>> -=-=-=-=-=-=-=-=-=-=-=-
>>
>>


From angelogioacchino.delregno at collabora.com  Fri Dec 16 03:44:31 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 16 Dec 2022 12:44:31 +0100
Subject: next/master bisection: baseline.login on mt8173-elm-hana
In-Reply-To: <ff000931-ce9e-f413-1540-ca2edf393362@gmail.com>
References: <6391e1c4.170a0220.b562d.3c9c@mx.google.com>
 <Y5HrIhEfuEgGKuMB@sirena.org.uk>
 <ff000931-ce9e-f413-1540-ca2edf393362@gmail.com>
Message-ID: <64296af0-e2b9-6f39-7dbc-6e0120f96fe2@collabora.com>

Il 16/12/22 12:42, Matthias Brugger ha scritto:
> Yong, Angelo, can you have a look?
> 
> If not I'd propose to drop the series for now until we understand what is going wrong.
> 
> Regards,
> Matthias
> 

It's fixed already, and picked upstream [1]... that was happening on more than
just MT8173! :-)

[1]: 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/drivers/iommu/mtk_iommu.c?h=next-20221216&id=462e768b55a2331324ff72e74706261134369826

Cheers,
Angelo


From matthias.bgg at gmail.com  Fri Dec 16 03:50:04 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:50:04 +0100
Subject: [PATCH v3 5/7] arm64: dts: mediatek: Remove pins-are-numbered
 property
In-Reply-To: <7ho7si56n3.fsf@baylibre.com>
References: <20221129023401.278780-1-bero@baylibre.com>
 <20221129023401.278780-6-bero@baylibre.com> <7ho7si56n3.fsf@baylibre.com>
Message-ID: <bc718a1e-13e9-db16-efef-06e94395ba39@gmail.com>



On 05/12/2022 14:20, Kevin Hilman wrote:
> Matthias,
> 
> Bernhard Rosenkr?nzer <bero at baylibre.com> writes:
> 
>> Remove the unnecessary pins-are-numbered property from
>> arm64 Mediatek DeviceTrees
>>
>> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
>> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>> Acked-by: Kevin Hilman <khilman at baylibre.com>
> 
> Now that the driver/binding parts are queued, I'm assuming you'll take this patch
> (and patch 6) via the mediatek tree?
> 

Yes, both applied now. Thanks for the heads up.

> Thanks,
> 
> Kevin


From matthias.bgg at gmail.com  Fri Dec 16 03:53:13 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 12:53:13 +0100
Subject: [PATCH 0/5] Add CPU caches information for some MediaTek SoCs
In-Reply-To: <20221206112330.78431-1-angelogioacchino.delregno@collabora.com>
References: <20221206112330.78431-1-angelogioacchino.delregno@collabora.com>
Message-ID: <06e969b5-3be2-4b23-de5a-93aa9ae6d95c@gmail.com>



On 06/12/2022 12:23, AngeloGioacchino Del Regno wrote:
> In devicetrees for MediaTek SoCs the CPU caches information, if
> present, is incomplete as it misses cache size, cache line size
> and number of cache sets which, in turn, will also prevent any
> cache associativity calculation.
> 
> For all of the SoCs that I know and/or I have information for,
> I've added the right information for I/D, L2 and L3 where present.
> This will also make the cacheinfo driver to correctly export the
> CPU cache information to sysfs.
> 

Whole series applied, thanks!

> AngeloGioacchino Del Regno (5):
>    arm64: dts: mt8195: Add complete CPU caches information
>    arm64: dts: mt8192: Add complete CPU caches information
>    arm64: dts: mt8186: Add complete CPU caches information
>    arm64: dts: mt8183: Add complete CPU caches information
>    arm64: dts: mt6795: Add complete CPU caches information
> 
>   arch/arm64/boot/dts/mediatek/mt6795.dtsi | 50 ++++++++++++++++
>   arch/arm64/boot/dts/mediatek/mt8183.dtsi | 74 ++++++++++++++++++++++++
>   arch/arm64/boot/dts/mediatek/mt8186.dtsi | 58 +++++++++++++++++++
>   arch/arm64/boot/dts/mediatek/mt8192.dtsi | 58 +++++++++++++++++++
>   arch/arm64/boot/dts/mediatek/mt8195.dtsi | 58 +++++++++++++++++++
>   5 files changed, 298 insertions(+)
> 


From matthias.bgg at gmail.com  Fri Dec 16 04:21:10 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 13:21:10 +0100
Subject: next/master bisection: baseline.login on mt8173-elm-hana
In-Reply-To: <64296af0-e2b9-6f39-7dbc-6e0120f96fe2@collabora.com>
References: <6391e1c4.170a0220.b562d.3c9c@mx.google.com>
 <Y5HrIhEfuEgGKuMB@sirena.org.uk>
 <ff000931-ce9e-f413-1540-ca2edf393362@gmail.com>
 <64296af0-e2b9-6f39-7dbc-6e0120f96fe2@collabora.com>
Message-ID: <1614dc0c-dadf-a092-05d4-bdec1b2c2ae9@gmail.com>



On 16/12/2022 12:44, AngeloGioacchino Del Regno wrote:
> Il 16/12/22 12:42, Matthias Brugger ha scritto:
>> Yong, Angelo, can you have a look?
>>
>> If not I'd propose to drop the series for now until we understand what is 
>> going wrong.
>>
>> Regards,
>> Matthias
>>
> 
> It's fixed already, and picked upstream [1]... that was happening on more than
> just MT8173! :-)
> 
> [1]: 
> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/drivers/iommu/mtk_iommu.c?h=next-20221216&id=462e768b55a2331324ff72e74706261134369826
> 

Ah saw that patch today and marked to look into it later. Perfect, one thing 
less to care about :)


From matthias.bgg at gmail.com  Fri Dec 16 04:27:04 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 13:27:04 +0100
Subject: [PATCH 2/3] soc: mediatek: mutex: Drop empty platform remove
 function
In-Reply-To: <0670a966-2449-977d-a791-4b1c4478524b@collabora.com>
References: <20221212222549.3779846-1-u.kleine-koenig@pengutronix.de>
 <20221212222549.3779846-3-u.kleine-koenig@pengutronix.de>
 <0670a966-2449-977d-a791-4b1c4478524b@collabora.com>
Message-ID: <23f30de6-8122-2ab1-e519-1ade6650d8c0@gmail.com>



On 13/12/2022 10:50, AngeloGioacchino Del Regno wrote:
> Il 12/12/22 23:25, Uwe Kleine-K?nig ha scritto:
>> A remove callback just returning 0 is equivalent to no remove callback
>> at all. So drop the useless function.
>>
>> Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig at pengutronix.de>
> 
> Totally agree.
> 
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> 

Applied thanks


From matthias.bgg at gmail.com  Fri Dec 16 04:33:27 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 13:33:27 +0100
Subject: [PATCH v4 0/8] add support MDP3 on MT8195 platform
In-Reply-To: <20221207094921.15450-1-moudy.ho@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
Message-ID: <5692faa0-6d7e-774f-9d6a-a495b44bdb3e@gmail.com>


Whole series applied, thanks!

On 07/12/2022 10:49, Moudy Ho wrote:
> From: mtk18742 <moudy.ho at mediatek.com>
> 
> Changes since v3:
> - Rebase on linux-next
> 
> Changes since v2:
> - Depend on :
>    [1] https://patchwork.kernel.org/project/linux-mediatek/list/?series=681097
> - Split dts settings into two patches based on belonging to MMSYS or MUTEX.
> 
> Changes since v1:
> - Depend on :
>    [1] https://patchwork.kernel.org/project/linux-mediatek/list/?series=681097
> - Add compatible names to VPPSYS0 and VPPSYS1 in MMSYS binding file.
> - Fix VPPSYS's MMSYS and MUTEX dts to pass the dtsb_check.
> - Rename mtk_mmsys_merge_config() and mtk_mmsys_rsz_dcm_config() to
>    mtk_mmsys_vpp_rsz_merge_config() and mtk_mmsys_vpp_rsz_dcm_config().
> - Clean up mtk_mmsys_vpp_rsz_dcm_config().
> - Add a comment to mtk_mutex_write_mod() and clean it up for use in more
>    than 32 mods.
> 
> Hi,
> 
> This series add support for MT8195's two VPPSYS(Video Processor Pipe Subsystem),
> under which there will be corresponding MMSYS and MUTEX settings that
> need to be configured.
> 
> Moudy Ho (2):
>    dt-bindings: arm: mediatek: mmsys: Add support for MT8195 VPPSYS
>    arm64: dts: mediatek: mt8195: add MUTEX configuration for VPPSYS
> 
> Roy-CW.Yeh (6):
>    dt-bindings: soc: mediatek: Add support for MT8195 VPPSYS
>    arm64: dts: mediatek: mt8195: add MMSYS configuration for VPPSYS
>    soc: mediatek: mmsys: add support for MT8195 VPPSYS
>    soc: mediatek: mmsys: add config api for RSZ switching and DCM
>    soc: mediatek: mutex: Add mtk_mutex_set_mod support to set MOD1
>    soc: mediatek: mutex: support MT8195 VPPSYS
> 
>   .../bindings/arm/mediatek/mediatek,mmsys.yaml |   5 +-
>   .../bindings/soc/mediatek/mediatek,mutex.yaml |   1 +
>   arch/arm64/boot/dts/mediatek/mt8195.dtsi      |  28 +++-
>   drivers/soc/mediatek/mt8195-mmsys.h           |  13 ++
>   drivers/soc/mediatek/mtk-mmsys.c              |  64 +++++++++
>   drivers/soc/mediatek/mtk-mmsys.h              |   1 +
>   drivers/soc/mediatek/mtk-mutex.c              | 135 +++++++++++++++++-
>   include/linux/soc/mediatek/mtk-mmsys.h        |   4 +
>   include/linux/soc/mediatek/mtk-mutex.h        |  35 +++++
>   9 files changed, 274 insertions(+), 12 deletions(-)
> 


From matthias.bgg at gmail.com  Fri Dec 16 04:37:55 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 13:37:55 +0100
Subject: [PATCH v4 1/6] dt-bindings: mediatek: modify VDOSYS0 display
 device tree Documentations for MT8188
In-Reply-To: <20221206020046.11333-2-nathan.lu@mediatek.com>
References: <20221206020046.11333-1-nathan.lu@mediatek.com>
 <20221206020046.11333-2-nathan.lu@mediatek.com>
Message-ID: <3eabd753-684f-5222-e7f4-a8b688e6623e@gmail.com>



On 06/12/2022 03:00, nathan.lu wrote:
> From: Nathan Lu <nathan.lu at mediatek.com>
> 
> modify VDOSYS0 display device tree Documentations for MT8188.
> 
> Signed-off-by: Nathan Lu <nathan.lu at mediatek.com>
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>

> ---
>   .../devicetree/bindings/display/mediatek/mediatek,aal.yaml    | 1 +
>   .../devicetree/bindings/display/mediatek/mediatek,ccorr.yaml  | 1 +
>   .../devicetree/bindings/display/mediatek/mediatek,color.yaml  | 1 +
>   .../devicetree/bindings/display/mediatek/mediatek,dither.yaml | 1 +
>   .../devicetree/bindings/display/mediatek/mediatek,gamma.yaml  | 1 +
>   .../devicetree/bindings/display/mediatek/mediatek,ovl.yaml    | 1 +
>   .../bindings/display/mediatek/mediatek,postmask.yaml          | 1 +
>   .../devicetree/bindings/display/mediatek/mediatek,rdma.yaml   | 4 ++++
>   8 files changed, 11 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,aal.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,aal.yaml
> index d4d585485e7b..92741486c24d 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,aal.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,aal.yaml
> @@ -31,6 +31,7 @@ properties:
>         - items:
>             - enum:
>                 - mediatek,mt8186-disp-aal
> +              - mediatek,mt8188-disp-aal
>                 - mediatek,mt8192-disp-aal
>                 - mediatek,mt8195-disp-aal
>             - const: mediatek,mt8183-disp-aal
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,ccorr.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,ccorr.yaml
> index 63fb02014a56..fe444beff558 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,ccorr.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,ccorr.yaml
> @@ -27,6 +27,7 @@ properties:
>             - const: mediatek,mt8192-disp-ccorr
>         - items:
>             - enum:
> +              - mediatek,mt8188-disp-ccorr
>                 - mediatek,mt8195-disp-ccorr
>             - const: mediatek,mt8192-disp-ccorr
>         - items:
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,color.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,color.yaml
> index d2f89ee7996f..62306c88f485 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,color.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,color.yaml
> @@ -37,6 +37,7 @@ properties:
>             - enum:
>                 - mediatek,mt8183-disp-color
>                 - mediatek,mt8186-disp-color
> +              - mediatek,mt8188-disp-color
>                 - mediatek,mt8192-disp-color
>                 - mediatek,mt8195-disp-color
>             - const: mediatek,mt8173-disp-color
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,dither.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,dither.yaml
> index 8ad8187c02d1..5c7445c174e5 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,dither.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,dither.yaml
> @@ -27,6 +27,7 @@ properties:
>         - items:
>             - enum:
>                 - mediatek,mt8186-disp-dither
> +              - mediatek,mt8188-disp-dither
>                 - mediatek,mt8192-disp-dither
>                 - mediatek,mt8195-disp-dither
>             - const: mediatek,mt8183-disp-dither
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,gamma.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,gamma.yaml
> index a89ea0ea7542..a5c6a91fac71 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,gamma.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,gamma.yaml
> @@ -28,6 +28,7 @@ properties:
>         - items:
>             - enum:
>                 - mediatek,mt8186-disp-gamma
> +              - mediatek,mt8188-disp-gamma
>                 - mediatek,mt8192-disp-gamma
>                 - mediatek,mt8195-disp-gamma
>             - const: mediatek,mt8183-disp-gamma
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,ovl.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,ovl.yaml
> index a2a27d0ca038..065e526f950e 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,ovl.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,ovl.yaml
> @@ -36,6 +36,7 @@ properties:
>             - const: mediatek,mt2701-disp-ovl
>         - items:
>             - enum:
> +              - mediatek,mt8188-disp-ovl
>                 - mediatek,mt8195-disp-ovl
>             - const: mediatek,mt8183-disp-ovl
>         - items:
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,postmask.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,postmask.yaml
> index 654080bfbdfb..27de64495401 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,postmask.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,postmask.yaml
> @@ -26,6 +26,7 @@ properties:
>         - items:
>             - enum:
>                 - mediatek,mt8186-disp-postmask
> +              - mediatek,mt8188-disp-postmask
>             - const: mediatek,mt8192-disp-postmask
>   
>     reg:
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,rdma.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,rdma.yaml
> index 0882ae86e6c4..3ade2ece3fed 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,rdma.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,rdma.yaml
> @@ -31,6 +31,10 @@ properties:
>             - const: mediatek,mt8183-disp-rdma
>         - items:
>             - const: mediatek,mt8195-disp-rdma
> +      - items:
> +          - enum:
> +              - mediatek,mt8188-disp-rdma
> +          - const: mediatek,mt8195-disp-rdma
>         - items:
>             - enum:
>                 - mediatek,mt7623-disp-rdma


From matthias.bgg at gmail.com  Fri Dec 16 04:38:24 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 13:38:24 +0100
Subject: [PATCH v4 6/6] drm/mediatek: add mediatek-drm of vdosys0 support
 for mt8188
In-Reply-To: <20221206020046.11333-7-nathan.lu@mediatek.com>
References: <20221206020046.11333-1-nathan.lu@mediatek.com>
 <20221206020046.11333-7-nathan.lu@mediatek.com>
Message-ID: <9a839b69-d798-0957-bb94-7d009fdcceec@gmail.com>



On 06/12/2022 03:00, nathan.lu wrote:
> From: Nathan Lu <nathan.lu at mediatek.com>
> 
> add driver data of mt8188 vdosys0 to mediatek-drm and the sub driver.
> 
> Signed-off-by: amy zhang <Amy.Zhang at mediatek.com>
> Signed-off-by: Nathan Lu <nathan.lu at mediatek.com>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>

> ---
>   drivers/gpu/drm/mediatek/mtk_drm_drv.c | 21 +++++++++++++++++++++
>   1 file changed, 21 insertions(+)
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index b12e5b977c50..8058a5ec2f1d 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -176,6 +176,18 @@ static const enum mtk_ddp_comp_id mt8186_mtk_ddp_ext[] = {
>   	DDP_COMPONENT_DPI0,
>   };
>   
> +static const enum mtk_ddp_comp_id mt8188_mtk_ddp_main[] = {
> +	DDP_COMPONENT_OVL0,
> +	DDP_COMPONENT_RDMA0,
> +	DDP_COMPONENT_COLOR0,
> +	DDP_COMPONENT_CCORR,
> +	DDP_COMPONENT_AAL0,
> +	DDP_COMPONENT_GAMMA,
> +	DDP_COMPONENT_POSTMASK0,
> +	DDP_COMPONENT_DITHER0,
> +	DDP_COMPONENT_DP_INTF0,
> +};
> +
>   static const enum mtk_ddp_comp_id mt8192_mtk_ddp_main[] = {
>   	DDP_COMPONENT_OVL0,
>   	DDP_COMPONENT_OVL_2L0,
> @@ -259,6 +271,11 @@ static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {
>   	.ext_len = ARRAY_SIZE(mt8186_mtk_ddp_ext),
>   };
>   
> +static const struct mtk_mmsys_driver_data mt8188_vdosys0_driver_data = {
> +	.main_path = mt8188_mtk_ddp_main,
> +	.main_len = ARRAY_SIZE(mt8188_mtk_ddp_main),
> +};
> +
>   static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
>   	.main_path = mt8192_mtk_ddp_main,
>   	.main_len = ARRAY_SIZE(mt8192_mtk_ddp_main),
> @@ -516,6 +533,8 @@ static const struct of_device_id mtk_ddp_comp_dt_ids[] = {
>   	  .data = (void *)MTK_DISP_MUTEX },
>   	{ .compatible = "mediatek,mt8186-disp-mutex",
>   	  .data = (void *)MTK_DISP_MUTEX },
> +	{ .compatible = "mediatek,mt8188-disp-mutex",
> +	  .data = (void *)MTK_DISP_MUTEX },
>   	{ .compatible = "mediatek,mt8192-disp-mutex",
>   	  .data = (void *)MTK_DISP_MUTEX },
>   	{ .compatible = "mediatek,mt8195-disp-mutex",
> @@ -600,6 +619,8 @@ static const struct of_device_id mtk_drm_of_ids[] = {
>   	  .data = &mt8183_mmsys_driver_data},
>   	{ .compatible = "mediatek,mt8186-mmsys",
>   	  .data = &mt8186_mmsys_driver_data},
> +	{ .compatible = "mediatek,mt8188-vdosys0",
> +	  .data = &mt8188_vdosys0_driver_data},
>   	{ .compatible = "mediatek,mt8192-mmsys",
>   	  .data = &mt8192_mmsys_driver_data},
>   	{ .compatible = "mediatek,mt8195-mmsys",


From matthias.bgg at gmail.com  Fri Dec 16 04:39:15 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 13:39:15 +0100
Subject: [PATCH v4 0/6] Add first version mt8188 vdosys0 driver
In-Reply-To: <20221206020046.11333-1-nathan.lu@mediatek.com>
References: <20221206020046.11333-1-nathan.lu@mediatek.com>
Message-ID: <83aee145-17dc-45fe-dde5-324602dde0f9@gmail.com>

Applied patches 2,3,4,5
The rest will go through the DRM driver tree.

Thanks!

On 06/12/2022 03:00, nathan.lu wrote:
> From: Nathan Lu <nathan.lu at mediatek.com>
> 
> This patch is to add first version mt8188 vdosys0 driver
> Modify and add new files include:
> 1. bindings documents
> 2. mtk mmsys
> 3. mtk mutex
> 4. mtk drm driver
> 
> Change in V4:
> - based on [1]
> [1] Change mmsys compatible for mt8195 mediatek-drm
>      - https://patchwork.kernel.org/project/linux-mediatek/list/?series=699386
> - Modify mediatek,mmsys.yaml, move mt8188-vdosys0 to ****mmsys
> - Modify mt8188_mmsysy.h DSI mux setting
> 
> Change in V3:
> - based on [1]
> [1] Change mmsys compatible for mt8195 mediatek-drm
>      - https://patchwork.kernel.org/project/linux-mediatek/list/?series=699386
> - Modify mediatek,mmsys.yaml mt8188-mmsys name to mt8188-vdosys0
> - Modify mtk-mmsys.c compatible name to mt8188-vdosys0
> - Add DSI mutex in mtk-mutex.c
> - Modify mtk_drm_drv.c mt8188-mmsysy name to mt8188-vdosys0
> 
> 
> Change in V2:
> - based on [2] and [3]
> [2] Add MediaTek SoC(vdosys1) support for mt8195
>      - https://patchwork.kernel.org/project/linux-mediatek/list/?series=658416
> [3] Add MediaTek SoC DRM (vdosys1) support for mt8195
>      - https://patchwork.kernel.org/project/linux-mediatek/list/?series=665269
> - Seperate bindings doucment into mmsys/mutex/display 3 parts
> - Remove redundent char in mediatek,gamma.yaml
> - Add another mediatek,mt8188-disp-rdma in mediatek,rdma.yaml
> - Remove io_start variable setting in mtk_drm_drv.c and mtk_mmsys.c
> 
> Nathan Lu (6):
>    dt-bindings: mediatek: modify VDOSYS0 display device tree
>      Documentations for MT8188
>    dt-bindings: mediatek: modify VDOSYS0 mmsys device tree Documentations
>      for MT8188
>    dt-bindings: mediatek: modify VDOSYS0 mutex device tree Documentations
>      for MT8188
>    soc: mediatek: add mtk-mmsys support for mt8188 vdosys0
>    soc: mediatek: add mtk-mutex support for mt8188 vdosys0
>    drm/mediatek: add mediatek-drm of vdosys0 support for mt8188
> 
>   .../bindings/arm/mediatek/mediatek,mmsys.yaml |   1 +
>   .../display/mediatek/mediatek,aal.yaml        |   1 +
>   .../display/mediatek/mediatek,ccorr.yaml      |   1 +
>   .../display/mediatek/mediatek,color.yaml      |   1 +
>   .../display/mediatek/mediatek,dither.yaml     |   1 +
>   .../display/mediatek/mediatek,gamma.yaml      |   1 +
>   .../display/mediatek/mediatek,ovl.yaml        |   1 +
>   .../display/mediatek/mediatek,postmask.yaml   |   1 +
>   .../display/mediatek/mediatek,rdma.yaml       |   4 +
>   .../bindings/soc/mediatek/mediatek,mutex.yaml |   1 +
>   drivers/gpu/drm/mediatek/mtk_drm_drv.c        |  21 +++
>   drivers/soc/mediatek/mt8188-mmsys.h           | 149 ++++++++++++++++++
>   drivers/soc/mediatek/mtk-mmsys.c              |  11 ++
>   drivers/soc/mediatek/mtk-mutex.c              |  53 +++++++
>   14 files changed, 247 insertions(+)
>   create mode 100644 drivers/soc/mediatek/mt8188-mmsys.h
> 


From matthias.bgg at gmail.com  Fri Dec 16 04:44:46 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 13:44:46 +0100
Subject: [PATCH v1] soc: mediatek: mtk-pm-domains: Allow mt8186 ADSP
 default power on
In-Reply-To: <ece0356f5e184e87a6d5e1fc5ca7fa1a3d203c13.camel@mediatek.com>
References: <20221012075434.30009-1-tinghan.shen@mediatek.com>
 <ce1c6a1a-9183-e56d-6757-947f5fc8133d@gmail.com>
 <d4856589cdbb8ba31d5139604abffa4a06c5c73b.camel@mediatek.com>
 <ece0356f5e184e87a6d5e1fc5ca7fa1a3d203c13.camel@mediatek.com>
Message-ID: <9440d5c0-ddd0-37be-75d4-14713044ac64@gmail.com>



On 02/12/2022 12:13, TingHan Shen (???) wrote:
> Hi Matthias,
> 
> On Wed, 2022-11-23 at 18:40 +0800, TingHan Shen wrote:
>> On Wed, 2022-11-23 at 11:20 +0100, Matthias Brugger wrote:
>> > 
>> > On 12/10/2022 09:54, Tinghan Shen wrote:
>> > > In the use case of configuring the access permissions of the ADSP core,
>> > > the mt8186 SoC ADSP power will be switched on in the bootloader because
>> > > the permission control registers are located in the ADSP subsys.
>> > > 
>> > > Signed-off-by: Tinghan Shen <tinghan.shen at mediatek.com>
>> > 
>> > Do we need a fixes tag here?
>> > My bet is:
>> > Fixes: 88590cbc1703 ("soc: mediatek: pm-domains: Add support for mt8186")
>> > 
>> > Or is this not yet a problem but needed to be able to implement access 
>> > permission configuration in the ADSP driver?
>> > 
>> > Regards,
>> > Matthias
>> 
>> This patch is needed to fix a warning when implementing the ADSP access permission configuration in preloader.
>> 
>> [    0.334154] mtk-power-controller 10006000.syscon:power-controller: /soc/syscon at 10006000/power-controller/power-domain at 18/power-domain at 19/power-domain at 20: A default off power domain has been
>> ON
>> [    0.334246] ------------[ cut here ]------------
>> [    0.334252] top_adsp_bus already disabled
>> [    0.334274] WARNING: CPU: 5 PID: 113 at drivers/clk/clk.c:969 clk_core_disable+0x90/0xb0
>> 
>> If not for this case, the pm-domain works fine.
>> 
>> 
>> Best regards,
>> TingHan
> 
> gentle ping for this.
> from above descriptions, should I add the fixes tag to this patch?
> 

No that's not needed in this case. Applied now.

Matthias


From matthias.bgg at gmail.com  Fri Dec 16 04:47:49 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 13:47:49 +0100
Subject: [PATCH] soc: mediatek: mtk-svs: Enable the IRQ later
In-Reply-To: <d683a2e7-b886-9bf6-27df-d8c67cedbbdd@collabora.com>
References: <20221127-mtk-svs-v1-0-7a5819595838@chromium.org>
 <d683a2e7-b886-9bf6-27df-d8c67cedbbdd@collabora.com>
Message-ID: <b8b14bcb-845f-aa18-f8aa-ad0bed9fb0bb@gmail.com>



On 30/11/2022 12:00, AngeloGioacchino Del Regno wrote:
> Il 27/11/22 21:22, Ricardo Ribalda ha scritto:
>> If the system does not come from reset (like when is booted via
>> kexec()), the peripheral might triger an IRQ before the data structures
>> are initialised.
>>
>> Fixes:
>>
>> [??? 0.227710] Unable to handle kernel NULL pointer dereference at virtual 
>> address 0000000000000f08
>> [??? 0.227913] Call trace:
>> [??? 0.227918]? svs_isr+0x8c/0x538
>>
>> Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
> 
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> 
> 

Applied thanks!


From matthias.bgg at gmail.com  Fri Dec 16 04:53:00 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 13:53:00 +0100
Subject: [PATCH v7 0/8] Add MediaTek MT6357 PMIC support
In-Reply-To: <7hr0xe56uf.fsf@baylibre.com>
References: <20221005-mt6357-support-v7-0-477e60126749@baylibre.com>
 <7hr0xe56uf.fsf@baylibre.com>
Message-ID: <0fc0217e-f1dd-d64c-d43c-cd47a8acbfd4@gmail.com>

Hi Kevin,
Hi Alexandre,

On 05/12/2022 14:16, Kevin Hilman wrote:
> Matthias,
> 
> Alexandre Mergnat <amergnat at baylibre.com> writes:
> 
>> This patch series adds MFD, PMIC keys, and regulator support for MT6357.
>> MT6357 is a MediaTek PMIC very similar to MT6358.
> 
> The regulator driver (and bindings) were merged by Mark.  Could you take
> the rest of this series via your mediatek tree?  The input driver (and
> bindings) are ack'd by Dmitry.
> 

Yes I can do that but 3/8 does not apply cleanly. Could you please rebase on top 
of v6.2-tmp/soc?

Thanks
Matthias


From matthias.bgg at gmail.com  Fri Dec 16 05:13:04 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 14:13:04 +0100
Subject: [PATCH v3 0/5] MT8192 Asurada devicetree - Part 2
In-Reply-To: <CAGXv+5GY5f4UWR982cY0vzUuk7aB4BSa_FcKtku1ELatMr4Dwg@mail.gmail.com>
References: <20221102190611.283546-1-nfraprado@collabora.com>
 <CAGXv+5GY5f4UWR982cY0vzUuk7aB4BSa_FcKtku1ELatMr4Dwg@mail.gmail.com>
Message-ID: <5412b27a-b5a1-351a-495d-3ba7e022302a@gmail.com>



On 30/11/2022 04:11, Chen-Yu Tsai wrote:
> On Thu, Nov 3, 2022 at 3:06 AM N?colas F. R. A. Prado
> <nfraprado at collabora.com> wrote:
>>
>>
>> This series improves some more the support for MT8192 Asurada-based
>> Chromebooks, by enabling some missing functionality, namely the internal
>> display and audio.
>>
>> In addition to that, aliases are also added for the i2c and mmc nodes,
>> which should've been done while adding the devices in the previous
>> series.
>>
>> Some notable components that are still missing support are:
>> - external display/HDMI audio (waiting for [1])
>> - GPU (waiting for [2])
>>
>> As part of testing the audio, an UCM file was used, which has already
>> been submitted upstream [3].
>>
>> This series depends on some missing dt-binding properties on rt5682,
>> which are added by another series [4].
> 
> Hi Matthias,
> 
> This series has been floating around for some time now, and has been fully
> tested by multiple parties. The rt5682 dt-binding changes have also been
> merged.
> 
> Could you queue it up?
> 

Applied now. Sorry for the delay!

Matthias


From angelogioacchino.delregno at collabora.com  Fri Dec 16 05:15:02 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 16 Dec 2022 14:15:02 +0100
Subject: [RESEND PATCH v3] soc: mediatek: Introduce
 mediatek-regulator-coupler driver
In-Reply-To: <fe236ad5-c4e0-1649-6521-ab7c14a1ff15@collabora.com>
References: <20221006115816.66853-1-angelogioacchino.delregno@collabora.com>
 <e04d15ee-9570-c919-5218-91109a88c0cb@gmail.com>
 <fe236ad5-c4e0-1649-6521-ab7c14a1ff15@collabora.com>
Message-ID: <732e4a1d-8008-072d-cedb-c6859cbfdf98@collabora.com>

Il 21/11/22 13:01, AngeloGioacchino Del Regno ha scritto:
> Il 21/11/22 12:44, Matthias Brugger ha scritto:
>>
>>
>> On 06/10/2022 13:58, AngeloGioacchino Del Regno wrote:
>>> This driver currently deals with GPU-SRAM regulator coupling, ensuring
>>> that the SRAM voltage is always between a specific range of distance to
>>> the GPU voltage, depending on the SoC, necessary in order to achieve
>>> system stability across the full range of supported GPU frequencies.
>>>
>>> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>>> Reviewed-by: Dmitry Osipenko <dmitry.osipenko at collabora.com>
>>> ---
>>>
>>> This driver was successfully tested for more than 3 months.
>>> GPU DVFS works correctly with no stability issues.
>>>
>>> Changes in RESEND,v3:
>>> ? Rebased over next-20221005
>>>
>>> Changes in v3:
>>> ? - Added braces to else-if branch
>>>
>>> Changes in v2:
>>> ? - Added check for n_coupled
>>> ? - Added check for vgpu to enforce attaching to vgpu<->sram coupling only
>>>
>>> Context:
>>> This driver is the last of the pieces of a bigger puzzle, aiming to finally
>>> enable Dynamic Voltage/Frequency Scaling for Mali GPUs found on MediaTek
>>> SoCs on the fully open source graphics stack (Panfrost driver).
>>>
>>> No devicetree bindings are provided because this does not require any
>>> driver-specific binding at all.
>>>
>>> Last but not least: it was chosen to have this driver enabled for
>>> ( ARCH_MEDIATEK && REGULATOR ) without really giving a free configuration
>>> choice because, once the DVFS mechanism will be fully working, using one
>>> of the listed MediaTek SoCs *without* this coupling mechanism *will* lead
>>> to unstabilities and system crashes.
>>> For COMPILE_TEST, choice is given for obvious reasons.
>>>
>>> ? drivers/soc/mediatek/Kconfig???????????????? |?? 5 +
>>> ? drivers/soc/mediatek/Makefile??????????????? |?? 1 +
>>> ? drivers/soc/mediatek/mtk-regulator-coupler.c | 159 +++++++++++++++++++
>>> ? 3 files changed, 165 insertions(+)
>>> ? create mode 100644 drivers/soc/mediatek/mtk-regulator-coupler.c
>>>
>>> diff --git a/drivers/soc/mediatek/Kconfig b/drivers/soc/mediatek/Kconfig
>>> index 40d0cc600cae..30b5afc0e51d 100644
>>> --- a/drivers/soc/mediatek/Kconfig
>>> +++ b/drivers/soc/mediatek/Kconfig
>>> @@ -44,6 +44,11 @@ config MTK_PMIC_WRAP
>>> ??????? on different MediaTek SoCs. The PMIC wrapper is a proprietary
>>> ??????? hardware to connect the PMIC.
>>> +config MTK_REGULATOR_COUPLER
>>> +??? bool "MediaTek SoC Regulator Coupler" if COMPILE_TEST
>>> +??? default ARCH_MEDIATEK
>>> +??? depends on REGULATOR
>>> +
>>> ? config MTK_SCPSYS
>>> ????? bool "MediaTek SCPSYS Support"
>>> ????? default ARCH_MEDIATEK
>>> diff --git a/drivers/soc/mediatek/Makefile b/drivers/soc/mediatek/Makefile
>>> index 0e9e703c931a..8c0ddacbcde8 100644
>>> --- a/drivers/soc/mediatek/Makefile
>>> +++ b/drivers/soc/mediatek/Makefile
>>> @@ -3,6 +3,7 @@ obj-$(CONFIG_MTK_CMDQ) += mtk-cmdq-helper.o
>>> ? obj-$(CONFIG_MTK_DEVAPC) += mtk-devapc.o
>>> ? obj-$(CONFIG_MTK_INFRACFG) += mtk-infracfg.o
>>> ? obj-$(CONFIG_MTK_PMIC_WRAP) += mtk-pmic-wrap.o
>>> +obj-$(CONFIG_MTK_REGULATOR_COUPLER) += mtk-regulator-coupler.o
>>> ? obj-$(CONFIG_MTK_SCPSYS) += mtk-scpsys.o
>>> ? obj-$(CONFIG_MTK_SCPSYS_PM_DOMAINS) += mtk-pm-domains.o
>>> ? obj-$(CONFIG_MTK_MMSYS) += mtk-mmsys.o
>>> diff --git a/drivers/soc/mediatek/mtk-regulator-coupler.c 
>>> b/drivers/soc/mediatek/mtk-regulator-coupler.c
>>> new file mode 100644
>>> index 000000000000..ad2ed42aa697
>>> --- /dev/null
>>> +++ b/drivers/soc/mediatek/mtk-regulator-coupler.c
>>> @@ -0,0 +1,159 @@
>>> +// SPDX-License-Identifier: GPL-2.0-only
>>> +/*
>>> + * Voltage regulators coupler for MediaTek SoCs
>>> + *
>>> + * Copyright (C) 2022 Collabora, Ltd.
>>> + * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>>> + */
>>> +
>>> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
>>> +
>>> +#include <linux/init.h>
>>> +#include <linux/kernel.h>
>>> +#include <linux/of.h>
>>> +#include <linux/regulator/coupler.h>
>>> +#include <linux/regulator/driver.h>
>>> +#include <linux/regulator/machine.h>
>>> +#include <linux/suspend.h>
>>> +
>>> +#define to_mediatek_coupler(x)??? container_of(x, struct 
>>> mediatek_regulator_coupler, coupler)
>>> +
>>> +struct mediatek_regulator_coupler {
>>> +??? struct regulator_coupler coupler;
>>> +??? struct regulator_dev *vsram_rdev;
>>> +};
>>> +
>>> +/*
>>> + * We currently support only couples of not more than two vregs and
>>> + * modify the vsram voltage only when changing voltage of vgpu.
>>> + *
>>> + * This function is limited to the GPU<->SRAM voltages relationships.
>>> + */
>>> +static int mediatek_regulator_balance_voltage(struct regulator_coupler *coupler,
>>> +????????????????????????? struct regulator_dev *rdev,
>>> +????????????????????????? suspend_state_t state)
>>> +{
>>> +??? struct mediatek_regulator_coupler *mrc = to_mediatek_coupler(coupler);
>>> +??? int max_spread = rdev->constraints->max_spread[0];
>>> +??? int vsram_min_uV = mrc->vsram_rdev->constraints->min_uV;
>>> +??? int vsram_max_uV = mrc->vsram_rdev->constraints->max_uV;
>>> +??? int vsram_target_min_uV, vsram_target_max_uV;
>>> +??? int min_uV = 0;
>>> +??? int max_uV = INT_MAX;
>>> +??? int ret;
>>> +
>>> +??? /*
>>> +???? * If the target device is on, setting the SRAM voltage directly
>>> +???? * is not supported as it scales through its coupled supply voltage.
>>> +???? *
>>> +???? * An exception is made in case the use_count is zero: this means
>>> +???? * that this is the first time we power up the SRAM regulator, which
>>> +???? * implies that the target device has yet to perform initialization
>>> +???? * and setting a voltage at that time is harmless.
>>> +???? */
>>> +??? if (rdev == mrc->vsram_rdev) {
>>> +??????? if (rdev->use_count == 0)
>>> +??????????? return regulator_do_balance_voltage(rdev, state, true);
>>> +
>>> +??????? return -EPERM;
>>> +??? }
>>> +
>>> +??? ret = regulator_check_consumers(rdev, &min_uV, &max_uV, state);
>>> +??? if (ret < 0)
>>> +??????? return ret;
>>> +
>>> +??? if (min_uV == 0) {
>>> +??????? ret = regulator_get_voltage_rdev(rdev);
>>> +??????? if (ret < 0)
>>> +??????????? return ret;
>>> +??????? min_uV = ret;
>>> +??? }
>>> +
>>> +??? ret = regulator_check_voltage(rdev, &min_uV, &max_uV);
>>> +??? if (ret < 0)
>>> +??????? return ret;
>>> +
>>> +??? /*
>>> +???? * If we're asked to set a voltage less than VSRAM min_uV, set
>>> +???? * the minimum allowed voltage on VSRAM, as in this case it is
>>> +???? * safe to ignore the max_spread parameter.
>>> +???? */
>>> +??? vsram_target_min_uV = max(vsram_min_uV, min_uV + max_spread);
>>> +??? vsram_target_max_uV = min(vsram_max_uV, vsram_target_min_uV + max_spread);
>>> +
>>> +??? /* Make sure we're not out of range */
>>> +??? vsram_target_min_uV = min(vsram_target_min_uV, vsram_max_uV);
>>> +
>>> +??? pr_debug("Setting voltage %d-%duV on %s (minuV %d)\n",
>>> +???????? vsram_target_min_uV, vsram_target_max_uV,
>>> +???????? rdev_get_name(mrc->vsram_rdev), min_uV);
>>> +
>>> +??? ret = regulator_set_voltage_rdev(mrc->vsram_rdev, vsram_target_min_uV,
>>> +???????????????????? vsram_target_max_uV, state);
>>> +??? if (ret)
>>> +??????? return ret;
>>> +
>>> +??? /* The sram voltage is now balanced: update the target vreg voltage */
>>> +??? return regulator_do_balance_voltage(rdev, state, true);
>>> +}
>>> +
>>> +static int mediatek_regulator_attach(struct regulator_coupler *coupler,
>>> +???????????????????? struct regulator_dev *rdev)
>>> +{
>>> +??? struct mediatek_regulator_coupler *mrc = to_mediatek_coupler(coupler);
>>> +??? const char *rdev_name = rdev_get_name(rdev);
>>> +
>>> +??? /*
>>> +???? * If we're getting a coupling of more than two regulators here and
>>> +???? * this means that this is surely not a GPU<->SRAM couple: in that
>>> +???? * case, we may want to use another coupler implementation, if any,
>>> +???? * or the generic one: the regulator core will keep walking through
>>> +???? * the list of couplers when any .attach_regulator() cb returns 1.
>>> +???? */
>>> +??? if (rdev->coupling_desc.n_coupled > 2)
>>> +??????? return 1;
>>> +
>>> +??? if (strstr(rdev_name, "sram")) {
>>
>> My understanding is, that we have to have either a DT node with regulator-name = 
>> "sram" property to pollute rdev->constraints->name or some regulator_desc->name 
>> populated in the drivers/regulator/mt*.c
>>
> 
> No, it's not trying to find a regulator named "sram", but any regulator that
> *contains* the "sram" string in its name, but checks only regulators that are
> coupled to others. This is the same for the "Vgpu" / "vgpu".
> 
> Example:
> 
> Regulator A, coupled to Regulator B.
> 
> Regulator A name = "Vgpu" or "vgpu", or *vgpu*, or *Vgpu*
>  ?????????????????? (name must contain either Vgpu or vgpu)
> 
> Regulator B name = "vsram" or "sram_gpu" or *sram*
>  ?????????????????? (name must contain "sram").
> 
> mrc->vsram_rdev = rdev
> 
> rdev == our Regulator B.
> 
> We hence return 0 to the coupling API: this will produce the effect of making
> it use this driver's .balance_voltage() callback instead of the generic one
> on vgpu<->vsram.
> 
> 
>> I wasn't able to find either of this, so I wonder how this is supposed to work. 
>> Please provide pointers to a working and complete implementation of this, so that 
>> I'm able to judge what is going on and if the approach is the correct one.
>>
>> I tried to figure out using mt8195-tracking-master-rolling
> 
> That's the right branch.
> 
> Let's take MT8192 Asurada as an example of how this works....
> 
> `mt6359_vsram_others_ldo_reg? is the SRAM regulator for the GPU:
> https://gitlab.collabora.com/google/chromeos-kernel/-/blob/mt8195-tracking-master-rolling/arch/arm64/boot/dts/mediatek/mt8192-asurada.dtsi#L551
> 
> `mt6359_vsram_others_ldo_reg` regulator-name = "vsram_others";
>  ???????????????????????????????????????????????? ^^^^
> Contains "sram", and this regulator is also
> 
>  ????regulator-coupled-with = <&mt6315_7_vbuck1>;
> 
> `mt6315_7_vbuck1` regulator-name = "Vgpu";
>  ??????????????????????????????????? ^^^^
> Contains "Vgpu", and this regulator is also
> 
>  ????regulator-coupled-with = <&mt6359_vsram_others_ldo_reg>;
> 
> That's how the coupling works in this case.
> 
> 
> Now, looking at case exclusions:
> In MT8192 Asurada (or, actually, mt6359.dtsi) we have other regulators that do
> actually contain "sram" in their name, like "vsram_proc1" and "vsram_others_sshub".
> 
> These regulators will be ignored, as they are *not* coupled with Vgpu.
> 
> 
> What this driver currently does in this regard is:
> 1. Regulator attach is called only on *coupled* regulators, not on the others
> 2. If the regulator contains name "vgpu" or "Vgpu" or "sram" we're good,
>  ?? otherwise we don't attach the balance_voltage logic of this driver to
>  ?? the unmatched regulators.
> 
> 
> Does this explanation clarify your doubts?
> 
> Regards,
> Angelo
> 

Matthias, please don't forget about this one :-)

Thanks!
Angelo



From matthias.bgg at gmail.com  Fri Dec 16 05:17:54 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 14:17:54 +0100
Subject: [PATCH resend] arm64: dts: mediatek: mt8192: Mark scp_adsp clock
 as broken
In-Reply-To: <8806f4cf-2141-acb8-1f9d-cd6ade64756e@collabora.com>
References: <20221130031741.3176853-1-wenst@chromium.org>
 <2ec80bd8-dfef-d2e6-eb41-6e6088043e33@collabora.com>
 <CAGXv+5E=X_hwg76=B_jqWrpieo8bR-=r8NLbNz2=JzE=kBwMWQ@mail.gmail.com>
 <8806f4cf-2141-acb8-1f9d-cd6ade64756e@collabora.com>
Message-ID: <05d6f9e6-a291-35c3-9b02-2235ad92669d@gmail.com>



On 01/12/2022 10:02, AngeloGioacchino Del Regno wrote:
> Il 01/12/22 09:56, Chen-Yu Tsai ha scritto:
>> On Wed, Nov 30, 2022 at 7:10 PM AngeloGioacchino Del Regno
>> <angelogioacchino.delregno at collabora.com> wrote:
>>>
>>> Il 30/11/22 04:17, Chen-Yu Tsai ha scritto:
>>>> The scp_adsp clock controller is under the SCP_ADSP power domain. This
>>>> power domain is currently not supported nor defined.
>>>>
>>>> Mark the clock controller as broken for now, to avoid the system from
>>>> trying to access it, and causing the CPU or bus to stall.
>>>>
>>>> Fixes: 5d2b897bc6f5 ("arm64: dts: mediatek: Add mt8192 clock controllers")
>>>> Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
>>>
>>> ....or we can add the ADSP power domain to actually fix this properly, which 
>>> looks
>>> like being a generally good idea :-)
>>
>> Sure, but that and any driver changes have to be backported, or anything
>> touching the clocks will still break the system.
>>
> 
> I agree.
> 
>> There's no reason we can't have both. I think having this one merged and
>> backported to stable first, then adding the SCP_ADSP power domain, and tying
>> it to the clock controller as a follow up addition works best.
>>
>> What do you think?
>>
> 
> I think that one reason to not have both is that we'd have to revert this commit
> after the SCP_ADSP power domain is added (with the appropriate Fixes tags and/or
> Cc stable)...
> 
> I'd expect that entire addition to be no more than 3 commits, including the dtsi
> one... and if it comes out as I expect, we'd be solving that issue on all of the
> affected older versions of the kernel - the right way.
> 
> Can we wait for... let's say, a day or two to check how that works, before taking
> a final decision on this commit?
> 

Do I understand correctly that the correct way for now is to merge this patch 
until we have a fixed the power domain controller?

Regards,
Matthias


From matthias.bgg at gmail.com  Fri Dec 16 05:19:29 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 14:19:29 +0100
Subject: [PATCH] arm64: dts: mediatek: align LED node names with dtschema
In-Reply-To: <20221125144138.477198-1-krzysztof.kozlowski@linaro.org>
References: <20221125144138.477198-1-krzysztof.kozlowski@linaro.org>
Message-ID: <f1e85a62-0f48-c4d8-f674-9a51b348e615@gmail.com>



On 25/11/2022 15:41, Krzysztof Kozlowski wrote:
> The node names should be generic and DT schema expects certain pattern:
> 
>    mediatek/mt8183-kukui-jacuzzi-fennel-sku1.dtb: pwmleds: 'keyboard-backlight' does not match any of the regexes: '^led(-[0-9a-f]+)?$', 'pinctrl-[0-9]+'
> 
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Applied, thanks!

> ---
>   .../boot/dts/mediatek/mt8183-kukui-jacuzzi-fennel-sku1.dts      | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi-fennel-sku1.dts b/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi-fennel-sku1.dts
> index dec11a4eb59e..77b96ddf648e 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi-fennel-sku1.dts
> +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi-fennel-sku1.dts
> @@ -13,7 +13,7 @@ / {
>   
>   	pwmleds {
>   		compatible = "pwm-leds";
> -		keyboard_backlight: keyboard-backlight {
> +		keyboard_backlight: led-0 {
>   			label = "cros_ec::kbd_backlight";
>   			pwms = <&cros_ec_pwm 0>;
>   			max-brightness = <1023>;


From deren.wu at mediatek.com  Fri Dec 16 05:11:20 2022
From: deren.wu at mediatek.com (Deren Wu)
Date: Fri, 16 Dec 2022 21:11:20 +0800
Subject: [PATCH] wifi: mt76: mt7921: add ack signal support
Message-ID: <b2f1f90b787a6b29df5a3e7e8842591325b0c74e.1671193434.git.deren.wu@mediatek.com>

This reports signal strength of ACK packets from the peer as measured
at each interface.

Reviewed-by: Ryder Lee <ryder.lee at mediatek.com>
Signed-off-by: Deren Wu <deren.wu at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7921/init.c  |  9 +++++++++
 drivers/net/wireless/mediatek/mt76/mt7921/mac.c   | 15 +++++++++++++++
 drivers/net/wireless/mediatek/mt76/mt7921/main.c  |  8 ++++++++
 .../net/wireless/mediatek/mt76/mt7921/mt7921.h    |  5 +++++
 drivers/net/wireless/mediatek/mt76/mt7921/regs.h  |  8 ++++++++
 5 files changed, 45 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
index d4b681d7e1d2..2dade2c039f0 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
@@ -120,6 +120,7 @@ mt7921_init_wiphy(struct ieee80211_hw *hw)
 	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HT);
 	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_VHT);
 	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HE);
+	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT);
 
 	ieee80211_hw_set(hw, SINGLE_SCAN_ON_ALL_BANDS);
 	ieee80211_hw_set(hw, HAS_RATE_CONTROL);
@@ -142,6 +143,8 @@ mt7921_init_wiphy(struct ieee80211_hw *hw)
 static void
 mt7921_mac_init_band(struct mt7921_dev *dev, u8 band)
 {
+	u32 mask, set;
+
 	mt76_rmw_field(dev, MT_TMAC_CTCR0(band),
 		       MT_TMAC_CTCR0_INS_DDLMT_REFTIME, 0x3f);
 	mt76_set(dev, MT_TMAC_CTCR0(band),
@@ -158,6 +161,12 @@ mt7921_mac_init_band(struct mt7921_dev *dev, u8 band)
 	mt76_rmw_field(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_MAX_RX_LEN, 1536);
 	/* disable rx rate report by default due to hw issues */
 	mt76_clear(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_RXD_G5_EN);
+
+	/* filter out non-resp frames and get instantaneous signal reporting */
+	mask = MT_WTBLOFF_TOP_RSCR_RCPI_MODE | MT_WTBLOFF_TOP_RSCR_RCPI_PARAM;
+	set = FIELD_PREP(MT_WTBLOFF_TOP_RSCR_RCPI_MODE, 0) |
+	      FIELD_PREP(MT_WTBLOFF_TOP_RSCR_RCPI_PARAM, 0x3);
+	mt76_rmw(dev, MT_WTBLOFF_TOP_RSCR(band), mask, set);
 }
 
 u8 mt7921_check_offload_capability(struct device *dev, const char *fw_wm)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
index 82db3762be33..557c20190c2b 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
@@ -59,6 +59,7 @@ void mt7921_mac_sta_poll(struct mt7921_dev *dev)
 	u32 tx_time[IEEE80211_NUM_ACS], rx_time[IEEE80211_NUM_ACS];
 	LIST_HEAD(sta_poll_list);
 	struct rate_info *rate;
+	s8 rssi[4];
 	int i;
 
 	spin_lock_bh(&dev->sta_poll_lock);
@@ -160,6 +161,20 @@ void mt7921_mac_sta_poll(struct mt7921_dev *dev)
 			else
 				rate->flags &= ~RATE_INFO_FLAGS_SHORT_GI;
 		}
+
+		/* get signal strength of resp frames (CTS/BA/ACK) */
+		addr = mt7921_mac_wtbl_lmac_addr(idx, 30);
+		val = mt76_rr(dev, addr);
+
+		rssi[0] = to_rssi(GENMASK(7, 0), val);
+		rssi[1] = to_rssi(GENMASK(15, 8), val);
+		rssi[2] = to_rssi(GENMASK(23, 16), val);
+		rssi[3] = to_rssi(GENMASK(31, 14), val);
+
+		msta->ack_signal =
+			mt76_rx_signal(msta->vif->phy->mt76->antenna_mask, rssi);
+
+		ewma_avg_signal_add(&msta->avg_ack_signal, -msta->ack_signal);
 	}
 }
 EXPORT_SYMBOL_GPL(mt7921_mac_sta_poll);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
index 76ac5069638f..d464f5c0e4e0 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
@@ -860,6 +860,8 @@ void mt7921_mac_sta_assoc(struct mt76_dev *mdev, struct ieee80211_vif *vif,
 		mt76_connac_mcu_uni_add_bss(&dev->mphy, vif, &mvif->sta.wcid,
 					    true, mvif->ctx);
 
+	ewma_avg_signal_init(&msta->avg_ack_signal);
+
 	mt7921_mac_wtbl_update(dev, msta->wcid.idx,
 			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
 	memset(msta->airtime_ac, 0, sizeof(msta->airtime_ac));
@@ -1430,6 +1432,12 @@ static void mt7921_sta_statistics(struct ieee80211_hw *hw,
 	}
 	sinfo->txrate.flags = txrate->flags;
 	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BITRATE);
+
+	sinfo->ack_signal = (s8)msta->ack_signal;
+	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_ACK_SIGNAL);
+
+	sinfo->avg_ack_signal = -(s8)ewma_avg_signal_read(&msta->avg_ack_signal);
+	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_ACK_SIGNAL_AVG);
 }
 
 #ifdef CONFIG_PM
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
index efff4d43d796..e39b482e262c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
@@ -144,6 +144,8 @@ enum mt7921_rxq_id {
 	MT7921_RXQ_MCU_WM = 0,
 };
 
+DECLARE_EWMA(avg_signal, 10, 8)
+
 struct mt7921_sta {
 	struct mt76_wcid wcid; /* must be first */
 
@@ -152,6 +154,9 @@ struct mt7921_sta {
 	struct list_head poll_list;
 	u32 airtime_ac[8];
 
+	int ack_signal;
+	struct ewma_avg_signal avg_ack_signal;
+
 	unsigned long last_txs;
 	unsigned long ampdu_state;
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/regs.h b/drivers/net/wireless/mediatek/mt76/mt7921/regs.h
index c65582acfa55..e52977ff3349 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/regs.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/regs.h
@@ -80,6 +80,14 @@
 #define MT_DMA_DCR0_MAX_RX_LEN		GENMASK(15, 3)
 #define MT_DMA_DCR0_RXD_G5_EN		BIT(23)
 
+/* WTBLOFF TOP: band 0(0x820e9000),band 1(0x820f9000) */
+#define MT_WTBLOFF_TOP_BASE(_band)	((_band) ? 0x820f9000 : 0x820e9000)
+#define MT_WTBLOFF_TOP(_band, ofs)	(MT_WTBLOFF_TOP_BASE(_band) + (ofs))
+
+#define MT_WTBLOFF_TOP_RSCR(_band)	MT_WTBLOFF_TOP(_band, 0x008)
+#define MT_WTBLOFF_TOP_RSCR_RCPI_MODE	GENMASK(31, 30)
+#define MT_WTBLOFF_TOP_RSCR_RCPI_PARAM	GENMASK(25, 24)
+
 /* LPON: band 0(0x24200), band 1(0xa4200) */
 #define MT_WF_LPON_BASE(_band)		((_band) ? 0x820fb000 : 0x820eb000)
 #define MT_WF_LPON(_band, ofs)		(MT_WF_LPON_BASE(_band) + (ofs))
-- 
2.18.0



From matthias.bgg at gmail.com  Fri Dec 16 05:33:33 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 14:33:33 +0100
Subject: [PATCH v2] soc: mediatek: Add deprecated compatible to mmsys
In-Reply-To: <CAGXv+5FORS=iGe55StxR_1E3sdtk9cvitfvNa1SydqCjWGcubg@mail.gmail.com>
References: <20221111082912.14557-1-matthias.bgg@kernel.org>
 <46c17d4b-d130-86a7-b5f8-73c30d7fdfdd@collabora.com>
 <CAGXv+5FORS=iGe55StxR_1E3sdtk9cvitfvNa1SydqCjWGcubg@mail.gmail.com>
Message-ID: <dd474515-4a4f-3925-cc96-068f9818a2f4@gmail.com>



On 01/12/2022 12:20, Chen-Yu Tsai wrote:
> On Mon, Nov 14, 2022 at 7:59 PM AngeloGioacchino Del Regno
> <angelogioacchino.delregno at collabora.com> wrote:
>>
>> Il 11/11/22 09:29, matthias.bgg at kernel.org ha scritto:
>>> From: Matthias Brugger <matthias.bgg at gmail.com>
>>>
>>> For backward compatibility we add the deprecated compatible.
>>>
>>> Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
>>
>> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>>
>> ...And tested on MT8195 Cherry Chromebook.
> 
> This now seems like a bad idea. In the dtsi we have two nodes (vdosys0 and
> vdosys1) that both currently use the -mmsys compatible, which in the driver
> maps to vdosys0. So not only do we have vdosys1 incorrectly probing as
> vdosys0, we also have duplicate clks being registered and duplicate DRM
> pipelines. On my device vdosys1 ends up winning the duplicate clock race.
> 

That's true, we should fix the DTS deleting vdosys1 node as it's not 
implemented. While at it we should also fix the compatible for vdosys0 as 
"mediatek,mt8195-mmsys" is now deprecated.

Would you mind to send a patch?

Regards,
Matthias

> I suggest just reverting this. The display stuff won't be useful unless
> the drivers are able to distinguish themselves from one another.
> 


From matthias.bgg at gmail.com  Fri Dec 16 05:35:34 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 14:35:34 +0100
Subject: [PATCH v2] soc: mediatek: Add deprecated compatible to mmsys
In-Reply-To: <CAGXv+5GfZYdhSCkhdGXRvbprwhceMJy9a9j+cNxsyUFYhMNZOw@mail.gmail.com>
References: <20221111082912.14557-1-matthias.bgg@kernel.org>
 <46c17d4b-d130-86a7-b5f8-73c30d7fdfdd@collabora.com>
 <CAGXv+5FORS=iGe55StxR_1E3sdtk9cvitfvNa1SydqCjWGcubg@mail.gmail.com>
 <CAGXv+5GfZYdhSCkhdGXRvbprwhceMJy9a9j+cNxsyUFYhMNZOw@mail.gmail.com>
Message-ID: <52a9924a-aaea-ed31-672f-fdf8e1ef2881@gmail.com>



On 01/12/2022 12:25, Chen-Yu Tsai wrote:
> On Thu, Dec 1, 2022 at 7:20 PM Chen-Yu Tsai <wenst at chromium.org> wrote:
>>
>> On Mon, Nov 14, 2022 at 7:59 PM AngeloGioacchino Del Regno
>> <angelogioacchino.delregno at collabora.com> wrote:
>>>
>>> Il 11/11/22 09:29, matthias.bgg at kernel.org ha scritto:
>>>> From: Matthias Brugger <matthias.bgg at gmail.com>
>>>>
>>>> For backward compatibility we add the deprecated compatible.
>>>>
>>>> Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
>>>
>>> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>>>
>>> ...And tested on MT8195 Cherry Chromebook.
>>
>> This now seems like a bad idea. In the dtsi we have two nodes (vdosys0 and
>> vdosys1) that both currently use the -mmsys compatible, which in the driver
>> maps to vdosys0. So not only do we have vdosys1 incorrectly probing as
>> vdosys0, we also have duplicate clks being registered and duplicate DRM
>> pipelines. On my device vdosys1 ends up winning the duplicate clock race.
>>
>> I suggest just reverting this. The display stuff won't be useful unless
>> the drivers are able to distinguish themselves from one another.
> 
> That and try to fix the vdosys0 node ASAP.

I'm not sure what you mean? If there are any patches that are in my queue that 
needs attention, please let me know.

Regards,
Matthias


From matthias.bgg at gmail.com  Fri Dec 16 05:41:26 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 14:41:26 +0100
Subject: [PATCH 0/4] MT8195 Acer Tomato - Audio support
In-Reply-To: <20220922094908.41623-1-angelogioacchino.delregno@collabora.com>
References: <20220922094908.41623-1-angelogioacchino.delregno@collabora.com>
Message-ID: <ece3a933-e278-fc7e-093a-4689d1c3bf3b@gmail.com>

Whole series applied, thanks a lot.

Matthias

On 22/09/2022 11:49, AngeloGioacchino Del Regno wrote:
> This series enables full support for audio, with DSP, on the Cherry
> Chromebooks.
> Related ALSA UCM2 configuration was already merged in its upstream
> repository [1]: this is fully tested and working as-is since all of
> the required fixes for MT8195 SOF drivers were picked and are present
> since `next-20220908`.
> 
> [1]: https://github.com/alsa-project/alsa-ucm-conf/commit/a59c3b1a57de8eb424c4f754bb031265e856260e
> 
> ______________________________________
> _________ Platform overview: _________
> 
> What's still missing?
> 
> * Format:    feature  (location)
> *
> * MediaTek vcodec enc/dec (mt8195.dtsi only)
> * PCI-Express WiFi card (mt8195 and mt8195-cherry)
> * VDOSYS1 (mt8195.dtsi and mediatek-drm/mmsys drivers)
> * DP/eDP outputs for external/internal display (mt8195 and mt8195-cherry)
> * LVTS Thermal Sensors (mt8195.dtsi, driver is missing)
> * GPU support (clocks and mtk-regulator-coupler are awaiting for review/pick)
> 
> AngeloGioacchino Del Regno (4):
>    arm64: dts: mediatek: cherry: Add Audio Front End (AFE) support
>    arm64: dts: mediatek: cherry: Enable the Audio DSP for SOF
>    arm64: dts: mediatek: cherry: Add external codecs and speaker
>      amplifier
>    arm64: dts: mediatek: cherry: Add sound card configuration
> 
>   .../dts/mediatek/mt8195-cherry-tomato-r1.dts  |  10 ++
>   .../dts/mediatek/mt8195-cherry-tomato-r2.dts  |  10 ++
>   .../dts/mediatek/mt8195-cherry-tomato-r3.dts  |  10 ++
>   .../boot/dts/mediatek/mt8195-cherry.dtsi      | 109 ++++++++++++++++++
>   4 files changed, 139 insertions(+)
> 


From matthias.bgg at gmail.com  Fri Dec 16 05:42:20 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 14:42:20 +0100
Subject: [PATCH v1] mtk-mmsys: Change mtk-mmsys & mtk-mutex to modules
In-Reply-To: <90c7e6f3-ecf6-bb90-5a9a-3fa1eb4b9d5d@collabora.com>
References: <20221118063018.13520-1-yongqiang.niu@mediatek.com>
 <90c7e6f3-ecf6-bb90-5a9a-3fa1eb4b9d5d@collabora.com>
Message-ID: <36ca8be4-511a-4d05-de36-0a1b0958f2a7@gmail.com>



On 18/11/2022 11:36, AngeloGioacchino Del Regno wrote:
> Il 18/11/22 07:30, Yongqiang Niu ha scritto:
>> Change mtk-mmsys & mtk-mutex to modules for gki
>>
>> Signed-off-by: Yongqiang Niu <yongqiang.niu at mediatek.com>
> 
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> 
> 

Applied, thanks!


From wenst at chromium.org  Fri Dec 16 05:50:38 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 16 Dec 2022 21:50:38 +0800
Subject: [PATCH v2] soc: mediatek: Add deprecated compatible to mmsys
In-Reply-To: <52a9924a-aaea-ed31-672f-fdf8e1ef2881@gmail.com>
References: <20221111082912.14557-1-matthias.bgg@kernel.org>
 <46c17d4b-d130-86a7-b5f8-73c30d7fdfdd@collabora.com> <CAGXv+5FORS=iGe55StxR_1E3sdtk9cvitfvNa1SydqCjWGcubg@mail.gmail.com>
 <CAGXv+5GfZYdhSCkhdGXRvbprwhceMJy9a9j+cNxsyUFYhMNZOw@mail.gmail.com> <52a9924a-aaea-ed31-672f-fdf8e1ef2881@gmail.com>
Message-ID: <CAGXv+5E8fdFsCf5rVYx0ssZzQsDn69ThX6d3betejkE6=GdBnw@mail.gmail.com>

On Fri, Dec 16, 2022 at 9:35 PM Matthias Brugger <matthias.bgg at gmail.com> wrote:
>
>
>
> On 01/12/2022 12:25, Chen-Yu Tsai wrote:
> > On Thu, Dec 1, 2022 at 7:20 PM Chen-Yu Tsai <wenst at chromium.org> wrote:
> >>
> >> On Mon, Nov 14, 2022 at 7:59 PM AngeloGioacchino Del Regno
> >> <angelogioacchino.delregno at collabora.com> wrote:
> >>>
> >>> Il 11/11/22 09:29, matthias.bgg at kernel.org ha scritto:
> >>>> From: Matthias Brugger <matthias.bgg at gmail.com>
> >>>>
> >>>> For backward compatibility we add the deprecated compatible.
> >>>>
> >>>> Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
> >>>
> >>> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> >>>
> >>> ...And tested on MT8195 Cherry Chromebook.
> >>
> >> This now seems like a bad idea. In the dtsi we have two nodes (vdosys0 and
> >> vdosys1) that both currently use the -mmsys compatible, which in the driver
> >> maps to vdosys0. So not only do we have vdosys1 incorrectly probing as
> >> vdosys0, we also have duplicate clks being registered and duplicate DRM
> >> pipelines. On my device vdosys1 ends up winning the duplicate clock race.
> >>
> >> I suggest just reverting this. The display stuff won't be useful unless
> >> the drivers are able to distinguish themselves from one another.
> >
> > That and try to fix the vdosys0 node ASAP.
>
> I'm not sure what you mean? If there are any patches that are in my queue that
> needs attention, please let me know.

It was more of a P.S. note.


From wenst at chromium.org  Fri Dec 16 05:53:40 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 16 Dec 2022 21:53:40 +0800
Subject: [PATCH v2] soc: mediatek: Add deprecated compatible to mmsys
In-Reply-To: <dd474515-4a4f-3925-cc96-068f9818a2f4@gmail.com>
References: <20221111082912.14557-1-matthias.bgg@kernel.org>
 <46c17d4b-d130-86a7-b5f8-73c30d7fdfdd@collabora.com> <CAGXv+5FORS=iGe55StxR_1E3sdtk9cvitfvNa1SydqCjWGcubg@mail.gmail.com>
 <dd474515-4a4f-3925-cc96-068f9818a2f4@gmail.com>
Message-ID: <CAGXv+5EzuPrhNGiezJciaj0Hj-U-2KiSZFZc15yhNqNrpYs0Xg@mail.gmail.com>

On Fri, Dec 16, 2022 at 9:33 PM Matthias Brugger <matthias.bgg at gmail.com> wrote:
>
>
>
> On 01/12/2022 12:20, Chen-Yu Tsai wrote:
> > On Mon, Nov 14, 2022 at 7:59 PM AngeloGioacchino Del Regno
> > <angelogioacchino.delregno at collabora.com> wrote:
> >>
> >> Il 11/11/22 09:29, matthias.bgg at kernel.org ha scritto:
> >>> From: Matthias Brugger <matthias.bgg at gmail.com>
> >>>
> >>> For backward compatibility we add the deprecated compatible.
> >>>
> >>> Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
> >>
> >> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> >>
> >> ...And tested on MT8195 Cherry Chromebook.
> >
> > This now seems like a bad idea. In the dtsi we have two nodes (vdosys0 and
> > vdosys1) that both currently use the -mmsys compatible, which in the driver
> > maps to vdosys0. So not only do we have vdosys1 incorrectly probing as
> > vdosys0, we also have duplicate clks being registered and duplicate DRM
> > pipelines. On my device vdosys1 ends up winning the duplicate clock race.
> >
>
> That's true, we should fix the DTS deleting vdosys1 node as it's not
> implemented. While at it we should also fix the compatible for vdosys0 as
> "mediatek,mt8195-mmsys" is now deprecated.
>
> Would you mind to send a patch?

I'll be going on vacation shortly, and will be back after Christmas.

Reading the above, I assume you want two patches? One to drop the deprecated
compatible, and another to delete the vdosys1 node? And both should be
tag with fixes and backported?

I can take care of it after I get back. If someone wants to beat me to it,
feel free to do it.


ChenYu


From matthias.bgg at gmail.com  Fri Dec 16 07:26:23 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Fri, 16 Dec 2022 16:26:23 +0100
Subject: [RESEND PATCH v3] soc: mediatek: Introduce
 mediatek-regulator-coupler driver
In-Reply-To: <732e4a1d-8008-072d-cedb-c6859cbfdf98@collabora.com>
References: <20221006115816.66853-1-angelogioacchino.delregno@collabora.com>
 <e04d15ee-9570-c919-5218-91109a88c0cb@gmail.com>
 <fe236ad5-c4e0-1649-6521-ab7c14a1ff15@collabora.com>
 <732e4a1d-8008-072d-cedb-c6859cbfdf98@collabora.com>
Message-ID: <19d04ffd-a79d-06f6-cb0e-fe56bc18615f@gmail.com>

Hi Angelo,

On 16/12/2022 14:15, AngeloGioacchino Del Regno wrote:
> Il 21/11/22 13:01, AngeloGioacchino Del Regno ha scritto:
>> Il 21/11/22 12:44, Matthias Brugger ha scritto:
>>>
>>>
>>> On 06/10/2022 13:58, AngeloGioacchino Del Regno wrote:
>>>> This driver currently deals with GPU-SRAM regulator coupling, ensuring
>>>> that the SRAM voltage is always between a specific range of distance to
>>>> the GPU voltage, depending on the SoC, necessary in order to achieve
>>>> system stability across the full range of supported GPU frequencies.
>>>>
>>>> Signed-off-by: AngeloGioacchino Del Regno 
>>>> <angelogioacchino.delregno at collabora.com>
>>>> Reviewed-by: Dmitry Osipenko <dmitry.osipenko at collabora.com>
>>>> ---
>>>>
>>>> This driver was successfully tested for more than 3 months.
>>>> GPU DVFS works correctly with no stability issues.
>>>>
>>>> Changes in RESEND,v3:
>>>> ? Rebased over next-20221005
>>>>
>>>> Changes in v3:
>>>> ? - Added braces to else-if branch
>>>>
>>>> Changes in v2:
>>>> ? - Added check for n_coupled
>>>> ? - Added check for vgpu to enforce attaching to vgpu<->sram coupling only
>>>>
>>>> Context:
>>>> This driver is the last of the pieces of a bigger puzzle, aiming to finally
>>>> enable Dynamic Voltage/Frequency Scaling for Mali GPUs found on MediaTek
>>>> SoCs on the fully open source graphics stack (Panfrost driver).
>>>>
>>>> No devicetree bindings are provided because this does not require any
>>>> driver-specific binding at all.
>>>>
>>>> Last but not least: it was chosen to have this driver enabled for
>>>> ( ARCH_MEDIATEK && REGULATOR ) without really giving a free configuration
>>>> choice because, once the DVFS mechanism will be fully working, using one
>>>> of the listed MediaTek SoCs *without* this coupling mechanism *will* lead
>>>> to unstabilities and system crashes.
>>>> For COMPILE_TEST, choice is given for obvious reasons.
>>>>
>>>> ? drivers/soc/mediatek/Kconfig???????????????? |?? 5 +
>>>> ? drivers/soc/mediatek/Makefile??????????????? |?? 1 +
>>>> ? drivers/soc/mediatek/mtk-regulator-coupler.c | 159 +++++++++++++++++++
>>>> ? 3 files changed, 165 insertions(+)
>>>> ? create mode 100644 drivers/soc/mediatek/mtk-regulator-coupler.c
>>>>
>>>> diff --git a/drivers/soc/mediatek/Kconfig b/drivers/soc/mediatek/Kconfig
>>>> index 40d0cc600cae..30b5afc0e51d 100644
>>>> --- a/drivers/soc/mediatek/Kconfig
>>>> +++ b/drivers/soc/mediatek/Kconfig
>>>> @@ -44,6 +44,11 @@ config MTK_PMIC_WRAP
>>>> ??????? on different MediaTek SoCs. The PMIC wrapper is a proprietary
>>>> ??????? hardware to connect the PMIC.
>>>> +config MTK_REGULATOR_COUPLER
>>>> +??? bool "MediaTek SoC Regulator Coupler" if COMPILE_TEST
>>>> +??? default ARCH_MEDIATEK
>>>> +??? depends on REGULATOR
>>>> +
>>>> ? config MTK_SCPSYS
>>>> ????? bool "MediaTek SCPSYS Support"
>>>> ????? default ARCH_MEDIATEK
>>>> diff --git a/drivers/soc/mediatek/Makefile b/drivers/soc/mediatek/Makefile
>>>> index 0e9e703c931a..8c0ddacbcde8 100644
>>>> --- a/drivers/soc/mediatek/Makefile
>>>> +++ b/drivers/soc/mediatek/Makefile
>>>> @@ -3,6 +3,7 @@ obj-$(CONFIG_MTK_CMDQ) += mtk-cmdq-helper.o
>>>> ? obj-$(CONFIG_MTK_DEVAPC) += mtk-devapc.o
>>>> ? obj-$(CONFIG_MTK_INFRACFG) += mtk-infracfg.o
>>>> ? obj-$(CONFIG_MTK_PMIC_WRAP) += mtk-pmic-wrap.o
>>>> +obj-$(CONFIG_MTK_REGULATOR_COUPLER) += mtk-regulator-coupler.o
>>>> ? obj-$(CONFIG_MTK_SCPSYS) += mtk-scpsys.o
>>>> ? obj-$(CONFIG_MTK_SCPSYS_PM_DOMAINS) += mtk-pm-domains.o
>>>> ? obj-$(CONFIG_MTK_MMSYS) += mtk-mmsys.o
>>>> diff --git a/drivers/soc/mediatek/mtk-regulator-coupler.c 
>>>> b/drivers/soc/mediatek/mtk-regulator-coupler.c
>>>> new file mode 100644
>>>> index 000000000000..ad2ed42aa697
>>>> --- /dev/null
>>>> +++ b/drivers/soc/mediatek/mtk-regulator-coupler.c
>>>> @@ -0,0 +1,159 @@
>>>> +// SPDX-License-Identifier: GPL-2.0-only
>>>> +/*
>>>> + * Voltage regulators coupler for MediaTek SoCs
>>>> + *
>>>> + * Copyright (C) 2022 Collabora, Ltd.
>>>> + * Author: AngeloGioacchino Del Regno 
>>>> <angelogioacchino.delregno at collabora.com>
>>>> + */
>>>> +
>>>> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
>>>> +
>>>> +#include <linux/init.h>
>>>> +#include <linux/kernel.h>
>>>> +#include <linux/of.h>
>>>> +#include <linux/regulator/coupler.h>
>>>> +#include <linux/regulator/driver.h>
>>>> +#include <linux/regulator/machine.h>
>>>> +#include <linux/suspend.h>
>>>> +
>>>> +#define to_mediatek_coupler(x)??? container_of(x, struct 
>>>> mediatek_regulator_coupler, coupler)
>>>> +
>>>> +struct mediatek_regulator_coupler {
>>>> +??? struct regulator_coupler coupler;
>>>> +??? struct regulator_dev *vsram_rdev;
>>>> +};
>>>> +
>>>> +/*
>>>> + * We currently support only couples of not more than two vregs and
>>>> + * modify the vsram voltage only when changing voltage of vgpu.
>>>> + *
>>>> + * This function is limited to the GPU<->SRAM voltages relationships.
>>>> + */
>>>> +static int mediatek_regulator_balance_voltage(struct regulator_coupler 
>>>> *coupler,
>>>> +????????????????????????? struct regulator_dev *rdev,
>>>> +????????????????????????? suspend_state_t state)
>>>> +{
>>>> +??? struct mediatek_regulator_coupler *mrc = to_mediatek_coupler(coupler);
>>>> +??? int max_spread = rdev->constraints->max_spread[0];
>>>> +??? int vsram_min_uV = mrc->vsram_rdev->constraints->min_uV;
>>>> +??? int vsram_max_uV = mrc->vsram_rdev->constraints->max_uV;
>>>> +??? int vsram_target_min_uV, vsram_target_max_uV;
>>>> +??? int min_uV = 0;
>>>> +??? int max_uV = INT_MAX;
>>>> +??? int ret;
>>>> +
>>>> +??? /*
>>>> +???? * If the target device is on, setting the SRAM voltage directly
>>>> +???? * is not supported as it scales through its coupled supply voltage.
>>>> +???? *
>>>> +???? * An exception is made in case the use_count is zero: this means
>>>> +???? * that this is the first time we power up the SRAM regulator, which
>>>> +???? * implies that the target device has yet to perform initialization
>>>> +???? * and setting a voltage at that time is harmless.
>>>> +???? */
>>>> +??? if (rdev == mrc->vsram_rdev) {
>>>> +??????? if (rdev->use_count == 0)
>>>> +??????????? return regulator_do_balance_voltage(rdev, state, true);
>>>> +
>>>> +??????? return -EPERM;
>>>> +??? }
>>>> +
>>>> +??? ret = regulator_check_consumers(rdev, &min_uV, &max_uV, state);
>>>> +??? if (ret < 0)
>>>> +??????? return ret;
>>>> +
>>>> +??? if (min_uV == 0) {
>>>> +??????? ret = regulator_get_voltage_rdev(rdev);
>>>> +??????? if (ret < 0)
>>>> +??????????? return ret;
>>>> +??????? min_uV = ret;
>>>> +??? }
>>>> +
>>>> +??? ret = regulator_check_voltage(rdev, &min_uV, &max_uV);
>>>> +??? if (ret < 0)
>>>> +??????? return ret;
>>>> +
>>>> +??? /*
>>>> +???? * If we're asked to set a voltage less than VSRAM min_uV, set
>>>> +???? * the minimum allowed voltage on VSRAM, as in this case it is
>>>> +???? * safe to ignore the max_spread parameter.
>>>> +???? */
>>>> +??? vsram_target_min_uV = max(vsram_min_uV, min_uV + max_spread);
>>>> +??? vsram_target_max_uV = min(vsram_max_uV, vsram_target_min_uV + max_spread);
>>>> +
>>>> +??? /* Make sure we're not out of range */
>>>> +??? vsram_target_min_uV = min(vsram_target_min_uV, vsram_max_uV);
>>>> +
>>>> +??? pr_debug("Setting voltage %d-%duV on %s (minuV %d)\n",
>>>> +???????? vsram_target_min_uV, vsram_target_max_uV,
>>>> +???????? rdev_get_name(mrc->vsram_rdev), min_uV);
>>>> +
>>>> +??? ret = regulator_set_voltage_rdev(mrc->vsram_rdev, vsram_target_min_uV,
>>>> +???????????????????? vsram_target_max_uV, state);
>>>> +??? if (ret)
>>>> +??????? return ret;
>>>> +
>>>> +??? /* The sram voltage is now balanced: update the target vreg voltage */
>>>> +??? return regulator_do_balance_voltage(rdev, state, true);
>>>> +}
>>>> +
>>>> +static int mediatek_regulator_attach(struct regulator_coupler *coupler,
>>>> +???????????????????? struct regulator_dev *rdev)
>>>> +{
>>>> +??? struct mediatek_regulator_coupler *mrc = to_mediatek_coupler(coupler);
>>>> +??? const char *rdev_name = rdev_get_name(rdev);
>>>> +
>>>> +??? /*
>>>> +???? * If we're getting a coupling of more than two regulators here and
>>>> +???? * this means that this is surely not a GPU<->SRAM couple: in that
>>>> +???? * case, we may want to use another coupler implementation, if any,
>>>> +???? * or the generic one: the regulator core will keep walking through
>>>> +???? * the list of couplers when any .attach_regulator() cb returns 1.
>>>> +???? */
>>>> +??? if (rdev->coupling_desc.n_coupled > 2)
>>>> +??????? return 1;
>>>> +
>>>> +??? if (strstr(rdev_name, "sram")) {
>>>
>>> My understanding is, that we have to have either a DT node with 
>>> regulator-name = "sram" property to pollute rdev->constraints->name or some 
>>> regulator_desc->name populated in the drivers/regulator/mt*.c
>>>
>>
>> No, it's not trying to find a regulator named "sram", but any regulator that
>> *contains* the "sram" string in its name, but checks only regulators that are
>> coupled to others. This is the same for the "Vgpu" / "vgpu".
>>
>> Example:
>>
>> Regulator A, coupled to Regulator B.
>>
>> Regulator A name = "Vgpu" or "vgpu", or *vgpu*, or *Vgpu*
>> ??????????????????? (name must contain either Vgpu or vgpu)
>>
>> Regulator B name = "vsram" or "sram_gpu" or *sram*
>> ??????????????????? (name must contain "sram").
>>
>> mrc->vsram_rdev = rdev
>>
>> rdev == our Regulator B.
>>
>> We hence return 0 to the coupling API: this will produce the effect of making
>> it use this driver's .balance_voltage() callback instead of the generic one
>> on vgpu<->vsram.
>>
>>
>>> I wasn't able to find either of this, so I wonder how this is supposed to 
>>> work. Please provide pointers to a working and complete implementation of 
>>> this, so that I'm able to judge what is going on and if the approach is the 
>>> correct one.
>>>
>>> I tried to figure out using mt8195-tracking-master-rolling
>>
>> That's the right branch.
>>
>> Let's take MT8192 Asurada as an example of how this works....
>>
>> `mt6359_vsram_others_ldo_reg? is the SRAM regulator for the GPU:
>> https://gitlab.collabora.com/google/chromeos-kernel/-/blob/mt8195-tracking-master-rolling/arch/arm64/boot/dts/mediatek/mt8192-asurada.dtsi#L551
>>
>> `mt6359_vsram_others_ldo_reg` regulator-name = "vsram_others";
>> ????????????????????????????????????????????????? ^^^^
>> Contains "sram", and this regulator is also
>>
>> ?????regulator-coupled-with = <&mt6315_7_vbuck1>;
>>
>> `mt6315_7_vbuck1` regulator-name = "Vgpu";
>> ???????????????????????????????????? ^^^^
>> Contains "Vgpu", and this regulator is also
>>
>> ?????regulator-coupled-with = <&mt6359_vsram_others_ldo_reg>;
>>
>> That's how the coupling works in this case.
>>
>>
>> Now, looking at case exclusions:
>> In MT8192 Asurada (or, actually, mt6359.dtsi) we have other regulators that do
>> actually contain "sram" in their name, like "vsram_proc1" and 
>> "vsram_others_sshub".
>>
>> These regulators will be ignored, as they are *not* coupled with Vgpu.
>>
>>
>> What this driver currently does in this regard is:
>> 1. Regulator attach is called only on *coupled* regulators, not on the others
>> 2. If the regulator contains name "vgpu" or "Vgpu" or "sram" we're good,
>> ??? otherwise we don't attach the balance_voltage logic of this driver to
>> ??? the unmatched regulators.
>>
>>
>> Does this explanation clarify your doubts?
>>
>> Regards,
>> Angelo
>>
> 
> Matthias, please don't forget about this one :-)
> 

Unfortunately I have to leave now and didn't had time to look more into it. So 
I'll write just my suspicion. So please feel free to correct me if I'm totally 
wrong (I know you will do anyway ;)

1) When the regulator-coupler driver was introduced the driver was bound by a 
compatible, but we use arch_initcall(...) for it.
2) I really don't like the hardcoded search for a the regulator name in the 
mediatek_regulator_attach function. I haven't seen that in the Nvidia driver, 
also I had no time to understand how they decide which regulators need to be 
coupled. My instinct would tell me that this should be described in device-tree.

Have a nice weekend!
Matthias


From lorenzo at kernel.org  Fri Dec 16 08:48:20 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Fri, 16 Dec 2022 17:48:20 +0100
Subject: [PATCH] wifi: mt76: fix potential memory leakage
In-Reply-To: <c663e984077ae903d8d4d34ed470986c6ccb4757.1671157658.git.Bo.Jiao@mediatek.com>
References: <c663e984077ae903d8d4d34ed470986c6ccb4757.1671157658.git.Bo.Jiao@mediatek.com>
Message-ID: <Y5yhVN0lwPOyq6oP@lore-desk>

> From: Bo Jiao <Bo.Jiao at mediatek.com>
> 
> fix potential memory leakage, recycle rxwi when mt76_dma_add_buf() call fails.
> 
> Signed-off-by: Bo Jiao <Bo.Jiao at mediatek.com>
> ---
>  drivers/net/wireless/mediatek/mt76/dma.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
> index fc24b35..9053344 100644
> --- a/drivers/net/wireless/mediatek/mt76/dma.c
> +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> @@ -592,6 +592,7 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
>  		qbuf.len = len - offset;
>  		qbuf.skip_unmap = false;
>  		if (mt76_dma_add_buf(dev, q, &qbuf, 1, 0, buf, t) < 0) {
> +			mt76_put_rxwi(dev, t);

I think we should add it even if page_frag_alloc or dma_map_single fail.

Regards,
Lorenzo

>  			dma_unmap_single(dev->dma_dev, addr, len,
>  					 DMA_FROM_DEVICE);
>  			skb_free_frag(buf);
> -- 
> 2.18.0
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221216/353def34/attachment.sig>

From sean.anderson at seco.com  Fri Dec 16 09:08:51 2022
From: sean.anderson at seco.com (Sean Anderson)
Date: Fri, 16 Dec 2022 12:08:51 -0500
Subject: [PATCH 0/2] drm: Add component_match_add_of and convert users of
 drm_of_component_match_add
In-Reply-To: <20221103182222.2247724-1-sean.anderson@seco.com>
References: <20221103182222.2247724-1-sean.anderson@seco.com>
Message-ID: <68562aca-5256-9e4b-bcd5-983e43408a7d@seco.com>

On 11/3/22 14:22, Sean Anderson wrote:
> This series adds a new function component_match_add_of to simplify the
> common case of calling component_match_add_release with
> component_release_of and component_compare_of. There is already
> drm_of_component_match_add, which allows for a custom compare function.
> However, all existing users just use component_compare_of (or an
> equivalent).
> 
> I can split the second commit up if that is easier to review.
> 
> 
> Sean Anderson (2):
>   component: Add helper for device nodes
>   drm: Convert users of drm_of_component_match_add to
>     component_match_add_of
> 
>  .../gpu/drm/arm/display/komeda/komeda_drv.c   |  6 ++--
>  drivers/gpu/drm/arm/hdlcd_drv.c               |  9 +-----
>  drivers/gpu/drm/arm/malidp_drv.c              | 11 +------
>  drivers/gpu/drm/armada/armada_drv.c           | 10 ++++---
>  drivers/gpu/drm/drm_of.c                      | 29 +++----------------
>  drivers/gpu/drm/etnaviv/etnaviv_drv.c         |  4 +--
>  .../gpu/drm/hisilicon/kirin/kirin_drm_drv.c   |  3 +-
>  drivers/gpu/drm/ingenic/ingenic-drm-drv.c     |  3 +-
>  drivers/gpu/drm/mediatek/mtk_drm_drv.c        |  4 +--
>  drivers/gpu/drm/msm/msm_drv.c                 | 14 ++++-----
>  drivers/gpu/drm/sti/sti_drv.c                 |  3 +-
>  drivers/gpu/drm/sun4i/sun4i_drv.c             |  3 +-
>  drivers/gpu/drm/tilcdc/tilcdc_external.c      | 10 ++-----
>  drivers/iommu/mtk_iommu.c                     |  3 +-
>  drivers/iommu/mtk_iommu_v1.c                  |  3 +-
>  include/drm/drm_of.h                          | 12 --------
>  include/linux/component.h                     |  9 ++++++
>  sound/soc/codecs/wcd938x.c                    |  6 ++--
>  18 files changed, 46 insertions(+), 96 deletions(-)
> 

ping?

Should I send a v2 broken up like Mark suggested?

--Sean


From robin.murphy at arm.com  Fri Dec 16 09:41:40 2022
From: robin.murphy at arm.com (Robin Murphy)
Date: Fri, 16 Dec 2022 17:41:40 +0000
Subject: [PATCH 0/2] drm: Add component_match_add_of and convert users of
 drm_of_component_match_add
In-Reply-To: <68562aca-5256-9e4b-bcd5-983e43408a7d@seco.com>
References: <20221103182222.2247724-1-sean.anderson@seco.com>
 <68562aca-5256-9e4b-bcd5-983e43408a7d@seco.com>
Message-ID: <2db73405-464f-6980-a7c1-7fe232611331@arm.com>

On 2022-12-16 17:08, Sean Anderson wrote:
> On 11/3/22 14:22, Sean Anderson wrote:
>> This series adds a new function component_match_add_of to simplify the
>> common case of calling component_match_add_release with
>> component_release_of and component_compare_of. There is already
>> drm_of_component_match_add, which allows for a custom compare function.
>> However, all existing users just use component_compare_of (or an
>> equivalent).
>>
>> I can split the second commit up if that is easier to review.
>>
>>
>> Sean Anderson (2):
>>    component: Add helper for device nodes
>>    drm: Convert users of drm_of_component_match_add to
>>      component_match_add_of
>>
>>   .../gpu/drm/arm/display/komeda/komeda_drv.c   |  6 ++--
>>   drivers/gpu/drm/arm/hdlcd_drv.c               |  9 +-----
>>   drivers/gpu/drm/arm/malidp_drv.c              | 11 +------
>>   drivers/gpu/drm/armada/armada_drv.c           | 10 ++++---
>>   drivers/gpu/drm/drm_of.c                      | 29 +++----------------
>>   drivers/gpu/drm/etnaviv/etnaviv_drv.c         |  4 +--
>>   .../gpu/drm/hisilicon/kirin/kirin_drm_drv.c   |  3 +-
>>   drivers/gpu/drm/ingenic/ingenic-drm-drv.c     |  3 +-
>>   drivers/gpu/drm/mediatek/mtk_drm_drv.c        |  4 +--
>>   drivers/gpu/drm/msm/msm_drv.c                 | 14 ++++-----
>>   drivers/gpu/drm/sti/sti_drv.c                 |  3 +-
>>   drivers/gpu/drm/sun4i/sun4i_drv.c             |  3 +-
>>   drivers/gpu/drm/tilcdc/tilcdc_external.c      | 10 ++-----
>>   drivers/iommu/mtk_iommu.c                     |  3 +-
>>   drivers/iommu/mtk_iommu_v1.c                  |  3 +-
>>   include/drm/drm_of.h                          | 12 --------
>>   include/linux/component.h                     |  9 ++++++
>>   sound/soc/codecs/wcd938x.c                    |  6 ++--
>>   18 files changed, 46 insertions(+), 96 deletions(-)
>>
> 
> ping?
> 
> Should I send a v2 broken up like Mark suggested?

FWIW you'll need to rebase the IOMMU changes on 6.2-rc1 anyway - 
mtk_iommu stops using component_match_add_release() at all.

Thanks,
Robin.


From ryazanov.s.a at gmail.com  Fri Dec 16 12:17:30 2022
From: ryazanov.s.a at gmail.com (Sergey Ryazanov)
Date: Sat, 17 Dec 2022 00:17:30 +0400
Subject: [PATCH net-next v1 02/13] net: wwan: tmi: Add buffer management
In-Reply-To: <a9d4eebb99d53224366c387ae314173b870d134c.camel@mediatek.com>
References: <20221122111152.160377-1-yanchao.yang@mediatek.com>
 <20221122111152.160377-3-yanchao.yang@mediatek.com>
 <14db8809-6144-1d10-59e7-298079b2e6e2@gmail.com>
 <a9d4eebb99d53224366c387ae314173b870d134c.camel@mediatek.com>
Message-ID: <f6b1a1d6-699b-5740-6aa1-6285d673286a@gmail.com>

Hello Yanchao,

sorry for late response, please find some thoughts below.

On 09.12.2022 14:26, Yanchao Yang (???) wrote:
> On Sun, 2022-12-04 at 22:58 +0400, Sergey Ryazanov wrote:
>> On 22.11.2022 15:11, Yanchao Yang wrote:
>>> From: MediaTek Corporation <linuxwwan at mediatek.com>
>>>
>>> To malloc I/O memory as soon as possible, buffer management comes
>>> into being.
>>> It creates buffer pools that reserve some buffers through deferred
>>> works when
>>> the driver isn't busy.
>>>
>>> The buffer management provides unified memory allocation/de-
>>> allocation
>>> interfaces for other modules. It supports two buffer types of SKB
>>> and page.
>>> Two reload work queues with different priority values are provided
>>> to meet
>>> various requirements of the control plane and the data plane.
>>>
>>> When the reserved buffer count of the pool is less than a threshold
>>> (default
>>> is 2/3 of the pool size), the reload work will restart to allocate
>>> buffers
>>> from the OS until the buffer pool becomes full. When the buffer
>>> pool fills,
>>> the OS will recycle the buffer freed by the user.
>>>
>>> Signed-off-by: Mingliang Xu <mingliang.xu at mediatek.com>
>>> Signed-off-by: MediaTek Corporation <linuxwwan at mediatek.com>
>>> ---
>>>    drivers/net/wwan/mediatek/Makefile  |   3 +-
>>>    drivers/net/wwan/mediatek/mtk_bm.c  | 369
>>> ++++++++++++++++++++++++++++
>>>    drivers/net/wwan/mediatek/mtk_bm.h  |  79 ++++++
>>>    drivers/net/wwan/mediatek/mtk_dev.c |  11 +-
>>>    drivers/net/wwan/mediatek/mtk_dev.h |   1 +
>>>    5 files changed, 461 insertions(+), 2 deletions(-)
>>>    create mode 100644 drivers/net/wwan/mediatek/mtk_bm.c
>>>    create mode 100644 drivers/net/wwan/mediatek/mtk_bm.h
>>
>> Yanchao, can you share some numbers, how this custom pool is
>> outperform
>> the regular kernel allocator?
> Prepare 2 drivers *.ko for comparison.
> Driver A (following named A):  enable pre-allocate buffer pool.
> Driver B (following named A):  disenable pre-allocate buffer pool. It
> uses kernel API directly (__dev_alloc_skb and netdev_alloc_frag)
> 
> Test Instrument: Keysight UXM TA
> Iperf command:
> Server Command: iperf3 -s -p 5002 -i 1
> Client Command: iperf3 -c 192.168.2.1 -p 5002 -i 1 -w 8M -t 30 -R -P 5
> 
> Test result: Fig 1. A?s TCP DL throughput Fig 2. B?s TCP DL throughput
> (Ref attachment)
> 
>  From the results, it represents that the A?s IP packets throughput
> reaches 7Gbits/sec, while B?s throughput is 4.7Gbits/sec. A?s
> throughput is up about 50% compared with B.
> 
> In addition, from ftrace, it represents following results.
> A: it takes 14.241828s for allocating 33211099 buffers. The average
> time is about 0.4us.
> B: it takes 7.677069s for allocating 10890789 buffers. The average time
> is about 0.7us.

Thank you for this impressive comparison test. There is something to 
think about here.

In a common case, the kernel memory API is fast enough to guarantee 
multi-gigabit throughput. So if some custom code outperforms it, then 
either (a) you have found some corner case where the kernel memory API 
is deadly slow and should be improved, or (b) there is something wrong 
with a driver code. My point is that a driver should not implement 
custom memory management since that leads to a driver complexity without 
any real performance improvement.

The test shows the really significant difference between the custom 
memory pool and the direct kernel API calling. So let's try to figure 
out what is going on.

I assume that the control path (CLDMA) could not cause that much 
performance degradation due to the low control messages traffic. So most 
probably the root cause is somewhere in the data path (DPMAIF). Correct 
me if my assumption is wrong.

Digging deeper into the driver code, I noticed that there actually two 
types of pools (buffers). One pool type contains ready-made skbs, and 
the other contains just page fragments. And both types of pools are 
utilized in the data Rx path. Have you tried measuring which type of 
pool improves performance more significantly?

I also noticed that neither allocated skb nor allocated page fragments 
are freed in the DPMAIF code. So the improvement is not connected to 
optimal caching (i.e. memory reuse). Thus memory allocation improvement 
is most likely caused by avoiding of some contention.

The pool reload is performed in the context of work. And if I am not 
mistaken, then skbs and fragments are also taken from preallocated pools 
in the context of work to reinitialize the BAT (Rx) ring buffer. There 
is no difference in the matter of priority. Both the pool reload and the 
Rx ring buffer reload functions are called with the same priority on an 
arbitrary CPU in the absence of other high priority tasks (e.g. 
tasklets, irq). The only obvious difference is the invocation rate. The 
pool reload operation is triggered as soon as the pool level falls below 
the predefined threshold (currently 67%). While the Rx ring reload 
operation is called on each NAPI poll. Have you considered introducing a 
threshold similar to the pool reload threshold and calling the rx ring 
reload less frequently?

--
Sergey


From ryazanov.s.a at gmail.com  Fri Dec 16 12:40:56 2022
From: ryazanov.s.a at gmail.com (Sergey Ryazanov)
Date: Sat, 17 Dec 2022 00:40:56 +0400
Subject: [PATCH net-next v1 01/13] net: wwan: tmi: Add PCIe core
In-Reply-To: <8878ed64fadfda9b3d3c8cd8b4564dd9019349b6.camel@mediatek.com>
References: <20221122111152.160377-1-yanchao.yang@mediatek.com>
 <20221122111152.160377-2-yanchao.yang@mediatek.com>
 <64aada78-8029-1b05-b802-a005549503c9@gmail.com>
 <8878ed64fadfda9b3d3c8cd8b4564dd9019349b6.camel@mediatek.com>
Message-ID: <7d44c9ed-cf9d-64e1-df85-726a97859e06@gmail.com>

Hello Yanchao,

On 07.12.2022 06:33, Yanchao Yang (???) wrote:
> On Sun, 2022-12-04 at 22:52 +0400, Sergey Ryazanov wrote:
>> On 22.11.2022 15:11, Yanchao Yang wrote:
>>> Registers the TMI device driver with the kernel. Set up all the
>>> fundamental
>>> configurations for the device: PCIe layer, Modem Host Cross Core
>>> Interface
>>> (MHCCIF), Reset Generation Unit (RGU), modem common control
>>> operations and
>>> build infrastructure.
>>>
>>> * PCIe layer code implements driver probe and removal, MSI-X
>>> interrupt
>>> initialization and de-initialization, and the way of resetting the
>>> device.
>>> * MHCCIF provides interrupt channels to communicate events such as
>>> handshake,
>>> PM and port enumeration.
>>> * RGU provides interrupt channels to generate notifications from
>>> the device
>>> so that the TMI driver could get the device reset.
>>> * Modem common control operations provide the basic read/write
>>> functions of
>>> the device's hardware registers, mask/unmask/get/clear functions of
>>> the
>>> device's interrupt registers and inquiry functions of the device's
>>> status.
>>>
>>> Signed-off-by: Ting Wang <ting.wang at mediatek.com>
>>> Signed-off-by: MediaTek Corporation <linuxwwan at mediatek.com>
>>> ---
>>>    drivers/net/wwan/Kconfig                 |   11 +
>>>    drivers/net/wwan/Makefile                |    1 +
>>>    drivers/net/wwan/mediatek/Makefile       |   12 +
>>>    drivers/net/wwan/mediatek/mtk_common.h   |   30 +
>>>    drivers/net/wwan/mediatek/mtk_dev.c      |   50 +
>>>    drivers/net/wwan/mediatek/mtk_dev.h      |  503 ++++++++++
>>>    drivers/net/wwan/mediatek/pcie/mtk_pci.c | 1164
>>> ++++++++++++++++++++++
>>>    drivers/net/wwan/mediatek/pcie/mtk_pci.h |  150 +++
>>>    drivers/net/wwan/mediatek/pcie/mtk_reg.h |   69 ++
>>>    9 files changed, 1990 insertions(+)
>>>    create mode 100644 drivers/net/wwan/mediatek/Makefile
>>>    create mode 100644 drivers/net/wwan/mediatek/mtk_common.h
>>>    create mode 100644 drivers/net/wwan/mediatek/mtk_dev.c
>>>    create mode 100644 drivers/net/wwan/mediatek/mtk_dev.h
>>>    create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_pci.c
>>>    create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_pci.h
>>>    create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_reg.h
>>>
>>> diff --git a/drivers/net/wwan/Kconfig b/drivers/net/wwan/Kconfig
>>> index 3486ffe94ac4..a93a0c511d50 100644
>>> --- a/drivers/net/wwan/Kconfig
>>> +++ b/drivers/net/wwan/Kconfig
>>> @@ -119,6 +119,17 @@ config MTK_T7XX
>>>    
>>>    	  If unsure, say N.
>>>    
>>> +config MTK_TMI
>>> +	tristate "TMI Driver for Mediatek T-series Device"
>>> +	depends on PCI
>>> +	help
>>> +	  This driver enables Mediatek T-series WWAN Device
>>> communication.
>>> +
>>> +	  If you have one of those Mediatek T-series WWAN Modules and
>>> wish to
>>> +	  use it in Linux say Y/M here.
>>
>> From this and the series descriptions, it is unclear which modem
>> chips this driver is intended for and how does it correlate with the
>> T7xx driver? Is the TMI driver a drop-in replacement for the t7xx driver,
>> or does the TMI driver support any T-series chips except t7xx?
> > The driver is intended for t8xx or later T-series modem chips in the
> future. Currently, t7xx is not support.

Can you add this information to the option description to make it easier 
for users to choose?

BTW, just curious, do you have any plans to add T7xx support to the TMI 
driver, or maybe merge them or factor out the common code into a common 
library? I am asking because I noticed some common code and modem 
components, but that is not addressed in the cover letter. Or is this 
feeling misleading and these two series are very different?

>>> +
>>> +	  If unsure, say N.
>>> +
>>>    endif # WWAN
>>>    
>>>    endmenu
>>> diff --git a/drivers/net/wwan/Makefile b/drivers/net/wwan/Makefile
>>> index 3960c0ae2445..198d8074851f 100644
>>> --- a/drivers/net/wwan/Makefile
>>> +++ b/drivers/net/wwan/Makefile
>>> @@ -14,3 +14,4 @@ obj-$(CONFIG_QCOM_BAM_DMUX) += qcom_bam_dmux.o
>>>    obj-$(CONFIG_RPMSG_WWAN_CTRL) += rpmsg_wwan_ctrl.o
>>>    obj-$(CONFIG_IOSM) += iosm/
>>>    obj-$(CONFIG_MTK_T7XX) += t7xx/
>>> +obj-$(CONFIG_MTK_TMI) += mediatek/
>>
>> The driver is called mtk_tmi, but its code is placed to the
>> directory
>> with too generic name 'mediatek'. Do you plan too keep all possible
>> future drivers in this directory? >
> Yes, we plan to put all mediatek's wwan driver into the same directory.
> Currently, there is only T-series modem driver. So we don't create
> 'tmi' folder under 'mediatek' directory explicitly.

Thank you for the clarification.

--
Sergey


From vishalrao at gmail.com  Sat Dec 17 02:31:12 2022
From: vishalrao at gmail.com (Vishal Rao)
Date: Sat, 17 Dec 2022 16:01:12 +0530
Subject: MediaTek MT7922 (AMD RZ616) Wifi 6E 6ghz not working
Message-ID: <CAMWtyy0kKVsEwz3jQZCMhz4An=E9cinN___JO4+cohArgAmxvQ@mail.gmail.com>

Hello!

Please reply-all (to CC me in replies as I am not subscribed to the
mailing list) for any followups where I can provide further
information.

Using Ubuntu 22.04 LTS based distro elementary OS 7 with the latest
available Ubuntu mainline kernel 6.1 RC5 build the wifi does not
connect to the 6GHZ band (Wifi 6E) and it only even shows the 6ghz
SSID name *after* I have connected to the 5ghz wifi band.

This is on a new ASUS ZenBook laptop model UM5302TA with the AMD Ryzen
6800U CPU platform which includes the AMD-Mediatek co-developed RZ616
wifi chip I believe.

Pastebin of lspci -vvnn output: https://pastebin.ubuntu.com/p/QwM58ZkptG

Let me know what further information I should provide - happy to do so!

Regards,
Vishal Rao


From sashal at kernel.org  Sun Dec 18 08:00:58 2022
From: sashal at kernel.org (Sasha Levin)
Date: Sun, 18 Dec 2022 11:00:58 -0500
Subject: [PATCH AUTOSEL 6.1 41/85] drm/mediatek: Fix return type of mtk_hdmi_bridge_mode_valid()
In-Reply-To: <20221218160142.925394-1-sashal@kernel.org>
References: <20221218160142.925394-1-sashal@kernel.org>
Message-ID: <20221218160142.925394-41-sashal@kernel.org>

From: Nathan Chancellor <nathan at kernel.org>

[ Upstream commit 890d637523eec9d730e3885532fa1228ba678880 ]

With clang's kernel control flow integrity (kCFI, CONFIG_CFI_CLANG),
indirect call targets are validated against the expected function
pointer prototype to make sure the call target is valid to help mitigate
ROP attacks. If they are not identical, there is a failure at run time,
which manifests as either a kernel panic or thread getting killed. A
proposed warning in clang aims to catch these at compile time, which
reveals:

  drivers/gpu/drm/mediatek/mtk_hdmi.c:1407:16: error: incompatible function pointer types initializing 'enum drm_mode_status (*)(struct drm_bridge *, const struct drm_display_info *, const struct drm_display_mode *)' with an expression of type 'int (struct drm_bridge *, const struct drm_display_info *, const struct drm_display_mode *)' [-Werror,-Wincompatible-function-pointer-types-strict]
          .mode_valid = mtk_hdmi_bridge_mode_valid,
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

->mode_valid() in 'struct drm_bridge_funcs' expects a return type of
'enum drm_mode_status', not 'int'. Adjust the return type of
mtk_hdmi_bridge_mode_valid() to match the prototype's to resolve the
warning and CFI failure.

Link: https://github.com/ClangBuiltLinux/linux/issues/1750
Reported-by: Sami Tolvanen <samitolvanen at google.com>
Signed-off-by: Nathan Chancellor <nathan at kernel.org>
Reviewed-by: Kees Cook <keescook at chromium.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Signed-off-by: Chun-Kuang Hu <chunkuang.hu at kernel.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/gpu/drm/mediatek/mtk_hdmi.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
index 4c80b6896dc3..6e8f99554f54 100644
--- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
+++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
@@ -1202,9 +1202,10 @@ static enum drm_connector_status mtk_hdmi_detect(struct mtk_hdmi *hdmi)
 	return mtk_hdmi_update_plugged_status(hdmi);
 }
 
-static int mtk_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
-				      const struct drm_display_info *info,
-				      const struct drm_display_mode *mode)
+static enum drm_mode_status
+mtk_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
+			   const struct drm_display_info *info,
+			   const struct drm_display_mode *mode)
 {
 	struct mtk_hdmi *hdmi = hdmi_ctx_from_bridge(bridge);
 	struct drm_bridge *next_bridge;
-- 
2.35.1



From sashal at kernel.org  Sun Dec 18 08:01:08 2022
From: sashal at kernel.org (Sasha Levin)
Date: Sun, 18 Dec 2022 11:01:08 -0500
Subject: [PATCH AUTOSEL 6.1 51/85] net: ethernet: mtk_eth_soc: drop packets to WDMA if the ring is full
In-Reply-To: <20221218160142.925394-1-sashal@kernel.org>
References: <20221218160142.925394-1-sashal@kernel.org>
Message-ID: <20221218160142.925394-51-sashal@kernel.org>

From: Felix Fietkau <nbd at nbd.name>

[ Upstream commit f4b2fa2c25e1ade78f766aa82e733a0b5198d484 ]

Improves handling of DMA ring overflow.
Clarify other WDMA drop related comment.

Signed-off-by: Felix Fietkau <nbd at nbd.name>
Link: https://lore.kernel.org/r/20221116080734.44013-3-nbd at nbd.name
Signed-off-by: Jakub Kicinski <kuba at kernel.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 5 ++++-
 drivers/net/ethernet/mediatek/mtk_eth_soc.h | 1 +
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 1d36619c5ec9..e2c5ef21ad07 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3331,9 +3331,12 @@ static int mtk_hw_init(struct mtk_eth *eth)
 	mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
 
 	if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
-		/* PSE should not drop port8 and port9 packets */
+		/* PSE should not drop port8 and port9 packets from WDMA Tx */
 		mtk_w32(eth, 0x00000300, PSE_DROP_CFG);
 
+		/* PSE should drop packets to port 8/9 on WDMA Rx ring full */
+		mtk_w32(eth, 0x00000300, PSE_PPE0_DROP);
+
 		/* PSE Free Queue Flow Control  */
 		mtk_w32(eth, 0x01fa01f4, PSE_FQFC_CFG2);
 
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
index b52f3b0177ef..1292c3db7310 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -120,6 +120,7 @@
 #define PSE_FQFC_CFG1		0x100
 #define PSE_FQFC_CFG2		0x104
 #define PSE_DROP_CFG		0x108
+#define PSE_PPE0_DROP		0x110
 
 /* PSE Input Queue Reservation Register*/
 #define PSE_IQ_REV(x)		(0x140 + (((x) - 1) << 2))
-- 
2.35.1



From sashal at kernel.org  Sun Dec 18 08:01:18 2022
From: sashal at kernel.org (Sasha Levin)
Date: Sun, 18 Dec 2022 11:01:18 -0500
Subject: [PATCH AUTOSEL 6.1 61/85] media: mediatek: vcodec: Can't set dst buffer to done when lat decode error
In-Reply-To: <20221218160142.925394-1-sashal@kernel.org>
References: <20221218160142.925394-1-sashal@kernel.org>
Message-ID: <20221218160142.925394-61-sashal@kernel.org>

From: Yunfei Dong <yunfei.dong at mediatek.com>

[ Upstream commit 3568ecd3f3a6d133ab7feffbba34955c8c79bbc4 ]

Core thread will call v4l2_m2m_buf_done to set dst buffer done for
lat architecture. If lat call v4l2_m2m_buf_done_and_job_finish to
free dst buffer when lat decode error, core thread will access kernel
NULL pointer dereference, then crash.

Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco at xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab at kernel.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 .../media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
index c45bd2599bb2..f41a3ff17b04 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
@@ -250,7 +250,7 @@ static void mtk_vdec_worker(struct work_struct *work)
 
 	state = ret ? VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE;
 	if (!IS_VDEC_LAT_ARCH(dev->vdec_pdata->hw_arch) ||
-	    ctx->current_codec == V4L2_PIX_FMT_VP8_FRAME || ret) {
+	    ctx->current_codec == V4L2_PIX_FMT_VP8_FRAME) {
 		v4l2_m2m_buf_done_and_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx, state);
 		if (src_buf_req)
 			v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl);
-- 
2.35.1



From sashal at kernel.org  Sun Dec 18 08:01:28 2022
From: sashal at kernel.org (Sasha Levin)
Date: Sun, 18 Dec 2022 11:01:28 -0500
Subject: [PATCH AUTOSEL 6.1 71/85] wifi: mt76: do not run mt76u_status_worker if the device is not running
In-Reply-To: <20221218160142.925394-1-sashal@kernel.org>
References: <20221218160142.925394-1-sashal@kernel.org>
Message-ID: <20221218160142.925394-71-sashal@kernel.org>

From: Lorenzo Bianconi <lorenzo at kernel.org>

[ Upstream commit bd5dac7ced5a7c9faa4dc468ac9560c3256df845 ]

Fix the following NULL pointer dereference avoiding to run
mt76u_status_worker thread if the device is not running yet.

KASAN: null-ptr-deref in range
[0x0000000000000000-0x0000000000000007]
CPU: 0 PID: 98 Comm: kworker/u2:2 Not tainted 5.14.0+ #78 Hardware
name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org 04/01/2014
Workqueue: mt76 mt76u_tx_status_data
RIP: 0010:mt76x02_mac_fill_tx_status.isra.0+0x82c/0x9e0
Code: c5 48 b8 00 00 00 00 00 fc ff df 80 3c 02 00 0f 85 94 01 00 00
48 b8 00 00 00 00 00 fc ff df 4d 8b 34 24 4c 89 f2 48 c1 ea 03 <0f>
b6
04 02 84 c0 74 08 3c 03 0f 8e 89 01 00 00 41 8b 16 41 0f b7
RSP: 0018:ffffc900005af988 EFLAGS: 00010246
RAX: dffffc0000000000 RBX: ffffc900005afae8 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffffffff832fc661 RDI: ffffc900005afc2a
RBP: ffffc900005afae0 R08: 0000000000000001 R09: fffff520000b5f3c
R10: 0000000000000003 R11: fffff520000b5f3b R12: ffff88810b6132d8
R13: 000000000000ffff R14: 0000000000000000 R15: ffffc900005afc28
FS:  0000000000000000(0000) GS:ffff88811aa00000(0000)
knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fa0eda6a000 CR3: 0000000118f17000 CR4: 0000000000750ef0
PKRU: 55555554
Call Trace:
 mt76x02_send_tx_status+0x1d2/0xeb0
 mt76x02_tx_status_data+0x8e/0xd0
 mt76u_tx_status_data+0xe1/0x240
 process_one_work+0x92b/0x1460
 worker_thread+0x95/0xe00
 kthread+0x3a1/0x480
 ret_from_fork+0x1f/0x30
Modules linked in:
--[ end trace 8df5d20fc5040f65 ]--
RIP: 0010:mt76x02_mac_fill_tx_status.isra.0+0x82c/0x9e0
Code: c5 48 b8 00 00 00 00 00 fc ff df 80 3c 02 00 0f 85 94 01 00 00
48 b8 00 00 00 00 00 fc ff df 4d 8b 34 24 4c 89 f2 48 c1 ea 03 <0f>
b6
04 02 84 c0 74 08 3c 03 0f 8e 89 01 00 00 41 8b 16 41 0f b7
RSP: 0018:ffffc900005af988 EFLAGS: 00010246
RAX: dffffc0000000000 RBX: ffffc900005afae8 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffffffff832fc661 RDI: ffffc900005afc2a
RBP: ffffc900005afae0 R08: 0000000000000001 R09: fffff520000b5f3c
R10: 0000000000000003 R11: fffff520000b5f3b R12: ffff88810b6132d8
R13: 000000000000ffff R14: 0000000000000000 R15: ffffc900005afc28
FS:  0000000000000000(0000) GS:ffff88811aa00000(0000)
knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fa0eda6a000 CR3: 0000000118f17000 CR4: 0000000000750ef0
PKRU: 55555554

Moreover move stat_work schedule out of the for loop.

Reported-by: Dokyung Song <dokyungs at yonsei.ac.kr>
Co-developed-by: Deren Wu <deren.wu at mediatek.com>
Signed-off-by: Deren Wu <deren.wu at mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
Signed-off-by: Felix Fietkau <nbd at nbd.name>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/net/wireless/mediatek/mt76/usb.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c
index 4c4033bb1bb3..0597df2729a6 100644
--- a/drivers/net/wireless/mediatek/mt76/usb.c
+++ b/drivers/net/wireless/mediatek/mt76/usb.c
@@ -766,6 +766,9 @@ static void mt76u_status_worker(struct mt76_worker *w)
 	struct mt76_queue *q;
 	int i;
 
+	if (!test_bit(MT76_STATE_RUNNING, &dev->phy.state))
+		return;
+
 	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
 		q = dev->phy.q_tx[i];
 		if (!q)
@@ -785,11 +788,11 @@ static void mt76u_status_worker(struct mt76_worker *w)
 			wake_up(&dev->tx_wait);
 
 		mt76_worker_schedule(&dev->tx_worker);
-
-		if (dev->drv->tx_status_data &&
-		    !test_and_set_bit(MT76_READING_STATS, &dev->phy.state))
-			queue_work(dev->wq, &dev->usb.stat_work);
 	}
+
+	if (dev->drv->tx_status_data &&
+	    !test_and_set_bit(MT76_READING_STATS, &dev->phy.state))
+		queue_work(dev->wq, &dev->usb.stat_work);
 }
 
 static void mt76u_tx_status_data(struct work_struct *work)
-- 
2.35.1



From sashal at kernel.org  Sun Dec 18 08:07:03 2022
From: sashal at kernel.org (Sasha Levin)
Date: Sun, 18 Dec 2022 11:07:03 -0500
Subject: [PATCH AUTOSEL 6.0 35/73] drm/mediatek: Fix return type of mtk_hdmi_bridge_mode_valid()
In-Reply-To: <20221218160741.927862-1-sashal@kernel.org>
References: <20221218160741.927862-1-sashal@kernel.org>
Message-ID: <20221218160741.927862-35-sashal@kernel.org>

From: Nathan Chancellor <nathan at kernel.org>

[ Upstream commit 890d637523eec9d730e3885532fa1228ba678880 ]

With clang's kernel control flow integrity (kCFI, CONFIG_CFI_CLANG),
indirect call targets are validated against the expected function
pointer prototype to make sure the call target is valid to help mitigate
ROP attacks. If they are not identical, there is a failure at run time,
which manifests as either a kernel panic or thread getting killed. A
proposed warning in clang aims to catch these at compile time, which
reveals:

  drivers/gpu/drm/mediatek/mtk_hdmi.c:1407:16: error: incompatible function pointer types initializing 'enum drm_mode_status (*)(struct drm_bridge *, const struct drm_display_info *, const struct drm_display_mode *)' with an expression of type 'int (struct drm_bridge *, const struct drm_display_info *, const struct drm_display_mode *)' [-Werror,-Wincompatible-function-pointer-types-strict]
          .mode_valid = mtk_hdmi_bridge_mode_valid,
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

->mode_valid() in 'struct drm_bridge_funcs' expects a return type of
'enum drm_mode_status', not 'int'. Adjust the return type of
mtk_hdmi_bridge_mode_valid() to match the prototype's to resolve the
warning and CFI failure.

Link: https://github.com/ClangBuiltLinux/linux/issues/1750
Reported-by: Sami Tolvanen <samitolvanen at google.com>
Signed-off-by: Nathan Chancellor <nathan at kernel.org>
Reviewed-by: Kees Cook <keescook at chromium.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Signed-off-by: Chun-Kuang Hu <chunkuang.hu at kernel.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/gpu/drm/mediatek/mtk_hdmi.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
index 3196189429bc..7613b0fa2be6 100644
--- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
+++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
@@ -1203,9 +1203,10 @@ static enum drm_connector_status mtk_hdmi_detect(struct mtk_hdmi *hdmi)
 	return mtk_hdmi_update_plugged_status(hdmi);
 }
 
-static int mtk_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
-				      const struct drm_display_info *info,
-				      const struct drm_display_mode *mode)
+static enum drm_mode_status
+mtk_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
+			   const struct drm_display_info *info,
+			   const struct drm_display_mode *mode)
 {
 	struct mtk_hdmi *hdmi = hdmi_ctx_from_bridge(bridge);
 	struct drm_bridge *next_bridge;
-- 
2.35.1



From sashal at kernel.org  Sun Dec 18 08:07:13 2022
From: sashal at kernel.org (Sasha Levin)
Date: Sun, 18 Dec 2022 11:07:13 -0500
Subject: [PATCH AUTOSEL 6.0 45/73] net: ethernet: mtk_eth_soc: drop packets to WDMA if the ring is full
In-Reply-To: <20221218160741.927862-1-sashal@kernel.org>
References: <20221218160741.927862-1-sashal@kernel.org>
Message-ID: <20221218160741.927862-45-sashal@kernel.org>

From: Felix Fietkau <nbd at nbd.name>

[ Upstream commit f4b2fa2c25e1ade78f766aa82e733a0b5198d484 ]

Improves handling of DMA ring overflow.
Clarify other WDMA drop related comment.

Signed-off-by: Felix Fietkau <nbd at nbd.name>
Link: https://lore.kernel.org/r/20221116080734.44013-3-nbd at nbd.name
Signed-off-by: Jakub Kicinski <kuba at kernel.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 5 ++++-
 drivers/net/ethernet/mediatek/mtk_eth_soc.h | 1 +
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 5380caf0acc2..27e178599ffd 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3311,9 +3311,12 @@ static int mtk_hw_init(struct mtk_eth *eth)
 	mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
 
 	if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
-		/* PSE should not drop port8 and port9 packets */
+		/* PSE should not drop port8 and port9 packets from WDMA Tx */
 		mtk_w32(eth, 0x00000300, PSE_DROP_CFG);
 
+		/* PSE should drop packets to port 8/9 on WDMA Rx ring full */
+		mtk_w32(eth, 0x00000300, PSE_PPE0_DROP);
+
 		/* PSE Free Queue Flow Control  */
 		mtk_w32(eth, 0x01fa01f4, PSE_FQFC_CFG2);
 
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
index 0f9668a4079d..1c2a5fece126 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -121,6 +121,7 @@
 #define PSE_FQFC_CFG1		0x100
 #define PSE_FQFC_CFG2		0x104
 #define PSE_DROP_CFG		0x108
+#define PSE_PPE0_DROP		0x110
 
 /* PSE Input Queue Reservation Register*/
 #define PSE_IQ_REV(x)		(0x140 + (((x) - 1) << 2))
-- 
2.35.1



From sashal at kernel.org  Sun Dec 18 08:07:21 2022
From: sashal at kernel.org (Sasha Levin)
Date: Sun, 18 Dec 2022 11:07:21 -0500
Subject: [PATCH AUTOSEL 6.0 53/73] media: mediatek: vcodec: Can't set dst buffer to done when lat decode error
In-Reply-To: <20221218160741.927862-1-sashal@kernel.org>
References: <20221218160741.927862-1-sashal@kernel.org>
Message-ID: <20221218160741.927862-53-sashal@kernel.org>

From: Yunfei Dong <yunfei.dong at mediatek.com>

[ Upstream commit 3568ecd3f3a6d133ab7feffbba34955c8c79bbc4 ]

Core thread will call v4l2_m2m_buf_done to set dst buffer done for
lat architecture. If lat call v4l2_m2m_buf_done_and_job_finish to
free dst buffer when lat decode error, core thread will access kernel
NULL pointer dereference, then crash.

Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco at xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab at kernel.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 .../media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
index c45bd2599bb2..f41a3ff17b04 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
@@ -250,7 +250,7 @@ static void mtk_vdec_worker(struct work_struct *work)
 
 	state = ret ? VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE;
 	if (!IS_VDEC_LAT_ARCH(dev->vdec_pdata->hw_arch) ||
-	    ctx->current_codec == V4L2_PIX_FMT_VP8_FRAME || ret) {
+	    ctx->current_codec == V4L2_PIX_FMT_VP8_FRAME) {
 		v4l2_m2m_buf_done_and_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx, state);
 		if (src_buf_req)
 			v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl);
-- 
2.35.1



From sashal at kernel.org  Sun Dec 18 08:07:29 2022
From: sashal at kernel.org (Sasha Levin)
Date: Sun, 18 Dec 2022 11:07:29 -0500
Subject: [PATCH AUTOSEL 6.0 61/73] wifi: mt76: do not run mt76u_status_worker if the device is not running
In-Reply-To: <20221218160741.927862-1-sashal@kernel.org>
References: <20221218160741.927862-1-sashal@kernel.org>
Message-ID: <20221218160741.927862-61-sashal@kernel.org>

From: Lorenzo Bianconi <lorenzo at kernel.org>

[ Upstream commit bd5dac7ced5a7c9faa4dc468ac9560c3256df845 ]

Fix the following NULL pointer dereference avoiding to run
mt76u_status_worker thread if the device is not running yet.

KASAN: null-ptr-deref in range
[0x0000000000000000-0x0000000000000007]
CPU: 0 PID: 98 Comm: kworker/u2:2 Not tainted 5.14.0+ #78 Hardware
name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org 04/01/2014
Workqueue: mt76 mt76u_tx_status_data
RIP: 0010:mt76x02_mac_fill_tx_status.isra.0+0x82c/0x9e0
Code: c5 48 b8 00 00 00 00 00 fc ff df 80 3c 02 00 0f 85 94 01 00 00
48 b8 00 00 00 00 00 fc ff df 4d 8b 34 24 4c 89 f2 48 c1 ea 03 <0f>
b6
04 02 84 c0 74 08 3c 03 0f 8e 89 01 00 00 41 8b 16 41 0f b7
RSP: 0018:ffffc900005af988 EFLAGS: 00010246
RAX: dffffc0000000000 RBX: ffffc900005afae8 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffffffff832fc661 RDI: ffffc900005afc2a
RBP: ffffc900005afae0 R08: 0000000000000001 R09: fffff520000b5f3c
R10: 0000000000000003 R11: fffff520000b5f3b R12: ffff88810b6132d8
R13: 000000000000ffff R14: 0000000000000000 R15: ffffc900005afc28
FS:  0000000000000000(0000) GS:ffff88811aa00000(0000)
knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fa0eda6a000 CR3: 0000000118f17000 CR4: 0000000000750ef0
PKRU: 55555554
Call Trace:
 mt76x02_send_tx_status+0x1d2/0xeb0
 mt76x02_tx_status_data+0x8e/0xd0
 mt76u_tx_status_data+0xe1/0x240
 process_one_work+0x92b/0x1460
 worker_thread+0x95/0xe00
 kthread+0x3a1/0x480
 ret_from_fork+0x1f/0x30
Modules linked in:
--[ end trace 8df5d20fc5040f65 ]--
RIP: 0010:mt76x02_mac_fill_tx_status.isra.0+0x82c/0x9e0
Code: c5 48 b8 00 00 00 00 00 fc ff df 80 3c 02 00 0f 85 94 01 00 00
48 b8 00 00 00 00 00 fc ff df 4d 8b 34 24 4c 89 f2 48 c1 ea 03 <0f>
b6
04 02 84 c0 74 08 3c 03 0f 8e 89 01 00 00 41 8b 16 41 0f b7
RSP: 0018:ffffc900005af988 EFLAGS: 00010246
RAX: dffffc0000000000 RBX: ffffc900005afae8 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffffffff832fc661 RDI: ffffc900005afc2a
RBP: ffffc900005afae0 R08: 0000000000000001 R09: fffff520000b5f3c
R10: 0000000000000003 R11: fffff520000b5f3b R12: ffff88810b6132d8
R13: 000000000000ffff R14: 0000000000000000 R15: ffffc900005afc28
FS:  0000000000000000(0000) GS:ffff88811aa00000(0000)
knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fa0eda6a000 CR3: 0000000118f17000 CR4: 0000000000750ef0
PKRU: 55555554

Moreover move stat_work schedule out of the for loop.

Reported-by: Dokyung Song <dokyungs at yonsei.ac.kr>
Co-developed-by: Deren Wu <deren.wu at mediatek.com>
Signed-off-by: Deren Wu <deren.wu at mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
Signed-off-by: Felix Fietkau <nbd at nbd.name>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/net/wireless/mediatek/mt76/usb.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c
index 6b8964c19f50..446429f4d944 100644
--- a/drivers/net/wireless/mediatek/mt76/usb.c
+++ b/drivers/net/wireless/mediatek/mt76/usb.c
@@ -761,6 +761,9 @@ static void mt76u_status_worker(struct mt76_worker *w)
 	struct mt76_queue *q;
 	int i;
 
+	if (!test_bit(MT76_STATE_RUNNING, &dev->phy.state))
+		return;
+
 	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
 		q = dev->phy.q_tx[i];
 		if (!q)
@@ -780,11 +783,11 @@ static void mt76u_status_worker(struct mt76_worker *w)
 			wake_up(&dev->tx_wait);
 
 		mt76_worker_schedule(&dev->tx_worker);
-
-		if (dev->drv->tx_status_data &&
-		    !test_and_set_bit(MT76_READING_STATS, &dev->phy.state))
-			queue_work(dev->wq, &dev->usb.stat_work);
 	}
+
+	if (dev->drv->tx_status_data &&
+	    !test_and_set_bit(MT76_READING_STATS, &dev->phy.state))
+		queue_work(dev->wq, &dev->usb.stat_work);
 }
 
 static void mt76u_tx_status_data(struct work_struct *work)
-- 
2.35.1



From sashal at kernel.org  Sun Dec 18 08:12:22 2022
From: sashal at kernel.org (Sasha Levin)
Date: Sun, 18 Dec 2022 11:12:22 -0500
Subject: [PATCH AUTOSEL 5.15 24/46] drm/mediatek: Fix return type of mtk_hdmi_bridge_mode_valid()
In-Reply-To: <20221218161244.930785-1-sashal@kernel.org>
References: <20221218161244.930785-1-sashal@kernel.org>
Message-ID: <20221218161244.930785-24-sashal@kernel.org>

From: Nathan Chancellor <nathan at kernel.org>

[ Upstream commit 890d637523eec9d730e3885532fa1228ba678880 ]

With clang's kernel control flow integrity (kCFI, CONFIG_CFI_CLANG),
indirect call targets are validated against the expected function
pointer prototype to make sure the call target is valid to help mitigate
ROP attacks. If they are not identical, there is a failure at run time,
which manifests as either a kernel panic or thread getting killed. A
proposed warning in clang aims to catch these at compile time, which
reveals:

  drivers/gpu/drm/mediatek/mtk_hdmi.c:1407:16: error: incompatible function pointer types initializing 'enum drm_mode_status (*)(struct drm_bridge *, const struct drm_display_info *, const struct drm_display_mode *)' with an expression of type 'int (struct drm_bridge *, const struct drm_display_info *, const struct drm_display_mode *)' [-Werror,-Wincompatible-function-pointer-types-strict]
          .mode_valid = mtk_hdmi_bridge_mode_valid,
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

->mode_valid() in 'struct drm_bridge_funcs' expects a return type of
'enum drm_mode_status', not 'int'. Adjust the return type of
mtk_hdmi_bridge_mode_valid() to match the prototype's to resolve the
warning and CFI failure.

Link: https://github.com/ClangBuiltLinux/linux/issues/1750
Reported-by: Sami Tolvanen <samitolvanen at google.com>
Signed-off-by: Nathan Chancellor <nathan at kernel.org>
Reviewed-by: Kees Cook <keescook at chromium.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Signed-off-by: Chun-Kuang Hu <chunkuang.hu at kernel.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/gpu/drm/mediatek/mtk_hdmi.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
index 3196189429bc..7613b0fa2be6 100644
--- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
+++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
@@ -1203,9 +1203,10 @@ static enum drm_connector_status mtk_hdmi_detect(struct mtk_hdmi *hdmi)
 	return mtk_hdmi_update_plugged_status(hdmi);
 }
 
-static int mtk_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
-				      const struct drm_display_info *info,
-				      const struct drm_display_mode *mode)
+static enum drm_mode_status
+mtk_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
+			   const struct drm_display_info *info,
+			   const struct drm_display_mode *mode)
 {
 	struct mtk_hdmi *hdmi = hdmi_ctx_from_bridge(bridge);
 	struct drm_bridge *next_bridge;
-- 
2.35.1



From sashal at kernel.org  Sun Dec 18 08:12:40 2022
From: sashal at kernel.org (Sasha Levin)
Date: Sun, 18 Dec 2022 11:12:40 -0500
Subject: [PATCH AUTOSEL 5.15 42/46] wifi: mt76: do not run mt76u_status_worker if the device is not running
In-Reply-To: <20221218161244.930785-1-sashal@kernel.org>
References: <20221218161244.930785-1-sashal@kernel.org>
Message-ID: <20221218161244.930785-42-sashal@kernel.org>

From: Lorenzo Bianconi <lorenzo at kernel.org>

[ Upstream commit bd5dac7ced5a7c9faa4dc468ac9560c3256df845 ]

Fix the following NULL pointer dereference avoiding to run
mt76u_status_worker thread if the device is not running yet.

KASAN: null-ptr-deref in range
[0x0000000000000000-0x0000000000000007]
CPU: 0 PID: 98 Comm: kworker/u2:2 Not tainted 5.14.0+ #78 Hardware
name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org 04/01/2014
Workqueue: mt76 mt76u_tx_status_data
RIP: 0010:mt76x02_mac_fill_tx_status.isra.0+0x82c/0x9e0
Code: c5 48 b8 00 00 00 00 00 fc ff df 80 3c 02 00 0f 85 94 01 00 00
48 b8 00 00 00 00 00 fc ff df 4d 8b 34 24 4c 89 f2 48 c1 ea 03 <0f>
b6
04 02 84 c0 74 08 3c 03 0f 8e 89 01 00 00 41 8b 16 41 0f b7
RSP: 0018:ffffc900005af988 EFLAGS: 00010246
RAX: dffffc0000000000 RBX: ffffc900005afae8 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffffffff832fc661 RDI: ffffc900005afc2a
RBP: ffffc900005afae0 R08: 0000000000000001 R09: fffff520000b5f3c
R10: 0000000000000003 R11: fffff520000b5f3b R12: ffff88810b6132d8
R13: 000000000000ffff R14: 0000000000000000 R15: ffffc900005afc28
FS:  0000000000000000(0000) GS:ffff88811aa00000(0000)
knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fa0eda6a000 CR3: 0000000118f17000 CR4: 0000000000750ef0
PKRU: 55555554
Call Trace:
 mt76x02_send_tx_status+0x1d2/0xeb0
 mt76x02_tx_status_data+0x8e/0xd0
 mt76u_tx_status_data+0xe1/0x240
 process_one_work+0x92b/0x1460
 worker_thread+0x95/0xe00
 kthread+0x3a1/0x480
 ret_from_fork+0x1f/0x30
Modules linked in:
--[ end trace 8df5d20fc5040f65 ]--
RIP: 0010:mt76x02_mac_fill_tx_status.isra.0+0x82c/0x9e0
Code: c5 48 b8 00 00 00 00 00 fc ff df 80 3c 02 00 0f 85 94 01 00 00
48 b8 00 00 00 00 00 fc ff df 4d 8b 34 24 4c 89 f2 48 c1 ea 03 <0f>
b6
04 02 84 c0 74 08 3c 03 0f 8e 89 01 00 00 41 8b 16 41 0f b7
RSP: 0018:ffffc900005af988 EFLAGS: 00010246
RAX: dffffc0000000000 RBX: ffffc900005afae8 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffffffff832fc661 RDI: ffffc900005afc2a
RBP: ffffc900005afae0 R08: 0000000000000001 R09: fffff520000b5f3c
R10: 0000000000000003 R11: fffff520000b5f3b R12: ffff88810b6132d8
R13: 000000000000ffff R14: 0000000000000000 R15: ffffc900005afc28
FS:  0000000000000000(0000) GS:ffff88811aa00000(0000)
knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fa0eda6a000 CR3: 0000000118f17000 CR4: 0000000000750ef0
PKRU: 55555554

Moreover move stat_work schedule out of the for loop.

Reported-by: Dokyung Song <dokyungs at yonsei.ac.kr>
Co-developed-by: Deren Wu <deren.wu at mediatek.com>
Signed-off-by: Deren Wu <deren.wu at mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
Signed-off-by: Felix Fietkau <nbd at nbd.name>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/net/wireless/mediatek/mt76/usb.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c
index 1e9f60bb811a..b47343e321b8 100644
--- a/drivers/net/wireless/mediatek/mt76/usb.c
+++ b/drivers/net/wireless/mediatek/mt76/usb.c
@@ -814,6 +814,9 @@ static void mt76u_status_worker(struct mt76_worker *w)
 	struct mt76_queue *q;
 	int i;
 
+	if (!test_bit(MT76_STATE_RUNNING, &dev->phy.state))
+		return;
+
 	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
 		q = dev->phy.q_tx[i];
 		if (!q)
@@ -833,11 +836,11 @@ static void mt76u_status_worker(struct mt76_worker *w)
 			wake_up(&dev->tx_wait);
 
 		mt76_worker_schedule(&dev->tx_worker);
-
-		if (dev->drv->tx_status_data &&
-		    !test_and_set_bit(MT76_READING_STATS, &dev->phy.state))
-			queue_work(dev->wq, &dev->usb.stat_work);
 	}
+
+	if (dev->drv->tx_status_data &&
+	    !test_and_set_bit(MT76_READING_STATS, &dev->phy.state))
+		queue_work(dev->wq, &dev->usb.stat_work);
 }
 
 static void mt76u_tx_status_data(struct work_struct *work)
-- 
2.35.1



From xiangsheng.hou at mediatek.com  Sun Dec 18 18:40:16 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 19 Dec 2022 10:40:16 +0800
Subject: [PATCH v5 07/10] dt-bindings: mtd: Split ECC engine with rawnand controller
In-Reply-To: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221219024019.31974-8-xiangsheng.hou@mediatek.com>

Split MediaTek ECC engine with rawnand controller and convert to
YAML schema.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../bindings/mtd/mediatek,mtk-nfc.yaml        | 155 +++++++++++++++
 .../mtd/mediatek,nand-ecc-engine.yaml         |  62 ++++++
 .../devicetree/bindings/mtd/mtk-nand.txt      | 176 ------------------
 3 files changed, 217 insertions(+), 176 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
 delete mode 100644 Documentation/devicetree/bindings/mtd/mtk-nand.txt

diff --git a/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
new file mode 100644
index 000000000000..a6e7f123eda7
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
@@ -0,0 +1,155 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mtd/mediatek,mtk-nfc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek(MTK) SoCs raw NAND FLASH controller (NFC)
+
+maintainers:
+  - Xiangsheng Hou <xiangsheng.hou at mediatek.com>
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt2701-nfc
+      - mediatek,mt2712-nfc
+      - mediatek,mt7622-nfc
+
+  reg:
+    items:
+      - description: Base physical address and size of NFI.
+
+  interrupts:
+    items:
+      - description: NFI interrupt
+
+  clocks:
+    items:
+      - description: clock used for the controller
+      - description: clock used for the pad
+
+  clock-names:
+    items:
+      - const: nfi_clk
+      - const: pad_clk
+
+  ecc-engine:
+    description: device-tree node of the required ECC engine.
+    $ref: /schemas/types.yaml#/definitions/phandle
+
+patternProperties:
+  "^nand@[a-f0-9]$":
+    $ref: nand-chip.yaml#
+    unevaluatedProperties: false
+    properties:
+      reg:
+        maximum: 1
+      nand-on-flash-bbt: true
+      nand-ecc-mode:
+        const: hw
+
+allOf:
+  - $ref: nand-controller.yaml#
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: mediatek,mt2701-nfc
+    then:
+      patternProperties:
+        "^nand@[a-f0-9]$":
+          properties:
+            nand-ecc-step-size:
+              enum: [ 512, 1024 ]
+            nand-ecc-strength:
+              enum: [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36,
+                     40, 44, 48, 52, 56, 60]
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: mediatek,mt2712-nfc
+    then:
+      patternProperties:
+        "^nand@[a-f0-9]$":
+          properties:
+            nand-ecc-step-size:
+              enum: [ 512, 1024 ]
+            nand-ecc-strength:
+              enum: [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36,
+                     40, 44, 48, 52, 56, 60, 68, 72, 80]
+
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: mediatek,mt7622-nfc
+    then:
+      patternProperties:
+        "^nand@[a-f0-9]$":
+          properties:
+            nand-ecc-step-size:
+              const: 512
+            nand-ecc-strength:
+              enum: [4, 6, 8, 10, 12]
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+  - clock-names
+  - ecc-engine
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt2701-clk.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    soc {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        nand-controller at 1100d000 {
+            compatible = "mediatek,mt2701-nfc";
+            reg = <0 0x1100d000 0 0x1000>;
+            interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
+            clocks = <&pericfg CLK_PERI_NFI>,
+                     <&pericfg CLK_PERI_NFI_PAD>;
+            clock-names = "nfi_clk", "pad_clk";
+            ecc-engine = <&bch>;
+            #address-cells = <1>;
+            #size-cells = <0>;
+
+            nand at 0 {
+                reg = <0>;
+
+                nand-on-flash-bbt;
+                nand-ecc-mode = "hw";
+                nand-ecc-step-size = <1024>;
+                nand-ecc-strength = <24>;
+
+                partitions {
+                    compatible = "fixed-partitions";
+                    #address-cells = <1>;
+                    #size-cells = <1>;
+
+                    preloader at 0 {
+                        label = "pl";
+                        read-only;
+                        reg = <0x0 0x400000>;
+                    };
+                    android at 400000 {
+                        label = "android";
+                        reg = <0x400000 0x12c00000>;
+                    };
+                };
+            };
+        };
+    };
diff --git a/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
new file mode 100644
index 000000000000..b13d801eda76
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mtd/mediatek,nand-ecc-engine.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek(MTK) SoCs NAND ECC engine
+
+maintainers:
+  - Xiangsheng Hou <xiangsheng.hou at mediatek.com>
+
+description: |
+  MTK NAND ECC engine can cowork with MTK raw NAND and SPI NAND controller.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt2701-ecc
+      - mediatek,mt2712-ecc
+      - mediatek,mt7622-ecc
+
+  reg:
+    items:
+      - description: Base physical address and size of ECC.
+
+  interrupts:
+    items:
+      - description: ECC interrupt
+
+  clocks:
+    maxItems: 1
+
+  clock-names:
+    const: nfiecc_clk
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+  - clock-names
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/mt2701-clk.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    soc {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        bch: ecc at 1100e000 {
+            compatible = "mediatek,mt2701-ecc";
+            reg = <0 0x1100e000 0 0x1000>;
+            interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_LOW>;
+            clocks = <&pericfg CLK_PERI_NFI_ECC>;
+            clock-names = "nfiecc_clk";
+        };
+    };
diff --git a/Documentation/devicetree/bindings/mtd/mtk-nand.txt b/Documentation/devicetree/bindings/mtd/mtk-nand.txt
deleted file mode 100644
index 839ea2f93d04..000000000000
--- a/Documentation/devicetree/bindings/mtd/mtk-nand.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-MTK SoCs NAND FLASH controller (NFC) DT binding
-
-This file documents the device tree bindings for MTK SoCs NAND controllers.
-The functional split of the controller requires two drivers to operate:
-the nand controller interface driver and the ECC engine driver.
-
-The hardware description for both devices must be captured as device
-tree nodes.
-
-1) NFC NAND Controller Interface (NFI):
-=======================================
-
-The first part of NFC is NAND Controller Interface (NFI) HW.
-Required NFI properties:
-- compatible:			Should be one of
-				"mediatek,mt2701-nfc",
-				"mediatek,mt2712-nfc",
-				"mediatek,mt7622-nfc".
-- reg:				Base physical address and size of NFI.
-- interrupts:			Interrupts of NFI.
-- clocks:			NFI required clocks.
-- clock-names:			NFI clocks internal name.
-- ecc-engine:			Required ECC Engine node.
-- #address-cells:		NAND chip index, should be 1.
-- #size-cells:			Should be 0.
-
-Example:
-
-	nandc: nfi at 1100d000 {
-		compatible = "mediatek,mt2701-nfc";
-		reg = <0 0x1100d000 0 0x1000>;
-		interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
-		clocks = <&pericfg CLK_PERI_NFI>,
-			 <&pericfg CLK_PERI_NFI_PAD>;
-		clock-names = "nfi_clk", "pad_clk";
-		ecc-engine = <&bch>;
-		#address-cells = <1>;
-		#size-cells = <0>;
-        };
-
-Platform related properties, should be set in {platform_name}.dts:
-- children nodes:	NAND chips.
-
-Children nodes properties:
-- reg:			Chip Select Signal, default 0.
-			Set as reg = <0>, <1> when need 2 CS.
-Optional:
-- nand-on-flash-bbt:	Store BBT on NAND Flash.
-- nand-ecc-mode:	the NAND ecc mode (check driver for supported modes)
-- nand-ecc-step-size:	Number of data bytes covered by a single ECC step.
-			valid values:
-			512 and 1024 on mt2701 and mt2712.
-			512 only on mt7622.
-			1024 is recommended for large page NANDs.
-- nand-ecc-strength:	Number of bits to correct per ECC step.
-			The valid values that each controller supports:
-			mt2701: 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28,
-				32, 36, 40, 44, 48, 52, 56, 60.
-			mt2712: 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28,
-				32, 36, 40, 44, 48, 52, 56, 60, 68, 72, 80.
-			mt7622: 4, 6, 8, 10, 12, 14, 16.
-			The strength should be calculated as follows:
-			E = (S - F) * 8 / B
-			S = O / (P / Q)
-				E :	nand-ecc-strength.
-				S :	spare size per sector.
-				F :	FDM size, should be in the range [1,8].
-					It is used to store free oob data.
-				O :	oob size.
-				P :	page size.
-				Q :	nand-ecc-step-size.
-				B :	number of parity bits needed to correct
-					1 bitflip.
-					According to MTK NAND controller design,
-					this number depends on max ecc step size
-					that MTK NAND controller supports.
-					If max ecc step size supported is 1024,
-					then it should be always 14. And if max
-					ecc step size is 512, then it should be
-					always 13.
-			If the result does not match any one of the listed
-			choices above, please select the smaller valid value from
-			the list.
-			(otherwise the driver will do the adjustment at runtime)
-- pinctrl-names:	Default NAND pin GPIO setting name.
-- pinctrl-0:		GPIO setting node.
-
-Example:
-	&pio {
-		nand_pins_default: nanddefault {
-			pins_dat {
-				pinmux = <MT2701_PIN_111_MSDC0_DAT7__FUNC_NLD7>,
-					 <MT2701_PIN_112_MSDC0_DAT6__FUNC_NLD6>,
-					 <MT2701_PIN_114_MSDC0_DAT4__FUNC_NLD4>,
-					 <MT2701_PIN_118_MSDC0_DAT3__FUNC_NLD3>,
-					 <MT2701_PIN_121_MSDC0_DAT0__FUNC_NLD0>,
-					 <MT2701_PIN_120_MSDC0_DAT1__FUNC_NLD1>,
-					 <MT2701_PIN_113_MSDC0_DAT5__FUNC_NLD5>,
-					 <MT2701_PIN_115_MSDC0_RSTB__FUNC_NLD8>,
-					 <MT2701_PIN_119_MSDC0_DAT2__FUNC_NLD2>;
-				input-enable;
-				drive-strength = <MTK_DRIVE_8mA>;
-				bias-pull-up;
-			};
-
-			pins_we {
-				pinmux = <MT2701_PIN_117_MSDC0_CLK__FUNC_NWEB>;
-				drive-strength = <MTK_DRIVE_8mA>;
-				bias-pull-up = <MTK_PUPD_SET_R1R0_10>;
-			};
-
-			pins_ale {
-				pinmux = <MT2701_PIN_116_MSDC0_CMD__FUNC_NALE>;
-				drive-strength = <MTK_DRIVE_8mA>;
-				bias-pull-down = <MTK_PUPD_SET_R1R0_10>;
-			};
-		};
-	};
-
-	&nandc {
-		status = "okay";
-		pinctrl-names = "default";
-		pinctrl-0 = <&nand_pins_default>;
-		nand at 0 {
-			reg = <0>;
-			nand-on-flash-bbt;
-			nand-ecc-mode = "hw";
-			nand-ecc-strength = <24>;
-			nand-ecc-step-size = <1024>;
-		};
-	};
-
-NAND chip optional subnodes:
-- Partitions, see Documentation/devicetree/bindings/mtd/mtd.yaml
-
-Example:
-	nand at 0 {
-		partitions {
-			compatible = "fixed-partitions";
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			preloader at 0 {
-				label = "pl";
-				read-only;
-				reg = <0x00000000 0x00400000>;
-			};
-			android at 00400000 {
-				label = "android";
-				reg = <0x00400000 0x12c00000>;
-			};
-		};
-	};
-
-2) ECC Engine:
-==============
-
-Required BCH properties:
-- compatible:	Should be one of
-		"mediatek,mt2701-ecc",
-		"mediatek,mt2712-ecc",
-		"mediatek,mt7622-ecc".
-- reg:		Base physical address and size of ECC.
-- interrupts:	Interrupts of ECC.
-- clocks:	ECC required clocks.
-- clock-names:	ECC clocks internal name.
-
-Example:
-
-	bch: ecc at 1100e000 {
-		compatible = "mediatek,mt2701-ecc";
-		reg = <0 0x1100e000 0 0x1000>;
-		interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_LOW>;
-		clocks = <&pericfg CLK_PERI_NFI_ECC>;
-		clock-names = "nfiecc_clk";
-	};
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec 18 18:40:10 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 19 Dec 2022 10:40:10 +0800
Subject: [PATCH v5 01/10] spi: mtk-snfi: Change default page format to setup default setting
In-Reply-To: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221219024019.31974-2-xiangsheng.hou@mediatek.com>

Change default page format to setup default setting since the sector
size 1024 on MT7986 will lead to probe fail.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
---
 drivers/spi/spi-mtk-snfi.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index fa8412ba20e2..719fc6f53ab1 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -1430,8 +1430,7 @@ static int mtk_snand_probe(struct platform_device *pdev)
 
 	// setup an initial page format for ops matching page_cache_op template
 	// before ECC is called.
-	ret = mtk_snand_setup_pagefmt(ms, ms->caps->sector_size,
-				      ms->caps->spare_sizes[0]);
+	ret = mtk_snand_setup_pagefmt(ms, SZ_2K, SZ_64);
 	if (ret) {
 		dev_err(ms->dev, "failed to set initial page format\n");
 		goto disable_clk;
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec 18 18:40:19 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 19 Dec 2022 10:40:19 +0800
Subject: [PATCH v5 10/10] dt-bindings: mtd: mediatek,nand-ecc-engine: Add compatible for MT7986
In-Reply-To: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221219024019.31974-11-xiangsheng.hou@mediatek.com>

Add dt-bindings documentation of ECC for MediaTek MT7986 SoC
platform.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml        | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
index b13d801eda76..505baf1e8830 100644
--- a/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
+++ b/Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
@@ -18,6 +18,7 @@ properties:
       - mediatek,mt2701-ecc
       - mediatek,mt2712-ecc
       - mediatek,mt7622-ecc
+      - mediatek,mt7986-ecc
 
   reg:
     items:
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec 18 18:40:15 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 19 Dec 2022 10:40:15 +0800
Subject: [PATCH v5 06/10] dt-bindings: spi: mtk-snfi: Add read latch latency property
In-Reply-To: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221219024019.31974-7-xiangsheng.hou@mediatek.com>

Add mediatek,rx-latch-latency-ns property which adjust data read
latch latency in the unit of nanoseconds.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 .../devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml         | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
index bab23f1b11fd..1e5e89a693c3 100644
--- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
+++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
@@ -45,6 +45,9 @@ properties:
     description: device-tree node of the accompanying ECC engine.
     $ref: /schemas/types.yaml#/definitions/phandle
 
+  mediatek,rx-latch-latency-ns:
+    description: Data read latch latency, unit is nanoseconds.
+
 required:
   - compatible
   - reg
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec 18 18:40:12 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 19 Dec 2022 10:40:12 +0800
Subject: [PATCH v5 03/10] mtd: nand: ecc-mtk: Add ECC support fot MT7986 IC
In-Reply-To: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221219024019.31974-4-xiangsheng.hou@mediatek.com>

Add ECC support fot MT7986 IC, and change err_mask value with
GENMASK macro.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/mtd/nand/ecc-mtk.c | 28 +++++++++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/ecc-mtk.c b/drivers/mtd/nand/ecc-mtk.c
index 9f9b201fe706..c75bb8b80cc1 100644
--- a/drivers/mtd/nand/ecc-mtk.c
+++ b/drivers/mtd/nand/ecc-mtk.c
@@ -40,6 +40,10 @@
 #define ECC_IDLE_REG(op)	((op) == ECC_ENCODE ? ECC_ENCIDLE : ECC_DECIDLE)
 #define ECC_CTL_REG(op)		((op) == ECC_ENCODE ? ECC_ENCCON : ECC_DECCON)
 
+#define ECC_ERRMASK_MT7622	GENMASK(4, 0)
+#define ECC_ERRMASK_MT2701	GENMASK(5, 0)
+#define ECC_ERRMASK_MT2712	GENMASK(6, 0)
+
 struct mtk_ecc_caps {
 	u32 err_mask;
 	u32 err_shift;
@@ -79,6 +83,10 @@ static const u8 ecc_strength_mt7622[] = {
 	4, 6, 8, 10, 12
 };
 
+static const u8 ecc_strength_mt7986[] = {
+	4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24
+};
+
 enum mtk_ecc_regs {
 	ECC_ENCPAR00,
 	ECC_ENCIRQ_EN,
@@ -451,7 +459,7 @@ unsigned int mtk_ecc_get_parity_bits(struct mtk_ecc *ecc)
 EXPORT_SYMBOL(mtk_ecc_get_parity_bits);
 
 static const struct mtk_ecc_caps mtk_ecc_caps_mt2701 = {
-	.err_mask = 0x3f,
+	.err_mask = ECC_ERRMASK_MT2701,
 	.err_shift = 8,
 	.ecc_strength = ecc_strength_mt2701,
 	.ecc_regs = mt2701_ecc_regs,
@@ -462,7 +470,7 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt2701 = {
 };
 
 static const struct mtk_ecc_caps mtk_ecc_caps_mt2712 = {
-	.err_mask = 0x7f,
+	.err_mask = ECC_ERRMASK_MT2712,
 	.err_shift = 8,
 	.ecc_strength = ecc_strength_mt2712,
 	.ecc_regs = mt2712_ecc_regs,
@@ -473,7 +481,7 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt2712 = {
 };
 
 static const struct mtk_ecc_caps mtk_ecc_caps_mt7622 = {
-	.err_mask = 0x1f,
+	.err_mask = ECC_ERRMASK_MT7622,
 	.err_shift = 5,
 	.ecc_strength = ecc_strength_mt7622,
 	.ecc_regs = mt7622_ecc_regs,
@@ -483,6 +491,17 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt7622 = {
 	.pg_irq_sel = 0,
 };
 
+static const struct mtk_ecc_caps mtk_ecc_caps_mt7986 = {
+	.err_mask = ECC_ERRMASK_MT7622,
+	.err_shift = 8,
+	.ecc_strength = ecc_strength_mt7986,
+	.ecc_regs = mt2712_ecc_regs,
+	.num_ecc_strength = 11,
+	.ecc_mode_shift = 5,
+	.parity_bits = 14,
+	.pg_irq_sel = 1,
+};
+
 static const struct of_device_id mtk_ecc_dt_match[] = {
 	{
 		.compatible = "mediatek,mt2701-ecc",
@@ -493,6 +512,9 @@ static const struct of_device_id mtk_ecc_dt_match[] = {
 	}, {
 		.compatible = "mediatek,mt7622-ecc",
 		.data = &mtk_ecc_caps_mt7622,
+	}, {
+		.compatible = "mediatek,mt7986-ecc",
+		.data = &mtk_ecc_caps_mt7986,
 	},
 	{},
 };
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec 18 18:40:13 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 19 Dec 2022 10:40:13 +0800
Subject: [PATCH v5 04/10] dt-bindings: spi: mtk-snfi: Add compatible for MT7986
In-Reply-To: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221219024019.31974-5-xiangsheng.hou@mediatek.com>

Add dt-bindings documentation of SPI NAND controller
for MediaTek MT7986 SoC platform. And add optional
nfi_hclk property which is needed for MT7986.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 .../bindings/spi/mediatek,spi-mtk-snfi.yaml   | 51 +++++++++++++++----
 1 file changed, 42 insertions(+), 9 deletions(-)

diff --git a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
index 6e6e02c91780..bab23f1b11fd 100644
--- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
+++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
@@ -18,14 +18,12 @@ description: |
   using the accompanying ECC engine. There should be only one spi
   slave device following generic spi bindings.
 
-allOf:
-  - $ref: /schemas/spi/spi-controller.yaml#
-
 properties:
   compatible:
     enum:
       - mediatek,mt7622-snand
       - mediatek,mt7629-snand
+      - mediatek,mt7986-snand
 
   reg:
     items:
@@ -36,14 +34,12 @@ properties:
       - description: NFI interrupt
 
   clocks:
-    items:
-      - description: clock used for the controller
-      - description: clock used for the SPI bus
+    minItems: 2
+    maxItems: 3
 
   clock-names:
-    items:
-      - const: nfi_clk
-      - const: pad_clk
+    minItems: 2
+    maxItems: 3
 
   nand-ecc-engine:
     description: device-tree node of the accompanying ECC engine.
@@ -57,6 +53,43 @@ required:
   - clock-names
   - nand-ecc-engine
 
+allOf:
+  - $ref: /schemas/spi/spi-controller.yaml#
+  - if:
+      properties:
+        compatible:
+          enum:
+            - mediatek,mt7622-snand
+            - mediatek,mt7629-snand
+    then:
+      properties:
+        clocks:
+          items:
+            - description: clock used for the controller
+            - description: clock used for the SPI bus
+        clock-names:
+          items:
+            - const: nfi_clk
+            - const: pad_clk
+
+  - if:
+      properties:
+        compatible:
+          enum:
+            - mediatek,mt7986-snand
+    then:
+      properties:
+        clocks:
+          items:
+            - description: clock used for the controller
+            - description: clock used for the SPI bus
+            - description: clock used for the AHB bus
+        clock-names:
+          items:
+            - const: nfi_clk
+            - const: pad_clk
+            - const: nfi_hclk
+
 unevaluatedProperties: false
 
 examples:
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec 18 18:40:18 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 19 Dec 2022 10:40:18 +0800
Subject: [PATCH v5 09/10] arm: dts: mediatek: Fix existing NAND controller node name
In-Reply-To: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221219024019.31974-10-xiangsheng.hou@mediatek.com>

Change the existing node name in order to match NAND controller DT
bindings.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 arch/arm/boot/dts/mt2701.dtsi | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/mt2701.dtsi b/arch/arm/boot/dts/mt2701.dtsi
index b8eba3ba153c..049ed797766b 100644
--- a/arch/arm/boot/dts/mt2701.dtsi
+++ b/arch/arm/boot/dts/mt2701.dtsi
@@ -360,7 +360,7 @@ thermal: thermal at 1100b000 {
 		mediatek,apmixedsys = <&apmixedsys>;
 	};
 
-	nandc: nfi at 1100d000 {
+	nandc: nand-controller at 1100d000 {
 		compatible = "mediatek,mt2701-nfc";
 		reg = <0 0x1100d000 0 0x1000>;
 		interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec 18 18:40:11 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 19 Dec 2022 10:40:11 +0800
Subject: [PATCH v5 02/10] spi: mtk-snfi: Add optional nfi_hclk which is needed for MT7986
In-Reply-To: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221219024019.31974-3-xiangsheng.hou@mediatek.com>

Add optional nfi_hclk which is needed for MT7986.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/spi/spi-mtk-snfi.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index 719fc6f53ab1..85644308df23 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -297,6 +297,7 @@ struct mtk_snand {
 	struct device *dev;
 	struct clk *nfi_clk;
 	struct clk *pad_clk;
+	struct clk *nfi_hclk;
 	void __iomem *nfi_base;
 	int irq;
 	struct completion op_done;
@@ -1339,7 +1340,16 @@ static int mtk_snand_enable_clk(struct mtk_snand *ms)
 		dev_err(ms->dev, "unable to enable pad clk\n");
 		goto err1;
 	}
+	ret = clk_prepare_enable(ms->nfi_hclk);
+	if (ret) {
+		dev_err(ms->dev, "unable to enable nfi hclk\n");
+		goto err2;
+	}
+
 	return 0;
+
+err2:
+	clk_disable_unprepare(ms->pad_clk);
 err1:
 	clk_disable_unprepare(ms->nfi_clk);
 	return ret;
@@ -1347,6 +1357,7 @@ static int mtk_snand_enable_clk(struct mtk_snand *ms)
 
 static void mtk_snand_disable_clk(struct mtk_snand *ms)
 {
+	clk_disable_unprepare(ms->nfi_hclk);
 	clk_disable_unprepare(ms->pad_clk);
 	clk_disable_unprepare(ms->nfi_clk);
 }
@@ -1401,6 +1412,13 @@ static int mtk_snand_probe(struct platform_device *pdev)
 		goto release_ecc;
 	}
 
+	ms->nfi_hclk = devm_clk_get_optional(&pdev->dev, "nfi_hclk");
+	if (IS_ERR(ms->nfi_hclk)) {
+		ret = PTR_ERR(ms->nfi_hclk);
+		dev_err(&pdev->dev, "unable to get nfi_hclk, err = %d\n", ret);
+		goto release_ecc;
+	}
+
 	ret = mtk_snand_enable_clk(ms);
 	if (ret)
 		goto release_ecc;
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec 18 18:40:17 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 19 Dec 2022 10:40:17 +0800
Subject: [PATCH v5 08/10] arm64: dts: mediatek: Fix existing NAND controller node name
In-Reply-To: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221219024019.31974-9-xiangsheng.hou@mediatek.com>

Change the existing node name in order to match NAND controller DT
bindings.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 arch/arm64/boot/dts/mediatek/mt2712e.dtsi | 2 +-
 arch/arm64/boot/dts/mediatek/mt7622.dtsi  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt2712e.dtsi b/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
index 92212cddd37e..cfbec2a2ed9d 100644
--- a/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
@@ -560,7 +560,7 @@ spi0: spi at 1100a000 {
 		status = "disabled";
 	};
 
-	nandc: nfi at 1100e000 {
+	nandc: nand-controller at 1100e000 {
 		compatible = "mediatek,mt2712-nfc";
 		reg = <0 0x1100e000 0 0x1000>;
 		interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_LOW>;
diff --git a/arch/arm64/boot/dts/mediatek/mt7622.dtsi b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
index 146e18b5b1f4..d98aa4936092 100644
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
@@ -539,7 +539,7 @@ bluetooth {
 		};
 	};
 
-	nandc: nfi at 1100d000 {
+	nandc: nand-controller at 1100d000 {
 		compatible = "mediatek,mt7622-nfc";
 		reg = <0 0x1100D000 0 0x1000>;
 		interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_LOW>;
-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec 18 18:40:09 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 19 Dec 2022 10:40:09 +0800
Subject: [PATCH v5 00/10] Add MediaTek MT7986 SPI NAND and ECC support
Message-ID: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>

This patch series add MediaTek MT7986 SPI NAND and ECC controller
support, split ECC engine with rawnand controller in bindings and
change to YAML schema.

Changes since V4:
 - Split arm and arm64 dts patch for fix existing NAND controller node name.

Changes since V3:
 - Correct mediatek,mtk-nfc.yaml dt-bindings.

Changes since V2:
 - Change ECC err_mask value with GENMASK macro.
 - Change snfi mediatek,rx-latch-latency to mediatek,rx-latch-latency-ns.
 - Add a separate patch for DTS change.
 - Move common description to top-level pattern properties.
 - Drop redundant parts in dt-bindings.

Changes since V1:
 - Use existing sample delay property.
 - Add restricting for optional nfi_hclk.
 - Improve and perfect dt-bindings documentation.
 - Change existing node name to match NAND controller DT bingings.
 - Fix issues reported by dt_binding_check.
 - Fix issues reported by dtbs_check.

Xiangsheng Hou (10):
  spi: mtk-snfi: Change default page format to setup default setting
  spi: mtk-snfi: Add optional nfi_hclk which is needed for MT7986
  mtd: nand: ecc-mtk: Add ECC support fot MT7986 IC
  dt-bindings: spi: mtk-snfi: Add compatible for MT7986
  spi: mtk-snfi: Add snfi sample delay and read latency adjustment
  dt-bindings: spi: mtk-snfi: Add read latch latency property
  dt-bindings: mtd: Split ECC engine with rawnand controller
  arm64: dts: mediatek: Fix existing NAND controller node name
  arm: dts: mediatek: Fix existing NAND controller node name
  dt-bindings: mtd: mediatek,nand-ecc-engine: Add compatible for MT7986

 .../bindings/mtd/mediatek,mtk-nfc.yaml        | 155 +++++++++++++++
 .../mtd/mediatek,nand-ecc-engine.yaml         |  63 +++++++
 .../devicetree/bindings/mtd/mtk-nand.txt      | 176 ------------------
 .../bindings/spi/mediatek,spi-mtk-snfi.yaml   |  54 +++++-
 arch/arm/boot/dts/mt2701.dtsi                 |   2 +-
 arch/arm64/boot/dts/mediatek/mt2712e.dtsi     |   2 +-
 arch/arm64/boot/dts/mediatek/mt7622.dtsi      |   2 +-
 drivers/mtd/nand/ecc-mtk.c                    |  28 ++-
 drivers/spi/spi-mtk-snfi.c                    |  41 +++-
 9 files changed, 330 insertions(+), 193 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,mtk-nfc.yaml
 create mode 100644 Documentation/devicetree/bindings/mtd/mediatek,nand-ecc-engine.yaml
 delete mode 100644 Documentation/devicetree/bindings/mtd/mtk-nand.txt

-- 
2.25.1



From xiangsheng.hou at mediatek.com  Sun Dec 18 18:40:14 2022
From: xiangsheng.hou at mediatek.com (Xiangsheng Hou)
Date: Mon, 19 Dec 2022 10:40:14 +0800
Subject: [PATCH v5 05/10] spi: mtk-snfi: Add snfi sample delay and read latency adjustment
In-Reply-To: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
Message-ID: <20221219024019.31974-6-xiangsheng.hou@mediatek.com>

Add snfi sample delay and read latency adjustment which can get
from dts property.

Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/spi/spi-mtk-snfi.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index 85644308df23..f3f95eb37365 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -195,6 +195,8 @@
 #define DATA_READ_MODE_X4 2
 #define DATA_READ_MODE_DUAL 5
 #define DATA_READ_MODE_QUAD 6
+#define DATA_READ_LATCH_LAT GENMASK(9, 8)
+#define DATA_READ_LATCH_LAT_S 8
 #define PG_LOAD_CUSTOM_EN BIT(7)
 #define DATARD_CUSTOM_EN BIT(6)
 #define CS_DESELECT_CYC_S 0
@@ -205,6 +207,9 @@
 
 #define SNF_DLY_CTL3 0x548
 #define SFCK_SAM_DLY_S 0
+#define SFCK_SAM_DLY GENMASK(5, 0)
+#define SFCK_SAM_DLY_TOTAL 9
+#define SFCK_SAM_DLY_RANGE 47
 
 #define SNF_STA_CTL1 0x550
 #define CUS_PG_DONE BIT(28)
@@ -1368,6 +1373,8 @@ static int mtk_snand_probe(struct platform_device *pdev)
 	const struct of_device_id *dev_id;
 	struct spi_controller *ctlr;
 	struct mtk_snand *ms;
+	unsigned long spi_freq;
+	u32 val = 0;
 	int ret;
 
 	dev_id = of_match_node(mtk_snand_ids, np);
@@ -1446,6 +1453,19 @@ static int mtk_snand_probe(struct platform_device *pdev)
 	// switch to SNFI mode
 	nfi_write32(ms, SNF_CFG, SPI_MODE);
 
+	ret = of_property_read_u32(np, "rx-sample-delay-ns", &val);
+	if (!ret)
+		nfi_rmw32(ms, SNF_DLY_CTL3, SFCK_SAM_DLY,
+			  val * SFCK_SAM_DLY_RANGE / SFCK_SAM_DLY_TOTAL);
+
+	ret = of_property_read_u32(np, "mediatek,rx-latch-latency-ns", &val);
+	if (!ret) {
+		spi_freq = clk_get_rate(ms->pad_clk);
+		val = DIV_ROUND_CLOSEST(val, NSEC_PER_SEC / spi_freq);
+		nfi_rmw32(ms, SNF_MISC_CTL, DATA_READ_LATCH_LAT,
+			  val << DATA_READ_LATCH_LAT_S);
+	}
+
 	// setup an initial page format for ops matching page_cache_op template
 	// before ECC is called.
 	ret = mtk_snand_setup_pagefmt(ms, SZ_2K, SZ_64);
-- 
2.25.1



From bo.jiao at mediatek.com  Sun Dec 18 20:48:04 2022
From: bo.jiao at mediatek.com (Bo Jiao)
Date: Mon, 19 Dec 2022 12:48:04 +0800
Subject: [PATCH v2] wifi: mt76: fix potential memory leakage
Message-ID: <0a218783098a6b1b90ff120c7182acee93dc8feb.1671423784.git.Bo.Jiao@mediatek.com>

From: Bo Jiao <Bo.Jiao at mediatek.com>

fix potential memory leakage, recycle rxwi when mt76_dma_add_buf() call fail.

Signed-off-by: Bo Jiao <Bo.Jiao at mediatek.com>
---
v2:
- recycle rxwi when page_frag_alloc() and dma_map_single() fail.
---
 drivers/net/wireless/mediatek/mt76/dma.c | 27 ++++++++++++++----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
index fc24b35..76ad47d 100644
--- a/drivers/net/wireless/mediatek/mt76/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/dma.c
@@ -580,24 +580,29 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
 
 		buf = page_frag_alloc(&q->rx_page, q->buf_size, GFP_ATOMIC);
 		if (!buf)
-			break;
+			goto out;
 
 		addr = dma_map_single(dev->dma_dev, buf, len, DMA_FROM_DEVICE);
-		if (unlikely(dma_mapping_error(dev->dma_dev, addr))) {
-			skb_free_frag(buf);
-			break;
-		}
+		if (unlikely(dma_mapping_error(dev->dma_dev, addr)))
+			goto free;
 
 		qbuf.addr = addr + offset;
 		qbuf.len = len - offset;
 		qbuf.skip_unmap = false;
-		if (mt76_dma_add_buf(dev, q, &qbuf, 1, 0, buf, t) < 0) {
-			dma_unmap_single(dev->dma_dev, addr, len,
-					 DMA_FROM_DEVICE);
-			skb_free_frag(buf);
-			break;
-		}
+		if (mt76_dma_add_buf(dev, q, &qbuf, 1, 0, buf, t) < 0)
+			goto umap;
+
 		frames++;
+		continue;
+
+umap:
+		dma_unmap_single(dev->dma_dev, addr, len,
+				 DMA_FROM_DEVICE);
+free:
+		skb_free_frag(buf);
+out:
+		mt76_put_rxwi(dev, t);
+		break;
 	}
 
 	if (frames)
-- 
2.18.0



From Trevor.Wu at mediatek.com  Sun Dec 18 21:35:30 2022
From: Trevor.Wu at mediatek.com (=?utf-8?B?VHJldm9yIFd1ICjlkLPmlofoia8p?=)
Date: Mon, 19 Dec 2022 05:35:30 +0000
Subject: [PATCH v3 10/12] dt-bindings: mediatek: mt8188: add audio afe
 document
In-Reply-To: <dd2a373e-d3a7-cec9-6608-379d61f4228f@linaro.org>
References: <20221208033148.21866-1-trevor.wu@mediatek.com>
	 <20221208033148.21866-11-trevor.wu@mediatek.com>
	 <d7d9f3c7-b3e3-1e13-a80f-c7bf7b38a5b1@linaro.org>
	 <45b4b287dfd57b99e0ba5675bf99194f6d84d9da.camel@mediatek.com>
	 <fb34e446-2904-a357-e54b-3e82a2b0745c@linaro.org>
	 <e08fab2a694313abc12e0f8303de3e2e704b388c.camel@mediatek.com>
	 <e20884d2-5d30-9519-d070-8e2ac07f2171@linaro.org>
	 <6eae5d7eef22443b6152c6655c89bdfd70e59089.camel@mediatek.com>
	 <dd2a373e-d3a7-cec9-6608-379d61f4228f@linaro.org>
Message-ID: <ef251dd7c70a262c5144da3008ea7509f2a35a59.camel@mediatek.com>

On Wed, 2022-12-14 at 13:02 +0100, Krzysztof Kozlowski wrote:
> On 13/12/2022 16:06, Trevor Wu (???) wrote:
> > On Mon, 2022-12-12 at 09:40 +0100, Krzysztof Kozlowski wrote:
> > > On 12/12/2022 03:43, Trevor Wu (???) wrote:
> > > > > > 
> > > > > > > > +    uniqueItems: true
> > > > > > > > +    items:
> > > > > > > > +      minimum: 0
> > > > > > > > +      maximum: 15
> > > > > > > > +
> > > > > > > > +  "^mediatek,etdm-in[1-2]-mclk-always-on-rate-hz$":
> > > > > > > > +    description: Specify etdm in mclk output rate for
> > > > > > > > always
> > > > > > > > on
> > > > > > > > case.
> > > > > > > 
> > > > > > > How is it different than assigned-clock-rates?
> > > > > > > 
> > > > > > 
> > > > > > This includes clock enabling at init stage.
> > > > > 
> > > > > assigned-clock-rates are also at init stage. I asked what is
> > > > > different.
> > > > > 
> > > > 
> > > > If the property is used, there are three parts included in dai
> > > > driver
> > > > probe function.
> > > > 
> > > > 1. set clock parent (which APLL)
> > > > 2. set clock rate (MCLK rate)
> > > > 3. enable clock (MCLK On)
> > > > 
> > > > The first two parts can be done by existing dts clock
> > > > properties,
> > > > but
> > > > the last one can't.
> > > > When MCLK should be enabled at boot time and kept on, this
> > > > property
> > > > is used. That's why I say the property is designed for always-
> > > > on
> > > > case.
> > > 
> > > Heh, so the "always on case" means this property enables clock?
> > > How
> > > is
> > > this even DT property? That's not how clocks should be kept
> > > enabled.
> > > You
> > > need proper clock provider and consumer.
> > > 
> > > 
> > 
> > Hi Krzysztof,
> > 
> > Sorry, I don't know it is not appropriate to notify driver that the
> > clock should be ketp enabled after boot.
> > 
> > The original idea is that enabling this clock in the machine
> > driver,
> > but a property to inform machine driver is also required when the
> > machine driver is shared by different codec combination. And it's
> > easier to handle set_rate and set_parent in etdm dai driver, so I
> > put
> > the property here.
> > 
> > Do you mean if the clock consumer(audio codec or external DSP)
> > requries
> > the clock, the consumer should enable the clock by itself?
> 
> Yes, your clocks should have consumers and they keep the clock
> enabled
> when needed. Certain clocks can be marked as IGNORE or CRITICAL to
> keep
> enabled without consumers (or even when consumers disable), but
> that's
> still not a DT property.
> 
> 
Hi Krzysztof,

Got it. If the implementation is not suggested, I will drop the
property in V4 and ask consumer to use existing clock property with
clock control API instead when we have such case.

Thanks,
Trevor



> 

From yunfei.dong at mediatek.com  Sun Dec 18 22:43:32 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Mon, 19 Dec 2022 14:43:32 +0800
Subject: [PATCH v2,7/7] media: mediatek: vcodec: change lat thread decode error condition
In-Reply-To: <20221219064332.2124-1-yunfei.dong@mediatek.com>
References: <20221219064332.2124-1-yunfei.dong@mediatek.com>
Message-ID: <20221219064332.2124-8-yunfei.dong@mediatek.com>

If lat thread can't get lat buffer, it should be that current instance
don't be schedulded, the driver can't free the src buffer directly.

Fixes: 7b182b8d9c85 ("media: mediatek: vcodec: Refactor get and put capture buffer flow")
Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 .../platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c     | 6 ++++--
 .../platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c  | 2 +-
 .../platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c     | 2 +-
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
index ffbcee04dc26..04beb3f08eea 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
@@ -258,8 +258,10 @@ static void mtk_vdec_worker(struct work_struct *work)
 		if (src_buf_req)
 			v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl);
 	} else {
-		v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
-		v4l2_m2m_buf_done(vb2_v4l2_src, state);
+		if (ret != -EAGAIN) {
+			v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
+			v4l2_m2m_buf_done(vb2_v4l2_src, state);
+		}
 		v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx);
 	}
 }
diff --git a/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c b/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
index 8f262e86bb05..07774b6a3dbd 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
@@ -574,7 +574,7 @@ static int vdec_h264_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
 	lat_buf = vdec_msg_queue_dqbuf(&inst->ctx->msg_queue.lat_ctx);
 	if (!lat_buf) {
 		mtk_vcodec_err(inst, "failed to get lat buffer");
-		return -EINVAL;
+		return -EAGAIN;
 	}
 	share_info = lat_buf->private_data;
 	src_buf_info = container_of(bs, struct mtk_video_dec_buf, bs_buffer);
diff --git a/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c b/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
index cbb6728b8a40..cf16cf2807f0 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
@@ -2070,7 +2070,7 @@ static int vdec_vp9_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
 	lat_buf = vdec_msg_queue_dqbuf(&instance->ctx->msg_queue.lat_ctx);
 	if (!lat_buf) {
 		mtk_vcodec_err(instance, "Failed to get VP9 lat buf\n");
-		return -EBUSY;
+		return -EAGAIN;
 	}
 	pfc = (struct vdec_vp9_slice_pfc *)lat_buf->private_data;
 	if (!pfc) {
-- 
2.25.1



From yunfei.dong at mediatek.com  Sun Dec 18 22:43:32 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Mon, 19 Dec 2022 14:43:32 +0800
Subject: [PATCH v2,7/7] media: mediatek: vcodec: change lat thread decode error condition
In-Reply-To: <20221219064332.2124-1-yunfei.dong@mediatek.com>
References: <20221219064332.2124-1-yunfei.dong@mediatek.com>
Message-ID: <20221219064332.2124-8-yunfei.dong@mediatek.com>

If lat thread can't get lat buffer, it should be that current instance
don't be schedulded, the driver can't free the src buffer directly.

Fixes: 7b182b8d9c85 ("media: mediatek: vcodec: Refactor get and put capture buffer flow")
Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 .../platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c     | 6 ++++--
 .../platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c  | 2 +-
 .../platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c     | 2 +-
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
index ffbcee04dc26..04beb3f08eea 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
@@ -258,8 +258,10 @@ static void mtk_vdec_worker(struct work_struct *work)
 		if (src_buf_req)
 			v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl);
 	} else {
-		v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
-		v4l2_m2m_buf_done(vb2_v4l2_src, state);
+		if (ret != -EAGAIN) {
+			v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
+			v4l2_m2m_buf_done(vb2_v4l2_src, state);
+		}
 		v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx);
 	}
 }
diff --git a/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c b/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
index 8f262e86bb05..07774b6a3dbd 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
@@ -574,7 +574,7 @@ static int vdec_h264_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
 	lat_buf = vdec_msg_queue_dqbuf(&inst->ctx->msg_queue.lat_ctx);
 	if (!lat_buf) {
 		mtk_vcodec_err(inst, "failed to get lat buffer");
-		return -EINVAL;
+		return -EAGAIN;
 	}
 	share_info = lat_buf->private_data;
 	src_buf_info = container_of(bs, struct mtk_video_dec_buf, bs_buffer);
diff --git a/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c b/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
index cbb6728b8a40..cf16cf2807f0 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
@@ -2070,7 +2070,7 @@ static int vdec_vp9_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
 	lat_buf = vdec_msg_queue_dqbuf(&instance->ctx->msg_queue.lat_ctx);
 	if (!lat_buf) {
 		mtk_vcodec_err(instance, "Failed to get VP9 lat buf\n");
-		return -EBUSY;
+		return -EAGAIN;
 	}
 	pfc = (struct vdec_vp9_slice_pfc *)lat_buf->private_data;
 	if (!pfc) {
-- 
2.25.1



From yunfei.dong at mediatek.com  Sun Dec 18 22:43:29 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Mon, 19 Dec 2022 14:43:29 +0800
Subject: [PATCH v2,4/7] media: mediatek: vcodec: add core decode done event
In-Reply-To: <20221219064332.2124-1-yunfei.dong@mediatek.com>
References: <20221219064332.2124-1-yunfei.dong@mediatek.com>
Message-ID: <20221219064332.2124-5-yunfei.dong@mediatek.com>

Need to make sure core decode done before current instance is free.

Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c | 4 +++-
 drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h | 2 ++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
index ed526ff0ade6..1491796f7d39 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
@@ -191,7 +191,7 @@ bool vdec_msg_queue_wait_lat_buf_full(struct vdec_msg_queue *msg_queue)
 	spin_unlock(&core_ctx->ready_lock);
 
 	timeout_jiff = msecs_to_jiffies(1000 * (NUM_BUFFER_COUNT + 2));
-	ret = wait_event_timeout(msg_queue->lat_ctx.ready_to_use,
+	ret = wait_event_timeout(msg_queue->ctx->msg_queue.core_dec_done,
 				 msg_queue->lat_ctx.ready_num == NUM_BUFFER_COUNT,
 				 timeout_jiff);
 	if (ret) {
@@ -252,6 +252,7 @@ static void vdec_msg_queue_core_work(struct work_struct *work)
 	mtk_vcodec_dec_disable_hardware(ctx, MTK_VDEC_CORE);
 	vdec_msg_queue_qbuf(&ctx->msg_queue.lat_ctx, lat_buf);
 
+	wake_up_all(&ctx->msg_queue.core_dec_done);
 	if (atomic_read(&lat_buf->ctx->msg_queue.core_list_cnt)) {
 		mtk_v4l2_debug(3, "re-schedule to decode for core: %d",
 			       dev->msg_queue_core_ctx.ready_num);
@@ -276,6 +277,7 @@ int vdec_msg_queue_init(struct vdec_msg_queue *msg_queue,
 
 	atomic_set(&msg_queue->lat_list_cnt, 0);
 	atomic_set(&msg_queue->core_list_cnt, 0);
+	init_waitqueue_head(&msg_queue->core_dec_done);
 
 	msg_queue->wdma_addr.size =
 		vde_msg_queue_get_trans_size(ctx->picinfo.buf_w,
diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
index 56280d6682c5..a75c04418f52 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
@@ -76,6 +76,7 @@ struct vdec_lat_buf {
  *
  * @lat_list_cnt: used to record each instance lat list count
  * @core_list_cnt: used to record each instance core list count
+ * @core_dec_done: core work queue decode done event
  */
 struct vdec_msg_queue {
 	struct vdec_lat_buf lat_buf[NUM_BUFFER_COUNT];
@@ -90,6 +91,7 @@ struct vdec_msg_queue {
 
 	atomic_t lat_list_cnt;
 	atomic_t core_list_cnt;
+	wait_queue_head_t core_dec_done;
 };
 
 /**
-- 
2.25.1



From yunfei.dong at mediatek.com  Sun Dec 18 22:43:30 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Mon, 19 Dec 2022 14:43:30 +0800
Subject: [PATCH v2,5/7] media: mediatek: vcodec: remove unused lat_buf
In-Reply-To: <20221219064332.2124-1-yunfei.dong@mediatek.com>
References: <20221219064332.2124-1-yunfei.dong@mediatek.com>
Message-ID: <20221219064332.2124-6-yunfei.dong@mediatek.com>

Remove unused lat_buf from core list, or leading to core list access
NULL point.

Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 .../platform/mediatek/vcodec/vdec_msg_queue.c  | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
index 1491796f7d39..0255b8385bfc 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
@@ -177,7 +177,7 @@ bool vdec_msg_queue_wait_lat_buf_full(struct vdec_msg_queue *msg_queue)
 	struct vdec_lat_buf *buf, *tmp;
 	struct vdec_msg_queue_ctx *core_ctx;
 	long timeout_jiff;
-	int ret;
+	int ret, count = 0;
 
 	core_ctx = &msg_queue->ctx->dev->msg_queue_core_ctx;
 	spin_lock(&core_ctx->ready_lock);
@@ -199,8 +199,20 @@ bool vdec_msg_queue_wait_lat_buf_full(struct vdec_msg_queue *msg_queue)
 			       msg_queue->lat_ctx.ready_num);
 		return true;
 	}
-	mtk_v4l2_err("failed with lat buf isn't full: %d",
-		     msg_queue->lat_ctx.ready_num);
+
+	spin_lock(&core_ctx->ready_lock);
+	list_for_each_entry_safe(buf, tmp, &core_ctx->ready_queue, core_list) {
+		if (buf && buf->ctx == msg_queue->ctx) {
+			count++;
+			list_del(&buf->core_list);
+		}
+	}
+	spin_unlock(&core_ctx->ready_lock);
+
+	mtk_v4l2_err("failed with lat buf isn't full: list(%d %d) count:%d",
+		     atomic_read(&msg_queue->lat_list_cnt),
+		     atomic_read(&msg_queue->core_list_cnt), count);
+
 	return false;
 }
 
-- 
2.25.1



From yunfei.dong at mediatek.com  Sun Dec 18 23:00:40 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Mon, 19 Dec 2022 15:00:40 +0800
Subject: [PATCH] media: mediatek: vcodec: Using pm_runtime_put instead of pm_runtime_put_sync
Message-ID: <20221219070040.2434-1-yunfei.dong@mediatek.com>

pm_runtime_put will set RPM_ASYNC flag then queue an idle-notification
request again, won't return error immediately until current request is
scheduled. But pm_runtime_put_sync run the ->runtime_idle() callback
directly, will return error immediately.

Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_pm.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_pm.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_pm.c
index 4305e4eb9900..341b406f5272 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_pm.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_pm.c
@@ -72,9 +72,9 @@ static void mtk_vcodec_dec_pw_off(struct mtk_vcodec_pm *pm)
 {
 	int ret;
 
-	ret = pm_runtime_put_sync(pm->dev);
+	ret = pm_runtime_put(pm->dev);
 	if (ret)
-		mtk_v4l2_err("pm_runtime_put_sync fail %d", ret);
+		mtk_v4l2_err("pm_runtime_put fail %d", ret);
 }
 
 static void mtk_vcodec_dec_clock_on(struct mtk_vcodec_pm *pm)
-- 
2.25.1



From yunfei.dong at mediatek.com  Sun Dec 18 22:43:27 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Mon, 19 Dec 2022 14:43:27 +0800
Subject: [PATCH v2,2/7] media: mediatek: vcodec: using each instance lat_buf count replace core ready list
In-Reply-To: <20221219064332.2124-1-yunfei.dong@mediatek.com>
References: <20221219064332.2124-1-yunfei.dong@mediatek.com>
Message-ID: <20221219064332.2124-3-yunfei.dong@mediatek.com>

Core Hardware decoder depends on each instance lat_buf count,
calling queue_work decode again when the lat_buf count of each instance
isn't zero.

Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
index 3f016c87d722..ad5002ca953e 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
@@ -239,7 +239,7 @@ static void vdec_msg_queue_core_work(struct work_struct *work)
 	mtk_vcodec_dec_disable_hardware(ctx, MTK_VDEC_CORE);
 	vdec_msg_queue_qbuf(&ctx->msg_queue.lat_ctx, lat_buf);
 
-	if (!list_empty(&dev->msg_queue_core_ctx.ready_queue)) {
+	if (atomic_read(&lat_buf->ctx->msg_queue.core_list_cnt)) {
 		mtk_v4l2_debug(3, "re-schedule to decode for core: %d",
 			       dev->msg_queue_core_ctx.ready_num);
 		queue_work(dev->core_workqueue, &msg_queue->core_work);
-- 
2.25.1



From yunfei.dong at mediatek.com  Sun Dec 18 22:43:25 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Mon, 19 Dec 2022 14:43:25 +0800
Subject: [PATCH v2,0/7] media: mediatek: vcodec: Fix power_VideoCall test fail
Message-ID: <20221219064332.2124-1-yunfei.dong@mediatek.com>

Random getting below error message when test power_VideoCall/control.49_vp9:
pc : __list_del_entry_valid+0xb0/0xfc
lr : __list_del_entry_valid+0xac/0xfc

The lat_buf in core list won't be deleted when one instance decode done.
Will access invalid released lat_buf list when queue work continue to decode.
Firstly, remove all unused lat_buf to the top of core list, making sure
these buffers can be decoded in highest priority; lastly, remove all unused
lat_buf when the instance is freed.

patch 1 add params to record lat and core lat_buf count.
patch 2 using each instance lat_buf count replace core ready list.
patch 3 move lat_buf to the top of core list.
patch 4 add core decode done event.
patch 5 remove unused lat_buf.
patch 6 making sure queue_work successfully
patch 7 change lat thread decode error condition
---
changed with v1:
- remove mutex for atomic for patch 1
- add patch 6 to make sure queue_work successfully
- add patch 7 change lat thread decode error condition
---
Yunfei Dong (7):
  media: mediatek: vcodec: add params to record lat and core lat_buf
    count
  media: mediatek: vcodec: using each instance lat_buf count replace
    core ready list
  media: mediatek: vcodec: move lat_buf to the top of core list
  media: mediatek: vcodec: add core decode done event
  media: mediatek: vcodec: remove unused lat_buf
  media: mediatek: vcodec: making sure queue_work successfully
  media: mediatek: vcodec: change lat thread decode error condition

 .../vcodec/mtk_vcodec_dec_stateless.c         |  6 +-
 .../vcodec/vdec/vdec_h264_req_multi_if.c      |  2 +-
 .../vcodec/vdec/vdec_vp9_req_lat_if.c         |  2 +-
 .../platform/mediatek/vcodec/vdec_msg_queue.c | 89 ++++++++++++++++---
 .../platform/mediatek/vcodec/vdec_msg_queue.h | 12 +++
 5 files changed, 94 insertions(+), 17 deletions(-)

-- 
2.25.1



From yunfei.dong at mediatek.com  Sun Dec 18 22:43:26 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Mon, 19 Dec 2022 14:43:26 +0800
Subject: [PATCH v2,1/7] media: mediatek: vcodec: add params to record lat and core lat_buf count
In-Reply-To: <20221219064332.2124-1-yunfei.dong@mediatek.com>
References: <20221219064332.2124-1-yunfei.dong@mediatek.com>
Message-ID: <20221219064332.2124-2-yunfei.dong@mediatek.com>

Using lat_buf to share decoder information between lat and core work
queue, adding params to record the buf count.

Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
- remove the mutex for atomic
- for there are only lat and core, no need to use hardware_index for every hardware.
---
 .../platform/mediatek/vcodec/vdec_msg_queue.c | 23 ++++++++++++++++++-
 .../platform/mediatek/vcodec/vdec_msg_queue.h |  6 +++++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
index dc2004790a47..3f016c87d722 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
@@ -52,6 +52,22 @@ static struct list_head *vdec_get_buf_list(int hardware_index, struct vdec_lat_b
 	}
 }
 
+static void vdec_msg_queue_inc(struct vdec_msg_queue *msg_queue, int hardware_index)
+{
+	if (hardware_index == MTK_VDEC_CORE)
+		atomic_inc(&msg_queue->core_list_cnt);
+	else
+		atomic_inc(&msg_queue->lat_list_cnt);
+}
+
+static void vdec_msg_queue_dec(struct vdec_msg_queue *msg_queue, int hardware_index)
+{
+	if (hardware_index == MTK_VDEC_CORE)
+		atomic_dec(&msg_queue->core_list_cnt);
+	else
+		atomic_dec(&msg_queue->lat_list_cnt);
+}
+
 int vdec_msg_queue_qbuf(struct vdec_msg_queue_ctx *msg_ctx, struct vdec_lat_buf *buf)
 {
 	struct list_head *head;
@@ -66,6 +82,7 @@ int vdec_msg_queue_qbuf(struct vdec_msg_queue_ctx *msg_ctx, struct vdec_lat_buf
 	list_add_tail(head, &msg_ctx->ready_queue);
 	msg_ctx->ready_num++;
 
+	vdec_msg_queue_inc(&buf->ctx->msg_queue, msg_ctx->hardware_index);
 	if (msg_ctx->hardware_index != MTK_VDEC_CORE)
 		wake_up_all(&msg_ctx->ready_to_use);
 	else
@@ -127,6 +144,7 @@ struct vdec_lat_buf *vdec_msg_queue_dqbuf(struct vdec_msg_queue_ctx *msg_ctx)
 		return NULL;
 	}
 	list_del(head);
+	vdec_msg_queue_dec(&buf->ctx->msg_queue, msg_ctx->hardware_index);
 
 	msg_ctx->ready_num--;
 	mtk_v4l2_debug(3, "dqueue buf type:%d addr: 0x%p num: %d",
@@ -241,10 +259,13 @@ int vdec_msg_queue_init(struct vdec_msg_queue *msg_queue,
 
 	vdec_msg_queue_init_ctx(&msg_queue->lat_ctx, MTK_VDEC_LAT0);
 	INIT_WORK(&msg_queue->core_work, vdec_msg_queue_core_work);
+
+	atomic_set(&msg_queue->lat_list_cnt, 0);
+	atomic_set(&msg_queue->core_list_cnt, 0);
+
 	msg_queue->wdma_addr.size =
 		vde_msg_queue_get_trans_size(ctx->picinfo.buf_w,
 					     ctx->picinfo.buf_h);
-
 	err = mtk_vcodec_mem_alloc(ctx, &msg_queue->wdma_addr);
 	if (err) {
 		mtk_v4l2_err("failed to allocate wdma_addr buf");
diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
index c43d427f5f54..b1aa5572ba49 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
@@ -72,6 +72,9 @@ struct vdec_lat_buf {
  * @wdma_wptr_addr: ube write point
  * @core_work: core hardware work
  * @lat_ctx: used to store lat buffer list
+ *
+ * @lat_list_cnt: used to record each instance lat list count
+ * @core_list_cnt: used to record each instance core list count
  */
 struct vdec_msg_queue {
 	struct vdec_lat_buf lat_buf[NUM_BUFFER_COUNT];
@@ -82,6 +85,9 @@ struct vdec_msg_queue {
 
 	struct work_struct core_work;
 	struct vdec_msg_queue_ctx lat_ctx;
+
+	atomic_t lat_list_cnt;
+	atomic_t core_list_cnt;
 };
 
 /**
-- 
2.25.1



From yunfei.dong at mediatek.com  Sun Dec 18 22:43:28 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Mon, 19 Dec 2022 14:43:28 +0800
Subject: [PATCH v2,3/7] media: mediatek: vcodec: move lat_buf to the top of core list
In-Reply-To: <20221219064332.2124-1-yunfei.dong@mediatek.com>
References: <20221219064332.2124-1-yunfei.dong@mediatek.com>
Message-ID: <20221219064332.2124-4-yunfei.dong@mediatek.com>

Current instance will decode done when begin to wait lat buf full,
move the lat_buf of current instance to the top of core list to make
sure current instance's lat_buf will be used firstly.

Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 .../platform/mediatek/vcodec/vdec_msg_queue.c      | 14 ++++++++++++++
 .../platform/mediatek/vcodec/vdec_msg_queue.h      |  2 ++
 2 files changed, 16 insertions(+)

diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
index ad5002ca953e..ed526ff0ade6 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
@@ -174,9 +174,22 @@ void vdec_msg_queue_update_ube_wptr(struct vdec_msg_queue *msg_queue, uint64_t u
 
 bool vdec_msg_queue_wait_lat_buf_full(struct vdec_msg_queue *msg_queue)
 {
+	struct vdec_lat_buf *buf, *tmp;
+	struct vdec_msg_queue_ctx *core_ctx;
 	long timeout_jiff;
 	int ret;
 
+	core_ctx = &msg_queue->ctx->dev->msg_queue_core_ctx;
+	spin_lock(&core_ctx->ready_lock);
+	list_for_each_entry_safe(buf, tmp, &core_ctx->ready_queue, core_list) {
+		if (buf && buf->ctx == msg_queue->ctx) {
+			list_move(&buf->core_list, &core_ctx->ready_queue);
+			queue_work(buf->ctx->dev->core_workqueue,
+				   &buf->ctx->msg_queue.core_work);
+		}
+	}
+	spin_unlock(&core_ctx->ready_lock);
+
 	timeout_jiff = msecs_to_jiffies(1000 * (NUM_BUFFER_COUNT + 2));
 	ret = wait_event_timeout(msg_queue->lat_ctx.ready_to_use,
 				 msg_queue->lat_ctx.ready_num == NUM_BUFFER_COUNT,
@@ -257,6 +270,7 @@ int vdec_msg_queue_init(struct vdec_msg_queue *msg_queue,
 	if (msg_queue->wdma_addr.size)
 		return 0;
 
+	msg_queue->ctx = ctx;
 	vdec_msg_queue_init_ctx(&msg_queue->lat_ctx, MTK_VDEC_LAT0);
 	INIT_WORK(&msg_queue->core_work, vdec_msg_queue_core_work);
 
diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
index b1aa5572ba49..56280d6682c5 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
@@ -72,6 +72,7 @@ struct vdec_lat_buf {
  * @wdma_wptr_addr: ube write point
  * @core_work: core hardware work
  * @lat_ctx: used to store lat buffer list
+ * @ctx: point to mtk_vcodec_ctx
  *
  * @lat_list_cnt: used to record each instance lat list count
  * @core_list_cnt: used to record each instance core list count
@@ -85,6 +86,7 @@ struct vdec_msg_queue {
 
 	struct work_struct core_work;
 	struct vdec_msg_queue_ctx lat_ctx;
+	struct mtk_vcodec_ctx *ctx;
 
 	atomic_t lat_list_cnt;
 	atomic_t core_list_cnt;
-- 
2.25.1



From yunfei.dong at mediatek.com  Sun Dec 18 22:43:31 2022
From: yunfei.dong at mediatek.com (Yunfei Dong)
Date: Mon, 19 Dec 2022 14:43:31 +0800
Subject: [PATCH v2,6/7] media: mediatek: vcodec: making sure queue_work successfully
In-Reply-To: <20221219064332.2124-1-yunfei.dong@mediatek.com>
References: <20221219064332.2124-1-yunfei.dong@mediatek.com>
Message-ID: <20221219064332.2124-7-yunfei.dong@mediatek.com>

Putting core work to work queue using queue_work maybe fail, call
queue_work again when the count of core work in work queue is less
than core_list_cnt, making sure all the buffer in core list can be
scheduled.

Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
---
 .../platform/mediatek/vcodec/vdec_msg_queue.c | 30 ++++++++++++++-----
 .../platform/mediatek/vcodec/vdec_msg_queue.h |  2 ++
 2 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
index 0255b8385bfc..564dcf3e6d22 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
@@ -71,6 +71,7 @@ static void vdec_msg_queue_dec(struct vdec_msg_queue *msg_queue, int hardware_in
 int vdec_msg_queue_qbuf(struct vdec_msg_queue_ctx *msg_ctx, struct vdec_lat_buf *buf)
 {
 	struct list_head *head;
+	int status;
 
 	head = vdec_get_buf_list(msg_ctx->hardware_index, buf);
 	if (!head) {
@@ -83,11 +84,17 @@ int vdec_msg_queue_qbuf(struct vdec_msg_queue_ctx *msg_ctx, struct vdec_lat_buf
 	msg_ctx->ready_num++;
 
 	vdec_msg_queue_inc(&buf->ctx->msg_queue, msg_ctx->hardware_index);
-	if (msg_ctx->hardware_index != MTK_VDEC_CORE)
+	if (msg_ctx->hardware_index != MTK_VDEC_CORE) {
 		wake_up_all(&msg_ctx->ready_to_use);
-	else
-		queue_work(buf->ctx->dev->core_workqueue,
-			   &buf->ctx->msg_queue.core_work);
+	} else {
+		if (buf->ctx->msg_queue.core_work_cnt <
+			atomic_read(&buf->ctx->msg_queue.core_list_cnt)) {
+			status = queue_work(buf->ctx->dev->core_workqueue,
+					    &buf->ctx->msg_queue.core_work);
+			if (status)
+				buf->ctx->msg_queue.core_work_cnt++;
+		}
+	}
 
 	mtk_v4l2_debug(3, "enqueue buf type: %d addr: 0x%p num: %d",
 		       msg_ctx->hardware_index, buf, msg_ctx->ready_num);
@@ -249,6 +256,7 @@ static void vdec_msg_queue_core_work(struct work_struct *work)
 		container_of(msg_queue, struct mtk_vcodec_ctx, msg_queue);
 	struct mtk_vcodec_dev *dev = ctx->dev;
 	struct vdec_lat_buf *lat_buf;
+	int status;
 
 	lat_buf = vdec_msg_queue_dqbuf(&dev->msg_queue_core_ctx);
 	if (!lat_buf)
@@ -265,11 +273,17 @@ static void vdec_msg_queue_core_work(struct work_struct *work)
 	vdec_msg_queue_qbuf(&ctx->msg_queue.lat_ctx, lat_buf);
 
 	wake_up_all(&ctx->msg_queue.core_dec_done);
-	if (atomic_read(&lat_buf->ctx->msg_queue.core_list_cnt)) {
-		mtk_v4l2_debug(3, "re-schedule to decode for core: %d",
-			       dev->msg_queue_core_ctx.ready_num);
-		queue_work(dev->core_workqueue, &msg_queue->core_work);
+	spin_lock(&dev->msg_queue_core_ctx.ready_lock);
+	lat_buf->ctx->msg_queue.core_work_cnt--;
+
+	if (lat_buf->ctx->msg_queue.core_work_cnt <
+		atomic_read(&lat_buf->ctx->msg_queue.core_list_cnt)) {
+		status = queue_work(lat_buf->ctx->dev->core_workqueue,
+				    &lat_buf->ctx->msg_queue.core_work);
+		if (status)
+			lat_buf->ctx->msg_queue.core_work_cnt++;
 	}
+	spin_unlock(&dev->msg_queue_core_ctx.ready_lock);
 }
 
 int vdec_msg_queue_init(struct vdec_msg_queue *msg_queue,
diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
index a75c04418f52..a5d44bc97c16 100644
--- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
+++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.h
@@ -77,6 +77,7 @@ struct vdec_lat_buf {
  * @lat_list_cnt: used to record each instance lat list count
  * @core_list_cnt: used to record each instance core list count
  * @core_dec_done: core work queue decode done event
+ * @core_work_cnt: the number of core work in work queue
  */
 struct vdec_msg_queue {
 	struct vdec_lat_buf lat_buf[NUM_BUFFER_COUNT];
@@ -92,6 +93,7 @@ struct vdec_msg_queue {
 	atomic_t lat_list_cnt;
 	atomic_t core_list_cnt;
 	wait_queue_head_t core_dec_done;
+	int core_work_cnt;
 };
 
 /**
-- 
2.25.1



From Yunfei.Dong at mediatek.com  Sun Dec 18 22:42:31 2022
From: Yunfei.Dong at mediatek.com (=?utf-8?B?WXVuZmVpIERvbmcgKOiRo+S6kemjnik=?=)
Date: Mon, 19 Dec 2022 06:42:31 +0000
Subject: [PATCH 1/5] media: mediatek: vcodec: add params to record lat and
 core lat_buf count
In-Reply-To: <7e668b90-e3e6-5d25-e894-f754662405af@collabora.com>
References: <20221210073218.17350-1-yunfei.dong@mediatek.com>
	 <20221210073218.17350-2-yunfei.dong@mediatek.com>
	 <7e668b90-e3e6-5d25-e894-f754662405af@collabora.com>
Message-ID: <9644b2fa60b308010c4fb5602a4c3083027f1027.camel@mediatek.com>

Hi Angelo,

Thanks for your suggestion.
On Tue, 2022-12-13 at 10:09 +0100, AngeloGioacchino Del Regno wrote:
> Il 10/12/22 08:32, Yunfei Dong ha scritto:
> > Using lat_buf to share decoder information between lat and core
> > work
> > queue, adding params to record the buf count.
> > 
> > Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core
> > hardware decode")
> > Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>
> > ---
> >   .../platform/mediatek/vcodec/vdec_msg_queue.c | 32
> > ++++++++++++++++++-
> >   .../platform/mediatek/vcodec/vdec_msg_queue.h |  9 ++++++
> >   2 files changed, 40 insertions(+), 1 deletion(-)
> > 
> > diff --git
> > a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
> > b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
> > index dc2004790a47..af7ddba1923a 100644
> > --- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
> > +++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
> > @@ -52,6 +52,30 @@ static struct list_head *vdec_get_buf_list(int
> > hardware_index, struct vdec_lat_b
> >   	}
> >   }
> >   
> > +static void vdec_msg_queue_inc(struct vdec_msg_queue *msg_queue,
> > int hardware_index)
> > +{
> > +	mutex_lock(&msg_queue->list_cnt_mutex);
> 
> I doubt that you need to use this mutex, as you're using atomics...
> 
Can be removed.
> > +
> > +	if (hardware_index == MTK_VDEC_CORE)
> > +		atomic_inc(&msg_queue->core_list_cnt);
> > +	else
> > +		atomic_inc(&msg_queue->lat_list_cnt);
> > +
> 
> This branch (with the relevant appropriate changes) can be simplified
> as
> 
> 	atomic_inc(&msg_queue->list_cnt[hardware_index]);
> 
> ...where list_cnt is an array, and hardware_index is an enumeration.	
> 
Only use lat and core, no need to using a array for every hardware.

Best Regards,
Yunfei Dong
> > +	mutex_unlock(&msg_queue->list_cnt_mutex);
> > +}
> > +
> > +static void vdec_msg_queue_dec(struct vdec_msg_queue *msg_queue,
> > int hardware_index)
> > +{
> > +	mutex_lock(&msg_queue->list_cnt_mutex);
> > +
> > +	if (hardware_index == MTK_VDEC_CORE)
> > +		atomic_dec(&msg_queue->core_list_cnt);
> > +	else
> > +		atomic_dec(&msg_queue->lat_list_cnt);
> 
> Same here.
> 
> > +
> > +	mutex_unlock(&msg_queue->list_cnt_mutex);
> > +}
> > +
> 
> Regards,
> Angelo
> 

From angelogioacchino.delregno at collabora.com  Mon Dec 19 00:49:01 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 19 Dec 2022 09:49:01 +0100
Subject: [RESEND PATCH v3] soc: mediatek: Introduce
 mediatek-regulator-coupler driver
In-Reply-To: <19d04ffd-a79d-06f6-cb0e-fe56bc18615f@gmail.com>
References: <20221006115816.66853-1-angelogioacchino.delregno@collabora.com>
 <e04d15ee-9570-c919-5218-91109a88c0cb@gmail.com>
 <fe236ad5-c4e0-1649-6521-ab7c14a1ff15@collabora.com>
 <732e4a1d-8008-072d-cedb-c6859cbfdf98@collabora.com>
 <19d04ffd-a79d-06f6-cb0e-fe56bc18615f@gmail.com>
Message-ID: <0d155803-0861-ee56-fea1-abcfa77acd0a@collabora.com>

Il 16/12/22 16:26, Matthias Brugger ha scritto:
> Hi Angelo,
> 
> On 16/12/2022 14:15, AngeloGioacchino Del Regno wrote:
>> Il 21/11/22 13:01, AngeloGioacchino Del Regno ha scritto:
>>> Il 21/11/22 12:44, Matthias Brugger ha scritto:
>>>>
>>>>
>>>> On 06/10/2022 13:58, AngeloGioacchino Del Regno wrote:
>>>>> This driver currently deals with GPU-SRAM regulator coupling, ensuring
>>>>> that the SRAM voltage is always between a specific range of distance to
>>>>> the GPU voltage, depending on the SoC, necessary in order to achieve
>>>>> system stability across the full range of supported GPU frequencies.
>>>>>
>>>>> Signed-off-by: AngeloGioacchino Del Regno 
>>>>> <angelogioacchino.delregno at collabora.com>
>>>>> Reviewed-by: Dmitry Osipenko <dmitry.osipenko at collabora.com>
>>>>> ---
>>>>>
>>>>> This driver was successfully tested for more than 3 months.
>>>>> GPU DVFS works correctly with no stability issues.
>>>>>
>>>>> Changes in RESEND,v3:
>>>>> ? Rebased over next-20221005
>>>>>
>>>>> Changes in v3:
>>>>> ? - Added braces to else-if branch
>>>>>
>>>>> Changes in v2:
>>>>> ? - Added check for n_coupled
>>>>> ? - Added check for vgpu to enforce attaching to vgpu<->sram coupling only
>>>>>
>>>>> Context:
>>>>> This driver is the last of the pieces of a bigger puzzle, aiming to finally
>>>>> enable Dynamic Voltage/Frequency Scaling for Mali GPUs found on MediaTek
>>>>> SoCs on the fully open source graphics stack (Panfrost driver).
>>>>>
>>>>> No devicetree bindings are provided because this does not require any
>>>>> driver-specific binding at all.
>>>>>
>>>>> Last but not least: it was chosen to have this driver enabled for
>>>>> ( ARCH_MEDIATEK && REGULATOR ) without really giving a free configuration
>>>>> choice because, once the DVFS mechanism will be fully working, using one
>>>>> of the listed MediaTek SoCs *without* this coupling mechanism *will* lead
>>>>> to unstabilities and system crashes.
>>>>> For COMPILE_TEST, choice is given for obvious reasons.
>>>>>
>>>>> ? drivers/soc/mediatek/Kconfig???????????????? |?? 5 +
>>>>> ? drivers/soc/mediatek/Makefile??????????????? |?? 1 +
>>>>> ? drivers/soc/mediatek/mtk-regulator-coupler.c | 159 +++++++++++++++++++
>>>>> ? 3 files changed, 165 insertions(+)
>>>>> ? create mode 100644 drivers/soc/mediatek/mtk-regulator-coupler.c
>>>>>
>>>>> diff --git a/drivers/soc/mediatek/Kconfig b/drivers/soc/mediatek/Kconfig
>>>>> index 40d0cc600cae..30b5afc0e51d 100644
>>>>> --- a/drivers/soc/mediatek/Kconfig
>>>>> +++ b/drivers/soc/mediatek/Kconfig
>>>>> @@ -44,6 +44,11 @@ config MTK_PMIC_WRAP
>>>>> ??????? on different MediaTek SoCs. The PMIC wrapper is a proprietary
>>>>> ??????? hardware to connect the PMIC.
>>>>> +config MTK_REGULATOR_COUPLER
>>>>> +??? bool "MediaTek SoC Regulator Coupler" if COMPILE_TEST
>>>>> +??? default ARCH_MEDIATEK
>>>>> +??? depends on REGULATOR
>>>>> +
>>>>> ? config MTK_SCPSYS
>>>>> ????? bool "MediaTek SCPSYS Support"
>>>>> ????? default ARCH_MEDIATEK
>>>>> diff --git a/drivers/soc/mediatek/Makefile b/drivers/soc/mediatek/Makefile
>>>>> index 0e9e703c931a..8c0ddacbcde8 100644
>>>>> --- a/drivers/soc/mediatek/Makefile
>>>>> +++ b/drivers/soc/mediatek/Makefile
>>>>> @@ -3,6 +3,7 @@ obj-$(CONFIG_MTK_CMDQ) += mtk-cmdq-helper.o
>>>>> ? obj-$(CONFIG_MTK_DEVAPC) += mtk-devapc.o
>>>>> ? obj-$(CONFIG_MTK_INFRACFG) += mtk-infracfg.o
>>>>> ? obj-$(CONFIG_MTK_PMIC_WRAP) += mtk-pmic-wrap.o
>>>>> +obj-$(CONFIG_MTK_REGULATOR_COUPLER) += mtk-regulator-coupler.o
>>>>> ? obj-$(CONFIG_MTK_SCPSYS) += mtk-scpsys.o
>>>>> ? obj-$(CONFIG_MTK_SCPSYS_PM_DOMAINS) += mtk-pm-domains.o
>>>>> ? obj-$(CONFIG_MTK_MMSYS) += mtk-mmsys.o
>>>>> diff --git a/drivers/soc/mediatek/mtk-regulator-coupler.c 
>>>>> b/drivers/soc/mediatek/mtk-regulator-coupler.c
>>>>> new file mode 100644
>>>>> index 000000000000..ad2ed42aa697
>>>>> --- /dev/null
>>>>> +++ b/drivers/soc/mediatek/mtk-regulator-coupler.c
>>>>> @@ -0,0 +1,159 @@
>>>>> +// SPDX-License-Identifier: GPL-2.0-only
>>>>> +/*
>>>>> + * Voltage regulators coupler for MediaTek SoCs
>>>>> + *
>>>>> + * Copyright (C) 2022 Collabora, Ltd.
>>>>> + * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>>>>> + */
>>>>> +
>>>>> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
>>>>> +
>>>>> +#include <linux/init.h>
>>>>> +#include <linux/kernel.h>
>>>>> +#include <linux/of.h>
>>>>> +#include <linux/regulator/coupler.h>
>>>>> +#include <linux/regulator/driver.h>
>>>>> +#include <linux/regulator/machine.h>
>>>>> +#include <linux/suspend.h>
>>>>> +
>>>>> +#define to_mediatek_coupler(x)??? container_of(x, struct 
>>>>> mediatek_regulator_coupler, coupler)
>>>>> +
>>>>> +struct mediatek_regulator_coupler {
>>>>> +??? struct regulator_coupler coupler;
>>>>> +??? struct regulator_dev *vsram_rdev;
>>>>> +};
>>>>> +
>>>>> +/*
>>>>> + * We currently support only couples of not more than two vregs and
>>>>> + * modify the vsram voltage only when changing voltage of vgpu.
>>>>> + *
>>>>> + * This function is limited to the GPU<->SRAM voltages relationships.
>>>>> + */
>>>>> +static int mediatek_regulator_balance_voltage(struct regulator_coupler *coupler,
>>>>> +????????????????????????? struct regulator_dev *rdev,
>>>>> +????????????????????????? suspend_state_t state)
>>>>> +{
>>>>> +??? struct mediatek_regulator_coupler *mrc = to_mediatek_coupler(coupler);
>>>>> +??? int max_spread = rdev->constraints->max_spread[0];
>>>>> +??? int vsram_min_uV = mrc->vsram_rdev->constraints->min_uV;
>>>>> +??? int vsram_max_uV = mrc->vsram_rdev->constraints->max_uV;
>>>>> +??? int vsram_target_min_uV, vsram_target_max_uV;
>>>>> +??? int min_uV = 0;
>>>>> +??? int max_uV = INT_MAX;
>>>>> +??? int ret;
>>>>> +
>>>>> +??? /*
>>>>> +???? * If the target device is on, setting the SRAM voltage directly
>>>>> +???? * is not supported as it scales through its coupled supply voltage.
>>>>> +???? *
>>>>> +???? * An exception is made in case the use_count is zero: this means
>>>>> +???? * that this is the first time we power up the SRAM regulator, which
>>>>> +???? * implies that the target device has yet to perform initialization
>>>>> +???? * and setting a voltage at that time is harmless.
>>>>> +???? */
>>>>> +??? if (rdev == mrc->vsram_rdev) {
>>>>> +??????? if (rdev->use_count == 0)
>>>>> +??????????? return regulator_do_balance_voltage(rdev, state, true);
>>>>> +
>>>>> +??????? return -EPERM;
>>>>> +??? }
>>>>> +
>>>>> +??? ret = regulator_check_consumers(rdev, &min_uV, &max_uV, state);
>>>>> +??? if (ret < 0)
>>>>> +??????? return ret;
>>>>> +
>>>>> +??? if (min_uV == 0) {
>>>>> +??????? ret = regulator_get_voltage_rdev(rdev);
>>>>> +??????? if (ret < 0)
>>>>> +??????????? return ret;
>>>>> +??????? min_uV = ret;
>>>>> +??? }
>>>>> +
>>>>> +??? ret = regulator_check_voltage(rdev, &min_uV, &max_uV);
>>>>> +??? if (ret < 0)
>>>>> +??????? return ret;
>>>>> +
>>>>> +??? /*
>>>>> +???? * If we're asked to set a voltage less than VSRAM min_uV, set
>>>>> +???? * the minimum allowed voltage on VSRAM, as in this case it is
>>>>> +???? * safe to ignore the max_spread parameter.
>>>>> +???? */
>>>>> +??? vsram_target_min_uV = max(vsram_min_uV, min_uV + max_spread);
>>>>> +??? vsram_target_max_uV = min(vsram_max_uV, vsram_target_min_uV + max_spread);
>>>>> +
>>>>> +??? /* Make sure we're not out of range */
>>>>> +??? vsram_target_min_uV = min(vsram_target_min_uV, vsram_max_uV);
>>>>> +
>>>>> +??? pr_debug("Setting voltage %d-%duV on %s (minuV %d)\n",
>>>>> +???????? vsram_target_min_uV, vsram_target_max_uV,
>>>>> +???????? rdev_get_name(mrc->vsram_rdev), min_uV);
>>>>> +
>>>>> +??? ret = regulator_set_voltage_rdev(mrc->vsram_rdev, vsram_target_min_uV,
>>>>> +???????????????????? vsram_target_max_uV, state);
>>>>> +??? if (ret)
>>>>> +??????? return ret;
>>>>> +
>>>>> +??? /* The sram voltage is now balanced: update the target vreg voltage */
>>>>> +??? return regulator_do_balance_voltage(rdev, state, true);
>>>>> +}
>>>>> +
>>>>> +static int mediatek_regulator_attach(struct regulator_coupler *coupler,
>>>>> +???????????????????? struct regulator_dev *rdev)
>>>>> +{
>>>>> +??? struct mediatek_regulator_coupler *mrc = to_mediatek_coupler(coupler);
>>>>> +??? const char *rdev_name = rdev_get_name(rdev);
>>>>> +
>>>>> +??? /*
>>>>> +???? * If we're getting a coupling of more than two regulators here and
>>>>> +???? * this means that this is surely not a GPU<->SRAM couple: in that
>>>>> +???? * case, we may want to use another coupler implementation, if any,
>>>>> +???? * or the generic one: the regulator core will keep walking through
>>>>> +???? * the list of couplers when any .attach_regulator() cb returns 1.
>>>>> +???? */
>>>>> +??? if (rdev->coupling_desc.n_coupled > 2)
>>>>> +??????? return 1;
>>>>> +
>>>>> +??? if (strstr(rdev_name, "sram")) {
>>>>
>>>> My understanding is, that we have to have either a DT node with regulator-name 
>>>> = "sram" property to pollute rdev->constraints->name or some 
>>>> regulator_desc->name populated in the drivers/regulator/mt*.c
>>>>
>>>
>>> No, it's not trying to find a regulator named "sram", but any regulator that
>>> *contains* the "sram" string in its name, but checks only regulators that are
>>> coupled to others. This is the same for the "Vgpu" / "vgpu".
>>>
>>> Example:
>>>
>>> Regulator A, coupled to Regulator B.
>>>
>>> Regulator A name = "Vgpu" or "vgpu", or *vgpu*, or *Vgpu*
>>> ??????????????????? (name must contain either Vgpu or vgpu)
>>>
>>> Regulator B name = "vsram" or "sram_gpu" or *sram*
>>> ??????????????????? (name must contain "sram").
>>>
>>> mrc->vsram_rdev = rdev
>>>
>>> rdev == our Regulator B.
>>>
>>> We hence return 0 to the coupling API: this will produce the effect of making
>>> it use this driver's .balance_voltage() callback instead of the generic one
>>> on vgpu<->vsram.
>>>
>>>
>>>> I wasn't able to find either of this, so I wonder how this is supposed to work. 
>>>> Please provide pointers to a working and complete implementation of this, so 
>>>> that I'm able to judge what is going on and if the approach is the correct one.
>>>>
>>>> I tried to figure out using mt8195-tracking-master-rolling
>>>
>>> That's the right branch.
>>>
>>> Let's take MT8192 Asurada as an example of how this works....
>>>
>>> `mt6359_vsram_others_ldo_reg? is the SRAM regulator for the GPU:
>>> https://gitlab.collabora.com/google/chromeos-kernel/-/blob/mt8195-tracking-master-rolling/arch/arm64/boot/dts/mediatek/mt8192-asurada.dtsi#L551
>>>
>>> `mt6359_vsram_others_ldo_reg` regulator-name = "vsram_others";
>>> ????????????????????????????????????????????????? ^^^^
>>> Contains "sram", and this regulator is also
>>>
>>> ?????regulator-coupled-with = <&mt6315_7_vbuck1>;
>>>
>>> `mt6315_7_vbuck1` regulator-name = "Vgpu";
>>> ???????????????????????????????????? ^^^^
>>> Contains "Vgpu", and this regulator is also
>>>
>>> ?????regulator-coupled-with = <&mt6359_vsram_others_ldo_reg>;
>>>
>>> That's how the coupling works in this case.
>>>
>>>
>>> Now, looking at case exclusions:
>>> In MT8192 Asurada (or, actually, mt6359.dtsi) we have other regulators that do
>>> actually contain "sram" in their name, like "vsram_proc1" and "vsram_others_sshub".
>>>
>>> These regulators will be ignored, as they are *not* coupled with Vgpu.
>>>
>>>
>>> What this driver currently does in this regard is:
>>> 1. Regulator attach is called only on *coupled* regulators, not on the others
>>> 2. If the regulator contains name "vgpu" or "Vgpu" or "sram" we're good,
>>> ??? otherwise we don't attach the balance_voltage logic of this driver to
>>> ??? the unmatched regulators.
>>>
>>>
>>> Does this explanation clarify your doubts?
>>>
>>> Regards,
>>> Angelo
>>>
>>
>> Matthias, please don't forget about this one :-)
>>
> 
> Unfortunately I have to leave now and didn't had time to look more into it. So I'll 
> write just my suspicion. So please feel free to correct me if I'm totally wrong (I 
> know you will do anyway ;)
> 
> 1) When the regulator-coupler driver was introduced the driver was bound by a 
> compatible, but we use arch_initcall(...) for it.
> 2) I really don't like the hardcoded search for a the regulator name in the 
> mediatek_regulator_attach function. I haven't seen that in the Nvidia driver, also 
> I had no time to understand how they decide which regulators need to be coupled. My 
> instinct would tell me that this should be described in device-tree.
> 

I didn't want to use custom devicetree properties to couple our regulators...

Tegra wants to couple three regulators: CORE, RTC and CPU and they're getting that
with three custom properties:
* nvidia,tegra-core-regulator
* nvidia,tegra-rtc-regulator
* nvidia,tegra-gpu-regulator

Hardcoding the regulator name *sub*string in the mediatek-regulator-coupler allows
us to use *only* generic devicetree properties instead of inventing our own: after
all, even in the case in which a board uses a regulator that doesn't have the VGPU
and/or VSRAM_GPU "kind of name" in it, it's still possible to change the name via
devicetree (which would be correct, because the regulator is used for that, and
would be the right name).

As of now, there's no board using a regulator that has a not matching name, and
this is because MediaTek SoCs are always using a MediaTek PMIC in combination,
which always specifies this kind of name.

I remind you that this driver does *nothing* unless coupling is activated through
devicetree propert*ies*, as this driver has to be seen as a hook to the regulator
coupling API, and not standalone code - hence, in my opinion, the cleanest
implementation of that is to use only properties provided by the regulator coupling
API, without any assistance from custom properties, unless *really* needed.

Summarizing:
* Deciding which regulators need to be coupled *already needs to* be described
   in devicetree, otherwise this driver will do nothing;
* The hardcoded strings are there only to restrict this driver to GPU related
   regulators (vgpu as gpu core supply - vsram-gpu as gpu sram supply)

Cheers!
Angelo



From angelogioacchino.delregno at collabora.com  Mon Dec 19 00:52:23 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Mon, 19 Dec 2022 09:52:23 +0100
Subject: [PATCH resend] arm64: dts: mediatek: mt8192: Mark scp_adsp clock
 as broken
In-Reply-To: <05d6f9e6-a291-35c3-9b02-2235ad92669d@gmail.com>
References: <20221130031741.3176853-1-wenst@chromium.org>
 <2ec80bd8-dfef-d2e6-eb41-6e6088043e33@collabora.com>
 <CAGXv+5E=X_hwg76=B_jqWrpieo8bR-=r8NLbNz2=JzE=kBwMWQ@mail.gmail.com>
 <8806f4cf-2141-acb8-1f9d-cd6ade64756e@collabora.com>
 <05d6f9e6-a291-35c3-9b02-2235ad92669d@gmail.com>
Message-ID: <b8cd87e4-1d5d-af79-f92b-fcd4193e0bf2@collabora.com>

Il 16/12/22 14:17, Matthias Brugger ha scritto:
> 
> 
> On 01/12/2022 10:02, AngeloGioacchino Del Regno wrote:
>> Il 01/12/22 09:56, Chen-Yu Tsai ha scritto:
>>> On Wed, Nov 30, 2022 at 7:10 PM AngeloGioacchino Del Regno
>>> <angelogioacchino.delregno at collabora.com> wrote:
>>>>
>>>> Il 30/11/22 04:17, Chen-Yu Tsai ha scritto:
>>>>> The scp_adsp clock controller is under the SCP_ADSP power domain. This
>>>>> power domain is currently not supported nor defined.
>>>>>
>>>>> Mark the clock controller as broken for now, to avoid the system from
>>>>> trying to access it, and causing the CPU or bus to stall.
>>>>>
>>>>> Fixes: 5d2b897bc6f5 ("arm64: dts: mediatek: Add mt8192 clock controllers")
>>>>> Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
>>>>
>>>> ....or we can add the ADSP power domain to actually fix this properly, which looks
>>>> like being a generally good idea :-)
>>>
>>> Sure, but that and any driver changes have to be backported, or anything
>>> touching the clocks will still break the system.
>>>
>>
>> I agree.
>>
>>> There's no reason we can't have both. I think having this one merged and
>>> backported to stable first, then adding the SCP_ADSP power domain, and tying
>>> it to the clock controller as a follow up addition works best.
>>>
>>> What do you think?
>>>
>>
>> I think that one reason to not have both is that we'd have to revert this commit
>> after the SCP_ADSP power domain is added (with the appropriate Fixes tags and/or
>> Cc stable)...
>>
>> I'd expect that entire addition to be no more than 3 commits, including the dtsi
>> one... and if it comes out as I expect, we'd be solving that issue on all of the
>> affected older versions of the kernel - the right way.
>>
>> Can we wait for... let's say, a day or two to check how that works, before taking
>> a final decision on this commit?
>>
> 
> Do I understand correctly that the correct way for now is to merge this patch until 
> we have a fixed the power domain controller?
> 
> Regards,
> Matthias

I thought that the proper fix would be going in v6.2, but apparently something
went wrong with it as it contains things that aren't upstream.

At this point, let's go with this one until the proper fix gets factored in,
which I expect to be ready for v6.3.

Cheers,
Angelo


From lorenzo at kernel.org  Mon Dec 19 01:55:30 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Mon, 19 Dec 2022 10:55:30 +0100
Subject: [PATCH v2] wifi: mt76: fix potential memory leakage
In-Reply-To: <0a218783098a6b1b90ff120c7182acee93dc8feb.1671423784.git.Bo.Jiao@mediatek.com>
References: <0a218783098a6b1b90ff120c7182acee93dc8feb.1671423784.git.Bo.Jiao@mediatek.com>
Message-ID: <Y6A1Et1yzcWnWhpy@lore-desk>

> From: Bo Jiao <Bo.Jiao at mediatek.com>
> 
> fix potential memory leakage, recycle rxwi when mt76_dma_add_buf() call fail.
> 
> Signed-off-by: Bo Jiao <Bo.Jiao at mediatek.com>
> ---
> v2:
> - recycle rxwi when page_frag_alloc() and dma_map_single() fail.
> ---
>  drivers/net/wireless/mediatek/mt76/dma.c | 27 ++++++++++++++----------
>  1 file changed, 16 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
> index fc24b35..76ad47d 100644
> --- a/drivers/net/wireless/mediatek/mt76/dma.c
> +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> @@ -580,24 +580,29 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
>  
>  		buf = page_frag_alloc(&q->rx_page, q->buf_size, GFP_ATOMIC);
>  		if (!buf)
> -			break;
> +			goto out;
>  
>  		addr = dma_map_single(dev->dma_dev, buf, len, DMA_FROM_DEVICE);
> -		if (unlikely(dma_mapping_error(dev->dma_dev, addr))) {
> -			skb_free_frag(buf);
> -			break;
> -		}
> +		if (unlikely(dma_mapping_error(dev->dma_dev, addr)))
> +			goto free;
>  
>  		qbuf.addr = addr + offset;
>  		qbuf.len = len - offset;
>  		qbuf.skip_unmap = false;
> -		if (mt76_dma_add_buf(dev, q, &qbuf, 1, 0, buf, t) < 0) {
> -			dma_unmap_single(dev->dma_dev, addr, len,
> -					 DMA_FROM_DEVICE);
> -			skb_free_frag(buf);
> -			break;
> -		}
> +		if (mt76_dma_add_buf(dev, q, &qbuf, 1, 0, buf, t) < 0)
> +			goto umap;
> +
>  		frames++;
> +		continue;
> +
> +umap:
> +		dma_unmap_single(dev->dma_dev, addr, len,
> +				 DMA_FROM_DEVICE);
> +free:
> +		skb_free_frag(buf);
> +out:
> +		mt76_put_rxwi(dev, t);
> +		break;
>  	}
>  
>  	if (frames)

Hi Bo,

I guess in the way below, the code is more readable, what do you think?

Regards,
Lorenzo

diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
index fad5fe19fe18..001538f698f1 100644
--- a/drivers/net/wireless/mediatek/mt76/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/dma.c
@@ -571,13 +571,6 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
 		struct mt76_queue_buf qbuf;
 		void *buf = NULL;
 
-		if ((q->flags & MT_QFLAG_WED) &&
-		    FIELD_GET(MT_QFLAG_WED_TYPE, q->flags) == MT76_WED_Q_RX) {
-			t = mt76_get_rxwi(dev);
-			if (!t)
-				break;
-		}
-
 		buf = page_frag_alloc(&q->rx_page, q->buf_size, GFP_ATOMIC);
 		if (!buf)
 			break;
@@ -588,16 +581,27 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
 			break;
 		}
 
+		if ((q->flags & MT_QFLAG_WED) &&
+		    FIELD_GET(MT_QFLAG_WED_TYPE, q->flags) == MT76_WED_Q_RX) {
+			t = mt76_get_rxwi(dev);
+			if (!t)
+				goto unmap;
+		}
+
 		qbuf.addr = addr + offset;
 		qbuf.len = len - offset;
 		qbuf.skip_unmap = false;
-		if (mt76_dma_add_buf(dev, q, &qbuf, 1, 0, buf, t) < 0) {
-			dma_unmap_single(dev->dma_dev, addr, len,
-					 DMA_FROM_DEVICE);
-			skb_free_frag(buf);
-			break;
+
+		if (!mt76_dma_add_buf(dev, q, &qbuf, 1, 0, buf, t)) {
+			frames++;
+			continue;
 		}
-		frames++;
+
+unmap:
+		dma_unmap_single(dev->dma_dev, addr, len, DMA_FROM_DEVICE);
+		skb_free_frag(buf);
+		mt76_put_rxwi(dev, t);
+		break;
 	}
 
 	if (frames)

> -- 
> 2.18.0
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221219/c5902d84/attachment.sig>

From Allen-KH.Cheng at mediatek.com  Mon Dec 19 04:21:26 2022
From: Allen-KH.Cheng at mediatek.com (=?utf-8?B?QWxsZW4tS0ggQ2hlbmcgKOeoi+WGoOWLsyk=?=)
Date: Mon, 19 Dec 2022 12:21:26 +0000
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <f70d7c09-df0d-4fa9-92c9-63f31cf56483@systemli.org>
References: <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
	 <Y4jHvomTrU8guBox@makrotopia.org>
	 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
	 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
	 <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
	 <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>
	 <b1822bbc3775730c4cedf9652323c7d72e663e4b.camel@mediatek.com>
	 <8be3e050-f32a-6761-8ebd-49c38dfcf9eb@collabora.com>
	 <c186d104-43e0-ca10-3ce2-c2f922acd8bf@leemhuis.info>
	 <37468027-6a27-dcb8-9c14-8f8426ec50d1@collabora.com>
	 <20221202110139.vmwcmoudakm2nap4@vireshk-i7>
	 <f70d7c09-df0d-4fa9-92c9-63f31cf56483@systemli.org>
Message-ID: <5e07eb07de0fea2232c32f58691ffb7cfd2303f8.camel@mediatek.com>

Hi Nick,

This issue doesn't seem to be going to happen.
Is there anything else we need help confirming?

Thanks,
Allen

-----Original Message-----
From: Linux-mediatek <linux-mediatek-bounces at lists.infradead.org> On
Behalf Of Nick
Sent: Wednesday, December 7, 2022 11:35 PM
To: Viresh Kumar <viresh.kumar at linaro.org>; AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com>
Cc: Allen-KH Cheng (???) <Allen-KH.Cheng at mediatek.com>; 
linux-pm at vger.kernel.org; daniel at makrotopia.org;
Project_Global_Chrome_Upstream_Group <
Project_Global_Chrome_Upstream_Group at mediatek.com>; Rex-BC Chen (???) <
Rex-BC.Chen at mediatek.com>; Thorsten Leemhuis <regressions at leemhuis.info
>; linux-mediatek at lists.infradead.org; matthias.bgg at gmail.com; 
thomas.huehn at hs-nordhausen.de; Jia-wei Chang (???) <
Jia-wei.Chang at mediatek.com>; linux-arm-kernel at lists.infradead.org; 
regressions at lists.linux.dev
Subject: Re: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)

Did something changed on master? I compiled now the image I use on the
BPI-R64 a bit differently.
I used the openwrt toolchain "aarch64-openwrt-linux-musl-" to cross-
compile the original linux repository on current master. Than I
compiled with OpenWrt-Buildsystem a initramfs, put that together with
mkimage to a "itb" and booted it. Suddenly it works:

https://urldefense.com/v3/__https://gist.githubusercontent.com/PolynomialDivision/5e49529206ba5d273bf6a416c42c6234/raw/7ecff7be397a6e9a41ef120c3fa61060c488cf5b/mt7622-bpi-vanilla__;!!CTRNKA9wMg0ARbw!glNhziJx8pjvVsVoRm0LO8wshXJL_b2P_jYV5vO_9uhe1EnbMpWRnIEcj_561Ijxurd8C-Fjc7uCbBNIM_E-7YYc$?
 

Bests
Nick

On 12/2/22 12:01, Viresh Kumar wrote:
> On 02-12-22, 12:00, AngeloGioacchino Del Regno wrote:
> > If Viresh can add those while applying the patch, that's fine for
> > me 
> > - otherwise I can send a v2 adding the two suggested missing tags.
> 
> Sure, no problem.
> 



From mark-pk.tsai at mediatek.com  Mon Dec 19 05:06:15 2022
From: mark-pk.tsai at mediatek.com (Mark-PK Tsai)
Date: Mon, 19 Dec 2022 21:06:15 +0800
Subject: [PATCH] irqdomain: Fix irqdomain->revmap race
Message-ID: <20221219130620.21092-1-mark-pk.tsai@mediatek.com>

The irqdomain->revmap(_tree) of a shared irq can be race updated
as following, which result in an unexpected irq mapping:

---------------------------------------------------------------
(2 threads parse the same hwirq fwspec in the same time.)

Thread A 			Thread B
irq_create_fwspec_mapping
irq_find_mapping						Thread A: virq = 0, alloc a new irq_desc
				irq_create_fwspec_mapping
				irq_find_mapping		Thread B: virq = 0, alloc a new irq_desc
irq_domain_alloc_irqs
irq_domain_insert_irq						domain->revmap[hwirq] = irq_data(virq x)
				irq_domain_alloc_irqs
				irq_domain_insert_irq		domain->revmap[hwirq] = irq_data(virq x + 1)

virq = x			virq = x + 1
---------------------------------------------------------------

The virq x can't work because the revmap[hwirq] was
overridden by thread B.

It seems both hierarchy and non-hierarchy irq domain have the same
problem because the code from irq_find_mapping to revmap update are
not protected by a same lock.

Do you have any suggestion about how to fix it properly?

Signed-off-by: Mark-PK Tsai <mark-pk.tsai at mediatek.com>
---
 kernel/irq/irqdomain.c | 28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index 8fe1da9614ee..21d317b26220 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -22,6 +22,7 @@
 
 static LIST_HEAD(irq_domain_list);
 static DEFINE_MUTEX(irq_domain_mutex);
+static DEFINE_MUTEX(irq_revmaps_mutex);
 
 static struct irq_domain *irq_default_domain;
 
@@ -793,6 +794,7 @@ unsigned int irq_create_fwspec_mapping(struct irq_fwspec *fwspec)
 	 * If we've already configured this interrupt,
 	 * don't do it again, or hell will break loose.
 	 */
+	mutex_lock(&irq_revmaps_mutex);
 	virq = irq_find_mapping(domain, hwirq);
 	if (virq) {
 		/*
@@ -801,7 +803,7 @@ unsigned int irq_create_fwspec_mapping(struct irq_fwspec *fwspec)
 		 * interrupt number.
 		 */
 		if (type == IRQ_TYPE_NONE || type == irq_get_trigger_type(virq))
-			return virq;
+			goto unlock;
 
 		/*
 		 * If the trigger type has not been set yet, then set
@@ -809,27 +811,32 @@ unsigned int irq_create_fwspec_mapping(struct irq_fwspec *fwspec)
 		 */
 		if (irq_get_trigger_type(virq) == IRQ_TYPE_NONE) {
 			irq_data = irq_get_irq_data(virq);
-			if (!irq_data)
-				return 0;
+			if (!irq_data) {
+				virq = 0;
+				goto unlock;
+			}
 
 			irqd_set_trigger_type(irq_data, type);
-			return virq;
+			goto unlock;
 		}
 
 		pr_warn("type mismatch, failed to map hwirq-%lu for %s!\n",
 			hwirq, of_node_full_name(to_of_node(fwspec->fwnode)));
-		return 0;
+		virq = 0;
+		goto unlock;
 	}
 
 	if (irq_domain_is_hierarchy(domain)) {
 		virq = irq_domain_alloc_irqs(domain, 1, NUMA_NO_NODE, fwspec);
-		if (virq <= 0)
-			return 0;
+		if (virq <= 0) {
+			virq = 0;
+			goto unlock;
+		}
 	} else {
 		/* Create mapping */
 		virq = irq_create_mapping(domain, hwirq);
 		if (!virq)
-			return virq;
+			goto unlock;
 	}
 
 	irq_data = irq_get_irq_data(virq);
@@ -838,12 +845,15 @@ unsigned int irq_create_fwspec_mapping(struct irq_fwspec *fwspec)
 			irq_domain_free_irqs(virq, 1);
 		else
 			irq_dispose_mapping(virq);
-		return 0;
+		virq = 0;
+		goto unlock;
 	}
 
 	/* Store trigger type */
 	irqd_set_trigger_type(irq_data, type);
 
+unlock:
+	mutex_unlock(&irq_revmaps_mutex);
 	return virq;
 }
 EXPORT_SYMBOL_GPL(irq_create_fwspec_mapping);
-- 
2.18.0



From robh+dt at kernel.org  Mon Dec 19 05:44:25 2022
From: robh+dt at kernel.org (Rob Herring)
Date: Mon, 19 Dec 2022 07:44:25 -0600
Subject: [PATCH v4 1/8] dt-bindings: arm: mediatek: mmsys: Add support for
 MT8195 VPPSYS
In-Reply-To: <20221207094921.15450-2-moudy.ho@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com> <20221207094921.15450-2-moudy.ho@mediatek.com>
Message-ID: <CAL_JsqKdaVmGKSwR0yiYGKc6Kp6jki632GA6CBOOjGzUmvSRWA@mail.gmail.com>

On Wed, Dec 7, 2022 at 3:49 AM Moudy Ho <moudy.ho at mediatek.com> wrote:
>
> For MT8195, VPPSYS0 and VPPSYS1 are 2 display pipes with
> hardware differences in power domains, clocks and subsystem counts,
> which should be determined by compatible names.
>
> Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
> ---
>  .../devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml     | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)

This landed in today's linux-next causing the following binding
warnings. Is this a fix? Only fixes for 6.2 should be added during the
merge window.

/builds/robherring/linux-dt/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8195-clock.example.dtb:
clock-controller at 14000000: $nodename:0: 'clock-controller at 14000000'
does not match '^syscon@[0-9a-f]+$'
        From schema:
/builds/robherring/linux-dt/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
/builds/robherring/linux-dt/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8195-clock.example.dtb:
clock-controller at 14000000: compatible: 'oneOf' conditional failed, one
must be fixed:
        ['mediatek,mt8195-vppsys0'] is too short
        'mediatek,mt8195-vppsys0' is not one of
['mediatek,mt2701-mmsys', 'mediatek,mt2712-mmsys',
'mediatek,mt6765-mmsys', 'mediatek,mt6779-mmsys',
'mediatek,mt6795-mmsys', 'mediatek,mt6797-mmsys',
'mediatek,mt8167-mmsys', 'mediatek,mt8173-mmsys',
'mediatek,mt8183-mmsys', 'mediatek,mt8186-mmsys',
'mediatek,mt8188-vdosys0', 'mediatek,mt8192-mmsys',
'mediatek,mt8365-mmsys']
        'mediatek,mt8195-mmsys' was expected
        'mediatek,mt7623-mmsys' was expected
        From schema:
/builds/robherring/linux-dt/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml


From johan at kernel.org  Mon Dec 19 06:35:33 2022
From: johan at kernel.org (Johan Hovold)
Date: Mon, 19 Dec 2022 15:35:33 +0100
Subject: [PATCH] irqdomain: Fix irqdomain->revmap race
In-Reply-To: <20221219130620.21092-1-mark-pk.tsai@mediatek.com>
References: <20221219130620.21092-1-mark-pk.tsai@mediatek.com>
Message-ID: <Y6B2tTQCLXz/Oytt@hovoldconsulting.com>

On Mon, Dec 19, 2022 at 09:06:15PM +0800, Mark-PK Tsai wrote:
> The irqdomain->revmap(_tree) of a shared irq can be race updated
> as following, which result in an unexpected irq mapping:
> 
> ---------------------------------------------------------------
> (2 threads parse the same hwirq fwspec in the same time.)
> 
> Thread A 			Thread B
> irq_create_fwspec_mapping
> irq_find_mapping						Thread A: virq = 0, alloc a new irq_desc
> 				irq_create_fwspec_mapping
> 				irq_find_mapping		Thread B: virq = 0, alloc a new irq_desc
> irq_domain_alloc_irqs
> irq_domain_insert_irq						domain->revmap[hwirq] = irq_data(virq x)
> 				irq_domain_alloc_irqs
> 				irq_domain_insert_irq		domain->revmap[hwirq] = irq_data(virq x + 1)
> 
> virq = x			virq = x + 1
> ---------------------------------------------------------------
> 
> The virq x can't work because the revmap[hwirq] was
> overridden by thread B.
> 
> It seems both hierarchy and non-hierarchy irq domain have the same
> problem because the code from irq_find_mapping to revmap update are
> not protected by a same lock.
> 
> Do you have any suggestion about how to fix it properly?

This is being fixed here:

	https://lore.kernel.org/lkml/20221209140150.1453-1-johan+linaro at kernel.org/

Johan


From matthias.bgg at gmail.com  Mon Dec 19 07:17:09 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Mon, 19 Dec 2022 16:17:09 +0100
Subject: [PATCH v4 1/8] dt-bindings: arm: mediatek: mmsys: Add support for
 MT8195 VPPSYS
In-Reply-To: <CAL_JsqKdaVmGKSwR0yiYGKc6Kp6jki632GA6CBOOjGzUmvSRWA@mail.gmail.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
 <20221207094921.15450-2-moudy.ho@mediatek.com>
 <CAL_JsqKdaVmGKSwR0yiYGKc6Kp6jki632GA6CBOOjGzUmvSRWA@mail.gmail.com>
Message-ID: <ba8ce731-2d9c-901f-e208-deafe589b723@gmail.com>



On 19/12/2022 14:44, Rob Herring wrote:
> On Wed, Dec 7, 2022 at 3:49 AM Moudy Ho <moudy.ho at mediatek.com> wrote:
>>
>> For MT8195, VPPSYS0 and VPPSYS1 are 2 display pipes with
>> hardware differences in power domains, clocks and subsystem counts,
>> which should be determined by compatible names.
>>
>> Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
>> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
>> ---
>>   .../devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml     | 5 ++++-
>>   1 file changed, 4 insertions(+), 1 deletion(-)
> 
> This landed in today's linux-next causing the following binding
> warnings. Is this a fix? Only fixes for 6.2 should be added during the
> merge window.
> 

No it's not a fix, it's queued for the next -rc phase. I didn't know of the 
limitation of linux-next only allowing fixes in the merge window.

Actually the patch is wrong. It shouldn't include "mediatek,mt8195-mmsys" as 
fallback for mediatek,mt8195-vppsys[0,1].

I'll revert the whole series from v6.2-tmp/dts64 and v6.2-tmp/soc

Regards,
Matthias

> /builds/robherring/linux-dt/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8195-clock.example.dtb:
> clock-controller at 14000000: $nodename:0: 'clock-controller at 14000000'
> does not match '^syscon@[0-9a-f]+$'
>          From schema:
> /builds/robherring/linux-dt/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
> /builds/robherring/linux-dt/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8195-clock.example.dtb:
> clock-controller at 14000000: compatible: 'oneOf' conditional failed, one
> must be fixed:
>          ['mediatek,mt8195-vppsys0'] is too short
>          'mediatek,mt8195-vppsys0' is not one of
> ['mediatek,mt2701-mmsys', 'mediatek,mt2712-mmsys',
> 'mediatek,mt6765-mmsys', 'mediatek,mt6779-mmsys',
> 'mediatek,mt6795-mmsys', 'mediatek,mt6797-mmsys',
> 'mediatek,mt8167-mmsys', 'mediatek,mt8173-mmsys',
> 'mediatek,mt8183-mmsys', 'mediatek,mt8186-mmsys',
> 'mediatek,mt8188-vdosys0', 'mediatek,mt8192-mmsys',
> 'mediatek,mt8365-mmsys']
>          'mediatek,mt8195-mmsys' was expected
>          'mediatek,mt7623-mmsys' was expected
>          From schema:
> /builds/robherring/linux-dt/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml


From matthias.bgg at gmail.com  Mon Dec 19 07:17:35 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Mon, 19 Dec 2022 16:17:35 +0100
Subject: [PATCH v4 0/8] add support MDP3 on MT8195 platform
In-Reply-To: <5692faa0-6d7e-774f-9d6a-a495b44bdb3e@gmail.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
 <5692faa0-6d7e-774f-9d6a-a495b44bdb3e@gmail.com>
Message-ID: <dba479ea-968f-89eb-fc59-8235cbb2783a@gmail.com>



On 16/12/2022 13:33, Matthias Brugger wrote:
> 
> Whole series applied, thanks!
> 

And now, whole series reverted, please see comment in 1/8.

Regards,
Matthias

> On 07/12/2022 10:49, Moudy Ho wrote:
>> From: mtk18742 <moudy.ho at mediatek.com>
>>
>> Changes since v3:
>> - Rebase on linux-next
>>
>> Changes since v2:
>> - Depend on :
>> ?? [1] https://patchwork.kernel.org/project/linux-mediatek/list/?series=681097
>> - Split dts settings into two patches based on belonging to MMSYS or MUTEX.
>>
>> Changes since v1:
>> - Depend on :
>> ?? [1] https://patchwork.kernel.org/project/linux-mediatek/list/?series=681097
>> - Add compatible names to VPPSYS0 and VPPSYS1 in MMSYS binding file.
>> - Fix VPPSYS's MMSYS and MUTEX dts to pass the dtsb_check.
>> - Rename mtk_mmsys_merge_config() and mtk_mmsys_rsz_dcm_config() to
>> ?? mtk_mmsys_vpp_rsz_merge_config() and mtk_mmsys_vpp_rsz_dcm_config().
>> - Clean up mtk_mmsys_vpp_rsz_dcm_config().
>> - Add a comment to mtk_mutex_write_mod() and clean it up for use in more
>> ?? than 32 mods.
>>
>> Hi,
>>
>> This series add support for MT8195's two VPPSYS(Video Processor Pipe Subsystem),
>> under which there will be corresponding MMSYS and MUTEX settings that
>> need to be configured.
>>
>> Moudy Ho (2):
>> ?? dt-bindings: arm: mediatek: mmsys: Add support for MT8195 VPPSYS
>> ?? arm64: dts: mediatek: mt8195: add MUTEX configuration for VPPSYS
>>
>> Roy-CW.Yeh (6):
>> ?? dt-bindings: soc: mediatek: Add support for MT8195 VPPSYS
>> ?? arm64: dts: mediatek: mt8195: add MMSYS configuration for VPPSYS
>> ?? soc: mediatek: mmsys: add support for MT8195 VPPSYS
>> ?? soc: mediatek: mmsys: add config api for RSZ switching and DCM
>> ?? soc: mediatek: mutex: Add mtk_mutex_set_mod support to set MOD1
>> ?? soc: mediatek: mutex: support MT8195 VPPSYS
>>
>> ? .../bindings/arm/mediatek/mediatek,mmsys.yaml |?? 5 +-
>> ? .../bindings/soc/mediatek/mediatek,mutex.yaml |?? 1 +
>> ? arch/arm64/boot/dts/mediatek/mt8195.dtsi????? |? 28 +++-
>> ? drivers/soc/mediatek/mt8195-mmsys.h?????????? |? 13 ++
>> ? drivers/soc/mediatek/mtk-mmsys.c????????????? |? 64 +++++++++
>> ? drivers/soc/mediatek/mtk-mmsys.h????????????? |?? 1 +
>> ? drivers/soc/mediatek/mtk-mutex.c????????????? | 135 +++++++++++++++++-
>> ? include/linux/soc/mediatek/mtk-mmsys.h??????? |?? 4 +
>> ? include/linux/soc/mediatek/mtk-mutex.h??????? |? 35 +++++
>> ? 9 files changed, 274 insertions(+), 12 deletions(-)
>>


From matthias.bgg at gmail.com  Mon Dec 19 07:30:32 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Mon, 19 Dec 2022 16:30:32 +0100
Subject: [PATCH v5 01/10] spi: mtk-snfi: Change default page format to
 setup default setting
In-Reply-To: <20221219024019.31974-2-xiangsheng.hou@mediatek.com>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
 <20221219024019.31974-2-xiangsheng.hou@mediatek.com>
Message-ID: <5ebaf98b-a77e-3c5a-3e08-bbb0119558a2@gmail.com>

Thanks for your patch! There is something to improve please see below.

On 19/12/2022 03:40, Xiangsheng Hou wrote:
> Change default page format to setup default setting since the sector
> size 1024 on MT7986 will lead to probe fail.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> ---
>   drivers/spi/spi-mtk-snfi.c | 3 +--
>   1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
> index fa8412ba20e2..719fc6f53ab1 100644
> --- a/drivers/spi/spi-mtk-snfi.c
> +++ b/drivers/spi/spi-mtk-snfi.c
> @@ -1430,8 +1430,7 @@ static int mtk_snand_probe(struct platform_device *pdev)
>   
>   	// setup an initial page format for ops matching page_cache_op template
>   	// before ECC is called.
> -	ret = mtk_snand_setup_pagefmt(ms, ms->caps->sector_size,
> -				      ms->caps->spare_sizes[0]);
> +	ret = mtk_snand_setup_pagefmt(ms, SZ_2K, SZ_64);

Couldn't you just set sector_size in mt7986_snand_caps?

Regards,
Matthias


>   	if (ret) {
>   		dev_err(ms->dev, "failed to set initial page format\n");
>   		goto disable_clk;


From krzysztof.kozlowski at linaro.org  Mon Dec 19 07:31:27 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Mon, 19 Dec 2022 16:31:27 +0100
Subject: [PATCH v4 1/8] dt-bindings: arm: mediatek: mmsys: Add support for
 MT8195 VPPSYS
In-Reply-To: <ba8ce731-2d9c-901f-e208-deafe589b723@gmail.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
 <20221207094921.15450-2-moudy.ho@mediatek.com>
 <CAL_JsqKdaVmGKSwR0yiYGKc6Kp6jki632GA6CBOOjGzUmvSRWA@mail.gmail.com>
 <ba8ce731-2d9c-901f-e208-deafe589b723@gmail.com>
Message-ID: <270ba2bf-6141-724c-7406-0e27503b21bd@linaro.org>

On 19/12/2022 16:17, Matthias Brugger wrote:
> 
> 
> On 19/12/2022 14:44, Rob Herring wrote:
>> On Wed, Dec 7, 2022 at 3:49 AM Moudy Ho <moudy.ho at mediatek.com> wrote:
>>>
>>> For MT8195, VPPSYS0 and VPPSYS1 are 2 display pipes with
>>> hardware differences in power domains, clocks and subsystem counts,
>>> which should be determined by compatible names.
>>>
>>> Signed-off-by: Moudy Ho <moudy.ho at mediatek.com>
>>> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
>>> ---
>>>   .../devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml     | 5 ++++-
>>>   1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> This landed in today's linux-next causing the following binding
>> warnings. Is this a fix? Only fixes for 6.2 should be added during the
>> merge window.
>>
> 
> No it's not a fix, it's queued for the next -rc phase. I didn't know of the 
> limitation of linux-next only allowing fixes in the merge window.

Stephen asks for it every time. Now it is in separate email:

https://lore.kernel.org/linux-next/20221213120359.47fc3cad at canb.auug.org.au/

Previously it was in each linux-next announcement:
https://lore.kernel.org/linux-next/20220527164940.6ef5b25e at canb.auug.org.au/

> 
> Actually the patch is wrong. It shouldn't include "mediatek,mt8195-mmsys" as 
> fallback for mediatek,mt8195-vppsys[0,1].
> 
> I'll revert the whole series from v6.2-tmp/dts64 and v6.2-tmp/soc

Thanks. Please, drop all material for next cycle from linux-next.

Best regards,
Krzysztof



From robh at kernel.org  Mon Dec 19 07:38:37 2022
From: robh at kernel.org (Rob Herring)
Date: Mon, 19 Dec 2022 09:38:37 -0600
Subject: [PATCH v5 06/10] dt-bindings: spi: mtk-snfi: Add read latch
 latency property
In-Reply-To: <20221219024019.31974-7-xiangsheng.hou@mediatek.com>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
 <20221219024019.31974-7-xiangsheng.hou@mediatek.com>
Message-ID: <20221219153837.GA1426412-robh@kernel.org>

On Mon, Dec 19, 2022 at 10:40:15AM +0800, Xiangsheng Hou wrote:
> Add mediatek,rx-latch-latency-ns property which adjust data read
> latch latency in the unit of nanoseconds.
> 
> Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> ---
>  .../devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml         | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
> index bab23f1b11fd..1e5e89a693c3 100644
> --- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
> +++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml
> @@ -45,6 +45,9 @@ properties:
>      description: device-tree node of the accompanying ECC engine.
>      $ref: /schemas/types.yaml#/definitions/phandle
>  
> +  mediatek,rx-latch-latency-ns:
> +    description: Data read latch latency, unit is nanoseconds.

Doesn't the common 'rx-sample-delay-ns' work for you?

Rob


From christophe.jaillet at wanadoo.fr  Mon Dec 19 10:06:22 2022
From: christophe.jaillet at wanadoo.fr (Christophe JAILLET)
Date: Mon, 19 Dec 2022 19:06:22 +0100
Subject: [PATCH] iommu/mediatek-v1: Fix an error handling path in mtk_iommu_v1_probe()
Message-ID: <593e7b7d97c6e064b29716b091a9d4fd122241fb.1671473163.git.christophe.jaillet@wanadoo.fr>

A clk, prepared and enabled in mtk_iommu_v1_hw_init(), is not released in
the error handling path of mtk_iommu_v1_probe().

Add the corresponding clk_disable_unprepare(), as already done in the
remove function.

Fixes: b17336c55d89 ("iommu/mediatek: add support for mtk iommu generation one HW")
Signed-off-by: Christophe JAILLET <christophe.jaillet at wanadoo.fr>
---
Another option would be to use devm_clk_get_enabled(). This would save a
few LoC in mtk_iommu_v1_hw_init() and in the remove function.
However, it would change the order of function calls in the remove function
so I leave it as-is.
Let me know if it is fine and if you prefer this alternative.
---
 drivers/iommu/mtk_iommu_v1.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/mtk_iommu_v1.c b/drivers/iommu/mtk_iommu_v1.c
index 69682ee068d2..ca581ff1c769 100644
--- a/drivers/iommu/mtk_iommu_v1.c
+++ b/drivers/iommu/mtk_iommu_v1.c
@@ -683,7 +683,7 @@ static int mtk_iommu_v1_probe(struct platform_device *pdev)
 	ret = iommu_device_sysfs_add(&data->iommu, &pdev->dev, NULL,
 				     dev_name(&pdev->dev));
 	if (ret)
-		return ret;
+		goto out_clk_unprepare;
 
 	ret = iommu_device_register(&data->iommu, &mtk_iommu_v1_ops, dev);
 	if (ret)
@@ -698,6 +698,8 @@ static int mtk_iommu_v1_probe(struct platform_device *pdev)
 	iommu_device_unregister(&data->iommu);
 out_sysfs_remove:
 	iommu_device_sysfs_remove(&data->iommu);
+out_clk_unprepare:
+	clk_disable_unprepare(data->bclk);
 	return ret;
 }
 
-- 
2.34.1



From matthias.bgg at gmail.com  Mon Dec 19 10:16:59 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Mon, 19 Dec 2022 19:16:59 +0100
Subject: [PATCH] iommu/mediatek-v1: Fix an error handling path in
 mtk_iommu_v1_probe()
In-Reply-To: <593e7b7d97c6e064b29716b091a9d4fd122241fb.1671473163.git.christophe.jaillet@wanadoo.fr>
References: <593e7b7d97c6e064b29716b091a9d4fd122241fb.1671473163.git.christophe.jaillet@wanadoo.fr>
Message-ID: <f1c79a8b-837c-eff7-c5e6-2c3a9658ec3c@gmail.com>


On 19/12/2022 19:06, Christophe JAILLET wrote:
> A clk, prepared and enabled in mtk_iommu_v1_hw_init(), is not released in
> the error handling path of mtk_iommu_v1_probe().
> 
> Add the corresponding clk_disable_unprepare(), as already done in the
> remove function.
> 
> Fixes: b17336c55d89 ("iommu/mediatek: add support for mtk iommu generation one HW")
> Signed-off-by: Christophe JAILLET <christophe.jaillet at wanadoo.fr>

Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>

> ---
> Another option would be to use devm_clk_get_enabled(). This would save a
> few LoC in mtk_iommu_v1_hw_init() and in the remove function.
> However, it would change the order of function calls in the remove function
> so I leave it as-is.
> Let me know if it is fine and if you prefer this alternative.
> ---
>   drivers/iommu/mtk_iommu_v1.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iommu/mtk_iommu_v1.c b/drivers/iommu/mtk_iommu_v1.c
> index 69682ee068d2..ca581ff1c769 100644
> --- a/drivers/iommu/mtk_iommu_v1.c
> +++ b/drivers/iommu/mtk_iommu_v1.c
> @@ -683,7 +683,7 @@ static int mtk_iommu_v1_probe(struct platform_device *pdev)
>   	ret = iommu_device_sysfs_add(&data->iommu, &pdev->dev, NULL,
>   				     dev_name(&pdev->dev));
>   	if (ret)
> -		return ret;
> +		goto out_clk_unprepare;
>   
>   	ret = iommu_device_register(&data->iommu, &mtk_iommu_v1_ops, dev);
>   	if (ret)
> @@ -698,6 +698,8 @@ static int mtk_iommu_v1_probe(struct platform_device *pdev)
>   	iommu_device_unregister(&data->iommu);
>   out_sysfs_remove:
>   	iommu_device_sysfs_remove(&data->iommu);
> +out_clk_unprepare:
> +	clk_disable_unprepare(data->bclk);
>   	return ret;
>   }
>   


From Xiangsheng.Hou at mediatek.com  Mon Dec 19 17:59:31 2022
From: Xiangsheng.Hou at mediatek.com (=?utf-8?B?WGlhbmdzaGVuZyBIb3UgKOS+r+elpeiDnCk=?=)
Date: Tue, 20 Dec 2022 01:59:31 +0000
Subject: [PATCH v5 06/10] dt-bindings: spi: mtk-snfi: Add read latch
 latency property
In-Reply-To: <20221219153837.GA1426412-robh@kernel.org>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
	 <20221219024019.31974-7-xiangsheng.hou@mediatek.com>
	 <20221219153837.GA1426412-robh@kernel.org>
Message-ID: <9ec0b502a15bfe5717a5659b3c597b6dd6f0b629.camel@mediatek.com>

Hi Rob,

On Mon, 2022-12-19 at 09:38 -0600, Rob Herring wrote:
> On Mon, Dec 19, 2022 at 10:40:15AM +0800, Xiangsheng Hou wrote:
> > Add mediatek,rx-latch-latency-ns property which adjust data read
> > latch latency in the unit of nanoseconds.
> > 
> > Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> > Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
> > Reviewed-by: AngeloGioacchino Del Regno <
> > angelogioacchino.delregno at collabora.com>
> > ---
> >  .../devicetree/bindings/spi/mediatek,spi-mtk-snfi.yaml         | 3
> > +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/spi/mediatek,spi-
> > mtk-snfi.yaml b/Documentation/devicetree/bindings/spi/mediatek,spi-
> > mtk-snfi.yaml
> > index bab23f1b11fd..1e5e89a693c3 100644
> > --- a/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-
> > snfi.yaml
> > +++ b/Documentation/devicetree/bindings/spi/mediatek,spi-mtk-
> > snfi.yaml
> > @@ -45,6 +45,9 @@ properties:
> >      description: device-tree node of the accompanying ECC engine.
> >      $ref: /schemas/types.yaml#/definitions/phandle
> >  
> > +  mediatek,rx-latch-latency-ns:
> > +    description: Data read latch latency, unit is nanoseconds.
> 
> Doesn't the common 'rx-sample-delay-ns' work for you?

The driver need two timing related parameter, one for sample delay
which have been used by rx-sample-delay-ns. Another is read latency,
just introduce this private timing property since the common spi-rx-
delay-us is microsecond in unit.

Thanks
XIangsheng Hou

From Moudy.Ho at mediatek.com  Mon Dec 19 18:14:45 2022
From: Moudy.Ho at mediatek.com (=?utf-8?B?TW91ZHkgSG8gKOS9leWul+WOnyk=?=)
Date: Tue, 20 Dec 2022 02:14:45 +0000
Subject: [PATCH v4 0/8] add support MDP3 on MT8195 platform
In-Reply-To: <dba479ea-968f-89eb-fc59-8235cbb2783a@gmail.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
	 <5692faa0-6d7e-774f-9d6a-a495b44bdb3e@gmail.com>
	 <dba479ea-968f-89eb-fc59-8235cbb2783a@gmail.com>
Message-ID: <abfa4b935938a0b00bcccbc10e1a748f49f3497c.camel@mediatek.com>

On Mon, 2022-12-19 at 16:17 +0100, Matthias Brugger wrote:
> 
> On 16/12/2022 13:33, Matthias Brugger wrote:
> > 
> > Whole series applied, thanks!
> > 
> 
> And now, whole series reverted, please see comment in 1/8.
> 
> Regards,
> Matthias
> 

Hi Matthias,

May I send a new series without a fallback compatible like the mt8188
VDOSYS does?

https://patchwork.kernel.org/project/linux-mediatek/patch/20221206020046.11333-3-nathan.lu at mediatek.com/

Regards,
Moudy
> > On 07/12/2022 10:49, Moudy Ho wrote:
> > > From: mtk18742 <moudy.ho at mediatek.com>
> > > 
> > > Changes since v3:
> > > - Rebase on linux-next
> > > 
> > > Changes since v2:
> > > - Depend on :
> > >    [1] 
> > > https://urldefense.com/v3/__https://patchwork.kernel.org/project/linux-mediatek/list/?series=681097__;!!CTRNKA9wMg0ARbw!giZVy8TiFNylgWKOjI75fSmleN6UlckPuiXzFf5jbdVgFbHdIxG3d3Jvkqp7Eka73I2TmataD_d5QjzBnk6-sYY$?
> > >  
> > > - Split dts settings into two patches based on belonging to MMSYS
> > > or MUTEX.
> > > 
> > > Changes since v1:
> > > - Depend on :
> > >    [1] 
> > > https://urldefense.com/v3/__https://patchwork.kernel.org/project/linux-mediatek/list/?series=681097__;!!CTRNKA9wMg0ARbw!giZVy8TiFNylgWKOjI75fSmleN6UlckPuiXzFf5jbdVgFbHdIxG3d3Jvkqp7Eka73I2TmataD_d5QjzBnk6-sYY$?
> > >  
> > > - Add compatible names to VPPSYS0 and VPPSYS1 in MMSYS binding
> > > file.
> > > - Fix VPPSYS's MMSYS and MUTEX dts to pass the dtsb_check.
> > > - Rename mtk_mmsys_merge_config() and mtk_mmsys_rsz_dcm_config()
> > > to
> > >    mtk_mmsys_vpp_rsz_merge_config() and
> > > mtk_mmsys_vpp_rsz_dcm_config().
> > > - Clean up mtk_mmsys_vpp_rsz_dcm_config().
> > > - Add a comment to mtk_mutex_write_mod() and clean it up for use
> > > in more
> > >    than 32 mods.
> > > 
> > > Hi,
> > > 
> > > This series add support for MT8195's two VPPSYS(Video Processor
> > > Pipe Subsystem),
> > > under which there will be corresponding MMSYS and MUTEX settings
> > > that
> > > need to be configured.
> > > 
> > > Moudy Ho (2):
> > >    dt-bindings: arm: mediatek: mmsys: Add support for MT8195
> > > VPPSYS
> > >    arm64: dts: mediatek: mt8195: add MUTEX configuration for
> > > VPPSYS
> > > 
> > > Roy-CW.Yeh (6):
> > >    dt-bindings: soc: mediatek: Add support for MT8195 VPPSYS
> > >    arm64: dts: mediatek: mt8195: add MMSYS configuration for
> > > VPPSYS
> > >    soc: mediatek: mmsys: add support for MT8195 VPPSYS
> > >    soc: mediatek: mmsys: add config api for RSZ switching and DCM
> > >    soc: mediatek: mutex: Add mtk_mutex_set_mod support to set
> > > MOD1
> > >    soc: mediatek: mutex: support MT8195 VPPSYS
> > > 
> > >   .../bindings/arm/mediatek/mediatek,mmsys.yaml |   5 +-
> > >   .../bindings/soc/mediatek/mediatek,mutex.yaml |   1 +
> > >   arch/arm64/boot/dts/mediatek/mt8195.dtsi      |  28 +++-
> > >   drivers/soc/mediatek/mt8195-mmsys.h           |  13 ++
> > >   drivers/soc/mediatek/mtk-mmsys.c              |  64 +++++++++
> > >   drivers/soc/mediatek/mtk-mmsys.h              |   1 +
> > >   drivers/soc/mediatek/mtk-mutex.c              | 135
> > > +++++++++++++++++-
> > >   include/linux/soc/mediatek/mtk-mmsys.h        |   4 +
> > >   include/linux/soc/mediatek/mtk-mutex.h        |  35 +++++
> > >   9 files changed, 274 insertions(+), 12 deletions(-)
> > > 

From Xiangsheng.Hou at mediatek.com  Mon Dec 19 18:15:05 2022
From: Xiangsheng.Hou at mediatek.com (=?utf-8?B?WGlhbmdzaGVuZyBIb3UgKOS+r+elpeiDnCk=?=)
Date: Tue, 20 Dec 2022 02:15:05 +0000
Subject: [PATCH v5 01/10] spi: mtk-snfi: Change default page format to
 setup default setting
In-Reply-To: <5ebaf98b-a77e-3c5a-3e08-bbb0119558a2@gmail.com>
References: <20221219024019.31974-1-xiangsheng.hou@mediatek.com>
	 <20221219024019.31974-2-xiangsheng.hou@mediatek.com>
	 <5ebaf98b-a77e-3c5a-3e08-bbb0119558a2@gmail.com>
Message-ID: <b9295291171dad0a455928cdb44a8ca91782532d.camel@mediatek.com>

Hi Matthias,

On Mon, 2022-12-19 at 16:30 +0100, Matthias Brugger wrote:
> Thanks for your patch! There is something to improve please see
> below.
> 
> On 19/12/2022 03:40, Xiangsheng Hou wrote:
> > Change default page format to setup default setting since the
> > sector
> > size 1024 on MT7986 will lead to probe fail.
> > 
> > Signed-off-by: Xiangsheng Hou <xiangsheng.hou at mediatek.com>
> > ---
> >   drivers/spi/spi-mtk-snfi.c | 3 +--
> >   1 file changed, 1 insertion(+), 2 deletions(-)
> > 
> > diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-
> > snfi.c
> > index fa8412ba20e2..719fc6f53ab1 100644
> > --- a/drivers/spi/spi-mtk-snfi.c
> > +++ b/drivers/spi/spi-mtk-snfi.c
> > @@ -1430,8 +1430,7 @@ static int mtk_snand_probe(struct
> > platform_device *pdev)
> >   
> >   	// setup an initial page format for ops matching page_cache_op
> > template
> >   	// before ECC is called.
> > -	ret = mtk_snand_setup_pagefmt(ms, ms->caps->sector_size,
> > -				      ms->caps->spare_sizes[0]);
> > +	ret = mtk_snand_setup_pagefmt(ms, SZ_2K, SZ_64);
> 
> Couldn't you just set sector_size in mt7986_snand_caps?

The function mtk_snand_setup_pagefmt need use page and OOB size of NAND
device to setup pagefmt.
The controller page size can support 512/1k/2k/4k..., the sector size
1k have been set in mt7986_snand_caps. However this will also lead to
fail in this function since the 1k page size will not be supported.
Just use page size 2k and OOB size 64 as default parameter since this
can be supported by all ICs with this controller.

Thanks
Xiangsheng Hou

From Allen-KH.Cheng at mediatek.com  Mon Dec 19 18:36:25 2022
From: Allen-KH.Cheng at mediatek.com (=?utf-8?B?QWxsZW4tS0ggQ2hlbmcgKOeoi+WGoOWLsyk=?=)
Date: Tue, 20 Dec 2022 02:36:25 +0000
Subject: [PATCH 2/4] soc: mediatek: pm-domains: Add ADSP power domain data
 for MT8192
In-Reply-To: <9511c5b1-203b-a7e3-b96b-614e1c52639a@gmail.com>
References: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
	 <20221215120016.26611-3-allen-kh.cheng@mediatek.com>
	 <9511c5b1-203b-a7e3-b96b-614e1c52639a@gmail.com>
Message-ID: <952b9e987996e694695a24581a86582186200a87.camel@mediatek.com>

Hi Matthias,

Thanks for the reminder. I will check this and resend next version.

Best Regards,
Allen


-----Original Message-----
From: Matthias Brugger <matthias.bgg at gmail.com> 
Sent: Friday, December 16, 2022 7:16 PM
To: Allen-KH Cheng (???) <Allen-KH.Cheng at mediatek.com>; Rob Herring <
robh+dt at kernel.org>; Krzysztof Kozlowski <
krzysztof.kozlowski+dt at linaro.org>; Chun-Jie Chen (???) <
Chun-Jie.Chen at mediatek.com>; Stephen Boyd <sboyd at kernel.org>; Ikjoon
Jang <ikjn at chromium.org>
Cc: Project_Global_Chrome_Upstream_Group <
Project_Global_Chrome_Upstream_Group at mediatek.com>; 
angelogioacchino.delregno at collabora.com; devicetree at vger.kernel.org; 
linux-arm-kernel at lists.infradead.org; linux-kernel at vger.kernel.org; 
linux-mediatek at lists.infradead.org; Chen-Yu Tsai <wenst at chromium.org>
Subject: Re: [PATCH 2/4] soc: mediatek: pm-domains: Add ADSP power
domain data for MT8192



On 15/12/2022 13:00, Allen-KH Cheng wrote:
> Add ADSP pm-domains (mtcmos) data for MT8192 SoC.
> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> ---
>   drivers/soc/mediatek/mt8192-pm-domains.h | 16 ++++++++++++++++
>   1 file changed, 16 insertions(+)
> 
> diff --git a/drivers/soc/mediatek/mt8192-pm-domains.h
> b/drivers/soc/mediatek/mt8192-pm-domains.h
> index b97b2051920f..19e58f0ca1df 100644
> --- a/drivers/soc/mediatek/mt8192-pm-domains.h
> +++ b/drivers/soc/mediatek/mt8192-pm-domains.h
> @@ -287,6 +287,22 @@ static const struct scpsys_domain_data
> scpsys_domain_data_mt8192[] = {
>   		.sram_pdn_bits = GENMASK(8, 8),
>   		.sram_pdn_ack_bits = GENMASK(12, 12),
>   	},
> +	[MT8192_POWER_DOMAIN_ADSP] = {
> +		.name = "adsp",
> +		.sta_mask = BIT(22),
> +		.ctl_offs = 0x0358,
> +		.sram_pdn_bits = GENMASK(8, 8),
> +		.sram_pdn_ack_bits = GENMASK(12, 12),
> +		.ext_buck_iso_offs = 0x039C,
> +		.ext_buck_iso_mask = BIT(2),

Not defined in upstream. It seems we are missing something here.

Regards,
Matthias

> +		.bp_infracfg = {
> +			BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_ADSP,
> +				    MT8192_TOP_AXI_PROT_EN_2_SET,
> +				    MT8192_TOP_AXI_PROT_EN_2_CLR,
> +				    MT8192_TOP_AXI_PROT_EN_2_STA1),
> +		},
> +		.caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_EXT_BUCK_ISO,
> +	},
>   	[MT8192_POWER_DOMAIN_CAM] = {
>   		.name = "cam",
>   		.sta_mask = BIT(23),

From Sujuan.Chen at mediatek.com  Mon Dec 19 20:26:32 2022
From: Sujuan.Chen at mediatek.com (=?utf-8?B?U3VqdWFuIENoZW4gKOmZiOe0oOWonyk=?=)
Date: Tue, 20 Dec 2022 04:26:32 +0000
Subject: [PATCH,v2] wifi: mt76: mt7915: add wds support when wed is
 enabled
In-Reply-To: <c4f01e3e-4ae6-3d60-4fd0-b8d8bc5f4573@nbd.name>
References: <e603722d58079af98c57a3dc117274d824d1d832.1669798063.git.sujuan.chen@mediatek.com>
	 <c4f01e3e-4ae6-3d60-4fd0-b8d8bc5f4573@nbd.name>
Message-ID: <6a6d2c7c99306790ebfafbfe3223405d0d726a95.camel@mediatek.com>

On Fri, 2022-12-09 at 13:32 +0100, Felix Fietkau wrote:
> On 30.11.22 10:18, Sujuan Chen wrote:
> > The current WED only supports 256 wcid, whereas mt7986 can support
> > up to 512 entries,
> > so firmware provides a rule to get sta_info by DA when wcid is set
> > to 0x3ff by txd.
> > Also, WED provides a register to overwrite txd wcid, that is,
> > wcid[9:8] can
> > be overwritten by 0x3 and wcid[7:0] is set to 0xff by host driver.
> > 
> > However, firmware is unable to get sta_info from DA as DA != RA for
> > 4addr cases,
> > so firmware and wifi host driver both use wcid (256 - 271) and (768
> > ~ 783)
> > for sync up to get correct sta_info
> > 
> > Tested-by: Sujuan Chen <sujuan.chen at mediatek.com>
> > Co-developed-by: Bo Jiao <bo.jiao at mediatek.com>
> > Signed-off-by: Bo Jiao <bo.jiao at mediatek.com>
> > Signed-off-by: Sujuan Chen <sujuan.chen at mediatek.com>
> > ---
> > v2:
> >   - drop duplicate settings
> >   - reduce the patch size by redefining mt76_wcid_alloc
> > ---
> >   drivers/net/wireless/mediatek/mt76/mt76.h     |  6 +++
> >   .../net/wireless/mediatek/mt76/mt7915/main.c  | 24 +++++++++--
> >   .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 13 +++++-
> >   .../net/wireless/mediatek/mt76/mt7915/mcu.h   |  1 +
> >   drivers/net/wireless/mediatek/mt76/util.c     | 40
> > +++++++++++++++++--
> >   drivers/net/wireless/mediatek/mt76/util.h     |  7 +++-
> >   6 files changed, 82 insertions(+), 9 deletions(-)
> > 
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
> > b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
> > index c40b6098f19a..46a9e4f0396e 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
> > @@ -1115,6 +1122,13 @@ static void mt7915_sta_set_4addr(struct
> > ieee80211_hw *hw,
> >   	else
> >   		clear_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags);
> >   
> > +	if (mtk_wed_device_active(&dev->mt76.mmio.wed) &&
> > +	    !is_mt7915(&dev->mt76)) {
> > +		mt7915_sta_remove(hw, vif, sta);
> > +		mt76_sta_pre_rcu_remove(hw, vif, sta);
> > +		mt7915_sta_add(hw, vif, sta);
> > +	}
> > +
> >   	mt76_connac_mcu_wtbl_update_hdr_trans(&dev->mt76, vif, sta);
> >   }
> >   
> 
> I suspect that this may a bit racy if there is concurrent tx
> activity 
> (e.g. for EAP auth). Not sure if this could cause problems for the 
> firmware or other kinds of bugs.
> 
> While my idea may need some rework of the existing functions, I think
> a 
> better flow would be:
> 
> 1. mt76_sta_pre_rcu_remove
> 2. save old wcid
> 3. mt7915_sta_add
> 4. synchronize_rcu()
> 5. remove firmware state for old wcid entry
> 
Hi Felix,

Can we modify it like this:

1. pre_sta = kzalloc(sizeof(*sta) + sizeof(*msta), GFP_KERNEL);
2. mt76_sta_pre_rcu_remove
3. memmove(old_sta, sta, sizeof(*sta) + sizeof(*msta))
4. mt7915_sta_add
5. synchronize_rcu()
6. mt7915_sta_remove(hw, vif, pre_sta)
7. kfree(pre_sta)

we can reuse mt7915_sta_remove and keep the sta info for 
mt7915_mcu_add_sta.

if save old wcid only, we need to rework __mt76_sta_remove and
mt7915_mcu_add_sta functions by add wcid as parameter.
__mt76_sta_remove is required to delete a wcid, right?

-sujuan

> - Felix

From Moudy.Ho at mediatek.com  Mon Dec 19 19:40:45 2022
From: Moudy.Ho at mediatek.com (=?utf-8?B?TW91ZHkgSG8gKOS9leWul+WOnyk=?=)
Date: Tue, 20 Dec 2022 03:40:45 +0000
Subject: [PATCH v4 0/8] add support MDP3 on MT8195 platform
In-Reply-To: <abfa4b935938a0b00bcccbc10e1a748f49f3497c.camel@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
	 <5692faa0-6d7e-774f-9d6a-a495b44bdb3e@gmail.com>
	 <dba479ea-968f-89eb-fc59-8235cbb2783a@gmail.com>
	 <abfa4b935938a0b00bcccbc10e1a748f49f3497c.camel@mediatek.com>
Message-ID: <212871d92b8062250c83c9db006c1c628b798280.camel@mediatek.com>

On Tue, 2022-12-20 at 10:14 +0800, moudy ho wrote:
> On Mon, 2022-12-19 at 16:17 +0100, Matthias Brugger wrote:
> > 
> > On 16/12/2022 13:33, Matthias Brugger wrote:
> > > 
> > > Whole series applied, thanks!
> > > 
> > 
> > And now, whole series reverted, please see comment in 1/8.
> > 
> > Regards,
> > Matthias
> > 
> 
> Hi Matthias,
> 
> May I send a new series without a fallback compatible like the mt8188
> VDOSYS does?
> 
> 
https://patchwork.kernel.org/project/linux-mediatek/patch/20221206020046.11333-3-nathan.lu at mediatek.com/
> 
> Regards,
> Moudy

Hi Matthias,

Sorry for the inaccurate information, the warning mentioned in [1/8] is
because vppsys 0/1 has already been defined in "mediatek,mt8195-
clock.yaml" as follows:

https://patchwork.kernel.org/project/linux-mediatek/patch/20210914021633.26377-2-chun-jie.chen at mediatek.com/

Is it possible to fix it by just removing [1/8], or should I send a new
series?

Regards,
Moudy

> > > On 07/12/2022 10:49, Moudy Ho wrote:
> > > > From: mtk18742 <moudy.ho at mediatek.com>
> > > > 
> > > > Changes since v3:
> > > > - Rebase on linux-next
> > > > 
> > > > Changes since v2:
> > > > - Depend on :
> > > >    [1] 
> > > > 
https://urldefense.com/v3/__https://patchwork.kernel.org/project/linux-mediatek/list/?series=681097__;!!CTRNKA9wMg0ARbw!giZVy8TiFNylgWKOjI75fSmleN6UlckPuiXzFf5jbdVgFbHdIxG3d3Jvkqp7Eka73I2TmataD_d5QjzBnk6-sYY$
> > > >  
> > > >  
> > > > - Split dts settings into two patches based on belonging to
> > > > MMSYS
> > > > or MUTEX.
> > > > 
> > > > Changes since v1:
> > > > - Depend on :
> > > >    [1] 
> > > > 
https://urldefense.com/v3/__https://patchwork.kernel.org/project/linux-mediatek/list/?series=681097__;!!CTRNKA9wMg0ARbw!giZVy8TiFNylgWKOjI75fSmleN6UlckPuiXzFf5jbdVgFbHdIxG3d3Jvkqp7Eka73I2TmataD_d5QjzBnk6-sYY$
> > > >  
> > > >  
> > > > - Add compatible names to VPPSYS0 and VPPSYS1 in MMSYS binding
> > > > file.
> > > > - Fix VPPSYS's MMSYS and MUTEX dts to pass the dtsb_check.
> > > > - Rename mtk_mmsys_merge_config() and
> > > > mtk_mmsys_rsz_dcm_config()
> > > > to
> > > >    mtk_mmsys_vpp_rsz_merge_config() and
> > > > mtk_mmsys_vpp_rsz_dcm_config().
> > > > - Clean up mtk_mmsys_vpp_rsz_dcm_config().
> > > > - Add a comment to mtk_mutex_write_mod() and clean it up for
> > > > use
> > > > in more
> > > >    than 32 mods.
> > > > 
> > > > Hi,
> > > > 
> > > > This series add support for MT8195's two VPPSYS(Video Processor
> > > > Pipe Subsystem),
> > > > under which there will be corresponding MMSYS and MUTEX
> > > > settings
> > > > that
> > > > need to be configured.
> > > > 
> > > > Moudy Ho (2):
> > > >    dt-bindings: arm: mediatek: mmsys: Add support for MT8195
> > > > VPPSYS
> > > >    arm64: dts: mediatek: mt8195: add MUTEX configuration for
> > > > VPPSYS
> > > > 
> > > > Roy-CW.Yeh (6):
> > > >    dt-bindings: soc: mediatek: Add support for MT8195 VPPSYS
> > > >    arm64: dts: mediatek: mt8195: add MMSYS configuration for
> > > > VPPSYS
> > > >    soc: mediatek: mmsys: add support for MT8195 VPPSYS
> > > >    soc: mediatek: mmsys: add config api for RSZ switching and
> > > > DCM
> > > >    soc: mediatek: mutex: Add mtk_mutex_set_mod support to set
> > > > MOD1
> > > >    soc: mediatek: mutex: support MT8195 VPPSYS
> > > > 
> > > >   .../bindings/arm/mediatek/mediatek,mmsys.yaml |   5 +-
> > > >   .../bindings/soc/mediatek/mediatek,mutex.yaml |   1 +
> > > >   arch/arm64/boot/dts/mediatek/mt8195.dtsi      |  28 +++-
> > > >   drivers/soc/mediatek/mt8195-mmsys.h           |  13 ++
> > > >   drivers/soc/mediatek/mtk-mmsys.c              |  64 +++++++++
> > > >   drivers/soc/mediatek/mtk-mmsys.h              |   1 +
> > > >   drivers/soc/mediatek/mtk-mutex.c              | 135
> > > > +++++++++++++++++-
> > > >   include/linux/soc/mediatek/mtk-mmsys.h        |   4 +
> > > >   include/linux/soc/mediatek/mtk-mutex.h        |  35 +++++
> > > >   9 files changed, 274 insertions(+), 12 deletions(-)
> > > > 

From Sujuan.Chen at mediatek.com  Mon Dec 19 20:42:33 2022
From: Sujuan.Chen at mediatek.com (=?utf-8?B?U3VqdWFuIENoZW4gKOmZiOe0oOWonyk=?=)
Date: Tue, 20 Dec 2022 04:42:33 +0000
Subject: [PATCH v2] wifi: mt76: fix potential memory leakage
In-Reply-To: <Y6A1Et1yzcWnWhpy@lore-desk>
References: <0a218783098a6b1b90ff120c7182acee93dc8feb.1671423784.git.Bo.Jiao@mediatek.com>
	 <Y6A1Et1yzcWnWhpy@lore-desk>
Message-ID: <9d8aa92e3650128c94af91435a222c00ff2acb1c.camel@mediatek.com>

On Mon, 2022-12-19 at 10:55 +0100, Lorenzo Bianconi wrote:
> > From: Bo Jiao <Bo.Jiao at mediatek.com>
> > 
> > fix potential memory leakage, recycle rxwi when mt76_dma_add_buf()
> > call fail.
> > 
> > Signed-off-by: Bo Jiao <Bo.Jiao at mediatek.com>
> > ---
> > v2:
> > - recycle rxwi when page_frag_alloc() and dma_map_single() fail.
> > ---
> >  drivers/net/wireless/mediatek/mt76/dma.c | 27 ++++++++++++++----
> > ------
> >  1 file changed, 16 insertions(+), 11 deletions(-)
> > 
> > diff --git a/drivers/net/wireless/mediatek/mt76/dma.c
> > b/drivers/net/wireless/mediatek/mt76/dma.c
> > index fc24b35..76ad47d 100644
> > --- a/drivers/net/wireless/mediatek/mt76/dma.c
> > +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> > @@ -580,24 +580,29 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
> > mt76_queue *q)
> >  
> >  		buf = page_frag_alloc(&q->rx_page, q->buf_size,
> > GFP_ATOMIC);
> >  		if (!buf)
> > -			break;
> > +			goto out;
> >  
> >  		addr = dma_map_single(dev->dma_dev, buf, len,
> > DMA_FROM_DEVICE);
> > -		if (unlikely(dma_mapping_error(dev->dma_dev, addr))) {
> > -			skb_free_frag(buf);
> > -			break;
> > -		}
> > +		if (unlikely(dma_mapping_error(dev->dma_dev, addr)))
> > +			goto free;
> >  
> >  		qbuf.addr = addr + offset;
> >  		qbuf.len = len - offset;
> >  		qbuf.skip_unmap = false;
> > -		if (mt76_dma_add_buf(dev, q, &qbuf, 1, 0, buf, t) < 0)
> > {
> > -			dma_unmap_single(dev->dma_dev, addr, len,
> > -					 DMA_FROM_DEVICE);
> > -			skb_free_frag(buf);
> > -			break;
> > -		}
> > +		if (mt76_dma_add_buf(dev, q, &qbuf, 1, 0, buf, t) < 0)
> > +			goto umap;
> > +
> >  		frames++;
> > +		continue;
> > +
> > +umap:
> > +		dma_unmap_single(dev->dma_dev, addr, len,
> > +				 DMA_FROM_DEVICE);
> > +free:
> > +		skb_free_frag(buf);
> > +out:
> > +		mt76_put_rxwi(dev, t);
> > +		break;
> >  	}
> >  
> >  	if (frames)
> 
> Hi Bo,
> 
> I guess in the way below, the code is more readable, what do you
> think?
> 
> Regards,
> Lorenzo
> 
> diff --git a/drivers/net/wireless/mediatek/mt76/dma.c
> b/drivers/net/wireless/mediatek/mt76/dma.c
> index fad5fe19fe18..001538f698f1 100644
> --- a/drivers/net/wireless/mediatek/mt76/dma.c
> +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> @@ -571,13 +571,6 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
> mt76_queue *q)
>  		struct mt76_queue_buf qbuf;
>  		void *buf = NULL;
>  
> -		if ((q->flags & MT_QFLAG_WED) &&
> -		    FIELD_GET(MT_QFLAG_WED_TYPE, q->flags) ==
> MT76_WED_Q_RX) {
> -			t = mt76_get_rxwi(dev);
> -			if (!t)
> -				break;
> -		}
> -
>  		buf = page_frag_alloc(&q->rx_page, q->buf_size,
> GFP_ATOMIC);
>  		if (!buf)
>  			break;
> @@ -588,16 +581,27 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
> mt76_queue *q)
>  			break;
>  		}
>  
> +		if ((q->flags & MT_QFLAG_WED) &&
> +		    FIELD_GET(MT_QFLAG_WED_TYPE, q->flags) ==
> MT76_WED_Q_RX) {
> +			t = mt76_get_rxwi(dev);
> +			if (!t)
> +				goto unmap;
> +		}
> +
>  		qbuf.addr = addr + offset;
>  		qbuf.len = len - offset;
>  		qbuf.skip_unmap = false;
> -		if (mt76_dma_add_buf(dev, q, &qbuf, 1, 0, buf, t) < 0)
> {
> -			dma_unmap_single(dev->dma_dev, addr, len,
> -					 DMA_FROM_DEVICE);
> -			skb_free_frag(buf);
> -			break;
> +
> +		if (!mt76_dma_add_buf(dev, q, &qbuf, 1, 0, buf, t)) {
> +			frames++;
> +			continue;
>  		}
> -		frames++;
> +
> +unmap:
> +		dma_unmap_single(dev->dma_dev, addr, len,
> DMA_FROM_DEVICE);
> +		skb_free_frag(buf);
> +		mt76_put_rxwi(dev, t);
> +		break;
>  	}
>  
>  	if (frames)
> 
Hi Lore,

we love your patch, but we have another patch to avoid memory
fragmentation by duplicating the rx skb after mt76_dma_dequeue(). it
requires mt76_get_rxwi() be placed before page_frag_alloc().

the below patch(need rebase) will be sent after the current patch is
accepted.

--- a/drivers/net/wireless/mediatek/mt76/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/dma.c
@@ -386,9 +386,11 @@ mt76_dma_get_buf(struct mt76_dev *dev, struct
mt76_queue *q, int idx,
                                 SKB_WITH_OVERHEAD(q->buf_size),
                                 DMA_FROM_DEVICE);

-               buf = t->ptr;
+               buf = page_frag_alloc(&q->rx_page, q->buf_size,
GFP_ATOMIC);
+               if (!buf)
+                       return NULL;
+               memcpy(buf, t->ptr, SKB_WITH_OVERHEAD(q->buf_size));
                t->dma_addr = 0;
-               t->ptr = NULL;

                mt76_put_rxwi(dev, t);

@@ -569,6 +571,7 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
mt76_queue *q)
        while (q->queued < q->ndesc - 1) {
                struct mt76_txwi_cache *t = NULL;
                struct mt76_queue_buf qbuf;
+               bool skip_alloc = false;
                void *buf = NULL;

                if ((q->flags & MT_QFLAG_WED) &&
@@ -576,11 +579,19 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
mt76_queue *q)
                        t = mt76_get_rxwi(dev);
                        if (!t)
                                break;
+
+                       if (t->ptr) {
+                               skip_alloc = true;
+                               buf = t->ptr;
+                       }
                }

-               buf = page_frag_alloc(&q->rx_page, q->buf_size,
GFP_ATOMIC);
-               if (!buf)
-                       break;
+               if (!skip_alloc) {
+                       buf = page_frag_alloc(&q->rx_page, q->buf_size,
+                                             GFP_ATOMIC);
+                       if (!buf)
+                               break;
+               }

                addr = dma_map_single(dev->dma_dev, buf, len,
DMA_FROM_DEVICE);
                if (unlikely(dma_mapping_error(dev->dma_dev, addr))) {
--
2.18.0

> > -- 
> > 2.18.0
> > 

From sujuan.chen at mediatek.com  Mon Dec 19 22:27:54 2022
From: sujuan.chen at mediatek.com (Sujuan Chen)
Date: Tue, 20 Dec 2022 14:27:54 +0800
Subject: [PATCH,v3] wifi: mt76: mt7915: add wds support when wed is enabled
Message-ID: <6f80d1b49a97d2a08f6ec45f335a1fc8de21ebb9.1671454422.git.sujuan.chen@mediatek.com>

The current WED only supports 256 wcid, whereas mt7986 can support up to 512 entries,
so firmware provides a rule to get sta_info by DA when wcid is set to 0x3ff by txd.
Also, WED provides a register to overwrite txd wcid, that is, wcid[9:8] can
be overwritten by 0x3 and wcid[7:0] is set to 0xff by host driver.

However, firmware is unable to get sta_info from DA as DA != RA for 4addr cases,
so firmware and wifi host driver both use wcid (256 - 271) and (768 ~ 783)
for sync up to get correct sta_info

Tested-by: Sujuan Chen <sujuan.chen at mediatek.com>
Co-developed-by: Bo Jiao <bo.jiao at mediatek.com>
Signed-off-by: Bo Jiao <bo.jiao at mediatek.com>
Signed-off-by: Sujuan Chen <sujuan.chen at mediatek.com>
---
v2: 
 - drop duplicate setting in mmio
 - reduce the patch size by redefining mt76_wcid_alloc
v3:
 - rework wds wcid getting flow
---
 drivers/net/wireless/mediatek/mt76/mt76.h     |  9 +++++
 .../net/wireless/mediatek/mt76/mt7915/main.c  | 32 ++++++++++++++--
 .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 13 ++++++-
 .../net/wireless/mediatek/mt76/mt7915/mcu.h   |  1 +
 drivers/net/wireless/mediatek/mt76/util.c     | 37 +++++++++++++++++--
 drivers/net/wireless/mediatek/mt76/util.h     |  7 +++-
 6 files changed, 90 insertions(+), 9 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
index 1037d23bc4d0..24d7d59d6ca7 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
@@ -27,6 +27,9 @@
 
 #define MT76_TOKEN_FREE_THR	64
 
+#define MT76_WED_WDS_MIN    256
+#define MT76_WED_WDS_MAX    272
+
 #define MT_QFLAG_WED_RING	GENMASK(1, 0)
 #define MT_QFLAG_WED_TYPE	GENMASK(3, 2)
 #define MT_QFLAG_WED		BIT(4)
@@ -60,6 +63,12 @@ enum mt76_wed_type {
 	MT76_WED_Q_RX,
 };
 
+enum mt76_wed_state {
+	MT76_WED_DEFAULT,
+	MT76_WED_ACTIVE,
+	MT76_WED_WDS_ACTIVE,
+};
+
 struct mt76_bus_ops {
 	u32 (*rr)(struct mt76_dev *dev, u32 offset);
 	void (*wr)(struct mt76_dev *dev, u32 offset, u32 val);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
index 0511d6a505b0..ce95cfa1300d 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
@@ -664,8 +664,15 @@ int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
 	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
 	bool ext_phy = mvif->phy != &dev->phy;
 	int ret, idx;
+	u8 flags = MT76_WED_DEFAULT;
 
-	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7915_WTBL_STA);
+	if (mtk_wed_device_active(&dev->mt76.mmio.wed) &&
+	    !is_mt7915(&dev->mt76)) {
+		flags = test_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags) ?
+		       MT76_WED_WDS_ACTIVE : MT76_WED_ACTIVE;
+	}
+
+	idx = __mt76_wcid_alloc(mdev->wcid_mask, MT7915_WTBL_STA, flags);
 	if (idx < 0)
 		return -ENOSPC;
 
@@ -1115,12 +1122,27 @@ static void mt7915_sta_set_4addr(struct ieee80211_hw *hw,
 {
 	struct mt7915_dev *dev = mt7915_hw_dev(hw);
 	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
+	int min = MT76_WED_WDS_MIN, max = MT76_WED_WDS_MAX;
 
 	if (enabled)
 		set_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags);
 	else
 		clear_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags);
 
+	if (mtk_wed_device_active(&dev->mt76.mmio.wed) &&
+	    !is_mt7915(&dev->mt76) &&
+	    (msta->wcid.idx < min || msta->wcid.idx > max - 1)) {
+		struct ieee80211_sta *pre_sta;
+
+		pre_sta = kzalloc(sizeof(*sta) + sizeof(*msta), GFP_KERNEL);
+		mt76_sta_pre_rcu_remove(hw, vif, sta);
+		memmove(pre_sta, sta, sizeof(*sta) + sizeof(*msta));
+		mt7915_sta_add(hw, vif, sta);
+		synchronize_rcu();
+		mt7915_sta_remove(hw, vif, pre_sta);
+		kfree(pre_sta);
+	}
+
 	mt76_connac_mcu_wtbl_update_hdr_trans(&dev->mt76, vif, sta);
 }
 
@@ -1485,15 +1507,19 @@ mt7915_net_fill_forward_path(struct ieee80211_hw *hw,
 	if (!mtk_wed_device_active(wed))
 		return -ENODEV;
 
-	if (msta->wcid.idx > 0xff)
+	if (msta->wcid.idx > MT7915_WTBL_STA)
 		return -EIO;
 
 	path->type = DEV_PATH_MTK_WDMA;
 	path->dev = ctx->dev;
 	path->mtk_wdma.wdma_idx = wed->wdma_idx;
 	path->mtk_wdma.bss = mvif->mt76.idx;
-	path->mtk_wdma.wcid = is_mt7915(&dev->mt76) ? msta->wcid.idx : 0x3ff;
 	path->mtk_wdma.queue = phy != &dev->phy;
+	if (test_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags) ||
+	    is_mt7915(&dev->mt76))
+		path->mtk_wdma.wcid = msta->wcid.idx;
+	else
+		path->mtk_wdma.wcid = 0x3ff;
 
 	ctx->dev = NULL;
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
index 37a3c1f082d9..c566ea0f5022 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
@@ -2323,8 +2323,17 @@ int mt7915_mcu_init_firmware(struct mt7915_dev *dev)
 	if (ret)
 		return ret;
 
-	if (mtk_wed_device_active(&dev->mt76.mmio.wed) && is_mt7915(&dev->mt76))
-		mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(CAPABILITY), 0, 0, 0);
+	if (mtk_wed_device_active(&dev->mt76.mmio.wed)) {
+		if (is_mt7915(&dev->mt76))
+			ret = mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(CAPABILITY),
+						0, 0, 0);
+		else
+			ret = mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET),
+						MCU_WA_PARAM_WED_VERSION,
+						dev->mt76.mmio.wed.rev_id, 0);
+		if (ret)
+			return ret;
+	}
 
 	ret = mt7915_mcu_set_mwds(dev, 1);
 	if (ret)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
index 29b5434bfdb8..f96cdf1cc626 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
@@ -278,6 +278,7 @@ enum {
 	MCU_WA_PARAM_PDMA_RX = 0x04,
 	MCU_WA_PARAM_CPU_UTIL = 0x0b,
 	MCU_WA_PARAM_RED = 0x0e,
+	MCU_WA_PARAM_WED_VERSION = 0x32,
 };
 
 enum mcu_mmps_mode {
diff --git a/drivers/net/wireless/mediatek/mt76/util.c b/drivers/net/wireless/mediatek/mt76/util.c
index 581964425468..0112f1bd7219 100644
--- a/drivers/net/wireless/mediatek/mt76/util.c
+++ b/drivers/net/wireless/mediatek/mt76/util.c
@@ -42,9 +42,11 @@ bool __mt76_poll_msec(struct mt76_dev *dev, u32 offset, u32 mask, u32 val,
 }
 EXPORT_SYMBOL_GPL(__mt76_poll_msec);
 
-int mt76_wcid_alloc(u32 *mask, int size)
+int __mt76_wcid_alloc(u32 *mask, int size, u8 flag)
 {
 	int i, idx = 0, cur;
+	int min = MT76_WED_WDS_MIN;
+	int max = MT76_WED_WDS_MAX;
 
 	for (i = 0; i < DIV_ROUND_UP(size, 32); i++) {
 		idx = ffs(~mask[i]);
@@ -53,16 +55,45 @@ int mt76_wcid_alloc(u32 *mask, int size)
 
 		idx--;
 		cur = i * 32 + idx;
-		if (cur >= size)
+
+		switch (flag) {
+		case MT76_WED_ACTIVE:
+			if (cur >= min && cur < max)
+				continue;
+
+			if (cur >= size) {
+				u32 end = max - min - 1;
+
+				i = min / 32;
+				idx = ffs(~mask[i] & GENMASK(end, 0));
+				if (!idx)
+					goto error;
+				idx--;
+				cur = min + idx;
+			}
+
 			break;
+		case MT76_WED_WDS_ACTIVE:
+			if (cur < min)
+				continue;
+			if (cur >= max)
+				goto error;
+
+			break;
+		default:
+			if (cur >= size)
+				goto error;
+			break;
+		}
 
 		mask[i] |= BIT(idx);
 		return cur;
 	}
 
+error:
 	return -1;
 }
-EXPORT_SYMBOL_GPL(mt76_wcid_alloc);
+EXPORT_SYMBOL_GPL(__mt76_wcid_alloc);
 
 int mt76_get_min_avg_rssi(struct mt76_dev *dev, bool ext_phy)
 {
diff --git a/drivers/net/wireless/mediatek/mt76/util.h b/drivers/net/wireless/mediatek/mt76/util.h
index 260965dde94c..99b7263c0a20 100644
--- a/drivers/net/wireless/mediatek/mt76/util.h
+++ b/drivers/net/wireless/mediatek/mt76/util.h
@@ -27,7 +27,12 @@ enum {
 #define MT76_INCR(_var, _size) \
 	(_var = (((_var) + 1) % (_size)))
 
-int mt76_wcid_alloc(u32 *mask, int size);
+int __mt76_wcid_alloc(u32 *mask, int size, u8 flags);
+
+static inline int mt76_wcid_alloc(u32 *mask, int size)
+{
+	return __mt76_wcid_alloc(mask, size, 0);
+}
 
 static inline void
 mt76_wcid_mask_set(u32 *mask, int idx)
-- 
2.18.0



From angelogioacchino.delregno at collabora.com  Tue Dec 20 01:32:56 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 20 Dec 2022 10:32:56 +0100
Subject: [PATCH v2,5/7] media: mediatek: vcodec: remove unused lat_buf
In-Reply-To: <20221219064332.2124-6-yunfei.dong@mediatek.com>
References: <20221219064332.2124-1-yunfei.dong@mediatek.com>
 <20221219064332.2124-6-yunfei.dong@mediatek.com>
Message-ID: <56fb0497-adb0-4f31-7051-b3324372ff58@collabora.com>

Il 19/12/22 07:43, Yunfei Dong ha scritto:
> Remove unused lat_buf from core list, or leading to core list access
> NULL point.
> 
> Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 20 01:33:00 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 20 Dec 2022 10:33:00 +0100
Subject: [PATCH v2,4/7] media: mediatek: vcodec: add core decode done
 event
In-Reply-To: <20221219064332.2124-5-yunfei.dong@mediatek.com>
References: <20221219064332.2124-1-yunfei.dong@mediatek.com>
 <20221219064332.2124-5-yunfei.dong@mediatek.com>
Message-ID: <e8f4857f-85e3-d5a0-50c2-534b24c11cf4@collabora.com>

Il 19/12/22 07:43, Yunfei Dong ha scritto:
> Need to make sure core decode done before current instance is free.
> 
> Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 20 01:33:01 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 20 Dec 2022 10:33:01 +0100
Subject: [PATCH v2,1/7] media: mediatek: vcodec: add params to record lat
 and core lat_buf count
In-Reply-To: <20221219064332.2124-2-yunfei.dong@mediatek.com>
References: <20221219064332.2124-1-yunfei.dong@mediatek.com>
 <20221219064332.2124-2-yunfei.dong@mediatek.com>
Message-ID: <aac93a83-11d5-bb4e-f79b-cf706323f47b@collabora.com>

Il 19/12/22 07:43, Yunfei Dong ha scritto:
> Using lat_buf to share decoder information between lat and core work
> queue, adding params to record the buf count.
> 
> Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 20 01:32:58 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 20 Dec 2022 10:32:58 +0100
Subject: [PATCH v2,7/7] media: mediatek: vcodec: change lat thread decode
 error condition
In-Reply-To: <20221219064332.2124-8-yunfei.dong@mediatek.com>
References: <20221219064332.2124-1-yunfei.dong@mediatek.com>
 <20221219064332.2124-8-yunfei.dong@mediatek.com>
Message-ID: <74530fb2-d7c0-c9dc-7ccc-2f1483b57f92@collabora.com>

Il 19/12/22 07:43, Yunfei Dong ha scritto:
> If lat thread can't get lat buffer, it should be that current instance
> don't be schedulded, the driver can't free the src buffer directly.
> 
> Fixes: 7b182b8d9c85 ("media: mediatek: vcodec: Refactor get and put capture buffer flow")
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 20 01:33:03 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 20 Dec 2022 10:33:03 +0100
Subject: [PATCH v2,2/7] media: mediatek: vcodec: using each instance
 lat_buf count replace core ready list
In-Reply-To: <20221219064332.2124-3-yunfei.dong@mediatek.com>
References: <20221219064332.2124-1-yunfei.dong@mediatek.com>
 <20221219064332.2124-3-yunfei.dong@mediatek.com>
Message-ID: <a985b725-6a46-57ae-129c-d395961e797d@collabora.com>

Il 19/12/22 07:43, Yunfei Dong ha scritto:
> Core Hardware decoder depends on each instance lat_buf count,
> calling queue_work decode again when the lat_buf count of each instance
> isn't zero.
> 
> Fixes: 365e4ba01df4 ("media: mtk-vcodec: Add work queue for core hardware decode")
> Signed-off-by: Yunfei Dong <yunfei.dong at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 20 01:42:42 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 20 Dec 2022 10:42:42 +0100
Subject: [PATCH] iommu/mediatek-v1: Fix an error handling path in
 mtk_iommu_v1_probe()
In-Reply-To: <593e7b7d97c6e064b29716b091a9d4fd122241fb.1671473163.git.christophe.jaillet@wanadoo.fr>
References: <593e7b7d97c6e064b29716b091a9d4fd122241fb.1671473163.git.christophe.jaillet@wanadoo.fr>
Message-ID: <51e82ede-a6d4-8e7b-88d1-93a1aba1f845@collabora.com>

Il 19/12/22 19:06, Christophe JAILLET ha scritto:
> A clk, prepared and enabled in mtk_iommu_v1_hw_init(), is not released in
> the error handling path of mtk_iommu_v1_probe().
> 
> Add the corresponding clk_disable_unprepare(), as already done in the
> remove function.
> 
> Fixes: b17336c55d89 ("iommu/mediatek: add support for mtk iommu generation one HW")
> Signed-off-by: Christophe JAILLET <christophe.jaillet at wanadoo.fr>
> Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Tue Dec 20 01:53:19 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 20 Dec 2022 10:53:19 +0100
Subject: [V2] media: jpeg: Fix multi-hw judgement
In-Reply-To: <20221216035247.18816-1-irui.wang@mediatek.com>
References: <20221216035247.18816-1-irui.wang@mediatek.com>
Message-ID: <4c198fb0-48a7-2e4d-3363-7eac47a0d5a7@collabora.com>

Il 16/12/22 04:52, Irui Wang ha scritto:
> From: kyrie wu <kyrie.wu at mediatek.com>
> 
> some chips have multi-hw, but others have only one,
> modify the condition of multi-hw judgement
> 
> Fixs: 934e8bccac95 ("mtk-jpegenc: support jpegenc multi-hardware")

Typo. s/Fixs/Fixes/g

Fix that, please.

Regards,
Angelo



From Roger.Lu at mediatek.com  Tue Dec 20 03:03:36 2022
From: Roger.Lu at mediatek.com (=?utf-8?B?Um9nZXIgTHUgKOmZuOeRnuWCkSk=?=)
Date: Tue, 20 Dec 2022 11:03:36 +0000
Subject: [PATCH] soc: mediatek: mtk-svs: Enable the IRQ later
In-Reply-To: <b8b14bcb-845f-aa18-f8aa-ad0bed9fb0bb@gmail.com>
References: <20221127-mtk-svs-v1-0-7a5819595838@chromium.org>
	 <d683a2e7-b886-9bf6-27df-d8c67cedbbdd@collabora.com>
	 <b8b14bcb-845f-aa18-f8aa-ad0bed9fb0bb@gmail.com>
Message-ID: <52fb6ccf3fe1cb11f3e330ecc4d9c6cf1225c98a.camel@mediatek.com>

Hi Matthias Sir,

After applying this patch, SVS probes fail as below on my MT8192 platform. If
thing isn't too late, please do not merge this patch. I'll ask Ricardo how to
reproduce this issue and give the correct solution. Thanks in advance.

#MT8192 platform SVS probe fail log
[   10.209430]  SVSB_GPU_LOW: init02 completion timeout
[   10.214402] mtk-svs 1100b000.svs: svs start fail: -16
[   10.219479] mtk-svs: probe of 1100b000.svs failed with error -16

Hi Ricardo,

Could you share us how you reproduce this issue? I have MT8192 Chromebook and
can give it a try to reproduce the issue you encountered. Thanks a lot.

Sincerely,
Roger Lu.

On Fri, 2022-12-16 at 13:47 +0100, Matthias Brugger wrote:
> 
> On 30/11/2022 12:00, AngeloGioacchino Del Regno wrote:
> > Il 27/11/22 21:22, Ricardo Ribalda ha scritto:
> > > If the system does not come from reset (like when is booted via
> > > kexec()), the peripheral might triger an IRQ before the data structures
> > > are initialised.
> > > 
> > > Fixes:
> > > 
> > > [    0.227710] Unable to handle kernel NULL pointer dereference at
> > > virtual 
> > > address 0000000000000f08
> > > [    0.227913] Call trace:
> > > [    0.227918]  svs_isr+0x8c/0x538
> > > 
> > > Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
> > 
> > Reviewed-by: AngeloGioacchino Del Regno <
> > angelogioacchino.delregno at collabora.com>
> > 
> > 
> 
> Applied thanks!
> 

From Roger.Lu at mediatek.com  Tue Dec 20 03:03:36 2022
From: Roger.Lu at mediatek.com (=?utf-8?B?Um9nZXIgTHUgKOmZuOeRnuWCkSk=?=)
Date: Tue, 20 Dec 2022 11:03:36 +0000
Subject: [PATCH] soc: mediatek: mtk-svs: Enable the IRQ later
In-Reply-To: <b8b14bcb-845f-aa18-f8aa-ad0bed9fb0bb@gmail.com>
References: <20221127-mtk-svs-v1-0-7a5819595838@chromium.org>
	 <d683a2e7-b886-9bf6-27df-d8c67cedbbdd@collabora.com>
	 <b8b14bcb-845f-aa18-f8aa-ad0bed9fb0bb@gmail.com>
Message-ID: <52fb6ccf3fe1cb11f3e330ecc4d9c6cf1225c98a.camel@mediatek.com>

Hi Matthias Sir,

After applying this patch, SVS probes fail as below on my MT8192 platform. If
thing isn't too late, please do not merge this patch. I'll ask Ricardo how to
reproduce this issue and give the correct solution. Thanks in advance.

#MT8192 platform SVS probe fail log
[   10.209430]  SVSB_GPU_LOW: init02 completion timeout
[   10.214402] mtk-svs 1100b000.svs: svs start fail: -16
[   10.219479] mtk-svs: probe of 1100b000.svs failed with error -16

Hi Ricardo,

Could you share us how you reproduce this issue? I have MT8192 Chromebook and
can give it a try to reproduce the issue you encountered. Thanks a lot.

Sincerely,
Roger Lu.

On Fri, 2022-12-16 at 13:47 +0100, Matthias Brugger wrote:
> 
> On 30/11/2022 12:00, AngeloGioacchino Del Regno wrote:
> > Il 27/11/22 21:22, Ricardo Ribalda ha scritto:
> > > If the system does not come from reset (like when is booted via
> > > kexec()), the peripheral might triger an IRQ before the data structures
> > > are initialised.
> > > 
> > > Fixes:
> > > 
> > > [    0.227710] Unable to handle kernel NULL pointer dereference at
> > > virtual 
> > > address 0000000000000f08
> > > [    0.227913] Call trace:
> > > [    0.227918]  svs_isr+0x8c/0x538
> > > 
> > > Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
> > 
> > Reviewed-by: AngeloGioacchino Del Regno <
> > angelogioacchino.delregno at collabora.com>
> > 
> > 
> 
> Applied thanks!
> 

From angelogioacchino.delregno at collabora.com  Tue Dec 20 04:49:14 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Tue, 20 Dec 2022 13:49:14 +0100
Subject: [PATCH] soc: mediatek: mtk-svs: Enable the IRQ later
In-Reply-To: <52fb6ccf3fe1cb11f3e330ecc4d9c6cf1225c98a.camel@mediatek.com>
References: <20221127-mtk-svs-v1-0-7a5819595838@chromium.org>
 <d683a2e7-b886-9bf6-27df-d8c67cedbbdd@collabora.com>
 <b8b14bcb-845f-aa18-f8aa-ad0bed9fb0bb@gmail.com>
 <52fb6ccf3fe1cb11f3e330ecc4d9c6cf1225c98a.camel@mediatek.com>
Message-ID: <068c2537-2563-9e81-e92d-f1fa18a0206b@collabora.com>

Il 20/12/22 12:03, Roger Lu (???) ha scritto:
> Hi Matthias Sir,
> 
> After applying this patch, SVS probes fail as below on my MT8192 platform. If
> thing isn't too late, please do not merge this patch. I'll ask Ricardo how to
> reproduce this issue and give the correct solution. Thanks in advance.
> 
> #MT8192 platform SVS probe fail log
> [   10.209430]  SVSB_GPU_LOW: init02 completion timeout
> [   10.214402] mtk-svs 1100b000.svs: svs start fail: -16
> [   10.219479] mtk-svs: probe of 1100b000.svs failed with error -16
> 
> Hi Ricardo,
> 
> Could you share us how you reproduce this issue? I have MT8192 Chromebook and
> can give it a try to reproduce the issue you encountered. Thanks a lot.
> 

Boot a kernel with Kexec to reproduce.

Regards,
Angelo

> Sincerely,
> Roger Lu.
> 
> On Fri, 2022-12-16 at 13:47 +0100, Matthias Brugger wrote:
>>
>> On 30/11/2022 12:00, AngeloGioacchino Del Regno wrote:
>>> Il 27/11/22 21:22, Ricardo Ribalda ha scritto:
>>>> If the system does not come from reset (like when is booted via
>>>> kexec()), the peripheral might triger an IRQ before the data structures
>>>> are initialised.
>>>>
>>>> Fixes:
>>>>
>>>> [    0.227710] Unable to handle kernel NULL pointer dereference at
>>>> virtual
>>>> address 0000000000000f08
>>>> [    0.227913] Call trace:
>>>> [    0.227918]  svs_isr+0x8c/0x538
>>>>
>>>> Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
>>>
>>> Reviewed-by: AngeloGioacchino Del Regno <
>>> angelogioacchino.delregno at collabora.com>
>>>
>>>
>>
>> Applied thanks!
>>




From Allen-KH.Cheng at mediatek.com  Tue Dec 20 04:49:50 2022
From: Allen-KH.Cheng at mediatek.com (=?utf-8?B?QWxsZW4tS0ggQ2hlbmcgKOeoi+WGoOWLsyk=?=)
Date: Tue, 20 Dec 2022 12:49:50 +0000
Subject: [PATCH 3/4] dt-bindings: arm: mediatek: Add missing power-domains
 property
In-Reply-To: <3bad1a29-6457-8958-64c2-a0002c7959a1@linaro.org>
References: <20221215120016.26611-1-allen-kh.cheng@mediatek.com>
	 <20221215120016.26611-4-allen-kh.cheng@mediatek.com>
	 <3bad1a29-6457-8958-64c2-a0002c7959a1@linaro.org>
Message-ID: <f4f9c2cdb60e09b1fc3c07a59b3d02a031a27a32.camel@mediatek.com>

Hi Krzysztof,

Thanks for the reminder.

On Fri, 2022-12-16 at 11:58 +0100, Krzysztof Kozlowski wrote:
> On 15/12/2022 13:00, Allen-KH Cheng wrote:
> > The "mediatek,mt8192-scp_adsp" binding requires a power domain to
> > be
> > specified.
> > 
> > Fixes: 4a803990aeb1 ("dt-bindings: ARM: Mediatek: Add new document
> > bindings of MT8192 clock")
> > Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> > ---
> >  .../arm/mediatek/mediatek,mt8192-clock.yaml     | 17
> > +++++++++++++++++
> >  1 file changed, 17 insertions(+)
> > 
> > diff --git
> > a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-
> > clock.yaml
> > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-
> > clock.yaml
> > index b57cc2e69efb..cbedef114103 100644
> > ---
> > a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-
> > clock.yaml
> > +++
> > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-
> > clock.yaml
> > @@ -40,6 +40,9 @@ properties:
> >    reg:
> >      maxItems: 1
> >  
> > +  power-domains:
> > +    maxItems: 1
> > +
> >    '#clock-cells':
> >      const: 1
> >  
> > @@ -49,11 +52,25 @@ required:
> >  
> >  additionalProperties: false
> >  
> > +allOf:
> 
> allOf goes just before additionalProperties.
> 

ok, I will fix this.

> > +  - if:
> > +      properties:
> > +        compatible:
> > +          contains:
> > +            enum:
> > +              - mediatek,mt8192-scp_adsp
> 
> For the future: please don't use underscores in compatibles.
> 

Noted!

Thanks,
Allen

> > +    then:
> > +      required:
> > +        - power-domains
> > +
> >  examples:
> >    - |
> > +    #include <dt-bindings/power/mt8192-power.h>
> > +
> >      scp_adsp: clock-controller at 10720000 {
> >          compatible = "mediatek,mt8192-scp_adsp";
> >          reg = <0x10720000 0x1000>;
> > +        power-domains = <&spm MT8192_POWER_DOMAIN_ADSP>;
> >          #clock-cells = <1>;
> >      };
> >  
> 
> Best regards,
> Krzysztof
> 

From kvalo at kernel.org  Tue Dec 20 05:01:42 2022
From: kvalo at kernel.org (Kalle Valo)
Date: Tue, 20 Dec 2022 13:01:42 +0000 (UTC)
Subject: [PATCH] wifi: mt76: mt7996: select CONFIG_RELAY
In-Reply-To: <20221215163133.4152299-1-arnd@kernel.org>
References: <20221215163133.4152299-1-arnd@kernel.org>
Message-ID: <167154130077.23629.13270502460080911055.kvalo@kernel.org>

Arnd Bergmann <arnd at kernel.org> wrote:

> From: Arnd Bergmann <arnd at arndb.de>
> 
> Without CONFIG_RELAY, the driver fails to link:
> 
> ERROR: modpost: "relay_flush" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
> ERROR: modpost: "relay_switch_subbuf" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
> ERROR: modpost: "relay_open" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
> ERROR: modpost: "relay_reset" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
> ERROR: modpost: "relay_file_operations" [drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko] undefined!
> 
> The same change was done in mt7915 for the corresponding copy of the code.
> 
> Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
> See-also: 988845c9361a ("mt76: mt7915: add support for passing chip/firmware debug data to user space")
> Signed-off-by: Arnd Bergmann <arnd at arndb.de>

Patch applied to wireless.git, thanks.

37fc9ad1617a wifi: mt76: mt7996: select CONFIG_RELAY

-- 
https://patchwork.kernel.org/project/linux-wireless/patch/20221215163133.4152299-1-arnd at kernel.org/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches



From vincent at systemli.org  Tue Dec 20 06:37:10 2022
From: vincent at systemli.org (Nick)
Date: Tue, 20 Dec 2022 15:37:10 +0100
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
In-Reply-To: <5e07eb07de0fea2232c32f58691ffb7cfd2303f8.camel@mediatek.com>
References: <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
 <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
 <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>
 <b1822bbc3775730c4cedf9652323c7d72e663e4b.camel@mediatek.com>
 <8be3e050-f32a-6761-8ebd-49c38dfcf9eb@collabora.com>
 <c186d104-43e0-ca10-3ce2-c2f922acd8bf@leemhuis.info>
 <37468027-6a27-dcb8-9c14-8f8426ec50d1@collabora.com>
 <20221202110139.vmwcmoudakm2nap4@vireshk-i7>
 <f70d7c09-df0d-4fa9-92c9-63f31cf56483@systemli.org>
 <5e07eb07de0fea2232c32f58691ffb7cfd2303f8.camel@mediatek.com>
Message-ID: <3599ec46-20d2-a233-a7c0-d2e363ebdf93@systemli.org>

Hey,
thanks for all your help. I guess it's fine now.
If someone wants to reproduce my setup, I published the exact steps here:
https://forum.openwrt.org/t/running-vanilla-kernel-on-banana-pi-r64/145351

I still wonder why my initial try using the OpenWrt build-environment 
together with the 6.1 kernel failed.

Bests
Nick

On 12/19/22 13:21, Allen-KH Cheng (???) wrote:
> Hi Nick,
>
> This issue doesn't seem to be going to happen.
> Is there anything else we need help confirming?
>
> Thanks,
> Allen
>
> -----Original Message-----
> From: Linux-mediatek <linux-mediatek-bounces at lists.infradead.org> On
> Behalf Of Nick
> Sent: Wednesday, December 7, 2022 11:35 PM
> To: Viresh Kumar <viresh.kumar at linaro.org>; AngeloGioacchino Del Regno
> <angelogioacchino.delregno at collabora.com>
> Cc: Allen-KH Cheng (???) <Allen-KH.Cheng at mediatek.com>;
> linux-pm at vger.kernel.org; daniel at makrotopia.org;
> Project_Global_Chrome_Upstream_Group <
> Project_Global_Chrome_Upstream_Group at mediatek.com>; Rex-BC Chen (???) <
> Rex-BC.Chen at mediatek.com>; Thorsten Leemhuis <regressions at leemhuis.info
>> ; linux-mediatek at lists.infradead.org; matthias.bgg at gmail.com;
> thomas.huehn at hs-nordhausen.de; Jia-wei Chang (???) <
> Jia-wei.Chang at mediatek.com>; linux-arm-kernel at lists.infradead.org;
> regressions at lists.linux.dev
> Subject: Re: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
> mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622)
>
> Did something changed on master? I compiled now the image I use on the
> BPI-R64 a bit differently.
> I used the openwrt toolchain "aarch64-openwrt-linux-musl-" to cross-
> compile the original linux repository on current master. Than I
> compiled with OpenWrt-Buildsystem a initramfs, put that together with
> mkimage to a "itb" and booted it. Suddenly it works:
>
> https://urldefense.com/v3/__https://gist.githubusercontent.com/PolynomialDivision/5e49529206ba5d273bf6a416c42c6234/raw/7ecff7be397a6e9a41ef120c3fa61060c488cf5b/mt7622-bpi-vanilla__;!!CTRNKA9wMg0ARbw!glNhziJx8pjvVsVoRm0LO8wshXJL_b2P_jYV5vO_9uhe1EnbMpWRnIEcj_561Ijxurd8C-Fjc7uCbBNIM_E-7YYc$
>   
>
> Bests
> Nick
>
> On 12/2/22 12:01, Viresh Kumar wrote:
>> On 02-12-22, 12:00, AngeloGioacchino Del Regno wrote:
>>> If Viresh can add those while applying the patch, that's fine for
>>> me
>>> - otherwise I can send a v2 adding the two suggested missing tags.
>> Sure, no problem.
>>
>


From matthias.bgg at gmail.com  Tue Dec 20 06:50:27 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Tue, 20 Dec 2022 15:50:27 +0100
Subject: [PATCH] soc: mediatek: mtk-svs: Enable the IRQ later
In-Reply-To: <52fb6ccf3fe1cb11f3e330ecc4d9c6cf1225c98a.camel@mediatek.com>
References: <20221127-mtk-svs-v1-0-7a5819595838@chromium.org>
 <d683a2e7-b886-9bf6-27df-d8c67cedbbdd@collabora.com>
 <b8b14bcb-845f-aa18-f8aa-ad0bed9fb0bb@gmail.com>
 <52fb6ccf3fe1cb11f3e330ecc4d9c6cf1225c98a.camel@mediatek.com>
Message-ID: <e0d3f5c7-6f6b-ee21-170c-51e5240de114@gmail.com>



On 20/12/2022 12:03, Roger Lu (???) wrote:
> Hi Matthias Sir,
> 
> After applying this patch, SVS probes fail as below on my MT8192 platform. If
> thing isn't too late, please do not merge this patch. I'll ask Ricardo how to
> reproduce this issue and give the correct solution. Thanks in advance.
> 

Ok, I just dropped the patch from v6.2-tmp/soc branch.

Regards,
Matthias

> #MT8192 platform SVS probe fail log
> [   10.209430]  SVSB_GPU_LOW: init02 completion timeout
> [   10.214402] mtk-svs 1100b000.svs: svs start fail: -16
> [   10.219479] mtk-svs: probe of 1100b000.svs failed with error -16
> 
> Hi Ricardo,
> 
> Could you share us how you reproduce this issue? I have MT8192 Chromebook and
> can give it a try to reproduce the issue you encountered. Thanks a lot.
> 
> Sincerely,
> Roger Lu.
> 
> On Fri, 2022-12-16 at 13:47 +0100, Matthias Brugger wrote:
>> 
>> On 30/11/2022 12:00, AngeloGioacchino Del Regno wrote:
>> > Il 27/11/22 21:22, Ricardo Ribalda ha scritto:
>> > > If the system does not come from reset (like when is booted via
>> > > kexec()), the peripheral might triger an IRQ before the data structures
>> > > are initialised.
>> > > 
>> > > Fixes:
>> > > 
>> > > [    0.227710] Unable to handle kernel NULL pointer dereference at
>> > > virtual 
>> > > address 0000000000000f08
>> > > [    0.227913] Call trace:
>> > > [    0.227918]  svs_isr+0x8c/0x538
>> > > 
>> > > Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
>> > 
>> > Reviewed-by: AngeloGioacchino Del Regno <
>> > angelogioacchino.delregno at collabora.com>
>> > 
>> > 
>> 
>> Applied thanks!
>> 
> 
> ************* MEDIATEK Confidentiality Notice ********************
> The information contained in this e-mail message (including any
> attachments) may be confidential, proprietary, privileged, or otherwise
> exempt from disclosure under applicable laws. It is intended to be
> conveyed only to the designated recipient(s). Any use, dissemination,
> distribution, printing, retaining or copying of this e-mail (including its
> attachments) by unintended recipient(s) is strictly prohibited and may
> be unlawful. If you are not an intended recipient of this e-mail, or believe
> that you have received this e-mail in error, please notify the sender
> immediately (by replying to this e-mail), delete any and all copies of
> this e-mail (including any attachments) from your system, and do not
> disclose the content of this e-mail to any other person. Thank you!


From matthias.bgg at gmail.com  Tue Dec 20 06:55:03 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Tue, 20 Dec 2022 15:55:03 +0100
Subject: [PATCH v4 0/8] add support MDP3 on MT8195 platform
In-Reply-To: <212871d92b8062250c83c9db006c1c628b798280.camel@mediatek.com>
References: <20221207094921.15450-1-moudy.ho@mediatek.com>
 <5692faa0-6d7e-774f-9d6a-a495b44bdb3e@gmail.com>
 <dba479ea-968f-89eb-fc59-8235cbb2783a@gmail.com>
 <abfa4b935938a0b00bcccbc10e1a748f49f3497c.camel@mediatek.com>
 <212871d92b8062250c83c9db006c1c628b798280.camel@mediatek.com>
Message-ID: <0cf869ae-bbb5-7cb5-eadc-ceaf2f7015dc@gmail.com>

Hi Moudy,

On 20/12/2022 04:40, Moudy Ho (???) wrote:
> On Tue, 2022-12-20 at 10:14 +0800, moudy ho wrote:
>> On Mon, 2022-12-19 at 16:17 +0100, Matthias Brugger wrote:
>>>
>>> On 16/12/2022 13:33, Matthias Brugger wrote:
>>>>
>>>> Whole series applied, thanks!
>>>>
>>>
>>> And now, whole series reverted, please see comment in 1/8.
>>>
>>> Regards,
>>> Matthias
>>>
>>
>> Hi Matthias,
>>
>> May I send a new series without a fallback compatible like the mt8188
>> VDOSYS does?
>>
>>
> https://patchwork.kernel.org/project/linux-mediatek/patch/20221206020046.11333-3-nathan.lu at mediatek.com/
>>
>> Regards,
>> Moudy
> 
> Hi Matthias,
> 
> Sorry for the inaccurate information, the warning mentioned in [1/8] is
> because vppsys 0/1 has already been defined in "mediatek,mt8195-
> clock.yaml" as follows:
> 
> https://patchwork.kernel.org/project/linux-mediatek/patch/20210914021633.26377-2-chun-jie.chen at mediatek.com/
> 
> Is it possible to fix it by just removing [1/8], or should I send a new
> series?
> 

You will need to remove it from the clock binding and of course from the clock 
drivers. One example is this one:
https://patchwork.kernel.org/project/linux-mediatek/patch/20210914021633.26377-21-chun-jie.chen at mediatek.com/

In the end the mmsys will probe by the compatible and will then probe the clock 
driver as a platform driver.

Best regards,
Matthias


> Regards,
> Moudy
> 
>>>> On 07/12/2022 10:49, Moudy Ho wrote:
>>>>> From: mtk18742 <moudy.ho at mediatek.com>
>>>>>
>>>>> Changes since v3:
>>>>> - Rebase on linux-next
>>>>>
>>>>> Changes since v2:
>>>>> - Depend on :
>>>>>     [1]
>>>>>
> https://urldefense.com/v3/__https://patchwork.kernel.org/project/linux-mediatek/list/?series=681097__;!!CTRNKA9wMg0ARbw!giZVy8TiFNylgWKOjI75fSmleN6UlckPuiXzFf5jbdVgFbHdIxG3d3Jvkqp7Eka73I2TmataD_d5QjzBnk6-sYY$
>>>>>   
>>>>>   
>>>>> - Split dts settings into two patches based on belonging to
>>>>> MMSYS
>>>>> or MUTEX.
>>>>>
>>>>> Changes since v1:
>>>>> - Depend on :
>>>>>     [1]
>>>>>
> https://urldefense.com/v3/__https://patchwork.kernel.org/project/linux-mediatek/list/?series=681097__;!!CTRNKA9wMg0ARbw!giZVy8TiFNylgWKOjI75fSmleN6UlckPuiXzFf5jbdVgFbHdIxG3d3Jvkqp7Eka73I2TmataD_d5QjzBnk6-sYY$
>>>>>   
>>>>>   
>>>>> - Add compatible names to VPPSYS0 and VPPSYS1 in MMSYS binding
>>>>> file.
>>>>> - Fix VPPSYS's MMSYS and MUTEX dts to pass the dtsb_check.
>>>>> - Rename mtk_mmsys_merge_config() and
>>>>> mtk_mmsys_rsz_dcm_config()
>>>>> to
>>>>>     mtk_mmsys_vpp_rsz_merge_config() and
>>>>> mtk_mmsys_vpp_rsz_dcm_config().
>>>>> - Clean up mtk_mmsys_vpp_rsz_dcm_config().
>>>>> - Add a comment to mtk_mutex_write_mod() and clean it up for
>>>>> use
>>>>> in more
>>>>>     than 32 mods.
>>>>>
>>>>> Hi,
>>>>>
>>>>> This series add support for MT8195's two VPPSYS(Video Processor
>>>>> Pipe Subsystem),
>>>>> under which there will be corresponding MMSYS and MUTEX
>>>>> settings
>>>>> that
>>>>> need to be configured.
>>>>>
>>>>> Moudy Ho (2):
>>>>>     dt-bindings: arm: mediatek: mmsys: Add support for MT8195
>>>>> VPPSYS
>>>>>     arm64: dts: mediatek: mt8195: add MUTEX configuration for
>>>>> VPPSYS
>>>>>
>>>>> Roy-CW.Yeh (6):
>>>>>     dt-bindings: soc: mediatek: Add support for MT8195 VPPSYS
>>>>>     arm64: dts: mediatek: mt8195: add MMSYS configuration for
>>>>> VPPSYS
>>>>>     soc: mediatek: mmsys: add support for MT8195 VPPSYS
>>>>>     soc: mediatek: mmsys: add config api for RSZ switching and
>>>>> DCM
>>>>>     soc: mediatek: mutex: Add mtk_mutex_set_mod support to set
>>>>> MOD1
>>>>>     soc: mediatek: mutex: support MT8195 VPPSYS
>>>>>
>>>>>    .../bindings/arm/mediatek/mediatek,mmsys.yaml |   5 +-
>>>>>    .../bindings/soc/mediatek/mediatek,mutex.yaml |   1 +
>>>>>    arch/arm64/boot/dts/mediatek/mt8195.dtsi      |  28 +++-
>>>>>    drivers/soc/mediatek/mt8195-mmsys.h           |  13 ++
>>>>>    drivers/soc/mediatek/mtk-mmsys.c              |  64 +++++++++
>>>>>    drivers/soc/mediatek/mtk-mmsys.h              |   1 +
>>>>>    drivers/soc/mediatek/mtk-mutex.c              | 135
>>>>> +++++++++++++++++-
>>>>>    include/linux/soc/mediatek/mtk-mmsys.h        |   4 +
>>>>>    include/linux/soc/mediatek/mtk-mutex.h        |  35 +++++
>>>>>    9 files changed, 274 insertions(+), 12 deletions(-)
>>>>>


From matthias.bgg at gmail.com  Tue Dec 20 07:02:08 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Tue, 20 Dec 2022 16:02:08 +0100
Subject: [PATCH resend] arm64: dts: mediatek: mt8192: Mark scp_adsp clock
 as broken
In-Reply-To: <20221130031741.3176853-1-wenst@chromium.org>
References: <20221130031741.3176853-1-wenst@chromium.org>
Message-ID: <2f003afc-1375-56fa-f9e2-82ad3bb7cee2@gmail.com>



On 30/11/2022 04:17, Chen-Yu Tsai wrote:
> The scp_adsp clock controller is under the SCP_ADSP power domain. This
> power domain is currently not supported nor defined.
> 
> Mark the clock controller as broken for now, to avoid the system from
> trying to access it, and causing the CPU or bus to stall.
> 
> Fixes: 5d2b897bc6f5 ("arm64: dts: mediatek: Add mt8192 clock controllers")
> Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
> ---
>   arch/arm64/boot/dts/mediatek/mt8192.dtsi | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> index 6b20376191a7..ef91941848ae 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
> @@ -575,6 +575,8 @@ scp_adsp: clock-controller at 10720000 {
>   			compatible = "mediatek,mt8192-scp_adsp";
>   			reg = <0 0x10720000 0 0x1000>;
>   			#clock-cells = <1>;
> +			/* power domain dependency not upstreamed */
> +			status = "broken";
>   		};
>   
>   		uart0: serial at 11002000 {

Looking into the DT spec, "broken" is no valid value. I suppose we want to have 
"fail" here.

Regards,
Matthias


From ribalda at chromium.org  Tue Dec 20 12:44:06 2022
From: ribalda at chromium.org (Ricardo Ribalda)
Date: Tue, 20 Dec 2022 21:44:06 +0100
Subject: [PATCH] soc: mediatek: mtk-svs: Enable the IRQ later
In-Reply-To: <e0d3f5c7-6f6b-ee21-170c-51e5240de114@gmail.com>
References: <20221127-mtk-svs-v1-0-7a5819595838@chromium.org>
 <d683a2e7-b886-9bf6-27df-d8c67cedbbdd@collabora.com> <b8b14bcb-845f-aa18-f8aa-ad0bed9fb0bb@gmail.com>
 <52fb6ccf3fe1cb11f3e330ecc4d9c6cf1225c98a.camel@mediatek.com> <e0d3f5c7-6f6b-ee21-170c-51e5240de114@gmail.com>
Message-ID: <CANiDSCv-625Jt7KYe3QdHv1tmU2W_c5195T+SitSM1ROocbQ2g@mail.gmail.com>

Hi Roger

Thanks for the heads up.

This is the tree that I am using to test this:
https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/3918592/7
( https://chromium.googlesource.com/chromiumos/third_party/kernel/+/3daf57d76c9e3d7c73d038ff2e43984412b503a2
)

You can use this tool for kexec:
https://chromium-review.googlesource.com/c/chromiumos/platform2/+/3953579

The syntax is kexec-lite  --reboot --kernel /boot/Image --cmdline
"$(cat /proc/cmdline)"

On Tue, 20 Dec 2022 at 15:50, Matthias Brugger <matthias.bgg at gmail.com> wrote:
>
>
>
> On 20/12/2022 12:03, Roger Lu (???) wrote:
> > Hi Matthias Sir,
> >
> > After applying this patch, SVS probes fail as below on my MT8192 platform. If
> > thing isn't too late, please do not merge this patch. I'll ask Ricardo how to
> > reproduce this issue and give the correct solution. Thanks in advance.
> >
>
> Ok, I just dropped the patch from v6.2-tmp/soc branch.
>
> Regards,
> Matthias
>
> > #MT8192 platform SVS probe fail log
> > [   10.209430]  SVSB_GPU_LOW: init02 completion timeout
> > [   10.214402] mtk-svs 1100b000.svs: svs start fail: -16
> > [   10.219479] mtk-svs: probe of 1100b000.svs failed with error -16
> >
> > Hi Ricardo,
> >
> > Could you share us how you reproduce this issue? I have MT8192 Chromebook and
> > can give it a try to reproduce the issue you encountered. Thanks a lot.
> >
> > Sincerely,
> > Roger Lu.
> >
> > On Fri, 2022-12-16 at 13:47 +0100, Matthias Brugger wrote:
> >>
> >> On 30/11/2022 12:00, AngeloGioacchino Del Regno wrote:
> >> > Il 27/11/22 21:22, Ricardo Ribalda ha scritto:
> >> > > If the system does not come from reset (like when is booted via
> >> > > kexec()), the peripheral might triger an IRQ before the data structures
> >> > > are initialised.
> >> > >
> >> > > Fixes:
> >> > >
> >> > > [    0.227710] Unable to handle kernel NULL pointer dereference at
> >> > > virtual
> >> > > address 0000000000000f08
> >> > > [    0.227913] Call trace:
> >> > > [    0.227918]  svs_isr+0x8c/0x538
> >> > >
> >> > > Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
> >> >
> >> > Reviewed-by: AngeloGioacchino Del Regno <
> >> > angelogioacchino.delregno at collabora.com>
> >> >
> >> >
> >>
> >> Applied thanks!
> >>
> >
> > ************* MEDIATEK Confidentiality Notice ********************
> > The information contained in this e-mail message (including any
> > attachments) may be confidential, proprietary, privileged, or otherwise
> > exempt from disclosure under applicable laws. It is intended to be
> > conveyed only to the designated recipient(s). Any use, dissemination,
> > distribution, printing, retaining or copying of this e-mail (including its
> > attachments) by unintended recipient(s) is strictly prohibited and may
> > be unlawful. If you are not an intended recipient of this e-mail, or believe
> > that you have received this e-mail in error, please notify the sender
> > immediately (by replying to this e-mail), delete any and all copies of
> > this e-mail (including any attachments) from your system, and do not
> > disclose the content of this e-mail to any other person. Thank you!



-- 
Ricardo Ribalda


From dlunev at chromium.org  Tue Dec 20 13:00:44 2022
From: dlunev at chromium.org (Daniil Lunev)
Date: Wed, 21 Dec 2022 08:00:44 +1100
Subject: [PATCH v6] ufs: core: wlun suspend SSU/enter hibern8 fail recovery
In-Reply-To: <yq14jtyekv2.fsf@ca-mkp.ca.oracle.com>
References: <20221208072520.26210-1-peter.wang@mediatek.com> <yq14jtyekv2.fsf@ca-mkp.ca.oracle.com>
Message-ID: <CAONX=-d-LZSV9-R=oLDFKsBG8Zd90wXOcGR44kPaorDH-Y7MnQ@mail.gmail.com>

> Applied to 6.2/scsi-staging, thanks!

There is an interesting side effect of the patch in this iteration
(which I am not sure was present in the past iteration I tried):
If the device auto suspends while running purge - controller is
seemingly recent and thus the purge is aborted (with no patch at all
it hangs).
That might be ok behaviour though - it will just make it an explicit
requirement to disable runtime suspend during the management
operation.

localhost ~ # ufs-utils fl -t 6 -e -p /dev/bsg/ufs-bsg0
localhost ~ # ufs-utils attr -a -p /dev/bsg/ufs-bsg0 | grep bPurgeStatus
bPurgeStatus               := 0x00

[   25.801980] ufs_device_wlun 0:0:0:49488: START_STOP failed for
power mode: 2, result 2
[   25.802002] ufs_device_wlun 0:0:0:49488: Sense Key : Not Ready [current]
[   25.802009] ufs_device_wlun 0:0:0:49488: Add. Sense: No additional
sense information
[   25.802020] ufs_device_wlun 0:0:0:49488: ufshcd_wl_runtime_suspend
failed: -16


From ribalda at chromium.org  Tue Dec 20 13:35:59 2022
From: ribalda at chromium.org (Ricardo Ribalda)
Date: Tue, 20 Dec 2022 22:35:59 +0100
Subject: [PATCH v2] soc: mediatek: mtk-svs: Enable the IRQ later
Message-ID: <20221127-mtk-svs-v2-0-145b07663ea8@chromium.org>

If the system does not come from reset (like when is booted via
kexec()), the peripheral might triger an IRQ before the data structures
are initialised.

Fixes:

[    0.227710] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000f08
[    0.227913] Call trace:
[    0.227918]  svs_isr+0x8c/0x538

Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
---
To: Matthias Brugger <matthias.bgg at gmail.com>
To: Roger Lu <Roger.Lu at mediatek.com>
Cc: linux-arm-kernel at lists.infradead.org
Cc: linux-mediatek at lists.infradead.org
Cc: linux-kernel at vger.kernel.org
---
Changes in v2:
- Enable the irq before svs_start, to avoid MT8192 not starting.
- Link to v1: https://lore.kernel.org/r/20221127-mtk-svs-v1-0-7a5819595838 at chromium.org
---
 drivers/soc/mediatek/mtk-svs.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 0469c9dfeb04..75b2f534aa9d 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -2385,14 +2385,6 @@ static int svs_probe(struct platform_device *pdev)
 		goto svs_probe_free_resource;
 	}
 
-	ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr,
-					IRQF_ONESHOT, svsp->name, svsp);
-	if (ret) {
-		dev_err(svsp->dev, "register irq(%d) failed: %d\n",
-			svsp_irq, ret);
-		goto svs_probe_free_resource;
-	}
-
 	svsp->main_clk = devm_clk_get(svsp->dev, "main");
 	if (IS_ERR(svsp->main_clk)) {
 		dev_err(svsp->dev, "failed to get clock: %ld\n",
@@ -2414,6 +2406,14 @@ static int svs_probe(struct platform_device *pdev)
 		goto svs_probe_clk_disable;
 	}
 
+	ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr,
+					IRQF_ONESHOT, svsp->name, svsp);
+	if (ret) {
+		dev_err(svsp->dev, "register irq(%d) failed: %d\n",
+			svsp_irq, ret);
+		goto svs_probe_iounmap;
+	}
+
 	ret = svs_start(svsp);
 	if (ret) {
 		dev_err(svsp->dev, "svs start fail: %d\n", ret);

---
base-commit: 4312098baf37ee17a8350725e6e0d0e8590252d4
change-id: 20221127-mtk-svs-add137fbf187

Best regards,
-- 
Ricardo Ribalda <ribalda at chromium.org>


From ribalda at chromium.org  Tue Dec 20 13:37:58 2022
From: ribalda at chromium.org (Ricardo Ribalda)
Date: Tue, 20 Dec 2022 22:37:58 +0100
Subject: [PATCH] soc: mediatek: mtk-svs: Enable the IRQ later
In-Reply-To: <CANiDSCv-625Jt7KYe3QdHv1tmU2W_c5195T+SitSM1ROocbQ2g@mail.gmail.com>
References: <20221127-mtk-svs-v1-0-7a5819595838@chromium.org>
 <d683a2e7-b886-9bf6-27df-d8c67cedbbdd@collabora.com> <b8b14bcb-845f-aa18-f8aa-ad0bed9fb0bb@gmail.com>
 <52fb6ccf3fe1cb11f3e330ecc4d9c6cf1225c98a.camel@mediatek.com>
 <e0d3f5c7-6f6b-ee21-170c-51e5240de114@gmail.com> <CANiDSCv-625Jt7KYe3QdHv1tmU2W_c5195T+SitSM1ROocbQ2g@mail.gmail.com>
Message-ID: <CANiDSCvQONPtvYzjhonAZMpsQqix5jQW_gPbAVqxLRQ4si1JJQ@mail.gmail.com>

Hi again Roger

I think I managed to reproduce your issue on an "asurada" Chromebook.

Sending a v2 of the patch.

Thanks again for the heads-up and sorry for the mess ;)

Thanks!

On Tue, 20 Dec 2022 at 21:44, Ricardo Ribalda <ribalda at chromium.org> wrote:
>
> Hi Roger
>
> Thanks for the heads up.
>
> This is the tree that I am using to test this:
> https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/3918592/7
> ( https://chromium.googlesource.com/chromiumos/third_party/kernel/+/3daf57d76c9e3d7c73d038ff2e43984412b503a2
> )
>
> You can use this tool for kexec:
> https://chromium-review.googlesource.com/c/chromiumos/platform2/+/3953579
>
> The syntax is kexec-lite  --reboot --kernel /boot/Image --cmdline
> "$(cat /proc/cmdline)"
>
> On Tue, 20 Dec 2022 at 15:50, Matthias Brugger <matthias.bgg at gmail.com> wrote:
> >
> >
> >
> > On 20/12/2022 12:03, Roger Lu (???) wrote:
> > > Hi Matthias Sir,
> > >
> > > After applying this patch, SVS probes fail as below on my MT8192 platform. If
> > > thing isn't too late, please do not merge this patch. I'll ask Ricardo how to
> > > reproduce this issue and give the correct solution. Thanks in advance.
> > >
> >
> > Ok, I just dropped the patch from v6.2-tmp/soc branch.
> >
> > Regards,
> > Matthias
> >
> > > #MT8192 platform SVS probe fail log
> > > [   10.209430]  SVSB_GPU_LOW: init02 completion timeout
> > > [   10.214402] mtk-svs 1100b000.svs: svs start fail: -16
> > > [   10.219479] mtk-svs: probe of 1100b000.svs failed with error -16
> > >
> > > Hi Ricardo,
> > >
> > > Could you share us how you reproduce this issue? I have MT8192 Chromebook and
> > > can give it a try to reproduce the issue you encountered. Thanks a lot.
> > >
> > > Sincerely,
> > > Roger Lu.
> > >
> > > On Fri, 2022-12-16 at 13:47 +0100, Matthias Brugger wrote:
> > >>
> > >> On 30/11/2022 12:00, AngeloGioacchino Del Regno wrote:
> > >> > Il 27/11/22 21:22, Ricardo Ribalda ha scritto:
> > >> > > If the system does not come from reset (like when is booted via
> > >> > > kexec()), the peripheral might triger an IRQ before the data structures
> > >> > > are initialised.
> > >> > >
> > >> > > Fixes:
> > >> > >
> > >> > > [    0.227710] Unable to handle kernel NULL pointer dereference at
> > >> > > virtual
> > >> > > address 0000000000000f08
> > >> > > [    0.227913] Call trace:
> > >> > > [    0.227918]  svs_isr+0x8c/0x538
> > >> > >
> > >> > > Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
> > >> >
> > >> > Reviewed-by: AngeloGioacchino Del Regno <
> > >> > angelogioacchino.delregno at collabora.com>
> > >> >
> > >> >
> > >>
> > >> Applied thanks!
> > >>
> > >
> > > ************* MEDIATEK Confidentiality Notice ********************
> > > The information contained in this e-mail message (including any
> > > attachments) may be confidential, proprietary, privileged, or otherwise
> > > exempt from disclosure under applicable laws. It is intended to be
> > > conveyed only to the designated recipient(s). Any use, dissemination,
> > > distribution, printing, retaining or copying of this e-mail (including its
> > > attachments) by unintended recipient(s) is strictly prohibited and may
> > > be unlawful. If you are not an intended recipient of this e-mail, or believe
> > > that you have received this e-mail in error, please notify the sender
> > > immediately (by replying to this e-mail), delete any and all copies of
> > > this e-mail (including any attachments) from your system, and do not
> > > disclose the content of this e-mail to any other person. Thank you!
>
>
>
> --
> Ricardo Ribalda



-- 
Ricardo Ribalda


From biao.huang at mediatek.com  Tue Dec 20 18:25:23 2022
From: biao.huang at mediatek.com (Biao Huang)
Date: Wed, 21 Dec 2022 10:25:23 +0800
Subject: [RESEND v4 PATCH 0/1] arm64: dts: mt8195: Add Ethernet controller
Message-ID: <20221221022523.8458-1-biao.huang@mediatek.com>

Resend v4, please review it, thanks~

Changes in v4:
1. remove {address,size}-cells = <0> to avoid warning as Angelo's feedback.
2. Add reviewd-by as Angelo's comments.

Changes in v3:
1. move stmmac-axi-config, rx-queues-config, tx-queues-configs inside ethernet node
as Angelo's comments.
2. add {address,size}-cells = <0> in ethernet node as Angelo's comments.

Changes in v2:
1. modify pinctrl node used by ethernet to match rules in pinctrl-mt8195.yaml,
which is pointed by Krzysztof.
2. remove "mac-address" property in ethernet node as comments of Krzysztof.

Changes in v1:
add dts node for MT8195 Ethernet controller

Biao Huang (1):
  arm64: dts: mt8195: Add Ethernet controller

 arch/arm64/boot/dts/mediatek/mt8195-demo.dts | 88 ++++++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt8195.dtsi     | 86 +++++++++++++++++++
 2 files changed, 174 insertions(+)

-- 
2.18.0




From biao.huang at mediatek.com  Tue Dec 20 18:25:24 2022
From: biao.huang at mediatek.com (Biao Huang)
Date: Wed, 21 Dec 2022 10:25:24 +0800
Subject: [RESEND PATCH v4] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <20221221022523.8458-1-biao.huang@mediatek.com>
References: <20221221022523.8458-1-biao.huang@mediatek.com>
Message-ID: <20221221022523.8458-2-biao.huang@mediatek.com>

Add Ethernet controller node for mt8195.

Signed-off-by: Biao Huang <biao.huang at mediatek.com>
---
 arch/arm64/boot/dts/mediatek/mt8195-demo.dts | 88 ++++++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt8195.dtsi     | 86 +++++++++++++++++++
 2 files changed, 174 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195-demo.dts b/arch/arm64/boot/dts/mediatek/mt8195-demo.dts
index 4fbd99eb496a..0e8496d837ef 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195-demo.dts
+++ b/arch/arm64/boot/dts/mediatek/mt8195-demo.dts
@@ -258,6 +258,72 @@ &mt6359_vsram_others_ldo_reg {
 };
 
 &pio {
+	eth_default_pins: eth-default-pins {
+		pins-txd {
+			pinmux = <PINMUX_GPIO77__FUNC_GBE_TXD3>,
+				 <PINMUX_GPIO78__FUNC_GBE_TXD2>,
+				 <PINMUX_GPIO79__FUNC_GBE_TXD1>,
+				 <PINMUX_GPIO80__FUNC_GBE_TXD0>;
+			drive-strength = <MTK_DRIVE_8mA>;
+		};
+		pins-cc {
+			pinmux = <PINMUX_GPIO85__FUNC_GBE_TXC>,
+				 <PINMUX_GPIO88__FUNC_GBE_TXEN>,
+				 <PINMUX_GPIO87__FUNC_GBE_RXDV>,
+				 <PINMUX_GPIO86__FUNC_GBE_RXC>;
+			drive-strength = <MTK_DRIVE_8mA>;
+		};
+		pins-rxd {
+			pinmux = <PINMUX_GPIO81__FUNC_GBE_RXD3>,
+				 <PINMUX_GPIO82__FUNC_GBE_RXD2>,
+				 <PINMUX_GPIO83__FUNC_GBE_RXD1>,
+				 <PINMUX_GPIO84__FUNC_GBE_RXD0>;
+		};
+		pins-mdio {
+			pinmux = <PINMUX_GPIO89__FUNC_GBE_MDC>,
+				 <PINMUX_GPIO90__FUNC_GBE_MDIO>;
+			input-enable;
+		};
+		pins-power {
+			pinmux = <PINMUX_GPIO91__FUNC_GPIO91>,
+				 <PINMUX_GPIO92__FUNC_GPIO92>;
+			output-high;
+		};
+	};
+
+	eth_sleep_pins: eth-sleep-pins {
+		pins-txd {
+			pinmux = <PINMUX_GPIO77__FUNC_GPIO77>,
+				 <PINMUX_GPIO78__FUNC_GPIO78>,
+				 <PINMUX_GPIO79__FUNC_GPIO79>,
+				 <PINMUX_GPIO80__FUNC_GPIO80>;
+		};
+		pins-cc {
+			pinmux = <PINMUX_GPIO85__FUNC_GPIO85>,
+				 <PINMUX_GPIO88__FUNC_GPIO88>,
+				 <PINMUX_GPIO87__FUNC_GPIO87>,
+				 <PINMUX_GPIO86__FUNC_GPIO86>;
+		};
+		pins-rxd {
+			pinmux = <PINMUX_GPIO81__FUNC_GPIO81>,
+				 <PINMUX_GPIO82__FUNC_GPIO82>,
+				 <PINMUX_GPIO83__FUNC_GPIO83>,
+				 <PINMUX_GPIO84__FUNC_GPIO84>;
+		};
+		pins-mdio {
+			pinmux = <PINMUX_GPIO89__FUNC_GPIO89>,
+				 <PINMUX_GPIO90__FUNC_GPIO90>;
+			input-disable;
+			bias-disable;
+		};
+		pins-power {
+			pinmux = <PINMUX_GPIO91__FUNC_GPIO91>,
+				 <PINMUX_GPIO92__FUNC_GPIO92>;
+			input-disable;
+			bias-disable;
+		};
+	};
+
 	gpio_keys_pins: gpio-keys-pins {
 		pins {
 			pinmux = <PINMUX_GPIO106__FUNC_GPIO106>;
@@ -434,6 +500,28 @@ &xhci0 {
 	status = "okay";
 };
 
+&eth {
+	phy-mode ="rgmii-rxid";
+	phy-handle = <&ethernet_phy0>;
+	snps,reset-gpio = <&pio 93 GPIO_ACTIVE_HIGH>;
+	snps,reset-delays-us = <0 10000 10000>;
+	mediatek,tx-delay-ps = <2030>;
+	pinctrl-names = "default", "sleep";
+	pinctrl-0 = <&eth_default_pins>;
+	pinctrl-1 = <&eth_sleep_pins>;
+	status = "okay";
+
+	mdio {
+		compatible = "snps,dwmac-mdio";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		ethernet_phy0: ethernet-phy at 1 {
+			compatible = "ethernet-phy-id001c.c916";
+			reg = <0x1>;
+		};
+	};
+};
+
 &xhci1 {
 	vusb33-supply = <&mt6359_vusb_ldo_reg>;
 	status = "okay";
diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index 5d31536f4c48..02112bbf2bdf 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -1046,6 +1046,92 @@ spis1: spi at 1101e000 {
 			status = "disabled";
 		};
 
+		eth: ethernet at 11021000 {
+			compatible = "mediatek,mt8195-gmac", "snps,dwmac-5.10a";
+			reg = <0 0x11021000 0 0x4000>;
+			interrupts = <GIC_SPI 716 IRQ_TYPE_LEVEL_HIGH 0>;
+			interrupt-names = "macirq";
+			clock-names = "axi",
+				      "apb",
+				      "mac_cg",
+				      "mac_main",
+				      "ptp_ref",
+				      "rmii_internal";
+			clocks = <&pericfg_ao CLK_PERI_AO_ETHERNET>,
+				 <&pericfg_ao CLK_PERI_AO_ETHERNET_BUS>,
+				 <&pericfg_ao CLK_PERI_AO_ETHERNET_MAC>,
+				 <&topckgen CLK_TOP_SNPS_ETH_250M>,
+				 <&topckgen CLK_TOP_SNPS_ETH_62P4M_PTP>,
+				 <&topckgen CLK_TOP_SNPS_ETH_50M_RMII>;
+			assigned-clocks = <&topckgen CLK_TOP_SNPS_ETH_250M>,
+					  <&topckgen CLK_TOP_SNPS_ETH_62P4M_PTP>,
+					  <&topckgen CLK_TOP_SNPS_ETH_50M_RMII>;
+			assigned-clock-parents = <&topckgen CLK_TOP_ETHPLL_D2>,
+						 <&topckgen CLK_TOP_ETHPLL_D8>,
+						 <&topckgen CLK_TOP_ETHPLL_D10>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_ETHER>;
+			mediatek,pericfg = <&infracfg_ao>;
+			snps,axi-config = <&stmmac_axi_setup>;
+			snps,mtl-rx-config = <&mtl_rx_setup>;
+			snps,mtl-tx-config = <&mtl_tx_setup>;
+			snps,txpbl = <16>;
+			snps,rxpbl = <16>;
+			snps,clk-csr = <0>;
+			status = "disabled";
+
+			stmmac_axi_setup: stmmac-axi-config {
+				snps,wr_osr_lmt = <0x7>;
+				snps,rd_osr_lmt = <0x7>;
+				snps,blen = <0 0 0 0 16 8 4>;
+			};
+
+			mtl_rx_setup: rx-queues-config {
+				snps,rx-queues-to-use = <4>;
+				snps,rx-sched-sp;
+				queue0 {
+					snps,dcb-algorithm;
+					snps,map-to-dma-channel = <0x0>;
+				};
+				queue1 {
+					snps,dcb-algorithm;
+					snps,map-to-dma-channel = <0x0>;
+				};
+				queue2 {
+					snps,dcb-algorithm;
+					snps,map-to-dma-channel = <0x0>;
+				};
+				queue3 {
+					snps,dcb-algorithm;
+					snps,map-to-dma-channel = <0x0>;
+				};
+			};
+
+			mtl_tx_setup: tx-queues-config {
+				snps,tx-queues-to-use = <4>;
+				snps,tx-sched-wrr;
+				queue0 {
+					snps,weight = <0x10>;
+					snps,dcb-algorithm;
+					snps,priority = <0x0>;
+				};
+				queue1 {
+					snps,weight = <0x11>;
+					snps,dcb-algorithm;
+					snps,priority = <0x1>;
+				};
+				queue2 {
+					snps,weight = <0x12>;
+					snps,dcb-algorithm;
+					snps,priority = <0x2>;
+				};
+				queue3 {
+					snps,weight = <0x13>;
+					snps,dcb-algorithm;
+					snps,priority = <0x3>;
+				};
+			};
+		};
+
 		xhci0: usb at 11200000 {
 			compatible = "mediatek,mt8195-xhci",
 				     "mediatek,mtk-xhci";
-- 
2.25.1



From allen-kh.cheng at mediatek.com  Tue Dec 20 19:44:07 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Wed, 21 Dec 2022 11:44:07 +0800
Subject: [PATCH v2 6/6] arm64: dts: mediatek: Add the missing ADSP power domains controller for MT8192
In-Reply-To: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221221034407.19605-7-allen-kh.cheng@mediatek.com>

Add the missing ADSP power domains controller for mt8192-scp_adsp clock
controllers.

Fixes: 5d2b897bc6f5 ("arm64: dts: mediatek: Add mt8192 clock controllers")
Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
---
 arch/arm64/boot/dts/mediatek/mt8192.dtsi | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
index 6b20376191a7..6ee60db3ac23 100644
--- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
@@ -511,6 +511,14 @@
 						};
 					};
 				};
+
+				power-domain at MT8192_POWER_DOMAIN_ADSP {
+					reg = <MT8192_POWER_DOMAIN_ADSP>;
+					clocks = <&topckgen CLK_TOP_ADSP_SEL>;
+					clock-names = "adsp";
+					mediatek,infracfg = <&infracfg>;
+					#power-domain-cells = <0>;
+				};
 			};
 		};
 
@@ -574,6 +582,7 @@
 		scp_adsp: clock-controller at 10720000 {
 			compatible = "mediatek,mt8192-scp_adsp";
 			reg = <0 0x10720000 0 0x1000>;
+			power-domains = <&spm MT8192_POWER_DOMAIN_ADSP>;
 			#clock-cells = <1>;
 		};
 
-- 
2.18.0



From allen-kh.cheng at mediatek.com  Tue Dec 20 19:44:05 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Wed, 21 Dec 2022 11:44:05 +0800
Subject: [PATCH v2 4/6] soc: mediatek: pm-domains: Add ADSP power domain data for MT8192
In-Reply-To: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221221034407.19605-5-allen-kh.cheng@mediatek.com>

Add ADSP pm-domains (mtcmos) data for MT8192 SoC.

Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
---
 drivers/soc/mediatek/mt8192-pm-domains.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/soc/mediatek/mt8192-pm-domains.h b/drivers/soc/mediatek/mt8192-pm-domains.h
index b97b2051920f..19e58f0ca1df 100644
--- a/drivers/soc/mediatek/mt8192-pm-domains.h
+++ b/drivers/soc/mediatek/mt8192-pm-domains.h
@@ -287,6 +287,22 @@ static const struct scpsys_domain_data scpsys_domain_data_mt8192[] = {
 		.sram_pdn_bits = GENMASK(8, 8),
 		.sram_pdn_ack_bits = GENMASK(12, 12),
 	},
+	[MT8192_POWER_DOMAIN_ADSP] = {
+		.name = "adsp",
+		.sta_mask = BIT(22),
+		.ctl_offs = 0x0358,
+		.sram_pdn_bits = GENMASK(8, 8),
+		.sram_pdn_ack_bits = GENMASK(12, 12),
+		.ext_buck_iso_offs = 0x039C,
+		.ext_buck_iso_mask = BIT(2),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_ADSP,
+				    MT8192_TOP_AXI_PROT_EN_2_SET,
+				    MT8192_TOP_AXI_PROT_EN_2_CLR,
+				    MT8192_TOP_AXI_PROT_EN_2_STA1),
+		},
+		.caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_EXT_BUCK_ISO,
+	},
 	[MT8192_POWER_DOMAIN_CAM] = {
 		.name = "cam",
 		.sta_mask = BIT(23),
-- 
2.18.0



From allen-kh.cheng at mediatek.com  Tue Dec 20 19:44:02 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Wed, 21 Dec 2022 11:44:02 +0800
Subject: [PATCH v2 1/6] soc: mediatek: pm-domains: Add buck isolation offset and mask to power domain data
In-Reply-To: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221221034407.19605-2-allen-kh.cheng@mediatek.com>

Add buck isolation offset and mask to power domain data.

Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
---
 drivers/soc/mediatek/mtk-pm-domains.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h
index 7d3c0c36316c..a5f24c58e35a 100644
--- a/drivers/soc/mediatek/mtk-pm-domains.h
+++ b/drivers/soc/mediatek/mtk-pm-domains.h
@@ -81,6 +81,8 @@ struct scpsys_bus_prot_data {
  * @ctl_offs: The offset for main power control register.
  * @sram_pdn_bits: The mask for sram power control bits.
  * @sram_pdn_ack_bits: The mask for sram power control acked bits.
+ * @ext_buck_iso_offs: The offset for external buck isolation
+ * @ext_buck_iso_mask: The mask for external buck isolation
  * @caps: The flag for active wake-up action.
  * @bp_infracfg: bus protection for infracfg subsystem
  * @bp_smi: bus protection for smi subsystem
@@ -91,6 +93,8 @@ struct scpsys_domain_data {
 	int ctl_offs;
 	u32 sram_pdn_bits;
 	u32 sram_pdn_ack_bits;
+	int ext_buck_iso_offs;
+	u32 ext_buck_iso_mask;
 	u8 caps;
 	const struct scpsys_bus_prot_data bp_infracfg[SPM_MAX_BUS_PROT_DATA];
 	const struct scpsys_bus_prot_data bp_smi[SPM_MAX_BUS_PROT_DATA];
-- 
2.18.0



From allen-kh.cheng at mediatek.com  Tue Dec 20 19:44:03 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Wed, 21 Dec 2022 11:44:03 +0800
Subject: [PATCH v2 2/6] soc: mediatek: pm-domains: Add buck isolation setting in power domain
In-Reply-To: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221221034407.19605-3-allen-kh.cheng@mediatek.com>

In MT8192, we need to disable EXT_BUCK_ISO before turning on the ADSP
power pm-domains (mtcmos).

Add the MTK_SCPD_EXT_BUCK_ISO flag to control the buck isolation
setting in the mediatek power domain driver.

Fixes: 59b644b01cf4 ("soc: mediatek: Add MediaTek SCPSYS power domains")
Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
---
 drivers/soc/mediatek/mtk-pm-domains.c | 8 ++++++++
 drivers/soc/mediatek/mtk-pm-domains.h | 1 +
 2 files changed, 9 insertions(+)

diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c
index 09e3c38b8466..63f1e183f645 100644
--- a/drivers/soc/mediatek/mtk-pm-domains.c
+++ b/drivers/soc/mediatek/mtk-pm-domains.c
@@ -218,6 +218,10 @@ static int scpsys_power_on(struct generic_pm_domain *genpd)
 	if (ret)
 		goto err_reg;
 
+	if (MTK_SCPD_CAPS(pd, MTK_SCPD_EXT_BUCK_ISO))
+		regmap_clear_bits(scpsys->base, pd->data->ext_buck_iso_offs,
+				  pd->data->ext_buck_iso_mask);
+
 	/* subsys power on */
 	regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_BIT);
 	regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_2ND_BIT);
@@ -272,6 +276,10 @@ static int scpsys_power_off(struct generic_pm_domain *genpd)
 	if (ret < 0)
 		return ret;
 
+	if (MTK_SCPD_CAPS(pd, MTK_SCPD_EXT_BUCK_ISO))
+		regmap_set_bits(scpsys->base, pd->data->ext_buck_iso_offs,
+				pd->data->ext_buck_iso_mask);
+
 	clk_bulk_disable_unprepare(pd->num_subsys_clks, pd->subsys_clks);
 
 	/* subsys power off */
diff --git a/drivers/soc/mediatek/mtk-pm-domains.h b/drivers/soc/mediatek/mtk-pm-domains.h
index a5f24c58e35a..5ec53ee073c4 100644
--- a/drivers/soc/mediatek/mtk-pm-domains.h
+++ b/drivers/soc/mediatek/mtk-pm-domains.h
@@ -10,6 +10,7 @@
 #define MTK_SCPD_DOMAIN_SUPPLY		BIT(4)
 /* can't set MTK_SCPD_KEEP_DEFAULT_OFF at the same time */
 #define MTK_SCPD_ALWAYS_ON		BIT(5)
+#define MTK_SCPD_EXT_BUCK_ISO		BIT(6)
 #define MTK_SCPD_CAPS(_scpd, _x)	((_scpd)->data->caps & (_x))
 
 #define SPM_VDE_PWR_CON			0x0210
-- 
2.18.0



From allen-kh.cheng at mediatek.com  Tue Dec 20 19:44:04 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Wed, 21 Dec 2022 11:44:04 +0800
Subject: [PATCH v2 3/6] dt-bindings: power: Add MT8192 ADSP power domain
In-Reply-To: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221221034407.19605-4-allen-kh.cheng@mediatek.com>

Add power domain ID for the ADSP power partition found on MT8192 SoC.

Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 include/dt-bindings/power/mt8192-power.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/dt-bindings/power/mt8192-power.h b/include/dt-bindings/power/mt8192-power.h
index 4eaa53d7270a..63e81cd0d06d 100644
--- a/include/dt-bindings/power/mt8192-power.h
+++ b/include/dt-bindings/power/mt8192-power.h
@@ -28,5 +28,6 @@
 #define MT8192_POWER_DOMAIN_CAM_RAWA	18
 #define MT8192_POWER_DOMAIN_CAM_RAWB	19
 #define MT8192_POWER_DOMAIN_CAM_RAWC	20
+#define MT8192_POWER_DOMAIN_ADSP	21
 
 #endif /* _DT_BINDINGS_POWER_MT8192_POWER_H */
-- 
2.18.0



From allen-kh.cheng at mediatek.com  Tue Dec 20 19:44:01 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Wed, 21 Dec 2022 11:44:01 +0800
Subject: [PATCH v2 0/6] Add ADSP power domains controller support for MT8192
Message-ID: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>

This series is based on matthias github, v6.1-next.
The previous discussion: 
https://patchwork.kernel.org/project/linux-mediatek/patch/20221201073328.1559-1-allen-kh.cheng at mediatek.com/

Change from v1:
 - move allOf before additionalProperties
 - add buck isolation setting patches into series

Allen-KH Cheng (6):
  soc: mediatek: pm-domains: Add buck isolation offset and mask to power
    domain data
  soc: mediatek: pm-domains: Add buck isolation setting in power domain
  dt-bindings: power: Add MT8192 ADSP power domain
  soc: mediatek: pm-domains: Add ADSP power domain data for MT8192
  dt-bindings: arm: mediatek: Add missing power-domains property
  arm64: dts: mediatek: Add the missing ADSP power domains controller
    for MT8192

 .../arm/mediatek/mediatek,mt8192-clock.yaml     | 17 +++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt8192.dtsi        |  9 +++++++++
 drivers/soc/mediatek/mt8192-pm-domains.h        | 16 ++++++++++++++++
 drivers/soc/mediatek/mtk-pm-domains.c           |  8 ++++++++
 drivers/soc/mediatek/mtk-pm-domains.h           |  5 +++++
 include/dt-bindings/power/mt8192-power.h        |  1 +
 6 files changed, 56 insertions(+)

-- 
2.18.0



From allen-kh.cheng at mediatek.com  Tue Dec 20 19:44:06 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Wed, 21 Dec 2022 11:44:06 +0800
Subject: [PATCH v2 5/6] dt-bindings: arm: mediatek: Add missing power-domains property
In-Reply-To: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
Message-ID: <20221221034407.19605-6-allen-kh.cheng@mediatek.com>

The "mediatek,mt8192-scp_adsp" binding requires a power domain to be
specified.

Fixes: 4a803990aeb1 ("dt-bindings: ARM: Mediatek: Add new document bindings of MT8192 clock")
Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
---
 .../arm/mediatek/mediatek,mt8192-clock.yaml     | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
index b57cc2e69efb..ce8dd2bfb533 100644
--- a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
+++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
@@ -40,6 +40,9 @@ properties:
   reg:
     maxItems: 1
 
+  power-domains:
+    maxItems: 1
+
   '#clock-cells':
     const: 1
 
@@ -47,13 +50,27 @@ required:
   - compatible
   - reg
 
+allOf:
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - mediatek,mt8192-scp_adsp
+    then:
+      required:
+        - power-domains
+
 additionalProperties: false
 
 examples:
   - |
+    #include <dt-bindings/power/mt8192-power.h>
+
     scp_adsp: clock-controller at 10720000 {
         compatible = "mediatek,mt8192-scp_adsp";
         reg = <0x10720000 0x1000>;
+        power-domains = <&spm MT8192_POWER_DOMAIN_ADSP>;
         #clock-cells = <1>;
     };
 
-- 
2.18.0



From peter.wang at mediatek.com  Tue Dec 20 21:59:38 2022
From: peter.wang at mediatek.com (=?utf-8?B?UGV0ZXIgV2FuZyAo546L5L+h5Y+LKQ==?=)
Date: Wed, 21 Dec 2022 05:59:38 +0000
Subject: [PATCH v6] ufs: core: wlun suspend SSU/enter hibern8 fail
 recovery
In-Reply-To: <CAONX=-d-LZSV9-R=oLDFKsBG8Zd90wXOcGR44kPaorDH-Y7MnQ@mail.gmail.com>
References: <20221208072520.26210-1-peter.wang@mediatek.com>
	 <yq14jtyekv2.fsf@ca-mkp.ca.oracle.com>
	 <CAONX=-d-LZSV9-R=oLDFKsBG8Zd90wXOcGR44kPaorDH-Y7MnQ@mail.gmail.com>
Message-ID: <35850d1c8f042d59f14f268502aa30ac497b2d5e.camel@mediatek.com>

On Wed, 2022-12-21 at 08:00 +1100, Daniil Lunev wrote:
> > Applied to 6.2/scsi-staging, thanks!
> 
> There is an interesting side effect of the patch in this iteration
> (which I am not sure was present in the past iteration I tried):
> If the device auto suspends while running purge - controller is
> seemingly recent and thus the purge is aborted (with no patch at all
> it hangs).
> That might be ok behaviour though - it will just make it an explicit
> requirement to disable runtime suspend during the management
> operation.
> 

Hi Daniil,

I am not sure if this is similar reason we get SSU(sleep) fail.
But if without this patch when purge is onging, system IO will hang,
this is no better.
And I have another idea about rpm and purge.

To disable runtime suspend when purge operation is ongoing:
1. Disable rpm when fPurgeEnable is set, polling bPurgeStatus become 0
and enable rpm.
   But polling bPurgeStatus will extend rpm timer, so we don't need
really disable rpm, right?
2. Check bPurgeStatus if enter runtime suspend, return EBUSY if
bPurgeStatus is not 0 to break suspend.
   This is correct design to tell rpm flamework that driver is busy
with purge and suspend is inappropriate. 
   But it should be similar as current flow, return EBUSY when get SSU
fail?

So, with current design, if purge initiator do not want to see rpm
EBUSY, then he should polling bPurgeStatus. 
What do you think?


Thanks.
BR
Peter



> localhost ~ # ufs-utils fl -t 6 -e -p /dev/bsg/ufs-bsg0
> localhost ~ # ufs-utils attr -a -p /dev/bsg/ufs-bsg0 | grep
> bPurgeStatus
> bPurgeStatus               := 0x00
> 
> [   25.801980] ufs_device_wlun 0:0:0:49488: START_STOP failed for
> power mode: 2, result 2
> [   25.802002] ufs_device_wlun 0:0:0:49488: Sense Key : Not Ready
> [current]
> [   25.802009] ufs_device_wlun 0:0:0:49488: Add. Sense: No additional
> sense information
> [   25.802020] ufs_device_wlun 0:0:0:49488: ufshcd_wl_runtime_suspend
> failed: -16

From krzysztof.kozlowski at linaro.org  Wed Dec 21 00:18:45 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Wed, 21 Dec 2022 09:18:45 +0100
Subject: [PATCH v2 5/6] dt-bindings: arm: mediatek: Add missing
 power-domains property
In-Reply-To: <20221221034407.19605-6-allen-kh.cheng@mediatek.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
 <20221221034407.19605-6-allen-kh.cheng@mediatek.com>
Message-ID: <6576a435-dcc1-af80-bbe9-dd98bb0d53e8@linaro.org>

On 21/12/2022 04:44, Allen-KH Cheng wrote:
> The "mediatek,mt8192-scp_adsp" binding requires a power domain to be
> specified.

That's not true. Before this patch, how does the binding require a power
domain? Please show me the part of binding which requires it.

Best regards,
Krzysztof



From matthias.bgg at gmail.com  Wed Dec 21 00:56:53 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Wed, 21 Dec 2022 09:56:53 +0100
Subject: [PATCH v2] soc: mediatek: mtk-svs: Enable the IRQ later
In-Reply-To: <20221127-mtk-svs-v2-0-145b07663ea8@chromium.org>
References: <20221127-mtk-svs-v2-0-145b07663ea8@chromium.org>
Message-ID: <12f4d25e-fb2e-8f4d-1874-46f7404b05b6@gmail.com>



On 20/12/2022 22:35, Ricardo Ribalda wrote:
> If the system does not come from reset (like when is booted via
> kexec()), the peripheral might triger an IRQ before the data structures
> are initialised.
> 
> Fixes:
> 
> [    0.227710] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000f08
> [    0.227913] Call trace:
> [    0.227918]  svs_isr+0x8c/0x538
> 
> Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>

Thanks Ricardo. Roger I'll wait for a Tested-by tag from you to make sure this 
time everything is fine.

Regards,
Matthias

> ---
> To: Matthias Brugger <matthias.bgg at gmail.com>
> To: Roger Lu <Roger.Lu at mediatek.com>
> Cc: linux-arm-kernel at lists.infradead.org
> Cc: linux-mediatek at lists.infradead.org
> Cc: linux-kernel at vger.kernel.org
> ---
> Changes in v2:
> - Enable the irq before svs_start, to avoid MT8192 not starting.
> - Link to v1: https://lore.kernel.org/r/20221127-mtk-svs-v1-0-7a5819595838 at chromium.org
> ---
>   drivers/soc/mediatek/mtk-svs.c | 16 ++++++++--------
>   1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
> index 0469c9dfeb04..75b2f534aa9d 100644
> --- a/drivers/soc/mediatek/mtk-svs.c
> +++ b/drivers/soc/mediatek/mtk-svs.c
> @@ -2385,14 +2385,6 @@ static int svs_probe(struct platform_device *pdev)
>   		goto svs_probe_free_resource;
>   	}
>   
> -	ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr,
> -					IRQF_ONESHOT, svsp->name, svsp);
> -	if (ret) {
> -		dev_err(svsp->dev, "register irq(%d) failed: %d\n",
> -			svsp_irq, ret);
> -		goto svs_probe_free_resource;
> -	}
> -
>   	svsp->main_clk = devm_clk_get(svsp->dev, "main");
>   	if (IS_ERR(svsp->main_clk)) {
>   		dev_err(svsp->dev, "failed to get clock: %ld\n",
> @@ -2414,6 +2406,14 @@ static int svs_probe(struct platform_device *pdev)
>   		goto svs_probe_clk_disable;
>   	}
>   
> +	ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr,
> +					IRQF_ONESHOT, svsp->name, svsp);
> +	if (ret) {
> +		dev_err(svsp->dev, "register irq(%d) failed: %d\n",
> +			svsp_irq, ret);
> +		goto svs_probe_iounmap;
> +	}
> +
>   	ret = svs_start(svsp);
>   	if (ret) {
>   		dev_err(svsp->dev, "svs start fail: %d\n", ret);
> 
> ---
> base-commit: 4312098baf37ee17a8350725e6e0d0e8590252d4
> change-id: 20221127-mtk-svs-add137fbf187
> 
> Best regards,


From regressions at leemhuis.info  Wed Dec 21 01:24:01 2022
From: regressions at leemhuis.info (Thorsten Leemhuis)
Date: Wed, 21 Dec 2022 10:24:01 +0100
Subject: Kernel Kernel bug caused by (cpufreq: mediatek: Refine
 mtk_cpufreq_voltage_tracking()) on Banana Pi R64 (MT7622) #forregzbot
In-Reply-To: <3599ec46-20d2-a233-a7c0-d2e363ebdf93@systemli.org>
References: <02c2c955-940b-b315-0474-85d0eddad7a3@leemhuis.info>
 <Y4jHvomTrU8guBox@makrotopia.org>
 <47a4665e-333d-a6e7-a2da-96cb06c2d87b@leemhuis.info>
 <20221202052716.uj3kzkunazmgazeq@vireshk-i7>
 <0ebef1a2-6b5a-04b9-a79b-79eb3349c32b@collabora.com>
 <c76bd301-0e8d-2d2b-0d3e-a57ece9b496f@collabora.com>
 <b1822bbc3775730c4cedf9652323c7d72e663e4b.camel@mediatek.com>
 <8be3e050-f32a-6761-8ebd-49c38dfcf9eb@collabora.com>
 <c186d104-43e0-ca10-3ce2-c2f922acd8bf@leemhuis.info>
 <37468027-6a27-dcb8-9c14-8f8426ec50d1@collabora.com>
 <20221202110139.vmwcmoudakm2nap4@vireshk-i7>
 <f70d7c09-df0d-4fa9-92c9-63f31cf56483@systemli.org>
 <5e07eb07de0fea2232c32f58691ffb7cfd2303f8.camel@mediatek.com>
 <3599ec46-20d2-a233-a7c0-d2e363ebdf93@systemli.org>
Message-ID: <7e03d11a-2ba7-6cac-5101-02b9b8f93b77@leemhuis.info>

[Note: this mail contains only information for Linux kernel regression
tracking. Mails like these contain '#forregzbot' in the subject to make
then easy to spot and filter out. The author also tried to remove most
or all individuals from the list of recipients to spare them the hassle.]

On 20.12.22 15:37, Nick wrote:
> thanks for all your help. I guess it's fine now.

I'm a bit confused here. The revert afaics never made it to mainline,
but nevertheless the report claimed two times now that the problem is
gone, hence marking it as resolved

#regzbot resolved: problem doesn't show up anymore according to the reporter

Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)

P.S.: As the Linux kernel's regression tracker I deal with a lot of
reports and sometimes miss something important when writing mails like
this. If that's the case here, don't hesitate to tell me in a public
reply, it's in everyone's interest to set the public record straight.


From angelogioacchino.delregno at collabora.com  Wed Dec 21 02:13:07 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 21 Dec 2022 11:13:07 +0100
Subject: [RESEND PATCH v4] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <20221221022523.8458-2-biao.huang@mediatek.com>
References: <20221221022523.8458-1-biao.huang@mediatek.com>
 <20221221022523.8458-2-biao.huang@mediatek.com>
Message-ID: <f591f169-acd8-d408-970b-8afc66eda8cf@collabora.com>

Il 21/12/22 03:25, Biao Huang ha scritto:
> Add Ethernet controller node for mt8195.
> 
> Signed-off-by: Biao Huang <biao.huang at mediatek.com>
> ---
>   arch/arm64/boot/dts/mediatek/mt8195-demo.dts | 88 ++++++++++++++++++++
>   arch/arm64/boot/dts/mediatek/mt8195.dtsi     | 86 +++++++++++++++++++
>   2 files changed, 174 insertions(+)
> 

..snip..

> diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> index 5d31536f4c48..02112bbf2bdf 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> @@ -1046,6 +1046,92 @@ spis1: spi at 1101e000 {
>   			status = "disabled";
>   		};
>   
> +		eth: ethernet at 11021000 {
> +			compatible = "mediatek,mt8195-gmac", "snps,dwmac-5.10a";
> +			reg = <0 0x11021000 0 0x4000>;
> +			interrupts = <GIC_SPI 716 IRQ_TYPE_LEVEL_HIGH 0>;
> +			interrupt-names = "macirq";
> +			clock-names = "axi",
> +				      "apb",
> +				      "mac_cg",

mac_cg goes as last clock, as specified in the binding.

Order: axi, apb, mac_main, ptp_ref, rmii_internal, mac_cg.

Please fix.

Regards,
Angelo

> +				      "mac_main",
> +				      "ptp_ref",
> +				      "rmii_internal";
> +			clocks = <&pericfg_ao CLK_PERI_AO_ETHERNET>,
> +				 <&pericfg_ao CLK_PERI_AO_ETHERNET_BUS>,
> +				 <&pericfg_ao CLK_PERI_AO_ETHERNET_MAC>,
> +				 <&topckgen CLK_TOP_SNPS_ETH_250M>,
> +				 <&topckgen CLK_TOP_SNPS_ETH_62P4M_PTP>,
> +				 <&topckgen CLK_TOP_SNPS_ETH_50M_RMII>;



From angelogioacchino.delregno at collabora.com  Wed Dec 21 02:18:39 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 21 Dec 2022 11:18:39 +0100
Subject: [PATCH v2 1/6] soc: mediatek: pm-domains: Add buck isolation
 offset and mask to power domain data
In-Reply-To: <20221221034407.19605-2-allen-kh.cheng@mediatek.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
 <20221221034407.19605-2-allen-kh.cheng@mediatek.com>
Message-ID: <2ea58598-2e9d-c048-4e6e-014206382758@collabora.com>

Il 21/12/22 04:44, Allen-KH Cheng ha scritto:
> Add buck isolation offset and mask to power domain data.
> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Wed Dec 21 02:20:53 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 21 Dec 2022 11:20:53 +0100
Subject: [PATCH v2 2/6] soc: mediatek: pm-domains: Add buck isolation
 setting in power domain
In-Reply-To: <20221221034407.19605-3-allen-kh.cheng@mediatek.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
 <20221221034407.19605-3-allen-kh.cheng@mediatek.com>
Message-ID: <7cba92b5-b0fe-cb26-cdec-463a00657d29@collabora.com>

Il 21/12/22 04:44, Allen-KH Cheng ha scritto:
> In MT8192, we need to disable EXT_BUCK_ISO before turning on the ADSP
> power pm-domains (mtcmos).
> 
> Add the MTK_SCPD_EXT_BUCK_ISO flag to control the buck isolation
> setting in the mediatek power domain driver.
> 
> Fixes: 59b644b01cf4 ("soc: mediatek: Add MediaTek SCPSYS power domains")
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> ---
>   drivers/soc/mediatek/mtk-pm-domains.c | 8 ++++++++
>   drivers/soc/mediatek/mtk-pm-domains.h | 1 +
>   2 files changed, 9 insertions(+)
> 
> diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c
> index 09e3c38b8466..63f1e183f645 100644
> --- a/drivers/soc/mediatek/mtk-pm-domains.c
> +++ b/drivers/soc/mediatek/mtk-pm-domains.c
> @@ -218,6 +218,10 @@ static int scpsys_power_on(struct generic_pm_domain *genpd)
>   	if (ret)
>   		goto err_reg;
>   
> +	if (MTK_SCPD_CAPS(pd, MTK_SCPD_EXT_BUCK_ISO))

if (pd->data->ext_buck_iso_offs && MTK_SCPD_CAPS(pd, MTK_SCPD_EXT_BUCK_ISO))
	regmap_[...etc]

...so that we validate that ext_buck_iso_offs is actually present (as I
suppose that this is supposed to *never* be 0x0).

Regards,
Angelo


From angelogioacchino.delregno at collabora.com  Wed Dec 21 02:21:14 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 21 Dec 2022 11:21:14 +0100
Subject: [PATCH v2 3/6] dt-bindings: power: Add MT8192 ADSP power domain
In-Reply-To: <20221221034407.19605-4-allen-kh.cheng@mediatek.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
 <20221221034407.19605-4-allen-kh.cheng@mediatek.com>
Message-ID: <8dc6fd60-4f45-c191-70ba-41e7cbf81090@collabora.com>

Il 21/12/22 04:44, Allen-KH Cheng ha scritto:
> Add power domain ID for the ADSP power partition found on MT8192 SoC.
> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Wed Dec 21 02:21:39 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 21 Dec 2022 11:21:39 +0100
Subject: [PATCH v2 4/6] soc: mediatek: pm-domains: Add ADSP power domain
 data for MT8192
In-Reply-To: <20221221034407.19605-5-allen-kh.cheng@mediatek.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
 <20221221034407.19605-5-allen-kh.cheng@mediatek.com>
Message-ID: <faf72517-d77f-e6f6-de94-c2dd2156b1d5@collabora.com>

Il 21/12/22 04:44, Allen-KH Cheng ha scritto:
> Add ADSP pm-domains (mtcmos) data for MT8192 SoC.
> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Wed Dec 21 02:22:37 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 21 Dec 2022 11:22:37 +0100
Subject: [PATCH v2 5/6] dt-bindings: arm: mediatek: Add missing
 power-domains property
In-Reply-To: <20221221034407.19605-6-allen-kh.cheng@mediatek.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
 <20221221034407.19605-6-allen-kh.cheng@mediatek.com>
Message-ID: <ec927229-cf03-136c-5629-22719110313a@collabora.com>

Il 21/12/22 04:44, Allen-KH Cheng ha scritto:
> The "mediatek,mt8192-scp_adsp" binding requires a power domain to be
> specified.
> 
> Fixes: 4a803990aeb1 ("dt-bindings: ARM: Mediatek: Add new document bindings of MT8192 clock")
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
> ---
>   .../arm/mediatek/mediatek,mt8192-clock.yaml     | 17 +++++++++++++++++
>   1 file changed, 17 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
> index b57cc2e69efb..ce8dd2bfb533 100644
> --- a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
> +++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
> @@ -40,6 +40,9 @@ properties:
>     reg:
>       maxItems: 1
>   
> +  power-domains:
> +    maxItems: 1
> +
>     '#clock-cells':
>       const: 1
>   
> @@ -47,13 +50,27 @@ required:
>     - compatible
>     - reg
>   
> +allOf:

allOf is unnecessary here.

Regards,
Angelo



From angelogioacchino.delregno at collabora.com  Wed Dec 21 02:23:06 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 21 Dec 2022 11:23:06 +0100
Subject: [PATCH v2 6/6] arm64: dts: mediatek: Add the missing ADSP power
 domains controller for MT8192
In-Reply-To: <20221221034407.19605-7-allen-kh.cheng@mediatek.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
 <20221221034407.19605-7-allen-kh.cheng@mediatek.com>
Message-ID: <43f852a3-b82f-cd0c-a5aa-bade855ac8f4@collabora.com>

Il 21/12/22 04:44, Allen-KH Cheng ha scritto:
> Add the missing ADSP power domains controller for mt8192-scp_adsp clock
> controllers.
> 
> Fixes: 5d2b897bc6f5 ("arm64: dts: mediatek: Add mt8192 clock controllers")
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From lorenzo at kernel.org  Wed Dec 21 02:26:21 2022
From: lorenzo at kernel.org (lorenzo at kernel.org)
Date: Wed, 21 Dec 2022 11:26:21 +0100
Subject: [PATCH v2] wifi: mt76: fix potential memory leakage
In-Reply-To: <9d8aa92e3650128c94af91435a222c00ff2acb1c.camel@mediatek.com>
References: <0a218783098a6b1b90ff120c7182acee93dc8feb.1671423784.git.Bo.Jiao@mediatek.com>
 <Y6A1Et1yzcWnWhpy@lore-desk>
 <9d8aa92e3650128c94af91435a222c00ff2acb1c.camel@mediatek.com>
Message-ID: <Y6LfTUoSZ8W/gJ0Y@lore-desk>

[...]

> Hi Lore,

Hi Sujuan,

> 
> we love your patch, but we have another patch to avoid memory
> fragmentation by duplicating the rx skb after mt76_dma_dequeue(). it
> requires mt76_get_rxwi() be placed before page_frag_alloc().
> 
> the below patch(need rebase) will be sent after the current patch is
> accepted.
> 
> --- a/drivers/net/wireless/mediatek/mt76/dma.c
> +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> @@ -386,9 +386,11 @@ mt76_dma_get_buf(struct mt76_dev *dev, struct
> mt76_queue *q, int idx,
>                                  SKB_WITH_OVERHEAD(q->buf_size),
>                                  DMA_FROM_DEVICE);
> 
> -               buf = t->ptr;
> +               buf = page_frag_alloc(&q->rx_page, q->buf_size,
> GFP_ATOMIC);
> +               if (!buf)
> +                       return NULL;
> +               memcpy(buf, t->ptr, SKB_WITH_OVERHEAD(q->buf_size));

We this approach we still need to allocate the buffer (in mt76_dma_get_buf()
instead of mt76_dma_rx_fill()) but we need even to copy the full buffer that
can be pretty expensive instead of relying on the DMA, so I would avoid this
approach.

Regards,
Lorenzo

>                 t->dma_addr = 0;
> -               t->ptr = NULL;
> 
>                 mt76_put_rxwi(dev, t);
> 
> @@ -569,6 +571,7 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
> mt76_queue *q)
>         while (q->queued < q->ndesc - 1) {
>                 struct mt76_txwi_cache *t = NULL;
>                 struct mt76_queue_buf qbuf;
> +               bool skip_alloc = false;
>                 void *buf = NULL;
> 
>                 if ((q->flags & MT_QFLAG_WED) &&
> @@ -576,11 +579,19 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
> mt76_queue *q)
>                         t = mt76_get_rxwi(dev);
>                         if (!t)
>                                 break;
> +
> +                       if (t->ptr) {
> +                               skip_alloc = true;
> +                               buf = t->ptr;
> +                       }
>                 }
> 
> -               buf = page_frag_alloc(&q->rx_page, q->buf_size,
> GFP_ATOMIC);
> -               if (!buf)
> -                       break;
> +               if (!skip_alloc) {
> +                       buf = page_frag_alloc(&q->rx_page, q->buf_size,
> +                                             GFP_ATOMIC);
> +                       if (!buf)
> +                               break;
> +               }
> 
>                 addr = dma_map_single(dev->dma_dev, buf, len,
> DMA_FROM_DEVICE);
>                 if (unlikely(dma_mapping_error(dev->dma_dev, addr))) {
> --
> 2.18.0
> 
> > > -- 
> > > 2.18.0
> > > 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221221/1deb777c/attachment-0001.sig>

From krzysztof.kozlowski at linaro.org  Wed Dec 21 02:33:06 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Wed, 21 Dec 2022 11:33:06 +0100
Subject: [PATCH v2 5/6] dt-bindings: arm: mediatek: Add missing
 power-domains property
In-Reply-To: <ec927229-cf03-136c-5629-22719110313a@collabora.com>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
 <20221221034407.19605-6-allen-kh.cheng@mediatek.com>
 <ec927229-cf03-136c-5629-22719110313a@collabora.com>
Message-ID: <403b0310-070f-1ecc-2188-95c22859bae1@linaro.org>

On 21/12/2022 11:22, AngeloGioacchino Del Regno wrote:
> Il 21/12/22 04:44, Allen-KH Cheng ha scritto:
>> The "mediatek,mt8192-scp_adsp" binding requires a power domain to be
>> specified.
>>
>> Fixes: 4a803990aeb1 ("dt-bindings: ARM: Mediatek: Add new document bindings of MT8192 clock")
>> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
>> ---
>>   .../arm/mediatek/mediatek,mt8192-clock.yaml     | 17 +++++++++++++++++
>>   1 file changed, 17 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
>> index b57cc2e69efb..ce8dd2bfb533 100644
>> --- a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
>> +++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
>> @@ -40,6 +40,9 @@ properties:
>>     reg:
>>       maxItems: 1
>>   
>> +  power-domains:
>> +    maxItems: 1
>> +
>>     '#clock-cells':
>>       const: 1
>>   
>> @@ -47,13 +50,27 @@ required:
>>     - compatible
>>     - reg
>>   
>> +allOf:
> 
> allOf is unnecessary here.

If you mean that "if:" can be without it, then it is better to have
allOf. It grows often, so you avoid useless indentation change later.


Best regards,
Krzysztof



From angelogioacchino.delregno at collabora.com  Wed Dec 21 02:34:05 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 21 Dec 2022 11:34:05 +0100
Subject: [PATCH v2 5/6] dt-bindings: arm: mediatek: Add missing
 power-domains property
In-Reply-To: <403b0310-070f-1ecc-2188-95c22859bae1@linaro.org>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
 <20221221034407.19605-6-allen-kh.cheng@mediatek.com>
 <ec927229-cf03-136c-5629-22719110313a@collabora.com>
 <403b0310-070f-1ecc-2188-95c22859bae1@linaro.org>
Message-ID: <9ea3d941-e68a-ce48-5f34-264f925c4358@collabora.com>

Il 21/12/22 11:33, Krzysztof Kozlowski ha scritto:
> On 21/12/2022 11:22, AngeloGioacchino Del Regno wrote:
>> Il 21/12/22 04:44, Allen-KH Cheng ha scritto:
>>> The "mediatek,mt8192-scp_adsp" binding requires a power domain to be
>>> specified.
>>>
>>> Fixes: 4a803990aeb1 ("dt-bindings: ARM: Mediatek: Add new document bindings of MT8192 clock")
>>> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
>>> ---
>>>    .../arm/mediatek/mediatek,mt8192-clock.yaml     | 17 +++++++++++++++++
>>>    1 file changed, 17 insertions(+)
>>>
>>> diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
>>> index b57cc2e69efb..ce8dd2bfb533 100644
>>> --- a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
>>> +++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8192-clock.yaml
>>> @@ -40,6 +40,9 @@ properties:
>>>      reg:
>>>        maxItems: 1
>>>    
>>> +  power-domains:
>>> +    maxItems: 1
>>> +
>>>      '#clock-cells':
>>>        const: 1
>>>    
>>> @@ -47,13 +50,27 @@ required:
>>>      - compatible
>>>      - reg
>>>    
>>> +allOf:
>>
>> allOf is unnecessary here.
> 
> If you mean that "if:" can be without it, then it is better to have
> allOf. It grows often, so you avoid useless indentation change later.
> 
> 

Yes, that's what I mean. I've suggested so because I don't expect this list
to grow in the future.

Regards,
Angelo



From angelogioacchino.delregno at collabora.com  Wed Dec 21 02:38:29 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 21 Dec 2022 11:38:29 +0100
Subject: [PATCH] media: platform: mtk-mdp3: fix Kconfig dependencies
In-Reply-To: <20221215164021.694343-1-arnd@kernel.org>
References: <20221215164021.694343-1-arnd@kernel.org>
Message-ID: <9e2d13f2-03cc-1c4c-d24d-b653aae81936@collabora.com>

Il 15/12/22 17:40, Arnd Bergmann ha scritto:
> From: Arnd Bergmann <arnd at arndb.de>
> 
> The new mdp3 driver uses 'select' to force-enable a couple of drivers
> it depends on. This is error-prone and likely to cause dependency
> loops as well as warnings like:
> 
> WARNING: unmet direct dependencies detected for VIDEO_MEDIATEK_VPU
>    Depends on [n]: MEDIA_SUPPORT [=m] && MEDIA_PLATFORM_SUPPORT [=y] && MEDIA_PLATFORM_DRIVERS [=y] && V4L_MEM2MEM_DRIVERS [=n] && VIDEO_DEV [=m] && (ARCH_MEDIATEK [=y] || COMPILE_TEST [=y])
>    Selected by [m]:
>    - VIDEO_MEDIATEK_MDP3 [=m] && MEDIA_SUPPORT [=m] && MEDIA_PLATFORM_SUPPORT [=y] && MEDIA_PLATFORM_DRIVERS [=y] && (MTK_IOMMU [=m] || COMPILE_TEST [=y]) && VIDEO_DEV [=m] && (ARCH_MEDIATEK [=y] || COMPILE_TEST [=y]) && HAS_DMA [=y] && REMOTEPROC [=y]
> 
> This specific warning was already addressed in a previous patch,
> but there are similar unnecessary 'select' statements, so turn those
> into 'depends on'. This also means the dependency on ARCH_MEDIATEK
> is redundant and can be dropped.
> 
> Fixes: 61890ccaefaf ("media: platform: mtk-mdp3: add MediaTek MDP3 driver")
> Fixes: 9195a860ef0a ("media: platform: mtk-mdp3: remove unused VIDEO_MEDIATEK_VPU config")
> Signed-off-by: Arnd Bergmann <arnd at arndb.de>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Wed Dec 21 03:18:53 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 21 Dec 2022 12:18:53 +0100
Subject: [PATCH] wifi: mt76: mt7921: add ack signal support
In-Reply-To: <b2f1f90b787a6b29df5a3e7e8842591325b0c74e.1671193434.git.deren.wu@mediatek.com>
References: <b2f1f90b787a6b29df5a3e7e8842591325b0c74e.1671193434.git.deren.wu@mediatek.com>
Message-ID: <80fa1519-f68f-abf5-dec9-76e37fdadd84@collabora.com>

Il 16/12/22 14:11, Deren Wu ha scritto:
> This reports signal strength of ACK packets from the peer as measured
> at each interface.
> 
> Reviewed-by: Ryder Lee <ryder.lee at mediatek.com>
> Signed-off-by: Deren Wu <deren.wu at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From allen-kh.cheng at mediatek.com  Wed Dec 21 02:48:56 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Wed, 21 Dec 2022 18:48:56 +0800
Subject: [PATCH] arm64: dts: mediatek: mt8186: Add crypto support for eMMC controller
Message-ID: <20221221104856.28770-1-allen-kh.cheng@mediatek.com>

For crypto support, add a crypto clock of the inline crypto engine and
expand the register size in the eMMC controller.

Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
---
 arch/arm64/boot/dts/mediatek/mt8186.dtsi | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8186.dtsi b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
index c326aeb33a10..88b6191e1aa0 100644
--- a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
@@ -662,12 +662,13 @@
 		mmc0: mmc at 11230000 {
 			compatible = "mediatek,mt8186-mmc",
 				     "mediatek,mt8183-mmc";
-			reg = <0 0x11230000 0 0x1000>,
+			reg = <0 0x11230000 0 0x10000>,
 			      <0 0x11cd0000 0 0x1000>;
 			clocks = <&topckgen CLK_TOP_MSDC50_0>,
 				 <&infracfg_ao CLK_INFRA_AO_MSDC0>,
-				 <&infracfg_ao CLK_INFRA_AO_MSDC0_SRC>;
-			clock-names = "source", "hclk", "source_cg";
+				 <&infracfg_ao CLK_INFRA_AO_MSDC0_SRC>,
+				 <&infracfg_ao CLK_INFRA_AO_MSDCFDE>;
+			clock-names = "source", "hclk", "source_cg", "crypto";
 			interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH 0>;
 			assigned-clocks = <&topckgen CLK_TOP_MSDC50_0>;
 			assigned-clock-parents = <&apmixedsys CLK_APMIXED_MSDCPLL>;
-- 
2.18.0



From peter.wang at mediatek.com  Wed Dec 21 04:35:37 2022
From: peter.wang at mediatek.com (peter.wang at mediatek.com)
Date: Wed, 21 Dec 2022 20:35:37 +0800
Subject: [PATCH v1] ufs: core: wlun resume SSU(Acitve) fail recovery
Message-ID: <20221221123537.30148-1-peter.wang@mediatek.com>

From: Peter Wang <peter.wang at mediatek.com>

When wlun resume SSU(Active) timeout, scsi try eh_host_reset_handler.
But ufshcd_eh_host_reset_handler hang at wait flush_work(&hba->eh_work).
And ufshcd_err_handler hang at wait rpm resume.
Do link recovery only in this case. Below is IO hang stack dump.

<ffffffdd78e02b34> schedule+0x110/0x204
<ffffffdd78e0be60> schedule_timeout+0x98/0x138
<ffffffdd78e040e8> wait_for_common_io+0x130/0x2d0
<ffffffdd77d6a000> blk_execute_rq+0x10c/0x16c
<ffffffdd78126d90> __scsi_execute+0xfc/0x278
<ffffffdd7813891c> ufshcd_set_dev_pwr_mode+0x1c8/0x40c
<ffffffdd78137d1c> __ufshcd_wl_resume+0xf0/0x5cc
<ffffffdd78137ae0> ufshcd_wl_runtime_resume+0x40/0x18c
<ffffffdd78136108> scsi_runtime_resume+0x88/0x104
<ffffffdd7809a4f8> __rpm_callback+0x1a0/0xaec
<ffffffdd7809b624> rpm_resume+0x7e0/0xcd0
<ffffffdd7809a788> __rpm_callback+0x430/0xaec
<ffffffdd7809b644> rpm_resume+0x800/0xcd0
<ffffffdd780a0778> pm_runtime_work+0x148/0x198

<ffffffdd78e02b34> schedule+0x110/0x204
<ffffffdd78e0be10> schedule_timeout+0x48/0x138
<ffffffdd78e03d9c> wait_for_common+0x144/0x2dc
<ffffffdd7758bba4> __flush_work+0x3d0/0x508
<ffffffdd7815572c> ufshcd_eh_host_reset_handler+0x134/0x3a8
<ffffffdd781216f4> scsi_try_host_reset+0x54/0x204
<ffffffdd78120594> scsi_eh_ready_devs+0xb30/0xd48
<ffffffdd7812373c> scsi_error_handler+0x260/0x874

<ffffffdd78e02b34> schedule+0x110/0x204
<ffffffdd7809af64> rpm_resume+0x120/0xcd0
<ffffffdd7809fde8> __pm_runtime_resume+0xa0/0x17c
<ffffffdd7815193c> ufshcd_err_handling_prepare+0x40/0x430
<ffffffdd7814cce8> ufshcd_err_handler+0x1c4/0xd4c

Signed-off-by: Peter Wang <peter.wang at mediatek.com>
---
 drivers/ufs/core/ufshcd.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index e18c9f4463ec..5aaffd13e132 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -7363,9 +7363,27 @@ static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd)
 	int err = SUCCESS;
 	unsigned long flags;
 	struct ufs_hba *hba;
+	struct device *dev;
 
 	hba = shost_priv(cmd->device->host);
 
+	/*
+	 * If __ufshcd_wl_suspend get fail and runtime_status = RPM_RESUMING,
+	 * do link recovery only. Because schedule eh work will get dead lock
+	 * in ufshcd_rpm_get_sync to wait wlun resume, but wlun resume get
+	 * error and wait eh work finish.
+	 */
+	dev = &hba->sdev_ufs_device->sdev_gendev;
+	if (dev->power.runtime_status == RPM_RESUMING) {
+		err = ufshcd_link_recovery(hba);
+		if (err) {
+			dev_err(hba->dev, "WL Device PM: status:%d, err:%d\n",
+				dev->power.runtime_status,
+				dev->power.runtime_error);
+		}
+		return err;
+	}
+
 	spin_lock_irqsave(hba->host->host_lock, flags);
 	hba->force_reset = true;
 	ufshcd_schedule_eh_work(hba);
-- 
2.18.0



From matthias.bgg at gmail.com  Wed Dec 21 05:09:29 2022
From: matthias.bgg at gmail.com (Matthias Brugger)
Date: Wed, 21 Dec 2022 14:09:29 +0100
Subject: [PATCH] arm64: dts: mediatek: mt8186: Add crypto support for eMMC
 controller
In-Reply-To: <20221221104856.28770-1-allen-kh.cheng@mediatek.com>
References: <20221221104856.28770-1-allen-kh.cheng@mediatek.com>
Message-ID: <6b650bcd-d063-9998-442a-3705c0654d73@gmail.com>



On 21/12/2022 11:48, Allen-KH Cheng wrote:
> For crypto support, add a crypto clock of the inline crypto engine and
> expand the register size in the eMMC controller.
> 
> Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>

Applied, thanks!

> ---
>   arch/arm64/boot/dts/mediatek/mt8186.dtsi | 7 ++++---
>   1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm64/boot/dts/mediatek/mt8186.dtsi b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
> index c326aeb33a10..88b6191e1aa0 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
> @@ -662,12 +662,13 @@
>   		mmc0: mmc at 11230000 {
>   			compatible = "mediatek,mt8186-mmc",
>   				     "mediatek,mt8183-mmc";
> -			reg = <0 0x11230000 0 0x1000>,
> +			reg = <0 0x11230000 0 0x10000>,
>   			      <0 0x11cd0000 0 0x1000>;
>   			clocks = <&topckgen CLK_TOP_MSDC50_0>,
>   				 <&infracfg_ao CLK_INFRA_AO_MSDC0>,
> -				 <&infracfg_ao CLK_INFRA_AO_MSDC0_SRC>;
> -			clock-names = "source", "hclk", "source_cg";
> +				 <&infracfg_ao CLK_INFRA_AO_MSDC0_SRC>,
> +				 <&infracfg_ao CLK_INFRA_AO_MSDCFDE>;
> +			clock-names = "source", "hclk", "source_cg", "crypto";
>   			interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH 0>;
>   			assigned-clocks = <&topckgen CLK_TOP_MSDC50_0>;
>   			assigned-clock-parents = <&apmixedsys CLK_APMIXED_MSDCPLL>;


From andrew at lunn.ch  Wed Dec 21 05:16:50 2022
From: andrew at lunn.ch (Andrew Lunn)
Date: Wed, 21 Dec 2022 14:16:50 +0100
Subject: [RESEND PATCH v4] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <20221221022523.8458-2-biao.huang@mediatek.com>
References: <20221221022523.8458-1-biao.huang@mediatek.com>
 <20221221022523.8458-2-biao.huang@mediatek.com>
Message-ID: <Y6MHQnUcfBjibA8C@lunn.ch>

> +&eth {
> +	phy-mode ="rgmii-rxid";

That is pretty unusual. You don't see rxid, or txid very often, it is
normally rgmii, or rgmii-id.

> +	phy-handle = <&ethernet_phy0>;
> +	snps,reset-gpio = <&pio 93 GPIO_ACTIVE_HIGH>;
> +	snps,reset-delays-us = <0 10000 10000>;
> +	mediatek,tx-delay-ps = <2030>;

How important is the 30 here?

You appear to have the PHY doing the RX delay, and the MAC doing the
TX delay. Normally we have the PHY do both. Can you actually do

phy-mode = "rgmii-id", and mediatek,tx-delay-ps = <30> ? That would
then have the PHY doing the basic 2ns delay, and the MAC doing the
fine tuning needed for TX?

     Andrew


From angelogioacchino.delregno at collabora.com  Wed Dec 21 05:54:28 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Wed, 21 Dec 2022 14:54:28 +0100
Subject: [PATCH v6 0/3] Add vcodec lat and core nodes for mt8192
In-Reply-To: <20221207055107.11333-1-allen-kh.cheng@mediatek.com>
References: <20221207055107.11333-1-allen-kh.cheng@mediatek.com>
Message-ID: <8911df4a-e581-3792-ba8a-7c150ed8407e@collabora.com>

Il 07/12/22 06:51, Allen-KH Cheng ha scritto:
> This series is based on linux-next.
> 
> Change from v5:
>   - Add required interrupts for mediatek,mtk-vcodec-core
>   - Rewrite commit message for 'Remove "dma-ranges" property for decoder' PATCH
> 
> Change from v4:
>   - Add patch for removing dma-ranges
>   - Update child names to video-codec
>   - Update patch title and message
> 
> Change from v3:
>   - Drop `vcodec_lat:` and `vcodec_core:`
> 
> Change from v2:
>   - Add a dt-bindings patch for changing "vcodec" to "video-codec"
>   - Rename child names for vcodec lat and core nodes
> 
> Change from v1:
>   - Replace node names with video-codec
>    [Allen-KH Cheng <allen-kh.cheng at mediatek.com>]
> 
> Allen-KH Cheng (3):
>    media: dt-bindings: media: mediatek: Rename child node names for
>      decoder
>    media: dt-bindings: media: mediatek: Remove "dma-ranges" property for
>      decoder
>    arm64: dts: mt8192: Add video-codec nodes
> 
>   .../media/mediatek,vcodec-subdev-decoder.yaml | 68 ++-----------------
>   arch/arm64/boot/dts/mediatek/mt8192.dtsi      | 59 ++++++++++++++++
>   2 files changed, 64 insertions(+), 63 deletions(-)
> 

Matthias, can you please pick this one? It's all good and tested.

Thanks,
Angelo


From Sujuan.Chen at mediatek.com  Wed Dec 21 06:48:19 2022
From: Sujuan.Chen at mediatek.com (=?utf-8?B?U3VqdWFuIENoZW4gKOmZiOe0oOWonyk=?=)
Date: Wed, 21 Dec 2022 14:48:19 +0000
Subject: [PATCH v2] wifi: mt76: fix potential memory leakage
In-Reply-To: <Y6LfTUoSZ8W/gJ0Y@lore-desk>
References: <0a218783098a6b1b90ff120c7182acee93dc8feb.1671423784.git.Bo.Jiao@mediatek.com>
	 <Y6A1Et1yzcWnWhpy@lore-desk>
	 <9d8aa92e3650128c94af91435a222c00ff2acb1c.camel@mediatek.com>
	 <Y6LfTUoSZ8W/gJ0Y@lore-desk>
Message-ID: <3940cc5ccb4b17d51b5176e722daef0d1af66d6a.camel@mediatek.com>

On Wed, 2022-12-21 at 11:26 +0100, lorenzo at kernel.org wrote:
> [...]
> 
> > Hi Lore,
> 
> Hi Sujuan,
> 
> > 
> > we love your patch, but we have another patch to avoid memory
> > fragmentation by duplicating the rx skb after mt76_dma_dequeue().
> > it
> > requires mt76_get_rxwi() be placed before page_frag_alloc().
> > 
> > the below patch(need rebase) will be sent after the current patch
> > is
> > accepted.
> > 
> > --- a/drivers/net/wireless/mediatek/mt76/dma.c
> > +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> > @@ -386,9 +386,11 @@ mt76_dma_get_buf(struct mt76_dev *dev, struct
> > mt76_queue *q, int idx,
> >                                  SKB_WITH_OVERHEAD(q->buf_size),
> >                                  DMA_FROM_DEVICE);
> > 
> > -               buf = t->ptr;
> > +               buf = page_frag_alloc(&q->rx_page, q->buf_size,
> > GFP_ATOMIC);
> > +               if (!buf)
> > +                       return NULL;
> > +               memcpy(buf, t->ptr, SKB_WITH_OVERHEAD(q-
> > >buf_size));
> 
> We this approach we still need to allocate the buffer (in
> mt76_dma_get_buf()
> instead of mt76_dma_rx_fill()) but we need even to copy the full
> buffer that
> can be pretty expensive instead of relying on the DMA, so I would
> avoid this
> approach.
> 

Hi Lore,

Yes, it is so expensive, but if no memcopy, it will casue memory
fragmentation (we hit this issue in internal SQC).

as we know, wed needs to exchange rx pkt(belongs to wed rx buffer
manager) with wifi driver(dma rx data queue) by exchanging wfdma dmad
to ensure the free wed rx buffer.

it is possiable that a large number of buffer has been exchanged to wed
and can not come back to wlan driver. So, the memory from the same 32K
page cache is unable to be released, and it will be failed at
page_frag_alloc in mt76_dma_rx_fill.

Any ideas but memcopy?

Regards,
Sujuan

> Regards,
> Lorenzo
> 
> >                 t->dma_addr = 0;
> > -               t->ptr = NULL;
> > 
> >                 mt76_put_rxwi(dev, t);
> > 
> > @@ -569,6 +571,7 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
> > mt76_queue *q)
> >         while (q->queued < q->ndesc - 1) {
> >                 struct mt76_txwi_cache *t = NULL;
> >                 struct mt76_queue_buf qbuf;
> > +               bool skip_alloc = false;
> >                 void *buf = NULL;
> > 
> >                 if ((q->flags & MT_QFLAG_WED) &&
> > @@ -576,11 +579,19 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
> > mt76_queue *q)
> >                         t = mt76_get_rxwi(dev);
> >                         if (!t)
> >                                 break;
> > +
> > +                       if (t->ptr) {
> > +                               skip_alloc = true;
> > +                               buf = t->ptr;
> > +                       }
> >                 }
> > 
> > -               buf = page_frag_alloc(&q->rx_page, q->buf_size,
> > GFP_ATOMIC);
> > -               if (!buf)
> > -                       break;
> > +               if (!skip_alloc) {
> > +                       buf = page_frag_alloc(&q->rx_page, q-
> > >buf_size,
> > +                                             GFP_ATOMIC);
> > +                       if (!buf)
> > +                               break;
> > +               }
> > 
> >                 addr = dma_map_single(dev->dma_dev, buf, len,
> > DMA_FROM_DEVICE);
> >                 if (unlikely(dma_mapping_error(dev->dma_dev,
> > addr))) {
> > --
> > 2.18.0
> > 
> > > > -- 
> > > > 2.18.0
> > > > 

From nbd at nbd.name  Wed Dec 21 07:12:40 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Wed, 21 Dec 2022 16:12:40 +0100
Subject: [PATCH v2] wifi: mt76: fix potential memory leakage
In-Reply-To: <3940cc5ccb4b17d51b5176e722daef0d1af66d6a.camel@mediatek.com>
References: <3940cc5ccb4b17d51b5176e722daef0d1af66d6a.camel@mediatek.com>
Message-ID: <B2689D6F-E04E-4E9B-9244-4E5069DC464D@nbd.name>

Hi Sujuan,

> Yes, it is so expensive, but if no memcopy, it will casue memory
> fragmentation (we hit this issue in internal SQC).
> 
> as we know, wed needs to exchange rx pkt(belongs to wed rx buffer
> manager) with wifi driver(dma rx data queue) by exchanging wfdma dmad
> to ensure the free wed rx buffer.
> 
> it is possiable that a large number of buffer has been exchanged to wed
> and can not come back to wlan driver. So, the memory from the same 32K
> page cache is unable to be released, and it will be failed at
> page_frag_alloc in mt76_dma_rx_fill.
> 
> Any ideas but memcopy?
A simple solution would be to simply allocate single pages, or half-page fragments.

- Felix



From lkp at intel.com  Wed Dec 21 08:40:09 2022
From: lkp at intel.com (kernel test robot)
Date: Thu, 22 Dec 2022 00:40:09 +0800
Subject: [PATCH v1] ufs: core: wlun resume SSU(Acitve) fail recovery
In-Reply-To: <20221221123537.30148-1-peter.wang@mediatek.com>
References: <20221221123537.30148-1-peter.wang@mediatek.com>
Message-ID: <202212220045.SBd8VQps-lkp@intel.com>

Hi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on jejb-scsi/for-next]
[also build test ERROR on mkp-scsi/for-next linus/master v6.1 next-20221220]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/peter-wang-mediatek-com/ufs-core-wlun-resume-SSU-Acitve-fail-recovery/20221221-203634
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
patch link:    https://lore.kernel.org/r/20221221123537.30148-1-peter.wang%40mediatek.com
patch subject: [PATCH v1] ufs: core: wlun resume SSU(Acitve) fail recovery
config: m68k-allmodconfig
compiler: m68k-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/97f75d9637531953204ec88d6550a6b2f04f2a89
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review peter-wang-mediatek-com/ufs-core-wlun-resume-SSU-Acitve-fail-recovery/20221221-203634
        git checkout 97f75d9637531953204ec88d6550a6b2f04f2a89
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k SHELL=/bin/bash drivers/ufs/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp at intel.com>

All errors (new ones prefixed by >>):

   drivers/ufs/core/ufshcd.c: In function 'ufshcd_eh_host_reset_handler':
>> drivers/ufs/core/ufshcd.c:7376:19: error: 'struct ufs_hba' has no member named 'sdev_ufs_device'
    7376 |         dev = &hba->sdev_ufs_device->sdev_gendev;
         |                   ^~
>> drivers/ufs/core/ufshcd.c:7377:23: error: 'struct dev_pm_info' has no member named 'runtime_status'
    7377 |         if (dev->power.runtime_status == RPM_RESUMING) {
         |                       ^
   In file included from include/linux/device.h:15,
                    from include/linux/async.h:14,
                    from drivers/ufs/core/ufshcd.c:12:
   drivers/ufs/core/ufshcd.c:7381:43: error: 'struct dev_pm_info' has no member named 'runtime_status'
    7381 |                                 dev->power.runtime_status,
         |                                           ^
   include/linux/dev_printk.h:110:37: note: in definition of macro 'dev_printk_index_wrap'
     110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
         |                                     ^~~~~~~~~~~
   drivers/ufs/core/ufshcd.c:7380:25: note: in expansion of macro 'dev_err'
    7380 |                         dev_err(hba->dev, "WL Device PM: status:%d, err:%d\n",
         |                         ^~~~~~~
>> drivers/ufs/core/ufshcd.c:7382:43: error: 'struct dev_pm_info' has no member named 'runtime_error'
    7382 |                                 dev->power.runtime_error);
         |                                           ^
   include/linux/dev_printk.h:110:37: note: in definition of macro 'dev_printk_index_wrap'
     110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
         |                                     ^~~~~~~~~~~
   drivers/ufs/core/ufshcd.c:7380:25: note: in expansion of macro 'dev_err'
    7380 |                         dev_err(hba->dev, "WL Device PM: status:%d, err:%d\n",
         |                         ^~~~~~~


vim +7376 drivers/ufs/core/ufshcd.c

  7354	
  7355	/**
  7356	 * ufshcd_eh_host_reset_handler - host reset handler registered to scsi layer
  7357	 * @cmd: SCSI command pointer
  7358	 *
  7359	 * Returns SUCCESS/FAILED
  7360	 */
  7361	static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd)
  7362	{
  7363		int err = SUCCESS;
  7364		unsigned long flags;
  7365		struct ufs_hba *hba;
  7366		struct device *dev;
  7367	
  7368		hba = shost_priv(cmd->device->host);
  7369	
  7370		/*
  7371		 * If __ufshcd_wl_suspend get fail and runtime_status = RPM_RESUMING,
  7372		 * do link recovery only. Because schedule eh work will get dead lock
  7373		 * in ufshcd_rpm_get_sync to wait wlun resume, but wlun resume get
  7374		 * error and wait eh work finish.
  7375		 */
> 7376		dev = &hba->sdev_ufs_device->sdev_gendev;
> 7377		if (dev->power.runtime_status == RPM_RESUMING) {
  7378			err = ufshcd_link_recovery(hba);
  7379			if (err) {
  7380				dev_err(hba->dev, "WL Device PM: status:%d, err:%d\n",
  7381					dev->power.runtime_status,
> 7382					dev->power.runtime_error);
  7383			}
  7384			return err;
  7385		}
  7386	
  7387		spin_lock_irqsave(hba->host->host_lock, flags);
  7388		hba->force_reset = true;
  7389		ufshcd_schedule_eh_work(hba);
  7390		dev_err(hba->dev, "%s: reset in progress - 1\n", __func__);
  7391		spin_unlock_irqrestore(hba->host->host_lock, flags);
  7392	
  7393		flush_work(&hba->eh_work);
  7394	
  7395		spin_lock_irqsave(hba->host->host_lock, flags);
  7396		if (hba->ufshcd_state == UFSHCD_STATE_ERROR)
  7397			err = FAILED;
  7398		spin_unlock_irqrestore(hba->host->host_lock, flags);
  7399	
  7400		return err;
  7401	}
  7402	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
-------------- next part --------------
#
# Automatically generated file; DO NOT EDIT.
# Linux/m68k 6.1.0-rc1 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="m68k-linux-gcc (GCC) 12.1.0"
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=120100
CONFIG_CLANG_VERSION=0
CONFIG_AS_IS_GNU=y
CONFIG_AS_VERSION=23800
CONFIG_LD_IS_BFD=y
CONFIG_LD_VERSION=23800
CONFIG_LLD_VERSION=0
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
CONFIG_PAHOLE_VERSION=123
CONFIG_CONSTRUCTORS=y
CONFIG_IRQ_WORK=y

#
# General setup
#
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_COMPILE_TEST=y
# CONFIG_WERROR is not set
CONFIG_LOCALVERSION=""
CONFIG_BUILD_SALT=""
CONFIG_DEFAULT_INIT=""
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y
CONFIG_POSIX_MQUEUE_SYSCTL=y
CONFIG_WATCH_QUEUE=y
CONFIG_CROSS_MEMORY_ATTACH=y
CONFIG_USELIB=y
CONFIG_AUDIT=y

#
# IRQ subsystem
#
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_INJECTION=y
CONFIG_GENERIC_IRQ_CHIP=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_SIM=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_IRQ_FASTEOI_HIERARCHY_HANDLERS=y
CONFIG_GENERIC_MSI_IRQ=y
CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
CONFIG_GENERIC_IRQ_DEBUGFS=y
# end of IRQ subsystem

CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_LEGACY_TIMER_TICK=y
CONFIG_TIME_KUNIT_TEST=m

#
# Timers subsystem
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
CONFIG_NO_HZ_IDLE=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
# end of Timers subsystem

CONFIG_BPF=y

#
# BPF subsystem
#
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
CONFIG_USERMODE_DRIVER=y
# end of BPF subsystem

CONFIG_PREEMPT_NONE_BUILD=y
CONFIG_PREEMPT_NONE=y

#
# CPU/Task time and stats accounting
#
CONFIG_TICK_CPU_ACCOUNTING=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
CONFIG_TASKSTATS=y
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_PSI=y
CONFIG_PSI_DEFAULT_DISABLED=y
# end of CPU/Task time and stats accounting

CONFIG_CPU_ISOLATION=y

#
# RCU Subsystem
#
CONFIG_TINY_RCU=y
CONFIG_RCU_EXPERT=y
CONFIG_SRCU=y
CONFIG_TINY_SRCU=y
CONFIG_TASKS_RCU_GENERIC=y
CONFIG_FORCE_TASKS_RCU=y
CONFIG_TASKS_RCU=y
CONFIG_FORCE_TASKS_RUDE_RCU=y
CONFIG_TASKS_RUDE_RCU=y
CONFIG_FORCE_TASKS_TRACE_RCU=y
CONFIG_TASKS_TRACE_RCU=y
CONFIG_RCU_NEED_SEGCBLIST=y
CONFIG_TASKS_TRACE_RCU_READ_MB=y
# end of RCU Subsystem

CONFIG_BUILD_BIN2C=y
CONFIG_IKCONFIG=m
CONFIG_IKCONFIG_PROC=y
CONFIG_IKHEADERS=m
CONFIG_LOG_BUF_SHIFT=17
CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
CONFIG_PRINTK_INDEX=y

#
# Scheduler features
#
# end of Scheduler features

CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_GCC12_NO_ARRAY_BOUNDS=y
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_CGROUPS=y
CONFIG_PAGE_COUNTER=y
CONFIG_CGROUP_FAVOR_DYNMODS=y
CONFIG_MEMCG=y
CONFIG_MEMCG_KMEM=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_RDMA=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_BPF=y
CONFIG_CGROUP_MISC=y
CONFIG_CGROUP_DEBUG=y
CONFIG_SOCK_CGROUP_DATA=y
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_SCHED_AUTOGROUP=y
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
CONFIG_RELAY=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_GZIP=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
CONFIG_RD_XZ=y
CONFIG_RD_LZO=y
CONFIG_RD_LZ4=y
CONFIG_RD_ZSTD=y
CONFIG_BOOT_CONFIG=y
CONFIG_BOOT_CONFIG_EMBED=y
CONFIG_BOOT_CONFIG_EMBED_FILE=""
CONFIG_INITRAMFS_PRESERVE_MTIME=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_HAVE_UID16=y
CONFIG_EXPERT=y
CONFIG_UID16=y
CONFIG_MULTIUSER=y
CONFIG_SGETMASK_SYSCALL=y
CONFIG_SYSFS_SYSCALL=y
CONFIG_FHANDLE=y
CONFIG_POSIX_TIMERS=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_FUTEX_PI=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_IO_URING=y
CONFIG_ADVISE_SYSCALLS=y
CONFIG_MEMBARRIER=y
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
CONFIG_KALLSYMS_BASE_RELATIVE=y
CONFIG_KCMP=y
CONFIG_EMBEDDED=y
CONFIG_PC104=y

#
# Kernel Performance Events And Counters
#
# end of Kernel Performance Events And Counters

CONFIG_SYSTEM_DATA_VERIFICATION=y
CONFIG_PROFILING=y
# end of General setup

CONFIG_M68K=y
CONFIG_CPU_BIG_ENDIAN=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_TIME_LOW_RES=y
CONFIG_NO_IOPORT_MAP=y
CONFIG_HZ=100
CONFIG_PGTABLE_LEVELS=3
CONFIG_MMU=y
CONFIG_MMU_MOTOROLA=y
CONFIG_KEXEC=y
CONFIG_BOOTINFO_PROC=y

#
# Platform setup
#

#
# Processor Type
#
CONFIG_M68KCLASSIC=y
# CONFIG_COLDFIRE is not set
CONFIG_M68020=y
CONFIG_M68030=y
CONFIG_M68040=y
CONFIG_M68060=y

#
# Processor Specific Options
#
CONFIG_M68KFPU_EMU=y
CONFIG_M68KFPU_EMU_EXTRAPREC=y
CONFIG_M68KFPU_EMU_ONLY=y
CONFIG_ADVANCED=y
CONFIG_RMW_INSNS=y
CONFIG_SINGLE_MEMORY_CHUNK=y
CONFIG_060_WRITETHROUGH=y
CONFIG_M68K_L2_CACHE=y
CONFIG_CPU_HAS_ADDRESS_SPACES=y
CONFIG_FPU=y

#
# Machine Types
#
CONFIG_AMIGA=y
CONFIG_ATARI=y
CONFIG_ATARI_KBD_CORE=y
CONFIG_MAC=y
CONFIG_APOLLO=y
CONFIG_VME=y
CONFIG_MVME147=y
CONFIG_MVME16x=y
CONFIG_BVME6000=y
CONFIG_HP300=y
CONFIG_SUN3X=y
CONFIG_Q40=y
CONFIG_VIRT=y

#
# Bus Support
#
CONFIG_DIO=y
CONFIG_NUBUS=y
CONFIG_ZORRO=y
CONFIG_AMIGA_PCMCIA=y
CONFIG_ISA=y
CONFIG_ATARI_ROM_ISA=y
CONFIG_ZORRO_NAMES=y
# end of Platform setup

#
# Kernel Features
#
# end of Kernel Features

#
# Platform devices
#
CONFIG_HEARTBEAT=y
CONFIG_PROC_HARDWARE=y
CONFIG_NATFEAT=y
CONFIG_NFBLOCK=m
CONFIG_NFCON=m
CONFIG_NFETH=m
CONFIG_ATARI_ETHERNAT=y
CONFIG_ATARI_ETHERNEC=y
# end of Platform devices

#
# Character devices
#
CONFIG_ATARI_DSP56K=m
CONFIG_AMIGA_BUILTIN_SERIAL=m
CONFIG_HPDCA=m
CONFIG_HPAPCI=m
# end of Character devices

#
# General architecture-dependent options
#
CONFIG_CRASH_CORE=y
CONFIG_KEXEC_CORE=y
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_ARCH_32BIT_OFF_T=y
CONFIG_HAVE_ASM_MODVERSIONS=y
CONFIG_MMU_GATHER_NO_RANGE=y
CONFIG_MMU_GATHER_MERGE_VMAS=y
CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
CONFIG_LTO_NONE=y
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_MODULES_USE_ELF_REL=y
CONFIG_ALTERNATE_USER_ADDRESS_SPACE=y
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
CONFIG_HAVE_ARCH_NVRAM_OPS=y
CONFIG_ISA_BUS_API=y
CONFIG_OLD_SIGSUSPEND3=y
CONFIG_OLD_SIGACTION=y
CONFIG_COMPAT_32BIT_TIME=y
CONFIG_ARCH_NO_PREEMPT=y
CONFIG_LOCK_EVENT_COUNTS=y
CONFIG_HAVE_ARCH_PFN_VALID=y

#
# GCOV-based kernel profiling
#
CONFIG_GCOV_KERNEL=y
# end of GCOV-based kernel profiling
# end of General architecture-dependent options

CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULE_SIG_FORMAT=y
CONFIG_MODULES=y
CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODULE_UNLOAD_TAINT_TRACKING=y
CONFIG_MODVERSIONS=y
CONFIG_ASM_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_FORCE=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_SHA1=y
# CONFIG_MODULE_SIG_SHA224 is not set
# CONFIG_MODULE_SIG_SHA256 is not set
# CONFIG_MODULE_SIG_SHA384 is not set
# CONFIG_MODULE_SIG_SHA512 is not set
CONFIG_MODULE_SIG_HASH="sha1"
CONFIG_MODULE_COMPRESS_NONE=y
# CONFIG_MODULE_COMPRESS_GZIP is not set
# CONFIG_MODULE_COMPRESS_XZ is not set
# CONFIG_MODULE_COMPRESS_ZSTD is not set
CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=y
CONFIG_MODPROBE_PATH="/sbin/modprobe"
CONFIG_BLOCK=y
CONFIG_BLOCK_LEGACY_AUTOLOAD=y
CONFIG_BLK_RQ_ALLOC_TIME=y
CONFIG_BLK_CGROUP_RWSTAT=y
CONFIG_BLK_DEV_BSG_COMMON=y
CONFIG_BLK_ICQ=y
CONFIG_BLK_DEV_BSGLIB=y
CONFIG_BLK_DEV_INTEGRITY=y
CONFIG_BLK_DEV_INTEGRITY_T10=m
CONFIG_BLK_DEV_ZONED=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLK_DEV_THROTTLING_LOW=y
CONFIG_BLK_WBT=y
CONFIG_BLK_WBT_MQ=y
CONFIG_BLK_CGROUP_IOLATENCY=y
CONFIG_BLK_CGROUP_FC_APPID=y
CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOPRIO=y
CONFIG_BLK_DEBUG_FS=y
CONFIG_BLK_DEBUG_FS_ZONED=y
CONFIG_BLK_SED_OPAL=y
CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
CONFIG_ACORN_PARTITION=y
CONFIG_ACORN_PARTITION_CUMANA=y
CONFIG_ACORN_PARTITION_EESOX=y
CONFIG_ACORN_PARTITION_ICS=y
CONFIG_ACORN_PARTITION_ADFS=y
CONFIG_ACORN_PARTITION_POWERTEC=y
CONFIG_ACORN_PARTITION_RISCIX=y
CONFIG_AIX_PARTITION=y
CONFIG_OSF_PARTITION=y
CONFIG_AMIGA_PARTITION=y
CONFIG_ATARI_PARTITION=y
CONFIG_MAC_PARTITION=y
CONFIG_MSDOS_PARTITION=y
CONFIG_BSD_DISKLABEL=y
CONFIG_MINIX_SUBPARTITION=y
CONFIG_SOLARIS_X86_PARTITION=y
CONFIG_UNIXWARE_DISKLABEL=y
CONFIG_LDM_PARTITION=y
CONFIG_LDM_DEBUG=y
CONFIG_SGI_PARTITION=y
CONFIG_ULTRIX_PARTITION=y
CONFIG_SUN_PARTITION=y
CONFIG_KARMA_PARTITION=y
CONFIG_EFI_PARTITION=y
CONFIG_SYSV68_PARTITION=y
CONFIG_CMDLINE_PARTITION=y
# end of Partition Types

CONFIG_BLK_MQ_VIRTIO=y
CONFIG_BLK_MQ_RDMA=y
CONFIG_BLOCK_HOLDER_DEPRECATED=y
CONFIG_BLK_MQ_STACKING=y

#
# IO Schedulers
#
CONFIG_MQ_IOSCHED_DEADLINE=y
CONFIG_MQ_IOSCHED_KYBER=m
CONFIG_IOSCHED_BFQ=m
CONFIG_BFQ_GROUP_IOSCHED=y
CONFIG_BFQ_CGROUP_DEBUG=y
# end of IO Schedulers

CONFIG_ASN1=y
CONFIG_UNINLINE_SPIN_UNLOCK=y
CONFIG_FREEZER=y

#
# Executable file formats
#
CONFIG_BINFMT_ELF=y
CONFIG_ELFCORE=y
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
CONFIG_BINFMT_SCRIPT=m
CONFIG_ARCH_HAS_BINFMT_FLAT=y
CONFIG_BINFMT_FLAT=y
CONFIG_BINFMT_FLAT_ARGVP_ENVP_ON_STACK=y
CONFIG_BINFMT_FLAT_OLD=y
CONFIG_BINFMT_ZFLAT=y
CONFIG_BINFMT_MISC=m
CONFIG_COREDUMP=y
# end of Executable file formats

#
# Memory Management options
#
CONFIG_ZPOOL=y
CONFIG_SWAP=y
CONFIG_ZSWAP=y
CONFIG_ZSWAP_DEFAULT_ON=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_842 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lzo"
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
# CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT="zbud"
CONFIG_ZBUD=y
CONFIG_Z3FOLD=m
CONFIG_ZSMALLOC=m
CONFIG_ZSMALLOC_STAT=y

#
# SLAB allocator options
#
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
CONFIG_SLAB_MERGE_DEFAULT=y
CONFIG_SLAB_FREELIST_RANDOM=y
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLUB_STATS=y
# end of SLAB allocator options

CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
CONFIG_COMPAT_BRK=y
CONFIG_FLATMEM=y
CONFIG_MEMORY_ISOLATION=y
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_MEMORY_BALLOON=y
CONFIG_BALLOON_COMPACTION=y
CONFIG_COMPACTION=y
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
CONFIG_PAGE_REPORTING=y
CONFIG_MIGRATION=y
CONFIG_CONTIG_ALLOC=y
CONFIG_MMU_NOTIFIER=y
CONFIG_KSM=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_NEED_PER_CPU_KM=y
CONFIG_FRONTSWAP=y
CONFIG_CMA=y
CONFIG_CMA_DEBUG=y
CONFIG_CMA_DEBUGFS=y
CONFIG_CMA_SYSFS=y
CONFIG_CMA_AREAS=7
CONFIG_PAGE_IDLE_FLAG=y
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y
CONFIG_ZONE_DMA=y
CONFIG_HMM_MIRROR=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_PERCPU_STATS=y
CONFIG_GUP_TEST=y
CONFIG_ANON_VMA_NAME=y
CONFIG_USERFAULTFD=y
CONFIG_LRU_GEN=y
CONFIG_LRU_GEN_ENABLED=y
CONFIG_LRU_GEN_STATS=y

#
# Data Access Monitoring
#
CONFIG_DAMON=y
CONFIG_DAMON_VADDR=y
CONFIG_DAMON_PADDR=y
CONFIG_DAMON_SYSFS=y
CONFIG_DAMON_DBGFS=y
CONFIG_DAMON_RECLAIM=y
CONFIG_DAMON_LRU_SORT=y
# end of Data Access Monitoring
# end of Memory Management options

CONFIG_NET=y
CONFIG_NET_INGRESS=y
CONFIG_NET_EGRESS=y
CONFIG_NET_REDIRECT=y
CONFIG_SKB_EXTENSIONS=y

#
# Networking options
#
CONFIG_PACKET=m
CONFIG_PACKET_DIAG=m
CONFIG_UNIX=m
CONFIG_UNIX_SCM=y
CONFIG_AF_UNIX_OOB=y
CONFIG_UNIX_DIAG=m
CONFIG_TLS=m
CONFIG_TLS_DEVICE=y
CONFIG_TLS_TOE=y
CONFIG_XFRM=y
CONFIG_XFRM_OFFLOAD=y
CONFIG_XFRM_ALGO=m
CONFIG_XFRM_USER=m
CONFIG_XFRM_INTERFACE=m
CONFIG_XFRM_SUB_POLICY=y
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_AH=m
CONFIG_XFRM_ESP=m
CONFIG_XFRM_IPCOMP=m
CONFIG_NET_KEY=m
CONFIG_NET_KEY_MIGRATE=y
CONFIG_XFRM_ESPINTCP=y
CONFIG_SMC=m
CONFIG_SMC_DIAG=m
CONFIG_XDP_SOCKETS=y
CONFIG_XDP_SOCKETS_DIAG=m
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_FIB_TRIE_STATS=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_ROUTE_CLASSID=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
CONFIG_NET_IPIP=m
CONFIG_NET_IPGRE_DEMUX=m
CONFIG_NET_IP_TUNNEL=m
CONFIG_NET_IPGRE=m
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_IP_MROUTE_COMMON=y
CONFIG_IP_MROUTE=y
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=m
CONFIG_NET_UDP_TUNNEL=m
CONFIG_NET_FOU=m
CONFIG_NET_FOU_IP_TUNNELS=y
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_ESP_OFFLOAD=m
CONFIG_INET_ESPINTCP=y
CONFIG_INET_IPCOMP=m
CONFIG_INET_XFRM_TUNNEL=m
CONFIG_INET_TUNNEL=m
CONFIG_INET_DIAG=m
CONFIG_INET_TCP_DIAG=m
CONFIG_INET_UDP_DIAG=m
CONFIG_INET_RAW_DIAG=m
CONFIG_INET_DIAG_DESTROY=y
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=m
CONFIG_TCP_CONG_CUBIC=m
CONFIG_TCP_CONG_WESTWOOD=m
CONFIG_TCP_CONG_HTCP=m
CONFIG_TCP_CONG_HSTCP=m
CONFIG_TCP_CONG_HYBLA=m
CONFIG_TCP_CONG_VEGAS=m
CONFIG_TCP_CONG_NV=m
CONFIG_TCP_CONG_SCALABLE=m
CONFIG_TCP_CONG_LP=m
CONFIG_TCP_CONG_VENO=m
CONFIG_TCP_CONG_YEAH=m
CONFIG_TCP_CONG_ILLINOIS=m
CONFIG_TCP_CONG_DCTCP=m
CONFIG_TCP_CONG_CDG=m
CONFIG_TCP_CONG_BBR=m
CONFIG_DEFAULT_RENO=y
CONFIG_DEFAULT_TCP_CONG="reno"
CONFIG_TCP_MD5SIG=y
CONFIG_IPV6=m
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_ROUTE_INFO=y
CONFIG_IPV6_OPTIMISTIC_DAD=y
CONFIG_INET6_AH=m
CONFIG_INET6_ESP=m
CONFIG_INET6_ESP_OFFLOAD=m
CONFIG_INET6_ESPINTCP=y
CONFIG_INET6_IPCOMP=m
CONFIG_IPV6_MIP6=m
CONFIG_IPV6_ILA=m
CONFIG_INET6_XFRM_TUNNEL=m
CONFIG_INET6_TUNNEL=m
CONFIG_IPV6_VTI=m
CONFIG_IPV6_SIT=m
CONFIG_IPV6_SIT_6RD=y
CONFIG_IPV6_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=m
CONFIG_IPV6_GRE=m
CONFIG_IPV6_FOU=m
CONFIG_IPV6_FOU_TUNNEL=m
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
CONFIG_IPV6_MROUTE=y
CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
CONFIG_IPV6_PIMSM_V2=y
CONFIG_IPV6_SEG6_LWTUNNEL=y
CONFIG_IPV6_SEG6_HMAC=y
CONFIG_IPV6_RPL_LWTUNNEL=y
CONFIG_IPV6_IOAM6_LWTUNNEL=y
CONFIG_NETLABEL=y
CONFIG_MPTCP=y
CONFIG_INET_MPTCP_DIAG=m
CONFIG_MPTCP_KUNIT_TEST=m
CONFIG_NETWORK_SECMARK=y
CONFIG_NET_PTP_CLASSIFY=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=m

#
# Core Netfilter Configuration
#
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_EGRESS=y
CONFIG_NETFILTER_SKIP_EGRESS=y
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_FAMILY_BRIDGE=y
CONFIG_NETFILTER_FAMILY_ARP=y
CONFIG_NETFILTER_NETLINK_HOOK=m
CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NETFILTER_NETLINK_OSF=m
CONFIG_NF_CONNTRACK=m
CONFIG_NF_LOG_SYSLOG=m
CONFIG_NETFILTER_CONNCOUNT=m
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_ZONES=y
CONFIG_NF_CONNTRACK_PROCFS=y
CONFIG_NF_CONNTRACK_EVENTS=y
CONFIG_NF_CONNTRACK_TIMEOUT=y
CONFIG_NF_CONNTRACK_TIMESTAMP=y
CONFIG_NF_CONNTRACK_LABELS=y
CONFIG_NF_CT_PROTO_DCCP=y
CONFIG_NF_CT_PROTO_GRE=y
CONFIG_NF_CT_PROTO_SCTP=y
CONFIG_NF_CT_PROTO_UDPLITE=y
CONFIG_NF_CONNTRACK_AMANDA=m
CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CONNTRACK_H323=m
CONFIG_NF_CONNTRACK_IRC=m
CONFIG_NF_CONNTRACK_BROADCAST=m
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
CONFIG_NF_CONNTRACK_SNMP=m
CONFIG_NF_CONNTRACK_PPTP=m
CONFIG_NF_CONNTRACK_SANE=m
CONFIG_NF_CONNTRACK_SIP=m
CONFIG_NF_CONNTRACK_TFTP=m
CONFIG_NF_CT_NETLINK=m
CONFIG_NF_CT_NETLINK_TIMEOUT=m
CONFIG_NF_CT_NETLINK_HELPER=m
CONFIG_NETFILTER_NETLINK_GLUE_CT=y
CONFIG_NF_NAT=m
CONFIG_NF_NAT_AMANDA=m
CONFIG_NF_NAT_FTP=m
CONFIG_NF_NAT_IRC=m
CONFIG_NF_NAT_SIP=m
CONFIG_NF_NAT_TFTP=m
CONFIG_NF_NAT_REDIRECT=y
CONFIG_NF_NAT_MASQUERADE=y
CONFIG_NETFILTER_SYNPROXY=m
CONFIG_NF_TABLES=m
CONFIG_NF_TABLES_INET=y
CONFIG_NF_TABLES_NETDEV=y
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_FLOW_OFFLOAD=m
CONFIG_NFT_CONNLIMIT=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_TUNNEL=m
CONFIG_NFT_OBJREF=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_REJECT_INET=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_FIB=m
CONFIG_NFT_FIB_INET=m
CONFIG_NFT_XFRM=m
CONFIG_NFT_SOCKET=m
CONFIG_NFT_OSF=m
CONFIG_NFT_TPROXY=m
CONFIG_NFT_SYNPROXY=m
CONFIG_NF_DUP_NETDEV=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NFT_FIB_NETDEV=m
CONFIG_NFT_REJECT_NETDEV=m
CONFIG_NF_FLOW_TABLE_INET=m
CONFIG_NF_FLOW_TABLE=m
CONFIG_NF_FLOW_TABLE_PROCFS=y
CONFIG_NETFILTER_XTABLES=m

#
# Xtables combined modules
#
CONFIG_NETFILTER_XT_MARK=m
CONFIG_NETFILTER_XT_CONNMARK=m
CONFIG_NETFILTER_XT_SET=m

#
# Xtables targets
#
CONFIG_NETFILTER_XT_TARGET_AUDIT=m
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
CONFIG_NETFILTER_XT_TARGET_CT=m
CONFIG_NETFILTER_XT_TARGET_DSCP=m
CONFIG_NETFILTER_XT_TARGET_HL=m
CONFIG_NETFILTER_XT_TARGET_HMARK=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_NAT=m
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
CONFIG_NETFILTER_XT_TARGET_RATEEST=m
CONFIG_NETFILTER_XT_TARGET_REDIRECT=m
CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m
CONFIG_NETFILTER_XT_TARGET_TEE=m
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
CONFIG_NETFILTER_XT_TARGET_TRACE=m
CONFIG_NETFILTER_XT_TARGET_SECMARK=m
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m

#
# Xtables matches
#
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
CONFIG_NETFILTER_XT_MATCH_BPF=m
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
CONFIG_NETFILTER_XT_MATCH_CPU=m
CONFIG_NETFILTER_XT_MATCH_DCCP=m
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
CONFIG_NETFILTER_XT_MATCH_DSCP=m
CONFIG_NETFILTER_XT_MATCH_ECN=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_HL=m
CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
CONFIG_NETFILTER_XT_MATCH_IPVS=m
CONFIG_NETFILTER_XT_MATCH_L2TP=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_MARK=m
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
CONFIG_NETFILTER_XT_MATCH_OSF=m
CONFIG_NETFILTER_XT_MATCH_OWNER=m
CONFIG_NETFILTER_XT_MATCH_POLICY=m
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
CONFIG_NETFILTER_XT_MATCH_REALM=m
CONFIG_NETFILTER_XT_MATCH_RECENT=m
CONFIG_NETFILTER_XT_MATCH_SCTP=m
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
CONFIG_NETFILTER_XT_MATCH_STRING=m
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
CONFIG_NETFILTER_XT_MATCH_TIME=m
CONFIG_NETFILTER_XT_MATCH_U32=m
# end of Core Netfilter Configuration

CONFIG_IP_SET=m
CONFIG_IP_SET_MAX=256
CONFIG_IP_SET_BITMAP_IP=m
CONFIG_IP_SET_BITMAP_IPMAC=m
CONFIG_IP_SET_BITMAP_PORT=m
CONFIG_IP_SET_HASH_IP=m
CONFIG_IP_SET_HASH_IPMARK=m
CONFIG_IP_SET_HASH_IPPORT=m
CONFIG_IP_SET_HASH_IPPORTIP=m
CONFIG_IP_SET_HASH_IPPORTNET=m
CONFIG_IP_SET_HASH_IPMAC=m
CONFIG_IP_SET_HASH_MAC=m
CONFIG_IP_SET_HASH_NETPORTNET=m
CONFIG_IP_SET_HASH_NET=m
CONFIG_IP_SET_HASH_NETNET=m
CONFIG_IP_SET_HASH_NETPORT=m
CONFIG_IP_SET_HASH_NETIFACE=m
CONFIG_IP_SET_LIST_SET=m
CONFIG_IP_VS=m
CONFIG_IP_VS_IPV6=y
CONFIG_IP_VS_DEBUG=y
CONFIG_IP_VS_TAB_BITS=12

#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y

#
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_FO=m
CONFIG_IP_VS_OVF=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_MH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
CONFIG_IP_VS_TWOS=m

#
# IPVS SH scheduler
#
CONFIG_IP_VS_SH_TAB_BITS=8

#
# IPVS MH scheduler
#
CONFIG_IP_VS_MH_TAB_INDEX=12

#
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
CONFIG_IP_VS_NFCT=y
CONFIG_IP_VS_PE_SIP=m

#
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_SOCKET_IPV4=m
CONFIG_NF_TPROXY_IPV4=m
CONFIG_NF_TABLES_IPV4=y
CONFIG_NFT_REJECT_IPV4=m
CONFIG_NFT_DUP_IPV4=m
CONFIG_NFT_FIB_IPV4=m
CONFIG_NF_TABLES_ARP=y
CONFIG_NF_DUP_IPV4=m
CONFIG_NF_LOG_ARP=m
CONFIG_NF_LOG_IPV4=m
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NF_NAT_PPTP=m
CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
CONFIG_IP_NF_MATCH_RPFILTER=m
CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_SYNPROXY=m
CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_NETMAP=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_TARGET_ECN=m
CONFIG_IP_NF_TARGET_TTL=m
CONFIG_IP_NF_RAW=m
CONFIG_IP_NF_SECURITY=m
CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m
# end of IP: Netfilter Configuration

#
# IPv6: Netfilter Configuration
#
CONFIG_NF_SOCKET_IPV6=m
CONFIG_NF_TPROXY_IPV6=m
CONFIG_NF_TABLES_IPV6=y
CONFIG_NFT_REJECT_IPV6=m
CONFIG_NFT_DUP_IPV6=m
CONFIG_NFT_FIB_IPV6=m
CONFIG_NF_DUP_IPV6=m
CONFIG_NF_REJECT_IPV6=m
CONFIG_NF_LOG_IPV6=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
CONFIG_IP6_NF_MATCH_FRAG=m
CONFIG_IP6_NF_MATCH_OPTS=m
CONFIG_IP6_NF_MATCH_HL=m
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
CONFIG_IP6_NF_MATCH_MH=m
CONFIG_IP6_NF_MATCH_RPFILTER=m
CONFIG_IP6_NF_MATCH_RT=m
CONFIG_IP6_NF_MATCH_SRH=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_NAT=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_TARGET_NPT=m
# end of IPv6: Netfilter Configuration

CONFIG_NF_DEFRAG_IPV6=m
CONFIG_NF_TABLES_BRIDGE=m
CONFIG_NFT_BRIDGE_META=m
CONFIG_NFT_BRIDGE_REJECT=m
CONFIG_NF_CONNTRACK_BRIDGE=m
CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m
CONFIG_BRIDGE_EBT_T_NAT=m
CONFIG_BRIDGE_EBT_802_3=m
CONFIG_BRIDGE_EBT_AMONG=m
CONFIG_BRIDGE_EBT_ARP=m
CONFIG_BRIDGE_EBT_IP=m
CONFIG_BRIDGE_EBT_IP6=m
CONFIG_BRIDGE_EBT_LIMIT=m
CONFIG_BRIDGE_EBT_MARK=m
CONFIG_BRIDGE_EBT_PKTTYPE=m
CONFIG_BRIDGE_EBT_STP=m
CONFIG_BRIDGE_EBT_VLAN=m
CONFIG_BRIDGE_EBT_ARPREPLY=m
CONFIG_BRIDGE_EBT_DNAT=m
CONFIG_BRIDGE_EBT_MARK_T=m
CONFIG_BRIDGE_EBT_REDIRECT=m
CONFIG_BRIDGE_EBT_SNAT=m
CONFIG_BRIDGE_EBT_LOG=m
CONFIG_BRIDGE_EBT_NFLOG=m
CONFIG_BPFILTER=y
CONFIG_IP_DCCP=m
CONFIG_INET_DCCP_DIAG=m

#
# DCCP CCIDs Configuration
#
CONFIG_IP_DCCP_CCID2_DEBUG=y
CONFIG_IP_DCCP_CCID3=y
CONFIG_IP_DCCP_CCID3_DEBUG=y
CONFIG_IP_DCCP_TFRC_LIB=y
CONFIG_IP_DCCP_TFRC_DEBUG=y
# end of DCCP CCIDs Configuration

#
# DCCP Kernel Hacking
#
CONFIG_IP_DCCP_DEBUG=y
# end of DCCP Kernel Hacking

CONFIG_IP_SCTP=m
CONFIG_SCTP_DBG_OBJCNT=y
CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 is not set
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
CONFIG_SCTP_COOKIE_HMAC_MD5=y
CONFIG_SCTP_COOKIE_HMAC_SHA1=y
CONFIG_INET_SCTP_DIAG=m
CONFIG_RDS=m
CONFIG_RDS_RDMA=m
CONFIG_RDS_TCP=m
CONFIG_RDS_DEBUG=y
CONFIG_TIPC=m
CONFIG_TIPC_MEDIA_IB=y
CONFIG_TIPC_MEDIA_UDP=y
CONFIG_TIPC_CRYPTO=y
CONFIG_TIPC_DIAG=m
CONFIG_ATM=m
CONFIG_ATM_CLIP=m
CONFIG_ATM_CLIP_NO_ICMP=y
CONFIG_ATM_LANE=m
CONFIG_ATM_MPOA=m
CONFIG_ATM_BR2684=m
CONFIG_ATM_BR2684_IPFILTER=y
CONFIG_L2TP=m
CONFIG_L2TP_DEBUGFS=m
CONFIG_L2TP_V3=y
CONFIG_L2TP_IP=m
CONFIG_L2TP_ETH=m
CONFIG_STP=m
CONFIG_GARP=m
CONFIG_MRP=m
CONFIG_BRIDGE=m
CONFIG_BRIDGE_IGMP_SNOOPING=y
CONFIG_BRIDGE_VLAN_FILTERING=y
CONFIG_BRIDGE_MRP=y
CONFIG_BRIDGE_CFM=y
CONFIG_NET_DSA=m
CONFIG_NET_DSA_TAG_AR9331=m
CONFIG_NET_DSA_TAG_BRCM_COMMON=m
CONFIG_NET_DSA_TAG_BRCM=m
CONFIG_NET_DSA_TAG_BRCM_LEGACY=m
CONFIG_NET_DSA_TAG_BRCM_PREPEND=m
CONFIG_NET_DSA_TAG_HELLCREEK=m
CONFIG_NET_DSA_TAG_GSWIP=m
CONFIG_NET_DSA_TAG_DSA_COMMON=m
CONFIG_NET_DSA_TAG_DSA=m
CONFIG_NET_DSA_TAG_EDSA=m
CONFIG_NET_DSA_TAG_MTK=m
CONFIG_NET_DSA_TAG_KSZ=m
CONFIG_NET_DSA_TAG_OCELOT=m
CONFIG_NET_DSA_TAG_OCELOT_8021Q=m
CONFIG_NET_DSA_TAG_QCA=m
CONFIG_NET_DSA_TAG_RTL4_A=m
CONFIG_NET_DSA_TAG_RTL8_4=m
CONFIG_NET_DSA_TAG_RZN1_A5PSW=m
CONFIG_NET_DSA_TAG_LAN9303=m
CONFIG_NET_DSA_TAG_SJA1105=m
CONFIG_NET_DSA_TAG_TRAILER=m
CONFIG_NET_DSA_TAG_XRS700X=m
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q_MVRP=y
CONFIG_LLC=m
CONFIG_LLC2=m
CONFIG_ATALK=m
CONFIG_DEV_APPLETALK=m
CONFIG_COPS=m
CONFIG_COPS_DAYNA=y
CONFIG_COPS_TANGENT=y
CONFIG_IPDDP=m
CONFIG_IPDDP_ENCAP=y
CONFIG_X25=m
CONFIG_LAPB=m
CONFIG_PHONET=m
CONFIG_6LOWPAN=m
CONFIG_6LOWPAN_DEBUGFS=y
CONFIG_6LOWPAN_NHC=m
CONFIG_6LOWPAN_NHC_DEST=m
CONFIG_6LOWPAN_NHC_FRAGMENT=m
CONFIG_6LOWPAN_NHC_HOP=m
CONFIG_6LOWPAN_NHC_IPV6=m
CONFIG_6LOWPAN_NHC_MOBILITY=m
CONFIG_6LOWPAN_NHC_ROUTING=m
CONFIG_6LOWPAN_NHC_UDP=m
CONFIG_6LOWPAN_GHC_EXT_HDR_HOP=m
CONFIG_6LOWPAN_GHC_UDP=m
CONFIG_6LOWPAN_GHC_ICMPV6=m
CONFIG_6LOWPAN_GHC_EXT_HDR_DEST=m
CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG=m
CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE=m
CONFIG_IEEE802154=m
CONFIG_IEEE802154_NL802154_EXPERIMENTAL=y
CONFIG_IEEE802154_SOCKET=m
CONFIG_IEEE802154_6LOWPAN=m
CONFIG_MAC802154=m
CONFIG_NET_SCHED=y

#
# Queueing/Scheduling
#
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_HFSC=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_PRIO=m
CONFIG_NET_SCH_MULTIQ=m
CONFIG_NET_SCH_RED=m
CONFIG_NET_SCH_SFB=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_SCH_TEQL=m
CONFIG_NET_SCH_TBF=m
CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_ETF=m
CONFIG_NET_SCH_TAPRIO=m
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_NETEM=m
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_MQPRIO=m
CONFIG_NET_SCH_SKBPRIO=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_QFQ=m
CONFIG_NET_SCH_CODEL=m
CONFIG_NET_SCH_FQ_CODEL=m
CONFIG_NET_SCH_CAKE=m
CONFIG_NET_SCH_FQ=m
CONFIG_NET_SCH_HHF=m
CONFIG_NET_SCH_PIE=m
CONFIG_NET_SCH_FQ_PIE=m
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_SCH_PLUG=m
CONFIG_NET_SCH_ETS=m
CONFIG_NET_SCH_DEFAULT=y
# CONFIG_DEFAULT_FQ is not set
# CONFIG_DEFAULT_CODEL is not set
# CONFIG_DEFAULT_FQ_CODEL is not set
# CONFIG_DEFAULT_FQ_PIE is not set
# CONFIG_DEFAULT_SFQ is not set
CONFIG_DEFAULT_PFIFO_FAST=y
CONFIG_DEFAULT_NET_SCH="pfifo_fast"

#
# Classification
#
CONFIG_NET_CLS=y
CONFIG_NET_CLS_BASIC=m
CONFIG_NET_CLS_TCINDEX=m
CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
CONFIG_CLS_U32_PERF=y
CONFIG_CLS_U32_MARK=y
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_FLOW=m
CONFIG_NET_CLS_CGROUP=m
CONFIG_NET_CLS_BPF=m
CONFIG_NET_CLS_FLOWER=m
CONFIG_NET_CLS_MATCHALL=m
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_NBYTE=m
CONFIG_NET_EMATCH_U32=m
CONFIG_NET_EMATCH_META=m
CONFIG_NET_EMATCH_TEXT=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_IPSET=m
CONFIG_NET_EMATCH_IPT=m
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=m
CONFIG_NET_ACT_GACT=m
CONFIG_GACT_PROB=y
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_SAMPLE=m
CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_NAT=m
CONFIG_NET_ACT_PEDIT=m
CONFIG_NET_ACT_SIMP=m
CONFIG_NET_ACT_SKBEDIT=m
CONFIG_NET_ACT_CSUM=m
CONFIG_NET_ACT_MPLS=m
CONFIG_NET_ACT_VLAN=m
CONFIG_NET_ACT_BPF=m
CONFIG_NET_ACT_CONNMARK=m
CONFIG_NET_ACT_CTINFO=m
CONFIG_NET_ACT_SKBMOD=m
CONFIG_NET_ACT_IFE=m
CONFIG_NET_ACT_TUNNEL_KEY=m
CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GATE=m
CONFIG_NET_IFE_SKBMARK=m
CONFIG_NET_IFE_SKBPRIO=m
CONFIG_NET_IFE_SKBTCINDEX=m
CONFIG_NET_TC_SKB_EXT=y
CONFIG_NET_SCH_FIFO=y
CONFIG_DCB=y
CONFIG_DNS_RESOLVER=m
CONFIG_BATMAN_ADV=m
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
CONFIG_BATMAN_ADV_NC=y
CONFIG_BATMAN_ADV_MCAST=y
CONFIG_BATMAN_ADV_DEBUG=y
CONFIG_OPENVSWITCH=m
CONFIG_OPENVSWITCH_GRE=m
CONFIG_OPENVSWITCH_VXLAN=m
CONFIG_OPENVSWITCH_GENEVE=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS_LOOPBACK=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO_VSOCKETS_COMMON=m
CONFIG_NETLINK_DIAG=m
CONFIG_MPLS=y
CONFIG_NET_MPLS_GSO=m
CONFIG_MPLS_ROUTING=m
CONFIG_MPLS_IPTUNNEL=m
CONFIG_NET_NSH=m
CONFIG_HSR=m
CONFIG_NET_SWITCHDEV=y
CONFIG_NET_L3_MASTER_DEV=y
CONFIG_QRTR=m
CONFIG_QRTR_SMD=m
CONFIG_QRTR_TUN=m
CONFIG_QRTR_MHI=m
CONFIG_NET_NCSI=y
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
CONFIG_SOCK_RX_QUEUE_MAPPING=y
CONFIG_HWBM=y
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y
CONFIG_NET_RX_BUSY_POLL=y
CONFIG_BQL=y
CONFIG_BPF_STREAM_PARSER=y

#
# Network testing
#
CONFIG_NET_PKTGEN=m
# end of Network testing
# end of Networking options

CONFIG_HAMRADIO=y

#
# Packet Radio protocols
#
CONFIG_AX25=m
CONFIG_AX25_DAMA_SLAVE=y
CONFIG_NETROM=m
CONFIG_ROSE=m

#
# AX.25 network device drivers
#
CONFIG_MKISS=m
CONFIG_6PACK=m
CONFIG_BPQETHER=m
CONFIG_BAYCOM_SER_FDX=m
CONFIG_BAYCOM_SER_HDX=m
CONFIG_BAYCOM_PAR=m
CONFIG_BAYCOM_EPP=m
CONFIG_YAM=m
# end of AX.25 network device drivers

CONFIG_CAN=m
CONFIG_CAN_RAW=m
CONFIG_CAN_BCM=m
CONFIG_CAN_GW=m
CONFIG_CAN_J1939=m
CONFIG_CAN_ISOTP=m
CONFIG_BT=m
CONFIG_BT_BREDR=y
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_CMTP=m
CONFIG_BT_HIDP=m
CONFIG_BT_HS=y
CONFIG_BT_LE=y
CONFIG_BT_6LOWPAN=m
CONFIG_BT_LEDS=y
CONFIG_BT_MSFTEXT=y
CONFIG_BT_AOSPEXT=y
CONFIG_BT_DEBUGFS=y
CONFIG_BT_SELFTEST=y
CONFIG_BT_SELFTEST_ECDH=y
CONFIG_BT_SELFTEST_SMP=y

#
# Bluetooth device drivers
#
CONFIG_BT_INTEL=m
CONFIG_BT_BCM=m
CONFIG_BT_RTL=m
CONFIG_BT_QCA=m
CONFIG_BT_MTK=m
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB_MTK=y
CONFIG_BT_HCIBTUSB_RTL=y
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIUART=m
CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIUART_ATH3K=y
CONFIG_BT_HCIUART_LL=y
CONFIG_BT_HCIUART_3WIRE=y
CONFIG_BT_HCIUART_INTEL=y
CONFIG_BT_HCIUART_BCM=y
CONFIG_BT_HCIUART_QCA=y
CONFIG_BT_HCIUART_AG6XX=y
CONFIG_BT_HCIUART_MRVL=y
CONFIG_BT_HCIBCM203X=m
CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBFUSB=m
CONFIG_BT_HCIDTL1=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBLUECARD=m
CONFIG_BT_HCIVHCI=m
CONFIG_BT_MRVL=m
CONFIG_BT_MRVL_SDIO=m
CONFIG_BT_ATH3K=m
CONFIG_BT_MTKSDIO=m
CONFIG_BT_MTKUART=m
CONFIG_BT_QCOMSMD=m
CONFIG_BT_HCIRSI=m
CONFIG_BT_VIRTIO=m
# end of Bluetooth device drivers

CONFIG_AF_RXRPC=m
CONFIG_AF_RXRPC_IPV6=y
CONFIG_AF_RXRPC_INJECT_LOSS=y
CONFIG_AF_RXRPC_DEBUG=y
CONFIG_RXKAD=y
CONFIG_AF_KCM=m
CONFIG_STREAM_PARSER=y
CONFIG_MCTP=y
CONFIG_MCTP_FLOWS=y
CONFIG_FIB_RULES=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_EXT=y
CONFIG_WEXT_CORE=y
CONFIG_WEXT_PROC=y
CONFIG_WEXT_SPY=y
CONFIG_WEXT_PRIV=y
CONFIG_CFG80211=m
CONFIG_NL80211_TESTMODE=y
CONFIG_CFG80211_DEVELOPER_WARNINGS=y
CONFIG_CFG80211_CERTIFICATION_ONUS=y
CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y
CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y
CONFIG_CFG80211_EXTRA_REGDB_KEYDIR=""
CONFIG_CFG80211_REG_CELLULAR_HINTS=y
CONFIG_CFG80211_REG_RELAX_NO_IR=y
CONFIG_CFG80211_DEFAULT_PS=y
CONFIG_CFG80211_DEBUGFS=y
CONFIG_CFG80211_CRDA_SUPPORT=y
CONFIG_CFG80211_WEXT=y
CONFIG_CFG80211_WEXT_EXPORT=y
CONFIG_LIB80211=m
CONFIG_LIB80211_CRYPT_WEP=m
CONFIG_LIB80211_CRYPT_CCMP=m
CONFIG_LIB80211_CRYPT_TKIP=m
CONFIG_LIB80211_DEBUG=y
CONFIG_MAC80211=m
CONFIG_MAC80211_HAS_RC=y
CONFIG_MAC80211_RC_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
CONFIG_MAC80211_MESH=y
CONFIG_MAC80211_LEDS=y
CONFIG_MAC80211_DEBUGFS=y
CONFIG_MAC80211_MESSAGE_TRACING=y
CONFIG_MAC80211_DEBUG_MENU=y
CONFIG_MAC80211_NOINLINE=y
CONFIG_MAC80211_VERBOSE_DEBUG=y
CONFIG_MAC80211_MLME_DEBUG=y
CONFIG_MAC80211_STA_DEBUG=y
CONFIG_MAC80211_HT_DEBUG=y
CONFIG_MAC80211_OCB_DEBUG=y
CONFIG_MAC80211_IBSS_DEBUG=y
CONFIG_MAC80211_PS_DEBUG=y
CONFIG_MAC80211_MPL_DEBUG=y
CONFIG_MAC80211_MPATH_DEBUG=y
CONFIG_MAC80211_MHWMP_DEBUG=y
CONFIG_MAC80211_MESH_SYNC_DEBUG=y
CONFIG_MAC80211_MESH_CSA_DEBUG=y
CONFIG_MAC80211_MESH_PS_DEBUG=y
CONFIG_MAC80211_TDLS_DEBUG=y
CONFIG_MAC80211_DEBUG_COUNTERS=y
CONFIG_MAC80211_STA_HASH_MAX_SIZE=0
CONFIG_RFKILL=m
CONFIG_RFKILL_LEDS=y
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL_GPIO=m
CONFIG_NET_9P=m
CONFIG_NET_9P_FD=m
CONFIG_NET_9P_VIRTIO=m
CONFIG_NET_9P_RDMA=m
CONFIG_NET_9P_DEBUG=y
CONFIG_CAIF=m
CONFIG_CAIF_DEBUG=y
CONFIG_CAIF_NETDEV=m
CONFIG_CAIF_USB=m
CONFIG_CEPH_LIB=m
CONFIG_CEPH_LIB_PRETTYDEBUG=y
CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y
CONFIG_NFC=m
CONFIG_NFC_DIGITAL=m
CONFIG_NFC_NCI=m
CONFIG_NFC_NCI_SPI=m
CONFIG_NFC_NCI_UART=m
CONFIG_NFC_HCI=m
CONFIG_NFC_SHDLC=y

#
# Near Field Communication (NFC) devices
#
CONFIG_NFC_TRF7970A=m
CONFIG_NFC_SIM=m
CONFIG_NFC_PORT100=m
CONFIG_NFC_VIRTUAL_NCI=m
CONFIG_NFC_FDP=m
CONFIG_NFC_FDP_I2C=m
CONFIG_NFC_PN544=m
CONFIG_NFC_PN544_I2C=m
CONFIG_NFC_PN533=m
CONFIG_NFC_PN533_USB=m
CONFIG_NFC_PN533_I2C=m
CONFIG_NFC_PN532_UART=m
CONFIG_NFC_MICROREAD=m
CONFIG_NFC_MICROREAD_I2C=m
CONFIG_NFC_MRVL=m
CONFIG_NFC_MRVL_USB=m
CONFIG_NFC_MRVL_UART=m
CONFIG_NFC_MRVL_I2C=m
CONFIG_NFC_MRVL_SPI=m
CONFIG_NFC_ST21NFCA=m
CONFIG_NFC_ST21NFCA_I2C=m
CONFIG_NFC_ST_NCI=m
CONFIG_NFC_ST_NCI_I2C=m
CONFIG_NFC_ST_NCI_SPI=m
CONFIG_NFC_NXP_NCI=m
CONFIG_NFC_NXP_NCI_I2C=m
CONFIG_NFC_S3FWRN5=m
CONFIG_NFC_S3FWRN5_I2C=m
CONFIG_NFC_S3FWRN82_UART=m
CONFIG_NFC_ST95HF=m
# end of Near Field Communication (NFC) devices

CONFIG_PSAMPLE=m
CONFIG_NET_IFE=m
CONFIG_LWTUNNEL=y
CONFIG_LWTUNNEL_BPF=y
CONFIG_DST_CACHE=y
CONFIG_GRO_CELLS=y
CONFIG_SOCK_VALIDATE_XMIT=y
CONFIG_NET_SELFTESTS=m
CONFIG_NET_SOCK_MSG=y
CONFIG_NET_DEVLINK=y
CONFIG_PAGE_POOL=y
CONFIG_PAGE_POOL_STATS=y
CONFIG_FAILOVER=m
CONFIG_ETHTOOL_NETLINK=y
CONFIG_NETDEV_ADDR_LIST_TEST=m

#
# Device Drivers
#
CONFIG_PCCARD=m
CONFIG_PCMCIA=m
CONFIG_PCMCIA_LOAD_CIS=y

#
# PC-card bridges
#
CONFIG_I82365=m
CONFIG_TCIC=m
CONFIG_PCMCIA_PROBE=y
CONFIG_PCCARD_NONSTATIC=y

#
# Generic Driver Options
#
CONFIG_AUXILIARY_BUS=y
CONFIG_UEVENT_HELPER=y
CONFIG_UEVENT_HELPER_PATH=""
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y

#
# Firmware loader
#
CONFIG_FW_LOADER=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_EXTRA_FIRMWARE=""
CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
CONFIG_FW_LOADER_COMPRESS=y
CONFIG_FW_LOADER_COMPRESS_XZ=y
CONFIG_FW_LOADER_COMPRESS_ZSTD=y
CONFIG_FW_UPLOAD=y
# end of Firmware loader

CONFIG_WANT_DEV_COREDUMP=y
CONFIG_ALLOW_DEV_COREDUMP=y
CONFIG_DEV_COREDUMP=y
CONFIG_DEBUG_DRIVER=y
CONFIG_DEBUG_DEVRES=y
CONFIG_DEBUG_TEST_DRIVER_REMOVE=y
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
CONFIG_GENERIC_CPU_DEVICES=y
CONFIG_SOC_BUS=y
CONFIG_REGMAP=y
CONFIG_REGMAP_AC97=m
CONFIG_REGMAP_I2C=m
CONFIG_REGMAP_SLIMBUS=m
CONFIG_REGMAP_SPI=y
CONFIG_REGMAP_SPMI=m
CONFIG_REGMAP_W1=m
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
CONFIG_REGMAP_SOUNDWIRE=m
CONFIG_REGMAP_SOUNDWIRE_MBQ=m
CONFIG_REGMAP_SCCB=m
CONFIG_REGMAP_I3C=m
CONFIG_REGMAP_SPI_AVMM=m
CONFIG_DMA_SHARED_BUFFER=y
CONFIG_DMA_FENCE_TRACE=y
# end of Generic Driver Options

#
# Bus devices
#
CONFIG_ARM_INTEGRATOR_LM=y
CONFIG_BT1_APB=y
CONFIG_BT1_AXI=y
CONFIG_MOXTET=m
CONFIG_HISILICON_LPC=y
CONFIG_INTEL_IXP4XX_EB=y
CONFIG_QCOM_EBI2=y
CONFIG_MHI_BUS=m
CONFIG_MHI_BUS_DEBUG=y
CONFIG_MHI_BUS_EP=m
# end of Bus devices

CONFIG_CONNECTOR=m

#
# Firmware Drivers
#

#
# ARM System Control and Management Interface Protocol
#
CONFIG_ARM_SCMI_PROTOCOL=m
CONFIG_ARM_SCMI_HAVE_TRANSPORT=y
CONFIG_ARM_SCMI_HAVE_SHMEM=y
CONFIG_ARM_SCMI_HAVE_MSG=y
CONFIG_ARM_SCMI_TRANSPORT_MAILBOX=y
CONFIG_ARM_SCMI_TRANSPORT_VIRTIO=y
CONFIG_ARM_SCMI_TRANSPORT_VIRTIO_VERSION1_COMPLIANCE=y
CONFIG_ARM_SCMI_TRANSPORT_VIRTIO_ATOMIC_ENABLE=y
CONFIG_ARM_SCMI_POWER_DOMAIN=m
CONFIG_ARM_SCMI_POWER_CONTROL=m
# end of ARM System Control and Management Interface Protocol

CONFIG_ARM_SCPI_PROTOCOL=m
CONFIG_ARM_SCPI_POWER_DOMAIN=m
CONFIG_FIRMWARE_MEMMAP=y
CONFIG_MTK_ADSP_IPC=m
CONFIG_QCOM_SCM=m
CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT=y
CONFIG_TURRIS_MOX_RWTM=m
CONFIG_BCM47XX_NVRAM=y
CONFIG_BCM47XX_SPROM=y
CONFIG_TEE_BNXT_FW=m
CONFIG_CS_DSP=m
CONFIG_GOOGLE_FIRMWARE=y
CONFIG_GOOGLE_COREBOOT_TABLE=m
CONFIG_GOOGLE_MEMCONSOLE=m
CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
CONFIG_GOOGLE_MEMCONSOLE_COREBOOT=m
CONFIG_GOOGLE_VPD=m
CONFIG_IMX_DSP=m
CONFIG_IMX_SCU=y
CONFIG_IMX_SCU_PD=y

#
# Tegra firmware driver
#
# end of Tegra firmware driver
# end of Firmware Drivers

CONFIG_GNSS=m
CONFIG_GNSS_SERIAL=m
CONFIG_GNSS_MTK_SERIAL=m
CONFIG_GNSS_SIRF_SERIAL=m
CONFIG_GNSS_UBX_SERIAL=m
CONFIG_GNSS_USB=m
CONFIG_MTD=m
CONFIG_MTD_TESTS=m

#
# Partition parsers
#
CONFIG_MTD_AR7_PARTS=m
CONFIG_MTD_BCM63XX_PARTS=y
CONFIG_MTD_BRCM_U_BOOT=m
CONFIG_MTD_CMDLINE_PARTS=m
CONFIG_MTD_OF_PARTS=m
CONFIG_MTD_OF_PARTS_BCM4908=y
CONFIG_MTD_OF_PARTS_LINKSYS_NS=y
CONFIG_MTD_PARSER_IMAGETAG=m
CONFIG_MTD_PARSER_TRX=m
CONFIG_MTD_SHARPSL_PARTS=m
CONFIG_MTD_REDBOOT_PARTS=m
CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
CONFIG_MTD_REDBOOT_PARTS_READONLY=y
CONFIG_MTD_QCOMSMEM_PARTS=m
# end of Partition parsers

#
# User Modules And Translation Layers
#
CONFIG_MTD_BLKDEVS=m
CONFIG_MTD_BLOCK=m
CONFIG_MTD_BLOCK_RO=m

#
# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK.
#
CONFIG_FTL=m
CONFIG_NFTL=m
CONFIG_NFTL_RW=y
CONFIG_INFTL=m
CONFIG_RFD_FTL=m
CONFIG_SSFDC=m
CONFIG_SM_FTL=m
CONFIG_MTD_OOPS=m
CONFIG_MTD_PSTORE=m
CONFIG_MTD_SWAP=m
CONFIG_MTD_PARTITIONED_MASTER=y

#
# RAM/ROM/Flash chip drivers
#
CONFIG_MTD_CFI=m
CONFIG_MTD_JEDECPROBE=m
CONFIG_MTD_GEN_PROBE=m
CONFIG_MTD_CFI_ADV_OPTIONS=y
CONFIG_MTD_CFI_NOSWAP=y
# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
CONFIG_MTD_CFI_GEOMETRY=y
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
CONFIG_MTD_MAP_BANK_WIDTH_8=y
CONFIG_MTD_MAP_BANK_WIDTH_16=y
CONFIG_MTD_MAP_BANK_WIDTH_32=y
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
CONFIG_MTD_CFI_I4=y
CONFIG_MTD_CFI_I8=y
CONFIG_MTD_OTP=y
CONFIG_MTD_CFI_INTELEXT=m
CONFIG_MTD_CFI_AMDSTD=m
CONFIG_MTD_CFI_STAA=m
CONFIG_MTD_CFI_UTIL=m
CONFIG_MTD_RAM=m
CONFIG_MTD_ROM=m
CONFIG_MTD_ABSENT=m
# end of RAM/ROM/Flash chip drivers

#
# Mapping drivers for chip access
#
CONFIG_MTD_COMPLEX_MAPPINGS=y
CONFIG_MTD_PHYSMAP=m
CONFIG_MTD_PHYSMAP_COMPAT=y
CONFIG_MTD_PHYSMAP_START=0x8000000
CONFIG_MTD_PHYSMAP_LEN=0
CONFIG_MTD_PHYSMAP_BANKWIDTH=2
CONFIG_MTD_PHYSMAP_OF=y
CONFIG_MTD_PHYSMAP_BT1_ROM=y
CONFIG_MTD_PHYSMAP_VERSATILE=y
CONFIG_MTD_PHYSMAP_GEMINI=y
CONFIG_MTD_PHYSMAP_GPIO_ADDR=y
CONFIG_MTD_SC520CDP=m
CONFIG_MTD_NETSC520=m
CONFIG_MTD_TS5500=m
CONFIG_MTD_PCMCIA=m
CONFIG_MTD_PCMCIA_ANONYMOUS=y
CONFIG_MTD_PLATRAM=m
# end of Mapping drivers for chip access

#
# Self-contained MTD device drivers
#
CONFIG_MTD_DATAFLASH=m
CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y
CONFIG_MTD_DATAFLASH_OTP=y
CONFIG_MTD_MCHP23K256=m
CONFIG_MTD_MCHP48L640=m
CONFIG_MTD_SPEAR_SMI=m
CONFIG_MTD_SST25L=m
CONFIG_MTD_SLRAM=m
CONFIG_MTD_PHRAM=m
CONFIG_MTD_MTDRAM=m
CONFIG_MTDRAM_TOTAL_SIZE=4096
CONFIG_MTDRAM_ERASE_SIZE=128
CONFIG_MTD_BLOCK2MTD=m

#
# Disk-On-Chip Device Drivers
#
CONFIG_MTD_DOCG3=m
CONFIG_BCH_CONST_M=14
CONFIG_BCH_CONST_T=4
# end of Self-contained MTD device drivers

#
# NAND
#
CONFIG_MTD_NAND_CORE=m
CONFIG_MTD_ONENAND=m
CONFIG_MTD_ONENAND_VERIFY_WRITE=y
CONFIG_MTD_ONENAND_GENERIC=m
CONFIG_MTD_ONENAND_SAMSUNG=m
CONFIG_MTD_ONENAND_OTP=y
CONFIG_MTD_ONENAND_2X_PROGRAM=y
CONFIG_MTD_RAW_NAND=m

#
# Raw/parallel NAND flash controllers
#
CONFIG_MTD_NAND_DENALI=m
CONFIG_MTD_NAND_DENALI_DT=m
CONFIG_MTD_NAND_AMS_DELTA=m
CONFIG_MTD_NAND_OMAP2=m
CONFIG_MTD_NAND_OMAP_BCH=y
CONFIG_MTD_NAND_OMAP_BCH_BUILD=m
CONFIG_MTD_NAND_SHARPSL=m
CONFIG_MTD_NAND_ATMEL=m
CONFIG_MTD_NAND_MARVELL=m
CONFIG_MTD_NAND_SLC_LPC32XX=m
CONFIG_MTD_NAND_MLC_LPC32XX=m
CONFIG_MTD_NAND_BRCMNAND=m
CONFIG_MTD_NAND_BRCMNAND_BCM63XX=m
CONFIG_MTD_NAND_BRCMNAND_BCMA=m
CONFIG_MTD_NAND_BRCMNAND_BCMBCA=m
CONFIG_MTD_NAND_BRCMNAND_BRCMSTB=m
CONFIG_MTD_NAND_BRCMNAND_IPROC=m
CONFIG_MTD_NAND_BCM47XXNFLASH=m
CONFIG_MTD_NAND_OXNAS=m
CONFIG_MTD_NAND_GPMI_NAND=m
CONFIG_MTD_NAND_FSL_IFC=m
CONFIG_MTD_NAND_VF610_NFC=m
CONFIG_MTD_NAND_MXC=m
CONFIG_MTD_NAND_SH_FLCTL=m
CONFIG_MTD_NAND_DAVINCI=m
CONFIG_MTD_NAND_TXX9NDFMC=m
CONFIG_MTD_NAND_JZ4780=m
CONFIG_MTD_NAND_INGENIC_ECC=y
CONFIG_MTD_NAND_JZ4740_ECC=m
CONFIG_MTD_NAND_JZ4725B_BCH=m
CONFIG_MTD_NAND_JZ4780_BCH=m
CONFIG_MTD_NAND_FSMC=m
CONFIG_MTD_NAND_SUNXI=m
CONFIG_MTD_NAND_HISI504=m
CONFIG_MTD_NAND_QCOM=m
CONFIG_MTD_NAND_MTK=m
CONFIG_MTD_NAND_MXIC=m
CONFIG_MTD_NAND_TEGRA=m
CONFIG_MTD_NAND_STM32_FMC2=m
CONFIG_MTD_NAND_MESON=m
CONFIG_MTD_NAND_GPIO=m
CONFIG_MTD_NAND_PLATFORM=m
CONFIG_MTD_NAND_CADENCE=m
CONFIG_MTD_NAND_ARASAN=m
CONFIG_MTD_NAND_INTEL_LGM=m
CONFIG_MTD_NAND_RENESAS=m

#
# Misc
#
CONFIG_MTD_NAND_NANDSIM=m
CONFIG_MTD_NAND_DISKONCHIP=m
CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED=y
CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
CONFIG_MTD_NAND_DISKONCHIP_PROBE_HIGH=y
CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y
CONFIG_MTD_SPI_NAND=m

#
# ECC engine support
#
CONFIG_MTD_NAND_ECC=y
CONFIG_MTD_NAND_ECC_SW_HAMMING=y
CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC=y
CONFIG_MTD_NAND_ECC_SW_BCH=y
CONFIG_MTD_NAND_ECC_MXIC=y
CONFIG_MTD_NAND_ECC_MEDIATEK=m
# end of ECC engine support
# end of NAND

#
# LPDDR & LPDDR2 PCM memory drivers
#
CONFIG_MTD_LPDDR=m
CONFIG_MTD_QINFO_PROBE=m
# end of LPDDR & LPDDR2 PCM memory drivers

CONFIG_MTD_SPI_NOR=m
CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
# CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set
CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
# CONFIG_MTD_SPI_NOR_SWP_KEEP is not set
CONFIG_SPI_HISI_SFC=m
CONFIG_SPI_NXP_SPIFI=m
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
CONFIG_MTD_UBI_BEB_LIMIT=20
CONFIG_MTD_UBI_FASTMAP=y
CONFIG_MTD_UBI_GLUEBI=m
CONFIG_MTD_UBI_BLOCK=y
CONFIG_MTD_HYPERBUS=m
CONFIG_HBMC_AM654=m
CONFIG_DTC=y
CONFIG_OF=y
CONFIG_OF_UNITTEST=y
CONFIG_OF_ALL_DTBS=y
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_OF_KOBJ=y
CONFIG_OF_DYNAMIC=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_IRQ=y
CONFIG_OF_RESERVED_MEM=y
CONFIG_OF_RESOLVE=y
CONFIG_OF_OVERLAY=y
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
CONFIG_PARPORT=m
CONFIG_PARPORT_PC=m
CONFIG_PARPORT_PC_FIFO=y
CONFIG_PARPORT_PC_SUPERIO=y
CONFIG_PARPORT_PC_PCMCIA=m
CONFIG_PARPORT_AMIGA=m
CONFIG_PARPORT_MFC3=m
CONFIG_PARPORT_ATARI=m
CONFIG_PARPORT_AX88796=m
CONFIG_PARPORT_1284=y
CONFIG_PARPORT_NOT_PC=y
CONFIG_PNP=y
CONFIG_PNP_DEBUG_MESSAGES=y

#
# Protocols
#
CONFIG_ISAPNP=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_NULL_BLK=m
CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION=y
CONFIG_AMIGA_FLOPPY=m
CONFIG_ATARI_FLOPPY=m
CONFIG_BLK_DEV_SWIM=m
CONFIG_AMIGA_Z2RAM=m
CONFIG_CDROM=m
CONFIG_PARIDE=m

#
# Parallel IDE high-level drivers
#
CONFIG_PARIDE_PD=m
CONFIG_PARIDE_PCD=m
CONFIG_PARIDE_PF=m
CONFIG_PARIDE_PT=m
CONFIG_PARIDE_PG=m

#
# Parallel IDE protocol modules
#
CONFIG_PARIDE_ATEN=m
CONFIG_PARIDE_BPCK=m
CONFIG_PARIDE_BPCK6=m
CONFIG_PARIDE_COMM=m
CONFIG_PARIDE_DSTR=m
CONFIG_PARIDE_FIT2=m
CONFIG_PARIDE_FIT3=m
CONFIG_PARIDE_EPAT=m
CONFIG_PARIDE_EPATC8=y
CONFIG_PARIDE_EPIA=m
CONFIG_PARIDE_FRIQ=m
CONFIG_PARIDE_FRPW=m
CONFIG_PARIDE_KBIC=m
CONFIG_PARIDE_KTTI=m
CONFIG_PARIDE_ON20=m
CONFIG_PARIDE_ON26=m
CONFIG_ZRAM=m
CONFIG_ZRAM_DEF_COMP_LZORLE=y
# CONFIG_ZRAM_DEF_COMP_ZSTD is not set
# CONFIG_ZRAM_DEF_COMP_LZ4 is not set
# CONFIG_ZRAM_DEF_COMP_LZO is not set
# CONFIG_ZRAM_DEF_COMP_LZ4HC is not set
# CONFIG_ZRAM_DEF_COMP_842 is not set
CONFIG_ZRAM_DEF_COMP="lzo-rle"
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZRAM_MEMORY_TRACKING=y
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
CONFIG_BLK_DEV_DRBD=m
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_CDROM_PKTCDVD=m
CONFIG_CDROM_PKTCDVD_BUFFERS=8
CONFIG_CDROM_PKTCDVD_WCACHE=y
CONFIG_ATA_OVER_ETH=m
CONFIG_VIRTIO_BLK=m
CONFIG_BLK_DEV_RBD=m
CONFIG_BLK_DEV_UBLK=m
CONFIG_BLK_DEV_RNBD=y
CONFIG_BLK_DEV_RNBD_CLIENT=m
CONFIG_BLK_DEV_RNBD_SERVER=m

#
# NVME Support
#
CONFIG_NVME_COMMON=m
CONFIG_NVME_CORE=m
CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_VERBOSE_ERRORS=y
CONFIG_NVME_HWMON=y
CONFIG_NVME_FABRICS=m
CONFIG_NVME_RDMA=m
CONFIG_NVME_FC=m
CONFIG_NVME_TCP=m
CONFIG_NVME_AUTH=y
CONFIG_NVME_APPLE=m
CONFIG_NVME_TARGET=m
CONFIG_NVME_TARGET_PASSTHRU=y
CONFIG_NVME_TARGET_LOOP=m
CONFIG_NVME_TARGET_RDMA=m
CONFIG_NVME_TARGET_FC=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_TCP=m
CONFIG_NVME_TARGET_AUTH=y
# end of NVME Support

#
# Misc devices
#
CONFIG_SENSORS_LIS3LV02D=m
CONFIG_AD525X_DPOT=m
CONFIG_AD525X_DPOT_I2C=m
CONFIG_AD525X_DPOT_SPI=m
CONFIG_DUMMY_IRQ=m
CONFIG_ICS932S401=m
CONFIG_ATMEL_SSC=m
CONFIG_ENCLOSURE_SERVICES=m
CONFIG_GEHC_ACHC=m
CONFIG_HI6421V600_IRQ=m
CONFIG_QCOM_COINCELL=m
CONFIG_QCOM_FASTRPC=m
CONFIG_APDS9802ALS=m
CONFIG_ISL29003=m
CONFIG_ISL29020=m
CONFIG_SENSORS_TSL2550=m
CONFIG_SENSORS_BH1770=m
CONFIG_SENSORS_APDS990X=m
CONFIG_HMC6352=m
CONFIG_DS1682=m
CONFIG_LATTICE_ECP3_CONFIG=m
CONFIG_SRAM=y
CONFIG_XILINX_SDFEC=m
CONFIG_MISC_RTSX=m
CONFIG_HISI_HIKEY_USB=m
CONFIG_OPEN_DICE=m
CONFIG_VCPU_STALL_DETECTOR=m
CONFIG_C2PORT=m

#
# EEPROM support
#
CONFIG_EEPROM_AT24=m
CONFIG_EEPROM_AT25=m
CONFIG_EEPROM_LEGACY=m
CONFIG_EEPROM_MAX6875=m
CONFIG_EEPROM_93CX6=m
CONFIG_EEPROM_93XX46=m
CONFIG_EEPROM_IDT_89HPESX=m
CONFIG_EEPROM_EE1004=m
# end of EEPROM support

#
# Texas Instruments shared transport line discipline
#
CONFIG_TI_ST=m
# end of Texas Instruments shared transport line discipline

CONFIG_SENSORS_LIS3_SPI=m
CONFIG_SENSORS_LIS3_I2C=m

#
# Altera FPGA firmware download module (requires I2C)
#
CONFIG_ALTERA_STAPL=m
CONFIG_ECHO=m
CONFIG_MISC_RTSX_USB=m
CONFIG_UACCE=m
CONFIG_PVPANIC=y
CONFIG_PVPANIC_MMIO=m
# end of Misc devices

#
# SCSI device support
#
CONFIG_SCSI_MOD=m
CONFIG_RAID_ATTRS=m
CONFIG_SCSI_COMMON=m
CONFIG_SCSI=m
CONFIG_SCSI_DMA=y
CONFIG_SCSI_ESP_PIO=y
CONFIG_SCSI_NETLINK=y
CONFIG_SCSI_PROC_FS=y

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=m
CONFIG_CHR_DEV_ST=m
CONFIG_BLK_DEV_SR=m
CONFIG_CHR_DEV_SG=m
CONFIG_BLK_DEV_BSG=y
CONFIG_CHR_DEV_SCH=m
CONFIG_SCSI_ENCLOSURE=m
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SCAN_ASYNC=y

#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=m
CONFIG_SCSI_ISCSI_ATTRS=m
CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SRP_ATTRS=m
# end of SCSI Transports

CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=m
CONFIG_ISCSI_BOOT_SYSFS=m
CONFIG_SCSI_AHA152X=m
CONFIG_SCSI_HISI_SAS=m
CONFIG_SCSI_HISI_SAS_DEBUGFS_DEFAULT_ENABLE=y
CONFIG_LIBFC=m
CONFIG_LIBFCOE=m
CONFIG_SCSI_FDOMAIN=m
CONFIG_SCSI_FDOMAIN_ISA=m
CONFIG_SCSI_PPA=m
CONFIG_SCSI_IMM=m
CONFIG_SCSI_IZIP_EPP16=y
CONFIG_SCSI_IZIP_SLOW_CTR=y
CONFIG_53C700_BE_BUS=y
CONFIG_SCSI_QLOGIC_FAS=m
CONFIG_SCSI_DEBUG=m
CONFIG_A3000_SCSI=m
CONFIG_A2091_SCSI=m
CONFIG_GVP11_SCSI=m
CONFIG_SCSI_A4000T=m
CONFIG_SCSI_ZORRO7XX=m
CONFIG_SCSI_ZORRO_ESP=m
CONFIG_ATARI_SCSI=m
CONFIG_MAC_SCSI=m
CONFIG_SCSI_MAC_ESP=m
CONFIG_MVME16x_SCSI=m
CONFIG_BVME6000_SCSI=m
CONFIG_SCSI_VIRTIO=m
CONFIG_SCSI_LOWLEVEL_PCMCIA=y
CONFIG_PCMCIA_AHA152X=m
CONFIG_PCMCIA_FDOMAIN=m
CONFIG_PCMCIA_NINJA_SCSI=m
CONFIG_PCMCIA_QLOGIC=m
CONFIG_PCMCIA_SYM53C500=m
CONFIG_SCSI_DH=y
CONFIG_SCSI_DH_RDAC=m
CONFIG_SCSI_DH_HP_SW=m
CONFIG_SCSI_DH_EMC=m
CONFIG_SCSI_DH_ALUA=m
# end of SCSI device support

CONFIG_HAVE_PATA_PLATFORM=y
CONFIG_ATA=m
CONFIG_SATA_HOST=y
CONFIG_PATA_TIMINGS=y
CONFIG_ATA_VERBOSE_ERROR=y
CONFIG_ATA_FORCE=y
CONFIG_SATA_PMP=y

#
# Controllers with non-SFF native interface
#
CONFIG_SATA_AHCI_PLATFORM=m
CONFIG_AHCI_BRCM=m
CONFIG_AHCI_DA850=m
CONFIG_AHCI_DM816=m
CONFIG_AHCI_DWC=m
CONFIG_AHCI_ST=m
CONFIG_AHCI_IMX=m
CONFIG_AHCI_CEVA=m
CONFIG_AHCI_MTK=m
CONFIG_AHCI_MVEBU=m
CONFIG_AHCI_SUNXI=m
CONFIG_AHCI_TEGRA=m
CONFIG_AHCI_XGENE=m
CONFIG_AHCI_QORIQ=m
CONFIG_SATA_FSL=m
CONFIG_SATA_GEMINI=m
CONFIG_SATA_AHCI_SEATTLE=m
CONFIG_ATA_SFF=y

#
# SFF controllers with custom DMA interface
#
CONFIG_ATA_BMDMA=y

#
# SATA SFF controllers with BMDMA
#
CONFIG_SATA_DWC=m
CONFIG_SATA_DWC_OLD_DMA=y
CONFIG_SATA_HIGHBANK=m
CONFIG_SATA_MV=m
CONFIG_SATA_RCAR=m

#
# PATA SFF controllers with BMDMA
#
CONFIG_PATA_ARASAN_CF=m
CONFIG_PATA_BK3710=m
CONFIG_PATA_FTIDE010=m
CONFIG_PATA_IMX=m
CONFIG_PATA_PXA=m

#
# PIO-only SFF controllers
#
CONFIG_PATA_FALCON=m
CONFIG_PATA_GAYLE=m
CONFIG_PATA_BUDDHA=m
CONFIG_PATA_ISAPNP=m
CONFIG_PATA_IXP4XX_CF=m
CONFIG_PATA_PCMCIA=m
CONFIG_PATA_PLATFORM=m
CONFIG_PATA_OF_PLATFORM=m
CONFIG_PATA_QDI=m
CONFIG_PATA_SAMSUNG_CF=m
CONFIG_PATA_WINBOND_VLB=m

#
# Generic fallback / legacy drivers
#
CONFIG_PATA_LEGACY=m
CONFIG_MD=y
CONFIG_BLK_DEV_MD=m
CONFIG_MD_LINEAR=m
CONFIG_MD_RAID0=m
CONFIG_MD_RAID1=m
CONFIG_MD_RAID10=m
CONFIG_MD_RAID456=m
CONFIG_MD_MULTIPATH=m
CONFIG_MD_FAULTY=m
CONFIG_MD_CLUSTER=m
CONFIG_BCACHE=m
CONFIG_BCACHE_DEBUG=y
CONFIG_BCACHE_CLOSURES_DEBUG=y
CONFIG_BCACHE_ASYNC_REGISTRATION=y
CONFIG_BLK_DEV_DM_BUILTIN=y
CONFIG_BLK_DEV_DM=m
CONFIG_DM_DEBUG=y
CONFIG_DM_BUFIO=m
CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING=y
CONFIG_DM_BIO_PRISON=m
CONFIG_DM_PERSISTENT_DATA=m
CONFIG_DM_UNSTRIPED=m
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_THIN_PROVISIONING=m
CONFIG_DM_CACHE=m
CONFIG_DM_CACHE_SMQ=m
CONFIG_DM_WRITECACHE=m
CONFIG_DM_EBS=m
CONFIG_DM_ERA=m
CONFIG_DM_CLONE=m
CONFIG_DM_MIRROR=m
CONFIG_DM_LOG_USERSPACE=m
CONFIG_DM_RAID=m
CONFIG_DM_ZERO=m
CONFIG_DM_MULTIPATH=m
CONFIG_DM_MULTIPATH_QL=m
CONFIG_DM_MULTIPATH_ST=m
CONFIG_DM_MULTIPATH_HST=m
CONFIG_DM_MULTIPATH_IOA=m
CONFIG_DM_DELAY=m
CONFIG_DM_DUST=m
CONFIG_DM_UEVENT=y
CONFIG_DM_FLAKEY=m
CONFIG_DM_VERITY=m
CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG=y
CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING=y
CONFIG_DM_VERITY_FEC=y
CONFIG_DM_SWITCH=m
CONFIG_DM_LOG_WRITES=m
CONFIG_DM_INTEGRITY=m
CONFIG_DM_ZONED=m
CONFIG_DM_AUDIT=y
CONFIG_TARGET_CORE=m
CONFIG_TCM_IBLOCK=m
CONFIG_TCM_FILEIO=m
CONFIG_TCM_PSCSI=m
CONFIG_TCM_USER2=m
CONFIG_LOOPBACK_TARGET=m
CONFIG_TCM_FC=m
CONFIG_ISCSI_TARGET=m
CONFIG_SBP_TARGET=m

#
# IEEE 1394 (FireWire) support
#
CONFIG_FIREWIRE=m
CONFIG_FIREWIRE_SBP2=m
CONFIG_FIREWIRE_NET=m
# end of IEEE 1394 (FireWire) support

CONFIG_MACINTOSH_DRIVERS=y
CONFIG_ADB=y
CONFIG_ADB_MACII=y
CONFIG_ADB_IOP=y
CONFIG_ADB_CUDA=y
CONFIG_ADB_PMU=y
CONFIG_ADB_PMU_EVENT=y
CONFIG_INPUT_ADBHID=y
CONFIG_MAC_EMUMOUSEBTN=m
CONFIG_NETDEVICES=y
CONFIG_MII=m
CONFIG_NET_CORE=y
CONFIG_BONDING=m
CONFIG_DUMMY=m
CONFIG_WIREGUARD=m
CONFIG_WIREGUARD_DEBUG=y
CONFIG_EQUALIZER=m
CONFIG_IFB=m
CONFIG_NET_TEAM=m
CONFIG_NET_TEAM_MODE_BROADCAST=m
CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
CONFIG_NET_TEAM_MODE_RANDOM=m
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
CONFIG_NET_TEAM_MODE_LOADBALANCE=m
CONFIG_MACVLAN=m
CONFIG_MACVTAP=m
CONFIG_IPVLAN_L3S=y
CONFIG_IPVLAN=m
CONFIG_IPVTAP=m
CONFIG_VXLAN=m
CONFIG_GENEVE=m
CONFIG_BAREUDP=m
CONFIG_GTP=m
CONFIG_AMT=m
CONFIG_MACSEC=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_NET_POLL_CONTROLLER=y
CONFIG_TUN=m
CONFIG_TAP=m
CONFIG_TUN_VNET_CROSS_LE=y
CONFIG_VETH=m
CONFIG_VIRTIO_NET=m
CONFIG_NLMON=m
CONFIG_NET_VRF=m
CONFIG_VSOCKMON=m
CONFIG_MHI_NET=m
CONFIG_ARCNET=m
CONFIG_ARCNET_1201=m
CONFIG_ARCNET_1051=m
CONFIG_ARCNET_RAW=m
CONFIG_ARCNET_CAP=m
CONFIG_ARCNET_COM90xx=m
CONFIG_ARCNET_COM90xxIO=m
CONFIG_ARCNET_RIM_I=m
CONFIG_ARCNET_COM20020=m
CONFIG_ARCNET_COM20020_ISA=m
CONFIG_ARCNET_COM20020_CS=m
CONFIG_ATM_DRIVERS=y
CONFIG_ATM_DUMMY=m
CONFIG_ATM_TCP=m
CONFIG_CAIF_DRIVERS=y
CONFIG_CAIF_TTY=m
CONFIG_CAIF_VIRTIO=m

#
# Distributed Switch Architecture drivers
#
CONFIG_B53=m
CONFIG_B53_SPI_DRIVER=m
CONFIG_B53_MDIO_DRIVER=m
CONFIG_B53_MMAP_DRIVER=m
CONFIG_B53_SRAB_DRIVER=m
CONFIG_B53_SERDES=m
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA_HIRSCHMANN_HELLCREEK=m
CONFIG_NET_DSA_LANTIQ_GSWIP=m
CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MICROCHIP_KSZ_COMMON=m
CONFIG_NET_DSA_MICROCHIP_KSZ9477_I2C=m
CONFIG_NET_DSA_MICROCHIP_KSZ_SPI=m
CONFIG_NET_DSA_MICROCHIP_KSZ8863_SMI=m
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_MV88E6XXX_PTP=y
CONFIG_NET_DSA_MSCC_SEVILLE=m
CONFIG_NET_DSA_AR9331=m
CONFIG_NET_DSA_QCA8K=m
CONFIG_NET_DSA_SJA1105=m
CONFIG_NET_DSA_SJA1105_PTP=y
CONFIG_NET_DSA_SJA1105_TAS=y
CONFIG_NET_DSA_SJA1105_VL=y
CONFIG_NET_DSA_XRS700X=m
CONFIG_NET_DSA_XRS700X_I2C=m
CONFIG_NET_DSA_XRS700X_MDIO=m
CONFIG_NET_DSA_REALTEK=m
CONFIG_NET_DSA_REALTEK_MDIO=m
CONFIG_NET_DSA_REALTEK_SMI=m
CONFIG_NET_DSA_REALTEK_RTL8365MB=m
CONFIG_NET_DSA_REALTEK_RTL8366RB=m
CONFIG_NET_DSA_SMSC_LAN9303=m
CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_DSA_VITESSE_VSC73XX=m
CONFIG_NET_DSA_VITESSE_VSC73XX_SPI=m
CONFIG_NET_DSA_VITESSE_VSC73XX_PLATFORM=m
# end of Distributed Switch Architecture drivers

CONFIG_ETHERNET=y
CONFIG_MDIO=m
CONFIG_NET_VENDOR_3COM=y
CONFIG_EL3=m
CONFIG_PCMCIA_3C574=m
CONFIG_PCMCIA_3C589=m
CONFIG_NET_VENDOR_ACTIONS=y
CONFIG_OWL_EMAC=m
CONFIG_NET_VENDOR_ALACRITECH=y
CONFIG_ALTERA_TSE=m
CONFIG_NET_VENDOR_AMAZON=y
CONFIG_NET_VENDOR_AMD=y
CONFIG_A2065=m
CONFIG_ARIADNE=m
CONFIG_ATARILANCE=m
CONFIG_HPLANCE=m
CONFIG_MVME147_NET=m
CONFIG_PCMCIA_NMCLAN=m
CONFIG_SUN3LANCE=m
CONFIG_AMD_XGBE=m
CONFIG_AMD_XGBE_DCB=y
CONFIG_NET_XGENE=m
CONFIG_NET_XGENE_V2=m
CONFIG_NET_VENDOR_APPLE=y
CONFIG_MACMACE=m
CONFIG_NET_VENDOR_AQUANTIA=y
CONFIG_NET_VENDOR_ARC=y
CONFIG_ARC_EMAC_CORE=m
CONFIG_ARC_EMAC=m
CONFIG_EMAC_ROCKCHIP=m
CONFIG_NET_VENDOR_ASIX=y
CONFIG_SPI_AX88796C=m
CONFIG_SPI_AX88796C_COMPRESSION=y
CONFIG_NET_VENDOR_BROADCOM=y
CONFIG_B44=m
CONFIG_BCM4908_ENET=m
CONFIG_BCMGENET=m
CONFIG_BGMAC=m
CONFIG_BGMAC_BCMA=m
CONFIG_BGMAC_PLATFORM=m
CONFIG_SYSTEMPORT=m
CONFIG_NET_VENDOR_CADENCE=y
CONFIG_MACB=m
CONFIG_MACB_USE_HWSTAMP=y
CONFIG_NET_CALXEDA_XGMAC=m
CONFIG_NET_VENDOR_CAVIUM=y
CONFIG_NET_VENDOR_CIRRUS=y
CONFIG_CS89x0=m
CONFIG_CS89x0_PLATFORM=m
CONFIG_EP93XX_ETH=m
CONFIG_MAC89x0=m
CONFIG_NET_VENDOR_CORTINA=y
CONFIG_GEMINI_ETHERNET=m
CONFIG_NET_VENDOR_DAVICOM=y
CONFIG_DM9000=m
CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL=y
CONFIG_DM9051=m
CONFIG_DNET=m
CONFIG_NET_VENDOR_ENGLEDER=y
CONFIG_TSNEP=m
CONFIG_TSNEP_SELFTESTS=y
CONFIG_NET_VENDOR_EZCHIP=y
CONFIG_EZCHIP_NPS_MANAGEMENT_ENET=m
CONFIG_NET_VENDOR_FARADAY=y
CONFIG_FTMAC100=m
CONFIG_FTGMAC100=m
CONFIG_NET_VENDOR_FREESCALE=y
CONFIG_FEC=m
CONFIG_FSL_FMAN=m
CONFIG_FSL_PQ_MDIO=m
CONFIG_FSL_XGMAC_MDIO=m
CONFIG_GIANFAR=m
CONFIG_FSL_DPAA2_SWITCH=m
CONFIG_FSL_ENETC_IERB=m
CONFIG_NET_VENDOR_FUJITSU=y
CONFIG_PCMCIA_FMVJ18X=m
CONFIG_NET_VENDOR_FUNGIBLE=y
CONFIG_NET_VENDOR_GOOGLE=y
CONFIG_NET_VENDOR_HISILICON=y
CONFIG_HIX5HD2_GMAC=m
CONFIG_HISI_FEMAC=m
CONFIG_HIP04_ETH=m
CONFIG_HI13X1_GMAC=y
CONFIG_HNS_MDIO=m
CONFIG_HNS=m
CONFIG_HNS_DSAF=m
CONFIG_HNS_ENET=m
CONFIG_NET_VENDOR_HUAWEI=y
CONFIG_NET_VENDOR_I825XX=y
CONFIG_BVME6000_NET=m
CONFIG_MVME16x_NET=m
CONFIG_NET_VENDOR_INTEL=y
CONFIG_NET_VENDOR_WANGXUN=y
CONFIG_KORINA=m
CONFIG_NET_VENDOR_ADI=y
CONFIG_ADIN1110=m
CONFIG_NET_VENDOR_LITEX=y
CONFIG_LITEX_LITEETH=m
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_MV643XX_ETH=m
CONFIG_MVMDIO=m
CONFIG_MVNETA_BM_ENABLE=m
CONFIG_MVNETA=m
CONFIG_MVNETA_BM=m
CONFIG_MVPP2=m
CONFIG_MVPP2_PTP=y
CONFIG_PXA168_ETH=m
CONFIG_PRESTERA=m
CONFIG_NET_VENDOR_MEDIATEK=y
CONFIG_NET_MEDIATEK_SOC_WED=y
CONFIG_NET_MEDIATEK_SOC=m
CONFIG_NET_MEDIATEK_STAR_EMAC=m
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_MLXSW_CORE=m
CONFIG_MLXSW_CORE_HWMON=y
CONFIG_MLXSW_CORE_THERMAL=y
CONFIG_MLXSW_I2C=m
CONFIG_MLXSW_MINIMAL=m
CONFIG_MLXFW=m
CONFIG_MLXBF_GIGE=m
CONFIG_NET_VENDOR_MICREL=y
CONFIG_KS8842=m
CONFIG_KS8851=m
CONFIG_KS8851_MLL=m
CONFIG_NET_VENDOR_MICROCHIP=y
CONFIG_ENC28J60=m
CONFIG_ENC28J60_WRITEVERIFY=y
CONFIG_ENCX24J600=m
CONFIG_LAN966X_SWITCH=m
CONFIG_SPARX5_SWITCH=m
CONFIG_NET_VENDOR_MICROSEMI=y
CONFIG_MSCC_OCELOT_SWITCH_LIB=m
CONFIG_MSCC_OCELOT_SWITCH=m
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_NI=y
CONFIG_NI_XGE_MANAGEMENT_ENET=m
CONFIG_NET_VENDOR_NATSEMI=y
CONFIG_MACSONIC=m
CONFIG_NET_VENDOR_NETRONOME=y
CONFIG_NET_VENDOR_8390=y
CONFIG_PCMCIA_AXNET=m
CONFIG_AX88796=m
CONFIG_AX88796_93CX6=y
CONFIG_XSURF100=m
CONFIG_HYDRA=m
CONFIG_MAC8390=m
CONFIG_NE2000=m
CONFIG_APNE=m
CONFIG_PCMCIA_PCNET=m
CONFIG_ULTRA=m
CONFIG_WD80x3=m
CONFIG_ZORRO8390=m
CONFIG_LPC_ENET=m
CONFIG_ETHOC=m
CONFIG_NET_VENDOR_PENSANDO=y
CONFIG_NET_VENDOR_QUALCOMM=y
CONFIG_QCA7000=m
CONFIG_QCA7000_SPI=m
CONFIG_QCA7000_UART=m
CONFIG_QCOM_EMAC=m
CONFIG_RMNET=m
CONFIG_NET_VENDOR_RENESAS=y
CONFIG_SH_ETH=m
CONFIG_RAVB=m
CONFIG_NET_VENDOR_ROCKER=y
CONFIG_NET_VENDOR_SAMSUNG=y
CONFIG_SXGBE_ETH=m
CONFIG_NET_VENDOR_SEEQ=y
CONFIG_NET_VENDOR_SOLARFLARE=y
CONFIG_NET_VENDOR_SMSC=y
CONFIG_SMC9194=m
CONFIG_SMC91X=m
CONFIG_PCMCIA_SMC91C92=m
CONFIG_SMC911X=m
CONFIG_SMSC911X=m
CONFIG_NET_VENDOR_SOCIONEXT=y
CONFIG_SNI_AVE=m
CONFIG_SNI_NETSEC=m
CONFIG_NET_VENDOR_STMICRO=y
CONFIG_STMMAC_ETH=m
CONFIG_STMMAC_SELFTESTS=y
CONFIG_STMMAC_PLATFORM=m
CONFIG_DWMAC_DWC_QOS_ETH=m
CONFIG_DWMAC_GENERIC=m
CONFIG_DWMAC_ANARION=m
CONFIG_DWMAC_INGENIC=m
CONFIG_DWMAC_IPQ806X=m
CONFIG_DWMAC_LPC18XX=m
CONFIG_DWMAC_MEDIATEK=m
CONFIG_DWMAC_MESON=m
CONFIG_DWMAC_OXNAS=m
CONFIG_DWMAC_QCOM_ETHQOS=m
CONFIG_DWMAC_ROCKCHIP=m
CONFIG_DWMAC_SOCFPGA=m
CONFIG_DWMAC_STI=m
CONFIG_DWMAC_STM32=m
CONFIG_DWMAC_SUNXI=m
CONFIG_DWMAC_SUN8I=m
CONFIG_DWMAC_IMX8=m
CONFIG_DWMAC_INTEL_PLAT=m
CONFIG_DWMAC_VISCONTI=m
CONFIG_NET_VENDOR_SUNPLUS=y
CONFIG_SP7021_EMAC=m
CONFIG_NET_VENDOR_SYNOPSYS=y
CONFIG_DWC_XLGMAC=m
CONFIG_NET_VENDOR_VERTEXCOM=y
CONFIG_MSE102X=m
CONFIG_NET_VENDOR_VIA=y
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
CONFIG_NET_VENDOR_WIZNET=y
CONFIG_WIZNET_W5100=m
CONFIG_WIZNET_W5300=m
# CONFIG_WIZNET_BUS_DIRECT is not set
# CONFIG_WIZNET_BUS_INDIRECT is not set
CONFIG_WIZNET_BUS_ANY=y
CONFIG_WIZNET_W5100_SPI=m
CONFIG_NET_VENDOR_XILINX=y
CONFIG_XILINX_EMACLITE=m
CONFIG_XILINX_AXI_EMAC=m
CONFIG_XILINX_LL_TEMAC=m
CONFIG_NET_VENDOR_XIRCOM=y
CONFIG_PCMCIA_XIRC2PS=m
CONFIG_QCOM_IPA=m
CONFIG_NET_SB1000=m
CONFIG_PHYLINK=m
CONFIG_PHYLIB=m
CONFIG_SWPHY=y
CONFIG_LED_TRIGGER_PHY=y
CONFIG_FIXED_PHY=m
CONFIG_SFP=m

#
# MII PHY device drivers
#
CONFIG_AMD_PHY=m
CONFIG_MESON_GXL_PHY=m
CONFIG_ADIN_PHY=m
CONFIG_ADIN1100_PHY=m
CONFIG_AQUANTIA_PHY=m
CONFIG_AX88796B_PHY=m
CONFIG_BROADCOM_PHY=m
CONFIG_BCM54140_PHY=m
CONFIG_BCM63XX_PHY=m
CONFIG_BCM7XXX_PHY=m
CONFIG_BCM84881_PHY=m
CONFIG_BCM87XX_PHY=m
CONFIG_BCM_CYGNUS_PHY=m
CONFIG_BCM_NET_PHYLIB=m
CONFIG_BCM_NET_PHYPTP=m
CONFIG_CICADA_PHY=m
CONFIG_CORTINA_PHY=m
CONFIG_DAVICOM_PHY=m
CONFIG_ICPLUS_PHY=m
CONFIG_LXT_PHY=m
CONFIG_INTEL_XWAY_PHY=m
CONFIG_LSI_ET1011C_PHY=m
CONFIG_MARVELL_PHY=m
CONFIG_MARVELL_10G_PHY=m
CONFIG_MARVELL_88X2222_PHY=m
CONFIG_MAXLINEAR_GPHY=m
CONFIG_MEDIATEK_GE_PHY=m
CONFIG_MICREL_PHY=m
CONFIG_MICROCHIP_PHY=m
CONFIG_MICROCHIP_T1_PHY=m
CONFIG_MICROSEMI_PHY=m
CONFIG_MOTORCOMM_PHY=m
CONFIG_NATIONAL_PHY=m
CONFIG_NXP_C45_TJA11XX_PHY=m
CONFIG_NXP_TJA11XX_PHY=m
CONFIG_AT803X_PHY=m
CONFIG_QSEMI_PHY=m
CONFIG_REALTEK_PHY=m
CONFIG_RENESAS_PHY=m
CONFIG_ROCKCHIP_PHY=m
CONFIG_SMSC_PHY=m
CONFIG_STE10XP=m
CONFIG_TERANETICS_PHY=m
CONFIG_DP83822_PHY=m
CONFIG_DP83TC811_PHY=m
CONFIG_DP83848_PHY=m
CONFIG_DP83867_PHY=m
CONFIG_DP83869_PHY=m
CONFIG_DP83TD510_PHY=m
CONFIG_VITESSE_PHY=m
CONFIG_XILINX_GMII2RGMII=m
CONFIG_MICREL_KS8995MA=m
CONFIG_PSE_CONTROLLER=y
CONFIG_PSE_REGULATOR=m
CONFIG_CAN_DEV=m
CONFIG_CAN_VCAN=m
CONFIG_CAN_VXCAN=m
CONFIG_CAN_NETLINK=y
CONFIG_CAN_CALC_BITTIMING=y
CONFIG_CAN_RX_OFFLOAD=y
CONFIG_CAN_AT91=m
CONFIG_CAN_CAN327=m
CONFIG_CAN_FLEXCAN=m
CONFIG_CAN_GRCAN=m
CONFIG_CAN_SLCAN=m
CONFIG_CAN_SUN4I=m
CONFIG_CAN_XILINXCAN=m
CONFIG_CAN_C_CAN=m
CONFIG_CAN_C_CAN_PLATFORM=m
CONFIG_CAN_CC770=m
CONFIG_CAN_CC770_ISA=m
CONFIG_CAN_CC770_PLATFORM=m
CONFIG_CAN_CTUCANFD=m
CONFIG_CAN_CTUCANFD_PLATFORM=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_M_CAN=m
CONFIG_CAN_M_CAN_PLATFORM=m
CONFIG_CAN_M_CAN_TCAN4X5X=m
CONFIG_CAN_RCAR=m
CONFIG_CAN_RCAR_CANFD=m
CONFIG_CAN_SJA1000=m
CONFIG_CAN_EMS_PCMCIA=m
CONFIG_CAN_SJA1000_ISA=m
CONFIG_CAN_SJA1000_PLATFORM=m
CONFIG_CAN_TSCAN1=m
CONFIG_CAN_SOFTING=m
CONFIG_CAN_SOFTING_CS=m

#
# CAN SPI interfaces
#
CONFIG_CAN_HI311X=m
CONFIG_CAN_MCP251X=m
CONFIG_CAN_MCP251XFD=m
CONFIG_CAN_MCP251XFD_SANITY=y
# end of CAN SPI interfaces

#
# CAN USB interfaces
#
CONFIG_CAN_8DEV_USB=m
CONFIG_CAN_EMS_USB=m
CONFIG_CAN_ESD_USB=m
CONFIG_CAN_ETAS_ES58X=m
CONFIG_CAN_GS_USB=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_MCBA_USB=m
CONFIG_CAN_PEAK_USB=m
CONFIG_CAN_UCAN=m
# end of CAN USB interfaces

CONFIG_CAN_DEBUG_DEVICES=y

#
# MCTP Device Drivers
#
CONFIG_MCTP_SERIAL=m
CONFIG_MCTP_TRANSPORT_I2C=m
# end of MCTP Device Drivers

CONFIG_MDIO_DEVICE=m
CONFIG_MDIO_BUS=m
CONFIG_FWNODE_MDIO=m
CONFIG_OF_MDIO=m
CONFIG_MDIO_DEVRES=m
CONFIG_MDIO_SUN4I=m
CONFIG_MDIO_XGENE=m
CONFIG_MDIO_ASPEED=m
CONFIG_MDIO_BITBANG=m
CONFIG_MDIO_BCM_IPROC=m
CONFIG_MDIO_BCM_UNIMAC=m
CONFIG_MDIO_CAVIUM=m
CONFIG_MDIO_GPIO=m
CONFIG_MDIO_HISI_FEMAC=m
CONFIG_MDIO_I2C=m
CONFIG_MDIO_MVUSB=m
CONFIG_MDIO_MSCC_MIIM=m
CONFIG_MDIO_MOXART=m
CONFIG_MDIO_OCTEON=m
CONFIG_MDIO_IPQ4019=m
CONFIG_MDIO_IPQ8064=m

#
# MDIO Multiplexers
#
CONFIG_MDIO_BUS_MUX=m
CONFIG_MDIO_BUS_MUX_MESON_G12A=m
CONFIG_MDIO_BUS_MUX_BCM6368=m
CONFIG_MDIO_BUS_MUX_BCM_IPROC=m
CONFIG_MDIO_BUS_MUX_GPIO=m
CONFIG_MDIO_BUS_MUX_MULTIPLEXER=m
CONFIG_MDIO_BUS_MUX_MMIOREG=m

#
# PCS device drivers
#
CONFIG_PCS_XPCS=m
CONFIG_PCS_LYNX=m
CONFIG_PCS_RZN1_MIIC=m
CONFIG_PCS_ALTERA_TSE=m
# end of PCS device drivers

CONFIG_PLIP=m
CONFIG_PPP=m
CONFIG_PPP_BSDCOMP=m
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_FILTER=y
CONFIG_PPP_MPPE=m
CONFIG_PPP_MULTILINK=y
CONFIG_PPPOATM=m
CONFIG_PPPOE=m
CONFIG_PPTP=m
CONFIG_PPPOL2TP=m
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
CONFIG_SLIP=m
CONFIG_SLHC=m
CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP_SMART=y
CONFIG_SLIP_MODE_SLIP6=y

#
# Host-side USB support is needed for USB Network Adapter support
#
CONFIG_USB_NET_DRIVERS=m
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
CONFIG_USB_RTL8150=m
CONFIG_USB_RTL8152=m
CONFIG_USB_LAN78XX=m
CONFIG_USB_USBNET=m
CONFIG_USB_NET_AX8817X=m
CONFIG_USB_NET_AX88179_178A=m
CONFIG_USB_NET_CDCETHER=m
CONFIG_USB_NET_CDC_EEM=m
CONFIG_USB_NET_CDC_NCM=m
CONFIG_USB_NET_HUAWEI_CDC_NCM=m
CONFIG_USB_NET_CDC_MBIM=m
CONFIG_USB_NET_DM9601=m
CONFIG_USB_NET_SR9700=m
CONFIG_USB_NET_SR9800=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_GL620A=m
CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_MCS7830=m
CONFIG_USB_NET_RNDIS_HOST=m
CONFIG_USB_NET_CDC_SUBSET_ENABLE=m
CONFIG_USB_NET_CDC_SUBSET=m
CONFIG_USB_ALI_M5632=y
CONFIG_USB_AN2720=y
CONFIG_USB_BELKIN=y
CONFIG_USB_ARMLINUX=y
CONFIG_USB_EPSON2888=y
CONFIG_USB_KC2190=y
CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_NET_CX82310_ETH=m
CONFIG_USB_NET_KALMIA=m
CONFIG_USB_NET_QMI_WWAN=m
CONFIG_USB_HSO=m
CONFIG_USB_NET_INT51X1=m
CONFIG_USB_CDC_PHONET=m
CONFIG_USB_IPHETH=m
CONFIG_USB_SIERRA_NET=m
CONFIG_USB_VL600=m
CONFIG_USB_NET_CH9200=m
CONFIG_USB_NET_AQC111=m
CONFIG_USB_RTL8153_ECM=m
CONFIG_WLAN=y
CONFIG_WLAN_VENDOR_ADMTEK=y
CONFIG_ATH_COMMON=m
CONFIG_WLAN_VENDOR_ATH=y
CONFIG_ATH_DEBUG=y
CONFIG_ATH_REG_DYNAMIC_USER_REG_HINTS=y
CONFIG_ATH_REG_DYNAMIC_USER_CERT_TESTING=y
CONFIG_ATH9K_HW=m
CONFIG_ATH9K_COMMON=m
CONFIG_ATH9K_COMMON_DEBUG=y
CONFIG_ATH9K_DFS_DEBUGFS=y
CONFIG_ATH9K_BTCOEX_SUPPORT=y
CONFIG_ATH9K=m
CONFIG_ATH9K_AHB=y
CONFIG_ATH9K_DEBUGFS=y
CONFIG_ATH9K_STATION_STATISTICS=y
CONFIG_ATH9K_TX99=y
CONFIG_ATH9K_DFS_CERTIFIED=y
CONFIG_ATH9K_DYNACK=y
CONFIG_ATH9K_RFKILL=y
CONFIG_ATH9K_CHANNEL_CONTEXT=y
CONFIG_ATH9K_PCOEM=y
CONFIG_ATH9K_HTC=m
CONFIG_ATH9K_HTC_DEBUGFS=y
CONFIG_ATH9K_HWRNG=y
CONFIG_ATH9K_COMMON_SPECTRAL=y
CONFIG_CARL9170=m
CONFIG_CARL9170_LEDS=y
CONFIG_CARL9170_DEBUGFS=y
CONFIG_CARL9170_WPC=y
CONFIG_CARL9170_HWRNG=y
CONFIG_ATH6KL=m
CONFIG_ATH6KL_SDIO=m
CONFIG_ATH6KL_USB=m
CONFIG_ATH6KL_DEBUG=y
CONFIG_ATH6KL_REGDOMAIN=y
CONFIG_AR5523=m
CONFIG_ATH10K=m
CONFIG_ATH10K_CE=y
CONFIG_ATH10K_SDIO=m
CONFIG_ATH10K_USB=m
CONFIG_ATH10K_SNOC=m
CONFIG_ATH10K_DEBUG=y
CONFIG_ATH10K_DEBUGFS=y
CONFIG_ATH10K_SPECTRAL=y
CONFIG_ATH10K_DFS_CERTIFIED=y
CONFIG_WCN36XX=m
CONFIG_WCN36XX_DEBUGFS=y
CONFIG_ATH11K=m
CONFIG_ATH11K_AHB=m
CONFIG_ATH11K_DEBUG=y
CONFIG_ATH11K_DEBUGFS=y
CONFIG_ATH11K_SPECTRAL=y
CONFIG_WLAN_VENDOR_ATMEL=y
CONFIG_ATMEL=m
CONFIG_PCMCIA_ATMEL=m
CONFIG_AT76C50X_USB=m
CONFIG_WLAN_VENDOR_BROADCOM=y
CONFIG_B43=m
CONFIG_B43_BCMA=y
CONFIG_B43_SSB=y
CONFIG_B43_BUSES_BCMA_AND_SSB=y
# CONFIG_B43_BUSES_BCMA is not set
# CONFIG_B43_BUSES_SSB is not set
CONFIG_B43_SDIO=y
CONFIG_B43_BCMA_PIO=y
CONFIG_B43_PIO=y
CONFIG_B43_PHY_G=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_HT=y
CONFIG_B43_LEDS=y
CONFIG_B43_HWRNG=y
CONFIG_B43_DEBUG=y
CONFIG_B43LEGACY=m
CONFIG_B43LEGACY_LEDS=y
CONFIG_B43LEGACY_HWRNG=y
CONFIG_B43LEGACY_DEBUG=y
CONFIG_B43LEGACY_DMA=y
CONFIG_B43LEGACY_PIO=y
CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
# CONFIG_B43LEGACY_DMA_MODE is not set
# CONFIG_B43LEGACY_PIO_MODE is not set
CONFIG_BRCMUTIL=m
CONFIG_BRCMSMAC=m
CONFIG_BRCMSMAC_LEDS=y
CONFIG_BRCMFMAC=m
CONFIG_BRCMFMAC_PROTO_BCDC=y
CONFIG_BRCMFMAC_SDIO=y
CONFIG_BRCMFMAC_USB=y
CONFIG_BRCM_TRACING=y
CONFIG_BRCMDBG=y
CONFIG_WLAN_VENDOR_CISCO=y
CONFIG_AIRO_CS=m
CONFIG_WLAN_VENDOR_INTEL=y
CONFIG_WLAN_VENDOR_INTERSIL=y
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
CONFIG_HOSTAP_FIRMWARE_NVRAM=y
CONFIG_HOSTAP_CS=m
CONFIG_HERMES=m
CONFIG_HERMES_PRISM=y
CONFIG_HERMES_CACHE_FW_ON_INIT=y
CONFIG_ORINOCO_USB=m
CONFIG_P54_COMMON=m
CONFIG_P54_USB=m
CONFIG_P54_SPI=m
CONFIG_P54_SPI_DEFAULT_EEPROM=y
CONFIG_P54_LEDS=y
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_LIBERTAS=m
CONFIG_LIBERTAS_USB=m
CONFIG_LIBERTAS_SDIO=m
CONFIG_LIBERTAS_SPI=m
CONFIG_LIBERTAS_DEBUG=y
CONFIG_LIBERTAS_MESH=y
CONFIG_LIBERTAS_THINFIRM=m
CONFIG_LIBERTAS_THINFIRM_DEBUG=y
CONFIG_LIBERTAS_THINFIRM_USB=m
CONFIG_MWIFIEX=m
CONFIG_MWIFIEX_SDIO=m
CONFIG_MWIFIEX_USB=m
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_MT7601U=m
CONFIG_MT76_CORE=m
CONFIG_MT76_LEDS=y
CONFIG_MT76_USB=m
CONFIG_MT76_SDIO=m
CONFIG_MT76x02_LIB=m
CONFIG_MT76x02_USB=m
CONFIG_MT76_CONNAC_LIB=m
CONFIG_MT76x0_COMMON=m
CONFIG_MT76x0U=m
CONFIG_MT76x2_COMMON=m
CONFIG_MT76x2U=m
CONFIG_MT7615_COMMON=m
CONFIG_MT7663_USB_SDIO_COMMON=m
CONFIG_MT7663U=m
CONFIG_MT7663S=m
CONFIG_MT7921_COMMON=m
CONFIG_MT7921S=m
CONFIG_MT7921U=m
CONFIG_WLAN_VENDOR_MICROCHIP=y
CONFIG_WILC1000=m
CONFIG_WILC1000_SDIO=m
CONFIG_WILC1000_SPI=m
CONFIG_WILC1000_HW_OOB_INTR=y
CONFIG_WLAN_VENDOR_PURELIFI=y
CONFIG_PLFXLC=m
CONFIG_WLAN_VENDOR_RALINK=y
CONFIG_RT2X00=m
CONFIG_RT2500USB=m
CONFIG_RT73USB=m
CONFIG_RT2800USB=m
CONFIG_RT2800USB_RT33XX=y
CONFIG_RT2800USB_RT35XX=y
CONFIG_RT2800USB_RT3573=y
CONFIG_RT2800USB_RT53XX=y
CONFIG_RT2800USB_RT55XX=y
CONFIG_RT2800USB_UNKNOWN=y
CONFIG_RT2800_LIB=m
CONFIG_RT2X00_LIB_USB=m
CONFIG_RT2X00_LIB=m
CONFIG_RT2X00_LIB_FIRMWARE=y
CONFIG_RT2X00_LIB_CRYPTO=y
CONFIG_RT2X00_LIB_LEDS=y
CONFIG_RT2X00_LIB_DEBUGFS=y
CONFIG_RT2X00_DEBUG=y
CONFIG_WLAN_VENDOR_REALTEK=y
CONFIG_RTL8187=m
CONFIG_RTL8187_LEDS=y
CONFIG_RTL_CARDS=m
CONFIG_RTL8192CU=m
CONFIG_RTLWIFI=m
CONFIG_RTLWIFI_USB=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTL8192C_COMMON=m
CONFIG_RTL8XXXU=m
CONFIG_RTL8XXXU_UNTESTED=y
CONFIG_RTW88=m
CONFIG_RTW89=m
CONFIG_WLAN_VENDOR_RSI=y
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
CONFIG_RSI_SDIO=m
CONFIG_RSI_USB=m
CONFIG_RSI_COEX=y
CONFIG_WLAN_VENDOR_SILABS=y
CONFIG_WFX=m
CONFIG_WLAN_VENDOR_ST=y
CONFIG_CW1200=m
CONFIG_CW1200_WLAN_SDIO=m
CONFIG_CW1200_WLAN_SPI=m
CONFIG_WLAN_VENDOR_TI=y
CONFIG_WL1251=m
CONFIG_WL1251_SPI=m
CONFIG_WL1251_SDIO=m
CONFIG_WL12XX=m
CONFIG_WL18XX=m
CONFIG_WLCORE=m
CONFIG_WLCORE_SPI=m
CONFIG_WLCORE_SDIO=m
CONFIG_WILINK_PLATFORM_DATA=y
CONFIG_WLAN_VENDOR_ZYDAS=y
CONFIG_USB_ZD1201=m
CONFIG_ZD1211RW=m
CONFIG_ZD1211RW_DEBUG=y
CONFIG_WLAN_VENDOR_QUANTENNA=y
CONFIG_PCMCIA_RAYCS=m
CONFIG_PCMCIA_WL3501=m
CONFIG_MAC80211_HWSIM=m
CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_VIRT_WIFI=m
CONFIG_WAN=y
CONFIG_HDLC=m
CONFIG_HDLC_RAW=m
CONFIG_HDLC_RAW_ETH=m
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC_PPP=m
CONFIG_HDLC_X25=m
CONFIG_N2=m
CONFIG_C101=m
CONFIG_FSL_UCC_HDLC=m
CONFIG_SLIC_DS26522=m
CONFIG_LAPBETHER=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_MRF24J40=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_ATUSB=m
CONFIG_IEEE802154_ADF7242=m
CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CA8210_DEBUGFS=y
CONFIG_IEEE802154_MCR20A=m
CONFIG_IEEE802154_HWSIM=m

#
# Wireless WAN
#
CONFIG_WWAN=m
CONFIG_WWAN_DEBUGFS=y
CONFIG_WWAN_HWSIM=m
CONFIG_MHI_WWAN_CTRL=m
CONFIG_MHI_WWAN_MBIM=m
CONFIG_QCOM_BAM_DMUX=m
CONFIG_RPMSG_WWAN_CTRL=m
# end of Wireless WAN

CONFIG_NETDEVSIM=m
CONFIG_NET_FAILOVER=m
CONFIG_NETDEV_LEGACY_INIT=y
CONFIG_ISDN=y
CONFIG_ISDN_CAPI=y
CONFIG_CAPI_TRACE=y
CONFIG_ISDN_CAPI_MIDDLEWARE=y
CONFIG_MISDN=m
CONFIG_MISDN_DSP=m
CONFIG_MISDN_L1OIP=m

#
# mISDN hardware drivers
#
CONFIG_MISDN_HFCUSB=m

#
# Input device support
#
CONFIG_INPUT=y
CONFIG_INPUT_LEDS=m
CONFIG_INPUT_FF_MEMLESS=m
CONFIG_INPUT_SPARSEKMAP=m
CONFIG_INPUT_MATRIXKMAP=m
CONFIG_INPUT_VIVALDIFMAP=m

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=m
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_JOYDEV=m
CONFIG_INPUT_EVDEV=m
CONFIG_INPUT_EVBUG=m

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ADC=m
CONFIG_KEYBOARD_ADP5588=m
CONFIG_KEYBOARD_ADP5589=m
CONFIG_KEYBOARD_AMIGA=m
CONFIG_KEYBOARD_ATARI=m
CONFIG_KEYBOARD_ATKBD=m
CONFIG_KEYBOARD_QT1050=m
CONFIG_KEYBOARD_QT1070=m
CONFIG_KEYBOARD_QT2160=m
CONFIG_KEYBOARD_CLPS711X=m
CONFIG_KEYBOARD_DLINK_DIR685=m
CONFIG_KEYBOARD_LKKBD=m
CONFIG_KEYBOARD_EP93XX=m
CONFIG_KEYBOARD_GPIO=m
CONFIG_KEYBOARD_GPIO_POLLED=m
CONFIG_KEYBOARD_TCA6416=m
CONFIG_KEYBOARD_TCA8418=m
CONFIG_KEYBOARD_MATRIX=m
CONFIG_KEYBOARD_HIL_OLD=m
CONFIG_KEYBOARD_HIL=m
CONFIG_KEYBOARD_LM8323=m
CONFIG_KEYBOARD_LM8333=m
CONFIG_KEYBOARD_MAX7359=m
CONFIG_KEYBOARD_MCS=m
CONFIG_KEYBOARD_MPR121=m
CONFIG_KEYBOARD_SNVS_PWRKEY=m
CONFIG_KEYBOARD_IMX=m
CONFIG_KEYBOARD_IMX_SC_KEY=m
CONFIG_KEYBOARD_NEWTON=m
CONFIG_KEYBOARD_OPENCORES=m
CONFIG_KEYBOARD_PINEPHONE=m
CONFIG_KEYBOARD_PMIC8XXX=m
CONFIG_KEYBOARD_SAMSUNG=m
CONFIG_KEYBOARD_GOLDFISH_EVENTS=m
CONFIG_KEYBOARD_STOWAWAY=m
CONFIG_KEYBOARD_ST_KEYSCAN=m
CONFIG_KEYBOARD_SUNKBD=m
CONFIG_KEYBOARD_SH_KEYSC=m
CONFIG_KEYBOARD_STMPE=m
CONFIG_KEYBOARD_IQS62X=m
CONFIG_KEYBOARD_OMAP4=m
CONFIG_KEYBOARD_TM2_TOUCHKEY=m
CONFIG_KEYBOARD_XTKBD=m
CONFIG_KEYBOARD_CROS_EC=m
CONFIG_KEYBOARD_CAP11XX=m
CONFIG_KEYBOARD_BCM=m
CONFIG_KEYBOARD_MT6779=m
CONFIG_KEYBOARD_MTK_PMIC=m
CONFIG_KEYBOARD_CYPRESS_SF=m
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=m
CONFIG_MOUSE_PS2_ALPS=y
CONFIG_MOUSE_PS2_BYD=y
CONFIG_MOUSE_PS2_LOGIPS2PP=y
CONFIG_MOUSE_PS2_SYNAPTICS=y
CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y
CONFIG_MOUSE_PS2_CYPRESS=y
CONFIG_MOUSE_PS2_TRACKPOINT=y
CONFIG_MOUSE_PS2_ELANTECH=y
CONFIG_MOUSE_PS2_ELANTECH_SMBUS=y
CONFIG_MOUSE_PS2_SENTELIC=y
CONFIG_MOUSE_PS2_TOUCHKIT=y
CONFIG_MOUSE_PS2_FOCALTECH=y
CONFIG_MOUSE_PS2_SMBUS=y
CONFIG_MOUSE_SERIAL=m
CONFIG_MOUSE_APPLETOUCH=m
CONFIG_MOUSE_BCM5974=m
CONFIG_MOUSE_CYAPA=m
CONFIG_MOUSE_ELAN_I2C=m
CONFIG_MOUSE_ELAN_I2C_I2C=y
CONFIG_MOUSE_ELAN_I2C_SMBUS=y
CONFIG_MOUSE_INPORT=m
CONFIG_MOUSE_ATIXL=y
CONFIG_MOUSE_LOGIBM=m
CONFIG_MOUSE_PC110PAD=m
CONFIG_MOUSE_AMIGA=m
CONFIG_MOUSE_ATARI=m
CONFIG_MOUSE_VSXXXAA=m
CONFIG_MOUSE_GPIO=m
CONFIG_MOUSE_SYNAPTICS_I2C=m
CONFIG_MOUSE_SYNAPTICS_USB=m
CONFIG_INPUT_JOYSTICK=y
CONFIG_JOYSTICK_ANALOG=m
CONFIG_JOYSTICK_A3D=m
CONFIG_JOYSTICK_ADC=m
CONFIG_JOYSTICK_ADI=m
CONFIG_JOYSTICK_COBRA=m
CONFIG_JOYSTICK_GF2K=m
CONFIG_JOYSTICK_GRIP=m
CONFIG_JOYSTICK_GRIP_MP=m
CONFIG_JOYSTICK_GUILLEMOT=m
CONFIG_JOYSTICK_INTERACT=m
CONFIG_JOYSTICK_SIDEWINDER=m
CONFIG_JOYSTICK_TMDC=m
CONFIG_JOYSTICK_IFORCE=m
CONFIG_JOYSTICK_IFORCE_USB=m
CONFIG_JOYSTICK_IFORCE_232=m
CONFIG_JOYSTICK_WARRIOR=m
CONFIG_JOYSTICK_MAGELLAN=m
CONFIG_JOYSTICK_SPACEORB=m
CONFIG_JOYSTICK_SPACEBALL=m
CONFIG_JOYSTICK_STINGER=m
CONFIG_JOYSTICK_TWIDJOY=m
CONFIG_JOYSTICK_ZHENHUA=m
CONFIG_JOYSTICK_DB9=m
CONFIG_JOYSTICK_GAMECON=m
CONFIG_JOYSTICK_TURBOGRAFX=m
CONFIG_JOYSTICK_AMIGA=m
CONFIG_JOYSTICK_AS5011=m
CONFIG_JOYSTICK_JOYDUMP=m
CONFIG_JOYSTICK_XPAD=m
CONFIG_JOYSTICK_XPAD_FF=y
CONFIG_JOYSTICK_XPAD_LEDS=y
CONFIG_JOYSTICK_WALKERA0701=m
CONFIG_JOYSTICK_PSXPAD_SPI=m
CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PXRC=m
CONFIG_JOYSTICK_QWIIC=m
CONFIG_JOYSTICK_FSIA6B=m
CONFIG_JOYSTICK_SENSEHAT=m
CONFIG_INPUT_TABLET=y
CONFIG_TABLET_USB_ACECAD=m
CONFIG_TABLET_USB_AIPTEK=m
CONFIG_TABLET_USB_HANWANG=m
CONFIG_TABLET_USB_KBTAB=m
CONFIG_TABLET_USB_PEGASUS=m
CONFIG_TABLET_SERIAL_WACOM4=m
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_ADS7846=m
CONFIG_TOUCHSCREEN_AD7877=m
CONFIG_TOUCHSCREEN_AD7879=m
CONFIG_TOUCHSCREEN_AD7879_I2C=m
CONFIG_TOUCHSCREEN_AD7879_SPI=m
CONFIG_TOUCHSCREEN_ADC=m
CONFIG_TOUCHSCREEN_AR1021_I2C=m
CONFIG_TOUCHSCREEN_ATMEL_MXT=m
CONFIG_TOUCHSCREEN_ATMEL_MXT_T37=y
CONFIG_TOUCHSCREEN_AUO_PIXCIR=m
CONFIG_TOUCHSCREEN_BU21013=m
CONFIG_TOUCHSCREEN_BU21029=m
CONFIG_TOUCHSCREEN_CHIPONE_ICN8318=m
CONFIG_TOUCHSCREEN_CY8CTMA140=m
CONFIG_TOUCHSCREEN_CY8CTMG110=m
CONFIG_TOUCHSCREEN_CYTTSP_CORE=m
CONFIG_TOUCHSCREEN_CYTTSP_I2C=m
CONFIG_TOUCHSCREEN_CYTTSP_SPI=m
CONFIG_TOUCHSCREEN_CYTTSP4_CORE=m
CONFIG_TOUCHSCREEN_CYTTSP4_I2C=m
CONFIG_TOUCHSCREEN_CYTTSP4_SPI=m
CONFIG_TOUCHSCREEN_DA9052=m
CONFIG_TOUCHSCREEN_DYNAPRO=m
CONFIG_TOUCHSCREEN_HAMPSHIRE=m
CONFIG_TOUCHSCREEN_EETI=m
CONFIG_TOUCHSCREEN_EGALAX=m
CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
CONFIG_TOUCHSCREEN_EXC3000=m
CONFIG_TOUCHSCREEN_FUJITSU=m
CONFIG_TOUCHSCREEN_GOODIX=m
CONFIG_TOUCHSCREEN_HIDEEP=m
CONFIG_TOUCHSCREEN_HYCON_HY46XX=m
CONFIG_TOUCHSCREEN_ILI210X=m
CONFIG_TOUCHSCREEN_ILITEK=m
CONFIG_TOUCHSCREEN_IPROC=m
CONFIG_TOUCHSCREEN_S6SY761=m
CONFIG_TOUCHSCREEN_GUNZE=m
CONFIG_TOUCHSCREEN_EKTF2127=m
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
CONFIG_TOUCHSCREEN_WACOM_W8001=m
CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TOUCHSCREEN_MAX11801=m
CONFIG_TOUCHSCREEN_MCS5000=m
CONFIG_TOUCHSCREEN_MMS114=m
CONFIG_TOUCHSCREEN_MELFAS_MIP4=m
CONFIG_TOUCHSCREEN_MSG2638=m
CONFIG_TOUCHSCREEN_MTOUCH=m
CONFIG_TOUCHSCREEN_IMAGIS=m
CONFIG_TOUCHSCREEN_IMX6UL_TSC=m
CONFIG_TOUCHSCREEN_INEXIO=m
CONFIG_TOUCHSCREEN_MK712=m
CONFIG_TOUCHSCREEN_HTCPEN=m
CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_EDT_FT5X06=m
CONFIG_TOUCHSCREEN_RASPBERRYPI_FW=m
CONFIG_TOUCHSCREEN_MIGOR=m
CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
CONFIG_TOUCHSCREEN_TOUCHWIN=m
CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
CONFIG_TOUCHSCREEN_UCB1400=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_WDT87XX_I2C=m
CONFIG_TOUCHSCREEN_WM831X=m
CONFIG_TOUCHSCREEN_WM97XX=m
CONFIG_TOUCHSCREEN_WM9705=y
CONFIG_TOUCHSCREEN_WM9712=y
CONFIG_TOUCHSCREEN_WM9713=y
CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
CONFIG_TOUCHSCREEN_MXS_LRADC=m
CONFIG_TOUCHSCREEN_MX25=m
CONFIG_TOUCHSCREEN_MC13783=m
CONFIG_TOUCHSCREEN_USB_EGALAX=y
CONFIG_TOUCHSCREEN_USB_PANJIT=y
CONFIG_TOUCHSCREEN_USB_3M=y
CONFIG_TOUCHSCREEN_USB_ITM=y
CONFIG_TOUCHSCREEN_USB_ETURBO=y
CONFIG_TOUCHSCREEN_USB_GUNZE=y
CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
CONFIG_TOUCHSCREEN_USB_GOTOP=y
CONFIG_TOUCHSCREEN_USB_JASTEC=y
CONFIG_TOUCHSCREEN_USB_ELO=y
CONFIG_TOUCHSCREEN_USB_E2I=y
CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
CONFIG_TOUCHSCREEN_USB_NEXIO=y
CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y
CONFIG_TOUCHSCREEN_TOUCHIT213=m
CONFIG_TOUCHSCREEN_TS4800=m
CONFIG_TOUCHSCREEN_TSC_SERIO=m
CONFIG_TOUCHSCREEN_TSC200X_CORE=m
CONFIG_TOUCHSCREEN_TSC2004=m
CONFIG_TOUCHSCREEN_TSC2005=m
CONFIG_TOUCHSCREEN_TSC2007=m
CONFIG_TOUCHSCREEN_TSC2007_IIO=y
CONFIG_TOUCHSCREEN_PCAP=m
CONFIG_TOUCHSCREEN_RM_TS=m
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
CONFIG_TOUCHSCREEN_STMFTS=m
CONFIG_TOUCHSCREEN_STMPE=m
CONFIG_TOUCHSCREEN_SUN4I=m
CONFIG_TOUCHSCREEN_SUR40=m
CONFIG_TOUCHSCREEN_SURFACE3_SPI=m
CONFIG_TOUCHSCREEN_SX8654=m
CONFIG_TOUCHSCREEN_TPS6507X=m
CONFIG_TOUCHSCREEN_ZET6223=m
CONFIG_TOUCHSCREEN_ZFORCE=m
CONFIG_TOUCHSCREEN_COLIBRI_VF50=m
CONFIG_TOUCHSCREEN_ROHM_BU21023=m
CONFIG_TOUCHSCREEN_IQS5XX=m
CONFIG_TOUCHSCREEN_ZINITIX=m
CONFIG_INPUT_MISC=y
CONFIG_INPUT_88PM80X_ONKEY=m
CONFIG_INPUT_AD714X=m
CONFIG_INPUT_AD714X_I2C=m
CONFIG_INPUT_AD714X_SPI=m
CONFIG_INPUT_ARIEL_PWRBUTTON=m
CONFIG_INPUT_ARIZONA_HAPTICS=m
CONFIG_INPUT_ATC260X_ONKEY=m
CONFIG_INPUT_ATMEL_CAPTOUCH=m
CONFIG_INPUT_BMA150=m
CONFIG_INPUT_E3X0_BUTTON=m
CONFIG_INPUT_PM8941_PWRKEY=m
CONFIG_INPUT_PM8XXX_VIBRATOR=m
CONFIG_INPUT_PMIC8XXX_PWRKEY=m
CONFIG_INPUT_M68K_BEEP=m
CONFIG_INPUT_MAX77650_ONKEY=m
CONFIG_INPUT_MAX77693_HAPTIC=m
CONFIG_INPUT_MC13783_PWRBUTTON=m
CONFIG_INPUT_MMA8450=m
CONFIG_INPUT_GPIO_BEEPER=m
CONFIG_INPUT_GPIO_DECODER=m
CONFIG_INPUT_GPIO_VIBRA=m
CONFIG_INPUT_CPCAP_PWRBUTTON=m
CONFIG_INPUT_ATI_REMOTE2=m
CONFIG_INPUT_KEYSPAN_REMOTE=m
CONFIG_INPUT_KXTJ9=m
CONFIG_INPUT_POWERMATE=m
CONFIG_INPUT_YEALINK=m
CONFIG_INPUT_CM109=m
CONFIG_INPUT_REGULATOR_HAPTIC=m
CONFIG_INPUT_RETU_PWRBUTTON=m
CONFIG_INPUT_TPS65218_PWRBUTTON=m
CONFIG_INPUT_AXP20X_PEK=m
CONFIG_INPUT_UINPUT=m
CONFIG_HP_SDC_RTC=m
CONFIG_INPUT_PCF50633_PMU=m
CONFIG_INPUT_PCF8574=m
CONFIG_INPUT_PWM_BEEPER=m
CONFIG_INPUT_PWM_VIBRA=m
CONFIG_INPUT_RK805_PWRKEY=m
CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
CONFIG_INPUT_DA7280_HAPTICS=m
CONFIG_INPUT_DA9052_ONKEY=m
CONFIG_INPUT_DA9063_ONKEY=m
CONFIG_INPUT_WM831X_ON=m
CONFIG_INPUT_PCAP=m
CONFIG_INPUT_ADXL34X=m
CONFIG_INPUT_ADXL34X_I2C=m
CONFIG_INPUT_ADXL34X_SPI=m
CONFIG_INPUT_IBM_PANEL=m
CONFIG_INPUT_IMS_PCU=m
CONFIG_INPUT_IQS269A=m
CONFIG_INPUT_IQS626A=m
CONFIG_INPUT_IQS7222=m
CONFIG_INPUT_CMA3000=m
CONFIG_INPUT_CMA3000_I2C=m
CONFIG_INPUT_DRV260X_HAPTICS=m
CONFIG_INPUT_DRV2665_HAPTICS=m
CONFIG_INPUT_DRV2667_HAPTICS=m
CONFIG_INPUT_HISI_POWERKEY=m
CONFIG_INPUT_RAVE_SP_PWRBUTTON=m
CONFIG_INPUT_SC27XX_VIBRA=m
CONFIG_INPUT_RT5120_PWRKEY=m
CONFIG_RMI4_CORE=m
CONFIG_RMI4_I2C=m
CONFIG_RMI4_SPI=m
CONFIG_RMI4_SMB=m
CONFIG_RMI4_F03=y
CONFIG_RMI4_F03_SERIO=m
CONFIG_RMI4_2D_SENSOR=y
CONFIG_RMI4_F11=y
CONFIG_RMI4_F12=y
CONFIG_RMI4_F30=y
CONFIG_RMI4_F34=y
CONFIG_RMI4_F3A=y
CONFIG_RMI4_F54=y
CONFIG_RMI4_F55=y

#
# Hardware I/O ports
#
CONFIG_SERIO=m
CONFIG_SERIO_SERPORT=m
CONFIG_SERIO_Q40KBD=m
CONFIG_SERIO_PARKBD=m
CONFIG_HP_SDC=m
CONFIG_HIL_MLC=m
CONFIG_SERIO_LIBPS2=m
CONFIG_SERIO_RAW=m
CONFIG_SERIO_ALTERA_PS2=m
CONFIG_SERIO_PS2MULT=m
CONFIG_SERIO_ARC_PS2=m
CONFIG_SERIO_APBPS2=m
CONFIG_SERIO_OLPC_APSP=m
CONFIG_SERIO_SUN4I_PS2=m
CONFIG_SERIO_GPIO_PS2=m
CONFIG_USERIO=m
CONFIG_GAMEPORT=m
CONFIG_GAMEPORT_NS558=m
CONFIG_GAMEPORT_L4=m
# end of Hardware I/O ports
# end of Input device support

#
# Character devices
#
CONFIG_TTY=y
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_VT_HW_CONSOLE_BINDING=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
CONFIG_LDISC_AUTOLOAD=y

#
# Serial drivers
#
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=m
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
CONFIG_SERIAL_8250_PNP=y
CONFIG_SERIAL_8250_16550A_VARIANTS=y
CONFIG_SERIAL_8250_FINTEK=y
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_HP300=m
CONFIG_SERIAL_8250_CS=m
CONFIG_SERIAL_8250_MEN_MCB=m
CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_FOURPORT=m
CONFIG_SERIAL_8250_ACCENT=m
CONFIG_SERIAL_8250_ASPEED_VUART=m
CONFIG_SERIAL_8250_BOCA=m
CONFIG_SERIAL_8250_EXAR_ST16C554=m
CONFIG_SERIAL_8250_HUB6=m
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_8250_DWLIB=y
CONFIG_SERIAL_8250_BCM2835AUX=m
CONFIG_SERIAL_8250_DW=m
CONFIG_SERIAL_8250_EM=m
CONFIG_SERIAL_8250_IOC3=m
CONFIG_SERIAL_8250_RT288X=y
CONFIG_SERIAL_8250_OMAP=m
CONFIG_SERIAL_8250_LPC18XX=m
CONFIG_SERIAL_8250_MT6577=m
CONFIG_SERIAL_8250_UNIPHIER=m
CONFIG_SERIAL_8250_INGENIC=m
CONFIG_SERIAL_8250_PXA=m
CONFIG_SERIAL_8250_TEGRA=m
CONFIG_SERIAL_8250_BCM7271=m
CONFIG_SERIAL_OF_PLATFORM=m

#
# Non-8250 serial port support
#
CONFIG_SERIAL_AMBA_PL010=m
CONFIG_SERIAL_ATMEL=y
CONFIG_SERIAL_ATMEL_CONSOLE=y
CONFIG_SERIAL_ATMEL_PDC=y
CONFIG_SERIAL_ATMEL_TTYAT=y
CONFIG_SERIAL_MESON=m
CONFIG_SERIAL_MESON_CONSOLE=y
CONFIG_SERIAL_CLPS711X=m
CONFIG_SERIAL_SAMSUNG=m
CONFIG_SERIAL_SAMSUNG_UARTS_4=y
CONFIG_SERIAL_SAMSUNG_UARTS=4
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
CONFIG_SERIAL_TEGRA=m
CONFIG_SERIAL_TEGRA_TCU=m
CONFIG_SERIAL_MAX3100=m
CONFIG_SERIAL_MAX310X=m
CONFIG_SERIAL_IMX=m
CONFIG_SERIAL_IMX_CONSOLE=m
CONFIG_SERIAL_IMX_EARLYCON=y
CONFIG_SERIAL_UARTLITE=m
CONFIG_SERIAL_UARTLITE_NR_UARTS=1
CONFIG_SERIAL_SH_SCI=m
CONFIG_SERIAL_SH_SCI_NR_UARTS=2
CONFIG_SERIAL_SH_SCI_DMA=y
CONFIG_SERIAL_HS_LPC32XX=m
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_PMACZILOG=m
CONFIG_SERIAL_PMACZILOG_TTYS=y
CONFIG_SERIAL_MSM=m
CONFIG_SERIAL_QCOM_GENI=m
CONFIG_SERIAL_QCOM_GENI_CONSOLE=y
CONFIG_SERIAL_VT8500=y
CONFIG_SERIAL_VT8500_CONSOLE=y
CONFIG_SERIAL_OMAP=m
CONFIG_SERIAL_SIFIVE=m
CONFIG_SERIAL_LANTIQ=m
CONFIG_SERIAL_QE=m
CONFIG_SERIAL_SCCNXP=m
CONFIG_SERIAL_SC16IS7XX_CORE=m
CONFIG_SERIAL_SC16IS7XX=m
CONFIG_SERIAL_SC16IS7XX_I2C=y
CONFIG_SERIAL_SC16IS7XX_SPI=y
CONFIG_SERIAL_TIMBERDALE=m
CONFIG_SERIAL_BCM63XX=m
CONFIG_SERIAL_ALTERA_JTAGUART=m
CONFIG_SERIAL_ALTERA_UART=m
CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4
CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200
CONFIG_SERIAL_MXS_AUART=m
CONFIG_SERIAL_XILINX_PS_UART=m
CONFIG_SERIAL_MPS2_UART_CONSOLE=y
CONFIG_SERIAL_MPS2_UART=y
CONFIG_SERIAL_ARC=m
CONFIG_SERIAL_ARC_NR_PORTS=1
CONFIG_SERIAL_FSL_LPUART=m
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_SERIAL_FSL_LINFLEXUART=m
CONFIG_SERIAL_CONEXANT_DIGICOLOR=m
CONFIG_SERIAL_ST_ASC=m
CONFIG_SERIAL_MEN_Z135=m
CONFIG_SERIAL_SPRD=m
CONFIG_SERIAL_STM32=m
CONFIG_SERIAL_MVEBU_UART=y
CONFIG_SERIAL_MVEBU_CONSOLE=y
CONFIG_SERIAL_OWL=m
CONFIG_SERIAL_RDA=y
CONFIG_SERIAL_RDA_CONSOLE=y
CONFIG_SERIAL_MILBEAUT_USIO=m
CONFIG_SERIAL_MILBEAUT_USIO_PORTS=4
CONFIG_SERIAL_LITEUART=m
CONFIG_SERIAL_LITEUART_MAX_PORTS=1
CONFIG_SERIAL_SUNPLUS=m
CONFIG_SERIAL_SUNPLUS_CONSOLE=y
# end of Serial drivers

CONFIG_SERIAL_MCTRL_GPIO=y
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_MOXA_INTELLIO=m
CONFIG_N_HDLC=m
CONFIG_GOLDFISH_TTY=y
CONFIG_GOLDFISH_TTY_EARLY_CONSOLE=y
CONFIG_N_GSM=m
CONFIG_NULL_TTY=m
CONFIG_HVC_DRIVER=y
CONFIG_RPMSG_TTY=m
CONFIG_SERIAL_DEV_BUS=m
CONFIG_TTY_PRINTK=m
CONFIG_TTY_PRINTK_LEVEL=6
CONFIG_PRINTER=m
CONFIG_LP_CONSOLE=y
CONFIG_PPDEV=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_IPMI_HANDLER=m
CONFIG_IPMI_PLAT_DATA=y
CONFIG_IPMI_PANIC_EVENT=y
CONFIG_IPMI_PANIC_STRING=y
CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_IPMB=m
CONFIG_IPMI_WATCHDOG=m
CONFIG_IPMI_POWEROFF=m
CONFIG_IPMI_KCS_BMC=m
CONFIG_ASPEED_KCS_IPMI_BMC=m
CONFIG_NPCM7XX_KCS_IPMI_BMC=m
CONFIG_IPMI_KCS_BMC_CDEV_IPMI=m
CONFIG_IPMI_KCS_BMC_SERIO=m
CONFIG_ASPEED_BT_IPMI_BMC=m
CONFIG_IPMB_DEVICE_INTERFACE=m
CONFIG_HW_RANDOM=m
CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_ATMEL=m
CONFIG_HW_RANDOM_BA431=m
CONFIG_HW_RANDOM_BCM2835=m
CONFIG_HW_RANDOM_IPROC_RNG200=m
CONFIG_HW_RANDOM_IXP4XX=m
CONFIG_HW_RANDOM_OMAP=m
CONFIG_HW_RANDOM_OMAP3_ROM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM_IMX_RNGC=m
CONFIG_HW_RANDOM_NOMADIK=m
CONFIG_HW_RANDOM_STM32=m
CONFIG_HW_RANDOM_POLARFIRE_SOC=m
CONFIG_HW_RANDOM_MESON=m
CONFIG_HW_RANDOM_MTK=m
CONFIG_HW_RANDOM_EXYNOS=m
CONFIG_HW_RANDOM_NPCM=m
CONFIG_HW_RANDOM_KEYSTONE=m
CONFIG_HW_RANDOM_CCTRNG=m
CONFIG_HW_RANDOM_XIPHERA=m
CONFIG_DTLK=m

#
# PCMCIA character devices
#
CONFIG_SYNCLINK_CS=m
CONFIG_CARDMAN_4000=m
CONFIG_CARDMAN_4040=m
CONFIG_SCR24X=m
CONFIG_IPWIRELESS=m
# end of PCMCIA character devices

CONFIG_DEVMEM=y
CONFIG_NVRAM=m
CONFIG_DEVPORT=y
CONFIG_TCG_TPM=y
CONFIG_TCG_TIS_CORE=m
CONFIG_TCG_TIS=m
CONFIG_TCG_TIS_SPI=m
CONFIG_TCG_TIS_SPI_CR50=y
CONFIG_TCG_TIS_I2C=m
CONFIG_TCG_TIS_SYNQUACER=m
CONFIG_TCG_TIS_I2C_CR50=m
CONFIG_TCG_TIS_I2C_ATMEL=m
CONFIG_TCG_TIS_I2C_INFINEON=m
CONFIG_TCG_TIS_I2C_NUVOTON=m
CONFIG_TCG_INFINEON=m
CONFIG_TCG_VTPM_PROXY=m
CONFIG_TCG_TIS_ST33ZP24=m
CONFIG_TCG_TIS_ST33ZP24_I2C=m
CONFIG_TCG_TIS_ST33ZP24_SPI=m
CONFIG_XILLYBUS_CLASS=m
CONFIG_XILLYBUS=m
CONFIG_XILLYBUS_OF=m
CONFIG_XILLYUSB=m
CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RANDOM_TRUST_BOOTLOADER=y
# end of Character devices

#
# I2C support
#
CONFIG_I2C=m
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=m
CONFIG_I2C_MUX=m

#
# Multiplexer I2C Chip support
#
CONFIG_I2C_ARB_GPIO_CHALLENGE=m
CONFIG_I2C_MUX_GPIO=m
CONFIG_I2C_MUX_GPMUX=m
CONFIG_I2C_MUX_LTC4306=m
CONFIG_I2C_MUX_PCA9541=m
CONFIG_I2C_MUX_PCA954x=m
CONFIG_I2C_MUX_PINCTRL=m
CONFIG_I2C_MUX_REG=m
CONFIG_I2C_DEMUX_PINCTRL=m
CONFIG_I2C_MUX_MLXCPLD=m
# end of Multiplexer I2C Chip support

CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_SMBUS=m
CONFIG_I2C_ALGOBIT=m
CONFIG_I2C_ALGOPCF=m
CONFIG_I2C_ALGOPCA=m

#
# I2C Hardware Bus support
#
CONFIG_I2C_HIX5HD2=m

#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
CONFIG_I2C_ALTERA=m
CONFIG_I2C_ASPEED=m
CONFIG_I2C_AT91=m
CONFIG_I2C_AT91_SLAVE_EXPERIMENTAL=m
CONFIG_I2C_AXXIA=m
CONFIG_I2C_BCM2835=m
CONFIG_I2C_BCM_IPROC=m
CONFIG_I2C_BCM_KONA=m
CONFIG_I2C_BRCMSTB=m
CONFIG_I2C_CADENCE=m
CONFIG_I2C_CBUS_GPIO=m
CONFIG_I2C_DAVINCI=m
CONFIG_I2C_DESIGNWARE_CORE=m
CONFIG_I2C_DESIGNWARE_SLAVE=y
CONFIG_I2C_DESIGNWARE_PLATFORM=m
CONFIG_I2C_DIGICOLOR=m
CONFIG_I2C_EMEV2=m
CONFIG_I2C_EXYNOS5=m
CONFIG_I2C_GPIO=m
CONFIG_I2C_GPIO_FAULT_INJECTOR=y
CONFIG_I2C_HIGHLANDER=m
CONFIG_I2C_HISI=m
CONFIG_I2C_IMG=m
CONFIG_I2C_IMX=m
CONFIG_I2C_IMX_LPI2C=m
CONFIG_I2C_IOP3XX=m
CONFIG_I2C_JZ4780=m
CONFIG_I2C_KEMPLD=m
CONFIG_I2C_LPC2K=m
CONFIG_I2C_MESON=m
CONFIG_I2C_MICROCHIP_CORE=m
CONFIG_I2C_MT65XX=m
CONFIG_I2C_MT7621=m
CONFIG_I2C_MV64XXX=m
CONFIG_I2C_MXS=m
CONFIG_I2C_NPCM=m
CONFIG_I2C_OCORES=m
CONFIG_I2C_OMAP=m
CONFIG_I2C_OWL=m
CONFIG_I2C_APPLE=m
CONFIG_I2C_PCA_PLATFORM=m
CONFIG_I2C_PNX=m
CONFIG_I2C_PXA=m
CONFIG_I2C_PXA_SLAVE=y
CONFIG_I2C_QCOM_CCI=m
CONFIG_I2C_QCOM_GENI=m
CONFIG_I2C_QUP=m
CONFIG_I2C_RIIC=m
CONFIG_I2C_RK3X=m
CONFIG_I2C_RZV2M=m
CONFIG_I2C_S3C2410=m
CONFIG_I2C_SH_MOBILE=m
CONFIG_I2C_SIMTEC=m
CONFIG_I2C_ST=m
CONFIG_I2C_STM32F4=m
CONFIG_I2C_STM32F7=m
CONFIG_I2C_SUN6I_P2WI=m
CONFIG_I2C_SYNQUACER=m
CONFIG_I2C_TEGRA=m
CONFIG_I2C_TEGRA_BPMP=m
CONFIG_I2C_UNIPHIER=m
CONFIG_I2C_UNIPHIER_F=m
CONFIG_I2C_VERSATILE=m
CONFIG_I2C_WMT=m
CONFIG_I2C_XILINX=m
CONFIG_I2C_XLP9XX=m
CONFIG_I2C_RCAR=m

#
# External I2C/SMBus adapter drivers
#
CONFIG_I2C_DIOLAN_U2C=m
CONFIG_I2C_DLN2=m
CONFIG_I2C_CP2615=m
CONFIG_I2C_PARPORT=m
CONFIG_I2C_ROBOTFUZZ_OSIF=m
CONFIG_I2C_TAOS_EVM=m
CONFIG_I2C_TINY_USB=m
CONFIG_I2C_VIPERBOARD=m

#
# Other I2C/SMBus bus drivers
#
CONFIG_I2C_ICY=m
CONFIG_I2C_MLXCPLD=m
CONFIG_I2C_PCA_ISA=m
CONFIG_I2C_CROS_EC_TUNNEL=m
CONFIG_I2C_FSI=m
CONFIG_I2C_VIRTIO=m
# end of I2C Hardware Bus support

CONFIG_I2C_STUB=m
CONFIG_I2C_SLAVE=y
CONFIG_I2C_SLAVE_EEPROM=m
CONFIG_I2C_SLAVE_TESTUNIT=m
CONFIG_I2C_DEBUG_CORE=y
CONFIG_I2C_DEBUG_ALGO=y
CONFIG_I2C_DEBUG_BUS=y
# end of I2C support

CONFIG_I3C=m
CONFIG_CDNS_I3C_MASTER=m
CONFIG_DW_I3C_MASTER=m
CONFIG_SVC_I3C_MASTER=m
CONFIG_MIPI_I3C_HCI=m
CONFIG_SPI=y
CONFIG_SPI_DEBUG=y
CONFIG_SPI_MASTER=y
CONFIG_SPI_MEM=y

#
# SPI Master Controller Drivers
#
CONFIG_SPI_ALTERA=m
CONFIG_SPI_ALTERA_CORE=m
CONFIG_SPI_ALTERA_DFL=m
CONFIG_SPI_AR934X=m
CONFIG_SPI_ATH79=m
CONFIG_SPI_ARMADA_3700=m
CONFIG_SPI_ASPEED_SMC=m
CONFIG_SPI_ATMEL=m
CONFIG_SPI_AT91_USART=m
CONFIG_SPI_ATMEL_QUADSPI=m
CONFIG_SPI_AXI_SPI_ENGINE=m
CONFIG_SPI_BCM2835=m
CONFIG_SPI_BCM2835AUX=m
CONFIG_SPI_BCM63XX=m
CONFIG_SPI_BCM63XX_HSSPI=m
CONFIG_SPI_BCM_QSPI=m
CONFIG_SPI_BITBANG=m
CONFIG_SPI_BUTTERFLY=m
CONFIG_SPI_CADENCE=m
CONFIG_SPI_CADENCE_QUADSPI=m
CONFIG_SPI_CADENCE_XSPI=m
CONFIG_SPI_CLPS711X=m
CONFIG_SPI_DESIGNWARE=m
CONFIG_SPI_DW_DMA=y
CONFIG_SPI_DW_MMIO=m
CONFIG_SPI_DW_BT1=m
CONFIG_SPI_DW_BT1_DIRMAP=y
CONFIG_SPI_DLN2=m
CONFIG_SPI_EP93XX=m
CONFIG_SPI_FSI=m
CONFIG_SPI_FSL_LPSPI=m
CONFIG_SPI_FSL_QUADSPI=m
CONFIG_SPI_GXP=m
CONFIG_SPI_HISI_KUNPENG=m
CONFIG_SPI_HISI_SFC_V3XX=m
CONFIG_SPI_NXP_FLEXSPI=m
CONFIG_SPI_GPIO=m
CONFIG_SPI_IMG_SPFI=m
CONFIG_SPI_IMX=m
CONFIG_SPI_INGENIC=m
CONFIG_SPI_INTEL=m
CONFIG_SPI_INTEL_PLATFORM=m
CONFIG_SPI_JCORE=m
CONFIG_SPI_LM70_LLP=m
CONFIG_SPI_LP8841_RTC=m
CONFIG_SPI_FSL_LIB=m
CONFIG_SPI_FSL_SPI=m
CONFIG_SPI_FSL_DSPI=m
CONFIG_SPI_MESON_SPICC=m
CONFIG_SPI_MESON_SPIFC=m
CONFIG_SPI_MICROCHIP_CORE=m
CONFIG_SPI_MICROCHIP_CORE_QSPI=m
CONFIG_SPI_MT65XX=m
CONFIG_SPI_MT7621=m
CONFIG_SPI_MTK_NOR=m
CONFIG_SPI_MTK_SNFI=m
CONFIG_SPI_NPCM_FIU=m
CONFIG_SPI_NPCM_PSPI=m
CONFIG_SPI_LANTIQ_SSC=m
CONFIG_SPI_OC_TINY=m
CONFIG_SPI_OMAP24XX=m
CONFIG_SPI_TI_QSPI=m
CONFIG_SPI_OMAP_100K=m
CONFIG_SPI_ORION=m
CONFIG_SPI_PIC32=m
CONFIG_SPI_PIC32_SQI=m
CONFIG_SPI_PXA2XX=m
CONFIG_SPI_ROCKCHIP=m
CONFIG_SPI_ROCKCHIP_SFC=m
CONFIG_SPI_RPCIF=m
CONFIG_SPI_RSPI=m
CONFIG_SPI_QUP=m
CONFIG_SPI_QCOM_GENI=m
CONFIG_SPI_S3C64XX=m
CONFIG_SPI_SC18IS602=m
CONFIG_SPI_SH_MSIOF=m
CONFIG_SPI_SH=m
CONFIG_SPI_SH_HSPI=m
CONFIG_SPI_SIFIVE=m
CONFIG_SPI_SLAVE_MT27XX=m
CONFIG_SPI_SPRD=m
CONFIG_SPI_SPRD_ADI=m
CONFIG_SPI_STM32=m
CONFIG_SPI_STM32_QSPI=m
CONFIG_SPI_ST_SSC4=m
CONFIG_SPI_SUN4I=m
CONFIG_SPI_SUN6I=m
CONFIG_SPI_SUNPLUS_SP7021=m
CONFIG_SPI_SYNQUACER=m
CONFIG_SPI_MXIC=m
CONFIG_SPI_TEGRA210_QUAD=m
CONFIG_SPI_TEGRA114=m
CONFIG_SPI_TEGRA20_SFLASH=m
CONFIG_SPI_TEGRA20_SLINK=m
CONFIG_SPI_UNIPHIER=m
CONFIG_SPI_XCOMM=m
CONFIG_SPI_XILINX=m
CONFIG_SPI_XLP=m
CONFIG_SPI_XTENSA_XTFPGA=m
CONFIG_SPI_ZYNQ_QSPI=m
CONFIG_SPI_ZYNQMP_GQSPI=m
CONFIG_SPI_AMD=m

#
# SPI Multiplexer support
#
CONFIG_SPI_MUX=m

#
# SPI Protocol Masters
#
CONFIG_SPI_SPIDEV=m
CONFIG_SPI_LOOPBACK_TEST=m
CONFIG_SPI_TLE62X0=m
CONFIG_SPI_SLAVE=y
CONFIG_SPI_SLAVE_TIME=m
CONFIG_SPI_SLAVE_SYSTEM_CONTROL=m
CONFIG_SPI_DYNAMIC=y
CONFIG_SPMI=m
CONFIG_SPMI_HISI3670=m
CONFIG_SPMI_MSM_PMIC_ARB=m
CONFIG_SPMI_MTK_PMIF=m
CONFIG_HSI=m
CONFIG_HSI_BOARDINFO=y

#
# HSI controllers
#

#
# HSI clients
#
CONFIG_HSI_CHAR=m
CONFIG_PPS=m
CONFIG_PPS_DEBUG=y

#
# PPS clients support
#
CONFIG_PPS_CLIENT_KTIMER=m
CONFIG_PPS_CLIENT_LDISC=m
CONFIG_PPS_CLIENT_PARPORT=m
CONFIG_PPS_CLIENT_GPIO=m

#
# PPS generators support
#

#
# PTP clock support
#
CONFIG_PTP_1588_CLOCK=m
CONFIG_PTP_1588_CLOCK_OPTIONAL=m
CONFIG_PTP_1588_CLOCK_DTE=m
CONFIG_PTP_1588_CLOCK_QORIQ=m
CONFIG_DP83640_PHY=m
CONFIG_PTP_1588_CLOCK_INES=m
CONFIG_PTP_1588_CLOCK_IDT82P33=m
CONFIG_PTP_1588_CLOCK_IDTCM=m
# end of PTP clock support

CONFIG_PINCTRL=y
CONFIG_GENERIC_PINCTRL_GROUPS=y
CONFIG_PINMUX=y
CONFIG_GENERIC_PINMUX_FUNCTIONS=y
CONFIG_PINCONF=y
CONFIG_GENERIC_PINCONF=y
CONFIG_DEBUG_PINCTRL=y
CONFIG_PINCTRL_AMD=y
CONFIG_PINCTRL_AT91PIO4=y
CONFIG_PINCTRL_AXP209=m
CONFIG_PINCTRL_BM1880=y
CONFIG_PINCTRL_CY8C95X0=m
CONFIG_PINCTRL_DA850_PUPD=m
CONFIG_PINCTRL_DA9062=m
CONFIG_PINCTRL_EQUILIBRIUM=m
CONFIG_PINCTRL_INGENIC=y
CONFIG_PINCTRL_LPC18XX=y
CONFIG_PINCTRL_MCP23S08_I2C=m
CONFIG_PINCTRL_MCP23S08_SPI=m
CONFIG_PINCTRL_MCP23S08=m
CONFIG_PINCTRL_MICROCHIP_SGPIO=m
CONFIG_PINCTRL_OCELOT=m
CONFIG_PINCTRL_PISTACHIO=y
CONFIG_PINCTRL_RK805=m
CONFIG_PINCTRL_ROCKCHIP=m
CONFIG_PINCTRL_SINGLE=m
CONFIG_PINCTRL_STMFX=m
CONFIG_PINCTRL_OWL=y
CONFIG_PINCTRL_S500=y
CONFIG_PINCTRL_S700=y
CONFIG_PINCTRL_S900=y
CONFIG_PINCTRL_ASPEED=y
CONFIG_PINCTRL_ASPEED_G4=y
CONFIG_PINCTRL_ASPEED_G5=y
CONFIG_PINCTRL_ASPEED_G6=y
CONFIG_PINCTRL_BCM281XX=y
CONFIG_PINCTRL_BCM2835=m
CONFIG_PINCTRL_BCM4908=m
CONFIG_PINCTRL_BCM63XX=y
CONFIG_PINCTRL_BCM6318=y
CONFIG_PINCTRL_BCM6328=y
CONFIG_PINCTRL_BCM6358=y
CONFIG_PINCTRL_BCM6362=y
CONFIG_PINCTRL_BCM6368=y
CONFIG_PINCTRL_BCM63268=y
CONFIG_PINCTRL_IPROC_GPIO=y
CONFIG_PINCTRL_CYGNUS_MUX=y
CONFIG_PINCTRL_NS=y
CONFIG_PINCTRL_NSP_GPIO=y
CONFIG_PINCTRL_NS2_MUX=y
CONFIG_PINCTRL_NSP_MUX=y
CONFIG_PINCTRL_BERLIN=y
CONFIG_PINCTRL_AS370=y
CONFIG_PINCTRL_BERLIN_BG4CT=y
CONFIG_PINCTRL_MADERA=m
CONFIG_PINCTRL_CS47L15=y
CONFIG_PINCTRL_CS47L35=y
CONFIG_PINCTRL_CS47L85=y
CONFIG_PINCTRL_CS47L90=y
CONFIG_PINCTRL_CS47L92=y
CONFIG_PINCTRL_IMX=m
CONFIG_PINCTRL_IMX8MM=m
CONFIG_PINCTRL_IMX8MN=m
CONFIG_PINCTRL_IMX8MP=m
CONFIG_PINCTRL_IMX8MQ=m

#
# Intel pinctrl drivers
#
# end of Intel pinctrl drivers

#
# MediaTek pinctrl drivers
#
CONFIG_EINT_MTK=y
CONFIG_PINCTRL_MTK=y
CONFIG_PINCTRL_MTK_V2=y
CONFIG_PINCTRL_MTK_MOORE=y
CONFIG_PINCTRL_MTK_PARIS=y
CONFIG_PINCTRL_MT2701=y
CONFIG_PINCTRL_MT7623=y
CONFIG_PINCTRL_MT7629=y
CONFIG_PINCTRL_MT8135=y
CONFIG_PINCTRL_MT8127=y
CONFIG_PINCTRL_MT2712=y
CONFIG_PINCTRL_MT6765=m
CONFIG_PINCTRL_MT6779=m
CONFIG_PINCTRL_MT6795=y
CONFIG_PINCTRL_MT6797=y
CONFIG_PINCTRL_MT7622=y
CONFIG_PINCTRL_MT7986=y
CONFIG_PINCTRL_MT8167=y
CONFIG_PINCTRL_MT8173=y
CONFIG_PINCTRL_MT8183=y
CONFIG_PINCTRL_MT8186=y
CONFIG_PINCTRL_MT8188=y
CONFIG_PINCTRL_MT8192=y
CONFIG_PINCTRL_MT8195=y
CONFIG_PINCTRL_MT8365=y
CONFIG_PINCTRL_MT8516=y
CONFIG_PINCTRL_MT6397=y
# end of MediaTek pinctrl drivers

CONFIG_PINCTRL_MESON=m
CONFIG_PINCTRL_WPCM450=m
CONFIG_PINCTRL_NPCM7XX=y
CONFIG_PINCTRL_PXA=y
CONFIG_PINCTRL_PXA25X=m
CONFIG_PINCTRL_PXA27X=m
CONFIG_PINCTRL_MSM=m
CONFIG_PINCTRL_APQ8064=m
CONFIG_PINCTRL_APQ8084=m
CONFIG_PINCTRL_IPQ4019=m
CONFIG_PINCTRL_IPQ8064=m
CONFIG_PINCTRL_IPQ8074=m
CONFIG_PINCTRL_IPQ6018=m
CONFIG_PINCTRL_MSM8226=m
CONFIG_PINCTRL_MSM8660=m
CONFIG_PINCTRL_MSM8960=m
CONFIG_PINCTRL_MDM9607=m
CONFIG_PINCTRL_MDM9615=m
CONFIG_PINCTRL_MSM8X74=m
CONFIG_PINCTRL_MSM8909=m
CONFIG_PINCTRL_MSM8916=m
CONFIG_PINCTRL_MSM8953=m
CONFIG_PINCTRL_MSM8976=m
CONFIG_PINCTRL_MSM8994=m
CONFIG_PINCTRL_MSM8996=m
CONFIG_PINCTRL_MSM8998=m
CONFIG_PINCTRL_QCM2290=m
CONFIG_PINCTRL_QCS404=m
CONFIG_PINCTRL_QCOM_SPMI_PMIC=m
CONFIG_PINCTRL_QCOM_SSBI_PMIC=m
CONFIG_PINCTRL_SC7180=m
CONFIG_PINCTRL_SC7280=m
CONFIG_PINCTRL_SC7280_LPASS_LPI=m
CONFIG_PINCTRL_SC8180X=m
CONFIG_PINCTRL_SC8280XP=m
CONFIG_PINCTRL_SDM660=m
CONFIG_PINCTRL_SDM845=m
CONFIG_PINCTRL_SDX55=m
CONFIG_PINCTRL_SM6115=m
CONFIG_PINCTRL_SM6125=m
CONFIG_PINCTRL_SM6350=m
CONFIG_PINCTRL_SM6375=m
CONFIG_PINCTRL_SDX65=m
CONFIG_PINCTRL_SM8150=m
CONFIG_PINCTRL_SM8250=m
CONFIG_PINCTRL_SM8250_LPASS_LPI=m
CONFIG_PINCTRL_SM8350=m
CONFIG_PINCTRL_SM8450=m
CONFIG_PINCTRL_SM8450_LPASS_LPI=m
CONFIG_PINCTRL_SC8280XP_LPASS_LPI=m
CONFIG_PINCTRL_LPASS_LPI=m

#
# Renesas pinctrl drivers
#
CONFIG_PINCTRL_RENESAS=y
CONFIG_PINCTRL_SH_PFC=y
CONFIG_PINCTRL_SH_PFC_GPIO=y
CONFIG_PINCTRL_SH_FUNC_GPIO=y
CONFIG_PINCTRL_PFC_EMEV2=y
CONFIG_PINCTRL_PFC_R8A77995=y
CONFIG_PINCTRL_PFC_R8A7794=y
CONFIG_PINCTRL_PFC_R8A77990=y
CONFIG_PINCTRL_PFC_R8A7779=y
CONFIG_PINCTRL_PFC_R8A7790=y
CONFIG_PINCTRL_PFC_R8A77950=y
CONFIG_PINCTRL_PFC_R8A77951=y
CONFIG_PINCTRL_PFC_R8A7778=y
CONFIG_PINCTRL_PFC_R8A7793=y
CONFIG_PINCTRL_PFC_R8A7791=y
CONFIG_PINCTRL_PFC_R8A77965=y
CONFIG_PINCTRL_PFC_R8A77960=y
CONFIG_PINCTRL_PFC_R8A77961=y
CONFIG_PINCTRL_PFC_R8A779F0=y
CONFIG_PINCTRL_PFC_R8A7792=y
CONFIG_PINCTRL_PFC_R8A77980=y
CONFIG_PINCTRL_PFC_R8A77970=y
CONFIG_PINCTRL_PFC_R8A779A0=y
CONFIG_PINCTRL_PFC_R8A779G0=y
CONFIG_PINCTRL_PFC_R8A7740=y
CONFIG_PINCTRL_PFC_R8A73A4=y
CONFIG_PINCTRL_RZA1=y
CONFIG_PINCTRL_RZA2=y
CONFIG_PINCTRL_RZG2L=y
CONFIG_PINCTRL_PFC_R8A77470=y
CONFIG_PINCTRL_PFC_R8A7745=y
CONFIG_PINCTRL_PFC_R8A7742=y
CONFIG_PINCTRL_PFC_R8A7743=y
CONFIG_PINCTRL_PFC_R8A7744=y
CONFIG_PINCTRL_PFC_R8A774C0=y
CONFIG_PINCTRL_PFC_R8A774E1=y
CONFIG_PINCTRL_PFC_R8A774A1=y
CONFIG_PINCTRL_PFC_R8A774B1=y
CONFIG_PINCTRL_RZN1=y
CONFIG_PINCTRL_RZV2M=y
CONFIG_PINCTRL_PFC_SH7203=y
CONFIG_PINCTRL_PFC_SH7264=y
CONFIG_PINCTRL_PFC_SH7269=y
CONFIG_PINCTRL_PFC_SH7720=y
CONFIG_PINCTRL_PFC_SH7722=y
CONFIG_PINCTRL_PFC_SH7734=y
CONFIG_PINCTRL_PFC_SH7757=y
CONFIG_PINCTRL_PFC_SH7785=y
CONFIG_PINCTRL_PFC_SH7786=y
CONFIG_PINCTRL_PFC_SH73A0=y
CONFIG_PINCTRL_PFC_SH7723=y
CONFIG_PINCTRL_PFC_SH7724=y
CONFIG_PINCTRL_PFC_SHX3=y
# end of Renesas pinctrl drivers

CONFIG_PINCTRL_SAMSUNG=y
CONFIG_PINCTRL_EXYNOS=y
CONFIG_PINCTRL_EXYNOS_ARM=y
CONFIG_PINCTRL_EXYNOS_ARM64=y
CONFIG_PINCTRL_S3C24XX=y
CONFIG_PINCTRL_S3C64XX=y
CONFIG_PINCTRL_SPRD=m
CONFIG_PINCTRL_SPRD_SC9860=m
CONFIG_PINCTRL_STARFIVE_JH7100=m
CONFIG_PINCTRL_STM32=y
CONFIG_PINCTRL_STM32F429=y
CONFIG_PINCTRL_STM32F469=y
CONFIG_PINCTRL_STM32F746=y
CONFIG_PINCTRL_STM32F769=y
CONFIG_PINCTRL_STM32H743=y
CONFIG_PINCTRL_STM32MP135=y
CONFIG_PINCTRL_STM32MP157=y
CONFIG_PINCTRL_TI_IODELAY=m
CONFIG_PINCTRL_UNIPHIER=y
CONFIG_PINCTRL_UNIPHIER_LD4=y
CONFIG_PINCTRL_UNIPHIER_PRO4=y
CONFIG_PINCTRL_UNIPHIER_SLD8=y
CONFIG_PINCTRL_UNIPHIER_PRO5=y
CONFIG_PINCTRL_UNIPHIER_PXS2=y
CONFIG_PINCTRL_UNIPHIER_LD6B=y
CONFIG_PINCTRL_UNIPHIER_LD11=y
CONFIG_PINCTRL_UNIPHIER_LD20=y
CONFIG_PINCTRL_UNIPHIER_PXS3=y
CONFIG_PINCTRL_UNIPHIER_NX1=y
CONFIG_PINCTRL_VISCONTI=y
CONFIG_PINCTRL_TMPV7700=y
CONFIG_GPIOLIB=y
CONFIG_GPIOLIB_FASTPATH_LIMIT=512
CONFIG_OF_GPIO=y
CONFIG_GPIOLIB_IRQCHIP=y
CONFIG_DEBUG_GPIO=y
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_CDEV=y
CONFIG_GPIO_CDEV_V1=y
CONFIG_GPIO_GENERIC=y
CONFIG_GPIO_REGMAP=y
CONFIG_GPIO_MAX730X=m

#
# Memory mapped GPIO drivers
#
CONFIG_GPIO_74XX_MMIO=m
CONFIG_GPIO_ALTERA=m
CONFIG_GPIO_ASPEED=m
CONFIG_GPIO_ASPEED_SGPIO=y
CONFIG_GPIO_ATH79=m
CONFIG_GPIO_RASPBERRYPI_EXP=m
CONFIG_GPIO_BCM_KONA=y
CONFIG_GPIO_BCM_XGS_IPROC=m
CONFIG_GPIO_BRCMSTB=m
CONFIG_GPIO_CADENCE=m
CONFIG_GPIO_CLPS711X=m
CONFIG_GPIO_DWAPB=m
CONFIG_GPIO_EIC_SPRD=m
CONFIG_GPIO_EM=m
CONFIG_GPIO_FTGPIO010=y
CONFIG_GPIO_GENERIC_PLATFORM=m
CONFIG_GPIO_GRGPIO=m
CONFIG_GPIO_HISI=m
CONFIG_GPIO_HLWD=m
CONFIG_GPIO_IMX_SCU=y
CONFIG_GPIO_IOP=m
CONFIG_GPIO_LOGICVC=m
CONFIG_GPIO_LPC18XX=m
CONFIG_GPIO_LPC32XX=m
CONFIG_GPIO_MB86S7X=m
CONFIG_GPIO_MENZ127=m
CONFIG_GPIO_MPC8XXX=y
CONFIG_GPIO_MT7621=y
CONFIG_GPIO_MXC=m
CONFIG_GPIO_MXS=y
CONFIG_GPIO_PMIC_EIC_SPRD=m
CONFIG_GPIO_PXA=y
CONFIG_GPIO_RCAR=m
CONFIG_GPIO_RDA=y
CONFIG_GPIO_ROCKCHIP=m
CONFIG_GPIO_SAMA5D2_PIOBU=m
CONFIG_GPIO_SIFIVE=y
CONFIG_GPIO_SIOX=m
CONFIG_GPIO_SNPS_CREG=y
CONFIG_GPIO_SPRD=m
CONFIG_GPIO_STP_XWAY=y
CONFIG_GPIO_SYSCON=m
CONFIG_GPIO_TEGRA=m
CONFIG_GPIO_TEGRA186=m
CONFIG_GPIO_TS4800=m
CONFIG_GPIO_UNIPHIER=m
CONFIG_GPIO_VISCONTI=m
CONFIG_GPIO_WCD934X=m
CONFIG_GPIO_XGENE_SB=m
CONFIG_GPIO_XILINX=m
CONFIG_GPIO_XLP=m
CONFIG_GPIO_AMD_FCH=m
CONFIG_GPIO_IDT3243X=m
# end of Memory mapped GPIO drivers

#
# I2C GPIO expanders
#
CONFIG_GPIO_ADNP=m
CONFIG_GPIO_GW_PLD=m
CONFIG_GPIO_MAX7300=m
CONFIG_GPIO_MAX732X=m
CONFIG_GPIO_PCA953X=m
CONFIG_GPIO_PCA953X_IRQ=y
CONFIG_GPIO_PCA9570=m
CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_TPIC2810=m
CONFIG_GPIO_TS4900=m
# end of I2C GPIO expanders

#
# MFD GPIO expanders
#
CONFIG_GPIO_ARIZONA=m
CONFIG_GPIO_BD9571MWV=m
CONFIG_GPIO_DA9052=m
CONFIG_GPIO_DLN2=m
CONFIG_GPIO_KEMPLD=m
CONFIG_GPIO_LP3943=m
CONFIG_GPIO_LP873X=m
CONFIG_GPIO_LP87565=m
CONFIG_GPIO_MADERA=m
CONFIG_GPIO_MAX77650=m
CONFIG_GPIO_SL28CPLD=m
CONFIG_GPIO_STMPE=y
CONFIG_GPIO_TPS65086=m
CONFIG_GPIO_TPS65218=m
CONFIG_GPIO_TPS65912=m
CONFIG_GPIO_UCB1400=m
CONFIG_GPIO_WM831X=m
CONFIG_GPIO_WM8994=m
# end of MFD GPIO expanders

#
# SPI GPIO expanders
#
CONFIG_GPIO_74X164=m
CONFIG_GPIO_MAX3191X=m
CONFIG_GPIO_MAX7301=m
CONFIG_GPIO_MC33880=m
CONFIG_GPIO_PISOSR=m
CONFIG_GPIO_XRA1403=m
CONFIG_GPIO_MOXTET=m
# end of SPI GPIO expanders

#
# USB GPIO expanders
#
CONFIG_GPIO_VIPERBOARD=m
# end of USB GPIO expanders

#
# Virtual GPIO drivers
#
CONFIG_GPIO_AGGREGATOR=m
CONFIG_GPIO_MOCKUP=m
CONFIG_GPIO_VIRTIO=m
CONFIG_GPIO_SIM=m
# end of Virtual GPIO drivers

CONFIG_W1=m
CONFIG_W1_CON=y

#
# 1-wire Bus Masters
#
CONFIG_W1_MASTER_DS2490=m
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_MXC=m
CONFIG_W1_MASTER_DS1WM=m
CONFIG_W1_MASTER_GPIO=m
CONFIG_W1_MASTER_SGI=m
# end of 1-wire Bus Masters

#
# 1-wire Slaves
#
CONFIG_W1_SLAVE_THERM=m
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_DS2405=m
CONFIG_W1_SLAVE_DS2408=m
CONFIG_W1_SLAVE_DS2408_READBACK=y
CONFIG_W1_SLAVE_DS2413=m
CONFIG_W1_SLAVE_DS2406=m
CONFIG_W1_SLAVE_DS2423=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS2430=m
CONFIG_W1_SLAVE_DS2431=m
CONFIG_W1_SLAVE_DS2433=m
CONFIG_W1_SLAVE_DS2433_CRC=y
CONFIG_W1_SLAVE_DS2438=m
CONFIG_W1_SLAVE_DS250X=m
CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS28E04=m
CONFIG_W1_SLAVE_DS28E17=m
# end of 1-wire Slaves

CONFIG_POWER_RESET=y
CONFIG_POWER_RESET_ATC260X=m
CONFIG_POWER_RESET_BRCMKONA=y
CONFIG_POWER_RESET_BRCMSTB=y
CONFIG_POWER_RESET_GEMINI_POWEROFF=y
CONFIG_POWER_RESET_GPIO=y
CONFIG_POWER_RESET_GPIO_RESTART=y
CONFIG_POWER_RESET_LINKSTATION=m
CONFIG_POWER_RESET_OCELOT_RESET=y
CONFIG_POWER_RESET_LTC2952=y
CONFIG_POWER_RESET_MT6323=y
CONFIG_POWER_RESET_REGULATOR=y
CONFIG_POWER_RESET_RESTART=y
CONFIG_POWER_RESET_TPS65086=y
CONFIG_POWER_RESET_KEYSTONE=y
CONFIG_POWER_RESET_SYSCON=y
CONFIG_POWER_RESET_SYSCON_POWEROFF=y
CONFIG_POWER_RESET_RMOBILE=m
CONFIG_REBOOT_MODE=m
CONFIG_SYSCON_REBOOT_MODE=m
CONFIG_POWER_RESET_SC27XX=m
CONFIG_NVMEM_REBOOT_MODE=m
CONFIG_POWER_SUPPLY=y
CONFIG_POWER_SUPPLY_DEBUG=y
CONFIG_PDA_POWER=m
CONFIG_GENERIC_ADC_BATTERY=m
CONFIG_IP5XXX_POWER=m
CONFIG_WM831X_BACKUP=m
CONFIG_WM831X_POWER=m
CONFIG_TEST_POWER=m
CONFIG_CHARGER_ADP5061=m
CONFIG_BATTERY_ACT8945A=m
CONFIG_BATTERY_CPCAP=m
CONFIG_BATTERY_CW2015=m
CONFIG_BATTERY_DS2760=m
CONFIG_BATTERY_DS2780=m
CONFIG_BATTERY_DS2781=m
CONFIG_BATTERY_DS2782=m
CONFIG_BATTERY_LEGO_EV3=m
CONFIG_BATTERY_OLPC=m
CONFIG_BATTERY_SAMSUNG_SDI=y
CONFIG_BATTERY_INGENIC=m
CONFIG_BATTERY_SBS=m
CONFIG_CHARGER_SBS=m
CONFIG_MANAGER_SBS=m
CONFIG_BATTERY_BQ27XXX=m
CONFIG_BATTERY_BQ27XXX_I2C=m
CONFIG_BATTERY_BQ27XXX_HDQ=m
CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM=y
CONFIG_BATTERY_DA9052=m
CONFIG_CHARGER_DA9150=m
CONFIG_BATTERY_DA9150=m
CONFIG_CHARGER_AXP20X=m
CONFIG_BATTERY_AXP20X=m
CONFIG_AXP20X_POWER=m
CONFIG_BATTERY_MAX17040=m
CONFIG_BATTERY_MAX17042=m
CONFIG_BATTERY_MAX1721X=m
CONFIG_CHARGER_PCF50633=m
CONFIG_CHARGER_CPCAP=m
CONFIG_CHARGER_ISP1704=m
CONFIG_CHARGER_MAX8903=m
CONFIG_CHARGER_LP8727=m
CONFIG_CHARGER_GPIO=m
CONFIG_CHARGER_MANAGER=m
CONFIG_CHARGER_LT3651=m
CONFIG_CHARGER_LTC4162L=m
CONFIG_CHARGER_MAX14577=m
CONFIG_CHARGER_DETECTOR_MAX14656=m
CONFIG_CHARGER_MAX77650=m
CONFIG_CHARGER_MAX77693=m
CONFIG_CHARGER_MAX77976=m
CONFIG_CHARGER_MP2629=m
CONFIG_CHARGER_MT6360=m
CONFIG_CHARGER_MT6370=m
CONFIG_CHARGER_QCOM_SMBB=m
CONFIG_CHARGER_BQ2415X=m
CONFIG_CHARGER_BQ24190=m
CONFIG_CHARGER_BQ24257=m
CONFIG_CHARGER_BQ24735=m
CONFIG_CHARGER_BQ2515X=m
CONFIG_CHARGER_BQ25890=m
CONFIG_CHARGER_BQ25980=m
CONFIG_CHARGER_BQ256XX=m
CONFIG_CHARGER_RK817=m
CONFIG_CHARGER_SMB347=m
CONFIG_CHARGER_TPS65217=m
CONFIG_BATTERY_GAUGE_LTC2941=m
CONFIG_BATTERY_GOLDFISH=m
CONFIG_BATTERY_RT5033=m
CONFIG_CHARGER_RT9455=m
CONFIG_CHARGER_CROS_USBPD=m
CONFIG_CHARGER_CROS_PCHG=m
CONFIG_CHARGER_SC2731=m
CONFIG_FUEL_GAUGE_SC27XX=m
CONFIG_CHARGER_UCS1002=m
CONFIG_CHARGER_BD99954=m
CONFIG_RN5T618_POWER=m
CONFIG_BATTERY_ACER_A500=m
CONFIG_BATTERY_UG3105=m
CONFIG_HWMON=m
CONFIG_HWMON_VID=m
CONFIG_HWMON_DEBUG_CHIP=y

#
# Native drivers
#
CONFIG_SENSORS_AD7314=m
CONFIG_SENSORS_AD7414=m
CONFIG_SENSORS_AD7418=m
CONFIG_SENSORS_ADM1025=m
CONFIG_SENSORS_ADM1026=m
CONFIG_SENSORS_ADM1029=m
CONFIG_SENSORS_ADM1031=m
CONFIG_SENSORS_ADM1177=m
CONFIG_SENSORS_ADM9240=m
CONFIG_SENSORS_ADT7X10=m
CONFIG_SENSORS_ADT7310=m
CONFIG_SENSORS_ADT7410=m
CONFIG_SENSORS_ADT7411=m
CONFIG_SENSORS_ADT7462=m
CONFIG_SENSORS_ADT7470=m
CONFIG_SENSORS_ADT7475=m
CONFIG_SENSORS_AHT10=m
CONFIG_SENSORS_AQUACOMPUTER_D5NEXT=m
CONFIG_SENSORS_AS370=m
CONFIG_SENSORS_ASC7621=m
CONFIG_SENSORS_AXI_FAN_CONTROL=m
CONFIG_SENSORS_ARM_SCMI=m
CONFIG_SENSORS_ARM_SCPI=m
CONFIG_SENSORS_ASB100=m
CONFIG_SENSORS_ASPEED=m
CONFIG_SENSORS_ATXP1=m
CONFIG_SENSORS_BT1_PVT=m
CONFIG_SENSORS_BT1_PVT_ALARMS=y
CONFIG_SENSORS_CORSAIR_CPRO=m
CONFIG_SENSORS_CORSAIR_PSU=m
CONFIG_SENSORS_DRIVETEMP=m
CONFIG_SENSORS_DS620=m
CONFIG_SENSORS_DS1621=m
CONFIG_SENSORS_DA9052_ADC=m
CONFIG_SENSORS_SPARX5=m
CONFIG_SENSORS_F71805F=m
CONFIG_SENSORS_F71882FG=m
CONFIG_SENSORS_F75375S=m
CONFIG_SENSORS_GSC=m
CONFIG_SENSORS_MC13783_ADC=m
CONFIG_SENSORS_FSCHMD=m
CONFIG_SENSORS_FTSTEUTATES=m
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
CONFIG_SENSORS_G760A=m
CONFIG_SENSORS_G762=m
CONFIG_SENSORS_GPIO_FAN=m
CONFIG_SENSORS_HIH6130=m
CONFIG_SENSORS_IBMAEM=m
CONFIG_SENSORS_IBMPEX=m
CONFIG_SENSORS_IIO_HWMON=m
CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_POWR1220=m
CONFIG_SENSORS_LAN966X=m
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LTC2945=m
CONFIG_SENSORS_LTC2947=m
CONFIG_SENSORS_LTC2947_I2C=m
CONFIG_SENSORS_LTC2947_SPI=m
CONFIG_SENSORS_LTC2990=m
CONFIG_SENSORS_LTC2992=m
CONFIG_SENSORS_LTC4151=m
CONFIG_SENSORS_LTC4215=m
CONFIG_SENSORS_LTC4222=m
CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4260=m
CONFIG_SENSORS_LTC4261=m
CONFIG_SENSORS_MAX1111=m
CONFIG_SENSORS_MAX127=m
CONFIG_SENSORS_MAX16065=m
CONFIG_SENSORS_MAX1619=m
CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX31722=m
CONFIG_SENSORS_MAX31730=m
CONFIG_SENSORS_MAX31760=m
CONFIG_SENSORS_MAX6620=m
CONFIG_SENSORS_MAX6621=m
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6650=m
CONFIG_SENSORS_MAX6697=m
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_MLXREG_FAN=m
CONFIG_SENSORS_TC654=m
CONFIG_SENSORS_TPS23861=m
CONFIG_SENSORS_MENF21BMC_HWMON=m
CONFIG_SENSORS_MR75203=m
CONFIG_SENSORS_ADCXX=m
CONFIG_SENSORS_LM63=m
CONFIG_SENSORS_LM70=m
CONFIG_SENSORS_LM73=m
CONFIG_SENSORS_LM75=m
CONFIG_SENSORS_LM77=m
CONFIG_SENSORS_LM78=m
CONFIG_SENSORS_LM80=m
CONFIG_SENSORS_LM83=m
CONFIG_SENSORS_LM85=m
CONFIG_SENSORS_LM87=m
CONFIG_SENSORS_LM90=m
CONFIG_SENSORS_LM92=m
CONFIG_SENSORS_LM93=m
CONFIG_SENSORS_LM95234=m
CONFIG_SENSORS_LM95241=m
CONFIG_SENSORS_LM95245=m
CONFIG_SENSORS_PC87360=m
CONFIG_SENSORS_PC87427=m
CONFIG_SENSORS_NTC_THERMISTOR=m
CONFIG_SENSORS_NCT6683=m
CONFIG_SENSORS_NCT6775_CORE=m
CONFIG_SENSORS_NCT6775=m
CONFIG_SENSORS_NCT6775_I2C=m
CONFIG_SENSORS_NCT7802=m
CONFIG_SENSORS_NCT7904=m
CONFIG_SENSORS_NPCM7XX=m
CONFIG_SENSORS_NSA320=m
CONFIG_SENSORS_NZXT_KRAKEN2=m
CONFIG_SENSORS_NZXT_SMART2=m
CONFIG_SENSORS_OCC_P8_I2C=m
CONFIG_SENSORS_OCC_P9_SBE=m
CONFIG_SENSORS_OCC=m
CONFIG_SENSORS_PCF8591=m
CONFIG_SENSORS_PECI_CPUTEMP=m
CONFIG_SENSORS_PECI_DIMMTEMP=m
CONFIG_SENSORS_PECI=m
CONFIG_PMBUS=m
CONFIG_SENSORS_PMBUS=m
CONFIG_SENSORS_ADM1266=m
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_BEL_PFE=m
CONFIG_SENSORS_BPA_RS600=m
CONFIG_SENSORS_DELTA_AHE50DC_FAN=m
CONFIG_SENSORS_FSP_3Y=m
CONFIG_SENSORS_IBM_CFFPS=m
CONFIG_SENSORS_DPS920AB=m
CONFIG_SENSORS_INSPUR_IPSPS=m
CONFIG_SENSORS_IR35221=m
CONFIG_SENSORS_IR36021=m
CONFIG_SENSORS_IR38064=m
CONFIG_SENSORS_IR38064_REGULATOR=y
CONFIG_SENSORS_IRPS5401=m
CONFIG_SENSORS_ISL68137=m
CONFIG_SENSORS_LM25066=m
CONFIG_SENSORS_LM25066_REGULATOR=y
CONFIG_SENSORS_LT7182S=m
CONFIG_SENSORS_LTC2978=m
CONFIG_SENSORS_LTC2978_REGULATOR=y
CONFIG_SENSORS_LTC3815=m
CONFIG_SENSORS_MAX15301=m
CONFIG_SENSORS_MAX16064=m
CONFIG_SENSORS_MAX16601=m
CONFIG_SENSORS_MAX20730=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31785=m
CONFIG_SENSORS_MAX34440=m
CONFIG_SENSORS_MAX8688=m
CONFIG_SENSORS_MP2888=m
CONFIG_SENSORS_MP2975=m
CONFIG_SENSORS_MP5023=m
CONFIG_SENSORS_PIM4328=m
CONFIG_SENSORS_PLI1209BC=m
CONFIG_SENSORS_PLI1209BC_REGULATOR=y
CONFIG_SENSORS_PM6764TR=m
CONFIG_SENSORS_PXE1610=m
CONFIG_SENSORS_Q54SJ108A2=m
CONFIG_SENSORS_STPDDC60=m
CONFIG_SENSORS_TPS40422=m
CONFIG_SENSORS_TPS53679=m
CONFIG_SENSORS_TPS546D24=m
CONFIG_SENSORS_UCD9000=m
CONFIG_SENSORS_UCD9200=m
CONFIG_SENSORS_XDPE152=m
CONFIG_SENSORS_XDPE122=m
CONFIG_SENSORS_XDPE122_REGULATOR=y
CONFIG_SENSORS_ZL6100=m
CONFIG_SENSORS_PWM_FAN=m
CONFIG_SENSORS_RASPBERRYPI_HWMON=m
CONFIG_SENSORS_SL28CPLD=m
CONFIG_SENSORS_SBTSI=m
CONFIG_SENSORS_SBRMI=m
CONFIG_SENSORS_SHT15=m
CONFIG_SENSORS_SHT21=m
CONFIG_SENSORS_SHT3x=m
CONFIG_SENSORS_SHT4x=m
CONFIG_SENSORS_SHTC1=m
CONFIG_SENSORS_SY7636A=m
CONFIG_SENSORS_DME1737=m
CONFIG_SENSORS_EMC1403=m
CONFIG_SENSORS_EMC2103=m
CONFIG_SENSORS_EMC2305=m
CONFIG_SENSORS_EMC6W201=m
CONFIG_SENSORS_SMSC47M1=m
CONFIG_SENSORS_SMSC47M192=m
CONFIG_SENSORS_SMSC47B397=m
CONFIG_SENSORS_SCH56XX_COMMON=m
CONFIG_SENSORS_SCH5627=m
CONFIG_SENSORS_SCH5636=m
CONFIG_SENSORS_STTS751=m
CONFIG_SENSORS_SMM665=m
CONFIG_SENSORS_ADC128D818=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_ADS7871=m
CONFIG_SENSORS_AMC6821=m
CONFIG_SENSORS_INA209=m
CONFIG_SENSORS_INA2XX=m
CONFIG_SENSORS_INA238=m
CONFIG_SENSORS_INA3221=m
CONFIG_SENSORS_TC74=m
CONFIG_SENSORS_THMC50=m
CONFIG_SENSORS_TMP102=m
CONFIG_SENSORS_TMP103=m
CONFIG_SENSORS_TMP108=m
CONFIG_SENSORS_TMP401=m
CONFIG_SENSORS_TMP421=m
CONFIG_SENSORS_TMP464=m
CONFIG_SENSORS_TMP513=m
CONFIG_SENSORS_VT1211=m
CONFIG_SENSORS_W83773G=m
CONFIG_SENSORS_W83781D=m
CONFIG_SENSORS_W83791D=m
CONFIG_SENSORS_W83792D=m
CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83795_FANCTRL=y
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
CONFIG_SENSORS_W83627HF=m
CONFIG_SENSORS_W83627EHF=m
CONFIG_SENSORS_WM831X=m
CONFIG_SENSORS_INTEL_M10_BMC_HWMON=m
CONFIG_THERMAL=y
CONFIG_THERMAL_NETLINK=y
CONFIG_THERMAL_STATISTICS=y
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
CONFIG_THERMAL_OF=y
CONFIG_THERMAL_WRITABLE_TRIPS=y
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
CONFIG_THERMAL_GOV_FAIR_SHARE=y
CONFIG_THERMAL_GOV_STEP_WISE=y
CONFIG_THERMAL_GOV_BANG_BANG=y
CONFIG_THERMAL_GOV_USER_SPACE=y
CONFIG_CPU_THERMAL=y
CONFIG_DEVFREQ_THERMAL=y
CONFIG_THERMAL_EMULATION=y
CONFIG_THERMAL_MMIO=m
CONFIG_HISI_THERMAL=m
CONFIG_IMX_THERMAL=m
CONFIG_IMX_SC_THERMAL=m
CONFIG_IMX8MM_THERMAL=m
CONFIG_K3_THERMAL=m
CONFIG_QORIQ_THERMAL=m
CONFIG_SPEAR_THERMAL=m
CONFIG_SUN8I_THERMAL=m
CONFIG_ROCKCHIP_THERMAL=m
CONFIG_RCAR_THERMAL=m
CONFIG_RCAR_GEN3_THERMAL=m
CONFIG_RZG2L_THERMAL=m
CONFIG_KIRKWOOD_THERMAL=m
CONFIG_DOVE_THERMAL=m
CONFIG_ARMADA_THERMAL=m
CONFIG_DA9062_THERMAL=m
CONFIG_MTK_THERMAL=m

#
# Intel thermal drivers
#

#
# ACPI INT340X thermal drivers
#
# end of ACPI INT340X thermal drivers
# end of Intel thermal drivers

#
# Broadcom thermal drivers
#
CONFIG_BCM2711_THERMAL=m
CONFIG_BCM2835_THERMAL=m
CONFIG_BRCMSTB_THERMAL=m
CONFIG_BCM_NS_THERMAL=m
CONFIG_BCM_SR_THERMAL=m
# end of Broadcom thermal drivers

#
# Texas Instruments thermal drivers
#
CONFIG_TI_SOC_THERMAL=m
CONFIG_TI_THERMAL=y
CONFIG_OMAP3_THERMAL=y
CONFIG_OMAP4_THERMAL=y
CONFIG_OMAP5_THERMAL=y
CONFIG_DRA752_THERMAL=y
# end of Texas Instruments thermal drivers

#
# Samsung thermal drivers
#
CONFIG_EXYNOS_THERMAL=m
# end of Samsung thermal drivers

#
# NVIDIA Tegra thermal drivers
#
CONFIG_TEGRA_SOCTHERM=m
CONFIG_TEGRA_BPMP_THERMAL=m
CONFIG_TEGRA30_TSENSOR=m
# end of NVIDIA Tegra thermal drivers

CONFIG_GENERIC_ADC_THERMAL=m

#
# Qualcomm thermal drivers
#
CONFIG_QCOM_TSENS=m
CONFIG_QCOM_SPMI_ADC_TM5=m
CONFIG_QCOM_SPMI_TEMP_ALARM=m
# end of Qualcomm thermal drivers

CONFIG_UNIPHIER_THERMAL=m
CONFIG_SPRD_THERMAL=m
CONFIG_KHADAS_MCU_FAN_THERMAL=m
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_CORE=y
CONFIG_WATCHDOG_NOWAYOUT=y
CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
CONFIG_WATCHDOG_OPEN_TIMEOUT=0
CONFIG_WATCHDOG_SYSFS=y
CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT=y

#
# Watchdog Pretimeout Governors
#
CONFIG_WATCHDOG_PRETIMEOUT_GOV=y
CONFIG_WATCHDOG_PRETIMEOUT_GOV_SEL=m
CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=m
CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=m
# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP is not set
CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC=y

#
# Watchdog Device Drivers
#
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
CONFIG_DA9052_WATCHDOG=m
CONFIG_DA9055_WATCHDOG=m
CONFIG_DA9063_WATCHDOG=m
CONFIG_DA9062_WATCHDOG=m
CONFIG_GPIO_WATCHDOG=m
CONFIG_MENF21BMC_WATCHDOG=m
CONFIG_MENZ069_WATCHDOG=m
CONFIG_WM831X_WATCHDOG=m
CONFIG_XILINX_WATCHDOG=m
CONFIG_ZIIRAVE_WATCHDOG=m
CONFIG_RAVE_SP_WATCHDOG=m
CONFIG_MLX_WDT=m
CONFIG_SL28CPLD_WATCHDOG=m
CONFIG_ARMADA_37XX_WATCHDOG=m
CONFIG_ASM9260_WATCHDOG=m
CONFIG_AT91RM9200_WATCHDOG=m
CONFIG_AT91SAM9X_WATCHDOG=m
CONFIG_SAMA5D4_WATCHDOG=m
CONFIG_CADENCE_WATCHDOG=m
CONFIG_FTWDT010_WATCHDOG=m
CONFIG_S3C2410_WATCHDOG=m
CONFIG_DW_WATCHDOG=m
CONFIG_EP93XX_WATCHDOG=m
CONFIG_OMAP_WATCHDOG=m
CONFIG_PNX4008_WATCHDOG=m
CONFIG_DAVINCI_WATCHDOG=m
CONFIG_K3_RTI_WATCHDOG=m
CONFIG_RN5T618_WATCHDOG=m
CONFIG_SUNXI_WATCHDOG=m
CONFIG_NPCM7XX_WATCHDOG=m
CONFIG_STMP3XXX_RTC_WATCHDOG=m
CONFIG_TS4800_WATCHDOG=m
CONFIG_TS72XX_WATCHDOG=m
CONFIG_MAX63XX_WATCHDOG=m
CONFIG_MAX77620_WATCHDOG=m
CONFIG_IMX2_WDT=m
CONFIG_IMX7ULP_WDT=m
CONFIG_RETU_WATCHDOG=m
CONFIG_MOXART_WDT=m
CONFIG_ST_LPC_WATCHDOG=m
CONFIG_TEGRA_WATCHDOG=m
CONFIG_QCOM_WDT=m
CONFIG_MESON_GXBB_WATCHDOG=m
CONFIG_MESON_WATCHDOG=m
CONFIG_MEDIATEK_WATCHDOG=m
CONFIG_DIGICOLOR_WATCHDOG=m
CONFIG_LPC18XX_WATCHDOG=m
CONFIG_RENESAS_WDT=m
CONFIG_RENESAS_RZAWDT=m
CONFIG_RENESAS_RZN1WDT=m
CONFIG_RENESAS_RZG2LWDT=m
CONFIG_ASPEED_WATCHDOG=m
CONFIG_UNIPHIER_WATCHDOG=m
CONFIG_RTD119X_WATCHDOG=y
CONFIG_REALTEK_OTTO_WDT=m
CONFIG_SPRD_WATCHDOG=m
CONFIG_PM8916_WATCHDOG=m
CONFIG_VISCONTI_WATCHDOG=m
CONFIG_MSC313E_WATCHDOG=m
CONFIG_APPLE_WATCHDOG=m
CONFIG_SUNPLUS_WATCHDOG=m
CONFIG_SC520_WDT=m
CONFIG_KEMPLD_WDT=m
CONFIG_BCM47XX_WDT=m
CONFIG_BCM2835_WDT=m
CONFIG_BCM_KONA_WDT=m
CONFIG_BCM_KONA_WDT_DEBUG=y
CONFIG_BCM7038_WDT=m
CONFIG_IMGPDC_WDT=m
CONFIG_MPC5200_WDT=y
CONFIG_MEN_A21_WDT=m
CONFIG_UML_WATCHDOG=m

#
# ISA-based Watchdog Cards
#
CONFIG_PCWATCHDOG=m
CONFIG_MIXCOMWD=m
CONFIG_WDT=m

#
# USB-based Watchdog Cards
#
CONFIG_USBPCWATCHDOG=m
CONFIG_SSB_POSSIBLE=y
CONFIG_SSB=m
CONFIG_SSB_SPROM=y
CONFIG_SSB_BLOCKIO=y
CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
CONFIG_SSB_PCMCIAHOST=y
CONFIG_SSB_SDIOHOST_POSSIBLE=y
CONFIG_SSB_SDIOHOST=y
CONFIG_SSB_HOST_SOC=y
CONFIG_SSB_DRIVER_GPIO=y
CONFIG_BCMA_POSSIBLE=y
CONFIG_BCMA=m
CONFIG_BCMA_BLOCKIO=y
CONFIG_BCMA_HOST_SOC=y
CONFIG_BCMA_DRIVER_MIPS=y
CONFIG_BCMA_PFLASH=y
CONFIG_BCMA_SFLASH=y
CONFIG_BCMA_NFLASH=y
CONFIG_BCMA_DRIVER_GMAC_CMN=y
CONFIG_BCMA_DRIVER_GPIO=y
CONFIG_BCMA_DEBUG=y

#
# Multifunction device drivers
#
CONFIG_MFD_CORE=y
CONFIG_MFD_ACT8945A=m
CONFIG_MFD_SUN4I_GPADC=m
CONFIG_MFD_AT91_USART=y
CONFIG_MFD_ATMEL_FLEXCOM=m
CONFIG_MFD_ATMEL_HLCDC=m
CONFIG_MFD_ATMEL_SMC=y
CONFIG_MFD_BCM590XX=m
CONFIG_MFD_BD9571MWV=m
CONFIG_MFD_AXP20X=m
CONFIG_MFD_AXP20X_I2C=m
CONFIG_MFD_CROS_EC_DEV=m
CONFIG_MFD_MADERA=m
CONFIG_MFD_MADERA_I2C=m
CONFIG_MFD_MADERA_SPI=m
CONFIG_MFD_CS47L15=y
CONFIG_MFD_CS47L35=y
CONFIG_MFD_CS47L85=y
CONFIG_MFD_CS47L90=y
CONFIG_MFD_CS47L92=y
CONFIG_MFD_ASIC3=y
CONFIG_PMIC_DA9052=y
CONFIG_MFD_DA9052_SPI=y
CONFIG_MFD_DA9062=m
CONFIG_MFD_DA9063=m
CONFIG_MFD_DA9150=m
CONFIG_MFD_DLN2=m
CONFIG_MFD_ENE_KB3930=m
CONFIG_MFD_EXYNOS_LPASS=m
CONFIG_MFD_GATEWORKS_GSC=m
CONFIG_MFD_MC13XXX=m
CONFIG_MFD_MC13XXX_SPI=m
CONFIG_MFD_MC13XXX_I2C=m
CONFIG_MFD_MP2629=m
CONFIG_MFD_MXS_LRADC=m
CONFIG_MFD_MX25_TSADC=m
CONFIG_MFD_HI6421_PMIC=m
CONFIG_MFD_HI6421_SPMI=m
CONFIG_MFD_HI655X_PMIC=m
CONFIG_HTC_PASIC3=m
CONFIG_MFD_IQS62X=m
CONFIG_MFD_KEMPLD=m
CONFIG_MFD_88PM800=m
CONFIG_MFD_88PM805=m
CONFIG_MFD_MAX14577=m
CONFIG_MFD_MAX77650=m
CONFIG_MFD_MAX77686=m
CONFIG_MFD_MAX77693=m
CONFIG_MFD_MAX77714=m
CONFIG_MFD_MAX8907=m
CONFIG_MFD_MT6360=m
CONFIG_MFD_MT6370=m
CONFIG_MFD_MT6397=m
CONFIG_MFD_MENF21BMC=m
CONFIG_MFD_OCELOT=m
CONFIG_EZX_PCAP=y
CONFIG_MFD_CPCAP=m
CONFIG_MFD_VIPERBOARD=m
CONFIG_MFD_NTXEC=m
CONFIG_MFD_RETU=m
CONFIG_MFD_PCF50633=m
CONFIG_PCF50633_ADC=m
CONFIG_PCF50633_GPIO=m
CONFIG_UCB1400_CORE=m
CONFIG_MFD_PM8XXX=m
CONFIG_MFD_SPMI_PMIC=m
CONFIG_MFD_SY7636A=m
CONFIG_MFD_RT4831=m
CONFIG_MFD_RT5033=m
CONFIG_MFD_RT5120=m
CONFIG_MFD_RK808=m
CONFIG_MFD_RN5T618=m
CONFIG_MFD_SI476X_CORE=m
CONFIG_MFD_SIMPLE_MFD_I2C=m
CONFIG_MFD_SL28CPLD=m
CONFIG_MFD_SM501=m
CONFIG_MFD_SM501_GPIO=y
CONFIG_MFD_SKY81452=m
CONFIG_MFD_SC27XX_PMIC=m
CONFIG_ABX500_CORE=y
CONFIG_MFD_STMPE=y

#
# STMicroelectronics STMPE Interface Drivers
#
CONFIG_STMPE_SPI=y
# end of STMicroelectronics STMPE Interface Drivers

CONFIG_MFD_SUN6I_PRCM=y
CONFIG_MFD_SYSCON=y
CONFIG_MFD_TI_AM335X_TSCADC=m
CONFIG_MFD_LP3943=m
CONFIG_MFD_TI_LMU=m
CONFIG_MFD_OMAP_USB_HOST=y
CONFIG_TPS6105X=m
CONFIG_TPS65010=m
CONFIG_TPS6507X=m
CONFIG_MFD_TPS65086=m
CONFIG_MFD_TPS65217=m
CONFIG_MFD_TI_LP873X=m
CONFIG_MFD_TI_LP87565=m
CONFIG_MFD_TPS65218=m
CONFIG_MFD_TPS65912=m
CONFIG_MFD_TPS65912_I2C=m
CONFIG_MFD_TPS65912_SPI=m
CONFIG_MFD_WL1273_CORE=m
CONFIG_MFD_LM3533=m
CONFIG_MFD_TQMX86=m
CONFIG_MFD_ARIZONA=m
CONFIG_MFD_ARIZONA_I2C=m
CONFIG_MFD_ARIZONA_SPI=m
CONFIG_MFD_CS47L24=y
CONFIG_MFD_WM5102=y
CONFIG_MFD_WM5110=y
CONFIG_MFD_WM8997=y
CONFIG_MFD_WM8998=y
CONFIG_MFD_WM831X=y
CONFIG_MFD_WM831X_SPI=y
CONFIG_MFD_WM8994=m
CONFIG_MFD_STW481X=m
CONFIG_MFD_STM32_LPTIMER=m
CONFIG_MFD_STM32_TIMERS=m
CONFIG_MFD_STMFX=m
CONFIG_MFD_WCD934X=m
CONFIG_MFD_ATC260X=m
CONFIG_MFD_ATC260X_I2C=m
CONFIG_MFD_KHADAS_MCU=m
CONFIG_MFD_ACER_A500_EC=m
CONFIG_MFD_QCOM_PM8008=m
CONFIG_RAVE_SP_CORE=m
CONFIG_MFD_INTEL_M10_BMC=m
CONFIG_MFD_RSMU_I2C=m
CONFIG_MFD_RSMU_SPI=m
# end of Multifunction device drivers

CONFIG_REGULATOR=y
CONFIG_REGULATOR_DEBUG=y
CONFIG_REGULATOR_FIXED_VOLTAGE=m
CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
CONFIG_REGULATOR_USERSPACE_CONSUMER=m
CONFIG_REGULATOR_88PG86X=m
CONFIG_REGULATOR_88PM800=m
CONFIG_REGULATOR_ACT8865=m
CONFIG_REGULATOR_ACT8945A=m
CONFIG_REGULATOR_AD5398=m
CONFIG_REGULATOR_ANATOP=m
CONFIG_REGULATOR_ARIZONA_LDO1=m
CONFIG_REGULATOR_ARIZONA_MICSUPP=m
CONFIG_REGULATOR_ARM_SCMI=m
CONFIG_REGULATOR_ATC260X=m
CONFIG_REGULATOR_AXP20X=m
CONFIG_REGULATOR_BCM590XX=m
CONFIG_REGULATOR_BD9571MWV=m
CONFIG_REGULATOR_CPCAP=m
CONFIG_REGULATOR_CROS_EC=m
CONFIG_REGULATOR_DA9052=m
CONFIG_REGULATOR_DA9062=m
CONFIG_REGULATOR_DA9063=m
CONFIG_REGULATOR_DA9121=m
CONFIG_REGULATOR_DA9210=m
CONFIG_REGULATOR_DA9211=m
CONFIG_REGULATOR_FAN53555=m
CONFIG_REGULATOR_FAN53880=m
CONFIG_REGULATOR_GPIO=m
CONFIG_REGULATOR_HI6421=m
CONFIG_REGULATOR_HI6421V530=m
CONFIG_REGULATOR_HI655X=m
CONFIG_REGULATOR_HI6421V600=m
CONFIG_REGULATOR_ISL9305=m
CONFIG_REGULATOR_ISL6271A=m
CONFIG_REGULATOR_LM363X=m
CONFIG_REGULATOR_LP3971=m
CONFIG_REGULATOR_LP3972=m
CONFIG_REGULATOR_LP872X=m
CONFIG_REGULATOR_LP873X=m
CONFIG_REGULATOR_LP8755=m
CONFIG_REGULATOR_LP87565=m
CONFIG_REGULATOR_LTC3589=m
CONFIG_REGULATOR_LTC3676=m
CONFIG_REGULATOR_MAX14577=m
CONFIG_REGULATOR_MAX1586=m
CONFIG_REGULATOR_MAX77620=m
CONFIG_REGULATOR_MAX77650=m
CONFIG_REGULATOR_MAX8649=m
CONFIG_REGULATOR_MAX8660=m
CONFIG_REGULATOR_MAX8893=m
CONFIG_REGULATOR_MAX8907=m
CONFIG_REGULATOR_MAX8952=m
CONFIG_REGULATOR_MAX8973=m
CONFIG_REGULATOR_MAX20086=m
CONFIG_REGULATOR_MAX77686=m
CONFIG_REGULATOR_MAX77693=m
CONFIG_REGULATOR_MAX77802=m
CONFIG_REGULATOR_MAX77826=m
CONFIG_REGULATOR_MC13XXX_CORE=m
CONFIG_REGULATOR_MC13783=m
CONFIG_REGULATOR_MC13892=m
CONFIG_REGULATOR_MCP16502=m
CONFIG_REGULATOR_MP5416=m
CONFIG_REGULATOR_MP8859=m
CONFIG_REGULATOR_MP886X=m
CONFIG_REGULATOR_MPQ7920=m
CONFIG_REGULATOR_MT6311=m
CONFIG_REGULATOR_MT6315=m
CONFIG_REGULATOR_MT6323=m
CONFIG_REGULATOR_MT6331=m
CONFIG_REGULATOR_MT6332=m
CONFIG_REGULATOR_MT6358=m
CONFIG_REGULATOR_MT6359=m
CONFIG_REGULATOR_MT6360=m
CONFIG_REGULATOR_MT6370=m
CONFIG_REGULATOR_MT6380=m
CONFIG_REGULATOR_MT6397=m
CONFIG_REGULATOR_PBIAS=m
CONFIG_REGULATOR_PCA9450=m
CONFIG_REGULATOR_PCAP=m
CONFIG_REGULATOR_PCF50633=m
CONFIG_REGULATOR_PF8X00=m
CONFIG_REGULATOR_PFUZE100=m
CONFIG_REGULATOR_PV88060=m
CONFIG_REGULATOR_PV88080=m
CONFIG_REGULATOR_PV88090=m
CONFIG_REGULATOR_PWM=m
CONFIG_REGULATOR_QCOM_RPMH=m
CONFIG_REGULATOR_QCOM_SMD_RPM=m
CONFIG_REGULATOR_QCOM_SPMI=m
CONFIG_REGULATOR_QCOM_USB_VBUS=m
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
CONFIG_REGULATOR_RK808=m
CONFIG_REGULATOR_RN5T618=m
CONFIG_REGULATOR_RT4801=m
CONFIG_REGULATOR_RT4831=m
CONFIG_REGULATOR_RT5033=m
CONFIG_REGULATOR_RT5120=m
CONFIG_REGULATOR_RT5190A=m
CONFIG_REGULATOR_RT5759=m
CONFIG_REGULATOR_RT6160=m
CONFIG_REGULATOR_RT6245=m
CONFIG_REGULATOR_RTQ2134=m
CONFIG_REGULATOR_RTMV20=m
CONFIG_REGULATOR_RTQ6752=m
CONFIG_REGULATOR_S2MPA01=m
CONFIG_REGULATOR_S2MPS11=m
CONFIG_REGULATOR_S5M8767=m
CONFIG_REGULATOR_SC2731=m
CONFIG_REGULATOR_SKY81452=m
CONFIG_REGULATOR_SLG51000=m
CONFIG_REGULATOR_STM32_BOOSTER=m
CONFIG_REGULATOR_STM32_VREFBUF=m
CONFIG_REGULATOR_STM32_PWR=y
CONFIG_REGULATOR_TI_ABB=m
CONFIG_REGULATOR_STW481X_VMMC=y
CONFIG_REGULATOR_SY7636A=m
CONFIG_REGULATOR_SY8106A=m
CONFIG_REGULATOR_SY8824X=m
CONFIG_REGULATOR_SY8827N=m
CONFIG_REGULATOR_TPS51632=m
CONFIG_REGULATOR_TPS6105X=m
CONFIG_REGULATOR_TPS62360=m
CONFIG_REGULATOR_TPS6286X=m
CONFIG_REGULATOR_TPS65023=m
CONFIG_REGULATOR_TPS6507X=m
CONFIG_REGULATOR_TPS65086=m
CONFIG_REGULATOR_TPS65132=m
CONFIG_REGULATOR_TPS65217=m
CONFIG_REGULATOR_TPS65218=m
CONFIG_REGULATOR_TPS6524X=m
CONFIG_REGULATOR_TPS65912=m
CONFIG_REGULATOR_TPS68470=m
CONFIG_REGULATOR_UNIPHIER=m
CONFIG_REGULATOR_VCTRL=m
CONFIG_REGULATOR_WM831X=m
CONFIG_REGULATOR_WM8994=m
CONFIG_REGULATOR_QCOM_LABIBB=m
CONFIG_RC_CORE=m
CONFIG_LIRC=y
CONFIG_RC_MAP=m
CONFIG_RC_DECODERS=y
CONFIG_IR_IMON_DECODER=m
CONFIG_IR_JVC_DECODER=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_NEC_DECODER=m
CONFIG_IR_RC5_DECODER=m
CONFIG_IR_RC6_DECODER=m
CONFIG_IR_RCMM_DECODER=m
CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SHARP_DECODER=m
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_XMP_DECODER=m
CONFIG_RC_DEVICES=y
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
CONFIG_IR_GPIO_TX=m
CONFIG_IR_HIX5HD2=m
CONFIG_IR_IGORPLUGUSB=m
CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_IMON_RAW=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_MESON=m
CONFIG_IR_MESON_TX=m
CONFIG_IR_MTK=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
CONFIG_IR_REDRAT3=m
CONFIG_IR_RX51=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_SUNXI=m
CONFIG_IR_TOY=m
CONFIG_IR_TTUSBIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_RC_ATI_REMOTE=m
CONFIG_RC_LOOPBACK=m
CONFIG_RC_ST=m
CONFIG_RC_XBOX_DVD=m
CONFIG_IR_IMG=m
CONFIG_IR_IMG_RAW=y
CONFIG_IR_IMG_HW=y
CONFIG_IR_IMG_NEC=y
CONFIG_IR_IMG_JVC=y
CONFIG_IR_IMG_SONY=y
CONFIG_IR_IMG_SHARP=y
CONFIG_IR_IMG_SANYO=y
CONFIG_IR_IMG_RC5=y
CONFIG_IR_IMG_RC6=y
CONFIG_CEC_CORE=m
CONFIG_CEC_NOTIFIER=y
CONFIG_CEC_PIN=y

#
# CEC support
#
CONFIG_MEDIA_CEC_RC=y
CONFIG_CEC_PIN_ERROR_INJ=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_CEC_CH7322=m
CONFIG_CEC_CROS_EC=m
CONFIG_CEC_MESON_AO=m
CONFIG_CEC_MESON_G12A_AO=m
CONFIG_CEC_GPIO=m
CONFIG_CEC_SAMSUNG_S5P=m
CONFIG_CEC_STI=m
CONFIG_CEC_STM32=m
CONFIG_CEC_TEGRA=m
CONFIG_USB_PULSE8_CEC=m
CONFIG_USB_RAINSHADOW_CEC=m
# end of CEC support

CONFIG_MEDIA_SUPPORT=m
CONFIG_MEDIA_SUPPORT_FILTER=y
CONFIG_MEDIA_SUBDRV_AUTOSELECT=y

#
# Media device types
#
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_SDR_SUPPORT=y
CONFIG_MEDIA_PLATFORM_SUPPORT=y
CONFIG_MEDIA_TEST_SUPPORT=y
# end of Media device types

CONFIG_VIDEO_DEV=m
CONFIG_MEDIA_CONTROLLER=y
CONFIG_DVB_CORE=m

#
# Video4Linux options
#
CONFIG_VIDEO_V4L2_I2C=y
CONFIG_VIDEO_V4L2_SUBDEV_API=y
CONFIG_VIDEO_ADV_DEBUG=y
CONFIG_VIDEO_FIXED_MINOR_RANGES=y
CONFIG_VIDEO_TUNER=m
CONFIG_V4L2_JPEG_HELPER=m
CONFIG_V4L2_H264=m
CONFIG_V4L2_VP9=m
CONFIG_V4L2_MEM2MEM_DEV=m
CONFIG_V4L2_FLASH_LED_CLASS=m
CONFIG_V4L2_FWNODE=m
CONFIG_V4L2_ASYNC=m
CONFIG_VIDEOBUF_GEN=m
CONFIG_VIDEOBUF_VMALLOC=m
CONFIG_VIDEOBUF_DMA_CONTIG=m
# end of Video4Linux options

#
# Media controller options
#
CONFIG_MEDIA_CONTROLLER_DVB=y
CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
# end of Media controller options

#
# Digital TV options
#
CONFIG_DVB_MMAP=y
CONFIG_DVB_NET=y
CONFIG_DVB_MAX_ADAPTERS=16
CONFIG_DVB_DYNAMIC_MINORS=y
CONFIG_DVB_DEMUX_SECTION_LOSS_LOG=y
CONFIG_DVB_ULE_DEBUG=y
# end of Digital TV options

#
# Media drivers
#

#
# Drivers filtered as selected at 'Filter media drivers'
#

#
# Media drivers
#
CONFIG_MEDIA_USB_SUPPORT=y

#
# Webcam devices
#
CONFIG_USB_GSPCA=m
CONFIG_USB_GSPCA_BENQ=m
CONFIG_USB_GSPCA_CONEX=m
CONFIG_USB_GSPCA_CPIA1=m
CONFIG_USB_GSPCA_DTCS033=m
CONFIG_USB_GSPCA_ETOMS=m
CONFIG_USB_GSPCA_FINEPIX=m
CONFIG_USB_GSPCA_JEILINJ=m
CONFIG_USB_GSPCA_JL2005BCD=m
CONFIG_USB_GSPCA_KINECT=m
CONFIG_USB_GSPCA_KONICA=m
CONFIG_USB_GSPCA_MARS=m
CONFIG_USB_GSPCA_MR97310A=m
CONFIG_USB_GSPCA_NW80X=m
CONFIG_USB_GSPCA_OV519=m
CONFIG_USB_GSPCA_OV534=m
CONFIG_USB_GSPCA_OV534_9=m
CONFIG_USB_GSPCA_PAC207=m
CONFIG_USB_GSPCA_PAC7302=m
CONFIG_USB_GSPCA_PAC7311=m
CONFIG_USB_GSPCA_SE401=m
CONFIG_USB_GSPCA_SN9C2028=m
CONFIG_USB_GSPCA_SN9C20X=m
CONFIG_USB_GSPCA_SONIXB=m
CONFIG_USB_GSPCA_SONIXJ=m
CONFIG_USB_GSPCA_SPCA1528=m
CONFIG_USB_GSPCA_SPCA500=m
CONFIG_USB_GSPCA_SPCA501=m
CONFIG_USB_GSPCA_SPCA505=m
CONFIG_USB_GSPCA_SPCA506=m
CONFIG_USB_GSPCA_SPCA508=m
CONFIG_USB_GSPCA_SPCA561=m
CONFIG_USB_GSPCA_SQ905=m
CONFIG_USB_GSPCA_SQ905C=m
CONFIG_USB_GSPCA_SQ930X=m
CONFIG_USB_GSPCA_STK014=m
CONFIG_USB_GSPCA_STK1135=m
CONFIG_USB_GSPCA_STV0680=m
CONFIG_USB_GSPCA_SUNPLUS=m
CONFIG_USB_GSPCA_T613=m
CONFIG_USB_GSPCA_TOPRO=m
CONFIG_USB_GSPCA_TOUPTEK=m
CONFIG_USB_GSPCA_TV8532=m
CONFIG_USB_GSPCA_VC032X=m
CONFIG_USB_GSPCA_VICAM=m
CONFIG_USB_GSPCA_XIRLINK_CIT=m
CONFIG_USB_GSPCA_ZC3XX=m
CONFIG_USB_GL860=m
CONFIG_USB_M5602=m
CONFIG_USB_STV06XX=m
CONFIG_USB_PWC=m
CONFIG_USB_PWC_DEBUG=y
CONFIG_USB_PWC_INPUT_EVDEV=y
CONFIG_USB_S2255=m
CONFIG_VIDEO_USBTV=m
CONFIG_USB_VIDEO_CLASS=m
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y

#
# Analog TV USB devices
#
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
CONFIG_VIDEO_GO7007_LOADER=m
CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m
CONFIG_VIDEO_HDPVR=m
CONFIG_VIDEO_PVRUSB2=m
CONFIG_VIDEO_PVRUSB2_SYSFS=y
CONFIG_VIDEO_PVRUSB2_DVB=y
CONFIG_VIDEO_PVRUSB2_DEBUGIFC=y
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160=m

#
# Analog/digital TV USB devices
#
CONFIG_VIDEO_AU0828=m
CONFIG_VIDEO_AU0828_V4L2=y
CONFIG_VIDEO_AU0828_RC=y
CONFIG_VIDEO_CX231XX=m
CONFIG_VIDEO_CX231XX_RC=y
CONFIG_VIDEO_CX231XX_ALSA=m
CONFIG_VIDEO_CX231XX_DVB=m

#
# Digital TV USB devices
#
CONFIG_DVB_AS102=m
CONFIG_DVB_B2C2_FLEXCOP_USB=m
CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG=y
CONFIG_DVB_USB_V2=m
CONFIG_DVB_USB_AF9015=m
CONFIG_DVB_USB_AF9035=m
CONFIG_DVB_USB_ANYSEE=m
CONFIG_DVB_USB_AU6610=m
CONFIG_DVB_USB_AZ6007=m
CONFIG_DVB_USB_CE6230=m
CONFIG_DVB_USB_DVBSKY=m
CONFIG_DVB_USB_EC168=m
CONFIG_DVB_USB_GL861=m
CONFIG_DVB_USB_LME2510=m
CONFIG_DVB_USB_MXL111SF=m
CONFIG_DVB_USB_RTL28XXU=m
CONFIG_DVB_USB_ZD1301=m
CONFIG_DVB_USB=m
CONFIG_DVB_USB_DEBUG=y
CONFIG_DVB_USB_A800=m
CONFIG_DVB_USB_AF9005=m
CONFIG_DVB_USB_AF9005_REMOTE=m
CONFIG_DVB_USB_AZ6027=m
CONFIG_DVB_USB_CINERGY_T2=m
CONFIG_DVB_USB_CXUSB=m
CONFIG_DVB_USB_CXUSB_ANALOG=y
CONFIG_DVB_USB_DIB0700=m
CONFIG_DVB_USB_DIB3000MC=m
CONFIG_DVB_USB_DIBUSB_MB=m
CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
CONFIG_DVB_USB_DIBUSB_MC=m
CONFIG_DVB_USB_DIGITV=m
CONFIG_DVB_USB_DTT200U=m
CONFIG_DVB_USB_DTV5100=m
CONFIG_DVB_USB_DW2102=m
CONFIG_DVB_USB_GP8PSK=m
CONFIG_DVB_USB_M920X=m
CONFIG_DVB_USB_NOVA_T_USB2=m
CONFIG_DVB_USB_OPERA1=m
CONFIG_DVB_USB_PCTV452E=m
CONFIG_DVB_USB_TECHNISAT_USB2=m
CONFIG_DVB_USB_TTUSB2=m
CONFIG_DVB_USB_UMT_010=m
CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
CONFIG_SMS_USB_DRV=m

#
# Webcam, TV (analog/digital) USB devices
#
CONFIG_VIDEO_EM28XX=m
CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_EM28XX_ALSA=m
CONFIG_VIDEO_EM28XX_DVB=m
CONFIG_VIDEO_EM28XX_RC=m

#
# Software defined radio USB devices
#
CONFIG_USB_AIRSPY=m
CONFIG_USB_HACKRF=m
CONFIG_USB_MSI2500=m
CONFIG_RADIO_ADAPTERS=m
CONFIG_RADIO_SAA7706H=m
CONFIG_RADIO_SHARK=m
CONFIG_RADIO_SHARK2=m
CONFIG_RADIO_SI4713=m
CONFIG_RADIO_SI476X=m
CONFIG_RADIO_TEA575X=m
CONFIG_RADIO_TEA5764=m
CONFIG_RADIO_TEF6862=m
CONFIG_RADIO_WL1273=m
CONFIG_USB_DSBR=m
CONFIG_USB_KEENE=m
CONFIG_USB_MA901=m
CONFIG_USB_MR800=m
CONFIG_USB_RAREMONO=m
CONFIG_RADIO_SI470X=m
CONFIG_USB_SI470X=m
CONFIG_I2C_SI470X=m
CONFIG_USB_SI4713=m
CONFIG_PLATFORM_SI4713=m
CONFIG_I2C_SI4713=m
CONFIG_RADIO_WL128X=m
CONFIG_V4L_RADIO_ISA_DRIVERS=y
CONFIG_RADIO_AZTECH=m
CONFIG_RADIO_CADET=m
CONFIG_RADIO_GEMTEK=m
CONFIG_RADIO_ISA=m
CONFIG_RADIO_RTRACK=m
CONFIG_RADIO_RTRACK2=m
CONFIG_RADIO_SF16FMI=m
CONFIG_RADIO_SF16FMR2=m
CONFIG_RADIO_TERRATEC=m
CONFIG_RADIO_TRUST=m
CONFIG_RADIO_TYPHOON=m
CONFIG_RADIO_ZOLTRIX=m
CONFIG_MEDIA_PLATFORM_DRIVERS=y
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_SDR_PLATFORM_DRIVERS=y
CONFIG_DVB_PLATFORM_DRIVERS=y
CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m
CONFIG_VIDEO_MUX=m

#
# Allegro DVT media platform drivers
#
CONFIG_VIDEO_ALLEGRO_DVT=m

#
# Amlogic media platform drivers
#
CONFIG_VIDEO_MESON_GE2D=m

#
# Amphion drivers
#
CONFIG_VIDEO_AMPHION_VPU=m

#
# Aspeed media platform drivers
#
CONFIG_VIDEO_ASPEED=m

#
# Atmel media platform drivers
#
CONFIG_VIDEO_ATMEL_ISC=m
CONFIG_VIDEO_ATMEL_XISC=m
CONFIG_VIDEO_ATMEL_ISC_BASE=m
CONFIG_VIDEO_ATMEL_ISI=m
CONFIG_VIDEO_MICROCHIP_CSI2DC=m

#
# Cadence media platform drivers
#
CONFIG_VIDEO_CADENCE_CSI2RX=m
CONFIG_VIDEO_CADENCE_CSI2TX=m

#
# Chips&Media media platform drivers
#
CONFIG_VIDEO_CODA=m
CONFIG_VIDEO_IMX_VDOA=m

#
# Intel media platform drivers
#
CONFIG_VIDEO_PXA27x=m

#
# Marvell media platform drivers
#
CONFIG_VIDEO_MMP_CAMERA=m

#
# Mediatek media platform drivers
#
CONFIG_VIDEO_MEDIATEK_JPEG=m
CONFIG_VIDEO_MEDIATEK_MDP=m
CONFIG_VIDEO_MEDIATEK_VCODEC_SCP=y
CONFIG_VIDEO_MEDIATEK_VCODEC_VPU=y
CONFIG_VIDEO_MEDIATEK_VCODEC=m
CONFIG_VIDEO_MEDIATEK_VPU=m
CONFIG_VIDEO_MEDIATEK_MDP3=m

#
# NVidia media platform drivers
#
CONFIG_VIDEO_TEGRA_VDE=m

#
# NXP media platform drivers
#
CONFIG_VIDEO_IMX_MIPI_CSIS=m
CONFIG_VIDEO_IMX_PXP=m
CONFIG_VIDEO_MX2_EMMAPRP=m
CONFIG_VIDEO_DW100=m
CONFIG_VIDEO_IMX8_JPEG=m

#
# Qualcomm media platform drivers
#
CONFIG_VIDEO_QCOM_CAMSS=m
CONFIG_VIDEO_QCOM_VENUS=m

#
# Renesas media platform drivers
#
CONFIG_VIDEO_RENESAS_CEU=m
CONFIG_VIDEO_RCAR_ISP=m
CONFIG_VIDEO_SH_VOU=m
CONFIG_VIDEO_RCAR_CSI2=m
CONFIG_VIDEO_RCAR_VIN=m
CONFIG_VIDEO_RENESAS_FCP=m
CONFIG_VIDEO_RENESAS_FDP1=m
CONFIG_VIDEO_RENESAS_JPU=m
CONFIG_VIDEO_RENESAS_VSP1=m
CONFIG_VIDEO_RCAR_DRIF=m

#
# Rockchip media platform drivers
#
CONFIG_VIDEO_ROCKCHIP_RGA=m
CONFIG_VIDEO_ROCKCHIP_ISP1=m

#
# Samsung media platform drivers
#
CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC=m
CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS=m
CONFIG_VIDEO_EXYNOS4_IS_COMMON=m
CONFIG_VIDEO_S5P_FIMC=m
CONFIG_VIDEO_S5P_MIPI_CSIS=m
CONFIG_VIDEO_EXYNOS_FIMC_LITE=m
CONFIG_VIDEO_EXYNOS4_FIMC_IS=m
CONFIG_VIDEO_EXYNOS4_ISP_DMA_CAPTURE=y
CONFIG_VIDEO_SAMSUNG_S5P_G2D=m
CONFIG_VIDEO_SAMSUNG_S5P_JPEG=m
CONFIG_VIDEO_SAMSUNG_S5P_MFC=m

#
# STMicroelectronics media platform drivers
#
CONFIG_VIDEO_STI_BDISP=m
CONFIG_DVB_C8SECTPFE=m
CONFIG_VIDEO_STI_DELTA=m
CONFIG_VIDEO_STI_DELTA_MJPEG=y
CONFIG_VIDEO_STI_DELTA_DRIVER=m
CONFIG_VIDEO_STI_HVA=m
CONFIG_VIDEO_STI_HVA_DEBUGFS=y
CONFIG_VIDEO_STM32_DCMI=m
CONFIG_VIDEO_STM32_DMA2D=m

#
# Sunxi media platform drivers
#
CONFIG_VIDEO_SUN4I_CSI=m
CONFIG_VIDEO_SUN6I_CSI=m

#
# Texas Instruments drivers
#
CONFIG_VIDEO_TI_VPDMA=m
CONFIG_VIDEO_TI_SC=m
CONFIG_VIDEO_TI_CSC=m
CONFIG_VIDEO_TI_CAL=m
CONFIG_VIDEO_TI_CAL_MC=y
CONFIG_VIDEO_TI_VPE=m
CONFIG_VIDEO_TI_VPE_DEBUG=y
CONFIG_VIDEO_AM437X_VPFE=m
CONFIG_VIDEO_DAVINCI_VPIF_DISPLAY=m
CONFIG_VIDEO_DAVINCI_VPIF_CAPTURE=m
CONFIG_VIDEO_DAVINCI_VPBE_DISPLAY=m
CONFIG_VIDEO_OMAP2_VOUT_VRFB=y
CONFIG_VIDEO_OMAP2_VOUT=m
CONFIG_VIDEO_OMAP3=m
CONFIG_VIDEO_OMAP3_DEBUG=y

#
# Verisilicon media platform drivers
#
CONFIG_VIDEO_HANTRO=m
CONFIG_VIDEO_HANTRO_IMX8M=y
CONFIG_VIDEO_HANTRO_SAMA5D4=y
CONFIG_VIDEO_HANTRO_ROCKCHIP=y
CONFIG_VIDEO_HANTRO_SUNXI=y

#
# VIA media platform drivers
#

#
# Xilinx media platform drivers
#
CONFIG_VIDEO_XILINX=m
CONFIG_VIDEO_XILINX_CSI2RXSS=m
CONFIG_VIDEO_XILINX_TPG=m
CONFIG_VIDEO_XILINX_VTC=m

#
# MMC/SDIO DVB adapters
#
CONFIG_SMS_SDIO_DRV=m
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VIDEO_VIM2M=m
CONFIG_VIDEO_VICODEC=m
CONFIG_VIDEO_VIMC=m
CONFIG_VIDEO_VIVID=m
CONFIG_VIDEO_VIVID_CEC=y
CONFIG_VIDEO_VIVID_MAX_DEVS=64
CONFIG_DVB_TEST_DRIVERS=y
CONFIG_DVB_VIDTV=m

#
# FireWire (IEEE 1394) Adapters
#
CONFIG_DVB_FIREDTV=m
CONFIG_DVB_FIREDTV_INPUT=y
CONFIG_MEDIA_COMMON_OPTIONS=y

#
# common driver options
#
CONFIG_CYPRESS_FIRMWARE=m
CONFIG_TTPCI_EEPROM=m
CONFIG_VIDEO_CX2341X=m
CONFIG_VIDEO_TVEEPROM=m
CONFIG_DVB_B2C2_FLEXCOP=m
CONFIG_DVB_B2C2_FLEXCOP_DEBUG=y
CONFIG_SMS_SIANO_MDTV=m
CONFIG_SMS_SIANO_RC=y
CONFIG_SMS_SIANO_DEBUGFS=y
CONFIG_VIDEO_V4L2_TPG=m
CONFIG_VIDEOBUF2_CORE=m
CONFIG_VIDEOBUF2_V4L2=m
CONFIG_VIDEOBUF2_MEMOPS=m
CONFIG_VIDEOBUF2_DMA_CONTIG=m
CONFIG_VIDEOBUF2_VMALLOC=m
CONFIG_VIDEOBUF2_DMA_SG=m
# end of Media drivers

#
# Media ancillary drivers
#
CONFIG_MEDIA_ATTACH=y

#
# IR I2C driver auto-selected by 'Autoselect ancillary drivers'
#
CONFIG_VIDEO_IR_I2C=m

#
# Camera sensor devices
#
CONFIG_VIDEO_APTINA_PLL=m
CONFIG_VIDEO_CCS_PLL=m
CONFIG_VIDEO_AR0521=m
CONFIG_VIDEO_HI556=m
CONFIG_VIDEO_HI846=m
CONFIG_VIDEO_HI847=m
CONFIG_VIDEO_IMX208=m
CONFIG_VIDEO_IMX214=m
CONFIG_VIDEO_IMX219=m
CONFIG_VIDEO_IMX258=m
CONFIG_VIDEO_IMX274=m
CONFIG_VIDEO_IMX290=m
CONFIG_VIDEO_IMX319=m
CONFIG_VIDEO_IMX334=m
CONFIG_VIDEO_IMX335=m
CONFIG_VIDEO_IMX355=m
CONFIG_VIDEO_IMX412=m
CONFIG_VIDEO_MAX9271_LIB=m
CONFIG_VIDEO_MT9M001=m
CONFIG_VIDEO_MT9M032=m
CONFIG_VIDEO_MT9M111=m
CONFIG_VIDEO_MT9P031=m
CONFIG_VIDEO_MT9T001=m
CONFIG_VIDEO_MT9T112=m
CONFIG_VIDEO_MT9V011=m
CONFIG_VIDEO_MT9V032=m
CONFIG_VIDEO_MT9V111=m
CONFIG_VIDEO_NOON010PC30=m
CONFIG_VIDEO_OG01A1B=m
CONFIG_VIDEO_OV02A10=m
CONFIG_VIDEO_OV08D10=m
CONFIG_VIDEO_OV13858=m
CONFIG_VIDEO_OV13B10=m
CONFIG_VIDEO_OV2640=m
CONFIG_VIDEO_OV2659=m
CONFIG_VIDEO_OV2680=m
CONFIG_VIDEO_OV2685=m
CONFIG_VIDEO_OV2740=m
CONFIG_VIDEO_OV5640=m
CONFIG_VIDEO_OV5645=m
CONFIG_VIDEO_OV5647=m
CONFIG_VIDEO_OV5670=m
CONFIG_VIDEO_OV5675=m
CONFIG_VIDEO_OV5693=m
CONFIG_VIDEO_OV5695=m
CONFIG_VIDEO_OV6650=m
CONFIG_VIDEO_OV7251=m
CONFIG_VIDEO_OV7640=m
CONFIG_VIDEO_OV7670=m
CONFIG_VIDEO_OV772X=m
CONFIG_VIDEO_OV7740=m
CONFIG_VIDEO_OV8856=m
CONFIG_VIDEO_OV9282=m
CONFIG_VIDEO_OV9640=m
CONFIG_VIDEO_OV9650=m
CONFIG_VIDEO_OV9734=m
CONFIG_VIDEO_RDACM20=m
CONFIG_VIDEO_RDACM21=m
CONFIG_VIDEO_RJ54N1=m
CONFIG_VIDEO_S5C73M3=m
CONFIG_VIDEO_S5K4ECGX=m
CONFIG_VIDEO_S5K5BAF=m
CONFIG_VIDEO_S5K6A3=m
CONFIG_VIDEO_S5K6AA=m
CONFIG_VIDEO_SR030PC30=m
CONFIG_VIDEO_VS6624=m
CONFIG_VIDEO_CCS=m
CONFIG_VIDEO_ET8EK8=m
CONFIG_VIDEO_M5MOLS=m
# end of Camera sensor devices

#
# Lens drivers
#
CONFIG_VIDEO_AD5820=m
CONFIG_VIDEO_AK7375=m
CONFIG_VIDEO_DW9714=m
CONFIG_VIDEO_DW9768=m
CONFIG_VIDEO_DW9807_VCM=m
# end of Lens drivers

#
# Flash devices
#
CONFIG_VIDEO_ADP1653=m
CONFIG_VIDEO_LM3560=m
CONFIG_VIDEO_LM3646=m
# end of Flash devices

#
# Audio decoders, processors and mixers
#
CONFIG_VIDEO_CS3308=m
CONFIG_VIDEO_CS5345=m
CONFIG_VIDEO_CS53L32A=m
CONFIG_VIDEO_MSP3400=m
CONFIG_VIDEO_SONY_BTF_MPX=m
CONFIG_VIDEO_TDA1997X=m
CONFIG_VIDEO_TDA7432=m
CONFIG_VIDEO_TDA9840=m
CONFIG_VIDEO_TEA6415C=m
CONFIG_VIDEO_TEA6420=m
CONFIG_VIDEO_TLV320AIC23B=m
CONFIG_VIDEO_TVAUDIO=m
CONFIG_VIDEO_UDA1342=m
CONFIG_VIDEO_VP27SMPX=m
CONFIG_VIDEO_WM8739=m
CONFIG_VIDEO_WM8775=m
# end of Audio decoders, processors and mixers

#
# RDS decoders
#
CONFIG_VIDEO_SAA6588=m
# end of RDS decoders

#
# Video decoders
#
CONFIG_VIDEO_ADV7180=m
CONFIG_VIDEO_ADV7183=m
CONFIG_VIDEO_ADV748X=m
CONFIG_VIDEO_ADV7604=m
CONFIG_VIDEO_ADV7604_CEC=y
CONFIG_VIDEO_ADV7842=m
CONFIG_VIDEO_ADV7842_CEC=y
CONFIG_VIDEO_BT819=m
CONFIG_VIDEO_BT856=m
CONFIG_VIDEO_BT866=m
CONFIG_VIDEO_ISL7998X=m
CONFIG_VIDEO_KS0127=m
CONFIG_VIDEO_MAX9286=m
CONFIG_VIDEO_ML86V7667=m
CONFIG_VIDEO_SAA7110=m
CONFIG_VIDEO_SAA711X=m
CONFIG_VIDEO_TC358743=m
CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TVP514X=m
CONFIG_VIDEO_TVP5150=m
CONFIG_VIDEO_TVP7002=m
CONFIG_VIDEO_TW2804=m
CONFIG_VIDEO_TW9903=m
CONFIG_VIDEO_TW9906=m
CONFIG_VIDEO_TW9910=m
CONFIG_VIDEO_VPX3220=m

#
# Video and audio decoders
#
CONFIG_VIDEO_SAA717X=m
CONFIG_VIDEO_CX25840=m
# end of Video decoders

#
# Video encoders
#
CONFIG_VIDEO_AD9389B=m
CONFIG_VIDEO_ADV7170=m
CONFIG_VIDEO_ADV7175=m
CONFIG_VIDEO_ADV7343=m
CONFIG_VIDEO_ADV7393=m
CONFIG_VIDEO_ADV7511=m
CONFIG_VIDEO_ADV7511_CEC=y
CONFIG_VIDEO_AK881X=m
CONFIG_VIDEO_SAA7127=m
CONFIG_VIDEO_SAA7185=m
CONFIG_VIDEO_THS8200=m
# end of Video encoders

#
# Video improvement chips
#
CONFIG_VIDEO_UPD64031A=m
CONFIG_VIDEO_UPD64083=m
# end of Video improvement chips

#
# Audio/Video compression chips
#
CONFIG_VIDEO_SAA6752HS=m
# end of Audio/Video compression chips

#
# SDR tuner chips
#
CONFIG_SDR_MAX2175=m
# end of SDR tuner chips

#
# Miscellaneous helper chips
#
CONFIG_VIDEO_I2C=m
CONFIG_VIDEO_M52790=m
CONFIG_VIDEO_ST_MIPID02=m
CONFIG_VIDEO_THS7303=m
# end of Miscellaneous helper chips

#
# Media SPI Adapters
#
CONFIG_CXD2880_SPI_DRV=m
CONFIG_VIDEO_GS1662=m
# end of Media SPI Adapters

CONFIG_MEDIA_TUNER=m

#
# Customize TV tuners
#
CONFIG_MEDIA_TUNER_E4000=m
CONFIG_MEDIA_TUNER_FC0011=m
CONFIG_MEDIA_TUNER_FC0012=m
CONFIG_MEDIA_TUNER_FC0013=m
CONFIG_MEDIA_TUNER_FC2580=m
CONFIG_MEDIA_TUNER_IT913X=m
CONFIG_MEDIA_TUNER_M88RS6000T=m
CONFIG_MEDIA_TUNER_MAX2165=m
CONFIG_MEDIA_TUNER_MC44S803=m
CONFIG_MEDIA_TUNER_MSI001=m
CONFIG_MEDIA_TUNER_MT2060=m
CONFIG_MEDIA_TUNER_MT2063=m
CONFIG_MEDIA_TUNER_MT20XX=m
CONFIG_MEDIA_TUNER_MT2131=m
CONFIG_MEDIA_TUNER_MT2266=m
CONFIG_MEDIA_TUNER_MXL301RF=m
CONFIG_MEDIA_TUNER_MXL5005S=m
CONFIG_MEDIA_TUNER_MXL5007T=m
CONFIG_MEDIA_TUNER_QM1D1B0004=m
CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_QT1010=m
CONFIG_MEDIA_TUNER_R820T=m
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_TUNER_SIMPLE=m
CONFIG_MEDIA_TUNER_TDA18212=m
CONFIG_MEDIA_TUNER_TDA18218=m
CONFIG_MEDIA_TUNER_TDA18250=m
CONFIG_MEDIA_TUNER_TDA18271=m
CONFIG_MEDIA_TUNER_TDA827X=m
CONFIG_MEDIA_TUNER_TDA8290=m
CONFIG_MEDIA_TUNER_TDA9887=m
CONFIG_MEDIA_TUNER_TEA5761=m
CONFIG_MEDIA_TUNER_TEA5767=m
CONFIG_MEDIA_TUNER_TUA9001=m
CONFIG_MEDIA_TUNER_XC2028=m
CONFIG_MEDIA_TUNER_XC4000=m
CONFIG_MEDIA_TUNER_XC5000=m
# end of Customize TV tuners

#
# Customise DVB Frontends
#

#
# Multistandard (satellite) frontends
#
CONFIG_DVB_M88DS3103=m
CONFIG_DVB_MXL5XX=m
CONFIG_DVB_STB0899=m
CONFIG_DVB_STB6100=m
CONFIG_DVB_STV090x=m
CONFIG_DVB_STV0910=m
CONFIG_DVB_STV6110x=m
CONFIG_DVB_STV6111=m

#
# Multistandard (cable + terrestrial) frontends
#
CONFIG_DVB_DRXK=m
CONFIG_DVB_MN88472=m
CONFIG_DVB_MN88473=m
CONFIG_DVB_SI2165=m
CONFIG_DVB_TDA18271C2DD=m

#
# DVB-S (satellite) frontends
#
CONFIG_DVB_CX24110=m
CONFIG_DVB_CX24116=m
CONFIG_DVB_CX24117=m
CONFIG_DVB_CX24120=m
CONFIG_DVB_CX24123=m
CONFIG_DVB_DS3000=m
CONFIG_DVB_MB86A16=m
CONFIG_DVB_MT312=m
CONFIG_DVB_S5H1420=m
CONFIG_DVB_SI21XX=m
CONFIG_DVB_STB6000=m
CONFIG_DVB_STV0288=m
CONFIG_DVB_STV0299=m
CONFIG_DVB_STV0900=m
CONFIG_DVB_STV6110=m
CONFIG_DVB_TDA10071=m
CONFIG_DVB_TDA10086=m
CONFIG_DVB_TDA8083=m
CONFIG_DVB_TDA8261=m
CONFIG_DVB_TDA826X=m
CONFIG_DVB_TS2020=m
CONFIG_DVB_TUA6100=m
CONFIG_DVB_TUNER_CX24113=m
CONFIG_DVB_TUNER_ITD1000=m
CONFIG_DVB_VES1X93=m
CONFIG_DVB_ZL10036=m
CONFIG_DVB_ZL10039=m

#
# DVB-T (terrestrial) frontends
#
CONFIG_DVB_AF9013=m
CONFIG_DVB_AS102_FE=m
CONFIG_DVB_CX22700=m
CONFIG_DVB_CX22702=m
CONFIG_DVB_CXD2820R=m
CONFIG_DVB_CXD2841ER=m
CONFIG_DVB_DIB3000MB=m
CONFIG_DVB_DIB3000MC=m
CONFIG_DVB_DIB7000M=m
CONFIG_DVB_DIB7000P=m
CONFIG_DVB_DIB9000=m
CONFIG_DVB_DRXD=m
CONFIG_DVB_EC100=m
CONFIG_DVB_GP8PSK_FE=m
CONFIG_DVB_L64781=m
CONFIG_DVB_MT352=m
CONFIG_DVB_NXT6000=m
CONFIG_DVB_RTL2830=m
CONFIG_DVB_RTL2832=m
CONFIG_DVB_RTL2832_SDR=m
CONFIG_DVB_S5H1432=m
CONFIG_DVB_SI2168=m
CONFIG_DVB_SP887X=m
CONFIG_DVB_STV0367=m
CONFIG_DVB_TDA10048=m
CONFIG_DVB_TDA1004X=m
CONFIG_DVB_ZD1301_DEMOD=m
CONFIG_DVB_ZL10353=m
CONFIG_DVB_CXD2880=m

#
# DVB-C (cable) frontends
#
CONFIG_DVB_STV0297=m
CONFIG_DVB_TDA10021=m
CONFIG_DVB_TDA10023=m
CONFIG_DVB_VES1820=m

#
# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
#
CONFIG_DVB_AU8522=m
CONFIG_DVB_AU8522_DTV=m
CONFIG_DVB_AU8522_V4L=m
CONFIG_DVB_BCM3510=m
CONFIG_DVB_LG2160=m
CONFIG_DVB_LGDT3305=m
CONFIG_DVB_LGDT3306A=m
CONFIG_DVB_LGDT330X=m
CONFIG_DVB_MXL692=m
CONFIG_DVB_NXT200X=m
CONFIG_DVB_OR51132=m
CONFIG_DVB_OR51211=m
CONFIG_DVB_S5H1409=m
CONFIG_DVB_S5H1411=m

#
# ISDB-T (terrestrial) frontends
#
CONFIG_DVB_DIB8000=m
CONFIG_DVB_MB86A20S=m
CONFIG_DVB_S921=m

#
# ISDB-S (satellite) & ISDB-T (terrestrial) frontends
#
CONFIG_DVB_MN88443X=m
CONFIG_DVB_TC90522=m

#
# Digital terrestrial only tuners/PLL
#
CONFIG_DVB_PLL=m
CONFIG_DVB_TUNER_DIB0070=m
CONFIG_DVB_TUNER_DIB0090=m

#
# SEC control devices for DVB-S
#
CONFIG_DVB_A8293=m
CONFIG_DVB_AF9033=m
CONFIG_DVB_ASCOT2E=m
CONFIG_DVB_ATBM8830=m
CONFIG_DVB_HELENE=m
CONFIG_DVB_HORUS3A=m
CONFIG_DVB_ISL6405=m
CONFIG_DVB_ISL6421=m
CONFIG_DVB_ISL6423=m
CONFIG_DVB_IX2505V=m
CONFIG_DVB_LGS8GL5=m
CONFIG_DVB_LGS8GXX=m
CONFIG_DVB_LNBH25=m
CONFIG_DVB_LNBH29=m
CONFIG_DVB_LNBP21=m
CONFIG_DVB_LNBP22=m
CONFIG_DVB_M88RS2000=m
CONFIG_DVB_TDA665x=m
CONFIG_DVB_DRX39XYJ=m

#
# Common Interface (EN50221) controller drivers
#
CONFIG_DVB_CXD2099=m
CONFIG_DVB_SP2=m
# end of Customise DVB Frontends

#
# Tools to develop new frontends
#
CONFIG_DVB_DUMMY_FE=m
# end of Media ancillary drivers

#
# Graphics support
#
CONFIG_APERTURE_HELPERS=y
CONFIG_IMX_IPUV3_CORE=m
CONFIG_DRM=m
CONFIG_DRM_MIPI_DBI=m
CONFIG_DRM_MIPI_DSI=y
CONFIG_DRM_KUNIT_TEST=m
CONFIG_DRM_KMS_HELPER=m
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100
CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM=y
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_DP_AUX_BUS=m
CONFIG_DRM_DISPLAY_HELPER=m
CONFIG_DRM_DISPLAY_DP_HELPER=y
CONFIG_DRM_DISPLAY_HDCP_HELPER=y
CONFIG_DRM_DISPLAY_HDMI_HELPER=y
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
CONFIG_DRM_BUDDY=m
CONFIG_DRM_GEM_DMA_HELPER=m
CONFIG_DRM_GEM_SHMEM_HELPER=m
CONFIG_DRM_SCHED=m

#
# I2C encoder or helper chips
#
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_SIL164=m
CONFIG_DRM_I2C_NXP_TDA998X=m
CONFIG_DRM_I2C_NXP_TDA9950=m
# end of I2C encoder or helper chips

#
# ARM devices
#
CONFIG_DRM_HDLCD=m
CONFIG_DRM_HDLCD_SHOW_UNDERRUN=y
CONFIG_DRM_MALI_DISPLAY=m
CONFIG_DRM_KOMEDA=m
# end of ARM devices

CONFIG_DRM_KMB_DISPLAY=m
CONFIG_DRM_VGEM=m
CONFIG_DRM_VKMS=m
CONFIG_DRM_EXYNOS=m

#
# CRTCs
#
CONFIG_DRM_EXYNOS_FIMD=y
CONFIG_DRM_EXYNOS5433_DECON=y
CONFIG_DRM_EXYNOS7_DECON=y
CONFIG_DRM_EXYNOS_MIXER=y
CONFIG_DRM_EXYNOS_VIDI=y

#
# Encoders and Bridges
#
CONFIG_DRM_EXYNOS_DPI=y
CONFIG_DRM_EXYNOS_DSI=y
CONFIG_DRM_EXYNOS_DP=y
CONFIG_DRM_EXYNOS_HDMI=y
CONFIG_DRM_EXYNOS_MIC=y

#
# Sub-drivers
#
CONFIG_DRM_EXYNOS_G2D=y
CONFIG_DRM_EXYNOS_IPP=y
CONFIG_DRM_EXYNOS_FIMC=y
CONFIG_DRM_EXYNOS_ROTATOR=y
CONFIG_DRM_EXYNOS_SCALER=y
CONFIG_DRM_EXYNOS_GSC=y
CONFIG_DRM_ROCKCHIP=m
CONFIG_ROCKCHIP_VOP=y
CONFIG_ROCKCHIP_VOP2=y
CONFIG_ROCKCHIP_ANALOGIX_DP=y
CONFIG_ROCKCHIP_CDN_DP=y
CONFIG_ROCKCHIP_DW_HDMI=y
CONFIG_ROCKCHIP_DW_MIPI_DSI=y
CONFIG_ROCKCHIP_INNO_HDMI=y
CONFIG_ROCKCHIP_LVDS=y
CONFIG_ROCKCHIP_RGB=y
CONFIG_ROCKCHIP_RK3066_HDMI=y
CONFIG_DRM_UDL=m
CONFIG_DRM_RCAR_DW_HDMI=m
CONFIG_DRM_RCAR_USE_LVDS=y
CONFIG_DRM_RCAR_MIPI_DSI=m
CONFIG_DRM_SUN4I=m
CONFIG_DRM_SUN4I_HDMI=m
CONFIG_DRM_SUN4I_HDMI_CEC=y
CONFIG_DRM_SUN4I_BACKEND=m
CONFIG_DRM_SUN6I_DSI=m
CONFIG_DRM_SUN8I_DW_HDMI=m
CONFIG_DRM_SUN8I_MIXER=m
CONFIG_DRM_SUN8I_TCON_TOP=m
CONFIG_DRM_VIRTIO_GPU=m
CONFIG_DRM_MSM=m
CONFIG_DRM_MSM_GPU_STATE=y
CONFIG_DRM_MSM_GPU_SUDO=y
CONFIG_DRM_MSM_MDSS=y
CONFIG_DRM_MSM_MDP4=y
CONFIG_DRM_MSM_MDP5=y
CONFIG_DRM_MSM_DPU=y
CONFIG_DRM_MSM_DP=y
CONFIG_DRM_MSM_DSI=y
CONFIG_DRM_MSM_DSI_28NM_PHY=y
CONFIG_DRM_MSM_DSI_20NM_PHY=y
CONFIG_DRM_MSM_DSI_28NM_8960_PHY=y
CONFIG_DRM_MSM_DSI_14NM_PHY=y
CONFIG_DRM_MSM_DSI_10NM_PHY=y
CONFIG_DRM_MSM_DSI_7NM_PHY=y
CONFIG_DRM_MSM_HDMI=y
CONFIG_DRM_MSM_HDMI_HDCP=y
CONFIG_DRM_PANEL=y

#
# Display Panels
#
CONFIG_DRM_PANEL_ABT_Y030XX067A=m
CONFIG_DRM_PANEL_ARM_VERSATILE=m
CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596=m
CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0=m
CONFIG_DRM_PANEL_BOE_HIMAX8279D=m
CONFIG_DRM_PANEL_BOE_TV101WUM_NL6=m
CONFIG_DRM_PANEL_DSI_CM=m
CONFIG_DRM_PANEL_LVDS=m
CONFIG_DRM_PANEL_EBBG_FT8719=m
CONFIG_DRM_PANEL_ELIDA_KD35T133=m
CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02=m
CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
CONFIG_DRM_PANEL_ILITEK_IL9322=m
CONFIG_DRM_PANEL_ILITEK_ILI9341=m
CONFIG_DRM_PANEL_ILITEK_ILI9881C=m
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=m
CONFIG_DRM_PANEL_INNOLUX_P079ZCA=m
CONFIG_DRM_PANEL_JDI_LT070ME05000=m
CONFIG_DRM_PANEL_JDI_R63452=m
CONFIG_DRM_PANEL_KHADAS_TS050=m
CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04=m
CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W=m
CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829=m
CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
CONFIG_DRM_PANEL_LG_LB035Q02=m
CONFIG_DRM_PANEL_LG_LG4573=m
CONFIG_DRM_PANEL_NEC_NL8048HL11=m
CONFIG_DRM_PANEL_NEWVISION_NV3052C=m
CONFIG_DRM_PANEL_NOVATEK_NT35510=m
CONFIG_DRM_PANEL_NOVATEK_NT35560=m
CONFIG_DRM_PANEL_NOVATEK_NT35950=m
CONFIG_DRM_PANEL_NOVATEK_NT36672A=m
CONFIG_DRM_PANEL_NOVATEK_NT39016=m
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO=m
CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS=m
CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=m
CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
CONFIG_DRM_PANEL_RAYDIUM_RM67191=m
CONFIG_DRM_PANEL_RAYDIUM_RM68200=m
CONFIG_DRM_PANEL_RONBO_RB070D30=m
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
CONFIG_DRM_PANEL_SAMSUNG_S6D16D0=m
CONFIG_DRM_PANEL_SAMSUNG_S6D27A1=m
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0=m
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_SPI=m
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_DSI=m
CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01=m
CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m
CONFIG_DRM_PANEL_SAMSUNG_SOFEF00=m
CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m
CONFIG_DRM_PANEL_SHARP_LS037V7DW01=m
CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m
CONFIG_DRM_PANEL_SHARP_LS060T1SX01=m
CONFIG_DRM_PANEL_SITRONIX_ST7701=m
CONFIG_DRM_PANEL_SITRONIX_ST7703=m
CONFIG_DRM_PANEL_SITRONIX_ST7789V=m
CONFIG_DRM_PANEL_SONY_ACX565AKM=m
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=m
CONFIG_DRM_PANEL_TDO_TL070WSH30=m
CONFIG_DRM_PANEL_TPO_TD028TTEC1=m
CONFIG_DRM_PANEL_TPO_TD043MTEA1=m
CONFIG_DRM_PANEL_TPO_TPG110=m
CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m
CONFIG_DRM_PANEL_VISIONOX_RM69299=m
CONFIG_DRM_PANEL_WIDECHIPS_WS2401=m
CONFIG_DRM_PANEL_XINPENG_XPP055C272=m
# end of Display Panels

CONFIG_DRM_BRIDGE=y
CONFIG_DRM_PANEL_BRIDGE=y

#
# Display Interface Bridges
#
CONFIG_DRM_CDNS_DSI=m
CONFIG_DRM_CHIPONE_ICN6211=m
CONFIG_DRM_CHRONTEL_CH7033=m
CONFIG_DRM_CROS_EC_ANX7688=m
CONFIG_DRM_DISPLAY_CONNECTOR=m
CONFIG_DRM_FSL_LDB=m
CONFIG_DRM_ITE_IT6505=m
CONFIG_DRM_LONTIUM_LT8912B=m
CONFIG_DRM_LONTIUM_LT9211=m
CONFIG_DRM_LONTIUM_LT9611=m
CONFIG_DRM_LONTIUM_LT9611UXC=m
CONFIG_DRM_ITE_IT66121=m
CONFIG_DRM_LVDS_CODEC=m
CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW=m
CONFIG_DRM_NWL_MIPI_DSI=m
CONFIG_DRM_NXP_PTN3460=m
CONFIG_DRM_PARADE_PS8622=m
CONFIG_DRM_PARADE_PS8640=m
CONFIG_DRM_SIL_SII8620=m
CONFIG_DRM_SII902X=m
CONFIG_DRM_SII9234=m
CONFIG_DRM_SIMPLE_BRIDGE=m
CONFIG_DRM_THINE_THC63LVD1024=m
CONFIG_DRM_TOSHIBA_TC358762=m
CONFIG_DRM_TOSHIBA_TC358764=m
CONFIG_DRM_TOSHIBA_TC358767=m
CONFIG_DRM_TOSHIBA_TC358768=m
CONFIG_DRM_TOSHIBA_TC358775=m
CONFIG_DRM_TI_DLPC3433=m
CONFIG_DRM_TI_TFP410=m
CONFIG_DRM_TI_SN65DSI83=m
CONFIG_DRM_TI_SN65DSI86=m
CONFIG_DRM_TI_TPD12S015=m
CONFIG_DRM_ANALOGIX_ANX6345=m
CONFIG_DRM_ANALOGIX_ANX78XX=m
CONFIG_DRM_ANALOGIX_DP=m
CONFIG_DRM_ANALOGIX_ANX7625=m
CONFIG_DRM_I2C_ADV7511=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
CONFIG_DRM_I2C_ADV7511_CEC=y
CONFIG_DRM_CDNS_MHDP8546=m
CONFIG_DRM_CDNS_MHDP8546_J721E=y
CONFIG_DRM_IMX8QM_LDB=m
CONFIG_DRM_IMX8QXP_LDB=m
CONFIG_DRM_IMX8QXP_PIXEL_COMBINER=m
CONFIG_DRM_IMX8QXP_PIXEL_LINK=m
CONFIG_DRM_IMX8QXP_PIXEL_LINK_TO_DPI=m
CONFIG_DRM_DW_HDMI=m
CONFIG_DRM_DW_HDMI_AHB_AUDIO=m
CONFIG_DRM_DW_HDMI_I2S_AUDIO=m
CONFIG_DRM_DW_HDMI_GP_AUDIO=m
CONFIG_DRM_DW_HDMI_CEC=m
CONFIG_DRM_DW_MIPI_DSI=m
# end of Display Interface Bridges

CONFIG_DRM_IMX=m
CONFIG_DRM_IMX_PARALLEL_DISPLAY=m
CONFIG_DRM_IMX_TVE=m
CONFIG_DRM_IMX_LDB=m
CONFIG_DRM_IMX_HDMI=m
CONFIG_DRM_INGENIC=m
CONFIG_DRM_INGENIC_IPU=y
CONFIG_DRM_V3D=m
CONFIG_DRM_ETNAVIV=m
CONFIG_DRM_ETNAVIV_THERMAL=y
CONFIG_DRM_LOGICVC=m
CONFIG_DRM_MXS=y
CONFIG_DRM_MXSFB=m
CONFIG_DRM_IMX_LCDIF=m
CONFIG_DRM_ARCPGU=m
CONFIG_DRM_GM12U320=m
CONFIG_DRM_PANEL_MIPI_DBI=m
CONFIG_DRM_SIMPLEDRM=m
CONFIG_TINYDRM_HX8357D=m
CONFIG_TINYDRM_ILI9163=m
CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_ILI9341=m
CONFIG_TINYDRM_ILI9486=m
CONFIG_TINYDRM_MI0283QT=m
CONFIG_TINYDRM_REPAPER=m
CONFIG_TINYDRM_ST7586=m
CONFIG_TINYDRM_ST7735R=m
CONFIG_DRM_PL111=m
CONFIG_DRM_TVE200=m
CONFIG_DRM_LIMA=m
CONFIG_DRM_ASPEED_GFX=m
CONFIG_DRM_MCDE=m
CONFIG_DRM_TIDSS=m
CONFIG_DRM_ZYNQMP_DPSUB=m
CONFIG_DRM_GUD=m
CONFIG_DRM_SSD130X=m
CONFIG_DRM_SSD130X_I2C=m
CONFIG_DRM_SSD130X_SPI=m
CONFIG_DRM_SPRD=m
CONFIG_DRM_LEGACY=y
CONFIG_DRM_EXPORT_FOR_TESTS=y
CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=m
CONFIG_DRM_NOMODESET=y
CONFIG_DRM_LIB_RANDOM=y

#
# Frame buffer Devices
#
CONFIG_FB_CMDLINE=y
CONFIG_FB_NOTIFY=y
CONFIG_FB=m
CONFIG_FIRMWARE_EDID=y
CONFIG_FB_CFB_FILLRECT=m
CONFIG_FB_CFB_COPYAREA=m
CONFIG_FB_CFB_IMAGEBLIT=m
CONFIG_FB_CFB_REV_PIXELS_IN_BYTE=y
CONFIG_FB_SYS_FILLRECT=m
CONFIG_FB_SYS_COPYAREA=m
CONFIG_FB_SYS_IMAGEBLIT=m
CONFIG_FB_FOREIGN_ENDIAN=y
CONFIG_FB_BOTH_ENDIAN=y
# CONFIG_FB_BIG_ENDIAN is not set
# CONFIG_FB_LITTLE_ENDIAN is not set
CONFIG_FB_SYS_FOPS=m
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_BACKLIGHT=m
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y

#
# Frame buffer hardware drivers
#
CONFIG_FB_CIRRUS=m
CONFIG_FB_CLPS711X=m
CONFIG_FB_IMX=m
CONFIG_FB_AMIGA=m
CONFIG_FB_AMIGA_OCS=y
CONFIG_FB_AMIGA_ECS=y
CONFIG_FB_AMIGA_AGA=y
CONFIG_FB_ARC=m
CONFIG_FB_UVESA=m
CONFIG_FB_PVR2=m
CONFIG_FB_OPENCORES=m
CONFIG_FB_S1D13XXX=m
CONFIG_FB_ATMEL=m
CONFIG_FB_ATY=m
CONFIG_FB_ATY_GX=y
CONFIG_FB_ATY_BACKLIGHT=y
CONFIG_FB_PXA168=m
CONFIG_FB_W100=m
CONFIG_FB_SH_MOBILE_LCDC=m
CONFIG_FB_TMIO=m
CONFIG_FB_TMIO_ACCELL=y
CONFIG_FB_S3C=m
CONFIG_FB_S3C_DEBUG_REGWRITE=y
CONFIG_FB_SM501=m
CONFIG_FB_SMSCUFX=m
CONFIG_FB_UDL=m
CONFIG_FB_IBM_GXT4500=m
CONFIG_FB_GOLDFISH=m
CONFIG_FB_DA8XX=m
CONFIG_FB_VIRTUAL=m
CONFIG_FB_METRONOME=m
CONFIG_FB_BROADSHEET=m
CONFIG_FB_SIMPLE=m
CONFIG_FB_SSD1307=m
CONFIG_FB_OMAP2=m
CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
CONFIG_FB_OMAP2_NUM_FBS=3
CONFIG_FB_OMAP2_DSS_INIT=y
CONFIG_FB_OMAP2_DSS=m
CONFIG_FB_OMAP2_DSS_DEBUG=y
CONFIG_FB_OMAP2_DSS_DEBUGFS=y
CONFIG_FB_OMAP2_DSS_COLLECT_IRQ_STATS=y
CONFIG_FB_OMAP2_DSS_DPI=y
CONFIG_FB_OMAP2_DSS_VENC=y
CONFIG_FB_OMAP2_DSS_HDMI_COMMON=y
CONFIG_FB_OMAP4_DSS_HDMI=y
CONFIG_FB_OMAP5_DSS_HDMI=y
CONFIG_FB_OMAP2_DSS_SDI=y
CONFIG_FB_OMAP2_DSS_DSI=y
CONFIG_FB_OMAP2_DSS_MIN_FCK_PER_PCK=0
CONFIG_FB_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y

#
# OMAPFB Panel and Encoder Drivers
#
CONFIG_FB_OMAP2_ENCODER_OPA362=m
CONFIG_FB_OMAP2_ENCODER_TFP410=m
CONFIG_FB_OMAP2_ENCODER_TPD12S015=m
CONFIG_FB_OMAP2_CONNECTOR_DVI=m
CONFIG_FB_OMAP2_CONNECTOR_HDMI=m
CONFIG_FB_OMAP2_CONNECTOR_ANALOG_TV=m
CONFIG_FB_OMAP2_PANEL_DPI=m
CONFIG_FB_OMAP2_PANEL_LGPHILIPS_LB035Q02=m
# end of OMAPFB Panel and Encoder Drivers

CONFIG_MMP_DISP=m
CONFIG_MMP_DISP_CONTROLLER=y
CONFIG_MMP_DISP_SPI=y
CONFIG_MMP_PANEL_TPOHVGA=y
CONFIG_MMP_FB=m
# end of Frame buffer Devices

#
# Backlight & LCD device support
#
CONFIG_LCD_CLASS_DEVICE=m
CONFIG_LCD_L4F00242T03=m
CONFIG_LCD_LMS283GF05=m
CONFIG_LCD_LTV350QV=m
CONFIG_LCD_ILI922X=m
CONFIG_LCD_ILI9320=m
CONFIG_LCD_TDO24M=m
CONFIG_LCD_VGG2432A4=m
CONFIG_LCD_PLATFORM=m
CONFIG_LCD_AMS369FG06=m
CONFIG_LCD_LMS501KF03=m
CONFIG_LCD_HX8357=m
CONFIG_LCD_OTM3225A=m
CONFIG_BACKLIGHT_CLASS_DEVICE=m
CONFIG_BACKLIGHT_ATMEL_LCDC=y
CONFIG_BACKLIGHT_KTD253=m
CONFIG_BACKLIGHT_LM3533=m
CONFIG_BACKLIGHT_OMAP1=m
CONFIG_BACKLIGHT_PWM=m
CONFIG_BACKLIGHT_DA9052=m
CONFIG_BACKLIGHT_MT6370=m
CONFIG_BACKLIGHT_QCOM_WLED=m
CONFIG_BACKLIGHT_RT4831=m
CONFIG_BACKLIGHT_WM831X=m
CONFIG_BACKLIGHT_ADP8860=m
CONFIG_BACKLIGHT_ADP8870=m
CONFIG_BACKLIGHT_PCF50633=m
CONFIG_BACKLIGHT_LM3630A=m
CONFIG_BACKLIGHT_LM3639=m
CONFIG_BACKLIGHT_LP855X=m
CONFIG_BACKLIGHT_SKY81452=m
CONFIG_BACKLIGHT_TPS65217=m
CONFIG_BACKLIGHT_GPIO=m
CONFIG_BACKLIGHT_LV5207LP=m
CONFIG_BACKLIGHT_BD6107=m
CONFIG_BACKLIGHT_ARCXCNN=m
CONFIG_BACKLIGHT_RAVE_SP=m
CONFIG_BACKLIGHT_LED=m
# end of Backlight & LCD device support

CONFIG_VIDEOMODE_HELPERS=y
CONFIG_HDMI=y

#
# Console display driver support
#
CONFIG_DUMMY_CONSOLE=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
# end of Console display driver support

CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_LOGO_MAC_CLUT224=y
# end of Graphics support

CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE=y
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
CONFIG_DMASOUND_ATARI=m
CONFIG_DMASOUND_PAULA=m
CONFIG_DMASOUND_Q40=m
CONFIG_DMASOUND=m
CONFIG_SND=m
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
CONFIG_SND_PCM_ELD=y
CONFIG_SND_PCM_IEC958=y
CONFIG_SND_DMAENGINE_PCM=m
CONFIG_SND_HWDEP=m
CONFIG_SND_SEQ_DEVICE=m
CONFIG_SND_RAWMIDI=m
CONFIG_SND_COMPRESS_OFFLOAD=m
CONFIG_SND_JACK=y
CONFIG_SND_JACK_INPUT_DEV=y
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_PCM_TIMER=y
CONFIG_SND_HRTIMER=m
CONFIG_SND_DYNAMIC_MINORS=y
CONFIG_SND_MAX_CARDS=32
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_PROC_FS=y
CONFIG_SND_VERBOSE_PROCFS=y
CONFIG_SND_VERBOSE_PRINTK=y
CONFIG_SND_CTL_FAST_LOOKUP=y
CONFIG_SND_DEBUG=y
CONFIG_SND_DEBUG_VERBOSE=y
CONFIG_SND_PCM_XRUN_DEBUG=y
CONFIG_SND_CTL_INPUT_VALIDATION=y
CONFIG_SND_CTL_DEBUG=y
CONFIG_SND_JACK_INJECTION_DEBUG=y
CONFIG_SND_VMASTER=y
CONFIG_SND_CTL_LED=m
CONFIG_SND_SEQUENCER=m
CONFIG_SND_SEQ_DUMMY=m
CONFIG_SND_SEQUENCER_OSS=m
CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
CONFIG_SND_SEQ_MIDI_EVENT=m
CONFIG_SND_SEQ_MIDI=m
CONFIG_SND_SEQ_VIRMIDI=m
CONFIG_SND_MPU401_UART=m
CONFIG_SND_VX_LIB=m
CONFIG_SND_AC97_CODEC=m
CONFIG_SND_DRIVERS=y
CONFIG_SND_DUMMY=m
CONFIG_SND_ALOOP=m
CONFIG_SND_VIRMIDI=m
CONFIG_SND_MTPAV=m
CONFIG_SND_MTS64=m
CONFIG_SND_SERIAL_U16550=m
CONFIG_SND_SERIAL_GENERIC=m
CONFIG_SND_MPU401=m
CONFIG_SND_PORTMAN2X4=m
CONFIG_SND_AC97_POWER_SAVE=y
CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0

#
# HD-Audio
#
CONFIG_SND_HDA=m
CONFIG_SND_HDA_GENERIC_LEDS=y
CONFIG_SND_HDA_HWDEP=y
CONFIG_SND_HDA_RECONFIG=y
CONFIG_SND_HDA_INPUT_BEEP=y
CONFIG_SND_HDA_INPUT_BEEP_MODE=1
CONFIG_SND_HDA_PATCH_LOADER=y
CONFIG_SND_HDA_CODEC_REALTEK=m
CONFIG_SND_HDA_CODEC_ANALOG=m
CONFIG_SND_HDA_CODEC_SIGMATEL=m
CONFIG_SND_HDA_CODEC_VIA=m
CONFIG_SND_HDA_CODEC_HDMI=m
CONFIG_SND_HDA_CODEC_CIRRUS=m
CONFIG_SND_HDA_CODEC_CS8409=m
CONFIG_SND_HDA_CODEC_CONEXANT=m
CONFIG_SND_HDA_CODEC_CA0110=m
CONFIG_SND_HDA_CODEC_CA0132=m
CONFIG_SND_HDA_CODEC_CA0132_DSP=y
CONFIG_SND_HDA_CODEC_CMEDIA=m
CONFIG_SND_HDA_CODEC_SI3054=m
CONFIG_SND_HDA_GENERIC=m
# end of HD-Audio

CONFIG_SND_HDA_CORE=m
CONFIG_SND_HDA_DSP_LOADER=y
CONFIG_SND_HDA_EXT_CORE=m
CONFIG_SND_HDA_PREALLOC_SIZE=64
CONFIG_SND_INTEL_DSP_CONFIG=m
CONFIG_SND_PXA2XX_LIB=m
CONFIG_SND_SPI=y
CONFIG_SND_AT73C213=m
CONFIG_SND_AT73C213_TARGET_BITRATE=48000
CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=m
CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y
CONFIG_SND_USB_UA101=m
CONFIG_SND_USB_CAIAQ=m
CONFIG_SND_USB_CAIAQ_INPUT=y
CONFIG_SND_USB_US122L=m
CONFIG_SND_USB_6FIRE=m
CONFIG_SND_USB_HIFACE=m
CONFIG_SND_BCD2000=m
CONFIG_SND_USB_LINE6=m
CONFIG_SND_USB_POD=m
CONFIG_SND_USB_PODHD=m
CONFIG_SND_USB_TONEPORT=m
CONFIG_SND_USB_VARIAX=m
CONFIG_SND_FIREWIRE=y
CONFIG_SND_FIREWIRE_LIB=m
CONFIG_SND_DICE=m
CONFIG_SND_OXFW=m
CONFIG_SND_ISIGHT=m
CONFIG_SND_FIREWORKS=m
CONFIG_SND_BEBOB=m
CONFIG_SND_FIREWIRE_DIGI00X=m
CONFIG_SND_FIREWIRE_TASCAM=m
CONFIG_SND_FIREWIRE_MOTU=m
CONFIG_SND_FIREFACE=m
CONFIG_SND_PCMCIA=y
CONFIG_SND_VXPOCKET=m
CONFIG_SND_PDAUDIOCF=m
CONFIG_SND_SOC=m
CONFIG_SND_SOC_AC97_BUS=y
CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
CONFIG_SND_SOC_COMPRESS=y
CONFIG_SND_SOC_TOPOLOGY=y
CONFIG_SND_SOC_TOPOLOGY_KUNIT_TEST=m
CONFIG_SND_SOC_UTILS_KUNIT_TEST=m
CONFIG_SND_SOC_ADI=m
CONFIG_SND_SOC_ADI_AXI_I2S=m
CONFIG_SND_SOC_ADI_AXI_SPDIF=m
CONFIG_SND_SOC_AMD_ACP=m
CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
CONFIG_SND_AMD_ACP_CONFIG=m
CONFIG_SND_SOC_APPLE_MCA=m
CONFIG_SND_ATMEL_SOC=m
CONFIG_SND_ATMEL_SOC_PDC=y
CONFIG_SND_ATMEL_SOC_DMA=y
CONFIG_SND_ATMEL_SOC_SSC=m
CONFIG_SND_ATMEL_SOC_SSC_PDC=m
CONFIG_SND_ATMEL_SOC_SSC_DMA=m
CONFIG_SND_AT91_SOC_SAM9G20_WM8731=m
CONFIG_SND_ATMEL_SOC_WM8904=m
CONFIG_SND_AT91_SOC_SAM9X5_WM8731=m
CONFIG_SND_ATMEL_SOC_CLASSD=m
CONFIG_SND_ATMEL_SOC_PDMIC=m
CONFIG_SND_ATMEL_SOC_I2S=m
CONFIG_SND_SOC_MIKROE_PROTO=m
CONFIG_SND_MCHP_SOC_I2S_MCC=m
CONFIG_SND_MCHP_SOC_SPDIFTX=m
CONFIG_SND_MCHP_SOC_SPDIFRX=m
CONFIG_SND_MCHP_SOC_PDMC=m
CONFIG_SND_BCM2835_SOC_I2S=m
CONFIG_SND_SOC_CYGNUS=m
CONFIG_SND_BCM63XX_I2S_WHISTLER=m
CONFIG_SND_EP93XX_SOC=m
CONFIG_SND_DESIGNWARE_I2S=m
CONFIG_SND_DESIGNWARE_PCM=y

#
# SoC Audio for Freescale CPUs
#

#
# Common SoC Audio options for Freescale CPUs:
#
CONFIG_SND_SOC_FSL_ASRC=m
CONFIG_SND_SOC_FSL_SAI=m
CONFIG_SND_SOC_FSL_MQS=m
CONFIG_SND_SOC_FSL_AUDMIX=m
CONFIG_SND_SOC_FSL_SSI=m
CONFIG_SND_SOC_FSL_SPDIF=m
CONFIG_SND_SOC_FSL_ESAI=m
CONFIG_SND_SOC_FSL_MICFIL=m
CONFIG_SND_SOC_FSL_EASRC=m
CONFIG_SND_SOC_FSL_XCVR=m
CONFIG_SND_SOC_FSL_AUD2HTX=m
CONFIG_SND_SOC_FSL_UTILS=m
CONFIG_SND_SOC_FSL_RPMSG=m
CONFIG_SND_SOC_IMX_PCM_DMA=m
CONFIG_SND_SOC_IMX_AUDIO_RPMSG=m
CONFIG_SND_SOC_IMX_PCM_RPMSG=m
CONFIG_SND_SOC_IMX_AUDMUX=m
CONFIG_SND_IMX_SOC=m

#
# SoC Audio support for Freescale i.MX boards:
#
CONFIG_SND_SOC_IMX_ES8328=m
CONFIG_SND_SOC_IMX_SGTL5000=m
CONFIG_SND_SOC_IMX_SPDIF=m
CONFIG_SND_SOC_FSL_ASOC_CARD=m
CONFIG_SND_SOC_IMX_AUDMIX=m
CONFIG_SND_SOC_IMX_HDMI=m
CONFIG_SND_SOC_IMX_RPMSG=m
CONFIG_SND_SOC_IMX_CARD=m
# end of SoC Audio for Freescale CPUs

CONFIG_SND_I2S_HI6210_I2S=m
CONFIG_SND_JZ4740_SOC_I2S=m
CONFIG_SND_KIRKWOOD_SOC=m
CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB=m
CONFIG_SND_SOC_IMG=y
CONFIG_SND_SOC_IMG_I2S_IN=m
CONFIG_SND_SOC_IMG_I2S_OUT=m
CONFIG_SND_SOC_IMG_PARALLEL_OUT=m
CONFIG_SND_SOC_IMG_SPDIF_IN=m
CONFIG_SND_SOC_IMG_SPDIF_OUT=m
CONFIG_SND_SOC_IMG_PISTACHIO_INTERNAL_DAC=m
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
CONFIG_SND_SOC_ACPI_INTEL_MATCH=m
CONFIG_SND_SOC_INTEL_KEEMBAY=m
CONFIG_SND_SOC_INTEL_MACH=y
CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y
CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH=m
CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m
CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m
CONFIG_SND_SOC_MEDIATEK=m
CONFIG_SND_SOC_MT8186=m
CONFIG_SND_SOC_MT8186_MT6366_DA7219_MAX98357=m
CONFIG_SND_SOC_MT8186_MT6366_RT1019_RT5682S=m
CONFIG_SND_SOC_MTK_BTCVSD=m
CONFIG_SND_SOC_MT8195=m
CONFIG_SND_SOC_MT8195_MT6359=m

#
# ASoC support for Amlogic platforms
#
CONFIG_SND_MESON_AIU=m
CONFIG_SND_MESON_AXG_FIFO=m
CONFIG_SND_MESON_AXG_FRDDR=m
CONFIG_SND_MESON_AXG_TODDR=m
CONFIG_SND_MESON_AXG_TDM_FORMATTER=m
CONFIG_SND_MESON_AXG_TDM_INTERFACE=m
CONFIG_SND_MESON_AXG_TDMIN=m
CONFIG_SND_MESON_AXG_TDMOUT=m
CONFIG_SND_MESON_AXG_SOUND_CARD=m
CONFIG_SND_MESON_AXG_SPDIFOUT=m
CONFIG_SND_MESON_AXG_SPDIFIN=m
CONFIG_SND_MESON_AXG_PDM=m
CONFIG_SND_MESON_CARD_UTILS=m
CONFIG_SND_MESON_CODEC_GLUE=m
CONFIG_SND_MESON_GX_SOUND_CARD=m
CONFIG_SND_MESON_G12A_TOACODEC=m
CONFIG_SND_MESON_G12A_TOHDMITX=m
CONFIG_SND_SOC_MESON_T9015=m
# end of ASoC support for Amlogic platforms

CONFIG_SND_MXS_SOC=m
CONFIG_SND_SOC_MXS_SGTL5000=m
CONFIG_SND_PXA2XX_SOC=m
CONFIG_SND_SOC_QCOM=m
CONFIG_SND_SOC_LPASS_CPU=m
CONFIG_SND_SOC_LPASS_HDMI=m
CONFIG_SND_SOC_LPASS_PLATFORM=m
CONFIG_SND_SOC_LPASS_CDC_DMA=m
CONFIG_SND_SOC_LPASS_IPQ806X=m
CONFIG_SND_SOC_LPASS_APQ8016=m
CONFIG_SND_SOC_LPASS_SC7180=m
CONFIG_SND_SOC_LPASS_SC7280=m
CONFIG_SND_SOC_STORM=m
CONFIG_SND_SOC_APQ8016_SBC=m
CONFIG_SND_SOC_QCOM_COMMON=m
CONFIG_SND_SOC_QDSP6_COMMON=m
CONFIG_SND_SOC_QDSP6_CORE=m
CONFIG_SND_SOC_QDSP6_AFE=m
CONFIG_SND_SOC_QDSP6_AFE_DAI=m
CONFIG_SND_SOC_QDSP6_AFE_CLOCKS=m
CONFIG_SND_SOC_QDSP6_ADM=m
CONFIG_SND_SOC_QDSP6_ROUTING=m
CONFIG_SND_SOC_QDSP6_ASM=m
CONFIG_SND_SOC_QDSP6_ASM_DAI=m
CONFIG_SND_SOC_QDSP6_APM_DAI=m
CONFIG_SND_SOC_QDSP6_APM_LPASS_DAI=m
CONFIG_SND_SOC_QDSP6_APM=m
CONFIG_SND_SOC_QDSP6_PRM_LPASS_CLOCKS=m
CONFIG_SND_SOC_QDSP6_PRM=m
CONFIG_SND_SOC_QDSP6=m
CONFIG_SND_SOC_MSM8996=m
CONFIG_SND_SOC_SDM845=m
CONFIG_SND_SOC_SM8250=m
CONFIG_SND_SOC_SC8280XP=m
CONFIG_SND_SOC_SC7180=m
CONFIG_SND_SOC_SC7280=m
CONFIG_SND_SOC_ROCKCHIP=m
CONFIG_SND_SOC_ROCKCHIP_I2S=m
CONFIG_SND_SOC_ROCKCHIP_I2S_TDM=m
CONFIG_SND_SOC_ROCKCHIP_PDM=m
CONFIG_SND_SOC_ROCKCHIP_SPDIF=m
CONFIG_SND_SOC_ROCKCHIP_MAX98090=m
CONFIG_SND_SOC_ROCKCHIP_RT5645=m
CONFIG_SND_SOC_RK3288_HDMI_ANALOG=m
CONFIG_SND_SOC_RK3399_GRU_SOUND=m
CONFIG_SND_SOC_SAMSUNG=m
CONFIG_SND_S3C24XX_I2S=m
CONFIG_SND_SAMSUNG_PCM=m
CONFIG_SND_SAMSUNG_SPDIF=m
CONFIG_SND_SAMSUNG_I2S=m
CONFIG_SND_SOC_SAMSUNG_NEO1973_WM8753=m
CONFIG_SND_SOC_SAMSUNG_SMDK_WM8580=m
CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X=m
CONFIG_SND_SOC_SAMSUNG_SIMTEC=m
CONFIG_SND_SOC_SAMSUNG_SIMTEC_TLV320AIC23=m
CONFIG_SND_SOC_SAMSUNG_SIMTEC_HERMES=m
CONFIG_SND_SOC_SAMSUNG_H1940_UDA1380=m
CONFIG_SND_SOC_SAMSUNG_RX1950_UDA1380=m
CONFIG_SND_SOC_SMARTQ=m
CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF=m
CONFIG_SND_SOC_SPEYSIDE=m
CONFIG_SND_SOC_TOBERMORY=m
CONFIG_SND_SOC_BELLS=m
CONFIG_SND_SOC_LOWLAND=m
CONFIG_SND_SOC_LITTLEMILL=m
CONFIG_SND_SOC_SNOW=m
CONFIG_SND_SOC_ODROID=m
CONFIG_SND_SOC_ARNDALE=m
CONFIG_SND_SOC_SAMSUNG_TM2_WM5110=m
CONFIG_SND_SOC_SAMSUNG_ARIES_WM8994=m
CONFIG_SND_SOC_SAMSUNG_MIDAS_WM1811=m

#
# SoC Audio support for Renesas SoCs
#
CONFIG_SND_SOC_SH4_FSI=m
CONFIG_SND_SOC_RCAR=m
CONFIG_SND_SOC_RZ=m
# end of SoC Audio support for Renesas SoCs

CONFIG_SND_SOC_SOF_TOPLEVEL=y
CONFIG_SND_SOC_SOF_ACPI=m
CONFIG_SND_SOC_SOF_ACPI_DEV=m
CONFIG_SND_SOC_SOF_OF=m
CONFIG_SND_SOC_SOF_OF_DEV=m
CONFIG_SND_SOC_SOF_COMPRESS=y
CONFIG_SND_SOC_SOF_CLIENT=m
CONFIG_SND_SOC_SOF_DEVELOPER_SUPPORT=y
CONFIG_SND_SOC_SOF_FORCE_PROBE_WORKQUEUE=y
CONFIG_SND_SOC_SOF_NOCODEC=m
CONFIG_SND_SOC_SOF_NOCODEC_SUPPORT=y
CONFIG_SND_SOC_SOF_STRICT_ABI_CHECKS=y
CONFIG_SND_SOC_SOF_DEBUG=y
CONFIG_SND_SOC_SOF_FORCE_NOCODEC_MODE=y
CONFIG_SND_SOC_SOF_DEBUG_XRUN_STOP=y
CONFIG_SND_SOC_SOF_DEBUG_VERBOSE_IPC=y
CONFIG_SND_SOC_SOF_DEBUG_FORCE_IPC_POSITION=y
CONFIG_SND_SOC_SOF_DEBUG_ENABLE_DEBUGFS_CACHE=y
CONFIG_SND_SOC_SOF_DEBUG_ENABLE_FIRMWARE_TRACE=y
CONFIG_SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST=m
CONFIG_SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST_NUM=2
CONFIG_SND_SOC_SOF_DEBUG_IPC_MSG_INJECTOR=m
CONFIG_SND_SOC_SOF_DEBUG_RETAIN_DSP_CONTEXT=y
CONFIG_SND_SOC_SOF=m
CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE=y
CONFIG_SND_SOC_SOF_IPC3=y
CONFIG_SND_SOC_SOF_AMD_TOPLEVEL=m
CONFIG_SND_SOC_SOF_IMX_TOPLEVEL=y
CONFIG_SND_SOC_SOF_IMX_COMMON=m
CONFIG_SND_SOC_SOF_IMX8=m
CONFIG_SND_SOC_SOF_IMX8M=m
CONFIG_SND_SOC_SOF_IMX8ULP=m
CONFIG_SND_SOC_SOF_INTEL_TOPLEVEL=y
CONFIG_SND_SOC_SOF_INTEL_HIFI_EP_IPC=m
CONFIG_SND_SOC_SOF_INTEL_ATOM_HIFI_EP=m
CONFIG_SND_SOC_SOF_INTEL_COMMON=m
CONFIG_SND_SOC_SOF_BAYTRAIL=m
CONFIG_SND_SOC_SOF_BROADWELL=m
CONFIG_SND_SOC_SOF_MTK_TOPLEVEL=y
CONFIG_SND_SOC_SOF_MTK_COMMON=m
CONFIG_SND_SOC_SOF_MT8186=m
CONFIG_SND_SOC_SOF_MT8195=m
CONFIG_SND_SOC_SOF_XTENSA=m
CONFIG_SND_SOC_SPRD=m
CONFIG_SND_SOC_SPRD_MCDT=m
CONFIG_SND_SOC_STI=m

#
# STMicroelectronics STM32 SOC audio support
#
CONFIG_SND_SOC_STM32_SAI=m
CONFIG_SND_SOC_STM32_I2S=m
CONFIG_SND_SOC_STM32_SPDIFRX=m
CONFIG_SND_SOC_STM32_DFSDM=m
# end of STMicroelectronics STM32 SOC audio support

#
# Allwinner SoC Audio support
#
CONFIG_SND_SUN4I_CODEC=m
CONFIG_SND_SUN8I_CODEC=m
CONFIG_SND_SUN8I_CODEC_ANALOG=m
CONFIG_SND_SUN50I_CODEC_ANALOG=m
CONFIG_SND_SUN4I_I2S=m
CONFIG_SND_SUN4I_SPDIF=m
CONFIG_SND_SUN50I_DMIC=m
CONFIG_SND_SUN8I_ADDA_PR_REGMAP=m
# end of Allwinner SoC Audio support

CONFIG_SND_SOC_TEGRA=m
CONFIG_SND_SOC_TEGRA20_AC97=m
CONFIG_SND_SOC_TEGRA20_DAS=m
CONFIG_SND_SOC_TEGRA20_I2S=m
CONFIG_SND_SOC_TEGRA20_SPDIF=m
CONFIG_SND_SOC_TEGRA30_AHUB=m
CONFIG_SND_SOC_TEGRA30_I2S=m
CONFIG_SND_SOC_TEGRA210_AHUB=m
CONFIG_SND_SOC_TEGRA210_DMIC=m
CONFIG_SND_SOC_TEGRA210_I2S=m
CONFIG_SND_SOC_TEGRA210_OPE=m
CONFIG_SND_SOC_TEGRA186_ASRC=m
CONFIG_SND_SOC_TEGRA186_DSPK=m
CONFIG_SND_SOC_TEGRA210_ADMAIF=m
CONFIG_SND_SOC_TEGRA210_MVC=m
CONFIG_SND_SOC_TEGRA210_SFC=m
CONFIG_SND_SOC_TEGRA210_AMX=m
CONFIG_SND_SOC_TEGRA210_ADX=m
CONFIG_SND_SOC_TEGRA210_MIXER=m
CONFIG_SND_SOC_TEGRA_AUDIO_GRAPH_CARD=m
CONFIG_SND_SOC_TEGRA_MACHINE_DRV=m
CONFIG_SND_SOC_TEGRA_RT5640=m
CONFIG_SND_SOC_TEGRA_WM8753=m
CONFIG_SND_SOC_TEGRA_WM8903=m
CONFIG_SND_SOC_TEGRA_WM9712=m
CONFIG_SND_SOC_TEGRA_TRIMSLICE=m
CONFIG_SND_SOC_TEGRA_ALC5632=m
CONFIG_SND_SOC_TEGRA_MAX98090=m
CONFIG_SND_SOC_TEGRA_RT5677=m
CONFIG_SND_SOC_TEGRA_SGTL5000=m

#
# Audio support for Texas Instruments SoCs
#
CONFIG_SND_SOC_TI_EDMA_PCM=m
CONFIG_SND_SOC_TI_SDMA_PCM=m
CONFIG_SND_SOC_TI_UDMA_PCM=m

#
# Texas Instruments DAI support for:
#
CONFIG_SND_SOC_DAVINCI_ASP=m
CONFIG_SND_SOC_DAVINCI_MCASP=m
CONFIG_SND_SOC_DAVINCI_VCIF=m
CONFIG_SND_SOC_OMAP_DMIC=m
CONFIG_SND_SOC_OMAP_MCBSP=m
CONFIG_SND_SOC_OMAP_MCPDM=m

#
# Audio support for boards with Texas Instruments SoCs
#
CONFIG_SND_SOC_OMAP_HDMI=m
CONFIG_SND_SOC_J721E_EVM=m
# end of Audio support for Texas Instruments SoCs

CONFIG_SND_SOC_UNIPHIER=m
CONFIG_SND_SOC_UNIPHIER_AIO=m
CONFIG_SND_SOC_UNIPHIER_LD11=m
CONFIG_SND_SOC_UNIPHIER_PXS2=m
CONFIG_SND_SOC_UNIPHIER_EVEA_CODEC=m
CONFIG_SND_SOC_XILINX_I2S=m
CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=m
CONFIG_SND_SOC_XILINX_SPDIF=m
CONFIG_SND_SOC_XTFPGA_I2S=m
CONFIG_SND_SOC_I2C_AND_SPI=m

#
# CODEC drivers
#
CONFIG_SND_SOC_ALL_CODECS=m
# CONFIG_SND_SOC_88PM860X is not set
CONFIG_SND_SOC_ARIZONA=m
CONFIG_SND_SOC_WM_HUBS=m
CONFIG_SND_SOC_WM_ADSP=m
CONFIG_SND_SOC_AB8500_CODEC=m
CONFIG_SND_SOC_AC97_CODEC=m
CONFIG_SND_SOC_AD1836=m
CONFIG_SND_SOC_AD193X=m
CONFIG_SND_SOC_AD193X_SPI=m
CONFIG_SND_SOC_AD193X_I2C=m
CONFIG_SND_SOC_AD1980=m
CONFIG_SND_SOC_AD73311=m
CONFIG_SND_SOC_ADAU_UTILS=m
CONFIG_SND_SOC_ADAU1372=m
CONFIG_SND_SOC_ADAU1372_I2C=m
CONFIG_SND_SOC_ADAU1372_SPI=m
CONFIG_SND_SOC_ADAU1373=m
CONFIG_SND_SOC_ADAU1701=m
CONFIG_SND_SOC_ADAU17X1=m
CONFIG_SND_SOC_ADAU1761=m
CONFIG_SND_SOC_ADAU1761_I2C=m
CONFIG_SND_SOC_ADAU1761_SPI=m
CONFIG_SND_SOC_ADAU1781=m
CONFIG_SND_SOC_ADAU1781_I2C=m
CONFIG_SND_SOC_ADAU1781_SPI=m
CONFIG_SND_SOC_ADAU1977=m
CONFIG_SND_SOC_ADAU1977_SPI=m
CONFIG_SND_SOC_ADAU1977_I2C=m
CONFIG_SND_SOC_ADAU7002=m
CONFIG_SND_SOC_ADAU7118=m
CONFIG_SND_SOC_ADAU7118_HW=m
CONFIG_SND_SOC_ADAU7118_I2C=m
CONFIG_SND_SOC_ADAV80X=m
CONFIG_SND_SOC_ADAV801=m
CONFIG_SND_SOC_ADAV803=m
CONFIG_SND_SOC_ADS117X=m
CONFIG_SND_SOC_AK4104=m
CONFIG_SND_SOC_AK4118=m
CONFIG_SND_SOC_AK4375=m
CONFIG_SND_SOC_AK4458=m
CONFIG_SND_SOC_AK4535=m
CONFIG_SND_SOC_AK4554=m
CONFIG_SND_SOC_AK4613=m
CONFIG_SND_SOC_AK4641=m
CONFIG_SND_SOC_AK4642=m
CONFIG_SND_SOC_AK4671=m
CONFIG_SND_SOC_AK5386=m
CONFIG_SND_SOC_AK5558=m
CONFIG_SND_SOC_ALC5623=m
CONFIG_SND_SOC_ALC5632=m
CONFIG_SND_SOC_AW8738=m
CONFIG_SND_SOC_BD28623=m
CONFIG_SND_SOC_BT_SCO=m
CONFIG_SND_SOC_CPCAP=m
CONFIG_SND_SOC_CQ0093VC=m
CONFIG_SND_SOC_CROS_EC_CODEC=m
CONFIG_SND_SOC_CS35L32=m
CONFIG_SND_SOC_CS35L33=m
CONFIG_SND_SOC_CS35L34=m
CONFIG_SND_SOC_CS35L35=m
CONFIG_SND_SOC_CS35L36=m
CONFIG_SND_SOC_CS35L41_LIB=m
CONFIG_SND_SOC_CS35L41=m
CONFIG_SND_SOC_CS35L41_SPI=m
CONFIG_SND_SOC_CS35L41_I2C=m
CONFIG_SND_SOC_CS35L45_TABLES=m
CONFIG_SND_SOC_CS35L45=m
CONFIG_SND_SOC_CS35L45_SPI=m
CONFIG_SND_SOC_CS35L45_I2C=m
CONFIG_SND_SOC_CS42L42_CORE=m
CONFIG_SND_SOC_CS42L42=m
CONFIG_SND_SOC_CS42L51=m
CONFIG_SND_SOC_CS42L51_I2C=m
CONFIG_SND_SOC_CS42L52=m
CONFIG_SND_SOC_CS42L56=m
CONFIG_SND_SOC_CS42L73=m
CONFIG_SND_SOC_CS42L83=m
CONFIG_SND_SOC_CS4234=m
CONFIG_SND_SOC_CS4265=m
CONFIG_SND_SOC_CS4270=m
CONFIG_SND_SOC_CS4271=m
CONFIG_SND_SOC_CS4271_I2C=m
CONFIG_SND_SOC_CS4271_SPI=m
CONFIG_SND_SOC_CS42XX8=m
CONFIG_SND_SOC_CS42XX8_I2C=m
CONFIG_SND_SOC_CS43130=m
CONFIG_SND_SOC_CS4341=m
CONFIG_SND_SOC_CS4349=m
CONFIG_SND_SOC_CS47L15=m
CONFIG_SND_SOC_CS47L24=m
CONFIG_SND_SOC_CS47L35=m
CONFIG_SND_SOC_CS47L85=m
CONFIG_SND_SOC_CS47L90=m
CONFIG_SND_SOC_CS47L92=m
CONFIG_SND_SOC_CS53L30=m
CONFIG_SND_SOC_CX20442=m
CONFIG_SND_SOC_CX2072X=m
CONFIG_SND_SOC_JZ4740_CODEC=m
CONFIG_SND_SOC_JZ4725B_CODEC=m
CONFIG_SND_SOC_JZ4760_CODEC=m
CONFIG_SND_SOC_JZ4770_CODEC=m
CONFIG_SND_SOC_L3=m
CONFIG_SND_SOC_DA7210=m
CONFIG_SND_SOC_DA7213=m
CONFIG_SND_SOC_DA7218=m
CONFIG_SND_SOC_DA7219=m
CONFIG_SND_SOC_DA732X=m
CONFIG_SND_SOC_DA9055=m
CONFIG_SND_SOC_DMIC=m
CONFIG_SND_SOC_HDMI_CODEC=m
CONFIG_SND_SOC_ES7134=m
CONFIG_SND_SOC_ES7241=m
CONFIG_SND_SOC_ES8316=m
CONFIG_SND_SOC_ES8326=m
CONFIG_SND_SOC_ES8328=m
CONFIG_SND_SOC_ES8328_I2C=m
CONFIG_SND_SOC_ES8328_SPI=m
CONFIG_SND_SOC_GTM601=m
CONFIG_SND_SOC_HDAC_HDMI=m
CONFIG_SND_SOC_HDAC_HDA=m
CONFIG_SND_SOC_HDA=m
CONFIG_SND_SOC_ICS43432=m
CONFIG_SND_SOC_INNO_RK3036=m
CONFIG_SND_SOC_ISABELLE=m
CONFIG_SND_SOC_LM49453=m
CONFIG_SND_SOC_LOCHNAGAR_SC=m
CONFIG_SND_SOC_MADERA=m
CONFIG_SND_SOC_MAX98088=m
CONFIG_SND_SOC_MAX98090=m
CONFIG_SND_SOC_MAX98095=m
CONFIG_SND_SOC_MAX98357A=m
CONFIG_SND_SOC_MAX98371=m
CONFIG_SND_SOC_MAX98504=m
CONFIG_SND_SOC_MAX9867=m
CONFIG_SND_SOC_MAX98925=m
CONFIG_SND_SOC_MAX98926=m
CONFIG_SND_SOC_MAX98927=m
CONFIG_SND_SOC_MAX98520=m
CONFIG_SND_SOC_MAX98373=m
CONFIG_SND_SOC_MAX98373_I2C=m
CONFIG_SND_SOC_MAX98373_SDW=m
CONFIG_SND_SOC_MAX98390=m
CONFIG_SND_SOC_MAX98396=m
CONFIG_SND_SOC_MAX9850=m
CONFIG_SND_SOC_MAX9860=m
CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m
CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m
CONFIG_SND_SOC_PCM1681=m
CONFIG_SND_SOC_PCM1789=m
CONFIG_SND_SOC_PCM1789_I2C=m
CONFIG_SND_SOC_PCM179X=m
CONFIG_SND_SOC_PCM179X_I2C=m
CONFIG_SND_SOC_PCM179X_SPI=m
CONFIG_SND_SOC_PCM186X=m
CONFIG_SND_SOC_PCM186X_I2C=m
CONFIG_SND_SOC_PCM186X_SPI=m
CONFIG_SND_SOC_PCM3008=m
CONFIG_SND_SOC_PCM3060=m
CONFIG_SND_SOC_PCM3060_I2C=m
CONFIG_SND_SOC_PCM3060_SPI=m
CONFIG_SND_SOC_PCM3168A=m
CONFIG_SND_SOC_PCM3168A_I2C=m
CONFIG_SND_SOC_PCM3168A_SPI=m
CONFIG_SND_SOC_PCM5102A=m
CONFIG_SND_SOC_PCM512x=m
CONFIG_SND_SOC_PCM512x_I2C=m
CONFIG_SND_SOC_PCM512x_SPI=m
CONFIG_SND_SOC_RK3328=m
CONFIG_SND_SOC_RK817=m
CONFIG_SND_SOC_RL6231=m
CONFIG_SND_SOC_RL6347A=m
CONFIG_SND_SOC_RT274=m
CONFIG_SND_SOC_RT286=m
CONFIG_SND_SOC_RT298=m
CONFIG_SND_SOC_RT1011=m
CONFIG_SND_SOC_RT1015=m
CONFIG_SND_SOC_RT1015P=m
CONFIG_SND_SOC_RT1016=m
CONFIG_SND_SOC_RT1019=m
CONFIG_SND_SOC_RT1305=m
CONFIG_SND_SOC_RT1308=m
CONFIG_SND_SOC_RT1308_SDW=m
CONFIG_SND_SOC_RT1316_SDW=m
CONFIG_SND_SOC_RT5514=m
CONFIG_SND_SOC_RT5514_SPI=m
CONFIG_SND_SOC_RT5616=m
CONFIG_SND_SOC_RT5631=m
CONFIG_SND_SOC_RT5640=m
CONFIG_SND_SOC_RT5645=m
CONFIG_SND_SOC_RT5651=m
CONFIG_SND_SOC_RT5659=m
CONFIG_SND_SOC_RT5660=m
CONFIG_SND_SOC_RT5663=m
CONFIG_SND_SOC_RT5665=m
CONFIG_SND_SOC_RT5668=m
CONFIG_SND_SOC_RT5670=m
CONFIG_SND_SOC_RT5677=m
CONFIG_SND_SOC_RT5677_SPI=m
CONFIG_SND_SOC_RT5682=m
CONFIG_SND_SOC_RT5682_I2C=m
CONFIG_SND_SOC_RT5682_SDW=m
CONFIG_SND_SOC_RT5682S=m
CONFIG_SND_SOC_RT700=m
CONFIG_SND_SOC_RT700_SDW=m
CONFIG_SND_SOC_RT711=m
CONFIG_SND_SOC_RT711_SDW=m
CONFIG_SND_SOC_RT711_SDCA_SDW=m
CONFIG_SND_SOC_RT715=m
CONFIG_SND_SOC_RT715_SDW=m
CONFIG_SND_SOC_RT715_SDCA_SDW=m
CONFIG_SND_SOC_RT9120=m
CONFIG_SND_SOC_SDW_MOCKUP=m
CONFIG_SND_SOC_SGTL5000=m
CONFIG_SND_SOC_SI476X=m
CONFIG_SND_SOC_SIGMADSP=m
CONFIG_SND_SOC_SIGMADSP_I2C=m
CONFIG_SND_SOC_SIGMADSP_REGMAP=m
CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
CONFIG_SND_SOC_SIMPLE_MUX=m
CONFIG_SND_SOC_SPDIF=m
CONFIG_SND_SOC_SRC4XXX_I2C=m
CONFIG_SND_SOC_SRC4XXX=m
CONFIG_SND_SOC_SSM2305=m
CONFIG_SND_SOC_SSM2518=m
CONFIG_SND_SOC_SSM2602=m
CONFIG_SND_SOC_SSM2602_SPI=m
CONFIG_SND_SOC_SSM2602_I2C=m
CONFIG_SND_SOC_SSM4567=m
CONFIG_SND_SOC_STA32X=m
CONFIG_SND_SOC_STA350=m
CONFIG_SND_SOC_STA529=m
CONFIG_SND_SOC_STAC9766=m
CONFIG_SND_SOC_STI_SAS=m
CONFIG_SND_SOC_TAS2552=m
CONFIG_SND_SOC_TAS2562=m
CONFIG_SND_SOC_TAS2764=m
CONFIG_SND_SOC_TAS2770=m
CONFIG_SND_SOC_TAS2780=m
CONFIG_SND_SOC_TAS5086=m
CONFIG_SND_SOC_TAS571X=m
CONFIG_SND_SOC_TAS5720=m
CONFIG_SND_SOC_TAS5805M=m
CONFIG_SND_SOC_TAS6424=m
CONFIG_SND_SOC_TDA7419=m
CONFIG_SND_SOC_TFA9879=m
CONFIG_SND_SOC_TFA989X=m
CONFIG_SND_SOC_TLV320ADC3XXX=m
CONFIG_SND_SOC_TLV320AIC23=m
CONFIG_SND_SOC_TLV320AIC23_I2C=m
CONFIG_SND_SOC_TLV320AIC23_SPI=m
CONFIG_SND_SOC_TLV320AIC26=m
CONFIG_SND_SOC_TLV320AIC31XX=m
CONFIG_SND_SOC_TLV320AIC32X4=m
CONFIG_SND_SOC_TLV320AIC32X4_I2C=m
CONFIG_SND_SOC_TLV320AIC32X4_SPI=m
CONFIG_SND_SOC_TLV320AIC3X=m
CONFIG_SND_SOC_TLV320AIC3X_I2C=m
CONFIG_SND_SOC_TLV320AIC3X_SPI=m
CONFIG_SND_SOC_TLV320DAC33=m
CONFIG_SND_SOC_TLV320ADCX140=m
CONFIG_SND_SOC_TS3A227E=m
CONFIG_SND_SOC_TSCS42XX=m
CONFIG_SND_SOC_TSCS454=m
# CONFIG_SND_SOC_TWL4030 is not set
# CONFIG_SND_SOC_TWL6040 is not set
CONFIG_SND_SOC_UDA1334=m
CONFIG_SND_SOC_UDA134X=m
CONFIG_SND_SOC_UDA1380=m
CONFIG_SND_SOC_WCD9335=m
CONFIG_SND_SOC_WCD_MBHC=m
CONFIG_SND_SOC_WCD934X=m
CONFIG_SND_SOC_WCD938X=m
CONFIG_SND_SOC_WCD938X_SDW=m
CONFIG_SND_SOC_WL1273=m
CONFIG_SND_SOC_WM0010=m
CONFIG_SND_SOC_WM1250_EV1=m
CONFIG_SND_SOC_WM2000=m
CONFIG_SND_SOC_WM2200=m
CONFIG_SND_SOC_WM5100=m
CONFIG_SND_SOC_WM5102=m
CONFIG_SND_SOC_WM5110=m
# CONFIG_SND_SOC_WM8350 is not set
# CONFIG_SND_SOC_WM8400 is not set
CONFIG_SND_SOC_WM8510=m
CONFIG_SND_SOC_WM8523=m
CONFIG_SND_SOC_WM8524=m
CONFIG_SND_SOC_WM8580=m
CONFIG_SND_SOC_WM8711=m
CONFIG_SND_SOC_WM8727=m
CONFIG_SND_SOC_WM8728=m
CONFIG_SND_SOC_WM8731=m
CONFIG_SND_SOC_WM8731_I2C=m
CONFIG_SND_SOC_WM8731_SPI=m
CONFIG_SND_SOC_WM8737=m
CONFIG_SND_SOC_WM8741=m
CONFIG_SND_SOC_WM8750=m
CONFIG_SND_SOC_WM8753=m
CONFIG_SND_SOC_WM8770=m
CONFIG_SND_SOC_WM8776=m
CONFIG_SND_SOC_WM8782=m
CONFIG_SND_SOC_WM8804=m
CONFIG_SND_SOC_WM8804_I2C=m
CONFIG_SND_SOC_WM8804_SPI=m
CONFIG_SND_SOC_WM8900=m
CONFIG_SND_SOC_WM8903=m
CONFIG_SND_SOC_WM8904=m
CONFIG_SND_SOC_WM8940=m
CONFIG_SND_SOC_WM8955=m
CONFIG_SND_SOC_WM8960=m
CONFIG_SND_SOC_WM8961=m
CONFIG_SND_SOC_WM8962=m
CONFIG_SND_SOC_WM8971=m
CONFIG_SND_SOC_WM8974=m
CONFIG_SND_SOC_WM8978=m
CONFIG_SND_SOC_WM8983=m
CONFIG_SND_SOC_WM8985=m
CONFIG_SND_SOC_WM8988=m
CONFIG_SND_SOC_WM8990=m
CONFIG_SND_SOC_WM8991=m
CONFIG_SND_SOC_WM8993=m
CONFIG_SND_SOC_WM8994=m
CONFIG_SND_SOC_WM8995=m
CONFIG_SND_SOC_WM8996=m
CONFIG_SND_SOC_WM8997=m
CONFIG_SND_SOC_WM8998=m
CONFIG_SND_SOC_WM9081=m
CONFIG_SND_SOC_WM9090=m
CONFIG_SND_SOC_WM9705=m
CONFIG_SND_SOC_WM9712=m
CONFIG_SND_SOC_WM9713=m
CONFIG_SND_SOC_WSA881X=m
CONFIG_SND_SOC_WSA883X=m
CONFIG_SND_SOC_ZL38060=m
CONFIG_SND_SOC_LM4857=m
CONFIG_SND_SOC_MAX9759=m
CONFIG_SND_SOC_MAX9768=m
CONFIG_SND_SOC_MAX9877=m
CONFIG_SND_SOC_MC13783=m
CONFIG_SND_SOC_ML26124=m
CONFIG_SND_SOC_MT6351=m
CONFIG_SND_SOC_MT6358=m
CONFIG_SND_SOC_MT6359=m
CONFIG_SND_SOC_MT6359_ACCDET=m
CONFIG_SND_SOC_MT6660=m
CONFIG_SND_SOC_NAU8315=m
CONFIG_SND_SOC_NAU8540=m
CONFIG_SND_SOC_NAU8810=m
CONFIG_SND_SOC_NAU8821=m
CONFIG_SND_SOC_NAU8822=m
CONFIG_SND_SOC_NAU8824=m
CONFIG_SND_SOC_NAU8825=m
CONFIG_SND_SOC_TPA6130A2=m
CONFIG_SND_SOC_LPASS_MACRO_COMMON=m
CONFIG_SND_SOC_LPASS_WSA_MACRO=m
CONFIG_SND_SOC_LPASS_VA_MACRO=m
CONFIG_SND_SOC_LPASS_RX_MACRO=m
CONFIG_SND_SOC_LPASS_TX_MACRO=m
# end of CODEC drivers

CONFIG_SND_SIMPLE_CARD_UTILS=m
CONFIG_SND_SIMPLE_CARD=m
CONFIG_SND_AUDIO_GRAPH_CARD=m
CONFIG_SND_AUDIO_GRAPH_CARD2=m
CONFIG_SND_AUDIO_GRAPH_CARD2_CUSTOM_SAMPLE=m
CONFIG_SND_TEST_COMPONENT=m
CONFIG_SND_VIRTIO=m
CONFIG_AC97_BUS=m

#
# HID support
#
CONFIG_HID=m
CONFIG_HID_BATTERY_STRENGTH=y
CONFIG_HIDRAW=y
CONFIG_UHID=m
CONFIG_HID_GENERIC=m

#
# Special HID drivers
#
CONFIG_HID_A4TECH=m
CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_APPLE=m
CONFIG_HID_APPLEIR=m
CONFIG_HID_ASUS=m
CONFIG_HID_AUREAL=m
CONFIG_HID_BELKIN=m
CONFIG_HID_BETOP_FF=m
CONFIG_HID_BIGBEN_FF=m
CONFIG_HID_CHERRY=m
CONFIG_HID_CHICONY=m
CONFIG_HID_CORSAIR=m
CONFIG_HID_COUGAR=m
CONFIG_HID_MACALLY=m
CONFIG_HID_PRODIKEYS=m
CONFIG_HID_CMEDIA=m
CONFIG_HID_CP2112=m
CONFIG_HID_CREATIVE_SB0540=m
CONFIG_HID_CYPRESS=m
CONFIG_HID_DRAGONRISE=m
CONFIG_DRAGONRISE_FF=y
CONFIG_HID_EMS_FF=m
CONFIG_HID_ELAN=m
CONFIG_HID_ELECOM=m
CONFIG_HID_ELO=m
CONFIG_HID_EZKEY=m
CONFIG_HID_FT260=m
CONFIG_HID_GEMBIRD=m
CONFIG_HID_GFRM=m
CONFIG_HID_GLORIOUS=m
CONFIG_HID_HOLTEK=m
CONFIG_HOLTEK_FF=y
CONFIG_HID_VIVALDI_COMMON=m
CONFIG_HID_GOOGLE_HAMMER=m
CONFIG_HID_VIVALDI=m
CONFIG_HID_GT683R=m
CONFIG_HID_KEYTOUCH=m
CONFIG_HID_KYE=m
CONFIG_HID_UCLOGIC=m
CONFIG_HID_WALTOP=m
CONFIG_HID_VIEWSONIC=m
CONFIG_HID_VRC2=m
CONFIG_HID_XIAOMI=m
CONFIG_HID_GYRATION=m
CONFIG_HID_ICADE=m
CONFIG_HID_ITE=m
CONFIG_HID_JABRA=m
CONFIG_HID_TWINHAN=m
CONFIG_HID_KENSINGTON=m
CONFIG_HID_LCPOWER=m
CONFIG_HID_LED=m
CONFIG_HID_LENOVO=m
CONFIG_HID_LETSKETCH=m
CONFIG_HID_LOGITECH=m
CONFIG_HID_LOGITECH_DJ=m
CONFIG_HID_LOGITECH_HIDPP=m
CONFIG_LOGITECH_FF=y
CONFIG_LOGIRUMBLEPAD2_FF=y
CONFIG_LOGIG940_FF=y
CONFIG_LOGIWHEELS_FF=y
CONFIG_HID_MAGICMOUSE=m
CONFIG_HID_MALTRON=m
CONFIG_HID_MAYFLASH=m
CONFIG_HID_MEGAWORLD_FF=m
CONFIG_HID_REDRAGON=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
CONFIG_HID_NINTENDO=m
CONFIG_NINTENDO_FF=y
CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=m
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
CONFIG_PANTHERLORD_FF=y
CONFIG_HID_PENMOUNT=m
CONFIG_HID_PETALYNX=m
CONFIG_HID_PICOLCD=m
CONFIG_HID_PICOLCD_FB=y
CONFIG_HID_PICOLCD_BACKLIGHT=y
CONFIG_HID_PICOLCD_LCD=y
CONFIG_HID_PICOLCD_LEDS=y
CONFIG_HID_PICOLCD_CIR=y
CONFIG_HID_PLANTRONICS=m
CONFIG_HID_PLAYSTATION=m
CONFIG_PLAYSTATION_FF=y
CONFIG_HID_PXRC=m
CONFIG_HID_RAZER=m
CONFIG_HID_PRIMAX=m
CONFIG_HID_RETRODE=m
CONFIG_HID_ROCCAT=m
CONFIG_HID_SAITEK=m
CONFIG_HID_SAMSUNG=m
CONFIG_HID_SEMITEK=m
CONFIG_HID_SIGMAMICRO=m
CONFIG_HID_SONY=m
CONFIG_SONY_FF=y
CONFIG_HID_SPEEDLINK=m
CONFIG_HID_STEAM=m
CONFIG_HID_STEELSERIES=m
CONFIG_HID_SUNPLUS=m
CONFIG_HID_RMI=m
CONFIG_HID_GREENASIA=m
CONFIG_GREENASIA_FF=y
CONFIG_HID_SMARTJOYPLUS=m
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_HID_TIVO=m
CONFIG_HID_TOPSEED=m
CONFIG_HID_TOPRE=m
CONFIG_HID_THINGM=m
CONFIG_HID_THRUSTMASTER=m
CONFIG_THRUSTMASTER_FF=y
CONFIG_HID_UDRAW_PS3=m
CONFIG_HID_U2FZERO=m
CONFIG_HID_WACOM=m
CONFIG_HID_WIIMOTE=m
CONFIG_HID_XINMO=m
CONFIG_HID_ZEROPLUS=m
CONFIG_ZEROPLUS_FF=y
CONFIG_HID_ZYDACRON=m
CONFIG_HID_SENSOR_HUB=m
CONFIG_HID_SENSOR_CUSTOM_SENSOR=m
CONFIG_HID_ALPS=m
CONFIG_HID_MCP2221=m
# end of Special HID drivers

#
# USB HID support
#
CONFIG_USB_HID=m
CONFIG_HID_PID=y
CONFIG_USB_HIDDEV=y

#
# USB HID Boot Protocol drivers
#
CONFIG_USB_KBD=m
CONFIG_USB_MOUSE=m
# end of USB HID Boot Protocol drivers
# end of USB HID support

#
# I2C HID support
#
CONFIG_I2C_HID_OF=m
CONFIG_I2C_HID_OF_ELAN=m
CONFIG_I2C_HID_OF_GOODIX=m
# end of I2C HID support

CONFIG_I2C_HID_CORE=m
# end of HID support

CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_COMMON=m
CONFIG_USB_LED_TRIG=y
CONFIG_USB_ULPI_BUS=m
CONFIG_USB_CONN_GPIO=m
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB=m
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y

#
# Miscellaneous USB options
#
CONFIG_USB_DEFAULT_PERSIST=y
CONFIG_USB_FEW_INIT_RETRIES=y
CONFIG_USB_DYNAMIC_MINORS=y
CONFIG_USB_OTG_PRODUCTLIST=y
CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB=y
CONFIG_USB_LEDS_TRIGGER_USBPORT=m
CONFIG_USB_AUTOSUSPEND_DELAY=2
CONFIG_USB_MON=m

#
# USB Host Controller Drivers
#
CONFIG_USB_C67X00_HCD=m
CONFIG_USB_XHCI_HCD=m
CONFIG_USB_XHCI_DBGCAP=y
CONFIG_USB_XHCI_PCI_RENESAS=m
CONFIG_USB_XHCI_PLATFORM=m
CONFIG_USB_XHCI_HISTB=m
CONFIG_USB_XHCI_MTK=m
CONFIG_USB_XHCI_MVEBU=m
CONFIG_USB_XHCI_RCAR=m
CONFIG_USB_EHCI_BRCMSTB=m
CONFIG_USB_BRCMSTB=m
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_EHCI_ROOT_HUB_TT=y
CONFIG_USB_EHCI_TT_NEWSCHED=y
CONFIG_USB_EHCI_FSL=m
CONFIG_USB_EHCI_HCD_NPCM7XX=m
CONFIG_USB_EHCI_HCD_OMAP=m
CONFIG_USB_EHCI_HCD_ORION=m
CONFIG_USB_EHCI_HCD_SPEAR=m
CONFIG_USB_EHCI_HCD_STI=m
CONFIG_USB_EHCI_HCD_AT91=m
CONFIG_USB_EHCI_SH=y
CONFIG_USB_EHCI_EXYNOS=m
CONFIG_USB_EHCI_MV=m
CONFIG_USB_CNS3XXX_EHCI=y
CONFIG_USB_EHCI_HCD_PLATFORM=m
CONFIG_USB_OXU210HP_HCD=m
CONFIG_USB_ISP116X_HCD=m
CONFIG_USB_ISP1362_HCD=m
CONFIG_USB_FOTG210_HCD=m
CONFIG_USB_MAX3421_HCD=m
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_OHCI_HCD_SPEAR=m
CONFIG_USB_OHCI_HCD_STI=m
CONFIG_USB_OHCI_HCD_S3C2410=m
CONFIG_USB_OHCI_HCD_LPC32XX=m
CONFIG_USB_OHCI_HCD_AT91=m
CONFIG_USB_OHCI_HCD_OMAP3=m
CONFIG_USB_OHCI_HCD_DAVINCI=m
CONFIG_USB_OHCI_HCD_SSB=y
CONFIG_USB_OHCI_SH=y
CONFIG_USB_OHCI_EXYNOS=m
CONFIG_USB_CNS3XXX_OHCI=y
CONFIG_USB_OHCI_HCD_PLATFORM=m
CONFIG_USB_U132_HCD=m
CONFIG_USB_SL811_HCD=m
CONFIG_USB_SL811_HCD_ISO=y
CONFIG_USB_SL811_CS=m
CONFIG_USB_R8A66597_HCD=m
CONFIG_USB_RENESAS_USBHS_HCD=m
CONFIG_USB_HCD_BCMA=m
CONFIG_USB_HCD_SSB=m
CONFIG_USB_HCD_TEST_MODE=y
CONFIG_USB_RENESAS_USBHS=m

#
# USB Device Class drivers
#
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
CONFIG_USB_WDM=m
CONFIG_USB_TMC=m

#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#

#
# also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=m
CONFIG_USB_STORAGE_DEBUG=y
CONFIG_USB_STORAGE_REALTEK=m
CONFIG_USB_STORAGE_DATAFAB=m
CONFIG_USB_STORAGE_FREECOM=m
CONFIG_USB_STORAGE_ISD200=m
CONFIG_USB_STORAGE_USBAT=m
CONFIG_USB_STORAGE_SDDR09=m
CONFIG_USB_STORAGE_SDDR55=m
CONFIG_USB_STORAGE_JUMPSHOT=m
CONFIG_USB_STORAGE_ALAUDA=m
CONFIG_USB_STORAGE_ONETOUCH=m
CONFIG_USB_STORAGE_KARMA=m
CONFIG_USB_STORAGE_CYPRESS_ATACB=m
CONFIG_USB_STORAGE_ENE_UB6250=m
CONFIG_USB_UAS=m

#
# USB Imaging devices
#
CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
CONFIG_USBIP_CORE=m
CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_HOST=m
CONFIG_USBIP_VUDC=m
CONFIG_USBIP_DEBUG=y
CONFIG_USB_CDNS_SUPPORT=m
CONFIG_USB_CDNS_HOST=y
CONFIG_USB_CDNS3=m
CONFIG_USB_CDNS3_GADGET=y
CONFIG_USB_CDNS3_HOST=y
CONFIG_USB_CDNS3_TI=m
CONFIG_USB_CDNS3_IMX=m
CONFIG_USB_MTU3=m
# CONFIG_USB_MTU3_HOST is not set
# CONFIG_USB_MTU3_GADGET is not set
CONFIG_USB_MTU3_DUAL_ROLE=y
CONFIG_USB_MTU3_DEBUG=y
CONFIG_USB_MUSB_HDRC=m
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_GADGET is not set
CONFIG_USB_MUSB_DUAL_ROLE=y

#
# Platform Glue Layer
#
CONFIG_USB_MUSB_TUSB6010=m
CONFIG_USB_MUSB_DSPS=m
CONFIG_USB_MUSB_UX500=m
CONFIG_USB_MUSB_MEDIATEK=m
CONFIG_USB_MUSB_POLARFIRE_SOC=m

#
# MUSB DMA mode
#
CONFIG_MUSB_PIO_ONLY=y
CONFIG_USB_DWC3=m
CONFIG_USB_DWC3_ULPI=y
# CONFIG_USB_DWC3_HOST is not set
# CONFIG_USB_DWC3_GADGET is not set
CONFIG_USB_DWC3_DUAL_ROLE=y

#
# Platform Glue Driver Support
#
CONFIG_USB_DWC3_OMAP=m
CONFIG_USB_DWC3_EXYNOS=m
CONFIG_USB_DWC3_KEYSTONE=m
CONFIG_USB_DWC3_MESON_G12A=m
CONFIG_USB_DWC3_OF_SIMPLE=m
CONFIG_USB_DWC3_ST=m
CONFIG_USB_DWC3_QCOM=m
CONFIG_USB_DWC3_IMX8MP=m
CONFIG_USB_DWC3_AM62=m
CONFIG_USB_DWC2=m
# CONFIG_USB_DWC2_HOST is not set

#
# Gadget/Dual-role mode requires USB Gadget support to be enabled
#
# CONFIG_USB_DWC2_PERIPHERAL is not set
CONFIG_USB_DWC2_DUAL_ROLE=y
CONFIG_USB_DWC2_DEBUG=y
CONFIG_USB_DWC2_VERBOSE=y
CONFIG_USB_DWC2_TRACK_MISSED_SOFS=y
CONFIG_USB_DWC2_DEBUG_PERIODIC=y
CONFIG_USB_CHIPIDEA=m
CONFIG_USB_CHIPIDEA_UDC=y
CONFIG_USB_CHIPIDEA_HOST=y
CONFIG_USB_CHIPIDEA_MSM=m
CONFIG_USB_CHIPIDEA_IMX=m
CONFIG_USB_CHIPIDEA_GENERIC=m
CONFIG_USB_CHIPIDEA_TEGRA=m
CONFIG_USB_ISP1760=m
CONFIG_USB_ISP1760_HCD=y
CONFIG_USB_ISP1761_UDC=y
# CONFIG_USB_ISP1760_HOST_ROLE is not set
# CONFIG_USB_ISP1760_GADGET_ROLE is not set
CONFIG_USB_ISP1760_DUAL_ROLE=y

#
# USB port drivers
#
CONFIG_USB_USS720=m
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_SIMPLE=m
CONFIG_USB_SERIAL_AIRCABLE=m
CONFIG_USB_SERIAL_ARK3116=m
CONFIG_USB_SERIAL_BELKIN=m
CONFIG_USB_SERIAL_CH341=m
CONFIG_USB_SERIAL_WHITEHEAT=m
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
CONFIG_USB_SERIAL_CP210X=m
CONFIG_USB_SERIAL_CYPRESS_M8=m
CONFIG_USB_SERIAL_EMPEG=m
CONFIG_USB_SERIAL_FTDI_SIO=m
CONFIG_USB_SERIAL_VISOR=m
CONFIG_USB_SERIAL_IPAQ=m
CONFIG_USB_SERIAL_IR=m
CONFIG_USB_SERIAL_EDGEPORT=m
CONFIG_USB_SERIAL_EDGEPORT_TI=m
CONFIG_USB_SERIAL_F81232=m
CONFIG_USB_SERIAL_F8153X=m
CONFIG_USB_SERIAL_GARMIN=m
CONFIG_USB_SERIAL_IPW=m
CONFIG_USB_SERIAL_IUU=m
CONFIG_USB_SERIAL_KEYSPAN_PDA=m
CONFIG_USB_SERIAL_KEYSPAN=m
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_MCT_U232=m
CONFIG_USB_SERIAL_METRO=m
CONFIG_USB_SERIAL_MOS7720=m
CONFIG_USB_SERIAL_MOS7715_PARPORT=y
CONFIG_USB_SERIAL_MOS7840=m
CONFIG_USB_SERIAL_MXUPORT=m
CONFIG_USB_SERIAL_NAVMAN=m
CONFIG_USB_SERIAL_PL2303=m
CONFIG_USB_SERIAL_OTI6858=m
CONFIG_USB_SERIAL_QCAUX=m
CONFIG_USB_SERIAL_QUALCOMM=m
CONFIG_USB_SERIAL_SPCP8X5=m
CONFIG_USB_SERIAL_SAFE=m
CONFIG_USB_SERIAL_SAFE_PADDED=y
CONFIG_USB_SERIAL_SIERRAWIRELESS=m
CONFIG_USB_SERIAL_SYMBOL=m
CONFIG_USB_SERIAL_TI=m
CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_WWAN=m
CONFIG_USB_SERIAL_OPTION=m
CONFIG_USB_SERIAL_OMNINET=m
CONFIG_USB_SERIAL_OPTICON=m
CONFIG_USB_SERIAL_XSENS_MT=m
CONFIG_USB_SERIAL_WISHBONE=m
CONFIG_USB_SERIAL_SSU100=m
CONFIG_USB_SERIAL_QT2=m
CONFIG_USB_SERIAL_UPD78F0730=m
CONFIG_USB_SERIAL_XR=m
CONFIG_USB_SERIAL_DEBUG=m

#
# USB Miscellaneous drivers
#
CONFIG_USB_EMI62=m
CONFIG_USB_EMI26=m
CONFIG_USB_ADUTUX=m
CONFIG_USB_SEVSEG=m
CONFIG_USB_LEGOTOWER=m
CONFIG_USB_LCD=m
CONFIG_USB_CYPRESS_CY7C63=m
CONFIG_USB_CYTHERM=m
CONFIG_USB_IDMOUSE=m
CONFIG_USB_FTDI_ELAN=m
CONFIG_USB_APPLEDISPLAY=m
CONFIG_USB_QCOM_EUD=m
CONFIG_APPLE_MFI_FASTCHARGE=m
CONFIG_USB_SISUSBVGA=m
CONFIG_USB_LD=m
CONFIG_USB_TRANCEVIBRATOR=m
CONFIG_USB_IOWARRIOR=m
CONFIG_USB_TEST=m
CONFIG_USB_EHSET_TEST_FIXTURE=m
CONFIG_USB_ISIGHTFW=m
CONFIG_USB_YUREX=m
CONFIG_USB_EZUSB_FX2=m
CONFIG_USB_HUB_USB251XB=m
CONFIG_USB_HSIC_USB3503=m
CONFIG_USB_HSIC_USB4604=m
CONFIG_USB_LINK_LAYER_TEST=m
CONFIG_USB_CHAOSKEY=m
CONFIG_BRCM_USB_PINMAP=m
CONFIG_USB_ONBOARD_HUB=m
CONFIG_USB_ATM=m
CONFIG_USB_SPEEDTOUCH=m
CONFIG_USB_CXACRU=m
CONFIG_USB_UEAGLEATM=m
CONFIG_USB_XUSBATM=m

#
# USB Physical Layer drivers
#
CONFIG_USB_PHY=y
CONFIG_KEYSTONE_USB_PHY=m
CONFIG_NOP_USB_XCEIV=m
CONFIG_AM335X_CONTROL_USB=m
CONFIG_AM335X_PHY_USB=m
CONFIG_USB_GPIO_VBUS=m
CONFIG_TAHVO_USB=m
CONFIG_TAHVO_USB_HOST_BY_DEFAULT=y
CONFIG_USB_ISP1301=m
CONFIG_USB_TEGRA_PHY=m
CONFIG_USB_ULPI=y
CONFIG_USB_ULPI_VIEWPORT=y
CONFIG_JZ4770_PHY=m
# end of USB Physical Layer drivers

CONFIG_USB_GADGET=m
CONFIG_USB_GADGET_DEBUG=y
CONFIG_USB_GADGET_VERBOSE=y
CONFIG_USB_GADGET_DEBUG_FILES=y
CONFIG_USB_GADGET_DEBUG_FS=y
CONFIG_USB_GADGET_VBUS_DRAW=2
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
CONFIG_U_SERIAL_CONSOLE=y

#
# USB Peripheral Controller
#
CONFIG_USB_LPC32XX=m
CONFIG_USB_FUSB300=m
CONFIG_USB_FOTG210_UDC=m
CONFIG_USB_GR_UDC=m
CONFIG_USB_R8A66597=m
CONFIG_USB_RENESAS_USBHS_UDC=m
CONFIG_USB_RENESAS_USB3=m
CONFIG_USB_PXA27X=m
CONFIG_USB_MV_UDC=m
CONFIG_USB_MV_U3D=m
CONFIG_USB_SNP_CORE=m
CONFIG_USB_SNP_UDC_PLAT=m
CONFIG_USB_M66592=m
CONFIG_USB_BDC_UDC=m
CONFIG_USB_NET2272=m
CONFIG_USB_NET2272_DMA=y
CONFIG_USB_GADGET_XILINX=m
CONFIG_USB_MAX3420_UDC=m
CONFIG_USB_ASPEED_UDC=m
CONFIG_USB_ASPEED_VHUB=m
CONFIG_USB_DUMMY_HCD=m
# end of USB Peripheral Controller

CONFIG_USB_LIBCOMPOSITE=m
CONFIG_USB_F_ACM=m
CONFIG_USB_F_SS_LB=m
CONFIG_USB_U_SERIAL=m
CONFIG_USB_U_ETHER=m
CONFIG_USB_U_AUDIO=m
CONFIG_USB_F_SERIAL=m
CONFIG_USB_F_OBEX=m
CONFIG_USB_F_NCM=m
CONFIG_USB_F_ECM=m
CONFIG_USB_F_PHONET=m
CONFIG_USB_F_EEM=m
CONFIG_USB_F_SUBSET=m
CONFIG_USB_F_RNDIS=m
CONFIG_USB_F_MASS_STORAGE=m
CONFIG_USB_F_FS=m
CONFIG_USB_F_UAC1=m
CONFIG_USB_F_UAC1_LEGACY=m
CONFIG_USB_F_UAC2=m
CONFIG_USB_F_UVC=m
CONFIG_USB_F_MIDI=m
CONFIG_USB_F_HID=m
CONFIG_USB_F_PRINTER=m
CONFIG_USB_F_TCM=m
CONFIG_USB_CONFIGFS=m
CONFIG_USB_CONFIGFS_SERIAL=y
CONFIG_USB_CONFIGFS_ACM=y
CONFIG_USB_CONFIGFS_OBEX=y
CONFIG_USB_CONFIGFS_NCM=y
CONFIG_USB_CONFIGFS_ECM=y
CONFIG_USB_CONFIGFS_ECM_SUBSET=y
CONFIG_USB_CONFIGFS_RNDIS=y
CONFIG_USB_CONFIGFS_EEM=y
CONFIG_USB_CONFIGFS_PHONET=y
CONFIG_USB_CONFIGFS_MASS_STORAGE=y
CONFIG_USB_CONFIGFS_F_LB_SS=y
CONFIG_USB_CONFIGFS_F_FS=y
CONFIG_USB_CONFIGFS_F_UAC1=y
CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y
CONFIG_USB_CONFIGFS_F_UAC2=y
CONFIG_USB_CONFIGFS_F_MIDI=y
CONFIG_USB_CONFIGFS_F_HID=y
CONFIG_USB_CONFIGFS_F_UVC=y
CONFIG_USB_CONFIGFS_F_PRINTER=y
CONFIG_USB_CONFIGFS_F_TCM=y

#
# USB Gadget precomposed configurations
#
CONFIG_USB_ZERO=m
CONFIG_USB_AUDIO=m
CONFIG_GADGET_UAC1=y
CONFIG_GADGET_UAC1_LEGACY=y
CONFIG_USB_ETH=m
CONFIG_USB_ETH_RNDIS=y
CONFIG_USB_ETH_EEM=y
CONFIG_USB_G_NCM=m
CONFIG_USB_GADGETFS=m
CONFIG_USB_FUNCTIONFS=m
CONFIG_USB_FUNCTIONFS_ETH=y
CONFIG_USB_FUNCTIONFS_RNDIS=y
CONFIG_USB_FUNCTIONFS_GENERIC=y
CONFIG_USB_MASS_STORAGE=m
CONFIG_USB_GADGET_TARGET=m
CONFIG_USB_G_SERIAL=m
CONFIG_USB_MIDI_GADGET=m
CONFIG_USB_G_PRINTER=m
CONFIG_USB_CDC_COMPOSITE=m
CONFIG_USB_G_NOKIA=m
CONFIG_USB_G_ACM_MS=m
CONFIG_USB_G_MULTI=m
CONFIG_USB_G_MULTI_RNDIS=y
CONFIG_USB_G_MULTI_CDC=y
CONFIG_USB_G_HID=m
CONFIG_USB_G_DBGP=m
# CONFIG_USB_G_DBGP_PRINTK is not set
CONFIG_USB_G_DBGP_SERIAL=y
CONFIG_USB_G_WEBCAM=m
CONFIG_USB_RAW_GADGET=m
# end of USB Gadget precomposed configurations

CONFIG_TYPEC=m
CONFIG_TYPEC_TCPM=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_RT1711H=m
CONFIG_TYPEC_MT6360=m
CONFIG_TYPEC_TCPCI_MT6370=m
CONFIG_TYPEC_TCPCI_MAXIM=m
CONFIG_TYPEC_FUSB302=m
CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_ANX7411=m
CONFIG_TYPEC_RT1719=m
CONFIG_TYPEC_HD3SS3220=m
CONFIG_TYPEC_STUSB160X=m
CONFIG_TYPEC_QCOM_PMIC=m
CONFIG_TYPEC_WUSB3801=m

#
# USB Type-C Multiplexer/DeMultiplexer Switch support
#
CONFIG_TYPEC_MUX_FSA4480=m
CONFIG_TYPEC_MUX_PI3USB30532=m
# end of USB Type-C Multiplexer/DeMultiplexer Switch support

#
# USB Type-C Alternate Mode drivers
#
CONFIG_TYPEC_DP_ALTMODE=m
CONFIG_TYPEC_NVIDIA_ALTMODE=m
# end of USB Type-C Alternate Mode drivers

CONFIG_USB_ROLE_SWITCH=y
CONFIG_MMC=m
CONFIG_PWRSEQ_EMMC=m
CONFIG_PWRSEQ_SD8787=m
CONFIG_PWRSEQ_SIMPLE=m
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_SDIO_UART=m
CONFIG_MMC_TEST=m
CONFIG_MMC_CRYPTO=y

#
# MMC/SD/SDIO Host Controller Drivers
#
CONFIG_MMC_DEBUG=y
CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_IO_ACCESSORS=y
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_OF_ARASAN=m
CONFIG_MMC_SDHCI_OF_ASPEED=m
CONFIG_MMC_SDHCI_OF_ASPEED_TEST=y
CONFIG_MMC_SDHCI_OF_AT91=m
CONFIG_MMC_SDHCI_OF_ESDHC=m
CONFIG_MMC_SDHCI_OF_DWCMSHC=m
CONFIG_MMC_SDHCI_OF_SPARX5=m
CONFIG_MMC_SDHCI_CADENCE=m
CONFIG_MMC_SDHCI_CNS3XXX=m
CONFIG_MMC_SDHCI_ESDHC_IMX=m
CONFIG_MMC_SDHCI_DOVE=m
CONFIG_MMC_SDHCI_TEGRA=m
CONFIG_MMC_SDHCI_S3C=m
CONFIG_MMC_SDHCI_PXAV3=m
CONFIG_MMC_SDHCI_PXAV2=m
CONFIG_MMC_SDHCI_SPEAR=m
CONFIG_MMC_SDHCI_S3C_DMA=y
CONFIG_MMC_SDHCI_BCM_KONA=m
CONFIG_MMC_SDHCI_F_SDH30=m
CONFIG_MMC_SDHCI_MILBEAUT=m
CONFIG_MMC_SDHCI_IPROC=m
CONFIG_MMC_MESON_GX=m
CONFIG_MMC_MESON_MX_SDHC=m
CONFIG_MMC_MESON_MX_SDIO=m
CONFIG_MMC_MOXART=m
CONFIG_MMC_SDHCI_ST=m
CONFIG_MMC_OMAP_HS=m
CONFIG_MMC_SDHCI_MSM=m
CONFIG_MMC_DAVINCI=m
CONFIG_MMC_SPI=m
CONFIG_MMC_S3C=m
CONFIG_MMC_S3C_HW_SDIO_IRQ=y
CONFIG_MMC_S3C_PIO=y
# CONFIG_MMC_S3C_DMA is not set
CONFIG_MMC_SDHCI_SPRD=m
CONFIG_MMC_TMIO_CORE=m
CONFIG_MMC_TMIO=m
CONFIG_MMC_SDHI=m
CONFIG_MMC_SDHI_SYS_DMAC=m
CONFIG_MMC_SDHI_INTERNAL_DMAC=m
CONFIG_MMC_UNIPHIER=m
CONFIG_MMC_DW=m
CONFIG_MMC_DW_PLTFM=m
CONFIG_MMC_DW_BLUEFIELD=m
CONFIG_MMC_DW_EXYNOS=m
CONFIG_MMC_DW_HI3798CV200=m
CONFIG_MMC_DW_K3=m
CONFIG_MMC_SH_MMCIF=m
CONFIG_MMC_VUB300=m
CONFIG_MMC_USHC=m
CONFIG_MMC_USDHI6ROL0=m
CONFIG_MMC_REALTEK_USB=m
CONFIG_MMC_SUNXI=m
CONFIG_MMC_CQHCI=m
CONFIG_MMC_HSQ=m
CONFIG_MMC_BCM2835=m
CONFIG_MMC_MTK=m
CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDHCI_OMAP=m
CONFIG_MMC_SDHCI_AM654=m
CONFIG_MMC_OWL=m
CONFIG_MMC_SDHCI_EXTERNAL_DMA=y
CONFIG_MMC_LITEX=m
CONFIG_SCSI_UFSHCD=m
CONFIG_SCSI_UFS_BSG=y
CONFIG_SCSI_UFS_CRYPTO=y
CONFIG_SCSI_UFS_HPB=y
CONFIG_SCSI_UFS_FAULT_INJECTION=y
CONFIG_SCSI_UFS_HWMON=y
CONFIG_SCSI_UFSHCD_PLATFORM=m
CONFIG_SCSI_UFS_CDNS_PLATFORM=m
CONFIG_SCSI_UFS_DWC_TC_PLATFORM=m
CONFIG_SCSI_UFS_HISI=m
CONFIG_SCSI_UFS_RENESAS=m
CONFIG_SCSI_UFS_TI_J721E=m
CONFIG_SCSI_UFS_EXYNOS=m
CONFIG_MEMSTICK=m
CONFIG_MEMSTICK_DEBUG=y

#
# MemoryStick drivers
#
CONFIG_MEMSTICK_UNSAFE_RESUME=y
CONFIG_MSPRO_BLOCK=m
CONFIG_MS_BLOCK=m

#
# MemoryStick Host Controller Drivers
#
CONFIG_MEMSTICK_REALTEK_USB=m
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=m
CONFIG_LEDS_CLASS_FLASH=m
CONFIG_LEDS_CLASS_MULTICOLOR=m
CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y

#
# LED drivers
#
CONFIG_LEDS_AN30259A=m
CONFIG_LEDS_ARIEL=m
CONFIG_LEDS_AW2013=m
CONFIG_LEDS_BCM6328=m
CONFIG_LEDS_BCM6358=m
CONFIG_LEDS_CPCAP=m
CONFIG_LEDS_CR0014114=m
CONFIG_LEDS_EL15203000=m
CONFIG_LEDS_TURRIS_OMNIA=m
CONFIG_LEDS_LM3530=m
CONFIG_LEDS_LM3532=m
CONFIG_LEDS_LM3533=m
CONFIG_LEDS_LM3642=m
CONFIG_LEDS_LM3692X=m
CONFIG_LEDS_MT6323=m
CONFIG_LEDS_S3C24XX=m
CONFIG_LEDS_COBALT_QUBE=m
CONFIG_LEDS_PCA9532=m
CONFIG_LEDS_PCA9532_GPIO=y
CONFIG_LEDS_GPIO=m
CONFIG_LEDS_LP3944=m
CONFIG_LEDS_LP3952=m
CONFIG_LEDS_LP50XX=m
CONFIG_LEDS_LP55XX_COMMON=m
CONFIG_LEDS_LP5521=m
CONFIG_LEDS_LP5523=m
CONFIG_LEDS_LP5562=m
CONFIG_LEDS_LP8501=m
CONFIG_LEDS_LP8860=m
CONFIG_LEDS_PCA955X=m
CONFIG_LEDS_PCA955X_GPIO=y
CONFIG_LEDS_PCA963X=m
CONFIG_LEDS_WM831X_STATUS=m
CONFIG_LEDS_DA9052=m
CONFIG_LEDS_DAC124S085=m
CONFIG_LEDS_PWM=m
CONFIG_LEDS_REGULATOR=m
CONFIG_LEDS_BD2802=m
CONFIG_LEDS_LT3593=m
CONFIG_LEDS_MC13783=m
CONFIG_LEDS_NS2=m
CONFIG_LEDS_NETXBIG=m
CONFIG_LEDS_TCA6507=m
CONFIG_LEDS_TLC591XX=m
CONFIG_LEDS_MAX77650=m
CONFIG_LEDS_LM355x=m
CONFIG_LEDS_OT200=m
CONFIG_LEDS_MENF21BMC=m
CONFIG_LEDS_IS31FL319X=m
CONFIG_LEDS_IS31FL32XX=m
CONFIG_LEDS_SC27XX_BLTC=m

#
# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
#
CONFIG_LEDS_BLINKM=m
CONFIG_LEDS_PM8058=m
CONFIG_LEDS_MLXREG=m
CONFIG_LEDS_USER=m
CONFIG_LEDS_SPI_BYTE=m
CONFIG_LEDS_TI_LMU_COMMON=m
CONFIG_LEDS_LM3697=m
CONFIG_LEDS_LM36274=m
CONFIG_LEDS_TPS6105X=m
CONFIG_LEDS_IP30=m
CONFIG_LEDS_ACER_A500=m
CONFIG_LEDS_BCM63138=m
CONFIG_LEDS_LGM=m

#
# Flash and Torch LED drivers
#
CONFIG_LEDS_AAT1290=m
CONFIG_LEDS_AS3645A=m
CONFIG_LEDS_KTD2692=m
CONFIG_LEDS_LM3601X=m
CONFIG_LEDS_MAX77693=m
CONFIG_LEDS_MT6360=m
CONFIG_LEDS_RT4505=m
CONFIG_LEDS_RT8515=m
CONFIG_LEDS_SGM3140=m

#
# RGB LED drivers
#
CONFIG_LEDS_PWM_MULTICOLOR=m
CONFIG_LEDS_QCOM_LPG=m

#
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=m
CONFIG_LEDS_TRIGGER_ONESHOT=m
CONFIG_LEDS_TRIGGER_DISK=y
CONFIG_LEDS_TRIGGER_MTD=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CPU=y
CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_GPIO=m
CONFIG_LEDS_TRIGGER_DEFAULT_ON=m

#
# iptables trigger is under Netfilter config (LED target)
#
CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
CONFIG_LEDS_TRIGGER_PANIC=y
CONFIG_LEDS_TRIGGER_NETDEV=m
CONFIG_LEDS_TRIGGER_PATTERN=m
CONFIG_LEDS_TRIGGER_AUDIO=m
CONFIG_LEDS_TRIGGER_TTY=m

#
# Simple LED drivers
#
CONFIG_ACCESSIBILITY=y
CONFIG_A11Y_BRAILLE_CONSOLE=y

#
# Speakup console speech
#
CONFIG_SPEAKUP=m
CONFIG_SPEAKUP_SERIALIO=y
CONFIG_SPEAKUP_SYNTH_ACNTSA=m
CONFIG_SPEAKUP_SYNTH_ACNTPC=m
CONFIG_SPEAKUP_SYNTH_APOLLO=m
CONFIG_SPEAKUP_SYNTH_AUDPTR=m
CONFIG_SPEAKUP_SYNTH_BNS=m
CONFIG_SPEAKUP_SYNTH_DECTLK=m
CONFIG_SPEAKUP_SYNTH_DECEXT=m
CONFIG_SPEAKUP_SYNTH_DECPC=m
CONFIG_SPEAKUP_SYNTH_DTLK=m
CONFIG_SPEAKUP_SYNTH_KEYPC=m
CONFIG_SPEAKUP_SYNTH_LTLK=m
CONFIG_SPEAKUP_SYNTH_SOFT=m
CONFIG_SPEAKUP_SYNTH_SPKOUT=m
CONFIG_SPEAKUP_SYNTH_TXPRT=m
CONFIG_SPEAKUP_SYNTH_DUMMY=m
# end of Speakup console speech

CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MEM=y
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_ADDR_TRANS=y
CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y
CONFIG_INFINIBAND_VIRT_DMA=y
CONFIG_RDMA_SIW=m
CONFIG_INFINIBAND_IPOIB=m
CONFIG_INFINIBAND_IPOIB_CM=y
CONFIG_INFINIBAND_IPOIB_DEBUG=y
CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_ISER=m
CONFIG_INFINIBAND_ISERT=m
CONFIG_INFINIBAND_RTRS=m
CONFIG_INFINIBAND_RTRS_CLIENT=m
CONFIG_INFINIBAND_RTRS_SERVER=m
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
CONFIG_RTC_SYSTOHC=y
CONFIG_RTC_SYSTOHC_DEVICE="rtc0"
CONFIG_RTC_DEBUG=y
CONFIG_RTC_LIB_KUNIT_TEST=m
CONFIG_RTC_NVMEM=y

#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
CONFIG_RTC_INTF_DEV_UIE_EMUL=y
CONFIG_RTC_DRV_TEST=m

#
# I2C RTC drivers
#
CONFIG_RTC_DRV_88PM80X=m
CONFIG_RTC_DRV_ABB5ZES3=m
CONFIG_RTC_DRV_ABEOZ9=m
CONFIG_RTC_DRV_ABX80X=m
CONFIG_RTC_DRV_BRCMSTB=m
CONFIG_RTC_DRV_DS1307=m
CONFIG_RTC_DRV_DS1307_CENTURY=y
CONFIG_RTC_DRV_DS1374=m
CONFIG_RTC_DRV_DS1374_WDT=y
CONFIG_RTC_DRV_DS1672=m
CONFIG_RTC_DRV_HYM8563=m
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX8907=m
CONFIG_RTC_DRV_MAX77686=m
CONFIG_RTC_DRV_NCT3018Y=m
CONFIG_RTC_DRV_RK808=m
CONFIG_RTC_DRV_RS5C372=m
CONFIG_RTC_DRV_ISL1208=m
CONFIG_RTC_DRV_ISL12022=m
CONFIG_RTC_DRV_ISL12026=m
CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_PCF8523=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF85363=m
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_M41T80=m
CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_BQ32K=m
CONFIG_RTC_DRV_RC5T619=m
CONFIG_RTC_DRV_S35390A=m
CONFIG_RTC_DRV_FM3130=m
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8581=m
CONFIG_RTC_DRV_RX8025=m
CONFIG_RTC_DRV_EM3027=m
CONFIG_RTC_DRV_RV3028=m
CONFIG_RTC_DRV_RV3032=m
CONFIG_RTC_DRV_RV8803=m
CONFIG_RTC_DRV_S5M=m
CONFIG_RTC_DRV_SD3078=m

#
# SPI RTC drivers
#
CONFIG_RTC_DRV_M41T93=m
CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_DS1302=m
CONFIG_RTC_DRV_DS1305=m
CONFIG_RTC_DRV_DS1343=m
CONFIG_RTC_DRV_DS1347=m
CONFIG_RTC_DRV_DS1390=m
CONFIG_RTC_DRV_MAX6916=m
CONFIG_RTC_DRV_R9701=m
CONFIG_RTC_DRV_RX4581=m
CONFIG_RTC_DRV_RS5C348=m
CONFIG_RTC_DRV_MAX6902=m
CONFIG_RTC_DRV_PCF2123=m
CONFIG_RTC_DRV_MCP795=m
CONFIG_RTC_I2C_AND_SPI=m

#
# SPI and I2C RTC drivers
#
CONFIG_RTC_DRV_DS3232=m
CONFIG_RTC_DRV_DS3232_HWMON=y
CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_RV3029C2=m
CONFIG_RTC_DRV_RV3029_HWMON=y
CONFIG_RTC_DRV_RX6110=m

#
# Platform RTC drivers
#
CONFIG_RTC_DRV_DS1286=m
CONFIG_RTC_DRV_DS1511=m
CONFIG_RTC_DRV_DS1553=m
CONFIG_RTC_DRV_DS1685_FAMILY=m
CONFIG_RTC_DRV_DS1685=y
# CONFIG_RTC_DRV_DS1689 is not set
# CONFIG_RTC_DRV_DS17285 is not set
# CONFIG_RTC_DRV_DS17485 is not set
# CONFIG_RTC_DRV_DS17885 is not set
CONFIG_RTC_DRV_DS1742=m
CONFIG_RTC_DRV_DS2404=m
CONFIG_RTC_DRV_DA9052=m
CONFIG_RTC_DRV_DA9063=m
CONFIG_RTC_DRV_STK17TA8=m
CONFIG_RTC_DRV_M48T86=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
CONFIG_RTC_DRV_MSM6242=m
CONFIG_RTC_DRV_BQ4802=m
CONFIG_RTC_DRV_RP5C01=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_GAMECUBE=m
CONFIG_RTC_DRV_WM831X=m
CONFIG_RTC_DRV_SC27XX=m
CONFIG_RTC_DRV_SPEAR=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_ZYNQMP=m
CONFIG_RTC_DRV_CROS_EC=m
CONFIG_RTC_DRV_NTXEC=m

#
# on-CPU RTC drivers
#
CONFIG_RTC_DRV_ASM9260=m
CONFIG_RTC_DRV_DAVINCI=m
CONFIG_RTC_DRV_DIGICOLOR=m
CONFIG_RTC_DRV_FSL_FTM_ALARM=m
CONFIG_RTC_DRV_MESON=m
CONFIG_RTC_DRV_MESON_VRTC=m
CONFIG_RTC_DRV_OMAP=m
CONFIG_RTC_DRV_S3C=m
CONFIG_RTC_DRV_EP93XX=m
CONFIG_RTC_DRV_AT91RM9200=m
CONFIG_RTC_DRV_AT91SAM9=m
CONFIG_RTC_DRV_RZN1=m
CONFIG_RTC_DRV_GENERIC=m
CONFIG_RTC_DRV_VT8500=m
CONFIG_RTC_DRV_SUN6I=y
CONFIG_RTC_DRV_SUNXI=m
CONFIG_RTC_DRV_MV=m
CONFIG_RTC_DRV_ARMADA38X=m
CONFIG_RTC_DRV_CADENCE=m
CONFIG_RTC_DRV_FTRTC010=m
CONFIG_RTC_DRV_STMP=m
CONFIG_RTC_DRV_PCAP=m
CONFIG_RTC_DRV_MC13XXX=m
CONFIG_RTC_DRV_JZ4740=m
CONFIG_RTC_DRV_LPC24XX=m
CONFIG_RTC_DRV_LPC32XX=m
CONFIG_RTC_DRV_PM8XXX=m
CONFIG_RTC_DRV_TEGRA=m
CONFIG_RTC_DRV_MXC=m
CONFIG_RTC_DRV_MXC_V2=m
CONFIG_RTC_DRV_SNVS=m
CONFIG_RTC_DRV_MOXART=m
CONFIG_RTC_DRV_MT2712=m
CONFIG_RTC_DRV_MT6397=m
CONFIG_RTC_DRV_MT7622=m
CONFIG_RTC_DRV_XGENE=m
CONFIG_RTC_DRV_R7301=m
CONFIG_RTC_DRV_STM32=m
CONFIG_RTC_DRV_CPCAP=m
CONFIG_RTC_DRV_RTD119X=y
CONFIG_RTC_DRV_ASPEED=m
CONFIG_RTC_DRV_TI_K3=m

#
# HID Sensor RTC drivers
#
CONFIG_RTC_DRV_HID_SENSOR_TIME=m
CONFIG_RTC_DRV_GOLDFISH=y
CONFIG_RTC_DRV_MSC313=m
CONFIG_DMADEVICES=y
CONFIG_DMADEVICES_DEBUG=y
CONFIG_DMADEVICES_VDEBUG=y

#
# DMA Devices
#
CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=y
CONFIG_DMA_ENGINE=y
CONFIG_DMA_VIRTUAL_CHANNELS=y
CONFIG_DMA_OF=y
CONFIG_ALTERA_MSGDMA=m
CONFIG_APPLE_ADMAC=m
CONFIG_AXI_DMAC=m
CONFIG_BCM_SBA_RAID=m
CONFIG_DMA_JZ4780=m
CONFIG_DMA_SA11X0=m
CONFIG_DMA_SUN6I=m
CONFIG_DW_AXI_DMAC=m
CONFIG_EP93XX_DMA=y
CONFIG_FSL_EDMA=m
CONFIG_IMG_MDC_DMA=m
CONFIG_INTEL_IDMA64=m
CONFIG_INTEL_IOP_ADMA=m
CONFIG_K3_DMA=m
CONFIG_MCF_EDMA=m
CONFIG_MILBEAUT_HDMAC=m
CONFIG_MILBEAUT_XDMAC=m
CONFIG_MMP_PDMA=m
CONFIG_MMP_TDMA=m
CONFIG_MV_XOR=y
CONFIG_MXS_DMA=y
CONFIG_NBPFAXI_DMA=m
CONFIG_STM32_DMA=y
CONFIG_STM32_DMAMUX=y
CONFIG_STM32_MDMA=y
CONFIG_SPRD_DMA=m
CONFIG_S3C24XX_DMAC=y
CONFIG_TEGRA20_APB_DMA=m
CONFIG_TEGRA210_ADMA=m
CONFIG_TIMB_DMA=m
CONFIG_UNIPHIER_MDMAC=m
CONFIG_UNIPHIER_XDMAC=m
CONFIG_XGENE_DMA=m
CONFIG_XILINX_ZYNQMP_DMA=m
CONFIG_XILINX_ZYNQMP_DPDMA=m
CONFIG_MTK_HSDMA=m
CONFIG_MTK_CQDMA=m
CONFIG_MTK_UART_APDMA=m
CONFIG_QCOM_ADM=m
CONFIG_QCOM_HIDMA_MGMT=m
CONFIG_QCOM_HIDMA=m
CONFIG_DW_DMAC_CORE=m
CONFIG_DW_DMAC=m
CONFIG_RZN1_DMAMUX=m
CONFIG_SF_PDMA=m
CONFIG_RENESAS_DMA=y
CONFIG_SH_DMAE_BASE=y
CONFIG_SH_DMAE=m
CONFIG_RCAR_DMAC=m
CONFIG_RENESAS_USB_DMAC=m
CONFIG_RZ_DMAC=m
CONFIG_TI_EDMA=m
CONFIG_DMA_OMAP=m
CONFIG_TI_DMA_CROSSBAR=y
CONFIG_INTEL_LDMA=y

#
# DMA Clients
#
CONFIG_ASYNC_TX_DMA=y
CONFIG_DMATEST=m
CONFIG_DMA_ENGINE_RAID=y

#
# DMABUF options
#
CONFIG_SYNC_FILE=y
CONFIG_SW_SYNC=y
CONFIG_UDMABUF=y
CONFIG_DMABUF_MOVE_NOTIFY=y
CONFIG_DMABUF_DEBUG=y
CONFIG_DMABUF_SELFTESTS=m
CONFIG_DMABUF_HEAPS=y
CONFIG_DMABUF_SYSFS_STATS=y
CONFIG_DMABUF_HEAPS_SYSTEM=y
# end of DMABUF options

CONFIG_AUXDISPLAY=y
CONFIG_CHARLCD=m
CONFIG_LINEDISP=m
CONFIG_HD44780_COMMON=m
CONFIG_HD44780=m
CONFIG_KS0108=m
CONFIG_KS0108_PORT=0x378
CONFIG_KS0108_DELAY=2
CONFIG_IMG_ASCII_LCD=m
CONFIG_HT16K33=m
CONFIG_LCD2S=m
CONFIG_PARPORT_PANEL=m
CONFIG_PANEL_PARPORT=0
CONFIG_PANEL_PROFILE=5
CONFIG_PANEL_CHANGE_MESSAGE=y
CONFIG_PANEL_BOOT_MESSAGE=""
# CONFIG_CHARLCD_BL_OFF is not set
# CONFIG_CHARLCD_BL_ON is not set
CONFIG_CHARLCD_BL_FLASH=y
CONFIG_PANEL=m
CONFIG_UIO=m
CONFIG_UIO_PDRV_GENIRQ=m
CONFIG_UIO_DMEM_GENIRQ=m
CONFIG_UIO_PRUSS=m
CONFIG_UIO_DFL=m
CONFIG_VFIO=m
CONFIG_VFIO_VIRQFD=m
CONFIG_VFIO_NOIOMMU=y
CONFIG_VFIO_PLATFORM=m
CONFIG_VFIO_AMBA=m
CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET=m
CONFIG_VFIO_PLATFORM_AMDXGBE_RESET=m
CONFIG_VFIO_PLATFORM_BCMFLEXRM_RESET=m
CONFIG_VFIO_MDEV=m
CONFIG_IRQ_BYPASS_MANAGER=m
CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_ANCHOR=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_VDPA=m
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_INPUT=m
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_VIRTIO_DMA_SHARED_BUFFER=m
CONFIG_VDPA=m
CONFIG_VDPA_SIM=m
CONFIG_VDPA_SIM_NET=m
CONFIG_VDPA_SIM_BLOCK=m
CONFIG_VDPA_USER=m
CONFIG_VHOST_IOTLB=m
CONFIG_VHOST_RING=m
CONFIG_VHOST=m
CONFIG_VHOST_MENU=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
CONFIG_VHOST_VDPA=m
CONFIG_VHOST_CROSS_ENDIAN_LEGACY=y

#
# Microsoft Hyper-V guest support
#
# end of Microsoft Hyper-V guest support

CONFIG_GREYBUS=m
CONFIG_GREYBUS_ES2=m
CONFIG_COMEDI=m
CONFIG_COMEDI_DEBUG=y
CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048
CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480
CONFIG_COMEDI_MISC_DRIVERS=y
CONFIG_COMEDI_BOND=m
CONFIG_COMEDI_TEST=m
CONFIG_COMEDI_PARPORT=m
CONFIG_COMEDI_SSV_DNP=m
CONFIG_COMEDI_ISA_DRIVERS=y
CONFIG_COMEDI_PCL711=m
CONFIG_COMEDI_PCL724=m
CONFIG_COMEDI_PCL726=m
CONFIG_COMEDI_PCL730=m
CONFIG_COMEDI_PCL812=m
CONFIG_COMEDI_PCL816=m
CONFIG_COMEDI_PCL818=m
CONFIG_COMEDI_PCM3724=m
CONFIG_COMEDI_AMPLC_DIO200_ISA=m
CONFIG_COMEDI_AMPLC_PC236_ISA=m
CONFIG_COMEDI_AMPLC_PC263_ISA=m
CONFIG_COMEDI_RTI800=m
CONFIG_COMEDI_RTI802=m
CONFIG_COMEDI_DAC02=m
CONFIG_COMEDI_DAS16M1=m
CONFIG_COMEDI_DAS08_ISA=m
CONFIG_COMEDI_DAS16=m
CONFIG_COMEDI_DAS800=m
CONFIG_COMEDI_DAS1800=m
CONFIG_COMEDI_DAS6402=m
CONFIG_COMEDI_DT2801=m
CONFIG_COMEDI_DT2811=m
CONFIG_COMEDI_DT2814=m
CONFIG_COMEDI_DT2815=m
CONFIG_COMEDI_DT2817=m
CONFIG_COMEDI_DT282X=m
CONFIG_COMEDI_DMM32AT=m
CONFIG_COMEDI_FL512=m
CONFIG_COMEDI_AIO_AIO12_8=m
CONFIG_COMEDI_AIO_IIRO_16=m
CONFIG_COMEDI_II_PCI20KC=m
CONFIG_COMEDI_C6XDIGIO=m
CONFIG_COMEDI_MPC624=m
CONFIG_COMEDI_ADQ12B=m
CONFIG_COMEDI_NI_AT_A2150=m
CONFIG_COMEDI_NI_AT_AO=m
CONFIG_COMEDI_NI_ATMIO=m
CONFIG_COMEDI_NI_ATMIO16D=m
CONFIG_COMEDI_NI_LABPC_ISA=m
CONFIG_COMEDI_PCMAD=m
CONFIG_COMEDI_PCMDA12=m
CONFIG_COMEDI_PCMMIO=m
CONFIG_COMEDI_PCMUIO=m
CONFIG_COMEDI_MULTIQ3=m
CONFIG_COMEDI_S526=m
CONFIG_COMEDI_PCMCIA_DRIVERS=m
CONFIG_COMEDI_CB_DAS16_CS=m
CONFIG_COMEDI_DAS08_CS=m
CONFIG_COMEDI_NI_DAQ_700_CS=m
CONFIG_COMEDI_NI_DAQ_DIO24_CS=m
CONFIG_COMEDI_NI_LABPC_CS=m
CONFIG_COMEDI_NI_MIO_CS=m
CONFIG_COMEDI_QUATECH_DAQP_CS=m
CONFIG_COMEDI_USB_DRIVERS=m
CONFIG_COMEDI_DT9812=m
CONFIG_COMEDI_NI_USB6501=m
CONFIG_COMEDI_USBDUX=m
CONFIG_COMEDI_USBDUXFAST=m
CONFIG_COMEDI_USBDUXSIGMA=m
CONFIG_COMEDI_VMK80XX=m
CONFIG_COMEDI_8254=m
CONFIG_COMEDI_8255=m
CONFIG_COMEDI_8255_SA=m
CONFIG_COMEDI_KCOMEDILIB=m
CONFIG_COMEDI_AMPLC_DIO200=m
CONFIG_COMEDI_AMPLC_PC236=m
CONFIG_COMEDI_DAS08=m
CONFIG_COMEDI_NI_LABPC=m
CONFIG_COMEDI_NI_TIO=m
CONFIG_COMEDI_NI_ROUTING=m
CONFIG_COMEDI_TESTS=m
CONFIG_COMEDI_TESTS_EXAMPLE=m
CONFIG_COMEDI_TESTS_NI_ROUTES=m
CONFIG_STAGING=y
CONFIG_PRISM2_USB=m
CONFIG_RTLLIB=m
CONFIG_RTLLIB_CRYPTO_CCMP=m
CONFIG_RTLLIB_CRYPTO_TKIP=m
CONFIG_RTLLIB_CRYPTO_WEP=m
CONFIG_RTL8723BS=m
CONFIG_R8712U=m
CONFIG_R8188EU=m
CONFIG_OCTEON_ETHERNET=m
CONFIG_VT6656=m

#
# IIO staging drivers
#

#
# Accelerometers
#
CONFIG_ADIS16203=m
CONFIG_ADIS16240=m
# end of Accelerometers

#
# Analog to digital converters
#
CONFIG_AD7816=m
# end of Analog to digital converters

#
# Analog digital bi-direction converters
#
CONFIG_ADT7316=m
CONFIG_ADT7316_SPI=m
CONFIG_ADT7316_I2C=m
# end of Analog digital bi-direction converters

#
# Direct Digital Synthesis
#
CONFIG_AD9832=m
CONFIG_AD9834=m
# end of Direct Digital Synthesis

#
# Network Analyzer, Impedance Converters
#
CONFIG_AD5933=m
# end of Network Analyzer, Impedance Converters

#
# Active energy metering IC
#
CONFIG_ADE7854=m
CONFIG_ADE7854_I2C=m
CONFIG_ADE7854_SPI=m
# end of Active energy metering IC

#
# Resolver to digital converters
#
CONFIG_AD2S1210=m
# end of Resolver to digital converters
# end of IIO staging drivers

CONFIG_USB_EMXX=m
CONFIG_STAGING_MEDIA=y
CONFIG_VIDEO_IMX_MEDIA=m

#
# i.MX5/6/7/8 Media Sub devices
#
CONFIG_VIDEO_IMX_CSI=m
CONFIG_VIDEO_IMX7_CSI=m
# end of i.MX5/6/7/8 Media Sub devices

CONFIG_VIDEO_MAX96712=m
CONFIG_VIDEO_MESON_VDEC=m
CONFIG_VIDEO_OMAP4=m
CONFIG_VIDEO_ROCKCHIP_VDEC=m
CONFIG_VIDEO_SUNXI=y
CONFIG_VIDEO_SUNXI_CEDRUS=m
CONFIG_STAGING_MEDIA_DEPRECATED=y
CONFIG_VIDEO_CPIA2=m
CONFIG_VIDEO_VIU=m
CONFIG_VIDEO_STKWEBCAM=m
CONFIG_VIDEO_TM6000=m
CONFIG_VIDEO_TM6000_ALSA=m
CONFIG_VIDEO_TM6000_DVB=m
CONFIG_VIDEO_DM6446_CCDC=m
CONFIG_VIDEO_DM355_CCDC=m
CONFIG_VIDEO_DM365_ISIF=m
CONFIG_USB_ZR364XX=m
CONFIG_STAGING_BOARD=y
CONFIG_LTE_GDM724X=m
CONFIG_FB_TFT=m
CONFIG_FB_TFT_AGM1264K_FL=m
CONFIG_FB_TFT_BD663474=m
CONFIG_FB_TFT_HX8340BN=m
CONFIG_FB_TFT_HX8347D=m
CONFIG_FB_TFT_HX8353D=m
CONFIG_FB_TFT_HX8357D=m
CONFIG_FB_TFT_ILI9163=m
CONFIG_FB_TFT_ILI9320=m
CONFIG_FB_TFT_ILI9325=m
CONFIG_FB_TFT_ILI9340=m
CONFIG_FB_TFT_ILI9341=m
CONFIG_FB_TFT_ILI9481=m
CONFIG_FB_TFT_ILI9486=m
CONFIG_FB_TFT_PCD8544=m
CONFIG_FB_TFT_RA8875=m
CONFIG_FB_TFT_S6D02A1=m
CONFIG_FB_TFT_S6D1121=m
CONFIG_FB_TFT_SEPS525=m
CONFIG_FB_TFT_SH1106=m
CONFIG_FB_TFT_SSD1289=m
CONFIG_FB_TFT_SSD1305=m
CONFIG_FB_TFT_SSD1306=m
CONFIG_FB_TFT_SSD1331=m
CONFIG_FB_TFT_SSD1351=m
CONFIG_FB_TFT_ST7735R=m
CONFIG_FB_TFT_ST7789V=m
CONFIG_FB_TFT_TINYLCD=m
CONFIG_FB_TFT_TLS8204=m
CONFIG_FB_TFT_UC1611=m
CONFIG_FB_TFT_UC1701=m
CONFIG_FB_TFT_UPD161704=m
CONFIG_MOST_COMPONENTS=m
CONFIG_MOST_NET=m
CONFIG_MOST_VIDEO=m
CONFIG_MOST_DIM2=m
CONFIG_MOST_I2C=m
CONFIG_KS7010=m
CONFIG_GREYBUS_AUDIO=m
CONFIG_GREYBUS_AUDIO_APB_CODEC=m
CONFIG_GREYBUS_BOOTROM=m
CONFIG_GREYBUS_FIRMWARE=m
CONFIG_GREYBUS_HID=m
CONFIG_GREYBUS_LIGHT=m
CONFIG_GREYBUS_LOG=m
CONFIG_GREYBUS_LOOPBACK=m
CONFIG_GREYBUS_POWER=m
CONFIG_GREYBUS_RAW=m
CONFIG_GREYBUS_VIBRATOR=m
CONFIG_GREYBUS_BRIDGED_PHY=m
CONFIG_GREYBUS_GPIO=m
CONFIG_GREYBUS_I2C=m
CONFIG_GREYBUS_PWM=m
CONFIG_GREYBUS_SDIO=m
CONFIG_GREYBUS_SPI=m
CONFIG_GREYBUS_UART=m
CONFIG_GREYBUS_USB=m
CONFIG_GREYBUS_ARCHE=m
CONFIG_BCM_VIDEOCORE=m
CONFIG_BCM2835_VCHIQ=m
CONFIG_VCHIQ_CDEV=y
CONFIG_SND_BCM2835=m
CONFIG_VIDEO_BCM2835=m
CONFIG_BCM2835_VCHIQ_MMAL=m
CONFIG_PI433=m
CONFIG_XIL_AXIS_FIFO=m
CONFIG_FIELDBUS_DEV=m
CONFIG_HMS_ANYBUSS_BUS=m
CONFIG_ARCX_ANYBUS_CONTROLLER=m
CONFIG_HMS_PROFINET=m
CONFIG_GOLDFISH=y
CONFIG_GOLDFISH_PIPE=m
CONFIG_CHROME_PLATFORMS=y
CONFIG_CROS_EC=m
CONFIG_CROS_EC_I2C=m
CONFIG_CROS_EC_RPMSG=m
CONFIG_CROS_EC_SPI=m
CONFIG_CROS_EC_PROTO=y
CONFIG_CROS_KBD_LED_BACKLIGHT=m
CONFIG_CROS_EC_CHARDEV=m
CONFIG_CROS_EC_LIGHTBAR=m
CONFIG_CROS_EC_VBC=m
CONFIG_CROS_EC_DEBUGFS=m
CONFIG_CROS_EC_SENSORHUB=m
CONFIG_CROS_EC_SYSFS=m
CONFIG_CROS_EC_TYPEC=m
CONFIG_CROS_USBPD_LOGGER=m
CONFIG_CROS_USBPD_NOTIFY=m
CONFIG_CROS_KUNIT=m
CONFIG_MELLANOX_PLATFORM=y
CONFIG_MLXREG_HOTPLUG=m
CONFIG_MLXREG_IO=m
CONFIG_MLXREG_LC=m
CONFIG_NVSW_SN2201=m
CONFIG_OLPC_EC=y
CONFIG_OLPC_XO175=y
CONFIG_OLPC_XO175_EC=m
CONFIG_SURFACE_PLATFORMS=y
CONFIG_HAVE_CLK=y
CONFIG_HAVE_CLK_PREPARE=y
CONFIG_COMMON_CLK=y
CONFIG_COMMON_CLK_WM831X=m

#
# Clock driver for ARM Reference designs
#
CONFIG_CLK_ICST=y
CONFIG_CLK_SP810=y
# end of Clock driver for ARM Reference designs

CONFIG_CLK_HSDK=y
CONFIG_LMK04832=m
CONFIG_COMMON_CLK_APPLE_NCO=m
CONFIG_COMMON_CLK_MAX77686=m
CONFIG_COMMON_CLK_MAX9485=m
CONFIG_COMMON_CLK_RK808=m
CONFIG_COMMON_CLK_HI655X=m
CONFIG_COMMON_CLK_SCMI=m
CONFIG_COMMON_CLK_SCPI=m
CONFIG_COMMON_CLK_SI5341=m
CONFIG_COMMON_CLK_SI5351=m
CONFIG_COMMON_CLK_SI514=m
CONFIG_COMMON_CLK_SI544=m
CONFIG_COMMON_CLK_SI570=m
CONFIG_COMMON_CLK_BM1880=y
CONFIG_COMMON_CLK_CDCE706=m
CONFIG_COMMON_CLK_TPS68470=m
CONFIG_COMMON_CLK_CDCE925=m
CONFIG_COMMON_CLK_CS2000_CP=m
CONFIG_COMMON_CLK_EN7523=y
CONFIG_COMMON_CLK_FSL_FLEXSPI=m
CONFIG_COMMON_CLK_FSL_SAI=y
CONFIG_COMMON_CLK_GEMINI=y
CONFIG_COMMON_CLK_LAN966X=m
CONFIG_COMMON_CLK_ASPEED=y
CONFIG_COMMON_CLK_S2MPS11=m
CONFIG_COMMON_CLK_AXI_CLKGEN=m
CONFIG_CLK_QORIQ=y
CONFIG_CLK_LS1028A_PLLDIG=m
CONFIG_COMMON_CLK_XGENE=y
CONFIG_COMMON_CLK_PWM=m
CONFIG_COMMON_CLK_OXNAS=y
CONFIG_COMMON_CLK_RS9_PCIE=m
CONFIG_COMMON_CLK_VC5=m
CONFIG_COMMON_CLK_VC7=m
CONFIG_COMMON_CLK_MMP2_AUDIO=m
CONFIG_COMMON_CLK_FIXED_MMIO=y
CONFIG_CLK_ACTIONS=y
CONFIG_CLK_OWL_S500=y
CONFIG_CLK_OWL_S700=y
CONFIG_CLK_OWL_S900=y
CONFIG_CLK_ANALOGBITS_WRPLL_CLN28HPC=y
CONFIG_CLK_BAIKAL_T1=y
CONFIG_CLK_BT1_CCU_PLL=y
CONFIG_CLK_BT1_CCU_DIV=y
CONFIG_CLK_BT1_CCU_RST=y
CONFIG_CLK_BCM2711_DVP=m
CONFIG_CLK_BCM2835=y
CONFIG_CLK_BCM_63XX=y
CONFIG_CLK_BCM_63XX_GATE=y
CONFIG_CLK_BCM_KONA=y
CONFIG_COMMON_CLK_IPROC=y
CONFIG_CLK_BCM_CYGNUS=y
CONFIG_CLK_BCM_HR2=y
CONFIG_CLK_BCM_NSP=y
CONFIG_CLK_BCM_NS2=y
CONFIG_CLK_BCM_SR=y
CONFIG_CLK_RASPBERRYPI=m
CONFIG_COMMON_CLK_HI3516CV300=m
CONFIG_COMMON_CLK_HI3519=m
CONFIG_COMMON_CLK_HI3559A=y
CONFIG_COMMON_CLK_HI3660=y
CONFIG_COMMON_CLK_HI3670=y
CONFIG_COMMON_CLK_HI3798CV200=m
CONFIG_COMMON_CLK_HI6220=y
CONFIG_RESET_HISI=y
CONFIG_STUB_CLK_HI6220=y
CONFIG_STUB_CLK_HI3660=y
CONFIG_COMMON_CLK_BOSTON=y
CONFIG_MXC_CLK=m
CONFIG_CLK_IMX8MM=m
CONFIG_CLK_IMX8MN=m
CONFIG_CLK_IMX8MP=m
CONFIG_CLK_IMX8MQ=m
CONFIG_CLK_IMX8ULP=m
CONFIG_CLK_IMX93=m

#
# Ingenic SoCs drivers
#
CONFIG_INGENIC_CGU_COMMON=y
CONFIG_INGENIC_CGU_JZ4740=y
CONFIG_INGENIC_CGU_JZ4725B=y
CONFIG_INGENIC_CGU_JZ4760=y
CONFIG_INGENIC_CGU_JZ4770=y
CONFIG_INGENIC_CGU_JZ4780=y
CONFIG_INGENIC_CGU_X1000=y
CONFIG_INGENIC_CGU_X1830=y
CONFIG_INGENIC_TCU_CLK=y
# end of Ingenic SoCs drivers

CONFIG_COMMON_CLK_KEYSTONE=m
CONFIG_TI_SYSCON_CLK=m

#
# Clock driver for MediaTek SoC
#
CONFIG_COMMON_CLK_MEDIATEK=y
CONFIG_COMMON_CLK_MT2701=y
CONFIG_COMMON_CLK_MT2701_MMSYS=y
CONFIG_COMMON_CLK_MT2701_IMGSYS=y
CONFIG_COMMON_CLK_MT2701_VDECSYS=y
CONFIG_COMMON_CLK_MT2701_HIFSYS=y
CONFIG_COMMON_CLK_MT2701_ETHSYS=y
CONFIG_COMMON_CLK_MT2701_BDPSYS=y
CONFIG_COMMON_CLK_MT2701_AUDSYS=y
CONFIG_COMMON_CLK_MT2701_G3DSYS=y
CONFIG_COMMON_CLK_MT2712=y
CONFIG_COMMON_CLK_MT2712_BDPSYS=y
CONFIG_COMMON_CLK_MT2712_IMGSYS=y
CONFIG_COMMON_CLK_MT2712_JPGDECSYS=y
CONFIG_COMMON_CLK_MT2712_MFGCFG=y
CONFIG_COMMON_CLK_MT2712_MMSYS=y
CONFIG_COMMON_CLK_MT2712_VDECSYS=y
CONFIG_COMMON_CLK_MT2712_VENCSYS=y
CONFIG_COMMON_CLK_MT6765=y
CONFIG_COMMON_CLK_MT6765_AUDIOSYS=y
CONFIG_COMMON_CLK_MT6765_CAMSYS=y
CONFIG_COMMON_CLK_MT6765_GCESYS=y
CONFIG_COMMON_CLK_MT6765_MMSYS=y
CONFIG_COMMON_CLK_MT6765_IMGSYS=y
CONFIG_COMMON_CLK_MT6765_VCODECSYS=y
CONFIG_COMMON_CLK_MT6765_MFGSYS=y
CONFIG_COMMON_CLK_MT6765_MIPI0ASYS=y
CONFIG_COMMON_CLK_MT6765_MIPI0BSYS=y
CONFIG_COMMON_CLK_MT6765_MIPI1ASYS=y
CONFIG_COMMON_CLK_MT6765_MIPI1BSYS=y
CONFIG_COMMON_CLK_MT6765_MIPI2ASYS=y
CONFIG_COMMON_CLK_MT6765_MIPI2BSYS=y
CONFIG_COMMON_CLK_MT6779=m
CONFIG_COMMON_CLK_MT6779_MMSYS=m
CONFIG_COMMON_CLK_MT6779_IMGSYS=m
CONFIG_COMMON_CLK_MT6779_IPESYS=m
CONFIG_COMMON_CLK_MT6779_CAMSYS=m
CONFIG_COMMON_CLK_MT6779_VDECSYS=m
CONFIG_COMMON_CLK_MT6779_VENCSYS=m
CONFIG_COMMON_CLK_MT6779_MFGCFG=m
CONFIG_COMMON_CLK_MT6779_AUDSYS=m
CONFIG_COMMON_CLK_MT6795=m
CONFIG_COMMON_CLK_MT6795_MFGCFG=m
CONFIG_COMMON_CLK_MT6795_MMSYS=m
CONFIG_COMMON_CLK_MT6795_VDECSYS=m
CONFIG_COMMON_CLK_MT6795_VENCSYS=m
CONFIG_COMMON_CLK_MT6797=y
CONFIG_COMMON_CLK_MT6797_MMSYS=y
CONFIG_COMMON_CLK_MT6797_IMGSYS=y
CONFIG_COMMON_CLK_MT6797_VDECSYS=y
CONFIG_COMMON_CLK_MT6797_VENCSYS=y
CONFIG_COMMON_CLK_MT7622=y
CONFIG_COMMON_CLK_MT7622_ETHSYS=y
CONFIG_COMMON_CLK_MT7622_HIFSYS=y
CONFIG_COMMON_CLK_MT7622_AUDSYS=y
CONFIG_COMMON_CLK_MT7629=y
CONFIG_COMMON_CLK_MT7629_ETHSYS=y
CONFIG_COMMON_CLK_MT7629_HIFSYS=y
CONFIG_COMMON_CLK_MT7986=y
CONFIG_COMMON_CLK_MT7986_ETHSYS=y
CONFIG_COMMON_CLK_MT8135=y
CONFIG_COMMON_CLK_MT8167=y
CONFIG_COMMON_CLK_MT8167_AUDSYS=y
CONFIG_COMMON_CLK_MT8167_IMGSYS=y
CONFIG_COMMON_CLK_MT8167_MFGCFG=y
CONFIG_COMMON_CLK_MT8167_MMSYS=y
CONFIG_COMMON_CLK_MT8167_VDECSYS=y
CONFIG_COMMON_CLK_MT8173=y
CONFIG_COMMON_CLK_MT8173_MMSYS=y
CONFIG_COMMON_CLK_MT8183=y
CONFIG_COMMON_CLK_MT8183_AUDIOSYS=y
CONFIG_COMMON_CLK_MT8183_CAMSYS=y
CONFIG_COMMON_CLK_MT8183_IMGSYS=y
CONFIG_COMMON_CLK_MT8183_IPU_CORE0=y
CONFIG_COMMON_CLK_MT8183_IPU_CORE1=y
CONFIG_COMMON_CLK_MT8183_IPU_ADL=y
CONFIG_COMMON_CLK_MT8183_IPU_CONN=y
CONFIG_COMMON_CLK_MT8183_MFGCFG=y
CONFIG_COMMON_CLK_MT8183_MMSYS=y
CONFIG_COMMON_CLK_MT8183_VDECSYS=y
CONFIG_COMMON_CLK_MT8183_VENCSYS=y
CONFIG_COMMON_CLK_MT8186=y
CONFIG_COMMON_CLK_MT8192=y
CONFIG_COMMON_CLK_MT8192_AUDSYS=y
CONFIG_COMMON_CLK_MT8192_CAMSYS=y
CONFIG_COMMON_CLK_MT8192_IMGSYS=y
CONFIG_COMMON_CLK_MT8192_IMP_IIC_WRAP=y
CONFIG_COMMON_CLK_MT8192_IPESYS=y
CONFIG_COMMON_CLK_MT8192_MDPSYS=y
CONFIG_COMMON_CLK_MT8192_MFGCFG=y
CONFIG_COMMON_CLK_MT8192_MMSYS=y
CONFIG_COMMON_CLK_MT8192_MSDC=y
CONFIG_COMMON_CLK_MT8192_SCP_ADSP=y
CONFIG_COMMON_CLK_MT8192_VDECSYS=y
CONFIG_COMMON_CLK_MT8192_VENCSYS=y
CONFIG_COMMON_CLK_MT8195=y
CONFIG_COMMON_CLK_MT8365=m
CONFIG_COMMON_CLK_MT8365_APU=m
CONFIG_COMMON_CLK_MT8365_CAM=m
CONFIG_COMMON_CLK_MT8365_MFG=m
CONFIG_COMMON_CLK_MT8365_MMSYS=m
CONFIG_COMMON_CLK_MT8365_VDEC=m
CONFIG_COMMON_CLK_MT8365_VENC=m
CONFIG_COMMON_CLK_MT8516=y
CONFIG_COMMON_CLK_MT8516_AUDSYS=y
# end of Clock driver for MediaTek SoC

#
# Clock support for Amlogic platforms
#
# CONFIG_COMMON_CLK_AXG_AUDIO is not set
# end of Clock support for Amlogic platforms

CONFIG_MSTAR_MSC313_MPLL=y
CONFIG_MCHP_CLK_MPFS=y
CONFIG_COMMON_CLK_PISTACHIO=y
CONFIG_QCOM_GDSC=y
CONFIG_QCOM_RPMCC=y
CONFIG_COMMON_CLK_QCOM=m
CONFIG_QCOM_A53PLL=m
CONFIG_QCOM_A7PLL=m
CONFIG_QCOM_CLK_APCS_MSM8916=m
CONFIG_QCOM_CLK_APCS_SDX55=m
CONFIG_QCOM_CLK_SMD_RPM=m
CONFIG_QCOM_CLK_RPMH=m
CONFIG_APQ_GCC_8084=m
CONFIG_APQ_MMCC_8084=m
CONFIG_IPQ_APSS_PLL=m
CONFIG_IPQ_APSS_6018=m
CONFIG_IPQ_GCC_4019=m
CONFIG_IPQ_GCC_6018=m
CONFIG_IPQ_GCC_806X=m
CONFIG_IPQ_LCC_806X=m
CONFIG_IPQ_GCC_8074=m
CONFIG_MSM_GCC_8660=m
CONFIG_MSM_GCC_8909=m
CONFIG_MSM_GCC_8916=m
CONFIG_MSM_GCC_8939=m
CONFIG_MSM_GCC_8960=m
CONFIG_MSM_LCC_8960=m
CONFIG_MDM_GCC_9607=m
CONFIG_MDM_GCC_9615=m
CONFIG_MDM_LCC_9615=m
CONFIG_MSM_MMCC_8960=m
CONFIG_MSM_GCC_8953=m
CONFIG_MSM_GCC_8974=m
CONFIG_MSM_MMCC_8974=m
CONFIG_MSM_GCC_8976=m
CONFIG_MSM_MMCC_8994=m
CONFIG_MSM_GCC_8994=m
CONFIG_MSM_GCC_8996=m
CONFIG_MSM_MMCC_8996=m
CONFIG_MSM_GCC_8998=m
CONFIG_MSM_GPUCC_8998=m
CONFIG_MSM_MMCC_8998=m
CONFIG_QCM_GCC_2290=m
CONFIG_QCM_DISPCC_2290=m
CONFIG_QCS_GCC_404=m
CONFIG_SC_CAMCC_7180=m
CONFIG_SC_CAMCC_7280=m
CONFIG_SC_DISPCC_7180=m
CONFIG_SC_DISPCC_7280=m
CONFIG_SC_GCC_7180=m
CONFIG_SC_GCC_7280=m
CONFIG_SC_GCC_8180X=m
CONFIG_SC_GCC_8280XP=m
CONFIG_SC_GPUCC_7180=m
CONFIG_SC_GPUCC_7280=m
CONFIG_SC_GPUCC_8280XP=m
CONFIG_SC_LPASSCC_7280=m
CONFIG_SC_LPASS_CORECC_7180=m
CONFIG_SC_LPASS_CORECC_7280=m
CONFIG_SC_MSS_7180=m
CONFIG_SC_VIDEOCC_7180=m
CONFIG_SC_VIDEOCC_7280=m
CONFIG_SDM_CAMCC_845=m
CONFIG_SDM_GCC_660=m
CONFIG_SDM_MMCC_660=m
CONFIG_SDM_GPUCC_660=m
CONFIG_QCS_TURING_404=m
CONFIG_QCS_Q6SSTOP_404=m
CONFIG_SDM_GCC_845=m
CONFIG_SDM_GPUCC_845=m
CONFIG_SDM_VIDEOCC_845=m
CONFIG_SDM_DISPCC_845=m
CONFIG_SDM_LPASSCC_845=m
CONFIG_SDX_GCC_55=m
CONFIG_SDX_GCC_65=m
CONFIG_SM_CAMCC_8250=m
CONFIG_SM_CAMCC_8450=m
CONFIG_SM_DISPCC_6115=m
CONFIG_SM_DISPCC_6125=m
CONFIG_SM_DISPCC_8250=m
CONFIG_SM_DISPCC_6350=m
CONFIG_SM_DISPCC_8450=m
CONFIG_SM_GCC_6115=m
CONFIG_SM_GCC_6125=m
CONFIG_SM_GCC_6350=m
CONFIG_SM_GCC_6375=m
CONFIG_SM_GCC_8150=m
CONFIG_SM_GCC_8250=m
CONFIG_SM_GCC_8350=m
CONFIG_SM_GCC_8450=m
CONFIG_SM_GPUCC_6350=m
CONFIG_SM_GPUCC_8150=m
CONFIG_SM_GPUCC_8250=m
CONFIG_SM_GPUCC_8350=m
CONFIG_SM_VIDEOCC_8150=m
CONFIG_SM_VIDEOCC_8250=m
CONFIG_SPMI_PMIC_CLKDIV=m
CONFIG_QCOM_HFPLL=m
CONFIG_KPSS_XCC=m
CONFIG_CLK_GFM_LPASS_SM8250=m
CONFIG_CLK_MT7621=y
CONFIG_CLK_RENESAS=y
CONFIG_CLK_EMEV2=y
CONFIG_CLK_RZA1=y
CONFIG_CLK_R7S9210=y
CONFIG_CLK_R8A73A4=y
CONFIG_CLK_R8A7740=y
CONFIG_CLK_R8A7742=y
CONFIG_CLK_R8A7743=y
CONFIG_CLK_R8A7745=y
CONFIG_CLK_R8A77470=y
CONFIG_CLK_R8A774A1=y
CONFIG_CLK_R8A774B1=y
CONFIG_CLK_R8A774C0=y
CONFIG_CLK_R8A774E1=y
CONFIG_CLK_R8A7778=y
CONFIG_CLK_R8A7779=y
CONFIG_CLK_R8A7790=y
CONFIG_CLK_R8A7791=y
CONFIG_CLK_R8A7792=y
CONFIG_CLK_R8A7794=y
CONFIG_CLK_R8A7795=y
CONFIG_CLK_R8A77960=y
CONFIG_CLK_R8A77961=y
CONFIG_CLK_R8A77965=y
CONFIG_CLK_R8A77970=y
CONFIG_CLK_R8A77980=y
CONFIG_CLK_R8A77990=y
CONFIG_CLK_R8A77995=y
CONFIG_CLK_R8A779A0=y
CONFIG_CLK_R8A779F0=y
CONFIG_CLK_R8A779G0=y
CONFIG_CLK_R9A06G032=y
CONFIG_CLK_R9A07G043=y
CONFIG_CLK_R9A07G044=y
CONFIG_CLK_R9A07G054=y
CONFIG_CLK_R9A09G011=y
CONFIG_CLK_SH73A0=y
CONFIG_CLK_RCAR_CPG_LIB=y
CONFIG_CLK_RCAR_GEN2_CPG=y
CONFIG_CLK_RCAR_GEN3_CPG=y
CONFIG_CLK_RCAR_GEN4_CPG=y
CONFIG_CLK_RCAR_USB2_CLOCK_SEL=y
CONFIG_CLK_RZG2L=y
CONFIG_CLK_RENESAS_CPG_MSSR=y
CONFIG_CLK_RENESAS_CPG_MSTP=y
CONFIG_CLK_RENESAS_DIV6=y
CONFIG_COMMON_CLK_SAMSUNG=y
CONFIG_S3C64XX_COMMON_CLK=y
CONFIG_S5PV210_COMMON_CLK=y
CONFIG_EXYNOS_3250_COMMON_CLK=y
CONFIG_EXYNOS_4_COMMON_CLK=y
CONFIG_EXYNOS_5250_COMMON_CLK=y
CONFIG_EXYNOS_5260_COMMON_CLK=y
CONFIG_EXYNOS_5410_COMMON_CLK=y
CONFIG_EXYNOS_5420_COMMON_CLK=y
CONFIG_EXYNOS_ARM64_COMMON_CLK=y
CONFIG_EXYNOS_AUDSS_CLK_CON=m
CONFIG_EXYNOS_CLKOUT=m
CONFIG_S3C2410_COMMON_CLK=y
CONFIG_S3C2412_COMMON_CLK=y
CONFIG_S3C2443_COMMON_CLK=y
CONFIG_TESLA_FSD_COMMON_CLK=y
CONFIG_CLK_SIFIVE=y
CONFIG_CLK_SIFIVE_PRCI=y
CONFIG_CLK_INTEL_SOCFPGA=y
CONFIG_CLK_INTEL_SOCFPGA32=y
CONFIG_CLK_INTEL_SOCFPGA64=y
CONFIG_SPRD_COMMON_CLK=m
CONFIG_SPRD_SC9860_CLK=m
CONFIG_SPRD_SC9863A_CLK=m
CONFIG_SPRD_UMS512_CLK=m
CONFIG_CLK_STARFIVE_JH7100=y
CONFIG_CLK_STARFIVE_JH7100_AUDIO=m
CONFIG_CLK_SUNXI=y
CONFIG_CLK_SUNXI_CLOCKS=y
CONFIG_CLK_SUNXI_PRCM_SUN6I=y
CONFIG_CLK_SUNXI_PRCM_SUN8I=y
CONFIG_CLK_SUNXI_PRCM_SUN9I=y
CONFIG_SUNXI_CCU=m
CONFIG_SUNIV_F1C100S_CCU=m
CONFIG_SUN20I_D1_CCU=m
CONFIG_SUN20I_D1_R_CCU=m
CONFIG_SUN50I_A64_CCU=m
CONFIG_SUN50I_A100_CCU=m
CONFIG_SUN50I_A100_R_CCU=m
CONFIG_SUN50I_H6_CCU=m
CONFIG_SUN50I_H616_CCU=m
CONFIG_SUN50I_H6_R_CCU=m
CONFIG_SUN4I_A10_CCU=m
CONFIG_SUN6I_A31_CCU=m
CONFIG_SUN6I_RTC_CCU=m
CONFIG_SUN8I_A23_CCU=m
CONFIG_SUN8I_A33_CCU=m
CONFIG_SUN8I_A83T_CCU=m
CONFIG_SUN8I_H3_CCU=m
CONFIG_SUN8I_V3S_CCU=m
CONFIG_SUN8I_DE2_CCU=m
CONFIG_SUN8I_R40_CCU=m
CONFIG_SUN9I_A80_CCU=m
CONFIG_SUN8I_R_CCU=m
CONFIG_COMMON_CLK_TI_ADPLL=m
CONFIG_CLK_UNIPHIER=y
CONFIG_COMMON_CLK_VISCONTI=y
CONFIG_CLK_LGM_CGU=y
CONFIG_XILINX_VCU=m
CONFIG_COMMON_CLK_XLNX_CLKWZRD=m
CONFIG_COMMON_CLK_ZYNQMP=y
CONFIG_CLK_KUNIT_TEST=m
CONFIG_CLK_GATE_KUNIT_TEST=m
CONFIG_HWSPINLOCK=y
CONFIG_HWSPINLOCK_OMAP=m
CONFIG_HWSPINLOCK_QCOM=m
CONFIG_HWSPINLOCK_SPRD=m
CONFIG_HWSPINLOCK_STM32=m
CONFIG_HWSPINLOCK_SUN6I=m
CONFIG_HSEM_U8500=m

#
# Clock Source drivers
#
CONFIG_TIMER_OF=y
CONFIG_TIMER_PROBE=y
CONFIG_CLKSRC_MMIO=y
CONFIG_BCM2835_TIMER=y
CONFIG_BCM_KONA_TIMER=y
CONFIG_DAVINCI_TIMER=y
CONFIG_DIGICOLOR_TIMER=y
CONFIG_OMAP_DM_TIMER=y
CONFIG_DW_APB_TIMER=y
CONFIG_FTTMR010_TIMER=y
CONFIG_IXP4XX_TIMER=y
CONFIG_MESON6_TIMER=y
CONFIG_OWL_TIMER=y
CONFIG_RDA_TIMER=y
CONFIG_SUN4I_TIMER=y
CONFIG_SUN5I_HSTIMER=y
CONFIG_TEGRA_TIMER=y
CONFIG_TEGRA186_TIMER=y
CONFIG_VT8500_TIMER=y
CONFIG_NPCM7XX_TIMER=y
CONFIG_CADENCE_TTC_TIMER=y
CONFIG_ASM9260_TIMER=y
CONFIG_CLKSRC_DBX500_PRCMU=y
CONFIG_CLPS711X_TIMER=y
CONFIG_MXS_TIMER=y
CONFIG_NSPIRE_TIMER=y
CONFIG_INTEGRATOR_AP_TIMER=y
CONFIG_CLKSRC_PISTACHIO=y
CONFIG_CLKSRC_STM32_LP=y
CONFIG_ARMV7M_SYSTICK=y
CONFIG_ATMEL_PIT=y
CONFIG_ATMEL_ST=y
CONFIG_CLKSRC_SAMSUNG_PWM=y
CONFIG_FSL_FTM_TIMER=y
CONFIG_OXNAS_RPS_TIMER=y
CONFIG_MTK_TIMER=y
CONFIG_SPRD_TIMER=y
CONFIG_CLKSRC_JCORE_PIT=y
CONFIG_SH_TIMER_CMT=y
CONFIG_SH_TIMER_MTU2=y
CONFIG_RENESAS_OSTM=y
CONFIG_SH_TIMER_TMU=y
CONFIG_EM_TIMER_STI=y
CONFIG_CLKSRC_PXA=y
CONFIG_TIMER_IMX_SYS_CTR=y
CONFIG_CLKSRC_ST_LPC=y
CONFIG_GXP_TIMER=y
CONFIG_MSC313E_TIMER=y
CONFIG_INGENIC_TIMER=y
CONFIG_INGENIC_SYSOST=y
CONFIG_INGENIC_OST=y
CONFIG_MICROCHIP_PIT64B=y
CONFIG_GOLDFISH_TIMER=y
# end of Clock Source drivers

CONFIG_MAILBOX=y
CONFIG_IMX_MBOX=m
CONFIG_PLATFORM_MHU=m
CONFIG_ARMADA_37XX_RWTM_MBOX=m
CONFIG_ROCKCHIP_MBOX=y
CONFIG_ALTERA_MBOX=m
CONFIG_HI3660_MBOX=m
CONFIG_HI6220_MBOX=m
CONFIG_MAILBOX_TEST=m
CONFIG_POLARFIRE_SOC_MAILBOX=m
CONFIG_QCOM_APCS_IPC=m
CONFIG_BCM_PDC_MBOX=m
CONFIG_STM32_IPCC=m
CONFIG_MTK_ADSP_MBOX=m
CONFIG_MTK_CMDQ_MBOX=m
CONFIG_SUN6I_MSGBOX=m
CONFIG_SPRD_MBOX=m
CONFIG_QCOM_IPCC=m
CONFIG_IOMMU_IOVA=m
CONFIG_IOMMU_API=y
CONFIG_IOMMU_SUPPORT=y

#
# Generic IOMMU Pagetable Support
#
CONFIG_IOMMU_IO_PGTABLE=y
CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y
CONFIG_IOMMU_IO_PGTABLE_ARMV7S_SELFTEST=y
# end of Generic IOMMU Pagetable Support

CONFIG_IOMMU_DEBUGFS=y
CONFIG_IOMMU_DEFAULT_DMA_STRICT=y
# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
CONFIG_OF_IOMMU=y
CONFIG_OMAP_IOMMU=y
CONFIG_OMAP_IOMMU_DEBUG=y
CONFIG_ROCKCHIP_IOMMU=y
CONFIG_SUN50I_IOMMU=y
CONFIG_S390_CCW_IOMMU=y
CONFIG_S390_AP_IOMMU=y
CONFIG_MTK_IOMMU=m
CONFIG_SPRD_IOMMU=m

#
# Remoteproc drivers
#
CONFIG_REMOTEPROC=y
CONFIG_REMOTEPROC_CDEV=y
CONFIG_INGENIC_VPU_RPROC=m
CONFIG_MTK_SCP=m
CONFIG_MESON_MX_AO_ARC_REMOTEPROC=m
CONFIG_RCAR_REMOTEPROC=m
# end of Remoteproc drivers

#
# Rpmsg drivers
#
CONFIG_RPMSG=m
CONFIG_RPMSG_CHAR=m
CONFIG_RPMSG_CTRL=m
CONFIG_RPMSG_NS=m
CONFIG_RPMSG_MTK_SCP=m
CONFIG_RPMSG_QCOM_GLINK=m
CONFIG_RPMSG_QCOM_GLINK_RPM=m
CONFIG_RPMSG_QCOM_GLINK_SMEM=m
CONFIG_RPMSG_QCOM_SMD=m
CONFIG_RPMSG_VIRTIO=m
# end of Rpmsg drivers

CONFIG_SOUNDWIRE=m

#
# SoundWire Devices
#
CONFIG_SOUNDWIRE_QCOM=m

#
# SOC (System On Chip) specific Drivers
#

#
# Amlogic SoC drivers
#
CONFIG_MESON_CANVAS=m
CONFIG_MESON_CLK_MEASURE=m
CONFIG_MESON_GX_SOCINFO=y
CONFIG_MESON_MX_SOCINFO=y
# end of Amlogic SoC drivers

#
# Apple SoC drivers
#
CONFIG_APPLE_RTKIT=m
CONFIG_APPLE_SART=m
# end of Apple SoC drivers

#
# ASPEED SoC drivers
#
CONFIG_ASPEED_LPC_CTRL=m
CONFIG_ASPEED_LPC_SNOOP=m
CONFIG_ASPEED_UART_ROUTING=m
CONFIG_ASPEED_P2A_CTRL=m
CONFIG_ASPEED_SOCINFO=y
# end of ASPEED SoC drivers

CONFIG_AT91_SOC_ID=y
CONFIG_AT91_SOC_SFR=m

#
# Broadcom SoC drivers
#
CONFIG_BCM2835_POWER=y
CONFIG_SOC_BCM63XX=y
CONFIG_SOC_BRCMSTB=y
CONFIG_BCM63XX_POWER=y
CONFIG_BCM_PMB=y
# end of Broadcom SoC drivers

#
# NXP/Freescale QorIQ SoC drivers
#
CONFIG_QUICC_ENGINE=y
CONFIG_UCC_SLOW=y
CONFIG_UCC_FAST=y
CONFIG_UCC=y
CONFIG_QE_TDM=y
CONFIG_FSL_GUTS=y
CONFIG_DPAA2_CONSOLE=m
# end of NXP/Freescale QorIQ SoC drivers

#
# fujitsu SoC drivers
#
# end of fujitsu SoC drivers

#
# i.MX SoC drivers
#
CONFIG_SOC_IMX8M=y
CONFIG_SOC_IMX9=m
# end of i.MX SoC drivers

#
# IXP4xx SoC drivers
#
CONFIG_IXP4XX_QMGR=m
CONFIG_IXP4XX_NPE=m
# end of IXP4xx SoC drivers

#
# Enable LiteX SoC Builder specific drivers
#
CONFIG_LITEX=y
CONFIG_LITEX_SOC_CONTROLLER=m
# end of Enable LiteX SoC Builder specific drivers

#
# MediaTek SoC drivers
#
CONFIG_MTK_CMDQ=m
CONFIG_MTK_DEVAPC=m
CONFIG_MTK_INFRACFG=y
CONFIG_MTK_PMIC_WRAP=m
CONFIG_MTK_SCPSYS=y
CONFIG_MTK_MMSYS=y
CONFIG_MTK_SVS=m
# end of MediaTek SoC drivers

CONFIG_POLARFIRE_SOC_SYS_CTRL=m

#
# Qualcomm SoC drivers
#
CONFIG_QCOM_COMMAND_DB=m
CONFIG_QCOM_GENI_SE=m
CONFIG_QCOM_GSBI=m
CONFIG_QCOM_LLCC=m
CONFIG_QCOM_PDR_HELPERS=m
CONFIG_QCOM_QMI_HELPERS=m
CONFIG_QCOM_RPMH=m
CONFIG_QCOM_RPMHPD=m
CONFIG_QCOM_SMEM=m
CONFIG_QCOM_SMD_RPM=m
CONFIG_QCOM_SMEM_STATE=y
CONFIG_QCOM_SMP2P=m
CONFIG_QCOM_SMSM=m
CONFIG_QCOM_SOCINFO=m
CONFIG_QCOM_SPM=m
CONFIG_QCOM_STATS=m
CONFIG_QCOM_WCNSS_CTRL=m
CONFIG_QCOM_APR=m
CONFIG_QCOM_ICC_BWMON=m
# end of Qualcomm SoC drivers

CONFIG_SOC_RENESAS=y
CONFIG_RST_RCAR=y
CONFIG_SYSC_RCAR=y
CONFIG_SYSC_RCAR_GEN4=y
CONFIG_SYSC_R8A77995=y
CONFIG_SYSC_R8A7794=y
CONFIG_SYSC_R8A77990=y
CONFIG_SYSC_R8A7779=y
CONFIG_SYSC_R8A7790=y
CONFIG_SYSC_R8A7795=y
CONFIG_SYSC_R8A7791=y
CONFIG_SYSC_R8A77965=y
CONFIG_SYSC_R8A77960=y
CONFIG_SYSC_R8A77961=y
CONFIG_SYSC_R8A779F0=y
CONFIG_SYSC_R8A7792=y
CONFIG_SYSC_R8A77980=y
CONFIG_SYSC_R8A77970=y
CONFIG_SYSC_R8A779A0=y
CONFIG_SYSC_R8A779G0=y
CONFIG_SYSC_RMOBILE=y
CONFIG_SYSC_R8A77470=y
CONFIG_SYSC_R8A7745=y
CONFIG_SYSC_R8A7742=y
CONFIG_SYSC_R8A7743=y
CONFIG_SYSC_R8A774C0=y
CONFIG_SYSC_R8A774E1=y
CONFIG_SYSC_R8A774A1=y
CONFIG_SYSC_R8A774B1=y
CONFIG_ROCKCHIP_GRF=y
CONFIG_ROCKCHIP_IODOMAIN=m
CONFIG_ROCKCHIP_DTPM=m
CONFIG_SOC_SAMSUNG=y
CONFIG_EXYNOS_ASV_ARM=y
CONFIG_EXYNOS_CHIPID=m
CONFIG_EXYNOS_USI=m
CONFIG_EXYNOS_PM_DOMAINS=y
CONFIG_EXYNOS_REGULATOR_COUPLER=y
CONFIG_SUNXI_SRAM=y
CONFIG_SOC_TEGRA20_VOLTAGE_COUPLER=y
CONFIG_SOC_TEGRA30_VOLTAGE_COUPLER=y
CONFIG_SOC_TI=y
CONFIG_UX500_SOC_ID=y

#
# Xilinx SoC drivers
#
# end of Xilinx SoC drivers
# end of SOC (System On Chip) specific Drivers

CONFIG_PM_DEVFREQ=y

#
# DEVFREQ Governors
#
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m
CONFIG_DEVFREQ_GOV_PERFORMANCE=m
CONFIG_DEVFREQ_GOV_POWERSAVE=m
CONFIG_DEVFREQ_GOV_USERSPACE=m
CONFIG_DEVFREQ_GOV_PASSIVE=m

#
# DEVFREQ Drivers
#
CONFIG_ARM_EXYNOS_BUS_DEVFREQ=m
CONFIG_ARM_IMX_BUS_DEVFREQ=m
CONFIG_ARM_TEGRA_DEVFREQ=m
CONFIG_ARM_MEDIATEK_CCI_DEVFREQ=m
CONFIG_ARM_SUN8I_A33_MBUS_DEVFREQ=m
CONFIG_PM_DEVFREQ_EVENT=y
CONFIG_DEVFREQ_EVENT_EXYNOS_NOCP=m
CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU=m
CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI=m
CONFIG_EXTCON=y

#
# Extcon Device Drivers
#
CONFIG_EXTCON_ADC_JACK=m
CONFIG_EXTCON_FSA9480=m
CONFIG_EXTCON_GPIO=m
CONFIG_EXTCON_MAX14577=m
CONFIG_EXTCON_MAX3355=m
CONFIG_EXTCON_MAX77693=m
CONFIG_EXTCON_PTN5150=m
CONFIG_EXTCON_QCOM_SPMI_MISC=m
CONFIG_EXTCON_RT8973A=m
CONFIG_EXTCON_SM5502=m
CONFIG_EXTCON_USB_GPIO=m
CONFIG_EXTCON_USBC_CROS_EC=m
CONFIG_EXTCON_USBC_TUSB320=m
CONFIG_MEMORY=y
CONFIG_DDR=y
CONFIG_ATMEL_SDRAMC=y
CONFIG_ATMEL_EBI=y
CONFIG_BRCMSTB_DPFE=m
CONFIG_BRCMSTB_MEMC=m
CONFIG_BT1_L2_CTL=y
CONFIG_TI_AEMIF=m
CONFIG_TI_EMIF=m
CONFIG_OMAP_GPMC=m
CONFIG_OMAP_GPMC_DEBUG=y
CONFIG_FPGA_DFL_EMIF=m
CONFIG_MVEBU_DEVBUS=y
CONFIG_FSL_CORENET_CF=m
CONFIG_FSL_IFC=y
CONFIG_JZ4780_NEMC=y
CONFIG_MTK_SMI=m
CONFIG_DA8XX_DDRCTL=y
CONFIG_RENESAS_RPCIF=m
CONFIG_STM32_FMC2_EBI=m
CONFIG_SAMSUNG_MC=y
CONFIG_EXYNOS5422_DMC=m
CONFIG_EXYNOS_SROM=y
CONFIG_TEGRA_MC=y
CONFIG_TEGRA20_EMC=m
CONFIG_TEGRA30_EMC=m
CONFIG_TEGRA124_EMC=m
CONFIG_TEGRA210_EMC_TABLE=y
CONFIG_TEGRA210_EMC=m
CONFIG_IIO=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER_DMA=m
CONFIG_IIO_BUFFER_DMAENGINE=m
CONFIG_IIO_BUFFER_HW_CONSUMER=m
CONFIG_IIO_KFIFO_BUF=m
CONFIG_IIO_TRIGGERED_BUFFER=m
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_TRIGGER=y
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
CONFIG_IIO_SW_DEVICE=m
CONFIG_IIO_SW_TRIGGER=m
CONFIG_IIO_TRIGGERED_EVENT=m

#
# Accelerometers
#
CONFIG_ADIS16201=m
CONFIG_ADIS16209=m
CONFIG_ADXL313=m
CONFIG_ADXL313_I2C=m
CONFIG_ADXL313_SPI=m
CONFIG_ADXL355=m
CONFIG_ADXL355_I2C=m
CONFIG_ADXL355_SPI=m
CONFIG_ADXL367=m
CONFIG_ADXL367_SPI=m
CONFIG_ADXL367_I2C=m
CONFIG_ADXL372=m
CONFIG_ADXL372_SPI=m
CONFIG_ADXL372_I2C=m
CONFIG_BMA220=m
CONFIG_BMA400=m
CONFIG_BMA400_I2C=m
CONFIG_BMA400_SPI=m
CONFIG_BMC150_ACCEL=m
CONFIG_BMC150_ACCEL_I2C=m
CONFIG_BMC150_ACCEL_SPI=m
CONFIG_BMI088_ACCEL=m
CONFIG_BMI088_ACCEL_SPI=m
CONFIG_DA280=m
CONFIG_DA311=m
CONFIG_DMARD06=m
CONFIG_DMARD09=m
CONFIG_DMARD10=m
CONFIG_FXLS8962AF=m
CONFIG_FXLS8962AF_I2C=m
CONFIG_FXLS8962AF_SPI=m
CONFIG_HID_SENSOR_ACCEL_3D=m
CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
CONFIG_IIO_ST_ACCEL_3AXIS=m
CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m
CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
CONFIG_KXSD9=m
CONFIG_KXSD9_SPI=m
CONFIG_KXSD9_I2C=m
CONFIG_KXCJK1013=m
CONFIG_MC3230=m
CONFIG_MMA7455=m
CONFIG_MMA7455_I2C=m
CONFIG_MMA7455_SPI=m
CONFIG_MMA7660=m
CONFIG_MMA8452=m
CONFIG_MMA9551_CORE=m
CONFIG_MMA9551=m
CONFIG_MMA9553=m
CONFIG_MSA311=m
CONFIG_MXC4005=m
CONFIG_MXC6255=m
CONFIG_SCA3000=m
CONFIG_SCA3300=m
CONFIG_STK8312=m
CONFIG_STK8BA50=m
# end of Accelerometers

#
# Analog to digital converters
#
CONFIG_AD_SIGMA_DELTA=m
CONFIG_AD7091R5=m
CONFIG_AD7124=m
CONFIG_AD7192=m
CONFIG_AD7266=m
CONFIG_AD7280=m
CONFIG_AD7291=m
CONFIG_AD7292=m
CONFIG_AD7298=m
CONFIG_AD7476=m
CONFIG_AD7606=m
CONFIG_AD7606_IFACE_PARALLEL=m
CONFIG_AD7606_IFACE_SPI=m
CONFIG_AD7766=m
CONFIG_AD7768_1=m
CONFIG_AD7780=m
CONFIG_AD7791=m
CONFIG_AD7793=m
CONFIG_AD7887=m
CONFIG_AD7923=m
CONFIG_AD7949=m
CONFIG_AD799X=m
CONFIG_AD9467=m
CONFIG_ADI_AXI_ADC=m
CONFIG_ASPEED_ADC=m
CONFIG_AT91_ADC=m
CONFIG_AT91_SAMA5D2_ADC=m
CONFIG_AXP20X_ADC=m
CONFIG_AXP288_ADC=m
CONFIG_BCM_IPROC_ADC=m
CONFIG_BERLIN2_ADC=m
CONFIG_CC10001_ADC=m
CONFIG_CPCAP_ADC=m
CONFIG_DA9150_GPADC=m
CONFIG_DLN2_ADC=m
CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EXYNOS_ADC=m
CONFIG_MXS_LRADC_ADC=m
CONFIG_FSL_MX25_ADC=m
CONFIG_HI8435=m
CONFIG_HX711=m
CONFIG_INA2XX_ADC=m
CONFIG_INGENIC_ADC=m
CONFIG_IMX7D_ADC=m
CONFIG_IMX8QXP_ADC=m
CONFIG_LPC18XX_ADC=m
CONFIG_LPC32XX_ADC=m
CONFIG_LTC2471=m
CONFIG_LTC2485=m
CONFIG_LTC2496=m
CONFIG_LTC2497=m
CONFIG_MAX1027=m
CONFIG_MAX11100=m
CONFIG_MAX1118=m
CONFIG_MAX11205=m
CONFIG_MAX1241=m
CONFIG_MAX1363=m
CONFIG_MAX9611=m
CONFIG_MCP320X=m
CONFIG_MCP3422=m
CONFIG_MCP3911=m
CONFIG_MEDIATEK_MT6360_ADC=m
CONFIG_MEDIATEK_MT6577_AUXADC=m
CONFIG_MEN_Z188_ADC=m
CONFIG_MESON_SARADC=m
CONFIG_MP2629_ADC=m
CONFIG_NAU7802=m
CONFIG_NPCM_ADC=m
CONFIG_QCOM_VADC_COMMON=m
CONFIG_QCOM_PM8XXX_XOADC=m
CONFIG_QCOM_SPMI_RRADC=m
CONFIG_QCOM_SPMI_IADC=m
CONFIG_QCOM_SPMI_VADC=m
CONFIG_QCOM_SPMI_ADC5=m
CONFIG_RCAR_GYRO_ADC=m
CONFIG_RN5T618_ADC=m
CONFIG_ROCKCHIP_SARADC=m
CONFIG_RICHTEK_RTQ6056=m
CONFIG_RZG2L_ADC=m
CONFIG_SC27XX_ADC=m
CONFIG_SPEAR_ADC=m
CONFIG_SD_ADC_MODULATOR=m
CONFIG_STM32_ADC_CORE=m
CONFIG_STM32_ADC=m
CONFIG_STM32_DFSDM_CORE=m
CONFIG_STM32_DFSDM_ADC=m
CONFIG_STMPE_ADC=m
CONFIG_SUN4I_GPADC=m
CONFIG_TI_ADC081C=m
CONFIG_TI_ADC0832=m
CONFIG_TI_ADC084S021=m
CONFIG_TI_ADC12138=m
CONFIG_TI_ADC108S102=m
CONFIG_TI_ADC128S052=m
CONFIG_TI_ADC161S626=m
CONFIG_TI_ADS1015=m
CONFIG_TI_ADS7950=m
CONFIG_TI_ADS8344=m
CONFIG_TI_ADS8688=m
CONFIG_TI_ADS124S08=m
CONFIG_TI_ADS131E08=m
CONFIG_TI_AM335X_ADC=m
CONFIG_TI_TLC4541=m
CONFIG_TI_TSC2046=m
CONFIG_VF610_ADC=m
CONFIG_VIPERBOARD_ADC=m
CONFIG_XILINX_XADC=m
CONFIG_XILINX_AMS=m
# end of Analog to digital converters

#
# Analog to digital and digital to analog converters
#
CONFIG_AD74413R=m
# end of Analog to digital and digital to analog converters

#
# Analog Front Ends
#
CONFIG_IIO_RESCALE=m
# end of Analog Front Ends

#
# Amplifiers
#
CONFIG_AD8366=m
CONFIG_ADA4250=m
CONFIG_HMC425=m
# end of Amplifiers

#
# Capacitance to digital converters
#
CONFIG_AD7150=m
CONFIG_AD7746=m
# end of Capacitance to digital converters

#
# Chemical Sensors
#
CONFIG_ATLAS_PH_SENSOR=m
CONFIG_ATLAS_EZO_SENSOR=m
CONFIG_BME680=m
CONFIG_BME680_I2C=m
CONFIG_BME680_SPI=m
CONFIG_CCS811=m
CONFIG_IAQCORE=m
CONFIG_PMS7003=m
CONFIG_SCD30_CORE=m
CONFIG_SCD30_I2C=m
CONFIG_SCD30_SERIAL=m
CONFIG_SCD4X=m
CONFIG_SENSIRION_SGP30=m
CONFIG_SENSIRION_SGP40=m
CONFIG_SPS30=m
CONFIG_SPS30_I2C=m
CONFIG_SPS30_SERIAL=m
CONFIG_SENSEAIR_SUNRISE_CO2=m
CONFIG_VZ89X=m
# end of Chemical Sensors

CONFIG_IIO_CROS_EC_SENSORS_CORE=m
CONFIG_IIO_CROS_EC_SENSORS=m
CONFIG_IIO_CROS_EC_SENSORS_LID_ANGLE=m

#
# Hid Sensor IIO Common
#
CONFIG_HID_SENSOR_IIO_COMMON=m
CONFIG_HID_SENSOR_IIO_TRIGGER=m
# end of Hid Sensor IIO Common

CONFIG_IIO_MS_SENSORS_I2C=m

#
# IIO SCMI Sensors
#
CONFIG_IIO_SCMI=m
# end of IIO SCMI Sensors

#
# SSP Sensor Common
#
CONFIG_IIO_SSP_SENSORS_COMMONS=m
CONFIG_IIO_SSP_SENSORHUB=m
# end of SSP Sensor Common

CONFIG_IIO_ST_SENSORS_I2C=m
CONFIG_IIO_ST_SENSORS_SPI=m
CONFIG_IIO_ST_SENSORS_CORE=m

#
# Digital to analog converters
#
CONFIG_AD3552R=m
CONFIG_AD5064=m
CONFIG_AD5360=m
CONFIG_AD5380=m
CONFIG_AD5421=m
CONFIG_AD5446=m
CONFIG_AD5449=m
CONFIG_AD5592R_BASE=m
CONFIG_AD5592R=m
CONFIG_AD5593R=m
CONFIG_AD5504=m
CONFIG_AD5624R_SPI=m
CONFIG_LTC2688=m
CONFIG_AD5686=m
CONFIG_AD5686_SPI=m
CONFIG_AD5696_I2C=m
CONFIG_AD5755=m
CONFIG_AD5758=m
CONFIG_AD5761=m
CONFIG_AD5764=m
CONFIG_AD5766=m
CONFIG_AD5770R=m
CONFIG_AD5791=m
CONFIG_AD7293=m
CONFIG_AD7303=m
CONFIG_AD8801=m
CONFIG_DPOT_DAC=m
CONFIG_DS4424=m
CONFIG_LPC18XX_DAC=m
CONFIG_LTC1660=m
CONFIG_LTC2632=m
CONFIG_M62332=m
CONFIG_MAX517=m
CONFIG_MAX5821=m
CONFIG_MCP4725=m
CONFIG_MCP4922=m
CONFIG_STM32_DAC=m
CONFIG_STM32_DAC_CORE=m
CONFIG_TI_DAC082S085=m
CONFIG_TI_DAC5571=m
CONFIG_TI_DAC7311=m
CONFIG_TI_DAC7612=m
CONFIG_VF610_DAC=m
# end of Digital to analog converters

#
# IIO dummy driver
#
CONFIG_IIO_DUMMY_EVGEN=m
CONFIG_IIO_SIMPLE_DUMMY=m
CONFIG_IIO_SIMPLE_DUMMY_EVENTS=y
CONFIG_IIO_SIMPLE_DUMMY_BUFFER=y
# end of IIO dummy driver

#
# Filters
#
# end of Filters

#
# Frequency Synthesizers DDS/PLL
#

#
# Clock Generator/Distribution
#
CONFIG_AD9523=m
# end of Clock Generator/Distribution

#
# Phase-Locked Loop (PLL) frequency synthesizers
#
CONFIG_ADF4350=m
CONFIG_ADF4371=m
CONFIG_ADMV1013=m
CONFIG_ADMV4420=m
CONFIG_ADRF6780=m
# end of Phase-Locked Loop (PLL) frequency synthesizers
# end of Frequency Synthesizers DDS/PLL

#
# Digital gyroscope sensors
#
CONFIG_ADIS16080=m
CONFIG_ADIS16130=m
CONFIG_ADIS16136=m
CONFIG_ADIS16260=m
CONFIG_ADXRS290=m
CONFIG_ADXRS450=m
CONFIG_BMG160=m
CONFIG_BMG160_I2C=m
CONFIG_BMG160_SPI=m
CONFIG_FXAS21002C=m
CONFIG_FXAS21002C_I2C=m
CONFIG_FXAS21002C_SPI=m
CONFIG_HID_SENSOR_GYRO_3D=m
CONFIG_MPU3050=m
CONFIG_MPU3050_I2C=m
CONFIG_IIO_ST_GYRO_3AXIS=m
CONFIG_IIO_ST_GYRO_I2C_3AXIS=m
CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
CONFIG_ITG3200=m
# end of Digital gyroscope sensors

#
# Health Sensors
#

#
# Heart Rate Monitors
#
CONFIG_AFE4403=m
CONFIG_AFE4404=m
CONFIG_MAX30100=m
CONFIG_MAX30102=m
# end of Heart Rate Monitors
# end of Health Sensors

#
# Humidity sensors
#
CONFIG_AM2315=m
CONFIG_DHT11=m
CONFIG_HDC100X=m
CONFIG_HDC2010=m
CONFIG_HID_SENSOR_HUMIDITY=m
CONFIG_HTS221=m
CONFIG_HTS221_I2C=m
CONFIG_HTS221_SPI=m
CONFIG_HTU21=m
CONFIG_SI7005=m
CONFIG_SI7020=m
# end of Humidity sensors

#
# Inertial measurement units
#
CONFIG_ADIS16400=m
CONFIG_ADIS16460=m
CONFIG_ADIS16475=m
CONFIG_ADIS16480=m
CONFIG_BMI160=m
CONFIG_BMI160_I2C=m
CONFIG_BMI160_SPI=m
CONFIG_BOSCH_BNO055=m
CONFIG_BOSCH_BNO055_SERIAL=m
CONFIG_BOSCH_BNO055_I2C=m
CONFIG_FXOS8700=m
CONFIG_FXOS8700_I2C=m
CONFIG_FXOS8700_SPI=m
CONFIG_KMX61=m
CONFIG_INV_ICM42600=m
CONFIG_INV_ICM42600_I2C=m
CONFIG_INV_ICM42600_SPI=m
CONFIG_INV_MPU6050_IIO=m
CONFIG_INV_MPU6050_I2C=m
CONFIG_INV_MPU6050_SPI=m
CONFIG_IIO_ST_LSM6DSX=m
CONFIG_IIO_ST_LSM6DSX_I2C=m
CONFIG_IIO_ST_LSM6DSX_SPI=m
CONFIG_IIO_ST_LSM6DSX_I3C=m
CONFIG_IIO_ST_LSM9DS0=m
CONFIG_IIO_ST_LSM9DS0_I2C=m
CONFIG_IIO_ST_LSM9DS0_SPI=m
# end of Inertial measurement units

CONFIG_IIO_ADIS_LIB=m
CONFIG_IIO_ADIS_LIB_BUFFER=y

#
# Light sensors
#
CONFIG_ADJD_S311=m
CONFIG_ADUX1020=m
CONFIG_AL3010=m
CONFIG_AL3320A=m
CONFIG_APDS9300=m
CONFIG_APDS9960=m
CONFIG_AS73211=m
CONFIG_BH1750=m
CONFIG_BH1780=m
CONFIG_CM32181=m
CONFIG_CM3232=m
CONFIG_CM3323=m
CONFIG_CM3605=m
CONFIG_CM36651=m
CONFIG_IIO_CROS_EC_LIGHT_PROX=m
CONFIG_GP2AP002=m
CONFIG_GP2AP020A00F=m
CONFIG_IQS621_ALS=m
CONFIG_SENSORS_ISL29018=m
CONFIG_SENSORS_ISL29028=m
CONFIG_ISL29125=m
CONFIG_HID_SENSOR_ALS=m
CONFIG_HID_SENSOR_PROX=m
CONFIG_JSA1212=m
CONFIG_RPR0521=m
CONFIG_SENSORS_LM3533=m
CONFIG_LTR501=m
CONFIG_LTRF216A=m
CONFIG_LV0104CS=m
CONFIG_MAX44000=m
CONFIG_MAX44009=m
CONFIG_NOA1305=m
CONFIG_OPT3001=m
CONFIG_PA12203001=m
CONFIG_SI1133=m
CONFIG_SI1145=m
CONFIG_STK3310=m
CONFIG_ST_UVIS25=m
CONFIG_ST_UVIS25_I2C=m
CONFIG_ST_UVIS25_SPI=m
CONFIG_TCS3414=m
CONFIG_TCS3472=m
CONFIG_SENSORS_TSL2563=m
CONFIG_TSL2583=m
CONFIG_TSL2591=m
CONFIG_TSL2772=m
CONFIG_TSL4531=m
CONFIG_US5182D=m
CONFIG_VCNL4000=m
CONFIG_VCNL4035=m
CONFIG_VEML6030=m
CONFIG_VEML6070=m
CONFIG_VL6180=m
CONFIG_ZOPT2201=m
# end of Light sensors

#
# Magnetometer sensors
#
CONFIG_AK8974=m
CONFIG_AK8975=m
CONFIG_AK09911=m
CONFIG_BMC150_MAGN=m
CONFIG_BMC150_MAGN_I2C=m
CONFIG_BMC150_MAGN_SPI=m
CONFIG_MAG3110=m
CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
CONFIG_MMC35240=m
CONFIG_IIO_ST_MAGN_3AXIS=m
CONFIG_IIO_ST_MAGN_I2C_3AXIS=m
CONFIG_IIO_ST_MAGN_SPI_3AXIS=m
CONFIG_SENSORS_HMC5843=m
CONFIG_SENSORS_HMC5843_I2C=m
CONFIG_SENSORS_HMC5843_SPI=m
CONFIG_SENSORS_RM3100=m
CONFIG_SENSORS_RM3100_I2C=m
CONFIG_SENSORS_RM3100_SPI=m
CONFIG_YAMAHA_YAS530=m
# end of Magnetometer sensors

#
# Multiplexers
#
CONFIG_IIO_MUX=m
# end of Multiplexers

#
# Inclinometer sensors
#
CONFIG_HID_SENSOR_INCLINOMETER_3D=m
CONFIG_HID_SENSOR_DEVICE_ROTATION=m
# end of Inclinometer sensors

CONFIG_IIO_RESCALE_KUNIT_TEST=m
CONFIG_IIO_FORMAT_KUNIT_TEST=m

#
# Triggers - standalone
#
CONFIG_IIO_HRTIMER_TRIGGER=m
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_STM32_LPTIMER_TRIGGER=m
CONFIG_IIO_STM32_TIMER_TRIGGER=m
CONFIG_IIO_TIGHTLOOP_TRIGGER=m
CONFIG_IIO_SYSFS_TRIGGER=m
# end of Triggers - standalone

#
# Linear and angular position sensors
#
CONFIG_IQS624_POS=m
CONFIG_HID_SENSOR_CUSTOM_INTEL_HINGE=m
# end of Linear and angular position sensors

#
# Digital potentiometers
#
CONFIG_AD5110=m
CONFIG_AD5272=m
CONFIG_DS1803=m
CONFIG_MAX5432=m
CONFIG_MAX5481=m
CONFIG_MAX5487=m
CONFIG_MCP4018=m
CONFIG_MCP4131=m
CONFIG_MCP4531=m
CONFIG_MCP41010=m
CONFIG_TPL0102=m
# end of Digital potentiometers

#
# Digital potentiostats
#
CONFIG_LMP91000=m
# end of Digital potentiostats

#
# Pressure sensors
#
CONFIG_ABP060MG=m
CONFIG_BMP280=m
CONFIG_BMP280_I2C=m
CONFIG_BMP280_SPI=m
CONFIG_IIO_CROS_EC_BARO=m
CONFIG_DLHL60D=m
CONFIG_DPS310=m
CONFIG_HID_SENSOR_PRESS=m
CONFIG_HP03=m
CONFIG_ICP10100=m
CONFIG_MPL115=m
CONFIG_MPL115_I2C=m
CONFIG_MPL115_SPI=m
CONFIG_MPL3115=m
CONFIG_MS5611=m
CONFIG_MS5611_I2C=m
CONFIG_MS5611_SPI=m
CONFIG_MS5637=m
CONFIG_IIO_ST_PRESS=m
CONFIG_IIO_ST_PRESS_I2C=m
CONFIG_IIO_ST_PRESS_SPI=m
CONFIG_T5403=m
CONFIG_HP206C=m
CONFIG_ZPA2326=m
CONFIG_ZPA2326_I2C=m
CONFIG_ZPA2326_SPI=m
# end of Pressure sensors

#
# Lightning sensors
#
CONFIG_AS3935=m
# end of Lightning sensors

#
# Proximity and distance sensors
#
CONFIG_CROS_EC_MKBP_PROXIMITY=m
CONFIG_ISL29501=m
CONFIG_LIDAR_LITE_V2=m
CONFIG_MB1232=m
CONFIG_PING=m
CONFIG_RFD77402=m
CONFIG_SRF04=m
CONFIG_SX_COMMON=m
CONFIG_SX9310=m
CONFIG_SX9324=m
CONFIG_SX9360=m
CONFIG_SX9500=m
CONFIG_SRF08=m
CONFIG_VCNL3020=m
CONFIG_VL53L0X_I2C=m
# end of Proximity and distance sensors

#
# Resolver to digital converters
#
CONFIG_AD2S90=m
CONFIG_AD2S1200=m
# end of Resolver to digital converters

#
# Temperature sensors
#
CONFIG_IQS620AT_TEMP=m
CONFIG_LTC2983=m
CONFIG_MAXIM_THERMOCOUPLE=m
CONFIG_HID_SENSOR_TEMP=m
CONFIG_MLX90614=m
CONFIG_MLX90632=m
CONFIG_TMP006=m
CONFIG_TMP007=m
CONFIG_TMP117=m
CONFIG_TSYS01=m
CONFIG_TSYS02D=m
CONFIG_MAX31856=m
CONFIG_MAX31865=m
# end of Temperature sensors

CONFIG_PWM=y
CONFIG_PWM_SYSFS=y
CONFIG_PWM_DEBUG=y
CONFIG_PWM_ATMEL=m
CONFIG_PWM_ATMEL_HLCDC_PWM=m
CONFIG_PWM_ATMEL_TCB=m
CONFIG_PWM_BCM_IPROC=m
CONFIG_PWM_BCM_KONA=m
CONFIG_PWM_BCM2835=m
CONFIG_PWM_BERLIN=m
CONFIG_PWM_BRCMSTB=m
CONFIG_PWM_CLK=m
CONFIG_PWM_CLPS711X=m
CONFIG_PWM_CROS_EC=m
CONFIG_PWM_EP93XX=m
CONFIG_PWM_FSL_FTM=m
CONFIG_PWM_HIBVT=m
CONFIG_PWM_IMG=m
CONFIG_PWM_IMX1=m
CONFIG_PWM_IMX27=m
CONFIG_PWM_IMX_TPM=m
CONFIG_PWM_INTEL_LGM=m
CONFIG_PWM_IQS620A=m
CONFIG_PWM_JZ4740=m
CONFIG_PWM_KEEMBAY=m
CONFIG_PWM_LP3943=m
CONFIG_PWM_LPC18XX_SCT=m
CONFIG_PWM_LPC32XX=m
CONFIG_PWM_LPSS=m
CONFIG_PWM_LPSS_PLATFORM=m
CONFIG_PWM_MESON=m
CONFIG_PWM_MTK_DISP=m
CONFIG_PWM_MEDIATEK=m
CONFIG_PWM_MXS=m
CONFIG_PWM_NTXEC=m
CONFIG_PWM_OMAP_DMTIMER=m
CONFIG_PWM_PCA9685=m
CONFIG_PWM_PXA=m
CONFIG_PWM_RASPBERRYPI_POE=m
CONFIG_PWM_RCAR=m
CONFIG_PWM_RENESAS_TPU=m
CONFIG_PWM_ROCKCHIP=m
CONFIG_PWM_SAMSUNG=m
CONFIG_PWM_SIFIVE=m
CONFIG_PWM_SL28CPLD=m
CONFIG_PWM_SPEAR=m
CONFIG_PWM_SPRD=m
CONFIG_PWM_STI=m
CONFIG_PWM_STM32=m
CONFIG_PWM_STM32_LP=m
CONFIG_PWM_STMPE=y
CONFIG_PWM_SUN4I=m
CONFIG_PWM_SUNPLUS=m
CONFIG_PWM_TEGRA=m
CONFIG_PWM_TIECAP=m
CONFIG_PWM_TIEHRPWM=m
CONFIG_PWM_VISCONTI=m
CONFIG_PWM_VT8500=m
CONFIG_PWM_XILINX=m

#
# IRQ chip support
#
CONFIG_IRQCHIP=y
CONFIG_AL_FIC=y
CONFIG_MADERA_IRQ=m
CONFIG_JCORE_AIC=y
CONFIG_RENESAS_INTC_IRQPIN=y
CONFIG_RENESAS_IRQC=y
CONFIG_RENESAS_RZA1_IRQC=y
CONFIG_RENESAS_RZG2L_IRQC=y
CONFIG_SL28CPLD_INTC=y
CONFIG_TS4800_IRQ=m
CONFIG_XILINX_INTC=y
CONFIG_INGENIC_TCU_IRQ=y
CONFIG_IRQ_UNIPHIER_AIDET=y
CONFIG_MESON_IRQ_GPIO=m
CONFIG_IMX_IRQSTEER=y
CONFIG_IMX_INTMUX=y
CONFIG_IMX_MU_MSI=m
CONFIG_EXYNOS_IRQ_COMBINER=y
CONFIG_MST_IRQ=y
CONFIG_MCHP_EIC=y
CONFIG_SUNPLUS_SP7021_INTC=y
# end of IRQ chip support

CONFIG_IPACK_BUS=m
CONFIG_SERIAL_IPOCTAL=m
CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_A10SR=m
CONFIG_RESET_ATH79=y
CONFIG_RESET_AXS10X=y
CONFIG_RESET_BCM6345=y
CONFIG_RESET_BERLIN=m
CONFIG_RESET_BRCMSTB=m
CONFIG_RESET_BRCMSTB_RESCAL=m
CONFIG_RESET_HSDK=y
CONFIG_RESET_IMX7=m
CONFIG_RESET_INTEL_GW=y
CONFIG_RESET_K210=y
CONFIG_RESET_LANTIQ=y
CONFIG_RESET_LPC18XX=y
CONFIG_RESET_MCHP_SPARX5=y
CONFIG_RESET_MESON=m
CONFIG_RESET_MESON_AUDIO_ARB=m
CONFIG_RESET_NPCM=y
CONFIG_RESET_PISTACHIO=y
CONFIG_RESET_POLARFIRE_SOC=y
CONFIG_RESET_QCOM_AOSS=m
CONFIG_RESET_QCOM_PDC=m
CONFIG_RESET_RASPBERRYPI=m
CONFIG_RESET_RZG2L_USBPHY_CTRL=m
CONFIG_RESET_SCMI=m
CONFIG_RESET_SIMPLE=y
CONFIG_RESET_SOCFPGA=y
CONFIG_RESET_STARFIVE_JH7100=y
CONFIG_RESET_SUNPLUS=y
CONFIG_RESET_SUNXI=y
CONFIG_RESET_TI_SCI=m
CONFIG_RESET_TI_SYSCON=m
CONFIG_RESET_TI_TPS380X=m
CONFIG_RESET_TN48M_CPLD=m
CONFIG_RESET_UNIPHIER=m
CONFIG_RESET_UNIPHIER_GLUE=m
CONFIG_RESET_ZYNQ=y
CONFIG_COMMON_RESET_HI3660=m
CONFIG_COMMON_RESET_HI6220=m

#
# PHY Subsystem
#
CONFIG_GENERIC_PHY=y
CONFIG_GENERIC_PHY_MIPI_DPHY=y
CONFIG_PHY_LPC18XX_USB_OTG=m
CONFIG_PHY_PISTACHIO_USB=m
CONFIG_PHY_XGENE=m
CONFIG_USB_LGM_PHY=m
CONFIG_PHY_CAN_TRANSCEIVER=m
CONFIG_PHY_SUN4I_USB=m
CONFIG_PHY_SUN6I_MIPI_DPHY=m
CONFIG_PHY_SUN9I_USB=m
CONFIG_PHY_SUN50I_USB3=m
CONFIG_PHY_MESON8_HDMI_TX=m
CONFIG_PHY_MESON8B_USB2=m
CONFIG_PHY_MESON_GXL_USB2=m
CONFIG_PHY_MESON_G12A_MIPI_DPHY_ANALOG=m
CONFIG_PHY_MESON_G12A_USB2=m
CONFIG_PHY_MESON_G12A_USB3_PCIE=m
CONFIG_PHY_MESON_AXG_PCIE=m
CONFIG_PHY_MESON_AXG_MIPI_PCIE_ANALOG=m
CONFIG_PHY_MESON_AXG_MIPI_DPHY=m

#
# PHY drivers for Broadcom platforms
#
CONFIG_PHY_BCM63XX_USBH=m
CONFIG_PHY_CYGNUS_PCIE=m
CONFIG_PHY_BCM_SR_USB=m
CONFIG_BCM_KONA_USB2_PHY=m
CONFIG_PHY_BCM_NS_USB2=m
CONFIG_PHY_BCM_NS_USB3=m
CONFIG_PHY_NS2_PCIE=m
CONFIG_PHY_NS2_USB_DRD=m
CONFIG_PHY_BRCM_SATA=m
CONFIG_PHY_BRCM_USB=m
CONFIG_PHY_BCM_SR_PCIE=m
# end of PHY drivers for Broadcom platforms

CONFIG_PHY_CADENCE_TORRENT=m
CONFIG_PHY_CADENCE_DPHY=m
CONFIG_PHY_CADENCE_DPHY_RX=m
CONFIG_PHY_CADENCE_SIERRA=m
CONFIG_PHY_CADENCE_SALVO=m
CONFIG_PHY_FSL_IMX8MQ_USB=m
CONFIG_PHY_MIXEL_LVDS_PHY=m
CONFIG_PHY_MIXEL_MIPI_DPHY=m
CONFIG_PHY_FSL_IMX8M_PCIE=m
CONFIG_PHY_FSL_LYNX_28G=m
CONFIG_PHY_HI6220_USB=m
CONFIG_PHY_HI3660_USB=m
CONFIG_PHY_HI3670_USB=m
CONFIG_PHY_HI3670_PCIE=m
CONFIG_PHY_HISTB_COMBPHY=m
CONFIG_PHY_HISI_INNO_USB2=m
CONFIG_PHY_INGENIC_USB=m
CONFIG_PHY_LANTIQ_VRX200_PCIE=m
CONFIG_PHY_LANTIQ_RCU_USB2=m
CONFIG_ARMADA375_USBCLUSTER_PHY=y
CONFIG_PHY_BERLIN_SATA=m
CONFIG_PHY_BERLIN_USB=m
CONFIG_PHY_MVEBU_A3700_UTMI=m
CONFIG_PHY_MVEBU_A38X_COMPHY=m
CONFIG_PHY_MVEBU_CP110_UTMI=m
CONFIG_PHY_PXA_28NM_HSIC=m
CONFIG_PHY_PXA_28NM_USB2=m
CONFIG_PHY_PXA_USB=m
CONFIG_PHY_MMP3_USB=m
CONFIG_PHY_MMP3_HSIC=m
CONFIG_PHY_MTK_PCIE=m
CONFIG_PHY_MTK_TPHY=m
CONFIG_PHY_MTK_UFS=m
CONFIG_PHY_MTK_XSPHY=m
CONFIG_PHY_MTK_HDMI=m
CONFIG_PHY_MTK_MIPI_DSI=m
CONFIG_PHY_MTK_DP=m
CONFIG_PHY_SPARX5_SERDES=m
CONFIG_PHY_LAN966X_SERDES=m
CONFIG_PHY_CPCAP_USB=m
CONFIG_PHY_MAPPHONE_MDM6600=m
CONFIG_PHY_OCELOT_SERDES=m
CONFIG_PHY_ATH79_USB=m
CONFIG_PHY_QCOM_EDP=m
CONFIG_PHY_QCOM_IPQ4019_USB=m
CONFIG_PHY_QCOM_PCIE2=m
CONFIG_PHY_QCOM_QMP=m
CONFIG_PHY_QCOM_QUSB2=m
CONFIG_PHY_QCOM_USB_HS=m
CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2=m
CONFIG_PHY_QCOM_USB_HSIC=m
CONFIG_PHY_QCOM_USB_HS_28NM=m
CONFIG_PHY_QCOM_USB_SS=m
CONFIG_PHY_QCOM_IPQ806X_USB=m
CONFIG_PHY_MT7621_PCI=m
CONFIG_PHY_RALINK_USB=m
CONFIG_PHY_RCAR_GEN3_USB3=m
CONFIG_PHY_ROCKCHIP_DPHY_RX0=m
CONFIG_PHY_ROCKCHIP_INNO_HDMI=m
CONFIG_PHY_ROCKCHIP_INNO_USB2=m
CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY=m
CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=m
CONFIG_PHY_ROCKCHIP_PCIE=m
CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=m
CONFIG_PHY_ROCKCHIP_TYPEC=m
CONFIG_PHY_EXYNOS_DP_VIDEO=m
CONFIG_PHY_EXYNOS_MIPI_VIDEO=m
CONFIG_PHY_EXYNOS_PCIE=y
CONFIG_PHY_SAMSUNG_UFS=m
CONFIG_PHY_SAMSUNG_USB2=m
CONFIG_PHY_S5PV210_USB2=y
CONFIG_PHY_EXYNOS5_USBDRD=m
CONFIG_PHY_UNIPHIER_USB2=m
CONFIG_PHY_UNIPHIER_USB3=m
CONFIG_PHY_UNIPHIER_PCIE=m
CONFIG_PHY_UNIPHIER_AHCI=m
CONFIG_PHY_ST_SPEAR1310_MIPHY=m
CONFIG_PHY_ST_SPEAR1340_MIPHY=m
CONFIG_PHY_STIH407_USB=m
CONFIG_PHY_STM32_USBPHYC=m
CONFIG_PHY_SUNPLUS_USB=m
CONFIG_PHY_TEGRA194_P2U=m
CONFIG_PHY_DA8XX_USB=m
CONFIG_PHY_DM816X_USB=m
CONFIG_PHY_AM654_SERDES=m
CONFIG_PHY_J721E_WIZ=m
CONFIG_OMAP_CONTROL_PHY=m
CONFIG_TI_PIPE3=m
CONFIG_PHY_TUSB1210=m
CONFIG_PHY_INTEL_KEEMBAY_EMMC=m
CONFIG_PHY_INTEL_KEEMBAY_USB=m
CONFIG_PHY_INTEL_LGM_COMBO=y
CONFIG_PHY_INTEL_LGM_EMMC=m
CONFIG_PHY_INTEL_THUNDERBAY_EMMC=m
CONFIG_PHY_XILINX_ZYNQMP=m
# end of PHY Subsystem

CONFIG_POWERCAP=y
CONFIG_DTPM=y
CONFIG_MCB=m
CONFIG_MCB_LPC=m
CONFIG_RAS=y

#
# Android
#
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
CONFIG_ANDROID_BINDER_IPC_SELFTEST=y
# end of Android

CONFIG_DAX=m
CONFIG_NVMEM=y
CONFIG_NVMEM_SYSFS=y
CONFIG_NVMEM_APPLE_EFUSES=m
CONFIG_NVMEM_BCM_OCOTP=m
CONFIG_NVMEM_BRCM_NVRAM=m
CONFIG_NVMEM_IMX_IIM=m
CONFIG_NVMEM_IMX_OCOTP=m
CONFIG_NVMEM_JZ4780_EFUSE=m
CONFIG_NVMEM_LAN9662_OTPC=m
CONFIG_NVMEM_LAYERSCAPE_SFP=m
CONFIG_NVMEM_LPC18XX_EEPROM=m
CONFIG_NVMEM_LPC18XX_OTP=m
CONFIG_NVMEM_MESON_MX_EFUSE=m
CONFIG_NVMEM_MICROCHIP_OTPC=m
CONFIG_NVMEM_MTK_EFUSE=m
CONFIG_NVMEM_MXS_OCOTP=m
CONFIG_NVMEM_NINTENDO_OTP=m
CONFIG_NVMEM_QCOM_QFPROM=m
CONFIG_NVMEM_RAVE_SP_EEPROM=m
CONFIG_NVMEM_RMEM=m
CONFIG_NVMEM_ROCKCHIP_EFUSE=m
CONFIG_NVMEM_ROCKCHIP_OTP=m
CONFIG_NVMEM_SC27XX_EFUSE=m
CONFIG_NVMEM_SNVS_LPGPR=m
CONFIG_NVMEM_SPMI_SDAM=m
CONFIG_NVMEM_SPRD_EFUSE=m
CONFIG_NVMEM_STM32_ROMEM=m
CONFIG_NVMEM_SUNPLUS_OCOTP=m
CONFIG_NVMEM_U_BOOT_ENV=m
CONFIG_NVMEM_UNIPHIER_EFUSE=m
CONFIG_NVMEM_VF610_OCOTP=m

#
# HW tracing support
#
CONFIG_STM=m
CONFIG_STM_PROTO_BASIC=m
CONFIG_STM_PROTO_SYS_T=m
CONFIG_STM_DUMMY=m
CONFIG_STM_SOURCE_CONSOLE=m
CONFIG_STM_SOURCE_HEARTBEAT=m
CONFIG_INTEL_TH=m
CONFIG_INTEL_TH_GTH=m
CONFIG_INTEL_TH_STH=m
CONFIG_INTEL_TH_MSU=m
CONFIG_INTEL_TH_PTI=m
CONFIG_INTEL_TH_DEBUG=y
# end of HW tracing support

CONFIG_FPGA=m
CONFIG_FPGA_MGR_SOCFPGA=m
CONFIG_FPGA_MGR_SOCFPGA_A10=m
CONFIG_ALTERA_PR_IP_CORE=m
CONFIG_ALTERA_PR_IP_CORE_PLAT=m
CONFIG_FPGA_MGR_ALTERA_PS_SPI=m
CONFIG_FPGA_MGR_ZYNQ_FPGA=m
CONFIG_FPGA_MGR_XILINX_SPI=m
CONFIG_FPGA_MGR_ICE40_SPI=m
CONFIG_FPGA_MGR_MACHXO2_SPI=m
CONFIG_FPGA_BRIDGE=m
CONFIG_ALTERA_FREEZE_BRIDGE=m
CONFIG_XILINX_PR_DECOUPLER=m
CONFIG_FPGA_REGION=m
CONFIG_OF_FPGA_REGION=m
CONFIG_FPGA_DFL=m
CONFIG_FPGA_DFL_AFU=m
CONFIG_FPGA_DFL_NIOS_INTEL_PAC_N3000=m
CONFIG_FPGA_MGR_ZYNQMP_FPGA=m
CONFIG_FPGA_MGR_VERSAL_FPGA=m
CONFIG_FPGA_M10_BMC_SEC_UPDATE=m
CONFIG_FPGA_MGR_MICROCHIP_SPI=m
CONFIG_FSI=m
CONFIG_FSI_NEW_DEV_NODE=y
CONFIG_FSI_MASTER_GPIO=m
CONFIG_FSI_MASTER_HUB=m
CONFIG_FSI_MASTER_AST_CF=m
CONFIG_FSI_MASTER_ASPEED=m
CONFIG_FSI_SCOM=m
CONFIG_FSI_SBEFIFO=m
CONFIG_FSI_OCC=m
CONFIG_TEE=m
CONFIG_MULTIPLEXER=m

#
# Multiplexer drivers
#
CONFIG_MUX_ADG792A=m
CONFIG_MUX_ADGS1408=m
CONFIG_MUX_GPIO=m
CONFIG_MUX_MMIO=m
# end of Multiplexer drivers

CONFIG_PM_OPP=y
CONFIG_SIOX=m
CONFIG_SIOX_BUS_GPIO=m
CONFIG_SLIMBUS=m
CONFIG_SLIM_QCOM_CTRL=m
CONFIG_SLIM_QCOM_NGD_CTRL=m
CONFIG_INTERCONNECT=y
CONFIG_INTERCONNECT_IMX=m
CONFIG_INTERCONNECT_IMX8MM=m
CONFIG_INTERCONNECT_IMX8MN=m
CONFIG_INTERCONNECT_IMX8MQ=m
CONFIG_INTERCONNECT_IMX8MP=m
CONFIG_INTERCONNECT_QCOM_OSM_L3=m
CONFIG_INTERCONNECT_SAMSUNG=y
CONFIG_INTERCONNECT_EXYNOS=m
CONFIG_COUNTER=m
CONFIG_104_QUAD_8=m
CONFIG_INTERRUPT_CNT=m
CONFIG_STM32_TIMER_CNT=m
CONFIG_STM32_LPTIMER_CNT=m
CONFIG_TI_EQEP=m
CONFIG_FTM_QUADDEC=m
CONFIG_MICROCHIP_TCB_CAPTURE=m
CONFIG_TI_ECAP_CAPTURE=m
CONFIG_MOST=m
CONFIG_MOST_USB_HDM=m
CONFIG_MOST_CDEV=m
CONFIG_MOST_SND=m
CONFIG_PECI=m
CONFIG_PECI_CPU=m
CONFIG_PECI_ASPEED=m
CONFIG_HTE=y
# end of Device Drivers

#
# File systems
#
CONFIG_VALIDATE_FS_PARSER=y
CONFIG_FS_IOMAP=y
CONFIG_EXT2_FS=m
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT3_FS=m
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_EXT4_FS=m
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
CONFIG_EXT4_DEBUG=y
CONFIG_EXT4_KUNIT_TESTS=m
CONFIG_JBD2=m
CONFIG_JBD2_DEBUG=y
CONFIG_FS_MBCACHE=m
CONFIG_REISERFS_FS=m
CONFIG_REISERFS_CHECK=y
CONFIG_REISERFS_PROC_INFO=y
CONFIG_REISERFS_FS_XATTR=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_SECURITY=y
CONFIG_JFS_FS=m
CONFIG_JFS_POSIX_ACL=y
CONFIG_JFS_SECURITY=y
CONFIG_JFS_DEBUG=y
CONFIG_JFS_STATISTICS=y
CONFIG_XFS_FS=m
CONFIG_XFS_SUPPORT_V4=y
CONFIG_XFS_QUOTA=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_RT=y
CONFIG_XFS_ONLINE_SCRUB=y
CONFIG_XFS_ONLINE_REPAIR=y
CONFIG_XFS_DEBUG=y
CONFIG_XFS_ASSERT_FATAL=y
CONFIG_GFS2_FS=m
CONFIG_GFS2_FS_LOCKING_DLM=y
CONFIG_OCFS2_FS=m
CONFIG_OCFS2_FS_O2CB=m
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
CONFIG_OCFS2_FS_STATS=y
CONFIG_OCFS2_DEBUG_MASKLOG=y
CONFIG_OCFS2_DEBUG_FS=y
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_BTRFS_FS_CHECK_INTEGRITY=y
CONFIG_BTRFS_FS_RUN_SANITY_TESTS=y
CONFIG_BTRFS_DEBUG=y
CONFIG_BTRFS_ASSERT=y
CONFIG_BTRFS_FS_REF_VERIFY=y
CONFIG_NILFS2_FS=m
CONFIG_F2FS_FS=m
CONFIG_F2FS_STAT_FS=y
CONFIG_F2FS_FS_XATTR=y
CONFIG_F2FS_FS_POSIX_ACL=y
CONFIG_F2FS_FS_SECURITY=y
CONFIG_F2FS_CHECK_FS=y
CONFIG_F2FS_FAULT_INJECTION=y
CONFIG_F2FS_FS_COMPRESSION=y
CONFIG_F2FS_FS_LZO=y
CONFIG_F2FS_FS_LZORLE=y
CONFIG_F2FS_FS_LZ4=y
CONFIG_F2FS_FS_LZ4HC=y
CONFIG_F2FS_FS_ZSTD=y
CONFIG_F2FS_IOSTAT=y
CONFIG_F2FS_UNFAIR_RWSEM=y
CONFIG_ZONEFS_FS=m
CONFIG_FS_POSIX_ACL=y
CONFIG_EXPORTFS=y
CONFIG_EXPORTFS_BLOCK_OPS=y
CONFIG_FILE_LOCKING=y
CONFIG_FS_ENCRYPTION=y
CONFIG_FS_ENCRYPTION_ALGS=m
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_VERITY=y
CONFIG_FS_VERITY_DEBUG=y
CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY_USER=y
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_PRINT_QUOTA_WARNING=y
CONFIG_QUOTA_DEBUG=y
CONFIG_QUOTA_TREE=m
CONFIG_QFMT_V1=m
CONFIG_QFMT_V2=m
CONFIG_QUOTACTL=y
CONFIG_AUTOFS4_FS=m
CONFIG_AUTOFS_FS=m
CONFIG_FUSE_FS=m
CONFIG_CUSE=m
CONFIG_VIRTIO_FS=m
CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS_REDIRECT_DIR=y
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
CONFIG_OVERLAY_FS_INDEX=y
CONFIG_OVERLAY_FS_METACOPY=y

#
# Caches
#
CONFIG_NETFS_SUPPORT=m
CONFIG_NETFS_STATS=y
CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
CONFIG_FSCACHE_DEBUG=y
CONFIG_CACHEFILES=m
CONFIG_CACHEFILES_DEBUG=y
CONFIG_CACHEFILES_ERROR_INJECTION=y
CONFIG_CACHEFILES_ONDEMAND=y
# end of Caches

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=m
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_UDF_FS=m
# end of CD-ROM/DVD Filesystems

#
# DOS/FAT/EXFAT/NT Filesystems
#
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_FAT_DEFAULT_UTF8=y
CONFIG_FAT_KUNIT_TEST=m
CONFIG_EXFAT_FS=m
CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
CONFIG_NTFS_FS=m
CONFIG_NTFS_DEBUG=y
CONFIG_NTFS_RW=y
CONFIG_NTFS3_FS=m
CONFIG_NTFS3_LZX_XPRESS=y
CONFIG_NTFS3_FS_POSIX_ACL=y
# end of DOS/FAT/EXFAT/NT Filesystems

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_PROC_CHILDREN=y
CONFIG_KERNFS=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_MEMFD_CREATE=y
CONFIG_CONFIGFS_FS=m
# end of Pseudo filesystems

CONFIG_MISC_FILESYSTEMS=y
CONFIG_ORANGEFS_FS=m
CONFIG_ADFS_FS=m
CONFIG_ADFS_FS_RW=y
CONFIG_AFFS_FS=m
CONFIG_ECRYPT_FS=m
CONFIG_ECRYPT_FS_MESSAGING=y
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
CONFIG_BEFS_FS=m
CONFIG_BEFS_DEBUG=y
CONFIG_BFS_FS=m
CONFIG_EFS_FS=m
CONFIG_JFFS2_FS=m
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_FS_WBUF_VERIFY=y
CONFIG_JFFS2_SUMMARY=y
CONFIG_JFFS2_FS_XATTR=y
CONFIG_JFFS2_FS_POSIX_ACL=y
CONFIG_JFFS2_FS_SECURITY=y
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_RTIME=y
CONFIG_JFFS2_RUBIN=y
# CONFIG_JFFS2_CMODE_NONE is not set
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
CONFIG_UBIFS_FS=m
CONFIG_UBIFS_FS_ADVANCED_COMPR=y
CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
CONFIG_UBIFS_FS_ZSTD=y
CONFIG_UBIFS_ATIME_SUPPORT=y
CONFIG_UBIFS_FS_XATTR=y
CONFIG_UBIFS_FS_SECURITY=y
CONFIG_UBIFS_FS_AUTHENTICATION=y
CONFIG_CRAMFS=m
CONFIG_CRAMFS_BLOCKDEV=y
CONFIG_CRAMFS_MTD=y
CONFIG_SQUASHFS=m
CONFIG_SQUASHFS_FILE_CACHE=y
# CONFIG_SQUASHFS_FILE_DIRECT is not set
CONFIG_SQUASHFS_DECOMP_SINGLE=y
# CONFIG_SQUASHFS_DECOMP_MULTI is not set
# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set
CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_ZLIB=y
CONFIG_SQUASHFS_LZ4=y
CONFIG_SQUASHFS_LZO=y
CONFIG_SQUASHFS_XZ=y
CONFIG_SQUASHFS_ZSTD=y
CONFIG_SQUASHFS_4K_DEVBLK_SIZE=y
CONFIG_SQUASHFS_EMBEDDED=y
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
CONFIG_VXFS_FS=m
CONFIG_MINIX_FS=m
CONFIG_MINIX_FS_BIG_ENDIAN_16BIT_INDEXED=y
CONFIG_OMFS_FS=m
CONFIG_HPFS_FS=m
CONFIG_QNX4FS_FS=m
CONFIG_QNX6FS_FS=m
CONFIG_QNX6FS_DEBUG=y
CONFIG_ROMFS_FS=m
CONFIG_ROMFS_BACKED_BY_BLOCK=y
# CONFIG_ROMFS_BACKED_BY_MTD is not set
# CONFIG_ROMFS_BACKED_BY_BOTH is not set
CONFIG_ROMFS_ON_BLOCK=y
CONFIG_PSTORE=m
CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240
CONFIG_PSTORE_DEFLATE_COMPRESS=m
CONFIG_PSTORE_LZO_COMPRESS=m
CONFIG_PSTORE_LZ4_COMPRESS=m
CONFIG_PSTORE_LZ4HC_COMPRESS=m
CONFIG_PSTORE_842_COMPRESS=y
CONFIG_PSTORE_ZSTD_COMPRESS=y
CONFIG_PSTORE_COMPRESS=y
CONFIG_PSTORE_DEFLATE_COMPRESS_DEFAULT=y
# CONFIG_PSTORE_LZO_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_LZ4_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_LZ4HC_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_842_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT is not set
CONFIG_PSTORE_COMPRESS_DEFAULT="deflate"
CONFIG_PSTORE_CONSOLE=y
CONFIG_PSTORE_PMSG=y
CONFIG_PSTORE_RAM=m
CONFIG_PSTORE_ZONE=m
CONFIG_PSTORE_BLK=m
CONFIG_PSTORE_BLK_BLKDEV=""
CONFIG_PSTORE_BLK_KMSG_SIZE=64
CONFIG_PSTORE_BLK_MAX_REASON=2
CONFIG_PSTORE_BLK_PMSG_SIZE=64
CONFIG_PSTORE_BLK_CONSOLE_SIZE=64
CONFIG_SYSV_FS=m
CONFIG_UFS_FS=m
CONFIG_UFS_FS_WRITE=y
CONFIG_UFS_DEBUG=y
CONFIG_EROFS_FS=m
CONFIG_EROFS_FS_DEBUG=y
CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_ZIP=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ONDEMAND=y
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=m
CONFIG_NFS_V2=m
CONFIG_NFS_V3=m
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=m
CONFIG_NFS_SWAP=y
CONFIG_NFS_V4_1=y
CONFIG_NFS_V4_2=y
CONFIG_PNFS_FILE_LAYOUT=m
CONFIG_PNFS_BLOCK=m
CONFIG_PNFS_FLEXFILE_LAYOUT=m
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
CONFIG_NFS_V4_1_MIGRATION=y
CONFIG_NFS_V4_SECURITY_LABEL=y
CONFIG_NFS_FSCACHE=y
CONFIG_NFS_USE_LEGACY_DNS=y
CONFIG_NFS_DEBUG=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
CONFIG_NFS_V4_2_READ_PLUS=y
CONFIG_NFSD=m
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFSD_V4=y
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_SCSILAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFSD_V4_2_INTER_SSC=y
CONFIG_NFSD_V4_SECURITY_LABEL=y
CONFIG_GRACE_PERIOD=m
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_NFS_COMMON=y
CONFIG_NFS_V4_2_SSC_HELPER=y
CONFIG_SUNRPC=m
CONFIG_SUNRPC_GSS=m
CONFIG_SUNRPC_BACKCHANNEL=y
CONFIG_SUNRPC_SWAP=y
CONFIG_RPCSEC_GSS_KRB5=m
CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES=y
CONFIG_SUNRPC_DEBUG=y
CONFIG_SUNRPC_XPRT_RDMA=m
CONFIG_CEPH_FS=m
CONFIG_CEPH_FSCACHE=y
CONFIG_CEPH_FS_POSIX_ACL=y
CONFIG_CEPH_FS_SECURITY_LABEL=y
CONFIG_CIFS=m
CONFIG_CIFS_STATS2=y
CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y
CONFIG_CIFS_UPCALL=y
CONFIG_CIFS_XATTR=y
CONFIG_CIFS_POSIX=y
CONFIG_CIFS_DEBUG=y
CONFIG_CIFS_DEBUG2=y
CONFIG_CIFS_DEBUG_DUMP_KEYS=y
CONFIG_CIFS_DFS_UPCALL=y
CONFIG_CIFS_SWN_UPCALL=y
CONFIG_CIFS_SMB_DIRECT=y
CONFIG_CIFS_FSCACHE=y
CONFIG_SMB_SERVER=m
CONFIG_SMB_SERVER_SMBDIRECT=y
CONFIG_SMB_SERVER_CHECK_CAP_NET_ADMIN=y
CONFIG_SMB_SERVER_KERBEROS5=y
CONFIG_SMBFS_COMMON=m
CONFIG_CODA_FS=m
CONFIG_AFS_FS=m
CONFIG_AFS_DEBUG=y
CONFIG_AFS_FSCACHE=y
CONFIG_AFS_DEBUG_CURSOR=y
CONFIG_9P_FS=m
CONFIG_9P_FSCACHE=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_9P_FS_SECURITY=y
CONFIG_NLS=m
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=m
CONFIG_NLS_CODEPAGE_737=m
CONFIG_NLS_CODEPAGE_775=m
CONFIG_NLS_CODEPAGE_850=m
CONFIG_NLS_CODEPAGE_852=m
CONFIG_NLS_CODEPAGE_855=m
CONFIG_NLS_CODEPAGE_857=m
CONFIG_NLS_CODEPAGE_860=m
CONFIG_NLS_CODEPAGE_861=m
CONFIG_NLS_CODEPAGE_862=m
CONFIG_NLS_CODEPAGE_863=m
CONFIG_NLS_CODEPAGE_864=m
CONFIG_NLS_CODEPAGE_865=m
CONFIG_NLS_CODEPAGE_866=m
CONFIG_NLS_CODEPAGE_869=m
CONFIG_NLS_CODEPAGE_936=m
CONFIG_NLS_CODEPAGE_950=m
CONFIG_NLS_CODEPAGE_932=m
CONFIG_NLS_CODEPAGE_949=m
CONFIG_NLS_CODEPAGE_874=m
CONFIG_NLS_ISO8859_8=m
CONFIG_NLS_CODEPAGE_1250=m
CONFIG_NLS_CODEPAGE_1251=m
CONFIG_NLS_ASCII=m
CONFIG_NLS_ISO8859_1=m
CONFIG_NLS_ISO8859_2=m
CONFIG_NLS_ISO8859_3=m
CONFIG_NLS_ISO8859_4=m
CONFIG_NLS_ISO8859_5=m
CONFIG_NLS_ISO8859_6=m
CONFIG_NLS_ISO8859_7=m
CONFIG_NLS_ISO8859_9=m
CONFIG_NLS_ISO8859_13=m
CONFIG_NLS_ISO8859_14=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
CONFIG_NLS_MAC_ROMAN=m
CONFIG_NLS_MAC_CELTIC=m
CONFIG_NLS_MAC_CENTEURO=m
CONFIG_NLS_MAC_CROATIAN=m
CONFIG_NLS_MAC_CYRILLIC=m
CONFIG_NLS_MAC_GAELIC=m
CONFIG_NLS_MAC_GREEK=m
CONFIG_NLS_MAC_ICELAND=m
CONFIG_NLS_MAC_INUIT=m
CONFIG_NLS_MAC_ROMANIAN=m
CONFIG_NLS_MAC_TURKISH=m
CONFIG_NLS_UTF8=m
CONFIG_DLM=m
CONFIG_DLM_DEPRECATED_API=y
CONFIG_DLM_DEBUG=y
CONFIG_UNICODE=m
CONFIG_UNICODE_NORMALIZATION_SELFTEST=m
CONFIG_IO_WQ=y
# end of File systems

#
# Security options
#
CONFIG_KEYS=y
CONFIG_KEYS_REQUEST_CACHE=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_TRUSTED_KEYS=m
CONFIG_TRUSTED_KEYS_TPM=y
CONFIG_TRUSTED_KEYS_TEE=y
CONFIG_ENCRYPTED_KEYS=y
CONFIG_USER_DECRYPTED_DATA=y
CONFIG_KEY_DH_OPERATIONS=y
CONFIG_KEY_NOTIFICATIONS=y
CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITY=y
CONFIG_SECURITY_WRITABLE_HOOKS=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
CONFIG_SECURITY_INFINIBAND=y
CONFIG_SECURITY_NETWORK_XFRM=y
CONFIG_SECURITY_PATH=y
CONFIG_LSM_MMAP_MIN_ADDR=65536
CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
CONFIG_HARDENED_USERCOPY=y
CONFIG_STATIC_USERMODEHELPER=y
CONFIG_STATIC_USERMODEHELPER_PATH="/sbin/usermode-helper"
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_SECURITY_SELINUX_DISABLE=y
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=0
CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS=9
CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256
CONFIG_SECURITY_SMACK=y
CONFIG_SECURITY_SMACK_BRINGUP=y
CONFIG_SECURITY_SMACK_NETFILTER=y
CONFIG_SECURITY_SMACK_APPEND_SIGNALS=y
CONFIG_SECURITY_TOMOYO=y
CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048
CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024
CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER=y
CONFIG_SECURITY_TOMOYO_INSECURE_BUILTIN_SETTING=y
CONFIG_SECURITY_APPARMOR=y
CONFIG_SECURITY_APPARMOR_DEBUG=y
CONFIG_SECURITY_APPARMOR_DEBUG_ASSERTS=y
CONFIG_SECURITY_APPARMOR_DEBUG_MESSAGES=y
CONFIG_SECURITY_APPARMOR_INTROSPECT_POLICY=y
CONFIG_SECURITY_APPARMOR_HASH=y
CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y
CONFIG_SECURITY_APPARMOR_EXPORT_BINARY=y
CONFIG_SECURITY_APPARMOR_PARANOID_LOAD=y
CONFIG_SECURITY_LOADPIN=y
CONFIG_SECURITY_LOADPIN_ENFORCE=y
CONFIG_SECURITY_YAMA=y
CONFIG_SECURITY_SAFESETID=y
CONFIG_SECURITY_LOCKDOWN_LSM=y
CONFIG_SECURITY_LOCKDOWN_LSM_EARLY=y
CONFIG_LOCK_DOWN_KERNEL_FORCE_NONE=y
# CONFIG_LOCK_DOWN_KERNEL_FORCE_INTEGRITY is not set
# CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY is not set
CONFIG_SECURITY_LANDLOCK=y
CONFIG_INTEGRITY=y
CONFIG_INTEGRITY_SIGNATURE=y
CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
CONFIG_INTEGRITY_TRUSTED_KEYRING=y
CONFIG_INTEGRITY_PLATFORM_KEYRING=y
CONFIG_INTEGRITY_AUDIT=y
CONFIG_IMA=y
CONFIG_IMA_MEASURE_PCR_IDX=10
CONFIG_IMA_LSM_RULES=y
CONFIG_IMA_NG_TEMPLATE=y
# CONFIG_IMA_SIG_TEMPLATE is not set
CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng"
CONFIG_IMA_DEFAULT_HASH_SHA1=y
# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set
# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set
CONFIG_IMA_DEFAULT_HASH="sha1"
CONFIG_IMA_WRITE_POLICY=y
CONFIG_IMA_READ_POLICY=y
CONFIG_IMA_APPRAISE=y
CONFIG_IMA_ARCH_POLICY=y
CONFIG_IMA_APPRAISE_BUILD_POLICY=y
CONFIG_IMA_APPRAISE_REQUIRE_FIRMWARE_SIGS=y
CONFIG_IMA_APPRAISE_REQUIRE_KEXEC_SIGS=y
CONFIG_IMA_APPRAISE_REQUIRE_MODULE_SIGS=y
CONFIG_IMA_APPRAISE_REQUIRE_POLICY_SIGS=y
CONFIG_IMA_APPRAISE_BOOTPARAM=y
CONFIG_IMA_APPRAISE_MODSIG=y
CONFIG_IMA_TRUSTED_KEYRING=y
CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY=y
CONFIG_IMA_BLACKLIST_KEYRING=y
CONFIG_IMA_LOAD_X509=y
CONFIG_IMA_X509_PATH="/etc/keys/x509_ima.der"
CONFIG_IMA_APPRAISE_SIGNED_INIT=y
CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS=y
CONFIG_IMA_QUEUE_EARLY_BOOT_KEYS=y
CONFIG_IMA_DISABLE_HTABLE=y
CONFIG_EVM=y
CONFIG_EVM_ATTR_FSUUID=y
CONFIG_EVM_EXTRA_SMACK_XATTRS=y
CONFIG_EVM_ADD_XATTRS=y
CONFIG_EVM_LOAD_X509=y
CONFIG_EVM_X509_PATH="/etc/keys/x509_evm.der"
CONFIG_DEFAULT_SECURITY_SELINUX=y
# CONFIG_DEFAULT_SECURITY_SMACK is not set
# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
# CONFIG_DEFAULT_SECURITY_APPARMOR is not set
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf"

#
# Kernel hardening options
#

#
# Memory initialization
#
CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y
# CONFIG_INIT_STACK_NONE is not set
CONFIG_INIT_STACK_ALL_PATTERN=y
# CONFIG_INIT_STACK_ALL_ZERO is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
CONFIG_INIT_ON_FREE_DEFAULT_ON=y
CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
CONFIG_ZERO_CALL_USED_REGS=y
# end of Memory initialization

CONFIG_RANDSTRUCT_NONE=y
# end of Kernel hardening options
# end of Security options

CONFIG_XOR_BLOCKS=m
CONFIG_ASYNC_CORE=m
CONFIG_ASYNC_MEMCPY=m
CONFIG_ASYNC_XOR=m
CONFIG_ASYNC_PQ=m
CONFIG_ASYNC_RAID6_RECOV=m
CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA=y
CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA=y
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=m
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_SKCIPHER=y
CONFIG_CRYPTO_SKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_RNG_DEFAULT=y
CONFIG_CRYPTO_AKCIPHER2=y
CONFIG_CRYPTO_AKCIPHER=y
CONFIG_CRYPTO_KPP2=y
CONFIG_CRYPTO_KPP=y
CONFIG_CRYPTO_ACOMP2=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
CONFIG_CRYPTO_USER=m
CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
CONFIG_CRYPTO_GF128MUL=m
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_NULL2=y
CONFIG_CRYPTO_CRYPTD=m
CONFIG_CRYPTO_AUTHENC=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_ENGINE=m
# end of Crypto core or helper

#
# Public-key cryptography
#
CONFIG_CRYPTO_RSA=y
CONFIG_CRYPTO_DH=y
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_ECC=m
CONFIG_CRYPTO_ECDH=m
CONFIG_CRYPTO_ECDSA=m
CONFIG_CRYPTO_ECRDSA=m
CONFIG_CRYPTO_SM2=m
CONFIG_CRYPTO_CURVE25519=m
# end of Public-key cryptography

#
# Block ciphers
#
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_AES_TI=m
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_ARIA=m
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_BLOWFISH_COMMON=m
CONFIG_CRYPTO_CAMELLIA=m
CONFIG_CRYPTO_CAST_COMMON=m
CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_FCRYPT=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_SEED=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_SM4=m
CONFIG_CRYPTO_SM4_GENERIC=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TWOFISH=m
CONFIG_CRYPTO_TWOFISH_COMMON=m
# end of Block ciphers

#
# Length-preserving ciphers and modes
#
CONFIG_CRYPTO_ADIANTUM=m
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CFB=m
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=m
CONFIG_CRYPTO_ECB=m
CONFIG_CRYPTO_HCTR2=m
CONFIG_CRYPTO_KEYWRAP=m
CONFIG_CRYPTO_LRW=m
CONFIG_CRYPTO_OFB=m
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_XCTR=m
CONFIG_CRYPTO_XTS=m
CONFIG_CRYPTO_NHPOLY1305=m
# end of Length-preserving ciphers and modes

#
# AEAD (authenticated encryption with associated data) ciphers
#
CONFIG_CRYPTO_AEGIS128=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_CCM=m
CONFIG_CRYPTO_GCM=m
CONFIG_CRYPTO_SEQIV=m
CONFIG_CRYPTO_ECHAINIV=m
CONFIG_CRYPTO_ESSIV=m
# end of AEAD (authenticated encryption with associated data) ciphers

#
# Hashes, digests, and MACs
#
CONFIG_CRYPTO_BLAKE2B=m
CONFIG_CRYPTO_CMAC=m
CONFIG_CRYPTO_GHASH=m
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_POLYVAL=m
CONFIG_CRYPTO_POLY1305=m
CONFIG_CRYPTO_RMD160=m
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=y
CONFIG_CRYPTO_SHA3=m
CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_SM3_GENERIC=m
CONFIG_CRYPTO_STREEBOG=m
CONFIG_CRYPTO_VMAC=m
CONFIG_CRYPTO_WP512=m
CONFIG_CRYPTO_XCBC=m
CONFIG_CRYPTO_XXHASH=m
# end of Hashes, digests, and MACs

#
# CRCs (cyclic redundancy checks)
#
CONFIG_CRYPTO_CRC32C=m
CONFIG_CRYPTO_CRC32=m
CONFIG_CRYPTO_CRCT10DIF=m
CONFIG_CRYPTO_CRC64_ROCKSOFT=m
# end of CRCs (cyclic redundancy checks)

#
# Compression
#
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_LZO=y
CONFIG_CRYPTO_842=m
CONFIG_CRYPTO_LZ4=m
CONFIG_CRYPTO_LZ4HC=m
CONFIG_CRYPTO_ZSTD=m
# end of Compression

#
# Random number generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
CONFIG_CRYPTO_DRBG_MENU=y
CONFIG_CRYPTO_DRBG_HMAC=y
CONFIG_CRYPTO_DRBG_HASH=y
CONFIG_CRYPTO_DRBG_CTR=y
CONFIG_CRYPTO_DRBG=y
CONFIG_CRYPTO_JITTERENTROPY=y
CONFIG_CRYPTO_KDF800108_CTR=y
# end of Random number generation

#
# Userspace interface
#
CONFIG_CRYPTO_USER_API=m
CONFIG_CRYPTO_USER_API_HASH=m
CONFIG_CRYPTO_USER_API_SKCIPHER=m
CONFIG_CRYPTO_USER_API_RNG=m
CONFIG_CRYPTO_USER_API_RNG_CAVP=y
CONFIG_CRYPTO_USER_API_AEAD=m
CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y
CONFIG_CRYPTO_STATS=y
# end of Userspace interface

CONFIG_CRYPTO_HASH_INFO=y
CONFIG_CRYPTO_HW=y
CONFIG_CRYPTO_DEV_ALLWINNER=y
CONFIG_CRYPTO_DEV_EXYNOS_RNG=m
CONFIG_CRYPTO_DEV_S5P=m
CONFIG_CRYPTO_DEV_ATMEL_AUTHENC=y
CONFIG_CRYPTO_DEV_ATMEL_AES=m
CONFIG_CRYPTO_DEV_ATMEL_TDES=m
CONFIG_CRYPTO_DEV_ATMEL_SHA=m
CONFIG_CRYPTO_DEV_ATMEL_I2C=m
CONFIG_CRYPTO_DEV_ATMEL_ECC=m
CONFIG_CRYPTO_DEV_ATMEL_SHA204A=m
CONFIG_CRYPTO_DEV_QCE=m
CONFIG_CRYPTO_DEV_QCE_SKCIPHER=y
CONFIG_CRYPTO_DEV_QCE_SHA=y
CONFIG_CRYPTO_DEV_QCE_AEAD=y
CONFIG_CRYPTO_DEV_QCE_ENABLE_ALL=y
# CONFIG_CRYPTO_DEV_QCE_ENABLE_SKCIPHER is not set
# CONFIG_CRYPTO_DEV_QCE_ENABLE_SHA is not set
# CONFIG_CRYPTO_DEV_QCE_ENABLE_AEAD is not set
CONFIG_CRYPTO_DEV_QCE_SW_MAX_LEN=512
CONFIG_CRYPTO_DEV_QCOM_RNG=m
CONFIG_CRYPTO_DEV_IMGTEC_HASH=m
CONFIG_CRYPTO_DEV_ZYNQMP_AES=m
CONFIG_CRYPTO_DEV_ZYNQMP_SHA3=m
CONFIG_CRYPTO_DEV_VIRTIO=m
CONFIG_CRYPTO_DEV_SAFEXCEL=m
CONFIG_CRYPTO_DEV_CCREE=m
CONFIG_CRYPTO_DEV_HISI_SEC=m
CONFIG_CRYPTO_DEV_AMLOGIC_GXL=m
CONFIG_CRYPTO_DEV_AMLOGIC_GXL_DEBUG=y
CONFIG_CRYPTO_DEV_SA2UL=m
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_AES_SM4=m
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_AES_SM4_ECB=y
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_AES_SM4_CTS=y
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_ECC=m
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_HCU=m
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_HCU_HMAC_SHA224=y
CONFIG_CRYPTO_DEV_ASPEED=m
CONFIG_CRYPTO_DEV_ASPEED_DEBUG=y
CONFIG_CRYPTO_DEV_ASPEED_HACE_HASH=y
CONFIG_CRYPTO_DEV_ASPEED_HACE_CRYPTO=y
CONFIG_ASYMMETRIC_KEY_TYPE=y
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
CONFIG_X509_CERTIFICATE_PARSER=y
CONFIG_PKCS8_PRIVATE_KEY_PARSER=m
CONFIG_PKCS7_MESSAGE_PARSER=y
CONFIG_PKCS7_TEST_KEY=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_FIPS_SIGNATURE_SELFTEST=y

#
# Certificates for signature checking
#
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
# CONFIG_MODULE_SIG_KEY_TYPE_ECDSA is not set
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_EXTRA_CERTIFICATE=y
CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096
CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
CONFIG_SYSTEM_REVOCATION_LIST=y
CONFIG_SYSTEM_REVOCATION_KEYS=""
CONFIG_SYSTEM_BLACKLIST_AUTH_UPDATE=y
# end of Certificates for signature checking

CONFIG_BINARY_PRINTF=y

#
# Library routines
#
CONFIG_RAID6_PQ=m
CONFIG_RAID6_PQ_BENCHMARK=y
CONFIG_LINEAR_RANGES=y
CONFIG_PACKING=y
CONFIG_BITREVERSE=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_GENERIC_NET_UTILS=y
CONFIG_CORDIC=m
CONFIG_PRIME_NUMBERS=m
CONFIG_RATIONAL=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_IOMAP=y
CONFIG_STMP_DEVICE=y

#
# Crypto library routines
#
CONFIG_CRYPTO_LIB_UTILS=y
CONFIG_CRYPTO_LIB_AES=y
CONFIG_CRYPTO_LIB_ARC4=m
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m
CONFIG_CRYPTO_LIB_CHACHA=m
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=m
CONFIG_CRYPTO_LIB_CURVE25519=m
CONFIG_CRYPTO_LIB_DES=m
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
CONFIG_CRYPTO_LIB_POLY1305=m
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
CONFIG_CRYPTO_LIB_SHA1=y
CONFIG_CRYPTO_LIB_SHA256=y
# end of Crypto library routines

CONFIG_CRC_CCITT=m
CONFIG_CRC16=m
CONFIG_CRC_T10DIF=m
CONFIG_CRC64_ROCKSOFT=m
CONFIG_CRC_ITU_T=m
CONFIG_CRC32=y
CONFIG_CRC32_SELFTEST=m
CONFIG_CRC32_SLICEBY8=y
# CONFIG_CRC32_SLICEBY4 is not set
# CONFIG_CRC32_SARWATE is not set
# CONFIG_CRC32_BIT is not set
CONFIG_CRC64=m
CONFIG_CRC4=m
CONFIG_CRC7=m
CONFIG_LIBCRC32C=m
CONFIG_CRC8=m
CONFIG_XXHASH=y
CONFIG_AUDIT_GENERIC=y
CONFIG_RANDOM32_SELFTEST=y
CONFIG_842_COMPRESS=m
CONFIG_842_DECOMPRESS=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_LZ4_COMPRESS=m
CONFIG_LZ4HC_COMPRESS=m
CONFIG_LZ4_DECOMPRESS=y
CONFIG_ZSTD_COMMON=y
CONFIG_ZSTD_COMPRESS=m
CONFIG_ZSTD_DECOMPRESS=y
CONFIG_XZ_DEC=y
CONFIG_XZ_DEC_X86=y
CONFIG_XZ_DEC_POWERPC=y
CONFIG_XZ_DEC_IA64=y
CONFIG_XZ_DEC_ARM=y
CONFIG_XZ_DEC_ARMTHUMB=y
CONFIG_XZ_DEC_SPARC=y
CONFIG_XZ_DEC_MICROLZMA=y
CONFIG_XZ_DEC_BCJ=y
CONFIG_XZ_DEC_TEST=m
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_DECOMPRESS_XZ=y
CONFIG_DECOMPRESS_LZO=y
CONFIG_DECOMPRESS_LZ4=y
CONFIG_DECOMPRESS_ZSTD=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_REED_SOLOMON=m
CONFIG_REED_SOLOMON_ENC8=y
CONFIG_REED_SOLOMON_DEC8=y
CONFIG_REED_SOLOMON_ENC16=y
CONFIG_REED_SOLOMON_DEC16=y
CONFIG_BCH=m
CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=m
CONFIG_TEXTSEARCH_BM=m
CONFIG_TEXTSEARCH_FSM=m
CONFIG_BTREE=y
CONFIG_INTERVAL_TREE=y
CONFIG_XARRAY_MULTI=y
CONFIG_ASSOCIATIVE_ARRAY=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_DMA=y
CONFIG_DMA_OPS=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_DMA_DECLARE_COHERENT=y
CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y
CONFIG_ARCH_HAS_DMA_PREP_COHERENT=y
CONFIG_DMA_NONCOHERENT_MMAP=y
CONFIG_DMA_COHERENT_POOL=y
CONFIG_DMA_DIRECT_REMAP=y
CONFIG_DMA_API_DEBUG=y
CONFIG_DMA_API_DEBUG_SG=y
CONFIG_DMA_MAP_BENCHMARK=y
CONFIG_SGL_ALLOC=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_DQL=y
CONFIG_GLOB=y
CONFIG_GLOB_SELFTEST=m
CONFIG_NLATTR=y
CONFIG_GENERIC_ATOMIC64=y
CONFIG_LRU_CACHE=m
CONFIG_CLZ_TAB=y
CONFIG_IRQ_POLL=y
CONFIG_MPILIB=y
CONFIG_SIGNATURE=y
CONFIG_DIMLIB=y
CONFIG_LIBFDT=y
CONFIG_OID_REGISTRY=y
CONFIG_FONT_SUPPORT=m
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
CONFIG_FONT_6x11=y
CONFIG_FONT_7x14=y
CONFIG_FONT_PEARL_8x8=y
CONFIG_FONT_ACORN_8x8=y
CONFIG_FONT_MINI_4x6=y
CONFIG_FONT_6x10=y
CONFIG_FONT_10x18=y
CONFIG_FONT_SUN8x16=y
CONFIG_FONT_SUN12x22=y
CONFIG_FONT_TER16x32=y
CONFIG_FONT_6x8=y
CONFIG_SG_SPLIT=y
CONFIG_SG_POOL=y
CONFIG_SBITMAP=y
CONFIG_PARMAN=m
CONFIG_OBJAGG=m
# end of Library routines

CONFIG_ASN1_ENCODER=m
CONFIG_POLYNOMIAL=m

#
# Kernel hacking
#

#
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
CONFIG_PRINTK_CALLER=y
CONFIG_STACKTRACE_BUILD_ID=y
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
CONFIG_CONSOLE_LOGLEVEL_QUIET=4
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_DYNAMIC_DEBUG=y
CONFIG_DYNAMIC_DEBUG_CORE=y
CONFIG_SYMBOLIC_ERRNAME=y
CONFIG_DEBUG_BUGVERBOSE=y
# end of printk and dmesg options

CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_MISC=y

#
# Compile-time checks and compiler options
#
CONFIG_AS_HAS_NON_CONST_LEB128=y
CONFIG_DEBUG_INFO_NONE=y
# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set
# CONFIG_DEBUG_INFO_DWARF4 is not set
# CONFIG_DEBUG_INFO_DWARF5 is not set
CONFIG_FRAME_WARN=1024
CONFIG_STRIP_ASM_SYMS=y
CONFIG_READABLE_ASM=y
CONFIG_HEADERS_INSTALL=y
CONFIG_DEBUG_SECTION_MISMATCH=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
CONFIG_FRAME_POINTER=y
CONFIG_VMLINUX_MAP=y
CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
# end of Compile-time checks and compiler options

#
# Generic Kernel Debugging Instruments
#
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE=""
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_FS_ALLOW_ALL=y
# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set
# CONFIG_DEBUG_FS_ALLOW_NONE is not set
CONFIG_UBSAN=y
CONFIG_CC_HAS_UBSAN_BOUNDS=y
CONFIG_UBSAN_BOUNDS=y
CONFIG_UBSAN_ONLY_BOUNDS=y
CONFIG_UBSAN_SHIFT=y
CONFIG_UBSAN_DIV_ZERO=y
CONFIG_UBSAN_UNREACHABLE=y
CONFIG_UBSAN_BOOL=y
CONFIG_UBSAN_ENUM=y
CONFIG_TEST_UBSAN=m
CONFIG_HAVE_KCSAN_COMPILER=y
# end of Generic Kernel Debugging Instruments

#
# Networking Debugging
#
CONFIG_DEBUG_NET=y
# end of Networking Debugging

#
# Memory Debugging
#
CONFIG_PAGE_EXTENSION=y
CONFIG_DEBUG_PAGEALLOC=y
CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT=y
CONFIG_SLUB_DEBUG=y
CONFIG_SLUB_DEBUG_ON=y
CONFIG_PAGE_POISONING=y
CONFIG_DEBUG_OBJECTS=y
CONFIG_DEBUG_OBJECTS_SELFTEST=y
CONFIG_DEBUG_OBJECTS_FREE=y
CONFIG_DEBUG_OBJECTS_TIMERS=y
CONFIG_DEBUG_OBJECTS_WORK=y
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
CONFIG_SHRINKER_DEBUG=y
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_SCHED_STACK_END_CHECK=y
CONFIG_DEBUG_VM_IRQSOFF=y
CONFIG_DEBUG_VM=y
CONFIG_DEBUG_VM_MAPLE_TREE=y
CONFIG_DEBUG_VM_RB=y
CONFIG_DEBUG_VM_PGFLAGS=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
# end of Memory Debugging

CONFIG_DEBUG_SHIRQ=y

#
# Debug Oops, Lockups and Hangs
#
CONFIG_PANIC_ON_OOPS=y
CONFIG_PANIC_ON_OOPS_VALUE=1
CONFIG_PANIC_TIMEOUT=0
CONFIG_LOCKUP_DETECTOR=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
CONFIG_WQ_WATCHDOG=y
CONFIG_TEST_LOCKUP=m
# end of Debug Oops, Lockups and Hangs

#
# Scheduler Debugging
#
CONFIG_SCHED_DEBUG=y
CONFIG_SCHED_INFO=y
CONFIG_SCHEDSTATS=y
# end of Scheduler Debugging

CONFIG_DEBUG_TIMEKEEPING=y

#
# Lock Debugging (spinlocks, mutexes, etc...)
#
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_RWSEMS=y
CONFIG_DEBUG_LOCKING_API_SELFTESTS=y
CONFIG_LOCK_TORTURE_TEST=m
CONFIG_WW_MUTEX_SELFTEST=m
CONFIG_SCF_TORTURE_TEST=m
# end of Lock Debugging (spinlocks, mutexes, etc...)

CONFIG_DEBUG_IRQFLAGS=y
CONFIG_WARN_ALL_UNSEEDED_RANDOM=y
CONFIG_DEBUG_KOBJECT=y
CONFIG_DEBUG_KOBJECT_RELEASE=y
CONFIG_HAVE_DEBUG_BUGVERBOSE=y

#
# Debug kernel data structures
#
CONFIG_DEBUG_LIST=y
CONFIG_DEBUG_PLIST=y
CONFIG_DEBUG_SG=y
CONFIG_DEBUG_NOTIFIERS=y
CONFIG_BUG_ON_DATA_CORRUPTION=y
CONFIG_DEBUG_MAPLE_TREE=y
# end of Debug kernel data structures

CONFIG_DEBUG_CREDENTIALS=y

#
# RCU Debugging
#
CONFIG_TORTURE_TEST=m
CONFIG_RCU_SCALE_TEST=m
CONFIG_RCU_TORTURE_TEST=m
CONFIG_RCU_REF_SCALE_TEST=m
CONFIG_RCU_TRACE=y
CONFIG_RCU_EQS_DEBUG=y
# end of RCU Debugging

CONFIG_DEBUG_WQ_FORCE_RR_CPU=y
CONFIG_TRACE_CLOCK=y
# CONFIG_SAMPLES is not set
# CONFIG_STRICT_DEVMEM is not set

#
# m68k Debugging
#
CONFIG_BOOTPARAM=y
CONFIG_BOOTPARAM_STRING="console=ttyS0,19200"
CONFIG_EARLY_PRINTK=y
# end of m68k Debugging

#
# Kernel Testing and Coverage
#
CONFIG_KUNIT=m
CONFIG_KUNIT_DEBUGFS=y
CONFIG_KUNIT_TEST=m
CONFIG_KUNIT_EXAMPLE_TEST=m
CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEFAULT_ENABLED=y
CONFIG_NOTIFIER_ERROR_INJECTION=m
CONFIG_OF_RECONFIG_NOTIFIER_ERROR_INJECT=m
CONFIG_NETDEV_NOTIFIER_ERROR_INJECT=m
CONFIG_FAULT_INJECTION=y
CONFIG_FAILSLAB=y
CONFIG_FAIL_PAGE_ALLOC=y
CONFIG_FAULT_INJECTION_USERCOPY=y
CONFIG_FAIL_MAKE_REQUEST=y
CONFIG_FAIL_IO_TIMEOUT=y
CONFIG_FAIL_FUTEX=y
CONFIG_FAULT_INJECTION_DEBUG_FS=y
CONFIG_FAIL_MMC_REQUEST=y
CONFIG_FAIL_SUNRPC=y
CONFIG_CC_HAS_SANCOV_TRACE_PC=y
CONFIG_RUNTIME_TESTING_MENU=y
CONFIG_LKDTM=m
CONFIG_CPUMASK_KUNIT_TEST=m
CONFIG_TEST_LIST_SORT=m
CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_SORT=m
CONFIG_TEST_DIV64=m
CONFIG_BACKTRACE_SELF_TEST=m
CONFIG_RBTREE_TEST=m
CONFIG_REED_SOLOMON_TEST=m
CONFIG_INTERVAL_TREE_TEST=m
CONFIG_PERCPU_TEST=m
CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m
CONFIG_TEST_HEXDUMP=m
CONFIG_STRING_SELFTEST=m
CONFIG_TEST_STRING_HELPERS=m
CONFIG_TEST_STRSCPY=m
CONFIG_TEST_KSTRTOX=m
CONFIG_TEST_PRINTF=m
CONFIG_TEST_SCANF=m
CONFIG_TEST_BITMAP=m
CONFIG_TEST_UUID=m
CONFIG_TEST_XARRAY=m
CONFIG_TEST_RHASHTABLE=m
CONFIG_TEST_SIPHASH=m
CONFIG_TEST_IDA=m
CONFIG_TEST_PARMAN=m
CONFIG_TEST_LKM=m
CONFIG_TEST_BITOPS=m
CONFIG_TEST_VMALLOC=m
CONFIG_TEST_USER_COPY=m
CONFIG_TEST_BPF=m
CONFIG_TEST_BLACKHOLE_DEV=m
CONFIG_FIND_BIT_BENCHMARK=m
CONFIG_TEST_FIRMWARE=m
CONFIG_TEST_SYSCTL=m
CONFIG_BITFIELD_KUNIT=m
CONFIG_HASH_KUNIT_TEST=m
CONFIG_RESOURCE_KUNIT_TEST=m
CONFIG_SYSCTL_KUNIT_TEST=m
CONFIG_LIST_KUNIT_TEST=m
CONFIG_LINEAR_RANGES_TEST=m
CONFIG_CMDLINE_KUNIT_TEST=m
CONFIG_BITS_TEST=m
CONFIG_SLUB_KUNIT_TEST=m
CONFIG_RATIONAL_KUNIT_TEST=m
CONFIG_MEMCPY_KUNIT_TEST=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
CONFIG_OVERFLOW_KUNIT_TEST=m
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_TEST_UDELAY=m
CONFIG_TEST_STATIC_KEYS=m
CONFIG_TEST_DYNAMIC_DEBUG=m
CONFIG_TEST_KMOD=m
CONFIG_TEST_MEMCAT_P=m
CONFIG_TEST_OBJAGG=m
CONFIG_TEST_MEMINIT=m
CONFIG_TEST_FREE_PAGES=m
CONFIG_ARCH_USE_MEMTEST=y
CONFIG_MEMTEST=y
# end of Kernel Testing and Coverage

#
# Rust hacking
#
# end of Rust hacking

CONFIG_WARN_MISSING_DOCUMENTS=y
CONFIG_WARN_ABI_ERRORS=y
# end of Kernel hacking

From lorenzo at kernel.org  Wed Dec 21 10:02:05 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Wed, 21 Dec 2022 19:02:05 +0100
Subject: [PATCH v2] wifi: mt76: fix potential memory leakage
In-Reply-To: <B2689D6F-E04E-4E9B-9244-4E5069DC464D@nbd.name>
References: <3940cc5ccb4b17d51b5176e722daef0d1af66d6a.camel@mediatek.com>
 <B2689D6F-E04E-4E9B-9244-4E5069DC464D@nbd.name>
Message-ID: <Y6NKHY7euhifm0kI@lore-desk>

On Dec 21, Felix Fietkau wrote:
> Hi Sujuan,
> 
> > Yes, it is so expensive, but if no memcopy, it will casue memory
> > fragmentation (we hit this issue in internal SQC).
> > 
> > as we know, wed needs to exchange rx pkt(belongs to wed rx buffer
> > manager) with wifi driver(dma rx data queue) by exchanging wfdma dmad
> > to ensure the free wed rx buffer.
> > 
> > it is possiable that a large number of buffer has been exchanged to wed
> > and can not come back to wlan driver. So, the memory from the same 32K
> > page cache is unable to be released, and it will be failed at
> > page_frag_alloc in mt76_dma_rx_fill.
> > 
> > Any ideas but memcopy?
> A simple solution would be to simply allocate single pages, or half-page fragments.
> 
> - Felix
> 

A simple approach would be allocating a single page for each rx buffer.

@Sujuan: can you please double check if it is ok from performance and memory
	 fragmentation point of view? If not I guess we can try to optimize it
	 and allocate multiple buffers in the same page tweeking page refcount.

(this patch must be applied on top of Felix's dma fix).

Regards,
Lorenzo

diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
index 28a7fe064313..1d9e580977fc 100644
--- a/drivers/net/wireless/mediatek/mt76/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/dma.c
@@ -580,6 +580,20 @@ mt76_dma_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
 	return ret;
 }
 
+static void *
+mt76_dma_get_rx_buf(struct mt76_queue *q)
+{
+	if ((q->flags & MT_QFLAG_WED) &&
+	    FIELD_GET(MT_QFLAG_WED_TYPE, q->flags) == MT76_WED_Q_RX) {
+		/* WED RX queue */
+		struct page *page = dev_alloc_page();
+
+		return page ? page_address(page) : NULL;
+	}
+
+	return page_frag_alloc(&q->rx_page, q->buf_size, GFP_ATOMIC);
+}
+
 static int
 mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
 {
@@ -596,7 +610,7 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
 		struct mt76_queue_buf qbuf;
 		void *buf = NULL;
 
-		buf = page_frag_alloc(&q->rx_page, q->buf_size, GFP_ATOMIC);
+		buf = mt76_dma_get_rx_buf(q);
 		if (!buf)
 			break;
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
index 1a2e4df8d1b5..2924e71e4fbe 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
@@ -594,13 +594,9 @@ static void mt7915_mmio_wed_offload_disable(struct mtk_wed_device *wed)
 static void mt7915_mmio_wed_release_rx_buf(struct mtk_wed_device *wed)
 {
 	struct mt7915_dev *dev;
-	u32 length;
 	int i;
 
 	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
-	length = SKB_DATA_ALIGN(NET_SKB_PAD + wed->wlan.rx_size +
-				sizeof(struct skb_shared_info));
-
 	for (i = 0; i < dev->mt76.rx_token_size; i++) {
 		struct mt76_txwi_cache *t;
 
@@ -610,7 +606,7 @@ static void mt7915_mmio_wed_release_rx_buf(struct mtk_wed_device *wed)
 
 		dma_unmap_single(dev->mt76.dma_dev, t->dma_addr,
 				 wed->wlan.rx_size, DMA_FROM_DEVICE);
-		__free_pages(virt_to_page(t->ptr), get_order(length));
+		free_page(virt_to_page(t->ptr));
 		t->ptr = NULL;
 
 		mt76_put_rxwi(&dev->mt76, t);
@@ -621,13 +617,9 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct mtk_wed_device *wed, int size)
 {
 	struct mtk_rxbm_desc *desc = wed->rx_buf_ring.desc;
 	struct mt7915_dev *dev;
-	u32 length;
 	int i;
 
 	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
-	length = SKB_DATA_ALIGN(NET_SKB_PAD + wed->wlan.rx_size +
-				sizeof(struct skb_shared_info));
-
 	for (i = 0; i < size; i++) {
 		struct mt76_txwi_cache *t = mt76_get_rxwi(&dev->mt76);
 		dma_addr_t phy_addr;
@@ -635,7 +627,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct mtk_wed_device *wed, int size)
 		int token;
 		void *ptr;
 
-		page = __dev_alloc_pages(GFP_KERNEL, get_order(length));
+		page = __dev_alloc_page(GFP_KERNEL);
 		if (!page)
 			goto unmap;
 
@@ -644,7 +636,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct mtk_wed_device *wed, int size)
 					  wed->wlan.rx_size,
 					  DMA_TO_DEVICE);
 		if (unlikely(dma_mapping_error(dev->mt76.dev, phy_addr))) {
-			__free_pages(page, get_order(length));
+			free_page(page);
 			goto unmap;
 		}
 
@@ -653,7 +645,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct mtk_wed_device *wed, int size)
 		if (token < 0) {
 			dma_unmap_single(dev->mt76.dma_dev, phy_addr,
 					 wed->wlan.rx_size, DMA_TO_DEVICE);
-			__free_pages(page, get_order(length));
+			free_page(page);
 			goto unmap;
 		}
 
-- 
2.38.1

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221221/8216de81/attachment.sig>

From lkp at intel.com  Wed Dec 21 11:01:42 2022
From: lkp at intel.com (kernel test robot)
Date: Thu, 22 Dec 2022 03:01:42 +0800
Subject: [PATCH v1] ufs: core: wlun resume SSU(Acitve) fail recovery
In-Reply-To: <20221221123537.30148-1-peter.wang@mediatek.com>
References: <20221221123537.30148-1-peter.wang@mediatek.com>
Message-ID: <202212220252.p0wzo8b8-lkp@intel.com>

Hi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on jejb-scsi/for-next]
[also build test ERROR on mkp-scsi/for-next linus/master v6.1 next-20221220]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/peter-wang-mediatek-com/ufs-core-wlun-resume-SSU-Acitve-fail-recovery/20221221-203634
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
patch link:    https://lore.kernel.org/r/20221221123537.30148-1-peter.wang%40mediatek.com
patch subject: [PATCH v1] ufs: core: wlun resume SSU(Acitve) fail recovery
config: i386-randconfig-a014-20221219
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/97f75d9637531953204ec88d6550a6b2f04f2a89
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review peter-wang-mediatek-com/ufs-core-wlun-resume-SSU-Acitve-fail-recovery/20221221-203634
        git checkout 97f75d9637531953204ec88d6550a6b2f04f2a89
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/ufs/core/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp at intel.com>

All errors (new ones prefixed by >>):

>> drivers/ufs/core/ufshcd.c:7376:14: error: no member named 'sdev_ufs_device' in 'struct ufs_hba'
           dev = &hba->sdev_ufs_device->sdev_gendev;
                  ~~~  ^
   drivers/ufs/core/ufshcd.c:9630:44: warning: shift count >= width of type [-Wshift-count-overflow]
                   if (!dma_set_mask_and_coherent(hba->dev, DMA_BIT_MASK(64)))
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
   include/linux/dma-mapping.h:76:54: note: expanded from macro 'DMA_BIT_MASK'
   #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
                                                        ^
   include/linux/compiler.h:56:47: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:58:52: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
                                                      ^~~~
   drivers/ufs/core/ufshcd.c:9630:44: warning: shift count >= width of type [-Wshift-count-overflow]
                   if (!dma_set_mask_and_coherent(hba->dev, DMA_BIT_MASK(64)))
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
   include/linux/dma-mapping.h:76:54: note: expanded from macro 'DMA_BIT_MASK'
   #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
                                                        ^
   include/linux/compiler.h:56:47: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:58:61: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
                                                               ^~~~
   drivers/ufs/core/ufshcd.c:9630:44: warning: shift count >= width of type [-Wshift-count-overflow]
                   if (!dma_set_mask_and_coherent(hba->dev, DMA_BIT_MASK(64)))
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
   include/linux/dma-mapping.h:76:54: note: expanded from macro 'DMA_BIT_MASK'
   #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
                                                        ^
   include/linux/compiler.h:56:47: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:58:86: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
                                                                       ~~~~~~~~~~~~~~~~~^~~~~
   include/linux/compiler.h:69:3: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \
            ^~~~
   3 warnings and 1 error generated.


vim +7376 drivers/ufs/core/ufshcd.c

  7354	
  7355	/**
  7356	 * ufshcd_eh_host_reset_handler - host reset handler registered to scsi layer
  7357	 * @cmd: SCSI command pointer
  7358	 *
  7359	 * Returns SUCCESS/FAILED
  7360	 */
  7361	static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd)
  7362	{
  7363		int err = SUCCESS;
  7364		unsigned long flags;
  7365		struct ufs_hba *hba;
  7366		struct device *dev;
  7367	
  7368		hba = shost_priv(cmd->device->host);
  7369	
  7370		/*
  7371		 * If __ufshcd_wl_suspend get fail and runtime_status = RPM_RESUMING,
  7372		 * do link recovery only. Because schedule eh work will get dead lock
  7373		 * in ufshcd_rpm_get_sync to wait wlun resume, but wlun resume get
  7374		 * error and wait eh work finish.
  7375		 */
> 7376		dev = &hba->sdev_ufs_device->sdev_gendev;
  7377		if (dev->power.runtime_status == RPM_RESUMING) {
  7378			err = ufshcd_link_recovery(hba);
  7379			if (err) {
  7380				dev_err(hba->dev, "WL Device PM: status:%d, err:%d\n",
  7381					dev->power.runtime_status,
  7382					dev->power.runtime_error);
  7383			}
  7384			return err;
  7385		}
  7386	
  7387		spin_lock_irqsave(hba->host->host_lock, flags);
  7388		hba->force_reset = true;
  7389		ufshcd_schedule_eh_work(hba);
  7390		dev_err(hba->dev, "%s: reset in progress - 1\n", __func__);
  7391		spin_unlock_irqrestore(hba->host->host_lock, flags);
  7392	
  7393		flush_work(&hba->eh_work);
  7394	
  7395		spin_lock_irqsave(hba->host->host_lock, flags);
  7396		if (hba->ufshcd_state == UFSHCD_STATE_ERROR)
  7397			err = FAILED;
  7398		spin_unlock_irqrestore(hba->host->host_lock, flags);
  7399	
  7400		return err;
  7401	}
  7402	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
-------------- next part --------------
#
# Automatically generated file; DO NOT EDIT.
# Linux/i386 6.1.0-rc1 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="clang version 14.0.6 (git://gitmirror/llvm_project f28c006a5895fc0e329fe15fead81e37457cb1d1)"
CONFIG_GCC_VERSION=0
CONFIG_CC_IS_CLANG=y
CONFIG_CLANG_VERSION=140006
CONFIG_AS_IS_LLVM=y
CONFIG_AS_VERSION=140006
CONFIG_LD_VERSION=0
CONFIG_LD_IS_LLD=y
CONFIG_LLD_VERSION=140006
CONFIG_RUST_IS_AVAILABLE=y
CONFIG_CC_CAN_LINK=y
CONFIG_CC_CAN_LINK_STATIC=y
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
CONFIG_TOOLS_SUPPORT_RELR=y
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
CONFIG_PAHOLE_VERSION=123
CONFIG_CONSTRUCTORS=y
CONFIG_IRQ_WORK=y
CONFIG_BUILDTIME_TABLE_SORT=y
CONFIG_THREAD_INFO_IN_TASK=y

#
# General setup
#
CONFIG_INIT_ENV_ARG_LIMIT=32
# CONFIG_COMPILE_TEST is not set
# CONFIG_WERROR is not set
# CONFIG_UAPI_HEADER_TEST is not set
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_BUILD_SALT=""
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
CONFIG_HAVE_KERNEL_XZ=y
CONFIG_HAVE_KERNEL_LZO=y
CONFIG_HAVE_KERNEL_LZ4=y
CONFIG_HAVE_KERNEL_ZSTD=y
# CONFIG_KERNEL_GZIP is not set
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
CONFIG_KERNEL_XZ=y
# CONFIG_KERNEL_LZO is not set
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_ZSTD is not set
CONFIG_DEFAULT_INIT=""
CONFIG_DEFAULT_HOSTNAME="(none)"
# CONFIG_SYSVIPC is not set
CONFIG_POSIX_MQUEUE=y
CONFIG_POSIX_MQUEUE_SYSCTL=y
CONFIG_WATCH_QUEUE=y
# CONFIG_CROSS_MEMORY_ATTACH is not set
# CONFIG_USELIB is not set
CONFIG_AUDIT=y
CONFIG_HAVE_ARCH_AUDITSYSCALL=y
CONFIG_AUDITSYSCALL=y

#
# IRQ subsystem
#
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
CONFIG_GENERIC_PENDING_IRQ=y
CONFIG_GENERIC_IRQ_MIGRATION=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_CHIP=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_SIM=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_GENERIC_MSI_IRQ=y
CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y
CONFIG_GENERIC_IRQ_RESERVATION_MODE=y
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
# CONFIG_GENERIC_IRQ_DEBUGFS is not set
# end of IRQ subsystem

CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_ARCH_CLOCKSOURCE_INIT=y
CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y
CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
CONFIG_CONTEXT_TRACKING=y
CONFIG_CONTEXT_TRACKING_IDLE=y

#
# Timers subsystem
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
CONFIG_NO_HZ_IDLE=y
# CONFIG_NO_HZ is not set
CONFIG_HIGH_RES_TIMERS=y
CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=100
# end of Timers subsystem

CONFIG_BPF=y
CONFIG_HAVE_EBPF_JIT=y

#
# BPF subsystem
#
# CONFIG_BPF_SYSCALL is not set
# CONFIG_BPF_JIT is not set
# end of BPF subsystem

CONFIG_PREEMPT_VOLUNTARY_BUILD=y
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set
CONFIG_PREEMPT_COUNT=y
# CONFIG_PREEMPT_DYNAMIC is not set
CONFIG_SCHED_CORE=y

#
# CPU/Task time and stats accounting
#
CONFIG_TICK_CPU_ACCOUNTING=y
# CONFIG_IRQ_TIME_ACCOUNTING is not set
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_TASKSTATS is not set
CONFIG_PSI=y
# CONFIG_PSI_DEFAULT_DISABLED is not set
# end of CPU/Task time and stats accounting

CONFIG_CPU_ISOLATION=y

#
# RCU Subsystem
#
CONFIG_TREE_RCU=y
CONFIG_RCU_EXPERT=y
CONFIG_SRCU=y
CONFIG_TREE_SRCU=y
CONFIG_TASKS_RCU_GENERIC=y
CONFIG_FORCE_TASKS_RCU=y
CONFIG_TASKS_RCU=y
CONFIG_FORCE_TASKS_RUDE_RCU=y
CONFIG_TASKS_RUDE_RCU=y
CONFIG_FORCE_TASKS_TRACE_RCU=y
CONFIG_TASKS_TRACE_RCU=y
CONFIG_RCU_STALL_COMMON=y
CONFIG_RCU_NEED_SEGCBLIST=y
CONFIG_RCU_FANOUT=32
CONFIG_RCU_FANOUT_LEAF=16
# CONFIG_RCU_NOCB_CPU is not set
# CONFIG_TASKS_TRACE_RCU_READ_MB is not set
# end of RCU Subsystem

CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
# CONFIG_IKHEADERS is not set
CONFIG_LOG_BUF_SHIFT=20
CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
# CONFIG_PRINTK_INDEX is not set
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y

#
# Scheduler features
#
# CONFIG_UCLAMP_TASK is not set
# end of Scheduler features

CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough"
CONFIG_GCC12_NO_ARRAY_BOUNDS=y
CONFIG_CGROUPS=y
# CONFIG_CGROUP_FAVOR_DYNMODS is not set
# CONFIG_MEMCG is not set
# CONFIG_BLK_CGROUP is not set
# CONFIG_CGROUP_SCHED is not set
# CONFIG_CGROUP_PIDS is not set
# CONFIG_CGROUP_RDMA is not set
# CONFIG_CGROUP_FREEZER is not set
# CONFIG_CGROUP_HUGETLB is not set
# CONFIG_CPUSETS is not set
# CONFIG_CGROUP_DEVICE is not set
# CONFIG_CGROUP_CPUACCT is not set
# CONFIG_CGROUP_PERF is not set
# CONFIG_CGROUP_MISC is not set
# CONFIG_CGROUP_DEBUG is not set
# CONFIG_NAMESPACES is not set
# CONFIG_CHECKPOINT_RESTORE is not set
# CONFIG_SCHED_AUTOGROUP is not set
# CONFIG_SYSFS_DEPRECATED is not set
CONFIG_RELAY=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_GZIP=y
# CONFIG_RD_BZIP2 is not set
CONFIG_RD_LZMA=y
# CONFIG_RD_XZ is not set
CONFIG_RD_LZO=y
# CONFIG_RD_LZ4 is not set
CONFIG_RD_ZSTD=y
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOT_CONFIG_EMBED is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_LD_ORPHAN_WARN=y
CONFIG_SYSCTL=y
CONFIG_HAVE_UID16=y
CONFIG_SYSCTL_EXCEPTION_TRACE=y
CONFIG_HAVE_PCSPKR_PLATFORM=y
CONFIG_EXPERT=y
# CONFIG_UID16 is not set
CONFIG_MULTIUSER=y
CONFIG_SGETMASK_SYSCALL=y
# CONFIG_SYSFS_SYSCALL is not set
CONFIG_FHANDLE=y
CONFIG_POSIX_TIMERS=y
CONFIG_PRINTK=y
CONFIG_BUG=y
# CONFIG_PCSPKR_PLATFORM is not set
# CONFIG_BASE_FULL is not set
CONFIG_FUTEX=y
CONFIG_FUTEX_PI=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_IO_URING=y
# CONFIG_ADVISE_SYSCALLS is not set
CONFIG_MEMBARRIER=y
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
CONFIG_KALLSYMS_BASE_RELATIVE=y
CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
CONFIG_KCMP=y
CONFIG_RSEQ=y
# CONFIG_DEBUG_RSEQ is not set
CONFIG_EMBEDDED=y
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_USE_VMALLOC=y
CONFIG_PC104=y

#
# Kernel Performance Events And Counters
#
CONFIG_PERF_EVENTS=y
CONFIG_DEBUG_PERF_USE_VMALLOC=y
# end of Kernel Performance Events And Counters

# CONFIG_PROFILING is not set
CONFIG_TRACEPOINTS=y
# end of General setup

CONFIG_X86_32=y
CONFIG_FORCE_DYNAMIC_FTRACE=y
CONFIG_X86=y
CONFIG_INSTRUCTION_DECODER=y
CONFIG_OUTPUT_FORMAT="elf32-i386"
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_MMU=y
CONFIG_ARCH_MMAP_RND_BITS_MIN=8
CONFIG_ARCH_MMAP_RND_BITS_MAX=16
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_BUG=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_HAS_CPU_RELAX=y
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_NR_GPIO=512
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_X86_32_SMP=y
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_PGTABLE_LEVELS=2

#
# Processor type and features
#
CONFIG_SMP=y
CONFIG_X86_FEATURE_NAMES=y
CONFIG_X86_MPPARSE=y
CONFIG_GOLDFISH=y
CONFIG_X86_CPU_RESCTRL=y
CONFIG_X86_BIGSMP=y
CONFIG_X86_EXTENDED_PLATFORM=y
# CONFIG_X86_GOLDFISH is not set
# CONFIG_X86_INTEL_LPSS is not set
# CONFIG_X86_AMD_PLATFORM_DEVICE is not set
CONFIG_IOSF_MBI=y
CONFIG_IOSF_MBI_DEBUG=y
# CONFIG_X86_RDC321X is not set
# CONFIG_X86_32_NON_STANDARD is not set
# CONFIG_X86_32_IRIS is not set
# CONFIG_SCHED_OMIT_FRAME_POINTER is not set
CONFIG_HYPERVISOR_GUEST=y
CONFIG_PARAVIRT=y
# CONFIG_PARAVIRT_DEBUG is not set
# CONFIG_PARAVIRT_SPINLOCKS is not set
CONFIG_X86_HV_CALLBACK_VECTOR=y
CONFIG_KVM_GUEST=y
CONFIG_ARCH_CPUIDLE_HALTPOLL=y
# CONFIG_PVH is not set
# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
CONFIG_PARAVIRT_CLOCK=y
# CONFIG_M486SX is not set
# CONFIG_M486 is not set
# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
# CONFIG_M586MMX is not set
# CONFIG_M686 is not set
# CONFIG_MPENTIUMII is not set
# CONFIG_MPENTIUMIII is not set
# CONFIG_MPENTIUMM is not set
CONFIG_MPENTIUM4=y
# CONFIG_MK6 is not set
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
# CONFIG_MCRUSOE is not set
# CONFIG_MEFFICEON is not set
# CONFIG_MWINCHIPC6 is not set
# CONFIG_MWINCHIP3D is not set
# CONFIG_MELAN is not set
# CONFIG_MGEODEGX1 is not set
# CONFIG_MGEODE_LX is not set
# CONFIG_MCYRIXIII is not set
# CONFIG_MVIAC3_2 is not set
# CONFIG_MVIAC7 is not set
# CONFIG_MCORE2 is not set
# CONFIG_MATOM is not set
CONFIG_X86_GENERIC=y
CONFIG_X86_INTERNODE_CACHE_SHIFT=7
CONFIG_X86_L1_CACHE_SHIFT=7
CONFIG_X86_INTEL_USERCOPY=y
CONFIG_X86_USE_PPRO_CHECKSUM=y
CONFIG_X86_TSC=y
CONFIG_X86_CMPXCHG64=y
CONFIG_X86_CMOV=y
CONFIG_X86_MINIMUM_CPU_FAMILY=6
CONFIG_X86_DEBUGCTLMSR=y
CONFIG_IA32_FEAT_CTL=y
CONFIG_X86_VMX_FEATURE_NAMES=y
CONFIG_PROCESSOR_SELECT=y
CONFIG_CPU_SUP_INTEL=y
# CONFIG_CPU_SUP_CYRIX_32 is not set
# CONFIG_CPU_SUP_AMD is not set
# CONFIG_CPU_SUP_HYGON is not set
# CONFIG_CPU_SUP_CENTAUR is not set
CONFIG_CPU_SUP_TRANSMETA_32=y
CONFIG_CPU_SUP_UMC_32=y
# CONFIG_CPU_SUP_ZHAOXIN is not set
CONFIG_CPU_SUP_VORTEX_32=y
CONFIG_HPET_TIMER=y
CONFIG_HPET_EMULATE_RTC=y
CONFIG_DMI=y
CONFIG_BOOT_VESA_SUPPORT=y
CONFIG_NR_CPUS_RANGE_BEGIN=2
CONFIG_NR_CPUS_RANGE_END=64
CONFIG_NR_CPUS_DEFAULT=32
CONFIG_NR_CPUS=32
CONFIG_SCHED_CLUSTER=y
CONFIG_SCHED_SMT=y
# CONFIG_SCHED_MC is not set
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
# CONFIG_X86_MCE is not set

#
# Performance monitoring
#
CONFIG_PERF_EVENTS_INTEL_UNCORE=y
CONFIG_PERF_EVENTS_INTEL_RAPL=m
# CONFIG_PERF_EVENTS_INTEL_CSTATE is not set
# end of Performance monitoring

# CONFIG_X86_LEGACY_VM86 is not set
CONFIG_X86_16BIT=y
CONFIG_X86_ESPFIX32=y
# CONFIG_X86_IOPL_IOPERM is not set
CONFIG_TOSHIBA=y
CONFIG_X86_REBOOTFIXUPS=y
# CONFIG_MICROCODE is not set
# CONFIG_X86_MSR is not set
CONFIG_X86_CPUID=y
# CONFIG_NOHIGHMEM is not set
CONFIG_HIGHMEM4G=y
# CONFIG_HIGHMEM64G is not set
# CONFIG_VMSPLIT_3G is not set
# CONFIG_VMSPLIT_3G_OPT is not set
# CONFIG_VMSPLIT_2G is not set
# CONFIG_VMSPLIT_2G_OPT is not set
CONFIG_VMSPLIT_1G=y
CONFIG_PAGE_OFFSET=0x40000000
CONFIG_HIGHMEM=y
# CONFIG_X86_CPA_STATISTICS is not set
CONFIG_ARCH_FLATMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_ILLEGAL_POINTER_VALUE=0
# CONFIG_HIGHPTE is not set
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
# CONFIG_MTRR is not set
# CONFIG_X86_UMIP is not set
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_INTEL_TSX_MODE_OFF is not set
CONFIG_X86_INTEL_TSX_MODE_ON=y
# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set
CONFIG_EFI=y
# CONFIG_EFI_STUB is not set
CONFIG_HZ_100=y
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=100
CONFIG_SCHED_HRTICK=y
# CONFIG_KEXEC is not set
# CONFIG_CRASH_DUMP is not set
CONFIG_PHYSICAL_START=0x1000000
# CONFIG_RELOCATABLE is not set
CONFIG_PHYSICAL_ALIGN=0x200000
CONFIG_HOTPLUG_CPU=y
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
# CONFIG_COMPAT_VDSO is not set
# CONFIG_CMDLINE_BOOL is not set
CONFIG_MODIFY_LDT_SYSCALL=y
# CONFIG_STRICT_SIGALTSTACK_SIZE is not set
# end of Processor type and features

CONFIG_SPECULATION_MITIGATIONS=y
CONFIG_RETPOLINE=y
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y

#
# Power management and ACPI options
#
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
CONFIG_SUSPEND_SKIP_SYNC=y
CONFIG_PM_SLEEP=y
CONFIG_PM_SLEEP_SMP=y
CONFIG_PM_AUTOSLEEP=y
# CONFIG_PM_USERSPACE_AUTOSLEEP is not set
CONFIG_PM_WAKELOCKS=y
CONFIG_PM_WAKELOCKS_LIMIT=100
CONFIG_PM_WAKELOCKS_GC=y
CONFIG_PM=y
CONFIG_PM_DEBUG=y
CONFIG_PM_ADVANCED_DEBUG=y
# CONFIG_PM_TEST_SUSPEND is not set
CONFIG_PM_SLEEP_DEBUG=y
CONFIG_PM_TRACE=y
CONFIG_PM_TRACE_RTC=y
CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
# CONFIG_ENERGY_MODEL is not set
CONFIG_ARCH_SUPPORTS_ACPI=y
CONFIG_ACPI=y
CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y
CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y
CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y
CONFIG_ACPI_TABLE_LIB=y
CONFIG_ACPI_DEBUGGER=y
# CONFIG_ACPI_DEBUGGER_USER is not set
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
# CONFIG_ACPI_EC_DEBUGFS is not set
CONFIG_ACPI_AC=m
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=m
CONFIG_ACPI_TINY_POWER_BUTTON=m
CONFIG_ACPI_TINY_POWER_BUTTON_SIGNAL=38
CONFIG_ACPI_VIDEO=y
CONFIG_ACPI_FAN=m
# CONFIG_ACPI_TAD is not set
# CONFIG_ACPI_DOCK is not set
CONFIG_ACPI_CPU_FREQ_PSS=y
CONFIG_ACPI_PROCESSOR_CSTATE=y
CONFIG_ACPI_PROCESSOR_IDLE=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_IPMI=m
CONFIG_ACPI_HOTPLUG_CPU=y
CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_PLATFORM_PROFILE=y
CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y
CONFIG_ACPI_TABLE_UPGRADE=y
CONFIG_ACPI_DEBUG=y
# CONFIG_ACPI_PCI_SLOT is not set
CONFIG_ACPI_CONTAINER=y
CONFIG_ACPI_HOTPLUG_IOAPIC=y
CONFIG_ACPI_SBS=m
CONFIG_ACPI_HED=m
# CONFIG_ACPI_CUSTOM_METHOD is not set
# CONFIG_ACPI_BGRT is not set
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
CONFIG_HAVE_ACPI_APEI=y
CONFIG_HAVE_ACPI_APEI_NMI=y
# CONFIG_ACPI_APEI is not set
# CONFIG_ACPI_DPTF is not set
CONFIG_ACPI_WATCHDOG=y
CONFIG_ACPI_CONFIGFS=m
# CONFIG_ACPI_PCC is not set
# CONFIG_PMIC_OPREGION is not set
CONFIG_X86_PM_TIMER=y
# CONFIG_APM is not set

#
# CPU Frequency scaling
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
CONFIG_CPU_FREQ_GOV_COMMON=y
# CONFIG_CPU_FREQ_STAT is not set
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=m
CONFIG_CPU_FREQ_GOV_ONDEMAND=m
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y

#
# CPU frequency scaling drivers
#
CONFIG_X86_INTEL_PSTATE=y
# CONFIG_X86_PCC_CPUFREQ is not set
# CONFIG_X86_AMD_PSTATE is not set
CONFIG_X86_AMD_PSTATE_UT=m
CONFIG_X86_ACPI_CPUFREQ=y
CONFIG_X86_POWERNOW_K6=m
CONFIG_X86_POWERNOW_K7=y
CONFIG_X86_POWERNOW_K7_ACPI=y
# CONFIG_X86_POWERNOW_K8 is not set
CONFIG_X86_GX_SUSPMOD=y
# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
# CONFIG_X86_SPEEDSTEP_ICH is not set
# CONFIG_X86_SPEEDSTEP_SMI is not set
CONFIG_X86_P4_CLOCKMOD=m
# CONFIG_X86_CPUFREQ_NFORCE2 is not set
CONFIG_X86_LONGRUN=m
CONFIG_X86_LONGHAUL=y
# CONFIG_X86_E_POWERSAVER is not set

#
# shared options
#
CONFIG_X86_SPEEDSTEP_LIB=m
# end of CPU Frequency scaling

#
# CPU Idle
#
CONFIG_CPU_IDLE=y
# CONFIG_CPU_IDLE_GOV_LADDER is not set
# CONFIG_CPU_IDLE_GOV_MENU is not set
CONFIG_CPU_IDLE_GOV_TEO=y
# CONFIG_CPU_IDLE_GOV_HALTPOLL is not set
CONFIG_HALTPOLL_CPUIDLE=y
# end of CPU Idle

CONFIG_INTEL_IDLE=y
# end of Power management and ACPI options

#
# Bus options (PCI etc.)
#
# CONFIG_PCI_GOBIOS is not set
CONFIG_PCI_GOMMCONFIG=y
# CONFIG_PCI_GODIRECT is not set
# CONFIG_PCI_GOOLPC is not set
# CONFIG_PCI_GOANY is not set
CONFIG_PCI_DIRECT=y
CONFIG_PCI_MMCONFIG=y
# CONFIG_PCI_CNB20LE_QUIRK is not set
# CONFIG_ISA_BUS is not set
CONFIG_ISA_DMA_API=y
# CONFIG_ISA is not set
# CONFIG_SCx200 is not set
CONFIG_OLPC=y
CONFIG_OLPC_XO15_SCI=y
# CONFIG_ALIX is not set
# CONFIG_NET5501 is not set
# CONFIG_GEOS is not set
# end of Bus options (PCI etc.)

#
# Binary Emulations
#
CONFIG_COMPAT_32=y
# end of Binary Emulations

CONFIG_HAVE_ATOMIC_IOMAP=y
CONFIG_HAVE_KVM=y
CONFIG_VIRTUALIZATION=y
# CONFIG_KVM is not set
CONFIG_AS_AVX512=y
CONFIG_AS_SHA1_NI=y
CONFIG_AS_SHA256_NI=y
CONFIG_AS_TPAUSE=y

#
# General architecture-dependent options
#
CONFIG_CRASH_CORE=y
CONFIG_HOTPLUG_SMT=y
CONFIG_GENERIC_ENTRY=y
CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
# CONFIG_STATIC_KEYS_SELFTEST is not set
# CONFIG_STATIC_CALL_SELFTEST is not set
CONFIG_OPTPROBES=y
CONFIG_KPROBES_ON_FTRACE=y
CONFIG_UPROBES=y
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_ARCH_USE_BUILTIN_BSWAP=y
CONFIG_KRETPROBES=y
CONFIG_KRETPROBE_ON_RETHOOK=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_OPTPROBES=y
CONFIG_HAVE_KPROBES_ON_FTRACE=y
CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y
CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
CONFIG_HAVE_NMI=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_CONTIGUOUS=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
CONFIG_ARCH_HAS_SET_MEMORY=y
CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
CONFIG_ARCH_WANTS_NO_INSTR=y
CONFIG_ARCH_32BIT_OFF_T=y
CONFIG_HAVE_ASM_MODVERSIONS=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_RSEQ=y
CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y
CONFIG_HAVE_HW_BREAKPOINT=y
CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
CONFIG_HAVE_USER_RETURN_NOTIFIER=y
CONFIG_HAVE_PERF_EVENTS_NMI=y
CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y
CONFIG_HAVE_PERF_REGS=y
CONFIG_HAVE_PERF_USER_STACK_DUMP=y
CONFIG_HAVE_ARCH_JUMP_LABEL=y
CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y
CONFIG_MMU_GATHER_TABLE_FREE=y
CONFIG_MMU_GATHER_RCU_TABLE_FREE=y
CONFIG_MMU_GATHER_MERGE_VMAS=y
CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
CONFIG_HAVE_CMPXCHG_LOCAL=y
CONFIG_HAVE_CMPXCHG_DOUBLE=y
CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
CONFIG_HAVE_ARCH_SECCOMP=y
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_SECCOMP=y
CONFIG_SECCOMP_FILTER=y
# CONFIG_SECCOMP_CACHE_DEBUG is not set
CONFIG_HAVE_ARCH_STACKLEAK=y
CONFIG_ARCH_SUPPORTS_LTO_CLANG=y
CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y
CONFIG_LTO_NONE=y
CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y
CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
CONFIG_HAVE_MOVE_PUD=y
CONFIG_HAVE_MOVE_PMD=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
CONFIG_MODULES_USE_ELF_REL=y
CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y
CONFIG_SOFTIRQ_ON_OWN_STACK=y
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
CONFIG_HAVE_EXIT_THREAD=y
CONFIG_ARCH_MMAP_RND_BITS=8
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
CONFIG_ISA_BUS_API=y
CONFIG_CLONE_BACKWARDS=y
CONFIG_OLD_SIGSUSPEND3=y
CONFIG_OLD_SIGACTION=y
CONFIG_COMPAT_32BIT_TIME=y
CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
CONFIG_RANDOMIZE_KSTACK_OFFSET=y
CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y
CONFIG_ARCH_USE_MEMREMAP_PROT=y
# CONFIG_LOCK_EVENT_COUNTS is not set
CONFIG_ARCH_HAS_MEM_ENCRYPT=y
CONFIG_HAVE_STATIC_CALL=y
CONFIG_HAVE_PREEMPT_DYNAMIC=y
CONFIG_HAVE_PREEMPT_DYNAMIC_CALL=y
CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_ARCH_SPLIT_ARG64=y
CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y
CONFIG_DYNAMIC_SIGFRAME=y

#
# GCOV-based kernel profiling
#
CONFIG_GCOV_KERNEL=y
CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
# CONFIG_GCOV_PROFILE_ALL is not set
# end of GCOV-based kernel profiling

CONFIG_HAVE_GCC_PLUGINS=y
# end of General architecture-dependent options

CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=1
CONFIG_MODULES=y
# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
CONFIG_MODULE_UNLOAD_TAINT_TRACKING=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
# CONFIG_MODULE_SIG is not set
CONFIG_MODULE_COMPRESS_NONE=y
# CONFIG_MODULE_COMPRESS_GZIP is not set
# CONFIG_MODULE_COMPRESS_XZ is not set
# CONFIG_MODULE_COMPRESS_ZSTD is not set
CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=y
CONFIG_MODPROBE_PATH="/sbin/modprobe"
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_MODULES_TREE_LOOKUP=y
CONFIG_BLOCK=y
# CONFIG_BLOCK_LEGACY_AUTOLOAD is not set
CONFIG_BLK_DEV_BSG_COMMON=y
CONFIG_BLK_ICQ=y
CONFIG_BLK_DEV_BSGLIB=y
CONFIG_BLK_DEV_INTEGRITY=y
CONFIG_BLK_DEV_INTEGRITY_T10=y
# CONFIG_BLK_DEV_ZONED is not set
# CONFIG_BLK_WBT is not set
CONFIG_BLK_DEBUG_FS=y
# CONFIG_BLK_SED_OPAL is not set
# CONFIG_BLK_INLINE_ENCRYPTION is not set

#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
CONFIG_EFI_PARTITION=y
# end of Partition Types

CONFIG_BLK_MQ_PCI=y
CONFIG_BLK_MQ_VIRTIO=y
CONFIG_BLK_PM=y
CONFIG_BLOCK_HOLDER_DEPRECATED=y
CONFIG_BLK_MQ_STACKING=y

#
# IO Schedulers
#
CONFIG_MQ_IOSCHED_DEADLINE=y
# CONFIG_MQ_IOSCHED_KYBER is not set
CONFIG_IOSCHED_BFQ=y
# end of IO Schedulers

CONFIG_PADATA=y
CONFIG_ASN1=y
CONFIG_UNINLINE_SPIN_UNLOCK=y
CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
CONFIG_MUTEX_SPIN_ON_OWNER=y
CONFIG_RWSEM_SPIN_ON_OWNER=y
CONFIG_LOCK_SPIN_ON_OWNER=y
CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y
CONFIG_QUEUED_SPINLOCKS=y
CONFIG_ARCH_USE_QUEUED_RWLOCKS=y
CONFIG_QUEUED_RWLOCKS=y
CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y
CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=y
CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y
CONFIG_FREEZER=y

#
# Executable file formats
#
CONFIG_BINFMT_ELF=y
CONFIG_ELFCORE=y
CONFIG_BINFMT_SCRIPT=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_COREDUMP is not set
# end of Executable file formats

#
# Memory Management options
#
# CONFIG_SWAP is not set

#
# SLAB allocator options
#
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
CONFIG_SLAB_MERGE_DEFAULT=y
# CONFIG_SLAB_FREELIST_RANDOM is not set
CONFIG_SLAB_FREELIST_HARDENED=y
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB_CPU_PARTIAL=y
# end of SLAB allocator options

CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
CONFIG_COMPAT_BRK=y
CONFIG_SELECT_MEMORY_MODEL=y
# CONFIG_FLATMEM_MANUAL is not set
CONFIG_SPARSEMEM_MANUAL=y
CONFIG_SPARSEMEM=y
CONFIG_SPARSEMEM_STATIC=y
CONFIG_HAVE_FAST_GUP=y
CONFIG_MEMORY_ISOLATION=y
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_COMPACTION=y
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
CONFIG_PAGE_REPORTING=y
CONFIG_MIGRATION=y
CONFIG_CONTIG_ALLOC=y
CONFIG_BOUNCE=y
CONFIG_KSM=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
CONFIG_READ_ONLY_THP_FOR_FS=y
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
CONFIG_CMA=y
# CONFIG_CMA_DEBUG is not set
# CONFIG_CMA_DEBUGFS is not set
CONFIG_CMA_SYSFS=y
CONFIG_CMA_AREAS=7
CONFIG_GENERIC_EARLY_IOREMAP=y
CONFIG_PAGE_IDLE_FLAG=y
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y
CONFIG_ARCH_HAS_ZONE_DMA_SET=y
CONFIG_ZONE_DMA=y
CONFIG_GET_FREE_REGION=y
# CONFIG_VM_EVENT_COUNTERS is not set
# CONFIG_PERCPU_STATS is not set
# CONFIG_GUP_TEST is not set
CONFIG_ARCH_HAS_PTE_SPECIAL=y
CONFIG_MAPPING_DIRTY_HELPERS=y
CONFIG_KMAP_LOCAL=y
CONFIG_USERFAULTFD=y

#
# Data Access Monitoring
#
CONFIG_DAMON=y
# CONFIG_DAMON_VADDR is not set
CONFIG_DAMON_PADDR=y
# CONFIG_DAMON_SYSFS is not set
# CONFIG_DAMON_RECLAIM is not set
CONFIG_DAMON_LRU_SORT=y
# end of Data Access Monitoring
# end of Memory Management options

CONFIG_NET=y
CONFIG_NET_INGRESS=y
CONFIG_NET_EGRESS=y

#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_DIAG=m
CONFIG_UNIX=y
CONFIG_UNIX_SCM=y
CONFIG_AF_UNIX_OOB=y
# CONFIG_UNIX_DIAG is not set
# CONFIG_TLS is not set
# CONFIG_XFRM_USER is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE_DEMUX is not set
CONFIG_NET_IP_TUNNEL=y
# CONFIG_SYN_COOKIES is not set
# CONFIG_NET_IPVTI is not set
# CONFIG_NET_FOU is not set
# CONFIG_NET_FOU_IP_TUNNELS is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
CONFIG_INET_TUNNEL=y
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_INET_UDP_DIAG is not set
# CONFIG_INET_RAW_DIAG is not set
# CONFIG_INET_DIAG_DESTROY is not set
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
CONFIG_IPV6=y
# CONFIG_IPV6_ROUTER_PREF is not set
# CONFIG_IPV6_OPTIMISTIC_DAD is not set
# CONFIG_INET6_AH is not set
# CONFIG_INET6_ESP is not set
# CONFIG_INET6_IPCOMP is not set
# CONFIG_IPV6_MIP6 is not set
# CONFIG_IPV6_ILA is not set
# CONFIG_IPV6_VTI is not set
CONFIG_IPV6_SIT=y
# CONFIG_IPV6_SIT_6RD is not set
CONFIG_IPV6_NDISC_NODETYPE=y
# CONFIG_IPV6_TUNNEL is not set
# CONFIG_IPV6_MULTIPLE_TABLES is not set
# CONFIG_IPV6_MROUTE is not set
# CONFIG_IPV6_SEG6_LWTUNNEL is not set
# CONFIG_IPV6_SEG6_HMAC is not set
# CONFIG_IPV6_RPL_LWTUNNEL is not set
# CONFIG_IPV6_IOAM6_LWTUNNEL is not set
# CONFIG_NETLABEL is not set
# CONFIG_MPTCP is not set
CONFIG_NETWORK_SECMARK=y
CONFIG_NET_PTP_CLASSIFY=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_ADVANCED is not set

#
# Core Netfilter Configuration
#
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_EGRESS=y
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NF_CONNTRACK=m
CONFIG_NF_LOG_SYSLOG=m
CONFIG_NF_CONNTRACK_SECMARK=y
# CONFIG_NF_CONNTRACK_PROCFS is not set
# CONFIG_NF_CONNTRACK_LABELS is not set
CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CONNTRACK_IRC=m
# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
CONFIG_NF_CONNTRACK_SIP=m
CONFIG_NF_CT_NETLINK=m
# CONFIG_NETFILTER_NETLINK_GLUE_CT is not set
CONFIG_NF_NAT=m
CONFIG_NF_NAT_FTP=m
CONFIG_NF_NAT_IRC=m
CONFIG_NF_NAT_SIP=m
CONFIG_NF_NAT_MASQUERADE=y
# CONFIG_NF_TABLES is not set
CONFIG_NETFILTER_XTABLES=m

#
# Xtables combined modules
#
CONFIG_NETFILTER_XT_MARK=m

#
# Xtables targets
#
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_NAT=m
# CONFIG_NETFILTER_XT_TARGET_NETMAP is not set
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
# CONFIG_NETFILTER_XT_TARGET_REDIRECT is not set
CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m
CONFIG_NETFILTER_XT_TARGET_SECMARK=m
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m

#
# Xtables matches
#
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
# end of Core Netfilter Configuration

# CONFIG_IP_SET is not set
# CONFIG_IP_VS is not set

#
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=m
# CONFIG_NF_SOCKET_IPV4 is not set
# CONFIG_NF_TPROXY_IPV4 is not set
# CONFIG_NF_DUP_IPV4 is not set
CONFIG_NF_LOG_ARP=m
CONFIG_NF_LOG_IPV4=m
CONFIG_NF_REJECT_IPV4=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_NAT=m
# CONFIG_IP_NF_TARGET_MASQUERADE is not set
CONFIG_IP_NF_MANGLE=m
# CONFIG_IP_NF_RAW is not set
# end of IP: Netfilter Configuration

#
# IPv6: Netfilter Configuration
#
# CONFIG_NF_SOCKET_IPV6 is not set
# CONFIG_NF_TPROXY_IPV6 is not set
# CONFIG_NF_DUP_IPV6 is not set
CONFIG_NF_REJECT_IPV6=m
CONFIG_NF_LOG_IPV6=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_MANGLE=m
# CONFIG_IP6_NF_RAW is not set
# end of IPv6: Netfilter Configuration

CONFIG_NF_DEFRAG_IPV6=m
# CONFIG_NF_CONNTRACK_BRIDGE is not set
# CONFIG_BRIDGE_NF_EBTABLES is not set
# CONFIG_BPFILTER is not set
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
# CONFIG_RDS is not set
# CONFIG_TIPC is not set
CONFIG_ATM=y
# CONFIG_ATM_CLIP is not set
# CONFIG_ATM_LANE is not set
# CONFIG_ATM_BR2684 is not set
# CONFIG_L2TP is not set
CONFIG_STP=y
CONFIG_GARP=y
CONFIG_BRIDGE=y
CONFIG_BRIDGE_IGMP_SNOOPING=y
CONFIG_BRIDGE_VLAN_FILTERING=y
CONFIG_BRIDGE_MRP=y
CONFIG_BRIDGE_CFM=y
# CONFIG_NET_DSA is not set
CONFIG_VLAN_8021Q=y
CONFIG_VLAN_8021Q_GVRP=y
# CONFIG_VLAN_8021Q_MVRP is not set
CONFIG_LLC=y
CONFIG_LLC2=y
# CONFIG_ATALK is not set
CONFIG_X25=y
CONFIG_LAPB=y
CONFIG_PHONET=y
# CONFIG_6LOWPAN is not set
CONFIG_IEEE802154=y
CONFIG_IEEE802154_NL802154_EXPERIMENTAL=y
CONFIG_IEEE802154_SOCKET=y
# CONFIG_MAC802154 is not set
# CONFIG_NET_SCHED is not set
CONFIG_DCB=y
CONFIG_DNS_RESOLVER=m
# CONFIG_BATMAN_ADV is not set
# CONFIG_OPENVSWITCH is not set
CONFIG_VSOCKETS=y
CONFIG_VSOCKETS_DIAG=y
# CONFIG_VSOCKETS_LOOPBACK is not set
CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO_VSOCKETS_COMMON=m
CONFIG_NETLINK_DIAG=y
# CONFIG_MPLS is not set
CONFIG_NET_NSH=y
CONFIG_HSR=m
# CONFIG_NET_SWITCHDEV is not set
# CONFIG_NET_L3_MASTER_DEV is not set
CONFIG_QRTR=y
CONFIG_QRTR_TUN=y
CONFIG_QRTR_MHI=y
# CONFIG_NET_NCSI is not set
CONFIG_PCPU_DEV_REFCNT=y
CONFIG_RPS=y
CONFIG_RFS_ACCEL=y
CONFIG_SOCK_RX_QUEUE_MAPPING=y
CONFIG_XPS=y
# CONFIG_CGROUP_NET_PRIO is not set
# CONFIG_CGROUP_NET_CLASSID is not set
CONFIG_NET_RX_BUSY_POLL=y
CONFIG_BQL=y
CONFIG_NET_FLOW_LIMIT=y

#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NET_DROP_MONITOR is not set
# end of Network testing
# end of Networking options

CONFIG_HAMRADIO=y

#
# Packet Radio protocols
#
# CONFIG_AX25 is not set
CONFIG_CAN=m
CONFIG_CAN_RAW=m
# CONFIG_CAN_BCM is not set
# CONFIG_CAN_GW is not set
# CONFIG_CAN_J1939 is not set
# CONFIG_CAN_ISOTP is not set
CONFIG_BT=y
CONFIG_BT_BREDR=y
CONFIG_BT_RFCOMM=y
# CONFIG_BT_RFCOMM_TTY is not set
# CONFIG_BT_BNEP is not set
CONFIG_BT_HIDP=y
CONFIG_BT_HS=y
CONFIG_BT_LE=y
CONFIG_BT_LEDS=y
# CONFIG_BT_MSFTEXT is not set
# CONFIG_BT_AOSPEXT is not set
# CONFIG_BT_DEBUGFS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BT_FEATURE_DEBUG is not set

#
# Bluetooth device drivers
#
CONFIG_BT_INTEL=y
CONFIG_BT_HCIUART=y
CONFIG_BT_HCIUART_H4=y
# CONFIG_BT_HCIUART_BCSP is not set
# CONFIG_BT_HCIUART_ATH3K is not set
# CONFIG_BT_HCIUART_INTEL is not set
CONFIG_BT_HCIUART_AG6XX=y
CONFIG_BT_HCIVHCI=y
CONFIG_BT_MRVL=m
CONFIG_BT_VIRTIO=y
# end of Bluetooth device drivers

# CONFIG_AF_RXRPC is not set
# CONFIG_AF_KCM is not set
# CONFIG_MCTP is not set
CONFIG_WIRELESS=y
# CONFIG_CFG80211 is not set

#
# CFG80211 needs to be enabled for MAC80211
#
CONFIG_MAC80211_STA_HASH_MAX_SIZE=0
CONFIG_RFKILL=y
CONFIG_RFKILL_LEDS=y
# CONFIG_RFKILL_INPUT is not set
CONFIG_RFKILL_GPIO=y
CONFIG_NET_9P=y
CONFIG_NET_9P_FD=y
CONFIG_NET_9P_VIRTIO=y
# CONFIG_NET_9P_DEBUG is not set
# CONFIG_CAIF is not set
# CONFIG_CEPH_LIB is not set
CONFIG_NFC=m
CONFIG_NFC_DIGITAL=m
CONFIG_NFC_NCI=m
CONFIG_NFC_NCI_UART=m
# CONFIG_NFC_HCI is not set

#
# Near Field Communication (NFC) devices
#
CONFIG_NFC_SIM=m
# CONFIG_NFC_VIRTUAL_NCI is not set
# CONFIG_NFC_FDP is not set
CONFIG_NFC_PN533=m
CONFIG_NFC_PN533_I2C=m
# CONFIG_NFC_MRVL_UART is not set
CONFIG_NFC_ST_NCI=m
CONFIG_NFC_ST_NCI_I2C=m
# CONFIG_NFC_NXP_NCI is not set
CONFIG_NFC_S3FWRN5=m
CONFIG_NFC_S3FWRN5_I2C=m
# end of Near Field Communication (NFC) devices

CONFIG_PSAMPLE=y
# CONFIG_NET_IFE is not set
# CONFIG_LWTUNNEL is not set
CONFIG_DST_CACHE=y
CONFIG_GRO_CELLS=y
CONFIG_FAILOVER=y
CONFIG_ETHTOOL_NETLINK=y

#
# Device Drivers
#
CONFIG_HAVE_EISA=y
CONFIG_EISA=y
# CONFIG_EISA_VLB_PRIMING is not set
# CONFIG_EISA_PCI_EISA is not set
CONFIG_EISA_VIRTUAL_ROOT=y
# CONFIG_EISA_NAMES is not set
CONFIG_HAVE_PCI=y
CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
CONFIG_PCIEPORTBUS=y
# CONFIG_PCIEAER is not set
CONFIG_PCIEASPM=y
# CONFIG_PCIEASPM_DEFAULT is not set
# CONFIG_PCIEASPM_POWERSAVE is not set
# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
CONFIG_PCIEASPM_PERFORMANCE=y
CONFIG_PCIE_PME=y
CONFIG_PCIE_PTM=y
CONFIG_PCI_MSI=y
CONFIG_PCI_MSI_IRQ_DOMAIN=y
CONFIG_PCI_QUIRKS=y
# CONFIG_PCI_DEBUG is not set
# CONFIG_PCI_REALLOC_ENABLE_AUTO is not set
CONFIG_PCI_STUB=m
CONFIG_PCI_PF_STUB=y
CONFIG_PCI_ATS=y
CONFIG_PCI_DOE=y
CONFIG_PCI_LOCKLESS_CONFIG=y
CONFIG_PCI_IOV=y
# CONFIG_PCI_PRI is not set
# CONFIG_PCI_PASID is not set
CONFIG_PCI_LABEL=y
# CONFIG_PCIE_BUS_TUNE_OFF is not set
# CONFIG_PCIE_BUS_DEFAULT is not set
CONFIG_PCIE_BUS_SAFE=y
# CONFIG_PCIE_BUS_PERFORMANCE is not set
# CONFIG_PCIE_BUS_PEER2PEER is not set
CONFIG_VGA_ARB=y
CONFIG_VGA_ARB_MAX_GPUS=16
# CONFIG_HOTPLUG_PCI is not set

#
# PCI controller drivers
#
CONFIG_PCI_FTPCI100=y
# CONFIG_PCI_HOST_GENERIC is not set
# CONFIG_PCIE_XILINX is not set
# CONFIG_PCIE_MICROCHIP_HOST is not set

#
# DesignWare PCI Core Support
#
CONFIG_PCIE_DW=y
CONFIG_PCIE_DW_HOST=y
CONFIG_PCIE_DW_EP=y
CONFIG_PCIE_DW_PLAT=y
CONFIG_PCIE_DW_PLAT_HOST=y
CONFIG_PCIE_DW_PLAT_EP=y
CONFIG_PCIE_INTEL_GW=y
CONFIG_PCI_MESON=m
# end of DesignWare PCI Core Support

#
# Mobiveil PCIe Core Support
#
# end of Mobiveil PCIe Core Support

#
# Cadence PCIe controllers support
#
CONFIG_PCIE_CADENCE=y
CONFIG_PCIE_CADENCE_HOST=y
CONFIG_PCIE_CADENCE_PLAT=y
CONFIG_PCIE_CADENCE_PLAT_HOST=y
# CONFIG_PCIE_CADENCE_PLAT_EP is not set
CONFIG_PCI_J721E=y
CONFIG_PCI_J721E_HOST=y
# CONFIG_PCI_J721E_EP is not set
# end of Cadence PCIe controllers support
# end of PCI controller drivers

#
# PCI Endpoint
#
CONFIG_PCI_ENDPOINT=y
CONFIG_PCI_ENDPOINT_CONFIGFS=y
# CONFIG_PCI_EPF_TEST is not set
CONFIG_PCI_EPF_NTB=y
# CONFIG_PCI_EPF_VNTB is not set
# end of PCI Endpoint

#
# PCI switch controller drivers
#
# CONFIG_PCI_SW_SWITCHTEC is not set
# end of PCI switch controller drivers

CONFIG_CXL_BUS=y
# CONFIG_CXL_PCI is not set
CONFIG_CXL_ACPI=m
CONFIG_CXL_PORT=y
CONFIG_CXL_REGION=y
CONFIG_PCCARD=y
# CONFIG_PCMCIA is not set
# CONFIG_CARDBUS is not set

#
# PC-card bridges
#
CONFIG_YENTA=y
CONFIG_YENTA_O2=y
CONFIG_YENTA_RICOH=y
CONFIG_YENTA_TI=y
# CONFIG_YENTA_TOSHIBA is not set
CONFIG_RAPIDIO=m
# CONFIG_RAPIDIO_TSI721 is not set
CONFIG_RAPIDIO_DISC_TIMEOUT=30
CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS=y
# CONFIG_RAPIDIO_DMA_ENGINE is not set
CONFIG_RAPIDIO_DEBUG=y
# CONFIG_RAPIDIO_ENUM_BASIC is not set
# CONFIG_RAPIDIO_CHMAN is not set
# CONFIG_RAPIDIO_MPORT_CDEV is not set

#
# RapidIO Switch drivers
#
CONFIG_RAPIDIO_CPS_XX=m
# CONFIG_RAPIDIO_CPS_GEN2 is not set
CONFIG_RAPIDIO_RXS_GEN3=m
# end of RapidIO Switch drivers

#
# Generic Driver Options
#
CONFIG_AUXILIARY_BUS=y
CONFIG_UEVENT_HELPER=y
CONFIG_UEVENT_HELPER_PATH=""
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_STANDALONE=y
# CONFIG_PREVENT_FIRMWARE_BUILD is not set

#
# Firmware loader
#
CONFIG_FW_LOADER=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_EXTRA_FIRMWARE=""
CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
# CONFIG_FW_LOADER_COMPRESS is not set
CONFIG_FW_CACHE=y
CONFIG_FW_UPLOAD=y
# end of Firmware loader

CONFIG_WANT_DEV_COREDUMP=y
CONFIG_ALLOW_DEV_COREDUMP=y
CONFIG_DEV_COREDUMP=y
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set
# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set
CONFIG_GENERIC_CPU_AUTOPROBE=y
CONFIG_GENERIC_CPU_VULNERABILITIES=y
CONFIG_REGMAP=y
CONFIG_REGMAP_I2C=y
CONFIG_REGMAP_SPMI=m
CONFIG_REGMAP_W1=y
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
CONFIG_REGMAP_I3C=m
CONFIG_DMA_SHARED_BUFFER=y
# CONFIG_DMA_FENCE_TRACE is not set
# end of Generic Driver Options

#
# Bus devices
#
CONFIG_MHI_BUS=y
# CONFIG_MHI_BUS_DEBUG is not set
CONFIG_MHI_BUS_PCI_GENERIC=m
CONFIG_MHI_BUS_EP=m
# end of Bus devices

CONFIG_CONNECTOR=m

#
# Firmware Drivers
#

#
# ARM System Control and Management Interface Protocol
#
# end of ARM System Control and Management Interface Protocol

# CONFIG_EDD is not set
CONFIG_FIRMWARE_MEMMAP=y
CONFIG_DMIID=y
CONFIG_DMI_SYSFS=y
CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
CONFIG_FW_CFG_SYSFS=y
CONFIG_FW_CFG_SYSFS_CMDLINE=y
CONFIG_SYSFB=y
CONFIG_SYSFB_SIMPLEFB=y
CONFIG_GOOGLE_FIRMWARE=y
# CONFIG_GOOGLE_SMI is not set
CONFIG_GOOGLE_COREBOOT_TABLE=m
CONFIG_GOOGLE_MEMCONSOLE=m
CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY=m
# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
# CONFIG_GOOGLE_VPD is not set

#
# EFI (Extensible Firmware Interface) Support
#
CONFIG_EFI_ESRT=y
# CONFIG_EFI_FAKE_MEMMAP is not set
CONFIG_EFI_RUNTIME_WRAPPERS=y
CONFIG_EFI_BOOTLOADER_CONTROL=m
CONFIG_EFI_CAPSULE_LOADER=y
# CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH is not set
# CONFIG_EFI_TEST is not set
CONFIG_EFI_RCI2_TABLE=y
CONFIG_EFI_DISABLE_PCI_DMA=y
CONFIG_EFI_EARLYCON=y
# CONFIG_EFI_CUSTOM_SSDT_OVERLAYS is not set
# CONFIG_EFI_DISABLE_RUNTIME is not set
# CONFIG_EFI_COCO_SECRET is not set
CONFIG_EFI_EMBEDDED_FIRMWARE=y
# end of EFI (Extensible Firmware Interface) Support

#
# Tegra firmware driver
#
# end of Tegra firmware driver
# end of Firmware Drivers

CONFIG_GNSS=m
# CONFIG_MTD is not set
CONFIG_DTC=y
CONFIG_OF=y
# CONFIG_OF_UNITTEST is not set
CONFIG_OF_FLATTREE=y
CONFIG_OF_PROMTREE=y
CONFIG_OF_KOBJ=y
CONFIG_OF_DYNAMIC=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_IRQ=y
CONFIG_OF_RESOLVE=y
CONFIG_OF_OVERLAY=y
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
CONFIG_PARPORT=m
# CONFIG_PARPORT_PC is not set
# CONFIG_PARPORT_AX88796 is not set
CONFIG_PARPORT_1284=y
CONFIG_PNP=y
# CONFIG_PNP_DEBUG_MESSAGES is not set

#
# Protocols
#
CONFIG_PNPACPI=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_NULL_BLK=m
CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_FD_RAWCMD=y
CONFIG_CDROM=y
CONFIG_BLK_DEV_PCIESSD_MTIP32XX=y
# CONFIG_ZRAM is not set
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
# CONFIG_BLK_DEV_DRBD is not set
CONFIG_BLK_DEV_NBD=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
# CONFIG_VIRTIO_BLK is not set
# CONFIG_BLK_DEV_RBD is not set
CONFIG_BLK_DEV_UBLK=y

#
# NVME Support
#
CONFIG_NVME_COMMON=y
CONFIG_NVME_CORE=y
CONFIG_BLK_DEV_NVME=m
CONFIG_NVME_MULTIPATH=y
# CONFIG_NVME_VERBOSE_ERRORS is not set
CONFIG_NVME_FABRICS=y
CONFIG_NVME_FC=y
# CONFIG_NVME_TCP is not set
CONFIG_NVME_AUTH=y
CONFIG_NVME_TARGET=m
# CONFIG_NVME_TARGET_PASSTHRU is not set
CONFIG_NVME_TARGET_LOOP=m
# CONFIG_NVME_TARGET_FC is not set
# CONFIG_NVME_TARGET_TCP is not set
CONFIG_NVME_TARGET_AUTH=y
# end of NVME Support

#
# Misc devices
#
CONFIG_SENSORS_LIS3LV02D=y
CONFIG_AD525X_DPOT=y
CONFIG_AD525X_DPOT_I2C=y
CONFIG_DUMMY_IRQ=m
# CONFIG_IBM_ASM is not set
CONFIG_PHANTOM=y
CONFIG_TIFM_CORE=y
# CONFIG_TIFM_7XX1 is not set
CONFIG_ICS932S401=y
CONFIG_ENCLOSURE_SERVICES=y
CONFIG_HI6421V600_IRQ=m
CONFIG_HP_ILO=y
CONFIG_APDS9802ALS=m
CONFIG_ISL29003=m
CONFIG_ISL29020=y
CONFIG_SENSORS_TSL2550=m
CONFIG_SENSORS_BH1770=y
# CONFIG_SENSORS_APDS990X is not set
CONFIG_HMC6352=y
CONFIG_DS1682=y
# CONFIG_VMWARE_BALLOON is not set
CONFIG_PCH_PHUB=m
CONFIG_SRAM=y
CONFIG_DW_XDATA_PCIE=y
# CONFIG_PCI_ENDPOINT_TEST is not set
CONFIG_XILINX_SDFEC=y
CONFIG_VCPU_STALL_DETECTOR=y
CONFIG_C2PORT=m
CONFIG_C2PORT_DURAMAR_2150=m

#
# EEPROM support
#
CONFIG_EEPROM_AT24=y
CONFIG_EEPROM_LEGACY=y
CONFIG_EEPROM_MAX6875=m
# CONFIG_EEPROM_93CX6 is not set
CONFIG_EEPROM_IDT_89HPESX=m
CONFIG_EEPROM_EE1004=y
# end of EEPROM support

CONFIG_CB710_CORE=y
# CONFIG_CB710_DEBUG is not set
CONFIG_CB710_DEBUG_ASSUMPTIONS=y

#
# Texas Instruments shared transport line discipline
#
CONFIG_TI_ST=m
# end of Texas Instruments shared transport line discipline

CONFIG_SENSORS_LIS3_I2C=m
CONFIG_ALTERA_STAPL=m
CONFIG_INTEL_MEI=y
CONFIG_INTEL_MEI_ME=m
# CONFIG_INTEL_MEI_TXE is not set
CONFIG_VMWARE_VMCI=y
CONFIG_ECHO=m
# CONFIG_BCM_VK is not set
CONFIG_MISC_ALCOR_PCI=m
# CONFIG_MISC_RTSX_PCI is not set
# CONFIG_HABANA_AI is not set
# CONFIG_UACCE is not set
CONFIG_PVPANIC=y
# CONFIG_PVPANIC_MMIO is not set
CONFIG_PVPANIC_PCI=y
CONFIG_GP_PCI1XXXX=m
# end of Misc devices

#
# SCSI device support
#
CONFIG_SCSI_MOD=y
CONFIG_RAID_ATTRS=y
CONFIG_SCSI_COMMON=y
CONFIG_SCSI=y
CONFIG_SCSI_DMA=y
CONFIG_SCSI_NETLINK=y
# CONFIG_SCSI_PROC_FS is not set

#
# SCSI support type (disk, tape, CD-ROM)
#
# CONFIG_BLK_DEV_SD is not set
# CONFIG_CHR_DEV_ST is not set
CONFIG_BLK_DEV_SR=y
CONFIG_CHR_DEV_SG=m
# CONFIG_BLK_DEV_BSG is not set
# CONFIG_CHR_DEV_SCH is not set
# CONFIG_SCSI_ENCLOSURE is not set
CONFIG_SCSI_CONSTANTS=y
# CONFIG_SCSI_LOGGING is not set
CONFIG_SCSI_SCAN_ASYNC=y

#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=m
CONFIG_SCSI_ISCSI_ATTRS=y
CONFIG_SCSI_SAS_ATTRS=m
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
# end of SCSI Transports

# CONFIG_SCSI_LOWLEVEL is not set
# CONFIG_SCSI_DH is not set
# end of SCSI device support

CONFIG_ATA=y
CONFIG_SATA_HOST=y
CONFIG_PATA_TIMINGS=y
CONFIG_ATA_VERBOSE_ERROR=y
# CONFIG_ATA_FORCE is not set
# CONFIG_ATA_ACPI is not set
CONFIG_SATA_PMP=y

#
# Controllers with non-SFF native interface
#
CONFIG_SATA_AHCI=m
CONFIG_SATA_MOBILE_LPM_POLICY=0
CONFIG_SATA_AHCI_PLATFORM=m
CONFIG_AHCI_DWC=m
CONFIG_AHCI_CEVA=y
CONFIG_AHCI_QORIQ=y
# CONFIG_SATA_INIC162X is not set
CONFIG_SATA_ACARD_AHCI=m
CONFIG_SATA_SIL24=y
CONFIG_ATA_SFF=y

#
# SFF controllers with custom DMA interface
#
CONFIG_PDC_ADMA=m
# CONFIG_SATA_QSTOR is not set
CONFIG_SATA_SX4=m
# CONFIG_ATA_BMDMA is not set

#
# PIO-only SFF controllers
#
CONFIG_PATA_CMD640_PCI=y
# CONFIG_PATA_MPIIX is not set
CONFIG_PATA_NS87410=m
CONFIG_PATA_OPTI=y
# CONFIG_PATA_OF_PLATFORM is not set
CONFIG_PATA_RZ1000=y

#
# Generic fallback / legacy drivers
#
# CONFIG_PATA_LEGACY is not set
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_LINEAR is not set
CONFIG_MD_RAID0=y
CONFIG_MD_RAID1=y
CONFIG_MD_RAID10=y
CONFIG_MD_RAID456=y
CONFIG_MD_MULTIPATH=y
# CONFIG_MD_FAULTY is not set
# CONFIG_BCACHE is not set
CONFIG_BLK_DEV_DM_BUILTIN=y
CONFIG_BLK_DEV_DM=y
CONFIG_DM_DEBUG=y
CONFIG_DM_BUFIO=y
CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING=y
# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
CONFIG_DM_BIO_PRISON=m
CONFIG_DM_PERSISTENT_DATA=y
CONFIG_DM_UNSTRIPED=m
CONFIG_DM_CRYPT=y
CONFIG_DM_SNAPSHOT=y
CONFIG_DM_THIN_PROVISIONING=m
# CONFIG_DM_CACHE is not set
# CONFIG_DM_WRITECACHE is not set
CONFIG_DM_ERA=m
CONFIG_DM_CLONE=y
CONFIG_DM_MIRROR=m
CONFIG_DM_LOG_USERSPACE=m
CONFIG_DM_RAID=y
# CONFIG_DM_ZERO is not set
CONFIG_DM_MULTIPATH=m
CONFIG_DM_MULTIPATH_QL=m
# CONFIG_DM_MULTIPATH_ST is not set
# CONFIG_DM_MULTIPATH_HST is not set
CONFIG_DM_MULTIPATH_IOA=m
CONFIG_DM_DELAY=y
CONFIG_DM_DUST=y
# CONFIG_DM_INIT is not set
# CONFIG_DM_UEVENT is not set
CONFIG_DM_FLAKEY=m
CONFIG_DM_VERITY=y
# CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG is not set
# CONFIG_DM_VERITY_FEC is not set
CONFIG_DM_SWITCH=m
CONFIG_DM_LOG_WRITES=y
CONFIG_DM_INTEGRITY=y
CONFIG_DM_AUDIT=y
CONFIG_TARGET_CORE=m
CONFIG_TCM_IBLOCK=m
CONFIG_TCM_FILEIO=m
# CONFIG_TCM_PSCSI is not set
CONFIG_TCM_USER2=m
# CONFIG_LOOPBACK_TARGET is not set
# CONFIG_ISCSI_TARGET is not set
CONFIG_SBP_TARGET=m
CONFIG_FUSION=y
CONFIG_FUSION_SPI=m
# CONFIG_FUSION_FC is not set
CONFIG_FUSION_SAS=m
CONFIG_FUSION_MAX_SGE=128
# CONFIG_FUSION_CTL is not set
CONFIG_FUSION_LOGGING=y

#
# IEEE 1394 (FireWire) support
#
CONFIG_FIREWIRE=m
# CONFIG_FIREWIRE_OHCI is not set
# CONFIG_FIREWIRE_SBP2 is not set
# CONFIG_FIREWIRE_NET is not set
CONFIG_FIREWIRE_NOSY=y
# end of IEEE 1394 (FireWire) support

# CONFIG_MACINTOSH_DRIVERS is not set
CONFIG_NETDEVICES=y
CONFIG_NET_CORE=y
# CONFIG_BONDING is not set
# CONFIG_DUMMY is not set
# CONFIG_WIREGUARD is not set
# CONFIG_EQUALIZER is not set
# CONFIG_NET_FC is not set
# CONFIG_NET_TEAM is not set
# CONFIG_MACVLAN is not set
# CONFIG_IPVLAN is not set
# CONFIG_VXLAN is not set
# CONFIG_GENEVE is not set
# CONFIG_BAREUDP is not set
# CONFIG_GTP is not set
# CONFIG_MACSEC is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NTB_NETDEV is not set
# CONFIG_RIONET is not set
# CONFIG_TUN is not set
# CONFIG_TUN_VNET_CROSS_LE is not set
# CONFIG_VETH is not set
CONFIG_VIRTIO_NET=m
# CONFIG_NLMON is not set
# CONFIG_MHI_NET is not set
# CONFIG_ARCNET is not set
CONFIG_ATM_DRIVERS=y
# CONFIG_ATM_DUMMY is not set
# CONFIG_ATM_TCP is not set
# CONFIG_ATM_LANAI is not set
# CONFIG_ATM_ENI is not set
# CONFIG_ATM_NICSTAR is not set
# CONFIG_ATM_IDT77252 is not set
# CONFIG_ATM_IA is not set
# CONFIG_ATM_FORE200E is not set
# CONFIG_ATM_HE is not set
# CONFIG_ATM_SOLOS is not set
CONFIG_ETHERNET=y
CONFIG_NET_VENDOR_3COM=y
# CONFIG_EL3 is not set
# CONFIG_VORTEX is not set
# CONFIG_TYPHOON is not set
CONFIG_NET_VENDOR_ADAPTEC=y
# CONFIG_ADAPTEC_STARFIRE is not set
CONFIG_NET_VENDOR_AGERE=y
# CONFIG_ET131X is not set
CONFIG_NET_VENDOR_ALACRITECH=y
# CONFIG_SLICOSS is not set
CONFIG_NET_VENDOR_ALTEON=y
# CONFIG_ACENIC is not set
# CONFIG_ALTERA_TSE is not set
CONFIG_NET_VENDOR_AMAZON=y
# CONFIG_ENA_ETHERNET is not set
# CONFIG_NET_VENDOR_AMD is not set
CONFIG_NET_VENDOR_AQUANTIA=y
# CONFIG_AQTION is not set
CONFIG_NET_VENDOR_ARC=y
CONFIG_NET_VENDOR_ASIX=y
CONFIG_NET_VENDOR_ATHEROS=y
# CONFIG_ATL2 is not set
# CONFIG_ATL1 is not set
# CONFIG_ATL1E is not set
# CONFIG_ATL1C is not set
# CONFIG_ALX is not set
# CONFIG_CX_ECAT is not set
CONFIG_NET_VENDOR_BROADCOM=y
# CONFIG_B44 is not set
# CONFIG_BCMGENET is not set
# CONFIG_BNX2 is not set
# CONFIG_CNIC is not set
# CONFIG_TIGON3 is not set
# CONFIG_BNX2X is not set
# CONFIG_SYSTEMPORT is not set
# CONFIG_BNXT is not set
CONFIG_NET_VENDOR_CADENCE=y
CONFIG_NET_VENDOR_CAVIUM=y
CONFIG_NET_VENDOR_CHELSIO=y
# CONFIG_CHELSIO_T1 is not set
# CONFIG_CHELSIO_T3 is not set
# CONFIG_CHELSIO_T4 is not set
# CONFIG_CHELSIO_T4VF is not set
CONFIG_NET_VENDOR_CIRRUS=y
CONFIG_NET_VENDOR_CISCO=y
# CONFIG_ENIC is not set
CONFIG_NET_VENDOR_CORTINA=y
# CONFIG_GEMINI_ETHERNET is not set
CONFIG_NET_VENDOR_DAVICOM=y
# CONFIG_DNET is not set
CONFIG_NET_VENDOR_DEC=y
# CONFIG_NET_TULIP is not set
CONFIG_NET_VENDOR_DLINK=y
# CONFIG_DL2K is not set
# CONFIG_SUNDANCE is not set
CONFIG_NET_VENDOR_EMULEX=y
# CONFIG_BE2NET is not set
CONFIG_NET_VENDOR_ENGLEDER=y
# CONFIG_TSNEP is not set
CONFIG_NET_VENDOR_EZCHIP=y
# CONFIG_EZCHIP_NPS_MANAGEMENT_ENET is not set
CONFIG_NET_VENDOR_FUNGIBLE=y
# CONFIG_FUN_ETH is not set
CONFIG_NET_VENDOR_GOOGLE=y
# CONFIG_GVE is not set
CONFIG_NET_VENDOR_HUAWEI=y
# CONFIG_HINIC is not set
CONFIG_NET_VENDOR_I825XX=y
CONFIG_NET_VENDOR_INTEL=y
# CONFIG_E100 is not set
CONFIG_E1000=y
# CONFIG_E1000E is not set
# CONFIG_IGB is not set
# CONFIG_IGBVF is not set
# CONFIG_IXGB is not set
# CONFIG_IXGBE is not set
# CONFIG_IXGBEVF is not set
# CONFIG_I40E is not set
# CONFIG_I40EVF is not set
# CONFIG_ICE is not set
# CONFIG_FM10K is not set
# CONFIG_IGC is not set
CONFIG_NET_VENDOR_WANGXUN=y
# CONFIG_NGBE is not set
# CONFIG_TXGBE is not set
# CONFIG_JME is not set
CONFIG_NET_VENDOR_LITEX=y
# CONFIG_LITEX_LITEETH is not set
CONFIG_NET_VENDOR_MARVELL=y
# CONFIG_MVMDIO is not set
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
CONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_MLX4_EN is not set
# CONFIG_MLX5_CORE is not set
# CONFIG_MLXSW_CORE is not set
# CONFIG_MLXFW is not set
CONFIG_NET_VENDOR_MICREL=y
# CONFIG_KS8842 is not set
# CONFIG_KS8851_MLL is not set
# CONFIG_KSZ884X_PCI is not set
CONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_LAN743X is not set
CONFIG_NET_VENDOR_MICROSEMI=y
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_MYRI=y
# CONFIG_MYRI10GE is not set
# CONFIG_FEALNX is not set
CONFIG_NET_VENDOR_NI=y
# CONFIG_NI_XGE_MANAGEMENT_ENET is not set
CONFIG_NET_VENDOR_NATSEMI=y
# CONFIG_NATSEMI is not set
# CONFIG_NS83820 is not set
CONFIG_NET_VENDOR_NETERION=y
# CONFIG_S2IO is not set
CONFIG_NET_VENDOR_NETRONOME=y
# CONFIG_NFP is not set
CONFIG_NET_VENDOR_8390=y
# CONFIG_NE2K_PCI is not set
CONFIG_NET_VENDOR_NVIDIA=y
# CONFIG_FORCEDETH is not set
CONFIG_NET_VENDOR_OKI=y
# CONFIG_PCH_GBE is not set
# CONFIG_ETHOC is not set
CONFIG_NET_VENDOR_PACKET_ENGINES=y
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
CONFIG_NET_VENDOR_PENSANDO=y
CONFIG_NET_VENDOR_QLOGIC=y
# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_NETXEN_NIC is not set
# CONFIG_QED is not set
CONFIG_NET_VENDOR_BROCADE=y
# CONFIG_BNA is not set
CONFIG_NET_VENDOR_QUALCOMM=y
# CONFIG_QCOM_EMAC is not set
# CONFIG_RMNET is not set
CONFIG_NET_VENDOR_RDC=y
# CONFIG_R6040 is not set
CONFIG_NET_VENDOR_REALTEK=y
# CONFIG_ATP is not set
# CONFIG_8139CP is not set
# CONFIG_8139TOO is not set
# CONFIG_R8169 is not set
CONFIG_NET_VENDOR_RENESAS=y
CONFIG_NET_VENDOR_ROCKER=y
CONFIG_NET_VENDOR_SAMSUNG=y
# CONFIG_SXGBE_ETH is not set
CONFIG_NET_VENDOR_SEEQ=y
CONFIG_NET_VENDOR_SILAN=y
# CONFIG_SC92031 is not set
CONFIG_NET_VENDOR_SIS=y
# CONFIG_SIS900 is not set
# CONFIG_SIS190 is not set
CONFIG_NET_VENDOR_SOLARFLARE=y
# CONFIG_SFC is not set
# CONFIG_SFC_FALCON is not set
# CONFIG_SFC_SIENA is not set
CONFIG_NET_VENDOR_SMSC=y
# CONFIG_EPIC100 is not set
# CONFIG_SMSC911X is not set
# CONFIG_SMSC9420 is not set
CONFIG_NET_VENDOR_SOCIONEXT=y
CONFIG_NET_VENDOR_STMICRO=y
# CONFIG_STMMAC_ETH is not set
CONFIG_NET_VENDOR_SUN=y
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not set
# CONFIG_NIU is not set
CONFIG_NET_VENDOR_SYNOPSYS=y
# CONFIG_DWC_XLGMAC is not set
CONFIG_NET_VENDOR_TEHUTI=y
# CONFIG_TEHUTI is not set
CONFIG_NET_VENDOR_TI=y
# CONFIG_TI_CPSW_PHY_SEL is not set
# CONFIG_TLAN is not set
CONFIG_NET_VENDOR_VERTEXCOM=y
CONFIG_NET_VENDOR_VIA=y
# CONFIG_VIA_RHINE is not set
# CONFIG_VIA_VELOCITY is not set
CONFIG_NET_VENDOR_WIZNET=y
# CONFIG_WIZNET_W5100 is not set
# CONFIG_WIZNET_W5300 is not set
CONFIG_NET_VENDOR_XILINX=y
# CONFIG_XILINX_EMACLITE is not set
# CONFIG_XILINX_AXI_EMAC is not set
# CONFIG_XILINX_LL_TEMAC is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_NET_SB1000 is not set
# CONFIG_PHYLIB is not set
# CONFIG_PSE_CONTROLLER is not set
CONFIG_CAN_DEV=m
# CONFIG_CAN_VCAN is not set
# CONFIG_CAN_VXCAN is not set
CONFIG_CAN_NETLINK=y
CONFIG_CAN_CALC_BITTIMING=y
# CONFIG_CAN_CAN327 is not set
# CONFIG_CAN_FLEXCAN is not set
# CONFIG_CAN_GRCAN is not set
# CONFIG_CAN_KVASER_PCIEFD is not set
# CONFIG_CAN_SLCAN is not set
# CONFIG_PCH_CAN is not set
# CONFIG_CAN_C_CAN is not set
# CONFIG_CAN_CC770 is not set
# CONFIG_CAN_CTUCANFD_PCI is not set
# CONFIG_CAN_CTUCANFD_PLATFORM is not set
# CONFIG_CAN_IFI_CANFD is not set
# CONFIG_CAN_M_CAN is not set
# CONFIG_CAN_PEAK_PCIEFD is not set
# CONFIG_CAN_SJA1000 is not set
# CONFIG_CAN_SOFTING is not set
# CONFIG_CAN_DEBUG_DEVICES is not set
# CONFIG_MDIO_DEVICE is not set

#
# PCS device drivers
#
# end of PCS device drivers

# CONFIG_PLIP is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set

#
# Host-side USB support is needed for USB Network Adapter support
#
CONFIG_WLAN=y
CONFIG_WLAN_VENDOR_ADMTEK=y
CONFIG_WLAN_VENDOR_ATH=y
# CONFIG_ATH_DEBUG is not set
# CONFIG_ATH5K_PCI is not set
CONFIG_WLAN_VENDOR_ATMEL=y
CONFIG_WLAN_VENDOR_BROADCOM=y
CONFIG_WLAN_VENDOR_CISCO=y
CONFIG_WLAN_VENDOR_INTEL=y
CONFIG_WLAN_VENDOR_INTERSIL=y
# CONFIG_HOSTAP is not set
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_WLAN_VENDOR_MICROCHIP=y
CONFIG_WLAN_VENDOR_PURELIFI=y
CONFIG_WLAN_VENDOR_RALINK=y
CONFIG_WLAN_VENDOR_REALTEK=y
CONFIG_WLAN_VENDOR_RSI=y
CONFIG_WLAN_VENDOR_SILABS=y
CONFIG_WLAN_VENDOR_ST=y
CONFIG_WLAN_VENDOR_TI=y
CONFIG_WLAN_VENDOR_ZYDAS=y
CONFIG_WLAN_VENDOR_QUANTENNA=y
# CONFIG_WAN is not set
CONFIG_IEEE802154_DRIVERS=y

#
# Wireless WAN
#
# CONFIG_WWAN is not set
# end of Wireless WAN

# CONFIG_VMXNET3 is not set
# CONFIG_FUJITSU_ES is not set
# CONFIG_USB4_NET is not set
# CONFIG_NETDEVSIM is not set
CONFIG_NET_FAILOVER=m
# CONFIG_ISDN is not set

#
# Input device support
#
CONFIG_INPUT=y
CONFIG_INPUT_LEDS=m
CONFIG_INPUT_FF_MEMLESS=y
CONFIG_INPUT_SPARSEKMAP=y
CONFIG_INPUT_MATRIXKMAP=y
CONFIG_INPUT_VIVALDIFMAP=y

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_JOYDEV=y
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ADC=y
CONFIG_KEYBOARD_ADP5588=y
CONFIG_KEYBOARD_ADP5589=y
CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_QT1050 is not set
# CONFIG_KEYBOARD_QT1070 is not set
CONFIG_KEYBOARD_QT2160=y
# CONFIG_KEYBOARD_DLINK_DIR685 is not set
CONFIG_KEYBOARD_LKKBD=m
CONFIG_KEYBOARD_GPIO=m
CONFIG_KEYBOARD_GPIO_POLLED=m
CONFIG_KEYBOARD_TCA6416=m
CONFIG_KEYBOARD_TCA8418=m
CONFIG_KEYBOARD_MATRIX=y
CONFIG_KEYBOARD_LM8323=m
# CONFIG_KEYBOARD_LM8333 is not set
# CONFIG_KEYBOARD_MAX7359 is not set
CONFIG_KEYBOARD_MCS=y
CONFIG_KEYBOARD_MPR121=y
CONFIG_KEYBOARD_NEWTON=m
CONFIG_KEYBOARD_OPENCORES=y
# CONFIG_KEYBOARD_PINEPHONE is not set
# CONFIG_KEYBOARD_GOLDFISH_EVENTS is not set
CONFIG_KEYBOARD_STOWAWAY=y
# CONFIG_KEYBOARD_SUNKBD is not set
CONFIG_KEYBOARD_STMPE=y
CONFIG_KEYBOARD_IQS62X=y
CONFIG_KEYBOARD_OMAP4=m
# CONFIG_KEYBOARD_TC3589X is not set
# CONFIG_KEYBOARD_TM2_TOUCHKEY is not set
CONFIG_KEYBOARD_TWL4030=m
# CONFIG_KEYBOARD_XTKBD is not set
CONFIG_KEYBOARD_CROS_EC=y
CONFIG_KEYBOARD_CAP11XX=m
# CONFIG_KEYBOARD_CYPRESS_SF is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=m
CONFIG_MOUSE_PS2_ALPS=y
# CONFIG_MOUSE_PS2_BYD is not set
CONFIG_MOUSE_PS2_LOGIPS2PP=y
CONFIG_MOUSE_PS2_SYNAPTICS=y
# CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS is not set
# CONFIG_MOUSE_PS2_CYPRESS is not set
CONFIG_MOUSE_PS2_LIFEBOOK=y
CONFIG_MOUSE_PS2_TRACKPOINT=y
CONFIG_MOUSE_PS2_ELANTECH=y
CONFIG_MOUSE_PS2_ELANTECH_SMBUS=y
CONFIG_MOUSE_PS2_SENTELIC=y
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
CONFIG_MOUSE_PS2_OLPC=y
# CONFIG_MOUSE_PS2_FOCALTECH is not set
# CONFIG_MOUSE_PS2_VMMOUSE is not set
CONFIG_MOUSE_PS2_SMBUS=y
CONFIG_MOUSE_SERIAL=m
# CONFIG_MOUSE_APPLETOUCH is not set
# CONFIG_MOUSE_BCM5974 is not set
CONFIG_MOUSE_CYAPA=y
CONFIG_MOUSE_ELAN_I2C=y
# CONFIG_MOUSE_ELAN_I2C_I2C is not set
# CONFIG_MOUSE_ELAN_I2C_SMBUS is not set
# CONFIG_MOUSE_VSXXXAA is not set
CONFIG_MOUSE_GPIO=y
# CONFIG_MOUSE_SYNAPTICS_I2C is not set
# CONFIG_MOUSE_SYNAPTICS_USB is not set
CONFIG_INPUT_JOYSTICK=y
# CONFIG_JOYSTICK_ANALOG is not set
CONFIG_JOYSTICK_A3D=m
CONFIG_JOYSTICK_ADC=m
CONFIG_JOYSTICK_ADI=y
# CONFIG_JOYSTICK_COBRA is not set
CONFIG_JOYSTICK_GF2K=m
# CONFIG_JOYSTICK_GRIP is not set
CONFIG_JOYSTICK_GRIP_MP=m
CONFIG_JOYSTICK_GUILLEMOT=y
# CONFIG_JOYSTICK_INTERACT is not set
CONFIG_JOYSTICK_SIDEWINDER=m
CONFIG_JOYSTICK_TMDC=y
CONFIG_JOYSTICK_IFORCE=y
CONFIG_JOYSTICK_IFORCE_232=y
# CONFIG_JOYSTICK_WARRIOR is not set
CONFIG_JOYSTICK_MAGELLAN=m
# CONFIG_JOYSTICK_SPACEORB is not set
# CONFIG_JOYSTICK_SPACEBALL is not set
CONFIG_JOYSTICK_STINGER=m
CONFIG_JOYSTICK_TWIDJOY=y
# CONFIG_JOYSTICK_ZHENHUA is not set
CONFIG_JOYSTICK_DB9=m
# CONFIG_JOYSTICK_GAMECON is not set
CONFIG_JOYSTICK_TURBOGRAFX=m
CONFIG_JOYSTICK_AS5011=m
CONFIG_JOYSTICK_JOYDUMP=y
# CONFIG_JOYSTICK_XPAD is not set
CONFIG_JOYSTICK_WALKERA0701=m
# CONFIG_JOYSTICK_PXRC is not set
CONFIG_JOYSTICK_QWIIC=y
# CONFIG_JOYSTICK_FSIA6B is not set
# CONFIG_JOYSTICK_SENSEHAT is not set
# CONFIG_INPUT_TABLET is not set
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_AD7879 is not set
CONFIG_TOUCHSCREEN_ADC=m
# CONFIG_TOUCHSCREEN_AR1021_I2C is not set
CONFIG_TOUCHSCREEN_ATMEL_MXT=y
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
CONFIG_TOUCHSCREEN_BU21013=m
# CONFIG_TOUCHSCREEN_BU21029 is not set
# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set
# CONFIG_TOUCHSCREEN_CHIPONE_ICN8505 is not set
CONFIG_TOUCHSCREEN_CY8CTMA140=m
# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
CONFIG_TOUCHSCREEN_CYTTSP_CORE=m
# CONFIG_TOUCHSCREEN_CYTTSP_I2C is not set
CONFIG_TOUCHSCREEN_CYTTSP4_CORE=y
# CONFIG_TOUCHSCREEN_CYTTSP4_I2C is not set
CONFIG_TOUCHSCREEN_DA9052=y
CONFIG_TOUCHSCREEN_DYNAPRO=y
CONFIG_TOUCHSCREEN_HAMPSHIRE=m
CONFIG_TOUCHSCREEN_EETI=y
# CONFIG_TOUCHSCREEN_EGALAX is not set
# CONFIG_TOUCHSCREEN_EGALAX_SERIAL is not set
# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FUJITSU is not set
CONFIG_TOUCHSCREEN_GOODIX=y
CONFIG_TOUCHSCREEN_HIDEEP=m
CONFIG_TOUCHSCREEN_HYCON_HY46XX=m
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_ILITEK is not set
CONFIG_TOUCHSCREEN_S6SY761=y
CONFIG_TOUCHSCREEN_GUNZE=m
CONFIG_TOUCHSCREEN_EKTF2127=m
# CONFIG_TOUCHSCREEN_ELAN is not set
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
CONFIG_TOUCHSCREEN_WACOM_I2C=m
# CONFIG_TOUCHSCREEN_MAX11801 is not set
CONFIG_TOUCHSCREEN_MCS5000=y
CONFIG_TOUCHSCREEN_MMS114=m
CONFIG_TOUCHSCREEN_MELFAS_MIP4=y
CONFIG_TOUCHSCREEN_MSG2638=m
# CONFIG_TOUCHSCREEN_MTOUCH is not set
CONFIG_TOUCHSCREEN_IMAGIS=y
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=y
CONFIG_TOUCHSCREEN_MK712=y
CONFIG_TOUCHSCREEN_PENMOUNT=y
CONFIG_TOUCHSCREEN_EDT_FT5X06=m
CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
CONFIG_TOUCHSCREEN_TOUCHWIN=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_WDT87XX_I2C=y
CONFIG_TOUCHSCREEN_WM831X=y
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
# CONFIG_TOUCHSCREEN_TSC_SERIO is not set
CONFIG_TOUCHSCREEN_TSC200X_CORE=m
CONFIG_TOUCHSCREEN_TSC2004=m
CONFIG_TOUCHSCREEN_TSC2007=y
# CONFIG_TOUCHSCREEN_TSC2007_IIO is not set
CONFIG_TOUCHSCREEN_RM_TS=m
CONFIG_TOUCHSCREEN_SILEAD=y
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=y
CONFIG_TOUCHSCREEN_STMFTS=y
CONFIG_TOUCHSCREEN_STMPE=m
# CONFIG_TOUCHSCREEN_SX8654 is not set
CONFIG_TOUCHSCREEN_TPS6507X=m
CONFIG_TOUCHSCREEN_ZET6223=y
CONFIG_TOUCHSCREEN_ZFORCE=m
CONFIG_TOUCHSCREEN_COLIBRI_VF50=y
CONFIG_TOUCHSCREEN_ROHM_BU21023=m
# CONFIG_TOUCHSCREEN_IQS5XX is not set
CONFIG_TOUCHSCREEN_ZINITIX=m
CONFIG_INPUT_MISC=y
CONFIG_INPUT_88PM80X_ONKEY=m
CONFIG_INPUT_AD714X=y
CONFIG_INPUT_AD714X_I2C=m
# CONFIG_INPUT_ATMEL_CAPTOUCH is not set
# CONFIG_INPUT_BMA150 is not set
CONFIG_INPUT_E3X0_BUTTON=m
CONFIG_INPUT_MAX77650_ONKEY=y
CONFIG_INPUT_MAX77693_HAPTIC=m
CONFIG_INPUT_MAX8925_ONKEY=m
CONFIG_INPUT_MMA8450=m
# CONFIG_INPUT_APANEL is not set
CONFIG_INPUT_GPIO_BEEPER=y
CONFIG_INPUT_GPIO_DECODER=m
# CONFIG_INPUT_GPIO_VIBRA is not set
CONFIG_INPUT_WISTRON_BTNS=y
CONFIG_INPUT_ATLAS_BTNS=y
# CONFIG_INPUT_ATI_REMOTE2 is not set
# CONFIG_INPUT_KEYSPAN_REMOTE is not set
# CONFIG_INPUT_KXTJ9 is not set
# CONFIG_INPUT_POWERMATE is not set
# CONFIG_INPUT_YEALINK is not set
# CONFIG_INPUT_CM109 is not set
CONFIG_INPUT_REGULATOR_HAPTIC=y
CONFIG_INPUT_RETU_PWRBUTTON=m
# CONFIG_INPUT_TPS65218_PWRBUTTON is not set
CONFIG_INPUT_AXP20X_PEK=m
CONFIG_INPUT_TWL4030_PWRBUTTON=m
CONFIG_INPUT_TWL4030_VIBRA=m
CONFIG_INPUT_UINPUT=m
# CONFIG_INPUT_PALMAS_PWRBUTTON is not set
CONFIG_INPUT_PCF8574=m
CONFIG_INPUT_PWM_BEEPER=m
CONFIG_INPUT_PWM_VIBRA=y
# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
# CONFIG_INPUT_DA7280_HAPTICS is not set
# CONFIG_INPUT_DA9052_ONKEY is not set
CONFIG_INPUT_DA9055_ONKEY=y
CONFIG_INPUT_WM831X_ON=y
CONFIG_INPUT_ADXL34X=y
# CONFIG_INPUT_ADXL34X_I2C is not set
# CONFIG_INPUT_IBM_PANEL is not set
CONFIG_INPUT_IQS269A=m
CONFIG_INPUT_IQS626A=m
# CONFIG_INPUT_IQS7222 is not set
CONFIG_INPUT_CMA3000=m
CONFIG_INPUT_CMA3000_I2C=m
CONFIG_INPUT_IDEAPAD_SLIDEBAR=y
# CONFIG_INPUT_SOC_BUTTON_ARRAY is not set
CONFIG_INPUT_DRV260X_HAPTICS=m
CONFIG_INPUT_DRV2665_HAPTICS=y
CONFIG_INPUT_DRV2667_HAPTICS=m
CONFIG_RMI4_CORE=m
# CONFIG_RMI4_I2C is not set
# CONFIG_RMI4_SMB is not set
CONFIG_RMI4_F03=y
CONFIG_RMI4_F03_SERIO=m
CONFIG_RMI4_2D_SENSOR=y
CONFIG_RMI4_F11=y
CONFIG_RMI4_F12=y
CONFIG_RMI4_F30=y
CONFIG_RMI4_F34=y
CONFIG_RMI4_F3A=y
# CONFIG_RMI4_F55 is not set

#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not set
CONFIG_SERIO_PCIPS2=m
CONFIG_SERIO_LIBPS2=y
CONFIG_SERIO_RAW=m
# CONFIG_SERIO_ALTERA_PS2 is not set
CONFIG_SERIO_PS2MULT=m
CONFIG_SERIO_ARC_PS2=m
CONFIG_SERIO_APBPS2=m
CONFIG_SERIO_GPIO_PS2=m
# CONFIG_USERIO is not set
CONFIG_GAMEPORT=y
CONFIG_GAMEPORT_NS558=y
# CONFIG_GAMEPORT_L4 is not set
CONFIG_GAMEPORT_EMU10K1=y
# CONFIG_GAMEPORT_FM801 is not set
# end of Hardware I/O ports
# end of Input device support

#
# Character devices
#
CONFIG_TTY=y
# CONFIG_VT is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_LDISC_AUTOLOAD=y

#
# Serial drivers
#
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
# CONFIG_SERIAL_8250_PNP is not set
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_DMA is not set
# CONFIG_SERIAL_8250_PCI is not set
# CONFIG_SERIAL_8250_MEN_MCB is not set
CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_8250_DWLIB=y
CONFIG_SERIAL_8250_DW=m
CONFIG_SERIAL_8250_RT288X=y
# CONFIG_SERIAL_8250_LPSS is not set
CONFIG_SERIAL_8250_MID=m
# CONFIG_SERIAL_8250_PERICOM is not set
CONFIG_SERIAL_OF_PLATFORM=m

#
# Non-8250 serial port support
#
# CONFIG_SERIAL_UARTLITE is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not set
CONFIG_SERIAL_SIFIVE=y
CONFIG_SERIAL_SIFIVE_CONSOLE=y
CONFIG_SERIAL_LANTIQ=m
# CONFIG_SERIAL_SCCNXP is not set
CONFIG_SERIAL_SC16IS7XX=m
# CONFIG_SERIAL_SC16IS7XX_I2C is not set
CONFIG_SERIAL_TIMBERDALE=y
CONFIG_SERIAL_ALTERA_JTAGUART=m
# CONFIG_SERIAL_ALTERA_UART is not set
CONFIG_SERIAL_PCH_UART=m
CONFIG_SERIAL_XILINX_PS_UART=y
# CONFIG_SERIAL_XILINX_PS_UART_CONSOLE is not set
CONFIG_SERIAL_ARC=y
# CONFIG_SERIAL_ARC_CONSOLE is not set
CONFIG_SERIAL_ARC_NR_PORTS=1
CONFIG_SERIAL_RP2=y
CONFIG_SERIAL_RP2_NR_UARTS=32
CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
# CONFIG_SERIAL_FSL_LINFLEXUART is not set
CONFIG_SERIAL_CONEXANT_DIGICOLOR=m
CONFIG_SERIAL_MEN_Z135=m
# end of Serial drivers

CONFIG_SERIAL_MCTRL_GPIO=y
# CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_GOLDFISH_TTY=m
# CONFIG_N_GSM is not set
CONFIG_NOZOMI=y
CONFIG_NULL_TTY=m
# CONFIG_SERIAL_DEV_BUS is not set
CONFIG_TTY_PRINTK=m
CONFIG_TTY_PRINTK_LEVEL=6
CONFIG_PRINTER=m
CONFIG_LP_CONSOLE=y
CONFIG_PPDEV=m
# CONFIG_VIRTIO_CONSOLE is not set
CONFIG_IPMI_HANDLER=y
CONFIG_IPMI_DMI_DECODE=y
CONFIG_IPMI_PLAT_DATA=y
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_DEVICE_INTERFACE=y
CONFIG_IPMI_SI=m
# CONFIG_IPMI_SSIF is not set
# CONFIG_IPMI_IPMB is not set
CONFIG_IPMI_WATCHDOG=m
CONFIG_IPMI_POWEROFF=m
CONFIG_IPMB_DEVICE_INTERFACE=m
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_INTEL=m
# CONFIG_HW_RANDOM_AMD is not set
CONFIG_HW_RANDOM_BA431=m
CONFIG_HW_RANDOM_GEODE=m
CONFIG_HW_RANDOM_VIA=y
CONFIG_HW_RANDOM_VIRTIO=y
CONFIG_HW_RANDOM_CCTRNG=y
CONFIG_HW_RANDOM_XIPHERA=m
CONFIG_APPLICOM=y
CONFIG_SONYPI=m
CONFIG_MWAVE=m
# CONFIG_PC8736x_GPIO is not set
CONFIG_NSC_GPIO=m
# CONFIG_DEVMEM is not set
CONFIG_NVRAM=m
# CONFIG_DEVPORT is not set
CONFIG_HPET=y
# CONFIG_HPET_MMAP is not set
# CONFIG_HANGCHECK_TIMER is not set
CONFIG_TCG_TPM=m
CONFIG_HW_RANDOM_TPM=y
CONFIG_TCG_TIS_CORE=m
CONFIG_TCG_TIS=m
CONFIG_TCG_TIS_I2C=m
# CONFIG_TCG_TIS_I2C_CR50 is not set
CONFIG_TCG_TIS_I2C_ATMEL=m
CONFIG_TCG_TIS_I2C_INFINEON=m
CONFIG_TCG_TIS_I2C_NUVOTON=m
# CONFIG_TCG_NSC is not set
CONFIG_TCG_ATMEL=m
CONFIG_TCG_INFINEON=m
# CONFIG_TCG_CRB is not set
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TELCLOCK is not set
# CONFIG_XILLYBUS is not set
CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RANDOM_TRUST_BOOTLOADER=y
# end of Character devices

#
# I2C support
#
CONFIG_I2C=y
# CONFIG_ACPI_I2C_OPREGION is not set
CONFIG_I2C_BOARDINFO=y
# CONFIG_I2C_COMPAT is not set
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MUX=y

#
# Multiplexer I2C Chip support
#
CONFIG_I2C_ARB_GPIO_CHALLENGE=y
CONFIG_I2C_MUX_GPIO=m
# CONFIG_I2C_MUX_GPMUX is not set
# CONFIG_I2C_MUX_LTC4306 is not set
# CONFIG_I2C_MUX_PCA9541 is not set
# CONFIG_I2C_MUX_PCA954x is not set
# CONFIG_I2C_MUX_PINCTRL is not set
CONFIG_I2C_MUX_REG=m
CONFIG_I2C_DEMUX_PINCTRL=y
CONFIG_I2C_MUX_MLXCPLD=y
# end of Multiplexer I2C Chip support

CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_SMBUS=y
CONFIG_I2C_ALGOBIT=y
CONFIG_I2C_ALGOPCA=m

#
# I2C Hardware Bus support
#

#
# PC SMBus host controller drivers
#
CONFIG_I2C_CCGX_UCSI=m
# CONFIG_I2C_ALI1535 is not set
CONFIG_I2C_ALI1563=m
CONFIG_I2C_ALI15X3=y
# CONFIG_I2C_AMD756 is not set
# CONFIG_I2C_AMD8111 is not set
# CONFIG_I2C_AMD_MP2 is not set
CONFIG_I2C_I801=y
CONFIG_I2C_ISCH=y
CONFIG_I2C_ISMT=y
# CONFIG_I2C_PIIX4 is not set
CONFIG_I2C_NFORCE2=m
CONFIG_I2C_NFORCE2_S4985=m
CONFIG_I2C_NVIDIA_GPU=m
CONFIG_I2C_SIS5595=m
# CONFIG_I2C_SIS630 is not set
CONFIG_I2C_SIS96X=m
CONFIG_I2C_VIA=y
# CONFIG_I2C_VIAPRO is not set

#
# ACPI drivers
#
# CONFIG_I2C_SCMI is not set

#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
CONFIG_I2C_CBUS_GPIO=m
CONFIG_I2C_DESIGNWARE_CORE=m
# CONFIG_I2C_DESIGNWARE_SLAVE is not set
CONFIG_I2C_DESIGNWARE_PCI=m
CONFIG_I2C_EG20T=y
CONFIG_I2C_GPIO=m
# CONFIG_I2C_GPIO_FAULT_INJECTOR is not set
# CONFIG_I2C_KEMPLD is not set
# CONFIG_I2C_OCORES is not set
CONFIG_I2C_PCA_PLATFORM=m
CONFIG_I2C_PXA=m
CONFIG_I2C_PXA_PCI=y
CONFIG_I2C_SIMTEC=m
CONFIG_I2C_XILINX=y

#
# External I2C/SMBus adapter drivers
#
# CONFIG_I2C_PARPORT is not set
CONFIG_I2C_PCI1XXXX=m
# CONFIG_I2C_TAOS_EVM is not set

#
# Other I2C/SMBus bus drivers
#
CONFIG_I2C_CROS_EC_TUNNEL=m
# CONFIG_SCx200_ACB is not set
# CONFIG_I2C_FSI is not set
CONFIG_I2C_VIRTIO=y
# end of I2C Hardware Bus support

CONFIG_I2C_STUB=m
CONFIG_I2C_SLAVE=y
CONFIG_I2C_SLAVE_EEPROM=m
CONFIG_I2C_SLAVE_TESTUNIT=y
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# end of I2C support

CONFIG_I3C=y
CONFIG_CDNS_I3C_MASTER=m
CONFIG_DW_I3C_MASTER=y
CONFIG_SVC_I3C_MASTER=m
CONFIG_MIPI_I3C_HCI=y
# CONFIG_SPI is not set
CONFIG_SPMI=m
CONFIG_SPMI_HISI3670=m
CONFIG_HSI=y
CONFIG_HSI_BOARDINFO=y

#
# HSI controllers
#

#
# HSI clients
#
CONFIG_HSI_CHAR=m
CONFIG_PPS=y
# CONFIG_PPS_DEBUG is not set

#
# PPS clients support
#
# CONFIG_PPS_CLIENT_KTIMER is not set
CONFIG_PPS_CLIENT_LDISC=m
CONFIG_PPS_CLIENT_PARPORT=m
CONFIG_PPS_CLIENT_GPIO=y

#
# PPS generators support
#

#
# PTP clock support
#
CONFIG_PTP_1588_CLOCK=y
CONFIG_PTP_1588_CLOCK_OPTIONAL=y

#
# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
#
# CONFIG_PTP_1588_CLOCK_PCH is not set
CONFIG_PTP_1588_CLOCK_KVM=y
CONFIG_PTP_1588_CLOCK_IDT82P33=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_VMW is not set
# end of PTP clock support

CONFIG_PINCTRL=y
CONFIG_GENERIC_PINCTRL_GROUPS=y
CONFIG_PINMUX=y
CONFIG_GENERIC_PINMUX_FUNCTIONS=y
CONFIG_PINCONF=y
CONFIG_GENERIC_PINCONF=y
CONFIG_DEBUG_PINCTRL=y
# CONFIG_PINCTRL_AMD is not set
CONFIG_PINCTRL_AS3722=y
CONFIG_PINCTRL_AXP209=m
CONFIG_PINCTRL_CY8C95X0=m
CONFIG_PINCTRL_EQUILIBRIUM=m
CONFIG_PINCTRL_MCP23S08_I2C=y
CONFIG_PINCTRL_MCP23S08=y
CONFIG_PINCTRL_MICROCHIP_SGPIO=m
# CONFIG_PINCTRL_OCELOT is not set
CONFIG_PINCTRL_PALMAS=y
# CONFIG_PINCTRL_SINGLE is not set
CONFIG_PINCTRL_STMFX=m
# CONFIG_PINCTRL_SX150X is not set
CONFIG_PINCTRL_MADERA=y
CONFIG_PINCTRL_CS47L15=y
CONFIG_PINCTRL_CS47L35=y
CONFIG_PINCTRL_CS47L85=y
CONFIG_PINCTRL_CS47L90=y
CONFIG_PINCTRL_CS47L92=y

#
# Intel pinctrl drivers
#
# CONFIG_PINCTRL_BAYTRAIL is not set
CONFIG_PINCTRL_CHERRYVIEW=m
# CONFIG_PINCTRL_LYNXPOINT is not set
CONFIG_PINCTRL_INTEL=y
CONFIG_PINCTRL_ALDERLAKE=m
# CONFIG_PINCTRL_BROXTON is not set
CONFIG_PINCTRL_CANNONLAKE=m
# CONFIG_PINCTRL_CEDARFORK is not set
CONFIG_PINCTRL_DENVERTON=y
# CONFIG_PINCTRL_ELKHARTLAKE is not set
CONFIG_PINCTRL_EMMITSBURG=y
CONFIG_PINCTRL_GEMINILAKE=m
# CONFIG_PINCTRL_ICELAKE is not set
CONFIG_PINCTRL_JASPERLAKE=y
CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LEWISBURG is not set
CONFIG_PINCTRL_METEORLAKE=m
# CONFIG_PINCTRL_SUNRISEPOINT is not set
CONFIG_PINCTRL_TIGERLAKE=m
# end of Intel pinctrl drivers

#
# Renesas pinctrl drivers
#
# end of Renesas pinctrl drivers

CONFIG_GPIOLIB=y
CONFIG_GPIOLIB_FASTPATH_LIMIT=512
CONFIG_OF_GPIO=y
CONFIG_GPIO_ACPI=y
CONFIG_GPIOLIB_IRQCHIP=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_CDEV=y
CONFIG_GPIO_CDEV_V1=y
CONFIG_GPIO_GENERIC=y
CONFIG_GPIO_MAX730X=y

#
# Memory mapped GPIO drivers
#
# CONFIG_GPIO_74XX_MMIO is not set
# CONFIG_GPIO_ALTERA is not set
# CONFIG_GPIO_AMDPT is not set
CONFIG_GPIO_CADENCE=m
CONFIG_GPIO_DWAPB=y
CONFIG_GPIO_FTGPIO010=y
# CONFIG_GPIO_GENERIC_PLATFORM is not set
CONFIG_GPIO_GRGPIO=m
# CONFIG_GPIO_HLWD is not set
CONFIG_GPIO_LOGICVC=y
# CONFIG_GPIO_MB86S7X is not set
CONFIG_GPIO_MENZ127=y
CONFIG_GPIO_SIFIVE=y
CONFIG_GPIO_SIOX=y
CONFIG_GPIO_SYSCON=y
# CONFIG_GPIO_VX855 is not set
CONFIG_GPIO_XILINX=y
# CONFIG_GPIO_AMD_FCH is not set
# end of Memory mapped GPIO drivers

#
# Port-mapped I/O GPIO drivers
#
CONFIG_GPIO_I8255=y
CONFIG_GPIO_104_DIO_48E=y
CONFIG_GPIO_104_IDIO_16=y
CONFIG_GPIO_104_IDI_48=y
CONFIG_GPIO_F7188X=m
CONFIG_GPIO_GPIO_MM=m
CONFIG_GPIO_IT87=y
# CONFIG_GPIO_SCH is not set
CONFIG_GPIO_SCH311X=m
CONFIG_GPIO_WINBOND=m
CONFIG_GPIO_WS16C48=y
# end of Port-mapped I/O GPIO drivers

#
# I2C GPIO expanders
#
CONFIG_GPIO_ADNP=y
# CONFIG_GPIO_GW_PLD is not set
CONFIG_GPIO_MAX7300=y
CONFIG_GPIO_MAX732X=m
CONFIG_GPIO_PCA953X=y
CONFIG_GPIO_PCA953X_IRQ=y
CONFIG_GPIO_PCA9570=y
# CONFIG_GPIO_PCF857X is not set
# CONFIG_GPIO_TPIC2810 is not set
# end of I2C GPIO expanders

#
# MFD GPIO expanders
#
CONFIG_GPIO_ARIZONA=m
CONFIG_GPIO_BD71815=m
CONFIG_GPIO_BD71828=m
CONFIG_GPIO_BD9571MWV=y
CONFIG_GPIO_DA9052=y
# CONFIG_GPIO_DA9055 is not set
# CONFIG_GPIO_KEMPLD is not set
CONFIG_GPIO_LP873X=y
# CONFIG_GPIO_LP87565 is not set
CONFIG_GPIO_MADERA=m
CONFIG_GPIO_MAX77650=m
# CONFIG_GPIO_PALMAS is not set
# CONFIG_GPIO_STMPE is not set
# CONFIG_GPIO_TC3589X is not set
CONFIG_GPIO_TPS65086=m
CONFIG_GPIO_TPS65218=m
CONFIG_GPIO_TPS6586X=y
# CONFIG_GPIO_TPS65910 is not set
# CONFIG_GPIO_TPS65912 is not set
# CONFIG_GPIO_TQMX86 is not set
CONFIG_GPIO_TWL4030=m
# CONFIG_GPIO_WM831X is not set
CONFIG_GPIO_WM8350=m
# end of MFD GPIO expanders

#
# PCI GPIO expanders
#
# CONFIG_GPIO_AMD8111 is not set
# CONFIG_GPIO_BT8XX is not set
# CONFIG_GPIO_ML_IOH is not set
# CONFIG_GPIO_PCH is not set
CONFIG_GPIO_PCI_IDIO_16=y
CONFIG_GPIO_PCIE_IDIO_24=m
# CONFIG_GPIO_RDC321X is not set
CONFIG_GPIO_SODAVILLE=y
# end of PCI GPIO expanders

#
# Virtual GPIO drivers
#
# CONFIG_GPIO_AGGREGATOR is not set
CONFIG_GPIO_MOCKUP=y
# CONFIG_GPIO_VIRTIO is not set
CONFIG_GPIO_SIM=m
# end of Virtual GPIO drivers

CONFIG_W1=y
CONFIG_W1_CON=y

#
# 1-wire Bus Masters
#
CONFIG_W1_MASTER_MATROX=m
CONFIG_W1_MASTER_DS2482=m
# CONFIG_W1_MASTER_DS1WM is not set
# CONFIG_W1_MASTER_GPIO is not set
CONFIG_W1_MASTER_SGI=m
# end of 1-wire Bus Masters

#
# 1-wire Slaves
#
CONFIG_W1_SLAVE_THERM=m
CONFIG_W1_SLAVE_SMEM=y
CONFIG_W1_SLAVE_DS2405=y
CONFIG_W1_SLAVE_DS2408=m
# CONFIG_W1_SLAVE_DS2408_READBACK is not set
CONFIG_W1_SLAVE_DS2413=m
CONFIG_W1_SLAVE_DS2406=y
# CONFIG_W1_SLAVE_DS2423 is not set
CONFIG_W1_SLAVE_DS2805=y
# CONFIG_W1_SLAVE_DS2430 is not set
CONFIG_W1_SLAVE_DS2431=y
# CONFIG_W1_SLAVE_DS2433 is not set
CONFIG_W1_SLAVE_DS2438=m
# CONFIG_W1_SLAVE_DS250X is not set
CONFIG_W1_SLAVE_DS2780=y
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS28E04=m
CONFIG_W1_SLAVE_DS28E17=m
# end of 1-wire Slaves

# CONFIG_POWER_RESET is not set
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
CONFIG_PDA_POWER=m
# CONFIG_GENERIC_ADC_BATTERY is not set
CONFIG_IP5XXX_POWER=m
CONFIG_MAX8925_POWER=y
CONFIG_WM831X_BACKUP=m
CONFIG_WM831X_POWER=y
CONFIG_WM8350_POWER=y
# CONFIG_TEST_POWER is not set
CONFIG_CHARGER_ADP5061=y
# CONFIG_BATTERY_CW2015 is not set
CONFIG_BATTERY_DS2760=m
CONFIG_BATTERY_DS2780=y
CONFIG_BATTERY_DS2781=m
# CONFIG_BATTERY_DS2782 is not set
# CONFIG_BATTERY_OLPC is not set
CONFIG_BATTERY_SAMSUNG_SDI=y
CONFIG_BATTERY_SBS=y
# CONFIG_CHARGER_SBS is not set
CONFIG_MANAGER_SBS=y
CONFIG_BATTERY_BQ27XXX=y
CONFIG_BATTERY_BQ27XXX_I2C=m
# CONFIG_BATTERY_BQ27XXX_HDQ is not set
CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM=y
CONFIG_BATTERY_DA9052=y
CONFIG_CHARGER_DA9150=m
# CONFIG_BATTERY_DA9150 is not set
CONFIG_CHARGER_AXP20X=y
CONFIG_BATTERY_AXP20X=m
CONFIG_AXP20X_POWER=y
CONFIG_AXP288_FUEL_GAUGE=m
CONFIG_BATTERY_MAX17040=m
CONFIG_BATTERY_MAX17042=y
CONFIG_BATTERY_MAX1721X=y
# CONFIG_BATTERY_TWL4030_MADC is not set
# CONFIG_BATTERY_RX51 is not set
CONFIG_CHARGER_MAX8903=m
CONFIG_CHARGER_TWL4030=m
# CONFIG_CHARGER_LP8727 is not set
CONFIG_CHARGER_GPIO=y
# CONFIG_CHARGER_MANAGER is not set
CONFIG_CHARGER_LT3651=m
CONFIG_CHARGER_LTC4162L=y
CONFIG_CHARGER_MAX14577=m
CONFIG_CHARGER_DETECTOR_MAX14656=m
CONFIG_CHARGER_MAX77650=m
CONFIG_CHARGER_MAX77693=m
CONFIG_CHARGER_MAX77976=m
# CONFIG_CHARGER_BQ2415X is not set
CONFIG_CHARGER_BQ24190=m
# CONFIG_CHARGER_BQ24257 is not set
CONFIG_CHARGER_BQ24735=m
# CONFIG_CHARGER_BQ2515X is not set
CONFIG_CHARGER_BQ25890=y
# CONFIG_CHARGER_BQ25980 is not set
CONFIG_CHARGER_BQ256XX=y
CONFIG_CHARGER_SMB347=y
CONFIG_CHARGER_TPS65217=m
CONFIG_BATTERY_GAUGE_LTC2941=m
CONFIG_BATTERY_GOLDFISH=y
CONFIG_BATTERY_RT5033=y
# CONFIG_CHARGER_RT9455 is not set
CONFIG_CHARGER_CROS_PCHG=m
CONFIG_CHARGER_UCS1002=m
CONFIG_CHARGER_BD99954=m
CONFIG_CHARGER_WILCO=m
CONFIG_RN5T618_POWER=y
CONFIG_BATTERY_UG3105=y
CONFIG_HWMON=m
CONFIG_HWMON_VID=m
# CONFIG_HWMON_DEBUG_CHIP is not set

#
# Native drivers
#
CONFIG_SENSORS_ABITUGURU=m
CONFIG_SENSORS_ABITUGURU3=m
CONFIG_SENSORS_AD7414=m
CONFIG_SENSORS_AD7418=m
CONFIG_SENSORS_ADM1025=m
# CONFIG_SENSORS_ADM1026 is not set
CONFIG_SENSORS_ADM1029=m
CONFIG_SENSORS_ADM1031=m
# CONFIG_SENSORS_ADM1177 is not set
CONFIG_SENSORS_ADM9240=m
CONFIG_SENSORS_ADT7X10=m
CONFIG_SENSORS_ADT7410=m
CONFIG_SENSORS_ADT7411=m
CONFIG_SENSORS_ADT7462=m
CONFIG_SENSORS_ADT7470=m
CONFIG_SENSORS_ADT7475=m
CONFIG_SENSORS_AHT10=m
CONFIG_SENSORS_AS370=m
# CONFIG_SENSORS_ASC7621 is not set
CONFIG_SENSORS_AXI_FAN_CONTROL=m
# CONFIG_SENSORS_K8TEMP is not set
# CONFIG_SENSORS_APPLESMC is not set
CONFIG_SENSORS_ASB100=m
CONFIG_SENSORS_ATXP1=m
# CONFIG_SENSORS_CORSAIR_CPRO is not set
# CONFIG_SENSORS_CORSAIR_PSU is not set
CONFIG_SENSORS_DRIVETEMP=m
CONFIG_SENSORS_DS620=m
# CONFIG_SENSORS_DS1621 is not set
CONFIG_SENSORS_DELL_SMM=m
CONFIG_I8K=y
# CONFIG_SENSORS_DA9052_ADC is not set
CONFIG_SENSORS_DA9055=m
CONFIG_SENSORS_I5K_AMB=m
CONFIG_SENSORS_F71805F=m
CONFIG_SENSORS_F71882FG=m
CONFIG_SENSORS_F75375S=m
CONFIG_SENSORS_GSC=m
CONFIG_SENSORS_FSCHMD=m
CONFIG_SENSORS_FTSTEUTATES=m
# CONFIG_SENSORS_GL518SM is not set
CONFIG_SENSORS_GL520SM=m
CONFIG_SENSORS_G760A=m
CONFIG_SENSORS_G762=m
CONFIG_SENSORS_GPIO_FAN=m
CONFIG_SENSORS_HIH6130=m
CONFIG_SENSORS_IBMAEM=m
CONFIG_SENSORS_IBMPEX=m
# CONFIG_SENSORS_IIO_HWMON is not set
CONFIG_SENSORS_I5500=m
CONFIG_SENSORS_CORETEMP=m
CONFIG_SENSORS_IT87=m
# CONFIG_SENSORS_JC42 is not set
# CONFIG_SENSORS_POWR1220 is not set
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LTC2945=m
CONFIG_SENSORS_LTC2947=m
CONFIG_SENSORS_LTC2947_I2C=m
CONFIG_SENSORS_LTC2990=m
# CONFIG_SENSORS_LTC2992 is not set
CONFIG_SENSORS_LTC4151=m
# CONFIG_SENSORS_LTC4215 is not set
# CONFIG_SENSORS_LTC4222 is not set
# CONFIG_SENSORS_LTC4245 is not set
CONFIG_SENSORS_LTC4260=m
CONFIG_SENSORS_LTC4261=m
CONFIG_SENSORS_MAX127=m
# CONFIG_SENSORS_MAX16065 is not set
CONFIG_SENSORS_MAX1619=m
CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX31730=m
# CONFIG_SENSORS_MAX31760 is not set
# CONFIG_SENSORS_MAX6620 is not set
CONFIG_SENSORS_MAX6621=m
# CONFIG_SENSORS_MAX6639 is not set
CONFIG_SENSORS_MAX6650=m
CONFIG_SENSORS_MAX6697=m
CONFIG_SENSORS_MAX31790=m
# CONFIG_SENSORS_MCP3021 is not set
CONFIG_SENSORS_MLXREG_FAN=m
# CONFIG_SENSORS_TC654 is not set
# CONFIG_SENSORS_TPS23861 is not set
CONFIG_SENSORS_MENF21BMC_HWMON=m
# CONFIG_SENSORS_MR75203 is not set
CONFIG_SENSORS_LM63=m
CONFIG_SENSORS_LM73=m
CONFIG_SENSORS_LM75=m
# CONFIG_SENSORS_LM77 is not set
CONFIG_SENSORS_LM78=m
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
CONFIG_SENSORS_LM85=m
CONFIG_SENSORS_LM87=m
CONFIG_SENSORS_LM90=m
# CONFIG_SENSORS_LM92 is not set
CONFIG_SENSORS_LM93=m
CONFIG_SENSORS_LM95234=m
CONFIG_SENSORS_LM95241=m
CONFIG_SENSORS_LM95245=m
CONFIG_SENSORS_PC87360=m
CONFIG_SENSORS_PC87427=m
# CONFIG_SENSORS_NTC_THERMISTOR is not set
CONFIG_SENSORS_NCT6683=m
CONFIG_SENSORS_NCT6775_CORE=m
CONFIG_SENSORS_NCT6775=m
CONFIG_SENSORS_NCT6775_I2C=m
CONFIG_SENSORS_NCT7802=m
CONFIG_SENSORS_NCT7904=m
CONFIG_SENSORS_NPCM7XX=m
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_PMBUS is not set
CONFIG_SENSORS_PWM_FAN=m
CONFIG_SENSORS_SBTSI=m
CONFIG_SENSORS_SBRMI=m
# CONFIG_SENSORS_SHT15 is not set
CONFIG_SENSORS_SHT21=m
# CONFIG_SENSORS_SHT3x is not set
CONFIG_SENSORS_SHT4x=m
CONFIG_SENSORS_SHTC1=m
CONFIG_SENSORS_SIS5595=m
CONFIG_SENSORS_SY7636A=m
CONFIG_SENSORS_DME1737=m
CONFIG_SENSORS_EMC1403=m
# CONFIG_SENSORS_EMC2103 is not set
CONFIG_SENSORS_EMC2305=m
CONFIG_SENSORS_EMC6W201=m
CONFIG_SENSORS_SMSC47M1=m
# CONFIG_SENSORS_SMSC47M192 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
CONFIG_SENSORS_SCH56XX_COMMON=m
CONFIG_SENSORS_SCH5627=m
# CONFIG_SENSORS_SCH5636 is not set
# CONFIG_SENSORS_STTS751 is not set
# CONFIG_SENSORS_SMM665 is not set
# CONFIG_SENSORS_ADC128D818 is not set
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_AMC6821=m
# CONFIG_SENSORS_INA209 is not set
# CONFIG_SENSORS_INA2XX is not set
# CONFIG_SENSORS_INA238 is not set
CONFIG_SENSORS_INA3221=m
CONFIG_SENSORS_TC74=m
CONFIG_SENSORS_THMC50=m
# CONFIG_SENSORS_TMP102 is not set
CONFIG_SENSORS_TMP103=m
# CONFIG_SENSORS_TMP108 is not set
CONFIG_SENSORS_TMP401=m
CONFIG_SENSORS_TMP421=m
CONFIG_SENSORS_TMP464=m
CONFIG_SENSORS_TMP513=m
CONFIG_SENSORS_VIA_CPUTEMP=m
CONFIG_SENSORS_VIA686A=m
CONFIG_SENSORS_VT1211=m
# CONFIG_SENSORS_VT8231 is not set
CONFIG_SENSORS_W83773G=m
CONFIG_SENSORS_W83781D=m
CONFIG_SENSORS_W83791D=m
# CONFIG_SENSORS_W83792D is not set
CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
# CONFIG_SENSORS_W83795_FANCTRL is not set
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
CONFIG_SENSORS_W83627HF=m
CONFIG_SENSORS_W83627EHF=m
CONFIG_SENSORS_WM831X=m
CONFIG_SENSORS_WM8350=m
CONFIG_SENSORS_XGENE=m

#
# ACPI drivers
#
CONFIG_SENSORS_ACPI_POWER=m
# CONFIG_SENSORS_ATK0110 is not set
CONFIG_SENSORS_ASUS_WMI=m
# CONFIG_SENSORS_ASUS_EC is not set
CONFIG_THERMAL=y
CONFIG_THERMAL_NETLINK=y
CONFIG_THERMAL_STATISTICS=y
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
CONFIG_THERMAL_OF=y
CONFIG_THERMAL_WRITABLE_TRIPS=y
# CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE is not set
CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
CONFIG_THERMAL_GOV_FAIR_SHARE=y
CONFIG_THERMAL_GOV_STEP_WISE=y
CONFIG_THERMAL_GOV_BANG_BANG=y
CONFIG_THERMAL_GOV_USER_SPACE=y
CONFIG_CPU_THERMAL=y
CONFIG_CPU_FREQ_THERMAL=y
CONFIG_DEVFREQ_THERMAL=y
# CONFIG_THERMAL_EMULATION is not set
CONFIG_THERMAL_MMIO=y

#
# Intel thermal drivers
#
CONFIG_INTEL_POWERCLAMP=m
CONFIG_X86_THERMAL_VECTOR=y
CONFIG_X86_PKG_TEMP_THERMAL=m
# CONFIG_INTEL_SOC_DTS_THERMAL is not set

#
# ACPI INT340X thermal drivers
#
# end of ACPI INT340X thermal drivers

# CONFIG_INTEL_PCH_THERMAL is not set
CONFIG_INTEL_TCC_COOLING=y
CONFIG_INTEL_MENLOW=m
CONFIG_INTEL_HFI_THERMAL=y
# end of Intel thermal drivers

CONFIG_GENERIC_ADC_THERMAL=y
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_CORE=y
# CONFIG_WATCHDOG_NOWAYOUT is not set
# CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED is not set
CONFIG_WATCHDOG_OPEN_TIMEOUT=0
CONFIG_WATCHDOG_SYSFS=y
CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT=y

#
# Watchdog Pretimeout Governors
#
CONFIG_WATCHDOG_PRETIMEOUT_GOV=y
CONFIG_WATCHDOG_PRETIMEOUT_GOV_SEL=m
# CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP is not set
CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=y
CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC=y

#
# Watchdog Device Drivers
#
# CONFIG_SOFT_WATCHDOG is not set
CONFIG_DA9052_WATCHDOG=m
CONFIG_DA9055_WATCHDOG=m
CONFIG_GPIO_WATCHDOG=y
# CONFIG_GPIO_WATCHDOG_ARCH_INITCALL is not set
CONFIG_MENF21BMC_WATCHDOG=m
# CONFIG_MENZ069_WATCHDOG is not set
CONFIG_WDAT_WDT=y
CONFIG_WM831X_WATCHDOG=m
CONFIG_WM8350_WATCHDOG=m
CONFIG_XILINX_WATCHDOG=y
CONFIG_ZIIRAVE_WATCHDOG=y
# CONFIG_MLX_WDT is not set
CONFIG_CADENCE_WATCHDOG=y
CONFIG_DW_WATCHDOG=y
# CONFIG_RN5T618_WATCHDOG is not set
CONFIG_TWL4030_WATCHDOG=m
# CONFIG_MAX63XX_WATCHDOG is not set
CONFIG_MAX77620_WATCHDOG=m
CONFIG_RETU_WATCHDOG=y
CONFIG_ACQUIRE_WDT=y
# CONFIG_ADVANTECH_WDT is not set
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_EBC_C384_WDT=y
# CONFIG_EXAR_WDT is not set
# CONFIG_F71808E_WDT is not set
# CONFIG_SP5100_TCO is not set
CONFIG_SBC_FITPC2_WATCHDOG=y
# CONFIG_EUROTECH_WDT is not set
CONFIG_IB700_WDT=y
CONFIG_IBMASR=y
CONFIG_WAFER_WDT=y
# CONFIG_I6300ESB_WDT is not set
# CONFIG_IE6XX_WDT is not set
# CONFIG_ITCO_WDT is not set
CONFIG_IT8712F_WDT=y
# CONFIG_IT87_WDT is not set
CONFIG_HP_WATCHDOG=y
# CONFIG_HPWDT_NMI_DECODING is not set
# CONFIG_KEMPLD_WDT is not set
CONFIG_SC1200_WDT=y
CONFIG_PC87413_WDT=y
CONFIG_NV_TCO=y
# CONFIG_60XX_WDT is not set
CONFIG_SBC8360_WDT=m
CONFIG_SBC7240_WDT=y
# CONFIG_CPU5_WDT is not set
CONFIG_SMSC_SCH311X_WDT=y
CONFIG_SMSC37B787_WDT=m
CONFIG_TQMX86_WDT=m
# CONFIG_VIA_WDT is not set
# CONFIG_W83627HF_WDT is not set
CONFIG_W83877F_WDT=m
CONFIG_W83977F_WDT=m
CONFIG_MACHZ_WDT=y
CONFIG_SBC_EPX_C3_WATCHDOG=m
CONFIG_INTEL_MEI_WDT=y
CONFIG_NI903X_WDT=m
CONFIG_NIC7018_WDT=y
CONFIG_SIEMENS_SIMATIC_IPC_WDT=m
CONFIG_MEN_A21_WDT=y

#
# PCI-based Watchdog Cards
#
CONFIG_PCIPCWATCHDOG=m
CONFIG_WDTPCI=m
CONFIG_SSB_POSSIBLE=y
CONFIG_SSB=m
CONFIG_SSB_PCIHOST_POSSIBLE=y
# CONFIG_SSB_PCIHOST is not set
CONFIG_SSB_DRIVER_GPIO=y
CONFIG_BCMA_POSSIBLE=y
CONFIG_BCMA=y
CONFIG_BCMA_HOST_PCI_POSSIBLE=y
CONFIG_BCMA_HOST_PCI=y
CONFIG_BCMA_HOST_SOC=y
CONFIG_BCMA_DRIVER_PCI=y
CONFIG_BCMA_SFLASH=y
CONFIG_BCMA_DRIVER_GMAC_CMN=y
# CONFIG_BCMA_DRIVER_GPIO is not set
CONFIG_BCMA_DEBUG=y

#
# Multifunction device drivers
#
CONFIG_MFD_CORE=y
# CONFIG_MFD_CS5535 is not set
# CONFIG_MFD_ACT8945A is not set
CONFIG_MFD_AS3711=y
CONFIG_MFD_AS3722=y
# CONFIG_PMIC_ADP5520 is not set
CONFIG_MFD_AAT2870_CORE=y
# CONFIG_MFD_ATMEL_FLEXCOM is not set
CONFIG_MFD_ATMEL_HLCDC=m
CONFIG_MFD_BCM590XX=y
CONFIG_MFD_BD9571MWV=y
CONFIG_MFD_AXP20X=y
CONFIG_MFD_AXP20X_I2C=y
CONFIG_MFD_CROS_EC_DEV=y
CONFIG_MFD_MADERA=y
CONFIG_MFD_MADERA_I2C=m
CONFIG_MFD_CS47L15=y
CONFIG_MFD_CS47L35=y
CONFIG_MFD_CS47L85=y
CONFIG_MFD_CS47L90=y
CONFIG_MFD_CS47L92=y
# CONFIG_PMIC_DA903X is not set
CONFIG_PMIC_DA9052=y
CONFIG_MFD_DA9052_I2C=y
CONFIG_MFD_DA9055=y
# CONFIG_MFD_DA9062 is not set
# CONFIG_MFD_DA9063 is not set
CONFIG_MFD_DA9150=y
CONFIG_MFD_GATEWORKS_GSC=m
# CONFIG_MFD_MC13XXX_I2C is not set
# CONFIG_MFD_MP2629 is not set
CONFIG_MFD_HI6421_PMIC=y
# CONFIG_MFD_HI6421_SPMI is not set
CONFIG_HTC_PASIC3=y
CONFIG_HTC_I2CPLD=y
# CONFIG_LPC_ICH is not set
CONFIG_LPC_SCH=y
# CONFIG_INTEL_SOC_PMIC_BXTWC is not set
CONFIG_INTEL_SOC_PMIC_MRFLD=m
# CONFIG_MFD_INTEL_LPSS_ACPI is not set
# CONFIG_MFD_INTEL_LPSS_PCI is not set
CONFIG_MFD_INTEL_PMC_BXT=y
CONFIG_MFD_IQS62X=y
# CONFIG_MFD_JANZ_CMODIO is not set
CONFIG_MFD_KEMPLD=y
CONFIG_MFD_88PM800=m
# CONFIG_MFD_88PM805 is not set
# CONFIG_MFD_88PM860X is not set
CONFIG_MFD_MAX14577=y
# CONFIG_MFD_MAX77620 is not set
CONFIG_MFD_MAX77650=y
CONFIG_MFD_MAX77686=m
CONFIG_MFD_MAX77693=m
CONFIG_MFD_MAX77714=y
# CONFIG_MFD_MAX77843 is not set
CONFIG_MFD_MAX8907=m
CONFIG_MFD_MAX8925=y
# CONFIG_MFD_MAX8997 is not set
# CONFIG_MFD_MAX8998 is not set
# CONFIG_MFD_MT6360 is not set
# CONFIG_MFD_MT6370 is not set
# CONFIG_MFD_MT6397 is not set
CONFIG_MFD_MENF21BMC=m
CONFIG_MFD_NTXEC=y
CONFIG_MFD_RETU=y
# CONFIG_MFD_PCF50633 is not set
CONFIG_MFD_SY7636A=m
CONFIG_MFD_RDC321X=y
CONFIG_MFD_RT4831=y
# CONFIG_MFD_RT5033 is not set
# CONFIG_MFD_RT5120 is not set
# CONFIG_MFD_RC5T583 is not set
# CONFIG_MFD_RK808 is not set
CONFIG_MFD_RN5T618=y
CONFIG_MFD_SEC_CORE=y
CONFIG_MFD_SI476X_CORE=y
CONFIG_MFD_SIMPLE_MFD_I2C=m
# CONFIG_MFD_SM501 is not set
# CONFIG_MFD_SKY81452 is not set
CONFIG_MFD_STMPE=y

#
# STMicroelectronics STMPE Interface Drivers
#
CONFIG_STMPE_I2C=y
# end of STMicroelectronics STMPE Interface Drivers

CONFIG_MFD_SYSCON=y
# CONFIG_MFD_TI_AM335X_TSCADC is not set
# CONFIG_MFD_LP3943 is not set
CONFIG_MFD_LP8788=y
# CONFIG_MFD_TI_LMU is not set
CONFIG_MFD_PALMAS=y
CONFIG_TPS6105X=m
# CONFIG_TPS65010 is not set
CONFIG_TPS6507X=m
CONFIG_MFD_TPS65086=m
# CONFIG_MFD_TPS65090 is not set
CONFIG_MFD_TPS65217=m
CONFIG_MFD_TI_LP873X=y
CONFIG_MFD_TI_LP87565=m
CONFIG_MFD_TPS65218=m
CONFIG_MFD_TPS6586X=y
CONFIG_MFD_TPS65910=y
CONFIG_MFD_TPS65912=y
CONFIG_MFD_TPS65912_I2C=y
CONFIG_TWL4030_CORE=y
CONFIG_MFD_TWL4030_AUDIO=y
# CONFIG_TWL6040_CORE is not set
CONFIG_MFD_WL1273_CORE=y
CONFIG_MFD_LM3533=m
# CONFIG_MFD_TIMBERDALE is not set
CONFIG_MFD_TC3589X=y
CONFIG_MFD_TQMX86=y
# CONFIG_MFD_VX855 is not set
# CONFIG_MFD_LOCHNAGAR is not set
CONFIG_MFD_ARIZONA=m
CONFIG_MFD_ARIZONA_I2C=m
CONFIG_MFD_CS47L24=y
# CONFIG_MFD_WM5102 is not set
CONFIG_MFD_WM5110=y
CONFIG_MFD_WM8997=y
# CONFIG_MFD_WM8998 is not set
# CONFIG_MFD_WM8400 is not set
CONFIG_MFD_WM831X=y
CONFIG_MFD_WM831X_I2C=y
CONFIG_MFD_WM8350=y
CONFIG_MFD_WM8350_I2C=y
# CONFIG_MFD_WM8994 is not set
CONFIG_MFD_ROHM_BD718XX=m
CONFIG_MFD_ROHM_BD71828=m
# CONFIG_MFD_ROHM_BD957XMUF is not set
# CONFIG_MFD_STPMIC1 is not set
CONFIG_MFD_STMFX=m
# CONFIG_MFD_ATC260X_I2C is not set
CONFIG_MFD_QCOM_PM8008=m
CONFIG_MFD_RSMU_I2C=m
# end of Multifunction device drivers

CONFIG_REGULATOR=y
# CONFIG_REGULATOR_DEBUG is not set
CONFIG_REGULATOR_FIXED_VOLTAGE=m
CONFIG_REGULATOR_VIRTUAL_CONSUMER=y
CONFIG_REGULATOR_USERSPACE_CONSUMER=y
CONFIG_REGULATOR_88PG86X=m
# CONFIG_REGULATOR_88PM800 is not set
CONFIG_REGULATOR_ACT8865=m
CONFIG_REGULATOR_AD5398=m
CONFIG_REGULATOR_AAT2870=m
CONFIG_REGULATOR_AS3711=y
CONFIG_REGULATOR_AS3722=y
CONFIG_REGULATOR_AXP20X=m
CONFIG_REGULATOR_BCM590XX=m
CONFIG_REGULATOR_BD71815=m
# CONFIG_REGULATOR_BD71828 is not set
CONFIG_REGULATOR_BD718XX=m
# CONFIG_REGULATOR_BD9571MWV is not set
CONFIG_REGULATOR_CROS_EC=y
CONFIG_REGULATOR_DA9052=y
CONFIG_REGULATOR_DA9055=y
CONFIG_REGULATOR_DA9121=m
# CONFIG_REGULATOR_DA9210 is not set
# CONFIG_REGULATOR_DA9211 is not set
CONFIG_REGULATOR_FAN53555=m
# CONFIG_REGULATOR_FAN53880 is not set
CONFIG_REGULATOR_GPIO=y
CONFIG_REGULATOR_HI6421=m
CONFIG_REGULATOR_HI6421V530=y
# CONFIG_REGULATOR_ISL9305 is not set
CONFIG_REGULATOR_ISL6271A=y
# CONFIG_REGULATOR_LP3971 is not set
# CONFIG_REGULATOR_LP3972 is not set
CONFIG_REGULATOR_LP872X=m
CONFIG_REGULATOR_LP873X=y
# CONFIG_REGULATOR_LP8755 is not set
CONFIG_REGULATOR_LP87565=m
CONFIG_REGULATOR_LP8788=y
CONFIG_REGULATOR_LTC3589=y
# CONFIG_REGULATOR_LTC3676 is not set
CONFIG_REGULATOR_MAX14577=m
CONFIG_REGULATOR_MAX1586=y
# CONFIG_REGULATOR_MAX77650 is not set
# CONFIG_REGULATOR_MAX8649 is not set
CONFIG_REGULATOR_MAX8660=m
# CONFIG_REGULATOR_MAX8893 is not set
CONFIG_REGULATOR_MAX8907=m
CONFIG_REGULATOR_MAX8925=y
CONFIG_REGULATOR_MAX8952=m
# CONFIG_REGULATOR_MAX8973 is not set
# CONFIG_REGULATOR_MAX20086 is not set
# CONFIG_REGULATOR_MAX77686 is not set
CONFIG_REGULATOR_MAX77693=m
CONFIG_REGULATOR_MAX77802=m
CONFIG_REGULATOR_MAX77826=y
CONFIG_REGULATOR_MCP16502=m
CONFIG_REGULATOR_MP5416=y
CONFIG_REGULATOR_MP8859=y
CONFIG_REGULATOR_MP886X=m
# CONFIG_REGULATOR_MPQ7920 is not set
CONFIG_REGULATOR_MT6311=y
CONFIG_REGULATOR_MT6315=m
# CONFIG_REGULATOR_PALMAS is not set
# CONFIG_REGULATOR_PCA9450 is not set
CONFIG_REGULATOR_PF8X00=m
CONFIG_REGULATOR_PFUZE100=y
# CONFIG_REGULATOR_PV88060 is not set
# CONFIG_REGULATOR_PV88080 is not set
# CONFIG_REGULATOR_PV88090 is not set
CONFIG_REGULATOR_PWM=y
CONFIG_REGULATOR_QCOM_SPMI=m
CONFIG_REGULATOR_QCOM_USB_VBUS=m
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=y
CONFIG_REGULATOR_RN5T618=y
CONFIG_REGULATOR_ROHM=m
CONFIG_REGULATOR_RT4801=y
CONFIG_REGULATOR_RT4831=m
CONFIG_REGULATOR_RT5190A=y
CONFIG_REGULATOR_RT5759=m
# CONFIG_REGULATOR_RT6160 is not set
# CONFIG_REGULATOR_RT6245 is not set
CONFIG_REGULATOR_RTQ2134=y
CONFIG_REGULATOR_RTMV20=y
# CONFIG_REGULATOR_RTQ6752 is not set
CONFIG_REGULATOR_S2MPA01=m
CONFIG_REGULATOR_S2MPS11=y
# CONFIG_REGULATOR_S5M8767 is not set
CONFIG_REGULATOR_SLG51000=y
# CONFIG_REGULATOR_SY7636A is not set
# CONFIG_REGULATOR_SY8106A is not set
CONFIG_REGULATOR_SY8824X=y
# CONFIG_REGULATOR_SY8827N is not set
CONFIG_REGULATOR_TPS51632=y
CONFIG_REGULATOR_TPS6105X=m
CONFIG_REGULATOR_TPS62360=y
# CONFIG_REGULATOR_TPS6286X is not set
# CONFIG_REGULATOR_TPS65023 is not set
# CONFIG_REGULATOR_TPS6507X is not set
CONFIG_REGULATOR_TPS65086=m
CONFIG_REGULATOR_TPS65132=m
CONFIG_REGULATOR_TPS65217=m
# CONFIG_REGULATOR_TPS65218 is not set
# CONFIG_REGULATOR_TPS6586X is not set
CONFIG_REGULATOR_TPS65910=y
CONFIG_REGULATOR_TPS65912=y
CONFIG_REGULATOR_TWL4030=y
CONFIG_REGULATOR_VCTRL=m
CONFIG_REGULATOR_WM831X=y
CONFIG_REGULATOR_WM8350=y
# CONFIG_REGULATOR_QCOM_LABIBB is not set
CONFIG_RC_CORE=y
# CONFIG_LIRC is not set
CONFIG_RC_MAP=y
CONFIG_RC_DECODERS=y
CONFIG_IR_IMON_DECODER=y
CONFIG_IR_JVC_DECODER=m
CONFIG_IR_MCE_KBD_DECODER=y
CONFIG_IR_NEC_DECODER=y
CONFIG_IR_RC5_DECODER=m
CONFIG_IR_RC6_DECODER=y
# CONFIG_IR_RCMM_DECODER is not set
# CONFIG_IR_SANYO_DECODER is not set
# CONFIG_IR_SHARP_DECODER is not set
CONFIG_IR_SONY_DECODER=y
# CONFIG_IR_XMP_DECODER is not set
# CONFIG_RC_DEVICES is not set
CONFIG_CEC_CORE=m
CONFIG_CEC_NOTIFIER=y

#
# CEC support
#
CONFIG_MEDIA_CEC_RC=y
# CONFIG_MEDIA_CEC_SUPPORT is not set
# end of CEC support

# CONFIG_MEDIA_SUPPORT is not set

#
# Graphics support
#
CONFIG_APERTURE_HELPERS=y
CONFIG_AGP=m
CONFIG_AGP_ALI=m
# CONFIG_AGP_ATI is not set
# CONFIG_AGP_AMD is not set
CONFIG_AGP_INTEL=m
CONFIG_AGP_NVIDIA=m
CONFIG_AGP_SIS=m
# CONFIG_AGP_SWORKS is not set
# CONFIG_AGP_VIA is not set
CONFIG_AGP_EFFICEON=m
CONFIG_INTEL_GTT=m
# CONFIG_VGA_SWITCHEROO is not set
CONFIG_DRM=m
CONFIG_DRM_MIPI_DSI=y
CONFIG_DRM_KMS_HELPER=m
CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS=y
CONFIG_DRM_DEBUG_MODESET_LOCK=y
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100
# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_DP_AUX_BUS=m
CONFIG_DRM_DISPLAY_HELPER=m
CONFIG_DRM_DISPLAY_DP_HELPER=y
CONFIG_DRM_DISPLAY_HDMI_HELPER=y
# CONFIG_DRM_DP_AUX_CHARDEV is not set
CONFIG_DRM_DP_CEC=y
CONFIG_DRM_TTM=m
CONFIG_DRM_VRAM_HELPER=m
CONFIG_DRM_TTM_HELPER=m
CONFIG_DRM_GEM_DMA_HELPER=m
CONFIG_DRM_GEM_SHMEM_HELPER=m
CONFIG_DRM_SCHED=m

#
# I2C encoder or helper chips
#
# CONFIG_DRM_I2C_CH7006 is not set
CONFIG_DRM_I2C_SIL164=m
CONFIG_DRM_I2C_NXP_TDA998X=m
# CONFIG_DRM_I2C_NXP_TDA9950 is not set
# end of I2C encoder or helper chips

#
# ARM devices
#
# end of ARM devices

# CONFIG_DRM_RADEON is not set
# CONFIG_DRM_AMDGPU is not set
# CONFIG_DRM_NOUVEAU is not set
# CONFIG_DRM_I915 is not set
CONFIG_DRM_VGEM=m
CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_FBCON is not set
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
CONFIG_DRM_GMA500=m
CONFIG_DRM_AST=m
CONFIG_DRM_MGAG200=m
CONFIG_DRM_RCAR_DW_HDMI=m
# CONFIG_DRM_RCAR_USE_LVDS is not set
# CONFIG_DRM_RCAR_MIPI_DSI is not set
CONFIG_DRM_QXL=m
CONFIG_DRM_PANEL=y

#
# Display Panels
#
# CONFIG_DRM_PANEL_ARM_VERSATILE is not set
# CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596 is not set
# CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0 is not set
# CONFIG_DRM_PANEL_BOE_HIMAX8279D is not set
# CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set
CONFIG_DRM_PANEL_DSI_CM=m
CONFIG_DRM_PANEL_LVDS=m
CONFIG_DRM_PANEL_SIMPLE=m
# CONFIG_DRM_PANEL_EDP is not set
CONFIG_DRM_PANEL_EBBG_FT8719=m
# CONFIG_DRM_PANEL_ELIDA_KD35T133 is not set
# CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02 is not set
CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
CONFIG_DRM_PANEL_ILITEK_ILI9881C=m
CONFIG_DRM_PANEL_INNOLUX_P079ZCA=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
CONFIG_DRM_PANEL_JDI_R63452=m
CONFIG_DRM_PANEL_KHADAS_TS050=m
# CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04 is not set
CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W=m
CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829=m
CONFIG_DRM_PANEL_NOVATEK_NT35510=m
# CONFIG_DRM_PANEL_NOVATEK_NT35560 is not set
CONFIG_DRM_PANEL_NOVATEK_NT35950=m
CONFIG_DRM_PANEL_NOVATEK_NT36672A=m
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO=m
CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS=m
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
CONFIG_DRM_PANEL_RAYDIUM_RM67191=m
CONFIG_DRM_PANEL_RAYDIUM_RM68200=m
CONFIG_DRM_PANEL_RONBO_RB070D30=m
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
CONFIG_DRM_PANEL_SAMSUNG_S6D16D0=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_DSI is not set
CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01=m
CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m
CONFIG_DRM_PANEL_SAMSUNG_SOFEF00=m
CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m
CONFIG_DRM_PANEL_SHARP_LS037V7DW01=m
CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m
CONFIG_DRM_PANEL_SHARP_LS060T1SX01=m
# CONFIG_DRM_PANEL_SITRONIX_ST7701 is not set
CONFIG_DRM_PANEL_SITRONIX_ST7703=m
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
CONFIG_DRM_PANEL_TDO_TL070WSH30=m
CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m
CONFIG_DRM_PANEL_VISIONOX_RM69299=m
CONFIG_DRM_PANEL_XINPENG_XPP055C272=m
# end of Display Panels

CONFIG_DRM_BRIDGE=y
CONFIG_DRM_PANEL_BRIDGE=y

#
# Display Interface Bridges
#
CONFIG_DRM_CDNS_DSI=m
CONFIG_DRM_CHIPONE_ICN6211=m
CONFIG_DRM_CHRONTEL_CH7033=m
# CONFIG_DRM_CROS_EC_ANX7688 is not set
CONFIG_DRM_DISPLAY_CONNECTOR=m
# CONFIG_DRM_ITE_IT6505 is not set
CONFIG_DRM_LONTIUM_LT8912B=m
CONFIG_DRM_LONTIUM_LT9211=m
CONFIG_DRM_LONTIUM_LT9611=m
CONFIG_DRM_LONTIUM_LT9611UXC=m
CONFIG_DRM_ITE_IT66121=m
# CONFIG_DRM_LVDS_CODEC is not set
CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW=m
# CONFIG_DRM_NXP_PTN3460 is not set
# CONFIG_DRM_PARADE_PS8622 is not set
CONFIG_DRM_PARADE_PS8640=m
CONFIG_DRM_SIL_SII8620=m
# CONFIG_DRM_SII902X is not set
CONFIG_DRM_SII9234=m
CONFIG_DRM_SIMPLE_BRIDGE=m
# CONFIG_DRM_THINE_THC63LVD1024 is not set
# CONFIG_DRM_TOSHIBA_TC358762 is not set
CONFIG_DRM_TOSHIBA_TC358764=m
# CONFIG_DRM_TOSHIBA_TC358767 is not set
CONFIG_DRM_TOSHIBA_TC358768=m
CONFIG_DRM_TOSHIBA_TC358775=m
# CONFIG_DRM_TI_DLPC3433 is not set
CONFIG_DRM_TI_TFP410=m
# CONFIG_DRM_TI_SN65DSI83 is not set
CONFIG_DRM_TI_SN65DSI86=m
# CONFIG_DRM_TI_TPD12S015 is not set
# CONFIG_DRM_ANALOGIX_ANX6345 is not set
CONFIG_DRM_ANALOGIX_ANX78XX=m
CONFIG_DRM_ANALOGIX_DP=m
# CONFIG_DRM_ANALOGIX_ANX7625 is not set
CONFIG_DRM_I2C_ADV7511=m
CONFIG_DRM_I2C_ADV7511_CEC=y
# CONFIG_DRM_CDNS_MHDP8546 is not set
CONFIG_DRM_DW_HDMI=m
CONFIG_DRM_DW_HDMI_CEC=m
# end of Display Interface Bridges

CONFIG_DRM_ETNAVIV=m
CONFIG_DRM_ETNAVIV_THERMAL=y
CONFIG_DRM_LOGICVC=m
CONFIG_DRM_ARCPGU=m
CONFIG_DRM_BOCHS=m
CONFIG_DRM_CIRRUS_QEMU=m
CONFIG_DRM_SIMPLEDRM=m
CONFIG_DRM_VBOXVIDEO=m
CONFIG_DRM_SSD130X=m
# CONFIG_DRM_SSD130X_I2C is not set
CONFIG_DRM_LEGACY=y
# CONFIG_DRM_TDFX is not set
CONFIG_DRM_R128=m
# CONFIG_DRM_I810 is not set
# CONFIG_DRM_MGA is not set
CONFIG_DRM_SIS=m
# CONFIG_DRM_VIA is not set
CONFIG_DRM_SAVAGE=m
CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=m
CONFIG_DRM_NOMODESET=y
CONFIG_DRM_PRIVACY_SCREEN=y

#
# Frame buffer Devices
#
CONFIG_FB_CMDLINE=y
CONFIG_FB_NOTIFY=y
CONFIG_FB=m
CONFIG_FIRMWARE_EDID=y
CONFIG_FB_DDC=m
CONFIG_FB_CFB_FILLRECT=m
CONFIG_FB_CFB_COPYAREA=m
CONFIG_FB_CFB_IMAGEBLIT=m
CONFIG_FB_SYS_FILLRECT=m
CONFIG_FB_SYS_COPYAREA=m
CONFIG_FB_SYS_IMAGEBLIT=m
CONFIG_FB_FOREIGN_ENDIAN=y
# CONFIG_FB_BOTH_ENDIAN is not set
CONFIG_FB_BIG_ENDIAN=y
# CONFIG_FB_LITTLE_ENDIAN is not set
CONFIG_FB_SYS_FOPS=m
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_HECUBA=m
CONFIG_FB_BACKLIGHT=m
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y

#
# Frame buffer hardware drivers
#
CONFIG_FB_CIRRUS=m
CONFIG_FB_PM2=m
# CONFIG_FB_PM2_FIFO_DISCONNECT is not set
CONFIG_FB_CYBER2000=m
CONFIG_FB_CYBER2000_DDC=y
CONFIG_FB_ARC=m
# CONFIG_FB_VGA16 is not set
CONFIG_FB_UVESA=m
CONFIG_FB_N411=m
CONFIG_FB_HGA=m
CONFIG_FB_OPENCORES=m
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_NVIDIA=m
CONFIG_FB_NVIDIA_I2C=y
CONFIG_FB_NVIDIA_DEBUG=y
CONFIG_FB_NVIDIA_BACKLIGHT=y
# CONFIG_FB_RIVA is not set
CONFIG_FB_I740=m
CONFIG_FB_I810=m
# CONFIG_FB_I810_GTF is not set
CONFIG_FB_LE80578=m
# CONFIG_FB_CARILLO_RANCH is not set
CONFIG_FB_INTEL=m
CONFIG_FB_INTEL_DEBUG=y
# CONFIG_FB_INTEL_I2C is not set
CONFIG_FB_MATROX=m
CONFIG_FB_MATROX_MILLENIUM=y
CONFIG_FB_MATROX_MYSTIQUE=y
CONFIG_FB_MATROX_G=y
CONFIG_FB_MATROX_I2C=m
CONFIG_FB_MATROX_MAVEN=m
# CONFIG_FB_RADEON is not set
CONFIG_FB_ATY128=m
# CONFIG_FB_ATY128_BACKLIGHT is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_S3 is not set
# CONFIG_FB_SAVAGE is not set
# CONFIG_FB_SIS is not set
CONFIG_FB_VIA=m
CONFIG_FB_VIA_DIRECT_PROCFS=y
# CONFIG_FB_VIA_X_COMPATIBILITY is not set
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_VT8623 is not set
CONFIG_FB_TRIDENT=m
# CONFIG_FB_ARK is not set
CONFIG_FB_PM3=m
CONFIG_FB_CARMINE=m
# CONFIG_FB_CARMINE_DRAM_EVAL is not set
CONFIG_CARMINE_DRAM_CUSTOM=y
# CONFIG_FB_GEODE is not set
CONFIG_FB_IBM_GXT4500=m
# CONFIG_FB_GOLDFISH is not set
# CONFIG_FB_VIRTUAL is not set
CONFIG_FB_METRONOME=m
CONFIG_FB_MB862XX=m
CONFIG_FB_MB862XX_PCI_GDC=y
# CONFIG_FB_MB862XX_I2C is not set
# CONFIG_FB_SIMPLE is not set
CONFIG_FB_SSD1307=m
# CONFIG_FB_SM712 is not set
# end of Frame buffer Devices

#
# Backlight & LCD device support
#
CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_PLATFORM=m
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_KTD253=m
CONFIG_BACKLIGHT_LM3533=m
# CONFIG_BACKLIGHT_CARILLO_RANCH is not set
CONFIG_BACKLIGHT_PWM=m
CONFIG_BACKLIGHT_DA9052=m
CONFIG_BACKLIGHT_MAX8925=m
# CONFIG_BACKLIGHT_APPLE is not set
CONFIG_BACKLIGHT_QCOM_WLED=y
CONFIG_BACKLIGHT_RT4831=y
CONFIG_BACKLIGHT_SAHARA=m
# CONFIG_BACKLIGHT_WM831X is not set
# CONFIG_BACKLIGHT_ADP8860 is not set
# CONFIG_BACKLIGHT_ADP8870 is not set
# CONFIG_BACKLIGHT_AAT2870 is not set
# CONFIG_BACKLIGHT_LM3630A is not set
CONFIG_BACKLIGHT_LM3639=y
# CONFIG_BACKLIGHT_LP855X is not set
CONFIG_BACKLIGHT_LP8788=m
# CONFIG_BACKLIGHT_PANDORA is not set
# CONFIG_BACKLIGHT_TPS65217 is not set
CONFIG_BACKLIGHT_AS3711=y
CONFIG_BACKLIGHT_GPIO=y
# CONFIG_BACKLIGHT_LV5207LP is not set
CONFIG_BACKLIGHT_BD6107=m
CONFIG_BACKLIGHT_ARCXCNN=m
# CONFIG_BACKLIGHT_LED is not set
# end of Backlight & LCD device support

CONFIG_VGASTATE=m
CONFIG_VIDEOMODE_HELPERS=y
CONFIG_HDMI=y
# CONFIG_LOGO is not set
# end of Graphics support

CONFIG_SOUND=m
# CONFIG_SND is not set

#
# HID support
#
CONFIG_HID=y
CONFIG_HID_BATTERY_STRENGTH=y
# CONFIG_HIDRAW is not set
CONFIG_UHID=m
CONFIG_HID_GENERIC=y

#
# Special HID drivers
#
CONFIG_HID_A4TECH=m
# CONFIG_HID_ACRUX is not set
CONFIG_HID_APPLE=y
# CONFIG_HID_AUREAL is not set
# CONFIG_HID_BELKIN is not set
# CONFIG_HID_CHERRY is not set
CONFIG_HID_COUGAR=y
CONFIG_HID_MACALLY=y
# CONFIG_HID_CMEDIA is not set
CONFIG_HID_CYPRESS=m
CONFIG_HID_DRAGONRISE=y
# CONFIG_DRAGONRISE_FF is not set
CONFIG_HID_EMS_FF=y
CONFIG_HID_ELECOM=m
CONFIG_HID_EZKEY=m
CONFIG_HID_GEMBIRD=y
CONFIG_HID_GFRM=y
CONFIG_HID_GLORIOUS=m
# CONFIG_HID_VIVALDI is not set
CONFIG_HID_KEYTOUCH=y
CONFIG_HID_KYE=y
CONFIG_HID_WALTOP=m
CONFIG_HID_VIEWSONIC=y
CONFIG_HID_VRC2=y
# CONFIG_HID_XIAOMI is not set
CONFIG_HID_GYRATION=m
# CONFIG_HID_ICADE is not set
# CONFIG_HID_ITE is not set
CONFIG_HID_JABRA=y
CONFIG_HID_TWINHAN=m
# CONFIG_HID_KENSINGTON is not set
CONFIG_HID_LCPOWER=y
CONFIG_HID_LED=y
CONFIG_HID_LENOVO=m
# CONFIG_HID_MAGICMOUSE is not set
CONFIG_HID_MALTRON=m
CONFIG_HID_MAYFLASH=m
CONFIG_HID_REDRAGON=y
CONFIG_HID_MICROSOFT=y
CONFIG_HID_MONTEREY=y
CONFIG_HID_MULTITOUCH=m
# CONFIG_HID_NINTENDO is not set
CONFIG_HID_NTI=m
CONFIG_HID_ORTEK=m
# CONFIG_HID_PANTHERLORD is not set
CONFIG_HID_PETALYNX=y
CONFIG_HID_PICOLCD=y
CONFIG_HID_PICOLCD_BACKLIGHT=y
# CONFIG_HID_PICOLCD_LCD is not set
CONFIG_HID_PICOLCD_LEDS=y
# CONFIG_HID_PICOLCD_CIR is not set
CONFIG_HID_PLANTRONICS=y
CONFIG_HID_PLAYSTATION=m
CONFIG_PLAYSTATION_FF=y
CONFIG_HID_PXRC=y
# CONFIG_HID_RAZER is not set
# CONFIG_HID_PRIMAX is not set
CONFIG_HID_SAITEK=m
CONFIG_HID_SEMITEK=m
CONFIG_HID_SPEEDLINK=m
# CONFIG_HID_STEAM is not set
CONFIG_HID_STEELSERIES=y
CONFIG_HID_SUNPLUS=y
CONFIG_HID_RMI=m
# CONFIG_HID_GREENASIA is not set
# CONFIG_HID_SMARTJOYPLUS is not set
CONFIG_HID_TIVO=m
CONFIG_HID_TOPSEED=m
# CONFIG_HID_TOPRE is not set
CONFIG_HID_THINGM=y
# CONFIG_HID_UDRAW_PS3 is not set
CONFIG_HID_WIIMOTE=m
CONFIG_HID_XINMO=y
# CONFIG_HID_ZEROPLUS is not set
CONFIG_HID_ZYDACRON=m
# CONFIG_HID_SENSOR_HUB is not set
CONFIG_HID_ALPS=y
# end of Special HID drivers

#
# I2C HID support
#
CONFIG_I2C_HID_ACPI=y
CONFIG_I2C_HID_OF=m
CONFIG_I2C_HID_OF_ELAN=y
CONFIG_I2C_HID_OF_GOODIX=y
# end of I2C HID support

CONFIG_I2C_HID_CORE=y
# end of HID support

CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_SUPPORT=y
# CONFIG_USB_ULPI_BUS is not set
# CONFIG_USB_CONN_GPIO is not set
CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_USB is not set
CONFIG_USB_PCI=y

#
# USB port drivers
#

#
# USB Physical Layer drivers
#
# CONFIG_NOP_USB_XCEIV is not set
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_TAHVO_USB is not set
# end of USB Physical Layer drivers

# CONFIG_USB_GADGET is not set
# CONFIG_TYPEC is not set
# CONFIG_USB_ROLE_SWITCH is not set
# CONFIG_MMC is not set
CONFIG_SCSI_UFSHCD=m
CONFIG_SCSI_UFS_BSG=y
# CONFIG_SCSI_UFS_HPB is not set
# CONFIG_SCSI_UFS_HWMON is not set
CONFIG_SCSI_UFSHCD_PCI=m
CONFIG_SCSI_UFS_DWC_TC_PCI=m
CONFIG_SCSI_UFSHCD_PLATFORM=m
# CONFIG_SCSI_UFS_CDNS_PLATFORM is not set
CONFIG_SCSI_UFS_DWC_TC_PLATFORM=m
CONFIG_MEMSTICK=y
# CONFIG_MEMSTICK_DEBUG is not set

#
# MemoryStick drivers
#
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
CONFIG_MSPRO_BLOCK=m
CONFIG_MS_BLOCK=m

#
# MemoryStick Host Controller Drivers
#
CONFIG_MEMSTICK_TIFM_MS=y
CONFIG_MEMSTICK_JMICRON_38X=m
# CONFIG_MEMSTICK_R592 is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
CONFIG_LEDS_CLASS_FLASH=y
CONFIG_LEDS_CLASS_MULTICOLOR=y
# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set

#
# LED drivers
#
# CONFIG_LEDS_AN30259A is not set
CONFIG_LEDS_APU=m
CONFIG_LEDS_AW2013=m
# CONFIG_LEDS_BCM6328 is not set
# CONFIG_LEDS_BCM6358 is not set
CONFIG_LEDS_LM3530=m
CONFIG_LEDS_LM3532=m
# CONFIG_LEDS_LM3533 is not set
CONFIG_LEDS_LM3642=m
CONFIG_LEDS_LM3692X=m
CONFIG_LEDS_PCA9532=y
# CONFIG_LEDS_PCA9532_GPIO is not set
CONFIG_LEDS_GPIO=m
CONFIG_LEDS_LP3944=y
# CONFIG_LEDS_LP3952 is not set
CONFIG_LEDS_LP50XX=m
CONFIG_LEDS_LP55XX_COMMON=m
CONFIG_LEDS_LP5521=m
# CONFIG_LEDS_LP5523 is not set
CONFIG_LEDS_LP5562=m
# CONFIG_LEDS_LP8501 is not set
CONFIG_LEDS_LP8788=y
# CONFIG_LEDS_LP8860 is not set
CONFIG_LEDS_PCA955X=m
CONFIG_LEDS_PCA955X_GPIO=y
# CONFIG_LEDS_PCA963X is not set
# CONFIG_LEDS_WM831X_STATUS is not set
# CONFIG_LEDS_WM8350 is not set
CONFIG_LEDS_DA9052=y
# CONFIG_LEDS_PWM is not set
CONFIG_LEDS_REGULATOR=y
# CONFIG_LEDS_BD2802 is not set
CONFIG_LEDS_INTEL_SS4200=y
# CONFIG_LEDS_LT3593 is not set
CONFIG_LEDS_TCA6507=y
CONFIG_LEDS_TLC591XX=y
CONFIG_LEDS_MAX77650=y
CONFIG_LEDS_LM355x=y
CONFIG_LEDS_OT200=y
# CONFIG_LEDS_MENF21BMC is not set
CONFIG_LEDS_IS31FL319X=m
CONFIG_LEDS_IS31FL32XX=y

#
# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
#
CONFIG_LEDS_BLINKM=y
CONFIG_LEDS_SYSCON=y
CONFIG_LEDS_MLXCPLD=y
# CONFIG_LEDS_MLXREG is not set
CONFIG_LEDS_USER=y
CONFIG_LEDS_NIC78BX=m
# CONFIG_LEDS_TI_LMU_COMMON is not set
# CONFIG_LEDS_TPS6105X is not set
CONFIG_LEDS_LGM=y

#
# Flash and Torch LED drivers
#
# CONFIG_LEDS_AAT1290 is not set
CONFIG_LEDS_AS3645A=y
CONFIG_LEDS_KTD2692=m
# CONFIG_LEDS_LM3601X is not set
# CONFIG_LEDS_MAX77693 is not set
CONFIG_LEDS_RT4505=y
CONFIG_LEDS_RT8515=m
CONFIG_LEDS_SGM3140=m

#
# RGB LED drivers
#
CONFIG_LEDS_PWM_MULTICOLOR=y
CONFIG_LEDS_QCOM_LPG=m

#
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_ONESHOT=m
# CONFIG_LEDS_TRIGGER_DISK is not set
CONFIG_LEDS_TRIGGER_HEARTBEAT=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CPU=y
# CONFIG_LEDS_TRIGGER_ACTIVITY is not set
# CONFIG_LEDS_TRIGGER_GPIO is not set
# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set

#
# iptables trigger is under Netfilter config (LED target)
#
# CONFIG_LEDS_TRIGGER_TRANSIENT is not set
# CONFIG_LEDS_TRIGGER_CAMERA is not set
CONFIG_LEDS_TRIGGER_PANIC=y
CONFIG_LEDS_TRIGGER_NETDEV=m
CONFIG_LEDS_TRIGGER_PATTERN=y
CONFIG_LEDS_TRIGGER_AUDIO=m
CONFIG_LEDS_TRIGGER_TTY=y

#
# Simple LED drivers
#
CONFIG_LEDS_SIEMENS_SIMATIC_IPC=m
CONFIG_ACCESSIBILITY=y

#
# Speakup console speech
#
# end of Speakup console speech

# CONFIG_INFINIBAND is not set
CONFIG_EDAC_ATOMIC_SCRUB=y
CONFIG_EDAC_SUPPORT=y
CONFIG_RTC_LIB=y
CONFIG_RTC_MC146818_LIB=y
CONFIG_RTC_CLASS=y
# CONFIG_RTC_HCTOSYS is not set
CONFIG_RTC_SYSTOHC=y
CONFIG_RTC_SYSTOHC_DEVICE="rtc0"
CONFIG_RTC_DEBUG=y
CONFIG_RTC_NVMEM=y

#
# RTC interfaces
#
# CONFIG_RTC_INTF_SYSFS is not set
CONFIG_RTC_INTF_PROC=y
# CONFIG_RTC_INTF_DEV is not set
# CONFIG_RTC_DRV_TEST is not set

#
# I2C RTC drivers
#
CONFIG_RTC_DRV_88PM80X=m
# CONFIG_RTC_DRV_ABB5ZES3 is not set
CONFIG_RTC_DRV_ABEOZ9=y
CONFIG_RTC_DRV_ABX80X=y
# CONFIG_RTC_DRV_AS3722 is not set
# CONFIG_RTC_DRV_DS1307 is not set
CONFIG_RTC_DRV_DS1374=y
CONFIG_RTC_DRV_DS1374_WDT=y
CONFIG_RTC_DRV_DS1672=y
CONFIG_RTC_DRV_HYM8563=m
CONFIG_RTC_DRV_LP8788=m
CONFIG_RTC_DRV_MAX6900=y
# CONFIG_RTC_DRV_MAX8907 is not set
CONFIG_RTC_DRV_MAX8925=m
CONFIG_RTC_DRV_MAX77686=y
CONFIG_RTC_DRV_NCT3018Y=y
CONFIG_RTC_DRV_RS5C372=m
# CONFIG_RTC_DRV_ISL1208 is not set
# CONFIG_RTC_DRV_ISL12022 is not set
CONFIG_RTC_DRV_ISL12026=m
# CONFIG_RTC_DRV_X1205 is not set
CONFIG_RTC_DRV_PCF8523=m
# CONFIG_RTC_DRV_PCF85063 is not set
CONFIG_RTC_DRV_PCF85363=y
# CONFIG_RTC_DRV_PCF8563 is not set
CONFIG_RTC_DRV_PCF8583=y
CONFIG_RTC_DRV_M41T80=m
CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_BD70528=m
# CONFIG_RTC_DRV_BQ32K is not set
CONFIG_RTC_DRV_TWL4030=y
# CONFIG_RTC_DRV_PALMAS is not set
# CONFIG_RTC_DRV_TPS6586X is not set
CONFIG_RTC_DRV_TPS65910=y
CONFIG_RTC_DRV_RC5T619=y
CONFIG_RTC_DRV_S35390A=m
# CONFIG_RTC_DRV_FM3130 is not set
# CONFIG_RTC_DRV_RX8010 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_RX8025 is not set
CONFIG_RTC_DRV_EM3027=m
# CONFIG_RTC_DRV_RV3028 is not set
# CONFIG_RTC_DRV_RV3032 is not set
# CONFIG_RTC_DRV_RV8803 is not set
# CONFIG_RTC_DRV_S5M is not set
CONFIG_RTC_DRV_SD3078=m

#
# SPI RTC drivers
#
CONFIG_RTC_I2C_AND_SPI=y

#
# SPI and I2C RTC drivers
#
CONFIG_RTC_DRV_DS3232=m
CONFIG_RTC_DRV_DS3232_HWMON=y
CONFIG_RTC_DRV_PCF2127=y
CONFIG_RTC_DRV_RV3029C2=y
# CONFIG_RTC_DRV_RX6110 is not set

#
# Platform RTC drivers
#
CONFIG_RTC_DRV_CMOS=y
# CONFIG_RTC_DRV_DS1286 is not set
CONFIG_RTC_DRV_DS1511=m
# CONFIG_RTC_DRV_DS1553 is not set
CONFIG_RTC_DRV_DS1685_FAMILY=y
# CONFIG_RTC_DRV_DS1685 is not set
CONFIG_RTC_DRV_DS1689=y
# CONFIG_RTC_DRV_DS17285 is not set
# CONFIG_RTC_DRV_DS17485 is not set
# CONFIG_RTC_DRV_DS17885 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_DS2404 is not set
CONFIG_RTC_DRV_DA9052=m
# CONFIG_RTC_DRV_DA9055 is not set
CONFIG_RTC_DRV_STK17TA8=m
CONFIG_RTC_DRV_M48T86=y
CONFIG_RTC_DRV_M48T35=y
# CONFIG_RTC_DRV_M48T59 is not set
CONFIG_RTC_DRV_MSM6242=y
CONFIG_RTC_DRV_BQ4802=m
# CONFIG_RTC_DRV_RP5C01 is not set
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_WM831X=y
CONFIG_RTC_DRV_WM8350=y
CONFIG_RTC_DRV_ZYNQMP=m
CONFIG_RTC_DRV_CROS_EC=m
CONFIG_RTC_DRV_NTXEC=y

#
# on-CPU RTC drivers
#
# CONFIG_RTC_DRV_CADENCE is not set
CONFIG_RTC_DRV_FTRTC010=m
# CONFIG_RTC_DRV_R7301 is not set

#
# HID Sensor RTC drivers
#
CONFIG_RTC_DRV_GOLDFISH=m
CONFIG_RTC_DRV_WILCO_EC=m
CONFIG_DMADEVICES=y
CONFIG_DMADEVICES_DEBUG=y
CONFIG_DMADEVICES_VDEBUG=y

#
# DMA Devices
#
CONFIG_DMA_ENGINE=y
CONFIG_DMA_VIRTUAL_CHANNELS=y
CONFIG_DMA_ACPI=y
CONFIG_DMA_OF=y
CONFIG_ALTERA_MSGDMA=m
# CONFIG_DW_AXI_DMAC is not set
# CONFIG_FSL_EDMA is not set
# CONFIG_INTEL_IDMA64 is not set
CONFIG_PCH_DMA=m
CONFIG_PLX_DMA=m
CONFIG_XILINX_ZYNQMP_DPDMA=y
CONFIG_QCOM_HIDMA_MGMT=y
CONFIG_QCOM_HIDMA=m
CONFIG_DW_DMAC_CORE=y
# CONFIG_DW_DMAC is not set
CONFIG_DW_DMAC_PCI=y
CONFIG_DW_EDMA=y
CONFIG_DW_EDMA_PCIE=y
CONFIG_SF_PDMA=y
# CONFIG_INTEL_LDMA is not set

#
# DMA Clients
#
CONFIG_ASYNC_TX_DMA=y
CONFIG_DMATEST=y
CONFIG_DMA_ENGINE_RAID=y

#
# DMABUF options
#
CONFIG_SYNC_FILE=y
CONFIG_SW_SYNC=y
# CONFIG_UDMABUF is not set
CONFIG_DMABUF_MOVE_NOTIFY=y
# CONFIG_DMABUF_DEBUG is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_HEAPS=y
CONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_HEAPS_SYSTEM is not set
# CONFIG_DMABUF_HEAPS_CMA is not set
# end of DMABUF options

CONFIG_AUXDISPLAY=y
CONFIG_CHARLCD=y
CONFIG_LINEDISP=y
CONFIG_HD44780_COMMON=m
# CONFIG_HD44780 is not set
CONFIG_IMG_ASCII_LCD=y
CONFIG_HT16K33=m
CONFIG_LCD2S=y
CONFIG_PARPORT_PANEL=m
CONFIG_PANEL_PARPORT=0
CONFIG_PANEL_PROFILE=5
CONFIG_PANEL_CHANGE_MESSAGE=y
CONFIG_PANEL_BOOT_MESSAGE=""
# CONFIG_CHARLCD_BL_OFF is not set
# CONFIG_CHARLCD_BL_ON is not set
CONFIG_CHARLCD_BL_FLASH=y
CONFIG_PANEL=m
CONFIG_UIO=y
# CONFIG_UIO_CIF is not set
CONFIG_UIO_PDRV_GENIRQ=m
# CONFIG_UIO_DMEM_GENIRQ is not set
CONFIG_UIO_AEC=m
CONFIG_UIO_SERCOS3=y
CONFIG_UIO_PCI_GENERIC=y
CONFIG_UIO_NETX=y
CONFIG_UIO_PRUSS=y
CONFIG_UIO_MF624=y
CONFIG_VFIO=m
CONFIG_VFIO_IOMMU_TYPE1=m
CONFIG_VFIO_VIRQFD=m
# CONFIG_VFIO_NOIOMMU is not set
CONFIG_VFIO_PCI_CORE=m
CONFIG_VFIO_PCI_MMAP=y
CONFIG_VFIO_PCI_INTX=y
CONFIG_VFIO_PCI=m
# CONFIG_VFIO_PCI_VGA is not set
CONFIG_VFIO_PCI_IGD=y
# CONFIG_VFIO_MDEV is not set
CONFIG_IRQ_BYPASS_MANAGER=m
CONFIG_VIRT_DRIVERS=y
CONFIG_VMGENID=m
CONFIG_VBOXGUEST=m
# CONFIG_NITRO_ENCLAVES is not set
CONFIG_VIRTIO_ANCHOR=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_PCI_LIB=m
CONFIG_VIRTIO_PCI_LIB_LEGACY=m
# CONFIG_VIRTIO_MENU is not set
CONFIG_VDPA=m
CONFIG_VDPA_USER=m
CONFIG_IFCVF=m
CONFIG_VP_VDPA=m
CONFIG_ALIBABA_ENI_VDPA=m
CONFIG_VHOST_IOTLB=m
# CONFIG_VHOST_MENU is not set

#
# Microsoft Hyper-V guest support
#
# CONFIG_HYPERV is not set
# end of Microsoft Hyper-V guest support

# CONFIG_GREYBUS is not set
CONFIG_COMEDI=m
CONFIG_COMEDI_DEBUG=y
CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048
CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480
CONFIG_COMEDI_MISC_DRIVERS=y
CONFIG_COMEDI_BOND=m
# CONFIG_COMEDI_TEST is not set
CONFIG_COMEDI_PARPORT=m
CONFIG_COMEDI_SSV_DNP=m
# CONFIG_COMEDI_ISA_DRIVERS is not set
CONFIG_COMEDI_PCI_DRIVERS=m
# CONFIG_COMEDI_8255_PCI is not set
CONFIG_COMEDI_ADDI_WATCHDOG=m
CONFIG_COMEDI_ADDI_APCI_1032=m
CONFIG_COMEDI_ADDI_APCI_1500=m
CONFIG_COMEDI_ADDI_APCI_1516=m
CONFIG_COMEDI_ADDI_APCI_1564=m
CONFIG_COMEDI_ADDI_APCI_16XX=m
CONFIG_COMEDI_ADDI_APCI_2032=m
CONFIG_COMEDI_ADDI_APCI_2200=m
# CONFIG_COMEDI_ADDI_APCI_3120 is not set
CONFIG_COMEDI_ADDI_APCI_3501=m
CONFIG_COMEDI_ADDI_APCI_3XXX=m
CONFIG_COMEDI_ADL_PCI6208=m
CONFIG_COMEDI_ADL_PCI7X3X=m
CONFIG_COMEDI_ADL_PCI8164=m
# CONFIG_COMEDI_ADL_PCI9111 is not set
CONFIG_COMEDI_ADL_PCI9118=m
CONFIG_COMEDI_ADV_PCI1710=m
CONFIG_COMEDI_ADV_PCI1720=m
# CONFIG_COMEDI_ADV_PCI1723 is not set
CONFIG_COMEDI_ADV_PCI1724=m
CONFIG_COMEDI_ADV_PCI1760=m
CONFIG_COMEDI_ADV_PCI_DIO=m
# CONFIG_COMEDI_AMPLC_DIO200_PCI is not set
# CONFIG_COMEDI_AMPLC_PC236_PCI is not set
# CONFIG_COMEDI_AMPLC_PC263_PCI is not set
CONFIG_COMEDI_AMPLC_PCI224=m
# CONFIG_COMEDI_AMPLC_PCI230 is not set
CONFIG_COMEDI_CONTEC_PCI_DIO=m
CONFIG_COMEDI_DAS08_PCI=m
CONFIG_COMEDI_DT3000=m
CONFIG_COMEDI_DYNA_PCI10XX=m
CONFIG_COMEDI_GSC_HPDI=m
CONFIG_COMEDI_MF6X4=m
CONFIG_COMEDI_ICP_MULTI=m
CONFIG_COMEDI_DAQBOARD2000=m
CONFIG_COMEDI_JR3_PCI=m
# CONFIG_COMEDI_KE_COUNTER is not set
CONFIG_COMEDI_CB_PCIDAS64=m
# CONFIG_COMEDI_CB_PCIDAS is not set
CONFIG_COMEDI_CB_PCIDDA=m
CONFIG_COMEDI_CB_PCIMDAS=m
CONFIG_COMEDI_CB_PCIMDDA=m
# CONFIG_COMEDI_ME4000 is not set
CONFIG_COMEDI_ME_DAQ=m
CONFIG_COMEDI_NI_6527=m
CONFIG_COMEDI_NI_65XX=m
# CONFIG_COMEDI_NI_660X is not set
# CONFIG_COMEDI_NI_670X is not set
CONFIG_COMEDI_NI_LABPC_PCI=m
# CONFIG_COMEDI_NI_PCIDIO is not set
CONFIG_COMEDI_NI_PCIMIO=m
CONFIG_COMEDI_RTD520=m
CONFIG_COMEDI_S626=m
CONFIG_COMEDI_MITE=m
CONFIG_COMEDI_NI_TIOCMD=m
CONFIG_COMEDI_8254=m
CONFIG_COMEDI_8255=m
# CONFIG_COMEDI_8255_SA is not set
CONFIG_COMEDI_KCOMEDILIB=m
CONFIG_COMEDI_DAS08=m
CONFIG_COMEDI_NI_LABPC=m
CONFIG_COMEDI_NI_TIO=m
CONFIG_COMEDI_NI_ROUTING=m
# CONFIG_COMEDI_TESTS is not set
CONFIG_STAGING=y
# CONFIG_RTLLIB is not set
# CONFIG_RTS5208 is not set

#
# IIO staging drivers
#

#
# Accelerometers
#
# end of Accelerometers

#
# Analog to digital converters
#
# end of Analog to digital converters

#
# Analog digital bi-direction converters
#
# CONFIG_ADT7316 is not set
# end of Analog digital bi-direction converters

#
# Direct Digital Synthesis
#
# end of Direct Digital Synthesis

#
# Network Analyzer, Impedance Converters
#
CONFIG_AD5933=y
# end of Network Analyzer, Impedance Converters

#
# Active energy metering IC
#
CONFIG_ADE7854=m
# CONFIG_ADE7854_I2C is not set
# end of Active energy metering IC

#
# Resolver to digital converters
#
# end of Resolver to digital converters
# end of IIO staging drivers

CONFIG_FB_SM750=m
# CONFIG_STAGING_MEDIA is not set
CONFIG_XIL_AXIS_FIFO=m
CONFIG_FIELDBUS_DEV=y
CONFIG_HMS_ANYBUSS_BUS=y
# CONFIG_ARCX_ANYBUS_CONTROLLER is not set
# CONFIG_HMS_PROFINET is not set
# CONFIG_QLGE is not set
# CONFIG_VME_BUS is not set
# CONFIG_GOLDFISH_PIPE is not set
CONFIG_CHROME_PLATFORMS=y
CONFIG_CHROMEOS_ACPI=m
CONFIG_CHROMEOS_LAPTOP=m
CONFIG_CHROMEOS_PSTORE=m
CONFIG_CHROMEOS_TBMC=y
CONFIG_CROS_EC=y
CONFIG_CROS_EC_I2C=m
CONFIG_CROS_EC_LPC=m
CONFIG_CROS_EC_PROTO=y
CONFIG_CROS_KBD_LED_BACKLIGHT=m
CONFIG_CROS_EC_CHARDEV=y
CONFIG_CROS_EC_LIGHTBAR=y
CONFIG_CROS_EC_VBC=y
CONFIG_CROS_EC_DEBUGFS=y
CONFIG_CROS_EC_SENSORHUB=m
CONFIG_CROS_EC_SYSFS=y
# CONFIG_CROS_USBPD_NOTIFY is not set
CONFIG_CHROMEOS_PRIVACY_SCREEN=m
CONFIG_WILCO_EC=m
CONFIG_WILCO_EC_DEBUGFS=m
CONFIG_WILCO_EC_EVENTS=m
CONFIG_WILCO_EC_TELEMETRY=m
CONFIG_MELLANOX_PLATFORM=y
CONFIG_MLXREG_HOTPLUG=m
CONFIG_MLXREG_IO=m
CONFIG_MLXREG_LC=m
# CONFIG_NVSW_SN2201 is not set
CONFIG_OLPC_EC=y
# CONFIG_SURFACE_PLATFORMS is not set
CONFIG_X86_PLATFORM_DEVICES=y
CONFIG_ACPI_WMI=y
CONFIG_WMI_BMOF=y
CONFIG_HUAWEI_WMI=m
CONFIG_MXM_WMI=m
CONFIG_PEAQ_WMI=m
# CONFIG_NVIDIA_WMI_EC_BACKLIGHT is not set
CONFIG_XIAOMI_WMI=m
CONFIG_GIGABYTE_WMI=m
CONFIG_YOGABOOK_WMI=m
CONFIG_ACERHDF=y
CONFIG_ACER_WIRELESS=y
CONFIG_ACER_WMI=y
CONFIG_AMD_PMF=y
# CONFIG_AMD_PMC is not set
CONFIG_ADV_SWBUTTON=y
CONFIG_APPLE_GMUX=y
CONFIG_ASUS_LAPTOP=m
CONFIG_ASUS_WIRELESS=m
CONFIG_ASUS_TF103C_DOCK=y
# CONFIG_X86_PLATFORM_DRIVERS_DELL is not set
CONFIG_AMILO_RFKILL=y
CONFIG_FUJITSU_LAPTOP=m
CONFIG_FUJITSU_TABLET=m
CONFIG_GPD_POCKET_FAN=m
CONFIG_HP_ACCEL=y
CONFIG_WIRELESS_HOTKEY=y
# CONFIG_HP_WMI is not set
# CONFIG_TC1100_WMI is not set
CONFIG_IBM_RTL=m
CONFIG_IDEAPAD_LAPTOP=m
CONFIG_SENSORS_HDAPS=m
CONFIG_THINKPAD_ACPI=m
CONFIG_THINKPAD_ACPI_DEBUGFACILITIES=y
# CONFIG_THINKPAD_ACPI_DEBUG is not set
CONFIG_THINKPAD_ACPI_UNSAFE_LEDS=y
# CONFIG_THINKPAD_ACPI_VIDEO is not set
CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
# CONFIG_THINKPAD_LMI is not set
CONFIG_INTEL_ATOMISP2_PDX86=y
CONFIG_INTEL_ATOMISP2_LED=m
CONFIG_INTEL_ATOMISP2_PM=y
CONFIG_INTEL_SAR_INT1092=y
# CONFIG_INTEL_PMC_CORE is not set
CONFIG_INTEL_WMI=y
CONFIG_INTEL_WMI_SBL_FW_UPDATE=y
# CONFIG_INTEL_WMI_THUNDERBOLT is not set
# CONFIG_INTEL_HID_EVENT is not set
CONFIG_INTEL_VBTN=y
CONFIG_INTEL_INT0002_VGPIO=m
CONFIG_INTEL_OAKTRAIL=m
CONFIG_INTEL_MRFLD_PWRBTN=m
# CONFIG_INTEL_PUNIT_IPC is not set
# CONFIG_INTEL_RST is not set
CONFIG_INTEL_SMARTCONNECT=m
# CONFIG_INTEL_VSEC is not set
CONFIG_MSI_LAPTOP=m
CONFIG_MSI_WMI=m
CONFIG_XO15_EBOOK=m
CONFIG_XO1_RFKILL=y
# CONFIG_PCENGINES_APU2 is not set
CONFIG_BARCO_P50_GPIO=m
CONFIG_SAMSUNG_LAPTOP=y
CONFIG_SAMSUNG_Q10=y
# CONFIG_ACPI_TOSHIBA is not set
CONFIG_TOSHIBA_BT_RFKILL=m
CONFIG_TOSHIBA_HAPS=m
# CONFIG_TOSHIBA_WMI is not set
CONFIG_ACPI_CMPC=y
CONFIG_COMPAL_LAPTOP=m
# CONFIG_LG_LAPTOP is not set
CONFIG_PANASONIC_LAPTOP=m
CONFIG_SONY_LAPTOP=m
CONFIG_SONYPI_COMPAT=y
CONFIG_SYSTEM76_ACPI=m
CONFIG_TOPSTAR_LAPTOP=y
# CONFIG_MLX_PLATFORM is not set
CONFIG_TOUCHSCREEN_DMI=y
CONFIG_INTEL_IPS=y
CONFIG_INTEL_SCU_IPC=y
CONFIG_INTEL_SCU=y
# CONFIG_INTEL_SCU_PCI is not set
CONFIG_INTEL_SCU_PLATFORM=y
# CONFIG_INTEL_SCU_IPC_UTIL is not set
CONFIG_SIEMENS_SIMATIC_IPC=m
CONFIG_WINMATE_FM07_KEYS=m
CONFIG_P2SB=y
# CONFIG_COMMON_CLK is not set
CONFIG_HWSPINLOCK=y

#
# Clock Source drivers
#
CONFIG_TIMER_OF=y
CONFIG_TIMER_PROBE=y
CONFIG_CLKSRC_I8253=y
CONFIG_CLKEVT_I8253=y
CONFIG_CLKBLD_I8253=y
CONFIG_MICROCHIP_PIT64B=y
# end of Clock Source drivers

CONFIG_MAILBOX=y
CONFIG_PLATFORM_MHU=m
CONFIG_PCC=y
# CONFIG_ALTERA_MBOX is not set
# CONFIG_MAILBOX_TEST is not set
CONFIG_IOMMU_IOVA=m
CONFIG_IOMMU_API=y
# CONFIG_IOMMU_SUPPORT is not set

#
# Remoteproc drivers
#
CONFIG_REMOTEPROC=y
# CONFIG_REMOTEPROC_CDEV is not set
# end of Remoteproc drivers

#
# Rpmsg drivers
#
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_VIRTIO is not set
# end of Rpmsg drivers

# CONFIG_SOUNDWIRE is not set

#
# SOC (System On Chip) specific Drivers
#

#
# Amlogic SoC drivers
#
# end of Amlogic SoC drivers

#
# Broadcom SoC drivers
#
# end of Broadcom SoC drivers

#
# NXP/Freescale QorIQ SoC drivers
#
# end of NXP/Freescale QorIQ SoC drivers

#
# fujitsu SoC drivers
#
# end of fujitsu SoC drivers

#
# i.MX SoC drivers
#
# end of i.MX SoC drivers

#
# Enable LiteX SoC Builder specific drivers
#
# CONFIG_LITEX_SOC_CONTROLLER is not set
# end of Enable LiteX SoC Builder specific drivers

#
# Qualcomm SoC drivers
#
# end of Qualcomm SoC drivers

CONFIG_SOC_TI=y

#
# Xilinx SoC drivers
#
# end of Xilinx SoC drivers
# end of SOC (System On Chip) specific Drivers

CONFIG_PM_DEVFREQ=y

#
# DEVFREQ Governors
#
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m
# CONFIG_DEVFREQ_GOV_PERFORMANCE is not set
CONFIG_DEVFREQ_GOV_POWERSAVE=y
CONFIG_DEVFREQ_GOV_USERSPACE=m
CONFIG_DEVFREQ_GOV_PASSIVE=m

#
# DEVFREQ Drivers
#
CONFIG_PM_DEVFREQ_EVENT=y
CONFIG_EXTCON=y

#
# Extcon Device Drivers
#
CONFIG_EXTCON_ADC_JACK=m
# CONFIG_EXTCON_AXP288 is not set
# CONFIG_EXTCON_FSA9480 is not set
CONFIG_EXTCON_GPIO=m
CONFIG_EXTCON_INTEL_INT3496=y
CONFIG_EXTCON_INTEL_MRFLD=m
CONFIG_EXTCON_MAX14577=y
CONFIG_EXTCON_MAX3355=y
# CONFIG_EXTCON_MAX77693 is not set
# CONFIG_EXTCON_PALMAS is not set
CONFIG_EXTCON_PTN5150=y
CONFIG_EXTCON_RT8973A=y
CONFIG_EXTCON_SM5502=m
CONFIG_EXTCON_USB_GPIO=y
CONFIG_EXTCON_USBC_CROS_EC=y
CONFIG_MEMORY=y
CONFIG_IIO=y
CONFIG_IIO_BUFFER=y
CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER_DMA=y
CONFIG_IIO_BUFFER_DMAENGINE=y
CONFIG_IIO_BUFFER_HW_CONSUMER=y
CONFIG_IIO_KFIFO_BUF=y
CONFIG_IIO_TRIGGERED_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_TRIGGER=y
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
CONFIG_IIO_SW_DEVICE=m
# CONFIG_IIO_SW_TRIGGER is not set
CONFIG_IIO_TRIGGERED_EVENT=m

#
# Accelerometers
#
# CONFIG_ADXL313_I2C is not set
# CONFIG_ADXL355_I2C is not set
CONFIG_ADXL367=y
CONFIG_ADXL367_I2C=y
CONFIG_ADXL372=m
CONFIG_ADXL372_I2C=m
CONFIG_BMA180=m
CONFIG_BMA400=y
CONFIG_BMA400_I2C=y
CONFIG_BMC150_ACCEL=m
CONFIG_BMC150_ACCEL_I2C=m
CONFIG_DA280=m
CONFIG_DA311=m
# CONFIG_DMARD06 is not set
CONFIG_DMARD09=m
CONFIG_DMARD10=y
CONFIG_FXLS8962AF=y
CONFIG_FXLS8962AF_I2C=y
CONFIG_IIO_ST_ACCEL_3AXIS=m
CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m
CONFIG_KXSD9=y
CONFIG_KXSD9_I2C=y
CONFIG_KXCJK1013=y
CONFIG_MC3230=m
CONFIG_MMA7455=y
CONFIG_MMA7455_I2C=y
# CONFIG_MMA7660 is not set
CONFIG_MMA8452=m
# CONFIG_MMA9551 is not set
# CONFIG_MMA9553 is not set
CONFIG_MSA311=m
CONFIG_MXC4005=m
CONFIG_MXC6255=y
CONFIG_STK8312=m
CONFIG_STK8BA50=y
# end of Accelerometers

#
# Analog to digital converters
#
CONFIG_AD7091R5=y
CONFIG_AD7291=m
# CONFIG_AD7606_IFACE_PARALLEL is not set
# CONFIG_AD799X is not set
# CONFIG_ADI_AXI_ADC is not set
CONFIG_AXP20X_ADC=y
# CONFIG_AXP288_ADC is not set
CONFIG_DA9150_GPADC=m
CONFIG_ENVELOPE_DETECTOR=m
CONFIG_HX711=y
# CONFIG_INA2XX_ADC is not set
# CONFIG_INTEL_MRFLD_ADC is not set
# CONFIG_LP8788_ADC is not set
CONFIG_LTC2471=y
CONFIG_LTC2485=y
CONFIG_LTC2497=y
CONFIG_MAX1363=y
# CONFIG_MAX9611 is not set
CONFIG_MCP3422=y
CONFIG_MEN_Z188_ADC=m
CONFIG_NAU7802=m
CONFIG_PALMAS_GPADC=y
CONFIG_QCOM_VADC_COMMON=m
CONFIG_QCOM_SPMI_IADC=m
CONFIG_QCOM_SPMI_VADC=m
CONFIG_QCOM_SPMI_ADC5=m
CONFIG_RN5T618_ADC=y
CONFIG_RICHTEK_RTQ6056=m
CONFIG_SD_ADC_MODULATOR=y
CONFIG_STMPE_ADC=y
# CONFIG_TI_ADC081C is not set
CONFIG_TI_ADS1015=y
CONFIG_TWL4030_MADC=y
CONFIG_TWL6030_GPADC=y
CONFIG_VF610_ADC=m
CONFIG_XILINX_XADC=m
# end of Analog to digital converters

#
# Analog to digital and digital to analog converters
#
CONFIG_STX104=m
# end of Analog to digital and digital to analog converters

#
# Analog Front Ends
#
CONFIG_IIO_RESCALE=m
# end of Analog Front Ends

#
# Amplifiers
#
CONFIG_HMC425=y
# end of Amplifiers

#
# Capacitance to digital converters
#
# CONFIG_AD7150 is not set
CONFIG_AD7746=y
# end of Capacitance to digital converters

#
# Chemical Sensors
#
CONFIG_ATLAS_PH_SENSOR=y
CONFIG_ATLAS_EZO_SENSOR=m
CONFIG_BME680=m
CONFIG_BME680_I2C=m
CONFIG_CCS811=m
CONFIG_IAQCORE=m
CONFIG_SCD30_CORE=y
# CONFIG_SCD30_I2C is not set
CONFIG_SCD4X=m
CONFIG_SENSIRION_SGP30=y
CONFIG_SENSIRION_SGP40=y
# CONFIG_SPS30_I2C is not set
# CONFIG_SENSEAIR_SUNRISE_CO2 is not set
CONFIG_VZ89X=y
# end of Chemical Sensors

# CONFIG_IIO_CROS_EC_SENSORS_CORE is not set

#
# Hid Sensor IIO Common
#
# end of Hid Sensor IIO Common

CONFIG_IIO_MS_SENSORS_I2C=m

#
# IIO SCMI Sensors
#
# end of IIO SCMI Sensors

#
# SSP Sensor Common
#
# end of SSP Sensor Common

CONFIG_IIO_ST_SENSORS_I2C=m
CONFIG_IIO_ST_SENSORS_CORE=y

#
# Digital to analog converters
#
# CONFIG_AD5064 is not set
# CONFIG_AD5380 is not set
CONFIG_AD5446=m
CONFIG_AD5592R_BASE=m
CONFIG_AD5593R=m
CONFIG_AD5686=m
CONFIG_AD5696_I2C=m
CONFIG_CIO_DAC=m
CONFIG_DPOT_DAC=m
# CONFIG_DS4424 is not set
CONFIG_M62332=y
CONFIG_MAX517=m
CONFIG_MAX5821=m
CONFIG_MCP4725=y
CONFIG_TI_DAC5571=m
CONFIG_VF610_DAC=m
# end of Digital to analog converters

#
# IIO dummy driver
#
CONFIG_IIO_SIMPLE_DUMMY=m
# CONFIG_IIO_SIMPLE_DUMMY_EVENTS is not set
CONFIG_IIO_SIMPLE_DUMMY_BUFFER=y
# end of IIO dummy driver

#
# Filters
#
# end of Filters

#
# Frequency Synthesizers DDS/PLL
#

#
# Clock Generator/Distribution
#
# end of Clock Generator/Distribution

#
# Phase-Locked Loop (PLL) frequency synthesizers
#
# end of Phase-Locked Loop (PLL) frequency synthesizers
# end of Frequency Synthesizers DDS/PLL

#
# Digital gyroscope sensors
#
CONFIG_BMG160=m
CONFIG_BMG160_I2C=m
CONFIG_FXAS21002C=m
CONFIG_FXAS21002C_I2C=m
CONFIG_MPU3050=y
CONFIG_MPU3050_I2C=y
CONFIG_IIO_ST_GYRO_3AXIS=y
# CONFIG_IIO_ST_GYRO_I2C_3AXIS is not set
CONFIG_ITG3200=m
# end of Digital gyroscope sensors

#
# Health Sensors
#

#
# Heart Rate Monitors
#
CONFIG_AFE4404=m
# CONFIG_MAX30100 is not set
CONFIG_MAX30102=m
# end of Heart Rate Monitors
# end of Health Sensors

#
# Humidity sensors
#
CONFIG_AM2315=y
CONFIG_DHT11=m
CONFIG_HDC100X=m
CONFIG_HDC2010=y
CONFIG_HTS221=y
CONFIG_HTS221_I2C=y
# CONFIG_HTU21 is not set
CONFIG_SI7005=m
CONFIG_SI7020=y
# end of Humidity sensors

#
# Inertial measurement units
#
CONFIG_BMI160=m
CONFIG_BMI160_I2C=m
CONFIG_BOSCH_BNO055=y
CONFIG_BOSCH_BNO055_I2C=y
# CONFIG_FXOS8700_I2C is not set
CONFIG_KMX61=y
# CONFIG_INV_ICM42600_I2C is not set
CONFIG_INV_MPU6050_IIO=y
CONFIG_INV_MPU6050_I2C=y
CONFIG_IIO_ST_LSM6DSX=m
CONFIG_IIO_ST_LSM6DSX_I2C=m
CONFIG_IIO_ST_LSM6DSX_I3C=m
CONFIG_IIO_ST_LSM9DS0=m
CONFIG_IIO_ST_LSM9DS0_I2C=m
# end of Inertial measurement units

#
# Light sensors
#
# CONFIG_ACPI_ALS is not set
CONFIG_ADJD_S311=m
CONFIG_ADUX1020=y
# CONFIG_AL3010 is not set
# CONFIG_AL3320A is not set
CONFIG_APDS9300=m
CONFIG_APDS9960=y
CONFIG_AS73211=y
CONFIG_BH1750=m
CONFIG_BH1780=y
# CONFIG_CM32181 is not set
CONFIG_CM3232=m
# CONFIG_CM3323 is not set
CONFIG_CM3605=m
CONFIG_CM36651=y
CONFIG_GP2AP002=y
CONFIG_GP2AP020A00F=y
# CONFIG_IQS621_ALS is not set
CONFIG_SENSORS_ISL29018=m
CONFIG_SENSORS_ISL29028=y
CONFIG_ISL29125=y
# CONFIG_JSA1212 is not set
CONFIG_RPR0521=y
CONFIG_SENSORS_LM3533=m
CONFIG_LTR501=m
# CONFIG_LTRF216A is not set
CONFIG_LV0104CS=m
# CONFIG_MAX44000 is not set
CONFIG_MAX44009=m
CONFIG_NOA1305=m
CONFIG_OPT3001=m
CONFIG_PA12203001=m
CONFIG_SI1133=y
CONFIG_SI1145=y
# CONFIG_STK3310 is not set
CONFIG_ST_UVIS25=y
CONFIG_ST_UVIS25_I2C=y
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
CONFIG_SENSORS_TSL2563=m
CONFIG_TSL2583=m
# CONFIG_TSL2591 is not set
# CONFIG_TSL2772 is not set
CONFIG_TSL4531=m
CONFIG_US5182D=m
# CONFIG_VCNL4000 is not set
CONFIG_VCNL4035=y
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
CONFIG_VL6180=y
CONFIG_ZOPT2201=m
# end of Light sensors

#
# Magnetometer sensors
#
# CONFIG_AK8974 is not set
CONFIG_AK8975=y
CONFIG_AK09911=y
CONFIG_BMC150_MAGN=y
CONFIG_BMC150_MAGN_I2C=y
CONFIG_MAG3110=y
CONFIG_MMC35240=y
CONFIG_IIO_ST_MAGN_3AXIS=m
CONFIG_IIO_ST_MAGN_I2C_3AXIS=m
CONFIG_SENSORS_HMC5843=m
CONFIG_SENSORS_HMC5843_I2C=m
CONFIG_SENSORS_RM3100=m
CONFIG_SENSORS_RM3100_I2C=m
CONFIG_YAMAHA_YAS530=y
# end of Magnetometer sensors

#
# Multiplexers
#
CONFIG_IIO_MUX=y
# end of Multiplexers

#
# Inclinometer sensors
#
# end of Inclinometer sensors

#
# Triggers - standalone
#
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_SYSFS_TRIGGER=m
# end of Triggers - standalone

#
# Linear and angular position sensors
#
CONFIG_IQS624_POS=y
# end of Linear and angular position sensors

#
# Digital potentiometers
#
CONFIG_AD5110=y
CONFIG_AD5272=m
CONFIG_DS1803=m
CONFIG_MAX5432=m
# CONFIG_MCP4018 is not set
# CONFIG_MCP4531 is not set
# CONFIG_TPL0102 is not set
# end of Digital potentiometers

#
# Digital potentiostats
#
CONFIG_LMP91000=m
# end of Digital potentiostats

#
# Pressure sensors
#
CONFIG_ABP060MG=m
CONFIG_BMP280=m
CONFIG_BMP280_I2C=m
# CONFIG_DLHL60D is not set
# CONFIG_DPS310 is not set
CONFIG_HP03=m
CONFIG_ICP10100=m
CONFIG_MPL115=m
CONFIG_MPL115_I2C=m
CONFIG_MPL3115=m
CONFIG_MS5611=m
CONFIG_MS5611_I2C=m
CONFIG_MS5637=m
# CONFIG_IIO_ST_PRESS is not set
CONFIG_T5403=m
CONFIG_HP206C=m
CONFIG_ZPA2326=m
CONFIG_ZPA2326_I2C=m
# end of Pressure sensors

#
# Lightning sensors
#
# end of Lightning sensors

#
# Proximity and distance sensors
#
CONFIG_CROS_EC_MKBP_PROXIMITY=m
CONFIG_ISL29501=y
# CONFIG_LIDAR_LITE_V2 is not set
CONFIG_MB1232=m
CONFIG_PING=y
# CONFIG_RFD77402 is not set
CONFIG_SRF04=m
CONFIG_SX_COMMON=y
CONFIG_SX9310=y
CONFIG_SX9324=m
CONFIG_SX9360=m
CONFIG_SX9500=m
CONFIG_SRF08=y
# CONFIG_VCNL3020 is not set
CONFIG_VL53L0X_I2C=m
# end of Proximity and distance sensors

#
# Resolver to digital converters
#
# end of Resolver to digital converters

#
# Temperature sensors
#
# CONFIG_IQS620AT_TEMP is not set
# CONFIG_MLX90614 is not set
CONFIG_MLX90632=y
CONFIG_TMP006=m
CONFIG_TMP007=m
CONFIG_TMP117=m
# CONFIG_TSYS01 is not set
CONFIG_TSYS02D=m
# end of Temperature sensors

CONFIG_NTB=y
# CONFIG_NTB_MSI is not set
CONFIG_NTB_IDT=m
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_SWITCHTEC is not set
CONFIG_NTB_PINGPONG=m
CONFIG_NTB_TOOL=y
CONFIG_NTB_PERF=y
CONFIG_NTB_TRANSPORT=y
CONFIG_PWM=y
CONFIG_PWM_SYSFS=y
CONFIG_PWM_DEBUG=y
CONFIG_PWM_ATMEL_TCB=y
# CONFIG_PWM_CROS_EC is not set
# CONFIG_PWM_DWC is not set
CONFIG_PWM_FSL_FTM=m
CONFIG_PWM_INTEL_LGM=m
CONFIG_PWM_IQS620A=y
CONFIG_PWM_LPSS=y
CONFIG_PWM_LPSS_PCI=y
# CONFIG_PWM_LPSS_PLATFORM is not set
CONFIG_PWM_NTXEC=m
# CONFIG_PWM_PCA9685 is not set
CONFIG_PWM_STMPE=y
# CONFIG_PWM_TWL is not set
# CONFIG_PWM_TWL_LED is not set

#
# IRQ chip support
#
CONFIG_IRQCHIP=y
# CONFIG_AL_FIC is not set
CONFIG_MADERA_IRQ=y
# CONFIG_XILINX_INTC is not set
# end of IRQ chip support

CONFIG_IPACK_BUS=y
CONFIG_BOARD_TPCI200=y
CONFIG_SERIAL_IPOCTAL=m
CONFIG_RESET_CONTROLLER=y
# CONFIG_RESET_INTEL_GW is not set
CONFIG_RESET_SIMPLE=y
# CONFIG_RESET_TI_SYSCON is not set
CONFIG_RESET_TI_TPS380X=m

#
# PHY Subsystem
#
CONFIG_GENERIC_PHY=y
CONFIG_GENERIC_PHY_MIPI_DPHY=y
# CONFIG_USB_LGM_PHY is not set
CONFIG_PHY_CAN_TRANSCEIVER=m

#
# PHY drivers for Broadcom platforms
#
CONFIG_BCM_KONA_USB2_PHY=m
# end of PHY drivers for Broadcom platforms

# CONFIG_PHY_CADENCE_DPHY is not set
# CONFIG_PHY_CADENCE_DPHY_RX is not set
CONFIG_PHY_CADENCE_SALVO=y
# CONFIG_PHY_PXA_28NM_HSIC is not set
CONFIG_PHY_PXA_28NM_USB2=y
# CONFIG_PHY_LAN966X_SERDES is not set
# CONFIG_PHY_CPCAP_USB is not set
# CONFIG_PHY_MAPPHONE_MDM6600 is not set
CONFIG_PHY_OCELOT_SERDES=y
# CONFIG_PHY_INTEL_LGM_COMBO is not set
# CONFIG_PHY_INTEL_LGM_EMMC is not set
# end of PHY Subsystem

# CONFIG_POWERCAP is not set
CONFIG_MCB=y
CONFIG_MCB_PCI=y
# CONFIG_MCB_LPC is not set

#
# Performance monitor support
#
# end of Performance monitor support

# CONFIG_RAS is not set
CONFIG_USB4=m
CONFIG_USB4_DEBUGFS_WRITE=y
CONFIG_USB4_DEBUGFS_MARGINING=y
# CONFIG_USB4_DMA_TEST is not set

#
# Android
#
# CONFIG_ANDROID_BINDER_IPC is not set
# end of Android

CONFIG_DAX=y
# CONFIG_DEV_DAX is not set
CONFIG_NVMEM=y
CONFIG_NVMEM_SYSFS=y
CONFIG_NVMEM_RMEM=y
CONFIG_NVMEM_SPMI_SDAM=m

#
# HW tracing support
#
# CONFIG_STM is not set
CONFIG_INTEL_TH=m
CONFIG_INTEL_TH_PCI=m
# CONFIG_INTEL_TH_ACPI is not set
CONFIG_INTEL_TH_GTH=m
CONFIG_INTEL_TH_MSU=m
# CONFIG_INTEL_TH_PTI is not set
# CONFIG_INTEL_TH_DEBUG is not set
# end of HW tracing support

# CONFIG_FPGA is not set
CONFIG_FSI=y
CONFIG_FSI_NEW_DEV_NODE=y
# CONFIG_FSI_MASTER_GPIO is not set
CONFIG_FSI_MASTER_HUB=m
# CONFIG_FSI_MASTER_ASPEED is not set
# CONFIG_FSI_SCOM is not set
# CONFIG_FSI_SBEFIFO is not set
CONFIG_MULTIPLEXER=y

#
# Multiplexer drivers
#
CONFIG_MUX_ADG792A=m
CONFIG_MUX_GPIO=m
CONFIG_MUX_MMIO=m
# end of Multiplexer drivers

CONFIG_PM_OPP=y
CONFIG_SIOX=y
CONFIG_SIOX_BUS_GPIO=y
# CONFIG_SLIMBUS is not set
CONFIG_INTERCONNECT=y
# CONFIG_COUNTER is not set
# CONFIG_MOST is not set
# CONFIG_PECI is not set
# CONFIG_HTE is not set
# end of Device Drivers

#
# File systems
#
CONFIG_DCACHE_WORD_ACCESS=y
# CONFIG_VALIDATE_FS_PARSER is not set
CONFIG_FS_IOMAP=y
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
CONFIG_EXT3_FS=m
# CONFIG_EXT3_FS_POSIX_ACL is not set
CONFIG_EXT3_FS_SECURITY=y
CONFIG_EXT4_FS=m
# CONFIG_EXT4_FS_POSIX_ACL is not set
CONFIG_EXT4_FS_SECURITY=y
CONFIG_EXT4_DEBUG=y
CONFIG_JBD2=m
CONFIG_JBD2_DEBUG=y
CONFIG_FS_MBCACHE=m
CONFIG_REISERFS_FS=m
# CONFIG_REISERFS_CHECK is not set
CONFIG_REISERFS_PROC_INFO=y
# CONFIG_REISERFS_FS_XATTR is not set
# CONFIG_JFS_FS is not set
CONFIG_XFS_FS=m
# CONFIG_XFS_SUPPORT_V4 is not set
# CONFIG_XFS_QUOTA is not set
CONFIG_XFS_POSIX_ACL=y
# CONFIG_XFS_RT is not set
CONFIG_XFS_ONLINE_SCRUB=y
CONFIG_XFS_ONLINE_REPAIR=y
CONFIG_XFS_WARN=y
# CONFIG_XFS_DEBUG is not set
CONFIG_GFS2_FS=m
# CONFIG_OCFS2_FS is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_BTRFS_FS_CHECK_INTEGRITY=y
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BTRFS_DEBUG is not set
# CONFIG_BTRFS_ASSERT is not set
# CONFIG_BTRFS_FS_REF_VERIFY is not set
CONFIG_NILFS2_FS=y
CONFIG_F2FS_FS=m
# CONFIG_F2FS_STAT_FS is not set
CONFIG_F2FS_FS_XATTR=y
# CONFIG_F2FS_FS_POSIX_ACL is not set
CONFIG_F2FS_FS_SECURITY=y
CONFIG_F2FS_CHECK_FS=y
# CONFIG_F2FS_FAULT_INJECTION is not set
CONFIG_F2FS_FS_COMPRESSION=y
CONFIG_F2FS_FS_LZO=y
# CONFIG_F2FS_FS_LZORLE is not set
# CONFIG_F2FS_FS_LZ4 is not set
# CONFIG_F2FS_FS_ZSTD is not set
CONFIG_F2FS_IOSTAT=y
CONFIG_FS_POSIX_ACL=y
CONFIG_EXPORTFS=y
CONFIG_EXPORTFS_BLOCK_OPS=y
CONFIG_FILE_LOCKING=y
# CONFIG_FS_ENCRYPTION is not set
CONFIG_FS_VERITY=y
# CONFIG_FS_VERITY_DEBUG is not set
# CONFIG_FS_VERITY_BUILTIN_SIGNATURES is not set
CONFIG_FSNOTIFY=y
# CONFIG_DNOTIFY is not set
CONFIG_INOTIFY_USER=y
# CONFIG_FANOTIFY is not set
# CONFIG_QUOTA is not set
# CONFIG_QUOTA_NETLINK_INTERFACE is not set
CONFIG_QUOTACTL=y
CONFIG_AUTOFS4_FS=m
CONFIG_AUTOFS_FS=m
# CONFIG_FUSE_FS is not set
CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS_REDIRECT_DIR=y
# CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW is not set
# CONFIG_OVERLAY_FS_INDEX is not set
# CONFIG_OVERLAY_FS_METACOPY is not set

#
# Caches
#
CONFIG_NETFS_SUPPORT=y
# CONFIG_NETFS_STATS is not set
CONFIG_FSCACHE=y
# CONFIG_FSCACHE_STATS is not set
# CONFIG_FSCACHE_DEBUG is not set
CONFIG_CACHEFILES=m
CONFIG_CACHEFILES_DEBUG=y
# CONFIG_CACHEFILES_ERROR_INJECTION is not set
# CONFIG_CACHEFILES_ONDEMAND is not set
# end of Caches

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
# CONFIG_UDF_FS is not set
# end of CD-ROM/DVD Filesystems

#
# DOS/FAT/EXFAT/NT Filesystems
#
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_FAT_DEFAULT_UTF8=y
CONFIG_EXFAT_FS=m
CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
CONFIG_NTFS_FS=y
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set
CONFIG_NTFS3_FS=m
CONFIG_NTFS3_LZX_XPRESS=y
CONFIG_NTFS3_FS_POSIX_ACL=y
# end of DOS/FAT/EXFAT/NT Filesystems

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_SYSCTL=y
# CONFIG_PROC_PAGE_MONITOR is not set
CONFIG_PROC_CHILDREN=y
CONFIG_PROC_PID_ARCH_STATUS=y
CONFIG_PROC_CPU_RESCTRL=y
CONFIG_KERNFS=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_TMPFS_XATTR is not set
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
CONFIG_MEMFD_CREATE=y
CONFIG_CONFIGFS_FS=y
# CONFIG_EFIVAR_FS is not set
# end of Pseudo filesystems

# CONFIG_MISC_FILESYSTEMS is not set
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V2=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
CONFIG_NFS_V4=m
# CONFIG_NFS_V4_1 is not set
# CONFIG_ROOT_NFS is not set
# CONFIG_NFS_FSCACHE is not set
# CONFIG_NFS_USE_LEGACY_DNS is not set
CONFIG_NFS_USE_KERNEL_DNS=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
# CONFIG_NFSD is not set
CONFIG_GRACE_PERIOD=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=m
# CONFIG_SUNRPC_DEBUG is not set
# CONFIG_CEPH_FS is not set
CONFIG_CIFS=m
CONFIG_CIFS_STATS2=y
CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y
# CONFIG_CIFS_UPCALL is not set
# CONFIG_CIFS_XATTR is not set
CONFIG_CIFS_DEBUG=y
# CONFIG_CIFS_DEBUG2 is not set
# CONFIG_CIFS_DEBUG_DUMP_KEYS is not set
# CONFIG_CIFS_DFS_UPCALL is not set
# CONFIG_CIFS_SWN_UPCALL is not set
# CONFIG_CIFS_FSCACHE is not set
# CONFIG_SMB_SERVER is not set
CONFIG_SMBFS_COMMON=m
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_CODEPAGE_437 is not set
# CONFIG_NLS_CODEPAGE_737 is not set
CONFIG_NLS_CODEPAGE_775=m
# CONFIG_NLS_CODEPAGE_850 is not set
CONFIG_NLS_CODEPAGE_852=y
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
CONFIG_NLS_CODEPAGE_862=m
CONFIG_NLS_CODEPAGE_863=m
CONFIG_NLS_CODEPAGE_864=y
# CONFIG_NLS_CODEPAGE_865 is not set
CONFIG_NLS_CODEPAGE_866=m
CONFIG_NLS_CODEPAGE_869=m
CONFIG_NLS_CODEPAGE_936=m
CONFIG_NLS_CODEPAGE_950=y
# CONFIG_NLS_CODEPAGE_932 is not set
CONFIG_NLS_CODEPAGE_949=y
CONFIG_NLS_CODEPAGE_874=m
# CONFIG_NLS_ISO8859_8 is not set
CONFIG_NLS_CODEPAGE_1250=y
CONFIG_NLS_CODEPAGE_1251=m
CONFIG_NLS_ASCII=m
CONFIG_NLS_ISO8859_1=m
# CONFIG_NLS_ISO8859_2 is not set
CONFIG_NLS_ISO8859_3=y
CONFIG_NLS_ISO8859_4=m
CONFIG_NLS_ISO8859_5=y
CONFIG_NLS_ISO8859_6=m
# CONFIG_NLS_ISO8859_7 is not set
CONFIG_NLS_ISO8859_9=y
CONFIG_NLS_ISO8859_13=y
CONFIG_NLS_ISO8859_14=m
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
CONFIG_NLS_KOI8_U=m
CONFIG_NLS_MAC_ROMAN=y
CONFIG_NLS_MAC_CELTIC=m
# CONFIG_NLS_MAC_CENTEURO is not set
CONFIG_NLS_MAC_CROATIAN=y
# CONFIG_NLS_MAC_CYRILLIC is not set
CONFIG_NLS_MAC_GAELIC=m
CONFIG_NLS_MAC_GREEK=m
# CONFIG_NLS_MAC_ICELAND is not set
# CONFIG_NLS_MAC_INUIT is not set
CONFIG_NLS_MAC_ROMANIAN=y
# CONFIG_NLS_MAC_TURKISH is not set
# CONFIG_NLS_UTF8 is not set
# CONFIG_DLM is not set
# CONFIG_UNICODE is not set
CONFIG_IO_WQ=y
# end of File systems

#
# Security options
#
CONFIG_KEYS=y
CONFIG_KEYS_REQUEST_CACHE=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_TRUSTED_KEYS=y

#
# No trust source selected!
#
# CONFIG_ENCRYPTED_KEYS is not set
# CONFIG_KEY_DH_OPERATIONS is not set
CONFIG_KEY_NOTIFICATIONS=y
# CONFIG_SECURITY_DMESG_RESTRICT is not set
CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
CONFIG_SECURITY_PATH=y
CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
# CONFIG_HARDENED_USERCOPY is not set
# CONFIG_STATIC_USERMODEHELPER is not set
# CONFIG_SECURITY_SELINUX is not set
# CONFIG_SECURITY_SMACK is not set
# CONFIG_SECURITY_TOMOYO is not set
CONFIG_SECURITY_APPARMOR=y
# CONFIG_SECURITY_APPARMOR_DEBUG is not set
# CONFIG_SECURITY_APPARMOR_INTROSPECT_POLICY is not set
CONFIG_SECURITY_APPARMOR_PARANOID_LOAD=y
CONFIG_SECURITY_LOADPIN=y
# CONFIG_SECURITY_LOADPIN_ENFORCE is not set
CONFIG_SECURITY_LOADPIN_VERITY=y
CONFIG_SECURITY_YAMA=y
CONFIG_SECURITY_SAFESETID=y
# CONFIG_SECURITY_LOCKDOWN_LSM is not set
# CONFIG_SECURITY_LANDLOCK is not set
# CONFIG_INTEGRITY is not set
# CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set
CONFIG_DEFAULT_SECURITY_APPARMOR=y
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,apparmor,selinux,smack,tomoyo,bpf"

#
# Kernel hardening options
#

#
# Memory initialization
#
CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_ENABLER=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y
# CONFIG_INIT_STACK_NONE is not set
CONFIG_INIT_STACK_ALL_PATTERN=y
# CONFIG_INIT_STACK_ALL_ZERO is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
CONFIG_INIT_ON_FREE_DEFAULT_ON=y
# end of Memory initialization

CONFIG_RANDSTRUCT_NONE=y
# end of Kernel hardening options
# end of Security options

CONFIG_XOR_BLOCKS=y
CONFIG_ASYNC_CORE=y
CONFIG_ASYNC_MEMCPY=y
CONFIG_ASYNC_XOR=y
CONFIG_ASYNC_PQ=y
CONFIG_ASYNC_RAID6_RECOV=y
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=y
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_SKCIPHER=y
CONFIG_CRYPTO_SKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_RNG_DEFAULT=y
CONFIG_CRYPTO_AKCIPHER2=y
CONFIG_CRYPTO_AKCIPHER=y
CONFIG_CRYPTO_KPP2=y
CONFIG_CRYPTO_KPP=y
CONFIG_CRYPTO_ACOMP2=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
CONFIG_CRYPTO_USER=m
CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
CONFIG_CRYPTO_GF128MUL=y
CONFIG_CRYPTO_NULL=y
CONFIG_CRYPTO_NULL2=y
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_CRYPTD=y
CONFIG_CRYPTO_AUTHENC=y
# CONFIG_CRYPTO_TEST is not set
CONFIG_CRYPTO_SIMD=y
# end of Crypto core or helper

#
# Public-key cryptography
#
CONFIG_CRYPTO_RSA=y
CONFIG_CRYPTO_DH=y
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_ECC=y
CONFIG_CRYPTO_ECDH=y
CONFIG_CRYPTO_ECDSA=m
CONFIG_CRYPTO_ECRDSA=m
# CONFIG_CRYPTO_SM2 is not set
CONFIG_CRYPTO_CURVE25519=y
# end of Public-key cryptography

#
# Block ciphers
#
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_AES_TI=m
# CONFIG_CRYPTO_ANUBIS is not set
CONFIG_CRYPTO_ARIA=m
# CONFIG_CRYPTO_BLOWFISH is not set
CONFIG_CRYPTO_CAMELLIA=m
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_FCRYPT=y
CONFIG_CRYPTO_KHAZAD=y
CONFIG_CRYPTO_SEED=m
CONFIG_CRYPTO_SERPENT=y
CONFIG_CRYPTO_SM4=m
CONFIG_CRYPTO_SM4_GENERIC=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TWOFISH=y
CONFIG_CRYPTO_TWOFISH_COMMON=y
# end of Block ciphers

#
# Length-preserving ciphers and modes
#
# CONFIG_CRYPTO_ADIANTUM is not set
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CBC=y
# CONFIG_CRYPTO_CFB is not set
CONFIG_CRYPTO_CTR=y
# CONFIG_CRYPTO_CTS is not set
CONFIG_CRYPTO_ECB=y
# CONFIG_CRYPTO_HCTR2 is not set
CONFIG_CRYPTO_KEYWRAP=m
# CONFIG_CRYPTO_LRW is not set
CONFIG_CRYPTO_OFB=m
CONFIG_CRYPTO_PCBC=y
# CONFIG_CRYPTO_XTS is not set
# end of Length-preserving ciphers and modes

#
# AEAD (authenticated encryption with associated data) ciphers
#
CONFIG_CRYPTO_AEGIS128=m
# CONFIG_CRYPTO_CHACHA20POLY1305 is not set
CONFIG_CRYPTO_CCM=m
CONFIG_CRYPTO_GCM=y
CONFIG_CRYPTO_SEQIV=m
# CONFIG_CRYPTO_ECHAINIV is not set
CONFIG_CRYPTO_ESSIV=y
# end of AEAD (authenticated encryption with associated data) ciphers

#
# Hashes, digests, and MACs
#
CONFIG_CRYPTO_BLAKE2B=m
CONFIG_CRYPTO_CMAC=y
CONFIG_CRYPTO_GHASH=y
CONFIG_CRYPTO_HMAC=y
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
# CONFIG_CRYPTO_POLY1305 is not set
CONFIG_CRYPTO_RMD160=y
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=y
CONFIG_CRYPTO_SHA3=y
CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_SM3_GENERIC=m
CONFIG_CRYPTO_STREEBOG=m
CONFIG_CRYPTO_VMAC=m
CONFIG_CRYPTO_WP512=m
CONFIG_CRYPTO_XCBC=m
CONFIG_CRYPTO_XXHASH=m
# end of Hashes, digests, and MACs

#
# CRCs (cyclic redundancy checks)
#
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32=m
CONFIG_CRYPTO_CRCT10DIF=y
CONFIG_CRYPTO_CRC64_ROCKSOFT=y
# end of CRCs (cyclic redundancy checks)

#
# Compression
#
CONFIG_CRYPTO_DEFLATE=y
CONFIG_CRYPTO_LZO=y
# CONFIG_CRYPTO_842 is not set
CONFIG_CRYPTO_LZ4=y
# CONFIG_CRYPTO_LZ4HC is not set
CONFIG_CRYPTO_ZSTD=m
# end of Compression

#
# Random number generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
CONFIG_CRYPTO_DRBG_MENU=y
CONFIG_CRYPTO_DRBG_HMAC=y
# CONFIG_CRYPTO_DRBG_HASH is not set
CONFIG_CRYPTO_DRBG_CTR=y
CONFIG_CRYPTO_DRBG=y
CONFIG_CRYPTO_JITTERENTROPY=y
# end of Random number generation

#
# Userspace interface
#
CONFIG_CRYPTO_USER_API=m
# CONFIG_CRYPTO_USER_API_HASH is not set
# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
# CONFIG_CRYPTO_USER_API_RNG is not set
CONFIG_CRYPTO_USER_API_AEAD=m
CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y
CONFIG_CRYPTO_STATS=y
# end of Userspace interface

CONFIG_CRYPTO_HASH_INFO=y

#
# Accelerated Cryptographic Algorithms for CPU (x86)
#
CONFIG_CRYPTO_AES_NI_INTEL=y
CONFIG_CRYPTO_SERPENT_SSE2_586=y
# CONFIG_CRYPTO_TWOFISH_586 is not set
# CONFIG_CRYPTO_CRC32C_INTEL is not set
# CONFIG_CRYPTO_CRC32_PCLMUL is not set
# end of Accelerated Cryptographic Algorithms for CPU (x86)

# CONFIG_CRYPTO_HW is not set
CONFIG_ASYMMETRIC_KEY_TYPE=y
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
CONFIG_X509_CERTIFICATE_PARSER=y
CONFIG_PKCS8_PRIVATE_KEY_PARSER=y
CONFIG_PKCS7_MESSAGE_PARSER=y
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set

#
# Certificates for signature checking
#
# CONFIG_SYSTEM_TRUSTED_KEYRING is not set
CONFIG_SYSTEM_BLACKLIST_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
CONFIG_SYSTEM_REVOCATION_LIST=y
CONFIG_SYSTEM_REVOCATION_KEYS=""
# end of Certificates for signature checking

CONFIG_BINARY_PRINTF=y

#
# Library routines
#
CONFIG_RAID6_PQ=y
# CONFIG_RAID6_PQ_BENCHMARK is not set
CONFIG_LINEAR_RANGES=y
# CONFIG_PACKING is not set
CONFIG_BITREVERSE=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_GENERIC_NET_UTILS=y
CONFIG_CORDIC=y
# CONFIG_PRIME_NUMBERS is not set
CONFIG_RATIONAL=m
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_IOMAP=y
CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
CONFIG_ARCH_USE_SYM_ANNOTATIONS=y

#
# Crypto library routines
#
CONFIG_CRYPTO_LIB_UTILS=y
CONFIG_CRYPTO_LIB_AES=y
CONFIG_CRYPTO_LIB_ARC4=m
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m
# CONFIG_CRYPTO_LIB_CHACHA is not set
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y
CONFIG_CRYPTO_LIB_CURVE25519=y
CONFIG_CRYPTO_LIB_DES=m
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
CONFIG_CRYPTO_LIB_POLY1305=m
# CONFIG_CRYPTO_LIB_CHACHA20POLY1305 is not set
CONFIG_CRYPTO_LIB_SHA1=y
CONFIG_CRYPTO_LIB_SHA256=y
# end of Crypto library routines

CONFIG_CRC_CCITT=m
CONFIG_CRC16=y
CONFIG_CRC_T10DIF=y
CONFIG_CRC64_ROCKSOFT=y
CONFIG_CRC_ITU_T=y
CONFIG_CRC32=y
# CONFIG_CRC32_SELFTEST is not set
# CONFIG_CRC32_SLICEBY8 is not set
CONFIG_CRC32_SLICEBY4=y
# CONFIG_CRC32_SARWATE is not set
# CONFIG_CRC32_BIT is not set
CONFIG_CRC64=y
CONFIG_CRC4=y
# CONFIG_CRC7 is not set
CONFIG_LIBCRC32C=y
CONFIG_CRC8=y
CONFIG_XXHASH=y
CONFIG_AUDIT_GENERIC=y
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_LZ4_COMPRESS=y
CONFIG_LZ4_DECOMPRESS=y
CONFIG_ZSTD_COMMON=y
CONFIG_ZSTD_COMPRESS=m
CONFIG_ZSTD_DECOMPRESS=y
CONFIG_XZ_DEC=m
CONFIG_XZ_DEC_X86=y
CONFIG_XZ_DEC_POWERPC=y
# CONFIG_XZ_DEC_IA64 is not set
CONFIG_XZ_DEC_ARM=y
# CONFIG_XZ_DEC_ARMTHUMB is not set
# CONFIG_XZ_DEC_SPARC is not set
# CONFIG_XZ_DEC_MICROLZMA is not set
CONFIG_XZ_DEC_BCJ=y
# CONFIG_XZ_DEC_TEST is not set
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_DECOMPRESS_LZO=y
CONFIG_DECOMPRESS_ZSTD=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_INTERVAL_TREE=y
CONFIG_XARRAY_MULTI=y
CONFIG_ASSOCIATIVE_ARRAY=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT_MAP=y
CONFIG_HAS_DMA=y
CONFIG_DMA_OPS=y
CONFIG_NEED_SG_DMA_LENGTH=y
CONFIG_DMA_CMA=y
# CONFIG_DMA_PERNUMA_CMA is not set

#
# Default contiguous memory area size:
#
CONFIG_CMA_SIZE_MBYTES=0
CONFIG_CMA_SIZE_PERCENTAGE=0
# CONFIG_CMA_SIZE_SEL_MBYTES is not set
# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
CONFIG_CMA_SIZE_SEL_MIN=y
# CONFIG_CMA_SIZE_SEL_MAX is not set
CONFIG_CMA_ALIGNMENT=8
# CONFIG_DMA_API_DEBUG is not set
CONFIG_DMA_MAP_BENCHMARK=y
CONFIG_SGL_ALLOC=y
CONFIG_CHECK_SIGNATURE=y
# CONFIG_FORCE_NR_CPUS is not set
CONFIG_CPU_RMAP=y
CONFIG_DQL=y
CONFIG_GLOB=y
# CONFIG_GLOB_SELFTEST is not set
CONFIG_NLATTR=y
CONFIG_CLZ_TAB=y
CONFIG_IRQ_POLL=y
CONFIG_MPILIB=y
CONFIG_LIBFDT=y
CONFIG_OID_REGISTRY=y
CONFIG_UCS2_STRING=y
CONFIG_HAVE_GENERIC_VDSO=y
CONFIG_GENERIC_GETTIMEOFDAY=y
CONFIG_GENERIC_VDSO_32=y
CONFIG_GENERIC_VDSO_TIME_NS=y
CONFIG_FONT_SUPPORT=y
CONFIG_FONT_8x16=y
CONFIG_FONT_AUTOSELECT=y
CONFIG_SG_POOL=y
CONFIG_MEMREGION=y
CONFIG_ARCH_STACKWALK=y
CONFIG_STACKDEPOT=y
CONFIG_SBITMAP=y
# end of Library routines

#
# Kernel hacking
#

#
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
CONFIG_PRINTK_CALLER=y
# CONFIG_STACKTRACE_BUILD_ID is not set
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
CONFIG_CONSOLE_LOGLEVEL_QUIET=4
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_DYNAMIC_DEBUG is not set
# CONFIG_DYNAMIC_DEBUG_CORE is not set
CONFIG_SYMBOLIC_ERRNAME=y
CONFIG_DEBUG_BUGVERBOSE=y
# end of printk and dmesg options

CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_MISC is not set

#
# Compile-time checks and compiler options
#
CONFIG_DEBUG_INFO=y
CONFIG_AS_HAS_NON_CONST_LEB128=y
# CONFIG_DEBUG_INFO_NONE is not set
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
# CONFIG_DEBUG_INFO_DWARF4 is not set
# CONFIG_DEBUG_INFO_DWARF5 is not set
CONFIG_DEBUG_INFO_REDUCED=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_PAHOLE_HAS_SPLIT_BTF=y
CONFIG_PAHOLE_HAS_BTF_TAG=y
# CONFIG_GDB_SCRIPTS is not set
CONFIG_FRAME_WARN=8192
# CONFIG_STRIP_ASM_SYMS is not set
CONFIG_HEADERS_INSTALL=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
CONFIG_FRAME_POINTER=y
CONFIG_VMLINUX_MAP=y
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
# end of Compile-time checks and compiler options

#
# Generic Kernel Debugging Instruments
#
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE=""
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_FS_ALLOW_ALL is not set
# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set
CONFIG_DEBUG_FS_ALLOW_NONE=y
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y
CONFIG_UBSAN=y
# CONFIG_UBSAN_TRAP is not set
CONFIG_CC_HAS_UBSAN_BOUNDS=y
CONFIG_CC_HAS_UBSAN_ARRAY_BOUNDS=y
CONFIG_UBSAN_BOUNDS=y
CONFIG_UBSAN_ARRAY_BOUNDS=y
CONFIG_UBSAN_SHIFT=y
CONFIG_UBSAN_UNREACHABLE=y
# CONFIG_UBSAN_BOOL is not set
# CONFIG_UBSAN_ENUM is not set
# CONFIG_UBSAN_ALIGNMENT is not set
CONFIG_UBSAN_SANITIZE_ALL=y
# CONFIG_TEST_UBSAN is not set
CONFIG_HAVE_KCSAN_COMPILER=y
# end of Generic Kernel Debugging Instruments

#
# Networking Debugging
#
# CONFIG_NET_DEV_REFCNT_TRACKER is not set
# CONFIG_NET_NS_REFCNT_TRACKER is not set
CONFIG_DEBUG_NET=y
# end of Networking Debugging

#
# Memory Debugging
#
CONFIG_PAGE_EXTENSION=y
# CONFIG_DEBUG_PAGEALLOC is not set
# CONFIG_SLUB_DEBUG is not set
CONFIG_PAGE_OWNER=y
# CONFIG_PAGE_POISONING is not set
CONFIG_DEBUG_PAGE_REF=y
# CONFIG_DEBUG_RODATA_TEST is not set
CONFIG_ARCH_HAS_DEBUG_WX=y
# CONFIG_DEBUG_WX is not set
CONFIG_GENERIC_PTDUMP=y
CONFIG_PTDUMP_CORE=y
# CONFIG_PTDUMP_DEBUGFS is not set
CONFIG_DEBUG_OBJECTS=y
# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
CONFIG_DEBUG_OBJECTS_FREE=y
CONFIG_DEBUG_OBJECTS_TIMERS=y
CONFIG_DEBUG_OBJECTS_WORK=y
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
# CONFIG_SHRINKER_DEBUG is not set
CONFIG_HAVE_DEBUG_KMEMLEAK=y
# CONFIG_DEBUG_KMEMLEAK is not set
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_SCHED_STACK_END_CHECK=y
CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
CONFIG_DEBUG_VM_IRQSOFF=y
CONFIG_DEBUG_VM=y
CONFIG_DEBUG_VM_MAPLE_TREE=y
CONFIG_DEBUG_VM_RB=y
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
# CONFIG_DEBUG_VIRTUAL is not set
CONFIG_DEBUG_MEMORY_INIT=y
# CONFIG_DEBUG_PER_CPU_MAPS is not set
CONFIG_DEBUG_KMAP_LOCAL=y
CONFIG_ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP=y
CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP=y
# CONFIG_DEBUG_HIGHMEM is not set
CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
CONFIG_DEBUG_STACKOVERFLOW=y
CONFIG_CC_HAS_KASAN_GENERIC=y
CONFIG_CC_HAS_KASAN_SW_TAGS=y
CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
CONFIG_HAVE_ARCH_KFENCE=y
# CONFIG_KFENCE is not set
CONFIG_HAVE_KMSAN_COMPILER=y
# end of Memory Debugging

# CONFIG_DEBUG_SHIRQ is not set

#
# Debug Oops, Lockups and Hangs
#
CONFIG_PANIC_ON_OOPS=y
CONFIG_PANIC_ON_OOPS_VALUE=1
CONFIG_PANIC_TIMEOUT=0
CONFIG_LOCKUP_DETECTOR=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
CONFIG_HARDLOCKUP_DETECTOR_PERF=y
CONFIG_HARDLOCKUP_DETECTOR=y
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=480
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
CONFIG_WQ_WATCHDOG=y
# CONFIG_TEST_LOCKUP is not set
# end of Debug Oops, Lockups and Hangs

#
# Scheduler Debugging
#
# CONFIG_SCHED_DEBUG is not set
CONFIG_SCHED_INFO=y
CONFIG_SCHEDSTATS=y
# end of Scheduler Debugging

CONFIG_DEBUG_TIMEKEEPING=y

#
# Lock Debugging (spinlocks, mutexes, etc...)
#
CONFIG_LOCK_DEBUGGING_SUPPORT=y
CONFIG_PROVE_LOCKING=y
# CONFIG_PROVE_RAW_LOCK_NESTING is not set
# CONFIG_LOCK_STAT is not set
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
CONFIG_DEBUG_RWSEMS=y
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_LOCKDEP=y
CONFIG_LOCKDEP_BITS=15
CONFIG_LOCKDEP_CHAINS_BITS=16
CONFIG_LOCKDEP_STACK_TRACE_BITS=19
CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS=14
CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS=12
# CONFIG_DEBUG_LOCKDEP is not set
CONFIG_DEBUG_ATOMIC_SLEEP=y
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
CONFIG_LOCK_TORTURE_TEST=m
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_SCF_TORTURE_TEST is not set
# end of Lock Debugging (spinlocks, mutexes, etc...)

CONFIG_TRACE_IRQFLAGS=y
CONFIG_TRACE_IRQFLAGS_NMI=y
CONFIG_DEBUG_IRQFLAGS=y
CONFIG_STACKTRACE=y
# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_KOBJECT_RELEASE is not set

#
# Debug kernel data structures
#
CONFIG_DEBUG_LIST=y
# CONFIG_DEBUG_PLIST is not set
# CONFIG_DEBUG_SG is not set
CONFIG_DEBUG_NOTIFIERS=y
CONFIG_BUG_ON_DATA_CORRUPTION=y
CONFIG_DEBUG_MAPLE_TREE=y
# end of Debug kernel data structures

CONFIG_DEBUG_CREDENTIALS=y

#
# RCU Debugging
#
CONFIG_PROVE_RCU=y
# CONFIG_PROVE_RCU_LIST is not set
CONFIG_TORTURE_TEST=m
CONFIG_RCU_SCALE_TEST=m
CONFIG_RCU_TORTURE_TEST=m
CONFIG_RCU_REF_SCALE_TEST=m
CONFIG_RCU_CPU_STALL_TIMEOUT=21
CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_EQS_DEBUG=y
# end of RCU Debugging

CONFIG_DEBUG_WQ_FORCE_RR_CPU=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
CONFIG_LATENCYTOP=y
CONFIG_USER_STACKTRACE_SUPPORT=y
CONFIG_NOP_TRACER=y
CONFIG_HAVE_RETHOOK=y
CONFIG_RETHOOK=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
CONFIG_HAVE_DYNAMIC_FTRACE_NO_PATCHABLE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_HAVE_FENTRY=y
CONFIG_HAVE_C_RECORDMCOUNT=y
CONFIG_HAVE_BUILDTIME_MCOUNT_SORT=y
CONFIG_BUILDTIME_MCOUNT_SORT=y
CONFIG_TRACER_MAX_TRACE=y
CONFIG_TRACE_CLOCK=y
CONFIG_RING_BUFFER=y
CONFIG_EVENT_TRACING=y
CONFIG_CONTEXT_SWITCH_TRACER=y
CONFIG_RING_BUFFER_ALLOW_SWAP=y
CONFIG_PREEMPTIRQ_TRACEPOINTS=y
CONFIG_TRACING=y
CONFIG_GENERIC_TRACER=y
CONFIG_TRACING_SUPPORT=y
CONFIG_FTRACE=y
CONFIG_BOOTTIME_TRACING=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
CONFIG_FPROBE=y
CONFIG_FUNCTION_PROFILER=y
CONFIG_STACK_TRACER=y
# CONFIG_IRQSOFF_TRACER is not set
# CONFIG_SCHED_TRACER is not set
CONFIG_HWLAT_TRACER=y
CONFIG_OSNOISE_TRACER=y
# CONFIG_TIMERLAT_TRACER is not set
CONFIG_MMIOTRACE=y
# CONFIG_FTRACE_SYSCALLS is not set
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y
CONFIG_TRACE_BRANCH_PROFILING=y
# CONFIG_BRANCH_PROFILE_NONE is not set
# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
CONFIG_PROFILE_ALL_BRANCHES=y
CONFIG_TRACING_BRANCHES=y
CONFIG_BRANCH_TRACER=y
# CONFIG_BLK_DEV_IO_TRACE is not set
# CONFIG_KPROBE_EVENTS is not set
CONFIG_UPROBE_EVENTS=y
CONFIG_DYNAMIC_EVENTS=y
CONFIG_PROBE_EVENTS=y
CONFIG_FTRACE_MCOUNT_RECORD=y
CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT=y
CONFIG_SYNTH_EVENTS=y
# CONFIG_HIST_TRIGGERS is not set
CONFIG_TRACE_EVENT_INJECT=y
# CONFIG_TRACEPOINT_BENCHMARK is not set
# CONFIG_RING_BUFFER_BENCHMARK is not set
# CONFIG_TRACE_EVAL_MAP_FILE is not set
# CONFIG_FTRACE_RECORD_RECURSION is not set
CONFIG_GCOV_PROFILE_FTRACE=y
# CONFIG_FTRACE_STARTUP_TEST is not set
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
# CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS is not set
# CONFIG_MMIOTRACE_TEST is not set
# CONFIG_PREEMPTIRQ_DELAY_TEST is not set
# CONFIG_SYNTH_EVENT_GEN_TEST is not set
CONFIG_RV=y
# CONFIG_RV_MON_WWNR is not set
CONFIG_RV_REACTORS=y
# CONFIG_RV_REACT_PRINTK is not set
# CONFIG_RV_REACT_PANIC is not set
CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
# CONFIG_SAMPLES is not set
CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y

#
# x86 Debugging
#
CONFIG_EARLY_PRINTK_USB=y
CONFIG_X86_VERBOSE_BOOTUP=y
CONFIG_EARLY_PRINTK=y
CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EFI_PGT_DUMP=y
# CONFIG_DEBUG_TLBFLUSH is not set
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
# CONFIG_X86_DECODER_SELFTEST is not set
# CONFIG_IO_DELAY_0X80 is not set
# CONFIG_IO_DELAY_0XED is not set
CONFIG_IO_DELAY_UDELAY=y
# CONFIG_IO_DELAY_NONE is not set
# CONFIG_DEBUG_BOOT_PARAMS is not set
# CONFIG_CPA_DEBUG is not set
# CONFIG_DEBUG_ENTRY is not set
# CONFIG_DEBUG_NMI_SELFTEST is not set
CONFIG_X86_DEBUG_FPU=y
CONFIG_PUNIT_ATOM_DEBUG=m
CONFIG_UNWINDER_FRAME_POINTER=y
# end of x86 Debugging

#
# Kernel Testing and Coverage
#
# CONFIG_KUNIT is not set
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_FUNCTION_ERROR_INJECTION=y
# CONFIG_FAULT_INJECTION is not set
CONFIG_CC_HAS_SANCOV_TRACE_PC=y
# CONFIG_RUNTIME_TESTING_MENU is not set
CONFIG_ARCH_USE_MEMTEST=y
CONFIG_MEMTEST=y
# end of Kernel Testing and Coverage

#
# Rust hacking
#
# end of Rust hacking
# end of Kernel hacking

From Biao.Huang at mediatek.com  Wed Dec 21 17:43:51 2022
From: Biao.Huang at mediatek.com (=?utf-8?B?QmlhbyBIdWFuZyAo6buE5b2qKQ==?=)
Date: Thu, 22 Dec 2022 01:43:51 +0000
Subject: [RESEND PATCH v4] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <f591f169-acd8-d408-970b-8afc66eda8cf@collabora.com>
References: <20221221022523.8458-1-biao.huang@mediatek.com>
	 <20221221022523.8458-2-biao.huang@mediatek.com>
	 <f591f169-acd8-d408-970b-8afc66eda8cf@collabora.com>
Message-ID: <e0d54746d023ace026ca1c0f9db3391ef83a8f88.camel@mediatek.com>

Dear Angelo,
	Thanks for your comments!

On Wed, 2022-12-21 at 11:13 +0100, AngeloGioacchino Del Regno wrote:
> Il 21/12/22 03:25, Biao Huang ha scritto:
> > Add Ethernet controller node for mt8195.
> > 
> > Signed-off-by: Biao Huang <biao.huang at mediatek.com>
> > ---
> >   arch/arm64/boot/dts/mediatek/mt8195-demo.dts | 88
> > ++++++++++++++++++++
> >   arch/arm64/boot/dts/mediatek/mt8195.dtsi     | 86
> > +++++++++++++++++++
> >   2 files changed, 174 insertions(+)
> > 
> 
> ..snip..
> 
> > diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> > b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> > index 5d31536f4c48..02112bbf2bdf 100644
> > --- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> > +++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> > @@ -1046,6 +1046,92 @@ spis1: spi at 1101e000 {
> >   			status = "disabled";
> >   		};
> >   
> > +		eth: ethernet at 11021000 {
> > +			compatible = "mediatek,mt8195-gmac",
> > "snps,dwmac-5.10a";
> > +			reg = <0 0x11021000 0 0x4000>;
> > +			interrupts = <GIC_SPI 716 IRQ_TYPE_LEVEL_HIGH
> > 0>;
> > +			interrupt-names = "macirq";
> > +			clock-names = "axi",
> > +				      "apb",
> > +				      "mac_cg",
> 
> mac_cg goes as last clock, as specified in the binding.
> 
> Order: axi, apb, mac_main, ptp_ref, rmii_internal, mac_cg.
> 
> Please fix.
OK, will fix in next send.
> 
> Regards,
> Angelo
> 
> > +				      "mac_main",
> > +				      "ptp_ref",
> > +				      "rmii_internal";
> > +			clocks = <&pericfg_ao CLK_PERI_AO_ETHERNET>,
> > +				 <&pericfg_ao
> > CLK_PERI_AO_ETHERNET_BUS>,
> > +				 <&pericfg_ao
> > CLK_PERI_AO_ETHERNET_MAC>,
> > +				 <&topckgen CLK_TOP_SNPS_ETH_250M>,
> > +				 <&topckgen
> > CLK_TOP_SNPS_ETH_62P4M_PTP>,
> > +				 <&topckgen CLK_TOP_SNPS_ETH_50M_RMII>;
> 
> 

From Biao.Huang at mediatek.com  Wed Dec 21 17:56:16 2022
From: Biao.Huang at mediatek.com (=?utf-8?B?QmlhbyBIdWFuZyAo6buE5b2qKQ==?=)
Date: Thu, 22 Dec 2022 01:56:16 +0000
Subject: [RESEND PATCH v4] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <Y6MHQnUcfBjibA8C@lunn.ch>
References: <20221221022523.8458-1-biao.huang@mediatek.com>
	 <20221221022523.8458-2-biao.huang@mediatek.com> <Y6MHQnUcfBjibA8C@lunn.ch>
Message-ID: <60dcfa4084fc1d2aefb5bdaa8d2a7eef35d94970.camel@mediatek.com>

Dear Andrew,
	Thanks for your comments~

On Wed, 2022-12-21 at 14:16 +0100, Andrew Lunn wrote:
> > +&eth {
> > +	phy-mode ="rgmii-rxid";
> 
> That is pretty unusual. You don't see rxid, or txid very often, it is
> normally rgmii, or rgmii-id.
We didn't notice that, and in our design, we can ensure 2ns delay in tx
direction, so we pick rgmii-rxid.
Theoretically, we should support all the cases, and we'll set phy-mode
to "rgmii-id" in next send.
> 
> > +	phy-handle = <&ethernet_phy0>;
> > +	snps,reset-gpio = <&pio 93 GPIO_ACTIVE_HIGH>;
> > +	snps,reset-delays-us = <0 10000 10000>;
> > +	mediatek,tx-delay-ps = <2030>;
> 
> How important is the 30 here?
As documented in yaml, "For MT8188/MT8195 RGMII/RMII/MII interface,
Allowed value need to be a multiple of 290, or will round down. Range
0~31*290.
"
so the 2030 is chosen here.
> 
> You appear to have the PHY doing the RX delay, and the MAC doing the
> TX delay. Normally we have the PHY do both. Can you actually do
> 
> phy-mode = "rgmii-id", and mediatek,tx-delay-ps = <30> ? That would
> then have the PHY doing the basic 2ns delay, and the MAC doing the
> fine tuning needed for TX?
Yes, we can do phy-mode = "rgmii-id".
DTS and driver modification will send together in next send.
Thanks for your valuable comments~
> 
>      Andrew

From Biao.Huang at mediatek.com  Wed Dec 21 17:43:51 2022
From: Biao.Huang at mediatek.com (=?utf-8?B?QmlhbyBIdWFuZyAo6buE5b2qKQ==?=)
Date: Thu, 22 Dec 2022 01:43:51 +0000
Subject: [RESEND PATCH v4] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <f591f169-acd8-d408-970b-8afc66eda8cf@collabora.com>
References: <20221221022523.8458-1-biao.huang@mediatek.com>
	 <20221221022523.8458-2-biao.huang@mediatek.com>
	 <f591f169-acd8-d408-970b-8afc66eda8cf@collabora.com>
Message-ID: <e0d54746d023ace026ca1c0f9db3391ef83a8f88.camel@mediatek.com>

Dear Angelo,
	Thanks for your comments!

On Wed, 2022-12-21 at 11:13 +0100, AngeloGioacchino Del Regno wrote:
> Il 21/12/22 03:25, Biao Huang ha scritto:
> > Add Ethernet controller node for mt8195.
> > 
> > Signed-off-by: Biao Huang <biao.huang at mediatek.com>
> > ---
> >   arch/arm64/boot/dts/mediatek/mt8195-demo.dts | 88
> > ++++++++++++++++++++
> >   arch/arm64/boot/dts/mediatek/mt8195.dtsi     | 86
> > +++++++++++++++++++
> >   2 files changed, 174 insertions(+)
> > 
> 
> ..snip..
> 
> > diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> > b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> > index 5d31536f4c48..02112bbf2bdf 100644
> > --- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> > +++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> > @@ -1046,6 +1046,92 @@ spis1: spi at 1101e000 {
> >   			status = "disabled";
> >   		};
> >   
> > +		eth: ethernet at 11021000 {
> > +			compatible = "mediatek,mt8195-gmac",
> > "snps,dwmac-5.10a";
> > +			reg = <0 0x11021000 0 0x4000>;
> > +			interrupts = <GIC_SPI 716 IRQ_TYPE_LEVEL_HIGH
> > 0>;
> > +			interrupt-names = "macirq";
> > +			clock-names = "axi",
> > +				      "apb",
> > +				      "mac_cg",
> 
> mac_cg goes as last clock, as specified in the binding.
> 
> Order: axi, apb, mac_main, ptp_ref, rmii_internal, mac_cg.
> 
> Please fix.
OK, will fix in next send.
> 
> Regards,
> Angelo
> 
> > +				      "mac_main",
> > +				      "ptp_ref",
> > +				      "rmii_internal";
> > +			clocks = <&pericfg_ao CLK_PERI_AO_ETHERNET>,
> > +				 <&pericfg_ao
> > CLK_PERI_AO_ETHERNET_BUS>,
> > +				 <&pericfg_ao
> > CLK_PERI_AO_ETHERNET_MAC>,
> > +				 <&topckgen CLK_TOP_SNPS_ETH_250M>,
> > +				 <&topckgen
> > CLK_TOP_SNPS_ETH_62P4M_PTP>,
> > +				 <&topckgen CLK_TOP_SNPS_ETH_50M_RMII>;
> 
> 

From tinghan.shen at mediatek.com  Wed Dec 21 23:21:50 2022
From: tinghan.shen at mediatek.com (Tinghan Shen)
Date: Thu, 22 Dec 2022 15:21:50 +0800
Subject: [PATCH v1 3/3] ASoC: SOF: mediatek: Provide debugfs_add_region_item ops for core
In-Reply-To: <20221222072150.10627-1-tinghan.shen@mediatek.com>
References: <20221222072150.10627-1-tinghan.shen@mediatek.com>
Message-ID: <20221222072150.10627-4-tinghan.shen@mediatek.com>

Set the generic iomem callback for debugfs_add_region_item to support
sof-logger.

Signed-off-by: Tinghan Shen <tinghan.shen at mediatek.com>
Reviewed-by: P?ter Ujfalusi <peter.ujfalusi at linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com>
---
 sound/soc/sof/mediatek/mt8186/mt8186.c | 3 +++
 sound/soc/sof/mediatek/mt8195/mt8195.c | 1 +
 2 files changed, 4 insertions(+)

diff --git a/sound/soc/sof/mediatek/mt8186/mt8186.c b/sound/soc/sof/mediatek/mt8186/mt8186.c
index af0dfc2fc4cc..dbea604ebc04 100644
--- a/sound/soc/sof/mediatek/mt8186/mt8186.c
+++ b/sound/soc/sof/mediatek/mt8186/mt8186.c
@@ -588,6 +588,9 @@ static struct snd_sof_dsp_ops sof_mt8186_ops = {
 	.drv		= mt8186_dai,
 	.num_drv	= ARRAY_SIZE(mt8186_dai),
 
+	/* Debug information */
+	.debugfs_add_region_item = snd_sof_debugfs_add_region_item_iomem,
+
 	/* PM */
 	.suspend	= mt8186_dsp_suspend,
 	.resume		= mt8186_dsp_resume,
diff --git a/sound/soc/sof/mediatek/mt8195/mt8195.c b/sound/soc/sof/mediatek/mt8195/mt8195.c
index 3c81e84fcecf..11ceff3acc54 100644
--- a/sound/soc/sof/mediatek/mt8195/mt8195.c
+++ b/sound/soc/sof/mediatek/mt8195/mt8195.c
@@ -642,6 +642,7 @@ static struct snd_sof_dsp_ops sof_mt8195_ops = {
 
 	/* Debug information */
 	.dbg_dump = mt8195_adsp_dump,
+	.debugfs_add_region_item = snd_sof_debugfs_add_region_item_iomem,
 
 	/* DAI drivers */
 	.drv = mt8195_dai,
-- 
2.18.0



From tinghan.shen at mediatek.com  Wed Dec 21 23:21:49 2022
From: tinghan.shen at mediatek.com (Tinghan Shen)
Date: Thu, 22 Dec 2022 15:21:49 +0800
Subject: [PATCH v1 2/3] ASoC: SOF: mediatek: Support mt8188 platform
In-Reply-To: <20221222072150.10627-1-tinghan.shen@mediatek.com>
References: <20221222072150.10627-1-tinghan.shen@mediatek.com>
Message-ID: <20221222072150.10627-3-tinghan.shen@mediatek.com>

Add support of SOF on MediaTek MT8188 SoC.
MT8188 ADSP integrates with a single core Cadence HiFi-5 DSP.
The IPC communication between AP and DSP is based on shared DRAM and
mailbox interrupt.

The change in the mt8186.h is compatible on both mt8186 and
mt8188. The register controls booting the DSP core with the
default address or the user specified address. Both mt8186
and mt8188 should boot with the user specified boot in the driver.
The usage of the register is the same on both SoC, but the
control bit is different on mt8186 and mt8188, which is bit 1 on mt8186
and bit 0 on mt8188. Configure the redundant bit has noside effect
on both SoCs.

Signed-off-by: Tinghan Shen <tinghan.shen at mediatek.com>
Reviewed-by: P?ter Ujfalusi <peter.ujfalusi at linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com>
---
 sound/soc/sof/mediatek/mt8186/mt8186.c | 17 +++++++++++++++++
 sound/soc/sof/mediatek/mt8186/mt8186.h |  3 ++-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/sound/soc/sof/mediatek/mt8186/mt8186.c b/sound/soc/sof/mediatek/mt8186/mt8186.c
index 79da25725987..af0dfc2fc4cc 100644
--- a/sound/soc/sof/mediatek/mt8186/mt8186.c
+++ b/sound/soc/sof/mediatek/mt8186/mt8186.c
@@ -625,8 +625,25 @@ static const struct sof_dev_desc sof_of_mt8186_desc = {
 	.ops = &sof_mt8186_ops,
 };
 
+static const struct sof_dev_desc sof_of_mt8188_desc = {
+	.ipc_supported_mask	= BIT(SOF_IPC),
+	.ipc_default		= SOF_IPC,
+	.default_fw_path = {
+		[SOF_IPC] = "mediatek/sof",
+	},
+	.default_tplg_path = {
+		[SOF_IPC] = "mediatek/sof-tplg",
+	},
+	.default_fw_filename = {
+		[SOF_IPC] = "sof-mt8188.ri",
+	},
+	.nocodec_tplg_filename = "sof-mt8188-nocodec.tplg",
+	.ops = &sof_mt8186_ops,
+};
+
 static const struct of_device_id sof_of_mt8186_ids[] = {
 	{ .compatible = "mediatek,mt8186-dsp", .data = &sof_of_mt8186_desc},
+	{ .compatible = "mediatek,mt8188-dsp", .data = &sof_of_mt8188_desc},
 	{ }
 };
 MODULE_DEVICE_TABLE(of, sof_of_mt8186_ids);
diff --git a/sound/soc/sof/mediatek/mt8186/mt8186.h b/sound/soc/sof/mediatek/mt8186/mt8186.h
index 98b2965e5ba6..886d687449e3 100644
--- a/sound/soc/sof/mediatek/mt8186/mt8186.h
+++ b/sound/soc/sof/mediatek/mt8186/mt8186.h
@@ -52,7 +52,8 @@ struct snd_sof_dev;
 #define ADSP_PRID			0x0
 #define ADSP_ALTVEC_C0			0x04
 #define ADSP_ALTVECSEL			0x0C
-#define ADSP_ALTVECSEL_C0		BIT(1)
+/* BIT(1) for mt8186. BIT(0) for mt8188 */
+#define ADSP_ALTVECSEL_C0		(BIT(0) | BIT(1))
 
 /* dsp bus */
 #define ADSP_SRAM_POOL_CON		0x190
-- 
2.18.0



From tinghan.shen at mediatek.com  Wed Dec 21 23:21:47 2022
From: tinghan.shen at mediatek.com (Tinghan Shen)
Date: Thu, 22 Dec 2022 15:21:47 +0800
Subject: [PATCH v1 0/3] Add support of MediaTek mt8188 to SOF
Message-ID: <20221222072150.10627-1-tinghan.shen@mediatek.com>

Add support of MediaTek mt8188 SoC DSP to SOF.
The sof driver patches in this series are taken from
thesofproject/linux/tree/topic/sof-dev-rebase.

Tinghan Shen (3):
  dt-bindings: dsp: mediatek: Add mt8188 dsp compatible
  ASoC: SOF: mediatek: Support mt8188 platform
  ASoC: SOF: mediatek: Provide debugfs_add_region_item ops for core

 .../bindings/dsp/mediatek,mt8186-dsp.yaml     |  4 +++-
 sound/soc/sof/mediatek/mt8186/mt8186.c        | 20 +++++++++++++++++++
 sound/soc/sof/mediatek/mt8186/mt8186.h        |  3 ++-
 sound/soc/sof/mediatek/mt8195/mt8195.c        |  1 +
 4 files changed, 26 insertions(+), 2 deletions(-)

-- 
2.18.0



From tinghan.shen at mediatek.com  Wed Dec 21 23:21:48 2022
From: tinghan.shen at mediatek.com (Tinghan Shen)
Date: Thu, 22 Dec 2022 15:21:48 +0800
Subject: [PATCH v1 1/3] dt-bindings: dsp: mediatek: Add mt8188 dsp compatible
In-Reply-To: <20221222072150.10627-1-tinghan.shen@mediatek.com>
References: <20221222072150.10627-1-tinghan.shen@mediatek.com>
Message-ID: <20221222072150.10627-2-tinghan.shen@mediatek.com>

Add support of the single-core HiFi5 audio DSP on MediaTek MT8188 SoC
for pre- and post- audio processing.

Signed-off-by: Tinghan Shen <tinghan.shen at mediatek.com>
---
 .../devicetree/bindings/dsp/mediatek,mt8186-dsp.yaml          | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/dsp/mediatek,mt8186-dsp.yaml b/Documentation/devicetree/bindings/dsp/mediatek,mt8186-dsp.yaml
index 3e63f79890b4..88575da1e6d5 100644
--- a/Documentation/devicetree/bindings/dsp/mediatek,mt8186-dsp.yaml
+++ b/Documentation/devicetree/bindings/dsp/mediatek,mt8186-dsp.yaml
@@ -15,7 +15,9 @@ description: |
 
 properties:
   compatible:
-    const: mediatek,mt8186-dsp
+    enum:
+      - mediatek,mt8186-dsp
+      - mediatek,mt8188-dsp
 
   reg:
     items:
-- 
2.18.0



From Sujuan.Chen at mediatek.com  Thu Dec 22 00:51:10 2022
From: Sujuan.Chen at mediatek.com (=?utf-8?B?U3VqdWFuIENoZW4gKOmZiOe0oOWonyk=?=)
Date: Thu, 22 Dec 2022 08:51:10 +0000
Subject: [PATCH v2] wifi: mt76: fix potential memory leakage
In-Reply-To: <Y6NKHY7euhifm0kI@lore-desk>
References: <3940cc5ccb4b17d51b5176e722daef0d1af66d6a.camel@mediatek.com>
	 <B2689D6F-E04E-4E9B-9244-4E5069DC464D@nbd.name>
	 <Y6NKHY7euhifm0kI@lore-desk>
Message-ID: <6de89564e1deb0b641b2a5039b23909f4647425e.camel@mediatek.com>

On Wed, 2022-12-21 at 19:02 +0100, Lorenzo Bianconi wrote:
> On Dec 21, Felix Fietkau wrote:
> > Hi Sujuan,
> > 
> > > Yes, it is so expensive, but if no memcopy, it will casue memory
> > > fragmentation (we hit this issue in internal SQC).
> > > 
> > > as we know, wed needs to exchange rx pkt(belongs to wed rx buffer
> > > manager) with wifi driver(dma rx data queue) by exchanging wfdma
> > > dmad
> > > to ensure the free wed rx buffer.
> > > 
> > > it is possiable that a large number of buffer has been exchanged
> > > to wed
> > > and can not come back to wlan driver. So, the memory from the
> > > same 32K
> > > page cache is unable to be released, and it will be failed at
> > > page_frag_alloc in mt76_dma_rx_fill.
> > > 
> > > Any ideas but memcopy?
> > 
> > A simple solution would be to simply allocate single pages, or
> > half-page fragments.
> > 
> > - Felix
> > 
> 
> A simple approach would be allocating a single page for each rx
> buffer.
> 
> @Sujuan: can you please double check if it is ok from performance and
> memory
> 	 fragmentation point of view? If not I guess we can try to
> optimize it
> 	 and allocate multiple buffers in the same page tweeking page
> refcount.
> 
> (this patch must be applied on top of Felix's dma fix).
> 

Allocating single page for each rx buffer avoids memory fragmentation,
but it always uses 4K for one rx pkt which only needs 2K, right?

I guess performance would be worse without page cache.
We have tested on the mtk private driver, 7% drop in throughput when
setting the 4K page cache compared to the 32K page cache.
and 10% drop when use slab to allocate buffer.

A single page per rx buffer may cause a throughput drop of over 7% and
waste memory, what do you think?

Regards,
Sujuan

> Regards,
> Lorenzo
> 
> diff --git a/drivers/net/wireless/mediatek/mt76/dma.c
> b/drivers/net/wireless/mediatek/mt76/dma.c
> index 28a7fe064313..1d9e580977fc 100644
> --- a/drivers/net/wireless/mediatek/mt76/dma.c
> +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> @@ -580,6 +580,20 @@ mt76_dma_tx_queue_skb(struct mt76_dev *dev,
> struct mt76_queue *q,
>  	return ret;
>  }
>  
> +static void *
> +mt76_dma_get_rx_buf(struct mt76_queue *q)
> +{
> +	if ((q->flags & MT_QFLAG_WED) &&
> +	    FIELD_GET(MT_QFLAG_WED_TYPE, q->flags) == MT76_WED_Q_RX) {
> +		/* WED RX queue */
> +		struct page *page = dev_alloc_page();
> +
> +		return page ? page_address(page) : NULL;
> +	}
> +
> +	return page_frag_alloc(&q->rx_page, q->buf_size, GFP_ATOMIC);
> +}
> +
>  static int
>  mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
>  {
> @@ -596,7 +610,7 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
> mt76_queue *q)
>  		struct mt76_queue_buf qbuf;
>  		void *buf = NULL;
>  
> -		buf = page_frag_alloc(&q->rx_page, q->buf_size,
> GFP_ATOMIC);
> +		buf = mt76_dma_get_rx_buf(q);
>  		if (!buf)
>  			break;
>  
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> index 1a2e4df8d1b5..2924e71e4fbe 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> @@ -594,13 +594,9 @@ static void
> mt7915_mmio_wed_offload_disable(struct mtk_wed_device *wed)
>  static void mt7915_mmio_wed_release_rx_buf(struct mtk_wed_device
> *wed)
>  {
>  	struct mt7915_dev *dev;
> -	u32 length;
>  	int i;
>  
>  	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
> -	length = SKB_DATA_ALIGN(NET_SKB_PAD + wed->wlan.rx_size +
> -				sizeof(struct skb_shared_info));
> -
>  	for (i = 0; i < dev->mt76.rx_token_size; i++) {
>  		struct mt76_txwi_cache *t;
>  
> @@ -610,7 +606,7 @@ static void mt7915_mmio_wed_release_rx_buf(struct
> mtk_wed_device *wed)
>  
>  		dma_unmap_single(dev->mt76.dma_dev, t->dma_addr,
>  				 wed->wlan.rx_size, DMA_FROM_DEVICE);
> -		__free_pages(virt_to_page(t->ptr), get_order(length));
> +		free_page(virt_to_page(t->ptr));
>  		t->ptr = NULL;
>  
>  		mt76_put_rxwi(&dev->mt76, t);
> @@ -621,13 +617,9 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> mtk_wed_device *wed, int size)
>  {
>  	struct mtk_rxbm_desc *desc = wed->rx_buf_ring.desc;
>  	struct mt7915_dev *dev;
> -	u32 length;
>  	int i;
>  
>  	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
> -	length = SKB_DATA_ALIGN(NET_SKB_PAD + wed->wlan.rx_size +
> -				sizeof(struct skb_shared_info));
> -
>  	for (i = 0; i < size; i++) {
>  		struct mt76_txwi_cache *t = mt76_get_rxwi(&dev->mt76);
>  		dma_addr_t phy_addr;
> @@ -635,7 +627,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> mtk_wed_device *wed, int size)
>  		int token;
>  		void *ptr;
>  
> -		page = __dev_alloc_pages(GFP_KERNEL,
> get_order(length));
> +		page = __dev_alloc_page(GFP_KERNEL);
>  		if (!page)
>  			goto unmap;
>  
> @@ -644,7 +636,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> mtk_wed_device *wed, int size)
>  					  wed->wlan.rx_size,
>  					  DMA_TO_DEVICE);
>  		if (unlikely(dma_mapping_error(dev->mt76.dev,
> phy_addr))) {
> -			__free_pages(page, get_order(length));
> +			free_page(page);
>  			goto unmap;
>  		}
>  
> @@ -653,7 +645,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> mtk_wed_device *wed, int size)
>  		if (token < 0) {
>  			dma_unmap_single(dev->mt76.dma_dev, phy_addr,
>  					 wed->wlan.rx_size,
> DMA_TO_DEVICE);
> -			__free_pages(page, get_order(length));
> +			free_page(page);
>  			goto unmap;
>  		}
>  

From Yong.Wu at mediatek.com  Thu Dec 22 01:17:58 2022
From: Yong.Wu at mediatek.com (=?utf-8?B?WW9uZyBXdSAo5ZC05YuHKQ==?=)
Date: Thu, 22 Dec 2022 09:17:58 +0000
Subject: [PATCH] iommu/mediatek-v1: Fix an error handling path in
 mtk_iommu_v1_probe()
In-Reply-To: <593e7b7d97c6e064b29716b091a9d4fd122241fb.1671473163.git.christophe.jaillet@wanadoo.fr>
References: <593e7b7d97c6e064b29716b091a9d4fd122241fb.1671473163.git.christophe.jaillet@wanadoo.fr>
Message-ID: <40866f6da41c8ae5127db0053bb3b449e5a2eb5e.camel@mediatek.com>

On Mon, 2022-12-19 at 19:06 +0100, Christophe JAILLET wrote:
> A clk, prepared and enabled in mtk_iommu_v1_hw_init(), is not
> released in
> the error handling path of mtk_iommu_v1_probe().
> 
> Add the corresponding clk_disable_unprepare(), as already done in the
> remove function.
> 
> Fixes: b17336c55d89 ("iommu/mediatek: add support for mtk iommu
> generation one HW")
> Signed-off-by: Christophe JAILLET <christophe.jaillet at wanadoo.fr>

Reviewed-by: Yong Wu <yong.wu at mediatek.com>

Thanks.

From michael-cy.lee at mediatek.com  Thu Dec 22 01:13:54 2022
From: michael-cy.lee at mediatek.com (Michael Lee)
Date: Thu, 22 Dec 2022 17:13:54 +0800
Subject: [PATCH] wifi: mac80211: check the control channel before downgrading the bandwidth
Message-ID: <20221222091354.14050-1-michael-cy.lee@mediatek.com>

When the link fails to use the channel, chandef's bandwidth will be 
downgraded without checking the control channel.
The issue happens when the STA of an extender with limited channel 
context associates with a root AP operating on a different channel.

Below is an example:

    ______________           ________________
   | RootAP(ch36) |         | Extender(ch44) |
   |              | (ASSOC) |       AP       |
   |      AP <-------------------- STA       |
   |______________|         |________________|

- RootAP is operating on channel 36, while Extender is operating
  on channel 44
- When associating with RootAP, Extender-STA downgrades the
  chandef's bandwidth to be compatible with any channels on the phy
- Finally, chandef's bandwidth is downgraded to 20MHz and 
  the association fails

In this patch, a control channel checking is added to avoid unnecessary
bandwidth downgrading

Signed-off-by: Michael Lee <michael-cy.lee at mediatek.com>
---
 net/mac80211/mlme.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 0aee2392dd29..bc435e8508e2 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -4616,6 +4616,27 @@ ieee80211_verify_sta_he_mcs_support(struct ieee80211_sub_if_data *sdata,
 	return false;
 }
 
+static bool
+ieee80211_check_same_ctrl_channel(struct ieee80211_sub_if_data *sdata,
+				  const struct cfg80211_chan_def *chandef)
+{
+	struct ieee80211_local *local = sdata->local;
+	struct ieee80211_chanctx *ctx;
+
+	mutex_lock(&local->chanctx_mtx);
+	list_for_each_entry(ctx, &local->chanctx_list, list) {
+		if (ctx->replace_state == IEEE80211_CHANCTX_WILL_BE_REPLACED)
+			continue;
+		if (ctx->mode == IEEE80211_CHANCTX_EXCLUSIVE)
+			continue;
+		if (chandef->chan == ctx->conf.def.chan)
+			return true;
+	}
+
+	mutex_unlock(&local->chanctx_mtx);
+	return false;
+}
+
 static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,
 				  struct ieee80211_link_data *link,
 				  struct cfg80211_bss *cbss,
@@ -4842,6 +4863,9 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,
 	    chandef.width == NL80211_CHAN_WIDTH_10)
 		goto out;
 
+	if (!ret || !ieee80211_check_same_ctrl_channel(sdata, &chandef))
+		goto out;
+
 	while (ret && chandef.width != NL80211_CHAN_WIDTH_20_NOHT) {
 		*conn_flags |=
 			ieee80211_chandef_downgrade(&chandef);
-- 
2.25.1



From lorenzo at kernel.org  Thu Dec 22 01:44:54 2022
From: lorenzo at kernel.org (lorenzo at kernel.org)
Date: Thu, 22 Dec 2022 10:44:54 +0100
Subject: [PATCH v2] wifi: mt76: fix potential memory leakage
In-Reply-To: <6de89564e1deb0b641b2a5039b23909f4647425e.camel@mediatek.com>
References: <3940cc5ccb4b17d51b5176e722daef0d1af66d6a.camel@mediatek.com>
 <B2689D6F-E04E-4E9B-9244-4E5069DC464D@nbd.name>
 <Y6NKHY7euhifm0kI@lore-desk>
 <6de89564e1deb0b641b2a5039b23909f4647425e.camel@mediatek.com>
Message-ID: <Y6QnFkJCWPsRgSQD@lore-desk>

> On Wed, 2022-12-21 at 19:02 +0100, Lorenzo Bianconi wrote:
> > On Dec 21, Felix Fietkau wrote:
> > > Hi Sujuan,
> > > 
> > > > Yes, it is so expensive, but if no memcopy, it will casue memory
> > > > fragmentation (we hit this issue in internal SQC).
> > > > 
> > > > as we know, wed needs to exchange rx pkt(belongs to wed rx buffer
> > > > manager) with wifi driver(dma rx data queue) by exchanging wfdma
> > > > dmad
> > > > to ensure the free wed rx buffer.
> > > > 
> > > > it is possiable that a large number of buffer has been exchanged
> > > > to wed
> > > > and can not come back to wlan driver. So, the memory from the
> > > > same 32K
> > > > page cache is unable to be released, and it will be failed at
> > > > page_frag_alloc in mt76_dma_rx_fill.
> > > > 
> > > > Any ideas but memcopy?
> > > 
> > > A simple solution would be to simply allocate single pages, or
> > > half-page fragments.
> > > 
> > > - Felix
> > > 
> > 
> > A simple approach would be allocating a single page for each rx
> > buffer.
> > 
> > @Sujuan: can you please double check if it is ok from performance and
> > memory
> > 	 fragmentation point of view? If not I guess we can try to
> > optimize it
> > 	 and allocate multiple buffers in the same page tweeking page
> > refcount.
> > 
> > (this patch must be applied on top of Felix's dma fix).
> > 
> 
> Allocating single page for each rx buffer avoids memory fragmentation,
> but it always uses 4K for one rx pkt which only needs 2K, right?

correct, we can optimize it allocating multiple buffers (in this case 2,
assuming 4K pages) in a single page and recycling the page.

> 
> I guess performance would be worse without page cache.

I think it is a trade-off

> We have tested on the mtk private driver, 7% drop in throughput when
> setting the 4K page cache compared to the 32K page cache.
> and 10% drop when use slab to allocate buffer.

IIUC you tested with PAGE_FRAG_CACHE_MAX_SIZE set to 4K (or with a private
page_frag_alloc() implementation) and you avoided memory allocation
failures due to fragmentation but you got ~ 7% drop in throughput, correct?
I think this is quite expected since we need to refill ~ 8 times more the
page cache.

Not considering memory fragmentation, have you measured the impact of the
memcpy of a full buffer?

> 
> A single page per rx buffer may cause a throughput drop of over 7% and
> waste memory, what do you think?

Implementing the page recycles as it is done in page_frag_alloc() we should get
the same results you got with PAGE_FRAG_CACHE_MAX_SIZE set to 4K.

Regards,
Lorenzo

> 
> Regards,
> Sujuan
> 
> > Regards,
> > Lorenzo
> > 
> > diff --git a/drivers/net/wireless/mediatek/mt76/dma.c
> > b/drivers/net/wireless/mediatek/mt76/dma.c
> > index 28a7fe064313..1d9e580977fc 100644
> > --- a/drivers/net/wireless/mediatek/mt76/dma.c
> > +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> > @@ -580,6 +580,20 @@ mt76_dma_tx_queue_skb(struct mt76_dev *dev,
> > struct mt76_queue *q,
> >  	return ret;
> >  }
> >  
> > +static void *
> > +mt76_dma_get_rx_buf(struct mt76_queue *q)
> > +{
> > +	if ((q->flags & MT_QFLAG_WED) &&
> > +	    FIELD_GET(MT_QFLAG_WED_TYPE, q->flags) == MT76_WED_Q_RX) {
> > +		/* WED RX queue */
> > +		struct page *page = dev_alloc_page();
> > +
> > +		return page ? page_address(page) : NULL;
> > +	}
> > +
> > +	return page_frag_alloc(&q->rx_page, q->buf_size, GFP_ATOMIC);
> > +}
> > +
> >  static int
> >  mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
> >  {
> > @@ -596,7 +610,7 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
> > mt76_queue *q)
> >  		struct mt76_queue_buf qbuf;
> >  		void *buf = NULL;
> >  
> > -		buf = page_frag_alloc(&q->rx_page, q->buf_size,
> > GFP_ATOMIC);
> > +		buf = mt76_dma_get_rx_buf(q);
> >  		if (!buf)
> >  			break;
> >  
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > index 1a2e4df8d1b5..2924e71e4fbe 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > @@ -594,13 +594,9 @@ static void
> > mt7915_mmio_wed_offload_disable(struct mtk_wed_device *wed)
> >  static void mt7915_mmio_wed_release_rx_buf(struct mtk_wed_device
> > *wed)
> >  {
> >  	struct mt7915_dev *dev;
> > -	u32 length;
> >  	int i;
> >  
> >  	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
> > -	length = SKB_DATA_ALIGN(NET_SKB_PAD + wed->wlan.rx_size +
> > -				sizeof(struct skb_shared_info));
> > -
> >  	for (i = 0; i < dev->mt76.rx_token_size; i++) {
> >  		struct mt76_txwi_cache *t;
> >  
> > @@ -610,7 +606,7 @@ static void mt7915_mmio_wed_release_rx_buf(struct
> > mtk_wed_device *wed)
> >  
> >  		dma_unmap_single(dev->mt76.dma_dev, t->dma_addr,
> >  				 wed->wlan.rx_size, DMA_FROM_DEVICE);
> > -		__free_pages(virt_to_page(t->ptr), get_order(length));
> > +		free_page(virt_to_page(t->ptr));
> >  		t->ptr = NULL;
> >  
> >  		mt76_put_rxwi(&dev->mt76, t);
> > @@ -621,13 +617,9 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> > mtk_wed_device *wed, int size)
> >  {
> >  	struct mtk_rxbm_desc *desc = wed->rx_buf_ring.desc;
> >  	struct mt7915_dev *dev;
> > -	u32 length;
> >  	int i;
> >  
> >  	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
> > -	length = SKB_DATA_ALIGN(NET_SKB_PAD + wed->wlan.rx_size +
> > -				sizeof(struct skb_shared_info));
> > -
> >  	for (i = 0; i < size; i++) {
> >  		struct mt76_txwi_cache *t = mt76_get_rxwi(&dev->mt76);
> >  		dma_addr_t phy_addr;
> > @@ -635,7 +627,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> > mtk_wed_device *wed, int size)
> >  		int token;
> >  		void *ptr;
> >  
> > -		page = __dev_alloc_pages(GFP_KERNEL,
> > get_order(length));
> > +		page = __dev_alloc_page(GFP_KERNEL);
> >  		if (!page)
> >  			goto unmap;
> >  
> > @@ -644,7 +636,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> > mtk_wed_device *wed, int size)
> >  					  wed->wlan.rx_size,
> >  					  DMA_TO_DEVICE);
> >  		if (unlikely(dma_mapping_error(dev->mt76.dev,
> > phy_addr))) {
> > -			__free_pages(page, get_order(length));
> > +			free_page(page);
> >  			goto unmap;
> >  		}
> >  
> > @@ -653,7 +645,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> > mtk_wed_device *wed, int size)
> >  		if (token < 0) {
> >  			dma_unmap_single(dev->mt76.dma_dev, phy_addr,
> >  					 wed->wlan.rx_size,
> > DMA_TO_DEVICE);
> > -			__free_pages(page, get_order(length));
> > +			free_page(page);
> >  			goto unmap;
> >  		}
> >  
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221222/51fa32fc/attachment-0001.sig>

From Yong.Wu at mediatek.com  Thu Dec 22 02:02:27 2022
From: Yong.Wu at mediatek.com (=?utf-8?B?WW9uZyBXdSAo5ZC05YuHKQ==?=)
Date: Thu, 22 Dec 2022 10:02:27 +0000
Subject: [PATCH v5 2/4] iommu/mediatek: Adjust mtk_iommu_config flow
In-Reply-To: <20221205095001.31918-3-chengci.xu@mediatek.com>
References: <20221205095001.31918-1-chengci.xu@mediatek.com>
	 <20221205095001.31918-3-chengci.xu@mediatek.com>
Message-ID: <26c16dcd2f9f02b860ce6f7a56aeef3be5c46856.camel@mediatek.com>

On Mon, 2022-12-05 at 17:49 +0800, Chengci.Xu wrote:
> For reduce indention without functional change, prepare for MT8188.
> If there are many port in a same larb, current flow will update
> larb_mmu->mmu or update INFRA register for too many times.
> So we save all port to portid_msk in the front of mtk_iommu_config(),

s/port/ports/g

> and then update only once for IOMMU configure. By this modification,
> we can prevent MT8188 from sending to many SMC calls, avoiding enter
> ATF for each port.
> 
> Signed-off-by: Chengci.Xu <chengci.xu at mediatek.com>

Reviewed-by: Yong Wu <yong.wu at mediatek.com>




From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:09:34 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:09:34 +0100
Subject: [PATCH v1 2/3] ASoC: SOF: mediatek: Support mt8188 platform
In-Reply-To: <20221222072150.10627-3-tinghan.shen@mediatek.com>
References: <20221222072150.10627-1-tinghan.shen@mediatek.com>
 <20221222072150.10627-3-tinghan.shen@mediatek.com>
Message-ID: <31b2946b-d4f2-5e5b-a107-45b3454c601b@collabora.com>

Il 22/12/22 08:21, Tinghan Shen ha scritto:
> Add support of SOF on MediaTek MT8188 SoC.
> MT8188 ADSP integrates with a single core Cadence HiFi-5 DSP.
> The IPC communication between AP and DSP is based on shared DRAM and
> mailbox interrupt.
> 
> The change in the mt8186.h is compatible on both mt8186 and
> mt8188. The register controls booting the DSP core with the
> default address or the user specified address. Both mt8186
> and mt8188 should boot with the user specified boot in the driver.
> The usage of the register is the same on both SoC, but the
> control bit is different on mt8186 and mt8188, which is bit 1 on mt8186
> and bit 0 on mt8188. Configure the redundant bit has noside effect
> on both SoCs.
> 
> Signed-off-by: Tinghan Shen <tinghan.shen at mediatek.com>
> Reviewed-by: P?ter Ujfalusi <peter.ujfalusi at linux.intel.com>
> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
> Reviewed-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com>
> ---
>   sound/soc/sof/mediatek/mt8186/mt8186.c | 17 +++++++++++++++++
>   sound/soc/sof/mediatek/mt8186/mt8186.h |  3 ++-
>   2 files changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/soc/sof/mediatek/mt8186/mt8186.c b/sound/soc/sof/mediatek/mt8186/mt8186.c
> index 79da25725987..af0dfc2fc4cc 100644
> --- a/sound/soc/sof/mediatek/mt8186/mt8186.c
> +++ b/sound/soc/sof/mediatek/mt8186/mt8186.c
> @@ -625,8 +625,25 @@ static const struct sof_dev_desc sof_of_mt8186_desc = {
>   	.ops = &sof_mt8186_ops,
>   };
>   
> +static const struct sof_dev_desc sof_of_mt8188_desc = {
> +	.ipc_supported_mask	= BIT(SOF_IPC),
> +	.ipc_default		= SOF_IPC,
> +	.default_fw_path = {
> +		[SOF_IPC] = "mediatek/sof",
> +	},
> +	.default_tplg_path = {
> +		[SOF_IPC] = "mediatek/sof-tplg",
> +	},
> +	.default_fw_filename = {
> +		[SOF_IPC] = "sof-mt8188.ri",
> +	},
> +	.nocodec_tplg_filename = "sof-mt8188-nocodec.tplg",
> +	.ops = &sof_mt8186_ops,
> +};
> +
>   static const struct of_device_id sof_of_mt8186_ids[] = {
>   	{ .compatible = "mediatek,mt8186-dsp", .data = &sof_of_mt8186_desc},
> +	{ .compatible = "mediatek,mt8188-dsp", .data = &sof_of_mt8188_desc},
>   	{ }
>   };
>   MODULE_DEVICE_TABLE(of, sof_of_mt8186_ids);
> diff --git a/sound/soc/sof/mediatek/mt8186/mt8186.h b/sound/soc/sof/mediatek/mt8186/mt8186.h
> index 98b2965e5ba6..886d687449e3 100644
> --- a/sound/soc/sof/mediatek/mt8186/mt8186.h
> +++ b/sound/soc/sof/mediatek/mt8186/mt8186.h
> @@ -52,7 +52,8 @@ struct snd_sof_dev;
>   #define ADSP_PRID			0x0
>   #define ADSP_ALTVEC_C0			0x04
>   #define ADSP_ALTVECSEL			0x0C
> -#define ADSP_ALTVECSEL_C0		BIT(1)
> +/* BIT(1) for mt8186. BIT(0) for mt8188 */

We can be clearer here:

#define MT8188_ADSP_ALTVECSEL_C0	BIT(0)
#define MT8186_ADSP_ALTVECSEL_C0	BIT(1)

/*
  * On MT8188, BIT(1) is not evaluated and on MT8186 BIT(0) is not evaluated:
  * We can simplify the driver by safely setting both bits regardless of the SoC.
  */
#define ADSP_ALTVECSEL_C0		(MT8188_ADSP_ALTVECSEL_C0 |
					 MT8186_ADSP_ALTVECSEL_C0)

...so that we don't have to check the commit history to understand what's going
on here, and it becomes clear that ALTVECSEL is not both bits, but one of them.

Cheers,
Angelo



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:10:02 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:10:02 +0100
Subject: [PATCH v1 3/3] ASoC: SOF: mediatek: Provide
 debugfs_add_region_item ops for core
In-Reply-To: <20221222072150.10627-4-tinghan.shen@mediatek.com>
References: <20221222072150.10627-1-tinghan.shen@mediatek.com>
 <20221222072150.10627-4-tinghan.shen@mediatek.com>
Message-ID: <2dc5b86a-0bc6-db0d-5a1d-1fa7415f8ec7@collabora.com>

Il 22/12/22 08:21, Tinghan Shen ha scritto:
> Set the generic iomem callback for debugfs_add_region_item to support
> sof-logger.
> 
> Signed-off-by: Tinghan Shen <tinghan.shen at mediatek.com>
> Reviewed-by: P?ter Ujfalusi <peter.ujfalusi at linux.intel.com>
> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
> Reviewed-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:10:22 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:10:22 +0100
Subject: [PATCH v1 1/3] dt-bindings: dsp: mediatek: Add mt8188 dsp
 compatible
In-Reply-To: <20221222072150.10627-2-tinghan.shen@mediatek.com>
References: <20221222072150.10627-1-tinghan.shen@mediatek.com>
 <20221222072150.10627-2-tinghan.shen@mediatek.com>
Message-ID: <e42767f6-7374-3d68-b267-2683970055ee@collabora.com>

Il 22/12/22 08:21, Tinghan Shen ha scritto:
> Add support of the single-core HiFi5 audio DSP on MediaTek MT8188 SoC
> for pre- and post- audio processing.
> 
> Signed-off-by: Tinghan Shen <tinghan.shen at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:35 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:35 +0100
Subject: [PATCH v1 03/25] clk: mediatek: clk-gate: Propagate struct device with mtk_clk_register_gates()
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-4-angelogioacchino.delregno@collabora.com>

Commit e4c23e19aa2a ("clk: mediatek: Register clock gate with device")
introduces a helper function for the sole purpose of propagating a
struct device pointer to the clk API when registering the mtk-gate
clocks to take advantage of Runtime PM when/where needed and where
a power domain is defined in devicetree.

Function mtk_clk_register_gates() then becomes a wrapper around the
new mtk_clk_register_gates_with_dev() function that will simply pass
NULL as struct device: this is essential when registering drivers
with CLK_OF_DECLARE instead of as a platform device, as there will
be no struct device to pass... but we can as well simply have only
one function that always takes such pointer as a param and pass NULL
when unavoidable.

This commit removes the mtk_clk_register_gates() wrapper and renames
mtk_clk_register_gates_with_dev() to the former and all of the calls
to either of the two functions were fixed in all drivers in order to
reflect this change.

Since a lot of MediaTek clock drivers are actually registering as a
platform device, but were still registering the mtk-gate clocks
without passing any struct device to the clock framework, they've
been changed to pass a valid one now, as to make all those platforms
able to use runtime power management where available.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-gate.c              | 16 ++++------------
 drivers/clk/mediatek/clk-gate.h              |  8 ++------
 drivers/clk/mediatek/clk-mt2701-aud.c        |  2 +-
 drivers/clk/mediatek/clk-mt2701-eth.c        |  2 +-
 drivers/clk/mediatek/clk-mt2701-g3d.c        |  2 +-
 drivers/clk/mediatek/clk-mt2701-hif.c        |  2 +-
 drivers/clk/mediatek/clk-mt2701-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt2701.c            |  6 +++---
 drivers/clk/mediatek/clk-mt2712-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt2712.c            |  6 +++---
 drivers/clk/mediatek/clk-mt6765.c            |  6 +++---
 drivers/clk/mediatek/clk-mt6779-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt6779.c            |  4 ++--
 drivers/clk/mediatek/clk-mt6795-infracfg.c   |  3 ++-
 drivers/clk/mediatek/clk-mt6795-mm.c         |  3 ++-
 drivers/clk/mediatek/clk-mt6795-pericfg.c    |  3 ++-
 drivers/clk/mediatek/clk-mt6797-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt6797.c            |  2 +-
 drivers/clk/mediatek/clk-mt7622-aud.c        |  2 +-
 drivers/clk/mediatek/clk-mt7622-eth.c        |  4 ++--
 drivers/clk/mediatek/clk-mt7622-hif.c        |  4 ++--
 drivers/clk/mediatek/clk-mt7622.c            |  9 +++++----
 drivers/clk/mediatek/clk-mt7629-eth.c        |  5 +++--
 drivers/clk/mediatek/clk-mt7629-hif.c        |  4 ++--
 drivers/clk/mediatek/clk-mt7629.c            |  6 +++---
 drivers/clk/mediatek/clk-mt7986-eth.c        |  6 +++---
 drivers/clk/mediatek/clk-mt7986-infracfg.c   |  2 +-
 drivers/clk/mediatek/clk-mt8135.c            |  4 ++--
 drivers/clk/mediatek/clk-mt8167-aud.c        |  2 +-
 drivers/clk/mediatek/clk-mt8167-img.c        |  2 +-
 drivers/clk/mediatek/clk-mt8167-mfgcfg.c     |  2 +-
 drivers/clk/mediatek/clk-mt8167-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt8167-vdec.c       |  3 ++-
 drivers/clk/mediatek/clk-mt8167.c            |  2 +-
 drivers/clk/mediatek/clk-mt8173-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt8173.c            | 12 ++++++------
 drivers/clk/mediatek/clk-mt8183-audio.c      |  2 +-
 drivers/clk/mediatek/clk-mt8183-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt8183.c            |  8 ++++----
 drivers/clk/mediatek/clk-mt8186-mm.c         |  3 ++-
 drivers/clk/mediatek/clk-mt8192-aud.c        |  3 ++-
 drivers/clk/mediatek/clk-mt8192-mm.c         |  3 ++-
 drivers/clk/mediatek/clk-mt8192.c            | 12 ++++++------
 drivers/clk/mediatek/clk-mt8195-apmixedsys.c |  3 ++-
 drivers/clk/mediatek/clk-mt8195-topckgen.c   |  3 ++-
 drivers/clk/mediatek/clk-mt8195-vdo0.c       |  3 ++-
 drivers/clk/mediatek/clk-mt8195-vdo1.c       |  3 ++-
 drivers/clk/mediatek/clk-mt8365-mm.c         |  5 ++---
 drivers/clk/mediatek/clk-mt8365.c            |  2 +-
 drivers/clk/mediatek/clk-mt8516-aud.c        |  2 +-
 drivers/clk/mediatek/clk-mt8516.c            |  2 +-
 drivers/clk/mediatek/clk-mtk.c               |  4 ++--
 52 files changed, 103 insertions(+), 103 deletions(-)

diff --git a/drivers/clk/mediatek/clk-gate.c b/drivers/clk/mediatek/clk-gate.c
index 0c867136e49d..80deaabfd848 100644
--- a/drivers/clk/mediatek/clk-gate.c
+++ b/drivers/clk/mediatek/clk-gate.c
@@ -202,10 +202,10 @@ static void mtk_clk_unregister_gate(struct clk_hw *hw)
 	kfree(cg);
 }
 
-int mtk_clk_register_gates_with_dev(struct device_node *node,
-				    const struct mtk_gate *clks, int num,
-				    struct clk_hw_onecell_data *clk_data,
-				    struct device *dev)
+int mtk_clk_register_gates(struct device_node *node,
+			   const struct mtk_gate *clks, int num,
+			   struct clk_hw_onecell_data *clk_data,
+			   struct device *dev)
 {
 	int i;
 	struct clk_hw *hw;
@@ -261,14 +261,6 @@ int mtk_clk_register_gates_with_dev(struct device_node *node,
 
 	return PTR_ERR(hw);
 }
-EXPORT_SYMBOL_GPL(mtk_clk_register_gates_with_dev);
-
-int mtk_clk_register_gates(struct device_node *node,
-			   const struct mtk_gate *clks, int num,
-			   struct clk_hw_onecell_data *clk_data)
-{
-	return mtk_clk_register_gates_with_dev(node, clks, num, clk_data, NULL);
-}
 EXPORT_SYMBOL_GPL(mtk_clk_register_gates);
 
 void mtk_clk_unregister_gates(const struct mtk_gate *clks, int num,
diff --git a/drivers/clk/mediatek/clk-gate.h b/drivers/clk/mediatek/clk-gate.h
index d9897ef53528..03053c2c2fdd 100644
--- a/drivers/clk/mediatek/clk-gate.h
+++ b/drivers/clk/mediatek/clk-gate.h
@@ -52,12 +52,8 @@ struct mtk_gate {
 
 int mtk_clk_register_gates(struct device_node *node,
 			   const struct mtk_gate *clks, int num,
-			   struct clk_hw_onecell_data *clk_data);
-
-int mtk_clk_register_gates_with_dev(struct device_node *node,
-				    const struct mtk_gate *clks, int num,
-				    struct clk_hw_onecell_data *clk_data,
-				    struct device *dev);
+			   struct clk_hw_onecell_data *clk_data,
+			   struct device *dev);
 
 void mtk_clk_unregister_gates(const struct mtk_gate *clks, int num,
 			      struct clk_hw_onecell_data *clk_data);
diff --git a/drivers/clk/mediatek/clk-mt2701-aud.c b/drivers/clk/mediatek/clk-mt2701-aud.c
index 6ba398eb7df9..ab13ab618fb5 100644
--- a/drivers/clk/mediatek/clk-mt2701-aud.c
+++ b/drivers/clk/mediatek/clk-mt2701-aud.c
@@ -152,7 +152,7 @@ static int clk_mt2701_aud_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_AUD_NR);
 
 	mtk_clk_register_gates(node, audio_clks, ARRAY_SIZE(audio_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r) {
diff --git a/drivers/clk/mediatek/clk-mt2701-eth.c b/drivers/clk/mediatek/clk-mt2701-eth.c
index edf1e2ed2b59..9670e1e170f2 100644
--- a/drivers/clk/mediatek/clk-mt2701-eth.c
+++ b/drivers/clk/mediatek/clk-mt2701-eth.c
@@ -58,7 +58,7 @@ static int clk_mt2701_eth_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_ETHSYS_NR);
 
 	mtk_clk_register_gates(node, eth_clks, ARRAY_SIZE(eth_clks),
-						clk_data);
+						clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt2701-g3d.c b/drivers/clk/mediatek/clk-mt2701-g3d.c
index 1458109d99d9..11391b144267 100644
--- a/drivers/clk/mediatek/clk-mt2701-g3d.c
+++ b/drivers/clk/mediatek/clk-mt2701-g3d.c
@@ -52,7 +52,7 @@ static int clk_mt2701_g3dsys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_G3DSYS_NR);
 
 	mtk_clk_register_gates(node, g3d_clks, ARRAY_SIZE(g3d_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt2701-hif.c b/drivers/clk/mediatek/clk-mt2701-hif.c
index 434cbbe8c037..c14c0bb10f88 100644
--- a/drivers/clk/mediatek/clk-mt2701-hif.c
+++ b/drivers/clk/mediatek/clk-mt2701-hif.c
@@ -55,7 +55,7 @@ static int clk_mt2701_hif_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_HIFSYS_NR);
 
 	mtk_clk_register_gates(node, hif_clks, ARRAY_SIZE(hif_clks),
-						clk_data);
+						clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r) {
diff --git a/drivers/clk/mediatek/clk-mt2701-mm.c b/drivers/clk/mediatek/clk-mt2701-mm.c
index 9ea7abad99d2..ec5e516ca099 100644
--- a/drivers/clk/mediatek/clk-mt2701-mm.c
+++ b/drivers/clk/mediatek/clk-mt2701-mm.c
@@ -89,7 +89,7 @@ static int clk_mt2701_mm_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MM_NR);
 
 	mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
-						clk_data);
+						clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt2701.c b/drivers/clk/mediatek/clk-mt2701.c
index 9b442af37e67..dff69fabb171 100644
--- a/drivers/clk/mediatek/clk-mt2701.c
+++ b/drivers/clk/mediatek/clk-mt2701.c
@@ -690,7 +690,7 @@ static int mtk_topckgen_init(struct platform_device *pdev)
 				base, &mt2701_clk_lock, clk_data);
 
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-						clk_data);
+			       clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
@@ -796,7 +796,7 @@ static int mtk_infrasys_init(struct platform_device *pdev)
 	}
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-						infra_clk_data);
+			       infra_clk_data, &pdev->dev);
 	mtk_clk_register_factors(infra_fixed_divs, ARRAY_SIZE(infra_fixed_divs),
 						infra_clk_data);
 
@@ -919,7 +919,7 @@ static int mtk_pericfg_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR);
 
 	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-						clk_data);
+			       clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(peri_muxs, ARRAY_SIZE(peri_muxs), base,
 			&mt2701_clk_lock, clk_data);
diff --git a/drivers/clk/mediatek/clk-mt2712-mm.c b/drivers/clk/mediatek/clk-mt2712-mm.c
index 7d44b09b8a0a..6c5f26a73476 100644
--- a/drivers/clk/mediatek/clk-mt2712-mm.c
+++ b/drivers/clk/mediatek/clk-mt2712-mm.c
@@ -136,7 +136,7 @@ static int clk_mt2712_mm_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MM_NR_CLK);
 
 	mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
-			clk_data);
+			clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt2712.c b/drivers/clk/mediatek/clk-mt2712.c
index 56980dd6c2ea..24ec3384c429 100644
--- a/drivers/clk/mediatek/clk-mt2712.c
+++ b/drivers/clk/mediatek/clk-mt2712.c
@@ -1351,7 +1351,7 @@ static int clk_mt2712_top_probe(struct platform_device *pdev)
 	mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
 			&mt2712_clk_lock, top_clk_data);
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-			top_clk_data);
+			top_clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, top_clk_data);
 
@@ -1371,7 +1371,7 @@ static int clk_mt2712_infra_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			clk_data);
+			clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
@@ -1393,7 +1393,7 @@ static int clk_mt2712_peri_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
 
 	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-			clk_data);
+			clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt6765.c b/drivers/clk/mediatek/clk-mt6765.c
index e9b9e6729733..7401693ef472 100644
--- a/drivers/clk/mediatek/clk-mt6765.c
+++ b/drivers/clk/mediatek/clk-mt6765.c
@@ -790,7 +790,7 @@ static int clk_mt6765_apmixed_probe(struct platform_device *pdev)
 	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
 
 	mtk_clk_register_gates(node, apmixed_clks,
-			       ARRAY_SIZE(apmixed_clks), clk_data);
+			       ARRAY_SIZE(apmixed_clks), clk_data, &pdev->dev);
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
 	if (r)
@@ -829,7 +829,7 @@ static int clk_mt6765_top_probe(struct platform_device *pdev)
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
 			       &mt6765_clk_lock, clk_data);
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
@@ -863,7 +863,7 @@ static int clk_mt6765_ifr_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_IFR_NR_CLK);
 
 	mtk_clk_register_gates(node, ifr_clks, ARRAY_SIZE(ifr_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt6779-mm.c b/drivers/clk/mediatek/clk-mt6779-mm.c
index eda8cbee3d23..101808b3e38f 100644
--- a/drivers/clk/mediatek/clk-mt6779-mm.c
+++ b/drivers/clk/mediatek/clk-mt6779-mm.c
@@ -94,7 +94,7 @@ static int clk_mt6779_mm_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MM_NR_CLK);
 
 	mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt6779.c b/drivers/clk/mediatek/clk-mt6779.c
index 0d0a90ee5eb2..622a2fc6c167 100644
--- a/drivers/clk/mediatek/clk-mt6779.c
+++ b/drivers/clk/mediatek/clk-mt6779.c
@@ -1222,7 +1222,7 @@ static int clk_mt6779_apmixed_probe(struct platform_device *pdev)
 	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
 
 	mtk_clk_register_gates(node, apmixed_clks,
-			       ARRAY_SIZE(apmixed_clks), clk_data);
+			       ARRAY_SIZE(apmixed_clks), clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
@@ -1264,7 +1264,7 @@ static int clk_mt6779_infra_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt6795-infracfg.c b/drivers/clk/mediatek/clk-mt6795-infracfg.c
index df7eed6e071e..4bbd2bfe2ec4 100644
--- a/drivers/clk/mediatek/clk-mt6795-infracfg.c
+++ b/drivers/clk/mediatek/clk-mt6795-infracfg.c
@@ -101,7 +101,8 @@ static int clk_mt6795_infracfg_probe(struct platform_device *pdev)
 	if (ret)
 		goto free_clk_data;
 
-	ret = mtk_clk_register_gates(node, infra_gates, ARRAY_SIZE(infra_gates), clk_data);
+	ret = mtk_clk_register_gates(node, infra_gates, ARRAY_SIZE(infra_gates),
+				     clk_data, &pdev->dev);
 	if (ret)
 		goto free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt6795-mm.c b/drivers/clk/mediatek/clk-mt6795-mm.c
index fd73f202f292..10a623b83f68 100644
--- a/drivers/clk/mediatek/clk-mt6795-mm.c
+++ b/drivers/clk/mediatek/clk-mt6795-mm.c
@@ -87,7 +87,8 @@ static int clk_mt6795_mm_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	ret = mtk_clk_register_gates(node, mm_gates, ARRAY_SIZE(mm_gates), clk_data);
+	ret = mtk_clk_register_gates(node, mm_gates, ARRAY_SIZE(mm_gates),
+				     clk_data, &pdev->dev);
 	if (ret)
 		goto free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt6795-pericfg.c b/drivers/clk/mediatek/clk-mt6795-pericfg.c
index cb28d35dad59..479a8abcb80b 100644
--- a/drivers/clk/mediatek/clk-mt6795-pericfg.c
+++ b/drivers/clk/mediatek/clk-mt6795-pericfg.c
@@ -109,7 +109,8 @@ static int clk_mt6795_pericfg_probe(struct platform_device *pdev)
 	if (ret)
 		goto free_clk_data;
 
-	ret = mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates), clk_data);
+	ret = mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
+				     clk_data, &pdev->dev);
 	if (ret)
 		goto free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt6797-mm.c b/drivers/clk/mediatek/clk-mt6797-mm.c
index 0846011fc894..dd96db5f2c0d 100644
--- a/drivers/clk/mediatek/clk-mt6797-mm.c
+++ b/drivers/clk/mediatek/clk-mt6797-mm.c
@@ -102,7 +102,7 @@ static int clk_mt6797_mm_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MM_NR);
 
 	mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt6797.c b/drivers/clk/mediatek/clk-mt6797.c
index b89f325a4b9b..250ac8bd6a3c 100644
--- a/drivers/clk/mediatek/clk-mt6797.c
+++ b/drivers/clk/mediatek/clk-mt6797.c
@@ -597,7 +597,7 @@ static int mtk_infrasys_init(struct platform_device *pdev)
 	}
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       infra_clk_data);
+			       infra_clk_data, &pdev->dev);
 	mtk_clk_register_factors(infra_fixed_divs, ARRAY_SIZE(infra_fixed_divs),
 				 infra_clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt7622-aud.c b/drivers/clk/mediatek/clk-mt7622-aud.c
index 9f2e5aa7b5d9..d0379d8704af 100644
--- a/drivers/clk/mediatek/clk-mt7622-aud.c
+++ b/drivers/clk/mediatek/clk-mt7622-aud.c
@@ -139,7 +139,7 @@ static int clk_mt7622_audiosys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_AUDIO_NR_CLK);
 
 	mtk_clk_register_gates(node, audio_clks, ARRAY_SIZE(audio_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r) {
diff --git a/drivers/clk/mediatek/clk-mt7622-eth.c b/drivers/clk/mediatek/clk-mt7622-eth.c
index 43de0477d5d9..9b4a26ca0f44 100644
--- a/drivers/clk/mediatek/clk-mt7622-eth.c
+++ b/drivers/clk/mediatek/clk-mt7622-eth.c
@@ -82,7 +82,7 @@ static int clk_mt7622_ethsys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_ETH_NR_CLK);
 
 	mtk_clk_register_gates(node, eth_clks, ARRAY_SIZE(eth_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -104,7 +104,7 @@ static int clk_mt7622_sgmiisys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_SGMII_NR_CLK);
 
 	mtk_clk_register_gates(node, sgmii_clks, ARRAY_SIZE(sgmii_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt7622-hif.c b/drivers/clk/mediatek/clk-mt7622-hif.c
index 67e96231dd25..8cf37f75ca77 100644
--- a/drivers/clk/mediatek/clk-mt7622-hif.c
+++ b/drivers/clk/mediatek/clk-mt7622-hif.c
@@ -93,7 +93,7 @@ static int clk_mt7622_ssusbsys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_SSUSB_NR_CLK);
 
 	mtk_clk_register_gates(node, ssusb_clks, ARRAY_SIZE(ssusb_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -115,7 +115,7 @@ static int clk_mt7622_pciesys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PCIE_NR_CLK);
 
 	mtk_clk_register_gates(node, pcie_clks, ARRAY_SIZE(pcie_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt7622.c b/drivers/clk/mediatek/clk-mt7622.c
index 3b55f8641fae..eab450fc824c 100644
--- a/drivers/clk/mediatek/clk-mt7622.c
+++ b/drivers/clk/mediatek/clk-mt7622.c
@@ -653,7 +653,7 @@ static int mtk_topckgen_init(struct platform_device *pdev)
 				  base, &mt7622_clk_lock, clk_data);
 
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	clk_prepare_enable(clk_data->hws[CLK_TOP_AXI_SEL]->clk);
 	clk_prepare_enable(clk_data->hws[CLK_TOP_MEM_SEL]->clk);
@@ -671,7 +671,7 @@ static int mtk_infrasys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	mtk_clk_register_cpumuxes(node, infra_muxes, ARRAY_SIZE(infra_muxes),
 				  clk_data);
@@ -699,7 +699,8 @@ static int mtk_apmixedsys_init(struct platform_device *pdev)
 			      clk_data);
 
 	mtk_clk_register_gates(node, apmixed_clks,
-			       ARRAY_SIZE(apmixed_clks), clk_data);
+			       ARRAY_SIZE(apmixed_clks), clk_data,
+			       &pdev->dev);
 
 	clk_prepare_enable(clk_data->hws[CLK_APMIXED_ARMPLL]->clk);
 	clk_prepare_enable(clk_data->hws[CLK_APMIXED_MAIN_CORE_EN]->clk);
@@ -721,7 +722,7 @@ static int mtk_pericfg_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
 
 	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(peri_muxes, ARRAY_SIZE(peri_muxes), base,
 				    &mt7622_clk_lock, clk_data);
diff --git a/drivers/clk/mediatek/clk-mt7629-eth.c b/drivers/clk/mediatek/clk-mt7629-eth.c
index 282dd6559465..39aa9eb5355e 100644
--- a/drivers/clk/mediatek/clk-mt7629-eth.c
+++ b/drivers/clk/mediatek/clk-mt7629-eth.c
@@ -92,7 +92,8 @@ static int clk_mt7629_ethsys_init(struct platform_device *pdev)
 
 	clk_data = mtk_alloc_clk_data(CLK_ETH_NR_CLK);
 
-	mtk_clk_register_gates(node, eth_clks, CLK_ETH_NR_CLK, clk_data);
+	mtk_clk_register_gates(node, eth_clks, CLK_ETH_NR_CLK,
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -115,7 +116,7 @@ static int clk_mt7629_sgmiisys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_SGMII_NR_CLK);
 
 	mtk_clk_register_gates(node, sgmii_clks[id++], CLK_SGMII_NR_CLK,
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt7629-hif.c b/drivers/clk/mediatek/clk-mt7629-hif.c
index 0c8b9e139789..44fbd88b4647 100644
--- a/drivers/clk/mediatek/clk-mt7629-hif.c
+++ b/drivers/clk/mediatek/clk-mt7629-hif.c
@@ -88,7 +88,7 @@ static int clk_mt7629_ssusbsys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_SSUSB_NR_CLK);
 
 	mtk_clk_register_gates(node, ssusb_clks, ARRAY_SIZE(ssusb_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -110,7 +110,7 @@ static int clk_mt7629_pciesys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PCIE_NR_CLK);
 
 	mtk_clk_register_gates(node, pcie_clks, ARRAY_SIZE(pcie_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt7629.c b/drivers/clk/mediatek/clk-mt7629.c
index e4a08c811adc..2daceeab7fc4 100644
--- a/drivers/clk/mediatek/clk-mt7629.c
+++ b/drivers/clk/mediatek/clk-mt7629.c
@@ -606,7 +606,7 @@ static int mtk_infrasys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	mtk_clk_register_cpumuxes(node, infra_muxes, ARRAY_SIZE(infra_muxes),
 				  clk_data);
@@ -629,7 +629,7 @@ static int mtk_pericfg_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
 
 	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(peri_muxes, ARRAY_SIZE(peri_muxes), base,
 				    &mt7629_clk_lock, clk_data);
@@ -656,7 +656,7 @@ static int mtk_apmixedsys_init(struct platform_device *pdev)
 			      clk_data);
 
 	mtk_clk_register_gates(node, apmixed_clks,
-			       ARRAY_SIZE(apmixed_clks), clk_data);
+			       ARRAY_SIZE(apmixed_clks), clk_data, &pdev->dev);
 
 	clk_prepare_enable(clk_data->hws[CLK_APMIXED_ARMPLL]->clk);
 	clk_prepare_enable(clk_data->hws[CLK_APMIXED_MAIN_CORE_EN]->clk);
diff --git a/drivers/clk/mediatek/clk-mt7986-eth.c b/drivers/clk/mediatek/clk-mt7986-eth.c
index 7868c0728e96..765df117afa6 100644
--- a/drivers/clk/mediatek/clk-mt7986-eth.c
+++ b/drivers/clk/mediatek/clk-mt7986-eth.c
@@ -85,7 +85,7 @@ static void __init mtk_sgmiisys_0_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(ARRAY_SIZE(sgmii0_clks));
 
 	mtk_clk_register_gates(node, sgmii0_clks, ARRAY_SIZE(sgmii0_clks),
-			       clk_data);
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -103,7 +103,7 @@ static void __init mtk_sgmiisys_1_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(ARRAY_SIZE(sgmii1_clks));
 
 	mtk_clk_register_gates(node, sgmii1_clks, ARRAY_SIZE(sgmii1_clks),
-			       clk_data);
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
@@ -121,7 +121,7 @@ static void __init mtk_ethsys_init(struct device_node *node)
 
 	clk_data = mtk_alloc_clk_data(ARRAY_SIZE(eth_clks));
 
-	mtk_clk_register_gates(node, eth_clks, ARRAY_SIZE(eth_clks), clk_data);
+	mtk_clk_register_gates(node, eth_clks, ARRAY_SIZE(eth_clks), clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt7986-infracfg.c b/drivers/clk/mediatek/clk-mt7986-infracfg.c
index 49666047bf0e..24947ccdb70a 100644
--- a/drivers/clk/mediatek/clk-mt7986-infracfg.c
+++ b/drivers/clk/mediatek/clk-mt7986-infracfg.c
@@ -193,7 +193,7 @@ static int clk_mt7986_infracfg_probe(struct platform_device *pdev)
 	mtk_clk_register_muxes(infra_muxes, ARRAY_SIZE(infra_muxes), node,
 			       &mt7986_clk_lock, clk_data);
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r) {
diff --git a/drivers/clk/mediatek/clk-mt8135.c b/drivers/clk/mediatek/clk-mt8135.c
index b68888a034c4..7193ab38090d 100644
--- a/drivers/clk/mediatek/clk-mt8135.c
+++ b/drivers/clk/mediatek/clk-mt8135.c
@@ -568,7 +568,7 @@ static void __init mtk_infrasys_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-						clk_data);
+						clk_data, NULL);
 
 	clk_prepare_enable(clk_data->hws[CLK_INFRA_M4U]->clk);
 
@@ -596,7 +596,7 @@ static void __init mtk_pericfg_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
 
 	mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
-						clk_data);
+						clk_data, NULL);
 	mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
 			&mt8135_clk_lock, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt8167-aud.c b/drivers/clk/mediatek/clk-mt8167-aud.c
index ce1ae8d243c3..aa229aaf467f 100644
--- a/drivers/clk/mediatek/clk-mt8167-aud.c
+++ b/drivers/clk/mediatek/clk-mt8167-aud.c
@@ -55,7 +55,7 @@ static void __init mtk_audsys_init(struct device_node *node)
 
 	clk_data = mtk_alloc_clk_data(CLK_AUD_NR_CLK);
 
-	mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks), clk_data);
+	mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks), clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8167-img.c b/drivers/clk/mediatek/clk-mt8167-img.c
index e359e563d2b7..1e592fa46c96 100644
--- a/drivers/clk/mediatek/clk-mt8167-img.c
+++ b/drivers/clk/mediatek/clk-mt8167-img.c
@@ -48,7 +48,7 @@ static void __init mtk_imgsys_init(struct device_node *node)
 
 	clk_data = mtk_alloc_clk_data(CLK_IMG_NR_CLK);
 
-	mtk_clk_register_gates(node, img_clks, ARRAY_SIZE(img_clks), clk_data);
+	mtk_clk_register_gates(node, img_clks, ARRAY_SIZE(img_clks), clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt8167-mfgcfg.c b/drivers/clk/mediatek/clk-mt8167-mfgcfg.c
index 4fd82fe87d6e..b494d04bc851 100644
--- a/drivers/clk/mediatek/clk-mt8167-mfgcfg.c
+++ b/drivers/clk/mediatek/clk-mt8167-mfgcfg.c
@@ -46,7 +46,7 @@ static void __init mtk_mfgcfg_init(struct device_node *node)
 
 	clk_data = mtk_alloc_clk_data(CLK_MFG_NR_CLK);
 
-	mtk_clk_register_gates(node, mfg_clks, ARRAY_SIZE(mfg_clks), clk_data);
+	mtk_clk_register_gates(node, mfg_clks, ARRAY_SIZE(mfg_clks), clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt8167-mm.c b/drivers/clk/mediatek/clk-mt8167-mm.c
index 73910060577f..5669b5eecca9 100644
--- a/drivers/clk/mediatek/clk-mt8167-mm.c
+++ b/drivers/clk/mediatek/clk-mt8167-mm.c
@@ -111,7 +111,7 @@ static int clk_mt8167_mm_probe(struct platform_device *pdev)
 	data = &mt8167_mmsys_driver_data;
 
 	ret = mtk_clk_register_gates(node, data->gates_clk, data->gates_num,
-				     clk_data);
+				     clk_data, &pdev->dev);
 	if (ret)
 		return ret;
 
diff --git a/drivers/clk/mediatek/clk-mt8167-vdec.c b/drivers/clk/mediatek/clk-mt8167-vdec.c
index ee4fffb6859d..fcd6fdcd2536 100644
--- a/drivers/clk/mediatek/clk-mt8167-vdec.c
+++ b/drivers/clk/mediatek/clk-mt8167-vdec.c
@@ -61,7 +61,8 @@ static void __init mtk_vdecsys_init(struct device_node *node)
 
 	clk_data = mtk_alloc_clk_data(CLK_VDEC_NR_CLK);
 
-	mtk_clk_register_gates(node, vdec_clks, ARRAY_SIZE(vdec_clks), clk_data);
+	mtk_clk_register_gates(node, vdec_clks, ARRAY_SIZE(vdec_clks),
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt8167.c b/drivers/clk/mediatek/clk-mt8167.c
index f900ac4bf7b8..b150f893a4b8 100644
--- a/drivers/clk/mediatek/clk-mt8167.c
+++ b/drivers/clk/mediatek/clk-mt8167.c
@@ -937,7 +937,7 @@ static void __init mtk_topckgen_init(struct device_node *node)
 
 	mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks),
 				    clk_data);
-	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), clk_data);
+	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), clk_data, NULL);
 
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
diff --git a/drivers/clk/mediatek/clk-mt8173-mm.c b/drivers/clk/mediatek/clk-mt8173-mm.c
index 8abf42c2030c..a99583c62c3b 100644
--- a/drivers/clk/mediatek/clk-mt8173-mm.c
+++ b/drivers/clk/mediatek/clk-mt8173-mm.c
@@ -125,7 +125,7 @@ static int clk_mt8173_mm_probe(struct platform_device *pdev)
 	data = &mt8173_mmsys_driver_data;
 
 	ret = mtk_clk_register_gates(node, data->gates_clk, data->gates_num,
-				     clk_data);
+				     clk_data, &pdev->dev);
 	if (ret)
 		return ret;
 
diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173.c
index b57e33cda7a5..dfb819dd1b1b 100644
--- a/drivers/clk/mediatek/clk-mt8173.c
+++ b/drivers/clk/mediatek/clk-mt8173.c
@@ -889,7 +889,7 @@ static void __init mtk_infrasys_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-						clk_data);
+			       clk_data, NULL);
 	mtk_clk_register_factors(infra_divs, ARRAY_SIZE(infra_divs), clk_data);
 
 	mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
@@ -919,7 +919,7 @@ static void __init mtk_pericfg_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
 
 	mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
-						clk_data);
+			       clk_data, NULL);
 	mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
 			&mt8173_clk_lock, clk_data);
 
@@ -1063,7 +1063,7 @@ static void __init mtk_imgsys_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_IMG_NR_CLK);
 
 	mtk_clk_register_gates(node, img_clks, ARRAY_SIZE(img_clks),
-						clk_data);
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
@@ -1081,7 +1081,7 @@ static void __init mtk_vdecsys_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_VDEC_NR_CLK);
 
 	mtk_clk_register_gates(node, vdec_clks, ARRAY_SIZE(vdec_clks),
-						clk_data);
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -1098,7 +1098,7 @@ static void __init mtk_vencsys_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_VENC_NR_CLK);
 
 	mtk_clk_register_gates(node, venc_clks, ARRAY_SIZE(venc_clks),
-						clk_data);
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -1115,7 +1115,7 @@ static void __init mtk_vencltsys_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_VENCLT_NR_CLK);
 
 	mtk_clk_register_gates(node, venclt_clks, ARRAY_SIZE(venclt_clks),
-						clk_data);
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8183-audio.c b/drivers/clk/mediatek/clk-mt8183-audio.c
index b2d7746eddbe..f4c6448b6f74 100644
--- a/drivers/clk/mediatek/clk-mt8183-audio.c
+++ b/drivers/clk/mediatek/clk-mt8183-audio.c
@@ -76,7 +76,7 @@ static int clk_mt8183_audio_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_AUDIO_NR_CLK);
 
 	mtk_clk_register_gates(node, audio_clks, ARRAY_SIZE(audio_clks),
-			clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8183-mm.c b/drivers/clk/mediatek/clk-mt8183-mm.c
index 11ecc6fb0065..f93043da26c0 100644
--- a/drivers/clk/mediatek/clk-mt8183-mm.c
+++ b/drivers/clk/mediatek/clk-mt8183-mm.c
@@ -91,7 +91,7 @@ static int clk_mt8183_mm_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MM_NR_CLK);
 
 	mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
-			clk_data);
+			clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt8183.c b/drivers/clk/mediatek/clk-mt8183.c
index 23afc9584638..f99c092476c2 100644
--- a/drivers/clk/mediatek/clk-mt8183.c
+++ b/drivers/clk/mediatek/clk-mt8183.c
@@ -1101,7 +1101,7 @@ static int clk_mt8183_apmixed_probe(struct platform_device *pdev)
 	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
 
 	mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks),
-		clk_data);
+		clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
@@ -1176,7 +1176,7 @@ static int clk_mt8183_top_probe(struct platform_device *pdev)
 		base, &mt8183_clk_lock, top_clk_data);
 
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-		top_clk_data);
+		top_clk_data, &pdev->dev);
 
 	ret = clk_mt8183_reg_mfg_mux_notifier(&pdev->dev,
 					      top_clk_data->hws[CLK_TOP_MUX_MFG]->clk);
@@ -1196,7 +1196,7 @@ static int clk_mt8183_infra_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-		clk_data);
+		clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r) {
@@ -1219,7 +1219,7 @@ static int clk_mt8183_peri_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
 
 	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt8186-mm.c b/drivers/clk/mediatek/clk-mt8186-mm.c
index 1d33be407947..35038928eacf 100644
--- a/drivers/clk/mediatek/clk-mt8186-mm.c
+++ b/drivers/clk/mediatek/clk-mt8186-mm.c
@@ -69,7 +69,8 @@ static int clk_mt8186_mm_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks), clk_data);
+	r = mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
+				   clk_data, &pdev->dev);
 	if (r)
 		goto free_mm_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8192-aud.c b/drivers/clk/mediatek/clk-mt8192-aud.c
index 8c989bffd8c7..3acadca2452a 100644
--- a/drivers/clk/mediatek/clk-mt8192-aud.c
+++ b/drivers/clk/mediatek/clk-mt8192-aud.c
@@ -87,7 +87,8 @@ static int clk_mt8192_aud_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks), clk_data);
+	r = mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks),
+				   clk_data, &pdev->dev);
 	if (r)
 		return r;
 
diff --git a/drivers/clk/mediatek/clk-mt8192-mm.c b/drivers/clk/mediatek/clk-mt8192-mm.c
index 1be3ff4d407d..226f6976c277 100644
--- a/drivers/clk/mediatek/clk-mt8192-mm.c
+++ b/drivers/clk/mediatek/clk-mt8192-mm.c
@@ -91,7 +91,8 @@ static int clk_mt8192_mm_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks), clk_data);
+	r = mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
+				   clk_data, &pdev->dev);
 	if (r)
 		return r;
 
diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index 991d78a71644..e1b625b86911 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1127,7 +1127,7 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_top_composites;
 
-	r = mtk_clk_register_gates_with_dev(node, top_clks, ARRAY_SIZE(top_clks),
+	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
 					    top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_adj_divs_composites;
@@ -1168,7 +1168,7 @@ static int clk_mt8192_infra_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates_with_dev(node, infra_clks, ARRAY_SIZE(infra_clks),
+	r = mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
 					    clk_data, &pdev->dev);
 	if (r)
 		goto free_clk_data;
@@ -1200,7 +1200,7 @@ static int clk_mt8192_peri_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates_with_dev(node, peri_clks, ARRAY_SIZE(peri_clks),
+	r = mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
 					    clk_data, &pdev->dev);
 	if (r)
 		goto free_clk_data;
@@ -1229,9 +1229,9 @@ static int clk_mt8192_apmixed_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
-	r = mtk_clk_register_gates_with_dev(node, apmixed_clks,
-					    ARRAY_SIZE(apmixed_clks), clk_data,
-					    &pdev->dev);
+	r = mtk_clk_register_gates(node, apmixed_clks,
+				   ARRAY_SIZE(apmixed_clks), clk_data,
+				   &pdev->dev);
 	if (r)
 		goto free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8195-apmixedsys.c b/drivers/clk/mediatek/clk-mt8195-apmixedsys.c
index 0dfed6ec4d15..f967e2592dea 100644
--- a/drivers/clk/mediatek/clk-mt8195-apmixedsys.c
+++ b/drivers/clk/mediatek/clk-mt8195-apmixedsys.c
@@ -124,7 +124,8 @@ static int clk_mt8195_apmixed_probe(struct platform_device *pdev)
 	if (r)
 		goto free_apmixed_data;
 
-	r = mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data);
+	r = mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks),
+				   clk_data, &pdev->dev);
 	if (r)
 		goto unregister_plls;
 
diff --git a/drivers/clk/mediatek/clk-mt8195-topckgen.c b/drivers/clk/mediatek/clk-mt8195-topckgen.c
index 93e96419da66..ed604d39f9d5 100644
--- a/drivers/clk/mediatek/clk-mt8195-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8195-topckgen.c
@@ -1286,7 +1286,8 @@ static int clk_mt8195_topck_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_muxes;
 
-	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), top_clk_data);
+	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
+				   top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_composite_divs;
 
diff --git a/drivers/clk/mediatek/clk-mt8195-vdo0.c b/drivers/clk/mediatek/clk-mt8195-vdo0.c
index 07b46bfd5040..9ebad476e943 100644
--- a/drivers/clk/mediatek/clk-mt8195-vdo0.c
+++ b/drivers/clk/mediatek/clk-mt8195-vdo0.c
@@ -104,7 +104,8 @@ static int clk_mt8195_vdo0_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, vdo0_clks, ARRAY_SIZE(vdo0_clks), clk_data);
+	r = mtk_clk_register_gates(node, vdo0_clks, ARRAY_SIZE(vdo0_clks),
+				   clk_data, &pdev->dev);
 	if (r)
 		goto free_vdo0_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8195-vdo1.c b/drivers/clk/mediatek/clk-mt8195-vdo1.c
index 835335b9d87b..a7a588f086c5 100644
--- a/drivers/clk/mediatek/clk-mt8195-vdo1.c
+++ b/drivers/clk/mediatek/clk-mt8195-vdo1.c
@@ -131,7 +131,8 @@ static int clk_mt8195_vdo1_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, vdo1_clks, ARRAY_SIZE(vdo1_clks), clk_data);
+	r = mtk_clk_register_gates(node, vdo1_clks, ARRAY_SIZE(vdo1_clks),
+				   clk_data, &pdev->dev);
 	if (r)
 		goto free_vdo1_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8365-mm.c b/drivers/clk/mediatek/clk-mt8365-mm.c
index 5c8bf18ab1f1..bc6bf0913452 100644
--- a/drivers/clk/mediatek/clk-mt8365-mm.c
+++ b/drivers/clk/mediatek/clk-mt8365-mm.c
@@ -81,9 +81,8 @@ static int clk_mt8365_mm_probe(struct platform_device *pdev)
 
 	clk_data = mtk_alloc_clk_data(CLK_MM_NR_CLK);
 
-	ret = mtk_clk_register_gates_with_dev(node, mm_clks,
-					      ARRAY_SIZE(mm_clks), clk_data,
-					      dev);
+	ret = mtk_clk_register_gates(node, mm_clks,
+				     ARRAY_SIZE(mm_clks), clk_data, dev);
 	if (ret)
 		goto err_free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8365.c b/drivers/clk/mediatek/clk-mt8365.c
index adfecb618f10..5a43e5aad16e 100644
--- a/drivers/clk/mediatek/clk-mt8365.c
+++ b/drivers/clk/mediatek/clk-mt8365.c
@@ -1020,7 +1020,7 @@ static int clk_mt8365_infra_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	ret = mtk_clk_register_gates(node, ifr_clks, ARRAY_SIZE(ifr_clks),
-				     clk_data);
+				     clk_data, &pdev->dev);
 	if (ret)
 		goto free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8516-aud.c b/drivers/clk/mediatek/clk-mt8516-aud.c
index 90f48068a8de..e3a7b3c939f3 100644
--- a/drivers/clk/mediatek/clk-mt8516-aud.c
+++ b/drivers/clk/mediatek/clk-mt8516-aud.c
@@ -54,7 +54,7 @@ static void __init mtk_audsys_init(struct device_node *node)
 
 	clk_data = mtk_alloc_clk_data(CLK_AUD_NR_CLK);
 
-	mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks), clk_data);
+	mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks), clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8516.c b/drivers/clk/mediatek/clk-mt8516.c
index b96db88893e2..a648ee463697 100644
--- a/drivers/clk/mediatek/clk-mt8516.c
+++ b/drivers/clk/mediatek/clk-mt8516.c
@@ -691,7 +691,7 @@ static void __init mtk_topckgen_init(struct device_node *node)
 
 	mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks),
 				    clk_data);
-	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), clk_data);
+	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), clk_data, NULL);
 
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index 3c1ac8d3010f..e04eef7e2b6f 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -459,8 +459,8 @@ int mtk_clk_simple_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates_with_dev(node, mcd->clks, mcd->num_clks,
-					    clk_data, &pdev->dev);
+	r = mtk_clk_register_gates(node, mcd->clks, mcd->num_clks,
+				   clk_data, &pdev->dev);
 	if (r)
 		goto free_data;
 
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:37 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:37 +0100
Subject: [PATCH v1 05/25] clk: mediatek: clk-mtk: Propagate struct device for composites
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-6-angelogioacchino.delregno@collabora.com>

Like done for cpumux clocks, propagate struct device for composite
clocks registered through clk-mtk helpers to be able to get runtime
pm support for MTK clocks.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt2701.c          | 4 ++--
 drivers/clk/mediatek/clk-mt2712.c          | 4 ++--
 drivers/clk/mediatek/clk-mt6779.c          | 4 ++--
 drivers/clk/mediatek/clk-mt6795-pericfg.c  | 2 +-
 drivers/clk/mediatek/clk-mt6795-topckgen.c | 2 +-
 drivers/clk/mediatek/clk-mt6797.c          | 2 +-
 drivers/clk/mediatek/clk-mt7622.c          | 5 +++--
 drivers/clk/mediatek/clk-mt7629.c          | 4 ++--
 drivers/clk/mediatek/clk-mt8135.c          | 4 ++--
 drivers/clk/mediatek/clk-mt8167.c          | 4 ++--
 drivers/clk/mediatek/clk-mt8173.c          | 4 ++--
 drivers/clk/mediatek/clk-mt8183.c          | 6 +++---
 drivers/clk/mediatek/clk-mt8186-mcu.c      | 2 +-
 drivers/clk/mediatek/clk-mt8186-topckgen.c | 4 ++--
 drivers/clk/mediatek/clk-mt8192.c          | 4 ++--
 drivers/clk/mediatek/clk-mt8195-topckgen.c | 2 +-
 drivers/clk/mediatek/clk-mt8365.c          | 5 +++--
 drivers/clk/mediatek/clk-mt8516.c          | 4 ++--
 drivers/clk/mediatek/clk-mtk.c             | 9 +++++----
 drivers/clk/mediatek/clk-mtk.h             | 3 ++-
 20 files changed, 41 insertions(+), 37 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt2701.c b/drivers/clk/mediatek/clk-mt2701.c
index dcae25778817..bd62acb5d697 100644
--- a/drivers/clk/mediatek/clk-mt2701.c
+++ b/drivers/clk/mediatek/clk-mt2701.c
@@ -684,7 +684,7 @@ static int mtk_topckgen_init(struct platform_device *pdev)
 								clk_data);
 
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes),
-				base, &mt2701_clk_lock, clk_data);
+				base, &mt2701_clk_lock, clk_data, &pdev->dev);
 
 	mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs),
 				base, &mt2701_clk_lock, clk_data);
@@ -922,7 +922,7 @@ static int mtk_pericfg_init(struct platform_device *pdev)
 			       clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(peri_muxs, ARRAY_SIZE(peri_muxs), base,
-			&mt2701_clk_lock, clk_data);
+			&mt2701_clk_lock, clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt2712.c b/drivers/clk/mediatek/clk-mt2712.c
index 24ec3384c429..5cadcf6ca9b7 100644
--- a/drivers/clk/mediatek/clk-mt2712.c
+++ b/drivers/clk/mediatek/clk-mt2712.c
@@ -1347,7 +1347,7 @@ static int clk_mt2712_top_probe(struct platform_device *pdev)
 			top_clk_data);
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-			&mt2712_clk_lock, top_clk_data);
+			&mt2712_clk_lock, top_clk_data, &pdev->dev);
 	mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
 			&mt2712_clk_lock, top_clk_data);
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
@@ -1422,7 +1422,7 @@ static int clk_mt2712_mcu_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MCU_NR_CLK);
 
 	mtk_clk_register_composites(mcu_muxes, ARRAY_SIZE(mcu_muxes), base,
-			&mt2712_clk_lock, clk_data);
+			&mt2712_clk_lock, clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt6779.c b/drivers/clk/mediatek/clk-mt6779.c
index 622a2fc6c167..825f2f57e868 100644
--- a/drivers/clk/mediatek/clk-mt6779.c
+++ b/drivers/clk/mediatek/clk-mt6779.c
@@ -1248,10 +1248,10 @@ static int clk_mt6779_top_probe(struct platform_device *pdev)
 			       node, &mt6779_clk_lock, clk_data);
 
 	mtk_clk_register_composites(top_aud_muxes, ARRAY_SIZE(top_aud_muxes),
-				    base, &mt6779_clk_lock, clk_data);
+				    base, &mt6779_clk_lock, clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs),
-				    base, &mt6779_clk_lock, clk_data);
+				    base, &mt6779_clk_lock, clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt6795-pericfg.c b/drivers/clk/mediatek/clk-mt6795-pericfg.c
index 479a8abcb80b..1fc80bc1592b 100644
--- a/drivers/clk/mediatek/clk-mt6795-pericfg.c
+++ b/drivers/clk/mediatek/clk-mt6795-pericfg.c
@@ -115,7 +115,7 @@ static int clk_mt6795_pericfg_probe(struct platform_device *pdev)
 		goto free_clk_data;
 
 	ret = mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
-					  &mt6795_peri_clk_lock, clk_data);
+					  &mt6795_peri_clk_lock, clk_data, &pdev->dev);
 	if (ret)
 		goto unregister_gates;
 
diff --git a/drivers/clk/mediatek/clk-mt6795-topckgen.c b/drivers/clk/mediatek/clk-mt6795-topckgen.c
index 8b8307635a35..bb232e1726f1 100644
--- a/drivers/clk/mediatek/clk-mt6795-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt6795-topckgen.c
@@ -558,7 +558,7 @@ static int clk_mt6795_topckgen_probe(struct platform_device *pdev)
 		goto unregister_factors;
 
 	ret = mtk_clk_register_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs), base,
-					  &mt6795_top_clk_lock, clk_data);
+					  &mt6795_top_clk_lock, clk_data, &pdev->dev);
 	if (ret)
 		goto unregister_muxes;
 
diff --git a/drivers/clk/mediatek/clk-mt6797.c b/drivers/clk/mediatek/clk-mt6797.c
index 250ac8bd6a3c..581bc7d9f66d 100644
--- a/drivers/clk/mediatek/clk-mt6797.c
+++ b/drivers/clk/mediatek/clk-mt6797.c
@@ -397,7 +397,7 @@ static int mtk_topckgen_init(struct platform_device *pdev)
 				 clk_data);
 
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-				    &mt6797_clk_lock, clk_data);
+				    &mt6797_clk_lock, clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt7622.c b/drivers/clk/mediatek/clk-mt7622.c
index adf3b4535170..fb4e2552ba76 100644
--- a/drivers/clk/mediatek/clk-mt7622.c
+++ b/drivers/clk/mediatek/clk-mt7622.c
@@ -647,7 +647,8 @@ static int mtk_topckgen_init(struct platform_device *pdev)
 				 clk_data);
 
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes),
-				    base, &mt7622_clk_lock, clk_data);
+				    base, &mt7622_clk_lock, clk_data,
+				    &pdev->dev);
 
 	mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs),
 				  base, &mt7622_clk_lock, clk_data);
@@ -725,7 +726,7 @@ static int mtk_pericfg_init(struct platform_device *pdev)
 			       clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(peri_muxes, ARRAY_SIZE(peri_muxes), base,
-				    &mt7622_clk_lock, clk_data);
+				    &mt7622_clk_lock, clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt7629.c b/drivers/clk/mediatek/clk-mt7629.c
index 48bc4a6705fb..890f1944565e 100644
--- a/drivers/clk/mediatek/clk-mt7629.c
+++ b/drivers/clk/mediatek/clk-mt7629.c
@@ -589,7 +589,7 @@ static int mtk_topckgen_init(struct platform_device *pdev)
 				 clk_data);
 
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes),
-				    base, &mt7629_clk_lock, clk_data);
+				    base, &mt7629_clk_lock, clk_data, &pdev->dev);
 
 	clk_prepare_enable(clk_data->hws[CLK_TOP_AXI_SEL]->clk);
 	clk_prepare_enable(clk_data->hws[CLK_TOP_MEM_SEL]->clk);
@@ -632,7 +632,7 @@ static int mtk_pericfg_init(struct platform_device *pdev)
 			       clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(peri_muxes, ARRAY_SIZE(peri_muxes), base,
-				    &mt7629_clk_lock, clk_data);
+				    &mt7629_clk_lock, clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8135.c b/drivers/clk/mediatek/clk-mt8135.c
index 7193ab38090d..253fe271ee97 100644
--- a/drivers/clk/mediatek/clk-mt8135.c
+++ b/drivers/clk/mediatek/clk-mt8135.c
@@ -549,7 +549,7 @@ static void __init mtk_topckgen_init(struct device_node *node)
 	mtk_clk_register_factors(root_clk_alias, ARRAY_SIZE(root_clk_alias), clk_data);
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-			&mt8135_clk_lock, clk_data);
+			&mt8135_clk_lock, clk_data, NULL);
 
 	clk_prepare_enable(clk_data->hws[CLK_TOP_CCI_SEL]->clk);
 
@@ -598,7 +598,7 @@ static void __init mtk_pericfg_init(struct device_node *node)
 	mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
 						clk_data, NULL);
 	mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
-			&mt8135_clk_lock, clk_data);
+			&mt8135_clk_lock, clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8167.c b/drivers/clk/mediatek/clk-mt8167.c
index b150f893a4b8..cc064e98643a 100644
--- a/drivers/clk/mediatek/clk-mt8167.c
+++ b/drivers/clk/mediatek/clk-mt8167.c
@@ -941,7 +941,7 @@ static void __init mtk_topckgen_init(struct device_node *node)
 
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-		&mt8167_clk_lock, clk_data);
+		&mt8167_clk_lock, clk_data, NULL);
 	mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs),
 				base, &mt8167_clk_lock, clk_data);
 
@@ -967,7 +967,7 @@ static void __init mtk_infracfg_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_IFR_NR_CLK);
 
 	mtk_clk_register_composites(ifr_muxes, ARRAY_SIZE(ifr_muxes), base,
-		&mt8167_clk_lock, clk_data);
+		&mt8167_clk_lock, clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173.c
index 125b01b9e2ab..617f68274004 100644
--- a/drivers/clk/mediatek/clk-mt8173.c
+++ b/drivers/clk/mediatek/clk-mt8173.c
@@ -870,7 +870,7 @@ static void __init mtk_topckgen_init(struct device_node *node)
 	mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-			&mt8173_clk_lock, clk_data);
+			&mt8173_clk_lock, clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -921,7 +921,7 @@ static void __init mtk_pericfg_init(struct device_node *node)
 	mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
 			       clk_data, NULL);
 	mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
-			&mt8173_clk_lock, clk_data);
+			&mt8173_clk_lock, clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8183.c b/drivers/clk/mediatek/clk-mt8183.c
index f99c092476c2..194906ca4b5b 100644
--- a/drivers/clk/mediatek/clk-mt8183.c
+++ b/drivers/clk/mediatek/clk-mt8183.c
@@ -1170,10 +1170,10 @@ static int clk_mt8183_top_probe(struct platform_device *pdev)
 		node, &mt8183_clk_lock, top_clk_data);
 
 	mtk_clk_register_composites(top_aud_muxes, ARRAY_SIZE(top_aud_muxes),
-		base, &mt8183_clk_lock, top_clk_data);
+		base, &mt8183_clk_lock, top_clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs),
-		base, &mt8183_clk_lock, top_clk_data);
+		base, &mt8183_clk_lock, top_clk_data, &pdev->dev);
 
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
 		top_clk_data, &pdev->dev);
@@ -1237,7 +1237,7 @@ static int clk_mt8183_mcu_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MCU_NR_CLK);
 
 	mtk_clk_register_composites(mcu_muxes, ARRAY_SIZE(mcu_muxes), base,
-			&mt8183_clk_lock, clk_data);
+			&mt8183_clk_lock, clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt8186-mcu.c b/drivers/clk/mediatek/clk-mt8186-mcu.c
index dfc305c1fc5d..c4a5557cb830 100644
--- a/drivers/clk/mediatek/clk-mt8186-mcu.c
+++ b/drivers/clk/mediatek/clk-mt8186-mcu.c
@@ -66,7 +66,7 @@ static int clk_mt8186_mcu_probe(struct platform_device *pdev)
 	}
 
 	r = mtk_clk_register_composites(mcu_muxes, ARRAY_SIZE(mcu_muxes), base,
-					NULL, clk_data);
+					NULL, clk_data, &pdev->dev);
 	if (r)
 		goto free_mcu_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8186-topckgen.c b/drivers/clk/mediatek/clk-mt8186-topckgen.c
index c2beda7ef976..b79954a42481 100644
--- a/drivers/clk/mediatek/clk-mt8186-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8186-topckgen.c
@@ -743,12 +743,12 @@ static int clk_mt8186_topck_probe(struct platform_device *pdev)
 		goto unregister_factors;
 
 	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-					&mt8186_clk_lock, clk_data);
+					&mt8186_clk_lock, clk_data, &pdev->dev);
 	if (r)
 		goto unregister_muxes;
 
 	r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
-					&mt8186_clk_lock, clk_data);
+					&mt8186_clk_lock, clk_data, &pdev->dev);
 	if (r)
 		goto unregister_composite_muxes;
 
diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index e1b625b86911..27ad629062c4 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1118,12 +1118,12 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 		goto unregister_factors;
 
 	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-					&mt8192_clk_lock, top_clk_data);
+					&mt8192_clk_lock, top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_muxes;
 
 	r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
-					&mt8192_clk_lock, top_clk_data);
+					&mt8192_clk_lock, top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_top_composites;
 
diff --git a/drivers/clk/mediatek/clk-mt8195-topckgen.c b/drivers/clk/mediatek/clk-mt8195-topckgen.c
index ed604d39f9d5..437c12d19b03 100644
--- a/drivers/clk/mediatek/clk-mt8195-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8195-topckgen.c
@@ -1282,7 +1282,7 @@ static int clk_mt8195_topck_probe(struct platform_device *pdev)
 		goto unregister_muxes;
 
 	r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
-					&mt8195_clk_lock, top_clk_data);
+					&mt8195_clk_lock, top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_muxes;
 
diff --git a/drivers/clk/mediatek/clk-mt8365.c b/drivers/clk/mediatek/clk-mt8365.c
index 5a43e5aad16e..00c15f89a5f6 100644
--- a/drivers/clk/mediatek/clk-mt8365.c
+++ b/drivers/clk/mediatek/clk-mt8365.c
@@ -954,7 +954,7 @@ static int clk_mt8365_top_probe(struct platform_device *pdev)
 
 	ret = mtk_clk_register_composites(top_misc_mux_gates,
 					  ARRAY_SIZE(top_misc_mux_gates), base,
-					  &mt8365_clk_lock, clk_data);
+					  &mt8365_clk_lock, clk_data, &pdev->dev);
 	if (ret)
 		goto unregister_muxes;
 
@@ -1081,7 +1081,8 @@ static int clk_mt8365_mcu_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	ret = mtk_clk_register_composites(mcu_muxes, ARRAY_SIZE(mcu_muxes),
-					  base, &mt8365_clk_lock, clk_data);
+					  base, &mt8365_clk_lock, clk_data,
+					  &pdev->dev);
 	if (ret)
 		goto free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8516.c b/drivers/clk/mediatek/clk-mt8516.c
index a648ee463697..b50b2d1387b6 100644
--- a/drivers/clk/mediatek/clk-mt8516.c
+++ b/drivers/clk/mediatek/clk-mt8516.c
@@ -695,7 +695,7 @@ static void __init mtk_topckgen_init(struct device_node *node)
 
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-		&mt8516_clk_lock, clk_data);
+		&mt8516_clk_lock, clk_data, NULL);
 	mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs),
 				base, &mt8516_clk_lock, clk_data);
 
@@ -721,7 +721,7 @@ static void __init mtk_infracfg_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_IFR_NR_CLK);
 
 	mtk_clk_register_composites(ifr_muxes, ARRAY_SIZE(ifr_muxes), base,
-		&mt8516_clk_lock, clk_data);
+		&mt8516_clk_lock, clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index e04eef7e2b6f..a1ab34305b95 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -198,7 +198,7 @@ void mtk_clk_unregister_factors(const struct mtk_fixed_factor *clks, int num,
 EXPORT_SYMBOL_GPL(mtk_clk_unregister_factors);
 
 static struct clk_hw *mtk_clk_register_composite(const struct mtk_composite *mc,
-		void __iomem *base, spinlock_t *lock)
+		void __iomem *base, spinlock_t *lock, struct device *dev)
 {
 	struct clk_hw *hw;
 	struct clk_mux *mux = NULL;
@@ -264,7 +264,7 @@ static struct clk_hw *mtk_clk_register_composite(const struct mtk_composite *mc,
 		div_ops = &clk_divider_ops;
 	}
 
-	hw = clk_hw_register_composite(NULL, mc->name, parent_names, num_parents,
+	hw = clk_hw_register_composite(dev, mc->name, parent_names, num_parents,
 		mux_hw, mux_ops,
 		div_hw, div_ops,
 		gate_hw, gate_ops,
@@ -310,7 +310,8 @@ static void mtk_clk_unregister_composite(struct clk_hw *hw)
 
 int mtk_clk_register_composites(const struct mtk_composite *mcs, int num,
 				void __iomem *base, spinlock_t *lock,
-				struct clk_hw_onecell_data *clk_data)
+				struct clk_hw_onecell_data *clk_data,
+				struct device *dev)
 {
 	struct clk_hw *hw;
 	int i;
@@ -327,7 +328,7 @@ int mtk_clk_register_composites(const struct mtk_composite *mcs, int num,
 			continue;
 		}
 
-		hw = mtk_clk_register_composite(mc, base, lock);
+		hw = mtk_clk_register_composite(mc, base, lock, dev);
 
 		if (IS_ERR(hw)) {
 			pr_err("Failed to register clk %s: %pe\n", mc->name,
diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
index f2db6b57d5b5..15122504c02d 100644
--- a/drivers/clk/mediatek/clk-mtk.h
+++ b/drivers/clk/mediatek/clk-mtk.h
@@ -156,7 +156,8 @@ struct mtk_composite {
 
 int mtk_clk_register_composites(const struct mtk_composite *mcs, int num,
 				void __iomem *base, spinlock_t *lock,
-				struct clk_hw_onecell_data *clk_data);
+				struct clk_hw_onecell_data *clk_data,
+				struct device *dev);
 void mtk_clk_unregister_composites(const struct mtk_composite *mcs, int num,
 				   struct clk_hw_onecell_data *clk_data);
 
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:52 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:52 +0100
Subject: [PATCH v1 20/25] clk: mediatek: clk-mtk: Register MFG notifier in mtk_clk_simple_probe()
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-21-angelogioacchino.delregno@collabora.com>

In preparation for commonizing topckgen probe on various MediaTek SoCs
clock drivers, add the ability to register the MFG MUX notifier in
mtk_clk_simple_probe() by passing a custom notifier register function
pointer, as this function will be slightly different across different
SoCs.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mtk.c | 8 ++++++++
 drivers/clk/mediatek/clk-mtk.h | 3 +++
 2 files changed, 11 insertions(+)

diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index b0a6225cd7b2..df6281492fb6 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -533,6 +533,14 @@ int mtk_clk_simple_probe(struct platform_device *pdev)
 			goto unregister_composites;
 	}
 
+	if (mcd->clk_notifier_func) {
+		struct clk *mfg_mux = clk_data->hws[mcd->mfg_clk_idx]->clk;
+
+		r = mcd->clk_notifier_func(&pdev->dev, mfg_mux);
+		if (r)
+			goto unregister_clks;
+	}
+
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
 		goto unregister_clks;
diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
index f49aea3fb4bd..aa4d469134d8 100644
--- a/drivers/clk/mediatek/clk-mtk.h
+++ b/drivers/clk/mediatek/clk-mtk.h
@@ -229,6 +229,9 @@ struct mtk_clk_desc {
 	const struct mtk_clk_rst_desc *rst_desc;
 	spinlock_t *clk_lock;
 	bool shared_io;
+
+	int (*clk_notifier_func)(struct device *dev, struct clk *clk);
+	unsigned int mfg_clk_idx;
 };
 
 int mtk_clk_simple_probe(struct platform_device *pdev);
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:50 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:50 +0100
Subject: [PATCH v1 18/25] clk: mediatek: mt8186: Join top_adj_div and top_muxes
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-19-angelogioacchino.delregno@collabora.com>

Like done for MT8192, join the two to register them in one shot, as
there's no point in doing that separately from one another.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8186-topckgen.c | 15 ++-------------
 1 file changed, 2 insertions(+), 13 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8186-topckgen.c b/drivers/clk/mediatek/clk-mt8186-topckgen.c
index d05143891b69..63befb1f492d 100644
--- a/drivers/clk/mediatek/clk-mt8186-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8186-topckgen.c
@@ -669,9 +669,6 @@ static struct mtk_composite top_muxes[] = {
 	MUX(CLK_TOP_APLL_I2S4_MCK_SEL, "apll_i2s4_mck_sel", apll_mck_parents, 0x0320, 19, 1),
 	MUX(CLK_TOP_APLL_TDMOUT_MCK_SEL, "apll_tdmout_mck_sel", apll_mck_parents,
 		0x0320, 20, 1),
-};
-
-static const struct mtk_composite top_adj_divs[] = {
 	DIV_GATE(CLK_TOP_APLL12_CK_DIV0, "apll12_div0", "apll_i2s0_mck_sel",
 			0x0320, 0, 0x0328, 8, 0),
 	DIV_GATE(CLK_TOP_APLL12_CK_DIV1, "apll12_div1", "apll_i2s1_mck_sel",
@@ -747,26 +744,19 @@ static int clk_mt8186_topck_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_muxes;
 
-	r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
-					&mt8186_clk_lock, clk_data, &pdev->dev);
-	if (r)
-		goto unregister_composite_muxes;
-
 	r = clk_mt8186_reg_mfg_mux_notifier(&pdev->dev,
 					    clk_data->hws[CLK_TOP_MFG]->clk);
 	if (r)
-		goto unregister_composite_divs;
+		goto unregister_composite_muxes;
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		goto unregister_composite_divs;
+		goto unregister_composite_muxes;
 
 	platform_set_drvdata(pdev, clk_data);
 
 	return r;
 
-unregister_composite_divs:
-	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), clk_data);
 unregister_composite_muxes:
 	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
 unregister_muxes:
@@ -787,7 +777,6 @@ static int clk_mt8186_topck_remove(struct platform_device *pdev)
 
 	of_clk_del_provider(node);
 	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), clk_data);
-	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
 	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), clk_data);
 	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), clk_data);
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:49 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:49 +0100
Subject: [PATCH v1 17/25] clk: mediatek: mt8192: Join top_adj_divs and top_muxes
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-18-angelogioacchino.delregno@collabora.com>

These two are both mtk_composite arrays, one dependent on another, but
that's something that the clock framework is supposed to sort out and
anyway registering them separately isn't going to ease the framework's
job in checking dependencies.

Put the contents of top_adj_divs in top_muxes to join them together
and register them in one shot.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8192.c | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index ec9dc7fe848e..702770326286 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -698,9 +698,7 @@ static struct mtk_composite top_muxes[] = {
 	MUX(CLK_TOP_APLL_I2S7_M_SEL, "apll_i2s7_m_sel", apll_i2s_m_parents, 0x320, 23, 1),
 	MUX(CLK_TOP_APLL_I2S8_M_SEL, "apll_i2s8_m_sel", apll_i2s_m_parents, 0x320, 24, 1),
 	MUX(CLK_TOP_APLL_I2S9_M_SEL, "apll_i2s9_m_sel", apll_i2s_m_parents, 0x320, 25, 1),
-};
-
-static const struct mtk_composite top_adj_divs[] = {
+	/* APLL_DIV */
 	DIV_GATE(CLK_TOP_APLL12_DIV0, "apll12_div0", "apll_i2s0_m_sel", 0x320, 0, 0x328, 8, 0),
 	DIV_GATE(CLK_TOP_APLL12_DIV1, "apll12_div1", "apll_i2s1_m_sel", 0x320, 1, 0x328, 8, 8),
 	DIV_GATE(CLK_TOP_APLL12_DIV2, "apll12_div2", "apll_i2s2_m_sel", 0x320, 2, 0x328, 8, 16),
@@ -1099,15 +1097,10 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_muxes;
 
-	r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
-					&mt8192_clk_lock, top_clk_data, &pdev->dev);
-	if (r)
-		goto unregister_top_composites;
-
 	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
 					    top_clk_data, &pdev->dev);
 	if (r)
-		goto unregister_adj_divs_composites;
+		goto unregister_top_composites;
 
 	r = clk_mt8192_reg_mfg_mux_notifier(&pdev->dev,
 					    top_clk_data->hws[CLK_TOP_MFG_PLL_SEL]->clk);
@@ -1119,8 +1112,6 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 
 unregister_gates:
 	mtk_clk_unregister_gates(top_clks, ARRAY_SIZE(top_clks), top_clk_data);
-unregister_adj_divs_composites:
-	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), top_clk_data);
 unregister_top_composites:
 	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), top_clk_data);
 unregister_muxes:
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:32 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:32 +0100
Subject: [PATCH v1 00/25] MediaTek clocks cleanups and improvements
Message-ID: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>

This series performs cleanups and improvements on MediaTek clock
drivers, greatly reducing code duplication (hence also reducing
kernel size).

There would be a lot to say about it, but summarizing:

* Propagates struct device where possible in order to introduce the
  possibility of using Runtime PM on clock drivers as needed,
  possibly enhancing reliability of some platforms (obviously, this
  will do nothing unless power-domains are added to devicetree);

* Cleans up some duplicated clock(s) registration attempt(s): on
  some platforms the 26M fixed factor clock is registered early,
  but then upon platform_driver probe, an attempt to re-register
  that clock was performed;

* Removes some early clock registration where possible, moving
  everything to platform_driver clock probe;

* Breaks down the big MT8173 clock driver in multiple ones, as it's
  already done with the others, cleans it up and adds possibility
  possibility to compile non-boot-critical clock drivers (for 8173)
  as modules;

* Extends the common mtk_clk_simple_probe() function to be able to
  register multiple MediaTek clock types;

* Removes duplicated [...]_probe functions from multiple MediaTek SoC
  clock drivers, migrating almost everything to the common functions
  mtk_clk_simple_probe();

* Adds a .remove() callback, pointing to the common mtk_clk_simple_remove()
  function to all clock drivers that were migrated to the common probe;

* Some more spare cleanups here and there.

All of this was manually tested on various Chromebooks (with different MTK
SoCs) and no regression was detected.

Cheers!

AngeloGioacchino Del Regno (25):
  clk: mediatek: mt8192: Correctly unregister and free clocks on failure
  clk: mediatek: mt8192: Propagate struct device for gate clocks
  clk: mediatek: clk-gate: Propagate struct device with
    mtk_clk_register_gates()
  clk: mediatek: cpumux: Propagate struct device where possible
  clk: mediatek: clk-mtk: Propagate struct device for composites
  clk: mediatek: clk-mux: Propagate struct device for mtk-mux
  clk: mediatek: clk-mtk: Add dummy clock ops
  dt-bindings: clock: mt8173: Add dummy clock ID
  clk: mediatek: mt8173: Migrate to platform driver and common probe
  clk: mediatek: mt8173: Remove mtk_clk_enable_critical()
  clk: mediatek: mt8173: Break down clock drivers and allow module build
  dt-bindings: clock: mt2701/mt6779: Add dummy clock with ID 0
  clk: mediatek: Switch to mtk_clk_simple_probe() where possible
  clk: mediatek: clk-mtk: Extend mtk_clk_simple_probe()
  clk: mediatek: mt8173: Migrate pericfg/topckgen to
    mtk_clk_simple_probe()
  clk: mediatek: clk-mt8192: Move CLK_TOP_CSW_F26M_D2 in top_divs
  clk: mediatek: mt8192: Join top_adj_divs and top_muxes
  clk: mediatek: mt8186: Join top_adj_div and top_muxes
  clk: mediatek: clk-mt8183: Join top_aud_muxes and top_aud_divs
  clk: mediatek: clk-mtk: Register MFG notifier in
    mtk_clk_simple_probe()
  clk: mediatek: clk-mt8192: Migrate topckgen to mtk_clk_simple_probe()
  clk: mediatek: clk-mt8186-topckgen: Migrate to mtk_clk_simple_probe()
  clk: mediatek: clk-mt6795-topckgen: Migrate to mtk_clk_simple_probe()
  clk: mediatek: clk-mt7986-topckgen: Properly keep some clocks enabled
  clk: mediatek: clk-mt7986-topckgen: Migrate to mtk_clk_simple_probe()

 drivers/clk/mediatek/Kconfig                 |   30 +-
 drivers/clk/mediatek/Makefile                |    6 +-
 drivers/clk/mediatek/clk-cpumux.c            |    9 +-
 drivers/clk/mediatek/clk-cpumux.h            |    3 +-
 drivers/clk/mediatek/clk-gate.c              |   16 +-
 drivers/clk/mediatek/clk-gate.h              |    8 +-
 drivers/clk/mediatek/clk-mt2701-aud.c        |   26 +-
 drivers/clk/mediatek/clk-mt2701-eth.c        |   34 +-
 drivers/clk/mediatek/clk-mt2701-g3d.c        |   56 +-
 drivers/clk/mediatek/clk-mt2701-hif.c        |   36 +-
 drivers/clk/mediatek/clk-mt2701-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt2701.c            |   12 +-
 drivers/clk/mediatek/clk-mt2712-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt2712.c            |   89 +-
 drivers/clk/mediatek/clk-mt6765.c            |    8 +-
 drivers/clk/mediatek/clk-mt6779-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt6779.c            |   50 +-
 drivers/clk/mediatek/clk-mt6795-infracfg.c   |    6 +-
 drivers/clk/mediatek/clk-mt6795-mm.c         |    3 +-
 drivers/clk/mediatek/clk-mt6795-pericfg.c    |    5 +-
 drivers/clk/mediatek/clk-mt6795-topckgen.c   |   84 +-
 drivers/clk/mediatek/clk-mt6797-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt6797.c            |    4 +-
 drivers/clk/mediatek/clk-mt7622-aud.c        |   49 +-
 drivers/clk/mediatek/clk-mt7622-eth.c        |   82 +-
 drivers/clk/mediatek/clk-mt7622-hif.c        |   85 +-
 drivers/clk/mediatek/clk-mt7622.c            |   16 +-
 drivers/clk/mediatek/clk-mt7629-eth.c        |    5 +-
 drivers/clk/mediatek/clk-mt7629-hif.c        |   85 +-
 drivers/clk/mediatek/clk-mt7629.c            |   12 +-
 drivers/clk/mediatek/clk-mt7986-eth.c        |    6 +-
 drivers/clk/mediatek/clk-mt7986-infracfg.c   |    4 +-
 drivers/clk/mediatek/clk-mt7986-topckgen.c   |   98 +-
 drivers/clk/mediatek/clk-mt8135.c            |    8 +-
 drivers/clk/mediatek/clk-mt8167-aud.c        |    2 +-
 drivers/clk/mediatek/clk-mt8167-img.c        |    2 +-
 drivers/clk/mediatek/clk-mt8167-mfgcfg.c     |    2 +-
 drivers/clk/mediatek/clk-mt8167-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt8167-vdec.c       |    3 +-
 drivers/clk/mediatek/clk-mt8167.c            |    6 +-
 drivers/clk/mediatek/clk-mt8173-apmixedsys.c |  157 +++
 drivers/clk/mediatek/clk-mt8173-img.c        |   55 +
 drivers/clk/mediatek/clk-mt8173-infracfg.c   |  154 +++
 drivers/clk/mediatek/clk-mt8173-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt8173-pericfg.c    |  122 ++
 drivers/clk/mediatek/clk-mt8173-topckgen.c   |  653 ++++++++++
 drivers/clk/mediatek/clk-mt8173-vdecsys.c    |   57 +
 drivers/clk/mediatek/clk-mt8173-vencsys.c    |   64 +
 drivers/clk/mediatek/clk-mt8173.c            | 1125 ------------------
 drivers/clk/mediatek/clk-mt8183-audio.c      |   19 +-
 drivers/clk/mediatek/clk-mt8183-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt8183.c            |  119 +-
 drivers/clk/mediatek/clk-mt8186-mcu.c        |    2 +-
 drivers/clk/mediatek/clk-mt8186-mm.c         |    3 +-
 drivers/clk/mediatek/clk-mt8186-topckgen.c   |  112 +-
 drivers/clk/mediatek/clk-mt8192-aud.c        |   24 +-
 drivers/clk/mediatek/clk-mt8192-mm.c         |    3 +-
 drivers/clk/mediatek/clk-mt8192.c            |  183 +--
 drivers/clk/mediatek/clk-mt8195-apmixedsys.c |    3 +-
 drivers/clk/mediatek/clk-mt8195-topckgen.c   |    7 +-
 drivers/clk/mediatek/clk-mt8195-vdo0.c       |    3 +-
 drivers/clk/mediatek/clk-mt8195-vdo1.c       |    3 +-
 drivers/clk/mediatek/clk-mt8365-mm.c         |    5 +-
 drivers/clk/mediatek/clk-mt8365.c            |    9 +-
 drivers/clk/mediatek/clk-mt8516-aud.c        |    2 +-
 drivers/clk/mediatek/clk-mt8516.c            |    6 +-
 drivers/clk/mediatek/clk-mtk.c               |  133 ++-
 drivers/clk/mediatek/clk-mtk.h               |   33 +-
 drivers/clk/mediatek/clk-mux.c               |    9 +-
 drivers/clk/mediatek/clk-mux.h               |    3 +-
 include/dt-bindings/clock/mt2701-clk.h       |    3 +
 include/dt-bindings/clock/mt6779-clk.h       |    3 +
 include/dt-bindings/clock/mt8173-clk.h       |    3 +
 73 files changed, 1920 insertions(+), 2121 deletions(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8173-apmixedsys.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-img.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-infracfg.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-pericfg.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-topckgen.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-vdecsys.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-vencsys.c
 delete mode 100644 drivers/clk/mediatek/clk-mt8173.c

-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:33 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:33 +0100
Subject: [PATCH v1 01/25] clk: mediatek: mt8192: Correctly unregister and free clocks on failure
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-2-angelogioacchino.delregno@collabora.com>

If anything fails during probe of the clock controller(s), unregister
(and kfree!) whatever we have previously registered to leave with a
clean state and prevent leaks.

Fixes: 710573dee31b ("clk: mediatek: Add MT8192 basic clocks support")
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8192.c | 72 ++++++++++++++++++++++++-------
 1 file changed, 56 insertions(+), 16 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index 0e88588b2c49..eff66ca6c6a7 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1100,27 +1100,61 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	if (IS_ERR(base))
 		return PTR_ERR(base);
 
-	mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data);
-	mtk_clk_register_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data);
-	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
-	mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node, &mt8192_clk_lock,
-			       top_clk_data);
-	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base, &mt8192_clk_lock,
-				    top_clk_data);
-	mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base, &mt8192_clk_lock,
-				    top_clk_data);
-	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), top_clk_data);
+	r = mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data);
 	if (r)
 		return r;
 
+	r = mtk_clk_register_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data);
+	if (r)
+		goto unregister_fixed_clks;
+
+	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
+	if (r)
+		goto unregister_early_factors;
+
+	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
+				   &mt8192_clk_lock, top_clk_data);
+	if (r)
+		goto unregister_factors;
+
+	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
+					&mt8192_clk_lock, top_clk_data);
+	if (r)
+		goto unregister_muxes;
+
+	r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
+					&mt8192_clk_lock, top_clk_data);
+	if (r)
+		goto unregister_top_composites;
+
+	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), top_clk_data);
+	if (r)
+		goto unregister_adj_divs_composites;
+
 	r = clk_mt8192_reg_mfg_mux_notifier(&pdev->dev,
 					    top_clk_data->hws[CLK_TOP_MFG_PLL_SEL]->clk);
 	if (r)
-		return r;
-
+		goto unregister_gates;
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
 				      top_clk_data);
+
+unregister_gates:
+	mtk_clk_unregister_gates(top_clks, ARRAY_SIZE(top_clks), top_clk_data);
+unregister_adj_divs_composites:
+	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), top_clk_data);
+unregister_top_composites:
+	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), top_clk_data);
+unregister_muxes:
+	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), top_clk_data);
+unregister_factors:
+	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
+unregister_early_factors:
+	mtk_clk_unregister_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data);
+unregister_fixed_clks:
+	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks),
+				      top_clk_data);
+	return r;
 }
 
 static int clk_mt8192_infra_probe(struct platform_device *pdev)
@@ -1139,14 +1173,16 @@ static int clk_mt8192_infra_probe(struct platform_device *pdev)
 
 	r = mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
 	if (r)
-		goto free_clk_data;
+		goto unregister_gates;
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		goto free_clk_data;
+		goto unregister_gates;
 
 	return r;
 
+unregister_gates:
+	mtk_clk_unregister_gates(infra_clks, ARRAY_SIZE(infra_clks), clk_data);
 free_clk_data:
 	mtk_free_clk_data(clk_data);
 	return r;
@@ -1168,10 +1204,12 @@ static int clk_mt8192_peri_probe(struct platform_device *pdev)
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		goto free_clk_data;
+		goto unregister_gates;
 
 	return r;
 
+unregister_gates:
+	mtk_clk_unregister_gates(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
 free_clk_data:
 	mtk_free_clk_data(clk_data);
 	return r;
@@ -1194,10 +1232,12 @@ static int clk_mt8192_apmixed_probe(struct platform_device *pdev)
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		goto free_clk_data;
+		goto unregister_gates;
 
 	return r;
 
+unregister_gates:
+	mtk_clk_unregister_gates(apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data);
 free_clk_data:
 	mtk_free_clk_data(clk_data);
 	return r;
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:42 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:42 +0100
Subject: [PATCH v1 10/25] clk: mediatek: mt8173: Remove mtk_clk_enable_critical()
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-11-angelogioacchino.delregno@collabora.com>

The entire point of mtk_clk_enable_critical() is to raise the refcount
of some clocks so that they won't be turned off during runtime, but
this is the same as what the CLK_IS_CRITICAL flag does.

Set CLK_IS_CRITICAL on all of the critical clocks and remove the
aforementioned function as a cleanup.

No functional changes.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8173.c | 41 ++++++++++++-------------------
 1 file changed, 16 insertions(+), 25 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173.c
index 70cdc0719658..02231f8ba6d9 100644
--- a/drivers/clk/mediatek/clk-mt8173.c
+++ b/drivers/clk/mediatek/clk-mt8173.c
@@ -546,8 +546,11 @@ static const struct mtk_composite cpu_muxes[] = {
 static const struct mtk_composite top_muxes[] = {
 	/* CLK_CFG_0 */
 	MUX(CLK_TOP_AXI_SEL, "axi_sel", axi_parents, 0x0040, 0, 3),
-	MUX(CLK_TOP_MEM_SEL, "mem_sel", mem_parents, 0x0040, 8, 1),
-	MUX_GATE(CLK_TOP_DDRPHYCFG_SEL, "ddrphycfg_sel", ddrphycfg_parents, 0x0040, 16, 1, 23),
+	MUX_FLAGS(CLK_TOP_MEM_SEL, "mem_sel", mem_parents, 0x0040, 8, 1,
+		  CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
+	MUX_GATE_FLAGS(CLK_TOP_DDRPHYCFG_SEL, "ddrphycfg_sel",
+		       ddrphycfg_parents, 0x0040, 16, 1, 23,
+		       CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 	MUX_GATE(CLK_TOP_MM_SEL, "mm_sel", mm_parents, 0x0040, 24, 4, 31),
 	/* CLK_CFG_1 */
 	MUX_GATE(CLK_TOP_PWM_SEL, "pwm_sel", pwm_parents, 0x0050, 0, 2, 7),
@@ -581,7 +584,9 @@ static const struct mtk_composite top_muxes[] = {
 	 */
 	MUX_GATE_FLAGS(CLK_TOP_DPI0_SEL, "dpi0_sel", dpi0_parents, 0x00a0, 0, 3, 7, 0),
 	MUX_GATE(CLK_TOP_IRDA_SEL, "irda_sel", irda_parents, 0x00a0, 8, 2, 15),
-	MUX_GATE(CLK_TOP_CCI400_SEL, "cci400_sel", cci400_parents, 0x00a0, 16, 3, 23),
+	MUX_GATE_FLAGS(CLK_TOP_CCI400_SEL, "cci400_sel",
+		       cci400_parents, 0x00a0, 16, 3, 23,
+		       CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 	MUX_GATE(CLK_TOP_AUD_1_SEL, "aud_1_sel", aud_1_parents, 0x00a0, 24, 2, 31),
 	/* CLK_CFG_7 */
 	MUX_GATE(CLK_TOP_AUD_2_SEL, "aud_2_sel", aud_2_parents, 0x00b0, 0, 2, 7),
@@ -596,7 +601,8 @@ static const struct mtk_composite top_muxes[] = {
 	MUX_GATE(CLK_TOP_MSDC50_2_H_SEL, "msdc50_2_h_sel", msdc50_2_h_parents, 0x00d0, 0, 3, 7),
 	MUX_GATE(CLK_TOP_HDCP_SEL, "hdcp_sel", hdcp_parents, 0x00d0, 8, 2, 15),
 	MUX_GATE(CLK_TOP_HDCP_24M_SEL, "hdcp_24m_sel", hdcp_24m_parents, 0x00d0, 16, 2, 23),
-	MUX(CLK_TOP_RTC_SEL, "rtc_sel", rtc_parents, 0x00d0, 24, 2),
+	MUX_FLAGS(CLK_TOP_RTC_SEL, "rtc_sel", rtc_parents, 0x00d0, 24, 2,
+		  CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 
 	DIV_GATE(CLK_TOP_APLL1_DIV0, "apll1_div0", "aud_1_sel", 0x12c, 8, 0x120, 4, 24),
 	DIV_GATE(CLK_TOP_APLL1_DIV1, "apll1_div1", "aud_1_sel", 0x12c, 9, 0x124, 8, 0),
@@ -846,23 +852,8 @@ static const struct mtk_clk_rst_desc clk_rst_desc[] = {
 	}
 };
 
-static struct clk_hw_onecell_data *mt8173_top_clk_data;
-static struct clk_hw_onecell_data *mt8173_pll_clk_data;
 static struct clk_hw_onecell_data *infra_clk_data;
 
-static void mtk_clk_enable_critical(void)
-{
-	if (!mt8173_top_clk_data || !mt8173_pll_clk_data)
-		return;
-
-	clk_prepare_enable(mt8173_pll_clk_data->hws[CLK_APMIXED_ARMCA15PLL]->clk);
-	clk_prepare_enable(mt8173_pll_clk_data->hws[CLK_APMIXED_ARMCA7PLL]->clk);
-	clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_MEM_SEL]->clk);
-	clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_DDRPHYCFG_SEL]->clk);
-	clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_CCI400_SEL]->clk);
-	clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_RTC_SEL]->clk);
-}
-
 static int clk_mt8173_topck_probe(struct platform_device *pdev)
 {
 	struct device_node *node = pdev->dev.of_node;
@@ -874,7 +865,7 @@ static int clk_mt8173_topck_probe(struct platform_device *pdev)
 	if (IS_ERR(base))
 		return PTR_ERR(base);
 
-	mt8173_top_clk_data = clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
+	clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
 	if (IS_ERR_OR_NULL(clk_data))
 		return -ENOMEM;
 
@@ -895,7 +886,6 @@ static int clk_mt8173_topck_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_composites;
 
-	mtk_clk_enable_critical();
 	return 0;
 
 unregister_composites:
@@ -1048,8 +1038,10 @@ static const struct mtk_pll_div_table mmpll_div_table[] = {
 };
 
 static const struct mtk_pll_data plls[] = {
-	PLL(CLK_APMIXED_ARMCA15PLL, "armca15pll", 0x200, 0x20c, 0, 0, 21, 0x204, 24, 0x0, 0x204, 0),
-	PLL(CLK_APMIXED_ARMCA7PLL, "armca7pll", 0x210, 0x21c, 0, 0, 21, 0x214, 24, 0x0, 0x214, 0),
+	PLL(CLK_APMIXED_ARMCA15PLL, "armca15pll", 0x200, 0x20c, 0, PLL_AO,
+	    21, 0x204, 24, 0x0, 0x204, 0),
+	PLL(CLK_APMIXED_ARMCA7PLL, "armca7pll", 0x210, 0x21c, 0, PLL_AO,
+	    21, 0x214, 24, 0x0, 0x214, 0),
 	PLL(CLK_APMIXED_MAINPLL, "mainpll", 0x220, 0x22c, 0xf0000100, HAVE_RST_BAR, 21, 0x220, 4, 0x0, 0x224, 0),
 	PLL(CLK_APMIXED_UNIVPLL, "univpll", 0x230, 0x23c, 0xfe000000, HAVE_RST_BAR, 7, 0x230, 4, 0x0, 0x234, 14),
 	PLL_B(CLK_APMIXED_MMPLL, "mmpll", 0x240, 0x24c, 0, 0, 21, 0x244, 24, 0x0, 0x244, 0, mmpll_div_table),
@@ -1076,7 +1068,7 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
 	if (!base)
 		return PTR_ERR(base);
 
-	mt8173_pll_clk_data = clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
+	clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
 	if (IS_ERR_OR_NULL(clk_data))
 		return -ENOMEM;
 
@@ -1101,7 +1093,6 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_ref2usb;
 
-	mtk_clk_enable_critical();
 	return 0;
 
 unregister_ref2usb:
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:41 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:41 +0100
Subject: [PATCH v1 09/25] clk: mediatek: mt8173: Migrate to platform driver and common probe
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-10-angelogioacchino.delregno@collabora.com>

This driver is using CLK_OF_DECLARE() for all clocks: while this
definitely works, it's not preferred as this makes it impossible
to compile non boot critical clock drivers as modules and to take
advantage of clock controller Runtime PM.

As a preparation for a larger cleanup, migrate all of the clock
controller drivers for MT8173 to platform_driver and use the
common mtk_clk_simple_probe() where possible.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8173.c | 478 +++++++++++++++++-------------
 1 file changed, 273 insertions(+), 205 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173.c
index 617f68274004..70cdc0719658 100644
--- a/drivers/clk/mediatek/clk-mt8173.c
+++ b/drivers/clk/mediatek/clk-mt8173.c
@@ -7,6 +7,8 @@
 #include <linux/clk.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
 
 #include "clk-cpumux.h"
 #include "clk-gate.h"
@@ -15,6 +17,9 @@
 
 #include <dt-bindings/clock/mt8173-clk.h>
 
+#define REGOFF_REF2USB	0x8
+#define REGOFF_HDMI_REF	0x40
+
 /*
  * For some clocks, we don't care what their actual rates are. And these
  * clocks may change their rate on different products or different scenarios.
@@ -24,7 +29,7 @@
 
 static DEFINE_SPINLOCK(mt8173_clk_lock);
 
-static const struct mtk_fixed_clk fixed_clks[] __initconst = {
+static const struct mtk_fixed_clk fixed_clks[] = {
 	FIXED_CLK(CLK_TOP_CLKPH_MCK_O, "clkph_mck_o", "clk26m", DUMMY_RATE),
 	FIXED_CLK(CLK_TOP_USB_SYSPLL_125M, "usb_syspll_125m", "clk26m", 125 * MHZ),
 	FIXED_CLK(CLK_TOP_DSI0_DIG, "dsi0_dig", "clk26m", DUMMY_RATE),
@@ -33,7 +38,7 @@ static const struct mtk_fixed_clk fixed_clks[] __initconst = {
 	FIXED_CLK(CLK_TOP_LVDS_CTS, "lvds_cts", "lvdspll", DUMMY_RATE),
 };
 
-static const struct mtk_fixed_factor top_divs[] __initconst = {
+static const struct mtk_fixed_factor top_divs[] = {
 	FACTOR(CLK_TOP_ARMCA7PLL_754M, "armca7pll_754m", "armca7pll", 1, 2),
 	FACTOR(CLK_TOP_ARMCA7PLL_502M, "armca7pll_502m", "armca7pll", 1, 3),
 
@@ -129,7 +134,7 @@ static const struct mtk_fixed_factor top_divs[] __initconst = {
 	FACTOR(CLK_TOP_VENCPLL_D4, "vencpll_d4", "vencpll", 1, 4),
 };
 
-static const char * const axi_parents[] __initconst = {
+static const char * const axi_parents[] = {
 	"clk26m",
 	"syspll1_d2",
 	"syspll_d5",
@@ -140,17 +145,17 @@ static const char * const axi_parents[] __initconst = {
 	"dmpll_d4"
 };
 
-static const char * const mem_parents[] __initconst = {
+static const char * const mem_parents[] = {
 	"clk26m",
 	"dmpll_ck"
 };
 
-static const char * const ddrphycfg_parents[] __initconst = {
+static const char * const ddrphycfg_parents[] = {
 	"clk26m",
 	"syspll1_d8"
 };
 
-static const char * const mm_parents[] __initconst = {
+static const char * const mm_parents[] = {
 	"clk26m",
 	"vencpll_d2",
 	"main_h364m",
@@ -162,14 +167,14 @@ static const char * const mm_parents[] __initconst = {
 	"dmpll_d2"
 };
 
-static const char * const pwm_parents[] __initconst = {
+static const char * const pwm_parents[] = {
 	"clk26m",
 	"univpll2_d4",
 	"univpll3_d2",
 	"univpll1_d4"
 };
 
-static const char * const vdec_parents[] __initconst = {
+static const char * const vdec_parents[] = {
 	"clk26m",
 	"vcodecpll_ck",
 	"tvdpll_445p5m",
@@ -182,7 +187,7 @@ static const char * const vdec_parents[] __initconst = {
 	"dmpll_d4"
 };
 
-static const char * const venc_parents[] __initconst = {
+static const char * const venc_parents[] = {
 	"clk26m",
 	"vcodecpll_ck",
 	"tvdpll_445p5m",
@@ -195,7 +200,7 @@ static const char * const venc_parents[] __initconst = {
 	"dmpll_d4"
 };
 
-static const char * const mfg_parents[] __initconst = {
+static const char * const mfg_parents[] = {
 	"clk26m",
 	"mmpll_ck",
 	"dmpll_ck",
@@ -214,7 +219,7 @@ static const char * const mfg_parents[] __initconst = {
 	"univpll2_d2"
 };
 
-static const char * const camtg_parents[] __initconst = {
+static const char * const camtg_parents[] = {
 	"clk26m",
 	"univpll_d26",
 	"univpll2_d2",
@@ -223,12 +228,12 @@ static const char * const camtg_parents[] __initconst = {
 	"univpll1_d4"
 };
 
-static const char * const uart_parents[] __initconst = {
+static const char * const uart_parents[] = {
 	"clk26m",
 	"univpll2_d8"
 };
 
-static const char * const spi_parents[] __initconst = {
+static const char * const spi_parents[] = {
 	"clk26m",
 	"syspll3_d2",
 	"syspll1_d4",
@@ -238,20 +243,20 @@ static const char * const spi_parents[] __initconst = {
 	"univpll1_d8"
 };
 
-static const char * const usb20_parents[] __initconst = {
+static const char * const usb20_parents[] = {
 	"clk26m",
 	"univpll1_d8",
 	"univpll3_d4"
 };
 
-static const char * const usb30_parents[] __initconst = {
+static const char * const usb30_parents[] = {
 	"clk26m",
 	"univpll3_d2",
 	"usb_syspll_125m",
 	"univpll2_d4"
 };
 
-static const char * const msdc50_0_h_parents[] __initconst = {
+static const char * const msdc50_0_h_parents[] = {
 	"clk26m",
 	"syspll1_d2",
 	"syspll2_d2",
@@ -260,7 +265,7 @@ static const char * const msdc50_0_h_parents[] __initconst = {
 	"univpll1_d4"
 };
 
-static const char * const msdc50_0_parents[] __initconst = {
+static const char * const msdc50_0_parents[] = {
 	"clk26m",
 	"msdcpll_ck",
 	"msdcpll_d2",
@@ -278,7 +283,7 @@ static const char * const msdc50_0_parents[] __initconst = {
 	"msdcpll2_d4"
 };
 
-static const char * const msdc30_1_parents[] __initconst = {
+static const char * const msdc30_1_parents[] = {
 	"clk26m",
 	"univpll2_d2",
 	"msdcpll_d4",
@@ -289,7 +294,7 @@ static const char * const msdc30_1_parents[] __initconst = {
 	"vencpll_d4"
 };
 
-static const char * const msdc30_2_parents[] __initconst = {
+static const char * const msdc30_2_parents[] = {
 	"clk26m",
 	"univpll2_d2",
 	"msdcpll_d4",
@@ -300,7 +305,7 @@ static const char * const msdc30_2_parents[] __initconst = {
 	"vencpll_d2"
 };
 
-static const char * const msdc30_3_parents[] __initconst = {
+static const char * const msdc30_3_parents[] = {
 	"clk26m",
 	"msdcpll2_ck",
 	"msdcpll2_d2",
@@ -317,14 +322,14 @@ static const char * const msdc30_3_parents[] __initconst = {
 	"msdcpll_d4"
 };
 
-static const char * const audio_parents[] __initconst = {
+static const char * const audio_parents[] = {
 	"clk26m",
 	"syspll3_d4",
 	"syspll4_d4",
 	"syspll1_d16"
 };
 
-static const char * const aud_intbus_parents[] __initconst = {
+static const char * const aud_intbus_parents[] = {
 	"clk26m",
 	"syspll1_d4",
 	"syspll4_d2",
@@ -334,7 +339,7 @@ static const char * const aud_intbus_parents[] __initconst = {
 	"dmpll_d8"
 };
 
-static const char * const pmicspi_parents[] __initconst = {
+static const char * const pmicspi_parents[] = {
 	"clk26m",
 	"syspll1_d8",
 	"syspll3_d4",
@@ -345,7 +350,7 @@ static const char * const pmicspi_parents[] __initconst = {
 	"dmpll_d16"
 };
 
-static const char * const scp_parents[] __initconst = {
+static const char * const scp_parents[] = {
 	"clk26m",
 	"syspll1_d2",
 	"univpll_d5",
@@ -354,14 +359,14 @@ static const char * const scp_parents[] __initconst = {
 	"dmpll_d4"
 };
 
-static const char * const atb_parents[] __initconst = {
+static const char * const atb_parents[] = {
 	"clk26m",
 	"syspll1_d2",
 	"univpll_d5",
 	"dmpll_d2"
 };
 
-static const char * const venc_lt_parents[] __initconst = {
+static const char * const venc_lt_parents[] = {
 	"clk26m",
 	"univpll_d3",
 	"vcodecpll_ck",
@@ -376,7 +381,7 @@ static const char * const venc_lt_parents[] __initconst = {
 	"dmpll_ck"
 };
 
-static const char * const dpi0_parents[] __initconst = {
+static const char * const dpi0_parents[] = {
 	"clk26m",
 	"tvdpll_d2",
 	"tvdpll_d4",
@@ -386,13 +391,13 @@ static const char * const dpi0_parents[] __initconst = {
 	"tvdpll_d16"
 };
 
-static const char * const irda_parents[] __initconst = {
+static const char * const irda_parents[] = {
 	"clk26m",
 	"univpll2_d4",
 	"syspll2_d4"
 };
 
-static const char * const cci400_parents[] __initconst = {
+static const char * const cci400_parents[] = {
 	"clk26m",
 	"vencpll_ck",
 	"armca7pll_754m",
@@ -403,41 +408,41 @@ static const char * const cci400_parents[] __initconst = {
 	"dmpll_ck"
 };
 
-static const char * const aud_1_parents[] __initconst = {
+static const char * const aud_1_parents[] = {
 	"clk26m",
 	"apll1_ck",
 	"univpll2_d4",
 	"univpll2_d8"
 };
 
-static const char * const aud_2_parents[] __initconst = {
+static const char * const aud_2_parents[] = {
 	"clk26m",
 	"apll2_ck",
 	"univpll2_d4",
 	"univpll2_d8"
 };
 
-static const char * const mem_mfg_in_parents[] __initconst = {
+static const char * const mem_mfg_in_parents[] = {
 	"clk26m",
 	"mmpll_ck",
 	"dmpll_ck",
 	"clk26m"
 };
 
-static const char * const axi_mfg_in_parents[] __initconst = {
+static const char * const axi_mfg_in_parents[] = {
 	"clk26m",
 	"axi_sel",
 	"dmpll_d2"
 };
 
-static const char * const scam_parents[] __initconst = {
+static const char * const scam_parents[] = {
 	"clk26m",
 	"syspll3_d2",
 	"univpll2_d4",
 	"dmpll_d4"
 };
 
-static const char * const spinfi_ifr_parents[] __initconst = {
+static const char * const spinfi_ifr_parents[] = {
 	"clk26m",
 	"univpll2_d8",
 	"univpll3_d4",
@@ -448,14 +453,14 @@ static const char * const spinfi_ifr_parents[] __initconst = {
 	"univpll1_d4"
 };
 
-static const char * const hdmi_parents[] __initconst = {
+static const char * const hdmi_parents[] = {
 	"clk26m",
 	"hdmitx_dig_cts",
 	"hdmitxpll_d2",
 	"hdmitxpll_d3"
 };
 
-static const char * const dpilvds_parents[] __initconst = {
+static const char * const dpilvds_parents[] = {
 	"clk26m",
 	"lvdspll",
 	"lvdspll_d2",
@@ -464,7 +469,7 @@ static const char * const dpilvds_parents[] __initconst = {
 	"fpc_ck"
 };
 
-static const char * const msdc50_2_h_parents[] __initconst = {
+static const char * const msdc50_2_h_parents[] = {
 	"clk26m",
 	"syspll1_d2",
 	"syspll2_d2",
@@ -473,72 +478,72 @@ static const char * const msdc50_2_h_parents[] __initconst = {
 	"univpll1_d4"
 };
 
-static const char * const hdcp_parents[] __initconst = {
+static const char * const hdcp_parents[] = {
 	"clk26m",
 	"syspll4_d2",
 	"syspll3_d4",
 	"univpll2_d4"
 };
 
-static const char * const hdcp_24m_parents[] __initconst = {
+static const char * const hdcp_24m_parents[] = {
 	"clk26m",
 	"univpll_d26",
 	"univpll_d52",
 	"univpll2_d8"
 };
 
-static const char * const rtc_parents[] __initconst = {
+static const char * const rtc_parents[] = {
 	"clkrtc_int",
 	"clkrtc_ext",
 	"clk26m",
 	"univpll3_d8"
 };
 
-static const char * const i2s0_m_ck_parents[] __initconst = {
+static const char * const i2s0_m_ck_parents[] = {
 	"apll1_div1",
 	"apll2_div1"
 };
 
-static const char * const i2s1_m_ck_parents[] __initconst = {
+static const char * const i2s1_m_ck_parents[] = {
 	"apll1_div2",
 	"apll2_div2"
 };
 
-static const char * const i2s2_m_ck_parents[] __initconst = {
+static const char * const i2s2_m_ck_parents[] = {
 	"apll1_div3",
 	"apll2_div3"
 };
 
-static const char * const i2s3_m_ck_parents[] __initconst = {
+static const char * const i2s3_m_ck_parents[] = {
 	"apll1_div4",
 	"apll2_div4"
 };
 
-static const char * const i2s3_b_ck_parents[] __initconst = {
+static const char * const i2s3_b_ck_parents[] = {
 	"apll1_div5",
 	"apll2_div5"
 };
 
-static const char * const ca53_parents[] __initconst = {
+static const char * const ca53_parents[] = {
 	"clk26m",
 	"armca7pll",
 	"mainpll",
 	"univpll"
 };
 
-static const char * const ca72_parents[] __initconst = {
+static const char * const ca72_parents[] = {
 	"clk26m",
 	"armca15pll",
 	"mainpll",
 	"univpll"
 };
 
-static const struct mtk_composite cpu_muxes[] __initconst = {
+static const struct mtk_composite cpu_muxes[] = {
 	MUX(CLK_INFRA_CA53SEL, "infra_ca53_sel", ca53_parents, 0x0000, 0, 2),
 	MUX(CLK_INFRA_CA72SEL, "infra_ca72_sel", ca72_parents, 0x0000, 2, 2),
 };
 
-static const struct mtk_composite top_muxes[] __initconst = {
+static const struct mtk_composite top_muxes[] = {
 	/* CLK_CFG_0 */
 	MUX(CLK_TOP_AXI_SEL, "axi_sel", axi_parents, 0x0040, 0, 3),
 	MUX(CLK_TOP_MEM_SEL, "mem_sel", mem_parents, 0x0040, 8, 1),
@@ -614,7 +619,7 @@ static const struct mtk_composite top_muxes[] __initconst = {
 	MUX(CLK_TOP_I2S3_B_SEL, "i2s3_b_ck_sel", i2s3_b_ck_parents, 0x120, 8, 1),
 };
 
-static const struct mtk_gate_regs infra_cg_regs __initconst = {
+static const struct mtk_gate_regs infra_cg_regs = {
 	.set_ofs = 0x0040,
 	.clr_ofs = 0x0044,
 	.sta_ofs = 0x0048,
@@ -629,7 +634,7 @@ static const struct mtk_gate_regs infra_cg_regs __initconst = {
 		.ops = &mtk_clk_gate_ops_setclr,		\
 	}
 
-static const struct mtk_gate infra_clks[] __initconst = {
+static const struct mtk_gate infra_clks[] = {
 	GATE_ICG(CLK_INFRA_DBGCLK, "infra_dbgclk", "axi_sel", 0),
 	GATE_ICG(CLK_INFRA_SMI, "infra_smi", "mm_sel", 1),
 	GATE_ICG(CLK_INFRA_AUDIO, "infra_audio", "aud_intbus_sel", 5),
@@ -643,17 +648,17 @@ static const struct mtk_gate infra_clks[] __initconst = {
 	GATE_ICG(CLK_INFRA_PMICWRAP, "infra_pmicwrap", "axi_sel", 23),
 };
 
-static const struct mtk_fixed_factor infra_divs[] __initconst = {
+static const struct mtk_fixed_factor infra_early_divs[] = {
 	FACTOR(CLK_INFRA_CLK_13M, "clk13m", "clk26m", 1, 2),
 };
 
-static const struct mtk_gate_regs peri0_cg_regs __initconst = {
+static const struct mtk_gate_regs peri0_cg_regs = {
 	.set_ofs = 0x0008,
 	.clr_ofs = 0x0010,
 	.sta_ofs = 0x0018,
 };
 
-static const struct mtk_gate_regs peri1_cg_regs __initconst = {
+static const struct mtk_gate_regs peri1_cg_regs = {
 	.set_ofs = 0x000c,
 	.clr_ofs = 0x0014,
 	.sta_ofs = 0x001c,
@@ -677,7 +682,7 @@ static const struct mtk_gate_regs peri1_cg_regs __initconst = {
 		.ops = &mtk_clk_gate_ops_setclr,		\
 	}
 
-static const struct mtk_gate peri_gates[] __initconst = {
+static const struct mtk_gate peri_gates[] = {
 	/* PERI0 */
 	GATE_PERI0(CLK_PERI_NFI, "peri_nfi", "axi_sel", 0),
 	GATE_PERI0(CLK_PERI_THERM, "peri_therm", "axi_sel", 1),
@@ -717,19 +722,19 @@ static const struct mtk_gate peri_gates[] __initconst = {
 	GATE_PERI1(CLK_PERI_I2C6, "peri_i2c6", "axi_sel", 2),
 };
 
-static const char * const uart_ck_sel_parents[] __initconst = {
+static const char * const uart_ck_sel_parents[] = {
 	"clk26m",
 	"uart_sel",
 };
 
-static const struct mtk_composite peri_clks[] __initconst = {
+static const struct mtk_composite peri_clks[] = {
 	MUX(CLK_PERI_UART0_SEL, "uart0_ck_sel", uart_ck_sel_parents, 0x40c, 0, 1),
 	MUX(CLK_PERI_UART1_SEL, "uart1_ck_sel", uart_ck_sel_parents, 0x40c, 1, 1),
 	MUX(CLK_PERI_UART2_SEL, "uart2_ck_sel", uart_ck_sel_parents, 0x40c, 2, 1),
 	MUX(CLK_PERI_UART3_SEL, "uart3_ck_sel", uart_ck_sel_parents, 0x40c, 3, 1),
 };
 
-static const struct mtk_gate_regs cg_regs_4_8_0 __initconst = {
+static const struct mtk_gate_regs cg_regs_4_8_0 = {
 	.set_ofs = 0x0004,
 	.clr_ofs = 0x0008,
 	.sta_ofs = 0x0000,
@@ -744,7 +749,8 @@ static const struct mtk_gate_regs cg_regs_4_8_0 __initconst = {
 		.ops = &mtk_clk_gate_ops_setclr,		\
 	}
 
-static const struct mtk_gate img_clks[] __initconst = {
+static const struct mtk_gate img_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "img_dummy"),
 	GATE_IMG(CLK_IMG_LARB2_SMI, "img_larb2_smi", "mm_sel", 0),
 	GATE_IMG(CLK_IMG_CAM_SMI, "img_cam_smi", "mm_sel", 5),
 	GATE_IMG(CLK_IMG_CAM_CAM, "img_cam_cam", "mm_sel", 6),
@@ -754,13 +760,13 @@ static const struct mtk_gate img_clks[] __initconst = {
 	GATE_IMG(CLK_IMG_FD, "img_fd", "mm_sel", 11),
 };
 
-static const struct mtk_gate_regs vdec0_cg_regs __initconst = {
+static const struct mtk_gate_regs vdec0_cg_regs = {
 	.set_ofs = 0x0000,
 	.clr_ofs = 0x0004,
 	.sta_ofs = 0x0000,
 };
 
-static const struct mtk_gate_regs vdec1_cg_regs __initconst = {
+static const struct mtk_gate_regs vdec1_cg_regs = {
 	.set_ofs = 0x0008,
 	.clr_ofs = 0x000c,
 	.sta_ofs = 0x0008,
@@ -784,7 +790,8 @@ static const struct mtk_gate_regs vdec1_cg_regs __initconst = {
 		.ops = &mtk_clk_gate_ops_setclr_inv,		\
 	}
 
-static const struct mtk_gate vdec_clks[] __initconst = {
+static const struct mtk_gate vdec_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "vdec_dummy"),
 	GATE_VDEC0(CLK_VDEC_CKEN, "vdec_cken", "vdec_sel", 0),
 	GATE_VDEC1(CLK_VDEC_LARB_CKEN, "vdec_larb_cken", "mm_sel", 0),
 };
@@ -798,7 +805,8 @@ static const struct mtk_gate vdec_clks[] __initconst = {
 		.ops = &mtk_clk_gate_ops_setclr_inv,		\
 	}
 
-static const struct mtk_gate venc_clks[] __initconst = {
+static const struct mtk_gate venc_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "venc_dummy"),
 	GATE_VENC(CLK_VENC_CKE0, "venc_cke0", "mm_sel", 0),
 	GATE_VENC(CLK_VENC_CKE1, "venc_cke1", "venc_sel", 4),
 	GATE_VENC(CLK_VENC_CKE2, "venc_cke2", "venc_sel", 8),
@@ -814,7 +822,8 @@ static const struct mtk_gate venc_clks[] __initconst = {
 		.ops = &mtk_clk_gate_ops_setclr_inv,		\
 	}
 
-static const struct mtk_gate venclt_clks[] __initconst = {
+static const struct mtk_gate venclt_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "venclt_dummy"),
 	GATE_VENCLT(CLK_VENCLT_CKE0, "venclt_cke0", "mm_sel", 0),
 	GATE_VENCLT(CLK_VENCLT_CKE1, "venclt_cke1", "venclt_sel", 4),
 };
@@ -837,10 +846,11 @@ static const struct mtk_clk_rst_desc clk_rst_desc[] = {
 	}
 };
 
-static struct clk_hw_onecell_data *mt8173_top_clk_data __initdata;
-static struct clk_hw_onecell_data *mt8173_pll_clk_data __initdata;
+static struct clk_hw_onecell_data *mt8173_top_clk_data;
+static struct clk_hw_onecell_data *mt8173_pll_clk_data;
+static struct clk_hw_onecell_data *infra_clk_data;
 
-static void __init mtk_clk_enable_critical(void)
+static void mtk_clk_enable_critical(void)
 {
 	if (!mt8173_top_clk_data || !mt8173_pll_clk_data)
 		return;
@@ -853,102 +863,149 @@ static void __init mtk_clk_enable_critical(void)
 	clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_RTC_SEL]->clk);
 }
 
-static void __init mtk_topckgen_init(struct device_node *node)
+static int clk_mt8173_topck_probe(struct platform_device *pdev)
 {
+	struct device_node *node = pdev->dev.of_node;
 	struct clk_hw_onecell_data *clk_data;
 	void __iomem *base;
 	int r;
 
-	base = of_iomap(node, 0);
-	if (!base) {
-		pr_err("%s(): ioremap failed\n", __func__);
-		return;
-	}
+	base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(base))
+		return PTR_ERR(base);
 
 	mt8173_top_clk_data = clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
+	if (IS_ERR_OR_NULL(clk_data))
+		return -ENOMEM;
 
-	mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
-	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-			&mt8173_clk_lock, clk_data, NULL);
+	r = mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
+	if (r)
+		goto free_clk_data;
+
+	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
+	if (r)
+		goto unregister_fixed_clks;
+
+	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
+					&mt8173_clk_lock, clk_data, &pdev->dev);
+	if (r)
+		goto unregister_factors;
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
+		goto unregister_composites;
 
 	mtk_clk_enable_critical();
+	return 0;
+
+unregister_composites:
+	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
+unregister_factors:
+	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
+unregister_fixed_clks:
+	mtk_clk_unregister_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
+free_clk_data:
+	mtk_free_clk_data(clk_data);
+	return r;
 }
-CLK_OF_DECLARE(mtk_topckgen, "mediatek,mt8173-topckgen", mtk_topckgen_init);
 
-static void __init mtk_infrasys_init(struct device_node *node)
+static void clk_mt8173_infra_init_early(struct device_node *node)
 {
-	struct clk_hw_onecell_data *clk_data;
+	int i;
+
+	infra_clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
+	if (!infra_clk_data)
+		return;
+
+	for (i = 0; i < CLK_INFRA_NR_CLK; i++)
+		infra_clk_data->hws[i] = ERR_PTR(-EPROBE_DEFER);
+
+	mtk_clk_register_factors(infra_early_divs, ARRAY_SIZE(infra_early_divs), infra_clk_data);
+
+	of_clk_add_hw_provider(node, of_clk_hw_onecell_get, infra_clk_data);
+}
+CLK_OF_DECLARE_DRIVER(mtk_infrasys, "mediatek,mt8173-infracfg",
+		      clk_mt8173_infra_init_early);
+
+static int clk_mt8173_infra_probe(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
 	int r;
 
-	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
+	r = mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
+				   infra_clk_data, &pdev->dev);
+	if (r)
+		return r;
 
-	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       clk_data, NULL);
-	mtk_clk_register_factors(infra_divs, ARRAY_SIZE(infra_divs), clk_data);
+	r = mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
+				      infra_clk_data, &pdev->dev);
+	if (r)
+		goto unregister_gates;
 
-	mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
-				  clk_data, NULL);
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, infra_clk_data);
+	if (r)
+		goto unregister_cpumuxes;
 
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	r = mtk_register_reset_controller(node, &clk_rst_desc[0]);
 	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
+		goto unregister_clk_hw;
+
+	return 0;
 
-	mtk_register_reset_controller(node, &clk_rst_desc[0]);
+unregister_clk_hw:
+	of_clk_del_provider(node);
+unregister_cpumuxes:
+	mtk_clk_unregister_cpumuxes(cpu_muxes, ARRAY_SIZE(cpu_muxes), infra_clk_data);
+unregister_gates:
+	mtk_clk_unregister_gates(infra_clks, ARRAY_SIZE(infra_clks), infra_clk_data);
+	return r;
 }
-CLK_OF_DECLARE(mtk_infrasys, "mediatek,mt8173-infracfg", mtk_infrasys_init);
 
-static void __init mtk_pericfg_init(struct device_node *node)
+static int clk_mt8173_peri_probe(struct platform_device *pdev)
 {
+	struct device_node *node = pdev->dev.of_node;
 	struct clk_hw_onecell_data *clk_data;
 	int r;
 	void __iomem *base;
 
-	base = of_iomap(node, 0);
-	if (!base) {
-		pr_err("%s(): ioremap failed\n", __func__);
-		return;
-	}
+	base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(base))
+		return PTR_ERR(base);
 
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
+	if (IS_ERR_OR_NULL(clk_data))
+		return -ENOMEM;
 
-	mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
-			       clk_data, NULL);
-	mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
-			&mt8173_clk_lock, clk_data, NULL);
+	r = mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
+				   clk_data, &pdev->dev);
+	if (r)
+		goto free_clk_data;
+
+	r = mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
+					&mt8173_clk_lock, clk_data, &pdev->dev);
+	if (r)
+		goto unregister_gates;
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
+		goto unregister_composites;
 
-	mtk_register_reset_controller(node, &clk_rst_desc[1]);
+	r = mtk_register_reset_controller(node, &clk_rst_desc[1]);
+	if (r)
+		goto unregister_clk_hw;
+
+	return 0;
+
+unregister_clk_hw:
+	of_clk_del_provider(node);
+unregister_composites:
+	mtk_clk_unregister_composites(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
+unregister_gates:
+	mtk_clk_unregister_gates(peri_gates, ARRAY_SIZE(peri_gates), clk_data);
+free_clk_data:
+	mtk_free_clk_data(clk_data);
+	return r;
 }
-CLK_OF_DECLARE(mtk_pericfg, "mediatek,mt8173-pericfg", mtk_pericfg_init);
-
-struct mtk_clk_usb {
-	int id;
-	const char *name;
-	const char *parent;
-	u32 reg_ofs;
-};
-
-#define APMIXED_USB(_id, _name, _parent, _reg_ofs) {			\
-		.id = _id,						\
-		.name = _name,						\
-		.parent = _parent,					\
-		.reg_ofs = _reg_ofs,					\
-	}
-
-static const struct mtk_clk_usb apmixed_usb[] __initconst = {
-	APMIXED_USB(CLK_APMIXED_REF2USB_TX, "ref2usb_tx", "clk26m", 0x8),
-};
 
 #define MT8173_PLL_FMAX		(3000UL * MHZ)
 
@@ -1007,119 +1064,130 @@ static const struct mtk_pll_data plls[] = {
 	PLL(CLK_APMIXED_MSDCPLL2, "msdcpll2", 0x2f0, 0x2fc, 0, 0, 21, 0x2f0, 4, 0x0, 0x2f4, 0),
 };
 
-static void __init mtk_apmixedsys_init(struct device_node *node)
+static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
 {
+	struct device_node *node = pdev->dev.of_node;
 	struct clk_hw_onecell_data *clk_data;
 	void __iomem *base;
 	struct clk_hw *hw;
-	int r, i;
+	int r;
 
 	base = of_iomap(node, 0);
-	if (!base) {
-		pr_err("%s(): ioremap failed\n", __func__);
-		return;
-	}
+	if (!base)
+		return PTR_ERR(base);
 
 	mt8173_pll_clk_data = clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
-	if (!clk_data) {
-		iounmap(base);
-		return;
-	}
-
-	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
+	if (IS_ERR_OR_NULL(clk_data))
+		return -ENOMEM;
 
-	for (i = 0; i < ARRAY_SIZE(apmixed_usb); i++) {
-		const struct mtk_clk_usb *cku = &apmixed_usb[i];
-
-		hw = mtk_clk_register_ref2usb_tx(cku->name, cku->parent, base + cku->reg_ofs);
-		if (IS_ERR(hw)) {
-			pr_err("Failed to register clk %s: %ld\n", cku->name, PTR_ERR(hw));
-			continue;
-		}
+	r = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
+	if (r)
+		goto free_clk_data;
 
-		clk_data->hws[cku->id] = hw;
+	hw = mtk_clk_register_ref2usb_tx("ref2usb_tx", "clk26m", base + REGOFF_REF2USB);
+	if (IS_ERR(hw)) {
+		r = PTR_ERR(hw);
+		dev_err(&pdev->dev, "Failed to register ref2usb_tx: %d\n", r);
+		goto unregister_plls;
 	}
+	clk_data->hws[CLK_APMIXED_REF2USB_TX] = hw;
 
-	hw = clk_hw_register_divider(NULL, "hdmi_ref", "tvdpll_594m", 0,
-				     base + 0x40, 16, 3, CLK_DIVIDER_POWER_OF_TWO,
-				     NULL);
+	hw = devm_clk_hw_register_divider(&pdev->dev, "hdmi_ref", "tvdpll_594m", 0,
+					  base + REGOFF_HDMI_REF, 16, 3,
+					  CLK_DIVIDER_POWER_OF_TWO, NULL);
 	clk_data->hws[CLK_APMIXED_HDMI_REF] = hw;
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
+		goto unregister_ref2usb;
 
 	mtk_clk_enable_critical();
+	return 0;
+
+unregister_ref2usb:
+	mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
+unregister_plls:
+	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+free_clk_data:
+	mtk_free_clk_data(clk_data);
+	return r;
 }
-CLK_OF_DECLARE(mtk_apmixedsys, "mediatek,mt8173-apmixedsys",
-		mtk_apmixedsys_init);
-
-static void __init mtk_imgsys_init(struct device_node *node)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_IMG_NR_CLK);
 
-	mtk_clk_register_gates(node, img_clks, ARRAY_SIZE(img_clks),
-			       clk_data, NULL);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+static const struct mtk_clk_desc img_desc = {
+	.clks = img_clks,
+	.num_clks = ARRAY_SIZE(img_clks),
+};
 
-	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
-}
-CLK_OF_DECLARE(mtk_imgsys, "mediatek,mt8173-imgsys", mtk_imgsys_init);
+static const struct mtk_clk_desc vdec_desc = {
+	.clks = vdec_clks,
+	.num_clks = ARRAY_SIZE(vdec_clks),
+};
 
-static void __init mtk_vdecsys_init(struct device_node *node)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
+static const struct mtk_clk_desc venc_desc = {
+	.clks = venc_clks,
+	.num_clks = ARRAY_SIZE(venc_clks),
+};
 
-	clk_data = mtk_alloc_clk_data(CLK_VDEC_NR_CLK);
+static const struct mtk_clk_desc venc_lt_desc = {
+	.clks = venclt_clks,
+	.num_clks = ARRAY_SIZE(venclt_clks),
+};
 
-	mtk_clk_register_gates(node, vdec_clks, ARRAY_SIZE(vdec_clks),
-			       clk_data, NULL);
+static const struct of_device_id of_match_clk_mt8173_simple[] = {
+	{ .compatible = "mediatek,mt8173-imgsys", .data = &img_desc },
+	{ .compatible = "mediatek,mt8173-vdecsys", .data = &vdec_desc },
+	{ .compatible = "mediatek,mt8173-vencsys", .data = &venc_desc },
+	{ .compatible = "mediatek,mt8173-vencltsys", .data = &venc_lt_desc },
+	{ /* sentinel */ }
+};
 
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
-}
-CLK_OF_DECLARE(mtk_vdecsys, "mediatek,mt8173-vdecsys", mtk_vdecsys_init);
+static struct platform_driver clk_mt8173_simple_drv = {
+	.driver = {
+		.name = "clk-mt8173-simple",
+		.of_match_table = of_match_clk_mt8173_simple,
+	},
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+};
 
-static void __init mtk_vencsys_init(struct device_node *node)
+static int clk_mt8173_probe(struct platform_device *pdev)
 {
-	struct clk_hw_onecell_data *clk_data;
+	int (*clk_probe)(struct platform_device *pdev);
 	int r;
 
-	clk_data = mtk_alloc_clk_data(CLK_VENC_NR_CLK);
+	clk_probe = of_device_get_match_data(&pdev->dev);
+	if (!clk_probe)
+		return -EINVAL;
 
-	mtk_clk_register_gates(node, venc_clks, ARRAY_SIZE(venc_clks),
-			       clk_data, NULL);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	r = clk_probe(pdev);
 	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
+		dev_err(&pdev->dev, "could not register clock provider: %s: %d\n", pdev->name, r);
+
+	return r;
 }
-CLK_OF_DECLARE(mtk_vencsys, "mediatek,mt8173-vencsys", mtk_vencsys_init);
 
-static void __init mtk_vencltsys_init(struct device_node *node)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
+static const struct of_device_id of_match_clk_mt8173[] = {
+	{ .compatible = "mediatek,mt8173-apmixedsys", .data = clk_mt8173_apmixed_probe },
+	{ .compatible = "mediatek,mt8173-infracfg", .data = clk_mt8173_infra_probe },
+	{ .compatible = "mediatek,mt8173-topckgen", .data = clk_mt8173_topck_probe },
+	{ .compatible = "mediatek,mt8173-pericfg", .data = clk_mt8173_peri_probe },
+	{ /* sentinel */ }
+};
 
-	clk_data = mtk_alloc_clk_data(CLK_VENCLT_NR_CLK);
+static struct platform_driver clk_mt8173_drv = {
+	.probe = clk_mt8173_probe,
+	.driver = {
+		.name = "clk-mt8173",
+		.of_match_table = of_match_clk_mt8173,
+	},
+};
 
-	mtk_clk_register_gates(node, venclt_clks, ARRAY_SIZE(venclt_clks),
-			       clk_data, NULL);
+static int __init clk_mt8173_init(void)
+{
+	int ret = platform_driver_register(&clk_mt8173_drv);
 
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
+	if (ret)
+		return ret;
+	return platform_driver_register(&clk_mt8173_simple_drv);
 }
-CLK_OF_DECLARE(mtk_vencltsys, "mediatek,mt8173-vencltsys", mtk_vencltsys_init);
+arch_initcall(clk_mt8173_init);
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:47 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:47 +0100
Subject: [PATCH v1 15/25] clk: mediatek: mt8173: Migrate pericfg/topckgen to mtk_clk_simple_probe()
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-16-angelogioacchino.delregno@collabora.com>

Function mtk_clk_simple_probe() gained the ability to register multiple
clock types: migrate MT8173's pericfg and topckgen to this common
probe function to reduce duplication and code size.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8173-pericfg.c  | 75 ++++-----------------
 drivers/clk/mediatek/clk-mt8173-topckgen.c | 76 ++++------------------
 2 files changed, 27 insertions(+), 124 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8173-pericfg.c b/drivers/clk/mediatek/clk-mt8173-pericfg.c
index 30c0fa263cc0..e87294b72c2c 100644
--- a/drivers/clk/mediatek/clk-mt8173-pericfg.c
+++ b/drivers/clk/mediatek/clk-mt8173-pericfg.c
@@ -46,6 +46,7 @@ static const struct mtk_composite peri_clks[] = {
 };
 
 static const struct mtk_gate peri_gates[] = {
+	GATE_DUMMY(CLK_DUMMY, "peri_gate_dummy"),
 	/* PERI0 */
 	GATE_PERI0(CLK_PERI_NFI, "peri_nfi", "axi_sel", 0),
 	GATE_PERI0(CLK_PERI_THERM, "peri_therm", "axi_sel", 1),
@@ -93,77 +94,27 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(pericfg_rst_ofs),
 };
 
+static const struct mtk_clk_desc peri_desc = {
+	.clks = peri_gates,
+	.num_clks = ARRAY_SIZE(peri_gates),
+	.composite_clks = peri_clks,
+	.num_composite_clks = ARRAY_SIZE(peri_clks),
+	.clk_lock = &mt8173_clk_lock,
+	.rst_desc = &clk_rst_desc,
+};
+
 static const struct of_device_id of_match_clk_mt8173_pericfg[] = {
-	{ .compatible = "mediatek,mt8173-pericfg" },
+	{ .compatible = "mediatek,mt8173-pericfg", .data = &peri_desc },
 	{ /* sentinel */ }
 };
 
-static int clk_mt8173_pericfg_probe(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-	void __iomem *base;
-
-	base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(base))
-		return PTR_ERR(base);
-
-	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
-	if (IS_ERR_OR_NULL(clk_data))
-		return -ENOMEM;
-
-	r = mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
-				   clk_data, &pdev->dev);
-	if (r)
-		goto free_clk_data;
-
-	r = mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
-					&mt8173_clk_lock, clk_data, &pdev->dev);
-	if (r)
-		goto unregister_gates;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_composites;
-
-	r = mtk_register_reset_controller(node, &clk_rst_desc);
-	if (r)
-		goto unregister_clk_hw;
-
-	return 0;
-
-unregister_clk_hw:
-	of_clk_del_provider(node);
-unregister_composites:
-	mtk_clk_unregister_composites(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
-unregister_gates:
-	mtk_clk_unregister_gates(peri_gates, ARRAY_SIZE(peri_gates), clk_data);
-free_clk_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
-
-static int clk_mt8173_pericfg_remove(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
-
-	of_clk_del_provider(node);
-	mtk_clk_unregister_composites(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
-	mtk_clk_unregister_gates(peri_gates, ARRAY_SIZE(peri_gates), clk_data);
-	mtk_free_clk_data(clk_data);
-
-	return 0;
-}
-
 static struct platform_driver clk_mt8173_pericfg_drv = {
 	.driver = {
 		.name = "clk-mt8173-pericfg",
 		.of_match_table = of_match_clk_mt8173_pericfg,
 	},
-	.probe = clk_mt8173_pericfg_probe,
-	.remove = clk_mt8173_pericfg_remove,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 };
 module_platform_driver(clk_mt8173_pericfg_drv);
 
diff --git a/drivers/clk/mediatek/clk-mt8173-topckgen.c b/drivers/clk/mediatek/clk-mt8173-topckgen.c
index 46144e429081..257961528fe2 100644
--- a/drivers/clk/mediatek/clk-mt8173-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8173-topckgen.c
@@ -421,6 +421,7 @@ static const char * const i2s3_b_ck_parents[] = {
 };
 
 static const struct mtk_fixed_clk fixed_clks[] = {
+	FIXED_CLK(CLK_DUMMY, "topck_dummy", "clk26m", DUMMY_RATE),
 	FIXED_CLK(CLK_TOP_CLKPH_MCK_O, "clkph_mck_o", "clk26m", DUMMY_RATE),
 	FIXED_CLK(CLK_TOP_USB_SYSPLL_125M, "usb_syspll_125m", "clk26m", 125 * MHZ),
 	FIXED_CLK(CLK_TOP_DSI0_DIG, "dsi0_dig", "clk26m", DUMMY_RATE),
@@ -623,77 +624,28 @@ static const struct mtk_composite top_muxes[] = {
 	MUX(CLK_TOP_I2S3_B_SEL, "i2s3_b_ck_sel", i2s3_b_ck_parents, 0x120, 8, 1),
 };
 
+static const struct mtk_clk_desc topck_desc = {
+	.fixed_clks = fixed_clks,
+	.num_fixed_clks = ARRAY_SIZE(fixed_clks),
+	.factor_clks = top_divs,
+	.num_factor_clks = ARRAY_SIZE(top_divs),
+	.composite_clks = top_muxes,
+	.num_composite_clks = ARRAY_SIZE(top_muxes),
+	.clk_lock = &mt8173_top_clk_lock,
+};
+
 static const struct of_device_id of_match_clk_mt8173_topckgen[] = {
-	{ .compatible = "mediatek,mt8173-topckgen" },
+	{ .compatible = "mediatek,mt8173-topckgen", .data = &topck_desc },
 	{ /* sentinel */ }
 };
 
-static int clk_mt8173_topckgen_probe(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *clk_data;
-	void __iomem *base;
-	int r;
-
-	base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(base))
-		return PTR_ERR(base);
-
-	clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
-	if (IS_ERR_OR_NULL(clk_data))
-		return -ENOMEM;
-
-	r = mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
-	if (r)
-		goto free_clk_data;
-
-	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	if (r)
-		goto unregister_fixed_clks;
-
-	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-					&mt8173_top_clk_lock, clk_data, &pdev->dev);
-	if (r)
-		goto unregister_factors;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_composites;
-
-	return 0;
-
-unregister_composites:
-	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
-unregister_factors:
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-unregister_fixed_clks:
-	mtk_clk_unregister_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
-free_clk_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
-
-static int clk_mt8173_topckgen_remove(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
-	struct device_node *node = pdev->dev.of_node;
-
-	of_clk_del_provider(node);
-	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	mtk_clk_unregister_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
- 	mtk_free_clk_data(clk_data);
-
-	return 0;
-}
-
 static struct platform_driver clk_mt8173_topckgen_drv = {
 	.driver = {
 		.name = "clk-mt8173-topckgen",
 		.of_match_table = of_match_clk_mt8173_topckgen,
 	},
-	.probe = clk_mt8173_topckgen_probe,
-	.remove = clk_mt8173_topckgen_remove,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 };
 module_platform_driver(clk_mt8173_topckgen_drv);
 
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:46 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:46 +0100
Subject: [PATCH v1 14/25] clk: mediatek: clk-mtk: Extend mtk_clk_simple_probe()
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-15-angelogioacchino.delregno@collabora.com>

As a preparation to increase probe functions commonization across
various MediaTek SoC clock controller drivers, extend function
mtk_clk_simple_probe() to be able to register not only gates, but
also fixed clocks, factors, muxes and composites.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mtk.c | 101 ++++++++++++++++++++++++++++++---
 drivers/clk/mediatek/clk-mtk.h |  10 ++++
 2 files changed, 103 insertions(+), 8 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index d05364e17e95..b0a6225cd7b2 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -11,12 +11,14 @@
 #include <linux/mfd/syscon.h>
 #include <linux/module.h>
 #include <linux/of.h>
+#include <linux/of_address.h>
 #include <linux/of_device.h>
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 
 #include "clk-mtk.h"
 #include "clk-gate.h"
+#include "clk-mux.h"
 
 const struct mtk_gate_regs cg_regs_dummy = { 0, 0, 0 };
 
@@ -465,20 +467,71 @@ int mtk_clk_simple_probe(struct platform_device *pdev)
 	const struct mtk_clk_desc *mcd;
 	struct clk_hw_onecell_data *clk_data;
 	struct device_node *node = pdev->dev.of_node;
-	int r;
+	void __iomem *base;
+	int num_clks, r;
 
 	mcd = of_device_get_match_data(&pdev->dev);
 	if (!mcd)
 		return -EINVAL;
 
-	clk_data = mtk_alloc_clk_data(mcd->num_clks);
+	/* Composite clocks needs us to pass iomem pointer */
+	if (mcd->composite_clks) {
+		if (!mcd->shared_io)
+			base = devm_platform_ioremap_resource(pdev, 0);
+		else
+			base = of_iomap(node, 0);
+
+		if (IS_ERR_OR_NULL(base))
+			return IS_ERR(base) ? PTR_ERR(base) : -ENOMEM;
+	}
+
+	/* Calculate how many clk_hw_onecell_data entries to allocate */
+	num_clks = mcd->num_clks + mcd->num_composite_clks;
+	num_clks += mcd->num_fixed_clks + mcd->num_factor_clks;
+	num_clks += mcd->num_mux_clks;
+
+	clk_data = mtk_alloc_clk_data(num_clks);
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, mcd->clks, mcd->num_clks,
-				   clk_data, &pdev->dev);
-	if (r)
-		goto free_data;
+	if (mcd->fixed_clks) {
+		r = mtk_clk_register_fixed_clks(mcd->fixed_clks,
+						mcd->num_fixed_clks, clk_data);
+		if (r)
+			goto free_data;
+	}
+
+	if (mcd->factor_clks) {
+		r = mtk_clk_register_factors(mcd->factor_clks,
+					     mcd->num_factor_clks, clk_data);
+		if (r)
+			goto unregister_fixed_clks;
+	}
+
+	if (mcd->mux_clks) {
+		r = mtk_clk_register_muxes(mcd->mux_clks, mcd->num_mux_clks,
+					   node, mcd->clk_lock, clk_data,
+					   &pdev->dev);
+		if (r)
+			goto unregister_factors;
+	};
+
+	if (mcd->composite_clks) {
+		/* We don't check composite_lock because it's optional */
+		r = mtk_clk_register_composites(mcd->composite_clks,
+						mcd->num_composite_clks,
+						base, mcd->clk_lock,
+						clk_data, &pdev->dev);
+		if (r)
+			goto unregister_muxes;
+	}
+
+	if (mcd->clks) {
+		r = mtk_clk_register_gates(node, mcd->clks, mcd->num_clks,
+					   clk_data, &pdev->dev);
+		if (r)
+			goto unregister_composites;
+	}
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -496,9 +549,28 @@ int mtk_clk_simple_probe(struct platform_device *pdev)
 	return r;
 
 unregister_clks:
-	mtk_clk_unregister_gates(mcd->clks, mcd->num_clks, clk_data);
+	if (mcd->clks)
+		mtk_clk_unregister_gates(mcd->clks, mcd->num_clks, clk_data);
+unregister_composites:
+	if (mcd->composite_clks)
+		mtk_clk_unregister_composites(mcd->composite_clks,
+					      mcd->num_composite_clks, clk_data);
+unregister_muxes:
+	if (mcd->mux_clks)
+		mtk_clk_unregister_muxes(mcd->mux_clks,
+					 mcd->num_mux_clks, clk_data);
+unregister_factors:
+	if (mcd->factor_clks)
+		mtk_clk_unregister_factors(mcd->factor_clks,
+					   mcd->num_factor_clks, clk_data);
+unregister_fixed_clks:
+	if (mcd->fixed_clks)
+		mtk_clk_unregister_fixed_clks(mcd->fixed_clks,
+					      mcd->num_fixed_clks, clk_data);
 free_data:
 	mtk_free_clk_data(clk_data);
+	if (mcd->shared_io && base)
+		iounmap(base);
 	return r;
 }
 EXPORT_SYMBOL_GPL(mtk_clk_simple_probe);
@@ -510,7 +582,20 @@ int mtk_clk_simple_remove(struct platform_device *pdev)
 	struct device_node *node = pdev->dev.of_node;
 
 	of_clk_del_provider(node);
-	mtk_clk_unregister_gates(mcd->clks, mcd->num_clks, clk_data);
+	if (mcd->clks)
+		mtk_clk_unregister_gates(mcd->clks, mcd->num_clks, clk_data);
+	if (mcd->composite_clks)
+		mtk_clk_unregister_composites(mcd->composite_clks,
+					      mcd->num_composite_clks, clk_data);
+	if (mcd->mux_clks)
+		mtk_clk_unregister_muxes(mcd->mux_clks,
+					 mcd->num_mux_clks, clk_data);
+	if (mcd->factor_clks)
+		mtk_clk_unregister_factors(mcd->factor_clks,
+					   mcd->num_factor_clks, clk_data);
+	if (mcd->fixed_clks)
+		mtk_clk_unregister_fixed_clks(mcd->fixed_clks,
+					      mcd->num_fixed_clks, clk_data);
 	mtk_free_clk_data(clk_data);
 
 	return 0;
diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
index b72e88c0179f..f49aea3fb4bd 100644
--- a/drivers/clk/mediatek/clk-mtk.h
+++ b/drivers/clk/mediatek/clk-mtk.h
@@ -218,7 +218,17 @@ void mtk_clk_unregister_ref2usb_tx(struct clk_hw *hw);
 struct mtk_clk_desc {
 	const struct mtk_gate *clks;
 	size_t num_clks;
+	const struct mtk_composite *composite_clks;
+	size_t num_composite_clks;
+	const struct mtk_fixed_clk *fixed_clks;
+	size_t num_fixed_clks;
+	const struct mtk_fixed_factor *factor_clks;
+	size_t num_factor_clks;
+	const struct mtk_mux *mux_clks;
+	size_t num_mux_clks;
 	const struct mtk_clk_rst_desc *rst_desc;
+	spinlock_t *clk_lock;
+	bool shared_io;
 };
 
 int mtk_clk_simple_probe(struct platform_device *pdev);
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:48 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:48 +0100
Subject: [PATCH v1 16/25] clk: mediatek: clk-mt8192: Move CLK_TOP_CSW_F26M_D2 in top_divs
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-17-angelogioacchino.delregno@collabora.com>

This driver is registered early in clk_mt8192_top_init_early() and
then again in clk_mt8192_top_probe(): the difference between the
two is that the early one is probed with CLK_OF_DECLARE_DRIVER and
the latter is regularly probed as a platform_driver.

Knowing that it is not necessary for this platform to register the
TOP_CSW_F26M_D2 clock that early, move it to top_divs and register
it with the others during platform_driver probe for topckgen;

While at it, since the only reason why the early probe existed was
to register that clock, remove that entirely - leaving this driver
to use only platform_driver.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8192.c | 39 ++++++-------------------------
 1 file changed, 7 insertions(+), 32 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index 9a9d51bfb84d..ec9dc7fe848e 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -26,10 +26,6 @@ static const struct mtk_fixed_clk top_fixed_clks[] = {
 	FIXED_CLK(CLK_TOP_ULPOSC, "ulposc", NULL, 260000000),
 };
 
-static const struct mtk_fixed_factor top_early_divs[] = {
-	FACTOR(CLK_TOP_CSW_F26M_D2, "csw_f26m_d2", "clk26m", 1, 2),
-};
-
 static const struct mtk_fixed_factor top_divs[] = {
 	FACTOR_FLAGS(CLK_TOP_MAINPLL_D3, "mainpll_d3", "mainpll", 1, 3, 0),
 	FACTOR_FLAGS(CLK_TOP_MAINPLL_D4, "mainpll_d4", "mainpll", 1, 4, 0),
@@ -95,6 +91,7 @@ static const struct mtk_fixed_factor top_divs[] = {
 	FACTOR(CLK_TOP_OSC_D10, "osc_d10", "ulposc", 1, 10),
 	FACTOR(CLK_TOP_OSC_D16, "osc_d16", "ulposc", 1, 16),
 	FACTOR(CLK_TOP_OSC_D20, "osc_d20", "ulposc", 1, 20),
+	FACTOR(CLK_TOP_CSW_F26M_D2, "csw_f26m_d2", "clk26m", 1, 2),
 	FACTOR(CLK_TOP_ADSPPLL, "adsppll_ck", "adsppll", 1, 1),
 	FACTOR_FLAGS(CLK_TOP_UNIVPLL_192M, "univpll_192m", "univpll", 1, 13, 0),
 	FACTOR_FLAGS(CLK_TOP_UNIVPLL_192M_D2, "univpll_192m_d2", "univpll_192m", 1, 2, 0),
@@ -1047,27 +1044,6 @@ static const struct mtk_pll_data plls[] = {
 	      0, 0, 32, 0x0330, 24, 0, 0, 0, 0x0334, 0),
 };
 
-static struct clk_hw_onecell_data *top_clk_data;
-
-static void clk_mt8192_top_init_early(struct device_node *node)
-{
-	int i;
-
-	top_clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
-	if (!top_clk_data)
-		return;
-
-	for (i = 0; i < CLK_TOP_NR_CLK; i++)
-		top_clk_data->hws[i] = ERR_PTR(-EPROBE_DEFER);
-
-	mtk_clk_register_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data);
-
-	of_clk_add_hw_provider(node, of_clk_hw_onecell_get, top_clk_data);
-}
-
-CLK_OF_DECLARE_DRIVER(mt8192_topckgen, "mediatek,mt8192-topckgen",
-		      clk_mt8192_top_init_early);
-
 /* Register mux notifier for MFG mux */
 static int clk_mt8192_reg_mfg_mux_notifier(struct device *dev, struct clk *clk)
 {
@@ -1093,6 +1069,7 @@ static int clk_mt8192_reg_mfg_mux_notifier(struct device *dev, struct clk *clk)
 static int clk_mt8192_top_probe(struct platform_device *pdev)
 {
 	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw_onecell_data *top_clk_data;
 	int r;
 	void __iomem *base;
 
@@ -1100,17 +1077,17 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	if (IS_ERR(base))
 		return PTR_ERR(base);
 
+	top_clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
+	if (!top_clk_data)
+		return;
+
 	r = mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data);
 	if (r)
 		return r;
 
-	r = mtk_clk_register_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data);
-	if (r)
-		goto unregister_fixed_clks;
-
 	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
 	if (r)
-		goto unregister_early_factors;
+		goto unregister_fixed_clks;
 
 	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
 				   &mt8192_clk_lock, top_clk_data, &pdev->dev);
@@ -1150,8 +1127,6 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), top_clk_data);
 unregister_factors:
 	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
-unregister_early_factors:
-	mtk_clk_unregister_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data);
 unregister_fixed_clks:
 	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks),
 				      top_clk_data);
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:51 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:51 +0100
Subject: [PATCH v1 19/25] clk: mediatek: clk-mt8183: Join top_aud_muxes and top_aud_divs
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-20-angelogioacchino.delregno@collabora.com>

Join the two to register them in one shot.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8183.c | 34 +++++++++++++------------------
 1 file changed, 14 insertions(+), 20 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8183.c b/drivers/clk/mediatek/clk-mt8183.c
index f1d84c0730d5..be2a53b3a881 100644
--- a/drivers/clk/mediatek/clk-mt8183.c
+++ b/drivers/clk/mediatek/clk-mt8183.c
@@ -613,21 +613,6 @@ static const char * const apll_i2s5_parents[] = {
 	"aud_2_sel"
 };
 
-static struct mtk_composite top_aud_muxes[] = {
-	MUX(CLK_TOP_MUX_APLL_I2S0, "apll_i2s0_sel", apll_i2s0_parents,
-		0x320, 8, 1),
-	MUX(CLK_TOP_MUX_APLL_I2S1, "apll_i2s1_sel", apll_i2s1_parents,
-		0x320, 9, 1),
-	MUX(CLK_TOP_MUX_APLL_I2S2, "apll_i2s2_sel", apll_i2s2_parents,
-		0x320, 10, 1),
-	MUX(CLK_TOP_MUX_APLL_I2S3, "apll_i2s3_sel", apll_i2s3_parents,
-		0x320, 11, 1),
-	MUX(CLK_TOP_MUX_APLL_I2S4, "apll_i2s4_sel", apll_i2s4_parents,
-		0x320, 12, 1),
-	MUX(CLK_TOP_MUX_APLL_I2S5, "apll_i2s5_sel", apll_i2s5_parents,
-		0x328, 20, 1),
-};
-
 static const char * const mcu_mp0_parents[] = {
 	"clk26m",
 	"armpll_ll",
@@ -658,7 +643,19 @@ static struct mtk_composite mcu_muxes[] = {
 	MUX(CLK_MCU_BUS_SEL, "mcu_bus_sel", mcu_bus_parents, 0x7C0, 9, 2),
 };
 
-static struct mtk_composite top_aud_divs[] = {
+static struct mtk_composite top_aud_comp[] = {
+	MUX(CLK_TOP_MUX_APLL_I2S0, "apll_i2s0_sel", apll_i2s0_parents,
+		0x320, 8, 1),
+	MUX(CLK_TOP_MUX_APLL_I2S1, "apll_i2s1_sel", apll_i2s1_parents,
+		0x320, 9, 1),
+	MUX(CLK_TOP_MUX_APLL_I2S2, "apll_i2s2_sel", apll_i2s2_parents,
+		0x320, 10, 1),
+	MUX(CLK_TOP_MUX_APLL_I2S3, "apll_i2s3_sel", apll_i2s3_parents,
+		0x320, 11, 1),
+	MUX(CLK_TOP_MUX_APLL_I2S4, "apll_i2s4_sel", apll_i2s4_parents,
+		0x320, 12, 1),
+	MUX(CLK_TOP_MUX_APLL_I2S5, "apll_i2s5_sel", apll_i2s5_parents,
+		0x328, 20, 1),
 	DIV_GATE(CLK_TOP_APLL12_DIV0, "apll12_div0", "apll_i2s0_sel",
 		0x320, 2, 0x324, 8, 0),
 	DIV_GATE(CLK_TOP_APLL12_DIV1, "apll12_div1", "apll_i2s1_sel",
@@ -1169,10 +1166,7 @@ static int clk_mt8183_top_probe(struct platform_device *pdev)
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes),
 		node, &mt8183_clk_lock, top_clk_data, &pdev->dev);
 
-	mtk_clk_register_composites(top_aud_muxes, ARRAY_SIZE(top_aud_muxes),
-		base, &mt8183_clk_lock, top_clk_data, &pdev->dev);
-
-	mtk_clk_register_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs),
+	mtk_clk_register_composites(top_aud_comp, ARRAY_SIZE(top_aud_comp),
 		base, &mt8183_clk_lock, top_clk_data, &pdev->dev);
 
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:43 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:43 +0100
Subject: [PATCH v1 11/25] clk: mediatek: mt8173: Break down clock drivers and allow module build
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-12-angelogioacchino.delregno@collabora.com>

Split the giant clock driver for MT8173 into smaller drivers and
make it possible to build the non boot critical clock controller
drivers as modules by adding remove functions.

Some spare code style cleanups were also performed.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/Kconfig                  |  30 +-
 drivers/clk/mediatek/Makefile                 |   6 +-
 drivers/clk/mediatek/clk-mt8173-apmixedsys.c  | 157 ++++
 drivers/clk/mediatek/clk-mt8173-img.c         |  55 ++
 drivers/clk/mediatek/clk-mt8173-infracfg.c    | 154 ++++
 drivers/clk/mediatek/clk-mt8173-pericfg.c     | 171 ++++
 .../{clk-mt8173.c => clk-mt8173-topckgen.c}   | 813 ++++--------------
 drivers/clk/mediatek/clk-mt8173-vdecsys.c     |  57 ++
 drivers/clk/mediatek/clk-mt8173-vencsys.c     |  64 ++
 9 files changed, 854 insertions(+), 653 deletions(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8173-apmixedsys.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-img.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-infracfg.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-pericfg.c
 rename drivers/clk/mediatek/{clk-mt8173.c => clk-mt8173-topckgen.c} (50%)
 create mode 100644 drivers/clk/mediatek/clk-mt8173-vdecsys.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-vencsys.c

diff --git a/drivers/clk/mediatek/Kconfig b/drivers/clk/mediatek/Kconfig
index c504ebca21ee..b11646a9bf6e 100644
--- a/drivers/clk/mediatek/Kconfig
+++ b/drivers/clk/mediatek/Kconfig
@@ -457,19 +457,41 @@ config COMMON_CLK_MT8167_VDECSYS
 	  This driver supports MediaTek MT8167 vdecsys clocks.
 
 config COMMON_CLK_MT8173
-	bool "Clock driver for MediaTek MT8173"
+	tristate "Clock driver for MediaTek MT8173"
 	depends on ARCH_MEDIATEK || COMPILE_TEST
 	select COMMON_CLK_MEDIATEK
 	default ARCH_MEDIATEK
 	help
-	  This driver supports MediaTek MT8173 clocks.
+	  This driver supports MediaTek MT8173 basic clocks and clocks
+	  required for various peripherals found on MediaTek.
+
+config COMMON_CLK_MT8173_IMGSYS
+	tristate "Clock driver for MediaTek MT8173 imgsys"
+	depends on COMMON_CLK_MT8173
+	default COMMON_CLK_MT8173
+	help
+	  This driver supports MediaTek MT8173 imgsys clocks.
 
 config COMMON_CLK_MT8173_MMSYS
-	bool "Clock driver for MediaTek MT8173 mmsys"
+       tristate "Clock driver for MediaTek MT8173 mmsys"
+       depends on COMMON_CLK_MT8173
+	default COMMON_CLK_MT8173
+       help
+         This driver supports MediaTek MT8173 mmsys clocks.
+
+config COMMON_CLK_MT8173_VDECSYS
+	tristate "Clock driver for MediaTek MT8173 VDECSYS"
+	depends on COMMON_CLK_MT8173
+	default COMMON_CLK_MT8173
+	help
+	  This driver supports MediaTek MT8173 vdecsys clocks.
+
+config COMMON_CLK_MT8173_VENCSYS
+	tristate "Clock driver for MediaTek MT8173 VENCSYS"
 	depends on COMMON_CLK_MT8173
 	default COMMON_CLK_MT8173
 	help
-	  This driver supports MediaTek MT8173 mmsys clocks.
+	  This driver supports MediaTek MT8173 vencsys clocks.
 
 config COMMON_CLK_MT8183
 	bool "Clock driver for MediaTek MT8183"
diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index e24080fd6e7f..a5c216c94831 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -64,8 +64,12 @@ obj-$(CONFIG_COMMON_CLK_MT8167_IMGSYS) += clk-mt8167-img.o
 obj-$(CONFIG_COMMON_CLK_MT8167_MFGCFG) += clk-mt8167-mfgcfg.o
 obj-$(CONFIG_COMMON_CLK_MT8167_MMSYS) += clk-mt8167-mm.o
 obj-$(CONFIG_COMMON_CLK_MT8167_VDECSYS) += clk-mt8167-vdec.o
-obj-$(CONFIG_COMMON_CLK_MT8173) += clk-mt8173.o
+obj-$(CONFIG_COMMON_CLK_MT8173) += clk-mt8173-apmixedsys.o clk-mt8173-infracfg.o \
+				   clk-mt8173-pericfg.o clk-mt8173-topckgen.o
+obj-$(CONFIG_COMMON_CLK_MT8173_IMGSYS) += clk-mt8173-img.o
 obj-$(CONFIG_COMMON_CLK_MT8173_MMSYS) += clk-mt8173-mm.o
+obj-$(CONFIG_COMMON_CLK_MT8173_VDECSYS) += clk-mt8173-vdecsys.o
+obj-$(CONFIG_COMMON_CLK_MT8173_VENCSYS) += clk-mt8173-vencsys.o
 obj-$(CONFIG_COMMON_CLK_MT8183) += clk-mt8183.o
 obj-$(CONFIG_COMMON_CLK_MT8183_AUDIOSYS) += clk-mt8183-audio.o
 obj-$(CONFIG_COMMON_CLK_MT8183_CAMSYS) += clk-mt8183-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8173-apmixedsys.c b/drivers/clk/mediatek/clk-mt8173-apmixedsys.c
new file mode 100644
index 000000000000..a56c5845d07a
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8173-apmixedsys.c
@@ -0,0 +1,157 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2014 MediaTek Inc.
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
+ */
+
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/of_address.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include "clk-mtk.h"
+#include "clk-pll.h"
+
+#define REGOFF_REF2USB		0x8
+#define REGOFF_HDMI_REF		0x40
+
+#define MT8173_PLL_FMAX		(3000UL * MHZ)
+
+#define CON0_MT8173_RST_BAR	BIT(24)
+
+#define PLL_B(_id, _name, _reg, _pwr_reg, _en_mask, _flags, _pcwbits,	\
+			_pd_reg, _pd_shift, _tuner_reg, _pcw_reg,	\
+			_pcw_shift, _div_table) {			\
+		.id = _id,						\
+		.name = _name,						\
+		.reg = _reg,						\
+		.pwr_reg = _pwr_reg,					\
+		.en_mask = _en_mask,					\
+		.flags = _flags,					\
+		.rst_bar_mask = CON0_MT8173_RST_BAR,			\
+		.fmax = MT8173_PLL_FMAX,				\
+		.pcwbits = _pcwbits,					\
+		.pd_reg = _pd_reg,					\
+		.pd_shift = _pd_shift,					\
+		.tuner_reg = _tuner_reg,				\
+		.pcw_reg = _pcw_reg,					\
+		.pcw_shift = _pcw_shift,				\
+		.div_table = _div_table,				\
+	}
+
+#define PLL(_id, _name, _reg, _pwr_reg, _en_mask, _flags, _pcwbits,	\
+			_pd_reg, _pd_shift, _tuner_reg, _pcw_reg,	\
+			_pcw_shift)					\
+		PLL_B(_id, _name, _reg, _pwr_reg, _en_mask, _flags, _pcwbits, \
+			_pd_reg, _pd_shift, _tuner_reg, _pcw_reg, _pcw_shift, \
+			NULL)
+
+static const struct mtk_pll_div_table mmpll_div_table[] = {
+	{ .div = 0, .freq = MT8173_PLL_FMAX },
+	{ .div = 1, .freq = 1000000000 },
+	{ .div = 2, .freq = 702000000 },
+	{ .div = 3, .freq = 253500000 },
+	{ .div = 4, .freq = 126750000 },
+	{ } /* sentinel */
+};
+
+static const struct mtk_pll_data plls[] = {
+	PLL(CLK_APMIXED_ARMCA15PLL, "armca15pll", 0x200, 0x20c, 0, PLL_AO,
+	    21, 0x204, 24, 0x0, 0x204, 0),
+	PLL(CLK_APMIXED_ARMCA7PLL, "armca7pll", 0x210, 0x21c, 0, PLL_AO,
+	    21, 0x214, 24, 0x0, 0x214, 0),
+	PLL(CLK_APMIXED_MAINPLL, "mainpll", 0x220, 0x22c, 0xf0000100, HAVE_RST_BAR, 21,
+	    0x220, 4, 0x0, 0x224, 0),
+	PLL(CLK_APMIXED_UNIVPLL, "univpll", 0x230, 0x23c, 0xfe000000, HAVE_RST_BAR, 7,
+	    0x230, 4, 0x0, 0x234, 14),
+	PLL_B(CLK_APMIXED_MMPLL, "mmpll", 0x240, 0x24c, 0, 0, 21, 0x244, 24, 0x0,
+	      0x244, 0, mmpll_div_table),
+	PLL(CLK_APMIXED_MSDCPLL, "msdcpll", 0x250, 0x25c, 0, 0, 21, 0x250, 4, 0x0, 0x254, 0),
+	PLL(CLK_APMIXED_VENCPLL, "vencpll", 0x260, 0x26c, 0, 0, 21, 0x260, 4, 0x0, 0x264, 0),
+	PLL(CLK_APMIXED_TVDPLL, "tvdpll", 0x270, 0x27c, 0, 0, 21, 0x270, 4, 0x0, 0x274, 0),
+	PLL(CLK_APMIXED_MPLL, "mpll", 0x280, 0x28c, 0, 0, 21, 0x280, 4, 0x0, 0x284, 0),
+	PLL(CLK_APMIXED_VCODECPLL, "vcodecpll", 0x290, 0x29c, 0, 0, 21, 0x290, 4, 0x0, 0x294, 0),
+	PLL(CLK_APMIXED_APLL1, "apll1", 0x2a0, 0x2b0, 0, 0, 31, 0x2a0, 4, 0x2a4, 0x2a4, 0),
+	PLL(CLK_APMIXED_APLL2, "apll2", 0x2b4, 0x2c4, 0, 0, 31, 0x2b4, 4, 0x2b8, 0x2b8, 0),
+	PLL(CLK_APMIXED_LVDSPLL, "lvdspll", 0x2d0, 0x2dc, 0, 0, 21, 0x2d0, 4, 0x0, 0x2d4, 0),
+	PLL(CLK_APMIXED_MSDCPLL2, "msdcpll2", 0x2f0, 0x2fc, 0, 0, 21, 0x2f0, 4, 0x0, 0x2f4, 0),
+};
+
+static const struct of_device_id of_match_clk_mt8173_apmixed[] = {
+	{ .compatible = "mediatek,mt8173-apmixedsys" },
+	{ /* sentinel */ }
+};
+
+static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw_onecell_data *clk_data;
+	void __iomem *base;
+	struct clk_hw *hw;
+	int r;
+
+	base = of_iomap(node, 0);
+	if (!base)
+		return PTR_ERR(base);
+
+	clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
+	if (IS_ERR_OR_NULL(clk_data))
+		return -ENOMEM;
+
+	r = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
+	if (r)
+		goto free_clk_data;
+
+	hw = mtk_clk_register_ref2usb_tx("ref2usb_tx", "clk26m", base + REGOFF_REF2USB);
+	if (IS_ERR(hw)) {
+		r = PTR_ERR(hw);
+		dev_err(&pdev->dev, "Failed to register ref2usb_tx: %d\n", r);
+		goto unregister_plls;
+	}
+	clk_data->hws[CLK_APMIXED_REF2USB_TX] = hw;
+
+	hw = devm_clk_hw_register_divider(&pdev->dev, "hdmi_ref", "tvdpll_594m", 0,
+					  base + REGOFF_HDMI_REF, 16, 3,
+					  CLK_DIVIDER_POWER_OF_TWO, NULL);
+	clk_data->hws[CLK_APMIXED_HDMI_REF] = hw;
+
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	if (r)
+		goto unregister_ref2usb;
+
+	return 0;
+
+unregister_ref2usb:
+	mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
+unregister_plls:
+	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+free_clk_data:
+	mtk_free_clk_data(clk_data);
+	return r;
+}
+
+static int clk_mt8173_apmixed_remove(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
+
+	of_clk_del_provider(node);
+	mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
+	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+	mtk_free_clk_data(clk_data);
+
+	return 0;
+}
+
+static struct platform_driver clk_mt8173_apmixed_drv = {
+	.probe = clk_mt8173_apmixed_probe,
+	.remove = clk_mt8173_apmixed_remove,
+	.driver = {
+		.name = "clk-mt8173-apmixed",
+		.of_match_table = of_match_clk_mt8173_apmixed,
+	},
+};
+module_platform_driver(clk_mt8173_apmixed_drv);
+
+MODULE_DESCRIPTION("MediaTek MT8173 apmixed clocks driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/clk/mediatek/clk-mt8173-img.c b/drivers/clk/mediatek/clk-mt8173-img.c
new file mode 100644
index 000000000000..7b50ffb7a8a5
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8173-img.c
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2014 MediaTek Inc.
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
+ */
+
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs img_cg_regs = {
+	.set_ofs = 0x0004,
+	.clr_ofs = 0x0008,
+	.sta_ofs = 0x0000,
+};
+
+#define GATE_IMG(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &img_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+static const struct mtk_gate img_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "img_dummy"),
+	GATE_IMG(CLK_IMG_LARB2_SMI, "img_larb2_smi", "mm_sel", 0),
+	GATE_IMG(CLK_IMG_CAM_SMI, "img_cam_smi", "mm_sel", 5),
+	GATE_IMG(CLK_IMG_CAM_CAM, "img_cam_cam", "mm_sel", 6),
+	GATE_IMG(CLK_IMG_SEN_TG, "img_sen_tg", "camtg_sel", 7),
+	GATE_IMG(CLK_IMG_SEN_CAM, "img_sen_cam", "mm_sel", 8),
+	GATE_IMG(CLK_IMG_CAM_SV, "img_cam_sv", "mm_sel", 9),
+	GATE_IMG(CLK_IMG_FD, "img_fd", "mm_sel", 11),
+};
+
+static const struct mtk_clk_desc img_desc = {
+	.clks = img_clks,
+	.num_clks = ARRAY_SIZE(img_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8173_imgsys[] = {
+	{ .compatible = "mediatek,mt8173-imgsys", .data = &img_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8173_vdecsys_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8173-imgsys",
+		.of_match_table = of_match_clk_mt8173_imgsys,
+	},
+};
+module_platform_driver(clk_mt8173_vdecsys_drv);
+
+MODULE_DESCRIPTION("MediaTek MT8173 vdecsys clocks driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/clk/mediatek/clk-mt8173-infracfg.c b/drivers/clk/mediatek/clk-mt8173-infracfg.c
new file mode 100644
index 000000000000..ee4b992c89c6
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8173-infracfg.c
@@ -0,0 +1,154 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2014 MediaTek Inc.
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
+ */
+
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include "clk-cpumux.h"
+#include "clk-gate.h"
+#include "clk-mtk.h"
+#include "reset.h"
+
+#define GATE_ICG(_id, _name, _parent, _shift)			\
+		GATE_MTK(_id, _name, _parent, &infra_cg_regs,	\
+			 _shift, &mtk_clk_gate_ops_setclr)
+
+static struct clk_hw_onecell_data *infra_clk_data;
+
+static const struct mtk_gate_regs infra_cg_regs = {
+	.set_ofs = 0x0040,
+	.clr_ofs = 0x0044,
+	.sta_ofs = 0x0048,
+};
+
+static const char * const ca53_parents[] __initconst = {
+	"clk26m",
+	"armca7pll",
+	"mainpll",
+	"univpll"
+};
+
+static const char * const ca72_parents[] __initconst = {
+	"clk26m",
+	"armca15pll",
+	"mainpll",
+	"univpll"
+};
+
+static const struct mtk_composite cpu_muxes[] = {
+	MUX(CLK_INFRA_CA53SEL, "infra_ca53_sel", ca53_parents, 0x0000, 0, 2),
+	MUX(CLK_INFRA_CA72SEL, "infra_ca72_sel", ca72_parents, 0x0000, 2, 2),
+};
+
+static const struct mtk_fixed_factor infra_early_divs[] = {
+	FACTOR(CLK_INFRA_CLK_13M, "clk13m", "clk26m", 1, 2),
+};
+
+static const struct mtk_gate infra_gates[] = {
+	GATE_ICG(CLK_INFRA_DBGCLK, "infra_dbgclk", "axi_sel", 0),
+	GATE_ICG(CLK_INFRA_SMI, "infra_smi", "mm_sel", 1),
+	GATE_ICG(CLK_INFRA_AUDIO, "infra_audio", "aud_intbus_sel", 5),
+	GATE_ICG(CLK_INFRA_GCE, "infra_gce", "axi_sel", 6),
+	GATE_ICG(CLK_INFRA_L2C_SRAM, "infra_l2c_sram", "axi_sel", 7),
+	GATE_ICG(CLK_INFRA_M4U, "infra_m4u", "mem_sel", 8),
+	GATE_ICG(CLK_INFRA_CPUM, "infra_cpum", "cpum_ck", 15),
+	GATE_ICG(CLK_INFRA_KP, "infra_kp", "axi_sel", 16),
+	GATE_ICG(CLK_INFRA_CEC, "infra_cec", "clk26m", 18),
+	GATE_ICG(CLK_INFRA_PMICSPI, "infra_pmicspi", "pmicspi_sel", 22),
+	GATE_ICG(CLK_INFRA_PMICWRAP, "infra_pmicwrap", "axi_sel", 23),
+};
+
+static u16 infrasys_rst_ofs[] = { 0x30, 0x34 };
+
+static const struct mtk_clk_rst_desc clk_rst_desc = {
+	.version = MTK_RST_SIMPLE,
+	.rst_bank_ofs = infrasys_rst_ofs,
+	.rst_bank_nr = ARRAY_SIZE(infrasys_rst_ofs),
+};
+
+static const struct of_device_id of_match_clk_mt8173_infracfg[] = {
+	{ .compatible = "mediatek,mt8173-infracfg" },
+	{ /* sentinel */ }
+};
+
+static void clk_mt8173_infra_init_early(struct device_node *node)
+{
+	int i;
+
+	infra_clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
+	if (!infra_clk_data)
+		return;
+
+	for (i = 0; i < CLK_INFRA_NR_CLK; i++)
+		infra_clk_data->hws[i] = ERR_PTR(-EPROBE_DEFER);
+
+	mtk_clk_register_factors(infra_early_divs, ARRAY_SIZE(infra_early_divs), infra_clk_data);
+
+	of_clk_add_hw_provider(node, of_clk_hw_onecell_get, infra_clk_data);
+}
+CLK_OF_DECLARE_DRIVER(mtk_infrasys, "mediatek,mt8173-infracfg",
+		      clk_mt8173_infra_init_early);
+
+static int clk_mt8173_infracfg_probe(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
+	int r;
+
+	r = mtk_clk_register_gates(node, infra_gates, ARRAY_SIZE(infra_gates),
+				   infra_clk_data, &pdev->dev);
+	if (r)
+		return r;
+
+	r = mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
+				      infra_clk_data, &pdev->dev);
+	if (r)
+		goto unregister_gates;
+
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, infra_clk_data);
+	if (r)
+		goto unregister_cpumuxes;
+
+	r = mtk_register_reset_controller(node, &clk_rst_desc);
+	if (r)
+		goto unregister_clk_hw;
+
+	return 0;
+
+unregister_clk_hw:
+	of_clk_del_provider(node);
+unregister_cpumuxes:
+	mtk_clk_unregister_cpumuxes(cpu_muxes, ARRAY_SIZE(cpu_muxes), infra_clk_data);
+unregister_gates:
+	mtk_clk_unregister_gates(infra_gates, ARRAY_SIZE(infra_gates), infra_clk_data);
+	return r;
+}
+
+static int clk_mt8173_infracfg_remove(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
+
+	of_clk_del_provider(node);
+	mtk_clk_unregister_cpumuxes(cpu_muxes, ARRAY_SIZE(cpu_muxes), clk_data);
+	mtk_clk_unregister_gates(infra_gates, ARRAY_SIZE(infra_gates), clk_data);
+	mtk_free_clk_data(clk_data);
+
+	return 0;
+}
+
+static struct platform_driver clk_mt8173_infracfg_drv = {
+	.driver = {
+		.name = "clk-mt8173-infracfg",
+		.of_match_table = of_match_clk_mt8173_infracfg,
+	},
+	.probe = clk_mt8173_infracfg_probe,
+	.remove = clk_mt8173_infracfg_remove,
+};
+module_platform_driver(clk_mt8173_infracfg_drv);
+
+MODULE_DESCRIPTION("MediaTek MT8173 infracfg clocks driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/clk/mediatek/clk-mt8173-pericfg.c b/drivers/clk/mediatek/clk-mt8173-pericfg.c
new file mode 100644
index 000000000000..30c0fa263cc0
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8173-pericfg.c
@@ -0,0 +1,171 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
+ */
+
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include "clk-gate.h"
+#include "clk-mtk.h"
+#include "reset.h"
+
+#define GATE_PERI0(_id, _name, _parent, _shift)			\
+		GATE_MTK(_id, _name, _parent, &peri0_cg_regs,	\
+			 _shift, &mtk_clk_gate_ops_setclr)
+
+#define GATE_PERI1(_id, _name, _parent, _shift)			\
+		GATE_MTK(_id, _name, _parent, &peri1_cg_regs,	\
+			 _shift, &mtk_clk_gate_ops_setclr)
+
+static DEFINE_SPINLOCK(mt8173_clk_lock);
+
+static const struct mtk_gate_regs peri0_cg_regs = {
+	.set_ofs = 0x0008,
+	.clr_ofs = 0x0010,
+	.sta_ofs = 0x0018,
+};
+
+static const struct mtk_gate_regs peri1_cg_regs = {
+	.set_ofs = 0x000c,
+	.clr_ofs = 0x0014,
+	.sta_ofs = 0x001c,
+};
+
+static const char * const uart_ck_sel_parents[] = {
+	"clk26m",
+	"uart_sel",
+};
+
+static const struct mtk_composite peri_clks[] = {
+	MUX(CLK_PERI_UART0_SEL, "uart0_ck_sel", uart_ck_sel_parents, 0x40c, 0, 1),
+	MUX(CLK_PERI_UART1_SEL, "uart1_ck_sel", uart_ck_sel_parents, 0x40c, 1, 1),
+	MUX(CLK_PERI_UART2_SEL, "uart2_ck_sel", uart_ck_sel_parents, 0x40c, 2, 1),
+	MUX(CLK_PERI_UART3_SEL, "uart3_ck_sel", uart_ck_sel_parents, 0x40c, 3, 1),
+};
+
+static const struct mtk_gate peri_gates[] = {
+	/* PERI0 */
+	GATE_PERI0(CLK_PERI_NFI, "peri_nfi", "axi_sel", 0),
+	GATE_PERI0(CLK_PERI_THERM, "peri_therm", "axi_sel", 1),
+	GATE_PERI0(CLK_PERI_PWM1, "peri_pwm1", "axi_sel", 2),
+	GATE_PERI0(CLK_PERI_PWM2, "peri_pwm2", "axi_sel", 3),
+	GATE_PERI0(CLK_PERI_PWM3, "peri_pwm3", "axi_sel", 4),
+	GATE_PERI0(CLK_PERI_PWM4, "peri_pwm4", "axi_sel", 5),
+	GATE_PERI0(CLK_PERI_PWM5, "peri_pwm5", "axi_sel", 6),
+	GATE_PERI0(CLK_PERI_PWM6, "peri_pwm6", "axi_sel", 7),
+	GATE_PERI0(CLK_PERI_PWM7, "peri_pwm7", "axi_sel", 8),
+	GATE_PERI0(CLK_PERI_PWM, "peri_pwm", "axi_sel", 9),
+	GATE_PERI0(CLK_PERI_USB0, "peri_usb0", "usb20_sel", 10),
+	GATE_PERI0(CLK_PERI_USB1, "peri_usb1", "usb20_sel", 11),
+	GATE_PERI0(CLK_PERI_AP_DMA, "peri_ap_dma", "axi_sel", 12),
+	GATE_PERI0(CLK_PERI_MSDC30_0, "peri_msdc30_0", "msdc50_0_sel", 13),
+	GATE_PERI0(CLK_PERI_MSDC30_1, "peri_msdc30_1", "msdc30_1_sel", 14),
+	GATE_PERI0(CLK_PERI_MSDC30_2, "peri_msdc30_2", "msdc30_2_sel", 15),
+	GATE_PERI0(CLK_PERI_MSDC30_3, "peri_msdc30_3", "msdc30_3_sel", 16),
+	GATE_PERI0(CLK_PERI_NLI_ARB, "peri_nli_arb", "axi_sel", 17),
+	GATE_PERI0(CLK_PERI_IRDA, "peri_irda", "irda_sel", 18),
+	GATE_PERI0(CLK_PERI_UART0, "peri_uart0", "axi_sel", 19),
+	GATE_PERI0(CLK_PERI_UART1, "peri_uart1", "axi_sel", 20),
+	GATE_PERI0(CLK_PERI_UART2, "peri_uart2", "axi_sel", 21),
+	GATE_PERI0(CLK_PERI_UART3, "peri_uart3", "axi_sel", 22),
+	GATE_PERI0(CLK_PERI_I2C0, "peri_i2c0", "axi_sel", 23),
+	GATE_PERI0(CLK_PERI_I2C1, "peri_i2c1", "axi_sel", 24),
+	GATE_PERI0(CLK_PERI_I2C2, "peri_i2c2", "axi_sel", 25),
+	GATE_PERI0(CLK_PERI_I2C3, "peri_i2c3", "axi_sel", 26),
+	GATE_PERI0(CLK_PERI_I2C4, "peri_i2c4", "axi_sel", 27),
+	GATE_PERI0(CLK_PERI_AUXADC, "peri_auxadc", "clk26m", 28),
+	GATE_PERI0(CLK_PERI_SPI0, "peri_spi0", "spi_sel", 29),
+	GATE_PERI0(CLK_PERI_I2C5, "peri_i2c5", "axi_sel", 30),
+	GATE_PERI0(CLK_PERI_NFIECC, "peri_nfiecc", "axi_sel", 31),
+	/* PERI1 */
+	GATE_PERI1(CLK_PERI_SPI, "peri_spi", "spi_sel", 0),
+	GATE_PERI1(CLK_PERI_IRRX, "peri_irrx", "spi_sel", 1),
+	GATE_PERI1(CLK_PERI_I2C6, "peri_i2c6", "axi_sel", 2),
+};
+
+static u16 pericfg_rst_ofs[] = { 0x0, 0x4 };
+
+static const struct mtk_clk_rst_desc clk_rst_desc = {
+	.version = MTK_RST_SIMPLE,
+	.rst_bank_ofs = pericfg_rst_ofs,
+	.rst_bank_nr = ARRAY_SIZE(pericfg_rst_ofs),
+};
+
+static const struct of_device_id of_match_clk_mt8173_pericfg[] = {
+	{ .compatible = "mediatek,mt8173-pericfg" },
+	{ /* sentinel */ }
+};
+
+static int clk_mt8173_pericfg_probe(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw_onecell_data *clk_data;
+	int r;
+	void __iomem *base;
+
+	base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(base))
+		return PTR_ERR(base);
+
+	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
+	if (IS_ERR_OR_NULL(clk_data))
+		return -ENOMEM;
+
+	r = mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
+				   clk_data, &pdev->dev);
+	if (r)
+		goto free_clk_data;
+
+	r = mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
+					&mt8173_clk_lock, clk_data, &pdev->dev);
+	if (r)
+		goto unregister_gates;
+
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	if (r)
+		goto unregister_composites;
+
+	r = mtk_register_reset_controller(node, &clk_rst_desc);
+	if (r)
+		goto unregister_clk_hw;
+
+	return 0;
+
+unregister_clk_hw:
+	of_clk_del_provider(node);
+unregister_composites:
+	mtk_clk_unregister_composites(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
+unregister_gates:
+	mtk_clk_unregister_gates(peri_gates, ARRAY_SIZE(peri_gates), clk_data);
+free_clk_data:
+	mtk_free_clk_data(clk_data);
+	return r;
+}
+
+static int clk_mt8173_pericfg_remove(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
+
+	of_clk_del_provider(node);
+	mtk_clk_unregister_composites(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
+	mtk_clk_unregister_gates(peri_gates, ARRAY_SIZE(peri_gates), clk_data);
+	mtk_free_clk_data(clk_data);
+
+	return 0;
+}
+
+static struct platform_driver clk_mt8173_pericfg_drv = {
+	.driver = {
+		.name = "clk-mt8173-pericfg",
+		.of_match_table = of_match_clk_mt8173_pericfg,
+	},
+	.probe = clk_mt8173_pericfg_probe,
+	.remove = clk_mt8173_pericfg_remove,
+};
+module_platform_driver(clk_mt8173_pericfg_drv);
+
+MODULE_DESCRIPTION("MediaTek MT8173 pericfg clocks driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173-topckgen.c
similarity index 50%
rename from drivers/clk/mediatek/clk-mt8173.c
rename to drivers/clk/mediatek/clk-mt8173-topckgen.c
index 02231f8ba6d9..46144e429081 100644
--- a/drivers/clk/mediatek/clk-mt8173.c
+++ b/drivers/clk/mediatek/clk-mt8173-topckgen.c
@@ -1,138 +1,34 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (c) 2014 MediaTek Inc.
- * Author: James Liao <jamesjj.liao at mediatek.com>
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
  */
 
-#include <linux/clk.h>
-#include <linux/of.h>
-#include <linux/of_address.h>
-#include <linux/of_device.h>
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/module.h>
 #include <linux/platform_device.h>
-
-#include "clk-cpumux.h"
 #include "clk-gate.h"
 #include "clk-mtk.h"
-#include "clk-pll.h"
-
-#include <dt-bindings/clock/mt8173-clk.h>
-
-#define REGOFF_REF2USB	0x8
-#define REGOFF_HDMI_REF	0x40
+#include "clk-mux.h"
 
 /*
  * For some clocks, we don't care what their actual rates are. And these
  * clocks may change their rate on different products or different scenarios.
  * So we model these clocks' rate as 0, to denote it's not an actual rate.
  */
-#define DUMMY_RATE		0
-
-static DEFINE_SPINLOCK(mt8173_clk_lock);
-
-static const struct mtk_fixed_clk fixed_clks[] = {
-	FIXED_CLK(CLK_TOP_CLKPH_MCK_O, "clkph_mck_o", "clk26m", DUMMY_RATE),
-	FIXED_CLK(CLK_TOP_USB_SYSPLL_125M, "usb_syspll_125m", "clk26m", 125 * MHZ),
-	FIXED_CLK(CLK_TOP_DSI0_DIG, "dsi0_dig", "clk26m", DUMMY_RATE),
-	FIXED_CLK(CLK_TOP_DSI1_DIG, "dsi1_dig", "clk26m", DUMMY_RATE),
-	FIXED_CLK(CLK_TOP_LVDS_PXL, "lvds_pxl", "lvdspll", DUMMY_RATE),
-	FIXED_CLK(CLK_TOP_LVDS_CTS, "lvds_cts", "lvdspll", DUMMY_RATE),
-};
-
-static const struct mtk_fixed_factor top_divs[] = {
-	FACTOR(CLK_TOP_ARMCA7PLL_754M, "armca7pll_754m", "armca7pll", 1, 2),
-	FACTOR(CLK_TOP_ARMCA7PLL_502M, "armca7pll_502m", "armca7pll", 1, 3),
-
-	FACTOR_FLAGS(CLK_TOP_MAIN_H546M, "main_h546m", "mainpll", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_MAIN_H364M, "main_h364m", "mainpll", 1, 3, 0),
-	FACTOR_FLAGS(CLK_TOP_MAIN_H218P4M, "main_h218p4m", "mainpll", 1, 5, 0),
-	FACTOR_FLAGS(CLK_TOP_MAIN_H156M, "main_h156m", "mainpll", 1, 7, 0),
-
-	FACTOR(CLK_TOP_TVDPLL_445P5M, "tvdpll_445p5m", "tvdpll", 1, 4),
-	FACTOR(CLK_TOP_TVDPLL_594M, "tvdpll_594m", "tvdpll", 1, 3),
-
-	FACTOR_FLAGS(CLK_TOP_UNIV_624M, "univ_624m", "univpll", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIV_416M, "univ_416m", "univpll", 1, 3, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIV_249P6M, "univ_249p6m", "univpll", 1, 5, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIV_178P3M, "univ_178p3m", "univpll", 1, 7, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIV_48M, "univ_48m", "univpll", 1, 26, 0),
-
-	FACTOR(CLK_TOP_CLKRTC_EXT, "clkrtc_ext", "clk32k", 1, 1),
-	FACTOR(CLK_TOP_CLKRTC_INT, "clkrtc_int", "clk26m", 1, 793),
-	FACTOR(CLK_TOP_FPC, "fpc_ck", "clk26m", 1, 1),
-
-	FACTOR(CLK_TOP_HDMITXPLL_D2, "hdmitxpll_d2", "hdmitx_dig_cts", 1, 2),
-	FACTOR(CLK_TOP_HDMITXPLL_D3, "hdmitxpll_d3", "hdmitx_dig_cts", 1, 3),
-
-	FACTOR(CLK_TOP_ARMCA7PLL_D2, "armca7pll_d2", "armca7pll_754m", 1, 1),
-	FACTOR(CLK_TOP_ARMCA7PLL_D3, "armca7pll_d3", "armca7pll_502m", 1, 1),
-
-	FACTOR(CLK_TOP_APLL1, "apll1_ck", "apll1", 1, 1),
-	FACTOR(CLK_TOP_APLL2, "apll2_ck", "apll2", 1, 1),
-
-	FACTOR(CLK_TOP_DMPLL, "dmpll_ck", "clkph_mck_o", 1, 1),
-	FACTOR(CLK_TOP_DMPLL_D2, "dmpll_d2", "clkph_mck_o", 1, 2),
-	FACTOR(CLK_TOP_DMPLL_D4, "dmpll_d4", "clkph_mck_o", 1, 4),
-	FACTOR(CLK_TOP_DMPLL_D8, "dmpll_d8", "clkph_mck_o", 1, 8),
-	FACTOR(CLK_TOP_DMPLL_D16, "dmpll_d16", "clkph_mck_o", 1, 16),
-
-	FACTOR(CLK_TOP_LVDSPLL_D2, "lvdspll_d2", "lvdspll", 1, 2),
-	FACTOR(CLK_TOP_LVDSPLL_D4, "lvdspll_d4", "lvdspll", 1, 4),
-	FACTOR(CLK_TOP_LVDSPLL_D8, "lvdspll_d8", "lvdspll", 1, 8),
+#define DUMMY_RATE	0
 
-	FACTOR(CLK_TOP_MMPLL, "mmpll_ck", "mmpll", 1, 1),
-	FACTOR(CLK_TOP_MMPLL_D2, "mmpll_d2", "mmpll", 1, 2),
-
-	FACTOR(CLK_TOP_MSDCPLL, "msdcpll_ck", "msdcpll", 1, 1),
-	FACTOR(CLK_TOP_MSDCPLL_D2, "msdcpll_d2", "msdcpll", 1, 2),
-	FACTOR(CLK_TOP_MSDCPLL_D4, "msdcpll_d4", "msdcpll", 1, 4),
-	FACTOR(CLK_TOP_MSDCPLL2, "msdcpll2_ck", "msdcpll2", 1, 1),
-	FACTOR(CLK_TOP_MSDCPLL2_D2, "msdcpll2_d2", "msdcpll2", 1, 2),
-	FACTOR(CLK_TOP_MSDCPLL2_D4, "msdcpll2_d4", "msdcpll2", 1, 4),
-
-	FACTOR_FLAGS(CLK_TOP_SYSPLL_D2, "syspll_d2", "main_h546m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D2, "syspll1_d2", "main_h546m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D4, "syspll1_d4", "main_h546m", 1, 4, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D8, "syspll1_d8", "main_h546m", 1, 8, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D16, "syspll1_d16", "main_h546m", 1, 16, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL_D3, "syspll_d3", "main_h364m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL2_D2, "syspll2_d2", "main_h364m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL2_D4, "syspll2_d4", "main_h364m", 1, 4, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL_D5, "syspll_d5", "main_h218p4m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL3_D2, "syspll3_d2", "main_h218p4m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL3_D4, "syspll3_d4", "main_h218p4m", 1, 4, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL_D7, "syspll_d7", "main_h156m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL4_D2, "syspll4_d2", "main_h156m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL4_D4, "syspll4_d4", "main_h156m", 1, 4, 0),
-
-	FACTOR(CLK_TOP_TVDPLL, "tvdpll_ck", "tvdpll_594m", 1, 1),
-	FACTOR(CLK_TOP_TVDPLL_D2, "tvdpll_d2", "tvdpll_594m", 1, 2),
-	FACTOR(CLK_TOP_TVDPLL_D4, "tvdpll_d4", "tvdpll_594m", 1, 4),
-	FACTOR(CLK_TOP_TVDPLL_D8, "tvdpll_d8", "tvdpll_594m", 1, 8),
-	FACTOR(CLK_TOP_TVDPLL_D16, "tvdpll_d16", "tvdpll_594m", 1, 16),
-
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D2, "univpll_d2", "univ_624m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL1_D2, "univpll1_d2", "univ_624m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL1_D4, "univpll1_d4", "univ_624m", 1, 4, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL1_D8, "univpll1_d8", "univ_624m", 1, 8, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D3, "univpll_d3", "univ_416m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL2_D2, "univpll2_d2", "univ_416m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL2_D4, "univpll2_d4", "univ_416m", 1, 4, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL2_D8, "univpll2_d8", "univ_416m", 1, 8, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D5, "univpll_d5", "univ_249p6m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL3_D2, "univpll3_d2", "univ_249p6m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL3_D4, "univpll3_d4", "univ_249p6m", 1, 4, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL3_D8, "univpll3_d8", "univ_249p6m", 1, 8, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D7, "univpll_d7", "univ_178p3m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D26, "univpll_d26", "univ_48m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D52, "univpll_d52", "univ_48m", 1, 2, 0),
+#define TOP_MUX_GATE_NOSR(_id, _name, _parents, _reg, _shift, _width, _gate, _flags) \
+		MUX_GATE_CLR_SET_UPD_FLAGS(_id, _name, _parents, _reg,		\
+			(_reg + 0x4), (_reg + 0x8), _shift, _width,		\
+			_gate, 0, -1, _flags)
 
-	FACTOR(CLK_TOP_VCODECPLL, "vcodecpll_ck", "vcodecpll", 1, 3),
-	FACTOR(CLK_TOP_VCODECPLL_370P5, "vcodecpll_370p5", "vcodecpll", 1, 4),
+#define TOP_MUX_GATE(_id, _name, _parents, _reg, _shift, _width, _gate, _flags)	\
+		TOP_MUX_GATE_NOSR(_id, _name, _parents, _reg, _shift, _width,	\
+				  _gate, CLK_SET_RATE_PARENT | _flags)
 
-	FACTOR(CLK_TOP_VENCPLL, "vencpll_ck", "vencpll", 1, 1),
-	FACTOR(CLK_TOP_VENCPLL_D2, "vencpll_d2", "vencpll", 1, 2),
-	FACTOR(CLK_TOP_VENCPLL_D4, "vencpll_d4", "vencpll", 1, 4),
-};
+static DEFINE_SPINLOCK(mt8173_top_clk_lock);
 
 static const char * const axi_parents[] = {
 	"clk26m",
@@ -524,23 +420,109 @@ static const char * const i2s3_b_ck_parents[] = {
 	"apll2_div5"
 };
 
-static const char * const ca53_parents[] = {
-	"clk26m",
-	"armca7pll",
-	"mainpll",
-	"univpll"
+static const struct mtk_fixed_clk fixed_clks[] = {
+	FIXED_CLK(CLK_TOP_CLKPH_MCK_O, "clkph_mck_o", "clk26m", DUMMY_RATE),
+	FIXED_CLK(CLK_TOP_USB_SYSPLL_125M, "usb_syspll_125m", "clk26m", 125 * MHZ),
+	FIXED_CLK(CLK_TOP_DSI0_DIG, "dsi0_dig", "clk26m", DUMMY_RATE),
+	FIXED_CLK(CLK_TOP_DSI1_DIG, "dsi1_dig", "clk26m", DUMMY_RATE),
+	FIXED_CLK(CLK_TOP_LVDS_PXL, "lvds_pxl", "lvdspll", DUMMY_RATE),
+	FIXED_CLK(CLK_TOP_LVDS_CTS, "lvds_cts", "lvdspll", DUMMY_RATE),
 };
 
-static const char * const ca72_parents[] = {
-	"clk26m",
-	"armca15pll",
-	"mainpll",
-	"univpll"
-};
+static const struct mtk_fixed_factor top_divs[] = {
+	FACTOR(CLK_TOP_ARMCA7PLL_754M, "armca7pll_754m", "armca7pll", 1, 2),
+	FACTOR(CLK_TOP_ARMCA7PLL_502M, "armca7pll_502m", "armca7pll", 1, 3),
+
+	FACTOR_FLAGS(CLK_TOP_MAIN_H546M, "main_h546m", "mainpll", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_MAIN_H364M, "main_h364m", "mainpll", 1, 3, 0),
+	FACTOR_FLAGS(CLK_TOP_MAIN_H218P4M, "main_h218p4m", "mainpll", 1, 5, 0),
+	FACTOR_FLAGS(CLK_TOP_MAIN_H156M, "main_h156m", "mainpll", 1, 7, 0),
+
+	FACTOR(CLK_TOP_TVDPLL_445P5M, "tvdpll_445p5m", "tvdpll", 1, 4),
+	FACTOR(CLK_TOP_TVDPLL_594M, "tvdpll_594m", "tvdpll", 1, 3),
+
+	FACTOR_FLAGS(CLK_TOP_UNIV_624M, "univ_624m", "univpll", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIV_416M, "univ_416m", "univpll", 1, 3, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIV_249P6M, "univ_249p6m", "univpll", 1, 5, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIV_178P3M, "univ_178p3m", "univpll", 1, 7, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIV_48M, "univ_48m", "univpll", 1, 26, 0),
 
-static const struct mtk_composite cpu_muxes[] = {
-	MUX(CLK_INFRA_CA53SEL, "infra_ca53_sel", ca53_parents, 0x0000, 0, 2),
-	MUX(CLK_INFRA_CA72SEL, "infra_ca72_sel", ca72_parents, 0x0000, 2, 2),
+	FACTOR(CLK_TOP_CLKRTC_EXT, "clkrtc_ext", "clk32k", 1, 1),
+	FACTOR(CLK_TOP_CLKRTC_INT, "clkrtc_int", "clk26m", 1, 793),
+	FACTOR(CLK_TOP_FPC, "fpc_ck", "clk26m", 1, 1),
+
+	FACTOR(CLK_TOP_HDMITXPLL_D2, "hdmitxpll_d2", "hdmitx_dig_cts", 1, 2),
+	FACTOR(CLK_TOP_HDMITXPLL_D3, "hdmitxpll_d3", "hdmitx_dig_cts", 1, 3),
+
+	FACTOR(CLK_TOP_ARMCA7PLL_D2, "armca7pll_d2", "armca7pll_754m", 1, 1),
+	FACTOR(CLK_TOP_ARMCA7PLL_D3, "armca7pll_d3", "armca7pll_502m", 1, 1),
+
+	FACTOR(CLK_TOP_APLL1, "apll1_ck", "apll1", 1, 1),
+	FACTOR(CLK_TOP_APLL2, "apll2_ck", "apll2", 1, 1),
+
+	FACTOR(CLK_TOP_DMPLL, "dmpll_ck", "clkph_mck_o", 1, 1),
+	FACTOR(CLK_TOP_DMPLL_D2, "dmpll_d2", "clkph_mck_o", 1, 2),
+	FACTOR(CLK_TOP_DMPLL_D4, "dmpll_d4", "clkph_mck_o", 1, 4),
+	FACTOR(CLK_TOP_DMPLL_D8, "dmpll_d8", "clkph_mck_o", 1, 8),
+	FACTOR(CLK_TOP_DMPLL_D16, "dmpll_d16", "clkph_mck_o", 1, 16),
+
+	FACTOR(CLK_TOP_LVDSPLL_D2, "lvdspll_d2", "lvdspll", 1, 2),
+	FACTOR(CLK_TOP_LVDSPLL_D4, "lvdspll_d4", "lvdspll", 1, 4),
+	FACTOR(CLK_TOP_LVDSPLL_D8, "lvdspll_d8", "lvdspll", 1, 8),
+
+	FACTOR(CLK_TOP_MMPLL, "mmpll_ck", "mmpll", 1, 1),
+	FACTOR(CLK_TOP_MMPLL_D2, "mmpll_d2", "mmpll", 1, 2),
+
+	FACTOR(CLK_TOP_MSDCPLL, "msdcpll_ck", "msdcpll", 1, 1),
+	FACTOR(CLK_TOP_MSDCPLL_D2, "msdcpll_d2", "msdcpll", 1, 2),
+	FACTOR(CLK_TOP_MSDCPLL_D4, "msdcpll_d4", "msdcpll", 1, 4),
+	FACTOR(CLK_TOP_MSDCPLL2, "msdcpll2_ck", "msdcpll2", 1, 1),
+	FACTOR(CLK_TOP_MSDCPLL2_D2, "msdcpll2_d2", "msdcpll2", 1, 2),
+	FACTOR(CLK_TOP_MSDCPLL2_D4, "msdcpll2_d4", "msdcpll2", 1, 4),
+
+	FACTOR_FLAGS(CLK_TOP_SYSPLL_D2, "syspll_d2", "main_h546m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D2, "syspll1_d2", "main_h546m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D4, "syspll1_d4", "main_h546m", 1, 4, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D8, "syspll1_d8", "main_h546m", 1, 8, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D16, "syspll1_d16", "main_h546m", 1, 16, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL_D3, "syspll_d3", "main_h364m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL2_D2, "syspll2_d2", "main_h364m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL2_D4, "syspll2_d4", "main_h364m", 1, 4, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL_D5, "syspll_d5", "main_h218p4m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL3_D2, "syspll3_d2", "main_h218p4m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL3_D4, "syspll3_d4", "main_h218p4m", 1, 4, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL_D7, "syspll_d7", "main_h156m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL4_D2, "syspll4_d2", "main_h156m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL4_D4, "syspll4_d4", "main_h156m", 1, 4, 0),
+
+	FACTOR(CLK_TOP_TVDPLL, "tvdpll_ck", "tvdpll_594m", 1, 1),
+	FACTOR(CLK_TOP_TVDPLL_D2, "tvdpll_d2", "tvdpll_594m", 1, 2),
+	FACTOR(CLK_TOP_TVDPLL_D4, "tvdpll_d4", "tvdpll_594m", 1, 4),
+	FACTOR(CLK_TOP_TVDPLL_D8, "tvdpll_d8", "tvdpll_594m", 1, 8),
+	FACTOR(CLK_TOP_TVDPLL_D16, "tvdpll_d16", "tvdpll_594m", 1, 16),
+
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D2, "univpll_d2", "univ_624m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL1_D2, "univpll1_d2", "univ_624m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL1_D4, "univpll1_d4", "univ_624m", 1, 4, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL1_D8, "univpll1_d8", "univ_624m", 1, 8, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D3, "univpll_d3", "univ_416m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL2_D2, "univpll2_d2", "univ_416m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL2_D4, "univpll2_d4", "univ_416m", 1, 4, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL2_D8, "univpll2_d8", "univ_416m", 1, 8, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D5, "univpll_d5", "univ_249p6m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL3_D2, "univpll3_d2", "univ_249p6m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL3_D4, "univpll3_d4", "univ_249p6m", 1, 4, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL3_D8, "univpll3_d8", "univ_249p6m", 1, 8, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D7, "univpll_d7", "univ_178p3m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D26, "univpll_d26", "univ_48m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D52, "univpll_d52", "univ_48m", 1, 2, 0),
+
+	FACTOR(CLK_TOP_VCODECPLL, "vcodecpll_ck", "vcodecpll", 1, 3),
+	FACTOR(CLK_TOP_VCODECPLL_370P5, "vcodecpll_370p5", "vcodecpll", 1, 4),
+
+	FACTOR(CLK_TOP_VENCPLL, "vencpll_ck", "vencpll", 1, 1),
+	FACTOR(CLK_TOP_VENCPLL_D2, "vencpll_d2", "vencpll", 1, 2),
+	FACTOR(CLK_TOP_VENCPLL_D4, "vencpll_d4", "vencpll", 1, 4),
 };
 
 static const struct mtk_composite top_muxes[] = {
@@ -564,25 +546,35 @@ static const struct mtk_composite top_muxes[] = {
 	MUX_GATE(CLK_TOP_USB20_SEL, "usb20_sel", usb20_parents, 0x0060, 24, 2, 31),
 	/* CLK_CFG_3 */
 	MUX_GATE(CLK_TOP_USB30_SEL, "usb30_sel", usb30_parents, 0x0070, 0, 2, 7),
-	MUX_GATE(CLK_TOP_MSDC50_0_H_SEL, "msdc50_0_h_sel", msdc50_0_h_parents, 0x0070, 8, 3, 15),
-	MUX_GATE(CLK_TOP_MSDC50_0_SEL, "msdc50_0_sel", msdc50_0_parents, 0x0070, 16, 4, 23),
-	MUX_GATE(CLK_TOP_MSDC30_1_SEL, "msdc30_1_sel", msdc30_1_parents, 0x0070, 24, 3, 31),
+	MUX_GATE(CLK_TOP_MSDC50_0_H_SEL, "msdc50_0_h_sel", msdc50_0_h_parents,
+		 0x0070, 8, 3, 15),
+	MUX_GATE(CLK_TOP_MSDC50_0_SEL, "msdc50_0_sel", msdc50_0_parents,
+		 0x0070, 16, 4, 23),
+	MUX_GATE(CLK_TOP_MSDC30_1_SEL, "msdc30_1_sel", msdc30_1_parents,
+		 0x0070, 24, 3, 31),
 	/* CLK_CFG_4 */
-	MUX_GATE(CLK_TOP_MSDC30_2_SEL, "msdc30_2_sel", msdc30_2_parents, 0x0080, 0, 3, 7),
-	MUX_GATE(CLK_TOP_MSDC30_3_SEL, "msdc30_3_sel", msdc30_3_parents, 0x0080, 8, 4, 15),
-	MUX_GATE(CLK_TOP_AUDIO_SEL, "audio_sel", audio_parents, 0x0080, 16, 2, 23),
-	MUX_GATE(CLK_TOP_AUD_INTBUS_SEL, "aud_intbus_sel", aud_intbus_parents, 0x0080, 24, 3, 31),
+	MUX_GATE(CLK_TOP_MSDC30_2_SEL, "msdc30_2_sel", msdc30_2_parents,
+		 0x0080, 0, 3, 7),
+	MUX_GATE(CLK_TOP_MSDC30_3_SEL, "msdc30_3_sel", msdc30_3_parents,
+		 0x0080, 8, 4, 15),
+	MUX_GATE(CLK_TOP_AUDIO_SEL, "audio_sel", audio_parents,
+		 0x0080, 16, 2, 23),
+	MUX_GATE(CLK_TOP_AUD_INTBUS_SEL, "aud_intbus_sel", aud_intbus_parents,
+		 0x0080, 24, 3, 31),
 	/* CLK_CFG_5 */
-	MUX_GATE(CLK_TOP_PMICSPI_SEL, "pmicspi_sel", pmicspi_parents, 0x0090, 0, 3, 7 /* 7:5 */),
+	MUX_GATE(CLK_TOP_PMICSPI_SEL, "pmicspi_sel", pmicspi_parents,
+		 0x0090, 0, 3, 7 /* 7:5 */),
 	MUX_GATE(CLK_TOP_SCP_SEL, "scp_sel", scp_parents, 0x0090, 8, 3, 15),
 	MUX_GATE(CLK_TOP_ATB_SEL, "atb_sel", atb_parents, 0x0090, 16, 2, 23),
-	MUX_GATE(CLK_TOP_VENC_LT_SEL, "venclt_sel", venc_lt_parents, 0x0090, 24, 4, 31),
+	MUX_GATE(CLK_TOP_VENC_LT_SEL, "venclt_sel", venc_lt_parents,
+		 0x0090, 24, 4, 31),
 	/* CLK_CFG_6 */
 	/*
 	 * The dpi0_sel clock should not propagate rate changes to its parent
 	 * clock so the dpi driver can have full control over PLL and divider.
 	 */
-	MUX_GATE_FLAGS(CLK_TOP_DPI0_SEL, "dpi0_sel", dpi0_parents, 0x00a0, 0, 3, 7, 0),
+	MUX_GATE_FLAGS(CLK_TOP_DPI0_SEL, "dpi0_sel", dpi0_parents,
+		       0x00a0, 0, 3, 7, 0),
 	MUX_GATE(CLK_TOP_IRDA_SEL, "irda_sel", irda_parents, 0x00a0, 8, 2, 15),
 	MUX_GATE_FLAGS(CLK_TOP_CCI400_SEL, "cci400_sel",
 		       cci400_parents, 0x00a0, 16, 3, 23,
@@ -590,17 +582,23 @@ static const struct mtk_composite top_muxes[] = {
 	MUX_GATE(CLK_TOP_AUD_1_SEL, "aud_1_sel", aud_1_parents, 0x00a0, 24, 2, 31),
 	/* CLK_CFG_7 */
 	MUX_GATE(CLK_TOP_AUD_2_SEL, "aud_2_sel", aud_2_parents, 0x00b0, 0, 2, 7),
-	MUX_GATE(CLK_TOP_MEM_MFG_IN_SEL, "mem_mfg_in_sel", mem_mfg_in_parents, 0x00b0, 8, 2, 15),
-	MUX_GATE(CLK_TOP_AXI_MFG_IN_SEL, "axi_mfg_in_sel", axi_mfg_in_parents, 0x00b0, 16, 2, 23),
+	MUX_GATE(CLK_TOP_MEM_MFG_IN_SEL, "mem_mfg_in_sel", mem_mfg_in_parents,
+		 0x00b0, 8, 2, 15),
+	MUX_GATE(CLK_TOP_AXI_MFG_IN_SEL, "axi_mfg_in_sel", axi_mfg_in_parents,
+		 0x00b0, 16, 2, 23),
 	MUX_GATE(CLK_TOP_SCAM_SEL, "scam_sel", scam_parents, 0x00b0, 24, 2, 31),
 	/* CLK_CFG_12 */
-	MUX_GATE(CLK_TOP_SPINFI_IFR_SEL, "spinfi_ifr_sel", spinfi_ifr_parents, 0x00c0, 0, 3, 7),
+	MUX_GATE(CLK_TOP_SPINFI_IFR_SEL, "spinfi_ifr_sel", spinfi_ifr_parents,
+		 0x00c0, 0, 3, 7),
 	MUX_GATE(CLK_TOP_HDMI_SEL, "hdmi_sel", hdmi_parents, 0x00c0, 8, 2, 15),
-	MUX_GATE(CLK_TOP_DPILVDS_SEL, "dpilvds_sel", dpilvds_parents, 0x00c0, 24, 3, 31),
+	MUX_GATE(CLK_TOP_DPILVDS_SEL, "dpilvds_sel", dpilvds_parents,
+		 0x00c0, 24, 3, 31),
 	/* CLK_CFG_13 */
-	MUX_GATE(CLK_TOP_MSDC50_2_H_SEL, "msdc50_2_h_sel", msdc50_2_h_parents, 0x00d0, 0, 3, 7),
+	MUX_GATE(CLK_TOP_MSDC50_2_H_SEL, "msdc50_2_h_sel", msdc50_2_h_parents,
+		 0x00d0, 0, 3, 7),
 	MUX_GATE(CLK_TOP_HDCP_SEL, "hdcp_sel", hdcp_parents, 0x00d0, 8, 2, 15),
-	MUX_GATE(CLK_TOP_HDCP_24M_SEL, "hdcp_24m_sel", hdcp_24m_parents, 0x00d0, 16, 2, 23),
+	MUX_GATE(CLK_TOP_HDCP_24M_SEL, "hdcp_24m_sel", hdcp_24m_parents,
+		 0x00d0, 16, 2, 23),
 	MUX_FLAGS(CLK_TOP_RTC_SEL, "rtc_sel", rtc_parents, 0x00d0, 24, 2,
 		  CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 
@@ -625,236 +623,12 @@ static const struct mtk_composite top_muxes[] = {
 	MUX(CLK_TOP_I2S3_B_SEL, "i2s3_b_ck_sel", i2s3_b_ck_parents, 0x120, 8, 1),
 };
 
-static const struct mtk_gate_regs infra_cg_regs = {
-	.set_ofs = 0x0040,
-	.clr_ofs = 0x0044,
-	.sta_ofs = 0x0048,
-};
-
-#define GATE_ICG(_id, _name, _parent, _shift) {	\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &infra_cg_regs,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr,		\
-	}
-
-static const struct mtk_gate infra_clks[] = {
-	GATE_ICG(CLK_INFRA_DBGCLK, "infra_dbgclk", "axi_sel", 0),
-	GATE_ICG(CLK_INFRA_SMI, "infra_smi", "mm_sel", 1),
-	GATE_ICG(CLK_INFRA_AUDIO, "infra_audio", "aud_intbus_sel", 5),
-	GATE_ICG(CLK_INFRA_GCE, "infra_gce", "axi_sel", 6),
-	GATE_ICG(CLK_INFRA_L2C_SRAM, "infra_l2c_sram", "axi_sel", 7),
-	GATE_ICG(CLK_INFRA_M4U, "infra_m4u", "mem_sel", 8),
-	GATE_ICG(CLK_INFRA_CPUM, "infra_cpum", "cpum_ck", 15),
-	GATE_ICG(CLK_INFRA_KP, "infra_kp", "axi_sel", 16),
-	GATE_ICG(CLK_INFRA_CEC, "infra_cec", "clk26m", 18),
-	GATE_ICG(CLK_INFRA_PMICSPI, "infra_pmicspi", "pmicspi_sel", 22),
-	GATE_ICG(CLK_INFRA_PMICWRAP, "infra_pmicwrap", "axi_sel", 23),
-};
-
-static const struct mtk_fixed_factor infra_early_divs[] = {
-	FACTOR(CLK_INFRA_CLK_13M, "clk13m", "clk26m", 1, 2),
-};
-
-static const struct mtk_gate_regs peri0_cg_regs = {
-	.set_ofs = 0x0008,
-	.clr_ofs = 0x0010,
-	.sta_ofs = 0x0018,
-};
-
-static const struct mtk_gate_regs peri1_cg_regs = {
-	.set_ofs = 0x000c,
-	.clr_ofs = 0x0014,
-	.sta_ofs = 0x001c,
-};
-
-#define GATE_PERI0(_id, _name, _parent, _shift) {	\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &peri0_cg_regs,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr,		\
-	}
-
-#define GATE_PERI1(_id, _name, _parent, _shift) {	\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &peri1_cg_regs,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr,		\
-	}
-
-static const struct mtk_gate peri_gates[] = {
-	/* PERI0 */
-	GATE_PERI0(CLK_PERI_NFI, "peri_nfi", "axi_sel", 0),
-	GATE_PERI0(CLK_PERI_THERM, "peri_therm", "axi_sel", 1),
-	GATE_PERI0(CLK_PERI_PWM1, "peri_pwm1", "axi_sel", 2),
-	GATE_PERI0(CLK_PERI_PWM2, "peri_pwm2", "axi_sel", 3),
-	GATE_PERI0(CLK_PERI_PWM3, "peri_pwm3", "axi_sel", 4),
-	GATE_PERI0(CLK_PERI_PWM4, "peri_pwm4", "axi_sel", 5),
-	GATE_PERI0(CLK_PERI_PWM5, "peri_pwm5", "axi_sel", 6),
-	GATE_PERI0(CLK_PERI_PWM6, "peri_pwm6", "axi_sel", 7),
-	GATE_PERI0(CLK_PERI_PWM7, "peri_pwm7", "axi_sel", 8),
-	GATE_PERI0(CLK_PERI_PWM, "peri_pwm", "axi_sel", 9),
-	GATE_PERI0(CLK_PERI_USB0, "peri_usb0", "usb20_sel", 10),
-	GATE_PERI0(CLK_PERI_USB1, "peri_usb1", "usb20_sel", 11),
-	GATE_PERI0(CLK_PERI_AP_DMA, "peri_ap_dma", "axi_sel", 12),
-	GATE_PERI0(CLK_PERI_MSDC30_0, "peri_msdc30_0", "msdc50_0_sel", 13),
-	GATE_PERI0(CLK_PERI_MSDC30_1, "peri_msdc30_1", "msdc30_1_sel", 14),
-	GATE_PERI0(CLK_PERI_MSDC30_2, "peri_msdc30_2", "msdc30_2_sel", 15),
-	GATE_PERI0(CLK_PERI_MSDC30_3, "peri_msdc30_3", "msdc30_3_sel", 16),
-	GATE_PERI0(CLK_PERI_NLI_ARB, "peri_nli_arb", "axi_sel", 17),
-	GATE_PERI0(CLK_PERI_IRDA, "peri_irda", "irda_sel", 18),
-	GATE_PERI0(CLK_PERI_UART0, "peri_uart0", "axi_sel", 19),
-	GATE_PERI0(CLK_PERI_UART1, "peri_uart1", "axi_sel", 20),
-	GATE_PERI0(CLK_PERI_UART2, "peri_uart2", "axi_sel", 21),
-	GATE_PERI0(CLK_PERI_UART3, "peri_uart3", "axi_sel", 22),
-	GATE_PERI0(CLK_PERI_I2C0, "peri_i2c0", "axi_sel", 23),
-	GATE_PERI0(CLK_PERI_I2C1, "peri_i2c1", "axi_sel", 24),
-	GATE_PERI0(CLK_PERI_I2C2, "peri_i2c2", "axi_sel", 25),
-	GATE_PERI0(CLK_PERI_I2C3, "peri_i2c3", "axi_sel", 26),
-	GATE_PERI0(CLK_PERI_I2C4, "peri_i2c4", "axi_sel", 27),
-	GATE_PERI0(CLK_PERI_AUXADC, "peri_auxadc", "clk26m", 28),
-	GATE_PERI0(CLK_PERI_SPI0, "peri_spi0", "spi_sel", 29),
-	GATE_PERI0(CLK_PERI_I2C5, "peri_i2c5", "axi_sel", 30),
-	GATE_PERI0(CLK_PERI_NFIECC, "peri_nfiecc", "axi_sel", 31),
-	/* PERI1 */
-	GATE_PERI1(CLK_PERI_SPI, "peri_spi", "spi_sel", 0),
-	GATE_PERI1(CLK_PERI_IRRX, "peri_irrx", "spi_sel", 1),
-	GATE_PERI1(CLK_PERI_I2C6, "peri_i2c6", "axi_sel", 2),
-};
-
-static const char * const uart_ck_sel_parents[] = {
-	"clk26m",
-	"uart_sel",
-};
-
-static const struct mtk_composite peri_clks[] = {
-	MUX(CLK_PERI_UART0_SEL, "uart0_ck_sel", uart_ck_sel_parents, 0x40c, 0, 1),
-	MUX(CLK_PERI_UART1_SEL, "uart1_ck_sel", uart_ck_sel_parents, 0x40c, 1, 1),
-	MUX(CLK_PERI_UART2_SEL, "uart2_ck_sel", uart_ck_sel_parents, 0x40c, 2, 1),
-	MUX(CLK_PERI_UART3_SEL, "uart3_ck_sel", uart_ck_sel_parents, 0x40c, 3, 1),
-};
-
-static const struct mtk_gate_regs cg_regs_4_8_0 = {
-	.set_ofs = 0x0004,
-	.clr_ofs = 0x0008,
-	.sta_ofs = 0x0000,
-};
-
-#define GATE_IMG(_id, _name, _parent, _shift) {			\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &cg_regs_4_8_0,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr,		\
-	}
-
-static const struct mtk_gate img_clks[] = {
-	GATE_DUMMY(CLK_DUMMY, "img_dummy"),
-	GATE_IMG(CLK_IMG_LARB2_SMI, "img_larb2_smi", "mm_sel", 0),
-	GATE_IMG(CLK_IMG_CAM_SMI, "img_cam_smi", "mm_sel", 5),
-	GATE_IMG(CLK_IMG_CAM_CAM, "img_cam_cam", "mm_sel", 6),
-	GATE_IMG(CLK_IMG_SEN_TG, "img_sen_tg", "camtg_sel", 7),
-	GATE_IMG(CLK_IMG_SEN_CAM, "img_sen_cam", "mm_sel", 8),
-	GATE_IMG(CLK_IMG_CAM_SV, "img_cam_sv", "mm_sel", 9),
-	GATE_IMG(CLK_IMG_FD, "img_fd", "mm_sel", 11),
-};
-
-static const struct mtk_gate_regs vdec0_cg_regs = {
-	.set_ofs = 0x0000,
-	.clr_ofs = 0x0004,
-	.sta_ofs = 0x0000,
-};
-
-static const struct mtk_gate_regs vdec1_cg_regs = {
-	.set_ofs = 0x0008,
-	.clr_ofs = 0x000c,
-	.sta_ofs = 0x0008,
-};
-
-#define GATE_VDEC0(_id, _name, _parent, _shift) {		\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &vdec0_cg_regs,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr_inv,		\
-	}
-
-#define GATE_VDEC1(_id, _name, _parent, _shift) {		\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &vdec1_cg_regs,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr_inv,		\
-	}
-
-static const struct mtk_gate vdec_clks[] = {
-	GATE_DUMMY(CLK_DUMMY, "vdec_dummy"),
-	GATE_VDEC0(CLK_VDEC_CKEN, "vdec_cken", "vdec_sel", 0),
-	GATE_VDEC1(CLK_VDEC_LARB_CKEN, "vdec_larb_cken", "mm_sel", 0),
-};
-
-#define GATE_VENC(_id, _name, _parent, _shift) {		\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &cg_regs_4_8_0,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr_inv,		\
-	}
-
-static const struct mtk_gate venc_clks[] = {
-	GATE_DUMMY(CLK_DUMMY, "venc_dummy"),
-	GATE_VENC(CLK_VENC_CKE0, "venc_cke0", "mm_sel", 0),
-	GATE_VENC(CLK_VENC_CKE1, "venc_cke1", "venc_sel", 4),
-	GATE_VENC(CLK_VENC_CKE2, "venc_cke2", "venc_sel", 8),
-	GATE_VENC(CLK_VENC_CKE3, "venc_cke3", "venc_sel", 12),
-};
-
-#define GATE_VENCLT(_id, _name, _parent, _shift) {		\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &cg_regs_4_8_0,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr_inv,		\
-	}
-
-static const struct mtk_gate venclt_clks[] = {
-	GATE_DUMMY(CLK_DUMMY, "venclt_dummy"),
-	GATE_VENCLT(CLK_VENCLT_CKE0, "venclt_cke0", "mm_sel", 0),
-	GATE_VENCLT(CLK_VENCLT_CKE1, "venclt_cke1", "venclt_sel", 4),
-};
-
-static u16 infrasys_rst_ofs[] = { 0x30, 0x34, };
-static u16 pericfg_rst_ofs[] = { 0x0, 0x4, };
-
-static const struct mtk_clk_rst_desc clk_rst_desc[] = {
-	/* infrasys */
-	{
-		.version = MTK_RST_SIMPLE,
-		.rst_bank_ofs = infrasys_rst_ofs,
-		.rst_bank_nr = ARRAY_SIZE(infrasys_rst_ofs),
-	},
-	/* pericfg */
-	{
-		.version = MTK_RST_SIMPLE,
-		.rst_bank_ofs = pericfg_rst_ofs,
-		.rst_bank_nr = ARRAY_SIZE(pericfg_rst_ofs),
-	}
+static const struct of_device_id of_match_clk_mt8173_topckgen[] = {
+	{ .compatible = "mediatek,mt8173-topckgen" },
+	{ /* sentinel */ }
 };
 
-static struct clk_hw_onecell_data *infra_clk_data;
-
-static int clk_mt8173_topck_probe(struct platform_device *pdev)
+static int clk_mt8173_topckgen_probe(struct platform_device *pdev)
 {
 	struct device_node *node = pdev->dev.of_node;
 	struct clk_hw_onecell_data *clk_data;
@@ -878,7 +652,7 @@ static int clk_mt8173_topck_probe(struct platform_device *pdev)
 		goto unregister_fixed_clks;
 
 	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-					&mt8173_clk_lock, clk_data, &pdev->dev);
+					&mt8173_top_clk_lock, clk_data, &pdev->dev);
 	if (r)
 		goto unregister_factors;
 
@@ -899,286 +673,29 @@ static int clk_mt8173_topck_probe(struct platform_device *pdev)
 	return r;
 }
 
-static void clk_mt8173_infra_init_early(struct device_node *node)
-{
-	int i;
-
-	infra_clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
-	if (!infra_clk_data)
-		return;
-
-	for (i = 0; i < CLK_INFRA_NR_CLK; i++)
-		infra_clk_data->hws[i] = ERR_PTR(-EPROBE_DEFER);
-
-	mtk_clk_register_factors(infra_early_divs, ARRAY_SIZE(infra_early_divs), infra_clk_data);
-
-	of_clk_add_hw_provider(node, of_clk_hw_onecell_get, infra_clk_data);
-}
-CLK_OF_DECLARE_DRIVER(mtk_infrasys, "mediatek,mt8173-infracfg",
-		      clk_mt8173_infra_init_early);
-
-static int clk_mt8173_infra_probe(struct platform_device *pdev)
+static int clk_mt8173_topckgen_remove(struct platform_device *pdev)
 {
+	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
 	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	r = mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-				   infra_clk_data, &pdev->dev);
-	if (r)
-		return r;
-
-	r = mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
-				      infra_clk_data, &pdev->dev);
-	if (r)
-		goto unregister_gates;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, infra_clk_data);
-	if (r)
-		goto unregister_cpumuxes;
-
-	r = mtk_register_reset_controller(node, &clk_rst_desc[0]);
-	if (r)
-		goto unregister_clk_hw;
 
-	return 0;
-
-unregister_clk_hw:
 	of_clk_del_provider(node);
-unregister_cpumuxes:
-	mtk_clk_unregister_cpumuxes(cpu_muxes, ARRAY_SIZE(cpu_muxes), infra_clk_data);
-unregister_gates:
-	mtk_clk_unregister_gates(infra_clks, ARRAY_SIZE(infra_clks), infra_clk_data);
-	return r;
-}
-
-static int clk_mt8173_peri_probe(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-	void __iomem *base;
-
-	base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(base))
-		return PTR_ERR(base);
-
-	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
-	if (IS_ERR_OR_NULL(clk_data))
-		return -ENOMEM;
-
-	r = mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
-				   clk_data, &pdev->dev);
-	if (r)
-		goto free_clk_data;
-
-	r = mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
-					&mt8173_clk_lock, clk_data, &pdev->dev);
-	if (r)
-		goto unregister_gates;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_composites;
-
-	r = mtk_register_reset_controller(node, &clk_rst_desc[1]);
-	if (r)
-		goto unregister_clk_hw;
-
-	return 0;
-
-unregister_clk_hw:
-	of_clk_del_provider(node);
-unregister_composites:
-	mtk_clk_unregister_composites(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
-unregister_gates:
-	mtk_clk_unregister_gates(peri_gates, ARRAY_SIZE(peri_gates), clk_data);
-free_clk_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
-
-#define MT8173_PLL_FMAX		(3000UL * MHZ)
-
-#define CON0_MT8173_RST_BAR	BIT(24)
-
-#define PLL_B(_id, _name, _reg, _pwr_reg, _en_mask, _flags, _pcwbits,	\
-			_pd_reg, _pd_shift, _tuner_reg, _pcw_reg,	\
-			_pcw_shift, _div_table) {			\
-		.id = _id,						\
-		.name = _name,						\
-		.reg = _reg,						\
-		.pwr_reg = _pwr_reg,					\
-		.en_mask = _en_mask,					\
-		.flags = _flags,					\
-		.rst_bar_mask = CON0_MT8173_RST_BAR,			\
-		.fmax = MT8173_PLL_FMAX,				\
-		.pcwbits = _pcwbits,					\
-		.pd_reg = _pd_reg,					\
-		.pd_shift = _pd_shift,					\
-		.tuner_reg = _tuner_reg,				\
-		.pcw_reg = _pcw_reg,					\
-		.pcw_shift = _pcw_shift,				\
-		.div_table = _div_table,				\
-	}
-
-#define PLL(_id, _name, _reg, _pwr_reg, _en_mask, _flags, _pcwbits,	\
-			_pd_reg, _pd_shift, _tuner_reg, _pcw_reg,	\
-			_pcw_shift)					\
-		PLL_B(_id, _name, _reg, _pwr_reg, _en_mask, _flags, _pcwbits, \
-			_pd_reg, _pd_shift, _tuner_reg, _pcw_reg, _pcw_shift, \
-			NULL)
-
-static const struct mtk_pll_div_table mmpll_div_table[] = {
-	{ .div = 0, .freq = MT8173_PLL_FMAX },
-	{ .div = 1, .freq = 1000000000 },
-	{ .div = 2, .freq = 702000000 },
-	{ .div = 3, .freq = 253500000 },
-	{ .div = 4, .freq = 126750000 },
-	{ } /* sentinel */
-};
-
-static const struct mtk_pll_data plls[] = {
-	PLL(CLK_APMIXED_ARMCA15PLL, "armca15pll", 0x200, 0x20c, 0, PLL_AO,
-	    21, 0x204, 24, 0x0, 0x204, 0),
-	PLL(CLK_APMIXED_ARMCA7PLL, "armca7pll", 0x210, 0x21c, 0, PLL_AO,
-	    21, 0x214, 24, 0x0, 0x214, 0),
-	PLL(CLK_APMIXED_MAINPLL, "mainpll", 0x220, 0x22c, 0xf0000100, HAVE_RST_BAR, 21, 0x220, 4, 0x0, 0x224, 0),
-	PLL(CLK_APMIXED_UNIVPLL, "univpll", 0x230, 0x23c, 0xfe000000, HAVE_RST_BAR, 7, 0x230, 4, 0x0, 0x234, 14),
-	PLL_B(CLK_APMIXED_MMPLL, "mmpll", 0x240, 0x24c, 0, 0, 21, 0x244, 24, 0x0, 0x244, 0, mmpll_div_table),
-	PLL(CLK_APMIXED_MSDCPLL, "msdcpll", 0x250, 0x25c, 0, 0, 21, 0x250, 4, 0x0, 0x254, 0),
-	PLL(CLK_APMIXED_VENCPLL, "vencpll", 0x260, 0x26c, 0, 0, 21, 0x260, 4, 0x0, 0x264, 0),
-	PLL(CLK_APMIXED_TVDPLL, "tvdpll", 0x270, 0x27c, 0, 0, 21, 0x270, 4, 0x0, 0x274, 0),
-	PLL(CLK_APMIXED_MPLL, "mpll", 0x280, 0x28c, 0, 0, 21, 0x280, 4, 0x0, 0x284, 0),
-	PLL(CLK_APMIXED_VCODECPLL, "vcodecpll", 0x290, 0x29c, 0, 0, 21, 0x290, 4, 0x0, 0x294, 0),
-	PLL(CLK_APMIXED_APLL1, "apll1", 0x2a0, 0x2b0, 0, 0, 31, 0x2a0, 4, 0x2a4, 0x2a4, 0),
-	PLL(CLK_APMIXED_APLL2, "apll2", 0x2b4, 0x2c4, 0, 0, 31, 0x2b4, 4, 0x2b8, 0x2b8, 0),
-	PLL(CLK_APMIXED_LVDSPLL, "lvdspll", 0x2d0, 0x2dc, 0, 0, 21, 0x2d0, 4, 0x0, 0x2d4, 0),
-	PLL(CLK_APMIXED_MSDCPLL2, "msdcpll2", 0x2f0, 0x2fc, 0, 0, 21, 0x2f0, 4, 0x0, 0x2f4, 0),
-};
-
-static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *clk_data;
-	void __iomem *base;
-	struct clk_hw *hw;
-	int r;
-
-	base = of_iomap(node, 0);
-	if (!base)
-		return PTR_ERR(base);
-
-	clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
-	if (IS_ERR_OR_NULL(clk_data))
-		return -ENOMEM;
-
-	r = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
-	if (r)
-		goto free_clk_data;
-
-	hw = mtk_clk_register_ref2usb_tx("ref2usb_tx", "clk26m", base + REGOFF_REF2USB);
-	if (IS_ERR(hw)) {
-		r = PTR_ERR(hw);
-		dev_err(&pdev->dev, "Failed to register ref2usb_tx: %d\n", r);
-		goto unregister_plls;
-	}
-	clk_data->hws[CLK_APMIXED_REF2USB_TX] = hw;
-
-	hw = devm_clk_hw_register_divider(&pdev->dev, "hdmi_ref", "tvdpll_594m", 0,
-					  base + REGOFF_HDMI_REF, 16, 3,
-					  CLK_DIVIDER_POWER_OF_TWO, NULL);
-	clk_data->hws[CLK_APMIXED_HDMI_REF] = hw;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_ref2usb;
+	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
+	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
+	mtk_clk_unregister_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
+	mtk_free_clk_data(clk_data);
 
 	return 0;
-
-unregister_ref2usb:
-	mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
-unregister_plls:
-	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
-free_clk_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
-
-static const struct mtk_clk_desc img_desc = {
-	.clks = img_clks,
-	.num_clks = ARRAY_SIZE(img_clks),
-};
-
-static const struct mtk_clk_desc vdec_desc = {
-	.clks = vdec_clks,
-	.num_clks = ARRAY_SIZE(vdec_clks),
-};
-
-static const struct mtk_clk_desc venc_desc = {
-	.clks = venc_clks,
-	.num_clks = ARRAY_SIZE(venc_clks),
-};
-
-static const struct mtk_clk_desc venc_lt_desc = {
-	.clks = venclt_clks,
-	.num_clks = ARRAY_SIZE(venclt_clks),
-};
-
-static const struct of_device_id of_match_clk_mt8173_simple[] = {
-	{ .compatible = "mediatek,mt8173-imgsys", .data = &img_desc },
-	{ .compatible = "mediatek,mt8173-vdecsys", .data = &vdec_desc },
-	{ .compatible = "mediatek,mt8173-vencsys", .data = &venc_desc },
-	{ .compatible = "mediatek,mt8173-vencltsys", .data = &venc_lt_desc },
-	{ /* sentinel */ }
-};
-
-static struct platform_driver clk_mt8173_simple_drv = {
-	.driver = {
-		.name = "clk-mt8173-simple",
-		.of_match_table = of_match_clk_mt8173_simple,
-	},
-	.probe = mtk_clk_simple_probe,
-	.remove = mtk_clk_simple_remove,
-};
-
-static int clk_mt8173_probe(struct platform_device *pdev)
-{
-	int (*clk_probe)(struct platform_device *pdev);
-	int r;
-
-	clk_probe = of_device_get_match_data(&pdev->dev);
-	if (!clk_probe)
-		return -EINVAL;
-
-	r = clk_probe(pdev);
-	if (r)
-		dev_err(&pdev->dev, "could not register clock provider: %s: %d\n", pdev->name, r);
-
-	return r;
 }
 
-static const struct of_device_id of_match_clk_mt8173[] = {
-	{ .compatible = "mediatek,mt8173-apmixedsys", .data = clk_mt8173_apmixed_probe },
-	{ .compatible = "mediatek,mt8173-infracfg", .data = clk_mt8173_infra_probe },
-	{ .compatible = "mediatek,mt8173-topckgen", .data = clk_mt8173_topck_probe },
-	{ .compatible = "mediatek,mt8173-pericfg", .data = clk_mt8173_peri_probe },
-	{ /* sentinel */ }
-};
-
-static struct platform_driver clk_mt8173_drv = {
-	.probe = clk_mt8173_probe,
+static struct platform_driver clk_mt8173_topckgen_drv = {
 	.driver = {
-		.name = "clk-mt8173",
-		.of_match_table = of_match_clk_mt8173,
+		.name = "clk-mt8173-topckgen",
+		.of_match_table = of_match_clk_mt8173_topckgen,
 	},
+	.probe = clk_mt8173_topckgen_probe,
+	.remove = clk_mt8173_topckgen_remove,
 };
+module_platform_driver(clk_mt8173_topckgen_drv);
 
-static int __init clk_mt8173_init(void)
-{
-	int ret = platform_driver_register(&clk_mt8173_drv);
-
-	if (ret)
-		return ret;
-	return platform_driver_register(&clk_mt8173_simple_drv);
-}
-arch_initcall(clk_mt8173_init);
+MODULE_DESCRIPTION("MediaTek MT8173 topckgen clocks driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/clk/mediatek/clk-mt8173-vdecsys.c b/drivers/clk/mediatek/clk-mt8173-vdecsys.c
new file mode 100644
index 000000000000..5105b8e0969d
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8173-vdecsys.c
@@ -0,0 +1,57 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2014 MediaTek Inc.
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
+ */
+
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+#define GATE_VDEC(_id, _name, _parent, _regs)			\
+		GATE_MTK(_id, _name, _parent, _regs, 0,		\
+			 &mtk_clk_gate_ops_setclr_inv)
+
+static const struct mtk_gate_regs vdec0_cg_regs = {
+	.set_ofs = 0x0000,
+	.clr_ofs = 0x0004,
+	.sta_ofs = 0x0000,
+};
+
+static const struct mtk_gate_regs vdec1_cg_regs = {
+	.set_ofs = 0x0008,
+	.clr_ofs = 0x000c,
+	.sta_ofs = 0x0008,
+};
+
+static const struct mtk_gate vdec_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "vdec_dummy"),
+	GATE_VDEC(CLK_VDEC_CKEN, "vdec_cken", "vdec_sel", &vdec0_cg_regs),
+	GATE_VDEC(CLK_VDEC_LARB_CKEN, "vdec_larb_cken", "mm_sel", &vdec1_cg_regs),
+};
+
+static const struct mtk_clk_desc vdec_desc = {
+	.clks = vdec_clks,
+	.num_clks = ARRAY_SIZE(vdec_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8173_vdecsys[] = {
+	{ .compatible = "mediatek,mt8173-vdecsys", .data = &vdec_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8173_vdecsys_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8173-vdecsys",
+		.of_match_table = of_match_clk_mt8173_vdecsys,
+	},
+};
+module_platform_driver(clk_mt8173_vdecsys_drv);
+
+MODULE_DESCRIPTION("MediaTek MT8173 vdecsys clocks driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/clk/mediatek/clk-mt8173-vencsys.c b/drivers/clk/mediatek/clk-mt8173-vencsys.c
new file mode 100644
index 000000000000..ff4f1cb735de
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8173-vencsys.c
@@ -0,0 +1,64 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2014 MediaTek Inc.
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
+ */
+
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs venc_cg_regs = {
+	.set_ofs = 0x4,
+	.clr_ofs = 0x8,
+	.sta_ofs = 0x0,
+};
+
+#define GATE_VENC(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &venc_cg_regs, _shift, &mtk_clk_gate_ops_setclr_inv)
+
+static const struct mtk_gate venc_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "venc_dummy"),
+	GATE_VENC(CLK_VENC_CKE0, "venc_cke0", "mm_sel", 0),
+	GATE_VENC(CLK_VENC_CKE1, "venc_cke1", "venc_sel", 4),
+	GATE_VENC(CLK_VENC_CKE2, "venc_cke2", "venc_sel", 8),
+	GATE_VENC(CLK_VENC_CKE3, "venc_cke3", "venc_sel", 12),
+};
+
+static const struct mtk_gate venclt_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "venclt_dummy"),
+	GATE_VENC(CLK_VENCLT_CKE0, "venclt_cke0", "mm_sel", 0),
+	GATE_VENC(CLK_VENCLT_CKE1, "venclt_cke1", "venclt_sel", 4),
+};
+
+static const struct mtk_clk_desc venc_desc = {
+	.clks = venc_clks,
+	.num_clks = ARRAY_SIZE(venc_clks),
+};
+
+static const struct mtk_clk_desc venc_lt_desc = {
+	.clks = venclt_clks,
+	.num_clks = ARRAY_SIZE(venclt_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8173_vencsys[] = {
+	{ .compatible = "mediatek,mt8173-vencsys", .data = &venc_desc },
+	{ .compatible = "mediatek,mt8173-vencltsys", .data = &venc_lt_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8173_vencsys_drv = {
+	.driver = {
+		.name = "clk-mt8173-vencsys",
+		.of_match_table = of_match_clk_mt8173_vencsys,
+	},
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+};
+module_platform_driver(clk_mt8173_vencsys_drv);
+
+MODULE_DESCRIPTION("MediaTek MT8173 vencsys clocks driver");
+MODULE_LICENSE("GPL");
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:45 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:45 +0100
Subject: [PATCH v1 13/25] clk: mediatek: Switch to mtk_clk_simple_probe() where possible
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-14-angelogioacchino.delregno@collabora.com>

mtk_clk_simple_probe() is a function that registers mtk gate clocks
and, if reset data is present, a reset controller and across all of
the MTK clock drivers, such a function is duplicated many times:
switch to the common mtk_clk_simple_probe() function for all of the
clock drivers that are registering as platform drivers.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt2701-aud.c   | 26 +++----
 drivers/clk/mediatek/clk-mt2701-eth.c   | 34 +++------
 drivers/clk/mediatek/clk-mt2701-g3d.c   | 56 +++-----------
 drivers/clk/mediatek/clk-mt2701-hif.c   | 36 +++------
 drivers/clk/mediatek/clk-mt2712.c       | 83 ++++++++-------------
 drivers/clk/mediatek/clk-mt6779.c       | 42 ++++++-----
 drivers/clk/mediatek/clk-mt7622-aud.c   | 49 +++----------
 drivers/clk/mediatek/clk-mt7622-eth.c   | 82 ++++-----------------
 drivers/clk/mediatek/clk-mt7622-hif.c   | 85 ++++-----------------
 drivers/clk/mediatek/clk-mt7629-hif.c   | 85 ++++-----------------
 drivers/clk/mediatek/clk-mt8183-audio.c | 19 +++--
 drivers/clk/mediatek/clk-mt8183.c       | 75 ++++++++-----------
 drivers/clk/mediatek/clk-mt8192-aud.c   | 25 +++----
 drivers/clk/mediatek/clk-mt8192.c       | 98 ++++++++-----------------
 14 files changed, 236 insertions(+), 559 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt2701-aud.c b/drivers/clk/mediatek/clk-mt2701-aud.c
index ab13ab618fb5..1fd6d96b34dc 100644
--- a/drivers/clk/mediatek/clk-mt2701-aud.c
+++ b/drivers/clk/mediatek/clk-mt2701-aud.c
@@ -76,6 +76,7 @@ static const struct mtk_gate_regs audio3_cg_regs = {
 };
 
 static const struct mtk_gate audio_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "aud_dummy"),
 	/* AUDIO0 */
 	GATE_AUDIO0(CLK_AUD_AFE, "audio_afe", "aud_intbus_sel", 2),
 	GATE_AUDIO0(CLK_AUD_HDMI, "audio_hdmi", "audpll_sel", 20),
@@ -138,29 +139,26 @@ static const struct mtk_gate audio_clks[] = {
 	GATE_AUDIO3(CLK_AUD_MEM_ASRC5, "audio_mem_asrc5", "asm_h_sel", 14),
 };
 
+static const struct mtk_clk_desc audio_desc = {
+	.clks = audio_clks,
+	.num_clks = ARRAY_SIZE(audio_clks),
+};
+
 static const struct of_device_id of_match_clk_mt2701_aud[] = {
-	{ .compatible = "mediatek,mt2701-audsys", },
-	{}
+	{ .compatible = "mediatek,mt2701-audsys", .data = &audio_desc },
+	{ /* sentinel */ }
 };
 
 static int clk_mt2701_aud_probe(struct platform_device *pdev)
 {
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
 	int r;
 
-	clk_data = mtk_alloc_clk_data(CLK_AUD_NR);
-
-	mtk_clk_register_gates(node, audio_clks, ARRAY_SIZE(audio_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	r = mtk_clk_simple_probe(pdev);
 	if (r) {
 		dev_err(&pdev->dev,
 			"could not register clock provider: %s: %d\n",
 			pdev->name, r);
-
-		goto err_clk_provider;
+		return r;
 	}
 
 	r = devm_of_platform_populate(&pdev->dev);
@@ -170,13 +168,13 @@ static int clk_mt2701_aud_probe(struct platform_device *pdev)
 	return 0;
 
 err_plat_populate:
-	of_clk_del_provider(node);
-err_clk_provider:
+	mtk_clk_simple_remove(pdev);
 	return r;
 }
 
 static struct platform_driver clk_mt2701_aud_drv = {
 	.probe = clk_mt2701_aud_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt2701-aud",
 		.of_match_table = of_match_clk_mt2701_aud,
diff --git a/drivers/clk/mediatek/clk-mt2701-eth.c b/drivers/clk/mediatek/clk-mt2701-eth.c
index 9670e1e170f2..bd3fddf53ce1 100644
--- a/drivers/clk/mediatek/clk-mt2701-eth.c
+++ b/drivers/clk/mediatek/clk-mt2701-eth.c
@@ -26,6 +26,7 @@ static const struct mtk_gate_regs eth_cg_regs = {
 	}
 
 static const struct mtk_gate eth_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "eth_dummy"),
 	GATE_ETH(CLK_ETHSYS_HSDMA, "hsdma_clk", "ethif_sel", 5),
 	GATE_ETH(CLK_ETHSYS_ESW, "esw_clk", "ethpll_500m_ck", 6),
 	GATE_ETH(CLK_ETHSYS_GP2, "gp2_clk", "trgpll", 7),
@@ -44,35 +45,20 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(rst_ofs),
 };
 
+static const struct mtk_clk_desc eth_desc = {
+	.clks = eth_clks,
+	.num_clks = ARRAY_SIZE(eth_clks),
+	.rst_desc = &clk_rst_desc,
+};
+
 static const struct of_device_id of_match_clk_mt2701_eth[] = {
-	{ .compatible = "mediatek,mt2701-ethsys", },
+	{ .compatible = "mediatek,mt2701-ethsys", .data = &eth_desc },
 	{}
 };
 
-static int clk_mt2701_eth_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_ETHSYS_NR);
-
-	mtk_clk_register_gates(node, eth_clks, ARRAY_SIZE(eth_clks),
-						clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return r;
-}
-
 static struct platform_driver clk_mt2701_eth_drv = {
-	.probe = clk_mt2701_eth_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt2701-eth",
 		.of_match_table = of_match_clk_mt2701_eth,
diff --git a/drivers/clk/mediatek/clk-mt2701-g3d.c b/drivers/clk/mediatek/clk-mt2701-g3d.c
index 11391b144267..499a170ba5f9 100644
--- a/drivers/clk/mediatek/clk-mt2701-g3d.c
+++ b/drivers/clk/mediatek/clk-mt2701-g3d.c
@@ -32,6 +32,7 @@ static const struct mtk_gate_regs g3d_cg_regs = {
 };
 
 static const struct mtk_gate g3d_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "g3d_dummy"),
 	GATE_G3D(CLK_G3DSYS_CORE, "g3d_core", "mfg_sel", 0),
 };
 
@@ -43,57 +44,20 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(rst_ofs),
 };
 
-static int clk_mt2701_g3dsys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_G3DSYS_NR);
-
-	mtk_clk_register_gates(node, g3d_clks, ARRAY_SIZE(g3d_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return r;
-}
+static const struct mtk_clk_desc g3d_desc = {
+	.clks = g3d_clks,
+	.num_clks = ARRAY_SIZE(g3d_clks),
+	.rst_desc = &clk_rst_desc,
+};
 
 static const struct of_device_id of_match_clk_mt2701_g3d[] = {
-	{
-		.compatible = "mediatek,mt2701-g3dsys",
-		.data = clk_mt2701_g3dsys_init,
-	}, {
-		/* sentinel */
-	}
+	{ .compatible = "mediatek,mt2701-g3dsys", .data = &g3d_desc },
+	{ /* sentinel */ }
 };
 
-static int clk_mt2701_g3d_probe(struct platform_device *pdev)
-{
-	int (*clk_init)(struct platform_device *);
-	int r;
-
-	clk_init = of_device_get_match_data(&pdev->dev);
-	if (!clk_init)
-		return -EINVAL;
-
-	r = clk_init(pdev);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	return r;
-}
-
 static struct platform_driver clk_mt2701_g3d_drv = {
-	.probe = clk_mt2701_g3d_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt2701-g3d",
 		.of_match_table = of_match_clk_mt2701_g3d,
diff --git a/drivers/clk/mediatek/clk-mt2701-hif.c b/drivers/clk/mediatek/clk-mt2701-hif.c
index c14c0bb10f88..5d113838b3e4 100644
--- a/drivers/clk/mediatek/clk-mt2701-hif.c
+++ b/drivers/clk/mediatek/clk-mt2701-hif.c
@@ -26,6 +26,7 @@ static const struct mtk_gate_regs hif_cg_regs = {
 	}
 
 static const struct mtk_gate hif_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "hif_dummy"),
 	GATE_HIF(CLK_HIFSYS_USB0PHY, "usb0_phy_clk", "ethpll_500m_ck", 21),
 	GATE_HIF(CLK_HIFSYS_USB1PHY, "usb1_phy_clk", "ethpll_500m_ck", 22),
 	GATE_HIF(CLK_HIFSYS_PCIE0, "pcie0_clk", "ethpll_500m_ck", 24),
@@ -41,37 +42,20 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(rst_ofs),
 };
 
+static const struct mtk_clk_desc hif_desc = {
+	.clks = hif_clks,
+	.num_clks = ARRAY_SIZE(hif_clks),
+	.rst_desc = &clk_rst_desc,
+};
+
 static const struct of_device_id of_match_clk_mt2701_hif[] = {
-	{ .compatible = "mediatek,mt2701-hifsys", },
+	{ .compatible = "mediatek,mt2701-hifsys", .data = &hif_desc },
 	{}
 };
 
-static int clk_mt2701_hif_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_HIFSYS_NR);
-
-	mtk_clk_register_gates(node, hif_clks, ARRAY_SIZE(hif_clks),
-						clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r) {
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-		return r;
-	}
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return 0;
-}
-
 static struct platform_driver clk_mt2701_hif_drv = {
-	.probe = clk_mt2701_hif_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt2701-hif",
 		.of_match_table = of_match_clk_mt2701_hif,
diff --git a/drivers/clk/mediatek/clk-mt2712.c b/drivers/clk/mediatek/clk-mt2712.c
index 5cadcf6ca9b7..c4bee791f570 100644
--- a/drivers/clk/mediatek/clk-mt2712.c
+++ b/drivers/clk/mediatek/clk-mt2712.c
@@ -1362,50 +1362,6 @@ static int clk_mt2712_top_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int clk_mt2712_infra_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
-
-	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-
-	if (r != 0)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc[0]);
-
-	return r;
-}
-
-static int clk_mt2712_peri_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
-
-	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-			clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-
-	if (r != 0)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc[1]);
-
-	return r;
-}
-
 static int clk_mt2712_mcu_probe(struct platform_device *pdev)
 {
 	struct clk_hw_onecell_data *clk_data;
@@ -1440,12 +1396,6 @@ static const struct of_device_id of_match_clk_mt2712[] = {
 	}, {
 		.compatible = "mediatek,mt2712-topckgen",
 		.data = clk_mt2712_top_probe,
-	}, {
-		.compatible = "mediatek,mt2712-infracfg",
-		.data = clk_mt2712_infra_probe,
-	}, {
-		.compatible = "mediatek,mt2712-pericfg",
-		.data = clk_mt2712_peri_probe,
 	}, {
 		.compatible = "mediatek,mt2712-mcucfg",
 		.data = clk_mt2712_mcu_probe,
@@ -1472,6 +1422,33 @@ static int clk_mt2712_probe(struct platform_device *pdev)
 	return r;
 }
 
+static const struct mtk_clk_desc infra_desc = {
+	.clks = infra_clks,
+	.num_clks = ARRAY_SIZE(infra_clks),
+	.rst_desc = &clk_rst_desc[0],
+};
+
+static const struct mtk_clk_desc peri_desc = {
+	.clks = peri_clks,
+	.num_clks = ARRAY_SIZE(peri_clks),
+	.rst_desc = &clk_rst_desc[1],
+};
+
+static const struct of_device_id of_match_clk_mt2712_simple[] = {
+	{ .compatible = "mediatek,mt2712-infracfg", .data = &infra_desc },
+	{ .compatible = "mediatek,mt2712-pericfg", .data = &peri_desc, },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt2712_simple_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt2712-simple",
+		.of_match_table = of_match_clk_mt2712_simple,
+	},
+};
+
 static struct platform_driver clk_mt2712_drv = {
 	.probe = clk_mt2712_probe,
 	.driver = {
@@ -1482,7 +1459,11 @@ static struct platform_driver clk_mt2712_drv = {
 
 static int __init clk_mt2712_init(void)
 {
-	return platform_driver_register(&clk_mt2712_drv);
+	int ret = platform_driver_register(&clk_mt2712_drv);
+
+	if (ret)
+		return ret;
+	return platform_driver_register(&clk_mt2712_simple_drv);
 }
 
 arch_initcall(clk_mt2712_init);
diff --git a/drivers/clk/mediatek/clk-mt6779.c b/drivers/clk/mediatek/clk-mt6779.c
index 6d1fb19be77b..479fb38766ea 100644
--- a/drivers/clk/mediatek/clk-mt6779.c
+++ b/drivers/clk/mediatek/clk-mt6779.c
@@ -880,6 +880,7 @@ static const struct mtk_gate_regs infra3_cg_regs = {
 		&mtk_clk_gate_ops_setclr)
 
 static const struct mtk_gate infra_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "ifa_dummy"),
 	/* INFRA0 */
 	GATE_INFRA0(CLK_INFRA_PMIC_TMR, "infra_pmic_tmr",
 		    "axi_sel", 0),
@@ -1256,19 +1257,6 @@ static int clk_mt6779_top_probe(struct platform_device *pdev)
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
 
-static int clk_mt6779_infra_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
-
-	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       clk_data, &pdev->dev);
-
-	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-}
-
 static const struct of_device_id of_match_clk_mt6779[] = {
 	{
 		.compatible = "mediatek,mt6779-apmixed",
@@ -1276,9 +1264,6 @@ static const struct of_device_id of_match_clk_mt6779[] = {
 	}, {
 		.compatible = "mediatek,mt6779-topckgen",
 		.data = clk_mt6779_top_probe,
-	}, {
-		.compatible = "mediatek,mt6779-infracfg_ao",
-		.data = clk_mt6779_infra_probe,
 	}, {
 		/* sentinel */
 	}
@@ -1302,6 +1287,25 @@ static int clk_mt6779_probe(struct platform_device *pdev)
 	return r;
 }
 
+static const struct mtk_clk_desc infra_desc = {
+	.clks = infra_clks,
+	.num_clks = ARRAY_SIZE(infra_clks),
+};
+
+static const struct of_device_id of_match_clk_mt6779_infra[] = {
+	{ .compatible = "mediatek,mt6779-infracfg_ao", .data = &infra_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt6779_infra_drv  = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt6779-infra",
+		.of_match_table = of_match_clk_mt6779_infra,
+	},
+};
+
 static struct platform_driver clk_mt6779_drv = {
 	.probe = clk_mt6779_probe,
 	.driver = {
@@ -1312,7 +1316,11 @@ static struct platform_driver clk_mt6779_drv = {
 
 static int __init clk_mt6779_init(void)
 {
-	return platform_driver_register(&clk_mt6779_drv);
+	int ret = platform_driver_register(&clk_mt6779_drv);
+
+	if (ret)
+		return ret;
+	return platform_driver_register(&clk_mt6779_infra_drv);
 }
 
 arch_initcall(clk_mt6779_init);
diff --git a/drivers/clk/mediatek/clk-mt7622-aud.c b/drivers/clk/mediatek/clk-mt7622-aud.c
index d0379d8704af..86464cc750e2 100644
--- a/drivers/clk/mediatek/clk-mt7622-aud.c
+++ b/drivers/clk/mediatek/clk-mt7622-aud.c
@@ -130,24 +130,21 @@ static const struct mtk_gate audio_clks[] = {
 	GATE_AUDIO3(CLK_AUDIO_MEM_ASRC5, "audio_mem_asrc5", "asm_h_sel", 14),
 };
 
-static int clk_mt7622_audiosys_init(struct platform_device *pdev)
+static const struct mtk_clk_desc audio_desc = {
+	.clks = audio_clks,
+	.num_clks = ARRAY_SIZE(audio_clks),
+};
+
+static int clk_mt7622_aud_probe(struct platform_device *pdev)
 {
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
 	int r;
 
-	clk_data = mtk_alloc_clk_data(CLK_AUDIO_NR_CLK);
-
-	mtk_clk_register_gates(node, audio_clks, ARRAY_SIZE(audio_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	r = mtk_clk_simple_probe(pdev);
 	if (r) {
 		dev_err(&pdev->dev,
 			"could not register clock provider: %s: %d\n",
 			pdev->name, r);
-
-		goto err_clk_provider;
+		return r;
 	}
 
 	r = devm_of_platform_populate(&pdev->dev);
@@ -157,40 +154,18 @@ static int clk_mt7622_audiosys_init(struct platform_device *pdev)
 	return 0;
 
 err_plat_populate:
-	of_clk_del_provider(node);
-err_clk_provider:
+	mtk_clk_simple_remove(pdev);
 	return r;
 }
 
 static const struct of_device_id of_match_clk_mt7622_aud[] = {
-	{
-		.compatible = "mediatek,mt7622-audsys",
-		.data = clk_mt7622_audiosys_init,
-	}, {
-		/* sentinel */
-	}
+	{ .compatible = "mediatek,mt7622-audsys", .data = &audio_desc },
+	{ /* sentinel */ }
 };
 
-static int clk_mt7622_aud_probe(struct platform_device *pdev)
-{
-	int (*clk_init)(struct platform_device *);
-	int r;
-
-	clk_init = of_device_get_match_data(&pdev->dev);
-	if (!clk_init)
-		return -EINVAL;
-
-	r = clk_init(pdev);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	return r;
-}
-
 static struct platform_driver clk_mt7622_aud_drv = {
 	.probe = clk_mt7622_aud_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt7622-aud",
 		.of_match_table = of_match_clk_mt7622_aud,
diff --git a/drivers/clk/mediatek/clk-mt7622-eth.c b/drivers/clk/mediatek/clk-mt7622-eth.c
index 9b4a26ca0f44..7dd0cec802f7 100644
--- a/drivers/clk/mediatek/clk-mt7622-eth.c
+++ b/drivers/clk/mediatek/clk-mt7622-eth.c
@@ -73,80 +73,26 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(rst_ofs),
 };
 
-static int clk_mt7622_ethsys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_ETH_NR_CLK);
-
-	mtk_clk_register_gates(node, eth_clks, ARRAY_SIZE(eth_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return r;
-}
-
-static int clk_mt7622_sgmiisys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_SGMII_NR_CLK);
-
-	mtk_clk_register_gates(node, sgmii_clks, ARRAY_SIZE(sgmii_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
+static const struct mtk_clk_desc eth_desc = {
+	.clks = eth_clks,
+	.num_clks = ARRAY_SIZE(eth_clks),
+	.rst_desc = &clk_rst_desc,
+};
 
-	return r;
-}
+static const struct mtk_clk_desc sgmii_desc = {
+	.clks = eth_clks,
+	.num_clks = ARRAY_SIZE(sgmii_clks),
+};
 
 static const struct of_device_id of_match_clk_mt7622_eth[] = {
-	{
-		.compatible = "mediatek,mt7622-ethsys",
-		.data = clk_mt7622_ethsys_init,
-	}, {
-		.compatible = "mediatek,mt7622-sgmiisys",
-		.data = clk_mt7622_sgmiisys_init,
-	}, {
-		/* sentinel */
-	}
+	{ .compatible = "mediatek,mt7622-ethsys", .data = &eth_desc },
+	{ .compatible = "mediatek,mt7622-sgmiisys", .data = &sgmii_desc },
+	{ /* sentinel */ }
 };
 
-static int clk_mt7622_eth_probe(struct platform_device *pdev)
-{
-	int (*clk_init)(struct platform_device *);
-	int r;
-
-	clk_init = of_device_get_match_data(&pdev->dev);
-	if (!clk_init)
-		return -EINVAL;
-
-	r = clk_init(pdev);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	return r;
-}
-
 static struct platform_driver clk_mt7622_eth_drv = {
-	.probe = clk_mt7622_eth_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt7622-eth",
 		.of_match_table = of_match_clk_mt7622_eth,
diff --git a/drivers/clk/mediatek/clk-mt7622-hif.c b/drivers/clk/mediatek/clk-mt7622-hif.c
index 8cf37f75ca77..ab5cad0c2b1c 100644
--- a/drivers/clk/mediatek/clk-mt7622-hif.c
+++ b/drivers/clk/mediatek/clk-mt7622-hif.c
@@ -84,82 +84,27 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(rst_ofs),
 };
 
-static int clk_mt7622_ssusbsys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_SSUSB_NR_CLK);
-
-	mtk_clk_register_gates(node, ssusb_clks, ARRAY_SIZE(ssusb_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return r;
-}
-
-static int clk_mt7622_pciesys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_PCIE_NR_CLK);
-
-	mtk_clk_register_gates(node, pcie_clks, ARRAY_SIZE(pcie_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
+static const struct mtk_clk_desc ssusb_desc = {
+	.clks = ssusb_clks,
+	.num_clks = ARRAY_SIZE(ssusb_clks),
+	.rst_desc = &clk_rst_desc,
+};
 
-	return r;
-}
+static const struct mtk_clk_desc pcie_desc = {
+	.clks = pcie_clks,
+	.num_clks = ARRAY_SIZE(pcie_clks),
+	.rst_desc = &clk_rst_desc,
+};
 
 static const struct of_device_id of_match_clk_mt7622_hif[] = {
-	{
-		.compatible = "mediatek,mt7622-pciesys",
-		.data = clk_mt7622_pciesys_init,
-	}, {
-		.compatible = "mediatek,mt7622-ssusbsys",
-		.data = clk_mt7622_ssusbsys_init,
-	}, {
-		/* sentinel */
-	}
+	{ .compatible = "mediatek,mt7622-pciesys", .data = &pcie_desc },
+	{ .compatible = "mediatek,mt7622-ssusbsys", .data = &ssusb_desc },
+	{ /* sentinel */ }
 };
 
-static int clk_mt7622_hif_probe(struct platform_device *pdev)
-{
-	int (*clk_init)(struct platform_device *);
-	int r;
-
-	clk_init = of_device_get_match_data(&pdev->dev);
-	if (!clk_init)
-		return -EINVAL;
-
-	r = clk_init(pdev);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	return r;
-}
-
 static struct platform_driver clk_mt7622_hif_drv = {
-	.probe = clk_mt7622_hif_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt7622-hif",
 		.of_match_table = of_match_clk_mt7622_hif,
diff --git a/drivers/clk/mediatek/clk-mt7629-hif.c b/drivers/clk/mediatek/clk-mt7629-hif.c
index 44fbd88b4647..c3eb09ea6036 100644
--- a/drivers/clk/mediatek/clk-mt7629-hif.c
+++ b/drivers/clk/mediatek/clk-mt7629-hif.c
@@ -79,82 +79,27 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(rst_ofs),
 };
 
-static int clk_mt7629_ssusbsys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_SSUSB_NR_CLK);
-
-	mtk_clk_register_gates(node, ssusb_clks, ARRAY_SIZE(ssusb_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return r;
-}
-
-static int clk_mt7629_pciesys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_PCIE_NR_CLK);
-
-	mtk_clk_register_gates(node, pcie_clks, ARRAY_SIZE(pcie_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
+static const struct mtk_clk_desc ssusb_desc = {
+	.clks = ssusb_clks,
+	.num_clks = ARRAY_SIZE(ssusb_clks),
+	.rst_desc = &clk_rst_desc,
+};
 
-	return r;
-}
+static const struct mtk_clk_desc pcie_desc = {
+	.clks = pcie_clks,
+	.num_clks = ARRAY_SIZE(pcie_clks),
+	.rst_desc = &clk_rst_desc,
+};
 
 static const struct of_device_id of_match_clk_mt7629_hif[] = {
-	{
-		.compatible = "mediatek,mt7629-pciesys",
-		.data = clk_mt7629_pciesys_init,
-	}, {
-		.compatible = "mediatek,mt7629-ssusbsys",
-		.data = clk_mt7629_ssusbsys_init,
-	}, {
-		/* sentinel */
-	}
+	{ .compatible = "mediatek,mt7629-pciesys", .data = &pcie_desc },
+	{ .compatible = "mediatek,mt7629-ssusbsys", .data = &ssusb_desc },
+	{ /* sentinel */ }
 };
 
-static int clk_mt7629_hif_probe(struct platform_device *pdev)
-{
-	int (*clk_init)(struct platform_device *);
-	int r;
-
-	clk_init = of_device_get_match_data(&pdev->dev);
-	if (!clk_init)
-		return -EINVAL;
-
-	r = clk_init(pdev);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	return r;
-}
-
 static struct platform_driver clk_mt7629_hif_drv = {
-	.probe = clk_mt7629_hif_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt7629-hif",
 		.of_match_table = of_match_clk_mt7629_hif,
diff --git a/drivers/clk/mediatek/clk-mt8183-audio.c b/drivers/clk/mediatek/clk-mt8183-audio.c
index f4c6448b6f74..f5600450b4d1 100644
--- a/drivers/clk/mediatek/clk-mt8183-audio.c
+++ b/drivers/clk/mediatek/clk-mt8183-audio.c
@@ -67,35 +67,34 @@ static const struct mtk_gate audio_clks[] = {
 		20),
 };
 
+static const struct mtk_clk_desc audio_desc = {
+	.clks = audio_clks,
+	.num_clks = ARRAY_SIZE(audio_clks),
+};
+
 static int clk_mt8183_audio_probe(struct platform_device *pdev)
 {
-	struct clk_hw_onecell_data *clk_data;
 	int r;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_AUDIO_NR_CLK);
-
-	mtk_clk_register_gates(node, audio_clks, ARRAY_SIZE(audio_clks),
-			       clk_data, &pdev->dev);
 
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	r = mtk_clk_simple_probe(pdev);
 	if (r)
 		return r;
 
 	r = devm_of_platform_populate(&pdev->dev);
 	if (r)
-		of_clk_del_provider(node);
+		mtk_clk_simple_remove(pdev);
 
 	return r;
 }
 
 static const struct of_device_id of_match_clk_mt8183_audio[] = {
-	{ .compatible = "mediatek,mt8183-audiosys", },
+	{ .compatible = "mediatek,mt8183-audiosys", .data = &audio_desc },
 	{}
 };
 
 static struct platform_driver clk_mt8183_audio_drv = {
 	.probe = clk_mt8183_audio_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt8183-audio",
 		.of_match_table = of_match_clk_mt8183_audio,
diff --git a/drivers/clk/mediatek/clk-mt8183.c b/drivers/clk/mediatek/clk-mt8183.c
index 10a82b542376..f1d84c0730d5 100644
--- a/drivers/clk/mediatek/clk-mt8183.c
+++ b/drivers/clk/mediatek/clk-mt8183.c
@@ -1187,43 +1187,6 @@ static int clk_mt8183_top_probe(struct platform_device *pdev)
 				      top_clk_data);
 }
 
-static int clk_mt8183_infra_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
-
-	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-		clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r) {
-		dev_err(&pdev->dev,
-			"%s(): could not register clock provider: %d\n",
-			__func__, r);
-		return r;
-	}
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return r;
-}
-
-static int clk_mt8183_peri_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
-
-	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-			       clk_data, &pdev->dev);
-
-	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-}
-
 static int clk_mt8183_mcu_probe(struct platform_device *pdev)
 {
 	struct clk_hw_onecell_data *clk_data;
@@ -1249,12 +1212,6 @@ static const struct of_device_id of_match_clk_mt8183[] = {
 	}, {
 		.compatible = "mediatek,mt8183-topckgen",
 		.data = clk_mt8183_top_probe,
-	}, {
-		.compatible = "mediatek,mt8183-infracfg",
-		.data = clk_mt8183_infra_probe,
-	}, {
-		.compatible = "mediatek,mt8183-pericfg",
-		.data = clk_mt8183_peri_probe,
 	}, {
 		.compatible = "mediatek,mt8183-mcucfg",
 		.data = clk_mt8183_mcu_probe,
@@ -1281,6 +1238,32 @@ static int clk_mt8183_probe(struct platform_device *pdev)
 	return r;
 }
 
+static const struct mtk_clk_desc infra_desc = {
+	.clks = infra_clks,
+	.num_clks = ARRAY_SIZE(infra_clks),
+	.rst_desc = &clk_rst_desc,
+};
+
+static const struct mtk_clk_desc peri_desc = {
+	.clks = peri_clks,
+	.num_clks = ARRAY_SIZE(peri_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8183_simple[] = {
+	{ .compatible = "mediatek,mt8183-infracfg", .data = &infra_desc },
+	{ .compatible = "mediatek,mt8183-pericfg", .data = &peri_desc, },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8183_simple_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8183-simple",
+		.of_match_table = of_match_clk_mt8183_simple,
+	},
+};
+
 static struct platform_driver clk_mt8183_drv = {
 	.probe = clk_mt8183_probe,
 	.driver = {
@@ -1291,7 +1274,11 @@ static struct platform_driver clk_mt8183_drv = {
 
 static int __init clk_mt8183_init(void)
 {
-	return platform_driver_register(&clk_mt8183_drv);
+	int ret = platform_driver_register(&clk_mt8183_drv);
+
+	if (ret)
+		return ret;
+	return platform_driver_register(&clk_mt8183_simple_drv);
 }
 
 arch_initcall(clk_mt8183_init);
diff --git a/drivers/clk/mediatek/clk-mt8192-aud.c b/drivers/clk/mediatek/clk-mt8192-aud.c
index 3acadca2452a..d52f671e20ce 100644
--- a/drivers/clk/mediatek/clk-mt8192-aud.c
+++ b/drivers/clk/mediatek/clk-mt8192-aud.c
@@ -77,39 +77,34 @@ static const struct mtk_gate aud_clks[] = {
 	GATE_AUD2(CLK_AUD_I2S9_B, "aud_i2s9_b", "audio_sel", 4),
 };
 
+static const struct mtk_clk_desc aud_desc = {
+	.clks = aud_clks,
+	.num_clks = ARRAY_SIZE(aud_clks),
+};
+
 static int clk_mt8192_aud_probe(struct platform_device *pdev)
 {
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
 	int r;
 
-	clk_data = mtk_alloc_clk_data(CLK_AUD_NR_CLK);
-	if (!clk_data)
-		return -ENOMEM;
-
-	r = mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks),
-				   clk_data, &pdev->dev);
-	if (r)
-		return r;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	r = mtk_clk_simple_probe(pdev);
 	if (r)
 		return r;
 
 	r = devm_of_platform_populate(&pdev->dev);
 	if (r)
-		of_clk_del_provider(node);
+		mtk_clk_simple_remove(pdev);
 
 	return r;
 }
 
 static const struct of_device_id of_match_clk_mt8192_aud[] = {
-	{ .compatible = "mediatek,mt8192-audsys", },
-	{}
+	{ .compatible = "mediatek,mt8192-audsys", .data = &aud_desc },
+	{ /* sentinel */ }
 };
 
 static struct platform_driver clk_mt8192_aud_drv = {
 	.probe = clk_mt8192_aud_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt8192-aud",
 		.of_match_table = of_match_clk_mt8192_aud,
diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index 3ca068a4c552..9a9d51bfb84d 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1158,66 +1158,6 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int clk_mt8192_infra_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
-	if (!clk_data)
-		return -ENOMEM;
-
-	r = mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-					    clk_data, &pdev->dev);
-	if (r)
-		goto free_clk_data;
-
-	r = mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-	if (r)
-		goto unregister_gates;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_gates;
-
-	return r;
-
-unregister_gates:
-	mtk_clk_unregister_gates(infra_clks, ARRAY_SIZE(infra_clks), clk_data);
-free_clk_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
-
-static int clk_mt8192_peri_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
-	if (!clk_data)
-		return -ENOMEM;
-
-	r = mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-					    clk_data, &pdev->dev);
-	if (r)
-		goto free_clk_data;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_gates;
-
-	return r;
-
-unregister_gates:
-	mtk_clk_unregister_gates(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
-free_clk_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
-
 static int clk_mt8192_apmixed_probe(struct platform_device *pdev)
 {
 	struct clk_hw_onecell_data *clk_data;
@@ -1255,12 +1195,6 @@ static const struct of_device_id of_match_clk_mt8192[] = {
 	}, {
 		.compatible = "mediatek,mt8192-topckgen",
 		.data = clk_mt8192_top_probe,
-	}, {
-		.compatible = "mediatek,mt8192-infracfg",
-		.data = clk_mt8192_infra_probe,
-	}, {
-		.compatible = "mediatek,mt8192-pericfg",
-		.data = clk_mt8192_peri_probe,
 	}, {
 		/* sentinel */
 	}
@@ -1282,6 +1216,32 @@ static int clk_mt8192_probe(struct platform_device *pdev)
 	return r;
 }
 
+static const struct mtk_clk_desc infra_desc = {
+	.clks = infra_clks,
+	.num_clks = ARRAY_SIZE(infra_clks),
+	.rst_desc = &clk_rst_desc,
+};
+
+static const struct mtk_clk_desc peri_desc = {
+	.clks = peri_clks,
+	.num_clks = ARRAY_SIZE(peri_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8192_simple[] = {
+	{ .compatible = "mediatek,mt8192-infracfg", .data = &infra_desc },
+	{ .compatible = "mediatek,mt8192-pericfg", .data = &peri_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8192_simple_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8192-simple",
+		.of_match_table = of_match_clk_mt8192_simple,
+	},
+};
+
 static struct platform_driver clk_mt8192_drv = {
 	.probe = clk_mt8192_probe,
 	.driver = {
@@ -1292,7 +1252,11 @@ static struct platform_driver clk_mt8192_drv = {
 
 static int __init clk_mt8192_init(void)
 {
-	return platform_driver_register(&clk_mt8192_drv);
+	int ret = platform_driver_register(&clk_mt8192_drv);
+
+	if (ret)
+		return ret;
+	return platform_driver_register(&clk_mt8192_simple_drv);
 }
 
 arch_initcall(clk_mt8192_init);
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:54 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:54 +0100
Subject: [PATCH v1 22/25] clk: mediatek: clk-mt8186-topckgen: Migrate to mtk_clk_simple_probe()
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-23-angelogioacchino.delregno@collabora.com>

As done with MT8192, migrate MT8186 topckgen away from a custom probe
function and use mtk_clk_simple_{probe, remove}().

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8186-topckgen.c | 101 ++++-----------------
 1 file changed, 19 insertions(+), 82 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8186-topckgen.c b/drivers/clk/mediatek/clk-mt8186-topckgen.c
index 63befb1f492d..0fba88adf9fa 100644
--- a/drivers/clk/mediatek/clk-mt8186-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8186-topckgen.c
@@ -681,11 +681,6 @@ static struct mtk_composite top_muxes[] = {
 			0x0320, 4, 0x0334, 8, 0),
 };
 
-static const struct of_device_id of_match_clk_mt8186_topck[] = {
-	{ .compatible = "mediatek,mt8186-topckgen", },
-	{}
-};
-
 /* Register mux notifier for MFG mux */
 static int clk_mt8186_reg_mfg_mux_notifier(struct device *dev, struct clk *clk)
 {
@@ -708,86 +703,28 @@ static int clk_mt8186_reg_mfg_mux_notifier(struct device *dev, struct clk *clk)
 	return devm_mtk_clk_mux_notifier_register(dev, clk, mfg_mux_nb);
 }
 
-static int clk_mt8186_topck_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-	void __iomem *base;
-
-	clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
-	if (!clk_data)
-		return -ENOMEM;
-
-	base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(base)) {
-		r = PTR_ERR(base);
-		goto free_top_data;
-	}
-
-	r = mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks),
-					clk_data);
-	if (r)
-		goto free_top_data;
-
-	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	if (r)
-		goto unregister_fixed_clks;
-
-	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
-				   &mt8186_clk_lock, clk_data, &pdev->dev);
-	if (r)
-		goto unregister_factors;
-
-	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-					&mt8186_clk_lock, clk_data, &pdev->dev);
-	if (r)
-		goto unregister_muxes;
-
-	r = clk_mt8186_reg_mfg_mux_notifier(&pdev->dev,
-					    clk_data->hws[CLK_TOP_MFG]->clk);
-	if (r)
-		goto unregister_composite_muxes;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_composite_muxes;
-
-	platform_set_drvdata(pdev, clk_data);
-
-	return r;
-
-unregister_composite_muxes:
-	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
-unregister_muxes:
-	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), clk_data);
-unregister_factors:
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-unregister_fixed_clks:
-	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), clk_data);
-free_top_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
-
-static int clk_mt8186_topck_remove(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
-	struct device_node *node = pdev->dev.of_node;
-
-	of_clk_del_provider(node);
-	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), clk_data);
-	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), clk_data);
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), clk_data);
-	mtk_free_clk_data(clk_data);
+static const struct mtk_clk_desc topck_desc = {
+	.fixed_clks = top_fixed_clks,
+	.num_fixed_clks = ARRAY_SIZE(top_fixed_clks),
+	.factor_clks = top_divs,
+	.num_factor_clks = ARRAY_SIZE(top_divs),
+	.mux_clks = top_mtk_muxes,
+	.num_mux_clks = ARRAY_SIZE(top_mtk_muxes),
+	.composite_clks = top_muxes,
+	.num_composite_clks = ARRAY_SIZE(top_muxes),
+	.clk_lock = &mt8186_clk_lock,
+	.clk_notifier_func = clk_mt8186_reg_mfg_mux_notifier,
+	.mfg_clk_idx = CLK_TOP_MFG,
+};
 
-	return 0;
-}
+static const struct of_device_id of_match_clk_mt8186_topck[] = {
+	{ .compatible = "mediatek,mt8186-topckgen", .data = &topck_desc },
+	{}
+};
 
 static struct platform_driver clk_mt8186_topck_drv = {
-	.probe = clk_mt8186_topck_probe,
-	.remove = clk_mt8186_topck_remove,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt8186-topck",
 		.of_match_table = of_match_clk_mt8186_topck,
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:55 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:55 +0100
Subject: [PATCH v1 23/25] clk: mediatek: clk-mt6795-topckgen: Migrate to mtk_clk_simple_probe()
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-24-angelogioacchino.delregno@collabora.com>

Migrate away from custom probe functions and use the commonized
mtk_clk_simple_{probe, remove}().

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt6795-topckgen.c | 84 ++++------------------
 1 file changed, 14 insertions(+), 70 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt6795-topckgen.c b/drivers/clk/mediatek/clk-mt6795-topckgen.c
index 19440fe5460d..e80fa588e309 100644
--- a/drivers/clk/mediatek/clk-mt6795-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt6795-topckgen.c
@@ -523,86 +523,30 @@ static struct mtk_composite top_aud_divs[] = {
 	DIV_GATE(CLK_TOP_APLL2_DIV5, "apll2_div5", "apll2_div4", 0x12c, 21, 0x12c, 4, 4),
 };
 
+static const struct mtk_clk_desc topck_desc = {
+	.fixed_clks = fixed_clks,
+	.num_fixed_clks = ARRAY_SIZE(fixed_clks),
+	.factor_clks = top_divs,
+	.num_factor_clks = ARRAY_SIZE(top_divs),
+	.mux_clks = top_muxes,
+	.num_mux_clks = ARRAY_SIZE(top_muxes),
+	.composite_clks = top_aud_divs,
+	.num_composite_clks = ARRAY_SIZE(top_aud_divs),
+	.clk_lock = &mt6795_top_clk_lock,
+};
 
 static const struct of_device_id of_match_clk_mt6795_topckgen[] = {
-	{ .compatible = "mediatek,mt6795-topckgen" },
+	{ .compatible = "mediatek,mt6795-topckgen", .data = &topck_desc },
 	{ /* sentinel */ }
 };
 
-static int clk_mt6795_topckgen_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	void __iomem *base;
-	int ret;
-
-	base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(base))
-		return PTR_ERR(base);
-
-	clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
-	if (!clk_data)
-		return -ENOMEM;
-
-	ret = mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
-	if (ret)
-		goto free_clk_data;
-
-	ret = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	if (ret)
-		goto unregister_fixed_clks;
-
-	ret = mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
-				     &mt6795_top_clk_lock, clk_data, &pdev->dev);
-	if (ret)
-		goto unregister_factors;
-
-	ret = mtk_clk_register_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs), base,
-					  &mt6795_top_clk_lock, clk_data, &pdev->dev);
-	if (ret)
-		goto unregister_muxes;
-
-	ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (ret)
-		goto unregister_composites;
-
-	return 0;
-
-unregister_composites:
-	mtk_clk_unregister_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs), clk_data);
-unregister_muxes:
-	mtk_clk_unregister_muxes(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
-unregister_factors:
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-unregister_fixed_clks:
-	mtk_clk_unregister_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
-free_clk_data:
-	mtk_free_clk_data(clk_data);
-	return ret;
-}
-
-static int clk_mt6795_topckgen_remove(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
-
-	of_clk_del_provider(node);
-	mtk_clk_unregister_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs), clk_data);
-	mtk_clk_unregister_muxes(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	mtk_clk_unregister_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
-	mtk_free_clk_data(clk_data);
-
-	return 0;
-}
-
 static struct platform_driver clk_mt6795_topckgen_drv = {
 	.driver = {
 		.name = "clk-mt6795-topckgen",
 		.of_match_table = of_match_clk_mt6795_topckgen,
 	},
-	.probe = clk_mt6795_topckgen_probe,
-	.remove = clk_mt6795_topckgen_remove,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 };
 module_platform_driver(clk_mt6795_topckgen_drv);
 
-- 
2.39.0



From krzysztof.kozlowski at linaro.org  Thu Dec 22 04:04:27 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Thu, 22 Dec 2022 13:04:27 +0100
Subject: [PATCH v1 1/3] dt-bindings: dsp: mediatek: Add mt8188 dsp
 compatible
In-Reply-To: <20221222072150.10627-2-tinghan.shen@mediatek.com>
References: <20221222072150.10627-1-tinghan.shen@mediatek.com>
 <20221222072150.10627-2-tinghan.shen@mediatek.com>
Message-ID: <c675a104-7ae6-59e0-f73a-aae4ef0eb05c@linaro.org>

On 22/12/2022 08:21, Tinghan Shen wrote:
> Add support of the single-core HiFi5 audio DSP on MediaTek MT8188 SoC
> for pre- and post- audio processing.
> 
> Signed-off-by: Tinghan Shen <tinghan.shen at mediatek.com>


Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Best regards,
Krzysztof



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:34 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:34 +0100
Subject: [PATCH v1 02/25] clk: mediatek: mt8192: Propagate struct device for gate clocks
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-3-angelogioacchino.delregno@collabora.com>

Convert instances of mtk_clk_register_gates() to use the newer
mtk_clk_register_gates_with_dev() to propagate struct device to
the clk framework.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8192.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index eff66ca6c6a7..991d78a71644 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1127,7 +1127,8 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_top_composites;
 
-	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), top_clk_data);
+	r = mtk_clk_register_gates_with_dev(node, top_clks, ARRAY_SIZE(top_clks),
+					    top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_adj_divs_composites;
 
@@ -1167,7 +1168,8 @@ static int clk_mt8192_infra_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks), clk_data);
+	r = mtk_clk_register_gates_with_dev(node, infra_clks, ARRAY_SIZE(infra_clks),
+					    clk_data, &pdev->dev);
 	if (r)
 		goto free_clk_data;
 
@@ -1198,7 +1200,8 @@ static int clk_mt8192_peri_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks), clk_data);
+	r = mtk_clk_register_gates_with_dev(node, peri_clks, ARRAY_SIZE(peri_clks),
+					    clk_data, &pdev->dev);
 	if (r)
 		goto free_clk_data;
 
@@ -1226,7 +1229,9 @@ static int clk_mt8192_apmixed_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
-	r = mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data);
+	r = mtk_clk_register_gates_with_dev(node, apmixed_clks,
+					    ARRAY_SIZE(apmixed_clks), clk_data,
+					    &pdev->dev);
 	if (r)
 		goto free_clk_data;
 
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:44 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:44 +0100
Subject: [PATCH v1 12/25] dt-bindings: clock: mt2701/mt6779: Add dummy clock with ID 0
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-13-angelogioacchino.delregno@collabora.com>

As done for MT8173 and as a preparation for clock controller drivers
cleanups, add a dummy clock with ID 0, allowing us to simplify
driver probe.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 include/dt-bindings/clock/mt2701-clk.h | 3 +++
 include/dt-bindings/clock/mt6779-clk.h | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/include/dt-bindings/clock/mt2701-clk.h b/include/dt-bindings/clock/mt2701-clk.h
index 6d531d5ae065..0ec2c81453b0 100644
--- a/include/dt-bindings/clock/mt2701-clk.h
+++ b/include/dt-bindings/clock/mt2701-clk.h
@@ -7,6 +7,9 @@
 #ifndef _DT_BINDINGS_CLK_MT2701_H
 #define _DT_BINDINGS_CLK_MT2701_H
 
+/* Dummy clock for backwards compatibility */
+#define CLK_DUMMY			0
+
 /* TOPCKGEN */
 #define CLK_TOP_SYSPLL				1
 #define CLK_TOP_SYSPLL_D2			2
diff --git a/include/dt-bindings/clock/mt6779-clk.h b/include/dt-bindings/clock/mt6779-clk.h
index b083139afbd2..478d4af33b2a 100644
--- a/include/dt-bindings/clock/mt6779-clk.h
+++ b/include/dt-bindings/clock/mt6779-clk.h
@@ -7,6 +7,9 @@
 #ifndef _DT_BINDINGS_CLK_MT6779_H
 #define _DT_BINDINGS_CLK_MT6779_H
 
+/* Dummy clock for backwards compatibility */
+#define CLK_DUMMY			0
+
 /* TOPCKGEN */
 #define CLK_TOP_AXI			1
 #define CLK_TOP_MM			2
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:38 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:38 +0100
Subject: [PATCH v1 06/25] clk: mediatek: clk-mux: Propagate struct device for mtk-mux
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-7-angelogioacchino.delregno@collabora.com>

Like done for other clocks, propagate struct device for mtk mux clocks
registered through clk-mux helpers to enable runtime pm support.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt6765.c          | 2 +-
 drivers/clk/mediatek/clk-mt6779.c          | 2 +-
 drivers/clk/mediatek/clk-mt6795-topckgen.c | 2 +-
 drivers/clk/mediatek/clk-mt7986-infracfg.c | 2 +-
 drivers/clk/mediatek/clk-mt7986-topckgen.c | 2 +-
 drivers/clk/mediatek/clk-mt8183.c          | 2 +-
 drivers/clk/mediatek/clk-mt8186-topckgen.c | 2 +-
 drivers/clk/mediatek/clk-mt8192.c          | 2 +-
 drivers/clk/mediatek/clk-mt8195-topckgen.c | 2 +-
 drivers/clk/mediatek/clk-mt8365.c          | 2 +-
 drivers/clk/mediatek/clk-mux.c             | 9 +++++----
 drivers/clk/mediatek/clk-mux.h             | 3 ++-
 12 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt6765.c b/drivers/clk/mediatek/clk-mt6765.c
index 7401693ef472..30d0fe9acb37 100644
--- a/drivers/clk/mediatek/clk-mt6765.c
+++ b/drivers/clk/mediatek/clk-mt6765.c
@@ -827,7 +827,7 @@ static int clk_mt6765_top_probe(struct platform_device *pdev)
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs),
 				 clk_data);
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
-			       &mt6765_clk_lock, clk_data);
+			       &mt6765_clk_lock, clk_data, &pdev->dev);
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
 			       clk_data, &pdev->dev);
 
diff --git a/drivers/clk/mediatek/clk-mt6779.c b/drivers/clk/mediatek/clk-mt6779.c
index 825f2f57e868..6d1fb19be77b 100644
--- a/drivers/clk/mediatek/clk-mt6779.c
+++ b/drivers/clk/mediatek/clk-mt6779.c
@@ -1245,7 +1245,7 @@ static int clk_mt6779_top_probe(struct platform_device *pdev)
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes),
-			       node, &mt6779_clk_lock, clk_data);
+			       node, &mt6779_clk_lock, clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(top_aud_muxes, ARRAY_SIZE(top_aud_muxes),
 				    base, &mt6779_clk_lock, clk_data, &pdev->dev);
diff --git a/drivers/clk/mediatek/clk-mt6795-topckgen.c b/drivers/clk/mediatek/clk-mt6795-topckgen.c
index bb232e1726f1..19440fe5460d 100644
--- a/drivers/clk/mediatek/clk-mt6795-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt6795-topckgen.c
@@ -553,7 +553,7 @@ static int clk_mt6795_topckgen_probe(struct platform_device *pdev)
 		goto unregister_fixed_clks;
 
 	ret = mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
-				     &mt6795_top_clk_lock, clk_data);
+				     &mt6795_top_clk_lock, clk_data, &pdev->dev);
 	if (ret)
 		goto unregister_factors;
 
diff --git a/drivers/clk/mediatek/clk-mt7986-infracfg.c b/drivers/clk/mediatek/clk-mt7986-infracfg.c
index 24947ccdb70a..fe64a226c4ac 100644
--- a/drivers/clk/mediatek/clk-mt7986-infracfg.c
+++ b/drivers/clk/mediatek/clk-mt7986-infracfg.c
@@ -191,7 +191,7 @@ static int clk_mt7986_infracfg_probe(struct platform_device *pdev)
 
 	mtk_clk_register_factors(infra_divs, ARRAY_SIZE(infra_divs), clk_data);
 	mtk_clk_register_muxes(infra_muxes, ARRAY_SIZE(infra_muxes), node,
-			       &mt7986_clk_lock, clk_data);
+			       &mt7986_clk_lock, clk_data, &pdev->dev);
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
 			       clk_data, &pdev->dev);
 
diff --git a/drivers/clk/mediatek/clk-mt7986-topckgen.c b/drivers/clk/mediatek/clk-mt7986-topckgen.c
index de5121cf2877..d7df9585787f 100644
--- a/drivers/clk/mediatek/clk-mt7986-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt7986-topckgen.c
@@ -304,7 +304,7 @@ static int clk_mt7986_topckgen_probe(struct platform_device *pdev)
 				    clk_data);
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
-			       &mt7986_clk_lock, clk_data);
+			       &mt7986_clk_lock, clk_data, &pdev->dev);
 
 	clk_prepare_enable(clk_data->hws[CLK_TOP_SYSAXI_SEL]->clk);
 	clk_prepare_enable(clk_data->hws[CLK_TOP_SYSAPB_SEL]->clk);
diff --git a/drivers/clk/mediatek/clk-mt8183.c b/drivers/clk/mediatek/clk-mt8183.c
index 194906ca4b5b..10a82b542376 100644
--- a/drivers/clk/mediatek/clk-mt8183.c
+++ b/drivers/clk/mediatek/clk-mt8183.c
@@ -1167,7 +1167,7 @@ static int clk_mt8183_top_probe(struct platform_device *pdev)
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
 
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes),
-		node, &mt8183_clk_lock, top_clk_data);
+		node, &mt8183_clk_lock, top_clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(top_aud_muxes, ARRAY_SIZE(top_aud_muxes),
 		base, &mt8183_clk_lock, top_clk_data, &pdev->dev);
diff --git a/drivers/clk/mediatek/clk-mt8186-topckgen.c b/drivers/clk/mediatek/clk-mt8186-topckgen.c
index b79954a42481..d05143891b69 100644
--- a/drivers/clk/mediatek/clk-mt8186-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8186-topckgen.c
@@ -738,7 +738,7 @@ static int clk_mt8186_topck_probe(struct platform_device *pdev)
 		goto unregister_fixed_clks;
 
 	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
-				   &mt8186_clk_lock, clk_data);
+				   &mt8186_clk_lock, clk_data, &pdev->dev);
 	if (r)
 		goto unregister_factors;
 
diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index 27ad629062c4..3ca068a4c552 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1113,7 +1113,7 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 		goto unregister_early_factors;
 
 	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
-				   &mt8192_clk_lock, top_clk_data);
+				   &mt8192_clk_lock, top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_factors;
 
diff --git a/drivers/clk/mediatek/clk-mt8195-topckgen.c b/drivers/clk/mediatek/clk-mt8195-topckgen.c
index 437c12d19b03..6d6a11d4a536 100644
--- a/drivers/clk/mediatek/clk-mt8195-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8195-topckgen.c
@@ -1263,7 +1263,7 @@ static int clk_mt8195_topck_probe(struct platform_device *pdev)
 		goto unregister_fixed_clks;
 
 	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
-				   &mt8195_clk_lock, top_clk_data);
+				   &mt8195_clk_lock, top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_factors;
 
diff --git a/drivers/clk/mediatek/clk-mt8365.c b/drivers/clk/mediatek/clk-mt8365.c
index 00c15f89a5f6..abb719b4661a 100644
--- a/drivers/clk/mediatek/clk-mt8365.c
+++ b/drivers/clk/mediatek/clk-mt8365.c
@@ -948,7 +948,7 @@ static int clk_mt8365_top_probe(struct platform_device *pdev)
 		goto unregister_fixed_clks;
 
 	ret = mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
-				     &mt8365_clk_lock, clk_data);
+				     &mt8365_clk_lock, clk_data, &pdev->dev);
 	if (ret)
 		goto unregister_factors;
 
diff --git a/drivers/clk/mediatek/clk-mux.c b/drivers/clk/mediatek/clk-mux.c
index ba1720b9e231..cd37abdf47c9 100644
--- a/drivers/clk/mediatek/clk-mux.c
+++ b/drivers/clk/mediatek/clk-mux.c
@@ -156,7 +156,7 @@ EXPORT_SYMBOL_GPL(mtk_mux_gate_clr_set_upd_ops);
 
 static struct clk_hw *mtk_clk_register_mux(const struct mtk_mux *mux,
 				 struct regmap *regmap,
-				 spinlock_t *lock)
+				 spinlock_t *lock, struct device *dev)
 {
 	struct mtk_clk_mux *clk_mux;
 	struct clk_init_data init = {};
@@ -177,7 +177,7 @@ static struct clk_hw *mtk_clk_register_mux(const struct mtk_mux *mux,
 	clk_mux->lock = lock;
 	clk_mux->hw.init = &init;
 
-	ret = clk_hw_register(NULL, &clk_mux->hw);
+	ret = clk_hw_register(dev, &clk_mux->hw);
 	if (ret) {
 		kfree(clk_mux);
 		return ERR_PTR(ret);
@@ -201,7 +201,8 @@ static void mtk_clk_unregister_mux(struct clk_hw *hw)
 int mtk_clk_register_muxes(const struct mtk_mux *muxes,
 			   int num, struct device_node *node,
 			   spinlock_t *lock,
-			   struct clk_hw_onecell_data *clk_data)
+			   struct clk_hw_onecell_data *clk_data,
+			   struct device *dev)
 {
 	struct regmap *regmap;
 	struct clk_hw *hw;
@@ -222,7 +223,7 @@ int mtk_clk_register_muxes(const struct mtk_mux *muxes,
 			continue;
 		}
 
-		hw = mtk_clk_register_mux(mux, regmap, lock);
+		hw = mtk_clk_register_mux(mux, regmap, lock, dev);
 
 		if (IS_ERR(hw)) {
 			pr_err("Failed to register clk %s: %pe\n", mux->name,
diff --git a/drivers/clk/mediatek/clk-mux.h b/drivers/clk/mediatek/clk-mux.h
index 83ff420f4ebe..3fe07719e5c6 100644
--- a/drivers/clk/mediatek/clk-mux.h
+++ b/drivers/clk/mediatek/clk-mux.h
@@ -86,7 +86,8 @@ extern const struct clk_ops mtk_mux_gate_clr_set_upd_ops;
 int mtk_clk_register_muxes(const struct mtk_mux *muxes,
 			   int num, struct device_node *node,
 			   spinlock_t *lock,
-			   struct clk_hw_onecell_data *clk_data);
+			   struct clk_hw_onecell_data *clk_data,
+			   struct device *dev);
 
 void mtk_clk_unregister_muxes(const struct mtk_mux *muxes, int num,
 			      struct clk_hw_onecell_data *clk_data);
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:53 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:53 +0100
Subject: [PATCH v1 21/25] clk: mediatek: clk-mt8192: Migrate topckgen to mtk_clk_simple_probe()
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-22-angelogioacchino.delregno@collabora.com>

Since the common simple probe function for MediaTek clock drivers can
now register the MFG MUX notifier, it's possible to migrate MT8192's
topckgen to that, allowing for some code size reduction.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8192.c | 80 +++++++------------------------
 1 file changed, 17 insertions(+), 63 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index 702770326286..adde457e6277 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1064,66 +1064,6 @@ static int clk_mt8192_reg_mfg_mux_notifier(struct device *dev, struct clk *clk)
 	return devm_mtk_clk_mux_notifier_register(dev, clk, mfg_mux_nb);
 }
 
-static int clk_mt8192_top_probe(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *top_clk_data;
-	int r;
-	void __iomem *base;
-
-	base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(base))
-		return PTR_ERR(base);
-
-	top_clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
-	if (!top_clk_data)
-		return;
-
-	r = mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data);
-	if (r)
-		return r;
-
-	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
-	if (r)
-		goto unregister_fixed_clks;
-
-	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
-				   &mt8192_clk_lock, top_clk_data, &pdev->dev);
-	if (r)
-		goto unregister_factors;
-
-	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-					&mt8192_clk_lock, top_clk_data, &pdev->dev);
-	if (r)
-		goto unregister_muxes;
-
-	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-					    top_clk_data, &pdev->dev);
-	if (r)
-		goto unregister_top_composites;
-
-	r = clk_mt8192_reg_mfg_mux_notifier(&pdev->dev,
-					    top_clk_data->hws[CLK_TOP_MFG_PLL_SEL]->clk);
-	if (r)
-		goto unregister_gates;
-
-	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
-				      top_clk_data);
-
-unregister_gates:
-	mtk_clk_unregister_gates(top_clks, ARRAY_SIZE(top_clks), top_clk_data);
-unregister_top_composites:
-	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), top_clk_data);
-unregister_muxes:
-	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), top_clk_data);
-unregister_factors:
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
-unregister_fixed_clks:
-	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks),
-				      top_clk_data);
-	return r;
-}
-
 static int clk_mt8192_apmixed_probe(struct platform_device *pdev)
 {
 	struct clk_hw_onecell_data *clk_data;
@@ -1158,9 +1098,6 @@ static const struct of_device_id of_match_clk_mt8192[] = {
 	{
 		.compatible = "mediatek,mt8192-apmixedsys",
 		.data = clk_mt8192_apmixed_probe,
-	}, {
-		.compatible = "mediatek,mt8192-topckgen",
-		.data = clk_mt8192_top_probe,
 	}, {
 		/* sentinel */
 	}
@@ -1193,9 +1130,26 @@ static const struct mtk_clk_desc peri_desc = {
 	.num_clks = ARRAY_SIZE(peri_clks),
 };
 
+static const struct mtk_clk_desc topck_desc = {
+	.fixed_clks = top_fixed_clks,
+	.num_fixed_clks = ARRAY_SIZE(top_fixed_clks),
+	.factor_clks = top_divs,
+	.num_factor_clks = ARRAY_SIZE(top_divs),
+	.mux_clks = top_mtk_muxes,
+	.num_mux_clks = ARRAY_SIZE(top_mtk_muxes),
+	.composite_clks = top_muxes,
+	.num_composite_clks = ARRAY_SIZE(top_muxes),
+	.clks = top_clks,
+	.num_clks = ARRAY_SIZE(top_clks),
+	.clk_lock = &mt8192_clk_lock,
+	.clk_notifier_func = clk_mt8192_reg_mfg_mux_notifier,
+	.mfg_clk_idx = CLK_TOP_MFG_PLL_SEL,
+};
+
 static const struct of_device_id of_match_clk_mt8192_simple[] = {
 	{ .compatible = "mediatek,mt8192-infracfg", .data = &infra_desc },
 	{ .compatible = "mediatek,mt8192-pericfg", .data = &peri_desc },
+	{ .compatible = "mediatek,mt8192-topckgen", .data = &topck_desc },
 	{ /* sentinel */ }
 };
 
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:39 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:39 +0100
Subject: [PATCH v1 07/25] clk: mediatek: clk-mtk: Add dummy clock ops
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-8-angelogioacchino.delregno@collabora.com>

In order to migrate some (few) old clock drivers to the common
mtk_clk_simple_probe() function, add dummy clock ops to be able
to insert a dummy clock with ID 0 at the beginning of the list.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mtk.c | 15 +++++++++++++++
 drivers/clk/mediatek/clk-mtk.h | 17 +++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index a1ab34305b95..d05364e17e95 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -18,6 +18,21 @@
 #include "clk-mtk.h"
 #include "clk-gate.h"
 
+const struct mtk_gate_regs cg_regs_dummy = { 0, 0, 0 };
+
+static int mtk_clk_dummy_enable(struct clk_hw *hw)
+{
+	return 0;
+}
+
+static void mtk_clk_dummy_disable(struct clk_hw *hw) { }
+
+const struct clk_ops mtk_clk_dummy_ops = {
+	.enable		= mtk_clk_dummy_enable,
+	.disable	= mtk_clk_dummy_disable,
+};
+EXPORT_SYMBOL_GPL(mtk_clk_dummy_ops);
+
 static void mtk_init_clk_data(struct clk_hw_onecell_data *clk_data,
 			      unsigned int clk_num)
 {
diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
index 15122504c02d..b72e88c0179f 100644
--- a/drivers/clk/mediatek/clk-mtk.h
+++ b/drivers/clk/mediatek/clk-mtk.h
@@ -22,6 +22,23 @@
 
 struct platform_device;
 
+/*
+ * We need the clock IDs to start from zero but to maintain devicetree
+ * backwards compatibility we can't change bindings to start from zero.
+ * Only a few platforms are affected, so we solve issues given by the
+ * commonized MTK clocks probe function(s) by adding a dummy clock at
+ * the beginning where needed.
+ */
+extern const struct clk_ops mtk_clk_dummy_ops;
+extern const struct mtk_gate_regs cg_regs_dummy;
+
+#define GATE_DUMMY(_id, _name) {				\
+		.id = _id,					\
+		.name = _name,					\
+		.regs = &cg_regs_dummy,				\
+		.ops = &mtk_clk_dummy_ops,			\
+	}
+
 struct mtk_fixed_clk {
 	int id;
 	const char *name;
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:40 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:40 +0100
Subject: [PATCH v1 08/25] dt-bindings: clock: mt8173: Add dummy clock ID
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-9-angelogioacchino.delregno@collabora.com>

Some old MediaTek clock drivers are starting the clock count (so, the
clock ID) from one instead of zero and this is logically incorrect,
as we should start from 0.
During a cleanup an issue emerged due to that and the cleanest and
shortest way to keep devicetree backwards compatibility while still
performing the well deserved cleanup is to add a dummy clock where
needed, with ID 0.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 include/dt-bindings/clock/mt8173-clk.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/include/dt-bindings/clock/mt8173-clk.h b/include/dt-bindings/clock/mt8173-clk.h
index 3d00c98b9654..86c298e8eb89 100644
--- a/include/dt-bindings/clock/mt8173-clk.h
+++ b/include/dt-bindings/clock/mt8173-clk.h
@@ -7,6 +7,9 @@
 #ifndef _DT_BINDINGS_CLK_MT8173_H
 #define _DT_BINDINGS_CLK_MT8173_H
 
+/* Dummy clock for backwards compatibility */
+#define CLK_DUMMY			0
+
 /* TOPCKGEN */
 
 #define CLK_TOP_CLKPH_MCK_O		1
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:57 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:57 +0100
Subject: [PATCH v1 25/25] clk: mediatek: clk-mt7986-topckgen: Migrate to mtk_clk_simple_probe()
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-26-angelogioacchino.delregno@collabora.com>

There are no more non-common calls in clk_mt7986_topckgen_probe():
migrate this driver to mtk_clk_simple_probe().

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt7986-topckgen.c | 52 +++++-----------------
 1 file changed, 12 insertions(+), 40 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt7986-topckgen.c b/drivers/clk/mediatek/clk-mt7986-topckgen.c
index bf3088e6d9e3..286418aa00a0 100644
--- a/drivers/clk/mediatek/clk-mt7986-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt7986-topckgen.c
@@ -290,52 +290,24 @@ static const struct mtk_mux top_muxes[] = {
 			     0x1C4, 5),
 };
 
-static int clk_mt7986_topckgen_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-	void __iomem *base;
-	int nr = ARRAY_SIZE(top_fixed_clks) + ARRAY_SIZE(top_divs) +
-		 ARRAY_SIZE(top_muxes);
-
-	base = of_iomap(node, 0);
-	if (!base) {
-		pr_err("%s(): ioremap failed\n", __func__);
-		return -ENOMEM;
-	}
-
-	clk_data = mtk_alloc_clk_data(nr);
-	if (!clk_data)
-		return -ENOMEM;
-
-	mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks),
-				    clk_data);
-	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
-			       &mt7986_clk_lock, clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-
-	if (r) {
-		pr_err("%s(): could not register clock provider: %d\n",
-		       __func__, r);
-		goto free_topckgen_data;
-	}
-	return r;
-
-free_topckgen_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
+static const struct mtk_clk_desc topck_desc = {
+	.fixed_clks = top_fixed_clks,
+	.num_fixed_clks = ARRAY_SIZE(top_fixed_clks),
+	.factor_clks = top_divs,
+	.num_factor_clks = ARRAY_SIZE(top_divs),
+	.mux_clks = top_muxes,
+	.num_mux_clks = ARRAY_SIZE(top_muxes),
+	.clk_lock = &mt7986_clk_lock,
+};
 
 static const struct of_device_id of_match_clk_mt7986_topckgen[] = {
-	{ .compatible = "mediatek,mt7986-topckgen", },
+	{ .compatible = "mediatek,mt7986-topckgen", .data = &topck_desc },
 	{}
 };
 
 static struct platform_driver clk_mt7986_topckgen_drv = {
-	.probe = clk_mt7986_topckgen_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt7986-topckgen",
 		.of_match_table = of_match_clk_mt7986_topckgen,
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:56 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:56 +0100
Subject: [PATCH v1 24/25] clk: mediatek: clk-mt7986-topckgen: Properly keep some clocks enabled
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-25-angelogioacchino.delregno@collabora.com>

Instead of calling clk_prepare_enable() on a bunch of clocks at probe
time, set the CLK_IS_CRITICAL flag to the same as these are required
to be always on, and this is the right way of achieving that.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt7986-topckgen.c | 46 +++++++++++-----------
 1 file changed, 24 insertions(+), 22 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt7986-topckgen.c b/drivers/clk/mediatek/clk-mt7986-topckgen.c
index d7df9585787f..bf3088e6d9e3 100644
--- a/drivers/clk/mediatek/clk-mt7986-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt7986-topckgen.c
@@ -202,16 +202,23 @@ static const struct mtk_mux top_muxes[] = {
 	MUX_GATE_CLR_SET_UPD(CLK_TOP_F_26M_ADC_SEL, "f_26m_adc_sel",
 			     f_26m_adc_parents, 0x020, 0x024, 0x028, 16, 1, 23,
 			     0x1C0, 10),
-	MUX_GATE_CLR_SET_UPD(CLK_TOP_DRAMC_SEL, "dramc_sel", f_26m_adc_parents,
-			     0x020, 0x024, 0x028, 24, 1, 31, 0x1C0, 11),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_DRAMC_SEL, "dramc_sel",
+				   f_26m_adc_parents, 0x020, 0x024, 0x028,
+				   24, 1, 31, 0x1C0, 11,
+				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 	/* CLK_CFG_3 */
-	MUX_GATE_CLR_SET_UPD(CLK_TOP_DRAMC_MD32_SEL, "dramc_md32_sel",
-			     dramc_md32_parents, 0x030, 0x034, 0x038, 0, 1, 7,
-			     0x1C0, 12),
-	MUX_GATE_CLR_SET_UPD(CLK_TOP_SYSAXI_SEL, "sysaxi_sel", sysaxi_parents,
-			     0x030, 0x034, 0x038, 8, 2, 15, 0x1C0, 13),
-	MUX_GATE_CLR_SET_UPD(CLK_TOP_SYSAPB_SEL, "sysapb_sel", sysapb_parents,
-			     0x030, 0x034, 0x038, 16, 2, 23, 0x1C0, 14),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_DRAMC_MD32_SEL, "dramc_md32_sel",
+				   dramc_md32_parents, 0x030, 0x034, 0x038,
+				   0, 1, 7, 0x1C0, 12,
+				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SYSAXI_SEL, "sysaxi_sel",
+				   sysaxi_parents, 0x030, 0x034, 0x038,
+				   8, 2, 15, 0x1C0, 13,
+				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SYSAPB_SEL, "sysapb_sel",
+				   sysapb_parents, 0x030, 0x034, 0x038,
+				   16, 2, 23, 0x1C0, 14,
+				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 	MUX_GATE_CLR_SET_UPD(CLK_TOP_ARM_DB_MAIN_SEL, "arm_db_main_sel",
 			     arm_db_main_parents, 0x030, 0x034, 0x038, 24, 1,
 			     31, 0x1C0, 15),
@@ -234,9 +241,10 @@ static const struct mtk_mux top_muxes[] = {
 	MUX_GATE_CLR_SET_UPD(CLK_TOP_SGM_325M_SEL, "sgm_325m_sel",
 			     sgm_325m_parents, 0x050, 0x054, 0x058, 8, 1, 15,
 			     0x1C0, 21),
-	MUX_GATE_CLR_SET_UPD(CLK_TOP_SGM_REG_SEL, "sgm_reg_sel",
-			     sgm_reg_parents, 0x050, 0x054, 0x058, 16, 1, 23,
-			     0x1C0, 22),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SGM_REG_SEL, "sgm_reg_sel",
+				   sgm_reg_parents, 0x050, 0x054, 0x058,
+				   16, 1, 23, 0x1C0, 22,
+				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 	MUX_GATE_CLR_SET_UPD(CLK_TOP_A1SYS_SEL, "a1sys_sel", a1sys_parents,
 			     0x050, 0x054, 0x058, 24, 1, 31, 0x1C0, 23),
 	/* CLK_CFG_6 */
@@ -252,9 +260,10 @@ static const struct mtk_mux top_muxes[] = {
 			     f_26m_adc_parents, 0x060, 0x064, 0x068, 24, 1, 31,
 			     0x1C0, 27),
 	/* CLK_CFG_7 */
-	MUX_GATE_CLR_SET_UPD(CLK_TOP_F26M_SEL, "csw_f26m_sel",
-			     f_26m_adc_parents, 0x070, 0x074, 0x078, 0, 1, 7,
-			     0x1C0, 28),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_F26M_SEL, "csw_f26m_sel",
+				   f_26m_adc_parents, 0x070, 0x074, 0x078,
+				   0, 1, 7, 0x1C0, 28,
+				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 	MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_L_SEL, "aud_l_sel", aud_l_parents,
 			     0x070, 0x074, 0x078, 8, 2, 15, 0x1C0, 29),
 	MUX_GATE_CLR_SET_UPD(CLK_TOP_A_TUNER_SEL, "a_tuner_sel",
@@ -306,13 +315,6 @@ static int clk_mt7986_topckgen_probe(struct platform_device *pdev)
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
 			       &mt7986_clk_lock, clk_data, &pdev->dev);
 
-	clk_prepare_enable(clk_data->hws[CLK_TOP_SYSAXI_SEL]->clk);
-	clk_prepare_enable(clk_data->hws[CLK_TOP_SYSAPB_SEL]->clk);
-	clk_prepare_enable(clk_data->hws[CLK_TOP_DRAMC_SEL]->clk);
-	clk_prepare_enable(clk_data->hws[CLK_TOP_DRAMC_MD32_SEL]->clk);
-	clk_prepare_enable(clk_data->hws[CLK_TOP_F26M_SEL]->clk);
-	clk_prepare_enable(clk_data->hws[CLK_TOP_SGM_REG_SEL]->clk);
-
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
 	if (r) {
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 03:48:36 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 12:48:36 +0100
Subject: [PATCH v1 04/25] clk: mediatek: cpumux: Propagate struct device where possible
In-Reply-To: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222114857.120060-5-angelogioacchino.delregno@collabora.com>

Take a pointer to a struct device in mtk_clk_register_cpumuxes() and
propagate the same to mtk_clk_register_cpumux() => clk_hw_register().
Even though runtime pm is unlikely to be used with CPU muxes, this
helps with code consistency and possibly opens to commonization of
some mtk_clk_register_(x) functions.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-cpumux.c          | 9 +++++----
 drivers/clk/mediatek/clk-cpumux.h          | 3 ++-
 drivers/clk/mediatek/clk-mt2701.c          | 2 +-
 drivers/clk/mediatek/clk-mt6795-infracfg.c | 3 ++-
 drivers/clk/mediatek/clk-mt7622.c          | 2 +-
 drivers/clk/mediatek/clk-mt7629.c          | 2 +-
 drivers/clk/mediatek/clk-mt8173.c          | 2 +-
 7 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/drivers/clk/mediatek/clk-cpumux.c b/drivers/clk/mediatek/clk-cpumux.c
index 25618eff6f2a..889534f7e97d 100644
--- a/drivers/clk/mediatek/clk-cpumux.c
+++ b/drivers/clk/mediatek/clk-cpumux.c
@@ -59,7 +59,7 @@ static const struct clk_ops clk_cpumux_ops = {
 
 static struct clk_hw *
 mtk_clk_register_cpumux(const struct mtk_composite *mux,
-			struct regmap *regmap)
+			struct regmap *regmap, struct device *dev)
 {
 	struct mtk_clk_cpumux *cpumux;
 	int ret;
@@ -81,7 +81,7 @@ mtk_clk_register_cpumux(const struct mtk_composite *mux,
 	cpumux->regmap = regmap;
 	cpumux->hw.init = &init;
 
-	ret = clk_hw_register(NULL, &cpumux->hw);
+	ret = clk_hw_register(dev, &cpumux->hw);
 	if (ret) {
 		kfree(cpumux);
 		return ERR_PTR(ret);
@@ -104,7 +104,8 @@ static void mtk_clk_unregister_cpumux(struct clk_hw *hw)
 
 int mtk_clk_register_cpumuxes(struct device_node *node,
 			      const struct mtk_composite *clks, int num,
-			      struct clk_hw_onecell_data *clk_data)
+			      struct clk_hw_onecell_data *clk_data,
+			      struct device *dev)
 {
 	int i;
 	struct clk_hw *hw;
@@ -125,7 +126,7 @@ int mtk_clk_register_cpumuxes(struct device_node *node,
 			continue;
 		}
 
-		hw = mtk_clk_register_cpumux(mux, regmap);
+		hw = mtk_clk_register_cpumux(mux, regmap, dev);
 		if (IS_ERR(hw)) {
 			pr_err("Failed to register clk %s: %pe\n", mux->name,
 			       hw);
diff --git a/drivers/clk/mediatek/clk-cpumux.h b/drivers/clk/mediatek/clk-cpumux.h
index 325adbef25d1..0b7a59d4e0f2 100644
--- a/drivers/clk/mediatek/clk-cpumux.h
+++ b/drivers/clk/mediatek/clk-cpumux.h
@@ -13,7 +13,8 @@ struct mtk_composite;
 
 int mtk_clk_register_cpumuxes(struct device_node *node,
 			      const struct mtk_composite *clks, int num,
-			      struct clk_hw_onecell_data *clk_data);
+			      struct clk_hw_onecell_data *clk_data,
+			      struct device *dev);
 
 void mtk_clk_unregister_cpumuxes(const struct mtk_composite *clks, int num,
 				 struct clk_hw_onecell_data *clk_data);
diff --git a/drivers/clk/mediatek/clk-mt2701.c b/drivers/clk/mediatek/clk-mt2701.c
index dff69fabb171..dcae25778817 100644
--- a/drivers/clk/mediatek/clk-mt2701.c
+++ b/drivers/clk/mediatek/clk-mt2701.c
@@ -770,7 +770,7 @@ static void __init mtk_infrasys_init_early(struct device_node *node)
 						infra_clk_data);
 
 	mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
-				  infra_clk_data);
+				  infra_clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
 				   infra_clk_data);
diff --git a/drivers/clk/mediatek/clk-mt6795-infracfg.c b/drivers/clk/mediatek/clk-mt6795-infracfg.c
index 4bbd2bfe2ec4..850b24666592 100644
--- a/drivers/clk/mediatek/clk-mt6795-infracfg.c
+++ b/drivers/clk/mediatek/clk-mt6795-infracfg.c
@@ -106,7 +106,8 @@ static int clk_mt6795_infracfg_probe(struct platform_device *pdev)
 	if (ret)
 		goto free_clk_data;
 
-	ret = mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes), clk_data);
+	ret = mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
+					clk_data, &pdev->dev);
 	if (ret)
 		goto unregister_gates;
 
diff --git a/drivers/clk/mediatek/clk-mt7622.c b/drivers/clk/mediatek/clk-mt7622.c
index eab450fc824c..adf3b4535170 100644
--- a/drivers/clk/mediatek/clk-mt7622.c
+++ b/drivers/clk/mediatek/clk-mt7622.c
@@ -674,7 +674,7 @@ static int mtk_infrasys_init(struct platform_device *pdev)
 			       clk_data, &pdev->dev);
 
 	mtk_clk_register_cpumuxes(node, infra_muxes, ARRAY_SIZE(infra_muxes),
-				  clk_data);
+				  clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
 				   clk_data);
diff --git a/drivers/clk/mediatek/clk-mt7629.c b/drivers/clk/mediatek/clk-mt7629.c
index 2daceeab7fc4..48bc4a6705fb 100644
--- a/drivers/clk/mediatek/clk-mt7629.c
+++ b/drivers/clk/mediatek/clk-mt7629.c
@@ -609,7 +609,7 @@ static int mtk_infrasys_init(struct platform_device *pdev)
 			       clk_data, &pdev->dev);
 
 	mtk_clk_register_cpumuxes(node, infra_muxes, ARRAY_SIZE(infra_muxes),
-				  clk_data);
+				  clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
 				      clk_data);
diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173.c
index dfb819dd1b1b..125b01b9e2ab 100644
--- a/drivers/clk/mediatek/clk-mt8173.c
+++ b/drivers/clk/mediatek/clk-mt8173.c
@@ -893,7 +893,7 @@ static void __init mtk_infrasys_init(struct device_node *node)
 	mtk_clk_register_factors(infra_divs, ARRAY_SIZE(infra_divs), clk_data);
 
 	mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
-				  clk_data);
+				  clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-- 
2.39.0



From Sujuan.Chen at mediatek.com  Thu Dec 22 06:01:09 2022
From: Sujuan.Chen at mediatek.com (=?utf-8?B?U3VqdWFuIENoZW4gKOmZiOe0oOWonyk=?=)
Date: Thu, 22 Dec 2022 14:01:09 +0000
Subject: [PATCH v2] wifi: mt76: fix potential memory leakage
In-Reply-To: <Y6QnFkJCWPsRgSQD@lore-desk>
References: <3940cc5ccb4b17d51b5176e722daef0d1af66d6a.camel@mediatek.com>
	 <B2689D6F-E04E-4E9B-9244-4E5069DC464D@nbd.name>
	 <Y6NKHY7euhifm0kI@lore-desk>
	 <6de89564e1deb0b641b2a5039b23909f4647425e.camel@mediatek.com>
	 <Y6QnFkJCWPsRgSQD@lore-desk>
Message-ID: <5162a6ab00c3d90e4401e8753f4a79d9232640eb.camel@mediatek.com>

On Thu, 2022-12-22 at 10:44 +0100, lorenzo at kernel.org wrote:
> > On Wed, 2022-12-21 at 19:02 +0100, Lorenzo Bianconi wrote:
> > > On Dec 21, Felix Fietkau wrote:
> > > > Hi Sujuan,
> > > > 
> > > > > Yes, it is so expensive, but if no memcopy, it will casue
> > > > > memory
> > > > > fragmentation (we hit this issue in internal SQC).
> > > > > 
> > > > > as we know, wed needs to exchange rx pkt(belongs to wed rx
> > > > > buffer
> > > > > manager) with wifi driver(dma rx data queue) by exchanging
> > > > > wfdma
> > > > > dmad
> > > > > to ensure the free wed rx buffer.
> > > > > 
> > > > > it is possiable that a large number of buffer has been
> > > > > exchanged
> > > > > to wed
> > > > > and can not come back to wlan driver. So, the memory from the
> > > > > same 32K
> > > > > page cache is unable to be released, and it will be failed at
> > > > > page_frag_alloc in mt76_dma_rx_fill.
> > > > > 
> > > > > Any ideas but memcopy?
> > > > 
> > > > A simple solution would be to simply allocate single pages, or
> > > > half-page fragments.
> > > > 
> > > > - Felix
> > > > 
> > > 
> > > A simple approach would be allocating a single page for each rx
> > > buffer.
> > > 
> > > @Sujuan: can you please double check if it is ok from performance
> > > and
> > > memory
> > > 	 fragmentation point of view? If not I guess we can try to
> > > optimize it
> > > 	 and allocate multiple buffers in the same page tweeking page
> > > refcount.
> > > 
> > > (this patch must be applied on top of Felix's dma fix).
> > > 
> > 
> > Allocating single page for each rx buffer avoids memory
> > fragmentation,
> > but it always uses 4K for one rx pkt which only needs 2K, right?
> 
> correct, we can optimize it allocating multiple buffers (in this case
> 2,
> assuming 4K pages) in a single page and recycling the page.
> 
> > 
> > I guess performance would be worse without page cache.
> 
> I think it is a trade-off
> 
> > We have tested on the mtk private driver, 7% drop in throughput
> > when
> > setting the 4K page cache compared to the 32K page cache.
> > and 10% drop when use slab to allocate buffer.
> 
> IIUC you tested with PAGE_FRAG_CACHE_MAX_SIZE set to 4K (or with a
> private
> page_frag_alloc() implementation) and you avoided memory allocation
> failures due to fragmentation but you got ~ 7% drop in throughput,
> correct?
> I think this is quite expected since we need to refill ~ 8 times more
> the
> page cache.
> 
> Not considering memory fragmentation, have you measured the impact of
> the
> memcpy of a full buffer?
> 

well, for pure sw path, it maybe ~300M drop (not sure) when using
memcpy(5G/HE80/4*4).
but we do memcpy only when wed on, atfer a few unbinding pkts, then all
flows are offloaded by hw. it is also a trade-off~

Regards,
Sujuan

> > 
> > A single page per rx buffer may cause a throughput drop of over 7%
> > and
> > waste memory, what do you think?
> 
> Implementing the page recycles as it is done in page_frag_alloc() we
> should get
> the same results you got with PAGE_FRAG_CACHE_MAX_SIZE set to 4K.
> 
> Regards,
> Lorenzo
> 
> > 
> > Regards,
> > Sujuan
> > 
> > > Regards,
> > > Lorenzo
> > > 
> > > diff --git a/drivers/net/wireless/mediatek/mt76/dma.c
> > > b/drivers/net/wireless/mediatek/mt76/dma.c
> > > index 28a7fe064313..1d9e580977fc 100644
> > > --- a/drivers/net/wireless/mediatek/mt76/dma.c
> > > +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> > > @@ -580,6 +580,20 @@ mt76_dma_tx_queue_skb(struct mt76_dev *dev,
> > > struct mt76_queue *q,
> > >  	return ret;
> > >  }
> > >  
> > > +static void *
> > > +mt76_dma_get_rx_buf(struct mt76_queue *q)
> > > +{
> > > +	if ((q->flags & MT_QFLAG_WED) &&
> > > +	    FIELD_GET(MT_QFLAG_WED_TYPE, q->flags) == MT76_WED_Q_RX) {
> > > +		/* WED RX queue */
> > > +		struct page *page = dev_alloc_page();
> > > +
> > > +		return page ? page_address(page) : NULL;
> > > +	}
> > > +
> > > +	return page_frag_alloc(&q->rx_page, q->buf_size, GFP_ATOMIC);
> > > +}
> > > +
> > >  static int
> > >  mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
> > >  {
> > > @@ -596,7 +610,7 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
> > > mt76_queue *q)
> > >  		struct mt76_queue_buf qbuf;
> > >  		void *buf = NULL;
> > >  
> > > -		buf = page_frag_alloc(&q->rx_page, q->buf_size,
> > > GFP_ATOMIC);
> > > +		buf = mt76_dma_get_rx_buf(q);
> > >  		if (!buf)
> > >  			break;
> > >  
> > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > > b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > > index 1a2e4df8d1b5..2924e71e4fbe 100644
> > > --- a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > > @@ -594,13 +594,9 @@ static void
> > > mt7915_mmio_wed_offload_disable(struct mtk_wed_device *wed)
> > >  static void mt7915_mmio_wed_release_rx_buf(struct mtk_wed_device
> > > *wed)
> > >  {
> > >  	struct mt7915_dev *dev;
> > > -	u32 length;
> > >  	int i;
> > >  
> > >  	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
> > > -	length = SKB_DATA_ALIGN(NET_SKB_PAD + wed->wlan.rx_size +
> > > -				sizeof(struct skb_shared_info));
> > > -
> > >  	for (i = 0; i < dev->mt76.rx_token_size; i++) {
> > >  		struct mt76_txwi_cache *t;
> > >  
> > > @@ -610,7 +606,7 @@ static void
> > > mt7915_mmio_wed_release_rx_buf(struct
> > > mtk_wed_device *wed)
> > >  
> > >  		dma_unmap_single(dev->mt76.dma_dev, t->dma_addr,
> > >  				 wed->wlan.rx_size, DMA_FROM_DEVICE);
> > > -		__free_pages(virt_to_page(t->ptr), get_order(length));
> > > +		free_page(virt_to_page(t->ptr));
> > >  		t->ptr = NULL;
> > >  
> > >  		mt76_put_rxwi(&dev->mt76, t);
> > > @@ -621,13 +617,9 @@ static u32
> > > mt7915_mmio_wed_init_rx_buf(struct
> > > mtk_wed_device *wed, int size)
> > >  {
> > >  	struct mtk_rxbm_desc *desc = wed->rx_buf_ring.desc;
> > >  	struct mt7915_dev *dev;
> > > -	u32 length;
> > >  	int i;
> > >  
> > >  	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
> > > -	length = SKB_DATA_ALIGN(NET_SKB_PAD + wed->wlan.rx_size +
> > > -				sizeof(struct skb_shared_info));
> > > -
> > >  	for (i = 0; i < size; i++) {
> > >  		struct mt76_txwi_cache *t = mt76_get_rxwi(&dev->mt76);
> > >  		dma_addr_t phy_addr;
> > > @@ -635,7 +627,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> > > mtk_wed_device *wed, int size)
> > >  		int token;
> > >  		void *ptr;
> > >  
> > > -		page = __dev_alloc_pages(GFP_KERNEL,
> > > get_order(length));
> > > +		page = __dev_alloc_page(GFP_KERNEL);
> > >  		if (!page)
> > >  			goto unmap;
> > >  
> > > @@ -644,7 +636,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> > > mtk_wed_device *wed, int size)
> > >  					  wed->wlan.rx_size,
> > >  					  DMA_TO_DEVICE);
> > >  		if (unlikely(dma_mapping_error(dev->mt76.dev,
> > > phy_addr))) {
> > > -			__free_pages(page, get_order(length));
> > > +			free_page(page);
> > >  			goto unmap;
> > >  		}
> > >  
> > > @@ -653,7 +645,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> > > mtk_wed_device *wed, int size)
> > >  		if (token < 0) {
> > >  			dma_unmap_single(dev->mt76.dma_dev, phy_addr,
> > >  					 wed->wlan.rx_size,
> > > DMA_TO_DEVICE);
> > > -			__free_pages(page, get_order(length));
> > > +			free_page(page);
> > >  			goto unmap;
> > >  		}
> > >  

From lorenzo at kernel.org  Thu Dec 22 06:26:21 2022
From: lorenzo at kernel.org (lorenzo at kernel.org)
Date: Thu, 22 Dec 2022 15:26:21 +0100
Subject: [PATCH v2] wifi: mt76: fix potential memory leakage
In-Reply-To: <5162a6ab00c3d90e4401e8753f4a79d9232640eb.camel@mediatek.com>
References: <3940cc5ccb4b17d51b5176e722daef0d1af66d6a.camel@mediatek.com>
 <B2689D6F-E04E-4E9B-9244-4E5069DC464D@nbd.name>
 <Y6NKHY7euhifm0kI@lore-desk>
 <6de89564e1deb0b641b2a5039b23909f4647425e.camel@mediatek.com>
 <Y6QnFkJCWPsRgSQD@lore-desk>
 <5162a6ab00c3d90e4401e8753f4a79d9232640eb.camel@mediatek.com>
Message-ID: <Y6RpDbebkzXltTZj@lore-desk>

> On Thu, 2022-12-22 at 10:44 +0100, lorenzo at kernel.org wrote:
> > > On Wed, 2022-12-21 at 19:02 +0100, Lorenzo Bianconi wrote:
> > > > On Dec 21, Felix Fietkau wrote:
> > > > > Hi Sujuan,
> > > > > 
> > > > > > Yes, it is so expensive, but if no memcopy, it will casue
> > > > > > memory
> > > > > > fragmentation (we hit this issue in internal SQC).
> > > > > > 
> > > > > > as we know, wed needs to exchange rx pkt(belongs to wed rx
> > > > > > buffer
> > > > > > manager) with wifi driver(dma rx data queue) by exchanging
> > > > > > wfdma
> > > > > > dmad
> > > > > > to ensure the free wed rx buffer.
> > > > > > 
> > > > > > it is possiable that a large number of buffer has been
> > > > > > exchanged
> > > > > > to wed
> > > > > > and can not come back to wlan driver. So, the memory from the
> > > > > > same 32K
> > > > > > page cache is unable to be released, and it will be failed at
> > > > > > page_frag_alloc in mt76_dma_rx_fill.
> > > > > > 
> > > > > > Any ideas but memcopy?
> > > > > 
> > > > > A simple solution would be to simply allocate single pages, or
> > > > > half-page fragments.
> > > > > 
> > > > > - Felix
> > > > > 
> > > > 
> > > > A simple approach would be allocating a single page for each rx
> > > > buffer.
> > > > 
> > > > @Sujuan: can you please double check if it is ok from performance
> > > > and
> > > > memory
> > > > 	 fragmentation point of view? If not I guess we can try to
> > > > optimize it
> > > > 	 and allocate multiple buffers in the same page tweeking page
> > > > refcount.
> > > > 
> > > > (this patch must be applied on top of Felix's dma fix).
> > > > 
> > > 
> > > Allocating single page for each rx buffer avoids memory
> > > fragmentation,
> > > but it always uses 4K for one rx pkt which only needs 2K, right?
> > 
> > correct, we can optimize it allocating multiple buffers (in this case
> > 2,
> > assuming 4K pages) in a single page and recycling the page.
> > 
> > > 
> > > I guess performance would be worse without page cache.
> > 
> > I think it is a trade-off
> > 
> > > We have tested on the mtk private driver, 7% drop in throughput
> > > when
> > > setting the 4K page cache compared to the 32K page cache.
> > > and 10% drop when use slab to allocate buffer.
> > 
> > IIUC you tested with PAGE_FRAG_CACHE_MAX_SIZE set to 4K (or with a
> > private
> > page_frag_alloc() implementation) and you avoided memory allocation
> > failures due to fragmentation but you got ~ 7% drop in throughput,
> > correct?
> > I think this is quite expected since we need to refill ~ 8 times more
> > the
> > page cache.
> > 
> > Not considering memory fragmentation, have you measured the impact of
> > the
> > memcpy of a full buffer?
> > 
> 
> well, for pure sw path, it maybe ~300M drop (not sure) when using
> memcpy(5G/HE80/4*4).
> but we do memcpy only when wed on, atfer a few unbinding pkts, then all
> flows are offloaded by hw. it is also a trade-off~

I guess we have quite a big impact if we enable wed and we do not actually
offload any flow (or we do not enable hw flowtable in netfilter), dont' we?

Regards,
Lorenzo

> 
> Regards,
> Sujuan
> 
> > > 
> > > A single page per rx buffer may cause a throughput drop of over 7%
> > > and
> > > waste memory, what do you think?
> > 
> > Implementing the page recycles as it is done in page_frag_alloc() we
> > should get
> > the same results you got with PAGE_FRAG_CACHE_MAX_SIZE set to 4K.
> > 
> > Regards,
> > Lorenzo
> > 
> > > 
> > > Regards,
> > > Sujuan
> > > 
> > > > Regards,
> > > > Lorenzo
> > > > 
> > > > diff --git a/drivers/net/wireless/mediatek/mt76/dma.c
> > > > b/drivers/net/wireless/mediatek/mt76/dma.c
> > > > index 28a7fe064313..1d9e580977fc 100644
> > > > --- a/drivers/net/wireless/mediatek/mt76/dma.c
> > > > +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> > > > @@ -580,6 +580,20 @@ mt76_dma_tx_queue_skb(struct mt76_dev *dev,
> > > > struct mt76_queue *q,
> > > >  	return ret;
> > > >  }
> > > >  
> > > > +static void *
> > > > +mt76_dma_get_rx_buf(struct mt76_queue *q)
> > > > +{
> > > > +	if ((q->flags & MT_QFLAG_WED) &&
> > > > +	    FIELD_GET(MT_QFLAG_WED_TYPE, q->flags) == MT76_WED_Q_RX) {
> > > > +		/* WED RX queue */
> > > > +		struct page *page = dev_alloc_page();
> > > > +
> > > > +		return page ? page_address(page) : NULL;
> > > > +	}
> > > > +
> > > > +	return page_frag_alloc(&q->rx_page, q->buf_size, GFP_ATOMIC);
> > > > +}
> > > > +
> > > >  static int
> > > >  mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
> > > >  {
> > > > @@ -596,7 +610,7 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
> > > > mt76_queue *q)
> > > >  		struct mt76_queue_buf qbuf;
> > > >  		void *buf = NULL;
> > > >  
> > > > -		buf = page_frag_alloc(&q->rx_page, q->buf_size,
> > > > GFP_ATOMIC);
> > > > +		buf = mt76_dma_get_rx_buf(q);
> > > >  		if (!buf)
> > > >  			break;
> > > >  
> > > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > > > b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > > > index 1a2e4df8d1b5..2924e71e4fbe 100644
> > > > --- a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > > > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > > > @@ -594,13 +594,9 @@ static void
> > > > mt7915_mmio_wed_offload_disable(struct mtk_wed_device *wed)
> > > >  static void mt7915_mmio_wed_release_rx_buf(struct mtk_wed_device
> > > > *wed)
> > > >  {
> > > >  	struct mt7915_dev *dev;
> > > > -	u32 length;
> > > >  	int i;
> > > >  
> > > >  	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
> > > > -	length = SKB_DATA_ALIGN(NET_SKB_PAD + wed->wlan.rx_size +
> > > > -				sizeof(struct skb_shared_info));
> > > > -
> > > >  	for (i = 0; i < dev->mt76.rx_token_size; i++) {
> > > >  		struct mt76_txwi_cache *t;
> > > >  
> > > > @@ -610,7 +606,7 @@ static void
> > > > mt7915_mmio_wed_release_rx_buf(struct
> > > > mtk_wed_device *wed)
> > > >  
> > > >  		dma_unmap_single(dev->mt76.dma_dev, t->dma_addr,
> > > >  				 wed->wlan.rx_size, DMA_FROM_DEVICE);
> > > > -		__free_pages(virt_to_page(t->ptr), get_order(length));
> > > > +		free_page(virt_to_page(t->ptr));
> > > >  		t->ptr = NULL;
> > > >  
> > > >  		mt76_put_rxwi(&dev->mt76, t);
> > > > @@ -621,13 +617,9 @@ static u32
> > > > mt7915_mmio_wed_init_rx_buf(struct
> > > > mtk_wed_device *wed, int size)
> > > >  {
> > > >  	struct mtk_rxbm_desc *desc = wed->rx_buf_ring.desc;
> > > >  	struct mt7915_dev *dev;
> > > > -	u32 length;
> > > >  	int i;
> > > >  
> > > >  	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
> > > > -	length = SKB_DATA_ALIGN(NET_SKB_PAD + wed->wlan.rx_size +
> > > > -				sizeof(struct skb_shared_info));
> > > > -
> > > >  	for (i = 0; i < size; i++) {
> > > >  		struct mt76_txwi_cache *t = mt76_get_rxwi(&dev->mt76);
> > > >  		dma_addr_t phy_addr;
> > > > @@ -635,7 +627,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> > > > mtk_wed_device *wed, int size)
> > > >  		int token;
> > > >  		void *ptr;
> > > >  
> > > > -		page = __dev_alloc_pages(GFP_KERNEL,
> > > > get_order(length));
> > > > +		page = __dev_alloc_page(GFP_KERNEL);
> > > >  		if (!page)
> > > >  			goto unmap;
> > > >  
> > > > @@ -644,7 +636,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> > > > mtk_wed_device *wed, int size)
> > > >  					  wed->wlan.rx_size,
> > > >  					  DMA_TO_DEVICE);
> > > >  		if (unlikely(dma_mapping_error(dev->mt76.dev,
> > > > phy_addr))) {
> > > > -			__free_pages(page, get_order(length));
> > > > +			free_page(page);
> > > >  			goto unmap;
> > > >  		}
> > > >  
> > > > @@ -653,7 +645,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> > > > mtk_wed_device *wed, int size)
> > > >  		if (token < 0) {
> > > >  			dma_unmap_single(dev->mt76.dma_dev, phy_addr,
> > > >  					 wed->wlan.rx_size,
> > > > DMA_TO_DEVICE);
> > > > -			__free_pages(page, get_order(length));
> > > > +			free_page(page);
> > > >  			goto unmap;
> > > >  		}
> > > >  
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221222/3ab7130e/attachment-0001.sig>

From angelogioacchino.delregno at collabora.com  Thu Dec 22 07:51:42 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 16:51:42 +0100
Subject: [PATCH v1 1/6] clk: mediatek: fhctl: Add support for older fhctl register layout
In-Reply-To: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
References: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222155147.158837-2-angelogioacchino.delregno@collabora.com>

The Frequency Hopping Controller (FHCTL) seems to have different
versions, as it has a slightly different register layout on some
older SoCs like MT6795, MT8173, MT8183 (and others).

This driver is indeed compatible with at least some of those older
IP revisions, so all we need to do is to add a way to select the
right register layout at registration time.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-fhctl.c             | 26 +++++++++++++++++---
 drivers/clk/mediatek/clk-fhctl.h             |  9 ++++++-
 drivers/clk/mediatek/clk-mt8186-apmixedsys.c |  2 ++
 drivers/clk/mediatek/clk-pllfh.c             | 23 +++++++++++++----
 drivers/clk/mediatek/clk-pllfh.h             |  1 +
 5 files changed, 52 insertions(+), 9 deletions(-)

diff --git a/drivers/clk/mediatek/clk-fhctl.c b/drivers/clk/mediatek/clk-fhctl.c
index 4f271acef5fe..45e4842cbf04 100644
--- a/drivers/clk/mediatek/clk-fhctl.c
+++ b/drivers/clk/mediatek/clk-fhctl.c
@@ -14,7 +14,20 @@
 #define PERCENT_TO_DDSLMT(dds, percent_m10) \
 	((((dds) * (percent_m10)) >> 5) / 100)
 
-static const struct fhctl_offset fhctl_offset = {
+const struct fhctl_offset fhctl_offset_v1 = {
+	.offset_hp_en = 0x0,
+	.offset_clk_con = 0x4,
+	.offset_rst_con = 0x8,
+	.offset_slope0 = 0xc,
+	.offset_slope1 = 0x10,
+	.offset_cfg = 0x0,
+	.offset_updnlmt = 0x4,
+	.offset_dds = 0x8,
+	.offset_dvfs = 0xc,
+	.offset_mon = 0x10,
+};
+
+const struct fhctl_offset fhctl_offset_v2 = {
 	.offset_hp_en = 0x0,
 	.offset_clk_con = 0x8,
 	.offset_rst_con = 0xc,
@@ -27,9 +40,16 @@ static const struct fhctl_offset fhctl_offset = {
 	.offset_mon = 0x10,
 };
 
-const struct fhctl_offset *fhctl_get_offset_table(void)
+const struct fhctl_offset *fhctl_get_offset_table(enum fhctl_variant v)
 {
-	return &fhctl_offset;
+	switch (v) {
+	case FHCTL_PLLFH_V1:
+		return &fhctl_offset_v1;
+	case FHCTL_PLLFH_V2:
+		return &fhctl_offset_v2;
+	default:
+		return ERR_PTR(-EINVAL);
+	};
 }
 
 static void dump_hw(struct mtk_clk_pll *pll, struct fh_pll_regs *regs,
diff --git a/drivers/clk/mediatek/clk-fhctl.h b/drivers/clk/mediatek/clk-fhctl.h
index 51275febf086..bfa6d281a3ee 100644
--- a/drivers/clk/mediatek/clk-fhctl.h
+++ b/drivers/clk/mediatek/clk-fhctl.h
@@ -7,6 +7,13 @@
 #ifndef __CLK_FHCTL_H
 #define __CLK_FHCTL_H
 
+#include "clk-pllfh.h"
+
+enum fhctl_variant {
+	FHCTL_PLLFH_V1,
+	FHCTL_PLLFH_V2,
+};
+
 struct fhctl_offset {
 	u32 offset_hp_en;
 	u32 offset_clk_con;
@@ -19,7 +26,7 @@ struct fhctl_offset {
 	u32 offset_dvfs;
 	u32 offset_mon;
 };
-const struct fhctl_offset *fhctl_get_offset_table(void);
+const struct fhctl_offset *fhctl_get_offset_table(enum fhctl_variant v);
 const struct fh_operation *fhctl_get_ops(void);
 void fhctl_hw_init(struct mtk_fh *fh);
 
diff --git a/drivers/clk/mediatek/clk-mt8186-apmixedsys.c b/drivers/clk/mediatek/clk-mt8186-apmixedsys.c
index 1d673c6278a9..9fded5020ca4 100644
--- a/drivers/clk/mediatek/clk-mt8186-apmixedsys.c
+++ b/drivers/clk/mediatek/clk-mt8186-apmixedsys.c
@@ -7,6 +7,7 @@
 #include <linux/platform_device.h>
 #include <dt-bindings/clock/mt8186-clk.h>
 
+#include "clk-fhctl.h"
 #include "clk-mtk.h"
 #include "clk-pll.h"
 #include "clk-pllfh.h"
@@ -98,6 +99,7 @@ enum fh_pll_id {
 		.data = {						\
 			.pll_id = _pllid,				\
 			.fh_id = _fhid,					\
+			.fh_ver = FHCTL_PLLFH_V2,			\
 			.fhx_offset = _offset,				\
 			.dds_mask = GENMASK(21, 0),			\
 			.slope0_value = 0x6003c97,			\
diff --git a/drivers/clk/mediatek/clk-pllfh.c b/drivers/clk/mediatek/clk-pllfh.c
index f48780bec507..b9297726f5a0 100644
--- a/drivers/clk/mediatek/clk-pllfh.c
+++ b/drivers/clk/mediatek/clk-pllfh.c
@@ -104,14 +104,16 @@ void fhctl_parse_dt(const u8 *compatible_node, struct mtk_pllfh_data *pllfhs,
 	}
 }
 
-static void pllfh_init(struct mtk_fh *fh, struct mtk_pllfh_data *pllfh_data)
+static int pllfh_init(struct mtk_fh *fh, struct mtk_pllfh_data *pllfh_data)
 {
 	struct fh_pll_regs *regs = &fh->regs;
 	const struct fhctl_offset *offset;
 	void __iomem *base = pllfh_data->state.base;
 	void __iomem *fhx_base = base + pllfh_data->data.fhx_offset;
 
-	offset = fhctl_get_offset_table();
+	offset = fhctl_get_offset_table(pllfh_data->data.fh_ver);
+	if (IS_ERR(offset))
+		return PTR_ERR(offset);
 
 	regs->reg_hp_en = base + offset->offset_hp_en;
 	regs->reg_clk_con = base + offset->offset_clk_con;
@@ -129,6 +131,8 @@ static void pllfh_init(struct mtk_fh *fh, struct mtk_pllfh_data *pllfh_data)
 	fh->lock = &pllfh_lock;
 
 	fh->ops = fhctl_get_ops();
+
+	return 0;
 }
 
 static bool fhctl_is_supported_and_enabled(const struct mtk_pllfh_data *pllfh)
@@ -142,20 +146,29 @@ mtk_clk_register_pllfh(const struct mtk_pll_data *pll_data,
 {
 	struct clk_hw *hw;
 	struct mtk_fh *fh;
+	int ret;
 
 	fh = kzalloc(sizeof(*fh), GFP_KERNEL);
 	if (!fh)
 		return ERR_PTR(-ENOMEM);
 
-	pllfh_init(fh, pllfh_data);
+	ret = pllfh_init(fh, pllfh_data);
+	if (ret) {
+		hw = ERR_PTR(ret);
+		goto out;
+	}
 
 	hw = mtk_clk_register_pll_ops(&fh->clk_pll, pll_data, base,
 				      &mtk_pllfh_ops);
 
+	if (IS_ERR(hw))
+		goto out;
+
+	fhctl_hw_init(fh);
+
+out:
 	if (IS_ERR(hw))
 		kfree(fh);
-	else
-		fhctl_hw_init(fh);
 
 	return hw;
 }
diff --git a/drivers/clk/mediatek/clk-pllfh.h b/drivers/clk/mediatek/clk-pllfh.h
index c0a6e1537034..5f419c2ec01f 100644
--- a/drivers/clk/mediatek/clk-pllfh.h
+++ b/drivers/clk/mediatek/clk-pllfh.h
@@ -18,6 +18,7 @@ struct fh_pll_state {
 struct fh_pll_data {
 	int pll_id;
 	int fh_id;
+	int fh_ver;
 	u32 fhx_offset;
 	u32 dds_mask;
 	u32 slope0_value;
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 07:51:41 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 16:51:41 +0100
Subject: [PATCH v1 0/6] MediaTek Frequency Hopping: MT6795/8173/92/95
Message-ID: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>

This series adds support for Frequency Hopping (FHCTL) on more MediaTek
SoCs, specifically, MT6795, MT8173, MT8192 and MT8195.

In order to support older platforms like MT6795 and MT8173 it was
necessary to add a new register layout that is ever-so-slightly
different from the one that was previously introduced for MT8186.

Since the new layout refers to older SoCs, the one valid for MT8186
and newer SoCs was renamed to be a "v2" layout, while the new one
for older chips gets the "v1" name.

Note: These commits won't change any behavior unless FHCTL gets
      explicitly enabled and configured in devicetrees.

AngeloGioacchino Del Regno (6):
  clk: mediatek: fhctl: Add support for older fhctl register layout
  dt-bindings: clock: mediatek,mt8186-fhctl: Support MT6795,
    MT8173/92/95
  clk: mediatek: mt6795: Add support for frequency hopping through FHCTL
  clk: mediatek: mt8173: Add support for frequency hopping through FHCTL
  clk: mediatek: mt8192: Add support for frequency hopping through FHCTL
  clk: mediatek: mt8195: Add support for frequency hopping through FHCTL

 .../bindings/clock/mediatek,mt8186-fhctl.yaml |  7 +-
 drivers/clk/mediatek/clk-fhctl.c              | 26 ++++++-
 drivers/clk/mediatek/clk-fhctl.h              |  9 ++-
 drivers/clk/mediatek/clk-mt6795-apmixedsys.c  | 63 ++++++++++++++++-
 drivers/clk/mediatek/clk-mt8173-apmixedsys.c  | 65 ++++++++++++++++-
 drivers/clk/mediatek/clk-mt8186-apmixedsys.c  |  2 +
 drivers/clk/mediatek/clk-mt8192.c             | 67 +++++++++++++++++-
 drivers/clk/mediatek/clk-mt8195-apmixedsys.c  | 69 ++++++++++++++++++-
 drivers/clk/mediatek/clk-pllfh.c              | 23 +++++--
 drivers/clk/mediatek/clk-pllfh.h              |  1 +
 10 files changed, 311 insertions(+), 21 deletions(-)

-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 07:51:43 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 16:51:43 +0100
Subject: [PATCH v1 2/6] dt-bindings: clock: mediatek,mt8186-fhctl: Support MT6795, MT8173/92/95
In-Reply-To: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
References: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222155147.158837-3-angelogioacchino.delregno@collabora.com>

MT6795, MT8173, MT8192 and MT8195 support Frequency Hopping: add the
compatibles for them.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 .../devicetree/bindings/clock/mediatek,mt8186-fhctl.yaml   | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/clock/mediatek,mt8186-fhctl.yaml b/Documentation/devicetree/bindings/clock/mediatek,mt8186-fhctl.yaml
index cfd042ac1e14..d00327d12e1e 100644
--- a/Documentation/devicetree/bindings/clock/mediatek,mt8186-fhctl.yaml
+++ b/Documentation/devicetree/bindings/clock/mediatek,mt8186-fhctl.yaml
@@ -16,7 +16,12 @@ description: |
 
 properties:
   compatible:
-    const: mediatek,mt8186-fhctl
+    enum:
+      - mediatek,mt6795-fhctl
+      - mediatek,mt8173-fhctl
+      - mediatek,mt8186-fhctl
+      - mediatek,mt8192-fhctl
+      - mediatek,mt8195-fhctl
 
   reg:
     maxItems: 1
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 07:51:45 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 16:51:45 +0100
Subject: [PATCH v1 4/6] clk: mediatek: mt8173: Add support for frequency hopping through FHCTL
In-Reply-To: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
References: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222155147.158837-5-angelogioacchino.delregno@collabora.com>

Add FHCTL parameters and register PLLs through FHCTL to add support
for frequency hopping and SSC. FHCTL will be enabled only on PLLs
specified in devicetree.

This commit brings functional changes only upon addition of
devicetree configuration.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8173-apmixedsys.c | 65 +++++++++++++++++++-
 1 file changed, 62 insertions(+), 3 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8173-apmixedsys.c b/drivers/clk/mediatek/clk-mt8173-apmixedsys.c
index a56c5845d07a..0084203e67ad 100644
--- a/drivers/clk/mediatek/clk-mt8173-apmixedsys.c
+++ b/drivers/clk/mediatek/clk-mt8173-apmixedsys.c
@@ -9,8 +9,10 @@
 #include <linux/of_address.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include "clk-fhctl.h"
 #include "clk-mtk.h"
 #include "clk-pll.h"
+#include "clk-pllfh.h"
 
 #define REGOFF_REF2USB		0x8
 #define REGOFF_HDMI_REF		0x40
@@ -77,6 +79,58 @@ static const struct mtk_pll_data plls[] = {
 	PLL(CLK_APMIXED_MSDCPLL2, "msdcpll2", 0x2f0, 0x2fc, 0, 0, 21, 0x2f0, 4, 0x0, 0x2f4, 0),
 };
 
+enum fh_pll_id {
+	FH_ARMCA7PLL,
+	FH_ARMCA15PLL,
+	FH_MAINPLL,
+	FH_MPLL,
+	FH_MSDCPLL,
+	FH_MMPLL,
+	FH_VENCPLL,
+	FH_TVDPLL,
+	FH_VCODECPLL,
+	FH_LVDSPLL,
+	FH_MSDC2PLL,
+	FH_NR_FH,
+};
+
+#define FH(_pllid, _fhid, _offset) {					\
+		.data = {						\
+			.pll_id = _pllid,				\
+			.fh_id = _fhid,					\
+			.fh_ver = FHCTL_PLLFH_V1,			\
+			.fhx_offset = _offset,				\
+			.dds_mask = GENMASK(21, 0),			\
+			.slope0_value = 0x6003c97,			\
+			.slope1_value = 0x6003c97,			\
+			.sfstrx_en = BIT(2),				\
+			.frddsx_en = BIT(1),				\
+			.fhctlx_en = BIT(0),				\
+			.tgl_org = BIT(31),				\
+			.dvfs_tri = BIT(31),				\
+			.pcwchg = BIT(31),				\
+			.dt_val = 0x0,					\
+			.df_val = 0x9,					\
+			.updnlmt_shft = 16,				\
+			.msk_frddsx_dys = GENMASK(23, 20),		\
+			.msk_frddsx_dts = GENMASK(19, 16),		\
+		},							\
+	}
+
+static struct mtk_pllfh_data pllfhs[] = {
+	FH(CLK_APMIXED_ARMCA7PLL, FH_ARMCA7PLL, 0x38),
+	FH(CLK_APMIXED_ARMCA15PLL, FH_ARMCA15PLL, 0x4c),
+	FH(CLK_APMIXED_MAINPLL, FH_MAINPLL, 0x60),
+	FH(CLK_APMIXED_MPLL, FH_MPLL, 0x74),
+	FH(CLK_APMIXED_MSDCPLL, FH_MSDCPLL, 0x88),
+	FH(CLK_APMIXED_MMPLL, FH_MMPLL, 0x9c),
+	FH(CLK_APMIXED_VENCPLL, FH_VENCPLL, 0xb0),
+	FH(CLK_APMIXED_TVDPLL, FH_TVDPLL, 0xc4),
+	FH(CLK_APMIXED_VCODECPLL, FH_VCODECPLL, 0xd8),
+	FH(CLK_APMIXED_LVDSPLL, FH_LVDSPLL, 0xec),
+	FH(CLK_APMIXED_MSDCPLL2, FH_MSDC2PLL, 0x100),
+};
+
 static const struct of_device_id of_match_clk_mt8173_apmixed[] = {
 	{ .compatible = "mediatek,mt8173-apmixedsys" },
 	{ /* sentinel */ }
@@ -84,6 +138,7 @@ static const struct of_device_id of_match_clk_mt8173_apmixed[] = {
 
 static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
 {
+	const u8 *fhctl_node = "mediatek,mt8173-fhctl";
 	struct device_node *node = pdev->dev.of_node;
 	struct clk_hw_onecell_data *clk_data;
 	void __iomem *base;
@@ -98,7 +153,9 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
 	if (IS_ERR_OR_NULL(clk_data))
 		return -ENOMEM;
 
-	r = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
+	fhctl_parse_dt(fhctl_node, pllfhs, ARRAY_SIZE(pllfhs));
+	r = mtk_clk_register_pllfhs(node, plls, ARRAY_SIZE(plls),
+				    pllfhs, ARRAY_SIZE(pllfhs), clk_data);
 	if (r)
 		goto free_clk_data;
 
@@ -124,7 +181,8 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
 unregister_ref2usb:
 	mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
 unregister_plls:
-	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+	mtk_clk_unregister_pllfhs(plls, ARRAY_SIZE(plls), pllfhs,
+				  ARRAY_SIZE(pllfhs), clk_data);
 free_clk_data:
 	mtk_free_clk_data(clk_data);
 	return r;
@@ -137,7 +195,8 @@ static int clk_mt8173_apmixed_remove(struct platform_device *pdev)
 
 	of_clk_del_provider(node);
 	mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
-	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+	mtk_clk_unregister_pllfhs(plls, ARRAY_SIZE(plls), pllfhs,
+				  ARRAY_SIZE(pllfhs), clk_data);
 	mtk_free_clk_data(clk_data);
 
 	return 0;
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 07:51:44 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 16:51:44 +0100
Subject: [PATCH v1 3/6] clk: mediatek: mt6795: Add support for frequency hopping through FHCTL
In-Reply-To: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
References: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222155147.158837-4-angelogioacchino.delregno@collabora.com>

Add FHCTL parameters and register PLLs through FHCTL to add support
for frequency hopping and SSC. FHCTL will be enabled only on PLLs
specified in devicetree.

This commit brings functional changes only upon addition of
devicetree configuration.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt6795-apmixedsys.c | 63 +++++++++++++++++++-
 1 file changed, 60 insertions(+), 3 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt6795-apmixedsys.c b/drivers/clk/mediatek/clk-mt6795-apmixedsys.c
index 59761c72d3bc..03fa30527868 100644
--- a/drivers/clk/mediatek/clk-mt6795-apmixedsys.c
+++ b/drivers/clk/mediatek/clk-mt6795-apmixedsys.c
@@ -7,8 +7,10 @@
 #include <dt-bindings/clock/mediatek,mt6795-clk.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include "clk-fhctl.h"
 #include "clk-mtk.h"
 #include "clk-pll.h"
+#include "clk-pllfh.h"
 
 #define REG_REF2USB		0x8
 #define REG_AP_PLL_CON7		0x1c
@@ -58,6 +60,56 @@ static const struct mtk_pll_data plls[] = {
 	PLL(CLK_APMIXED_APLL2, "apll2", 0x2b4, 0x2c4, 0, 0, 31, 0x2b4, 4, 0x2bc, 0x2b8, 0),
 };
 
+enum fh_pll_id {
+	FH_CA53PLL_LL,
+	FH_CA53PLL_BL,
+	FH_MAINPLL,
+	FH_MPLL,
+	FH_MSDCPLL,
+	FH_MMPLL,
+	FH_VENCPLL,
+	FH_TVDPLL,
+	FH_VCODECPLL,
+	FH_NR_FH,
+};
+
+#define _FH(_pllid, _fhid, _slope, _offset) {				\
+		.data = {						\
+			.pll_id = _pllid,				\
+			.fh_id = _fhid,					\
+			.fh_ver = FHCTL_PLLFH_V1,			\
+			.fhx_offset = _offset,				\
+			.dds_mask = GENMASK(21, 0),			\
+			.slope0_value = _slope,				\
+			.slope1_value = _slope,				\
+			.sfstrx_en = BIT(2),				\
+			.frddsx_en = BIT(1),				\
+			.fhctlx_en = BIT(0),				\
+			.tgl_org = BIT(31),				\
+			.dvfs_tri = BIT(31),				\
+			.pcwchg = BIT(31),				\
+			.dt_val = 0x0,					\
+			.df_val = 0x9,					\
+			.updnlmt_shft = 16,				\
+			.msk_frddsx_dys = GENMASK(23, 20),		\
+			.msk_frddsx_dts = GENMASK(19, 16),		\
+		},							\
+	}
+
+#define FH(_pllid, _fhid, _offset)	_FH(_pllid, _fhid, 0x6003c97, _offset)
+#define FH_M(_pllid, _fhid, _offset)	_FH(_pllid, _fhid, 0x6000140, _offset)
+
+static struct mtk_pllfh_data pllfhs[] = {
+	FH(CLK_APMIXED_ARMCA53PLL, FH_CA53PLL_BL, 0x38),
+	FH(CLK_APMIXED_MAINPLL, FH_MAINPLL, 0x60),
+	FH_M(CLK_APMIXED_MPLL, FH_MPLL, 0x74),
+	FH(CLK_APMIXED_MSDCPLL, FH_MSDCPLL, 0x88),
+	FH(CLK_APMIXED_MMPLL, FH_MMPLL, 0x9c),
+	FH(CLK_APMIXED_VENCPLL, FH_VENCPLL, 0xb0),
+	FH(CLK_APMIXED_TVDPLL, FH_TVDPLL, 0xc4),
+	FH(CLK_APMIXED_VCODECPLL, FH_VCODECPLL, 0xd8),
+};
+
 static void clk_mt6795_apmixed_setup_md1(void __iomem *base)
 {
 	void __iomem *reg = base + REG_AP_PLL_CON7;
@@ -85,6 +137,7 @@ static int clk_mt6795_apmixed_probe(struct platform_device *pdev)
 	struct clk_hw_onecell_data *clk_data;
 	struct device *dev = &pdev->dev;
 	struct device_node *node = dev->of_node;
+	const u8 *fhctl_node = "mediatek,mt6795-fhctl";
 	void __iomem *base;
 	struct clk_hw *hw;
 	int ret;
@@ -97,7 +150,9 @@ static int clk_mt6795_apmixed_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	ret = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
+	fhctl_parse_dt(fhctl_node, pllfhs, ARRAY_SIZE(pllfhs));
+	ret = mtk_clk_register_pllfhs(node, plls, ARRAY_SIZE(plls),
+				      pllfhs, ARRAY_SIZE(pllfhs), clk_data);
 	if (ret)
 		goto free_clk_data;
 
@@ -124,7 +179,8 @@ static int clk_mt6795_apmixed_probe(struct platform_device *pdev)
 unregister_ref2usb:
 	mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
 unregister_plls:
-	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+	mtk_clk_unregister_pllfhs(plls, ARRAY_SIZE(plls), pllfhs,
+				  ARRAY_SIZE(pllfhs), clk_data);
 free_clk_data:
 	mtk_free_clk_data(clk_data);
 	return ret;
@@ -137,7 +193,8 @@ static int clk_mt6795_apmixed_remove(struct platform_device *pdev)
 
 	of_clk_del_provider(node);
 	mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
-	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+	mtk_clk_unregister_pllfhs(plls, ARRAY_SIZE(plls), pllfhs,
+				  ARRAY_SIZE(pllfhs), clk_data);
 	mtk_free_clk_data(clk_data);
 
 	return 0;
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 07:51:46 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 16:51:46 +0100
Subject: [PATCH v1 5/6] clk: mediatek: mt8192: Add support for frequency hopping through FHCTL
In-Reply-To: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
References: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222155147.158837-6-angelogioacchino.delregno@collabora.com>

Add FHCTL parameters and register PLLs through FHCTL to add support
for frequency hopping and SSC. FHCTL will be enabled only on PLLs
specified in devicetree.

This commit brings functional changes only upon addition of
devicetree configuration.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8192.c | 67 ++++++++++++++++++++++++++++++-
 1 file changed, 65 insertions(+), 2 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index adde457e6277..648f88d41622 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -12,10 +12,12 @@
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 
+#include "clk-fhctl.h"
 #include "clk-gate.h"
 #include "clk-mtk.h"
 #include "clk-mux.h"
 #include "clk-pll.h"
+#include "clk-pllfh.h"
 
 #include <dt-bindings/clock/mt8192-clk.h>
 #include <dt-bindings/reset/mt8192-resets.h>
@@ -1042,6 +1044,57 @@ static const struct mtk_pll_data plls[] = {
 	      0, 0, 32, 0x0330, 24, 0, 0, 0, 0x0334, 0),
 };
 
+enum fh_pll_id {
+	FH_ARMPLL_LL,
+	FH_ARMPLL_BL0,
+	FH_ARMPLL_BL1,
+	FH_ARMPLL_BL2,
+	FH_ARMPLL_BL3,
+	FH_CCIPLL,
+	FH_MFGPLL,
+	FH_MEMPLL,
+	FH_MPLL,
+	FH_MMPLL,
+	FH_MAINPLL,
+	FH_MSDCPLL,
+	FH_ADSPPLL,
+	FH_APUPLL,
+	FH_TVDPLL,
+	FH_NR_FH,
+};
+
+#define FH(_pllid, _fhid, _offset) {					\
+		.data = {						\
+			.pll_id = _pllid,				\
+			.fh_id = _fhid,					\
+			.fh_ver = FHCTL_PLLFH_V2,			\
+			.fhx_offset = _offset,				\
+			.dds_mask = GENMASK(21, 0),			\
+			.slope0_value = 0x6003c97,			\
+			.slope1_value = 0x6003c97,			\
+			.sfstrx_en = BIT(2),				\
+			.frddsx_en = BIT(1),				\
+			.fhctlx_en = BIT(0),				\
+			.tgl_org = BIT(31),				\
+			.dvfs_tri = BIT(31),				\
+			.pcwchg = BIT(31),				\
+			.dt_val = 0x0,					\
+			.df_val = 0x9,					\
+			.updnlmt_shft = 16,				\
+			.msk_frddsx_dys = GENMASK(23, 20),		\
+			.msk_frddsx_dts = GENMASK(19, 16),		\
+		},							\
+	}
+
+static struct mtk_pllfh_data pllfhs[] = {
+	FH(CLK_APMIXED_MFGPLL, FH_MFGPLL, 0xb4),
+	FH(CLK_APMIXED_MMPLL, FH_MMPLL, 0xf0),
+	FH(CLK_APMIXED_MAINPLL, FH_MAINPLL, 0x104),
+	FH(CLK_APMIXED_MSDCPLL, FH_MSDCPLL, 0x118),
+	FH(CLK_APMIXED_ADSPPLL, FH_ADSPPLL, 0x12c),
+	FH(CLK_APMIXED_TVDPLL, FH_TVDPLL, 0x154),
+};
+
 /* Register mux notifier for MFG mux */
 static int clk_mt8192_reg_mfg_mux_notifier(struct device *dev, struct clk *clk)
 {
@@ -1068,18 +1121,25 @@ static int clk_mt8192_apmixed_probe(struct platform_device *pdev)
 {
 	struct clk_hw_onecell_data *clk_data;
 	struct device_node *node = pdev->dev.of_node;
+	const u8 *fhctl_node = "mediatek,mt8192-fhctl";
 	int r;
 
 	clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
 	if (!clk_data)
 		return -ENOMEM;
 
-	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
+	fhctl_parse_dt(fhctl_node, pllfhs, ARRAY_SIZE(pllfhs));
+
+	r = mtk_clk_register_pllfhs(node, plls, ARRAY_SIZE(plls),
+				    pllfhs, ARRAY_SIZE(pllfhs), clk_data);
+	if (r)
+		goto free_clk_data;
+
 	r = mtk_clk_register_gates(node, apmixed_clks,
 				   ARRAY_SIZE(apmixed_clks), clk_data,
 				   &pdev->dev);
 	if (r)
-		goto free_clk_data;
+		goto unregister_plls;
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -1089,6 +1149,9 @@ static int clk_mt8192_apmixed_probe(struct platform_device *pdev)
 
 unregister_gates:
 	mtk_clk_unregister_gates(apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data);
+unregister_plls:
+	mtk_clk_unregister_pllfhs(plls, ARRAY_SIZE(plls), pllfhs,
+				  ARRAY_SIZE(pllfhs), clk_data);
 free_clk_data:
 	mtk_free_clk_data(clk_data);
 	return r;
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 07:51:47 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 16:51:47 +0100
Subject: [PATCH v1 6/6] clk: mediatek: mt8195: Add support for frequency hopping through FHCTL
In-Reply-To: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
References: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221222155147.158837-7-angelogioacchino.delregno@collabora.com>

Add FHCTL parameters and register PLLs through FHCTL to add support
for frequency hopping and SSC. FHCTL will be enabled only on PLLs
specified in devicetree.

This commit brings functional changes only upon addition of
devicetree configuration.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8195-apmixedsys.c | 69 +++++++++++++++++++-
 1 file changed, 66 insertions(+), 3 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8195-apmixedsys.c b/drivers/clk/mediatek/clk-mt8195-apmixedsys.c
index f967e2592dea..090db18ea5d8 100644
--- a/drivers/clk/mediatek/clk-mt8195-apmixedsys.c
+++ b/drivers/clk/mediatek/clk-mt8195-apmixedsys.c
@@ -3,9 +3,11 @@
 // Copyright (c) 2021 MediaTek Inc.
 // Author: Chun-Jie Chen <chun-jie.chen at mediatek.com>
 
+#include "clk-fhctl.h"
 #include "clk-gate.h"
 #include "clk-mtk.h"
 #include "clk-pll.h"
+#include "clk-pllfh.h"
 
 #include <dt-bindings/clock/mt8195-clk.h>
 #include <linux/of_device.h>
@@ -105,6 +107,61 @@ static const struct mtk_pll_data plls[] = {
 	    0, 0, 22, 0x0158, 24, 0, 0, 0, 0x0158, 0, 0x0158, 0, 9),
 };
 
+enum fh_pll_id {
+	FH_ARMPLL_LL,
+	FH_ARMPLL_BL,
+	FH_MEMPLL,
+	FH_ADSPPLL,
+	FH_NNAPLL,
+	FH_CCIPLL,
+	FH_MFGPLL,
+	FH_TVDPLL2,
+	FH_MPLL,
+	FH_MMPLL,
+	FH_MAINPLL,
+	FH_MSDCPLL,
+	FH_IMGPLL,
+	FH_VDECPLL,
+	FH_TVDPLL1,
+	FH_NR_FH,
+};
+
+#define FH(_pllid, _fhid, _offset) {					\
+		.data = {						\
+			.pll_id = _pllid,				\
+			.fh_id = _fhid,					\
+			.fh_ver = FHCTL_PLLFH_V2,			\
+			.fhx_offset = _offset,				\
+			.dds_mask = GENMASK(21, 0),			\
+			.slope0_value = 0x6003c97,			\
+			.slope1_value = 0x6003c97,			\
+			.sfstrx_en = BIT(2),				\
+			.frddsx_en = BIT(1),				\
+			.fhctlx_en = BIT(0),				\
+			.tgl_org = BIT(31),				\
+			.dvfs_tri = BIT(31),				\
+			.pcwchg = BIT(31),				\
+			.dt_val = 0x0,					\
+			.df_val = 0x9,					\
+			.updnlmt_shft = 16,				\
+			.msk_frddsx_dys = GENMASK(23, 20),		\
+			.msk_frddsx_dts = GENMASK(19, 16),		\
+		},							\
+	}
+
+static struct mtk_pllfh_data pllfhs[] = {
+	FH(CLK_APMIXED_ADSPPLL, FH_ADSPPLL, 0x78),
+	FH(CLK_APMIXED_NNAPLL, FH_NNAPLL, 0x8c),
+	FH(CLK_APMIXED_MFGPLL, FH_MFGPLL, 0xb4),
+	FH(CLK_APMIXED_TVDPLL2, FH_TVDPLL2, 0xc8),
+	FH(CLK_APMIXED_MMPLL, FH_MMPLL, 0xf0),
+	FH(CLK_APMIXED_MAINPLL, FH_MAINPLL, 0x104),
+	FH(CLK_APMIXED_MSDCPLL, FH_MSDCPLL, 0x118),
+	FH(CLK_APMIXED_IMGPLL, FH_IMGPLL, 0x12c),
+	FH(CLK_APMIXED_VDECPLL, FH_VDECPLL, 0x140),
+	FH(CLK_APMIXED_TVDPLL2, FH_TVDPLL1, 0x154),
+};
+
 static const struct of_device_id of_match_clk_mt8195_apmixed[] = {
 	{ .compatible = "mediatek,mt8195-apmixedsys", },
 	{}
@@ -114,13 +171,17 @@ static int clk_mt8195_apmixed_probe(struct platform_device *pdev)
 {
 	struct clk_hw_onecell_data *clk_data;
 	struct device_node *node = pdev->dev.of_node;
+	const u8 *fhctl_node = "mediatek,mt8195-fhctl";
 	int r;
 
 	clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
+	fhctl_parse_dt(fhctl_node, pllfhs, ARRAY_SIZE(pllfhs));
+
+	r = mtk_clk_register_pllfhs(node, plls, ARRAY_SIZE(plls),
+				    pllfhs, ARRAY_SIZE(pllfhs), clk_data);
 	if (r)
 		goto free_apmixed_data;
 
@@ -140,7 +201,8 @@ static int clk_mt8195_apmixed_probe(struct platform_device *pdev)
 unregister_gates:
 	mtk_clk_unregister_gates(apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data);
 unregister_plls:
-	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+	mtk_clk_unregister_pllfhs(plls, ARRAY_SIZE(plls), pllfhs,
+				  ARRAY_SIZE(pllfhs), clk_data);
 free_apmixed_data:
 	mtk_free_clk_data(clk_data);
 	return r;
@@ -153,7 +215,8 @@ static int clk_mt8195_apmixed_remove(struct platform_device *pdev)
 
 	of_clk_del_provider(node);
 	mtk_clk_unregister_gates(apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data);
-	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+	mtk_clk_unregister_pllfhs(plls, ARRAY_SIZE(plls), pllfhs,
+				  ARRAY_SIZE(pllfhs), clk_data);
 	mtk_free_clk_data(clk_data);
 
 	return 0;
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Thu Dec 22 07:54:34 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Thu, 22 Dec 2022 16:54:34 +0100
Subject: [PATCH v1 0/6] MediaTek Frequency Hopping: MT6795/8173/92/95
In-Reply-To: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
References: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
Message-ID: <372e5ab4-bc2c-1ccd-1f22-7bab635c36d1@collabora.com>

Il 22/12/22 16:51, AngeloGioacchino Del Regno ha scritto:
> This series adds support for Frequency Hopping (FHCTL) on more MediaTek
> SoCs, specifically, MT6795, MT8173, MT8192 and MT8195.
> 
> In order to support older platforms like MT6795 and MT8173 it was
> necessary to add a new register layout that is ever-so-slightly
> different from the one that was previously introduced for MT8186.
> 
> Since the new layout refers to older SoCs, the one valid for MT8186
> and newer SoCs was renamed to be a "v2" layout, while the new one
> for older chips gets the "v1" name.
> 
> Note: These commits won't change any behavior unless FHCTL gets
>        explicitly enabled and configured in devicetrees.
> 

Forgot to write in the cover letter that this series can be applied on top
of [1], but that's a dependency only because that big cleanup moves things
around (hence these commits won't apply if not on top of [1]).


[1]: 
https://lore.kernel.org/lkml/20221222114857.120060-1-angelogioacchino.delregno at collabora.com

Cheers,
Angelo

> AngeloGioacchino Del Regno (6):
>    clk: mediatek: fhctl: Add support for older fhctl register layout
>    dt-bindings: clock: mediatek,mt8186-fhctl: Support MT6795,
>      MT8173/92/95
>    clk: mediatek: mt6795: Add support for frequency hopping through FHCTL
>    clk: mediatek: mt8173: Add support for frequency hopping through FHCTL
>    clk: mediatek: mt8192: Add support for frequency hopping through FHCTL
>    clk: mediatek: mt8195: Add support for frequency hopping through FHCTL
> 
>   .../bindings/clock/mediatek,mt8186-fhctl.yaml |  7 +-
>   drivers/clk/mediatek/clk-fhctl.c              | 26 ++++++-
>   drivers/clk/mediatek/clk-fhctl.h              |  9 ++-
>   drivers/clk/mediatek/clk-mt6795-apmixedsys.c  | 63 ++++++++++++++++-
>   drivers/clk/mediatek/clk-mt8173-apmixedsys.c  | 65 ++++++++++++++++-
>   drivers/clk/mediatek/clk-mt8186-apmixedsys.c  |  2 +
>   drivers/clk/mediatek/clk-mt8192.c             | 67 +++++++++++++++++-
>   drivers/clk/mediatek/clk-mt8195-apmixedsys.c  | 69 ++++++++++++++++++-
>   drivers/clk/mediatek/clk-pllfh.c              | 23 +++++--
>   drivers/clk/mediatek/clk-pllfh.h              |  1 +
>   10 files changed, 311 insertions(+), 21 deletions(-)
> 



From lkp at intel.com  Thu Dec 22 08:37:08 2022
From: lkp at intel.com (kernel test robot)
Date: Fri, 23 Dec 2022 00:37:08 +0800
Subject: [PATCH,v3] wifi: mt76: mt7915: add wds support when wed is
 enabled
In-Reply-To: <6f80d1b49a97d2a08f6ec45f335a1fc8de21ebb9.1671454422.git.sujuan.chen@mediatek.com>
References: <6f80d1b49a97d2a08f6ec45f335a1fc8de21ebb9.1671454422.git.sujuan.chen@mediatek.com>
Message-ID: <202212230059.nCWcra3z-lkp@intel.com>

Hi Sujuan,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on wireless-next/main]
[also build test ERROR on wireless/main linus/master next-20221220]
[cannot apply to v6.1]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Sujuan-Chen/wifi-mt76-mt7915-add-wds-support-when-wed-is-enabled/20221220-143454
base:   https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main
patch link:    https://lore.kernel.org/r/6f80d1b49a97d2a08f6ec45f335a1fc8de21ebb9.1671454422.git.sujuan.chen%40mediatek.com
patch subject: [PATCH,v3] wifi: mt76: mt7915: add wds support when wed is enabled
config: x86_64-allyesconfig
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/91549c10e7cbfff9de335774417ffa2c7197bd40
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Sujuan-Chen/wifi-mt76-mt7915-add-wds-support-when-wed-is-enabled/20221220-143454
        git checkout 91549c10e7cbfff9de335774417ffa2c7197bd40
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp at intel.com>

All errors (new ones prefixed by >>):

>> drivers/net/wireless/mediatek/mt76/mt7915/mcu.c:2320:26: error: no member named 'rev_id' in 'struct mtk_wed_device'
                                                   dev->mt76.mmio.wed.rev_id, 0);
                                                   ~~~~~~~~~~~~~~~~~~ ^
   1 error generated.


vim +2320 drivers/net/wireless/mediatek/mt76/mt7915/mcu.c

  2280	
  2281	int mt7915_mcu_init_firmware(struct mt7915_dev *dev)
  2282	{
  2283		int ret;
  2284	
  2285		/* force firmware operation mode into normal state,
  2286		 * which should be set before firmware download stage.
  2287		 */
  2288		mt76_wr(dev, MT_SWDEF_MODE, MT_SWDEF_NORMAL_MODE);
  2289	
  2290		ret = mt7915_driver_own(dev, 0);
  2291		if (ret)
  2292			return ret;
  2293		/* set driver own for band1 when two hif exist */
  2294		if (dev->hif2) {
  2295			ret = mt7915_driver_own(dev, 1);
  2296			if (ret)
  2297				return ret;
  2298		}
  2299	
  2300		ret = mt7915_load_firmware(dev);
  2301		if (ret)
  2302			return ret;
  2303	
  2304		set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
  2305		ret = mt7915_mcu_fw_log_2_host(dev, MCU_FW_LOG_WM, 0);
  2306		if (ret)
  2307			return ret;
  2308	
  2309		ret = mt7915_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, 0);
  2310		if (ret)
  2311			return ret;
  2312	
  2313		if (mtk_wed_device_active(&dev->mt76.mmio.wed)) {
  2314			if (is_mt7915(&dev->mt76))
  2315				ret = mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(CAPABILITY),
  2316							0, 0, 0);
  2317			else
  2318				ret = mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET),
  2319							MCU_WA_PARAM_WED_VERSION,
> 2320							dev->mt76.mmio.wed.rev_id, 0);
  2321			if (ret)
  2322				return ret;
  2323		}
  2324	
  2325		ret = mt7915_mcu_set_mwds(dev, 1);
  2326		if (ret)
  2327			return ret;
  2328	
  2329		ret = mt7915_mcu_set_muru_ctrl(dev, MURU_SET_PLATFORM_TYPE,
  2330					       MURU_PLATFORM_TYPE_PERF_LEVEL_2);
  2331		if (ret)
  2332			return ret;
  2333	
  2334		ret = mt7915_mcu_init_rx_airtime(dev);
  2335		if (ret)
  2336			return ret;
  2337	
  2338		return mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET),
  2339					 MCU_WA_PARAM_RED, 0, 0);
  2340	}
  2341	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
-------------- next part --------------
#
# Automatically generated file; DO NOT EDIT.
# Linux/x86_64 6.1.0-rc8 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="clang version 14.0.6 (git://gitmirror/llvm_project f28c006a5895fc0e329fe15fead81e37457cb1d1)"
CONFIG_GCC_VERSION=0
CONFIG_CC_IS_CLANG=y
CONFIG_CLANG_VERSION=140006
CONFIG_AS_IS_LLVM=y
CONFIG_AS_VERSION=140006
CONFIG_LD_VERSION=0
CONFIG_LD_IS_LLD=y
CONFIG_LLD_VERSION=140006
CONFIG_RUST_IS_AVAILABLE=y
CONFIG_CC_CAN_LINK=y
CONFIG_CC_CAN_LINK_STATIC=y
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
CONFIG_TOOLS_SUPPORT_RELR=y
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
CONFIG_PAHOLE_VERSION=123
CONFIG_CONSTRUCTORS=y
CONFIG_IRQ_WORK=y
CONFIG_BUILDTIME_TABLE_SORT=y
CONFIG_THREAD_INFO_IN_TASK=y

#
# General setup
#
CONFIG_INIT_ENV_ARG_LIMIT=32
# CONFIG_COMPILE_TEST is not set
# CONFIG_WERROR is not set
CONFIG_UAPI_HEADER_TEST=y
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_BUILD_SALT=""
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
CONFIG_HAVE_KERNEL_XZ=y
CONFIG_HAVE_KERNEL_LZO=y
CONFIG_HAVE_KERNEL_LZ4=y
CONFIG_HAVE_KERNEL_ZSTD=y
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not set
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_ZSTD is not set
CONFIG_DEFAULT_INIT=""
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_SYSVIPC_COMPAT=y
CONFIG_POSIX_MQUEUE=y
CONFIG_POSIX_MQUEUE_SYSCTL=y
CONFIG_WATCH_QUEUE=y
CONFIG_CROSS_MEMORY_ATTACH=y
CONFIG_USELIB=y
CONFIG_AUDIT=y
CONFIG_HAVE_ARCH_AUDITSYSCALL=y
CONFIG_AUDITSYSCALL=y

#
# IRQ subsystem
#
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
CONFIG_GENERIC_PENDING_IRQ=y
CONFIG_GENERIC_IRQ_MIGRATION=y
CONFIG_GENERIC_IRQ_INJECTION=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_CHIP=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_SIM=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_GENERIC_MSI_IRQ=y
CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
CONFIG_IRQ_MSI_IOMMU=y
CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y
CONFIG_GENERIC_IRQ_RESERVATION_MODE=y
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
CONFIG_GENERIC_IRQ_DEBUGFS=y
# end of IRQ subsystem

CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_ARCH_CLOCKSOURCE_INIT=y
CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y
CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
CONFIG_CONTEXT_TRACKING=y
CONFIG_CONTEXT_TRACKING_IDLE=y

#
# Timers subsystem
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
CONFIG_NO_HZ_IDLE=y
# CONFIG_NO_HZ_FULL is not set
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=125
# end of Timers subsystem

CONFIG_BPF=y
CONFIG_HAVE_EBPF_JIT=y
CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y

#
# BPF subsystem
#
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_JIT=y
CONFIG_BPF_JIT_ALWAYS_ON=y
CONFIG_BPF_JIT_DEFAULT_ON=y
CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
CONFIG_USERMODE_DRIVER=y
# CONFIG_BPF_PRELOAD is not set
# CONFIG_BPF_LSM is not set
# end of BPF subsystem

CONFIG_PREEMPT_VOLUNTARY_BUILD=y
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set
CONFIG_PREEMPT_COUNT=y
# CONFIG_PREEMPT_DYNAMIC is not set
CONFIG_SCHED_CORE=y

#
# CPU/Task time and stats accounting
#
CONFIG_TICK_CPU_ACCOUNTING=y
# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
CONFIG_IRQ_TIME_ACCOUNTING=y
CONFIG_HAVE_SCHED_AVG_IRQ=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
CONFIG_TASKSTATS=y
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_PSI=y
CONFIG_PSI_DEFAULT_DISABLED=y
# end of CPU/Task time and stats accounting

CONFIG_CPU_ISOLATION=y

#
# RCU Subsystem
#
CONFIG_TREE_RCU=y
CONFIG_RCU_EXPERT=y
CONFIG_SRCU=y
CONFIG_TREE_SRCU=y
CONFIG_TASKS_RCU_GENERIC=y
CONFIG_FORCE_TASKS_RCU=y
CONFIG_TASKS_RCU=y
CONFIG_FORCE_TASKS_RUDE_RCU=y
CONFIG_TASKS_RUDE_RCU=y
CONFIG_FORCE_TASKS_TRACE_RCU=y
CONFIG_TASKS_TRACE_RCU=y
CONFIG_RCU_STALL_COMMON=y
CONFIG_RCU_NEED_SEGCBLIST=y
CONFIG_RCU_FANOUT=64
CONFIG_RCU_FANOUT_LEAF=16
CONFIG_RCU_NOCB_CPU=y
CONFIG_RCU_NOCB_CPU_DEFAULT_ALL=y
CONFIG_TASKS_TRACE_RCU_READ_MB=y
# end of RCU Subsystem

CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_IKHEADERS=y
CONFIG_LOG_BUF_SHIFT=20
CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
CONFIG_PRINTK_INDEX=y
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y

#
# Scheduler features
#
CONFIG_UCLAMP_TASK=y
CONFIG_UCLAMP_BUCKETS_COUNT=5
# end of Scheduler features

CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
CONFIG_CC_HAS_INT128=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough"
CONFIG_GCC12_NO_ARRAY_BOUNDS=y
CONFIG_ARCH_SUPPORTS_INT128=y
CONFIG_NUMA_BALANCING=y
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
CONFIG_CGROUPS=y
CONFIG_PAGE_COUNTER=y
CONFIG_CGROUP_FAVOR_DYNMODS=y
CONFIG_MEMCG=y
CONFIG_MEMCG_KMEM=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_UCLAMP_TASK_GROUP=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_RDMA=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CPUSETS=y
CONFIG_PROC_PID_CPUSET=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_PERF=y
# CONFIG_CGROUP_BPF is not set
CONFIG_CGROUP_MISC=y
CONFIG_CGROUP_DEBUG=y
CONFIG_SOCK_CGROUP_DATA=y
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_TIME_NS=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_SCHED_AUTOGROUP=y
# CONFIG_SYSFS_DEPRECATED is not set
CONFIG_RELAY=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_GZIP=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
CONFIG_RD_XZ=y
CONFIG_RD_LZO=y
CONFIG_RD_LZ4=y
CONFIG_RD_ZSTD=y
CONFIG_BOOT_CONFIG=y
CONFIG_BOOT_CONFIG_EMBED=y
CONFIG_BOOT_CONFIG_EMBED_FILE=""
CONFIG_INITRAMFS_PRESERVE_MTIME=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_LD_ORPHAN_WARN=y
CONFIG_SYSCTL=y
CONFIG_HAVE_UID16=y
CONFIG_SYSCTL_EXCEPTION_TRACE=y
CONFIG_HAVE_PCSPKR_PLATFORM=y
CONFIG_EXPERT=y
CONFIG_UID16=y
CONFIG_MULTIUSER=y
CONFIG_SGETMASK_SYSCALL=y
CONFIG_SYSFS_SYSCALL=y
CONFIG_FHANDLE=y
CONFIG_POSIX_TIMERS=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_PCSPKR_PLATFORM=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_FUTEX_PI=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_IO_URING=y
CONFIG_ADVISE_SYSCALLS=y
CONFIG_MEMBARRIER=y
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
CONFIG_KALLSYMS_ABSOLUTE_PERCPU=y
CONFIG_KALLSYMS_BASE_RELATIVE=y
CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
CONFIG_KCMP=y
CONFIG_RSEQ=y
CONFIG_DEBUG_RSEQ=y
CONFIG_EMBEDDED=y
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_GUEST_PERF_EVENTS=y
CONFIG_PERF_USE_VMALLOC=y
CONFIG_PC104=y

#
# Kernel Performance Events And Counters
#
CONFIG_PERF_EVENTS=y
CONFIG_DEBUG_PERF_USE_VMALLOC=y
# end of Kernel Performance Events And Counters

CONFIG_SYSTEM_DATA_VERIFICATION=y
CONFIG_PROFILING=y
# CONFIG_RUST is not set
CONFIG_TRACEPOINTS=y
# end of General setup

CONFIG_64BIT=y
CONFIG_X86_64=y
CONFIG_X86=y
CONFIG_INSTRUCTION_DECODER=y
CONFIG_OUTPUT_FORMAT="elf64-x86-64"
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_MMU=y
CONFIG_ARCH_MMAP_RND_BITS_MIN=28
CONFIG_ARCH_MMAP_RND_BITS_MAX=32
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_HAS_CPU_RELAX=y
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_NR_GPIO=1024
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_AUDIT_ARCH=y
CONFIG_HAVE_INTEL_TXT=y
CONFIG_X86_64_SMP=y
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_DYNAMIC_PHYSICAL_MASK=y
CONFIG_PGTABLE_LEVELS=5
CONFIG_CC_HAS_SANE_STACKPROTECTOR=y

#
# Processor type and features
#
CONFIG_SMP=y
CONFIG_X86_FEATURE_NAMES=y
CONFIG_X86_X2APIC=y
CONFIG_X86_MPPARSE=y
CONFIG_GOLDFISH=y
CONFIG_X86_CPU_RESCTRL=y
CONFIG_X86_EXTENDED_PLATFORM=y
CONFIG_X86_NUMACHIP=y
CONFIG_X86_VSMP=y
CONFIG_X86_UV=y
# CONFIG_X86_GOLDFISH is not set
CONFIG_X86_INTEL_MID=y
CONFIG_X86_INTEL_LPSS=y
# CONFIG_X86_AMD_PLATFORM_DEVICE is not set
CONFIG_IOSF_MBI=y
CONFIG_IOSF_MBI_DEBUG=y
CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
# CONFIG_SCHED_OMIT_FRAME_POINTER is not set
CONFIG_HYPERVISOR_GUEST=y
CONFIG_PARAVIRT=y
CONFIG_PARAVIRT_XXL=y
CONFIG_PARAVIRT_DEBUG=y
CONFIG_PARAVIRT_SPINLOCKS=y
CONFIG_X86_HV_CALLBACK_VECTOR=y
CONFIG_XEN=y
CONFIG_XEN_PV=y
CONFIG_XEN_512GB=y
CONFIG_XEN_PV_SMP=y
CONFIG_XEN_PV_DOM0=y
CONFIG_XEN_PVHVM=y
CONFIG_XEN_PVHVM_SMP=y
CONFIG_XEN_PVHVM_GUEST=y
CONFIG_XEN_SAVE_RESTORE=y
CONFIG_XEN_DEBUG_FS=y
CONFIG_XEN_PVH=y
CONFIG_XEN_DOM0=y
CONFIG_XEN_PV_MSR_SAFE=y
CONFIG_KVM_GUEST=y
CONFIG_ARCH_CPUIDLE_HALTPOLL=y
CONFIG_PVH=y
CONFIG_PARAVIRT_TIME_ACCOUNTING=y
CONFIG_PARAVIRT_CLOCK=y
CONFIG_JAILHOUSE_GUEST=y
CONFIG_ACRN_GUEST=y
CONFIG_INTEL_TDX_GUEST=y
# CONFIG_MK8 is not set
# CONFIG_MPSC is not set
# CONFIG_MCORE2 is not set
# CONFIG_MATOM is not set
CONFIG_GENERIC_CPU=y
CONFIG_X86_INTERNODE_CACHE_SHIFT=12
CONFIG_X86_L1_CACHE_SHIFT=6
CONFIG_X86_TSC=y
CONFIG_X86_CMPXCHG64=y
CONFIG_X86_CMOV=y
CONFIG_X86_MINIMUM_CPU_FAMILY=64
CONFIG_X86_DEBUGCTLMSR=y
CONFIG_IA32_FEAT_CTL=y
CONFIG_X86_VMX_FEATURE_NAMES=y
CONFIG_PROCESSOR_SELECT=y
CONFIG_CPU_SUP_INTEL=y
# CONFIG_CPU_SUP_AMD is not set
# CONFIG_CPU_SUP_HYGON is not set
# CONFIG_CPU_SUP_CENTAUR is not set
# CONFIG_CPU_SUP_ZHAOXIN is not set
CONFIG_HPET_TIMER=y
CONFIG_HPET_EMULATE_RTC=y
CONFIG_DMI=y
CONFIG_BOOT_VESA_SUPPORT=y
CONFIG_MAXSMP=y
CONFIG_NR_CPUS_RANGE_BEGIN=8192
CONFIG_NR_CPUS_RANGE_END=8192
CONFIG_NR_CPUS_DEFAULT=8192
CONFIG_NR_CPUS=8192
CONFIG_SCHED_CLUSTER=y
CONFIG_SCHED_SMT=y
CONFIG_SCHED_MC=y
CONFIG_SCHED_MC_PRIO=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
CONFIG_X86_MCELOG_LEGACY=y
CONFIG_X86_MCE_INTEL=y
CONFIG_X86_MCE_THRESHOLD=y
CONFIG_X86_MCE_INJECT=y

#
# Performance monitoring
#
CONFIG_PERF_EVENTS_INTEL_UNCORE=y
CONFIG_PERF_EVENTS_INTEL_RAPL=y
CONFIG_PERF_EVENTS_INTEL_CSTATE=y
# end of Performance monitoring

CONFIG_X86_16BIT=y
CONFIG_X86_ESPFIX64=y
CONFIG_X86_VSYSCALL_EMULATION=y
CONFIG_X86_IOPL_IOPERM=y
CONFIG_MICROCODE=y
CONFIG_MICROCODE_INTEL=y
CONFIG_MICROCODE_LATE_LOADING=y
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
CONFIG_X86_5LEVEL=y
CONFIG_X86_DIRECT_GBPAGES=y
CONFIG_X86_CPA_STATISTICS=y
CONFIG_X86_MEM_ENCRYPT=y
CONFIG_NUMA=y
# CONFIG_AMD_NUMA is not set
CONFIG_X86_64_ACPI_NUMA=y
CONFIG_NUMA_EMU=y
CONFIG_NODES_SHIFT=10
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
CONFIG_ARCH_MEMORY_PROBE=y
CONFIG_ARCH_PROC_KCORE_TEXT=y
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
CONFIG_X86_PMEM_LEGACY_DEVICE=y
CONFIG_X86_PMEM_LEGACY=y
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
CONFIG_MTRR=y
CONFIG_MTRR_SANITIZER=y
CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0
CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
CONFIG_X86_PAT=y
CONFIG_ARCH_USES_PG_UNCACHED=y
CONFIG_X86_UMIP=y
CONFIG_CC_HAS_IBT=y
CONFIG_X86_KERNEL_IBT=y
CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y
CONFIG_X86_INTEL_TSX_MODE_OFF=y
# CONFIG_X86_INTEL_TSX_MODE_ON is not set
# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set
CONFIG_X86_SGX=y
CONFIG_EFI=y
CONFIG_EFI_STUB=y
CONFIG_EFI_MIXED=y
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
CONFIG_SCHED_HRTICK=y
CONFIG_KEXEC=y
CONFIG_KEXEC_FILE=y
CONFIG_ARCH_HAS_KEXEC_PURGATORY=y
CONFIG_KEXEC_SIG=y
CONFIG_KEXEC_SIG_FORCE=y
CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
CONFIG_CRASH_DUMP=y
CONFIG_KEXEC_JUMP=y
CONFIG_PHYSICAL_START=0x1000000
CONFIG_RELOCATABLE=y
# CONFIG_RANDOMIZE_BASE is not set
CONFIG_PHYSICAL_ALIGN=0x200000
CONFIG_DYNAMIC_MEMORY_LAYOUT=y
CONFIG_HOTPLUG_CPU=y
CONFIG_BOOTPARAM_HOTPLUG_CPU0=y
CONFIG_DEBUG_HOTPLUG_CPU0=y
CONFIG_COMPAT_VDSO=y
CONFIG_LEGACY_VSYSCALL_XONLY=y
# CONFIG_LEGACY_VSYSCALL_NONE is not set
# CONFIG_CMDLINE_BOOL is not set
CONFIG_MODIFY_LDT_SYSCALL=y
CONFIG_STRICT_SIGALTSTACK_SIZE=y
CONFIG_HAVE_LIVEPATCH=y
CONFIG_LIVEPATCH=y
# end of Processor type and features

CONFIG_SPECULATION_MITIGATIONS=y
CONFIG_PAGE_TABLE_ISOLATION=y
CONFIG_RETPOLINE=y
CONFIG_CPU_IBRS_ENTRY=y
CONFIG_ARCH_HAS_ADD_PAGES=y
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y

#
# Power management and ACPI options
#
CONFIG_ARCH_HIBERNATION_HEADER=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
CONFIG_SUSPEND_SKIP_SYNC=y
CONFIG_HIBERNATE_CALLBACKS=y
CONFIG_HIBERNATION=y
CONFIG_HIBERNATION_SNAPSHOT_DEV=y
CONFIG_PM_STD_PARTITION=""
CONFIG_PM_SLEEP=y
CONFIG_PM_SLEEP_SMP=y
CONFIG_PM_AUTOSLEEP=y
CONFIG_PM_USERSPACE_AUTOSLEEP=y
CONFIG_PM_WAKELOCKS=y
CONFIG_PM_WAKELOCKS_LIMIT=100
CONFIG_PM_WAKELOCKS_GC=y
CONFIG_PM=y
CONFIG_PM_DEBUG=y
CONFIG_PM_ADVANCED_DEBUG=y
# CONFIG_PM_TEST_SUSPEND is not set
CONFIG_PM_SLEEP_DEBUG=y
CONFIG_DPM_WATCHDOG=y
CONFIG_DPM_WATCHDOG_TIMEOUT=120
CONFIG_PM_TRACE=y
CONFIG_PM_TRACE_RTC=y
CONFIG_PM_CLK=y
CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
CONFIG_ENERGY_MODEL=y
CONFIG_ARCH_SUPPORTS_ACPI=y
CONFIG_ACPI=y
CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y
CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y
CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y
CONFIG_ACPI_TABLE_LIB=y
CONFIG_ACPI_DEBUGGER=y
CONFIG_ACPI_DEBUGGER_USER=y
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_FPDT=y
CONFIG_ACPI_LPIT=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_EC_DEBUGFS=y
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_VIDEO=y
CONFIG_ACPI_FAN=y
CONFIG_ACPI_TAD=y
CONFIG_ACPI_DOCK=y
CONFIG_ACPI_CPU_FREQ_PSS=y
CONFIG_ACPI_PROCESSOR_CSTATE=y
CONFIG_ACPI_PROCESSOR_IDLE=y
CONFIG_ACPI_CPPC_LIB=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_IPMI=y
CONFIG_ACPI_HOTPLUG_CPU=y
CONFIG_ACPI_PROCESSOR_AGGREGATOR=y
CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_PLATFORM_PROFILE=y
CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y
CONFIG_ACPI_TABLE_UPGRADE=y
CONFIG_ACPI_DEBUG=y
CONFIG_ACPI_PCI_SLOT=y
CONFIG_ACPI_CONTAINER=y
CONFIG_ACPI_HOTPLUG_MEMORY=y
CONFIG_ACPI_HOTPLUG_IOAPIC=y
CONFIG_ACPI_SBS=y
CONFIG_ACPI_HED=y
CONFIG_ACPI_CUSTOM_METHOD=y
CONFIG_ACPI_BGRT=y
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
CONFIG_ACPI_NFIT=y
CONFIG_NFIT_SECURITY_DEBUG=y
CONFIG_ACPI_NUMA=y
CONFIG_ACPI_HMAT=y
CONFIG_HAVE_ACPI_APEI=y
CONFIG_HAVE_ACPI_APEI_NMI=y
CONFIG_ACPI_APEI=y
CONFIG_ACPI_APEI_GHES=y
CONFIG_ACPI_APEI_PCIEAER=y
CONFIG_ACPI_APEI_MEMORY_FAILURE=y
CONFIG_ACPI_APEI_EINJ=y
CONFIG_ACPI_APEI_ERST_DEBUG=y
CONFIG_ACPI_DPTF=y
CONFIG_DPTF_POWER=y
CONFIG_DPTF_PCH_FIVR=y
CONFIG_ACPI_WATCHDOG=y
CONFIG_ACPI_EXTLOG=y
CONFIG_ACPI_ADXL=y
CONFIG_ACPI_CONFIGFS=y
CONFIG_ACPI_PFRUT=y
CONFIG_ACPI_PCC=y
CONFIG_PMIC_OPREGION=y
CONFIG_BYTCRC_PMIC_OPREGION=y
CONFIG_CHTCRC_PMIC_OPREGION=y
CONFIG_XPOWER_PMIC_OPREGION=y
CONFIG_BXT_WC_PMIC_OPREGION=y
CONFIG_CHT_WC_PMIC_OPREGION=y
CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_TPS68470_PMIC_OPREGION=y
CONFIG_ACPI_VIOT=y
CONFIG_ACPI_PRMT=y
CONFIG_X86_PM_TIMER=y

#
# CPU Frequency scaling
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
CONFIG_CPU_FREQ_GOV_COMMON=y
CONFIG_CPU_FREQ_STAT=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y

#
# CPU frequency scaling drivers
#
CONFIG_CPUFREQ_DT=y
CONFIG_CPUFREQ_DT_PLATDEV=y
CONFIG_X86_INTEL_PSTATE=y
CONFIG_X86_PCC_CPUFREQ=y
# CONFIG_X86_AMD_PSTATE is not set
CONFIG_X86_AMD_PSTATE_UT=y
CONFIG_X86_ACPI_CPUFREQ=y
# CONFIG_X86_POWERNOW_K8 is not set
CONFIG_X86_SPEEDSTEP_CENTRINO=y
CONFIG_X86_P4_CLOCKMOD=y

#
# shared options
#
CONFIG_X86_SPEEDSTEP_LIB=y
# end of CPU Frequency scaling

#
# CPU Idle
#
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
CONFIG_CPU_IDLE_GOV_TEO=y
CONFIG_CPU_IDLE_GOV_HALTPOLL=y
CONFIG_HALTPOLL_CPUIDLE=y
# end of CPU Idle

CONFIG_INTEL_IDLE=y
# end of Power management and ACPI options

#
# Bus options (PCI etc.)
#
CONFIG_PCI_DIRECT=y
CONFIG_PCI_MMCONFIG=y
CONFIG_PCI_XEN=y
CONFIG_MMCONF_FAM10H=y
CONFIG_PCI_CNB20LE_QUIRK=y
CONFIG_ISA_BUS=y
CONFIG_ISA_DMA_API=y
# end of Bus options (PCI etc.)

#
# Binary Emulations
#
CONFIG_IA32_EMULATION=y
CONFIG_COMPAT_32=y
CONFIG_COMPAT=y
CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
# end of Binary Emulations

CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_PFNCACHE=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_HAVE_KVM_IRQFD=y
CONFIG_HAVE_KVM_IRQ_ROUTING=y
CONFIG_HAVE_KVM_DIRTY_RING=y
CONFIG_HAVE_KVM_DIRTY_RING_TSO=y
CONFIG_HAVE_KVM_DIRTY_RING_ACQ_REL=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_MMIO=y
CONFIG_KVM_ASYNC_PF=y
CONFIG_HAVE_KVM_MSI=y
CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
CONFIG_KVM_VFIO=y
CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
CONFIG_KVM_COMPAT=y
CONFIG_HAVE_KVM_IRQ_BYPASS=y
CONFIG_HAVE_KVM_NO_POLL=y
CONFIG_KVM_XFER_TO_GUEST_WORK=y
CONFIG_HAVE_KVM_PM_NOTIFIER=y
CONFIG_VIRTUALIZATION=y
CONFIG_KVM=y
# CONFIG_KVM_WERROR is not set
CONFIG_KVM_INTEL=y
CONFIG_X86_SGX_KVM=y
# CONFIG_KVM_AMD is not set
CONFIG_KVM_XEN=y
CONFIG_KVM_EXTERNAL_WRITE_TRACKING=y
CONFIG_AS_AVX512=y
CONFIG_AS_SHA1_NI=y
CONFIG_AS_SHA256_NI=y
CONFIG_AS_TPAUSE=y

#
# General architecture-dependent options
#
CONFIG_CRASH_CORE=y
CONFIG_KEXEC_CORE=y
CONFIG_HAVE_IMA_KEXEC=y
CONFIG_HOTPLUG_SMT=y
CONFIG_GENERIC_ENTRY=y
CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
# CONFIG_STATIC_KEYS_SELFTEST is not set
# CONFIG_STATIC_CALL_SELFTEST is not set
CONFIG_OPTPROBES=y
CONFIG_KPROBES_ON_FTRACE=y
CONFIG_UPROBES=y
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_ARCH_USE_BUILTIN_BSWAP=y
CONFIG_KRETPROBES=y
CONFIG_KRETPROBE_ON_RETHOOK=y
CONFIG_USER_RETURN_NOTIFIER=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_OPTPROBES=y
CONFIG_HAVE_KPROBES_ON_FTRACE=y
CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y
CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
CONFIG_HAVE_NMI=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_CONTIGUOUS=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
CONFIG_ARCH_HAS_SET_MEMORY=y
CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
CONFIG_ARCH_WANTS_NO_INSTR=y
CONFIG_HAVE_ASM_MODVERSIONS=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_RSEQ=y
CONFIG_HAVE_RUST=y
CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y
CONFIG_HAVE_HW_BREAKPOINT=y
CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
CONFIG_HAVE_USER_RETURN_NOTIFIER=y
CONFIG_HAVE_PERF_EVENTS_NMI=y
CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y
CONFIG_HAVE_PERF_REGS=y
CONFIG_HAVE_PERF_USER_STACK_DUMP=y
CONFIG_HAVE_ARCH_JUMP_LABEL=y
CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y
CONFIG_MMU_GATHER_TABLE_FREE=y
CONFIG_MMU_GATHER_RCU_TABLE_FREE=y
CONFIG_MMU_GATHER_MERGE_VMAS=y
CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
CONFIG_HAVE_CMPXCHG_LOCAL=y
CONFIG_HAVE_CMPXCHG_DOUBLE=y
CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y
CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y
CONFIG_HAVE_ARCH_SECCOMP=y
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_SECCOMP=y
CONFIG_SECCOMP_FILTER=y
CONFIG_SECCOMP_CACHE_DEBUG=y
CONFIG_HAVE_ARCH_STACKLEAK=y
CONFIG_HAVE_STACKPROTECTOR=y
CONFIG_STACKPROTECTOR=y
CONFIG_STACKPROTECTOR_STRONG=y
CONFIG_ARCH_SUPPORTS_LTO_CLANG=y
CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y
CONFIG_LTO_NONE=y
CONFIG_ARCH_SUPPORTS_CFI_CLANG=y
CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y
CONFIG_HAVE_CONTEXT_TRACKING_USER=y
CONFIG_HAVE_CONTEXT_TRACKING_USER_OFFSTACK=y
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
CONFIG_HAVE_MOVE_PUD=y
CONFIG_HAVE_MOVE_PMD=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y
CONFIG_HAVE_ARCH_HUGE_VMAP=y
CONFIG_HAVE_ARCH_HUGE_VMALLOC=y
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
CONFIG_HAVE_ARCH_SOFT_DIRTY=y
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y
CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y
CONFIG_SOFTIRQ_ON_OWN_STACK=y
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
CONFIG_HAVE_EXIT_THREAD=y
CONFIG_ARCH_MMAP_RND_BITS=28
CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y
CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8
CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=y
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
CONFIG_HAVE_OBJTOOL=y
CONFIG_HAVE_JUMP_LABEL_HACK=y
CONFIG_HAVE_NOINSTR_HACK=y
CONFIG_HAVE_NOINSTR_VALIDATION=y
CONFIG_HAVE_UACCESS_VALIDATION=y
CONFIG_HAVE_STACK_VALIDATION=y
CONFIG_HAVE_RELIABLE_STACKTRACE=y
CONFIG_ISA_BUS_API=y
CONFIG_OLD_SIGSUSPEND3=y
CONFIG_COMPAT_OLD_SIGACTION=y
CONFIG_COMPAT_32BIT_TIME=y
CONFIG_HAVE_ARCH_VMAP_STACK=y
CONFIG_VMAP_STACK=y
CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
CONFIG_RANDOMIZE_KSTACK_OFFSET=y
CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y
CONFIG_ARCH_USE_MEMREMAP_PROT=y
CONFIG_LOCK_EVENT_COUNTS=y
CONFIG_ARCH_HAS_MEM_ENCRYPT=y
CONFIG_ARCH_HAS_CC_PLATFORM=y
CONFIG_HAVE_STATIC_CALL=y
CONFIG_HAVE_STATIC_CALL_INLINE=y
CONFIG_HAVE_PREEMPT_DYNAMIC=y
CONFIG_HAVE_PREEMPT_DYNAMIC_CALL=y
CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y
CONFIG_ARCH_HAS_ELFCORE_COMPAT=y
CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y
CONFIG_DYNAMIC_SIGFRAME=y
CONFIG_HAVE_ARCH_NODE_DEV_GROUP=y
CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG=y

#
# GCOV-based kernel profiling
#
CONFIG_GCOV_KERNEL=y
CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
# CONFIG_GCOV_PROFILE_ALL is not set
# end of GCOV-based kernel profiling

CONFIG_HAVE_GCC_PLUGINS=y
# end of General architecture-dependent options

CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULE_SIG_FORMAT=y
CONFIG_MODULES=y
CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODULE_UNLOAD_TAINT_TRACKING=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_FORCE=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_SHA1=y
# CONFIG_MODULE_SIG_SHA224 is not set
# CONFIG_MODULE_SIG_SHA256 is not set
# CONFIG_MODULE_SIG_SHA384 is not set
# CONFIG_MODULE_SIG_SHA512 is not set
CONFIG_MODULE_SIG_HASH="sha1"
CONFIG_MODULE_COMPRESS_NONE=y
# CONFIG_MODULE_COMPRESS_GZIP is not set
# CONFIG_MODULE_COMPRESS_XZ is not set
# CONFIG_MODULE_COMPRESS_ZSTD is not set
CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=y
CONFIG_MODPROBE_PATH="/sbin/modprobe"
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_MODULES_TREE_LOOKUP=y
CONFIG_BLOCK=y
CONFIG_BLOCK_LEGACY_AUTOLOAD=y
CONFIG_BLK_RQ_ALLOC_TIME=y
CONFIG_BLK_CGROUP_RWSTAT=y
CONFIG_BLK_DEV_BSG_COMMON=y
CONFIG_BLK_ICQ=y
CONFIG_BLK_DEV_BSGLIB=y
CONFIG_BLK_DEV_INTEGRITY=y
CONFIG_BLK_DEV_INTEGRITY_T10=y
CONFIG_BLK_DEV_ZONED=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLK_DEV_THROTTLING_LOW=y
CONFIG_BLK_WBT=y
CONFIG_BLK_WBT_MQ=y
CONFIG_BLK_CGROUP_IOLATENCY=y
CONFIG_BLK_CGROUP_FC_APPID=y
CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOPRIO=y
CONFIG_BLK_DEBUG_FS=y
CONFIG_BLK_DEBUG_FS_ZONED=y
CONFIG_BLK_SED_OPAL=y
CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
CONFIG_ACORN_PARTITION=y
CONFIG_ACORN_PARTITION_CUMANA=y
CONFIG_ACORN_PARTITION_EESOX=y
CONFIG_ACORN_PARTITION_ICS=y
CONFIG_ACORN_PARTITION_ADFS=y
CONFIG_ACORN_PARTITION_POWERTEC=y
CONFIG_ACORN_PARTITION_RISCIX=y
CONFIG_AIX_PARTITION=y
CONFIG_OSF_PARTITION=y
CONFIG_AMIGA_PARTITION=y
CONFIG_ATARI_PARTITION=y
CONFIG_MAC_PARTITION=y
CONFIG_MSDOS_PARTITION=y
CONFIG_BSD_DISKLABEL=y
CONFIG_MINIX_SUBPARTITION=y
CONFIG_SOLARIS_X86_PARTITION=y
CONFIG_UNIXWARE_DISKLABEL=y
CONFIG_LDM_PARTITION=y
CONFIG_LDM_DEBUG=y
CONFIG_SGI_PARTITION=y
CONFIG_ULTRIX_PARTITION=y
CONFIG_SUN_PARTITION=y
CONFIG_KARMA_PARTITION=y
CONFIG_EFI_PARTITION=y
CONFIG_SYSV68_PARTITION=y
CONFIG_CMDLINE_PARTITION=y
# end of Partition Types

CONFIG_BLOCK_COMPAT=y
CONFIG_BLK_MQ_PCI=y
CONFIG_BLK_MQ_VIRTIO=y
CONFIG_BLK_MQ_RDMA=y
CONFIG_BLK_PM=y
CONFIG_BLOCK_HOLDER_DEPRECATED=y
CONFIG_BLK_MQ_STACKING=y

#
# IO Schedulers
#
CONFIG_MQ_IOSCHED_DEADLINE=y
CONFIG_MQ_IOSCHED_KYBER=y
CONFIG_IOSCHED_BFQ=y
CONFIG_BFQ_GROUP_IOSCHED=y
CONFIG_BFQ_CGROUP_DEBUG=y
# end of IO Schedulers

CONFIG_PREEMPT_NOTIFIERS=y
CONFIG_PADATA=y
CONFIG_ASN1=y
CONFIG_UNINLINE_SPIN_UNLOCK=y
CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
CONFIG_MUTEX_SPIN_ON_OWNER=y
CONFIG_RWSEM_SPIN_ON_OWNER=y
CONFIG_LOCK_SPIN_ON_OWNER=y
CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y
CONFIG_QUEUED_SPINLOCKS=y
CONFIG_ARCH_USE_QUEUED_RWLOCKS=y
CONFIG_QUEUED_RWLOCKS=y
CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y
CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=y
CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y
CONFIG_FREEZER=y

#
# Executable file formats
#
CONFIG_BINFMT_ELF=y
CONFIG_COMPAT_BINFMT_ELF=y
CONFIG_ELFCORE=y
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
CONFIG_BINFMT_SCRIPT=y
CONFIG_BINFMT_MISC=y
CONFIG_COREDUMP=y
# end of Executable file formats

#
# Memory Management options
#
CONFIG_ZPOOL=y
CONFIG_SWAP=y
CONFIG_ZSWAP=y
CONFIG_ZSWAP_DEFAULT_ON=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_842 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lzo"
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
# CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT="zbud"
CONFIG_ZBUD=y
CONFIG_Z3FOLD=y
CONFIG_ZSMALLOC=y
CONFIG_ZSMALLOC_STAT=y

#
# SLAB allocator options
#
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
CONFIG_SLAB_MERGE_DEFAULT=y
# CONFIG_SLAB_FREELIST_RANDOM is not set
# CONFIG_SLAB_FREELIST_HARDENED is not set
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB_CPU_PARTIAL=y
# end of SLAB allocator options

CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
CONFIG_COMPAT_BRK=y
CONFIG_SPARSEMEM=y
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
CONFIG_SPARSEMEM_VMEMMAP=y
CONFIG_HAVE_FAST_GUP=y
CONFIG_NUMA_KEEP_MEMINFO=y
CONFIG_MEMORY_ISOLATION=y
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
CONFIG_HAVE_BOOTMEM_INFO_NODE=y
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
CONFIG_MEMORY_HOTPLUG=y
CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y
CONFIG_MEMORY_HOTREMOVE=y
CONFIG_MHP_MEMMAP_ON_MEMORY=y
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
CONFIG_MEMORY_BALLOON=y
CONFIG_BALLOON_COMPACTION=y
CONFIG_COMPACTION=y
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
CONFIG_PAGE_REPORTING=y
CONFIG_MIGRATION=y
CONFIG_DEVICE_MIGRATION=y
CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y
CONFIG_ARCH_ENABLE_THP_MIGRATION=y
CONFIG_CONTIG_ALLOC=y
CONFIG_PHYS_ADDR_T_64BIT=y
CONFIG_MMU_NOTIFIER=y
CONFIG_KSM=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
CONFIG_MEMORY_FAILURE=y
CONFIG_HWPOISON_INJECT=y
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
CONFIG_ARCH_WANTS_THP_SWAP=y
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
CONFIG_THP_SWAP=y
CONFIG_READ_ONLY_THP_FOR_FS=y
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
CONFIG_USE_PERCPU_NUMA_NODE_ID=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
CONFIG_FRONTSWAP=y
CONFIG_CMA=y
CONFIG_CMA_DEBUG=y
CONFIG_CMA_DEBUGFS=y
CONFIG_CMA_SYSFS=y
CONFIG_CMA_AREAS=19
CONFIG_MEM_SOFT_DIRTY=y
CONFIG_GENERIC_EARLY_IOREMAP=y
CONFIG_DEFERRED_STRUCT_PAGE_INIT=y
CONFIG_PAGE_IDLE_FLAG=y
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y
CONFIG_ARCH_HAS_PTE_DEVMAP=y
CONFIG_ARCH_HAS_ZONE_DMA_SET=y
CONFIG_ZONE_DMA=y
CONFIG_ZONE_DMA32=y
CONFIG_ZONE_DEVICE=y
CONFIG_HMM_MIRROR=y
CONFIG_GET_FREE_REGION=y
CONFIG_DEVICE_PRIVATE=y
CONFIG_VMAP_PFN=y
CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y
CONFIG_ARCH_HAS_PKEYS=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_PERCPU_STATS=y
# CONFIG_GUP_TEST is not set
CONFIG_ARCH_HAS_PTE_SPECIAL=y
CONFIG_MAPPING_DIRTY_HELPERS=y
CONFIG_ANON_VMA_NAME=y
CONFIG_USERFAULTFD=y
CONFIG_HAVE_ARCH_USERFAULTFD_WP=y
CONFIG_HAVE_ARCH_USERFAULTFD_MINOR=y
CONFIG_PTE_MARKER=y
CONFIG_PTE_MARKER_UFFD_WP=y
CONFIG_LRU_GEN=y
CONFIG_LRU_GEN_ENABLED=y
CONFIG_LRU_GEN_STATS=y

#
# Data Access Monitoring
#
CONFIG_DAMON=y
CONFIG_DAMON_VADDR=y
CONFIG_DAMON_PADDR=y
CONFIG_DAMON_SYSFS=y
CONFIG_DAMON_DBGFS=y
CONFIG_DAMON_RECLAIM=y
CONFIG_DAMON_LRU_SORT=y
# end of Data Access Monitoring
# end of Memory Management options

CONFIG_NET=y
CONFIG_WANT_COMPAT_NETLINK_MESSAGES=y
CONFIG_COMPAT_NETLINK_MESSAGES=y
CONFIG_NET_INGRESS=y
CONFIG_NET_EGRESS=y
CONFIG_NET_REDIRECT=y
CONFIG_SKB_EXTENSIONS=y

#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_DIAG=y
CONFIG_UNIX=y
CONFIG_UNIX_SCM=y
CONFIG_AF_UNIX_OOB=y
CONFIG_UNIX_DIAG=y
CONFIG_TLS=y
CONFIG_TLS_DEVICE=y
CONFIG_TLS_TOE=y
CONFIG_XFRM=y
CONFIG_XFRM_OFFLOAD=y
CONFIG_XFRM_ALGO=y
CONFIG_XFRM_USER=y
CONFIG_XFRM_USER_COMPAT=y
CONFIG_XFRM_INTERFACE=y
CONFIG_XFRM_SUB_POLICY=y
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_AH=y
CONFIG_XFRM_ESP=y
CONFIG_XFRM_IPCOMP=y
CONFIG_NET_KEY=y
CONFIG_NET_KEY_MIGRATE=y
CONFIG_XFRM_ESPINTCP=y
CONFIG_SMC=y
CONFIG_SMC_DIAG=y
CONFIG_XDP_SOCKETS=y
CONFIG_XDP_SOCKETS_DIAG=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_FIB_TRIE_STATS=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_ROUTE_CLASSID=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
CONFIG_NET_IPIP=y
CONFIG_NET_IPGRE_DEMUX=y
CONFIG_NET_IP_TUNNEL=y
CONFIG_NET_IPGRE=y
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_IP_MROUTE_COMMON=y
CONFIG_IP_MROUTE=y
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=y
CONFIG_NET_UDP_TUNNEL=y
CONFIG_NET_FOU=y
CONFIG_NET_FOU_IP_TUNNELS=y
CONFIG_INET_AH=y
CONFIG_INET_ESP=y
CONFIG_INET_ESP_OFFLOAD=y
CONFIG_INET_ESPINTCP=y
CONFIG_INET_IPCOMP=y
CONFIG_INET_TABLE_PERTURB_ORDER=16
CONFIG_INET_XFRM_TUNNEL=y
CONFIG_INET_TUNNEL=y
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
CONFIG_INET_UDP_DIAG=y
CONFIG_INET_RAW_DIAG=y
CONFIG_INET_DIAG_DESTROY=y
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=y
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=y
CONFIG_TCP_CONG_HTCP=y
CONFIG_TCP_CONG_HSTCP=y
CONFIG_TCP_CONG_HYBLA=y
CONFIG_TCP_CONG_VEGAS=y
CONFIG_TCP_CONG_NV=y
CONFIG_TCP_CONG_SCALABLE=y
CONFIG_TCP_CONG_LP=y
CONFIG_TCP_CONG_VENO=y
CONFIG_TCP_CONG_YEAH=y
CONFIG_TCP_CONG_ILLINOIS=y
CONFIG_TCP_CONG_DCTCP=y
CONFIG_TCP_CONG_CDG=y
CONFIG_TCP_CONG_BBR=y
# CONFIG_DEFAULT_BIC is not set
CONFIG_DEFAULT_CUBIC=y
# CONFIG_DEFAULT_HTCP is not set
# CONFIG_DEFAULT_HYBLA is not set
# CONFIG_DEFAULT_VEGAS is not set
# CONFIG_DEFAULT_VENO is not set
# CONFIG_DEFAULT_WESTWOOD is not set
# CONFIG_DEFAULT_DCTCP is not set
# CONFIG_DEFAULT_CDG is not set
# CONFIG_DEFAULT_BBR is not set
# CONFIG_DEFAULT_RENO is not set
CONFIG_DEFAULT_TCP_CONG="cubic"
CONFIG_TCP_MD5SIG=y
CONFIG_IPV6=y
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_ROUTE_INFO=y
CONFIG_IPV6_OPTIMISTIC_DAD=y
CONFIG_INET6_AH=y
CONFIG_INET6_ESP=y
CONFIG_INET6_ESP_OFFLOAD=y
CONFIG_INET6_ESPINTCP=y
CONFIG_INET6_IPCOMP=y
CONFIG_IPV6_MIP6=y
CONFIG_IPV6_ILA=y
CONFIG_INET6_XFRM_TUNNEL=y
CONFIG_INET6_TUNNEL=y
CONFIG_IPV6_VTI=y
CONFIG_IPV6_SIT=y
CONFIG_IPV6_SIT_6RD=y
CONFIG_IPV6_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=y
CONFIG_IPV6_GRE=y
CONFIG_IPV6_FOU=y
CONFIG_IPV6_FOU_TUNNEL=y
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
CONFIG_IPV6_MROUTE=y
CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
CONFIG_IPV6_PIMSM_V2=y
CONFIG_IPV6_SEG6_LWTUNNEL=y
CONFIG_IPV6_SEG6_HMAC=y
CONFIG_IPV6_SEG6_BPF=y
CONFIG_IPV6_RPL_LWTUNNEL=y
CONFIG_IPV6_IOAM6_LWTUNNEL=y
CONFIG_NETLABEL=y
CONFIG_MPTCP=y
CONFIG_INET_MPTCP_DIAG=y
CONFIG_MPTCP_IPV6=y
CONFIG_NETWORK_SECMARK=y
CONFIG_NET_PTP_CLASSIFY=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=y

#
# Core Netfilter Configuration
#
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_EGRESS=y
CONFIG_NETFILTER_SKIP_EGRESS=y
CONFIG_NETFILTER_NETLINK=y
CONFIG_NETFILTER_FAMILY_BRIDGE=y
CONFIG_NETFILTER_FAMILY_ARP=y
CONFIG_NETFILTER_NETLINK_HOOK=y
CONFIG_NETFILTER_NETLINK_ACCT=y
CONFIG_NETFILTER_NETLINK_QUEUE=y
CONFIG_NETFILTER_NETLINK_LOG=y
CONFIG_NETFILTER_NETLINK_OSF=y
CONFIG_NF_CONNTRACK=y
CONFIG_NF_LOG_SYSLOG=y
CONFIG_NETFILTER_CONNCOUNT=y
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_ZONES=y
CONFIG_NF_CONNTRACK_PROCFS=y
CONFIG_NF_CONNTRACK_EVENTS=y
CONFIG_NF_CONNTRACK_TIMEOUT=y
CONFIG_NF_CONNTRACK_TIMESTAMP=y
CONFIG_NF_CONNTRACK_LABELS=y
CONFIG_NF_CT_PROTO_DCCP=y
CONFIG_NF_CT_PROTO_GRE=y
CONFIG_NF_CT_PROTO_SCTP=y
CONFIG_NF_CT_PROTO_UDPLITE=y
CONFIG_NF_CONNTRACK_AMANDA=y
CONFIG_NF_CONNTRACK_FTP=y
CONFIG_NF_CONNTRACK_H323=y
CONFIG_NF_CONNTRACK_IRC=y
CONFIG_NF_CONNTRACK_BROADCAST=y
CONFIG_NF_CONNTRACK_NETBIOS_NS=y
CONFIG_NF_CONNTRACK_SNMP=y
CONFIG_NF_CONNTRACK_PPTP=y
CONFIG_NF_CONNTRACK_SANE=y
CONFIG_NF_CONNTRACK_SIP=y
CONFIG_NF_CONNTRACK_TFTP=y
CONFIG_NF_CT_NETLINK=y
CONFIG_NF_CT_NETLINK_TIMEOUT=y
CONFIG_NF_CT_NETLINK_HELPER=y
CONFIG_NETFILTER_NETLINK_GLUE_CT=y
CONFIG_NF_NAT=y
CONFIG_NF_NAT_AMANDA=y
CONFIG_NF_NAT_FTP=y
CONFIG_NF_NAT_IRC=y
CONFIG_NF_NAT_SIP=y
CONFIG_NF_NAT_TFTP=y
CONFIG_NF_NAT_REDIRECT=y
CONFIG_NF_NAT_MASQUERADE=y
CONFIG_NF_NAT_OVS=y
CONFIG_NETFILTER_SYNPROXY=y
CONFIG_NF_TABLES=y
CONFIG_NF_TABLES_INET=y
CONFIG_NF_TABLES_NETDEV=y
CONFIG_NFT_NUMGEN=y
CONFIG_NFT_CT=y
CONFIG_NFT_CONNLIMIT=y
CONFIG_NFT_LOG=y
CONFIG_NFT_LIMIT=y
CONFIG_NFT_MASQ=y
CONFIG_NFT_REDIR=y
CONFIG_NFT_NAT=y
CONFIG_NFT_TUNNEL=y
CONFIG_NFT_QUEUE=y
CONFIG_NFT_QUOTA=y
CONFIG_NFT_REJECT=y
CONFIG_NFT_REJECT_INET=y
CONFIG_NFT_COMPAT=y
CONFIG_NFT_HASH=y
CONFIG_NFT_FIB=y
CONFIG_NFT_FIB_INET=y
CONFIG_NFT_XFRM=y
CONFIG_NFT_SOCKET=y
CONFIG_NFT_OSF=y
CONFIG_NFT_TPROXY=y
CONFIG_NFT_SYNPROXY=y
CONFIG_NF_DUP_NETDEV=y
CONFIG_NFT_DUP_NETDEV=y
CONFIG_NFT_FWD_NETDEV=y
CONFIG_NFT_FIB_NETDEV=y
CONFIG_NFT_REJECT_NETDEV=y
# CONFIG_NF_FLOW_TABLE is not set
CONFIG_NETFILTER_XTABLES=y
CONFIG_NETFILTER_XTABLES_COMPAT=y

#
# Xtables combined modules
#
CONFIG_NETFILTER_XT_MARK=y
CONFIG_NETFILTER_XT_CONNMARK=y
CONFIG_NETFILTER_XT_SET=y

#
# Xtables targets
#
CONFIG_NETFILTER_XT_TARGET_AUDIT=y
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=y
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
CONFIG_NETFILTER_XT_TARGET_CT=y
CONFIG_NETFILTER_XT_TARGET_DSCP=y
CONFIG_NETFILTER_XT_TARGET_HL=y
CONFIG_NETFILTER_XT_TARGET_HMARK=y
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
CONFIG_NETFILTER_XT_TARGET_LED=y
CONFIG_NETFILTER_XT_TARGET_LOG=y
CONFIG_NETFILTER_XT_TARGET_MARK=y
CONFIG_NETFILTER_XT_NAT=y
CONFIG_NETFILTER_XT_TARGET_NETMAP=y
CONFIG_NETFILTER_XT_TARGET_NFLOG=y
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
CONFIG_NETFILTER_XT_TARGET_NOTRACK=y
CONFIG_NETFILTER_XT_TARGET_RATEEST=y
CONFIG_NETFILTER_XT_TARGET_REDIRECT=y
CONFIG_NETFILTER_XT_TARGET_MASQUERADE=y
CONFIG_NETFILTER_XT_TARGET_TEE=y
CONFIG_NETFILTER_XT_TARGET_TPROXY=y
CONFIG_NETFILTER_XT_TARGET_TRACE=y
CONFIG_NETFILTER_XT_TARGET_SECMARK=y
CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=y

#
# Xtables matches
#
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_MATCH_BPF=y
CONFIG_NETFILTER_XT_MATCH_CGROUP=y
CONFIG_NETFILTER_XT_MATCH_CLUSTER=y
CONFIG_NETFILTER_XT_MATCH_COMMENT=y
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=y
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_CPU=y
CONFIG_NETFILTER_XT_MATCH_DCCP=y
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=y
CONFIG_NETFILTER_XT_MATCH_DSCP=y
CONFIG_NETFILTER_XT_MATCH_ECN=y
CONFIG_NETFILTER_XT_MATCH_ESP=y
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
CONFIG_NETFILTER_XT_MATCH_HELPER=y
CONFIG_NETFILTER_XT_MATCH_HL=y
CONFIG_NETFILTER_XT_MATCH_IPCOMP=y
CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
CONFIG_NETFILTER_XT_MATCH_IPVS=y
CONFIG_NETFILTER_XT_MATCH_L2TP=y
CONFIG_NETFILTER_XT_MATCH_LENGTH=y
CONFIG_NETFILTER_XT_MATCH_LIMIT=y
CONFIG_NETFILTER_XT_MATCH_MAC=y
CONFIG_NETFILTER_XT_MATCH_MARK=y
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
CONFIG_NETFILTER_XT_MATCH_NFACCT=y
CONFIG_NETFILTER_XT_MATCH_OSF=y
CONFIG_NETFILTER_XT_MATCH_OWNER=y
CONFIG_NETFILTER_XT_MATCH_POLICY=y
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=y
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
CONFIG_NETFILTER_XT_MATCH_QUOTA=y
CONFIG_NETFILTER_XT_MATCH_RATEEST=y
CONFIG_NETFILTER_XT_MATCH_REALM=y
CONFIG_NETFILTER_XT_MATCH_RECENT=y
CONFIG_NETFILTER_XT_MATCH_SCTP=y
CONFIG_NETFILTER_XT_MATCH_SOCKET=y
CONFIG_NETFILTER_XT_MATCH_STATE=y
CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
CONFIG_NETFILTER_XT_MATCH_STRING=y
CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
CONFIG_NETFILTER_XT_MATCH_TIME=y
CONFIG_NETFILTER_XT_MATCH_U32=y
# end of Core Netfilter Configuration

CONFIG_IP_SET=y
CONFIG_IP_SET_MAX=256
CONFIG_IP_SET_BITMAP_IP=y
CONFIG_IP_SET_BITMAP_IPMAC=y
CONFIG_IP_SET_BITMAP_PORT=y
CONFIG_IP_SET_HASH_IP=y
CONFIG_IP_SET_HASH_IPMARK=y
CONFIG_IP_SET_HASH_IPPORT=y
CONFIG_IP_SET_HASH_IPPORTIP=y
CONFIG_IP_SET_HASH_IPPORTNET=y
CONFIG_IP_SET_HASH_IPMAC=y
CONFIG_IP_SET_HASH_MAC=y
CONFIG_IP_SET_HASH_NETPORTNET=y
CONFIG_IP_SET_HASH_NET=y
CONFIG_IP_SET_HASH_NETNET=y
CONFIG_IP_SET_HASH_NETPORT=y
CONFIG_IP_SET_HASH_NETIFACE=y
CONFIG_IP_SET_LIST_SET=y
CONFIG_IP_VS=y
CONFIG_IP_VS_IPV6=y
CONFIG_IP_VS_DEBUG=y
CONFIG_IP_VS_TAB_BITS=12

#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y

#
# IPVS scheduler
#
CONFIG_IP_VS_RR=y
CONFIG_IP_VS_WRR=y
CONFIG_IP_VS_LC=y
CONFIG_IP_VS_WLC=y
CONFIG_IP_VS_FO=y
CONFIG_IP_VS_OVF=y
CONFIG_IP_VS_LBLC=y
CONFIG_IP_VS_LBLCR=y
CONFIG_IP_VS_DH=y
CONFIG_IP_VS_SH=y
CONFIG_IP_VS_MH=y
CONFIG_IP_VS_SED=y
CONFIG_IP_VS_NQ=y
CONFIG_IP_VS_TWOS=y

#
# IPVS SH scheduler
#
CONFIG_IP_VS_SH_TAB_BITS=8

#
# IPVS MH scheduler
#
CONFIG_IP_VS_MH_TAB_INDEX=12

#
# IPVS application helper
#
CONFIG_IP_VS_FTP=y
CONFIG_IP_VS_NFCT=y
CONFIG_IP_VS_PE_SIP=y

#
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=y
CONFIG_NF_SOCKET_IPV4=y
CONFIG_NF_TPROXY_IPV4=y
CONFIG_NF_TABLES_IPV4=y
CONFIG_NFT_REJECT_IPV4=y
CONFIG_NFT_DUP_IPV4=y
CONFIG_NFT_FIB_IPV4=y
CONFIG_NF_TABLES_ARP=y
CONFIG_NF_DUP_IPV4=y
CONFIG_NF_LOG_ARP=y
CONFIG_NF_LOG_IPV4=y
CONFIG_NF_REJECT_IPV4=y
CONFIG_NF_NAT_SNMP_BASIC=y
CONFIG_NF_NAT_PPTP=y
CONFIG_NF_NAT_H323=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_MATCH_AH=y
CONFIG_IP_NF_MATCH_ECN=y
CONFIG_IP_NF_MATCH_RPFILTER=y
CONFIG_IP_NF_MATCH_TTL=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_REJECT=y
CONFIG_IP_NF_TARGET_SYNPROXY=y
CONFIG_IP_NF_NAT=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_IP_NF_TARGET_NETMAP=y
CONFIG_IP_NF_TARGET_REDIRECT=y
CONFIG_IP_NF_MANGLE=y
CONFIG_IP_NF_TARGET_CLUSTERIP=y
CONFIG_IP_NF_TARGET_ECN=y
CONFIG_IP_NF_TARGET_TTL=y
CONFIG_IP_NF_RAW=y
CONFIG_IP_NF_SECURITY=y
CONFIG_IP_NF_ARPTABLES=y
CONFIG_IP_NF_ARPFILTER=y
CONFIG_IP_NF_ARP_MANGLE=y
# end of IP: Netfilter Configuration

#
# IPv6: Netfilter Configuration
#
CONFIG_NF_SOCKET_IPV6=y
CONFIG_NF_TPROXY_IPV6=y
CONFIG_NF_TABLES_IPV6=y
CONFIG_NFT_REJECT_IPV6=y
CONFIG_NFT_DUP_IPV6=y
CONFIG_NFT_FIB_IPV6=y
CONFIG_NF_DUP_IPV6=y
CONFIG_NF_REJECT_IPV6=y
CONFIG_NF_LOG_IPV6=y
CONFIG_IP6_NF_IPTABLES=y
CONFIG_IP6_NF_MATCH_AH=y
CONFIG_IP6_NF_MATCH_EUI64=y
CONFIG_IP6_NF_MATCH_FRAG=y
CONFIG_IP6_NF_MATCH_OPTS=y
CONFIG_IP6_NF_MATCH_HL=y
CONFIG_IP6_NF_MATCH_IPV6HEADER=y
CONFIG_IP6_NF_MATCH_MH=y
CONFIG_IP6_NF_MATCH_RPFILTER=y
CONFIG_IP6_NF_MATCH_RT=y
CONFIG_IP6_NF_MATCH_SRH=y
CONFIG_IP6_NF_TARGET_HL=y
CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_REJECT=y
CONFIG_IP6_NF_TARGET_SYNPROXY=y
CONFIG_IP6_NF_MANGLE=y
CONFIG_IP6_NF_RAW=y
CONFIG_IP6_NF_SECURITY=y
CONFIG_IP6_NF_NAT=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
CONFIG_IP6_NF_TARGET_NPT=y
# end of IPv6: Netfilter Configuration

CONFIG_NF_DEFRAG_IPV6=y
CONFIG_NF_TABLES_BRIDGE=y
CONFIG_NFT_BRIDGE_META=y
CONFIG_NFT_BRIDGE_REJECT=y
CONFIG_NF_CONNTRACK_BRIDGE=y
CONFIG_BRIDGE_NF_EBTABLES=y
CONFIG_BRIDGE_EBT_BROUTE=y
CONFIG_BRIDGE_EBT_T_FILTER=y
CONFIG_BRIDGE_EBT_T_NAT=y
CONFIG_BRIDGE_EBT_802_3=y
CONFIG_BRIDGE_EBT_AMONG=y
CONFIG_BRIDGE_EBT_ARP=y
CONFIG_BRIDGE_EBT_IP=y
CONFIG_BRIDGE_EBT_IP6=y
CONFIG_BRIDGE_EBT_LIMIT=y
CONFIG_BRIDGE_EBT_MARK=y
CONFIG_BRIDGE_EBT_PKTTYPE=y
CONFIG_BRIDGE_EBT_STP=y
CONFIG_BRIDGE_EBT_VLAN=y
CONFIG_BRIDGE_EBT_ARPREPLY=y
CONFIG_BRIDGE_EBT_DNAT=y
CONFIG_BRIDGE_EBT_MARK_T=y
CONFIG_BRIDGE_EBT_REDIRECT=y
CONFIG_BRIDGE_EBT_SNAT=y
CONFIG_BRIDGE_EBT_LOG=y
CONFIG_BRIDGE_EBT_NFLOG=y
CONFIG_BPFILTER=y
CONFIG_BPFILTER_UMH=y
CONFIG_IP_DCCP=y
CONFIG_INET_DCCP_DIAG=y

#
# DCCP CCIDs Configuration
#
CONFIG_IP_DCCP_CCID2_DEBUG=y
CONFIG_IP_DCCP_CCID3=y
CONFIG_IP_DCCP_CCID3_DEBUG=y
CONFIG_IP_DCCP_TFRC_LIB=y
CONFIG_IP_DCCP_TFRC_DEBUG=y
# end of DCCP CCIDs Configuration

#
# DCCP Kernel Hacking
#
CONFIG_IP_DCCP_DEBUG=y
# end of DCCP Kernel Hacking

CONFIG_IP_SCTP=y
CONFIG_SCTP_DBG_OBJCNT=y
CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 is not set
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
CONFIG_SCTP_COOKIE_HMAC_MD5=y
CONFIG_SCTP_COOKIE_HMAC_SHA1=y
CONFIG_INET_SCTP_DIAG=y
# CONFIG_RDS is not set
CONFIG_TIPC=y
CONFIG_TIPC_MEDIA_IB=y
CONFIG_TIPC_MEDIA_UDP=y
CONFIG_TIPC_CRYPTO=y
CONFIG_TIPC_DIAG=y
CONFIG_ATM=y
CONFIG_ATM_CLIP=y
CONFIG_ATM_CLIP_NO_ICMP=y
CONFIG_ATM_LANE=y
CONFIG_ATM_MPOA=y
CONFIG_ATM_BR2684=y
CONFIG_ATM_BR2684_IPFILTER=y
CONFIG_L2TP=y
CONFIG_L2TP_DEBUGFS=y
CONFIG_L2TP_V3=y
CONFIG_L2TP_IP=y
CONFIG_L2TP_ETH=y
CONFIG_STP=y
CONFIG_GARP=y
CONFIG_MRP=y
CONFIG_BRIDGE=y
CONFIG_BRIDGE_IGMP_SNOOPING=y
CONFIG_BRIDGE_VLAN_FILTERING=y
CONFIG_BRIDGE_MRP=y
CONFIG_BRIDGE_CFM=y
CONFIG_NET_DSA=y
CONFIG_NET_DSA_TAG_NONE=y
CONFIG_NET_DSA_TAG_AR9331=y
CONFIG_NET_DSA_TAG_BRCM_COMMON=y
CONFIG_NET_DSA_TAG_BRCM=y
CONFIG_NET_DSA_TAG_BRCM_LEGACY=y
CONFIG_NET_DSA_TAG_BRCM_PREPEND=y
CONFIG_NET_DSA_TAG_HELLCREEK=y
CONFIG_NET_DSA_TAG_GSWIP=y
CONFIG_NET_DSA_TAG_DSA_COMMON=y
CONFIG_NET_DSA_TAG_DSA=y
CONFIG_NET_DSA_TAG_EDSA=y
CONFIG_NET_DSA_TAG_MTK=y
CONFIG_NET_DSA_TAG_KSZ=y
CONFIG_NET_DSA_TAG_OCELOT=y
CONFIG_NET_DSA_TAG_OCELOT_8021Q=y
CONFIG_NET_DSA_TAG_QCA=y
CONFIG_NET_DSA_TAG_RTL4_A=y
CONFIG_NET_DSA_TAG_RTL8_4=y
CONFIG_NET_DSA_TAG_RZN1_A5PSW=y
CONFIG_NET_DSA_TAG_LAN9303=y
CONFIG_NET_DSA_TAG_SJA1105=y
CONFIG_NET_DSA_TAG_TRAILER=y
CONFIG_NET_DSA_TAG_XRS700X=y
CONFIG_VLAN_8021Q=y
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q_MVRP=y
CONFIG_LLC=y
CONFIG_LLC2=y
CONFIG_ATALK=y
CONFIG_DEV_APPLETALK=y
CONFIG_IPDDP=y
CONFIG_IPDDP_ENCAP=y
CONFIG_X25=y
CONFIG_LAPB=y
CONFIG_PHONET=y
CONFIG_6LOWPAN=y
CONFIG_6LOWPAN_DEBUGFS=y
CONFIG_6LOWPAN_NHC=y
CONFIG_6LOWPAN_NHC_DEST=y
CONFIG_6LOWPAN_NHC_FRAGMENT=y
CONFIG_6LOWPAN_NHC_HOP=y
CONFIG_6LOWPAN_NHC_IPV6=y
CONFIG_6LOWPAN_NHC_MOBILITY=y
CONFIG_6LOWPAN_NHC_ROUTING=y
CONFIG_6LOWPAN_NHC_UDP=y
CONFIG_6LOWPAN_GHC_EXT_HDR_HOP=y
CONFIG_6LOWPAN_GHC_UDP=y
CONFIG_6LOWPAN_GHC_ICMPV6=y
CONFIG_6LOWPAN_GHC_EXT_HDR_DEST=y
CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG=y
CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE=y
CONFIG_IEEE802154=y
CONFIG_IEEE802154_NL802154_EXPERIMENTAL=y
CONFIG_IEEE802154_SOCKET=y
CONFIG_IEEE802154_6LOWPAN=y
CONFIG_MAC802154=y
CONFIG_NET_SCHED=y

#
# Queueing/Scheduling
#
CONFIG_NET_SCH_CBQ=y
CONFIG_NET_SCH_HTB=y
CONFIG_NET_SCH_HFSC=y
CONFIG_NET_SCH_ATM=y
CONFIG_NET_SCH_PRIO=y
CONFIG_NET_SCH_MULTIQ=y
CONFIG_NET_SCH_RED=y
CONFIG_NET_SCH_SFB=y
CONFIG_NET_SCH_SFQ=y
CONFIG_NET_SCH_TEQL=y
CONFIG_NET_SCH_TBF=y
CONFIG_NET_SCH_CBS=y
CONFIG_NET_SCH_ETF=y
CONFIG_NET_SCH_TAPRIO=y
CONFIG_NET_SCH_GRED=y
CONFIG_NET_SCH_DSMARK=y
CONFIG_NET_SCH_NETEM=y
CONFIG_NET_SCH_DRR=y
CONFIG_NET_SCH_MQPRIO=y
CONFIG_NET_SCH_SKBPRIO=y
CONFIG_NET_SCH_CHOKE=y
CONFIG_NET_SCH_QFQ=y
CONFIG_NET_SCH_CODEL=y
CONFIG_NET_SCH_FQ_CODEL=y
CONFIG_NET_SCH_CAKE=y
CONFIG_NET_SCH_FQ=y
CONFIG_NET_SCH_HHF=y
CONFIG_NET_SCH_PIE=y
CONFIG_NET_SCH_FQ_PIE=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_SCH_PLUG=y
CONFIG_NET_SCH_ETS=y
CONFIG_NET_SCH_DEFAULT=y
# CONFIG_DEFAULT_FQ is not set
# CONFIG_DEFAULT_CODEL is not set
# CONFIG_DEFAULT_FQ_CODEL is not set
# CONFIG_DEFAULT_FQ_PIE is not set
# CONFIG_DEFAULT_SFQ is not set
CONFIG_DEFAULT_PFIFO_FAST=y
CONFIG_DEFAULT_NET_SCH="pfifo_fast"

#
# Classification
#
CONFIG_NET_CLS=y
CONFIG_NET_CLS_BASIC=y
CONFIG_NET_CLS_TCINDEX=y
CONFIG_NET_CLS_ROUTE4=y
CONFIG_NET_CLS_FW=y
CONFIG_NET_CLS_U32=y
CONFIG_CLS_U32_PERF=y
CONFIG_CLS_U32_MARK=y
CONFIG_NET_CLS_RSVP=y
CONFIG_NET_CLS_RSVP6=y
CONFIG_NET_CLS_FLOW=y
CONFIG_NET_CLS_CGROUP=y
CONFIG_NET_CLS_BPF=y
CONFIG_NET_CLS_FLOWER=y
CONFIG_NET_CLS_MATCHALL=y
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32
CONFIG_NET_EMATCH_CMP=y
CONFIG_NET_EMATCH_NBYTE=y
CONFIG_NET_EMATCH_U32=y
CONFIG_NET_EMATCH_META=y
CONFIG_NET_EMATCH_TEXT=y
CONFIG_NET_EMATCH_CANID=y
CONFIG_NET_EMATCH_IPSET=y
CONFIG_NET_EMATCH_IPT=y
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=y
CONFIG_NET_ACT_GACT=y
CONFIG_GACT_PROB=y
CONFIG_NET_ACT_MIRRED=y
CONFIG_NET_ACT_SAMPLE=y
CONFIG_NET_ACT_IPT=y
CONFIG_NET_ACT_NAT=y
CONFIG_NET_ACT_PEDIT=y
CONFIG_NET_ACT_SIMP=y
CONFIG_NET_ACT_SKBEDIT=y
CONFIG_NET_ACT_CSUM=y
CONFIG_NET_ACT_MPLS=y
CONFIG_NET_ACT_VLAN=y
CONFIG_NET_ACT_BPF=y
CONFIG_NET_ACT_CONNMARK=y
CONFIG_NET_ACT_CTINFO=y
CONFIG_NET_ACT_SKBMOD=y
CONFIG_NET_ACT_IFE=y
CONFIG_NET_ACT_TUNNEL_KEY=y
CONFIG_NET_ACT_GATE=y
CONFIG_NET_IFE_SKBMARK=y
CONFIG_NET_IFE_SKBPRIO=y
CONFIG_NET_IFE_SKBTCINDEX=y
CONFIG_NET_TC_SKB_EXT=y
CONFIG_NET_SCH_FIFO=y
CONFIG_DCB=y
CONFIG_DNS_RESOLVER=y
CONFIG_BATMAN_ADV=y
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
CONFIG_BATMAN_ADV_NC=y
CONFIG_BATMAN_ADV_MCAST=y
CONFIG_BATMAN_ADV_DEBUG=y
CONFIG_BATMAN_ADV_TRACING=y
CONFIG_OPENVSWITCH=y
CONFIG_OPENVSWITCH_GRE=y
CONFIG_OPENVSWITCH_VXLAN=y
CONFIG_OPENVSWITCH_GENEVE=y
CONFIG_VSOCKETS=y
CONFIG_VSOCKETS_DIAG=y
CONFIG_VSOCKETS_LOOPBACK=y
CONFIG_VMWARE_VMCI_VSOCKETS=y
CONFIG_VIRTIO_VSOCKETS=y
CONFIG_VIRTIO_VSOCKETS_COMMON=y
CONFIG_HYPERV_VSOCKETS=y
CONFIG_NETLINK_DIAG=y
CONFIG_MPLS=y
CONFIG_NET_MPLS_GSO=y
CONFIG_MPLS_ROUTING=y
CONFIG_MPLS_IPTUNNEL=y
CONFIG_NET_NSH=y
CONFIG_HSR=y
CONFIG_NET_SWITCHDEV=y
CONFIG_NET_L3_MASTER_DEV=y
CONFIG_QRTR=y
CONFIG_QRTR_SMD=y
CONFIG_QRTR_TUN=y
CONFIG_QRTR_MHI=y
CONFIG_NET_NCSI=y
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
CONFIG_PCPU_DEV_REFCNT=y
CONFIG_RPS=y
CONFIG_RFS_ACCEL=y
CONFIG_SOCK_RX_QUEUE_MAPPING=y
CONFIG_XPS=y
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y
CONFIG_NET_RX_BUSY_POLL=y
CONFIG_BQL=y
CONFIG_NET_FLOW_LIMIT=y

#
# Network testing
#
CONFIG_NET_PKTGEN=y
CONFIG_NET_DROP_MONITOR=y
# end of Network testing
# end of Networking options

CONFIG_HAMRADIO=y

#
# Packet Radio protocols
#
CONFIG_AX25=y
CONFIG_AX25_DAMA_SLAVE=y
CONFIG_NETROM=y
CONFIG_ROSE=y

#
# AX.25 network device drivers
#
CONFIG_MKISS=y
CONFIG_6PACK=y
CONFIG_BPQETHER=y
CONFIG_BAYCOM_SER_FDX=y
CONFIG_BAYCOM_SER_HDX=y
CONFIG_BAYCOM_PAR=y
CONFIG_YAM=y
# end of AX.25 network device drivers

CONFIG_CAN=y
CONFIG_CAN_RAW=y
CONFIG_CAN_BCM=y
CONFIG_CAN_GW=y
CONFIG_CAN_J1939=y
CONFIG_CAN_ISOTP=y
CONFIG_BT=y
CONFIG_BT_BREDR=y
CONFIG_BT_RFCOMM=y
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=y
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_CMTP=y
CONFIG_BT_HIDP=y
CONFIG_BT_HS=y
CONFIG_BT_LE=y
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_6LOWPAN=y
CONFIG_BT_LEDS=y
CONFIG_BT_MSFTEXT=y
CONFIG_BT_AOSPEXT=y
CONFIG_BT_DEBUGFS=y
# CONFIG_BT_SELFTEST is not set

#
# Bluetooth device drivers
#
CONFIG_BT_INTEL=y
CONFIG_BT_BCM=y
CONFIG_BT_RTL=y
CONFIG_BT_QCA=y
CONFIG_BT_MTK=y
CONFIG_BT_HCIBTUSB=y
CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_POLL_SYNC=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB_MTK=y
CONFIG_BT_HCIBTUSB_RTL=y
CONFIG_BT_HCIBTSDIO=y
CONFIG_BT_HCIUART=y
CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_NOKIA=y
CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIUART_ATH3K=y
CONFIG_BT_HCIUART_LL=y
CONFIG_BT_HCIUART_3WIRE=y
CONFIG_BT_HCIUART_INTEL=y
CONFIG_BT_HCIUART_BCM=y
CONFIG_BT_HCIUART_RTL=y
CONFIG_BT_HCIUART_QCA=y
CONFIG_BT_HCIUART_AG6XX=y
CONFIG_BT_HCIUART_MRVL=y
CONFIG_BT_HCIBCM203X=y
CONFIG_BT_HCIBCM4377=y
CONFIG_BT_HCIBPA10X=y
CONFIG_BT_HCIBFUSB=y
CONFIG_BT_HCIDTL1=y
CONFIG_BT_HCIBT3C=y
CONFIG_BT_HCIBLUECARD=y
CONFIG_BT_HCIVHCI=y
CONFIG_BT_MRVL=y
CONFIG_BT_MRVL_SDIO=y
CONFIG_BT_ATH3K=y
CONFIG_BT_MTKSDIO=y
CONFIG_BT_MTKUART=y
CONFIG_BT_HCIRSI=y
CONFIG_BT_VIRTIO=y
# end of Bluetooth device drivers

CONFIG_AF_RXRPC=y
CONFIG_AF_RXRPC_IPV6=y
CONFIG_AF_RXRPC_INJECT_LOSS=y
CONFIG_AF_RXRPC_DEBUG=y
CONFIG_RXKAD=y
CONFIG_RXPERF=y
CONFIG_AF_KCM=y
CONFIG_STREAM_PARSER=y
CONFIG_MCTP=y
CONFIG_MCTP_FLOWS=y
CONFIG_FIB_RULES=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_EXT=y
CONFIG_WEXT_CORE=y
CONFIG_WEXT_PROC=y
CONFIG_WEXT_SPY=y
CONFIG_WEXT_PRIV=y
CONFIG_CFG80211=y
CONFIG_NL80211_TESTMODE=y
CONFIG_CFG80211_DEVELOPER_WARNINGS=y
CONFIG_CFG80211_CERTIFICATION_ONUS=y
CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y
CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y
CONFIG_CFG80211_EXTRA_REGDB_KEYDIR=""
CONFIG_CFG80211_REG_CELLULAR_HINTS=y
CONFIG_CFG80211_REG_RELAX_NO_IR=y
CONFIG_CFG80211_DEFAULT_PS=y
CONFIG_CFG80211_DEBUGFS=y
CONFIG_CFG80211_CRDA_SUPPORT=y
CONFIG_CFG80211_WEXT=y
CONFIG_CFG80211_WEXT_EXPORT=y
CONFIG_LIB80211=y
CONFIG_LIB80211_CRYPT_WEP=y
CONFIG_LIB80211_CRYPT_CCMP=y
CONFIG_LIB80211_CRYPT_TKIP=y
CONFIG_LIB80211_DEBUG=y
CONFIG_MAC80211=y
CONFIG_MAC80211_HAS_RC=y
CONFIG_MAC80211_RC_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
CONFIG_MAC80211_MESH=y
CONFIG_MAC80211_LEDS=y
CONFIG_MAC80211_DEBUGFS=y
CONFIG_MAC80211_MESSAGE_TRACING=y
CONFIG_MAC80211_DEBUG_MENU=y
CONFIG_MAC80211_NOINLINE=y
CONFIG_MAC80211_VERBOSE_DEBUG=y
CONFIG_MAC80211_MLME_DEBUG=y
CONFIG_MAC80211_STA_DEBUG=y
CONFIG_MAC80211_HT_DEBUG=y
CONFIG_MAC80211_OCB_DEBUG=y
CONFIG_MAC80211_IBSS_DEBUG=y
CONFIG_MAC80211_PS_DEBUG=y
CONFIG_MAC80211_MPL_DEBUG=y
CONFIG_MAC80211_MPATH_DEBUG=y
CONFIG_MAC80211_MHWMP_DEBUG=y
CONFIG_MAC80211_MESH_SYNC_DEBUG=y
CONFIG_MAC80211_MESH_CSA_DEBUG=y
CONFIG_MAC80211_MESH_PS_DEBUG=y
CONFIG_MAC80211_TDLS_DEBUG=y
CONFIG_MAC80211_DEBUG_COUNTERS=y
CONFIG_MAC80211_STA_HASH_MAX_SIZE=0
CONFIG_RFKILL=y
CONFIG_RFKILL_LEDS=y
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL_GPIO=y
CONFIG_NET_9P=y
CONFIG_NET_9P_FD=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_NET_9P_XEN=y
CONFIG_NET_9P_RDMA=y
CONFIG_NET_9P_DEBUG=y
CONFIG_CAIF=y
CONFIG_CAIF_DEBUG=y
CONFIG_CAIF_NETDEV=y
CONFIG_CAIF_USB=y
CONFIG_CEPH_LIB=y
CONFIG_CEPH_LIB_PRETTYDEBUG=y
CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y
CONFIG_NFC=y
CONFIG_NFC_DIGITAL=y
CONFIG_NFC_NCI=y
CONFIG_NFC_NCI_SPI=y
CONFIG_NFC_NCI_UART=y
CONFIG_NFC_HCI=y
CONFIG_NFC_SHDLC=y

#
# Near Field Communication (NFC) devices
#
CONFIG_NFC_TRF7970A=y
CONFIG_NFC_MEI_PHY=y
CONFIG_NFC_SIM=y
CONFIG_NFC_PORT100=y
CONFIG_NFC_VIRTUAL_NCI=y
CONFIG_NFC_FDP=y
CONFIG_NFC_FDP_I2C=y
CONFIG_NFC_PN544=y
CONFIG_NFC_PN544_I2C=y
CONFIG_NFC_PN544_MEI=y
CONFIG_NFC_PN533=y
CONFIG_NFC_PN533_USB=y
CONFIG_NFC_PN533_I2C=y
CONFIG_NFC_PN532_UART=y
CONFIG_NFC_MICROREAD=y
CONFIG_NFC_MICROREAD_I2C=y
CONFIG_NFC_MICROREAD_MEI=y
CONFIG_NFC_MRVL=y
CONFIG_NFC_MRVL_USB=y
CONFIG_NFC_MRVL_UART=y
CONFIG_NFC_MRVL_I2C=y
CONFIG_NFC_MRVL_SPI=y
CONFIG_NFC_ST21NFCA=y
CONFIG_NFC_ST21NFCA_I2C=y
CONFIG_NFC_ST_NCI=y
CONFIG_NFC_ST_NCI_I2C=y
CONFIG_NFC_ST_NCI_SPI=y
CONFIG_NFC_NXP_NCI=y
CONFIG_NFC_NXP_NCI_I2C=y
CONFIG_NFC_S3FWRN5=y
CONFIG_NFC_S3FWRN5_I2C=y
CONFIG_NFC_S3FWRN82_UART=y
CONFIG_NFC_ST95HF=y
# end of Near Field Communication (NFC) devices

CONFIG_PSAMPLE=y
CONFIG_NET_IFE=y
CONFIG_LWTUNNEL=y
CONFIG_LWTUNNEL_BPF=y
CONFIG_DST_CACHE=y
CONFIG_GRO_CELLS=y
CONFIG_SOCK_VALIDATE_XMIT=y
CONFIG_NET_SELFTESTS=y
CONFIG_NET_SOCK_MSG=y
CONFIG_NET_DEVLINK=y
CONFIG_PAGE_POOL=y
CONFIG_PAGE_POOL_STATS=y
CONFIG_FAILOVER=y
CONFIG_ETHTOOL_NETLINK=y

#
# Device Drivers
#
CONFIG_HAVE_EISA=y
CONFIG_EISA=y
CONFIG_EISA_VLB_PRIMING=y
CONFIG_EISA_PCI_EISA=y
CONFIG_EISA_VIRTUAL_ROOT=y
CONFIG_EISA_NAMES=y
CONFIG_HAVE_PCI=y
CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
CONFIG_PCIEPORTBUS=y
CONFIG_HOTPLUG_PCI_PCIE=y
CONFIG_PCIEAER=y
CONFIG_PCIEAER_INJECT=y
CONFIG_PCIE_ECRC=y
CONFIG_PCIEASPM=y
CONFIG_PCIEASPM_DEFAULT=y
# CONFIG_PCIEASPM_POWERSAVE is not set
# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
# CONFIG_PCIEASPM_PERFORMANCE is not set
CONFIG_PCIE_PME=y
CONFIG_PCIE_DPC=y
CONFIG_PCIE_PTM=y
CONFIG_PCIE_EDR=y
CONFIG_PCI_MSI=y
CONFIG_PCI_MSI_IRQ_DOMAIN=y
CONFIG_PCI_QUIRKS=y
# CONFIG_PCI_DEBUG is not set
CONFIG_PCI_REALLOC_ENABLE_AUTO=y
CONFIG_PCI_STUB=y
CONFIG_PCI_PF_STUB=y
CONFIG_XEN_PCIDEV_FRONTEND=y
CONFIG_PCI_ATS=y
CONFIG_PCI_DOE=y
CONFIG_PCI_ECAM=y
CONFIG_PCI_LOCKLESS_CONFIG=y
CONFIG_PCI_IOV=y
CONFIG_PCI_PRI=y
CONFIG_PCI_PASID=y
CONFIG_PCI_P2PDMA=y
CONFIG_PCI_LABEL=y
CONFIG_PCI_HYPERV=y
# CONFIG_PCIE_BUS_TUNE_OFF is not set
CONFIG_PCIE_BUS_DEFAULT=y
# CONFIG_PCIE_BUS_SAFE is not set
# CONFIG_PCIE_BUS_PERFORMANCE is not set
# CONFIG_PCIE_BUS_PEER2PEER is not set
CONFIG_VGA_ARB=y
CONFIG_VGA_ARB_MAX_GPUS=16
CONFIG_HOTPLUG_PCI=y
CONFIG_HOTPLUG_PCI_ACPI=y
CONFIG_HOTPLUG_PCI_ACPI_IBM=y
CONFIG_HOTPLUG_PCI_CPCI=y
CONFIG_HOTPLUG_PCI_CPCI_ZT5550=y
CONFIG_HOTPLUG_PCI_CPCI_GENERIC=y
CONFIG_HOTPLUG_PCI_SHPC=y

#
# PCI controller drivers
#
CONFIG_PCI_FTPCI100=y
CONFIG_PCI_HOST_COMMON=y
CONFIG_PCI_HOST_GENERIC=y
CONFIG_PCIE_XILINX=y
CONFIG_VMD=y
CONFIG_PCI_HYPERV_INTERFACE=y
CONFIG_PCIE_MICROCHIP_HOST=y

#
# DesignWare PCI Core Support
#
CONFIG_PCIE_DW=y
CONFIG_PCIE_DW_HOST=y
CONFIG_PCIE_DW_EP=y
CONFIG_PCIE_DW_PLAT=y
CONFIG_PCIE_DW_PLAT_HOST=y
CONFIG_PCIE_DW_PLAT_EP=y
CONFIG_PCIE_INTEL_GW=y
CONFIG_PCI_MESON=y
# end of DesignWare PCI Core Support

#
# Mobiveil PCIe Core Support
#
# end of Mobiveil PCIe Core Support

#
# Cadence PCIe controllers support
#
CONFIG_PCIE_CADENCE=y
CONFIG_PCIE_CADENCE_HOST=y
CONFIG_PCIE_CADENCE_EP=y
CONFIG_PCIE_CADENCE_PLAT=y
CONFIG_PCIE_CADENCE_PLAT_HOST=y
CONFIG_PCIE_CADENCE_PLAT_EP=y
CONFIG_PCI_J721E=y
CONFIG_PCI_J721E_HOST=y
CONFIG_PCI_J721E_EP=y
# end of Cadence PCIe controllers support
# end of PCI controller drivers

#
# PCI Endpoint
#
CONFIG_PCI_ENDPOINT=y
CONFIG_PCI_ENDPOINT_CONFIGFS=y
# CONFIG_PCI_EPF_TEST is not set
CONFIG_PCI_EPF_NTB=y
CONFIG_PCI_EPF_VNTB=y
# end of PCI Endpoint

#
# PCI switch controller drivers
#
CONFIG_PCI_SW_SWITCHTEC=y
# end of PCI switch controller drivers

CONFIG_CXL_BUS=y
CONFIG_CXL_PCI=y
CONFIG_CXL_MEM_RAW_COMMANDS=y
CONFIG_CXL_ACPI=y
CONFIG_CXL_PMEM=y
CONFIG_CXL_MEM=y
CONFIG_CXL_PORT=y
CONFIG_CXL_SUSPEND=y
CONFIG_CXL_REGION=y
CONFIG_PCCARD=y
CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_CARDBUS=y

#
# PC-card bridges
#
CONFIG_YENTA=y
CONFIG_YENTA_O2=y
CONFIG_YENTA_RICOH=y
CONFIG_YENTA_TI=y
CONFIG_YENTA_ENE_TUNE=y
CONFIG_YENTA_TOSHIBA=y
CONFIG_PD6729=y
CONFIG_I82092=y
CONFIG_PCCARD_NONSTATIC=y
CONFIG_RAPIDIO=y
CONFIG_RAPIDIO_TSI721=y
CONFIG_RAPIDIO_DISC_TIMEOUT=30
CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS=y
CONFIG_RAPIDIO_DMA_ENGINE=y
CONFIG_RAPIDIO_DEBUG=y
CONFIG_RAPIDIO_ENUM_BASIC=y
CONFIG_RAPIDIO_CHMAN=y
CONFIG_RAPIDIO_MPORT_CDEV=y

#
# RapidIO Switch drivers
#
CONFIG_RAPIDIO_CPS_XX=y
CONFIG_RAPIDIO_CPS_GEN2=y
CONFIG_RAPIDIO_RXS_GEN3=y
# end of RapidIO Switch drivers

#
# Generic Driver Options
#
CONFIG_AUXILIARY_BUS=y
CONFIG_UEVENT_HELPER=y
CONFIG_UEVENT_HELPER_PATH=""
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y

#
# Firmware loader
#
CONFIG_FW_LOADER=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_EXTRA_FIRMWARE=""
CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
CONFIG_FW_LOADER_COMPRESS=y
CONFIG_FW_LOADER_COMPRESS_XZ=y
CONFIG_FW_LOADER_COMPRESS_ZSTD=y
CONFIG_FW_CACHE=y
CONFIG_FW_UPLOAD=y
# end of Firmware loader

CONFIG_WANT_DEV_COREDUMP=y
CONFIG_ALLOW_DEV_COREDUMP=y
CONFIG_DEV_COREDUMP=y
# CONFIG_DEBUG_DRIVER is not set
CONFIG_DEBUG_DEVRES=y
# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set
CONFIG_HMEM_REPORTING=y
# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set
CONFIG_SYS_HYPERVISOR=y
CONFIG_GENERIC_CPU_AUTOPROBE=y
CONFIG_GENERIC_CPU_VULNERABILITIES=y
CONFIG_REGMAP=y
CONFIG_REGMAP_I2C=y
CONFIG_REGMAP_SLIMBUS=y
CONFIG_REGMAP_SPI=y
CONFIG_REGMAP_SPMI=y
CONFIG_REGMAP_W1=y
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
CONFIG_REGMAP_SOUNDWIRE=y
CONFIG_REGMAP_SOUNDWIRE_MBQ=y
CONFIG_REGMAP_SCCB=y
CONFIG_REGMAP_I3C=y
CONFIG_REGMAP_SPI_AVMM=y
CONFIG_DMA_SHARED_BUFFER=y
CONFIG_DMA_FENCE_TRACE=y
# end of Generic Driver Options

#
# Bus devices
#
CONFIG_MOXTET=y
CONFIG_MHI_BUS=y
CONFIG_MHI_BUS_DEBUG=y
CONFIG_MHI_BUS_PCI_GENERIC=y
CONFIG_MHI_BUS_EP=y
# end of Bus devices

CONFIG_CONNECTOR=y
CONFIG_PROC_EVENTS=y

#
# Firmware Drivers
#

#
# ARM System Control and Management Interface Protocol
#
# end of ARM System Control and Management Interface Protocol

CONFIG_EDD=y
CONFIG_EDD_OFF=y
CONFIG_FIRMWARE_MEMMAP=y
CONFIG_DMIID=y
CONFIG_DMI_SYSFS=y
CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
CONFIG_ISCSI_IBFT_FIND=y
CONFIG_ISCSI_IBFT=y
CONFIG_FW_CFG_SYSFS=y
CONFIG_FW_CFG_SYSFS_CMDLINE=y
CONFIG_SYSFB=y
CONFIG_SYSFB_SIMPLEFB=y
CONFIG_CS_DSP=y
CONFIG_GOOGLE_FIRMWARE=y
CONFIG_GOOGLE_SMI=y
CONFIG_GOOGLE_COREBOOT_TABLE=y
CONFIG_GOOGLE_MEMCONSOLE=y
CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY=y
CONFIG_GOOGLE_MEMCONSOLE_COREBOOT=y
CONFIG_GOOGLE_VPD=y

#
# EFI (Extensible Firmware Interface) Support
#
CONFIG_EFI_ESRT=y
CONFIG_EFI_VARS_PSTORE=y
CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE=y
CONFIG_EFI_RUNTIME_MAP=y
CONFIG_EFI_FAKE_MEMMAP=y
CONFIG_EFI_MAX_FAKE_MEM=8
CONFIG_EFI_SOFT_RESERVE=y
CONFIG_EFI_DXE_MEM_ATTRIBUTES=y
CONFIG_EFI_RUNTIME_WRAPPERS=y
CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y
CONFIG_EFI_BOOTLOADER_CONTROL=y
CONFIG_EFI_CAPSULE_LOADER=y
# CONFIG_EFI_TEST is not set
CONFIG_EFI_DEV_PATH_PARSER=y
CONFIG_APPLE_PROPERTIES=y
CONFIG_RESET_ATTACK_MITIGATION=y
CONFIG_EFI_RCI2_TABLE=y
CONFIG_EFI_DISABLE_PCI_DMA=y
CONFIG_EFI_EARLYCON=y
CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y
CONFIG_EFI_DISABLE_RUNTIME=y
CONFIG_EFI_COCO_SECRET=y
CONFIG_EFI_EMBEDDED_FIRMWARE=y
# end of EFI (Extensible Firmware Interface) Support

CONFIG_UEFI_CPER=y
CONFIG_UEFI_CPER_X86=y

#
# Tegra firmware driver
#
# end of Tegra firmware driver
# end of Firmware Drivers

CONFIG_GNSS=y
CONFIG_GNSS_SERIAL=y
CONFIG_GNSS_MTK_SERIAL=y
CONFIG_GNSS_SIRF_SERIAL=y
CONFIG_GNSS_UBX_SERIAL=y
CONFIG_GNSS_USB=y
CONFIG_MTD=y
# CONFIG_MTD_TESTS is not set

#
# Partition parsers
#
CONFIG_MTD_AR7_PARTS=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_OF_PARTS=y
CONFIG_MTD_REDBOOT_PARTS=y
CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
CONFIG_MTD_REDBOOT_PARTS_READONLY=y
# end of Partition parsers

#
# User Modules And Translation Layers
#
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y

#
# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK.
#
CONFIG_FTL=y
CONFIG_NFTL=y
CONFIG_NFTL_RW=y
CONFIG_INFTL=y
CONFIG_RFD_FTL=y
CONFIG_SSFDC=y
CONFIG_SM_FTL=y
CONFIG_MTD_OOPS=y
CONFIG_MTD_PSTORE=y
CONFIG_MTD_SWAP=y
CONFIG_MTD_PARTITIONED_MASTER=y

#
# RAM/ROM/Flash chip drivers
#
CONFIG_MTD_CFI=y
CONFIG_MTD_JEDECPROBE=y
CONFIG_MTD_GEN_PROBE=y
CONFIG_MTD_CFI_ADV_OPTIONS=y
CONFIG_MTD_CFI_NOSWAP=y
# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
CONFIG_MTD_CFI_GEOMETRY=y
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
CONFIG_MTD_MAP_BANK_WIDTH_8=y
CONFIG_MTD_MAP_BANK_WIDTH_16=y
CONFIG_MTD_MAP_BANK_WIDTH_32=y
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
CONFIG_MTD_CFI_I4=y
CONFIG_MTD_CFI_I8=y
CONFIG_MTD_OTP=y
CONFIG_MTD_CFI_INTELEXT=y
CONFIG_MTD_CFI_AMDSTD=y
CONFIG_MTD_CFI_STAA=y
CONFIG_MTD_CFI_UTIL=y
CONFIG_MTD_RAM=y
CONFIG_MTD_ROM=y
CONFIG_MTD_ABSENT=y
# end of RAM/ROM/Flash chip drivers

#
# Mapping drivers for chip access
#
CONFIG_MTD_COMPLEX_MAPPINGS=y
CONFIG_MTD_PHYSMAP=y
CONFIG_MTD_PHYSMAP_COMPAT=y
CONFIG_MTD_PHYSMAP_START=0x8000000
CONFIG_MTD_PHYSMAP_LEN=0
CONFIG_MTD_PHYSMAP_BANKWIDTH=2
CONFIG_MTD_PHYSMAP_OF=y
CONFIG_MTD_PHYSMAP_VERSATILE=y
CONFIG_MTD_PHYSMAP_GEMINI=y
CONFIG_MTD_PHYSMAP_GPIO_ADDR=y
CONFIG_MTD_SBC_GXX=y
# CONFIG_MTD_AMD76XROM is not set
CONFIG_MTD_ICHXROM=y
CONFIG_MTD_ESB2ROM=y
CONFIG_MTD_CK804XROM=y
CONFIG_MTD_SCB2_FLASH=y
# CONFIG_MTD_NETtel is not set
CONFIG_MTD_L440GX=y
CONFIG_MTD_PCI=y
CONFIG_MTD_PCMCIA=y
CONFIG_MTD_PCMCIA_ANONYMOUS=y
CONFIG_MTD_INTEL_VR_NOR=y
CONFIG_MTD_PLATRAM=y
# end of Mapping drivers for chip access

#
# Self-contained MTD device drivers
#
CONFIG_MTD_PMC551=y
CONFIG_MTD_PMC551_BUGFIX=y
CONFIG_MTD_PMC551_DEBUG=y
CONFIG_MTD_DATAFLASH=y
CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y
CONFIG_MTD_DATAFLASH_OTP=y
CONFIG_MTD_MCHP23K256=y
CONFIG_MTD_MCHP48L640=y
CONFIG_MTD_SST25L=y
CONFIG_MTD_SLRAM=y
CONFIG_MTD_PHRAM=y
CONFIG_MTD_MTDRAM=y
CONFIG_MTDRAM_TOTAL_SIZE=4096
CONFIG_MTDRAM_ERASE_SIZE=128
CONFIG_MTD_BLOCK2MTD=y

#
# Disk-On-Chip Device Drivers
#
CONFIG_MTD_DOCG3=y
CONFIG_BCH_CONST_M=14
CONFIG_BCH_CONST_T=4
# end of Self-contained MTD device drivers

#
# NAND
#
CONFIG_MTD_NAND_CORE=y
CONFIG_MTD_ONENAND=y
CONFIG_MTD_ONENAND_VERIFY_WRITE=y
CONFIG_MTD_ONENAND_GENERIC=y
CONFIG_MTD_ONENAND_OTP=y
CONFIG_MTD_ONENAND_2X_PROGRAM=y
CONFIG_MTD_RAW_NAND=y

#
# Raw/parallel NAND flash controllers
#
CONFIG_MTD_NAND_DENALI=y
CONFIG_MTD_NAND_DENALI_PCI=y
CONFIG_MTD_NAND_DENALI_DT=y
CONFIG_MTD_NAND_CAFE=y
CONFIG_MTD_NAND_MXIC=y
CONFIG_MTD_NAND_GPIO=y
CONFIG_MTD_NAND_PLATFORM=y
CONFIG_MTD_NAND_CADENCE=y
CONFIG_MTD_NAND_ARASAN=y
CONFIG_MTD_NAND_INTEL_LGM=y

#
# Misc
#
CONFIG_MTD_SM_COMMON=y
CONFIG_MTD_NAND_NANDSIM=y
CONFIG_MTD_NAND_RICOH=y
CONFIG_MTD_NAND_DISKONCHIP=y
CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED=y
CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
CONFIG_MTD_NAND_DISKONCHIP_PROBE_HIGH=y
CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y
CONFIG_MTD_SPI_NAND=y

#
# ECC engine support
#
CONFIG_MTD_NAND_ECC=y
CONFIG_MTD_NAND_ECC_SW_HAMMING=y
CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC=y
CONFIG_MTD_NAND_ECC_SW_BCH=y
CONFIG_MTD_NAND_ECC_MXIC=y
# end of ECC engine support
# end of NAND

#
# LPDDR & LPDDR2 PCM memory drivers
#
CONFIG_MTD_LPDDR=y
CONFIG_MTD_QINFO_PROBE=y
# end of LPDDR & LPDDR2 PCM memory drivers

CONFIG_MTD_SPI_NOR=y
CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
# CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set
CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
# CONFIG_MTD_SPI_NOR_SWP_KEEP is not set
CONFIG_MTD_UBI=y
CONFIG_MTD_UBI_WL_THRESHOLD=4096
CONFIG_MTD_UBI_BEB_LIMIT=20
CONFIG_MTD_UBI_FASTMAP=y
CONFIG_MTD_UBI_GLUEBI=y
CONFIG_MTD_UBI_BLOCK=y
CONFIG_MTD_HYPERBUS=y
CONFIG_DTC=y
CONFIG_OF=y
# CONFIG_OF_UNITTEST is not set
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_OF_KOBJ=y
CONFIG_OF_DYNAMIC=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_IRQ=y
CONFIG_OF_RESERVED_MEM=y
CONFIG_OF_RESOLVE=y
CONFIG_OF_OVERLAY=y
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
CONFIG_PARPORT=y
CONFIG_PARPORT_PC=y
CONFIG_PARPORT_SERIAL=y
CONFIG_PARPORT_PC_FIFO=y
CONFIG_PARPORT_PC_SUPERIO=y
CONFIG_PARPORT_PC_PCMCIA=y
CONFIG_PARPORT_AX88796=y
CONFIG_PARPORT_1284=y
CONFIG_PARPORT_NOT_PC=y
CONFIG_PNP=y
CONFIG_PNP_DEBUG_MESSAGES=y

#
# Protocols
#
CONFIG_PNPACPI=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_NULL_BLK=y
CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION=y
CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_FD_RAWCMD=y
CONFIG_CDROM=y
# CONFIG_PARIDE is not set
CONFIG_BLK_DEV_PCIESSD_MTIP32XX=y
CONFIG_ZRAM=y
CONFIG_ZRAM_DEF_COMP_LZORLE=y
# CONFIG_ZRAM_DEF_COMP_ZSTD is not set
# CONFIG_ZRAM_DEF_COMP_LZ4 is not set
# CONFIG_ZRAM_DEF_COMP_LZO is not set
# CONFIG_ZRAM_DEF_COMP_LZ4HC is not set
# CONFIG_ZRAM_DEF_COMP_842 is not set
CONFIG_ZRAM_DEF_COMP="lzo-rle"
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZRAM_MEMORY_TRACKING=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
CONFIG_BLK_DEV_DRBD=y
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_BLK_DEV_NBD=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_CDROM_PKTCDVD=y
CONFIG_CDROM_PKTCDVD_BUFFERS=8
CONFIG_CDROM_PKTCDVD_WCACHE=y
CONFIG_ATA_OVER_ETH=y
CONFIG_XEN_BLKDEV_FRONTEND=y
CONFIG_XEN_BLKDEV_BACKEND=y
CONFIG_VIRTIO_BLK=y
CONFIG_BLK_DEV_RBD=y
CONFIG_BLK_DEV_UBLK=y
CONFIG_BLK_DEV_RNBD=y
CONFIG_BLK_DEV_RNBD_CLIENT=y
CONFIG_BLK_DEV_RNBD_SERVER=y

#
# NVME Support
#
CONFIG_NVME_COMMON=y
CONFIG_NVME_CORE=y
CONFIG_BLK_DEV_NVME=y
CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_VERBOSE_ERRORS=y
CONFIG_NVME_HWMON=y
CONFIG_NVME_FABRICS=y
CONFIG_NVME_RDMA=y
CONFIG_NVME_FC=y
CONFIG_NVME_TCP=y
CONFIG_NVME_AUTH=y
CONFIG_NVME_TARGET=y
CONFIG_NVME_TARGET_PASSTHRU=y
CONFIG_NVME_TARGET_LOOP=y
CONFIG_NVME_TARGET_RDMA=y
CONFIG_NVME_TARGET_FC=y
CONFIG_NVME_TARGET_FCLOOP=y
CONFIG_NVME_TARGET_TCP=y
CONFIG_NVME_TARGET_AUTH=y
# end of NVME Support

#
# Misc devices
#
CONFIG_SENSORS_LIS3LV02D=y
CONFIG_AD525X_DPOT=y
CONFIG_AD525X_DPOT_I2C=y
CONFIG_AD525X_DPOT_SPI=y
CONFIG_DUMMY_IRQ=y
CONFIG_IBM_ASM=y
CONFIG_PHANTOM=y
CONFIG_TIFM_CORE=y
CONFIG_TIFM_7XX1=y
CONFIG_ICS932S401=y
CONFIG_ENCLOSURE_SERVICES=y
CONFIG_SGI_XP=y
CONFIG_HI6421V600_IRQ=y
CONFIG_HP_ILO=y
CONFIG_SGI_GRU=y
CONFIG_SGI_GRU_DEBUG=y
CONFIG_APDS9802ALS=y
CONFIG_ISL29003=y
CONFIG_ISL29020=y
CONFIG_SENSORS_TSL2550=y
CONFIG_SENSORS_BH1770=y
CONFIG_SENSORS_APDS990X=y
CONFIG_HMC6352=y
CONFIG_DS1682=y
CONFIG_VMWARE_BALLOON=y
CONFIG_LATTICE_ECP3_CONFIG=y
CONFIG_SRAM=y
CONFIG_DW_XDATA_PCIE=y
# CONFIG_PCI_ENDPOINT_TEST is not set
CONFIG_XILINX_SDFEC=y
CONFIG_MISC_RTSX=y
CONFIG_HISI_HIKEY_USB=y
CONFIG_OPEN_DICE=y
CONFIG_VCPU_STALL_DETECTOR=y
CONFIG_C2PORT=y
CONFIG_C2PORT_DURAMAR_2150=y

#
# EEPROM support
#
CONFIG_EEPROM_AT24=y
CONFIG_EEPROM_AT25=y
CONFIG_EEPROM_LEGACY=y
CONFIG_EEPROM_MAX6875=y
CONFIG_EEPROM_93CX6=y
CONFIG_EEPROM_93XX46=y
CONFIG_EEPROM_IDT_89HPESX=y
CONFIG_EEPROM_EE1004=y
# end of EEPROM support

CONFIG_CB710_CORE=y
CONFIG_CB710_DEBUG=y
CONFIG_CB710_DEBUG_ASSUMPTIONS=y

#
# Texas Instruments shared transport line discipline
#
CONFIG_TI_ST=y
# end of Texas Instruments shared transport line discipline

CONFIG_SENSORS_LIS3_I2C=y
CONFIG_ALTERA_STAPL=y
CONFIG_INTEL_MEI=y
CONFIG_INTEL_MEI_ME=y
CONFIG_INTEL_MEI_TXE=y
CONFIG_INTEL_MEI_GSC=y
CONFIG_INTEL_MEI_HDCP=y
CONFIG_INTEL_MEI_PXP=y
CONFIG_VMWARE_VMCI=y
CONFIG_GENWQE=y
CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0
CONFIG_ECHO=y
CONFIG_BCM_VK=y
CONFIG_BCM_VK_TTY=y
CONFIG_MISC_ALCOR_PCI=y
CONFIG_MISC_RTSX_PCI=y
CONFIG_MISC_RTSX_USB=y
CONFIG_HABANA_AI=y
CONFIG_UACCE=y
CONFIG_PVPANIC=y
CONFIG_PVPANIC_MMIO=y
CONFIG_PVPANIC_PCI=y
CONFIG_GP_PCI1XXXX=y
# end of Misc devices

#
# SCSI device support
#
CONFIG_SCSI_MOD=y
CONFIG_RAID_ATTRS=y
CONFIG_SCSI_COMMON=y
CONFIG_SCSI=y
CONFIG_SCSI_DMA=y
CONFIG_SCSI_NETLINK=y
CONFIG_SCSI_PROC_FS=y

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=y
CONFIG_BLK_DEV_SR=y
CONFIG_CHR_DEV_SG=y
CONFIG_BLK_DEV_BSG=y
CONFIG_CHR_DEV_SCH=y
CONFIG_SCSI_ENCLOSURE=y
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SCAN_ASYNC=y

#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=y
CONFIG_SCSI_FC_ATTRS=y
CONFIG_SCSI_ISCSI_ATTRS=y
CONFIG_SCSI_SAS_ATTRS=y
CONFIG_SCSI_SAS_LIBSAS=y
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SRP_ATTRS=y
# end of SCSI Transports

CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=y
CONFIG_ISCSI_BOOT_SYSFS=y
CONFIG_SCSI_CXGB3_ISCSI=y
CONFIG_SCSI_CXGB4_ISCSI=y
CONFIG_SCSI_BNX2_ISCSI=y
CONFIG_SCSI_BNX2X_FCOE=y
CONFIG_BE2ISCSI=y
CONFIG_BLK_DEV_3W_XXXX_RAID=y
CONFIG_SCSI_HPSA=y
CONFIG_SCSI_3W_9XXX=y
CONFIG_SCSI_3W_SAS=y
CONFIG_SCSI_ACARD=y
CONFIG_SCSI_AHA1740=y
CONFIG_SCSI_AACRAID=y
CONFIG_SCSI_AIC7XXX=y
CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
CONFIG_AIC7XXX_RESET_DELAY_MS=5000
CONFIG_AIC7XXX_DEBUG_ENABLE=y
CONFIG_AIC7XXX_DEBUG_MASK=0
CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
CONFIG_SCSI_AIC79XX=y
CONFIG_AIC79XX_CMDS_PER_DEVICE=32
CONFIG_AIC79XX_RESET_DELAY_MS=5000
CONFIG_AIC79XX_DEBUG_ENABLE=y
CONFIG_AIC79XX_DEBUG_MASK=0
CONFIG_AIC79XX_REG_PRETTY_PRINT=y
CONFIG_SCSI_AIC94XX=y
CONFIG_AIC94XX_DEBUG=y
CONFIG_SCSI_MVSAS=y
CONFIG_SCSI_MVSAS_DEBUG=y
CONFIG_SCSI_MVSAS_TASKLET=y
CONFIG_SCSI_MVUMI=y
CONFIG_SCSI_ADVANSYS=y
CONFIG_SCSI_ARCMSR=y
CONFIG_SCSI_ESAS2R=y
CONFIG_MEGARAID_NEWGEN=y
CONFIG_MEGARAID_MM=y
CONFIG_MEGARAID_MAILBOX=y
CONFIG_MEGARAID_LEGACY=y
CONFIG_MEGARAID_SAS=y
CONFIG_SCSI_MPT3SAS=y
CONFIG_SCSI_MPT2SAS_MAX_SGE=128
CONFIG_SCSI_MPT3SAS_MAX_SGE=128
CONFIG_SCSI_MPT2SAS=y
CONFIG_SCSI_MPI3MR=y
CONFIG_SCSI_SMARTPQI=y
CONFIG_SCSI_HPTIOP=y
CONFIG_SCSI_BUSLOGIC=y
CONFIG_SCSI_FLASHPOINT=y
CONFIG_SCSI_MYRB=y
CONFIG_SCSI_MYRS=y
CONFIG_VMWARE_PVSCSI=y
CONFIG_XEN_SCSI_FRONTEND=y
CONFIG_HYPERV_STORAGE=y
CONFIG_LIBFC=y
CONFIG_LIBFCOE=y
CONFIG_FCOE=y
CONFIG_FCOE_FNIC=y
CONFIG_SCSI_SNIC=y
CONFIG_SCSI_SNIC_DEBUG_FS=y
CONFIG_SCSI_DMX3191D=y
CONFIG_SCSI_FDOMAIN=y
CONFIG_SCSI_FDOMAIN_PCI=y
CONFIG_SCSI_ISCI=y
CONFIG_SCSI_IPS=y
CONFIG_SCSI_INITIO=y
CONFIG_SCSI_INIA100=y
CONFIG_SCSI_PPA=y
CONFIG_SCSI_IMM=y
CONFIG_SCSI_IZIP_EPP16=y
CONFIG_SCSI_IZIP_SLOW_CTR=y
CONFIG_SCSI_STEX=y
CONFIG_SCSI_SYM53C8XX_2=y
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
CONFIG_SCSI_SYM53C8XX_MMIO=y
CONFIG_SCSI_IPR=y
CONFIG_SCSI_IPR_TRACE=y
CONFIG_SCSI_IPR_DUMP=y
CONFIG_SCSI_QLOGIC_1280=y
CONFIG_SCSI_QLA_FC=y
CONFIG_TCM_QLA2XXX=y
CONFIG_TCM_QLA2XXX_DEBUG=y
CONFIG_SCSI_QLA_ISCSI=y
CONFIG_QEDI=y
CONFIG_QEDF=y
CONFIG_SCSI_LPFC=y
CONFIG_SCSI_LPFC_DEBUG_FS=y
CONFIG_SCSI_EFCT=y
CONFIG_SCSI_SIM710=y
CONFIG_SCSI_DC395x=y
CONFIG_SCSI_AM53C974=y
CONFIG_SCSI_WD719X=y
CONFIG_SCSI_DEBUG=y
CONFIG_SCSI_PMCRAID=y
CONFIG_SCSI_PM8001=y
CONFIG_SCSI_BFA_FC=y
CONFIG_SCSI_VIRTIO=y
CONFIG_SCSI_CHELSIO_FCOE=y
CONFIG_SCSI_LOWLEVEL_PCMCIA=y
CONFIG_PCMCIA_AHA152X=m
CONFIG_PCMCIA_FDOMAIN=m
CONFIG_PCMCIA_QLOGIC=m
CONFIG_PCMCIA_SYM53C500=m
CONFIG_SCSI_DH=y
CONFIG_SCSI_DH_RDAC=y
CONFIG_SCSI_DH_HP_SW=y
CONFIG_SCSI_DH_EMC=y
CONFIG_SCSI_DH_ALUA=y
# end of SCSI device support

CONFIG_ATA=y
CONFIG_SATA_HOST=y
CONFIG_PATA_TIMINGS=y
CONFIG_ATA_VERBOSE_ERROR=y
CONFIG_ATA_FORCE=y
CONFIG_ATA_ACPI=y
CONFIG_SATA_ZPODD=y
CONFIG_SATA_PMP=y

#
# Controllers with non-SFF native interface
#
CONFIG_SATA_AHCI=y
CONFIG_SATA_MOBILE_LPM_POLICY=0
CONFIG_SATA_AHCI_PLATFORM=y
CONFIG_AHCI_DWC=y
CONFIG_AHCI_CEVA=y
CONFIG_AHCI_QORIQ=y
CONFIG_SATA_INIC162X=y
CONFIG_SATA_ACARD_AHCI=y
CONFIG_SATA_SIL24=y
CONFIG_ATA_SFF=y

#
# SFF controllers with custom DMA interface
#
CONFIG_PDC_ADMA=y
CONFIG_SATA_QSTOR=y
CONFIG_SATA_SX4=y
CONFIG_ATA_BMDMA=y

#
# SATA SFF controllers with BMDMA
#
CONFIG_ATA_PIIX=y
CONFIG_SATA_DWC=y
CONFIG_SATA_DWC_OLD_DMA=y
CONFIG_SATA_MV=y
CONFIG_SATA_NV=y
CONFIG_SATA_PROMISE=y
CONFIG_SATA_SIL=y
CONFIG_SATA_SIS=y
CONFIG_SATA_SVW=y
CONFIG_SATA_ULI=y
CONFIG_SATA_VIA=y
CONFIG_SATA_VITESSE=y

#
# PATA SFF controllers with BMDMA
#
CONFIG_PATA_ALI=y
# CONFIG_PATA_AMD is not set
CONFIG_PATA_ARTOP=y
CONFIG_PATA_ATIIXP=y
CONFIG_PATA_ATP867X=y
CONFIG_PATA_CMD64X=y
CONFIG_PATA_CYPRESS=y
CONFIG_PATA_EFAR=y
CONFIG_PATA_HPT366=y
CONFIG_PATA_HPT37X=y
CONFIG_PATA_HPT3X2N=y
CONFIG_PATA_HPT3X3=y
CONFIG_PATA_HPT3X3_DMA=y
CONFIG_PATA_IT8213=y
CONFIG_PATA_IT821X=y
CONFIG_PATA_JMICRON=y
CONFIG_PATA_MARVELL=y
CONFIG_PATA_NETCELL=y
CONFIG_PATA_NINJA32=y
CONFIG_PATA_NS87415=y
CONFIG_PATA_OLDPIIX=y
CONFIG_PATA_OPTIDMA=y
CONFIG_PATA_PDC2027X=y
CONFIG_PATA_PDC_OLD=y
CONFIG_PATA_RADISYS=y
CONFIG_PATA_RDC=y
CONFIG_PATA_SCH=y
CONFIG_PATA_SERVERWORKS=y
CONFIG_PATA_SIL680=y
CONFIG_PATA_SIS=y
CONFIG_PATA_TOSHIBA=y
CONFIG_PATA_TRIFLEX=y
CONFIG_PATA_VIA=y
CONFIG_PATA_WINBOND=y

#
# PIO-only SFF controllers
#
CONFIG_PATA_CMD640_PCI=y
CONFIG_PATA_MPIIX=y
CONFIG_PATA_NS87410=y
CONFIG_PATA_OPTI=y
CONFIG_PATA_PCMCIA=y
CONFIG_PATA_PLATFORM=y
CONFIG_PATA_OF_PLATFORM=y
CONFIG_PATA_RZ1000=y

#
# Generic fallback / legacy drivers
#
CONFIG_PATA_ACPI=y
CONFIG_ATA_GENERIC=y
CONFIG_PATA_LEGACY=y
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD_AUTODETECT=y
CONFIG_MD_LINEAR=y
CONFIG_MD_RAID0=y
CONFIG_MD_RAID1=y
CONFIG_MD_RAID10=y
CONFIG_MD_RAID456=y
CONFIG_MD_MULTIPATH=y
CONFIG_MD_FAULTY=y
CONFIG_MD_CLUSTER=y
CONFIG_BCACHE=y
CONFIG_BCACHE_DEBUG=y
CONFIG_BCACHE_CLOSURES_DEBUG=y
CONFIG_BCACHE_ASYNC_REGISTRATION=y
CONFIG_BLK_DEV_DM_BUILTIN=y
CONFIG_BLK_DEV_DM=y
CONFIG_DM_DEBUG=y
CONFIG_DM_BUFIO=y
CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING=y
CONFIG_DM_DEBUG_BLOCK_STACK_TRACING=y
CONFIG_DM_BIO_PRISON=y
CONFIG_DM_PERSISTENT_DATA=y
CONFIG_DM_UNSTRIPED=y
CONFIG_DM_CRYPT=y
CONFIG_DM_SNAPSHOT=y
CONFIG_DM_THIN_PROVISIONING=y
CONFIG_DM_CACHE=y
CONFIG_DM_CACHE_SMQ=y
CONFIG_DM_WRITECACHE=y
CONFIG_DM_EBS=y
CONFIG_DM_ERA=y
CONFIG_DM_CLONE=y
CONFIG_DM_MIRROR=y
CONFIG_DM_LOG_USERSPACE=y
CONFIG_DM_RAID=y
CONFIG_DM_ZERO=y
CONFIG_DM_MULTIPATH=y
CONFIG_DM_MULTIPATH_QL=y
CONFIG_DM_MULTIPATH_ST=y
CONFIG_DM_MULTIPATH_HST=y
CONFIG_DM_MULTIPATH_IOA=y
CONFIG_DM_DELAY=y
CONFIG_DM_DUST=y
CONFIG_DM_INIT=y
CONFIG_DM_UEVENT=y
CONFIG_DM_FLAKEY=y
CONFIG_DM_VERITY=y
CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG=y
CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING=y
CONFIG_DM_VERITY_FEC=y
CONFIG_DM_SWITCH=y
CONFIG_DM_LOG_WRITES=y
CONFIG_DM_INTEGRITY=y
CONFIG_DM_ZONED=y
CONFIG_DM_AUDIT=y
CONFIG_TARGET_CORE=y
CONFIG_TCM_IBLOCK=y
CONFIG_TCM_FILEIO=y
CONFIG_TCM_PSCSI=y
CONFIG_TCM_USER2=y
CONFIG_LOOPBACK_TARGET=y
CONFIG_TCM_FC=y
CONFIG_ISCSI_TARGET=y
CONFIG_ISCSI_TARGET_CXGB4=y
CONFIG_SBP_TARGET=y
CONFIG_FUSION=y
CONFIG_FUSION_SPI=y
CONFIG_FUSION_FC=y
CONFIG_FUSION_SAS=y
CONFIG_FUSION_MAX_SGE=128
CONFIG_FUSION_CTL=y
CONFIG_FUSION_LAN=y
CONFIG_FUSION_LOGGING=y

#
# IEEE 1394 (FireWire) support
#
CONFIG_FIREWIRE=y
CONFIG_FIREWIRE_OHCI=y
CONFIG_FIREWIRE_SBP2=y
CONFIG_FIREWIRE_NET=y
CONFIG_FIREWIRE_NOSY=y
# end of IEEE 1394 (FireWire) support

CONFIG_MACINTOSH_DRIVERS=y
CONFIG_MAC_EMUMOUSEBTN=y
CONFIG_NETDEVICES=y
CONFIG_MII=y
CONFIG_NET_CORE=y
CONFIG_BONDING=y
CONFIG_DUMMY=y
CONFIG_WIREGUARD=y
CONFIG_WIREGUARD_DEBUG=y
CONFIG_EQUALIZER=y
CONFIG_NET_FC=y
CONFIG_IFB=y
CONFIG_NET_TEAM=y
CONFIG_NET_TEAM_MODE_BROADCAST=y
CONFIG_NET_TEAM_MODE_ROUNDROBIN=y
CONFIG_NET_TEAM_MODE_RANDOM=y
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=y
CONFIG_NET_TEAM_MODE_LOADBALANCE=y
CONFIG_MACVLAN=y
CONFIG_MACVTAP=y
CONFIG_IPVLAN_L3S=y
CONFIG_IPVLAN=y
CONFIG_IPVTAP=y
CONFIG_VXLAN=y
CONFIG_GENEVE=y
CONFIG_BAREUDP=y
CONFIG_GTP=y
CONFIG_AMT=y
CONFIG_MACSEC=y
CONFIG_NETCONSOLE=y
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_NET_POLL_CONTROLLER=y
CONFIG_NTB_NETDEV=y
CONFIG_RIONET=y
CONFIG_RIONET_TX_SIZE=128
CONFIG_RIONET_RX_SIZE=128
CONFIG_TUN=y
CONFIG_TAP=y
CONFIG_TUN_VNET_CROSS_LE=y
CONFIG_VETH=y
CONFIG_VIRTIO_NET=y
CONFIG_NLMON=y
CONFIG_NET_VRF=y
CONFIG_VSOCKMON=y
CONFIG_MHI_NET=y
CONFIG_SUNGEM_PHY=y
CONFIG_ARCNET=y
CONFIG_ARCNET_1201=y
CONFIG_ARCNET_1051=y
CONFIG_ARCNET_RAW=y
CONFIG_ARCNET_CAP=y
CONFIG_ARCNET_COM90xx=y
CONFIG_ARCNET_COM90xxIO=y
CONFIG_ARCNET_RIM_I=y
CONFIG_ARCNET_COM20020=y
CONFIG_ARCNET_COM20020_PCI=y
CONFIG_ARCNET_COM20020_CS=y
CONFIG_ATM_DRIVERS=y
CONFIG_ATM_DUMMY=y
CONFIG_ATM_TCP=y
CONFIG_ATM_LANAI=y
CONFIG_ATM_ENI=y
CONFIG_ATM_ENI_DEBUG=y
CONFIG_ATM_ENI_TUNE_BURST=y
CONFIG_ATM_ENI_BURST_TX_16W=y
CONFIG_ATM_ENI_BURST_TX_8W=y
CONFIG_ATM_ENI_BURST_TX_4W=y
CONFIG_ATM_ENI_BURST_TX_2W=y
CONFIG_ATM_ENI_BURST_RX_16W=y
CONFIG_ATM_ENI_BURST_RX_8W=y
CONFIG_ATM_ENI_BURST_RX_4W=y
CONFIG_ATM_ENI_BURST_RX_2W=y
CONFIG_ATM_NICSTAR=y
CONFIG_ATM_NICSTAR_USE_SUNI=y
CONFIG_ATM_NICSTAR_USE_IDT77105=y
CONFIG_ATM_IDT77252=y
CONFIG_ATM_IDT77252_DEBUG=y
CONFIG_ATM_IDT77252_RCV_ALL=y
CONFIG_ATM_IDT77252_USE_SUNI=y
CONFIG_ATM_IA=y
CONFIG_ATM_IA_DEBUG=y
CONFIG_ATM_FORE200E=y
CONFIG_ATM_FORE200E_USE_TASKLET=y
CONFIG_ATM_FORE200E_TX_RETRY=16
CONFIG_ATM_FORE200E_DEBUG=0
CONFIG_ATM_HE=y
CONFIG_ATM_HE_USE_SUNI=y
CONFIG_ATM_SOLOS=y
CONFIG_CAIF_DRIVERS=y
CONFIG_CAIF_TTY=y
CONFIG_CAIF_VIRTIO=y

#
# Distributed Switch Architecture drivers
#
CONFIG_B53=y
CONFIG_B53_SPI_DRIVER=y
CONFIG_B53_MDIO_DRIVER=y
CONFIG_B53_MMAP_DRIVER=y
CONFIG_B53_SRAB_DRIVER=y
CONFIG_B53_SERDES=y
CONFIG_NET_DSA_BCM_SF2=y
CONFIG_NET_DSA_LOOP=y
CONFIG_NET_DSA_HIRSCHMANN_HELLCREEK=y
CONFIG_NET_DSA_LANTIQ_GSWIP=y
CONFIG_NET_DSA_MT7530=y
CONFIG_NET_DSA_MV88E6060=y
CONFIG_NET_DSA_MICROCHIP_KSZ_COMMON=y
CONFIG_NET_DSA_MICROCHIP_KSZ9477_I2C=y
CONFIG_NET_DSA_MICROCHIP_KSZ_SPI=y
CONFIG_NET_DSA_MICROCHIP_KSZ8863_SMI=y
CONFIG_NET_DSA_MV88E6XXX=y
CONFIG_NET_DSA_MV88E6XXX_PTP=y
CONFIG_NET_DSA_MSCC_SEVILLE=y
CONFIG_NET_DSA_AR9331=y
CONFIG_NET_DSA_QCA8K=y
CONFIG_NET_DSA_SJA1105=y
CONFIG_NET_DSA_SJA1105_PTP=y
CONFIG_NET_DSA_SJA1105_TAS=y
CONFIG_NET_DSA_SJA1105_VL=y
CONFIG_NET_DSA_XRS700X=y
CONFIG_NET_DSA_XRS700X_I2C=y
CONFIG_NET_DSA_XRS700X_MDIO=y
CONFIG_NET_DSA_REALTEK=y
CONFIG_NET_DSA_REALTEK_MDIO=y
CONFIG_NET_DSA_REALTEK_SMI=y
CONFIG_NET_DSA_REALTEK_RTL8365MB=y
CONFIG_NET_DSA_REALTEK_RTL8366RB=y
CONFIG_NET_DSA_SMSC_LAN9303=y
CONFIG_NET_DSA_SMSC_LAN9303_I2C=y
CONFIG_NET_DSA_SMSC_LAN9303_MDIO=y
CONFIG_NET_DSA_VITESSE_VSC73XX=y
CONFIG_NET_DSA_VITESSE_VSC73XX_SPI=y
CONFIG_NET_DSA_VITESSE_VSC73XX_PLATFORM=y
# end of Distributed Switch Architecture drivers

CONFIG_ETHERNET=y
CONFIG_MDIO=y
CONFIG_NET_VENDOR_3COM=y
CONFIG_EL3=y
CONFIG_PCMCIA_3C574=y
CONFIG_PCMCIA_3C589=y
CONFIG_VORTEX=y
CONFIG_TYPHOON=y
CONFIG_NET_VENDOR_ADAPTEC=y
CONFIG_ADAPTEC_STARFIRE=y
CONFIG_NET_VENDOR_AGERE=y
CONFIG_ET131X=y
CONFIG_NET_VENDOR_ALACRITECH=y
CONFIG_SLICOSS=y
CONFIG_NET_VENDOR_ALTEON=y
CONFIG_ACENIC=y
CONFIG_ACENIC_OMIT_TIGON_I=y
CONFIG_ALTERA_TSE=y
CONFIG_NET_VENDOR_AMAZON=y
CONFIG_ENA_ETHERNET=y
# CONFIG_NET_VENDOR_AMD is not set
CONFIG_NET_VENDOR_AQUANTIA=y
CONFIG_AQTION=y
CONFIG_NET_VENDOR_ARC=y
CONFIG_NET_VENDOR_ASIX=y
CONFIG_SPI_AX88796C=y
CONFIG_SPI_AX88796C_COMPRESSION=y
CONFIG_NET_VENDOR_ATHEROS=y
CONFIG_ATL2=y
CONFIG_ATL1=y
CONFIG_ATL1E=y
CONFIG_ATL1C=y
CONFIG_ALX=y
CONFIG_CX_ECAT=y
CONFIG_NET_VENDOR_BROADCOM=y
CONFIG_B44=y
CONFIG_B44_PCI_AUTOSELECT=y
CONFIG_B44_PCICORE_AUTOSELECT=y
CONFIG_B44_PCI=y
CONFIG_BCMGENET=y
CONFIG_BNX2=y
CONFIG_CNIC=y
CONFIG_TIGON3=y
CONFIG_TIGON3_HWMON=y
CONFIG_BNX2X=y
CONFIG_BNX2X_SRIOV=y
CONFIG_SYSTEMPORT=y
CONFIG_BNXT=y
CONFIG_BNXT_SRIOV=y
CONFIG_BNXT_FLOWER_OFFLOAD=y
CONFIG_BNXT_DCB=y
CONFIG_BNXT_HWMON=y
CONFIG_NET_VENDOR_CADENCE=y
CONFIG_MACB=y
CONFIG_MACB_USE_HWSTAMP=y
CONFIG_MACB_PCI=y
CONFIG_NET_VENDOR_CAVIUM=y
CONFIG_THUNDER_NIC_PF=y
CONFIG_THUNDER_NIC_VF=y
CONFIG_THUNDER_NIC_BGX=y
CONFIG_THUNDER_NIC_RGX=y
CONFIG_CAVIUM_PTP=y
CONFIG_LIQUIDIO=y
CONFIG_LIQUIDIO_VF=y
CONFIG_NET_VENDOR_CHELSIO=y
CONFIG_CHELSIO_T1=y
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T3=y
CONFIG_CHELSIO_T4=y
CONFIG_CHELSIO_T4_DCB=y
CONFIG_CHELSIO_T4_FCOE=y
CONFIG_CHELSIO_T4VF=y
CONFIG_CHELSIO_LIB=y
CONFIG_CHELSIO_INLINE_CRYPTO=y
CONFIG_CRYPTO_DEV_CHELSIO_TLS=y
CONFIG_CHELSIO_IPSEC_INLINE=y
CONFIG_CHELSIO_TLS_DEVICE=y
CONFIG_NET_VENDOR_CIRRUS=y
CONFIG_NET_VENDOR_CISCO=y
CONFIG_ENIC=y
CONFIG_NET_VENDOR_CORTINA=y
CONFIG_GEMINI_ETHERNET=y
CONFIG_NET_VENDOR_DAVICOM=y
CONFIG_DM9051=y
CONFIG_DNET=y
CONFIG_NET_VENDOR_DEC=y
CONFIG_NET_TULIP=y
CONFIG_DE2104X=y
CONFIG_DE2104X_DSL=0
CONFIG_TULIP=y
CONFIG_TULIP_MWI=y
CONFIG_TULIP_MMIO=y
CONFIG_TULIP_NAPI=y
CONFIG_TULIP_NAPI_HW_MITIGATION=y
CONFIG_WINBOND_840=y
CONFIG_DM9102=y
CONFIG_ULI526X=y
CONFIG_PCMCIA_XIRCOM=y
CONFIG_NET_VENDOR_DLINK=y
CONFIG_DL2K=y
CONFIG_SUNDANCE=y
CONFIG_SUNDANCE_MMIO=y
CONFIG_NET_VENDOR_EMULEX=y
CONFIG_BE2NET=y
CONFIG_BE2NET_HWMON=y
CONFIG_BE2NET_BE2=y
CONFIG_BE2NET_BE3=y
CONFIG_BE2NET_LANCER=y
CONFIG_BE2NET_SKYHAWK=y
CONFIG_NET_VENDOR_ENGLEDER=y
CONFIG_TSNEP=y
# CONFIG_TSNEP_SELFTESTS is not set
CONFIG_NET_VENDOR_EZCHIP=y
CONFIG_EZCHIP_NPS_MANAGEMENT_ENET=y
CONFIG_NET_VENDOR_FUJITSU=y
CONFIG_PCMCIA_FMVJ18X=y
CONFIG_NET_VENDOR_FUNGIBLE=y
CONFIG_FUN_CORE=y
CONFIG_FUN_ETH=y
CONFIG_NET_VENDOR_GOOGLE=y
CONFIG_GVE=y
CONFIG_NET_VENDOR_HUAWEI=y
CONFIG_HINIC=y
CONFIG_NET_VENDOR_I825XX=y
CONFIG_NET_VENDOR_INTEL=y
CONFIG_E100=y
CONFIG_E1000=y
CONFIG_E1000E=y
CONFIG_E1000E_HWTS=y
CONFIG_IGB=y
CONFIG_IGB_HWMON=y
CONFIG_IGB_DCA=y
CONFIG_IGBVF=y
CONFIG_IXGB=y
CONFIG_IXGBE=y
CONFIG_IXGBE_HWMON=y
CONFIG_IXGBE_DCA=y
CONFIG_IXGBE_DCB=y
CONFIG_IXGBE_IPSEC=y
CONFIG_IXGBEVF=y
CONFIG_IXGBEVF_IPSEC=y
CONFIG_I40E=y
CONFIG_I40E_DCB=y
CONFIG_IAVF=y
CONFIG_I40EVF=y
CONFIG_ICE=y
CONFIG_ICE_SWITCHDEV=y
CONFIG_ICE_HWTS=y
CONFIG_FM10K=y
CONFIG_IGC=y
CONFIG_NET_VENDOR_WANGXUN=y
CONFIG_LIBWX=y
CONFIG_NGBE=y
CONFIG_TXGBE=y
CONFIG_JME=y
CONFIG_NET_VENDOR_ADI=y
CONFIG_ADIN1110=y
CONFIG_NET_VENDOR_LITEX=y
CONFIG_LITEX_LITEETH=y
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_MVMDIO=y
CONFIG_SKGE=y
CONFIG_SKGE_DEBUG=y
CONFIG_SKGE_GENESIS=y
CONFIG_SKY2=y
CONFIG_SKY2_DEBUG=y
CONFIG_OCTEON_EP=y
CONFIG_PRESTERA=y
CONFIG_PRESTERA_PCI=y
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_MLX4_EN=y
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_CORE=y
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX5_CORE=y
CONFIG_MLX5_FPGA=y
CONFIG_MLX5_CORE_EN=y
CONFIG_MLX5_EN_ARFS=y
CONFIG_MLX5_EN_RXNFC=y
CONFIG_MLX5_MPFS=y
CONFIG_MLX5_ESWITCH=y
CONFIG_MLX5_BRIDGE=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_TC_SAMPLE=y
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_EN_MACSEC=y
CONFIG_MLX5_EN_IPSEC=y
CONFIG_MLX5_EN_TLS=y
CONFIG_MLX5_SW_STEERING=y
CONFIG_MLX5_SF=y
CONFIG_MLX5_SF_MANAGER=y
CONFIG_MLXSW_CORE=y
CONFIG_MLXSW_CORE_HWMON=y
CONFIG_MLXSW_CORE_THERMAL=y
CONFIG_MLXSW_PCI=y
CONFIG_MLXSW_I2C=y
CONFIG_MLXSW_SPECTRUM=y
CONFIG_MLXSW_SPECTRUM_DCB=y
CONFIG_MLXSW_MINIMAL=y
CONFIG_MLXFW=y
CONFIG_NET_VENDOR_MICREL=y
CONFIG_KS8842=y
CONFIG_KS8851=y
CONFIG_KS8851_MLL=y
CONFIG_KSZ884X_PCI=y
CONFIG_NET_VENDOR_MICROCHIP=y
CONFIG_ENC28J60=y
CONFIG_ENC28J60_WRITEVERIFY=y
CONFIG_ENCX24J600=y
CONFIG_LAN743X=y
CONFIG_LAN966X_SWITCH=y
CONFIG_VCAP=y
CONFIG_NET_VENDOR_MICROSEMI=y
CONFIG_MSCC_OCELOT_SWITCH_LIB=y
CONFIG_MSCC_OCELOT_SWITCH=y
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_MICROSOFT_MANA=y
CONFIG_NET_VENDOR_MYRI=y
CONFIG_MYRI10GE=y
CONFIG_MYRI10GE_DCA=y
CONFIG_NET_VENDOR_NI=y
CONFIG_NI_XGE_MANAGEMENT_ENET=y
CONFIG_NET_VENDOR_NATSEMI=y
CONFIG_NATSEMI=y
CONFIG_NS83820=y
CONFIG_NET_VENDOR_NETERION=y
CONFIG_S2IO=y
CONFIG_NET_VENDOR_NETRONOME=y
CONFIG_NFP=y
CONFIG_NFP_APP_FLOWER=y
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_NET_IPSEC=y
CONFIG_NFP_DEBUG=y
CONFIG_NET_VENDOR_8390=y
CONFIG_PCMCIA_AXNET=y
CONFIG_NE2K_PCI=y
CONFIG_PCMCIA_PCNET=y
CONFIG_NET_VENDOR_NVIDIA=y
CONFIG_FORCEDETH=y
CONFIG_NET_VENDOR_OKI=y
CONFIG_ETHOC=y
CONFIG_NET_VENDOR_PACKET_ENGINES=y
CONFIG_HAMACHI=y
CONFIG_YELLOWFIN=y
CONFIG_NET_VENDOR_PENSANDO=y
CONFIG_IONIC=y
CONFIG_NET_VENDOR_QLOGIC=y
CONFIG_QLA3XXX=y
CONFIG_QLCNIC=y
CONFIG_QLCNIC_SRIOV=y
CONFIG_QLCNIC_DCB=y
CONFIG_QLCNIC_HWMON=y
CONFIG_NETXEN_NIC=y
CONFIG_QED=y
CONFIG_QED_LL2=y
CONFIG_QED_SRIOV=y
CONFIG_QEDE=y
CONFIG_QED_RDMA=y
CONFIG_QED_ISCSI=y
CONFIG_QED_FCOE=y
CONFIG_QED_OOO=y
CONFIG_NET_VENDOR_BROCADE=y
CONFIG_BNA=y
CONFIG_NET_VENDOR_QUALCOMM=y
CONFIG_QCA7000=y
CONFIG_QCA7000_SPI=y
CONFIG_QCA7000_UART=y
CONFIG_QCOM_EMAC=y
CONFIG_RMNET=y
CONFIG_NET_VENDOR_RDC=y
CONFIG_R6040=y
CONFIG_NET_VENDOR_REALTEK=y
CONFIG_ATP=y
CONFIG_8139CP=y
CONFIG_8139TOO=y
CONFIG_8139TOO_PIO=y
CONFIG_8139TOO_TUNE_TWISTER=y
CONFIG_8139TOO_8129=y
CONFIG_8139_OLD_RX_RESET=y
CONFIG_R8169=y
CONFIG_NET_VENDOR_RENESAS=y
CONFIG_NET_VENDOR_ROCKER=y
CONFIG_ROCKER=y
CONFIG_NET_VENDOR_SAMSUNG=y
CONFIG_SXGBE_ETH=y
CONFIG_NET_VENDOR_SEEQ=y
CONFIG_NET_VENDOR_SILAN=y
CONFIG_SC92031=y
CONFIG_NET_VENDOR_SIS=y
CONFIG_SIS900=y
CONFIG_SIS190=y
CONFIG_NET_VENDOR_SOLARFLARE=y
CONFIG_SFC=y
CONFIG_SFC_MTD=y
CONFIG_SFC_MCDI_MON=y
CONFIG_SFC_SRIOV=y
CONFIG_SFC_MCDI_LOGGING=y
CONFIG_SFC_FALCON=y
CONFIG_SFC_FALCON_MTD=y
CONFIG_SFC_SIENA=y
CONFIG_SFC_SIENA_MTD=y
CONFIG_SFC_SIENA_MCDI_MON=y
CONFIG_SFC_SIENA_SRIOV=y
CONFIG_SFC_SIENA_MCDI_LOGGING=y
CONFIG_NET_VENDOR_SMSC=y
CONFIG_PCMCIA_SMC91C92=y
CONFIG_EPIC100=y
CONFIG_SMSC911X=y
CONFIG_SMSC9420=y
CONFIG_NET_VENDOR_SOCIONEXT=y
CONFIG_NET_VENDOR_STMICRO=y
CONFIG_STMMAC_ETH=y
# CONFIG_STMMAC_SELFTESTS is not set
CONFIG_STMMAC_PLATFORM=y
CONFIG_DWMAC_DWC_QOS_ETH=y
CONFIG_DWMAC_GENERIC=y
CONFIG_DWMAC_INTEL_PLAT=y
CONFIG_DWMAC_INTEL=y
CONFIG_DWMAC_LOONGSON=y
CONFIG_STMMAC_PCI=y
CONFIG_NET_VENDOR_SUN=y
CONFIG_HAPPYMEAL=y
CONFIG_SUNGEM=y
CONFIG_CASSINI=y
CONFIG_NIU=y
CONFIG_NET_VENDOR_SYNOPSYS=y
CONFIG_DWC_XLGMAC=y
CONFIG_DWC_XLGMAC_PCI=y
CONFIG_NET_VENDOR_TEHUTI=y
CONFIG_TEHUTI=y
CONFIG_NET_VENDOR_TI=y
CONFIG_TI_CPSW_PHY_SEL=y
CONFIG_TLAN=y
CONFIG_NET_VENDOR_VERTEXCOM=y
CONFIG_MSE102X=y
CONFIG_NET_VENDOR_VIA=y
CONFIG_VIA_RHINE=y
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=y
CONFIG_NET_VENDOR_WIZNET=y
CONFIG_WIZNET_W5100=y
CONFIG_WIZNET_W5300=y
# CONFIG_WIZNET_BUS_DIRECT is not set
# CONFIG_WIZNET_BUS_INDIRECT is not set
CONFIG_WIZNET_BUS_ANY=y
CONFIG_WIZNET_W5100_SPI=y
CONFIG_NET_VENDOR_XILINX=y
CONFIG_XILINX_EMACLITE=y
CONFIG_XILINX_AXI_EMAC=y
CONFIG_XILINX_LL_TEMAC=y
CONFIG_NET_VENDOR_XIRCOM=y
CONFIG_PCMCIA_XIRC2PS=y
CONFIG_FDDI=y
CONFIG_DEFXX=y
CONFIG_SKFP=y
CONFIG_HIPPI=y
CONFIG_ROADRUNNER=y
CONFIG_ROADRUNNER_LARGE_RINGS=y
CONFIG_NET_SB1000=y
CONFIG_PHYLINK=y
CONFIG_PHYLIB=y
CONFIG_SWPHY=y
CONFIG_LED_TRIGGER_PHY=y
CONFIG_FIXED_PHY=y
CONFIG_SFP=y

#
# MII PHY device drivers
#
# CONFIG_AMD_PHY is not set
CONFIG_ADIN_PHY=y
CONFIG_ADIN1100_PHY=y
CONFIG_AQUANTIA_PHY=y
CONFIG_AX88796B_PHY=y
CONFIG_BROADCOM_PHY=y
CONFIG_BCM54140_PHY=y
CONFIG_BCM7XXX_PHY=y
CONFIG_BCM84881_PHY=y
CONFIG_BCM87XX_PHY=y
CONFIG_BCM_NET_PHYLIB=y
CONFIG_BCM_NET_PHYPTP=y
CONFIG_CICADA_PHY=y
CONFIG_CORTINA_PHY=y
CONFIG_DAVICOM_PHY=y
CONFIG_ICPLUS_PHY=y
CONFIG_LXT_PHY=y
CONFIG_INTEL_XWAY_PHY=y
CONFIG_LSI_ET1011C_PHY=y
CONFIG_MARVELL_PHY=y
CONFIG_MARVELL_10G_PHY=y
CONFIG_MARVELL_88X2222_PHY=y
CONFIG_MAXLINEAR_GPHY=y
CONFIG_MEDIATEK_GE_PHY=y
CONFIG_MICREL_PHY=y
CONFIG_MICROCHIP_PHY=y
CONFIG_MICROCHIP_T1_PHY=y
CONFIG_MICROSEMI_PHY=y
CONFIG_MOTORCOMM_PHY=y
CONFIG_NATIONAL_PHY=y
CONFIG_NXP_C45_TJA11XX_PHY=y
CONFIG_NXP_TJA11XX_PHY=y
CONFIG_AT803X_PHY=y
CONFIG_QSEMI_PHY=y
CONFIG_REALTEK_PHY=y
CONFIG_RENESAS_PHY=y
CONFIG_ROCKCHIP_PHY=y
CONFIG_SMSC_PHY=y
CONFIG_STE10XP=y
CONFIG_TERANETICS_PHY=y
CONFIG_DP83822_PHY=y
CONFIG_DP83TC811_PHY=y
CONFIG_DP83848_PHY=y
CONFIG_DP83867_PHY=y
CONFIG_DP83869_PHY=y
CONFIG_DP83TD510_PHY=y
CONFIG_VITESSE_PHY=y
CONFIG_XILINX_GMII2RGMII=y
CONFIG_MICREL_KS8995MA=y
CONFIG_PSE_CONTROLLER=y
CONFIG_PSE_REGULATOR=y
CONFIG_CAN_DEV=y
CONFIG_CAN_VCAN=y
CONFIG_CAN_VXCAN=y
CONFIG_CAN_NETLINK=y
CONFIG_CAN_CALC_BITTIMING=y
CONFIG_CAN_RX_OFFLOAD=y
CONFIG_CAN_CAN327=y
CONFIG_CAN_FLEXCAN=y
CONFIG_CAN_GRCAN=y
CONFIG_CAN_JANZ_ICAN3=y
CONFIG_CAN_KVASER_PCIEFD=y
CONFIG_CAN_SLCAN=y
CONFIG_CAN_C_CAN=y
CONFIG_CAN_C_CAN_PLATFORM=y
CONFIG_CAN_C_CAN_PCI=y
CONFIG_CAN_CC770=y
CONFIG_CAN_CC770_ISA=y
CONFIG_CAN_CC770_PLATFORM=y
CONFIG_CAN_CTUCANFD=y
CONFIG_CAN_CTUCANFD_PCI=y
CONFIG_CAN_CTUCANFD_PLATFORM=y
CONFIG_CAN_IFI_CANFD=y
CONFIG_CAN_M_CAN=y
CONFIG_CAN_M_CAN_PCI=y
CONFIG_CAN_M_CAN_PLATFORM=y
CONFIG_CAN_M_CAN_TCAN4X5X=y
CONFIG_CAN_PEAK_PCIEFD=y
CONFIG_CAN_SJA1000=y
CONFIG_CAN_EMS_PCI=y
CONFIG_CAN_EMS_PCMCIA=y
CONFIG_CAN_F81601=y
CONFIG_CAN_KVASER_PCI=y
CONFIG_CAN_PEAK_PCI=y
CONFIG_CAN_PEAK_PCIEC=y
CONFIG_CAN_PEAK_PCMCIA=y
CONFIG_CAN_PLX_PCI=y
CONFIG_CAN_SJA1000_ISA=y
CONFIG_CAN_SJA1000_PLATFORM=y
CONFIG_CAN_SOFTING=y
CONFIG_CAN_SOFTING_CS=y

#
# CAN SPI interfaces
#
CONFIG_CAN_HI311X=y
CONFIG_CAN_MCP251X=y
CONFIG_CAN_MCP251XFD=y
CONFIG_CAN_MCP251XFD_SANITY=y
# end of CAN SPI interfaces

#
# CAN USB interfaces
#
CONFIG_CAN_8DEV_USB=y
CONFIG_CAN_EMS_USB=y
CONFIG_CAN_ESD_USB=y
CONFIG_CAN_ETAS_ES58X=y
CONFIG_CAN_GS_USB=y
CONFIG_CAN_KVASER_USB=y
CONFIG_CAN_MCBA_USB=y
CONFIG_CAN_PEAK_USB=y
CONFIG_CAN_UCAN=y
# end of CAN USB interfaces

# CONFIG_CAN_DEBUG_DEVICES is not set

#
# MCTP Device Drivers
#
CONFIG_MCTP_SERIAL=y
CONFIG_MCTP_TRANSPORT_I2C=y
# end of MCTP Device Drivers

CONFIG_MDIO_DEVICE=y
CONFIG_MDIO_BUS=y
CONFIG_FWNODE_MDIO=y
CONFIG_OF_MDIO=y
CONFIG_ACPI_MDIO=y
CONFIG_MDIO_DEVRES=y
CONFIG_MDIO_BITBANG=y
CONFIG_MDIO_BCM_UNIMAC=y
CONFIG_MDIO_CAVIUM=y
CONFIG_MDIO_GPIO=y
CONFIG_MDIO_HISI_FEMAC=y
CONFIG_MDIO_I2C=y
CONFIG_MDIO_MVUSB=y
CONFIG_MDIO_MSCC_MIIM=y
CONFIG_MDIO_OCTEON=y
CONFIG_MDIO_IPQ4019=y
CONFIG_MDIO_IPQ8064=y
CONFIG_MDIO_THUNDER=y

#
# MDIO Multiplexers
#
CONFIG_MDIO_BUS_MUX=y
CONFIG_MDIO_BUS_MUX_GPIO=y
CONFIG_MDIO_BUS_MUX_MULTIPLEXER=y
CONFIG_MDIO_BUS_MUX_MMIOREG=y

#
# PCS device drivers
#
CONFIG_PCS_XPCS=y
CONFIG_PCS_LYNX=y
CONFIG_PCS_ALTERA_TSE=y
# end of PCS device drivers

CONFIG_PLIP=y
CONFIG_PPP=y
CONFIG_PPP_BSDCOMP=y
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_MPPE=y
CONFIG_PPP_MULTILINK=y
CONFIG_PPPOATM=y
CONFIG_PPPOE=y
CONFIG_PPTP=y
CONFIG_PPPOL2TP=y
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
CONFIG_SLIP=y
CONFIG_SLHC=y
CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP_SMART=y
CONFIG_SLIP_MODE_SLIP6=y
CONFIG_USB_NET_DRIVERS=y
CONFIG_USB_CATC=y
CONFIG_USB_KAWETH=y
CONFIG_USB_PEGASUS=y
CONFIG_USB_RTL8150=y
CONFIG_USB_RTL8152=y
CONFIG_USB_LAN78XX=y
CONFIG_USB_USBNET=y
CONFIG_USB_NET_AX8817X=y
CONFIG_USB_NET_AX88179_178A=y
CONFIG_USB_NET_CDCETHER=y
CONFIG_USB_NET_CDC_EEM=y
CONFIG_USB_NET_CDC_NCM=y
CONFIG_USB_NET_HUAWEI_CDC_NCM=y
CONFIG_USB_NET_CDC_MBIM=y
CONFIG_USB_NET_DM9601=y
CONFIG_USB_NET_SR9700=y
CONFIG_USB_NET_SR9800=y
CONFIG_USB_NET_SMSC75XX=y
CONFIG_USB_NET_SMSC95XX=y
CONFIG_USB_NET_GL620A=y
CONFIG_USB_NET_NET1080=y
CONFIG_USB_NET_PLUSB=y
CONFIG_USB_NET_MCS7830=y
CONFIG_USB_NET_RNDIS_HOST=y
CONFIG_USB_NET_CDC_SUBSET_ENABLE=y
CONFIG_USB_NET_CDC_SUBSET=y
CONFIG_USB_ALI_M5632=y
CONFIG_USB_AN2720=y
CONFIG_USB_BELKIN=y
CONFIG_USB_ARMLINUX=y
CONFIG_USB_EPSON2888=y
CONFIG_USB_KC2190=y
CONFIG_USB_NET_ZAURUS=y
CONFIG_USB_NET_CX82310_ETH=y
CONFIG_USB_NET_KALMIA=y
CONFIG_USB_NET_QMI_WWAN=y
CONFIG_USB_HSO=y
CONFIG_USB_NET_INT51X1=y
CONFIG_USB_CDC_PHONET=y
CONFIG_USB_IPHETH=y
CONFIG_USB_SIERRA_NET=y
CONFIG_USB_VL600=y
CONFIG_USB_NET_CH9200=y
CONFIG_USB_NET_AQC111=y
CONFIG_USB_RTL8153_ECM=y
CONFIG_WLAN=y
CONFIG_WLAN_VENDOR_ADMTEK=y
CONFIG_ADM8211=y
CONFIG_ATH_COMMON=y
CONFIG_WLAN_VENDOR_ATH=y
CONFIG_ATH_DEBUG=y
CONFIG_ATH_TRACEPOINTS=y
CONFIG_ATH_REG_DYNAMIC_USER_REG_HINTS=y
CONFIG_ATH_REG_DYNAMIC_USER_CERT_TESTING=y
CONFIG_ATH5K=y
CONFIG_ATH5K_DEBUG=y
CONFIG_ATH5K_TRACER=y
CONFIG_ATH5K_PCI=y
# CONFIG_ATH5K_TEST_CHANNELS is not set
CONFIG_ATH9K_HW=y
CONFIG_ATH9K_COMMON=y
CONFIG_ATH9K_COMMON_DEBUG=y
CONFIG_ATH9K_DFS_DEBUGFS=y
CONFIG_ATH9K_BTCOEX_SUPPORT=y
CONFIG_ATH9K=y
CONFIG_ATH9K_PCI=y
CONFIG_ATH9K_AHB=y
CONFIG_ATH9K_DEBUGFS=y
CONFIG_ATH9K_STATION_STATISTICS=y
CONFIG_ATH9K_TX99=y
CONFIG_ATH9K_DFS_CERTIFIED=y
CONFIG_ATH9K_DYNACK=y
CONFIG_ATH9K_WOW=y
CONFIG_ATH9K_RFKILL=y
CONFIG_ATH9K_CHANNEL_CONTEXT=y
CONFIG_ATH9K_PCOEM=y
CONFIG_ATH9K_PCI_NO_EEPROM=y
CONFIG_ATH9K_HTC=y
CONFIG_ATH9K_HTC_DEBUGFS=y
CONFIG_ATH9K_HWRNG=y
CONFIG_ATH9K_COMMON_SPECTRAL=y
CONFIG_CARL9170=y
CONFIG_CARL9170_LEDS=y
CONFIG_CARL9170_DEBUGFS=y
CONFIG_CARL9170_WPC=y
CONFIG_CARL9170_HWRNG=y
CONFIG_ATH6KL=y
CONFIG_ATH6KL_SDIO=y
CONFIG_ATH6KL_USB=y
CONFIG_ATH6KL_DEBUG=y
CONFIG_ATH6KL_TRACING=y
CONFIG_ATH6KL_REGDOMAIN=y
CONFIG_AR5523=y
CONFIG_WIL6210=y
CONFIG_WIL6210_ISR_COR=y
CONFIG_WIL6210_TRACING=y
CONFIG_WIL6210_DEBUGFS=y
CONFIG_ATH10K=y
CONFIG_ATH10K_CE=y
CONFIG_ATH10K_PCI=y
CONFIG_ATH10K_AHB=y
CONFIG_ATH10K_SDIO=y
CONFIG_ATH10K_USB=y
CONFIG_ATH10K_DEBUG=y
CONFIG_ATH10K_DEBUGFS=y
CONFIG_ATH10K_SPECTRAL=y
CONFIG_ATH10K_TRACING=y
CONFIG_ATH10K_DFS_CERTIFIED=y
CONFIG_WCN36XX=y
CONFIG_WCN36XX_DEBUGFS=y
CONFIG_ATH11K=y
CONFIG_ATH11K_AHB=y
CONFIG_ATH11K_PCI=y
CONFIG_ATH11K_DEBUG=y
CONFIG_ATH11K_DEBUGFS=y
CONFIG_ATH11K_TRACING=y
CONFIG_ATH11K_SPECTRAL=y
CONFIG_WLAN_VENDOR_ATMEL=y
CONFIG_ATMEL=y
CONFIG_PCI_ATMEL=y
CONFIG_PCMCIA_ATMEL=y
CONFIG_AT76C50X_USB=y
CONFIG_WLAN_VENDOR_BROADCOM=y
CONFIG_B43=y
CONFIG_B43_BCMA=y
CONFIG_B43_SSB=y
CONFIG_B43_BUSES_BCMA_AND_SSB=y
# CONFIG_B43_BUSES_BCMA is not set
# CONFIG_B43_BUSES_SSB is not set
CONFIG_B43_PCI_AUTOSELECT=y
CONFIG_B43_PCICORE_AUTOSELECT=y
CONFIG_B43_SDIO=y
CONFIG_B43_BCMA_PIO=y
CONFIG_B43_PIO=y
CONFIG_B43_PHY_G=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_HT=y
CONFIG_B43_LEDS=y
CONFIG_B43_HWRNG=y
CONFIG_B43_DEBUG=y
CONFIG_B43LEGACY=y
CONFIG_B43LEGACY_PCI_AUTOSELECT=y
CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
CONFIG_B43LEGACY_LEDS=y
CONFIG_B43LEGACY_HWRNG=y
CONFIG_B43LEGACY_DEBUG=y
CONFIG_B43LEGACY_DMA=y
CONFIG_B43LEGACY_PIO=y
CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
# CONFIG_B43LEGACY_DMA_MODE is not set
# CONFIG_B43LEGACY_PIO_MODE is not set
CONFIG_BRCMUTIL=y
CONFIG_BRCMSMAC=y
CONFIG_BRCMSMAC_LEDS=y
CONFIG_BRCMFMAC=y
CONFIG_BRCMFMAC_PROTO_BCDC=y
CONFIG_BRCMFMAC_PROTO_MSGBUF=y
CONFIG_BRCMFMAC_SDIO=y
CONFIG_BRCMFMAC_USB=y
CONFIG_BRCMFMAC_PCIE=y
CONFIG_BRCM_TRACING=y
CONFIG_BRCMDBG=y
CONFIG_WLAN_VENDOR_CISCO=y
CONFIG_AIRO=y
CONFIG_AIRO_CS=y
CONFIG_WLAN_VENDOR_INTEL=y
CONFIG_IPW2100=y
CONFIG_IPW2100_MONITOR=y
CONFIG_IPW2100_DEBUG=y
CONFIG_IPW2200=y
CONFIG_IPW2200_MONITOR=y
CONFIG_IPW2200_RADIOTAP=y
CONFIG_IPW2200_PROMISCUOUS=y
CONFIG_IPW2200_QOS=y
CONFIG_IPW2200_DEBUG=y
CONFIG_LIBIPW=y
CONFIG_LIBIPW_DEBUG=y
CONFIG_IWLEGACY=y
CONFIG_IWL4965=y
CONFIG_IWL3945=y

#
# iwl3945 / iwl4965 Debugging Options
#
CONFIG_IWLEGACY_DEBUG=y
CONFIG_IWLEGACY_DEBUGFS=y
# end of iwl3945 / iwl4965 Debugging Options

CONFIG_IWLWIFI=y
CONFIG_IWLWIFI_LEDS=y
CONFIG_IWLDVM=y
CONFIG_IWLMVM=y

#
# Debugging Options
#
CONFIG_IWLWIFI_DEBUG=y
CONFIG_IWLWIFI_DEBUGFS=y
CONFIG_IWLWIFI_DEVICE_TRACING=y
# end of Debugging Options

CONFIG_WLAN_VENDOR_INTERSIL=y
CONFIG_HOSTAP=y
CONFIG_HOSTAP_FIRMWARE=y
CONFIG_HOSTAP_FIRMWARE_NVRAM=y
CONFIG_HOSTAP_PLX=y
CONFIG_HOSTAP_PCI=y
CONFIG_HOSTAP_CS=y
CONFIG_HERMES=y
CONFIG_HERMES_PRISM=y
CONFIG_HERMES_CACHE_FW_ON_INIT=y
CONFIG_PLX_HERMES=y
CONFIG_TMD_HERMES=y
CONFIG_NORTEL_HERMES=y
CONFIG_PCI_HERMES=y
CONFIG_PCMCIA_HERMES=y
CONFIG_PCMCIA_SPECTRUM=y
CONFIG_ORINOCO_USB=y
CONFIG_P54_COMMON=y
CONFIG_P54_USB=y
CONFIG_P54_PCI=y
CONFIG_P54_SPI=y
CONFIG_P54_SPI_DEFAULT_EEPROM=y
CONFIG_P54_LEDS=y
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_LIBERTAS=y
CONFIG_LIBERTAS_USB=y
CONFIG_LIBERTAS_CS=y
CONFIG_LIBERTAS_SDIO=y
CONFIG_LIBERTAS_SPI=y
CONFIG_LIBERTAS_DEBUG=y
CONFIG_LIBERTAS_MESH=y
CONFIG_LIBERTAS_THINFIRM=y
CONFIG_LIBERTAS_THINFIRM_DEBUG=y
CONFIG_LIBERTAS_THINFIRM_USB=y
CONFIG_MWIFIEX=y
CONFIG_MWIFIEX_SDIO=y
CONFIG_MWIFIEX_PCIE=y
CONFIG_MWIFIEX_USB=y
CONFIG_MWL8K=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_MT7601U=y
CONFIG_MT76_CORE=y
CONFIG_MT76_LEDS=y
CONFIG_MT76_USB=y
CONFIG_MT76_SDIO=y
CONFIG_MT76x02_LIB=y
CONFIG_MT76x02_USB=y
CONFIG_MT76_CONNAC_LIB=y
CONFIG_MT76x0_COMMON=y
CONFIG_MT76x0U=y
CONFIG_MT76x0E=y
CONFIG_MT76x2_COMMON=y
CONFIG_MT76x2E=y
CONFIG_MT76x2U=y
CONFIG_MT7603E=y
CONFIG_MT7615_COMMON=y
CONFIG_MT7615E=y
CONFIG_MT7663_USB_SDIO_COMMON=y
CONFIG_MT7663U=y
CONFIG_MT7663S=y
CONFIG_MT7915E=y
CONFIG_MT7921_COMMON=y
CONFIG_MT7921E=y
CONFIG_MT7921S=y
CONFIG_MT7921U=y
CONFIG_MT7996E=y
CONFIG_WLAN_VENDOR_MICROCHIP=y
CONFIG_WILC1000=y
CONFIG_WILC1000_SDIO=y
CONFIG_WILC1000_SPI=y
CONFIG_WILC1000_HW_OOB_INTR=y
CONFIG_WLAN_VENDOR_PURELIFI=y
CONFIG_PLFXLC=y
CONFIG_WLAN_VENDOR_RALINK=y
CONFIG_RT2X00=y
CONFIG_RT2400PCI=y
CONFIG_RT2500PCI=y
CONFIG_RT61PCI=y
CONFIG_RT2800PCI=y
CONFIG_RT2800PCI_RT33XX=y
CONFIG_RT2800PCI_RT35XX=y
CONFIG_RT2800PCI_RT53XX=y
CONFIG_RT2800PCI_RT3290=y
CONFIG_RT2500USB=y
CONFIG_RT73USB=y
CONFIG_RT2800USB=y
CONFIG_RT2800USB_RT33XX=y
CONFIG_RT2800USB_RT35XX=y
CONFIG_RT2800USB_RT3573=y
CONFIG_RT2800USB_RT53XX=y
CONFIG_RT2800USB_RT55XX=y
CONFIG_RT2800USB_UNKNOWN=y
CONFIG_RT2800_LIB=y
CONFIG_RT2800_LIB_MMIO=y
CONFIG_RT2X00_LIB_MMIO=y
CONFIG_RT2X00_LIB_PCI=y
CONFIG_RT2X00_LIB_USB=y
CONFIG_RT2X00_LIB=y
CONFIG_RT2X00_LIB_FIRMWARE=y
CONFIG_RT2X00_LIB_CRYPTO=y
CONFIG_RT2X00_LIB_LEDS=y
CONFIG_RT2X00_LIB_DEBUGFS=y
CONFIG_RT2X00_DEBUG=y
CONFIG_WLAN_VENDOR_REALTEK=y
CONFIG_RTL8180=y
CONFIG_RTL8187=y
CONFIG_RTL8187_LEDS=y
CONFIG_RTL_CARDS=y
CONFIG_RTL8192CE=y
CONFIG_RTL8192SE=y
CONFIG_RTL8192DE=y
CONFIG_RTL8723AE=y
CONFIG_RTL8723BE=y
CONFIG_RTL8188EE=y
CONFIG_RTL8192EE=y
CONFIG_RTL8821AE=y
CONFIG_RTL8192CU=y
CONFIG_RTLWIFI=y
CONFIG_RTLWIFI_PCI=y
CONFIG_RTLWIFI_USB=y
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTL8192C_COMMON=y
CONFIG_RTL8723_COMMON=y
CONFIG_RTLBTCOEXIST=y
CONFIG_RTL8XXXU=y
CONFIG_RTL8XXXU_UNTESTED=y
CONFIG_RTW88=y
CONFIG_RTW88_CORE=y
CONFIG_RTW88_PCI=y
CONFIG_RTW88_USB=y
CONFIG_RTW88_8822B=y
CONFIG_RTW88_8822C=y
CONFIG_RTW88_8723D=y
CONFIG_RTW88_8821C=y
CONFIG_RTW88_8822BE=y
CONFIG_RTW88_8822BU=y
CONFIG_RTW88_8822CE=y
CONFIG_RTW88_8822CU=y
CONFIG_RTW88_8723DE=y
CONFIG_RTW88_8723DU=y
CONFIG_RTW88_8821CE=y
CONFIG_RTW88_8821CU=y
CONFIG_RTW88_DEBUG=y
CONFIG_RTW88_DEBUGFS=y
CONFIG_RTW89=y
CONFIG_RTW89_CORE=y
CONFIG_RTW89_PCI=y
CONFIG_RTW89_8852A=y
CONFIG_RTW89_8852B=y
CONFIG_RTW89_8852C=y
CONFIG_RTW89_8852AE=y
CONFIG_RTW89_8852BE=y
CONFIG_RTW89_8852CE=y
CONFIG_RTW89_DEBUG=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89_DEBUGFS=y
CONFIG_WLAN_VENDOR_RSI=y
CONFIG_RSI_91X=y
CONFIG_RSI_DEBUGFS=y
CONFIG_RSI_SDIO=y
CONFIG_RSI_USB=y
CONFIG_RSI_COEX=y
CONFIG_WLAN_VENDOR_SILABS=y
CONFIG_WFX=y
CONFIG_WLAN_VENDOR_ST=y
CONFIG_CW1200=y
CONFIG_CW1200_WLAN_SDIO=y
CONFIG_CW1200_WLAN_SPI=y
CONFIG_WLAN_VENDOR_TI=y
CONFIG_WL1251=y
CONFIG_WL1251_SPI=y
CONFIG_WL1251_SDIO=y
CONFIG_WL12XX=y
CONFIG_WL18XX=y
CONFIG_WLCORE=y
CONFIG_WLCORE_SPI=y
CONFIG_WLCORE_SDIO=y
CONFIG_WLAN_VENDOR_ZYDAS=y
CONFIG_USB_ZD1201=y
CONFIG_ZD1211RW=y
CONFIG_ZD1211RW_DEBUG=y
CONFIG_WLAN_VENDOR_QUANTENNA=y
CONFIG_QTNFMAC=y
CONFIG_QTNFMAC_PCIE=y
CONFIG_PCMCIA_RAYCS=y
CONFIG_PCMCIA_WL3501=y
CONFIG_MAC80211_HWSIM=y
CONFIG_USB_NET_RNDIS_WLAN=y
CONFIG_VIRT_WIFI=y
CONFIG_WAN=y
CONFIG_HDLC=y
CONFIG_HDLC_RAW=y
CONFIG_HDLC_RAW_ETH=y
CONFIG_HDLC_CISCO=y
CONFIG_HDLC_FR=y
CONFIG_HDLC_PPP=y
CONFIG_HDLC_X25=y
CONFIG_PCI200SYN=y
CONFIG_WANXL=y
CONFIG_PC300TOO=y
CONFIG_FARSYNC=y
CONFIG_LAPBETHER=y
CONFIG_IEEE802154_DRIVERS=y
CONFIG_IEEE802154_FAKELB=y
CONFIG_IEEE802154_AT86RF230=y
CONFIG_IEEE802154_MRF24J40=y
CONFIG_IEEE802154_CC2520=y
CONFIG_IEEE802154_ATUSB=y
CONFIG_IEEE802154_ADF7242=y
CONFIG_IEEE802154_CA8210=y
CONFIG_IEEE802154_CA8210_DEBUGFS=y
CONFIG_IEEE802154_MCR20A=y
CONFIG_IEEE802154_HWSIM=y

#
# Wireless WAN
#
CONFIG_WWAN=y
CONFIG_WWAN_DEBUGFS=y
CONFIG_WWAN_HWSIM=y
CONFIG_MHI_WWAN_CTRL=y
CONFIG_MHI_WWAN_MBIM=y
CONFIG_RPMSG_WWAN_CTRL=y
CONFIG_IOSM=y
CONFIG_MTK_T7XX=y
# end of Wireless WAN

CONFIG_XEN_NETDEV_FRONTEND=y
CONFIG_XEN_NETDEV_BACKEND=y
CONFIG_VMXNET3=y
CONFIG_FUJITSU_ES=y
CONFIG_USB4_NET=y
CONFIG_HYPERV_NET=y
CONFIG_NETDEVSIM=y
CONFIG_NET_FAILOVER=y
CONFIG_ISDN=y
CONFIG_ISDN_CAPI=y
CONFIG_CAPI_TRACE=y
CONFIG_ISDN_CAPI_MIDDLEWARE=y
CONFIG_MISDN=y
CONFIG_MISDN_DSP=y
CONFIG_MISDN_L1OIP=y

#
# mISDN hardware drivers
#
CONFIG_MISDN_HFCPCI=y
CONFIG_MISDN_HFCMULTI=y
CONFIG_MISDN_HFCUSB=y
CONFIG_MISDN_AVMFRITZ=y
CONFIG_MISDN_SPEEDFAX=y
CONFIG_MISDN_INFINEON=y
CONFIG_MISDN_W6692=y
CONFIG_MISDN_NETJET=y
CONFIG_MISDN_HDLC=y
CONFIG_MISDN_IPAC=y
CONFIG_MISDN_ISAR=y

#
# Input device support
#
CONFIG_INPUT=y
CONFIG_INPUT_LEDS=y
CONFIG_INPUT_FF_MEMLESS=y
CONFIG_INPUT_SPARSEKMAP=y
CONFIG_INPUT_MATRIXKMAP=y
CONFIG_INPUT_VIVALDIFMAP=y

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_JOYDEV=y
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_EVBUG=y

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ADC=y
CONFIG_KEYBOARD_ADP5520=y
CONFIG_KEYBOARD_ADP5588=y
CONFIG_KEYBOARD_ADP5589=y
CONFIG_KEYBOARD_APPLESPI=y
CONFIG_KEYBOARD_ATKBD=y
CONFIG_KEYBOARD_QT1050=y
CONFIG_KEYBOARD_QT1070=y
CONFIG_KEYBOARD_QT2160=y
CONFIG_KEYBOARD_DLINK_DIR685=y
CONFIG_KEYBOARD_LKKBD=y
CONFIG_KEYBOARD_GPIO=y
CONFIG_KEYBOARD_GPIO_POLLED=y
CONFIG_KEYBOARD_TCA6416=y
CONFIG_KEYBOARD_TCA8418=y
CONFIG_KEYBOARD_MATRIX=y
CONFIG_KEYBOARD_LM8323=y
CONFIG_KEYBOARD_LM8333=y
CONFIG_KEYBOARD_MAX7359=y
CONFIG_KEYBOARD_MCS=y
CONFIG_KEYBOARD_MPR121=y
CONFIG_KEYBOARD_NEWTON=y
CONFIG_KEYBOARD_OPENCORES=y
CONFIG_KEYBOARD_PINEPHONE=y
CONFIG_KEYBOARD_SAMSUNG=y
CONFIG_KEYBOARD_GOLDFISH_EVENTS=y
CONFIG_KEYBOARD_STOWAWAY=y
CONFIG_KEYBOARD_SUNKBD=y
CONFIG_KEYBOARD_STMPE=y
CONFIG_KEYBOARD_IQS62X=y
CONFIG_KEYBOARD_OMAP4=y
CONFIG_KEYBOARD_TC3589X=y
CONFIG_KEYBOARD_TM2_TOUCHKEY=y
CONFIG_KEYBOARD_TWL4030=y
CONFIG_KEYBOARD_XTKBD=y
CONFIG_KEYBOARD_CROS_EC=y
CONFIG_KEYBOARD_CAP11XX=y
CONFIG_KEYBOARD_BCM=y
CONFIG_KEYBOARD_MTK_PMIC=y
CONFIG_KEYBOARD_CYPRESS_SF=y
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
CONFIG_MOUSE_PS2_ALPS=y
CONFIG_MOUSE_PS2_BYD=y
CONFIG_MOUSE_PS2_LOGIPS2PP=y
CONFIG_MOUSE_PS2_SYNAPTICS=y
CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y
CONFIG_MOUSE_PS2_CYPRESS=y
CONFIG_MOUSE_PS2_LIFEBOOK=y
CONFIG_MOUSE_PS2_TRACKPOINT=y
CONFIG_MOUSE_PS2_ELANTECH=y
CONFIG_MOUSE_PS2_ELANTECH_SMBUS=y
CONFIG_MOUSE_PS2_SENTELIC=y
CONFIG_MOUSE_PS2_TOUCHKIT=y
CONFIG_MOUSE_PS2_FOCALTECH=y
CONFIG_MOUSE_PS2_VMMOUSE=y
CONFIG_MOUSE_PS2_SMBUS=y
CONFIG_MOUSE_SERIAL=y
CONFIG_MOUSE_APPLETOUCH=y
CONFIG_MOUSE_BCM5974=y
CONFIG_MOUSE_CYAPA=y
CONFIG_MOUSE_ELAN_I2C=y
CONFIG_MOUSE_ELAN_I2C_I2C=y
CONFIG_MOUSE_ELAN_I2C_SMBUS=y
CONFIG_MOUSE_VSXXXAA=y
CONFIG_MOUSE_GPIO=y
CONFIG_MOUSE_SYNAPTICS_I2C=y
CONFIG_MOUSE_SYNAPTICS_USB=y
CONFIG_INPUT_JOYSTICK=y
CONFIG_JOYSTICK_ANALOG=y
CONFIG_JOYSTICK_A3D=y
CONFIG_JOYSTICK_ADC=y
CONFIG_JOYSTICK_ADI=y
CONFIG_JOYSTICK_COBRA=y
CONFIG_JOYSTICK_GF2K=y
CONFIG_JOYSTICK_GRIP=y
CONFIG_JOYSTICK_GRIP_MP=y
CONFIG_JOYSTICK_GUILLEMOT=y
CONFIG_JOYSTICK_INTERACT=y
CONFIG_JOYSTICK_SIDEWINDER=y
CONFIG_JOYSTICK_TMDC=y
CONFIG_JOYSTICK_IFORCE=y
CONFIG_JOYSTICK_IFORCE_USB=y
CONFIG_JOYSTICK_IFORCE_232=y
CONFIG_JOYSTICK_WARRIOR=y
CONFIG_JOYSTICK_MAGELLAN=y
CONFIG_JOYSTICK_SPACEORB=y
CONFIG_JOYSTICK_SPACEBALL=y
CONFIG_JOYSTICK_STINGER=y
CONFIG_JOYSTICK_TWIDJOY=y
CONFIG_JOYSTICK_ZHENHUA=y
CONFIG_JOYSTICK_DB9=y
CONFIG_JOYSTICK_GAMECON=y
CONFIG_JOYSTICK_TURBOGRAFX=y
CONFIG_JOYSTICK_AS5011=y
CONFIG_JOYSTICK_JOYDUMP=y
CONFIG_JOYSTICK_XPAD=y
CONFIG_JOYSTICK_XPAD_FF=y
CONFIG_JOYSTICK_XPAD_LEDS=y
CONFIG_JOYSTICK_WALKERA0701=y
CONFIG_JOYSTICK_PSXPAD_SPI=y
CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PXRC=y
CONFIG_JOYSTICK_QWIIC=y
CONFIG_JOYSTICK_FSIA6B=y
CONFIG_JOYSTICK_SENSEHAT=y
CONFIG_INPUT_TABLET=y
CONFIG_TABLET_USB_ACECAD=y
CONFIG_TABLET_USB_AIPTEK=y
CONFIG_TABLET_USB_HANWANG=y
CONFIG_TABLET_USB_KBTAB=y
CONFIG_TABLET_USB_PEGASUS=y
CONFIG_TABLET_SERIAL_WACOM4=y
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_88PM860X=y
CONFIG_TOUCHSCREEN_ADS7846=y
CONFIG_TOUCHSCREEN_AD7877=y
CONFIG_TOUCHSCREEN_AD7879=y
CONFIG_TOUCHSCREEN_AD7879_I2C=y
CONFIG_TOUCHSCREEN_AD7879_SPI=y
CONFIG_TOUCHSCREEN_ADC=y
CONFIG_TOUCHSCREEN_AR1021_I2C=y
CONFIG_TOUCHSCREEN_ATMEL_MXT=y
CONFIG_TOUCHSCREEN_ATMEL_MXT_T37=y
CONFIG_TOUCHSCREEN_AUO_PIXCIR=y
CONFIG_TOUCHSCREEN_BU21013=y
CONFIG_TOUCHSCREEN_BU21029=y
CONFIG_TOUCHSCREEN_CHIPONE_ICN8318=y
CONFIG_TOUCHSCREEN_CHIPONE_ICN8505=y
CONFIG_TOUCHSCREEN_CY8CTMA140=y
CONFIG_TOUCHSCREEN_CY8CTMG110=y
CONFIG_TOUCHSCREEN_CYTTSP_CORE=y
CONFIG_TOUCHSCREEN_CYTTSP_I2C=y
CONFIG_TOUCHSCREEN_CYTTSP_SPI=y
CONFIG_TOUCHSCREEN_CYTTSP4_CORE=y
CONFIG_TOUCHSCREEN_CYTTSP4_I2C=y
CONFIG_TOUCHSCREEN_CYTTSP4_SPI=y
CONFIG_TOUCHSCREEN_DA9034=y
CONFIG_TOUCHSCREEN_DA9052=y
CONFIG_TOUCHSCREEN_DYNAPRO=y
CONFIG_TOUCHSCREEN_HAMPSHIRE=y
CONFIG_TOUCHSCREEN_EETI=y
CONFIG_TOUCHSCREEN_EGALAX=y
CONFIG_TOUCHSCREEN_EGALAX_SERIAL=y
CONFIG_TOUCHSCREEN_EXC3000=y
CONFIG_TOUCHSCREEN_FUJITSU=y
CONFIG_TOUCHSCREEN_GOODIX=y
CONFIG_TOUCHSCREEN_HIDEEP=y
CONFIG_TOUCHSCREEN_HYCON_HY46XX=y
CONFIG_TOUCHSCREEN_ILI210X=y
CONFIG_TOUCHSCREEN_ILITEK=y
CONFIG_TOUCHSCREEN_S6SY761=y
CONFIG_TOUCHSCREEN_GUNZE=y
CONFIG_TOUCHSCREEN_EKTF2127=y
CONFIG_TOUCHSCREEN_ELAN=y
CONFIG_TOUCHSCREEN_ELO=y
CONFIG_TOUCHSCREEN_WACOM_W8001=y
CONFIG_TOUCHSCREEN_WACOM_I2C=y
CONFIG_TOUCHSCREEN_MAX11801=y
CONFIG_TOUCHSCREEN_MCS5000=y
CONFIG_TOUCHSCREEN_MMS114=y
CONFIG_TOUCHSCREEN_MELFAS_MIP4=y
CONFIG_TOUCHSCREEN_MSG2638=y
CONFIG_TOUCHSCREEN_MTOUCH=y
CONFIG_TOUCHSCREEN_IMAGIS=y
CONFIG_TOUCHSCREEN_IMX6UL_TSC=y
CONFIG_TOUCHSCREEN_INEXIO=y
CONFIG_TOUCHSCREEN_MK712=y
CONFIG_TOUCHSCREEN_PENMOUNT=y
CONFIG_TOUCHSCREEN_EDT_FT5X06=y
CONFIG_TOUCHSCREEN_TOUCHRIGHT=y
CONFIG_TOUCHSCREEN_TOUCHWIN=y
CONFIG_TOUCHSCREEN_TI_AM335X_TSC=y
CONFIG_TOUCHSCREEN_UCB1400=y
CONFIG_TOUCHSCREEN_PIXCIR=y
CONFIG_TOUCHSCREEN_WDT87XX_I2C=y
CONFIG_TOUCHSCREEN_WM831X=y
CONFIG_TOUCHSCREEN_WM97XX=y
CONFIG_TOUCHSCREEN_WM9705=y
CONFIG_TOUCHSCREEN_WM9712=y
CONFIG_TOUCHSCREEN_WM9713=y
CONFIG_TOUCHSCREEN_USB_COMPOSITE=y
CONFIG_TOUCHSCREEN_MC13783=y
CONFIG_TOUCHSCREEN_USB_EGALAX=y
CONFIG_TOUCHSCREEN_USB_PANJIT=y
CONFIG_TOUCHSCREEN_USB_3M=y
CONFIG_TOUCHSCREEN_USB_ITM=y
CONFIG_TOUCHSCREEN_USB_ETURBO=y
CONFIG_TOUCHSCREEN_USB_GUNZE=y
CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
CONFIG_TOUCHSCREEN_USB_GOTOP=y
CONFIG_TOUCHSCREEN_USB_JASTEC=y
CONFIG_TOUCHSCREEN_USB_ELO=y
CONFIG_TOUCHSCREEN_USB_E2I=y
CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
CONFIG_TOUCHSCREEN_USB_NEXIO=y
CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y
CONFIG_TOUCHSCREEN_TOUCHIT213=y
CONFIG_TOUCHSCREEN_TSC_SERIO=y
CONFIG_TOUCHSCREEN_TSC200X_CORE=y
CONFIG_TOUCHSCREEN_TSC2004=y
CONFIG_TOUCHSCREEN_TSC2005=y
CONFIG_TOUCHSCREEN_TSC2007=y
CONFIG_TOUCHSCREEN_TSC2007_IIO=y
CONFIG_TOUCHSCREEN_PCAP=y
CONFIG_TOUCHSCREEN_RM_TS=y
CONFIG_TOUCHSCREEN_SILEAD=y
CONFIG_TOUCHSCREEN_SIS_I2C=y
CONFIG_TOUCHSCREEN_ST1232=y
CONFIG_TOUCHSCREEN_STMFTS=y
CONFIG_TOUCHSCREEN_STMPE=y
CONFIG_TOUCHSCREEN_SUR40=y
CONFIG_TOUCHSCREEN_SURFACE3_SPI=y
CONFIG_TOUCHSCREEN_SX8654=y
CONFIG_TOUCHSCREEN_TPS6507X=y
CONFIG_TOUCHSCREEN_ZET6223=y
CONFIG_TOUCHSCREEN_ZFORCE=y
CONFIG_TOUCHSCREEN_COLIBRI_VF50=y
CONFIG_TOUCHSCREEN_ROHM_BU21023=y
CONFIG_TOUCHSCREEN_IQS5XX=y
CONFIG_TOUCHSCREEN_ZINITIX=y
CONFIG_INPUT_MISC=y
CONFIG_INPUT_88PM860X_ONKEY=y
CONFIG_INPUT_88PM80X_ONKEY=y
CONFIG_INPUT_AD714X=y
CONFIG_INPUT_AD714X_I2C=y
CONFIG_INPUT_AD714X_SPI=y
CONFIG_INPUT_ARIZONA_HAPTICS=y
CONFIG_INPUT_ATC260X_ONKEY=y
CONFIG_INPUT_ATMEL_CAPTOUCH=y
CONFIG_INPUT_BMA150=y
CONFIG_INPUT_E3X0_BUTTON=y
CONFIG_INPUT_PCSPKR=y
CONFIG_INPUT_MAX77650_ONKEY=y
CONFIG_INPUT_MAX77693_HAPTIC=y
CONFIG_INPUT_MAX8925_ONKEY=y
CONFIG_INPUT_MAX8997_HAPTIC=y
CONFIG_INPUT_MC13783_PWRBUTTON=y
CONFIG_INPUT_MMA8450=y
CONFIG_INPUT_APANEL=y
CONFIG_INPUT_GPIO_BEEPER=y
CONFIG_INPUT_GPIO_DECODER=y
CONFIG_INPUT_GPIO_VIBRA=y
CONFIG_INPUT_CPCAP_PWRBUTTON=y
CONFIG_INPUT_ATLAS_BTNS=y
CONFIG_INPUT_ATI_REMOTE2=y
CONFIG_INPUT_KEYSPAN_REMOTE=y
CONFIG_INPUT_KXTJ9=y
CONFIG_INPUT_POWERMATE=y
CONFIG_INPUT_YEALINK=y
CONFIG_INPUT_CM109=y
CONFIG_INPUT_REGULATOR_HAPTIC=y
CONFIG_INPUT_RETU_PWRBUTTON=y
CONFIG_INPUT_TPS65218_PWRBUTTON=y
CONFIG_INPUT_AXP20X_PEK=y
CONFIG_INPUT_TWL4030_PWRBUTTON=y
CONFIG_INPUT_TWL4030_VIBRA=y
CONFIG_INPUT_TWL6040_VIBRA=y
CONFIG_INPUT_UINPUT=y
CONFIG_INPUT_PALMAS_PWRBUTTON=y
CONFIG_INPUT_PCF50633_PMU=y
CONFIG_INPUT_PCF8574=y
CONFIG_INPUT_PWM_BEEPER=y
CONFIG_INPUT_PWM_VIBRA=y
CONFIG_INPUT_RK805_PWRKEY=y
CONFIG_INPUT_GPIO_ROTARY_ENCODER=y
CONFIG_INPUT_DA7280_HAPTICS=y
CONFIG_INPUT_DA9052_ONKEY=y
CONFIG_INPUT_DA9055_ONKEY=y
CONFIG_INPUT_DA9063_ONKEY=y
CONFIG_INPUT_WM831X_ON=y
CONFIG_INPUT_PCAP=y
CONFIG_INPUT_ADXL34X=y
CONFIG_INPUT_ADXL34X_I2C=y
CONFIG_INPUT_ADXL34X_SPI=y
CONFIG_INPUT_IBM_PANEL=y
CONFIG_INPUT_IMS_PCU=y
CONFIG_INPUT_IQS269A=y
CONFIG_INPUT_IQS626A=y
CONFIG_INPUT_IQS7222=y
CONFIG_INPUT_CMA3000=y
CONFIG_INPUT_CMA3000_I2C=y
CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y
CONFIG_INPUT_IDEAPAD_SLIDEBAR=y
CONFIG_INPUT_SOC_BUTTON_ARRAY=y
CONFIG_INPUT_DRV260X_HAPTICS=y
CONFIG_INPUT_DRV2665_HAPTICS=y
CONFIG_INPUT_DRV2667_HAPTICS=y
CONFIG_INPUT_RAVE_SP_PWRBUTTON=y
CONFIG_INPUT_RT5120_PWRKEY=y
CONFIG_INPUT_STPMIC1_ONKEY=y
CONFIG_RMI4_CORE=y
CONFIG_RMI4_I2C=y
CONFIG_RMI4_SPI=y
CONFIG_RMI4_SMB=y
CONFIG_RMI4_F03=y
CONFIG_RMI4_F03_SERIO=y
CONFIG_RMI4_2D_SENSOR=y
CONFIG_RMI4_F11=y
CONFIG_RMI4_F12=y
CONFIG_RMI4_F30=y
CONFIG_RMI4_F34=y
CONFIG_RMI4_F3A=y
CONFIG_RMI4_F54=y
CONFIG_RMI4_F55=y

#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=y
CONFIG_SERIO_CT82C710=y
CONFIG_SERIO_PARKBD=y
CONFIG_SERIO_PCIPS2=y
CONFIG_SERIO_LIBPS2=y
CONFIG_SERIO_RAW=y
CONFIG_SERIO_ALTERA_PS2=y
CONFIG_SERIO_PS2MULT=y
CONFIG_SERIO_ARC_PS2=y
CONFIG_SERIO_APBPS2=y
CONFIG_HYPERV_KEYBOARD=y
CONFIG_SERIO_GPIO_PS2=y
CONFIG_USERIO=y
CONFIG_GAMEPORT=y
CONFIG_GAMEPORT_NS558=y
CONFIG_GAMEPORT_L4=y
CONFIG_GAMEPORT_EMU10K1=y
CONFIG_GAMEPORT_FM801=y
# end of Hardware I/O ports
# end of Input device support

#
# Character devices
#
CONFIG_TTY=y
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_VT_CONSOLE_SLEEP=y
CONFIG_HW_CONSOLE=y
CONFIG_VT_HW_CONSOLE_BINDING=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
CONFIG_LDISC_AUTOLOAD=y

#
# Serial drivers
#
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
CONFIG_SERIAL_8250_PNP=y
CONFIG_SERIAL_8250_16550A_VARIANTS=y
CONFIG_SERIAL_8250_FINTEK=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_EXAR=y
CONFIG_SERIAL_8250_CS=y
CONFIG_SERIAL_8250_MEN_MCB=y
CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_8250_DWLIB=y
CONFIG_SERIAL_8250_DW=y
CONFIG_SERIAL_8250_RT288X=y
CONFIG_SERIAL_8250_LPSS=y
CONFIG_SERIAL_8250_MID=y
CONFIG_SERIAL_8250_PERICOM=y
CONFIG_SERIAL_OF_PLATFORM=y

#
# Non-8250 serial port support
#
CONFIG_SERIAL_MAX3100=y
CONFIG_SERIAL_MAX310X=y
CONFIG_SERIAL_UARTLITE=y
CONFIG_SERIAL_UARTLITE_CONSOLE=y
CONFIG_SERIAL_UARTLITE_NR_UARTS=1
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_JSM=y
CONFIG_SERIAL_SIFIVE=y
CONFIG_SERIAL_SIFIVE_CONSOLE=y
CONFIG_SERIAL_LANTIQ=y
CONFIG_SERIAL_LANTIQ_CONSOLE=y
CONFIG_SERIAL_SCCNXP=y
CONFIG_SERIAL_SCCNXP_CONSOLE=y
CONFIG_SERIAL_SC16IS7XX_CORE=y
CONFIG_SERIAL_SC16IS7XX=y
CONFIG_SERIAL_SC16IS7XX_I2C=y
CONFIG_SERIAL_SC16IS7XX_SPI=y
CONFIG_SERIAL_ALTERA_JTAGUART=y
CONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE=y
CONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE_BYPASS=y
CONFIG_SERIAL_ALTERA_UART=y
CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4
CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200
CONFIG_SERIAL_ALTERA_UART_CONSOLE=y
CONFIG_SERIAL_XILINX_PS_UART=y
CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
CONFIG_SERIAL_ARC=y
CONFIG_SERIAL_ARC_CONSOLE=y
CONFIG_SERIAL_ARC_NR_PORTS=1
CONFIG_SERIAL_RP2=y
CONFIG_SERIAL_RP2_NR_UARTS=32
CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_SERIAL_FSL_LINFLEXUART=y
CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y
CONFIG_SERIAL_CONEXANT_DIGICOLOR=y
CONFIG_SERIAL_CONEXANT_DIGICOLOR_CONSOLE=y
CONFIG_SERIAL_MEN_Z135=y
CONFIG_SERIAL_SPRD=y
CONFIG_SERIAL_SPRD_CONSOLE=y
CONFIG_SERIAL_LITEUART=y
CONFIG_SERIAL_LITEUART_MAX_PORTS=1
CONFIG_SERIAL_LITEUART_CONSOLE=y
# end of Serial drivers

CONFIG_SERIAL_MCTRL_GPIO=y
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_MOXA_INTELLIO=y
CONFIG_MOXA_SMARTIO=y
CONFIG_SYNCLINK_GT=y
CONFIG_N_HDLC=y
CONFIG_GOLDFISH_TTY=y
CONFIG_GOLDFISH_TTY_EARLY_CONSOLE=y
CONFIG_N_GSM=y
CONFIG_NOZOMI=y
CONFIG_NULL_TTY=y
CONFIG_HVC_DRIVER=y
CONFIG_HVC_IRQ=y
CONFIG_HVC_XEN=y
CONFIG_HVC_XEN_FRONTEND=y
CONFIG_RPMSG_TTY=y
CONFIG_SERIAL_DEV_BUS=y
CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
CONFIG_TTY_PRINTK=y
CONFIG_TTY_PRINTK_LEVEL=6
CONFIG_PRINTER=y
CONFIG_LP_CONSOLE=y
CONFIG_PPDEV=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_IPMI_HANDLER=y
CONFIG_IPMI_DMI_DECODE=y
CONFIG_IPMI_PLAT_DATA=y
CONFIG_IPMI_PANIC_EVENT=y
CONFIG_IPMI_PANIC_STRING=y
CONFIG_IPMI_DEVICE_INTERFACE=y
CONFIG_IPMI_SI=y
CONFIG_IPMI_SSIF=y
CONFIG_IPMI_IPMB=y
CONFIG_IPMI_WATCHDOG=y
CONFIG_IPMI_POWEROFF=y
CONFIG_IPMB_DEVICE_INTERFACE=y
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_TIMERIOMEM=y
CONFIG_HW_RANDOM_INTEL=y
# CONFIG_HW_RANDOM_AMD is not set
CONFIG_HW_RANDOM_BA431=y
CONFIG_HW_RANDOM_VIA=y
CONFIG_HW_RANDOM_VIRTIO=y
CONFIG_HW_RANDOM_CCTRNG=y
CONFIG_HW_RANDOM_XIPHERA=y
CONFIG_APPLICOM=y

#
# PCMCIA character devices
#
CONFIG_SYNCLINK_CS=y
CONFIG_CARDMAN_4000=y
CONFIG_CARDMAN_4040=y
CONFIG_SCR24X=y
CONFIG_IPWIRELESS=y
# end of PCMCIA character devices

CONFIG_MWAVE=y
CONFIG_DEVMEM=y
CONFIG_NVRAM=y
CONFIG_DEVPORT=y
CONFIG_HPET=y
CONFIG_HPET_MMAP=y
CONFIG_HPET_MMAP_DEFAULT=y
CONFIG_HANGCHECK_TIMER=y
CONFIG_UV_MMTIMER=y
CONFIG_TCG_TPM=y
CONFIG_HW_RANDOM_TPM=y
CONFIG_TCG_TIS_CORE=y
CONFIG_TCG_TIS=y
CONFIG_TCG_TIS_SPI=y
CONFIG_TCG_TIS_SPI_CR50=y
CONFIG_TCG_TIS_I2C=y
CONFIG_TCG_TIS_I2C_CR50=y
CONFIG_TCG_TIS_I2C_ATMEL=y
CONFIG_TCG_TIS_I2C_INFINEON=y
CONFIG_TCG_TIS_I2C_NUVOTON=y
CONFIG_TCG_NSC=y
CONFIG_TCG_ATMEL=y
CONFIG_TCG_INFINEON=y
CONFIG_TCG_XEN=y
CONFIG_TCG_CRB=y
CONFIG_TCG_VTPM_PROXY=y
CONFIG_TCG_TIS_ST33ZP24=y
CONFIG_TCG_TIS_ST33ZP24_I2C=y
CONFIG_TCG_TIS_ST33ZP24_SPI=y
CONFIG_TELCLOCK=y
CONFIG_XILLYBUS_CLASS=y
CONFIG_XILLYBUS=y
CONFIG_XILLYBUS_PCIE=y
CONFIG_XILLYBUS_OF=y
CONFIG_XILLYUSB=y
CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RANDOM_TRUST_BOOTLOADER=y
# end of Character devices

#
# I2C support
#
CONFIG_I2C=y
CONFIG_ACPI_I2C_OPREGION=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MUX=y

#
# Multiplexer I2C Chip support
#
CONFIG_I2C_ARB_GPIO_CHALLENGE=y
CONFIG_I2C_MUX_GPIO=y
CONFIG_I2C_MUX_GPMUX=y
CONFIG_I2C_MUX_LTC4306=y
CONFIG_I2C_MUX_PCA9541=y
CONFIG_I2C_MUX_PCA954x=y
CONFIG_I2C_MUX_PINCTRL=y
CONFIG_I2C_MUX_REG=y
CONFIG_I2C_DEMUX_PINCTRL=y
CONFIG_I2C_MUX_MLXCPLD=y
# end of Multiplexer I2C Chip support

CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_SMBUS=y
CONFIG_I2C_ALGOBIT=y
CONFIG_I2C_ALGOPCA=y

#
# I2C Hardware Bus support
#

#
# PC SMBus host controller drivers
#
CONFIG_I2C_CCGX_UCSI=y
CONFIG_I2C_ALI1535=y
CONFIG_I2C_ALI1563=y
CONFIG_I2C_ALI15X3=y
# CONFIG_I2C_AMD756 is not set
# CONFIG_I2C_AMD8111 is not set
# CONFIG_I2C_AMD_MP2 is not set
CONFIG_I2C_I801=y
CONFIG_I2C_ISCH=y
CONFIG_I2C_ISMT=y
CONFIG_I2C_PIIX4=y
CONFIG_I2C_CHT_WC=y
CONFIG_I2C_NFORCE2=y
CONFIG_I2C_NFORCE2_S4985=y
CONFIG_I2C_NVIDIA_GPU=y
CONFIG_I2C_SIS5595=y
CONFIG_I2C_SIS630=y
CONFIG_I2C_SIS96X=y
CONFIG_I2C_VIA=y
CONFIG_I2C_VIAPRO=y

#
# ACPI drivers
#
CONFIG_I2C_SCMI=y

#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
CONFIG_I2C_CBUS_GPIO=y
CONFIG_I2C_DESIGNWARE_CORE=y
CONFIG_I2C_DESIGNWARE_SLAVE=y
CONFIG_I2C_DESIGNWARE_PLATFORM=y
# CONFIG_I2C_DESIGNWARE_AMDPSP is not set
CONFIG_I2C_DESIGNWARE_BAYTRAIL=y
CONFIG_I2C_DESIGNWARE_PCI=y
CONFIG_I2C_EMEV2=y
CONFIG_I2C_GPIO=y
CONFIG_I2C_GPIO_FAULT_INJECTOR=y
CONFIG_I2C_KEMPLD=y
CONFIG_I2C_OCORES=y
CONFIG_I2C_PCA_PLATFORM=y
CONFIG_I2C_RK3X=y
CONFIG_I2C_SIMTEC=y
CONFIG_I2C_XILINX=y

#
# External I2C/SMBus adapter drivers
#
CONFIG_I2C_DIOLAN_U2C=y
CONFIG_I2C_DLN2=y
CONFIG_I2C_CP2615=y
CONFIG_I2C_PARPORT=y
CONFIG_I2C_PCI1XXXX=y
CONFIG_I2C_ROBOTFUZZ_OSIF=y
CONFIG_I2C_TAOS_EVM=y
CONFIG_I2C_TINY_USB=y
CONFIG_I2C_VIPERBOARD=y

#
# Other I2C/SMBus bus drivers
#
CONFIG_I2C_MLXCPLD=y
CONFIG_I2C_CROS_EC_TUNNEL=y
CONFIG_I2C_FSI=y
CONFIG_I2C_VIRTIO=y
# end of I2C Hardware Bus support

CONFIG_I2C_STUB=m
CONFIG_I2C_SLAVE=y
CONFIG_I2C_SLAVE_EEPROM=y
CONFIG_I2C_SLAVE_TESTUNIT=y
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# end of I2C support

CONFIG_I3C=y
CONFIG_CDNS_I3C_MASTER=y
CONFIG_DW_I3C_MASTER=y
CONFIG_SVC_I3C_MASTER=y
CONFIG_MIPI_I3C_HCI=y
CONFIG_SPI=y
CONFIG_SPI_DEBUG=y
CONFIG_SPI_MASTER=y
CONFIG_SPI_MEM=y

#
# SPI Master Controller Drivers
#
CONFIG_SPI_ALTERA=y
CONFIG_SPI_ALTERA_CORE=y
CONFIG_SPI_ALTERA_DFL=y
CONFIG_SPI_AXI_SPI_ENGINE=y
CONFIG_SPI_BITBANG=y
CONFIG_SPI_BUTTERFLY=y
CONFIG_SPI_CADENCE=y
CONFIG_SPI_CADENCE_QUADSPI=y
CONFIG_SPI_CADENCE_XSPI=y
CONFIG_SPI_DESIGNWARE=y
CONFIG_SPI_DW_DMA=y
CONFIG_SPI_DW_PCI=y
CONFIG_SPI_DW_MMIO=y
CONFIG_SPI_DLN2=y
CONFIG_SPI_FSI=y
CONFIG_SPI_NXP_FLEXSPI=y
CONFIG_SPI_GPIO=y
CONFIG_SPI_INTEL=y
CONFIG_SPI_INTEL_PCI=y
CONFIG_SPI_INTEL_PLATFORM=y
CONFIG_SPI_LM70_LLP=y
CONFIG_SPI_FSL_LIB=y
CONFIG_SPI_FSL_SPI=y
CONFIG_SPI_MICROCHIP_CORE=y
CONFIG_SPI_MICROCHIP_CORE_QSPI=y
CONFIG_SPI_LANTIQ_SSC=y
CONFIG_SPI_OC_TINY=y
CONFIG_SPI_PXA2XX=y
CONFIG_SPI_PXA2XX_PCI=y
CONFIG_SPI_ROCKCHIP=y
CONFIG_SPI_SC18IS602=y
CONFIG_SPI_SIFIVE=y
CONFIG_SPI_MXIC=y
CONFIG_SPI_XCOMM=y
CONFIG_SPI_XILINX=y
CONFIG_SPI_ZYNQMP_GQSPI=y
# CONFIG_SPI_AMD is not set

#
# SPI Multiplexer support
#
CONFIG_SPI_MUX=y

#
# SPI Protocol Masters
#
CONFIG_SPI_SPIDEV=y
# CONFIG_SPI_LOOPBACK_TEST is not set
CONFIG_SPI_TLE62X0=y
CONFIG_SPI_SLAVE=y
CONFIG_SPI_SLAVE_TIME=y
CONFIG_SPI_SLAVE_SYSTEM_CONTROL=y
CONFIG_SPI_DYNAMIC=y
CONFIG_SPMI=y
CONFIG_SPMI_HISI3670=y
CONFIG_HSI=y
CONFIG_HSI_BOARDINFO=y

#
# HSI controllers
#

#
# HSI clients
#
CONFIG_HSI_CHAR=y
CONFIG_PPS=y
# CONFIG_PPS_DEBUG is not set

#
# PPS clients support
#
CONFIG_PPS_CLIENT_KTIMER=y
CONFIG_PPS_CLIENT_LDISC=y
CONFIG_PPS_CLIENT_PARPORT=y
CONFIG_PPS_CLIENT_GPIO=y

#
# PPS generators support
#

#
# PTP clock support
#
CONFIG_PTP_1588_CLOCK=y
CONFIG_PTP_1588_CLOCK_OPTIONAL=y
CONFIG_DP83640_PHY=y
CONFIG_PTP_1588_CLOCK_INES=y
CONFIG_PTP_1588_CLOCK_KVM=y
CONFIG_PTP_1588_CLOCK_IDT82P33=y
CONFIG_PTP_1588_CLOCK_IDTCM=y
CONFIG_PTP_1588_CLOCK_VMW=y
CONFIG_PTP_1588_CLOCK_OCP=y
# end of PTP clock support

CONFIG_PINCTRL=y
CONFIG_GENERIC_PINCTRL_GROUPS=y
CONFIG_PINMUX=y
CONFIG_GENERIC_PINMUX_FUNCTIONS=y
CONFIG_PINCONF=y
CONFIG_GENERIC_PINCONF=y
CONFIG_DEBUG_PINCTRL=y
# CONFIG_PINCTRL_AMD is not set
CONFIG_PINCTRL_AS3722=y
CONFIG_PINCTRL_AXP209=y
CONFIG_PINCTRL_CY8C95X0=y
CONFIG_PINCTRL_DA9062=y
CONFIG_PINCTRL_EQUILIBRIUM=y
CONFIG_PINCTRL_MAX77620=y
CONFIG_PINCTRL_MCP23S08_I2C=y
CONFIG_PINCTRL_MCP23S08_SPI=y
CONFIG_PINCTRL_MCP23S08=y
CONFIG_PINCTRL_MICROCHIP_SGPIO=y
CONFIG_PINCTRL_OCELOT=y
CONFIG_PINCTRL_PALMAS=y
CONFIG_PINCTRL_RK805=y
CONFIG_PINCTRL_SINGLE=y
CONFIG_PINCTRL_STMFX=y
CONFIG_PINCTRL_SX150X=y
CONFIG_PINCTRL_LOCHNAGAR=y
CONFIG_PINCTRL_MADERA=y
CONFIG_PINCTRL_CS47L15=y
CONFIG_PINCTRL_CS47L35=y
CONFIG_PINCTRL_CS47L85=y
CONFIG_PINCTRL_CS47L90=y
CONFIG_PINCTRL_CS47L92=y

#
# Intel pinctrl drivers
#
CONFIG_PINCTRL_BAYTRAIL=y
CONFIG_PINCTRL_CHERRYVIEW=y
CONFIG_PINCTRL_LYNXPOINT=y
CONFIG_PINCTRL_MERRIFIELD=y
CONFIG_PINCTRL_INTEL=y
CONFIG_PINCTRL_ALDERLAKE=y
CONFIG_PINCTRL_BROXTON=y
CONFIG_PINCTRL_CANNONLAKE=y
CONFIG_PINCTRL_CEDARFORK=y
CONFIG_PINCTRL_DENVERTON=y
CONFIG_PINCTRL_ELKHARTLAKE=y
CONFIG_PINCTRL_EMMITSBURG=y
CONFIG_PINCTRL_GEMINILAKE=y
CONFIG_PINCTRL_ICELAKE=y
CONFIG_PINCTRL_JASPERLAKE=y
CONFIG_PINCTRL_LAKEFIELD=y
CONFIG_PINCTRL_LEWISBURG=y
CONFIG_PINCTRL_METEORLAKE=y
CONFIG_PINCTRL_SUNRISEPOINT=y
CONFIG_PINCTRL_TIGERLAKE=y
# end of Intel pinctrl drivers

#
# Renesas pinctrl drivers
#
# end of Renesas pinctrl drivers

CONFIG_GPIOLIB=y
CONFIG_GPIOLIB_FASTPATH_LIMIT=512
CONFIG_OF_GPIO=y
CONFIG_GPIO_ACPI=y
CONFIG_GPIOLIB_IRQCHIP=y
CONFIG_DEBUG_GPIO=y
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_CDEV=y
CONFIG_GPIO_CDEV_V1=y
CONFIG_GPIO_GENERIC=y
CONFIG_GPIO_MAX730X=y

#
# Memory mapped GPIO drivers
#
CONFIG_GPIO_74XX_MMIO=y
CONFIG_GPIO_ALTERA=y
# CONFIG_GPIO_AMDPT is not set
CONFIG_GPIO_CADENCE=y
CONFIG_GPIO_DWAPB=y
CONFIG_GPIO_EXAR=y
CONFIG_GPIO_FTGPIO010=y
CONFIG_GPIO_GENERIC_PLATFORM=y
CONFIG_GPIO_GRGPIO=y
CONFIG_GPIO_HLWD=y
CONFIG_GPIO_ICH=y
CONFIG_GPIO_LOGICVC=y
CONFIG_GPIO_MB86S7X=y
CONFIG_GPIO_MENZ127=y
CONFIG_GPIO_SIFIVE=y
CONFIG_GPIO_SIOX=y
CONFIG_GPIO_SYSCON=y
CONFIG_GPIO_VX855=y
CONFIG_GPIO_WCD934X=y
CONFIG_GPIO_XILINX=y
CONFIG_GPIO_AMD_FCH=y
# end of Memory mapped GPIO drivers

#
# Port-mapped I/O GPIO drivers
#
CONFIG_GPIO_I8255=y
CONFIG_GPIO_104_DIO_48E=y
CONFIG_GPIO_104_IDIO_16=y
CONFIG_GPIO_104_IDI_48=y
CONFIG_GPIO_F7188X=y
CONFIG_GPIO_GPIO_MM=y
CONFIG_GPIO_IT87=y
CONFIG_GPIO_SCH=y
CONFIG_GPIO_SCH311X=y
CONFIG_GPIO_WINBOND=y
CONFIG_GPIO_WS16C48=y
# end of Port-mapped I/O GPIO drivers

#
# I2C GPIO expanders
#
CONFIG_GPIO_ADNP=y
CONFIG_GPIO_GW_PLD=y
CONFIG_GPIO_MAX7300=y
CONFIG_GPIO_MAX732X=y
CONFIG_GPIO_MAX732X_IRQ=y
CONFIG_GPIO_PCA953X=y
CONFIG_GPIO_PCA953X_IRQ=y
CONFIG_GPIO_PCA9570=y
CONFIG_GPIO_PCF857X=y
CONFIG_GPIO_TPIC2810=y
# end of I2C GPIO expanders

#
# MFD GPIO expanders
#
CONFIG_GPIO_ADP5520=y
CONFIG_GPIO_ARIZONA=y
CONFIG_GPIO_BD71815=y
CONFIG_GPIO_BD71828=y
CONFIG_GPIO_BD9571MWV=y
CONFIG_GPIO_CRYSTAL_COVE=y
CONFIG_GPIO_DA9052=y
CONFIG_GPIO_DA9055=y
CONFIG_GPIO_DLN2=y
CONFIG_GPIO_JANZ_TTL=y
CONFIG_GPIO_KEMPLD=y
CONFIG_GPIO_LP3943=y
CONFIG_GPIO_LP873X=y
CONFIG_GPIO_LP87565=y
CONFIG_GPIO_MADERA=y
CONFIG_GPIO_MAX77620=y
CONFIG_GPIO_MAX77650=y
CONFIG_GPIO_PALMAS=y
CONFIG_GPIO_RC5T583=y
CONFIG_GPIO_STMPE=y
CONFIG_GPIO_TC3589X=y
CONFIG_GPIO_TPS65086=y
CONFIG_GPIO_TPS65218=y
CONFIG_GPIO_TPS6586X=y
CONFIG_GPIO_TPS65910=y
CONFIG_GPIO_TPS65912=y
CONFIG_GPIO_TPS68470=y
CONFIG_GPIO_TQMX86=y
CONFIG_GPIO_TWL4030=y
CONFIG_GPIO_TWL6040=y
CONFIG_GPIO_UCB1400=y
CONFIG_GPIO_WHISKEY_COVE=y
CONFIG_GPIO_WM831X=y
CONFIG_GPIO_WM8350=y
CONFIG_GPIO_WM8994=y
# end of MFD GPIO expanders

#
# PCI GPIO expanders
#
# CONFIG_GPIO_AMD8111 is not set
CONFIG_GPIO_MERRIFIELD=y
CONFIG_GPIO_ML_IOH=y
CONFIG_GPIO_PCI_IDIO_16=y
CONFIG_GPIO_PCIE_IDIO_24=y
CONFIG_GPIO_RDC321X=y
CONFIG_GPIO_SODAVILLE=y
# end of PCI GPIO expanders

#
# SPI GPIO expanders
#
CONFIG_GPIO_74X164=y
CONFIG_GPIO_MAX3191X=y
CONFIG_GPIO_MAX7301=y
CONFIG_GPIO_MC33880=y
CONFIG_GPIO_PISOSR=y
CONFIG_GPIO_XRA1403=y
CONFIG_GPIO_MOXTET=y
# end of SPI GPIO expanders

#
# USB GPIO expanders
#
CONFIG_GPIO_VIPERBOARD=y
# end of USB GPIO expanders

#
# Virtual GPIO drivers
#
CONFIG_GPIO_AGGREGATOR=y
CONFIG_GPIO_MOCKUP=y
CONFIG_GPIO_VIRTIO=y
CONFIG_GPIO_SIM=y
# end of Virtual GPIO drivers

CONFIG_W1=y
CONFIG_W1_CON=y

#
# 1-wire Bus Masters
#
CONFIG_W1_MASTER_MATROX=y
CONFIG_W1_MASTER_DS2490=y
CONFIG_W1_MASTER_DS2482=y
CONFIG_W1_MASTER_DS1WM=y
CONFIG_W1_MASTER_GPIO=y
CONFIG_W1_MASTER_SGI=y
# end of 1-wire Bus Masters

#
# 1-wire Slaves
#
CONFIG_W1_SLAVE_THERM=y
CONFIG_W1_SLAVE_SMEM=y
CONFIG_W1_SLAVE_DS2405=y
CONFIG_W1_SLAVE_DS2408=y
CONFIG_W1_SLAVE_DS2408_READBACK=y
CONFIG_W1_SLAVE_DS2413=y
CONFIG_W1_SLAVE_DS2406=y
CONFIG_W1_SLAVE_DS2423=y
CONFIG_W1_SLAVE_DS2805=y
CONFIG_W1_SLAVE_DS2430=y
CONFIG_W1_SLAVE_DS2431=y
CONFIG_W1_SLAVE_DS2433=y
CONFIG_W1_SLAVE_DS2433_CRC=y
CONFIG_W1_SLAVE_DS2438=y
CONFIG_W1_SLAVE_DS250X=y
CONFIG_W1_SLAVE_DS2780=y
CONFIG_W1_SLAVE_DS2781=y
CONFIG_W1_SLAVE_DS28E04=y
CONFIG_W1_SLAVE_DS28E17=y
# end of 1-wire Slaves

CONFIG_POWER_RESET=y
CONFIG_POWER_RESET_AS3722=y
CONFIG_POWER_RESET_ATC260X=y
CONFIG_POWER_RESET_GPIO=y
CONFIG_POWER_RESET_GPIO_RESTART=y
# CONFIG_POWER_RESET_LTC2952 is not set
CONFIG_POWER_RESET_MT6323=y
CONFIG_POWER_RESET_REGULATOR=y
CONFIG_POWER_RESET_RESTART=y
CONFIG_POWER_RESET_TPS65086=y
CONFIG_POWER_RESET_SYSCON=y
CONFIG_POWER_RESET_SYSCON_POWEROFF=y
CONFIG_REBOOT_MODE=y
CONFIG_SYSCON_REBOOT_MODE=y
CONFIG_NVMEM_REBOOT_MODE=y
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
CONFIG_POWER_SUPPLY_HWMON=y
CONFIG_PDA_POWER=y
CONFIG_GENERIC_ADC_BATTERY=y
CONFIG_IP5XXX_POWER=y
CONFIG_MAX8925_POWER=y
CONFIG_WM831X_BACKUP=y
CONFIG_WM831X_POWER=y
CONFIG_WM8350_POWER=y
# CONFIG_TEST_POWER is not set
CONFIG_BATTERY_88PM860X=y
CONFIG_CHARGER_ADP5061=y
CONFIG_BATTERY_ACT8945A=y
CONFIG_BATTERY_CPCAP=y
CONFIG_BATTERY_CW2015=y
CONFIG_BATTERY_DS2760=y
CONFIG_BATTERY_DS2780=y
CONFIG_BATTERY_DS2781=y
CONFIG_BATTERY_DS2782=y
CONFIG_BATTERY_SAMSUNG_SDI=y
CONFIG_BATTERY_WM97XX=y
CONFIG_BATTERY_SBS=y
CONFIG_CHARGER_SBS=y
CONFIG_MANAGER_SBS=y
CONFIG_BATTERY_BQ27XXX=y
CONFIG_BATTERY_BQ27XXX_I2C=y
CONFIG_BATTERY_BQ27XXX_HDQ=y
CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM=y
CONFIG_BATTERY_DA9030=y
CONFIG_BATTERY_DA9052=y
CONFIG_CHARGER_DA9150=y
CONFIG_BATTERY_DA9150=y
CONFIG_CHARGER_AXP20X=y
CONFIG_BATTERY_AXP20X=y
CONFIG_AXP20X_POWER=y
CONFIG_AXP288_CHARGER=y
CONFIG_AXP288_FUEL_GAUGE=y
CONFIG_BATTERY_MAX17040=y
CONFIG_BATTERY_MAX17042=y
CONFIG_BATTERY_MAX1721X=y
CONFIG_BATTERY_TWL4030_MADC=y
CONFIG_CHARGER_88PM860X=y
CONFIG_CHARGER_PCF50633=y
CONFIG_BATTERY_RX51=y
CONFIG_CHARGER_ISP1704=y
CONFIG_CHARGER_MAX8903=y
CONFIG_CHARGER_TWL4030=y
CONFIG_CHARGER_LP8727=y
CONFIG_CHARGER_LP8788=y
CONFIG_CHARGER_GPIO=y
CONFIG_CHARGER_MANAGER=y
CONFIG_CHARGER_LT3651=y
CONFIG_CHARGER_LTC4162L=y
CONFIG_CHARGER_MAX14577=y
CONFIG_CHARGER_DETECTOR_MAX14656=y
CONFIG_CHARGER_MAX77650=y
CONFIG_CHARGER_MAX77693=y
CONFIG_CHARGER_MAX77976=y
CONFIG_CHARGER_MAX8997=y
CONFIG_CHARGER_MAX8998=y
CONFIG_CHARGER_MP2629=y
CONFIG_CHARGER_MT6360=y
CONFIG_CHARGER_MT6370=y
CONFIG_CHARGER_BQ2415X=y
CONFIG_CHARGER_BQ24190=y
CONFIG_CHARGER_BQ24257=y
CONFIG_CHARGER_BQ24735=y
CONFIG_CHARGER_BQ2515X=y
CONFIG_CHARGER_BQ25890=y
CONFIG_CHARGER_BQ25980=y
CONFIG_CHARGER_BQ256XX=y
CONFIG_CHARGER_RK817=y
CONFIG_CHARGER_SMB347=y
CONFIG_CHARGER_TPS65090=y
CONFIG_CHARGER_TPS65217=y
CONFIG_BATTERY_GAUGE_LTC2941=y
CONFIG_BATTERY_GOLDFISH=y
CONFIG_BATTERY_RT5033=y
CONFIG_CHARGER_RT9455=y
CONFIG_CHARGER_CROS_USBPD=y
CONFIG_CHARGER_CROS_PCHG=y
CONFIG_CHARGER_UCS1002=y
CONFIG_CHARGER_BD99954=y
CONFIG_CHARGER_WILCO=y
CONFIG_RN5T618_POWER=y
CONFIG_BATTERY_SURFACE=y
CONFIG_CHARGER_SURFACE=y
CONFIG_BATTERY_UG3105=y
CONFIG_HWMON=y
CONFIG_HWMON_VID=y
CONFIG_HWMON_DEBUG_CHIP=y

#
# Native drivers
#
CONFIG_SENSORS_ABITUGURU=y
CONFIG_SENSORS_ABITUGURU3=y
CONFIG_SENSORS_AD7314=y
CONFIG_SENSORS_AD7414=y
CONFIG_SENSORS_AD7418=y
CONFIG_SENSORS_ADM1025=y
CONFIG_SENSORS_ADM1026=y
CONFIG_SENSORS_ADM1029=y
CONFIG_SENSORS_ADM1031=y
CONFIG_SENSORS_ADM1177=y
CONFIG_SENSORS_ADM9240=y
CONFIG_SENSORS_ADT7X10=y
CONFIG_SENSORS_ADT7310=y
CONFIG_SENSORS_ADT7410=y
CONFIG_SENSORS_ADT7411=y
CONFIG_SENSORS_ADT7462=y
CONFIG_SENSORS_ADT7470=y
CONFIG_SENSORS_ADT7475=y
CONFIG_SENSORS_AHT10=y
CONFIG_SENSORS_AQUACOMPUTER_D5NEXT=y
CONFIG_SENSORS_AS370=y
CONFIG_SENSORS_ASC7621=y
CONFIG_SENSORS_AXI_FAN_CONTROL=y
CONFIG_SENSORS_K8TEMP=y
CONFIG_SENSORS_APPLESMC=y
CONFIG_SENSORS_ASB100=y
CONFIG_SENSORS_ATXP1=y
CONFIG_SENSORS_CORSAIR_CPRO=y
CONFIG_SENSORS_CORSAIR_PSU=y
CONFIG_SENSORS_DRIVETEMP=y
CONFIG_SENSORS_DS620=y
CONFIG_SENSORS_DS1621=y
CONFIG_SENSORS_DELL_SMM=y
CONFIG_I8K=y
CONFIG_SENSORS_DA9052_ADC=y
CONFIG_SENSORS_DA9055=y
CONFIG_SENSORS_I5K_AMB=y
CONFIG_SENSORS_F71805F=y
CONFIG_SENSORS_F71882FG=y
CONFIG_SENSORS_F75375S=y
CONFIG_SENSORS_GSC=y
CONFIG_SENSORS_MC13783_ADC=y
CONFIG_SENSORS_FSCHMD=y
CONFIG_SENSORS_FTSTEUTATES=y
CONFIG_SENSORS_GL518SM=y
CONFIG_SENSORS_GL520SM=y
CONFIG_SENSORS_G760A=y
CONFIG_SENSORS_G762=y
CONFIG_SENSORS_GPIO_FAN=y
CONFIG_SENSORS_HIH6130=y
CONFIG_SENSORS_IBMAEM=y
CONFIG_SENSORS_IBMPEX=y
CONFIG_SENSORS_IIO_HWMON=y
CONFIG_SENSORS_I5500=y
CONFIG_SENSORS_CORETEMP=y
CONFIG_SENSORS_IT87=y
CONFIG_SENSORS_JC42=y
CONFIG_SENSORS_POWR1220=y
CONFIG_SENSORS_LINEAGE=y
CONFIG_SENSORS_LOCHNAGAR=y
CONFIG_SENSORS_LTC2945=y
CONFIG_SENSORS_LTC2947=y
CONFIG_SENSORS_LTC2947_I2C=y
CONFIG_SENSORS_LTC2947_SPI=y
CONFIG_SENSORS_LTC2990=y
CONFIG_SENSORS_LTC2992=y
CONFIG_SENSORS_LTC4151=y
CONFIG_SENSORS_LTC4215=y
CONFIG_SENSORS_LTC4222=y
CONFIG_SENSORS_LTC4245=y
CONFIG_SENSORS_LTC4260=y
CONFIG_SENSORS_LTC4261=y
CONFIG_SENSORS_MAX1111=y
CONFIG_SENSORS_MAX127=y
CONFIG_SENSORS_MAX16065=y
CONFIG_SENSORS_MAX1619=y
CONFIG_SENSORS_MAX1668=y
CONFIG_SENSORS_MAX197=y
CONFIG_SENSORS_MAX31722=y
CONFIG_SENSORS_MAX31730=y
CONFIG_SENSORS_MAX31760=y
CONFIG_SENSORS_MAX6620=y
CONFIG_SENSORS_MAX6621=y
CONFIG_SENSORS_MAX6639=y
CONFIG_SENSORS_MAX6650=y
CONFIG_SENSORS_MAX6697=y
CONFIG_SENSORS_MAX31790=y
CONFIG_SENSORS_MCP3021=y
CONFIG_SENSORS_MLXREG_FAN=y
CONFIG_SENSORS_TC654=y
CONFIG_SENSORS_TPS23861=y
CONFIG_SENSORS_MENF21BMC_HWMON=y
CONFIG_SENSORS_MR75203=y
CONFIG_SENSORS_ADCXX=y
CONFIG_SENSORS_LM63=y
CONFIG_SENSORS_LM70=y
CONFIG_SENSORS_LM73=y
CONFIG_SENSORS_LM75=y
CONFIG_SENSORS_LM77=y
CONFIG_SENSORS_LM78=y
CONFIG_SENSORS_LM80=y
CONFIG_SENSORS_LM83=y
CONFIG_SENSORS_LM85=y
CONFIG_SENSORS_LM87=y
CONFIG_SENSORS_LM90=y
CONFIG_SENSORS_LM92=y
CONFIG_SENSORS_LM93=y
CONFIG_SENSORS_LM95234=y
CONFIG_SENSORS_LM95241=y
CONFIG_SENSORS_LM95245=y
CONFIG_SENSORS_PC87360=y
CONFIG_SENSORS_PC87427=y
CONFIG_SENSORS_NTC_THERMISTOR=y
CONFIG_SENSORS_NCT6683=y
CONFIG_SENSORS_NCT6775_CORE=y
CONFIG_SENSORS_NCT6775=y
CONFIG_SENSORS_NCT6775_I2C=y
CONFIG_SENSORS_NCT7802=y
CONFIG_SENSORS_NCT7904=y
CONFIG_SENSORS_NPCM7XX=y
CONFIG_SENSORS_NZXT_KRAKEN2=y
CONFIG_SENSORS_NZXT_SMART2=y
CONFIG_SENSORS_PCF8591=y
CONFIG_SENSORS_PECI_CPUTEMP=y
CONFIG_SENSORS_PECI_DIMMTEMP=y
CONFIG_SENSORS_PECI=y
CONFIG_PMBUS=y
CONFIG_SENSORS_PMBUS=y
CONFIG_SENSORS_ADM1266=y
CONFIG_SENSORS_ADM1275=y
CONFIG_SENSORS_BEL_PFE=y
CONFIG_SENSORS_BPA_RS600=y
CONFIG_SENSORS_DELTA_AHE50DC_FAN=y
CONFIG_SENSORS_FSP_3Y=y
CONFIG_SENSORS_IBM_CFFPS=y
CONFIG_SENSORS_DPS920AB=y
CONFIG_SENSORS_INSPUR_IPSPS=y
CONFIG_SENSORS_IR35221=y
CONFIG_SENSORS_IR36021=y
CONFIG_SENSORS_IR38064=y
CONFIG_SENSORS_IR38064_REGULATOR=y
CONFIG_SENSORS_IRPS5401=y
CONFIG_SENSORS_ISL68137=y
CONFIG_SENSORS_LM25066=y
CONFIG_SENSORS_LM25066_REGULATOR=y
CONFIG_SENSORS_LT7182S=y
CONFIG_SENSORS_LTC2978=y
CONFIG_SENSORS_LTC2978_REGULATOR=y
CONFIG_SENSORS_LTC3815=y
CONFIG_SENSORS_MAX15301=y
CONFIG_SENSORS_MAX16064=y
CONFIG_SENSORS_MAX16601=y
CONFIG_SENSORS_MAX20730=y
CONFIG_SENSORS_MAX20751=y
CONFIG_SENSORS_MAX31785=y
CONFIG_SENSORS_MAX34440=y
CONFIG_SENSORS_MAX8688=y
CONFIG_SENSORS_MP2888=y
CONFIG_SENSORS_MP2975=y
CONFIG_SENSORS_MP5023=y
CONFIG_SENSORS_PIM4328=y
CONFIG_SENSORS_PLI1209BC=y
CONFIG_SENSORS_PLI1209BC_REGULATOR=y
CONFIG_SENSORS_PM6764TR=y
CONFIG_SENSORS_PXE1610=y
CONFIG_SENSORS_Q54SJ108A2=y
CONFIG_SENSORS_STPDDC60=y
CONFIG_SENSORS_TPS40422=y
CONFIG_SENSORS_TPS53679=y
CONFIG_SENSORS_TPS546D24=y
CONFIG_SENSORS_UCD9000=y
CONFIG_SENSORS_UCD9200=y
CONFIG_SENSORS_XDPE152=y
CONFIG_SENSORS_XDPE122=y
CONFIG_SENSORS_XDPE122_REGULATOR=y
CONFIG_SENSORS_ZL6100=y
CONFIG_SENSORS_PWM_FAN=y
CONFIG_SENSORS_SBTSI=y
CONFIG_SENSORS_SBRMI=y
CONFIG_SENSORS_SHT15=y
CONFIG_SENSORS_SHT21=y
CONFIG_SENSORS_SHT3x=y
CONFIG_SENSORS_SHT4x=y
CONFIG_SENSORS_SHTC1=y
CONFIG_SENSORS_SIS5595=y
CONFIG_SENSORS_SY7636A=y
CONFIG_SENSORS_DME1737=y
CONFIG_SENSORS_EMC1403=y
CONFIG_SENSORS_EMC2103=y
CONFIG_SENSORS_EMC2305=y
CONFIG_SENSORS_EMC6W201=y
CONFIG_SENSORS_SMSC47M1=y
CONFIG_SENSORS_SMSC47M192=y
CONFIG_SENSORS_SMSC47B397=y
CONFIG_SENSORS_SCH56XX_COMMON=y
CONFIG_SENSORS_SCH5627=y
CONFIG_SENSORS_SCH5636=y
CONFIG_SENSORS_STTS751=y
CONFIG_SENSORS_SMM665=y
CONFIG_SENSORS_ADC128D818=y
CONFIG_SENSORS_ADS7828=y
CONFIG_SENSORS_ADS7871=y
CONFIG_SENSORS_AMC6821=y
CONFIG_SENSORS_INA209=y
CONFIG_SENSORS_INA2XX=y
CONFIG_SENSORS_INA238=y
CONFIG_SENSORS_INA3221=y
CONFIG_SENSORS_TC74=y
CONFIG_SENSORS_THMC50=y
CONFIG_SENSORS_TMP102=y
CONFIG_SENSORS_TMP103=y
CONFIG_SENSORS_TMP108=y
CONFIG_SENSORS_TMP401=y
CONFIG_SENSORS_TMP421=y
CONFIG_SENSORS_TMP464=y
CONFIG_SENSORS_TMP513=y
CONFIG_SENSORS_VIA_CPUTEMP=y
CONFIG_SENSORS_VIA686A=y
CONFIG_SENSORS_VT1211=y
CONFIG_SENSORS_VT8231=y
CONFIG_SENSORS_W83773G=y
CONFIG_SENSORS_W83781D=y
CONFIG_SENSORS_W83791D=y
CONFIG_SENSORS_W83792D=y
CONFIG_SENSORS_W83793=y
CONFIG_SENSORS_W83795=y
CONFIG_SENSORS_W83795_FANCTRL=y
CONFIG_SENSORS_W83L785TS=y
CONFIG_SENSORS_W83L786NG=y
CONFIG_SENSORS_W83627HF=y
CONFIG_SENSORS_W83627EHF=y
CONFIG_SENSORS_WM831X=y
CONFIG_SENSORS_WM8350=y
CONFIG_SENSORS_XGENE=y
CONFIG_SENSORS_INTEL_M10_BMC_HWMON=y

#
# ACPI drivers
#
CONFIG_SENSORS_ACPI_POWER=y
CONFIG_SENSORS_ATK0110=y
CONFIG_SENSORS_ASUS_WMI=y
CONFIG_SENSORS_ASUS_EC=y
CONFIG_THERMAL=y
CONFIG_THERMAL_NETLINK=y
CONFIG_THERMAL_STATISTICS=y
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
CONFIG_THERMAL_HWMON=y
CONFIG_THERMAL_OF=y
CONFIG_THERMAL_WRITABLE_TRIPS=y
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set
CONFIG_THERMAL_GOV_FAIR_SHARE=y
CONFIG_THERMAL_GOV_STEP_WISE=y
CONFIG_THERMAL_GOV_BANG_BANG=y
CONFIG_THERMAL_GOV_USER_SPACE=y
CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
CONFIG_CPU_THERMAL=y
CONFIG_CPU_FREQ_THERMAL=y
CONFIG_CPU_IDLE_THERMAL=y
CONFIG_DEVFREQ_THERMAL=y
CONFIG_THERMAL_EMULATION=y
CONFIG_THERMAL_MMIO=y
CONFIG_MAX77620_THERMAL=y
CONFIG_DA9062_THERMAL=y

#
# Intel thermal drivers
#
CONFIG_INTEL_POWERCLAMP=y
CONFIG_X86_THERMAL_VECTOR=y
CONFIG_X86_PKG_TEMP_THERMAL=y
CONFIG_INTEL_SOC_DTS_IOSF_CORE=y
CONFIG_INTEL_SOC_DTS_THERMAL=y

#
# ACPI INT340X thermal drivers
#
CONFIG_INT340X_THERMAL=y
CONFIG_ACPI_THERMAL_REL=y
CONFIG_INT3406_THERMAL=y
CONFIG_PROC_THERMAL_MMIO_RAPL=y
# end of ACPI INT340X thermal drivers

CONFIG_INTEL_BXT_PMIC_THERMAL=y
CONFIG_INTEL_PCH_THERMAL=y
CONFIG_INTEL_TCC_COOLING=y
CONFIG_INTEL_MENLOW=y
CONFIG_INTEL_HFI_THERMAL=y
# end of Intel thermal drivers

# CONFIG_TI_SOC_THERMAL is not set
CONFIG_GENERIC_ADC_THERMAL=y
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_CORE=y
CONFIG_WATCHDOG_NOWAYOUT=y
CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
CONFIG_WATCHDOG_OPEN_TIMEOUT=0
CONFIG_WATCHDOG_SYSFS=y
CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT=y

#
# Watchdog Pretimeout Governors
#
CONFIG_WATCHDOG_PRETIMEOUT_GOV=y
CONFIG_WATCHDOG_PRETIMEOUT_GOV_SEL=m
CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=y
CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=y
# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP is not set
CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC=y

#
# Watchdog Device Drivers
#
CONFIG_SOFT_WATCHDOG=y
CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
CONFIG_BD957XMUF_WATCHDOG=y
CONFIG_DA9052_WATCHDOG=y
CONFIG_DA9055_WATCHDOG=y
CONFIG_DA9063_WATCHDOG=y
CONFIG_DA9062_WATCHDOG=y
CONFIG_GPIO_WATCHDOG=y
CONFIG_GPIO_WATCHDOG_ARCH_INITCALL=y
CONFIG_MENF21BMC_WATCHDOG=y
CONFIG_MENZ069_WATCHDOG=y
CONFIG_WDAT_WDT=y
CONFIG_WM831X_WATCHDOG=y
CONFIG_WM8350_WATCHDOG=y
CONFIG_XILINX_WATCHDOG=y
CONFIG_ZIIRAVE_WATCHDOG=y
CONFIG_RAVE_SP_WATCHDOG=y
CONFIG_MLX_WDT=y
CONFIG_CADENCE_WATCHDOG=y
CONFIG_DW_WATCHDOG=y
CONFIG_RN5T618_WATCHDOG=y
CONFIG_TWL4030_WATCHDOG=y
CONFIG_MAX63XX_WATCHDOG=y
CONFIG_MAX77620_WATCHDOG=y
CONFIG_RETU_WATCHDOG=y
CONFIG_STPMIC1_WATCHDOG=y
CONFIG_ACQUIRE_WDT=y
CONFIG_ADVANTECH_WDT=y
CONFIG_ALIM1535_WDT=y
CONFIG_ALIM7101_WDT=y
CONFIG_EBC_C384_WDT=y
CONFIG_EXAR_WDT=y
CONFIG_F71808E_WDT=y
# CONFIG_SP5100_TCO is not set
CONFIG_SBC_FITPC2_WATCHDOG=y
# CONFIG_EUROTECH_WDT is not set
CONFIG_IB700_WDT=y
CONFIG_IBMASR=y
CONFIG_WAFER_WDT=y
CONFIG_I6300ESB_WDT=y
CONFIG_IE6XX_WDT=y
CONFIG_INTEL_MID_WATCHDOG=y
CONFIG_ITCO_WDT=y
CONFIG_ITCO_VENDOR_SUPPORT=y
CONFIG_IT8712F_WDT=y
CONFIG_IT87_WDT=y
CONFIG_HP_WATCHDOG=y
CONFIG_HPWDT_NMI_DECODING=y
CONFIG_KEMPLD_WDT=y
CONFIG_SC1200_WDT=y
CONFIG_PC87413_WDT=y
CONFIG_NV_TCO=y
CONFIG_60XX_WDT=y
CONFIG_CPU5_WDT=y
CONFIG_SMSC_SCH311X_WDT=y
CONFIG_SMSC37B787_WDT=y
CONFIG_TQMX86_WDT=y
CONFIG_VIA_WDT=y
CONFIG_W83627HF_WDT=y
CONFIG_W83877F_WDT=y
CONFIG_W83977F_WDT=y
CONFIG_MACHZ_WDT=y
CONFIG_SBC_EPX_C3_WATCHDOG=y
CONFIG_INTEL_MEI_WDT=y
CONFIG_NI903X_WDT=y
CONFIG_NIC7018_WDT=y
CONFIG_SIEMENS_SIMATIC_IPC_WDT=y
CONFIG_MEN_A21_WDT=y
CONFIG_XEN_WDT=y

#
# PCI-based Watchdog Cards
#
CONFIG_PCIPCWATCHDOG=y
CONFIG_WDTPCI=y

#
# USB-based Watchdog Cards
#
CONFIG_USBPCWATCHDOG=y
CONFIG_SSB_POSSIBLE=y
CONFIG_SSB=y
CONFIG_SSB_SPROM=y
CONFIG_SSB_BLOCKIO=y
CONFIG_SSB_PCIHOST_POSSIBLE=y
CONFIG_SSB_PCIHOST=y
CONFIG_SSB_B43_PCI_BRIDGE=y
CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
CONFIG_SSB_PCMCIAHOST=y
CONFIG_SSB_SDIOHOST_POSSIBLE=y
CONFIG_SSB_SDIOHOST=y
CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
CONFIG_SSB_DRIVER_PCICORE=y
CONFIG_SSB_DRIVER_GPIO=y
CONFIG_BCMA_POSSIBLE=y
CONFIG_BCMA=y
CONFIG_BCMA_BLOCKIO=y
CONFIG_BCMA_HOST_PCI_POSSIBLE=y
CONFIG_BCMA_HOST_PCI=y
CONFIG_BCMA_HOST_SOC=y
CONFIG_BCMA_DRIVER_PCI=y
CONFIG_BCMA_SFLASH=y
CONFIG_BCMA_DRIVER_GMAC_CMN=y
CONFIG_BCMA_DRIVER_GPIO=y
CONFIG_BCMA_DEBUG=y

#
# Multifunction device drivers
#
CONFIG_MFD_CORE=y
CONFIG_MFD_ACT8945A=y
CONFIG_MFD_AS3711=y
CONFIG_MFD_AS3722=y
CONFIG_PMIC_ADP5520=y
CONFIG_MFD_AAT2870_CORE=y
CONFIG_MFD_ATMEL_FLEXCOM=y
CONFIG_MFD_ATMEL_HLCDC=y
CONFIG_MFD_BCM590XX=y
CONFIG_MFD_BD9571MWV=y
CONFIG_MFD_AXP20X=y
CONFIG_MFD_AXP20X_I2C=y
CONFIG_MFD_CROS_EC_DEV=y
CONFIG_MFD_MADERA=y
CONFIG_MFD_MADERA_I2C=y
CONFIG_MFD_MADERA_SPI=y
CONFIG_MFD_CS47L15=y
CONFIG_MFD_CS47L35=y
CONFIG_MFD_CS47L85=y
CONFIG_MFD_CS47L90=y
CONFIG_MFD_CS47L92=y
CONFIG_PMIC_DA903X=y
CONFIG_PMIC_DA9052=y
CONFIG_MFD_DA9052_SPI=y
CONFIG_MFD_DA9052_I2C=y
CONFIG_MFD_DA9055=y
CONFIG_MFD_DA9062=y
CONFIG_MFD_DA9063=y
CONFIG_MFD_DA9150=y
CONFIG_MFD_DLN2=y
CONFIG_MFD_GATEWORKS_GSC=y
CONFIG_MFD_MC13XXX=y
CONFIG_MFD_MC13XXX_SPI=y
CONFIG_MFD_MC13XXX_I2C=y
CONFIG_MFD_MP2629=y
CONFIG_MFD_HI6421_PMIC=y
CONFIG_MFD_HI6421_SPMI=y
CONFIG_HTC_PASIC3=y
# CONFIG_HTC_I2CPLD is not set
CONFIG_MFD_INTEL_QUARK_I2C_GPIO=y
CONFIG_LPC_ICH=y
CONFIG_LPC_SCH=y
CONFIG_INTEL_SOC_PMIC=y
CONFIG_INTEL_SOC_PMIC_BXTWC=y
CONFIG_INTEL_SOC_PMIC_CHTWC=y
CONFIG_INTEL_SOC_PMIC_CHTDC_TI=y
CONFIG_INTEL_SOC_PMIC_MRFLD=y
CONFIG_MFD_INTEL_LPSS=y
CONFIG_MFD_INTEL_LPSS_ACPI=y
CONFIG_MFD_INTEL_LPSS_PCI=y
CONFIG_MFD_INTEL_PMC_BXT=y
CONFIG_MFD_IQS62X=y
CONFIG_MFD_JANZ_CMODIO=y
CONFIG_MFD_KEMPLD=y
CONFIG_MFD_88PM800=y
CONFIG_MFD_88PM805=y
CONFIG_MFD_88PM860X=y
CONFIG_MFD_MAX14577=y
CONFIG_MFD_MAX77620=y
CONFIG_MFD_MAX77650=y
CONFIG_MFD_MAX77686=y
CONFIG_MFD_MAX77693=y
CONFIG_MFD_MAX77714=y
CONFIG_MFD_MAX77843=y
CONFIG_MFD_MAX8907=y
CONFIG_MFD_MAX8925=y
CONFIG_MFD_MAX8997=y
CONFIG_MFD_MAX8998=y
CONFIG_MFD_MT6360=y
CONFIG_MFD_MT6370=y
CONFIG_MFD_MT6397=y
CONFIG_MFD_MENF21BMC=y
CONFIG_MFD_OCELOT=y
CONFIG_EZX_PCAP=y
CONFIG_MFD_CPCAP=y
CONFIG_MFD_VIPERBOARD=y
CONFIG_MFD_NTXEC=y
CONFIG_MFD_RETU=y
CONFIG_MFD_PCF50633=y
CONFIG_PCF50633_ADC=y
CONFIG_PCF50633_GPIO=y
CONFIG_UCB1400_CORE=y
CONFIG_MFD_SY7636A=y
CONFIG_MFD_RDC321X=y
CONFIG_MFD_RT4831=y
CONFIG_MFD_RT5033=y
CONFIG_MFD_RT5120=y
CONFIG_MFD_RC5T583=y
CONFIG_MFD_RK808=y
CONFIG_MFD_RN5T618=y
CONFIG_MFD_SEC_CORE=y
CONFIG_MFD_SI476X_CORE=y
CONFIG_MFD_SIMPLE_MFD_I2C=y
CONFIG_MFD_SM501=y
CONFIG_MFD_SM501_GPIO=y
CONFIG_MFD_SKY81452=y
CONFIG_MFD_STMPE=y

#
# STMicroelectronics STMPE Interface Drivers
#
CONFIG_STMPE_I2C=y
CONFIG_STMPE_SPI=y
# end of STMicroelectronics STMPE Interface Drivers

CONFIG_MFD_SYSCON=y
CONFIG_MFD_TI_AM335X_TSCADC=y
CONFIG_MFD_LP3943=y
CONFIG_MFD_LP8788=y
CONFIG_MFD_TI_LMU=y
CONFIG_MFD_PALMAS=y
CONFIG_TPS6105X=y
# CONFIG_TPS65010 is not set
CONFIG_TPS6507X=y
CONFIG_MFD_TPS65086=y
CONFIG_MFD_TPS65090=y
CONFIG_MFD_TPS65217=y
CONFIG_MFD_TI_LP873X=y
CONFIG_MFD_TI_LP87565=y
CONFIG_MFD_TPS65218=y
CONFIG_MFD_TPS6586X=y
CONFIG_MFD_TPS65910=y
CONFIG_MFD_TPS65912=y
CONFIG_MFD_TPS65912_I2C=y
CONFIG_MFD_TPS65912_SPI=y
CONFIG_TWL4030_CORE=y
CONFIG_MFD_TWL4030_AUDIO=y
CONFIG_TWL6040_CORE=y
CONFIG_MFD_WL1273_CORE=y
CONFIG_MFD_LM3533=y
CONFIG_MFD_TC3589X=y
CONFIG_MFD_TQMX86=y
CONFIG_MFD_VX855=y
CONFIG_MFD_LOCHNAGAR=y
CONFIG_MFD_ARIZONA=y
CONFIG_MFD_ARIZONA_I2C=y
CONFIG_MFD_ARIZONA_SPI=y
CONFIG_MFD_CS47L24=y
CONFIG_MFD_WM5102=y
CONFIG_MFD_WM5110=y
CONFIG_MFD_WM8997=y
CONFIG_MFD_WM8998=y
CONFIG_MFD_WM8400=y
CONFIG_MFD_WM831X=y
CONFIG_MFD_WM831X_I2C=y
CONFIG_MFD_WM831X_SPI=y
CONFIG_MFD_WM8350=y
CONFIG_MFD_WM8350_I2C=y
CONFIG_MFD_WM8994=y
CONFIG_MFD_ROHM_BD718XX=y
CONFIG_MFD_ROHM_BD71828=y
CONFIG_MFD_ROHM_BD957XMUF=y
CONFIG_MFD_STPMIC1=y
CONFIG_MFD_STMFX=y
CONFIG_MFD_WCD934X=y
CONFIG_MFD_ATC260X=y
CONFIG_MFD_ATC260X_I2C=y
CONFIG_MFD_QCOM_PM8008=y
CONFIG_RAVE_SP_CORE=y
CONFIG_MFD_INTEL_M10_BMC=y
CONFIG_MFD_RSMU_I2C=y
CONFIG_MFD_RSMU_SPI=y
# end of Multifunction device drivers

CONFIG_REGULATOR=y
CONFIG_REGULATOR_DEBUG=y
CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_VIRTUAL_CONSUMER=y
CONFIG_REGULATOR_USERSPACE_CONSUMER=y
CONFIG_REGULATOR_88PG86X=y
CONFIG_REGULATOR_88PM800=y
CONFIG_REGULATOR_88PM8607=y
CONFIG_REGULATOR_ACT8865=y
CONFIG_REGULATOR_ACT8945A=y
CONFIG_REGULATOR_AD5398=y
CONFIG_REGULATOR_AAT2870=y
CONFIG_REGULATOR_ARIZONA_LDO1=y
CONFIG_REGULATOR_ARIZONA_MICSUPP=y
CONFIG_REGULATOR_AS3711=y
CONFIG_REGULATOR_AS3722=y
CONFIG_REGULATOR_ATC260X=y
CONFIG_REGULATOR_AXP20X=y
CONFIG_REGULATOR_BCM590XX=y
CONFIG_REGULATOR_BD71815=y
CONFIG_REGULATOR_BD71828=y
CONFIG_REGULATOR_BD718XX=y
CONFIG_REGULATOR_BD9571MWV=y
CONFIG_REGULATOR_BD957XMUF=y
CONFIG_REGULATOR_CPCAP=y
CONFIG_REGULATOR_CROS_EC=y
CONFIG_REGULATOR_DA9052=y
CONFIG_REGULATOR_DA9055=y
CONFIG_REGULATOR_DA9062=y
CONFIG_REGULATOR_DA9063=y
CONFIG_REGULATOR_DA9121=y
CONFIG_REGULATOR_DA9210=y
CONFIG_REGULATOR_DA9211=y
CONFIG_REGULATOR_FAN53555=y
CONFIG_REGULATOR_FAN53880=y
CONFIG_REGULATOR_GPIO=y
CONFIG_REGULATOR_HI6421=y
CONFIG_REGULATOR_HI6421V530=y
CONFIG_REGULATOR_HI6421V600=y
CONFIG_REGULATOR_ISL9305=y
CONFIG_REGULATOR_ISL6271A=y
CONFIG_REGULATOR_LM363X=y
CONFIG_REGULATOR_LOCHNAGAR=y
CONFIG_REGULATOR_LP3971=y
CONFIG_REGULATOR_LP3972=y
CONFIG_REGULATOR_LP872X=y
CONFIG_REGULATOR_LP873X=y
CONFIG_REGULATOR_LP8755=y
CONFIG_REGULATOR_LP87565=y
CONFIG_REGULATOR_LP8788=y
CONFIG_REGULATOR_LTC3589=y
CONFIG_REGULATOR_LTC3676=y
CONFIG_REGULATOR_MAX14577=y
CONFIG_REGULATOR_MAX1586=y
CONFIG_REGULATOR_MAX77620=y
CONFIG_REGULATOR_MAX77650=y
CONFIG_REGULATOR_MAX8649=y
CONFIG_REGULATOR_MAX8660=y
CONFIG_REGULATOR_MAX8893=y
CONFIG_REGULATOR_MAX8907=y
CONFIG_REGULATOR_MAX8925=y
CONFIG_REGULATOR_MAX8952=y
CONFIG_REGULATOR_MAX8973=y
CONFIG_REGULATOR_MAX8997=y
CONFIG_REGULATOR_MAX8998=y
CONFIG_REGULATOR_MAX20086=y
CONFIG_REGULATOR_MAX77686=y
CONFIG_REGULATOR_MAX77693=y
CONFIG_REGULATOR_MAX77802=y
CONFIG_REGULATOR_MAX77826=y
CONFIG_REGULATOR_MC13XXX_CORE=y
CONFIG_REGULATOR_MC13783=y
CONFIG_REGULATOR_MC13892=y
CONFIG_REGULATOR_MCP16502=y
CONFIG_REGULATOR_MP5416=y
CONFIG_REGULATOR_MP8859=y
CONFIG_REGULATOR_MP886X=y
CONFIG_REGULATOR_MPQ7920=y
CONFIG_REGULATOR_MT6311=y
CONFIG_REGULATOR_MT6315=y
CONFIG_REGULATOR_MT6323=y
CONFIG_REGULATOR_MT6331=y
CONFIG_REGULATOR_MT6332=y
CONFIG_REGULATOR_MT6358=y
CONFIG_REGULATOR_MT6359=y
CONFIG_REGULATOR_MT6360=y
CONFIG_REGULATOR_MT6370=y
CONFIG_REGULATOR_MT6397=y
CONFIG_REGULATOR_PALMAS=y
CONFIG_REGULATOR_PCA9450=y
CONFIG_REGULATOR_PCAP=y
CONFIG_REGULATOR_PCF50633=y
CONFIG_REGULATOR_PF8X00=y
CONFIG_REGULATOR_PFUZE100=y
CONFIG_REGULATOR_PV88060=y
CONFIG_REGULATOR_PV88080=y
CONFIG_REGULATOR_PV88090=y
CONFIG_REGULATOR_PWM=y
CONFIG_REGULATOR_QCOM_SPMI=y
CONFIG_REGULATOR_QCOM_USB_VBUS=y
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=y
CONFIG_REGULATOR_RC5T583=y
CONFIG_REGULATOR_RK808=y
CONFIG_REGULATOR_RN5T618=y
CONFIG_REGULATOR_ROHM=y
CONFIG_REGULATOR_RT4801=y
CONFIG_REGULATOR_RT4831=y
CONFIG_REGULATOR_RT5033=y
CONFIG_REGULATOR_RT5120=y
CONFIG_REGULATOR_RT5190A=y
CONFIG_REGULATOR_RT5759=y
CONFIG_REGULATOR_RT6160=y
CONFIG_REGULATOR_RT6245=y
CONFIG_REGULATOR_RTQ2134=y
CONFIG_REGULATOR_RTMV20=y
CONFIG_REGULATOR_RTQ6752=y
CONFIG_REGULATOR_S2MPA01=y
CONFIG_REGULATOR_S2MPS11=y
CONFIG_REGULATOR_S5M8767=y
CONFIG_REGULATOR_SKY81452=y
CONFIG_REGULATOR_SLG51000=y
CONFIG_REGULATOR_STPMIC1=y
CONFIG_REGULATOR_SY7636A=y
CONFIG_REGULATOR_SY8106A=y
CONFIG_REGULATOR_SY8824X=y
CONFIG_REGULATOR_SY8827N=y
CONFIG_REGULATOR_TPS51632=y
CONFIG_REGULATOR_TPS6105X=y
CONFIG_REGULATOR_TPS62360=y
CONFIG_REGULATOR_TPS6286X=y
CONFIG_REGULATOR_TPS65023=y
CONFIG_REGULATOR_TPS6507X=y
CONFIG_REGULATOR_TPS65086=y
CONFIG_REGULATOR_TPS65090=y
CONFIG_REGULATOR_TPS65132=y
CONFIG_REGULATOR_TPS65217=y
CONFIG_REGULATOR_TPS65218=y
CONFIG_REGULATOR_TPS6524X=y
CONFIG_REGULATOR_TPS6586X=y
CONFIG_REGULATOR_TPS65910=y
CONFIG_REGULATOR_TPS65912=y
CONFIG_REGULATOR_TPS68470=y
CONFIG_REGULATOR_TWL4030=y
CONFIG_REGULATOR_VCTRL=y
CONFIG_REGULATOR_WM831X=y
CONFIG_REGULATOR_WM8350=y
CONFIG_REGULATOR_WM8400=y
CONFIG_REGULATOR_WM8994=y
CONFIG_REGULATOR_QCOM_LABIBB=y
CONFIG_RC_CORE=y
CONFIG_BPF_LIRC_MODE2=y
CONFIG_LIRC=y
CONFIG_RC_MAP=y
CONFIG_RC_DECODERS=y
CONFIG_IR_IMON_DECODER=y
CONFIG_IR_JVC_DECODER=y
CONFIG_IR_MCE_KBD_DECODER=y
CONFIG_IR_NEC_DECODER=y
CONFIG_IR_RC5_DECODER=y
CONFIG_IR_RC6_DECODER=y
CONFIG_IR_RCMM_DECODER=y
CONFIG_IR_SANYO_DECODER=y
CONFIG_IR_SHARP_DECODER=y
CONFIG_IR_SONY_DECODER=y
CONFIG_IR_XMP_DECODER=y
CONFIG_RC_DEVICES=y
CONFIG_IR_ENE=y
CONFIG_IR_FINTEK=y
CONFIG_IR_GPIO_CIR=y
CONFIG_IR_GPIO_TX=y
CONFIG_IR_HIX5HD2=y
CONFIG_IR_IGORPLUGUSB=y
CONFIG_IR_IGUANA=y
CONFIG_IR_IMON=y
CONFIG_IR_IMON_RAW=y
CONFIG_IR_ITE_CIR=y
CONFIG_IR_MCEUSB=y
CONFIG_IR_NUVOTON=y
CONFIG_IR_PWM_TX=y
CONFIG_IR_REDRAT3=y
CONFIG_IR_SERIAL=y
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SPI=y
CONFIG_IR_STREAMZAP=y
CONFIG_IR_TOY=y
CONFIG_IR_TTUSBIR=y
CONFIG_IR_WINBOND_CIR=y
CONFIG_RC_ATI_REMOTE=y
CONFIG_RC_LOOPBACK=y
CONFIG_RC_XBOX_DVD=y
CONFIG_CEC_CORE=y
CONFIG_CEC_NOTIFIER=y

#
# CEC support
#
CONFIG_MEDIA_CEC_RC=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_CEC_CH7322=y
CONFIG_CEC_CROS_EC=y
CONFIG_CEC_SECO=y
CONFIG_CEC_SECO_RC=y
CONFIG_USB_PULSE8_CEC=y
CONFIG_USB_RAINSHADOW_CEC=y
# end of CEC support

CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_SUPPORT_FILTER=y
CONFIG_MEDIA_SUBDRV_AUTOSELECT=y

#
# Media device types
#
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_SDR_SUPPORT=y
CONFIG_MEDIA_PLATFORM_SUPPORT=y
# CONFIG_MEDIA_TEST_SUPPORT is not set
# end of Media device types

CONFIG_VIDEO_DEV=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_DVB_CORE=y

#
# Video4Linux options
#
CONFIG_VIDEO_V4L2_I2C=y
CONFIG_VIDEO_V4L2_SUBDEV_API=y
CONFIG_VIDEO_ADV_DEBUG=y
CONFIG_VIDEO_FIXED_MINOR_RANGES=y
CONFIG_VIDEO_TUNER=y
CONFIG_V4L2_MEM2MEM_DEV=y
CONFIG_V4L2_FLASH_LED_CLASS=y
CONFIG_V4L2_FWNODE=y
CONFIG_V4L2_ASYNC=y
CONFIG_VIDEOBUF_GEN=y
CONFIG_VIDEOBUF_DMA_SG=y
CONFIG_VIDEOBUF_VMALLOC=y
# end of Video4Linux options

#
# Media controller options
#
CONFIG_MEDIA_CONTROLLER_DVB=y
# end of Media controller options

#
# Digital TV options
#
CONFIG_DVB_MMAP=y
CONFIG_DVB_NET=y
CONFIG_DVB_MAX_ADAPTERS=16
CONFIG_DVB_DYNAMIC_MINORS=y
CONFIG_DVB_DEMUX_SECTION_LOSS_LOG=y
CONFIG_DVB_ULE_DEBUG=y
# end of Digital TV options

#
# Media drivers
#

#
# Drivers filtered as selected at 'Filter media drivers'
#

#
# Media drivers
#
CONFIG_MEDIA_USB_SUPPORT=y

#
# Webcam devices
#
CONFIG_USB_GSPCA=y
CONFIG_USB_GSPCA_BENQ=y
CONFIG_USB_GSPCA_CONEX=y
CONFIG_USB_GSPCA_CPIA1=y
CONFIG_USB_GSPCA_DTCS033=y
CONFIG_USB_GSPCA_ETOMS=y
CONFIG_USB_GSPCA_FINEPIX=y
CONFIG_USB_GSPCA_JEILINJ=y
CONFIG_USB_GSPCA_JL2005BCD=y
CONFIG_USB_GSPCA_KINECT=y
CONFIG_USB_GSPCA_KONICA=y
CONFIG_USB_GSPCA_MARS=y
CONFIG_USB_GSPCA_MR97310A=y
CONFIG_USB_GSPCA_NW80X=y
CONFIG_USB_GSPCA_OV519=y
CONFIG_USB_GSPCA_OV534=y
CONFIG_USB_GSPCA_OV534_9=y
CONFIG_USB_GSPCA_PAC207=y
CONFIG_USB_GSPCA_PAC7302=y
CONFIG_USB_GSPCA_PAC7311=y
CONFIG_USB_GSPCA_SE401=y
CONFIG_USB_GSPCA_SN9C2028=y
CONFIG_USB_GSPCA_SN9C20X=y
CONFIG_USB_GSPCA_SONIXB=y
CONFIG_USB_GSPCA_SONIXJ=y
CONFIG_USB_GSPCA_SPCA1528=y
CONFIG_USB_GSPCA_SPCA500=y
CONFIG_USB_GSPCA_SPCA501=y
CONFIG_USB_GSPCA_SPCA505=y
CONFIG_USB_GSPCA_SPCA506=y
CONFIG_USB_GSPCA_SPCA508=y
CONFIG_USB_GSPCA_SPCA561=y
CONFIG_USB_GSPCA_SQ905=y
CONFIG_USB_GSPCA_SQ905C=y
CONFIG_USB_GSPCA_SQ930X=y
CONFIG_USB_GSPCA_STK014=y
CONFIG_USB_GSPCA_STK1135=y
CONFIG_USB_GSPCA_STV0680=y
CONFIG_USB_GSPCA_SUNPLUS=y
CONFIG_USB_GSPCA_T613=y
CONFIG_USB_GSPCA_TOPRO=y
CONFIG_USB_GSPCA_TOUPTEK=y
CONFIG_USB_GSPCA_TV8532=y
CONFIG_USB_GSPCA_VC032X=y
CONFIG_USB_GSPCA_VICAM=y
CONFIG_USB_GSPCA_XIRLINK_CIT=y
CONFIG_USB_GSPCA_ZC3XX=y
CONFIG_USB_GL860=y
CONFIG_USB_M5602=y
CONFIG_USB_STV06XX=y
CONFIG_USB_PWC=y
CONFIG_USB_PWC_DEBUG=y
CONFIG_USB_PWC_INPUT_EVDEV=y
CONFIG_USB_S2255=y
CONFIG_VIDEO_USBTV=y
CONFIG_USB_VIDEO_CLASS=y
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y

#
# Analog TV USB devices
#
CONFIG_VIDEO_GO7007=y
CONFIG_VIDEO_GO7007_USB=y
CONFIG_VIDEO_GO7007_LOADER=y
CONFIG_VIDEO_GO7007_USB_S2250_BOARD=y
CONFIG_VIDEO_HDPVR=y
CONFIG_VIDEO_PVRUSB2=y
CONFIG_VIDEO_PVRUSB2_SYSFS=y
CONFIG_VIDEO_PVRUSB2_DVB=y
CONFIG_VIDEO_PVRUSB2_DEBUGIFC=y
CONFIG_VIDEO_STK1160_COMMON=y
CONFIG_VIDEO_STK1160=y

#
# Analog/digital TV USB devices
#
CONFIG_VIDEO_AU0828=y
CONFIG_VIDEO_AU0828_V4L2=y
CONFIG_VIDEO_AU0828_RC=y
CONFIG_VIDEO_CX231XX=y
CONFIG_VIDEO_CX231XX_RC=y
CONFIG_VIDEO_CX231XX_ALSA=y
CONFIG_VIDEO_CX231XX_DVB=y

#
# Digital TV USB devices
#
CONFIG_DVB_AS102=y
CONFIG_DVB_B2C2_FLEXCOP_USB=y
CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG=y
CONFIG_DVB_USB_V2=y
CONFIG_DVB_USB_AF9015=y
CONFIG_DVB_USB_AF9035=y
CONFIG_DVB_USB_ANYSEE=y
CONFIG_DVB_USB_AU6610=y
CONFIG_DVB_USB_AZ6007=y
CONFIG_DVB_USB_CE6230=y
CONFIG_DVB_USB_DVBSKY=y
CONFIG_DVB_USB_EC168=y
CONFIG_DVB_USB_GL861=y
CONFIG_DVB_USB_LME2510=y
CONFIG_DVB_USB_MXL111SF=y
CONFIG_DVB_USB_RTL28XXU=y
CONFIG_DVB_USB_ZD1301=y
CONFIG_DVB_USB=y
CONFIG_DVB_USB_DEBUG=y
CONFIG_DVB_USB_A800=y
CONFIG_DVB_USB_AF9005=y
CONFIG_DVB_USB_AF9005_REMOTE=y
CONFIG_DVB_USB_AZ6027=y
CONFIG_DVB_USB_CINERGY_T2=y
CONFIG_DVB_USB_CXUSB=y
CONFIG_DVB_USB_CXUSB_ANALOG=y
CONFIG_DVB_USB_DIB0700=y
CONFIG_DVB_USB_DIB3000MC=y
CONFIG_DVB_USB_DIBUSB_MB=y
CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
CONFIG_DVB_USB_DIBUSB_MC=y
CONFIG_DVB_USB_DIGITV=y
CONFIG_DVB_USB_DTT200U=y
CONFIG_DVB_USB_DTV5100=y
CONFIG_DVB_USB_DW2102=y
CONFIG_DVB_USB_GP8PSK=y
CONFIG_DVB_USB_M920X=y
CONFIG_DVB_USB_NOVA_T_USB2=y
CONFIG_DVB_USB_OPERA1=y
CONFIG_DVB_USB_PCTV452E=y
CONFIG_DVB_USB_TECHNISAT_USB2=y
CONFIG_DVB_USB_TTUSB2=y
CONFIG_DVB_USB_UMT_010=y
CONFIG_DVB_USB_VP702X=y
CONFIG_DVB_USB_VP7045=y
CONFIG_SMS_USB_DRV=y
CONFIG_DVB_TTUSB_BUDGET=y
CONFIG_DVB_TTUSB_DEC=y

#
# Webcam, TV (analog/digital) USB devices
#
CONFIG_VIDEO_EM28XX=y
CONFIG_VIDEO_EM28XX_V4L2=y
CONFIG_VIDEO_EM28XX_ALSA=y
CONFIG_VIDEO_EM28XX_DVB=y
CONFIG_VIDEO_EM28XX_RC=y

#
# Software defined radio USB devices
#
CONFIG_USB_AIRSPY=y
CONFIG_USB_HACKRF=y
CONFIG_USB_MSI2500=y
CONFIG_MEDIA_PCI_SUPPORT=y

#
# Media capture support
#
CONFIG_VIDEO_SOLO6X10=y
CONFIG_VIDEO_TW5864=y
CONFIG_VIDEO_TW68=y
CONFIG_VIDEO_TW686X=y
CONFIG_VIDEO_ZORAN=y
CONFIG_VIDEO_ZORAN_DC30=y
CONFIG_VIDEO_ZORAN_ZR36060=y
CONFIG_VIDEO_ZORAN_BUZ=y
CONFIG_VIDEO_ZORAN_DC10=y
CONFIG_VIDEO_ZORAN_LML33=y
CONFIG_VIDEO_ZORAN_LML33R10=y
CONFIG_VIDEO_ZORAN_AVS6EYES=y

#
# Media capture/analog TV support
#
CONFIG_VIDEO_DT3155=y
CONFIG_VIDEO_IVTV=y
CONFIG_VIDEO_IVTV_ALSA=y
CONFIG_VIDEO_FB_IVTV=y
CONFIG_VIDEO_FB_IVTV_FORCE_PAT=y

#
# Media capture/analog/hybrid TV support
#
CONFIG_VIDEO_BT848=y
CONFIG_DVB_BT8XX=y
CONFIG_VIDEO_CX18=y
CONFIG_VIDEO_CX18_ALSA=y
CONFIG_VIDEO_CX23885=y
CONFIG_MEDIA_ALTERA_CI=y
CONFIG_VIDEO_CX25821=y
CONFIG_VIDEO_CX25821_ALSA=y
CONFIG_VIDEO_CX88=y
CONFIG_VIDEO_CX88_ALSA=y
CONFIG_VIDEO_CX88_BLACKBIRD=y
CONFIG_VIDEO_CX88_DVB=y
CONFIG_VIDEO_CX88_ENABLE_VP3054=y
CONFIG_VIDEO_CX88_VP3054=y
CONFIG_VIDEO_CX88_MPEG=y
CONFIG_VIDEO_SAA7134=y
CONFIG_VIDEO_SAA7134_ALSA=y
CONFIG_VIDEO_SAA7134_RC=y
CONFIG_VIDEO_SAA7134_DVB=y
CONFIG_VIDEO_SAA7134_GO7007=y
CONFIG_VIDEO_SAA7164=y

#
# Media digital TV PCI Adapters
#
CONFIG_DVB_B2C2_FLEXCOP_PCI=y
CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG=y
CONFIG_DVB_DDBRIDGE=y
CONFIG_DVB_DDBRIDGE_MSIENABLE=y
CONFIG_DVB_DM1105=y
CONFIG_MANTIS_CORE=y
CONFIG_DVB_MANTIS=y
CONFIG_DVB_HOPPER=y
CONFIG_DVB_NETUP_UNIDVB=y
CONFIG_DVB_NGENE=y
CONFIG_DVB_PLUTO2=y
CONFIG_DVB_PT1=y
CONFIG_DVB_PT3=y
CONFIG_DVB_SMIPCIE=y
CONFIG_VIDEO_IPU3_CIO2=y
CONFIG_CIO2_BRIDGE=y
CONFIG_RADIO_ADAPTERS=y
CONFIG_RADIO_MAXIRADIO=y
CONFIG_RADIO_SAA7706H=y
CONFIG_RADIO_SHARK=y
CONFIG_RADIO_SHARK2=y
CONFIG_RADIO_SI4713=y
CONFIG_RADIO_SI476X=y
CONFIG_RADIO_TEA575X=y
CONFIG_RADIO_TEA5764=y
CONFIG_RADIO_TEA5764_XTAL=y
CONFIG_RADIO_TEF6862=y
CONFIG_RADIO_WL1273=y
CONFIG_USB_DSBR=y
CONFIG_USB_KEENE=y
CONFIG_USB_MA901=y
CONFIG_USB_MR800=y
CONFIG_USB_RAREMONO=y
CONFIG_RADIO_SI470X=y
CONFIG_USB_SI470X=y
CONFIG_I2C_SI470X=y
CONFIG_USB_SI4713=y
CONFIG_PLATFORM_SI4713=y
CONFIG_I2C_SI4713=y
CONFIG_RADIO_WL128X=y
CONFIG_MEDIA_PLATFORM_DRIVERS=y
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_SDR_PLATFORM_DRIVERS=y
CONFIG_DVB_PLATFORM_DRIVERS=y
CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_VIDEO_MEM2MEM_DEINTERLACE=y
CONFIG_VIDEO_MUX=y

#
# Allegro DVT media platform drivers
#

#
# Amlogic media platform drivers
#

#
# Amphion drivers
#

#
# Aspeed media platform drivers
#
CONFIG_VIDEO_ASPEED=y

#
# Atmel media platform drivers
#

#
# Cadence media platform drivers
#
CONFIG_VIDEO_CADENCE_CSI2RX=y
CONFIG_VIDEO_CADENCE_CSI2TX=y

#
# Chips&Media media platform drivers
#

#
# Intel media platform drivers
#

#
# Marvell media platform drivers
#
CONFIG_VIDEO_CAFE_CCIC=y

#
# Mediatek media platform drivers
#

#
# NVidia media platform drivers
#

#
# NXP media platform drivers
#

#
# Qualcomm media platform drivers
#

#
# Renesas media platform drivers
#

#
# Rockchip media platform drivers
#

#
# Samsung media platform drivers
#

#
# STMicroelectronics media platform drivers
#

#
# Sunxi media platform drivers
#

#
# Texas Instruments drivers
#

#
# Verisilicon media platform drivers
#

#
# VIA media platform drivers
#
CONFIG_VIDEO_VIA_CAMERA=y

#
# Xilinx media platform drivers
#
CONFIG_VIDEO_XILINX=y
CONFIG_VIDEO_XILINX_CSI2RXSS=y
CONFIG_VIDEO_XILINX_TPG=y
CONFIG_VIDEO_XILINX_VTC=y

#
# MMC/SDIO DVB adapters
#
CONFIG_SMS_SDIO_DRV=y

#
# FireWire (IEEE 1394) Adapters
#
CONFIG_DVB_FIREDTV=y
CONFIG_DVB_FIREDTV_INPUT=y
CONFIG_MEDIA_COMMON_OPTIONS=y

#
# common driver options
#
CONFIG_CYPRESS_FIRMWARE=y
CONFIG_TTPCI_EEPROM=y
CONFIG_VIDEO_CX2341X=y
CONFIG_VIDEO_TVEEPROM=y
CONFIG_DVB_B2C2_FLEXCOP=y
CONFIG_DVB_B2C2_FLEXCOP_DEBUG=y
CONFIG_SMS_SIANO_MDTV=y
CONFIG_SMS_SIANO_RC=y
CONFIG_SMS_SIANO_DEBUGFS=y
CONFIG_VIDEOBUF2_CORE=y
CONFIG_VIDEOBUF2_V4L2=y
CONFIG_VIDEOBUF2_MEMOPS=y
CONFIG_VIDEOBUF2_DMA_CONTIG=y
CONFIG_VIDEOBUF2_VMALLOC=y
CONFIG_VIDEOBUF2_DMA_SG=y
CONFIG_VIDEOBUF2_DVB=y
# end of Media drivers

#
# Media ancillary drivers
#
CONFIG_MEDIA_ATTACH=y

#
# IR I2C driver auto-selected by 'Autoselect ancillary drivers'
#
CONFIG_VIDEO_IR_I2C=y

#
# Camera sensor devices
#
CONFIG_VIDEO_APTINA_PLL=y
CONFIG_VIDEO_CCS_PLL=y
CONFIG_VIDEO_AR0521=y
CONFIG_VIDEO_HI556=y
CONFIG_VIDEO_HI846=y
CONFIG_VIDEO_HI847=y
CONFIG_VIDEO_IMX208=y
CONFIG_VIDEO_IMX214=y
CONFIG_VIDEO_IMX219=y
CONFIG_VIDEO_IMX258=y
CONFIG_VIDEO_IMX274=y
CONFIG_VIDEO_IMX290=y
CONFIG_VIDEO_IMX319=y
CONFIG_VIDEO_IMX334=y
CONFIG_VIDEO_IMX335=y
CONFIG_VIDEO_IMX355=y
CONFIG_VIDEO_IMX412=y
CONFIG_VIDEO_MAX9271_LIB=y
CONFIG_VIDEO_MT9M001=y
CONFIG_VIDEO_MT9M032=y
CONFIG_VIDEO_MT9M111=y
CONFIG_VIDEO_MT9P031=y
CONFIG_VIDEO_MT9T001=y
CONFIG_VIDEO_MT9T112=y
CONFIG_VIDEO_MT9V011=y
CONFIG_VIDEO_MT9V032=y
CONFIG_VIDEO_MT9V111=y
CONFIG_VIDEO_NOON010PC30=y
CONFIG_VIDEO_OG01A1B=y
CONFIG_VIDEO_OV02A10=y
CONFIG_VIDEO_OV08D10=y
CONFIG_VIDEO_OV13858=y
CONFIG_VIDEO_OV13B10=y
CONFIG_VIDEO_OV2640=y
CONFIG_VIDEO_OV2659=y
CONFIG_VIDEO_OV2680=y
CONFIG_VIDEO_OV2685=y
CONFIG_VIDEO_OV2740=y
CONFIG_VIDEO_OV5640=y
CONFIG_VIDEO_OV5645=y
CONFIG_VIDEO_OV5647=y
CONFIG_VIDEO_OV5648=y
CONFIG_VIDEO_OV5670=y
CONFIG_VIDEO_OV5675=y
CONFIG_VIDEO_OV5693=y
CONFIG_VIDEO_OV5695=y
CONFIG_VIDEO_OV6650=y
CONFIG_VIDEO_OV7251=y
CONFIG_VIDEO_OV7640=y
CONFIG_VIDEO_OV7670=y
CONFIG_VIDEO_OV772X=y
CONFIG_VIDEO_OV7740=y
CONFIG_VIDEO_OV8856=y
CONFIG_VIDEO_OV8865=y
CONFIG_VIDEO_OV9282=y
CONFIG_VIDEO_OV9640=y
CONFIG_VIDEO_OV9650=y
CONFIG_VIDEO_OV9734=y
CONFIG_VIDEO_RDACM20=y
CONFIG_VIDEO_RDACM21=y
CONFIG_VIDEO_RJ54N1=y
CONFIG_VIDEO_S5C73M3=y
CONFIG_VIDEO_S5K4ECGX=y
CONFIG_VIDEO_S5K5BAF=y
CONFIG_VIDEO_S5K6A3=y
CONFIG_VIDEO_S5K6AA=y
CONFIG_VIDEO_SR030PC30=y
CONFIG_VIDEO_VS6624=y
CONFIG_VIDEO_CCS=y
CONFIG_VIDEO_ET8EK8=y
CONFIG_VIDEO_M5MOLS=y
# end of Camera sensor devices

#
# Lens drivers
#
CONFIG_VIDEO_AD5820=y
CONFIG_VIDEO_AK7375=y
CONFIG_VIDEO_DW9714=y
CONFIG_VIDEO_DW9768=y
CONFIG_VIDEO_DW9807_VCM=y
# end of Lens drivers

#
# Flash devices
#
CONFIG_VIDEO_ADP1653=y
CONFIG_VIDEO_LM3560=y
CONFIG_VIDEO_LM3646=y
# end of Flash devices

#
# Audio decoders, processors and mixers
#
CONFIG_VIDEO_CS3308=y
CONFIG_VIDEO_CS5345=y
CONFIG_VIDEO_CS53L32A=y
CONFIG_VIDEO_MSP3400=y
CONFIG_VIDEO_SONY_BTF_MPX=y
CONFIG_VIDEO_TDA1997X=y
CONFIG_VIDEO_TDA7432=y
CONFIG_VIDEO_TDA9840=y
CONFIG_VIDEO_TEA6415C=y
CONFIG_VIDEO_TEA6420=y
CONFIG_VIDEO_TLV320AIC23B=y
CONFIG_VIDEO_TVAUDIO=y
CONFIG_VIDEO_UDA1342=y
CONFIG_VIDEO_VP27SMPX=y
CONFIG_VIDEO_WM8739=y
CONFIG_VIDEO_WM8775=y
# end of Audio decoders, processors and mixers

#
# RDS decoders
#
CONFIG_VIDEO_SAA6588=y
# end of RDS decoders

#
# Video decoders
#
CONFIG_VIDEO_ADV7180=y
CONFIG_VIDEO_ADV7183=y
CONFIG_VIDEO_ADV748X=y
CONFIG_VIDEO_ADV7604=y
CONFIG_VIDEO_ADV7604_CEC=y
CONFIG_VIDEO_ADV7842=y
CONFIG_VIDEO_ADV7842_CEC=y
CONFIG_VIDEO_BT819=y
CONFIG_VIDEO_BT856=y
CONFIG_VIDEO_BT866=y
CONFIG_VIDEO_ISL7998X=y
CONFIG_VIDEO_KS0127=y
CONFIG_VIDEO_MAX9286=y
CONFIG_VIDEO_ML86V7667=y
CONFIG_VIDEO_SAA7110=y
CONFIG_VIDEO_SAA711X=y
CONFIG_VIDEO_TC358743=y
CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TVP514X=y
CONFIG_VIDEO_TVP5150=y
CONFIG_VIDEO_TVP7002=y
CONFIG_VIDEO_TW2804=y
CONFIG_VIDEO_TW9903=y
CONFIG_VIDEO_TW9906=y
CONFIG_VIDEO_TW9910=y
CONFIG_VIDEO_VPX3220=y

#
# Video and audio decoders
#
CONFIG_VIDEO_SAA717X=y
CONFIG_VIDEO_CX25840=y
# end of Video decoders

#
# Video encoders
#
CONFIG_VIDEO_AD9389B=y
CONFIG_VIDEO_ADV7170=y
CONFIG_VIDEO_ADV7175=y
CONFIG_VIDEO_ADV7343=y
CONFIG_VIDEO_ADV7393=y
CONFIG_VIDEO_AK881X=y
CONFIG_VIDEO_SAA7127=y
CONFIG_VIDEO_SAA7185=y
CONFIG_VIDEO_THS8200=y
# end of Video encoders

#
# Video improvement chips
#
CONFIG_VIDEO_UPD64031A=y
CONFIG_VIDEO_UPD64083=y
# end of Video improvement chips

#
# Audio/Video compression chips
#
CONFIG_VIDEO_SAA6752HS=y
# end of Audio/Video compression chips

#
# SDR tuner chips
#
CONFIG_SDR_MAX2175=y
# end of SDR tuner chips

#
# Miscellaneous helper chips
#
CONFIG_VIDEO_I2C=y
CONFIG_VIDEO_M52790=y
CONFIG_VIDEO_ST_MIPID02=y
CONFIG_VIDEO_THS7303=y
# end of Miscellaneous helper chips

#
# Media SPI Adapters
#
CONFIG_CXD2880_SPI_DRV=y
CONFIG_VIDEO_GS1662=y
# end of Media SPI Adapters

CONFIG_MEDIA_TUNER=y

#
# Customize TV tuners
#
CONFIG_MEDIA_TUNER_E4000=y
CONFIG_MEDIA_TUNER_FC0011=y
CONFIG_MEDIA_TUNER_FC0012=y
CONFIG_MEDIA_TUNER_FC0013=y
CONFIG_MEDIA_TUNER_FC2580=y
CONFIG_MEDIA_TUNER_IT913X=y
CONFIG_MEDIA_TUNER_M88RS6000T=y
CONFIG_MEDIA_TUNER_MAX2165=y
CONFIG_MEDIA_TUNER_MC44S803=y
CONFIG_MEDIA_TUNER_MSI001=y
CONFIG_MEDIA_TUNER_MT2060=y
CONFIG_MEDIA_TUNER_MT2063=y
CONFIG_MEDIA_TUNER_MT20XX=y
CONFIG_MEDIA_TUNER_MT2131=y
CONFIG_MEDIA_TUNER_MT2266=y
CONFIG_MEDIA_TUNER_MXL301RF=y
CONFIG_MEDIA_TUNER_MXL5005S=y
CONFIG_MEDIA_TUNER_MXL5007T=y
CONFIG_MEDIA_TUNER_QM1D1B0004=y
CONFIG_MEDIA_TUNER_QM1D1C0042=y
CONFIG_MEDIA_TUNER_QT1010=y
CONFIG_MEDIA_TUNER_R820T=y
CONFIG_MEDIA_TUNER_SI2157=y
CONFIG_MEDIA_TUNER_SIMPLE=y
CONFIG_MEDIA_TUNER_TDA18212=y
CONFIG_MEDIA_TUNER_TDA18218=y
CONFIG_MEDIA_TUNER_TDA18250=y
CONFIG_MEDIA_TUNER_TDA18271=y
CONFIG_MEDIA_TUNER_TDA827X=y
CONFIG_MEDIA_TUNER_TDA8290=y
CONFIG_MEDIA_TUNER_TDA9887=y
CONFIG_MEDIA_TUNER_TEA5761=y
CONFIG_MEDIA_TUNER_TEA5767=y
CONFIG_MEDIA_TUNER_TUA9001=y
CONFIG_MEDIA_TUNER_XC2028=y
CONFIG_MEDIA_TUNER_XC4000=y
CONFIG_MEDIA_TUNER_XC5000=y
# end of Customize TV tuners

#
# Customise DVB Frontends
#

#
# Multistandard (satellite) frontends
#
CONFIG_DVB_M88DS3103=y
CONFIG_DVB_MXL5XX=y
CONFIG_DVB_STB0899=y
CONFIG_DVB_STB6100=y
CONFIG_DVB_STV090x=y
CONFIG_DVB_STV0910=y
CONFIG_DVB_STV6110x=y
CONFIG_DVB_STV6111=y

#
# Multistandard (cable + terrestrial) frontends
#
CONFIG_DVB_DRXK=y
CONFIG_DVB_MN88472=y
CONFIG_DVB_MN88473=y
CONFIG_DVB_SI2165=y
CONFIG_DVB_TDA18271C2DD=y

#
# DVB-S (satellite) frontends
#
CONFIG_DVB_CX24110=y
CONFIG_DVB_CX24116=y
CONFIG_DVB_CX24117=y
CONFIG_DVB_CX24120=y
CONFIG_DVB_CX24123=y
CONFIG_DVB_DS3000=y
CONFIG_DVB_MB86A16=y
CONFIG_DVB_MT312=y
CONFIG_DVB_S5H1420=y
CONFIG_DVB_SI21XX=y
CONFIG_DVB_STB6000=y
CONFIG_DVB_STV0288=y
CONFIG_DVB_STV0299=y
CONFIG_DVB_STV0900=y
CONFIG_DVB_STV6110=y
CONFIG_DVB_TDA10071=y
CONFIG_DVB_TDA10086=y
CONFIG_DVB_TDA8083=y
CONFIG_DVB_TDA8261=y
CONFIG_DVB_TDA826X=y
CONFIG_DVB_TS2020=y
CONFIG_DVB_TUA6100=y
CONFIG_DVB_TUNER_CX24113=y
CONFIG_DVB_TUNER_ITD1000=y
CONFIG_DVB_VES1X93=y
CONFIG_DVB_ZL10036=y
CONFIG_DVB_ZL10039=y

#
# DVB-T (terrestrial) frontends
#
CONFIG_DVB_AF9013=y
CONFIG_DVB_AS102_FE=y
CONFIG_DVB_CX22700=y
CONFIG_DVB_CX22702=y
CONFIG_DVB_CXD2820R=y
CONFIG_DVB_CXD2841ER=y
CONFIG_DVB_DIB3000MB=y
CONFIG_DVB_DIB3000MC=y
CONFIG_DVB_DIB7000M=y
CONFIG_DVB_DIB7000P=y
CONFIG_DVB_DIB9000=y
CONFIG_DVB_DRXD=y
CONFIG_DVB_EC100=y
CONFIG_DVB_GP8PSK_FE=y
CONFIG_DVB_L64781=y
CONFIG_DVB_MT352=y
CONFIG_DVB_NXT6000=y
CONFIG_DVB_RTL2830=y
CONFIG_DVB_RTL2832=y
CONFIG_DVB_RTL2832_SDR=y
CONFIG_DVB_S5H1432=y
CONFIG_DVB_SI2168=y
CONFIG_DVB_SP887X=y
CONFIG_DVB_STV0367=y
CONFIG_DVB_TDA10048=y
CONFIG_DVB_TDA1004X=y
CONFIG_DVB_ZD1301_DEMOD=y
CONFIG_DVB_ZL10353=y
CONFIG_DVB_CXD2880=y

#
# DVB-C (cable) frontends
#
CONFIG_DVB_STV0297=y
CONFIG_DVB_TDA10021=y
CONFIG_DVB_TDA10023=y
CONFIG_DVB_VES1820=y

#
# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
#
CONFIG_DVB_AU8522=y
CONFIG_DVB_AU8522_DTV=y
CONFIG_DVB_AU8522_V4L=y
CONFIG_DVB_BCM3510=y
CONFIG_DVB_LG2160=y
CONFIG_DVB_LGDT3305=y
CONFIG_DVB_LGDT3306A=y
CONFIG_DVB_LGDT330X=y
CONFIG_DVB_MXL692=y
CONFIG_DVB_NXT200X=y
CONFIG_DVB_OR51132=y
CONFIG_DVB_OR51211=y
CONFIG_DVB_S5H1409=y
CONFIG_DVB_S5H1411=y

#
# ISDB-T (terrestrial) frontends
#
CONFIG_DVB_DIB8000=y
CONFIG_DVB_MB86A20S=y
CONFIG_DVB_S921=y

#
# ISDB-S (satellite) & ISDB-T (terrestrial) frontends
#
CONFIG_DVB_MN88443X=y
CONFIG_DVB_TC90522=y

#
# Digital terrestrial only tuners/PLL
#
CONFIG_DVB_PLL=y
CONFIG_DVB_TUNER_DIB0070=y
CONFIG_DVB_TUNER_DIB0090=y

#
# SEC control devices for DVB-S
#
CONFIG_DVB_A8293=y
CONFIG_DVB_AF9033=y
CONFIG_DVB_ASCOT2E=y
CONFIG_DVB_ATBM8830=y
CONFIG_DVB_HELENE=y
CONFIG_DVB_HORUS3A=y
CONFIG_DVB_ISL6405=y
CONFIG_DVB_ISL6421=y
CONFIG_DVB_ISL6423=y
CONFIG_DVB_IX2505V=y
CONFIG_DVB_LGS8GL5=y
CONFIG_DVB_LGS8GXX=y
CONFIG_DVB_LNBH25=y
CONFIG_DVB_LNBH29=y
CONFIG_DVB_LNBP21=y
CONFIG_DVB_LNBP22=y
CONFIG_DVB_M88RS2000=y
CONFIG_DVB_TDA665x=y
CONFIG_DVB_DRX39XYJ=y

#
# Common Interface (EN50221) controller drivers
#
CONFIG_DVB_CXD2099=y
CONFIG_DVB_SP2=y
# end of Customise DVB Frontends
# end of Media ancillary drivers

#
# Graphics support
#
CONFIG_APERTURE_HELPERS=y
CONFIG_AGP=y
CONFIG_AGP_INTEL=y
CONFIG_AGP_SIS=y
CONFIG_AGP_VIA=y
CONFIG_INTEL_GTT=y
CONFIG_VGA_SWITCHEROO=y
CONFIG_DRM=y
CONFIG_DRM_MIPI_DBI=y
CONFIG_DRM_MIPI_DSI=y
CONFIG_DRM_DEBUG_MM=y
CONFIG_DRM_USE_DYNAMIC_DEBUG=y
CONFIG_DRM_KMS_HELPER=y
CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS=y
CONFIG_DRM_DEBUG_MODESET_LOCK=y
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100
CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM=y
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_DP_AUX_BUS=y
CONFIG_DRM_DISPLAY_HELPER=y
CONFIG_DRM_DISPLAY_DP_HELPER=y
CONFIG_DRM_DISPLAY_HDCP_HELPER=y
CONFIG_DRM_DISPLAY_HDMI_HELPER=y
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
CONFIG_DRM_TTM=y
CONFIG_DRM_BUDDY=y
CONFIG_DRM_VRAM_HELPER=y
CONFIG_DRM_TTM_HELPER=y
CONFIG_DRM_GEM_DMA_HELPER=y
CONFIG_DRM_GEM_SHMEM_HELPER=y
CONFIG_DRM_SCHED=y

#
# I2C encoder or helper chips
#
CONFIG_DRM_I2C_CH7006=y
CONFIG_DRM_I2C_SIL164=y
CONFIG_DRM_I2C_NXP_TDA998X=y
CONFIG_DRM_I2C_NXP_TDA9950=y
# end of I2C encoder or helper chips

#
# ARM devices
#
CONFIG_DRM_KOMEDA=y
# end of ARM devices

# CONFIG_DRM_RADEON is not set
# CONFIG_DRM_AMDGPU is not set
# CONFIG_DRM_NOUVEAU is not set
CONFIG_DRM_I915=y
CONFIG_DRM_I915_FORCE_PROBE=""
CONFIG_DRM_I915_CAPTURE_ERROR=y
CONFIG_DRM_I915_COMPRESS_ERROR=y
CONFIG_DRM_I915_USERPTR=y
CONFIG_DRM_I915_GVT=y
CONFIG_DRM_I915_GVT_KVMGT=y
CONFIG_DRM_I915_PXP=y

#
# drm/i915 Debugging
#
CONFIG_DRM_I915_WERROR=y
# CONFIG_DRM_I915_DEBUG is not set
CONFIG_DRM_I915_DEBUG_MMIO=y
# CONFIG_DRM_I915_DEBUG_GEM is not set
CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS=y
CONFIG_DRM_I915_SW_FENCE_CHECK_DAG=y
CONFIG_DRM_I915_DEBUG_GUC=y
# CONFIG_DRM_I915_SELFTEST is not set
CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS=y
CONFIG_DRM_I915_DEBUG_VBLANK_EVADE=y
CONFIG_DRM_I915_DEBUG_RUNTIME_PM=y
# end of drm/i915 Debugging

#
# drm/i915 Profile Guided Optimisation
#
CONFIG_DRM_I915_REQUEST_TIMEOUT=20000
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND=250
CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
CONFIG_DRM_I915_PREEMPT_TIMEOUT=640
CONFIG_DRM_I915_MAX_REQUEST_BUSYWAIT=8000
CONFIG_DRM_I915_STOP_TIMEOUT=100
CONFIG_DRM_I915_TIMESLICE_DURATION=1
# end of drm/i915 Profile Guided Optimisation

CONFIG_DRM_VGEM=y
CONFIG_DRM_VKMS=y
CONFIG_DRM_VMWGFX=y
# CONFIG_DRM_VMWGFX_FBCON is not set
CONFIG_DRM_VMWGFX_MKSSTATS=y
CONFIG_DRM_GMA500=y
CONFIG_DRM_UDL=y
CONFIG_DRM_AST=y
CONFIG_DRM_MGAG200=y
CONFIG_DRM_RCAR_DW_HDMI=y
CONFIG_DRM_RCAR_USE_LVDS=y
CONFIG_DRM_RCAR_USE_MIPI_DSI=y
CONFIG_DRM_QXL=y
CONFIG_DRM_VIRTIO_GPU=y
CONFIG_DRM_PANEL=y

#
# Display Panels
#
CONFIG_DRM_PANEL_ABT_Y030XX067A=y
CONFIG_DRM_PANEL_ARM_VERSATILE=y
CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596=y
CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0=y
CONFIG_DRM_PANEL_BOE_HIMAX8279D=y
CONFIG_DRM_PANEL_BOE_TV101WUM_NL6=y
CONFIG_DRM_PANEL_DSI_CM=y
CONFIG_DRM_PANEL_LVDS=y
CONFIG_DRM_PANEL_SIMPLE=y
CONFIG_DRM_PANEL_EDP=y
CONFIG_DRM_PANEL_EBBG_FT8719=y
CONFIG_DRM_PANEL_ELIDA_KD35T133=y
CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02=y
CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=y
CONFIG_DRM_PANEL_ILITEK_IL9322=y
CONFIG_DRM_PANEL_ILITEK_ILI9341=y
CONFIG_DRM_PANEL_ILITEK_ILI9881C=y
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=y
CONFIG_DRM_PANEL_INNOLUX_P079ZCA=y
CONFIG_DRM_PANEL_JDI_LT070ME05000=y
CONFIG_DRM_PANEL_JDI_R63452=y
CONFIG_DRM_PANEL_KHADAS_TS050=y
CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04=y
CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W=y
CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829=y
CONFIG_DRM_PANEL_SAMSUNG_LD9040=y
CONFIG_DRM_PANEL_LG_LB035Q02=y
CONFIG_DRM_PANEL_LG_LG4573=y
CONFIG_DRM_PANEL_NEC_NL8048HL11=y
CONFIG_DRM_PANEL_NEWVISION_NV3052C=y
CONFIG_DRM_PANEL_NOVATEK_NT35510=y
CONFIG_DRM_PANEL_NOVATEK_NT35560=y
CONFIG_DRM_PANEL_NOVATEK_NT35950=y
CONFIG_DRM_PANEL_NOVATEK_NT36672A=y
CONFIG_DRM_PANEL_NOVATEK_NT39016=y
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=y
CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO=y
CONFIG_DRM_PANEL_ORISETECH_OTM8009A=y
CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS=y
CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=y
CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=y
CONFIG_DRM_PANEL_RAYDIUM_RM67191=y
CONFIG_DRM_PANEL_RAYDIUM_RM68200=y
CONFIG_DRM_PANEL_RONBO_RB070D30=y
CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=y
CONFIG_DRM_PANEL_SAMSUNG_DB7430=y
CONFIG_DRM_PANEL_SAMSUNG_S6D16D0=y
CONFIG_DRM_PANEL_SAMSUNG_S6D27A1=y
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=y
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=y
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0=y
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_SPI=y
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_DSI=y
CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01=y
CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=y
CONFIG_DRM_PANEL_SAMSUNG_SOFEF00=y
CONFIG_DRM_PANEL_SEIKO_43WVF1G=y
CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=y
CONFIG_DRM_PANEL_SHARP_LS037V7DW01=y
CONFIG_DRM_PANEL_SHARP_LS043T1LE01=y
CONFIG_DRM_PANEL_SHARP_LS060T1SX01=y
CONFIG_DRM_PANEL_SITRONIX_ST7701=y
CONFIG_DRM_PANEL_SITRONIX_ST7703=y
CONFIG_DRM_PANEL_SITRONIX_ST7789V=y
CONFIG_DRM_PANEL_SONY_ACX565AKM=y
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=y
CONFIG_DRM_PANEL_TDO_TL070WSH30=y
CONFIG_DRM_PANEL_TPO_TD028TTEC1=y
CONFIG_DRM_PANEL_TPO_TD043MTEA1=y
CONFIG_DRM_PANEL_TPO_TPG110=y
CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=y
CONFIG_DRM_PANEL_VISIONOX_RM69299=y
CONFIG_DRM_PANEL_WIDECHIPS_WS2401=y
CONFIG_DRM_PANEL_XINPENG_XPP055C272=y
# end of Display Panels

CONFIG_DRM_BRIDGE=y
CONFIG_DRM_PANEL_BRIDGE=y

#
# Display Interface Bridges
#
CONFIG_DRM_CDNS_DSI=y
CONFIG_DRM_CHIPONE_ICN6211=y
CONFIG_DRM_CHRONTEL_CH7033=y
CONFIG_DRM_CROS_EC_ANX7688=y
CONFIG_DRM_DISPLAY_CONNECTOR=y
CONFIG_DRM_ITE_IT6505=y
CONFIG_DRM_LONTIUM_LT8912B=y
CONFIG_DRM_LONTIUM_LT9211=y
CONFIG_DRM_LONTIUM_LT9611=y
CONFIG_DRM_LONTIUM_LT9611UXC=y
CONFIG_DRM_ITE_IT66121=y
CONFIG_DRM_LVDS_CODEC=y
CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW=y
CONFIG_DRM_NWL_MIPI_DSI=y
CONFIG_DRM_NXP_PTN3460=y
CONFIG_DRM_PARADE_PS8622=y
CONFIG_DRM_PARADE_PS8640=y
CONFIG_DRM_SIL_SII8620=y
CONFIG_DRM_SII902X=y
CONFIG_DRM_SII9234=y
CONFIG_DRM_SIMPLE_BRIDGE=y
CONFIG_DRM_THINE_THC63LVD1024=y
CONFIG_DRM_TOSHIBA_TC358762=y
CONFIG_DRM_TOSHIBA_TC358764=y
CONFIG_DRM_TOSHIBA_TC358767=y
CONFIG_DRM_TOSHIBA_TC358768=y
CONFIG_DRM_TOSHIBA_TC358775=y
CONFIG_DRM_TI_DLPC3433=y
CONFIG_DRM_TI_TFP410=y
CONFIG_DRM_TI_SN65DSI83=y
CONFIG_DRM_TI_SN65DSI86=y
CONFIG_DRM_TI_TPD12S015=y
CONFIG_DRM_ANALOGIX_ANX6345=y
CONFIG_DRM_ANALOGIX_ANX78XX=y
CONFIG_DRM_ANALOGIX_DP=y
CONFIG_DRM_ANALOGIX_ANX7625=y
CONFIG_DRM_I2C_ADV7511=y
CONFIG_DRM_I2C_ADV7511_AUDIO=y
CONFIG_DRM_I2C_ADV7511_CEC=y
CONFIG_DRM_CDNS_MHDP8546=y
CONFIG_DRM_DW_HDMI=y
CONFIG_DRM_DW_HDMI_AHB_AUDIO=y
CONFIG_DRM_DW_HDMI_I2S_AUDIO=y
CONFIG_DRM_DW_HDMI_GP_AUDIO=y
CONFIG_DRM_DW_HDMI_CEC=y
# end of Display Interface Bridges

CONFIG_DRM_ETNAVIV=y
CONFIG_DRM_ETNAVIV_THERMAL=y
CONFIG_DRM_LOGICVC=y
# CONFIG_DRM_MXSFB is not set
# CONFIG_DRM_IMX_LCDIF is not set
CONFIG_DRM_ARCPGU=y
CONFIG_DRM_BOCHS=y
CONFIG_DRM_CIRRUS_QEMU=y
CONFIG_DRM_GM12U320=y
CONFIG_DRM_PANEL_MIPI_DBI=y
CONFIG_DRM_SIMPLEDRM=y
CONFIG_TINYDRM_HX8357D=y
CONFIG_TINYDRM_ILI9163=y
CONFIG_TINYDRM_ILI9225=y
CONFIG_TINYDRM_ILI9341=y
CONFIG_TINYDRM_ILI9486=y
CONFIG_TINYDRM_MI0283QT=y
CONFIG_TINYDRM_REPAPER=y
CONFIG_TINYDRM_ST7586=y
CONFIG_TINYDRM_ST7735R=y
CONFIG_DRM_XEN=y
CONFIG_DRM_XEN_FRONTEND=y
CONFIG_DRM_VBOXVIDEO=y
CONFIG_DRM_GUD=y
CONFIG_DRM_SSD130X=y
CONFIG_DRM_SSD130X_I2C=y
CONFIG_DRM_SSD130X_SPI=y
CONFIG_DRM_HYPERV=y
CONFIG_DRM_LEGACY=y
CONFIG_DRM_TDFX=y
CONFIG_DRM_R128=y
# CONFIG_DRM_I810 is not set
CONFIG_DRM_MGA=y
CONFIG_DRM_SIS=y
CONFIG_DRM_VIA=y
CONFIG_DRM_SAVAGE=y
CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
CONFIG_DRM_NOMODESET=y
CONFIG_DRM_PRIVACY_SCREEN=y

#
# Frame buffer Devices
#
CONFIG_FB_CMDLINE=y
CONFIG_FB_NOTIFY=y
CONFIG_FB=y
CONFIG_FIRMWARE_EDID=y
CONFIG_FB_DDC=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_SYS_FILLRECT=y
CONFIG_FB_SYS_COPYAREA=y
CONFIG_FB_SYS_IMAGEBLIT=y
CONFIG_FB_FOREIGN_ENDIAN=y
CONFIG_FB_BOTH_ENDIAN=y
# CONFIG_FB_BIG_ENDIAN is not set
# CONFIG_FB_LITTLE_ENDIAN is not set
CONFIG_FB_SYS_FOPS=y
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_HECUBA=y
CONFIG_FB_SVGALIB=y
CONFIG_FB_BACKLIGHT=y
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y

#
# Frame buffer hardware drivers
#
CONFIG_FB_CIRRUS=y
CONFIG_FB_PM2=y
CONFIG_FB_PM2_FIFO_DISCONNECT=y
CONFIG_FB_CYBER2000=y
CONFIG_FB_CYBER2000_DDC=y
CONFIG_FB_ARC=y
CONFIG_FB_ASILIANT=y
CONFIG_FB_IMSTT=y
# CONFIG_FB_VGA16 is not set
CONFIG_FB_UVESA=y
CONFIG_FB_VESA=y
CONFIG_FB_EFI=y
CONFIG_FB_N411=y
CONFIG_FB_HGA=y
CONFIG_FB_OPENCORES=y
CONFIG_FB_S1D13XXX=y
CONFIG_FB_NVIDIA=y
CONFIG_FB_NVIDIA_I2C=y
CONFIG_FB_NVIDIA_DEBUG=y
CONFIG_FB_NVIDIA_BACKLIGHT=y
CONFIG_FB_RIVA=y
CONFIG_FB_RIVA_I2C=y
CONFIG_FB_RIVA_DEBUG=y
CONFIG_FB_RIVA_BACKLIGHT=y
CONFIG_FB_I740=y
CONFIG_FB_LE80578=y
CONFIG_FB_CARILLO_RANCH=y
CONFIG_FB_MATROX=y
CONFIG_FB_MATROX_MILLENIUM=y
CONFIG_FB_MATROX_MYSTIQUE=y
CONFIG_FB_MATROX_G=y
CONFIG_FB_MATROX_I2C=y
CONFIG_FB_MATROX_MAVEN=y
# CONFIG_FB_RADEON is not set
CONFIG_FB_ATY128=y
CONFIG_FB_ATY128_BACKLIGHT=y
CONFIG_FB_ATY=y
CONFIG_FB_ATY_CT=y
CONFIG_FB_ATY_GENERIC_LCD=y
CONFIG_FB_ATY_GX=y
CONFIG_FB_ATY_BACKLIGHT=y
CONFIG_FB_S3=y
CONFIG_FB_S3_DDC=y
CONFIG_FB_SAVAGE=y
CONFIG_FB_SAVAGE_I2C=y
CONFIG_FB_SAVAGE_ACCEL=y
CONFIG_FB_SIS=y
CONFIG_FB_SIS_300=y
CONFIG_FB_SIS_315=y
CONFIG_FB_VIA=y
CONFIG_FB_VIA_DIRECT_PROCFS=y
CONFIG_FB_VIA_X_COMPATIBILITY=y
CONFIG_FB_NEOMAGIC=y
CONFIG_FB_KYRO=y
CONFIG_FB_3DFX=y
CONFIG_FB_3DFX_ACCEL=y
CONFIG_FB_3DFX_I2C=y
CONFIG_FB_VOODOO1=y
CONFIG_FB_VT8623=y
CONFIG_FB_TRIDENT=y
CONFIG_FB_ARK=y
CONFIG_FB_PM3=y
CONFIG_FB_CARMINE=y
CONFIG_FB_CARMINE_DRAM_EVAL=y
# CONFIG_CARMINE_DRAM_CUSTOM is not set
CONFIG_FB_SM501=y
CONFIG_FB_SMSCUFX=y
CONFIG_FB_UDL=y
CONFIG_FB_IBM_GXT4500=y
CONFIG_FB_GOLDFISH=y
CONFIG_FB_VIRTUAL=y
CONFIG_XEN_FBDEV_FRONTEND=y
CONFIG_FB_METRONOME=y
CONFIG_FB_MB862XX=y
CONFIG_FB_MB862XX_PCI_GDC=y
CONFIG_FB_MB862XX_I2C=y
CONFIG_FB_HYPERV=y
CONFIG_FB_SSD1307=y
CONFIG_FB_SM712=y
# end of Frame buffer Devices

#
# Backlight & LCD device support
#
CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_L4F00242T03=y
CONFIG_LCD_LMS283GF05=y
CONFIG_LCD_LTV350QV=y
CONFIG_LCD_ILI922X=y
CONFIG_LCD_ILI9320=y
CONFIG_LCD_TDO24M=y
CONFIG_LCD_VGG2432A4=y
CONFIG_LCD_PLATFORM=y
CONFIG_LCD_AMS369FG06=y
CONFIG_LCD_LMS501KF03=y
CONFIG_LCD_HX8357=y
CONFIG_LCD_OTM3225A=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_KTD253=y
CONFIG_BACKLIGHT_LM3533=y
CONFIG_BACKLIGHT_CARILLO_RANCH=y
CONFIG_BACKLIGHT_PWM=y
CONFIG_BACKLIGHT_DA903X=y
CONFIG_BACKLIGHT_DA9052=y
CONFIG_BACKLIGHT_MAX8925=y
CONFIG_BACKLIGHT_MT6370=y
CONFIG_BACKLIGHT_APPLE=y
CONFIG_BACKLIGHT_QCOM_WLED=y
CONFIG_BACKLIGHT_RT4831=y
CONFIG_BACKLIGHT_SAHARA=y
CONFIG_BACKLIGHT_WM831X=y
CONFIG_BACKLIGHT_ADP5520=y
CONFIG_BACKLIGHT_ADP8860=y
CONFIG_BACKLIGHT_ADP8870=y
CONFIG_BACKLIGHT_88PM860X=y
CONFIG_BACKLIGHT_PCF50633=y
CONFIG_BACKLIGHT_AAT2870=y
CONFIG_BACKLIGHT_LM3630A=y
CONFIG_BACKLIGHT_LM3639=y
CONFIG_BACKLIGHT_LP855X=y
CONFIG_BACKLIGHT_LP8788=y
CONFIG_BACKLIGHT_PANDORA=y
CONFIG_BACKLIGHT_SKY81452=y
CONFIG_BACKLIGHT_TPS65217=y
CONFIG_BACKLIGHT_AS3711=y
CONFIG_BACKLIGHT_GPIO=y
CONFIG_BACKLIGHT_LV5207LP=y
CONFIG_BACKLIGHT_BD6107=y
CONFIG_BACKLIGHT_ARCXCNN=y
CONFIG_BACKLIGHT_RAVE_SP=y
CONFIG_BACKLIGHT_LED=y
# end of Backlight & LCD device support

CONFIG_VGASTATE=y
CONFIG_VIDEOMODE_HELPERS=y
CONFIG_HDMI=y

#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y
# end of Console display driver support

CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
# end of Graphics support

CONFIG_SOUND=y
CONFIG_SOUND_OSS_CORE=y
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
CONFIG_SND=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y
CONFIG_SND_PCM_ELD=y
CONFIG_SND_PCM_IEC958=y
CONFIG_SND_DMAENGINE_PCM=y
CONFIG_SND_HWDEP=y
CONFIG_SND_SEQ_DEVICE=y
CONFIG_SND_RAWMIDI=y
CONFIG_SND_COMPRESS_OFFLOAD=y
CONFIG_SND_JACK=y
CONFIG_SND_JACK_INPUT_DEV=y
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=y
CONFIG_SND_PCM_OSS=y
CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_PCM_TIMER=y
CONFIG_SND_HRTIMER=y
CONFIG_SND_DYNAMIC_MINORS=y
CONFIG_SND_MAX_CARDS=32
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_PROC_FS=y
CONFIG_SND_VERBOSE_PROCFS=y
CONFIG_SND_VERBOSE_PRINTK=y
CONFIG_SND_CTL_FAST_LOOKUP=y
CONFIG_SND_DEBUG=y
CONFIG_SND_DEBUG_VERBOSE=y
CONFIG_SND_PCM_XRUN_DEBUG=y
CONFIG_SND_CTL_INPUT_VALIDATION=y
CONFIG_SND_CTL_DEBUG=y
CONFIG_SND_JACK_INJECTION_DEBUG=y
CONFIG_SND_VMASTER=y
CONFIG_SND_DMA_SGBUF=y
CONFIG_SND_CTL_LED=y
CONFIG_SND_SEQUENCER=y
CONFIG_SND_SEQ_DUMMY=y
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
CONFIG_SND_SEQ_MIDI_EVENT=y
CONFIG_SND_SEQ_MIDI=y
CONFIG_SND_SEQ_MIDI_EMUL=y
CONFIG_SND_SEQ_VIRMIDI=y
CONFIG_SND_MPU401_UART=y
CONFIG_SND_OPL3_LIB=y
CONFIG_SND_OPL3_LIB_SEQ=y
CONFIG_SND_VX_LIB=y
CONFIG_SND_AC97_CODEC=y
CONFIG_SND_DRIVERS=y
CONFIG_SND_PCSP=y
CONFIG_SND_DUMMY=y
CONFIG_SND_ALOOP=y
CONFIG_SND_VIRMIDI=y
CONFIG_SND_MTPAV=y
CONFIG_SND_MTS64=y
CONFIG_SND_SERIAL_U16550=y
CONFIG_SND_SERIAL_GENERIC=y
CONFIG_SND_MPU401=y
CONFIG_SND_PORTMAN2X4=y
CONFIG_SND_AC97_POWER_SAVE=y
CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
CONFIG_SND_SB_COMMON=y
CONFIG_SND_PCI=y
CONFIG_SND_AD1889=y
CONFIG_SND_ALS300=y
CONFIG_SND_ALS4000=y
CONFIG_SND_ALI5451=y
CONFIG_SND_ASIHPI=y
CONFIG_SND_ATIIXP=y
CONFIG_SND_ATIIXP_MODEM=y
CONFIG_SND_AU8810=y
CONFIG_SND_AU8820=y
CONFIG_SND_AU8830=y
CONFIG_SND_AW2=y
CONFIG_SND_AZT3328=y
CONFIG_SND_BT87X=y
CONFIG_SND_BT87X_OVERCLOCK=y
CONFIG_SND_CA0106=y
CONFIG_SND_CMIPCI=y
CONFIG_SND_OXYGEN_LIB=y
CONFIG_SND_OXYGEN=y
CONFIG_SND_CS4281=y
CONFIG_SND_CS46XX=y
CONFIG_SND_CS46XX_NEW_DSP=y
CONFIG_SND_CTXFI=y
CONFIG_SND_DARLA20=y
CONFIG_SND_GINA20=y
CONFIG_SND_LAYLA20=y
CONFIG_SND_DARLA24=y
CONFIG_SND_GINA24=y
CONFIG_SND_LAYLA24=y
CONFIG_SND_MONA=y
CONFIG_SND_MIA=y
CONFIG_SND_ECHO3G=y
CONFIG_SND_INDIGO=y
CONFIG_SND_INDIGOIO=y
CONFIG_SND_INDIGODJ=y
CONFIG_SND_INDIGOIOX=y
CONFIG_SND_INDIGODJX=y
CONFIG_SND_EMU10K1=y
CONFIG_SND_EMU10K1_SEQ=y
CONFIG_SND_EMU10K1X=y
CONFIG_SND_ENS1370=y
CONFIG_SND_ENS1371=y
CONFIG_SND_ES1938=y
CONFIG_SND_ES1968=y
CONFIG_SND_ES1968_INPUT=y
CONFIG_SND_ES1968_RADIO=y
CONFIG_SND_FM801=y
CONFIG_SND_FM801_TEA575X_BOOL=y
CONFIG_SND_HDSP=y

#
# Don't forget to add built-in firmwares for HDSP driver
#
CONFIG_SND_HDSPM=y
CONFIG_SND_ICE1712=y
CONFIG_SND_ICE1724=y
CONFIG_SND_INTEL8X0=y
CONFIG_SND_INTEL8X0M=y
CONFIG_SND_KORG1212=y
CONFIG_SND_LOLA=y
CONFIG_SND_LX6464ES=y
CONFIG_SND_MAESTRO3=y
CONFIG_SND_MAESTRO3_INPUT=y
CONFIG_SND_MIXART=y
CONFIG_SND_NM256=y
CONFIG_SND_PCXHR=y
CONFIG_SND_RIPTIDE=y
CONFIG_SND_RME32=y
CONFIG_SND_RME96=y
CONFIG_SND_RME9652=y
CONFIG_SND_SONICVIBES=y
CONFIG_SND_TRIDENT=y
CONFIG_SND_VIA82XX=y
CONFIG_SND_VIA82XX_MODEM=y
CONFIG_SND_VIRTUOSO=y
CONFIG_SND_VX222=y
CONFIG_SND_YMFPCI=y

#
# HD-Audio
#
CONFIG_SND_HDA=y
CONFIG_SND_HDA_GENERIC_LEDS=y
CONFIG_SND_HDA_INTEL=y
CONFIG_SND_HDA_HWDEP=y
CONFIG_SND_HDA_RECONFIG=y
CONFIG_SND_HDA_INPUT_BEEP=y
CONFIG_SND_HDA_INPUT_BEEP_MODE=1
CONFIG_SND_HDA_PATCH_LOADER=y
CONFIG_SND_HDA_SCODEC_CS35L41=y
CONFIG_SND_HDA_CS_DSP_CONTROLS=y
CONFIG_SND_HDA_SCODEC_CS35L41_I2C=y
CONFIG_SND_HDA_SCODEC_CS35L41_SPI=y
CONFIG_SND_HDA_CODEC_REALTEK=y
CONFIG_SND_HDA_CODEC_ANALOG=y
CONFIG_SND_HDA_CODEC_SIGMATEL=y
CONFIG_SND_HDA_CODEC_VIA=y
CONFIG_SND_HDA_CODEC_HDMI=y
CONFIG_SND_HDA_CODEC_CIRRUS=y
CONFIG_SND_HDA_CODEC_CS8409=y
CONFIG_SND_HDA_CODEC_CONEXANT=y
CONFIG_SND_HDA_CODEC_CA0110=y
CONFIG_SND_HDA_CODEC_CA0132=y
CONFIG_SND_HDA_CODEC_CA0132_DSP=y
CONFIG_SND_HDA_CODEC_CMEDIA=y
CONFIG_SND_HDA_CODEC_SI3054=y
CONFIG_SND_HDA_GENERIC=y
CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
CONFIG_SND_HDA_INTEL_HDMI_SILENT_STREAM=y
# end of HD-Audio

CONFIG_SND_HDA_CORE=y
CONFIG_SND_HDA_DSP_LOADER=y
CONFIG_SND_HDA_COMPONENT=y
CONFIG_SND_HDA_I915=y
CONFIG_SND_HDA_EXT_CORE=y
CONFIG_SND_HDA_PREALLOC_SIZE=0
CONFIG_SND_INTEL_NHLT=y
CONFIG_SND_INTEL_DSP_CONFIG=y
CONFIG_SND_INTEL_SOUNDWIRE_ACPI=y
CONFIG_SND_INTEL_BYT_PREFER_SOF=y
CONFIG_SND_SPI=y
CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=y
CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y
CONFIG_SND_USB_UA101=y
CONFIG_SND_USB_USX2Y=y
CONFIG_SND_USB_CAIAQ=y
CONFIG_SND_USB_CAIAQ_INPUT=y
CONFIG_SND_USB_US122L=y
CONFIG_SND_USB_6FIRE=y
CONFIG_SND_USB_HIFACE=y
CONFIG_SND_BCD2000=y
CONFIG_SND_USB_LINE6=y
CONFIG_SND_USB_POD=y
CONFIG_SND_USB_PODHD=y
CONFIG_SND_USB_TONEPORT=y
CONFIG_SND_USB_VARIAX=y
CONFIG_SND_FIREWIRE=y
CONFIG_SND_FIREWIRE_LIB=y
CONFIG_SND_DICE=y
CONFIG_SND_OXFW=y
CONFIG_SND_ISIGHT=y
CONFIG_SND_FIREWORKS=y
CONFIG_SND_BEBOB=y
CONFIG_SND_FIREWIRE_DIGI00X=y
CONFIG_SND_FIREWIRE_TASCAM=y
CONFIG_SND_FIREWIRE_MOTU=y
CONFIG_SND_FIREFACE=y
CONFIG_SND_PCMCIA=y
CONFIG_SND_VXPOCKET=y
CONFIG_SND_PDAUDIOCF=y
CONFIG_SND_SOC=y
CONFIG_SND_SOC_AC97_BUS=y
CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
CONFIG_SND_SOC_COMPRESS=y
CONFIG_SND_SOC_TOPOLOGY=y
CONFIG_SND_SOC_ACPI=y
CONFIG_SND_SOC_ADI=y
CONFIG_SND_SOC_ADI_AXI_I2S=y
CONFIG_SND_SOC_ADI_AXI_SPDIF=y
# CONFIG_SND_SOC_AMD_ACP is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_RENOIR is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
# CONFIG_SND_SOC_AMD_ACP6x is not set
# CONFIG_SND_AMD_ACP_CONFIG is not set
# CONFIG_SND_SOC_AMD_ACP_COMMON is not set
# CONFIG_SND_SOC_AMD_RPL_ACP6x is not set
CONFIG_SND_SOC_AMD_PS=y
CONFIG_SND_SOC_AMD_PS_MACH=y
CONFIG_SND_ATMEL_SOC=y
CONFIG_SND_SOC_MIKROE_PROTO=y
CONFIG_SND_BCM63XX_I2S_WHISTLER=y
CONFIG_SND_DESIGNWARE_I2S=y
CONFIG_SND_DESIGNWARE_PCM=y

#
# SoC Audio for Freescale CPUs
#

#
# Common SoC Audio options for Freescale CPUs:
#
CONFIG_SND_SOC_FSL_ASRC=y
CONFIG_SND_SOC_FSL_SAI=y
CONFIG_SND_SOC_FSL_MQS=y
CONFIG_SND_SOC_FSL_AUDMIX=y
CONFIG_SND_SOC_FSL_SSI=y
CONFIG_SND_SOC_FSL_SPDIF=y
CONFIG_SND_SOC_FSL_ESAI=y
CONFIG_SND_SOC_FSL_MICFIL=y
CONFIG_SND_SOC_FSL_EASRC=y
CONFIG_SND_SOC_FSL_XCVR=y
CONFIG_SND_SOC_FSL_UTILS=y
CONFIG_SND_SOC_FSL_RPMSG=y
CONFIG_SND_SOC_IMX_AUDMUX=y
# end of SoC Audio for Freescale CPUs

CONFIG_SND_I2S_HI6210_I2S=y
CONFIG_SND_SOC_IMG=y
CONFIG_SND_SOC_IMG_I2S_IN=y
CONFIG_SND_SOC_IMG_I2S_OUT=y
CONFIG_SND_SOC_IMG_PARALLEL_OUT=y
CONFIG_SND_SOC_IMG_SPDIF_IN=y
CONFIG_SND_SOC_IMG_SPDIF_OUT=y
CONFIG_SND_SOC_IMG_PISTACHIO_INTERNAL_DAC=y
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
CONFIG_SND_SOC_INTEL_SST=y
CONFIG_SND_SOC_INTEL_CATPT=y
CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=y
CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_PCI=y
CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_ACPI=y
CONFIG_SND_SOC_INTEL_SKYLAKE=y
CONFIG_SND_SOC_INTEL_SKL=y
CONFIG_SND_SOC_INTEL_APL=y
CONFIG_SND_SOC_INTEL_KBL=y
CONFIG_SND_SOC_INTEL_GLK=y
CONFIG_SND_SOC_INTEL_CNL=y
CONFIG_SND_SOC_INTEL_CFL=y
CONFIG_SND_SOC_INTEL_CML_H=y
CONFIG_SND_SOC_INTEL_CML_LP=y
CONFIG_SND_SOC_INTEL_SKYLAKE_FAMILY=y
CONFIG_SND_SOC_INTEL_SKYLAKE_SSP_CLK=y
CONFIG_SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC=y
CONFIG_SND_SOC_INTEL_SKYLAKE_COMMON=y
CONFIG_SND_SOC_ACPI_INTEL_MATCH=y
CONFIG_SND_SOC_INTEL_AVS=y

#
# Intel AVS Machine drivers
#

#
# Available DSP configurations
#
CONFIG_SND_SOC_INTEL_AVS_MACH_DA7219=y
CONFIG_SND_SOC_INTEL_AVS_MACH_DMIC=y
CONFIG_SND_SOC_INTEL_AVS_MACH_HDAUDIO=y
# CONFIG_SND_SOC_INTEL_AVS_MACH_I2S_TEST is not set
CONFIG_SND_SOC_INTEL_AVS_MACH_MAX98357A=y
CONFIG_SND_SOC_INTEL_AVS_MACH_MAX98373=y
CONFIG_SND_SOC_INTEL_AVS_MACH_NAU8825=y
CONFIG_SND_SOC_INTEL_AVS_MACH_RT274=y
CONFIG_SND_SOC_INTEL_AVS_MACH_RT286=y
CONFIG_SND_SOC_INTEL_AVS_MACH_RT298=y
CONFIG_SND_SOC_INTEL_AVS_MACH_RT5682=y
CONFIG_SND_SOC_INTEL_AVS_MACH_SSM4567=y
# end of Intel AVS Machine drivers

CONFIG_SND_SOC_INTEL_MACH=y
CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y
CONFIG_SND_SOC_INTEL_HDA_DSP_COMMON=y
CONFIG_SND_SOC_INTEL_SOF_MAXIM_COMMON=y
CONFIG_SND_SOC_INTEL_SOF_REALTEK_COMMON=y
CONFIG_SND_SOC_INTEL_HASWELL_MACH=y
CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH=y
CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=y
CONFIG_SND_SOC_INTEL_BROADWELL_MACH=y
CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=y
CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=y
CONFIG_SND_SOC_INTEL_BYTCR_WM5102_MACH=y
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=y
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=y
CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=y
CONFIG_SND_SOC_INTEL_CHT_BSW_NAU8824_MACH=y
CONFIG_SND_SOC_INTEL_BYT_CHT_CX2072X_MACH=y
CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH=y
CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH=y
CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH=y
CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=y
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=y
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=y
CONFIG_SND_SOC_INTEL_DA7219_MAX98357A_GENERIC=y
CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_COMMON=y
CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH=y
CONFIG_SND_SOC_INTEL_BXT_RT298_MACH=y
CONFIG_SND_SOC_INTEL_SOF_WM8804_MACH=y
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=y
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=y
CONFIG_SND_SOC_INTEL_KBL_DA7219_MAX98357A_MACH=y
CONFIG_SND_SOC_INTEL_KBL_DA7219_MAX98927_MACH=y
CONFIG_SND_SOC_INTEL_KBL_RT5660_MACH=y
CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=y
CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=y
CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=y
CONFIG_SND_SOC_INTEL_SOUNDWIRE_SOF_MACH=y
CONFIG_SND_SOC_MTK_BTCVSD=y
CONFIG_SND_SOC_SOF_TOPLEVEL=y
CONFIG_SND_SOC_SOF_PCI_DEV=y
CONFIG_SND_SOC_SOF_PCI=y
CONFIG_SND_SOC_SOF_ACPI=y
CONFIG_SND_SOC_SOF_ACPI_DEV=y
CONFIG_SND_SOC_SOF_OF=y
CONFIG_SND_SOC_SOF_DEBUG_PROBES=y
CONFIG_SND_SOC_SOF_CLIENT=y
CONFIG_SND_SOC_SOF_DEVELOPER_SUPPORT=y
CONFIG_SND_SOC_SOF_FORCE_PROBE_WORKQUEUE=y
CONFIG_SND_SOC_SOF_NOCODEC=y
CONFIG_SND_SOC_SOF_NOCODEC_SUPPORT=y
CONFIG_SND_SOC_SOF_STRICT_ABI_CHECKS=y
CONFIG_SND_SOC_SOF_DEBUG=y
CONFIG_SND_SOC_SOF_FORCE_NOCODEC_MODE=y
CONFIG_SND_SOC_SOF_DEBUG_XRUN_STOP=y
CONFIG_SND_SOC_SOF_DEBUG_VERBOSE_IPC=y
CONFIG_SND_SOC_SOF_DEBUG_FORCE_IPC_POSITION=y
CONFIG_SND_SOC_SOF_DEBUG_ENABLE_DEBUGFS_CACHE=y
CONFIG_SND_SOC_SOF_DEBUG_ENABLE_FIRMWARE_TRACE=y
# CONFIG_SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST is not set
CONFIG_SND_SOC_SOF_DEBUG_IPC_MSG_INJECTOR=y
CONFIG_SND_SOC_SOF_DEBUG_RETAIN_DSP_CONTEXT=y
CONFIG_SND_SOC_SOF=y
CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE=y
CONFIG_SND_SOC_SOF_IPC3=y
CONFIG_SND_SOC_SOF_INTEL_IPC4=y
# CONFIG_SND_SOC_SOF_AMD_TOPLEVEL is not set
CONFIG_SND_SOC_SOF_INTEL_TOPLEVEL=y
CONFIG_SND_SOC_SOF_INTEL_HIFI_EP_IPC=y
CONFIG_SND_SOC_SOF_INTEL_ATOM_HIFI_EP=y
CONFIG_SND_SOC_SOF_INTEL_COMMON=y
CONFIG_SND_SOC_SOF_BAYTRAIL=y
CONFIG_SND_SOC_SOF_BROADWELL=y
CONFIG_SND_SOC_SOF_MERRIFIELD=y
CONFIG_SND_SOC_SOF_INTEL_SKL=y
CONFIG_SND_SOC_SOF_SKYLAKE=y
CONFIG_SND_SOC_SOF_KABYLAKE=y
CONFIG_SND_SOC_SOF_INTEL_APL=y
CONFIG_SND_SOC_SOF_APOLLOLAKE=y
CONFIG_SND_SOC_SOF_GEMINILAKE=y
CONFIG_SND_SOC_SOF_INTEL_CNL=y
CONFIG_SND_SOC_SOF_CANNONLAKE=y
CONFIG_SND_SOC_SOF_COFFEELAKE=y
CONFIG_SND_SOC_SOF_COMETLAKE=y
CONFIG_SND_SOC_SOF_INTEL_ICL=y
CONFIG_SND_SOC_SOF_ICELAKE=y
CONFIG_SND_SOC_SOF_JASPERLAKE=y
CONFIG_SND_SOC_SOF_INTEL_TGL=y
CONFIG_SND_SOC_SOF_TIGERLAKE=y
CONFIG_SND_SOC_SOF_ELKHARTLAKE=y
CONFIG_SND_SOC_SOF_ALDERLAKE=y
CONFIG_SND_SOC_SOF_INTEL_MTL=y
CONFIG_SND_SOC_SOF_METEORLAKE=y
CONFIG_SND_SOC_SOF_HDA_COMMON=y
CONFIG_SND_SOC_SOF_HDA_LINK_BASELINE=y
CONFIG_SND_SOC_SOF_HDA_PROBES=y
CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE=y
CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE=y
CONFIG_SND_SOC_SOF_XTENSA=y

#
# STMicroelectronics STM32 SOC audio support
#
# end of STMicroelectronics STM32 SOC audio support

CONFIG_SND_SOC_XILINX_I2S=y
CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=y
CONFIG_SND_SOC_XILINX_SPDIF=y
CONFIG_SND_SOC_XTFPGA_I2S=y
CONFIG_SND_SOC_I2C_AND_SPI=y

#
# CODEC drivers
#
CONFIG_SND_SOC_ARIZONA=y
CONFIG_SND_SOC_WM_ADSP=y
CONFIG_SND_SOC_AC97_CODEC=y
CONFIG_SND_SOC_ADAU_UTILS=y
CONFIG_SND_SOC_ADAU1372=y
CONFIG_SND_SOC_ADAU1372_I2C=y
CONFIG_SND_SOC_ADAU1372_SPI=y
CONFIG_SND_SOC_ADAU1701=y
CONFIG_SND_SOC_ADAU17X1=y
CONFIG_SND_SOC_ADAU1761=y
CONFIG_SND_SOC_ADAU1761_I2C=y
CONFIG_SND_SOC_ADAU1761_SPI=y
CONFIG_SND_SOC_ADAU7002=y
CONFIG_SND_SOC_ADAU7118=y
CONFIG_SND_SOC_ADAU7118_HW=y
CONFIG_SND_SOC_ADAU7118_I2C=y
CONFIG_SND_SOC_AK4104=y
CONFIG_SND_SOC_AK4118=y
CONFIG_SND_SOC_AK4375=y
CONFIG_SND_SOC_AK4458=y
CONFIG_SND_SOC_AK4554=y
CONFIG_SND_SOC_AK4613=y
CONFIG_SND_SOC_AK4642=y
CONFIG_SND_SOC_AK5386=y
CONFIG_SND_SOC_AK5558=y
CONFIG_SND_SOC_ALC5623=y
CONFIG_SND_SOC_AW8738=y
CONFIG_SND_SOC_BD28623=y
CONFIG_SND_SOC_BT_SCO=y
CONFIG_SND_SOC_CPCAP=y
CONFIG_SND_SOC_CROS_EC_CODEC=y
CONFIG_SND_SOC_CS35L32=y
CONFIG_SND_SOC_CS35L33=y
CONFIG_SND_SOC_CS35L34=y
CONFIG_SND_SOC_CS35L35=y
CONFIG_SND_SOC_CS35L36=y
CONFIG_SND_SOC_CS35L41_LIB=y
CONFIG_SND_SOC_CS35L41=y
CONFIG_SND_SOC_CS35L41_SPI=y
CONFIG_SND_SOC_CS35L41_I2C=y
CONFIG_SND_SOC_CS35L45_TABLES=y
CONFIG_SND_SOC_CS35L45=y
CONFIG_SND_SOC_CS35L45_SPI=y
CONFIG_SND_SOC_CS35L45_I2C=y
CONFIG_SND_SOC_CS42L42_CORE=y
CONFIG_SND_SOC_CS42L42=y
CONFIG_SND_SOC_CS42L51=y
CONFIG_SND_SOC_CS42L51_I2C=y
CONFIG_SND_SOC_CS42L52=y
CONFIG_SND_SOC_CS42L56=y
CONFIG_SND_SOC_CS42L73=y
CONFIG_SND_SOC_CS42L83=y
CONFIG_SND_SOC_CS4234=y
CONFIG_SND_SOC_CS4265=y
CONFIG_SND_SOC_CS4270=y
CONFIG_SND_SOC_CS4271=y
CONFIG_SND_SOC_CS4271_I2C=y
CONFIG_SND_SOC_CS4271_SPI=y
CONFIG_SND_SOC_CS42XX8=y
CONFIG_SND_SOC_CS42XX8_I2C=y
CONFIG_SND_SOC_CS43130=y
CONFIG_SND_SOC_CS4341=y
CONFIG_SND_SOC_CS4349=y
CONFIG_SND_SOC_CS53L30=y
CONFIG_SND_SOC_CX2072X=y
CONFIG_SND_SOC_DA7213=y
CONFIG_SND_SOC_DA7219=y
CONFIG_SND_SOC_DMIC=y
CONFIG_SND_SOC_HDMI_CODEC=y
CONFIG_SND_SOC_ES7134=y
CONFIG_SND_SOC_ES7241=y
CONFIG_SND_SOC_ES8316=y
CONFIG_SND_SOC_ES8326=y
CONFIG_SND_SOC_ES8328=y
CONFIG_SND_SOC_ES8328_I2C=y
CONFIG_SND_SOC_ES8328_SPI=y
CONFIG_SND_SOC_GTM601=y
CONFIG_SND_SOC_HDAC_HDMI=y
CONFIG_SND_SOC_HDAC_HDA=y
CONFIG_SND_SOC_HDA=y
CONFIG_SND_SOC_ICS43432=y
CONFIG_SND_SOC_INNO_RK3036=y
CONFIG_SND_SOC_LOCHNAGAR_SC=y
CONFIG_SND_SOC_MAX98088=y
CONFIG_SND_SOC_MAX98090=y
CONFIG_SND_SOC_MAX98357A=y
CONFIG_SND_SOC_MAX98504=y
CONFIG_SND_SOC_MAX9867=y
CONFIG_SND_SOC_MAX98927=y
CONFIG_SND_SOC_MAX98520=y
CONFIG_SND_SOC_MAX98373=y
CONFIG_SND_SOC_MAX98373_I2C=y
CONFIG_SND_SOC_MAX98373_SDW=y
CONFIG_SND_SOC_MAX98390=y
CONFIG_SND_SOC_MAX98396=y
CONFIG_SND_SOC_MAX9860=y
CONFIG_SND_SOC_MSM8916_WCD_ANALOG=y
CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=y
CONFIG_SND_SOC_PCM1681=y
CONFIG_SND_SOC_PCM1789=y
CONFIG_SND_SOC_PCM1789_I2C=y
CONFIG_SND_SOC_PCM179X=y
CONFIG_SND_SOC_PCM179X_I2C=y
CONFIG_SND_SOC_PCM179X_SPI=y
CONFIG_SND_SOC_PCM186X=y
CONFIG_SND_SOC_PCM186X_I2C=y
CONFIG_SND_SOC_PCM186X_SPI=y
CONFIG_SND_SOC_PCM3060=y
CONFIG_SND_SOC_PCM3060_I2C=y
CONFIG_SND_SOC_PCM3060_SPI=y
CONFIG_SND_SOC_PCM3168A=y
CONFIG_SND_SOC_PCM3168A_I2C=y
CONFIG_SND_SOC_PCM3168A_SPI=y
CONFIG_SND_SOC_PCM5102A=y
CONFIG_SND_SOC_PCM512x=y
CONFIG_SND_SOC_PCM512x_I2C=y
CONFIG_SND_SOC_PCM512x_SPI=y
CONFIG_SND_SOC_RK3328=y
CONFIG_SND_SOC_RK817=y
CONFIG_SND_SOC_RL6231=y
CONFIG_SND_SOC_RL6347A=y
CONFIG_SND_SOC_RT274=y
CONFIG_SND_SOC_RT286=y
CONFIG_SND_SOC_RT298=y
CONFIG_SND_SOC_RT1011=y
CONFIG_SND_SOC_RT1015=y
CONFIG_SND_SOC_RT1015P=y
CONFIG_SND_SOC_RT1308=y
CONFIG_SND_SOC_RT1308_SDW=y
CONFIG_SND_SOC_RT1316_SDW=y
CONFIG_SND_SOC_RT5514=y
CONFIG_SND_SOC_RT5514_SPI=y
CONFIG_SND_SOC_RT5616=y
CONFIG_SND_SOC_RT5631=y
CONFIG_SND_SOC_RT5640=y
CONFIG_SND_SOC_RT5645=y
CONFIG_SND_SOC_RT5651=y
CONFIG_SND_SOC_RT5659=y
CONFIG_SND_SOC_RT5660=y
CONFIG_SND_SOC_RT5663=y
CONFIG_SND_SOC_RT5670=y
CONFIG_SND_SOC_RT5677=y
CONFIG_SND_SOC_RT5677_SPI=y
CONFIG_SND_SOC_RT5682=y
CONFIG_SND_SOC_RT5682_I2C=y
CONFIG_SND_SOC_RT5682_SDW=y
CONFIG_SND_SOC_RT5682S=y
CONFIG_SND_SOC_RT700=y
CONFIG_SND_SOC_RT700_SDW=y
CONFIG_SND_SOC_RT711=y
CONFIG_SND_SOC_RT711_SDW=y
CONFIG_SND_SOC_RT711_SDCA_SDW=y
CONFIG_SND_SOC_RT715=y
CONFIG_SND_SOC_RT715_SDW=y
CONFIG_SND_SOC_RT715_SDCA_SDW=y
CONFIG_SND_SOC_RT9120=y
CONFIG_SND_SOC_SDW_MOCKUP=y
CONFIG_SND_SOC_SGTL5000=y
CONFIG_SND_SOC_SI476X=y
CONFIG_SND_SOC_SIGMADSP=y
CONFIG_SND_SOC_SIGMADSP_I2C=y
CONFIG_SND_SOC_SIGMADSP_REGMAP=y
CONFIG_SND_SOC_SIMPLE_AMPLIFIER=y
CONFIG_SND_SOC_SIMPLE_MUX=y
CONFIG_SND_SOC_SPDIF=y
CONFIG_SND_SOC_SRC4XXX_I2C=y
CONFIG_SND_SOC_SRC4XXX=y
CONFIG_SND_SOC_SSM2305=y
CONFIG_SND_SOC_SSM2518=y
CONFIG_SND_SOC_SSM2602=y
CONFIG_SND_SOC_SSM2602_SPI=y
CONFIG_SND_SOC_SSM2602_I2C=y
CONFIG_SND_SOC_SSM4567=y
CONFIG_SND_SOC_STA32X=y
CONFIG_SND_SOC_STA350=y
CONFIG_SND_SOC_STI_SAS=y
CONFIG_SND_SOC_TAS2552=y
CONFIG_SND_SOC_TAS2562=y
CONFIG_SND_SOC_TAS2764=y
CONFIG_SND_SOC_TAS2770=y
CONFIG_SND_SOC_TAS2780=y
CONFIG_SND_SOC_TAS5086=y
CONFIG_SND_SOC_TAS571X=y
CONFIG_SND_SOC_TAS5720=y
CONFIG_SND_SOC_TAS5805M=y
CONFIG_SND_SOC_TAS6424=y
CONFIG_SND_SOC_TDA7419=y
CONFIG_SND_SOC_TFA9879=y
CONFIG_SND_SOC_TFA989X=y
CONFIG_SND_SOC_TLV320ADC3XXX=y
CONFIG_SND_SOC_TLV320AIC23=y
CONFIG_SND_SOC_TLV320AIC23_I2C=y
CONFIG_SND_SOC_TLV320AIC23_SPI=y
CONFIG_SND_SOC_TLV320AIC31XX=y
CONFIG_SND_SOC_TLV320AIC32X4=y
CONFIG_SND_SOC_TLV320AIC32X4_I2C=y
CONFIG_SND_SOC_TLV320AIC32X4_SPI=y
CONFIG_SND_SOC_TLV320AIC3X=y
CONFIG_SND_SOC_TLV320AIC3X_I2C=y
CONFIG_SND_SOC_TLV320AIC3X_SPI=y
CONFIG_SND_SOC_TLV320ADCX140=y
CONFIG_SND_SOC_TS3A227E=y
CONFIG_SND_SOC_TSCS42XX=y
CONFIG_SND_SOC_TSCS454=y
CONFIG_SND_SOC_UDA1334=y
CONFIG_SND_SOC_WCD9335=y
CONFIG_SND_SOC_WCD_MBHC=y
CONFIG_SND_SOC_WCD934X=y
CONFIG_SND_SOC_WCD938X=y
CONFIG_SND_SOC_WCD938X_SDW=y
CONFIG_SND_SOC_WM5102=y
CONFIG_SND_SOC_WM8510=y
CONFIG_SND_SOC_WM8523=y
CONFIG_SND_SOC_WM8524=y
CONFIG_SND_SOC_WM8580=y
CONFIG_SND_SOC_WM8711=y
CONFIG_SND_SOC_WM8728=y
CONFIG_SND_SOC_WM8731=y
CONFIG_SND_SOC_WM8731_I2C=y
CONFIG_SND_SOC_WM8731_SPI=y
CONFIG_SND_SOC_WM8737=y
CONFIG_SND_SOC_WM8741=y
CONFIG_SND_SOC_WM8750=y
CONFIG_SND_SOC_WM8753=y
CONFIG_SND_SOC_WM8770=y
CONFIG_SND_SOC_WM8776=y
CONFIG_SND_SOC_WM8782=y
CONFIG_SND_SOC_WM8804=y
CONFIG_SND_SOC_WM8804_I2C=y
CONFIG_SND_SOC_WM8804_SPI=y
CONFIG_SND_SOC_WM8903=y
CONFIG_SND_SOC_WM8904=y
CONFIG_SND_SOC_WM8940=y
CONFIG_SND_SOC_WM8960=y
CONFIG_SND_SOC_WM8962=y
CONFIG_SND_SOC_WM8974=y
CONFIG_SND_SOC_WM8978=y
CONFIG_SND_SOC_WM8985=y
CONFIG_SND_SOC_WSA881X=y
CONFIG_SND_SOC_WSA883X=y
CONFIG_SND_SOC_ZL38060=y
CONFIG_SND_SOC_MAX9759=y
CONFIG_SND_SOC_MT6351=y
CONFIG_SND_SOC_MT6358=y
CONFIG_SND_SOC_MT6660=y
CONFIG_SND_SOC_NAU8315=y
CONFIG_SND_SOC_NAU8540=y
CONFIG_SND_SOC_NAU8810=y
CONFIG_SND_SOC_NAU8821=y
CONFIG_SND_SOC_NAU8822=y
CONFIG_SND_SOC_NAU8824=y
CONFIG_SND_SOC_NAU8825=y
CONFIG_SND_SOC_TPA6130A2=y
CONFIG_SND_SOC_LPASS_MACRO_COMMON=y
CONFIG_SND_SOC_LPASS_WSA_MACRO=y
CONFIG_SND_SOC_LPASS_VA_MACRO=y
CONFIG_SND_SOC_LPASS_RX_MACRO=y
CONFIG_SND_SOC_LPASS_TX_MACRO=y
# end of CODEC drivers

CONFIG_SND_SIMPLE_CARD_UTILS=y
CONFIG_SND_SIMPLE_CARD=y
CONFIG_SND_AUDIO_GRAPH_CARD=y
CONFIG_SND_AUDIO_GRAPH_CARD2=y
CONFIG_SND_AUDIO_GRAPH_CARD2_CUSTOM_SAMPLE=y
# CONFIG_SND_TEST_COMPONENT is not set
CONFIG_SND_X86=y
CONFIG_HDMI_LPE_AUDIO=y
CONFIG_SND_SYNTH_EMUX=y
CONFIG_SND_XEN_FRONTEND=y
CONFIG_SND_VIRTIO=y
CONFIG_AC97_BUS=y

#
# HID support
#
CONFIG_HID=y
CONFIG_HID_BATTERY_STRENGTH=y
CONFIG_HIDRAW=y
CONFIG_UHID=y
CONFIG_HID_GENERIC=y

#
# Special HID drivers
#
CONFIG_HID_A4TECH=y
CONFIG_HID_ACCUTOUCH=y
CONFIG_HID_ACRUX=y
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_APPLE=y
CONFIG_HID_APPLEIR=y
CONFIG_HID_ASUS=y
CONFIG_HID_AUREAL=y
CONFIG_HID_BELKIN=y
CONFIG_HID_BETOP_FF=y
CONFIG_HID_BIGBEN_FF=y
CONFIG_HID_CHERRY=y
CONFIG_HID_CHICONY=y
CONFIG_HID_CORSAIR=y
CONFIG_HID_COUGAR=y
CONFIG_HID_MACALLY=y
CONFIG_HID_PRODIKEYS=y
CONFIG_HID_CMEDIA=y
CONFIG_HID_CP2112=y
CONFIG_HID_CREATIVE_SB0540=y
CONFIG_HID_CYPRESS=y
CONFIG_HID_DRAGONRISE=y
CONFIG_DRAGONRISE_FF=y
CONFIG_HID_EMS_FF=y
CONFIG_HID_ELAN=y
CONFIG_HID_ELECOM=y
CONFIG_HID_ELO=y
CONFIG_HID_EZKEY=y
CONFIG_HID_FT260=y
CONFIG_HID_GEMBIRD=y
CONFIG_HID_GFRM=y
CONFIG_HID_GLORIOUS=y
CONFIG_HID_HOLTEK=y
CONFIG_HOLTEK_FF=y
CONFIG_HID_VIVALDI_COMMON=y
CONFIG_HID_GOOGLE_HAMMER=y
CONFIG_HID_VIVALDI=y
CONFIG_HID_GT683R=y
CONFIG_HID_KEYTOUCH=y
CONFIG_HID_KYE=y
CONFIG_HID_UCLOGIC=y
CONFIG_HID_WALTOP=y
CONFIG_HID_VIEWSONIC=y
CONFIG_HID_VRC2=y
CONFIG_HID_XIAOMI=y
CONFIG_HID_GYRATION=y
CONFIG_HID_ICADE=y
CONFIG_HID_ITE=y
CONFIG_HID_JABRA=y
CONFIG_HID_TWINHAN=y
CONFIG_HID_KENSINGTON=y
CONFIG_HID_LCPOWER=y
CONFIG_HID_LED=y
CONFIG_HID_LENOVO=y
CONFIG_HID_LETSKETCH=y
CONFIG_HID_LOGITECH=y
CONFIG_HID_LOGITECH_DJ=y
CONFIG_HID_LOGITECH_HIDPP=y
CONFIG_LOGITECH_FF=y
CONFIG_LOGIRUMBLEPAD2_FF=y
CONFIG_LOGIG940_FF=y
CONFIG_LOGIWHEELS_FF=y
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MALTRON=y
CONFIG_HID_MAYFLASH=y
CONFIG_HID_MEGAWORLD_FF=y
CONFIG_HID_REDRAGON=y
CONFIG_HID_MICROSOFT=y
CONFIG_HID_MONTEREY=y
CONFIG_HID_MULTITOUCH=y
CONFIG_HID_NINTENDO=y
CONFIG_NINTENDO_FF=y
CONFIG_HID_NTI=y
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=y
CONFIG_HID_PANTHERLORD=y
CONFIG_PANTHERLORD_FF=y
CONFIG_HID_PENMOUNT=y
CONFIG_HID_PETALYNX=y
CONFIG_HID_PICOLCD=y
CONFIG_HID_PICOLCD_FB=y
CONFIG_HID_PICOLCD_BACKLIGHT=y
CONFIG_HID_PICOLCD_LCD=y
CONFIG_HID_PICOLCD_LEDS=y
CONFIG_HID_PICOLCD_CIR=y
CONFIG_HID_PLANTRONICS=y
CONFIG_HID_PLAYSTATION=y
CONFIG_PLAYSTATION_FF=y
CONFIG_HID_PXRC=y
CONFIG_HID_RAZER=y
CONFIG_HID_PRIMAX=y
CONFIG_HID_RETRODE=y
CONFIG_HID_ROCCAT=y
CONFIG_HID_SAITEK=y
CONFIG_HID_SAMSUNG=y
CONFIG_HID_SEMITEK=y
CONFIG_HID_SIGMAMICRO=y
CONFIG_HID_SONY=y
CONFIG_SONY_FF=y
CONFIG_HID_SPEEDLINK=y
CONFIG_HID_STEAM=y
CONFIG_HID_STEELSERIES=y
CONFIG_HID_SUNPLUS=y
CONFIG_HID_RMI=y
CONFIG_HID_GREENASIA=y
CONFIG_GREENASIA_FF=y
CONFIG_HID_HYPERV_MOUSE=y
CONFIG_HID_SMARTJOYPLUS=y
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_HID_TIVO=y
CONFIG_HID_TOPSEED=y
CONFIG_HID_TOPRE=y
CONFIG_HID_THINGM=y
CONFIG_HID_THRUSTMASTER=y
CONFIG_THRUSTMASTER_FF=y
CONFIG_HID_UDRAW_PS3=y
CONFIG_HID_U2FZERO=y
CONFIG_HID_WACOM=y
CONFIG_HID_WIIMOTE=y
CONFIG_HID_XINMO=y
CONFIG_HID_ZEROPLUS=y
CONFIG_ZEROPLUS_FF=y
CONFIG_HID_ZYDACRON=y
CONFIG_HID_SENSOR_HUB=y
CONFIG_HID_SENSOR_CUSTOM_SENSOR=y
CONFIG_HID_ALPS=y
CONFIG_HID_MCP2221=y
# end of Special HID drivers

#
# USB HID support
#
CONFIG_USB_HID=y
CONFIG_HID_PID=y
CONFIG_USB_HIDDEV=y
# end of USB HID support

#
# I2C HID support
#
CONFIG_I2C_HID_ACPI=y
CONFIG_I2C_HID_OF=y
CONFIG_I2C_HID_OF_ELAN=y
CONFIG_I2C_HID_OF_GOODIX=y
# end of I2C HID support

CONFIG_I2C_HID_CORE=y

#
# Intel ISH HID support
#
CONFIG_INTEL_ISH_HID=y
CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER=y
# end of Intel ISH HID support

#
# AMD SFH HID Support
#
# CONFIG_AMD_SFH_HID is not set
# end of AMD SFH HID Support

#
# Surface System Aggregator Module HID support
#
CONFIG_SURFACE_HID=y
CONFIG_SURFACE_KBD=y
# end of Surface System Aggregator Module HID support

CONFIG_SURFACE_HID_CORE=y
# end of HID support

CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_COMMON=y
CONFIG_USB_LED_TRIG=y
CONFIG_USB_ULPI_BUS=y
CONFIG_USB_CONN_GPIO=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB=y
CONFIG_USB_PCI=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y

#
# Miscellaneous USB options
#
CONFIG_USB_DEFAULT_PERSIST=y
CONFIG_USB_FEW_INIT_RETRIES=y
CONFIG_USB_DYNAMIC_MINORS=y
CONFIG_USB_OTG=y
CONFIG_USB_OTG_PRODUCTLIST=y
CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB=y
CONFIG_USB_OTG_FSM=y
CONFIG_USB_LEDS_TRIGGER_USBPORT=y
CONFIG_USB_AUTOSUSPEND_DELAY=2
CONFIG_USB_MON=y

#
# USB Host Controller Drivers
#
CONFIG_USB_C67X00_HCD=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_DBGCAP=y
CONFIG_USB_XHCI_PCI=y
CONFIG_USB_XHCI_PCI_RENESAS=y
CONFIG_USB_XHCI_PLATFORM=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_ROOT_HUB_TT=y
CONFIG_USB_EHCI_TT_NEWSCHED=y
CONFIG_USB_EHCI_PCI=y
CONFIG_USB_EHCI_FSL=y
CONFIG_USB_EHCI_HCD_PLATFORM=y
CONFIG_USB_OXU210HP_HCD=y
CONFIG_USB_ISP116X_HCD=y
CONFIG_USB_FOTG210_HCD=y
CONFIG_USB_MAX3421_HCD=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PCI=y
CONFIG_USB_OHCI_HCD_SSB=y
CONFIG_USB_OHCI_HCD_PLATFORM=y
CONFIG_USB_UHCI_HCD=y
CONFIG_USB_U132_HCD=y
CONFIG_USB_SL811_HCD=y
CONFIG_USB_SL811_HCD_ISO=y
CONFIG_USB_SL811_CS=y
CONFIG_USB_R8A66597_HCD=y
CONFIG_USB_HCD_BCMA=y
CONFIG_USB_HCD_SSB=y
# CONFIG_USB_HCD_TEST_MODE is not set
CONFIG_USB_XEN_HCD=y

#
# USB Device Class drivers
#
CONFIG_USB_ACM=y
CONFIG_USB_PRINTER=y
CONFIG_USB_WDM=y
CONFIG_USB_TMC=y

#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#

#
# also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=y
CONFIG_USB_STORAGE_DEBUG=y
CONFIG_USB_STORAGE_REALTEK=y
CONFIG_REALTEK_AUTOPM=y
CONFIG_USB_STORAGE_DATAFAB=y
CONFIG_USB_STORAGE_FREECOM=y
CONFIG_USB_STORAGE_ISD200=y
CONFIG_USB_STORAGE_USBAT=y
CONFIG_USB_STORAGE_SDDR09=y
CONFIG_USB_STORAGE_SDDR55=y
CONFIG_USB_STORAGE_JUMPSHOT=y
CONFIG_USB_STORAGE_ALAUDA=y
CONFIG_USB_STORAGE_ONETOUCH=y
CONFIG_USB_STORAGE_KARMA=y
CONFIG_USB_STORAGE_CYPRESS_ATACB=y
CONFIG_USB_STORAGE_ENE_UB6250=y
CONFIG_USB_UAS=y

#
# USB Imaging devices
#
CONFIG_USB_MDC800=y
CONFIG_USB_MICROTEK=y
CONFIG_USBIP_CORE=y
CONFIG_USBIP_VHCI_HCD=y
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_HOST=y
CONFIG_USBIP_VUDC=y
CONFIG_USBIP_DEBUG=y
CONFIG_USB_CDNS_SUPPORT=y
CONFIG_USB_CDNS_HOST=y
CONFIG_USB_CDNS3=y
CONFIG_USB_CDNS3_GADGET=y
CONFIG_USB_CDNS3_HOST=y
CONFIG_USB_CDNS3_PCI_WRAP=y
CONFIG_USB_CDNSP_PCI=y
CONFIG_USB_CDNSP_GADGET=y
CONFIG_USB_CDNSP_HOST=y
CONFIG_USB_MUSB_HDRC=y
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_GADGET is not set
CONFIG_USB_MUSB_DUAL_ROLE=y

#
# Platform Glue Layer
#

#
# MUSB DMA mode
#
CONFIG_MUSB_PIO_ONLY=y
CONFIG_USB_DWC3=y
CONFIG_USB_DWC3_ULPI=y
# CONFIG_USB_DWC3_HOST is not set
# CONFIG_USB_DWC3_GADGET is not set
CONFIG_USB_DWC3_DUAL_ROLE=y

#
# Platform Glue Driver Support
#
CONFIG_USB_DWC3_PCI=y
CONFIG_USB_DWC3_HAPS=y
CONFIG_USB_DWC3_OF_SIMPLE=y
# CONFIG_USB_DWC2 is not set
CONFIG_USB_CHIPIDEA=y
CONFIG_USB_CHIPIDEA_UDC=y
CONFIG_USB_CHIPIDEA_HOST=y
CONFIG_USB_CHIPIDEA_PCI=y
CONFIG_USB_CHIPIDEA_MSM=y
CONFIG_USB_CHIPIDEA_IMX=y
CONFIG_USB_CHIPIDEA_GENERIC=y
CONFIG_USB_CHIPIDEA_TEGRA=y
CONFIG_USB_ISP1760=y
CONFIG_USB_ISP1760_HCD=y
CONFIG_USB_ISP1761_UDC=y
# CONFIG_USB_ISP1760_HOST_ROLE is not set
# CONFIG_USB_ISP1760_GADGET_ROLE is not set
CONFIG_USB_ISP1760_DUAL_ROLE=y

#
# USB port drivers
#
CONFIG_USB_USS720=y
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_CONSOLE=y
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_SIMPLE=y
CONFIG_USB_SERIAL_AIRCABLE=y
CONFIG_USB_SERIAL_ARK3116=y
CONFIG_USB_SERIAL_BELKIN=y
CONFIG_USB_SERIAL_CH341=y
CONFIG_USB_SERIAL_WHITEHEAT=y
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=y
CONFIG_USB_SERIAL_CP210X=y
CONFIG_USB_SERIAL_CYPRESS_M8=y
CONFIG_USB_SERIAL_EMPEG=y
CONFIG_USB_SERIAL_FTDI_SIO=y
CONFIG_USB_SERIAL_VISOR=y
CONFIG_USB_SERIAL_IPAQ=y
CONFIG_USB_SERIAL_IR=y
CONFIG_USB_SERIAL_EDGEPORT=y
CONFIG_USB_SERIAL_EDGEPORT_TI=y
CONFIG_USB_SERIAL_F81232=y
CONFIG_USB_SERIAL_F8153X=y
CONFIG_USB_SERIAL_GARMIN=y
CONFIG_USB_SERIAL_IPW=y
CONFIG_USB_SERIAL_IUU=y
CONFIG_USB_SERIAL_KEYSPAN_PDA=y
CONFIG_USB_SERIAL_KEYSPAN=y
CONFIG_USB_SERIAL_KLSI=y
CONFIG_USB_SERIAL_KOBIL_SCT=y
CONFIG_USB_SERIAL_MCT_U232=y
CONFIG_USB_SERIAL_METRO=y
CONFIG_USB_SERIAL_MOS7720=y
CONFIG_USB_SERIAL_MOS7715_PARPORT=y
CONFIG_USB_SERIAL_MOS7840=y
CONFIG_USB_SERIAL_MXUPORT=y
CONFIG_USB_SERIAL_NAVMAN=y
CONFIG_USB_SERIAL_PL2303=y
CONFIG_USB_SERIAL_OTI6858=y
CONFIG_USB_SERIAL_QCAUX=y
CONFIG_USB_SERIAL_QUALCOMM=y
CONFIG_USB_SERIAL_SPCP8X5=y
CONFIG_USB_SERIAL_SAFE=y
CONFIG_USB_SERIAL_SAFE_PADDED=y
CONFIG_USB_SERIAL_SIERRAWIRELESS=y
CONFIG_USB_SERIAL_SYMBOL=y
CONFIG_USB_SERIAL_TI=y
CONFIG_USB_SERIAL_CYBERJACK=y
CONFIG_USB_SERIAL_WWAN=y
CONFIG_USB_SERIAL_OPTION=y
CONFIG_USB_SERIAL_OMNINET=y
CONFIG_USB_SERIAL_OPTICON=y
CONFIG_USB_SERIAL_XSENS_MT=y
CONFIG_USB_SERIAL_WISHBONE=y
CONFIG_USB_SERIAL_SSU100=y
CONFIG_USB_SERIAL_QT2=y
CONFIG_USB_SERIAL_UPD78F0730=y
CONFIG_USB_SERIAL_XR=y
CONFIG_USB_SERIAL_DEBUG=y

#
# USB Miscellaneous drivers
#
CONFIG_USB_EMI62=y
CONFIG_USB_EMI26=y
CONFIG_USB_ADUTUX=y
CONFIG_USB_SEVSEG=y
CONFIG_USB_LEGOTOWER=y
CONFIG_USB_LCD=y
CONFIG_USB_CYPRESS_CY7C63=y
CONFIG_USB_CYTHERM=y
CONFIG_USB_IDMOUSE=y
CONFIG_USB_FTDI_ELAN=y
CONFIG_USB_APPLEDISPLAY=y
CONFIG_APPLE_MFI_FASTCHARGE=y
CONFIG_USB_SISUSBVGA=y
CONFIG_USB_LD=y
CONFIG_USB_TRANCEVIBRATOR=y
CONFIG_USB_IOWARRIOR=y
# CONFIG_USB_TEST is not set
# CONFIG_USB_EHSET_TEST_FIXTURE is not set
CONFIG_USB_ISIGHTFW=y
CONFIG_USB_YUREX=y
CONFIG_USB_EZUSB_FX2=y
CONFIG_USB_HUB_USB251XB=y
CONFIG_USB_HSIC_USB3503=y
CONFIG_USB_HSIC_USB4604=y
# CONFIG_USB_LINK_LAYER_TEST is not set
CONFIG_USB_CHAOSKEY=y
CONFIG_USB_ONBOARD_HUB=y
CONFIG_USB_ATM=y
CONFIG_USB_SPEEDTOUCH=y
CONFIG_USB_CXACRU=y
CONFIG_USB_UEAGLEATM=y
CONFIG_USB_XUSBATM=y

#
# USB Physical Layer drivers
#
CONFIG_USB_PHY=y
CONFIG_NOP_USB_XCEIV=y
CONFIG_USB_GPIO_VBUS=y
CONFIG_TAHVO_USB=y
CONFIG_TAHVO_USB_HOST_BY_DEFAULT=y
CONFIG_USB_ISP1301=y
# end of USB Physical Layer drivers

CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_DEBUG=y
CONFIG_USB_GADGET_VERBOSE=y
CONFIG_USB_GADGET_DEBUG_FILES=y
CONFIG_USB_GADGET_DEBUG_FS=y
CONFIG_USB_GADGET_VBUS_DRAW=2
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
CONFIG_U_SERIAL_CONSOLE=y

#
# USB Peripheral Controller
#
CONFIG_USB_FOTG210_UDC=y
CONFIG_USB_GR_UDC=y
CONFIG_USB_R8A66597=y
CONFIG_USB_PXA27X=y
CONFIG_USB_MV_UDC=y
CONFIG_USB_MV_U3D=y
CONFIG_USB_SNP_CORE=y
CONFIG_USB_SNP_UDC_PLAT=y
CONFIG_USB_M66592=y
CONFIG_USB_BDC_UDC=y
# CONFIG_USB_AMD5536UDC is not set
CONFIG_USB_NET2272=y
CONFIG_USB_NET2272_DMA=y
CONFIG_USB_NET2280=y
CONFIG_USB_GOKU=y
CONFIG_USB_EG20T=y
CONFIG_USB_GADGET_XILINX=y
CONFIG_USB_MAX3420_UDC=y
CONFIG_USB_DUMMY_HCD=y
# end of USB Peripheral Controller

CONFIG_USB_LIBCOMPOSITE=y
CONFIG_USB_F_ACM=y
CONFIG_USB_F_SS_LB=y
CONFIG_USB_U_SERIAL=y
CONFIG_USB_U_ETHER=y
CONFIG_USB_U_AUDIO=y
CONFIG_USB_F_SERIAL=y
CONFIG_USB_F_OBEX=y
CONFIG_USB_F_NCM=y
CONFIG_USB_F_ECM=y
CONFIG_USB_F_PHONET=y
CONFIG_USB_F_EEM=y
CONFIG_USB_F_SUBSET=y
CONFIG_USB_F_RNDIS=y
CONFIG_USB_F_MASS_STORAGE=y
CONFIG_USB_F_FS=y
CONFIG_USB_F_UAC1=y
CONFIG_USB_F_UAC1_LEGACY=y
CONFIG_USB_F_UAC2=y
CONFIG_USB_F_UVC=y
CONFIG_USB_F_MIDI=y
CONFIG_USB_F_HID=y
CONFIG_USB_F_PRINTER=y
CONFIG_USB_F_TCM=y
CONFIG_USB_CONFIGFS=y
CONFIG_USB_CONFIGFS_SERIAL=y
CONFIG_USB_CONFIGFS_ACM=y
CONFIG_USB_CONFIGFS_OBEX=y
CONFIG_USB_CONFIGFS_NCM=y
CONFIG_USB_CONFIGFS_ECM=y
CONFIG_USB_CONFIGFS_ECM_SUBSET=y
CONFIG_USB_CONFIGFS_RNDIS=y
CONFIG_USB_CONFIGFS_EEM=y
CONFIG_USB_CONFIGFS_PHONET=y
CONFIG_USB_CONFIGFS_MASS_STORAGE=y
CONFIG_USB_CONFIGFS_F_LB_SS=y
CONFIG_USB_CONFIGFS_F_FS=y
CONFIG_USB_CONFIGFS_F_UAC1=y
CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y
CONFIG_USB_CONFIGFS_F_UAC2=y
CONFIG_USB_CONFIGFS_F_MIDI=y
CONFIG_USB_CONFIGFS_F_HID=y
CONFIG_USB_CONFIGFS_F_UVC=y
CONFIG_USB_CONFIGFS_F_PRINTER=y
CONFIG_USB_CONFIGFS_F_TCM=y

#
# USB Gadget precomposed configurations
#
CONFIG_USB_ZERO=y
CONFIG_USB_ZERO_HNPTEST=y
CONFIG_USB_AUDIO=y
CONFIG_GADGET_UAC1=y
CONFIG_GADGET_UAC1_LEGACY=y
CONFIG_USB_ETH=y
CONFIG_USB_ETH_RNDIS=y
CONFIG_USB_ETH_EEM=y
CONFIG_USB_G_NCM=y
CONFIG_USB_GADGETFS=y
CONFIG_USB_FUNCTIONFS=y
CONFIG_USB_FUNCTIONFS_ETH=y
CONFIG_USB_FUNCTIONFS_RNDIS=y
CONFIG_USB_FUNCTIONFS_GENERIC=y
CONFIG_USB_MASS_STORAGE=y
CONFIG_USB_GADGET_TARGET=y
CONFIG_USB_G_SERIAL=y
CONFIG_USB_MIDI_GADGET=y
CONFIG_USB_G_PRINTER=y
CONFIG_USB_CDC_COMPOSITE=y
CONFIG_USB_G_NOKIA=y
CONFIG_USB_G_ACM_MS=y
CONFIG_USB_G_MULTI=y
CONFIG_USB_G_MULTI_RNDIS=y
CONFIG_USB_G_MULTI_CDC=y
CONFIG_USB_G_HID=y
CONFIG_USB_G_DBGP=y
# CONFIG_USB_G_DBGP_PRINTK is not set
CONFIG_USB_G_DBGP_SERIAL=y
# CONFIG_USB_G_WEBCAM is not set
CONFIG_USB_RAW_GADGET=y
# end of USB Gadget precomposed configurations

CONFIG_TYPEC=y
CONFIG_TYPEC_TCPM=y
CONFIG_TYPEC_TCPCI=y
CONFIG_TYPEC_RT1711H=y
CONFIG_TYPEC_MT6360=y
CONFIG_TYPEC_TCPCI_MT6370=y
CONFIG_TYPEC_TCPCI_MAXIM=y
CONFIG_TYPEC_FUSB302=y
CONFIG_TYPEC_WCOVE=y
CONFIG_TYPEC_UCSI=y
CONFIG_UCSI_CCG=y
CONFIG_UCSI_ACPI=y
CONFIG_UCSI_STM32G0=y
CONFIG_TYPEC_TPS6598X=y
CONFIG_TYPEC_ANX7411=y
CONFIG_TYPEC_RT1719=y
CONFIG_TYPEC_HD3SS3220=y
CONFIG_TYPEC_STUSB160X=y
CONFIG_TYPEC_WUSB3801=y

#
# USB Type-C Multiplexer/DeMultiplexer Switch support
#
CONFIG_TYPEC_MUX_FSA4480=y
CONFIG_TYPEC_MUX_PI3USB30532=y
CONFIG_TYPEC_MUX_INTEL_PMC=y
# end of USB Type-C Multiplexer/DeMultiplexer Switch support

#
# USB Type-C Alternate Mode drivers
#
CONFIG_TYPEC_DP_ALTMODE=y
CONFIG_TYPEC_NVIDIA_ALTMODE=y
# end of USB Type-C Alternate Mode drivers

CONFIG_USB_ROLE_SWITCH=y
CONFIG_USB_ROLES_INTEL_XHCI=y
CONFIG_MMC=y
CONFIG_PWRSEQ_EMMC=y
CONFIG_PWRSEQ_SD8787=y
CONFIG_PWRSEQ_SIMPLE=y
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_SDIO_UART=y
# CONFIG_MMC_TEST is not set
CONFIG_MMC_CRYPTO=y

#
# MMC/SD/SDIO Host Controller Drivers
#
CONFIG_MMC_DEBUG=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_IO_ACCESSORS=y
CONFIG_MMC_SDHCI_PCI=y
CONFIG_MMC_RICOH_MMC=y
CONFIG_MMC_SDHCI_ACPI=y
CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SDHCI_OF_ARASAN=y
CONFIG_MMC_SDHCI_OF_AT91=y
CONFIG_MMC_SDHCI_OF_DWCMSHC=y
CONFIG_MMC_SDHCI_CADENCE=y
CONFIG_MMC_SDHCI_F_SDH30=y
CONFIG_MMC_SDHCI_MILBEAUT=y
CONFIG_MMC_WBSD=y
CONFIG_MMC_ALCOR=y
CONFIG_MMC_TIFM_SD=y
CONFIG_MMC_SPI=y
CONFIG_MMC_SDRICOH_CS=y
CONFIG_MMC_CB710=y
CONFIG_MMC_VIA_SDMMC=y
CONFIG_MMC_VUB300=y
CONFIG_MMC_USHC=y
CONFIG_MMC_USDHI6ROL0=y
CONFIG_MMC_REALTEK_PCI=y
CONFIG_MMC_REALTEK_USB=y
CONFIG_MMC_CQHCI=y
CONFIG_MMC_HSQ=y
CONFIG_MMC_TOSHIBA_PCI=y
CONFIG_MMC_MTK=y
CONFIG_MMC_SDHCI_XENON=y
CONFIG_MMC_SDHCI_OMAP=y
CONFIG_MMC_SDHCI_AM654=y
CONFIG_MMC_SDHCI_EXTERNAL_DMA=y
CONFIG_MMC_LITEX=y
CONFIG_SCSI_UFSHCD=y
CONFIG_SCSI_UFS_BSG=y
CONFIG_SCSI_UFS_CRYPTO=y
CONFIG_SCSI_UFS_HPB=y
CONFIG_SCSI_UFS_FAULT_INJECTION=y
CONFIG_SCSI_UFS_HWMON=y
CONFIG_SCSI_UFSHCD_PCI=y
CONFIG_SCSI_UFS_DWC_TC_PCI=y
CONFIG_SCSI_UFSHCD_PLATFORM=y
CONFIG_SCSI_UFS_CDNS_PLATFORM=y
CONFIG_SCSI_UFS_DWC_TC_PLATFORM=y
CONFIG_MEMSTICK=y
CONFIG_MEMSTICK_DEBUG=y

#
# MemoryStick drivers
#
CONFIG_MEMSTICK_UNSAFE_RESUME=y
CONFIG_MSPRO_BLOCK=y
CONFIG_MS_BLOCK=y

#
# MemoryStick Host Controller Drivers
#
CONFIG_MEMSTICK_TIFM_MS=y
CONFIG_MEMSTICK_JMICRON_38X=y
CONFIG_MEMSTICK_R592=y
CONFIG_MEMSTICK_REALTEK_PCI=y
CONFIG_MEMSTICK_REALTEK_USB=y
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
CONFIG_LEDS_CLASS_FLASH=y
CONFIG_LEDS_CLASS_MULTICOLOR=y
CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y

#
# LED drivers
#
CONFIG_LEDS_88PM860X=y
CONFIG_LEDS_AN30259A=y
CONFIG_LEDS_APU=y
CONFIG_LEDS_AW2013=y
CONFIG_LEDS_BCM6328=y
CONFIG_LEDS_BCM6358=y
CONFIG_LEDS_CPCAP=y
CONFIG_LEDS_CR0014114=y
CONFIG_LEDS_EL15203000=y
CONFIG_LEDS_LM3530=y
CONFIG_LEDS_LM3532=y
CONFIG_LEDS_LM3533=y
CONFIG_LEDS_LM3642=y
CONFIG_LEDS_LM3692X=y
CONFIG_LEDS_MT6323=y
CONFIG_LEDS_PCA9532=y
CONFIG_LEDS_PCA9532_GPIO=y
CONFIG_LEDS_GPIO=y
CONFIG_LEDS_LP3944=y
CONFIG_LEDS_LP3952=y
CONFIG_LEDS_LP50XX=y
CONFIG_LEDS_LP55XX_COMMON=y
CONFIG_LEDS_LP5521=y
CONFIG_LEDS_LP5523=y
CONFIG_LEDS_LP5562=y
CONFIG_LEDS_LP8501=y
CONFIG_LEDS_LP8788=y
CONFIG_LEDS_LP8860=y
CONFIG_LEDS_PCA955X=y
CONFIG_LEDS_PCA955X_GPIO=y
CONFIG_LEDS_PCA963X=y
CONFIG_LEDS_WM831X_STATUS=y
CONFIG_LEDS_WM8350=y
CONFIG_LEDS_DA903X=y
CONFIG_LEDS_DA9052=y
CONFIG_LEDS_DAC124S085=y
CONFIG_LEDS_PWM=y
CONFIG_LEDS_REGULATOR=y
CONFIG_LEDS_BD2802=y
CONFIG_LEDS_INTEL_SS4200=y
CONFIG_LEDS_LT3593=y
CONFIG_LEDS_ADP5520=y
CONFIG_LEDS_MC13783=y
CONFIG_LEDS_TCA6507=y
CONFIG_LEDS_TLC591XX=y
CONFIG_LEDS_MAX77650=y
CONFIG_LEDS_MAX8997=y
CONFIG_LEDS_LM355x=y
CONFIG_LEDS_MENF21BMC=y
CONFIG_LEDS_IS31FL319X=y
CONFIG_LEDS_IS31FL32XX=y

#
# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
#
CONFIG_LEDS_BLINKM=y
CONFIG_LEDS_SYSCON=y
CONFIG_LEDS_MLXCPLD=y
CONFIG_LEDS_MLXREG=y
CONFIG_LEDS_USER=y
CONFIG_LEDS_NIC78BX=y
CONFIG_LEDS_SPI_BYTE=y
CONFIG_LEDS_TI_LMU_COMMON=y
CONFIG_LEDS_LM3697=y
CONFIG_LEDS_LM36274=y
CONFIG_LEDS_TPS6105X=y
CONFIG_LEDS_LGM=y

#
# Flash and Torch LED drivers
#
CONFIG_LEDS_AAT1290=y
CONFIG_LEDS_AS3645A=y
CONFIG_LEDS_KTD2692=y
CONFIG_LEDS_LM3601X=y
CONFIG_LEDS_MAX77693=y
CONFIG_LEDS_MT6360=y
CONFIG_LEDS_RT4505=y
CONFIG_LEDS_RT8515=y
CONFIG_LEDS_SGM3140=y

#
# RGB LED drivers
#
CONFIG_LEDS_PWM_MULTICOLOR=y
CONFIG_LEDS_QCOM_LPG=y

#
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_ONESHOT=y
CONFIG_LEDS_TRIGGER_DISK=y
CONFIG_LEDS_TRIGGER_MTD=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
CONFIG_LEDS_TRIGGER_BACKLIGHT=y
CONFIG_LEDS_TRIGGER_CPU=y
CONFIG_LEDS_TRIGGER_ACTIVITY=y
CONFIG_LEDS_TRIGGER_GPIO=y
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y

#
# iptables trigger is under Netfilter config (LED target)
#
CONFIG_LEDS_TRIGGER_TRANSIENT=y
CONFIG_LEDS_TRIGGER_CAMERA=y
CONFIG_LEDS_TRIGGER_PANIC=y
CONFIG_LEDS_TRIGGER_NETDEV=y
CONFIG_LEDS_TRIGGER_PATTERN=y
CONFIG_LEDS_TRIGGER_AUDIO=y
CONFIG_LEDS_TRIGGER_TTY=y

#
# Simple LED drivers
#
CONFIG_LEDS_SIEMENS_SIMATIC_IPC=y
CONFIG_ACCESSIBILITY=y
CONFIG_A11Y_BRAILLE_CONSOLE=y

#
# Speakup console speech
#
CONFIG_SPEAKUP=y
CONFIG_SPEAKUP_SYNTH_ACNTSA=y
CONFIG_SPEAKUP_SYNTH_APOLLO=y
CONFIG_SPEAKUP_SYNTH_AUDPTR=y
CONFIG_SPEAKUP_SYNTH_BNS=y
CONFIG_SPEAKUP_SYNTH_DECTLK=y
CONFIG_SPEAKUP_SYNTH_DECEXT=y
CONFIG_SPEAKUP_SYNTH_LTLK=y
CONFIG_SPEAKUP_SYNTH_SOFT=y
CONFIG_SPEAKUP_SYNTH_SPKOUT=y
CONFIG_SPEAKUP_SYNTH_TXPRT=y
CONFIG_SPEAKUP_SYNTH_DUMMY=y
# end of Speakup console speech

CONFIG_INFINIBAND=y
CONFIG_INFINIBAND_USER_MAD=y
CONFIG_INFINIBAND_USER_ACCESS=y
CONFIG_INFINIBAND_USER_MEM=y
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_ADDR_TRANS=y
CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y
CONFIG_INFINIBAND_VIRT_DMA=y
CONFIG_INFINIBAND_BNXT_RE=y
CONFIG_INFINIBAND_CXGB4=y
CONFIG_INFINIBAND_EFA=y
CONFIG_INFINIBAND_ERDMA=y
CONFIG_INFINIBAND_HFI1=y
CONFIG_HFI1_DEBUG_SDMA_ORDER=y
CONFIG_SDMA_VERBOSITY=y
CONFIG_INFINIBAND_IRDMA=y
CONFIG_MLX4_INFINIBAND=y
CONFIG_MLX5_INFINIBAND=y
CONFIG_INFINIBAND_MTHCA=y
CONFIG_INFINIBAND_MTHCA_DEBUG=y
CONFIG_INFINIBAND_OCRDMA=y
CONFIG_INFINIBAND_QEDR=y
CONFIG_INFINIBAND_QIB=y
CONFIG_INFINIBAND_QIB_DCA=y
CONFIG_INFINIBAND_USNIC=y
CONFIG_INFINIBAND_VMWARE_PVRDMA=y
CONFIG_INFINIBAND_RDMAVT=y
CONFIG_RDMA_RXE=y
CONFIG_RDMA_SIW=y
CONFIG_INFINIBAND_IPOIB=y
CONFIG_INFINIBAND_IPOIB_CM=y
CONFIG_INFINIBAND_IPOIB_DEBUG=y
CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y
CONFIG_INFINIBAND_SRP=y
CONFIG_INFINIBAND_SRPT=y
CONFIG_INFINIBAND_ISER=y
CONFIG_INFINIBAND_ISERT=y
CONFIG_INFINIBAND_RTRS=y
CONFIG_INFINIBAND_RTRS_CLIENT=y
CONFIG_INFINIBAND_RTRS_SERVER=y
CONFIG_INFINIBAND_OPA_VNIC=y
CONFIG_EDAC_ATOMIC_SCRUB=y
CONFIG_EDAC_SUPPORT=y
CONFIG_EDAC=y
CONFIG_EDAC_LEGACY_SYSFS=y
CONFIG_EDAC_DEBUG=y
CONFIG_EDAC_GHES=y
CONFIG_EDAC_E752X=y
CONFIG_EDAC_I82975X=y
CONFIG_EDAC_I3000=y
CONFIG_EDAC_I3200=y
CONFIG_EDAC_IE31200=y
CONFIG_EDAC_X38=y
CONFIG_EDAC_I5400=y
CONFIG_EDAC_I7CORE=y
CONFIG_EDAC_I5000=y
CONFIG_EDAC_I5100=y
CONFIG_EDAC_I7300=y
CONFIG_EDAC_SBRIDGE=y
CONFIG_EDAC_SKX=y
CONFIG_EDAC_I10NM=y
CONFIG_EDAC_PND2=y
CONFIG_EDAC_IGEN6=y
CONFIG_RTC_LIB=y
CONFIG_RTC_MC146818_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
CONFIG_RTC_SYSTOHC=y
CONFIG_RTC_SYSTOHC_DEVICE="rtc0"
CONFIG_RTC_DEBUG=y
CONFIG_RTC_NVMEM=y

#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
CONFIG_RTC_INTF_DEV_UIE_EMUL=y
# CONFIG_RTC_DRV_TEST is not set

#
# I2C RTC drivers
#
CONFIG_RTC_DRV_88PM860X=y
CONFIG_RTC_DRV_88PM80X=y
CONFIG_RTC_DRV_ABB5ZES3=y
CONFIG_RTC_DRV_ABEOZ9=y
CONFIG_RTC_DRV_ABX80X=y
CONFIG_RTC_DRV_AS3722=y
CONFIG_RTC_DRV_DS1307=y
CONFIG_RTC_DRV_DS1307_CENTURY=y
CONFIG_RTC_DRV_DS1374=y
CONFIG_RTC_DRV_DS1374_WDT=y
CONFIG_RTC_DRV_DS1672=y
CONFIG_RTC_DRV_HYM8563=y
CONFIG_RTC_DRV_LP8788=y
CONFIG_RTC_DRV_MAX6900=y
CONFIG_RTC_DRV_MAX8907=y
CONFIG_RTC_DRV_MAX8925=y
CONFIG_RTC_DRV_MAX8998=y
CONFIG_RTC_DRV_MAX8997=y
CONFIG_RTC_DRV_MAX77686=y
CONFIG_RTC_DRV_NCT3018Y=y
CONFIG_RTC_DRV_RK808=y
CONFIG_RTC_DRV_RS5C372=y
CONFIG_RTC_DRV_ISL1208=y
CONFIG_RTC_DRV_ISL12022=y
CONFIG_RTC_DRV_ISL12026=y
CONFIG_RTC_DRV_X1205=y
CONFIG_RTC_DRV_PCF8523=y
CONFIG_RTC_DRV_PCF85063=y
CONFIG_RTC_DRV_PCF85363=y
CONFIG_RTC_DRV_PCF8563=y
CONFIG_RTC_DRV_PCF8583=y
CONFIG_RTC_DRV_M41T80=y
CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_BD70528=y
CONFIG_RTC_DRV_BQ32K=y
CONFIG_RTC_DRV_TWL4030=y
CONFIG_RTC_DRV_PALMAS=y
CONFIG_RTC_DRV_TPS6586X=y
CONFIG_RTC_DRV_TPS65910=y
CONFIG_RTC_DRV_RC5T583=y
CONFIG_RTC_DRV_RC5T619=y
CONFIG_RTC_DRV_S35390A=y
CONFIG_RTC_DRV_FM3130=y
CONFIG_RTC_DRV_RX8010=y
CONFIG_RTC_DRV_RX8581=y
CONFIG_RTC_DRV_RX8025=y
CONFIG_RTC_DRV_EM3027=y
CONFIG_RTC_DRV_RV3028=y
CONFIG_RTC_DRV_RV3032=y
CONFIG_RTC_DRV_RV8803=y
CONFIG_RTC_DRV_S5M=y
CONFIG_RTC_DRV_SD3078=y

#
# SPI RTC drivers
#
CONFIG_RTC_DRV_M41T93=y
CONFIG_RTC_DRV_M41T94=y
CONFIG_RTC_DRV_DS1302=y
CONFIG_RTC_DRV_DS1305=y
CONFIG_RTC_DRV_DS1343=y
CONFIG_RTC_DRV_DS1347=y
CONFIG_RTC_DRV_DS1390=y
CONFIG_RTC_DRV_MAX6916=y
CONFIG_RTC_DRV_R9701=y
CONFIG_RTC_DRV_RX4581=y
CONFIG_RTC_DRV_RS5C348=y
CONFIG_RTC_DRV_MAX6902=y
CONFIG_RTC_DRV_PCF2123=y
CONFIG_RTC_DRV_MCP795=y
CONFIG_RTC_I2C_AND_SPI=y

#
# SPI and I2C RTC drivers
#
CONFIG_RTC_DRV_DS3232=y
CONFIG_RTC_DRV_DS3232_HWMON=y
CONFIG_RTC_DRV_PCF2127=y
CONFIG_RTC_DRV_RV3029C2=y
CONFIG_RTC_DRV_RV3029_HWMON=y
CONFIG_RTC_DRV_RX6110=y

#
# Platform RTC drivers
#
CONFIG_RTC_DRV_CMOS=y
CONFIG_RTC_DRV_DS1286=y
CONFIG_RTC_DRV_DS1511=y
CONFIG_RTC_DRV_DS1553=y
CONFIG_RTC_DRV_DS1685_FAMILY=y
CONFIG_RTC_DRV_DS1685=y
# CONFIG_RTC_DRV_DS1689 is not set
# CONFIG_RTC_DRV_DS17285 is not set
# CONFIG_RTC_DRV_DS17485 is not set
# CONFIG_RTC_DRV_DS17885 is not set
CONFIG_RTC_DRV_DS1742=y
CONFIG_RTC_DRV_DS2404=y
CONFIG_RTC_DRV_DA9052=y
CONFIG_RTC_DRV_DA9055=y
CONFIG_RTC_DRV_DA9063=y
CONFIG_RTC_DRV_STK17TA8=y
CONFIG_RTC_DRV_M48T86=y
CONFIG_RTC_DRV_M48T35=y
CONFIG_RTC_DRV_M48T59=y
CONFIG_RTC_DRV_MSM6242=y
CONFIG_RTC_DRV_BQ4802=y
CONFIG_RTC_DRV_RP5C01=y
CONFIG_RTC_DRV_V3020=y
CONFIG_RTC_DRV_WM831X=y
CONFIG_RTC_DRV_WM8350=y
CONFIG_RTC_DRV_PCF50633=y
CONFIG_RTC_DRV_ZYNQMP=y
CONFIG_RTC_DRV_CROS_EC=y
CONFIG_RTC_DRV_NTXEC=y

#
# on-CPU RTC drivers
#
CONFIG_RTC_DRV_CADENCE=y
CONFIG_RTC_DRV_FTRTC010=y
CONFIG_RTC_DRV_PCAP=y
CONFIG_RTC_DRV_MC13XXX=y
CONFIG_RTC_DRV_MT6397=y
CONFIG_RTC_DRV_R7301=y
CONFIG_RTC_DRV_CPCAP=y

#
# HID Sensor RTC drivers
#
CONFIG_RTC_DRV_HID_SENSOR_TIME=y
CONFIG_RTC_DRV_GOLDFISH=y
CONFIG_RTC_DRV_WILCO_EC=y
CONFIG_DMADEVICES=y
CONFIG_DMADEVICES_DEBUG=y
CONFIG_DMADEVICES_VDEBUG=y

#
# DMA Devices
#
CONFIG_DMA_ENGINE=y
CONFIG_DMA_VIRTUAL_CHANNELS=y
CONFIG_DMA_ACPI=y
CONFIG_DMA_OF=y
CONFIG_ALTERA_MSGDMA=y
CONFIG_DW_AXI_DMAC=y
CONFIG_FSL_EDMA=y
CONFIG_INTEL_IDMA64=y
CONFIG_INTEL_IDXD_BUS=y
CONFIG_INTEL_IDXD=y
CONFIG_INTEL_IDXD_COMPAT=y
CONFIG_INTEL_IDXD_SVM=y
CONFIG_INTEL_IDXD_PERFMON=y
CONFIG_INTEL_IOATDMA=y
CONFIG_PLX_DMA=y
CONFIG_XILINX_ZYNQMP_DPDMA=y
# CONFIG_AMD_PTDMA is not set
CONFIG_QCOM_HIDMA_MGMT=y
CONFIG_QCOM_HIDMA=y
CONFIG_DW_DMAC_CORE=y
CONFIG_DW_DMAC=y
CONFIG_DW_DMAC_PCI=y
CONFIG_DW_EDMA=y
CONFIG_DW_EDMA_PCIE=y
CONFIG_HSU_DMA=y
CONFIG_HSU_DMA_PCI=y
CONFIG_SF_PDMA=y
CONFIG_INTEL_LDMA=y

#
# DMA Clients
#
CONFIG_ASYNC_TX_DMA=y
CONFIG_DMATEST=y
CONFIG_DMA_ENGINE_RAID=y

#
# DMABUF options
#
CONFIG_SYNC_FILE=y
CONFIG_SW_SYNC=y
CONFIG_UDMABUF=y
CONFIG_DMABUF_MOVE_NOTIFY=y
CONFIG_DMABUF_DEBUG=y
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_HEAPS=y
CONFIG_DMABUF_SYSFS_STATS=y
CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS_CMA=y
# end of DMABUF options

CONFIG_DCA=y
CONFIG_AUXDISPLAY=y
CONFIG_CHARLCD=y
CONFIG_LINEDISP=y
CONFIG_HD44780_COMMON=y
CONFIG_HD44780=y
CONFIG_KS0108=y
CONFIG_KS0108_PORT=0x378
CONFIG_KS0108_DELAY=2
CONFIG_CFAG12864B=y
CONFIG_CFAG12864B_RATE=20
CONFIG_IMG_ASCII_LCD=y
CONFIG_HT16K33=y
CONFIG_LCD2S=y
CONFIG_PARPORT_PANEL=y
CONFIG_PANEL_PARPORT=0
CONFIG_PANEL_PROFILE=5
CONFIG_PANEL_CHANGE_MESSAGE=y
CONFIG_PANEL_BOOT_MESSAGE=""
# CONFIG_CHARLCD_BL_OFF is not set
# CONFIG_CHARLCD_BL_ON is not set
CONFIG_CHARLCD_BL_FLASH=y
CONFIG_PANEL=y
CONFIG_UIO=y
CONFIG_UIO_CIF=y
CONFIG_UIO_PDRV_GENIRQ=y
CONFIG_UIO_DMEM_GENIRQ=y
CONFIG_UIO_AEC=y
CONFIG_UIO_SERCOS3=y
CONFIG_UIO_PCI_GENERIC=y
CONFIG_UIO_NETX=y
CONFIG_UIO_PRUSS=y
CONFIG_UIO_MF624=y
CONFIG_UIO_HV_GENERIC=y
CONFIG_UIO_DFL=y
CONFIG_VFIO=y
CONFIG_VFIO_IOMMU_TYPE1=y
CONFIG_VFIO_VIRQFD=y
CONFIG_VFIO_NOIOMMU=y
CONFIG_VFIO_PCI_CORE=y
CONFIG_VFIO_PCI_MMAP=y
CONFIG_VFIO_PCI_INTX=y
CONFIG_VFIO_PCI=y
CONFIG_VFIO_PCI_VGA=y
CONFIG_VFIO_PCI_IGD=y
CONFIG_MLX5_VFIO_PCI=y
CONFIG_VFIO_MDEV=y
CONFIG_IRQ_BYPASS_MANAGER=y
CONFIG_VIRT_DRIVERS=y
CONFIG_VMGENID=y
CONFIG_VBOXGUEST=y
CONFIG_NITRO_ENCLAVES=y
CONFIG_ACRN_HSM=y
CONFIG_EFI_SECRET=y
CONFIG_VIRTIO_ANCHOR=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_PCI_LIB=y
CONFIG_VIRTIO_PCI_LIB_LEGACY=y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_VDPA=y
CONFIG_VIRTIO_PMEM=y
CONFIG_VIRTIO_BALLOON=y
CONFIG_VIRTIO_MEM=y
CONFIG_VIRTIO_INPUT=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_VIRTIO_DMA_SHARED_BUFFER=y
CONFIG_VDPA=y
CONFIG_VDPA_SIM=y
CONFIG_VDPA_SIM_NET=y
CONFIG_VDPA_SIM_BLOCK=y
CONFIG_VDPA_USER=y
CONFIG_IFCVF=y
CONFIG_MLX5_VDPA=y
CONFIG_MLX5_VDPA_NET=y
CONFIG_VP_VDPA=y
CONFIG_ALIBABA_ENI_VDPA=y
CONFIG_VHOST_IOTLB=y
CONFIG_VHOST_RING=y
CONFIG_VHOST=y
CONFIG_VHOST_MENU=y
CONFIG_VHOST_NET=y
CONFIG_VHOST_SCSI=y
CONFIG_VHOST_VSOCK=y
CONFIG_VHOST_VDPA=y
CONFIG_VHOST_CROSS_ENDIAN_LEGACY=y

#
# Microsoft Hyper-V guest support
#
CONFIG_HYPERV=y
CONFIG_HYPERV_TIMER=y
CONFIG_HYPERV_UTILS=y
CONFIG_HYPERV_BALLOON=y
# end of Microsoft Hyper-V guest support

#
# Xen driver support
#
CONFIG_XEN_BALLOON=y
CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y
CONFIG_XEN_MEMORY_HOTPLUG_LIMIT=512
CONFIG_XEN_SCRUB_PAGES_DEFAULT=y
CONFIG_XEN_DEV_EVTCHN=y
CONFIG_XEN_BACKEND=y
CONFIG_XENFS=y
CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_SYS_HYPERVISOR=y
CONFIG_XEN_XENBUS_FRONTEND=y
CONFIG_XEN_GNTDEV=y
CONFIG_XEN_GNTDEV_DMABUF=y
CONFIG_XEN_GRANT_DEV_ALLOC=y
CONFIG_XEN_GRANT_DMA_ALLOC=y
CONFIG_SWIOTLB_XEN=y
CONFIG_XEN_PCI_STUB=y
CONFIG_XEN_PCIDEV_BACKEND=y
CONFIG_XEN_PVCALLS_FRONTEND=y
CONFIG_XEN_PVCALLS_BACKEND=y
CONFIG_XEN_SCSI_BACKEND=y
CONFIG_XEN_PRIVCMD=y
CONFIG_XEN_ACPI_PROCESSOR=y
CONFIG_XEN_MCE_LOG=y
CONFIG_XEN_HAVE_PVMMU=y
CONFIG_XEN_EFI=y
CONFIG_XEN_AUTO_XLATE=y
CONFIG_XEN_ACPI=y
CONFIG_XEN_SYMS=y
CONFIG_XEN_HAVE_VPMU=y
CONFIG_XEN_FRONT_PGDIR_SHBUF=y
CONFIG_XEN_UNPOPULATED_ALLOC=y
CONFIG_XEN_GRANT_DMA_IOMMU=y
CONFIG_XEN_GRANT_DMA_OPS=y
CONFIG_XEN_VIRTIO=y
CONFIG_XEN_VIRTIO_FORCE_GRANT=y
# end of Xen driver support

CONFIG_GREYBUS=y
CONFIG_GREYBUS_ES2=y
CONFIG_COMEDI=y
CONFIG_COMEDI_DEBUG=y
CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048
CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480
CONFIG_COMEDI_MISC_DRIVERS=y
CONFIG_COMEDI_BOND=y
# CONFIG_COMEDI_TEST is not set
CONFIG_COMEDI_PARPORT=y
CONFIG_COMEDI_ISA_DRIVERS=y
CONFIG_COMEDI_PCL711=y
CONFIG_COMEDI_PCL724=y
CONFIG_COMEDI_PCL726=y
CONFIG_COMEDI_PCL730=y
CONFIG_COMEDI_PCL812=y
CONFIG_COMEDI_PCL816=y
CONFIG_COMEDI_PCL818=y
CONFIG_COMEDI_PCM3724=y
CONFIG_COMEDI_AMPLC_DIO200_ISA=y
CONFIG_COMEDI_AMPLC_PC236_ISA=y
CONFIG_COMEDI_AMPLC_PC263_ISA=y
CONFIG_COMEDI_RTI800=y
CONFIG_COMEDI_RTI802=y
CONFIG_COMEDI_DAC02=y
CONFIG_COMEDI_DAS16M1=y
CONFIG_COMEDI_DAS08_ISA=y
CONFIG_COMEDI_DAS16=y
CONFIG_COMEDI_DAS800=y
CONFIG_COMEDI_DAS1800=y
CONFIG_COMEDI_DAS6402=y
CONFIG_COMEDI_DT2801=y
CONFIG_COMEDI_DT2811=y
CONFIG_COMEDI_DT2814=y
CONFIG_COMEDI_DT2815=y
CONFIG_COMEDI_DT2817=y
CONFIG_COMEDI_DT282X=y
CONFIG_COMEDI_DMM32AT=y
CONFIG_COMEDI_FL512=y
CONFIG_COMEDI_AIO_AIO12_8=y
CONFIG_COMEDI_AIO_IIRO_16=y
CONFIG_COMEDI_II_PCI20KC=y
CONFIG_COMEDI_C6XDIGIO=y
CONFIG_COMEDI_MPC624=y
CONFIG_COMEDI_ADQ12B=y
CONFIG_COMEDI_NI_AT_A2150=y
CONFIG_COMEDI_NI_AT_AO=y
CONFIG_COMEDI_NI_ATMIO=y
CONFIG_COMEDI_NI_ATMIO16D=y
CONFIG_COMEDI_NI_LABPC_ISA=y
CONFIG_COMEDI_PCMAD=y
CONFIG_COMEDI_PCMDA12=y
CONFIG_COMEDI_PCMMIO=y
CONFIG_COMEDI_PCMUIO=y
CONFIG_COMEDI_MULTIQ3=y
CONFIG_COMEDI_S526=y
CONFIG_COMEDI_PCI_DRIVERS=y
CONFIG_COMEDI_8255_PCI=y
CONFIG_COMEDI_ADDI_WATCHDOG=y
CONFIG_COMEDI_ADDI_APCI_1032=y
CONFIG_COMEDI_ADDI_APCI_1500=y
CONFIG_COMEDI_ADDI_APCI_1516=y
CONFIG_COMEDI_ADDI_APCI_1564=y
CONFIG_COMEDI_ADDI_APCI_16XX=y
CONFIG_COMEDI_ADDI_APCI_2032=y
CONFIG_COMEDI_ADDI_APCI_2200=y
CONFIG_COMEDI_ADDI_APCI_3120=y
CONFIG_COMEDI_ADDI_APCI_3501=y
CONFIG_COMEDI_ADDI_APCI_3XXX=y
CONFIG_COMEDI_ADL_PCI6208=y
CONFIG_COMEDI_ADL_PCI7X3X=y
CONFIG_COMEDI_ADL_PCI8164=y
CONFIG_COMEDI_ADL_PCI9111=y
CONFIG_COMEDI_ADL_PCI9118=y
CONFIG_COMEDI_ADV_PCI1710=y
CONFIG_COMEDI_ADV_PCI1720=y
CONFIG_COMEDI_ADV_PCI1723=y
CONFIG_COMEDI_ADV_PCI1724=y
CONFIG_COMEDI_ADV_PCI1760=y
CONFIG_COMEDI_ADV_PCI_DIO=y
CONFIG_COMEDI_AMPLC_DIO200_PCI=y
CONFIG_COMEDI_AMPLC_PC236_PCI=y
CONFIG_COMEDI_AMPLC_PC263_PCI=y
CONFIG_COMEDI_AMPLC_PCI224=y
CONFIG_COMEDI_AMPLC_PCI230=y
CONFIG_COMEDI_CONTEC_PCI_DIO=y
CONFIG_COMEDI_DAS08_PCI=y
CONFIG_COMEDI_DT3000=y
CONFIG_COMEDI_DYNA_PCI10XX=y
CONFIG_COMEDI_GSC_HPDI=y
CONFIG_COMEDI_MF6X4=y
CONFIG_COMEDI_ICP_MULTI=y
CONFIG_COMEDI_DAQBOARD2000=y
CONFIG_COMEDI_JR3_PCI=y
CONFIG_COMEDI_KE_COUNTER=y
CONFIG_COMEDI_CB_PCIDAS64=y
CONFIG_COMEDI_CB_PCIDAS=y
CONFIG_COMEDI_CB_PCIDDA=y
CONFIG_COMEDI_CB_PCIMDAS=y
CONFIG_COMEDI_CB_PCIMDDA=y
CONFIG_COMEDI_ME4000=y
CONFIG_COMEDI_ME_DAQ=y
CONFIG_COMEDI_NI_6527=y
CONFIG_COMEDI_NI_65XX=y
CONFIG_COMEDI_NI_660X=y
CONFIG_COMEDI_NI_670X=y
CONFIG_COMEDI_NI_LABPC_PCI=y
CONFIG_COMEDI_NI_PCIDIO=y
CONFIG_COMEDI_NI_PCIMIO=y
CONFIG_COMEDI_RTD520=y
CONFIG_COMEDI_S626=y
CONFIG_COMEDI_MITE=y
CONFIG_COMEDI_NI_TIOCMD=y
CONFIG_COMEDI_PCMCIA_DRIVERS=y
CONFIG_COMEDI_CB_DAS16_CS=y
CONFIG_COMEDI_DAS08_CS=y
CONFIG_COMEDI_NI_DAQ_700_CS=y
CONFIG_COMEDI_NI_DAQ_DIO24_CS=y
CONFIG_COMEDI_NI_LABPC_CS=y
CONFIG_COMEDI_NI_MIO_CS=y
CONFIG_COMEDI_QUATECH_DAQP_CS=y
CONFIG_COMEDI_USB_DRIVERS=y
CONFIG_COMEDI_DT9812=y
CONFIG_COMEDI_NI_USB6501=y
CONFIG_COMEDI_USBDUX=y
CONFIG_COMEDI_USBDUXFAST=y
CONFIG_COMEDI_USBDUXSIGMA=y
CONFIG_COMEDI_VMK80XX=y
CONFIG_COMEDI_8254=y
CONFIG_COMEDI_8255=y
CONFIG_COMEDI_8255_SA=y
CONFIG_COMEDI_KCOMEDILIB=y
CONFIG_COMEDI_AMPLC_DIO200=y
CONFIG_COMEDI_AMPLC_PC236=y
CONFIG_COMEDI_DAS08=y
CONFIG_COMEDI_ISADMA=y
CONFIG_COMEDI_NI_LABPC=y
CONFIG_COMEDI_NI_LABPC_ISADMA=y
CONFIG_COMEDI_NI_TIO=y
CONFIG_COMEDI_NI_ROUTING=y
# CONFIG_COMEDI_TESTS is not set
CONFIG_STAGING=y
CONFIG_PRISM2_USB=y
CONFIG_RTL8192U=m
CONFIG_RTLLIB=m
CONFIG_RTLLIB_CRYPTO_CCMP=m
CONFIG_RTLLIB_CRYPTO_TKIP=m
CONFIG_RTLLIB_CRYPTO_WEP=m
CONFIG_RTL8192E=m
CONFIG_RTL8723BS=m
CONFIG_R8712U=y
CONFIG_R8188EU=m
CONFIG_RTS5208=y
CONFIG_VT6655=m
CONFIG_VT6656=m

#
# IIO staging drivers
#

#
# Accelerometers
#
CONFIG_ADIS16203=y
CONFIG_ADIS16240=y
# end of Accelerometers

#
# Analog to digital converters
#
CONFIG_AD7816=y
# end of Analog to digital converters

#
# Analog digital bi-direction converters
#
CONFIG_ADT7316=y
CONFIG_ADT7316_SPI=y
CONFIG_ADT7316_I2C=y
# end of Analog digital bi-direction converters

#
# Direct Digital Synthesis
#
CONFIG_AD9832=y
CONFIG_AD9834=y
# end of Direct Digital Synthesis

#
# Network Analyzer, Impedance Converters
#
CONFIG_AD5933=y
# end of Network Analyzer, Impedance Converters

#
# Active energy metering IC
#
CONFIG_ADE7854=y
CONFIG_ADE7854_I2C=y
CONFIG_ADE7854_SPI=y
# end of Active energy metering IC

#
# Resolver to digital converters
#
CONFIG_AD2S1210=y
# end of Resolver to digital converters
# end of IIO staging drivers

CONFIG_FB_SM750=y
CONFIG_STAGING_MEDIA=y
CONFIG_INTEL_ATOMISP=y
CONFIG_VIDEO_ATOMISP=y
CONFIG_VIDEO_ATOMISP_ISP2401=y
CONFIG_VIDEO_ATOMISP_OV2722=y
CONFIG_VIDEO_ATOMISP_GC2235=y
CONFIG_VIDEO_ATOMISP_MSRLIST_HELPER=y
CONFIG_VIDEO_ATOMISP_MT9M114=y
CONFIG_VIDEO_ATOMISP_GC0310=y
CONFIG_VIDEO_ATOMISP_OV2680=y
CONFIG_VIDEO_ATOMISP_OV5693=y
CONFIG_VIDEO_ATOMISP_LM3554=y
CONFIG_VIDEO_IPU3_IMGU=y
CONFIG_VIDEO_MAX96712=y
CONFIG_STAGING_MEDIA_DEPRECATED=y
CONFIG_VIDEO_CPIA2=y
CONFIG_VIDEO_MEYE=y
CONFIG_VIDEO_SAA7146=y
CONFIG_VIDEO_SAA7146_VV=y
CONFIG_DVB_AV7110_IR=y
CONFIG_DVB_AV7110=y
CONFIG_DVB_AV7110_OSD=y
CONFIG_DVB_BUDGET_PATCH=y
CONFIG_DVB_SP8870=y
CONFIG_VIDEO_HEXIUM_GEMINI=y
CONFIG_VIDEO_HEXIUM_ORION=y
CONFIG_VIDEO_MXB=y
CONFIG_DVB_BUDGET_CORE=y
CONFIG_DVB_BUDGET=y
CONFIG_DVB_BUDGET_CI=y
CONFIG_DVB_BUDGET_AV=y
CONFIG_VIDEO_STKWEBCAM=y
CONFIG_VIDEO_TM6000=y
CONFIG_VIDEO_TM6000_ALSA=y
CONFIG_VIDEO_TM6000_DVB=y
CONFIG_USB_ZR364XX=y
CONFIG_STAGING_BOARD=y
CONFIG_LTE_GDM724X=m
CONFIG_FB_TFT=y
CONFIG_FB_TFT_AGM1264K_FL=y
CONFIG_FB_TFT_BD663474=y
CONFIG_FB_TFT_HX8340BN=y
CONFIG_FB_TFT_HX8347D=y
CONFIG_FB_TFT_HX8353D=y
CONFIG_FB_TFT_HX8357D=y
CONFIG_FB_TFT_ILI9163=y
CONFIG_FB_TFT_ILI9320=y
CONFIG_FB_TFT_ILI9325=y
CONFIG_FB_TFT_ILI9340=y
CONFIG_FB_TFT_ILI9341=y
CONFIG_FB_TFT_ILI9481=y
CONFIG_FB_TFT_ILI9486=y
CONFIG_FB_TFT_PCD8544=y
CONFIG_FB_TFT_RA8875=y
CONFIG_FB_TFT_S6D02A1=y
CONFIG_FB_TFT_S6D1121=y
CONFIG_FB_TFT_SEPS525=y
CONFIG_FB_TFT_SH1106=y
CONFIG_FB_TFT_SSD1289=y
CONFIG_FB_TFT_SSD1305=y
CONFIG_FB_TFT_SSD1306=y
CONFIG_FB_TFT_SSD1331=y
CONFIG_FB_TFT_SSD1351=y
CONFIG_FB_TFT_ST7735R=y
CONFIG_FB_TFT_ST7789V=y
CONFIG_FB_TFT_TINYLCD=y
CONFIG_FB_TFT_TLS8204=y
CONFIG_FB_TFT_UC1611=y
CONFIG_FB_TFT_UC1701=y
CONFIG_FB_TFT_UPD161704=y
CONFIG_MOST_COMPONENTS=y
CONFIG_MOST_NET=y
CONFIG_MOST_VIDEO=y
CONFIG_MOST_DIM2=y
CONFIG_MOST_I2C=y
CONFIG_KS7010=y
CONFIG_GREYBUS_AUDIO=y
CONFIG_GREYBUS_AUDIO_APB_CODEC=y
CONFIG_GREYBUS_BOOTROM=y
CONFIG_GREYBUS_FIRMWARE=y
CONFIG_GREYBUS_HID=y
CONFIG_GREYBUS_LIGHT=y
CONFIG_GREYBUS_LOG=y
CONFIG_GREYBUS_LOOPBACK=y
CONFIG_GREYBUS_POWER=y
CONFIG_GREYBUS_RAW=y
CONFIG_GREYBUS_VIBRATOR=y
CONFIG_GREYBUS_BRIDGED_PHY=y
CONFIG_GREYBUS_GPIO=y
CONFIG_GREYBUS_I2C=y
CONFIG_GREYBUS_PWM=y
CONFIG_GREYBUS_SDIO=y
CONFIG_GREYBUS_SPI=y
CONFIG_GREYBUS_UART=y
CONFIG_GREYBUS_USB=y
CONFIG_PI433=y
CONFIG_XIL_AXIS_FIFO=y
CONFIG_FIELDBUS_DEV=y
CONFIG_HMS_ANYBUSS_BUS=y
CONFIG_ARCX_ANYBUS_CONTROLLER=y
CONFIG_HMS_PROFINET=y
CONFIG_QLGE=y
CONFIG_VME_BUS=y

#
# VME Bridge Drivers
#
CONFIG_VME_TSI148=y
CONFIG_VME_FAKE=y

#
# VME Device Drivers
#
CONFIG_VME_USER=y
CONFIG_GOLDFISH_PIPE=y
CONFIG_CHROME_PLATFORMS=y
CONFIG_CHROMEOS_ACPI=y
CONFIG_CHROMEOS_LAPTOP=y
CONFIG_CHROMEOS_PSTORE=y
CONFIG_CHROMEOS_TBMC=y
CONFIG_CROS_EC=y
CONFIG_CROS_EC_I2C=y
CONFIG_CROS_EC_RPMSG=y
CONFIG_CROS_EC_ISHTP=y
CONFIG_CROS_EC_SPI=y
CONFIG_CROS_EC_LPC=y
CONFIG_CROS_EC_PROTO=y
CONFIG_CROS_KBD_LED_BACKLIGHT=y
CONFIG_CROS_EC_CHARDEV=y
CONFIG_CROS_EC_LIGHTBAR=y
CONFIG_CROS_EC_VBC=y
CONFIG_CROS_EC_DEBUGFS=y
CONFIG_CROS_EC_SENSORHUB=y
CONFIG_CROS_EC_SYSFS=y
CONFIG_CROS_EC_TYPEC=y
CONFIG_CROS_USBPD_LOGGER=y
CONFIG_CROS_USBPD_NOTIFY=y
CONFIG_CHROMEOS_PRIVACY_SCREEN=y
CONFIG_CROS_TYPEC_SWITCH=y
CONFIG_WILCO_EC=y
CONFIG_WILCO_EC_DEBUGFS=y
CONFIG_WILCO_EC_EVENTS=y
CONFIG_WILCO_EC_TELEMETRY=y
CONFIG_MELLANOX_PLATFORM=y
CONFIG_MLXREG_HOTPLUG=y
CONFIG_MLXREG_IO=y
CONFIG_MLXREG_LC=y
CONFIG_NVSW_SN2201=y
CONFIG_SURFACE_PLATFORMS=y
CONFIG_SURFACE3_WMI=y
CONFIG_SURFACE_3_POWER_OPREGION=y
CONFIG_SURFACE_ACPI_NOTIFY=y
CONFIG_SURFACE_AGGREGATOR_CDEV=y
CONFIG_SURFACE_AGGREGATOR_HUB=y
CONFIG_SURFACE_AGGREGATOR_REGISTRY=y
CONFIG_SURFACE_AGGREGATOR_TABLET_SWITCH=y
CONFIG_SURFACE_DTX=y
CONFIG_SURFACE_GPE=y
CONFIG_SURFACE_HOTPLUG=y
CONFIG_SURFACE_PLATFORM_PROFILE=y
CONFIG_SURFACE_PRO3_BUTTON=y
CONFIG_SURFACE_AGGREGATOR=y
CONFIG_SURFACE_AGGREGATOR_BUS=y
CONFIG_SURFACE_AGGREGATOR_ERROR_INJECTION=y
CONFIG_X86_PLATFORM_DEVICES=y
CONFIG_ACPI_WMI=y
CONFIG_WMI_BMOF=y
CONFIG_HUAWEI_WMI=y
CONFIG_UV_SYSFS=y
CONFIG_MXM_WMI=y
CONFIG_PEAQ_WMI=y
CONFIG_NVIDIA_WMI_EC_BACKLIGHT=y
CONFIG_XIAOMI_WMI=y
CONFIG_GIGABYTE_WMI=y
CONFIG_YOGABOOK_WMI=y
CONFIG_ACERHDF=y
CONFIG_ACER_WIRELESS=y
CONFIG_ACER_WMI=y
CONFIG_AMD_PMF=y
# CONFIG_AMD_PMC is not set
CONFIG_ADV_SWBUTTON=y
CONFIG_APPLE_GMUX=y
CONFIG_ASUS_LAPTOP=y
CONFIG_ASUS_WIRELESS=y
CONFIG_ASUS_WMI=y
CONFIG_ASUS_NB_WMI=y
CONFIG_ASUS_TF103C_DOCK=y
CONFIG_MERAKI_MX100=y
CONFIG_EEEPC_LAPTOP=y
CONFIG_EEEPC_WMI=y
CONFIG_X86_PLATFORM_DRIVERS_DELL=y
CONFIG_ALIENWARE_WMI=y
CONFIG_DCDBAS=y
CONFIG_DELL_LAPTOP=y
CONFIG_DELL_RBU=y
CONFIG_DELL_RBTN=y
CONFIG_DELL_SMBIOS=y
CONFIG_DELL_SMBIOS_WMI=y
CONFIG_DELL_SMBIOS_SMM=y
CONFIG_DELL_SMO8800=y
CONFIG_DELL_WMI=y
CONFIG_DELL_WMI_PRIVACY=y
CONFIG_DELL_WMI_AIO=y
CONFIG_DELL_WMI_DESCRIPTOR=y
CONFIG_DELL_WMI_LED=y
CONFIG_DELL_WMI_SYSMAN=y
CONFIG_AMILO_RFKILL=y
CONFIG_FUJITSU_LAPTOP=y
CONFIG_FUJITSU_TABLET=y
CONFIG_GPD_POCKET_FAN=y
CONFIG_HP_ACCEL=y
CONFIG_WIRELESS_HOTKEY=y
CONFIG_HP_WMI=y
CONFIG_IBM_RTL=y
CONFIG_IDEAPAD_LAPTOP=y
CONFIG_SENSORS_HDAPS=y
CONFIG_THINKPAD_ACPI=y
CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
CONFIG_THINKPAD_ACPI_DEBUGFACILITIES=y
CONFIG_THINKPAD_ACPI_DEBUG=y
CONFIG_THINKPAD_ACPI_UNSAFE_LEDS=y
CONFIG_THINKPAD_ACPI_VIDEO=y
CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
CONFIG_THINKPAD_LMI=y
CONFIG_INTEL_ATOMISP2_PDX86=y
CONFIG_INTEL_ATOMISP2_LED=y
CONFIG_INTEL_SAR_INT1092=y
CONFIG_INTEL_SKL_INT3472=y
CONFIG_INTEL_PMC_CORE=y
CONFIG_INTEL_PMT_CLASS=y
CONFIG_INTEL_PMT_TELEMETRY=y
CONFIG_INTEL_PMT_CRASHLOG=y

#
# Intel Speed Select Technology interface support
#
CONFIG_INTEL_SPEED_SELECT_INTERFACE=y
# end of Intel Speed Select Technology interface support

CONFIG_INTEL_TELEMETRY=y
CONFIG_INTEL_WMI=y
CONFIG_INTEL_WMI_SBL_FW_UPDATE=y
CONFIG_INTEL_WMI_THUNDERBOLT=y

#
# Intel Uncore Frequency Control
#
CONFIG_INTEL_UNCORE_FREQ_CONTROL=y
# end of Intel Uncore Frequency Control

CONFIG_INTEL_HID_EVENT=y
CONFIG_INTEL_VBTN=y
CONFIG_INTEL_INT0002_VGPIO=y
CONFIG_INTEL_OAKTRAIL=y
CONFIG_INTEL_BXTWC_PMIC_TMU=y
CONFIG_INTEL_CHTDC_TI_PWRBTN=y
CONFIG_INTEL_CHTWC_INT33FE=y
CONFIG_INTEL_ISHTP_ECLITE=y
CONFIG_INTEL_MRFLD_PWRBTN=y
CONFIG_INTEL_PUNIT_IPC=y
CONFIG_INTEL_RST=y
CONFIG_INTEL_SDSI=y
CONFIG_INTEL_SMARTCONNECT=y
CONFIG_INTEL_TURBO_MAX_3=y
CONFIG_INTEL_VSEC=y
CONFIG_MSI_LAPTOP=y
CONFIG_MSI_WMI=y
CONFIG_PCENGINES_APU2=y
CONFIG_BARCO_P50_GPIO=y
CONFIG_SAMSUNG_LAPTOP=y
CONFIG_SAMSUNG_Q10=y
CONFIG_ACPI_TOSHIBA=y
CONFIG_TOSHIBA_BT_RFKILL=y
CONFIG_TOSHIBA_HAPS=y
CONFIG_TOSHIBA_WMI=y
CONFIG_ACPI_CMPC=y
CONFIG_COMPAL_LAPTOP=y
CONFIG_LG_LAPTOP=y
CONFIG_PANASONIC_LAPTOP=y
CONFIG_SONY_LAPTOP=y
CONFIG_SONYPI_COMPAT=y
CONFIG_SYSTEM76_ACPI=y
CONFIG_TOPSTAR_LAPTOP=y
CONFIG_SERIAL_MULTI_INSTANTIATE=y
CONFIG_MLX_PLATFORM=y
CONFIG_TOUCHSCREEN_DMI=y
CONFIG_X86_ANDROID_TABLETS=y
CONFIG_FW_ATTR_CLASS=y
CONFIG_INTEL_IPS=y
CONFIG_INTEL_SCU_IPC=y
CONFIG_INTEL_SCU=y
CONFIG_INTEL_SCU_PCI=y
CONFIG_INTEL_SCU_PLATFORM=y
CONFIG_INTEL_SCU_WDT=y
CONFIG_INTEL_SCU_IPC_UTIL=y
CONFIG_SIEMENS_SIMATIC_IPC=y
CONFIG_WINMATE_FM07_KEYS=y
CONFIG_P2SB=y
CONFIG_HAVE_CLK=y
CONFIG_HAVE_CLK_PREPARE=y
CONFIG_COMMON_CLK=y
CONFIG_COMMON_CLK_WM831X=y
CONFIG_LMK04832=y
CONFIG_COMMON_CLK_MAX77686=y
CONFIG_COMMON_CLK_MAX9485=y
CONFIG_COMMON_CLK_RK808=y
CONFIG_COMMON_CLK_SI5341=y
CONFIG_COMMON_CLK_SI5351=y
CONFIG_COMMON_CLK_SI514=y
CONFIG_COMMON_CLK_SI544=y
CONFIG_COMMON_CLK_SI570=y
CONFIG_COMMON_CLK_CDCE706=y
CONFIG_COMMON_CLK_TPS68470=y
CONFIG_COMMON_CLK_CDCE925=y
CONFIG_COMMON_CLK_CS2000_CP=y
CONFIG_COMMON_CLK_S2MPS11=y
CONFIG_CLK_TWL6040=y
CONFIG_COMMON_CLK_AXI_CLKGEN=y
CONFIG_COMMON_CLK_LOCHNAGAR=y
CONFIG_COMMON_CLK_PALMAS=y
CONFIG_COMMON_CLK_PWM=y
CONFIG_COMMON_CLK_RS9_PCIE=y
CONFIG_COMMON_CLK_VC5=y
CONFIG_COMMON_CLK_VC7=y
CONFIG_COMMON_CLK_BD718XX=y
CONFIG_COMMON_CLK_FIXED_MMIO=y
CONFIG_CLK_LGM_CGU=y
CONFIG_XILINX_VCU=y
CONFIG_COMMON_CLK_XLNX_CLKWZRD=y
CONFIG_HWSPINLOCK=y

#
# Clock Source drivers
#
CONFIG_TIMER_OF=y
CONFIG_TIMER_PROBE=y
CONFIG_CLKEVT_I8253=y
CONFIG_I8253_LOCK=y
CONFIG_CLKBLD_I8253=y
CONFIG_DW_APB_TIMER=y
CONFIG_MICROCHIP_PIT64B=y
# end of Clock Source drivers

CONFIG_MAILBOX=y
CONFIG_PLATFORM_MHU=y
CONFIG_PCC=y
CONFIG_ALTERA_MBOX=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_IOMMU_IOVA=y
CONFIG_IOASID=y
CONFIG_IOMMU_API=y
CONFIG_IOMMU_SUPPORT=y

#
# Generic IOMMU Pagetable Support
#
# end of Generic IOMMU Pagetable Support

CONFIG_IOMMU_DEBUGFS=y
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
CONFIG_OF_IOMMU=y
CONFIG_IOMMU_DMA=y
CONFIG_IOMMU_SVA=y
# CONFIG_AMD_IOMMU is not set
CONFIG_DMAR_TABLE=y
CONFIG_DMAR_PERF=y
CONFIG_DMAR_DEBUG=y
CONFIG_INTEL_IOMMU=y
CONFIG_INTEL_IOMMU_DEBUGFS=y
CONFIG_INTEL_IOMMU_SVM=y
CONFIG_INTEL_IOMMU_DEFAULT_ON=y
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON=y
CONFIG_IRQ_REMAP=y
CONFIG_HYPERV_IOMMU=y
CONFIG_VIRTIO_IOMMU=y

#
# Remoteproc drivers
#
CONFIG_REMOTEPROC=y
CONFIG_REMOTEPROC_CDEV=y
# end of Remoteproc drivers

#
# Rpmsg drivers
#
CONFIG_RPMSG=y
CONFIG_RPMSG_CHAR=y
CONFIG_RPMSG_CTRL=y
CONFIG_RPMSG_NS=y
CONFIG_RPMSG_QCOM_GLINK=y
CONFIG_RPMSG_QCOM_GLINK_RPM=y
CONFIG_RPMSG_VIRTIO=y
# end of Rpmsg drivers

CONFIG_SOUNDWIRE=y

#
# SoundWire Devices
#
CONFIG_SOUNDWIRE_CADENCE=y
CONFIG_SOUNDWIRE_INTEL=y
CONFIG_SOUNDWIRE_QCOM=y
CONFIG_SOUNDWIRE_GENERIC_ALLOCATION=y

#
# SOC (System On Chip) specific Drivers
#

#
# Amlogic SoC drivers
#
# end of Amlogic SoC drivers

#
# Broadcom SoC drivers
#
# end of Broadcom SoC drivers

#
# NXP/Freescale QorIQ SoC drivers
#
# end of NXP/Freescale QorIQ SoC drivers

#
# fujitsu SoC drivers
#
# end of fujitsu SoC drivers

#
# i.MX SoC drivers
#
# end of i.MX SoC drivers

#
# Enable LiteX SoC Builder specific drivers
#
CONFIG_LITEX=y
CONFIG_LITEX_SOC_CONTROLLER=y
# end of Enable LiteX SoC Builder specific drivers

#
# Qualcomm SoC drivers
#
CONFIG_QCOM_QMI_HELPERS=y
# end of Qualcomm SoC drivers

CONFIG_SOC_TI=y

#
# Xilinx SoC drivers
#
# end of Xilinx SoC drivers
# end of SOC (System On Chip) specific Drivers

CONFIG_PM_DEVFREQ=y

#
# DEVFREQ Governors
#
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
CONFIG_DEVFREQ_GOV_POWERSAVE=y
CONFIG_DEVFREQ_GOV_USERSPACE=y
CONFIG_DEVFREQ_GOV_PASSIVE=y

#
# DEVFREQ Drivers
#
CONFIG_PM_DEVFREQ_EVENT=y
CONFIG_EXTCON=y

#
# Extcon Device Drivers
#
CONFIG_EXTCON_ADC_JACK=y
CONFIG_EXTCON_AXP288=y
CONFIG_EXTCON_FSA9480=y
CONFIG_EXTCON_GPIO=y
CONFIG_EXTCON_INTEL_INT3496=y
CONFIG_EXTCON_INTEL_CHT_WC=y
CONFIG_EXTCON_INTEL_MRFLD=y
CONFIG_EXTCON_MAX14577=y
CONFIG_EXTCON_MAX3355=y
CONFIG_EXTCON_MAX77693=y
CONFIG_EXTCON_MAX77843=y
CONFIG_EXTCON_MAX8997=y
CONFIG_EXTCON_PALMAS=y
CONFIG_EXTCON_PTN5150=y
CONFIG_EXTCON_RT8973A=y
CONFIG_EXTCON_SM5502=y
CONFIG_EXTCON_USB_GPIO=y
CONFIG_EXTCON_USBC_CROS_EC=y
CONFIG_EXTCON_USBC_TUSB320=y
CONFIG_MEMORY=y
CONFIG_FPGA_DFL_EMIF=y
CONFIG_IIO=y
CONFIG_IIO_BUFFER=y
CONFIG_IIO_BUFFER_CB=y
CONFIG_IIO_BUFFER_DMA=y
CONFIG_IIO_BUFFER_DMAENGINE=y
CONFIG_IIO_BUFFER_HW_CONSUMER=y
CONFIG_IIO_KFIFO_BUF=y
CONFIG_IIO_TRIGGERED_BUFFER=y
CONFIG_IIO_CONFIGFS=y
CONFIG_IIO_TRIGGER=y
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
CONFIG_IIO_SW_DEVICE=y
CONFIG_IIO_SW_TRIGGER=y
CONFIG_IIO_TRIGGERED_EVENT=y

#
# Accelerometers
#
CONFIG_ADIS16201=y
CONFIG_ADIS16209=y
CONFIG_ADXL313=y
CONFIG_ADXL313_I2C=y
CONFIG_ADXL313_SPI=y
CONFIG_ADXL355=y
CONFIG_ADXL355_I2C=y
CONFIG_ADXL355_SPI=y
CONFIG_ADXL367=y
CONFIG_ADXL367_SPI=y
CONFIG_ADXL367_I2C=y
CONFIG_ADXL372=y
CONFIG_ADXL372_SPI=y
CONFIG_ADXL372_I2C=y
CONFIG_BMA220=y
CONFIG_BMA400=y
CONFIG_BMA400_I2C=y
CONFIG_BMA400_SPI=y
CONFIG_BMC150_ACCEL=y
CONFIG_BMC150_ACCEL_I2C=y
CONFIG_BMC150_ACCEL_SPI=y
CONFIG_BMI088_ACCEL=y
CONFIG_BMI088_ACCEL_SPI=y
CONFIG_DA280=y
CONFIG_DA311=y
CONFIG_DMARD06=y
CONFIG_DMARD09=y
CONFIG_DMARD10=y
CONFIG_FXLS8962AF=y
CONFIG_FXLS8962AF_I2C=y
CONFIG_FXLS8962AF_SPI=y
CONFIG_HID_SENSOR_ACCEL_3D=y
CONFIG_IIO_CROS_EC_ACCEL_LEGACY=y
CONFIG_KXSD9=y
CONFIG_KXSD9_SPI=y
CONFIG_KXSD9_I2C=y
CONFIG_KXCJK1013=y
CONFIG_MC3230=y
CONFIG_MMA7455=y
CONFIG_MMA7455_I2C=y
CONFIG_MMA7455_SPI=y
CONFIG_MMA7660=y
CONFIG_MMA8452=y
CONFIG_MMA9551_CORE=y
CONFIG_MMA9551=y
CONFIG_MMA9553=y
CONFIG_MSA311=y
CONFIG_MXC4005=y
CONFIG_MXC6255=y
CONFIG_SCA3000=y
CONFIG_SCA3300=y
CONFIG_STK8312=y
CONFIG_STK8BA50=y
# end of Accelerometers

#
# Analog to digital converters
#
CONFIG_AD_SIGMA_DELTA=y
CONFIG_AD7091R5=y
CONFIG_AD7124=y
CONFIG_AD7192=y
CONFIG_AD7266=y
CONFIG_AD7280=y
CONFIG_AD7291=y
CONFIG_AD7292=y
CONFIG_AD7298=y
CONFIG_AD7476=y
CONFIG_AD7606=y
CONFIG_AD7606_IFACE_PARALLEL=y
CONFIG_AD7606_IFACE_SPI=y
CONFIG_AD7766=y
CONFIG_AD7768_1=y
CONFIG_AD7780=y
CONFIG_AD7791=y
CONFIG_AD7793=y
CONFIG_AD7887=y
CONFIG_AD7923=y
CONFIG_AD7949=y
CONFIG_AD799X=y
CONFIG_AD9467=y
CONFIG_ADI_AXI_ADC=y
CONFIG_AXP20X_ADC=y
CONFIG_AXP288_ADC=y
CONFIG_CC10001_ADC=y
CONFIG_CPCAP_ADC=y
CONFIG_DA9150_GPADC=y
CONFIG_DLN2_ADC=y
CONFIG_ENVELOPE_DETECTOR=y
CONFIG_HI8435=y
CONFIG_HX711=y
CONFIG_INTEL_MRFLD_ADC=y
CONFIG_LP8788_ADC=y
CONFIG_LTC2471=y
CONFIG_LTC2485=y
CONFIG_LTC2496=y
CONFIG_LTC2497=y
CONFIG_MAX1027=y
CONFIG_MAX11100=y
CONFIG_MAX1118=y
CONFIG_MAX11205=y
CONFIG_MAX1241=y
CONFIG_MAX1363=y
CONFIG_MAX9611=y
CONFIG_MCP320X=y
CONFIG_MCP3422=y
CONFIG_MCP3911=y
CONFIG_MEDIATEK_MT6360_ADC=y
CONFIG_MEN_Z188_ADC=y
CONFIG_MP2629_ADC=y
CONFIG_NAU7802=y
CONFIG_PALMAS_GPADC=y
CONFIG_QCOM_VADC_COMMON=y
CONFIG_QCOM_SPMI_IADC=y
CONFIG_QCOM_SPMI_VADC=y
CONFIG_QCOM_SPMI_ADC5=y
CONFIG_RN5T618_ADC=y
CONFIG_RICHTEK_RTQ6056=y
CONFIG_SD_ADC_MODULATOR=y
CONFIG_STMPE_ADC=y
CONFIG_TI_ADC081C=y
CONFIG_TI_ADC0832=y
CONFIG_TI_ADC084S021=y
CONFIG_TI_ADC12138=y
CONFIG_TI_ADC108S102=y
CONFIG_TI_ADC128S052=y
CONFIG_TI_ADC161S626=y
CONFIG_TI_ADS1015=y
CONFIG_TI_ADS7950=y
CONFIG_TI_ADS8344=y
CONFIG_TI_ADS8688=y
CONFIG_TI_ADS124S08=y
CONFIG_TI_ADS131E08=y
CONFIG_TI_AM335X_ADC=y
CONFIG_TI_TLC4541=y
CONFIG_TI_TSC2046=y
CONFIG_TWL4030_MADC=y
CONFIG_TWL6030_GPADC=y
CONFIG_VF610_ADC=y
CONFIG_VIPERBOARD_ADC=y
CONFIG_XILINX_XADC=y
# end of Analog to digital converters

#
# Analog to digital and digital to analog converters
#
CONFIG_AD74413R=y
CONFIG_STX104=y
# end of Analog to digital and digital to analog converters

#
# Analog Front Ends
#
CONFIG_IIO_RESCALE=y
# end of Analog Front Ends

#
# Amplifiers
#
CONFIG_AD8366=y
CONFIG_ADA4250=y
CONFIG_HMC425=y
# end of Amplifiers

#
# Capacitance to digital converters
#
CONFIG_AD7150=y
CONFIG_AD7746=y
# end of Capacitance to digital converters

#
# Chemical Sensors
#
CONFIG_ATLAS_PH_SENSOR=y
CONFIG_ATLAS_EZO_SENSOR=y
CONFIG_BME680=y
CONFIG_BME680_I2C=y
CONFIG_BME680_SPI=y
CONFIG_CCS811=y
CONFIG_IAQCORE=y
CONFIG_PMS7003=y
CONFIG_SCD30_CORE=y
CONFIG_SCD30_I2C=y
CONFIG_SCD30_SERIAL=y
CONFIG_SCD4X=y
CONFIG_SENSIRION_SGP30=y
CONFIG_SENSIRION_SGP40=y
CONFIG_SPS30=y
CONFIG_SPS30_I2C=y
CONFIG_SPS30_SERIAL=y
CONFIG_SENSEAIR_SUNRISE_CO2=y
CONFIG_VZ89X=y
# end of Chemical Sensors

CONFIG_IIO_CROS_EC_SENSORS_CORE=y
CONFIG_IIO_CROS_EC_SENSORS=y
CONFIG_IIO_CROS_EC_SENSORS_LID_ANGLE=y

#
# Hid Sensor IIO Common
#
CONFIG_HID_SENSOR_IIO_COMMON=y
CONFIG_HID_SENSOR_IIO_TRIGGER=y
# end of Hid Sensor IIO Common

CONFIG_IIO_MS_SENSORS_I2C=y

#
# IIO SCMI Sensors
#
# end of IIO SCMI Sensors

#
# SSP Sensor Common
#
CONFIG_IIO_SSP_SENSORS_COMMONS=y
CONFIG_IIO_SSP_SENSORHUB=y
# end of SSP Sensor Common

CONFIG_IIO_ST_SENSORS_I2C=y
CONFIG_IIO_ST_SENSORS_SPI=y
CONFIG_IIO_ST_SENSORS_CORE=y

#
# Digital to analog converters
#
CONFIG_AD3552R=y
CONFIG_AD5064=y
CONFIG_AD5360=y
CONFIG_AD5380=y
CONFIG_AD5421=y
CONFIG_AD5446=y
CONFIG_AD5449=y
CONFIG_AD5592R_BASE=y
CONFIG_AD5592R=y
CONFIG_AD5593R=y
CONFIG_AD5504=y
CONFIG_AD5624R_SPI=y
CONFIG_LTC2688=y
CONFIG_AD5686=y
CONFIG_AD5686_SPI=y
CONFIG_AD5696_I2C=y
CONFIG_AD5755=y
CONFIG_AD5758=y
CONFIG_AD5761=y
CONFIG_AD5764=y
CONFIG_AD5766=y
CONFIG_AD5770R=y
CONFIG_AD5791=y
CONFIG_AD7293=y
CONFIG_AD7303=y
CONFIG_AD8801=y
CONFIG_CIO_DAC=y
CONFIG_DPOT_DAC=y
CONFIG_DS4424=y
CONFIG_LTC1660=y
CONFIG_LTC2632=y
CONFIG_M62332=y
CONFIG_MAX517=y
CONFIG_MAX5821=y
CONFIG_MCP4725=y
CONFIG_MCP4922=y
CONFIG_TI_DAC082S085=y
CONFIG_TI_DAC5571=y
CONFIG_TI_DAC7311=y
CONFIG_TI_DAC7612=y
CONFIG_VF610_DAC=y
# end of Digital to analog converters

#
# IIO dummy driver
#
CONFIG_IIO_DUMMY_EVGEN=y
CONFIG_IIO_SIMPLE_DUMMY=y
CONFIG_IIO_SIMPLE_DUMMY_EVENTS=y
CONFIG_IIO_SIMPLE_DUMMY_BUFFER=y
# end of IIO dummy driver

#
# Filters
#
CONFIG_ADMV8818=y
# end of Filters

#
# Frequency Synthesizers DDS/PLL
#

#
# Clock Generator/Distribution
#
CONFIG_AD9523=y
# end of Clock Generator/Distribution

#
# Phase-Locked Loop (PLL) frequency synthesizers
#
CONFIG_ADF4350=y
CONFIG_ADF4371=y
CONFIG_ADMV1013=y
CONFIG_ADMV1014=y
CONFIG_ADMV4420=y
CONFIG_ADRF6780=y
# end of Phase-Locked Loop (PLL) frequency synthesizers
# end of Frequency Synthesizers DDS/PLL

#
# Digital gyroscope sensors
#
CONFIG_ADIS16080=y
CONFIG_ADIS16130=y
CONFIG_ADIS16136=y
CONFIG_ADIS16260=y
CONFIG_ADXRS290=y
CONFIG_ADXRS450=y
CONFIG_BMG160=y
CONFIG_BMG160_I2C=y
CONFIG_BMG160_SPI=y
CONFIG_FXAS21002C=y
CONFIG_FXAS21002C_I2C=y
CONFIG_FXAS21002C_SPI=y
CONFIG_HID_SENSOR_GYRO_3D=y
CONFIG_MPU3050=y
CONFIG_MPU3050_I2C=y
CONFIG_IIO_ST_GYRO_3AXIS=y
CONFIG_IIO_ST_GYRO_I2C_3AXIS=y
CONFIG_IIO_ST_GYRO_SPI_3AXIS=y
CONFIG_ITG3200=y
# end of Digital gyroscope sensors

#
# Health Sensors
#

#
# Heart Rate Monitors
#
CONFIG_AFE4403=y
CONFIG_AFE4404=y
CONFIG_MAX30100=y
CONFIG_MAX30102=y
# end of Heart Rate Monitors
# end of Health Sensors

#
# Humidity sensors
#
CONFIG_AM2315=y
CONFIG_DHT11=y
CONFIG_HDC100X=y
CONFIG_HDC2010=y
CONFIG_HID_SENSOR_HUMIDITY=y
CONFIG_HTS221=y
CONFIG_HTS221_I2C=y
CONFIG_HTS221_SPI=y
CONFIG_HTU21=y
CONFIG_SI7005=y
CONFIG_SI7020=y
# end of Humidity sensors

#
# Inertial measurement units
#
CONFIG_ADIS16400=y
CONFIG_ADIS16460=y
CONFIG_ADIS16475=y
CONFIG_ADIS16480=y
CONFIG_BMI160=y
CONFIG_BMI160_I2C=y
CONFIG_BMI160_SPI=y
CONFIG_BOSCH_BNO055=y
CONFIG_BOSCH_BNO055_SERIAL=y
CONFIG_BOSCH_BNO055_I2C=y
CONFIG_FXOS8700=y
CONFIG_FXOS8700_I2C=y
CONFIG_FXOS8700_SPI=y
CONFIG_KMX61=y
CONFIG_INV_ICM42600=y
CONFIG_INV_ICM42600_I2C=y
CONFIG_INV_ICM42600_SPI=y
CONFIG_INV_MPU6050_IIO=y
CONFIG_INV_MPU6050_I2C=y
CONFIG_INV_MPU6050_SPI=y
CONFIG_IIO_ST_LSM6DSX=y
CONFIG_IIO_ST_LSM6DSX_I2C=y
CONFIG_IIO_ST_LSM6DSX_SPI=y
CONFIG_IIO_ST_LSM6DSX_I3C=y
# end of Inertial measurement units

CONFIG_IIO_ADIS_LIB=y
CONFIG_IIO_ADIS_LIB_BUFFER=y

#
# Light sensors
#
CONFIG_ACPI_ALS=y
CONFIG_ADJD_S311=y
CONFIG_ADUX1020=y
CONFIG_AL3010=y
CONFIG_AL3320A=y
CONFIG_APDS9300=y
CONFIG_APDS9960=y
CONFIG_AS73211=y
CONFIG_BH1750=y
CONFIG_BH1780=y
CONFIG_CM32181=y
CONFIG_CM3232=y
CONFIG_CM3323=y
CONFIG_CM3605=y
CONFIG_CM36651=y
CONFIG_IIO_CROS_EC_LIGHT_PROX=y
CONFIG_GP2AP002=y
CONFIG_GP2AP020A00F=y
CONFIG_IQS621_ALS=y
CONFIG_SENSORS_ISL29018=y
CONFIG_SENSORS_ISL29028=y
CONFIG_ISL29125=y
CONFIG_HID_SENSOR_ALS=y
CONFIG_HID_SENSOR_PROX=y
CONFIG_JSA1212=y
CONFIG_RPR0521=y
CONFIG_SENSORS_LM3533=y
CONFIG_LTR501=y
CONFIG_LTRF216A=y
CONFIG_LV0104CS=y
CONFIG_MAX44000=y
CONFIG_MAX44009=y
CONFIG_NOA1305=y
CONFIG_OPT3001=y
CONFIG_PA12203001=y
CONFIG_SI1133=y
CONFIG_SI1145=y
CONFIG_STK3310=y
CONFIG_ST_UVIS25=y
CONFIG_ST_UVIS25_I2C=y
CONFIG_ST_UVIS25_SPI=y
CONFIG_TCS3414=y
CONFIG_TCS3472=y
CONFIG_SENSORS_TSL2563=y
CONFIG_TSL2583=y
CONFIG_TSL2591=y
CONFIG_TSL2772=y
CONFIG_TSL4531=y
CONFIG_US5182D=y
CONFIG_VCNL4000=y
CONFIG_VCNL4035=y
CONFIG_VEML6030=y
CONFIG_VEML6070=y
CONFIG_VL6180=y
CONFIG_ZOPT2201=y
# end of Light sensors

#
# Magnetometer sensors
#
CONFIG_AK8974=y
CONFIG_AK8975=y
CONFIG_AK09911=y
CONFIG_BMC150_MAGN=y
CONFIG_BMC150_MAGN_I2C=y
CONFIG_BMC150_MAGN_SPI=y
CONFIG_MAG3110=y
CONFIG_HID_SENSOR_MAGNETOMETER_3D=y
CONFIG_MMC35240=y
CONFIG_IIO_ST_MAGN_3AXIS=y
CONFIG_IIO_ST_MAGN_I2C_3AXIS=y
CONFIG_IIO_ST_MAGN_SPI_3AXIS=y
CONFIG_SENSORS_HMC5843=y
CONFIG_SENSORS_HMC5843_I2C=y
CONFIG_SENSORS_HMC5843_SPI=y
CONFIG_SENSORS_RM3100=y
CONFIG_SENSORS_RM3100_I2C=y
CONFIG_SENSORS_RM3100_SPI=y
CONFIG_YAMAHA_YAS530=y
# end of Magnetometer sensors

#
# Multiplexers
#
CONFIG_IIO_MUX=y
# end of Multiplexers

#
# Inclinometer sensors
#
CONFIG_HID_SENSOR_INCLINOMETER_3D=y
CONFIG_HID_SENSOR_DEVICE_ROTATION=y
# end of Inclinometer sensors

#
# Triggers - standalone
#
CONFIG_IIO_HRTIMER_TRIGGER=y
CONFIG_IIO_INTERRUPT_TRIGGER=y
CONFIG_IIO_TIGHTLOOP_TRIGGER=y
CONFIG_IIO_SYSFS_TRIGGER=y
# end of Triggers - standalone

#
# Linear and angular position sensors
#
CONFIG_IQS624_POS=y
CONFIG_HID_SENSOR_CUSTOM_INTEL_HINGE=y
# end of Linear and angular position sensors

#
# Digital potentiometers
#
CONFIG_AD5110=y
CONFIG_AD5272=y
CONFIG_DS1803=y
CONFIG_MAX5432=y
CONFIG_MAX5481=y
CONFIG_MAX5487=y
CONFIG_MCP4018=y
CONFIG_MCP4131=y
CONFIG_MCP4531=y
CONFIG_MCP41010=y
CONFIG_TPL0102=y
# end of Digital potentiometers

#
# Digital potentiostats
#
CONFIG_LMP91000=y
# end of Digital potentiostats

#
# Pressure sensors
#
CONFIG_ABP060MG=y
CONFIG_BMP280=y
CONFIG_BMP280_I2C=y
CONFIG_BMP280_SPI=y
CONFIG_IIO_CROS_EC_BARO=y
CONFIG_DLHL60D=y
CONFIG_DPS310=y
CONFIG_HID_SENSOR_PRESS=y
CONFIG_HP03=y
CONFIG_ICP10100=y
CONFIG_MPL115=y
CONFIG_MPL115_I2C=y
CONFIG_MPL115_SPI=y
CONFIG_MPL3115=y
CONFIG_MS5611=y
CONFIG_MS5611_I2C=y
CONFIG_MS5611_SPI=y
CONFIG_MS5637=y
CONFIG_IIO_ST_PRESS=y
CONFIG_IIO_ST_PRESS_I2C=y
CONFIG_IIO_ST_PRESS_SPI=y
CONFIG_T5403=y
CONFIG_HP206C=y
CONFIG_ZPA2326=y
CONFIG_ZPA2326_I2C=y
CONFIG_ZPA2326_SPI=y
# end of Pressure sensors

#
# Lightning sensors
#
CONFIG_AS3935=y
# end of Lightning sensors

#
# Proximity and distance sensors
#
CONFIG_CROS_EC_MKBP_PROXIMITY=y
CONFIG_ISL29501=y
CONFIG_LIDAR_LITE_V2=y
CONFIG_MB1232=y
CONFIG_PING=y
CONFIG_RFD77402=y
CONFIG_SRF04=y
CONFIG_SX_COMMON=y
CONFIG_SX9310=y
CONFIG_SX9324=y
CONFIG_SX9360=y
CONFIG_SX9500=y
CONFIG_SRF08=y
CONFIG_VCNL3020=y
CONFIG_VL53L0X_I2C=y
# end of Proximity and distance sensors

#
# Resolver to digital converters
#
CONFIG_AD2S90=y
CONFIG_AD2S1200=y
# end of Resolver to digital converters

#
# Temperature sensors
#
CONFIG_IQS620AT_TEMP=y
CONFIG_LTC2983=y
CONFIG_MAXIM_THERMOCOUPLE=y
CONFIG_HID_SENSOR_TEMP=y
CONFIG_MLX90614=y
CONFIG_MLX90632=y
CONFIG_TMP006=y
CONFIG_TMP007=y
CONFIG_TMP117=y
CONFIG_TSYS01=y
CONFIG_TSYS02D=y
CONFIG_MAX31856=y
CONFIG_MAX31865=y
# end of Temperature sensors

CONFIG_NTB=y
CONFIG_NTB_MSI=y
# CONFIG_NTB_AMD is not set
CONFIG_NTB_IDT=y
CONFIG_NTB_INTEL=y
CONFIG_NTB_EPF=m
CONFIG_NTB_SWITCHTEC=y
CONFIG_NTB_PINGPONG=y
CONFIG_NTB_TOOL=y
CONFIG_NTB_PERF=y
# CONFIG_NTB_MSI_TEST is not set
CONFIG_NTB_TRANSPORT=y
CONFIG_PWM=y
CONFIG_PWM_SYSFS=y
CONFIG_PWM_DEBUG=y
CONFIG_PWM_ATMEL_HLCDC_PWM=y
CONFIG_PWM_ATMEL_TCB=y
CONFIG_PWM_CLK=y
CONFIG_PWM_CRC=y
CONFIG_PWM_CROS_EC=y
CONFIG_PWM_DWC=y
CONFIG_PWM_FSL_FTM=y
CONFIG_PWM_INTEL_LGM=y
CONFIG_PWM_IQS620A=y
CONFIG_PWM_LP3943=y
CONFIG_PWM_LPSS=y
CONFIG_PWM_LPSS_PCI=y
CONFIG_PWM_LPSS_PLATFORM=y
CONFIG_PWM_NTXEC=y
CONFIG_PWM_PCA9685=y
CONFIG_PWM_STMPE=y
CONFIG_PWM_TWL=y
CONFIG_PWM_TWL_LED=y
CONFIG_PWM_XILINX=y

#
# IRQ chip support
#
CONFIG_IRQCHIP=y
CONFIG_AL_FIC=y
CONFIG_MADERA_IRQ=y
CONFIG_XILINX_INTC=y
# end of IRQ chip support

CONFIG_IPACK_BUS=y
CONFIG_BOARD_TPCI200=y
CONFIG_SERIAL_IPOCTAL=y
CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_INTEL_GW=y
CONFIG_RESET_SIMPLE=y
CONFIG_RESET_TI_SYSCON=y
CONFIG_RESET_TI_TPS380X=y

#
# PHY Subsystem
#
CONFIG_GENERIC_PHY=y
CONFIG_GENERIC_PHY_MIPI_DPHY=y
CONFIG_USB_LGM_PHY=y
CONFIG_PHY_CAN_TRANSCEIVER=y

#
# PHY drivers for Broadcom platforms
#
CONFIG_BCM_KONA_USB2_PHY=y
# end of PHY drivers for Broadcom platforms

CONFIG_PHY_CADENCE_TORRENT=y
CONFIG_PHY_CADENCE_DPHY=y
CONFIG_PHY_CADENCE_DPHY_RX=y
CONFIG_PHY_CADENCE_SIERRA=y
CONFIG_PHY_CADENCE_SALVO=y
CONFIG_PHY_PXA_28NM_HSIC=y
CONFIG_PHY_PXA_28NM_USB2=y
CONFIG_PHY_LAN966X_SERDES=y
CONFIG_PHY_CPCAP_USB=y
CONFIG_PHY_MAPPHONE_MDM6600=y
CONFIG_PHY_OCELOT_SERDES=y
CONFIG_PHY_QCOM_USB_HS=y
CONFIG_PHY_QCOM_USB_HSIC=y
CONFIG_PHY_TUSB1210=y
CONFIG_PHY_INTEL_LGM_COMBO=y
CONFIG_PHY_INTEL_LGM_EMMC=y
# end of PHY Subsystem

CONFIG_POWERCAP=y
CONFIG_INTEL_RAPL_CORE=y
CONFIG_INTEL_RAPL=y
CONFIG_IDLE_INJECT=y
CONFIG_DTPM=y
CONFIG_DTPM_CPU=y
CONFIG_DTPM_DEVFREQ=y
CONFIG_MCB=y
CONFIG_MCB_PCI=y
CONFIG_MCB_LPC=y

#
# Performance monitor support
#
# end of Performance monitor support

CONFIG_RAS=y
CONFIG_RAS_CEC=y
CONFIG_RAS_CEC_DEBUG=y
CONFIG_USB4=y
CONFIG_USB4_DEBUGFS_WRITE=y
CONFIG_USB4_DEBUGFS_MARGINING=y
# CONFIG_USB4_DMA_TEST is not set

#
# Android
#
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
# end of Android

CONFIG_LIBNVDIMM=y
CONFIG_BLK_DEV_PMEM=y
CONFIG_ND_CLAIM=y
CONFIG_ND_BTT=y
CONFIG_BTT=y
CONFIG_ND_PFN=y
CONFIG_NVDIMM_PFN=y
CONFIG_NVDIMM_DAX=y
CONFIG_OF_PMEM=y
CONFIG_NVDIMM_KEYS=y
CONFIG_DAX=y
CONFIG_DEV_DAX=y
CONFIG_DEV_DAX_PMEM=y
CONFIG_DEV_DAX_HMEM=y
CONFIG_DEV_DAX_HMEM_DEVICES=y
CONFIG_DEV_DAX_KMEM=y
CONFIG_NVMEM=y
CONFIG_NVMEM_SYSFS=y
CONFIG_NVMEM_RAVE_SP_EEPROM=y
CONFIG_NVMEM_RMEM=y
CONFIG_NVMEM_SPMI_SDAM=y
CONFIG_NVMEM_U_BOOT_ENV=y

#
# HW tracing support
#
CONFIG_STM=y
CONFIG_STM_PROTO_BASIC=y
CONFIG_STM_PROTO_SYS_T=y
CONFIG_STM_DUMMY=y
CONFIG_STM_SOURCE_CONSOLE=y
CONFIG_STM_SOURCE_HEARTBEAT=y
CONFIG_STM_SOURCE_FTRACE=y
CONFIG_INTEL_TH=y
CONFIG_INTEL_TH_PCI=y
CONFIG_INTEL_TH_ACPI=y
CONFIG_INTEL_TH_GTH=y
CONFIG_INTEL_TH_STH=y
CONFIG_INTEL_TH_MSU=y
CONFIG_INTEL_TH_PTI=y
CONFIG_INTEL_TH_DEBUG=y
# end of HW tracing support

CONFIG_FPGA=y
CONFIG_ALTERA_PR_IP_CORE=y
CONFIG_ALTERA_PR_IP_CORE_PLAT=y
CONFIG_FPGA_MGR_ALTERA_PS_SPI=y
CONFIG_FPGA_MGR_ALTERA_CVP=y
CONFIG_FPGA_MGR_XILINX_SPI=y
CONFIG_FPGA_MGR_ICE40_SPI=y
CONFIG_FPGA_MGR_MACHXO2_SPI=y
CONFIG_FPGA_BRIDGE=y
CONFIG_ALTERA_FREEZE_BRIDGE=y
CONFIG_XILINX_PR_DECOUPLER=y
CONFIG_FPGA_REGION=y
CONFIG_OF_FPGA_REGION=y
CONFIG_FPGA_DFL=y
CONFIG_FPGA_DFL_FME=y
CONFIG_FPGA_DFL_FME_MGR=y
CONFIG_FPGA_DFL_FME_BRIDGE=y
CONFIG_FPGA_DFL_FME_REGION=y
CONFIG_FPGA_DFL_AFU=y
CONFIG_FPGA_DFL_NIOS_INTEL_PAC_N3000=y
CONFIG_FPGA_DFL_PCI=y
CONFIG_FPGA_M10_BMC_SEC_UPDATE=y
CONFIG_FPGA_MGR_MICROCHIP_SPI=y
CONFIG_FSI=y
CONFIG_FSI_NEW_DEV_NODE=y
CONFIG_FSI_MASTER_GPIO=y
CONFIG_FSI_MASTER_HUB=y
CONFIG_FSI_MASTER_ASPEED=y
CONFIG_FSI_SCOM=y
CONFIG_FSI_SBEFIFO=y
CONFIG_FSI_OCC=y
CONFIG_MULTIPLEXER=y

#
# Multiplexer drivers
#
CONFIG_MUX_ADG792A=y
CONFIG_MUX_ADGS1408=y
CONFIG_MUX_GPIO=y
CONFIG_MUX_MMIO=y
# end of Multiplexer drivers

CONFIG_PM_OPP=y
CONFIG_SIOX=y
CONFIG_SIOX_BUS_GPIO=y
CONFIG_SLIMBUS=y
CONFIG_SLIM_QCOM_CTRL=y
CONFIG_INTERCONNECT=y
CONFIG_COUNTER=y
CONFIG_104_QUAD_8=y
CONFIG_INTERRUPT_CNT=y
CONFIG_FTM_QUADDEC=y
CONFIG_MICROCHIP_TCB_CAPTURE=y
CONFIG_INTEL_QEP=y
CONFIG_MOST=y
CONFIG_MOST_USB_HDM=y
CONFIG_MOST_CDEV=y
CONFIG_MOST_SND=y
CONFIG_PECI=y
CONFIG_PECI_CPU=y
CONFIG_HTE=y
# end of Device Drivers

#
# File systems
#
CONFIG_DCACHE_WORD_ACCESS=y
CONFIG_VALIDATE_FS_PARSER=y
CONFIG_FS_IOMAP=y
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
CONFIG_EXT4_DEBUG=y
CONFIG_JBD2=y
CONFIG_JBD2_DEBUG=y
CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=y
CONFIG_REISERFS_CHECK=y
CONFIG_REISERFS_PROC_INFO=y
CONFIG_REISERFS_FS_XATTR=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_SECURITY=y
CONFIG_JFS_FS=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_JFS_SECURITY=y
CONFIG_JFS_DEBUG=y
CONFIG_JFS_STATISTICS=y
CONFIG_XFS_FS=y
CONFIG_XFS_SUPPORT_V4=y
CONFIG_XFS_QUOTA=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_RT=y
CONFIG_XFS_ONLINE_SCRUB=y
CONFIG_XFS_ONLINE_REPAIR=y
CONFIG_XFS_DEBUG=y
CONFIG_XFS_ASSERT_FATAL=y
CONFIG_GFS2_FS=y
CONFIG_GFS2_FS_LOCKING_DLM=y
CONFIG_OCFS2_FS=y
CONFIG_OCFS2_FS_O2CB=y
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=y
CONFIG_OCFS2_FS_STATS=y
CONFIG_OCFS2_DEBUG_MASKLOG=y
CONFIG_OCFS2_DEBUG_FS=y
CONFIG_BTRFS_FS=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_BTRFS_FS_CHECK_INTEGRITY=y
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
CONFIG_BTRFS_DEBUG=y
CONFIG_BTRFS_ASSERT=y
CONFIG_BTRFS_FS_REF_VERIFY=y
CONFIG_NILFS2_FS=y
CONFIG_F2FS_FS=y
CONFIG_F2FS_STAT_FS=y
CONFIG_F2FS_FS_XATTR=y
CONFIG_F2FS_FS_POSIX_ACL=y
CONFIG_F2FS_FS_SECURITY=y
CONFIG_F2FS_CHECK_FS=y
CONFIG_F2FS_FAULT_INJECTION=y
CONFIG_F2FS_FS_COMPRESSION=y
CONFIG_F2FS_FS_LZO=y
CONFIG_F2FS_FS_LZORLE=y
CONFIG_F2FS_FS_LZ4=y
CONFIG_F2FS_FS_LZ4HC=y
CONFIG_F2FS_FS_ZSTD=y
CONFIG_F2FS_IOSTAT=y
CONFIG_F2FS_UNFAIR_RWSEM=y
CONFIG_ZONEFS_FS=y
CONFIG_FS_DAX=y
CONFIG_FS_DAX_PMD=y
CONFIG_FS_POSIX_ACL=y
CONFIG_EXPORTFS=y
CONFIG_EXPORTFS_BLOCK_OPS=y
CONFIG_FILE_LOCKING=y
CONFIG_FS_ENCRYPTION=y
CONFIG_FS_ENCRYPTION_ALGS=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_VERITY=y
CONFIG_FS_VERITY_DEBUG=y
CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY_USER=y
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_PRINT_QUOTA_WARNING=y
CONFIG_QUOTA_DEBUG=y
CONFIG_QUOTA_TREE=y
CONFIG_QFMT_V1=y
CONFIG_QFMT_V2=y
CONFIG_QUOTACTL=y
CONFIG_AUTOFS4_FS=y
CONFIG_AUTOFS_FS=y
CONFIG_FUSE_FS=y
CONFIG_CUSE=y
CONFIG_VIRTIO_FS=y
CONFIG_FUSE_DAX=y
CONFIG_OVERLAY_FS=y
CONFIG_OVERLAY_FS_REDIRECT_DIR=y
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
CONFIG_OVERLAY_FS_INDEX=y
CONFIG_OVERLAY_FS_XINO_AUTO=y
CONFIG_OVERLAY_FS_METACOPY=y

#
# Caches
#
CONFIG_NETFS_SUPPORT=y
CONFIG_NETFS_STATS=y
CONFIG_FSCACHE=y
CONFIG_FSCACHE_STATS=y
CONFIG_FSCACHE_DEBUG=y
CONFIG_CACHEFILES=y
CONFIG_CACHEFILES_DEBUG=y
CONFIG_CACHEFILES_ERROR_INJECTION=y
CONFIG_CACHEFILES_ONDEMAND=y
# end of Caches

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_UDF_FS=y
# end of CD-ROM/DVD Filesystems

#
# DOS/FAT/EXFAT/NT Filesystems
#
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_FAT_DEFAULT_UTF8=y
CONFIG_EXFAT_FS=y
CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
CONFIG_NTFS_FS=y
CONFIG_NTFS_DEBUG=y
CONFIG_NTFS_RW=y
CONFIG_NTFS3_FS=y
CONFIG_NTFS3_64BIT_CLUSTER=y
CONFIG_NTFS3_LZX_XPRESS=y
CONFIG_NTFS3_FS_POSIX_ACL=y
# end of DOS/FAT/EXFAT/NT Filesystems

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_VMCORE=y
CONFIG_PROC_VMCORE_DEVICE_DUMP=y
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_PROC_CHILDREN=y
CONFIG_PROC_PID_ARCH_STATUS=y
CONFIG_PROC_CPU_RESCTRL=y
CONFIG_KERNFS=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS_INODE64=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
CONFIG_ARCH_WANT_HUGETLB_PAGE_OPTIMIZE_VMEMMAP=y
CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP=y
CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON=y
CONFIG_MEMFD_CREATE=y
CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
CONFIG_CONFIGFS_FS=y
CONFIG_EFIVAR_FS=y
# end of Pseudo filesystems

CONFIG_MISC_FILESYSTEMS=y
CONFIG_ORANGEFS_FS=y
CONFIG_ADFS_FS=y
CONFIG_ADFS_FS_RW=y
CONFIG_AFFS_FS=y
CONFIG_ECRYPT_FS=y
CONFIG_ECRYPT_FS_MESSAGING=y
CONFIG_HFS_FS=y
CONFIG_HFSPLUS_FS=y
CONFIG_BEFS_FS=y
CONFIG_BEFS_DEBUG=y
CONFIG_BFS_FS=y
CONFIG_EFS_FS=y
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_FS_WBUF_VERIFY=y
CONFIG_JFFS2_SUMMARY=y
CONFIG_JFFS2_FS_XATTR=y
CONFIG_JFFS2_FS_POSIX_ACL=y
CONFIG_JFFS2_FS_SECURITY=y
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_RTIME=y
CONFIG_JFFS2_RUBIN=y
# CONFIG_JFFS2_CMODE_NONE is not set
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
CONFIG_UBIFS_FS=y
CONFIG_UBIFS_FS_ADVANCED_COMPR=y
CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
CONFIG_UBIFS_FS_ZSTD=y
CONFIG_UBIFS_ATIME_SUPPORT=y
CONFIG_UBIFS_FS_XATTR=y
CONFIG_UBIFS_FS_SECURITY=y
CONFIG_UBIFS_FS_AUTHENTICATION=y
CONFIG_CRAMFS=y
CONFIG_CRAMFS_BLOCKDEV=y
CONFIG_CRAMFS_MTD=y
CONFIG_SQUASHFS=y
CONFIG_SQUASHFS_FILE_CACHE=y
# CONFIG_SQUASHFS_FILE_DIRECT is not set
CONFIG_SQUASHFS_DECOMP_SINGLE=y
# CONFIG_SQUASHFS_DECOMP_MULTI is not set
# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set
CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_ZLIB=y
CONFIG_SQUASHFS_LZ4=y
CONFIG_SQUASHFS_LZO=y
CONFIG_SQUASHFS_XZ=y
CONFIG_SQUASHFS_ZSTD=y
CONFIG_SQUASHFS_4K_DEVBLK_SIZE=y
CONFIG_SQUASHFS_EMBEDDED=y
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
CONFIG_VXFS_FS=y
CONFIG_MINIX_FS=y
CONFIG_OMFS_FS=y
CONFIG_HPFS_FS=y
CONFIG_QNX4FS_FS=y
CONFIG_QNX6FS_FS=y
CONFIG_QNX6FS_DEBUG=y
CONFIG_ROMFS_FS=y
CONFIG_ROMFS_BACKED_BY_BLOCK=y
# CONFIG_ROMFS_BACKED_BY_MTD is not set
# CONFIG_ROMFS_BACKED_BY_BOTH is not set
CONFIG_ROMFS_ON_BLOCK=y
CONFIG_PSTORE=y
CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240
CONFIG_PSTORE_DEFLATE_COMPRESS=y
CONFIG_PSTORE_LZO_COMPRESS=y
CONFIG_PSTORE_LZ4_COMPRESS=y
CONFIG_PSTORE_LZ4HC_COMPRESS=y
CONFIG_PSTORE_842_COMPRESS=y
CONFIG_PSTORE_ZSTD_COMPRESS=y
CONFIG_PSTORE_COMPRESS=y
CONFIG_PSTORE_DEFLATE_COMPRESS_DEFAULT=y
# CONFIG_PSTORE_LZO_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_LZ4_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_LZ4HC_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_842_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT is not set
CONFIG_PSTORE_COMPRESS_DEFAULT="deflate"
CONFIG_PSTORE_CONSOLE=y
CONFIG_PSTORE_PMSG=y
CONFIG_PSTORE_FTRACE=y
CONFIG_PSTORE_RAM=y
CONFIG_PSTORE_ZONE=y
CONFIG_PSTORE_BLK=y
CONFIG_PSTORE_BLK_BLKDEV=""
CONFIG_PSTORE_BLK_KMSG_SIZE=64
CONFIG_PSTORE_BLK_MAX_REASON=2
CONFIG_PSTORE_BLK_PMSG_SIZE=64
CONFIG_PSTORE_BLK_CONSOLE_SIZE=64
CONFIG_PSTORE_BLK_FTRACE_SIZE=64
CONFIG_SYSV_FS=y
CONFIG_UFS_FS=y
CONFIG_UFS_FS_WRITE=y
CONFIG_UFS_DEBUG=y
CONFIG_EROFS_FS=y
CONFIG_EROFS_FS_DEBUG=y
CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_ZIP=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ONDEMAND=y
CONFIG_VBOXSF_FS=y
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V2=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
CONFIG_NFS_SWAP=y
CONFIG_NFS_V4_1=y
CONFIG_NFS_V4_2=y
CONFIG_PNFS_FILE_LAYOUT=y
CONFIG_PNFS_BLOCK=y
CONFIG_PNFS_FLEXFILE_LAYOUT=y
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
CONFIG_NFS_V4_1_MIGRATION=y
CONFIG_NFS_V4_SECURITY_LABEL=y
CONFIG_ROOT_NFS=y
CONFIG_NFS_FSCACHE=y
CONFIG_NFS_USE_LEGACY_DNS=y
CONFIG_NFS_DEBUG=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
CONFIG_NFS_V4_2_READ_PLUS=y
CONFIG_NFSD=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFSD_V4=y
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_SCSILAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFSD_V4_2_INTER_SSC=y
CONFIG_NFSD_V4_SECURITY_LABEL=y
CONFIG_GRACE_PERIOD=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
CONFIG_NFS_V4_2_SSC_HELPER=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
CONFIG_SUNRPC_BACKCHANNEL=y
CONFIG_SUNRPC_SWAP=y
CONFIG_RPCSEC_GSS_KRB5=y
CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES=y
CONFIG_SUNRPC_DEBUG=y
CONFIG_SUNRPC_XPRT_RDMA=y
CONFIG_CEPH_FS=y
CONFIG_CEPH_FSCACHE=y
CONFIG_CEPH_FS_POSIX_ACL=y
CONFIG_CEPH_FS_SECURITY_LABEL=y
CONFIG_CIFS=y
CONFIG_CIFS_STATS2=y
CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y
CONFIG_CIFS_UPCALL=y
CONFIG_CIFS_XATTR=y
CONFIG_CIFS_POSIX=y
CONFIG_CIFS_DEBUG=y
CONFIG_CIFS_DEBUG2=y
CONFIG_CIFS_DEBUG_DUMP_KEYS=y
CONFIG_CIFS_DFS_UPCALL=y
CONFIG_CIFS_SWN_UPCALL=y
CONFIG_CIFS_SMB_DIRECT=y
CONFIG_CIFS_FSCACHE=y
CONFIG_CIFS_ROOT=y
CONFIG_SMB_SERVER=y
CONFIG_SMB_SERVER_SMBDIRECT=y
CONFIG_SMB_SERVER_CHECK_CAP_NET_ADMIN=y
CONFIG_SMB_SERVER_KERBEROS5=y
CONFIG_SMBFS_COMMON=y
CONFIG_CODA_FS=y
CONFIG_AFS_FS=y
CONFIG_AFS_DEBUG=y
CONFIG_AFS_FSCACHE=y
CONFIG_AFS_DEBUG_CURSOR=y
CONFIG_9P_FS=y
CONFIG_9P_FSCACHE=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_9P_FS_SECURITY=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_737=y
CONFIG_NLS_CODEPAGE_775=y
CONFIG_NLS_CODEPAGE_850=y
CONFIG_NLS_CODEPAGE_852=y
CONFIG_NLS_CODEPAGE_855=y
CONFIG_NLS_CODEPAGE_857=y
CONFIG_NLS_CODEPAGE_860=y
CONFIG_NLS_CODEPAGE_861=y
CONFIG_NLS_CODEPAGE_862=y
CONFIG_NLS_CODEPAGE_863=y
CONFIG_NLS_CODEPAGE_864=y
CONFIG_NLS_CODEPAGE_865=y
CONFIG_NLS_CODEPAGE_866=y
CONFIG_NLS_CODEPAGE_869=y
CONFIG_NLS_CODEPAGE_936=y
CONFIG_NLS_CODEPAGE_950=y
CONFIG_NLS_CODEPAGE_932=y
CONFIG_NLS_CODEPAGE_949=y
CONFIG_NLS_CODEPAGE_874=y
CONFIG_NLS_ISO8859_8=y
CONFIG_NLS_CODEPAGE_1250=y
CONFIG_NLS_CODEPAGE_1251=y
CONFIG_NLS_ASCII=y
CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_ISO8859_2=y
CONFIG_NLS_ISO8859_3=y
CONFIG_NLS_ISO8859_4=y
CONFIG_NLS_ISO8859_5=y
CONFIG_NLS_ISO8859_6=y
CONFIG_NLS_ISO8859_7=y
CONFIG_NLS_ISO8859_9=y
CONFIG_NLS_ISO8859_13=y
CONFIG_NLS_ISO8859_14=y
CONFIG_NLS_ISO8859_15=y
CONFIG_NLS_KOI8_R=y
CONFIG_NLS_KOI8_U=y
CONFIG_NLS_MAC_ROMAN=y
CONFIG_NLS_MAC_CELTIC=y
CONFIG_NLS_MAC_CENTEURO=y
CONFIG_NLS_MAC_CROATIAN=y
CONFIG_NLS_MAC_CYRILLIC=y
CONFIG_NLS_MAC_GAELIC=y
CONFIG_NLS_MAC_GREEK=y
CONFIG_NLS_MAC_ICELAND=y
CONFIG_NLS_MAC_INUIT=y
CONFIG_NLS_MAC_ROMANIAN=y
CONFIG_NLS_MAC_TURKISH=y
CONFIG_NLS_UTF8=y
CONFIG_DLM=y
CONFIG_DLM_DEPRECATED_API=y
CONFIG_DLM_DEBUG=y
CONFIG_UNICODE=y
# CONFIG_UNICODE_NORMALIZATION_SELFTEST is not set
CONFIG_IO_WQ=y
# end of File systems

#
# Security options
#
CONFIG_KEYS=y
CONFIG_KEYS_REQUEST_CACHE=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_BIG_KEYS=y
CONFIG_TRUSTED_KEYS=y
CONFIG_TRUSTED_KEYS_TPM=y
CONFIG_ENCRYPTED_KEYS=y
CONFIG_USER_DECRYPTED_DATA=y
CONFIG_KEY_DH_OPERATIONS=y
CONFIG_KEY_NOTIFICATIONS=y
CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITY=y
CONFIG_SECURITY_WRITABLE_HOOKS=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
CONFIG_SECURITY_INFINIBAND=y
CONFIG_SECURITY_NETWORK_XFRM=y
CONFIG_SECURITY_PATH=y
CONFIG_INTEL_TXT=y
CONFIG_LSM_MMAP_MIN_ADDR=65536
CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
CONFIG_HARDENED_USERCOPY=y
CONFIG_FORTIFY_SOURCE=y
CONFIG_STATIC_USERMODEHELPER=y
CONFIG_STATIC_USERMODEHELPER_PATH="/sbin/usermode-helper"
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_SECURITY_SELINUX_DISABLE=y
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=0
CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS=9
CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256
CONFIG_SECURITY_SMACK=y
CONFIG_SECURITY_SMACK_BRINGUP=y
CONFIG_SECURITY_SMACK_NETFILTER=y
CONFIG_SECURITY_SMACK_APPEND_SIGNALS=y
# CONFIG_SECURITY_TOMOYO is not set
CONFIG_SECURITY_APPARMOR=y
CONFIG_SECURITY_APPARMOR_DEBUG=y
CONFIG_SECURITY_APPARMOR_DEBUG_ASSERTS=y
CONFIG_SECURITY_APPARMOR_DEBUG_MESSAGES=y
CONFIG_SECURITY_APPARMOR_INTROSPECT_POLICY=y
CONFIG_SECURITY_APPARMOR_HASH=y
CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y
CONFIG_SECURITY_APPARMOR_EXPORT_BINARY=y
CONFIG_SECURITY_APPARMOR_PARANOID_LOAD=y
CONFIG_SECURITY_LOADPIN=y
CONFIG_SECURITY_LOADPIN_ENFORCE=y
CONFIG_SECURITY_LOADPIN_VERITY=y
CONFIG_SECURITY_YAMA=y
CONFIG_SECURITY_SAFESETID=y
CONFIG_SECURITY_LOCKDOWN_LSM=y
CONFIG_SECURITY_LOCKDOWN_LSM_EARLY=y
CONFIG_LOCK_DOWN_KERNEL_FORCE_NONE=y
# CONFIG_LOCK_DOWN_KERNEL_FORCE_INTEGRITY is not set
# CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY is not set
CONFIG_SECURITY_LANDLOCK=y
CONFIG_INTEGRITY=y
CONFIG_INTEGRITY_SIGNATURE=y
CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
CONFIG_INTEGRITY_TRUSTED_KEYRING=y
CONFIG_INTEGRITY_PLATFORM_KEYRING=y
CONFIG_LOAD_UEFI_KEYS=y
CONFIG_INTEGRITY_AUDIT=y
CONFIG_IMA=y
CONFIG_IMA_KEXEC=y
CONFIG_IMA_MEASURE_PCR_IDX=10
CONFIG_IMA_LSM_RULES=y
CONFIG_IMA_NG_TEMPLATE=y
# CONFIG_IMA_SIG_TEMPLATE is not set
CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng"
CONFIG_IMA_DEFAULT_HASH_SHA1=y
# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set
# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set
# CONFIG_IMA_DEFAULT_HASH_WP512 is not set
# CONFIG_IMA_DEFAULT_HASH_SM3 is not set
CONFIG_IMA_DEFAULT_HASH="sha1"
CONFIG_IMA_WRITE_POLICY=y
CONFIG_IMA_READ_POLICY=y
CONFIG_IMA_APPRAISE=y
CONFIG_IMA_ARCH_POLICY=y
CONFIG_IMA_APPRAISE_BUILD_POLICY=y
CONFIG_IMA_APPRAISE_REQUIRE_FIRMWARE_SIGS=y
CONFIG_IMA_APPRAISE_REQUIRE_KEXEC_SIGS=y
# CONFIG_IMA_APPRAISE_REQUIRE_MODULE_SIGS is not set
CONFIG_IMA_APPRAISE_REQUIRE_POLICY_SIGS=y
CONFIG_IMA_APPRAISE_BOOTPARAM=y
CONFIG_IMA_APPRAISE_MODSIG=y
CONFIG_IMA_TRUSTED_KEYRING=y
CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY=y
CONFIG_IMA_BLACKLIST_KEYRING=y
CONFIG_IMA_LOAD_X509=y
CONFIG_IMA_X509_PATH="/etc/keys/x509_ima.der"
CONFIG_IMA_APPRAISE_SIGNED_INIT=y
CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS=y
CONFIG_IMA_QUEUE_EARLY_BOOT_KEYS=y
CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT=y
CONFIG_IMA_DISABLE_HTABLE=y
CONFIG_EVM=y
CONFIG_EVM_ATTR_FSUUID=y
CONFIG_EVM_EXTRA_SMACK_XATTRS=y
CONFIG_EVM_ADD_XATTRS=y
CONFIG_EVM_LOAD_X509=y
CONFIG_EVM_X509_PATH="/etc/keys/x509_evm.der"
CONFIG_DEFAULT_SECURITY_SELINUX=y
# CONFIG_DEFAULT_SECURITY_SMACK is not set
# CONFIG_DEFAULT_SECURITY_APPARMOR is not set
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf"

#
# Kernel hardening options
#

#
# Memory initialization
#
CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_ENABLER=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y
# CONFIG_INIT_STACK_NONE is not set
CONFIG_INIT_STACK_ALL_PATTERN=y
# CONFIG_INIT_STACK_ALL_ZERO is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
CONFIG_INIT_ON_FREE_DEFAULT_ON=y
# end of Memory initialization

CONFIG_RANDSTRUCT_NONE=y
# end of Kernel hardening options
# end of Security options

CONFIG_XOR_BLOCKS=y
CONFIG_ASYNC_CORE=y
CONFIG_ASYNC_MEMCPY=y
CONFIG_ASYNC_XOR=y
CONFIG_ASYNC_PQ=y
CONFIG_ASYNC_RAID6_RECOV=y
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=y
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_SKCIPHER=y
CONFIG_CRYPTO_SKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_RNG_DEFAULT=y
CONFIG_CRYPTO_AKCIPHER2=y
CONFIG_CRYPTO_AKCIPHER=y
CONFIG_CRYPTO_KPP2=y
CONFIG_CRYPTO_KPP=y
CONFIG_CRYPTO_ACOMP2=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
CONFIG_CRYPTO_USER=y
CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
CONFIG_CRYPTO_GF128MUL=y
CONFIG_CRYPTO_NULL=y
CONFIG_CRYPTO_NULL2=y
CONFIG_CRYPTO_PCRYPT=y
CONFIG_CRYPTO_CRYPTD=y
CONFIG_CRYPTO_AUTHENC=y
# CONFIG_CRYPTO_TEST is not set
CONFIG_CRYPTO_SIMD=y
CONFIG_CRYPTO_ENGINE=y
# end of Crypto core or helper

#
# Public-key cryptography
#
CONFIG_CRYPTO_RSA=y
CONFIG_CRYPTO_DH=y
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_ECC=y
CONFIG_CRYPTO_ECDH=y
CONFIG_CRYPTO_ECDSA=y
CONFIG_CRYPTO_ECRDSA=y
CONFIG_CRYPTO_SM2=y
CONFIG_CRYPTO_CURVE25519=y
# end of Public-key cryptography

#
# Block ciphers
#
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_AES_TI=y
CONFIG_CRYPTO_ANUBIS=y
CONFIG_CRYPTO_ARIA=y
CONFIG_CRYPTO_BLOWFISH=y
CONFIG_CRYPTO_BLOWFISH_COMMON=y
CONFIG_CRYPTO_CAMELLIA=y
CONFIG_CRYPTO_CAST_COMMON=y
CONFIG_CRYPTO_CAST5=y
CONFIG_CRYPTO_CAST6=y
CONFIG_CRYPTO_DES=y
CONFIG_CRYPTO_FCRYPT=y
CONFIG_CRYPTO_KHAZAD=y
CONFIG_CRYPTO_SEED=y
CONFIG_CRYPTO_SERPENT=y
CONFIG_CRYPTO_SM4=y
CONFIG_CRYPTO_SM4_GENERIC=y
CONFIG_CRYPTO_TEA=y
CONFIG_CRYPTO_TWOFISH=y
CONFIG_CRYPTO_TWOFISH_COMMON=y
# end of Block ciphers

#
# Length-preserving ciphers and modes
#
CONFIG_CRYPTO_ADIANTUM=y
CONFIG_CRYPTO_ARC4=y
CONFIG_CRYPTO_CHACHA20=y
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_ECB=y
CONFIG_CRYPTO_HCTR2=y
CONFIG_CRYPTO_KEYWRAP=y
CONFIG_CRYPTO_LRW=y
CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=y
CONFIG_CRYPTO_XCTR=y
CONFIG_CRYPTO_XTS=y
CONFIG_CRYPTO_NHPOLY1305=y
# end of Length-preserving ciphers and modes

#
# AEAD (authenticated encryption with associated data) ciphers
#
CONFIG_CRYPTO_AEGIS128=y
CONFIG_CRYPTO_CHACHA20POLY1305=y
CONFIG_CRYPTO_CCM=y
CONFIG_CRYPTO_GCM=y
CONFIG_CRYPTO_SEQIV=y
CONFIG_CRYPTO_ECHAINIV=y
CONFIG_CRYPTO_ESSIV=y
# end of AEAD (authenticated encryption with associated data) ciphers

#
# Hashes, digests, and MACs
#
CONFIG_CRYPTO_BLAKE2B=y
CONFIG_CRYPTO_CMAC=y
CONFIG_CRYPTO_GHASH=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_MD4=y
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=y
CONFIG_CRYPTO_POLYVAL=y
CONFIG_CRYPTO_POLY1305=y
CONFIG_CRYPTO_RMD160=y
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=y
CONFIG_CRYPTO_SHA3=y
CONFIG_CRYPTO_SM3=y
CONFIG_CRYPTO_SM3_GENERIC=y
CONFIG_CRYPTO_STREEBOG=y
CONFIG_CRYPTO_VMAC=y
CONFIG_CRYPTO_WP512=y
CONFIG_CRYPTO_XCBC=y
CONFIG_CRYPTO_XXHASH=y
# end of Hashes, digests, and MACs

#
# CRCs (cyclic redundancy checks)
#
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32=y
CONFIG_CRYPTO_CRCT10DIF=y
CONFIG_CRYPTO_CRC64_ROCKSOFT=y
# end of CRCs (cyclic redundancy checks)

#
# Compression
#
CONFIG_CRYPTO_DEFLATE=y
CONFIG_CRYPTO_LZO=y
CONFIG_CRYPTO_842=y
CONFIG_CRYPTO_LZ4=y
CONFIG_CRYPTO_LZ4HC=y
CONFIG_CRYPTO_ZSTD=y
# end of Compression

#
# Random number generation
#
CONFIG_CRYPTO_ANSI_CPRNG=y
CONFIG_CRYPTO_DRBG_MENU=y
CONFIG_CRYPTO_DRBG_HMAC=y
CONFIG_CRYPTO_DRBG_HASH=y
CONFIG_CRYPTO_DRBG_CTR=y
CONFIG_CRYPTO_DRBG=y
CONFIG_CRYPTO_JITTERENTROPY=y
CONFIG_CRYPTO_KDF800108_CTR=y
# end of Random number generation

#
# Userspace interface
#
CONFIG_CRYPTO_USER_API=y
CONFIG_CRYPTO_USER_API_HASH=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y
CONFIG_CRYPTO_USER_API_RNG=y
CONFIG_CRYPTO_USER_API_RNG_CAVP=y
CONFIG_CRYPTO_USER_API_AEAD=y
CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y
CONFIG_CRYPTO_STATS=y
# end of Userspace interface

CONFIG_CRYPTO_HASH_INFO=y

#
# Accelerated Cryptographic Algorithms for CPU (x86)
#
CONFIG_CRYPTO_CURVE25519_X86=y
CONFIG_CRYPTO_AES_NI_INTEL=y
CONFIG_CRYPTO_BLOWFISH_X86_64=y
CONFIG_CRYPTO_CAMELLIA_X86_64=y
CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=y
CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=y
CONFIG_CRYPTO_CAST5_AVX_X86_64=y
CONFIG_CRYPTO_CAST6_AVX_X86_64=y
CONFIG_CRYPTO_DES3_EDE_X86_64=y
CONFIG_CRYPTO_SERPENT_SSE2_X86_64=y
CONFIG_CRYPTO_SERPENT_AVX_X86_64=y
CONFIG_CRYPTO_SERPENT_AVX2_X86_64=y
CONFIG_CRYPTO_SM4_AESNI_AVX_X86_64=y
CONFIG_CRYPTO_SM4_AESNI_AVX2_X86_64=y
CONFIG_CRYPTO_TWOFISH_X86_64=y
CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=y
CONFIG_CRYPTO_TWOFISH_AVX_X86_64=y
CONFIG_CRYPTO_ARIA_AESNI_AVX_X86_64=y
CONFIG_CRYPTO_CHACHA20_X86_64=y
CONFIG_CRYPTO_AEGIS128_AESNI_SSE2=y
CONFIG_CRYPTO_NHPOLY1305_SSE2=y
CONFIG_CRYPTO_NHPOLY1305_AVX2=y
CONFIG_CRYPTO_BLAKE2S_X86=y
CONFIG_CRYPTO_POLYVAL_CLMUL_NI=y
CONFIG_CRYPTO_POLY1305_X86_64=y
CONFIG_CRYPTO_SHA1_SSSE3=y
CONFIG_CRYPTO_SHA256_SSSE3=y
CONFIG_CRYPTO_SHA512_SSSE3=y
CONFIG_CRYPTO_SM3_AVX_X86_64=y
CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=y
CONFIG_CRYPTO_CRC32C_INTEL=y
CONFIG_CRYPTO_CRC32_PCLMUL=y
CONFIG_CRYPTO_CRCT10DIF_PCLMUL=y
# end of Accelerated Cryptographic Algorithms for CPU (x86)

CONFIG_CRYPTO_HW=y
CONFIG_CRYPTO_DEV_PADLOCK=y
CONFIG_CRYPTO_DEV_PADLOCK_AES=y
CONFIG_CRYPTO_DEV_PADLOCK_SHA=y
CONFIG_CRYPTO_DEV_ATMEL_I2C=y
CONFIG_CRYPTO_DEV_ATMEL_ECC=y
CONFIG_CRYPTO_DEV_ATMEL_SHA204A=y
CONFIG_CRYPTO_DEV_CCP=y
CONFIG_CRYPTO_DEV_QAT=y
CONFIG_CRYPTO_DEV_QAT_DH895xCC=y
CONFIG_CRYPTO_DEV_QAT_C3XXX=y
CONFIG_CRYPTO_DEV_QAT_C62X=y
CONFIG_CRYPTO_DEV_QAT_4XXX=y
CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=y
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=y
CONFIG_CRYPTO_DEV_QAT_C62XVF=y
CONFIG_CRYPTO_DEV_NITROX=y
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=y
CONFIG_CRYPTO_DEV_CHELSIO=y
CONFIG_CRYPTO_DEV_VIRTIO=y
CONFIG_CRYPTO_DEV_SAFEXCEL=y
CONFIG_CRYPTO_DEV_CCREE=y
CONFIG_CRYPTO_DEV_AMLOGIC_GXL=y
CONFIG_CRYPTO_DEV_AMLOGIC_GXL_DEBUG=y
CONFIG_ASYMMETRIC_KEY_TYPE=y
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
CONFIG_X509_CERTIFICATE_PARSER=y
CONFIG_PKCS8_PRIVATE_KEY_PARSER=y
CONFIG_PKCS7_MESSAGE_PARSER=y
# CONFIG_PKCS7_TEST_KEY is not set
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set

#
# Certificates for signature checking
#
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
# CONFIG_MODULE_SIG_KEY_TYPE_ECDSA is not set
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_EXTRA_CERTIFICATE=y
CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096
CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
CONFIG_SYSTEM_REVOCATION_LIST=y
CONFIG_SYSTEM_REVOCATION_KEYS=""
CONFIG_SYSTEM_BLACKLIST_AUTH_UPDATE=y
# end of Certificates for signature checking

CONFIG_BINARY_PRINTF=y

#
# Library routines
#
CONFIG_RAID6_PQ=y
CONFIG_RAID6_PQ_BENCHMARK=y
CONFIG_LINEAR_RANGES=y
CONFIG_PACKING=y
CONFIG_BITREVERSE=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_GENERIC_NET_UTILS=y
CONFIG_CORDIC=y
CONFIG_PRIME_NUMBERS=y
CONFIG_RATIONAL=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_IOMAP=y
CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
CONFIG_ARCH_USE_SYM_ANNOTATIONS=y

#
# Crypto library routines
#
CONFIG_CRYPTO_LIB_UTILS=y
CONFIG_CRYPTO_LIB_AES=y
CONFIG_CRYPTO_LIB_ARC4=y
CONFIG_CRYPTO_ARCH_HAVE_LIB_BLAKE2S=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=y
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=y
CONFIG_CRYPTO_LIB_CHACHA=y
CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519=y
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y
CONFIG_CRYPTO_LIB_CURVE25519=y
CONFIG_CRYPTO_LIB_DES=y
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305=y
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=y
CONFIG_CRYPTO_LIB_POLY1305=y
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=y
CONFIG_CRYPTO_LIB_SHA1=y
CONFIG_CRYPTO_LIB_SHA256=y
# end of Crypto library routines

CONFIG_CRC_CCITT=y
CONFIG_CRC16=y
CONFIG_CRC_T10DIF=y
CONFIG_CRC64_ROCKSOFT=y
CONFIG_CRC_ITU_T=y
CONFIG_CRC32=y
# CONFIG_CRC32_SELFTEST is not set
CONFIG_CRC32_SLICEBY8=y
# CONFIG_CRC32_SLICEBY4 is not set
# CONFIG_CRC32_SARWATE is not set
# CONFIG_CRC32_BIT is not set
CONFIG_CRC64=y
CONFIG_CRC4=y
CONFIG_CRC7=y
CONFIG_LIBCRC32C=y
CONFIG_CRC8=y
CONFIG_XXHASH=y
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_842_COMPRESS=y
CONFIG_842_DECOMPRESS=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_LZ4_COMPRESS=y
CONFIG_LZ4HC_COMPRESS=y
CONFIG_LZ4_DECOMPRESS=y
CONFIG_ZSTD_COMMON=y
CONFIG_ZSTD_COMPRESS=y
CONFIG_ZSTD_DECOMPRESS=y
CONFIG_XZ_DEC=y
CONFIG_XZ_DEC_X86=y
CONFIG_XZ_DEC_POWERPC=y
CONFIG_XZ_DEC_IA64=y
CONFIG_XZ_DEC_ARM=y
CONFIG_XZ_DEC_ARMTHUMB=y
CONFIG_XZ_DEC_SPARC=y
CONFIG_XZ_DEC_MICROLZMA=y
CONFIG_XZ_DEC_BCJ=y
# CONFIG_XZ_DEC_TEST is not set
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_DECOMPRESS_XZ=y
CONFIG_DECOMPRESS_LZO=y
CONFIG_DECOMPRESS_LZ4=y
CONFIG_DECOMPRESS_ZSTD=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_REED_SOLOMON=y
CONFIG_REED_SOLOMON_ENC8=y
CONFIG_REED_SOLOMON_DEC8=y
CONFIG_REED_SOLOMON_DEC16=y
CONFIG_BCH=y
CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=y
CONFIG_TEXTSEARCH_BM=y
CONFIG_TEXTSEARCH_FSM=y
CONFIG_BTREE=y
CONFIG_INTERVAL_TREE=y
CONFIG_XARRAY_MULTI=y
CONFIG_ASSOCIATIVE_ARRAY=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT_MAP=y
CONFIG_HAS_DMA=y
CONFIG_DMA_OPS=y
CONFIG_NEED_SG_DMA_LENGTH=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
CONFIG_DMA_DECLARE_COHERENT=y
CONFIG_ARCH_HAS_FORCE_DMA_UNENCRYPTED=y
CONFIG_SWIOTLB=y
CONFIG_DMA_RESTRICTED_POOL=y
CONFIG_DMA_CMA=y
CONFIG_DMA_PERNUMA_CMA=y

#
# Default contiguous memory area size:
#
CONFIG_CMA_SIZE_MBYTES=0
CONFIG_CMA_SIZE_SEL_MBYTES=y
# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
# CONFIG_CMA_SIZE_SEL_MIN is not set
# CONFIG_CMA_SIZE_SEL_MAX is not set
CONFIG_CMA_ALIGNMENT=8
# CONFIG_DMA_API_DEBUG is not set
CONFIG_DMA_MAP_BENCHMARK=y
CONFIG_SGL_ALLOC=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_CPUMASK_OFFSTACK=y
# CONFIG_FORCE_NR_CPUS is not set
CONFIG_CPU_RMAP=y
CONFIG_DQL=y
CONFIG_GLOB=y
# CONFIG_GLOB_SELFTEST is not set
CONFIG_NLATTR=y
CONFIG_LRU_CACHE=y
CONFIG_CLZ_TAB=y
CONFIG_IRQ_POLL=y
CONFIG_MPILIB=y
CONFIG_SIGNATURE=y
CONFIG_DIMLIB=y
CONFIG_LIBFDT=y
CONFIG_OID_REGISTRY=y
CONFIG_UCS2_STRING=y
CONFIG_HAVE_GENERIC_VDSO=y
CONFIG_GENERIC_GETTIMEOFDAY=y
CONFIG_GENERIC_VDSO_TIME_NS=y
CONFIG_FONT_SUPPORT=y
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
CONFIG_FONT_6x11=y
CONFIG_FONT_7x14=y
CONFIG_FONT_PEARL_8x8=y
CONFIG_FONT_ACORN_8x8=y
CONFIG_FONT_MINI_4x6=y
CONFIG_FONT_6x10=y
CONFIG_FONT_10x18=y
CONFIG_FONT_SUN8x16=y
CONFIG_FONT_SUN12x22=y
CONFIG_FONT_TER16x32=y
CONFIG_FONT_6x8=y
CONFIG_SG_POOL=y
CONFIG_ARCH_HAS_PMEM_API=y
CONFIG_MEMREGION=y
CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y
CONFIG_ARCH_HAS_COPY_MC=y
CONFIG_ARCH_STACKWALK=y
CONFIG_STACKDEPOT=y
CONFIG_REF_TRACKER=y
CONFIG_SBITMAP=y
CONFIG_PARMAN=y
CONFIG_OBJAGG=y
# end of Library routines

CONFIG_PLDMFW=y
CONFIG_ASN1_ENCODER=y
CONFIG_POLYNOMIAL=y

#
# Kernel hacking
#

#
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
CONFIG_PRINTK_CALLER=y
CONFIG_STACKTRACE_BUILD_ID=y
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
CONFIG_CONSOLE_LOGLEVEL_QUIET=4
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_DYNAMIC_DEBUG=y
CONFIG_DYNAMIC_DEBUG_CORE=y
CONFIG_SYMBOLIC_ERRNAME=y
CONFIG_DEBUG_BUGVERBOSE=y
# end of printk and dmesg options

CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_MISC=y

#
# Compile-time checks and compiler options
#
CONFIG_DEBUG_INFO=y
CONFIG_AS_HAS_NON_CONST_LEB128=y
# CONFIG_DEBUG_INFO_NONE is not set
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
# CONFIG_DEBUG_INFO_DWARF4 is not set
# CONFIG_DEBUG_INFO_DWARF5 is not set
# CONFIG_DEBUG_INFO_REDUCED is not set
# CONFIG_DEBUG_INFO_SPLIT is not set
# CONFIG_DEBUG_INFO_BTF is not set
CONFIG_PAHOLE_HAS_SPLIT_BTF=y
CONFIG_PAHOLE_HAS_BTF_TAG=y
# CONFIG_GDB_SCRIPTS is not set
CONFIG_FRAME_WARN=2048
CONFIG_STRIP_ASM_SYMS=y
CONFIG_HEADERS_INSTALL=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B=y
CONFIG_OBJTOOL=y
CONFIG_NOINSTR_VALIDATION=y
CONFIG_VMLINUX_MAP=y
CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
# end of Compile-time checks and compiler options

#
# Generic Kernel Debugging Instruments
#
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE=""
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_FS_ALLOW_ALL=y
# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set
# CONFIG_DEBUG_FS_ALLOW_NONE is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y
# CONFIG_UBSAN is not set
CONFIG_HAVE_ARCH_KCSAN=y
CONFIG_HAVE_KCSAN_COMPILER=y
# CONFIG_KCSAN is not set
# end of Generic Kernel Debugging Instruments

#
# Networking Debugging
#
CONFIG_NET_DEV_REFCNT_TRACKER=y
CONFIG_NET_NS_REFCNT_TRACKER=y
CONFIG_DEBUG_NET=y
# end of Networking Debugging

#
# Memory Debugging
#
CONFIG_PAGE_EXTENSION=y
# CONFIG_DEBUG_PAGEALLOC is not set
CONFIG_SLUB_DEBUG=y
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_PAGE_OWNER is not set
CONFIG_PAGE_TABLE_CHECK=y
CONFIG_PAGE_TABLE_CHECK_ENFORCED=y
CONFIG_PAGE_POISONING=y
CONFIG_DEBUG_PAGE_REF=y
# CONFIG_DEBUG_RODATA_TEST is not set
CONFIG_ARCH_HAS_DEBUG_WX=y
CONFIG_DEBUG_WX=y
CONFIG_GENERIC_PTDUMP=y
CONFIG_PTDUMP_CORE=y
CONFIG_PTDUMP_DEBUGFS=y
CONFIG_DEBUG_OBJECTS=y
# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
CONFIG_DEBUG_OBJECTS_FREE=y
CONFIG_DEBUG_OBJECTS_TIMERS=y
CONFIG_DEBUG_OBJECTS_WORK=y
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
CONFIG_SHRINKER_DEBUG=y
CONFIG_HAVE_DEBUG_KMEMLEAK=y
# CONFIG_DEBUG_KMEMLEAK is not set
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_SCHED_STACK_END_CHECK=y
CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
CONFIG_DEBUG_VM_IRQSOFF=y
CONFIG_DEBUG_VM=y
CONFIG_DEBUG_VM_MAPLE_TREE=y
CONFIG_DEBUG_VM_RB=y
CONFIG_DEBUG_VM_PGFLAGS=y
CONFIG_DEBUG_VM_PGTABLE=y
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
CONFIG_DEBUG_VIRTUAL=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=y
CONFIG_DEBUG_PER_CPU_MAPS=y
CONFIG_HAVE_ARCH_KASAN=y
CONFIG_HAVE_ARCH_KASAN_VMALLOC=y
CONFIG_CC_HAS_KASAN_GENERIC=y
CONFIG_CC_HAS_KASAN_SW_TAGS=y
CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
# CONFIG_KASAN is not set
CONFIG_HAVE_ARCH_KFENCE=y
# CONFIG_KFENCE is not set
CONFIG_HAVE_ARCH_KMSAN=y
CONFIG_HAVE_KMSAN_COMPILER=y
# CONFIG_KMSAN is not set
# end of Memory Debugging

CONFIG_DEBUG_SHIRQ=y

#
# Debug Oops, Lockups and Hangs
#
CONFIG_PANIC_ON_OOPS=y
CONFIG_PANIC_ON_OOPS_VALUE=1
CONFIG_PANIC_TIMEOUT=0
CONFIG_LOCKUP_DETECTOR=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
CONFIG_HARDLOCKUP_DETECTOR_PERF=y
CONFIG_HARDLOCKUP_CHECK_TIMESTAMP=y
CONFIG_HARDLOCKUP_DETECTOR=y
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=480
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
CONFIG_WQ_WATCHDOG=y
# CONFIG_TEST_LOCKUP is not set
# end of Debug Oops, Lockups and Hangs

#
# Scheduler Debugging
#
CONFIG_SCHED_DEBUG=y
CONFIG_SCHED_INFO=y
CONFIG_SCHEDSTATS=y
# end of Scheduler Debugging

CONFIG_DEBUG_TIMEKEEPING=y

#
# Lock Debugging (spinlocks, mutexes, etc...)
#
CONFIG_LOCK_DEBUGGING_SUPPORT=y
# CONFIG_PROVE_LOCKING is not set
CONFIG_LOCK_STAT=y
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
CONFIG_DEBUG_RWSEMS=y
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_LOCKDEP=y
CONFIG_LOCKDEP_BITS=15
CONFIG_LOCKDEP_CHAINS_BITS=16
CONFIG_LOCKDEP_STACK_TRACE_BITS=19
CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS=14
CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS=12
# CONFIG_DEBUG_LOCKDEP is not set
CONFIG_DEBUG_ATOMIC_SLEEP=y
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_LOCK_TORTURE_TEST is not set
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_SCF_TORTURE_TEST is not set
CONFIG_CSD_LOCK_WAIT_DEBUG=y
# end of Lock Debugging (spinlocks, mutexes, etc...)

CONFIG_TRACE_IRQFLAGS=y
CONFIG_TRACE_IRQFLAGS_NMI=y
CONFIG_DEBUG_IRQFLAGS=y
CONFIG_STACKTRACE=y
# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_KOBJECT_RELEASE is not set

#
# Debug kernel data structures
#
CONFIG_DEBUG_LIST=y
CONFIG_DEBUG_PLIST=y
CONFIG_DEBUG_SG=y
CONFIG_DEBUG_NOTIFIERS=y
CONFIG_BUG_ON_DATA_CORRUPTION=y
CONFIG_DEBUG_MAPLE_TREE=y
# end of Debug kernel data structures

CONFIG_DEBUG_CREDENTIALS=y

#
# RCU Debugging
#
# CONFIG_RCU_SCALE_TEST is not set
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_RCU_REF_SCALE_TEST is not set
CONFIG_RCU_CPU_STALL_TIMEOUT=21
CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0
CONFIG_RCU_TRACE=y
CONFIG_RCU_EQS_DEBUG=y
# end of RCU Debugging

CONFIG_DEBUG_WQ_FORCE_RR_CPU=y
CONFIG_CPU_HOTPLUG_STATE_CONTROL=y
CONFIG_LATENCYTOP=y
CONFIG_USER_STACKTRACE_SUPPORT=y
CONFIG_NOP_TRACER=y
CONFIG_HAVE_RETHOOK=y
CONFIG_RETHOOK=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y
CONFIG_HAVE_DYNAMIC_FTRACE_NO_PATCHABLE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_HAVE_FENTRY=y
CONFIG_HAVE_OBJTOOL_MCOUNT=y
CONFIG_HAVE_C_RECORDMCOUNT=y
CONFIG_HAVE_BUILDTIME_MCOUNT_SORT=y
CONFIG_BUILDTIME_MCOUNT_SORT=y
CONFIG_TRACER_MAX_TRACE=y
CONFIG_TRACE_CLOCK=y
CONFIG_RING_BUFFER=y
CONFIG_EVENT_TRACING=y
CONFIG_CONTEXT_SWITCH_TRACER=y
CONFIG_RING_BUFFER_ALLOW_SWAP=y
CONFIG_PREEMPTIRQ_TRACEPOINTS=y
CONFIG_TRACING=y
CONFIG_GENERIC_TRACER=y
CONFIG_TRACING_SUPPORT=y
CONFIG_FTRACE=y
CONFIG_BOOTTIME_TRACING=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
CONFIG_DYNAMIC_FTRACE_WITH_ARGS=y
CONFIG_FPROBE=y
CONFIG_FUNCTION_PROFILER=y
CONFIG_STACK_TRACER=y
CONFIG_IRQSOFF_TRACER=y
CONFIG_SCHED_TRACER=y
CONFIG_HWLAT_TRACER=y
CONFIG_OSNOISE_TRACER=y
CONFIG_TIMERLAT_TRACER=y
CONFIG_MMIOTRACE=y
CONFIG_FTRACE_SYSCALLS=y
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y
CONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
CONFIG_KPROBE_EVENTS=y
CONFIG_KPROBE_EVENTS_ON_NOTRACE=y
CONFIG_UPROBE_EVENTS=y
CONFIG_BPF_EVENTS=y
CONFIG_DYNAMIC_EVENTS=y
CONFIG_PROBE_EVENTS=y
CONFIG_BPF_KPROBE_OVERRIDE=y
CONFIG_FTRACE_MCOUNT_RECORD=y
CONFIG_FTRACE_MCOUNT_USE_OBJTOOL=y
CONFIG_TRACING_MAP=y
CONFIG_SYNTH_EVENTS=y
CONFIG_HIST_TRIGGERS=y
CONFIG_TRACE_EVENT_INJECT=y
CONFIG_TRACEPOINT_BENCHMARK=y
CONFIG_RING_BUFFER_BENCHMARK=y
CONFIG_TRACE_EVAL_MAP_FILE=y
CONFIG_FTRACE_RECORD_RECURSION=y
CONFIG_FTRACE_RECORD_RECURSION_SIZE=128
CONFIG_RING_BUFFER_RECORD_RECURSION=y
CONFIG_GCOV_PROFILE_FTRACE=y
# CONFIG_FTRACE_STARTUP_TEST is not set
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS=y
# CONFIG_MMIOTRACE_TEST is not set
# CONFIG_PREEMPTIRQ_DELAY_TEST is not set
# CONFIG_SYNTH_EVENT_GEN_TEST is not set
# CONFIG_KPROBE_EVENT_GEN_TEST is not set
CONFIG_HIST_TRIGGERS_DEBUG=y
CONFIG_DA_MON_EVENTS=y
CONFIG_DA_MON_EVENTS_ID=y
CONFIG_RV=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_REACTORS=y
CONFIG_RV_REACT_PRINTK=y
CONFIG_RV_REACT_PANIC=y
CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
CONFIG_SAMPLES=y
CONFIG_SAMPLE_AUXDISPLAY=y
CONFIG_SAMPLE_TRACE_EVENTS=m
CONFIG_SAMPLE_TRACE_CUSTOM_EVENTS=m
CONFIG_SAMPLE_TRACE_PRINTK=m
CONFIG_SAMPLE_FTRACE_DIRECT=m
CONFIG_SAMPLE_FTRACE_DIRECT_MULTI=m
CONFIG_SAMPLE_TRACE_ARRAY=m
CONFIG_SAMPLE_KOBJECT=y
CONFIG_SAMPLE_KPROBES=m
CONFIG_SAMPLE_KRETPROBES=m
CONFIG_SAMPLE_HW_BREAKPOINT=m
CONFIG_SAMPLE_FPROBE=m
CONFIG_SAMPLE_KFIFO=m
CONFIG_SAMPLE_RPMSG_CLIENT=m
CONFIG_SAMPLE_LIVEPATCH=m
CONFIG_SAMPLE_CONFIGFS=m
CONFIG_SAMPLE_CONNECTOR=m
CONFIG_SAMPLE_FANOTIFY_ERROR=y
CONFIG_SAMPLE_HIDRAW=y
CONFIG_SAMPLE_LANDLOCK=y
CONFIG_SAMPLE_PIDFD=y
CONFIG_SAMPLE_SECCOMP=y
CONFIG_SAMPLE_TIMER=y
CONFIG_SAMPLE_UHID=y
CONFIG_SAMPLE_VFIO_MDEV_MTTY=m
CONFIG_SAMPLE_VFIO_MDEV_MDPY=m
CONFIG_SAMPLE_VFIO_MDEV_MDPY_FB=m
CONFIG_SAMPLE_VFIO_MDEV_MBOCHS=m
CONFIG_SAMPLE_ANDROID_BINDERFS=y
CONFIG_SAMPLE_VFS=y
CONFIG_SAMPLE_INTEL_MEI=y
CONFIG_SAMPLE_WATCHDOG=y
CONFIG_SAMPLE_WATCH_QUEUE=y
CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y
CONFIG_HAVE_SAMPLE_FTRACE_DIRECT_MULTI=y
CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y
CONFIG_STRICT_DEVMEM=y
CONFIG_IO_STRICT_DEVMEM=y

#
# x86 Debugging
#
CONFIG_EARLY_PRINTK_USB=y
CONFIG_X86_VERBOSE_BOOTUP=y
CONFIG_EARLY_PRINTK=y
CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EFI_PGT_DUMP=y
CONFIG_DEBUG_TLBFLUSH=y
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
# CONFIG_X86_DECODER_SELFTEST is not set
CONFIG_IO_DELAY_0X80=y
# CONFIG_IO_DELAY_0XED is not set
# CONFIG_IO_DELAY_UDELAY is not set
# CONFIG_IO_DELAY_NONE is not set
CONFIG_DEBUG_BOOT_PARAMS=y
# CONFIG_CPA_DEBUG is not set
CONFIG_DEBUG_ENTRY=y
# CONFIG_DEBUG_NMI_SELFTEST is not set
CONFIG_X86_DEBUG_FPU=y
CONFIG_PUNIT_ATOM_DEBUG=y
CONFIG_UNWINDER_ORC=y
# CONFIG_UNWINDER_FRAME_POINTER is not set
# end of x86 Debugging

#
# Kernel Testing and Coverage
#
# CONFIG_KUNIT is not set
CONFIG_NOTIFIER_ERROR_INJECTION=y
CONFIG_PM_NOTIFIER_ERROR_INJECT=y
CONFIG_OF_RECONFIG_NOTIFIER_ERROR_INJECT=y
CONFIG_NETDEV_NOTIFIER_ERROR_INJECT=y
CONFIG_FUNCTION_ERROR_INJECTION=y
CONFIG_FAULT_INJECTION=y
CONFIG_FAILSLAB=y
CONFIG_FAIL_PAGE_ALLOC=y
CONFIG_FAULT_INJECTION_USERCOPY=y
CONFIG_FAIL_MAKE_REQUEST=y
CONFIG_FAIL_IO_TIMEOUT=y
CONFIG_FAIL_FUTEX=y
CONFIG_FAULT_INJECTION_DEBUG_FS=y
CONFIG_FAIL_FUNCTION=y
CONFIG_FAIL_MMC_REQUEST=y
CONFIG_FAIL_SUNRPC=y
CONFIG_ARCH_HAS_KCOV=y
CONFIG_CC_HAS_SANCOV_TRACE_PC=y
CONFIG_KCOV=y
CONFIG_KCOV_ENABLE_COMPARISONS=y
CONFIG_KCOV_INSTRUMENT_ALL=y
CONFIG_KCOV_IRQ_AREA_SIZE=0x40000
CONFIG_RUNTIME_TESTING_MENU=y
# CONFIG_LKDTM is not set
# CONFIG_TEST_MIN_HEAP is not set
# CONFIG_TEST_DIV64 is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_TEST_REF_TRACKER is not set
# CONFIG_RBTREE_TEST is not set
# CONFIG_REED_SOLOMON_TEST is not set
# CONFIG_INTERVAL_TREE_TEST is not set
# CONFIG_PERCPU_TEST is not set
# CONFIG_ATOMIC64_SELFTEST is not set
# CONFIG_ASYNC_RAID6_TEST is not set
# CONFIG_TEST_HEXDUMP is not set
# CONFIG_STRING_SELFTEST is not set
# CONFIG_TEST_STRING_HELPERS is not set
# CONFIG_TEST_STRSCPY is not set
# CONFIG_TEST_KSTRTOX is not set
# CONFIG_TEST_PRINTF is not set
# CONFIG_TEST_SCANF is not set
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_UUID is not set
# CONFIG_TEST_XARRAY is not set
CONFIG_TEST_MAPLE_TREE=y
# CONFIG_TEST_RHASHTABLE is not set
# CONFIG_TEST_SIPHASH is not set
# CONFIG_TEST_IDA is not set
# CONFIG_TEST_PARMAN is not set
# CONFIG_TEST_LKM is not set
# CONFIG_TEST_BITOPS is not set
# CONFIG_TEST_VMALLOC is not set
# CONFIG_TEST_USER_COPY is not set
# CONFIG_TEST_BPF is not set
# CONFIG_TEST_BLACKHOLE_DEV is not set
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_SYSCTL is not set
# CONFIG_TEST_UDELAY is not set
# CONFIG_TEST_STATIC_KEYS is not set
CONFIG_TEST_DYNAMIC_DEBUG=y
# CONFIG_TEST_KMOD is not set
# CONFIG_TEST_DEBUG_VIRTUAL is not set
# CONFIG_TEST_MEMCAT_P is not set
# CONFIG_TEST_LIVEPATCH is not set
# CONFIG_TEST_OBJAGG is not set
# CONFIG_TEST_MEMINIT is not set
# CONFIG_TEST_HMM is not set
# CONFIG_TEST_FREE_PAGES is not set
# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set
CONFIG_ARCH_USE_MEMTEST=y
CONFIG_MEMTEST=y
CONFIG_HYPERV_TESTING=y
# end of Kernel Testing and Coverage

#
# Rust hacking
#
# end of Rust hacking
# end of Kernel hacking

From colin.foster at in-advantage.com  Thu Dec 22 12:08:30 2022
From: colin.foster at in-advantage.com (Colin Foster)
Date: Thu, 22 Dec 2022 12:08:30 -0800
Subject: [PATCH v5 net-next 04/10] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <Y5d5F9IODF4xhcps@COLIN-DESKTOP1.localdomain>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
 <20221210033033.662553-5-colin.foster@in-advantage.com>
 <1df417b5-a924-33d4-a302-eb526f7124b4@arinc9.com>
 <Y5TJw+zcEDf2ItZ5@euler>
 <c1e40b58-4459-2929-64f3-3e20f36f6947@arinc9.com>
 <20221212165147.GA1092706-robh@kernel.org>
 <Y5d5F9IODF4xhcps@COLIN-DESKTOP1.localdomain>
Message-ID: <Y6S5Ple5SURq0QSU@colin-ia-desktop>

On Mon, Dec 12, 2022 at 10:55:19AM -0800, Colin Foster wrote:
> Hi Rob, Ar?n?,
> 
> On Mon, Dec 12, 2022 at 10:51:47AM -0600, Rob Herring wrote:
> > On Mon, Dec 12, 2022 at 12:28:06PM +0300, Ar?n? ?NAL wrote:
> > > On 10.12.2022 21:02, Colin Foster wrote:
> > > > Hi Ar?n?,
> > > > On Sat, Dec 10, 2022 at 07:24:42PM +0300, Ar?n? ?NAL wrote:
> > > > > On 10.12.2022 06:30, Colin Foster wrote:
> > > > --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> > > > +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yam
> > > > @@ -156,8 +156,7 @@ patternProperties:
> > > > 
> > > >       patternProperties:
> > > >         "^(ethernet-)?port@[0-9]+$":
> > > > -        type: object
> > > > -
> > > > +        $ref: dsa-port.yaml#
> > > >           properties:
> > > >             reg:
> > > >               description:
> > > > @@ -165,7 +164,6 @@ patternProperties:
> > > >                 for user ports.
> > > > 
> > > >           allOf:
> > > > -          - $ref: dsa-port.yaml#
> > > >             - if:
> > > >                 required: [ ethernet ]
> > > >               then:
> > > > 
> > > > 
> > > > 
> > > > This one has me [still] scratching my head...
> > > 
> > > Right there with you. In addition to this, having or deleting type object
> > > on/from "^(ethernet-)?ports$" and "^(ethernet-)?port@[0-9]+$" on dsa.yaml
> > > doesn't cause any warnings (checked with make dt_binding_check
> > > DT_SCHEMA_FILES=net/dsa) which makes me question why it's there in the first
> > > place.
> > 
> > 
> > That check probably doesn't consider an ref being under an 'allOf'. 
> > Perhaps what is missing in understanding is every schema at the 
> > top-level has an implicit 'type: object'. But nothing is ever implicit 
> > in json-schema which will silently ignore keywords which don't make 
> > sense for an instance type. Instead of a bunch of boilerplate, the 
> > processed schema has 'type' added in lots of cases such as this one.
> > 
> > Rob
> 
> What do you suggest on this set? I think this is the only outstanding
> issue, and Jakub brought up the possibility of applying end of today
> (maybe 5-6 hours from now in the US).
> 
> It seems like there's an issue with the dt_bindings_check that causes
> the "allOf: $ref" to throw a warning when it shouldn't. So removing the
> "type: object" was supposed to be correct, but throws warnings.
> 
> It seems like keeping this patch as-is and updating it when the check
> gets fixed might be an acceptable path, but I'd understand if you
> disagree and prefer a resubmission.

Heads up on my plan for this. I plan to re-submit this on Monday after
the merge window with the change where I move the $ref: dsa-port.yaml#
to outside the allOf: section, and remove the object type as the above
code suggests. Hopefully that's the right step to take.


From robh at kernel.org  Thu Dec 22 12:32:24 2022
From: robh at kernel.org (Rob Herring)
Date: Thu, 22 Dec 2022 14:32:24 -0600
Subject: [PATCH v1 2/6] dt-bindings: clock: mediatek,mt8186-fhctl:
 Support MT6795, MT8173/92/95
In-Reply-To: <20221222155147.158837-3-angelogioacchino.delregno@collabora.com>
References: <20221222155147.158837-1-angelogioacchino.delregno@collabora.com>
 <20221222155147.158837-3-angelogioacchino.delregno@collabora.com>
Message-ID: <167174113268.2072682.12279599468554479055.robh@kernel.org>


On Thu, 22 Dec 2022 16:51:43 +0100, AngeloGioacchino Del Regno wrote:
> MT6795, MT8173, MT8192 and MT8195 support Frequency Hopping: add the
> compatibles for them.
> 
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> ---
>  .../devicetree/bindings/clock/mediatek,mt8186-fhctl.yaml   | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 

Acked-by: Rob Herring <robh at kernel.org>


From sean.anderson at seco.com  Thu Dec 22 13:24:09 2022
From: sean.anderson at seco.com (Sean Anderson)
Date: Thu, 22 Dec 2022 16:24:09 -0500
Subject: [PATCH 0/2] drm: Add component_match_add_of and convert users of
 drm_of_component_match_add
In-Reply-To: <2db73405-464f-6980-a7c1-7fe232611331@arm.com>
References: <20221103182222.2247724-1-sean.anderson@seco.com>
 <68562aca-5256-9e4b-bcd5-983e43408a7d@seco.com>
 <2db73405-464f-6980-a7c1-7fe232611331@arm.com>
Message-ID: <56310773-a062-0e48-28f7-6d2c5d035fee@seco.com>

Hi Robin,

On 12/16/22 12:41, Robin Murphy wrote:
> On 2022-12-16 17:08, Sean Anderson wrote:
>> On 11/3/22 14:22, Sean Anderson wrote:
>>> This series adds a new function component_match_add_of to simplify the
>>> common case of calling component_match_add_release with
>>> component_release_of and component_compare_of. There is already
>>> drm_of_component_match_add, which allows for a custom compare function.
>>> However, all existing users just use component_compare_of (or an
>>> equivalent).
>>>
>>> I can split the second commit up if that is easier to review.
>>>
>>>
>>> Sean Anderson (2):
>>> ?? component: Add helper for device nodes
>>> ?? drm: Convert users of drm_of_component_match_add to
>>> ???? component_match_add_of
>>>
>>> ? .../gpu/drm/arm/display/komeda/komeda_drv.c?? |? 6 ++--
>>> ? drivers/gpu/drm/arm/hdlcd_drv.c?????????????? |? 9 +-----
>>> ? drivers/gpu/drm/arm/malidp_drv.c????????????? | 11 +------
>>> ? drivers/gpu/drm/armada/armada_drv.c?????????? | 10 ++++---
>>> ? drivers/gpu/drm/drm_of.c????????????????????? | 29 +++----------------
>>> ? drivers/gpu/drm/etnaviv/etnaviv_drv.c???????? |? 4 +--
>>> ? .../gpu/drm/hisilicon/kirin/kirin_drm_drv.c?? |? 3 +-
>>> ? drivers/gpu/drm/ingenic/ingenic-drm-drv.c???? |? 3 +-
>>> ? drivers/gpu/drm/mediatek/mtk_drm_drv.c??????? |? 4 +--
>>> ? drivers/gpu/drm/msm/msm_drv.c???????????????? | 14 ++++-----
>>> ? drivers/gpu/drm/sti/sti_drv.c???????????????? |? 3 +-
>>> ? drivers/gpu/drm/sun4i/sun4i_drv.c???????????? |? 3 +-
>>> ? drivers/gpu/drm/tilcdc/tilcdc_external.c????? | 10 ++-----
>>> ? drivers/iommu/mtk_iommu.c???????????????????? |? 3 +-
>>> ? drivers/iommu/mtk_iommu_v1.c????????????????? |? 3 +-
>>> ? include/drm/drm_of.h????????????????????????? | 12 --------
>>> ? include/linux/component.h???????????????????? |? 9 ++++++
>>> ? sound/soc/codecs/wcd938x.c??????????????????? |? 6 ++--
>>> ? 18 files changed, 46 insertions(+), 96 deletions(-)
>>>
>>
>> ping?
>>
>> Should I send a v2 broken up like Mark suggested?
> 
> FWIW you'll need to rebase the IOMMU changes on 6.2-rc1 anyway - mtk_iommu stops using component_match_add_release() at all.
> 
> Thanks,
> Robin.

I am preparing v2 of this series, but I don't see these changes on
drm-next, which seems to have been updated to at least 6.2-rc1. I tried
searching for these changes on lore [1], but I don't see them there
either. Do you have a commit hash/lore link for these changes?

--Sean

[1] https://lore.kernel.org/all/?q=dfn%3Adrivers%2Fiommu%2Fmtk_iommu.c+b%3Acomponent


From sean.anderson at seco.com  Thu Dec 22 15:37:56 2022
From: sean.anderson at seco.com (Sean Anderson)
Date: Thu, 22 Dec 2022 18:37:56 -0500
Subject: [PATCH v2 0/3] drm: Add component_match_add_of and convert users of drm_of_component_match_add
Message-ID: <20221222233759.1934852-1-sean.anderson@seco.com>

This series adds a new function component_match_add_of to simplify the
common case of calling component_match_add_release with
component_release_of and component_compare_of. There is already
drm_of_component_match_add, which allows for a custom compare function.
However, all existing users just use component_compare_of (or an
equivalent).

Changes in v2:
- Split off conversion from helper addition
- Rebased onto drm/drm-next

Sean Anderson (3):
  component: Add helper for device nodes
  iommu/sound: Use component_match_add_of helper
  drm: Convert users of drm_of_component_match_add to
    component_match_add_of

 .../gpu/drm/arm/display/komeda/komeda_drv.c   |  6 ++--
 drivers/gpu/drm/arm/hdlcd_drv.c               |  9 +-----
 drivers/gpu/drm/arm/malidp_drv.c              | 11 +------
 drivers/gpu/drm/armada/armada_drv.c           | 10 ++++---
 drivers/gpu/drm/drm_of.c                      | 29 +++----------------
 drivers/gpu/drm/etnaviv/etnaviv_drv.c         |  4 +--
 .../gpu/drm/hisilicon/kirin/kirin_drm_drv.c   |  3 +-
 drivers/gpu/drm/ingenic/ingenic-drm-drv.c     |  3 +-
 drivers/gpu/drm/mediatek/mtk_drm_drv.c        |  4 +--
 drivers/gpu/drm/msm/msm_drv.c                 | 14 ++++-----
 drivers/gpu/drm/sti/sti_drv.c                 |  3 +-
 drivers/gpu/drm/sun4i/sun4i_drv.c             |  3 +-
 drivers/gpu/drm/tilcdc/tilcdc_external.c      | 10 ++-----
 drivers/iommu/mtk_iommu.c                     |  3 +-
 drivers/iommu/mtk_iommu_v1.c                  |  3 +-
 include/drm/drm_of.h                          | 12 --------
 include/linux/component.h                     |  9 ++++++
 sound/soc/codecs/wcd938x.c                    |  6 ++--
 18 files changed, 46 insertions(+), 96 deletions(-)

-- 
2.35.1.1320.gc452695387.dirty



From sean.anderson at seco.com  Thu Dec 22 15:37:58 2022
From: sean.anderson at seco.com (Sean Anderson)
Date: Thu, 22 Dec 2022 18:37:58 -0500
Subject: [PATCH v2 2/3] iommu/sound: Use component_match_add_of helper
In-Reply-To: <20221222233759.1934852-1-sean.anderson@seco.com>
References: <20221222233759.1934852-1-sean.anderson@seco.com>
Message-ID: <20221222233759.1934852-3-sean.anderson@seco.com>

Convert users of component_match_add_release with component_release_of
and component_compare_of to component_match_add_of.

Signed-off-by: Sean Anderson <sean.anderson at seco.com>
Acked-by: Mark Brown <broonie at kernel.org>
---

Changes in v2:
- Split off from helper addition

 drivers/iommu/mtk_iommu.c    | 3 +--
 drivers/iommu/mtk_iommu_v1.c | 3 +--
 sound/soc/codecs/wcd938x.c   | 6 ++----
 3 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index 2ab2ecfe01f8..483b7a9e4410 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -1079,8 +1079,7 @@ static int mtk_iommu_mm_dts_parse(struct device *dev, struct component_match **m
 		}
 		data->larb_imu[id].dev = &plarbdev->dev;
 
-		component_match_add_release(dev, match, component_release_of,
-					    component_compare_of, larbnode);
+		component_match_add_of(dev, match, larbnode);
 	}
 
 	/* Get smi-(sub)-common dev from the last larb. */
diff --git a/drivers/iommu/mtk_iommu_v1.c b/drivers/iommu/mtk_iommu_v1.c
index 6e0e65831eb7..fb09ed6bf550 100644
--- a/drivers/iommu/mtk_iommu_v1.c
+++ b/drivers/iommu/mtk_iommu_v1.c
@@ -672,8 +672,7 @@ static int mtk_iommu_v1_probe(struct platform_device *pdev)
 		}
 		data->larb_imu[i].dev = &plarbdev->dev;
 
-		component_match_add_release(dev, &match, component_release_of,
-					    component_compare_of, larbnode);
+		component_match_add_of(dev, &match, larbnode);
 	}
 
 	platform_set_drvdata(pdev, data);
diff --git a/sound/soc/codecs/wcd938x.c b/sound/soc/codecs/wcd938x.c
index aca06a4026f3..2f8444e54083 100644
--- a/sound/soc/codecs/wcd938x.c
+++ b/sound/soc/codecs/wcd938x.c
@@ -4474,8 +4474,7 @@ static int wcd938x_add_slave_components(struct wcd938x_priv *wcd938x,
 	}
 
 	of_node_get(wcd938x->rxnode);
-	component_match_add_release(dev, matchptr, component_release_of,
-				    component_compare_of, wcd938x->rxnode);
+	component_match_add_of(dev, matchptr, wcd938x->rxnode);
 
 	wcd938x->txnode = of_parse_phandle(np, "qcom,tx-device", 0);
 	if (!wcd938x->txnode) {
@@ -4483,8 +4482,7 @@ static int wcd938x_add_slave_components(struct wcd938x_priv *wcd938x,
 		return -ENODEV;
 	}
 	of_node_get(wcd938x->txnode);
-	component_match_add_release(dev, matchptr, component_release_of,
-				    component_compare_of, wcd938x->txnode);
+	component_match_add_of(dev, matchptr, wcd938x->txnode);
 	return 0;
 }
 
-- 
2.35.1.1320.gc452695387.dirty



From sean.anderson at seco.com  Thu Dec 22 15:37:59 2022
From: sean.anderson at seco.com (Sean Anderson)
Date: Thu, 22 Dec 2022 18:37:59 -0500
Subject: [PATCH v2 3/3] drm: Convert users of drm_of_component_match_add to component_match_add_of
In-Reply-To: <20221222233759.1934852-1-sean.anderson@seco.com>
References: <20221222233759.1934852-1-sean.anderson@seco.com>
Message-ID: <20221222233759.1934852-4-sean.anderson@seco.com>

Every user of this function either uses component_compare_of or
something equivalent. Most of them immediately put the device node as
well. Convert these users to component_match_add_of and remove
drm_of_component_match_add.

Signed-off-by: Sean Anderson <sean.anderson at seco.com>
Acked-by: Jyri Sarha <jyri.sarha?@iki.fi>
Tested-by: Jyri Sarha <jyri.sarha at iki.fi>
---

(no changes since v1)

 .../gpu/drm/arm/display/komeda/komeda_drv.c   |  6 ++--
 drivers/gpu/drm/arm/hdlcd_drv.c               |  9 +-----
 drivers/gpu/drm/arm/malidp_drv.c              | 11 +------
 drivers/gpu/drm/armada/armada_drv.c           | 10 ++++---
 drivers/gpu/drm/drm_of.c                      | 29 +++----------------
 drivers/gpu/drm/etnaviv/etnaviv_drv.c         |  4 +--
 .../gpu/drm/hisilicon/kirin/kirin_drm_drv.c   |  3 +-
 drivers/gpu/drm/ingenic/ingenic-drm-drv.c     |  3 +-
 drivers/gpu/drm/mediatek/mtk_drm_drv.c        |  4 +--
 drivers/gpu/drm/msm/msm_drv.c                 | 14 ++++-----
 drivers/gpu/drm/sti/sti_drv.c                 |  3 +-
 drivers/gpu/drm/sun4i/sun4i_drv.c             |  3 +-
 drivers/gpu/drm/tilcdc/tilcdc_external.c      | 10 ++-----
 include/drm/drm_of.h                          | 12 --------
 14 files changed, 33 insertions(+), 88 deletions(-)

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_drv.c b/drivers/gpu/drm/arm/display/komeda/komeda_drv.c
index 3f4e719eebd8..e3bfc72c378f 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_drv.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_drv.c
@@ -103,10 +103,8 @@ static void komeda_add_slave(struct device *master,
 	struct device_node *remote;
 
 	remote = of_graph_get_remote_node(np, port, endpoint);
-	if (remote) {
-		drm_of_component_match_add(master, match, component_compare_of, remote);
-		of_node_put(remote);
-	}
+	if (remote)
+		component_match_add_of(master, match, remote);
 }
 
 static int komeda_platform_probe(struct platform_device *pdev)
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
index 7043d1c9ed8f..fa37ca10c80b 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.c
+++ b/drivers/gpu/drm/arm/hdlcd_drv.c
@@ -353,11 +353,6 @@ static const struct component_master_ops hdlcd_master_ops = {
 	.unbind		= hdlcd_drm_unbind,
 };
 
-static int compare_dev(struct device *dev, void *data)
-{
-	return dev->of_node == data;
-}
-
 static int hdlcd_probe(struct platform_device *pdev)
 {
 	struct device_node *port;
@@ -368,9 +363,7 @@ static int hdlcd_probe(struct platform_device *pdev)
 	if (!port)
 		return -ENODEV;
 
-	drm_of_component_match_add(&pdev->dev, &match, compare_dev, port);
-	of_node_put(port);
-
+	component_match_add_of(&pdev->dev, &match, port);
 	return component_master_add_with_match(&pdev->dev, &hdlcd_master_ops,
 					       match);
 }
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index 589c1c66a6dc..3a49c29ba5b8 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -909,13 +909,6 @@ static const struct component_master_ops malidp_master_ops = {
 	.unbind = malidp_unbind,
 };
 
-static int malidp_compare_dev(struct device *dev, void *data)
-{
-	struct device_node *np = data;
-
-	return dev->of_node == np;
-}
-
 static int malidp_platform_probe(struct platform_device *pdev)
 {
 	struct device_node *port;
@@ -929,9 +922,7 @@ static int malidp_platform_probe(struct platform_device *pdev)
 	if (!port)
 		return -ENODEV;
 
-	drm_of_component_match_add(&pdev->dev, &match, malidp_compare_dev,
-				   port);
-	of_node_put(port);
+	component_match_add_of(&pdev->dev, &match, port);
 	return component_master_add_with_match(&pdev->dev, &malidp_master_ops,
 					       match);
 }
diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c
index 0643887800b4..c0211ad7a45d 100644
--- a/drivers/gpu/drm/armada/armada_drv.c
+++ b/drivers/gpu/drm/armada/armada_drv.c
@@ -184,10 +184,12 @@ static void armada_add_endpoints(struct device *dev,
 
 	for_each_endpoint_of_node(dev_node, ep) {
 		remote = of_graph_get_remote_port_parent(ep);
-		if (remote && of_device_is_available(remote))
-			drm_of_component_match_add(dev, match, component_compare_of,
-						   remote);
-		of_node_put(remote);
+		if (remote) {
+			if (of_device_is_available(remote))
+				component_match_add_of(dev, match, remote);
+			else
+				of_node_put(remote);
+		}
 	}
 }
 
diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c
index 7bbcb999bb75..0a474729ddf6 100644
--- a/drivers/gpu/drm/drm_of.c
+++ b/drivers/gpu/drm/drm_of.c
@@ -78,24 +78,6 @@ uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
 }
 EXPORT_SYMBOL(drm_of_find_possible_crtcs);
 
-/**
- * drm_of_component_match_add - Add a component helper OF node match rule
- * @master: master device
- * @matchptr: component match pointer
- * @compare: compare function used for matching component
- * @node: of_node
- */
-void drm_of_component_match_add(struct device *master,
-				struct component_match **matchptr,
-				int (*compare)(struct device *, void *),
-				struct device_node *node)
-{
-	of_node_get(node);
-	component_match_add_release(master, matchptr, component_release_of,
-				    compare, node);
-}
-EXPORT_SYMBOL_GPL(drm_of_component_match_add);
-
 /**
  * drm_of_component_probe - Generic probe function for a component based master
  * @dev: master device containing the OF node
@@ -130,10 +112,9 @@ int drm_of_component_probe(struct device *dev,
 			break;
 
 		if (of_device_is_available(port->parent))
-			drm_of_component_match_add(dev, &match, compare_of,
-						   port);
-
-		of_node_put(port);
+			component_match_add_of(dev, &match, port);
+		else
+			of_node_put(port);
 	}
 
 	if (i == 0) {
@@ -171,9 +152,7 @@ int drm_of_component_probe(struct device *dev,
 				continue;
 			}
 
-			drm_of_component_match_add(dev, &match, compare_of,
-						   remote);
-			of_node_put(remote);
+			component_match_add_of(dev, &match, remote);
 		}
 		of_node_put(port);
 	}
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
index 1d2b4fb4bcf8..4a0dba34a6e7 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
@@ -590,8 +590,8 @@ static int etnaviv_pdev_probe(struct platform_device *pdev)
 			if (!first_node)
 				first_node = core_node;
 
-			drm_of_component_match_add(&pdev->dev, &match,
-						   component_compare_of, core_node);
+			of_node_get(core_node);
+			component_match_add_of(&pdev->dev, &match, core_node);
 		}
 	} else {
 		char **names = dev->platform_data;
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
index 9c5d49bf40c9..3ee277615c39 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
@@ -273,8 +273,7 @@ static int kirin_drm_platform_probe(struct platform_device *pdev)
 	if (!remote)
 		return -ENODEV;
 
-	drm_of_component_match_add(dev, &match, component_compare_of, remote);
-	of_node_put(remote);
+	component_match_add_of(dev, &match, remote);
 
 	return component_master_add_with_match(dev, &kirin_drm_ops, match);
 }
diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
index 3d5af44bf92d..d0c87175dec4 100644
--- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
+++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
@@ -1444,8 +1444,7 @@ static int ingenic_drm_probe(struct platform_device *pdev)
 	if (!np)
 		return ingenic_drm_bind(dev, false);
 
-	drm_of_component_match_add(dev, &match, component_compare_of, np);
-	of_node_put(np);
+	component_match_add_of(dev, &match, np);
 
 	return component_master_add_with_match(dev, &ingenic_master_ops, match);
 }
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index cd5b18ef7951..abead814bfdc 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -787,8 +787,8 @@ static int mtk_drm_probe(struct platform_device *pdev)
 		    comp_type == MTK_DSI) {
 			dev_info(dev, "Adding component match for %pOF\n",
 				 node);
-			drm_of_component_match_add(dev, &match, component_compare_of,
-						   node);
+			of_node_get(node);
+			component_match_add_of(dev, &match, node);
 		}
 
 		ret = mtk_ddp_comp_init(node, &private->ddp_comp[comp_id], comp_id);
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 8b0b0ac74a6f..8ccf57def955 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -5,6 +5,7 @@
  * Author: Rob Clark <robdclark at gmail.com>
  */
 
+#include <linux/component.h>
 #include <linux/dma-mapping.h>
 #include <linux/fault-inject.h>
 #include <linux/kthread.h>
@@ -1156,10 +1157,9 @@ static int add_components_mdp(struct device *master_dev,
 			continue;
 
 		if (of_device_is_available(intf))
-			drm_of_component_match_add(master_dev, matchptr,
-						   component_compare_of, intf);
-
-		of_node_put(intf);
+			component_match_add_of(master_dev, matchptr, intf);
+		else
+			of_node_put(intf);
 	}
 
 	return 0;
@@ -1188,9 +1188,9 @@ static int add_gpu_components(struct device *dev,
 		return 0;
 
 	if (of_device_is_available(np))
-		drm_of_component_match_add(dev, matchptr, component_compare_of, np);
-
-	of_node_put(np);
+		component_match_add_of(dev, matchptr, np);
+	else
+		of_node_put(np);
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
index ef6a4e63198f..e3aae4574c75 100644
--- a/drivers/gpu/drm/sti/sti_drv.c
+++ b/drivers/gpu/drm/sti/sti_drv.c
@@ -238,8 +238,7 @@ static int sti_platform_probe(struct platform_device *pdev)
 	child_np = of_get_next_available_child(node, NULL);
 
 	while (child_np) {
-		drm_of_component_match_add(dev, &match, component_compare_of,
-					   child_np);
+		component_match_add_of(dev, &match, child_np);
 		child_np = of_get_next_available_child(node, child_np);
 	}
 
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index cc94efbbf2d4..9b3ddd82f1be 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -323,7 +323,8 @@ static int sun4i_drv_add_endpoints(struct device *dev,
 	     of_device_is_available(node))) {
 		/* Add current component */
 		DRM_DEBUG_DRIVER("Adding component %pOF\n", node);
-		drm_of_component_match_add(dev, match, component_compare_of, node);
+		of_node_get(node);
+		component_match_add_of(dev, match, node);
 		count++;
 	}
 
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.c b/drivers/gpu/drm/tilcdc/tilcdc_external.c
index 3b86d002ef62..0138ce02a64f 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_external.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_external.c
@@ -155,11 +155,6 @@ int tilcdc_attach_external_device(struct drm_device *ddev)
 	return ret;
 }
 
-static int dev_match_of(struct device *dev, void *data)
-{
-	return dev->of_node == data;
-}
-
 int tilcdc_get_external_components(struct device *dev,
 				   struct component_match **match)
 {
@@ -173,7 +168,8 @@ int tilcdc_get_external_components(struct device *dev,
 	}
 
 	if (match)
-		drm_of_component_match_add(dev, match, dev_match_of, node);
-	of_node_put(node);
+		component_match_add_of(dev, match, node);
+	else
+		of_node_put(node);
 	return 1;
 }
diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h
index 10ab58c40746..685c44dc1dae 100644
--- a/include/drm/drm_of.h
+++ b/include/drm/drm_of.h
@@ -33,10 +33,6 @@ uint32_t drm_of_crtc_port_mask(struct drm_device *dev,
 			    struct device_node *port);
 uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
 				    struct device_node *port);
-void drm_of_component_match_add(struct device *master,
-				struct component_match **matchptr,
-				int (*compare)(struct device *, void *),
-				struct device_node *node);
 int drm_of_component_probe(struct device *dev,
 			   int (*compare_of)(struct device *, void *),
 			   const struct component_master_ops *m_ops);
@@ -69,14 +65,6 @@ static inline uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
 	return 0;
 }
 
-static inline void
-drm_of_component_match_add(struct device *master,
-			   struct component_match **matchptr,
-			   int (*compare)(struct device *, void *),
-			   struct device_node *node)
-{
-}
-
 static inline int
 drm_of_component_probe(struct device *dev,
 		       int (*compare_of)(struct device *, void *),
-- 
2.35.1.1320.gc452695387.dirty



From lorenzo at kernel.org  Thu Dec 22 15:57:53 2022
From: lorenzo at kernel.org (lorenzo at kernel.org)
Date: Fri, 23 Dec 2022 00:57:53 +0100
Subject: [PATCH v2] wifi: mt76: fix potential memory leakage
In-Reply-To: <Y6RpDbebkzXltTZj@lore-desk>
References: <3940cc5ccb4b17d51b5176e722daef0d1af66d6a.camel@mediatek.com>
 <B2689D6F-E04E-4E9B-9244-4E5069DC464D@nbd.name>
 <Y6NKHY7euhifm0kI@lore-desk>
 <6de89564e1deb0b641b2a5039b23909f4647425e.camel@mediatek.com>
 <Y6QnFkJCWPsRgSQD@lore-desk>
 <5162a6ab00c3d90e4401e8753f4a79d9232640eb.camel@mediatek.com>
 <Y6RpDbebkzXltTZj@lore-desk>
Message-ID: <Y6TvAWICff7kmWnO@lore-desk>

> > On Thu, 2022-12-22 at 10:44 +0100, lorenzo at kernel.org wrote:
> > > > On Wed, 2022-12-21 at 19:02 +0100, Lorenzo Bianconi wrote:
> > > > > On Dec 21, Felix Fietkau wrote:
> > > > > > Hi Sujuan,
> > > > > > 
> > > > > > > Yes, it is so expensive, but if no memcopy, it will casue
> > > > > > > memory
> > > > > > > fragmentation (we hit this issue in internal SQC).
> > > > > > > 
> > > > > > > as we know, wed needs to exchange rx pkt(belongs to wed rx
> > > > > > > buffer
> > > > > > > manager) with wifi driver(dma rx data queue) by exchanging
> > > > > > > wfdma
> > > > > > > dmad
> > > > > > > to ensure the free wed rx buffer.
> > > > > > > 
> > > > > > > it is possiable that a large number of buffer has been
> > > > > > > exchanged
> > > > > > > to wed
> > > > > > > and can not come back to wlan driver. So, the memory from the
> > > > > > > same 32K
> > > > > > > page cache is unable to be released, and it will be failed at
> > > > > > > page_frag_alloc in mt76_dma_rx_fill.
> > > > > > > 
> > > > > > > Any ideas but memcopy?
> > > > > > 
> > > > > > A simple solution would be to simply allocate single pages, or
> > > > > > half-page fragments.
> > > > > > 
> > > > > > - Felix
> > > > > > 
> > > > > 
> > > > > A simple approach would be allocating a single page for each rx
> > > > > buffer.
> > > > > 
> > > > > @Sujuan: can you please double check if it is ok from performance
> > > > > and
> > > > > memory
> > > > > 	 fragmentation point of view? If not I guess we can try to
> > > > > optimize it
> > > > > 	 and allocate multiple buffers in the same page tweeking page
> > > > > refcount.
> > > > > 
> > > > > (this patch must be applied on top of Felix's dma fix).
> > > > > 
> > > > 
> > > > Allocating single page for each rx buffer avoids memory
> > > > fragmentation,
> > > > but it always uses 4K for one rx pkt which only needs 2K, right?
> > > 
> > > correct, we can optimize it allocating multiple buffers (in this case
> > > 2,
> > > assuming 4K pages) in a single page and recycling the page.
> > > 
> > > > 
> > > > I guess performance would be worse without page cache.
> > > 
> > > I think it is a trade-off
> > > 
> > > > We have tested on the mtk private driver, 7% drop in throughput
> > > > when
> > > > setting the 4K page cache compared to the 32K page cache.
> > > > and 10% drop when use slab to allocate buffer.
> > > 
> > > IIUC you tested with PAGE_FRAG_CACHE_MAX_SIZE set to 4K (or with a
> > > private
> > > page_frag_alloc() implementation) and you avoided memory allocation
> > > failures due to fragmentation but you got ~ 7% drop in throughput,
> > > correct?
> > > I think this is quite expected since we need to refill ~ 8 times more
> > > the
> > > page cache.
> > > 
> > > Not considering memory fragmentation, have you measured the impact of
> > > the
> > > memcpy of a full buffer?
> > > 
> > 
> > well, for pure sw path, it maybe ~300M drop (not sure) when using
> > memcpy(5G/HE80/4*4).
> > but we do memcpy only when wed on, atfer a few unbinding pkts, then all
> > flows are offloaded by hw. it is also a trade-off~
> 
> I guess we have quite a big impact if we enable wed and we do not actually
> offload any flow (or we do not enable hw flowtable in netfilter), dont' we?

Hi Sujuan,

here ([0],[1]) I switched mt76 to page_pool allocator [2]. page_pool allows us to
allocate pages of a requested order (order 0 for mt76) and split them between
multiple buffers (2 buffers per page for mt7915). Moreover pp allocator recycles
the pages in order to avoid the page allocator overhead and keep the pages DMA mapped
if requested (I implemented the support for mt7915).
The code is stable (with and without WED) but I have not run any performance
tests. Can you please help with them to see if this code helps solving the
discussed issue?

Regards,
Lorenzo

[0] https://github.com/LorenzoBianconi/wireless-drivers-next/commit/61ce8e9be04b40fa8a1c0f2778d266982be32d7a
[1] https://github.com/LorenzoBianconi/wireless-drivers-next/commit/f54eefce06d389b155574092d246b21631e42d47
[2] https://docs.kernel.org/networking/page_pool.html

> 
> Regards,
> Lorenzo
> 
> > 
> > Regards,
> > Sujuan
> > 
> > > > 
> > > > A single page per rx buffer may cause a throughput drop of over 7%
> > > > and
> > > > waste memory, what do you think?
> > > 
> > > Implementing the page recycles as it is done in page_frag_alloc() we
> > > should get
> > > the same results you got with PAGE_FRAG_CACHE_MAX_SIZE set to 4K.
> > > 
> > > Regards,
> > > Lorenzo
> > > 
> > > > 
> > > > Regards,
> > > > Sujuan
> > > > 
> > > > > Regards,
> > > > > Lorenzo
> > > > > 
> > > > > diff --git a/drivers/net/wireless/mediatek/mt76/dma.c
> > > > > b/drivers/net/wireless/mediatek/mt76/dma.c
> > > > > index 28a7fe064313..1d9e580977fc 100644
> > > > > --- a/drivers/net/wireless/mediatek/mt76/dma.c
> > > > > +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> > > > > @@ -580,6 +580,20 @@ mt76_dma_tx_queue_skb(struct mt76_dev *dev,
> > > > > struct mt76_queue *q,
> > > > >  	return ret;
> > > > >  }
> > > > >  
> > > > > +static void *
> > > > > +mt76_dma_get_rx_buf(struct mt76_queue *q)
> > > > > +{
> > > > > +	if ((q->flags & MT_QFLAG_WED) &&
> > > > > +	    FIELD_GET(MT_QFLAG_WED_TYPE, q->flags) == MT76_WED_Q_RX) {
> > > > > +		/* WED RX queue */
> > > > > +		struct page *page = dev_alloc_page();
> > > > > +
> > > > > +		return page ? page_address(page) : NULL;
> > > > > +	}
> > > > > +
> > > > > +	return page_frag_alloc(&q->rx_page, q->buf_size, GFP_ATOMIC);
> > > > > +}
> > > > > +
> > > > >  static int
> > > > >  mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
> > > > >  {
> > > > > @@ -596,7 +610,7 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct
> > > > > mt76_queue *q)
> > > > >  		struct mt76_queue_buf qbuf;
> > > > >  		void *buf = NULL;
> > > > >  
> > > > > -		buf = page_frag_alloc(&q->rx_page, q->buf_size,
> > > > > GFP_ATOMIC);
> > > > > +		buf = mt76_dma_get_rx_buf(q);
> > > > >  		if (!buf)
> > > > >  			break;
> > > > >  
> > > > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > > > > b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > > > > index 1a2e4df8d1b5..2924e71e4fbe 100644
> > > > > --- a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > > > > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> > > > > @@ -594,13 +594,9 @@ static void
> > > > > mt7915_mmio_wed_offload_disable(struct mtk_wed_device *wed)
> > > > >  static void mt7915_mmio_wed_release_rx_buf(struct mtk_wed_device
> > > > > *wed)
> > > > >  {
> > > > >  	struct mt7915_dev *dev;
> > > > > -	u32 length;
> > > > >  	int i;
> > > > >  
> > > > >  	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
> > > > > -	length = SKB_DATA_ALIGN(NET_SKB_PAD + wed->wlan.rx_size +
> > > > > -				sizeof(struct skb_shared_info));
> > > > > -
> > > > >  	for (i = 0; i < dev->mt76.rx_token_size; i++) {
> > > > >  		struct mt76_txwi_cache *t;
> > > > >  
> > > > > @@ -610,7 +606,7 @@ static void
> > > > > mt7915_mmio_wed_release_rx_buf(struct
> > > > > mtk_wed_device *wed)
> > > > >  
> > > > >  		dma_unmap_single(dev->mt76.dma_dev, t->dma_addr,
> > > > >  				 wed->wlan.rx_size, DMA_FROM_DEVICE);
> > > > > -		__free_pages(virt_to_page(t->ptr), get_order(length));
> > > > > +		free_page(virt_to_page(t->ptr));
> > > > >  		t->ptr = NULL;
> > > > >  
> > > > >  		mt76_put_rxwi(&dev->mt76, t);
> > > > > @@ -621,13 +617,9 @@ static u32
> > > > > mt7915_mmio_wed_init_rx_buf(struct
> > > > > mtk_wed_device *wed, int size)
> > > > >  {
> > > > >  	struct mtk_rxbm_desc *desc = wed->rx_buf_ring.desc;
> > > > >  	struct mt7915_dev *dev;
> > > > > -	u32 length;
> > > > >  	int i;
> > > > >  
> > > > >  	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
> > > > > -	length = SKB_DATA_ALIGN(NET_SKB_PAD + wed->wlan.rx_size +
> > > > > -				sizeof(struct skb_shared_info));
> > > > > -
> > > > >  	for (i = 0; i < size; i++) {
> > > > >  		struct mt76_txwi_cache *t = mt76_get_rxwi(&dev->mt76);
> > > > >  		dma_addr_t phy_addr;
> > > > > @@ -635,7 +627,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> > > > > mtk_wed_device *wed, int size)
> > > > >  		int token;
> > > > >  		void *ptr;
> > > > >  
> > > > > -		page = __dev_alloc_pages(GFP_KERNEL,
> > > > > get_order(length));
> > > > > +		page = __dev_alloc_page(GFP_KERNEL);
> > > > >  		if (!page)
> > > > >  			goto unmap;
> > > > >  
> > > > > @@ -644,7 +636,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> > > > > mtk_wed_device *wed, int size)
> > > > >  					  wed->wlan.rx_size,
> > > > >  					  DMA_TO_DEVICE);
> > > > >  		if (unlikely(dma_mapping_error(dev->mt76.dev,
> > > > > phy_addr))) {
> > > > > -			__free_pages(page, get_order(length));
> > > > > +			free_page(page);
> > > > >  			goto unmap;
> > > > >  		}
> > > > >  
> > > > > @@ -653,7 +645,7 @@ static u32 mt7915_mmio_wed_init_rx_buf(struct
> > > > > mtk_wed_device *wed, int size)
> > > > >  		if (token < 0) {
> > > > >  			dma_unmap_single(dev->mt76.dma_dev, phy_addr,
> > > > >  					 wed->wlan.rx_size,
> > > > > DMA_TO_DEVICE);
> > > > > -			__free_pages(page, get_order(length));
> > > > > +			free_page(page);
> > > > >  			goto unmap;
> > > > >  		}
> > > > >  


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221223/61dc8ecb/attachment.sig>

From Garmin.Chang at mediatek.com  Thu Dec 22 17:36:42 2022
From: Garmin.Chang at mediatek.com (=?utf-8?B?R2FybWluIENoYW5nICjlvLXlrrbpipgp?=)
Date: Fri, 23 Dec 2022 01:36:42 +0000
Subject: [PATCH v2 10/19] clk: mediatek: Add MT8188 mfgcfg clock support
In-Reply-To: <5e71c0b1-d645-1900-282d-df7d13cc60f8@collabora.com>
References: <20221024094254.29218-1-Garmin.Chang@mediatek.com>
	 <20221024094254.29218-11-Garmin.Chang@mediatek.com>
	 <5e71c0b1-d645-1900-282d-df7d13cc60f8@collabora.com>
Message-ID: <3bfb16a13cea63a74e3612ff450a97e06bf8946a.camel@mediatek.com>

On Thu, 2022-10-27 at 10:23 +0200, AngeloGioacchino Del Regno wrote:
> Il 24/10/22 11:42, Garmin.Chang ha scritto:
> > Add MT8188 mfg clock controller which provides clock gate
> > control for GPU.
> > 
> > Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
> > ---
> >   drivers/clk/mediatek/Makefile         |  2 +-
> >   drivers/clk/mediatek/clk-mt8188-mfg.c | 50
> > +++++++++++++++++++++++++++
> >   2 files changed, 51 insertions(+), 1 deletion(-)
> >   create mode 100644 drivers/clk/mediatek/clk-mt8188-mfg.c
> > 
> > diff --git a/drivers/clk/mediatek/Makefile
> > b/drivers/clk/mediatek/Makefile
> > index 21b05e880a3a..cd8870c28146 100644
> > --- a/drivers/clk/mediatek/Makefile
> > +++ b/drivers/clk/mediatek/Makefile
> > @@ -85,7 +85,7 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-
> > mcu.o clk-mt8186-topckgen.o clk-mt
> >   obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-
> > mt8188-topckgen.o \
> >   				   clk-mt8188-peri_ao.o clk-mt8188-
> > infra_ao.o \
> >   				   clk-mt8188-cam.o clk-mt8188-ccu.o
> > clk-mt8188-img.o \
> > -				   clk-mt8188-ipe.o
> > +				   clk-mt8188-ipe.o clk-mt8188-mfg.o
> >   obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
> >   obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
> >   obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
> > diff --git a/drivers/clk/mediatek/clk-mt8188-mfg.c
> > b/drivers/clk/mediatek/clk-mt8188-mfg.c
> > new file mode 100644
> > index 000000000000..3a75cd7443fd
> > --- /dev/null
> > +++ b/drivers/clk/mediatek/clk-mt8188-mfg.c
> > @@ -0,0 +1,50 @@
> > +// SPDX-License-Identifier: GPL-2.0-only
> > +//
> > +// Copyright (c) 2022 MediaTek Inc.
> > +// Author: Garmin Chang <garmin.chang at mediatek.com>
> > +
> > +#include <linux/clk-provider.h>
> > +#include <linux/platform_device.h>
> > +#include <dt-bindings/clock/mediatek,mt8188-clk.h>
> > +
> > +#include "clk-gate.h"
> > +#include "clk-mtk.h"
> > +
> > +static const struct mtk_gate_regs mfgcfg_cg_regs = {
> > +	.set_ofs = 0x4,
> > +	.clr_ofs = 0x8,
> > +	.sta_ofs = 0x0,
> > +};
> > +
> > +#define GATE_MFGCFG(_id, _name, _parent, _shift)			
> > \
> > +	GATE_MTK(_id, _name, _parent, &mfgcfg_cg_regs, _shift,
> > &mtk_clk_gate_ops_setclr)
> > +
> > +static const struct mtk_gate mfgcfg_clks[] = {
> > +	GATE_MFGCFG(CLK_MFGCFG_BG3D, "mfgcfg_bg3d", "top_mfg_core_tmp",
> > 0),
> > +};
> 
> This will make it impossible to properly perform GPU DVFS.
> 
> Hint:
> 
> #define GATE_MFG(_id, _name, _parent, _shift)			\
> 	GATE_MTK_FLAGS(_id, _name, _parent, &mfg_cg_regs,	\
> 		       _shift, &mtk_clk_gate_ops_setclr,	\
> 		       CLK_SET_RATE_PARENT)
> 
> Regards,
> Angelo
> 

  Ok, I will modify them in the next version.

> 
> Thanks,
> Best Regards,
> Garmin

From kuba at kernel.org  Thu Dec 22 17:55:10 2022
From: kuba at kernel.org (Jakub Kicinski)
Date: Thu, 22 Dec 2022 17:55:10 -0800
Subject: [PATCH v5 net-next 04/10] dt-bindings: net: dsa: utilize base
 definitions for standard dsa switches
In-Reply-To: <Y6S5Ple5SURq0QSU@colin-ia-desktop>
References: <20221210033033.662553-1-colin.foster@in-advantage.com>
	<20221210033033.662553-5-colin.foster@in-advantage.com>
	<1df417b5-a924-33d4-a302-eb526f7124b4@arinc9.com>
	<Y5TJw+zcEDf2ItZ5@euler>
	<c1e40b58-4459-2929-64f3-3e20f36f6947@arinc9.com>
	<20221212165147.GA1092706-robh@kernel.org>
	<Y5d5F9IODF4xhcps@COLIN-DESKTOP1.localdomain>
	<Y6S5Ple5SURq0QSU@colin-ia-desktop>
Message-ID: <20221222175510.7ca0b563@kernel.org>

On Thu, 22 Dec 2022 12:08:30 -0800 Colin Foster wrote:
> Heads up on my plan for this. I plan to re-submit this on Monday after
> the merge window with the change where I move the $ref: dsa-port.yaml#
> to outside the allOf: section, and remove the object type as the above
> code suggests. Hopefully that's the right step to take.

FWIW in case you mean Mon, Dec 26th and net-next -- we extended 
the period of net-next being closed until Jan:
https://lore.kernel.org/all/20221215092531.133ce653 at kernel.org/


From biao.huang at mediatek.com  Thu Dec 22 17:50:27 2022
From: biao.huang at mediatek.com (Biao Huang)
Date: Fri, 23 Dec 2022 09:50:27 +0800
Subject: [PATCH v5 0/2] arm64: dts: mt8195: Add Ethernet controller
Message-ID: <20221223015029.24978-1-biao.huang@mediatek.com>

Changes in v5:
1. reorder the clocks as Angelo's comments
2. add a driver patch to fix rgmii-id issue, then we can
use a ususal way rgmii/rgmii-id as Andrew's comments.

Changes in v4:
1. remove {address,size}-cells = <0> to avoid warning as Angelo's feedback.
2. Add reviewd-by as Angelo's comments.

Changes in v3:
1. move stmmac-axi-config, rx-queues-config, tx-queues-configs inside ethernet node
as Angelo's comments.
2. add {address,size}-cells = <0> in ethernet node as Angelo's comments.

Changes in v2:
1. modify pinctrl node used by ethernet to match rules in pinctrl-mt8195.yaml,
which is pointed by Krzysztof.
2. remove "mac-address" property in ethernet node as comments of Krzysztof.

Changes in v1:
add dts node for MT8195 Ethernet controller

Biao Huang (2):
  stmmac: dwmac-mediatek: enable 2ns delay only for special cases
  arm64: dts: mt8195: Add Ethernet controller

 arch/arm64/boot/dts/mediatek/mt8195-demo.dts  | 81 +++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt8195.dtsi      | 86 +++++++++++++++++++
 .../ethernet/stmicro/stmmac/dwmac-mediatek.c  |  7 +-
 3 files changed, 173 insertions(+), 1 deletion(-)

-- 
2.18.0




From biao.huang at mediatek.com  Thu Dec 22 17:50:28 2022
From: biao.huang at mediatek.com (Biao Huang)
Date: Fri, 23 Dec 2022 09:50:28 +0800
Subject: [PATCH v5 1/2] stmmac: dwmac-mediatek: enable 2ns delay only for special cases
In-Reply-To: <20221223015029.24978-1-biao.huang@mediatek.com>
References: <20221223015029.24978-1-biao.huang@mediatek.com>
Message-ID: <20221223015029.24978-2-biao.huang@mediatek.com>

In current driver, MAC will always enable 2ns delay in RGMII mode,
but that will lead to transmission failures for "rgmii-id"/"rgmii-txid"
cases.

Modify the implementation of fix_mac_speed() to ensure the 2ns delay
will only take effect for "rgmii-rxid"/"rgmii" cases, then user can
choose phy-mode freely.

Fixes: f2d356a6ab71 ("stmmac: dwmac-mediatek: add support for mt8195")
Signed-off-by: Biao Huang <biao.huang at mediatek.com>
---
 drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c
index d42e1afb6521..cde4fb81d596 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c
@@ -447,7 +447,9 @@ static void mt8195_fix_mac_speed(void *priv, unsigned int speed)
 {
 	struct mediatek_dwmac_plat_data *priv_plat = priv;
 
-	if ((phy_interface_mode_is_rgmii(priv_plat->phy_mode))) {
+	switch (priv_plat->phy_mode) {
+	case PHY_INTERFACE_MODE_RGMII:
+	case PHY_INTERFACE_MODE_RGMII_RXID:
 		/* prefer 2ns fixed delay which is controlled by TXC_PHASE_CTRL,
 		 * when link speed is 1Gbps with RGMII interface,
 		 * Fall back to delay macro circuit for 10/100Mbps link speed.
@@ -462,6 +464,9 @@ static void mt8195_fix_mac_speed(void *priv, unsigned int speed)
 					   MT8195_RGMII_TXC_PHASE_CTRL);
 		else
 			mt8195_set_delay(priv_plat);
+		break;
+	default:
+		break;
 	}
 }
 
-- 
2.25.1



From biao.huang at mediatek.com  Thu Dec 22 17:50:29 2022
From: biao.huang at mediatek.com (Biao Huang)
Date: Fri, 23 Dec 2022 09:50:29 +0800
Subject: [PATCH v5 2/2] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <20221223015029.24978-1-biao.huang@mediatek.com>
References: <20221223015029.24978-1-biao.huang@mediatek.com>
Message-ID: <20221223015029.24978-3-biao.huang@mediatek.com>

Add Ethernet controller node for mt8195.

Signed-off-by: Biao Huang <biao.huang at mediatek.com>
---
 arch/arm64/boot/dts/mediatek/mt8195-demo.dts | 81 ++++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt8195.dtsi     | 86 ++++++++++++++++++++
 2 files changed, 167 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195-demo.dts b/arch/arm64/boot/dts/mediatek/mt8195-demo.dts
index 4fbd99eb496a..2e6979c47aa6 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195-demo.dts
+++ b/arch/arm64/boot/dts/mediatek/mt8195-demo.dts
@@ -258,6 +258,66 @@ &mt6359_vsram_others_ldo_reg {
 };
 
 &pio {
+	eth_default_pins: eth-default-pins {
+		pins-txd {
+			pinmux = <PINMUX_GPIO77__FUNC_GBE_TXD3>,
+				 <PINMUX_GPIO78__FUNC_GBE_TXD2>,
+				 <PINMUX_GPIO79__FUNC_GBE_TXD1>,
+				 <PINMUX_GPIO80__FUNC_GBE_TXD0>;
+			drive-strength = <MTK_DRIVE_8mA>;
+		};
+		pins-cc {
+			pinmux = <PINMUX_GPIO85__FUNC_GBE_TXC>,
+				 <PINMUX_GPIO88__FUNC_GBE_TXEN>,
+				 <PINMUX_GPIO87__FUNC_GBE_RXDV>,
+				 <PINMUX_GPIO86__FUNC_GBE_RXC>;
+			drive-strength = <MTK_DRIVE_8mA>;
+		};
+		pins-rxd {
+			pinmux = <PINMUX_GPIO81__FUNC_GBE_RXD3>,
+				 <PINMUX_GPIO82__FUNC_GBE_RXD2>,
+				 <PINMUX_GPIO83__FUNC_GBE_RXD1>,
+				 <PINMUX_GPIO84__FUNC_GBE_RXD0>;
+		};
+		pins-mdio {
+			pinmux = <PINMUX_GPIO89__FUNC_GBE_MDC>,
+				 <PINMUX_GPIO90__FUNC_GBE_MDIO>;
+			input-enable;
+		};
+		pins-power {
+			pinmux = <PINMUX_GPIO91__FUNC_GPIO91>,
+				 <PINMUX_GPIO92__FUNC_GPIO92>;
+			output-high;
+		};
+	};
+
+	eth_sleep_pins: eth-sleep-pins {
+		pins-txd {
+			pinmux = <PINMUX_GPIO77__FUNC_GPIO77>,
+				 <PINMUX_GPIO78__FUNC_GPIO78>,
+				 <PINMUX_GPIO79__FUNC_GPIO79>,
+				 <PINMUX_GPIO80__FUNC_GPIO80>;
+		};
+		pins-cc {
+			pinmux = <PINMUX_GPIO85__FUNC_GPIO85>,
+				 <PINMUX_GPIO88__FUNC_GPIO88>,
+				 <PINMUX_GPIO87__FUNC_GPIO87>,
+				 <PINMUX_GPIO86__FUNC_GPIO86>;
+		};
+		pins-rxd {
+			pinmux = <PINMUX_GPIO81__FUNC_GPIO81>,
+				 <PINMUX_GPIO82__FUNC_GPIO82>,
+				 <PINMUX_GPIO83__FUNC_GPIO83>,
+				 <PINMUX_GPIO84__FUNC_GPIO84>;
+		};
+		pins-mdio {
+			pinmux = <PINMUX_GPIO89__FUNC_GPIO89>,
+				 <PINMUX_GPIO90__FUNC_GPIO90>;
+			input-disable;
+			bias-disable;
+		};
+	};
+
 	gpio_keys_pins: gpio-keys-pins {
 		pins {
 			pinmux = <PINMUX_GPIO106__FUNC_GPIO106>;
@@ -434,6 +494,27 @@ &xhci0 {
 	status = "okay";
 };
 
+&eth {
+	phy-mode ="rgmii-id";
+	phy-handle = <&ethernet_phy0>;
+	snps,reset-gpio = <&pio 93 GPIO_ACTIVE_HIGH>;
+	snps,reset-delays-us = <0 10000 10000>;
+	pinctrl-names = "default", "sleep";
+	pinctrl-0 = <&eth_default_pins>;
+	pinctrl-1 = <&eth_sleep_pins>;
+	status = "okay";
+
+	mdio {
+		compatible = "snps,dwmac-mdio";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		ethernet_phy0: ethernet-phy at 1 {
+			compatible = "ethernet-phy-id001c.c916";
+			reg = <0x1>;
+		};
+	};
+};
+
 &xhci1 {
 	vusb33-supply = <&mt6359_vusb_ldo_reg>;
 	status = "okay";
diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index 5d31536f4c48..b90d38d87aa4 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -1046,6 +1046,92 @@ spis1: spi at 1101e000 {
 			status = "disabled";
 		};
 
+		eth: ethernet at 11021000 {
+			compatible = "mediatek,mt8195-gmac", "snps,dwmac-5.10a";
+			reg = <0 0x11021000 0 0x4000>;
+			interrupts = <GIC_SPI 716 IRQ_TYPE_LEVEL_HIGH 0>;
+			interrupt-names = "macirq";
+			clock-names = "axi",
+				      "apb",
+				      "mac_main",
+				      "ptp_ref",
+				      "rmii_internal",
+				      "mac_cg";
+			clocks = <&pericfg_ao CLK_PERI_AO_ETHERNET>,
+				 <&pericfg_ao CLK_PERI_AO_ETHERNET_BUS>,
+				 <&topckgen CLK_TOP_SNPS_ETH_250M>,
+				 <&topckgen CLK_TOP_SNPS_ETH_62P4M_PTP>,
+				 <&topckgen CLK_TOP_SNPS_ETH_50M_RMII>,
+				 <&pericfg_ao CLK_PERI_AO_ETHERNET_MAC>;
+			assigned-clocks = <&topckgen CLK_TOP_SNPS_ETH_250M>,
+					  <&topckgen CLK_TOP_SNPS_ETH_62P4M_PTP>,
+					  <&topckgen CLK_TOP_SNPS_ETH_50M_RMII>;
+			assigned-clock-parents = <&topckgen CLK_TOP_ETHPLL_D2>,
+						 <&topckgen CLK_TOP_ETHPLL_D8>,
+						 <&topckgen CLK_TOP_ETHPLL_D10>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_ETHER>;
+			mediatek,pericfg = <&infracfg_ao>;
+			snps,axi-config = <&stmmac_axi_setup>;
+			snps,mtl-rx-config = <&mtl_rx_setup>;
+			snps,mtl-tx-config = <&mtl_tx_setup>;
+			snps,txpbl = <16>;
+			snps,rxpbl = <16>;
+			snps,clk-csr = <0>;
+			status = "disabled";
+
+			stmmac_axi_setup: stmmac-axi-config {
+				snps,wr_osr_lmt = <0x7>;
+				snps,rd_osr_lmt = <0x7>;
+				snps,blen = <0 0 0 0 16 8 4>;
+			};
+
+			mtl_rx_setup: rx-queues-config {
+				snps,rx-queues-to-use = <4>;
+				snps,rx-sched-sp;
+				queue0 {
+					snps,dcb-algorithm;
+					snps,map-to-dma-channel = <0x0>;
+				};
+				queue1 {
+					snps,dcb-algorithm;
+					snps,map-to-dma-channel = <0x0>;
+				};
+				queue2 {
+					snps,dcb-algorithm;
+					snps,map-to-dma-channel = <0x0>;
+				};
+				queue3 {
+					snps,dcb-algorithm;
+					snps,map-to-dma-channel = <0x0>;
+				};
+			};
+
+			mtl_tx_setup: tx-queues-config {
+				snps,tx-queues-to-use = <4>;
+				snps,tx-sched-wrr;
+				queue0 {
+					snps,weight = <0x10>;
+					snps,dcb-algorithm;
+					snps,priority = <0x0>;
+				};
+				queue1 {
+					snps,weight = <0x11>;
+					snps,dcb-algorithm;
+					snps,priority = <0x1>;
+				};
+				queue2 {
+					snps,weight = <0x12>;
+					snps,dcb-algorithm;
+					snps,priority = <0x2>;
+				};
+				queue3 {
+					snps,weight = <0x13>;
+					snps,dcb-algorithm;
+					snps,priority = <0x3>;
+				};
+			};
+		};
+
 		xhci0: usb at 11200000 {
 			compatible = "mediatek,mt8195-xhci",
 				     "mediatek,mtk-xhci";
-- 
2.25.1



From Garmin.Chang at mediatek.com  Thu Dec 22 23:33:06 2022
From: Garmin.Chang at mediatek.com (=?utf-8?B?R2FybWluIENoYW5nICjlvLXlrrbpipgp?=)
Date: Fri, 23 Dec 2022 07:33:06 +0000
Subject: [PATCH v2 04/19] clk: mediatek: Add MT8188 peripheral clock
 support
In-Reply-To: <8c0da3f2-0e77-e960-dab4-0a1d02e0d21e@collabora.com>
References: <20221024094254.29218-1-Garmin.Chang@mediatek.com>
	 <20221024094254.29218-5-Garmin.Chang@mediatek.com>
	 <8c0da3f2-0e77-e960-dab4-0a1d02e0d21e@collabora.com>
Message-ID: <18aad0e87316269b70c71d49692f2ef9a22fef62.camel@mediatek.com>

On Thu, 2022-10-27 at 10:22 +0200, AngeloGioacchino Del Regno wrote:
> Il 24/10/22 11:42, Garmin.Chang ha scritto:
> > Add MT8188 peripheral clock controller which provides clock
> > gate control for ethernet/flashif/pcie/ssusb.
> > 
> > Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
> 
> ..snip..
> 
> > +
> > +static const struct of_device_id of_match_clk_mt8188_peri_ao[] = {
> > +	{
> > +		.compatible = "mediatek,mt8188-pericfg_ao",
> > +		.data = &peri_ao_desc,
> > +	}, {
> > +		/* sentinel */
> > +	}
> > +};
> > +
> 
> Here and for all of the other drivers that you're introducing with
> this series...
> 
> please compress this array to one line per entry, like so:
> 
> static const struct of_device_id of_match_clk_mt8188_peri_ao[] = {
> 	{ .compatible = "mediatek,mt8188-pericfg_ao", .data =
> &peri_ao_desc },
> 	{ /* sentinel */ }
> };
> 
> Regards,
> Angelo
> 

  Ok, I will modify all drivers in the next version.

> Thanks,
> Best Regards,
> Garmin

From Garmin.Chang at mediatek.com  Thu Dec 22 23:35:02 2022
From: Garmin.Chang at mediatek.com (=?utf-8?B?R2FybWluIENoYW5nICjlvLXlrrbpipgp?=)
Date: Fri, 23 Dec 2022 07:35:02 +0000
Subject: [PATCH v2 02/19] clk: mediatek: Add MT8188 apmixedsys clock
 support
In-Reply-To: <1dbba01b-157d-c04b-8f06-4d9ec79b1d5c@collabora.com>
References: <20221024094254.29218-1-Garmin.Chang@mediatek.com>
	 <20221024094254.29218-3-Garmin.Chang@mediatek.com>
	 <1dbba01b-157d-c04b-8f06-4d9ec79b1d5c@collabora.com>
Message-ID: <fca3f7945c07e71d83566e5e6b6bd3aaaa2ad0e5.camel@mediatek.com>

On Thu, 2022-10-27 at 10:21 +0200, AngeloGioacchino Del Regno wrote:
> Il 24/10/22 11:42, Garmin.Chang ha scritto:
> > Add MT8188 apmixedsys clock controller which provides Plls
> > generated from SoC 26m and ssusb clock gate control.
> > 
> > Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
> > Change-Id: I3b1b44155cc5bfe5ba6e860de857e7e9f48b66a7
> > ---
> >   drivers/clk/mediatek/Kconfig                 |  11 ++
> >   drivers/clk/mediatek/Makefile                |   1 +
> >   drivers/clk/mediatek/clk-mt8188-apmixedsys.c | 153
> > +++++++++++++++++++
> >   3 files changed, 165 insertions(+)
> >   create mode 100644 drivers/clk/mediatek/clk-mt8188-apmixedsys.c
> > 
> 
> ..snip..
> 
> > diff --git a/drivers/clk/mediatek/clk-mt8188-apmixedsys.c
> > b/drivers/clk/mediatek/clk-mt8188-apmixedsys.c
> > new file mode 100644
> > index 000000000000..f09e11d0261e
> > --- /dev/null
> > +++ b/drivers/clk/mediatek/clk-mt8188-apmixedsys.c
> 
> ..snip..
> 
> > +
> > +static int clk_mt8188_apmixed_probe(struct platform_device *pdev)
> > +{
> > +	struct clk_hw_onecell_data *clk_data;
> > +	struct device_node *node = pdev->dev.of_node;
> > +	int r;
> > +
> > +	clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
> > +	if (!clk_data)
> > +		return -ENOMEM;
> > +
> > +	r = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls),
> > clk_data);
> > +	if (r)
> > +		goto free_apmixed_data;
> > +
> > +	r = mtk_clk_register_gates(node, apmixed_clks,
> > ARRAY_SIZE(apmixed_clks), clk_data);
> 
> Please use mtk_clk_register_gates_with_dev().
> 
> Regards,
> Angelo


  Ok, I will use mtk_clk_register_gates_with_dev() in the next version.

> Thanks,
> Best Regards,
> Garmin

From Garmin.Chang at mediatek.com  Fri Dec 23 00:05:52 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 23 Dec 2022 16:05:52 +0800
Subject: [PATCH v3 1/2] dt-bindings: power: Add MT8188 power domains
In-Reply-To: <20221223080553.9397-1-Garmin.Chang@mediatek.com>
References: <20221223080553.9397-1-Garmin.Chang@mediatek.com>
Message-ID: <20221223080553.9397-2-Garmin.Chang@mediatek.com>

Add power domains dt-bindings for MT8188.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 .../power/mediatek,power-controller.yaml      |  2 +
 .../dt-bindings/power/mediatek,mt8188-power.h | 44 +++++++++++++++++++
 2 files changed, 46 insertions(+)
 create mode 100644 include/dt-bindings/power/mediatek,mt8188-power.h

diff --git a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml
index 605ec7ab5f63..c9acef80f452 100644
--- a/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml
+++ b/Documentation/devicetree/bindings/power/mediatek,power-controller.yaml
@@ -28,6 +28,7 @@ properties:
       - mediatek,mt8173-power-controller
       - mediatek,mt8183-power-controller
       - mediatek,mt8186-power-controller
+      - mediatek,mt8188-power-controller
       - mediatek,mt8192-power-controller
       - mediatek,mt8195-power-controller
 
@@ -84,6 +85,7 @@ $defs:
               "include/dt-bindings/power/mt8167-power.h" - for MT8167 type power domain.
               "include/dt-bindings/power/mt8173-power.h" - for MT8173 type power domain.
               "include/dt-bindings/power/mt8183-power.h" - for MT8183 type power domain.
+              "include/dt-bindings/power/mediatek,mt8188-power.h" - for MT8188 type power domain.
               "include/dt-bindings/power/mt8192-power.h" - for MT8192 type power domain.
               "include/dt-bindings/power/mt8195-power.h" - for MT8195 type power domain.
         maxItems: 1
diff --git a/include/dt-bindings/power/mediatek,mt8188-power.h b/include/dt-bindings/power/mediatek,mt8188-power.h
new file mode 100644
index 000000000000..57e75cf3aa2c
--- /dev/null
+++ b/include/dt-bindings/power/mediatek,mt8188-power.h
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Garmin Chang <garmin.chang at mediatek.com>
+ */
+
+#ifndef _DT_BINDINGS_POWER_MT8188_POWER_H
+#define _DT_BINDINGS_POWER_MT8188_POWER_H
+
+#define MT8188_POWER_DOMAIN_MFG0			0
+#define MT8188_POWER_DOMAIN_MFG1			1
+#define MT8188_POWER_DOMAIN_MFG2			2
+#define MT8188_POWER_DOMAIN_MFG3			3
+#define MT8188_POWER_DOMAIN_MFG4			4
+#define MT8188_POWER_DOMAIN_PEXTP_MAC_P0		5
+#define MT8188_POWER_DOMAIN_PEXTP_PHY_TOP		6
+#define MT8188_POWER_DOMAIN_CSIRX_TOP			7
+#define MT8188_POWER_DOMAIN_ETHER			8
+#define MT8188_POWER_DOMAIN_HDMI_TX			9
+#define MT8188_POWER_DOMAIN_ADSP_AO			10
+#define MT8188_POWER_DOMAIN_ADSP_INFRA			11
+#define MT8188_POWER_DOMAIN_ADSP			12
+#define MT8188_POWER_DOMAIN_AUDIO			13
+#define MT8188_POWER_DOMAIN_AUDIO_ASRC			14
+#define MT8188_POWER_DOMAIN_VPPSYS0			15
+#define MT8188_POWER_DOMAIN_VDOSYS0			16
+#define MT8188_POWER_DOMAIN_VDOSYS1			17
+#define MT8188_POWER_DOMAIN_DP_TX			18
+#define MT8188_POWER_DOMAIN_EDP_TX			19
+#define MT8188_POWER_DOMAIN_VPPSYS1			20
+#define MT8188_POWER_DOMAIN_WPE				21
+#define MT8188_POWER_DOMAIN_VDEC0			22
+#define MT8188_POWER_DOMAIN_VDEC1			23
+#define MT8188_POWER_DOMAIN_VENC			24
+#define MT8188_POWER_DOMAIN_IMG_VCORE			25
+#define MT8188_POWER_DOMAIN_IMG_MAIN			26
+#define MT8188_POWER_DOMAIN_DIP				27
+#define MT8188_POWER_DOMAIN_IPE				28
+#define MT8188_POWER_DOMAIN_CAM_VCORE			29
+#define MT8188_POWER_DOMAIN_CAM_MAIN			30
+#define MT8188_POWER_DOMAIN_CAM_SUBA			31
+#define MT8188_POWER_DOMAIN_CAM_SUBB			32
+
+#endif /* _DT_BINDINGS_POWER_MT8188_POWER_H */
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 22 23:36:33 2022
From: Garmin.Chang at mediatek.com (=?utf-8?B?R2FybWluIENoYW5nICjlvLXlrrbpipgp?=)
Date: Fri, 23 Dec 2022 07:36:33 +0000
Subject: [PATCH v2 03/19] clk: mediatek: Add MT8188 topckgen clock support
In-Reply-To: <875b601c-bc41-2d6b-2e93-4c98e3b6c371@collabora.com>
References: <20221024094254.29218-1-Garmin.Chang@mediatek.com>
	 <20221024094254.29218-4-Garmin.Chang@mediatek.com>
	 <875b601c-bc41-2d6b-2e93-4c98e3b6c371@collabora.com>
Message-ID: <7879a712e8009659e4e911d165482389da149912.camel@mediatek.com>

On Thu, 2022-10-27 at 10:21 +0200, AngeloGioacchino Del Regno wrote:
> Il 24/10/22 11:42, Garmin.Chang ha scritto:
> > Add MT8188 topckgen clock controller which provides muxes, dividers
> > to handle variety clock selection in other IP blocks.
> > 
> > Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
> > ---
> >   drivers/clk/mediatek/Makefile              |    2 +-
> >   drivers/clk/mediatek/clk-mt8188-topckgen.c | 1337
> > ++++++++++++++++++++
> >   2 files changed, 1338 insertions(+), 1 deletion(-)
> >   create mode 100644 drivers/clk/mediatek/clk-mt8188-topckgen.c
> > 
> > diff --git a/drivers/clk/mediatek/Makefile
> > b/drivers/clk/mediatek/Makefile
> > index 957530b4303f..4fc7de25f036 100644
> > --- a/drivers/clk/mediatek/Makefile
> > +++ b/drivers/clk/mediatek/Makefile
> > @@ -82,7 +82,7 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-
> > mcu.o clk-mt8186-topckgen.o clk-mt
> >   				   clk-mt8186-mfg.o clk-mt8186-mm.o
> > clk-mt8186-wpe.o \
> >   				   clk-mt8186-img.o clk-mt8186-vdec.o
> > clk-mt8186-venc.o \
> >   				   clk-mt8186-cam.o clk-mt8186-mdp.o
> > clk-mt8186-ipe.o
> > -obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o
> > +obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-
> > mt8188-topckgen.o
> >   obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
> >   obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
> >   obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
> > diff --git a/drivers/clk/mediatek/clk-mt8188-topckgen.c
> > b/drivers/clk/mediatek/clk-mt8188-topckgen.c
> > new file mode 100644
> > index 000000000000..c6ac6c2558ae
> > --- /dev/null
> > +++ b/drivers/clk/mediatek/clk-mt8188-topckgen.c
> > @@ -0,0 +1,1337 @@
> > +// SPDX-License-Identifier: GPL-2.0-only
> > +//
> > +// Copyright (c) 2022 MediaTek Inc.
> > +// Author: Garmin Chang <garmin.chang at mediatek.com>
> > +
> > +#include <linux/of_device.h>
> > +#include <linux/platform_device.h>
> > +#include <dt-bindings/clock/mediatek,mt8188-clk.h>
> > +
> > +#include "clk-gate.h"
> > +#include "clk-mtk.h"
> > +#include "clk-mux.h"
> > +
> > +static DEFINE_SPINLOCK(mt8188_clk_lock);
> > +
> > +static const struct mtk_fixed_clk top_fixed_clks[] = {
> > +	FIXED_CLK(CLK_TOP_ULPOSC1, "ulposc_ck1", NULL, 260000000),
> > +	FIXED_CLK(CLK_TOP_MPHONE_SLAVE_BCK, "mphone_slave_bck", NULL,
> > 49152000),
> > +	FIXED_CLK(CLK_TOP_PAD_FPC, "pad_fpc_ck", NULL, 50000000),
> > +	FIXED_CLK(CLK_TOP_466M_FMEM, "hd_466m_fmem_ck", NULL,
> > 533000000),
> > +	FIXED_CLK(CLK_TOP_PEXTP_PIPE, "pextp_pipe", NULL, 250000000),
> > +	FIXED_CLK(CLK_TOP_DSI_PHY, "dsi_phy", NULL, 500000000),
> > +};
> > +
> > +static const struct mtk_fixed_factor top_divs[] = {
> > +	FACTOR(CLK_TOP_MFGPLL, "mfgpll_ck", "mfgpll", 1, 1),
> > +	FACTOR(CLK_TOP_MAINPLL, "mainpll_ck", "mainpll", 1, 1),
> 
> Are you sure that mainpll and univpll should have
> CLK_SET_RATE_PARENT?
> This will give issues in GPU DVFS, as this is the case with all
> MediaTek SoCs.
> 
> Please check this series and add it as a dependency of yours:
> 
https://urldefense.com/v3/__https://patchwork.kernel.org/project/linux-mediatek/list/?series=688135__;!!CTRNKA9wMg0ARbw!0ko8NpKA8KW1vp4lw-WRRe2pw_N0Z-2gbeAkzhfmwf9yK25-Bw7TZFfqTTWM_FQFF6A$
>  
> 
> > +	FACTOR(CLK_TOP_MAINPLL_D3, "mainpll_d3", "mainpll_ck", 1, 3),
> > +	FACTOR(CLK_TOP_MAINPLL_D4, "mainpll_d4", "mainpll_ck", 1, 4),
> 
> ..snip..
> 
> > +
> > +static struct mtk_composite top_muxes[] = {
> > +	/* CLK_MISC_CFG_3 */
> > +	MUX(CLK_TOP_MFG_CK_FAST_REF, "mfg_ck_fast_ref",
> > mfg_fast_ref_parents, 0x0250, 8, 1),
> > +};
> 
> CLK_TOP_MFG_CK_FAST_REF is not a composite clock: you can register it
> with a call
> to devm_clk_hw_register_mux() in the probe function.
> 
> Check clk-mt8195-topckgen.c upstream for an example.
> 
> Regards,
> Angelo
> 

  Ok, I will use devm_clk_hw_register_mux() in the next version.

> Thanks,
> Best Regards,
> Garmin

From Garmin.Chang at mediatek.com  Thu Dec 22 23:47:41 2022
From: Garmin.Chang at mediatek.com (=?utf-8?B?R2FybWluIENoYW5nICjlvLXlrrbpipgp?=)
Date: Fri, 23 Dec 2022 07:47:41 +0000
Subject: [PATCH v2 2/2] soc: mediatek: pm-domains: Add support for mt8188
In-Reply-To: <ce3a47c67d4ac8a364cdea6cc4dda1d9c015b3d8.camel@mediatek.com>
References: <20220928084315.29187-1-Garmin.Chang@mediatek.com>
	 <20220928084315.29187-3-Garmin.Chang@mediatek.com>
	 <ca0f9e3c-ae3f-b886-bfe9-63d7e45c9b3c@collabora.com>
	 <ce3a47c67d4ac8a364cdea6cc4dda1d9c015b3d8.camel@mediatek.com>
Message-ID: <ebfd78894b326488a4321e8eed9dbc61b459f88b.camel@mediatek.com>

On Fri, 2022-11-25 at 11:27 +0800, garmin.chang wrote:
> On Tue, 2022-10-04 at 10:19 +0200, AngeloGioacchino Del Regno wrote:
> > Il 28/09/22 10:43, Garmin.Chang ha scritto:
> > > Add domain control data including bus protection data size
> > > change due to more protection steps in mt8188.
> > > 
> > > Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
> > > ---
> > >   drivers/soc/mediatek/mt8188-pm-domains.h | 623
> > > +++++++++++++++++++++++
> > >   drivers/soc/mediatek/mtk-pm-domains.c    |   5 +
> > >   include/linux/soc/mediatek/infracfg.h    | 121 +++++
> > >   3 files changed, 749 insertions(+)
> > >   create mode 100644 drivers/soc/mediatek/mt8188-pm-domains.h
> > > 
> > > diff --git a/drivers/soc/mediatek/mt8188-pm-domains.h
> > > b/drivers/soc/mediatek/mt8188-pm-domains.h
> > > new file mode 100644
> > > index 000000000000..63181f05457e
> > > --- /dev/null
> > > +++ b/drivers/soc/mediatek/mt8188-pm-domains.h
> > > @@ -0,0 +1,623 @@
> > > +/* SPDX-License-Identifier: GPL-2.0-only */
> > > +/*
> > > + * Copyright (c) 2022 MediaTek Inc.
> > > + * Author: Garmin Chang <garmin.chang at mediatek.com>
> > > + */
> > > +
> > > +#ifndef __SOC_MEDIATEK_MT8188_PM_DOMAINS_H
> > > +#define __SOC_MEDIATEK_MT8188_PM_DOMAINS_H
> > > +
> > > +#include "mtk-pm-domains.h"
> > > +#include <dt-bindings/power/mediatek,mt8188-power.h>
> > > +
> > > +/*
> > > + * MT8188 power domain support
> > > + */
> > > +
> > > +static const struct scpsys_domain_data
> > > scpsys_domain_data_mt8188[]
> > > = {
> > > +	[MT8188_POWER_DOMAIN_MFG0] = {
> > > +		.name = "mfg0",
> > > +		.sta_mask = BIT(1),
> > > +		.ctl_offs = 0x300,
> > > +		.pwr_sta_offs = 0x174,
> > > +		.pwr_sta2nd_offs = 0x178,
> > > +		.sram_pdn_bits = BIT(8),
> > > +		.sram_pdn_ack_bits = BIT(12),
> > > +		.caps = MTK_SCPD_KEEP_DEFAULT_OFF |
> > > MTK_SCPD_DOMAIN_SUPPLY,
> > > +	},
> > > +	[MT8188_POWER_DOMAIN_MFG1] = {
> > > +		.name = "mfg1",
> > > +		.sta_mask = BIT(2),
> > > +		.ctl_offs = 0x304,
> > > +		.pwr_sta_offs = 0x174,
> > > +		.pwr_sta2nd_offs = 0x178,
> > > +		.sram_pdn_bits = BIT(8),
> > > +		.sram_pdn_ack_bits = BIT(12),
> > > +		.bp_infracfg = {
> > > +			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MFG1_STEP1,
> > > +				    MT8188_TOP_AXI_PROT_EN_SET,
> > > +				    MT8188_TOP_AXI_PROT_EN_CLR,
> > > +				    MT8188_TOP_AXI_PROT_EN_STA),
> > > +			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP2
> > > ,
> > > +				    MT8188_TOP_AXI_PROT_EN_2_SET,
> > > +				    MT8188_TOP_AXI_PROT_EN_2_CLR,
> > > +				    MT8188_TOP_AXI_PROT_EN_2_STA),
> > > +			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_1_MFG1_STEP3
> > > ,
> > > +				    MT8188_TOP_AXI_PROT_EN_1_SET,
> > > +				    MT8188_TOP_AXI_PROT_EN_1_CLR,
> > > +				    MT8188_TOP_AXI_PROT_EN_1_STA),
> > > +			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP4
> > > ,
> > > +				    MT8188_TOP_AXI_PROT_EN_2_SET,
> > > +				    MT8188_TOP_AXI_PROT_EN_2_CLR,
> > > +				    MT8188_TOP_AXI_PROT_EN_2_STA),
> > > +			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MFG1_STEP5,
> > > +				    MT8188_TOP_AXI_PROT_EN_SET,
> > > +				    MT8188_TOP_AXI_PROT_EN_CLR,
> > > +				    MT8188_TOP_AXI_PROT_EN_STA),
> > > +			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VD
> > > NR_MFG1_STEP6,
> > > +				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VD
> > > NR_SET,
> > > +				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VD
> > > NR_CLR,
> > > +				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VD
> > > NR_STA),
> > > +		},
> > > +		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
> > 
> > Please add MTK_SCPD_DOMAIN_SUPPLY cap to MFG1 as well.
> > For more information, please look at:
> > 13bde169c6fe ("soc: mediatek: mtk-pm-domains: Allow probing vreg
> > supply on two MFGs")
> > 
> > Regards,
> > Angelo
> > 
> 
> Thank you for your suggestion.
> 
> Accroding to /sys/kernel/debug/pm_genpd/pm_genpd_summary, mfg0 is the
> parent of mfg1 and mfg1 is the parent of mfg2, mfg3 and mfg4.
> Before the devices power on mfg2, mfg3 and mfg4, system will power on
> mfg1 first. Also before the devices power on mfg1, system will power
> on
> mfg0 first.
> Because mfg0 is the root of mfg1, mfg2, mfg3 and mfg4 and
> MTK_SCPD_DOMAIN_SUPPLY is configured on mfg0, so
> MTK_SCPD_DOMAIN_SUPPLY
> is also applied on mfg1, mfg2, mfg3 and mfg4.
> 
> Thanks,
> Best Regards,
> Garmin


  I will apply 13bde169c6fe ("soc: mediatek: mtk-pm-domains: Allow 
  probing vreg supply on two MFGs") in next verion.

> Thanks,
> Best Regards,
> Garmin

From Garmin.Chang at mediatek.com  Fri Dec 23 00:05:51 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 23 Dec 2022 16:05:51 +0800
Subject: [PATCH v3 0/2] Add power domain support for MT8188
Message-ID: <20221223080553.9397-1-Garmin.Chang@mediatek.com>

Base on tag: next-20221220, linux-next/master

changes since v2:
- 	add MTK_SCPD_DOMAIN_SUPPLY cap to MFG1
- 	add MTK_SCPD_ALWAYS_ON cap to ADSP_INFRA

Garmin.Chang (2):
  dt-bindings: power: Add MT8188 power domains
  soc: mediatek: pm-domains: Add support for mt8188

 .../power/mediatek,power-controller.yaml      |   2 +
 drivers/soc/mediatek/mt8188-pm-domains.h      | 623 ++++++++++++++++++
 drivers/soc/mediatek/mtk-pm-domains.c         |   5 +
 .../dt-bindings/power/mediatek,mt8188-power.h |  44 ++
 include/linux/soc/mediatek/infracfg.h         | 121 ++++
 5 files changed, 795 insertions(+)
 create mode 100644 drivers/soc/mediatek/mt8188-pm-domains.h
 create mode 100644 include/dt-bindings/power/mediatek,mt8188-power.h

-- 
2.18.0



From Garmin.Chang at mediatek.com  Fri Dec 23 00:20:18 2022
From: Garmin.Chang at mediatek.com (=?utf-8?B?R2FybWluIENoYW5nICjlvLXlrrbpipgp?=)
Date: Fri, 23 Dec 2022 08:20:18 +0000
Subject: [PATCH v2 01/19] dt-bindings: ARM: MediaTek: Add new document
 bindings of MT8188 clock
In-Reply-To: <9092152a-35c9-1f80-8674-ea4124a1bb36@linaro.org>
References: <20221024094254.29218-1-Garmin.Chang@mediatek.com>
	 <20221024094254.29218-2-Garmin.Chang@mediatek.com>
	 <9092152a-35c9-1f80-8674-ea4124a1bb36@linaro.org>
Message-ID: <374127db954e43d47032f980bb7d9704a5bd2a1d.camel@mediatek.com>

On Thu, 2022-10-27 at 09:42 -0400, Krzysztof Kozlowski wrote:
> On 24/10/2022 05:42, Garmin.Chang wrote:
> > Add the new binding documentation for system clock
> > and functional clock on MediaTek MT8188.
> > 
> > Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
> > ---
> >  .../arm/mediatek/mediatek,mt8188-clock.yaml   |  70 ++
> >  .../mediatek/mediatek,mt8188-sys-clock.yaml   |  55 ++
> >  .../dt-bindings/clock/mediatek,mt8188-clk.h   | 733
> > ++++++++++++++++++
> >  3 files changed, 858 insertions(+)
> >  create mode 100644
> > Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-
> > clock.yaml
> >  create mode 100644
> > Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-sys-
> > clock.yaml
> >  create mode 100644 include/dt-bindings/clock/mediatek,mt8188-clk.h
> > 
> > diff --git
> > a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-
> > clock.yaml
> > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-
> > clock.yaml
> > new file mode 100644
> > index 000000000000..49dc681e6601
> > --- /dev/null
> > +++
> > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-
> > clock.yaml
> > @@ -0,0 +1,70 @@
> > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: 
> > https://urldefense.com/v3/__http://devicetree.org/schemas/arm/mediatek/mediatek,mt8188-clock.yaml*__;Iw!!CTRNKA9wMg0ARbw!wZzNWz-zx7aQt1mTYTK-EfPEClJbCe_W0mEIFXwO3yquqcZp6T7_NpqtvnDuCceTAZs$
> >  
> > +$schema: 
> > https://urldefense.com/v3/__http://devicetree.org/meta-schemas/core.yaml*__;Iw!!CTRNKA9wMg0ARbw!wZzNWz-zx7aQt1mTYTK-EfPEClJbCe_W0mEIFXwO3yquqcZp6T7_NpqtvnDuHuGTk0U$
> >  
> > +
> > +title: MediaTek Functional Clock Controller for MT8188
> > +
> > +maintainers:
> > +  - Garmin Chang <garmin.chang at mediatek.com>
> > +
> > +description: |
> > +  The clock architecture in MediaTek like below
> > +  PLLs -->
> > +          dividers -->
> > +                      muxes
> > +                           -->
> > +                              clock gate
> > +
> > +  The devices provide clock gate control in different IP blocks.
> > +
> > +properties:
> > +  compatible:
> > +    enum:
> > +      - mediatek,mt8188-adsp_audio26m
> 
> No underscores in compatibles.
> 
> > +      - mediatek,mt8188-imp_iic_wrap_c
> > +      - mediatek,mt8188-imp_iic_wrap_en
> > +      - mediatek,mt8188-imp_iic_wrap_w
> > +      - mediatek,mt8188-mfgcfg
> > +      - mediatek,mt8188-vppsys0
> > +      - mediatek,mt8188-wpesys
> > +      - mediatek,mt8188-wpesys_vpp0
> > +      - mediatek,mt8188-vppsys1
> > +      - mediatek,mt8188-imgsys
> > +      - mediatek,mt8188-imgsys_wpe1
> > +      - mediatek,mt8188-imgsys_wpe2
> > +      - mediatek,mt8188-imgsys_wpe3
> > +      - mediatek,mt8188-imgsys1_dip_top
> > +      - mediatek,mt8188-imgsys1_dip_nr
> > +      - mediatek,mt8188-ipesys
> > +      - mediatek,mt8188-camsys
> > +      - mediatek,mt8188-camsys_rawa
> > +      - mediatek,mt8188-camsys_yuva
> > +      - mediatek,mt8188-camsys_rawb
> > +      - mediatek,mt8188-camsys_yuvb
> > +      - mediatek,mt8188-ccusys
> > +      - mediatek,mt8188-vdecsys_soc
> > +      - mediatek,mt8188-vdecsys
> > +      - mediatek,mt8188-vencsys
> 
> Blank line here
> 
> > +  reg:
> > +    maxItems: 1
> > +
> > +  '#clock-cells':
> > +    const: 1
> > +
> > +required:
> > +  - compatible
> > +  - reg
> > +  - '#clock-cells'
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > +  - |
> > +    imp_iic_wrap_c: clock-controller at 11283000 {
> 
> Drop the label, not used,
> 
> > +        compatible = "mediatek,mt8188-imp_iic_wrap_c";
> > +        reg = <0x11283000 0x1000>;
> > +        #clock-cells = <1>;
> > +    };
> > +
> > diff --git
> > a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-
> > sys-clock.yaml
> > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-
> > sys-clock.yaml
> > new file mode 100644
> > index 000000000000..35962b3746e1
> > --- /dev/null
> > +++
> > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-
> > sys-clock.yaml
> > @@ -0,0 +1,55 @@
> > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: 
> > https://urldefense.com/v3/__http://devicetree.org/schemas/arm/mediatek/mediatek,mt8188-sys-clock.yaml*__;Iw!!CTRNKA9wMg0ARbw!wZzNWz-zx7aQt1mTYTK-EfPEClJbCe_W0mEIFXwO3yquqcZp6T7_NpqtvnDu6W88Oqk$
> >  
> > +$schema: 
> > https://urldefense.com/v3/__http://devicetree.org/meta-schemas/core.yaml*__;Iw!!CTRNKA9wMg0ARbw!wZzNWz-zx7aQt1mTYTK-EfPEClJbCe_W0mEIFXwO3yquqcZp6T7_NpqtvnDuHuGTk0U$
> >  
> > +
> > +title: MediaTek System Clock Controller for MT8188
> > +
> > +maintainers:
> > +  - Garmin Chang <garmin.chang at mediatek.com>
> > +
> > +description: |
> > +  The clock architecture in MediaTek like below
> > +  PLLs -->
> > +          dividers -->
> > +                      muxes
> > +                           -->
> > +                              clock gate
> > +
> > +  The apmixedsys provides most of PLLs which generated from SoC
> > 26m.
> > +  The topckgen provides dividers and muxes which provide the clock
> > source to other IP blocks.
> > +  The infracfg_ao provides clock gate in peripheral and
> > infrastructure IP blocks.
> > +  The mcusys provides mux control to select the clock source in AP
> > MCU.
> > +  The device nodes also provide the system control capacity for
> > configuration.
> > +
> > +properties:
> > +  compatible:
> > +    items:
> > +      - enum:
> > +          - mediatek,mt8188-topckgen
> > +          - mediatek,mt8188-infracfg_ao
> 
> Same comment.
> 
> > +          - mediatek,mt8188-apmixedsys
> > +          - mediatek,mt8188-pericfg_ao
> > +      - const: syscon
> > +
> > +  reg:
> > +    maxItems: 1
> > +
> > +  '#clock-cells':
> > +    const: 1
> > +
> > +required:
> > +  - compatible
> > +  - reg
> > +  - '#clock-cells'
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > +  - |
> > +    topckgen: syscon at 10000000 {
> 
> Drop label.
> 
> > +        compatible = "mediatek,mt8188-topckgen", "syscon";
> > +        reg = <0x10000000 0x1000>;
> > +        #clock-cells = <1>;
> 
> Best regards,
> Krzysztof
> 

  Thank you for your suggestions.

  I will modify underscores in compatibles, add blank line and drop    
  label.

> Thanks,
> Best Regards,
> Garmin

From krzysztof.kozlowski at linaro.org  Fri Dec 23 00:52:52 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Fri, 23 Dec 2022 09:52:52 +0100
Subject: [PATCH v1 08/25] dt-bindings: clock: mt8173: Add dummy clock ID
In-Reply-To: <20221222114857.120060-9-angelogioacchino.delregno@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
 <20221222114857.120060-9-angelogioacchino.delregno@collabora.com>
Message-ID: <869ae494-d74e-03a0-3622-b3a2b0b10470@linaro.org>

On 22/12/2022 12:48, AngeloGioacchino Del Regno wrote:
> Some old MediaTek clock drivers are starting the clock count (so, the
> clock ID) from one instead of zero and this is logically incorrect,
> as we should start from 0.
> During a cleanup an issue emerged due to that and the cleanest and
> shortest way to keep devicetree backwards compatibility while still
> performing the well deserved cleanup is to add a dummy clock where
> needed, with ID 0.

Unfortunately I do not understand at all why adding dummy (fake) ID
cleans anything here. Unifying IDs to start from 0 is not an argument on
DT bindings header IDs.

Best regards,
Krzysztof



From Garmin.Chang at mediatek.com  Fri Dec 23 00:05:53 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 23 Dec 2022 16:05:53 +0800
Subject: [PATCH v3 2/2] soc: mediatek: pm-domains: Add support for mt8188
In-Reply-To: <20221223080553.9397-1-Garmin.Chang@mediatek.com>
References: <20221223080553.9397-1-Garmin.Chang@mediatek.com>
Message-ID: <20221223080553.9397-3-Garmin.Chang@mediatek.com>

Add domain control data including bus protection data size
change due to more protection steps in mt8188.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/soc/mediatek/mt8188-pm-domains.h | 623 +++++++++++++++++++++++
 drivers/soc/mediatek/mtk-pm-domains.c    |   5 +
 include/linux/soc/mediatek/infracfg.h    | 121 +++++
 3 files changed, 749 insertions(+)
 create mode 100644 drivers/soc/mediatek/mt8188-pm-domains.h

diff --git a/drivers/soc/mediatek/mt8188-pm-domains.h b/drivers/soc/mediatek/mt8188-pm-domains.h
new file mode 100644
index 000000000000..0692cb444ed0
--- /dev/null
+++ b/drivers/soc/mediatek/mt8188-pm-domains.h
@@ -0,0 +1,623 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Garmin Chang <garmin.chang at mediatek.com>
+ */
+
+#ifndef __SOC_MEDIATEK_MT8188_PM_DOMAINS_H
+#define __SOC_MEDIATEK_MT8188_PM_DOMAINS_H
+
+#include "mtk-pm-domains.h"
+#include <dt-bindings/power/mediatek,mt8188-power.h>
+
+/*
+ * MT8188 power domain support
+ */
+
+static const struct scpsys_domain_data scpsys_domain_data_mt8188[] = {
+	[MT8188_POWER_DOMAIN_MFG0] = {
+		.name = "mfg0",
+		.sta_mask = BIT(1),
+		.ctl_offs = 0x300,
+		.pwr_sta_offs = 0x174,
+		.pwr_sta2nd_offs = 0x178,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
+	},
+	[MT8188_POWER_DOMAIN_MFG1] = {
+		.name = "mfg1",
+		.sta_mask = BIT(2),
+		.ctl_offs = 0x304,
+		.pwr_sta_offs = 0x174,
+		.pwr_sta2nd_offs = 0x178,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MFG1_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_SET,
+				    MT8188_TOP_AXI_PROT_EN_CLR,
+				    MT8188_TOP_AXI_PROT_EN_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_1_MFG1_STEP3,
+				    MT8188_TOP_AXI_PROT_EN_1_SET,
+				    MT8188_TOP_AXI_PROT_EN_1_CLR,
+				    MT8188_TOP_AXI_PROT_EN_1_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP4,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MFG1_STEP5,
+				    MT8188_TOP_AXI_PROT_EN_SET,
+				    MT8188_TOP_AXI_PROT_EN_CLR,
+				    MT8188_TOP_AXI_PROT_EN_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_MFG1_STEP6,
+				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
+				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
+				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
+	},
+	[MT8188_POWER_DOMAIN_MFG2] = {
+		.name = "mfg2",
+		.sta_mask = BIT(3),
+		.ctl_offs = 0x308,
+		.pwr_sta_offs = 0x174,
+		.pwr_sta2nd_offs = 0x178,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_MFG3] = {
+		.name = "mfg3",
+		.sta_mask = BIT(4),
+		.ctl_offs = 0x30C,
+		.pwr_sta_offs = 0x174,
+		.pwr_sta2nd_offs = 0x178,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_MFG4] = {
+		.name = "mfg4",
+		.sta_mask = BIT(5),
+		.ctl_offs = 0x310,
+		.pwr_sta_offs = 0x174,
+		.pwr_sta2nd_offs = 0x178,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_PEXTP_MAC_P0] = {
+		.name = "pextp_mac_p0",
+		.sta_mask = BIT(10),
+		.ctl_offs = 0x324,
+		.pwr_sta_offs = 0x174,
+		.pwr_sta2nd_offs = 0x178,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_PEXTP_MAC_P0_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_SET,
+				    MT8188_TOP_AXI_PROT_EN_CLR,
+				    MT8188_TOP_AXI_PROT_EN_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_PEXTP_MAC_P0_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_PEXTP_PHY_TOP] = {
+		.name = "pextp_phy_top",
+		.sta_mask = BIT(12),
+		.ctl_offs = 0x328,
+		.pwr_sta_offs = 0x174,
+		.pwr_sta2nd_offs = 0x178,
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_CSIRX_TOP] = {
+		.name = "pextp_csirx_top",
+		.sta_mask = BIT(17),
+		.ctl_offs = 0x3C4,
+		.pwr_sta_offs = 0x174,
+		.pwr_sta2nd_offs = 0x178,
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_ETHER] = {
+		.name = "ether",
+		.sta_mask = BIT(1),
+		.ctl_offs = 0x338,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_ETHER_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
+	},
+	[MT8188_POWER_DOMAIN_HDMI_TX] = {
+		.name = "hdmi_tx",
+		.sta_mask = BIT(18),
+		.ctl_offs = 0x37C,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_HDMI_TX_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
+	},
+	[MT8188_POWER_DOMAIN_ADSP_AO] = {
+		.name = "adsp_ao",
+		.sta_mask = BIT(10),
+		.ctl_offs = 0x35C,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+		},
+		.caps = MTK_SCPD_ALWAYS_ON,
+	},
+	[MT8188_POWER_DOMAIN_ADSP_INFRA] = {
+		.name = "adsp_infra",
+		.sta_mask = BIT(9),
+		.ctl_offs = 0x358,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+		},
+		.caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_ALWAYS_ON,
+	},
+	[MT8188_POWER_DOMAIN_ADSP] = {
+		.name = "adsp",
+		.sta_mask = BIT(8),
+		.ctl_offs = 0x354,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_SRAM_ISO | MTK_SCPD_ACTIVE_WAKEUP,
+	},
+	[MT8188_POWER_DOMAIN_AUDIO] = {
+		.name = "audio",
+		.sta_mask = BIT(6),
+		.ctl_offs = 0x34C,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
+	},
+	[MT8188_POWER_DOMAIN_AUDIO_ASRC] = {
+		.name = "audio_asrc",
+		.sta_mask = BIT(7),
+		.ctl_offs = 0x350,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_VPPSYS0] = {
+		.name = "vppsys0",
+		.sta_mask = BIT(11),
+		.ctl_offs = 0x360,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_SET,
+				    MT8188_TOP_AXI_PROT_EN_CLR,
+				    MT8188_TOP_AXI_PROT_EN_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP3,
+				    MT8188_TOP_AXI_PROT_EN_SET,
+				    MT8188_TOP_AXI_PROT_EN_CLR,
+				    MT8188_TOP_AXI_PROT_EN_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP4,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VPPSYS0_STEP5,
+				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
+				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
+				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA),
+		},
+	},
+	[MT8188_POWER_DOMAIN_VDOSYS0] = {
+		.name = "vdosys0",
+		.sta_mask = BIT(13),
+		.ctl_offs = 0x368,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS0_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VDOSYS0_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_SET,
+				    MT8188_TOP_AXI_PROT_EN_CLR,
+				    MT8188_TOP_AXI_PROT_EN_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VDOSYS0_STEP3,
+				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET,
+				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR,
+				    MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA),
+		},
+	},
+	[MT8188_POWER_DOMAIN_VDOSYS1] = {
+		.name = "vdosys1",
+		.sta_mask = BIT(14),
+		.ctl_offs = 0x36C,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VDOSYS1_STEP3,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+		},
+	},
+	[MT8188_POWER_DOMAIN_DP_TX] = {
+		.name = "dp_tx",
+		.sta_mask = BIT(16),
+		.ctl_offs = 0x374,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_DP_TX_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_EDP_TX] = {
+		.name = "edp_tx",
+		.sta_mask = BIT(17),
+		.ctl_offs = 0x378,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_EDP_TX_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR,
+				    MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_VPPSYS1] = {
+		.name = "vppsys1",
+		.sta_mask = BIT(12),
+		.ctl_offs = 0x364,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS1_STEP3,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+		},
+	},
+	[MT8188_POWER_DOMAIN_WPE] = {
+		.name = "wpe",
+		.sta_mask = BIT(15),
+		.ctl_offs = 0x370,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_VDEC0] = {
+		.name = "vdec0",
+		.sta_mask = BIT(19),
+		.ctl_offs = 0x380,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC0_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VDEC0_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_VDEC1] = {
+		.name = "vdec1",
+		.sta_mask = BIT(20),
+		.ctl_offs = 0x384,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_VENC] = {
+		.name = "venc",
+		.sta_mask = BIT(22),
+		.ctl_offs = 0x38C,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VENC_STEP3,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_IMG_VCORE] = {
+		.name = "vcore",
+		.sta_mask = BIT(28),
+		.ctl_offs = 0x3A4,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_VCORE_STEP3,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
+	},
+	[MT8188_POWER_DOMAIN_IMG_MAIN] = {
+		.name = "img_main",
+		.sta_mask = BIT(29),
+		.ctl_offs = 0x3A8,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_DIP] = {
+		.name = "dip",
+		.sta_mask = BIT(30),
+		.ctl_offs = 0x3AC,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_IPE] = {
+		.name = "ipe",
+		.sta_mask = BIT(31),
+		.ctl_offs = 0x3B0,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_CAM_VCORE] = {
+		.name = "cam_vcore",
+		.sta_mask = BIT(27),
+		.ctl_offs = 0x3A0,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_VCORE_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_1_CAM_VCORE_STEP3,
+				    MT8188_TOP_AXI_PROT_EN_1_SET,
+				    MT8188_TOP_AXI_PROT_EN_1_CLR,
+				    MT8188_TOP_AXI_PROT_EN_1_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP4,
+				    MT8188_TOP_AXI_PROT_EN_MM_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_VCORE_STEP5,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
+	},
+	[MT8188_POWER_DOMAIN_CAM_MAIN] = {
+		.name = "cam_main",
+		.sta_mask = BIT(24),
+		.ctl_offs = 0x394,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.bp_infracfg = {
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP1,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP2,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP3,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_MM_2_STA),
+			BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP4,
+				    MT8188_TOP_AXI_PROT_EN_2_SET,
+				    MT8188_TOP_AXI_PROT_EN_2_CLR,
+				    MT8188_TOP_AXI_PROT_EN_2_STA),
+		},
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_CAM_SUBA] = {
+		.name = "cam_suba",
+		.sta_mask = BIT(25),
+		.ctl_offs = 0x398,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+	[MT8188_POWER_DOMAIN_CAM_SUBB] = {
+		.name = "cam_subb",
+		.sta_mask = BIT(26),
+		.ctl_offs = 0x39C,
+		.pwr_sta_offs = 0x16C,
+		.pwr_sta2nd_offs = 0x170,
+		.sram_pdn_bits = BIT(8),
+		.sram_pdn_ack_bits = BIT(12),
+		.caps = MTK_SCPD_KEEP_DEFAULT_OFF,
+	},
+};
+
+static const struct scpsys_soc_data mt8188_scpsys_data = {
+	.domains_data = scpsys_domain_data_mt8188,
+	.num_domains = ARRAY_SIZE(scpsys_domain_data_mt8188),
+};
+
+#endif /* __SOC_MEDIATEK_MT8188_PM_DOMAINS_H */
diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c
index 474b272f9b02..ea3878bf4387 100644
--- a/drivers/soc/mediatek/mtk-pm-domains.c
+++ b/drivers/soc/mediatek/mtk-pm-domains.c
@@ -21,6 +21,7 @@
 #include "mt8173-pm-domains.h"
 #include "mt8183-pm-domains.h"
 #include "mt8186-pm-domains.h"
+#include "mt8188-pm-domains.h"
 #include "mt8192-pm-domains.h"
 #include "mt8195-pm-domains.h"
 
@@ -579,6 +580,10 @@ static const struct of_device_id scpsys_of_match[] = {
 		.compatible = "mediatek,mt8186-power-controller",
 		.data = &mt8186_scpsys_data,
 	},
+	{
+		.compatible = "mediatek,mt8188-power-controller",
+		.data = &mt8188_scpsys_data,
+	},
 	{
 		.compatible = "mediatek,mt8192-power-controller",
 		.data = &mt8192_scpsys_data,
diff --git a/include/linux/soc/mediatek/infracfg.h b/include/linux/soc/mediatek/infracfg.h
index 50804ac748bd..07f67b3d8e97 100644
--- a/include/linux/soc/mediatek/infracfg.h
+++ b/include/linux/soc/mediatek/infracfg.h
@@ -140,6 +140,127 @@
 #define MT8192_TOP_AXI_PROT_EN_MM_2_MDP_2ND		BIT(13)
 #define MT8192_TOP_AXI_PROT_EN_VDNR_CAM			BIT(21)
 
+#define MT8188_TOP_AXI_PROT_EN_SET				0x2A0
+#define MT8188_TOP_AXI_PROT_EN_CLR				0x2A4
+#define MT8188_TOP_AXI_PROT_EN_STA				0x228
+#define MT8188_TOP_AXI_PROT_EN_1_SET				0x2A8
+#define MT8188_TOP_AXI_PROT_EN_1_CLR				0x2AC
+#define MT8188_TOP_AXI_PROT_EN_1_STA				0x258
+#define MT8188_TOP_AXI_PROT_EN_2_SET				0x714
+#define MT8188_TOP_AXI_PROT_EN_2_CLR				0x718
+#define MT8188_TOP_AXI_PROT_EN_2_STA				0x724
+
+#define MT8188_TOP_AXI_PROT_EN_MM_SET				0x2D4
+#define MT8188_TOP_AXI_PROT_EN_MM_CLR				0x2D8
+#define MT8188_TOP_AXI_PROT_EN_MM_STA				0x2EC
+#define MT8188_TOP_AXI_PROT_EN_MM_2_SET				0xDCC
+#define MT8188_TOP_AXI_PROT_EN_MM_2_CLR				0xDD0
+#define MT8188_TOP_AXI_PROT_EN_MM_2_STA				0xDD8
+
+#define MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET			0xB84
+#define MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR			0xB88
+#define MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA			0xB90
+#define MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET		0xBCC
+#define MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR		0xBD0
+#define MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA		0xBD8
+
+#define MT8188_TOP_AXI_PROT_EN_MFG1_STEP1			BIT(11)
+#define MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP2			BIT(7)
+#define MT8188_TOP_AXI_PROT_EN_1_MFG1_STEP3			BIT(19)
+#define MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP4			BIT(5)
+#define MT8188_TOP_AXI_PROT_EN_MFG1_STEP5			GENMASK(22, 21)
+#define MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_MFG1_STEP6	BIT(17)
+
+#define MT8188_TOP_AXI_PROT_EN_PEXTP_MAC_P0_STEP1		BIT(2)
+#define MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_PEXTP_MAC_P0_STEP2	(BIT(8) | BIT(18) | BIT(30))
+#define MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_ETHER_STEP1		BIT(24)
+#define MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_HDMI_TX_STEP1		BIT(20)
+#define MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP1			GENMASK(31, 29)
+#define MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP2			(GENMASK(4, 3) | BIT(28))
+#define MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP1		(GENMASK(16, 14) | BIT(23) | \
+								BIT(27))
+#define MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP2		(GENMASK(19, 17) | GENMASK(26, 25))
+#define MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP1			GENMASK(11, 8)
+#define MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP2			GENMASK(22, 21)
+#define MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP1			BIT(20)
+#define MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP2			BIT(12)
+#define MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP1		BIT(24)
+#define MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP2		BIT(13)
+
+#define MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP1			BIT(10)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP2		GENMASK(9, 8)
+#define MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP3			BIT(23)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP4		(BIT(1) | BIT(4) | BIT(11))
+#define MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VPPSYS0_STEP5	(BIT(20))
+#define MT8188_TOP_AXI_PROT_EN_MM_VDOSYS0_STEP1			(GENMASK(18, 17) | GENMASK(21, 20))
+#define MT8188_TOP_AXI_PROT_EN_VDOSYS0_STEP2			BIT(6)
+#define MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VDOSYS0_STEP3	BIT(21)
+#define MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP1			GENMASK(31, 30)
+#define MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP2			BIT(22)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_VDOSYS1_STEP3		BIT(10)
+#define MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_DP_TX_STEP1		BIT(23)
+#define MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_EDP_TX_STEP1		BIT(22)
+
+#define MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP1			GENMASK(6, 5)
+#define MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP2			BIT(23)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS1_STEP3		BIT(18)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP1			BIT(23)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP2			BIT(21)
+#define MT8188_TOP_AXI_PROT_EN_MM_VDEC0_STEP1			BIT(13)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_VDEC0_STEP2			BIT(13)
+#define MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP1			BIT(14)
+#define MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP2			BIT(29)
+#define MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP1			(BIT(9) | BIT(11))
+#define MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP2			BIT(26)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_VENC_STEP3			BIT(2)
+#define MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP1		(BIT(1) | BIT(3))
+#define MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP2		BIT(25)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_IMG_VCORE_STEP3		BIT(16)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP1		GENMASK(27, 26)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP2		GENMASK(25, 24)
+#define MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP1		(BIT(2) | BIT(4))
+#define MT8188_TOP_AXI_PROT_EN_2_CAM_VCORE_STEP2		BIT(0)
+#define MT8188_TOP_AXI_PROT_EN_1_CAM_VCORE_STEP3		BIT(22)
+#define MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP4		BIT(24)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_CAM_VCORE_STEP5		BIT(17)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP1		GENMASK(31, 30)
+#define MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP2			BIT(2)
+#define MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP3		GENMASK(29, 28)
+#define MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP4			BIT(1)
+
+#define MT8188_SMI_COMMON_CLAMP_EN_STA				0x3C0
+#define MT8188_SMI_COMMON_CLAMP_EN_SET				0x3C4
+#define MT8188_SMI_COMMON_CLAMP_EN_CLR				0x3C8
+
+#define MT8188_SMI_COMMON_SMI_CLAMP_DIP_TO_VDO0			GENMASK(3, 1)
+#define MT8188_SMI_COMMON_SMI_CLAMP_DIP_TO_VPP1			GENMASK(2, 1)
+#define MT8188_SMI_COMMON_SMI_CLAMP_IPE_TO_VPP1			BIT(0)
+
+#define MT8188_SMI_COMMON_SMI_CLAMP_CAM_SUBA_TO_VPP0		GENMASK(3, 2)
+#define MT8188_SMI_COMMON_SMI_CLAMP_CAM_SUBB_TO_VDO0		GENMASK(3, 2)
+
+#define MT8188_SMI_LARB10_RESET_ADDR				0xC
+#define MT8188_SMI_LARB11A_RESET_ADDR				0xC
+#define MT8188_SMI_LARB11C_RESET_ADDR				0xC
+#define MT8188_SMI_LARB12_RESET_ADDR				0xC
+#define MT8188_SMI_LARB11B_RESET_ADDR				0xC
+#define MT8188_SMI_LARB15_RESET_ADDR				0xC
+#define MT8188_SMI_LARB16B_RESET_ADDR				0xA0
+#define MT8188_SMI_LARB17B_RESET_ADDR				0xA0
+#define MT8188_SMI_LARB16A_RESET_ADDR				0xA0
+#define MT8188_SMI_LARB17A_RESET_ADDR				0xA0
+
+#define MT8188_SMI_LARB10_RESET					BIT(0)
+#define MT8188_SMI_LARB11A_RESET				BIT(0)
+#define MT8188_SMI_LARB11C_RESET				BIT(0)
+#define MT8188_SMI_LARB12_RESET					BIT(8)
+#define MT8188_SMI_LARB11B_RESET				BIT(0)
+#define MT8188_SMI_LARB15_RESET					BIT(0)
+#define MT8188_SMI_LARB16B_RESET				BIT(4)
+#define MT8188_SMI_LARB17B_RESET				BIT(4)
+#define MT8188_SMI_LARB16A_RESET				BIT(4)
+#define MT8188_SMI_LARB17A_RESET				BIT(4)
+
 #define MT8186_TOP_AXI_PROT_EN_SET			(0x2A0)
 #define MT8186_TOP_AXI_PROT_EN_CLR			(0x2A4)
 #define MT8186_TOP_AXI_PROT_EN_STA			(0x228)
-- 
2.18.0



From peter.wang at mediatek.com  Fri Dec 23 00:41:58 2022
From: peter.wang at mediatek.com (peter.wang at mediatek.com)
Date: Fri, 23 Dec 2022 16:41:58 +0800
Subject: [PATCH v2] ufs: core: wlun resume SSU(Acitve) fail recovery
Message-ID: <20221223084158.10069-1-peter.wang@mediatek.com>

From: Peter Wang <peter.wang at mediatek.com>

When wlun resume SSU(Active) timeout, scsi try eh_host_reset_handler.
But ufshcd_eh_host_reset_handler hang at wait flush_work(&hba->eh_work).
And ufshcd_err_handler hang at wait rpm resume.
Do link recovery only in this case. Below is IO hang stack dump.

<ffffffdd78e02b34> schedule+0x110/0x204
<ffffffdd78e0be60> schedule_timeout+0x98/0x138
<ffffffdd78e040e8> wait_for_common_io+0x130/0x2d0
<ffffffdd77d6a000> blk_execute_rq+0x10c/0x16c
<ffffffdd78126d90> __scsi_execute+0xfc/0x278
<ffffffdd7813891c> ufshcd_set_dev_pwr_mode+0x1c8/0x40c
<ffffffdd78137d1c> __ufshcd_wl_resume+0xf0/0x5cc
<ffffffdd78137ae0> ufshcd_wl_runtime_resume+0x40/0x18c
<ffffffdd78136108> scsi_runtime_resume+0x88/0x104
<ffffffdd7809a4f8> __rpm_callback+0x1a0/0xaec
<ffffffdd7809b624> rpm_resume+0x7e0/0xcd0
<ffffffdd7809a788> __rpm_callback+0x430/0xaec
<ffffffdd7809b644> rpm_resume+0x800/0xcd0
<ffffffdd780a0778> pm_runtime_work+0x148/0x198

<ffffffdd78e02b34> schedule+0x110/0x204
<ffffffdd78e0be10> schedule_timeout+0x48/0x138
<ffffffdd78e03d9c> wait_for_common+0x144/0x2dc
<ffffffdd7758bba4> __flush_work+0x3d0/0x508
<ffffffdd7815572c> ufshcd_eh_host_reset_handler+0x134/0x3a8
<ffffffdd781216f4> scsi_try_host_reset+0x54/0x204
<ffffffdd78120594> scsi_eh_ready_devs+0xb30/0xd48
<ffffffdd7812373c> scsi_error_handler+0x260/0x874

<ffffffdd78e02b34> schedule+0x110/0x204
<ffffffdd7809af64> rpm_resume+0x120/0xcd0
<ffffffdd7809fde8> __pm_runtime_resume+0xa0/0x17c
<ffffffdd7815193c> ufshcd_err_handling_prepare+0x40/0x430
<ffffffdd7814cce8> ufshcd_err_handler+0x1c4/0xd4c

Signed-off-by: Peter Wang <peter.wang at mediatek.com>
---
 drivers/ufs/core/ufshcd.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index e18c9f4463ec..de20cf587fa1 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -7363,9 +7363,27 @@ static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd)
 	int err = SUCCESS;
 	unsigned long flags;
 	struct ufs_hba *hba;
+	struct device *dev;
 
 	hba = shost_priv(cmd->device->host);
 
+	/*
+	 * If __ufshcd_wl_suspend get fail and runtime_status = RPM_RESUMING,
+	 * do link recovery only. Because schedule eh work will get dead lock
+	 * in ufshcd_rpm_get_sync to wait wlun resume, but wlun resume get
+	 * error and wait eh work finish.
+	 */
+	dev = &hba->ufs_device_wlun->sdev_gendev;
+	if (dev->power.runtime_status == RPM_RESUMING) {
+		err = ufshcd_link_recovery(hba);
+		if (err) {
+			dev_err(hba->dev, "WL Device PM: status:%d, err:%d\n",
+				dev->power.runtime_status,
+				dev->power.runtime_error);
+		}
+		return err;
+	}
+
 	spin_lock_irqsave(hba->host->host_lock, flags);
 	hba->force_reset = true;
 	ufshcd_schedule_eh_work(hba);
-- 
2.18.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:21:45 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:21:45 +0100
Subject: [PATCH v1 08/25] dt-bindings: clock: mt8173: Add dummy clock ID
In-Reply-To: <869ae494-d74e-03a0-3622-b3a2b0b10470@linaro.org>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
 <20221222114857.120060-9-angelogioacchino.delregno@collabora.com>
 <869ae494-d74e-03a0-3622-b3a2b0b10470@linaro.org>
Message-ID: <960b0707-f0e5-993b-3706-a7a275e0698f@collabora.com>

Il 23/12/22 09:52, Krzysztof Kozlowski ha scritto:
> On 22/12/2022 12:48, AngeloGioacchino Del Regno wrote:
>> Some old MediaTek clock drivers are starting the clock count (so, the
>> clock ID) from one instead of zero and this is logically incorrect,
>> as we should start from 0.
>> During a cleanup an issue emerged due to that and the cleanest and
>> shortest way to keep devicetree backwards compatibility while still
>> performing the well deserved cleanup is to add a dummy clock where
>> needed, with ID 0.
> 
> Unfortunately I do not understand at all why adding dummy (fake) ID
> cleans anything here. Unifying IDs to start from 0 is not an argument on
> DT bindings header IDs.
> 
> Best regards,
> Krzysztof
> 
> 

All clocks are in one or multiple arrays, and if we don't register ID 0,
devicetrees will reference the wrong clock, as the IDs will shift back by
one during registration.

This was done for a commonization of probe() and remove() callbacks for
MediaTek clock drivers... since we have 3 affected SoCs (MT8173, MT2701
and MT6779) out of *19* (soon 20), to me, it didn't make sense to write
commonized code to address this just because of 3 out of 20 SoCs (note
that each SoC has around 4 clock drivers).

Any suggestion to keep this one short, while not touching dt-bindings?

Regards,
Angelo


From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:24:29 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:24:29 +0100
Subject: [PATCH v5 1/2] stmmac: dwmac-mediatek: enable 2ns delay only for
 special cases
In-Reply-To: <20221223015029.24978-2-biao.huang@mediatek.com>
References: <20221223015029.24978-1-biao.huang@mediatek.com>
 <20221223015029.24978-2-biao.huang@mediatek.com>
Message-ID: <bfc4c7b5-3d5b-e087-1e33-1c461e361802@collabora.com>

Il 23/12/22 02:50, Biao Huang ha scritto:
> In current driver, MAC will always enable 2ns delay in RGMII mode,
> but that will lead to transmission failures for "rgmii-id"/"rgmii-txid"
> cases.
> 
> Modify the implementation of fix_mac_speed() to ensure the 2ns delay
> will only take effect for "rgmii-rxid"/"rgmii" cases, then user can
> choose phy-mode freely.
> 
> Fixes: f2d356a6ab71 ("stmmac: dwmac-mediatek: add support for mt8195")
> Signed-off-by: Biao Huang <biao.huang at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:24:51 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:24:51 +0100
Subject: [PATCH v5 2/2] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <20221223015029.24978-3-biao.huang@mediatek.com>
References: <20221223015029.24978-1-biao.huang@mediatek.com>
 <20221223015029.24978-3-biao.huang@mediatek.com>
Message-ID: <d7c50228-5d4e-8c73-28b3-4950917708a0@collabora.com>

Il 23/12/22 02:50, Biao Huang ha scritto:
> Add Ethernet controller node for mt8195.
> 
> Signed-off-by: Biao Huang <biao.huang at mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>




From krzysztof.kozlowski at linaro.org  Fri Dec 23 01:26:35 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Fri, 23 Dec 2022 10:26:35 +0100
Subject: [PATCH v1 08/25] dt-bindings: clock: mt8173: Add dummy clock ID
In-Reply-To: <960b0707-f0e5-993b-3706-a7a275e0698f@collabora.com>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
 <20221222114857.120060-9-angelogioacchino.delregno@collabora.com>
 <869ae494-d74e-03a0-3622-b3a2b0b10470@linaro.org>
 <960b0707-f0e5-993b-3706-a7a275e0698f@collabora.com>
Message-ID: <46edd627-c128-b979-823f-0a94fe9d425b@linaro.org>

On 23/12/2022 10:21, AngeloGioacchino Del Regno wrote:
> Il 23/12/22 09:52, Krzysztof Kozlowski ha scritto:
>> On 22/12/2022 12:48, AngeloGioacchino Del Regno wrote:
>>> Some old MediaTek clock drivers are starting the clock count (so, the
>>> clock ID) from one instead of zero and this is logically incorrect,
>>> as we should start from 0.
>>> During a cleanup an issue emerged due to that and the cleanest and
>>> shortest way to keep devicetree backwards compatibility while still
>>> performing the well deserved cleanup is to add a dummy clock where
>>> needed, with ID 0.
>>
>> Unfortunately I do not understand at all why adding dummy (fake) ID
>> cleans anything here. Unifying IDs to start from 0 is not an argument on
>> DT bindings header IDs.
>>
>> Best regards,
>> Krzysztof
>>
>>
> 
> All clocks are in one or multiple arrays, and if we don't register ID 0,
> devicetrees will reference the wrong clock, as the IDs will shift back by
> one during registration.

So what stops you to register some 0-dummy clock? Why do you need a
binding for it?

> This was done for a commonization of probe() and remove() callbacks for
> MediaTek clock drivers... since we have 3 affected SoCs (MT8173, MT2701
> and MT6779) out of *19* (soon 20), to me, it didn't make sense to write
> commonized code to address this just because of 3 out of 20 SoCs (note
> that each SoC has around 4 clock drivers).
> 
> Any suggestion to keep this one short, while not touching dt-bindings?

Just add a clock or better empty entry in your table, without touching
bindings.


Best regards,
Krzysztof



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:28:53 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:28:53 +0100
Subject: [PATCH v1 08/25] dt-bindings: clock: mt8173: Add dummy clock ID
In-Reply-To: <46edd627-c128-b979-823f-0a94fe9d425b@linaro.org>
References: <20221222114857.120060-1-angelogioacchino.delregno@collabora.com>
 <20221222114857.120060-9-angelogioacchino.delregno@collabora.com>
 <869ae494-d74e-03a0-3622-b3a2b0b10470@linaro.org>
 <960b0707-f0e5-993b-3706-a7a275e0698f@collabora.com>
 <46edd627-c128-b979-823f-0a94fe9d425b@linaro.org>
Message-ID: <a9f9a86d-459e-314d-446e-e24b5ee469fe@collabora.com>

Il 23/12/22 10:26, Krzysztof Kozlowski ha scritto:
> On 23/12/2022 10:21, AngeloGioacchino Del Regno wrote:
>> Il 23/12/22 09:52, Krzysztof Kozlowski ha scritto:
>>> On 22/12/2022 12:48, AngeloGioacchino Del Regno wrote:
>>>> Some old MediaTek clock drivers are starting the clock count (so, the
>>>> clock ID) from one instead of zero and this is logically incorrect,
>>>> as we should start from 0.
>>>> During a cleanup an issue emerged due to that and the cleanest and
>>>> shortest way to keep devicetree backwards compatibility while still
>>>> performing the well deserved cleanup is to add a dummy clock where
>>>> needed, with ID 0.
>>>
>>> Unfortunately I do not understand at all why adding dummy (fake) ID
>>> cleans anything here. Unifying IDs to start from 0 is not an argument on
>>> DT bindings header IDs.
>>>
>>> Best regards,
>>> Krzysztof
>>>
>>>
>>
>> All clocks are in one or multiple arrays, and if we don't register ID 0,
>> devicetrees will reference the wrong clock, as the IDs will shift back by
>> one during registration.
> 
> So what stops you to register some 0-dummy clock? Why do you need a
> binding for it?
> 
>> This was done for a commonization of probe() and remove() callbacks for
>> MediaTek clock drivers... since we have 3 affected SoCs (MT8173, MT2701
>> and MT6779) out of *19* (soon 20), to me, it didn't make sense to write
>> commonized code to address this just because of 3 out of 20 SoCs (note
>> that each SoC has around 4 clock drivers).
>>
>> Any suggestion to keep this one short, while not touching dt-bindings?
> 
> Just add a clock or better empty entry in your table, without touching
> bindings.
> 


Okay, now that's embarassing - that's a simpler and obvious solution I
should've thought of before sending this series. Heh.

Thanks, by the way!

Regards,
Angelo


From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:36 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:36 +0100
Subject: [PATCH v2 00/23] MediaTek clocks cleanups and improvements
Message-ID: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>


Changes in v2:
 - Moved dt-bindings CLK_DUMMY to clk-mtk.h instead


This series performs cleanups and improvements on MediaTek clock
drivers, greatly reducing code duplication (hence also reducing
kernel size).

There would be a lot to say about it, but summarizing:

* Propagates struct device where possible in order to introduce the
  possibility of using Runtime PM on clock drivers as needed,
  possibly enhancing reliability of some platforms (obviously, this
  will do nothing unless power-domains are added to devicetree);

* Cleans up some duplicated clock(s) registration attempt(s): on
  some platforms the 26M fixed factor clock is registered early,
  but then upon platform_driver probe, an attempt to re-register
  that clock was performed;

* Removes some early clock registration where possible, moving
  everything to platform_driver clock probe;

* Breaks down the big MT8173 clock driver in multiple ones, as it's
  already done with the others, cleans it up and adds possibility
  possibility to compile non-boot-critical clock drivers (for 8173)
  as modules;

* Extends the common mtk_clk_simple_probe() function to be able to
  register multiple MediaTek clock types;

* Removes duplicated [...]_probe functions from multiple MediaTek SoC
  clock drivers, migrating almost everything to the common functions
  mtk_clk_simple_probe();

* Adds a .remove() callback, pointing to the common mtk_clk_simple_remove()
  function to all clock drivers that were migrated to the common probe;

* Some more spare cleanups here and there.

All of this was manually tested on various Chromebooks (with different MTK
SoCs) and no regression was detected.

Cheers!

AngeloGioacchino Del Regno (23):
  clk: mediatek: mt8192: Correctly unregister and free clocks on failure
  clk: mediatek: mt8192: Propagate struct device for gate clocks
  clk: mediatek: clk-gate: Propagate struct device with
    mtk_clk_register_gates()
  clk: mediatek: cpumux: Propagate struct device where possible
  clk: mediatek: clk-mtk: Propagate struct device for composites
  clk: mediatek: clk-mux: Propagate struct device for mtk-mux
  clk: mediatek: clk-mtk: Add dummy clock ops
  clk: mediatek: mt8173: Migrate to platform driver and common probe
  clk: mediatek: mt8173: Remove mtk_clk_enable_critical()
  clk: mediatek: mt8173: Break down clock drivers and allow module build
  clk: mediatek: Switch to mtk_clk_simple_probe() where possible
  clk: mediatek: clk-mtk: Extend mtk_clk_simple_probe()
  clk: mediatek: mt8173: Migrate pericfg/topckgen to
    mtk_clk_simple_probe()
  clk: mediatek: clk-mt8192: Move CLK_TOP_CSW_F26M_D2 in top_divs
  clk: mediatek: mt8192: Join top_adj_divs and top_muxes
  clk: mediatek: mt8186: Join top_adj_div and top_muxes
  clk: mediatek: clk-mt8183: Join top_aud_muxes and top_aud_divs
  clk: mediatek: clk-mtk: Register MFG notifier in
    mtk_clk_simple_probe()
  clk: mediatek: clk-mt8192: Migrate topckgen to mtk_clk_simple_probe()
  clk: mediatek: clk-mt8186-topckgen: Migrate to mtk_clk_simple_probe()
  clk: mediatek: clk-mt6795-topckgen: Migrate to mtk_clk_simple_probe()
  clk: mediatek: clk-mt7986-topckgen: Properly keep some clocks enabled
  clk: mediatek: clk-mt7986-topckgen: Migrate to mtk_clk_simple_probe()

 drivers/clk/mediatek/Kconfig                 |   30 +-
 drivers/clk/mediatek/Makefile                |    6 +-
 drivers/clk/mediatek/clk-cpumux.c            |    9 +-
 drivers/clk/mediatek/clk-cpumux.h            |    3 +-
 drivers/clk/mediatek/clk-gate.c              |   16 +-
 drivers/clk/mediatek/clk-gate.h              |    8 +-
 drivers/clk/mediatek/clk-mt2701-aud.c        |   26 +-
 drivers/clk/mediatek/clk-mt2701-eth.c        |   34 +-
 drivers/clk/mediatek/clk-mt2701-g3d.c        |   56 +-
 drivers/clk/mediatek/clk-mt2701-hif.c        |   36 +-
 drivers/clk/mediatek/clk-mt2701-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt2701.c            |   12 +-
 drivers/clk/mediatek/clk-mt2712-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt2712.c            |   89 +-
 drivers/clk/mediatek/clk-mt6765.c            |    8 +-
 drivers/clk/mediatek/clk-mt6779-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt6779.c            |   50 +-
 drivers/clk/mediatek/clk-mt6795-infracfg.c   |    6 +-
 drivers/clk/mediatek/clk-mt6795-mm.c         |    3 +-
 drivers/clk/mediatek/clk-mt6795-pericfg.c    |    5 +-
 drivers/clk/mediatek/clk-mt6795-topckgen.c   |   84 +-
 drivers/clk/mediatek/clk-mt6797-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt6797.c            |    4 +-
 drivers/clk/mediatek/clk-mt7622-aud.c        |   49 +-
 drivers/clk/mediatek/clk-mt7622-eth.c        |   82 +-
 drivers/clk/mediatek/clk-mt7622-hif.c        |   85 +-
 drivers/clk/mediatek/clk-mt7622.c            |   16 +-
 drivers/clk/mediatek/clk-mt7629-eth.c        |    5 +-
 drivers/clk/mediatek/clk-mt7629-hif.c        |   85 +-
 drivers/clk/mediatek/clk-mt7629.c            |   12 +-
 drivers/clk/mediatek/clk-mt7986-eth.c        |    6 +-
 drivers/clk/mediatek/clk-mt7986-infracfg.c   |    4 +-
 drivers/clk/mediatek/clk-mt7986-topckgen.c   |   98 +-
 drivers/clk/mediatek/clk-mt8135.c            |    8 +-
 drivers/clk/mediatek/clk-mt8167-aud.c        |    2 +-
 drivers/clk/mediatek/clk-mt8167-img.c        |    2 +-
 drivers/clk/mediatek/clk-mt8167-mfgcfg.c     |    2 +-
 drivers/clk/mediatek/clk-mt8167-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt8167-vdec.c       |    3 +-
 drivers/clk/mediatek/clk-mt8167.c            |    6 +-
 drivers/clk/mediatek/clk-mt8173-apmixedsys.c |  157 +++
 drivers/clk/mediatek/clk-mt8173-img.c        |   55 +
 drivers/clk/mediatek/clk-mt8173-infracfg.c   |  154 +++
 drivers/clk/mediatek/clk-mt8173-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt8173-pericfg.c    |  122 ++
 drivers/clk/mediatek/clk-mt8173-topckgen.c   |  653 ++++++++++
 drivers/clk/mediatek/clk-mt8173-vdecsys.c    |   57 +
 drivers/clk/mediatek/clk-mt8173-vencsys.c    |   64 +
 drivers/clk/mediatek/clk-mt8173.c            | 1125 ------------------
 drivers/clk/mediatek/clk-mt8183-audio.c      |   19 +-
 drivers/clk/mediatek/clk-mt8183-mm.c         |    2 +-
 drivers/clk/mediatek/clk-mt8183.c            |  119 +-
 drivers/clk/mediatek/clk-mt8186-mcu.c        |    2 +-
 drivers/clk/mediatek/clk-mt8186-mm.c         |    3 +-
 drivers/clk/mediatek/clk-mt8186-topckgen.c   |  112 +-
 drivers/clk/mediatek/clk-mt8192-aud.c        |   24 +-
 drivers/clk/mediatek/clk-mt8192-mm.c         |    3 +-
 drivers/clk/mediatek/clk-mt8192.c            |  183 +--
 drivers/clk/mediatek/clk-mt8195-apmixedsys.c |    3 +-
 drivers/clk/mediatek/clk-mt8195-topckgen.c   |    7 +-
 drivers/clk/mediatek/clk-mt8195-vdo0.c       |    3 +-
 drivers/clk/mediatek/clk-mt8195-vdo1.c       |    3 +-
 drivers/clk/mediatek/clk-mt8365-mm.c         |    5 +-
 drivers/clk/mediatek/clk-mt8365.c            |    9 +-
 drivers/clk/mediatek/clk-mt8516-aud.c        |    2 +-
 drivers/clk/mediatek/clk-mt8516.c            |    6 +-
 drivers/clk/mediatek/clk-mtk.c               |  133 ++-
 drivers/clk/mediatek/clk-mtk.h               |   35 +-
 drivers/clk/mediatek/clk-mux.c               |    9 +-
 drivers/clk/mediatek/clk-mux.h               |    3 +-
 70 files changed, 1913 insertions(+), 2121 deletions(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8173-apmixedsys.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-img.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-infracfg.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-pericfg.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-topckgen.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-vdecsys.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-vencsys.c
 delete mode 100644 drivers/clk/mediatek/clk-mt8173.c

-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:37 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:37 +0100
Subject: [PATCH v2 01/23] clk: mediatek: mt8192: Correctly unregister and free clocks on failure
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-2-angelogioacchino.delregno@collabora.com>

If anything fails during probe of the clock controller(s), unregister
(and kfree!) whatever we have previously registered to leave with a
clean state and prevent leaks.

Fixes: 710573dee31b ("clk: mediatek: Add MT8192 basic clocks support")
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8192.c | 72 ++++++++++++++++++++++++-------
 1 file changed, 56 insertions(+), 16 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index 0e88588b2c49..eff66ca6c6a7 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1100,27 +1100,61 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	if (IS_ERR(base))
 		return PTR_ERR(base);
 
-	mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data);
-	mtk_clk_register_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data);
-	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
-	mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node, &mt8192_clk_lock,
-			       top_clk_data);
-	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base, &mt8192_clk_lock,
-				    top_clk_data);
-	mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base, &mt8192_clk_lock,
-				    top_clk_data);
-	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), top_clk_data);
+	r = mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data);
 	if (r)
 		return r;
 
+	r = mtk_clk_register_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data);
+	if (r)
+		goto unregister_fixed_clks;
+
+	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
+	if (r)
+		goto unregister_early_factors;
+
+	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
+				   &mt8192_clk_lock, top_clk_data);
+	if (r)
+		goto unregister_factors;
+
+	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
+					&mt8192_clk_lock, top_clk_data);
+	if (r)
+		goto unregister_muxes;
+
+	r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
+					&mt8192_clk_lock, top_clk_data);
+	if (r)
+		goto unregister_top_composites;
+
+	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), top_clk_data);
+	if (r)
+		goto unregister_adj_divs_composites;
+
 	r = clk_mt8192_reg_mfg_mux_notifier(&pdev->dev,
 					    top_clk_data->hws[CLK_TOP_MFG_PLL_SEL]->clk);
 	if (r)
-		return r;
-
+		goto unregister_gates;
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
 				      top_clk_data);
+
+unregister_gates:
+	mtk_clk_unregister_gates(top_clks, ARRAY_SIZE(top_clks), top_clk_data);
+unregister_adj_divs_composites:
+	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), top_clk_data);
+unregister_top_composites:
+	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), top_clk_data);
+unregister_muxes:
+	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), top_clk_data);
+unregister_factors:
+	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
+unregister_early_factors:
+	mtk_clk_unregister_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data);
+unregister_fixed_clks:
+	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks),
+				      top_clk_data);
+	return r;
 }
 
 static int clk_mt8192_infra_probe(struct platform_device *pdev)
@@ -1139,14 +1173,16 @@ static int clk_mt8192_infra_probe(struct platform_device *pdev)
 
 	r = mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
 	if (r)
-		goto free_clk_data;
+		goto unregister_gates;
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		goto free_clk_data;
+		goto unregister_gates;
 
 	return r;
 
+unregister_gates:
+	mtk_clk_unregister_gates(infra_clks, ARRAY_SIZE(infra_clks), clk_data);
 free_clk_data:
 	mtk_free_clk_data(clk_data);
 	return r;
@@ -1168,10 +1204,12 @@ static int clk_mt8192_peri_probe(struct platform_device *pdev)
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		goto free_clk_data;
+		goto unregister_gates;
 
 	return r;
 
+unregister_gates:
+	mtk_clk_unregister_gates(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
 free_clk_data:
 	mtk_free_clk_data(clk_data);
 	return r;
@@ -1194,10 +1232,12 @@ static int clk_mt8192_apmixed_probe(struct platform_device *pdev)
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		goto free_clk_data;
+		goto unregister_gates;
 
 	return r;
 
+unregister_gates:
+	mtk_clk_unregister_gates(apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data);
 free_clk_data:
 	mtk_free_clk_data(clk_data);
 	return r;
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:38 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:38 +0100
Subject: [PATCH v2 02/23] clk: mediatek: mt8192: Propagate struct device for gate clocks
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-3-angelogioacchino.delregno@collabora.com>

Convert instances of mtk_clk_register_gates() to use the newer
mtk_clk_register_gates_with_dev() to propagate struct device to
the clk framework.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8192.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index eff66ca6c6a7..991d78a71644 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1127,7 +1127,8 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_top_composites;
 
-	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), top_clk_data);
+	r = mtk_clk_register_gates_with_dev(node, top_clks, ARRAY_SIZE(top_clks),
+					    top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_adj_divs_composites;
 
@@ -1167,7 +1168,8 @@ static int clk_mt8192_infra_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks), clk_data);
+	r = mtk_clk_register_gates_with_dev(node, infra_clks, ARRAY_SIZE(infra_clks),
+					    clk_data, &pdev->dev);
 	if (r)
 		goto free_clk_data;
 
@@ -1198,7 +1200,8 @@ static int clk_mt8192_peri_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks), clk_data);
+	r = mtk_clk_register_gates_with_dev(node, peri_clks, ARRAY_SIZE(peri_clks),
+					    clk_data, &pdev->dev);
 	if (r)
 		goto free_clk_data;
 
@@ -1226,7 +1229,9 @@ static int clk_mt8192_apmixed_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
-	r = mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data);
+	r = mtk_clk_register_gates_with_dev(node, apmixed_clks,
+					    ARRAY_SIZE(apmixed_clks), clk_data,
+					    &pdev->dev);
 	if (r)
 		goto free_clk_data;
 
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:40 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:40 +0100
Subject: [PATCH v2 04/23] clk: mediatek: cpumux: Propagate struct device where possible
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-5-angelogioacchino.delregno@collabora.com>

Take a pointer to a struct device in mtk_clk_register_cpumuxes() and
propagate the same to mtk_clk_register_cpumux() => clk_hw_register().
Even though runtime pm is unlikely to be used with CPU muxes, this
helps with code consistency and possibly opens to commonization of
some mtk_clk_register_(x) functions.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-cpumux.c          | 9 +++++----
 drivers/clk/mediatek/clk-cpumux.h          | 3 ++-
 drivers/clk/mediatek/clk-mt2701.c          | 2 +-
 drivers/clk/mediatek/clk-mt6795-infracfg.c | 3 ++-
 drivers/clk/mediatek/clk-mt7622.c          | 2 +-
 drivers/clk/mediatek/clk-mt7629.c          | 2 +-
 drivers/clk/mediatek/clk-mt8173.c          | 2 +-
 7 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/drivers/clk/mediatek/clk-cpumux.c b/drivers/clk/mediatek/clk-cpumux.c
index 25618eff6f2a..889534f7e97d 100644
--- a/drivers/clk/mediatek/clk-cpumux.c
+++ b/drivers/clk/mediatek/clk-cpumux.c
@@ -59,7 +59,7 @@ static const struct clk_ops clk_cpumux_ops = {
 
 static struct clk_hw *
 mtk_clk_register_cpumux(const struct mtk_composite *mux,
-			struct regmap *regmap)
+			struct regmap *regmap, struct device *dev)
 {
 	struct mtk_clk_cpumux *cpumux;
 	int ret;
@@ -81,7 +81,7 @@ mtk_clk_register_cpumux(const struct mtk_composite *mux,
 	cpumux->regmap = regmap;
 	cpumux->hw.init = &init;
 
-	ret = clk_hw_register(NULL, &cpumux->hw);
+	ret = clk_hw_register(dev, &cpumux->hw);
 	if (ret) {
 		kfree(cpumux);
 		return ERR_PTR(ret);
@@ -104,7 +104,8 @@ static void mtk_clk_unregister_cpumux(struct clk_hw *hw)
 
 int mtk_clk_register_cpumuxes(struct device_node *node,
 			      const struct mtk_composite *clks, int num,
-			      struct clk_hw_onecell_data *clk_data)
+			      struct clk_hw_onecell_data *clk_data,
+			      struct device *dev)
 {
 	int i;
 	struct clk_hw *hw;
@@ -125,7 +126,7 @@ int mtk_clk_register_cpumuxes(struct device_node *node,
 			continue;
 		}
 
-		hw = mtk_clk_register_cpumux(mux, regmap);
+		hw = mtk_clk_register_cpumux(mux, regmap, dev);
 		if (IS_ERR(hw)) {
 			pr_err("Failed to register clk %s: %pe\n", mux->name,
 			       hw);
diff --git a/drivers/clk/mediatek/clk-cpumux.h b/drivers/clk/mediatek/clk-cpumux.h
index 325adbef25d1..0b7a59d4e0f2 100644
--- a/drivers/clk/mediatek/clk-cpumux.h
+++ b/drivers/clk/mediatek/clk-cpumux.h
@@ -13,7 +13,8 @@ struct mtk_composite;
 
 int mtk_clk_register_cpumuxes(struct device_node *node,
 			      const struct mtk_composite *clks, int num,
-			      struct clk_hw_onecell_data *clk_data);
+			      struct clk_hw_onecell_data *clk_data,
+			      struct device *dev);
 
 void mtk_clk_unregister_cpumuxes(const struct mtk_composite *clks, int num,
 				 struct clk_hw_onecell_data *clk_data);
diff --git a/drivers/clk/mediatek/clk-mt2701.c b/drivers/clk/mediatek/clk-mt2701.c
index dff69fabb171..dcae25778817 100644
--- a/drivers/clk/mediatek/clk-mt2701.c
+++ b/drivers/clk/mediatek/clk-mt2701.c
@@ -770,7 +770,7 @@ static void __init mtk_infrasys_init_early(struct device_node *node)
 						infra_clk_data);
 
 	mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
-				  infra_clk_data);
+				  infra_clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
 				   infra_clk_data);
diff --git a/drivers/clk/mediatek/clk-mt6795-infracfg.c b/drivers/clk/mediatek/clk-mt6795-infracfg.c
index 4bbd2bfe2ec4..850b24666592 100644
--- a/drivers/clk/mediatek/clk-mt6795-infracfg.c
+++ b/drivers/clk/mediatek/clk-mt6795-infracfg.c
@@ -106,7 +106,8 @@ static int clk_mt6795_infracfg_probe(struct platform_device *pdev)
 	if (ret)
 		goto free_clk_data;
 
-	ret = mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes), clk_data);
+	ret = mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
+					clk_data, &pdev->dev);
 	if (ret)
 		goto unregister_gates;
 
diff --git a/drivers/clk/mediatek/clk-mt7622.c b/drivers/clk/mediatek/clk-mt7622.c
index eab450fc824c..adf3b4535170 100644
--- a/drivers/clk/mediatek/clk-mt7622.c
+++ b/drivers/clk/mediatek/clk-mt7622.c
@@ -674,7 +674,7 @@ static int mtk_infrasys_init(struct platform_device *pdev)
 			       clk_data, &pdev->dev);
 
 	mtk_clk_register_cpumuxes(node, infra_muxes, ARRAY_SIZE(infra_muxes),
-				  clk_data);
+				  clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
 				   clk_data);
diff --git a/drivers/clk/mediatek/clk-mt7629.c b/drivers/clk/mediatek/clk-mt7629.c
index 2daceeab7fc4..48bc4a6705fb 100644
--- a/drivers/clk/mediatek/clk-mt7629.c
+++ b/drivers/clk/mediatek/clk-mt7629.c
@@ -609,7 +609,7 @@ static int mtk_infrasys_init(struct platform_device *pdev)
 			       clk_data, &pdev->dev);
 
 	mtk_clk_register_cpumuxes(node, infra_muxes, ARRAY_SIZE(infra_muxes),
-				  clk_data);
+				  clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
 				      clk_data);
diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173.c
index dfb819dd1b1b..125b01b9e2ab 100644
--- a/drivers/clk/mediatek/clk-mt8173.c
+++ b/drivers/clk/mediatek/clk-mt8173.c
@@ -893,7 +893,7 @@ static void __init mtk_infrasys_init(struct device_node *node)
 	mtk_clk_register_factors(infra_divs, ARRAY_SIZE(infra_divs), clk_data);
 
 	mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
-				  clk_data);
+				  clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:39 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:39 +0100
Subject: [PATCH v2 03/23] clk: mediatek: clk-gate: Propagate struct device with mtk_clk_register_gates()
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-4-angelogioacchino.delregno@collabora.com>

Commit e4c23e19aa2a ("clk: mediatek: Register clock gate with device")
introduces a helper function for the sole purpose of propagating a
struct device pointer to the clk API when registering the mtk-gate
clocks to take advantage of Runtime PM when/where needed and where
a power domain is defined in devicetree.

Function mtk_clk_register_gates() then becomes a wrapper around the
new mtk_clk_register_gates_with_dev() function that will simply pass
NULL as struct device: this is essential when registering drivers
with CLK_OF_DECLARE instead of as a platform device, as there will
be no struct device to pass... but we can as well simply have only
one function that always takes such pointer as a param and pass NULL
when unavoidable.

This commit removes the mtk_clk_register_gates() wrapper and renames
mtk_clk_register_gates_with_dev() to the former and all of the calls
to either of the two functions were fixed in all drivers in order to
reflect this change.

Since a lot of MediaTek clock drivers are actually registering as a
platform device, but were still registering the mtk-gate clocks
without passing any struct device to the clock framework, they've
been changed to pass a valid one now, as to make all those platforms
able to use runtime power management where available.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-gate.c              | 16 ++++------------
 drivers/clk/mediatek/clk-gate.h              |  8 ++------
 drivers/clk/mediatek/clk-mt2701-aud.c        |  2 +-
 drivers/clk/mediatek/clk-mt2701-eth.c        |  2 +-
 drivers/clk/mediatek/clk-mt2701-g3d.c        |  2 +-
 drivers/clk/mediatek/clk-mt2701-hif.c        |  2 +-
 drivers/clk/mediatek/clk-mt2701-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt2701.c            |  6 +++---
 drivers/clk/mediatek/clk-mt2712-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt2712.c            |  6 +++---
 drivers/clk/mediatek/clk-mt6765.c            |  6 +++---
 drivers/clk/mediatek/clk-mt6779-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt6779.c            |  4 ++--
 drivers/clk/mediatek/clk-mt6795-infracfg.c   |  3 ++-
 drivers/clk/mediatek/clk-mt6795-mm.c         |  3 ++-
 drivers/clk/mediatek/clk-mt6795-pericfg.c    |  3 ++-
 drivers/clk/mediatek/clk-mt6797-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt6797.c            |  2 +-
 drivers/clk/mediatek/clk-mt7622-aud.c        |  2 +-
 drivers/clk/mediatek/clk-mt7622-eth.c        |  4 ++--
 drivers/clk/mediatek/clk-mt7622-hif.c        |  4 ++--
 drivers/clk/mediatek/clk-mt7622.c            |  9 +++++----
 drivers/clk/mediatek/clk-mt7629-eth.c        |  5 +++--
 drivers/clk/mediatek/clk-mt7629-hif.c        |  4 ++--
 drivers/clk/mediatek/clk-mt7629.c            |  6 +++---
 drivers/clk/mediatek/clk-mt7986-eth.c        |  6 +++---
 drivers/clk/mediatek/clk-mt7986-infracfg.c   |  2 +-
 drivers/clk/mediatek/clk-mt8135.c            |  4 ++--
 drivers/clk/mediatek/clk-mt8167-aud.c        |  2 +-
 drivers/clk/mediatek/clk-mt8167-img.c        |  2 +-
 drivers/clk/mediatek/clk-mt8167-mfgcfg.c     |  2 +-
 drivers/clk/mediatek/clk-mt8167-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt8167-vdec.c       |  3 ++-
 drivers/clk/mediatek/clk-mt8167.c            |  2 +-
 drivers/clk/mediatek/clk-mt8173-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt8173.c            | 12 ++++++------
 drivers/clk/mediatek/clk-mt8183-audio.c      |  2 +-
 drivers/clk/mediatek/clk-mt8183-mm.c         |  2 +-
 drivers/clk/mediatek/clk-mt8183.c            |  8 ++++----
 drivers/clk/mediatek/clk-mt8186-mm.c         |  3 ++-
 drivers/clk/mediatek/clk-mt8192-aud.c        |  3 ++-
 drivers/clk/mediatek/clk-mt8192-mm.c         |  3 ++-
 drivers/clk/mediatek/clk-mt8192.c            | 12 ++++++------
 drivers/clk/mediatek/clk-mt8195-apmixedsys.c |  3 ++-
 drivers/clk/mediatek/clk-mt8195-topckgen.c   |  3 ++-
 drivers/clk/mediatek/clk-mt8195-vdo0.c       |  3 ++-
 drivers/clk/mediatek/clk-mt8195-vdo1.c       |  3 ++-
 drivers/clk/mediatek/clk-mt8365-mm.c         |  5 ++---
 drivers/clk/mediatek/clk-mt8365.c            |  2 +-
 drivers/clk/mediatek/clk-mt8516-aud.c        |  2 +-
 drivers/clk/mediatek/clk-mt8516.c            |  2 +-
 drivers/clk/mediatek/clk-mtk.c               |  4 ++--
 52 files changed, 103 insertions(+), 103 deletions(-)

diff --git a/drivers/clk/mediatek/clk-gate.c b/drivers/clk/mediatek/clk-gate.c
index 0c867136e49d..80deaabfd848 100644
--- a/drivers/clk/mediatek/clk-gate.c
+++ b/drivers/clk/mediatek/clk-gate.c
@@ -202,10 +202,10 @@ static void mtk_clk_unregister_gate(struct clk_hw *hw)
 	kfree(cg);
 }
 
-int mtk_clk_register_gates_with_dev(struct device_node *node,
-				    const struct mtk_gate *clks, int num,
-				    struct clk_hw_onecell_data *clk_data,
-				    struct device *dev)
+int mtk_clk_register_gates(struct device_node *node,
+			   const struct mtk_gate *clks, int num,
+			   struct clk_hw_onecell_data *clk_data,
+			   struct device *dev)
 {
 	int i;
 	struct clk_hw *hw;
@@ -261,14 +261,6 @@ int mtk_clk_register_gates_with_dev(struct device_node *node,
 
 	return PTR_ERR(hw);
 }
-EXPORT_SYMBOL_GPL(mtk_clk_register_gates_with_dev);
-
-int mtk_clk_register_gates(struct device_node *node,
-			   const struct mtk_gate *clks, int num,
-			   struct clk_hw_onecell_data *clk_data)
-{
-	return mtk_clk_register_gates_with_dev(node, clks, num, clk_data, NULL);
-}
 EXPORT_SYMBOL_GPL(mtk_clk_register_gates);
 
 void mtk_clk_unregister_gates(const struct mtk_gate *clks, int num,
diff --git a/drivers/clk/mediatek/clk-gate.h b/drivers/clk/mediatek/clk-gate.h
index d9897ef53528..03053c2c2fdd 100644
--- a/drivers/clk/mediatek/clk-gate.h
+++ b/drivers/clk/mediatek/clk-gate.h
@@ -52,12 +52,8 @@ struct mtk_gate {
 
 int mtk_clk_register_gates(struct device_node *node,
 			   const struct mtk_gate *clks, int num,
-			   struct clk_hw_onecell_data *clk_data);
-
-int mtk_clk_register_gates_with_dev(struct device_node *node,
-				    const struct mtk_gate *clks, int num,
-				    struct clk_hw_onecell_data *clk_data,
-				    struct device *dev);
+			   struct clk_hw_onecell_data *clk_data,
+			   struct device *dev);
 
 void mtk_clk_unregister_gates(const struct mtk_gate *clks, int num,
 			      struct clk_hw_onecell_data *clk_data);
diff --git a/drivers/clk/mediatek/clk-mt2701-aud.c b/drivers/clk/mediatek/clk-mt2701-aud.c
index 6ba398eb7df9..ab13ab618fb5 100644
--- a/drivers/clk/mediatek/clk-mt2701-aud.c
+++ b/drivers/clk/mediatek/clk-mt2701-aud.c
@@ -152,7 +152,7 @@ static int clk_mt2701_aud_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_AUD_NR);
 
 	mtk_clk_register_gates(node, audio_clks, ARRAY_SIZE(audio_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r) {
diff --git a/drivers/clk/mediatek/clk-mt2701-eth.c b/drivers/clk/mediatek/clk-mt2701-eth.c
index edf1e2ed2b59..9670e1e170f2 100644
--- a/drivers/clk/mediatek/clk-mt2701-eth.c
+++ b/drivers/clk/mediatek/clk-mt2701-eth.c
@@ -58,7 +58,7 @@ static int clk_mt2701_eth_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_ETHSYS_NR);
 
 	mtk_clk_register_gates(node, eth_clks, ARRAY_SIZE(eth_clks),
-						clk_data);
+						clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt2701-g3d.c b/drivers/clk/mediatek/clk-mt2701-g3d.c
index 1458109d99d9..11391b144267 100644
--- a/drivers/clk/mediatek/clk-mt2701-g3d.c
+++ b/drivers/clk/mediatek/clk-mt2701-g3d.c
@@ -52,7 +52,7 @@ static int clk_mt2701_g3dsys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_G3DSYS_NR);
 
 	mtk_clk_register_gates(node, g3d_clks, ARRAY_SIZE(g3d_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt2701-hif.c b/drivers/clk/mediatek/clk-mt2701-hif.c
index 434cbbe8c037..c14c0bb10f88 100644
--- a/drivers/clk/mediatek/clk-mt2701-hif.c
+++ b/drivers/clk/mediatek/clk-mt2701-hif.c
@@ -55,7 +55,7 @@ static int clk_mt2701_hif_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_HIFSYS_NR);
 
 	mtk_clk_register_gates(node, hif_clks, ARRAY_SIZE(hif_clks),
-						clk_data);
+						clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r) {
diff --git a/drivers/clk/mediatek/clk-mt2701-mm.c b/drivers/clk/mediatek/clk-mt2701-mm.c
index 9ea7abad99d2..ec5e516ca099 100644
--- a/drivers/clk/mediatek/clk-mt2701-mm.c
+++ b/drivers/clk/mediatek/clk-mt2701-mm.c
@@ -89,7 +89,7 @@ static int clk_mt2701_mm_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MM_NR);
 
 	mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
-						clk_data);
+						clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt2701.c b/drivers/clk/mediatek/clk-mt2701.c
index 9b442af37e67..dff69fabb171 100644
--- a/drivers/clk/mediatek/clk-mt2701.c
+++ b/drivers/clk/mediatek/clk-mt2701.c
@@ -690,7 +690,7 @@ static int mtk_topckgen_init(struct platform_device *pdev)
 				base, &mt2701_clk_lock, clk_data);
 
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-						clk_data);
+			       clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
@@ -796,7 +796,7 @@ static int mtk_infrasys_init(struct platform_device *pdev)
 	}
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-						infra_clk_data);
+			       infra_clk_data, &pdev->dev);
 	mtk_clk_register_factors(infra_fixed_divs, ARRAY_SIZE(infra_fixed_divs),
 						infra_clk_data);
 
@@ -919,7 +919,7 @@ static int mtk_pericfg_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR);
 
 	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-						clk_data);
+			       clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(peri_muxs, ARRAY_SIZE(peri_muxs), base,
 			&mt2701_clk_lock, clk_data);
diff --git a/drivers/clk/mediatek/clk-mt2712-mm.c b/drivers/clk/mediatek/clk-mt2712-mm.c
index 7d44b09b8a0a..6c5f26a73476 100644
--- a/drivers/clk/mediatek/clk-mt2712-mm.c
+++ b/drivers/clk/mediatek/clk-mt2712-mm.c
@@ -136,7 +136,7 @@ static int clk_mt2712_mm_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MM_NR_CLK);
 
 	mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
-			clk_data);
+			clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt2712.c b/drivers/clk/mediatek/clk-mt2712.c
index 56980dd6c2ea..24ec3384c429 100644
--- a/drivers/clk/mediatek/clk-mt2712.c
+++ b/drivers/clk/mediatek/clk-mt2712.c
@@ -1351,7 +1351,7 @@ static int clk_mt2712_top_probe(struct platform_device *pdev)
 	mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
 			&mt2712_clk_lock, top_clk_data);
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-			top_clk_data);
+			top_clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, top_clk_data);
 
@@ -1371,7 +1371,7 @@ static int clk_mt2712_infra_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			clk_data);
+			clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
@@ -1393,7 +1393,7 @@ static int clk_mt2712_peri_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
 
 	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-			clk_data);
+			clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt6765.c b/drivers/clk/mediatek/clk-mt6765.c
index e9b9e6729733..7401693ef472 100644
--- a/drivers/clk/mediatek/clk-mt6765.c
+++ b/drivers/clk/mediatek/clk-mt6765.c
@@ -790,7 +790,7 @@ static int clk_mt6765_apmixed_probe(struct platform_device *pdev)
 	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
 
 	mtk_clk_register_gates(node, apmixed_clks,
-			       ARRAY_SIZE(apmixed_clks), clk_data);
+			       ARRAY_SIZE(apmixed_clks), clk_data, &pdev->dev);
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
 	if (r)
@@ -829,7 +829,7 @@ static int clk_mt6765_top_probe(struct platform_device *pdev)
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
 			       &mt6765_clk_lock, clk_data);
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
@@ -863,7 +863,7 @@ static int clk_mt6765_ifr_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_IFR_NR_CLK);
 
 	mtk_clk_register_gates(node, ifr_clks, ARRAY_SIZE(ifr_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt6779-mm.c b/drivers/clk/mediatek/clk-mt6779-mm.c
index eda8cbee3d23..101808b3e38f 100644
--- a/drivers/clk/mediatek/clk-mt6779-mm.c
+++ b/drivers/clk/mediatek/clk-mt6779-mm.c
@@ -94,7 +94,7 @@ static int clk_mt6779_mm_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MM_NR_CLK);
 
 	mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt6779.c b/drivers/clk/mediatek/clk-mt6779.c
index 0d0a90ee5eb2..622a2fc6c167 100644
--- a/drivers/clk/mediatek/clk-mt6779.c
+++ b/drivers/clk/mediatek/clk-mt6779.c
@@ -1222,7 +1222,7 @@ static int clk_mt6779_apmixed_probe(struct platform_device *pdev)
 	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
 
 	mtk_clk_register_gates(node, apmixed_clks,
-			       ARRAY_SIZE(apmixed_clks), clk_data);
+			       ARRAY_SIZE(apmixed_clks), clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
@@ -1264,7 +1264,7 @@ static int clk_mt6779_infra_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt6795-infracfg.c b/drivers/clk/mediatek/clk-mt6795-infracfg.c
index df7eed6e071e..4bbd2bfe2ec4 100644
--- a/drivers/clk/mediatek/clk-mt6795-infracfg.c
+++ b/drivers/clk/mediatek/clk-mt6795-infracfg.c
@@ -101,7 +101,8 @@ static int clk_mt6795_infracfg_probe(struct platform_device *pdev)
 	if (ret)
 		goto free_clk_data;
 
-	ret = mtk_clk_register_gates(node, infra_gates, ARRAY_SIZE(infra_gates), clk_data);
+	ret = mtk_clk_register_gates(node, infra_gates, ARRAY_SIZE(infra_gates),
+				     clk_data, &pdev->dev);
 	if (ret)
 		goto free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt6795-mm.c b/drivers/clk/mediatek/clk-mt6795-mm.c
index fd73f202f292..10a623b83f68 100644
--- a/drivers/clk/mediatek/clk-mt6795-mm.c
+++ b/drivers/clk/mediatek/clk-mt6795-mm.c
@@ -87,7 +87,8 @@ static int clk_mt6795_mm_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	ret = mtk_clk_register_gates(node, mm_gates, ARRAY_SIZE(mm_gates), clk_data);
+	ret = mtk_clk_register_gates(node, mm_gates, ARRAY_SIZE(mm_gates),
+				     clk_data, &pdev->dev);
 	if (ret)
 		goto free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt6795-pericfg.c b/drivers/clk/mediatek/clk-mt6795-pericfg.c
index cb28d35dad59..479a8abcb80b 100644
--- a/drivers/clk/mediatek/clk-mt6795-pericfg.c
+++ b/drivers/clk/mediatek/clk-mt6795-pericfg.c
@@ -109,7 +109,8 @@ static int clk_mt6795_pericfg_probe(struct platform_device *pdev)
 	if (ret)
 		goto free_clk_data;
 
-	ret = mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates), clk_data);
+	ret = mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
+				     clk_data, &pdev->dev);
 	if (ret)
 		goto free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt6797-mm.c b/drivers/clk/mediatek/clk-mt6797-mm.c
index 0846011fc894..dd96db5f2c0d 100644
--- a/drivers/clk/mediatek/clk-mt6797-mm.c
+++ b/drivers/clk/mediatek/clk-mt6797-mm.c
@@ -102,7 +102,7 @@ static int clk_mt6797_mm_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MM_NR);
 
 	mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt6797.c b/drivers/clk/mediatek/clk-mt6797.c
index b89f325a4b9b..250ac8bd6a3c 100644
--- a/drivers/clk/mediatek/clk-mt6797.c
+++ b/drivers/clk/mediatek/clk-mt6797.c
@@ -597,7 +597,7 @@ static int mtk_infrasys_init(struct platform_device *pdev)
 	}
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       infra_clk_data);
+			       infra_clk_data, &pdev->dev);
 	mtk_clk_register_factors(infra_fixed_divs, ARRAY_SIZE(infra_fixed_divs),
 				 infra_clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt7622-aud.c b/drivers/clk/mediatek/clk-mt7622-aud.c
index 9f2e5aa7b5d9..d0379d8704af 100644
--- a/drivers/clk/mediatek/clk-mt7622-aud.c
+++ b/drivers/clk/mediatek/clk-mt7622-aud.c
@@ -139,7 +139,7 @@ static int clk_mt7622_audiosys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_AUDIO_NR_CLK);
 
 	mtk_clk_register_gates(node, audio_clks, ARRAY_SIZE(audio_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r) {
diff --git a/drivers/clk/mediatek/clk-mt7622-eth.c b/drivers/clk/mediatek/clk-mt7622-eth.c
index 43de0477d5d9..9b4a26ca0f44 100644
--- a/drivers/clk/mediatek/clk-mt7622-eth.c
+++ b/drivers/clk/mediatek/clk-mt7622-eth.c
@@ -82,7 +82,7 @@ static int clk_mt7622_ethsys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_ETH_NR_CLK);
 
 	mtk_clk_register_gates(node, eth_clks, ARRAY_SIZE(eth_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -104,7 +104,7 @@ static int clk_mt7622_sgmiisys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_SGMII_NR_CLK);
 
 	mtk_clk_register_gates(node, sgmii_clks, ARRAY_SIZE(sgmii_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt7622-hif.c b/drivers/clk/mediatek/clk-mt7622-hif.c
index 67e96231dd25..8cf37f75ca77 100644
--- a/drivers/clk/mediatek/clk-mt7622-hif.c
+++ b/drivers/clk/mediatek/clk-mt7622-hif.c
@@ -93,7 +93,7 @@ static int clk_mt7622_ssusbsys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_SSUSB_NR_CLK);
 
 	mtk_clk_register_gates(node, ssusb_clks, ARRAY_SIZE(ssusb_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -115,7 +115,7 @@ static int clk_mt7622_pciesys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PCIE_NR_CLK);
 
 	mtk_clk_register_gates(node, pcie_clks, ARRAY_SIZE(pcie_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt7622.c b/drivers/clk/mediatek/clk-mt7622.c
index 3b55f8641fae..eab450fc824c 100644
--- a/drivers/clk/mediatek/clk-mt7622.c
+++ b/drivers/clk/mediatek/clk-mt7622.c
@@ -653,7 +653,7 @@ static int mtk_topckgen_init(struct platform_device *pdev)
 				  base, &mt7622_clk_lock, clk_data);
 
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	clk_prepare_enable(clk_data->hws[CLK_TOP_AXI_SEL]->clk);
 	clk_prepare_enable(clk_data->hws[CLK_TOP_MEM_SEL]->clk);
@@ -671,7 +671,7 @@ static int mtk_infrasys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	mtk_clk_register_cpumuxes(node, infra_muxes, ARRAY_SIZE(infra_muxes),
 				  clk_data);
@@ -699,7 +699,8 @@ static int mtk_apmixedsys_init(struct platform_device *pdev)
 			      clk_data);
 
 	mtk_clk_register_gates(node, apmixed_clks,
-			       ARRAY_SIZE(apmixed_clks), clk_data);
+			       ARRAY_SIZE(apmixed_clks), clk_data,
+			       &pdev->dev);
 
 	clk_prepare_enable(clk_data->hws[CLK_APMIXED_ARMPLL]->clk);
 	clk_prepare_enable(clk_data->hws[CLK_APMIXED_MAIN_CORE_EN]->clk);
@@ -721,7 +722,7 @@ static int mtk_pericfg_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
 
 	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(peri_muxes, ARRAY_SIZE(peri_muxes), base,
 				    &mt7622_clk_lock, clk_data);
diff --git a/drivers/clk/mediatek/clk-mt7629-eth.c b/drivers/clk/mediatek/clk-mt7629-eth.c
index 282dd6559465..39aa9eb5355e 100644
--- a/drivers/clk/mediatek/clk-mt7629-eth.c
+++ b/drivers/clk/mediatek/clk-mt7629-eth.c
@@ -92,7 +92,8 @@ static int clk_mt7629_ethsys_init(struct platform_device *pdev)
 
 	clk_data = mtk_alloc_clk_data(CLK_ETH_NR_CLK);
 
-	mtk_clk_register_gates(node, eth_clks, CLK_ETH_NR_CLK, clk_data);
+	mtk_clk_register_gates(node, eth_clks, CLK_ETH_NR_CLK,
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -115,7 +116,7 @@ static int clk_mt7629_sgmiisys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_SGMII_NR_CLK);
 
 	mtk_clk_register_gates(node, sgmii_clks[id++], CLK_SGMII_NR_CLK,
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt7629-hif.c b/drivers/clk/mediatek/clk-mt7629-hif.c
index 0c8b9e139789..44fbd88b4647 100644
--- a/drivers/clk/mediatek/clk-mt7629-hif.c
+++ b/drivers/clk/mediatek/clk-mt7629-hif.c
@@ -88,7 +88,7 @@ static int clk_mt7629_ssusbsys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_SSUSB_NR_CLK);
 
 	mtk_clk_register_gates(node, ssusb_clks, ARRAY_SIZE(ssusb_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -110,7 +110,7 @@ static int clk_mt7629_pciesys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PCIE_NR_CLK);
 
 	mtk_clk_register_gates(node, pcie_clks, ARRAY_SIZE(pcie_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt7629.c b/drivers/clk/mediatek/clk-mt7629.c
index e4a08c811adc..2daceeab7fc4 100644
--- a/drivers/clk/mediatek/clk-mt7629.c
+++ b/drivers/clk/mediatek/clk-mt7629.c
@@ -606,7 +606,7 @@ static int mtk_infrasys_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	mtk_clk_register_cpumuxes(node, infra_muxes, ARRAY_SIZE(infra_muxes),
 				  clk_data);
@@ -629,7 +629,7 @@ static int mtk_pericfg_init(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
 
 	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(peri_muxes, ARRAY_SIZE(peri_muxes), base,
 				    &mt7629_clk_lock, clk_data);
@@ -656,7 +656,7 @@ static int mtk_apmixedsys_init(struct platform_device *pdev)
 			      clk_data);
 
 	mtk_clk_register_gates(node, apmixed_clks,
-			       ARRAY_SIZE(apmixed_clks), clk_data);
+			       ARRAY_SIZE(apmixed_clks), clk_data, &pdev->dev);
 
 	clk_prepare_enable(clk_data->hws[CLK_APMIXED_ARMPLL]->clk);
 	clk_prepare_enable(clk_data->hws[CLK_APMIXED_MAIN_CORE_EN]->clk);
diff --git a/drivers/clk/mediatek/clk-mt7986-eth.c b/drivers/clk/mediatek/clk-mt7986-eth.c
index 7868c0728e96..765df117afa6 100644
--- a/drivers/clk/mediatek/clk-mt7986-eth.c
+++ b/drivers/clk/mediatek/clk-mt7986-eth.c
@@ -85,7 +85,7 @@ static void __init mtk_sgmiisys_0_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(ARRAY_SIZE(sgmii0_clks));
 
 	mtk_clk_register_gates(node, sgmii0_clks, ARRAY_SIZE(sgmii0_clks),
-			       clk_data);
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -103,7 +103,7 @@ static void __init mtk_sgmiisys_1_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(ARRAY_SIZE(sgmii1_clks));
 
 	mtk_clk_register_gates(node, sgmii1_clks, ARRAY_SIZE(sgmii1_clks),
-			       clk_data);
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
@@ -121,7 +121,7 @@ static void __init mtk_ethsys_init(struct device_node *node)
 
 	clk_data = mtk_alloc_clk_data(ARRAY_SIZE(eth_clks));
 
-	mtk_clk_register_gates(node, eth_clks, ARRAY_SIZE(eth_clks), clk_data);
+	mtk_clk_register_gates(node, eth_clks, ARRAY_SIZE(eth_clks), clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt7986-infracfg.c b/drivers/clk/mediatek/clk-mt7986-infracfg.c
index 49666047bf0e..24947ccdb70a 100644
--- a/drivers/clk/mediatek/clk-mt7986-infracfg.c
+++ b/drivers/clk/mediatek/clk-mt7986-infracfg.c
@@ -193,7 +193,7 @@ static int clk_mt7986_infracfg_probe(struct platform_device *pdev)
 	mtk_clk_register_muxes(infra_muxes, ARRAY_SIZE(infra_muxes), node,
 			       &mt7986_clk_lock, clk_data);
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r) {
diff --git a/drivers/clk/mediatek/clk-mt8135.c b/drivers/clk/mediatek/clk-mt8135.c
index b68888a034c4..7193ab38090d 100644
--- a/drivers/clk/mediatek/clk-mt8135.c
+++ b/drivers/clk/mediatek/clk-mt8135.c
@@ -568,7 +568,7 @@ static void __init mtk_infrasys_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-						clk_data);
+						clk_data, NULL);
 
 	clk_prepare_enable(clk_data->hws[CLK_INFRA_M4U]->clk);
 
@@ -596,7 +596,7 @@ static void __init mtk_pericfg_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
 
 	mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
-						clk_data);
+						clk_data, NULL);
 	mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
 			&mt8135_clk_lock, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt8167-aud.c b/drivers/clk/mediatek/clk-mt8167-aud.c
index ce1ae8d243c3..aa229aaf467f 100644
--- a/drivers/clk/mediatek/clk-mt8167-aud.c
+++ b/drivers/clk/mediatek/clk-mt8167-aud.c
@@ -55,7 +55,7 @@ static void __init mtk_audsys_init(struct device_node *node)
 
 	clk_data = mtk_alloc_clk_data(CLK_AUD_NR_CLK);
 
-	mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks), clk_data);
+	mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks), clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8167-img.c b/drivers/clk/mediatek/clk-mt8167-img.c
index e359e563d2b7..1e592fa46c96 100644
--- a/drivers/clk/mediatek/clk-mt8167-img.c
+++ b/drivers/clk/mediatek/clk-mt8167-img.c
@@ -48,7 +48,7 @@ static void __init mtk_imgsys_init(struct device_node *node)
 
 	clk_data = mtk_alloc_clk_data(CLK_IMG_NR_CLK);
 
-	mtk_clk_register_gates(node, img_clks, ARRAY_SIZE(img_clks), clk_data);
+	mtk_clk_register_gates(node, img_clks, ARRAY_SIZE(img_clks), clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt8167-mfgcfg.c b/drivers/clk/mediatek/clk-mt8167-mfgcfg.c
index 4fd82fe87d6e..b494d04bc851 100644
--- a/drivers/clk/mediatek/clk-mt8167-mfgcfg.c
+++ b/drivers/clk/mediatek/clk-mt8167-mfgcfg.c
@@ -46,7 +46,7 @@ static void __init mtk_mfgcfg_init(struct device_node *node)
 
 	clk_data = mtk_alloc_clk_data(CLK_MFG_NR_CLK);
 
-	mtk_clk_register_gates(node, mfg_clks, ARRAY_SIZE(mfg_clks), clk_data);
+	mtk_clk_register_gates(node, mfg_clks, ARRAY_SIZE(mfg_clks), clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt8167-mm.c b/drivers/clk/mediatek/clk-mt8167-mm.c
index 73910060577f..5669b5eecca9 100644
--- a/drivers/clk/mediatek/clk-mt8167-mm.c
+++ b/drivers/clk/mediatek/clk-mt8167-mm.c
@@ -111,7 +111,7 @@ static int clk_mt8167_mm_probe(struct platform_device *pdev)
 	data = &mt8167_mmsys_driver_data;
 
 	ret = mtk_clk_register_gates(node, data->gates_clk, data->gates_num,
-				     clk_data);
+				     clk_data, &pdev->dev);
 	if (ret)
 		return ret;
 
diff --git a/drivers/clk/mediatek/clk-mt8167-vdec.c b/drivers/clk/mediatek/clk-mt8167-vdec.c
index ee4fffb6859d..fcd6fdcd2536 100644
--- a/drivers/clk/mediatek/clk-mt8167-vdec.c
+++ b/drivers/clk/mediatek/clk-mt8167-vdec.c
@@ -61,7 +61,8 @@ static void __init mtk_vdecsys_init(struct device_node *node)
 
 	clk_data = mtk_alloc_clk_data(CLK_VDEC_NR_CLK);
 
-	mtk_clk_register_gates(node, vdec_clks, ARRAY_SIZE(vdec_clks), clk_data);
+	mtk_clk_register_gates(node, vdec_clks, ARRAY_SIZE(vdec_clks),
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt8167.c b/drivers/clk/mediatek/clk-mt8167.c
index f900ac4bf7b8..b150f893a4b8 100644
--- a/drivers/clk/mediatek/clk-mt8167.c
+++ b/drivers/clk/mediatek/clk-mt8167.c
@@ -937,7 +937,7 @@ static void __init mtk_topckgen_init(struct device_node *node)
 
 	mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks),
 				    clk_data);
-	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), clk_data);
+	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), clk_data, NULL);
 
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
diff --git a/drivers/clk/mediatek/clk-mt8173-mm.c b/drivers/clk/mediatek/clk-mt8173-mm.c
index 8abf42c2030c..a99583c62c3b 100644
--- a/drivers/clk/mediatek/clk-mt8173-mm.c
+++ b/drivers/clk/mediatek/clk-mt8173-mm.c
@@ -125,7 +125,7 @@ static int clk_mt8173_mm_probe(struct platform_device *pdev)
 	data = &mt8173_mmsys_driver_data;
 
 	ret = mtk_clk_register_gates(node, data->gates_clk, data->gates_num,
-				     clk_data);
+				     clk_data, &pdev->dev);
 	if (ret)
 		return ret;
 
diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173.c
index b57e33cda7a5..dfb819dd1b1b 100644
--- a/drivers/clk/mediatek/clk-mt8173.c
+++ b/drivers/clk/mediatek/clk-mt8173.c
@@ -889,7 +889,7 @@ static void __init mtk_infrasys_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-						clk_data);
+			       clk_data, NULL);
 	mtk_clk_register_factors(infra_divs, ARRAY_SIZE(infra_divs), clk_data);
 
 	mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
@@ -919,7 +919,7 @@ static void __init mtk_pericfg_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
 
 	mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
-						clk_data);
+			       clk_data, NULL);
 	mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
 			&mt8173_clk_lock, clk_data);
 
@@ -1063,7 +1063,7 @@ static void __init mtk_imgsys_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_IMG_NR_CLK);
 
 	mtk_clk_register_gates(node, img_clks, ARRAY_SIZE(img_clks),
-						clk_data);
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
@@ -1081,7 +1081,7 @@ static void __init mtk_vdecsys_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_VDEC_NR_CLK);
 
 	mtk_clk_register_gates(node, vdec_clks, ARRAY_SIZE(vdec_clks),
-						clk_data);
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -1098,7 +1098,7 @@ static void __init mtk_vencsys_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_VENC_NR_CLK);
 
 	mtk_clk_register_gates(node, venc_clks, ARRAY_SIZE(venc_clks),
-						clk_data);
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -1115,7 +1115,7 @@ static void __init mtk_vencltsys_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_VENCLT_NR_CLK);
 
 	mtk_clk_register_gates(node, venclt_clks, ARRAY_SIZE(venclt_clks),
-						clk_data);
+			       clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8183-audio.c b/drivers/clk/mediatek/clk-mt8183-audio.c
index b2d7746eddbe..f4c6448b6f74 100644
--- a/drivers/clk/mediatek/clk-mt8183-audio.c
+++ b/drivers/clk/mediatek/clk-mt8183-audio.c
@@ -76,7 +76,7 @@ static int clk_mt8183_audio_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_AUDIO_NR_CLK);
 
 	mtk_clk_register_gates(node, audio_clks, ARRAY_SIZE(audio_clks),
-			clk_data);
+			       clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8183-mm.c b/drivers/clk/mediatek/clk-mt8183-mm.c
index 11ecc6fb0065..f93043da26c0 100644
--- a/drivers/clk/mediatek/clk-mt8183-mm.c
+++ b/drivers/clk/mediatek/clk-mt8183-mm.c
@@ -91,7 +91,7 @@ static int clk_mt8183_mm_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MM_NR_CLK);
 
 	mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
-			clk_data);
+			clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt8183.c b/drivers/clk/mediatek/clk-mt8183.c
index 23afc9584638..f99c092476c2 100644
--- a/drivers/clk/mediatek/clk-mt8183.c
+++ b/drivers/clk/mediatek/clk-mt8183.c
@@ -1101,7 +1101,7 @@ static int clk_mt8183_apmixed_probe(struct platform_device *pdev)
 	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
 
 	mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks),
-		clk_data);
+		clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
@@ -1176,7 +1176,7 @@ static int clk_mt8183_top_probe(struct platform_device *pdev)
 		base, &mt8183_clk_lock, top_clk_data);
 
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-		top_clk_data);
+		top_clk_data, &pdev->dev);
 
 	ret = clk_mt8183_reg_mfg_mux_notifier(&pdev->dev,
 					      top_clk_data->hws[CLK_TOP_MUX_MFG]->clk);
@@ -1196,7 +1196,7 @@ static int clk_mt8183_infra_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
 
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-		clk_data);
+		clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r) {
@@ -1219,7 +1219,7 @@ static int clk_mt8183_peri_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
 
 	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-			       clk_data);
+			       clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt8186-mm.c b/drivers/clk/mediatek/clk-mt8186-mm.c
index 1d33be407947..35038928eacf 100644
--- a/drivers/clk/mediatek/clk-mt8186-mm.c
+++ b/drivers/clk/mediatek/clk-mt8186-mm.c
@@ -69,7 +69,8 @@ static int clk_mt8186_mm_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks), clk_data);
+	r = mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
+				   clk_data, &pdev->dev);
 	if (r)
 		goto free_mm_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8192-aud.c b/drivers/clk/mediatek/clk-mt8192-aud.c
index 8c989bffd8c7..3acadca2452a 100644
--- a/drivers/clk/mediatek/clk-mt8192-aud.c
+++ b/drivers/clk/mediatek/clk-mt8192-aud.c
@@ -87,7 +87,8 @@ static int clk_mt8192_aud_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks), clk_data);
+	r = mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks),
+				   clk_data, &pdev->dev);
 	if (r)
 		return r;
 
diff --git a/drivers/clk/mediatek/clk-mt8192-mm.c b/drivers/clk/mediatek/clk-mt8192-mm.c
index 1be3ff4d407d..226f6976c277 100644
--- a/drivers/clk/mediatek/clk-mt8192-mm.c
+++ b/drivers/clk/mediatek/clk-mt8192-mm.c
@@ -91,7 +91,8 @@ static int clk_mt8192_mm_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks), clk_data);
+	r = mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks),
+				   clk_data, &pdev->dev);
 	if (r)
 		return r;
 
diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index 991d78a71644..e1b625b86911 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1127,7 +1127,7 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_top_composites;
 
-	r = mtk_clk_register_gates_with_dev(node, top_clks, ARRAY_SIZE(top_clks),
+	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
 					    top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_adj_divs_composites;
@@ -1168,7 +1168,7 @@ static int clk_mt8192_infra_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates_with_dev(node, infra_clks, ARRAY_SIZE(infra_clks),
+	r = mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
 					    clk_data, &pdev->dev);
 	if (r)
 		goto free_clk_data;
@@ -1200,7 +1200,7 @@ static int clk_mt8192_peri_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates_with_dev(node, peri_clks, ARRAY_SIZE(peri_clks),
+	r = mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
 					    clk_data, &pdev->dev);
 	if (r)
 		goto free_clk_data;
@@ -1229,9 +1229,9 @@ static int clk_mt8192_apmixed_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
-	r = mtk_clk_register_gates_with_dev(node, apmixed_clks,
-					    ARRAY_SIZE(apmixed_clks), clk_data,
-					    &pdev->dev);
+	r = mtk_clk_register_gates(node, apmixed_clks,
+				   ARRAY_SIZE(apmixed_clks), clk_data,
+				   &pdev->dev);
 	if (r)
 		goto free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8195-apmixedsys.c b/drivers/clk/mediatek/clk-mt8195-apmixedsys.c
index 0dfed6ec4d15..f967e2592dea 100644
--- a/drivers/clk/mediatek/clk-mt8195-apmixedsys.c
+++ b/drivers/clk/mediatek/clk-mt8195-apmixedsys.c
@@ -124,7 +124,8 @@ static int clk_mt8195_apmixed_probe(struct platform_device *pdev)
 	if (r)
 		goto free_apmixed_data;
 
-	r = mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data);
+	r = mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks),
+				   clk_data, &pdev->dev);
 	if (r)
 		goto unregister_plls;
 
diff --git a/drivers/clk/mediatek/clk-mt8195-topckgen.c b/drivers/clk/mediatek/clk-mt8195-topckgen.c
index 93e96419da66..ed604d39f9d5 100644
--- a/drivers/clk/mediatek/clk-mt8195-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8195-topckgen.c
@@ -1286,7 +1286,8 @@ static int clk_mt8195_topck_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_muxes;
 
-	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), top_clk_data);
+	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
+				   top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_composite_divs;
 
diff --git a/drivers/clk/mediatek/clk-mt8195-vdo0.c b/drivers/clk/mediatek/clk-mt8195-vdo0.c
index 07b46bfd5040..9ebad476e943 100644
--- a/drivers/clk/mediatek/clk-mt8195-vdo0.c
+++ b/drivers/clk/mediatek/clk-mt8195-vdo0.c
@@ -104,7 +104,8 @@ static int clk_mt8195_vdo0_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, vdo0_clks, ARRAY_SIZE(vdo0_clks), clk_data);
+	r = mtk_clk_register_gates(node, vdo0_clks, ARRAY_SIZE(vdo0_clks),
+				   clk_data, &pdev->dev);
 	if (r)
 		goto free_vdo0_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8195-vdo1.c b/drivers/clk/mediatek/clk-mt8195-vdo1.c
index 835335b9d87b..a7a588f086c5 100644
--- a/drivers/clk/mediatek/clk-mt8195-vdo1.c
+++ b/drivers/clk/mediatek/clk-mt8195-vdo1.c
@@ -131,7 +131,8 @@ static int clk_mt8195_vdo1_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, vdo1_clks, ARRAY_SIZE(vdo1_clks), clk_data);
+	r = mtk_clk_register_gates(node, vdo1_clks, ARRAY_SIZE(vdo1_clks),
+				   clk_data, &pdev->dev);
 	if (r)
 		goto free_vdo1_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8365-mm.c b/drivers/clk/mediatek/clk-mt8365-mm.c
index 5c8bf18ab1f1..bc6bf0913452 100644
--- a/drivers/clk/mediatek/clk-mt8365-mm.c
+++ b/drivers/clk/mediatek/clk-mt8365-mm.c
@@ -81,9 +81,8 @@ static int clk_mt8365_mm_probe(struct platform_device *pdev)
 
 	clk_data = mtk_alloc_clk_data(CLK_MM_NR_CLK);
 
-	ret = mtk_clk_register_gates_with_dev(node, mm_clks,
-					      ARRAY_SIZE(mm_clks), clk_data,
-					      dev);
+	ret = mtk_clk_register_gates(node, mm_clks,
+				     ARRAY_SIZE(mm_clks), clk_data, dev);
 	if (ret)
 		goto err_free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8365.c b/drivers/clk/mediatek/clk-mt8365.c
index adfecb618f10..5a43e5aad16e 100644
--- a/drivers/clk/mediatek/clk-mt8365.c
+++ b/drivers/clk/mediatek/clk-mt8365.c
@@ -1020,7 +1020,7 @@ static int clk_mt8365_infra_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	ret = mtk_clk_register_gates(node, ifr_clks, ARRAY_SIZE(ifr_clks),
-				     clk_data);
+				     clk_data, &pdev->dev);
 	if (ret)
 		goto free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8516-aud.c b/drivers/clk/mediatek/clk-mt8516-aud.c
index 90f48068a8de..e3a7b3c939f3 100644
--- a/drivers/clk/mediatek/clk-mt8516-aud.c
+++ b/drivers/clk/mediatek/clk-mt8516-aud.c
@@ -54,7 +54,7 @@ static void __init mtk_audsys_init(struct device_node *node)
 
 	clk_data = mtk_alloc_clk_data(CLK_AUD_NR_CLK);
 
-	mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks), clk_data);
+	mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks), clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8516.c b/drivers/clk/mediatek/clk-mt8516.c
index b96db88893e2..a648ee463697 100644
--- a/drivers/clk/mediatek/clk-mt8516.c
+++ b/drivers/clk/mediatek/clk-mt8516.c
@@ -691,7 +691,7 @@ static void __init mtk_topckgen_init(struct device_node *node)
 
 	mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks),
 				    clk_data);
-	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), clk_data);
+	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), clk_data, NULL);
 
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index 3c1ac8d3010f..e04eef7e2b6f 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -459,8 +459,8 @@ int mtk_clk_simple_probe(struct platform_device *pdev)
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates_with_dev(node, mcd->clks, mcd->num_clks,
-					    clk_data, &pdev->dev);
+	r = mtk_clk_register_gates(node, mcd->clks, mcd->num_clks,
+				   clk_data, &pdev->dev);
 	if (r)
 		goto free_data;
 
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:48 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:48 +0100
Subject: [PATCH v2 12/23] clk: mediatek: clk-mtk: Extend mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-13-angelogioacchino.delregno@collabora.com>

As a preparation to increase probe functions commonization across
various MediaTek SoC clock controller drivers, extend function
mtk_clk_simple_probe() to be able to register not only gates, but
also fixed clocks, factors, muxes and composites.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mtk.c | 101 ++++++++++++++++++++++++++++++---
 drivers/clk/mediatek/clk-mtk.h |  10 ++++
 2 files changed, 103 insertions(+), 8 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index d05364e17e95..b0a6225cd7b2 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -11,12 +11,14 @@
 #include <linux/mfd/syscon.h>
 #include <linux/module.h>
 #include <linux/of.h>
+#include <linux/of_address.h>
 #include <linux/of_device.h>
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 
 #include "clk-mtk.h"
 #include "clk-gate.h"
+#include "clk-mux.h"
 
 const struct mtk_gate_regs cg_regs_dummy = { 0, 0, 0 };
 
@@ -465,20 +467,71 @@ int mtk_clk_simple_probe(struct platform_device *pdev)
 	const struct mtk_clk_desc *mcd;
 	struct clk_hw_onecell_data *clk_data;
 	struct device_node *node = pdev->dev.of_node;
-	int r;
+	void __iomem *base;
+	int num_clks, r;
 
 	mcd = of_device_get_match_data(&pdev->dev);
 	if (!mcd)
 		return -EINVAL;
 
-	clk_data = mtk_alloc_clk_data(mcd->num_clks);
+	/* Composite clocks needs us to pass iomem pointer */
+	if (mcd->composite_clks) {
+		if (!mcd->shared_io)
+			base = devm_platform_ioremap_resource(pdev, 0);
+		else
+			base = of_iomap(node, 0);
+
+		if (IS_ERR_OR_NULL(base))
+			return IS_ERR(base) ? PTR_ERR(base) : -ENOMEM;
+	}
+
+	/* Calculate how many clk_hw_onecell_data entries to allocate */
+	num_clks = mcd->num_clks + mcd->num_composite_clks;
+	num_clks += mcd->num_fixed_clks + mcd->num_factor_clks;
+	num_clks += mcd->num_mux_clks;
+
+	clk_data = mtk_alloc_clk_data(num_clks);
 	if (!clk_data)
 		return -ENOMEM;
 
-	r = mtk_clk_register_gates(node, mcd->clks, mcd->num_clks,
-				   clk_data, &pdev->dev);
-	if (r)
-		goto free_data;
+	if (mcd->fixed_clks) {
+		r = mtk_clk_register_fixed_clks(mcd->fixed_clks,
+						mcd->num_fixed_clks, clk_data);
+		if (r)
+			goto free_data;
+	}
+
+	if (mcd->factor_clks) {
+		r = mtk_clk_register_factors(mcd->factor_clks,
+					     mcd->num_factor_clks, clk_data);
+		if (r)
+			goto unregister_fixed_clks;
+	}
+
+	if (mcd->mux_clks) {
+		r = mtk_clk_register_muxes(mcd->mux_clks, mcd->num_mux_clks,
+					   node, mcd->clk_lock, clk_data,
+					   &pdev->dev);
+		if (r)
+			goto unregister_factors;
+	};
+
+	if (mcd->composite_clks) {
+		/* We don't check composite_lock because it's optional */
+		r = mtk_clk_register_composites(mcd->composite_clks,
+						mcd->num_composite_clks,
+						base, mcd->clk_lock,
+						clk_data, &pdev->dev);
+		if (r)
+			goto unregister_muxes;
+	}
+
+	if (mcd->clks) {
+		r = mtk_clk_register_gates(node, mcd->clks, mcd->num_clks,
+					   clk_data, &pdev->dev);
+		if (r)
+			goto unregister_composites;
+	}
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -496,9 +549,28 @@ int mtk_clk_simple_probe(struct platform_device *pdev)
 	return r;
 
 unregister_clks:
-	mtk_clk_unregister_gates(mcd->clks, mcd->num_clks, clk_data);
+	if (mcd->clks)
+		mtk_clk_unregister_gates(mcd->clks, mcd->num_clks, clk_data);
+unregister_composites:
+	if (mcd->composite_clks)
+		mtk_clk_unregister_composites(mcd->composite_clks,
+					      mcd->num_composite_clks, clk_data);
+unregister_muxes:
+	if (mcd->mux_clks)
+		mtk_clk_unregister_muxes(mcd->mux_clks,
+					 mcd->num_mux_clks, clk_data);
+unregister_factors:
+	if (mcd->factor_clks)
+		mtk_clk_unregister_factors(mcd->factor_clks,
+					   mcd->num_factor_clks, clk_data);
+unregister_fixed_clks:
+	if (mcd->fixed_clks)
+		mtk_clk_unregister_fixed_clks(mcd->fixed_clks,
+					      mcd->num_fixed_clks, clk_data);
 free_data:
 	mtk_free_clk_data(clk_data);
+	if (mcd->shared_io && base)
+		iounmap(base);
 	return r;
 }
 EXPORT_SYMBOL_GPL(mtk_clk_simple_probe);
@@ -510,7 +582,20 @@ int mtk_clk_simple_remove(struct platform_device *pdev)
 	struct device_node *node = pdev->dev.of_node;
 
 	of_clk_del_provider(node);
-	mtk_clk_unregister_gates(mcd->clks, mcd->num_clks, clk_data);
+	if (mcd->clks)
+		mtk_clk_unregister_gates(mcd->clks, mcd->num_clks, clk_data);
+	if (mcd->composite_clks)
+		mtk_clk_unregister_composites(mcd->composite_clks,
+					      mcd->num_composite_clks, clk_data);
+	if (mcd->mux_clks)
+		mtk_clk_unregister_muxes(mcd->mux_clks,
+					 mcd->num_mux_clks, clk_data);
+	if (mcd->factor_clks)
+		mtk_clk_unregister_factors(mcd->factor_clks,
+					   mcd->num_factor_clks, clk_data);
+	if (mcd->fixed_clks)
+		mtk_clk_unregister_fixed_clks(mcd->fixed_clks,
+					      mcd->num_fixed_clks, clk_data);
 	mtk_free_clk_data(clk_data);
 
 	return 0;
diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
index dd43235285db..1d036ba6ca07 100644
--- a/drivers/clk/mediatek/clk-mtk.h
+++ b/drivers/clk/mediatek/clk-mtk.h
@@ -220,7 +220,17 @@ void mtk_clk_unregister_ref2usb_tx(struct clk_hw *hw);
 struct mtk_clk_desc {
 	const struct mtk_gate *clks;
 	size_t num_clks;
+	const struct mtk_composite *composite_clks;
+	size_t num_composite_clks;
+	const struct mtk_fixed_clk *fixed_clks;
+	size_t num_fixed_clks;
+	const struct mtk_fixed_factor *factor_clks;
+	size_t num_factor_clks;
+	const struct mtk_mux *mux_clks;
+	size_t num_mux_clks;
 	const struct mtk_clk_rst_desc *rst_desc;
+	spinlock_t *clk_lock;
+	bool shared_io;
 };
 
 int mtk_clk_simple_probe(struct platform_device *pdev);
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:49 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:49 +0100
Subject: [PATCH v2 13/23] clk: mediatek: mt8173: Migrate pericfg/topckgen to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-14-angelogioacchino.delregno@collabora.com>

Function mtk_clk_simple_probe() gained the ability to register multiple
clock types: migrate MT8173's pericfg and topckgen to this common
probe function to reduce duplication and code size.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8173-pericfg.c  | 75 ++++-----------------
 drivers/clk/mediatek/clk-mt8173-topckgen.c | 76 ++++------------------
 2 files changed, 27 insertions(+), 124 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8173-pericfg.c b/drivers/clk/mediatek/clk-mt8173-pericfg.c
index 30c0fa263cc0..e87294b72c2c 100644
--- a/drivers/clk/mediatek/clk-mt8173-pericfg.c
+++ b/drivers/clk/mediatek/clk-mt8173-pericfg.c
@@ -46,6 +46,7 @@ static const struct mtk_composite peri_clks[] = {
 };
 
 static const struct mtk_gate peri_gates[] = {
+	GATE_DUMMY(CLK_DUMMY, "peri_gate_dummy"),
 	/* PERI0 */
 	GATE_PERI0(CLK_PERI_NFI, "peri_nfi", "axi_sel", 0),
 	GATE_PERI0(CLK_PERI_THERM, "peri_therm", "axi_sel", 1),
@@ -93,77 +94,27 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(pericfg_rst_ofs),
 };
 
+static const struct mtk_clk_desc peri_desc = {
+	.clks = peri_gates,
+	.num_clks = ARRAY_SIZE(peri_gates),
+	.composite_clks = peri_clks,
+	.num_composite_clks = ARRAY_SIZE(peri_clks),
+	.clk_lock = &mt8173_clk_lock,
+	.rst_desc = &clk_rst_desc,
+};
+
 static const struct of_device_id of_match_clk_mt8173_pericfg[] = {
-	{ .compatible = "mediatek,mt8173-pericfg" },
+	{ .compatible = "mediatek,mt8173-pericfg", .data = &peri_desc },
 	{ /* sentinel */ }
 };
 
-static int clk_mt8173_pericfg_probe(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-	void __iomem *base;
-
-	base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(base))
-		return PTR_ERR(base);
-
-	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
-	if (IS_ERR_OR_NULL(clk_data))
-		return -ENOMEM;
-
-	r = mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
-				   clk_data, &pdev->dev);
-	if (r)
-		goto free_clk_data;
-
-	r = mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
-					&mt8173_clk_lock, clk_data, &pdev->dev);
-	if (r)
-		goto unregister_gates;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_composites;
-
-	r = mtk_register_reset_controller(node, &clk_rst_desc);
-	if (r)
-		goto unregister_clk_hw;
-
-	return 0;
-
-unregister_clk_hw:
-	of_clk_del_provider(node);
-unregister_composites:
-	mtk_clk_unregister_composites(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
-unregister_gates:
-	mtk_clk_unregister_gates(peri_gates, ARRAY_SIZE(peri_gates), clk_data);
-free_clk_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
-
-static int clk_mt8173_pericfg_remove(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
-
-	of_clk_del_provider(node);
-	mtk_clk_unregister_composites(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
-	mtk_clk_unregister_gates(peri_gates, ARRAY_SIZE(peri_gates), clk_data);
-	mtk_free_clk_data(clk_data);
-
-	return 0;
-}
-
 static struct platform_driver clk_mt8173_pericfg_drv = {
 	.driver = {
 		.name = "clk-mt8173-pericfg",
 		.of_match_table = of_match_clk_mt8173_pericfg,
 	},
-	.probe = clk_mt8173_pericfg_probe,
-	.remove = clk_mt8173_pericfg_remove,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 };
 module_platform_driver(clk_mt8173_pericfg_drv);
 
diff --git a/drivers/clk/mediatek/clk-mt8173-topckgen.c b/drivers/clk/mediatek/clk-mt8173-topckgen.c
index c7323639c502..257961528fe2 100644
--- a/drivers/clk/mediatek/clk-mt8173-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8173-topckgen.c
@@ -421,6 +421,7 @@ static const char * const i2s3_b_ck_parents[] = {
 };
 
 static const struct mtk_fixed_clk fixed_clks[] = {
+	FIXED_CLK(CLK_DUMMY, "topck_dummy", "clk26m", DUMMY_RATE),
 	FIXED_CLK(CLK_TOP_CLKPH_MCK_O, "clkph_mck_o", "clk26m", DUMMY_RATE),
 	FIXED_CLK(CLK_TOP_USB_SYSPLL_125M, "usb_syspll_125m", "clk26m", 125 * MHZ),
 	FIXED_CLK(CLK_TOP_DSI0_DIG, "dsi0_dig", "clk26m", DUMMY_RATE),
@@ -623,77 +624,28 @@ static const struct mtk_composite top_muxes[] = {
 	MUX(CLK_TOP_I2S3_B_SEL, "i2s3_b_ck_sel", i2s3_b_ck_parents, 0x120, 8, 1),
 };
 
+static const struct mtk_clk_desc topck_desc = {
+	.fixed_clks = fixed_clks,
+	.num_fixed_clks = ARRAY_SIZE(fixed_clks),
+	.factor_clks = top_divs,
+	.num_factor_clks = ARRAY_SIZE(top_divs),
+	.composite_clks = top_muxes,
+	.num_composite_clks = ARRAY_SIZE(top_muxes),
+	.clk_lock = &mt8173_top_clk_lock,
+};
+
 static const struct of_device_id of_match_clk_mt8173_topckgen[] = {
-	{ .compatible = "mediatek,mt8173-topckgen" },
+	{ .compatible = "mediatek,mt8173-topckgen", .data = &topck_desc },
 	{ /* sentinel */ }
 };
 
-static int clk_mt8173_topckgen_probe(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *clk_data;
-	void __iomem *base;
-	int r;
-
-	base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(base))
-		return PTR_ERR(base);
-
-	clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
-	if (IS_ERR_OR_NULL(clk_data))
-		return -ENOMEM;
-
-	r = mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
-	if (r)
-		goto free_clk_data;
-
-	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	if (r)
-		goto unregister_fixed_clks;
-
-	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-					&mt8173_top_clk_lock, clk_data, &pdev->dev);
-	if (r)
-		goto unregister_factors;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_composites;
-
-	return 0;
-
-unregister_composites:
-	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
-unregister_factors:
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-unregister_fixed_clks:
-	mtk_clk_unregister_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
-free_clk_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
-
-static int clk_mt8173_topckgen_remove(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
-	struct device_node *node = pdev->dev.of_node;
-
-	of_clk_del_provider(node);
-	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	mtk_clk_unregister_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
-	mtk_free_clk_data(clk_data);
-
-	return 0;
-}
-
 static struct platform_driver clk_mt8173_topckgen_drv = {
 	.driver = {
 		.name = "clk-mt8173-topckgen",
 		.of_match_table = of_match_clk_mt8173_topckgen,
 	},
-	.probe = clk_mt8173_topckgen_probe,
-	.remove = clk_mt8173_topckgen_remove,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 };
 module_platform_driver(clk_mt8173_topckgen_drv);
 
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:41 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:41 +0100
Subject: [PATCH v2 05/23] clk: mediatek: clk-mtk: Propagate struct device for composites
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-6-angelogioacchino.delregno@collabora.com>

Like done for cpumux clocks, propagate struct device for composite
clocks registered through clk-mtk helpers to be able to get runtime
pm support for MTK clocks.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt2701.c          | 4 ++--
 drivers/clk/mediatek/clk-mt2712.c          | 4 ++--
 drivers/clk/mediatek/clk-mt6779.c          | 4 ++--
 drivers/clk/mediatek/clk-mt6795-pericfg.c  | 2 +-
 drivers/clk/mediatek/clk-mt6795-topckgen.c | 2 +-
 drivers/clk/mediatek/clk-mt6797.c          | 2 +-
 drivers/clk/mediatek/clk-mt7622.c          | 5 +++--
 drivers/clk/mediatek/clk-mt7629.c          | 4 ++--
 drivers/clk/mediatek/clk-mt8135.c          | 4 ++--
 drivers/clk/mediatek/clk-mt8167.c          | 4 ++--
 drivers/clk/mediatek/clk-mt8173.c          | 4 ++--
 drivers/clk/mediatek/clk-mt8183.c          | 6 +++---
 drivers/clk/mediatek/clk-mt8186-mcu.c      | 2 +-
 drivers/clk/mediatek/clk-mt8186-topckgen.c | 4 ++--
 drivers/clk/mediatek/clk-mt8192.c          | 4 ++--
 drivers/clk/mediatek/clk-mt8195-topckgen.c | 2 +-
 drivers/clk/mediatek/clk-mt8365.c          | 5 +++--
 drivers/clk/mediatek/clk-mt8516.c          | 4 ++--
 drivers/clk/mediatek/clk-mtk.c             | 9 +++++----
 drivers/clk/mediatek/clk-mtk.h             | 3 ++-
 20 files changed, 41 insertions(+), 37 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt2701.c b/drivers/clk/mediatek/clk-mt2701.c
index dcae25778817..bd62acb5d697 100644
--- a/drivers/clk/mediatek/clk-mt2701.c
+++ b/drivers/clk/mediatek/clk-mt2701.c
@@ -684,7 +684,7 @@ static int mtk_topckgen_init(struct platform_device *pdev)
 								clk_data);
 
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes),
-				base, &mt2701_clk_lock, clk_data);
+				base, &mt2701_clk_lock, clk_data, &pdev->dev);
 
 	mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs),
 				base, &mt2701_clk_lock, clk_data);
@@ -922,7 +922,7 @@ static int mtk_pericfg_init(struct platform_device *pdev)
 			       clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(peri_muxs, ARRAY_SIZE(peri_muxs), base,
-			&mt2701_clk_lock, clk_data);
+			&mt2701_clk_lock, clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt2712.c b/drivers/clk/mediatek/clk-mt2712.c
index 24ec3384c429..5cadcf6ca9b7 100644
--- a/drivers/clk/mediatek/clk-mt2712.c
+++ b/drivers/clk/mediatek/clk-mt2712.c
@@ -1347,7 +1347,7 @@ static int clk_mt2712_top_probe(struct platform_device *pdev)
 			top_clk_data);
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-			&mt2712_clk_lock, top_clk_data);
+			&mt2712_clk_lock, top_clk_data, &pdev->dev);
 	mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
 			&mt2712_clk_lock, top_clk_data);
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
@@ -1422,7 +1422,7 @@ static int clk_mt2712_mcu_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MCU_NR_CLK);
 
 	mtk_clk_register_composites(mcu_muxes, ARRAY_SIZE(mcu_muxes), base,
-			&mt2712_clk_lock, clk_data);
+			&mt2712_clk_lock, clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
diff --git a/drivers/clk/mediatek/clk-mt6779.c b/drivers/clk/mediatek/clk-mt6779.c
index 622a2fc6c167..825f2f57e868 100644
--- a/drivers/clk/mediatek/clk-mt6779.c
+++ b/drivers/clk/mediatek/clk-mt6779.c
@@ -1248,10 +1248,10 @@ static int clk_mt6779_top_probe(struct platform_device *pdev)
 			       node, &mt6779_clk_lock, clk_data);
 
 	mtk_clk_register_composites(top_aud_muxes, ARRAY_SIZE(top_aud_muxes),
-				    base, &mt6779_clk_lock, clk_data);
+				    base, &mt6779_clk_lock, clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs),
-				    base, &mt6779_clk_lock, clk_data);
+				    base, &mt6779_clk_lock, clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt6795-pericfg.c b/drivers/clk/mediatek/clk-mt6795-pericfg.c
index 479a8abcb80b..1fc80bc1592b 100644
--- a/drivers/clk/mediatek/clk-mt6795-pericfg.c
+++ b/drivers/clk/mediatek/clk-mt6795-pericfg.c
@@ -115,7 +115,7 @@ static int clk_mt6795_pericfg_probe(struct platform_device *pdev)
 		goto free_clk_data;
 
 	ret = mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
-					  &mt6795_peri_clk_lock, clk_data);
+					  &mt6795_peri_clk_lock, clk_data, &pdev->dev);
 	if (ret)
 		goto unregister_gates;
 
diff --git a/drivers/clk/mediatek/clk-mt6795-topckgen.c b/drivers/clk/mediatek/clk-mt6795-topckgen.c
index 8b8307635a35..bb232e1726f1 100644
--- a/drivers/clk/mediatek/clk-mt6795-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt6795-topckgen.c
@@ -558,7 +558,7 @@ static int clk_mt6795_topckgen_probe(struct platform_device *pdev)
 		goto unregister_factors;
 
 	ret = mtk_clk_register_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs), base,
-					  &mt6795_top_clk_lock, clk_data);
+					  &mt6795_top_clk_lock, clk_data, &pdev->dev);
 	if (ret)
 		goto unregister_muxes;
 
diff --git a/drivers/clk/mediatek/clk-mt6797.c b/drivers/clk/mediatek/clk-mt6797.c
index 250ac8bd6a3c..581bc7d9f66d 100644
--- a/drivers/clk/mediatek/clk-mt6797.c
+++ b/drivers/clk/mediatek/clk-mt6797.c
@@ -397,7 +397,7 @@ static int mtk_topckgen_init(struct platform_device *pdev)
 				 clk_data);
 
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-				    &mt6797_clk_lock, clk_data);
+				    &mt6797_clk_lock, clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt7622.c b/drivers/clk/mediatek/clk-mt7622.c
index adf3b4535170..fb4e2552ba76 100644
--- a/drivers/clk/mediatek/clk-mt7622.c
+++ b/drivers/clk/mediatek/clk-mt7622.c
@@ -647,7 +647,8 @@ static int mtk_topckgen_init(struct platform_device *pdev)
 				 clk_data);
 
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes),
-				    base, &mt7622_clk_lock, clk_data);
+				    base, &mt7622_clk_lock, clk_data,
+				    &pdev->dev);
 
 	mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs),
 				  base, &mt7622_clk_lock, clk_data);
@@ -725,7 +726,7 @@ static int mtk_pericfg_init(struct platform_device *pdev)
 			       clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(peri_muxes, ARRAY_SIZE(peri_muxes), base,
-				    &mt7622_clk_lock, clk_data);
+				    &mt7622_clk_lock, clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt7629.c b/drivers/clk/mediatek/clk-mt7629.c
index 48bc4a6705fb..890f1944565e 100644
--- a/drivers/clk/mediatek/clk-mt7629.c
+++ b/drivers/clk/mediatek/clk-mt7629.c
@@ -589,7 +589,7 @@ static int mtk_topckgen_init(struct platform_device *pdev)
 				 clk_data);
 
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes),
-				    base, &mt7629_clk_lock, clk_data);
+				    base, &mt7629_clk_lock, clk_data, &pdev->dev);
 
 	clk_prepare_enable(clk_data->hws[CLK_TOP_AXI_SEL]->clk);
 	clk_prepare_enable(clk_data->hws[CLK_TOP_MEM_SEL]->clk);
@@ -632,7 +632,7 @@ static int mtk_pericfg_init(struct platform_device *pdev)
 			       clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(peri_muxes, ARRAY_SIZE(peri_muxes), base,
-				    &mt7629_clk_lock, clk_data);
+				    &mt7629_clk_lock, clk_data, &pdev->dev);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8135.c b/drivers/clk/mediatek/clk-mt8135.c
index 7193ab38090d..253fe271ee97 100644
--- a/drivers/clk/mediatek/clk-mt8135.c
+++ b/drivers/clk/mediatek/clk-mt8135.c
@@ -549,7 +549,7 @@ static void __init mtk_topckgen_init(struct device_node *node)
 	mtk_clk_register_factors(root_clk_alias, ARRAY_SIZE(root_clk_alias), clk_data);
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-			&mt8135_clk_lock, clk_data);
+			&mt8135_clk_lock, clk_data, NULL);
 
 	clk_prepare_enable(clk_data->hws[CLK_TOP_CCI_SEL]->clk);
 
@@ -598,7 +598,7 @@ static void __init mtk_pericfg_init(struct device_node *node)
 	mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
 						clk_data, NULL);
 	mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
-			&mt8135_clk_lock, clk_data);
+			&mt8135_clk_lock, clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8167.c b/drivers/clk/mediatek/clk-mt8167.c
index b150f893a4b8..cc064e98643a 100644
--- a/drivers/clk/mediatek/clk-mt8167.c
+++ b/drivers/clk/mediatek/clk-mt8167.c
@@ -941,7 +941,7 @@ static void __init mtk_topckgen_init(struct device_node *node)
 
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-		&mt8167_clk_lock, clk_data);
+		&mt8167_clk_lock, clk_data, NULL);
 	mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs),
 				base, &mt8167_clk_lock, clk_data);
 
@@ -967,7 +967,7 @@ static void __init mtk_infracfg_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_IFR_NR_CLK);
 
 	mtk_clk_register_composites(ifr_muxes, ARRAY_SIZE(ifr_muxes), base,
-		&mt8167_clk_lock, clk_data);
+		&mt8167_clk_lock, clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173.c
index 125b01b9e2ab..617f68274004 100644
--- a/drivers/clk/mediatek/clk-mt8173.c
+++ b/drivers/clk/mediatek/clk-mt8173.c
@@ -870,7 +870,7 @@ static void __init mtk_topckgen_init(struct device_node *node)
 	mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-			&mt8173_clk_lock, clk_data);
+			&mt8173_clk_lock, clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
@@ -921,7 +921,7 @@ static void __init mtk_pericfg_init(struct device_node *node)
 	mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
 			       clk_data, NULL);
 	mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
-			&mt8173_clk_lock, clk_data);
+			&mt8173_clk_lock, clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mt8183.c b/drivers/clk/mediatek/clk-mt8183.c
index f99c092476c2..194906ca4b5b 100644
--- a/drivers/clk/mediatek/clk-mt8183.c
+++ b/drivers/clk/mediatek/clk-mt8183.c
@@ -1170,10 +1170,10 @@ static int clk_mt8183_top_probe(struct platform_device *pdev)
 		node, &mt8183_clk_lock, top_clk_data);
 
 	mtk_clk_register_composites(top_aud_muxes, ARRAY_SIZE(top_aud_muxes),
-		base, &mt8183_clk_lock, top_clk_data);
+		base, &mt8183_clk_lock, top_clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs),
-		base, &mt8183_clk_lock, top_clk_data);
+		base, &mt8183_clk_lock, top_clk_data, &pdev->dev);
 
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
 		top_clk_data, &pdev->dev);
@@ -1237,7 +1237,7 @@ static int clk_mt8183_mcu_probe(struct platform_device *pdev)
 	clk_data = mtk_alloc_clk_data(CLK_MCU_NR_CLK);
 
 	mtk_clk_register_composites(mcu_muxes, ARRAY_SIZE(mcu_muxes), base,
-			&mt8183_clk_lock, clk_data);
+			&mt8183_clk_lock, clk_data, &pdev->dev);
 
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
diff --git a/drivers/clk/mediatek/clk-mt8186-mcu.c b/drivers/clk/mediatek/clk-mt8186-mcu.c
index dfc305c1fc5d..c4a5557cb830 100644
--- a/drivers/clk/mediatek/clk-mt8186-mcu.c
+++ b/drivers/clk/mediatek/clk-mt8186-mcu.c
@@ -66,7 +66,7 @@ static int clk_mt8186_mcu_probe(struct platform_device *pdev)
 	}
 
 	r = mtk_clk_register_composites(mcu_muxes, ARRAY_SIZE(mcu_muxes), base,
-					NULL, clk_data);
+					NULL, clk_data, &pdev->dev);
 	if (r)
 		goto free_mcu_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8186-topckgen.c b/drivers/clk/mediatek/clk-mt8186-topckgen.c
index c2beda7ef976..b79954a42481 100644
--- a/drivers/clk/mediatek/clk-mt8186-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8186-topckgen.c
@@ -743,12 +743,12 @@ static int clk_mt8186_topck_probe(struct platform_device *pdev)
 		goto unregister_factors;
 
 	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-					&mt8186_clk_lock, clk_data);
+					&mt8186_clk_lock, clk_data, &pdev->dev);
 	if (r)
 		goto unregister_muxes;
 
 	r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
-					&mt8186_clk_lock, clk_data);
+					&mt8186_clk_lock, clk_data, &pdev->dev);
 	if (r)
 		goto unregister_composite_muxes;
 
diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index e1b625b86911..27ad629062c4 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1118,12 +1118,12 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 		goto unregister_factors;
 
 	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-					&mt8192_clk_lock, top_clk_data);
+					&mt8192_clk_lock, top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_muxes;
 
 	r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
-					&mt8192_clk_lock, top_clk_data);
+					&mt8192_clk_lock, top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_top_composites;
 
diff --git a/drivers/clk/mediatek/clk-mt8195-topckgen.c b/drivers/clk/mediatek/clk-mt8195-topckgen.c
index ed604d39f9d5..437c12d19b03 100644
--- a/drivers/clk/mediatek/clk-mt8195-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8195-topckgen.c
@@ -1282,7 +1282,7 @@ static int clk_mt8195_topck_probe(struct platform_device *pdev)
 		goto unregister_muxes;
 
 	r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
-					&mt8195_clk_lock, top_clk_data);
+					&mt8195_clk_lock, top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_muxes;
 
diff --git a/drivers/clk/mediatek/clk-mt8365.c b/drivers/clk/mediatek/clk-mt8365.c
index 5a43e5aad16e..00c15f89a5f6 100644
--- a/drivers/clk/mediatek/clk-mt8365.c
+++ b/drivers/clk/mediatek/clk-mt8365.c
@@ -954,7 +954,7 @@ static int clk_mt8365_top_probe(struct platform_device *pdev)
 
 	ret = mtk_clk_register_composites(top_misc_mux_gates,
 					  ARRAY_SIZE(top_misc_mux_gates), base,
-					  &mt8365_clk_lock, clk_data);
+					  &mt8365_clk_lock, clk_data, &pdev->dev);
 	if (ret)
 		goto unregister_muxes;
 
@@ -1081,7 +1081,8 @@ static int clk_mt8365_mcu_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	ret = mtk_clk_register_composites(mcu_muxes, ARRAY_SIZE(mcu_muxes),
-					  base, &mt8365_clk_lock, clk_data);
+					  base, &mt8365_clk_lock, clk_data,
+					  &pdev->dev);
 	if (ret)
 		goto free_clk_data;
 
diff --git a/drivers/clk/mediatek/clk-mt8516.c b/drivers/clk/mediatek/clk-mt8516.c
index a648ee463697..b50b2d1387b6 100644
--- a/drivers/clk/mediatek/clk-mt8516.c
+++ b/drivers/clk/mediatek/clk-mt8516.c
@@ -695,7 +695,7 @@ static void __init mtk_topckgen_init(struct device_node *node)
 
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-		&mt8516_clk_lock, clk_data);
+		&mt8516_clk_lock, clk_data, NULL);
 	mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs),
 				base, &mt8516_clk_lock, clk_data);
 
@@ -721,7 +721,7 @@ static void __init mtk_infracfg_init(struct device_node *node)
 	clk_data = mtk_alloc_clk_data(CLK_IFR_NR_CLK);
 
 	mtk_clk_register_composites(ifr_muxes, ARRAY_SIZE(ifr_muxes), base,
-		&mt8516_clk_lock, clk_data);
+		&mt8516_clk_lock, clk_data, NULL);
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index e04eef7e2b6f..a1ab34305b95 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -198,7 +198,7 @@ void mtk_clk_unregister_factors(const struct mtk_fixed_factor *clks, int num,
 EXPORT_SYMBOL_GPL(mtk_clk_unregister_factors);
 
 static struct clk_hw *mtk_clk_register_composite(const struct mtk_composite *mc,
-		void __iomem *base, spinlock_t *lock)
+		void __iomem *base, spinlock_t *lock, struct device *dev)
 {
 	struct clk_hw *hw;
 	struct clk_mux *mux = NULL;
@@ -264,7 +264,7 @@ static struct clk_hw *mtk_clk_register_composite(const struct mtk_composite *mc,
 		div_ops = &clk_divider_ops;
 	}
 
-	hw = clk_hw_register_composite(NULL, mc->name, parent_names, num_parents,
+	hw = clk_hw_register_composite(dev, mc->name, parent_names, num_parents,
 		mux_hw, mux_ops,
 		div_hw, div_ops,
 		gate_hw, gate_ops,
@@ -310,7 +310,8 @@ static void mtk_clk_unregister_composite(struct clk_hw *hw)
 
 int mtk_clk_register_composites(const struct mtk_composite *mcs, int num,
 				void __iomem *base, spinlock_t *lock,
-				struct clk_hw_onecell_data *clk_data)
+				struct clk_hw_onecell_data *clk_data,
+				struct device *dev)
 {
 	struct clk_hw *hw;
 	int i;
@@ -327,7 +328,7 @@ int mtk_clk_register_composites(const struct mtk_composite *mcs, int num,
 			continue;
 		}
 
-		hw = mtk_clk_register_composite(mc, base, lock);
+		hw = mtk_clk_register_composite(mc, base, lock, dev);
 
 		if (IS_ERR(hw)) {
 			pr_err("Failed to register clk %s: %pe\n", mc->name,
diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
index f2db6b57d5b5..15122504c02d 100644
--- a/drivers/clk/mediatek/clk-mtk.h
+++ b/drivers/clk/mediatek/clk-mtk.h
@@ -156,7 +156,8 @@ struct mtk_composite {
 
 int mtk_clk_register_composites(const struct mtk_composite *mcs, int num,
 				void __iomem *base, spinlock_t *lock,
-				struct clk_hw_onecell_data *clk_data);
+				struct clk_hw_onecell_data *clk_data,
+				struct device *dev);
 void mtk_clk_unregister_composites(const struct mtk_composite *mcs, int num,
 				   struct clk_hw_onecell_data *clk_data);
 
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:42 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:42 +0100
Subject: [PATCH v2 06/23] clk: mediatek: clk-mux: Propagate struct device for mtk-mux
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-7-angelogioacchino.delregno@collabora.com>

Like done for other clocks, propagate struct device for mtk mux clocks
registered through clk-mux helpers to enable runtime pm support.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt6765.c          | 2 +-
 drivers/clk/mediatek/clk-mt6779.c          | 2 +-
 drivers/clk/mediatek/clk-mt6795-topckgen.c | 2 +-
 drivers/clk/mediatek/clk-mt7986-infracfg.c | 2 +-
 drivers/clk/mediatek/clk-mt7986-topckgen.c | 2 +-
 drivers/clk/mediatek/clk-mt8183.c          | 2 +-
 drivers/clk/mediatek/clk-mt8186-topckgen.c | 2 +-
 drivers/clk/mediatek/clk-mt8192.c          | 2 +-
 drivers/clk/mediatek/clk-mt8195-topckgen.c | 2 +-
 drivers/clk/mediatek/clk-mt8365.c          | 2 +-
 drivers/clk/mediatek/clk-mux.c             | 9 +++++----
 drivers/clk/mediatek/clk-mux.h             | 3 ++-
 12 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt6765.c b/drivers/clk/mediatek/clk-mt6765.c
index 7401693ef472..30d0fe9acb37 100644
--- a/drivers/clk/mediatek/clk-mt6765.c
+++ b/drivers/clk/mediatek/clk-mt6765.c
@@ -827,7 +827,7 @@ static int clk_mt6765_top_probe(struct platform_device *pdev)
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs),
 				 clk_data);
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
-			       &mt6765_clk_lock, clk_data);
+			       &mt6765_clk_lock, clk_data, &pdev->dev);
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
 			       clk_data, &pdev->dev);
 
diff --git a/drivers/clk/mediatek/clk-mt6779.c b/drivers/clk/mediatek/clk-mt6779.c
index 825f2f57e868..6d1fb19be77b 100644
--- a/drivers/clk/mediatek/clk-mt6779.c
+++ b/drivers/clk/mediatek/clk-mt6779.c
@@ -1245,7 +1245,7 @@ static int clk_mt6779_top_probe(struct platform_device *pdev)
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes),
-			       node, &mt6779_clk_lock, clk_data);
+			       node, &mt6779_clk_lock, clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(top_aud_muxes, ARRAY_SIZE(top_aud_muxes),
 				    base, &mt6779_clk_lock, clk_data, &pdev->dev);
diff --git a/drivers/clk/mediatek/clk-mt6795-topckgen.c b/drivers/clk/mediatek/clk-mt6795-topckgen.c
index bb232e1726f1..19440fe5460d 100644
--- a/drivers/clk/mediatek/clk-mt6795-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt6795-topckgen.c
@@ -553,7 +553,7 @@ static int clk_mt6795_topckgen_probe(struct platform_device *pdev)
 		goto unregister_fixed_clks;
 
 	ret = mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
-				     &mt6795_top_clk_lock, clk_data);
+				     &mt6795_top_clk_lock, clk_data, &pdev->dev);
 	if (ret)
 		goto unregister_factors;
 
diff --git a/drivers/clk/mediatek/clk-mt7986-infracfg.c b/drivers/clk/mediatek/clk-mt7986-infracfg.c
index 24947ccdb70a..fe64a226c4ac 100644
--- a/drivers/clk/mediatek/clk-mt7986-infracfg.c
+++ b/drivers/clk/mediatek/clk-mt7986-infracfg.c
@@ -191,7 +191,7 @@ static int clk_mt7986_infracfg_probe(struct platform_device *pdev)
 
 	mtk_clk_register_factors(infra_divs, ARRAY_SIZE(infra_divs), clk_data);
 	mtk_clk_register_muxes(infra_muxes, ARRAY_SIZE(infra_muxes), node,
-			       &mt7986_clk_lock, clk_data);
+			       &mt7986_clk_lock, clk_data, &pdev->dev);
 	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
 			       clk_data, &pdev->dev);
 
diff --git a/drivers/clk/mediatek/clk-mt7986-topckgen.c b/drivers/clk/mediatek/clk-mt7986-topckgen.c
index de5121cf2877..d7df9585787f 100644
--- a/drivers/clk/mediatek/clk-mt7986-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt7986-topckgen.c
@@ -304,7 +304,7 @@ static int clk_mt7986_topckgen_probe(struct platform_device *pdev)
 				    clk_data);
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
-			       &mt7986_clk_lock, clk_data);
+			       &mt7986_clk_lock, clk_data, &pdev->dev);
 
 	clk_prepare_enable(clk_data->hws[CLK_TOP_SYSAXI_SEL]->clk);
 	clk_prepare_enable(clk_data->hws[CLK_TOP_SYSAPB_SEL]->clk);
diff --git a/drivers/clk/mediatek/clk-mt8183.c b/drivers/clk/mediatek/clk-mt8183.c
index 194906ca4b5b..10a82b542376 100644
--- a/drivers/clk/mediatek/clk-mt8183.c
+++ b/drivers/clk/mediatek/clk-mt8183.c
@@ -1167,7 +1167,7 @@ static int clk_mt8183_top_probe(struct platform_device *pdev)
 	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
 
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes),
-		node, &mt8183_clk_lock, top_clk_data);
+		node, &mt8183_clk_lock, top_clk_data, &pdev->dev);
 
 	mtk_clk_register_composites(top_aud_muxes, ARRAY_SIZE(top_aud_muxes),
 		base, &mt8183_clk_lock, top_clk_data, &pdev->dev);
diff --git a/drivers/clk/mediatek/clk-mt8186-topckgen.c b/drivers/clk/mediatek/clk-mt8186-topckgen.c
index b79954a42481..d05143891b69 100644
--- a/drivers/clk/mediatek/clk-mt8186-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8186-topckgen.c
@@ -738,7 +738,7 @@ static int clk_mt8186_topck_probe(struct platform_device *pdev)
 		goto unregister_fixed_clks;
 
 	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
-				   &mt8186_clk_lock, clk_data);
+				   &mt8186_clk_lock, clk_data, &pdev->dev);
 	if (r)
 		goto unregister_factors;
 
diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index 27ad629062c4..3ca068a4c552 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1113,7 +1113,7 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 		goto unregister_early_factors;
 
 	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
-				   &mt8192_clk_lock, top_clk_data);
+				   &mt8192_clk_lock, top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_factors;
 
diff --git a/drivers/clk/mediatek/clk-mt8195-topckgen.c b/drivers/clk/mediatek/clk-mt8195-topckgen.c
index 437c12d19b03..6d6a11d4a536 100644
--- a/drivers/clk/mediatek/clk-mt8195-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8195-topckgen.c
@@ -1263,7 +1263,7 @@ static int clk_mt8195_topck_probe(struct platform_device *pdev)
 		goto unregister_fixed_clks;
 
 	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
-				   &mt8195_clk_lock, top_clk_data);
+				   &mt8195_clk_lock, top_clk_data, &pdev->dev);
 	if (r)
 		goto unregister_factors;
 
diff --git a/drivers/clk/mediatek/clk-mt8365.c b/drivers/clk/mediatek/clk-mt8365.c
index 00c15f89a5f6..abb719b4661a 100644
--- a/drivers/clk/mediatek/clk-mt8365.c
+++ b/drivers/clk/mediatek/clk-mt8365.c
@@ -948,7 +948,7 @@ static int clk_mt8365_top_probe(struct platform_device *pdev)
 		goto unregister_fixed_clks;
 
 	ret = mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
-				     &mt8365_clk_lock, clk_data);
+				     &mt8365_clk_lock, clk_data, &pdev->dev);
 	if (ret)
 		goto unregister_factors;
 
diff --git a/drivers/clk/mediatek/clk-mux.c b/drivers/clk/mediatek/clk-mux.c
index ba1720b9e231..cd37abdf47c9 100644
--- a/drivers/clk/mediatek/clk-mux.c
+++ b/drivers/clk/mediatek/clk-mux.c
@@ -156,7 +156,7 @@ EXPORT_SYMBOL_GPL(mtk_mux_gate_clr_set_upd_ops);
 
 static struct clk_hw *mtk_clk_register_mux(const struct mtk_mux *mux,
 				 struct regmap *regmap,
-				 spinlock_t *lock)
+				 spinlock_t *lock, struct device *dev)
 {
 	struct mtk_clk_mux *clk_mux;
 	struct clk_init_data init = {};
@@ -177,7 +177,7 @@ static struct clk_hw *mtk_clk_register_mux(const struct mtk_mux *mux,
 	clk_mux->lock = lock;
 	clk_mux->hw.init = &init;
 
-	ret = clk_hw_register(NULL, &clk_mux->hw);
+	ret = clk_hw_register(dev, &clk_mux->hw);
 	if (ret) {
 		kfree(clk_mux);
 		return ERR_PTR(ret);
@@ -201,7 +201,8 @@ static void mtk_clk_unregister_mux(struct clk_hw *hw)
 int mtk_clk_register_muxes(const struct mtk_mux *muxes,
 			   int num, struct device_node *node,
 			   spinlock_t *lock,
-			   struct clk_hw_onecell_data *clk_data)
+			   struct clk_hw_onecell_data *clk_data,
+			   struct device *dev)
 {
 	struct regmap *regmap;
 	struct clk_hw *hw;
@@ -222,7 +223,7 @@ int mtk_clk_register_muxes(const struct mtk_mux *muxes,
 			continue;
 		}
 
-		hw = mtk_clk_register_mux(mux, regmap, lock);
+		hw = mtk_clk_register_mux(mux, regmap, lock, dev);
 
 		if (IS_ERR(hw)) {
 			pr_err("Failed to register clk %s: %pe\n", mux->name,
diff --git a/drivers/clk/mediatek/clk-mux.h b/drivers/clk/mediatek/clk-mux.h
index 83ff420f4ebe..3fe07719e5c6 100644
--- a/drivers/clk/mediatek/clk-mux.h
+++ b/drivers/clk/mediatek/clk-mux.h
@@ -86,7 +86,8 @@ extern const struct clk_ops mtk_mux_gate_clr_set_upd_ops;
 int mtk_clk_register_muxes(const struct mtk_mux *muxes,
 			   int num, struct device_node *node,
 			   spinlock_t *lock,
-			   struct clk_hw_onecell_data *clk_data);
+			   struct clk_hw_onecell_data *clk_data,
+			   struct device *dev);
 
 void mtk_clk_unregister_muxes(const struct mtk_mux *muxes, int num,
 			      struct clk_hw_onecell_data *clk_data);
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:43 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:43 +0100
Subject: [PATCH v2 07/23] clk: mediatek: clk-mtk: Add dummy clock ops
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-8-angelogioacchino.delregno@collabora.com>

In order to migrate some (few) old clock drivers to the common
mtk_clk_simple_probe() function, add dummy clock ops to be able
to insert a dummy clock with ID 0 at the beginning of the list.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mtk.c | 15 +++++++++++++++
 drivers/clk/mediatek/clk-mtk.h | 19 +++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index a1ab34305b95..d05364e17e95 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -18,6 +18,21 @@
 #include "clk-mtk.h"
 #include "clk-gate.h"
 
+const struct mtk_gate_regs cg_regs_dummy = { 0, 0, 0 };
+
+static int mtk_clk_dummy_enable(struct clk_hw *hw)
+{
+	return 0;
+}
+
+static void mtk_clk_dummy_disable(struct clk_hw *hw) { }
+
+const struct clk_ops mtk_clk_dummy_ops = {
+	.enable		= mtk_clk_dummy_enable,
+	.disable	= mtk_clk_dummy_disable,
+};
+EXPORT_SYMBOL_GPL(mtk_clk_dummy_ops);
+
 static void mtk_init_clk_data(struct clk_hw_onecell_data *clk_data,
 			      unsigned int clk_num)
 {
diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
index 15122504c02d..dd43235285db 100644
--- a/drivers/clk/mediatek/clk-mtk.h
+++ b/drivers/clk/mediatek/clk-mtk.h
@@ -22,6 +22,25 @@
 
 struct platform_device;
 
+/*
+ * We need the clock IDs to start from zero but to maintain devicetree
+ * backwards compatibility we can't change bindings to start from zero.
+ * Only a few platforms are affected, so we solve issues given by the
+ * commonized MTK clocks probe function(s) by adding a dummy clock at
+ * the beginning where needed.
+ */
+#define CLK_DUMMY		0
+
+extern const struct clk_ops mtk_clk_dummy_ops;
+extern const struct mtk_gate_regs cg_regs_dummy;
+
+#define GATE_DUMMY(_id, _name) {				\
+		.id = _id,					\
+		.name = _name,					\
+		.regs = &cg_regs_dummy,				\
+		.ops = &mtk_clk_dummy_ops,			\
+	}
+
 struct mtk_fixed_clk {
 	int id;
 	const char *name;
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:45 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:45 +0100
Subject: [PATCH v2 09/23] clk: mediatek: mt8173: Remove mtk_clk_enable_critical()
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-10-angelogioacchino.delregno@collabora.com>

The entire point of mtk_clk_enable_critical() is to raise the refcount
of some clocks so that they won't be turned off during runtime, but
this is the same as what the CLK_IS_CRITICAL flag does.

Set CLK_IS_CRITICAL on all of the critical clocks and remove the
aforementioned function as a cleanup.

No functional changes.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8173.c | 41 ++++++++++++-------------------
 1 file changed, 16 insertions(+), 25 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173.c
index 70cdc0719658..02231f8ba6d9 100644
--- a/drivers/clk/mediatek/clk-mt8173.c
+++ b/drivers/clk/mediatek/clk-mt8173.c
@@ -546,8 +546,11 @@ static const struct mtk_composite cpu_muxes[] = {
 static const struct mtk_composite top_muxes[] = {
 	/* CLK_CFG_0 */
 	MUX(CLK_TOP_AXI_SEL, "axi_sel", axi_parents, 0x0040, 0, 3),
-	MUX(CLK_TOP_MEM_SEL, "mem_sel", mem_parents, 0x0040, 8, 1),
-	MUX_GATE(CLK_TOP_DDRPHYCFG_SEL, "ddrphycfg_sel", ddrphycfg_parents, 0x0040, 16, 1, 23),
+	MUX_FLAGS(CLK_TOP_MEM_SEL, "mem_sel", mem_parents, 0x0040, 8, 1,
+		  CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
+	MUX_GATE_FLAGS(CLK_TOP_DDRPHYCFG_SEL, "ddrphycfg_sel",
+		       ddrphycfg_parents, 0x0040, 16, 1, 23,
+		       CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 	MUX_GATE(CLK_TOP_MM_SEL, "mm_sel", mm_parents, 0x0040, 24, 4, 31),
 	/* CLK_CFG_1 */
 	MUX_GATE(CLK_TOP_PWM_SEL, "pwm_sel", pwm_parents, 0x0050, 0, 2, 7),
@@ -581,7 +584,9 @@ static const struct mtk_composite top_muxes[] = {
 	 */
 	MUX_GATE_FLAGS(CLK_TOP_DPI0_SEL, "dpi0_sel", dpi0_parents, 0x00a0, 0, 3, 7, 0),
 	MUX_GATE(CLK_TOP_IRDA_SEL, "irda_sel", irda_parents, 0x00a0, 8, 2, 15),
-	MUX_GATE(CLK_TOP_CCI400_SEL, "cci400_sel", cci400_parents, 0x00a0, 16, 3, 23),
+	MUX_GATE_FLAGS(CLK_TOP_CCI400_SEL, "cci400_sel",
+		       cci400_parents, 0x00a0, 16, 3, 23,
+		       CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 	MUX_GATE(CLK_TOP_AUD_1_SEL, "aud_1_sel", aud_1_parents, 0x00a0, 24, 2, 31),
 	/* CLK_CFG_7 */
 	MUX_GATE(CLK_TOP_AUD_2_SEL, "aud_2_sel", aud_2_parents, 0x00b0, 0, 2, 7),
@@ -596,7 +601,8 @@ static const struct mtk_composite top_muxes[] = {
 	MUX_GATE(CLK_TOP_MSDC50_2_H_SEL, "msdc50_2_h_sel", msdc50_2_h_parents, 0x00d0, 0, 3, 7),
 	MUX_GATE(CLK_TOP_HDCP_SEL, "hdcp_sel", hdcp_parents, 0x00d0, 8, 2, 15),
 	MUX_GATE(CLK_TOP_HDCP_24M_SEL, "hdcp_24m_sel", hdcp_24m_parents, 0x00d0, 16, 2, 23),
-	MUX(CLK_TOP_RTC_SEL, "rtc_sel", rtc_parents, 0x00d0, 24, 2),
+	MUX_FLAGS(CLK_TOP_RTC_SEL, "rtc_sel", rtc_parents, 0x00d0, 24, 2,
+		  CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 
 	DIV_GATE(CLK_TOP_APLL1_DIV0, "apll1_div0", "aud_1_sel", 0x12c, 8, 0x120, 4, 24),
 	DIV_GATE(CLK_TOP_APLL1_DIV1, "apll1_div1", "aud_1_sel", 0x12c, 9, 0x124, 8, 0),
@@ -846,23 +852,8 @@ static const struct mtk_clk_rst_desc clk_rst_desc[] = {
 	}
 };
 
-static struct clk_hw_onecell_data *mt8173_top_clk_data;
-static struct clk_hw_onecell_data *mt8173_pll_clk_data;
 static struct clk_hw_onecell_data *infra_clk_data;
 
-static void mtk_clk_enable_critical(void)
-{
-	if (!mt8173_top_clk_data || !mt8173_pll_clk_data)
-		return;
-
-	clk_prepare_enable(mt8173_pll_clk_data->hws[CLK_APMIXED_ARMCA15PLL]->clk);
-	clk_prepare_enable(mt8173_pll_clk_data->hws[CLK_APMIXED_ARMCA7PLL]->clk);
-	clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_MEM_SEL]->clk);
-	clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_DDRPHYCFG_SEL]->clk);
-	clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_CCI400_SEL]->clk);
-	clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_RTC_SEL]->clk);
-}
-
 static int clk_mt8173_topck_probe(struct platform_device *pdev)
 {
 	struct device_node *node = pdev->dev.of_node;
@@ -874,7 +865,7 @@ static int clk_mt8173_topck_probe(struct platform_device *pdev)
 	if (IS_ERR(base))
 		return PTR_ERR(base);
 
-	mt8173_top_clk_data = clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
+	clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
 	if (IS_ERR_OR_NULL(clk_data))
 		return -ENOMEM;
 
@@ -895,7 +886,6 @@ static int clk_mt8173_topck_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_composites;
 
-	mtk_clk_enable_critical();
 	return 0;
 
 unregister_composites:
@@ -1048,8 +1038,10 @@ static const struct mtk_pll_div_table mmpll_div_table[] = {
 };
 
 static const struct mtk_pll_data plls[] = {
-	PLL(CLK_APMIXED_ARMCA15PLL, "armca15pll", 0x200, 0x20c, 0, 0, 21, 0x204, 24, 0x0, 0x204, 0),
-	PLL(CLK_APMIXED_ARMCA7PLL, "armca7pll", 0x210, 0x21c, 0, 0, 21, 0x214, 24, 0x0, 0x214, 0),
+	PLL(CLK_APMIXED_ARMCA15PLL, "armca15pll", 0x200, 0x20c, 0, PLL_AO,
+	    21, 0x204, 24, 0x0, 0x204, 0),
+	PLL(CLK_APMIXED_ARMCA7PLL, "armca7pll", 0x210, 0x21c, 0, PLL_AO,
+	    21, 0x214, 24, 0x0, 0x214, 0),
 	PLL(CLK_APMIXED_MAINPLL, "mainpll", 0x220, 0x22c, 0xf0000100, HAVE_RST_BAR, 21, 0x220, 4, 0x0, 0x224, 0),
 	PLL(CLK_APMIXED_UNIVPLL, "univpll", 0x230, 0x23c, 0xfe000000, HAVE_RST_BAR, 7, 0x230, 4, 0x0, 0x234, 14),
 	PLL_B(CLK_APMIXED_MMPLL, "mmpll", 0x240, 0x24c, 0, 0, 21, 0x244, 24, 0x0, 0x244, 0, mmpll_div_table),
@@ -1076,7 +1068,7 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
 	if (!base)
 		return PTR_ERR(base);
 
-	mt8173_pll_clk_data = clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
+	clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
 	if (IS_ERR_OR_NULL(clk_data))
 		return -ENOMEM;
 
@@ -1101,7 +1093,6 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_ref2usb;
 
-	mtk_clk_enable_critical();
 	return 0;
 
 unregister_ref2usb:
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:52 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:52 +0100
Subject: [PATCH v2 16/23] clk: mediatek: mt8186: Join top_adj_div and top_muxes
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-17-angelogioacchino.delregno@collabora.com>

Like done for MT8192, join the two to register them in one shot, as
there's no point in doing that separately from one another.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8186-topckgen.c | 15 ++-------------
 1 file changed, 2 insertions(+), 13 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8186-topckgen.c b/drivers/clk/mediatek/clk-mt8186-topckgen.c
index d05143891b69..63befb1f492d 100644
--- a/drivers/clk/mediatek/clk-mt8186-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8186-topckgen.c
@@ -669,9 +669,6 @@ static struct mtk_composite top_muxes[] = {
 	MUX(CLK_TOP_APLL_I2S4_MCK_SEL, "apll_i2s4_mck_sel", apll_mck_parents, 0x0320, 19, 1),
 	MUX(CLK_TOP_APLL_TDMOUT_MCK_SEL, "apll_tdmout_mck_sel", apll_mck_parents,
 		0x0320, 20, 1),
-};
-
-static const struct mtk_composite top_adj_divs[] = {
 	DIV_GATE(CLK_TOP_APLL12_CK_DIV0, "apll12_div0", "apll_i2s0_mck_sel",
 			0x0320, 0, 0x0328, 8, 0),
 	DIV_GATE(CLK_TOP_APLL12_CK_DIV1, "apll12_div1", "apll_i2s1_mck_sel",
@@ -747,26 +744,19 @@ static int clk_mt8186_topck_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_muxes;
 
-	r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
-					&mt8186_clk_lock, clk_data, &pdev->dev);
-	if (r)
-		goto unregister_composite_muxes;
-
 	r = clk_mt8186_reg_mfg_mux_notifier(&pdev->dev,
 					    clk_data->hws[CLK_TOP_MFG]->clk);
 	if (r)
-		goto unregister_composite_divs;
+		goto unregister_composite_muxes;
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		goto unregister_composite_divs;
+		goto unregister_composite_muxes;
 
 	platform_set_drvdata(pdev, clk_data);
 
 	return r;
 
-unregister_composite_divs:
-	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), clk_data);
 unregister_composite_muxes:
 	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
 unregister_muxes:
@@ -787,7 +777,6 @@ static int clk_mt8186_topck_remove(struct platform_device *pdev)
 
 	of_clk_del_provider(node);
 	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), clk_data);
-	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
 	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), clk_data);
 	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
 	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), clk_data);
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:53 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:53 +0100
Subject: [PATCH v2 17/23] clk: mediatek: clk-mt8183: Join top_aud_muxes and top_aud_divs
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-18-angelogioacchino.delregno@collabora.com>

Join the two to register them in one shot.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8183.c | 34 +++++++++++++------------------
 1 file changed, 14 insertions(+), 20 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8183.c b/drivers/clk/mediatek/clk-mt8183.c
index f1d84c0730d5..be2a53b3a881 100644
--- a/drivers/clk/mediatek/clk-mt8183.c
+++ b/drivers/clk/mediatek/clk-mt8183.c
@@ -613,21 +613,6 @@ static const char * const apll_i2s5_parents[] = {
 	"aud_2_sel"
 };
 
-static struct mtk_composite top_aud_muxes[] = {
-	MUX(CLK_TOP_MUX_APLL_I2S0, "apll_i2s0_sel", apll_i2s0_parents,
-		0x320, 8, 1),
-	MUX(CLK_TOP_MUX_APLL_I2S1, "apll_i2s1_sel", apll_i2s1_parents,
-		0x320, 9, 1),
-	MUX(CLK_TOP_MUX_APLL_I2S2, "apll_i2s2_sel", apll_i2s2_parents,
-		0x320, 10, 1),
-	MUX(CLK_TOP_MUX_APLL_I2S3, "apll_i2s3_sel", apll_i2s3_parents,
-		0x320, 11, 1),
-	MUX(CLK_TOP_MUX_APLL_I2S4, "apll_i2s4_sel", apll_i2s4_parents,
-		0x320, 12, 1),
-	MUX(CLK_TOP_MUX_APLL_I2S5, "apll_i2s5_sel", apll_i2s5_parents,
-		0x328, 20, 1),
-};
-
 static const char * const mcu_mp0_parents[] = {
 	"clk26m",
 	"armpll_ll",
@@ -658,7 +643,19 @@ static struct mtk_composite mcu_muxes[] = {
 	MUX(CLK_MCU_BUS_SEL, "mcu_bus_sel", mcu_bus_parents, 0x7C0, 9, 2),
 };
 
-static struct mtk_composite top_aud_divs[] = {
+static struct mtk_composite top_aud_comp[] = {
+	MUX(CLK_TOP_MUX_APLL_I2S0, "apll_i2s0_sel", apll_i2s0_parents,
+		0x320, 8, 1),
+	MUX(CLK_TOP_MUX_APLL_I2S1, "apll_i2s1_sel", apll_i2s1_parents,
+		0x320, 9, 1),
+	MUX(CLK_TOP_MUX_APLL_I2S2, "apll_i2s2_sel", apll_i2s2_parents,
+		0x320, 10, 1),
+	MUX(CLK_TOP_MUX_APLL_I2S3, "apll_i2s3_sel", apll_i2s3_parents,
+		0x320, 11, 1),
+	MUX(CLK_TOP_MUX_APLL_I2S4, "apll_i2s4_sel", apll_i2s4_parents,
+		0x320, 12, 1),
+	MUX(CLK_TOP_MUX_APLL_I2S5, "apll_i2s5_sel", apll_i2s5_parents,
+		0x328, 20, 1),
 	DIV_GATE(CLK_TOP_APLL12_DIV0, "apll12_div0", "apll_i2s0_sel",
 		0x320, 2, 0x324, 8, 0),
 	DIV_GATE(CLK_TOP_APLL12_DIV1, "apll12_div1", "apll_i2s1_sel",
@@ -1169,10 +1166,7 @@ static int clk_mt8183_top_probe(struct platform_device *pdev)
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes),
 		node, &mt8183_clk_lock, top_clk_data, &pdev->dev);
 
-	mtk_clk_register_composites(top_aud_muxes, ARRAY_SIZE(top_aud_muxes),
-		base, &mt8183_clk_lock, top_clk_data, &pdev->dev);
-
-	mtk_clk_register_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs),
+	mtk_clk_register_composites(top_aud_comp, ARRAY_SIZE(top_aud_comp),
 		base, &mt8183_clk_lock, top_clk_data, &pdev->dev);
 
 	mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:47 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:47 +0100
Subject: [PATCH v2 11/23] clk: mediatek: Switch to mtk_clk_simple_probe() where possible
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-12-angelogioacchino.delregno@collabora.com>

mtk_clk_simple_probe() is a function that registers mtk gate clocks
and, if reset data is present, a reset controller and across all of
the MTK clock drivers, such a function is duplicated many times:
switch to the common mtk_clk_simple_probe() function for all of the
clock drivers that are registering as platform drivers.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt2701-aud.c   | 26 +++----
 drivers/clk/mediatek/clk-mt2701-eth.c   | 34 +++------
 drivers/clk/mediatek/clk-mt2701-g3d.c   | 56 +++-----------
 drivers/clk/mediatek/clk-mt2701-hif.c   | 36 +++------
 drivers/clk/mediatek/clk-mt2712.c       | 83 ++++++++-------------
 drivers/clk/mediatek/clk-mt6779.c       | 42 ++++++-----
 drivers/clk/mediatek/clk-mt7622-aud.c   | 49 +++----------
 drivers/clk/mediatek/clk-mt7622-eth.c   | 82 ++++-----------------
 drivers/clk/mediatek/clk-mt7622-hif.c   | 85 ++++-----------------
 drivers/clk/mediatek/clk-mt7629-hif.c   | 85 ++++-----------------
 drivers/clk/mediatek/clk-mt8183-audio.c | 19 +++--
 drivers/clk/mediatek/clk-mt8183.c       | 75 ++++++++-----------
 drivers/clk/mediatek/clk-mt8192-aud.c   | 25 +++----
 drivers/clk/mediatek/clk-mt8192.c       | 98 ++++++++-----------------
 14 files changed, 236 insertions(+), 559 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt2701-aud.c b/drivers/clk/mediatek/clk-mt2701-aud.c
index ab13ab618fb5..1fd6d96b34dc 100644
--- a/drivers/clk/mediatek/clk-mt2701-aud.c
+++ b/drivers/clk/mediatek/clk-mt2701-aud.c
@@ -76,6 +76,7 @@ static const struct mtk_gate_regs audio3_cg_regs = {
 };
 
 static const struct mtk_gate audio_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "aud_dummy"),
 	/* AUDIO0 */
 	GATE_AUDIO0(CLK_AUD_AFE, "audio_afe", "aud_intbus_sel", 2),
 	GATE_AUDIO0(CLK_AUD_HDMI, "audio_hdmi", "audpll_sel", 20),
@@ -138,29 +139,26 @@ static const struct mtk_gate audio_clks[] = {
 	GATE_AUDIO3(CLK_AUD_MEM_ASRC5, "audio_mem_asrc5", "asm_h_sel", 14),
 };
 
+static const struct mtk_clk_desc audio_desc = {
+	.clks = audio_clks,
+	.num_clks = ARRAY_SIZE(audio_clks),
+};
+
 static const struct of_device_id of_match_clk_mt2701_aud[] = {
-	{ .compatible = "mediatek,mt2701-audsys", },
-	{}
+	{ .compatible = "mediatek,mt2701-audsys", .data = &audio_desc },
+	{ /* sentinel */ }
 };
 
 static int clk_mt2701_aud_probe(struct platform_device *pdev)
 {
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
 	int r;
 
-	clk_data = mtk_alloc_clk_data(CLK_AUD_NR);
-
-	mtk_clk_register_gates(node, audio_clks, ARRAY_SIZE(audio_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	r = mtk_clk_simple_probe(pdev);
 	if (r) {
 		dev_err(&pdev->dev,
 			"could not register clock provider: %s: %d\n",
 			pdev->name, r);
-
-		goto err_clk_provider;
+		return r;
 	}
 
 	r = devm_of_platform_populate(&pdev->dev);
@@ -170,13 +168,13 @@ static int clk_mt2701_aud_probe(struct platform_device *pdev)
 	return 0;
 
 err_plat_populate:
-	of_clk_del_provider(node);
-err_clk_provider:
+	mtk_clk_simple_remove(pdev);
 	return r;
 }
 
 static struct platform_driver clk_mt2701_aud_drv = {
 	.probe = clk_mt2701_aud_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt2701-aud",
 		.of_match_table = of_match_clk_mt2701_aud,
diff --git a/drivers/clk/mediatek/clk-mt2701-eth.c b/drivers/clk/mediatek/clk-mt2701-eth.c
index 9670e1e170f2..bd3fddf53ce1 100644
--- a/drivers/clk/mediatek/clk-mt2701-eth.c
+++ b/drivers/clk/mediatek/clk-mt2701-eth.c
@@ -26,6 +26,7 @@ static const struct mtk_gate_regs eth_cg_regs = {
 	}
 
 static const struct mtk_gate eth_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "eth_dummy"),
 	GATE_ETH(CLK_ETHSYS_HSDMA, "hsdma_clk", "ethif_sel", 5),
 	GATE_ETH(CLK_ETHSYS_ESW, "esw_clk", "ethpll_500m_ck", 6),
 	GATE_ETH(CLK_ETHSYS_GP2, "gp2_clk", "trgpll", 7),
@@ -44,35 +45,20 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(rst_ofs),
 };
 
+static const struct mtk_clk_desc eth_desc = {
+	.clks = eth_clks,
+	.num_clks = ARRAY_SIZE(eth_clks),
+	.rst_desc = &clk_rst_desc,
+};
+
 static const struct of_device_id of_match_clk_mt2701_eth[] = {
-	{ .compatible = "mediatek,mt2701-ethsys", },
+	{ .compatible = "mediatek,mt2701-ethsys", .data = &eth_desc },
 	{}
 };
 
-static int clk_mt2701_eth_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_ETHSYS_NR);
-
-	mtk_clk_register_gates(node, eth_clks, ARRAY_SIZE(eth_clks),
-						clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return r;
-}
-
 static struct platform_driver clk_mt2701_eth_drv = {
-	.probe = clk_mt2701_eth_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt2701-eth",
 		.of_match_table = of_match_clk_mt2701_eth,
diff --git a/drivers/clk/mediatek/clk-mt2701-g3d.c b/drivers/clk/mediatek/clk-mt2701-g3d.c
index 11391b144267..499a170ba5f9 100644
--- a/drivers/clk/mediatek/clk-mt2701-g3d.c
+++ b/drivers/clk/mediatek/clk-mt2701-g3d.c
@@ -32,6 +32,7 @@ static const struct mtk_gate_regs g3d_cg_regs = {
 };
 
 static const struct mtk_gate g3d_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "g3d_dummy"),
 	GATE_G3D(CLK_G3DSYS_CORE, "g3d_core", "mfg_sel", 0),
 };
 
@@ -43,57 +44,20 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(rst_ofs),
 };
 
-static int clk_mt2701_g3dsys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_G3DSYS_NR);
-
-	mtk_clk_register_gates(node, g3d_clks, ARRAY_SIZE(g3d_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return r;
-}
+static const struct mtk_clk_desc g3d_desc = {
+	.clks = g3d_clks,
+	.num_clks = ARRAY_SIZE(g3d_clks),
+	.rst_desc = &clk_rst_desc,
+};
 
 static const struct of_device_id of_match_clk_mt2701_g3d[] = {
-	{
-		.compatible = "mediatek,mt2701-g3dsys",
-		.data = clk_mt2701_g3dsys_init,
-	}, {
-		/* sentinel */
-	}
+	{ .compatible = "mediatek,mt2701-g3dsys", .data = &g3d_desc },
+	{ /* sentinel */ }
 };
 
-static int clk_mt2701_g3d_probe(struct platform_device *pdev)
-{
-	int (*clk_init)(struct platform_device *);
-	int r;
-
-	clk_init = of_device_get_match_data(&pdev->dev);
-	if (!clk_init)
-		return -EINVAL;
-
-	r = clk_init(pdev);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	return r;
-}
-
 static struct platform_driver clk_mt2701_g3d_drv = {
-	.probe = clk_mt2701_g3d_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt2701-g3d",
 		.of_match_table = of_match_clk_mt2701_g3d,
diff --git a/drivers/clk/mediatek/clk-mt2701-hif.c b/drivers/clk/mediatek/clk-mt2701-hif.c
index c14c0bb10f88..5d113838b3e4 100644
--- a/drivers/clk/mediatek/clk-mt2701-hif.c
+++ b/drivers/clk/mediatek/clk-mt2701-hif.c
@@ -26,6 +26,7 @@ static const struct mtk_gate_regs hif_cg_regs = {
 	}
 
 static const struct mtk_gate hif_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "hif_dummy"),
 	GATE_HIF(CLK_HIFSYS_USB0PHY, "usb0_phy_clk", "ethpll_500m_ck", 21),
 	GATE_HIF(CLK_HIFSYS_USB1PHY, "usb1_phy_clk", "ethpll_500m_ck", 22),
 	GATE_HIF(CLK_HIFSYS_PCIE0, "pcie0_clk", "ethpll_500m_ck", 24),
@@ -41,37 +42,20 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(rst_ofs),
 };
 
+static const struct mtk_clk_desc hif_desc = {
+	.clks = hif_clks,
+	.num_clks = ARRAY_SIZE(hif_clks),
+	.rst_desc = &clk_rst_desc,
+};
+
 static const struct of_device_id of_match_clk_mt2701_hif[] = {
-	{ .compatible = "mediatek,mt2701-hifsys", },
+	{ .compatible = "mediatek,mt2701-hifsys", .data = &hif_desc },
 	{}
 };
 
-static int clk_mt2701_hif_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_HIFSYS_NR);
-
-	mtk_clk_register_gates(node, hif_clks, ARRAY_SIZE(hif_clks),
-						clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r) {
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-		return r;
-	}
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return 0;
-}
-
 static struct platform_driver clk_mt2701_hif_drv = {
-	.probe = clk_mt2701_hif_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt2701-hif",
 		.of_match_table = of_match_clk_mt2701_hif,
diff --git a/drivers/clk/mediatek/clk-mt2712.c b/drivers/clk/mediatek/clk-mt2712.c
index 5cadcf6ca9b7..c4bee791f570 100644
--- a/drivers/clk/mediatek/clk-mt2712.c
+++ b/drivers/clk/mediatek/clk-mt2712.c
@@ -1362,50 +1362,6 @@ static int clk_mt2712_top_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int clk_mt2712_infra_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
-
-	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-
-	if (r != 0)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc[0]);
-
-	return r;
-}
-
-static int clk_mt2712_peri_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
-
-	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-			clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-
-	if (r != 0)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc[1]);
-
-	return r;
-}
-
 static int clk_mt2712_mcu_probe(struct platform_device *pdev)
 {
 	struct clk_hw_onecell_data *clk_data;
@@ -1440,12 +1396,6 @@ static const struct of_device_id of_match_clk_mt2712[] = {
 	}, {
 		.compatible = "mediatek,mt2712-topckgen",
 		.data = clk_mt2712_top_probe,
-	}, {
-		.compatible = "mediatek,mt2712-infracfg",
-		.data = clk_mt2712_infra_probe,
-	}, {
-		.compatible = "mediatek,mt2712-pericfg",
-		.data = clk_mt2712_peri_probe,
 	}, {
 		.compatible = "mediatek,mt2712-mcucfg",
 		.data = clk_mt2712_mcu_probe,
@@ -1472,6 +1422,33 @@ static int clk_mt2712_probe(struct platform_device *pdev)
 	return r;
 }
 
+static const struct mtk_clk_desc infra_desc = {
+	.clks = infra_clks,
+	.num_clks = ARRAY_SIZE(infra_clks),
+	.rst_desc = &clk_rst_desc[0],
+};
+
+static const struct mtk_clk_desc peri_desc = {
+	.clks = peri_clks,
+	.num_clks = ARRAY_SIZE(peri_clks),
+	.rst_desc = &clk_rst_desc[1],
+};
+
+static const struct of_device_id of_match_clk_mt2712_simple[] = {
+	{ .compatible = "mediatek,mt2712-infracfg", .data = &infra_desc },
+	{ .compatible = "mediatek,mt2712-pericfg", .data = &peri_desc, },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt2712_simple_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt2712-simple",
+		.of_match_table = of_match_clk_mt2712_simple,
+	},
+};
+
 static struct platform_driver clk_mt2712_drv = {
 	.probe = clk_mt2712_probe,
 	.driver = {
@@ -1482,7 +1459,11 @@ static struct platform_driver clk_mt2712_drv = {
 
 static int __init clk_mt2712_init(void)
 {
-	return platform_driver_register(&clk_mt2712_drv);
+	int ret = platform_driver_register(&clk_mt2712_drv);
+
+	if (ret)
+		return ret;
+	return platform_driver_register(&clk_mt2712_simple_drv);
 }
 
 arch_initcall(clk_mt2712_init);
diff --git a/drivers/clk/mediatek/clk-mt6779.c b/drivers/clk/mediatek/clk-mt6779.c
index 6d1fb19be77b..479fb38766ea 100644
--- a/drivers/clk/mediatek/clk-mt6779.c
+++ b/drivers/clk/mediatek/clk-mt6779.c
@@ -880,6 +880,7 @@ static const struct mtk_gate_regs infra3_cg_regs = {
 		&mtk_clk_gate_ops_setclr)
 
 static const struct mtk_gate infra_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "ifa_dummy"),
 	/* INFRA0 */
 	GATE_INFRA0(CLK_INFRA_PMIC_TMR, "infra_pmic_tmr",
 		    "axi_sel", 0),
@@ -1256,19 +1257,6 @@ static int clk_mt6779_top_probe(struct platform_device *pdev)
 	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 }
 
-static int clk_mt6779_infra_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
-
-	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       clk_data, &pdev->dev);
-
-	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-}
-
 static const struct of_device_id of_match_clk_mt6779[] = {
 	{
 		.compatible = "mediatek,mt6779-apmixed",
@@ -1276,9 +1264,6 @@ static const struct of_device_id of_match_clk_mt6779[] = {
 	}, {
 		.compatible = "mediatek,mt6779-topckgen",
 		.data = clk_mt6779_top_probe,
-	}, {
-		.compatible = "mediatek,mt6779-infracfg_ao",
-		.data = clk_mt6779_infra_probe,
 	}, {
 		/* sentinel */
 	}
@@ -1302,6 +1287,25 @@ static int clk_mt6779_probe(struct platform_device *pdev)
 	return r;
 }
 
+static const struct mtk_clk_desc infra_desc = {
+	.clks = infra_clks,
+	.num_clks = ARRAY_SIZE(infra_clks),
+};
+
+static const struct of_device_id of_match_clk_mt6779_infra[] = {
+	{ .compatible = "mediatek,mt6779-infracfg_ao", .data = &infra_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt6779_infra_drv  = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt6779-infra",
+		.of_match_table = of_match_clk_mt6779_infra,
+	},
+};
+
 static struct platform_driver clk_mt6779_drv = {
 	.probe = clk_mt6779_probe,
 	.driver = {
@@ -1312,7 +1316,11 @@ static struct platform_driver clk_mt6779_drv = {
 
 static int __init clk_mt6779_init(void)
 {
-	return platform_driver_register(&clk_mt6779_drv);
+	int ret = platform_driver_register(&clk_mt6779_drv);
+
+	if (ret)
+		return ret;
+	return platform_driver_register(&clk_mt6779_infra_drv);
 }
 
 arch_initcall(clk_mt6779_init);
diff --git a/drivers/clk/mediatek/clk-mt7622-aud.c b/drivers/clk/mediatek/clk-mt7622-aud.c
index d0379d8704af..86464cc750e2 100644
--- a/drivers/clk/mediatek/clk-mt7622-aud.c
+++ b/drivers/clk/mediatek/clk-mt7622-aud.c
@@ -130,24 +130,21 @@ static const struct mtk_gate audio_clks[] = {
 	GATE_AUDIO3(CLK_AUDIO_MEM_ASRC5, "audio_mem_asrc5", "asm_h_sel", 14),
 };
 
-static int clk_mt7622_audiosys_init(struct platform_device *pdev)
+static const struct mtk_clk_desc audio_desc = {
+	.clks = audio_clks,
+	.num_clks = ARRAY_SIZE(audio_clks),
+};
+
+static int clk_mt7622_aud_probe(struct platform_device *pdev)
 {
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
 	int r;
 
-	clk_data = mtk_alloc_clk_data(CLK_AUDIO_NR_CLK);
-
-	mtk_clk_register_gates(node, audio_clks, ARRAY_SIZE(audio_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	r = mtk_clk_simple_probe(pdev);
 	if (r) {
 		dev_err(&pdev->dev,
 			"could not register clock provider: %s: %d\n",
 			pdev->name, r);
-
-		goto err_clk_provider;
+		return r;
 	}
 
 	r = devm_of_platform_populate(&pdev->dev);
@@ -157,40 +154,18 @@ static int clk_mt7622_audiosys_init(struct platform_device *pdev)
 	return 0;
 
 err_plat_populate:
-	of_clk_del_provider(node);
-err_clk_provider:
+	mtk_clk_simple_remove(pdev);
 	return r;
 }
 
 static const struct of_device_id of_match_clk_mt7622_aud[] = {
-	{
-		.compatible = "mediatek,mt7622-audsys",
-		.data = clk_mt7622_audiosys_init,
-	}, {
-		/* sentinel */
-	}
+	{ .compatible = "mediatek,mt7622-audsys", .data = &audio_desc },
+	{ /* sentinel */ }
 };
 
-static int clk_mt7622_aud_probe(struct platform_device *pdev)
-{
-	int (*clk_init)(struct platform_device *);
-	int r;
-
-	clk_init = of_device_get_match_data(&pdev->dev);
-	if (!clk_init)
-		return -EINVAL;
-
-	r = clk_init(pdev);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	return r;
-}
-
 static struct platform_driver clk_mt7622_aud_drv = {
 	.probe = clk_mt7622_aud_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt7622-aud",
 		.of_match_table = of_match_clk_mt7622_aud,
diff --git a/drivers/clk/mediatek/clk-mt7622-eth.c b/drivers/clk/mediatek/clk-mt7622-eth.c
index 9b4a26ca0f44..7dd0cec802f7 100644
--- a/drivers/clk/mediatek/clk-mt7622-eth.c
+++ b/drivers/clk/mediatek/clk-mt7622-eth.c
@@ -73,80 +73,26 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(rst_ofs),
 };
 
-static int clk_mt7622_ethsys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_ETH_NR_CLK);
-
-	mtk_clk_register_gates(node, eth_clks, ARRAY_SIZE(eth_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return r;
-}
-
-static int clk_mt7622_sgmiisys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_SGMII_NR_CLK);
-
-	mtk_clk_register_gates(node, sgmii_clks, ARRAY_SIZE(sgmii_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
+static const struct mtk_clk_desc eth_desc = {
+	.clks = eth_clks,
+	.num_clks = ARRAY_SIZE(eth_clks),
+	.rst_desc = &clk_rst_desc,
+};
 
-	return r;
-}
+static const struct mtk_clk_desc sgmii_desc = {
+	.clks = eth_clks,
+	.num_clks = ARRAY_SIZE(sgmii_clks),
+};
 
 static const struct of_device_id of_match_clk_mt7622_eth[] = {
-	{
-		.compatible = "mediatek,mt7622-ethsys",
-		.data = clk_mt7622_ethsys_init,
-	}, {
-		.compatible = "mediatek,mt7622-sgmiisys",
-		.data = clk_mt7622_sgmiisys_init,
-	}, {
-		/* sentinel */
-	}
+	{ .compatible = "mediatek,mt7622-ethsys", .data = &eth_desc },
+	{ .compatible = "mediatek,mt7622-sgmiisys", .data = &sgmii_desc },
+	{ /* sentinel */ }
 };
 
-static int clk_mt7622_eth_probe(struct platform_device *pdev)
-{
-	int (*clk_init)(struct platform_device *);
-	int r;
-
-	clk_init = of_device_get_match_data(&pdev->dev);
-	if (!clk_init)
-		return -EINVAL;
-
-	r = clk_init(pdev);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	return r;
-}
-
 static struct platform_driver clk_mt7622_eth_drv = {
-	.probe = clk_mt7622_eth_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt7622-eth",
 		.of_match_table = of_match_clk_mt7622_eth,
diff --git a/drivers/clk/mediatek/clk-mt7622-hif.c b/drivers/clk/mediatek/clk-mt7622-hif.c
index 8cf37f75ca77..ab5cad0c2b1c 100644
--- a/drivers/clk/mediatek/clk-mt7622-hif.c
+++ b/drivers/clk/mediatek/clk-mt7622-hif.c
@@ -84,82 +84,27 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(rst_ofs),
 };
 
-static int clk_mt7622_ssusbsys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_SSUSB_NR_CLK);
-
-	mtk_clk_register_gates(node, ssusb_clks, ARRAY_SIZE(ssusb_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return r;
-}
-
-static int clk_mt7622_pciesys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_PCIE_NR_CLK);
-
-	mtk_clk_register_gates(node, pcie_clks, ARRAY_SIZE(pcie_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
+static const struct mtk_clk_desc ssusb_desc = {
+	.clks = ssusb_clks,
+	.num_clks = ARRAY_SIZE(ssusb_clks),
+	.rst_desc = &clk_rst_desc,
+};
 
-	return r;
-}
+static const struct mtk_clk_desc pcie_desc = {
+	.clks = pcie_clks,
+	.num_clks = ARRAY_SIZE(pcie_clks),
+	.rst_desc = &clk_rst_desc,
+};
 
 static const struct of_device_id of_match_clk_mt7622_hif[] = {
-	{
-		.compatible = "mediatek,mt7622-pciesys",
-		.data = clk_mt7622_pciesys_init,
-	}, {
-		.compatible = "mediatek,mt7622-ssusbsys",
-		.data = clk_mt7622_ssusbsys_init,
-	}, {
-		/* sentinel */
-	}
+	{ .compatible = "mediatek,mt7622-pciesys", .data = &pcie_desc },
+	{ .compatible = "mediatek,mt7622-ssusbsys", .data = &ssusb_desc },
+	{ /* sentinel */ }
 };
 
-static int clk_mt7622_hif_probe(struct platform_device *pdev)
-{
-	int (*clk_init)(struct platform_device *);
-	int r;
-
-	clk_init = of_device_get_match_data(&pdev->dev);
-	if (!clk_init)
-		return -EINVAL;
-
-	r = clk_init(pdev);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	return r;
-}
-
 static struct platform_driver clk_mt7622_hif_drv = {
-	.probe = clk_mt7622_hif_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt7622-hif",
 		.of_match_table = of_match_clk_mt7622_hif,
diff --git a/drivers/clk/mediatek/clk-mt7629-hif.c b/drivers/clk/mediatek/clk-mt7629-hif.c
index 44fbd88b4647..c3eb09ea6036 100644
--- a/drivers/clk/mediatek/clk-mt7629-hif.c
+++ b/drivers/clk/mediatek/clk-mt7629-hif.c
@@ -79,82 +79,27 @@ static const struct mtk_clk_rst_desc clk_rst_desc = {
 	.rst_bank_nr = ARRAY_SIZE(rst_ofs),
 };
 
-static int clk_mt7629_ssusbsys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_SSUSB_NR_CLK);
-
-	mtk_clk_register_gates(node, ssusb_clks, ARRAY_SIZE(ssusb_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return r;
-}
-
-static int clk_mt7629_pciesys_init(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_PCIE_NR_CLK);
-
-	mtk_clk_register_gates(node, pcie_clks, ARRAY_SIZE(pcie_clks),
-			       clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
+static const struct mtk_clk_desc ssusb_desc = {
+	.clks = ssusb_clks,
+	.num_clks = ARRAY_SIZE(ssusb_clks),
+	.rst_desc = &clk_rst_desc,
+};
 
-	return r;
-}
+static const struct mtk_clk_desc pcie_desc = {
+	.clks = pcie_clks,
+	.num_clks = ARRAY_SIZE(pcie_clks),
+	.rst_desc = &clk_rst_desc,
+};
 
 static const struct of_device_id of_match_clk_mt7629_hif[] = {
-	{
-		.compatible = "mediatek,mt7629-pciesys",
-		.data = clk_mt7629_pciesys_init,
-	}, {
-		.compatible = "mediatek,mt7629-ssusbsys",
-		.data = clk_mt7629_ssusbsys_init,
-	}, {
-		/* sentinel */
-	}
+	{ .compatible = "mediatek,mt7629-pciesys", .data = &pcie_desc },
+	{ .compatible = "mediatek,mt7629-ssusbsys", .data = &ssusb_desc },
+	{ /* sentinel */ }
 };
 
-static int clk_mt7629_hif_probe(struct platform_device *pdev)
-{
-	int (*clk_init)(struct platform_device *);
-	int r;
-
-	clk_init = of_device_get_match_data(&pdev->dev);
-	if (!clk_init)
-		return -EINVAL;
-
-	r = clk_init(pdev);
-	if (r)
-		dev_err(&pdev->dev,
-			"could not register clock provider: %s: %d\n",
-			pdev->name, r);
-
-	return r;
-}
-
 static struct platform_driver clk_mt7629_hif_drv = {
-	.probe = clk_mt7629_hif_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt7629-hif",
 		.of_match_table = of_match_clk_mt7629_hif,
diff --git a/drivers/clk/mediatek/clk-mt8183-audio.c b/drivers/clk/mediatek/clk-mt8183-audio.c
index f4c6448b6f74..f5600450b4d1 100644
--- a/drivers/clk/mediatek/clk-mt8183-audio.c
+++ b/drivers/clk/mediatek/clk-mt8183-audio.c
@@ -67,35 +67,34 @@ static const struct mtk_gate audio_clks[] = {
 		20),
 };
 
+static const struct mtk_clk_desc audio_desc = {
+	.clks = audio_clks,
+	.num_clks = ARRAY_SIZE(audio_clks),
+};
+
 static int clk_mt8183_audio_probe(struct platform_device *pdev)
 {
-	struct clk_hw_onecell_data *clk_data;
 	int r;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_AUDIO_NR_CLK);
-
-	mtk_clk_register_gates(node, audio_clks, ARRAY_SIZE(audio_clks),
-			       clk_data, &pdev->dev);
 
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	r = mtk_clk_simple_probe(pdev);
 	if (r)
 		return r;
 
 	r = devm_of_platform_populate(&pdev->dev);
 	if (r)
-		of_clk_del_provider(node);
+		mtk_clk_simple_remove(pdev);
 
 	return r;
 }
 
 static const struct of_device_id of_match_clk_mt8183_audio[] = {
-	{ .compatible = "mediatek,mt8183-audiosys", },
+	{ .compatible = "mediatek,mt8183-audiosys", .data = &audio_desc },
 	{}
 };
 
 static struct platform_driver clk_mt8183_audio_drv = {
 	.probe = clk_mt8183_audio_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt8183-audio",
 		.of_match_table = of_match_clk_mt8183_audio,
diff --git a/drivers/clk/mediatek/clk-mt8183.c b/drivers/clk/mediatek/clk-mt8183.c
index 10a82b542376..f1d84c0730d5 100644
--- a/drivers/clk/mediatek/clk-mt8183.c
+++ b/drivers/clk/mediatek/clk-mt8183.c
@@ -1187,43 +1187,6 @@ static int clk_mt8183_top_probe(struct platform_device *pdev)
 				      top_clk_data);
 }
 
-static int clk_mt8183_infra_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
-
-	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-		clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r) {
-		dev_err(&pdev->dev,
-			"%s(): could not register clock provider: %d\n",
-			__func__, r);
-		return r;
-	}
-
-	mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-
-	return r;
-}
-
-static int clk_mt8183_peri_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-
-	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
-
-	mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-			       clk_data, &pdev->dev);
-
-	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-}
-
 static int clk_mt8183_mcu_probe(struct platform_device *pdev)
 {
 	struct clk_hw_onecell_data *clk_data;
@@ -1249,12 +1212,6 @@ static const struct of_device_id of_match_clk_mt8183[] = {
 	}, {
 		.compatible = "mediatek,mt8183-topckgen",
 		.data = clk_mt8183_top_probe,
-	}, {
-		.compatible = "mediatek,mt8183-infracfg",
-		.data = clk_mt8183_infra_probe,
-	}, {
-		.compatible = "mediatek,mt8183-pericfg",
-		.data = clk_mt8183_peri_probe,
 	}, {
 		.compatible = "mediatek,mt8183-mcucfg",
 		.data = clk_mt8183_mcu_probe,
@@ -1281,6 +1238,32 @@ static int clk_mt8183_probe(struct platform_device *pdev)
 	return r;
 }
 
+static const struct mtk_clk_desc infra_desc = {
+	.clks = infra_clks,
+	.num_clks = ARRAY_SIZE(infra_clks),
+	.rst_desc = &clk_rst_desc,
+};
+
+static const struct mtk_clk_desc peri_desc = {
+	.clks = peri_clks,
+	.num_clks = ARRAY_SIZE(peri_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8183_simple[] = {
+	{ .compatible = "mediatek,mt8183-infracfg", .data = &infra_desc },
+	{ .compatible = "mediatek,mt8183-pericfg", .data = &peri_desc, },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8183_simple_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8183-simple",
+		.of_match_table = of_match_clk_mt8183_simple,
+	},
+};
+
 static struct platform_driver clk_mt8183_drv = {
 	.probe = clk_mt8183_probe,
 	.driver = {
@@ -1291,7 +1274,11 @@ static struct platform_driver clk_mt8183_drv = {
 
 static int __init clk_mt8183_init(void)
 {
-	return platform_driver_register(&clk_mt8183_drv);
+	int ret = platform_driver_register(&clk_mt8183_drv);
+
+	if (ret)
+		return ret;
+	return platform_driver_register(&clk_mt8183_simple_drv);
 }
 
 arch_initcall(clk_mt8183_init);
diff --git a/drivers/clk/mediatek/clk-mt8192-aud.c b/drivers/clk/mediatek/clk-mt8192-aud.c
index 3acadca2452a..d52f671e20ce 100644
--- a/drivers/clk/mediatek/clk-mt8192-aud.c
+++ b/drivers/clk/mediatek/clk-mt8192-aud.c
@@ -77,39 +77,34 @@ static const struct mtk_gate aud_clks[] = {
 	GATE_AUD2(CLK_AUD_I2S9_B, "aud_i2s9_b", "audio_sel", 4),
 };
 
+static const struct mtk_clk_desc aud_desc = {
+	.clks = aud_clks,
+	.num_clks = ARRAY_SIZE(aud_clks),
+};
+
 static int clk_mt8192_aud_probe(struct platform_device *pdev)
 {
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
 	int r;
 
-	clk_data = mtk_alloc_clk_data(CLK_AUD_NR_CLK);
-	if (!clk_data)
-		return -ENOMEM;
-
-	r = mtk_clk_register_gates(node, aud_clks, ARRAY_SIZE(aud_clks),
-				   clk_data, &pdev->dev);
-	if (r)
-		return r;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	r = mtk_clk_simple_probe(pdev);
 	if (r)
 		return r;
 
 	r = devm_of_platform_populate(&pdev->dev);
 	if (r)
-		of_clk_del_provider(node);
+		mtk_clk_simple_remove(pdev);
 
 	return r;
 }
 
 static const struct of_device_id of_match_clk_mt8192_aud[] = {
-	{ .compatible = "mediatek,mt8192-audsys", },
-	{}
+	{ .compatible = "mediatek,mt8192-audsys", .data = &aud_desc },
+	{ /* sentinel */ }
 };
 
 static struct platform_driver clk_mt8192_aud_drv = {
 	.probe = clk_mt8192_aud_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt8192-aud",
 		.of_match_table = of_match_clk_mt8192_aud,
diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index 3ca068a4c552..9a9d51bfb84d 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1158,66 +1158,6 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int clk_mt8192_infra_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
-	if (!clk_data)
-		return -ENOMEM;
-
-	r = mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-					    clk_data, &pdev->dev);
-	if (r)
-		goto free_clk_data;
-
-	r = mtk_register_reset_controller_with_dev(&pdev->dev, &clk_rst_desc);
-	if (r)
-		goto unregister_gates;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_gates;
-
-	return r;
-
-unregister_gates:
-	mtk_clk_unregister_gates(infra_clks, ARRAY_SIZE(infra_clks), clk_data);
-free_clk_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
-
-static int clk_mt8192_peri_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
-	if (!clk_data)
-		return -ENOMEM;
-
-	r = mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
-					    clk_data, &pdev->dev);
-	if (r)
-		goto free_clk_data;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_gates;
-
-	return r;
-
-unregister_gates:
-	mtk_clk_unregister_gates(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
-free_clk_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
-
 static int clk_mt8192_apmixed_probe(struct platform_device *pdev)
 {
 	struct clk_hw_onecell_data *clk_data;
@@ -1255,12 +1195,6 @@ static const struct of_device_id of_match_clk_mt8192[] = {
 	}, {
 		.compatible = "mediatek,mt8192-topckgen",
 		.data = clk_mt8192_top_probe,
-	}, {
-		.compatible = "mediatek,mt8192-infracfg",
-		.data = clk_mt8192_infra_probe,
-	}, {
-		.compatible = "mediatek,mt8192-pericfg",
-		.data = clk_mt8192_peri_probe,
 	}, {
 		/* sentinel */
 	}
@@ -1282,6 +1216,32 @@ static int clk_mt8192_probe(struct platform_device *pdev)
 	return r;
 }
 
+static const struct mtk_clk_desc infra_desc = {
+	.clks = infra_clks,
+	.num_clks = ARRAY_SIZE(infra_clks),
+	.rst_desc = &clk_rst_desc,
+};
+
+static const struct mtk_clk_desc peri_desc = {
+	.clks = peri_clks,
+	.num_clks = ARRAY_SIZE(peri_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8192_simple[] = {
+	{ .compatible = "mediatek,mt8192-infracfg", .data = &infra_desc },
+	{ .compatible = "mediatek,mt8192-pericfg", .data = &peri_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8192_simple_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8192-simple",
+		.of_match_table = of_match_clk_mt8192_simple,
+	},
+};
+
 static struct platform_driver clk_mt8192_drv = {
 	.probe = clk_mt8192_probe,
 	.driver = {
@@ -1292,7 +1252,11 @@ static struct platform_driver clk_mt8192_drv = {
 
 static int __init clk_mt8192_init(void)
 {
-	return platform_driver_register(&clk_mt8192_drv);
+	int ret = platform_driver_register(&clk_mt8192_drv);
+
+	if (ret)
+		return ret;
+	return platform_driver_register(&clk_mt8192_simple_drv);
 }
 
 arch_initcall(clk_mt8192_init);
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:54 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:54 +0100
Subject: [PATCH v2 18/23] clk: mediatek: clk-mtk: Register MFG notifier in mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-19-angelogioacchino.delregno@collabora.com>

In preparation for commonizing topckgen probe on various MediaTek SoCs
clock drivers, add the ability to register the MFG MUX notifier in
mtk_clk_simple_probe() by passing a custom notifier register function
pointer, as this function will be slightly different across different
SoCs.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mtk.c | 8 ++++++++
 drivers/clk/mediatek/clk-mtk.h | 3 +++
 2 files changed, 11 insertions(+)

diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index b0a6225cd7b2..df6281492fb6 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -533,6 +533,14 @@ int mtk_clk_simple_probe(struct platform_device *pdev)
 			goto unregister_composites;
 	}
 
+	if (mcd->clk_notifier_func) {
+		struct clk *mfg_mux = clk_data->hws[mcd->mfg_clk_idx]->clk;
+
+		r = mcd->clk_notifier_func(&pdev->dev, mfg_mux);
+		if (r)
+			goto unregister_clks;
+	}
+
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
 		goto unregister_clks;
diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
index 1d036ba6ca07..bdbd36e3d794 100644
--- a/drivers/clk/mediatek/clk-mtk.h
+++ b/drivers/clk/mediatek/clk-mtk.h
@@ -231,6 +231,9 @@ struct mtk_clk_desc {
 	const struct mtk_clk_rst_desc *rst_desc;
 	spinlock_t *clk_lock;
 	bool shared_io;
+
+	int (*clk_notifier_func)(struct device *dev, struct clk *clk);
+	unsigned int mfg_clk_idx;
 };
 
 int mtk_clk_simple_probe(struct platform_device *pdev);
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:50 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:50 +0100
Subject: [PATCH v2 14/23] clk: mediatek: clk-mt8192: Move CLK_TOP_CSW_F26M_D2 in top_divs
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-15-angelogioacchino.delregno@collabora.com>

This driver is registered early in clk_mt8192_top_init_early() and
then again in clk_mt8192_top_probe(): the difference between the
two is that the early one is probed with CLK_OF_DECLARE_DRIVER and
the latter is regularly probed as a platform_driver.

Knowing that it is not necessary for this platform to register the
TOP_CSW_F26M_D2 clock that early, move it to top_divs and register
it with the others during platform_driver probe for topckgen;

While at it, since the only reason why the early probe existed was
to register that clock, remove that entirely - leaving this driver
to use only platform_driver.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8192.c | 39 ++++++-------------------------
 1 file changed, 7 insertions(+), 32 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index 9a9d51bfb84d..ec9dc7fe848e 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -26,10 +26,6 @@ static const struct mtk_fixed_clk top_fixed_clks[] = {
 	FIXED_CLK(CLK_TOP_ULPOSC, "ulposc", NULL, 260000000),
 };
 
-static const struct mtk_fixed_factor top_early_divs[] = {
-	FACTOR(CLK_TOP_CSW_F26M_D2, "csw_f26m_d2", "clk26m", 1, 2),
-};
-
 static const struct mtk_fixed_factor top_divs[] = {
 	FACTOR_FLAGS(CLK_TOP_MAINPLL_D3, "mainpll_d3", "mainpll", 1, 3, 0),
 	FACTOR_FLAGS(CLK_TOP_MAINPLL_D4, "mainpll_d4", "mainpll", 1, 4, 0),
@@ -95,6 +91,7 @@ static const struct mtk_fixed_factor top_divs[] = {
 	FACTOR(CLK_TOP_OSC_D10, "osc_d10", "ulposc", 1, 10),
 	FACTOR(CLK_TOP_OSC_D16, "osc_d16", "ulposc", 1, 16),
 	FACTOR(CLK_TOP_OSC_D20, "osc_d20", "ulposc", 1, 20),
+	FACTOR(CLK_TOP_CSW_F26M_D2, "csw_f26m_d2", "clk26m", 1, 2),
 	FACTOR(CLK_TOP_ADSPPLL, "adsppll_ck", "adsppll", 1, 1),
 	FACTOR_FLAGS(CLK_TOP_UNIVPLL_192M, "univpll_192m", "univpll", 1, 13, 0),
 	FACTOR_FLAGS(CLK_TOP_UNIVPLL_192M_D2, "univpll_192m_d2", "univpll_192m", 1, 2, 0),
@@ -1047,27 +1044,6 @@ static const struct mtk_pll_data plls[] = {
 	      0, 0, 32, 0x0330, 24, 0, 0, 0, 0x0334, 0),
 };
 
-static struct clk_hw_onecell_data *top_clk_data;
-
-static void clk_mt8192_top_init_early(struct device_node *node)
-{
-	int i;
-
-	top_clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
-	if (!top_clk_data)
-		return;
-
-	for (i = 0; i < CLK_TOP_NR_CLK; i++)
-		top_clk_data->hws[i] = ERR_PTR(-EPROBE_DEFER);
-
-	mtk_clk_register_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data);
-
-	of_clk_add_hw_provider(node, of_clk_hw_onecell_get, top_clk_data);
-}
-
-CLK_OF_DECLARE_DRIVER(mt8192_topckgen, "mediatek,mt8192-topckgen",
-		      clk_mt8192_top_init_early);
-
 /* Register mux notifier for MFG mux */
 static int clk_mt8192_reg_mfg_mux_notifier(struct device *dev, struct clk *clk)
 {
@@ -1093,6 +1069,7 @@ static int clk_mt8192_reg_mfg_mux_notifier(struct device *dev, struct clk *clk)
 static int clk_mt8192_top_probe(struct platform_device *pdev)
 {
 	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw_onecell_data *top_clk_data;
 	int r;
 	void __iomem *base;
 
@@ -1100,17 +1077,17 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	if (IS_ERR(base))
 		return PTR_ERR(base);
 
+	top_clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
+	if (!top_clk_data)
+		return;
+
 	r = mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data);
 	if (r)
 		return r;
 
-	r = mtk_clk_register_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data);
-	if (r)
-		goto unregister_fixed_clks;
-
 	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
 	if (r)
-		goto unregister_early_factors;
+		goto unregister_fixed_clks;
 
 	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
 				   &mt8192_clk_lock, top_clk_data, &pdev->dev);
@@ -1150,8 +1127,6 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), top_clk_data);
 unregister_factors:
 	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
-unregister_early_factors:
-	mtk_clk_unregister_factors(top_early_divs, ARRAY_SIZE(top_early_divs), top_clk_data);
 unregister_fixed_clks:
 	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks),
 				      top_clk_data);
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:51 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:51 +0100
Subject: [PATCH v2 15/23] clk: mediatek: mt8192: Join top_adj_divs and top_muxes
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-16-angelogioacchino.delregno@collabora.com>

These two are both mtk_composite arrays, one dependent on another, but
that's something that the clock framework is supposed to sort out and
anyway registering them separately isn't going to ease the framework's
job in checking dependencies.

Put the contents of top_adj_divs in top_muxes to join them together
and register them in one shot.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8192.c | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index ec9dc7fe848e..702770326286 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -698,9 +698,7 @@ static struct mtk_composite top_muxes[] = {
 	MUX(CLK_TOP_APLL_I2S7_M_SEL, "apll_i2s7_m_sel", apll_i2s_m_parents, 0x320, 23, 1),
 	MUX(CLK_TOP_APLL_I2S8_M_SEL, "apll_i2s8_m_sel", apll_i2s_m_parents, 0x320, 24, 1),
 	MUX(CLK_TOP_APLL_I2S9_M_SEL, "apll_i2s9_m_sel", apll_i2s_m_parents, 0x320, 25, 1),
-};
-
-static const struct mtk_composite top_adj_divs[] = {
+	/* APLL_DIV */
 	DIV_GATE(CLK_TOP_APLL12_DIV0, "apll12_div0", "apll_i2s0_m_sel", 0x320, 0, 0x328, 8, 0),
 	DIV_GATE(CLK_TOP_APLL12_DIV1, "apll12_div1", "apll_i2s1_m_sel", 0x320, 1, 0x328, 8, 8),
 	DIV_GATE(CLK_TOP_APLL12_DIV2, "apll12_div2", "apll_i2s2_m_sel", 0x320, 2, 0x328, 8, 16),
@@ -1099,15 +1097,10 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 	if (r)
 		goto unregister_muxes;
 
-	r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
-					&mt8192_clk_lock, top_clk_data, &pdev->dev);
-	if (r)
-		goto unregister_top_composites;
-
 	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
 					    top_clk_data, &pdev->dev);
 	if (r)
-		goto unregister_adj_divs_composites;
+		goto unregister_top_composites;
 
 	r = clk_mt8192_reg_mfg_mux_notifier(&pdev->dev,
 					    top_clk_data->hws[CLK_TOP_MFG_PLL_SEL]->clk);
@@ -1119,8 +1112,6 @@ static int clk_mt8192_top_probe(struct platform_device *pdev)
 
 unregister_gates:
 	mtk_clk_unregister_gates(top_clks, ARRAY_SIZE(top_clks), top_clk_data);
-unregister_adj_divs_composites:
-	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), top_clk_data);
 unregister_top_composites:
 	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), top_clk_data);
 unregister_muxes:
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:46 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:46 +0100
Subject: [PATCH v2 10/23] clk: mediatek: mt8173: Break down clock drivers and allow module build
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-11-angelogioacchino.delregno@collabora.com>

Split the giant clock driver for MT8173 into smaller drivers and
make it possible to build the non boot critical clock controller
drivers as modules by adding remove functions.

Some spare code style cleanups were also performed.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/Kconfig                  |  30 +-
 drivers/clk/mediatek/Makefile                 |   6 +-
 drivers/clk/mediatek/clk-mt8173-apmixedsys.c  | 157 ++++
 drivers/clk/mediatek/clk-mt8173-img.c         |  55 ++
 drivers/clk/mediatek/clk-mt8173-infracfg.c    | 154 ++++
 drivers/clk/mediatek/clk-mt8173-pericfg.c     | 171 ++++
 .../{clk-mt8173.c => clk-mt8173-topckgen.c}   | 811 ++++--------------
 drivers/clk/mediatek/clk-mt8173-vdecsys.c     |  57 ++
 drivers/clk/mediatek/clk-mt8173-vencsys.c     |  64 ++
 9 files changed, 853 insertions(+), 652 deletions(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8173-apmixedsys.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-img.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-infracfg.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-pericfg.c
 rename drivers/clk/mediatek/{clk-mt8173.c => clk-mt8173-topckgen.c} (50%)
 create mode 100644 drivers/clk/mediatek/clk-mt8173-vdecsys.c
 create mode 100644 drivers/clk/mediatek/clk-mt8173-vencsys.c

diff --git a/drivers/clk/mediatek/Kconfig b/drivers/clk/mediatek/Kconfig
index c504ebca21ee..b11646a9bf6e 100644
--- a/drivers/clk/mediatek/Kconfig
+++ b/drivers/clk/mediatek/Kconfig
@@ -457,19 +457,41 @@ config COMMON_CLK_MT8167_VDECSYS
 	  This driver supports MediaTek MT8167 vdecsys clocks.
 
 config COMMON_CLK_MT8173
-	bool "Clock driver for MediaTek MT8173"
+	tristate "Clock driver for MediaTek MT8173"
 	depends on ARCH_MEDIATEK || COMPILE_TEST
 	select COMMON_CLK_MEDIATEK
 	default ARCH_MEDIATEK
 	help
-	  This driver supports MediaTek MT8173 clocks.
+	  This driver supports MediaTek MT8173 basic clocks and clocks
+	  required for various peripherals found on MediaTek.
+
+config COMMON_CLK_MT8173_IMGSYS
+	tristate "Clock driver for MediaTek MT8173 imgsys"
+	depends on COMMON_CLK_MT8173
+	default COMMON_CLK_MT8173
+	help
+	  This driver supports MediaTek MT8173 imgsys clocks.
 
 config COMMON_CLK_MT8173_MMSYS
-	bool "Clock driver for MediaTek MT8173 mmsys"
+       tristate "Clock driver for MediaTek MT8173 mmsys"
+       depends on COMMON_CLK_MT8173
+	default COMMON_CLK_MT8173
+       help
+         This driver supports MediaTek MT8173 mmsys clocks.
+
+config COMMON_CLK_MT8173_VDECSYS
+	tristate "Clock driver for MediaTek MT8173 VDECSYS"
+	depends on COMMON_CLK_MT8173
+	default COMMON_CLK_MT8173
+	help
+	  This driver supports MediaTek MT8173 vdecsys clocks.
+
+config COMMON_CLK_MT8173_VENCSYS
+	tristate "Clock driver for MediaTek MT8173 VENCSYS"
 	depends on COMMON_CLK_MT8173
 	default COMMON_CLK_MT8173
 	help
-	  This driver supports MediaTek MT8173 mmsys clocks.
+	  This driver supports MediaTek MT8173 vencsys clocks.
 
 config COMMON_CLK_MT8183
 	bool "Clock driver for MediaTek MT8183"
diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index e24080fd6e7f..a5c216c94831 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -64,8 +64,12 @@ obj-$(CONFIG_COMMON_CLK_MT8167_IMGSYS) += clk-mt8167-img.o
 obj-$(CONFIG_COMMON_CLK_MT8167_MFGCFG) += clk-mt8167-mfgcfg.o
 obj-$(CONFIG_COMMON_CLK_MT8167_MMSYS) += clk-mt8167-mm.o
 obj-$(CONFIG_COMMON_CLK_MT8167_VDECSYS) += clk-mt8167-vdec.o
-obj-$(CONFIG_COMMON_CLK_MT8173) += clk-mt8173.o
+obj-$(CONFIG_COMMON_CLK_MT8173) += clk-mt8173-apmixedsys.o clk-mt8173-infracfg.o \
+				   clk-mt8173-pericfg.o clk-mt8173-topckgen.o
+obj-$(CONFIG_COMMON_CLK_MT8173_IMGSYS) += clk-mt8173-img.o
 obj-$(CONFIG_COMMON_CLK_MT8173_MMSYS) += clk-mt8173-mm.o
+obj-$(CONFIG_COMMON_CLK_MT8173_VDECSYS) += clk-mt8173-vdecsys.o
+obj-$(CONFIG_COMMON_CLK_MT8173_VENCSYS) += clk-mt8173-vencsys.o
 obj-$(CONFIG_COMMON_CLK_MT8183) += clk-mt8183.o
 obj-$(CONFIG_COMMON_CLK_MT8183_AUDIOSYS) += clk-mt8183-audio.o
 obj-$(CONFIG_COMMON_CLK_MT8183_CAMSYS) += clk-mt8183-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8173-apmixedsys.c b/drivers/clk/mediatek/clk-mt8173-apmixedsys.c
new file mode 100644
index 000000000000..a56c5845d07a
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8173-apmixedsys.c
@@ -0,0 +1,157 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2014 MediaTek Inc.
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
+ */
+
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/of_address.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include "clk-mtk.h"
+#include "clk-pll.h"
+
+#define REGOFF_REF2USB		0x8
+#define REGOFF_HDMI_REF		0x40
+
+#define MT8173_PLL_FMAX		(3000UL * MHZ)
+
+#define CON0_MT8173_RST_BAR	BIT(24)
+
+#define PLL_B(_id, _name, _reg, _pwr_reg, _en_mask, _flags, _pcwbits,	\
+			_pd_reg, _pd_shift, _tuner_reg, _pcw_reg,	\
+			_pcw_shift, _div_table) {			\
+		.id = _id,						\
+		.name = _name,						\
+		.reg = _reg,						\
+		.pwr_reg = _pwr_reg,					\
+		.en_mask = _en_mask,					\
+		.flags = _flags,					\
+		.rst_bar_mask = CON0_MT8173_RST_BAR,			\
+		.fmax = MT8173_PLL_FMAX,				\
+		.pcwbits = _pcwbits,					\
+		.pd_reg = _pd_reg,					\
+		.pd_shift = _pd_shift,					\
+		.tuner_reg = _tuner_reg,				\
+		.pcw_reg = _pcw_reg,					\
+		.pcw_shift = _pcw_shift,				\
+		.div_table = _div_table,				\
+	}
+
+#define PLL(_id, _name, _reg, _pwr_reg, _en_mask, _flags, _pcwbits,	\
+			_pd_reg, _pd_shift, _tuner_reg, _pcw_reg,	\
+			_pcw_shift)					\
+		PLL_B(_id, _name, _reg, _pwr_reg, _en_mask, _flags, _pcwbits, \
+			_pd_reg, _pd_shift, _tuner_reg, _pcw_reg, _pcw_shift, \
+			NULL)
+
+static const struct mtk_pll_div_table mmpll_div_table[] = {
+	{ .div = 0, .freq = MT8173_PLL_FMAX },
+	{ .div = 1, .freq = 1000000000 },
+	{ .div = 2, .freq = 702000000 },
+	{ .div = 3, .freq = 253500000 },
+	{ .div = 4, .freq = 126750000 },
+	{ } /* sentinel */
+};
+
+static const struct mtk_pll_data plls[] = {
+	PLL(CLK_APMIXED_ARMCA15PLL, "armca15pll", 0x200, 0x20c, 0, PLL_AO,
+	    21, 0x204, 24, 0x0, 0x204, 0),
+	PLL(CLK_APMIXED_ARMCA7PLL, "armca7pll", 0x210, 0x21c, 0, PLL_AO,
+	    21, 0x214, 24, 0x0, 0x214, 0),
+	PLL(CLK_APMIXED_MAINPLL, "mainpll", 0x220, 0x22c, 0xf0000100, HAVE_RST_BAR, 21,
+	    0x220, 4, 0x0, 0x224, 0),
+	PLL(CLK_APMIXED_UNIVPLL, "univpll", 0x230, 0x23c, 0xfe000000, HAVE_RST_BAR, 7,
+	    0x230, 4, 0x0, 0x234, 14),
+	PLL_B(CLK_APMIXED_MMPLL, "mmpll", 0x240, 0x24c, 0, 0, 21, 0x244, 24, 0x0,
+	      0x244, 0, mmpll_div_table),
+	PLL(CLK_APMIXED_MSDCPLL, "msdcpll", 0x250, 0x25c, 0, 0, 21, 0x250, 4, 0x0, 0x254, 0),
+	PLL(CLK_APMIXED_VENCPLL, "vencpll", 0x260, 0x26c, 0, 0, 21, 0x260, 4, 0x0, 0x264, 0),
+	PLL(CLK_APMIXED_TVDPLL, "tvdpll", 0x270, 0x27c, 0, 0, 21, 0x270, 4, 0x0, 0x274, 0),
+	PLL(CLK_APMIXED_MPLL, "mpll", 0x280, 0x28c, 0, 0, 21, 0x280, 4, 0x0, 0x284, 0),
+	PLL(CLK_APMIXED_VCODECPLL, "vcodecpll", 0x290, 0x29c, 0, 0, 21, 0x290, 4, 0x0, 0x294, 0),
+	PLL(CLK_APMIXED_APLL1, "apll1", 0x2a0, 0x2b0, 0, 0, 31, 0x2a0, 4, 0x2a4, 0x2a4, 0),
+	PLL(CLK_APMIXED_APLL2, "apll2", 0x2b4, 0x2c4, 0, 0, 31, 0x2b4, 4, 0x2b8, 0x2b8, 0),
+	PLL(CLK_APMIXED_LVDSPLL, "lvdspll", 0x2d0, 0x2dc, 0, 0, 21, 0x2d0, 4, 0x0, 0x2d4, 0),
+	PLL(CLK_APMIXED_MSDCPLL2, "msdcpll2", 0x2f0, 0x2fc, 0, 0, 21, 0x2f0, 4, 0x0, 0x2f4, 0),
+};
+
+static const struct of_device_id of_match_clk_mt8173_apmixed[] = {
+	{ .compatible = "mediatek,mt8173-apmixedsys" },
+	{ /* sentinel */ }
+};
+
+static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw_onecell_data *clk_data;
+	void __iomem *base;
+	struct clk_hw *hw;
+	int r;
+
+	base = of_iomap(node, 0);
+	if (!base)
+		return PTR_ERR(base);
+
+	clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
+	if (IS_ERR_OR_NULL(clk_data))
+		return -ENOMEM;
+
+	r = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
+	if (r)
+		goto free_clk_data;
+
+	hw = mtk_clk_register_ref2usb_tx("ref2usb_tx", "clk26m", base + REGOFF_REF2USB);
+	if (IS_ERR(hw)) {
+		r = PTR_ERR(hw);
+		dev_err(&pdev->dev, "Failed to register ref2usb_tx: %d\n", r);
+		goto unregister_plls;
+	}
+	clk_data->hws[CLK_APMIXED_REF2USB_TX] = hw;
+
+	hw = devm_clk_hw_register_divider(&pdev->dev, "hdmi_ref", "tvdpll_594m", 0,
+					  base + REGOFF_HDMI_REF, 16, 3,
+					  CLK_DIVIDER_POWER_OF_TWO, NULL);
+	clk_data->hws[CLK_APMIXED_HDMI_REF] = hw;
+
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	if (r)
+		goto unregister_ref2usb;
+
+	return 0;
+
+unregister_ref2usb:
+	mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
+unregister_plls:
+	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+free_clk_data:
+	mtk_free_clk_data(clk_data);
+	return r;
+}
+
+static int clk_mt8173_apmixed_remove(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
+
+	of_clk_del_provider(node);
+	mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
+	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+	mtk_free_clk_data(clk_data);
+
+	return 0;
+}
+
+static struct platform_driver clk_mt8173_apmixed_drv = {
+	.probe = clk_mt8173_apmixed_probe,
+	.remove = clk_mt8173_apmixed_remove,
+	.driver = {
+		.name = "clk-mt8173-apmixed",
+		.of_match_table = of_match_clk_mt8173_apmixed,
+	},
+};
+module_platform_driver(clk_mt8173_apmixed_drv);
+
+MODULE_DESCRIPTION("MediaTek MT8173 apmixed clocks driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/clk/mediatek/clk-mt8173-img.c b/drivers/clk/mediatek/clk-mt8173-img.c
new file mode 100644
index 000000000000..7b50ffb7a8a5
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8173-img.c
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2014 MediaTek Inc.
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
+ */
+
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs img_cg_regs = {
+	.set_ofs = 0x0004,
+	.clr_ofs = 0x0008,
+	.sta_ofs = 0x0000,
+};
+
+#define GATE_IMG(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &img_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+static const struct mtk_gate img_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "img_dummy"),
+	GATE_IMG(CLK_IMG_LARB2_SMI, "img_larb2_smi", "mm_sel", 0),
+	GATE_IMG(CLK_IMG_CAM_SMI, "img_cam_smi", "mm_sel", 5),
+	GATE_IMG(CLK_IMG_CAM_CAM, "img_cam_cam", "mm_sel", 6),
+	GATE_IMG(CLK_IMG_SEN_TG, "img_sen_tg", "camtg_sel", 7),
+	GATE_IMG(CLK_IMG_SEN_CAM, "img_sen_cam", "mm_sel", 8),
+	GATE_IMG(CLK_IMG_CAM_SV, "img_cam_sv", "mm_sel", 9),
+	GATE_IMG(CLK_IMG_FD, "img_fd", "mm_sel", 11),
+};
+
+static const struct mtk_clk_desc img_desc = {
+	.clks = img_clks,
+	.num_clks = ARRAY_SIZE(img_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8173_imgsys[] = {
+	{ .compatible = "mediatek,mt8173-imgsys", .data = &img_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8173_vdecsys_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8173-imgsys",
+		.of_match_table = of_match_clk_mt8173_imgsys,
+	},
+};
+module_platform_driver(clk_mt8173_vdecsys_drv);
+
+MODULE_DESCRIPTION("MediaTek MT8173 vdecsys clocks driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/clk/mediatek/clk-mt8173-infracfg.c b/drivers/clk/mediatek/clk-mt8173-infracfg.c
new file mode 100644
index 000000000000..ee4b992c89c6
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8173-infracfg.c
@@ -0,0 +1,154 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2014 MediaTek Inc.
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
+ */
+
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include "clk-cpumux.h"
+#include "clk-gate.h"
+#include "clk-mtk.h"
+#include "reset.h"
+
+#define GATE_ICG(_id, _name, _parent, _shift)			\
+		GATE_MTK(_id, _name, _parent, &infra_cg_regs,	\
+			 _shift, &mtk_clk_gate_ops_setclr)
+
+static struct clk_hw_onecell_data *infra_clk_data;
+
+static const struct mtk_gate_regs infra_cg_regs = {
+	.set_ofs = 0x0040,
+	.clr_ofs = 0x0044,
+	.sta_ofs = 0x0048,
+};
+
+static const char * const ca53_parents[] __initconst = {
+	"clk26m",
+	"armca7pll",
+	"mainpll",
+	"univpll"
+};
+
+static const char * const ca72_parents[] __initconst = {
+	"clk26m",
+	"armca15pll",
+	"mainpll",
+	"univpll"
+};
+
+static const struct mtk_composite cpu_muxes[] = {
+	MUX(CLK_INFRA_CA53SEL, "infra_ca53_sel", ca53_parents, 0x0000, 0, 2),
+	MUX(CLK_INFRA_CA72SEL, "infra_ca72_sel", ca72_parents, 0x0000, 2, 2),
+};
+
+static const struct mtk_fixed_factor infra_early_divs[] = {
+	FACTOR(CLK_INFRA_CLK_13M, "clk13m", "clk26m", 1, 2),
+};
+
+static const struct mtk_gate infra_gates[] = {
+	GATE_ICG(CLK_INFRA_DBGCLK, "infra_dbgclk", "axi_sel", 0),
+	GATE_ICG(CLK_INFRA_SMI, "infra_smi", "mm_sel", 1),
+	GATE_ICG(CLK_INFRA_AUDIO, "infra_audio", "aud_intbus_sel", 5),
+	GATE_ICG(CLK_INFRA_GCE, "infra_gce", "axi_sel", 6),
+	GATE_ICG(CLK_INFRA_L2C_SRAM, "infra_l2c_sram", "axi_sel", 7),
+	GATE_ICG(CLK_INFRA_M4U, "infra_m4u", "mem_sel", 8),
+	GATE_ICG(CLK_INFRA_CPUM, "infra_cpum", "cpum_ck", 15),
+	GATE_ICG(CLK_INFRA_KP, "infra_kp", "axi_sel", 16),
+	GATE_ICG(CLK_INFRA_CEC, "infra_cec", "clk26m", 18),
+	GATE_ICG(CLK_INFRA_PMICSPI, "infra_pmicspi", "pmicspi_sel", 22),
+	GATE_ICG(CLK_INFRA_PMICWRAP, "infra_pmicwrap", "axi_sel", 23),
+};
+
+static u16 infrasys_rst_ofs[] = { 0x30, 0x34 };
+
+static const struct mtk_clk_rst_desc clk_rst_desc = {
+	.version = MTK_RST_SIMPLE,
+	.rst_bank_ofs = infrasys_rst_ofs,
+	.rst_bank_nr = ARRAY_SIZE(infrasys_rst_ofs),
+};
+
+static const struct of_device_id of_match_clk_mt8173_infracfg[] = {
+	{ .compatible = "mediatek,mt8173-infracfg" },
+	{ /* sentinel */ }
+};
+
+static void clk_mt8173_infra_init_early(struct device_node *node)
+{
+	int i;
+
+	infra_clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
+	if (!infra_clk_data)
+		return;
+
+	for (i = 0; i < CLK_INFRA_NR_CLK; i++)
+		infra_clk_data->hws[i] = ERR_PTR(-EPROBE_DEFER);
+
+	mtk_clk_register_factors(infra_early_divs, ARRAY_SIZE(infra_early_divs), infra_clk_data);
+
+	of_clk_add_hw_provider(node, of_clk_hw_onecell_get, infra_clk_data);
+}
+CLK_OF_DECLARE_DRIVER(mtk_infrasys, "mediatek,mt8173-infracfg",
+		      clk_mt8173_infra_init_early);
+
+static int clk_mt8173_infracfg_probe(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
+	int r;
+
+	r = mtk_clk_register_gates(node, infra_gates, ARRAY_SIZE(infra_gates),
+				   infra_clk_data, &pdev->dev);
+	if (r)
+		return r;
+
+	r = mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
+				      infra_clk_data, &pdev->dev);
+	if (r)
+		goto unregister_gates;
+
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, infra_clk_data);
+	if (r)
+		goto unregister_cpumuxes;
+
+	r = mtk_register_reset_controller(node, &clk_rst_desc);
+	if (r)
+		goto unregister_clk_hw;
+
+	return 0;
+
+unregister_clk_hw:
+	of_clk_del_provider(node);
+unregister_cpumuxes:
+	mtk_clk_unregister_cpumuxes(cpu_muxes, ARRAY_SIZE(cpu_muxes), infra_clk_data);
+unregister_gates:
+	mtk_clk_unregister_gates(infra_gates, ARRAY_SIZE(infra_gates), infra_clk_data);
+	return r;
+}
+
+static int clk_mt8173_infracfg_remove(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
+
+	of_clk_del_provider(node);
+	mtk_clk_unregister_cpumuxes(cpu_muxes, ARRAY_SIZE(cpu_muxes), clk_data);
+	mtk_clk_unregister_gates(infra_gates, ARRAY_SIZE(infra_gates), clk_data);
+	mtk_free_clk_data(clk_data);
+
+	return 0;
+}
+
+static struct platform_driver clk_mt8173_infracfg_drv = {
+	.driver = {
+		.name = "clk-mt8173-infracfg",
+		.of_match_table = of_match_clk_mt8173_infracfg,
+	},
+	.probe = clk_mt8173_infracfg_probe,
+	.remove = clk_mt8173_infracfg_remove,
+};
+module_platform_driver(clk_mt8173_infracfg_drv);
+
+MODULE_DESCRIPTION("MediaTek MT8173 infracfg clocks driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/clk/mediatek/clk-mt8173-pericfg.c b/drivers/clk/mediatek/clk-mt8173-pericfg.c
new file mode 100644
index 000000000000..30c0fa263cc0
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8173-pericfg.c
@@ -0,0 +1,171 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
+ */
+
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include "clk-gate.h"
+#include "clk-mtk.h"
+#include "reset.h"
+
+#define GATE_PERI0(_id, _name, _parent, _shift)			\
+		GATE_MTK(_id, _name, _parent, &peri0_cg_regs,	\
+			 _shift, &mtk_clk_gate_ops_setclr)
+
+#define GATE_PERI1(_id, _name, _parent, _shift)			\
+		GATE_MTK(_id, _name, _parent, &peri1_cg_regs,	\
+			 _shift, &mtk_clk_gate_ops_setclr)
+
+static DEFINE_SPINLOCK(mt8173_clk_lock);
+
+static const struct mtk_gate_regs peri0_cg_regs = {
+	.set_ofs = 0x0008,
+	.clr_ofs = 0x0010,
+	.sta_ofs = 0x0018,
+};
+
+static const struct mtk_gate_regs peri1_cg_regs = {
+	.set_ofs = 0x000c,
+	.clr_ofs = 0x0014,
+	.sta_ofs = 0x001c,
+};
+
+static const char * const uart_ck_sel_parents[] = {
+	"clk26m",
+	"uart_sel",
+};
+
+static const struct mtk_composite peri_clks[] = {
+	MUX(CLK_PERI_UART0_SEL, "uart0_ck_sel", uart_ck_sel_parents, 0x40c, 0, 1),
+	MUX(CLK_PERI_UART1_SEL, "uart1_ck_sel", uart_ck_sel_parents, 0x40c, 1, 1),
+	MUX(CLK_PERI_UART2_SEL, "uart2_ck_sel", uart_ck_sel_parents, 0x40c, 2, 1),
+	MUX(CLK_PERI_UART3_SEL, "uart3_ck_sel", uart_ck_sel_parents, 0x40c, 3, 1),
+};
+
+static const struct mtk_gate peri_gates[] = {
+	/* PERI0 */
+	GATE_PERI0(CLK_PERI_NFI, "peri_nfi", "axi_sel", 0),
+	GATE_PERI0(CLK_PERI_THERM, "peri_therm", "axi_sel", 1),
+	GATE_PERI0(CLK_PERI_PWM1, "peri_pwm1", "axi_sel", 2),
+	GATE_PERI0(CLK_PERI_PWM2, "peri_pwm2", "axi_sel", 3),
+	GATE_PERI0(CLK_PERI_PWM3, "peri_pwm3", "axi_sel", 4),
+	GATE_PERI0(CLK_PERI_PWM4, "peri_pwm4", "axi_sel", 5),
+	GATE_PERI0(CLK_PERI_PWM5, "peri_pwm5", "axi_sel", 6),
+	GATE_PERI0(CLK_PERI_PWM6, "peri_pwm6", "axi_sel", 7),
+	GATE_PERI0(CLK_PERI_PWM7, "peri_pwm7", "axi_sel", 8),
+	GATE_PERI0(CLK_PERI_PWM, "peri_pwm", "axi_sel", 9),
+	GATE_PERI0(CLK_PERI_USB0, "peri_usb0", "usb20_sel", 10),
+	GATE_PERI0(CLK_PERI_USB1, "peri_usb1", "usb20_sel", 11),
+	GATE_PERI0(CLK_PERI_AP_DMA, "peri_ap_dma", "axi_sel", 12),
+	GATE_PERI0(CLK_PERI_MSDC30_0, "peri_msdc30_0", "msdc50_0_sel", 13),
+	GATE_PERI0(CLK_PERI_MSDC30_1, "peri_msdc30_1", "msdc30_1_sel", 14),
+	GATE_PERI0(CLK_PERI_MSDC30_2, "peri_msdc30_2", "msdc30_2_sel", 15),
+	GATE_PERI0(CLK_PERI_MSDC30_3, "peri_msdc30_3", "msdc30_3_sel", 16),
+	GATE_PERI0(CLK_PERI_NLI_ARB, "peri_nli_arb", "axi_sel", 17),
+	GATE_PERI0(CLK_PERI_IRDA, "peri_irda", "irda_sel", 18),
+	GATE_PERI0(CLK_PERI_UART0, "peri_uart0", "axi_sel", 19),
+	GATE_PERI0(CLK_PERI_UART1, "peri_uart1", "axi_sel", 20),
+	GATE_PERI0(CLK_PERI_UART2, "peri_uart2", "axi_sel", 21),
+	GATE_PERI0(CLK_PERI_UART3, "peri_uart3", "axi_sel", 22),
+	GATE_PERI0(CLK_PERI_I2C0, "peri_i2c0", "axi_sel", 23),
+	GATE_PERI0(CLK_PERI_I2C1, "peri_i2c1", "axi_sel", 24),
+	GATE_PERI0(CLK_PERI_I2C2, "peri_i2c2", "axi_sel", 25),
+	GATE_PERI0(CLK_PERI_I2C3, "peri_i2c3", "axi_sel", 26),
+	GATE_PERI0(CLK_PERI_I2C4, "peri_i2c4", "axi_sel", 27),
+	GATE_PERI0(CLK_PERI_AUXADC, "peri_auxadc", "clk26m", 28),
+	GATE_PERI0(CLK_PERI_SPI0, "peri_spi0", "spi_sel", 29),
+	GATE_PERI0(CLK_PERI_I2C5, "peri_i2c5", "axi_sel", 30),
+	GATE_PERI0(CLK_PERI_NFIECC, "peri_nfiecc", "axi_sel", 31),
+	/* PERI1 */
+	GATE_PERI1(CLK_PERI_SPI, "peri_spi", "spi_sel", 0),
+	GATE_PERI1(CLK_PERI_IRRX, "peri_irrx", "spi_sel", 1),
+	GATE_PERI1(CLK_PERI_I2C6, "peri_i2c6", "axi_sel", 2),
+};
+
+static u16 pericfg_rst_ofs[] = { 0x0, 0x4 };
+
+static const struct mtk_clk_rst_desc clk_rst_desc = {
+	.version = MTK_RST_SIMPLE,
+	.rst_bank_ofs = pericfg_rst_ofs,
+	.rst_bank_nr = ARRAY_SIZE(pericfg_rst_ofs),
+};
+
+static const struct of_device_id of_match_clk_mt8173_pericfg[] = {
+	{ .compatible = "mediatek,mt8173-pericfg" },
+	{ /* sentinel */ }
+};
+
+static int clk_mt8173_pericfg_probe(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw_onecell_data *clk_data;
+	int r;
+	void __iomem *base;
+
+	base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(base))
+		return PTR_ERR(base);
+
+	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
+	if (IS_ERR_OR_NULL(clk_data))
+		return -ENOMEM;
+
+	r = mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
+				   clk_data, &pdev->dev);
+	if (r)
+		goto free_clk_data;
+
+	r = mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
+					&mt8173_clk_lock, clk_data, &pdev->dev);
+	if (r)
+		goto unregister_gates;
+
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	if (r)
+		goto unregister_composites;
+
+	r = mtk_register_reset_controller(node, &clk_rst_desc);
+	if (r)
+		goto unregister_clk_hw;
+
+	return 0;
+
+unregister_clk_hw:
+	of_clk_del_provider(node);
+unregister_composites:
+	mtk_clk_unregister_composites(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
+unregister_gates:
+	mtk_clk_unregister_gates(peri_gates, ARRAY_SIZE(peri_gates), clk_data);
+free_clk_data:
+	mtk_free_clk_data(clk_data);
+	return r;
+}
+
+static int clk_mt8173_pericfg_remove(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
+
+	of_clk_del_provider(node);
+	mtk_clk_unregister_composites(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
+	mtk_clk_unregister_gates(peri_gates, ARRAY_SIZE(peri_gates), clk_data);
+	mtk_free_clk_data(clk_data);
+
+	return 0;
+}
+
+static struct platform_driver clk_mt8173_pericfg_drv = {
+	.driver = {
+		.name = "clk-mt8173-pericfg",
+		.of_match_table = of_match_clk_mt8173_pericfg,
+	},
+	.probe = clk_mt8173_pericfg_probe,
+	.remove = clk_mt8173_pericfg_remove,
+};
+module_platform_driver(clk_mt8173_pericfg_drv);
+
+MODULE_DESCRIPTION("MediaTek MT8173 pericfg clocks driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173-topckgen.c
similarity index 50%
rename from drivers/clk/mediatek/clk-mt8173.c
rename to drivers/clk/mediatek/clk-mt8173-topckgen.c
index 02231f8ba6d9..c7323639c502 100644
--- a/drivers/clk/mediatek/clk-mt8173.c
+++ b/drivers/clk/mediatek/clk-mt8173-topckgen.c
@@ -1,138 +1,34 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (c) 2014 MediaTek Inc.
- * Author: James Liao <jamesjj.liao at mediatek.com>
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
  */
 
-#include <linux/clk.h>
-#include <linux/of.h>
-#include <linux/of_address.h>
-#include <linux/of_device.h>
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/module.h>
 #include <linux/platform_device.h>
-
-#include "clk-cpumux.h"
 #include "clk-gate.h"
 #include "clk-mtk.h"
-#include "clk-pll.h"
-
-#include <dt-bindings/clock/mt8173-clk.h>
-
-#define REGOFF_REF2USB	0x8
-#define REGOFF_HDMI_REF	0x40
+#include "clk-mux.h"
 
 /*
  * For some clocks, we don't care what their actual rates are. And these
  * clocks may change their rate on different products or different scenarios.
  * So we model these clocks' rate as 0, to denote it's not an actual rate.
  */
-#define DUMMY_RATE		0
-
-static DEFINE_SPINLOCK(mt8173_clk_lock);
-
-static const struct mtk_fixed_clk fixed_clks[] = {
-	FIXED_CLK(CLK_TOP_CLKPH_MCK_O, "clkph_mck_o", "clk26m", DUMMY_RATE),
-	FIXED_CLK(CLK_TOP_USB_SYSPLL_125M, "usb_syspll_125m", "clk26m", 125 * MHZ),
-	FIXED_CLK(CLK_TOP_DSI0_DIG, "dsi0_dig", "clk26m", DUMMY_RATE),
-	FIXED_CLK(CLK_TOP_DSI1_DIG, "dsi1_dig", "clk26m", DUMMY_RATE),
-	FIXED_CLK(CLK_TOP_LVDS_PXL, "lvds_pxl", "lvdspll", DUMMY_RATE),
-	FIXED_CLK(CLK_TOP_LVDS_CTS, "lvds_cts", "lvdspll", DUMMY_RATE),
-};
-
-static const struct mtk_fixed_factor top_divs[] = {
-	FACTOR(CLK_TOP_ARMCA7PLL_754M, "armca7pll_754m", "armca7pll", 1, 2),
-	FACTOR(CLK_TOP_ARMCA7PLL_502M, "armca7pll_502m", "armca7pll", 1, 3),
-
-	FACTOR_FLAGS(CLK_TOP_MAIN_H546M, "main_h546m", "mainpll", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_MAIN_H364M, "main_h364m", "mainpll", 1, 3, 0),
-	FACTOR_FLAGS(CLK_TOP_MAIN_H218P4M, "main_h218p4m", "mainpll", 1, 5, 0),
-	FACTOR_FLAGS(CLK_TOP_MAIN_H156M, "main_h156m", "mainpll", 1, 7, 0),
-
-	FACTOR(CLK_TOP_TVDPLL_445P5M, "tvdpll_445p5m", "tvdpll", 1, 4),
-	FACTOR(CLK_TOP_TVDPLL_594M, "tvdpll_594m", "tvdpll", 1, 3),
-
-	FACTOR_FLAGS(CLK_TOP_UNIV_624M, "univ_624m", "univpll", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIV_416M, "univ_416m", "univpll", 1, 3, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIV_249P6M, "univ_249p6m", "univpll", 1, 5, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIV_178P3M, "univ_178p3m", "univpll", 1, 7, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIV_48M, "univ_48m", "univpll", 1, 26, 0),
-
-	FACTOR(CLK_TOP_CLKRTC_EXT, "clkrtc_ext", "clk32k", 1, 1),
-	FACTOR(CLK_TOP_CLKRTC_INT, "clkrtc_int", "clk26m", 1, 793),
-	FACTOR(CLK_TOP_FPC, "fpc_ck", "clk26m", 1, 1),
-
-	FACTOR(CLK_TOP_HDMITXPLL_D2, "hdmitxpll_d2", "hdmitx_dig_cts", 1, 2),
-	FACTOR(CLK_TOP_HDMITXPLL_D3, "hdmitxpll_d3", "hdmitx_dig_cts", 1, 3),
-
-	FACTOR(CLK_TOP_ARMCA7PLL_D2, "armca7pll_d2", "armca7pll_754m", 1, 1),
-	FACTOR(CLK_TOP_ARMCA7PLL_D3, "armca7pll_d3", "armca7pll_502m", 1, 1),
-
-	FACTOR(CLK_TOP_APLL1, "apll1_ck", "apll1", 1, 1),
-	FACTOR(CLK_TOP_APLL2, "apll2_ck", "apll2", 1, 1),
+#define DUMMY_RATE	0
 
-	FACTOR(CLK_TOP_DMPLL, "dmpll_ck", "clkph_mck_o", 1, 1),
-	FACTOR(CLK_TOP_DMPLL_D2, "dmpll_d2", "clkph_mck_o", 1, 2),
-	FACTOR(CLK_TOP_DMPLL_D4, "dmpll_d4", "clkph_mck_o", 1, 4),
-	FACTOR(CLK_TOP_DMPLL_D8, "dmpll_d8", "clkph_mck_o", 1, 8),
-	FACTOR(CLK_TOP_DMPLL_D16, "dmpll_d16", "clkph_mck_o", 1, 16),
+#define TOP_MUX_GATE_NOSR(_id, _name, _parents, _reg, _shift, _width, _gate, _flags) \
+		MUX_GATE_CLR_SET_UPD_FLAGS(_id, _name, _parents, _reg,		\
+			(_reg + 0x4), (_reg + 0x8), _shift, _width,		\
+			_gate, 0, -1, _flags)
 
-	FACTOR(CLK_TOP_LVDSPLL_D2, "lvdspll_d2", "lvdspll", 1, 2),
-	FACTOR(CLK_TOP_LVDSPLL_D4, "lvdspll_d4", "lvdspll", 1, 4),
-	FACTOR(CLK_TOP_LVDSPLL_D8, "lvdspll_d8", "lvdspll", 1, 8),
+#define TOP_MUX_GATE(_id, _name, _parents, _reg, _shift, _width, _gate, _flags)	\
+		TOP_MUX_GATE_NOSR(_id, _name, _parents, _reg, _shift, _width,	\
+				  _gate, CLK_SET_RATE_PARENT | _flags)
 
-	FACTOR(CLK_TOP_MMPLL, "mmpll_ck", "mmpll", 1, 1),
-	FACTOR(CLK_TOP_MMPLL_D2, "mmpll_d2", "mmpll", 1, 2),
-
-	FACTOR(CLK_TOP_MSDCPLL, "msdcpll_ck", "msdcpll", 1, 1),
-	FACTOR(CLK_TOP_MSDCPLL_D2, "msdcpll_d2", "msdcpll", 1, 2),
-	FACTOR(CLK_TOP_MSDCPLL_D4, "msdcpll_d4", "msdcpll", 1, 4),
-	FACTOR(CLK_TOP_MSDCPLL2, "msdcpll2_ck", "msdcpll2", 1, 1),
-	FACTOR(CLK_TOP_MSDCPLL2_D2, "msdcpll2_d2", "msdcpll2", 1, 2),
-	FACTOR(CLK_TOP_MSDCPLL2_D4, "msdcpll2_d4", "msdcpll2", 1, 4),
-
-	FACTOR_FLAGS(CLK_TOP_SYSPLL_D2, "syspll_d2", "main_h546m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D2, "syspll1_d2", "main_h546m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D4, "syspll1_d4", "main_h546m", 1, 4, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D8, "syspll1_d8", "main_h546m", 1, 8, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D16, "syspll1_d16", "main_h546m", 1, 16, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL_D3, "syspll_d3", "main_h364m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL2_D2, "syspll2_d2", "main_h364m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL2_D4, "syspll2_d4", "main_h364m", 1, 4, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL_D5, "syspll_d5", "main_h218p4m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL3_D2, "syspll3_d2", "main_h218p4m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL3_D4, "syspll3_d4", "main_h218p4m", 1, 4, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL_D7, "syspll_d7", "main_h156m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL4_D2, "syspll4_d2", "main_h156m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_SYSPLL4_D4, "syspll4_d4", "main_h156m", 1, 4, 0),
-
-	FACTOR(CLK_TOP_TVDPLL, "tvdpll_ck", "tvdpll_594m", 1, 1),
-	FACTOR(CLK_TOP_TVDPLL_D2, "tvdpll_d2", "tvdpll_594m", 1, 2),
-	FACTOR(CLK_TOP_TVDPLL_D4, "tvdpll_d4", "tvdpll_594m", 1, 4),
-	FACTOR(CLK_TOP_TVDPLL_D8, "tvdpll_d8", "tvdpll_594m", 1, 8),
-	FACTOR(CLK_TOP_TVDPLL_D16, "tvdpll_d16", "tvdpll_594m", 1, 16),
-
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D2, "univpll_d2", "univ_624m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL1_D2, "univpll1_d2", "univ_624m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL1_D4, "univpll1_d4", "univ_624m", 1, 4, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL1_D8, "univpll1_d8", "univ_624m", 1, 8, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D3, "univpll_d3", "univ_416m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL2_D2, "univpll2_d2", "univ_416m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL2_D4, "univpll2_d4", "univ_416m", 1, 4, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL2_D8, "univpll2_d8", "univ_416m", 1, 8, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D5, "univpll_d5", "univ_249p6m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL3_D2, "univpll3_d2", "univ_249p6m", 1, 2, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL3_D4, "univpll3_d4", "univ_249p6m", 1, 4, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL3_D8, "univpll3_d8", "univ_249p6m", 1, 8, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D7, "univpll_d7", "univ_178p3m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D26, "univpll_d26", "univ_48m", 1, 1, 0),
-	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D52, "univpll_d52", "univ_48m", 1, 2, 0),
-
-	FACTOR(CLK_TOP_VCODECPLL, "vcodecpll_ck", "vcodecpll", 1, 3),
-	FACTOR(CLK_TOP_VCODECPLL_370P5, "vcodecpll_370p5", "vcodecpll", 1, 4),
-
-	FACTOR(CLK_TOP_VENCPLL, "vencpll_ck", "vencpll", 1, 1),
-	FACTOR(CLK_TOP_VENCPLL_D2, "vencpll_d2", "vencpll", 1, 2),
-	FACTOR(CLK_TOP_VENCPLL_D4, "vencpll_d4", "vencpll", 1, 4),
-};
+static DEFINE_SPINLOCK(mt8173_top_clk_lock);
 
 static const char * const axi_parents[] = {
 	"clk26m",
@@ -524,23 +420,109 @@ static const char * const i2s3_b_ck_parents[] = {
 	"apll2_div5"
 };
 
-static const char * const ca53_parents[] = {
-	"clk26m",
-	"armca7pll",
-	"mainpll",
-	"univpll"
+static const struct mtk_fixed_clk fixed_clks[] = {
+	FIXED_CLK(CLK_TOP_CLKPH_MCK_O, "clkph_mck_o", "clk26m", DUMMY_RATE),
+	FIXED_CLK(CLK_TOP_USB_SYSPLL_125M, "usb_syspll_125m", "clk26m", 125 * MHZ),
+	FIXED_CLK(CLK_TOP_DSI0_DIG, "dsi0_dig", "clk26m", DUMMY_RATE),
+	FIXED_CLK(CLK_TOP_DSI1_DIG, "dsi1_dig", "clk26m", DUMMY_RATE),
+	FIXED_CLK(CLK_TOP_LVDS_PXL, "lvds_pxl", "lvdspll", DUMMY_RATE),
+	FIXED_CLK(CLK_TOP_LVDS_CTS, "lvds_cts", "lvdspll", DUMMY_RATE),
 };
 
-static const char * const ca72_parents[] = {
-	"clk26m",
-	"armca15pll",
-	"mainpll",
-	"univpll"
-};
+static const struct mtk_fixed_factor top_divs[] = {
+	FACTOR(CLK_TOP_ARMCA7PLL_754M, "armca7pll_754m", "armca7pll", 1, 2),
+	FACTOR(CLK_TOP_ARMCA7PLL_502M, "armca7pll_502m", "armca7pll", 1, 3),
+
+	FACTOR_FLAGS(CLK_TOP_MAIN_H546M, "main_h546m", "mainpll", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_MAIN_H364M, "main_h364m", "mainpll", 1, 3, 0),
+	FACTOR_FLAGS(CLK_TOP_MAIN_H218P4M, "main_h218p4m", "mainpll", 1, 5, 0),
+	FACTOR_FLAGS(CLK_TOP_MAIN_H156M, "main_h156m", "mainpll", 1, 7, 0),
+
+	FACTOR(CLK_TOP_TVDPLL_445P5M, "tvdpll_445p5m", "tvdpll", 1, 4),
+	FACTOR(CLK_TOP_TVDPLL_594M, "tvdpll_594m", "tvdpll", 1, 3),
+
+	FACTOR_FLAGS(CLK_TOP_UNIV_624M, "univ_624m", "univpll", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIV_416M, "univ_416m", "univpll", 1, 3, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIV_249P6M, "univ_249p6m", "univpll", 1, 5, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIV_178P3M, "univ_178p3m", "univpll", 1, 7, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIV_48M, "univ_48m", "univpll", 1, 26, 0),
+
+	FACTOR(CLK_TOP_CLKRTC_EXT, "clkrtc_ext", "clk32k", 1, 1),
+	FACTOR(CLK_TOP_CLKRTC_INT, "clkrtc_int", "clk26m", 1, 793),
+	FACTOR(CLK_TOP_FPC, "fpc_ck", "clk26m", 1, 1),
+
+	FACTOR(CLK_TOP_HDMITXPLL_D2, "hdmitxpll_d2", "hdmitx_dig_cts", 1, 2),
+	FACTOR(CLK_TOP_HDMITXPLL_D3, "hdmitxpll_d3", "hdmitx_dig_cts", 1, 3),
+
+	FACTOR(CLK_TOP_ARMCA7PLL_D2, "armca7pll_d2", "armca7pll_754m", 1, 1),
+	FACTOR(CLK_TOP_ARMCA7PLL_D3, "armca7pll_d3", "armca7pll_502m", 1, 1),
+
+	FACTOR(CLK_TOP_APLL1, "apll1_ck", "apll1", 1, 1),
+	FACTOR(CLK_TOP_APLL2, "apll2_ck", "apll2", 1, 1),
+
+	FACTOR(CLK_TOP_DMPLL, "dmpll_ck", "clkph_mck_o", 1, 1),
+	FACTOR(CLK_TOP_DMPLL_D2, "dmpll_d2", "clkph_mck_o", 1, 2),
+	FACTOR(CLK_TOP_DMPLL_D4, "dmpll_d4", "clkph_mck_o", 1, 4),
+	FACTOR(CLK_TOP_DMPLL_D8, "dmpll_d8", "clkph_mck_o", 1, 8),
+	FACTOR(CLK_TOP_DMPLL_D16, "dmpll_d16", "clkph_mck_o", 1, 16),
+
+	FACTOR(CLK_TOP_LVDSPLL_D2, "lvdspll_d2", "lvdspll", 1, 2),
+	FACTOR(CLK_TOP_LVDSPLL_D4, "lvdspll_d4", "lvdspll", 1, 4),
+	FACTOR(CLK_TOP_LVDSPLL_D8, "lvdspll_d8", "lvdspll", 1, 8),
+
+	FACTOR(CLK_TOP_MMPLL, "mmpll_ck", "mmpll", 1, 1),
+	FACTOR(CLK_TOP_MMPLL_D2, "mmpll_d2", "mmpll", 1, 2),
+
+	FACTOR(CLK_TOP_MSDCPLL, "msdcpll_ck", "msdcpll", 1, 1),
+	FACTOR(CLK_TOP_MSDCPLL_D2, "msdcpll_d2", "msdcpll", 1, 2),
+	FACTOR(CLK_TOP_MSDCPLL_D4, "msdcpll_d4", "msdcpll", 1, 4),
+	FACTOR(CLK_TOP_MSDCPLL2, "msdcpll2_ck", "msdcpll2", 1, 1),
+	FACTOR(CLK_TOP_MSDCPLL2_D2, "msdcpll2_d2", "msdcpll2", 1, 2),
+	FACTOR(CLK_TOP_MSDCPLL2_D4, "msdcpll2_d4", "msdcpll2", 1, 4),
+
+	FACTOR_FLAGS(CLK_TOP_SYSPLL_D2, "syspll_d2", "main_h546m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D2, "syspll1_d2", "main_h546m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D4, "syspll1_d4", "main_h546m", 1, 4, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D8, "syspll1_d8", "main_h546m", 1, 8, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL1_D16, "syspll1_d16", "main_h546m", 1, 16, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL_D3, "syspll_d3", "main_h364m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL2_D2, "syspll2_d2", "main_h364m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL2_D4, "syspll2_d4", "main_h364m", 1, 4, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL_D5, "syspll_d5", "main_h218p4m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL3_D2, "syspll3_d2", "main_h218p4m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL3_D4, "syspll3_d4", "main_h218p4m", 1, 4, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL_D7, "syspll_d7", "main_h156m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL4_D2, "syspll4_d2", "main_h156m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_SYSPLL4_D4, "syspll4_d4", "main_h156m", 1, 4, 0),
+
+	FACTOR(CLK_TOP_TVDPLL, "tvdpll_ck", "tvdpll_594m", 1, 1),
+	FACTOR(CLK_TOP_TVDPLL_D2, "tvdpll_d2", "tvdpll_594m", 1, 2),
+	FACTOR(CLK_TOP_TVDPLL_D4, "tvdpll_d4", "tvdpll_594m", 1, 4),
+	FACTOR(CLK_TOP_TVDPLL_D8, "tvdpll_d8", "tvdpll_594m", 1, 8),
+	FACTOR(CLK_TOP_TVDPLL_D16, "tvdpll_d16", "tvdpll_594m", 1, 16),
 
-static const struct mtk_composite cpu_muxes[] = {
-	MUX(CLK_INFRA_CA53SEL, "infra_ca53_sel", ca53_parents, 0x0000, 0, 2),
-	MUX(CLK_INFRA_CA72SEL, "infra_ca72_sel", ca72_parents, 0x0000, 2, 2),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D2, "univpll_d2", "univ_624m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL1_D2, "univpll1_d2", "univ_624m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL1_D4, "univpll1_d4", "univ_624m", 1, 4, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL1_D8, "univpll1_d8", "univ_624m", 1, 8, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D3, "univpll_d3", "univ_416m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL2_D2, "univpll2_d2", "univ_416m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL2_D4, "univpll2_d4", "univ_416m", 1, 4, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL2_D8, "univpll2_d8", "univ_416m", 1, 8, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D5, "univpll_d5", "univ_249p6m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL3_D2, "univpll3_d2", "univ_249p6m", 1, 2, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL3_D4, "univpll3_d4", "univ_249p6m", 1, 4, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL3_D8, "univpll3_d8", "univ_249p6m", 1, 8, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D7, "univpll_d7", "univ_178p3m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D26, "univpll_d26", "univ_48m", 1, 1, 0),
+	FACTOR_FLAGS(CLK_TOP_UNIVPLL_D52, "univpll_d52", "univ_48m", 1, 2, 0),
+
+	FACTOR(CLK_TOP_VCODECPLL, "vcodecpll_ck", "vcodecpll", 1, 3),
+	FACTOR(CLK_TOP_VCODECPLL_370P5, "vcodecpll_370p5", "vcodecpll", 1, 4),
+
+	FACTOR(CLK_TOP_VENCPLL, "vencpll_ck", "vencpll", 1, 1),
+	FACTOR(CLK_TOP_VENCPLL_D2, "vencpll_d2", "vencpll", 1, 2),
+	FACTOR(CLK_TOP_VENCPLL_D4, "vencpll_d4", "vencpll", 1, 4),
 };
 
 static const struct mtk_composite top_muxes[] = {
@@ -564,25 +546,35 @@ static const struct mtk_composite top_muxes[] = {
 	MUX_GATE(CLK_TOP_USB20_SEL, "usb20_sel", usb20_parents, 0x0060, 24, 2, 31),
 	/* CLK_CFG_3 */
 	MUX_GATE(CLK_TOP_USB30_SEL, "usb30_sel", usb30_parents, 0x0070, 0, 2, 7),
-	MUX_GATE(CLK_TOP_MSDC50_0_H_SEL, "msdc50_0_h_sel", msdc50_0_h_parents, 0x0070, 8, 3, 15),
-	MUX_GATE(CLK_TOP_MSDC50_0_SEL, "msdc50_0_sel", msdc50_0_parents, 0x0070, 16, 4, 23),
-	MUX_GATE(CLK_TOP_MSDC30_1_SEL, "msdc30_1_sel", msdc30_1_parents, 0x0070, 24, 3, 31),
+	MUX_GATE(CLK_TOP_MSDC50_0_H_SEL, "msdc50_0_h_sel", msdc50_0_h_parents,
+		 0x0070, 8, 3, 15),
+	MUX_GATE(CLK_TOP_MSDC50_0_SEL, "msdc50_0_sel", msdc50_0_parents,
+		 0x0070, 16, 4, 23),
+	MUX_GATE(CLK_TOP_MSDC30_1_SEL, "msdc30_1_sel", msdc30_1_parents,
+		 0x0070, 24, 3, 31),
 	/* CLK_CFG_4 */
-	MUX_GATE(CLK_TOP_MSDC30_2_SEL, "msdc30_2_sel", msdc30_2_parents, 0x0080, 0, 3, 7),
-	MUX_GATE(CLK_TOP_MSDC30_3_SEL, "msdc30_3_sel", msdc30_3_parents, 0x0080, 8, 4, 15),
-	MUX_GATE(CLK_TOP_AUDIO_SEL, "audio_sel", audio_parents, 0x0080, 16, 2, 23),
-	MUX_GATE(CLK_TOP_AUD_INTBUS_SEL, "aud_intbus_sel", aud_intbus_parents, 0x0080, 24, 3, 31),
+	MUX_GATE(CLK_TOP_MSDC30_2_SEL, "msdc30_2_sel", msdc30_2_parents,
+		 0x0080, 0, 3, 7),
+	MUX_GATE(CLK_TOP_MSDC30_3_SEL, "msdc30_3_sel", msdc30_3_parents,
+		 0x0080, 8, 4, 15),
+	MUX_GATE(CLK_TOP_AUDIO_SEL, "audio_sel", audio_parents,
+		 0x0080, 16, 2, 23),
+	MUX_GATE(CLK_TOP_AUD_INTBUS_SEL, "aud_intbus_sel", aud_intbus_parents,
+		 0x0080, 24, 3, 31),
 	/* CLK_CFG_5 */
-	MUX_GATE(CLK_TOP_PMICSPI_SEL, "pmicspi_sel", pmicspi_parents, 0x0090, 0, 3, 7 /* 7:5 */),
+	MUX_GATE(CLK_TOP_PMICSPI_SEL, "pmicspi_sel", pmicspi_parents,
+		 0x0090, 0, 3, 7 /* 7:5 */),
 	MUX_GATE(CLK_TOP_SCP_SEL, "scp_sel", scp_parents, 0x0090, 8, 3, 15),
 	MUX_GATE(CLK_TOP_ATB_SEL, "atb_sel", atb_parents, 0x0090, 16, 2, 23),
-	MUX_GATE(CLK_TOP_VENC_LT_SEL, "venclt_sel", venc_lt_parents, 0x0090, 24, 4, 31),
+	MUX_GATE(CLK_TOP_VENC_LT_SEL, "venclt_sel", venc_lt_parents,
+		 0x0090, 24, 4, 31),
 	/* CLK_CFG_6 */
 	/*
 	 * The dpi0_sel clock should not propagate rate changes to its parent
 	 * clock so the dpi driver can have full control over PLL and divider.
 	 */
-	MUX_GATE_FLAGS(CLK_TOP_DPI0_SEL, "dpi0_sel", dpi0_parents, 0x00a0, 0, 3, 7, 0),
+	MUX_GATE_FLAGS(CLK_TOP_DPI0_SEL, "dpi0_sel", dpi0_parents,
+		       0x00a0, 0, 3, 7, 0),
 	MUX_GATE(CLK_TOP_IRDA_SEL, "irda_sel", irda_parents, 0x00a0, 8, 2, 15),
 	MUX_GATE_FLAGS(CLK_TOP_CCI400_SEL, "cci400_sel",
 		       cci400_parents, 0x00a0, 16, 3, 23,
@@ -590,17 +582,23 @@ static const struct mtk_composite top_muxes[] = {
 	MUX_GATE(CLK_TOP_AUD_1_SEL, "aud_1_sel", aud_1_parents, 0x00a0, 24, 2, 31),
 	/* CLK_CFG_7 */
 	MUX_GATE(CLK_TOP_AUD_2_SEL, "aud_2_sel", aud_2_parents, 0x00b0, 0, 2, 7),
-	MUX_GATE(CLK_TOP_MEM_MFG_IN_SEL, "mem_mfg_in_sel", mem_mfg_in_parents, 0x00b0, 8, 2, 15),
-	MUX_GATE(CLK_TOP_AXI_MFG_IN_SEL, "axi_mfg_in_sel", axi_mfg_in_parents, 0x00b0, 16, 2, 23),
+	MUX_GATE(CLK_TOP_MEM_MFG_IN_SEL, "mem_mfg_in_sel", mem_mfg_in_parents,
+		 0x00b0, 8, 2, 15),
+	MUX_GATE(CLK_TOP_AXI_MFG_IN_SEL, "axi_mfg_in_sel", axi_mfg_in_parents,
+		 0x00b0, 16, 2, 23),
 	MUX_GATE(CLK_TOP_SCAM_SEL, "scam_sel", scam_parents, 0x00b0, 24, 2, 31),
 	/* CLK_CFG_12 */
-	MUX_GATE(CLK_TOP_SPINFI_IFR_SEL, "spinfi_ifr_sel", spinfi_ifr_parents, 0x00c0, 0, 3, 7),
+	MUX_GATE(CLK_TOP_SPINFI_IFR_SEL, "spinfi_ifr_sel", spinfi_ifr_parents,
+		 0x00c0, 0, 3, 7),
 	MUX_GATE(CLK_TOP_HDMI_SEL, "hdmi_sel", hdmi_parents, 0x00c0, 8, 2, 15),
-	MUX_GATE(CLK_TOP_DPILVDS_SEL, "dpilvds_sel", dpilvds_parents, 0x00c0, 24, 3, 31),
+	MUX_GATE(CLK_TOP_DPILVDS_SEL, "dpilvds_sel", dpilvds_parents,
+		 0x00c0, 24, 3, 31),
 	/* CLK_CFG_13 */
-	MUX_GATE(CLK_TOP_MSDC50_2_H_SEL, "msdc50_2_h_sel", msdc50_2_h_parents, 0x00d0, 0, 3, 7),
+	MUX_GATE(CLK_TOP_MSDC50_2_H_SEL, "msdc50_2_h_sel", msdc50_2_h_parents,
+		 0x00d0, 0, 3, 7),
 	MUX_GATE(CLK_TOP_HDCP_SEL, "hdcp_sel", hdcp_parents, 0x00d0, 8, 2, 15),
-	MUX_GATE(CLK_TOP_HDCP_24M_SEL, "hdcp_24m_sel", hdcp_24m_parents, 0x00d0, 16, 2, 23),
+	MUX_GATE(CLK_TOP_HDCP_24M_SEL, "hdcp_24m_sel", hdcp_24m_parents,
+		 0x00d0, 16, 2, 23),
 	MUX_FLAGS(CLK_TOP_RTC_SEL, "rtc_sel", rtc_parents, 0x00d0, 24, 2,
 		  CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 
@@ -625,236 +623,12 @@ static const struct mtk_composite top_muxes[] = {
 	MUX(CLK_TOP_I2S3_B_SEL, "i2s3_b_ck_sel", i2s3_b_ck_parents, 0x120, 8, 1),
 };
 
-static const struct mtk_gate_regs infra_cg_regs = {
-	.set_ofs = 0x0040,
-	.clr_ofs = 0x0044,
-	.sta_ofs = 0x0048,
-};
-
-#define GATE_ICG(_id, _name, _parent, _shift) {	\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &infra_cg_regs,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr,		\
-	}
-
-static const struct mtk_gate infra_clks[] = {
-	GATE_ICG(CLK_INFRA_DBGCLK, "infra_dbgclk", "axi_sel", 0),
-	GATE_ICG(CLK_INFRA_SMI, "infra_smi", "mm_sel", 1),
-	GATE_ICG(CLK_INFRA_AUDIO, "infra_audio", "aud_intbus_sel", 5),
-	GATE_ICG(CLK_INFRA_GCE, "infra_gce", "axi_sel", 6),
-	GATE_ICG(CLK_INFRA_L2C_SRAM, "infra_l2c_sram", "axi_sel", 7),
-	GATE_ICG(CLK_INFRA_M4U, "infra_m4u", "mem_sel", 8),
-	GATE_ICG(CLK_INFRA_CPUM, "infra_cpum", "cpum_ck", 15),
-	GATE_ICG(CLK_INFRA_KP, "infra_kp", "axi_sel", 16),
-	GATE_ICG(CLK_INFRA_CEC, "infra_cec", "clk26m", 18),
-	GATE_ICG(CLK_INFRA_PMICSPI, "infra_pmicspi", "pmicspi_sel", 22),
-	GATE_ICG(CLK_INFRA_PMICWRAP, "infra_pmicwrap", "axi_sel", 23),
-};
-
-static const struct mtk_fixed_factor infra_early_divs[] = {
-	FACTOR(CLK_INFRA_CLK_13M, "clk13m", "clk26m", 1, 2),
-};
-
-static const struct mtk_gate_regs peri0_cg_regs = {
-	.set_ofs = 0x0008,
-	.clr_ofs = 0x0010,
-	.sta_ofs = 0x0018,
-};
-
-static const struct mtk_gate_regs peri1_cg_regs = {
-	.set_ofs = 0x000c,
-	.clr_ofs = 0x0014,
-	.sta_ofs = 0x001c,
-};
-
-#define GATE_PERI0(_id, _name, _parent, _shift) {	\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &peri0_cg_regs,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr,		\
-	}
-
-#define GATE_PERI1(_id, _name, _parent, _shift) {	\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &peri1_cg_regs,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr,		\
-	}
-
-static const struct mtk_gate peri_gates[] = {
-	/* PERI0 */
-	GATE_PERI0(CLK_PERI_NFI, "peri_nfi", "axi_sel", 0),
-	GATE_PERI0(CLK_PERI_THERM, "peri_therm", "axi_sel", 1),
-	GATE_PERI0(CLK_PERI_PWM1, "peri_pwm1", "axi_sel", 2),
-	GATE_PERI0(CLK_PERI_PWM2, "peri_pwm2", "axi_sel", 3),
-	GATE_PERI0(CLK_PERI_PWM3, "peri_pwm3", "axi_sel", 4),
-	GATE_PERI0(CLK_PERI_PWM4, "peri_pwm4", "axi_sel", 5),
-	GATE_PERI0(CLK_PERI_PWM5, "peri_pwm5", "axi_sel", 6),
-	GATE_PERI0(CLK_PERI_PWM6, "peri_pwm6", "axi_sel", 7),
-	GATE_PERI0(CLK_PERI_PWM7, "peri_pwm7", "axi_sel", 8),
-	GATE_PERI0(CLK_PERI_PWM, "peri_pwm", "axi_sel", 9),
-	GATE_PERI0(CLK_PERI_USB0, "peri_usb0", "usb20_sel", 10),
-	GATE_PERI0(CLK_PERI_USB1, "peri_usb1", "usb20_sel", 11),
-	GATE_PERI0(CLK_PERI_AP_DMA, "peri_ap_dma", "axi_sel", 12),
-	GATE_PERI0(CLK_PERI_MSDC30_0, "peri_msdc30_0", "msdc50_0_sel", 13),
-	GATE_PERI0(CLK_PERI_MSDC30_1, "peri_msdc30_1", "msdc30_1_sel", 14),
-	GATE_PERI0(CLK_PERI_MSDC30_2, "peri_msdc30_2", "msdc30_2_sel", 15),
-	GATE_PERI0(CLK_PERI_MSDC30_3, "peri_msdc30_3", "msdc30_3_sel", 16),
-	GATE_PERI0(CLK_PERI_NLI_ARB, "peri_nli_arb", "axi_sel", 17),
-	GATE_PERI0(CLK_PERI_IRDA, "peri_irda", "irda_sel", 18),
-	GATE_PERI0(CLK_PERI_UART0, "peri_uart0", "axi_sel", 19),
-	GATE_PERI0(CLK_PERI_UART1, "peri_uart1", "axi_sel", 20),
-	GATE_PERI0(CLK_PERI_UART2, "peri_uart2", "axi_sel", 21),
-	GATE_PERI0(CLK_PERI_UART3, "peri_uart3", "axi_sel", 22),
-	GATE_PERI0(CLK_PERI_I2C0, "peri_i2c0", "axi_sel", 23),
-	GATE_PERI0(CLK_PERI_I2C1, "peri_i2c1", "axi_sel", 24),
-	GATE_PERI0(CLK_PERI_I2C2, "peri_i2c2", "axi_sel", 25),
-	GATE_PERI0(CLK_PERI_I2C3, "peri_i2c3", "axi_sel", 26),
-	GATE_PERI0(CLK_PERI_I2C4, "peri_i2c4", "axi_sel", 27),
-	GATE_PERI0(CLK_PERI_AUXADC, "peri_auxadc", "clk26m", 28),
-	GATE_PERI0(CLK_PERI_SPI0, "peri_spi0", "spi_sel", 29),
-	GATE_PERI0(CLK_PERI_I2C5, "peri_i2c5", "axi_sel", 30),
-	GATE_PERI0(CLK_PERI_NFIECC, "peri_nfiecc", "axi_sel", 31),
-	/* PERI1 */
-	GATE_PERI1(CLK_PERI_SPI, "peri_spi", "spi_sel", 0),
-	GATE_PERI1(CLK_PERI_IRRX, "peri_irrx", "spi_sel", 1),
-	GATE_PERI1(CLK_PERI_I2C6, "peri_i2c6", "axi_sel", 2),
-};
-
-static const char * const uart_ck_sel_parents[] = {
-	"clk26m",
-	"uart_sel",
-};
-
-static const struct mtk_composite peri_clks[] = {
-	MUX(CLK_PERI_UART0_SEL, "uart0_ck_sel", uart_ck_sel_parents, 0x40c, 0, 1),
-	MUX(CLK_PERI_UART1_SEL, "uart1_ck_sel", uart_ck_sel_parents, 0x40c, 1, 1),
-	MUX(CLK_PERI_UART2_SEL, "uart2_ck_sel", uart_ck_sel_parents, 0x40c, 2, 1),
-	MUX(CLK_PERI_UART3_SEL, "uart3_ck_sel", uart_ck_sel_parents, 0x40c, 3, 1),
-};
-
-static const struct mtk_gate_regs cg_regs_4_8_0 = {
-	.set_ofs = 0x0004,
-	.clr_ofs = 0x0008,
-	.sta_ofs = 0x0000,
-};
-
-#define GATE_IMG(_id, _name, _parent, _shift) {			\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &cg_regs_4_8_0,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr,		\
-	}
-
-static const struct mtk_gate img_clks[] = {
-	GATE_DUMMY(CLK_DUMMY, "img_dummy"),
-	GATE_IMG(CLK_IMG_LARB2_SMI, "img_larb2_smi", "mm_sel", 0),
-	GATE_IMG(CLK_IMG_CAM_SMI, "img_cam_smi", "mm_sel", 5),
-	GATE_IMG(CLK_IMG_CAM_CAM, "img_cam_cam", "mm_sel", 6),
-	GATE_IMG(CLK_IMG_SEN_TG, "img_sen_tg", "camtg_sel", 7),
-	GATE_IMG(CLK_IMG_SEN_CAM, "img_sen_cam", "mm_sel", 8),
-	GATE_IMG(CLK_IMG_CAM_SV, "img_cam_sv", "mm_sel", 9),
-	GATE_IMG(CLK_IMG_FD, "img_fd", "mm_sel", 11),
-};
-
-static const struct mtk_gate_regs vdec0_cg_regs = {
-	.set_ofs = 0x0000,
-	.clr_ofs = 0x0004,
-	.sta_ofs = 0x0000,
-};
-
-static const struct mtk_gate_regs vdec1_cg_regs = {
-	.set_ofs = 0x0008,
-	.clr_ofs = 0x000c,
-	.sta_ofs = 0x0008,
-};
-
-#define GATE_VDEC0(_id, _name, _parent, _shift) {		\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &vdec0_cg_regs,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr_inv,		\
-	}
-
-#define GATE_VDEC1(_id, _name, _parent, _shift) {		\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &vdec1_cg_regs,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr_inv,		\
-	}
-
-static const struct mtk_gate vdec_clks[] = {
-	GATE_DUMMY(CLK_DUMMY, "vdec_dummy"),
-	GATE_VDEC0(CLK_VDEC_CKEN, "vdec_cken", "vdec_sel", 0),
-	GATE_VDEC1(CLK_VDEC_LARB_CKEN, "vdec_larb_cken", "mm_sel", 0),
-};
-
-#define GATE_VENC(_id, _name, _parent, _shift) {		\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &cg_regs_4_8_0,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr_inv,		\
-	}
-
-static const struct mtk_gate venc_clks[] = {
-	GATE_DUMMY(CLK_DUMMY, "venc_dummy"),
-	GATE_VENC(CLK_VENC_CKE0, "venc_cke0", "mm_sel", 0),
-	GATE_VENC(CLK_VENC_CKE1, "venc_cke1", "venc_sel", 4),
-	GATE_VENC(CLK_VENC_CKE2, "venc_cke2", "venc_sel", 8),
-	GATE_VENC(CLK_VENC_CKE3, "venc_cke3", "venc_sel", 12),
-};
-
-#define GATE_VENCLT(_id, _name, _parent, _shift) {		\
-		.id = _id,					\
-		.name = _name,					\
-		.parent_name = _parent,				\
-		.regs = &cg_regs_4_8_0,				\
-		.shift = _shift,				\
-		.ops = &mtk_clk_gate_ops_setclr_inv,		\
-	}
-
-static const struct mtk_gate venclt_clks[] = {
-	GATE_DUMMY(CLK_DUMMY, "venclt_dummy"),
-	GATE_VENCLT(CLK_VENCLT_CKE0, "venclt_cke0", "mm_sel", 0),
-	GATE_VENCLT(CLK_VENCLT_CKE1, "venclt_cke1", "venclt_sel", 4),
-};
-
-static u16 infrasys_rst_ofs[] = { 0x30, 0x34, };
-static u16 pericfg_rst_ofs[] = { 0x0, 0x4, };
-
-static const struct mtk_clk_rst_desc clk_rst_desc[] = {
-	/* infrasys */
-	{
-		.version = MTK_RST_SIMPLE,
-		.rst_bank_ofs = infrasys_rst_ofs,
-		.rst_bank_nr = ARRAY_SIZE(infrasys_rst_ofs),
-	},
-	/* pericfg */
-	{
-		.version = MTK_RST_SIMPLE,
-		.rst_bank_ofs = pericfg_rst_ofs,
-		.rst_bank_nr = ARRAY_SIZE(pericfg_rst_ofs),
-	}
+static const struct of_device_id of_match_clk_mt8173_topckgen[] = {
+	{ .compatible = "mediatek,mt8173-topckgen" },
+	{ /* sentinel */ }
 };
 
-static struct clk_hw_onecell_data *infra_clk_data;
-
-static int clk_mt8173_topck_probe(struct platform_device *pdev)
+static int clk_mt8173_topckgen_probe(struct platform_device *pdev)
 {
 	struct device_node *node = pdev->dev.of_node;
 	struct clk_hw_onecell_data *clk_data;
@@ -878,7 +652,7 @@ static int clk_mt8173_topck_probe(struct platform_device *pdev)
 		goto unregister_fixed_clks;
 
 	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-					&mt8173_clk_lock, clk_data, &pdev->dev);
+					&mt8173_top_clk_lock, clk_data, &pdev->dev);
 	if (r)
 		goto unregister_factors;
 
@@ -899,286 +673,29 @@ static int clk_mt8173_topck_probe(struct platform_device *pdev)
 	return r;
 }
 
-static void clk_mt8173_infra_init_early(struct device_node *node)
-{
-	int i;
-
-	infra_clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
-	if (!infra_clk_data)
-		return;
-
-	for (i = 0; i < CLK_INFRA_NR_CLK; i++)
-		infra_clk_data->hws[i] = ERR_PTR(-EPROBE_DEFER);
-
-	mtk_clk_register_factors(infra_early_divs, ARRAY_SIZE(infra_early_divs), infra_clk_data);
-
-	of_clk_add_hw_provider(node, of_clk_hw_onecell_get, infra_clk_data);
-}
-CLK_OF_DECLARE_DRIVER(mtk_infrasys, "mediatek,mt8173-infracfg",
-		      clk_mt8173_infra_init_early);
-
-static int clk_mt8173_infra_probe(struct platform_device *pdev)
+static int clk_mt8173_topckgen_remove(struct platform_device *pdev)
 {
+	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
 	struct device_node *node = pdev->dev.of_node;
-	int r;
-
-	r = mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-				   infra_clk_data, &pdev->dev);
-	if (r)
-		return r;
-
-	r = mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
-				      infra_clk_data, &pdev->dev);
-	if (r)
-		goto unregister_gates;
 
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, infra_clk_data);
-	if (r)
-		goto unregister_cpumuxes;
-
-	r = mtk_register_reset_controller(node, &clk_rst_desc[0]);
-	if (r)
-		goto unregister_clk_hw;
-
-	return 0;
-
-unregister_clk_hw:
 	of_clk_del_provider(node);
-unregister_cpumuxes:
-	mtk_clk_unregister_cpumuxes(cpu_muxes, ARRAY_SIZE(cpu_muxes), infra_clk_data);
-unregister_gates:
-	mtk_clk_unregister_gates(infra_clks, ARRAY_SIZE(infra_clks), infra_clk_data);
-	return r;
-}
-
-static int clk_mt8173_peri_probe(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-	void __iomem *base;
-
-	base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(base))
-		return PTR_ERR(base);
-
-	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
-	if (IS_ERR_OR_NULL(clk_data))
-		return -ENOMEM;
-
-	r = mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
-				   clk_data, &pdev->dev);
-	if (r)
-		goto free_clk_data;
-
-	r = mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
-					&mt8173_clk_lock, clk_data, &pdev->dev);
-	if (r)
-		goto unregister_gates;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_composites;
-
-	r = mtk_register_reset_controller(node, &clk_rst_desc[1]);
-	if (r)
-		goto unregister_clk_hw;
-
-	return 0;
-
-unregister_clk_hw:
-	of_clk_del_provider(node);
-unregister_composites:
-	mtk_clk_unregister_composites(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
-unregister_gates:
-	mtk_clk_unregister_gates(peri_gates, ARRAY_SIZE(peri_gates), clk_data);
-free_clk_data:
+	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
+	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
+	mtk_clk_unregister_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
 	mtk_free_clk_data(clk_data);
-	return r;
-}
-
-#define MT8173_PLL_FMAX		(3000UL * MHZ)
-
-#define CON0_MT8173_RST_BAR	BIT(24)
-
-#define PLL_B(_id, _name, _reg, _pwr_reg, _en_mask, _flags, _pcwbits,	\
-			_pd_reg, _pd_shift, _tuner_reg, _pcw_reg,	\
-			_pcw_shift, _div_table) {			\
-		.id = _id,						\
-		.name = _name,						\
-		.reg = _reg,						\
-		.pwr_reg = _pwr_reg,					\
-		.en_mask = _en_mask,					\
-		.flags = _flags,					\
-		.rst_bar_mask = CON0_MT8173_RST_BAR,			\
-		.fmax = MT8173_PLL_FMAX,				\
-		.pcwbits = _pcwbits,					\
-		.pd_reg = _pd_reg,					\
-		.pd_shift = _pd_shift,					\
-		.tuner_reg = _tuner_reg,				\
-		.pcw_reg = _pcw_reg,					\
-		.pcw_shift = _pcw_shift,				\
-		.div_table = _div_table,				\
-	}
-
-#define PLL(_id, _name, _reg, _pwr_reg, _en_mask, _flags, _pcwbits,	\
-			_pd_reg, _pd_shift, _tuner_reg, _pcw_reg,	\
-			_pcw_shift)					\
-		PLL_B(_id, _name, _reg, _pwr_reg, _en_mask, _flags, _pcwbits, \
-			_pd_reg, _pd_shift, _tuner_reg, _pcw_reg, _pcw_shift, \
-			NULL)
-
-static const struct mtk_pll_div_table mmpll_div_table[] = {
-	{ .div = 0, .freq = MT8173_PLL_FMAX },
-	{ .div = 1, .freq = 1000000000 },
-	{ .div = 2, .freq = 702000000 },
-	{ .div = 3, .freq = 253500000 },
-	{ .div = 4, .freq = 126750000 },
-	{ } /* sentinel */
-};
-
-static const struct mtk_pll_data plls[] = {
-	PLL(CLK_APMIXED_ARMCA15PLL, "armca15pll", 0x200, 0x20c, 0, PLL_AO,
-	    21, 0x204, 24, 0x0, 0x204, 0),
-	PLL(CLK_APMIXED_ARMCA7PLL, "armca7pll", 0x210, 0x21c, 0, PLL_AO,
-	    21, 0x214, 24, 0x0, 0x214, 0),
-	PLL(CLK_APMIXED_MAINPLL, "mainpll", 0x220, 0x22c, 0xf0000100, HAVE_RST_BAR, 21, 0x220, 4, 0x0, 0x224, 0),
-	PLL(CLK_APMIXED_UNIVPLL, "univpll", 0x230, 0x23c, 0xfe000000, HAVE_RST_BAR, 7, 0x230, 4, 0x0, 0x234, 14),
-	PLL_B(CLK_APMIXED_MMPLL, "mmpll", 0x240, 0x24c, 0, 0, 21, 0x244, 24, 0x0, 0x244, 0, mmpll_div_table),
-	PLL(CLK_APMIXED_MSDCPLL, "msdcpll", 0x250, 0x25c, 0, 0, 21, 0x250, 4, 0x0, 0x254, 0),
-	PLL(CLK_APMIXED_VENCPLL, "vencpll", 0x260, 0x26c, 0, 0, 21, 0x260, 4, 0x0, 0x264, 0),
-	PLL(CLK_APMIXED_TVDPLL, "tvdpll", 0x270, 0x27c, 0, 0, 21, 0x270, 4, 0x0, 0x274, 0),
-	PLL(CLK_APMIXED_MPLL, "mpll", 0x280, 0x28c, 0, 0, 21, 0x280, 4, 0x0, 0x284, 0),
-	PLL(CLK_APMIXED_VCODECPLL, "vcodecpll", 0x290, 0x29c, 0, 0, 21, 0x290, 4, 0x0, 0x294, 0),
-	PLL(CLK_APMIXED_APLL1, "apll1", 0x2a0, 0x2b0, 0, 0, 31, 0x2a0, 4, 0x2a4, 0x2a4, 0),
-	PLL(CLK_APMIXED_APLL2, "apll2", 0x2b4, 0x2c4, 0, 0, 31, 0x2b4, 4, 0x2b8, 0x2b8, 0),
-	PLL(CLK_APMIXED_LVDSPLL, "lvdspll", 0x2d0, 0x2dc, 0, 0, 21, 0x2d0, 4, 0x0, 0x2d4, 0),
-	PLL(CLK_APMIXED_MSDCPLL2, "msdcpll2", 0x2f0, 0x2fc, 0, 0, 21, 0x2f0, 4, 0x0, 0x2f4, 0),
-};
-
-static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *clk_data;
-	void __iomem *base;
-	struct clk_hw *hw;
-	int r;
-
-	base = of_iomap(node, 0);
-	if (!base)
-		return PTR_ERR(base);
-
-	clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
-	if (IS_ERR_OR_NULL(clk_data))
-		return -ENOMEM;
-
-	r = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
-	if (r)
-		goto free_clk_data;
-
-	hw = mtk_clk_register_ref2usb_tx("ref2usb_tx", "clk26m", base + REGOFF_REF2USB);
-	if (IS_ERR(hw)) {
-		r = PTR_ERR(hw);
-		dev_err(&pdev->dev, "Failed to register ref2usb_tx: %d\n", r);
-		goto unregister_plls;
-	}
-	clk_data->hws[CLK_APMIXED_REF2USB_TX] = hw;
-
-	hw = devm_clk_hw_register_divider(&pdev->dev, "hdmi_ref", "tvdpll_594m", 0,
-					  base + REGOFF_HDMI_REF, 16, 3,
-					  CLK_DIVIDER_POWER_OF_TWO, NULL);
-	clk_data->hws[CLK_APMIXED_HDMI_REF] = hw;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_ref2usb;
 
 	return 0;
-
-unregister_ref2usb:
-	mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
-unregister_plls:
-	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
-free_clk_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
-
-static const struct mtk_clk_desc img_desc = {
-	.clks = img_clks,
-	.num_clks = ARRAY_SIZE(img_clks),
-};
-
-static const struct mtk_clk_desc vdec_desc = {
-	.clks = vdec_clks,
-	.num_clks = ARRAY_SIZE(vdec_clks),
-};
-
-static const struct mtk_clk_desc venc_desc = {
-	.clks = venc_clks,
-	.num_clks = ARRAY_SIZE(venc_clks),
-};
-
-static const struct mtk_clk_desc venc_lt_desc = {
-	.clks = venclt_clks,
-	.num_clks = ARRAY_SIZE(venclt_clks),
-};
-
-static const struct of_device_id of_match_clk_mt8173_simple[] = {
-	{ .compatible = "mediatek,mt8173-imgsys", .data = &img_desc },
-	{ .compatible = "mediatek,mt8173-vdecsys", .data = &vdec_desc },
-	{ .compatible = "mediatek,mt8173-vencsys", .data = &venc_desc },
-	{ .compatible = "mediatek,mt8173-vencltsys", .data = &venc_lt_desc },
-	{ /* sentinel */ }
-};
-
-static struct platform_driver clk_mt8173_simple_drv = {
-	.driver = {
-		.name = "clk-mt8173-simple",
-		.of_match_table = of_match_clk_mt8173_simple,
-	},
-	.probe = mtk_clk_simple_probe,
-	.remove = mtk_clk_simple_remove,
-};
-
-static int clk_mt8173_probe(struct platform_device *pdev)
-{
-	int (*clk_probe)(struct platform_device *pdev);
-	int r;
-
-	clk_probe = of_device_get_match_data(&pdev->dev);
-	if (!clk_probe)
-		return -EINVAL;
-
-	r = clk_probe(pdev);
-	if (r)
-		dev_err(&pdev->dev, "could not register clock provider: %s: %d\n", pdev->name, r);
-
-	return r;
 }
 
-static const struct of_device_id of_match_clk_mt8173[] = {
-	{ .compatible = "mediatek,mt8173-apmixedsys", .data = clk_mt8173_apmixed_probe },
-	{ .compatible = "mediatek,mt8173-infracfg", .data = clk_mt8173_infra_probe },
-	{ .compatible = "mediatek,mt8173-topckgen", .data = clk_mt8173_topck_probe },
-	{ .compatible = "mediatek,mt8173-pericfg", .data = clk_mt8173_peri_probe },
-	{ /* sentinel */ }
-};
-
-static struct platform_driver clk_mt8173_drv = {
-	.probe = clk_mt8173_probe,
+static struct platform_driver clk_mt8173_topckgen_drv = {
 	.driver = {
-		.name = "clk-mt8173",
-		.of_match_table = of_match_clk_mt8173,
+		.name = "clk-mt8173-topckgen",
+		.of_match_table = of_match_clk_mt8173_topckgen,
 	},
+	.probe = clk_mt8173_topckgen_probe,
+	.remove = clk_mt8173_topckgen_remove,
 };
+module_platform_driver(clk_mt8173_topckgen_drv);
 
-static int __init clk_mt8173_init(void)
-{
-	int ret = platform_driver_register(&clk_mt8173_drv);
-
-	if (ret)
-		return ret;
-	return platform_driver_register(&clk_mt8173_simple_drv);
-}
-arch_initcall(clk_mt8173_init);
+MODULE_DESCRIPTION("MediaTek MT8173 topckgen clocks driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/clk/mediatek/clk-mt8173-vdecsys.c b/drivers/clk/mediatek/clk-mt8173-vdecsys.c
new file mode 100644
index 000000000000..5105b8e0969d
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8173-vdecsys.c
@@ -0,0 +1,57 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2014 MediaTek Inc.
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
+ */
+
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+#define GATE_VDEC(_id, _name, _parent, _regs)			\
+		GATE_MTK(_id, _name, _parent, _regs, 0,		\
+			 &mtk_clk_gate_ops_setclr_inv)
+
+static const struct mtk_gate_regs vdec0_cg_regs = {
+	.set_ofs = 0x0000,
+	.clr_ofs = 0x0004,
+	.sta_ofs = 0x0000,
+};
+
+static const struct mtk_gate_regs vdec1_cg_regs = {
+	.set_ofs = 0x0008,
+	.clr_ofs = 0x000c,
+	.sta_ofs = 0x0008,
+};
+
+static const struct mtk_gate vdec_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "vdec_dummy"),
+	GATE_VDEC(CLK_VDEC_CKEN, "vdec_cken", "vdec_sel", &vdec0_cg_regs),
+	GATE_VDEC(CLK_VDEC_LARB_CKEN, "vdec_larb_cken", "mm_sel", &vdec1_cg_regs),
+};
+
+static const struct mtk_clk_desc vdec_desc = {
+	.clks = vdec_clks,
+	.num_clks = ARRAY_SIZE(vdec_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8173_vdecsys[] = {
+	{ .compatible = "mediatek,mt8173-vdecsys", .data = &vdec_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8173_vdecsys_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8173-vdecsys",
+		.of_match_table = of_match_clk_mt8173_vdecsys,
+	},
+};
+module_platform_driver(clk_mt8173_vdecsys_drv);
+
+MODULE_DESCRIPTION("MediaTek MT8173 vdecsys clocks driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/clk/mediatek/clk-mt8173-vencsys.c b/drivers/clk/mediatek/clk-mt8173-vencsys.c
new file mode 100644
index 000000000000..ff4f1cb735de
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8173-vencsys.c
@@ -0,0 +1,64 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2014 MediaTek Inc.
+ * Copyright (c) 2022 Collabora Ltd.
+ * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
+ */
+
+#include <dt-bindings/clock/mt8173-clk.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs venc_cg_regs = {
+	.set_ofs = 0x4,
+	.clr_ofs = 0x8,
+	.sta_ofs = 0x0,
+};
+
+#define GATE_VENC(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &venc_cg_regs, _shift, &mtk_clk_gate_ops_setclr_inv)
+
+static const struct mtk_gate venc_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "venc_dummy"),
+	GATE_VENC(CLK_VENC_CKE0, "venc_cke0", "mm_sel", 0),
+	GATE_VENC(CLK_VENC_CKE1, "venc_cke1", "venc_sel", 4),
+	GATE_VENC(CLK_VENC_CKE2, "venc_cke2", "venc_sel", 8),
+	GATE_VENC(CLK_VENC_CKE3, "venc_cke3", "venc_sel", 12),
+};
+
+static const struct mtk_gate venclt_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "venclt_dummy"),
+	GATE_VENC(CLK_VENCLT_CKE0, "venclt_cke0", "mm_sel", 0),
+	GATE_VENC(CLK_VENCLT_CKE1, "venclt_cke1", "venclt_sel", 4),
+};
+
+static const struct mtk_clk_desc venc_desc = {
+	.clks = venc_clks,
+	.num_clks = ARRAY_SIZE(venc_clks),
+};
+
+static const struct mtk_clk_desc venc_lt_desc = {
+	.clks = venclt_clks,
+	.num_clks = ARRAY_SIZE(venclt_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8173_vencsys[] = {
+	{ .compatible = "mediatek,mt8173-vencsys", .data = &venc_desc },
+	{ .compatible = "mediatek,mt8173-vencltsys", .data = &venc_lt_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8173_vencsys_drv = {
+	.driver = {
+		.name = "clk-mt8173-vencsys",
+		.of_match_table = of_match_clk_mt8173_vencsys,
+	},
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+};
+module_platform_driver(clk_mt8173_vencsys_drv);
+
+MODULE_DESCRIPTION("MediaTek MT8173 vencsys clocks driver");
+MODULE_LICENSE("GPL");
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:55 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:55 +0100
Subject: [PATCH v2 19/23] clk: mediatek: clk-mt8192: Migrate topckgen to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-20-angelogioacchino.delregno@collabora.com>

Since the common simple probe function for MediaTek clock drivers can
now register the MFG MUX notifier, it's possible to migrate MT8192's
topckgen to that, allowing for some code size reduction.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8192.c | 80 +++++++------------------------
 1 file changed, 17 insertions(+), 63 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
index 702770326286..adde457e6277 100644
--- a/drivers/clk/mediatek/clk-mt8192.c
+++ b/drivers/clk/mediatek/clk-mt8192.c
@@ -1064,66 +1064,6 @@ static int clk_mt8192_reg_mfg_mux_notifier(struct device *dev, struct clk *clk)
 	return devm_mtk_clk_mux_notifier_register(dev, clk, mfg_mux_nb);
 }
 
-static int clk_mt8192_top_probe(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *top_clk_data;
-	int r;
-	void __iomem *base;
-
-	base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(base))
-		return PTR_ERR(base);
-
-	top_clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
-	if (!top_clk_data)
-		return;
-
-	r = mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data);
-	if (r)
-		return r;
-
-	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
-	if (r)
-		goto unregister_fixed_clks;
-
-	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
-				   &mt8192_clk_lock, top_clk_data, &pdev->dev);
-	if (r)
-		goto unregister_factors;
-
-	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-					&mt8192_clk_lock, top_clk_data, &pdev->dev);
-	if (r)
-		goto unregister_muxes;
-
-	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks),
-					    top_clk_data, &pdev->dev);
-	if (r)
-		goto unregister_top_composites;
-
-	r = clk_mt8192_reg_mfg_mux_notifier(&pdev->dev,
-					    top_clk_data->hws[CLK_TOP_MFG_PLL_SEL]->clk);
-	if (r)
-		goto unregister_gates;
-
-	return of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
-				      top_clk_data);
-
-unregister_gates:
-	mtk_clk_unregister_gates(top_clks, ARRAY_SIZE(top_clks), top_clk_data);
-unregister_top_composites:
-	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), top_clk_data);
-unregister_muxes:
-	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), top_clk_data);
-unregister_factors:
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
-unregister_fixed_clks:
-	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks),
-				      top_clk_data);
-	return r;
-}
-
 static int clk_mt8192_apmixed_probe(struct platform_device *pdev)
 {
 	struct clk_hw_onecell_data *clk_data;
@@ -1158,9 +1098,6 @@ static const struct of_device_id of_match_clk_mt8192[] = {
 	{
 		.compatible = "mediatek,mt8192-apmixedsys",
 		.data = clk_mt8192_apmixed_probe,
-	}, {
-		.compatible = "mediatek,mt8192-topckgen",
-		.data = clk_mt8192_top_probe,
 	}, {
 		/* sentinel */
 	}
@@ -1193,9 +1130,26 @@ static const struct mtk_clk_desc peri_desc = {
 	.num_clks = ARRAY_SIZE(peri_clks),
 };
 
+static const struct mtk_clk_desc topck_desc = {
+	.fixed_clks = top_fixed_clks,
+	.num_fixed_clks = ARRAY_SIZE(top_fixed_clks),
+	.factor_clks = top_divs,
+	.num_factor_clks = ARRAY_SIZE(top_divs),
+	.mux_clks = top_mtk_muxes,
+	.num_mux_clks = ARRAY_SIZE(top_mtk_muxes),
+	.composite_clks = top_muxes,
+	.num_composite_clks = ARRAY_SIZE(top_muxes),
+	.clks = top_clks,
+	.num_clks = ARRAY_SIZE(top_clks),
+	.clk_lock = &mt8192_clk_lock,
+	.clk_notifier_func = clk_mt8192_reg_mfg_mux_notifier,
+	.mfg_clk_idx = CLK_TOP_MFG_PLL_SEL,
+};
+
 static const struct of_device_id of_match_clk_mt8192_simple[] = {
 	{ .compatible = "mediatek,mt8192-infracfg", .data = &infra_desc },
 	{ .compatible = "mediatek,mt8192-pericfg", .data = &peri_desc },
+	{ .compatible = "mediatek,mt8192-topckgen", .data = &topck_desc },
 	{ /* sentinel */ }
 };
 
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:56 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:56 +0100
Subject: [PATCH v2 20/23] clk: mediatek: clk-mt8186-topckgen: Migrate to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-21-angelogioacchino.delregno@collabora.com>

As done with MT8192, migrate MT8186 topckgen away from a custom probe
function and use mtk_clk_simple_{probe, remove}().

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8186-topckgen.c | 101 ++++-----------------
 1 file changed, 19 insertions(+), 82 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8186-topckgen.c b/drivers/clk/mediatek/clk-mt8186-topckgen.c
index 63befb1f492d..0fba88adf9fa 100644
--- a/drivers/clk/mediatek/clk-mt8186-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt8186-topckgen.c
@@ -681,11 +681,6 @@ static struct mtk_composite top_muxes[] = {
 			0x0320, 4, 0x0334, 8, 0),
 };
 
-static const struct of_device_id of_match_clk_mt8186_topck[] = {
-	{ .compatible = "mediatek,mt8186-topckgen", },
-	{}
-};
-
 /* Register mux notifier for MFG mux */
 static int clk_mt8186_reg_mfg_mux_notifier(struct device *dev, struct clk *clk)
 {
@@ -708,86 +703,28 @@ static int clk_mt8186_reg_mfg_mux_notifier(struct device *dev, struct clk *clk)
 	return devm_mtk_clk_mux_notifier_register(dev, clk, mfg_mux_nb);
 }
 
-static int clk_mt8186_topck_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-	void __iomem *base;
-
-	clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
-	if (!clk_data)
-		return -ENOMEM;
-
-	base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(base)) {
-		r = PTR_ERR(base);
-		goto free_top_data;
-	}
-
-	r = mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks),
-					clk_data);
-	if (r)
-		goto free_top_data;
-
-	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	if (r)
-		goto unregister_fixed_clks;
-
-	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
-				   &mt8186_clk_lock, clk_data, &pdev->dev);
-	if (r)
-		goto unregister_factors;
-
-	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-					&mt8186_clk_lock, clk_data, &pdev->dev);
-	if (r)
-		goto unregister_muxes;
-
-	r = clk_mt8186_reg_mfg_mux_notifier(&pdev->dev,
-					    clk_data->hws[CLK_TOP_MFG]->clk);
-	if (r)
-		goto unregister_composite_muxes;
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		goto unregister_composite_muxes;
-
-	platform_set_drvdata(pdev, clk_data);
-
-	return r;
-
-unregister_composite_muxes:
-	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
-unregister_muxes:
-	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), clk_data);
-unregister_factors:
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-unregister_fixed_clks:
-	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), clk_data);
-free_top_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
-
-static int clk_mt8186_topck_remove(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
-	struct device_node *node = pdev->dev.of_node;
-
-	of_clk_del_provider(node);
-	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), clk_data);
-	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), clk_data);
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), clk_data);
-	mtk_free_clk_data(clk_data);
+static const struct mtk_clk_desc topck_desc = {
+	.fixed_clks = top_fixed_clks,
+	.num_fixed_clks = ARRAY_SIZE(top_fixed_clks),
+	.factor_clks = top_divs,
+	.num_factor_clks = ARRAY_SIZE(top_divs),
+	.mux_clks = top_mtk_muxes,
+	.num_mux_clks = ARRAY_SIZE(top_mtk_muxes),
+	.composite_clks = top_muxes,
+	.num_composite_clks = ARRAY_SIZE(top_muxes),
+	.clk_lock = &mt8186_clk_lock,
+	.clk_notifier_func = clk_mt8186_reg_mfg_mux_notifier,
+	.mfg_clk_idx = CLK_TOP_MFG,
+};
 
-	return 0;
-}
+static const struct of_device_id of_match_clk_mt8186_topck[] = {
+	{ .compatible = "mediatek,mt8186-topckgen", .data = &topck_desc },
+	{}
+};
 
 static struct platform_driver clk_mt8186_topck_drv = {
-	.probe = clk_mt8186_topck_probe,
-	.remove = clk_mt8186_topck_remove,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt8186-topck",
 		.of_match_table = of_match_clk_mt8186_topck,
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:57 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:57 +0100
Subject: [PATCH v2 21/23] clk: mediatek: clk-mt6795-topckgen: Migrate to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-22-angelogioacchino.delregno@collabora.com>

Migrate away from custom probe functions and use the commonized
mtk_clk_simple_{probe, remove}().

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt6795-topckgen.c | 84 ++++------------------
 1 file changed, 14 insertions(+), 70 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt6795-topckgen.c b/drivers/clk/mediatek/clk-mt6795-topckgen.c
index 19440fe5460d..e80fa588e309 100644
--- a/drivers/clk/mediatek/clk-mt6795-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt6795-topckgen.c
@@ -523,86 +523,30 @@ static struct mtk_composite top_aud_divs[] = {
 	DIV_GATE(CLK_TOP_APLL2_DIV5, "apll2_div5", "apll2_div4", 0x12c, 21, 0x12c, 4, 4),
 };
 
+static const struct mtk_clk_desc topck_desc = {
+	.fixed_clks = fixed_clks,
+	.num_fixed_clks = ARRAY_SIZE(fixed_clks),
+	.factor_clks = top_divs,
+	.num_factor_clks = ARRAY_SIZE(top_divs),
+	.mux_clks = top_muxes,
+	.num_mux_clks = ARRAY_SIZE(top_muxes),
+	.composite_clks = top_aud_divs,
+	.num_composite_clks = ARRAY_SIZE(top_aud_divs),
+	.clk_lock = &mt6795_top_clk_lock,
+};
 
 static const struct of_device_id of_match_clk_mt6795_topckgen[] = {
-	{ .compatible = "mediatek,mt6795-topckgen" },
+	{ .compatible = "mediatek,mt6795-topckgen", .data = &topck_desc },
 	{ /* sentinel */ }
 };
 
-static int clk_mt6795_topckgen_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	void __iomem *base;
-	int ret;
-
-	base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(base))
-		return PTR_ERR(base);
-
-	clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
-	if (!clk_data)
-		return -ENOMEM;
-
-	ret = mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
-	if (ret)
-		goto free_clk_data;
-
-	ret = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	if (ret)
-		goto unregister_fixed_clks;
-
-	ret = mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
-				     &mt6795_top_clk_lock, clk_data, &pdev->dev);
-	if (ret)
-		goto unregister_factors;
-
-	ret = mtk_clk_register_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs), base,
-					  &mt6795_top_clk_lock, clk_data, &pdev->dev);
-	if (ret)
-		goto unregister_muxes;
-
-	ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (ret)
-		goto unregister_composites;
-
-	return 0;
-
-unregister_composites:
-	mtk_clk_unregister_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs), clk_data);
-unregister_muxes:
-	mtk_clk_unregister_muxes(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
-unregister_factors:
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-unregister_fixed_clks:
-	mtk_clk_unregister_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
-free_clk_data:
-	mtk_free_clk_data(clk_data);
-	return ret;
-}
-
-static int clk_mt6795_topckgen_remove(struct platform_device *pdev)
-{
-	struct device_node *node = pdev->dev.of_node;
-	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
-
-	of_clk_del_provider(node);
-	mtk_clk_unregister_composites(top_aud_divs, ARRAY_SIZE(top_aud_divs), clk_data);
-	mtk_clk_unregister_muxes(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
-	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	mtk_clk_unregister_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
-	mtk_free_clk_data(clk_data);
-
-	return 0;
-}
-
 static struct platform_driver clk_mt6795_topckgen_drv = {
 	.driver = {
 		.name = "clk-mt6795-topckgen",
 		.of_match_table = of_match_clk_mt6795_topckgen,
 	},
-	.probe = clk_mt6795_topckgen_probe,
-	.remove = clk_mt6795_topckgen_remove,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 };
 module_platform_driver(clk_mt6795_topckgen_drv);
 
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:58 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:58 +0100
Subject: [PATCH v2 22/23] clk: mediatek: clk-mt7986-topckgen: Properly keep some clocks enabled
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-23-angelogioacchino.delregno@collabora.com>

Instead of calling clk_prepare_enable() on a bunch of clocks at probe
time, set the CLK_IS_CRITICAL flag to the same as these are required
to be always on, and this is the right way of achieving that.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt7986-topckgen.c | 46 +++++++++++-----------
 1 file changed, 24 insertions(+), 22 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt7986-topckgen.c b/drivers/clk/mediatek/clk-mt7986-topckgen.c
index d7df9585787f..bf3088e6d9e3 100644
--- a/drivers/clk/mediatek/clk-mt7986-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt7986-topckgen.c
@@ -202,16 +202,23 @@ static const struct mtk_mux top_muxes[] = {
 	MUX_GATE_CLR_SET_UPD(CLK_TOP_F_26M_ADC_SEL, "f_26m_adc_sel",
 			     f_26m_adc_parents, 0x020, 0x024, 0x028, 16, 1, 23,
 			     0x1C0, 10),
-	MUX_GATE_CLR_SET_UPD(CLK_TOP_DRAMC_SEL, "dramc_sel", f_26m_adc_parents,
-			     0x020, 0x024, 0x028, 24, 1, 31, 0x1C0, 11),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_DRAMC_SEL, "dramc_sel",
+				   f_26m_adc_parents, 0x020, 0x024, 0x028,
+				   24, 1, 31, 0x1C0, 11,
+				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 	/* CLK_CFG_3 */
-	MUX_GATE_CLR_SET_UPD(CLK_TOP_DRAMC_MD32_SEL, "dramc_md32_sel",
-			     dramc_md32_parents, 0x030, 0x034, 0x038, 0, 1, 7,
-			     0x1C0, 12),
-	MUX_GATE_CLR_SET_UPD(CLK_TOP_SYSAXI_SEL, "sysaxi_sel", sysaxi_parents,
-			     0x030, 0x034, 0x038, 8, 2, 15, 0x1C0, 13),
-	MUX_GATE_CLR_SET_UPD(CLK_TOP_SYSAPB_SEL, "sysapb_sel", sysapb_parents,
-			     0x030, 0x034, 0x038, 16, 2, 23, 0x1C0, 14),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_DRAMC_MD32_SEL, "dramc_md32_sel",
+				   dramc_md32_parents, 0x030, 0x034, 0x038,
+				   0, 1, 7, 0x1C0, 12,
+				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SYSAXI_SEL, "sysaxi_sel",
+				   sysaxi_parents, 0x030, 0x034, 0x038,
+				   8, 2, 15, 0x1C0, 13,
+				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SYSAPB_SEL, "sysapb_sel",
+				   sysapb_parents, 0x030, 0x034, 0x038,
+				   16, 2, 23, 0x1C0, 14,
+				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 	MUX_GATE_CLR_SET_UPD(CLK_TOP_ARM_DB_MAIN_SEL, "arm_db_main_sel",
 			     arm_db_main_parents, 0x030, 0x034, 0x038, 24, 1,
 			     31, 0x1C0, 15),
@@ -234,9 +241,10 @@ static const struct mtk_mux top_muxes[] = {
 	MUX_GATE_CLR_SET_UPD(CLK_TOP_SGM_325M_SEL, "sgm_325m_sel",
 			     sgm_325m_parents, 0x050, 0x054, 0x058, 8, 1, 15,
 			     0x1C0, 21),
-	MUX_GATE_CLR_SET_UPD(CLK_TOP_SGM_REG_SEL, "sgm_reg_sel",
-			     sgm_reg_parents, 0x050, 0x054, 0x058, 16, 1, 23,
-			     0x1C0, 22),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SGM_REG_SEL, "sgm_reg_sel",
+				   sgm_reg_parents, 0x050, 0x054, 0x058,
+				   16, 1, 23, 0x1C0, 22,
+				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 	MUX_GATE_CLR_SET_UPD(CLK_TOP_A1SYS_SEL, "a1sys_sel", a1sys_parents,
 			     0x050, 0x054, 0x058, 24, 1, 31, 0x1C0, 23),
 	/* CLK_CFG_6 */
@@ -252,9 +260,10 @@ static const struct mtk_mux top_muxes[] = {
 			     f_26m_adc_parents, 0x060, 0x064, 0x068, 24, 1, 31,
 			     0x1C0, 27),
 	/* CLK_CFG_7 */
-	MUX_GATE_CLR_SET_UPD(CLK_TOP_F26M_SEL, "csw_f26m_sel",
-			     f_26m_adc_parents, 0x070, 0x074, 0x078, 0, 1, 7,
-			     0x1C0, 28),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_F26M_SEL, "csw_f26m_sel",
+				   f_26m_adc_parents, 0x070, 0x074, 0x078,
+				   0, 1, 7, 0x1C0, 28,
+				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
 	MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_L_SEL, "aud_l_sel", aud_l_parents,
 			     0x070, 0x074, 0x078, 8, 2, 15, 0x1C0, 29),
 	MUX_GATE_CLR_SET_UPD(CLK_TOP_A_TUNER_SEL, "a_tuner_sel",
@@ -306,13 +315,6 @@ static int clk_mt7986_topckgen_probe(struct platform_device *pdev)
 	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
 			       &mt7986_clk_lock, clk_data, &pdev->dev);
 
-	clk_prepare_enable(clk_data->hws[CLK_TOP_SYSAXI_SEL]->clk);
-	clk_prepare_enable(clk_data->hws[CLK_TOP_SYSAPB_SEL]->clk);
-	clk_prepare_enable(clk_data->hws[CLK_TOP_DRAMC_SEL]->clk);
-	clk_prepare_enable(clk_data->hws[CLK_TOP_DRAMC_MD32_SEL]->clk);
-	clk_prepare_enable(clk_data->hws[CLK_TOP_F26M_SEL]->clk);
-	clk_prepare_enable(clk_data->hws[CLK_TOP_SGM_REG_SEL]->clk);
-
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 
 	if (r) {
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:59 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:59 +0100
Subject: [PATCH v2 23/23] clk: mediatek: clk-mt7986-topckgen: Migrate to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-24-angelogioacchino.delregno@collabora.com>

There are no more non-common calls in clk_mt7986_topckgen_probe():
migrate this driver to mtk_clk_simple_probe().

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt7986-topckgen.c | 52 +++++-----------------
 1 file changed, 12 insertions(+), 40 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt7986-topckgen.c b/drivers/clk/mediatek/clk-mt7986-topckgen.c
index bf3088e6d9e3..286418aa00a0 100644
--- a/drivers/clk/mediatek/clk-mt7986-topckgen.c
+++ b/drivers/clk/mediatek/clk-mt7986-topckgen.c
@@ -290,52 +290,24 @@ static const struct mtk_mux top_muxes[] = {
 			     0x1C4, 5),
 };
 
-static int clk_mt7986_topckgen_probe(struct platform_device *pdev)
-{
-	struct clk_hw_onecell_data *clk_data;
-	struct device_node *node = pdev->dev.of_node;
-	int r;
-	void __iomem *base;
-	int nr = ARRAY_SIZE(top_fixed_clks) + ARRAY_SIZE(top_divs) +
-		 ARRAY_SIZE(top_muxes);
-
-	base = of_iomap(node, 0);
-	if (!base) {
-		pr_err("%s(): ioremap failed\n", __func__);
-		return -ENOMEM;
-	}
-
-	clk_data = mtk_alloc_clk_data(nr);
-	if (!clk_data)
-		return -ENOMEM;
-
-	mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks),
-				    clk_data);
-	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
-			       &mt7986_clk_lock, clk_data, &pdev->dev);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-
-	if (r) {
-		pr_err("%s(): could not register clock provider: %d\n",
-		       __func__, r);
-		goto free_topckgen_data;
-	}
-	return r;
-
-free_topckgen_data:
-	mtk_free_clk_data(clk_data);
-	return r;
-}
+static const struct mtk_clk_desc topck_desc = {
+	.fixed_clks = top_fixed_clks,
+	.num_fixed_clks = ARRAY_SIZE(top_fixed_clks),
+	.factor_clks = top_divs,
+	.num_factor_clks = ARRAY_SIZE(top_divs),
+	.mux_clks = top_muxes,
+	.num_mux_clks = ARRAY_SIZE(top_muxes),
+	.clk_lock = &mt7986_clk_lock,
+};
 
 static const struct of_device_id of_match_clk_mt7986_topckgen[] = {
-	{ .compatible = "mediatek,mt7986-topckgen", },
+	{ .compatible = "mediatek,mt7986-topckgen", .data = &topck_desc },
 	{}
 };
 
 static struct platform_driver clk_mt7986_topckgen_drv = {
-	.probe = clk_mt7986_topckgen_probe,
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
 	.driver = {
 		.name = "clk-mt7986-topckgen",
 		.of_match_table = of_match_clk_mt7986_topckgen,
-- 
2.39.0



From angelogioacchino.delregno at collabora.com  Fri Dec 23 01:42:44 2022
From: angelogioacchino.delregno at collabora.com (AngeloGioacchino Del Regno)
Date: Fri, 23 Dec 2022 10:42:44 +0100
Subject: [PATCH v2 08/23] clk: mediatek: mt8173: Migrate to platform driver and common probe
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221223094259.87373-9-angelogioacchino.delregno@collabora.com>

This driver is using CLK_OF_DECLARE() for all clocks: while this
definitely works, it's not preferred as this makes it impossible
to compile non boot critical clock drivers as modules and to take
advantage of clock controller Runtime PM.

As a preparation for a larger cleanup, migrate all of the clock
controller drivers for MT8173 to platform_driver and use the
common mtk_clk_simple_probe() where possible.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 drivers/clk/mediatek/clk-mt8173.c | 478 +++++++++++++++++-------------
 1 file changed, 273 insertions(+), 205 deletions(-)

diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173.c
index 617f68274004..70cdc0719658 100644
--- a/drivers/clk/mediatek/clk-mt8173.c
+++ b/drivers/clk/mediatek/clk-mt8173.c
@@ -7,6 +7,8 @@
 #include <linux/clk.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
 
 #include "clk-cpumux.h"
 #include "clk-gate.h"
@@ -15,6 +17,9 @@
 
 #include <dt-bindings/clock/mt8173-clk.h>
 
+#define REGOFF_REF2USB	0x8
+#define REGOFF_HDMI_REF	0x40
+
 /*
  * For some clocks, we don't care what their actual rates are. And these
  * clocks may change their rate on different products or different scenarios.
@@ -24,7 +29,7 @@
 
 static DEFINE_SPINLOCK(mt8173_clk_lock);
 
-static const struct mtk_fixed_clk fixed_clks[] __initconst = {
+static const struct mtk_fixed_clk fixed_clks[] = {
 	FIXED_CLK(CLK_TOP_CLKPH_MCK_O, "clkph_mck_o", "clk26m", DUMMY_RATE),
 	FIXED_CLK(CLK_TOP_USB_SYSPLL_125M, "usb_syspll_125m", "clk26m", 125 * MHZ),
 	FIXED_CLK(CLK_TOP_DSI0_DIG, "dsi0_dig", "clk26m", DUMMY_RATE),
@@ -33,7 +38,7 @@ static const struct mtk_fixed_clk fixed_clks[] __initconst = {
 	FIXED_CLK(CLK_TOP_LVDS_CTS, "lvds_cts", "lvdspll", DUMMY_RATE),
 };
 
-static const struct mtk_fixed_factor top_divs[] __initconst = {
+static const struct mtk_fixed_factor top_divs[] = {
 	FACTOR(CLK_TOP_ARMCA7PLL_754M, "armca7pll_754m", "armca7pll", 1, 2),
 	FACTOR(CLK_TOP_ARMCA7PLL_502M, "armca7pll_502m", "armca7pll", 1, 3),
 
@@ -129,7 +134,7 @@ static const struct mtk_fixed_factor top_divs[] __initconst = {
 	FACTOR(CLK_TOP_VENCPLL_D4, "vencpll_d4", "vencpll", 1, 4),
 };
 
-static const char * const axi_parents[] __initconst = {
+static const char * const axi_parents[] = {
 	"clk26m",
 	"syspll1_d2",
 	"syspll_d5",
@@ -140,17 +145,17 @@ static const char * const axi_parents[] __initconst = {
 	"dmpll_d4"
 };
 
-static const char * const mem_parents[] __initconst = {
+static const char * const mem_parents[] = {
 	"clk26m",
 	"dmpll_ck"
 };
 
-static const char * const ddrphycfg_parents[] __initconst = {
+static const char * const ddrphycfg_parents[] = {
 	"clk26m",
 	"syspll1_d8"
 };
 
-static const char * const mm_parents[] __initconst = {
+static const char * const mm_parents[] = {
 	"clk26m",
 	"vencpll_d2",
 	"main_h364m",
@@ -162,14 +167,14 @@ static const char * const mm_parents[] __initconst = {
 	"dmpll_d2"
 };
 
-static const char * const pwm_parents[] __initconst = {
+static const char * const pwm_parents[] = {
 	"clk26m",
 	"univpll2_d4",
 	"univpll3_d2",
 	"univpll1_d4"
 };
 
-static const char * const vdec_parents[] __initconst = {
+static const char * const vdec_parents[] = {
 	"clk26m",
 	"vcodecpll_ck",
 	"tvdpll_445p5m",
@@ -182,7 +187,7 @@ static const char * const vdec_parents[] __initconst = {
 	"dmpll_d4"
 };
 
-static const char * const venc_parents[] __initconst = {
+static const char * const venc_parents[] = {
 	"clk26m",
 	"vcodecpll_ck",
 	"tvdpll_445p5m",
@@ -195,7 +200,7 @@ static const char * const venc_parents[] __initconst = {
 	"dmpll_d4"
 };
 
-static const char * const mfg_parents[] __initconst = {
+static const char * const mfg_parents[] = {
 	"clk26m",
 	"mmpll_ck",
 	"dmpll_ck",
@@ -214,7 +219,7 @@ static const char * const mfg_parents[] __initconst = {
 	"univpll2_d2"
 };
 
-static const char * const camtg_parents[] __initconst = {
+static const char * const camtg_parents[] = {
 	"clk26m",
 	"univpll_d26",
 	"univpll2_d2",
@@ -223,12 +228,12 @@ static const char * const camtg_parents[] __initconst = {
 	"univpll1_d4"
 };
 
-static const char * const uart_parents[] __initconst = {
+static const char * const uart_parents[] = {
 	"clk26m",
 	"univpll2_d8"
 };
 
-static const char * const spi_parents[] __initconst = {
+static const char * const spi_parents[] = {
 	"clk26m",
 	"syspll3_d2",
 	"syspll1_d4",
@@ -238,20 +243,20 @@ static const char * const spi_parents[] __initconst = {
 	"univpll1_d8"
 };
 
-static const char * const usb20_parents[] __initconst = {
+static const char * const usb20_parents[] = {
 	"clk26m",
 	"univpll1_d8",
 	"univpll3_d4"
 };
 
-static const char * const usb30_parents[] __initconst = {
+static const char * const usb30_parents[] = {
 	"clk26m",
 	"univpll3_d2",
 	"usb_syspll_125m",
 	"univpll2_d4"
 };
 
-static const char * const msdc50_0_h_parents[] __initconst = {
+static const char * const msdc50_0_h_parents[] = {
 	"clk26m",
 	"syspll1_d2",
 	"syspll2_d2",
@@ -260,7 +265,7 @@ static const char * const msdc50_0_h_parents[] __initconst = {
 	"univpll1_d4"
 };
 
-static const char * const msdc50_0_parents[] __initconst = {
+static const char * const msdc50_0_parents[] = {
 	"clk26m",
 	"msdcpll_ck",
 	"msdcpll_d2",
@@ -278,7 +283,7 @@ static const char * const msdc50_0_parents[] __initconst = {
 	"msdcpll2_d4"
 };
 
-static const char * const msdc30_1_parents[] __initconst = {
+static const char * const msdc30_1_parents[] = {
 	"clk26m",
 	"univpll2_d2",
 	"msdcpll_d4",
@@ -289,7 +294,7 @@ static const char * const msdc30_1_parents[] __initconst = {
 	"vencpll_d4"
 };
 
-static const char * const msdc30_2_parents[] __initconst = {
+static const char * const msdc30_2_parents[] = {
 	"clk26m",
 	"univpll2_d2",
 	"msdcpll_d4",
@@ -300,7 +305,7 @@ static const char * const msdc30_2_parents[] __initconst = {
 	"vencpll_d2"
 };
 
-static const char * const msdc30_3_parents[] __initconst = {
+static const char * const msdc30_3_parents[] = {
 	"clk26m",
 	"msdcpll2_ck",
 	"msdcpll2_d2",
@@ -317,14 +322,14 @@ static const char * const msdc30_3_parents[] __initconst = {
 	"msdcpll_d4"
 };
 
-static const char * const audio_parents[] __initconst = {
+static const char * const audio_parents[] = {
 	"clk26m",
 	"syspll3_d4",
 	"syspll4_d4",
 	"syspll1_d16"
 };
 
-static const char * const aud_intbus_parents[] __initconst = {
+static const char * const aud_intbus_parents[] = {
 	"clk26m",
 	"syspll1_d4",
 	"syspll4_d2",
@@ -334,7 +339,7 @@ static const char * const aud_intbus_parents[] __initconst = {
 	"dmpll_d8"
 };
 
-static const char * const pmicspi_parents[] __initconst = {
+static const char * const pmicspi_parents[] = {
 	"clk26m",
 	"syspll1_d8",
 	"syspll3_d4",
@@ -345,7 +350,7 @@ static const char * const pmicspi_parents[] __initconst = {
 	"dmpll_d16"
 };
 
-static const char * const scp_parents[] __initconst = {
+static const char * const scp_parents[] = {
 	"clk26m",
 	"syspll1_d2",
 	"univpll_d5",
@@ -354,14 +359,14 @@ static const char * const scp_parents[] __initconst = {
 	"dmpll_d4"
 };
 
-static const char * const atb_parents[] __initconst = {
+static const char * const atb_parents[] = {
 	"clk26m",
 	"syspll1_d2",
 	"univpll_d5",
 	"dmpll_d2"
 };
 
-static const char * const venc_lt_parents[] __initconst = {
+static const char * const venc_lt_parents[] = {
 	"clk26m",
 	"univpll_d3",
 	"vcodecpll_ck",
@@ -376,7 +381,7 @@ static const char * const venc_lt_parents[] __initconst = {
 	"dmpll_ck"
 };
 
-static const char * const dpi0_parents[] __initconst = {
+static const char * const dpi0_parents[] = {
 	"clk26m",
 	"tvdpll_d2",
 	"tvdpll_d4",
@@ -386,13 +391,13 @@ static const char * const dpi0_parents[] __initconst = {
 	"tvdpll_d16"
 };
 
-static const char * const irda_parents[] __initconst = {
+static const char * const irda_parents[] = {
 	"clk26m",
 	"univpll2_d4",
 	"syspll2_d4"
 };
 
-static const char * const cci400_parents[] __initconst = {
+static const char * const cci400_parents[] = {
 	"clk26m",
 	"vencpll_ck",
 	"armca7pll_754m",
@@ -403,41 +408,41 @@ static const char * const cci400_parents[] __initconst = {
 	"dmpll_ck"
 };
 
-static const char * const aud_1_parents[] __initconst = {
+static const char * const aud_1_parents[] = {
 	"clk26m",
 	"apll1_ck",
 	"univpll2_d4",
 	"univpll2_d8"
 };
 
-static const char * const aud_2_parents[] __initconst = {
+static const char * const aud_2_parents[] = {
 	"clk26m",
 	"apll2_ck",
 	"univpll2_d4",
 	"univpll2_d8"
 };
 
-static const char * const mem_mfg_in_parents[] __initconst = {
+static const char * const mem_mfg_in_parents[] = {
 	"clk26m",
 	"mmpll_ck",
 	"dmpll_ck",
 	"clk26m"
 };
 
-static const char * const axi_mfg_in_parents[] __initconst = {
+static const char * const axi_mfg_in_parents[] = {
 	"clk26m",
 	"axi_sel",
 	"dmpll_d2"
 };
 
-static const char * const scam_parents[] __initconst = {
+static const char * const scam_parents[] = {
 	"clk26m",
 	"syspll3_d2",
 	"univpll2_d4",
 	"dmpll_d4"
 };
 
-static const char * const spinfi_ifr_parents[] __initconst = {
+static const char * const spinfi_ifr_parents[] = {
 	"clk26m",
 	"univpll2_d8",
 	"univpll3_d4",
@@ -448,14 +453,14 @@ static const char * const spinfi_ifr_parents[] __initconst = {
 	"univpll1_d4"
 };
 
-static const char * const hdmi_parents[] __initconst = {
+static const char * const hdmi_parents[] = {
 	"clk26m",
 	"hdmitx_dig_cts",
 	"hdmitxpll_d2",
 	"hdmitxpll_d3"
 };
 
-static const char * const dpilvds_parents[] __initconst = {
+static const char * const dpilvds_parents[] = {
 	"clk26m",
 	"lvdspll",
 	"lvdspll_d2",
@@ -464,7 +469,7 @@ static const char * const dpilvds_parents[] __initconst = {
 	"fpc_ck"
 };
 
-static const char * const msdc50_2_h_parents[] __initconst = {
+static const char * const msdc50_2_h_parents[] = {
 	"clk26m",
 	"syspll1_d2",
 	"syspll2_d2",
@@ -473,72 +478,72 @@ static const char * const msdc50_2_h_parents[] __initconst = {
 	"univpll1_d4"
 };
 
-static const char * const hdcp_parents[] __initconst = {
+static const char * const hdcp_parents[] = {
 	"clk26m",
 	"syspll4_d2",
 	"syspll3_d4",
 	"univpll2_d4"
 };
 
-static const char * const hdcp_24m_parents[] __initconst = {
+static const char * const hdcp_24m_parents[] = {
 	"clk26m",
 	"univpll_d26",
 	"univpll_d52",
 	"univpll2_d8"
 };
 
-static const char * const rtc_parents[] __initconst = {
+static const char * const rtc_parents[] = {
 	"clkrtc_int",
 	"clkrtc_ext",
 	"clk26m",
 	"univpll3_d8"
 };
 
-static const char * const i2s0_m_ck_parents[] __initconst = {
+static const char * const i2s0_m_ck_parents[] = {
 	"apll1_div1",
 	"apll2_div1"
 };
 
-static const char * const i2s1_m_ck_parents[] __initconst = {
+static const char * const i2s1_m_ck_parents[] = {
 	"apll1_div2",
 	"apll2_div2"
 };
 
-static const char * const i2s2_m_ck_parents[] __initconst = {
+static const char * const i2s2_m_ck_parents[] = {
 	"apll1_div3",
 	"apll2_div3"
 };
 
-static const char * const i2s3_m_ck_parents[] __initconst = {
+static const char * const i2s3_m_ck_parents[] = {
 	"apll1_div4",
 	"apll2_div4"
 };
 
-static const char * const i2s3_b_ck_parents[] __initconst = {
+static const char * const i2s3_b_ck_parents[] = {
 	"apll1_div5",
 	"apll2_div5"
 };
 
-static const char * const ca53_parents[] __initconst = {
+static const char * const ca53_parents[] = {
 	"clk26m",
 	"armca7pll",
 	"mainpll",
 	"univpll"
 };
 
-static const char * const ca72_parents[] __initconst = {
+static const char * const ca72_parents[] = {
 	"clk26m",
 	"armca15pll",
 	"mainpll",
 	"univpll"
 };
 
-static const struct mtk_composite cpu_muxes[] __initconst = {
+static const struct mtk_composite cpu_muxes[] = {
 	MUX(CLK_INFRA_CA53SEL, "infra_ca53_sel", ca53_parents, 0x0000, 0, 2),
 	MUX(CLK_INFRA_CA72SEL, "infra_ca72_sel", ca72_parents, 0x0000, 2, 2),
 };
 
-static const struct mtk_composite top_muxes[] __initconst = {
+static const struct mtk_composite top_muxes[] = {
 	/* CLK_CFG_0 */
 	MUX(CLK_TOP_AXI_SEL, "axi_sel", axi_parents, 0x0040, 0, 3),
 	MUX(CLK_TOP_MEM_SEL, "mem_sel", mem_parents, 0x0040, 8, 1),
@@ -614,7 +619,7 @@ static const struct mtk_composite top_muxes[] __initconst = {
 	MUX(CLK_TOP_I2S3_B_SEL, "i2s3_b_ck_sel", i2s3_b_ck_parents, 0x120, 8, 1),
 };
 
-static const struct mtk_gate_regs infra_cg_regs __initconst = {
+static const struct mtk_gate_regs infra_cg_regs = {
 	.set_ofs = 0x0040,
 	.clr_ofs = 0x0044,
 	.sta_ofs = 0x0048,
@@ -629,7 +634,7 @@ static const struct mtk_gate_regs infra_cg_regs __initconst = {
 		.ops = &mtk_clk_gate_ops_setclr,		\
 	}
 
-static const struct mtk_gate infra_clks[] __initconst = {
+static const struct mtk_gate infra_clks[] = {
 	GATE_ICG(CLK_INFRA_DBGCLK, "infra_dbgclk", "axi_sel", 0),
 	GATE_ICG(CLK_INFRA_SMI, "infra_smi", "mm_sel", 1),
 	GATE_ICG(CLK_INFRA_AUDIO, "infra_audio", "aud_intbus_sel", 5),
@@ -643,17 +648,17 @@ static const struct mtk_gate infra_clks[] __initconst = {
 	GATE_ICG(CLK_INFRA_PMICWRAP, "infra_pmicwrap", "axi_sel", 23),
 };
 
-static const struct mtk_fixed_factor infra_divs[] __initconst = {
+static const struct mtk_fixed_factor infra_early_divs[] = {
 	FACTOR(CLK_INFRA_CLK_13M, "clk13m", "clk26m", 1, 2),
 };
 
-static const struct mtk_gate_regs peri0_cg_regs __initconst = {
+static const struct mtk_gate_regs peri0_cg_regs = {
 	.set_ofs = 0x0008,
 	.clr_ofs = 0x0010,
 	.sta_ofs = 0x0018,
 };
 
-static const struct mtk_gate_regs peri1_cg_regs __initconst = {
+static const struct mtk_gate_regs peri1_cg_regs = {
 	.set_ofs = 0x000c,
 	.clr_ofs = 0x0014,
 	.sta_ofs = 0x001c,
@@ -677,7 +682,7 @@ static const struct mtk_gate_regs peri1_cg_regs __initconst = {
 		.ops = &mtk_clk_gate_ops_setclr,		\
 	}
 
-static const struct mtk_gate peri_gates[] __initconst = {
+static const struct mtk_gate peri_gates[] = {
 	/* PERI0 */
 	GATE_PERI0(CLK_PERI_NFI, "peri_nfi", "axi_sel", 0),
 	GATE_PERI0(CLK_PERI_THERM, "peri_therm", "axi_sel", 1),
@@ -717,19 +722,19 @@ static const struct mtk_gate peri_gates[] __initconst = {
 	GATE_PERI1(CLK_PERI_I2C6, "peri_i2c6", "axi_sel", 2),
 };
 
-static const char * const uart_ck_sel_parents[] __initconst = {
+static const char * const uart_ck_sel_parents[] = {
 	"clk26m",
 	"uart_sel",
 };
 
-static const struct mtk_composite peri_clks[] __initconst = {
+static const struct mtk_composite peri_clks[] = {
 	MUX(CLK_PERI_UART0_SEL, "uart0_ck_sel", uart_ck_sel_parents, 0x40c, 0, 1),
 	MUX(CLK_PERI_UART1_SEL, "uart1_ck_sel", uart_ck_sel_parents, 0x40c, 1, 1),
 	MUX(CLK_PERI_UART2_SEL, "uart2_ck_sel", uart_ck_sel_parents, 0x40c, 2, 1),
 	MUX(CLK_PERI_UART3_SEL, "uart3_ck_sel", uart_ck_sel_parents, 0x40c, 3, 1),
 };
 
-static const struct mtk_gate_regs cg_regs_4_8_0 __initconst = {
+static const struct mtk_gate_regs cg_regs_4_8_0 = {
 	.set_ofs = 0x0004,
 	.clr_ofs = 0x0008,
 	.sta_ofs = 0x0000,
@@ -744,7 +749,8 @@ static const struct mtk_gate_regs cg_regs_4_8_0 __initconst = {
 		.ops = &mtk_clk_gate_ops_setclr,		\
 	}
 
-static const struct mtk_gate img_clks[] __initconst = {
+static const struct mtk_gate img_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "img_dummy"),
 	GATE_IMG(CLK_IMG_LARB2_SMI, "img_larb2_smi", "mm_sel", 0),
 	GATE_IMG(CLK_IMG_CAM_SMI, "img_cam_smi", "mm_sel", 5),
 	GATE_IMG(CLK_IMG_CAM_CAM, "img_cam_cam", "mm_sel", 6),
@@ -754,13 +760,13 @@ static const struct mtk_gate img_clks[] __initconst = {
 	GATE_IMG(CLK_IMG_FD, "img_fd", "mm_sel", 11),
 };
 
-static const struct mtk_gate_regs vdec0_cg_regs __initconst = {
+static const struct mtk_gate_regs vdec0_cg_regs = {
 	.set_ofs = 0x0000,
 	.clr_ofs = 0x0004,
 	.sta_ofs = 0x0000,
 };
 
-static const struct mtk_gate_regs vdec1_cg_regs __initconst = {
+static const struct mtk_gate_regs vdec1_cg_regs = {
 	.set_ofs = 0x0008,
 	.clr_ofs = 0x000c,
 	.sta_ofs = 0x0008,
@@ -784,7 +790,8 @@ static const struct mtk_gate_regs vdec1_cg_regs __initconst = {
 		.ops = &mtk_clk_gate_ops_setclr_inv,		\
 	}
 
-static const struct mtk_gate vdec_clks[] __initconst = {
+static const struct mtk_gate vdec_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "vdec_dummy"),
 	GATE_VDEC0(CLK_VDEC_CKEN, "vdec_cken", "vdec_sel", 0),
 	GATE_VDEC1(CLK_VDEC_LARB_CKEN, "vdec_larb_cken", "mm_sel", 0),
 };
@@ -798,7 +805,8 @@ static const struct mtk_gate vdec_clks[] __initconst = {
 		.ops = &mtk_clk_gate_ops_setclr_inv,		\
 	}
 
-static const struct mtk_gate venc_clks[] __initconst = {
+static const struct mtk_gate venc_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "venc_dummy"),
 	GATE_VENC(CLK_VENC_CKE0, "venc_cke0", "mm_sel", 0),
 	GATE_VENC(CLK_VENC_CKE1, "venc_cke1", "venc_sel", 4),
 	GATE_VENC(CLK_VENC_CKE2, "venc_cke2", "venc_sel", 8),
@@ -814,7 +822,8 @@ static const struct mtk_gate venc_clks[] __initconst = {
 		.ops = &mtk_clk_gate_ops_setclr_inv,		\
 	}
 
-static const struct mtk_gate venclt_clks[] __initconst = {
+static const struct mtk_gate venclt_clks[] = {
+	GATE_DUMMY(CLK_DUMMY, "venclt_dummy"),
 	GATE_VENCLT(CLK_VENCLT_CKE0, "venclt_cke0", "mm_sel", 0),
 	GATE_VENCLT(CLK_VENCLT_CKE1, "venclt_cke1", "venclt_sel", 4),
 };
@@ -837,10 +846,11 @@ static const struct mtk_clk_rst_desc clk_rst_desc[] = {
 	}
 };
 
-static struct clk_hw_onecell_data *mt8173_top_clk_data __initdata;
-static struct clk_hw_onecell_data *mt8173_pll_clk_data __initdata;
+static struct clk_hw_onecell_data *mt8173_top_clk_data;
+static struct clk_hw_onecell_data *mt8173_pll_clk_data;
+static struct clk_hw_onecell_data *infra_clk_data;
 
-static void __init mtk_clk_enable_critical(void)
+static void mtk_clk_enable_critical(void)
 {
 	if (!mt8173_top_clk_data || !mt8173_pll_clk_data)
 		return;
@@ -853,102 +863,149 @@ static void __init mtk_clk_enable_critical(void)
 	clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_RTC_SEL]->clk);
 }
 
-static void __init mtk_topckgen_init(struct device_node *node)
+static int clk_mt8173_topck_probe(struct platform_device *pdev)
 {
+	struct device_node *node = pdev->dev.of_node;
 	struct clk_hw_onecell_data *clk_data;
 	void __iomem *base;
 	int r;
 
-	base = of_iomap(node, 0);
-	if (!base) {
-		pr_err("%s(): ioremap failed\n", __func__);
-		return;
-	}
+	base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(base))
+		return PTR_ERR(base);
 
 	mt8173_top_clk_data = clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
+	if (IS_ERR_OR_NULL(clk_data))
+		return -ENOMEM;
 
-	mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
-	mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
-	mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
-			&mt8173_clk_lock, clk_data, NULL);
+	r = mtk_clk_register_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
+	if (r)
+		goto free_clk_data;
+
+	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
+	if (r)
+		goto unregister_fixed_clks;
+
+	r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
+					&mt8173_clk_lock, clk_data, &pdev->dev);
+	if (r)
+		goto unregister_factors;
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
+		goto unregister_composites;
 
 	mtk_clk_enable_critical();
+	return 0;
+
+unregister_composites:
+	mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
+unregister_factors:
+	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
+unregister_fixed_clks:
+	mtk_clk_unregister_fixed_clks(fixed_clks, ARRAY_SIZE(fixed_clks), clk_data);
+free_clk_data:
+	mtk_free_clk_data(clk_data);
+	return r;
 }
-CLK_OF_DECLARE(mtk_topckgen, "mediatek,mt8173-topckgen", mtk_topckgen_init);
 
-static void __init mtk_infrasys_init(struct device_node *node)
+static void clk_mt8173_infra_init_early(struct device_node *node)
 {
-	struct clk_hw_onecell_data *clk_data;
+	int i;
+
+	infra_clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
+	if (!infra_clk_data)
+		return;
+
+	for (i = 0; i < CLK_INFRA_NR_CLK; i++)
+		infra_clk_data->hws[i] = ERR_PTR(-EPROBE_DEFER);
+
+	mtk_clk_register_factors(infra_early_divs, ARRAY_SIZE(infra_early_divs), infra_clk_data);
+
+	of_clk_add_hw_provider(node, of_clk_hw_onecell_get, infra_clk_data);
+}
+CLK_OF_DECLARE_DRIVER(mtk_infrasys, "mediatek,mt8173-infracfg",
+		      clk_mt8173_infra_init_early);
+
+static int clk_mt8173_infra_probe(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
 	int r;
 
-	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR_CLK);
+	r = mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
+				   infra_clk_data, &pdev->dev);
+	if (r)
+		return r;
 
-	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
-			       clk_data, NULL);
-	mtk_clk_register_factors(infra_divs, ARRAY_SIZE(infra_divs), clk_data);
+	r = mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
+				      infra_clk_data, &pdev->dev);
+	if (r)
+		goto unregister_gates;
 
-	mtk_clk_register_cpumuxes(node, cpu_muxes, ARRAY_SIZE(cpu_muxes),
-				  clk_data, NULL);
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, infra_clk_data);
+	if (r)
+		goto unregister_cpumuxes;
 
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	r = mtk_register_reset_controller(node, &clk_rst_desc[0]);
 	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
+		goto unregister_clk_hw;
+
+	return 0;
 
-	mtk_register_reset_controller(node, &clk_rst_desc[0]);
+unregister_clk_hw:
+	of_clk_del_provider(node);
+unregister_cpumuxes:
+	mtk_clk_unregister_cpumuxes(cpu_muxes, ARRAY_SIZE(cpu_muxes), infra_clk_data);
+unregister_gates:
+	mtk_clk_unregister_gates(infra_clks, ARRAY_SIZE(infra_clks), infra_clk_data);
+	return r;
 }
-CLK_OF_DECLARE(mtk_infrasys, "mediatek,mt8173-infracfg", mtk_infrasys_init);
 
-static void __init mtk_pericfg_init(struct device_node *node)
+static int clk_mt8173_peri_probe(struct platform_device *pdev)
 {
+	struct device_node *node = pdev->dev.of_node;
 	struct clk_hw_onecell_data *clk_data;
 	int r;
 	void __iomem *base;
 
-	base = of_iomap(node, 0);
-	if (!base) {
-		pr_err("%s(): ioremap failed\n", __func__);
-		return;
-	}
+	base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(base))
+		return PTR_ERR(base);
 
 	clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
+	if (IS_ERR_OR_NULL(clk_data))
+		return -ENOMEM;
 
-	mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
-			       clk_data, NULL);
-	mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
-			&mt8173_clk_lock, clk_data, NULL);
+	r = mtk_clk_register_gates(node, peri_gates, ARRAY_SIZE(peri_gates),
+				   clk_data, &pdev->dev);
+	if (r)
+		goto free_clk_data;
+
+	r = mtk_clk_register_composites(peri_clks, ARRAY_SIZE(peri_clks), base,
+					&mt8173_clk_lock, clk_data, &pdev->dev);
+	if (r)
+		goto unregister_gates;
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
+		goto unregister_composites;
 
-	mtk_register_reset_controller(node, &clk_rst_desc[1]);
+	r = mtk_register_reset_controller(node, &clk_rst_desc[1]);
+	if (r)
+		goto unregister_clk_hw;
+
+	return 0;
+
+unregister_clk_hw:
+	of_clk_del_provider(node);
+unregister_composites:
+	mtk_clk_unregister_composites(peri_clks, ARRAY_SIZE(peri_clks), clk_data);
+unregister_gates:
+	mtk_clk_unregister_gates(peri_gates, ARRAY_SIZE(peri_gates), clk_data);
+free_clk_data:
+	mtk_free_clk_data(clk_data);
+	return r;
 }
-CLK_OF_DECLARE(mtk_pericfg, "mediatek,mt8173-pericfg", mtk_pericfg_init);
-
-struct mtk_clk_usb {
-	int id;
-	const char *name;
-	const char *parent;
-	u32 reg_ofs;
-};
-
-#define APMIXED_USB(_id, _name, _parent, _reg_ofs) {			\
-		.id = _id,						\
-		.name = _name,						\
-		.parent = _parent,					\
-		.reg_ofs = _reg_ofs,					\
-	}
-
-static const struct mtk_clk_usb apmixed_usb[] __initconst = {
-	APMIXED_USB(CLK_APMIXED_REF2USB_TX, "ref2usb_tx", "clk26m", 0x8),
-};
 
 #define MT8173_PLL_FMAX		(3000UL * MHZ)
 
@@ -1007,119 +1064,130 @@ static const struct mtk_pll_data plls[] = {
 	PLL(CLK_APMIXED_MSDCPLL2, "msdcpll2", 0x2f0, 0x2fc, 0, 0, 21, 0x2f0, 4, 0x0, 0x2f4, 0),
 };
 
-static void __init mtk_apmixedsys_init(struct device_node *node)
+static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
 {
+	struct device_node *node = pdev->dev.of_node;
 	struct clk_hw_onecell_data *clk_data;
 	void __iomem *base;
 	struct clk_hw *hw;
-	int r, i;
+	int r;
 
 	base = of_iomap(node, 0);
-	if (!base) {
-		pr_err("%s(): ioremap failed\n", __func__);
-		return;
-	}
+	if (!base)
+		return PTR_ERR(base);
 
 	mt8173_pll_clk_data = clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
-	if (!clk_data) {
-		iounmap(base);
-		return;
-	}
-
-	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
+	if (IS_ERR_OR_NULL(clk_data))
+		return -ENOMEM;
 
-	for (i = 0; i < ARRAY_SIZE(apmixed_usb); i++) {
-		const struct mtk_clk_usb *cku = &apmixed_usb[i];
-
-		hw = mtk_clk_register_ref2usb_tx(cku->name, cku->parent, base + cku->reg_ofs);
-		if (IS_ERR(hw)) {
-			pr_err("Failed to register clk %s: %ld\n", cku->name, PTR_ERR(hw));
-			continue;
-		}
+	r = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
+	if (r)
+		goto free_clk_data;
 
-		clk_data->hws[cku->id] = hw;
+	hw = mtk_clk_register_ref2usb_tx("ref2usb_tx", "clk26m", base + REGOFF_REF2USB);
+	if (IS_ERR(hw)) {
+		r = PTR_ERR(hw);
+		dev_err(&pdev->dev, "Failed to register ref2usb_tx: %d\n", r);
+		goto unregister_plls;
 	}
+	clk_data->hws[CLK_APMIXED_REF2USB_TX] = hw;
 
-	hw = clk_hw_register_divider(NULL, "hdmi_ref", "tvdpll_594m", 0,
-				     base + 0x40, 16, 3, CLK_DIVIDER_POWER_OF_TWO,
-				     NULL);
+	hw = devm_clk_hw_register_divider(&pdev->dev, "hdmi_ref", "tvdpll_594m", 0,
+					  base + REGOFF_HDMI_REF, 16, 3,
+					  CLK_DIVIDER_POWER_OF_TWO, NULL);
 	clk_data->hws[CLK_APMIXED_HDMI_REF] = hw;
 
 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
 	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
+		goto unregister_ref2usb;
 
 	mtk_clk_enable_critical();
+	return 0;
+
+unregister_ref2usb:
+	mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
+unregister_plls:
+	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+free_clk_data:
+	mtk_free_clk_data(clk_data);
+	return r;
 }
-CLK_OF_DECLARE(mtk_apmixedsys, "mediatek,mt8173-apmixedsys",
-		mtk_apmixedsys_init);
-
-static void __init mtk_imgsys_init(struct device_node *node)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
-
-	clk_data = mtk_alloc_clk_data(CLK_IMG_NR_CLK);
 
-	mtk_clk_register_gates(node, img_clks, ARRAY_SIZE(img_clks),
-			       clk_data, NULL);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+static const struct mtk_clk_desc img_desc = {
+	.clks = img_clks,
+	.num_clks = ARRAY_SIZE(img_clks),
+};
 
-	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
-}
-CLK_OF_DECLARE(mtk_imgsys, "mediatek,mt8173-imgsys", mtk_imgsys_init);
+static const struct mtk_clk_desc vdec_desc = {
+	.clks = vdec_clks,
+	.num_clks = ARRAY_SIZE(vdec_clks),
+};
 
-static void __init mtk_vdecsys_init(struct device_node *node)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
+static const struct mtk_clk_desc venc_desc = {
+	.clks = venc_clks,
+	.num_clks = ARRAY_SIZE(venc_clks),
+};
 
-	clk_data = mtk_alloc_clk_data(CLK_VDEC_NR_CLK);
+static const struct mtk_clk_desc venc_lt_desc = {
+	.clks = venclt_clks,
+	.num_clks = ARRAY_SIZE(venclt_clks),
+};
 
-	mtk_clk_register_gates(node, vdec_clks, ARRAY_SIZE(vdec_clks),
-			       clk_data, NULL);
+static const struct of_device_id of_match_clk_mt8173_simple[] = {
+	{ .compatible = "mediatek,mt8173-imgsys", .data = &img_desc },
+	{ .compatible = "mediatek,mt8173-vdecsys", .data = &vdec_desc },
+	{ .compatible = "mediatek,mt8173-vencsys", .data = &venc_desc },
+	{ .compatible = "mediatek,mt8173-vencltsys", .data = &venc_lt_desc },
+	{ /* sentinel */ }
+};
 
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
-}
-CLK_OF_DECLARE(mtk_vdecsys, "mediatek,mt8173-vdecsys", mtk_vdecsys_init);
+static struct platform_driver clk_mt8173_simple_drv = {
+	.driver = {
+		.name = "clk-mt8173-simple",
+		.of_match_table = of_match_clk_mt8173_simple,
+	},
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+};
 
-static void __init mtk_vencsys_init(struct device_node *node)
+static int clk_mt8173_probe(struct platform_device *pdev)
 {
-	struct clk_hw_onecell_data *clk_data;
+	int (*clk_probe)(struct platform_device *pdev);
 	int r;
 
-	clk_data = mtk_alloc_clk_data(CLK_VENC_NR_CLK);
+	clk_probe = of_device_get_match_data(&pdev->dev);
+	if (!clk_probe)
+		return -EINVAL;
 
-	mtk_clk_register_gates(node, venc_clks, ARRAY_SIZE(venc_clks),
-			       clk_data, NULL);
-
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	r = clk_probe(pdev);
 	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
+		dev_err(&pdev->dev, "could not register clock provider: %s: %d\n", pdev->name, r);
+
+	return r;
 }
-CLK_OF_DECLARE(mtk_vencsys, "mediatek,mt8173-vencsys", mtk_vencsys_init);
 
-static void __init mtk_vencltsys_init(struct device_node *node)
-{
-	struct clk_hw_onecell_data *clk_data;
-	int r;
+static const struct of_device_id of_match_clk_mt8173[] = {
+	{ .compatible = "mediatek,mt8173-apmixedsys", .data = clk_mt8173_apmixed_probe },
+	{ .compatible = "mediatek,mt8173-infracfg", .data = clk_mt8173_infra_probe },
+	{ .compatible = "mediatek,mt8173-topckgen", .data = clk_mt8173_topck_probe },
+	{ .compatible = "mediatek,mt8173-pericfg", .data = clk_mt8173_peri_probe },
+	{ /* sentinel */ }
+};
 
-	clk_data = mtk_alloc_clk_data(CLK_VENCLT_NR_CLK);
+static struct platform_driver clk_mt8173_drv = {
+	.probe = clk_mt8173_probe,
+	.driver = {
+		.name = "clk-mt8173",
+		.of_match_table = of_match_clk_mt8173,
+	},
+};
 
-	mtk_clk_register_gates(node, venclt_clks, ARRAY_SIZE(venclt_clks),
-			       clk_data, NULL);
+static int __init clk_mt8173_init(void)
+{
+	int ret = platform_driver_register(&clk_mt8173_drv);
 
-	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-	if (r)
-		pr_err("%s(): could not register clock provider: %d\n",
-			__func__, r);
+	if (ret)
+		return ret;
+	return platform_driver_register(&clk_mt8173_simple_drv);
 }
-CLK_OF_DECLARE(mtk_vencltsys, "mediatek,mt8173-vencltsys", mtk_vencltsys_init);
+arch_initcall(clk_mt8173_init);
-- 
2.39.0



From chengci.xu at mediatek.com  Fri Dec 23 02:14:38 2022
From: chengci.xu at mediatek.com (Chengci.Xu)
Date: Fri, 23 Dec 2022 18:14:38 +0800
Subject: [PATCH v6 3/4] iommu/mediatek: Add enable IOMMU SMC command for INFRA master
In-Reply-To: <20221223101439.494-1-chengci.xu@mediatek.com>
References: <20221223101439.494-1-chengci.xu@mediatek.com>
Message-ID: <20221223101439.494-4-chengci.xu@mediatek.com>

The register which can enable IOMMU for INFRA master should be setted
in secure world for security concerns. Therefore, we add a SMC command
for INFRA master to enable/disable INFRA IOMMU in ATF. This function is
prepared for MT8188.

Signed-off-by: Chengci.Xu <chengci.xu at mediatek.com>
Reviewed-by: Yong Wu <yong.wu at mediatek.com>
---
 drivers/iommu/mtk_iommu.c  | 32 ++++++++++++++++++++++----------
 include/soc/mediatek/smi.h |  1 +
 2 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index d43981c31b5d..ec81d21e33ce 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -3,6 +3,7 @@
  * Copyright (c) 2015-2016 MediaTek Inc.
  * Author: Yong Wu <yong.wu at mediatek.com>
  */
+#include <linux/arm-smccc.h>
 #include <linux/bitfield.h>
 #include <linux/bug.h>
 #include <linux/clk.h>
@@ -28,6 +29,7 @@
 #include <linux/slab.h>
 #include <linux/spinlock.h>
 #include <linux/soc/mediatek/infracfg.h>
+#include <linux/soc/mediatek/mtk_sip_svc.h>
 #include <asm/barrier.h>
 #include <soc/mediatek/smi.h>
 
@@ -144,6 +146,7 @@
 #define PGTABLE_PA_35_EN		BIT(17)
 #define TF_PORT_TO_ADDR_MT8173		BIT(18)
 #define INT_ID_PORT_WIDTH_6		BIT(19)
+#define CFG_IFA_MASTER_IN_ATF		BIT(20)
 
 #define MTK_IOMMU_HAS_FLAG_MASK(pdata, _x, mask)	\
 				((((pdata)->flags) & (mask)) == (_x))
@@ -543,6 +546,7 @@ static int mtk_iommu_config(struct mtk_iommu_data *data, struct device *dev,
 	struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
 	const struct mtk_iommu_iova_region *region;
 	unsigned long portid_msk = 0;
+	struct arm_smccc_res res;
 	int i, ret = 0;
 
 	for (i = 0; i < fwspec->num_ids; ++i) {
@@ -568,17 +572,24 @@ static int mtk_iommu_config(struct mtk_iommu_data *data, struct device *dev,
 		else
 			larb_mmu->mmu &= ~portid_msk;
 	} else if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_INFRA)) {
-		/* PCI dev has only one output id, enable the next writing bit for PCIe */
-		if (dev_is_pci(dev)) {
-			if (fwspec->num_ids != 1) {
-				dev_err(dev, "PCI dev can only have one port.\n");
-				return -ENODEV;
+		if (MTK_IOMMU_HAS_FLAG(data->plat_data, CFG_IFA_MASTER_IN_ATF)) {
+			arm_smccc_smc(MTK_SIP_KERNEL_IOMMU_CONTROL,
+				      IOMMU_ATF_CMD_CONFIG_INFRA_IOMMU,
+				      portid_msk, enable, 0, 0, 0, 0, &res);
+			ret = res.a0;
+		} else {
+			/* PCI dev has only one output id, enable the next writing bit for PCIe */
+			if (dev_is_pci(dev)) {
+				if (fwspec->num_ids != 1) {
+					dev_err(dev, "PCI dev can only have one port.\n");
+					return -ENODEV;
+				}
+				portid_msk |= BIT(portid + 1);
 			}
-			portid_msk |= BIT(portid + 1);
-		}
 
-		ret = regmap_update_bits(data->pericfg, PERICFG_IOMMU_1,
-					 (u32)portid_msk, enable ? (u32)portid_msk : 0);
+			ret = regmap_update_bits(data->pericfg, PERICFG_IOMMU_1,
+						 (u32)portid_msk, enable ? (u32)portid_msk : 0);
+		}
 		if (ret)
 			dev_err(dev, "%s iommu(%s) inframaster 0x%lx fail(%d).\n",
 				enable ? "enable" : "disable",
@@ -1281,7 +1292,8 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 			dev_err_probe(dev, ret, "mm dts parse fail\n");
 			goto out_runtime_disable;
 		}
-	} else if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_INFRA)) {
+	} else if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_INFRA) &&
+		   !MTK_IOMMU_HAS_FLAG(data->plat_data, CFG_IFA_MASTER_IN_ATF)) {
 		p = data->plat_data->pericfg_comp_str;
 		data->pericfg = syscon_regmap_lookup_by_compatible(p);
 		if (IS_ERR(data->pericfg)) {
diff --git a/include/soc/mediatek/smi.h b/include/soc/mediatek/smi.h
index dfd8efca5e60..000eb1cf68b7 100644
--- a/include/soc/mediatek/smi.h
+++ b/include/soc/mediatek/smi.h
@@ -13,6 +13,7 @@
 
 enum iommu_atf_cmd {
 	IOMMU_ATF_CMD_CONFIG_SMI_LARB,		/* For mm master to en/disable iommu */
+	IOMMU_ATF_CMD_CONFIG_INFRA_IOMMU,	/* For infra master to enable iommu */
 	IOMMU_ATF_CMD_MAX,
 };
 
-- 
2.25.1



From chengci.xu at mediatek.com  Fri Dec 23 02:14:37 2022
From: chengci.xu at mediatek.com (Chengci.Xu)
Date: Fri, 23 Dec 2022 18:14:37 +0800
Subject: [PATCH v6 2/4] iommu/mediatek: Adjust mtk_iommu_config flow
In-Reply-To: <20221223101439.494-1-chengci.xu@mediatek.com>
References: <20221223101439.494-1-chengci.xu@mediatek.com>
Message-ID: <20221223101439.494-3-chengci.xu@mediatek.com>

For reduce indention without functional change, prepare for MT8188.
If there are many ports in a same larb, current flow will update
larb_mmu->mmu or update INFRA register for too many times.
So we save all ports to portid_msk in the front of mtk_iommu_config(),
and then update only once for IOMMU configure. By this modification,
we can prevent MT8188 from sending to many SMC calls, avoiding enter
ATF for each port.

Signed-off-by: Chengci.Xu <chengci.xu at mediatek.com>
Reviewed-by: Yong Wu <yong.wu at mediatek.com>
---
 drivers/iommu/mtk_iommu.c | 58 +++++++++++++++++++++------------------
 1 file changed, 32 insertions(+), 26 deletions(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index 2badd6acfb23..d43981c31b5d 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -542,41 +542,47 @@ static int mtk_iommu_config(struct mtk_iommu_data *data, struct device *dev,
 	unsigned int                 larbid, portid;
 	struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
 	const struct mtk_iommu_iova_region *region;
-	u32 peri_mmuen, peri_mmuen_msk;
+	unsigned long portid_msk = 0;
 	int i, ret = 0;
 
 	for (i = 0; i < fwspec->num_ids; ++i) {
-		larbid = MTK_M4U_TO_LARB(fwspec->ids[i]);
 		portid = MTK_M4U_TO_PORT(fwspec->ids[i]);
+		portid_msk |= BIT(portid);
+	}
 
-		if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_MM)) {
-			larb_mmu = &data->larb_imu[larbid];
+	if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_MM)) {
+		/* All ports should be in the same larb. just use 0 here */
+		larbid = MTK_M4U_TO_LARB(fwspec->ids[0]);
+		larb_mmu = &data->larb_imu[larbid];
+		region = data->plat_data->iova_region + regionid;
 
-			region = data->plat_data->iova_region + regionid;
+		for_each_set_bit(portid, &portid_msk, 32)
 			larb_mmu->bank[portid] = upper_32_bits(region->iova_base);
 
-			dev_dbg(dev, "%s iommu for larb(%s) port %d region %d rgn-bank %d.\n",
-				enable ? "enable" : "disable", dev_name(larb_mmu->dev),
-				portid, regionid, larb_mmu->bank[portid]);
-
-			if (enable)
-				larb_mmu->mmu |= MTK_SMI_MMU_EN(portid);
-			else
-				larb_mmu->mmu &= ~MTK_SMI_MMU_EN(portid);
-		} else if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_INFRA)) {
-			peri_mmuen_msk = BIT(portid);
-			/* PCI dev has only one output id, enable the next writing bit for PCIe */
-			if (dev_is_pci(dev))
-				peri_mmuen_msk |= BIT(portid + 1);
-
-			peri_mmuen = enable ? peri_mmuen_msk : 0;
-			ret = regmap_update_bits(data->pericfg, PERICFG_IOMMU_1,
-						 peri_mmuen_msk, peri_mmuen);
-			if (ret)
-				dev_err(dev, "%s iommu(%s) inframaster 0x%x fail(%d).\n",
-					enable ? "enable" : "disable",
-					dev_name(data->dev), peri_mmuen_msk, ret);
+		dev_dbg(dev, "%s iommu for larb(%s) port 0x%lx region %d rgn-bank %d.\n",
+			enable ? "enable" : "disable", dev_name(larb_mmu->dev),
+			portid_msk, regionid, upper_32_bits(region->iova_base));
+
+		if (enable)
+			larb_mmu->mmu |= portid_msk;
+		else
+			larb_mmu->mmu &= ~portid_msk;
+	} else if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_INFRA)) {
+		/* PCI dev has only one output id, enable the next writing bit for PCIe */
+		if (dev_is_pci(dev)) {
+			if (fwspec->num_ids != 1) {
+				dev_err(dev, "PCI dev can only have one port.\n");
+				return -ENODEV;
+			}
+			portid_msk |= BIT(portid + 1);
 		}
+
+		ret = regmap_update_bits(data->pericfg, PERICFG_IOMMU_1,
+					 (u32)portid_msk, enable ? (u32)portid_msk : 0);
+		if (ret)
+			dev_err(dev, "%s iommu(%s) inframaster 0x%lx fail(%d).\n",
+				enable ? "enable" : "disable",
+				dev_name(data->dev), portid_msk, ret);
 	}
 	return ret;
 }
-- 
2.25.1



From shayne.chen at mediatek.com  Fri Dec 23 02:13:46 2022
From: shayne.chen at mediatek.com (Shayne Chen)
Date: Fri, 23 Dec 2022 18:13:46 +0800
Subject: [PATCH 2/4] wifi: mt76: mt7996: update register for CFEND_RATE
In-Reply-To: <20221223101348.11504-1-shayne.chen@mediatek.com>
References: <20221223101348.11504-1-shayne.chen@mediatek.com>
Message-ID: <20221223101348.11504-2-shayne.chen@mediatek.com>

In newer chipsets, CFEND_RATE setting has been moved to different hw
module.

Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
Signed-off-by: Shayne Chen <shayne.chen at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7996/mac.c  |  2 +-
 drivers/net/wireless/mediatek/mt76/mt7996/mmio.c |  1 +
 drivers/net/wireless/mediatek/mt76/mt7996/regs.h | 15 ++++++++-------
 3 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mac.c b/drivers/net/wireless/mediatek/mt76/mt7996/mac.c
index 0b3e28748e76..ce4242f90e9f 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mac.c
@@ -1690,7 +1690,7 @@ void mt7996_mac_set_timing(struct mt7996_phy *phy)
 	else
 		val = MT7996_CFEND_RATE_11B;
 
-	mt76_rmw_field(dev, MT_AGG_ACR0(band_idx), MT_AGG_ACR_CFEND_RATE, val);
+	mt76_rmw_field(dev, MT_RATE_HRCR0(band_idx), MT_RATE_HRCR0_CFEND_RATE, val);
 	mt76_clear(dev, MT_ARB_SCR(band_idx),
 		   MT_ARB_SCR_TX_DISABLE | MT_ARB_SCR_RX_DISABLE);
 }
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mmio.c b/drivers/net/wireless/mediatek/mt76/mt7996/mmio.c
index 60781d046216..d8a2c1a744b2 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mmio.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mmio.c
@@ -21,6 +21,7 @@ static const struct __base mt7996_reg_base[] = {
 	[WF_ETBF_BASE]		= { { 0x820ea000, 0x820fa000, 0x830ea000 } },
 	[WF_LPON_BASE]		= { { 0x820eb000, 0x820fb000, 0x830eb000 } },
 	[WF_MIB_BASE]		= { { 0x820ed000, 0x820fd000, 0x830ed000 } },
+	[WF_RATE_BASE]		= { { 0x820ee000, 0x820fe000, 0x830ee000 } },
 };
 
 static const struct __map mt7996_reg_map[] = {
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/regs.h b/drivers/net/wireless/mediatek/mt76/mt7996/regs.h
index 42980b97b4d4..7a28cae34e34 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/regs.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/regs.h
@@ -33,6 +33,7 @@ enum base_rev {
 	WF_ETBF_BASE,
 	WF_LPON_BASE,
 	WF_MIB_BASE,
+	WF_RATE_BASE,
 	__MT_REG_BASE_MAX,
 };
 
@@ -235,13 +236,6 @@ enum base_rev {
 						 FIELD_PREP(MT_WTBL_LMAC_ID, _id) | \
 						 FIELD_PREP(MT_WTBL_LMAC_DW, _dw))
 
-/* AGG: band 0(0x820e2000), band 1(0x820f2000), band 2(0x830e2000) */
-#define MT_WF_AGG_BASE(_band)			__BASE(WF_AGG_BASE, (_band))
-#define MT_WF_AGG(_band, ofs)			(MT_WF_AGG_BASE(_band) + (ofs))
-
-#define MT_AGG_ACR0(_band)			MT_WF_AGG(_band, 0x054)
-#define MT_AGG_ACR_CFEND_RATE			GENMASK(13, 0)
-
 /* ARB: band 0(0x820e3000), band 1(0x820f3000), band 2(0x830e3000) */
 #define MT_WF_ARB_BASE(_band)			__BASE(WF_ARB_BASE, (_band))
 #define MT_WF_ARB(_band, ofs)			(MT_WF_ARB_BASE(_band) + (ofs))
@@ -300,6 +294,13 @@ enum base_rev {
 #define MT_WF_RMAC_RSVD0(_band)			MT_WF_RMAC(_band, 0x03e0)
 #define MT_WF_RMAC_RSVD0_EIFS_CLR		BIT(21)
 
+/* RATE: band 0(0x820ee000), band 1(0x820fe000), band 2(0x830ee000) */
+#define MT_WF_RATE_BASE(_band)			__BASE(WF_RATE_BASE, (_band))
+#define MT_WF_RATE(_band, ofs)			(MT_WF_RATE_BASE(_band) + (ofs))
+
+#define MT_RATE_HRCR0(_band)			MT_WF_RATE(_band, 0x050)
+#define MT_RATE_HRCR0_CFEND_RATE		GENMASK(14, 0)
+
 /* WFDMA0 */
 #define MT_WFDMA0_BASE				0xd4000
 #define MT_WFDMA0(ofs)				(MT_WFDMA0_BASE + (ofs))
-- 
2.25.1



From shayne.chen at mediatek.com  Fri Dec 23 02:13:45 2022
From: shayne.chen at mediatek.com (Shayne Chen)
Date: Fri, 23 Dec 2022 18:13:45 +0800
Subject: [PATCH 1/4] wifi: mt76: mt7996: fix chainmask calculation in mt7996_set_antenna()
Message-ID: <20221223101348.11504-1-shayne.chen@mediatek.com>

Fix per-band chainmask when restoring from the dev chainmask.

Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
Signed-off-by: Shayne Chen <shayne.chen at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7996/main.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/main.c b/drivers/net/wireless/mediatek/mt76/mt7996/main.c
index 4421cd54311b..c423b052e4f4 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/main.c
@@ -880,7 +880,10 @@ mt7996_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
 	phy->mt76->antenna_mask = tx_ant;
 
 	/* restore to the origin chainmask which might have auxiliary path */
-	if (hweight8(tx_ant) == max_nss)
+	if (hweight8(tx_ant) == max_nss && band_idx < MT_BAND2)
+		phy->mt76->chainmask = ((dev->chainmask >> shift) &
+					(BIT(dev->chainshift[band_idx + 1] - shift) - 1)) << shift;
+	else if (hweight8(tx_ant) == max_nss)
 		phy->mt76->chainmask = (dev->chainmask >> shift) << shift;
 	else
 		phy->mt76->chainmask = tx_ant << shift;
-- 
2.25.1



From chengci.xu at mediatek.com  Fri Dec 23 02:14:36 2022
From: chengci.xu at mediatek.com (Chengci.Xu)
Date: Fri, 23 Dec 2022 18:14:36 +0800
Subject: [PATCH v6 1/4] dt-bindings: mediatek: mt8188: Add binding for MM & INFRA IOMMU
In-Reply-To: <20221223101439.494-1-chengci.xu@mediatek.com>
References: <20221223101439.494-1-chengci.xu@mediatek.com>
Message-ID: <20221223101439.494-2-chengci.xu@mediatek.com>

Adds descriptions for mt8188 IOMMU which also use ARM Short-Descriptor
translation table format.

In mt8188, there are two smi-common HW and IOMMU, one is for vdo(video
output), the other is for vpp(video processing pipe). They connects
with different smi-larbs, then some setting(larbid_remap) is different.
Differentiate them with the compatible string.

Something like this:

  IOMMU(VDO)          IOMMU(VPP)
      |                   |
SMI_COMMON_VDO      SMI_COMMON_VPP
---------------     ----------------
  |     |    ...      |     |    ...
larb0 larb2  ...    larb1 larb3  ...

We also have an IOMMU that is for infra master like PCIe.
And infra master don't have the larb and ports.

Signed-off-by: Chengci.Xu <chengci.xu at mediatek.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Reviewed-by: Yong Wu <yong.wu at mediatek.com>
---
 .../bindings/iommu/mediatek,iommu.yaml        |  12 +-
 .../memory/mediatek,mt8188-memory-port.h      | 482 ++++++++++++++++++
 2 files changed, 493 insertions(+), 1 deletion(-)
 create mode 100644 include/dt-bindings/memory/mediatek,mt8188-memory-port.h

diff --git a/Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml b/Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
index 5b6395bc10e0..ea6b0f5f24de 100644
--- a/Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
+++ b/Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
@@ -78,6 +78,9 @@ properties:
           - mediatek,mt8173-m4u  # generation two
           - mediatek,mt8183-m4u  # generation two
           - mediatek,mt8186-iommu-mm         # generation two
+          - mediatek,mt8188-iommu-vdo        # generation two
+          - mediatek,mt8188-iommu-vpp        # generation two
+          - mediatek,mt8188-iommu-infra      # generation two
           - mediatek,mt8192-m4u  # generation two
           - mediatek,mt8195-iommu-vdo        # generation two
           - mediatek,mt8195-iommu-vpp        # generation two
@@ -123,6 +126,7 @@ properties:
     description: |
       This is the mtk_m4u_id according to the HW. Specifies the mtk_m4u_id as
       defined in
+      dt-binding/memory/mediatek,mt8188-memory-port.h for mt8188,
       dt-binding/memory/mt2701-larb-port.h for mt2701 and mt7623,
       dt-binding/memory/mt2712-larb-port.h for mt2712,
       dt-binding/memory/mt6779-larb-port.h for mt6779,
@@ -155,6 +159,8 @@ allOf:
               - mediatek,mt6795-m4u
               - mediatek,mt8173-m4u
               - mediatek,mt8186-iommu-mm
+              - mediatek,mt8188-iommu-vdo
+              - mediatek,mt8188-iommu-vpp
               - mediatek,mt8192-m4u
               - mediatek,mt8195-iommu-vdo
               - mediatek,mt8195-iommu-vpp
@@ -168,6 +174,8 @@ allOf:
         compatible:
           enum:
             - mediatek,mt8186-iommu-mm
+            - mediatek,mt8188-iommu-vdo
+            - mediatek,mt8188-iommu-vpp
             - mediatek,mt8192-m4u
             - mediatek,mt8195-iommu-vdo
             - mediatek,mt8195-iommu-vpp
@@ -194,7 +202,9 @@ allOf:
         properties:
           compatible:
             contains:
-              const: mediatek,mt8195-iommu-infra
+              enum:
+                - mediatek,mt8188-iommu-infra
+                - mediatek,mt8195-iommu-infra
 
     then:
       required:
diff --git a/include/dt-bindings/memory/mediatek,mt8188-memory-port.h b/include/dt-bindings/memory/mediatek,mt8188-memory-port.h
new file mode 100644
index 000000000000..9d14d819bd4d
--- /dev/null
+++ b/include/dt-bindings/memory/mediatek,mt8188-memory-port.h
@@ -0,0 +1,482 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Chengci Xu <chengci.xu at mediatek.com>
+ */
+#ifndef _DT_BINDINGS_MEMORY_MEDIATEK_MT8188_LARB_PORT_H_
+#define _DT_BINDINGS_MEMORY_MEDIATEK_MT8188_LARB_PORT_H_
+
+#include <dt-bindings/memory/mtk-memory-port.h>
+
+/*
+ * MM IOMMU supports 16GB dma address. We separate it to four ranges:
+ * 0 ~ 4G; 4G ~ 8G; 8G ~ 12G; 12G ~ 16G, we could adjust these masters
+ * locate in anyone region. BUT:
+ * a) Make sure all the ports inside a larb are in one range.
+ * b) The iova of any master can NOT cross the 4G/8G/12G boundary.
+ *
+ * This is the suggested mapping in this SoC:
+ *
+ * modules    dma-address-region	larbs-ports
+ * disp         0 ~ 4G                  larb0/1/2/3
+ * vcodec      4G ~ 8G                  larb19/21/23
+ * cam/mdp     8G ~ 12G                 the other larbs.
+ * N/A         12G ~ 16G
+ * CCU0   0x24000_0000 ~ 0x243ff_ffff   larb27: port 0/1
+ * CCU1   0x24400_0000 ~ 0x247ff_ffff   larb27: port 2/3
+ *
+ * This SoC have two MM IOMMU HWs, this is the connected information:
+ * iommu-vdo: larb0/2/5/9/10/11A/11C/13/16B/17B/19/21
+ * iommu-vpp: larb1/3/4/6/7/11B/12/14/15/16A/17A/23/27
+ */
+
+/* MM IOMMU larbs */
+#define SMI_L0_ID		0
+#define SMI_L1_ID		1
+#define SMI_L2_ID		2
+#define SMI_L3_ID		3
+#define SMI_L4_ID		4
+#define SMI_L5_ID		5
+#define SMI_L6_ID		6
+#define SMI_L7_ID		7
+#define SMI_L9_ID		8
+#define SMI_L10_ID		9
+#define SMI_L11A_ID		10
+#define SMI_L11B_ID		11
+#define SMI_L11C_ID		12
+#define SMI_L12_ID		13
+#define SMI_L13_ID		14
+#define SMI_L14_ID		15
+#define SMI_L15_ID		16
+#define SMI_L16A_ID		17
+#define SMI_L16B_ID		18
+#define SMI_L17A_ID		19
+#define SMI_L17B_ID		20
+#define SMI_L19_ID		21
+#define SMI_L21_ID		22
+#define SMI_L23_ID		23
+#define SMI_L27_ID		24
+#define SMI_L28_ID		25
+
+/* MM IOMMU ports */
+/* LARB 0 -- VDO-0 */
+#define M4U_PORT_L0_DISP_RDMA1			MTK_M4U_ID(SMI_L0_ID, 0)
+#define M4U_PORT_L0_DISP_WDMA0			MTK_M4U_ID(SMI_L0_ID, 1)
+#define M4U_PORT_L0_DISP_OVL0_RDMA0		MTK_M4U_ID(SMI_L0_ID, 2)
+#define M4U_PORT_L0_DISP_OVL0_RDMA1		MTK_M4U_ID(SMI_L0_ID, 3)
+#define M4U_PORT_L0_DISP_OVL0_HDR		MTK_M4U_ID(SMI_L0_ID, 4)
+#define M4U_PORT_L0_DISP_POSTMASK0		MTK_M4U_ID(SMI_L0_ID, 5)
+#define M4U_PORT_L0_DISP_FAKE_ENG0		MTK_M4U_ID(SMI_L0_ID, 6)
+
+/* LARB 1 -- VD0-0 */
+#define M4U_PORT_L1_DISP_RDMA0			MTK_M4U_ID(SMI_L1_ID, 0)
+#define M4U_PORT_L1_DISP_WDMA1			MTK_M4U_ID(SMI_L1_ID, 1)
+#define M4U_PORT_L1_DISP_OVL1_RDMA0		MTK_M4U_ID(SMI_L1_ID, 2)
+#define M4U_PORT_L1_DISP_OVL1_RDMA1		MTK_M4U_ID(SMI_L1_ID, 3)
+#define M4U_PORT_L1_DISP_OVL1_HDR		MTK_M4U_ID(SMI_L1_ID, 4)
+#define M4U_PORT_L1_DISP_WROT0			MTK_M4U_ID(SMI_L1_ID, 5)
+#define M4U_PORT_L1_DISP_FAKE_ENG1		MTK_M4U_ID(SMI_L1_ID, 6)
+
+/* LARB 2 -- VDO-1 */
+#define M4U_PORT_L2_MDP_RDMA0			MTK_M4U_ID(SMI_L2_ID, 0)
+#define M4U_PORT_L2_MDP_RDMA2			MTK_M4U_ID(SMI_L2_ID, 1)
+#define M4U_PORT_L2_MDP_RDMA4			MTK_M4U_ID(SMI_L2_ID, 2)
+#define M4U_PORT_L2_MDP_RDMA6			MTK_M4U_ID(SMI_L2_ID, 3)
+#define M4U_PORT_L2_DISP_FAKE1			MTK_M4U_ID(SMI_L2_ID, 4)
+
+/* LARB 3 -- VDO-1 */
+#define M4U_PORT_L3_MDP_RDMA1			MTK_M4U_ID(SMI_L3_ID, 0)
+#define M4U_PORT_L3_MDP_RDMA3			MTK_M4U_ID(SMI_L3_ID, 1)
+#define M4U_PORT_L3_MDP_RDMA5			MTK_M4U_ID(SMI_L3_ID, 2)
+#define M4U_PORT_L3_MDP_RDMA7			MTK_M4U_ID(SMI_L3_ID, 3)
+#define M4U_PORT_L3_HDR_DS_SMI			MTK_M4U_ID(SMI_L3_ID, 4)
+#define M4U_PORT_L3_HDR_ADL_SMI			MTK_M4U_ID(SMI_L3_ID, 5)
+#define M4U_PORT_L3_DISP_FAKE1			MTK_M4U_ID(SMI_L3_ID, 6)
+
+/* LARB 4 -- VPP-0 */
+#define M4U_PORT_L4_MDP_RDMA			MTK_M4U_ID(SMI_L4_ID, 0)
+#define M4U_PORT_L4_MDP_FG			MTK_M4U_ID(SMI_L4_ID, 1)
+#define M4U_PORT_L4_MDP_OVL			MTK_M4U_ID(SMI_L4_ID, 2)
+#define M4U_PORT_L4_MDP_WROT			MTK_M4U_ID(SMI_L4_ID, 3)
+#define M4U_PORT_L4_FAKE_ENG			MTK_M4U_ID(SMI_L4_ID, 4)
+#define M4U_PORT_L4_DISP_RDMA			MTK_M4U_ID(SMI_L4_ID, 5)
+#define M4U_PORT_L4_DISP_WDMA			MTK_M4U_ID(SMI_L4_ID, 6)
+
+/* LARB 5 -- VPP-1 */
+#define M4U_PORT_L5_SVPP1_MDP_RDMA		MTK_M4U_ID(SMI_L5_ID, 0)
+#define M4U_PORT_L5_SVPP1_MDP_FG		MTK_M4U_ID(SMI_L5_ID, 1)
+#define M4U_PORT_L5_SVPP1_MDP_OVL		MTK_M4U_ID(SMI_L5_ID, 2)
+#define M4U_PORT_L5_SVPP1_MDP_WROT		MTK_M4U_ID(SMI_L5_ID, 3)
+#define M4U_PORT_L5_SVPP2_MDP_RDMA		MTK_M4U_ID(SMI_L5_ID, 4)
+#define M4U_PORT_L5_SVPP2_MDP_FG		MTK_M4U_ID(SMI_L5_ID, 5)
+#define M4U_PORT_L5_SVPP2_MDP_WROT		MTK_M4U_ID(SMI_L5_ID, 6)
+#define M4U_PORT_L5_LARB5_FAKE_ENG		MTK_M4U_ID(SMI_L5_ID, 7)
+
+/* LARB 6 -- VPP-1 */
+#define M4U_PORT_L6_SVPP3_MDP_RDMA		MTK_M4U_ID(SMI_L6_ID, 0)
+#define M4U_PORT_L6_SVPP3_MDP_FG		MTK_M4U_ID(SMI_L6_ID, 1)
+#define M4U_PORT_L6_SVPP3_MDP_WROT		MTK_M4U_ID(SMI_L6_ID, 2)
+#define M4U_PORT_L6_LARB6_FAKE_ENG		MTK_M4U_ID(SMI_L6_ID, 3)
+
+/* LARB 7 -- WPE */
+#define M4U_PORT_L7_WPE_RDMA_0			MTK_M4U_ID(SMI_L7_ID, 0)
+#define M4U_PORT_L7_WPE_RDMA_1			MTK_M4U_ID(SMI_L7_ID, 1)
+#define M4U_PORT_L7_WPE_WDMA_0			MTK_M4U_ID(SMI_L7_ID, 2)
+
+/* LARB 9 -- IMG-M */
+#define M4U_PORT_L9_IMGI_T1_A			MTK_M4U_ID(SMI_L9_ID, 0)
+#define M4U_PORT_L9_UFDI_T1_A			MTK_M4U_ID(SMI_L9_ID, 1)
+#define M4U_PORT_L9_IMGBI_T1_A			MTK_M4U_ID(SMI_L9_ID, 2)
+#define M4U_PORT_L9_IMGCI_T1_A			MTK_M4U_ID(SMI_L9_ID, 3)
+#define M4U_PORT_L9_SMTI_T1_A			MTK_M4U_ID(SMI_L9_ID, 4)
+#define M4U_PORT_L9_SMTI_T4_A			MTK_M4U_ID(SMI_L9_ID, 5)
+#define M4U_PORT_L9_TNCSTI_T1_A			MTK_M4U_ID(SMI_L9_ID, 6)
+#define M4U_PORT_L9_TNCSTI_T4_A			MTK_M4U_ID(SMI_L9_ID, 7)
+#define M4U_PORT_L9_YUVO_T1_A			MTK_M4U_ID(SMI_L9_ID, 8)
+#define M4U_PORT_L9_YUVBO_T1_A			MTK_M4U_ID(SMI_L9_ID, 9)
+#define M4U_PORT_L9_YUVCO_T1_A			MTK_M4U_ID(SMI_L9_ID, 10)
+#define M4U_PORT_L9_TIMGO_T1_A			MTK_M4U_ID(SMI_L9_ID, 11)
+#define M4U_PORT_L9_YUVO_T2_A			MTK_M4U_ID(SMI_L9_ID, 12)
+#define M4U_PORT_L9_YUVO_T5_A			MTK_M4U_ID(SMI_L9_ID, 13)
+#define M4U_PORT_L9_IMGI_T1_B			MTK_M4U_ID(SMI_L9_ID, 14)
+#define M4U_PORT_L9_IMGBI_T1_B			MTK_M4U_ID(SMI_L9_ID, 15)
+#define M4U_PORT_L9_IMGCI_T1_B			MTK_M4U_ID(SMI_L9_ID, 16)
+#define M4U_PORT_L9_SMTI_T4_B			MTK_M4U_ID(SMI_L9_ID, 17)
+#define M4U_PORT_L9_TNCSO_T1_A			MTK_M4U_ID(SMI_L9_ID, 18)
+#define M4U_PORT_L9_SMTO_T1_A			MTK_M4U_ID(SMI_L9_ID, 19)
+#define M4U_PORT_L9_SMTO_T4_A			MTK_M4U_ID(SMI_L9_ID, 20)
+#define M4U_PORT_L9_TNCSTO_T1_A			MTK_M4U_ID(SMI_L9_ID, 21)
+#define M4U_PORT_L9_YUVO_T2_B			MTK_M4U_ID(SMI_L9_ID, 22)
+#define M4U_PORT_L9_YUVO_T5_B			MTK_M4U_ID(SMI_L9_ID, 23)
+#define M4U_PORT_L9_SMTO_T4_B			MTK_M4U_ID(SMI_L9_ID, 24)
+
+/* LARB 10 -- IMG-D */
+#define M4U_PORT_L10_IMGI_D1			MTK_M4U_ID(SMI_L10_ID, 0)
+#define M4U_PORT_L10_IMGBI_D1			MTK_M4U_ID(SMI_L10_ID, 1)
+#define M4U_PORT_L10_IMGCI_D1			MTK_M4U_ID(SMI_L10_ID, 2)
+#define M4U_PORT_L10_IMGDI_D1			MTK_M4U_ID(SMI_L10_ID, 3)
+#define M4U_PORT_L10_DEPI_D1			MTK_M4U_ID(SMI_L10_ID, 4)
+#define M4U_PORT_L10_DMGI_D1			MTK_M4U_ID(SMI_L10_ID, 5)
+#define M4U_PORT_L10_SMTI_D1			MTK_M4U_ID(SMI_L10_ID, 6)
+#define M4U_PORT_L10_RECI_D1			MTK_M4U_ID(SMI_L10_ID, 7)
+#define M4U_PORT_L10_RECI_D1_N			MTK_M4U_ID(SMI_L10_ID, 8)
+#define M4U_PORT_L10_TNRWI_D1			MTK_M4U_ID(SMI_L10_ID, 9)
+#define M4U_PORT_L10_TNRCI_D1			MTK_M4U_ID(SMI_L10_ID, 10)
+#define M4U_PORT_L10_TNRCI_D1_N			MTK_M4U_ID(SMI_L10_ID, 11)
+#define M4U_PORT_L10_IMG4O_D1			MTK_M4U_ID(SMI_L10_ID, 12)
+#define M4U_PORT_L10_IMG4BO_D1			MTK_M4U_ID(SMI_L10_ID, 13)
+#define M4U_PORT_L10_SMTI_D8			MTK_M4U_ID(SMI_L10_ID, 14)
+#define M4U_PORT_L10_SMTO_D1			MTK_M4U_ID(SMI_L10_ID, 15)
+#define M4U_PORT_L10_TNRMO_D1			MTK_M4U_ID(SMI_L10_ID, 16)
+#define M4U_PORT_L10_TNRMO_D1_N			MTK_M4U_ID(SMI_L10_ID, 17)
+#define M4U_PORT_L10_SMTO_D8			MTK_M4U_ID(SMI_L10_ID, 18)
+#define M4U_PORT_L10_DBGO_D1			MTK_M4U_ID(SMI_L10_ID, 19)
+
+/* LARB 11A -- IMG-D */
+#define M4U_PORT_L11A_WPE_RDMA_0		MTK_M4U_ID(SMI_L11A_ID, 0)
+#define M4U_PORT_L11A_WPE_RDMA_1		MTK_M4U_ID(SMI_L11A_ID, 1)
+#define M4U_PORT_L11A_WPE_RDMA_4P_0		MTK_M4U_ID(SMI_L11A_ID, 2)
+#define M4U_PORT_L11A_WPE_RDMA_4P_1		MTK_M4U_ID(SMI_L11A_ID, 3)
+#define M4U_PORT_L11A_WPE_CQ0			MTK_M4U_ID(SMI_L11A_ID, 4)
+#define M4U_PORT_L11A_WPE_CQ1			MTK_M4U_ID(SMI_L11A_ID, 5)
+#define M4U_PORT_L11A_PIMGI_P1			MTK_M4U_ID(SMI_L11A_ID, 6)
+#define M4U_PORT_L11A_PIMGBI_P1			MTK_M4U_ID(SMI_L11A_ID, 7)
+#define M4U_PORT_L11A_PIMGCI_P1			MTK_M4U_ID(SMI_L11A_ID, 8)
+#define M4U_PORT_L11A_IMGI_T1_C			MTK_M4U_ID(SMI_L11A_ID, 9)
+#define M4U_PORT_L11A_IMGBI_T1_C		MTK_M4U_ID(SMI_L11A_ID, 10)
+#define M4U_PORT_L11A_IMGCI_T1_C		MTK_M4U_ID(SMI_L11A_ID, 11)
+#define M4U_PORT_L11A_SMTI_T1_C			MTK_M4U_ID(SMI_L11A_ID, 12)
+#define M4U_PORT_L11A_SMTI_T4_C			MTK_M4U_ID(SMI_L11A_ID, 13)
+#define M4U_PORT_L11A_SMTI_T6_C			MTK_M4U_ID(SMI_L11A_ID, 14)
+#define M4U_PORT_L11A_YUVO_T1_C			MTK_M4U_ID(SMI_L11A_ID, 15)
+#define M4U_PORT_L11A_YUVBO_T1_C		MTK_M4U_ID(SMI_L11A_ID, 16)
+#define M4U_PORT_L11A_YUVCO_T1_C		MTK_M4U_ID(SMI_L11A_ID, 17)
+#define M4U_PORT_L11A_WPE_WDMA_0		MTK_M4U_ID(SMI_L11A_ID, 18)
+#define M4U_PORT_L11A_WPE_WDMA_4P_0		MTK_M4U_ID(SMI_L11A_ID, 19)
+#define M4U_PORT_L11A_WROT_P1			MTK_M4U_ID(SMI_L11A_ID, 20)
+#define M4U_PORT_L11A_TCCSO_P1			MTK_M4U_ID(SMI_L11A_ID, 21)
+#define M4U_PORT_L11A_TCCSI_P1			MTK_M4U_ID(SMI_L11A_ID, 22)
+#define M4U_PORT_L11A_TIMGO_T1_C		MTK_M4U_ID(SMI_L11A_ID, 23)
+#define M4U_PORT_L11A_YUVO_T2_C			MTK_M4U_ID(SMI_L11A_ID, 24)
+#define M4U_PORT_L11A_YUVO_T5_C			MTK_M4U_ID(SMI_L11A_ID, 25)
+#define M4U_PORT_L11A_SMTO_T1_C			MTK_M4U_ID(SMI_L11A_ID, 26)
+#define M4U_PORT_L11A_SMTO_T4_C			MTK_M4U_ID(SMI_L11A_ID, 27)
+#define M4U_PORT_L11A_SMTO_T6_C			MTK_M4U_ID(SMI_L11A_ID, 28)
+#define M4U_PORT_L11A_DBGO_T1_C			MTK_M4U_ID(SMI_L11A_ID, 29)
+
+/* LARB 11B -- IMG-D */
+#define M4U_PORT_L11B_WPE_RDMA_0		MTK_M4U_ID(SMI_L11B_ID, 0)
+#define M4U_PORT_L11B_WPE_RDMA_1		MTK_M4U_ID(SMI_L11B_ID, 1)
+#define M4U_PORT_L11B_WPE_RDMA_4P_0		MTK_M4U_ID(SMI_L11B_ID, 2)
+#define M4U_PORT_L11B_WPE_RDMA_4P_1		MTK_M4U_ID(SMI_L11B_ID, 3)
+#define M4U_PORT_L11B_WPE_CQ0			MTK_M4U_ID(SMI_L11B_ID, 4)
+#define M4U_PORT_L11B_WPE_CQ1			MTK_M4U_ID(SMI_L11B_ID, 5)
+#define M4U_PORT_L11B_PIMGI_P1			MTK_M4U_ID(SMI_L11B_ID, 6)
+#define M4U_PORT_L11B_PIMGBI_P1			MTK_M4U_ID(SMI_L11B_ID, 7)
+#define M4U_PORT_L11B_PIMGCI_P1			MTK_M4U_ID(SMI_L11B_ID, 8)
+#define M4U_PORT_L11B_IMGI_T1_C			MTK_M4U_ID(SMI_L11B_ID, 9)
+#define M4U_PORT_L11B_IMGBI_T1_C		MTK_M4U_ID(SMI_L11B_ID, 10)
+#define M4U_PORT_L11B_IMGCI_T1_C		MTK_M4U_ID(SMI_L11B_ID, 11)
+#define M4U_PORT_L11B_SMTI_T1_C			MTK_M4U_ID(SMI_L11B_ID, 12)
+#define M4U_PORT_L11B_SMTI_T4_C			MTK_M4U_ID(SMI_L11B_ID, 13)
+#define M4U_PORT_L11B_SMTI_T6_C			MTK_M4U_ID(SMI_L11B_ID, 14)
+#define M4U_PORT_L11B_YUVO_T1_C			MTK_M4U_ID(SMI_L11B_ID, 15)
+#define M4U_PORT_L11B_YUVBO_T1_C		MTK_M4U_ID(SMI_L11B_ID, 16)
+#define M4U_PORT_L11B_YUVCO_T1_C		MTK_M4U_ID(SMI_L11B_ID, 17)
+#define M4U_PORT_L11B_WPE_WDMA_0		MTK_M4U_ID(SMI_L11B_ID, 18)
+#define M4U_PORT_L11B_WPE_WDMA_4P_0		MTK_M4U_ID(SMI_L11B_ID, 19)
+#define M4U_PORT_L11B_WROT_P1			MTK_M4U_ID(SMI_L11B_ID, 20)
+#define M4U_PORT_L11B_TCCSO_P1			MTK_M4U_ID(SMI_L11B_ID, 21)
+#define M4U_PORT_L11B_TCCSI_P1			MTK_M4U_ID(SMI_L11B_ID, 22)
+#define M4U_PORT_L11B_TIMGO_T1_C		MTK_M4U_ID(SMI_L11B_ID, 23)
+#define M4U_PORT_L11B_YUVO_T2_C			MTK_M4U_ID(SMI_L11B_ID, 24)
+#define M4U_PORT_L11B_YUVO_T5_C			MTK_M4U_ID(SMI_L11B_ID, 25)
+#define M4U_PORT_L11B_SMTO_T1_C			MTK_M4U_ID(SMI_L11B_ID, 26)
+#define M4U_PORT_L11B_SMTO_T4_C			MTK_M4U_ID(SMI_L11B_ID, 27)
+#define M4U_PORT_L11B_SMTO_T6_C			MTK_M4U_ID(SMI_L11B_ID, 28)
+#define M4U_PORT_L11B_DBGO_T1_C			MTK_M4U_ID(SMI_L11B_ID, 29)
+
+/* LARB 11C -- IMG-D */
+#define M4U_PORT_L11C_WPE_RDMA_0		MTK_M4U_ID(SMI_L11C_ID, 0)
+#define M4U_PORT_L11C_WPE_RDMA_1		MTK_M4U_ID(SMI_L11C_ID, 1)
+#define M4U_PORT_L11C_WPE_RDMA_4P_0		MTK_M4U_ID(SMI_L11C_ID, 2)
+#define M4U_PORT_L11C_WPE_RDMA_4P_1		MTK_M4U_ID(SMI_L11C_ID, 3)
+#define M4U_PORT_L11C_WPE_CQ0			MTK_M4U_ID(SMI_L11C_ID, 4)
+#define M4U_PORT_L11C_WPE_CQ1			MTK_M4U_ID(SMI_L11C_ID, 5)
+#define M4U_PORT_L11C_PIMGI_P1			MTK_M4U_ID(SMI_L11C_ID, 6)
+#define M4U_PORT_L11C_PIMGBI_P1			MTK_M4U_ID(SMI_L11C_ID, 7)
+#define M4U_PORT_L11C_PIMGCI_P1			MTK_M4U_ID(SMI_L11C_ID, 8)
+#define M4U_PORT_L11C_IMGI_T1_C			MTK_M4U_ID(SMI_L11C_ID, 9)
+#define M4U_PORT_L11C_IMGBI_T1_C		MTK_M4U_ID(SMI_L11C_ID, 10)
+#define M4U_PORT_L11C_IMGCI_T1_C		MTK_M4U_ID(SMI_L11C_ID, 11)
+#define M4U_PORT_L11C_SMTI_T1_C			MTK_M4U_ID(SMI_L11C_ID, 12)
+#define M4U_PORT_L11C_SMTI_T4_C			MTK_M4U_ID(SMI_L11C_ID, 13)
+#define M4U_PORT_L11C_SMTI_T6_C			MTK_M4U_ID(SMI_L11C_ID, 14)
+#define M4U_PORT_L11C_YUVO_T1_C			MTK_M4U_ID(SMI_L11C_ID, 15)
+#define M4U_PORT_L11C_YUVBO_T1_C		MTK_M4U_ID(SMI_L11C_ID, 16)
+#define M4U_PORT_L11C_YUVCO_T1_C		MTK_M4U_ID(SMI_L11C_ID, 17)
+#define M4U_PORT_L11C_WPE_WDMA_0		MTK_M4U_ID(SMI_L11C_ID, 18)
+#define M4U_PORT_L11C_WPE_WDMA_4P_0		MTK_M4U_ID(SMI_L11C_ID, 19)
+#define M4U_PORT_L11C_WROT_P1			MTK_M4U_ID(SMI_L11C_ID, 20)
+#define M4U_PORT_L11C_TCCSO_P1			MTK_M4U_ID(SMI_L11C_ID, 21)
+#define M4U_PORT_L11C_TCCSI_P1			MTK_M4U_ID(SMI_L11C_ID, 22)
+#define M4U_PORT_L11C_TIMGO_T1_C		MTK_M4U_ID(SMI_L11C_ID, 23)
+#define M4U_PORT_L11C_YUVO_T2_C			MTK_M4U_ID(SMI_L11C_ID, 24)
+#define M4U_PORT_L11C_YUVO_T5_C			MTK_M4U_ID(SMI_L11C_ID, 25)
+#define M4U_PORT_L11C_SMTO_T1_C			MTK_M4U_ID(SMI_L11C_ID, 26)
+#define M4U_PORT_L11C_SMTO_T4_C			MTK_M4U_ID(SMI_L11C_ID, 27)
+#define M4U_PORT_L11C_SMTO_T6_C			MTK_M4U_ID(SMI_L11C_ID, 28)
+#define M4U_PORT_L11C_DBGO_T1_C			MTK_M4U_ID(SMI_L11C_ID, 29)
+
+/* LARB 12 -- IPE */
+#define M4U_PORT_L12_FDVT_RDA_0			MTK_M4U_ID(SMI_L12_ID, 0)
+#define M4U_PORT_L12_FDVT_RDB_0			MTK_M4U_ID(SMI_L12_ID, 1)
+#define M4U_PORT_L12_FDVT_WRA_0			MTK_M4U_ID(SMI_L12_ID, 2)
+#define M4U_PORT_L12_FDVT_WRB_0			MTK_M4U_ID(SMI_L12_ID, 3)
+#define M4U_PORT_L12_ME_RDMA			MTK_M4U_ID(SMI_L12_ID, 4)
+#define M4U_PORT_L12_ME_WDMA			MTK_M4U_ID(SMI_L12_ID, 5)
+#define M4U_PORT_L12_DVS_RDMA			MTK_M4U_ID(SMI_L12_ID, 6)
+#define M4U_PORT_L12_DVS_WDMA			MTK_M4U_ID(SMI_L12_ID, 7)
+#define M4U_PORT_L12_DVP_RDMA			MTK_M4U_ID(SMI_L12_ID, 8)
+#define M4U_PORT_L12_DVP_WDMA			MTK_M4U_ID(SMI_L12_ID, 9)
+#define M4U_PORT_L12_FDVT_2ND_RDA_0		MTK_M4U_ID(SMI_L12_ID, 10)
+#define M4U_PORT_L12_FDVT_2ND_RDB_0		MTK_M4U_ID(SMI_L12_ID, 11)
+#define M4U_PORT_L12_FDVT_2ND_WRA_0		MTK_M4U_ID(SMI_L12_ID, 12)
+#define M4U_PORT_L12_FDVT_2ND_WRB_0		MTK_M4U_ID(SMI_L12_ID, 13)
+#define M4U_PORT_L12_DHZEI_E1			MTK_M4U_ID(SMI_L12_ID, 14)
+#define M4U_PORT_L12_DHZEO_E1			MTK_M4U_ID(SMI_L12_ID, 15)
+
+/* LARB 13 -- CAM-1 */
+#define M4U_PORT_L13_CAMSV_CQI_E1		MTK_M4U_ID(SMI_L13_ID, 0)
+#define M4U_PORT_L13_CAMSV_CQI_E2		MTK_M4U_ID(SMI_L13_ID, 1)
+#define M4U_PORT_L13_GCAMSV_A_IMGO_1		MTK_M4U_ID(SMI_L13_ID, 2)
+#define M4U_PORT_L13_GCAMSV_C_IMGO_1		MTK_M4U_ID(SMI_L13_ID, 3)
+#define M4U_PORT_L13_GCAMSV_A_IMGO_2		MTK_M4U_ID(SMI_L13_ID, 4)
+#define M4U_PORT_L13_GCAMSV_C_IMGO_2		MTK_M4U_ID(SMI_L13_ID, 5)
+#define M4U_PORT_L13_PDAI_A_0			MTK_M4U_ID(SMI_L13_ID, 6)
+#define M4U_PORT_L13_PDAI_A_1			MTK_M4U_ID(SMI_L13_ID, 7)
+#define M4U_PORT_L13_CAMSV_CQI_B_E1		MTK_M4U_ID(SMI_L13_ID, 8)
+#define M4U_PORT_L13_CAMSV_CQI_B_E2		MTK_M4U_ID(SMI_L13_ID, 9)
+#define M4U_PORT_L13_CAMSV_CQI_C_E1		MTK_M4U_ID(SMI_L13_ID, 10)
+#define M4U_PORT_L13_CAMSV_CQI_C_E2		MTK_M4U_ID(SMI_L13_ID, 11)
+#define M4U_PORT_L13_GCAMSV_E_IMGO_1		MTK_M4U_ID(SMI_L13_ID, 12)
+#define M4U_PORT_L13_GCAMSV_E_IMGO_2		MTK_M4U_ID(SMI_L13_ID, 13)
+#define M4U_PORT_L13_GCAMSV_A_UFEO_1		MTK_M4U_ID(SMI_L13_ID, 14)
+#define M4U_PORT_L13_GCAMSV_C_UFEO_1		MTK_M4U_ID(SMI_L13_ID, 15)
+#define M4U_PORT_L13_GCAMSV_A_UFEO_2		MTK_M4U_ID(SMI_L13_ID, 16)
+#define M4U_PORT_L13_GCAMSV_C_UFEO_2		MTK_M4U_ID(SMI_L13_ID, 17)
+#define M4U_PORT_L13_GCAMSV_E_UFEO_1		MTK_M4U_ID(SMI_L13_ID, 18)
+#define M4U_PORT_L13_GCAMSV_E_UFEO_2		MTK_M4U_ID(SMI_L13_ID, 19)
+#define M4U_PORT_L13_GCAMSV_G_IMGO_1		MTK_M4U_ID(SMI_L13_ID, 20)
+#define M4U_PORT_L13_GCAMSV_G_IMGO_2		MTK_M4U_ID(SMI_L13_ID, 21)
+#define M4U_PORT_L13_PDAO_A			MTK_M4U_ID(SMI_L13_ID, 22)
+#define M4U_PORT_L13_PDAO_C			MTK_M4U_ID(SMI_L13_ID, 23)
+
+/* LARB 14 -- CAM-1 */
+#define M4U_PORT_L14_GCAMSV_B_IMGO_1		MTK_M4U_ID(SMI_L14_ID, 0)
+#define M4U_PORT_L14_GCAMSV_B_IMGO_2		MTK_M4U_ID(SMI_L14_ID, 1)
+#define M4U_PORT_L14_SCAMSV_A_IMGO_1		MTK_M4U_ID(SMI_L14_ID, 2)
+#define M4U_PORT_L14_SCAMSV_A_IMGO_2		MTK_M4U_ID(SMI_L14_ID, 3)
+#define M4U_PORT_L14_SCAMSV_B_IMGO_1		MTK_M4U_ID(SMI_L14_ID, 4)
+#define M4U_PORT_L14_SCAMSV_B_IMGO_2		MTK_M4U_ID(SMI_L14_ID, 5)
+#define M4U_PORT_L14_PDAI_B_0			MTK_M4U_ID(SMI_L14_ID, 6)
+#define M4U_PORT_L14_PDAI_B_1			MTK_M4U_ID(SMI_L14_ID, 7)
+#define M4U_PORT_L14_GCAMSV_D_IMGO_1		MTK_M4U_ID(SMI_L14_ID, 8)
+#define M4U_PORT_L14_GCAMSV_D_IMGO_2		MTK_M4U_ID(SMI_L14_ID, 9)
+#define M4U_PORT_L14_GCAMSV_F_IMGO_1		MTK_M4U_ID(SMI_L14_ID, 10)
+#define M4U_PORT_L14_GCAMSV_F_IMGO_2		MTK_M4U_ID(SMI_L14_ID, 11)
+#define M4U_PORT_L14_GCAMSV_H_IMGO_1		MTK_M4U_ID(SMI_L14_ID, 12)
+#define M4U_PORT_L14_GCAMSV_H_IMGO_2		MTK_M4U_ID(SMI_L14_ID, 13)
+#define M4U_PORT_L14_GCAMSV_B_UFEO_1		MTK_M4U_ID(SMI_L14_ID, 14)
+#define M4U_PORT_L14_GCAMSV_B_UFEO_2		MTK_M4U_ID(SMI_L14_ID, 15)
+#define M4U_PORT_L14_GCAMSV_D_UFEO_1		MTK_M4U_ID(SMI_L14_ID, 16)
+#define M4U_PORT_L14_GCAMSV_D_UFEO_2		MTK_M4U_ID(SMI_L14_ID, 17)
+#define M4U_PORT_L14_PDAO_B			MTK_M4U_ID(SMI_L14_ID, 18)
+#define M4U_PORT_L14_IPUI			MTK_M4U_ID(SMI_L14_ID, 19)
+#define M4U_PORT_L14_IPUO			MTK_M4U_ID(SMI_L14_ID, 20)
+#define M4U_PORT_L14_IPU3O			MTK_M4U_ID(SMI_L14_ID, 21)
+#define M4U_PORT_L14_FAKE			MTK_M4U_ID(SMI_L14_ID, 22)
+
+/* LARB 15 -- IMG-D */
+#define M4U_PORT_L15_VIPI_D1			MTK_M4U_ID(SMI_L15_ID, 0)
+#define M4U_PORT_L15_VIPBI_D1			MTK_M4U_ID(SMI_L15_ID, 1)
+#define M4U_PORT_L15_SMTI_D6			MTK_M4U_ID(SMI_L15_ID, 2)
+#define M4U_PORT_L15_TNCSTI_D1			MTK_M4U_ID(SMI_L15_ID, 3)
+#define M4U_PORT_L15_TNCSTI_D4			MTK_M4U_ID(SMI_L15_ID, 4)
+#define M4U_PORT_L15_SMTI_D4			MTK_M4U_ID(SMI_L15_ID, 5)
+#define M4U_PORT_L15_IMG3O_D1			MTK_M4U_ID(SMI_L15_ID, 6)
+#define M4U_PORT_L15_IMG3BO_D1			MTK_M4U_ID(SMI_L15_ID, 7)
+#define M4U_PORT_L15_IMG3CO_D1			MTK_M4U_ID(SMI_L15_ID, 8)
+#define M4U_PORT_L15_IMG2O_D1			MTK_M4U_ID(SMI_L15_ID, 9)
+#define M4U_PORT_L15_SMTI_D9			MTK_M4U_ID(SMI_L15_ID, 10)
+#define M4U_PORT_L15_SMTO_D4			MTK_M4U_ID(SMI_L15_ID, 11)
+#define M4U_PORT_L15_FEO_D1			MTK_M4U_ID(SMI_L15_ID, 12)
+#define M4U_PORT_L15_TNCSO_D1			MTK_M4U_ID(SMI_L15_ID, 13)
+#define M4U_PORT_L15_TNCSTO_D1			MTK_M4U_ID(SMI_L15_ID, 14)
+#define M4U_PORT_L15_SMTO_D6			MTK_M4U_ID(SMI_L15_ID, 15)
+#define M4U_PORT_L15_SMTO_D9			MTK_M4U_ID(SMI_L15_ID, 16)
+#define M4U_PORT_L15_TNCO_D1			MTK_M4U_ID(SMI_L15_ID, 17)
+#define M4U_PORT_L15_TNCO_D1_N			MTK_M4U_ID(SMI_L15_ID, 18)
+
+/* LARB 16A -- CAM */
+#define M4U_PORT_L16A_IMGO_R1			MTK_M4U_ID(SMI_L16A_ID, 0)
+#define M4U_PORT_L16A_CQI_R1			MTK_M4U_ID(SMI_L16A_ID, 1)
+#define M4U_PORT_L16A_CQI_R2			MTK_M4U_ID(SMI_L16A_ID, 2)
+#define M4U_PORT_L16A_BPCI_R1			MTK_M4U_ID(SMI_L16A_ID, 3)
+#define M4U_PORT_L16A_LSCI_R1			MTK_M4U_ID(SMI_L16A_ID, 4)
+#define M4U_PORT_L16A_RAWI_R2			MTK_M4U_ID(SMI_L16A_ID, 5)
+#define M4U_PORT_L16A_RAWI_R3			MTK_M4U_ID(SMI_L16A_ID, 6)
+#define M4U_PORT_L16A_UFDI_R2			MTK_M4U_ID(SMI_L16A_ID, 7)
+#define M4U_PORT_L16A_UFDI_R3			MTK_M4U_ID(SMI_L16A_ID, 8)
+#define M4U_PORT_L16A_RAWI_R4			MTK_M4U_ID(SMI_L16A_ID, 9)
+#define M4U_PORT_L16A_RAWI_R5			MTK_M4U_ID(SMI_L16A_ID, 10)
+#define M4U_PORT_L16A_AAI_R1			MTK_M4U_ID(SMI_L16A_ID, 11)
+#define M4U_PORT_L16A_UFDI_R5			MTK_M4U_ID(SMI_L16A_ID, 12)
+#define M4U_PORT_L16A_FHO_R1			MTK_M4U_ID(SMI_L16A_ID, 13)
+#define M4U_PORT_L16A_AAO_R1			MTK_M4U_ID(SMI_L16A_ID, 14)
+#define M4U_PORT_L16A_TSFSO_R1			MTK_M4U_ID(SMI_L16A_ID, 15)
+#define M4U_PORT_L16A_FLKO_R1			MTK_M4U_ID(SMI_L16A_ID, 16)
+
+/* LARB 16B -- CAM */
+#define M4U_PORT_L16B_IMGO_R1			MTK_M4U_ID(SMI_L16B_ID, 0)
+#define M4U_PORT_L16B_CQI_R1			MTK_M4U_ID(SMI_L16B_ID, 1)
+#define M4U_PORT_L16B_CQI_R2			MTK_M4U_ID(SMI_L16B_ID, 2)
+#define M4U_PORT_L16B_BPCI_R1			MTK_M4U_ID(SMI_L16B_ID, 3)
+#define M4U_PORT_L16B_LSCI_R1			MTK_M4U_ID(SMI_L16B_ID, 4)
+#define M4U_PORT_L16B_RAWI_R2			MTK_M4U_ID(SMI_L16B_ID, 5)
+#define M4U_PORT_L16B_RAWI_R3			MTK_M4U_ID(SMI_L16B_ID, 6)
+#define M4U_PORT_L16B_UFDI_R2			MTK_M4U_ID(SMI_L16B_ID, 7)
+#define M4U_PORT_L16B_UFDI_R3			MTK_M4U_ID(SMI_L16B_ID, 8)
+#define M4U_PORT_L16B_RAWI_R4			MTK_M4U_ID(SMI_L16B_ID, 9)
+#define M4U_PORT_L16B_RAWI_R5			MTK_M4U_ID(SMI_L16B_ID, 10)
+#define M4U_PORT_L16B_AAI_R1			MTK_M4U_ID(SMI_L16B_ID, 11)
+#define M4U_PORT_L16B_UFDI_R5			MTK_M4U_ID(SMI_L16B_ID, 12)
+#define M4U_PORT_L16B_FHO_R1			MTK_M4U_ID(SMI_L16B_ID, 13)
+#define M4U_PORT_L16B_AAO_R1			MTK_M4U_ID(SMI_L16B_ID, 14)
+#define M4U_PORT_L16B_TSFSO_R1			MTK_M4U_ID(SMI_L16B_ID, 15)
+#define M4U_PORT_L16B_FLKO_R1			MTK_M4U_ID(SMI_L16B_ID, 16)
+
+/* LARB 17A -- CAM */
+#define M4U_PORT_L17A_YUVO_R1			MTK_M4U_ID(SMI_L17A_ID, 0)
+#define M4U_PORT_L17A_YUVO_R3			MTK_M4U_ID(SMI_L17A_ID, 1)
+#define M4U_PORT_L17A_YUVCO_R1			MTK_M4U_ID(SMI_L17A_ID, 2)
+#define M4U_PORT_L17A_YUVO_R2			MTK_M4U_ID(SMI_L17A_ID, 3)
+#define M4U_PORT_L17A_RZH1N2TO_R1		MTK_M4U_ID(SMI_L17A_ID, 4)
+#define M4U_PORT_L17A_DRZS4NO_R1		MTK_M4U_ID(SMI_L17A_ID, 5)
+#define M4U_PORT_L17A_TNCSO_R1			MTK_M4U_ID(SMI_L17A_ID, 6)
+
+/* LARB 17B -- CAM */
+#define M4U_PORT_L17B_YUVO_R1			MTK_M4U_ID(SMI_L17B_ID, 0)
+#define M4U_PORT_L17B_YUVO_R3			MTK_M4U_ID(SMI_L17B_ID, 1)
+#define M4U_PORT_L17B_YUVCO_R1			MTK_M4U_ID(SMI_L17B_ID, 2)
+#define M4U_PORT_L17B_YUVO_R2			MTK_M4U_ID(SMI_L17B_ID, 3)
+#define M4U_PORT_L17B_RZH1N2TO_R1		MTK_M4U_ID(SMI_L17B_ID, 4)
+#define M4U_PORT_L17B_DRZS4NO_R1		MTK_M4U_ID(SMI_L17B_ID, 5)
+#define M4U_PORT_L17B_TNCSO_R1			MTK_M4U_ID(SMI_L17B_ID, 6)
+
+/* LARB 19 -- VENC */
+#define M4U_PORT_L19_VENC_RCPU			MTK_M4U_ID(SMI_L19_ID, 0)
+#define M4U_PORT_L19_VENC_REC			MTK_M4U_ID(SMI_L19_ID, 1)
+#define M4U_PORT_L19_VENC_BSDMA			MTK_M4U_ID(SMI_L19_ID, 2)
+#define M4U_PORT_L19_VENC_SV_COMV		MTK_M4U_ID(SMI_L19_ID, 3)
+#define M4U_PORT_L19_VENC_RD_COMV		MTK_M4U_ID(SMI_L19_ID, 4)
+#define M4U_PORT_L19_VENC_NBM_RDMA		MTK_M4U_ID(SMI_L19_ID, 5)
+#define M4U_PORT_L19_VENC_NBM_RDMA_LITE		MTK_M4U_ID(SMI_L19_ID, 6)
+#define M4U_PORT_L19_JPGENC_Y_RDMA		MTK_M4U_ID(SMI_L19_ID, 7)
+#define M4U_PORT_L19_JPGENC_C_RDMA		MTK_M4U_ID(SMI_L19_ID, 8)
+#define M4U_PORT_L19_JPGENC_Q_TABLE		MTK_M4U_ID(SMI_L19_ID, 9)
+#define M4U_PORT_L19_VENC_SUB_W_LUMA		MTK_M4U_ID(SMI_L19_ID, 10)
+#define M4U_PORT_L19_VENC_FCS_NBM_RDMA		MTK_M4U_ID(SMI_L19_ID, 11)
+#define M4U_PORT_L19_JPGENC_BSDMA		MTK_M4U_ID(SMI_L19_ID, 12)
+#define M4U_PORT_L19_JPGDEC_WDMA_0		MTK_M4U_ID(SMI_L19_ID, 13)
+#define M4U_PORT_L19_JPGDEC_BSDMA_0		MTK_M4U_ID(SMI_L19_ID, 14)
+#define M4U_PORT_L19_VENC_NBM_WDMA		MTK_M4U_ID(SMI_L19_ID, 15)
+#define M4U_PORT_L19_VENC_NBM_WDMA_LITE		MTK_M4U_ID(SMI_L19_ID, 16)
+#define M4U_PORT_L19_VENC_FCS_NBM_WDMA		MTK_M4U_ID(SMI_L19_ID, 17)
+#define M4U_PORT_L19_JPGDEC_WDMA_1		MTK_M4U_ID(SMI_L19_ID, 18)
+#define M4U_PORT_L19_JPGDEC_BSDMA_1		MTK_M4U_ID(SMI_L19_ID, 19)
+#define M4U_PORT_L19_JPGDEC_HUFF_OFFSET_1	MTK_M4U_ID(SMI_L19_ID, 20)
+#define M4U_PORT_L19_JPGDEC_HUFF_OFFSET_0	MTK_M4U_ID(SMI_L19_ID, 21)
+#define M4U_PORT_L19_VENC_CUR_LUMA		MTK_M4U_ID(SMI_L19_ID, 22)
+#define M4U_PORT_L19_VENC_CUR_CHROMA		MTK_M4U_ID(SMI_L19_ID, 23)
+#define M4U_PORT_L19_VENC_REF_LUMA		MTK_M4U_ID(SMI_L19_ID, 24)
+#define M4U_PORT_L19_VENC_REF_CHROMA		MTK_M4U_ID(SMI_L19_ID, 25)
+#define M4U_PORT_L19_VENC_SUB_R_LUMA		MTK_M4U_ID(SMI_L19_ID, 26)
+
+/* LARB 21 -- VDEC-CORE0 */
+#define M4U_PORT_L21_HW_VDEC_MC_EXT		MTK_M4U_ID(SMI_L21_ID, 0)
+#define M4U_PORT_L21_HW_VDEC_UFO_EXT		MTK_M4U_ID(SMI_L21_ID, 1)
+#define M4U_PORT_L21_HW_VDEC_PP_EXT		MTK_M4U_ID(SMI_L21_ID, 2)
+#define M4U_PORT_L21_HW_VDEC_PRED_RD_EXT	MTK_M4U_ID(SMI_L21_ID, 3)
+#define M4U_PORT_L21_HW_VDEC_PRED_WR_EXT	MTK_M4U_ID(SMI_L21_ID, 4)
+#define M4U_PORT_L21_HW_VDEC_PPWRAP_EXT		MTK_M4U_ID(SMI_L21_ID, 5)
+#define M4U_PORT_L21_HW_VDEC_TILE_EXT		MTK_M4U_ID(SMI_L21_ID, 6)
+#define M4U_PORT_L21_HW_VDEC_VLD_EXT		MTK_M4U_ID(SMI_L21_ID, 7)
+#define M4U_PORT_L21_HW_VDEC_VLD2_EXT		MTK_M4U_ID(SMI_L21_ID, 8)
+#define M4U_PORT_L21_HW_VDEC_AVC_MV_EXT		MTK_M4U_ID(SMI_L21_ID, 9)
+#define M4U_PORT_L21_HW_VDEC_UFO_EXT_C		MTK_M4U_ID(SMI_L21_ID, 10)
+
+/* LARB 23 -- VDEC-SOC */
+#define M4U_PORT_L23_HW_VDEC_LAT0_VLD_EXT	MTK_M4U_ID(SMI_L23_ID, 0)
+#define M4U_PORT_L23_HW_VDEC_LAT0_VLD2_EXT	MTK_M4U_ID(SMI_L23_ID, 1)
+#define M4U_PORT_L23_HW_VDEC_LAT0_AVC_MV_EXT	MTK_M4U_ID(SMI_L23_ID, 2)
+#define M4U_PORT_L23_HW_VDEC_LAT0_PRED_RD_EXT	MTK_M4U_ID(SMI_L23_ID, 3)
+#define M4U_PORT_L23_HW_VDEC_LAT0_TILE_EXT	MTK_M4U_ID(SMI_L23_ID, 4)
+#define M4U_PORT_L23_HW_VDEC_LAT0_WDMA_EXT	MTK_M4U_ID(SMI_L23_ID, 5)
+#define M4U_PORT_L23_HW_VDEC_UFO_ENC_EXT	MTK_M4U_ID(SMI_L23_ID, 6)
+#define M4U_PORT_L23_HW_VDEC_UFO_ENC_EXT_C	MTK_M4U_ID(SMI_L23_ID, 7)
+#define M4U_PORT_L23_HW_VDEC_MC_EXT_C		MTK_M4U_ID(SMI_L23_ID, 8)
+
+/* LARB 27 -- CCU */
+#define M4U_PORT_L27_CCUI			MTK_M4U_ID(SMI_L27_ID, 0)
+#define M4U_PORT_L27_CCUO			MTK_M4U_ID(SMI_L27_ID, 1)
+#define M4U_PORT_L27_CCUI2			MTK_M4U_ID(SMI_L27_ID, 2)
+#define M4U_PORT_L27_CCUO2			MTK_M4U_ID(SMI_L27_ID, 3)
+
+/* LARB 28 -- AXI-CCU */
+#define M4U_PORT_L28_CCU_AXI_0			MTK_M4U_ID(SMI_L28_ID, 0)
+
+/* infra/peri */
+#define IFR_IOMMU_PORT_PCIE_0			MTK_IFAIOMMU_PERI_ID(0)
+
+#endif
-- 
2.25.1



From chengci.xu at mediatek.com  Fri Dec 23 02:14:39 2022
From: chengci.xu at mediatek.com (Chengci.Xu)
Date: Fri, 23 Dec 2022 18:14:39 +0800
Subject: [PATCH v6 4/4] iommu/mediatek: Add MT8188 IOMMU Support
In-Reply-To: <20221223101439.494-1-chengci.xu@mediatek.com>
References: <20221223101439.494-1-chengci.xu@mediatek.com>
Message-ID: <20221223101439.494-5-chengci.xu@mediatek.com>

MT8188 has 3 IOMMU, containing 2 MM IOMMUs, one is for vdo, the other
is for vpp. and 1 INFRA IOMMU.

Signed-off-by: Chengci.Xu <chengci.xu at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Yong Wu <yong.wu at mediatek.com>
---
 drivers/iommu/mtk_iommu.c | 49 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index ec81d21e33ce..9f8917378603 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -171,6 +171,7 @@ enum mtk_iommu_plat {
 	M4U_MT8173,
 	M4U_MT8183,
 	M4U_MT8186,
+	M4U_MT8188,
 	M4U_MT8192,
 	M4U_MT8195,
 	M4U_MT8365,
@@ -1533,6 +1534,51 @@ static const struct mtk_iommu_plat_data mt8186_data_mm = {
 	.iova_region_nr = ARRAY_SIZE(mt8192_multi_dom),
 };
 
+static const struct mtk_iommu_plat_data mt8188_data_infra = {
+	.m4u_plat	  = M4U_MT8188,
+	.flags            = WR_THROT_EN | DCM_DISABLE | STD_AXI_MODE | PM_CLK_AO |
+			    MTK_IOMMU_TYPE_INFRA | IFA_IOMMU_PCIE_SUPPORT |
+			    PGTABLE_PA_35_EN | CFG_IFA_MASTER_IN_ATF,
+	.inv_sel_reg      = REG_MMU_INV_SEL_GEN2,
+	.banks_num	  = 1,
+	.banks_enable     = {true},
+	.iova_region      = single_domain,
+	.iova_region_nr   = ARRAY_SIZE(single_domain),
+};
+
+static const struct mtk_iommu_plat_data mt8188_data_vdo = {
+	.m4u_plat	= M4U_MT8188,
+	.flags          = HAS_BCLK | HAS_SUB_COMM_3BITS | OUT_ORDER_WR_EN |
+			  WR_THROT_EN | IOVA_34_EN | SHARE_PGTABLE |
+			  PGTABLE_PA_35_EN | MTK_IOMMU_TYPE_MM,
+	.hw_list        = &m4ulist,
+	.inv_sel_reg    = REG_MMU_INV_SEL_GEN2,
+	.banks_num      = 1,
+	.banks_enable   = {true},
+	.iova_region	= mt8192_multi_dom,
+	.iova_region_nr	= ARRAY_SIZE(mt8192_multi_dom),
+	.larbid_remap   = {{2}, {0}, {21}, {0}, {19}, {9, 10,
+			   11 /* 11a */, 25 /* 11c */},
+			   {13, 0, 29 /* 16b */, 30 /* 17b */, 0}, {5}},
+};
+
+static const struct mtk_iommu_plat_data mt8188_data_vpp = {
+	.m4u_plat	= M4U_MT8188,
+	.flags          = HAS_BCLK | HAS_SUB_COMM_3BITS | OUT_ORDER_WR_EN |
+			  WR_THROT_EN | IOVA_34_EN | SHARE_PGTABLE |
+			  PGTABLE_PA_35_EN | MTK_IOMMU_TYPE_MM,
+	.hw_list        = &m4ulist,
+	.inv_sel_reg    = REG_MMU_INV_SEL_GEN2,
+	.banks_num      = 1,
+	.banks_enable   = {true},
+	.iova_region	= mt8192_multi_dom,
+	.iova_region_nr	= ARRAY_SIZE(mt8192_multi_dom),
+	.larbid_remap   = {{1}, {3}, {23}, {7}, {MTK_INVALID_LARBID},
+			   {12, 15, 24 /* 11b */}, {14, MTK_INVALID_LARBID,
+			   16 /* 16a */, 17 /* 17a */, MTK_INVALID_LARBID,
+			   27, 28 /* ccu0 */, MTK_INVALID_LARBID}, {4, 6}},
+};
+
 static const struct mtk_iommu_plat_data mt8192_data = {
 	.m4u_plat       = M4U_MT8192,
 	.flags          = HAS_BCLK | HAS_SUB_COMM_2BITS | OUT_ORDER_WR_EN |
@@ -1612,6 +1658,9 @@ static const struct of_device_id mtk_iommu_of_ids[] = {
 	{ .compatible = "mediatek,mt8173-m4u", .data = &mt8173_data},
 	{ .compatible = "mediatek,mt8183-m4u", .data = &mt8183_data},
 	{ .compatible = "mediatek,mt8186-iommu-mm",    .data = &mt8186_data_mm}, /* mm: m4u */
+	{ .compatible = "mediatek,mt8188-iommu-infra", .data = &mt8188_data_infra},
+	{ .compatible = "mediatek,mt8188-iommu-vdo",   .data = &mt8188_data_vdo},
+	{ .compatible = "mediatek,mt8188-iommu-vpp",   .data = &mt8188_data_vpp},
 	{ .compatible = "mediatek,mt8192-m4u", .data = &mt8192_data},
 	{ .compatible = "mediatek,mt8195-iommu-infra", .data = &mt8195_data_infra},
 	{ .compatible = "mediatek,mt8195-iommu-vdo",   .data = &mt8195_data_vdo},
-- 
2.25.1



From chengci.xu at mediatek.com  Fri Dec 23 02:14:35 2022
From: chengci.xu at mediatek.com (Chengci.Xu)
Date: Fri, 23 Dec 2022 18:14:35 +0800
Subject: [PATCH v6 0/4] MT8188 IOMMU SUPPORT
Message-ID: <20221223101439.494-1-chengci.xu@mediatek.com>

Adds MT8188 IOMMU support.

MT8188 have 3 IOMMU HWs. 2 IOMMU HW is for multimedia, and 1 IOMMU HW
is for infra-master, like PCIe.

About the 2 MM IOMMU HW, the connection could be something like this:

        IOMMU(VDO)          IOMMU(VPP)
           |                   |
      SMI_COMMON(VDO)      SMI_COMMON(VPP)
      ---------------     ----------------
      |      |   ...      |      |     ...
    larb0 larb2  ...    larb1 larb3    ...

INFRA IOMMU does not have SMI, the master connects to IOMMU directly.

Although multiple banks supported in MT8188, we only use one of them,
which means PCIe is put in bank0 of INFRA IOMMU.

So we have two pgtable for MT8188, specifically, these two MM IOMMU HW
share a pgtable while INFRA IOMMU HW use a independent pgtable.

Another change is that we add some SMC command for INFRA master to 
enable/disable INFRA IOMMU in ATF considering security concerns.

We also adjust the flow of mtk_iommu_config to reduce indention.

changes since v6:
  - base on tag: next-20221220.
  - update commit message of patch[2/4].

changes since v5:
  - base on tag: next-20221205.
  - add flag PGTABLE_PA_35_EN for all IOMMU in MT8188.
  - modify the type of "portid_msk" from "u32" to "unsigned long".

changes since v4:
  - base on tag: next-20221018.
  - add patch[2/4] to reduce indention by adjust mtk_iommu_config flow.

changes since v3:
  - base on tag: next-20220916.
  - use license "GPL-2.0-only OR BSD-2-Clause" in bingings head file.
  - drop redundant "portid" assignment when configure infra master.
  - reduce indentation by using "else if" when config infra master.
  - update probe flow about "pericfg" for CFG_IFA_MASTER_IN_ATF.
  - drop unused "pericfg_comp_str" in mt8188_data_infra.
  - drop words like "This commit/patch".

changes since v2:
  - base on tag: next-20220831.
  - rename "mt8188-memory-port.h" to "mediatek,mt8188-memory-port.h".
  - use dual-license in "mediatek,mt8188-memory-port.h"
  - remove unnecessary "()" when define SMI_LARB_ID

changes since v1:
  - base on tag: next-20220803.
  - adds MT8188 IOMMU support.

Chengci.Xu (4):
  dt-bindings: mediatek: mt8188: Add binding for MM & INFRA IOMMU
  iommu/mediatek: Adjust mtk_iommu_config flow
  iommu/mediatek: Add enable IOMMU SMC command for INFRA master
  iommu/mediatek: Add MT8188 IOMMU Support

 .../bindings/iommu/mediatek,iommu.yaml        |  12 +-
 drivers/iommu/mtk_iommu.c                     | 113 +++-
 .../memory/mediatek,mt8188-memory-port.h      | 482 ++++++++++++++++++
 include/soc/mediatek/smi.h                    |   1 +
 4 files changed, 584 insertions(+), 24 deletions(-)
 create mode 100644 include/dt-bindings/memory/mediatek,mt8188-memory-port.h

-- 
2.25.1



From shayne.chen at mediatek.com  Fri Dec 23 02:13:48 2022
From: shayne.chen at mediatek.com (Shayne Chen)
Date: Fri, 23 Dec 2022 18:13:48 +0800
Subject: [PATCH 4/4] wifi: mt76: connac: fix POWER_CTRL command name typo
In-Reply-To: <20221223101348.11504-1-shayne.chen@mediatek.com>
References: <20221223101348.11504-1-shayne.chen@mediatek.com>
Message-ID: <20221223101348.11504-4-shayne.chen@mediatek.com>

Fix typo MCU_UNI_CMD_POWER_CREL to MCU_UNI_CMD_POWER_CTRL.

Fixes: 779d34de055e ("wifi: mt76: connac: add more unified command IDs")
Signed-off-by: Shayne Chen <shayne.chen at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h | 2 +-
 drivers/net/wireless/mediatek/mt76/mt7996/mcu.c      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
index f1e942b9a887..82fdf6d794bc 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
@@ -1198,7 +1198,7 @@ enum {
 	MCU_UNI_CMD_REPT_MUAR = 0x09,
 	MCU_UNI_CMD_WSYS_CONFIG = 0x0b,
 	MCU_UNI_CMD_REG_ACCESS = 0x0d,
-	MCU_UNI_CMD_POWER_CREL = 0x0f,
+	MCU_UNI_CMD_POWER_CTRL = 0x0f,
 	MCU_UNI_CMD_RX_HDR_TRANS = 0x12,
 	MCU_UNI_CMD_SER = 0x13,
 	MCU_UNI_CMD_TWT = 0x14,
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
index a88fc7680b1a..d781c6e0f33a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
@@ -2399,7 +2399,7 @@ mt7996_mcu_restart(struct mt76_dev *dev)
 		.power_mode = 1,
 	};
 
-	return mt76_mcu_send_msg(dev, MCU_WM_UNI_CMD(POWER_CREL), &req,
+	return mt76_mcu_send_msg(dev, MCU_WM_UNI_CMD(POWER_CTRL), &req,
 				 sizeof(req), false);
 }
 
-- 
2.25.1



From shayne.chen at mediatek.com  Fri Dec 23 02:13:48 2022
From: shayne.chen at mediatek.com (Shayne Chen)
Date: Fri, 23 Dec 2022 18:13:48 +0800
Subject: [PATCH 4/4] wifi: mt76: connac: fix POWER_CTRL command name typo
In-Reply-To: <20221223101348.11504-1-shayne.chen@mediatek.com>
References: <20221223101348.11504-1-shayne.chen@mediatek.com>
Message-ID: <20221223101348.11504-4-shayne.chen@mediatek.com>

Fix typo MCU_UNI_CMD_POWER_CREL to MCU_UNI_CMD_POWER_CTRL.

Fixes: 779d34de055e ("wifi: mt76: connac: add more unified command IDs")
Signed-off-by: Shayne Chen <shayne.chen at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h | 2 +-
 drivers/net/wireless/mediatek/mt76/mt7996/mcu.c      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
index f1e942b9a887..82fdf6d794bc 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
@@ -1198,7 +1198,7 @@ enum {
 	MCU_UNI_CMD_REPT_MUAR = 0x09,
 	MCU_UNI_CMD_WSYS_CONFIG = 0x0b,
 	MCU_UNI_CMD_REG_ACCESS = 0x0d,
-	MCU_UNI_CMD_POWER_CREL = 0x0f,
+	MCU_UNI_CMD_POWER_CTRL = 0x0f,
 	MCU_UNI_CMD_RX_HDR_TRANS = 0x12,
 	MCU_UNI_CMD_SER = 0x13,
 	MCU_UNI_CMD_TWT = 0x14,
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
index a88fc7680b1a..d781c6e0f33a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
@@ -2399,7 +2399,7 @@ mt7996_mcu_restart(struct mt76_dev *dev)
 		.power_mode = 1,
 	};
 
-	return mt76_mcu_send_msg(dev, MCU_WM_UNI_CMD(POWER_CREL), &req,
+	return mt76_mcu_send_msg(dev, MCU_WM_UNI_CMD(POWER_CTRL), &req,
 				 sizeof(req), false);
 }
 
-- 
2.25.1



From shayne.chen at mediatek.com  Fri Dec 23 02:13:47 2022
From: shayne.chen at mediatek.com (Shayne Chen)
Date: Fri, 23 Dec 2022 18:13:47 +0800
Subject: [PATCH 3/4] wifi: mt76: mt7996: do not hardcode vht beamform cap
In-Reply-To: <20221223101348.11504-1-shayne.chen@mediatek.com>
References: <20221223101348.11504-1-shayne.chen@mediatek.com>
Message-ID: <20221223101348.11504-3-shayne.chen@mediatek.com>

Use the sts variable when setting vht beamform sts cap.

Signed-off-by: Shayne Chen <shayne.chen at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7996/init.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/init.c b/drivers/net/wireless/mediatek/mt76/mt7996/init.c
index 64e8dfd06e9f..7a9692a66ed8 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/init.c
@@ -465,7 +465,7 @@ void mt7996_set_stream_vht_txbf_caps(struct mt7996_phy *phy)
 
 	*cap |= IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
 		IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE |
-		(3 << IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT);
+		FIELD_PREP(IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK, sts - 1);
 
 	*cap &= ~(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK |
 		  IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
-- 
2.25.1



From andrew at lunn.ch  Fri Dec 23 06:18:39 2022
From: andrew at lunn.ch (Andrew Lunn)
Date: Fri, 23 Dec 2022 15:18:39 +0100
Subject: [PATCH v5 1/2] stmmac: dwmac-mediatek: enable 2ns delay only for
 special cases
In-Reply-To: <20221223015029.24978-2-biao.huang@mediatek.com>
References: <20221223015029.24978-1-biao.huang@mediatek.com>
 <20221223015029.24978-2-biao.huang@mediatek.com>
Message-ID: <Y6W4vwJHG+6PI8fd@lunn.ch>

On Fri, Dec 23, 2022 at 09:50:28AM +0800, Biao Huang wrote:
> In current driver, MAC will always enable 2ns delay in RGMII mode,
> but that will lead to transmission failures for "rgmii-id"/"rgmii-txid"
> cases.
> 
> Modify the implementation of fix_mac_speed() to ensure the 2ns delay
> will only take effect for "rgmii-rxid"/"rgmii" cases, then user can
> choose phy-mode freely.

This does not seem correct. There are three ways the delays can be added:

1) The MAC
2) The PHY
3) Extra long lines on the board.

What the four RGMII modes tell you is what is needed in addition to
whatever the board provides. So it describes the combination of 1) and
2). Your board does not appear to be applying any delays, so you
should be using rgmii-id.

The MAC and PHY driver then need to decide how to add these delays,
and in most cases, the MAC does nothing, and passes phy-mode to the
PHY and the PHY adds the delay.

The MAC can add delays, but if it does, it need to mask out the delays
it added to the value passed to the PHY. Otherwise the PHY will add
the delay as well.

>  
> -	if ((phy_interface_mode_is_rgmii(priv_plat->phy_mode))) {
> +	switch (priv_plat->phy_mode) {
> +	case PHY_INTERFACE_MODE_RGMII:
> +	case PHY_INTERFACE_MODE_RGMII_RXID:
>  		/* prefer 2ns fixed delay which is controlled by TXC_PHASE_CTRL,
>  		 * when link speed is 1Gbps with RGMII interface,
>  		 * Fall back to delay macro circuit for 10/100Mbps link speed.

So this is wrong. PHY_INTERFACE_MODE_RGMII means the board is adding
the delay via long lines. You should not be added any delay at all.

For PHY_INTERFACE_MODE_RGMII_RXID, you need to mask the RXID bit from
phy_mode when connecting the MAC to the PHY. Otherwise the PHY is
going to add this delay as well.

	 Andrew


From morrownr at gmail.com  Fri Dec 23 13:36:24 2022
From: morrownr at gmail.com (Nick Morrow)
Date: Fri, 23 Dec 2022 15:36:24 -0600
Subject: [bug report} wifi: mt76: mt7612u/mt7610u - 6.1.x hard locking systems
Message-ID: <CAFktD2fRnSbNgWRRoGbQzG5_Mw7=zFJKTVBHS_3D+mNUYcv9hQ@mail.gmail.com>

Starting with kernel 6.1 rc1, mt7612u and mt7610u are hard locking
systems when connection is established. From a report this morning:

"So I'm using a MT7610U based adapter and updated to 6.1.1 in Arch
Linux and it's a complete lockup a few seconds after connecting as
other people have said, I'll use the LTS kernel (5.15) in the
meanwhile but this is probably going to get a lot of people that use
distros with newer kernels."

Background: Problem first discovered with kernel 6.1 rc1. Bug report
was seen on linux-wireless around the rc5 timeframe. This is an
additional bug report.

I don't think additional info is needed as I have tested on several
distros with various RC's of 6.1 and the problem is 100% reproducible
and unavoidable. This is a show stopper bug and will result in
widespread reports as distros upgrade to kernel 6.1.

Regards,

Nick
https://github.com/morrownr/USB-WiFi


From lorenzo at kernel.org  Fri Dec 23 15:20:35 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Sat, 24 Dec 2022 00:20:35 +0100
Subject: [bug report} wifi: mt76: mt7612u/mt7610u - 6.1.x hard locking
 systems
In-Reply-To: <CAFktD2fRnSbNgWRRoGbQzG5_Mw7=zFJKTVBHS_3D+mNUYcv9hQ@mail.gmail.com>
References: <CAFktD2fRnSbNgWRRoGbQzG5_Mw7=zFJKTVBHS_3D+mNUYcv9hQ@mail.gmail.com>
Message-ID: <Y6Y3wzSxbTG2aLAo@localhost.localdomain>

> Starting with kernel 6.1 rc1, mt7612u and mt7610u are hard locking
> systems when connection is established. From a report this morning:
> 
> "So I'm using a MT7610U based adapter and updated to 6.1.1 in Arch
> Linux and it's a complete lockup a few seconds after connecting as
> other people have said, I'll use the LTS kernel (5.15) in the
> meanwhile but this is probably going to get a lot of people that use
> distros with newer kernels."
> 
> Background: Problem first discovered with kernel 6.1 rc1. Bug report
> was seen on linux-wireless around the rc5 timeframe. This is an
> additional bug report.
> 
> I don't think additional info is needed as I have tested on several
> distros with various RC's of 6.1 and the problem is 100% reproducible
> and unavoidable. This is a show stopper bug and will result in
> widespread reports as distros upgrade to kernel 6.1.
> 
> Regards,

Hi Nick,

Can you please try the patch below?
https://patchwork.kernel.org/project/linux-wireless/patch/20221217085624.52077-1-nbd at nbd.name/

Regards,
Lorenzo

> 
> Nick
> https://github.com/morrownr/USB-WiFi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221224/2d39fb57/attachment.sig>

From sashal at kernel.org  Fri Dec 23 17:29:05 2022
From: sashal at kernel.org (Sasha Levin)
Date: Fri, 23 Dec 2022 20:29:05 -0500
Subject: [PATCH AUTOSEL 6.1 01/26] gpiolib: of: add a quirk for legacy names in Mediatek mt2701-cs42448
Message-ID: <20221224012930.392358-1-sashal@kernel.org>

From: Dmitry Torokhov <dmitry.torokhov at gmail.com>

[ Upstream commit 326c3753a6358ffab607749ea0aa95d1d0ad79b0 ]

The driver is using non-standard "i2s1-in-sel-gpio1" and
"i2s1-in-sel-gpio2" names to describe its gpios. In preparation to
converting to the standard naming (i2s1-in-sel-gpios) and switching the
driver to gpiod API add a quirk to gpiolib to keep compatibility with
existing DTSes.

Reviewed-by: Daniel Thompson <daniel.thompson at linaro.org>
Reviewed-by: Linus Walleij <linus.walleij at linaro.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov at gmail.com>
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski at linaro.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/gpio/gpiolib-of.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c
index 0e4e1291604d..cef4f6634125 100644
--- a/drivers/gpio/gpiolib-of.c
+++ b/drivers/gpio/gpiolib-of.c
@@ -488,6 +488,38 @@ static struct gpio_desc *of_find_usb_gpio(struct device_node *np,
 	return of_get_named_gpiod_flags(np, con_id, idx, of_flags);
 }
 
+static struct gpio_desc *of_find_mt2701_gpio(struct device_node *np,
+					     const char *con_id,
+					     unsigned int idx,
+					     enum of_gpio_flags *of_flags)
+{
+	struct gpio_desc *desc;
+	const char *legacy_id;
+
+	if (!IS_ENABLED(CONFIG_SND_SOC_MT2701_CS42448))
+		return ERR_PTR(-ENOENT);
+
+	if (!of_device_is_compatible(np, "mediatek,mt2701-cs42448-machine"))
+		return ERR_PTR(-ENOENT);
+
+	if (!con_id || strcmp(con_id, "i2s1-in-sel"))
+		return ERR_PTR(-ENOENT);
+
+	if (idx == 0)
+		legacy_id = "i2s1-in-sel-gpio1";
+	else if (idx == 1)
+		legacy_id = "i2s1-in-sel-gpio2";
+	else
+		return ERR_PTR(-ENOENT);
+
+	desc = of_get_named_gpiod_flags(np, legacy_id, 0, of_flags);
+	if (!gpiod_not_found(desc))
+		pr_info("%s is using legacy gpio name '%s' instead of '%s-gpios'\n",
+			of_node_full_name(np), legacy_id, con_id);
+
+	return desc;
+}
+
 typedef struct gpio_desc *(*of_find_gpio_quirk)(struct device_node *np,
 						const char *con_id,
 						unsigned int idx,
@@ -498,6 +530,7 @@ static const of_find_gpio_quirk of_find_gpio_quirks[] = {
 	of_find_regulator_gpio,
 	of_find_arizona_gpio,
 	of_find_usb_gpio,
+	of_find_mt2701_gpio,
 	NULL
 };
 
-- 
2.35.1



From lkp at intel.com  Fri Dec 23 17:47:09 2022
From: lkp at intel.com (kernel test robot)
Date: Sat, 24 Dec 2022 09:47:09 +0800
Subject: [PATCH v2 10/23] clk: mediatek: mt8173: Break down clock drivers
 and allow module build
In-Reply-To: <20221223094259.87373-11-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-11-angelogioacchino.delregno@collabora.com>
Message-ID: <202212240908.TPdipbru-lkp@intel.com>

Hi AngeloGioacchino,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on clk/clk-next]
[also build test ERROR on linus/master next-20221220]
[cannot apply to v6.1]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/AngeloGioacchino-Del-Regno/clk-mediatek-mt8192-Correctly-unregister-and-free-clocks-on-failure/20221223-174705
base:   https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
patch link:    https://lore.kernel.org/r/20221223094259.87373-11-angelogioacchino.delregno%40collabora.com
patch subject: [PATCH v2 10/23] clk: mediatek: mt8173: Break down clock drivers and allow module build
config: m68k-allmodconfig
compiler: m68k-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/c10b45573221c863575210c6c88e53c24324d3e2
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review AngeloGioacchino-Del-Regno/clk-mediatek-mt8192-Correctly-unregister-and-free-clocks-on-failure/20221223-174705
        git checkout c10b45573221c863575210c6c88e53c24324d3e2
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp at intel.com>

All errors (new ones prefixed by >>, old ones prefixed by <<):

ERROR: modpost: missing MODULE_LICENSE() in drivers/clk/mediatek/clk-mt8173-mm.o
>> ERROR: modpost: "mtk_register_reset_controller" [drivers/clk/mediatek/clk-mt8173-infracfg.ko] undefined!
ERROR: modpost: "mtk_register_reset_controller" [drivers/clk/mediatek/clk-mt8173-pericfg.ko] undefined!
>> ERROR: modpost: "cg_regs_dummy" [drivers/clk/mediatek/clk-mt8173-img.ko] undefined!
>> ERROR: modpost: "cg_regs_dummy" [drivers/clk/mediatek/clk-mt8173-vdecsys.ko] undefined!
>> ERROR: modpost: "cg_regs_dummy" [drivers/clk/mediatek/clk-mt8173-vencsys.ko] undefined!

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
-------------- next part --------------
#
# Automatically generated file; DO NOT EDIT.
# Linux/m68k 6.1.0 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="m68k-linux-gcc (GCC) 12.1.0"
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=120100
CONFIG_CLANG_VERSION=0
CONFIG_AS_IS_GNU=y
CONFIG_AS_VERSION=23800
CONFIG_LD_IS_BFD=y
CONFIG_LD_VERSION=23800
CONFIG_LLD_VERSION=0
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
CONFIG_PAHOLE_VERSION=123
CONFIG_CONSTRUCTORS=y
CONFIG_IRQ_WORK=y

#
# General setup
#
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_COMPILE_TEST=y
# CONFIG_WERROR is not set
CONFIG_LOCALVERSION=""
CONFIG_BUILD_SALT=""
CONFIG_DEFAULT_INIT=""
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y
CONFIG_POSIX_MQUEUE_SYSCTL=y
CONFIG_WATCH_QUEUE=y
CONFIG_CROSS_MEMORY_ATTACH=y
CONFIG_USELIB=y
CONFIG_AUDIT=y

#
# IRQ subsystem
#
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_INJECTION=y
CONFIG_GENERIC_IRQ_CHIP=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_SIM=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_IRQ_FASTEOI_HIERARCHY_HANDLERS=y
CONFIG_GENERIC_MSI_IRQ=y
CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
CONFIG_GENERIC_IRQ_DEBUGFS=y
# end of IRQ subsystem

CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_LEGACY_TIMER_TICK=y
CONFIG_TIME_KUNIT_TEST=m

#
# Timers subsystem
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
CONFIG_NO_HZ_IDLE=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
# end of Timers subsystem

CONFIG_BPF=y

#
# BPF subsystem
#
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
CONFIG_USERMODE_DRIVER=y
# end of BPF subsystem

CONFIG_PREEMPT_NONE_BUILD=y
CONFIG_PREEMPT_NONE=y

#
# CPU/Task time and stats accounting
#
CONFIG_TICK_CPU_ACCOUNTING=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
CONFIG_TASKSTATS=y
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_PSI=y
CONFIG_PSI_DEFAULT_DISABLED=y
# end of CPU/Task time and stats accounting

CONFIG_CPU_ISOLATION=y

#
# RCU Subsystem
#
CONFIG_TINY_RCU=y
CONFIG_RCU_EXPERT=y
CONFIG_SRCU=y
CONFIG_TINY_SRCU=y
CONFIG_TASKS_RCU_GENERIC=y
CONFIG_FORCE_TASKS_RCU=y
CONFIG_TASKS_RCU=y
CONFIG_FORCE_TASKS_RUDE_RCU=y
CONFIG_TASKS_RUDE_RCU=y
CONFIG_FORCE_TASKS_TRACE_RCU=y
CONFIG_TASKS_TRACE_RCU=y
CONFIG_RCU_NEED_SEGCBLIST=y
CONFIG_TASKS_TRACE_RCU_READ_MB=y
# end of RCU Subsystem

CONFIG_BUILD_BIN2C=y
CONFIG_IKCONFIG=m
CONFIG_IKCONFIG_PROC=y
CONFIG_IKHEADERS=m
CONFIG_LOG_BUF_SHIFT=17
CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
CONFIG_PRINTK_INDEX=y

#
# Scheduler features
#
# end of Scheduler features

CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_GCC12_NO_ARRAY_BOUNDS=y
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_CGROUPS=y
CONFIG_PAGE_COUNTER=y
CONFIG_CGROUP_FAVOR_DYNMODS=y
CONFIG_MEMCG=y
CONFIG_MEMCG_KMEM=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_RDMA=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_BPF=y
CONFIG_CGROUP_MISC=y
CONFIG_CGROUP_DEBUG=y
CONFIG_SOCK_CGROUP_DATA=y
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_SCHED_AUTOGROUP=y
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
CONFIG_RELAY=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_GZIP=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
CONFIG_RD_XZ=y
CONFIG_RD_LZO=y
CONFIG_RD_LZ4=y
CONFIG_RD_ZSTD=y
CONFIG_BOOT_CONFIG=y
CONFIG_BOOT_CONFIG_EMBED=y
CONFIG_BOOT_CONFIG_EMBED_FILE=""
CONFIG_INITRAMFS_PRESERVE_MTIME=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_HAVE_UID16=y
CONFIG_EXPERT=y
CONFIG_UID16=y
CONFIG_MULTIUSER=y
CONFIG_SGETMASK_SYSCALL=y
CONFIG_SYSFS_SYSCALL=y
CONFIG_FHANDLE=y
CONFIG_POSIX_TIMERS=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_FUTEX_PI=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_IO_URING=y
CONFIG_ADVISE_SYSCALLS=y
CONFIG_MEMBARRIER=y
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
CONFIG_KALLSYMS_BASE_RELATIVE=y
CONFIG_KCMP=y
CONFIG_EMBEDDED=y
CONFIG_PC104=y

#
# Kernel Performance Events And Counters
#
# end of Kernel Performance Events And Counters

CONFIG_SYSTEM_DATA_VERIFICATION=y
CONFIG_PROFILING=y
# end of General setup

CONFIG_M68K=y
CONFIG_CPU_BIG_ENDIAN=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_TIME_LOW_RES=y
CONFIG_NO_IOPORT_MAP=y
CONFIG_HZ=100
CONFIG_PGTABLE_LEVELS=3
CONFIG_MMU=y
CONFIG_MMU_MOTOROLA=y
CONFIG_KEXEC=y
CONFIG_BOOTINFO_PROC=y

#
# Platform setup
#

#
# Processor Type
#
CONFIG_M68KCLASSIC=y
# CONFIG_COLDFIRE is not set
CONFIG_M68020=y
CONFIG_M68030=y
CONFIG_M68040=y
CONFIG_M68060=y

#
# Processor Specific Options
#
CONFIG_M68KFPU_EMU=y
CONFIG_M68KFPU_EMU_EXTRAPREC=y
CONFIG_M68KFPU_EMU_ONLY=y
CONFIG_ADVANCED=y
CONFIG_RMW_INSNS=y
CONFIG_SINGLE_MEMORY_CHUNK=y
CONFIG_060_WRITETHROUGH=y
CONFIG_M68K_L2_CACHE=y
CONFIG_CPU_HAS_ADDRESS_SPACES=y
CONFIG_FPU=y

#
# Machine Types
#
CONFIG_AMIGA=y
CONFIG_ATARI=y
CONFIG_ATARI_KBD_CORE=y
CONFIG_MAC=y
CONFIG_APOLLO=y
CONFIG_VME=y
CONFIG_MVME147=y
CONFIG_MVME16x=y
CONFIG_BVME6000=y
CONFIG_HP300=y
CONFIG_SUN3X=y
CONFIG_Q40=y
CONFIG_VIRT=y

#
# Bus Support
#
CONFIG_DIO=y
CONFIG_NUBUS=y
CONFIG_ZORRO=y
CONFIG_AMIGA_PCMCIA=y
CONFIG_ISA=y
CONFIG_ATARI_ROM_ISA=y
CONFIG_ZORRO_NAMES=y
# end of Platform setup

#
# Kernel Features
#
# end of Kernel Features

#
# Platform devices
#
CONFIG_HEARTBEAT=y
CONFIG_PROC_HARDWARE=y
CONFIG_NATFEAT=y
CONFIG_NFBLOCK=m
CONFIG_NFCON=m
CONFIG_NFETH=m
CONFIG_ATARI_ETHERNAT=y
CONFIG_ATARI_ETHERNEC=y
# end of Platform devices

#
# Character devices
#
CONFIG_ATARI_DSP56K=m
CONFIG_AMIGA_BUILTIN_SERIAL=m
CONFIG_HPDCA=m
CONFIG_HPAPCI=m
# end of Character devices

#
# General architecture-dependent options
#
CONFIG_CRASH_CORE=y
CONFIG_KEXEC_CORE=y
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_ARCH_32BIT_OFF_T=y
CONFIG_HAVE_ASM_MODVERSIONS=y
CONFIG_MMU_GATHER_NO_RANGE=y
CONFIG_MMU_GATHER_MERGE_VMAS=y
CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
CONFIG_LTO_NONE=y
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_MODULES_USE_ELF_REL=y
CONFIG_ALTERNATE_USER_ADDRESS_SPACE=y
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
CONFIG_HAVE_ARCH_NVRAM_OPS=y
CONFIG_ISA_BUS_API=y
CONFIG_OLD_SIGSUSPEND3=y
CONFIG_OLD_SIGACTION=y
CONFIG_COMPAT_32BIT_TIME=y
CONFIG_ARCH_NO_PREEMPT=y
CONFIG_LOCK_EVENT_COUNTS=y
CONFIG_HAVE_ARCH_PFN_VALID=y

#
# GCOV-based kernel profiling
#
CONFIG_GCOV_KERNEL=y
# end of GCOV-based kernel profiling
# end of General architecture-dependent options

CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULE_SIG_FORMAT=y
CONFIG_MODULES=y
CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODULE_UNLOAD_TAINT_TRACKING=y
CONFIG_MODVERSIONS=y
CONFIG_ASM_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_FORCE=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_SHA1=y
# CONFIG_MODULE_SIG_SHA224 is not set
# CONFIG_MODULE_SIG_SHA256 is not set
# CONFIG_MODULE_SIG_SHA384 is not set
# CONFIG_MODULE_SIG_SHA512 is not set
CONFIG_MODULE_SIG_HASH="sha1"
CONFIG_MODULE_COMPRESS_NONE=y
# CONFIG_MODULE_COMPRESS_GZIP is not set
# CONFIG_MODULE_COMPRESS_XZ is not set
# CONFIG_MODULE_COMPRESS_ZSTD is not set
CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=y
CONFIG_MODPROBE_PATH="/sbin/modprobe"
CONFIG_BLOCK=y
CONFIG_BLOCK_LEGACY_AUTOLOAD=y
CONFIG_BLK_RQ_ALLOC_TIME=y
CONFIG_BLK_CGROUP_RWSTAT=y
CONFIG_BLK_DEV_BSG_COMMON=y
CONFIG_BLK_ICQ=y
CONFIG_BLK_DEV_BSGLIB=y
CONFIG_BLK_DEV_INTEGRITY=y
CONFIG_BLK_DEV_INTEGRITY_T10=m
CONFIG_BLK_DEV_ZONED=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLK_DEV_THROTTLING_LOW=y
CONFIG_BLK_WBT=y
CONFIG_BLK_WBT_MQ=y
CONFIG_BLK_CGROUP_IOLATENCY=y
CONFIG_BLK_CGROUP_FC_APPID=y
CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOPRIO=y
CONFIG_BLK_DEBUG_FS=y
CONFIG_BLK_DEBUG_FS_ZONED=y
CONFIG_BLK_SED_OPAL=y
CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
CONFIG_ACORN_PARTITION=y
CONFIG_ACORN_PARTITION_CUMANA=y
CONFIG_ACORN_PARTITION_EESOX=y
CONFIG_ACORN_PARTITION_ICS=y
CONFIG_ACORN_PARTITION_ADFS=y
CONFIG_ACORN_PARTITION_POWERTEC=y
CONFIG_ACORN_PARTITION_RISCIX=y
CONFIG_AIX_PARTITION=y
CONFIG_OSF_PARTITION=y
CONFIG_AMIGA_PARTITION=y
CONFIG_ATARI_PARTITION=y
CONFIG_MAC_PARTITION=y
CONFIG_MSDOS_PARTITION=y
CONFIG_BSD_DISKLABEL=y
CONFIG_MINIX_SUBPARTITION=y
CONFIG_SOLARIS_X86_PARTITION=y
CONFIG_UNIXWARE_DISKLABEL=y
CONFIG_LDM_PARTITION=y
CONFIG_LDM_DEBUG=y
CONFIG_SGI_PARTITION=y
CONFIG_ULTRIX_PARTITION=y
CONFIG_SUN_PARTITION=y
CONFIG_KARMA_PARTITION=y
CONFIG_EFI_PARTITION=y
CONFIG_SYSV68_PARTITION=y
CONFIG_CMDLINE_PARTITION=y
# end of Partition Types

CONFIG_BLK_MQ_VIRTIO=y
CONFIG_BLK_MQ_RDMA=y
CONFIG_BLOCK_HOLDER_DEPRECATED=y
CONFIG_BLK_MQ_STACKING=y

#
# IO Schedulers
#
CONFIG_MQ_IOSCHED_DEADLINE=y
CONFIG_MQ_IOSCHED_KYBER=m
CONFIG_IOSCHED_BFQ=m
CONFIG_BFQ_GROUP_IOSCHED=y
CONFIG_BFQ_CGROUP_DEBUG=y
# end of IO Schedulers

CONFIG_ASN1=y
CONFIG_UNINLINE_SPIN_UNLOCK=y
CONFIG_FREEZER=y

#
# Executable file formats
#
CONFIG_BINFMT_ELF=y
CONFIG_ELFCORE=y
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
CONFIG_BINFMT_SCRIPT=m
CONFIG_ARCH_HAS_BINFMT_FLAT=y
CONFIG_BINFMT_FLAT=y
CONFIG_BINFMT_FLAT_ARGVP_ENVP_ON_STACK=y
CONFIG_BINFMT_FLAT_OLD=y
CONFIG_BINFMT_ZFLAT=y
CONFIG_BINFMT_MISC=m
CONFIG_COREDUMP=y
# end of Executable file formats

#
# Memory Management options
#
CONFIG_ZPOOL=y
CONFIG_SWAP=y
CONFIG_ZSWAP=y
CONFIG_ZSWAP_DEFAULT_ON=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_842 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lzo"
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
# CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT="zbud"
CONFIG_ZBUD=y
CONFIG_Z3FOLD=m
CONFIG_ZSMALLOC=m
CONFIG_ZSMALLOC_STAT=y

#
# SLAB allocator options
#
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
CONFIG_SLAB_MERGE_DEFAULT=y
CONFIG_SLAB_FREELIST_RANDOM=y
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLUB_STATS=y
# end of SLAB allocator options

CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
CONFIG_COMPAT_BRK=y
CONFIG_FLATMEM=y
CONFIG_MEMORY_ISOLATION=y
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_MEMORY_BALLOON=y
CONFIG_BALLOON_COMPACTION=y
CONFIG_COMPACTION=y
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
CONFIG_PAGE_REPORTING=y
CONFIG_MIGRATION=y
CONFIG_CONTIG_ALLOC=y
CONFIG_MMU_NOTIFIER=y
CONFIG_KSM=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_NEED_PER_CPU_KM=y
CONFIG_FRONTSWAP=y
CONFIG_CMA=y
CONFIG_CMA_DEBUG=y
CONFIG_CMA_DEBUGFS=y
CONFIG_CMA_SYSFS=y
CONFIG_CMA_AREAS=7
CONFIG_PAGE_IDLE_FLAG=y
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y
CONFIG_ZONE_DMA=y
CONFIG_HMM_MIRROR=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_PERCPU_STATS=y
CONFIG_GUP_TEST=y
CONFIG_ANON_VMA_NAME=y
CONFIG_USERFAULTFD=y
CONFIG_LRU_GEN=y
CONFIG_LRU_GEN_ENABLED=y
CONFIG_LRU_GEN_STATS=y

#
# Data Access Monitoring
#
CONFIG_DAMON=y
CONFIG_DAMON_VADDR=y
CONFIG_DAMON_PADDR=y
CONFIG_DAMON_SYSFS=y
CONFIG_DAMON_DBGFS=y
CONFIG_DAMON_RECLAIM=y
CONFIG_DAMON_LRU_SORT=y
# end of Data Access Monitoring
# end of Memory Management options

CONFIG_NET=y
CONFIG_NET_INGRESS=y
CONFIG_NET_EGRESS=y
CONFIG_NET_REDIRECT=y
CONFIG_SKB_EXTENSIONS=y

#
# Networking options
#
CONFIG_PACKET=m
CONFIG_PACKET_DIAG=m
CONFIG_UNIX=m
CONFIG_UNIX_SCM=y
CONFIG_AF_UNIX_OOB=y
CONFIG_UNIX_DIAG=m
CONFIG_TLS=m
CONFIG_TLS_DEVICE=y
CONFIG_TLS_TOE=y
CONFIG_XFRM=y
CONFIG_XFRM_OFFLOAD=y
CONFIG_XFRM_ALGO=m
CONFIG_XFRM_USER=m
CONFIG_XFRM_INTERFACE=m
CONFIG_XFRM_SUB_POLICY=y
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_AH=m
CONFIG_XFRM_ESP=m
CONFIG_XFRM_IPCOMP=m
CONFIG_NET_KEY=m
CONFIG_NET_KEY_MIGRATE=y
CONFIG_XFRM_ESPINTCP=y
CONFIG_SMC=m
CONFIG_SMC_DIAG=m
CONFIG_XDP_SOCKETS=y
CONFIG_XDP_SOCKETS_DIAG=m
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_FIB_TRIE_STATS=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_ROUTE_CLASSID=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
CONFIG_NET_IPIP=m
CONFIG_NET_IPGRE_DEMUX=m
CONFIG_NET_IP_TUNNEL=m
CONFIG_NET_IPGRE=m
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_IP_MROUTE_COMMON=y
CONFIG_IP_MROUTE=y
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=m
CONFIG_NET_UDP_TUNNEL=m
CONFIG_NET_FOU=m
CONFIG_NET_FOU_IP_TUNNELS=y
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_ESP_OFFLOAD=m
CONFIG_INET_ESPINTCP=y
CONFIG_INET_IPCOMP=m
CONFIG_INET_TABLE_PERTURB_ORDER=16
CONFIG_INET_XFRM_TUNNEL=m
CONFIG_INET_TUNNEL=m
CONFIG_INET_DIAG=m
CONFIG_INET_TCP_DIAG=m
CONFIG_INET_UDP_DIAG=m
CONFIG_INET_RAW_DIAG=m
CONFIG_INET_DIAG_DESTROY=y
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=m
CONFIG_TCP_CONG_CUBIC=m
CONFIG_TCP_CONG_WESTWOOD=m
CONFIG_TCP_CONG_HTCP=m
CONFIG_TCP_CONG_HSTCP=m
CONFIG_TCP_CONG_HYBLA=m
CONFIG_TCP_CONG_VEGAS=m
CONFIG_TCP_CONG_NV=m
CONFIG_TCP_CONG_SCALABLE=m
CONFIG_TCP_CONG_LP=m
CONFIG_TCP_CONG_VENO=m
CONFIG_TCP_CONG_YEAH=m
CONFIG_TCP_CONG_ILLINOIS=m
CONFIG_TCP_CONG_DCTCP=m
CONFIG_TCP_CONG_CDG=m
CONFIG_TCP_CONG_BBR=m
CONFIG_DEFAULT_RENO=y
CONFIG_DEFAULT_TCP_CONG="reno"
CONFIG_TCP_MD5SIG=y
CONFIG_IPV6=m
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_ROUTE_INFO=y
CONFIG_IPV6_OPTIMISTIC_DAD=y
CONFIG_INET6_AH=m
CONFIG_INET6_ESP=m
CONFIG_INET6_ESP_OFFLOAD=m
CONFIG_INET6_ESPINTCP=y
CONFIG_INET6_IPCOMP=m
CONFIG_IPV6_MIP6=m
CONFIG_IPV6_ILA=m
CONFIG_INET6_XFRM_TUNNEL=m
CONFIG_INET6_TUNNEL=m
CONFIG_IPV6_VTI=m
CONFIG_IPV6_SIT=m
CONFIG_IPV6_SIT_6RD=y
CONFIG_IPV6_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=m
CONFIG_IPV6_GRE=m
CONFIG_IPV6_FOU=m
CONFIG_IPV6_FOU_TUNNEL=m
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
CONFIG_IPV6_MROUTE=y
CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
CONFIG_IPV6_PIMSM_V2=y
CONFIG_IPV6_SEG6_LWTUNNEL=y
CONFIG_IPV6_SEG6_HMAC=y
CONFIG_IPV6_RPL_LWTUNNEL=y
CONFIG_IPV6_IOAM6_LWTUNNEL=y
CONFIG_NETLABEL=y
CONFIG_MPTCP=y
CONFIG_INET_MPTCP_DIAG=m
CONFIG_MPTCP_KUNIT_TEST=m
CONFIG_NETWORK_SECMARK=y
CONFIG_NET_PTP_CLASSIFY=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=m

#
# Core Netfilter Configuration
#
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_EGRESS=y
CONFIG_NETFILTER_SKIP_EGRESS=y
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_FAMILY_BRIDGE=y
CONFIG_NETFILTER_FAMILY_ARP=y
CONFIG_NETFILTER_NETLINK_HOOK=m
CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NETFILTER_NETLINK_OSF=m
CONFIG_NF_CONNTRACK=m
CONFIG_NF_LOG_SYSLOG=m
CONFIG_NETFILTER_CONNCOUNT=m
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_ZONES=y
CONFIG_NF_CONNTRACK_PROCFS=y
CONFIG_NF_CONNTRACK_EVENTS=y
CONFIG_NF_CONNTRACK_TIMEOUT=y
CONFIG_NF_CONNTRACK_TIMESTAMP=y
CONFIG_NF_CONNTRACK_LABELS=y
CONFIG_NF_CT_PROTO_DCCP=y
CONFIG_NF_CT_PROTO_GRE=y
CONFIG_NF_CT_PROTO_SCTP=y
CONFIG_NF_CT_PROTO_UDPLITE=y
CONFIG_NF_CONNTRACK_AMANDA=m
CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CONNTRACK_H323=m
CONFIG_NF_CONNTRACK_IRC=m
CONFIG_NF_CONNTRACK_BROADCAST=m
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
CONFIG_NF_CONNTRACK_SNMP=m
CONFIG_NF_CONNTRACK_PPTP=m
CONFIG_NF_CONNTRACK_SANE=m
CONFIG_NF_CONNTRACK_SIP=m
CONFIG_NF_CONNTRACK_TFTP=m
CONFIG_NF_CT_NETLINK=m
CONFIG_NF_CT_NETLINK_TIMEOUT=m
CONFIG_NF_CT_NETLINK_HELPER=m
CONFIG_NETFILTER_NETLINK_GLUE_CT=y
CONFIG_NF_NAT=m
CONFIG_NF_NAT_AMANDA=m
CONFIG_NF_NAT_FTP=m
CONFIG_NF_NAT_IRC=m
CONFIG_NF_NAT_SIP=m
CONFIG_NF_NAT_TFTP=m
CONFIG_NF_NAT_REDIRECT=y
CONFIG_NF_NAT_MASQUERADE=y
CONFIG_NETFILTER_SYNPROXY=m
CONFIG_NF_TABLES=m
CONFIG_NF_TABLES_INET=y
CONFIG_NF_TABLES_NETDEV=y
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_FLOW_OFFLOAD=m
CONFIG_NFT_CONNLIMIT=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_TUNNEL=m
CONFIG_NFT_OBJREF=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_REJECT_INET=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_FIB=m
CONFIG_NFT_FIB_INET=m
CONFIG_NFT_XFRM=m
CONFIG_NFT_SOCKET=m
CONFIG_NFT_OSF=m
CONFIG_NFT_TPROXY=m
CONFIG_NFT_SYNPROXY=m
CONFIG_NF_DUP_NETDEV=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NFT_FIB_NETDEV=m
CONFIG_NFT_REJECT_NETDEV=m
CONFIG_NF_FLOW_TABLE_INET=m
CONFIG_NF_FLOW_TABLE=m
CONFIG_NF_FLOW_TABLE_PROCFS=y
CONFIG_NETFILTER_XTABLES=m

#
# Xtables combined modules
#
CONFIG_NETFILTER_XT_MARK=m
CONFIG_NETFILTER_XT_CONNMARK=m
CONFIG_NETFILTER_XT_SET=m

#
# Xtables targets
#
CONFIG_NETFILTER_XT_TARGET_AUDIT=m
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
CONFIG_NETFILTER_XT_TARGET_CT=m
CONFIG_NETFILTER_XT_TARGET_DSCP=m
CONFIG_NETFILTER_XT_TARGET_HL=m
CONFIG_NETFILTER_XT_TARGET_HMARK=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_NAT=m
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
CONFIG_NETFILTER_XT_TARGET_RATEEST=m
CONFIG_NETFILTER_XT_TARGET_REDIRECT=m
CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m
CONFIG_NETFILTER_XT_TARGET_TEE=m
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
CONFIG_NETFILTER_XT_TARGET_TRACE=m
CONFIG_NETFILTER_XT_TARGET_SECMARK=m
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m

#
# Xtables matches
#
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
CONFIG_NETFILTER_XT_MATCH_BPF=m
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
CONFIG_NETFILTER_XT_MATCH_CPU=m
CONFIG_NETFILTER_XT_MATCH_DCCP=m
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
CONFIG_NETFILTER_XT_MATCH_DSCP=m
CONFIG_NETFILTER_XT_MATCH_ECN=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_HL=m
CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
CONFIG_NETFILTER_XT_MATCH_IPVS=m
CONFIG_NETFILTER_XT_MATCH_L2TP=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_MARK=m
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
CONFIG_NETFILTER_XT_MATCH_OSF=m
CONFIG_NETFILTER_XT_MATCH_OWNER=m
CONFIG_NETFILTER_XT_MATCH_POLICY=m
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
CONFIG_NETFILTER_XT_MATCH_REALM=m
CONFIG_NETFILTER_XT_MATCH_RECENT=m
CONFIG_NETFILTER_XT_MATCH_SCTP=m
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
CONFIG_NETFILTER_XT_MATCH_STRING=m
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
CONFIG_NETFILTER_XT_MATCH_TIME=m
CONFIG_NETFILTER_XT_MATCH_U32=m
# end of Core Netfilter Configuration

CONFIG_IP_SET=m
CONFIG_IP_SET_MAX=256
CONFIG_IP_SET_BITMAP_IP=m
CONFIG_IP_SET_BITMAP_IPMAC=m
CONFIG_IP_SET_BITMAP_PORT=m
CONFIG_IP_SET_HASH_IP=m
CONFIG_IP_SET_HASH_IPMARK=m
CONFIG_IP_SET_HASH_IPPORT=m
CONFIG_IP_SET_HASH_IPPORTIP=m
CONFIG_IP_SET_HASH_IPPORTNET=m
CONFIG_IP_SET_HASH_IPMAC=m
CONFIG_IP_SET_HASH_MAC=m
CONFIG_IP_SET_HASH_NETPORTNET=m
CONFIG_IP_SET_HASH_NET=m
CONFIG_IP_SET_HASH_NETNET=m
CONFIG_IP_SET_HASH_NETPORT=m
CONFIG_IP_SET_HASH_NETIFACE=m
CONFIG_IP_SET_LIST_SET=m
CONFIG_IP_VS=m
CONFIG_IP_VS_IPV6=y
CONFIG_IP_VS_DEBUG=y
CONFIG_IP_VS_TAB_BITS=12

#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y

#
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_FO=m
CONFIG_IP_VS_OVF=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_MH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
CONFIG_IP_VS_TWOS=m

#
# IPVS SH scheduler
#
CONFIG_IP_VS_SH_TAB_BITS=8

#
# IPVS MH scheduler
#
CONFIG_IP_VS_MH_TAB_INDEX=12

#
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
CONFIG_IP_VS_NFCT=y
CONFIG_IP_VS_PE_SIP=m

#
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_SOCKET_IPV4=m
CONFIG_NF_TPROXY_IPV4=m
CONFIG_NF_TABLES_IPV4=y
CONFIG_NFT_REJECT_IPV4=m
CONFIG_NFT_DUP_IPV4=m
CONFIG_NFT_FIB_IPV4=m
CONFIG_NF_TABLES_ARP=y
CONFIG_NF_DUP_IPV4=m
CONFIG_NF_LOG_ARP=m
CONFIG_NF_LOG_IPV4=m
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NF_NAT_PPTP=m
CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
CONFIG_IP_NF_MATCH_RPFILTER=m
CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_SYNPROXY=m
CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_NETMAP=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_TARGET_ECN=m
CONFIG_IP_NF_TARGET_TTL=m
CONFIG_IP_NF_RAW=m
CONFIG_IP_NF_SECURITY=m
CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m
# end of IP: Netfilter Configuration

#
# IPv6: Netfilter Configuration
#
CONFIG_NF_SOCKET_IPV6=m
CONFIG_NF_TPROXY_IPV6=m
CONFIG_NF_TABLES_IPV6=y
CONFIG_NFT_REJECT_IPV6=m
CONFIG_NFT_DUP_IPV6=m
CONFIG_NFT_FIB_IPV6=m
CONFIG_NF_DUP_IPV6=m
CONFIG_NF_REJECT_IPV6=m
CONFIG_NF_LOG_IPV6=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
CONFIG_IP6_NF_MATCH_FRAG=m
CONFIG_IP6_NF_MATCH_OPTS=m
CONFIG_IP6_NF_MATCH_HL=m
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
CONFIG_IP6_NF_MATCH_MH=m
CONFIG_IP6_NF_MATCH_RPFILTER=m
CONFIG_IP6_NF_MATCH_RT=m
CONFIG_IP6_NF_MATCH_SRH=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_NAT=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_TARGET_NPT=m
# end of IPv6: Netfilter Configuration

CONFIG_NF_DEFRAG_IPV6=m
CONFIG_NF_TABLES_BRIDGE=m
CONFIG_NFT_BRIDGE_META=m
CONFIG_NFT_BRIDGE_REJECT=m
CONFIG_NF_CONNTRACK_BRIDGE=m
CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m
CONFIG_BRIDGE_EBT_T_NAT=m
CONFIG_BRIDGE_EBT_802_3=m
CONFIG_BRIDGE_EBT_AMONG=m
CONFIG_BRIDGE_EBT_ARP=m
CONFIG_BRIDGE_EBT_IP=m
CONFIG_BRIDGE_EBT_IP6=m
CONFIG_BRIDGE_EBT_LIMIT=m
CONFIG_BRIDGE_EBT_MARK=m
CONFIG_BRIDGE_EBT_PKTTYPE=m
CONFIG_BRIDGE_EBT_STP=m
CONFIG_BRIDGE_EBT_VLAN=m
CONFIG_BRIDGE_EBT_ARPREPLY=m
CONFIG_BRIDGE_EBT_DNAT=m
CONFIG_BRIDGE_EBT_MARK_T=m
CONFIG_BRIDGE_EBT_REDIRECT=m
CONFIG_BRIDGE_EBT_SNAT=m
CONFIG_BRIDGE_EBT_LOG=m
CONFIG_BRIDGE_EBT_NFLOG=m
CONFIG_BPFILTER=y
CONFIG_IP_DCCP=m
CONFIG_INET_DCCP_DIAG=m

#
# DCCP CCIDs Configuration
#
CONFIG_IP_DCCP_CCID2_DEBUG=y
CONFIG_IP_DCCP_CCID3=y
CONFIG_IP_DCCP_CCID3_DEBUG=y
CONFIG_IP_DCCP_TFRC_LIB=y
CONFIG_IP_DCCP_TFRC_DEBUG=y
# end of DCCP CCIDs Configuration

#
# DCCP Kernel Hacking
#
CONFIG_IP_DCCP_DEBUG=y
# end of DCCP Kernel Hacking

CONFIG_IP_SCTP=m
CONFIG_SCTP_DBG_OBJCNT=y
CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 is not set
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
CONFIG_SCTP_COOKIE_HMAC_MD5=y
CONFIG_SCTP_COOKIE_HMAC_SHA1=y
CONFIG_INET_SCTP_DIAG=m
CONFIG_RDS=m
CONFIG_RDS_RDMA=m
CONFIG_RDS_TCP=m
CONFIG_RDS_DEBUG=y
CONFIG_TIPC=m
CONFIG_TIPC_MEDIA_IB=y
CONFIG_TIPC_MEDIA_UDP=y
CONFIG_TIPC_CRYPTO=y
CONFIG_TIPC_DIAG=m
CONFIG_ATM=m
CONFIG_ATM_CLIP=m
CONFIG_ATM_CLIP_NO_ICMP=y
CONFIG_ATM_LANE=m
CONFIG_ATM_MPOA=m
CONFIG_ATM_BR2684=m
CONFIG_ATM_BR2684_IPFILTER=y
CONFIG_L2TP=m
CONFIG_L2TP_DEBUGFS=m
CONFIG_L2TP_V3=y
CONFIG_L2TP_IP=m
CONFIG_L2TP_ETH=m
CONFIG_STP=m
CONFIG_GARP=m
CONFIG_MRP=m
CONFIG_BRIDGE=m
CONFIG_BRIDGE_IGMP_SNOOPING=y
CONFIG_BRIDGE_VLAN_FILTERING=y
CONFIG_BRIDGE_MRP=y
CONFIG_BRIDGE_CFM=y
CONFIG_NET_DSA=m
CONFIG_NET_DSA_TAG_AR9331=m
CONFIG_NET_DSA_TAG_BRCM_COMMON=m
CONFIG_NET_DSA_TAG_BRCM=m
CONFIG_NET_DSA_TAG_BRCM_LEGACY=m
CONFIG_NET_DSA_TAG_BRCM_PREPEND=m
CONFIG_NET_DSA_TAG_HELLCREEK=m
CONFIG_NET_DSA_TAG_GSWIP=m
CONFIG_NET_DSA_TAG_DSA_COMMON=m
CONFIG_NET_DSA_TAG_DSA=m
CONFIG_NET_DSA_TAG_EDSA=m
CONFIG_NET_DSA_TAG_MTK=m
CONFIG_NET_DSA_TAG_KSZ=m
CONFIG_NET_DSA_TAG_OCELOT=m
CONFIG_NET_DSA_TAG_OCELOT_8021Q=m
CONFIG_NET_DSA_TAG_QCA=m
CONFIG_NET_DSA_TAG_RTL4_A=m
CONFIG_NET_DSA_TAG_RTL8_4=m
CONFIG_NET_DSA_TAG_RZN1_A5PSW=m
CONFIG_NET_DSA_TAG_LAN9303=m
CONFIG_NET_DSA_TAG_SJA1105=m
CONFIG_NET_DSA_TAG_TRAILER=m
CONFIG_NET_DSA_TAG_XRS700X=m
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q_MVRP=y
CONFIG_LLC=m
CONFIG_LLC2=m
CONFIG_ATALK=m
CONFIG_DEV_APPLETALK=m
CONFIG_COPS=m
CONFIG_COPS_DAYNA=y
CONFIG_COPS_TANGENT=y
CONFIG_IPDDP=m
CONFIG_IPDDP_ENCAP=y
CONFIG_X25=m
CONFIG_LAPB=m
CONFIG_PHONET=m
CONFIG_6LOWPAN=m
CONFIG_6LOWPAN_DEBUGFS=y
CONFIG_6LOWPAN_NHC=m
CONFIG_6LOWPAN_NHC_DEST=m
CONFIG_6LOWPAN_NHC_FRAGMENT=m
CONFIG_6LOWPAN_NHC_HOP=m
CONFIG_6LOWPAN_NHC_IPV6=m
CONFIG_6LOWPAN_NHC_MOBILITY=m
CONFIG_6LOWPAN_NHC_ROUTING=m
CONFIG_6LOWPAN_NHC_UDP=m
CONFIG_6LOWPAN_GHC_EXT_HDR_HOP=m
CONFIG_6LOWPAN_GHC_UDP=m
CONFIG_6LOWPAN_GHC_ICMPV6=m
CONFIG_6LOWPAN_GHC_EXT_HDR_DEST=m
CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG=m
CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE=m
CONFIG_IEEE802154=m
CONFIG_IEEE802154_NL802154_EXPERIMENTAL=y
CONFIG_IEEE802154_SOCKET=m
CONFIG_IEEE802154_6LOWPAN=m
CONFIG_MAC802154=m
CONFIG_NET_SCHED=y

#
# Queueing/Scheduling
#
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_HFSC=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_PRIO=m
CONFIG_NET_SCH_MULTIQ=m
CONFIG_NET_SCH_RED=m
CONFIG_NET_SCH_SFB=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_SCH_TEQL=m
CONFIG_NET_SCH_TBF=m
CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_ETF=m
CONFIG_NET_SCH_TAPRIO=m
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_NETEM=m
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_MQPRIO=m
CONFIG_NET_SCH_SKBPRIO=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_QFQ=m
CONFIG_NET_SCH_CODEL=m
CONFIG_NET_SCH_FQ_CODEL=m
CONFIG_NET_SCH_CAKE=m
CONFIG_NET_SCH_FQ=m
CONFIG_NET_SCH_HHF=m
CONFIG_NET_SCH_PIE=m
CONFIG_NET_SCH_FQ_PIE=m
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_SCH_PLUG=m
CONFIG_NET_SCH_ETS=m
CONFIG_NET_SCH_DEFAULT=y
# CONFIG_DEFAULT_FQ is not set
# CONFIG_DEFAULT_CODEL is not set
# CONFIG_DEFAULT_FQ_CODEL is not set
# CONFIG_DEFAULT_FQ_PIE is not set
# CONFIG_DEFAULT_SFQ is not set
CONFIG_DEFAULT_PFIFO_FAST=y
CONFIG_DEFAULT_NET_SCH="pfifo_fast"

#
# Classification
#
CONFIG_NET_CLS=y
CONFIG_NET_CLS_BASIC=m
CONFIG_NET_CLS_TCINDEX=m
CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
CONFIG_CLS_U32_PERF=y
CONFIG_CLS_U32_MARK=y
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_FLOW=m
CONFIG_NET_CLS_CGROUP=m
CONFIG_NET_CLS_BPF=m
CONFIG_NET_CLS_FLOWER=m
CONFIG_NET_CLS_MATCHALL=m
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_NBYTE=m
CONFIG_NET_EMATCH_U32=m
CONFIG_NET_EMATCH_META=m
CONFIG_NET_EMATCH_TEXT=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_IPSET=m
CONFIG_NET_EMATCH_IPT=m
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=m
CONFIG_NET_ACT_GACT=m
CONFIG_GACT_PROB=y
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_SAMPLE=m
CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_NAT=m
CONFIG_NET_ACT_PEDIT=m
CONFIG_NET_ACT_SIMP=m
CONFIG_NET_ACT_SKBEDIT=m
CONFIG_NET_ACT_CSUM=m
CONFIG_NET_ACT_MPLS=m
CONFIG_NET_ACT_VLAN=m
CONFIG_NET_ACT_BPF=m
CONFIG_NET_ACT_CONNMARK=m
CONFIG_NET_ACT_CTINFO=m
CONFIG_NET_ACT_SKBMOD=m
CONFIG_NET_ACT_IFE=m
CONFIG_NET_ACT_TUNNEL_KEY=m
CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GATE=m
CONFIG_NET_IFE_SKBMARK=m
CONFIG_NET_IFE_SKBPRIO=m
CONFIG_NET_IFE_SKBTCINDEX=m
CONFIG_NET_TC_SKB_EXT=y
CONFIG_NET_SCH_FIFO=y
CONFIG_DCB=y
CONFIG_DNS_RESOLVER=m
CONFIG_BATMAN_ADV=m
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
CONFIG_BATMAN_ADV_NC=y
CONFIG_BATMAN_ADV_MCAST=y
CONFIG_BATMAN_ADV_DEBUG=y
CONFIG_OPENVSWITCH=m
CONFIG_OPENVSWITCH_GRE=m
CONFIG_OPENVSWITCH_VXLAN=m
CONFIG_OPENVSWITCH_GENEVE=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS_LOOPBACK=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO_VSOCKETS_COMMON=m
CONFIG_NETLINK_DIAG=m
CONFIG_MPLS=y
CONFIG_NET_MPLS_GSO=m
CONFIG_MPLS_ROUTING=m
CONFIG_MPLS_IPTUNNEL=m
CONFIG_NET_NSH=m
CONFIG_HSR=m
CONFIG_NET_SWITCHDEV=y
CONFIG_NET_L3_MASTER_DEV=y
CONFIG_QRTR=m
CONFIG_QRTR_SMD=m
CONFIG_QRTR_TUN=m
CONFIG_QRTR_MHI=m
CONFIG_NET_NCSI=y
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
CONFIG_SOCK_RX_QUEUE_MAPPING=y
CONFIG_HWBM=y
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y
CONFIG_NET_RX_BUSY_POLL=y
CONFIG_BQL=y
CONFIG_BPF_STREAM_PARSER=y

#
# Network testing
#
CONFIG_NET_PKTGEN=m
# end of Network testing
# end of Networking options

CONFIG_HAMRADIO=y

#
# Packet Radio protocols
#
CONFIG_AX25=m
CONFIG_AX25_DAMA_SLAVE=y
CONFIG_NETROM=m
CONFIG_ROSE=m

#
# AX.25 network device drivers
#
CONFIG_MKISS=m
CONFIG_6PACK=m
CONFIG_BPQETHER=m
CONFIG_BAYCOM_SER_FDX=m
CONFIG_BAYCOM_SER_HDX=m
CONFIG_BAYCOM_PAR=m
CONFIG_BAYCOM_EPP=m
CONFIG_YAM=m
# end of AX.25 network device drivers

CONFIG_CAN=m
CONFIG_CAN_RAW=m
CONFIG_CAN_BCM=m
CONFIG_CAN_GW=m
CONFIG_CAN_J1939=m
CONFIG_CAN_ISOTP=m
CONFIG_BT=m
CONFIG_BT_BREDR=y
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_CMTP=m
CONFIG_BT_HIDP=m
CONFIG_BT_HS=y
CONFIG_BT_LE=y
CONFIG_BT_6LOWPAN=m
CONFIG_BT_LEDS=y
CONFIG_BT_MSFTEXT=y
CONFIG_BT_AOSPEXT=y
CONFIG_BT_DEBUGFS=y
CONFIG_BT_SELFTEST=y
CONFIG_BT_SELFTEST_ECDH=y
CONFIG_BT_SELFTEST_SMP=y

#
# Bluetooth device drivers
#
CONFIG_BT_INTEL=m
CONFIG_BT_BCM=m
CONFIG_BT_RTL=m
CONFIG_BT_QCA=m
CONFIG_BT_MTK=m
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB_MTK=y
CONFIG_BT_HCIBTUSB_RTL=y
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIUART=m
CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIUART_ATH3K=y
CONFIG_BT_HCIUART_LL=y
CONFIG_BT_HCIUART_3WIRE=y
CONFIG_BT_HCIUART_INTEL=y
CONFIG_BT_HCIUART_BCM=y
CONFIG_BT_HCIUART_QCA=y
CONFIG_BT_HCIUART_AG6XX=y
CONFIG_BT_HCIUART_MRVL=y
CONFIG_BT_HCIBCM203X=m
CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBFUSB=m
CONFIG_BT_HCIDTL1=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBLUECARD=m
CONFIG_BT_HCIVHCI=m
CONFIG_BT_MRVL=m
CONFIG_BT_MRVL_SDIO=m
CONFIG_BT_ATH3K=m
CONFIG_BT_MTKSDIO=m
CONFIG_BT_MTKUART=m
CONFIG_BT_QCOMSMD=m
CONFIG_BT_HCIRSI=m
CONFIG_BT_VIRTIO=m
# end of Bluetooth device drivers

CONFIG_AF_RXRPC=m
CONFIG_AF_RXRPC_IPV6=y
CONFIG_AF_RXRPC_INJECT_LOSS=y
CONFIG_AF_RXRPC_DEBUG=y
CONFIG_RXKAD=y
CONFIG_AF_KCM=m
CONFIG_STREAM_PARSER=y
CONFIG_MCTP=y
CONFIG_MCTP_FLOWS=y
CONFIG_FIB_RULES=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_EXT=y
CONFIG_WEXT_CORE=y
CONFIG_WEXT_PROC=y
CONFIG_WEXT_SPY=y
CONFIG_WEXT_PRIV=y
CONFIG_CFG80211=m
CONFIG_NL80211_TESTMODE=y
CONFIG_CFG80211_DEVELOPER_WARNINGS=y
CONFIG_CFG80211_CERTIFICATION_ONUS=y
CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y
CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y
CONFIG_CFG80211_EXTRA_REGDB_KEYDIR=""
CONFIG_CFG80211_REG_CELLULAR_HINTS=y
CONFIG_CFG80211_REG_RELAX_NO_IR=y
CONFIG_CFG80211_DEFAULT_PS=y
CONFIG_CFG80211_DEBUGFS=y
CONFIG_CFG80211_CRDA_SUPPORT=y
CONFIG_CFG80211_WEXT=y
CONFIG_CFG80211_WEXT_EXPORT=y
CONFIG_LIB80211=m
CONFIG_LIB80211_CRYPT_WEP=m
CONFIG_LIB80211_CRYPT_CCMP=m
CONFIG_LIB80211_CRYPT_TKIP=m
CONFIG_LIB80211_DEBUG=y
CONFIG_MAC80211=m
CONFIG_MAC80211_HAS_RC=y
CONFIG_MAC80211_RC_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
CONFIG_MAC80211_MESH=y
CONFIG_MAC80211_LEDS=y
CONFIG_MAC80211_DEBUGFS=y
CONFIG_MAC80211_MESSAGE_TRACING=y
CONFIG_MAC80211_DEBUG_MENU=y
CONFIG_MAC80211_NOINLINE=y
CONFIG_MAC80211_VERBOSE_DEBUG=y
CONFIG_MAC80211_MLME_DEBUG=y
CONFIG_MAC80211_STA_DEBUG=y
CONFIG_MAC80211_HT_DEBUG=y
CONFIG_MAC80211_OCB_DEBUG=y
CONFIG_MAC80211_IBSS_DEBUG=y
CONFIG_MAC80211_PS_DEBUG=y
CONFIG_MAC80211_MPL_DEBUG=y
CONFIG_MAC80211_MPATH_DEBUG=y
CONFIG_MAC80211_MHWMP_DEBUG=y
CONFIG_MAC80211_MESH_SYNC_DEBUG=y
CONFIG_MAC80211_MESH_CSA_DEBUG=y
CONFIG_MAC80211_MESH_PS_DEBUG=y
CONFIG_MAC80211_TDLS_DEBUG=y
CONFIG_MAC80211_DEBUG_COUNTERS=y
CONFIG_MAC80211_STA_HASH_MAX_SIZE=0
CONFIG_RFKILL=m
CONFIG_RFKILL_LEDS=y
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL_GPIO=m
CONFIG_NET_9P=m
CONFIG_NET_9P_FD=m
CONFIG_NET_9P_VIRTIO=m
CONFIG_NET_9P_RDMA=m
CONFIG_NET_9P_DEBUG=y
CONFIG_CAIF=m
CONFIG_CAIF_DEBUG=y
CONFIG_CAIF_NETDEV=m
CONFIG_CAIF_USB=m
CONFIG_CEPH_LIB=m
CONFIG_CEPH_LIB_PRETTYDEBUG=y
CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y
CONFIG_NFC=m
CONFIG_NFC_DIGITAL=m
CONFIG_NFC_NCI=m
CONFIG_NFC_NCI_SPI=m
CONFIG_NFC_NCI_UART=m
CONFIG_NFC_HCI=m
CONFIG_NFC_SHDLC=y

#
# Near Field Communication (NFC) devices
#
CONFIG_NFC_TRF7970A=m
CONFIG_NFC_SIM=m
CONFIG_NFC_PORT100=m
CONFIG_NFC_VIRTUAL_NCI=m
CONFIG_NFC_FDP=m
CONFIG_NFC_FDP_I2C=m
CONFIG_NFC_PN544=m
CONFIG_NFC_PN544_I2C=m
CONFIG_NFC_PN533=m
CONFIG_NFC_PN533_USB=m
CONFIG_NFC_PN533_I2C=m
CONFIG_NFC_PN532_UART=m
CONFIG_NFC_MICROREAD=m
CONFIG_NFC_MICROREAD_I2C=m
CONFIG_NFC_MRVL=m
CONFIG_NFC_MRVL_USB=m
CONFIG_NFC_MRVL_UART=m
CONFIG_NFC_MRVL_I2C=m
CONFIG_NFC_MRVL_SPI=m
CONFIG_NFC_ST21NFCA=m
CONFIG_NFC_ST21NFCA_I2C=m
CONFIG_NFC_ST_NCI=m
CONFIG_NFC_ST_NCI_I2C=m
CONFIG_NFC_ST_NCI_SPI=m
CONFIG_NFC_NXP_NCI=m
CONFIG_NFC_NXP_NCI_I2C=m
CONFIG_NFC_S3FWRN5=m
CONFIG_NFC_S3FWRN5_I2C=m
CONFIG_NFC_S3FWRN82_UART=m
CONFIG_NFC_ST95HF=m
# end of Near Field Communication (NFC) devices

CONFIG_PSAMPLE=m
CONFIG_NET_IFE=m
CONFIG_LWTUNNEL=y
CONFIG_LWTUNNEL_BPF=y
CONFIG_DST_CACHE=y
CONFIG_GRO_CELLS=y
CONFIG_SOCK_VALIDATE_XMIT=y
CONFIG_NET_SELFTESTS=m
CONFIG_NET_SOCK_MSG=y
CONFIG_NET_DEVLINK=y
CONFIG_PAGE_POOL=y
CONFIG_PAGE_POOL_STATS=y
CONFIG_FAILOVER=m
CONFIG_ETHTOOL_NETLINK=y
CONFIG_NETDEV_ADDR_LIST_TEST=m

#
# Device Drivers
#
CONFIG_PCCARD=m
CONFIG_PCMCIA=m
CONFIG_PCMCIA_LOAD_CIS=y

#
# PC-card bridges
#
CONFIG_I82365=m
CONFIG_TCIC=m
CONFIG_PCMCIA_PROBE=y
CONFIG_PCCARD_NONSTATIC=y

#
# Generic Driver Options
#
CONFIG_AUXILIARY_BUS=y
CONFIG_UEVENT_HELPER=y
CONFIG_UEVENT_HELPER_PATH=""
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y

#
# Firmware loader
#
CONFIG_FW_LOADER=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_EXTRA_FIRMWARE=""
CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
CONFIG_FW_LOADER_COMPRESS=y
CONFIG_FW_LOADER_COMPRESS_XZ=y
CONFIG_FW_LOADER_COMPRESS_ZSTD=y
CONFIG_FW_UPLOAD=y
# end of Firmware loader

CONFIG_WANT_DEV_COREDUMP=y
CONFIG_ALLOW_DEV_COREDUMP=y
CONFIG_DEV_COREDUMP=y
CONFIG_DEBUG_DRIVER=y
CONFIG_DEBUG_DEVRES=y
CONFIG_DEBUG_TEST_DRIVER_REMOVE=y
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
CONFIG_GENERIC_CPU_DEVICES=y
CONFIG_SOC_BUS=y
CONFIG_REGMAP=y
CONFIG_REGMAP_AC97=m
CONFIG_REGMAP_I2C=m
CONFIG_REGMAP_SLIMBUS=m
CONFIG_REGMAP_SPI=y
CONFIG_REGMAP_SPMI=m
CONFIG_REGMAP_W1=m
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
CONFIG_REGMAP_SOUNDWIRE=m
CONFIG_REGMAP_SOUNDWIRE_MBQ=m
CONFIG_REGMAP_SCCB=m
CONFIG_REGMAP_I3C=m
CONFIG_REGMAP_SPI_AVMM=m
CONFIG_DMA_SHARED_BUFFER=y
CONFIG_DMA_FENCE_TRACE=y
# end of Generic Driver Options

#
# Bus devices
#
CONFIG_ARM_INTEGRATOR_LM=y
CONFIG_BT1_APB=y
CONFIG_BT1_AXI=y
CONFIG_MOXTET=m
CONFIG_HISILICON_LPC=y
CONFIG_INTEL_IXP4XX_EB=y
CONFIG_QCOM_EBI2=y
CONFIG_MHI_BUS=m
CONFIG_MHI_BUS_DEBUG=y
CONFIG_MHI_BUS_EP=m
# end of Bus devices

CONFIG_CONNECTOR=m

#
# Firmware Drivers
#

#
# ARM System Control and Management Interface Protocol
#
CONFIG_ARM_SCMI_PROTOCOL=m
CONFIG_ARM_SCMI_HAVE_TRANSPORT=y
CONFIG_ARM_SCMI_HAVE_SHMEM=y
CONFIG_ARM_SCMI_HAVE_MSG=y
CONFIG_ARM_SCMI_TRANSPORT_MAILBOX=y
CONFIG_ARM_SCMI_TRANSPORT_VIRTIO=y
CONFIG_ARM_SCMI_TRANSPORT_VIRTIO_VERSION1_COMPLIANCE=y
CONFIG_ARM_SCMI_TRANSPORT_VIRTIO_ATOMIC_ENABLE=y
CONFIG_ARM_SCMI_POWER_DOMAIN=m
CONFIG_ARM_SCMI_POWER_CONTROL=m
# end of ARM System Control and Management Interface Protocol

CONFIG_ARM_SCPI_PROTOCOL=m
CONFIG_ARM_SCPI_POWER_DOMAIN=m
CONFIG_FIRMWARE_MEMMAP=y
CONFIG_MTK_ADSP_IPC=m
CONFIG_QCOM_SCM=m
CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT=y
CONFIG_TURRIS_MOX_RWTM=m
CONFIG_BCM47XX_NVRAM=y
CONFIG_BCM47XX_SPROM=y
CONFIG_TEE_BNXT_FW=m
CONFIG_CS_DSP=m
CONFIG_GOOGLE_FIRMWARE=y
CONFIG_GOOGLE_COREBOOT_TABLE=m
CONFIG_GOOGLE_MEMCONSOLE=m
CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
CONFIG_GOOGLE_MEMCONSOLE_COREBOOT=m
CONFIG_GOOGLE_VPD=m
CONFIG_IMX_DSP=m
CONFIG_IMX_SCU=y
CONFIG_IMX_SCU_PD=y

#
# Tegra firmware driver
#
# end of Tegra firmware driver
# end of Firmware Drivers

CONFIG_GNSS=m
CONFIG_GNSS_SERIAL=m
CONFIG_GNSS_MTK_SERIAL=m
CONFIG_GNSS_SIRF_SERIAL=m
CONFIG_GNSS_UBX_SERIAL=m
CONFIG_GNSS_USB=m
CONFIG_MTD=m
CONFIG_MTD_TESTS=m

#
# Partition parsers
#
CONFIG_MTD_AR7_PARTS=m
CONFIG_MTD_BCM63XX_PARTS=y
CONFIG_MTD_BRCM_U_BOOT=m
CONFIG_MTD_CMDLINE_PARTS=m
CONFIG_MTD_OF_PARTS=m
CONFIG_MTD_OF_PARTS_BCM4908=y
CONFIG_MTD_OF_PARTS_LINKSYS_NS=y
CONFIG_MTD_PARSER_IMAGETAG=m
CONFIG_MTD_PARSER_TRX=m
CONFIG_MTD_SHARPSL_PARTS=m
CONFIG_MTD_REDBOOT_PARTS=m
CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
CONFIG_MTD_REDBOOT_PARTS_READONLY=y
CONFIG_MTD_QCOMSMEM_PARTS=m
# end of Partition parsers

#
# User Modules And Translation Layers
#
CONFIG_MTD_BLKDEVS=m
CONFIG_MTD_BLOCK=m
CONFIG_MTD_BLOCK_RO=m

#
# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK.
#
CONFIG_FTL=m
CONFIG_NFTL=m
CONFIG_NFTL_RW=y
CONFIG_INFTL=m
CONFIG_RFD_FTL=m
CONFIG_SSFDC=m
CONFIG_SM_FTL=m
CONFIG_MTD_OOPS=m
CONFIG_MTD_PSTORE=m
CONFIG_MTD_SWAP=m
CONFIG_MTD_PARTITIONED_MASTER=y

#
# RAM/ROM/Flash chip drivers
#
CONFIG_MTD_CFI=m
CONFIG_MTD_JEDECPROBE=m
CONFIG_MTD_GEN_PROBE=m
CONFIG_MTD_CFI_ADV_OPTIONS=y
CONFIG_MTD_CFI_NOSWAP=y
# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
CONFIG_MTD_CFI_GEOMETRY=y
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
CONFIG_MTD_MAP_BANK_WIDTH_8=y
CONFIG_MTD_MAP_BANK_WIDTH_16=y
CONFIG_MTD_MAP_BANK_WIDTH_32=y
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
CONFIG_MTD_CFI_I4=y
CONFIG_MTD_CFI_I8=y
CONFIG_MTD_OTP=y
CONFIG_MTD_CFI_INTELEXT=m
CONFIG_MTD_CFI_AMDSTD=m
CONFIG_MTD_CFI_STAA=m
CONFIG_MTD_CFI_UTIL=m
CONFIG_MTD_RAM=m
CONFIG_MTD_ROM=m
CONFIG_MTD_ABSENT=m
# end of RAM/ROM/Flash chip drivers

#
# Mapping drivers for chip access
#
CONFIG_MTD_COMPLEX_MAPPINGS=y
CONFIG_MTD_PHYSMAP=m
CONFIG_MTD_PHYSMAP_COMPAT=y
CONFIG_MTD_PHYSMAP_START=0x8000000
CONFIG_MTD_PHYSMAP_LEN=0
CONFIG_MTD_PHYSMAP_BANKWIDTH=2
CONFIG_MTD_PHYSMAP_OF=y
CONFIG_MTD_PHYSMAP_BT1_ROM=y
CONFIG_MTD_PHYSMAP_VERSATILE=y
CONFIG_MTD_PHYSMAP_GEMINI=y
CONFIG_MTD_PHYSMAP_GPIO_ADDR=y
CONFIG_MTD_SC520CDP=m
CONFIG_MTD_NETSC520=m
CONFIG_MTD_TS5500=m
CONFIG_MTD_PCMCIA=m
CONFIG_MTD_PCMCIA_ANONYMOUS=y
CONFIG_MTD_PLATRAM=m
# end of Mapping drivers for chip access

#
# Self-contained MTD device drivers
#
CONFIG_MTD_DATAFLASH=m
CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y
CONFIG_MTD_DATAFLASH_OTP=y
CONFIG_MTD_MCHP23K256=m
CONFIG_MTD_MCHP48L640=m
CONFIG_MTD_SPEAR_SMI=m
CONFIG_MTD_SST25L=m
CONFIG_MTD_SLRAM=m
CONFIG_MTD_PHRAM=m
CONFIG_MTD_MTDRAM=m
CONFIG_MTDRAM_TOTAL_SIZE=4096
CONFIG_MTDRAM_ERASE_SIZE=128
CONFIG_MTD_BLOCK2MTD=m

#
# Disk-On-Chip Device Drivers
#
CONFIG_MTD_DOCG3=m
CONFIG_BCH_CONST_M=14
CONFIG_BCH_CONST_T=4
# end of Self-contained MTD device drivers

#
# NAND
#
CONFIG_MTD_NAND_CORE=m
CONFIG_MTD_ONENAND=m
CONFIG_MTD_ONENAND_VERIFY_WRITE=y
CONFIG_MTD_ONENAND_GENERIC=m
CONFIG_MTD_ONENAND_SAMSUNG=m
CONFIG_MTD_ONENAND_OTP=y
CONFIG_MTD_ONENAND_2X_PROGRAM=y
CONFIG_MTD_RAW_NAND=m

#
# Raw/parallel NAND flash controllers
#
CONFIG_MTD_NAND_DENALI=m
CONFIG_MTD_NAND_DENALI_DT=m
CONFIG_MTD_NAND_AMS_DELTA=m
CONFIG_MTD_NAND_OMAP2=m
CONFIG_MTD_NAND_OMAP_BCH=y
CONFIG_MTD_NAND_OMAP_BCH_BUILD=m
CONFIG_MTD_NAND_SHARPSL=m
CONFIG_MTD_NAND_ATMEL=m
CONFIG_MTD_NAND_MARVELL=m
CONFIG_MTD_NAND_SLC_LPC32XX=m
CONFIG_MTD_NAND_MLC_LPC32XX=m
CONFIG_MTD_NAND_BRCMNAND=m
CONFIG_MTD_NAND_BRCMNAND_BCM63XX=m
CONFIG_MTD_NAND_BRCMNAND_BCMA=m
CONFIG_MTD_NAND_BRCMNAND_BCMBCA=m
CONFIG_MTD_NAND_BRCMNAND_BRCMSTB=m
CONFIG_MTD_NAND_BRCMNAND_IPROC=m
CONFIG_MTD_NAND_BCM47XXNFLASH=m
CONFIG_MTD_NAND_OXNAS=m
CONFIG_MTD_NAND_GPMI_NAND=m
CONFIG_MTD_NAND_FSL_IFC=m
CONFIG_MTD_NAND_VF610_NFC=m
CONFIG_MTD_NAND_MXC=m
CONFIG_MTD_NAND_SH_FLCTL=m
CONFIG_MTD_NAND_DAVINCI=m
CONFIG_MTD_NAND_TXX9NDFMC=m
CONFIG_MTD_NAND_JZ4780=m
CONFIG_MTD_NAND_INGENIC_ECC=y
CONFIG_MTD_NAND_JZ4740_ECC=m
CONFIG_MTD_NAND_JZ4725B_BCH=m
CONFIG_MTD_NAND_JZ4780_BCH=m
CONFIG_MTD_NAND_FSMC=m
CONFIG_MTD_NAND_SUNXI=m
CONFIG_MTD_NAND_HISI504=m
CONFIG_MTD_NAND_QCOM=m
CONFIG_MTD_NAND_MTK=m
CONFIG_MTD_NAND_MXIC=m
CONFIG_MTD_NAND_TEGRA=m
CONFIG_MTD_NAND_STM32_FMC2=m
CONFIG_MTD_NAND_MESON=m
CONFIG_MTD_NAND_GPIO=m
CONFIG_MTD_NAND_PLATFORM=m
CONFIG_MTD_NAND_CADENCE=m
CONFIG_MTD_NAND_ARASAN=m
CONFIG_MTD_NAND_INTEL_LGM=m
CONFIG_MTD_NAND_RENESAS=m

#
# Misc
#
CONFIG_MTD_NAND_NANDSIM=m
CONFIG_MTD_NAND_DISKONCHIP=m
CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED=y
CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
CONFIG_MTD_NAND_DISKONCHIP_PROBE_HIGH=y
CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y
CONFIG_MTD_SPI_NAND=m

#
# ECC engine support
#
CONFIG_MTD_NAND_ECC=y
CONFIG_MTD_NAND_ECC_SW_HAMMING=y
CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC=y
CONFIG_MTD_NAND_ECC_SW_BCH=y
CONFIG_MTD_NAND_ECC_MXIC=y
CONFIG_MTD_NAND_ECC_MEDIATEK=m
# end of ECC engine support
# end of NAND

#
# LPDDR & LPDDR2 PCM memory drivers
#
CONFIG_MTD_LPDDR=m
CONFIG_MTD_QINFO_PROBE=m
# end of LPDDR & LPDDR2 PCM memory drivers

CONFIG_MTD_SPI_NOR=m
CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
# CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set
CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
# CONFIG_MTD_SPI_NOR_SWP_KEEP is not set
CONFIG_SPI_HISI_SFC=m
CONFIG_SPI_NXP_SPIFI=m
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
CONFIG_MTD_UBI_BEB_LIMIT=20
CONFIG_MTD_UBI_FASTMAP=y
CONFIG_MTD_UBI_GLUEBI=m
CONFIG_MTD_UBI_BLOCK=y
CONFIG_MTD_HYPERBUS=m
CONFIG_HBMC_AM654=m
CONFIG_DTC=y
CONFIG_OF=y
CONFIG_OF_UNITTEST=y
CONFIG_OF_ALL_DTBS=y
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_OF_KOBJ=y
CONFIG_OF_DYNAMIC=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_IRQ=y
CONFIG_OF_RESERVED_MEM=y
CONFIG_OF_RESOLVE=y
CONFIG_OF_OVERLAY=y
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
CONFIG_PARPORT=m
CONFIG_PARPORT_PC=m
CONFIG_PARPORT_PC_FIFO=y
CONFIG_PARPORT_PC_SUPERIO=y
CONFIG_PARPORT_PC_PCMCIA=m
CONFIG_PARPORT_AMIGA=m
CONFIG_PARPORT_MFC3=m
CONFIG_PARPORT_ATARI=m
CONFIG_PARPORT_AX88796=m
CONFIG_PARPORT_1284=y
CONFIG_PARPORT_NOT_PC=y
CONFIG_PNP=y
CONFIG_PNP_DEBUG_MESSAGES=y

#
# Protocols
#
CONFIG_ISAPNP=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_NULL_BLK=m
CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION=y
CONFIG_AMIGA_FLOPPY=m
CONFIG_ATARI_FLOPPY=m
CONFIG_BLK_DEV_SWIM=m
CONFIG_AMIGA_Z2RAM=m
CONFIG_CDROM=m
CONFIG_PARIDE=m

#
# Parallel IDE high-level drivers
#
CONFIG_PARIDE_PD=m
CONFIG_PARIDE_PCD=m
CONFIG_PARIDE_PF=m
CONFIG_PARIDE_PT=m
CONFIG_PARIDE_PG=m

#
# Parallel IDE protocol modules
#
CONFIG_PARIDE_ATEN=m
CONFIG_PARIDE_BPCK=m
CONFIG_PARIDE_BPCK6=m
CONFIG_PARIDE_COMM=m
CONFIG_PARIDE_DSTR=m
CONFIG_PARIDE_FIT2=m
CONFIG_PARIDE_FIT3=m
CONFIG_PARIDE_EPAT=m
CONFIG_PARIDE_EPATC8=y
CONFIG_PARIDE_EPIA=m
CONFIG_PARIDE_FRIQ=m
CONFIG_PARIDE_FRPW=m
CONFIG_PARIDE_KBIC=m
CONFIG_PARIDE_KTTI=m
CONFIG_PARIDE_ON20=m
CONFIG_PARIDE_ON26=m
CONFIG_ZRAM=m
CONFIG_ZRAM_DEF_COMP_LZORLE=y
# CONFIG_ZRAM_DEF_COMP_ZSTD is not set
# CONFIG_ZRAM_DEF_COMP_LZ4 is not set
# CONFIG_ZRAM_DEF_COMP_LZO is not set
# CONFIG_ZRAM_DEF_COMP_LZ4HC is not set
# CONFIG_ZRAM_DEF_COMP_842 is not set
CONFIG_ZRAM_DEF_COMP="lzo-rle"
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZRAM_MEMORY_TRACKING=y
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
CONFIG_BLK_DEV_DRBD=m
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_CDROM_PKTCDVD=m
CONFIG_CDROM_PKTCDVD_BUFFERS=8
CONFIG_CDROM_PKTCDVD_WCACHE=y
CONFIG_ATA_OVER_ETH=m
CONFIG_VIRTIO_BLK=m
CONFIG_BLK_DEV_RBD=m
CONFIG_BLK_DEV_UBLK=m
CONFIG_BLK_DEV_RNBD=y
CONFIG_BLK_DEV_RNBD_CLIENT=m
CONFIG_BLK_DEV_RNBD_SERVER=m

#
# NVME Support
#
CONFIG_NVME_COMMON=m
CONFIG_NVME_CORE=m
CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_VERBOSE_ERRORS=y
CONFIG_NVME_HWMON=y
CONFIG_NVME_FABRICS=m
CONFIG_NVME_RDMA=m
CONFIG_NVME_FC=m
CONFIG_NVME_TCP=m
CONFIG_NVME_AUTH=y
CONFIG_NVME_APPLE=m
CONFIG_NVME_TARGET=m
CONFIG_NVME_TARGET_PASSTHRU=y
CONFIG_NVME_TARGET_LOOP=m
CONFIG_NVME_TARGET_RDMA=m
CONFIG_NVME_TARGET_FC=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_TCP=m
CONFIG_NVME_TARGET_AUTH=y
# end of NVME Support

#
# Misc devices
#
CONFIG_SENSORS_LIS3LV02D=m
CONFIG_AD525X_DPOT=m
CONFIG_AD525X_DPOT_I2C=m
CONFIG_AD525X_DPOT_SPI=m
CONFIG_DUMMY_IRQ=m
CONFIG_ICS932S401=m
CONFIG_ATMEL_SSC=m
CONFIG_ENCLOSURE_SERVICES=m
CONFIG_GEHC_ACHC=m
CONFIG_HI6421V600_IRQ=m
CONFIG_QCOM_COINCELL=m
CONFIG_QCOM_FASTRPC=m
CONFIG_APDS9802ALS=m
CONFIG_ISL29003=m
CONFIG_ISL29020=m
CONFIG_SENSORS_TSL2550=m
CONFIG_SENSORS_BH1770=m
CONFIG_SENSORS_APDS990X=m
CONFIG_HMC6352=m
CONFIG_DS1682=m
CONFIG_LATTICE_ECP3_CONFIG=m
CONFIG_SRAM=y
CONFIG_XILINX_SDFEC=m
CONFIG_MISC_RTSX=m
CONFIG_HISI_HIKEY_USB=m
CONFIG_OPEN_DICE=m
CONFIG_VCPU_STALL_DETECTOR=m
CONFIG_C2PORT=m

#
# EEPROM support
#
CONFIG_EEPROM_AT24=m
CONFIG_EEPROM_AT25=m
CONFIG_EEPROM_LEGACY=m
CONFIG_EEPROM_MAX6875=m
CONFIG_EEPROM_93CX6=m
CONFIG_EEPROM_93XX46=m
CONFIG_EEPROM_IDT_89HPESX=m
CONFIG_EEPROM_EE1004=m
# end of EEPROM support

#
# Texas Instruments shared transport line discipline
#
CONFIG_TI_ST=m
# end of Texas Instruments shared transport line discipline

CONFIG_SENSORS_LIS3_SPI=m
CONFIG_SENSORS_LIS3_I2C=m

#
# Altera FPGA firmware download module (requires I2C)
#
CONFIG_ALTERA_STAPL=m
CONFIG_ECHO=m
CONFIG_MISC_RTSX_USB=m
CONFIG_UACCE=m
CONFIG_PVPANIC=y
CONFIG_PVPANIC_MMIO=m
# end of Misc devices

#
# SCSI device support
#
CONFIG_SCSI_MOD=m
CONFIG_RAID_ATTRS=m
CONFIG_SCSI_COMMON=m
CONFIG_SCSI=m
CONFIG_SCSI_DMA=y
CONFIG_SCSI_ESP_PIO=y
CONFIG_SCSI_NETLINK=y
CONFIG_SCSI_PROC_FS=y

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=m
CONFIG_CHR_DEV_ST=m
CONFIG_BLK_DEV_SR=m
CONFIG_CHR_DEV_SG=m
CONFIG_BLK_DEV_BSG=y
CONFIG_CHR_DEV_SCH=m
CONFIG_SCSI_ENCLOSURE=m
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SCAN_ASYNC=y

#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=m
CONFIG_SCSI_ISCSI_ATTRS=m
CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SRP_ATTRS=m
# end of SCSI Transports

CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=m
CONFIG_ISCSI_BOOT_SYSFS=m
CONFIG_SCSI_AHA152X=m
CONFIG_SCSI_HISI_SAS=m
CONFIG_SCSI_HISI_SAS_DEBUGFS_DEFAULT_ENABLE=y
CONFIG_LIBFC=m
CONFIG_LIBFCOE=m
CONFIG_SCSI_FDOMAIN=m
CONFIG_SCSI_FDOMAIN_ISA=m
CONFIG_SCSI_PPA=m
CONFIG_SCSI_IMM=m
CONFIG_SCSI_IZIP_EPP16=y
CONFIG_SCSI_IZIP_SLOW_CTR=y
CONFIG_53C700_BE_BUS=y
CONFIG_SCSI_QLOGIC_FAS=m
CONFIG_SCSI_DEBUG=m
CONFIG_A3000_SCSI=m
CONFIG_A2091_SCSI=m
CONFIG_GVP11_SCSI=m
CONFIG_SCSI_A4000T=m
CONFIG_SCSI_ZORRO7XX=m
CONFIG_SCSI_ZORRO_ESP=m
CONFIG_ATARI_SCSI=m
CONFIG_MAC_SCSI=m
CONFIG_SCSI_MAC_ESP=m
CONFIG_MVME16x_SCSI=m
CONFIG_BVME6000_SCSI=m
CONFIG_SCSI_VIRTIO=m
CONFIG_SCSI_LOWLEVEL_PCMCIA=y
CONFIG_PCMCIA_AHA152X=m
CONFIG_PCMCIA_FDOMAIN=m
CONFIG_PCMCIA_NINJA_SCSI=m
CONFIG_PCMCIA_QLOGIC=m
CONFIG_PCMCIA_SYM53C500=m
CONFIG_SCSI_DH=y
CONFIG_SCSI_DH_RDAC=m
CONFIG_SCSI_DH_HP_SW=m
CONFIG_SCSI_DH_EMC=m
CONFIG_SCSI_DH_ALUA=m
# end of SCSI device support

CONFIG_HAVE_PATA_PLATFORM=y
CONFIG_ATA=m
CONFIG_SATA_HOST=y
CONFIG_PATA_TIMINGS=y
CONFIG_ATA_VERBOSE_ERROR=y
CONFIG_ATA_FORCE=y
CONFIG_SATA_PMP=y

#
# Controllers with non-SFF native interface
#
CONFIG_SATA_AHCI_PLATFORM=m
CONFIG_AHCI_BRCM=m
CONFIG_AHCI_DA850=m
CONFIG_AHCI_DM816=m
CONFIG_AHCI_DWC=m
CONFIG_AHCI_ST=m
CONFIG_AHCI_IMX=m
CONFIG_AHCI_CEVA=m
CONFIG_AHCI_MTK=m
CONFIG_AHCI_MVEBU=m
CONFIG_AHCI_SUNXI=m
CONFIG_AHCI_TEGRA=m
CONFIG_AHCI_XGENE=m
CONFIG_AHCI_QORIQ=m
CONFIG_SATA_FSL=m
CONFIG_SATA_GEMINI=m
CONFIG_SATA_AHCI_SEATTLE=m
CONFIG_ATA_SFF=y

#
# SFF controllers with custom DMA interface
#
CONFIG_ATA_BMDMA=y

#
# SATA SFF controllers with BMDMA
#
CONFIG_SATA_DWC=m
CONFIG_SATA_DWC_OLD_DMA=y
CONFIG_SATA_HIGHBANK=m
CONFIG_SATA_MV=m
CONFIG_SATA_RCAR=m

#
# PATA SFF controllers with BMDMA
#
CONFIG_PATA_ARASAN_CF=m
CONFIG_PATA_BK3710=m
CONFIG_PATA_FTIDE010=m
CONFIG_PATA_IMX=m
CONFIG_PATA_PXA=m

#
# PIO-only SFF controllers
#
CONFIG_PATA_FALCON=m
CONFIG_PATA_GAYLE=m
CONFIG_PATA_BUDDHA=m
CONFIG_PATA_ISAPNP=m
CONFIG_PATA_IXP4XX_CF=m
CONFIG_PATA_PCMCIA=m
CONFIG_PATA_PLATFORM=m
CONFIG_PATA_OF_PLATFORM=m
CONFIG_PATA_QDI=m
CONFIG_PATA_SAMSUNG_CF=m
CONFIG_PATA_WINBOND_VLB=m

#
# Generic fallback / legacy drivers
#
CONFIG_PATA_LEGACY=m
CONFIG_MD=y
CONFIG_BLK_DEV_MD=m
CONFIG_MD_LINEAR=m
CONFIG_MD_RAID0=m
CONFIG_MD_RAID1=m
CONFIG_MD_RAID10=m
CONFIG_MD_RAID456=m
CONFIG_MD_MULTIPATH=m
CONFIG_MD_FAULTY=m
CONFIG_MD_CLUSTER=m
CONFIG_BCACHE=m
CONFIG_BCACHE_DEBUG=y
CONFIG_BCACHE_CLOSURES_DEBUG=y
CONFIG_BCACHE_ASYNC_REGISTRATION=y
CONFIG_BLK_DEV_DM_BUILTIN=y
CONFIG_BLK_DEV_DM=m
CONFIG_DM_DEBUG=y
CONFIG_DM_BUFIO=m
CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING=y
CONFIG_DM_BIO_PRISON=m
CONFIG_DM_PERSISTENT_DATA=m
CONFIG_DM_UNSTRIPED=m
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_THIN_PROVISIONING=m
CONFIG_DM_CACHE=m
CONFIG_DM_CACHE_SMQ=m
CONFIG_DM_WRITECACHE=m
CONFIG_DM_EBS=m
CONFIG_DM_ERA=m
CONFIG_DM_CLONE=m
CONFIG_DM_MIRROR=m
CONFIG_DM_LOG_USERSPACE=m
CONFIG_DM_RAID=m
CONFIG_DM_ZERO=m
CONFIG_DM_MULTIPATH=m
CONFIG_DM_MULTIPATH_QL=m
CONFIG_DM_MULTIPATH_ST=m
CONFIG_DM_MULTIPATH_HST=m
CONFIG_DM_MULTIPATH_IOA=m
CONFIG_DM_DELAY=m
CONFIG_DM_DUST=m
CONFIG_DM_UEVENT=y
CONFIG_DM_FLAKEY=m
CONFIG_DM_VERITY=m
CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG=y
CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING=y
CONFIG_DM_VERITY_FEC=y
CONFIG_DM_SWITCH=m
CONFIG_DM_LOG_WRITES=m
CONFIG_DM_INTEGRITY=m
CONFIG_DM_ZONED=m
CONFIG_DM_AUDIT=y
CONFIG_TARGET_CORE=m
CONFIG_TCM_IBLOCK=m
CONFIG_TCM_FILEIO=m
CONFIG_TCM_PSCSI=m
CONFIG_TCM_USER2=m
CONFIG_LOOPBACK_TARGET=m
CONFIG_TCM_FC=m
CONFIG_ISCSI_TARGET=m
CONFIG_SBP_TARGET=m

#
# IEEE 1394 (FireWire) support
#
CONFIG_FIREWIRE=m
CONFIG_FIREWIRE_SBP2=m
CONFIG_FIREWIRE_NET=m
# end of IEEE 1394 (FireWire) support

CONFIG_MACINTOSH_DRIVERS=y
CONFIG_ADB=y
CONFIG_ADB_MACII=y
CONFIG_ADB_IOP=y
CONFIG_ADB_CUDA=y
CONFIG_ADB_PMU=y
CONFIG_ADB_PMU_EVENT=y
CONFIG_INPUT_ADBHID=y
CONFIG_MAC_EMUMOUSEBTN=m
CONFIG_NETDEVICES=y
CONFIG_MII=m
CONFIG_NET_CORE=y
CONFIG_BONDING=m
CONFIG_DUMMY=m
CONFIG_WIREGUARD=m
CONFIG_WIREGUARD_DEBUG=y
CONFIG_EQUALIZER=m
CONFIG_IFB=m
CONFIG_NET_TEAM=m
CONFIG_NET_TEAM_MODE_BROADCAST=m
CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
CONFIG_NET_TEAM_MODE_RANDOM=m
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
CONFIG_NET_TEAM_MODE_LOADBALANCE=m
CONFIG_MACVLAN=m
CONFIG_MACVTAP=m
CONFIG_IPVLAN_L3S=y
CONFIG_IPVLAN=m
CONFIG_IPVTAP=m
CONFIG_VXLAN=m
CONFIG_GENEVE=m
CONFIG_BAREUDP=m
CONFIG_GTP=m
CONFIG_AMT=m
CONFIG_MACSEC=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_NET_POLL_CONTROLLER=y
CONFIG_TUN=m
CONFIG_TAP=m
CONFIG_TUN_VNET_CROSS_LE=y
CONFIG_VETH=m
CONFIG_VIRTIO_NET=m
CONFIG_NLMON=m
CONFIG_NET_VRF=m
CONFIG_VSOCKMON=m
CONFIG_MHI_NET=m
CONFIG_ARCNET=m
CONFIG_ARCNET_1201=m
CONFIG_ARCNET_1051=m
CONFIG_ARCNET_RAW=m
CONFIG_ARCNET_CAP=m
CONFIG_ARCNET_COM90xx=m
CONFIG_ARCNET_COM90xxIO=m
CONFIG_ARCNET_RIM_I=m
CONFIG_ARCNET_COM20020=m
CONFIG_ARCNET_COM20020_ISA=m
CONFIG_ARCNET_COM20020_CS=m
CONFIG_ATM_DRIVERS=y
CONFIG_ATM_DUMMY=m
CONFIG_ATM_TCP=m
CONFIG_CAIF_DRIVERS=y
CONFIG_CAIF_TTY=m
CONFIG_CAIF_VIRTIO=m

#
# Distributed Switch Architecture drivers
#
CONFIG_B53=m
CONFIG_B53_SPI_DRIVER=m
CONFIG_B53_MDIO_DRIVER=m
CONFIG_B53_MMAP_DRIVER=m
CONFIG_B53_SRAB_DRIVER=m
CONFIG_B53_SERDES=m
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA_HIRSCHMANN_HELLCREEK=m
CONFIG_NET_DSA_LANTIQ_GSWIP=m
CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MICROCHIP_KSZ_COMMON=m
CONFIG_NET_DSA_MICROCHIP_KSZ9477_I2C=m
CONFIG_NET_DSA_MICROCHIP_KSZ_SPI=m
CONFIG_NET_DSA_MICROCHIP_KSZ8863_SMI=m
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_MV88E6XXX_PTP=y
CONFIG_NET_DSA_MSCC_SEVILLE=m
CONFIG_NET_DSA_AR9331=m
CONFIG_NET_DSA_QCA8K=m
CONFIG_NET_DSA_SJA1105=m
CONFIG_NET_DSA_SJA1105_PTP=y
CONFIG_NET_DSA_SJA1105_TAS=y
CONFIG_NET_DSA_SJA1105_VL=y
CONFIG_NET_DSA_XRS700X=m
CONFIG_NET_DSA_XRS700X_I2C=m
CONFIG_NET_DSA_XRS700X_MDIO=m
CONFIG_NET_DSA_REALTEK=m
CONFIG_NET_DSA_REALTEK_MDIO=m
CONFIG_NET_DSA_REALTEK_SMI=m
CONFIG_NET_DSA_REALTEK_RTL8365MB=m
CONFIG_NET_DSA_REALTEK_RTL8366RB=m
CONFIG_NET_DSA_SMSC_LAN9303=m
CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_DSA_VITESSE_VSC73XX=m
CONFIG_NET_DSA_VITESSE_VSC73XX_SPI=m
CONFIG_NET_DSA_VITESSE_VSC73XX_PLATFORM=m
# end of Distributed Switch Architecture drivers

CONFIG_ETHERNET=y
CONFIG_MDIO=m
CONFIG_NET_VENDOR_3COM=y
CONFIG_EL3=m
CONFIG_PCMCIA_3C574=m
CONFIG_PCMCIA_3C589=m
CONFIG_NET_VENDOR_ACTIONS=y
CONFIG_OWL_EMAC=m
CONFIG_NET_VENDOR_ALACRITECH=y
CONFIG_ALTERA_TSE=m
CONFIG_NET_VENDOR_AMAZON=y
CONFIG_NET_VENDOR_AMD=y
CONFIG_A2065=m
CONFIG_ARIADNE=m
CONFIG_ATARILANCE=m
CONFIG_HPLANCE=m
CONFIG_MVME147_NET=m
CONFIG_PCMCIA_NMCLAN=m
CONFIG_SUN3LANCE=m
CONFIG_AMD_XGBE=m
CONFIG_AMD_XGBE_DCB=y
CONFIG_NET_XGENE=m
CONFIG_NET_XGENE_V2=m
CONFIG_NET_VENDOR_APPLE=y
CONFIG_MACMACE=m
CONFIG_NET_VENDOR_AQUANTIA=y
CONFIG_NET_VENDOR_ARC=y
CONFIG_ARC_EMAC_CORE=m
CONFIG_ARC_EMAC=m
CONFIG_EMAC_ROCKCHIP=m
CONFIG_NET_VENDOR_ASIX=y
CONFIG_SPI_AX88796C=m
CONFIG_SPI_AX88796C_COMPRESSION=y
CONFIG_NET_VENDOR_BROADCOM=y
CONFIG_B44=m
CONFIG_BCM4908_ENET=m
CONFIG_BCMGENET=m
CONFIG_BGMAC=m
CONFIG_BGMAC_BCMA=m
CONFIG_BGMAC_PLATFORM=m
CONFIG_SYSTEMPORT=m
CONFIG_NET_VENDOR_CADENCE=y
CONFIG_MACB=m
CONFIG_MACB_USE_HWSTAMP=y
CONFIG_NET_CALXEDA_XGMAC=m
CONFIG_NET_VENDOR_CAVIUM=y
CONFIG_NET_VENDOR_CIRRUS=y
CONFIG_CS89x0=m
CONFIG_CS89x0_PLATFORM=m
CONFIG_EP93XX_ETH=m
CONFIG_MAC89x0=m
CONFIG_NET_VENDOR_CORTINA=y
CONFIG_GEMINI_ETHERNET=m
CONFIG_NET_VENDOR_DAVICOM=y
CONFIG_DM9000=m
CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL=y
CONFIG_DM9051=m
CONFIG_DNET=m
CONFIG_NET_VENDOR_ENGLEDER=y
CONFIG_TSNEP=m
CONFIG_TSNEP_SELFTESTS=y
CONFIG_NET_VENDOR_EZCHIP=y
CONFIG_EZCHIP_NPS_MANAGEMENT_ENET=m
CONFIG_NET_VENDOR_FARADAY=y
CONFIG_FTMAC100=m
CONFIG_FTGMAC100=m
CONFIG_NET_VENDOR_FREESCALE=y
CONFIG_FEC=m
CONFIG_FSL_FMAN=m
CONFIG_FSL_PQ_MDIO=m
CONFIG_FSL_XGMAC_MDIO=m
CONFIG_GIANFAR=m
CONFIG_FSL_DPAA2_SWITCH=m
CONFIG_FSL_ENETC_IERB=m
CONFIG_NET_VENDOR_FUJITSU=y
CONFIG_PCMCIA_FMVJ18X=m
CONFIG_NET_VENDOR_FUNGIBLE=y
CONFIG_NET_VENDOR_GOOGLE=y
CONFIG_NET_VENDOR_HISILICON=y
CONFIG_HIX5HD2_GMAC=m
CONFIG_HISI_FEMAC=m
CONFIG_HIP04_ETH=m
CONFIG_HI13X1_GMAC=y
CONFIG_HNS_MDIO=m
CONFIG_HNS=m
CONFIG_HNS_DSAF=m
CONFIG_HNS_ENET=m
CONFIG_NET_VENDOR_HUAWEI=y
CONFIG_NET_VENDOR_I825XX=y
CONFIG_BVME6000_NET=m
CONFIG_MVME16x_NET=m
CONFIG_NET_VENDOR_INTEL=y
CONFIG_NET_VENDOR_WANGXUN=y
CONFIG_KORINA=m
CONFIG_NET_VENDOR_ADI=y
CONFIG_ADIN1110=m
CONFIG_NET_VENDOR_LITEX=y
CONFIG_LITEX_LITEETH=m
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_MV643XX_ETH=m
CONFIG_MVMDIO=m
CONFIG_MVNETA_BM_ENABLE=m
CONFIG_MVNETA=m
CONFIG_MVNETA_BM=m
CONFIG_MVPP2=m
CONFIG_MVPP2_PTP=y
CONFIG_PXA168_ETH=m
CONFIG_PRESTERA=m
CONFIG_NET_VENDOR_MEDIATEK=y
CONFIG_NET_MEDIATEK_SOC_WED=y
CONFIG_NET_MEDIATEK_SOC=m
CONFIG_NET_MEDIATEK_STAR_EMAC=m
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_MLXSW_CORE=m
CONFIG_MLXSW_CORE_HWMON=y
CONFIG_MLXSW_CORE_THERMAL=y
CONFIG_MLXSW_I2C=m
CONFIG_MLXSW_MINIMAL=m
CONFIG_MLXFW=m
CONFIG_MLXBF_GIGE=m
CONFIG_NET_VENDOR_MICREL=y
CONFIG_KS8842=m
CONFIG_KS8851=m
CONFIG_KS8851_MLL=m
CONFIG_NET_VENDOR_MICROCHIP=y
CONFIG_ENC28J60=m
CONFIG_ENC28J60_WRITEVERIFY=y
CONFIG_ENCX24J600=m
CONFIG_LAN966X_SWITCH=m
CONFIG_SPARX5_SWITCH=m
CONFIG_NET_VENDOR_MICROSEMI=y
CONFIG_MSCC_OCELOT_SWITCH_LIB=m
CONFIG_MSCC_OCELOT_SWITCH=m
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_NI=y
CONFIG_NI_XGE_MANAGEMENT_ENET=m
CONFIG_NET_VENDOR_NATSEMI=y
CONFIG_MACSONIC=m
CONFIG_NET_VENDOR_NETRONOME=y
CONFIG_NET_VENDOR_8390=y
CONFIG_PCMCIA_AXNET=m
CONFIG_AX88796=m
CONFIG_AX88796_93CX6=y
CONFIG_XSURF100=m
CONFIG_HYDRA=m
CONFIG_MAC8390=m
CONFIG_NE2000=m
CONFIG_APNE=m
CONFIG_PCMCIA_PCNET=m
CONFIG_ULTRA=m
CONFIG_WD80x3=m
CONFIG_ZORRO8390=m
CONFIG_LPC_ENET=m
CONFIG_ETHOC=m
CONFIG_NET_VENDOR_PENSANDO=y
CONFIG_NET_VENDOR_QUALCOMM=y
CONFIG_QCA7000=m
CONFIG_QCA7000_SPI=m
CONFIG_QCA7000_UART=m
CONFIG_QCOM_EMAC=m
CONFIG_RMNET=m
CONFIG_NET_VENDOR_RENESAS=y
CONFIG_SH_ETH=m
CONFIG_RAVB=m
CONFIG_NET_VENDOR_ROCKER=y
CONFIG_NET_VENDOR_SAMSUNG=y
CONFIG_SXGBE_ETH=m
CONFIG_NET_VENDOR_SEEQ=y
CONFIG_NET_VENDOR_SOLARFLARE=y
CONFIG_NET_VENDOR_SMSC=y
CONFIG_SMC9194=m
CONFIG_SMC91X=m
CONFIG_PCMCIA_SMC91C92=m
CONFIG_SMC911X=m
CONFIG_SMSC911X=m
CONFIG_NET_VENDOR_SOCIONEXT=y
CONFIG_SNI_AVE=m
CONFIG_SNI_NETSEC=m
CONFIG_NET_VENDOR_STMICRO=y
CONFIG_STMMAC_ETH=m
CONFIG_STMMAC_SELFTESTS=y
CONFIG_STMMAC_PLATFORM=m
CONFIG_DWMAC_DWC_QOS_ETH=m
CONFIG_DWMAC_GENERIC=m
CONFIG_DWMAC_ANARION=m
CONFIG_DWMAC_INGENIC=m
CONFIG_DWMAC_IPQ806X=m
CONFIG_DWMAC_LPC18XX=m
CONFIG_DWMAC_MEDIATEK=m
CONFIG_DWMAC_MESON=m
CONFIG_DWMAC_OXNAS=m
CONFIG_DWMAC_QCOM_ETHQOS=m
CONFIG_DWMAC_ROCKCHIP=m
CONFIG_DWMAC_SOCFPGA=m
CONFIG_DWMAC_STI=m
CONFIG_DWMAC_STM32=m
CONFIG_DWMAC_SUNXI=m
CONFIG_DWMAC_SUN8I=m
CONFIG_DWMAC_IMX8=m
CONFIG_DWMAC_INTEL_PLAT=m
CONFIG_DWMAC_VISCONTI=m
CONFIG_NET_VENDOR_SUNPLUS=y
CONFIG_SP7021_EMAC=m
CONFIG_NET_VENDOR_SYNOPSYS=y
CONFIG_DWC_XLGMAC=m
CONFIG_NET_VENDOR_VERTEXCOM=y
CONFIG_MSE102X=m
CONFIG_NET_VENDOR_VIA=y
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
CONFIG_NET_VENDOR_WIZNET=y
CONFIG_WIZNET_W5100=m
CONFIG_WIZNET_W5300=m
# CONFIG_WIZNET_BUS_DIRECT is not set
# CONFIG_WIZNET_BUS_INDIRECT is not set
CONFIG_WIZNET_BUS_ANY=y
CONFIG_WIZNET_W5100_SPI=m
CONFIG_NET_VENDOR_XILINX=y
CONFIG_XILINX_EMACLITE=m
CONFIG_XILINX_AXI_EMAC=m
CONFIG_XILINX_LL_TEMAC=m
CONFIG_NET_VENDOR_XIRCOM=y
CONFIG_PCMCIA_XIRC2PS=m
CONFIG_QCOM_IPA=m
CONFIG_NET_SB1000=m
CONFIG_PHYLINK=m
CONFIG_PHYLIB=m
CONFIG_SWPHY=y
CONFIG_LED_TRIGGER_PHY=y
CONFIG_FIXED_PHY=m
CONFIG_SFP=m

#
# MII PHY device drivers
#
CONFIG_AMD_PHY=m
CONFIG_MESON_GXL_PHY=m
CONFIG_ADIN_PHY=m
CONFIG_ADIN1100_PHY=m
CONFIG_AQUANTIA_PHY=m
CONFIG_AX88796B_PHY=m
CONFIG_BROADCOM_PHY=m
CONFIG_BCM54140_PHY=m
CONFIG_BCM63XX_PHY=m
CONFIG_BCM7XXX_PHY=m
CONFIG_BCM84881_PHY=m
CONFIG_BCM87XX_PHY=m
CONFIG_BCM_CYGNUS_PHY=m
CONFIG_BCM_NET_PHYLIB=m
CONFIG_BCM_NET_PHYPTP=m
CONFIG_CICADA_PHY=m
CONFIG_CORTINA_PHY=m
CONFIG_DAVICOM_PHY=m
CONFIG_ICPLUS_PHY=m
CONFIG_LXT_PHY=m
CONFIG_INTEL_XWAY_PHY=m
CONFIG_LSI_ET1011C_PHY=m
CONFIG_MARVELL_PHY=m
CONFIG_MARVELL_10G_PHY=m
CONFIG_MARVELL_88X2222_PHY=m
CONFIG_MAXLINEAR_GPHY=m
CONFIG_MEDIATEK_GE_PHY=m
CONFIG_MICREL_PHY=m
CONFIG_MICROCHIP_PHY=m
CONFIG_MICROCHIP_T1_PHY=m
CONFIG_MICROSEMI_PHY=m
CONFIG_MOTORCOMM_PHY=m
CONFIG_NATIONAL_PHY=m
CONFIG_NXP_C45_TJA11XX_PHY=m
CONFIG_NXP_TJA11XX_PHY=m
CONFIG_AT803X_PHY=m
CONFIG_QSEMI_PHY=m
CONFIG_REALTEK_PHY=m
CONFIG_RENESAS_PHY=m
CONFIG_ROCKCHIP_PHY=m
CONFIG_SMSC_PHY=m
CONFIG_STE10XP=m
CONFIG_TERANETICS_PHY=m
CONFIG_DP83822_PHY=m
CONFIG_DP83TC811_PHY=m
CONFIG_DP83848_PHY=m
CONFIG_DP83867_PHY=m
CONFIG_DP83869_PHY=m
CONFIG_DP83TD510_PHY=m
CONFIG_VITESSE_PHY=m
CONFIG_XILINX_GMII2RGMII=m
CONFIG_MICREL_KS8995MA=m
CONFIG_PSE_CONTROLLER=y
CONFIG_PSE_REGULATOR=m
CONFIG_CAN_DEV=m
CONFIG_CAN_VCAN=m
CONFIG_CAN_VXCAN=m
CONFIG_CAN_NETLINK=y
CONFIG_CAN_CALC_BITTIMING=y
CONFIG_CAN_RX_OFFLOAD=y
CONFIG_CAN_AT91=m
CONFIG_CAN_CAN327=m
CONFIG_CAN_FLEXCAN=m
CONFIG_CAN_GRCAN=m
CONFIG_CAN_SLCAN=m
CONFIG_CAN_SUN4I=m
CONFIG_CAN_XILINXCAN=m
CONFIG_CAN_C_CAN=m
CONFIG_CAN_C_CAN_PLATFORM=m
CONFIG_CAN_CC770=m
CONFIG_CAN_CC770_ISA=m
CONFIG_CAN_CC770_PLATFORM=m
CONFIG_CAN_CTUCANFD=m
CONFIG_CAN_CTUCANFD_PLATFORM=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_M_CAN=m
CONFIG_CAN_M_CAN_PLATFORM=m
CONFIG_CAN_M_CAN_TCAN4X5X=m
CONFIG_CAN_RCAR=m
CONFIG_CAN_RCAR_CANFD=m
CONFIG_CAN_SJA1000=m
CONFIG_CAN_EMS_PCMCIA=m
CONFIG_CAN_SJA1000_ISA=m
CONFIG_CAN_SJA1000_PLATFORM=m
CONFIG_CAN_TSCAN1=m
CONFIG_CAN_SOFTING=m
CONFIG_CAN_SOFTING_CS=m

#
# CAN SPI interfaces
#
CONFIG_CAN_HI311X=m
CONFIG_CAN_MCP251X=m
CONFIG_CAN_MCP251XFD=m
CONFIG_CAN_MCP251XFD_SANITY=y
# end of CAN SPI interfaces

#
# CAN USB interfaces
#
CONFIG_CAN_8DEV_USB=m
CONFIG_CAN_EMS_USB=m
CONFIG_CAN_ESD_USB=m
CONFIG_CAN_ETAS_ES58X=m
CONFIG_CAN_GS_USB=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_MCBA_USB=m
CONFIG_CAN_PEAK_USB=m
CONFIG_CAN_UCAN=m
# end of CAN USB interfaces

CONFIG_CAN_DEBUG_DEVICES=y

#
# MCTP Device Drivers
#
CONFIG_MCTP_SERIAL=m
CONFIG_MCTP_TRANSPORT_I2C=m
# end of MCTP Device Drivers

CONFIG_MDIO_DEVICE=m
CONFIG_MDIO_BUS=m
CONFIG_FWNODE_MDIO=m
CONFIG_OF_MDIO=m
CONFIG_MDIO_DEVRES=m
CONFIG_MDIO_SUN4I=m
CONFIG_MDIO_XGENE=m
CONFIG_MDIO_ASPEED=m
CONFIG_MDIO_BITBANG=m
CONFIG_MDIO_BCM_IPROC=m
CONFIG_MDIO_BCM_UNIMAC=m
CONFIG_MDIO_CAVIUM=m
CONFIG_MDIO_GPIO=m
CONFIG_MDIO_HISI_FEMAC=m
CONFIG_MDIO_I2C=m
CONFIG_MDIO_MVUSB=m
CONFIG_MDIO_MSCC_MIIM=m
CONFIG_MDIO_MOXART=m
CONFIG_MDIO_OCTEON=m
CONFIG_MDIO_IPQ4019=m
CONFIG_MDIO_IPQ8064=m

#
# MDIO Multiplexers
#
CONFIG_MDIO_BUS_MUX=m
CONFIG_MDIO_BUS_MUX_MESON_G12A=m
CONFIG_MDIO_BUS_MUX_BCM6368=m
CONFIG_MDIO_BUS_MUX_BCM_IPROC=m
CONFIG_MDIO_BUS_MUX_GPIO=m
CONFIG_MDIO_BUS_MUX_MULTIPLEXER=m
CONFIG_MDIO_BUS_MUX_MMIOREG=m

#
# PCS device drivers
#
CONFIG_PCS_XPCS=m
CONFIG_PCS_LYNX=m
CONFIG_PCS_RZN1_MIIC=m
CONFIG_PCS_ALTERA_TSE=m
# end of PCS device drivers

CONFIG_PLIP=m
CONFIG_PPP=m
CONFIG_PPP_BSDCOMP=m
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_FILTER=y
CONFIG_PPP_MPPE=m
CONFIG_PPP_MULTILINK=y
CONFIG_PPPOATM=m
CONFIG_PPPOE=m
CONFIG_PPTP=m
CONFIG_PPPOL2TP=m
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
CONFIG_SLIP=m
CONFIG_SLHC=m
CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP_SMART=y
CONFIG_SLIP_MODE_SLIP6=y

#
# Host-side USB support is needed for USB Network Adapter support
#
CONFIG_USB_NET_DRIVERS=m
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
CONFIG_USB_RTL8150=m
CONFIG_USB_RTL8152=m
CONFIG_USB_LAN78XX=m
CONFIG_USB_USBNET=m
CONFIG_USB_NET_AX8817X=m
CONFIG_USB_NET_AX88179_178A=m
CONFIG_USB_NET_CDCETHER=m
CONFIG_USB_NET_CDC_EEM=m
CONFIG_USB_NET_CDC_NCM=m
CONFIG_USB_NET_HUAWEI_CDC_NCM=m
CONFIG_USB_NET_CDC_MBIM=m
CONFIG_USB_NET_DM9601=m
CONFIG_USB_NET_SR9700=m
CONFIG_USB_NET_SR9800=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_GL620A=m
CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_MCS7830=m
CONFIG_USB_NET_RNDIS_HOST=m
CONFIG_USB_NET_CDC_SUBSET_ENABLE=m
CONFIG_USB_NET_CDC_SUBSET=m
CONFIG_USB_ALI_M5632=y
CONFIG_USB_AN2720=y
CONFIG_USB_BELKIN=y
CONFIG_USB_ARMLINUX=y
CONFIG_USB_EPSON2888=y
CONFIG_USB_KC2190=y
CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_NET_CX82310_ETH=m
CONFIG_USB_NET_KALMIA=m
CONFIG_USB_NET_QMI_WWAN=m
CONFIG_USB_HSO=m
CONFIG_USB_NET_INT51X1=m
CONFIG_USB_CDC_PHONET=m
CONFIG_USB_IPHETH=m
CONFIG_USB_SIERRA_NET=m
CONFIG_USB_VL600=m
CONFIG_USB_NET_CH9200=m
CONFIG_USB_NET_AQC111=m
CONFIG_USB_RTL8153_ECM=m
CONFIG_WLAN=y
CONFIG_WLAN_VENDOR_ADMTEK=y
CONFIG_ATH_COMMON=m
CONFIG_WLAN_VENDOR_ATH=y
CONFIG_ATH_DEBUG=y
CONFIG_ATH_REG_DYNAMIC_USER_REG_HINTS=y
CONFIG_ATH_REG_DYNAMIC_USER_CERT_TESTING=y
CONFIG_ATH9K_HW=m
CONFIG_ATH9K_COMMON=m
CONFIG_ATH9K_COMMON_DEBUG=y
CONFIG_ATH9K_DFS_DEBUGFS=y
CONFIG_ATH9K_BTCOEX_SUPPORT=y
CONFIG_ATH9K=m
CONFIG_ATH9K_AHB=y
CONFIG_ATH9K_DEBUGFS=y
CONFIG_ATH9K_STATION_STATISTICS=y
CONFIG_ATH9K_TX99=y
CONFIG_ATH9K_DFS_CERTIFIED=y
CONFIG_ATH9K_DYNACK=y
CONFIG_ATH9K_RFKILL=y
CONFIG_ATH9K_CHANNEL_CONTEXT=y
CONFIG_ATH9K_PCOEM=y
CONFIG_ATH9K_HTC=m
CONFIG_ATH9K_HTC_DEBUGFS=y
CONFIG_ATH9K_HWRNG=y
CONFIG_ATH9K_COMMON_SPECTRAL=y
CONFIG_CARL9170=m
CONFIG_CARL9170_LEDS=y
CONFIG_CARL9170_DEBUGFS=y
CONFIG_CARL9170_WPC=y
CONFIG_CARL9170_HWRNG=y
CONFIG_ATH6KL=m
CONFIG_ATH6KL_SDIO=m
CONFIG_ATH6KL_USB=m
CONFIG_ATH6KL_DEBUG=y
CONFIG_ATH6KL_REGDOMAIN=y
CONFIG_AR5523=m
CONFIG_ATH10K=m
CONFIG_ATH10K_CE=y
CONFIG_ATH10K_SDIO=m
CONFIG_ATH10K_USB=m
CONFIG_ATH10K_SNOC=m
CONFIG_ATH10K_DEBUG=y
CONFIG_ATH10K_DEBUGFS=y
CONFIG_ATH10K_SPECTRAL=y
CONFIG_ATH10K_DFS_CERTIFIED=y
CONFIG_WCN36XX=m
CONFIG_WCN36XX_DEBUGFS=y
CONFIG_ATH11K=m
CONFIG_ATH11K_AHB=m
CONFIG_ATH11K_DEBUG=y
CONFIG_ATH11K_DEBUGFS=y
CONFIG_ATH11K_SPECTRAL=y
CONFIG_WLAN_VENDOR_ATMEL=y
CONFIG_ATMEL=m
CONFIG_PCMCIA_ATMEL=m
CONFIG_AT76C50X_USB=m
CONFIG_WLAN_VENDOR_BROADCOM=y
CONFIG_B43=m
CONFIG_B43_BCMA=y
CONFIG_B43_SSB=y
CONFIG_B43_BUSES_BCMA_AND_SSB=y
# CONFIG_B43_BUSES_BCMA is not set
# CONFIG_B43_BUSES_SSB is not set
CONFIG_B43_SDIO=y
CONFIG_B43_BCMA_PIO=y
CONFIG_B43_PIO=y
CONFIG_B43_PHY_G=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_HT=y
CONFIG_B43_LEDS=y
CONFIG_B43_HWRNG=y
CONFIG_B43_DEBUG=y
CONFIG_B43LEGACY=m
CONFIG_B43LEGACY_LEDS=y
CONFIG_B43LEGACY_HWRNG=y
CONFIG_B43LEGACY_DEBUG=y
CONFIG_B43LEGACY_DMA=y
CONFIG_B43LEGACY_PIO=y
CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
# CONFIG_B43LEGACY_DMA_MODE is not set
# CONFIG_B43LEGACY_PIO_MODE is not set
CONFIG_BRCMUTIL=m
CONFIG_BRCMSMAC=m
CONFIG_BRCMSMAC_LEDS=y
CONFIG_BRCMFMAC=m
CONFIG_BRCMFMAC_PROTO_BCDC=y
CONFIG_BRCMFMAC_SDIO=y
CONFIG_BRCMFMAC_USB=y
CONFIG_BRCM_TRACING=y
CONFIG_BRCMDBG=y
CONFIG_WLAN_VENDOR_CISCO=y
CONFIG_AIRO_CS=m
CONFIG_WLAN_VENDOR_INTEL=y
CONFIG_WLAN_VENDOR_INTERSIL=y
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
CONFIG_HOSTAP_FIRMWARE_NVRAM=y
CONFIG_HOSTAP_CS=m
CONFIG_HERMES=m
CONFIG_HERMES_PRISM=y
CONFIG_HERMES_CACHE_FW_ON_INIT=y
CONFIG_ORINOCO_USB=m
CONFIG_P54_COMMON=m
CONFIG_P54_USB=m
CONFIG_P54_SPI=m
CONFIG_P54_SPI_DEFAULT_EEPROM=y
CONFIG_P54_LEDS=y
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_LIBERTAS=m
CONFIG_LIBERTAS_USB=m
CONFIG_LIBERTAS_SDIO=m
CONFIG_LIBERTAS_SPI=m
CONFIG_LIBERTAS_DEBUG=y
CONFIG_LIBERTAS_MESH=y
CONFIG_LIBERTAS_THINFIRM=m
CONFIG_LIBERTAS_THINFIRM_DEBUG=y
CONFIG_LIBERTAS_THINFIRM_USB=m
CONFIG_MWIFIEX=m
CONFIG_MWIFIEX_SDIO=m
CONFIG_MWIFIEX_USB=m
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_MT7601U=m
CONFIG_MT76_CORE=m
CONFIG_MT76_LEDS=y
CONFIG_MT76_USB=m
CONFIG_MT76_SDIO=m
CONFIG_MT76x02_LIB=m
CONFIG_MT76x02_USB=m
CONFIG_MT76_CONNAC_LIB=m
CONFIG_MT76x0_COMMON=m
CONFIG_MT76x0U=m
CONFIG_MT76x2_COMMON=m
CONFIG_MT76x2U=m
CONFIG_MT7615_COMMON=m
CONFIG_MT7663_USB_SDIO_COMMON=m
CONFIG_MT7663U=m
CONFIG_MT7663S=m
CONFIG_MT7921_COMMON=m
CONFIG_MT7921S=m
CONFIG_MT7921U=m
CONFIG_WLAN_VENDOR_MICROCHIP=y
CONFIG_WILC1000=m
CONFIG_WILC1000_SDIO=m
CONFIG_WILC1000_SPI=m
CONFIG_WILC1000_HW_OOB_INTR=y
CONFIG_WLAN_VENDOR_PURELIFI=y
CONFIG_PLFXLC=m
CONFIG_WLAN_VENDOR_RALINK=y
CONFIG_RT2X00=m
CONFIG_RT2500USB=m
CONFIG_RT73USB=m
CONFIG_RT2800USB=m
CONFIG_RT2800USB_RT33XX=y
CONFIG_RT2800USB_RT35XX=y
CONFIG_RT2800USB_RT3573=y
CONFIG_RT2800USB_RT53XX=y
CONFIG_RT2800USB_RT55XX=y
CONFIG_RT2800USB_UNKNOWN=y
CONFIG_RT2800_LIB=m
CONFIG_RT2X00_LIB_USB=m
CONFIG_RT2X00_LIB=m
CONFIG_RT2X00_LIB_FIRMWARE=y
CONFIG_RT2X00_LIB_CRYPTO=y
CONFIG_RT2X00_LIB_LEDS=y
CONFIG_RT2X00_LIB_DEBUGFS=y
CONFIG_RT2X00_DEBUG=y
CONFIG_WLAN_VENDOR_REALTEK=y
CONFIG_RTL8187=m
CONFIG_RTL8187_LEDS=y
CONFIG_RTL_CARDS=m
CONFIG_RTL8192CU=m
CONFIG_RTLWIFI=m
CONFIG_RTLWIFI_USB=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTL8192C_COMMON=m
CONFIG_RTL8XXXU=m
CONFIG_RTL8XXXU_UNTESTED=y
CONFIG_RTW88=m
CONFIG_RTW89=m
CONFIG_WLAN_VENDOR_RSI=y
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
CONFIG_RSI_SDIO=m
CONFIG_RSI_USB=m
CONFIG_RSI_COEX=y
CONFIG_WLAN_VENDOR_SILABS=y
CONFIG_WFX=m
CONFIG_WLAN_VENDOR_ST=y
CONFIG_CW1200=m
CONFIG_CW1200_WLAN_SDIO=m
CONFIG_CW1200_WLAN_SPI=m
CONFIG_WLAN_VENDOR_TI=y
CONFIG_WL1251=m
CONFIG_WL1251_SPI=m
CONFIG_WL1251_SDIO=m
CONFIG_WL12XX=m
CONFIG_WL18XX=m
CONFIG_WLCORE=m
CONFIG_WLCORE_SPI=m
CONFIG_WLCORE_SDIO=m
CONFIG_WILINK_PLATFORM_DATA=y
CONFIG_WLAN_VENDOR_ZYDAS=y
CONFIG_USB_ZD1201=m
CONFIG_ZD1211RW=m
CONFIG_ZD1211RW_DEBUG=y
CONFIG_WLAN_VENDOR_QUANTENNA=y
CONFIG_PCMCIA_RAYCS=m
CONFIG_PCMCIA_WL3501=m
CONFIG_MAC80211_HWSIM=m
CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_VIRT_WIFI=m
CONFIG_WAN=y
CONFIG_HDLC=m
CONFIG_HDLC_RAW=m
CONFIG_HDLC_RAW_ETH=m
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC_PPP=m
CONFIG_HDLC_X25=m
CONFIG_N2=m
CONFIG_C101=m
CONFIG_FSL_UCC_HDLC=m
CONFIG_SLIC_DS26522=m
CONFIG_LAPBETHER=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_MRF24J40=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_ATUSB=m
CONFIG_IEEE802154_ADF7242=m
CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CA8210_DEBUGFS=y
CONFIG_IEEE802154_MCR20A=m
CONFIG_IEEE802154_HWSIM=m

#
# Wireless WAN
#
CONFIG_WWAN=m
CONFIG_WWAN_DEBUGFS=y
CONFIG_WWAN_HWSIM=m
CONFIG_MHI_WWAN_CTRL=m
CONFIG_MHI_WWAN_MBIM=m
CONFIG_QCOM_BAM_DMUX=m
CONFIG_RPMSG_WWAN_CTRL=m
# end of Wireless WAN

CONFIG_NETDEVSIM=m
CONFIG_NET_FAILOVER=m
CONFIG_NETDEV_LEGACY_INIT=y
CONFIG_ISDN=y
CONFIG_ISDN_CAPI=y
CONFIG_CAPI_TRACE=y
CONFIG_ISDN_CAPI_MIDDLEWARE=y
CONFIG_MISDN=m
CONFIG_MISDN_DSP=m
CONFIG_MISDN_L1OIP=m

#
# mISDN hardware drivers
#
CONFIG_MISDN_HFCUSB=m

#
# Input device support
#
CONFIG_INPUT=y
CONFIG_INPUT_LEDS=m
CONFIG_INPUT_FF_MEMLESS=m
CONFIG_INPUT_SPARSEKMAP=m
CONFIG_INPUT_MATRIXKMAP=m
CONFIG_INPUT_VIVALDIFMAP=m

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=m
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_JOYDEV=m
CONFIG_INPUT_EVDEV=m
CONFIG_INPUT_EVBUG=m

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ADC=m
CONFIG_KEYBOARD_ADP5588=m
CONFIG_KEYBOARD_ADP5589=m
CONFIG_KEYBOARD_AMIGA=m
CONFIG_KEYBOARD_ATARI=m
CONFIG_KEYBOARD_ATKBD=m
CONFIG_KEYBOARD_QT1050=m
CONFIG_KEYBOARD_QT1070=m
CONFIG_KEYBOARD_QT2160=m
CONFIG_KEYBOARD_CLPS711X=m
CONFIG_KEYBOARD_DLINK_DIR685=m
CONFIG_KEYBOARD_LKKBD=m
CONFIG_KEYBOARD_EP93XX=m
CONFIG_KEYBOARD_GPIO=m
CONFIG_KEYBOARD_GPIO_POLLED=m
CONFIG_KEYBOARD_TCA6416=m
CONFIG_KEYBOARD_TCA8418=m
CONFIG_KEYBOARD_MATRIX=m
CONFIG_KEYBOARD_HIL_OLD=m
CONFIG_KEYBOARD_HIL=m
CONFIG_KEYBOARD_LM8323=m
CONFIG_KEYBOARD_LM8333=m
CONFIG_KEYBOARD_MAX7359=m
CONFIG_KEYBOARD_MCS=m
CONFIG_KEYBOARD_MPR121=m
CONFIG_KEYBOARD_SNVS_PWRKEY=m
CONFIG_KEYBOARD_IMX=m
CONFIG_KEYBOARD_IMX_SC_KEY=m
CONFIG_KEYBOARD_NEWTON=m
CONFIG_KEYBOARD_OPENCORES=m
CONFIG_KEYBOARD_PINEPHONE=m
CONFIG_KEYBOARD_PMIC8XXX=m
CONFIG_KEYBOARD_SAMSUNG=m
CONFIG_KEYBOARD_GOLDFISH_EVENTS=m
CONFIG_KEYBOARD_STOWAWAY=m
CONFIG_KEYBOARD_ST_KEYSCAN=m
CONFIG_KEYBOARD_SUNKBD=m
CONFIG_KEYBOARD_SH_KEYSC=m
CONFIG_KEYBOARD_STMPE=m
CONFIG_KEYBOARD_IQS62X=m
CONFIG_KEYBOARD_OMAP4=m
CONFIG_KEYBOARD_TM2_TOUCHKEY=m
CONFIG_KEYBOARD_XTKBD=m
CONFIG_KEYBOARD_CROS_EC=m
CONFIG_KEYBOARD_CAP11XX=m
CONFIG_KEYBOARD_BCM=m
CONFIG_KEYBOARD_MT6779=m
CONFIG_KEYBOARD_MTK_PMIC=m
CONFIG_KEYBOARD_CYPRESS_SF=m
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=m
CONFIG_MOUSE_PS2_ALPS=y
CONFIG_MOUSE_PS2_BYD=y
CONFIG_MOUSE_PS2_LOGIPS2PP=y
CONFIG_MOUSE_PS2_SYNAPTICS=y
CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y
CONFIG_MOUSE_PS2_CYPRESS=y
CONFIG_MOUSE_PS2_TRACKPOINT=y
CONFIG_MOUSE_PS2_ELANTECH=y
CONFIG_MOUSE_PS2_ELANTECH_SMBUS=y
CONFIG_MOUSE_PS2_SENTELIC=y
CONFIG_MOUSE_PS2_TOUCHKIT=y
CONFIG_MOUSE_PS2_FOCALTECH=y
CONFIG_MOUSE_PS2_SMBUS=y
CONFIG_MOUSE_SERIAL=m
CONFIG_MOUSE_APPLETOUCH=m
CONFIG_MOUSE_BCM5974=m
CONFIG_MOUSE_CYAPA=m
CONFIG_MOUSE_ELAN_I2C=m
CONFIG_MOUSE_ELAN_I2C_I2C=y
CONFIG_MOUSE_ELAN_I2C_SMBUS=y
CONFIG_MOUSE_INPORT=m
CONFIG_MOUSE_ATIXL=y
CONFIG_MOUSE_LOGIBM=m
CONFIG_MOUSE_PC110PAD=m
CONFIG_MOUSE_AMIGA=m
CONFIG_MOUSE_ATARI=m
CONFIG_MOUSE_VSXXXAA=m
CONFIG_MOUSE_GPIO=m
CONFIG_MOUSE_SYNAPTICS_I2C=m
CONFIG_MOUSE_SYNAPTICS_USB=m
CONFIG_INPUT_JOYSTICK=y
CONFIG_JOYSTICK_ANALOG=m
CONFIG_JOYSTICK_A3D=m
CONFIG_JOYSTICK_ADC=m
CONFIG_JOYSTICK_ADI=m
CONFIG_JOYSTICK_COBRA=m
CONFIG_JOYSTICK_GF2K=m
CONFIG_JOYSTICK_GRIP=m
CONFIG_JOYSTICK_GRIP_MP=m
CONFIG_JOYSTICK_GUILLEMOT=m
CONFIG_JOYSTICK_INTERACT=m
CONFIG_JOYSTICK_SIDEWINDER=m
CONFIG_JOYSTICK_TMDC=m
CONFIG_JOYSTICK_IFORCE=m
CONFIG_JOYSTICK_IFORCE_USB=m
CONFIG_JOYSTICK_IFORCE_232=m
CONFIG_JOYSTICK_WARRIOR=m
CONFIG_JOYSTICK_MAGELLAN=m
CONFIG_JOYSTICK_SPACEORB=m
CONFIG_JOYSTICK_SPACEBALL=m
CONFIG_JOYSTICK_STINGER=m
CONFIG_JOYSTICK_TWIDJOY=m
CONFIG_JOYSTICK_ZHENHUA=m
CONFIG_JOYSTICK_DB9=m
CONFIG_JOYSTICK_GAMECON=m
CONFIG_JOYSTICK_TURBOGRAFX=m
CONFIG_JOYSTICK_AMIGA=m
CONFIG_JOYSTICK_AS5011=m
CONFIG_JOYSTICK_JOYDUMP=m
CONFIG_JOYSTICK_XPAD=m
CONFIG_JOYSTICK_XPAD_FF=y
CONFIG_JOYSTICK_XPAD_LEDS=y
CONFIG_JOYSTICK_WALKERA0701=m
CONFIG_JOYSTICK_PSXPAD_SPI=m
CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PXRC=m
CONFIG_JOYSTICK_QWIIC=m
CONFIG_JOYSTICK_FSIA6B=m
CONFIG_JOYSTICK_SENSEHAT=m
CONFIG_INPUT_TABLET=y
CONFIG_TABLET_USB_ACECAD=m
CONFIG_TABLET_USB_AIPTEK=m
CONFIG_TABLET_USB_HANWANG=m
CONFIG_TABLET_USB_KBTAB=m
CONFIG_TABLET_USB_PEGASUS=m
CONFIG_TABLET_SERIAL_WACOM4=m
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_ADS7846=m
CONFIG_TOUCHSCREEN_AD7877=m
CONFIG_TOUCHSCREEN_AD7879=m
CONFIG_TOUCHSCREEN_AD7879_I2C=m
CONFIG_TOUCHSCREEN_AD7879_SPI=m
CONFIG_TOUCHSCREEN_ADC=m
CONFIG_TOUCHSCREEN_AR1021_I2C=m
CONFIG_TOUCHSCREEN_ATMEL_MXT=m
CONFIG_TOUCHSCREEN_ATMEL_MXT_T37=y
CONFIG_TOUCHSCREEN_AUO_PIXCIR=m
CONFIG_TOUCHSCREEN_BU21013=m
CONFIG_TOUCHSCREEN_BU21029=m
CONFIG_TOUCHSCREEN_CHIPONE_ICN8318=m
CONFIG_TOUCHSCREEN_CY8CTMA140=m
CONFIG_TOUCHSCREEN_CY8CTMG110=m
CONFIG_TOUCHSCREEN_CYTTSP_CORE=m
CONFIG_TOUCHSCREEN_CYTTSP_I2C=m
CONFIG_TOUCHSCREEN_CYTTSP_SPI=m
CONFIG_TOUCHSCREEN_CYTTSP4_CORE=m
CONFIG_TOUCHSCREEN_CYTTSP4_I2C=m
CONFIG_TOUCHSCREEN_CYTTSP4_SPI=m
CONFIG_TOUCHSCREEN_DA9052=m
CONFIG_TOUCHSCREEN_DYNAPRO=m
CONFIG_TOUCHSCREEN_HAMPSHIRE=m
CONFIG_TOUCHSCREEN_EETI=m
CONFIG_TOUCHSCREEN_EGALAX=m
CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
CONFIG_TOUCHSCREEN_EXC3000=m
CONFIG_TOUCHSCREEN_FUJITSU=m
CONFIG_TOUCHSCREEN_GOODIX=m
CONFIG_TOUCHSCREEN_HIDEEP=m
CONFIG_TOUCHSCREEN_HYCON_HY46XX=m
CONFIG_TOUCHSCREEN_ILI210X=m
CONFIG_TOUCHSCREEN_ILITEK=m
CONFIG_TOUCHSCREEN_IPROC=m
CONFIG_TOUCHSCREEN_S6SY761=m
CONFIG_TOUCHSCREEN_GUNZE=m
CONFIG_TOUCHSCREEN_EKTF2127=m
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
CONFIG_TOUCHSCREEN_WACOM_W8001=m
CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TOUCHSCREEN_MAX11801=m
CONFIG_TOUCHSCREEN_MCS5000=m
CONFIG_TOUCHSCREEN_MMS114=m
CONFIG_TOUCHSCREEN_MELFAS_MIP4=m
CONFIG_TOUCHSCREEN_MSG2638=m
CONFIG_TOUCHSCREEN_MTOUCH=m
CONFIG_TOUCHSCREEN_IMAGIS=m
CONFIG_TOUCHSCREEN_IMX6UL_TSC=m
CONFIG_TOUCHSCREEN_INEXIO=m
CONFIG_TOUCHSCREEN_MK712=m
CONFIG_TOUCHSCREEN_HTCPEN=m
CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_EDT_FT5X06=m
CONFIG_TOUCHSCREEN_RASPBERRYPI_FW=m
CONFIG_TOUCHSCREEN_MIGOR=m
CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
CONFIG_TOUCHSCREEN_TOUCHWIN=m
CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
CONFIG_TOUCHSCREEN_UCB1400=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_WDT87XX_I2C=m
CONFIG_TOUCHSCREEN_WM831X=m
CONFIG_TOUCHSCREEN_WM97XX=m
CONFIG_TOUCHSCREEN_WM9705=y
CONFIG_TOUCHSCREEN_WM9712=y
CONFIG_TOUCHSCREEN_WM9713=y
CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
CONFIG_TOUCHSCREEN_MXS_LRADC=m
CONFIG_TOUCHSCREEN_MX25=m
CONFIG_TOUCHSCREEN_MC13783=m
CONFIG_TOUCHSCREEN_USB_EGALAX=y
CONFIG_TOUCHSCREEN_USB_PANJIT=y
CONFIG_TOUCHSCREEN_USB_3M=y
CONFIG_TOUCHSCREEN_USB_ITM=y
CONFIG_TOUCHSCREEN_USB_ETURBO=y
CONFIG_TOUCHSCREEN_USB_GUNZE=y
CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
CONFIG_TOUCHSCREEN_USB_GOTOP=y
CONFIG_TOUCHSCREEN_USB_JASTEC=y
CONFIG_TOUCHSCREEN_USB_ELO=y
CONFIG_TOUCHSCREEN_USB_E2I=y
CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
CONFIG_TOUCHSCREEN_USB_NEXIO=y
CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y
CONFIG_TOUCHSCREEN_TOUCHIT213=m
CONFIG_TOUCHSCREEN_TS4800=m
CONFIG_TOUCHSCREEN_TSC_SERIO=m
CONFIG_TOUCHSCREEN_TSC200X_CORE=m
CONFIG_TOUCHSCREEN_TSC2004=m
CONFIG_TOUCHSCREEN_TSC2005=m
CONFIG_TOUCHSCREEN_TSC2007=m
CONFIG_TOUCHSCREEN_TSC2007_IIO=y
CONFIG_TOUCHSCREEN_PCAP=m
CONFIG_TOUCHSCREEN_RM_TS=m
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
CONFIG_TOUCHSCREEN_STMFTS=m
CONFIG_TOUCHSCREEN_STMPE=m
CONFIG_TOUCHSCREEN_SUN4I=m
CONFIG_TOUCHSCREEN_SUR40=m
CONFIG_TOUCHSCREEN_SURFACE3_SPI=m
CONFIG_TOUCHSCREEN_SX8654=m
CONFIG_TOUCHSCREEN_TPS6507X=m
CONFIG_TOUCHSCREEN_ZET6223=m
CONFIG_TOUCHSCREEN_ZFORCE=m
CONFIG_TOUCHSCREEN_COLIBRI_VF50=m
CONFIG_TOUCHSCREEN_ROHM_BU21023=m
CONFIG_TOUCHSCREEN_IQS5XX=m
CONFIG_TOUCHSCREEN_ZINITIX=m
CONFIG_INPUT_MISC=y
CONFIG_INPUT_88PM80X_ONKEY=m
CONFIG_INPUT_AD714X=m
CONFIG_INPUT_AD714X_I2C=m
CONFIG_INPUT_AD714X_SPI=m
CONFIG_INPUT_ARIEL_PWRBUTTON=m
CONFIG_INPUT_ARIZONA_HAPTICS=m
CONFIG_INPUT_ATC260X_ONKEY=m
CONFIG_INPUT_ATMEL_CAPTOUCH=m
CONFIG_INPUT_BMA150=m
CONFIG_INPUT_E3X0_BUTTON=m
CONFIG_INPUT_PM8941_PWRKEY=m
CONFIG_INPUT_PM8XXX_VIBRATOR=m
CONFIG_INPUT_PMIC8XXX_PWRKEY=m
CONFIG_INPUT_M68K_BEEP=m
CONFIG_INPUT_MAX77650_ONKEY=m
CONFIG_INPUT_MAX77693_HAPTIC=m
CONFIG_INPUT_MC13783_PWRBUTTON=m
CONFIG_INPUT_MMA8450=m
CONFIG_INPUT_GPIO_BEEPER=m
CONFIG_INPUT_GPIO_DECODER=m
CONFIG_INPUT_GPIO_VIBRA=m
CONFIG_INPUT_CPCAP_PWRBUTTON=m
CONFIG_INPUT_ATI_REMOTE2=m
CONFIG_INPUT_KEYSPAN_REMOTE=m
CONFIG_INPUT_KXTJ9=m
CONFIG_INPUT_POWERMATE=m
CONFIG_INPUT_YEALINK=m
CONFIG_INPUT_CM109=m
CONFIG_INPUT_REGULATOR_HAPTIC=m
CONFIG_INPUT_RETU_PWRBUTTON=m
CONFIG_INPUT_TPS65218_PWRBUTTON=m
CONFIG_INPUT_AXP20X_PEK=m
CONFIG_INPUT_UINPUT=m
CONFIG_HP_SDC_RTC=m
CONFIG_INPUT_PCF50633_PMU=m
CONFIG_INPUT_PCF8574=m
CONFIG_INPUT_PWM_BEEPER=m
CONFIG_INPUT_PWM_VIBRA=m
CONFIG_INPUT_RK805_PWRKEY=m
CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
CONFIG_INPUT_DA7280_HAPTICS=m
CONFIG_INPUT_DA9052_ONKEY=m
CONFIG_INPUT_DA9063_ONKEY=m
CONFIG_INPUT_WM831X_ON=m
CONFIG_INPUT_PCAP=m
CONFIG_INPUT_ADXL34X=m
CONFIG_INPUT_ADXL34X_I2C=m
CONFIG_INPUT_ADXL34X_SPI=m
CONFIG_INPUT_IBM_PANEL=m
CONFIG_INPUT_IMS_PCU=m
CONFIG_INPUT_IQS269A=m
CONFIG_INPUT_IQS626A=m
CONFIG_INPUT_IQS7222=m
CONFIG_INPUT_CMA3000=m
CONFIG_INPUT_CMA3000_I2C=m
CONFIG_INPUT_DRV260X_HAPTICS=m
CONFIG_INPUT_DRV2665_HAPTICS=m
CONFIG_INPUT_DRV2667_HAPTICS=m
CONFIG_INPUT_HISI_POWERKEY=m
CONFIG_INPUT_RAVE_SP_PWRBUTTON=m
CONFIG_INPUT_SC27XX_VIBRA=m
CONFIG_INPUT_RT5120_PWRKEY=m
CONFIG_RMI4_CORE=m
CONFIG_RMI4_I2C=m
CONFIG_RMI4_SPI=m
CONFIG_RMI4_SMB=m
CONFIG_RMI4_F03=y
CONFIG_RMI4_F03_SERIO=m
CONFIG_RMI4_2D_SENSOR=y
CONFIG_RMI4_F11=y
CONFIG_RMI4_F12=y
CONFIG_RMI4_F30=y
CONFIG_RMI4_F34=y
CONFIG_RMI4_F3A=y
CONFIG_RMI4_F54=y
CONFIG_RMI4_F55=y

#
# Hardware I/O ports
#
CONFIG_SERIO=m
CONFIG_SERIO_SERPORT=m
CONFIG_SERIO_Q40KBD=m
CONFIG_SERIO_PARKBD=m
CONFIG_HP_SDC=m
CONFIG_HIL_MLC=m
CONFIG_SERIO_LIBPS2=m
CONFIG_SERIO_RAW=m
CONFIG_SERIO_ALTERA_PS2=m
CONFIG_SERIO_PS2MULT=m
CONFIG_SERIO_ARC_PS2=m
CONFIG_SERIO_APBPS2=m
CONFIG_SERIO_OLPC_APSP=m
CONFIG_SERIO_SUN4I_PS2=m
CONFIG_SERIO_GPIO_PS2=m
CONFIG_USERIO=m
CONFIG_GAMEPORT=m
CONFIG_GAMEPORT_NS558=m
CONFIG_GAMEPORT_L4=m
# end of Hardware I/O ports
# end of Input device support

#
# Character devices
#
CONFIG_TTY=y
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_VT_HW_CONSOLE_BINDING=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
CONFIG_LDISC_AUTOLOAD=y

#
# Serial drivers
#
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=m
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
CONFIG_SERIAL_8250_PNP=y
CONFIG_SERIAL_8250_16550A_VARIANTS=y
CONFIG_SERIAL_8250_FINTEK=y
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_HP300=m
CONFIG_SERIAL_8250_CS=m
CONFIG_SERIAL_8250_MEN_MCB=m
CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_FOURPORT=m
CONFIG_SERIAL_8250_ACCENT=m
CONFIG_SERIAL_8250_ASPEED_VUART=m
CONFIG_SERIAL_8250_BOCA=m
CONFIG_SERIAL_8250_EXAR_ST16C554=m
CONFIG_SERIAL_8250_HUB6=m
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_8250_DWLIB=y
CONFIG_SERIAL_8250_BCM2835AUX=m
CONFIG_SERIAL_8250_DW=m
CONFIG_SERIAL_8250_EM=m
CONFIG_SERIAL_8250_IOC3=m
CONFIG_SERIAL_8250_RT288X=y
CONFIG_SERIAL_8250_OMAP=m
CONFIG_SERIAL_8250_LPC18XX=m
CONFIG_SERIAL_8250_MT6577=m
CONFIG_SERIAL_8250_UNIPHIER=m
CONFIG_SERIAL_8250_INGENIC=m
CONFIG_SERIAL_8250_PXA=m
CONFIG_SERIAL_8250_TEGRA=m
CONFIG_SERIAL_8250_BCM7271=m
CONFIG_SERIAL_OF_PLATFORM=m

#
# Non-8250 serial port support
#
CONFIG_SERIAL_AMBA_PL010=m
CONFIG_SERIAL_ATMEL=y
CONFIG_SERIAL_ATMEL_CONSOLE=y
CONFIG_SERIAL_ATMEL_PDC=y
CONFIG_SERIAL_ATMEL_TTYAT=y
CONFIG_SERIAL_MESON=m
CONFIG_SERIAL_MESON_CONSOLE=y
CONFIG_SERIAL_CLPS711X=m
CONFIG_SERIAL_SAMSUNG=m
CONFIG_SERIAL_SAMSUNG_UARTS_4=y
CONFIG_SERIAL_SAMSUNG_UARTS=4
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
CONFIG_SERIAL_TEGRA=m
CONFIG_SERIAL_TEGRA_TCU=m
CONFIG_SERIAL_MAX3100=m
CONFIG_SERIAL_MAX310X=m
CONFIG_SERIAL_IMX=m
CONFIG_SERIAL_IMX_CONSOLE=m
CONFIG_SERIAL_IMX_EARLYCON=y
CONFIG_SERIAL_UARTLITE=m
CONFIG_SERIAL_UARTLITE_NR_UARTS=1
CONFIG_SERIAL_SH_SCI=m
CONFIG_SERIAL_SH_SCI_NR_UARTS=2
CONFIG_SERIAL_SH_SCI_DMA=y
CONFIG_SERIAL_HS_LPC32XX=m
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_PMACZILOG=m
CONFIG_SERIAL_PMACZILOG_TTYS=y
CONFIG_SERIAL_MSM=m
CONFIG_SERIAL_QCOM_GENI=m
CONFIG_SERIAL_QCOM_GENI_CONSOLE=y
CONFIG_SERIAL_VT8500=y
CONFIG_SERIAL_VT8500_CONSOLE=y
CONFIG_SERIAL_OMAP=m
CONFIG_SERIAL_SIFIVE=m
CONFIG_SERIAL_LANTIQ=m
CONFIG_SERIAL_QE=m
CONFIG_SERIAL_SCCNXP=m
CONFIG_SERIAL_SC16IS7XX_CORE=m
CONFIG_SERIAL_SC16IS7XX=m
CONFIG_SERIAL_SC16IS7XX_I2C=y
CONFIG_SERIAL_SC16IS7XX_SPI=y
CONFIG_SERIAL_TIMBERDALE=m
CONFIG_SERIAL_BCM63XX=m
CONFIG_SERIAL_ALTERA_JTAGUART=m
CONFIG_SERIAL_ALTERA_UART=m
CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4
CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200
CONFIG_SERIAL_MXS_AUART=m
CONFIG_SERIAL_XILINX_PS_UART=m
CONFIG_SERIAL_MPS2_UART_CONSOLE=y
CONFIG_SERIAL_MPS2_UART=y
CONFIG_SERIAL_ARC=m
CONFIG_SERIAL_ARC_NR_PORTS=1
CONFIG_SERIAL_FSL_LPUART=m
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_SERIAL_FSL_LINFLEXUART=m
CONFIG_SERIAL_CONEXANT_DIGICOLOR=m
CONFIG_SERIAL_ST_ASC=m
CONFIG_SERIAL_MEN_Z135=m
CONFIG_SERIAL_SPRD=m
CONFIG_SERIAL_STM32=m
CONFIG_SERIAL_MVEBU_UART=y
CONFIG_SERIAL_MVEBU_CONSOLE=y
CONFIG_SERIAL_OWL=m
CONFIG_SERIAL_RDA=y
CONFIG_SERIAL_RDA_CONSOLE=y
CONFIG_SERIAL_MILBEAUT_USIO=m
CONFIG_SERIAL_MILBEAUT_USIO_PORTS=4
CONFIG_SERIAL_LITEUART=m
CONFIG_SERIAL_LITEUART_MAX_PORTS=1
CONFIG_SERIAL_SUNPLUS=m
CONFIG_SERIAL_SUNPLUS_CONSOLE=y
# end of Serial drivers

CONFIG_SERIAL_MCTRL_GPIO=y
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_MOXA_INTELLIO=m
CONFIG_N_HDLC=m
CONFIG_GOLDFISH_TTY=y
CONFIG_GOLDFISH_TTY_EARLY_CONSOLE=y
CONFIG_N_GSM=m
CONFIG_NULL_TTY=m
CONFIG_HVC_DRIVER=y
CONFIG_RPMSG_TTY=m
CONFIG_SERIAL_DEV_BUS=m
CONFIG_TTY_PRINTK=m
CONFIG_TTY_PRINTK_LEVEL=6
CONFIG_PRINTER=m
CONFIG_LP_CONSOLE=y
CONFIG_PPDEV=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_IPMI_HANDLER=m
CONFIG_IPMI_PLAT_DATA=y
CONFIG_IPMI_PANIC_EVENT=y
CONFIG_IPMI_PANIC_STRING=y
CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_IPMB=m
CONFIG_IPMI_WATCHDOG=m
CONFIG_IPMI_POWEROFF=m
CONFIG_IPMI_KCS_BMC=m
CONFIG_ASPEED_KCS_IPMI_BMC=m
CONFIG_NPCM7XX_KCS_IPMI_BMC=m
CONFIG_IPMI_KCS_BMC_CDEV_IPMI=m
CONFIG_IPMI_KCS_BMC_SERIO=m
CONFIG_ASPEED_BT_IPMI_BMC=m
CONFIG_IPMB_DEVICE_INTERFACE=m
CONFIG_HW_RANDOM=m
CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_ATMEL=m
CONFIG_HW_RANDOM_BA431=m
CONFIG_HW_RANDOM_BCM2835=m
CONFIG_HW_RANDOM_IPROC_RNG200=m
CONFIG_HW_RANDOM_IXP4XX=m
CONFIG_HW_RANDOM_OMAP=m
CONFIG_HW_RANDOM_OMAP3_ROM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM_IMX_RNGC=m
CONFIG_HW_RANDOM_NOMADIK=m
CONFIG_HW_RANDOM_STM32=m
CONFIG_HW_RANDOM_POLARFIRE_SOC=m
CONFIG_HW_RANDOM_MESON=m
CONFIG_HW_RANDOM_MTK=m
CONFIG_HW_RANDOM_EXYNOS=m
CONFIG_HW_RANDOM_NPCM=m
CONFIG_HW_RANDOM_KEYSTONE=m
CONFIG_HW_RANDOM_CCTRNG=m
CONFIG_HW_RANDOM_XIPHERA=m
CONFIG_DTLK=m

#
# PCMCIA character devices
#
CONFIG_SYNCLINK_CS=m
CONFIG_CARDMAN_4000=m
CONFIG_CARDMAN_4040=m
CONFIG_SCR24X=m
CONFIG_IPWIRELESS=m
# end of PCMCIA character devices

CONFIG_DEVMEM=y
CONFIG_NVRAM=m
CONFIG_DEVPORT=y
CONFIG_TCG_TPM=y
CONFIG_TCG_TIS_CORE=m
CONFIG_TCG_TIS=m
CONFIG_TCG_TIS_SPI=m
CONFIG_TCG_TIS_SPI_CR50=y
CONFIG_TCG_TIS_I2C=m
CONFIG_TCG_TIS_SYNQUACER=m
CONFIG_TCG_TIS_I2C_CR50=m
CONFIG_TCG_TIS_I2C_ATMEL=m
CONFIG_TCG_TIS_I2C_INFINEON=m
CONFIG_TCG_TIS_I2C_NUVOTON=m
CONFIG_TCG_INFINEON=m
CONFIG_TCG_VTPM_PROXY=m
CONFIG_TCG_TIS_ST33ZP24=m
CONFIG_TCG_TIS_ST33ZP24_I2C=m
CONFIG_TCG_TIS_ST33ZP24_SPI=m
CONFIG_XILLYBUS_CLASS=m
CONFIG_XILLYBUS=m
CONFIG_XILLYBUS_OF=m
CONFIG_XILLYUSB=m
CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RANDOM_TRUST_BOOTLOADER=y
# end of Character devices

#
# I2C support
#
CONFIG_I2C=m
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=m
CONFIG_I2C_MUX=m

#
# Multiplexer I2C Chip support
#
CONFIG_I2C_ARB_GPIO_CHALLENGE=m
CONFIG_I2C_MUX_GPIO=m
CONFIG_I2C_MUX_GPMUX=m
CONFIG_I2C_MUX_LTC4306=m
CONFIG_I2C_MUX_PCA9541=m
CONFIG_I2C_MUX_PCA954x=m
CONFIG_I2C_MUX_PINCTRL=m
CONFIG_I2C_MUX_REG=m
CONFIG_I2C_DEMUX_PINCTRL=m
CONFIG_I2C_MUX_MLXCPLD=m
# end of Multiplexer I2C Chip support

CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_SMBUS=m
CONFIG_I2C_ALGOBIT=m
CONFIG_I2C_ALGOPCF=m
CONFIG_I2C_ALGOPCA=m

#
# I2C Hardware Bus support
#
CONFIG_I2C_HIX5HD2=m

#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
CONFIG_I2C_ALTERA=m
CONFIG_I2C_ASPEED=m
CONFIG_I2C_AT91=m
CONFIG_I2C_AT91_SLAVE_EXPERIMENTAL=m
CONFIG_I2C_AXXIA=m
CONFIG_I2C_BCM2835=m
CONFIG_I2C_BCM_IPROC=m
CONFIG_I2C_BCM_KONA=m
CONFIG_I2C_BRCMSTB=m
CONFIG_I2C_CADENCE=m
CONFIG_I2C_CBUS_GPIO=m
CONFIG_I2C_DAVINCI=m
CONFIG_I2C_DESIGNWARE_CORE=m
CONFIG_I2C_DESIGNWARE_SLAVE=y
CONFIG_I2C_DESIGNWARE_PLATFORM=m
CONFIG_I2C_DIGICOLOR=m
CONFIG_I2C_EMEV2=m
CONFIG_I2C_EXYNOS5=m
CONFIG_I2C_GPIO=m
CONFIG_I2C_GPIO_FAULT_INJECTOR=y
CONFIG_I2C_HIGHLANDER=m
CONFIG_I2C_HISI=m
CONFIG_I2C_IMG=m
CONFIG_I2C_IMX=m
CONFIG_I2C_IMX_LPI2C=m
CONFIG_I2C_IOP3XX=m
CONFIG_I2C_JZ4780=m
CONFIG_I2C_KEMPLD=m
CONFIG_I2C_LPC2K=m
CONFIG_I2C_MESON=m
CONFIG_I2C_MICROCHIP_CORE=m
CONFIG_I2C_MT65XX=m
CONFIG_I2C_MT7621=m
CONFIG_I2C_MV64XXX=m
CONFIG_I2C_MXS=m
CONFIG_I2C_NPCM=m
CONFIG_I2C_OCORES=m
CONFIG_I2C_OMAP=m
CONFIG_I2C_OWL=m
CONFIG_I2C_APPLE=m
CONFIG_I2C_PCA_PLATFORM=m
CONFIG_I2C_PNX=m
CONFIG_I2C_PXA=m
CONFIG_I2C_PXA_SLAVE=y
CONFIG_I2C_QCOM_CCI=m
CONFIG_I2C_QCOM_GENI=m
CONFIG_I2C_QUP=m
CONFIG_I2C_RIIC=m
CONFIG_I2C_RK3X=m
CONFIG_I2C_RZV2M=m
CONFIG_I2C_S3C2410=m
CONFIG_I2C_SH_MOBILE=m
CONFIG_I2C_SIMTEC=m
CONFIG_I2C_ST=m
CONFIG_I2C_STM32F4=m
CONFIG_I2C_STM32F7=m
CONFIG_I2C_SUN6I_P2WI=m
CONFIG_I2C_SYNQUACER=m
CONFIG_I2C_TEGRA=m
CONFIG_I2C_TEGRA_BPMP=m
CONFIG_I2C_UNIPHIER=m
CONFIG_I2C_UNIPHIER_F=m
CONFIG_I2C_VERSATILE=m
CONFIG_I2C_WMT=m
CONFIG_I2C_XILINX=m
CONFIG_I2C_XLP9XX=m
CONFIG_I2C_RCAR=m

#
# External I2C/SMBus adapter drivers
#
CONFIG_I2C_DIOLAN_U2C=m
CONFIG_I2C_DLN2=m
CONFIG_I2C_CP2615=m
CONFIG_I2C_PARPORT=m
CONFIG_I2C_ROBOTFUZZ_OSIF=m
CONFIG_I2C_TAOS_EVM=m
CONFIG_I2C_TINY_USB=m
CONFIG_I2C_VIPERBOARD=m

#
# Other I2C/SMBus bus drivers
#
CONFIG_I2C_ICY=m
CONFIG_I2C_MLXCPLD=m
CONFIG_I2C_PCA_ISA=m
CONFIG_I2C_CROS_EC_TUNNEL=m
CONFIG_I2C_FSI=m
CONFIG_I2C_VIRTIO=m
# end of I2C Hardware Bus support

CONFIG_I2C_STUB=m
CONFIG_I2C_SLAVE=y
CONFIG_I2C_SLAVE_EEPROM=m
CONFIG_I2C_SLAVE_TESTUNIT=m
CONFIG_I2C_DEBUG_CORE=y
CONFIG_I2C_DEBUG_ALGO=y
CONFIG_I2C_DEBUG_BUS=y
# end of I2C support

CONFIG_I3C=m
CONFIG_CDNS_I3C_MASTER=m
CONFIG_DW_I3C_MASTER=m
CONFIG_SVC_I3C_MASTER=m
CONFIG_MIPI_I3C_HCI=m
CONFIG_SPI=y
CONFIG_SPI_DEBUG=y
CONFIG_SPI_MASTER=y
CONFIG_SPI_MEM=y

#
# SPI Master Controller Drivers
#
CONFIG_SPI_ALTERA=m
CONFIG_SPI_ALTERA_CORE=m
CONFIG_SPI_ALTERA_DFL=m
CONFIG_SPI_AR934X=m
CONFIG_SPI_ATH79=m
CONFIG_SPI_ARMADA_3700=m
CONFIG_SPI_ASPEED_SMC=m
CONFIG_SPI_ATMEL=m
CONFIG_SPI_AT91_USART=m
CONFIG_SPI_ATMEL_QUADSPI=m
CONFIG_SPI_AXI_SPI_ENGINE=m
CONFIG_SPI_BCM2835=m
CONFIG_SPI_BCM2835AUX=m
CONFIG_SPI_BCM63XX=m
CONFIG_SPI_BCM63XX_HSSPI=m
CONFIG_SPI_BCM_QSPI=m
CONFIG_SPI_BITBANG=m
CONFIG_SPI_BUTTERFLY=m
CONFIG_SPI_CADENCE=m
CONFIG_SPI_CADENCE_QUADSPI=m
CONFIG_SPI_CADENCE_XSPI=m
CONFIG_SPI_CLPS711X=m
CONFIG_SPI_DESIGNWARE=m
CONFIG_SPI_DW_DMA=y
CONFIG_SPI_DW_MMIO=m
CONFIG_SPI_DW_BT1=m
CONFIG_SPI_DW_BT1_DIRMAP=y
CONFIG_SPI_DLN2=m
CONFIG_SPI_EP93XX=m
CONFIG_SPI_FSI=m
CONFIG_SPI_FSL_LPSPI=m
CONFIG_SPI_FSL_QUADSPI=m
CONFIG_SPI_GXP=m
CONFIG_SPI_HISI_KUNPENG=m
CONFIG_SPI_HISI_SFC_V3XX=m
CONFIG_SPI_NXP_FLEXSPI=m
CONFIG_SPI_GPIO=m
CONFIG_SPI_IMG_SPFI=m
CONFIG_SPI_IMX=m
CONFIG_SPI_INGENIC=m
CONFIG_SPI_INTEL=m
CONFIG_SPI_INTEL_PLATFORM=m
CONFIG_SPI_JCORE=m
CONFIG_SPI_LM70_LLP=m
CONFIG_SPI_LP8841_RTC=m
CONFIG_SPI_FSL_LIB=m
CONFIG_SPI_FSL_SPI=m
CONFIG_SPI_FSL_DSPI=m
CONFIG_SPI_MESON_SPICC=m
CONFIG_SPI_MESON_SPIFC=m
CONFIG_SPI_MICROCHIP_CORE=m
CONFIG_SPI_MICROCHIP_CORE_QSPI=m
CONFIG_SPI_MT65XX=m
CONFIG_SPI_MT7621=m
CONFIG_SPI_MTK_NOR=m
CONFIG_SPI_MTK_SNFI=m
CONFIG_SPI_NPCM_FIU=m
CONFIG_SPI_NPCM_PSPI=m
CONFIG_SPI_LANTIQ_SSC=m
CONFIG_SPI_OC_TINY=m
CONFIG_SPI_OMAP24XX=m
CONFIG_SPI_TI_QSPI=m
CONFIG_SPI_OMAP_100K=m
CONFIG_SPI_ORION=m
CONFIG_SPI_PIC32=m
CONFIG_SPI_PIC32_SQI=m
CONFIG_SPI_PXA2XX=m
CONFIG_SPI_ROCKCHIP=m
CONFIG_SPI_ROCKCHIP_SFC=m
CONFIG_SPI_RPCIF=m
CONFIG_SPI_RSPI=m
CONFIG_SPI_QUP=m
CONFIG_SPI_QCOM_GENI=m
CONFIG_SPI_S3C64XX=m
CONFIG_SPI_SC18IS602=m
CONFIG_SPI_SH_MSIOF=m
CONFIG_SPI_SH=m
CONFIG_SPI_SH_HSPI=m
CONFIG_SPI_SIFIVE=m
CONFIG_SPI_SLAVE_MT27XX=m
CONFIG_SPI_SPRD=m
CONFIG_SPI_SPRD_ADI=m
CONFIG_SPI_STM32=m
CONFIG_SPI_STM32_QSPI=m
CONFIG_SPI_ST_SSC4=m
CONFIG_SPI_SUN4I=m
CONFIG_SPI_SUN6I=m
CONFIG_SPI_SUNPLUS_SP7021=m
CONFIG_SPI_SYNQUACER=m
CONFIG_SPI_MXIC=m
CONFIG_SPI_TEGRA210_QUAD=m
CONFIG_SPI_TEGRA114=m
CONFIG_SPI_TEGRA20_SFLASH=m
CONFIG_SPI_TEGRA20_SLINK=m
CONFIG_SPI_UNIPHIER=m
CONFIG_SPI_XCOMM=m
CONFIG_SPI_XILINX=m
CONFIG_SPI_XLP=m
CONFIG_SPI_XTENSA_XTFPGA=m
CONFIG_SPI_ZYNQ_QSPI=m
CONFIG_SPI_ZYNQMP_GQSPI=m
CONFIG_SPI_AMD=m

#
# SPI Multiplexer support
#
CONFIG_SPI_MUX=m

#
# SPI Protocol Masters
#
CONFIG_SPI_SPIDEV=m
CONFIG_SPI_LOOPBACK_TEST=m
CONFIG_SPI_TLE62X0=m
CONFIG_SPI_SLAVE=y
CONFIG_SPI_SLAVE_TIME=m
CONFIG_SPI_SLAVE_SYSTEM_CONTROL=m
CONFIG_SPI_DYNAMIC=y
CONFIG_SPMI=m
CONFIG_SPMI_HISI3670=m
CONFIG_SPMI_MSM_PMIC_ARB=m
CONFIG_SPMI_MTK_PMIF=m
CONFIG_HSI=m
CONFIG_HSI_BOARDINFO=y

#
# HSI controllers
#

#
# HSI clients
#
CONFIG_HSI_CHAR=m
CONFIG_PPS=m
CONFIG_PPS_DEBUG=y

#
# PPS clients support
#
CONFIG_PPS_CLIENT_KTIMER=m
CONFIG_PPS_CLIENT_LDISC=m
CONFIG_PPS_CLIENT_PARPORT=m
CONFIG_PPS_CLIENT_GPIO=m

#
# PPS generators support
#

#
# PTP clock support
#
CONFIG_PTP_1588_CLOCK=m
CONFIG_PTP_1588_CLOCK_OPTIONAL=m
CONFIG_PTP_1588_CLOCK_DTE=m
CONFIG_PTP_1588_CLOCK_QORIQ=m
CONFIG_DP83640_PHY=m
CONFIG_PTP_1588_CLOCK_INES=m
CONFIG_PTP_1588_CLOCK_IDT82P33=m
CONFIG_PTP_1588_CLOCK_IDTCM=m
# end of PTP clock support

CONFIG_PINCTRL=y
CONFIG_GENERIC_PINCTRL_GROUPS=y
CONFIG_PINMUX=y
CONFIG_GENERIC_PINMUX_FUNCTIONS=y
CONFIG_PINCONF=y
CONFIG_GENERIC_PINCONF=y
CONFIG_DEBUG_PINCTRL=y
CONFIG_PINCTRL_AMD=y
CONFIG_PINCTRL_AT91PIO4=y
CONFIG_PINCTRL_AXP209=m
CONFIG_PINCTRL_BM1880=y
CONFIG_PINCTRL_CY8C95X0=m
CONFIG_PINCTRL_DA850_PUPD=m
CONFIG_PINCTRL_DA9062=m
CONFIG_PINCTRL_EQUILIBRIUM=m
CONFIG_PINCTRL_INGENIC=y
CONFIG_PINCTRL_LPC18XX=y
CONFIG_PINCTRL_MCP23S08_I2C=m
CONFIG_PINCTRL_MCP23S08_SPI=m
CONFIG_PINCTRL_MCP23S08=m
CONFIG_PINCTRL_MICROCHIP_SGPIO=m
CONFIG_PINCTRL_OCELOT=m
CONFIG_PINCTRL_PISTACHIO=y
CONFIG_PINCTRL_RK805=m
CONFIG_PINCTRL_ROCKCHIP=m
CONFIG_PINCTRL_SINGLE=m
CONFIG_PINCTRL_STMFX=m
CONFIG_PINCTRL_OWL=y
CONFIG_PINCTRL_S500=y
CONFIG_PINCTRL_S700=y
CONFIG_PINCTRL_S900=y
CONFIG_PINCTRL_ASPEED=y
CONFIG_PINCTRL_ASPEED_G4=y
CONFIG_PINCTRL_ASPEED_G5=y
CONFIG_PINCTRL_ASPEED_G6=y
CONFIG_PINCTRL_BCM281XX=y
CONFIG_PINCTRL_BCM2835=m
CONFIG_PINCTRL_BCM4908=m
CONFIG_PINCTRL_BCM63XX=y
CONFIG_PINCTRL_BCM6318=y
CONFIG_PINCTRL_BCM6328=y
CONFIG_PINCTRL_BCM6358=y
CONFIG_PINCTRL_BCM6362=y
CONFIG_PINCTRL_BCM6368=y
CONFIG_PINCTRL_BCM63268=y
CONFIG_PINCTRL_IPROC_GPIO=y
CONFIG_PINCTRL_CYGNUS_MUX=y
CONFIG_PINCTRL_NS=y
CONFIG_PINCTRL_NSP_GPIO=y
CONFIG_PINCTRL_NS2_MUX=y
CONFIG_PINCTRL_NSP_MUX=y
CONFIG_PINCTRL_BERLIN=y
CONFIG_PINCTRL_AS370=y
CONFIG_PINCTRL_BERLIN_BG4CT=y
CONFIG_PINCTRL_MADERA=m
CONFIG_PINCTRL_CS47L15=y
CONFIG_PINCTRL_CS47L35=y
CONFIG_PINCTRL_CS47L85=y
CONFIG_PINCTRL_CS47L90=y
CONFIG_PINCTRL_CS47L92=y
CONFIG_PINCTRL_IMX=m
CONFIG_PINCTRL_IMX8MM=m
CONFIG_PINCTRL_IMX8MN=m
CONFIG_PINCTRL_IMX8MP=m
CONFIG_PINCTRL_IMX8MQ=m

#
# Intel pinctrl drivers
#
# end of Intel pinctrl drivers

#
# MediaTek pinctrl drivers
#
CONFIG_EINT_MTK=y
CONFIG_PINCTRL_MTK=y
CONFIG_PINCTRL_MTK_V2=y
CONFIG_PINCTRL_MTK_MOORE=y
CONFIG_PINCTRL_MTK_PARIS=y
CONFIG_PINCTRL_MT2701=y
CONFIG_PINCTRL_MT7623=y
CONFIG_PINCTRL_MT7629=y
CONFIG_PINCTRL_MT8135=y
CONFIG_PINCTRL_MT8127=y
CONFIG_PINCTRL_MT2712=y
CONFIG_PINCTRL_MT6765=m
CONFIG_PINCTRL_MT6779=m
CONFIG_PINCTRL_MT6795=y
CONFIG_PINCTRL_MT6797=y
CONFIG_PINCTRL_MT7622=y
CONFIG_PINCTRL_MT7986=y
CONFIG_PINCTRL_MT8167=y
CONFIG_PINCTRL_MT8173=y
CONFIG_PINCTRL_MT8183=y
CONFIG_PINCTRL_MT8186=y
CONFIG_PINCTRL_MT8188=y
CONFIG_PINCTRL_MT8192=y
CONFIG_PINCTRL_MT8195=y
CONFIG_PINCTRL_MT8365=y
CONFIG_PINCTRL_MT8516=y
CONFIG_PINCTRL_MT6397=y
# end of MediaTek pinctrl drivers

CONFIG_PINCTRL_MESON=m
CONFIG_PINCTRL_WPCM450=m
CONFIG_PINCTRL_NPCM7XX=y
CONFIG_PINCTRL_PXA=y
CONFIG_PINCTRL_PXA25X=m
CONFIG_PINCTRL_PXA27X=m
CONFIG_PINCTRL_MSM=m
CONFIG_PINCTRL_APQ8064=m
CONFIG_PINCTRL_APQ8084=m
CONFIG_PINCTRL_IPQ4019=m
CONFIG_PINCTRL_IPQ8064=m
CONFIG_PINCTRL_IPQ8074=m
CONFIG_PINCTRL_IPQ6018=m
CONFIG_PINCTRL_MSM8226=m
CONFIG_PINCTRL_MSM8660=m
CONFIG_PINCTRL_MSM8960=m
CONFIG_PINCTRL_MDM9607=m
CONFIG_PINCTRL_MDM9615=m
CONFIG_PINCTRL_MSM8X74=m
CONFIG_PINCTRL_MSM8909=m
CONFIG_PINCTRL_MSM8916=m
CONFIG_PINCTRL_MSM8953=m
CONFIG_PINCTRL_MSM8976=m
CONFIG_PINCTRL_MSM8994=m
CONFIG_PINCTRL_MSM8996=m
CONFIG_PINCTRL_MSM8998=m
CONFIG_PINCTRL_QCM2290=m
CONFIG_PINCTRL_QCS404=m
CONFIG_PINCTRL_QCOM_SPMI_PMIC=m
CONFIG_PINCTRL_QCOM_SSBI_PMIC=m
CONFIG_PINCTRL_SC7180=m
CONFIG_PINCTRL_SC7280=m
CONFIG_PINCTRL_SC7280_LPASS_LPI=m
CONFIG_PINCTRL_SC8180X=m
CONFIG_PINCTRL_SC8280XP=m
CONFIG_PINCTRL_SDM660=m
CONFIG_PINCTRL_SDM845=m
CONFIG_PINCTRL_SDX55=m
CONFIG_PINCTRL_SM6115=m
CONFIG_PINCTRL_SM6125=m
CONFIG_PINCTRL_SM6350=m
CONFIG_PINCTRL_SM6375=m
CONFIG_PINCTRL_SDX65=m
CONFIG_PINCTRL_SM8150=m
CONFIG_PINCTRL_SM8250=m
CONFIG_PINCTRL_SM8250_LPASS_LPI=m
CONFIG_PINCTRL_SM8350=m
CONFIG_PINCTRL_SM8450=m
CONFIG_PINCTRL_SM8450_LPASS_LPI=m
CONFIG_PINCTRL_SC8280XP_LPASS_LPI=m
CONFIG_PINCTRL_LPASS_LPI=m

#
# Renesas pinctrl drivers
#
CONFIG_PINCTRL_RENESAS=y
CONFIG_PINCTRL_SH_PFC=y
CONFIG_PINCTRL_SH_PFC_GPIO=y
CONFIG_PINCTRL_SH_FUNC_GPIO=y
CONFIG_PINCTRL_PFC_EMEV2=y
CONFIG_PINCTRL_PFC_R8A77995=y
CONFIG_PINCTRL_PFC_R8A7794=y
CONFIG_PINCTRL_PFC_R8A77990=y
CONFIG_PINCTRL_PFC_R8A7779=y
CONFIG_PINCTRL_PFC_R8A7790=y
CONFIG_PINCTRL_PFC_R8A77950=y
CONFIG_PINCTRL_PFC_R8A77951=y
CONFIG_PINCTRL_PFC_R8A7778=y
CONFIG_PINCTRL_PFC_R8A7793=y
CONFIG_PINCTRL_PFC_R8A7791=y
CONFIG_PINCTRL_PFC_R8A77965=y
CONFIG_PINCTRL_PFC_R8A77960=y
CONFIG_PINCTRL_PFC_R8A77961=y
CONFIG_PINCTRL_PFC_R8A779F0=y
CONFIG_PINCTRL_PFC_R8A7792=y
CONFIG_PINCTRL_PFC_R8A77980=y
CONFIG_PINCTRL_PFC_R8A77970=y
CONFIG_PINCTRL_PFC_R8A779A0=y
CONFIG_PINCTRL_PFC_R8A779G0=y
CONFIG_PINCTRL_PFC_R8A7740=y
CONFIG_PINCTRL_PFC_R8A73A4=y
CONFIG_PINCTRL_RZA1=y
CONFIG_PINCTRL_RZA2=y
CONFIG_PINCTRL_RZG2L=y
CONFIG_PINCTRL_PFC_R8A77470=y
CONFIG_PINCTRL_PFC_R8A7745=y
CONFIG_PINCTRL_PFC_R8A7742=y
CONFIG_PINCTRL_PFC_R8A7743=y
CONFIG_PINCTRL_PFC_R8A7744=y
CONFIG_PINCTRL_PFC_R8A774C0=y
CONFIG_PINCTRL_PFC_R8A774E1=y
CONFIG_PINCTRL_PFC_R8A774A1=y
CONFIG_PINCTRL_PFC_R8A774B1=y
CONFIG_PINCTRL_RZN1=y
CONFIG_PINCTRL_RZV2M=y
CONFIG_PINCTRL_PFC_SH7203=y
CONFIG_PINCTRL_PFC_SH7264=y
CONFIG_PINCTRL_PFC_SH7269=y
CONFIG_PINCTRL_PFC_SH7720=y
CONFIG_PINCTRL_PFC_SH7722=y
CONFIG_PINCTRL_PFC_SH7734=y
CONFIG_PINCTRL_PFC_SH7757=y
CONFIG_PINCTRL_PFC_SH7785=y
CONFIG_PINCTRL_PFC_SH7786=y
CONFIG_PINCTRL_PFC_SH73A0=y
CONFIG_PINCTRL_PFC_SH7723=y
CONFIG_PINCTRL_PFC_SH7724=y
CONFIG_PINCTRL_PFC_SHX3=y
# end of Renesas pinctrl drivers

CONFIG_PINCTRL_SAMSUNG=y
CONFIG_PINCTRL_EXYNOS=y
CONFIG_PINCTRL_EXYNOS_ARM=y
CONFIG_PINCTRL_EXYNOS_ARM64=y
CONFIG_PINCTRL_S3C24XX=y
CONFIG_PINCTRL_S3C64XX=y
CONFIG_PINCTRL_SPRD=m
CONFIG_PINCTRL_SPRD_SC9860=m
CONFIG_PINCTRL_STARFIVE_JH7100=m
CONFIG_PINCTRL_STM32=y
CONFIG_PINCTRL_STM32F429=y
CONFIG_PINCTRL_STM32F469=y
CONFIG_PINCTRL_STM32F746=y
CONFIG_PINCTRL_STM32F769=y
CONFIG_PINCTRL_STM32H743=y
CONFIG_PINCTRL_STM32MP135=y
CONFIG_PINCTRL_STM32MP157=y
CONFIG_PINCTRL_TI_IODELAY=m
CONFIG_PINCTRL_UNIPHIER=y
CONFIG_PINCTRL_UNIPHIER_LD4=y
CONFIG_PINCTRL_UNIPHIER_PRO4=y
CONFIG_PINCTRL_UNIPHIER_SLD8=y
CONFIG_PINCTRL_UNIPHIER_PRO5=y
CONFIG_PINCTRL_UNIPHIER_PXS2=y
CONFIG_PINCTRL_UNIPHIER_LD6B=y
CONFIG_PINCTRL_UNIPHIER_LD11=y
CONFIG_PINCTRL_UNIPHIER_LD20=y
CONFIG_PINCTRL_UNIPHIER_PXS3=y
CONFIG_PINCTRL_UNIPHIER_NX1=y
CONFIG_PINCTRL_VISCONTI=y
CONFIG_PINCTRL_TMPV7700=y
CONFIG_GPIOLIB=y
CONFIG_GPIOLIB_FASTPATH_LIMIT=512
CONFIG_OF_GPIO=y
CONFIG_GPIOLIB_IRQCHIP=y
CONFIG_DEBUG_GPIO=y
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_CDEV=y
CONFIG_GPIO_CDEV_V1=y
CONFIG_GPIO_GENERIC=y
CONFIG_GPIO_REGMAP=y
CONFIG_GPIO_MAX730X=m

#
# Memory mapped GPIO drivers
#
CONFIG_GPIO_74XX_MMIO=m
CONFIG_GPIO_ALTERA=m
CONFIG_GPIO_ASPEED=m
CONFIG_GPIO_ASPEED_SGPIO=y
CONFIG_GPIO_ATH79=m
CONFIG_GPIO_RASPBERRYPI_EXP=m
CONFIG_GPIO_BCM_KONA=y
CONFIG_GPIO_BCM_XGS_IPROC=m
CONFIG_GPIO_BRCMSTB=m
CONFIG_GPIO_CADENCE=m
CONFIG_GPIO_CLPS711X=m
CONFIG_GPIO_DWAPB=m
CONFIG_GPIO_EIC_SPRD=m
CONFIG_GPIO_EM=m
CONFIG_GPIO_FTGPIO010=y
CONFIG_GPIO_GENERIC_PLATFORM=m
CONFIG_GPIO_GRGPIO=m
CONFIG_GPIO_HISI=m
CONFIG_GPIO_HLWD=m
CONFIG_GPIO_IMX_SCU=y
CONFIG_GPIO_IOP=m
CONFIG_GPIO_LOGICVC=m
CONFIG_GPIO_LPC18XX=m
CONFIG_GPIO_LPC32XX=m
CONFIG_GPIO_MB86S7X=m
CONFIG_GPIO_MENZ127=m
CONFIG_GPIO_MPC8XXX=y
CONFIG_GPIO_MT7621=y
CONFIG_GPIO_MXC=m
CONFIG_GPIO_MXS=y
CONFIG_GPIO_PMIC_EIC_SPRD=m
CONFIG_GPIO_PXA=y
CONFIG_GPIO_RCAR=m
CONFIG_GPIO_RDA=y
CONFIG_GPIO_ROCKCHIP=m
CONFIG_GPIO_SAMA5D2_PIOBU=m
CONFIG_GPIO_SIFIVE=y
CONFIG_GPIO_SIOX=m
CONFIG_GPIO_SNPS_CREG=y
CONFIG_GPIO_SPRD=m
CONFIG_GPIO_STP_XWAY=y
CONFIG_GPIO_SYSCON=m
CONFIG_GPIO_TEGRA=m
CONFIG_GPIO_TEGRA186=m
CONFIG_GPIO_TS4800=m
CONFIG_GPIO_UNIPHIER=m
CONFIG_GPIO_VISCONTI=m
CONFIG_GPIO_WCD934X=m
CONFIG_GPIO_XGENE_SB=m
CONFIG_GPIO_XILINX=m
CONFIG_GPIO_XLP=m
CONFIG_GPIO_AMD_FCH=m
CONFIG_GPIO_IDT3243X=m
# end of Memory mapped GPIO drivers

#
# I2C GPIO expanders
#
CONFIG_GPIO_ADNP=m
CONFIG_GPIO_GW_PLD=m
CONFIG_GPIO_MAX7300=m
CONFIG_GPIO_MAX732X=m
CONFIG_GPIO_PCA953X=m
CONFIG_GPIO_PCA953X_IRQ=y
CONFIG_GPIO_PCA9570=m
CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_TPIC2810=m
CONFIG_GPIO_TS4900=m
# end of I2C GPIO expanders

#
# MFD GPIO expanders
#
CONFIG_GPIO_ARIZONA=m
CONFIG_GPIO_BD9571MWV=m
CONFIG_GPIO_DA9052=m
CONFIG_GPIO_DLN2=m
CONFIG_GPIO_KEMPLD=m
CONFIG_GPIO_LP3943=m
CONFIG_GPIO_LP873X=m
CONFIG_GPIO_LP87565=m
CONFIG_GPIO_MADERA=m
CONFIG_GPIO_MAX77650=m
CONFIG_GPIO_SL28CPLD=m
CONFIG_GPIO_STMPE=y
CONFIG_GPIO_TPS65086=m
CONFIG_GPIO_TPS65218=m
CONFIG_GPIO_TPS65912=m
CONFIG_GPIO_UCB1400=m
CONFIG_GPIO_WM831X=m
CONFIG_GPIO_WM8994=m
# end of MFD GPIO expanders

#
# SPI GPIO expanders
#
CONFIG_GPIO_74X164=m
CONFIG_GPIO_MAX3191X=m
CONFIG_GPIO_MAX7301=m
CONFIG_GPIO_MC33880=m
CONFIG_GPIO_PISOSR=m
CONFIG_GPIO_XRA1403=m
CONFIG_GPIO_MOXTET=m
# end of SPI GPIO expanders

#
# USB GPIO expanders
#
CONFIG_GPIO_VIPERBOARD=m
# end of USB GPIO expanders

#
# Virtual GPIO drivers
#
CONFIG_GPIO_AGGREGATOR=m
CONFIG_GPIO_MOCKUP=m
CONFIG_GPIO_VIRTIO=m
CONFIG_GPIO_SIM=m
# end of Virtual GPIO drivers

CONFIG_W1=m
CONFIG_W1_CON=y

#
# 1-wire Bus Masters
#
CONFIG_W1_MASTER_DS2490=m
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_MXC=m
CONFIG_W1_MASTER_DS1WM=m
CONFIG_W1_MASTER_GPIO=m
CONFIG_W1_MASTER_SGI=m
# end of 1-wire Bus Masters

#
# 1-wire Slaves
#
CONFIG_W1_SLAVE_THERM=m
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_DS2405=m
CONFIG_W1_SLAVE_DS2408=m
CONFIG_W1_SLAVE_DS2408_READBACK=y
CONFIG_W1_SLAVE_DS2413=m
CONFIG_W1_SLAVE_DS2406=m
CONFIG_W1_SLAVE_DS2423=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS2430=m
CONFIG_W1_SLAVE_DS2431=m
CONFIG_W1_SLAVE_DS2433=m
CONFIG_W1_SLAVE_DS2433_CRC=y
CONFIG_W1_SLAVE_DS2438=m
CONFIG_W1_SLAVE_DS250X=m
CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS28E04=m
CONFIG_W1_SLAVE_DS28E17=m
# end of 1-wire Slaves

CONFIG_POWER_RESET=y
CONFIG_POWER_RESET_ATC260X=m
CONFIG_POWER_RESET_BRCMKONA=y
CONFIG_POWER_RESET_BRCMSTB=y
CONFIG_POWER_RESET_GEMINI_POWEROFF=y
CONFIG_POWER_RESET_GPIO=y
CONFIG_POWER_RESET_GPIO_RESTART=y
CONFIG_POWER_RESET_LINKSTATION=m
CONFIG_POWER_RESET_OCELOT_RESET=y
CONFIG_POWER_RESET_LTC2952=y
CONFIG_POWER_RESET_MT6323=y
CONFIG_POWER_RESET_REGULATOR=y
CONFIG_POWER_RESET_RESTART=y
CONFIG_POWER_RESET_TPS65086=y
CONFIG_POWER_RESET_KEYSTONE=y
CONFIG_POWER_RESET_SYSCON=y
CONFIG_POWER_RESET_SYSCON_POWEROFF=y
CONFIG_POWER_RESET_RMOBILE=m
CONFIG_REBOOT_MODE=m
CONFIG_SYSCON_REBOOT_MODE=m
CONFIG_POWER_RESET_SC27XX=m
CONFIG_NVMEM_REBOOT_MODE=m
CONFIG_POWER_SUPPLY=y
CONFIG_POWER_SUPPLY_DEBUG=y
CONFIG_PDA_POWER=m
CONFIG_GENERIC_ADC_BATTERY=m
CONFIG_IP5XXX_POWER=m
CONFIG_WM831X_BACKUP=m
CONFIG_WM831X_POWER=m
CONFIG_TEST_POWER=m
CONFIG_CHARGER_ADP5061=m
CONFIG_BATTERY_ACT8945A=m
CONFIG_BATTERY_CPCAP=m
CONFIG_BATTERY_CW2015=m
CONFIG_BATTERY_DS2760=m
CONFIG_BATTERY_DS2780=m
CONFIG_BATTERY_DS2781=m
CONFIG_BATTERY_DS2782=m
CONFIG_BATTERY_LEGO_EV3=m
CONFIG_BATTERY_OLPC=m
CONFIG_BATTERY_SAMSUNG_SDI=y
CONFIG_BATTERY_INGENIC=m
CONFIG_BATTERY_SBS=m
CONFIG_CHARGER_SBS=m
CONFIG_MANAGER_SBS=m
CONFIG_BATTERY_BQ27XXX=m
CONFIG_BATTERY_BQ27XXX_I2C=m
CONFIG_BATTERY_BQ27XXX_HDQ=m
CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM=y
CONFIG_BATTERY_DA9052=m
CONFIG_CHARGER_DA9150=m
CONFIG_BATTERY_DA9150=m
CONFIG_CHARGER_AXP20X=m
CONFIG_BATTERY_AXP20X=m
CONFIG_AXP20X_POWER=m
CONFIG_BATTERY_MAX17040=m
CONFIG_BATTERY_MAX17042=m
CONFIG_BATTERY_MAX1721X=m
CONFIG_CHARGER_PCF50633=m
CONFIG_CHARGER_CPCAP=m
CONFIG_CHARGER_ISP1704=m
CONFIG_CHARGER_MAX8903=m
CONFIG_CHARGER_LP8727=m
CONFIG_CHARGER_GPIO=m
CONFIG_CHARGER_MANAGER=m
CONFIG_CHARGER_LT3651=m
CONFIG_CHARGER_LTC4162L=m
CONFIG_CHARGER_MAX14577=m
CONFIG_CHARGER_DETECTOR_MAX14656=m
CONFIG_CHARGER_MAX77650=m
CONFIG_CHARGER_MAX77693=m
CONFIG_CHARGER_MAX77976=m
CONFIG_CHARGER_MP2629=m
CONFIG_CHARGER_MT6360=m
CONFIG_CHARGER_MT6370=m
CONFIG_CHARGER_QCOM_SMBB=m
CONFIG_CHARGER_BQ2415X=m
CONFIG_CHARGER_BQ24190=m
CONFIG_CHARGER_BQ24257=m
CONFIG_CHARGER_BQ24735=m
CONFIG_CHARGER_BQ2515X=m
CONFIG_CHARGER_BQ25890=m
CONFIG_CHARGER_BQ25980=m
CONFIG_CHARGER_BQ256XX=m
CONFIG_CHARGER_RK817=m
CONFIG_CHARGER_SMB347=m
CONFIG_CHARGER_TPS65217=m
CONFIG_BATTERY_GAUGE_LTC2941=m
CONFIG_BATTERY_GOLDFISH=m
CONFIG_BATTERY_RT5033=m
CONFIG_CHARGER_RT9455=m
CONFIG_CHARGER_CROS_USBPD=m
CONFIG_CHARGER_CROS_PCHG=m
CONFIG_CHARGER_SC2731=m
CONFIG_FUEL_GAUGE_SC27XX=m
CONFIG_CHARGER_UCS1002=m
CONFIG_CHARGER_BD99954=m
CONFIG_RN5T618_POWER=m
CONFIG_BATTERY_ACER_A500=m
CONFIG_BATTERY_UG3105=m
CONFIG_HWMON=m
CONFIG_HWMON_VID=m
CONFIG_HWMON_DEBUG_CHIP=y

#
# Native drivers
#
CONFIG_SENSORS_AD7314=m
CONFIG_SENSORS_AD7414=m
CONFIG_SENSORS_AD7418=m
CONFIG_SENSORS_ADM1025=m
CONFIG_SENSORS_ADM1026=m
CONFIG_SENSORS_ADM1029=m
CONFIG_SENSORS_ADM1031=m
CONFIG_SENSORS_ADM1177=m
CONFIG_SENSORS_ADM9240=m
CONFIG_SENSORS_ADT7X10=m
CONFIG_SENSORS_ADT7310=m
CONFIG_SENSORS_ADT7410=m
CONFIG_SENSORS_ADT7411=m
CONFIG_SENSORS_ADT7462=m
CONFIG_SENSORS_ADT7470=m
CONFIG_SENSORS_ADT7475=m
CONFIG_SENSORS_AHT10=m
CONFIG_SENSORS_AQUACOMPUTER_D5NEXT=m
CONFIG_SENSORS_AS370=m
CONFIG_SENSORS_ASC7621=m
CONFIG_SENSORS_AXI_FAN_CONTROL=m
CONFIG_SENSORS_ARM_SCMI=m
CONFIG_SENSORS_ARM_SCPI=m
CONFIG_SENSORS_ASB100=m
CONFIG_SENSORS_ASPEED=m
CONFIG_SENSORS_ATXP1=m
CONFIG_SENSORS_BT1_PVT=m
CONFIG_SENSORS_BT1_PVT_ALARMS=y
CONFIG_SENSORS_CORSAIR_CPRO=m
CONFIG_SENSORS_CORSAIR_PSU=m
CONFIG_SENSORS_DRIVETEMP=m
CONFIG_SENSORS_DS620=m
CONFIG_SENSORS_DS1621=m
CONFIG_SENSORS_DA9052_ADC=m
CONFIG_SENSORS_SPARX5=m
CONFIG_SENSORS_F71805F=m
CONFIG_SENSORS_F71882FG=m
CONFIG_SENSORS_F75375S=m
CONFIG_SENSORS_GSC=m
CONFIG_SENSORS_MC13783_ADC=m
CONFIG_SENSORS_FSCHMD=m
CONFIG_SENSORS_FTSTEUTATES=m
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
CONFIG_SENSORS_G760A=m
CONFIG_SENSORS_G762=m
CONFIG_SENSORS_GPIO_FAN=m
CONFIG_SENSORS_HIH6130=m
CONFIG_SENSORS_IBMAEM=m
CONFIG_SENSORS_IBMPEX=m
CONFIG_SENSORS_IIO_HWMON=m
CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_POWR1220=m
CONFIG_SENSORS_LAN966X=m
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LTC2945=m
CONFIG_SENSORS_LTC2947=m
CONFIG_SENSORS_LTC2947_I2C=m
CONFIG_SENSORS_LTC2947_SPI=m
CONFIG_SENSORS_LTC2990=m
CONFIG_SENSORS_LTC2992=m
CONFIG_SENSORS_LTC4151=m
CONFIG_SENSORS_LTC4215=m
CONFIG_SENSORS_LTC4222=m
CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4260=m
CONFIG_SENSORS_LTC4261=m
CONFIG_SENSORS_MAX1111=m
CONFIG_SENSORS_MAX127=m
CONFIG_SENSORS_MAX16065=m
CONFIG_SENSORS_MAX1619=m
CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX31722=m
CONFIG_SENSORS_MAX31730=m
CONFIG_SENSORS_MAX31760=m
CONFIG_SENSORS_MAX6620=m
CONFIG_SENSORS_MAX6621=m
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6650=m
CONFIG_SENSORS_MAX6697=m
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_MLXREG_FAN=m
CONFIG_SENSORS_TC654=m
CONFIG_SENSORS_TPS23861=m
CONFIG_SENSORS_MENF21BMC_HWMON=m
CONFIG_SENSORS_MR75203=m
CONFIG_SENSORS_ADCXX=m
CONFIG_SENSORS_LM63=m
CONFIG_SENSORS_LM70=m
CONFIG_SENSORS_LM73=m
CONFIG_SENSORS_LM75=m
CONFIG_SENSORS_LM77=m
CONFIG_SENSORS_LM78=m
CONFIG_SENSORS_LM80=m
CONFIG_SENSORS_LM83=m
CONFIG_SENSORS_LM85=m
CONFIG_SENSORS_LM87=m
CONFIG_SENSORS_LM90=m
CONFIG_SENSORS_LM92=m
CONFIG_SENSORS_LM93=m
CONFIG_SENSORS_LM95234=m
CONFIG_SENSORS_LM95241=m
CONFIG_SENSORS_LM95245=m
CONFIG_SENSORS_PC87360=m
CONFIG_SENSORS_PC87427=m
CONFIG_SENSORS_NTC_THERMISTOR=m
CONFIG_SENSORS_NCT6683=m
CONFIG_SENSORS_NCT6775_CORE=m
CONFIG_SENSORS_NCT6775=m
CONFIG_SENSORS_NCT6775_I2C=m
CONFIG_SENSORS_NCT7802=m
CONFIG_SENSORS_NCT7904=m
CONFIG_SENSORS_NPCM7XX=m
CONFIG_SENSORS_NSA320=m
CONFIG_SENSORS_NZXT_KRAKEN2=m
CONFIG_SENSORS_NZXT_SMART2=m
CONFIG_SENSORS_OCC_P8_I2C=m
CONFIG_SENSORS_OCC_P9_SBE=m
CONFIG_SENSORS_OCC=m
CONFIG_SENSORS_PCF8591=m
CONFIG_SENSORS_PECI_CPUTEMP=m
CONFIG_SENSORS_PECI_DIMMTEMP=m
CONFIG_SENSORS_PECI=m
CONFIG_PMBUS=m
CONFIG_SENSORS_PMBUS=m
CONFIG_SENSORS_ADM1266=m
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_BEL_PFE=m
CONFIG_SENSORS_BPA_RS600=m
CONFIG_SENSORS_DELTA_AHE50DC_FAN=m
CONFIG_SENSORS_FSP_3Y=m
CONFIG_SENSORS_IBM_CFFPS=m
CONFIG_SENSORS_DPS920AB=m
CONFIG_SENSORS_INSPUR_IPSPS=m
CONFIG_SENSORS_IR35221=m
CONFIG_SENSORS_IR36021=m
CONFIG_SENSORS_IR38064=m
CONFIG_SENSORS_IR38064_REGULATOR=y
CONFIG_SENSORS_IRPS5401=m
CONFIG_SENSORS_ISL68137=m
CONFIG_SENSORS_LM25066=m
CONFIG_SENSORS_LM25066_REGULATOR=y
CONFIG_SENSORS_LT7182S=m
CONFIG_SENSORS_LTC2978=m
CONFIG_SENSORS_LTC2978_REGULATOR=y
CONFIG_SENSORS_LTC3815=m
CONFIG_SENSORS_MAX15301=m
CONFIG_SENSORS_MAX16064=m
CONFIG_SENSORS_MAX16601=m
CONFIG_SENSORS_MAX20730=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31785=m
CONFIG_SENSORS_MAX34440=m
CONFIG_SENSORS_MAX8688=m
CONFIG_SENSORS_MP2888=m
CONFIG_SENSORS_MP2975=m
CONFIG_SENSORS_MP5023=m
CONFIG_SENSORS_PIM4328=m
CONFIG_SENSORS_PLI1209BC=m
CONFIG_SENSORS_PLI1209BC_REGULATOR=y
CONFIG_SENSORS_PM6764TR=m
CONFIG_SENSORS_PXE1610=m
CONFIG_SENSORS_Q54SJ108A2=m
CONFIG_SENSORS_STPDDC60=m
CONFIG_SENSORS_TPS40422=m
CONFIG_SENSORS_TPS53679=m
CONFIG_SENSORS_TPS546D24=m
CONFIG_SENSORS_UCD9000=m
CONFIG_SENSORS_UCD9200=m
CONFIG_SENSORS_XDPE152=m
CONFIG_SENSORS_XDPE122=m
CONFIG_SENSORS_XDPE122_REGULATOR=y
CONFIG_SENSORS_ZL6100=m
CONFIG_SENSORS_PWM_FAN=m
CONFIG_SENSORS_RASPBERRYPI_HWMON=m
CONFIG_SENSORS_SL28CPLD=m
CONFIG_SENSORS_SBTSI=m
CONFIG_SENSORS_SBRMI=m
CONFIG_SENSORS_SHT15=m
CONFIG_SENSORS_SHT21=m
CONFIG_SENSORS_SHT3x=m
CONFIG_SENSORS_SHT4x=m
CONFIG_SENSORS_SHTC1=m
CONFIG_SENSORS_SY7636A=m
CONFIG_SENSORS_DME1737=m
CONFIG_SENSORS_EMC1403=m
CONFIG_SENSORS_EMC2103=m
CONFIG_SENSORS_EMC2305=m
CONFIG_SENSORS_EMC6W201=m
CONFIG_SENSORS_SMSC47M1=m
CONFIG_SENSORS_SMSC47M192=m
CONFIG_SENSORS_SMSC47B397=m
CONFIG_SENSORS_SCH56XX_COMMON=m
CONFIG_SENSORS_SCH5627=m
CONFIG_SENSORS_SCH5636=m
CONFIG_SENSORS_STTS751=m
CONFIG_SENSORS_SMM665=m
CONFIG_SENSORS_ADC128D818=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_ADS7871=m
CONFIG_SENSORS_AMC6821=m
CONFIG_SENSORS_INA209=m
CONFIG_SENSORS_INA2XX=m
CONFIG_SENSORS_INA238=m
CONFIG_SENSORS_INA3221=m
CONFIG_SENSORS_TC74=m
CONFIG_SENSORS_THMC50=m
CONFIG_SENSORS_TMP102=m
CONFIG_SENSORS_TMP103=m
CONFIG_SENSORS_TMP108=m
CONFIG_SENSORS_TMP401=m
CONFIG_SENSORS_TMP421=m
CONFIG_SENSORS_TMP464=m
CONFIG_SENSORS_TMP513=m
CONFIG_SENSORS_VT1211=m
CONFIG_SENSORS_W83773G=m
CONFIG_SENSORS_W83781D=m
CONFIG_SENSORS_W83791D=m
CONFIG_SENSORS_W83792D=m
CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83795_FANCTRL=y
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
CONFIG_SENSORS_W83627HF=m
CONFIG_SENSORS_W83627EHF=m
CONFIG_SENSORS_WM831X=m
CONFIG_SENSORS_INTEL_M10_BMC_HWMON=m
CONFIG_THERMAL=y
CONFIG_THERMAL_NETLINK=y
CONFIG_THERMAL_STATISTICS=y
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
CONFIG_THERMAL_OF=y
CONFIG_THERMAL_WRITABLE_TRIPS=y
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
CONFIG_THERMAL_GOV_FAIR_SHARE=y
CONFIG_THERMAL_GOV_STEP_WISE=y
CONFIG_THERMAL_GOV_BANG_BANG=y
CONFIG_THERMAL_GOV_USER_SPACE=y
CONFIG_CPU_THERMAL=y
CONFIG_DEVFREQ_THERMAL=y
CONFIG_THERMAL_EMULATION=y
CONFIG_THERMAL_MMIO=m
CONFIG_HISI_THERMAL=m
CONFIG_IMX_THERMAL=m
CONFIG_IMX_SC_THERMAL=m
CONFIG_IMX8MM_THERMAL=m
CONFIG_K3_THERMAL=m
CONFIG_QORIQ_THERMAL=m
CONFIG_SPEAR_THERMAL=m
CONFIG_SUN8I_THERMAL=m
CONFIG_ROCKCHIP_THERMAL=m
CONFIG_RCAR_THERMAL=m
CONFIG_RCAR_GEN3_THERMAL=m
CONFIG_RZG2L_THERMAL=m
CONFIG_KIRKWOOD_THERMAL=m
CONFIG_DOVE_THERMAL=m
CONFIG_ARMADA_THERMAL=m
CONFIG_DA9062_THERMAL=m
CONFIG_MTK_THERMAL=m

#
# Intel thermal drivers
#

#
# ACPI INT340X thermal drivers
#
# end of ACPI INT340X thermal drivers
# end of Intel thermal drivers

#
# Broadcom thermal drivers
#
CONFIG_BCM2711_THERMAL=m
CONFIG_BCM2835_THERMAL=m
CONFIG_BRCMSTB_THERMAL=m
CONFIG_BCM_NS_THERMAL=m
CONFIG_BCM_SR_THERMAL=m
# end of Broadcom thermal drivers

#
# Texas Instruments thermal drivers
#
CONFIG_TI_SOC_THERMAL=m
CONFIG_TI_THERMAL=y
CONFIG_OMAP3_THERMAL=y
CONFIG_OMAP4_THERMAL=y
CONFIG_OMAP5_THERMAL=y
CONFIG_DRA752_THERMAL=y
# end of Texas Instruments thermal drivers

#
# Samsung thermal drivers
#
CONFIG_EXYNOS_THERMAL=m
# end of Samsung thermal drivers

#
# NVIDIA Tegra thermal drivers
#
CONFIG_TEGRA_SOCTHERM=m
CONFIG_TEGRA_BPMP_THERMAL=m
CONFIG_TEGRA30_TSENSOR=m
# end of NVIDIA Tegra thermal drivers

CONFIG_GENERIC_ADC_THERMAL=m

#
# Qualcomm thermal drivers
#
CONFIG_QCOM_TSENS=m
CONFIG_QCOM_SPMI_ADC_TM5=m
CONFIG_QCOM_SPMI_TEMP_ALARM=m
# end of Qualcomm thermal drivers

CONFIG_UNIPHIER_THERMAL=m
CONFIG_SPRD_THERMAL=m
CONFIG_KHADAS_MCU_FAN_THERMAL=m
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_CORE=y
CONFIG_WATCHDOG_NOWAYOUT=y
CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
CONFIG_WATCHDOG_OPEN_TIMEOUT=0
CONFIG_WATCHDOG_SYSFS=y
CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT=y

#
# Watchdog Pretimeout Governors
#
CONFIG_WATCHDOG_PRETIMEOUT_GOV=y
CONFIG_WATCHDOG_PRETIMEOUT_GOV_SEL=m
CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=m
CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=m
# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP is not set
CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC=y

#
# Watchdog Device Drivers
#
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
CONFIG_DA9052_WATCHDOG=m
CONFIG_DA9055_WATCHDOG=m
CONFIG_DA9063_WATCHDOG=m
CONFIG_DA9062_WATCHDOG=m
CONFIG_GPIO_WATCHDOG=m
CONFIG_MENF21BMC_WATCHDOG=m
CONFIG_MENZ069_WATCHDOG=m
CONFIG_WM831X_WATCHDOG=m
CONFIG_XILINX_WATCHDOG=m
CONFIG_ZIIRAVE_WATCHDOG=m
CONFIG_RAVE_SP_WATCHDOG=m
CONFIG_MLX_WDT=m
CONFIG_SL28CPLD_WATCHDOG=m
CONFIG_ARMADA_37XX_WATCHDOG=m
CONFIG_ASM9260_WATCHDOG=m
CONFIG_AT91RM9200_WATCHDOG=m
CONFIG_AT91SAM9X_WATCHDOG=m
CONFIG_SAMA5D4_WATCHDOG=m
CONFIG_CADENCE_WATCHDOG=m
CONFIG_FTWDT010_WATCHDOG=m
CONFIG_S3C2410_WATCHDOG=m
CONFIG_DW_WATCHDOG=m
CONFIG_EP93XX_WATCHDOG=m
CONFIG_OMAP_WATCHDOG=m
CONFIG_PNX4008_WATCHDOG=m
CONFIG_DAVINCI_WATCHDOG=m
CONFIG_K3_RTI_WATCHDOG=m
CONFIG_RN5T618_WATCHDOG=m
CONFIG_SUNXI_WATCHDOG=m
CONFIG_NPCM7XX_WATCHDOG=m
CONFIG_STMP3XXX_RTC_WATCHDOG=m
CONFIG_TS4800_WATCHDOG=m
CONFIG_TS72XX_WATCHDOG=m
CONFIG_MAX63XX_WATCHDOG=m
CONFIG_MAX77620_WATCHDOG=m
CONFIG_IMX2_WDT=m
CONFIG_IMX7ULP_WDT=m
CONFIG_RETU_WATCHDOG=m
CONFIG_MOXART_WDT=m
CONFIG_ST_LPC_WATCHDOG=m
CONFIG_TEGRA_WATCHDOG=m
CONFIG_QCOM_WDT=m
CONFIG_MESON_GXBB_WATCHDOG=m
CONFIG_MESON_WATCHDOG=m
CONFIG_MEDIATEK_WATCHDOG=m
CONFIG_DIGICOLOR_WATCHDOG=m
CONFIG_LPC18XX_WATCHDOG=m
CONFIG_RENESAS_WDT=m
CONFIG_RENESAS_RZAWDT=m
CONFIG_RENESAS_RZN1WDT=m
CONFIG_RENESAS_RZG2LWDT=m
CONFIG_ASPEED_WATCHDOG=m
CONFIG_UNIPHIER_WATCHDOG=m
CONFIG_RTD119X_WATCHDOG=y
CONFIG_REALTEK_OTTO_WDT=m
CONFIG_SPRD_WATCHDOG=m
CONFIG_PM8916_WATCHDOG=m
CONFIG_VISCONTI_WATCHDOG=m
CONFIG_MSC313E_WATCHDOG=m
CONFIG_APPLE_WATCHDOG=m
CONFIG_SUNPLUS_WATCHDOG=m
CONFIG_SC520_WDT=m
CONFIG_KEMPLD_WDT=m
CONFIG_BCM47XX_WDT=m
CONFIG_BCM2835_WDT=m
CONFIG_BCM_KONA_WDT=m
CONFIG_BCM_KONA_WDT_DEBUG=y
CONFIG_BCM7038_WDT=m
CONFIG_IMGPDC_WDT=m
CONFIG_MPC5200_WDT=y
CONFIG_MEN_A21_WDT=m
CONFIG_UML_WATCHDOG=m

#
# ISA-based Watchdog Cards
#
CONFIG_PCWATCHDOG=m
CONFIG_MIXCOMWD=m
CONFIG_WDT=m

#
# USB-based Watchdog Cards
#
CONFIG_USBPCWATCHDOG=m
CONFIG_SSB_POSSIBLE=y
CONFIG_SSB=m
CONFIG_SSB_SPROM=y
CONFIG_SSB_BLOCKIO=y
CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
CONFIG_SSB_PCMCIAHOST=y
CONFIG_SSB_SDIOHOST_POSSIBLE=y
CONFIG_SSB_SDIOHOST=y
CONFIG_SSB_HOST_SOC=y
CONFIG_SSB_DRIVER_GPIO=y
CONFIG_BCMA_POSSIBLE=y
CONFIG_BCMA=m
CONFIG_BCMA_BLOCKIO=y
CONFIG_BCMA_HOST_SOC=y
CONFIG_BCMA_DRIVER_MIPS=y
CONFIG_BCMA_PFLASH=y
CONFIG_BCMA_SFLASH=y
CONFIG_BCMA_NFLASH=y
CONFIG_BCMA_DRIVER_GMAC_CMN=y
CONFIG_BCMA_DRIVER_GPIO=y
CONFIG_BCMA_DEBUG=y

#
# Multifunction device drivers
#
CONFIG_MFD_CORE=y
CONFIG_MFD_ACT8945A=m
CONFIG_MFD_SUN4I_GPADC=m
CONFIG_MFD_AT91_USART=y
CONFIG_MFD_ATMEL_FLEXCOM=m
CONFIG_MFD_ATMEL_HLCDC=m
CONFIG_MFD_ATMEL_SMC=y
CONFIG_MFD_BCM590XX=m
CONFIG_MFD_BD9571MWV=m
CONFIG_MFD_AXP20X=m
CONFIG_MFD_AXP20X_I2C=m
CONFIG_MFD_CROS_EC_DEV=m
CONFIG_MFD_MADERA=m
CONFIG_MFD_MADERA_I2C=m
CONFIG_MFD_MADERA_SPI=m
CONFIG_MFD_CS47L15=y
CONFIG_MFD_CS47L35=y
CONFIG_MFD_CS47L85=y
CONFIG_MFD_CS47L90=y
CONFIG_MFD_CS47L92=y
CONFIG_MFD_ASIC3=y
CONFIG_PMIC_DA9052=y
CONFIG_MFD_DA9052_SPI=y
CONFIG_MFD_DA9062=m
CONFIG_MFD_DA9063=m
CONFIG_MFD_DA9150=m
CONFIG_MFD_DLN2=m
CONFIG_MFD_ENE_KB3930=m
CONFIG_MFD_EXYNOS_LPASS=m
CONFIG_MFD_GATEWORKS_GSC=m
CONFIG_MFD_MC13XXX=m
CONFIG_MFD_MC13XXX_SPI=m
CONFIG_MFD_MC13XXX_I2C=m
CONFIG_MFD_MP2629=m
CONFIG_MFD_MXS_LRADC=m
CONFIG_MFD_MX25_TSADC=m
CONFIG_MFD_HI6421_PMIC=m
CONFIG_MFD_HI6421_SPMI=m
CONFIG_MFD_HI655X_PMIC=m
CONFIG_HTC_PASIC3=m
CONFIG_MFD_IQS62X=m
CONFIG_MFD_KEMPLD=m
CONFIG_MFD_88PM800=m
CONFIG_MFD_88PM805=m
CONFIG_MFD_MAX14577=m
CONFIG_MFD_MAX77650=m
CONFIG_MFD_MAX77686=m
CONFIG_MFD_MAX77693=m
CONFIG_MFD_MAX77714=m
CONFIG_MFD_MAX8907=m
CONFIG_MFD_MT6360=m
CONFIG_MFD_MT6370=m
CONFIG_MFD_MT6397=m
CONFIG_MFD_MENF21BMC=m
CONFIG_MFD_OCELOT=m
CONFIG_EZX_PCAP=y
CONFIG_MFD_CPCAP=m
CONFIG_MFD_VIPERBOARD=m
CONFIG_MFD_NTXEC=m
CONFIG_MFD_RETU=m
CONFIG_MFD_PCF50633=m
CONFIG_PCF50633_ADC=m
CONFIG_PCF50633_GPIO=m
CONFIG_UCB1400_CORE=m
CONFIG_MFD_PM8XXX=m
CONFIG_MFD_SPMI_PMIC=m
CONFIG_MFD_SY7636A=m
CONFIG_MFD_RT4831=m
CONFIG_MFD_RT5033=m
CONFIG_MFD_RT5120=m
CONFIG_MFD_RK808=m
CONFIG_MFD_RN5T618=m
CONFIG_MFD_SI476X_CORE=m
CONFIG_MFD_SIMPLE_MFD_I2C=m
CONFIG_MFD_SL28CPLD=m
CONFIG_MFD_SM501=m
CONFIG_MFD_SM501_GPIO=y
CONFIG_MFD_SKY81452=m
CONFIG_MFD_SC27XX_PMIC=m
CONFIG_ABX500_CORE=y
CONFIG_MFD_STMPE=y

#
# STMicroelectronics STMPE Interface Drivers
#
CONFIG_STMPE_SPI=y
# end of STMicroelectronics STMPE Interface Drivers

CONFIG_MFD_SUN6I_PRCM=y
CONFIG_MFD_SYSCON=y
CONFIG_MFD_TI_AM335X_TSCADC=m
CONFIG_MFD_LP3943=m
CONFIG_MFD_TI_LMU=m
CONFIG_MFD_OMAP_USB_HOST=y
CONFIG_TPS6105X=m
CONFIG_TPS65010=m
CONFIG_TPS6507X=m
CONFIG_MFD_TPS65086=m
CONFIG_MFD_TPS65217=m
CONFIG_MFD_TI_LP873X=m
CONFIG_MFD_TI_LP87565=m
CONFIG_MFD_TPS65218=m
CONFIG_MFD_TPS65912=m
CONFIG_MFD_TPS65912_I2C=m
CONFIG_MFD_TPS65912_SPI=m
CONFIG_MFD_WL1273_CORE=m
CONFIG_MFD_LM3533=m
CONFIG_MFD_TQMX86=m
CONFIG_MFD_ARIZONA=m
CONFIG_MFD_ARIZONA_I2C=m
CONFIG_MFD_ARIZONA_SPI=m
CONFIG_MFD_CS47L24=y
CONFIG_MFD_WM5102=y
CONFIG_MFD_WM5110=y
CONFIG_MFD_WM8997=y
CONFIG_MFD_WM8998=y
CONFIG_MFD_WM831X=y
CONFIG_MFD_WM831X_SPI=y
CONFIG_MFD_WM8994=m
CONFIG_MFD_STW481X=m
CONFIG_MFD_STM32_LPTIMER=m
CONFIG_MFD_STM32_TIMERS=m
CONFIG_MFD_STMFX=m
CONFIG_MFD_WCD934X=m
CONFIG_MFD_ATC260X=m
CONFIG_MFD_ATC260X_I2C=m
CONFIG_MFD_KHADAS_MCU=m
CONFIG_MFD_ACER_A500_EC=m
CONFIG_MFD_QCOM_PM8008=m
CONFIG_RAVE_SP_CORE=m
CONFIG_MFD_INTEL_M10_BMC=m
CONFIG_MFD_RSMU_I2C=m
CONFIG_MFD_RSMU_SPI=m
# end of Multifunction device drivers

CONFIG_REGULATOR=y
CONFIG_REGULATOR_DEBUG=y
CONFIG_REGULATOR_FIXED_VOLTAGE=m
CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
CONFIG_REGULATOR_USERSPACE_CONSUMER=m
CONFIG_REGULATOR_88PG86X=m
CONFIG_REGULATOR_88PM800=m
CONFIG_REGULATOR_ACT8865=m
CONFIG_REGULATOR_ACT8945A=m
CONFIG_REGULATOR_AD5398=m
CONFIG_REGULATOR_ANATOP=m
CONFIG_REGULATOR_ARIZONA_LDO1=m
CONFIG_REGULATOR_ARIZONA_MICSUPP=m
CONFIG_REGULATOR_ARM_SCMI=m
CONFIG_REGULATOR_ATC260X=m
CONFIG_REGULATOR_AXP20X=m
CONFIG_REGULATOR_BCM590XX=m
CONFIG_REGULATOR_BD9571MWV=m
CONFIG_REGULATOR_CPCAP=m
CONFIG_REGULATOR_CROS_EC=m
CONFIG_REGULATOR_DA9052=m
CONFIG_REGULATOR_DA9062=m
CONFIG_REGULATOR_DA9063=m
CONFIG_REGULATOR_DA9121=m
CONFIG_REGULATOR_DA9210=m
CONFIG_REGULATOR_DA9211=m
CONFIG_REGULATOR_FAN53555=m
CONFIG_REGULATOR_FAN53880=m
CONFIG_REGULATOR_GPIO=m
CONFIG_REGULATOR_HI6421=m
CONFIG_REGULATOR_HI6421V530=m
CONFIG_REGULATOR_HI655X=m
CONFIG_REGULATOR_HI6421V600=m
CONFIG_REGULATOR_ISL9305=m
CONFIG_REGULATOR_ISL6271A=m
CONFIG_REGULATOR_LM363X=m
CONFIG_REGULATOR_LP3971=m
CONFIG_REGULATOR_LP3972=m
CONFIG_REGULATOR_LP872X=m
CONFIG_REGULATOR_LP873X=m
CONFIG_REGULATOR_LP8755=m
CONFIG_REGULATOR_LP87565=m
CONFIG_REGULATOR_LTC3589=m
CONFIG_REGULATOR_LTC3676=m
CONFIG_REGULATOR_MAX14577=m
CONFIG_REGULATOR_MAX1586=m
CONFIG_REGULATOR_MAX77620=m
CONFIG_REGULATOR_MAX77650=m
CONFIG_REGULATOR_MAX8649=m
CONFIG_REGULATOR_MAX8660=m
CONFIG_REGULATOR_MAX8893=m
CONFIG_REGULATOR_MAX8907=m
CONFIG_REGULATOR_MAX8952=m
CONFIG_REGULATOR_MAX8973=m
CONFIG_REGULATOR_MAX20086=m
CONFIG_REGULATOR_MAX77686=m
CONFIG_REGULATOR_MAX77693=m
CONFIG_REGULATOR_MAX77802=m
CONFIG_REGULATOR_MAX77826=m
CONFIG_REGULATOR_MC13XXX_CORE=m
CONFIG_REGULATOR_MC13783=m
CONFIG_REGULATOR_MC13892=m
CONFIG_REGULATOR_MCP16502=m
CONFIG_REGULATOR_MP5416=m
CONFIG_REGULATOR_MP8859=m
CONFIG_REGULATOR_MP886X=m
CONFIG_REGULATOR_MPQ7920=m
CONFIG_REGULATOR_MT6311=m
CONFIG_REGULATOR_MT6315=m
CONFIG_REGULATOR_MT6323=m
CONFIG_REGULATOR_MT6331=m
CONFIG_REGULATOR_MT6332=m
CONFIG_REGULATOR_MT6358=m
CONFIG_REGULATOR_MT6359=m
CONFIG_REGULATOR_MT6360=m
CONFIG_REGULATOR_MT6370=m
CONFIG_REGULATOR_MT6380=m
CONFIG_REGULATOR_MT6397=m
CONFIG_REGULATOR_PBIAS=m
CONFIG_REGULATOR_PCA9450=m
CONFIG_REGULATOR_PCAP=m
CONFIG_REGULATOR_PCF50633=m
CONFIG_REGULATOR_PF8X00=m
CONFIG_REGULATOR_PFUZE100=m
CONFIG_REGULATOR_PV88060=m
CONFIG_REGULATOR_PV88080=m
CONFIG_REGULATOR_PV88090=m
CONFIG_REGULATOR_PWM=m
CONFIG_REGULATOR_QCOM_RPMH=m
CONFIG_REGULATOR_QCOM_SMD_RPM=m
CONFIG_REGULATOR_QCOM_SPMI=m
CONFIG_REGULATOR_QCOM_USB_VBUS=m
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
CONFIG_REGULATOR_RK808=m
CONFIG_REGULATOR_RN5T618=m
CONFIG_REGULATOR_RT4801=m
CONFIG_REGULATOR_RT4831=m
CONFIG_REGULATOR_RT5033=m
CONFIG_REGULATOR_RT5120=m
CONFIG_REGULATOR_RT5190A=m
CONFIG_REGULATOR_RT5759=m
CONFIG_REGULATOR_RT6160=m
CONFIG_REGULATOR_RT6245=m
CONFIG_REGULATOR_RTQ2134=m
CONFIG_REGULATOR_RTMV20=m
CONFIG_REGULATOR_RTQ6752=m
CONFIG_REGULATOR_S2MPA01=m
CONFIG_REGULATOR_S2MPS11=m
CONFIG_REGULATOR_S5M8767=m
CONFIG_REGULATOR_SC2731=m
CONFIG_REGULATOR_SKY81452=m
CONFIG_REGULATOR_SLG51000=m
CONFIG_REGULATOR_STM32_BOOSTER=m
CONFIG_REGULATOR_STM32_VREFBUF=m
CONFIG_REGULATOR_STM32_PWR=y
CONFIG_REGULATOR_TI_ABB=m
CONFIG_REGULATOR_STW481X_VMMC=y
CONFIG_REGULATOR_SY7636A=m
CONFIG_REGULATOR_SY8106A=m
CONFIG_REGULATOR_SY8824X=m
CONFIG_REGULATOR_SY8827N=m
CONFIG_REGULATOR_TPS51632=m
CONFIG_REGULATOR_TPS6105X=m
CONFIG_REGULATOR_TPS62360=m
CONFIG_REGULATOR_TPS6286X=m
CONFIG_REGULATOR_TPS65023=m
CONFIG_REGULATOR_TPS6507X=m
CONFIG_REGULATOR_TPS65086=m
CONFIG_REGULATOR_TPS65132=m
CONFIG_REGULATOR_TPS65217=m
CONFIG_REGULATOR_TPS65218=m
CONFIG_REGULATOR_TPS6524X=m
CONFIG_REGULATOR_TPS65912=m
CONFIG_REGULATOR_TPS68470=m
CONFIG_REGULATOR_UNIPHIER=m
CONFIG_REGULATOR_VCTRL=m
CONFIG_REGULATOR_WM831X=m
CONFIG_REGULATOR_WM8994=m
CONFIG_REGULATOR_QCOM_LABIBB=m
CONFIG_RC_CORE=m
CONFIG_LIRC=y
CONFIG_RC_MAP=m
CONFIG_RC_DECODERS=y
CONFIG_IR_IMON_DECODER=m
CONFIG_IR_JVC_DECODER=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_NEC_DECODER=m
CONFIG_IR_RC5_DECODER=m
CONFIG_IR_RC6_DECODER=m
CONFIG_IR_RCMM_DECODER=m
CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SHARP_DECODER=m
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_XMP_DECODER=m
CONFIG_RC_DEVICES=y
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
CONFIG_IR_GPIO_TX=m
CONFIG_IR_HIX5HD2=m
CONFIG_IR_IGORPLUGUSB=m
CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_IMON_RAW=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_MESON=m
CONFIG_IR_MESON_TX=m
CONFIG_IR_MTK=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
CONFIG_IR_REDRAT3=m
CONFIG_IR_RX51=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_SUNXI=m
CONFIG_IR_TOY=m
CONFIG_IR_TTUSBIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_RC_ATI_REMOTE=m
CONFIG_RC_LOOPBACK=m
CONFIG_RC_ST=m
CONFIG_RC_XBOX_DVD=m
CONFIG_IR_IMG=m
CONFIG_IR_IMG_RAW=y
CONFIG_IR_IMG_HW=y
CONFIG_IR_IMG_NEC=y
CONFIG_IR_IMG_JVC=y
CONFIG_IR_IMG_SONY=y
CONFIG_IR_IMG_SHARP=y
CONFIG_IR_IMG_SANYO=y
CONFIG_IR_IMG_RC5=y
CONFIG_IR_IMG_RC6=y
CONFIG_CEC_CORE=m
CONFIG_CEC_NOTIFIER=y
CONFIG_CEC_PIN=y

#
# CEC support
#
CONFIG_MEDIA_CEC_RC=y
CONFIG_CEC_PIN_ERROR_INJ=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_CEC_CH7322=m
CONFIG_CEC_CROS_EC=m
CONFIG_CEC_MESON_AO=m
CONFIG_CEC_MESON_G12A_AO=m
CONFIG_CEC_GPIO=m
CONFIG_CEC_SAMSUNG_S5P=m
CONFIG_CEC_STI=m
CONFIG_CEC_STM32=m
CONFIG_CEC_TEGRA=m
CONFIG_USB_PULSE8_CEC=m
CONFIG_USB_RAINSHADOW_CEC=m
# end of CEC support

CONFIG_MEDIA_SUPPORT=m
CONFIG_MEDIA_SUPPORT_FILTER=y
CONFIG_MEDIA_SUBDRV_AUTOSELECT=y

#
# Media device types
#
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_SDR_SUPPORT=y
CONFIG_MEDIA_PLATFORM_SUPPORT=y
CONFIG_MEDIA_TEST_SUPPORT=y
# end of Media device types

CONFIG_VIDEO_DEV=m
CONFIG_MEDIA_CONTROLLER=y
CONFIG_DVB_CORE=m

#
# Video4Linux options
#
CONFIG_VIDEO_V4L2_I2C=y
CONFIG_VIDEO_V4L2_SUBDEV_API=y
CONFIG_VIDEO_ADV_DEBUG=y
CONFIG_VIDEO_FIXED_MINOR_RANGES=y
CONFIG_VIDEO_TUNER=m
CONFIG_V4L2_JPEG_HELPER=m
CONFIG_V4L2_H264=m
CONFIG_V4L2_VP9=m
CONFIG_V4L2_MEM2MEM_DEV=m
CONFIG_V4L2_FLASH_LED_CLASS=m
CONFIG_V4L2_FWNODE=m
CONFIG_V4L2_ASYNC=m
CONFIG_VIDEOBUF_GEN=m
CONFIG_VIDEOBUF_VMALLOC=m
CONFIG_VIDEOBUF_DMA_CONTIG=m
# end of Video4Linux options

#
# Media controller options
#
CONFIG_MEDIA_CONTROLLER_DVB=y
CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
# end of Media controller options

#
# Digital TV options
#
CONFIG_DVB_MMAP=y
CONFIG_DVB_NET=y
CONFIG_DVB_MAX_ADAPTERS=16
CONFIG_DVB_DYNAMIC_MINORS=y
CONFIG_DVB_DEMUX_SECTION_LOSS_LOG=y
CONFIG_DVB_ULE_DEBUG=y
# end of Digital TV options

#
# Media drivers
#

#
# Drivers filtered as selected at 'Filter media drivers'
#

#
# Media drivers
#
CONFIG_MEDIA_USB_SUPPORT=y

#
# Webcam devices
#
CONFIG_USB_GSPCA=m
CONFIG_USB_GSPCA_BENQ=m
CONFIG_USB_GSPCA_CONEX=m
CONFIG_USB_GSPCA_CPIA1=m
CONFIG_USB_GSPCA_DTCS033=m
CONFIG_USB_GSPCA_ETOMS=m
CONFIG_USB_GSPCA_FINEPIX=m
CONFIG_USB_GSPCA_JEILINJ=m
CONFIG_USB_GSPCA_JL2005BCD=m
CONFIG_USB_GSPCA_KINECT=m
CONFIG_USB_GSPCA_KONICA=m
CONFIG_USB_GSPCA_MARS=m
CONFIG_USB_GSPCA_MR97310A=m
CONFIG_USB_GSPCA_NW80X=m
CONFIG_USB_GSPCA_OV519=m
CONFIG_USB_GSPCA_OV534=m
CONFIG_USB_GSPCA_OV534_9=m
CONFIG_USB_GSPCA_PAC207=m
CONFIG_USB_GSPCA_PAC7302=m
CONFIG_USB_GSPCA_PAC7311=m
CONFIG_USB_GSPCA_SE401=m
CONFIG_USB_GSPCA_SN9C2028=m
CONFIG_USB_GSPCA_SN9C20X=m
CONFIG_USB_GSPCA_SONIXB=m
CONFIG_USB_GSPCA_SONIXJ=m
CONFIG_USB_GSPCA_SPCA1528=m
CONFIG_USB_GSPCA_SPCA500=m
CONFIG_USB_GSPCA_SPCA501=m
CONFIG_USB_GSPCA_SPCA505=m
CONFIG_USB_GSPCA_SPCA506=m
CONFIG_USB_GSPCA_SPCA508=m
CONFIG_USB_GSPCA_SPCA561=m
CONFIG_USB_GSPCA_SQ905=m
CONFIG_USB_GSPCA_SQ905C=m
CONFIG_USB_GSPCA_SQ930X=m
CONFIG_USB_GSPCA_STK014=m
CONFIG_USB_GSPCA_STK1135=m
CONFIG_USB_GSPCA_STV0680=m
CONFIG_USB_GSPCA_SUNPLUS=m
CONFIG_USB_GSPCA_T613=m
CONFIG_USB_GSPCA_TOPRO=m
CONFIG_USB_GSPCA_TOUPTEK=m
CONFIG_USB_GSPCA_TV8532=m
CONFIG_USB_GSPCA_VC032X=m
CONFIG_USB_GSPCA_VICAM=m
CONFIG_USB_GSPCA_XIRLINK_CIT=m
CONFIG_USB_GSPCA_ZC3XX=m
CONFIG_USB_GL860=m
CONFIG_USB_M5602=m
CONFIG_USB_STV06XX=m
CONFIG_USB_PWC=m
CONFIG_USB_PWC_DEBUG=y
CONFIG_USB_PWC_INPUT_EVDEV=y
CONFIG_USB_S2255=m
CONFIG_VIDEO_USBTV=m
CONFIG_USB_VIDEO_CLASS=m
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y

#
# Analog TV USB devices
#
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
CONFIG_VIDEO_GO7007_LOADER=m
CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m
CONFIG_VIDEO_HDPVR=m
CONFIG_VIDEO_PVRUSB2=m
CONFIG_VIDEO_PVRUSB2_SYSFS=y
CONFIG_VIDEO_PVRUSB2_DVB=y
CONFIG_VIDEO_PVRUSB2_DEBUGIFC=y
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160=m

#
# Analog/digital TV USB devices
#
CONFIG_VIDEO_AU0828=m
CONFIG_VIDEO_AU0828_V4L2=y
CONFIG_VIDEO_AU0828_RC=y
CONFIG_VIDEO_CX231XX=m
CONFIG_VIDEO_CX231XX_RC=y
CONFIG_VIDEO_CX231XX_ALSA=m
CONFIG_VIDEO_CX231XX_DVB=m

#
# Digital TV USB devices
#
CONFIG_DVB_AS102=m
CONFIG_DVB_B2C2_FLEXCOP_USB=m
CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG=y
CONFIG_DVB_USB_V2=m
CONFIG_DVB_USB_AF9015=m
CONFIG_DVB_USB_AF9035=m
CONFIG_DVB_USB_ANYSEE=m
CONFIG_DVB_USB_AU6610=m
CONFIG_DVB_USB_AZ6007=m
CONFIG_DVB_USB_CE6230=m
CONFIG_DVB_USB_DVBSKY=m
CONFIG_DVB_USB_EC168=m
CONFIG_DVB_USB_GL861=m
CONFIG_DVB_USB_LME2510=m
CONFIG_DVB_USB_MXL111SF=m
CONFIG_DVB_USB_RTL28XXU=m
CONFIG_DVB_USB_ZD1301=m
CONFIG_DVB_USB=m
CONFIG_DVB_USB_DEBUG=y
CONFIG_DVB_USB_A800=m
CONFIG_DVB_USB_AF9005=m
CONFIG_DVB_USB_AF9005_REMOTE=m
CONFIG_DVB_USB_AZ6027=m
CONFIG_DVB_USB_CINERGY_T2=m
CONFIG_DVB_USB_CXUSB=m
CONFIG_DVB_USB_CXUSB_ANALOG=y
CONFIG_DVB_USB_DIB0700=m
CONFIG_DVB_USB_DIB3000MC=m
CONFIG_DVB_USB_DIBUSB_MB=m
CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
CONFIG_DVB_USB_DIBUSB_MC=m
CONFIG_DVB_USB_DIGITV=m
CONFIG_DVB_USB_DTT200U=m
CONFIG_DVB_USB_DTV5100=m
CONFIG_DVB_USB_DW2102=m
CONFIG_DVB_USB_GP8PSK=m
CONFIG_DVB_USB_M920X=m
CONFIG_DVB_USB_NOVA_T_USB2=m
CONFIG_DVB_USB_OPERA1=m
CONFIG_DVB_USB_PCTV452E=m
CONFIG_DVB_USB_TECHNISAT_USB2=m
CONFIG_DVB_USB_TTUSB2=m
CONFIG_DVB_USB_UMT_010=m
CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
CONFIG_SMS_USB_DRV=m

#
# Webcam, TV (analog/digital) USB devices
#
CONFIG_VIDEO_EM28XX=m
CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_EM28XX_ALSA=m
CONFIG_VIDEO_EM28XX_DVB=m
CONFIG_VIDEO_EM28XX_RC=m

#
# Software defined radio USB devices
#
CONFIG_USB_AIRSPY=m
CONFIG_USB_HACKRF=m
CONFIG_USB_MSI2500=m
CONFIG_RADIO_ADAPTERS=m
CONFIG_RADIO_SAA7706H=m
CONFIG_RADIO_SHARK=m
CONFIG_RADIO_SHARK2=m
CONFIG_RADIO_SI4713=m
CONFIG_RADIO_SI476X=m
CONFIG_RADIO_TEA575X=m
CONFIG_RADIO_TEA5764=m
CONFIG_RADIO_TEF6862=m
CONFIG_RADIO_WL1273=m
CONFIG_USB_DSBR=m
CONFIG_USB_KEENE=m
CONFIG_USB_MA901=m
CONFIG_USB_MR800=m
CONFIG_USB_RAREMONO=m
CONFIG_RADIO_SI470X=m
CONFIG_USB_SI470X=m
CONFIG_I2C_SI470X=m
CONFIG_USB_SI4713=m
CONFIG_PLATFORM_SI4713=m
CONFIG_I2C_SI4713=m
CONFIG_RADIO_WL128X=m
CONFIG_V4L_RADIO_ISA_DRIVERS=y
CONFIG_RADIO_AZTECH=m
CONFIG_RADIO_CADET=m
CONFIG_RADIO_GEMTEK=m
CONFIG_RADIO_ISA=m
CONFIG_RADIO_RTRACK=m
CONFIG_RADIO_RTRACK2=m
CONFIG_RADIO_SF16FMI=m
CONFIG_RADIO_SF16FMR2=m
CONFIG_RADIO_TERRATEC=m
CONFIG_RADIO_TRUST=m
CONFIG_RADIO_TYPHOON=m
CONFIG_RADIO_ZOLTRIX=m
CONFIG_MEDIA_PLATFORM_DRIVERS=y
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_SDR_PLATFORM_DRIVERS=y
CONFIG_DVB_PLATFORM_DRIVERS=y
CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m
CONFIG_VIDEO_MUX=m

#
# Allegro DVT media platform drivers
#
CONFIG_VIDEO_ALLEGRO_DVT=m

#
# Amlogic media platform drivers
#
CONFIG_VIDEO_MESON_GE2D=m

#
# Amphion drivers
#
CONFIG_VIDEO_AMPHION_VPU=m

#
# Aspeed media platform drivers
#
CONFIG_VIDEO_ASPEED=m

#
# Atmel media platform drivers
#
CONFIG_VIDEO_ATMEL_ISC=m
CONFIG_VIDEO_ATMEL_XISC=m
CONFIG_VIDEO_ATMEL_ISC_BASE=m
CONFIG_VIDEO_ATMEL_ISI=m
CONFIG_VIDEO_MICROCHIP_CSI2DC=m

#
# Cadence media platform drivers
#
CONFIG_VIDEO_CADENCE_CSI2RX=m
CONFIG_VIDEO_CADENCE_CSI2TX=m

#
# Chips&Media media platform drivers
#
CONFIG_VIDEO_CODA=m
CONFIG_VIDEO_IMX_VDOA=m

#
# Intel media platform drivers
#
CONFIG_VIDEO_PXA27x=m

#
# Marvell media platform drivers
#
CONFIG_VIDEO_MMP_CAMERA=m

#
# Mediatek media platform drivers
#
CONFIG_VIDEO_MEDIATEK_JPEG=m
CONFIG_VIDEO_MEDIATEK_MDP=m
CONFIG_VIDEO_MEDIATEK_VCODEC_SCP=y
CONFIG_VIDEO_MEDIATEK_VCODEC_VPU=y
CONFIG_VIDEO_MEDIATEK_VCODEC=m
CONFIG_VIDEO_MEDIATEK_VPU=m
CONFIG_VIDEO_MEDIATEK_MDP3=m

#
# NVidia media platform drivers
#
CONFIG_VIDEO_TEGRA_VDE=m

#
# NXP media platform drivers
#
CONFIG_VIDEO_IMX_MIPI_CSIS=m
CONFIG_VIDEO_IMX_PXP=m
CONFIG_VIDEO_MX2_EMMAPRP=m
CONFIG_VIDEO_DW100=m
CONFIG_VIDEO_IMX8_JPEG=m

#
# Qualcomm media platform drivers
#
CONFIG_VIDEO_QCOM_CAMSS=m
CONFIG_VIDEO_QCOM_VENUS=m

#
# Renesas media platform drivers
#
CONFIG_VIDEO_RENESAS_CEU=m
CONFIG_VIDEO_RCAR_ISP=m
CONFIG_VIDEO_SH_VOU=m
CONFIG_VIDEO_RCAR_CSI2=m
CONFIG_VIDEO_RCAR_VIN=m
CONFIG_VIDEO_RENESAS_FCP=m
CONFIG_VIDEO_RENESAS_FDP1=m
CONFIG_VIDEO_RENESAS_JPU=m
CONFIG_VIDEO_RENESAS_VSP1=m
CONFIG_VIDEO_RCAR_DRIF=m

#
# Rockchip media platform drivers
#
CONFIG_VIDEO_ROCKCHIP_RGA=m
CONFIG_VIDEO_ROCKCHIP_ISP1=m

#
# Samsung media platform drivers
#
CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC=m
CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS=m
CONFIG_VIDEO_EXYNOS4_IS_COMMON=m
CONFIG_VIDEO_S5P_FIMC=m
CONFIG_VIDEO_S5P_MIPI_CSIS=m
CONFIG_VIDEO_EXYNOS_FIMC_LITE=m
CONFIG_VIDEO_EXYNOS4_FIMC_IS=m
CONFIG_VIDEO_EXYNOS4_ISP_DMA_CAPTURE=y
CONFIG_VIDEO_SAMSUNG_S5P_G2D=m
CONFIG_VIDEO_SAMSUNG_S5P_JPEG=m
CONFIG_VIDEO_SAMSUNG_S5P_MFC=m

#
# STMicroelectronics media platform drivers
#
CONFIG_VIDEO_STI_BDISP=m
CONFIG_DVB_C8SECTPFE=m
CONFIG_VIDEO_STI_DELTA=m
CONFIG_VIDEO_STI_DELTA_MJPEG=y
CONFIG_VIDEO_STI_DELTA_DRIVER=m
CONFIG_VIDEO_STI_HVA=m
CONFIG_VIDEO_STI_HVA_DEBUGFS=y
CONFIG_VIDEO_STM32_DCMI=m
CONFIG_VIDEO_STM32_DMA2D=m

#
# Sunxi media platform drivers
#
CONFIG_VIDEO_SUN4I_CSI=m

#
# Texas Instruments drivers
#
CONFIG_VIDEO_TI_VPDMA=m
CONFIG_VIDEO_TI_SC=m
CONFIG_VIDEO_TI_CSC=m
CONFIG_VIDEO_TI_CAL=m
CONFIG_VIDEO_TI_CAL_MC=y
CONFIG_VIDEO_TI_VPE=m
CONFIG_VIDEO_TI_VPE_DEBUG=y
CONFIG_VIDEO_AM437X_VPFE=m
CONFIG_VIDEO_DAVINCI_VPIF_DISPLAY=m
CONFIG_VIDEO_DAVINCI_VPIF_CAPTURE=m
CONFIG_VIDEO_DAVINCI_VPBE_DISPLAY=m
CONFIG_VIDEO_OMAP2_VOUT_VRFB=y
CONFIG_VIDEO_OMAP2_VOUT=m
CONFIG_VIDEO_OMAP3=m
CONFIG_VIDEO_OMAP3_DEBUG=y

#
# Verisilicon media platform drivers
#
CONFIG_VIDEO_HANTRO=m
CONFIG_VIDEO_HANTRO_IMX8M=y
CONFIG_VIDEO_HANTRO_SAMA5D4=y
CONFIG_VIDEO_HANTRO_ROCKCHIP=y
CONFIG_VIDEO_HANTRO_SUNXI=y

#
# VIA media platform drivers
#

#
# Xilinx media platform drivers
#
CONFIG_VIDEO_XILINX=m
CONFIG_VIDEO_XILINX_CSI2RXSS=m
CONFIG_VIDEO_XILINX_TPG=m
CONFIG_VIDEO_XILINX_VTC=m

#
# MMC/SDIO DVB adapters
#
CONFIG_SMS_SDIO_DRV=m
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VIDEO_VIM2M=m
CONFIG_VIDEO_VICODEC=m
CONFIG_VIDEO_VIMC=m
CONFIG_VIDEO_VIVID=m
CONFIG_VIDEO_VIVID_CEC=y
CONFIG_VIDEO_VIVID_MAX_DEVS=64
CONFIG_DVB_TEST_DRIVERS=y
CONFIG_DVB_VIDTV=m

#
# FireWire (IEEE 1394) Adapters
#
CONFIG_DVB_FIREDTV=m
CONFIG_DVB_FIREDTV_INPUT=y
CONFIG_MEDIA_COMMON_OPTIONS=y

#
# common driver options
#
CONFIG_CYPRESS_FIRMWARE=m
CONFIG_TTPCI_EEPROM=m
CONFIG_VIDEO_CX2341X=m
CONFIG_VIDEO_TVEEPROM=m
CONFIG_DVB_B2C2_FLEXCOP=m
CONFIG_DVB_B2C2_FLEXCOP_DEBUG=y
CONFIG_SMS_SIANO_MDTV=m
CONFIG_SMS_SIANO_RC=y
CONFIG_SMS_SIANO_DEBUGFS=y
CONFIG_VIDEO_V4L2_TPG=m
CONFIG_VIDEOBUF2_CORE=m
CONFIG_VIDEOBUF2_V4L2=m
CONFIG_VIDEOBUF2_MEMOPS=m
CONFIG_VIDEOBUF2_DMA_CONTIG=m
CONFIG_VIDEOBUF2_VMALLOC=m
CONFIG_VIDEOBUF2_DMA_SG=m
# end of Media drivers

#
# Media ancillary drivers
#
CONFIG_MEDIA_ATTACH=y

#
# IR I2C driver auto-selected by 'Autoselect ancillary drivers'
#
CONFIG_VIDEO_IR_I2C=m

#
# Camera sensor devices
#
CONFIG_VIDEO_APTINA_PLL=m
CONFIG_VIDEO_CCS_PLL=m
CONFIG_VIDEO_AR0521=m
CONFIG_VIDEO_HI556=m
CONFIG_VIDEO_HI846=m
CONFIG_VIDEO_HI847=m
CONFIG_VIDEO_IMX208=m
CONFIG_VIDEO_IMX214=m
CONFIG_VIDEO_IMX219=m
CONFIG_VIDEO_IMX258=m
CONFIG_VIDEO_IMX274=m
CONFIG_VIDEO_IMX290=m
CONFIG_VIDEO_IMX319=m
CONFIG_VIDEO_IMX334=m
CONFIG_VIDEO_IMX335=m
CONFIG_VIDEO_IMX355=m
CONFIG_VIDEO_IMX412=m
CONFIG_VIDEO_MAX9271_LIB=m
CONFIG_VIDEO_MT9M001=m
CONFIG_VIDEO_MT9M032=m
CONFIG_VIDEO_MT9M111=m
CONFIG_VIDEO_MT9P031=m
CONFIG_VIDEO_MT9T001=m
CONFIG_VIDEO_MT9T112=m
CONFIG_VIDEO_MT9V011=m
CONFIG_VIDEO_MT9V032=m
CONFIG_VIDEO_MT9V111=m
CONFIG_VIDEO_NOON010PC30=m
CONFIG_VIDEO_OG01A1B=m
CONFIG_VIDEO_OV02A10=m
CONFIG_VIDEO_OV08D10=m
CONFIG_VIDEO_OV13858=m
CONFIG_VIDEO_OV13B10=m
CONFIG_VIDEO_OV2640=m
CONFIG_VIDEO_OV2659=m
CONFIG_VIDEO_OV2680=m
CONFIG_VIDEO_OV2685=m
CONFIG_VIDEO_OV2740=m
CONFIG_VIDEO_OV5640=m
CONFIG_VIDEO_OV5645=m
CONFIG_VIDEO_OV5647=m
CONFIG_VIDEO_OV5670=m
CONFIG_VIDEO_OV5675=m
CONFIG_VIDEO_OV5693=m
CONFIG_VIDEO_OV5695=m
CONFIG_VIDEO_OV6650=m
CONFIG_VIDEO_OV7251=m
CONFIG_VIDEO_OV7640=m
CONFIG_VIDEO_OV7670=m
CONFIG_VIDEO_OV772X=m
CONFIG_VIDEO_OV7740=m
CONFIG_VIDEO_OV8856=m
CONFIG_VIDEO_OV9282=m
CONFIG_VIDEO_OV9640=m
CONFIG_VIDEO_OV9650=m
CONFIG_VIDEO_OV9734=m
CONFIG_VIDEO_RDACM20=m
CONFIG_VIDEO_RDACM21=m
CONFIG_VIDEO_RJ54N1=m
CONFIG_VIDEO_S5C73M3=m
CONFIG_VIDEO_S5K4ECGX=m
CONFIG_VIDEO_S5K5BAF=m
CONFIG_VIDEO_S5K6A3=m
CONFIG_VIDEO_S5K6AA=m
CONFIG_VIDEO_SR030PC30=m
CONFIG_VIDEO_VS6624=m
CONFIG_VIDEO_CCS=m
CONFIG_VIDEO_ET8EK8=m
CONFIG_VIDEO_M5MOLS=m
# end of Camera sensor devices

#
# Lens drivers
#
CONFIG_VIDEO_AD5820=m
CONFIG_VIDEO_AK7375=m
CONFIG_VIDEO_DW9714=m
CONFIG_VIDEO_DW9768=m
CONFIG_VIDEO_DW9807_VCM=m
# end of Lens drivers

#
# Flash devices
#
CONFIG_VIDEO_ADP1653=m
CONFIG_VIDEO_LM3560=m
CONFIG_VIDEO_LM3646=m
# end of Flash devices

#
# Audio decoders, processors and mixers
#
CONFIG_VIDEO_CS3308=m
CONFIG_VIDEO_CS5345=m
CONFIG_VIDEO_CS53L32A=m
CONFIG_VIDEO_MSP3400=m
CONFIG_VIDEO_SONY_BTF_MPX=m
CONFIG_VIDEO_TDA1997X=m
CONFIG_VIDEO_TDA7432=m
CONFIG_VIDEO_TDA9840=m
CONFIG_VIDEO_TEA6415C=m
CONFIG_VIDEO_TEA6420=m
CONFIG_VIDEO_TLV320AIC23B=m
CONFIG_VIDEO_TVAUDIO=m
CONFIG_VIDEO_UDA1342=m
CONFIG_VIDEO_VP27SMPX=m
CONFIG_VIDEO_WM8739=m
CONFIG_VIDEO_WM8775=m
# end of Audio decoders, processors and mixers

#
# RDS decoders
#
CONFIG_VIDEO_SAA6588=m
# end of RDS decoders

#
# Video decoders
#
CONFIG_VIDEO_ADV7180=m
CONFIG_VIDEO_ADV7183=m
CONFIG_VIDEO_ADV748X=m
CONFIG_VIDEO_ADV7604=m
CONFIG_VIDEO_ADV7604_CEC=y
CONFIG_VIDEO_ADV7842=m
CONFIG_VIDEO_ADV7842_CEC=y
CONFIG_VIDEO_BT819=m
CONFIG_VIDEO_BT856=m
CONFIG_VIDEO_BT866=m
CONFIG_VIDEO_ISL7998X=m
CONFIG_VIDEO_KS0127=m
CONFIG_VIDEO_MAX9286=m
CONFIG_VIDEO_ML86V7667=m
CONFIG_VIDEO_SAA7110=m
CONFIG_VIDEO_SAA711X=m
CONFIG_VIDEO_TC358743=m
CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TVP514X=m
CONFIG_VIDEO_TVP5150=m
CONFIG_VIDEO_TVP7002=m
CONFIG_VIDEO_TW2804=m
CONFIG_VIDEO_TW9903=m
CONFIG_VIDEO_TW9906=m
CONFIG_VIDEO_TW9910=m
CONFIG_VIDEO_VPX3220=m

#
# Video and audio decoders
#
CONFIG_VIDEO_SAA717X=m
CONFIG_VIDEO_CX25840=m
# end of Video decoders

#
# Video encoders
#
CONFIG_VIDEO_AD9389B=m
CONFIG_VIDEO_ADV7170=m
CONFIG_VIDEO_ADV7175=m
CONFIG_VIDEO_ADV7343=m
CONFIG_VIDEO_ADV7393=m
CONFIG_VIDEO_ADV7511=m
CONFIG_VIDEO_ADV7511_CEC=y
CONFIG_VIDEO_AK881X=m
CONFIG_VIDEO_SAA7127=m
CONFIG_VIDEO_SAA7185=m
CONFIG_VIDEO_THS8200=m
# end of Video encoders

#
# Video improvement chips
#
CONFIG_VIDEO_UPD64031A=m
CONFIG_VIDEO_UPD64083=m
# end of Video improvement chips

#
# Audio/Video compression chips
#
CONFIG_VIDEO_SAA6752HS=m
# end of Audio/Video compression chips

#
# SDR tuner chips
#
CONFIG_SDR_MAX2175=m
# end of SDR tuner chips

#
# Miscellaneous helper chips
#
CONFIG_VIDEO_I2C=m
CONFIG_VIDEO_M52790=m
CONFIG_VIDEO_ST_MIPID02=m
CONFIG_VIDEO_THS7303=m
# end of Miscellaneous helper chips

#
# Media SPI Adapters
#
CONFIG_CXD2880_SPI_DRV=m
CONFIG_VIDEO_GS1662=m
# end of Media SPI Adapters

CONFIG_MEDIA_TUNER=m

#
# Customize TV tuners
#
CONFIG_MEDIA_TUNER_E4000=m
CONFIG_MEDIA_TUNER_FC0011=m
CONFIG_MEDIA_TUNER_FC0012=m
CONFIG_MEDIA_TUNER_FC0013=m
CONFIG_MEDIA_TUNER_FC2580=m
CONFIG_MEDIA_TUNER_IT913X=m
CONFIG_MEDIA_TUNER_M88RS6000T=m
CONFIG_MEDIA_TUNER_MAX2165=m
CONFIG_MEDIA_TUNER_MC44S803=m
CONFIG_MEDIA_TUNER_MSI001=m
CONFIG_MEDIA_TUNER_MT2060=m
CONFIG_MEDIA_TUNER_MT2063=m
CONFIG_MEDIA_TUNER_MT20XX=m
CONFIG_MEDIA_TUNER_MT2131=m
CONFIG_MEDIA_TUNER_MT2266=m
CONFIG_MEDIA_TUNER_MXL301RF=m
CONFIG_MEDIA_TUNER_MXL5005S=m
CONFIG_MEDIA_TUNER_MXL5007T=m
CONFIG_MEDIA_TUNER_QM1D1B0004=m
CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_QT1010=m
CONFIG_MEDIA_TUNER_R820T=m
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_TUNER_SIMPLE=m
CONFIG_MEDIA_TUNER_TDA18212=m
CONFIG_MEDIA_TUNER_TDA18218=m
CONFIG_MEDIA_TUNER_TDA18250=m
CONFIG_MEDIA_TUNER_TDA18271=m
CONFIG_MEDIA_TUNER_TDA827X=m
CONFIG_MEDIA_TUNER_TDA8290=m
CONFIG_MEDIA_TUNER_TDA9887=m
CONFIG_MEDIA_TUNER_TEA5761=m
CONFIG_MEDIA_TUNER_TEA5767=m
CONFIG_MEDIA_TUNER_TUA9001=m
CONFIG_MEDIA_TUNER_XC2028=m
CONFIG_MEDIA_TUNER_XC4000=m
CONFIG_MEDIA_TUNER_XC5000=m
# end of Customize TV tuners

#
# Customise DVB Frontends
#

#
# Multistandard (satellite) frontends
#
CONFIG_DVB_M88DS3103=m
CONFIG_DVB_MXL5XX=m
CONFIG_DVB_STB0899=m
CONFIG_DVB_STB6100=m
CONFIG_DVB_STV090x=m
CONFIG_DVB_STV0910=m
CONFIG_DVB_STV6110x=m
CONFIG_DVB_STV6111=m

#
# Multistandard (cable + terrestrial) frontends
#
CONFIG_DVB_DRXK=m
CONFIG_DVB_MN88472=m
CONFIG_DVB_MN88473=m
CONFIG_DVB_SI2165=m
CONFIG_DVB_TDA18271C2DD=m

#
# DVB-S (satellite) frontends
#
CONFIG_DVB_CX24110=m
CONFIG_DVB_CX24116=m
CONFIG_DVB_CX24117=m
CONFIG_DVB_CX24120=m
CONFIG_DVB_CX24123=m
CONFIG_DVB_DS3000=m
CONFIG_DVB_MB86A16=m
CONFIG_DVB_MT312=m
CONFIG_DVB_S5H1420=m
CONFIG_DVB_SI21XX=m
CONFIG_DVB_STB6000=m
CONFIG_DVB_STV0288=m
CONFIG_DVB_STV0299=m
CONFIG_DVB_STV0900=m
CONFIG_DVB_STV6110=m
CONFIG_DVB_TDA10071=m
CONFIG_DVB_TDA10086=m
CONFIG_DVB_TDA8083=m
CONFIG_DVB_TDA8261=m
CONFIG_DVB_TDA826X=m
CONFIG_DVB_TS2020=m
CONFIG_DVB_TUA6100=m
CONFIG_DVB_TUNER_CX24113=m
CONFIG_DVB_TUNER_ITD1000=m
CONFIG_DVB_VES1X93=m
CONFIG_DVB_ZL10036=m
CONFIG_DVB_ZL10039=m

#
# DVB-T (terrestrial) frontends
#
CONFIG_DVB_AF9013=m
CONFIG_DVB_AS102_FE=m
CONFIG_DVB_CX22700=m
CONFIG_DVB_CX22702=m
CONFIG_DVB_CXD2820R=m
CONFIG_DVB_CXD2841ER=m
CONFIG_DVB_DIB3000MB=m
CONFIG_DVB_DIB3000MC=m
CONFIG_DVB_DIB7000M=m
CONFIG_DVB_DIB7000P=m
CONFIG_DVB_DIB9000=m
CONFIG_DVB_DRXD=m
CONFIG_DVB_EC100=m
CONFIG_DVB_GP8PSK_FE=m
CONFIG_DVB_L64781=m
CONFIG_DVB_MT352=m
CONFIG_DVB_NXT6000=m
CONFIG_DVB_RTL2830=m
CONFIG_DVB_RTL2832=m
CONFIG_DVB_RTL2832_SDR=m
CONFIG_DVB_S5H1432=m
CONFIG_DVB_SI2168=m
CONFIG_DVB_SP887X=m
CONFIG_DVB_STV0367=m
CONFIG_DVB_TDA10048=m
CONFIG_DVB_TDA1004X=m
CONFIG_DVB_ZD1301_DEMOD=m
CONFIG_DVB_ZL10353=m
CONFIG_DVB_CXD2880=m

#
# DVB-C (cable) frontends
#
CONFIG_DVB_STV0297=m
CONFIG_DVB_TDA10021=m
CONFIG_DVB_TDA10023=m
CONFIG_DVB_VES1820=m

#
# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
#
CONFIG_DVB_AU8522=m
CONFIG_DVB_AU8522_DTV=m
CONFIG_DVB_AU8522_V4L=m
CONFIG_DVB_BCM3510=m
CONFIG_DVB_LG2160=m
CONFIG_DVB_LGDT3305=m
CONFIG_DVB_LGDT3306A=m
CONFIG_DVB_LGDT330X=m
CONFIG_DVB_MXL692=m
CONFIG_DVB_NXT200X=m
CONFIG_DVB_OR51132=m
CONFIG_DVB_OR51211=m
CONFIG_DVB_S5H1409=m
CONFIG_DVB_S5H1411=m

#
# ISDB-T (terrestrial) frontends
#
CONFIG_DVB_DIB8000=m
CONFIG_DVB_MB86A20S=m
CONFIG_DVB_S921=m

#
# ISDB-S (satellite) & ISDB-T (terrestrial) frontends
#
CONFIG_DVB_MN88443X=m
CONFIG_DVB_TC90522=m

#
# Digital terrestrial only tuners/PLL
#
CONFIG_DVB_PLL=m
CONFIG_DVB_TUNER_DIB0070=m
CONFIG_DVB_TUNER_DIB0090=m

#
# SEC control devices for DVB-S
#
CONFIG_DVB_A8293=m
CONFIG_DVB_AF9033=m
CONFIG_DVB_ASCOT2E=m
CONFIG_DVB_ATBM8830=m
CONFIG_DVB_HELENE=m
CONFIG_DVB_HORUS3A=m
CONFIG_DVB_ISL6405=m
CONFIG_DVB_ISL6421=m
CONFIG_DVB_ISL6423=m
CONFIG_DVB_IX2505V=m
CONFIG_DVB_LGS8GL5=m
CONFIG_DVB_LGS8GXX=m
CONFIG_DVB_LNBH25=m
CONFIG_DVB_LNBH29=m
CONFIG_DVB_LNBP21=m
CONFIG_DVB_LNBP22=m
CONFIG_DVB_M88RS2000=m
CONFIG_DVB_TDA665x=m
CONFIG_DVB_DRX39XYJ=m

#
# Common Interface (EN50221) controller drivers
#
CONFIG_DVB_CXD2099=m
CONFIG_DVB_SP2=m
# end of Customise DVB Frontends

#
# Tools to develop new frontends
#
CONFIG_DVB_DUMMY_FE=m
# end of Media ancillary drivers

#
# Graphics support
#
CONFIG_APERTURE_HELPERS=y
CONFIG_IMX_IPUV3_CORE=m
CONFIG_DRM=m
CONFIG_DRM_MIPI_DBI=m
CONFIG_DRM_MIPI_DSI=y
CONFIG_DRM_KUNIT_TEST=m
CONFIG_DRM_KMS_HELPER=m
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100
CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM=y
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_DP_AUX_BUS=m
CONFIG_DRM_DISPLAY_HELPER=m
CONFIG_DRM_DISPLAY_DP_HELPER=y
CONFIG_DRM_DISPLAY_HDCP_HELPER=y
CONFIG_DRM_DISPLAY_HDMI_HELPER=y
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
CONFIG_DRM_BUDDY=m
CONFIG_DRM_GEM_DMA_HELPER=m
CONFIG_DRM_GEM_SHMEM_HELPER=m
CONFIG_DRM_SCHED=m

#
# I2C encoder or helper chips
#
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_SIL164=m
CONFIG_DRM_I2C_NXP_TDA998X=m
CONFIG_DRM_I2C_NXP_TDA9950=m
# end of I2C encoder or helper chips

#
# ARM devices
#
CONFIG_DRM_HDLCD=m
CONFIG_DRM_HDLCD_SHOW_UNDERRUN=y
CONFIG_DRM_MALI_DISPLAY=m
CONFIG_DRM_KOMEDA=m
# end of ARM devices

CONFIG_DRM_KMB_DISPLAY=m
CONFIG_DRM_VGEM=m
CONFIG_DRM_VKMS=m
CONFIG_DRM_EXYNOS=m

#
# CRTCs
#
CONFIG_DRM_EXYNOS_FIMD=y
CONFIG_DRM_EXYNOS5433_DECON=y
CONFIG_DRM_EXYNOS7_DECON=y
CONFIG_DRM_EXYNOS_MIXER=y
CONFIG_DRM_EXYNOS_VIDI=y

#
# Encoders and Bridges
#
CONFIG_DRM_EXYNOS_DPI=y
CONFIG_DRM_EXYNOS_DSI=y
CONFIG_DRM_EXYNOS_DP=y
CONFIG_DRM_EXYNOS_HDMI=y
CONFIG_DRM_EXYNOS_MIC=y

#
# Sub-drivers
#
CONFIG_DRM_EXYNOS_G2D=y
CONFIG_DRM_EXYNOS_IPP=y
CONFIG_DRM_EXYNOS_FIMC=y
CONFIG_DRM_EXYNOS_ROTATOR=y
CONFIG_DRM_EXYNOS_SCALER=y
CONFIG_DRM_EXYNOS_GSC=y
CONFIG_DRM_ROCKCHIP=m
CONFIG_ROCKCHIP_VOP=y
CONFIG_ROCKCHIP_VOP2=y
CONFIG_ROCKCHIP_ANALOGIX_DP=y
CONFIG_ROCKCHIP_CDN_DP=y
CONFIG_ROCKCHIP_DW_HDMI=y
CONFIG_ROCKCHIP_DW_MIPI_DSI=y
CONFIG_ROCKCHIP_INNO_HDMI=y
CONFIG_ROCKCHIP_LVDS=y
CONFIG_ROCKCHIP_RGB=y
CONFIG_ROCKCHIP_RK3066_HDMI=y
CONFIG_DRM_UDL=m
CONFIG_DRM_RCAR_DW_HDMI=m
CONFIG_DRM_RCAR_USE_LVDS=y
CONFIG_DRM_RCAR_USE_MIPI_DSI=y
CONFIG_DRM_SUN4I=m
CONFIG_DRM_SUN4I_HDMI=m
CONFIG_DRM_SUN4I_HDMI_CEC=y
CONFIG_DRM_SUN4I_BACKEND=m
CONFIG_DRM_SUN6I_DSI=m
CONFIG_DRM_SUN8I_DW_HDMI=m
CONFIG_DRM_SUN8I_MIXER=m
CONFIG_DRM_SUN8I_TCON_TOP=m
CONFIG_DRM_VIRTIO_GPU=m
CONFIG_DRM_MSM=m
CONFIG_DRM_MSM_GPU_STATE=y
CONFIG_DRM_MSM_GPU_SUDO=y
CONFIG_DRM_MSM_MDSS=y
CONFIG_DRM_MSM_MDP4=y
CONFIG_DRM_MSM_MDP5=y
CONFIG_DRM_MSM_DPU=y
CONFIG_DRM_MSM_DP=y
CONFIG_DRM_MSM_DSI=y
CONFIG_DRM_MSM_DSI_28NM_PHY=y
CONFIG_DRM_MSM_DSI_20NM_PHY=y
CONFIG_DRM_MSM_DSI_28NM_8960_PHY=y
CONFIG_DRM_MSM_DSI_14NM_PHY=y
CONFIG_DRM_MSM_DSI_10NM_PHY=y
CONFIG_DRM_MSM_DSI_7NM_PHY=y
CONFIG_DRM_MSM_HDMI=y
CONFIG_DRM_MSM_HDMI_HDCP=y
CONFIG_DRM_PANEL=y

#
# Display Panels
#
CONFIG_DRM_PANEL_ABT_Y030XX067A=m
CONFIG_DRM_PANEL_ARM_VERSATILE=m
CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596=m
CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0=m
CONFIG_DRM_PANEL_BOE_HIMAX8279D=m
CONFIG_DRM_PANEL_BOE_TV101WUM_NL6=m
CONFIG_DRM_PANEL_DSI_CM=m
CONFIG_DRM_PANEL_LVDS=m
CONFIG_DRM_PANEL_EBBG_FT8719=m
CONFIG_DRM_PANEL_ELIDA_KD35T133=m
CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02=m
CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
CONFIG_DRM_PANEL_ILITEK_IL9322=m
CONFIG_DRM_PANEL_ILITEK_ILI9341=m
CONFIG_DRM_PANEL_ILITEK_ILI9881C=m
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=m
CONFIG_DRM_PANEL_INNOLUX_P079ZCA=m
CONFIG_DRM_PANEL_JDI_LT070ME05000=m
CONFIG_DRM_PANEL_JDI_R63452=m
CONFIG_DRM_PANEL_KHADAS_TS050=m
CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04=m
CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W=m
CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829=m
CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
CONFIG_DRM_PANEL_LG_LB035Q02=m
CONFIG_DRM_PANEL_LG_LG4573=m
CONFIG_DRM_PANEL_NEC_NL8048HL11=m
CONFIG_DRM_PANEL_NEWVISION_NV3052C=m
CONFIG_DRM_PANEL_NOVATEK_NT35510=m
CONFIG_DRM_PANEL_NOVATEK_NT35560=m
CONFIG_DRM_PANEL_NOVATEK_NT35950=m
CONFIG_DRM_PANEL_NOVATEK_NT36672A=m
CONFIG_DRM_PANEL_NOVATEK_NT39016=m
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO=m
CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS=m
CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=m
CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
CONFIG_DRM_PANEL_RAYDIUM_RM67191=m
CONFIG_DRM_PANEL_RAYDIUM_RM68200=m
CONFIG_DRM_PANEL_RONBO_RB070D30=m
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
CONFIG_DRM_PANEL_SAMSUNG_S6D16D0=m
CONFIG_DRM_PANEL_SAMSUNG_S6D27A1=m
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0=m
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_SPI=m
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_DSI=m
CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01=m
CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m
CONFIG_DRM_PANEL_SAMSUNG_SOFEF00=m
CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m
CONFIG_DRM_PANEL_SHARP_LS037V7DW01=m
CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m
CONFIG_DRM_PANEL_SHARP_LS060T1SX01=m
CONFIG_DRM_PANEL_SITRONIX_ST7701=m
CONFIG_DRM_PANEL_SITRONIX_ST7703=m
CONFIG_DRM_PANEL_SITRONIX_ST7789V=m
CONFIG_DRM_PANEL_SONY_ACX565AKM=m
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=m
CONFIG_DRM_PANEL_TDO_TL070WSH30=m
CONFIG_DRM_PANEL_TPO_TD028TTEC1=m
CONFIG_DRM_PANEL_TPO_TD043MTEA1=m
CONFIG_DRM_PANEL_TPO_TPG110=m
CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m
CONFIG_DRM_PANEL_VISIONOX_RM69299=m
CONFIG_DRM_PANEL_WIDECHIPS_WS2401=m
CONFIG_DRM_PANEL_XINPENG_XPP055C272=m
# end of Display Panels

CONFIG_DRM_BRIDGE=y
CONFIG_DRM_PANEL_BRIDGE=y

#
# Display Interface Bridges
#
CONFIG_DRM_CDNS_DSI=m
CONFIG_DRM_CHIPONE_ICN6211=m
CONFIG_DRM_CHRONTEL_CH7033=m
CONFIG_DRM_CROS_EC_ANX7688=m
CONFIG_DRM_DISPLAY_CONNECTOR=m
CONFIG_DRM_FSL_LDB=m
CONFIG_DRM_ITE_IT6505=m
CONFIG_DRM_LONTIUM_LT8912B=m
CONFIG_DRM_LONTIUM_LT9211=m
CONFIG_DRM_LONTIUM_LT9611=m
CONFIG_DRM_LONTIUM_LT9611UXC=m
CONFIG_DRM_ITE_IT66121=m
CONFIG_DRM_LVDS_CODEC=m
CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW=m
CONFIG_DRM_NWL_MIPI_DSI=m
CONFIG_DRM_NXP_PTN3460=m
CONFIG_DRM_PARADE_PS8622=m
CONFIG_DRM_PARADE_PS8640=m
CONFIG_DRM_SIL_SII8620=m
CONFIG_DRM_SII902X=m
CONFIG_DRM_SII9234=m
CONFIG_DRM_SIMPLE_BRIDGE=m
CONFIG_DRM_THINE_THC63LVD1024=m
CONFIG_DRM_TOSHIBA_TC358762=m
CONFIG_DRM_TOSHIBA_TC358764=m
CONFIG_DRM_TOSHIBA_TC358767=m
CONFIG_DRM_TOSHIBA_TC358768=m
CONFIG_DRM_TOSHIBA_TC358775=m
CONFIG_DRM_TI_DLPC3433=m
CONFIG_DRM_TI_TFP410=m
CONFIG_DRM_TI_SN65DSI83=m
CONFIG_DRM_TI_SN65DSI86=m
CONFIG_DRM_TI_TPD12S015=m
CONFIG_DRM_ANALOGIX_ANX6345=m
CONFIG_DRM_ANALOGIX_ANX78XX=m
CONFIG_DRM_ANALOGIX_DP=m
CONFIG_DRM_ANALOGIX_ANX7625=m
CONFIG_DRM_I2C_ADV7511=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
CONFIG_DRM_I2C_ADV7511_CEC=y
CONFIG_DRM_CDNS_MHDP8546=m
CONFIG_DRM_CDNS_MHDP8546_J721E=y
CONFIG_DRM_IMX8QM_LDB=m
CONFIG_DRM_IMX8QXP_LDB=m
CONFIG_DRM_IMX8QXP_PIXEL_COMBINER=m
CONFIG_DRM_IMX8QXP_PIXEL_LINK=m
CONFIG_DRM_IMX8QXP_PIXEL_LINK_TO_DPI=m
CONFIG_DRM_DW_HDMI=m
CONFIG_DRM_DW_HDMI_AHB_AUDIO=m
CONFIG_DRM_DW_HDMI_I2S_AUDIO=m
CONFIG_DRM_DW_HDMI_GP_AUDIO=m
CONFIG_DRM_DW_HDMI_CEC=m
CONFIG_DRM_DW_MIPI_DSI=m
# end of Display Interface Bridges

CONFIG_DRM_IMX=m
CONFIG_DRM_IMX_PARALLEL_DISPLAY=m
CONFIG_DRM_IMX_TVE=m
CONFIG_DRM_IMX_LDB=m
CONFIG_DRM_IMX_HDMI=m
CONFIG_DRM_INGENIC=m
CONFIG_DRM_INGENIC_IPU=y
CONFIG_DRM_V3D=m
CONFIG_DRM_ETNAVIV=m
CONFIG_DRM_ETNAVIV_THERMAL=y
CONFIG_DRM_LOGICVC=m
CONFIG_DRM_MXS=y
CONFIG_DRM_MXSFB=m
CONFIG_DRM_IMX_LCDIF=m
CONFIG_DRM_ARCPGU=m
CONFIG_DRM_GM12U320=m
CONFIG_DRM_PANEL_MIPI_DBI=m
CONFIG_DRM_SIMPLEDRM=m
CONFIG_TINYDRM_HX8357D=m
CONFIG_TINYDRM_ILI9163=m
CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_ILI9341=m
CONFIG_TINYDRM_ILI9486=m
CONFIG_TINYDRM_MI0283QT=m
CONFIG_TINYDRM_REPAPER=m
CONFIG_TINYDRM_ST7586=m
CONFIG_TINYDRM_ST7735R=m
CONFIG_DRM_PL111=m
CONFIG_DRM_TVE200=m
CONFIG_DRM_LIMA=m
CONFIG_DRM_ASPEED_GFX=m
CONFIG_DRM_MCDE=m
CONFIG_DRM_TIDSS=m
CONFIG_DRM_ZYNQMP_DPSUB=m
CONFIG_DRM_GUD=m
CONFIG_DRM_SSD130X=m
CONFIG_DRM_SSD130X_I2C=m
CONFIG_DRM_SSD130X_SPI=m
CONFIG_DRM_SPRD=m
CONFIG_DRM_LEGACY=y
CONFIG_DRM_EXPORT_FOR_TESTS=y
CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=m
CONFIG_DRM_NOMODESET=y
CONFIG_DRM_LIB_RANDOM=y

#
# Frame buffer Devices
#
CONFIG_FB_CMDLINE=y
CONFIG_FB_NOTIFY=y
CONFIG_FB=m
CONFIG_FIRMWARE_EDID=y
CONFIG_FB_CFB_FILLRECT=m
CONFIG_FB_CFB_COPYAREA=m
CONFIG_FB_CFB_IMAGEBLIT=m
CONFIG_FB_CFB_REV_PIXELS_IN_BYTE=y
CONFIG_FB_SYS_FILLRECT=m
CONFIG_FB_SYS_COPYAREA=m
CONFIG_FB_SYS_IMAGEBLIT=m
CONFIG_FB_FOREIGN_ENDIAN=y
CONFIG_FB_BOTH_ENDIAN=y
# CONFIG_FB_BIG_ENDIAN is not set
# CONFIG_FB_LITTLE_ENDIAN is not set
CONFIG_FB_SYS_FOPS=m
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_BACKLIGHT=m
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y

#
# Frame buffer hardware drivers
#
CONFIG_FB_CIRRUS=m
CONFIG_FB_CLPS711X=m
CONFIG_FB_IMX=m
CONFIG_FB_AMIGA=m
CONFIG_FB_AMIGA_OCS=y
CONFIG_FB_AMIGA_ECS=y
CONFIG_FB_AMIGA_AGA=y
CONFIG_FB_ARC=m
CONFIG_FB_UVESA=m
CONFIG_FB_PVR2=m
CONFIG_FB_OPENCORES=m
CONFIG_FB_S1D13XXX=m
CONFIG_FB_ATMEL=m
CONFIG_FB_ATY=m
CONFIG_FB_ATY_GX=y
CONFIG_FB_ATY_BACKLIGHT=y
CONFIG_FB_PXA168=m
CONFIG_FB_W100=m
CONFIG_FB_SH_MOBILE_LCDC=m
CONFIG_FB_TMIO=m
CONFIG_FB_TMIO_ACCELL=y
CONFIG_FB_S3C=m
CONFIG_FB_S3C_DEBUG_REGWRITE=y
CONFIG_FB_SM501=m
CONFIG_FB_SMSCUFX=m
CONFIG_FB_UDL=m
CONFIG_FB_IBM_GXT4500=m
CONFIG_FB_GOLDFISH=m
CONFIG_FB_DA8XX=m
CONFIG_FB_VIRTUAL=m
CONFIG_FB_METRONOME=m
CONFIG_FB_BROADSHEET=m
CONFIG_FB_SIMPLE=m
CONFIG_FB_SSD1307=m
CONFIG_FB_OMAP2=m
CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
CONFIG_FB_OMAP2_NUM_FBS=3
CONFIG_FB_OMAP2_DSS_INIT=y
CONFIG_FB_OMAP2_DSS=m
CONFIG_FB_OMAP2_DSS_DEBUG=y
CONFIG_FB_OMAP2_DSS_DEBUGFS=y
CONFIG_FB_OMAP2_DSS_COLLECT_IRQ_STATS=y
CONFIG_FB_OMAP2_DSS_DPI=y
CONFIG_FB_OMAP2_DSS_VENC=y
CONFIG_FB_OMAP2_DSS_HDMI_COMMON=y
CONFIG_FB_OMAP4_DSS_HDMI=y
CONFIG_FB_OMAP5_DSS_HDMI=y
CONFIG_FB_OMAP2_DSS_SDI=y
CONFIG_FB_OMAP2_DSS_DSI=y
CONFIG_FB_OMAP2_DSS_MIN_FCK_PER_PCK=0
CONFIG_FB_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y

#
# OMAPFB Panel and Encoder Drivers
#
CONFIG_FB_OMAP2_ENCODER_OPA362=m
CONFIG_FB_OMAP2_ENCODER_TFP410=m
CONFIG_FB_OMAP2_ENCODER_TPD12S015=m
CONFIG_FB_OMAP2_CONNECTOR_DVI=m
CONFIG_FB_OMAP2_CONNECTOR_HDMI=m
CONFIG_FB_OMAP2_CONNECTOR_ANALOG_TV=m
CONFIG_FB_OMAP2_PANEL_DPI=m
CONFIG_FB_OMAP2_PANEL_LGPHILIPS_LB035Q02=m
# end of OMAPFB Panel and Encoder Drivers

CONFIG_MMP_DISP=m
CONFIG_MMP_DISP_CONTROLLER=y
CONFIG_MMP_DISP_SPI=y
CONFIG_MMP_PANEL_TPOHVGA=y
CONFIG_MMP_FB=m
# end of Frame buffer Devices

#
# Backlight & LCD device support
#
CONFIG_LCD_CLASS_DEVICE=m
CONFIG_LCD_L4F00242T03=m
CONFIG_LCD_LMS283GF05=m
CONFIG_LCD_LTV350QV=m
CONFIG_LCD_ILI922X=m
CONFIG_LCD_ILI9320=m
CONFIG_LCD_TDO24M=m
CONFIG_LCD_VGG2432A4=m
CONFIG_LCD_PLATFORM=m
CONFIG_LCD_AMS369FG06=m
CONFIG_LCD_LMS501KF03=m
CONFIG_LCD_HX8357=m
CONFIG_LCD_OTM3225A=m
CONFIG_BACKLIGHT_CLASS_DEVICE=m
CONFIG_BACKLIGHT_ATMEL_LCDC=y
CONFIG_BACKLIGHT_KTD253=m
CONFIG_BACKLIGHT_LM3533=m
CONFIG_BACKLIGHT_OMAP1=m
CONFIG_BACKLIGHT_PWM=m
CONFIG_BACKLIGHT_DA9052=m
CONFIG_BACKLIGHT_MT6370=m
CONFIG_BACKLIGHT_QCOM_WLED=m
CONFIG_BACKLIGHT_RT4831=m
CONFIG_BACKLIGHT_WM831X=m
CONFIG_BACKLIGHT_ADP8860=m
CONFIG_BACKLIGHT_ADP8870=m
CONFIG_BACKLIGHT_PCF50633=m
CONFIG_BACKLIGHT_LM3630A=m
CONFIG_BACKLIGHT_LM3639=m
CONFIG_BACKLIGHT_LP855X=m
CONFIG_BACKLIGHT_SKY81452=m
CONFIG_BACKLIGHT_TPS65217=m
CONFIG_BACKLIGHT_GPIO=m
CONFIG_BACKLIGHT_LV5207LP=m
CONFIG_BACKLIGHT_BD6107=m
CONFIG_BACKLIGHT_ARCXCNN=m
CONFIG_BACKLIGHT_RAVE_SP=m
CONFIG_BACKLIGHT_LED=m
# end of Backlight & LCD device support

CONFIG_VIDEOMODE_HELPERS=y
CONFIG_HDMI=y

#
# Console display driver support
#
CONFIG_DUMMY_CONSOLE=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
# end of Console display driver support

CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_LOGO_MAC_CLUT224=y
# end of Graphics support

CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE=y
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
CONFIG_DMASOUND_ATARI=m
CONFIG_DMASOUND_PAULA=m
CONFIG_DMASOUND_Q40=m
CONFIG_DMASOUND=m
CONFIG_SND=m
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
CONFIG_SND_PCM_ELD=y
CONFIG_SND_PCM_IEC958=y
CONFIG_SND_DMAENGINE_PCM=m
CONFIG_SND_HWDEP=m
CONFIG_SND_SEQ_DEVICE=m
CONFIG_SND_RAWMIDI=m
CONFIG_SND_COMPRESS_OFFLOAD=m
CONFIG_SND_JACK=y
CONFIG_SND_JACK_INPUT_DEV=y
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_PCM_TIMER=y
CONFIG_SND_HRTIMER=m
CONFIG_SND_DYNAMIC_MINORS=y
CONFIG_SND_MAX_CARDS=32
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_PROC_FS=y
CONFIG_SND_VERBOSE_PROCFS=y
CONFIG_SND_VERBOSE_PRINTK=y
CONFIG_SND_CTL_FAST_LOOKUP=y
CONFIG_SND_DEBUG=y
CONFIG_SND_DEBUG_VERBOSE=y
CONFIG_SND_PCM_XRUN_DEBUG=y
CONFIG_SND_CTL_INPUT_VALIDATION=y
CONFIG_SND_CTL_DEBUG=y
CONFIG_SND_JACK_INJECTION_DEBUG=y
CONFIG_SND_VMASTER=y
CONFIG_SND_CTL_LED=m
CONFIG_SND_SEQUENCER=m
CONFIG_SND_SEQ_DUMMY=m
CONFIG_SND_SEQUENCER_OSS=m
CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
CONFIG_SND_SEQ_MIDI_EVENT=m
CONFIG_SND_SEQ_MIDI=m
CONFIG_SND_SEQ_VIRMIDI=m
CONFIG_SND_MPU401_UART=m
CONFIG_SND_VX_LIB=m
CONFIG_SND_AC97_CODEC=m
CONFIG_SND_DRIVERS=y
CONFIG_SND_DUMMY=m
CONFIG_SND_ALOOP=m
CONFIG_SND_VIRMIDI=m
CONFIG_SND_MTPAV=m
CONFIG_SND_MTS64=m
CONFIG_SND_SERIAL_U16550=m
CONFIG_SND_SERIAL_GENERIC=m
CONFIG_SND_MPU401=m
CONFIG_SND_PORTMAN2X4=m
CONFIG_SND_AC97_POWER_SAVE=y
CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0

#
# HD-Audio
#
CONFIG_SND_HDA=m
CONFIG_SND_HDA_GENERIC_LEDS=y
CONFIG_SND_HDA_HWDEP=y
CONFIG_SND_HDA_RECONFIG=y
CONFIG_SND_HDA_INPUT_BEEP=y
CONFIG_SND_HDA_INPUT_BEEP_MODE=1
CONFIG_SND_HDA_PATCH_LOADER=y
CONFIG_SND_HDA_CODEC_REALTEK=m
CONFIG_SND_HDA_CODEC_ANALOG=m
CONFIG_SND_HDA_CODEC_SIGMATEL=m
CONFIG_SND_HDA_CODEC_VIA=m
CONFIG_SND_HDA_CODEC_HDMI=m
CONFIG_SND_HDA_CODEC_CIRRUS=m
CONFIG_SND_HDA_CODEC_CS8409=m
CONFIG_SND_HDA_CODEC_CONEXANT=m
CONFIG_SND_HDA_CODEC_CA0110=m
CONFIG_SND_HDA_CODEC_CA0132=m
CONFIG_SND_HDA_CODEC_CA0132_DSP=y
CONFIG_SND_HDA_CODEC_CMEDIA=m
CONFIG_SND_HDA_CODEC_SI3054=m
CONFIG_SND_HDA_GENERIC=m
# end of HD-Audio

CONFIG_SND_HDA_CORE=m
CONFIG_SND_HDA_DSP_LOADER=y
CONFIG_SND_HDA_EXT_CORE=m
CONFIG_SND_HDA_PREALLOC_SIZE=64
CONFIG_SND_INTEL_DSP_CONFIG=m
CONFIG_SND_PXA2XX_LIB=m
CONFIG_SND_SPI=y
CONFIG_SND_AT73C213=m
CONFIG_SND_AT73C213_TARGET_BITRATE=48000
CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=m
CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y
CONFIG_SND_USB_UA101=m
CONFIG_SND_USB_CAIAQ=m
CONFIG_SND_USB_CAIAQ_INPUT=y
CONFIG_SND_USB_US122L=m
CONFIG_SND_USB_6FIRE=m
CONFIG_SND_USB_HIFACE=m
CONFIG_SND_BCD2000=m
CONFIG_SND_USB_LINE6=m
CONFIG_SND_USB_POD=m
CONFIG_SND_USB_PODHD=m
CONFIG_SND_USB_TONEPORT=m
CONFIG_SND_USB_VARIAX=m
CONFIG_SND_FIREWIRE=y
CONFIG_SND_FIREWIRE_LIB=m
CONFIG_SND_DICE=m
CONFIG_SND_OXFW=m
CONFIG_SND_ISIGHT=m
CONFIG_SND_FIREWORKS=m
CONFIG_SND_BEBOB=m
CONFIG_SND_FIREWIRE_DIGI00X=m
CONFIG_SND_FIREWIRE_TASCAM=m
CONFIG_SND_FIREWIRE_MOTU=m
CONFIG_SND_FIREFACE=m
CONFIG_SND_PCMCIA=y
CONFIG_SND_VXPOCKET=m
CONFIG_SND_PDAUDIOCF=m
CONFIG_SND_SOC=m
CONFIG_SND_SOC_AC97_BUS=y
CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
CONFIG_SND_SOC_COMPRESS=y
CONFIG_SND_SOC_TOPOLOGY=y
CONFIG_SND_SOC_TOPOLOGY_KUNIT_TEST=m
CONFIG_SND_SOC_UTILS_KUNIT_TEST=m
CONFIG_SND_SOC_ADI=m
CONFIG_SND_SOC_ADI_AXI_I2S=m
CONFIG_SND_SOC_ADI_AXI_SPDIF=m
CONFIG_SND_SOC_AMD_ACP=m
CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
CONFIG_SND_AMD_ACP_CONFIG=m
CONFIG_SND_SOC_APPLE_MCA=m
CONFIG_SND_ATMEL_SOC=m
CONFIG_SND_ATMEL_SOC_PDC=y
CONFIG_SND_ATMEL_SOC_DMA=y
CONFIG_SND_ATMEL_SOC_SSC=m
CONFIG_SND_ATMEL_SOC_SSC_PDC=m
CONFIG_SND_ATMEL_SOC_SSC_DMA=m
CONFIG_SND_AT91_SOC_SAM9G20_WM8731=m
CONFIG_SND_ATMEL_SOC_WM8904=m
CONFIG_SND_AT91_SOC_SAM9X5_WM8731=m
CONFIG_SND_ATMEL_SOC_CLASSD=m
CONFIG_SND_ATMEL_SOC_PDMIC=m
CONFIG_SND_ATMEL_SOC_I2S=m
CONFIG_SND_SOC_MIKROE_PROTO=m
CONFIG_SND_MCHP_SOC_I2S_MCC=m
CONFIG_SND_MCHP_SOC_SPDIFTX=m
CONFIG_SND_MCHP_SOC_SPDIFRX=m
CONFIG_SND_MCHP_SOC_PDMC=m
CONFIG_SND_BCM2835_SOC_I2S=m
CONFIG_SND_SOC_CYGNUS=m
CONFIG_SND_BCM63XX_I2S_WHISTLER=m
CONFIG_SND_EP93XX_SOC=m
CONFIG_SND_DESIGNWARE_I2S=m
CONFIG_SND_DESIGNWARE_PCM=y

#
# SoC Audio for Freescale CPUs
#

#
# Common SoC Audio options for Freescale CPUs:
#
CONFIG_SND_SOC_FSL_ASRC=m
CONFIG_SND_SOC_FSL_SAI=m
CONFIG_SND_SOC_FSL_MQS=m
CONFIG_SND_SOC_FSL_AUDMIX=m
CONFIG_SND_SOC_FSL_SSI=m
CONFIG_SND_SOC_FSL_SPDIF=m
CONFIG_SND_SOC_FSL_ESAI=m
CONFIG_SND_SOC_FSL_MICFIL=m
CONFIG_SND_SOC_FSL_EASRC=m
CONFIG_SND_SOC_FSL_XCVR=m
CONFIG_SND_SOC_FSL_AUD2HTX=m
CONFIG_SND_SOC_FSL_UTILS=m
CONFIG_SND_SOC_FSL_RPMSG=m
CONFIG_SND_SOC_IMX_PCM_DMA=m
CONFIG_SND_SOC_IMX_AUDIO_RPMSG=m
CONFIG_SND_SOC_IMX_PCM_RPMSG=m
CONFIG_SND_SOC_IMX_AUDMUX=m
CONFIG_SND_IMX_SOC=m

#
# SoC Audio support for Freescale i.MX boards:
#
CONFIG_SND_SOC_IMX_ES8328=m
CONFIG_SND_SOC_IMX_SGTL5000=m
CONFIG_SND_SOC_IMX_SPDIF=m
CONFIG_SND_SOC_FSL_ASOC_CARD=m
CONFIG_SND_SOC_IMX_AUDMIX=m
CONFIG_SND_SOC_IMX_HDMI=m
CONFIG_SND_SOC_IMX_RPMSG=m
CONFIG_SND_SOC_IMX_CARD=m
# end of SoC Audio for Freescale CPUs

CONFIG_SND_I2S_HI6210_I2S=m
CONFIG_SND_JZ4740_SOC_I2S=m
CONFIG_SND_KIRKWOOD_SOC=m
CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB=m
CONFIG_SND_SOC_IMG=y
CONFIG_SND_SOC_IMG_I2S_IN=m
CONFIG_SND_SOC_IMG_I2S_OUT=m
CONFIG_SND_SOC_IMG_PARALLEL_OUT=m
CONFIG_SND_SOC_IMG_SPDIF_IN=m
CONFIG_SND_SOC_IMG_SPDIF_OUT=m
CONFIG_SND_SOC_IMG_PISTACHIO_INTERNAL_DAC=m
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
CONFIG_SND_SOC_ACPI_INTEL_MATCH=m
CONFIG_SND_SOC_INTEL_KEEMBAY=m
CONFIG_SND_SOC_INTEL_MACH=y
CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y
CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH=m
CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m
CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m
CONFIG_SND_SOC_MEDIATEK=m
CONFIG_SND_SOC_MT8186=m
CONFIG_SND_SOC_MT8186_MT6366_DA7219_MAX98357=m
CONFIG_SND_SOC_MT8186_MT6366_RT1019_RT5682S=m
CONFIG_SND_SOC_MTK_BTCVSD=m
CONFIG_SND_SOC_MT8195=m
CONFIG_SND_SOC_MT8195_MT6359=m

#
# ASoC support for Amlogic platforms
#
CONFIG_SND_MESON_AIU=m
CONFIG_SND_MESON_AXG_FIFO=m
CONFIG_SND_MESON_AXG_FRDDR=m
CONFIG_SND_MESON_AXG_TODDR=m
CONFIG_SND_MESON_AXG_TDM_FORMATTER=m
CONFIG_SND_MESON_AXG_TDM_INTERFACE=m
CONFIG_SND_MESON_AXG_TDMIN=m
CONFIG_SND_MESON_AXG_TDMOUT=m
CONFIG_SND_MESON_AXG_SOUND_CARD=m
CONFIG_SND_MESON_AXG_SPDIFOUT=m
CONFIG_SND_MESON_AXG_SPDIFIN=m
CONFIG_SND_MESON_AXG_PDM=m
CONFIG_SND_MESON_CARD_UTILS=m
CONFIG_SND_MESON_CODEC_GLUE=m
CONFIG_SND_MESON_GX_SOUND_CARD=m
CONFIG_SND_MESON_G12A_TOACODEC=m
CONFIG_SND_MESON_G12A_TOHDMITX=m
CONFIG_SND_SOC_MESON_T9015=m
# end of ASoC support for Amlogic platforms

CONFIG_SND_MXS_SOC=m
CONFIG_SND_SOC_MXS_SGTL5000=m
CONFIG_SND_PXA2XX_SOC=m
CONFIG_SND_SOC_QCOM=m
CONFIG_SND_SOC_LPASS_CPU=m
CONFIG_SND_SOC_LPASS_HDMI=m
CONFIG_SND_SOC_LPASS_PLATFORM=m
CONFIG_SND_SOC_LPASS_CDC_DMA=m
CONFIG_SND_SOC_LPASS_IPQ806X=m
CONFIG_SND_SOC_LPASS_APQ8016=m
CONFIG_SND_SOC_LPASS_SC7180=m
CONFIG_SND_SOC_LPASS_SC7280=m
CONFIG_SND_SOC_STORM=m
CONFIG_SND_SOC_APQ8016_SBC=m
CONFIG_SND_SOC_QCOM_COMMON=m
CONFIG_SND_SOC_QDSP6_COMMON=m
CONFIG_SND_SOC_QDSP6_CORE=m
CONFIG_SND_SOC_QDSP6_AFE=m
CONFIG_SND_SOC_QDSP6_AFE_DAI=m
CONFIG_SND_SOC_QDSP6_AFE_CLOCKS=m
CONFIG_SND_SOC_QDSP6_ADM=m
CONFIG_SND_SOC_QDSP6_ROUTING=m
CONFIG_SND_SOC_QDSP6_ASM=m
CONFIG_SND_SOC_QDSP6_ASM_DAI=m
CONFIG_SND_SOC_QDSP6_APM_DAI=m
CONFIG_SND_SOC_QDSP6_APM_LPASS_DAI=m
CONFIG_SND_SOC_QDSP6_APM=m
CONFIG_SND_SOC_QDSP6_PRM_LPASS_CLOCKS=m
CONFIG_SND_SOC_QDSP6_PRM=m
CONFIG_SND_SOC_QDSP6=m
CONFIG_SND_SOC_MSM8996=m
CONFIG_SND_SOC_SDM845=m
CONFIG_SND_SOC_SM8250=m
CONFIG_SND_SOC_SC8280XP=m
CONFIG_SND_SOC_SC7180=m
CONFIG_SND_SOC_SC7280=m
CONFIG_SND_SOC_ROCKCHIP=m
CONFIG_SND_SOC_ROCKCHIP_I2S=m
CONFIG_SND_SOC_ROCKCHIP_I2S_TDM=m
CONFIG_SND_SOC_ROCKCHIP_PDM=m
CONFIG_SND_SOC_ROCKCHIP_SPDIF=m
CONFIG_SND_SOC_ROCKCHIP_MAX98090=m
CONFIG_SND_SOC_ROCKCHIP_RT5645=m
CONFIG_SND_SOC_RK3288_HDMI_ANALOG=m
CONFIG_SND_SOC_RK3399_GRU_SOUND=m
CONFIG_SND_SOC_SAMSUNG=m
CONFIG_SND_S3C24XX_I2S=m
CONFIG_SND_SAMSUNG_PCM=m
CONFIG_SND_SAMSUNG_SPDIF=m
CONFIG_SND_SAMSUNG_I2S=m
CONFIG_SND_SOC_SAMSUNG_NEO1973_WM8753=m
CONFIG_SND_SOC_SAMSUNG_SMDK_WM8580=m
CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X=m
CONFIG_SND_SOC_SAMSUNG_SIMTEC=m
CONFIG_SND_SOC_SAMSUNG_SIMTEC_TLV320AIC23=m
CONFIG_SND_SOC_SAMSUNG_SIMTEC_HERMES=m
CONFIG_SND_SOC_SAMSUNG_H1940_UDA1380=m
CONFIG_SND_SOC_SAMSUNG_RX1950_UDA1380=m
CONFIG_SND_SOC_SMARTQ=m
CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF=m
CONFIG_SND_SOC_SPEYSIDE=m
CONFIG_SND_SOC_TOBERMORY=m
CONFIG_SND_SOC_BELLS=m
CONFIG_SND_SOC_LOWLAND=m
CONFIG_SND_SOC_LITTLEMILL=m
CONFIG_SND_SOC_SNOW=m
CONFIG_SND_SOC_ODROID=m
CONFIG_SND_SOC_ARNDALE=m
CONFIG_SND_SOC_SAMSUNG_TM2_WM5110=m
CONFIG_SND_SOC_SAMSUNG_ARIES_WM8994=m
CONFIG_SND_SOC_SAMSUNG_MIDAS_WM1811=m

#
# SoC Audio support for Renesas SoCs
#
CONFIG_SND_SOC_SH4_FSI=m
CONFIG_SND_SOC_RCAR=m
CONFIG_SND_SOC_RZ=m
# end of SoC Audio support for Renesas SoCs

CONFIG_SND_SOC_SOF_TOPLEVEL=y
CONFIG_SND_SOC_SOF_ACPI=m
CONFIG_SND_SOC_SOF_ACPI_DEV=m
CONFIG_SND_SOC_SOF_OF=m
CONFIG_SND_SOC_SOF_OF_DEV=m
CONFIG_SND_SOC_SOF_COMPRESS=y
CONFIG_SND_SOC_SOF_CLIENT=m
CONFIG_SND_SOC_SOF_DEVELOPER_SUPPORT=y
CONFIG_SND_SOC_SOF_FORCE_PROBE_WORKQUEUE=y
CONFIG_SND_SOC_SOF_NOCODEC=m
CONFIG_SND_SOC_SOF_NOCODEC_SUPPORT=y
CONFIG_SND_SOC_SOF_STRICT_ABI_CHECKS=y
CONFIG_SND_SOC_SOF_DEBUG=y
CONFIG_SND_SOC_SOF_FORCE_NOCODEC_MODE=y
CONFIG_SND_SOC_SOF_DEBUG_XRUN_STOP=y
CONFIG_SND_SOC_SOF_DEBUG_VERBOSE_IPC=y
CONFIG_SND_SOC_SOF_DEBUG_FORCE_IPC_POSITION=y
CONFIG_SND_SOC_SOF_DEBUG_ENABLE_DEBUGFS_CACHE=y
CONFIG_SND_SOC_SOF_DEBUG_ENABLE_FIRMWARE_TRACE=y
CONFIG_SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST=m
CONFIG_SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST_NUM=2
CONFIG_SND_SOC_SOF_DEBUG_IPC_MSG_INJECTOR=m
CONFIG_SND_SOC_SOF_DEBUG_RETAIN_DSP_CONTEXT=y
CONFIG_SND_SOC_SOF=m
CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE=y
CONFIG_SND_SOC_SOF_IPC3=y
CONFIG_SND_SOC_SOF_AMD_TOPLEVEL=m
CONFIG_SND_SOC_SOF_IMX_TOPLEVEL=y
CONFIG_SND_SOC_SOF_IMX_COMMON=m
CONFIG_SND_SOC_SOF_IMX8=m
CONFIG_SND_SOC_SOF_IMX8M=m
CONFIG_SND_SOC_SOF_IMX8ULP=m
CONFIG_SND_SOC_SOF_INTEL_TOPLEVEL=y
CONFIG_SND_SOC_SOF_INTEL_HIFI_EP_IPC=m
CONFIG_SND_SOC_SOF_INTEL_ATOM_HIFI_EP=m
CONFIG_SND_SOC_SOF_INTEL_COMMON=m
CONFIG_SND_SOC_SOF_BAYTRAIL=m
CONFIG_SND_SOC_SOF_BROADWELL=m
CONFIG_SND_SOC_SOF_MTK_TOPLEVEL=y
CONFIG_SND_SOC_SOF_MTK_COMMON=m
CONFIG_SND_SOC_SOF_MT8186=m
CONFIG_SND_SOC_SOF_MT8195=m
CONFIG_SND_SOC_SOF_XTENSA=m
CONFIG_SND_SOC_SPRD=m
CONFIG_SND_SOC_SPRD_MCDT=m
CONFIG_SND_SOC_STI=m

#
# STMicroelectronics STM32 SOC audio support
#
CONFIG_SND_SOC_STM32_SAI=m
CONFIG_SND_SOC_STM32_I2S=m
CONFIG_SND_SOC_STM32_SPDIFRX=m
CONFIG_SND_SOC_STM32_DFSDM=m
# end of STMicroelectronics STM32 SOC audio support

#
# Allwinner SoC Audio support
#
CONFIG_SND_SUN4I_CODEC=m
CONFIG_SND_SUN8I_CODEC=m
CONFIG_SND_SUN8I_CODEC_ANALOG=m
CONFIG_SND_SUN50I_CODEC_ANALOG=m
CONFIG_SND_SUN4I_I2S=m
CONFIG_SND_SUN4I_SPDIF=m
CONFIG_SND_SUN50I_DMIC=m
CONFIG_SND_SUN8I_ADDA_PR_REGMAP=m
# end of Allwinner SoC Audio support

CONFIG_SND_SOC_TEGRA=m
CONFIG_SND_SOC_TEGRA20_AC97=m
CONFIG_SND_SOC_TEGRA20_DAS=m
CONFIG_SND_SOC_TEGRA20_I2S=m
CONFIG_SND_SOC_TEGRA20_SPDIF=m
CONFIG_SND_SOC_TEGRA30_AHUB=m
CONFIG_SND_SOC_TEGRA30_I2S=m
CONFIG_SND_SOC_TEGRA210_AHUB=m
CONFIG_SND_SOC_TEGRA210_DMIC=m
CONFIG_SND_SOC_TEGRA210_I2S=m
CONFIG_SND_SOC_TEGRA210_OPE=m
CONFIG_SND_SOC_TEGRA186_ASRC=m
CONFIG_SND_SOC_TEGRA186_DSPK=m
CONFIG_SND_SOC_TEGRA210_ADMAIF=m
CONFIG_SND_SOC_TEGRA210_MVC=m
CONFIG_SND_SOC_TEGRA210_SFC=m
CONFIG_SND_SOC_TEGRA210_AMX=m
CONFIG_SND_SOC_TEGRA210_ADX=m
CONFIG_SND_SOC_TEGRA210_MIXER=m
CONFIG_SND_SOC_TEGRA_AUDIO_GRAPH_CARD=m
CONFIG_SND_SOC_TEGRA_MACHINE_DRV=m
CONFIG_SND_SOC_TEGRA_RT5640=m
CONFIG_SND_SOC_TEGRA_WM8753=m
CONFIG_SND_SOC_TEGRA_WM8903=m
CONFIG_SND_SOC_TEGRA_WM9712=m
CONFIG_SND_SOC_TEGRA_TRIMSLICE=m
CONFIG_SND_SOC_TEGRA_ALC5632=m
CONFIG_SND_SOC_TEGRA_MAX98090=m
CONFIG_SND_SOC_TEGRA_RT5677=m
CONFIG_SND_SOC_TEGRA_SGTL5000=m

#
# Audio support for Texas Instruments SoCs
#
CONFIG_SND_SOC_TI_EDMA_PCM=m
CONFIG_SND_SOC_TI_SDMA_PCM=m
CONFIG_SND_SOC_TI_UDMA_PCM=m

#
# Texas Instruments DAI support for:
#
CONFIG_SND_SOC_DAVINCI_ASP=m
CONFIG_SND_SOC_DAVINCI_MCASP=m
CONFIG_SND_SOC_DAVINCI_VCIF=m
CONFIG_SND_SOC_OMAP_DMIC=m
CONFIG_SND_SOC_OMAP_MCBSP=m
CONFIG_SND_SOC_OMAP_MCPDM=m

#
# Audio support for boards with Texas Instruments SoCs
#
CONFIG_SND_SOC_OMAP_HDMI=m
CONFIG_SND_SOC_J721E_EVM=m
# end of Audio support for Texas Instruments SoCs

CONFIG_SND_SOC_UNIPHIER=m
CONFIG_SND_SOC_UNIPHIER_AIO=m
CONFIG_SND_SOC_UNIPHIER_LD11=m
CONFIG_SND_SOC_UNIPHIER_PXS2=m
CONFIG_SND_SOC_UNIPHIER_EVEA_CODEC=m
CONFIG_SND_SOC_XILINX_I2S=m
CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=m
CONFIG_SND_SOC_XILINX_SPDIF=m
CONFIG_SND_SOC_XTFPGA_I2S=m
CONFIG_SND_SOC_I2C_AND_SPI=m

#
# CODEC drivers
#
CONFIG_SND_SOC_ALL_CODECS=m
# CONFIG_SND_SOC_88PM860X is not set
CONFIG_SND_SOC_ARIZONA=m
CONFIG_SND_SOC_WM_HUBS=m
CONFIG_SND_SOC_WM_ADSP=m
CONFIG_SND_SOC_AB8500_CODEC=m
CONFIG_SND_SOC_AC97_CODEC=m
CONFIG_SND_SOC_AD1836=m
CONFIG_SND_SOC_AD193X=m
CONFIG_SND_SOC_AD193X_SPI=m
CONFIG_SND_SOC_AD193X_I2C=m
CONFIG_SND_SOC_AD1980=m
CONFIG_SND_SOC_AD73311=m
CONFIG_SND_SOC_ADAU_UTILS=m
CONFIG_SND_SOC_ADAU1372=m
CONFIG_SND_SOC_ADAU1372_I2C=m
CONFIG_SND_SOC_ADAU1372_SPI=m
CONFIG_SND_SOC_ADAU1373=m
CONFIG_SND_SOC_ADAU1701=m
CONFIG_SND_SOC_ADAU17X1=m
CONFIG_SND_SOC_ADAU1761=m
CONFIG_SND_SOC_ADAU1761_I2C=m
CONFIG_SND_SOC_ADAU1761_SPI=m
CONFIG_SND_SOC_ADAU1781=m
CONFIG_SND_SOC_ADAU1781_I2C=m
CONFIG_SND_SOC_ADAU1781_SPI=m
CONFIG_SND_SOC_ADAU1977=m
CONFIG_SND_SOC_ADAU1977_SPI=m
CONFIG_SND_SOC_ADAU1977_I2C=m
CONFIG_SND_SOC_ADAU7002=m
CONFIG_SND_SOC_ADAU7118=m
CONFIG_SND_SOC_ADAU7118_HW=m
CONFIG_SND_SOC_ADAU7118_I2C=m
CONFIG_SND_SOC_ADAV80X=m
CONFIG_SND_SOC_ADAV801=m
CONFIG_SND_SOC_ADAV803=m
CONFIG_SND_SOC_ADS117X=m
CONFIG_SND_SOC_AK4104=m
CONFIG_SND_SOC_AK4118=m
CONFIG_SND_SOC_AK4375=m
CONFIG_SND_SOC_AK4458=m
CONFIG_SND_SOC_AK4535=m
CONFIG_SND_SOC_AK4554=m
CONFIG_SND_SOC_AK4613=m
CONFIG_SND_SOC_AK4641=m
CONFIG_SND_SOC_AK4642=m
CONFIG_SND_SOC_AK4671=m
CONFIG_SND_SOC_AK5386=m
CONFIG_SND_SOC_AK5558=m
CONFIG_SND_SOC_ALC5623=m
CONFIG_SND_SOC_ALC5632=m
CONFIG_SND_SOC_AW8738=m
CONFIG_SND_SOC_BD28623=m
CONFIG_SND_SOC_BT_SCO=m
CONFIG_SND_SOC_CPCAP=m
CONFIG_SND_SOC_CQ0093VC=m
CONFIG_SND_SOC_CROS_EC_CODEC=m
CONFIG_SND_SOC_CS35L32=m
CONFIG_SND_SOC_CS35L33=m
CONFIG_SND_SOC_CS35L34=m
CONFIG_SND_SOC_CS35L35=m
CONFIG_SND_SOC_CS35L36=m
CONFIG_SND_SOC_CS35L41_LIB=m
CONFIG_SND_SOC_CS35L41=m
CONFIG_SND_SOC_CS35L41_SPI=m
CONFIG_SND_SOC_CS35L41_I2C=m
CONFIG_SND_SOC_CS35L45_TABLES=m
CONFIG_SND_SOC_CS35L45=m
CONFIG_SND_SOC_CS35L45_SPI=m
CONFIG_SND_SOC_CS35L45_I2C=m
CONFIG_SND_SOC_CS42L42_CORE=m
CONFIG_SND_SOC_CS42L42=m
CONFIG_SND_SOC_CS42L51=m
CONFIG_SND_SOC_CS42L51_I2C=m
CONFIG_SND_SOC_CS42L52=m
CONFIG_SND_SOC_CS42L56=m
CONFIG_SND_SOC_CS42L73=m
CONFIG_SND_SOC_CS42L83=m
CONFIG_SND_SOC_CS4234=m
CONFIG_SND_SOC_CS4265=m
CONFIG_SND_SOC_CS4270=m
CONFIG_SND_SOC_CS4271=m
CONFIG_SND_SOC_CS4271_I2C=m
CONFIG_SND_SOC_CS4271_SPI=m
CONFIG_SND_SOC_CS42XX8=m
CONFIG_SND_SOC_CS42XX8_I2C=m
CONFIG_SND_SOC_CS43130=m
CONFIG_SND_SOC_CS4341=m
CONFIG_SND_SOC_CS4349=m
CONFIG_SND_SOC_CS47L15=m
CONFIG_SND_SOC_CS47L24=m
CONFIG_SND_SOC_CS47L35=m
CONFIG_SND_SOC_CS47L85=m
CONFIG_SND_SOC_CS47L90=m
CONFIG_SND_SOC_CS47L92=m
CONFIG_SND_SOC_CS53L30=m
CONFIG_SND_SOC_CX20442=m
CONFIG_SND_SOC_CX2072X=m
CONFIG_SND_SOC_JZ4740_CODEC=m
CONFIG_SND_SOC_JZ4725B_CODEC=m
CONFIG_SND_SOC_JZ4760_CODEC=m
CONFIG_SND_SOC_JZ4770_CODEC=m
CONFIG_SND_SOC_L3=m
CONFIG_SND_SOC_DA7210=m
CONFIG_SND_SOC_DA7213=m
CONFIG_SND_SOC_DA7218=m
CONFIG_SND_SOC_DA7219=m
CONFIG_SND_SOC_DA732X=m
CONFIG_SND_SOC_DA9055=m
CONFIG_SND_SOC_DMIC=m
CONFIG_SND_SOC_HDMI_CODEC=m
CONFIG_SND_SOC_ES7134=m
CONFIG_SND_SOC_ES7241=m
CONFIG_SND_SOC_ES8316=m
CONFIG_SND_SOC_ES8326=m
CONFIG_SND_SOC_ES8328=m
CONFIG_SND_SOC_ES8328_I2C=m
CONFIG_SND_SOC_ES8328_SPI=m
CONFIG_SND_SOC_GTM601=m
CONFIG_SND_SOC_HDAC_HDMI=m
CONFIG_SND_SOC_HDAC_HDA=m
CONFIG_SND_SOC_HDA=m
CONFIG_SND_SOC_ICS43432=m
CONFIG_SND_SOC_INNO_RK3036=m
CONFIG_SND_SOC_ISABELLE=m
CONFIG_SND_SOC_LM49453=m
CONFIG_SND_SOC_LOCHNAGAR_SC=m
CONFIG_SND_SOC_MADERA=m
CONFIG_SND_SOC_MAX98088=m
CONFIG_SND_SOC_MAX98090=m
CONFIG_SND_SOC_MAX98095=m
CONFIG_SND_SOC_MAX98357A=m
CONFIG_SND_SOC_MAX98371=m
CONFIG_SND_SOC_MAX98504=m
CONFIG_SND_SOC_MAX9867=m
CONFIG_SND_SOC_MAX98925=m
CONFIG_SND_SOC_MAX98926=m
CONFIG_SND_SOC_MAX98927=m
CONFIG_SND_SOC_MAX98520=m
CONFIG_SND_SOC_MAX98373=m
CONFIG_SND_SOC_MAX98373_I2C=m
CONFIG_SND_SOC_MAX98373_SDW=m
CONFIG_SND_SOC_MAX98390=m
CONFIG_SND_SOC_MAX98396=m
CONFIG_SND_SOC_MAX9850=m
CONFIG_SND_SOC_MAX9860=m
CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m
CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m
CONFIG_SND_SOC_PCM1681=m
CONFIG_SND_SOC_PCM1789=m
CONFIG_SND_SOC_PCM1789_I2C=m
CONFIG_SND_SOC_PCM179X=m
CONFIG_SND_SOC_PCM179X_I2C=m
CONFIG_SND_SOC_PCM179X_SPI=m
CONFIG_SND_SOC_PCM186X=m
CONFIG_SND_SOC_PCM186X_I2C=m
CONFIG_SND_SOC_PCM186X_SPI=m
CONFIG_SND_SOC_PCM3008=m
CONFIG_SND_SOC_PCM3060=m
CONFIG_SND_SOC_PCM3060_I2C=m
CONFIG_SND_SOC_PCM3060_SPI=m
CONFIG_SND_SOC_PCM3168A=m
CONFIG_SND_SOC_PCM3168A_I2C=m
CONFIG_SND_SOC_PCM3168A_SPI=m
CONFIG_SND_SOC_PCM5102A=m
CONFIG_SND_SOC_PCM512x=m
CONFIG_SND_SOC_PCM512x_I2C=m
CONFIG_SND_SOC_PCM512x_SPI=m
CONFIG_SND_SOC_RK3328=m
CONFIG_SND_SOC_RK817=m
CONFIG_SND_SOC_RL6231=m
CONFIG_SND_SOC_RL6347A=m
CONFIG_SND_SOC_RT274=m
CONFIG_SND_SOC_RT286=m
CONFIG_SND_SOC_RT298=m
CONFIG_SND_SOC_RT1011=m
CONFIG_SND_SOC_RT1015=m
CONFIG_SND_SOC_RT1015P=m
CONFIG_SND_SOC_RT1016=m
CONFIG_SND_SOC_RT1019=m
CONFIG_SND_SOC_RT1305=m
CONFIG_SND_SOC_RT1308=m
CONFIG_SND_SOC_RT1308_SDW=m
CONFIG_SND_SOC_RT1316_SDW=m
CONFIG_SND_SOC_RT5514=m
CONFIG_SND_SOC_RT5514_SPI=m
CONFIG_SND_SOC_RT5616=m
CONFIG_SND_SOC_RT5631=m
CONFIG_SND_SOC_RT5640=m
CONFIG_SND_SOC_RT5645=m
CONFIG_SND_SOC_RT5651=m
CONFIG_SND_SOC_RT5659=m
CONFIG_SND_SOC_RT5660=m
CONFIG_SND_SOC_RT5663=m
CONFIG_SND_SOC_RT5665=m
CONFIG_SND_SOC_RT5668=m
CONFIG_SND_SOC_RT5670=m
CONFIG_SND_SOC_RT5677=m
CONFIG_SND_SOC_RT5677_SPI=m
CONFIG_SND_SOC_RT5682=m
CONFIG_SND_SOC_RT5682_I2C=m
CONFIG_SND_SOC_RT5682_SDW=m
CONFIG_SND_SOC_RT5682S=m
CONFIG_SND_SOC_RT700=m
CONFIG_SND_SOC_RT700_SDW=m
CONFIG_SND_SOC_RT711=m
CONFIG_SND_SOC_RT711_SDW=m
CONFIG_SND_SOC_RT711_SDCA_SDW=m
CONFIG_SND_SOC_RT715=m
CONFIG_SND_SOC_RT715_SDW=m
CONFIG_SND_SOC_RT715_SDCA_SDW=m
CONFIG_SND_SOC_RT9120=m
CONFIG_SND_SOC_SDW_MOCKUP=m
CONFIG_SND_SOC_SGTL5000=m
CONFIG_SND_SOC_SI476X=m
CONFIG_SND_SOC_SIGMADSP=m
CONFIG_SND_SOC_SIGMADSP_I2C=m
CONFIG_SND_SOC_SIGMADSP_REGMAP=m
CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
CONFIG_SND_SOC_SIMPLE_MUX=m
CONFIG_SND_SOC_SPDIF=m
CONFIG_SND_SOC_SRC4XXX_I2C=m
CONFIG_SND_SOC_SRC4XXX=m
CONFIG_SND_SOC_SSM2305=m
CONFIG_SND_SOC_SSM2518=m
CONFIG_SND_SOC_SSM2602=m
CONFIG_SND_SOC_SSM2602_SPI=m
CONFIG_SND_SOC_SSM2602_I2C=m
CONFIG_SND_SOC_SSM4567=m
CONFIG_SND_SOC_STA32X=m
CONFIG_SND_SOC_STA350=m
CONFIG_SND_SOC_STA529=m
CONFIG_SND_SOC_STAC9766=m
CONFIG_SND_SOC_STI_SAS=m
CONFIG_SND_SOC_TAS2552=m
CONFIG_SND_SOC_TAS2562=m
CONFIG_SND_SOC_TAS2764=m
CONFIG_SND_SOC_TAS2770=m
CONFIG_SND_SOC_TAS2780=m
CONFIG_SND_SOC_TAS5086=m
CONFIG_SND_SOC_TAS571X=m
CONFIG_SND_SOC_TAS5720=m
CONFIG_SND_SOC_TAS5805M=m
CONFIG_SND_SOC_TAS6424=m
CONFIG_SND_SOC_TDA7419=m
CONFIG_SND_SOC_TFA9879=m
CONFIG_SND_SOC_TFA989X=m
CONFIG_SND_SOC_TLV320ADC3XXX=m
CONFIG_SND_SOC_TLV320AIC23=m
CONFIG_SND_SOC_TLV320AIC23_I2C=m
CONFIG_SND_SOC_TLV320AIC23_SPI=m
CONFIG_SND_SOC_TLV320AIC26=m
CONFIG_SND_SOC_TLV320AIC31XX=m
CONFIG_SND_SOC_TLV320AIC32X4=m
CONFIG_SND_SOC_TLV320AIC32X4_I2C=m
CONFIG_SND_SOC_TLV320AIC32X4_SPI=m
CONFIG_SND_SOC_TLV320AIC3X=m
CONFIG_SND_SOC_TLV320AIC3X_I2C=m
CONFIG_SND_SOC_TLV320AIC3X_SPI=m
CONFIG_SND_SOC_TLV320DAC33=m
CONFIG_SND_SOC_TLV320ADCX140=m
CONFIG_SND_SOC_TS3A227E=m
CONFIG_SND_SOC_TSCS42XX=m
CONFIG_SND_SOC_TSCS454=m
# CONFIG_SND_SOC_TWL4030 is not set
# CONFIG_SND_SOC_TWL6040 is not set
CONFIG_SND_SOC_UDA1334=m
CONFIG_SND_SOC_UDA134X=m
CONFIG_SND_SOC_UDA1380=m
CONFIG_SND_SOC_WCD9335=m
CONFIG_SND_SOC_WCD_MBHC=m
CONFIG_SND_SOC_WCD934X=m
CONFIG_SND_SOC_WCD938X=m
CONFIG_SND_SOC_WCD938X_SDW=m
CONFIG_SND_SOC_WL1273=m
CONFIG_SND_SOC_WM0010=m
CONFIG_SND_SOC_WM1250_EV1=m
CONFIG_SND_SOC_WM2000=m
CONFIG_SND_SOC_WM2200=m
CONFIG_SND_SOC_WM5100=m
CONFIG_SND_SOC_WM5102=m
CONFIG_SND_SOC_WM5110=m
# CONFIG_SND_SOC_WM8350 is not set
# CONFIG_SND_SOC_WM8400 is not set
CONFIG_SND_SOC_WM8510=m
CONFIG_SND_SOC_WM8523=m
CONFIG_SND_SOC_WM8524=m
CONFIG_SND_SOC_WM8580=m
CONFIG_SND_SOC_WM8711=m
CONFIG_SND_SOC_WM8727=m
CONFIG_SND_SOC_WM8728=m
CONFIG_SND_SOC_WM8731=m
CONFIG_SND_SOC_WM8731_I2C=m
CONFIG_SND_SOC_WM8731_SPI=m
CONFIG_SND_SOC_WM8737=m
CONFIG_SND_SOC_WM8741=m
CONFIG_SND_SOC_WM8750=m
CONFIG_SND_SOC_WM8753=m
CONFIG_SND_SOC_WM8770=m
CONFIG_SND_SOC_WM8776=m
CONFIG_SND_SOC_WM8782=m
CONFIG_SND_SOC_WM8804=m
CONFIG_SND_SOC_WM8804_I2C=m
CONFIG_SND_SOC_WM8804_SPI=m
CONFIG_SND_SOC_WM8900=m
CONFIG_SND_SOC_WM8903=m
CONFIG_SND_SOC_WM8904=m
CONFIG_SND_SOC_WM8940=m
CONFIG_SND_SOC_WM8955=m
CONFIG_SND_SOC_WM8960=m
CONFIG_SND_SOC_WM8961=m
CONFIG_SND_SOC_WM8962=m
CONFIG_SND_SOC_WM8971=m
CONFIG_SND_SOC_WM8974=m
CONFIG_SND_SOC_WM8978=m
CONFIG_SND_SOC_WM8983=m
CONFIG_SND_SOC_WM8985=m
CONFIG_SND_SOC_WM8988=m
CONFIG_SND_SOC_WM8990=m
CONFIG_SND_SOC_WM8991=m
CONFIG_SND_SOC_WM8993=m
CONFIG_SND_SOC_WM8994=m
CONFIG_SND_SOC_WM8995=m
CONFIG_SND_SOC_WM8996=m
CONFIG_SND_SOC_WM8997=m
CONFIG_SND_SOC_WM8998=m
CONFIG_SND_SOC_WM9081=m
CONFIG_SND_SOC_WM9090=m
CONFIG_SND_SOC_WM9705=m
CONFIG_SND_SOC_WM9712=m
CONFIG_SND_SOC_WM9713=m
CONFIG_SND_SOC_WSA881X=m
CONFIG_SND_SOC_WSA883X=m
CONFIG_SND_SOC_ZL38060=m
CONFIG_SND_SOC_LM4857=m
CONFIG_SND_SOC_MAX9759=m
CONFIG_SND_SOC_MAX9768=m
CONFIG_SND_SOC_MAX9877=m
CONFIG_SND_SOC_MC13783=m
CONFIG_SND_SOC_ML26124=m
CONFIG_SND_SOC_MT6351=m
CONFIG_SND_SOC_MT6358=m
CONFIG_SND_SOC_MT6359=m
CONFIG_SND_SOC_MT6359_ACCDET=m
CONFIG_SND_SOC_MT6660=m
CONFIG_SND_SOC_NAU8315=m
CONFIG_SND_SOC_NAU8540=m
CONFIG_SND_SOC_NAU8810=m
CONFIG_SND_SOC_NAU8821=m
CONFIG_SND_SOC_NAU8822=m
CONFIG_SND_SOC_NAU8824=m
CONFIG_SND_SOC_NAU8825=m
CONFIG_SND_SOC_TPA6130A2=m
CONFIG_SND_SOC_LPASS_MACRO_COMMON=m
CONFIG_SND_SOC_LPASS_WSA_MACRO=m
CONFIG_SND_SOC_LPASS_VA_MACRO=m
CONFIG_SND_SOC_LPASS_RX_MACRO=m
CONFIG_SND_SOC_LPASS_TX_MACRO=m
# end of CODEC drivers

CONFIG_SND_SIMPLE_CARD_UTILS=m
CONFIG_SND_SIMPLE_CARD=m
CONFIG_SND_AUDIO_GRAPH_CARD=m
CONFIG_SND_AUDIO_GRAPH_CARD2=m
CONFIG_SND_AUDIO_GRAPH_CARD2_CUSTOM_SAMPLE=m
CONFIG_SND_TEST_COMPONENT=m
CONFIG_SND_VIRTIO=m
CONFIG_AC97_BUS=m

#
# HID support
#
CONFIG_HID=m
CONFIG_HID_BATTERY_STRENGTH=y
CONFIG_HIDRAW=y
CONFIG_UHID=m
CONFIG_HID_GENERIC=m

#
# Special HID drivers
#
CONFIG_HID_A4TECH=m
CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_APPLE=m
CONFIG_HID_APPLEIR=m
CONFIG_HID_ASUS=m
CONFIG_HID_AUREAL=m
CONFIG_HID_BELKIN=m
CONFIG_HID_BETOP_FF=m
CONFIG_HID_BIGBEN_FF=m
CONFIG_HID_CHERRY=m
CONFIG_HID_CHICONY=m
CONFIG_HID_CORSAIR=m
CONFIG_HID_COUGAR=m
CONFIG_HID_MACALLY=m
CONFIG_HID_PRODIKEYS=m
CONFIG_HID_CMEDIA=m
CONFIG_HID_CP2112=m
CONFIG_HID_CREATIVE_SB0540=m
CONFIG_HID_CYPRESS=m
CONFIG_HID_DRAGONRISE=m
CONFIG_DRAGONRISE_FF=y
CONFIG_HID_EMS_FF=m
CONFIG_HID_ELAN=m
CONFIG_HID_ELECOM=m
CONFIG_HID_ELO=m
CONFIG_HID_EZKEY=m
CONFIG_HID_FT260=m
CONFIG_HID_GEMBIRD=m
CONFIG_HID_GFRM=m
CONFIG_HID_GLORIOUS=m
CONFIG_HID_HOLTEK=m
CONFIG_HOLTEK_FF=y
CONFIG_HID_VIVALDI_COMMON=m
CONFIG_HID_GOOGLE_HAMMER=m
CONFIG_HID_VIVALDI=m
CONFIG_HID_GT683R=m
CONFIG_HID_KEYTOUCH=m
CONFIG_HID_KYE=m
CONFIG_HID_UCLOGIC=m
CONFIG_HID_WALTOP=m
CONFIG_HID_VIEWSONIC=m
CONFIG_HID_VRC2=m
CONFIG_HID_XIAOMI=m
CONFIG_HID_GYRATION=m
CONFIG_HID_ICADE=m
CONFIG_HID_ITE=m
CONFIG_HID_JABRA=m
CONFIG_HID_TWINHAN=m
CONFIG_HID_KENSINGTON=m
CONFIG_HID_LCPOWER=m
CONFIG_HID_LED=m
CONFIG_HID_LENOVO=m
CONFIG_HID_LETSKETCH=m
CONFIG_HID_LOGITECH=m
CONFIG_HID_LOGITECH_DJ=m
CONFIG_HID_LOGITECH_HIDPP=m
CONFIG_LOGITECH_FF=y
CONFIG_LOGIRUMBLEPAD2_FF=y
CONFIG_LOGIG940_FF=y
CONFIG_LOGIWHEELS_FF=y
CONFIG_HID_MAGICMOUSE=m
CONFIG_HID_MALTRON=m
CONFIG_HID_MAYFLASH=m
CONFIG_HID_MEGAWORLD_FF=m
CONFIG_HID_REDRAGON=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
CONFIG_HID_NINTENDO=m
CONFIG_NINTENDO_FF=y
CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=m
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
CONFIG_PANTHERLORD_FF=y
CONFIG_HID_PENMOUNT=m
CONFIG_HID_PETALYNX=m
CONFIG_HID_PICOLCD=m
CONFIG_HID_PICOLCD_FB=y
CONFIG_HID_PICOLCD_BACKLIGHT=y
CONFIG_HID_PICOLCD_LCD=y
CONFIG_HID_PICOLCD_LEDS=y
CONFIG_HID_PICOLCD_CIR=y
CONFIG_HID_PLANTRONICS=m
CONFIG_HID_PLAYSTATION=m
CONFIG_PLAYSTATION_FF=y
CONFIG_HID_PXRC=m
CONFIG_HID_RAZER=m
CONFIG_HID_PRIMAX=m
CONFIG_HID_RETRODE=m
CONFIG_HID_ROCCAT=m
CONFIG_HID_SAITEK=m
CONFIG_HID_SAMSUNG=m
CONFIG_HID_SEMITEK=m
CONFIG_HID_SIGMAMICRO=m
CONFIG_HID_SONY=m
CONFIG_SONY_FF=y
CONFIG_HID_SPEEDLINK=m
CONFIG_HID_STEAM=m
CONFIG_HID_STEELSERIES=m
CONFIG_HID_SUNPLUS=m
CONFIG_HID_RMI=m
CONFIG_HID_GREENASIA=m
CONFIG_GREENASIA_FF=y
CONFIG_HID_SMARTJOYPLUS=m
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_HID_TIVO=m
CONFIG_HID_TOPSEED=m
CONFIG_HID_TOPRE=m
CONFIG_HID_THINGM=m
CONFIG_HID_THRUSTMASTER=m
CONFIG_THRUSTMASTER_FF=y
CONFIG_HID_UDRAW_PS3=m
CONFIG_HID_U2FZERO=m
CONFIG_HID_WACOM=m
CONFIG_HID_WIIMOTE=m
CONFIG_HID_XINMO=m
CONFIG_HID_ZEROPLUS=m
CONFIG_ZEROPLUS_FF=y
CONFIG_HID_ZYDACRON=m
CONFIG_HID_SENSOR_HUB=m
CONFIG_HID_SENSOR_CUSTOM_SENSOR=m
CONFIG_HID_ALPS=m
CONFIG_HID_MCP2221=m
# end of Special HID drivers

#
# USB HID support
#
CONFIG_USB_HID=m
CONFIG_HID_PID=y
CONFIG_USB_HIDDEV=y

#
# USB HID Boot Protocol drivers
#
CONFIG_USB_KBD=m
CONFIG_USB_MOUSE=m
# end of USB HID Boot Protocol drivers
# end of USB HID support

#
# I2C HID support
#
CONFIG_I2C_HID_OF=m
CONFIG_I2C_HID_OF_ELAN=m
CONFIG_I2C_HID_OF_GOODIX=m
# end of I2C HID support

CONFIG_I2C_HID_CORE=m
# end of HID support

CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_COMMON=m
CONFIG_USB_LED_TRIG=y
CONFIG_USB_ULPI_BUS=m
CONFIG_USB_CONN_GPIO=m
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB=m
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y

#
# Miscellaneous USB options
#
CONFIG_USB_DEFAULT_PERSIST=y
CONFIG_USB_FEW_INIT_RETRIES=y
CONFIG_USB_DYNAMIC_MINORS=y
CONFIG_USB_OTG_PRODUCTLIST=y
CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB=y
CONFIG_USB_LEDS_TRIGGER_USBPORT=m
CONFIG_USB_AUTOSUSPEND_DELAY=2
CONFIG_USB_MON=m

#
# USB Host Controller Drivers
#
CONFIG_USB_C67X00_HCD=m
CONFIG_USB_XHCI_HCD=m
CONFIG_USB_XHCI_DBGCAP=y
CONFIG_USB_XHCI_PCI_RENESAS=m
CONFIG_USB_XHCI_PLATFORM=m
CONFIG_USB_XHCI_HISTB=m
CONFIG_USB_XHCI_MTK=m
CONFIG_USB_XHCI_MVEBU=m
CONFIG_USB_XHCI_RCAR=m
CONFIG_USB_EHCI_BRCMSTB=m
CONFIG_USB_BRCMSTB=m
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_EHCI_ROOT_HUB_TT=y
CONFIG_USB_EHCI_TT_NEWSCHED=y
CONFIG_USB_EHCI_FSL=m
CONFIG_USB_EHCI_HCD_NPCM7XX=m
CONFIG_USB_EHCI_HCD_OMAP=m
CONFIG_USB_EHCI_HCD_ORION=m
CONFIG_USB_EHCI_HCD_SPEAR=m
CONFIG_USB_EHCI_HCD_STI=m
CONFIG_USB_EHCI_HCD_AT91=m
CONFIG_USB_EHCI_SH=y
CONFIG_USB_EHCI_EXYNOS=m
CONFIG_USB_EHCI_MV=m
CONFIG_USB_CNS3XXX_EHCI=y
CONFIG_USB_EHCI_HCD_PLATFORM=m
CONFIG_USB_OXU210HP_HCD=m
CONFIG_USB_ISP116X_HCD=m
CONFIG_USB_ISP1362_HCD=m
CONFIG_USB_FOTG210_HCD=m
CONFIG_USB_MAX3421_HCD=m
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_OHCI_HCD_SPEAR=m
CONFIG_USB_OHCI_HCD_STI=m
CONFIG_USB_OHCI_HCD_S3C2410=m
CONFIG_USB_OHCI_HCD_LPC32XX=m
CONFIG_USB_OHCI_HCD_AT91=m
CONFIG_USB_OHCI_HCD_OMAP3=m
CONFIG_USB_OHCI_HCD_DAVINCI=m
CONFIG_USB_OHCI_HCD_SSB=y
CONFIG_USB_OHCI_SH=y
CONFIG_USB_OHCI_EXYNOS=m
CONFIG_USB_CNS3XXX_OHCI=y
CONFIG_USB_OHCI_HCD_PLATFORM=m
CONFIG_USB_U132_HCD=m
CONFIG_USB_SL811_HCD=m
CONFIG_USB_SL811_HCD_ISO=y
CONFIG_USB_SL811_CS=m
CONFIG_USB_R8A66597_HCD=m
CONFIG_USB_RENESAS_USBHS_HCD=m
CONFIG_USB_HCD_BCMA=m
CONFIG_USB_HCD_SSB=m
CONFIG_USB_HCD_TEST_MODE=y
CONFIG_USB_RENESAS_USBHS=m

#
# USB Device Class drivers
#
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
CONFIG_USB_WDM=m
CONFIG_USB_TMC=m

#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#

#
# also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=m
CONFIG_USB_STORAGE_DEBUG=y
CONFIG_USB_STORAGE_REALTEK=m
CONFIG_USB_STORAGE_DATAFAB=m
CONFIG_USB_STORAGE_FREECOM=m
CONFIG_USB_STORAGE_ISD200=m
CONFIG_USB_STORAGE_USBAT=m
CONFIG_USB_STORAGE_SDDR09=m
CONFIG_USB_STORAGE_SDDR55=m
CONFIG_USB_STORAGE_JUMPSHOT=m
CONFIG_USB_STORAGE_ALAUDA=m
CONFIG_USB_STORAGE_ONETOUCH=m
CONFIG_USB_STORAGE_KARMA=m
CONFIG_USB_STORAGE_CYPRESS_ATACB=m
CONFIG_USB_STORAGE_ENE_UB6250=m
CONFIG_USB_UAS=m

#
# USB Imaging devices
#
CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
CONFIG_USBIP_CORE=m
CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_HOST=m
CONFIG_USBIP_VUDC=m
CONFIG_USBIP_DEBUG=y
CONFIG_USB_CDNS_SUPPORT=m
CONFIG_USB_CDNS_HOST=y
CONFIG_USB_CDNS3=m
CONFIG_USB_CDNS3_GADGET=y
CONFIG_USB_CDNS3_HOST=y
CONFIG_USB_CDNS3_TI=m
CONFIG_USB_CDNS3_IMX=m
CONFIG_USB_MTU3=m
# CONFIG_USB_MTU3_HOST is not set
# CONFIG_USB_MTU3_GADGET is not set
CONFIG_USB_MTU3_DUAL_ROLE=y
CONFIG_USB_MTU3_DEBUG=y
CONFIG_USB_MUSB_HDRC=m
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_GADGET is not set
CONFIG_USB_MUSB_DUAL_ROLE=y

#
# Platform Glue Layer
#
CONFIG_USB_MUSB_TUSB6010=m
CONFIG_USB_MUSB_DSPS=m
CONFIG_USB_MUSB_UX500=m
CONFIG_USB_MUSB_MEDIATEK=m
CONFIG_USB_MUSB_POLARFIRE_SOC=m

#
# MUSB DMA mode
#
CONFIG_MUSB_PIO_ONLY=y
CONFIG_USB_DWC3=m
CONFIG_USB_DWC3_ULPI=y
# CONFIG_USB_DWC3_HOST is not set
# CONFIG_USB_DWC3_GADGET is not set
CONFIG_USB_DWC3_DUAL_ROLE=y

#
# Platform Glue Driver Support
#
CONFIG_USB_DWC3_OMAP=m
CONFIG_USB_DWC3_EXYNOS=m
CONFIG_USB_DWC3_KEYSTONE=m
CONFIG_USB_DWC3_MESON_G12A=m
CONFIG_USB_DWC3_OF_SIMPLE=m
CONFIG_USB_DWC3_ST=m
CONFIG_USB_DWC3_QCOM=m
CONFIG_USB_DWC3_IMX8MP=m
CONFIG_USB_DWC3_AM62=m
CONFIG_USB_DWC2=m
# CONFIG_USB_DWC2_HOST is not set

#
# Gadget/Dual-role mode requires USB Gadget support to be enabled
#
# CONFIG_USB_DWC2_PERIPHERAL is not set
CONFIG_USB_DWC2_DUAL_ROLE=y
CONFIG_USB_DWC2_DEBUG=y
CONFIG_USB_DWC2_VERBOSE=y
CONFIG_USB_DWC2_TRACK_MISSED_SOFS=y
CONFIG_USB_DWC2_DEBUG_PERIODIC=y
CONFIG_USB_CHIPIDEA=m
CONFIG_USB_CHIPIDEA_UDC=y
CONFIG_USB_CHIPIDEA_HOST=y
CONFIG_USB_CHIPIDEA_MSM=m
CONFIG_USB_CHIPIDEA_IMX=m
CONFIG_USB_CHIPIDEA_GENERIC=m
CONFIG_USB_CHIPIDEA_TEGRA=m
CONFIG_USB_ISP1760=m
CONFIG_USB_ISP1760_HCD=y
CONFIG_USB_ISP1761_UDC=y
# CONFIG_USB_ISP1760_HOST_ROLE is not set
# CONFIG_USB_ISP1760_GADGET_ROLE is not set
CONFIG_USB_ISP1760_DUAL_ROLE=y

#
# USB port drivers
#
CONFIG_USB_USS720=m
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_SIMPLE=m
CONFIG_USB_SERIAL_AIRCABLE=m
CONFIG_USB_SERIAL_ARK3116=m
CONFIG_USB_SERIAL_BELKIN=m
CONFIG_USB_SERIAL_CH341=m
CONFIG_USB_SERIAL_WHITEHEAT=m
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
CONFIG_USB_SERIAL_CP210X=m
CONFIG_USB_SERIAL_CYPRESS_M8=m
CONFIG_USB_SERIAL_EMPEG=m
CONFIG_USB_SERIAL_FTDI_SIO=m
CONFIG_USB_SERIAL_VISOR=m
CONFIG_USB_SERIAL_IPAQ=m
CONFIG_USB_SERIAL_IR=m
CONFIG_USB_SERIAL_EDGEPORT=m
CONFIG_USB_SERIAL_EDGEPORT_TI=m
CONFIG_USB_SERIAL_F81232=m
CONFIG_USB_SERIAL_F8153X=m
CONFIG_USB_SERIAL_GARMIN=m
CONFIG_USB_SERIAL_IPW=m
CONFIG_USB_SERIAL_IUU=m
CONFIG_USB_SERIAL_KEYSPAN_PDA=m
CONFIG_USB_SERIAL_KEYSPAN=m
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_MCT_U232=m
CONFIG_USB_SERIAL_METRO=m
CONFIG_USB_SERIAL_MOS7720=m
CONFIG_USB_SERIAL_MOS7715_PARPORT=y
CONFIG_USB_SERIAL_MOS7840=m
CONFIG_USB_SERIAL_MXUPORT=m
CONFIG_USB_SERIAL_NAVMAN=m
CONFIG_USB_SERIAL_PL2303=m
CONFIG_USB_SERIAL_OTI6858=m
CONFIG_USB_SERIAL_QCAUX=m
CONFIG_USB_SERIAL_QUALCOMM=m
CONFIG_USB_SERIAL_SPCP8X5=m
CONFIG_USB_SERIAL_SAFE=m
CONFIG_USB_SERIAL_SAFE_PADDED=y
CONFIG_USB_SERIAL_SIERRAWIRELESS=m
CONFIG_USB_SERIAL_SYMBOL=m
CONFIG_USB_SERIAL_TI=m
CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_WWAN=m
CONFIG_USB_SERIAL_OPTION=m
CONFIG_USB_SERIAL_OMNINET=m
CONFIG_USB_SERIAL_OPTICON=m
CONFIG_USB_SERIAL_XSENS_MT=m
CONFIG_USB_SERIAL_WISHBONE=m
CONFIG_USB_SERIAL_SSU100=m
CONFIG_USB_SERIAL_QT2=m
CONFIG_USB_SERIAL_UPD78F0730=m
CONFIG_USB_SERIAL_XR=m
CONFIG_USB_SERIAL_DEBUG=m

#
# USB Miscellaneous drivers
#
CONFIG_USB_EMI62=m
CONFIG_USB_EMI26=m
CONFIG_USB_ADUTUX=m
CONFIG_USB_SEVSEG=m
CONFIG_USB_LEGOTOWER=m
CONFIG_USB_LCD=m
CONFIG_USB_CYPRESS_CY7C63=m
CONFIG_USB_CYTHERM=m
CONFIG_USB_IDMOUSE=m
CONFIG_USB_FTDI_ELAN=m
CONFIG_USB_APPLEDISPLAY=m
CONFIG_USB_QCOM_EUD=m
CONFIG_APPLE_MFI_FASTCHARGE=m
CONFIG_USB_SISUSBVGA=m
CONFIG_USB_LD=m
CONFIG_USB_TRANCEVIBRATOR=m
CONFIG_USB_IOWARRIOR=m
CONFIG_USB_TEST=m
CONFIG_USB_EHSET_TEST_FIXTURE=m
CONFIG_USB_ISIGHTFW=m
CONFIG_USB_YUREX=m
CONFIG_USB_EZUSB_FX2=m
CONFIG_USB_HUB_USB251XB=m
CONFIG_USB_HSIC_USB3503=m
CONFIG_USB_HSIC_USB4604=m
CONFIG_USB_LINK_LAYER_TEST=m
CONFIG_USB_CHAOSKEY=m
CONFIG_BRCM_USB_PINMAP=m
CONFIG_USB_ONBOARD_HUB=m
CONFIG_USB_ATM=m
CONFIG_USB_SPEEDTOUCH=m
CONFIG_USB_CXACRU=m
CONFIG_USB_UEAGLEATM=m
CONFIG_USB_XUSBATM=m

#
# USB Physical Layer drivers
#
CONFIG_USB_PHY=y
CONFIG_KEYSTONE_USB_PHY=m
CONFIG_NOP_USB_XCEIV=m
CONFIG_AM335X_CONTROL_USB=m
CONFIG_AM335X_PHY_USB=m
CONFIG_USB_GPIO_VBUS=m
CONFIG_TAHVO_USB=m
CONFIG_TAHVO_USB_HOST_BY_DEFAULT=y
CONFIG_USB_ISP1301=m
CONFIG_USB_TEGRA_PHY=m
CONFIG_USB_ULPI=y
CONFIG_USB_ULPI_VIEWPORT=y
CONFIG_JZ4770_PHY=m
# end of USB Physical Layer drivers

CONFIG_USB_GADGET=m
CONFIG_USB_GADGET_DEBUG=y
CONFIG_USB_GADGET_VERBOSE=y
CONFIG_USB_GADGET_DEBUG_FILES=y
CONFIG_USB_GADGET_DEBUG_FS=y
CONFIG_USB_GADGET_VBUS_DRAW=2
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
CONFIG_U_SERIAL_CONSOLE=y

#
# USB Peripheral Controller
#
CONFIG_USB_LPC32XX=m
CONFIG_USB_FUSB300=m
CONFIG_USB_FOTG210_UDC=m
CONFIG_USB_GR_UDC=m
CONFIG_USB_R8A66597=m
CONFIG_USB_RENESAS_USBHS_UDC=m
CONFIG_USB_RENESAS_USB3=m
CONFIG_USB_PXA27X=m
CONFIG_USB_MV_UDC=m
CONFIG_USB_MV_U3D=m
CONFIG_USB_SNP_CORE=m
CONFIG_USB_SNP_UDC_PLAT=m
CONFIG_USB_M66592=m
CONFIG_USB_BDC_UDC=m
CONFIG_USB_NET2272=m
CONFIG_USB_NET2272_DMA=y
CONFIG_USB_GADGET_XILINX=m
CONFIG_USB_MAX3420_UDC=m
CONFIG_USB_ASPEED_UDC=m
CONFIG_USB_ASPEED_VHUB=m
CONFIG_USB_DUMMY_HCD=m
# end of USB Peripheral Controller

CONFIG_USB_LIBCOMPOSITE=m
CONFIG_USB_F_ACM=m
CONFIG_USB_F_SS_LB=m
CONFIG_USB_U_SERIAL=m
CONFIG_USB_U_ETHER=m
CONFIG_USB_U_AUDIO=m
CONFIG_USB_F_SERIAL=m
CONFIG_USB_F_OBEX=m
CONFIG_USB_F_NCM=m
CONFIG_USB_F_ECM=m
CONFIG_USB_F_PHONET=m
CONFIG_USB_F_EEM=m
CONFIG_USB_F_SUBSET=m
CONFIG_USB_F_RNDIS=m
CONFIG_USB_F_MASS_STORAGE=m
CONFIG_USB_F_FS=m
CONFIG_USB_F_UAC1=m
CONFIG_USB_F_UAC1_LEGACY=m
CONFIG_USB_F_UAC2=m
CONFIG_USB_F_UVC=m
CONFIG_USB_F_MIDI=m
CONFIG_USB_F_HID=m
CONFIG_USB_F_PRINTER=m
CONFIG_USB_F_TCM=m
CONFIG_USB_CONFIGFS=m
CONFIG_USB_CONFIGFS_SERIAL=y
CONFIG_USB_CONFIGFS_ACM=y
CONFIG_USB_CONFIGFS_OBEX=y
CONFIG_USB_CONFIGFS_NCM=y
CONFIG_USB_CONFIGFS_ECM=y
CONFIG_USB_CONFIGFS_ECM_SUBSET=y
CONFIG_USB_CONFIGFS_RNDIS=y
CONFIG_USB_CONFIGFS_EEM=y
CONFIG_USB_CONFIGFS_PHONET=y
CONFIG_USB_CONFIGFS_MASS_STORAGE=y
CONFIG_USB_CONFIGFS_F_LB_SS=y
CONFIG_USB_CONFIGFS_F_FS=y
CONFIG_USB_CONFIGFS_F_UAC1=y
CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y
CONFIG_USB_CONFIGFS_F_UAC2=y
CONFIG_USB_CONFIGFS_F_MIDI=y
CONFIG_USB_CONFIGFS_F_HID=y
CONFIG_USB_CONFIGFS_F_UVC=y
CONFIG_USB_CONFIGFS_F_PRINTER=y
CONFIG_USB_CONFIGFS_F_TCM=y

#
# USB Gadget precomposed configurations
#
CONFIG_USB_ZERO=m
CONFIG_USB_AUDIO=m
CONFIG_GADGET_UAC1=y
CONFIG_GADGET_UAC1_LEGACY=y
CONFIG_USB_ETH=m
CONFIG_USB_ETH_RNDIS=y
CONFIG_USB_ETH_EEM=y
CONFIG_USB_G_NCM=m
CONFIG_USB_GADGETFS=m
CONFIG_USB_FUNCTIONFS=m
CONFIG_USB_FUNCTIONFS_ETH=y
CONFIG_USB_FUNCTIONFS_RNDIS=y
CONFIG_USB_FUNCTIONFS_GENERIC=y
CONFIG_USB_MASS_STORAGE=m
CONFIG_USB_GADGET_TARGET=m
CONFIG_USB_G_SERIAL=m
CONFIG_USB_MIDI_GADGET=m
CONFIG_USB_G_PRINTER=m
CONFIG_USB_CDC_COMPOSITE=m
CONFIG_USB_G_NOKIA=m
CONFIG_USB_G_ACM_MS=m
CONFIG_USB_G_MULTI=m
CONFIG_USB_G_MULTI_RNDIS=y
CONFIG_USB_G_MULTI_CDC=y
CONFIG_USB_G_HID=m
CONFIG_USB_G_DBGP=m
# CONFIG_USB_G_DBGP_PRINTK is not set
CONFIG_USB_G_DBGP_SERIAL=y
CONFIG_USB_G_WEBCAM=m
CONFIG_USB_RAW_GADGET=m
# end of USB Gadget precomposed configurations

CONFIG_TYPEC=m
CONFIG_TYPEC_TCPM=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_RT1711H=m
CONFIG_TYPEC_MT6360=m
CONFIG_TYPEC_TCPCI_MT6370=m
CONFIG_TYPEC_TCPCI_MAXIM=m
CONFIG_TYPEC_FUSB302=m
CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_ANX7411=m
CONFIG_TYPEC_RT1719=m
CONFIG_TYPEC_HD3SS3220=m
CONFIG_TYPEC_STUSB160X=m
CONFIG_TYPEC_QCOM_PMIC=m
CONFIG_TYPEC_WUSB3801=m

#
# USB Type-C Multiplexer/DeMultiplexer Switch support
#
CONFIG_TYPEC_MUX_FSA4480=m
CONFIG_TYPEC_MUX_PI3USB30532=m
# end of USB Type-C Multiplexer/DeMultiplexer Switch support

#
# USB Type-C Alternate Mode drivers
#
CONFIG_TYPEC_DP_ALTMODE=m
CONFIG_TYPEC_NVIDIA_ALTMODE=m
# end of USB Type-C Alternate Mode drivers

CONFIG_USB_ROLE_SWITCH=y
CONFIG_MMC=m
CONFIG_PWRSEQ_EMMC=m
CONFIG_PWRSEQ_SD8787=m
CONFIG_PWRSEQ_SIMPLE=m
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_SDIO_UART=m
CONFIG_MMC_TEST=m
CONFIG_MMC_CRYPTO=y

#
# MMC/SD/SDIO Host Controller Drivers
#
CONFIG_MMC_DEBUG=y
CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_IO_ACCESSORS=y
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_OF_ARASAN=m
CONFIG_MMC_SDHCI_OF_ASPEED=m
CONFIG_MMC_SDHCI_OF_ASPEED_TEST=y
CONFIG_MMC_SDHCI_OF_AT91=m
CONFIG_MMC_SDHCI_OF_ESDHC=m
CONFIG_MMC_SDHCI_OF_DWCMSHC=m
CONFIG_MMC_SDHCI_OF_SPARX5=m
CONFIG_MMC_SDHCI_CADENCE=m
CONFIG_MMC_SDHCI_CNS3XXX=m
CONFIG_MMC_SDHCI_ESDHC_IMX=m
CONFIG_MMC_SDHCI_DOVE=m
CONFIG_MMC_SDHCI_TEGRA=m
CONFIG_MMC_SDHCI_S3C=m
CONFIG_MMC_SDHCI_PXAV3=m
CONFIG_MMC_SDHCI_PXAV2=m
CONFIG_MMC_SDHCI_SPEAR=m
CONFIG_MMC_SDHCI_S3C_DMA=y
CONFIG_MMC_SDHCI_BCM_KONA=m
CONFIG_MMC_SDHCI_F_SDH30=m
CONFIG_MMC_SDHCI_MILBEAUT=m
CONFIG_MMC_SDHCI_IPROC=m
CONFIG_MMC_MESON_GX=m
CONFIG_MMC_MESON_MX_SDHC=m
CONFIG_MMC_MESON_MX_SDIO=m
CONFIG_MMC_MOXART=m
CONFIG_MMC_SDHCI_ST=m
CONFIG_MMC_OMAP_HS=m
CONFIG_MMC_SDHCI_MSM=m
CONFIG_MMC_DAVINCI=m
CONFIG_MMC_SPI=m
CONFIG_MMC_S3C=m
CONFIG_MMC_S3C_HW_SDIO_IRQ=y
CONFIG_MMC_S3C_PIO=y
# CONFIG_MMC_S3C_DMA is not set
CONFIG_MMC_SDHCI_SPRD=m
CONFIG_MMC_TMIO_CORE=m
CONFIG_MMC_TMIO=m
CONFIG_MMC_SDHI=m
CONFIG_MMC_SDHI_SYS_DMAC=m
CONFIG_MMC_SDHI_INTERNAL_DMAC=m
CONFIG_MMC_UNIPHIER=m
CONFIG_MMC_DW=m
CONFIG_MMC_DW_PLTFM=m
CONFIG_MMC_DW_BLUEFIELD=m
CONFIG_MMC_DW_EXYNOS=m
CONFIG_MMC_DW_HI3798CV200=m
CONFIG_MMC_DW_K3=m
CONFIG_MMC_SH_MMCIF=m
CONFIG_MMC_VUB300=m
CONFIG_MMC_USHC=m
CONFIG_MMC_USDHI6ROL0=m
CONFIG_MMC_REALTEK_USB=m
CONFIG_MMC_SUNXI=m
CONFIG_MMC_CQHCI=m
CONFIG_MMC_HSQ=m
CONFIG_MMC_BCM2835=m
CONFIG_MMC_MTK=m
CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDHCI_OMAP=m
CONFIG_MMC_SDHCI_AM654=m
CONFIG_MMC_OWL=m
CONFIG_MMC_SDHCI_EXTERNAL_DMA=y
CONFIG_MMC_LITEX=m
CONFIG_SCSI_UFSHCD=m
CONFIG_SCSI_UFS_BSG=y
CONFIG_SCSI_UFS_CRYPTO=y
CONFIG_SCSI_UFS_HPB=y
CONFIG_SCSI_UFS_FAULT_INJECTION=y
CONFIG_SCSI_UFS_HWMON=y
CONFIG_SCSI_UFSHCD_PLATFORM=m
CONFIG_SCSI_UFS_CDNS_PLATFORM=m
CONFIG_SCSI_UFS_DWC_TC_PLATFORM=m
CONFIG_SCSI_UFS_HISI=m
CONFIG_SCSI_UFS_RENESAS=m
CONFIG_SCSI_UFS_TI_J721E=m
CONFIG_SCSI_UFS_EXYNOS=m
CONFIG_MEMSTICK=m
CONFIG_MEMSTICK_DEBUG=y

#
# MemoryStick drivers
#
CONFIG_MEMSTICK_UNSAFE_RESUME=y
CONFIG_MSPRO_BLOCK=m
CONFIG_MS_BLOCK=m

#
# MemoryStick Host Controller Drivers
#
CONFIG_MEMSTICK_REALTEK_USB=m
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=m
CONFIG_LEDS_CLASS_FLASH=m
CONFIG_LEDS_CLASS_MULTICOLOR=m
CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y

#
# LED drivers
#
CONFIG_LEDS_AN30259A=m
CONFIG_LEDS_ARIEL=m
CONFIG_LEDS_AW2013=m
CONFIG_LEDS_BCM6328=m
CONFIG_LEDS_BCM6358=m
CONFIG_LEDS_CPCAP=m
CONFIG_LEDS_CR0014114=m
CONFIG_LEDS_EL15203000=m
CONFIG_LEDS_TURRIS_OMNIA=m
CONFIG_LEDS_LM3530=m
CONFIG_LEDS_LM3532=m
CONFIG_LEDS_LM3533=m
CONFIG_LEDS_LM3642=m
CONFIG_LEDS_LM3692X=m
CONFIG_LEDS_MT6323=m
CONFIG_LEDS_S3C24XX=m
CONFIG_LEDS_COBALT_QUBE=m
CONFIG_LEDS_PCA9532=m
CONFIG_LEDS_PCA9532_GPIO=y
CONFIG_LEDS_GPIO=m
CONFIG_LEDS_LP3944=m
CONFIG_LEDS_LP3952=m
CONFIG_LEDS_LP50XX=m
CONFIG_LEDS_LP55XX_COMMON=m
CONFIG_LEDS_LP5521=m
CONFIG_LEDS_LP5523=m
CONFIG_LEDS_LP5562=m
CONFIG_LEDS_LP8501=m
CONFIG_LEDS_LP8860=m
CONFIG_LEDS_PCA955X=m
CONFIG_LEDS_PCA955X_GPIO=y
CONFIG_LEDS_PCA963X=m
CONFIG_LEDS_WM831X_STATUS=m
CONFIG_LEDS_DA9052=m
CONFIG_LEDS_DAC124S085=m
CONFIG_LEDS_PWM=m
CONFIG_LEDS_REGULATOR=m
CONFIG_LEDS_BD2802=m
CONFIG_LEDS_LT3593=m
CONFIG_LEDS_MC13783=m
CONFIG_LEDS_NS2=m
CONFIG_LEDS_NETXBIG=m
CONFIG_LEDS_TCA6507=m
CONFIG_LEDS_TLC591XX=m
CONFIG_LEDS_MAX77650=m
CONFIG_LEDS_LM355x=m
CONFIG_LEDS_OT200=m
CONFIG_LEDS_MENF21BMC=m
CONFIG_LEDS_IS31FL319X=m
CONFIG_LEDS_IS31FL32XX=m
CONFIG_LEDS_SC27XX_BLTC=m

#
# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
#
CONFIG_LEDS_BLINKM=m
CONFIG_LEDS_PM8058=m
CONFIG_LEDS_MLXREG=m
CONFIG_LEDS_USER=m
CONFIG_LEDS_SPI_BYTE=m
CONFIG_LEDS_TI_LMU_COMMON=m
CONFIG_LEDS_LM3697=m
CONFIG_LEDS_LM36274=m
CONFIG_LEDS_TPS6105X=m
CONFIG_LEDS_IP30=m
CONFIG_LEDS_ACER_A500=m
CONFIG_LEDS_BCM63138=m
CONFIG_LEDS_LGM=m

#
# Flash and Torch LED drivers
#
CONFIG_LEDS_AAT1290=m
CONFIG_LEDS_AS3645A=m
CONFIG_LEDS_KTD2692=m
CONFIG_LEDS_LM3601X=m
CONFIG_LEDS_MAX77693=m
CONFIG_LEDS_MT6360=m
CONFIG_LEDS_RT4505=m
CONFIG_LEDS_RT8515=m
CONFIG_LEDS_SGM3140=m

#
# RGB LED drivers
#
CONFIG_LEDS_PWM_MULTICOLOR=m
CONFIG_LEDS_QCOM_LPG=m

#
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=m
CONFIG_LEDS_TRIGGER_ONESHOT=m
CONFIG_LEDS_TRIGGER_DISK=y
CONFIG_LEDS_TRIGGER_MTD=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CPU=y
CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_GPIO=m
CONFIG_LEDS_TRIGGER_DEFAULT_ON=m

#
# iptables trigger is under Netfilter config (LED target)
#
CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
CONFIG_LEDS_TRIGGER_PANIC=y
CONFIG_LEDS_TRIGGER_NETDEV=m
CONFIG_LEDS_TRIGGER_PATTERN=m
CONFIG_LEDS_TRIGGER_AUDIO=m
CONFIG_LEDS_TRIGGER_TTY=m

#
# Simple LED drivers
#
CONFIG_ACCESSIBILITY=y
CONFIG_A11Y_BRAILLE_CONSOLE=y

#
# Speakup console speech
#
CONFIG_SPEAKUP=m
CONFIG_SPEAKUP_SERIALIO=y
CONFIG_SPEAKUP_SYNTH_ACNTSA=m
CONFIG_SPEAKUP_SYNTH_ACNTPC=m
CONFIG_SPEAKUP_SYNTH_APOLLO=m
CONFIG_SPEAKUP_SYNTH_AUDPTR=m
CONFIG_SPEAKUP_SYNTH_BNS=m
CONFIG_SPEAKUP_SYNTH_DECTLK=m
CONFIG_SPEAKUP_SYNTH_DECEXT=m
CONFIG_SPEAKUP_SYNTH_DECPC=m
CONFIG_SPEAKUP_SYNTH_DTLK=m
CONFIG_SPEAKUP_SYNTH_KEYPC=m
CONFIG_SPEAKUP_SYNTH_LTLK=m
CONFIG_SPEAKUP_SYNTH_SOFT=m
CONFIG_SPEAKUP_SYNTH_SPKOUT=m
CONFIG_SPEAKUP_SYNTH_TXPRT=m
CONFIG_SPEAKUP_SYNTH_DUMMY=m
# end of Speakup console speech

CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MEM=y
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_ADDR_TRANS=y
CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y
CONFIG_INFINIBAND_VIRT_DMA=y
CONFIG_RDMA_SIW=m
CONFIG_INFINIBAND_IPOIB=m
CONFIG_INFINIBAND_IPOIB_CM=y
CONFIG_INFINIBAND_IPOIB_DEBUG=y
CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_ISER=m
CONFIG_INFINIBAND_ISERT=m
CONFIG_INFINIBAND_RTRS=m
CONFIG_INFINIBAND_RTRS_CLIENT=m
CONFIG_INFINIBAND_RTRS_SERVER=m
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
CONFIG_RTC_SYSTOHC=y
CONFIG_RTC_SYSTOHC_DEVICE="rtc0"
CONFIG_RTC_DEBUG=y
CONFIG_RTC_LIB_KUNIT_TEST=m
CONFIG_RTC_NVMEM=y

#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
CONFIG_RTC_INTF_DEV_UIE_EMUL=y
CONFIG_RTC_DRV_TEST=m

#
# I2C RTC drivers
#
CONFIG_RTC_DRV_88PM80X=m
CONFIG_RTC_DRV_ABB5ZES3=m
CONFIG_RTC_DRV_ABEOZ9=m
CONFIG_RTC_DRV_ABX80X=m
CONFIG_RTC_DRV_BRCMSTB=m
CONFIG_RTC_DRV_DS1307=m
CONFIG_RTC_DRV_DS1307_CENTURY=y
CONFIG_RTC_DRV_DS1374=m
CONFIG_RTC_DRV_DS1374_WDT=y
CONFIG_RTC_DRV_DS1672=m
CONFIG_RTC_DRV_HYM8563=m
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX8907=m
CONFIG_RTC_DRV_MAX77686=m
CONFIG_RTC_DRV_NCT3018Y=m
CONFIG_RTC_DRV_RK808=m
CONFIG_RTC_DRV_RS5C372=m
CONFIG_RTC_DRV_ISL1208=m
CONFIG_RTC_DRV_ISL12022=m
CONFIG_RTC_DRV_ISL12026=m
CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_PCF8523=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF85363=m
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_M41T80=m
CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_BQ32K=m
CONFIG_RTC_DRV_RC5T619=m
CONFIG_RTC_DRV_S35390A=m
CONFIG_RTC_DRV_FM3130=m
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8581=m
CONFIG_RTC_DRV_RX8025=m
CONFIG_RTC_DRV_EM3027=m
CONFIG_RTC_DRV_RV3028=m
CONFIG_RTC_DRV_RV3032=m
CONFIG_RTC_DRV_RV8803=m
CONFIG_RTC_DRV_S5M=m
CONFIG_RTC_DRV_SD3078=m

#
# SPI RTC drivers
#
CONFIG_RTC_DRV_M41T93=m
CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_DS1302=m
CONFIG_RTC_DRV_DS1305=m
CONFIG_RTC_DRV_DS1343=m
CONFIG_RTC_DRV_DS1347=m
CONFIG_RTC_DRV_DS1390=m
CONFIG_RTC_DRV_MAX6916=m
CONFIG_RTC_DRV_R9701=m
CONFIG_RTC_DRV_RX4581=m
CONFIG_RTC_DRV_RS5C348=m
CONFIG_RTC_DRV_MAX6902=m
CONFIG_RTC_DRV_PCF2123=m
CONFIG_RTC_DRV_MCP795=m
CONFIG_RTC_I2C_AND_SPI=m

#
# SPI and I2C RTC drivers
#
CONFIG_RTC_DRV_DS3232=m
CONFIG_RTC_DRV_DS3232_HWMON=y
CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_RV3029C2=m
CONFIG_RTC_DRV_RV3029_HWMON=y
CONFIG_RTC_DRV_RX6110=m

#
# Platform RTC drivers
#
CONFIG_RTC_DRV_DS1286=m
CONFIG_RTC_DRV_DS1511=m
CONFIG_RTC_DRV_DS1553=m
CONFIG_RTC_DRV_DS1685_FAMILY=m
CONFIG_RTC_DRV_DS1685=y
# CONFIG_RTC_DRV_DS1689 is not set
# CONFIG_RTC_DRV_DS17285 is not set
# CONFIG_RTC_DRV_DS17485 is not set
# CONFIG_RTC_DRV_DS17885 is not set
CONFIG_RTC_DRV_DS1742=m
CONFIG_RTC_DRV_DS2404=m
CONFIG_RTC_DRV_DA9052=m
CONFIG_RTC_DRV_DA9063=m
CONFIG_RTC_DRV_STK17TA8=m
CONFIG_RTC_DRV_M48T86=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
CONFIG_RTC_DRV_MSM6242=m
CONFIG_RTC_DRV_BQ4802=m
CONFIG_RTC_DRV_RP5C01=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_GAMECUBE=m
CONFIG_RTC_DRV_WM831X=m
CONFIG_RTC_DRV_SC27XX=m
CONFIG_RTC_DRV_SPEAR=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_ZYNQMP=m
CONFIG_RTC_DRV_CROS_EC=m
CONFIG_RTC_DRV_NTXEC=m

#
# on-CPU RTC drivers
#
CONFIG_RTC_DRV_ASM9260=m
CONFIG_RTC_DRV_DAVINCI=m
CONFIG_RTC_DRV_DIGICOLOR=m
CONFIG_RTC_DRV_FSL_FTM_ALARM=m
CONFIG_RTC_DRV_MESON=m
CONFIG_RTC_DRV_MESON_VRTC=m
CONFIG_RTC_DRV_OMAP=m
CONFIG_RTC_DRV_S3C=m
CONFIG_RTC_DRV_EP93XX=m
CONFIG_RTC_DRV_AT91RM9200=m
CONFIG_RTC_DRV_AT91SAM9=m
CONFIG_RTC_DRV_RZN1=m
CONFIG_RTC_DRV_GENERIC=m
CONFIG_RTC_DRV_VT8500=m
CONFIG_RTC_DRV_SUN6I=y
CONFIG_RTC_DRV_SUNXI=m
CONFIG_RTC_DRV_MV=m
CONFIG_RTC_DRV_ARMADA38X=m
CONFIG_RTC_DRV_CADENCE=m
CONFIG_RTC_DRV_FTRTC010=m
CONFIG_RTC_DRV_STMP=m
CONFIG_RTC_DRV_PCAP=m
CONFIG_RTC_DRV_MC13XXX=m
CONFIG_RTC_DRV_JZ4740=m
CONFIG_RTC_DRV_LPC24XX=m
CONFIG_RTC_DRV_LPC32XX=m
CONFIG_RTC_DRV_PM8XXX=m
CONFIG_RTC_DRV_TEGRA=m
CONFIG_RTC_DRV_MXC=m
CONFIG_RTC_DRV_MXC_V2=m
CONFIG_RTC_DRV_SNVS=m
CONFIG_RTC_DRV_MOXART=m
CONFIG_RTC_DRV_MT2712=m
CONFIG_RTC_DRV_MT6397=m
CONFIG_RTC_DRV_MT7622=m
CONFIG_RTC_DRV_XGENE=m
CONFIG_RTC_DRV_R7301=m
CONFIG_RTC_DRV_STM32=m
CONFIG_RTC_DRV_CPCAP=m
CONFIG_RTC_DRV_RTD119X=y
CONFIG_RTC_DRV_ASPEED=m
CONFIG_RTC_DRV_TI_K3=m

#
# HID Sensor RTC drivers
#
CONFIG_RTC_DRV_HID_SENSOR_TIME=m
CONFIG_RTC_DRV_GOLDFISH=y
CONFIG_RTC_DRV_MSC313=m
CONFIG_DMADEVICES=y
CONFIG_DMADEVICES_DEBUG=y
CONFIG_DMADEVICES_VDEBUG=y

#
# DMA Devices
#
CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=y
CONFIG_DMA_ENGINE=y
CONFIG_DMA_VIRTUAL_CHANNELS=y
CONFIG_DMA_OF=y
CONFIG_ALTERA_MSGDMA=m
CONFIG_APPLE_ADMAC=m
CONFIG_AXI_DMAC=m
CONFIG_BCM_SBA_RAID=m
CONFIG_DMA_JZ4780=m
CONFIG_DMA_SA11X0=m
CONFIG_DMA_SUN6I=m
CONFIG_DW_AXI_DMAC=m
CONFIG_EP93XX_DMA=y
CONFIG_FSL_EDMA=m
CONFIG_IMG_MDC_DMA=m
CONFIG_INTEL_IDMA64=m
CONFIG_INTEL_IOP_ADMA=m
CONFIG_K3_DMA=m
CONFIG_MCF_EDMA=m
CONFIG_MILBEAUT_HDMAC=m
CONFIG_MILBEAUT_XDMAC=m
CONFIG_MMP_PDMA=m
CONFIG_MMP_TDMA=m
CONFIG_MV_XOR=y
CONFIG_MXS_DMA=y
CONFIG_NBPFAXI_DMA=m
CONFIG_STM32_DMA=y
CONFIG_STM32_DMAMUX=y
CONFIG_STM32_MDMA=y
CONFIG_SPRD_DMA=m
CONFIG_S3C24XX_DMAC=y
CONFIG_TEGRA20_APB_DMA=m
CONFIG_TEGRA210_ADMA=m
CONFIG_TIMB_DMA=m
CONFIG_UNIPHIER_MDMAC=m
CONFIG_UNIPHIER_XDMAC=m
CONFIG_XGENE_DMA=m
CONFIG_XILINX_ZYNQMP_DMA=m
CONFIG_XILINX_ZYNQMP_DPDMA=m
CONFIG_MTK_HSDMA=m
CONFIG_MTK_CQDMA=m
CONFIG_MTK_UART_APDMA=m
CONFIG_QCOM_ADM=m
CONFIG_QCOM_HIDMA_MGMT=m
CONFIG_QCOM_HIDMA=m
CONFIG_DW_DMAC_CORE=m
CONFIG_DW_DMAC=m
CONFIG_RZN1_DMAMUX=m
CONFIG_SF_PDMA=m
CONFIG_RENESAS_DMA=y
CONFIG_SH_DMAE_BASE=y
CONFIG_SH_DMAE=m
CONFIG_RCAR_DMAC=m
CONFIG_RENESAS_USB_DMAC=m
CONFIG_RZ_DMAC=m
CONFIG_TI_EDMA=m
CONFIG_DMA_OMAP=m
CONFIG_TI_DMA_CROSSBAR=y
CONFIG_INTEL_LDMA=y

#
# DMA Clients
#
CONFIG_ASYNC_TX_DMA=y
CONFIG_DMATEST=m
CONFIG_DMA_ENGINE_RAID=y

#
# DMABUF options
#
CONFIG_SYNC_FILE=y
CONFIG_SW_SYNC=y
CONFIG_UDMABUF=y
CONFIG_DMABUF_MOVE_NOTIFY=y
CONFIG_DMABUF_DEBUG=y
CONFIG_DMABUF_SELFTESTS=m
CONFIG_DMABUF_HEAPS=y
CONFIG_DMABUF_SYSFS_STATS=y
CONFIG_DMABUF_HEAPS_SYSTEM=y
# end of DMABUF options

CONFIG_AUXDISPLAY=y
CONFIG_CHARLCD=m
CONFIG_LINEDISP=m
CONFIG_HD44780_COMMON=m
CONFIG_HD44780=m
CONFIG_KS0108=m
CONFIG_KS0108_PORT=0x378
CONFIG_KS0108_DELAY=2
CONFIG_IMG_ASCII_LCD=m
CONFIG_HT16K33=m
CONFIG_LCD2S=m
CONFIG_PARPORT_PANEL=m
CONFIG_PANEL_PARPORT=0
CONFIG_PANEL_PROFILE=5
CONFIG_PANEL_CHANGE_MESSAGE=y
CONFIG_PANEL_BOOT_MESSAGE=""
# CONFIG_CHARLCD_BL_OFF is not set
# CONFIG_CHARLCD_BL_ON is not set
CONFIG_CHARLCD_BL_FLASH=y
CONFIG_PANEL=m
CONFIG_UIO=m
CONFIG_UIO_PDRV_GENIRQ=m
CONFIG_UIO_DMEM_GENIRQ=m
CONFIG_UIO_PRUSS=m
CONFIG_UIO_DFL=m
CONFIG_VFIO=m
CONFIG_VFIO_VIRQFD=m
CONFIG_VFIO_NOIOMMU=y
CONFIG_VFIO_PLATFORM=m
CONFIG_VFIO_AMBA=m
CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET=m
CONFIG_VFIO_PLATFORM_AMDXGBE_RESET=m
CONFIG_VFIO_PLATFORM_BCMFLEXRM_RESET=m
CONFIG_VFIO_MDEV=m
CONFIG_IRQ_BYPASS_MANAGER=m
CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_ANCHOR=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_VDPA=m
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_INPUT=m
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_VIRTIO_DMA_SHARED_BUFFER=m
CONFIG_VDPA=m
CONFIG_VDPA_SIM=m
CONFIG_VDPA_SIM_NET=m
CONFIG_VDPA_SIM_BLOCK=m
CONFIG_VDPA_USER=m
CONFIG_VHOST_IOTLB=m
CONFIG_VHOST_RING=m
CONFIG_VHOST=m
CONFIG_VHOST_MENU=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
CONFIG_VHOST_VDPA=m
CONFIG_VHOST_CROSS_ENDIAN_LEGACY=y

#
# Microsoft Hyper-V guest support
#
# end of Microsoft Hyper-V guest support

CONFIG_GREYBUS=m
CONFIG_GREYBUS_ES2=m
CONFIG_COMEDI=m
CONFIG_COMEDI_DEBUG=y
CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048
CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480
CONFIG_COMEDI_MISC_DRIVERS=y
CONFIG_COMEDI_BOND=m
CONFIG_COMEDI_TEST=m
CONFIG_COMEDI_PARPORT=m
CONFIG_COMEDI_SSV_DNP=m
CONFIG_COMEDI_ISA_DRIVERS=y
CONFIG_COMEDI_PCL711=m
CONFIG_COMEDI_PCL724=m
CONFIG_COMEDI_PCL726=m
CONFIG_COMEDI_PCL730=m
CONFIG_COMEDI_PCL812=m
CONFIG_COMEDI_PCL816=m
CONFIG_COMEDI_PCL818=m
CONFIG_COMEDI_PCM3724=m
CONFIG_COMEDI_AMPLC_DIO200_ISA=m
CONFIG_COMEDI_AMPLC_PC236_ISA=m
CONFIG_COMEDI_AMPLC_PC263_ISA=m
CONFIG_COMEDI_RTI800=m
CONFIG_COMEDI_RTI802=m
CONFIG_COMEDI_DAC02=m
CONFIG_COMEDI_DAS16M1=m
CONFIG_COMEDI_DAS08_ISA=m
CONFIG_COMEDI_DAS16=m
CONFIG_COMEDI_DAS800=m
CONFIG_COMEDI_DAS1800=m
CONFIG_COMEDI_DAS6402=m
CONFIG_COMEDI_DT2801=m
CONFIG_COMEDI_DT2811=m
CONFIG_COMEDI_DT2814=m
CONFIG_COMEDI_DT2815=m
CONFIG_COMEDI_DT2817=m
CONFIG_COMEDI_DT282X=m
CONFIG_COMEDI_DMM32AT=m
CONFIG_COMEDI_FL512=m
CONFIG_COMEDI_AIO_AIO12_8=m
CONFIG_COMEDI_AIO_IIRO_16=m
CONFIG_COMEDI_II_PCI20KC=m
CONFIG_COMEDI_C6XDIGIO=m
CONFIG_COMEDI_MPC624=m
CONFIG_COMEDI_ADQ12B=m
CONFIG_COMEDI_NI_AT_A2150=m
CONFIG_COMEDI_NI_AT_AO=m
CONFIG_COMEDI_NI_ATMIO=m
CONFIG_COMEDI_NI_ATMIO16D=m
CONFIG_COMEDI_NI_LABPC_ISA=m
CONFIG_COMEDI_PCMAD=m
CONFIG_COMEDI_PCMDA12=m
CONFIG_COMEDI_PCMMIO=m
CONFIG_COMEDI_PCMUIO=m
CONFIG_COMEDI_MULTIQ3=m
CONFIG_COMEDI_S526=m
CONFIG_COMEDI_PCMCIA_DRIVERS=m
CONFIG_COMEDI_CB_DAS16_CS=m
CONFIG_COMEDI_DAS08_CS=m
CONFIG_COMEDI_NI_DAQ_700_CS=m
CONFIG_COMEDI_NI_DAQ_DIO24_CS=m
CONFIG_COMEDI_NI_LABPC_CS=m
CONFIG_COMEDI_NI_MIO_CS=m
CONFIG_COMEDI_QUATECH_DAQP_CS=m
CONFIG_COMEDI_USB_DRIVERS=m
CONFIG_COMEDI_DT9812=m
CONFIG_COMEDI_NI_USB6501=m
CONFIG_COMEDI_USBDUX=m
CONFIG_COMEDI_USBDUXFAST=m
CONFIG_COMEDI_USBDUXSIGMA=m
CONFIG_COMEDI_VMK80XX=m
CONFIG_COMEDI_8254=m
CONFIG_COMEDI_8255=m
CONFIG_COMEDI_8255_SA=m
CONFIG_COMEDI_KCOMEDILIB=m
CONFIG_COMEDI_AMPLC_DIO200=m
CONFIG_COMEDI_AMPLC_PC236=m
CONFIG_COMEDI_DAS08=m
CONFIG_COMEDI_NI_LABPC=m
CONFIG_COMEDI_NI_TIO=m
CONFIG_COMEDI_NI_ROUTING=m
CONFIG_COMEDI_TESTS=m
CONFIG_COMEDI_TESTS_EXAMPLE=m
CONFIG_COMEDI_TESTS_NI_ROUTES=m
CONFIG_STAGING=y
CONFIG_PRISM2_USB=m
CONFIG_RTLLIB=m
CONFIG_RTLLIB_CRYPTO_CCMP=m
CONFIG_RTLLIB_CRYPTO_TKIP=m
CONFIG_RTLLIB_CRYPTO_WEP=m
CONFIG_RTL8723BS=m
CONFIG_R8712U=m
CONFIG_R8188EU=m
CONFIG_OCTEON_ETHERNET=m
CONFIG_VT6656=m

#
# IIO staging drivers
#

#
# Accelerometers
#
CONFIG_ADIS16203=m
CONFIG_ADIS16240=m
# end of Accelerometers

#
# Analog to digital converters
#
CONFIG_AD7816=m
# end of Analog to digital converters

#
# Analog digital bi-direction converters
#
CONFIG_ADT7316=m
CONFIG_ADT7316_SPI=m
CONFIG_ADT7316_I2C=m
# end of Analog digital bi-direction converters

#
# Direct Digital Synthesis
#
CONFIG_AD9832=m
CONFIG_AD9834=m
# end of Direct Digital Synthesis

#
# Network Analyzer, Impedance Converters
#
CONFIG_AD5933=m
# end of Network Analyzer, Impedance Converters

#
# Active energy metering IC
#
CONFIG_ADE7854=m
CONFIG_ADE7854_I2C=m
CONFIG_ADE7854_SPI=m
# end of Active energy metering IC

#
# Resolver to digital converters
#
CONFIG_AD2S1210=m
# end of Resolver to digital converters
# end of IIO staging drivers

CONFIG_USB_EMXX=m
CONFIG_STAGING_MEDIA=y
CONFIG_VIDEO_IMX_MEDIA=m

#
# i.MX5/6/7/8 Media Sub devices
#
CONFIG_VIDEO_IMX_CSI=m
CONFIG_VIDEO_IMX7_CSI=m
# end of i.MX5/6/7/8 Media Sub devices

CONFIG_VIDEO_MAX96712=m
CONFIG_VIDEO_MESON_VDEC=m
CONFIG_VIDEO_OMAP4=m
CONFIG_VIDEO_ROCKCHIP_VDEC=m
CONFIG_VIDEO_SUNXI=y
CONFIG_VIDEO_SUNXI_CEDRUS=m
CONFIG_STAGING_MEDIA_DEPRECATED=y
CONFIG_VIDEO_CPIA2=m
CONFIG_VIDEO_VIU=m
CONFIG_VIDEO_STKWEBCAM=m
CONFIG_VIDEO_TM6000=m
CONFIG_VIDEO_TM6000_ALSA=m
CONFIG_VIDEO_TM6000_DVB=m
CONFIG_VIDEO_DM6446_CCDC=m
CONFIG_VIDEO_DM355_CCDC=m
CONFIG_VIDEO_DM365_ISIF=m
CONFIG_USB_ZR364XX=m
CONFIG_STAGING_BOARD=y
CONFIG_LTE_GDM724X=m
CONFIG_FB_TFT=m
CONFIG_FB_TFT_AGM1264K_FL=m
CONFIG_FB_TFT_BD663474=m
CONFIG_FB_TFT_HX8340BN=m
CONFIG_FB_TFT_HX8347D=m
CONFIG_FB_TFT_HX8353D=m
CONFIG_FB_TFT_HX8357D=m
CONFIG_FB_TFT_ILI9163=m
CONFIG_FB_TFT_ILI9320=m
CONFIG_FB_TFT_ILI9325=m
CONFIG_FB_TFT_ILI9340=m
CONFIG_FB_TFT_ILI9341=m
CONFIG_FB_TFT_ILI9481=m
CONFIG_FB_TFT_ILI9486=m
CONFIG_FB_TFT_PCD8544=m
CONFIG_FB_TFT_RA8875=m
CONFIG_FB_TFT_S6D02A1=m
CONFIG_FB_TFT_S6D1121=m
CONFIG_FB_TFT_SEPS525=m
CONFIG_FB_TFT_SH1106=m
CONFIG_FB_TFT_SSD1289=m
CONFIG_FB_TFT_SSD1305=m
CONFIG_FB_TFT_SSD1306=m
CONFIG_FB_TFT_SSD1331=m
CONFIG_FB_TFT_SSD1351=m
CONFIG_FB_TFT_ST7735R=m
CONFIG_FB_TFT_ST7789V=m
CONFIG_FB_TFT_TINYLCD=m
CONFIG_FB_TFT_TLS8204=m
CONFIG_FB_TFT_UC1611=m
CONFIG_FB_TFT_UC1701=m
CONFIG_FB_TFT_UPD161704=m
CONFIG_MOST_COMPONENTS=m
CONFIG_MOST_NET=m
CONFIG_MOST_VIDEO=m
CONFIG_MOST_DIM2=m
CONFIG_MOST_I2C=m
CONFIG_KS7010=m
CONFIG_GREYBUS_AUDIO=m
CONFIG_GREYBUS_AUDIO_APB_CODEC=m
CONFIG_GREYBUS_BOOTROM=m
CONFIG_GREYBUS_FIRMWARE=m
CONFIG_GREYBUS_HID=m
CONFIG_GREYBUS_LIGHT=m
CONFIG_GREYBUS_LOG=m
CONFIG_GREYBUS_LOOPBACK=m
CONFIG_GREYBUS_POWER=m
CONFIG_GREYBUS_RAW=m
CONFIG_GREYBUS_VIBRATOR=m
CONFIG_GREYBUS_BRIDGED_PHY=m
CONFIG_GREYBUS_GPIO=m
CONFIG_GREYBUS_I2C=m
CONFIG_GREYBUS_PWM=m
CONFIG_GREYBUS_SDIO=m
CONFIG_GREYBUS_SPI=m
CONFIG_GREYBUS_UART=m
CONFIG_GREYBUS_USB=m
CONFIG_GREYBUS_ARCHE=m
CONFIG_BCM_VIDEOCORE=m
CONFIG_BCM2835_VCHIQ=m
CONFIG_VCHIQ_CDEV=y
CONFIG_SND_BCM2835=m
CONFIG_VIDEO_BCM2835=m
CONFIG_BCM2835_VCHIQ_MMAL=m
CONFIG_PI433=m
CONFIG_XIL_AXIS_FIFO=m
CONFIG_FIELDBUS_DEV=m
CONFIG_HMS_ANYBUSS_BUS=m
CONFIG_ARCX_ANYBUS_CONTROLLER=m
CONFIG_HMS_PROFINET=m
CONFIG_GOLDFISH=y
CONFIG_GOLDFISH_PIPE=m
CONFIG_CHROME_PLATFORMS=y
CONFIG_CROS_EC=m
CONFIG_CROS_EC_I2C=m
CONFIG_CROS_EC_RPMSG=m
CONFIG_CROS_EC_SPI=m
CONFIG_CROS_EC_PROTO=y
CONFIG_CROS_KBD_LED_BACKLIGHT=m
CONFIG_CROS_EC_CHARDEV=m
CONFIG_CROS_EC_LIGHTBAR=m
CONFIG_CROS_EC_VBC=m
CONFIG_CROS_EC_DEBUGFS=m
CONFIG_CROS_EC_SENSORHUB=m
CONFIG_CROS_EC_SYSFS=m
CONFIG_CROS_EC_TYPEC=m
CONFIG_CROS_USBPD_LOGGER=m
CONFIG_CROS_USBPD_NOTIFY=m
CONFIG_CROS_KUNIT=m
CONFIG_MELLANOX_PLATFORM=y
CONFIG_MLXREG_HOTPLUG=m
CONFIG_MLXREG_IO=m
CONFIG_MLXREG_LC=m
CONFIG_NVSW_SN2201=m
CONFIG_OLPC_EC=y
CONFIG_OLPC_XO175=y
CONFIG_OLPC_XO175_EC=m
CONFIG_SURFACE_PLATFORMS=y
CONFIG_HAVE_CLK=y
CONFIG_HAVE_CLK_PREPARE=y
CONFIG_COMMON_CLK=y
CONFIG_COMMON_CLK_WM831X=m

#
# Clock driver for ARM Reference designs
#
CONFIG_CLK_ICST=y
CONFIG_CLK_SP810=y
# end of Clock driver for ARM Reference designs

CONFIG_CLK_HSDK=y
CONFIG_LMK04832=m
CONFIG_COMMON_CLK_APPLE_NCO=m
CONFIG_COMMON_CLK_MAX77686=m
CONFIG_COMMON_CLK_MAX9485=m
CONFIG_COMMON_CLK_RK808=m
CONFIG_COMMON_CLK_HI655X=m
CONFIG_COMMON_CLK_SCMI=m
CONFIG_COMMON_CLK_SCPI=m
CONFIG_COMMON_CLK_SI5341=m
CONFIG_COMMON_CLK_SI5351=m
CONFIG_COMMON_CLK_SI514=m
CONFIG_COMMON_CLK_SI544=m
CONFIG_COMMON_CLK_SI570=m
CONFIG_COMMON_CLK_BM1880=y
CONFIG_COMMON_CLK_CDCE706=m
CONFIG_COMMON_CLK_TPS68470=m
CONFIG_COMMON_CLK_CDCE925=m
CONFIG_COMMON_CLK_CS2000_CP=m
CONFIG_COMMON_CLK_EN7523=y
CONFIG_COMMON_CLK_FSL_FLEXSPI=m
CONFIG_COMMON_CLK_FSL_SAI=y
CONFIG_COMMON_CLK_GEMINI=y
CONFIG_COMMON_CLK_LAN966X=m
CONFIG_COMMON_CLK_ASPEED=y
CONFIG_COMMON_CLK_S2MPS11=m
CONFIG_COMMON_CLK_AXI_CLKGEN=m
CONFIG_CLK_QORIQ=y
CONFIG_CLK_LS1028A_PLLDIG=m
CONFIG_COMMON_CLK_XGENE=y
CONFIG_COMMON_CLK_PWM=m
CONFIG_COMMON_CLK_OXNAS=y
CONFIG_COMMON_CLK_RS9_PCIE=m
CONFIG_COMMON_CLK_VC5=m
CONFIG_COMMON_CLK_VC7=m
CONFIG_COMMON_CLK_MMP2_AUDIO=m
CONFIG_COMMON_CLK_FIXED_MMIO=y
CONFIG_CLK_ACTIONS=y
CONFIG_CLK_OWL_S500=y
CONFIG_CLK_OWL_S700=y
CONFIG_CLK_OWL_S900=y
CONFIG_CLK_ANALOGBITS_WRPLL_CLN28HPC=y
CONFIG_CLK_BAIKAL_T1=y
CONFIG_CLK_BT1_CCU_PLL=y
CONFIG_CLK_BT1_CCU_DIV=y
CONFIG_CLK_BT1_CCU_RST=y
CONFIG_CLK_BCM2711_DVP=m
CONFIG_CLK_BCM2835=y
CONFIG_CLK_BCM_63XX=y
CONFIG_CLK_BCM_63XX_GATE=y
CONFIG_CLK_BCM_KONA=y
CONFIG_COMMON_CLK_IPROC=y
CONFIG_CLK_BCM_CYGNUS=y
CONFIG_CLK_BCM_HR2=y
CONFIG_CLK_BCM_NSP=y
CONFIG_CLK_BCM_NS2=y
CONFIG_CLK_BCM_SR=y
CONFIG_CLK_RASPBERRYPI=m
CONFIG_COMMON_CLK_HI3516CV300=m
CONFIG_COMMON_CLK_HI3519=m
CONFIG_COMMON_CLK_HI3559A=y
CONFIG_COMMON_CLK_HI3660=y
CONFIG_COMMON_CLK_HI3670=y
CONFIG_COMMON_CLK_HI3798CV200=m
CONFIG_COMMON_CLK_HI6220=y
CONFIG_RESET_HISI=y
CONFIG_STUB_CLK_HI6220=y
CONFIG_STUB_CLK_HI3660=y
CONFIG_COMMON_CLK_BOSTON=y
CONFIG_MXC_CLK=m
CONFIG_CLK_IMX8MM=m
CONFIG_CLK_IMX8MN=m
CONFIG_CLK_IMX8MP=m
CONFIG_CLK_IMX8MQ=m
CONFIG_CLK_IMX8ULP=m
CONFIG_CLK_IMX93=m

#
# Ingenic SoCs drivers
#
CONFIG_INGENIC_CGU_COMMON=y
CONFIG_INGENIC_CGU_JZ4740=y
CONFIG_INGENIC_CGU_JZ4755=y
CONFIG_INGENIC_CGU_JZ4725B=y
CONFIG_INGENIC_CGU_JZ4760=y
CONFIG_INGENIC_CGU_JZ4770=y
CONFIG_INGENIC_CGU_JZ4780=y
CONFIG_INGENIC_CGU_X1000=y
CONFIG_INGENIC_CGU_X1830=y
CONFIG_INGENIC_TCU_CLK=y
# end of Ingenic SoCs drivers

CONFIG_COMMON_CLK_KEYSTONE=m
CONFIG_TI_SYSCON_CLK=m

#
# Clock driver for MediaTek SoC
#
CONFIG_COMMON_CLK_MEDIATEK=y
CONFIG_COMMON_CLK_MEDIATEK_FHCTL=y
CONFIG_COMMON_CLK_MT2701=y
CONFIG_COMMON_CLK_MT2701_MMSYS=y
CONFIG_COMMON_CLK_MT2701_IMGSYS=y
CONFIG_COMMON_CLK_MT2701_VDECSYS=y
CONFIG_COMMON_CLK_MT2701_HIFSYS=y
CONFIG_COMMON_CLK_MT2701_ETHSYS=y
CONFIG_COMMON_CLK_MT2701_BDPSYS=y
CONFIG_COMMON_CLK_MT2701_AUDSYS=y
CONFIG_COMMON_CLK_MT2701_G3DSYS=y
CONFIG_COMMON_CLK_MT2712=y
CONFIG_COMMON_CLK_MT2712_BDPSYS=y
CONFIG_COMMON_CLK_MT2712_IMGSYS=y
CONFIG_COMMON_CLK_MT2712_JPGDECSYS=y
CONFIG_COMMON_CLK_MT2712_MFGCFG=y
CONFIG_COMMON_CLK_MT2712_MMSYS=y
CONFIG_COMMON_CLK_MT2712_VDECSYS=y
CONFIG_COMMON_CLK_MT2712_VENCSYS=y
CONFIG_COMMON_CLK_MT6765=y
CONFIG_COMMON_CLK_MT6765_AUDIOSYS=y
CONFIG_COMMON_CLK_MT6765_CAMSYS=y
CONFIG_COMMON_CLK_MT6765_GCESYS=y
CONFIG_COMMON_CLK_MT6765_MMSYS=y
CONFIG_COMMON_CLK_MT6765_IMGSYS=y
CONFIG_COMMON_CLK_MT6765_VCODECSYS=y
CONFIG_COMMON_CLK_MT6765_MFGSYS=y
CONFIG_COMMON_CLK_MT6765_MIPI0ASYS=y
CONFIG_COMMON_CLK_MT6765_MIPI0BSYS=y
CONFIG_COMMON_CLK_MT6765_MIPI1ASYS=y
CONFIG_COMMON_CLK_MT6765_MIPI1BSYS=y
CONFIG_COMMON_CLK_MT6765_MIPI2ASYS=y
CONFIG_COMMON_CLK_MT6765_MIPI2BSYS=y
CONFIG_COMMON_CLK_MT6779=m
CONFIG_COMMON_CLK_MT6779_MMSYS=m
CONFIG_COMMON_CLK_MT6779_IMGSYS=m
CONFIG_COMMON_CLK_MT6779_IPESYS=m
CONFIG_COMMON_CLK_MT6779_CAMSYS=m
CONFIG_COMMON_CLK_MT6779_VDECSYS=m
CONFIG_COMMON_CLK_MT6779_VENCSYS=m
CONFIG_COMMON_CLK_MT6779_MFGCFG=m
CONFIG_COMMON_CLK_MT6779_AUDSYS=m
CONFIG_COMMON_CLK_MT6795=m
CONFIG_COMMON_CLK_MT6795_MFGCFG=m
CONFIG_COMMON_CLK_MT6795_MMSYS=m
CONFIG_COMMON_CLK_MT6795_VDECSYS=m
CONFIG_COMMON_CLK_MT6795_VENCSYS=m
CONFIG_COMMON_CLK_MT6797=y
CONFIG_COMMON_CLK_MT6797_MMSYS=y
CONFIG_COMMON_CLK_MT6797_IMGSYS=y
CONFIG_COMMON_CLK_MT6797_VDECSYS=y
CONFIG_COMMON_CLK_MT6797_VENCSYS=y
CONFIG_COMMON_CLK_MT7622=y
CONFIG_COMMON_CLK_MT7622_ETHSYS=y
CONFIG_COMMON_CLK_MT7622_HIFSYS=y
CONFIG_COMMON_CLK_MT7622_AUDSYS=y
CONFIG_COMMON_CLK_MT7629=y
CONFIG_COMMON_CLK_MT7629_ETHSYS=y
CONFIG_COMMON_CLK_MT7629_HIFSYS=y
CONFIG_COMMON_CLK_MT7986=y
CONFIG_COMMON_CLK_MT7986_ETHSYS=y
CONFIG_COMMON_CLK_MT8135=y
CONFIG_COMMON_CLK_MT8167=y
CONFIG_COMMON_CLK_MT8167_AUDSYS=y
CONFIG_COMMON_CLK_MT8167_IMGSYS=y
CONFIG_COMMON_CLK_MT8167_MFGCFG=y
CONFIG_COMMON_CLK_MT8167_MMSYS=y
CONFIG_COMMON_CLK_MT8167_VDECSYS=y
CONFIG_COMMON_CLK_MT8173=m
CONFIG_COMMON_CLK_MT8173_IMGSYS=m
CONFIG_COMMON_CLK_MT8173_MMSYS=m
CONFIG_COMMON_CLK_MT8173_VDECSYS=m
CONFIG_COMMON_CLK_MT8173_VENCSYS=m
CONFIG_COMMON_CLK_MT8183=y
CONFIG_COMMON_CLK_MT8183_AUDIOSYS=y
CONFIG_COMMON_CLK_MT8183_CAMSYS=y
CONFIG_COMMON_CLK_MT8183_IMGSYS=y
CONFIG_COMMON_CLK_MT8183_IPU_CORE0=y
CONFIG_COMMON_CLK_MT8183_IPU_CORE1=y
CONFIG_COMMON_CLK_MT8183_IPU_ADL=y
CONFIG_COMMON_CLK_MT8183_IPU_CONN=y
CONFIG_COMMON_CLK_MT8183_MFGCFG=y
CONFIG_COMMON_CLK_MT8183_MMSYS=y
CONFIG_COMMON_CLK_MT8183_VDECSYS=y
CONFIG_COMMON_CLK_MT8183_VENCSYS=y
CONFIG_COMMON_CLK_MT8186=y
CONFIG_COMMON_CLK_MT8192=y
CONFIG_COMMON_CLK_MT8192_AUDSYS=y
CONFIG_COMMON_CLK_MT8192_CAMSYS=y
CONFIG_COMMON_CLK_MT8192_IMGSYS=y
CONFIG_COMMON_CLK_MT8192_IMP_IIC_WRAP=y
CONFIG_COMMON_CLK_MT8192_IPESYS=y
CONFIG_COMMON_CLK_MT8192_MDPSYS=y
CONFIG_COMMON_CLK_MT8192_MFGCFG=y
CONFIG_COMMON_CLK_MT8192_MMSYS=y
CONFIG_COMMON_CLK_MT8192_MSDC=y
CONFIG_COMMON_CLK_MT8192_SCP_ADSP=y
CONFIG_COMMON_CLK_MT8192_VDECSYS=y
CONFIG_COMMON_CLK_MT8192_VENCSYS=y
CONFIG_COMMON_CLK_MT8195=y
CONFIG_COMMON_CLK_MT8365=m
CONFIG_COMMON_CLK_MT8365_APU=m
CONFIG_COMMON_CLK_MT8365_CAM=m
CONFIG_COMMON_CLK_MT8365_MFG=m
CONFIG_COMMON_CLK_MT8365_MMSYS=m
CONFIG_COMMON_CLK_MT8365_VDEC=m
CONFIG_COMMON_CLK_MT8365_VENC=m
CONFIG_COMMON_CLK_MT8516=y
CONFIG_COMMON_CLK_MT8516_AUDSYS=y
# end of Clock driver for MediaTek SoC

#
# Clock support for Amlogic platforms
#
# CONFIG_COMMON_CLK_AXG_AUDIO is not set
# end of Clock support for Amlogic platforms

CONFIG_MSTAR_MSC313_CPUPLL=y
CONFIG_MSTAR_MSC313_MPLL=y
CONFIG_MCHP_CLK_MPFS=y
CONFIG_COMMON_CLK_PISTACHIO=y
CONFIG_QCOM_GDSC=y
CONFIG_QCOM_RPMCC=y
CONFIG_COMMON_CLK_QCOM=m
CONFIG_QCOM_A53PLL=m
CONFIG_QCOM_A7PLL=m
CONFIG_QCOM_CLK_APCS_MSM8916=m
CONFIG_QCOM_CLK_APCS_SDX55=m
CONFIG_QCOM_CLK_SMD_RPM=m
CONFIG_QCOM_CLK_RPMH=m
CONFIG_APQ_GCC_8084=m
CONFIG_APQ_MMCC_8084=m
CONFIG_IPQ_APSS_PLL=m
CONFIG_IPQ_APSS_6018=m
CONFIG_IPQ_GCC_4019=m
CONFIG_IPQ_GCC_6018=m
CONFIG_IPQ_GCC_806X=m
CONFIG_IPQ_LCC_806X=m
CONFIG_IPQ_GCC_8074=m
CONFIG_MSM_GCC_8660=m
CONFIG_MSM_GCC_8909=m
CONFIG_MSM_GCC_8916=m
CONFIG_MSM_GCC_8939=m
CONFIG_MSM_GCC_8960=m
CONFIG_MSM_LCC_8960=m
CONFIG_MDM_GCC_9607=m
CONFIG_MDM_GCC_9615=m
CONFIG_MDM_LCC_9615=m
CONFIG_MSM_MMCC_8960=m
CONFIG_MSM_GCC_8953=m
CONFIG_MSM_GCC_8974=m
CONFIG_MSM_MMCC_8974=m
CONFIG_MSM_GCC_8976=m
CONFIG_MSM_MMCC_8994=m
CONFIG_MSM_GCC_8994=m
CONFIG_MSM_GCC_8996=m
CONFIG_MSM_MMCC_8996=m
CONFIG_MSM_GCC_8998=m
CONFIG_MSM_GPUCC_8998=m
CONFIG_MSM_MMCC_8998=m
CONFIG_QCM_GCC_2290=m
CONFIG_QCM_DISPCC_2290=m
CONFIG_QCS_GCC_404=m
CONFIG_SC_CAMCC_7180=m
CONFIG_SC_CAMCC_7280=m
CONFIG_SC_DISPCC_7180=m
CONFIG_SC_DISPCC_7280=m
CONFIG_SC_DISPCC_8280XP=m
CONFIG_SC_GCC_7180=m
CONFIG_SC_GCC_7280=m
CONFIG_SC_GCC_8180X=m
CONFIG_SC_GCC_8280XP=m
CONFIG_SC_GPUCC_7180=m
CONFIG_SC_GPUCC_7280=m
CONFIG_SC_GPUCC_8280XP=m
CONFIG_SC_LPASSCC_7280=m
CONFIG_SC_LPASS_CORECC_7180=m
CONFIG_SC_LPASS_CORECC_7280=m
CONFIG_SC_MSS_7180=m
CONFIG_SC_VIDEOCC_7180=m
CONFIG_SC_VIDEOCC_7280=m
CONFIG_SDM_CAMCC_845=m
CONFIG_SDM_GCC_660=m
CONFIG_SDM_MMCC_660=m
CONFIG_SDM_GPUCC_660=m
CONFIG_QCS_TURING_404=m
CONFIG_QCS_Q6SSTOP_404=m
CONFIG_SDM_GCC_845=m
CONFIG_SDM_GPUCC_845=m
CONFIG_SDM_VIDEOCC_845=m
CONFIG_SDM_DISPCC_845=m
CONFIG_SDM_LPASSCC_845=m
CONFIG_SDX_GCC_55=m
CONFIG_SDX_GCC_65=m
CONFIG_SM_CAMCC_8250=m
CONFIG_SM_CAMCC_8450=m
CONFIG_SM_DISPCC_6115=m
CONFIG_SM_DISPCC_6125=m
CONFIG_SM_DISPCC_8250=m
CONFIG_SM_DISPCC_6350=m
CONFIG_SM_DISPCC_6375=m
CONFIG_SM_DISPCC_8450=m
CONFIG_SM_GCC_6115=m
CONFIG_SM_GCC_6125=m
CONFIG_SM_GCC_6350=m
CONFIG_SM_GCC_6375=m
CONFIG_SM_GCC_8150=m
CONFIG_SM_GCC_8250=m
CONFIG_SM_GCC_8350=m
CONFIG_SM_GCC_8450=m
CONFIG_SM_GCC_8550=m
CONFIG_SM_GPUCC_6350=m
CONFIG_SM_GPUCC_8150=m
CONFIG_SM_GPUCC_8250=m
CONFIG_SM_GPUCC_8350=m
CONFIG_SM_VIDEOCC_8150=m
CONFIG_SM_VIDEOCC_8250=m
CONFIG_SPMI_PMIC_CLKDIV=m
CONFIG_QCOM_HFPLL=m
CONFIG_KPSS_XCC=m
CONFIG_CLK_GFM_LPASS_SM8250=m
CONFIG_CLK_MT7621=y
CONFIG_CLK_RENESAS=y
CONFIG_CLK_EMEV2=y
CONFIG_CLK_RZA1=y
CONFIG_CLK_R7S9210=y
CONFIG_CLK_R8A73A4=y
CONFIG_CLK_R8A7740=y
CONFIG_CLK_R8A7742=y
CONFIG_CLK_R8A7743=y
CONFIG_CLK_R8A7745=y
CONFIG_CLK_R8A77470=y
CONFIG_CLK_R8A774A1=y
CONFIG_CLK_R8A774B1=y
CONFIG_CLK_R8A774C0=y
CONFIG_CLK_R8A774E1=y
CONFIG_CLK_R8A7778=y
CONFIG_CLK_R8A7779=y
CONFIG_CLK_R8A7790=y
CONFIG_CLK_R8A7791=y
CONFIG_CLK_R8A7792=y
CONFIG_CLK_R8A7794=y
CONFIG_CLK_R8A7795=y
CONFIG_CLK_R8A77960=y
CONFIG_CLK_R8A77961=y
CONFIG_CLK_R8A77965=y
CONFIG_CLK_R8A77970=y
CONFIG_CLK_R8A77980=y
CONFIG_CLK_R8A77990=y
CONFIG_CLK_R8A77995=y
CONFIG_CLK_R8A779A0=y
CONFIG_CLK_R8A779F0=y
CONFIG_CLK_R8A779G0=y
CONFIG_CLK_R9A06G032=y
CONFIG_CLK_R9A07G043=y
CONFIG_CLK_R9A07G044=y
CONFIG_CLK_R9A07G054=y
CONFIG_CLK_R9A09G011=y
CONFIG_CLK_SH73A0=y
CONFIG_CLK_RCAR_CPG_LIB=y
CONFIG_CLK_RCAR_GEN2_CPG=y
CONFIG_CLK_RCAR_GEN3_CPG=y
CONFIG_CLK_RCAR_GEN4_CPG=y
CONFIG_CLK_RCAR_USB2_CLOCK_SEL=y
CONFIG_CLK_RZG2L=y
CONFIG_CLK_RENESAS_CPG_MSSR=y
CONFIG_CLK_RENESAS_CPG_MSTP=y
CONFIG_CLK_RENESAS_DIV6=y
CONFIG_COMMON_CLK_SAMSUNG=y
CONFIG_S3C64XX_COMMON_CLK=y
CONFIG_S5PV210_COMMON_CLK=y
CONFIG_EXYNOS_3250_COMMON_CLK=y
CONFIG_EXYNOS_4_COMMON_CLK=y
CONFIG_EXYNOS_5250_COMMON_CLK=y
CONFIG_EXYNOS_5260_COMMON_CLK=y
CONFIG_EXYNOS_5410_COMMON_CLK=y
CONFIG_EXYNOS_5420_COMMON_CLK=y
CONFIG_EXYNOS_ARM64_COMMON_CLK=y
CONFIG_EXYNOS_AUDSS_CLK_CON=m
CONFIG_EXYNOS_CLKOUT=m
CONFIG_S3C2410_COMMON_CLK=y
CONFIG_S3C2412_COMMON_CLK=y
CONFIG_S3C2443_COMMON_CLK=y
CONFIG_TESLA_FSD_COMMON_CLK=y
CONFIG_CLK_SIFIVE=y
CONFIG_CLK_SIFIVE_PRCI=y
CONFIG_CLK_INTEL_SOCFPGA=y
CONFIG_CLK_INTEL_SOCFPGA32=y
CONFIG_CLK_INTEL_SOCFPGA64=y
CONFIG_SPRD_COMMON_CLK=m
CONFIG_SPRD_SC9860_CLK=m
CONFIG_SPRD_SC9863A_CLK=m
CONFIG_SPRD_UMS512_CLK=m
CONFIG_CLK_STARFIVE_JH7100=y
CONFIG_CLK_STARFIVE_JH7100_AUDIO=m
CONFIG_CLK_SUNXI=y
CONFIG_CLK_SUNXI_CLOCKS=y
CONFIG_CLK_SUNXI_PRCM_SUN6I=y
CONFIG_CLK_SUNXI_PRCM_SUN8I=y
CONFIG_CLK_SUNXI_PRCM_SUN9I=y
CONFIG_SUNXI_CCU=m
CONFIG_SUNIV_F1C100S_CCU=m
CONFIG_SUN20I_D1_CCU=m
CONFIG_SUN20I_D1_R_CCU=m
CONFIG_SUN50I_A64_CCU=m
CONFIG_SUN50I_A100_CCU=m
CONFIG_SUN50I_A100_R_CCU=m
CONFIG_SUN50I_H6_CCU=m
CONFIG_SUN50I_H616_CCU=m
CONFIG_SUN50I_H6_R_CCU=m
CONFIG_SUN4I_A10_CCU=m
CONFIG_SUN6I_A31_CCU=m
CONFIG_SUN6I_RTC_CCU=m
CONFIG_SUN8I_A23_CCU=m
CONFIG_SUN8I_A33_CCU=m
CONFIG_SUN8I_A83T_CCU=m
CONFIG_SUN8I_H3_CCU=m
CONFIG_SUN8I_V3S_CCU=m
CONFIG_SUN8I_DE2_CCU=m
CONFIG_SUN8I_R40_CCU=m
CONFIG_SUN9I_A80_CCU=m
CONFIG_SUN8I_R_CCU=m
CONFIG_COMMON_CLK_TI_ADPLL=m
CONFIG_CLK_UNIPHIER=y
CONFIG_COMMON_CLK_VISCONTI=y
CONFIG_CLK_LGM_CGU=y
CONFIG_XILINX_VCU=m
CONFIG_COMMON_CLK_XLNX_CLKWZRD=m
CONFIG_COMMON_CLK_ZYNQMP=y
CONFIG_CLK_KUNIT_TEST=m
CONFIG_CLK_GATE_KUNIT_TEST=m
CONFIG_HWSPINLOCK=y
CONFIG_HWSPINLOCK_OMAP=m
CONFIG_HWSPINLOCK_QCOM=m
CONFIG_HWSPINLOCK_SPRD=m
CONFIG_HWSPINLOCK_STM32=m
CONFIG_HWSPINLOCK_SUN6I=m
CONFIG_HSEM_U8500=m

#
# Clock Source drivers
#
CONFIG_TIMER_OF=y
CONFIG_TIMER_PROBE=y
CONFIG_CLKSRC_MMIO=y
CONFIG_BCM2835_TIMER=y
CONFIG_BCM_KONA_TIMER=y
CONFIG_DAVINCI_TIMER=y
CONFIG_DIGICOLOR_TIMER=y
CONFIG_OMAP_DM_TIMER=y
CONFIG_DW_APB_TIMER=y
CONFIG_FTTMR010_TIMER=y
CONFIG_IXP4XX_TIMER=y
CONFIG_MESON6_TIMER=y
CONFIG_OWL_TIMER=y
CONFIG_RDA_TIMER=y
CONFIG_SUN4I_TIMER=y
CONFIG_SUN5I_HSTIMER=y
CONFIG_TEGRA_TIMER=y
CONFIG_TEGRA186_TIMER=y
CONFIG_VT8500_TIMER=y
CONFIG_NPCM7XX_TIMER=y
CONFIG_CADENCE_TTC_TIMER=y
CONFIG_ASM9260_TIMER=y
CONFIG_CLKSRC_DBX500_PRCMU=y
CONFIG_CLPS711X_TIMER=y
CONFIG_MXS_TIMER=y
CONFIG_NSPIRE_TIMER=y
CONFIG_INTEGRATOR_AP_TIMER=y
CONFIG_CLKSRC_PISTACHIO=y
CONFIG_CLKSRC_STM32_LP=y
CONFIG_ARMV7M_SYSTICK=y
CONFIG_ATMEL_PIT=y
CONFIG_ATMEL_ST=y
CONFIG_CLKSRC_SAMSUNG_PWM=y
CONFIG_FSL_FTM_TIMER=y
CONFIG_OXNAS_RPS_TIMER=y
CONFIG_MTK_TIMER=y
CONFIG_SPRD_TIMER=y
CONFIG_CLKSRC_JCORE_PIT=y
CONFIG_SH_TIMER_CMT=y
CONFIG_SH_TIMER_MTU2=y
CONFIG_RENESAS_OSTM=y
CONFIG_SH_TIMER_TMU=y
CONFIG_EM_TIMER_STI=y
CONFIG_CLKSRC_PXA=y
CONFIG_TIMER_IMX_SYS_CTR=y
CONFIG_CLKSRC_ST_LPC=y
CONFIG_GXP_TIMER=y
CONFIG_MSC313E_TIMER=y
CONFIG_INGENIC_TIMER=y
CONFIG_INGENIC_SYSOST=y
CONFIG_INGENIC_OST=y
CONFIG_MICROCHIP_PIT64B=y
CONFIG_GOLDFISH_TIMER=y
# end of Clock Source drivers

CONFIG_MAILBOX=y
CONFIG_IMX_MBOX=m
CONFIG_PLATFORM_MHU=m
CONFIG_ARMADA_37XX_RWTM_MBOX=m
CONFIG_ROCKCHIP_MBOX=y
CONFIG_ALTERA_MBOX=m
CONFIG_HI3660_MBOX=m
CONFIG_HI6220_MBOX=m
CONFIG_MAILBOX_TEST=m
CONFIG_POLARFIRE_SOC_MAILBOX=m
CONFIG_QCOM_APCS_IPC=m
CONFIG_BCM_PDC_MBOX=m
CONFIG_STM32_IPCC=m
CONFIG_MTK_ADSP_MBOX=m
CONFIG_MTK_CMDQ_MBOX=m
CONFIG_SUN6I_MSGBOX=m
CONFIG_SPRD_MBOX=m
CONFIG_QCOM_IPCC=m
CONFIG_IOMMU_IOVA=m
CONFIG_IOMMU_API=y
CONFIG_IOMMU_SUPPORT=y

#
# Generic IOMMU Pagetable Support
#
CONFIG_IOMMU_IO_PGTABLE=y
CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y
CONFIG_IOMMU_IO_PGTABLE_ARMV7S_SELFTEST=y
# end of Generic IOMMU Pagetable Support

CONFIG_IOMMU_DEBUGFS=y
CONFIG_IOMMU_DEFAULT_DMA_STRICT=y
# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
CONFIG_OF_IOMMU=y
CONFIG_OMAP_IOMMU=y
CONFIG_OMAP_IOMMU_DEBUG=y
CONFIG_ROCKCHIP_IOMMU=y
CONFIG_SUN50I_IOMMU=y
CONFIG_S390_CCW_IOMMU=y
CONFIG_S390_AP_IOMMU=y
CONFIG_MTK_IOMMU=m
CONFIG_SPRD_IOMMU=m

#
# Remoteproc drivers
#
CONFIG_REMOTEPROC=y
CONFIG_REMOTEPROC_CDEV=y
CONFIG_INGENIC_VPU_RPROC=m
CONFIG_MTK_SCP=m
CONFIG_MESON_MX_AO_ARC_REMOTEPROC=m
CONFIG_RCAR_REMOTEPROC=m
# end of Remoteproc drivers

#
# Rpmsg drivers
#
CONFIG_RPMSG=m
CONFIG_RPMSG_CHAR=m
CONFIG_RPMSG_CTRL=m
CONFIG_RPMSG_NS=m
CONFIG_RPMSG_MTK_SCP=m
CONFIG_RPMSG_QCOM_GLINK=m
CONFIG_RPMSG_QCOM_GLINK_RPM=m
CONFIG_RPMSG_QCOM_GLINK_SMEM=m
CONFIG_RPMSG_QCOM_SMD=m
CONFIG_RPMSG_VIRTIO=m
# end of Rpmsg drivers

CONFIG_SOUNDWIRE=m

#
# SoundWire Devices
#
CONFIG_SOUNDWIRE_QCOM=m

#
# SOC (System On Chip) specific Drivers
#

#
# Amlogic SoC drivers
#
CONFIG_MESON_CANVAS=m
CONFIG_MESON_CLK_MEASURE=m
CONFIG_MESON_GX_SOCINFO=y
CONFIG_MESON_MX_SOCINFO=y
# end of Amlogic SoC drivers

#
# Apple SoC drivers
#
CONFIG_APPLE_RTKIT=m
CONFIG_APPLE_SART=m
# end of Apple SoC drivers

#
# ASPEED SoC drivers
#
CONFIG_ASPEED_LPC_CTRL=m
CONFIG_ASPEED_LPC_SNOOP=m
CONFIG_ASPEED_UART_ROUTING=m
CONFIG_ASPEED_P2A_CTRL=m
CONFIG_ASPEED_SOCINFO=y
# end of ASPEED SoC drivers

CONFIG_AT91_SOC_ID=y
CONFIG_AT91_SOC_SFR=m

#
# Broadcom SoC drivers
#
CONFIG_BCM2835_POWER=y
CONFIG_SOC_BCM63XX=y
CONFIG_SOC_BRCMSTB=y
CONFIG_BCM63XX_POWER=y
CONFIG_BCM_PMB=y
# end of Broadcom SoC drivers

#
# NXP/Freescale QorIQ SoC drivers
#
CONFIG_QUICC_ENGINE=y
CONFIG_UCC_SLOW=y
CONFIG_UCC_FAST=y
CONFIG_UCC=y
CONFIG_QE_TDM=y
CONFIG_FSL_GUTS=y
CONFIG_DPAA2_CONSOLE=m
# end of NXP/Freescale QorIQ SoC drivers

#
# fujitsu SoC drivers
#
# end of fujitsu SoC drivers

#
# i.MX SoC drivers
#
CONFIG_SOC_IMX8M=y
CONFIG_SOC_IMX9=m
# end of i.MX SoC drivers

#
# IXP4xx SoC drivers
#
CONFIG_IXP4XX_QMGR=m
CONFIG_IXP4XX_NPE=m
# end of IXP4xx SoC drivers

#
# Enable LiteX SoC Builder specific drivers
#
CONFIG_LITEX=y
CONFIG_LITEX_SOC_CONTROLLER=m
# end of Enable LiteX SoC Builder specific drivers

#
# MediaTek SoC drivers
#
CONFIG_MTK_CMDQ=m
CONFIG_MTK_DEVAPC=m
CONFIG_MTK_INFRACFG=y
CONFIG_MTK_PMIC_WRAP=m
CONFIG_MTK_SCPSYS=y
CONFIG_MTK_MMSYS=y
CONFIG_MTK_SVS=m
# end of MediaTek SoC drivers

CONFIG_POLARFIRE_SOC_SYS_CTRL=m

#
# Qualcomm SoC drivers
#
CONFIG_QCOM_COMMAND_DB=m
CONFIG_QCOM_GENI_SE=m
CONFIG_QCOM_GSBI=m
CONFIG_QCOM_LLCC=m
CONFIG_QCOM_PDR_HELPERS=m
CONFIG_QCOM_QMI_HELPERS=m
CONFIG_QCOM_RPMH=m
CONFIG_QCOM_RPMHPD=m
CONFIG_QCOM_SMEM=m
CONFIG_QCOM_SMD_RPM=m
CONFIG_QCOM_SMEM_STATE=y
CONFIG_QCOM_SMP2P=m
CONFIG_QCOM_SMSM=m
CONFIG_QCOM_SOCINFO=m
CONFIG_QCOM_SPM=m
CONFIG_QCOM_STATS=m
CONFIG_QCOM_WCNSS_CTRL=m
CONFIG_QCOM_APR=m
CONFIG_QCOM_ICC_BWMON=m
# end of Qualcomm SoC drivers

CONFIG_SOC_RENESAS=y
CONFIG_RST_RCAR=y
CONFIG_SYSC_RCAR=y
CONFIG_SYSC_RCAR_GEN4=y
CONFIG_SYSC_R8A77995=y
CONFIG_SYSC_R8A7794=y
CONFIG_SYSC_R8A77990=y
CONFIG_SYSC_R8A7779=y
CONFIG_SYSC_R8A7790=y
CONFIG_SYSC_R8A7795=y
CONFIG_SYSC_R8A7791=y
CONFIG_SYSC_R8A77965=y
CONFIG_SYSC_R8A77960=y
CONFIG_SYSC_R8A77961=y
CONFIG_SYSC_R8A779F0=y
CONFIG_SYSC_R8A7792=y
CONFIG_SYSC_R8A77980=y
CONFIG_SYSC_R8A77970=y
CONFIG_SYSC_R8A779A0=y
CONFIG_SYSC_R8A779G0=y
CONFIG_SYSC_RMOBILE=y
CONFIG_SYSC_R8A77470=y
CONFIG_SYSC_R8A7745=y
CONFIG_SYSC_R8A7742=y
CONFIG_SYSC_R8A7743=y
CONFIG_SYSC_R8A774C0=y
CONFIG_SYSC_R8A774E1=y
CONFIG_SYSC_R8A774A1=y
CONFIG_SYSC_R8A774B1=y
CONFIG_ROCKCHIP_GRF=y
CONFIG_ROCKCHIP_IODOMAIN=m
CONFIG_ROCKCHIP_DTPM=m
CONFIG_SOC_SAMSUNG=y
CONFIG_EXYNOS_ASV_ARM=y
CONFIG_EXYNOS_CHIPID=m
CONFIG_EXYNOS_USI=m
CONFIG_EXYNOS_PM_DOMAINS=y
CONFIG_EXYNOS_REGULATOR_COUPLER=y
CONFIG_SUNXI_SRAM=y
CONFIG_SOC_TEGRA20_VOLTAGE_COUPLER=y
CONFIG_SOC_TEGRA30_VOLTAGE_COUPLER=y
CONFIG_SOC_TI=y
CONFIG_UX500_SOC_ID=y

#
# Xilinx SoC drivers
#
# end of Xilinx SoC drivers
# end of SOC (System On Chip) specific Drivers

CONFIG_PM_DEVFREQ=y

#
# DEVFREQ Governors
#
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m
CONFIG_DEVFREQ_GOV_PERFORMANCE=m
CONFIG_DEVFREQ_GOV_POWERSAVE=m
CONFIG_DEVFREQ_GOV_USERSPACE=m
CONFIG_DEVFREQ_GOV_PASSIVE=m

#
# DEVFREQ Drivers
#
CONFIG_ARM_EXYNOS_BUS_DEVFREQ=m
CONFIG_ARM_IMX_BUS_DEVFREQ=m
CONFIG_ARM_TEGRA_DEVFREQ=m
CONFIG_ARM_MEDIATEK_CCI_DEVFREQ=m
CONFIG_ARM_SUN8I_A33_MBUS_DEVFREQ=m
CONFIG_PM_DEVFREQ_EVENT=y
CONFIG_DEVFREQ_EVENT_EXYNOS_NOCP=m
CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU=m
CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI=m
CONFIG_EXTCON=y

#
# Extcon Device Drivers
#
CONFIG_EXTCON_ADC_JACK=m
CONFIG_EXTCON_FSA9480=m
CONFIG_EXTCON_GPIO=m
CONFIG_EXTCON_MAX14577=m
CONFIG_EXTCON_MAX3355=m
CONFIG_EXTCON_MAX77693=m
CONFIG_EXTCON_PTN5150=m
CONFIG_EXTCON_QCOM_SPMI_MISC=m
CONFIG_EXTCON_RT8973A=m
CONFIG_EXTCON_SM5502=m
CONFIG_EXTCON_USB_GPIO=m
CONFIG_EXTCON_USBC_CROS_EC=m
CONFIG_EXTCON_USBC_TUSB320=m
CONFIG_MEMORY=y
CONFIG_DDR=y
CONFIG_ATMEL_SDRAMC=y
CONFIG_ATMEL_EBI=y
CONFIG_BRCMSTB_DPFE=m
CONFIG_BRCMSTB_MEMC=m
CONFIG_BT1_L2_CTL=y
CONFIG_TI_AEMIF=m
CONFIG_TI_EMIF=m
CONFIG_OMAP_GPMC=m
CONFIG_OMAP_GPMC_DEBUG=y
CONFIG_FPGA_DFL_EMIF=m
CONFIG_MVEBU_DEVBUS=y
CONFIG_FSL_CORENET_CF=m
CONFIG_FSL_IFC=y
CONFIG_JZ4780_NEMC=y
CONFIG_MTK_SMI=m
CONFIG_DA8XX_DDRCTL=y
CONFIG_RENESAS_RPCIF=m
CONFIG_STM32_FMC2_EBI=m
CONFIG_SAMSUNG_MC=y
CONFIG_EXYNOS5422_DMC=m
CONFIG_EXYNOS_SROM=y
CONFIG_TEGRA_MC=y
CONFIG_TEGRA20_EMC=m
CONFIG_TEGRA30_EMC=m
CONFIG_TEGRA124_EMC=m
CONFIG_TEGRA210_EMC_TABLE=y
CONFIG_TEGRA210_EMC=m
CONFIG_IIO=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER_DMA=m
CONFIG_IIO_BUFFER_DMAENGINE=m
CONFIG_IIO_BUFFER_HW_CONSUMER=m
CONFIG_IIO_KFIFO_BUF=m
CONFIG_IIO_TRIGGERED_BUFFER=m
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_TRIGGER=y
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
CONFIG_IIO_SW_DEVICE=m
CONFIG_IIO_SW_TRIGGER=m
CONFIG_IIO_TRIGGERED_EVENT=m

#
# Accelerometers
#
CONFIG_ADIS16201=m
CONFIG_ADIS16209=m
CONFIG_ADXL313=m
CONFIG_ADXL313_I2C=m
CONFIG_ADXL313_SPI=m
CONFIG_ADXL355=m
CONFIG_ADXL355_I2C=m
CONFIG_ADXL355_SPI=m
CONFIG_ADXL367=m
CONFIG_ADXL367_SPI=m
CONFIG_ADXL367_I2C=m
CONFIG_ADXL372=m
CONFIG_ADXL372_SPI=m
CONFIG_ADXL372_I2C=m
CONFIG_BMA220=m
CONFIG_BMA400=m
CONFIG_BMA400_I2C=m
CONFIG_BMA400_SPI=m
CONFIG_BMC150_ACCEL=m
CONFIG_BMC150_ACCEL_I2C=m
CONFIG_BMC150_ACCEL_SPI=m
CONFIG_BMI088_ACCEL=m
CONFIG_BMI088_ACCEL_SPI=m
CONFIG_DA280=m
CONFIG_DA311=m
CONFIG_DMARD06=m
CONFIG_DMARD09=m
CONFIG_DMARD10=m
CONFIG_FXLS8962AF=m
CONFIG_FXLS8962AF_I2C=m
CONFIG_FXLS8962AF_SPI=m
CONFIG_HID_SENSOR_ACCEL_3D=m
CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
CONFIG_IIO_ST_ACCEL_3AXIS=m
CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m
CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
CONFIG_KXSD9=m
CONFIG_KXSD9_SPI=m
CONFIG_KXSD9_I2C=m
CONFIG_KXCJK1013=m
CONFIG_MC3230=m
CONFIG_MMA7455=m
CONFIG_MMA7455_I2C=m
CONFIG_MMA7455_SPI=m
CONFIG_MMA7660=m
CONFIG_MMA8452=m
CONFIG_MMA9551_CORE=m
CONFIG_MMA9551=m
CONFIG_MMA9553=m
CONFIG_MSA311=m
CONFIG_MXC4005=m
CONFIG_MXC6255=m
CONFIG_SCA3000=m
CONFIG_SCA3300=m
CONFIG_STK8312=m
CONFIG_STK8BA50=m
# end of Accelerometers

#
# Analog to digital converters
#
CONFIG_AD_SIGMA_DELTA=m
CONFIG_AD7091R5=m
CONFIG_AD7124=m
CONFIG_AD7192=m
CONFIG_AD7266=m
CONFIG_AD7280=m
CONFIG_AD7291=m
CONFIG_AD7292=m
CONFIG_AD7298=m
CONFIG_AD7476=m
CONFIG_AD7606=m
CONFIG_AD7606_IFACE_PARALLEL=m
CONFIG_AD7606_IFACE_SPI=m
CONFIG_AD7766=m
CONFIG_AD7768_1=m
CONFIG_AD7780=m
CONFIG_AD7791=m
CONFIG_AD7793=m
CONFIG_AD7887=m
CONFIG_AD7923=m
CONFIG_AD7949=m
CONFIG_AD799X=m
CONFIG_AD9467=m
CONFIG_ADI_AXI_ADC=m
CONFIG_ASPEED_ADC=m
CONFIG_AT91_ADC=m
CONFIG_AT91_SAMA5D2_ADC=m
CONFIG_AXP20X_ADC=m
CONFIG_AXP288_ADC=m
CONFIG_BCM_IPROC_ADC=m
CONFIG_BERLIN2_ADC=m
CONFIG_CC10001_ADC=m
CONFIG_CPCAP_ADC=m
CONFIG_DA9150_GPADC=m
CONFIG_DLN2_ADC=m
CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EXYNOS_ADC=m
CONFIG_MXS_LRADC_ADC=m
CONFIG_FSL_MX25_ADC=m
CONFIG_HI8435=m
CONFIG_HX711=m
CONFIG_INA2XX_ADC=m
CONFIG_INGENIC_ADC=m
CONFIG_IMX7D_ADC=m
CONFIG_IMX8QXP_ADC=m
CONFIG_LPC18XX_ADC=m
CONFIG_LPC32XX_ADC=m
CONFIG_LTC2471=m
CONFIG_LTC2485=m
CONFIG_LTC2496=m
CONFIG_LTC2497=m
CONFIG_MAX1027=m
CONFIG_MAX11100=m
CONFIG_MAX1118=m
CONFIG_MAX11205=m
CONFIG_MAX1241=m
CONFIG_MAX1363=m
CONFIG_MAX9611=m
CONFIG_MCP320X=m
CONFIG_MCP3422=m
CONFIG_MCP3911=m
CONFIG_MEDIATEK_MT6360_ADC=m
CONFIG_MEDIATEK_MT6577_AUXADC=m
CONFIG_MEN_Z188_ADC=m
CONFIG_MESON_SARADC=m
CONFIG_MP2629_ADC=m
CONFIG_NAU7802=m
CONFIG_NPCM_ADC=m
CONFIG_QCOM_VADC_COMMON=m
CONFIG_QCOM_PM8XXX_XOADC=m
CONFIG_QCOM_SPMI_RRADC=m
CONFIG_QCOM_SPMI_IADC=m
CONFIG_QCOM_SPMI_VADC=m
CONFIG_QCOM_SPMI_ADC5=m
CONFIG_RCAR_GYRO_ADC=m
CONFIG_RN5T618_ADC=m
CONFIG_ROCKCHIP_SARADC=m
CONFIG_RICHTEK_RTQ6056=m
CONFIG_RZG2L_ADC=m
CONFIG_SC27XX_ADC=m
CONFIG_SPEAR_ADC=m
CONFIG_SD_ADC_MODULATOR=m
CONFIG_STM32_ADC_CORE=m
CONFIG_STM32_ADC=m
CONFIG_STM32_DFSDM_CORE=m
CONFIG_STM32_DFSDM_ADC=m
CONFIG_STMPE_ADC=m
CONFIG_SUN4I_GPADC=m
CONFIG_TI_ADC081C=m
CONFIG_TI_ADC0832=m
CONFIG_TI_ADC084S021=m
CONFIG_TI_ADC12138=m
CONFIG_TI_ADC108S102=m
CONFIG_TI_ADC128S052=m
CONFIG_TI_ADC161S626=m
CONFIG_TI_ADS1015=m
CONFIG_TI_ADS7950=m
CONFIG_TI_ADS8344=m
CONFIG_TI_ADS8688=m
CONFIG_TI_ADS124S08=m
CONFIG_TI_ADS131E08=m
CONFIG_TI_AM335X_ADC=m
CONFIG_TI_TLC4541=m
CONFIG_TI_TSC2046=m
CONFIG_VF610_ADC=m
CONFIG_VIPERBOARD_ADC=m
CONFIG_XILINX_XADC=m
CONFIG_XILINX_AMS=m
# end of Analog to digital converters

#
# Analog to digital and digital to analog converters
#
CONFIG_AD74413R=m
# end of Analog to digital and digital to analog converters

#
# Analog Front Ends
#
CONFIG_IIO_RESCALE=m
# end of Analog Front Ends

#
# Amplifiers
#
CONFIG_AD8366=m
CONFIG_ADA4250=m
CONFIG_HMC425=m
# end of Amplifiers

#
# Capacitance to digital converters
#
CONFIG_AD7150=m
CONFIG_AD7746=m
# end of Capacitance to digital converters

#
# Chemical Sensors
#
CONFIG_ATLAS_PH_SENSOR=m
CONFIG_ATLAS_EZO_SENSOR=m
CONFIG_BME680=m
CONFIG_BME680_I2C=m
CONFIG_BME680_SPI=m
CONFIG_CCS811=m
CONFIG_IAQCORE=m
CONFIG_PMS7003=m
CONFIG_SCD30_CORE=m
CONFIG_SCD30_I2C=m
CONFIG_SCD30_SERIAL=m
CONFIG_SCD4X=m
CONFIG_SENSIRION_SGP30=m
CONFIG_SENSIRION_SGP40=m
CONFIG_SPS30=m
CONFIG_SPS30_I2C=m
CONFIG_SPS30_SERIAL=m
CONFIG_SENSEAIR_SUNRISE_CO2=m
CONFIG_VZ89X=m
# end of Chemical Sensors

CONFIG_IIO_CROS_EC_SENSORS_CORE=m
CONFIG_IIO_CROS_EC_SENSORS=m
CONFIG_IIO_CROS_EC_SENSORS_LID_ANGLE=m

#
# Hid Sensor IIO Common
#
CONFIG_HID_SENSOR_IIO_COMMON=m
CONFIG_HID_SENSOR_IIO_TRIGGER=m
# end of Hid Sensor IIO Common

CONFIG_IIO_MS_SENSORS_I2C=m

#
# IIO SCMI Sensors
#
CONFIG_IIO_SCMI=m
# end of IIO SCMI Sensors

#
# SSP Sensor Common
#
CONFIG_IIO_SSP_SENSORS_COMMONS=m
CONFIG_IIO_SSP_SENSORHUB=m
# end of SSP Sensor Common

CONFIG_IIO_ST_SENSORS_I2C=m
CONFIG_IIO_ST_SENSORS_SPI=m
CONFIG_IIO_ST_SENSORS_CORE=m

#
# Digital to analog converters
#
CONFIG_AD3552R=m
CONFIG_AD5064=m
CONFIG_AD5360=m
CONFIG_AD5380=m
CONFIG_AD5421=m
CONFIG_AD5446=m
CONFIG_AD5449=m
CONFIG_AD5592R_BASE=m
CONFIG_AD5592R=m
CONFIG_AD5593R=m
CONFIG_AD5504=m
CONFIG_AD5624R_SPI=m
CONFIG_LTC2688=m
CONFIG_AD5686=m
CONFIG_AD5686_SPI=m
CONFIG_AD5696_I2C=m
CONFIG_AD5755=m
CONFIG_AD5758=m
CONFIG_AD5761=m
CONFIG_AD5764=m
CONFIG_AD5766=m
CONFIG_AD5770R=m
CONFIG_AD5791=m
CONFIG_AD7293=m
CONFIG_AD7303=m
CONFIG_AD8801=m
CONFIG_DPOT_DAC=m
CONFIG_DS4424=m
CONFIG_LPC18XX_DAC=m
CONFIG_LTC1660=m
CONFIG_LTC2632=m
CONFIG_M62332=m
CONFIG_MAX517=m
CONFIG_MAX5821=m
CONFIG_MCP4725=m
CONFIG_MCP4922=m
CONFIG_STM32_DAC=m
CONFIG_STM32_DAC_CORE=m
CONFIG_TI_DAC082S085=m
CONFIG_TI_DAC5571=m
CONFIG_TI_DAC7311=m
CONFIG_TI_DAC7612=m
CONFIG_VF610_DAC=m
# end of Digital to analog converters

#
# IIO dummy driver
#
CONFIG_IIO_DUMMY_EVGEN=m
CONFIG_IIO_SIMPLE_DUMMY=m
CONFIG_IIO_SIMPLE_DUMMY_EVENTS=y
CONFIG_IIO_SIMPLE_DUMMY_BUFFER=y
# end of IIO dummy driver

#
# Filters
#
# end of Filters

#
# Frequency Synthesizers DDS/PLL
#

#
# Clock Generator/Distribution
#
CONFIG_AD9523=m
# end of Clock Generator/Distribution

#
# Phase-Locked Loop (PLL) frequency synthesizers
#
CONFIG_ADF4350=m
CONFIG_ADF4371=m
CONFIG_ADMV1013=m
CONFIG_ADMV4420=m
CONFIG_ADRF6780=m
# end of Phase-Locked Loop (PLL) frequency synthesizers
# end of Frequency Synthesizers DDS/PLL

#
# Digital gyroscope sensors
#
CONFIG_ADIS16080=m
CONFIG_ADIS16130=m
CONFIG_ADIS16136=m
CONFIG_ADIS16260=m
CONFIG_ADXRS290=m
CONFIG_ADXRS450=m
CONFIG_BMG160=m
CONFIG_BMG160_I2C=m
CONFIG_BMG160_SPI=m
CONFIG_FXAS21002C=m
CONFIG_FXAS21002C_I2C=m
CONFIG_FXAS21002C_SPI=m
CONFIG_HID_SENSOR_GYRO_3D=m
CONFIG_MPU3050=m
CONFIG_MPU3050_I2C=m
CONFIG_IIO_ST_GYRO_3AXIS=m
CONFIG_IIO_ST_GYRO_I2C_3AXIS=m
CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
CONFIG_ITG3200=m
# end of Digital gyroscope sensors

#
# Health Sensors
#

#
# Heart Rate Monitors
#
CONFIG_AFE4403=m
CONFIG_AFE4404=m
CONFIG_MAX30100=m
CONFIG_MAX30102=m
# end of Heart Rate Monitors
# end of Health Sensors

#
# Humidity sensors
#
CONFIG_AM2315=m
CONFIG_DHT11=m
CONFIG_HDC100X=m
CONFIG_HDC2010=m
CONFIG_HID_SENSOR_HUMIDITY=m
CONFIG_HTS221=m
CONFIG_HTS221_I2C=m
CONFIG_HTS221_SPI=m
CONFIG_HTU21=m
CONFIG_SI7005=m
CONFIG_SI7020=m
# end of Humidity sensors

#
# Inertial measurement units
#
CONFIG_ADIS16400=m
CONFIG_ADIS16460=m
CONFIG_ADIS16475=m
CONFIG_ADIS16480=m
CONFIG_BMI160=m
CONFIG_BMI160_I2C=m
CONFIG_BMI160_SPI=m
CONFIG_BOSCH_BNO055=m
CONFIG_BOSCH_BNO055_SERIAL=m
CONFIG_BOSCH_BNO055_I2C=m
CONFIG_FXOS8700=m
CONFIG_FXOS8700_I2C=m
CONFIG_FXOS8700_SPI=m
CONFIG_KMX61=m
CONFIG_INV_ICM42600=m
CONFIG_INV_ICM42600_I2C=m
CONFIG_INV_ICM42600_SPI=m
CONFIG_INV_MPU6050_IIO=m
CONFIG_INV_MPU6050_I2C=m
CONFIG_INV_MPU6050_SPI=m
CONFIG_IIO_ST_LSM6DSX=m
CONFIG_IIO_ST_LSM6DSX_I2C=m
CONFIG_IIO_ST_LSM6DSX_SPI=m
CONFIG_IIO_ST_LSM6DSX_I3C=m
CONFIG_IIO_ST_LSM9DS0=m
CONFIG_IIO_ST_LSM9DS0_I2C=m
CONFIG_IIO_ST_LSM9DS0_SPI=m
# end of Inertial measurement units

CONFIG_IIO_ADIS_LIB=m
CONFIG_IIO_ADIS_LIB_BUFFER=y

#
# Light sensors
#
CONFIG_ADJD_S311=m
CONFIG_ADUX1020=m
CONFIG_AL3010=m
CONFIG_AL3320A=m
CONFIG_APDS9300=m
CONFIG_APDS9960=m
CONFIG_AS73211=m
CONFIG_BH1750=m
CONFIG_BH1780=m
CONFIG_CM32181=m
CONFIG_CM3232=m
CONFIG_CM3323=m
CONFIG_CM3605=m
CONFIG_CM36651=m
CONFIG_IIO_CROS_EC_LIGHT_PROX=m
CONFIG_GP2AP002=m
CONFIG_GP2AP020A00F=m
CONFIG_IQS621_ALS=m
CONFIG_SENSORS_ISL29018=m
CONFIG_SENSORS_ISL29028=m
CONFIG_ISL29125=m
CONFIG_HID_SENSOR_ALS=m
CONFIG_HID_SENSOR_PROX=m
CONFIG_JSA1212=m
CONFIG_RPR0521=m
CONFIG_SENSORS_LM3533=m
CONFIG_LTR501=m
CONFIG_LTRF216A=m
CONFIG_LV0104CS=m
CONFIG_MAX44000=m
CONFIG_MAX44009=m
CONFIG_NOA1305=m
CONFIG_OPT3001=m
CONFIG_PA12203001=m
CONFIG_SI1133=m
CONFIG_SI1145=m
CONFIG_STK3310=m
CONFIG_ST_UVIS25=m
CONFIG_ST_UVIS25_I2C=m
CONFIG_ST_UVIS25_SPI=m
CONFIG_TCS3414=m
CONFIG_TCS3472=m
CONFIG_SENSORS_TSL2563=m
CONFIG_TSL2583=m
CONFIG_TSL2591=m
CONFIG_TSL2772=m
CONFIG_TSL4531=m
CONFIG_US5182D=m
CONFIG_VCNL4000=m
CONFIG_VCNL4035=m
CONFIG_VEML6030=m
CONFIG_VEML6070=m
CONFIG_VL6180=m
CONFIG_ZOPT2201=m
# end of Light sensors

#
# Magnetometer sensors
#
CONFIG_AK8974=m
CONFIG_AK8975=m
CONFIG_AK09911=m
CONFIG_BMC150_MAGN=m
CONFIG_BMC150_MAGN_I2C=m
CONFIG_BMC150_MAGN_SPI=m
CONFIG_MAG3110=m
CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
CONFIG_MMC35240=m
CONFIG_IIO_ST_MAGN_3AXIS=m
CONFIG_IIO_ST_MAGN_I2C_3AXIS=m
CONFIG_IIO_ST_MAGN_SPI_3AXIS=m
CONFIG_SENSORS_HMC5843=m
CONFIG_SENSORS_HMC5843_I2C=m
CONFIG_SENSORS_HMC5843_SPI=m
CONFIG_SENSORS_RM3100=m
CONFIG_SENSORS_RM3100_I2C=m
CONFIG_SENSORS_RM3100_SPI=m
CONFIG_YAMAHA_YAS530=m
# end of Magnetometer sensors

#
# Multiplexers
#
CONFIG_IIO_MUX=m
# end of Multiplexers

#
# Inclinometer sensors
#
CONFIG_HID_SENSOR_INCLINOMETER_3D=m
CONFIG_HID_SENSOR_DEVICE_ROTATION=m
# end of Inclinometer sensors

CONFIG_IIO_RESCALE_KUNIT_TEST=m
CONFIG_IIO_FORMAT_KUNIT_TEST=m

#
# Triggers - standalone
#
CONFIG_IIO_HRTIMER_TRIGGER=m
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_STM32_LPTIMER_TRIGGER=m
CONFIG_IIO_STM32_TIMER_TRIGGER=m
CONFIG_IIO_TIGHTLOOP_TRIGGER=m
CONFIG_IIO_SYSFS_TRIGGER=m
# end of Triggers - standalone

#
# Linear and angular position sensors
#
CONFIG_IQS624_POS=m
CONFIG_HID_SENSOR_CUSTOM_INTEL_HINGE=m
# end of Linear and angular position sensors

#
# Digital potentiometers
#
CONFIG_AD5110=m
CONFIG_AD5272=m
CONFIG_DS1803=m
CONFIG_MAX5432=m
CONFIG_MAX5481=m
CONFIG_MAX5487=m
CONFIG_MCP4018=m
CONFIG_MCP4131=m
CONFIG_MCP4531=m
CONFIG_MCP41010=m
CONFIG_TPL0102=m
# end of Digital potentiometers

#
# Digital potentiostats
#
CONFIG_LMP91000=m
# end of Digital potentiostats

#
# Pressure sensors
#
CONFIG_ABP060MG=m
CONFIG_BMP280=m
CONFIG_BMP280_I2C=m
CONFIG_BMP280_SPI=m
CONFIG_IIO_CROS_EC_BARO=m
CONFIG_DLHL60D=m
CONFIG_DPS310=m
CONFIG_HID_SENSOR_PRESS=m
CONFIG_HP03=m
CONFIG_ICP10100=m
CONFIG_MPL115=m
CONFIG_MPL115_I2C=m
CONFIG_MPL115_SPI=m
CONFIG_MPL3115=m
CONFIG_MS5611=m
CONFIG_MS5611_I2C=m
CONFIG_MS5611_SPI=m
CONFIG_MS5637=m
CONFIG_IIO_ST_PRESS=m
CONFIG_IIO_ST_PRESS_I2C=m
CONFIG_IIO_ST_PRESS_SPI=m
CONFIG_T5403=m
CONFIG_HP206C=m
CONFIG_ZPA2326=m
CONFIG_ZPA2326_I2C=m
CONFIG_ZPA2326_SPI=m
# end of Pressure sensors

#
# Lightning sensors
#
CONFIG_AS3935=m
# end of Lightning sensors

#
# Proximity and distance sensors
#
CONFIG_CROS_EC_MKBP_PROXIMITY=m
CONFIG_ISL29501=m
CONFIG_LIDAR_LITE_V2=m
CONFIG_MB1232=m
CONFIG_PING=m
CONFIG_RFD77402=m
CONFIG_SRF04=m
CONFIG_SX_COMMON=m
CONFIG_SX9310=m
CONFIG_SX9324=m
CONFIG_SX9360=m
CONFIG_SX9500=m
CONFIG_SRF08=m
CONFIG_VCNL3020=m
CONFIG_VL53L0X_I2C=m
# end of Proximity and distance sensors

#
# Resolver to digital converters
#
CONFIG_AD2S90=m
CONFIG_AD2S1200=m
# end of Resolver to digital converters

#
# Temperature sensors
#
CONFIG_IQS620AT_TEMP=m
CONFIG_LTC2983=m
CONFIG_MAXIM_THERMOCOUPLE=m
CONFIG_HID_SENSOR_TEMP=m
CONFIG_MLX90614=m
CONFIG_MLX90632=m
CONFIG_TMP006=m
CONFIG_TMP007=m
CONFIG_TMP117=m
CONFIG_TSYS01=m
CONFIG_TSYS02D=m
CONFIG_MAX31856=m
CONFIG_MAX31865=m
# end of Temperature sensors

CONFIG_PWM=y
CONFIG_PWM_SYSFS=y
CONFIG_PWM_DEBUG=y
CONFIG_PWM_ATMEL=m
CONFIG_PWM_ATMEL_HLCDC_PWM=m
CONFIG_PWM_ATMEL_TCB=m
CONFIG_PWM_BCM_IPROC=m
CONFIG_PWM_BCM_KONA=m
CONFIG_PWM_BCM2835=m
CONFIG_PWM_BERLIN=m
CONFIG_PWM_BRCMSTB=m
CONFIG_PWM_CLK=m
CONFIG_PWM_CLPS711X=m
CONFIG_PWM_CROS_EC=m
CONFIG_PWM_EP93XX=m
CONFIG_PWM_FSL_FTM=m
CONFIG_PWM_HIBVT=m
CONFIG_PWM_IMG=m
CONFIG_PWM_IMX1=m
CONFIG_PWM_IMX27=m
CONFIG_PWM_IMX_TPM=m
CONFIG_PWM_INTEL_LGM=m
CONFIG_PWM_IQS620A=m
CONFIG_PWM_JZ4740=m
CONFIG_PWM_KEEMBAY=m
CONFIG_PWM_LP3943=m
CONFIG_PWM_LPC18XX_SCT=m
CONFIG_PWM_LPC32XX=m
CONFIG_PWM_LPSS=m
CONFIG_PWM_LPSS_PLATFORM=m
CONFIG_PWM_MESON=m
CONFIG_PWM_MTK_DISP=m
CONFIG_PWM_MEDIATEK=m
CONFIG_PWM_MXS=m
CONFIG_PWM_NTXEC=m
CONFIG_PWM_OMAP_DMTIMER=m
CONFIG_PWM_PCA9685=m
CONFIG_PWM_PXA=m
CONFIG_PWM_RASPBERRYPI_POE=m
CONFIG_PWM_RCAR=m
CONFIG_PWM_RENESAS_TPU=m
CONFIG_PWM_ROCKCHIP=m
CONFIG_PWM_SAMSUNG=m
CONFIG_PWM_SIFIVE=m
CONFIG_PWM_SL28CPLD=m
CONFIG_PWM_SPEAR=m
CONFIG_PWM_SPRD=m
CONFIG_PWM_STI=m
CONFIG_PWM_STM32=m
CONFIG_PWM_STM32_LP=m
CONFIG_PWM_STMPE=y
CONFIG_PWM_SUN4I=m
CONFIG_PWM_SUNPLUS=m
CONFIG_PWM_TEGRA=m
CONFIG_PWM_TIECAP=m
CONFIG_PWM_TIEHRPWM=m
CONFIG_PWM_VISCONTI=m
CONFIG_PWM_VT8500=m
CONFIG_PWM_XILINX=m

#
# IRQ chip support
#
CONFIG_IRQCHIP=y
CONFIG_AL_FIC=y
CONFIG_MADERA_IRQ=m
CONFIG_JCORE_AIC=y
CONFIG_RENESAS_INTC_IRQPIN=y
CONFIG_RENESAS_IRQC=y
CONFIG_RENESAS_RZA1_IRQC=y
CONFIG_RENESAS_RZG2L_IRQC=y
CONFIG_SL28CPLD_INTC=y
CONFIG_TS4800_IRQ=m
CONFIG_XILINX_INTC=y
CONFIG_INGENIC_TCU_IRQ=y
CONFIG_IRQ_UNIPHIER_AIDET=y
CONFIG_MESON_IRQ_GPIO=m
CONFIG_IMX_IRQSTEER=y
CONFIG_IMX_INTMUX=y
CONFIG_IMX_MU_MSI=m
CONFIG_EXYNOS_IRQ_COMBINER=y
CONFIG_MST_IRQ=y
CONFIG_MCHP_EIC=y
CONFIG_SUNPLUS_SP7021_INTC=y
# end of IRQ chip support

CONFIG_IPACK_BUS=m
CONFIG_SERIAL_IPOCTAL=m
CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_A10SR=m
CONFIG_RESET_ATH79=y
CONFIG_RESET_AXS10X=y
CONFIG_RESET_BCM6345=y
CONFIG_RESET_BERLIN=m
CONFIG_RESET_BRCMSTB=m
CONFIG_RESET_BRCMSTB_RESCAL=m
CONFIG_RESET_HSDK=y
CONFIG_RESET_IMX7=m
CONFIG_RESET_INTEL_GW=y
CONFIG_RESET_K210=y
CONFIG_RESET_LANTIQ=y
CONFIG_RESET_LPC18XX=y
CONFIG_RESET_MCHP_SPARX5=y
CONFIG_RESET_MESON=m
CONFIG_RESET_MESON_AUDIO_ARB=m
CONFIG_RESET_NPCM=y
CONFIG_RESET_PISTACHIO=y
CONFIG_RESET_POLARFIRE_SOC=y
CONFIG_RESET_QCOM_AOSS=m
CONFIG_RESET_QCOM_PDC=m
CONFIG_RESET_RASPBERRYPI=m
CONFIG_RESET_RZG2L_USBPHY_CTRL=m
CONFIG_RESET_SCMI=m
CONFIG_RESET_SIMPLE=y
CONFIG_RESET_SOCFPGA=y
CONFIG_RESET_STARFIVE_JH7100=y
CONFIG_RESET_SUNPLUS=y
CONFIG_RESET_SUNXI=y
CONFIG_RESET_TI_SCI=m
CONFIG_RESET_TI_SYSCON=m
CONFIG_RESET_TI_TPS380X=m
CONFIG_RESET_TN48M_CPLD=m
CONFIG_RESET_UNIPHIER=m
CONFIG_RESET_UNIPHIER_GLUE=m
CONFIG_RESET_ZYNQ=y
CONFIG_COMMON_RESET_HI3660=m
CONFIG_COMMON_RESET_HI6220=m

#
# PHY Subsystem
#
CONFIG_GENERIC_PHY=y
CONFIG_GENERIC_PHY_MIPI_DPHY=y
CONFIG_PHY_LPC18XX_USB_OTG=m
CONFIG_PHY_PISTACHIO_USB=m
CONFIG_PHY_XGENE=m
CONFIG_USB_LGM_PHY=m
CONFIG_PHY_CAN_TRANSCEIVER=m
CONFIG_PHY_SUN4I_USB=m
CONFIG_PHY_SUN6I_MIPI_DPHY=m
CONFIG_PHY_SUN9I_USB=m
CONFIG_PHY_SUN50I_USB3=m
CONFIG_PHY_MESON8_HDMI_TX=m
CONFIG_PHY_MESON8B_USB2=m
CONFIG_PHY_MESON_GXL_USB2=m
CONFIG_PHY_MESON_G12A_MIPI_DPHY_ANALOG=m
CONFIG_PHY_MESON_G12A_USB2=m
CONFIG_PHY_MESON_G12A_USB3_PCIE=m
CONFIG_PHY_MESON_AXG_PCIE=m
CONFIG_PHY_MESON_AXG_MIPI_PCIE_ANALOG=m
CONFIG_PHY_MESON_AXG_MIPI_DPHY=m

#
# PHY drivers for Broadcom platforms
#
CONFIG_PHY_BCM63XX_USBH=m
CONFIG_PHY_CYGNUS_PCIE=m
CONFIG_PHY_BCM_SR_USB=m
CONFIG_BCM_KONA_USB2_PHY=m
CONFIG_PHY_BCM_NS_USB2=m
CONFIG_PHY_BCM_NS_USB3=m
CONFIG_PHY_NS2_PCIE=m
CONFIG_PHY_NS2_USB_DRD=m
CONFIG_PHY_BRCM_SATA=m
CONFIG_PHY_BRCM_USB=m
CONFIG_PHY_BCM_SR_PCIE=m
# end of PHY drivers for Broadcom platforms

CONFIG_PHY_CADENCE_TORRENT=m
CONFIG_PHY_CADENCE_DPHY=m
CONFIG_PHY_CADENCE_DPHY_RX=m
CONFIG_PHY_CADENCE_SIERRA=m
CONFIG_PHY_CADENCE_SALVO=m
CONFIG_PHY_FSL_IMX8MQ_USB=m
CONFIG_PHY_MIXEL_LVDS_PHY=m
CONFIG_PHY_MIXEL_MIPI_DPHY=m
CONFIG_PHY_FSL_IMX8M_PCIE=m
CONFIG_PHY_FSL_LYNX_28G=m
CONFIG_PHY_HI6220_USB=m
CONFIG_PHY_HI3660_USB=m
CONFIG_PHY_HI3670_USB=m
CONFIG_PHY_HI3670_PCIE=m
CONFIG_PHY_HISTB_COMBPHY=m
CONFIG_PHY_HISI_INNO_USB2=m
CONFIG_PHY_INGENIC_USB=m
CONFIG_PHY_LANTIQ_VRX200_PCIE=m
CONFIG_PHY_LANTIQ_RCU_USB2=m
CONFIG_ARMADA375_USBCLUSTER_PHY=y
CONFIG_PHY_BERLIN_SATA=m
CONFIG_PHY_BERLIN_USB=m
CONFIG_PHY_MVEBU_A3700_UTMI=m
CONFIG_PHY_MVEBU_A38X_COMPHY=m
CONFIG_PHY_MVEBU_CP110_UTMI=m
CONFIG_PHY_PXA_28NM_HSIC=m
CONFIG_PHY_PXA_28NM_USB2=m
CONFIG_PHY_PXA_USB=m
CONFIG_PHY_MMP3_USB=m
CONFIG_PHY_MMP3_HSIC=m
CONFIG_PHY_MTK_PCIE=m
CONFIG_PHY_MTK_TPHY=m
CONFIG_PHY_MTK_UFS=m
CONFIG_PHY_MTK_XSPHY=m
CONFIG_PHY_MTK_HDMI=m
CONFIG_PHY_MTK_MIPI_DSI=m
CONFIG_PHY_MTK_DP=m
CONFIG_PHY_SPARX5_SERDES=m
CONFIG_PHY_LAN966X_SERDES=m
CONFIG_PHY_CPCAP_USB=m
CONFIG_PHY_MAPPHONE_MDM6600=m
CONFIG_PHY_OCELOT_SERDES=m
CONFIG_PHY_ATH79_USB=m
CONFIG_PHY_QCOM_EDP=m
CONFIG_PHY_QCOM_IPQ4019_USB=m
CONFIG_PHY_QCOM_PCIE2=m
CONFIG_PHY_QCOM_QMP=m
CONFIG_PHY_QCOM_QUSB2=m
CONFIG_PHY_QCOM_USB_HS=m
CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2=m
CONFIG_PHY_QCOM_USB_HSIC=m
CONFIG_PHY_QCOM_USB_HS_28NM=m
CONFIG_PHY_QCOM_USB_SS=m
CONFIG_PHY_QCOM_IPQ806X_USB=m
CONFIG_PHY_MT7621_PCI=m
CONFIG_PHY_RALINK_USB=m
CONFIG_PHY_RCAR_GEN3_USB3=m
CONFIG_PHY_ROCKCHIP_DPHY_RX0=m
CONFIG_PHY_ROCKCHIP_INNO_HDMI=m
CONFIG_PHY_ROCKCHIP_INNO_USB2=m
CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY=m
CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=m
CONFIG_PHY_ROCKCHIP_PCIE=m
CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=m
CONFIG_PHY_ROCKCHIP_TYPEC=m
CONFIG_PHY_EXYNOS_DP_VIDEO=m
CONFIG_PHY_EXYNOS_MIPI_VIDEO=m
CONFIG_PHY_EXYNOS_PCIE=y
CONFIG_PHY_SAMSUNG_UFS=m
CONFIG_PHY_SAMSUNG_USB2=m
CONFIG_PHY_S5PV210_USB2=y
CONFIG_PHY_EXYNOS5_USBDRD=m
CONFIG_PHY_UNIPHIER_USB2=m
CONFIG_PHY_UNIPHIER_USB3=m
CONFIG_PHY_UNIPHIER_PCIE=m
CONFIG_PHY_UNIPHIER_AHCI=m
CONFIG_PHY_ST_SPEAR1310_MIPHY=m
CONFIG_PHY_ST_SPEAR1340_MIPHY=m
CONFIG_PHY_STIH407_USB=m
CONFIG_PHY_STM32_USBPHYC=m
CONFIG_PHY_SUNPLUS_USB=m
CONFIG_PHY_TEGRA194_P2U=m
CONFIG_PHY_DA8XX_USB=m
CONFIG_PHY_DM816X_USB=m
CONFIG_PHY_AM654_SERDES=m
CONFIG_PHY_J721E_WIZ=m
CONFIG_OMAP_CONTROL_PHY=m
CONFIG_TI_PIPE3=m
CONFIG_PHY_TUSB1210=m
CONFIG_PHY_INTEL_KEEMBAY_EMMC=m
CONFIG_PHY_INTEL_KEEMBAY_USB=m
CONFIG_PHY_INTEL_LGM_COMBO=y
CONFIG_PHY_INTEL_LGM_EMMC=m
CONFIG_PHY_INTEL_THUNDERBAY_EMMC=m
CONFIG_PHY_XILINX_ZYNQMP=m
# end of PHY Subsystem

CONFIG_POWERCAP=y
CONFIG_DTPM=y
CONFIG_MCB=m
CONFIG_MCB_LPC=m
CONFIG_RAS=y

#
# Android
#
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
CONFIG_ANDROID_BINDER_IPC_SELFTEST=y
# end of Android

CONFIG_DAX=m
CONFIG_NVMEM=y
CONFIG_NVMEM_SYSFS=y
CONFIG_NVMEM_APPLE_EFUSES=m
CONFIG_NVMEM_BCM_OCOTP=m
CONFIG_NVMEM_BRCM_NVRAM=m
CONFIG_NVMEM_IMX_IIM=m
CONFIG_NVMEM_IMX_OCOTP=m
CONFIG_NVMEM_JZ4780_EFUSE=m
CONFIG_NVMEM_LAN9662_OTPC=m
CONFIG_NVMEM_LAYERSCAPE_SFP=m
CONFIG_NVMEM_LPC18XX_EEPROM=m
CONFIG_NVMEM_LPC18XX_OTP=m
CONFIG_NVMEM_MESON_MX_EFUSE=m
CONFIG_NVMEM_MICROCHIP_OTPC=m
CONFIG_NVMEM_MTK_EFUSE=m
CONFIG_NVMEM_MXS_OCOTP=m
CONFIG_NVMEM_NINTENDO_OTP=m
CONFIG_NVMEM_QCOM_QFPROM=m
CONFIG_NVMEM_RAVE_SP_EEPROM=m
CONFIG_NVMEM_RMEM=m
CONFIG_NVMEM_ROCKCHIP_EFUSE=m
CONFIG_NVMEM_ROCKCHIP_OTP=m
CONFIG_NVMEM_SC27XX_EFUSE=m
CONFIG_NVMEM_SNVS_LPGPR=m
CONFIG_NVMEM_SPMI_SDAM=m
CONFIG_NVMEM_SPRD_EFUSE=m
CONFIG_NVMEM_STM32_ROMEM=m
CONFIG_NVMEM_SUNPLUS_OCOTP=m
CONFIG_NVMEM_U_BOOT_ENV=m
CONFIG_NVMEM_UNIPHIER_EFUSE=m
CONFIG_NVMEM_VF610_OCOTP=m

#
# HW tracing support
#
CONFIG_STM=m
CONFIG_STM_PROTO_BASIC=m
CONFIG_STM_PROTO_SYS_T=m
CONFIG_STM_DUMMY=m
CONFIG_STM_SOURCE_CONSOLE=m
CONFIG_STM_SOURCE_HEARTBEAT=m
CONFIG_INTEL_TH=m
CONFIG_INTEL_TH_GTH=m
CONFIG_INTEL_TH_STH=m
CONFIG_INTEL_TH_MSU=m
CONFIG_INTEL_TH_PTI=m
CONFIG_INTEL_TH_DEBUG=y
# end of HW tracing support

CONFIG_FPGA=m
CONFIG_FPGA_MGR_SOCFPGA=m
CONFIG_FPGA_MGR_SOCFPGA_A10=m
CONFIG_ALTERA_PR_IP_CORE=m
CONFIG_ALTERA_PR_IP_CORE_PLAT=m
CONFIG_FPGA_MGR_ALTERA_PS_SPI=m
CONFIG_FPGA_MGR_ZYNQ_FPGA=m
CONFIG_FPGA_MGR_XILINX_SPI=m
CONFIG_FPGA_MGR_ICE40_SPI=m
CONFIG_FPGA_MGR_MACHXO2_SPI=m
CONFIG_FPGA_BRIDGE=m
CONFIG_ALTERA_FREEZE_BRIDGE=m
CONFIG_XILINX_PR_DECOUPLER=m
CONFIG_FPGA_REGION=m
CONFIG_OF_FPGA_REGION=m
CONFIG_FPGA_DFL=m
CONFIG_FPGA_DFL_AFU=m
CONFIG_FPGA_DFL_NIOS_INTEL_PAC_N3000=m
CONFIG_FPGA_MGR_ZYNQMP_FPGA=m
CONFIG_FPGA_MGR_VERSAL_FPGA=m
CONFIG_FPGA_M10_BMC_SEC_UPDATE=m
CONFIG_FPGA_MGR_MICROCHIP_SPI=m
CONFIG_FSI=m
CONFIG_FSI_NEW_DEV_NODE=y
CONFIG_FSI_MASTER_GPIO=m
CONFIG_FSI_MASTER_HUB=m
CONFIG_FSI_MASTER_AST_CF=m
CONFIG_FSI_MASTER_ASPEED=m
CONFIG_FSI_SCOM=m
CONFIG_FSI_SBEFIFO=m
CONFIG_FSI_OCC=m
CONFIG_TEE=m
CONFIG_MULTIPLEXER=m

#
# Multiplexer drivers
#
CONFIG_MUX_ADG792A=m
CONFIG_MUX_ADGS1408=m
CONFIG_MUX_GPIO=m
CONFIG_MUX_MMIO=m
# end of Multiplexer drivers

CONFIG_PM_OPP=y
CONFIG_SIOX=m
CONFIG_SIOX_BUS_GPIO=m
CONFIG_SLIMBUS=m
CONFIG_SLIM_QCOM_CTRL=m
CONFIG_SLIM_QCOM_NGD_CTRL=m
CONFIG_INTERCONNECT=y
CONFIG_INTERCONNECT_IMX=m
CONFIG_INTERCONNECT_IMX8MM=m
CONFIG_INTERCONNECT_IMX8MN=m
CONFIG_INTERCONNECT_IMX8MQ=m
CONFIG_INTERCONNECT_IMX8MP=m
CONFIG_INTERCONNECT_QCOM_OSM_L3=m
CONFIG_INTERCONNECT_SAMSUNG=y
CONFIG_INTERCONNECT_EXYNOS=m
CONFIG_COUNTER=m
CONFIG_104_QUAD_8=m
CONFIG_INTERRUPT_CNT=m
CONFIG_STM32_TIMER_CNT=m
CONFIG_STM32_LPTIMER_CNT=m
CONFIG_TI_EQEP=m
CONFIG_FTM_QUADDEC=m
CONFIG_MICROCHIP_TCB_CAPTURE=m
CONFIG_TI_ECAP_CAPTURE=m
CONFIG_MOST=m
CONFIG_MOST_USB_HDM=m
CONFIG_MOST_CDEV=m
CONFIG_MOST_SND=m
CONFIG_PECI=m
CONFIG_PECI_CPU=m
CONFIG_PECI_ASPEED=m
CONFIG_HTE=y
# end of Device Drivers

#
# File systems
#
CONFIG_VALIDATE_FS_PARSER=y
CONFIG_FS_IOMAP=y
CONFIG_EXT2_FS=m
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT3_FS=m
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_EXT4_FS=m
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
CONFIG_EXT4_DEBUG=y
CONFIG_EXT4_KUNIT_TESTS=m
CONFIG_JBD2=m
CONFIG_JBD2_DEBUG=y
CONFIG_FS_MBCACHE=m
CONFIG_REISERFS_FS=m
CONFIG_REISERFS_CHECK=y
CONFIG_REISERFS_PROC_INFO=y
CONFIG_REISERFS_FS_XATTR=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_SECURITY=y
CONFIG_JFS_FS=m
CONFIG_JFS_POSIX_ACL=y
CONFIG_JFS_SECURITY=y
CONFIG_JFS_DEBUG=y
CONFIG_JFS_STATISTICS=y
CONFIG_XFS_FS=m
CONFIG_XFS_SUPPORT_V4=y
CONFIG_XFS_QUOTA=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_RT=y
CONFIG_XFS_ONLINE_SCRUB=y
CONFIG_XFS_ONLINE_REPAIR=y
CONFIG_XFS_DEBUG=y
CONFIG_XFS_ASSERT_FATAL=y
CONFIG_GFS2_FS=m
CONFIG_GFS2_FS_LOCKING_DLM=y
CONFIG_OCFS2_FS=m
CONFIG_OCFS2_FS_O2CB=m
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
CONFIG_OCFS2_FS_STATS=y
CONFIG_OCFS2_DEBUG_MASKLOG=y
CONFIG_OCFS2_DEBUG_FS=y
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_BTRFS_FS_CHECK_INTEGRITY=y
CONFIG_BTRFS_FS_RUN_SANITY_TESTS=y
CONFIG_BTRFS_DEBUG=y
CONFIG_BTRFS_ASSERT=y
CONFIG_BTRFS_FS_REF_VERIFY=y
CONFIG_NILFS2_FS=m
CONFIG_F2FS_FS=m
CONFIG_F2FS_STAT_FS=y
CONFIG_F2FS_FS_XATTR=y
CONFIG_F2FS_FS_POSIX_ACL=y
CONFIG_F2FS_FS_SECURITY=y
CONFIG_F2FS_CHECK_FS=y
CONFIG_F2FS_FAULT_INJECTION=y
CONFIG_F2FS_FS_COMPRESSION=y
CONFIG_F2FS_FS_LZO=y
CONFIG_F2FS_FS_LZORLE=y
CONFIG_F2FS_FS_LZ4=y
CONFIG_F2FS_FS_LZ4HC=y
CONFIG_F2FS_FS_ZSTD=y
CONFIG_F2FS_IOSTAT=y
CONFIG_F2FS_UNFAIR_RWSEM=y
CONFIG_ZONEFS_FS=m
CONFIG_FS_POSIX_ACL=y
CONFIG_EXPORTFS=y
CONFIG_EXPORTFS_BLOCK_OPS=y
CONFIG_FILE_LOCKING=y
CONFIG_FS_ENCRYPTION=y
CONFIG_FS_ENCRYPTION_ALGS=m
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_VERITY=y
CONFIG_FS_VERITY_DEBUG=y
CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY_USER=y
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_PRINT_QUOTA_WARNING=y
CONFIG_QUOTA_DEBUG=y
CONFIG_QUOTA_TREE=m
CONFIG_QFMT_V1=m
CONFIG_QFMT_V2=m
CONFIG_QUOTACTL=y
CONFIG_AUTOFS4_FS=m
CONFIG_AUTOFS_FS=m
CONFIG_FUSE_FS=m
CONFIG_CUSE=m
CONFIG_VIRTIO_FS=m
CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS_REDIRECT_DIR=y
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
CONFIG_OVERLAY_FS_INDEX=y
CONFIG_OVERLAY_FS_METACOPY=y

#
# Caches
#
CONFIG_NETFS_SUPPORT=m
CONFIG_NETFS_STATS=y
CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
CONFIG_FSCACHE_DEBUG=y
CONFIG_CACHEFILES=m
CONFIG_CACHEFILES_DEBUG=y
CONFIG_CACHEFILES_ERROR_INJECTION=y
CONFIG_CACHEFILES_ONDEMAND=y
# end of Caches

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=m
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_UDF_FS=m
# end of CD-ROM/DVD Filesystems

#
# DOS/FAT/EXFAT/NT Filesystems
#
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_FAT_DEFAULT_UTF8=y
CONFIG_FAT_KUNIT_TEST=m
CONFIG_EXFAT_FS=m
CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
CONFIG_NTFS_FS=m
CONFIG_NTFS_DEBUG=y
CONFIG_NTFS_RW=y
CONFIG_NTFS3_FS=m
CONFIG_NTFS3_LZX_XPRESS=y
CONFIG_NTFS3_FS_POSIX_ACL=y
# end of DOS/FAT/EXFAT/NT Filesystems

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_PROC_CHILDREN=y
CONFIG_KERNFS=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_MEMFD_CREATE=y
CONFIG_CONFIGFS_FS=m
# end of Pseudo filesystems

CONFIG_MISC_FILESYSTEMS=y
CONFIG_ORANGEFS_FS=m
CONFIG_ADFS_FS=m
CONFIG_ADFS_FS_RW=y
CONFIG_AFFS_FS=m
CONFIG_ECRYPT_FS=m
CONFIG_ECRYPT_FS_MESSAGING=y
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
CONFIG_BEFS_FS=m
CONFIG_BEFS_DEBUG=y
CONFIG_BFS_FS=m
CONFIG_EFS_FS=m
CONFIG_JFFS2_FS=m
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_FS_WBUF_VERIFY=y
CONFIG_JFFS2_SUMMARY=y
CONFIG_JFFS2_FS_XATTR=y
CONFIG_JFFS2_FS_POSIX_ACL=y
CONFIG_JFFS2_FS_SECURITY=y
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_RTIME=y
CONFIG_JFFS2_RUBIN=y
# CONFIG_JFFS2_CMODE_NONE is not set
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
CONFIG_UBIFS_FS=m
CONFIG_UBIFS_FS_ADVANCED_COMPR=y
CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
CONFIG_UBIFS_FS_ZSTD=y
CONFIG_UBIFS_ATIME_SUPPORT=y
CONFIG_UBIFS_FS_XATTR=y
CONFIG_UBIFS_FS_SECURITY=y
CONFIG_UBIFS_FS_AUTHENTICATION=y
CONFIG_CRAMFS=m
CONFIG_CRAMFS_BLOCKDEV=y
CONFIG_CRAMFS_MTD=y
CONFIG_SQUASHFS=m
CONFIG_SQUASHFS_FILE_CACHE=y
# CONFIG_SQUASHFS_FILE_DIRECT is not set
CONFIG_SQUASHFS_DECOMP_SINGLE=y
# CONFIG_SQUASHFS_DECOMP_MULTI is not set
# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set
CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_ZLIB=y
CONFIG_SQUASHFS_LZ4=y
CONFIG_SQUASHFS_LZO=y
CONFIG_SQUASHFS_XZ=y
CONFIG_SQUASHFS_ZSTD=y
CONFIG_SQUASHFS_4K_DEVBLK_SIZE=y
CONFIG_SQUASHFS_EMBEDDED=y
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
CONFIG_VXFS_FS=m
CONFIG_MINIX_FS=m
CONFIG_MINIX_FS_BIG_ENDIAN_16BIT_INDEXED=y
CONFIG_OMFS_FS=m
CONFIG_HPFS_FS=m
CONFIG_QNX4FS_FS=m
CONFIG_QNX6FS_FS=m
CONFIG_QNX6FS_DEBUG=y
CONFIG_ROMFS_FS=m
CONFIG_ROMFS_BACKED_BY_BLOCK=y
# CONFIG_ROMFS_BACKED_BY_MTD is not set
# CONFIG_ROMFS_BACKED_BY_BOTH is not set
CONFIG_ROMFS_ON_BLOCK=y
CONFIG_PSTORE=m
CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240
CONFIG_PSTORE_DEFLATE_COMPRESS=m
CONFIG_PSTORE_LZO_COMPRESS=m
CONFIG_PSTORE_LZ4_COMPRESS=m
CONFIG_PSTORE_LZ4HC_COMPRESS=m
CONFIG_PSTORE_842_COMPRESS=y
CONFIG_PSTORE_ZSTD_COMPRESS=y
CONFIG_PSTORE_COMPRESS=y
CONFIG_PSTORE_DEFLATE_COMPRESS_DEFAULT=y
# CONFIG_PSTORE_LZO_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_LZ4_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_LZ4HC_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_842_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT is not set
CONFIG_PSTORE_COMPRESS_DEFAULT="deflate"
CONFIG_PSTORE_CONSOLE=y
CONFIG_PSTORE_PMSG=y
CONFIG_PSTORE_RAM=m
CONFIG_PSTORE_ZONE=m
CONFIG_PSTORE_BLK=m
CONFIG_PSTORE_BLK_BLKDEV=""
CONFIG_PSTORE_BLK_KMSG_SIZE=64
CONFIG_PSTORE_BLK_MAX_REASON=2
CONFIG_PSTORE_BLK_PMSG_SIZE=64
CONFIG_PSTORE_BLK_CONSOLE_SIZE=64
CONFIG_SYSV_FS=m
CONFIG_UFS_FS=m
CONFIG_UFS_FS_WRITE=y
CONFIG_UFS_DEBUG=y
CONFIG_EROFS_FS=m
CONFIG_EROFS_FS_DEBUG=y
CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_ZIP=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ONDEMAND=y
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=m
CONFIG_NFS_V2=m
CONFIG_NFS_V3=m
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=m
CONFIG_NFS_SWAP=y
CONFIG_NFS_V4_1=y
CONFIG_NFS_V4_2=y
CONFIG_PNFS_FILE_LAYOUT=m
CONFIG_PNFS_BLOCK=m
CONFIG_PNFS_FLEXFILE_LAYOUT=m
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
CONFIG_NFS_V4_1_MIGRATION=y
CONFIG_NFS_V4_SECURITY_LABEL=y
CONFIG_NFS_FSCACHE=y
CONFIG_NFS_USE_LEGACY_DNS=y
CONFIG_NFS_DEBUG=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
CONFIG_NFS_V4_2_READ_PLUS=y
CONFIG_NFSD=m
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFSD_V4=y
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_SCSILAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFSD_V4_2_INTER_SSC=y
CONFIG_NFSD_V4_SECURITY_LABEL=y
CONFIG_GRACE_PERIOD=m
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_NFS_COMMON=y
CONFIG_NFS_V4_2_SSC_HELPER=y
CONFIG_SUNRPC=m
CONFIG_SUNRPC_GSS=m
CONFIG_SUNRPC_BACKCHANNEL=y
CONFIG_SUNRPC_SWAP=y
CONFIG_RPCSEC_GSS_KRB5=m
CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES=y
CONFIG_SUNRPC_DEBUG=y
CONFIG_SUNRPC_XPRT_RDMA=m
CONFIG_CEPH_FS=m
CONFIG_CEPH_FSCACHE=y
CONFIG_CEPH_FS_POSIX_ACL=y
CONFIG_CEPH_FS_SECURITY_LABEL=y
CONFIG_CIFS=m
CONFIG_CIFS_STATS2=y
CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y
CONFIG_CIFS_UPCALL=y
CONFIG_CIFS_XATTR=y
CONFIG_CIFS_POSIX=y
CONFIG_CIFS_DEBUG=y
CONFIG_CIFS_DEBUG2=y
CONFIG_CIFS_DEBUG_DUMP_KEYS=y
CONFIG_CIFS_DFS_UPCALL=y
CONFIG_CIFS_SWN_UPCALL=y
CONFIG_CIFS_SMB_DIRECT=y
CONFIG_CIFS_FSCACHE=y
CONFIG_SMB_SERVER=m
CONFIG_SMB_SERVER_SMBDIRECT=y
CONFIG_SMB_SERVER_CHECK_CAP_NET_ADMIN=y
CONFIG_SMB_SERVER_KERBEROS5=y
CONFIG_SMBFS_COMMON=m
CONFIG_CODA_FS=m
CONFIG_AFS_FS=m
CONFIG_AFS_DEBUG=y
CONFIG_AFS_FSCACHE=y
CONFIG_AFS_DEBUG_CURSOR=y
CONFIG_9P_FS=m
CONFIG_9P_FSCACHE=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_9P_FS_SECURITY=y
CONFIG_NLS=m
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=m
CONFIG_NLS_CODEPAGE_737=m
CONFIG_NLS_CODEPAGE_775=m
CONFIG_NLS_CODEPAGE_850=m
CONFIG_NLS_CODEPAGE_852=m
CONFIG_NLS_CODEPAGE_855=m
CONFIG_NLS_CODEPAGE_857=m
CONFIG_NLS_CODEPAGE_860=m
CONFIG_NLS_CODEPAGE_861=m
CONFIG_NLS_CODEPAGE_862=m
CONFIG_NLS_CODEPAGE_863=m
CONFIG_NLS_CODEPAGE_864=m
CONFIG_NLS_CODEPAGE_865=m
CONFIG_NLS_CODEPAGE_866=m
CONFIG_NLS_CODEPAGE_869=m
CONFIG_NLS_CODEPAGE_936=m
CONFIG_NLS_CODEPAGE_950=m
CONFIG_NLS_CODEPAGE_932=m
CONFIG_NLS_CODEPAGE_949=m
CONFIG_NLS_CODEPAGE_874=m
CONFIG_NLS_ISO8859_8=m
CONFIG_NLS_CODEPAGE_1250=m
CONFIG_NLS_CODEPAGE_1251=m
CONFIG_NLS_ASCII=m
CONFIG_NLS_ISO8859_1=m
CONFIG_NLS_ISO8859_2=m
CONFIG_NLS_ISO8859_3=m
CONFIG_NLS_ISO8859_4=m
CONFIG_NLS_ISO8859_5=m
CONFIG_NLS_ISO8859_6=m
CONFIG_NLS_ISO8859_7=m
CONFIG_NLS_ISO8859_9=m
CONFIG_NLS_ISO8859_13=m
CONFIG_NLS_ISO8859_14=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
CONFIG_NLS_MAC_ROMAN=m
CONFIG_NLS_MAC_CELTIC=m
CONFIG_NLS_MAC_CENTEURO=m
CONFIG_NLS_MAC_CROATIAN=m
CONFIG_NLS_MAC_CYRILLIC=m
CONFIG_NLS_MAC_GAELIC=m
CONFIG_NLS_MAC_GREEK=m
CONFIG_NLS_MAC_ICELAND=m
CONFIG_NLS_MAC_INUIT=m
CONFIG_NLS_MAC_ROMANIAN=m
CONFIG_NLS_MAC_TURKISH=m
CONFIG_NLS_UTF8=m
CONFIG_DLM=m
CONFIG_DLM_DEPRECATED_API=y
CONFIG_DLM_DEBUG=y
CONFIG_UNICODE=m
CONFIG_UNICODE_NORMALIZATION_SELFTEST=m
CONFIG_IO_WQ=y
# end of File systems

#
# Security options
#
CONFIG_KEYS=y
CONFIG_KEYS_REQUEST_CACHE=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_TRUSTED_KEYS=m
CONFIG_TRUSTED_KEYS_TPM=y
CONFIG_TRUSTED_KEYS_TEE=y
CONFIG_ENCRYPTED_KEYS=y
CONFIG_USER_DECRYPTED_DATA=y
CONFIG_KEY_DH_OPERATIONS=y
CONFIG_KEY_NOTIFICATIONS=y
CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITY=y
CONFIG_SECURITY_WRITABLE_HOOKS=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
CONFIG_SECURITY_INFINIBAND=y
CONFIG_SECURITY_NETWORK_XFRM=y
CONFIG_SECURITY_PATH=y
CONFIG_LSM_MMAP_MIN_ADDR=65536
CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
CONFIG_HARDENED_USERCOPY=y
CONFIG_STATIC_USERMODEHELPER=y
CONFIG_STATIC_USERMODEHELPER_PATH="/sbin/usermode-helper"
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_SECURITY_SELINUX_DISABLE=y
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=0
CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS=9
CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256
CONFIG_SECURITY_SMACK=y
CONFIG_SECURITY_SMACK_BRINGUP=y
CONFIG_SECURITY_SMACK_NETFILTER=y
CONFIG_SECURITY_SMACK_APPEND_SIGNALS=y
CONFIG_SECURITY_TOMOYO=y
CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048
CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024
CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER=y
CONFIG_SECURITY_TOMOYO_INSECURE_BUILTIN_SETTING=y
CONFIG_SECURITY_APPARMOR=y
CONFIG_SECURITY_APPARMOR_DEBUG=y
CONFIG_SECURITY_APPARMOR_DEBUG_ASSERTS=y
CONFIG_SECURITY_APPARMOR_DEBUG_MESSAGES=y
CONFIG_SECURITY_APPARMOR_INTROSPECT_POLICY=y
CONFIG_SECURITY_APPARMOR_HASH=y
CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y
CONFIG_SECURITY_APPARMOR_EXPORT_BINARY=y
CONFIG_SECURITY_APPARMOR_PARANOID_LOAD=y
CONFIG_SECURITY_LOADPIN=y
CONFIG_SECURITY_LOADPIN_ENFORCE=y
CONFIG_SECURITY_YAMA=y
CONFIG_SECURITY_SAFESETID=y
CONFIG_SECURITY_LOCKDOWN_LSM=y
CONFIG_SECURITY_LOCKDOWN_LSM_EARLY=y
CONFIG_LOCK_DOWN_KERNEL_FORCE_NONE=y
# CONFIG_LOCK_DOWN_KERNEL_FORCE_INTEGRITY is not set
# CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY is not set
CONFIG_SECURITY_LANDLOCK=y
CONFIG_INTEGRITY=y
CONFIG_INTEGRITY_SIGNATURE=y
CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
CONFIG_INTEGRITY_TRUSTED_KEYRING=y
CONFIG_INTEGRITY_PLATFORM_KEYRING=y
CONFIG_INTEGRITY_AUDIT=y
CONFIG_IMA=y
CONFIG_IMA_MEASURE_PCR_IDX=10
CONFIG_IMA_LSM_RULES=y
CONFIG_IMA_NG_TEMPLATE=y
# CONFIG_IMA_SIG_TEMPLATE is not set
CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng"
CONFIG_IMA_DEFAULT_HASH_SHA1=y
# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set
# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set
CONFIG_IMA_DEFAULT_HASH="sha1"
CONFIG_IMA_WRITE_POLICY=y
CONFIG_IMA_READ_POLICY=y
CONFIG_IMA_APPRAISE=y
CONFIG_IMA_ARCH_POLICY=y
CONFIG_IMA_APPRAISE_BUILD_POLICY=y
CONFIG_IMA_APPRAISE_REQUIRE_FIRMWARE_SIGS=y
CONFIG_IMA_APPRAISE_REQUIRE_KEXEC_SIGS=y
CONFIG_IMA_APPRAISE_REQUIRE_MODULE_SIGS=y
CONFIG_IMA_APPRAISE_REQUIRE_POLICY_SIGS=y
CONFIG_IMA_APPRAISE_BOOTPARAM=y
CONFIG_IMA_APPRAISE_MODSIG=y
CONFIG_IMA_TRUSTED_KEYRING=y
CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY=y
CONFIG_IMA_BLACKLIST_KEYRING=y
CONFIG_IMA_LOAD_X509=y
CONFIG_IMA_X509_PATH="/etc/keys/x509_ima.der"
CONFIG_IMA_APPRAISE_SIGNED_INIT=y
CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS=y
CONFIG_IMA_QUEUE_EARLY_BOOT_KEYS=y
CONFIG_IMA_DISABLE_HTABLE=y
CONFIG_EVM=y
CONFIG_EVM_ATTR_FSUUID=y
CONFIG_EVM_EXTRA_SMACK_XATTRS=y
CONFIG_EVM_ADD_XATTRS=y
CONFIG_EVM_LOAD_X509=y
CONFIG_EVM_X509_PATH="/etc/keys/x509_evm.der"
CONFIG_DEFAULT_SECURITY_SELINUX=y
# CONFIG_DEFAULT_SECURITY_SMACK is not set
# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
# CONFIG_DEFAULT_SECURITY_APPARMOR is not set
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf"

#
# Kernel hardening options
#

#
# Memory initialization
#
CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y
# CONFIG_INIT_STACK_NONE is not set
CONFIG_INIT_STACK_ALL_PATTERN=y
# CONFIG_INIT_STACK_ALL_ZERO is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
CONFIG_INIT_ON_FREE_DEFAULT_ON=y
CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
CONFIG_ZERO_CALL_USED_REGS=y
# end of Memory initialization

CONFIG_RANDSTRUCT_NONE=y
# end of Kernel hardening options
# end of Security options

CONFIG_XOR_BLOCKS=m
CONFIG_ASYNC_CORE=m
CONFIG_ASYNC_MEMCPY=m
CONFIG_ASYNC_XOR=m
CONFIG_ASYNC_PQ=m
CONFIG_ASYNC_RAID6_RECOV=m
CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA=y
CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA=y
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=m
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_SKCIPHER=y
CONFIG_CRYPTO_SKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_RNG_DEFAULT=y
CONFIG_CRYPTO_AKCIPHER2=y
CONFIG_CRYPTO_AKCIPHER=y
CONFIG_CRYPTO_KPP2=y
CONFIG_CRYPTO_KPP=y
CONFIG_CRYPTO_ACOMP2=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
CONFIG_CRYPTO_USER=m
CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
CONFIG_CRYPTO_GF128MUL=m
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_NULL2=y
CONFIG_CRYPTO_CRYPTD=m
CONFIG_CRYPTO_AUTHENC=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_ENGINE=m
# end of Crypto core or helper

#
# Public-key cryptography
#
CONFIG_CRYPTO_RSA=y
CONFIG_CRYPTO_DH=y
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_ECC=m
CONFIG_CRYPTO_ECDH=m
CONFIG_CRYPTO_ECDSA=m
CONFIG_CRYPTO_ECRDSA=m
CONFIG_CRYPTO_SM2=m
CONFIG_CRYPTO_CURVE25519=m
# end of Public-key cryptography

#
# Block ciphers
#
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_AES_TI=m
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_ARIA=m
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_BLOWFISH_COMMON=m
CONFIG_CRYPTO_CAMELLIA=m
CONFIG_CRYPTO_CAST_COMMON=m
CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_FCRYPT=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_SEED=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_SM4=m
CONFIG_CRYPTO_SM4_GENERIC=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TWOFISH=m
CONFIG_CRYPTO_TWOFISH_COMMON=m
# end of Block ciphers

#
# Length-preserving ciphers and modes
#
CONFIG_CRYPTO_ADIANTUM=m
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CFB=m
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=m
CONFIG_CRYPTO_ECB=m
CONFIG_CRYPTO_HCTR2=m
CONFIG_CRYPTO_KEYWRAP=m
CONFIG_CRYPTO_LRW=m
CONFIG_CRYPTO_OFB=m
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_XCTR=m
CONFIG_CRYPTO_XTS=m
CONFIG_CRYPTO_NHPOLY1305=m
# end of Length-preserving ciphers and modes

#
# AEAD (authenticated encryption with associated data) ciphers
#
CONFIG_CRYPTO_AEGIS128=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_CCM=m
CONFIG_CRYPTO_GCM=m
CONFIG_CRYPTO_SEQIV=m
CONFIG_CRYPTO_ECHAINIV=m
CONFIG_CRYPTO_ESSIV=m
# end of AEAD (authenticated encryption with associated data) ciphers

#
# Hashes, digests, and MACs
#
CONFIG_CRYPTO_BLAKE2B=m
CONFIG_CRYPTO_CMAC=m
CONFIG_CRYPTO_GHASH=m
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_POLYVAL=m
CONFIG_CRYPTO_POLY1305=m
CONFIG_CRYPTO_RMD160=m
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=y
CONFIG_CRYPTO_SHA3=m
CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_SM3_GENERIC=m
CONFIG_CRYPTO_STREEBOG=m
CONFIG_CRYPTO_VMAC=m
CONFIG_CRYPTO_WP512=m
CONFIG_CRYPTO_XCBC=m
CONFIG_CRYPTO_XXHASH=m
# end of Hashes, digests, and MACs

#
# CRCs (cyclic redundancy checks)
#
CONFIG_CRYPTO_CRC32C=m
CONFIG_CRYPTO_CRC32=m
CONFIG_CRYPTO_CRCT10DIF=m
CONFIG_CRYPTO_CRC64_ROCKSOFT=m
# end of CRCs (cyclic redundancy checks)

#
# Compression
#
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_LZO=y
CONFIG_CRYPTO_842=m
CONFIG_CRYPTO_LZ4=m
CONFIG_CRYPTO_LZ4HC=m
CONFIG_CRYPTO_ZSTD=m
# end of Compression

#
# Random number generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
CONFIG_CRYPTO_DRBG_MENU=y
CONFIG_CRYPTO_DRBG_HMAC=y
CONFIG_CRYPTO_DRBG_HASH=y
CONFIG_CRYPTO_DRBG_CTR=y
CONFIG_CRYPTO_DRBG=y
CONFIG_CRYPTO_JITTERENTROPY=y
CONFIG_CRYPTO_KDF800108_CTR=y
# end of Random number generation

#
# Userspace interface
#
CONFIG_CRYPTO_USER_API=m
CONFIG_CRYPTO_USER_API_HASH=m
CONFIG_CRYPTO_USER_API_SKCIPHER=m
CONFIG_CRYPTO_USER_API_RNG=m
CONFIG_CRYPTO_USER_API_RNG_CAVP=y
CONFIG_CRYPTO_USER_API_AEAD=m
CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y
CONFIG_CRYPTO_STATS=y
# end of Userspace interface

CONFIG_CRYPTO_HASH_INFO=y
CONFIG_CRYPTO_HW=y
CONFIG_CRYPTO_DEV_ALLWINNER=y
CONFIG_CRYPTO_DEV_EXYNOS_RNG=m
CONFIG_CRYPTO_DEV_S5P=m
CONFIG_CRYPTO_DEV_ATMEL_AUTHENC=y
CONFIG_CRYPTO_DEV_ATMEL_AES=m
CONFIG_CRYPTO_DEV_ATMEL_TDES=m
CONFIG_CRYPTO_DEV_ATMEL_SHA=m
CONFIG_CRYPTO_DEV_ATMEL_I2C=m
CONFIG_CRYPTO_DEV_ATMEL_ECC=m
CONFIG_CRYPTO_DEV_ATMEL_SHA204A=m
CONFIG_CRYPTO_DEV_QCE=m
CONFIG_CRYPTO_DEV_QCE_SKCIPHER=y
CONFIG_CRYPTO_DEV_QCE_SHA=y
CONFIG_CRYPTO_DEV_QCE_AEAD=y
CONFIG_CRYPTO_DEV_QCE_ENABLE_ALL=y
# CONFIG_CRYPTO_DEV_QCE_ENABLE_SKCIPHER is not set
# CONFIG_CRYPTO_DEV_QCE_ENABLE_SHA is not set
# CONFIG_CRYPTO_DEV_QCE_ENABLE_AEAD is not set
CONFIG_CRYPTO_DEV_QCE_SW_MAX_LEN=512
CONFIG_CRYPTO_DEV_QCOM_RNG=m
CONFIG_CRYPTO_DEV_IMGTEC_HASH=m
CONFIG_CRYPTO_DEV_ZYNQMP_AES=m
CONFIG_CRYPTO_DEV_ZYNQMP_SHA3=m
CONFIG_CRYPTO_DEV_VIRTIO=m
CONFIG_CRYPTO_DEV_SAFEXCEL=m
CONFIG_CRYPTO_DEV_CCREE=m
CONFIG_CRYPTO_DEV_HISI_SEC=m
CONFIG_CRYPTO_DEV_AMLOGIC_GXL=m
CONFIG_CRYPTO_DEV_AMLOGIC_GXL_DEBUG=y
CONFIG_CRYPTO_DEV_SA2UL=m
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_AES_SM4=m
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_AES_SM4_ECB=y
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_AES_SM4_CTS=y
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_ECC=m
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_HCU=m
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_HCU_HMAC_SHA224=y
CONFIG_CRYPTO_DEV_ASPEED=m
CONFIG_CRYPTO_DEV_ASPEED_DEBUG=y
CONFIG_CRYPTO_DEV_ASPEED_HACE_HASH=y
CONFIG_CRYPTO_DEV_ASPEED_HACE_CRYPTO=y
CONFIG_ASYMMETRIC_KEY_TYPE=y
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
CONFIG_X509_CERTIFICATE_PARSER=y
CONFIG_PKCS8_PRIVATE_KEY_PARSER=m
CONFIG_PKCS7_MESSAGE_PARSER=y
CONFIG_PKCS7_TEST_KEY=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_FIPS_SIGNATURE_SELFTEST=y

#
# Certificates for signature checking
#
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
# CONFIG_MODULE_SIG_KEY_TYPE_ECDSA is not set
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_EXTRA_CERTIFICATE=y
CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096
CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
CONFIG_SYSTEM_REVOCATION_LIST=y
CONFIG_SYSTEM_REVOCATION_KEYS=""
CONFIG_SYSTEM_BLACKLIST_AUTH_UPDATE=y
# end of Certificates for signature checking

CONFIG_BINARY_PRINTF=y

#
# Library routines
#
CONFIG_RAID6_PQ=m
CONFIG_RAID6_PQ_BENCHMARK=y
CONFIG_LINEAR_RANGES=y
CONFIG_PACKING=y
CONFIG_BITREVERSE=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_GENERIC_NET_UTILS=y
CONFIG_CORDIC=m
CONFIG_PRIME_NUMBERS=m
CONFIG_RATIONAL=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_IOMAP=y
CONFIG_STMP_DEVICE=y

#
# Crypto library routines
#
CONFIG_CRYPTO_LIB_UTILS=y
CONFIG_CRYPTO_LIB_AES=y
CONFIG_CRYPTO_LIB_ARC4=m
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m
CONFIG_CRYPTO_LIB_CHACHA=m
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=m
CONFIG_CRYPTO_LIB_CURVE25519=m
CONFIG_CRYPTO_LIB_DES=m
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
CONFIG_CRYPTO_LIB_POLY1305=m
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
CONFIG_CRYPTO_LIB_SHA1=y
CONFIG_CRYPTO_LIB_SHA256=y
# end of Crypto library routines

CONFIG_CRC_CCITT=m
CONFIG_CRC16=m
CONFIG_CRC_T10DIF=m
CONFIG_CRC64_ROCKSOFT=m
CONFIG_CRC_ITU_T=m
CONFIG_CRC32=y
CONFIG_CRC32_SELFTEST=m
CONFIG_CRC32_SLICEBY8=y
# CONFIG_CRC32_SLICEBY4 is not set
# CONFIG_CRC32_SARWATE is not set
# CONFIG_CRC32_BIT is not set
CONFIG_CRC64=m
CONFIG_CRC4=m
CONFIG_CRC7=m
CONFIG_LIBCRC32C=m
CONFIG_CRC8=m
CONFIG_XXHASH=y
CONFIG_AUDIT_GENERIC=y
CONFIG_RANDOM32_SELFTEST=y
CONFIG_842_COMPRESS=m
CONFIG_842_DECOMPRESS=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_LZ4_COMPRESS=m
CONFIG_LZ4HC_COMPRESS=m
CONFIG_LZ4_DECOMPRESS=y
CONFIG_ZSTD_COMMON=y
CONFIG_ZSTD_COMPRESS=m
CONFIG_ZSTD_DECOMPRESS=y
CONFIG_XZ_DEC=y
CONFIG_XZ_DEC_X86=y
CONFIG_XZ_DEC_POWERPC=y
CONFIG_XZ_DEC_IA64=y
CONFIG_XZ_DEC_ARM=y
CONFIG_XZ_DEC_ARMTHUMB=y
CONFIG_XZ_DEC_SPARC=y
CONFIG_XZ_DEC_MICROLZMA=y
CONFIG_XZ_DEC_BCJ=y
CONFIG_XZ_DEC_TEST=m
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_DECOMPRESS_XZ=y
CONFIG_DECOMPRESS_LZO=y
CONFIG_DECOMPRESS_LZ4=y
CONFIG_DECOMPRESS_ZSTD=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_REED_SOLOMON=m
CONFIG_REED_SOLOMON_ENC8=y
CONFIG_REED_SOLOMON_DEC8=y
CONFIG_REED_SOLOMON_ENC16=y
CONFIG_REED_SOLOMON_DEC16=y
CONFIG_BCH=m
CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=m
CONFIG_TEXTSEARCH_BM=m
CONFIG_TEXTSEARCH_FSM=m
CONFIG_BTREE=y
CONFIG_INTERVAL_TREE=y
CONFIG_XARRAY_MULTI=y
CONFIG_ASSOCIATIVE_ARRAY=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_DMA=y
CONFIG_DMA_OPS=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_DMA_DECLARE_COHERENT=y
CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y
CONFIG_ARCH_HAS_DMA_PREP_COHERENT=y
CONFIG_DMA_NONCOHERENT_MMAP=y
CONFIG_DMA_COHERENT_POOL=y
CONFIG_DMA_DIRECT_REMAP=y
CONFIG_DMA_API_DEBUG=y
CONFIG_DMA_API_DEBUG_SG=y
CONFIG_DMA_MAP_BENCHMARK=y
CONFIG_SGL_ALLOC=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_DQL=y
CONFIG_GLOB=y
CONFIG_GLOB_SELFTEST=m
CONFIG_NLATTR=y
CONFIG_GENERIC_ATOMIC64=y
CONFIG_LRU_CACHE=m
CONFIG_CLZ_TAB=y
CONFIG_IRQ_POLL=y
CONFIG_MPILIB=y
CONFIG_SIGNATURE=y
CONFIG_DIMLIB=y
CONFIG_LIBFDT=y
CONFIG_OID_REGISTRY=y
CONFIG_FONT_SUPPORT=m
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
CONFIG_FONT_6x11=y
CONFIG_FONT_7x14=y
CONFIG_FONT_PEARL_8x8=y
CONFIG_FONT_ACORN_8x8=y
CONFIG_FONT_MINI_4x6=y
CONFIG_FONT_6x10=y
CONFIG_FONT_10x18=y
CONFIG_FONT_SUN8x16=y
CONFIG_FONT_SUN12x22=y
CONFIG_FONT_TER16x32=y
CONFIG_FONT_6x8=y
CONFIG_SG_SPLIT=y
CONFIG_SG_POOL=y
CONFIG_SBITMAP=y
CONFIG_PARMAN=m
CONFIG_OBJAGG=m
# end of Library routines

CONFIG_ASN1_ENCODER=m
CONFIG_POLYNOMIAL=m

#
# Kernel hacking
#

#
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
CONFIG_PRINTK_CALLER=y
CONFIG_STACKTRACE_BUILD_ID=y
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
CONFIG_CONSOLE_LOGLEVEL_QUIET=4
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_DYNAMIC_DEBUG=y
CONFIG_DYNAMIC_DEBUG_CORE=y
CONFIG_SYMBOLIC_ERRNAME=y
CONFIG_DEBUG_BUGVERBOSE=y
# end of printk and dmesg options

CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_MISC=y

#
# Compile-time checks and compiler options
#
CONFIG_AS_HAS_NON_CONST_LEB128=y
CONFIG_DEBUG_INFO_NONE=y
# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set
# CONFIG_DEBUG_INFO_DWARF4 is not set
# CONFIG_DEBUG_INFO_DWARF5 is not set
CONFIG_FRAME_WARN=1024
CONFIG_STRIP_ASM_SYMS=y
CONFIG_READABLE_ASM=y
CONFIG_HEADERS_INSTALL=y
CONFIG_DEBUG_SECTION_MISMATCH=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
CONFIG_FRAME_POINTER=y
CONFIG_VMLINUX_MAP=y
CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
# end of Compile-time checks and compiler options

#
# Generic Kernel Debugging Instruments
#
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE=""
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_FS_ALLOW_ALL=y
# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set
# CONFIG_DEBUG_FS_ALLOW_NONE is not set
CONFIG_UBSAN=y
CONFIG_CC_HAS_UBSAN_BOUNDS=y
CONFIG_UBSAN_BOUNDS=y
CONFIG_UBSAN_ONLY_BOUNDS=y
CONFIG_UBSAN_SHIFT=y
CONFIG_UBSAN_DIV_ZERO=y
CONFIG_UBSAN_UNREACHABLE=y
CONFIG_UBSAN_BOOL=y
CONFIG_UBSAN_ENUM=y
CONFIG_TEST_UBSAN=m
CONFIG_HAVE_KCSAN_COMPILER=y
# end of Generic Kernel Debugging Instruments

#
# Networking Debugging
#
CONFIG_DEBUG_NET=y
# end of Networking Debugging

#
# Memory Debugging
#
CONFIG_PAGE_EXTENSION=y
CONFIG_DEBUG_PAGEALLOC=y
CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT=y
CONFIG_SLUB_DEBUG=y
CONFIG_SLUB_DEBUG_ON=y
CONFIG_PAGE_POISONING=y
CONFIG_DEBUG_OBJECTS=y
CONFIG_DEBUG_OBJECTS_SELFTEST=y
CONFIG_DEBUG_OBJECTS_FREE=y
CONFIG_DEBUG_OBJECTS_TIMERS=y
CONFIG_DEBUG_OBJECTS_WORK=y
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
CONFIG_SHRINKER_DEBUG=y
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_SCHED_STACK_END_CHECK=y
CONFIG_DEBUG_VM_IRQSOFF=y
CONFIG_DEBUG_VM=y
CONFIG_DEBUG_VM_MAPLE_TREE=y
CONFIG_DEBUG_VM_RB=y
CONFIG_DEBUG_VM_PGFLAGS=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
# end of Memory Debugging

CONFIG_DEBUG_SHIRQ=y

#
# Debug Oops, Lockups and Hangs
#
CONFIG_PANIC_ON_OOPS=y
CONFIG_PANIC_ON_OOPS_VALUE=1
CONFIG_PANIC_TIMEOUT=0
CONFIG_LOCKUP_DETECTOR=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
CONFIG_WQ_WATCHDOG=y
CONFIG_TEST_LOCKUP=m
# end of Debug Oops, Lockups and Hangs

#
# Scheduler Debugging
#
CONFIG_SCHED_DEBUG=y
CONFIG_SCHED_INFO=y
CONFIG_SCHEDSTATS=y
# end of Scheduler Debugging

CONFIG_DEBUG_TIMEKEEPING=y

#
# Lock Debugging (spinlocks, mutexes, etc...)
#
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_RWSEMS=y
CONFIG_DEBUG_LOCKING_API_SELFTESTS=y
CONFIG_LOCK_TORTURE_TEST=m
CONFIG_WW_MUTEX_SELFTEST=m
CONFIG_SCF_TORTURE_TEST=m
# end of Lock Debugging (spinlocks, mutexes, etc...)

CONFIG_DEBUG_IRQFLAGS=y
CONFIG_WARN_ALL_UNSEEDED_RANDOM=y
CONFIG_DEBUG_KOBJECT=y
CONFIG_DEBUG_KOBJECT_RELEASE=y
CONFIG_HAVE_DEBUG_BUGVERBOSE=y

#
# Debug kernel data structures
#
CONFIG_DEBUG_LIST=y
CONFIG_DEBUG_PLIST=y
CONFIG_DEBUG_SG=y
CONFIG_DEBUG_NOTIFIERS=y
CONFIG_BUG_ON_DATA_CORRUPTION=y
CONFIG_DEBUG_MAPLE_TREE=y
# end of Debug kernel data structures

CONFIG_DEBUG_CREDENTIALS=y

#
# RCU Debugging
#
CONFIG_TORTURE_TEST=m
CONFIG_RCU_SCALE_TEST=m
CONFIG_RCU_TORTURE_TEST=m
CONFIG_RCU_REF_SCALE_TEST=m
CONFIG_RCU_TRACE=y
CONFIG_RCU_EQS_DEBUG=y
# end of RCU Debugging

CONFIG_DEBUG_WQ_FORCE_RR_CPU=y
CONFIG_TRACE_CLOCK=y
# CONFIG_SAMPLES is not set
# CONFIG_STRICT_DEVMEM is not set

#
# m68k Debugging
#
CONFIG_BOOTPARAM=y
CONFIG_BOOTPARAM_STRING="console=ttyS0,19200"
CONFIG_EARLY_PRINTK=y
# end of m68k Debugging

#
# Kernel Testing and Coverage
#
CONFIG_KUNIT=m
CONFIG_KUNIT_DEBUGFS=y
CONFIG_KUNIT_TEST=m
CONFIG_KUNIT_EXAMPLE_TEST=m
CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEFAULT_ENABLED=y
CONFIG_NOTIFIER_ERROR_INJECTION=m
CONFIG_OF_RECONFIG_NOTIFIER_ERROR_INJECT=m
CONFIG_NETDEV_NOTIFIER_ERROR_INJECT=m
CONFIG_FAULT_INJECTION=y
CONFIG_FAILSLAB=y
CONFIG_FAIL_PAGE_ALLOC=y
CONFIG_FAULT_INJECTION_USERCOPY=y
CONFIG_FAIL_MAKE_REQUEST=y
CONFIG_FAIL_IO_TIMEOUT=y
CONFIG_FAIL_FUTEX=y
CONFIG_FAULT_INJECTION_DEBUG_FS=y
CONFIG_FAIL_MMC_REQUEST=y
CONFIG_FAIL_SUNRPC=y
CONFIG_CC_HAS_SANCOV_TRACE_PC=y
CONFIG_RUNTIME_TESTING_MENU=y
CONFIG_LKDTM=m
CONFIG_CPUMASK_KUNIT_TEST=m
CONFIG_TEST_LIST_SORT=m
CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_SORT=m
CONFIG_TEST_DIV64=m
CONFIG_BACKTRACE_SELF_TEST=m
CONFIG_RBTREE_TEST=m
CONFIG_REED_SOLOMON_TEST=m
CONFIG_INTERVAL_TREE_TEST=m
CONFIG_PERCPU_TEST=m
CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m
CONFIG_TEST_HEXDUMP=m
CONFIG_STRING_SELFTEST=m
CONFIG_TEST_STRING_HELPERS=m
CONFIG_TEST_STRSCPY=m
CONFIG_TEST_KSTRTOX=m
CONFIG_TEST_PRINTF=m
CONFIG_TEST_SCANF=m
CONFIG_TEST_BITMAP=m
CONFIG_TEST_UUID=m
CONFIG_TEST_XARRAY=m
CONFIG_TEST_MAPLE_TREE=m
CONFIG_TEST_RHASHTABLE=m
CONFIG_TEST_SIPHASH=m
CONFIG_TEST_IDA=m
CONFIG_TEST_PARMAN=m
CONFIG_TEST_LKM=m
CONFIG_TEST_BITOPS=m
CONFIG_TEST_VMALLOC=m
CONFIG_TEST_USER_COPY=m
CONFIG_TEST_BPF=m
CONFIG_TEST_BLACKHOLE_DEV=m
CONFIG_FIND_BIT_BENCHMARK=m
CONFIG_TEST_FIRMWARE=m
CONFIG_TEST_SYSCTL=m
CONFIG_BITFIELD_KUNIT=m
CONFIG_HASH_KUNIT_TEST=m
CONFIG_RESOURCE_KUNIT_TEST=m
CONFIG_SYSCTL_KUNIT_TEST=m
CONFIG_LIST_KUNIT_TEST=m
CONFIG_LINEAR_RANGES_TEST=m
CONFIG_CMDLINE_KUNIT_TEST=m
CONFIG_BITS_TEST=m
CONFIG_SLUB_KUNIT_TEST=m
CONFIG_RATIONAL_KUNIT_TEST=m
CONFIG_MEMCPY_KUNIT_TEST=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
CONFIG_OVERFLOW_KUNIT_TEST=m
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_TEST_UDELAY=m
CONFIG_TEST_STATIC_KEYS=m
CONFIG_TEST_DYNAMIC_DEBUG=m
CONFIG_TEST_KMOD=m
CONFIG_TEST_MEMCAT_P=m
CONFIG_TEST_OBJAGG=m
CONFIG_TEST_MEMINIT=m
CONFIG_TEST_FREE_PAGES=m
CONFIG_ARCH_USE_MEMTEST=y
CONFIG_MEMTEST=y
# end of Kernel Testing and Coverage

#
# Rust hacking
#
# end of Rust hacking

CONFIG_WARN_MISSING_DOCUMENTS=y
CONFIG_WARN_ABI_ERRORS=y
# end of Kernel hacking

From error27 at gmail.com  Fri Dec 23 23:13:52 2022
From: error27 at gmail.com (Dan Carpenter)
Date: Sat, 24 Dec 2022 10:13:52 +0300
Subject: [PATCH v2 10/23] clk: mediatek: mt8173: Break down clock drivers
 and allow module build
In-Reply-To: <20221223094259.87373-11-angelogioacchino.delregno@collabora.com>
Message-ID: <202212240437.1D3FXJyP-lkp@intel.com>

Hi AngeloGioacchino,

https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/AngeloGioacchino-Del-Regno/clk-mediatek-mt8192-Correctly-unregister-and-free-clocks-on-failure/20221223-174705
base:   https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
patch link:    https://lore.kernel.org/r/20221223094259.87373-11-angelogioacchino.delregno%40collabora.com
patch subject: [PATCH v2 10/23] clk: mediatek: mt8173: Break down clock drivers and allow module build
config: parisc-randconfig-m031-20221219
compiler: hppa-linux-gcc (GCC) 12.1.0

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp at intel.com>
| Reported-by: Dan Carpenter <error27 at gmail.com>

smatch warnings:
drivers/clk/mediatek/clk-mt8173-apmixedsys.c:95 clk_mt8173_apmixed_probe() warn: passing zero to 'PTR_ERR'

vim +/PTR_ERR +95 drivers/clk/mediatek/clk-mt8173-apmixedsys.c

c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   85  static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   86  {
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   87  	struct device_node *node = pdev->dev.of_node;
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   88  	struct clk_hw_onecell_data *clk_data;
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   89  	void __iomem *base;
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   90  	struct clk_hw *hw;
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   91  	int r;
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   92  
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   93  	base = of_iomap(node, 0);
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   94  	if (!base)
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  @95  		return PTR_ERR(base);

return -ENOMEM?

c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   96  
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   97  	clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   98  	if (IS_ERR_OR_NULL(clk_data))
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23   99  		return -ENOMEM;
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  100  
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  101  	r = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  102  	if (r)
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  103  		goto free_clk_data;
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  104  
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  105  	hw = mtk_clk_register_ref2usb_tx("ref2usb_tx", "clk26m", base + REGOFF_REF2USB);
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  106  	if (IS_ERR(hw)) {
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  107  		r = PTR_ERR(hw);
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  108  		dev_err(&pdev->dev, "Failed to register ref2usb_tx: %d\n", r);
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  109  		goto unregister_plls;
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  110  	}
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  111  	clk_data->hws[CLK_APMIXED_REF2USB_TX] = hw;
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  112  
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  113  	hw = devm_clk_hw_register_divider(&pdev->dev, "hdmi_ref", "tvdpll_594m", 0,
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  114  					  base + REGOFF_HDMI_REF, 16, 3,
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  115  					  CLK_DIVIDER_POWER_OF_TWO, NULL);
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  116  	clk_data->hws[CLK_APMIXED_HDMI_REF] = hw;
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  117  
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  118  	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  119  	if (r)
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  120  		goto unregister_ref2usb;
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  121  
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  122  	return 0;
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  123  
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  124  unregister_ref2usb:
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  125  	mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  126  unregister_plls:
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  127  	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  128  free_clk_data:
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  129  	mtk_free_clk_data(clk_data);
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  130  	return r;
c10b45573221c8 AngeloGioacchino Del Regno 2022-12-23  131  }

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp



From daniel at makrotopia.org  Sat Dec 24 11:00:40 2022
From: daniel at makrotopia.org (Daniel Golle)
Date: Sat, 24 Dec 2022 19:00:40 +0000
Subject: [next v7 8/8] arm64: dts: mt7986: add Bananapi R3
In-Reply-To: <20221127114142.156573-9-linux@fw-web.de>
References: <20221127114142.156573-1-linux@fw-web.de>
 <20221127114142.156573-9-linux@fw-web.de>
Message-ID: <Y6dMWFy7gChG88j0@makrotopia.org>

Hi Frank,

please see some comments inline below:

On Sun, Nov 27, 2022 at 12:41:42PM +0100, Frank Wunderlich wrote:
> From: Frank Wunderlich <frank-w at public-files.de>
> 
> Add support for Bananapi R3 SBC.
> 
> - SD/eMMC support (switching first 4 bits of data-bus with sw6/D)
> - SPI-NAND/NOR support (switched CS by sw5/C)
> - all rj45 ports and both SFP working (eth1/lan4)
> - all USB-Ports + SIM-Slot tested
> - i2c and all uarts tested
> - wifi tested (with eeprom calibration data)
> 
> The device can boot from all 4 storage options. Both, SPI and MMC, can
> be switched using hardware switches on the board, see
> https://wiki.banana-pi.org/Banana_Pi_BPI-R3#Jumper_setting
> 
> Signed-off-by: Frank Wunderlich <frank-w at public-files.de>
> ---
> changes:
> v7:
> - squashed overlay-patch and converted sd/emmc dts to overlay too
> - moved mmc-regulators to base dts
> - changed common dtsi to (base dts) and overlay extension to dtso
> 
> v6:
> - drop usb 5v regulator from bpi-r3
>   based on chunfengs response it is only needed if regulator is
>   switched (like for otg), usb works without it.
> 
> v4:
> - add PCIe nodes
> - fix sfp-properties of sfp-1 (need to be plural)
>   thx to Denis Odintsov for this
> 
> v3:
> - rename factory-key to reset-key
> - add dcin regulator and add it as input for 3v3 (with renaming)
> - remove memory-node
> - dropped wifi eeprom (calibration) data
> - move mmc0 pinctrl to common dtsi and drop sdcard comment
> - change mmc pull-up/down to have generic bias-pull*
> 
> v2:
> - remove pcie to be added later (discussion about clocks)
> - some fixes based on suggestions on ML
>   - add key suffix like it's done in mt7622-bpi-r64 devicetree
>   - add dash in sfp node names
>   - use reg as unit for switch-node
>   - drop "-3-4" suffix from i2c-pins node name
>   - fix order in Makefile
> ---
>  arch/arm64/boot/dts/mediatek/Makefile         |   5 +
>  .../mt7986a-bananapi-bpi-r3-emmc.dtso         |  30 ++
>  .../mt7986a-bananapi-bpi-r3-nand.dtso         |  55 +++
>  .../mediatek/mt7986a-bananapi-bpi-r3-nor.dtso |  68 +++
>  .../mediatek/mt7986a-bananapi-bpi-r3-sd.dtso  |  24 +
>  .../dts/mediatek/mt7986a-bananapi-bpi-r3.dts  | 448 ++++++++++++++++++
>  6 files changed, 630 insertions(+)
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
> 
> diff --git a/arch/arm64/boot/dts/mediatek/Makefile b/arch/arm64/boot/dts/mediatek/Makefile
> index 813e735c5b96..d5cd7b3e09cf 100644
> --- a/arch/arm64/boot/dts/mediatek/Makefile
> +++ b/arch/arm64/boot/dts/mediatek/Makefile
> @@ -8,6 +8,11 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += mt6797-evb.dtb
>  dtb-$(CONFIG_ARCH_MEDIATEK) += mt6797-x20-dev.dtb
>  dtb-$(CONFIG_ARCH_MEDIATEK) += mt7622-rfb1.dtb
>  dtb-$(CONFIG_ARCH_MEDIATEK) += mt7622-bananapi-bpi-r64.dtb
> +dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3.dtb
> +dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-emmc.dtbo
> +dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-nand.dtbo
> +dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-nor.dtbo
> +dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-sd.dtbo
>  dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-rfb.dtb
>  dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986b-rfb.dtb
>  dtb-$(CONFIG_ARCH_MEDIATEK) += mt8167-pumpkin.dtb
> diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso
> new file mode 100644
> index 000000000000..c15f2f5760ed
> --- /dev/null
> +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso
> @@ -0,0 +1,30 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +/*
> + * Copyright (C) 2021 MediaTek Inc.
> + * Author: Sam.Shih <sam.shih at mediatek.com>
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +/ {
> +	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
> +	model = "Bananapi BPI-R3 (emmc)";

Why do you set the model string here?


> +
> +	fragment at 0 {
> +		target-path = "/soc/mmc at 11230000";
> +		__overlay__ {
> +			bus-width = <8>;
> +			max-frequency = <200000000>;
> +			cap-mmc-highspeed;
> +			mmc-hs200-1_8v;
> +			mmc-hs400-1_8v;
> +			hs400-ds-delay = <0x14014>;
> +			non-removable;
> +			no-sd;
> +			no-sdio;
> +			status = "okay";
> +		};
> +	};
> +};
> +
> diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso
> new file mode 100644
> index 000000000000..15ee8c568f3c
> --- /dev/null
> +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso
> @@ -0,0 +1,55 @@
> +/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
> +/*
> + * Authors: Daniel Golle <daniel at makrotopia.org>
> + *          Frank Wunderlich <frank-w at public-files.de>
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +/ {
> +	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
> +
> +	fragment at 0 {
> +		target-path = "/soc/spi at 1100a000";
> +		__overlay__ {
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +			spi_nand: spi_nand at 0 {
> +				compatible = "spi-nand";
> +				reg = <0>;
> +				spi-max-frequency = <10000000>;
> +				spi-tx-buswidth = <4>;
> +				spi-rx-buswidth = <4>;
> +
> +				partitions {
> +					compatible = "fixed-partitions";
> +					#address-cells = <1>;
> +					#size-cells = <1>;
> +
> +					partition at 0 {
> +						label = "bl2";
> +						reg = <0x0 0x80000>;
> +						read-only;
> +					};
> +
> +					partition at 80000 {
> +						label = "reserved";
> +						reg = <0x80000 0x300000>;
> +					};
> +
> +					partition at 380000 {
> +						label = "fip";
> +						reg = <0x380000 0x200000>;
> +						read-only;
> +					};
> +
> +					partition at 580000 {
> +						label = "ubi";
> +						reg = <0x580000 0x7a80000>;
> +					};
> +				};
> +			};
> +		};
> +	};
> +};
> diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso
> new file mode 100644
> index 000000000000..84aa229e80f3
> --- /dev/null
> +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso
> @@ -0,0 +1,68 @@
> +/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
> +/*
> + * Authors: Daniel Golle <daniel at makrotopia.org>
> + *          Frank Wunderlich <frank-w at public-files.de>
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +/ {
> +	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
> +
> +	fragment at 0 {
> +		target-path = "/soc/spi at 1100a000";
> +		__overlay__ {
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +			flash at 0 {
> +				compatible = "jedec,spi-nor";
> +				reg = <0>;
> +				spi-max-frequency = <10000000>;
> +
> +				partitions {
> +					compatible = "fixed-partitions";
> +					#address-cells = <1>;
> +					#size-cells = <1>;
> +
> +					partition at 0 {
> +						label = "bl2";
> +						reg = <0x0 0x20000>;
> +						read-only;
> +					};
> +
> +					partition at 20000 {
> +						label = "reserved";
> +						reg = <0x20000 0x20000>;
> +					};
> +
> +					partition at 40000 {
> +						label = "u-boot-env";
> +						reg = <0x40000 0x40000>;
> +					};
> +
> +					partition at 80000 {
> +						label = "reserved2";
> +						reg = <0x80000 0x80000>;
> +					};
> +
> +					partition at 100000 {
> +						label = "fip";
> +						reg = <0x100000 0x80000>;
> +						read-only;
> +					};
> +
> +					partition at 180000 {
> +						label = "recovery";
> +						reg = <0x180000 0xa80000>;
> +					};
> +
> +					partition at c00000 {
> +						label = "fit";
> +						reg = <0xc00000 0x1400000>;
> +					};
> +				};
> +			};
> +		};
> +	};
> +};
> diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso
> new file mode 100644
> index 000000000000..08af778d8adc
> --- /dev/null
> +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso
> @@ -0,0 +1,24 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +/*
> + * Copyright (C) 2021 MediaTek Inc.
> + * Author: Sam.Shih <sam.shih at mediatek.com>
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +/ {
> +	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
> +	model = "Bananapi BPI-R3 (sdmmc)";
> +
> +	fragment at 0 {
> +		target-path = "/soc/mmc at 11230000";
> +		__overlay__ {
> +			bus-width = <4>;
> +			max-frequency = <52000000>;
> +			cap-sd-highspeed;
> +			status = "okay";
> +		};
> +	};
> +};
> +
> diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
> new file mode 100644
> index 000000000000..618d3bb2f32f
> --- /dev/null
> +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
> @@ -0,0 +1,448 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +/*
> + * Copyright (C) 2021 MediaTek Inc.
> + * Authors: Sam.Shih <sam.shih at mediatek.com>
> + *          Frank Wunderlich <frank-w at public-files.de>
> + *          Daniel Golle <daniel at makrotopia.org>
> + */
> +
> +/dts-v1/;
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +#include <dt-bindings/leds/common.h>
> +#include <dt-bindings/pinctrl/mt65xx.h>
> +
> +#include "mt7986a.dtsi"
> +
> +/ {
> +	model = "Bananapi BPI-R3";
> +	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
> +
> +	aliases {
> +		serial0 = &uart0;
> +		ethernet0 = &gmac0;
> +		ethernet1 = &gmac1;
> +	};
> +
> +	chosen {
> +		stdout-path = "serial0:115200n8";
> +	};
> +
> +	dcin: regulator-12vd {
> +		compatible = "regulator-fixed";
> +		regulator-name = "12vd";
> +		regulator-min-microvolt = <12000000>;
> +		regulator-max-microvolt = <12000000>;
> +		regulator-boot-on;
> +		regulator-always-on;
> +	};
> +
> +	gpio-keys {
> +		compatible = "gpio-keys";
> +
> +		reset-key {
> +			label = "reset";
> +			linux,code = <KEY_RESTART>;
> +			gpios = <&pio 9 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		wps-key {
> +			label = "wps";
> +			linux,code = <KEY_WPS_BUTTON>;
> +			gpios = <&pio 10 GPIO_ACTIVE_LOW>;
> +		};
> +	};
> +
> +	/* i2c of the left SFP cage (wan) */
> +	i2c_sfp1: i2c-gpio-0 {
> +		compatible = "i2c-gpio";
> +		sda-gpios = <&pio 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		scl-gpios = <&pio 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		i2c-gpio,delay-us = <2>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +	};
> +
> +	/* i2c of the right SFP cage (lan) */
> +	i2c_sfp2: i2c-gpio-1 {
> +		compatible = "i2c-gpio";
> +		sda-gpios = <&pio 18 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		scl-gpios = <&pio 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		i2c-gpio,delay-us = <2>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +
> +		green_led: led-0 {
> +			color = <LED_COLOR_ID_GREEN>;
> +			function = LED_FUNCTION_POWER;
> +			gpios = <&pio 69 GPIO_ACTIVE_HIGH>;
> +			default-state = "on";
> +		};
> +
> +		blue_led: led-1 {
> +			color = <LED_COLOR_ID_BLUE>;
> +			function = LED_FUNCTION_STATUS;
> +			gpios = <&pio 86 GPIO_ACTIVE_HIGH>;
> +			default-state = "off";
> +		};
> +	};
> +
> +	reg_1p8v: regulator-1p8v {
> +		compatible = "regulator-fixed";
> +		regulator-name = "1.8vd";
> +		regulator-min-microvolt = <1800000>;
> +		regulator-max-microvolt = <1800000>;
> +		regulator-boot-on;
> +		regulator-always-on;
> +		vin-supply = <&dcin>;
> +	};
> +
> +	reg_3p3v: regulator-3p3v {
> +		compatible = "regulator-fixed";
> +		regulator-name = "3.3vd";
> +		regulator-min-microvolt = <3300000>;
> +		regulator-max-microvolt = <3300000>;
> +		regulator-boot-on;
> +		regulator-always-on;
> +		vin-supply = <&dcin>;
> +	};
> +
> +	/* left SFP cage (wan) */
> +	sfp1: sfp-1 {
> +		compatible = "sff,sfp";
> +		i2c-bus = <&i2c_sfp1>;
> +		los-gpios = <&pio 46 GPIO_ACTIVE_HIGH>;
> +		mod-def0-gpios = <&pio 49 GPIO_ACTIVE_LOW>;
> +		tx-disable-gpios = <&pio 20 GPIO_ACTIVE_HIGH>;
> +		tx-fault-gpios = <&pio 7 GPIO_ACTIVE_HIGH>;
> +	};
> +
> +	/* right SFP cage (lan) */
> +	sfp2: sfp-2 {
> +		compatible = "sff,sfp";
> +		i2c-bus = <&i2c_sfp2>;
> +		los-gpios = <&pio 31 GPIO_ACTIVE_HIGH>;
> +		mod-def0-gpios = <&pio 47 GPIO_ACTIVE_LOW>;
> +		tx-disable-gpios = <&pio 15 GPIO_ACTIVE_HIGH>;
> +		tx-fault-gpios = <&pio 48 GPIO_ACTIVE_HIGH>;
> +	};
> +};
> +
> +&crypto {
> +	status = "okay";
> +};
> +
> +&eth {
> +	status = "okay";
> +
> +	gmac0: mac at 0 {
> +		compatible = "mediatek,eth-mac";
> +		reg = <0>;
> +		phy-mode = "2500base-x";
> +
> +		fixed-link {
> +			speed = <2500>;
> +			full-duplex;
> +			pause;
> +		};
> +	};
> +
> +	gmac1: mac at 1 {
> +		compatible = "mediatek,eth-mac";
> +		reg = <1>;
> +		phy-mode = "2500base-x";
> +		sfp = <&sfp1>;
> +		managed = "in-band-status";
> +	};
> +
> +	mdio: mdio-bus {
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +	};
> +};
> +
> +&mdio {
> +	switch: switch at 31 {
> +		compatible = "mediatek,mt7531";
> +		reg = <31>;
> +		reset-gpios = <&pio 5 GPIO_ACTIVE_HIGH>;

Please add:

                interrupt-controller;
                #interrupt-cells = <1>;
                interrupt-parent = <&pio>;
                interrupts = <66 IRQ_TYPE_LEVEL_HIGH>;

to have IRQ driven phy status instead of having to poll the link status
of the 5x rj-45 ports.
The value comes from schematics (pin AD24, GPIO66, 7531_INT) and I've
tested this on my board.


> +	};
> +};
> +
> +&mmc0 {
> +	pinctrl-names = "default", "state_uhs";
> +	pinctrl-0 = <&mmc0_pins_default>;
> +	pinctrl-1 = <&mmc0_pins_uhs>;
> +	vmmc-supply = <&reg_3p3v>;
> +	vqmmc-supply = <&reg_1p8v>;
> +};
> +
> +&i2c0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&i2c_pins>;
> +	status = "okay";
> +};
> +
> +&pcie {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pcie_pins>;
> +	status = "okay";
> +};
> +
> +&pcie_phy {
> +	status = "okay";
> +};
> +
> +&pio {
> +	i2c_pins: i2c-pins {
> +		mux {
> +			function = "i2c";
> +			groups = "i2c";
> +		};
> +	};
> +
> +	mmc0_pins_default: mmc0-pins {
> +		mux {
> +			function = "emmc";
> +			groups = "emmc_51";
> +		};
> +		conf-cmd-dat {
> +			pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2",
> +			       "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5",
> +			       "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD";
> +			input-enable;
> +			drive-strength = <4>;
> +			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
> +		};
> +		conf-clk {
> +			pins = "EMMC_CK";
> +			drive-strength = <6>;
> +			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
> +		};
> +		conf-ds {
> +			pins = "EMMC_DSL";
> +			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
> +		};
> +		conf-rst {
> +			pins = "EMMC_RSTB";
> +			drive-strength = <4>;
> +			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
> +		};
> +	};
> +
> +	mmc0_pins_uhs: mmc0-uhs-pins {
> +		mux {
> +			function = "emmc";
> +			groups = "emmc_51";
> +		};
> +		conf-cmd-dat {
> +			pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2",
> +			       "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5",
> +			       "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD";
> +			input-enable;
> +			drive-strength = <4>;
> +			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
> +		};
> +		conf-clk {
> +			pins = "EMMC_CK";
> +			drive-strength = <6>;
> +			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
> +		};
> +		conf-ds {
> +			pins = "EMMC_DSL";
> +			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
> +		};
> +		conf-rst {
> +			pins = "EMMC_RSTB";
> +			drive-strength = <4>;
> +			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
> +		};
> +	};
> +
> +	pcie_pins: pcie-pins {
> +		mux {
> +			function = "pcie";
> +			groups = "pcie_clk", "pcie_pereset";
> +		};
> +	};
> +
> +	spi_flash_pins: spi-flash-pins {
> +		mux {
> +			function = "spi";
> +			groups = "spi0", "spi0_wp_hold";
> +		};
> +	};
> +
> +	spic_pins: spic-pins {
> +		mux {
> +			function = "spi";
> +			groups = "spi1_0";
> +		};
> +	};
> +
> +	uart1_pins: uart1-pins {
> +		mux {
> +			function = "uart";
> +			groups = "uart1_rx_tx";
> +		};
> +	};
> +
> +	uart2_pins: uart2-pins {
> +		mux {
> +			function = "uart";
> +			groups = "uart2_0_rx_tx";
> +		};
> +	};
> +
> +	wf_2g_5g_pins: wf-2g-5g-pins {
> +		mux {
> +			function = "wifi";
> +			groups = "wf_2g", "wf_5g";
> +		};
> +		conf {
> +			pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
> +			       "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
> +			       "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
> +			       "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
> +			       "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
> +			       "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
> +			       "WF1_TOP_CLK", "WF1_TOP_DATA";
> +			drive-strength = <4>;
> +		};
> +	};
> +
> +	wf_dbdc_pins: wf-dbdc-pins {
> +		mux {
> +			function = "wifi";
> +			groups = "wf_dbdc";
> +		};
> +		conf {
> +			pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
> +			       "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
> +			       "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
> +			       "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
> +			       "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
> +			       "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
> +			       "WF1_TOP_CLK", "WF1_TOP_DATA";
> +			drive-strength = <4>;
> +		};
> +	};
> +
> +	wf_led_pins: wf-led-pins {
> +		mux {
> +			function = "led";
> +			groups = "wifi_led";
> +		};
> +	};
> +};
> +
> +&spi0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&spi_flash_pins>;
> +	cs-gpios = <0>, <0>;

I don't think those bogus cs-gpios here and for spi1 below are needed.

> +	status = "okay";
> +};
> +
> +&spi1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&spic_pins>;
> +	cs-gpios = <0>, <0>;
> +	status = "okay";
> +};
> +
> +&ssusb {
> +	status = "okay";
> +};
> +
> +&switch {
> +	ports {
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		port at 0 {
> +			reg = <0>;
> +			label = "wan";
> +		};
> +
> +		port at 1 {
> +			reg = <1>;
> +			label = "lan0";
> +		};
> +
> +		port at 2 {
> +			reg = <2>;
> +			label = "lan1";
> +		};
> +
> +		port at 3 {
> +			reg = <3>;
> +			label = "lan2";
> +		};
> +
> +		port at 4 {
> +			reg = <4>;
> +			label = "lan3";
> +		};
> +
> +		port5: port at 5 {
> +			reg = <5>;
> +			label = "lan4";
> +			phy-mode = "2500base-x";
> +			sfp = <&sfp2>;
> +			managed = "in-band-status";
> +		};
> +
> +		port at 6 {
> +			reg = <6>;
> +			label = "cpu";
> +			ethernet = <&gmac0>;
> +			phy-mode = "2500base-x";
> +
> +			fixed-link {
> +				speed = <2500>;
> +				full-duplex;
> +				pause;
> +			};
> +		};
> +	};
> +};
> +
> +&trng {
> +	status = "okay";
> +};
> +
> +&uart0 {
> +	status = "okay";
> +};
> +
> +&uart1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart1_pins>;
> +	status = "okay";
> +};
> +
> +&uart2 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart2_pins>;
> +	status = "okay";
> +};
> +
> +&usb_phy {
> +	status = "okay";
> +};
> +
> +&watchdog {
> +	status = "okay";
> +};
> +
> +&wifi {
> +	status = "okay";
> +	pinctrl-names = "default", "dbdc";
> +	pinctrl-0 = <&wf_2g_5g_pins>, <&wf_led_pins>;
> +	pinctrl-1 = <&wf_dbdc_pins>, <&wf_led_pins>;
> +};
> +
> -- 
> 2.34.1
> 
> 


From daniel at makrotopia.org  Sat Dec 24 11:02:14 2022
From: daniel at makrotopia.org (Daniel Golle)
Date: Sat, 24 Dec 2022 19:02:14 +0000
Subject: [PATCH] spi: mediatek: Enable irq when pdata is ready
In-Reply-To: <166965653185.677424.5326738316899525692.b4-ty@kernel.org>
References: <20221128-spi-mt65xx-v1-0-509266830665@chromium.org>
 <166965653185.677424.5326738316899525692.b4-ty@kernel.org>
Message-ID: <Y6dL2ZWgd1BD6kew@makrotopia.org>

Hi Ricardo,
Hi Mark,

On Mon, Nov 28, 2022 at 05:28:51PM +0000, Mark Brown wrote:
> On Mon, 28 Nov 2022 12:00:01 +0100, Ricardo Ribalda wrote:
> > If the device does not come straight from reset, we might receive an IRQ
> > before we are ready to handle it.
> > 
> > Fixes:
> > 
> > [    0.832328] Unable to handle kernel read from unreadable memory at virtual address 0000000000000010
> > [    1.040343] Call trace:
> > [    1.040347]  mtk_spi_can_dma+0xc/0x40
> > ...
> > [    1.262265]  start_kernel+0x338/0x42c
> > 
> > [...]
> 
> Applied to
> 
>    https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next
> 
> Thanks!
> 
> [1/1] spi: mediatek: Enable irq when pdata is ready
>       commit: c6f7874687f7027d7c4b2f53ff6e4d22850f915d
> 

Testing next-20221220 on the BananaPi BPi-R3 MT7986 board it turns
out that this commit is *causing* a kernel oops and strack trace output
actually quite similar to what is described in the commit message:
...
[    2.074496] mtk-spi 1100a000.spi: spi-mem transfer timeout
[    2.080064] spi-nor: probe of spi0.0 failed with error -110
[    2.085830] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000010
[    2.094624] Mem abort info:
[    2.097418]   ESR = 0x0000000096000005
[    2.101162]   EC = 0x25: DABT (current EL), IL = 32 bits
[    2.106466]   SET = 0, FnV = 0
[    2.109521]   EA = 0, S1PTW = 0
[    2.111511] mtk_soc_eth 15100000.ethernet eth0: mediatek frame engine at 0xffffffc00e280000, irq 121
[    2.112653]   FSC = 0x05: level 1 translation fault
[    2.112659] Data abort info:
[    2.121921] mtk_soc_eth 15100000.ethernet: generated random MAC address ba:0e:79:b6:0a:83
[    2.126628]   ISV = 0, ISS = 0x00000005
[    2.126631]   CM = 0, WnR = 0
[    2.126635] [0000000000000010] user address but active_mm is swapper
[    2.126724] Internal error: Oops: 0000000096000005 [#1] SMP
[    2.130647] mtk_soc_eth 15100000.ethernet eth1: mediatek frame engine at 0xffffffc00e280000, irq 121
[    2.137739] Modules linked in:
[    2.137748] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.1.0-next-20221220+ #0
[    2.137753] Hardware name: Bananapi BPI-R3 (DT)
[    2.137756] pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[    2.142036] i2c_dev: i2c /dev entries driver
[    2.144530] pc : mtk_spi_can_dma+0x0/0x2c
[    2.144541] lr : mtk_spi_interrupt+0x60/0x350
[    2.144545] sp : ffffffc008003ec0
[    2.144547] x29: ffffffc008003ec0 x28: ffffffc008eb67c8 x27: 0000000000012400
[    2.152967] NET: Registered PF_INET6 protocol family
[    2.156435] x26: 0000000000000400 x25: 0000000000000076 x24: ffffff80072dac00
[    2.156443] x23: 0000000000000000 x22: ffffffc008d33008 x21: 0000000000000000
[    2.156450] x20: ffffff8007b67000 x19: ffffff8007b67880 x18: 0000000000000002
[    2.156457] x17: ffffffc076e23000
[    2.166540] Segment Routing with IPv6
[    2.168599]  x16: ffffffc008004000 x15: 0000000000004000
[    2.168605] x14: 0000000000000000 x13: 00000000000001dd
[    2.175768] In-situ OAM (IOAM) with IPv6
[    2.180229]  x12: 00000000000001dd
[    2.187232] NET: Registered PF_PACKET protocol family
[    2.191417] x11: 0000000000000040 x10: 0000000000000000
[    2.195594] 8021q: 802.1Q VLAN Support v1.8
[    2.199745]  x9 : ffffffc076e23000
[    2.216379] pstore: Using crash dump compression: deflate
[    2.222225] x8 : 00000000f04bc9a3 x7 : 0000000000000000 x6 : 0000000000000002
[    2.222233] x5 : 0000000000000003 x4 : 0000000000000001
[    2.245403] mtk-pcie-gen3 11280000.pcie: host bridge /soc/pcie at 11280000 ranges:
[    2.248702]  x3 : ffffffc008672704
[    2.248705] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffffff8007b67000
[    2.253927] mtk-pcie-gen3 11280000.pcie: Parsing ranges property...
[    2.257818] 
[    2.257820] Call trace:
[    2.257822]  mtk_spi_can_dma+0x0/0x2c
[    2.257828]  __handle_irq_event_percpu+0xa8/0x340
[    2.257835]  handle_irq_event+0x48/0xd0
[    2.257840]  handle_fasteoi_irq+0xa0/0x1dc
[    2.261241] mtk-pcie-gen3 11280000.pcie:      MEM 0x0020000000..0x002fffffff -> 0x0020000000
[    2.266255]  generic_handle_domain_irq+0x28/0x40
[    2.266260]  gic_handle_irq+0x4c/0x124
[    2.357698]  call_on_irq_stack+0x2c/0x40
[    2.361612]  do_interrupt_handler+0x78/0x84
[    2.365783]  el1_interrupt+0x30/0x4c
[    2.369351]  el1h_64_irq_handler+0x14/0x20
[    2.373434]  el1h_64_irq+0x64/0x68
[    2.376825]  arch_cpu_idle+0x14/0x20
[    2.380389]  default_idle_call+0x68/0xe0
[    2.384302]  do_idle+0xe8/0x140
[    2.387434]  cpu_startup_entry+0x24/0x30
[    2.391345]  rest_init+0x120/0x1a0
[    2.394735]  arch_post_acpi_subsys_init+0x0/0x8
[    2.399254]  start_kernel+0x68c/0x6ac
[    2.402905]  __primary_switched+0xb4/0xbc
[    2.406909] Code: 17ffffd3 12003c23 12103c24 17ffffe7 (b9401041) 
[    2.412987] ---[ end trace 0000000000000000 ]---
[    2.419401] pstore: backend (ramoops) writing error (-28)
[    2.420889] mtk-pcie-gen3 11280000.pcie: set MEM trans window[0]: cpu_addr = 0x20000000, pci_addr = 0x20000000, size = 0x10000000
[    2.424785] Kernel panic - not syncing: Oops: Fatal exception in interrupt
[    2.424788] SMP: stopping secondary CPUs
[    2.424794] Kernel Offset: disabled
[    2.424796] CPU features: 0x00000,00000008,0000400b
[    2.424799] Memory Limit: none
[    2.460293] Rebooting in 1 seconds..

Reverting the above commit fixes the issue and results in normal boot:

[daniel at box linux.git]$ git revert c6f7874687f70
Auto-merging drivers/spi/spi-mt65xx.c
hint: Waiting for your editor to close the file... 
[mt7986-wip a1aafac27c46d] Revert "spi: mediatek: Enable irq when pdata is ready"
 1 file changed, 5 insertions(+), 7 deletions(-)
...
[    1.045904] spi-nor spi0.0: w25q256 (32768 Kbytes)
[    1.063603] 6 fixed-partitions partitions found on MTD device spi0.0
[    1.070099] OF: Bad cell count for /soc/spi at 1100a000/flash at 0/partitions
[    1.076799] OF: Bad cell count for /soc/spi at 1100a000/flash at 0/partitions
[    1.084180] Creating 6 MTD partitions on "spi0.0":
[    1.089011] 0x000000c00000-0x000002000000 : "fit"
[    1.096514] 0x000000180000-0x000000c00000 : "recovery"
[    1.103853] 0x000000100000-0x000000180000 : "fip"
[    1.110685] 0x000000080000-0x000000100000 : "reserved2"
[    1.118762] 0x000000040000-0x000000080000 : "u-boot-env"
[    1.126593] 0x000000000000-0x000000040000 : "bl2"
...


Best regards


Daniel


From ribalda at chromium.org  Sun Dec 25 00:37:12 2022
From: ribalda at chromium.org (Ricardo Ribalda)
Date: Sun, 25 Dec 2022 09:37:12 +0100
Subject: [PATCH] spi: mediatek: Enable irq before the spi registration
Message-ID: <20221225-mtk-spi-fixes-v1-0-bb6c14c232f8@chromium.org>

If the irq is enabled after the spi si registered, there can be a race
with the initialization of the devices on the spi bus.

Eg:
mtk-spi 1100a000.spi: spi-mem transfer timeout
spi-nor: probe of spi0.0 failed with error -110
Unable to handle kernel NULL pointer dereference at virtual address
0000000000000010
...
Call trace:
 mtk_spi_can_dma+0x0/0x2c

Fixes: c6f7874687f7 ("spi: mediatek: Enable irq when pdata is ready")
Reported-by: Daniel Golle <daniel at makrotopia.org>
Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
---
spi: mediatek: Fix init order (again)

Hi Mark

Here is a fixup of the previous patch. Daniel, can you confirm that it
works on your hardware? 

Thanks and sorry for annoyance. 

To: Mark Brown <broonie at kernel.org>
To: Matthias Brugger <matthias.bgg at gmail.com>
To: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Cc: linux-spi at vger.kernel.org
Cc: linux-arm-kernel at lists.infradead.org
Cc: linux-mediatek at lists.infradead.org
Cc: linux-kernel at vger.kernel.org
Cc: Daniel Golle <daniel at makrotopia.org>
---
 drivers/spi/spi-mt65xx.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/drivers/spi/spi-mt65xx.c b/drivers/spi/spi-mt65xx.c
index 6de8360e5c2a..9eab6c20dbc5 100644
--- a/drivers/spi/spi-mt65xx.c
+++ b/drivers/spi/spi-mt65xx.c
@@ -1253,6 +1253,11 @@ static int mtk_spi_probe(struct platform_device *pdev)
 		dev_notice(dev, "SPI dma_set_mask(%d) failed, ret:%d\n",
 			   addr_bits, ret);
 
+	ret = devm_request_irq(dev, irq, mtk_spi_interrupt,
+			       IRQF_TRIGGER_NONE, dev_name(dev), master);
+	if (ret)
+		return dev_err_probe(dev, ret, "failed to register irq\n");
+
 	pm_runtime_enable(dev);
 
 	ret = devm_spi_register_master(dev, master);
@@ -1261,13 +1266,6 @@ static int mtk_spi_probe(struct platform_device *pdev)
 		return dev_err_probe(dev, ret, "failed to register master\n");
 	}
 
-	ret = devm_request_irq(dev, irq, mtk_spi_interrupt,
-			       IRQF_TRIGGER_NONE, dev_name(dev), master);
-	if (ret) {
-		pm_runtime_disable(dev);
-		return dev_err_probe(dev, ret, "failed to register irq\n");
-	}
-
 	return 0;
 }
 

---
base-commit: 45b3cd900bf8d1a3cd7cf48361df8c09ae5b4009
change-id: 20221225-mtk-spi-fixes-99c863a6fdf1

Best regards,
-- 
Ricardo Ribalda <ribalda at chromium.org>


From daniel at makrotopia.org  Sun Dec 25 06:06:59 2022
From: daniel at makrotopia.org (Daniel Golle)
Date: Sun, 25 Dec 2022 14:06:59 +0000
Subject: [PATCH] spi: mediatek: Enable irq before the spi registration
In-Reply-To: <20221225-mtk-spi-fixes-v1-0-bb6c14c232f8@chromium.org>
References: <20221225-mtk-spi-fixes-v1-0-bb6c14c232f8@chromium.org>
Message-ID: <Y6hZA19rWuDkGJa2@makrotopia.org>

On Sun, Dec 25, 2022 at 09:37:12AM +0100, Ricardo Ribalda wrote:
> If the irq is enabled after the spi si registered, there can be a race
> with the initialization of the devices on the spi bus.
> 
> Eg:
> mtk-spi 1100a000.spi: spi-mem transfer timeout
> spi-nor: probe of spi0.0 failed with error -110
> Unable to handle kernel NULL pointer dereference at virtual address
> 0000000000000010
> ...
> Call trace:
>  mtk_spi_can_dma+0x0/0x2c
> 
> Fixes: c6f7874687f7 ("spi: mediatek: Enable irq when pdata is ready")
> Reported-by: Daniel Golle <daniel at makrotopia.org>
> Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
> ---
> spi: mediatek: Fix init order (again)
> 
> Hi Mark
> 
> Here is a fixup of the previous patch. Daniel, can you confirm that it
> works on your hardware? 

Yes, this fixes the issue and SPI now works fine on MT7986 with the
patch applied.

Tested-by: Daniel Golle <daniel at makrotopia.org>

> 
> Thanks and sorry for annoyance. 
> 
> To: Mark Brown <broonie at kernel.org>
> To: Matthias Brugger <matthias.bgg at gmail.com>
> To: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> Cc: linux-spi at vger.kernel.org
> Cc: linux-arm-kernel at lists.infradead.org
> Cc: linux-mediatek at lists.infradead.org
> Cc: linux-kernel at vger.kernel.org
> Cc: Daniel Golle <daniel at makrotopia.org>
> ---
>  drivers/spi/spi-mt65xx.c | 12 +++++-------
>  1 file changed, 5 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/spi/spi-mt65xx.c b/drivers/spi/spi-mt65xx.c
> index 6de8360e5c2a..9eab6c20dbc5 100644
> --- a/drivers/spi/spi-mt65xx.c
> +++ b/drivers/spi/spi-mt65xx.c
> @@ -1253,6 +1253,11 @@ static int mtk_spi_probe(struct platform_device *pdev)
>  		dev_notice(dev, "SPI dma_set_mask(%d) failed, ret:%d\n",
>  			   addr_bits, ret);
>  
> +	ret = devm_request_irq(dev, irq, mtk_spi_interrupt,
> +			       IRQF_TRIGGER_NONE, dev_name(dev), master);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "failed to register irq\n");
> +
>  	pm_runtime_enable(dev);
>  
>  	ret = devm_spi_register_master(dev, master);
> @@ -1261,13 +1266,6 @@ static int mtk_spi_probe(struct platform_device *pdev)
>  		return dev_err_probe(dev, ret, "failed to register master\n");
>  	}
>  
> -	ret = devm_request_irq(dev, irq, mtk_spi_interrupt,
> -			       IRQF_TRIGGER_NONE, dev_name(dev), master);
> -	if (ret) {
> -		pm_runtime_disable(dev);
> -		return dev_err_probe(dev, ret, "failed to register irq\n");
> -	}
> -
>  	return 0;
>  }
>  
> 
> ---
> base-commit: 45b3cd900bf8d1a3cd7cf48361df8c09ae5b4009
> change-id: 20221225-mtk-spi-fixes-99c863a6fdf1
> 
> Best regards,
> -- 
> Ricardo Ribalda <ribalda at chromium.org>


From vishalrao at gmail.com  Sun Dec 25 06:49:15 2022
From: vishalrao at gmail.com (Vishal Rao)
Date: Sun, 25 Dec 2022 20:19:15 +0530
Subject: Wifi 6E 6ghz not working on MediaTek MT7922 (AMD RZ616)
Message-ID: <CAMWtyy1sSHc_DYQ3kq+FWMJKK5Wo3QEgO1yd6wQXx3x0Lp4Uog@mail.gmail.com>

Hello!

Using Ubuntu 22.04 LTS based distro elementary OS 7 with the latest
available Ubuntu mainline kernel 6.1 RC5 build the wifi does not
connect to the 6GHZ band (Wifi 6E) and it only even shows the 6ghz
SSID name *after* I have connected to the 5ghz wifi band.

This is on a new ASUS ZenBook laptop model UM5302TA with the AMD Ryzen
6800U CPU platform which includes the AMD-Mediatek co-developed RZ616
wifi chip I believe.

Pastebin of lspci -vvnn output: https://pastebin.ubuntu.com/p/QwM58ZkptG

Let me know what further information I should provide - happy to do so!

Regards,
Vishal Rao


From daniel at makrotopia.org  Sun Dec 25 12:03:56 2022
From: daniel at makrotopia.org (Daniel Golle)
Date: Sun, 25 Dec 2022 20:03:56 +0000
Subject: Wifi 6E 6ghz not working on MediaTek MT7922 (AMD RZ616)
In-Reply-To: <CAMWtyy1sSHc_DYQ3kq+FWMJKK5Wo3QEgO1yd6wQXx3x0Lp4Uog@mail.gmail.com>
References: <CAMWtyy1sSHc_DYQ3kq+FWMJKK5Wo3QEgO1yd6wQXx3x0Lp4Uog@mail.gmail.com>
Message-ID: <Y6isrKS7zgMrNe3S@makrotopia.org>

Hi!

On Sun, Dec 25, 2022 at 08:19:15PM +0530, Vishal Rao wrote:
> Hello!
> 
> Using Ubuntu 22.04 LTS based distro elementary OS 7 with the latest
> available Ubuntu mainline kernel 6.1 RC5 build the wifi does not
> connect to the 6GHZ band (Wifi 6E) and it only even shows the 6ghz
> SSID name *after* I have connected to the 5ghz wifi band.
> 
> This is on a new ASUS ZenBook laptop model UM5302TA with the AMD Ryzen
> 6800U CPU platform which includes the AMD-Mediatek co-developed RZ616
> wifi chip I believe.
> 
> Pastebin of lspci -vvnn output: https://pastebin.ubuntu.com/p/QwM58ZkptG
> 
> Let me know what further information I should provide - happy to do so!


Please also share the output of `iw list` which will tell if we are
dealing with a driver problem or a regulatory/configuration problem.
Did you configure the wireless regulatory domain the device is located
in?

To have access to 6 GHz bands the regulatory region needs to be known,
I read that on Ubuntu it works like this:

https://askubuntu.com/questions/701709/how-can-i-change-my-wireless-cards-regulatory-domain-dbm-higher-than-30


From Yanchao.Yang at mediatek.com  Sun Dec 25 17:43:53 2022
From: Yanchao.Yang at mediatek.com (=?utf-8?B?WWFuY2hhbyBZYW5nICjmnajlvabotoUp?=)
Date: Mon, 26 Dec 2022 01:43:53 +0000
Subject: [PATCH net-next v1 01/13] net: wwan: tmi: Add PCIe core
In-Reply-To: <1cca2790-5805-b4fc-f8e8-2c490db487f6@collabora.com>
References: <20221122111152.160377-1-yanchao.yang@mediatek.com>
	 <20221122111152.160377-2-yanchao.yang@mediatek.com>
	 <1cca2790-5805-b4fc-f8e8-2c490db487f6@collabora.com>
Message-ID: <7e644450d52635b76b24c2670571c1e266cc9d08.camel@mediatek.com>

On Thu, 2022-11-24 at 12:06 +0100, AngeloGioacchino Del Regno wrote:
> Il 22/11/22 12:11, Yanchao Yang ha scritto:
> > From: MediaTek Corporation <linuxwwan at mediatek.com>
> > 
> > Registers the TMI device driver with the kernel. Set up all the
> > fundamental
> > configurations for the device: PCIe layer, Modem Host Cross Core
> > Interface
> > (MHCCIF), Reset Generation Unit (RGU), modem common control
> > operations and
> > build infrastructure.
> > 
> > * PCIe layer code implements driver probe and removal, MSI-X
> > interrupt
> > initialization and de-initialization, and the way of resetting the
> > device.
> > * MHCCIF provides interrupt channels to communicate events such as
> > handshake,
> > PM and port enumeration.
> > * RGU provides interrupt channels to generate notifications from
> > the device
> > so that the TMI driver could get the device reset.
> > * Modem common control operations provide the basic read/write
> > functions of
> > the device's hardware registers, mask/unmask/get/clear functions of
> > the
> > device's interrupt registers and inquiry functions of the device's
> > status.
> > 
> > Signed-off-by: Ting Wang <ting.wang at mediatek.com>
> > Signed-off-by: MediaTek Corporation <linuxwwan at mediatek.com>
> 
Hello Angelo,

> Hello Yanchao,
> thanks for the patch! However, there are some things to improve...
> 
> First of all, you have to signoff (in your name) all patches that you
> send.
Thank your suggestion. Fix it next version (add Signed-off-by: Yanchao
Yang <yanchao.yang at mediatek.com> for all patches)
> Check below for more comments...
> 
> > ---
> >   drivers/net/wwan/Kconfig                 |   11 +
> >   drivers/net/wwan/Makefile                |    1 +
> >   drivers/net/wwan/mediatek/Makefile       |   12 +
> >   drivers/net/wwan/mediatek/mtk_common.h   |   30 +
> >   drivers/net/wwan/mediatek/mtk_dev.c      |   50 +
> >   drivers/net/wwan/mediatek/mtk_dev.h      |  503 ++++++++++
> >   drivers/net/wwan/mediatek/pcie/mtk_pci.c | 1164
> > ++++++++++++++++++++++
> >   drivers/net/wwan/mediatek/pcie/mtk_pci.h |  150 +++
> >   drivers/net/wwan/mediatek/pcie/mtk_reg.h |   69 ++
> >   9 files changed, 1990 insertions(+)
> >   create mode 100644 drivers/net/wwan/mediatek/Makefile
> >   create mode 100644 drivers/net/wwan/mediatek/mtk_common.h
> >   create mode 100644 drivers/net/wwan/mediatek/mtk_dev.c
> >   create mode 100644 drivers/net/wwan/mediatek/mtk_dev.h
> >   create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_pci.c
> >   create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_pci.h
> >   create mode 100644 drivers/net/wwan/mediatek/pcie/mtk_reg.h
> > 
> 
> 
> > diff --git a/drivers/net/wwan/Makefile b/drivers/net/wwan/Makefile
> > index 3960c0ae2445..198d8074851f 100644
> > --- a/drivers/net/wwan/Makefile
> > +++ b/drivers/net/wwan/Makefile
> > @@ -14,3 +14,4 @@ obj-$(CONFIG_QCOM_BAM_DMUX) += qcom_bam_dmux.o
> >   obj-$(CONFIG_RPMSG_WWAN_CTRL) += rpmsg_wwan_ctrl.o
> >   obj-$(CONFIG_IOSM) += iosm/
> >   obj-$(CONFIG_MTK_T7XX) += t7xx/
> > +obj-$(CONFIG_MTK_TMI) += mediatek/
> > diff --git a/drivers/net/wwan/mediatek/Makefile
> > b/drivers/net/wwan/mediatek/Makefile
> > new file mode 100644
> > index 000000000000..ae5f8a5ba05a
> > --- /dev/null
> > +++ b/drivers/net/wwan/mediatek/Makefile
> > @@ -0,0 +1,12 @@
> > +# SPDX-License-Identifier: BSD-3-Clause-Clear
> > +
> > +MODULE_NAME := mtk_tmi
> > +
> > +mtk_tmi-y = \
> > +	pcie/mtk_pci.o	\
> > +	mtk_dev.o
> > +
> > +ccflags-y += -I$(srctree)/$(src)/
> > +ccflags-y += -I$(srctree)/$(src)/pcie/
> > +
> > +obj-$(CONFIG_MTK_TMI) += mtk_tmi.o
> > diff --git a/drivers/net/wwan/mediatek/mtk_common.h
> > b/drivers/net/wwan/mediatek/mtk_common.h
> > new file mode 100644
> > index 000000000000..516d3d9e02cf
> > --- /dev/null
> > +++ b/drivers/net/wwan/mediatek/mtk_common.h
> > @@ -0,0 +1,30 @@
> > +/* SPDX-License-Identifier: BSD-3-Clause-Clear
> > + *
> > + * Copyright (c) 2022, MediaTek Inc.
> > + */
> > +
> > +#ifndef _MTK_COMMON_H
> > +#define _MTK_COMMON_H
> > +
> > +#include <linux/device.h>
> > +
> > +#define MTK_UEVENT_INFO_LEN 128
> > +
> > +/* MTK uevent */
> > +enum mtk_uevent_id {
> > +	MTK_UEVENT_FSM = 1,
> > +	MTK_UEVENT_MAX
> > +};
> > +
> > +static inline void mtk_uevent_notify(struct device *dev, enum
> > mtk_uevent_id id, const char *info)
> > +{
> > +	char buf[MTK_UEVENT_INFO_LEN];
> > +	char *ext[2] = {NULL, NULL};
> > +
> > +	snprintf(buf, MTK_UEVENT_INFO_LEN, "%s:event_id=%d, info=%s",
> > +		 dev->kobj.name, id, info);
> > +	ext[0] = buf;
> > +	kobject_uevent_env(&dev->kobj, KOBJ_CHANGE, ext);
> > +}
> > +
> > +#endif /* _MTK_COMMON_H */
> > diff --git a/drivers/net/wwan/mediatek/mtk_dev.c
> > b/drivers/net/wwan/mediatek/mtk_dev.c
> > new file mode 100644
> > index 000000000000..d3d7bf940d78
> > --- /dev/null
> > +++ b/drivers/net/wwan/mediatek/mtk_dev.c
> > @@ -0,0 +1,50 @@
> > +// SPDX-License-Identifier: BSD-3-Clause-Clear
> > +/*
> > + * Copyright (c) 2022, MediaTek Inc.
> > + */
> > +
> > +#include "mtk_dev.h"
> > +
> > +int mtk_dev_init(struct mtk_md_dev *mdev)
> 
> Empty function: not needed.
> 
> I know that you're actually populating this one later, but each
> commit
> must be fine, so please introduce this function in a later commit,
> where
> you actually make use of it.
Ok, fix it next version (remove this empty function).
> 
> > +{
> > +	return 0;
> > +}
> > +
> > +void mtk_dev_exit(struct mtk_md_dev *mdev)
> > +{
> 
> Same here.
Ok, remove it next version.
> 
> > +}
> > +
> > +int mtk_dev_start(struct mtk_md_dev *mdev)
> > +{
> 
> And same here, and for the remaining two functions in this file.
Ok, remove it next version.
> 
> > +	return 0;
> > +}
> > +
> > +int mtk_dma_map_single(struct mtk_md_dev *mdev, dma_addr_t *addr,
> > +		       void *mem, size_t size, int direction)
> > +{
> > +	if (!addr)
> > +		return -EINVAL;
> 
> Further comments on this one: you're not doing anything MediaTek
> specific here.
> You're only doing
Ok, remove it and user kernel API directly next version.
> 
> > +
> > +	*addr = dma_map_single(mdev->dev, mem, size, direction);
> > +	if (unlikely(dma_mapping_error(mdev->dev, *addr))) {
> > +		dev_err(mdev->dev, "Failed to map dma!\n");
> > +		return -ENOMEM;
> 
> I know that dma_mapping_error() either returns -ENOMEM or zero, but
> you should
> *not* assume that it won't ever change (even if that's very
> unlikely).
> 
> ret = dma_mapping_error(...);
> if (unlikely(ret)) {
> 	dev_err(...)
> 	return ret;
> }
> 
> return 0;
> 
> 
Got it and change it as following: 
dma_addr_t data_dma_addr;
data_dma_addr = dma_map_single(hw->mdev->dev, skb->data, skb->len,
DMA_TO_DEVICE);
ret = dma_mapping_error(hw->mdev->dev, data_dma_addr);
if (unlikely(ret)) {
	dev_err(hw->mdev->dev, "Failed to map dma!\n");
	return ret;
}
> ...also, I'm not sure that you really need this helper, but that's
> for another day.
> 
> > +	}
> > +
> > +	return 0;
> > +}
> > +
> > +int mtk_dma_map_page(struct mtk_md_dev *mdev, dma_addr_t *addr,
> > +		     struct page *page, unsigned long offset, size_t
> > size, int direction)
> 
> Same comments as mtk_dma_map_single() here too.
Ok, remove it and user kernel API directly next version.
> 
> > +{
> > +	if (!addr)
> > +		return -EINVAL;
> > +
> > +	*addr = dma_map_page(mdev->dev, page, offset, size, direction);
> > +	if (unlikely(dma_mapping_error(mdev->dev, *addr))) {
> > +		dev_err(mdev->dev, "Failed to map dma!\n");
> > +		return -ENOMEM;
> > +	}
> > +
> > +	return 0;
> > +}
> > diff --git a/drivers/net/wwan/mediatek/mtk_dev.h
> > b/drivers/net/wwan/mediatek/mtk_dev.h
> > new file mode 100644
> > index 000000000000..bd7b1dc11daf
> > --- /dev/null
> > +++ b/drivers/net/wwan/mediatek/mtk_dev.h
> > @@ -0,0 +1,503 @@
> > +/* SPDX-License-Identifier: BSD-3-Clause-Clear
> > + *
> > + * Copyright (c) 2022, MediaTek Inc.
> > + */
> > +
> > +#ifndef __MTK_DEV_H__
> > +#define __MTK_DEV_H__
> > +
> > +#include <linux/dma-mapping.h>
> > +#include <linux/dmapool.h>
> > +
> > +#define MTK_DEV_STR_LEN 16
> > +
> > +enum mtk_irq_src {
> > +	MTK_IRQ_SRC_MIN,
> > +	MTK_IRQ_SRC_MHCCIF,
> > +	MTK_IRQ_SRC_SAP_RGU,
> > +	MTK_IRQ_SRC_DPMAIF,
> > +	MTK_IRQ_SRC_DPMAIF2,
> > +	MTK_IRQ_SRC_CLDMA0,
> > +	MTK_IRQ_SRC_CLDMA1,
> > +	MTK_IRQ_SRC_CLDMA2,
> > +	MTK_IRQ_SRC_CLDMA3,
> > +	MTK_IRQ_SRC_PM_LOCK,
> > +	MTK_IRQ_SRC_DPMAIF3,
> > +	MTK_IRQ_SRC_MAX
> > +};
> > +
> > +enum mtk_user_id {
> > +	MTK_USER_HW,
> > +	MTK_USER_CTRL,
> > +	MTK_USER_DPMAIF,
> > +	MTK_USER_PM,
> > +	MTK_USER_EXCEPT,
> > +	MTK_USER_MAX
> > +};
> > +
> > +enum mtk_reset_type {
> > +	RESET_FLDR,
> > +	RESET_PLDR,
> > +	RESET_RGU,
> > +};
> > +
> > +enum mtk_reinit_type {
> > +	REINIT_TYPE_RESUME,
> > +	REINIT_TYPE_EXP,
> > +};
> > +
> > +enum mtk_l1ss_grp {
> > +	L1SS_PM,
> > +	L1SS_EXT_EVT,
> > +};
> > +
> > +#define L1SS_BIT_L1(grp)     BIT(((grp) << 2) + 1)
> > +#define L1SS_BIT_L1_1(grp)   BIT(((grp) << 2) + 2)
> > +#define L1SS_BIT_L1_2(grp)   BIT(((grp) << 2) + 3)
> > +
> > +struct mtk_md_dev;
> > +
> > +/* struct mtk_hw_ops - The HW layer operations provided to
> > transaction layer.
> 
> That's good documentation. You should fix some indentation and, after
> that, you
> should actually make it kerneldoc.
Ok, thanks your suggestion. We will check it and follow kernel-doc
rule.
> 
> /**
>   * struct mtk_hw_ops - ....
>   * (etc)
> 
> 
https://urldefense.com/v3/__https://docs.kernel.org/doc-guide/kernel-doc.html__;!!CTRNKA9wMg0ARbw!37J98KirRCUF2fzx-jQSzasz6tYsYkRYYG5cqalmhtRe4fT-ZaMVAq3fcHxbUU9Q2fPr$
>  
> 
> > + * @read32:         Callback to read 32-bit register.
> > + * @write32:        Callback to write 32-bit register.
> > + * @get_dev_state:  Callback to get the device's state.
> > + * @ack_dev_state:  Callback to acknowledge device state.
> > + * @get_ds_status:  Callback to get device deep sleep status.
> > + * @ds_lock:        Callback to lock the deep sleep of device.
> > + * @ds_unlock:      Callback to unlock the deep sleep of device.
> > + * @set_l1ss:       Callback to set the link L1 and L1ss
> > enable/disable.
> > + * @get_resume_state:Callback to get PM resume information that
> > device writes.
> > + * @get_irq_id:     Callback to get the irq id specific IP on a
> > chip.
> > + * @get_virq_id:     Callback to get the system virtual IRQ.
> > + * @register_irq:   Callback to register callback function to
> > specific hardware IP.
> > + * @unregister_irq: Callback to unregister callback function to
> > specific hardware IP.
> > + * @mask_irq:       Callback to mask the interrupt of specific
> > hardware IP.
> > + * @unmask_irq:     Callback to unmask the interrupt of specific
> > hardware IP.
> > + * @clear_irq:      Callback to clear the interrupt of specific
> > hardware IP.
> > + * @register_ext_evt:Callback to register HW Layer external event.
> > + * @unregister_ext_evt:Callback to unregister HW Layer external
> > event.
> > + * @mask_ext_evt:   Callback to mask HW Layer external event.
> > + * @unmask_ext_evt: Callback to unmask HW Layer external event.
> > + * @clear_ext_evt:  Callback to clear HW Layer external event
> > status.
> > + * @send_ext_evt:   Callback to send HW Layer external event.
> > + * @get_ext_evt_status:Callback to get HW Layer external event
> > status.
> > + * @reset:          Callback to reset device.
> > + * @reinit:         Callback to execute device re-initialization.
> > + * @get_hp_status:  Callback to get link hotplug status.
> > + */
> > +struct mtk_hw_ops {
> > +	/* Read value from MD. For PCIe, it's BAR 2/3 MMIO read */
> 
> Compress all these comments in the kerneldoc description: you either
> document
> the members here inline, or up there.
> I prefer up there.
Ok, we will check it and follow kernel-doc rule.
> 
> > +	u32 (*read32)(struct mtk_md_dev *mdev, u64 addr);
> 
> ..snip..
do you mean we should remove read function wrapper?

We plan to support other HW interface in the same driver in future,
such as SDIO. Thereforce, reading a device register over different
interface may need different implementations. So we want to abstract
the adaptation layer to uniform the upper layer usage.
> 
> > +
> > +/* mtk_md_dev defines the structure of MTK modem device */
> 
> This structure is already partially documented: it takes 2 minutes to
> finish
> the documentation as kerneldoc. Please do that.
Ok, we will check it and follow kernel-doc rule.
> 
> > +struct mtk_md_dev {
> > +	struct device *dev;
> > +	const struct mtk_hw_ops *hw_ops; /* The operations provided by
> > hw layer */
> > +	void *hw_priv;
> > +	u32 hw_ver;
> > +	int msi_nvecs;
> > +	char dev_str[MTK_DEV_STR_LEN];
> > +};
> > +
> > +int mtk_dev_init(struct mtk_md_dev *mdev);
> > +void mtk_dev_exit(struct mtk_md_dev *mdev);
> > +int mtk_dev_start(struct mtk_md_dev *mdev);
> > +
> > +/* mtk_hw_read32() -Read dword from register.
> 
> Same here and everywhere else, this won't get parsed by kerneldoc:
> please fix.
Ok, we will check it and follow kernel-doc rule.
> 
> /**
>   * mtk_hw_read32() - Read dword from register
>   *
>   * @mdev .....etc
> 
> > + *
> > + * @mdev: Device instance.
> > + * @addr: Register address.
> > + *
> > + * Return: Dword register value.
> > + */
> > +static inline u32 mtk_hw_read32(struct mtk_md_dev *mdev, u64 addr)
> > +{
> > +	return mdev->hw_ops->read32(mdev, addr);
> > +}
> > +
> 
> ..snip..
do you mean we should remove read function wrapper?

We plan to support other HW interface in the same driver in future,
such as SDIO. Thereforce, reading a device register over different
interface may need different implementations. So we want to abstract
the adaptation layer to uniform the upper layer usage.
> 
> > +static inline void *mtk_dma_alloc_coherent(struct mtk_md_dev
> > *mdev,
> > +					   size_t size, dma_addr_t
> > *addr, gfp_t flag)
> > +{
> > +	if (addr)
> > +		return dma_alloc_coherent(mdev->dev, size, addr, flag);
> > +	return NULL;
> 
> You're not doing anything special here: drop this function.
Ok, remove it and user kernel API directly next version.
> 
> > +}
> > +
> > +static inline int mtk_dma_free_coherent(struct mtk_md_dev *mdev,
> > +					size_t size, void *cpu_addr,
> > dma_addr_t addr)
> > +{
> > +	if (!addr)
> > +		return -EINVAL;
> > +	dma_free_coherent(mdev->dev, size, cpu_addr, addr);
> 
> Same here.
Ok, remove it and user kernel API directly next version.
> 
> > +	return 0;
> > +}
> > +
> > +static inline struct dma_pool *mtk_dma_pool_create(struct
> > mtk_md_dev *mdev,
> > +						   const char *name,
> > size_t size,
> > +						   size_t align, size_t
> > allocation)
> > +{
> > +	return dma_pool_create(name, mdev->dev, size, align,
> > allocation);
> 
> Ditto.
Ok, remove it and user kernel API directly next version.
> 
> > +}
> > +
> > +static inline void mtk_dma_pool_destroy(struct dma_pool *pool)
> > +{
> > +	dma_pool_destroy(pool);
> 
> Again...
Ok, remove it and user kernel API directly next version.
> 
> > +}
> > +
> > +static inline void *mtk_dma_pool_alloc(struct dma_pool *pool,
> > gfp_t mem_flags, dma_addr_t *addr)
> > +{
> > +	if (!pool || !addr)
> > +		return NULL;
> > +	return dma_pool_zalloc(pool, mem_flags, addr);
> 
> ...and again...
Ok, remove it and user kernel API directly next version.
> 
> > +}
> > +
> > +static inline int mtk_dma_pool_free(struct dma_pool *pool, void
> > *cpu_addr, dma_addr_t addr)
> > +{
> > +	if (!pool || !addr)
> > +		return -EINVAL;
> > +	dma_pool_free(pool, cpu_addr, addr);
> 
> ...this too..
Ok, remove it and user kernel API directly next version.
> 
> > +	return 0;
> > +}
> > +
> > +int mtk_dma_map_single(struct mtk_md_dev *mdev, dma_addr_t *addr,
> > +		       void *mem, size_t size, int direction);
> > +static inline int mtk_dma_unmap_single(struct mtk_md_dev *mdev,
> > +				       dma_addr_t addr, size_t size,
> > int direction)
> > +{
> > +	if (!addr)
> > +		return -EINVAL;
> > +	dma_unmap_single(mdev->dev, addr, size, direction);
> 
> and this
Ok, remove it and user kernel API directly next version.
> 
> > +	return 0;
> > +}
> > +
> > +int mtk_dma_map_page(struct mtk_md_dev *mdev, dma_addr_t *addr,
> > +		     struct page *page, unsigned long offset, size_t
> > size, int direction);
> > +static inline int mtk_dma_unmap_page(struct mtk_md_dev *mdev,
> > +				     dma_addr_t addr, size_t size, int
> > direction)
> > +{
> > +	if (!addr)
> > +		return -EINVAL;
> > +	dma_unmap_page(mdev->dev, addr, size, direction);
> 
> ...and this.
Ok, remove it and user kernel API directly next version.
> 
> > +	return 0;
> > +}
> > +
> > +#endif /* __MTK_DEV_H__ */
> > diff --git a/drivers/net/wwan/mediatek/pcie/mtk_pci.c
> > b/drivers/net/wwan/mediatek/pcie/mtk_pci.c
> > new file mode 100644
> > index 000000000000..5be61178d30d
> > --- /dev/null
> > +++ b/drivers/net/wwan/mediatek/pcie/mtk_pci.c
> > @@ -0,0 +1,1164 @@
> > +// SPDX-License-Identifier: BSD-3-Clause-Clear
> > +/*
> > + * Copyright (c) 2022, MediaTek Inc.
> > + */
> > +
> > +#include <linux/acpi.h>
> > +#include <linux/aer.h>
> > +#include <linux/delay.h>
> > +#include <linux/device.h>
> > +#include <linux/dma-mapping.h>
> > +#include <linux/kernel.h>
> > +#include <linux/module.h>
> > +
> > +#include "mtk_pci.h"
> > +#include "mtk_reg.h"
> > +
> > +#define MTK_PCI_TRANSPARENT_ATR_SIZE	(0x3F)
> > +
> > +/* This table records which bits of the interrupt status register
> > each interrupt corresponds to
> > + * when there are different numbers of msix interrupts.
> > + */
> 
> Whenever >= 80 columns is possible, please use that boundary: it
> doesn't really
> make a lot of sense to have a 96 columns comment.
Ok, we will reduce the length of comments  to ensure not exceed 80
columns per line.
> 
> /*
>   * This table records which bits of the interrupt status register
>   * corresponds to which interrupt when there are different numbers
>   * of MSI-X interrupts.
>   */
> 
> > +static const u32 mtk_msix_bits_map[MTK_IRQ_CNT_MAX / 2][5] = {
> > +	{0xFFFFFFFF, 0x55555555, 0x11111111, 0x01010101, 0x00010001},
> > +	{0x00000000, 0xAAAAAAAA, 0x22222222, 0x02020202, 0x00020002},
> > +	{0x00000000, 0x00000000, 0x44444444, 0x04040404, 0x00040004},
> > +	{0x00000000, 0x00000000, 0x88888888, 0x08080808, 0x00080008},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x10101010, 0x00100010},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x20202020, 0x00200020},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x40404040, 0x00400040},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x80808080, 0x00800080},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01000100},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000200},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04000400},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000800},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10001000},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20002000},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40004000},
> > +	{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80008000},
> > +};
> > +
> > +static u32 mtk_pci_mac_read32(struct mtk_pci_priv *priv, u64 addr)
> > +{
> > +	return ioread32(priv->mac_reg_base + addr);
> > +}
> > +
> > +static void mtk_pci_mac_write32(struct mtk_pci_priv *priv, u64
> > addr, u32 val)
> > +{
> > +	iowrite32(val, priv->mac_reg_base + addr);
> > +}
> > +
> > +static void mtk_pci_set_msix_merged(struct mtk_pci_priv *priv, int
> > irq_cnt)
> > +{
> > +	mtk_pci_mac_write32(priv, REG_PCIE_CFG_MSIX, ffs(irq_cnt) * 2 -
> > 1);
> > +}
> > +
> > +static int mtk_pci_setup_atr(struct mtk_md_dev *mdev, struct
> > mtk_atr_cfg *cfg)
> > +{
> > +	struct mtk_pci_priv *priv = mdev->hw_priv;
> > +	u32 addr, val, size_h, size_l;
> > +	int atr_size, pos, offset;
> > +
> > +	if (cfg->transparent) {
> > +		atr_size = MTK_PCI_TRANSPARENT_ATR_SIZE; /* No address
> > conversion is performed */
> > +	} else {
> > +		if (cfg->src_addr & (cfg->size - 1)) {
> > +			dev_err(mdev->dev, "Invalid atr src addr is not
> > aligned to size\n");
> > +			return -EFAULT;
> > +		}
> > +		if (cfg->trsl_addr & (cfg->size - 1)) {
> > +			dev_err(mdev->dev, "Invalid atr trsl addr is
> > not aligned to size, %llx, %llx\n",
> > +				cfg->trsl_addr, cfg->size - 1);
> > +			return -EFAULT;
> > +		}
> > +
> > +		size_l = cfg->size & 0xFFFFFFFF;
> 
> You're using bitfields a lot, please use the macros that you can find
> in
> include/linux/bitfield.h - that will simplify things a lot, other
> than adding
> a couple of build-time checks that will help sanitizing in case
> something is
> horribly wrong (or becomes horribly wrong in the future).
> 
> size_l = FIELD_PREP(SOME_FIELD, cfg->size);
> 
> Whenever it does not make sense to use bitfield macros, you should
> anyway never
> use magic numbers, and you should actually make use of other kernel
> provided
> bit macros, such as GENMASK() and others (which you *are* using
> later).
Ok, follow your suggestion to use bitfield interface instead.
> 
> > +		size_h = cfg->size >> 32;
> > +		pos = ffs(size_l);
> > +		if (pos) {
> > +			/* Address Translate Space Size is equal to
> > 2^(atr_size+1)
> > +			 * "-2" means "-1-1", the first "-1" is because
> > of the atr_size register,
> > +			 * the second is because of the ffs() will
> > increase by one.
> > +			 */
> > +			atr_size = pos - 2;
> > +		} else {
> > +			pos = ffs(size_h);
> > +			/* "+30" means "+32-1-1", the meaning of "-1-1" 
> > is same as above,
> > +			 * "+32" is because atr_size is large,
> > exceeding 32-bits.
> > +			 */
> > +			atr_size = pos + 30;
> > +		}
> > +	}
> > +
> > +	/* Calculate table offset */
> > +	offset = ATR_PORT_OFFSET * cfg->port + ATR_TABLE_OFFSET * cfg-
> > >table;
> > +	/* SRC_ADDR_H */
> > +	addr = REG_ATR_PCIE_WIN0_T0_SRC_ADDR_MSB + offset;
> > +	val = (u32)(cfg->src_addr >> 32);
> > +	mtk_pci_mac_write32(priv, addr, val);
> > +	/* SRC_ADDR_L */
> > +	addr = REG_ATR_PCIE_WIN0_T0_SRC_ADDR_LSB + offset;
> > +	val = (u32)(cfg->src_addr & 0xFFFFF000) | (atr_size << 1) |
> > 0x1;
> > +	mtk_pci_mac_write32(priv, addr, val);
> > +
> > +	/* TRSL_ADDR_H */
> > +	addr = REG_ATR_PCIE_WIN0_T0_TRSL_ADDR_MSB + offset;
> > +	val = (u32)(cfg->trsl_addr >> 32);
> > +	mtk_pci_mac_write32(priv, addr, val);
> > +	/* TRSL_ADDR_L */
> > +	addr = REG_ATR_PCIE_WIN0_T0_TRSL_ADDR_LSB + offset;
> > +	val = (u32)(cfg->trsl_addr & 0xFFFFF000);
> > +	mtk_pci_mac_write32(priv, addr, val);
> > +
> > +	/* TRSL_PARAM */
> > +	addr = REG_ATR_PCIE_WIN0_T0_TRSL_PARAM + offset;
> > +	val = (cfg->trsl_param << 16) | cfg->trsl_id;
> > +	mtk_pci_mac_write32(priv, addr, val);
> > +
> > +	return 0;
> > +}
> > +
> 
> ..snip..
> 
we don't know which lines should be removed. can you help share more
detail?
All of them are used to set up mapping relationship between host memory
view and device side. They are necessary from my viewpoint
> > +
> > +static int mtk_pci_reinit(struct mtk_md_dev *mdev, enum
> > mtk_reinit_type type)
> > +{
> > +	struct pci_dev *pdev = to_pci_dev(mdev->dev);
> > +	struct mtk_pci_priv *priv = mdev->hw_priv;
> > +	int ret, ltr, l1ss;
> > +
> > +	/* restore ltr */
> > +	ltr = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_LTR);
> > +	if (ltr) {
> > +		pci_write_config_word(pdev, ltr +
> > PCI_LTR_MAX_SNOOP_LAT,
> > +				      priv->ltr_max_snoop_lat);
> > +		pci_write_config_word(pdev, ltr +
> > PCI_LTR_MAX_NOSNOOP_LAT,
> > +				      priv->ltr_max_nosnoop_lat);
> > +	}
> > +	/* restore l1ss */
> > +	l1ss = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_L1SS);
> > +	if (l1ss) {
> > +		pci_write_config_dword(pdev, l1ss + PCI_L1SS_CTL1,
> > priv->l1ss_ctl1);
> > +		pci_write_config_dword(pdev, l1ss + PCI_L1SS_CTL2,
> > priv->l1ss_ctl2);
> > +	}
> > +
> > +	ret = mtk_pci_atr_init(mdev);
> > +	if (ret)
> > +		return ret;
> > +
> > +	if (priv->irq_type == PCI_IRQ_MSIX) {
> > +		if (priv->irq_cnt != MTK_IRQ_CNT_MAX)
> > +			mtk_pci_set_msix_merged(priv, priv->irq_cnt);
> > +	}
> > +
> > +	mtk_pci_unmask_irq(mdev, priv->rgu_irq_id);
> > +	mtk_pci_unmask_irq(mdev, priv->mhccif_irq_id);
> > +
> > +	/* In L2 resume, device would disable PCIe interrupt,
> > +	 * and this step would re-enable PCIe interrupt.
> > +	 * For L3, just do this with no effect.
> > +	 */
> > +	if (type == REINIT_TYPE_RESUME)
> > +		mtk_pci_mac_write32(priv, priv->cfg-
> > >istatus_host_ctrl_addr, 0);
> > +
> > +	dev_info(mdev->dev, "PCIe reinit type=%d\n", type);
> 
> I'm not sure that this message provides any valuable information to
> the user,
> this should be a dev_dbg().
Ok, fix it next version (replace dev_info with dev_dbg).
> 
> > +
> > +	return 0;
> > +}
> > +
> 
> ..snip..
do you mean we should return void for this function?
> 
> > +
> > +static void mtk_mhccif_isr_work(struct work_struct *work)
> > +{
> > +	struct mtk_pci_priv *priv = container_of(work, struct
> > mtk_pci_priv, mhccif_work);
> > +	struct mtk_md_dev *mdev = priv->irq_desc->mdev;
> > +	struct mtk_mhccif_cb *cb;
> > +	unsigned long flag;
> > +	u32 stat, mask;
> > +
> > +	stat = mtk_mhccif_get_evt_status(mdev);
> > +	mask = mtk_pci_read32(mdev, priv->cfg->mhccif_rc_base_addr
> > +		+ MHCCIF_EP2RC_SW_INT_EAP_MASK);
> > +	dev_info(mdev->dev, "External events: mhccif_stat=0x%08X
> > mask=0x%08X\n", stat, mask);
> 
> This print is going to be a bit spammy... dev_dbg().
Ok, fix it next version (replace dev_info with dev_dbg).
> 
> > +
> > +	if (unlikely(stat == U32_MAX && mtk_pci_link_check(mdev))) {
> > +		/* When link failed, we don't need to unmask/clear. */
> > +		dev_err(mdev->dev, "Failed to check link in MHCCIF
> > handler.\n");
> > +		return;
> > +	}
> > +
> > +	stat &= ~mask;
> > +	spin_lock_irqsave(&priv->mhccif_lock, flag);
> > +	list_for_each_entry(cb, &priv->mhccif_cb_list, entry) {
> > +		if (cb->chs & stat)
> > +			cb->evt_cb(cb->chs & stat, cb->data);
> > +	}
> > +	spin_unlock_irqrestore(&priv->mhccif_lock, flag);
> > +
> > +	mtk_pci_clear_irq(mdev, priv->mhccif_irq_id);
> > +	mtk_pci_unmask_irq(mdev, priv->mhccif_irq_id);
> > +}
> > +
> 
> ..snip..
do you mean we should remove this function from patch-1? 
And add it back while the following patch need this function?
> 
> > +
> > +static int mtk_pci_request_irq(struct mtk_md_dev *mdev, int
> > max_irq_cnt, int irq_type)
> > +{
> > +	struct pci_dev *pdev = to_pci_dev(mdev->dev);
> > +	int irq_cnt;
> > +	int ret;
> > +
> > +	irq_cnt = pci_alloc_irq_vectors(pdev, MTK_IRQ_CNT_MIN,
> > max_irq_cnt, irq_type);
> > +	mdev->msi_nvecs = irq_cnt;
> > +
> > +	if (irq_cnt < MTK_IRQ_CNT_MIN) {
> > +		dev_err(mdev->dev,
> > +			"Unable to alloc pci irq vectors. ret=%d
> > maxirqcnt=%d irqtype=0x%x\n",
> > +			irq_cnt, max_irq_cnt, irq_type);
> > +		ret = -EFAULT;
> > +		goto err;
> 
> 
> 		return -EFAULT;
> 
> 
Ok, remove "got err" as following:
	if (irq_cnt < MTK_IRQ_CNT_MIN) {
		dev_err(mdev->dev,
			"Unable to alloc pci irq vectors. ret=%d
maxirqcnt=%d irqtype=0x%x\n",
			irq_cnt, max_irq_cnt, irq_type);
		return -EFAULT;
> > +	}
> > +
> > +	ret = mtk_pci_request_irq_msix(mdev, irq_cnt);
> 
> 
> 	return mtk_pci_request_irq_msix(dev, irq_cnt);
Ok, fix it next version. (remove local variable "ret"-->return
mtk_pci_request_irq_msix(dev, irq_cnt))
> }
> 
> 
> > +err:
> > +	return ret;
> > +}
> > +
> 
> Regards,
> Angelo
> 

many thanks.
yanchao.yang

From ck.hu at mediatek.com  Sun Dec 25 19:12:28 2022
From: ck.hu at mediatek.com (=?utf-8?B?Q0sgSHUgKOiDoeS/iuWFiSk=?=)
Date: Mon, 26 Dec 2022 03:12:28 +0000
Subject: [PATCH v3 07/12] drm/mediatek: hdmi: add v2 support
In-Reply-To: <20220919-v3-7-a803f2660127@baylibre.com>
References: <20220919-v3-0-a803f2660127@baylibre.com>
	 <20220919-v3-7-a803f2660127@baylibre.com>
Message-ID: <8060f38c3db6d2f6e1cb7eb6d6bbc199d289aa7d.camel@mediatek.com>

Hi, Guillaume:

On Fri, 2022-11-04 at 15:09 +0100, Guillaume Ranquet wrote:
> Adds hdmi and hdmi-ddc support for v2 IP.
> 
> Signed-off-by: Guillaume Ranquet <granquet at baylibre.com>
> ---
>  drivers/gpu/drm/mediatek/Makefile           |    2 +
>  drivers/gpu/drm/mediatek/mtk_hdmi_common.c  |   14 +
>  drivers/gpu/drm/mediatek/mtk_hdmi_common.h  |    1 +
>  drivers/gpu/drm/mediatek/mtk_hdmi_ddc_v2.c  |  367 +++++++
>  drivers/gpu/drm/mediatek/mtk_hdmi_regs_v2.h |  309 ++++++
>  drivers/gpu/drm/mediatek/mtk_hdmi_v2.c      | 1379
> +++++++++++++++++++++++++++
>  drivers/gpu/drm/mediatek/mtk_hdmi_v2.h      |   29 +
>  7 files changed, 2101 insertions(+)
> 
> 

[snip]

> diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi_regs_v2.h
> b/drivers/gpu/drm/mediatek/mtk_hdmi_regs_v2.h
> new file mode 100644
> index 000000000000..f4c3652f4eab
> --- /dev/null
> +++ b/drivers/gpu/drm/mediatek/mtk_hdmi_regs_v2.h
> @@ -0,0 +1,309 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * Copyright (c) 2021 MediaTek Inc.
> + * Copyright (c) 2021 BayLibre, SAS
> + */
> +
> +#ifndef _MTK_HDMI_REGS_H
> +#define _MTK_HDMI_REGS_H
> +
> +#define AIF_HEADER GENMASK(19, 0)
> +#define AIF_PKT00 GENMASK(31, 0)
> +#define AIF_PKT01 (23, 0)
> +#define AIF_PKT02 (31, 0)
> +#define AIF_PKT03 (23, 0)

Useless, drop it.

> +
> +#define AIP_CTRL BIT(10)

I think this is

#define AIP_CTRL 0x400


> +#define AIP_CTS_SVAL 0x408
> +#define AIP_DOWNSAMPLE_CTRL 0x41C
> +#define AIP_I2S_CHST0 0x414
> +#define AIP_I2S_CHST1 0x418
> +#define AIP_I2S_CTRL 0x410
> +#define AIP_N_VAL 0x404
> +#define AIP_SPDIF_CTRL 0x40C
> +#define AIP_TPI_CTRL 0x428
> +#define AIP_TXCTRL 0x424
> +
> +#define AUD_DIS (0x0)
> +#define AUD_DIS_WR (0x0)
> +#define AUD_EN BIT(2)
> +#define AUD_EN_WR BIT(18)
> +#define AUD_ERR_THRESH GENMASK(29, 24)
> +#define AUD_IN_EN BIT(8)
> +#define AUD_MUTE_DIS (0x0)
> +#define AUD_MUTE_FIFO_EN BIT(5)
> +#define AUD_PACKET_DROP BIT(6)
> +#define AUD_RPT_DIS (0x0)
> +#define AUD_RPT_EN BIT(2)
> +#define AUD_SEL_OWRT BIT(9)

I would like to put the bitwise definition with double word definition
together. You could reference [1].

[1] 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/mediatek/mtk_disp_rdma.c?h=v6.2-rc1


Regards,
CK

> +
> +#define AVI_DIS (0)
> +#define AVI_DIS_WR (0)
> +#define AVI_EN (0x1)
> +#define AVI_EN_WR BIT(16)
> +#define AVI_HEADER GENMASK(23, 0)
> +#define AVI_PKT00 GENMASK(31, 0)
> +#define AVI_PKT01 GENMASK(23, 0)
> +#define AVI_PKT02 GENMASK(31, 0)
> +#define AVI_PKT03 GENMASK(23, 0)
> +#define AVI_PKT04 GENMASK(31, 0)
> +#define AVI_PKT05 GENMASK(23, 0)
> +#define AVI_RPT_DIS (0x0)
> +#define AVI_RPT_EN (0x1)
> +
> +#define C422_C420_CONFIG_BYPASS BIT(5)
> +#define C422_C420_CONFIG_ENABLE BIT(4)
> +#define C422_C420_CONFIG_OUT_CB_OR_CR BIT(6)
> +#define C444_C422_CONFIG_ENABLE (0x1)
> +
> +#define CBIT_ORDER_SAME BIT(13)
> +
> +#define CEA_AUD_EN BIT(9)
> +#define CEA_AVI_EN BIT(11)
> +#define CEA_CP_EN BIT(6)
> +#define CEA_SPD_EN BIT(10)
> +
> +#define CLEAR_FIFO 0x9
> +
> +#define CLOCK_SCL 0xA
> +
> +#define CP_CLR_MUTE_EN BIT(1)
> +#define CP_EN BIT(5)
> +#define CP_EN_WR BIT(21)
> +#define CP_RPT_EN BIT(5)
> +#define CP_SET_MUTE_DIS (0)
> +#define CP_SET_MUTE_EN (1)
> +
> +#define CTS_CAL_N4 BIT(23)
> +#define CTS_REQ_EN BIT(1)
> +#define CTS_SW_SEL (1)
> +
> 

From Biao.Huang at mediatek.com  Sun Dec 25 19:50:39 2022
From: Biao.Huang at mediatek.com (=?utf-8?B?QmlhbyBIdWFuZyAo6buE5b2qKQ==?=)
Date: Mon, 26 Dec 2022 03:50:39 +0000
Subject: [PATCH v5 1/2] stmmac: dwmac-mediatek: enable 2ns delay only for
 special cases
In-Reply-To: <Y6W4vwJHG+6PI8fd@lunn.ch>
References: <20221223015029.24978-1-biao.huang@mediatek.com>
	 <20221223015029.24978-2-biao.huang@mediatek.com> <Y6W4vwJHG+6PI8fd@lunn.ch>
Message-ID: <4a82aa5437e496e2b65b77ef08d7897a4b23f7e5.camel@mediatek.com>

Dear Andrew,
	Thanks for your comments.

On Fri, 2022-12-23 at 15:18 +0100, Andrew Lunn wrote:
> On Fri, Dec 23, 2022 at 09:50:28AM +0800, Biao Huang wrote:
> > In current driver, MAC will always enable 2ns delay in RGMII mode,
> > but that will lead to transmission failures for "rgmii-id"/"rgmii-
> > txid"
> > cases.
> > 
> > Modify the implementation of fix_mac_speed() to ensure the 2ns
> > delay
> > will only take effect for "rgmii-rxid"/"rgmii" cases, then user can
> > choose phy-mode freely.
> 
> This does not seem correct. There are three ways the delays can be
> added:
> 
> 1) The MAC
> 2) The PHY
> 3) Extra long lines on the board.
> 
> What the four RGMII modes tell you is what is needed in addition to
> whatever the board provides. So it describes the combination of 1)
> and
> 2). Your board does not appear to be applying any delays, so you
> should be using rgmii-id.
> 
> The MAC and PHY driver then need to decide how to add these delays,
> and in most cases, the MAC does nothing, and passes phy-mode to the
> PHY and the PHY adds the delay.
> 
> The MAC can add delays, but if it does, it need to mask out the
> delays
> it added to the value passed to the PHY. Otherwise the PHY will add
> the delay as well.
in the ethernet-controller.yaml,
 77       # RX and TX delays are added by the MAC when required
 78       - rgmii
 79
 80       # RGMII with internal RX and TX delays provided by the PHY,
 81       # the MAC should not add the RX or TX delays in this case
 82       - rgmii-id
 83
 84       # RGMII with internal RX delay provided by the PHY, the MAC
 85       # should not add an RX delay in this case
 86       - rgmii-rxid
 87
 88       # RGMII with internal TX delay provided by the PHY, the MAC
 89       # should not add an TX delay in this case
 90       - rgmii-txid

so, why don't MAC set delay according to rgmii-** ?
rgmii-rxid   --> mac set tx, but not set rx delay
rgmii-txid   --> mac set rx, but not set tx delay
...

and PHY seems set delay according to rgmii-** in their dirver.

> 
> >  
> > -	if ((phy_interface_mode_is_rgmii(priv_plat->phy_mode))) {
> > +	switch (priv_plat->phy_mode) {
> > +	case PHY_INTERFACE_MODE_RGMII:
> > +	case PHY_INTERFACE_MODE_RGMII_RXID:
> >  		/* prefer 2ns fixed delay which is controlled by
> > TXC_PHASE_CTRL,
> >  		 * when link speed is 1Gbps with RGMII interface,
> >  		 * Fall back to delay macro circuit for 10/100Mbps link
> > speed.
> 
> So this is wrong. PHY_INTERFACE_MODE_RGMII means the board is adding
> the delay via long lines. You should not be added any delay at all.
> 
> For PHY_INTERFACE_MODE_RGMII_RXID, you need to mask the RXID bit from
> phy_mode when connecting the MAC to the PHY. Otherwise the PHY is
> going to add this delay as well.

These lines only set tx delay when phy_mode is RGMII/RGMI_RXID, when
phy will not add tx delay internally.
We don't want to restrict phy-mode to rgmii-id only, so I don't think
we need mask RXID bit, then, User can use rgmii-rxid/-txid/-id as their
will.

If I misunderstood, please correct me. Thanks.
> 
> 	 Andrew
Best Regards!
Biao

From ck.hu at mediatek.com  Sun Dec 25 21:18:03 2022
From: ck.hu at mediatek.com (=?utf-8?B?Q0sgSHUgKOiDoeS/iuWFiSk=?=)
Date: Mon, 26 Dec 2022 05:18:03 +0000
Subject: [PATCH v3 02/12] dt-bindings: display: mediatek: add MT8195 hdmi
 bindings
In-Reply-To: <20220919-v3-2-a803f2660127@baylibre.com>
References: <20220919-v3-0-a803f2660127@baylibre.com>
	 <20220919-v3-2-a803f2660127@baylibre.com>
Message-ID: <7da1e73a0cca6867a060d5b69d45e8d4dfc89748.camel@mediatek.com>

Hi, Guillaume:

On Fri, 2022-11-04 at 15:09 +0100, Guillaume Ranquet wrote:
> Add mt8195 SoC bindings for hdmi and hdmi-ddc
> 
> On mt8195 the ddc i2c controller is part of the hdmi IP block and
> thus has no
> specific register range, power domain or interrupt, making it simpler
> than its the legacy "mediatek,hdmi-ddc" binding.
> 
> Signed-off-by: Guillaume Ranquet <granquet at baylibre.com>
> ---
>  

[snip]

> a/Documentation/devicetree/bindings/display/mediatek/mediatek,mt8195-
> hdmi-ddc.yaml
> b/Documentation/devicetree/bindings/display/mediatek/mediatek,mt8195-
> hdmi-ddc.yaml
> new file mode 100644
> index 000000000000..2dc273689584
> --- /dev/null
> +++
> b/Documentation/devicetree/bindings/display/mediatek/mediatek,mt8195-
> hdmi-ddc.yaml
> @@ -0,0 +1,51 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: 
> https://urldefense.com/v3/__http://devicetree.org/schemas/display/mediatek/mediatek,mt8195-hdmi-ddc.yaml*__;Iw!!CTRNKA9wMg0ARbw!wwVQuq5lzW0lvUFUkVXPWT8cIu96xdkn4tMams1E55qyxEZmgV1i0WfpOlq57w$
>  
> +$schema: 
> https://urldefense.com/v3/__http://devicetree.org/meta-schemas/core.yaml*__;Iw!!CTRNKA9wMg0ARbw!wwVQuq5lzW0lvUFUkVXPWT8cIu96xdkn4tMams1E55qyxEZmgV1i0WdSGOSxzw$
>  
> +
> +title: Mediatek HDMI DDC for mt8195
> +
> +maintainers:
> +  - CK Hu <ck.hu at mediatek.com>
> +  - Jitao shi <jitao.shi at mediatek.com>
> +
> +description: |
> +  The HDMI DDC i2c controller is used to interface with the HDMI DDC
> pins.
> +
> +properties:
> +  compatible:
> +    enum:
> +      - mediatek,mt8195-hdmi-ddc
> +
> +  clocks:
> +    maxItems: 1
> +
> +  clock-names:
> +    items:
> +      - const: ddc
> +
> +  mediatek,hdmi:
> +    $ref: /schemas/types.yaml#/definitions/phandle
> +    description:
> +      A phandle to the mt8195 hdmi controller
> +
> +required:
> +  - compatible
> +  - clocks
> +  - clock-names
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/interrupt-controller/arm-gic.h>
> +    #include <dt-bindings/interrupt-controller/irq.h>
> +    hdmiddc0: i2c {
> +      compatible = "mediatek,mt8195-hdmi-ddc";
> +      mediatek,hdmi = <&hdmi0>;
> +      clocks = <&clk26m>;
> +      clock-names = "ddc";
> +    };

I think we should not have a virtual device. This ddc is part of
mt8195-hdmi device, so just keep mt8195-hdmi, and let mt8195-hdmi
driver to probe the sub driver of ddc driver.

Regards,
CK

> +
> +...
> 

From wenst at chromium.org  Sun Dec 25 22:55:52 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Mon, 26 Dec 2022 14:55:52 +0800
Subject: [PATCH v2 01/23] clk: mediatek: mt8192: Correctly unregister and
 free clocks on failure
In-Reply-To: <20221223094259.87373-2-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-2-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5EQDzgT+1VL7MDNGzHXCa4WheemP6Ysn5=3sF6Gft=V0A@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> If anything fails during probe of the clock controller(s), unregister
> (and kfree!) whatever we have previously registered to leave with a
> clean state and prevent leaks.
>
> Fixes: 710573dee31b ("clk: mediatek: Add MT8192 basic clocks support")
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>


From wenst at chromium.org  Sun Dec 25 22:56:37 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Mon, 26 Dec 2022 14:56:37 +0800
Subject: [PATCH v2 02/23] clk: mediatek: mt8192: Propagate struct device
 for gate clocks
In-Reply-To: <20221223094259.87373-3-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-3-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5HTi14-AV38DAFKao+PBeMf3CpSgvD6OuNnzRygL2bvgw@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Convert instances of mtk_clk_register_gates() to use the newer
> mtk_clk_register_gates_with_dev() to propagate struct device to
> the clk framework.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>


From wenst at chromium.org  Sun Dec 25 23:05:05 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Mon, 26 Dec 2022 15:05:05 +0800
Subject: [PATCH v2 03/23] clk: mediatek: clk-gate: Propagate struct device
 with mtk_clk_register_gates()
In-Reply-To: <20221223094259.87373-4-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-4-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5G7DFsapt5y-ujPKTTS7xxR8K1iCZ7La__D2_ZZ+hwU3g@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Commit e4c23e19aa2a ("clk: mediatek: Register clock gate with device")
> introduces a helper function for the sole purpose of propagating a
> struct device pointer to the clk API when registering the mtk-gate
> clocks to take advantage of Runtime PM when/where needed and where
> a power domain is defined in devicetree.
>
> Function mtk_clk_register_gates() then becomes a wrapper around the
> new mtk_clk_register_gates_with_dev() function that will simply pass
> NULL as struct device: this is essential when registering drivers
> with CLK_OF_DECLARE instead of as a platform device, as there will
> be no struct device to pass... but we can as well simply have only
> one function that always takes such pointer as a param and pass NULL
> when unavoidable.
>
> This commit removes the mtk_clk_register_gates() wrapper and renames
> mtk_clk_register_gates_with_dev() to the former and all of the calls
> to either of the two functions were fixed in all drivers in order to
> reflect this change.
>
> Since a lot of MediaTek clock drivers are actually registering as a
> platform device, but were still registering the mtk-gate clocks
> without passing any struct device to the clock framework, they've
> been changed to pass a valid one now, as to make all those platforms
> able to use runtime power management where available.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>

However, I wonder if we could move the |struct device *| paramter to be
the first one? This matches other APIs better, notably the clk_register()
family.

Regards
ChenYu


From wenst at chromium.org  Sun Dec 25 23:07:10 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Mon, 26 Dec 2022 15:07:10 +0800
Subject: [PATCH v2 04/23] clk: mediatek: cpumux: Propagate struct device
 where possible
In-Reply-To: <20221223094259.87373-5-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-5-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5F8QZGc4oDKJAGbpvubqiewvngURpNhrenS3pcGQNrOYw@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Take a pointer to a struct device in mtk_clk_register_cpumuxes() and
> propagate the same to mtk_clk_register_cpumux() => clk_hw_register().
> Even though runtime pm is unlikely to be used with CPU muxes, this
> helps with code consistency and possibly opens to commonization of
> some mtk_clk_register_(x) functions.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>

As with the gates patch, could we make the |struct device *| parameter the
first one? Also for this case I think we could even drop the
|struct device_node *| parameter.


Regards
ChenYu


From roger.lu at mediatek.com  Mon Dec 26 01:42:35 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:35 +0800
Subject: [PATCH v1 0/13] Enahance SVS's robustness
Message-ID: <20221226094248.4506-1-roger.lu@mediatek.com>

SVS driver got accepted upstream but still has room to be improved.
Therefore, we add these patches to fix issues and coding style.

Matthias Brugger (4):
  soc: mediatek: mtk-svs: clean up platform probing
  soc: mediatek: mtk-svs: improve readability of platform_probe
  soc: mediatek: mtk-svs: move svs_platform_probe into probe
  soc: mediatek: mtk-svs: delete superfluous platform data entries

Ricardo Ribalda (1):
  soc: mediatek: mtk-svs: enable the IRQ later

Roger Lu (7):
  soc: mediatek: mtk-svs: use svs get efuse common function
  soc: mtk-svs: mt8183: refactor o_slope calculation
  soc: mediatek: mtk-svs: add main_clk check during system-wide suspend
  soc: mediatek: mtk-svs: use common function to disable restore
    voltages
  soc: mediatek: mtk-svs: restore default voltages when svs init02 fail
  soc: mediatek: mtk-svs: add thermal voltage compensation if needed
  soc: mediatek: mtk-svs: keep svs alive even though debug cmd create
    fail

Shang XiaoJing (1):
  soc: mediatek: mtk-svs: Use pm_runtime_resume_and_get() in
    svs_init01()

 drivers/soc/mediatek/mtk-svs.c | 279 +++++++++++++++------------------
 1 file changed, 124 insertions(+), 155 deletions(-)




From roger.lu at mediatek.com  Mon Dec 26 01:42:47 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:47 +0800
Subject: [PATCH v1 12/13] soc: mediatek: mtk-svs: Use pm_runtime_resume_and_get() in svs_init01()
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-13-roger.lu@mediatek.com>

From: Shang XiaoJing <shangxiaojing at huawei.com>

svs_init01() calls pm_runtime_get_sync() and added fail path as
svs_init01_finish to put usage_counter. However, pm_runtime_get_sync()
will increment usage_counter even it failed. Fix it by replacing it with
pm_runtime_resume_and_get() to keep usage counter balanced.

Fixes: 681a02e95000 ("soc: mediatek: SVS: introduce MTK SVS engine")
Signed-off-by: Shang XiaoJing <shangxiaojing at huawei.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index dacfee4a0b32..af3a12e29e78 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -1326,7 +1326,7 @@ static int svs_init01(struct svs_platform *svsp)
 				svsb->pm_runtime_enabled_count++;
 			}
 
-			ret = pm_runtime_get_sync(svsb->opp_dev);
+			ret = pm_runtime_resume_and_get(svsb->opp_dev);
 			if (ret < 0) {
 				dev_err(svsb->dev, "mtcmos on fail: %d\n", ret);
 				goto svs_init01_resume_cpuidle;
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:42 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:42 +0800
Subject: [PATCH v1 07/13] soc: mtk-svs: mt8183: refactor o_slope calculation
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-8-roger.lu@mediatek.com>

The o_slope value is dependent of the o_slope_sign, refactor code to get
rid of unnecessary if constructs.

Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 51 +++++++++++++++-------------------
 1 file changed, 22 insertions(+), 29 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 477f5bd1e1d1..2c1fbf11b554 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -1897,26 +1897,27 @@ static bool svs_mt8183_efuse_parsing(struct svs_platform *svsp)
 	o_slope_sign = (svsp->tefuse[0] >> 7) & BIT(0);
 
 	ts_id = (svsp->tefuse[1] >> 9) & BIT(0);
-	o_slope = (svsp->tefuse[0] >> 26) & GENMASK(5, 0);
-
-	if (adc_cali_en_t == 1) {
-		if (!ts_id)
-			o_slope = 0;
-
-		if (adc_ge_t < 265 || adc_ge_t > 758 ||
-		    adc_oe_t < 265 || adc_oe_t > 758 ||
-		    o_vtsmcu[0] < -8 || o_vtsmcu[0] > 484 ||
-		    o_vtsmcu[1] < -8 || o_vtsmcu[1] > 484 ||
-		    o_vtsmcu[2] < -8 || o_vtsmcu[2] > 484 ||
-		    o_vtsmcu[3] < -8 || o_vtsmcu[3] > 484 ||
-		    o_vtsmcu[4] < -8 || o_vtsmcu[4] > 484 ||
-		    o_vtsabb < -8 || o_vtsabb > 484 ||
-		    degc_cali < 1 || degc_cali > 63) {
-			dev_err(svsp->dev, "bad thermal efuse, no mon mode\n");
-			goto remove_mt8183_svsb_mon_mode;
-		}
+	if (!ts_id) {
+		o_slope = 1534;
 	} else {
-		dev_err(svsp->dev, "no thermal efuse, no mon mode\n");
+		o_slope = (svsp->tefuse[0] >> 26) & GENMASK(5, 0);
+		if (!o_slope_sign)
+			o_slope = 1534 + o_slope * 10;
+		else
+			o_slope = 1534 - o_slope * 10;
+	}
+
+	if (adc_cali_en_t == 0 ||
+	    adc_ge_t < 265 || adc_ge_t > 758 ||
+	    adc_oe_t < 265 || adc_oe_t > 758 ||
+	    o_vtsmcu[0] < -8 || o_vtsmcu[0] > 484 ||
+	    o_vtsmcu[1] < -8 || o_vtsmcu[1] > 484 ||
+	    o_vtsmcu[2] < -8 || o_vtsmcu[2] > 484 ||
+	    o_vtsmcu[3] < -8 || o_vtsmcu[3] > 484 ||
+	    o_vtsmcu[4] < -8 || o_vtsmcu[4] > 484 ||
+	    o_vtsabb < -8 || o_vtsabb > 484 ||
+	    degc_cali < 1 || degc_cali > 63) {
+		dev_err(svsp->dev, "bad thermal efuse, no mon mode\n");
 		goto remove_mt8183_svsb_mon_mode;
 	}
 
@@ -1935,11 +1936,7 @@ static bool svs_mt8183_efuse_parsing(struct svs_platform *svsp)
 		x_roomt[i] = (((format[i] * 10000) / 4096) * 10000) / gain;
 
 	temp0 = (10000 * 100000 / gain) * 15 / 18;
-
-	if (!o_slope_sign)
-		mts = (temp0 * 10) / (1534 + o_slope * 10);
-	else
-		mts = (temp0 * 10) / (1534 - o_slope * 10);
+	mts = (temp0 * 10) / o_slope;
 
 	for (idx = 0; idx < svsp->bank_max; idx++) {
 		svsb = &svsp->banks[idx];
@@ -1966,11 +1963,7 @@ static bool svs_mt8183_efuse_parsing(struct svs_platform *svsp)
 		temp0 = (degc_cali * 10 / 2);
 		temp1 = ((10000 * 100000 / 4096 / gain) *
 			 oe + tb_roomt * 10) * 15 / 18;
-
-		if (!o_slope_sign)
-			temp2 = temp1 * 100 / (1534 + o_slope * 10);
-		else
-			temp2 = temp1 * 100 / (1534 - o_slope * 10);
+		temp2 = temp1 * 100 / o_slope;
 
 		svsb->bts = (temp0 + temp2 - 250) * 4 / 10;
 	}
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:36 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:36 +0800
Subject: [PATCH v1 01/13] soc: mediatek: mtk-svs: enable the IRQ later
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-2-roger.lu@mediatek.com>

From: Ricardo Ribalda <ribalda at chromium.org>

If the system does not come from reset (like when is booted via
kexec(), the peripheral might trigger an IRQ before the data structures
are initialized.

Fixes:

[    0.227710] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000f08
[    0.227913] Call trace:
[    0.227918]  svs_isr+0x8c/0x538

Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 0469c9dfeb04..91e06f43969d 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -2379,20 +2379,6 @@ static int svs_probe(struct platform_device *pdev)
 		goto svs_probe_free_resource;
 	}
 
-	svsp_irq = platform_get_irq(pdev, 0);
-	if (svsp_irq < 0) {
-		ret = svsp_irq;
-		goto svs_probe_free_resource;
-	}
-
-	ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr,
-					IRQF_ONESHOT, svsp->name, svsp);
-	if (ret) {
-		dev_err(svsp->dev, "register irq(%d) failed: %d\n",
-			svsp_irq, ret);
-		goto svs_probe_free_resource;
-	}
-
 	svsp->main_clk = devm_clk_get(svsp->dev, "main");
 	if (IS_ERR(svsp->main_clk)) {
 		dev_err(svsp->dev, "failed to get clock: %ld\n",
@@ -2414,6 +2400,20 @@ static int svs_probe(struct platform_device *pdev)
 		goto svs_probe_clk_disable;
 	}
 
+	svsp_irq = platform_get_irq(pdev, 0);
+	if (svsp_irq < 0) {
+		ret = svsp_irq;
+		goto svs_probe_iounmap;
+	}
+
+	ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr,
+					IRQF_ONESHOT, svsp->name, svsp);
+	if (ret) {
+		dev_err(svsp->dev, "register irq(%d) failed: %d\n",
+			svsp_irq, ret);
+		goto svs_probe_iounmap;
+	}
+
 	ret = svs_start(svsp);
 	if (ret) {
 		dev_err(svsp->dev, "svs start fail: %d\n", ret);
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:43 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:43 +0800
Subject: [PATCH v1 08/13] soc: mediatek: mtk-svs: add main_clk check during system-wide suspend
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-9-roger.lu@mediatek.com>

SVS's main_clk might be disabled in svs_resume(). Therefore, if main_clk
is disabled and svs_suspend() is called by system-wide suspend stage,
return 0 directly.

Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 2c1fbf11b554..934e7ea976b0 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -6,6 +6,7 @@
 #include <linux/bitfield.h>
 #include <linux/bits.h>
 #include <linux/clk.h>
+#include <linux/clk-provider.h>
 #include <linux/completion.h>
 #include <linux/cpuidle.h>
 #include <linux/debugfs.h>
@@ -1543,6 +1544,9 @@ static int svs_suspend(struct device *dev)
 	int ret;
 	u32 idx;
 
+	if (!__clk_is_enabled(svsp->main_clk))
+		return 0;
+
 	for (idx = 0; idx < svsp->bank_max; idx++) {
 		svsb = &svsp->banks[idx];
 
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:44 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:44 +0800
Subject: [PATCH v1 09/13] soc: mediatek: mtk-svs: use common function to disable restore voltages
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-10-roger.lu@mediatek.com>

The timing of disabling/restoring SVS bank is more than one place.
Therefore, add a common function to use for removing the superfluous codes.

Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 44 +++++++++++++++++-----------------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 934e7ea976b0..c4b36c908eda 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -623,6 +623,26 @@ static int svs_adjust_pm_opp_volts(struct svs_bank *svsb)
 	return ret;
 }
 
+static void svs_bank_disable_and_restore_default_volts(struct svs_platform *svsp,
+						       struct svs_bank *svsb)
+{
+	unsigned long flags;
+
+	if (svsb->mode_support == SVSB_MODE_ALL_DISABLE)
+		return;
+
+	/* This spinlock might wait for svs_isr() process */
+	spin_lock_irqsave(&svs_lock, flags);
+	svsp->pbank = svsb;
+	svs_switch_bank(svsp);
+	svs_writel_relaxed(svsp, SVSB_PTPEN_OFF, SVSEN);
+	svs_writel_relaxed(svsp, SVSB_INTSTS_VAL_CLEAN, INTSTS);
+	spin_unlock_irqrestore(&svs_lock, flags);
+
+	svsb->phase = SVSB_PHASE_ERROR;
+	svs_adjust_pm_opp_volts(svsb);
+}
+
 static int svs_dump_debug_show(struct seq_file *m, void *p)
 {
 	struct svs_platform *svsp = (struct svs_platform *)m->private;
@@ -698,7 +718,6 @@ static ssize_t svs_enable_debug_write(struct file *filp,
 {
 	struct svs_bank *svsb = file_inode(filp)->i_private;
 	struct svs_platform *svsp = dev_get_drvdata(svsb->dev);
-	unsigned long flags;
 	int enabled, ret;
 	char *buf = NULL;
 
@@ -714,16 +733,8 @@ static ssize_t svs_enable_debug_write(struct file *filp,
 		return ret;
 
 	if (!enabled) {
-		spin_lock_irqsave(&svs_lock, flags);
-		svsp->pbank = svsb;
+		svs_bank_disable_and_restore_default_volts(svsp, svsb);
 		svsb->mode_support = SVSB_MODE_ALL_DISABLE;
-		svs_switch_bank(svsp);
-		svs_writel_relaxed(svsp, SVSB_PTPEN_OFF, SVSEN);
-		svs_writel_relaxed(svsp, SVSB_INTSTS_VAL_CLEAN, INTSTS);
-		spin_unlock_irqrestore(&svs_lock, flags);
-
-		svsb->phase = SVSB_PHASE_ERROR;
-		svs_adjust_pm_opp_volts(svsb);
 	}
 
 	kfree(buf);
@@ -1540,7 +1551,6 @@ static int svs_suspend(struct device *dev)
 {
 	struct svs_platform *svsp = dev_get_drvdata(dev);
 	struct svs_bank *svsb;
-	unsigned long flags;
 	int ret;
 	u32 idx;
 
@@ -1549,17 +1559,7 @@ static int svs_suspend(struct device *dev)
 
 	for (idx = 0; idx < svsp->bank_max; idx++) {
 		svsb = &svsp->banks[idx];
-
-		/* This might wait for svs_isr() process */
-		spin_lock_irqsave(&svs_lock, flags);
-		svsp->pbank = svsb;
-		svs_switch_bank(svsp);
-		svs_writel_relaxed(svsp, SVSB_PTPEN_OFF, SVSEN);
-		svs_writel_relaxed(svsp, SVSB_INTSTS_VAL_CLEAN, INTSTS);
-		spin_unlock_irqrestore(&svs_lock, flags);
-
-		svsb->phase = SVSB_PHASE_ERROR;
-		svs_adjust_pm_opp_volts(svsb);
+		svs_bank_disable_and_restore_default_volts(svsp, svsb);
 	}
 
 	ret = reset_control_assert(svsp->rst);
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:41 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:41 +0800
Subject: [PATCH v1 06/13] soc: mediatek: mtk-svs: use svs get efuse common function
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-7-roger.lu@mediatek.com>

SVS might need to read both svs efuse and thermal efuse on the probe flow.
Therefore, add a common efuse read function to remove the superfluous
codes.

Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 69 ++++++++++++----------------------
 1 file changed, 24 insertions(+), 45 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 5c9ca373e646..477f5bd1e1d1 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -1701,26 +1701,28 @@ static int svs_bank_resource_setup(struct svs_platform *svsp)
 	return 0;
 }
 
-static int svs_thermal_efuse_get_data(struct svs_platform *svsp)
+static int svs_get_efuse_data(struct svs_platform *svsp,
+			      const char *nvmem_cell_name,
+			      u32 **svsp_efuse, size_t *svsp_efuse_max)
 {
 	struct nvmem_cell *cell;
 
-	/* Thermal efuse parsing */
-	cell = nvmem_cell_get(svsp->dev, "t-calibration-data");
+	cell = nvmem_cell_get(svsp->dev, nvmem_cell_name);
 	if (IS_ERR_OR_NULL(cell)) {
-		dev_err(svsp->dev, "no \"t-calibration-data\"? %ld\n", PTR_ERR(cell));
+		dev_err(svsp->dev, "no \"%s\"? %ld\n",
+			nvmem_cell_name, PTR_ERR(cell));
 		return PTR_ERR(cell);
 	}
 
-	svsp->tefuse = nvmem_cell_read(cell, &svsp->tefuse_max);
-	if (IS_ERR(svsp->tefuse)) {
-		dev_err(svsp->dev, "cannot read thermal efuse: %ld\n",
-			PTR_ERR(svsp->tefuse));
+	*svsp_efuse = nvmem_cell_read(cell, svsp_efuse_max);
+	if (IS_ERR(*svsp_efuse)) {
+		dev_err(svsp->dev, "cannot read \"%s\" efuse: %ld\n",
+			nvmem_cell_name, PTR_ERR(*svsp_efuse));
 		nvmem_cell_put(cell);
-		return PTR_ERR(svsp->tefuse);
+		return PTR_ERR(*svsp_efuse);
 	}
 
-	svsp->tefuse_max /= sizeof(u32);
+	*svsp_efuse_max /= sizeof(u32);
 	nvmem_cell_put(cell);
 
 	return 0;
@@ -1768,7 +1770,8 @@ static bool svs_mt8192_efuse_parsing(struct svs_platform *svsp)
 		svsb->vmax += svsb->dvt_fixed;
 	}
 
-	ret = svs_thermal_efuse_get_data(svsp);
+	ret = svs_get_efuse_data(svsp, "t-calibration-data",
+				 &svsp->tefuse, &svsp->tefuse_max);
 	if (ret)
 		return false;
 
@@ -1873,7 +1876,8 @@ static bool svs_mt8183_efuse_parsing(struct svs_platform *svsp)
 		}
 	}
 
-	ret = svs_thermal_efuse_get_data(svsp);
+	ret = svs_get_efuse_data(svsp, "t-calibration-data",
+				 &svsp->tefuse, &svsp->tefuse_max);
 	if (ret)
 		return false;
 
@@ -1982,32 +1986,6 @@ static bool svs_mt8183_efuse_parsing(struct svs_platform *svsp)
 	return true;
 }
 
-static bool svs_is_efuse_data_correct(struct svs_platform *svsp)
-{
-	struct nvmem_cell *cell;
-
-	/* Get svs efuse by nvmem */
-	cell = nvmem_cell_get(svsp->dev, "svs-calibration-data");
-	if (IS_ERR(cell)) {
-		dev_err(svsp->dev, "no \"svs-calibration-data\"? %ld\n",
-			PTR_ERR(cell));
-		return false;
-	}
-
-	svsp->efuse = nvmem_cell_read(cell, &svsp->efuse_max);
-	if (IS_ERR(svsp->efuse)) {
-		dev_err(svsp->dev, "cannot read svs efuse: %ld\n",
-			PTR_ERR(svsp->efuse));
-		nvmem_cell_put(cell);
-		return false;
-	}
-
-	svsp->efuse_max /= sizeof(u32);
-	nvmem_cell_put(cell);
-
-	return true;
-}
-
 static struct device *svs_get_subsys_device(struct svs_platform *svsp,
 					    const char *node_name)
 {
@@ -2342,8 +2320,9 @@ static int svs_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
-	if (!svs_is_efuse_data_correct(svsp)) {
-		dev_notice(svsp->dev, "efuse data isn't correct\n");
+	ret = svs_get_efuse_data(svsp, "svs-calibration-data",
+				 &svsp->efuse, &svsp->efuse_max);
+	if (ret) {
 		ret = -EPERM;
 		goto svs_probe_free_efuse;
 	}
@@ -2351,13 +2330,13 @@ static int svs_probe(struct platform_device *pdev)
 	if (!svsp_data->efuse_parsing(svsp)) {
 		dev_err(svsp->dev, "efuse data parsing failed\n");
 		ret = -EPERM;
-		goto svs_probe_free_resource;
+		goto svs_probe_free_tefuse;
 	}
 
 	ret = svs_bank_resource_setup(svsp);
 	if (ret) {
 		dev_err(svsp->dev, "svs bank resource setup fail: %d\n", ret);
-		goto svs_probe_free_resource;
+		goto svs_probe_free_tefuse;
 	}
 
 	svsp->main_clk = devm_clk_get(svsp->dev, "main");
@@ -2365,13 +2344,13 @@ static int svs_probe(struct platform_device *pdev)
 		dev_err(svsp->dev, "failed to get clock: %ld\n",
 			PTR_ERR(svsp->main_clk));
 		ret = PTR_ERR(svsp->main_clk);
-		goto svs_probe_free_resource;
+		goto svs_probe_free_tefuse;
 	}
 
 	ret = clk_prepare_enable(svsp->main_clk);
 	if (ret) {
 		dev_err(svsp->dev, "cannot enable main clk: %d\n", ret);
-		goto svs_probe_free_resource;
+		goto svs_probe_free_tefuse;
 	}
 
 	svsp->base = of_iomap(svsp->dev->of_node, 0);
@@ -2415,7 +2394,7 @@ static int svs_probe(struct platform_device *pdev)
 svs_probe_clk_disable:
 	clk_disable_unprepare(svsp->main_clk);
 
-svs_probe_free_resource:
+svs_probe_free_tefuse:
 	if (!IS_ERR_OR_NULL(svsp->tefuse))
 		kfree(svsp->tefuse);
 
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:39 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:39 +0800
Subject: [PATCH v1 04/13] soc: mediatek: mtk-svs: move svs_platform_probe into probe
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-5-roger.lu@mediatek.com>

From: Matthias Brugger <matthias.bgg at gmail.com>

Moving svs_platform_probe into driver probe function will allow us to
reduce svs_platform members. This will be done in a follow-up patch.

Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 20 ++++----------------
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 63ad9160a305..24d2d07d2d3d 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -2325,17 +2325,17 @@ static const struct of_device_id svs_of_match[] = {
 	},
 };
 
-static struct svs_platform *svs_platform_probe(struct platform_device *pdev)
+static int svs_probe(struct platform_device *pdev)
 {
 	struct svs_platform *svsp;
 	const struct svs_platform_data *svsp_data;
-	int ret;
+	int ret, svsp_irq;
 
 	svsp_data = of_device_get_match_data(&pdev->dev);
 
 	svsp = devm_kzalloc(&pdev->dev, sizeof(*svsp), GFP_KERNEL);
 	if (!svsp)
-		return ERR_PTR(-ENOMEM);
+		return -ENOMEM;
 
 	svsp->dev = &pdev->dev;
 	svsp->name = svsp_data->name;
@@ -2346,19 +2346,7 @@ static struct svs_platform *svs_platform_probe(struct platform_device *pdev)
 
 	ret = svsp_data->probe(svsp);
 	if (ret)
-		return ERR_PTR(ret);
-
-	return svsp;
-}
-
-static int svs_probe(struct platform_device *pdev)
-{
-	struct svs_platform *svsp;
-	int svsp_irq, ret;
-
-	svsp = svs_platform_probe(pdev);
-	if (IS_ERR(svsp))
-		return PTR_ERR(svsp);
+		return ret;
 
 	if (!svs_is_efuse_data_correct(svsp)) {
 		dev_notice(svsp->dev, "efuse data isn't correct\n");
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:37 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:37 +0800
Subject: [PATCH v1 02/13] soc: mediatek: mtk-svs: clean up platform probing
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-3-roger.lu@mediatek.com>

From: Matthias Brugger <matthias.bgg at gmail.com>

We only ever call the SoC specific probe function from
svs_platform_probe. No need to carry that function in a global
datastructure around.

Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 91e06f43969d..38dcee9c9c04 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -319,7 +319,6 @@ static const u32 svs_regs_v2[] = {
  * @banks: svs banks that svs platform supports
  * @rst: svs platform reset control
  * @efuse_parsing: svs platform efuse parsing function pointer
- * @probe: svs platform probe function pointer
  * @efuse_max: total number of svs efuse
  * @tefuse_max: total number of thermal efuse
  * @regs: svs platform registers map
@@ -336,7 +335,6 @@ struct svs_platform {
 	struct svs_bank *banks;
 	struct reset_control *rst;
 	bool (*efuse_parsing)(struct svs_platform *svsp);
-	int (*probe)(struct svs_platform *svsp);
 	size_t efuse_max;
 	size_t tefuse_max;
 	const u32 *regs;
@@ -2347,11 +2345,10 @@ static struct svs_platform *svs_platform_probe(struct platform_device *pdev)
 	svsp->name = svsp_data->name;
 	svsp->banks = svsp_data->banks;
 	svsp->efuse_parsing = svsp_data->efuse_parsing;
-	svsp->probe = svsp_data->probe;
 	svsp->regs = svsp_data->regs;
 	svsp->bank_max = svsp_data->bank_max;
 
-	ret = svsp->probe(svsp);
+	ret = svsp_data->probe(svsp);
 	if (ret)
 		return ERR_PTR(ret);
 
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:46 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:46 +0800
Subject: [PATCH v1 11/13] soc: mediatek: mtk-svs: add thermal voltage compensation if needed
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-12-roger.lu@mediatek.com>

Some extreme test environment may keep IC temperature very low or very high
during system boot stage. For stability concern, we add thermal voltage
compenstation if needed no matter svs bank phase is in init02 or mon mode.

Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 3a2be5ced8e6..dacfee4a0b32 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -557,7 +557,7 @@ static int svs_adjust_pm_opp_volts(struct svs_bank *svsb)
 	}
 
 	/* Get thermal effect */
-	if (svsb->phase == SVSB_PHASE_MON) {
+	if (!IS_ERR_OR_NULL(svsb->tzd)) {
 		ret = thermal_zone_get_temp(svsb->tzd, &tzone_temp);
 		if (ret || (svsb->temp > SVSB_TEMP_UPPER_BOUND &&
 			    svsb->temp < SVSB_TEMP_LOWER_BOUND)) {
@@ -572,7 +572,8 @@ static int svs_adjust_pm_opp_volts(struct svs_bank *svsb)
 			temp_voffset += svsb->tzone_ltemp_voffset;
 
 		/* 2-line bank update all opp volts when running mon mode */
-		if (svsb->type == SVSB_HIGH || svsb->type == SVSB_LOW) {
+		if (svsb->phase == SVSB_PHASE_MON && (svsb->type == SVSB_HIGH ||
+						      svsb->type == SVSB_LOW)) {
 			opp_start = 0;
 			opp_stop = svsb->opp_count;
 		}
@@ -588,11 +589,6 @@ static int svs_adjust_pm_opp_volts(struct svs_bank *svsb)
 			/* do nothing */
 			goto unlock_mutex;
 		case SVSB_PHASE_INIT02:
-			svsb_volt = max(svsb->volt[i], svsb->vmin);
-			opp_volt = svs_bank_volt_to_opp_volt(svsb_volt,
-							     svsb->volt_step,
-							     svsb->volt_base);
-			break;
 		case SVSB_PHASE_MON:
 			svsb_volt = max(svsb->volt[i] + temp_voffset, svsb->vmin);
 			opp_volt = svs_bank_volt_to_opp_volt(svsb_volt,
@@ -1680,7 +1676,7 @@ static int svs_bank_resource_setup(struct svs_platform *svsp)
 			}
 		}
 
-		if (svsb->mode_support & SVSB_MODE_MON) {
+		if (!IS_ERR_OR_NULL(svsb->tzone_name)) {
 			svsb->tzd = thermal_zone_get_zone_by_name(svsb->tzone_name);
 			if (IS_ERR(svsb->tzd)) {
 				dev_err(svsb->dev, "cannot get \"%s\" thermal zone\n",
@@ -2124,6 +2120,7 @@ static struct svs_bank svs_mt8192_banks[] = {
 		.type			= SVSB_LOW,
 		.set_freq_pct		= svs_set_bank_freq_pct_v3,
 		.get_volts		= svs_get_bank_volts_v3,
+		.tzone_name		= "gpu1",
 		.volt_flags		= SVSB_REMOVE_DVTFIXED_VOLT,
 		.mode_support		= SVSB_MODE_INIT02,
 		.opp_count		= MAX_OPP_ENTRIES,
@@ -2141,6 +2138,10 @@ static struct svs_bank svs_mt8192_banks[] = {
 		.core_sel		= 0x0fff0100,
 		.int_st			= BIT(0),
 		.ctl0			= 0x00540003,
+		.tzone_htemp		= 85000,
+		.tzone_htemp_voffset	= 0,
+		.tzone_ltemp		= 25000,
+		.tzone_ltemp_voffset	= 7,
 	},
 	{
 		.sw_id			= SVSB_GPU,
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:40 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:40 +0800
Subject: [PATCH v1 05/13] soc: mediatek: mtk-svs: delete superfluous platform data entries
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-6-roger.lu@mediatek.com>

From: Matthias Brugger <matthias.bgg at gmail.com>

The platform name and efuse parsing function pointer are only used while
probing the device. Use them from the svs_platform_data struct instead.

Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 24d2d07d2d3d..5c9ca373e646 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -311,14 +311,12 @@ static const u32 svs_regs_v2[] = {
 
 /**
  * struct svs_platform - svs platform control
- * @name: svs platform name
  * @base: svs platform register base
  * @dev: svs platform device
  * @main_clk: main clock for svs bank
  * @pbank: svs bank pointer needing to be protected by spin_lock section
  * @banks: svs banks that svs platform supports
  * @rst: svs platform reset control
- * @efuse_parsing: svs platform efuse parsing function pointer
  * @efuse_max: total number of svs efuse
  * @tefuse_max: total number of thermal efuse
  * @regs: svs platform registers map
@@ -327,14 +325,12 @@ static const u32 svs_regs_v2[] = {
  * @tefuse: thermal efuse data received from NVMEM framework
  */
 struct svs_platform {
-	char *name;
 	void __iomem *base;
 	struct device *dev;
 	struct clk *main_clk;
 	struct svs_bank *pbank;
 	struct svs_bank *banks;
 	struct reset_control *rst;
-	bool (*efuse_parsing)(struct svs_platform *svsp);
 	size_t efuse_max;
 	size_t tefuse_max;
 	const u32 *regs;
@@ -2009,7 +2005,7 @@ static bool svs_is_efuse_data_correct(struct svs_platform *svsp)
 	svsp->efuse_max /= sizeof(u32);
 	nvmem_cell_put(cell);
 
-	return svsp->efuse_parsing(svsp);
+	return true;
 }
 
 static struct device *svs_get_subsys_device(struct svs_platform *svsp,
@@ -2338,9 +2334,7 @@ static int svs_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	svsp->dev = &pdev->dev;
-	svsp->name = svsp_data->name;
 	svsp->banks = svsp_data->banks;
-	svsp->efuse_parsing = svsp_data->efuse_parsing;
 	svsp->regs = svsp_data->regs;
 	svsp->bank_max = svsp_data->bank_max;
 
@@ -2351,6 +2345,12 @@ static int svs_probe(struct platform_device *pdev)
 	if (!svs_is_efuse_data_correct(svsp)) {
 		dev_notice(svsp->dev, "efuse data isn't correct\n");
 		ret = -EPERM;
+		goto svs_probe_free_efuse;
+	}
+
+	if (!svsp_data->efuse_parsing(svsp)) {
+		dev_err(svsp->dev, "efuse data parsing failed\n");
+		ret = -EPERM;
 		goto svs_probe_free_resource;
 	}
 
@@ -2388,7 +2388,7 @@ static int svs_probe(struct platform_device *pdev)
 	}
 
 	ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr,
-					IRQF_ONESHOT, svsp->name, svsp);
+					IRQF_ONESHOT, svsp_data->name, svsp);
 	if (ret) {
 		dev_err(svsp->dev, "register irq(%d) failed: %d\n",
 			svsp_irq, ret);
@@ -2416,11 +2416,13 @@ static int svs_probe(struct platform_device *pdev)
 	clk_disable_unprepare(svsp->main_clk);
 
 svs_probe_free_resource:
-	if (!IS_ERR_OR_NULL(svsp->efuse))
-		kfree(svsp->efuse);
 	if (!IS_ERR_OR_NULL(svsp->tefuse))
 		kfree(svsp->tefuse);
 
+svs_probe_free_efuse:
+	if (!IS_ERR_OR_NULL(svsp->efuse))
+		kfree(svsp->efuse);
+
 	return ret;
 }
 
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:45 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:45 +0800
Subject: [PATCH v1 10/13] soc: mediatek: mtk-svs: restore default voltages when svs init02 fail
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-11-roger.lu@mediatek.com>

If svs init02 fail, it means we cannot rely on svs bank voltages anymore.
We need to disable svs function and restore DVFS opp voltages back to the
default voltages for making sure we have enough DVFS voltages.

Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index c4b36c908eda..3a2be5ced8e6 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -1467,6 +1467,7 @@ static int svs_init02(struct svs_platform *svsp)
 {
 	struct svs_bank *svsb;
 	unsigned long flags, time_left;
+	int ret;
 	u32 idx;
 
 	for (idx = 0; idx < svsp->bank_max; idx++) {
@@ -1485,7 +1486,8 @@ static int svs_init02(struct svs_platform *svsp)
 							msecs_to_jiffies(5000));
 		if (!time_left) {
 			dev_err(svsb->dev, "init02 completion timeout\n");
-			return -EBUSY;
+			ret = -EBUSY;
+			goto out_of_init02;
 		}
 	}
 
@@ -1503,12 +1505,21 @@ static int svs_init02(struct svs_platform *svsp)
 		if (svsb->type == SVSB_HIGH || svsb->type == SVSB_LOW) {
 			if (svs_sync_bank_volts_from_opp(svsb)) {
 				dev_err(svsb->dev, "sync volt fail\n");
-				return -EPERM;
+				ret = -EPERM;
+				goto out_of_init02;
 			}
 		}
 	}
 
 	return 0;
+
+out_of_init02:
+	for (idx = 0; idx < svsp->bank_max; idx++) {
+		svsb = &svsp->banks[idx];
+		svs_bank_disable_and_restore_default_volts(svsp, svsb);
+	}
+
+	return ret;
 }
 
 static void svs_mon_mode(struct svs_platform *svsp)
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:38 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:38 +0800
Subject: [PATCH v1 03/13] soc: mediatek: mtk-svs: improve readability of platform_probe
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-4-roger.lu@mediatek.com>

From: Matthias Brugger <matthias.bgg at gmail.com>

If a compatible misses a match data entry, then something is wrong in
the development phase, we don't need to check for that at runtime.

Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 38dcee9c9c04..63ad9160a305 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -2332,10 +2332,6 @@ static struct svs_platform *svs_platform_probe(struct platform_device *pdev)
 	int ret;
 
 	svsp_data = of_device_get_match_data(&pdev->dev);
-	if (!svsp_data) {
-		dev_err(&pdev->dev, "no svs platform data?\n");
-		return ERR_PTR(-EPERM);
-	}
 
 	svsp = devm_kzalloc(&pdev->dev, sizeof(*svsp), GFP_KERNEL);
 	if (!svsp)
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:48 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:48 +0800
Subject: [PATCH v1 13/13] soc: mediatek: mtk-svs: keep svs alive even though debug cmd create fail
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-14-roger.lu@mediatek.com>

Some projects might not support DEBUG_FS but still needs svs to be
supported. Therefore, keep svs alive even though debug cmd create fail.

Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index af3a12e29e78..c780a115543e 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -2390,10 +2390,8 @@ static int svs_probe(struct platform_device *pdev)
 	}
 
 	ret = svs_create_debug_cmds(svsp);
-	if (ret) {
+	if (ret)
 		dev_err(svsp->dev, "svs create debug cmds fail: %d\n", ret);
-		goto svs_probe_iounmap;
-	}
 
 	return 0;
 
-- 
2.18.0



From aouledameur at baylibre.com  Mon Dec 26 02:27:33 2022
From: aouledameur at baylibre.com (Amjad Ouled-Ameur)
Date: Mon, 26 Dec 2022 11:27:33 +0100
Subject: [PATCH v7 4/4] thermal: mediatek: add another get_temp ops for
 thermal sensors
In-Reply-To: <COUMF3IZ9Y63.LA3KFHJSUZIC@amjad-ThinkPad-T490>
References: <20221018-up-i350-thermal-bringup-v7-0-ebf08ff2eddb@baylibre.com>
 <20221018-up-i350-thermal-bringup-v7-4-ebf08ff2eddb@baylibre.com>
 <4121bb6b-30db-7a23-f4c8-40afdda7a0b5@linaro.org>
 <COTTJX635TNF.1WL2TEZN7VW9O@amjad-ThinkPad-T490>
 <adfe41f7-00e5-876b-7803-3127919fba13@linaro.org>
 <COUMF3IZ9Y63.LA3KFHJSUZIC@amjad-ThinkPad-T490>
Message-ID: <fa6ec5ae-3c09-6a8d-b6bd-46fbdfcb4f26@baylibre.com>

Hi Daniel,

On 12/6/22 10:18, Amjad Ouled-Ameur wrote:
> Hi Daniel,
> On Mon Dec 5, 2022 at 8:39 PM CET, Daniel Lezcano wrote:
>> Hi Amjad,
>>
>>
>> On 05/12/2022 11:41, Amjad Ouled-Ameur wrote:
>>
>> [ ... ]
>>
>>>>> @@ -1161,11 +1197,24 @@ static int mtk_thermal_probe(struct platform_device *pdev)
>>>>>     
>>>>>     	platform_set_drvdata(pdev, mt);
>>>>>     
>>>>> -	tzdev = devm_thermal_of_zone_register(&pdev->dev, 0, mt,
>>>>> -					      &mtk_thermal_ops);
>>>>> -	if (IS_ERR(tzdev)) {
>>>>> -		ret = PTR_ERR(tzdev);
>>>>> -		goto err_disable_clk_peri_therm;
>>>>> +	for (i = 0; i < mt->conf->num_sensors + 1; i++) {
>>>>> +		tz = devm_kmalloc(&pdev->dev, sizeof(*tz), GFP_KERNEL);
>>>>> +		if (!tz)
>>>>> +			return -ENOMEM;
>>>>> +
>>>>> +		tz->mt = mt;
>>>>> +		tz->id = i;
>>>>> +
>>>>> +		tzdev = devm_thermal_of_zone_register(&pdev->dev, i, tz, (i == 0) ?
>>>>> +							     &mtk_thermal_ops :
>>>>> +							     &mtk_thermal_sensor_ops);
>>>> Here you use again the aggregation
>>> I addressed this concern in V6, could you please take a look and let me
>>> know what you think [0].
>>>
>>> [0]: https://lore.kernel.org/all/5eb0cdc2-e9f9-dd42-bf80-b7dcd8bcc196 at baylibre.com/
>> May I misunderstanding but AFAICS, this patch is setting the
>> mtk_thermal_ops if the sensor id is zero. The get_temp is computing the
>> max temperature in this ops which is what we don't want to do.
> Correct, but I think that is out of scope of this patchset, as the current
> driver already uses mtk_thermal_ops for sensor 0. The focus of this patchset
> is to add support for the other sensors.
>
> Besides, what do you suggest as a clean implementation if the current one
> no longer meets thermal core requirements ?

Could you please address this ?


Kindly,

Amjad

> Regards,
> Amjad
>>
>> -- 
>> <http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs
>>
>> Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
>> <http://twitter.com/#!/linaroorg> Twitter |
>> <http://www.linaro.org/linaro-blog/> Blog


From roger.lu at mediatek.com  Mon Dec 26 01:42:43 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:43 +0800
Subject: [PATCH v1 08/13] soc: mediatek: mtk-svs: add main_clk check during system-wide suspend
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-9-roger.lu@mediatek.com>

SVS's main_clk might be disabled in svs_resume(). Therefore, if main_clk
is disabled and svs_suspend() is called by system-wide suspend stage,
return 0 directly.

Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 2c1fbf11b554..934e7ea976b0 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -6,6 +6,7 @@
 #include <linux/bitfield.h>
 #include <linux/bits.h>
 #include <linux/clk.h>
+#include <linux/clk-provider.h>
 #include <linux/completion.h>
 #include <linux/cpuidle.h>
 #include <linux/debugfs.h>
@@ -1543,6 +1544,9 @@ static int svs_suspend(struct device *dev)
 	int ret;
 	u32 idx;
 
+	if (!__clk_is_enabled(svsp->main_clk))
+		return 0;
+
 	for (idx = 0; idx < svsp->bank_max; idx++) {
 		svsb = &svsp->banks[idx];
 
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:42 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:42 +0800
Subject: [PATCH v1 07/13] soc: mtk-svs: mt8183: refactor o_slope calculation
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-8-roger.lu@mediatek.com>

The o_slope value is dependent of the o_slope_sign, refactor code to get
rid of unnecessary if constructs.

Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 51 +++++++++++++++-------------------
 1 file changed, 22 insertions(+), 29 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 477f5bd1e1d1..2c1fbf11b554 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -1897,26 +1897,27 @@ static bool svs_mt8183_efuse_parsing(struct svs_platform *svsp)
 	o_slope_sign = (svsp->tefuse[0] >> 7) & BIT(0);
 
 	ts_id = (svsp->tefuse[1] >> 9) & BIT(0);
-	o_slope = (svsp->tefuse[0] >> 26) & GENMASK(5, 0);
-
-	if (adc_cali_en_t == 1) {
-		if (!ts_id)
-			o_slope = 0;
-
-		if (adc_ge_t < 265 || adc_ge_t > 758 ||
-		    adc_oe_t < 265 || adc_oe_t > 758 ||
-		    o_vtsmcu[0] < -8 || o_vtsmcu[0] > 484 ||
-		    o_vtsmcu[1] < -8 || o_vtsmcu[1] > 484 ||
-		    o_vtsmcu[2] < -8 || o_vtsmcu[2] > 484 ||
-		    o_vtsmcu[3] < -8 || o_vtsmcu[3] > 484 ||
-		    o_vtsmcu[4] < -8 || o_vtsmcu[4] > 484 ||
-		    o_vtsabb < -8 || o_vtsabb > 484 ||
-		    degc_cali < 1 || degc_cali > 63) {
-			dev_err(svsp->dev, "bad thermal efuse, no mon mode\n");
-			goto remove_mt8183_svsb_mon_mode;
-		}
+	if (!ts_id) {
+		o_slope = 1534;
 	} else {
-		dev_err(svsp->dev, "no thermal efuse, no mon mode\n");
+		o_slope = (svsp->tefuse[0] >> 26) & GENMASK(5, 0);
+		if (!o_slope_sign)
+			o_slope = 1534 + o_slope * 10;
+		else
+			o_slope = 1534 - o_slope * 10;
+	}
+
+	if (adc_cali_en_t == 0 ||
+	    adc_ge_t < 265 || adc_ge_t > 758 ||
+	    adc_oe_t < 265 || adc_oe_t > 758 ||
+	    o_vtsmcu[0] < -8 || o_vtsmcu[0] > 484 ||
+	    o_vtsmcu[1] < -8 || o_vtsmcu[1] > 484 ||
+	    o_vtsmcu[2] < -8 || o_vtsmcu[2] > 484 ||
+	    o_vtsmcu[3] < -8 || o_vtsmcu[3] > 484 ||
+	    o_vtsmcu[4] < -8 || o_vtsmcu[4] > 484 ||
+	    o_vtsabb < -8 || o_vtsabb > 484 ||
+	    degc_cali < 1 || degc_cali > 63) {
+		dev_err(svsp->dev, "bad thermal efuse, no mon mode\n");
 		goto remove_mt8183_svsb_mon_mode;
 	}
 
@@ -1935,11 +1936,7 @@ static bool svs_mt8183_efuse_parsing(struct svs_platform *svsp)
 		x_roomt[i] = (((format[i] * 10000) / 4096) * 10000) / gain;
 
 	temp0 = (10000 * 100000 / gain) * 15 / 18;
-
-	if (!o_slope_sign)
-		mts = (temp0 * 10) / (1534 + o_slope * 10);
-	else
-		mts = (temp0 * 10) / (1534 - o_slope * 10);
+	mts = (temp0 * 10) / o_slope;
 
 	for (idx = 0; idx < svsp->bank_max; idx++) {
 		svsb = &svsp->banks[idx];
@@ -1966,11 +1963,7 @@ static bool svs_mt8183_efuse_parsing(struct svs_platform *svsp)
 		temp0 = (degc_cali * 10 / 2);
 		temp1 = ((10000 * 100000 / 4096 / gain) *
 			 oe + tb_roomt * 10) * 15 / 18;
-
-		if (!o_slope_sign)
-			temp2 = temp1 * 100 / (1534 + o_slope * 10);
-		else
-			temp2 = temp1 * 100 / (1534 - o_slope * 10);
+		temp2 = temp1 * 100 / o_slope;
 
 		svsb->bts = (temp0 + temp2 - 250) * 4 / 10;
 	}
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:36 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:36 +0800
Subject: [PATCH v1 01/13] soc: mediatek: mtk-svs: enable the IRQ later
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-2-roger.lu@mediatek.com>

From: Ricardo Ribalda <ribalda at chromium.org>

If the system does not come from reset (like when is booted via
kexec(), the peripheral might trigger an IRQ before the data structures
are initialized.

Fixes:

[    0.227710] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000f08
[    0.227913] Call trace:
[    0.227918]  svs_isr+0x8c/0x538

Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 0469c9dfeb04..91e06f43969d 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -2379,20 +2379,6 @@ static int svs_probe(struct platform_device *pdev)
 		goto svs_probe_free_resource;
 	}
 
-	svsp_irq = platform_get_irq(pdev, 0);
-	if (svsp_irq < 0) {
-		ret = svsp_irq;
-		goto svs_probe_free_resource;
-	}
-
-	ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr,
-					IRQF_ONESHOT, svsp->name, svsp);
-	if (ret) {
-		dev_err(svsp->dev, "register irq(%d) failed: %d\n",
-			svsp_irq, ret);
-		goto svs_probe_free_resource;
-	}
-
 	svsp->main_clk = devm_clk_get(svsp->dev, "main");
 	if (IS_ERR(svsp->main_clk)) {
 		dev_err(svsp->dev, "failed to get clock: %ld\n",
@@ -2414,6 +2400,20 @@ static int svs_probe(struct platform_device *pdev)
 		goto svs_probe_clk_disable;
 	}
 
+	svsp_irq = platform_get_irq(pdev, 0);
+	if (svsp_irq < 0) {
+		ret = svsp_irq;
+		goto svs_probe_iounmap;
+	}
+
+	ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr,
+					IRQF_ONESHOT, svsp->name, svsp);
+	if (ret) {
+		dev_err(svsp->dev, "register irq(%d) failed: %d\n",
+			svsp_irq, ret);
+		goto svs_probe_iounmap;
+	}
+
 	ret = svs_start(svsp);
 	if (ret) {
 		dev_err(svsp->dev, "svs start fail: %d\n", ret);
-- 
2.18.0



From roger.lu at mediatek.com  Mon Dec 26 01:42:47 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Mon, 26 Dec 2022 17:42:47 +0800
Subject: [PATCH v1 12/13] soc: mediatek: mtk-svs: Use pm_runtime_resume_and_get() in svs_init01()
In-Reply-To: <20221226094248.4506-1-roger.lu@mediatek.com>
References: <20221226094248.4506-1-roger.lu@mediatek.com>
Message-ID: <20221226094248.4506-13-roger.lu@mediatek.com>

From: Shang XiaoJing <shangxiaojing at huawei.com>

svs_init01() calls pm_runtime_get_sync() and added fail path as
svs_init01_finish to put usage_counter. However, pm_runtime_get_sync()
will increment usage_counter even it failed. Fix it by replacing it with
pm_runtime_resume_and_get() to keep usage counter balanced.

Fixes: 681a02e95000 ("soc: mediatek: SVS: introduce MTK SVS engine")
Signed-off-by: Shang XiaoJing <shangxiaojing at huawei.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index dacfee4a0b32..af3a12e29e78 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -1326,7 +1326,7 @@ static int svs_init01(struct svs_platform *svsp)
 				svsb->pm_runtime_enabled_count++;
 			}
 
-			ret = pm_runtime_get_sync(svsb->opp_dev);
+			ret = pm_runtime_resume_and_get(svsb->opp_dev);
 			if (ret < 0) {
 				dev_err(svsb->dev, "mtcmos on fail: %d\n", ret);
 				goto svs_init01_resume_cpuidle;
-- 
2.18.0



From regressions at leemhuis.info  Mon Dec 26 05:19:22 2022
From: regressions at leemhuis.info (Thorsten Leemhuis)
Date: Mon, 26 Dec 2022 14:19:22 +0100
Subject: [PATCH] spi: mediatek: Enable irq when pdata is ready #forregzbot
In-Reply-To: <Y6dL2ZWgd1BD6kew@makrotopia.org>
References: <20221128-spi-mt65xx-v1-0-509266830665@chromium.org>
 <166965653185.677424.5326738316899525692.b4-ty@kernel.org>
 <Y6dL2ZWgd1BD6kew@makrotopia.org>
Message-ID: <fdc65b23-df50-cce0-35ad-4b6ec6527321@leemhuis.info>

[Note: this mail contains only information for Linux kernel regression
tracking. Mails like these contain '#forregzbot' in the subject to make
then easy to spot and filter out. The author also tried to remove most
or all individuals from the list of recipients to spare them the hassle.]

Hi, this is your Linux kernel regression tracker.

On 24.12.22 20:02, Daniel Golle wrote:

>> [1/1] spi: mediatek: Enable irq when pdata is ready
>>       commit: c6f7874687f7027d7c4b2f53ff6e4d22850f915d
>>
> 
> Testing next-20221220 on the BananaPi BPi-R3 MT7986 board it turns
> out that this commit is *causing* a kernel oops and strack trace output
> actually quite similar to what is described in the commit message:

Thanks for the report. To be sure below issue doesn't fall through the
cracks unnoticed, I'm adding it to regzbot, my Linux kernel regression
tracking bot:

#regzbot ^introduced c6f7874687f7027d7c4b2f53ff6e4d228
#regzbot title spi: mediatek: oops due to race
#regzbot monitor:
https://lore.kernel.org/all/Y6hZA19rWuDkGJa2 at makrotopia.org/
#regzbot fix: spi: mediatek: Enable irq before the spi registration
#regzbot ignore-activity


Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)

P.S.: As the Linux kernel's regression tracker I deal with a lot of
reports and sometimes miss something important when writing mails like
this. If that's the case here, don't hesitate to tell me in a public
reply, it's in everyone's interest to set the public record straight.


From andrew at lunn.ch  Mon Dec 26 07:19:20 2022
From: andrew at lunn.ch (Andrew Lunn)
Date: Mon, 26 Dec 2022 16:19:20 +0100
Subject: [PATCH v5 1/2] stmmac: dwmac-mediatek: enable 2ns delay only for
 special cases
In-Reply-To: <4a82aa5437e496e2b65b77ef08d7897a4b23f7e5.camel@mediatek.com>
References: <20221223015029.24978-1-biao.huang@mediatek.com>
 <20221223015029.24978-2-biao.huang@mediatek.com>
 <Y6W4vwJHG+6PI8fd@lunn.ch>
 <4a82aa5437e496e2b65b77ef08d7897a4b23f7e5.camel@mediatek.com>
Message-ID: <Y6m7eNdWVL3IKFj2@lunn.ch>

> We don't want to restrict phy-mode to rgmii-id only, so I don't think
> we need mask RXID bit, then, User can use rgmii-rxid/-txid/-id as their
> will.

The phy-mode is a property of the board. It describes what delays are
required, in addition to what the board itself provides via extra long
lines. As such, there is no choice, it is set by physics.

How you implement those delays is then up to the MAC and PHY. 95% of
all MAC drivers simply pass phy-mode to the PHY and let the PHY add
the delays. The Renesas MAC driver is one of the exceptions, it often
adds the delays, and then passes a different phy-mode to the PHY in
order that there are not double delays.

So you can be different to everybody else, have MAC do one delay, and
the PHY do the other. Just be aware that nobody else does this, no DT
developers will expect it, etc.

Or you can just do what everybody else does and let the PHY add the
delays.

What some MACs do is implement rx-internal-delay-ps and
tx-internal-delay-ps These allow fine tuning of the delays. These are
expected to be small values, adding 10s or 100s of pico seconds. They
are not expected to be 2000ps.

    Andrew


From frank-w at public-files.de  Sun Dec 25 03:47:02 2022
From: frank-w at public-files.de (Frank Wunderlich)
Date: Sun, 25 Dec 2022 12:47:02 +0100
Subject: Aw: Re: [next v7 8/8] arm64: dts: mt7986: add Bananapi R3
In-Reply-To: <Y6dMWFy7gChG88j0@makrotopia.org>
References: <20221127114142.156573-1-linux@fw-web.de>
 <20221127114142.156573-9-linux@fw-web.de> <Y6dMWFy7gChG88j0@makrotopia.org>
Message-ID: <trinity-b51cbf64-8df3-4a0b-883a-dbb7443eb954-1671968822286@3c-app-gmx-bap38>

Hi

> Gesendet: Samstag, 24. Dezember 2022 um 20:00 Uhr
> Von: "Daniel Golle" <daniel at makrotopia.org>

> > --- /dev/null
> > +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso
> > @@ -0,0 +1,30 @@
> > +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> > +/*
> > + * Copyright (C) 2021 MediaTek Inc.
> > + * Author: Sam.Shih <sam.shih at mediatek.com>
> > + */
> > +
> > +/dts-v1/;
> > +/plugin/;
> > +
> > +/ {
> > +	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
> > +	model = "Bananapi BPI-R3 (emmc)";
>
> Why do you set the model string here?

seems to be a left over from testing where i wanted to see which base-dtb was
loaded without comparing mmc-node settings. Was easier to see with model-string :)

> > +
> > +	fragment at 0 {
> > +		target-path = "/soc/mmc at 11230000";
> > +		__overlay__ {
> > +			bus-width = <8>;
> > +			max-frequency = <200000000>;
> > +			cap-mmc-highspeed;
> > +			mmc-hs200-1_8v;
> > +			mmc-hs400-1_8v;
> > +			hs400-ds-delay = <0x14014>;
> > +			non-removable;
> > +			no-sd;
> > +			no-sdio;
> > +			status = "okay";
> > +		};
> > +	};
> > +};

> > diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
> > new file mode 100644
> > index 000000000000..618d3bb2f32f
> > --- /dev/null
> > +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts

> > +&mdio {
> > +	switch: switch at 31 {
> > +		compatible = "mediatek,mt7531";
> > +		reg = <31>;
> > +		reset-gpios = <&pio 5 GPIO_ACTIVE_HIGH>;
>
> Please add:
>
>                 interrupt-controller;
>                 #interrupt-cells = <1>;
>                 interrupt-parent = <&pio>;
>                 interrupts = <66 IRQ_TYPE_LEVEL_HIGH>;
>
> to have IRQ driven phy status instead of having to poll the link status
> of the 5x rj-45 ports.
> The value comes from schematics (pin AD24, GPIO66, 7531_INT) and I've
> tested this on my board.

ok, if you have it tested i add these properties in next version (and test it too).
I wait for tphy-binding to be applied to next (pcie and xhci already in torvalds/master).

> > +	};
> > +};
> > +

> > +&spi0 {
> > +	pinctrl-names = "default";
> > +	pinctrl-0 = <&spi_flash_pins>;
> > +	cs-gpios = <0>, <0>;
>
> I don't think those bogus cs-gpios here and for spi1 below are needed.

can drop them in next version

> > +	status = "okay";
> > +};
> > +
> > +&spi1 {
> > +	pinctrl-names = "default";
> > +	pinctrl-0 = <&spic_pins>;
> > +	cs-gpios = <0>, <0>;
> > +	status = "okay";
> > +};
> > +

regards Frank


From chunkuang.hu at kernel.org  Mon Dec 26 15:12:31 2022
From: chunkuang.hu at kernel.org (Chun-Kuang Hu)
Date: Tue, 27 Dec 2022 07:12:31 +0800
Subject: [PATCH v13,2/3] drm: mediatek: Set dpi format in mmsys
In-Reply-To: <1666577099-3859-3-git-send-email-xinlei.lee@mediatek.com>
References: <1666577099-3859-1-git-send-email-xinlei.lee@mediatek.com> <1666577099-3859-3-git-send-email-xinlei.lee@mediatek.com>
Message-ID: <CAAOTY_9QEZfQC=i_ZLMrQGs80BHbpv93H6bnsw6RkS4z7zXoGQ@mail.gmail.com>

Hi, Xinlei:

<xinlei.lee at mediatek.com> ? 2022?10?24? ?? ??10:05???
>
> From: Xinlei Lee <xinlei.lee at mediatek.com>
>
> Dpi output needs to adjust the output format to dual edge for MT8186.

Applied to mediatek-drm-next [1], thanks.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/chunkuang.hu/linux.git/log/?h=mediatek-drm-next

Regards,
Chun-Kuang.

>
> Co-developed-by: Jitao Shi <jitao.shi at mediatek.com>
> Signed-off-by: Jitao Shi <jitao.shi at mediatek.com>
> Signed-off-by: Xinlei Lee <xinlei.lee at mediatek.com>
> Reviewed-by: CK Hu <ck.hu at mediatek.com>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> Reviewed-by: N?colas F. R. A. Prado <nfraprado at collabora.com>
> ---
>  drivers/gpu/drm/mediatek/mtk_dpi.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
>
> diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c
> index 630a4e301ef6..ad87ecddf58d 100644
> --- a/drivers/gpu/drm/mediatek/mtk_dpi.c
> +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c
> @@ -15,6 +15,7 @@
>  #include <linux/of_graph.h>
>  #include <linux/pinctrl/consumer.h>
>  #include <linux/platform_device.h>
> +#include <linux/soc/mediatek/mtk-mmsys.h>
>  #include <linux/types.h>
>
>  #include <video/videomode.h>
> @@ -30,6 +31,7 @@
>  #include "mtk_disp_drv.h"
>  #include "mtk_dpi_regs.h"
>  #include "mtk_drm_ddp_comp.h"
> +#include "mtk_drm_drv.h"
>
>  enum mtk_dpi_out_bit_num {
>         MTK_DPI_OUT_BIT_NUM_8BITS,
> @@ -67,6 +69,7 @@ struct mtk_dpi {
>         struct drm_connector *connector;
>         void __iomem *regs;
>         struct device *dev;
> +       struct device *mmsys_dev;
>         struct clk *engine_clk;
>         struct clk *pixel_clk;
>         struct clk *tvd_clk;
> @@ -135,6 +138,7 @@ struct mtk_dpi_yc_limit {
>   * @yuv422_en_bit: Enable bit of yuv422.
>   * @csc_enable_bit: Enable bit of CSC.
>   * @pixels_per_iter: Quantity of transferred pixels per iteration.
> + * @edge_cfg_in_mmsys: If the edge configuration for DPI's output needs to be set in MMSYS.
>   */
>  struct mtk_dpi_conf {
>         unsigned int (*cal_factor)(int clock);
> @@ -153,6 +157,7 @@ struct mtk_dpi_conf {
>         u32 yuv422_en_bit;
>         u32 csc_enable_bit;
>         u32 pixels_per_iter;
> +       bool edge_cfg_in_mmsys;
>  };
>
>  static void mtk_dpi_mask(struct mtk_dpi *dpi, u32 offset, u32 val, u32 mask)
> @@ -449,8 +454,12 @@ static void mtk_dpi_dual_edge(struct mtk_dpi *dpi)
>                 mtk_dpi_mask(dpi, DPI_OUTPUT_SETTING,
>                              dpi->output_fmt == MEDIA_BUS_FMT_RGB888_2X12_LE ?
>                              EDGE_SEL : 0, EDGE_SEL);
> +               if (dpi->conf->edge_cfg_in_mmsys)
> +                       mtk_mmsys_ddp_dpi_fmt_config(dpi->mmsys_dev, MTK_DPI_RGB888_DDR_CON);
>         } else {
>                 mtk_dpi_mask(dpi, DPI_DDR_SETTING, DDR_EN | DDR_4PHASE, 0);
> +               if (dpi->conf->edge_cfg_in_mmsys)
> +                       mtk_mmsys_ddp_dpi_fmt_config(dpi->mmsys_dev, MTK_DPI_RGB888_SDR_CON);
>         }
>  }
>
> @@ -778,8 +787,10 @@ static int mtk_dpi_bind(struct device *dev, struct device *master, void *data)
>  {
>         struct mtk_dpi *dpi = dev_get_drvdata(dev);
>         struct drm_device *drm_dev = data;
> +       struct mtk_drm_private *priv = drm_dev->dev_private;
>         int ret;
>
> +       dpi->mmsys_dev = priv->mmsys_dev;
>         ret = drm_simple_encoder_init(drm_dev, &dpi->encoder,
>                                       DRM_MODE_ENCODER_TMDS);
>         if (ret) {
> --
> 2.18.0
>


From chunkuang.hu at kernel.org  Mon Dec 26 15:24:02 2022
From: chunkuang.hu at kernel.org (Chun-Kuang Hu)
Date: Tue, 27 Dec 2022 07:24:02 +0800
Subject: [PATCH v13,3/3] drm: mediatek: Add mt8186 dpi compatibles and
 platform data
In-Reply-To: <1666577099-3859-4-git-send-email-xinlei.lee@mediatek.com>
References: <1666577099-3859-1-git-send-email-xinlei.lee@mediatek.com> <1666577099-3859-4-git-send-email-xinlei.lee@mediatek.com>
Message-ID: <CAAOTY_-zjX7ZJrwm_BsoFZcqfGW5+P7G_bgn1VrK0i3VLptvvg@mail.gmail.com>

Hi, Xinlei:

<xinlei.lee at mediatek.com> ? 2022?10?24? ?? ??10:05???
>
> From: Xinlei Lee <xinlei.lee at mediatek.com>
>
> Add the compatible because use edge_cfg_in_mmsys in mt8186.

Applied to mediatek-drm-next [1], thanks.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/chunkuang.hu/linux.git/log/?h=mediatek-drm-next

Regards,
Chun-Kuang.

>
> Signed-off-by: Xinlei Lee <xinlei.lee at mediatek.com>
> Reviewed-by: CK Hu <ck.hu at mediatek.com>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> Reviewed-by: N?colas F. R. A. Prado <nfraprado at collabora.com>
> ---
>  drivers/gpu/drm/mediatek/mtk_dpi.c     | 21 +++++++++++++++++++++
>  drivers/gpu/drm/mediatek/mtk_drm_drv.c |  2 ++
>  2 files changed, 23 insertions(+)
>
> diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c
> index ad87ecddf58d..325032fd5343 100644
> --- a/drivers/gpu/drm/mediatek/mtk_dpi.c
> +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c
> @@ -941,6 +941,24 @@ static const struct mtk_dpi_conf mt8183_conf = {
>         .csc_enable_bit = CSC_ENABLE,
>  };
>
> +static const struct mtk_dpi_conf mt8186_conf = {
> +       .cal_factor = mt8183_calculate_factor,
> +       .reg_h_fre_con = 0xe0,
> +       .max_clock_khz = 150000,
> +       .output_fmts = mt8183_output_fmts,
> +       .num_output_fmts = ARRAY_SIZE(mt8183_output_fmts),
> +       .edge_cfg_in_mmsys = true,
> +       .pixels_per_iter = 1,
> +       .is_ck_de_pol = true,
> +       .swap_input_support = true,
> +       .support_direct_pin = true,
> +       .dimension_mask = HPW_MASK,
> +       .hvsize_mask = HSIZE_MASK,
> +       .channel_swap_shift = CH_SWAP,
> +       .yuv422_en_bit = YUV422_EN,
> +       .csc_enable_bit = CSC_ENABLE,
> +};
> +
>  static const struct mtk_dpi_conf mt8192_conf = {
>         .cal_factor = mt8183_calculate_factor,
>         .reg_h_fre_con = 0xe0,
> @@ -1091,6 +1109,9 @@ static const struct of_device_id mtk_dpi_of_ids[] = {
>         { .compatible = "mediatek,mt8183-dpi",
>           .data = &mt8183_conf,
>         },
> +       { .compatible = "mediatek,mt8186-dpi",
> +         .data = &mt8186_conf,
> +       },
>         { .compatible = "mediatek,mt8192-dpi",
>           .data = &mt8192_conf,
>         },
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index 546b79412815..3d32fbc66ac1 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -646,6 +646,8 @@ static const struct of_device_id mtk_ddp_comp_dt_ids[] = {
>           .data = (void *)MTK_DPI },
>         { .compatible = "mediatek,mt8183-dpi",
>           .data = (void *)MTK_DPI },
> +       { .compatible = "mediatek,mt8186-dpi",
> +         .data = (void *)MTK_DPI },
>         { .compatible = "mediatek,mt8192-dpi",
>           .data = (void *)MTK_DPI },
>         { .compatible = "mediatek,mt8195-dp-intf",
> --
> 2.18.0
>


From morrownr at gmail.com  Mon Dec 26 15:26:20 2022
From: morrownr at gmail.com (Nick Morrow)
Date: Mon, 26 Dec 2022 17:26:20 -0600
Subject: [bug report} wifi: mt76: mt7612u/mt7610u - 6.1.x hard locking systems
In-Reply-To: <Y6Y3wzSxbTG2aLAo@localhost.localdomain>
References: <CAFktD2fRnSbNgWRRoGbQzG5_Mw7=zFJKTVBHS_3D+mNUYcv9hQ@mail.gmail.com>
 <Y6Y3wzSxbTG2aLAo@localhost.localdomain>
Message-ID: <CAFktD2fbpUv9X5MY1jozyXoxvNXW=4OfaJ3B1KcZtdrBfiG4NA@mail.gmail.com>

> > Starting with kernel 6.1 rc1, mt7612u and mt7610u are hard locking
> > systems when connection is established. From a report this morning:
> >
> > "So I'm using a MT7610U based adapter and updated to 6.1.1 in Arch
> > Linux and it's a complete lockup a few seconds after connecting as
> > other people have said, I'll use the LTS kernel (5.15) in the
> > meanwhile but this is probably going to get a lot of people that use
> > distros with newer kernels."
> >
> > Background: Problem first discovered with kernel 6.1 rc1. Bug report
> > was seen on linux-wireless around the rc5 timeframe. This is an
> > additional bug report.
> >
> > I don't think additional info is needed as I have tested on several
> > distros with various RC's of 6.1 and the problem is 100% reproducible
> > and unavoidable. This is a show stopper bug and will result in
> > widespread reports as distros upgrade to kernel 6.1.
> >
> > Regards,
>
> Hi Nick,
>
> Can you please try the patch below?
> https://patchwork.kernel.org/project/linux-wireless/patch/20221217085624.52077-1-nbd at nbd.name/
>
> Regards,
> Lorenzo

Lorenzo,

Today, I downloaded kernel 6.1.1, applied the above patch and
compiled. Once installed, I tested with an Alfa ACM mt7612u based
adapter. I no longer see the problem. No system lockups at all. iperf3
is showing a consistent performance of around 387 Mb/s. dmesg is
clean. The patch appears to have fixed the issue. I can also test with
a mt7610u based adapter if you think it is necessary but since that
patch was not to mt76, I decided testing only with the mt7612u adapter
was probably good enough. Let me know if there is anything else I can
do.

Nick
https://github.com/morrownr/USB-WiFi


From Nancy.Lin at mediatek.com  Mon Dec 26 23:54:15 2022
From: Nancy.Lin at mediatek.com (=?utf-8?B?TmFuY3kgTGluICjmnpfmrKPonqIp?=)
Date: Tue, 27 Dec 2022 07:54:15 +0000
Subject: [PATCH v28 05/11] soc: mediatek: refine code to use
 mtk_mmsys_update_bits API
In-Reply-To: <CAGXv+5Hj-H6Q3N+j2tEntd9M=9p0o7TxWYn_4aawhqFUbX7+PQ@mail.gmail.com>
References: <20221107072243.15748-1-nancy.lin@mediatek.com>
	 <20221107072243.15748-6-nancy.lin@mediatek.com>
	 <CAGXv+5Hj-H6Q3N+j2tEntd9M=9p0o7TxWYn_4aawhqFUbX7+PQ@mail.gmail.com>
Message-ID: <2c88e8f6327475539a1c6a8d9d8679c08efc2a85.camel@mediatek.com>

Dear Chen-Yu,

Sorry for late response and thanks for the review.

On Thu, 2022-12-01 at 19:44 +0800, Chen-Yu Tsai wrote:
> On Mon, Nov 7, 2022 at 3:23 PM Nancy.Lin <nancy.lin at mediatek.com>
> wrote:
> > 
> > Simplify code for update  mmsys reg.
> > 
> > Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
> > Reviewed-by: AngeloGioacchino Del Regno <
> > angelogioacchino.delregno at collabora.com>
> > Reviewed-by: CK Hu <ck.hu at mediatek.com>
> > Tested-by: AngeloGioacchino Del Regno <
> > angelogioacchino.delregno at collabora.com>
> > Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
> > Reviewed-by: N?colas F. R. A. Prado <nfraprado at collabora.com>
> > ---
> >  drivers/soc/mediatek/mtk-mmsys.c | 45 ++++++++++++--------------
> > ------
> >  1 file changed, 16 insertions(+), 29 deletions(-)
> > 
> > diff --git a/drivers/soc/mediatek/mtk-mmsys.c
> > b/drivers/soc/mediatek/mtk-mmsys.c
> > index 9a327eb5d9d7..73c8bd27e6ae 100644
> > --- a/drivers/soc/mediatek/mtk-mmsys.c
> > +++ b/drivers/soc/mediatek/mtk-mmsys.c
> 
> [...]
> 
> > @@ -124,27 +129,14 @@ void mtk_mmsys_ddp_disconnect(struct device
> > *dev,
> >  {
> >         struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
> >         const struct mtk_mmsys_routes *routes = mmsys->data-
> > >routes;
> > -       u32 reg;
> >         int i;
> > 
> >         for (i = 0; i < mmsys->data->num_routes; i++)
> > -               if (cur == routes[i].from_comp && next ==
> > routes[i].to_comp) {
> > -                       reg = readl_relaxed(mmsys->regs +
> > routes[i].addr);
> > -                       reg &= ~routes[i].mask;
> > -                       writel_relaxed(reg, mmsys->regs +
> > routes[i].addr);
> > -               }
> > +               if (cur == routes[i].from_comp && next ==
> > routes[i].to_comp)
> > +                       mtk_mmsys_update_bits(mmsys,
> > routes[i].addr, routes[i].mask, 0);
> >  }
> >  EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_disconnect);
> > 
> > -static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32
> > offset, u32 mask, u32 val)
> > -{
> > -       u32 tmp;
> > -
> > -       tmp = readl_relaxed(mmsys->regs + offset);
> > -       tmp = (tmp & ~mask) | val;
> > -       writel_relaxed(tmp, mmsys->regs + offset);
> > -}
> > -
> >  void mtk_mmsys_ddp_dpi_fmt_config(struct device *dev, u32 val)
> >  {
> >         if (val)
> 
> This hunk now doesn't apply due to
> 
>     soc: mediatek: Add all settings to mtk_mmsys_ddp_dpi_fmt_config
> func
> 
> touching mtk_mmsys_ddp_dpi_fmt_config() as well. It's trivial to
> resolve
> though.
> 
> ChenYu

I will update next revision base on next-20221226 which include the
patch you mentioned.

Regards,
Nancy

From Biao.Huang at mediatek.com  Mon Dec 26 23:09:11 2022
From: Biao.Huang at mediatek.com (=?utf-8?B?QmlhbyBIdWFuZyAo6buE5b2qKQ==?=)
Date: Tue, 27 Dec 2022 07:09:11 +0000
Subject: [PATCH v5 1/2] stmmac: dwmac-mediatek: enable 2ns delay only for
 special cases
In-Reply-To: <Y6m7eNdWVL3IKFj2@lunn.ch>
References: <20221223015029.24978-1-biao.huang@mediatek.com>
	 <20221223015029.24978-2-biao.huang@mediatek.com> <Y6W4vwJHG+6PI8fd@lunn.ch>
	 <4a82aa5437e496e2b65b77ef08d7897a4b23f7e5.camel@mediatek.com>
	 <Y6m7eNdWVL3IKFj2@lunn.ch>
Message-ID: <5baa7c88716042421b0dd1d579c6aa70d253a546.camel@mediatek.com>

Dear Andrew,
	Thanks for your comments~

On Mon, 2022-12-26 at 16:19 +0100, Andrew Lunn wrote:
> > We don't want to restrict phy-mode to rgmii-id only, so I don't
> > think
> > we need mask RXID bit, then, User can use rgmii-rxid/-txid/-id as
> > their
> > will.
> 
> The phy-mode is a property of the board. It describes what delays are
> required, in addition to what the board itself provides via extra
> long
> lines. As such, there is no choice, it is set by physics.
> 
> How you implement those delays is then up to the MAC and PHY. 95% of
> all MAC drivers simply pass phy-mode to the PHY and let the PHY add
> the delays. The Renesas MAC driver is one of the exceptions, it often
> adds the delays, and then passes a different phy-mode to the PHY in
> order that there are not double delays.
> 
> So you can be different to everybody else, have MAC do one delay, and
> the PHY do the other. Just be aware that nobody else does this, no DT
> developers will expect it, etc.
> 
> Or you can just do what everybody else does and let the PHY add the
> delays.
> 
> What some MACs do is implement rx-internal-delay-ps and
> tx-internal-delay-ps These allow fine tuning of the delays. These are
> expected to be small values, adding 10s or 100s of pico seconds. They
> are not expected to be 2000ps.
OK, as to this series, Is the following modification enough?
    1. phy-mode = rgmii-id;  in dts.
    2. remove the fix_mac_speed() in driver.
> 
>     Andrew
Best Regards!
Biao

From nancy.lin at mediatek.com  Tue Dec 27 00:04:33 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:33 +0800
Subject: [PATCH v29 01/11] dt-bindings: arm: mediatek: mmsys: add vdosys1 compatible for MT8195
In-Reply-To: <20221227080443.6273-1-nancy.lin@mediatek.com>
References: <20221227080443.6273-1-nancy.lin@mediatek.com>
Message-ID: <20221227080443.6273-2-nancy.lin@mediatek.com>

Add vdosys1 mmsys compatible for MT8195 platform.

For MT8195, VDOSYS0 and VDOSYS1 are 2 display HW pipelines binding to
2 different power domains, different clock drivers and different
mediatek-drm drivers.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: N?colas F. R. A. Prado <nfraprado at collabora.com>
---
 .../devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml      | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
index 0711f1834fbd..242ce5a69432 100644
--- a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
+++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
@@ -52,6 +52,10 @@ properties:
           - const: mediatek,mt8195-mmsys
           - const: syscon
 
+      - items:
+          - const: mediatek,mt8195-vdosys1
+          - const: syscon
+
   reg:
     maxItems: 1
 
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:04:32 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:32 +0800
Subject: [PATCH v29 00/11] Add MediaTek SoC(vdosys1) support for mt8195
Message-ID: <20221227080443.6273-1-nancy.lin@mediatek.com>

The hardware path of vdosys1 with DPTx output need to go through by several modules, such as, OVL_ADAPTOR and MERGE.

Add mmsys and mutex modules support by the patches below:

Changes in v29:
- rebase to next-20221226
- fix reviewer comment in v28
  - fix mmsys binding doc for vdosys1 

Changes in v28:
- rebase to next-20221107
- fix reviewer comment in v27
  - remove change id
  - fix mmsys config api typo

Changes in v27:
- rebase to next-20221102
- change mmsys compatible for mt8195 vdosys1
  - base on jason's series[ref 1]
- fix reviewer comment
  - only register mmsys reset controller if num_resets > 0

Changes in v26:
- fix reviewer comment
  - set mmsys num_resets to 32 for 8192
- rebase to next-20220819

Changes in v25:
- fix reviewer comment
  - refine mtk_mmsys_reset_update func
- rebase to next-20220708

Changes in v24:
- fix reviewer comment
  - refine mtk_mmsys_reset_update func
- rebase to next-20220622

Changes in v23:
- separate[7] mmsys/mutex and drm patches into two series

Changes in v22:
- rebase to next-20220525
- rebase to vdosys0 series v22
- separate dts to a new patch

Changes in v21:
- fix reviewer comment
  - fix rdma and ethdr binding doc and dts

Changes in v20:
- fix reviewer comment
  - update mmsys update bit api name
  - add mtk_mmsys_update_bits error message if lose gce property
  - list all mt8195 vdosys1 reset bits

Changes in v19:
- fix reviewer comment
  - separate mt8195 mmsys component to a new patch
  - separate mt8195 vdo0 and vdo1 routing table
  - separate mmsys_write_reg api to a new patch and simplify write reg code
  - separate mmsys 64 bit reset to a new patch
  - separate mtk-mutex dp_intf1 component to a new patch

Changes in v18:
- fix reviewer comment
  - fix rdma binding doc
  - fix ethdr binding doc
  - refine mmsys config cmdq support
  - refine merge reset control flow, get reset control in probe function
  - add ethdr reset control error handling and remove dbg log
- rebase to vdosys0 series v20 (ref [5])

Changes in v17:
- fix reviewer comment in v16
  - separate ovl adaptor comp in mtk-mmsys and mtk-mutex
  - separate mmsys config API
  - move mdp_rdma binding yaml
- fix ovl adaptor pm runtime get sync timing issue
- rebase to vdosys0 series v19 (ref [5])
- rebase to [7] for modify vblank register change

Changes in v16:
- fix reviewer comment in v 15
  - fix mtk_drm_ddp_comp.c alignment
  - fix vdosys0 mmsys num before adding vdosys1 patch

Changes in v15:
- fix ethdr uppercase hex number in dts

Changes in v14:
- remove MTK_MMSYS 64 bit dependency
- add ethdr.yaml back and fix dt_schema check fail

Resend v13
- add related maintainer in maillist

Changes in v13:
- fix reviewer comment in v12
  - fix rdma dt-binding format
  - fix dts node naming
- fix 32 bit build error
  - modify 64bit dependency for mtk-mmsys
- rebase to vdosys0 series v16. (ref [5])

Changes in v12:
- fix reviewer comment in v11
  - modify mbox index
  - refine dma dev for ovl_adaptor sub driver

Changes in v11:
- remove ethdr vblank spin lock
- refine ovl_adaptor print message

Changes in v10:
- refine ethdr reset control using devm_reset_control_array_get_optional_exclusive
- fix ovl_adaptor mtk_ovl_adaptor_clk_enable error handle issue

Changes in v9:
- rebase on kernel-5.16-rc1
- rebase on vdosys0 series v13. (ref [5])
- fix ovl_adaptor sub driver is brought up unintentionally
- fix clang build test fail- duplicate ethdr/mdp_rdma init_module/cleanup_module symbol issue 

Changes in v8:
- separate merge async reset to new patch.
- separate drm ovl_adaptor sub driver to new patch.
- fix reviewer comment in v7.

Changes in v7:
- rebase on vdosys0 series v12 (ref[5])
- add dma description in ethdr binding document.
- refine vdosys1 bit definition of mmsys routing table.
- separate merge modification into 3 pathces.
- separate mutex modification into 2 patches.
- add plane color coding for mdp_rdma csc.
- move mdp_rdma pm control to ovl_adaptor.
- fix reviewer comment in v6.

Changes in v6:
- rebase on kernel-5.15-rc1.
- change mbox label to gce0 for dts node of vdosys1.
- modify mmsys reset num for mt8195.
- rebase on vdosys0 series v10. (ref [5])
- use drm to bring up ovl_adaptor driver.
- move drm iommu/mutex check from kms init to drm bind.
- modify rdma binding doc location. (Documentation/devicetree/bindings/arm/)
- modify for reviewer's comment in v5.

Changes in v5:
- add mmsys reset controller reference.

Changes in v4:
- use merge common driver for merge1~4.
- refine ovl_adaptor rdma driver.
- use ovl_adaptor ddp_comp function instead of ethdr.
- modify for reviewer's comment in v3.

Changes in v3:
- modify for reviewer's comment in v2.
- add vdosys1 2 pixels align limit.
- add mixer odd offset support.

Changes in v2:
- Merge PSEUDO_OVL and ETHDR into one DRM component.
- Add mmsys config API for vdosys1 hardware setting.
- Add mmsys reset control using linux reset framework.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>

This series are based on the following patch:
[1] Change mmsys compatible for mt8195 mediatek-drm
    20221126101220.18179-1-jason-jh.lin at mediatek.com

Nancy.Lin (11):
  dt-bindings: arm: mediatek: mmsys: add vdosys1 compatible for MT8195
  dt-bindings: reset: mt8195: add vdosys1 reset control bit
  soc: mediatek: add mtk-mmsys ethdr and mdp_rdma components
  soc: mediatek: add mtk-mmsys support for mt8195 vdosys1
  soc: mediatek: refine code to use mtk_mmsys_update_bits API
  soc: mediatek: add mtk-mmsys config API for mt8195 vdosys1
  soc: mediatek: add cmdq support of mtk-mmsys config API for mt8195
    vdosys1
  soc: mediatek: mmsys: add mmsys for support 64 reset bits
  soc: mediatek: mmsys: add reset control for MT8195 vdosys1
  soc: mediatek: add mtk-mutex component - dp_intf1
  soc: mediatek: add mtk-mutex support for mt8195 vdosys1

 .../bindings/arm/mediatek/mediatek,mmsys.yaml |   4 +
 drivers/soc/mediatek/mt8195-mmsys.h           | 146 +++++++++++++++++
 drivers/soc/mediatek/mtk-mmsys.c              | 149 +++++++++++++-----
 drivers/soc/mediatek/mtk-mmsys.h              |   1 +
 drivers/soc/mediatek/mtk-mutex.c              |  37 +++++
 include/dt-bindings/reset/mt8195-resets.h     |  45 ++++++
 include/linux/soc/mediatek/mtk-mmsys.h        |  25 +++
 7 files changed, 369 insertions(+), 38 deletions(-)

-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:04:43 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:43 +0800
Subject: [PATCH v29 11/11] soc: mediatek: add mtk-mutex support for mt8195 vdosys1
In-Reply-To: <20221227080443.6273-1-nancy.lin@mediatek.com>
References: <20221227080443.6273-1-nancy.lin@mediatek.com>
Message-ID: <20221227080443.6273-12-nancy.lin@mediatek.com>

Add mtk-mutex support for mt8195 vdosys1.
The vdosys1 path component contains ovl_adaptor, merge5,
and dp_intf1. Ovl_adaptor is composed of several sub-elements
which include MDP_RDMA0~7, MERGE0~3, and ETHDR.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
---
 drivers/soc/mediatek/mtk-mutex.c | 33 ++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/drivers/soc/mediatek/mtk-mutex.c b/drivers/soc/mediatek/mtk-mutex.c
index 41cba6aa0e83..8d0eb70690e5 100644
--- a/drivers/soc/mediatek/mtk-mutex.c
+++ b/drivers/soc/mediatek/mtk-mutex.c
@@ -130,6 +130,24 @@
 #define MT8195_MUTEX_MOD_DISP_DP_INTF0		21
 #define MT8195_MUTEX_MOD_DISP_PWM0		27
 
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA0	0
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA1	1
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA2	2
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA3	3
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA4	4
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA5	5
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA6	6
+#define MT8195_MUTEX_MOD_DISP1_MDP_RDMA7	7
+#define MT8195_MUTEX_MOD_DISP1_VPP_MERGE0	8
+#define MT8195_MUTEX_MOD_DISP1_VPP_MERGE1	9
+#define MT8195_MUTEX_MOD_DISP1_VPP_MERGE2	10
+#define MT8195_MUTEX_MOD_DISP1_VPP_MERGE3	11
+#define MT8195_MUTEX_MOD_DISP1_VPP_MERGE4	12
+#define MT8195_MUTEX_MOD_DISP1_DISP_MIXER	18
+#define MT8195_MUTEX_MOD_DISP1_DPI0		25
+#define MT8195_MUTEX_MOD_DISP1_DPI1		26
+#define MT8195_MUTEX_MOD_DISP1_DP_INTF0		27
+
 #define MT8365_MUTEX_MOD_DISP_OVL0		7
 #define MT8365_MUTEX_MOD_DISP_OVL0_2L		8
 #define MT8365_MUTEX_MOD_DISP_RDMA0		9
@@ -372,6 +390,21 @@ static const unsigned int mt8195_mutex_mod[DDP_COMPONENT_ID_MAX] = {
 	[DDP_COMPONENT_DSI0] = MT8195_MUTEX_MOD_DISP_DSI0,
 	[DDP_COMPONENT_PWM0] = MT8195_MUTEX_MOD_DISP_PWM0,
 	[DDP_COMPONENT_DP_INTF0] = MT8195_MUTEX_MOD_DISP_DP_INTF0,
+	[DDP_COMPONENT_MDP_RDMA0] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA0,
+	[DDP_COMPONENT_MDP_RDMA1] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA1,
+	[DDP_COMPONENT_MDP_RDMA2] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA2,
+	[DDP_COMPONENT_MDP_RDMA3] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA3,
+	[DDP_COMPONENT_MDP_RDMA4] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA4,
+	[DDP_COMPONENT_MDP_RDMA5] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA5,
+	[DDP_COMPONENT_MDP_RDMA6] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA6,
+	[DDP_COMPONENT_MDP_RDMA7] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA7,
+	[DDP_COMPONENT_MERGE1] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE0,
+	[DDP_COMPONENT_MERGE2] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE1,
+	[DDP_COMPONENT_MERGE3] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE2,
+	[DDP_COMPONENT_MERGE4] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE3,
+	[DDP_COMPONENT_ETHDR_MIXER] = MT8195_MUTEX_MOD_DISP1_DISP_MIXER,
+	[DDP_COMPONENT_MERGE5] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE4,
+	[DDP_COMPONENT_DP_INTF1] = MT8195_MUTEX_MOD_DISP1_DP_INTF0,
 };
 
 static const unsigned int mt8365_mutex_mod[DDP_COMPONENT_ID_MAX] = {
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:04:41 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:41 +0800
Subject: [PATCH v29 09/11] soc: mediatek: mmsys: add reset control for MT8195 vdosys1
In-Reply-To: <20221227080443.6273-1-nancy.lin@mediatek.com>
References: <20221227080443.6273-1-nancy.lin@mediatek.com>
Message-ID: <20221227080443.6273-10-nancy.lin@mediatek.com>

MT8195 vdosys1 has more than 32 reset bits and a different reset base
than other chips. Add the number of reset bits and reset base in mmsys
private data.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
---
 drivers/soc/mediatek/mt8195-mmsys.h | 1 +
 drivers/soc/mediatek/mtk-mmsys.c    | 2 ++
 2 files changed, 3 insertions(+)

diff --git a/drivers/soc/mediatek/mt8195-mmsys.h b/drivers/soc/mediatek/mt8195-mmsys.h
index 454944a9409c..a6652ae63431 100644
--- a/drivers/soc/mediatek/mt8195-mmsys.h
+++ b/drivers/soc/mediatek/mt8195-mmsys.h
@@ -75,6 +75,7 @@
 #define MT8195_SOUT_DSC_WRAP1_OUT_TO_SINA_VIRTUAL0		(2 << 16)
 #define MT8195_SOUT_DSC_WRAP1_OUT_TO_VPP_MERGE			(3 << 16)
 
+#define MT8195_VDO1_SW0_RST_B					0x1d0
 #define MT8195_VDO1_MERGE0_ASYNC_CFG_WD				0xe30
 #define MT8195_VDO1_HDRBE_ASYNC_CFG_WD				0xe70
 #define MT8195_VDO1_HDR_TOP_CFG					0xd00
diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index 02d08f85cc1c..dc36625cd2b8 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -90,6 +90,8 @@ static const struct mtk_mmsys_driver_data mt8195_vdosys1_driver_data = {
 	.clk_driver = "clk-mt8195-vdo1",
 	.routes = mmsys_mt8195_vdo1_routing_table,
 	.num_routes = ARRAY_SIZE(mmsys_mt8195_vdo1_routing_table),
+	.sw0_rst_offset = MT8195_VDO1_SW0_RST_B,
+	.num_resets = 64,
 };
 
 static const struct mtk_mmsys_driver_data mt8365_mmsys_driver_data = {
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:04:40 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:40 +0800
Subject: [PATCH v29 08/11] soc: mediatek: mmsys: add mmsys for support 64 reset bits
In-Reply-To: <20221227080443.6273-1-nancy.lin@mediatek.com>
References: <20221227080443.6273-1-nancy.lin@mediatek.com>
Message-ID: <20221227080443.6273-9-nancy.lin@mediatek.com>

Add mmsys for support 64 reset bits. It is a preparation for MT8195
vdosys1 HW reset. MT8195 vdosys1 has more than 32 reset bits.

1. Add the number of reset bits in mmsys private data
2. move the whole "reset register code section" behind the
"get mmsys->data" code section for getting the num_resets in mmsys->data.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
Reviewed-by: N?colas F. R. A. Prado <nfraprado at collabora.com>
---
 drivers/soc/mediatek/mtk-mmsys.c | 40 +++++++++++++++++++++-----------
 drivers/soc/mediatek/mtk-mmsys.h |  1 +
 2 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index 3383567219f8..02d08f85cc1c 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -20,6 +20,8 @@
 #include "mt8195-mmsys.h"
 #include "mt8365-mmsys.h"
 
+#define MMSYS_SW_RESET_PER_REG 32
+
 static const struct mtk_mmsys_driver_data mt2701_mmsys_driver_data = {
 	.clk_driver = "clk-mt2701-mm",
 	.routes = mmsys_default_routing_table,
@@ -51,6 +53,7 @@ static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = {
 	.routes = mmsys_default_routing_table,
 	.num_routes = ARRAY_SIZE(mmsys_default_routing_table),
 	.sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
+	.num_resets = 32,
 };
 
 static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = {
@@ -58,6 +61,7 @@ static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = {
 	.routes = mmsys_mt8183_routing_table,
 	.num_routes = ARRAY_SIZE(mmsys_mt8183_routing_table),
 	.sw0_rst_offset = MT8183_MMSYS_SW0_RST_B,
+	.num_resets = 32,
 };
 
 static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {
@@ -65,6 +69,7 @@ static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {
 	.routes = mmsys_mt8186_routing_table,
 	.num_routes = ARRAY_SIZE(mmsys_mt8186_routing_table),
 	.sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
+	.num_resets = 32,
 };
 
 static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
@@ -72,6 +77,7 @@ static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
 	.routes = mmsys_mt8192_routing_table,
 	.num_routes = ARRAY_SIZE(mmsys_mt8192_routing_table),
 	.sw0_rst_offset = MT8186_MMSYS_SW0_RST_B,
+	.num_resets = 32,
 };
 
 static const struct mtk_mmsys_driver_data mt8195_vdosys0_driver_data = {
@@ -221,13 +227,19 @@ static int mtk_mmsys_reset_update(struct reset_controller_dev *rcdev, unsigned l
 {
 	struct mtk_mmsys *mmsys = container_of(rcdev, struct mtk_mmsys, rcdev);
 	unsigned long flags;
+	u32 offset;
+	u32 reg;
+
+	offset = (id / MMSYS_SW_RESET_PER_REG) * sizeof(u32);
+	id = id % MMSYS_SW_RESET_PER_REG;
+	reg = mmsys->data->sw0_rst_offset + offset;
 
 	spin_lock_irqsave(&mmsys->lock, flags);
 
 	if (assert)
-		mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), 0, NULL);
+		mtk_mmsys_update_bits(mmsys, reg, BIT(id), 0, NULL);
 	else
-		mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), BIT(id), NULL);
+		mtk_mmsys_update_bits(mmsys, reg, BIT(id), BIT(id), NULL);
 
 	spin_unlock_irqrestore(&mmsys->lock, flags);
 
@@ -282,20 +294,22 @@ static int mtk_mmsys_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	spin_lock_init(&mmsys->lock);
+	mmsys->data = of_device_get_match_data(&pdev->dev);
 
-	mmsys->rcdev.owner = THIS_MODULE;
-	mmsys->rcdev.nr_resets = 32;
-	mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
-	mmsys->rcdev.of_node = pdev->dev.of_node;
-	ret = devm_reset_controller_register(&pdev->dev, &mmsys->rcdev);
-	if (ret) {
-		dev_err(&pdev->dev, "Couldn't register mmsys reset controller: %d\n", ret);
-		return ret;
+	if (mmsys->data->num_resets > 0) {
+		spin_lock_init(&mmsys->lock);
+
+		mmsys->rcdev.owner = THIS_MODULE;
+		mmsys->rcdev.nr_resets = mmsys->data->num_resets;
+		mmsys->rcdev.ops = &mtk_mmsys_reset_ops;
+		mmsys->rcdev.of_node = pdev->dev.of_node;
+		ret = devm_reset_controller_register(&pdev->dev, &mmsys->rcdev);
+		if (ret) {
+			dev_err(&pdev->dev, "Couldn't register mmsys reset controller: %d\n", ret);
+			return ret;
+		}
 	}
 
-	mmsys->data = of_device_get_match_data(&pdev->dev);
-
 #if IS_REACHABLE(CONFIG_MTK_CMDQ)
 	ret = cmdq_dev_get_client_reg(dev, &mmsys->cmdq_base, 0);
 	if (ret)
diff --git a/drivers/soc/mediatek/mtk-mmsys.h b/drivers/soc/mediatek/mtk-mmsys.h
index 77f37f8c715b..e19994749adb 100644
--- a/drivers/soc/mediatek/mtk-mmsys.h
+++ b/drivers/soc/mediatek/mtk-mmsys.h
@@ -91,6 +91,7 @@ struct mtk_mmsys_driver_data {
 	const struct mtk_mmsys_routes *routes;
 	const unsigned int num_routes;
 	const u16 sw0_rst_offset;
+	const u32 num_resets;
 };
 
 /*
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:10:06 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:10:06 +0800
Subject: [PATCH v29 2/7] drm/mediatek: add ETHDR support for MT8195
In-Reply-To: <20221227081011.6426-1-nancy.lin@mediatek.com>
References: <20221227081011.6426-1-nancy.lin@mediatek.com>
Message-ID: <20221227081011.6426-3-nancy.lin@mediatek.com>

ETHDR is a part of ovl_adaptor.
ETHDR is designed for HDR video and graphics conversion in the external
display path. It handles multiple HDR input types and performs tone
mapping, color space/color format conversion, and then combine
different layers, output the required HDR or SDR signal to the
subsequent display path.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: Chun-Kuang Hu <chunkuang.hu at kernel.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
---
 drivers/gpu/drm/mediatek/Makefile      |   1 +
 drivers/gpu/drm/mediatek/mtk_drm_drv.c |   1 +
 drivers/gpu/drm/mediatek/mtk_drm_drv.h |   1 +
 drivers/gpu/drm/mediatek/mtk_ethdr.c   | 370 +++++++++++++++++++++++++
 drivers/gpu/drm/mediatek/mtk_ethdr.h   |  25 ++
 5 files changed, 398 insertions(+)
 create mode 100644 drivers/gpu/drm/mediatek/mtk_ethdr.c
 create mode 100644 drivers/gpu/drm/mediatek/mtk_ethdr.h

diff --git a/drivers/gpu/drm/mediatek/Makefile b/drivers/gpu/drm/mediatek/Makefile
index 3517d1c65cd7..840f14436d3c 100644
--- a/drivers/gpu/drm/mediatek/Makefile
+++ b/drivers/gpu/drm/mediatek/Makefile
@@ -14,6 +14,7 @@ mediatek-drm-y := mtk_disp_aal.o \
 		  mtk_drm_plane.o \
 		  mtk_dsi.o \
 		  mtk_dpi.o \
+		  mtk_ethdr.o \
 		  mtk_mdp_rdma.o
 
 obj-$(CONFIG_DRM_MEDIATEK) += mediatek-drm.o
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index b12e5b977c50..83fd4f38d07b 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -781,6 +781,7 @@ static struct platform_driver * const mtk_drm_drivers[] = {
 	&mtk_dpi_driver,
 	&mtk_drm_platform_driver,
 	&mtk_dsi_driver,
+	&mtk_ethdr_driver,
 	&mtk_mdp_rdma_driver,
 };
 
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
index 64a1f66df26a..3fb85776b8b3 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
@@ -55,6 +55,7 @@ extern struct platform_driver mtk_disp_ovl_driver;
 extern struct platform_driver mtk_disp_rdma_driver;
 extern struct platform_driver mtk_dpi_driver;
 extern struct platform_driver mtk_dsi_driver;
+extern struct platform_driver mtk_ethdr_driver;
 extern struct platform_driver mtk_mdp_rdma_driver;
 
 #endif /* MTK_DRM_DRV_H */
diff --git a/drivers/gpu/drm/mediatek/mtk_ethdr.c b/drivers/gpu/drm/mediatek/mtk_ethdr.c
new file mode 100644
index 000000000000..73dc4da3ba3b
--- /dev/null
+++ b/drivers/gpu/drm/mediatek/mtk_ethdr.c
@@ -0,0 +1,370 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2021 MediaTek Inc.
+ */
+
+#include <drm/drm_fourcc.h>
+#include <drm/drm_framebuffer.h>
+#include <linux/clk.h>
+#include <linux/component.h>
+#include <linux/of_device.h>
+#include <linux/of_address.h>
+#include <linux/platform_device.h>
+#include <linux/reset.h>
+#include <linux/soc/mediatek/mtk-cmdq.h>
+#include <linux/soc/mediatek/mtk-mmsys.h>
+
+#include "mtk_drm_crtc.h"
+#include "mtk_drm_ddp_comp.h"
+#include "mtk_drm_drv.h"
+#include "mtk_ethdr.h"
+
+#define MIX_INTEN			0x4
+#define MIX_FME_CPL_INTEN			BIT(1)
+#define MIX_INTSTA			0x8
+#define MIX_EN				0xc
+#define MIX_RST				0x14
+#define MIX_ROI_SIZE			0x18
+#define MIX_DATAPATH_CON		0x1c
+#define OUTPUT_NO_RND				BIT(3)
+#define SOURCE_RGB_SEL				BIT(7)
+#define BACKGROUND_RELAY			(4 << 9)
+#define MIX_ROI_BGCLR			0x20
+#define BGCLR_BLACK				0xff000000
+#define MIX_SRC_CON			0x24
+#define MIX_SRC_L0_EN				BIT(0)
+#define MIX_L_SRC_CON(n)		(0x28 + 0x18 * (n))
+#define NON_PREMULTI_SOURCE			(2 << 12)
+#define MIX_L_SRC_SIZE(n)		(0x30 + 0x18 * (n))
+#define MIX_L_SRC_OFFSET(n)		(0x34 + 0x18 * (n))
+#define MIX_FUNC_DCM0			0x120
+#define MIX_FUNC_DCM1			0x124
+#define MIX_FUNC_DCM_ENABLE			0xffffffff
+
+#define HDR_VDO_FE_0804_HDR_DM_FE	0x804
+#define HDR_VDO_FE_0804_BYPASS_ALL		0xfd
+#define HDR_GFX_FE_0204_GFX_HDR_FE	0x204
+#define HDR_GFX_FE_0204_BYPASS_ALL		0xfd
+#define HDR_VDO_BE_0204_VDO_DM_BE	0x204
+#define HDR_VDO_BE_0204_BYPASS_ALL		0x7e
+
+#define MIXER_INX_MODE_BYPASS			0
+#define MIXER_INX_MODE_EVEN_EXTEND		1
+#define DEFAULT_9BIT_ALPHA			0x100
+#define	MIXER_ALPHA_AEN				BIT(8)
+#define	MIXER_ALPHA				0xff
+#define ETHDR_CLK_NUM				13
+
+enum mtk_ethdr_comp_id {
+	ETHDR_MIXER,
+	ETHDR_VDO_FE0,
+	ETHDR_VDO_FE1,
+	ETHDR_GFX_FE0,
+	ETHDR_GFX_FE1,
+	ETHDR_VDO_BE,
+	ETHDR_ADL_DS,
+	ETHDR_ID_MAX
+};
+
+struct mtk_ethdr_comp {
+	struct device		*dev;
+	void __iomem		*regs;
+	struct cmdq_client_reg	cmdq_base;
+};
+
+struct mtk_ethdr {
+	struct mtk_ethdr_comp	ethdr_comp[ETHDR_ID_MAX];
+	struct clk_bulk_data	ethdr_clk[ETHDR_CLK_NUM];
+	struct device		*mmsys_dev;
+	void			(*vblank_cb)(void *data);
+	void			*vblank_cb_data;
+	int			irq;
+	struct reset_control	*reset_ctl;
+};
+
+static const char * const ethdr_clk_str[] = {
+	"ethdr_top",
+	"mixer",
+	"vdo_fe0",
+	"vdo_fe1",
+	"gfx_fe0",
+	"gfx_fe1",
+	"vdo_be",
+	"adl_ds",
+	"vdo_fe0_async",
+	"vdo_fe1_async",
+	"gfx_fe0_async",
+	"gfx_fe1_async",
+	"vdo_be_async",
+};
+
+void mtk_ethdr_register_vblank_cb(struct device *dev,
+				  void (*vblank_cb)(void *),
+				  void *vblank_cb_data)
+{
+	struct mtk_ethdr *priv = dev_get_drvdata(dev);
+
+	priv->vblank_cb = vblank_cb;
+	priv->vblank_cb_data = vblank_cb_data;
+}
+
+void mtk_ethdr_unregister_vblank_cb(struct device *dev)
+{
+	struct mtk_ethdr *priv = dev_get_drvdata(dev);
+
+	priv->vblank_cb = NULL;
+	priv->vblank_cb_data = NULL;
+}
+
+void mtk_ethdr_enable_vblank(struct device *dev)
+{
+	struct mtk_ethdr *priv = dev_get_drvdata(dev);
+
+	writel(MIX_FME_CPL_INTEN, priv->ethdr_comp[ETHDR_MIXER].regs + MIX_INTEN);
+}
+
+void mtk_ethdr_disable_vblank(struct device *dev)
+{
+	struct mtk_ethdr *priv = dev_get_drvdata(dev);
+
+	writel(0x0, priv->ethdr_comp[ETHDR_MIXER].regs + MIX_INTEN);
+}
+
+static irqreturn_t mtk_ethdr_irq_handler(int irq, void *dev_id)
+{
+	struct mtk_ethdr *priv = dev_id;
+
+	writel(0x0, priv->ethdr_comp[ETHDR_MIXER].regs + MIX_INTSTA);
+
+	if (!priv->vblank_cb)
+		return IRQ_NONE;
+
+	priv->vblank_cb(priv->vblank_cb_data);
+
+	return IRQ_HANDLED;
+}
+
+void mtk_ethdr_layer_config(struct device *dev, unsigned int idx,
+			    struct mtk_plane_state *state,
+			    struct cmdq_pkt *cmdq_pkt)
+{
+	struct mtk_ethdr *priv = dev_get_drvdata(dev);
+	struct mtk_ethdr_comp *mixer = &priv->ethdr_comp[ETHDR_MIXER];
+	struct mtk_plane_pending_state *pending = &state->pending;
+	unsigned int offset = (pending->x & 1) << 31 | pending->y << 16 | pending->x;
+	unsigned int align_width = ALIGN_DOWN(pending->width, 2);
+	unsigned int alpha_con = 0;
+
+	dev_dbg(dev, "%s+ idx:%d", __func__, idx);
+
+	if (idx >= 4)
+		return;
+
+	if (!pending->enable) {
+		mtk_ddp_write(cmdq_pkt, 0, &mixer->cmdq_base, mixer->regs, MIX_L_SRC_SIZE(idx));
+		return;
+	}
+
+	if (state->base.fb && state->base.fb->format->has_alpha)
+		alpha_con = MIXER_ALPHA_AEN | MIXER_ALPHA;
+
+	mtk_mmsys_mixer_in_config(priv->mmsys_dev, idx + 1, alpha_con ? false : true,
+				  DEFAULT_9BIT_ALPHA,
+				  pending->x & 1 ? MIXER_INX_MODE_EVEN_EXTEND :
+				  MIXER_INX_MODE_BYPASS, align_width / 2 - 1, cmdq_pkt);
+
+	mtk_ddp_write(cmdq_pkt, pending->height << 16 | align_width, &mixer->cmdq_base,
+		      mixer->regs, MIX_L_SRC_SIZE(idx));
+	mtk_ddp_write(cmdq_pkt, offset, &mixer->cmdq_base, mixer->regs, MIX_L_SRC_OFFSET(idx));
+	mtk_ddp_write_mask(cmdq_pkt, alpha_con, &mixer->cmdq_base, mixer->regs, MIX_L_SRC_CON(idx),
+			   0x1ff);
+	mtk_ddp_write_mask(cmdq_pkt, BIT(idx), &mixer->cmdq_base, mixer->regs, MIX_SRC_CON,
+			   BIT(idx));
+}
+
+void mtk_ethdr_config(struct device *dev, unsigned int w,
+		      unsigned int h, unsigned int vrefresh,
+		      unsigned int bpc, struct cmdq_pkt *cmdq_pkt)
+{
+	struct mtk_ethdr *priv = dev_get_drvdata(dev);
+	struct mtk_ethdr_comp *vdo_fe0 = &priv->ethdr_comp[ETHDR_VDO_FE0];
+	struct mtk_ethdr_comp *vdo_fe1 = &priv->ethdr_comp[ETHDR_VDO_FE1];
+	struct mtk_ethdr_comp *gfx_fe0 = &priv->ethdr_comp[ETHDR_GFX_FE0];
+	struct mtk_ethdr_comp *gfx_fe1 = &priv->ethdr_comp[ETHDR_GFX_FE1];
+	struct mtk_ethdr_comp *vdo_be = &priv->ethdr_comp[ETHDR_VDO_BE];
+	struct mtk_ethdr_comp *mixer = &priv->ethdr_comp[ETHDR_MIXER];
+
+	dev_dbg(dev, "%s-w:%d, h:%d\n", __func__, w, h);
+
+	mtk_ddp_write(cmdq_pkt, HDR_VDO_FE_0804_BYPASS_ALL, &vdo_fe0->cmdq_base,
+		      vdo_fe0->regs, HDR_VDO_FE_0804_HDR_DM_FE);
+
+	mtk_ddp_write(cmdq_pkt, HDR_VDO_FE_0804_BYPASS_ALL, &vdo_fe1->cmdq_base,
+		      vdo_fe1->regs, HDR_VDO_FE_0804_HDR_DM_FE);
+
+	mtk_ddp_write(cmdq_pkt, HDR_GFX_FE_0204_BYPASS_ALL, &gfx_fe0->cmdq_base,
+		      gfx_fe0->regs, HDR_GFX_FE_0204_GFX_HDR_FE);
+
+	mtk_ddp_write(cmdq_pkt, HDR_GFX_FE_0204_BYPASS_ALL, &gfx_fe1->cmdq_base,
+		      gfx_fe1->regs, HDR_GFX_FE_0204_GFX_HDR_FE);
+
+	mtk_ddp_write(cmdq_pkt, HDR_VDO_BE_0204_BYPASS_ALL, &vdo_be->cmdq_base,
+		      vdo_be->regs, HDR_VDO_BE_0204_VDO_DM_BE);
+
+	mtk_ddp_write(cmdq_pkt, MIX_FUNC_DCM_ENABLE, &mixer->cmdq_base, mixer->regs, MIX_FUNC_DCM0);
+	mtk_ddp_write(cmdq_pkt, MIX_FUNC_DCM_ENABLE, &mixer->cmdq_base, mixer->regs, MIX_FUNC_DCM1);
+	mtk_ddp_write(cmdq_pkt, h << 16 | w, &mixer->cmdq_base, mixer->regs, MIX_ROI_SIZE);
+	mtk_ddp_write(cmdq_pkt, BGCLR_BLACK, &mixer->cmdq_base, mixer->regs, MIX_ROI_BGCLR);
+	mtk_ddp_write(cmdq_pkt, NON_PREMULTI_SOURCE, &mixer->cmdq_base, mixer->regs,
+		      MIX_L_SRC_CON(0));
+	mtk_ddp_write(cmdq_pkt, NON_PREMULTI_SOURCE, &mixer->cmdq_base, mixer->regs,
+		      MIX_L_SRC_CON(1));
+	mtk_ddp_write(cmdq_pkt, NON_PREMULTI_SOURCE, &mixer->cmdq_base, mixer->regs,
+		      MIX_L_SRC_CON(2));
+	mtk_ddp_write(cmdq_pkt, NON_PREMULTI_SOURCE, &mixer->cmdq_base, mixer->regs,
+		      MIX_L_SRC_CON(3));
+	mtk_ddp_write(cmdq_pkt, 0x0, &mixer->cmdq_base, mixer->regs, MIX_L_SRC_SIZE(0));
+	mtk_ddp_write(cmdq_pkt, OUTPUT_NO_RND | SOURCE_RGB_SEL | BACKGROUND_RELAY,
+		      &mixer->cmdq_base, mixer->regs, MIX_DATAPATH_CON);
+	mtk_ddp_write_mask(cmdq_pkt, MIX_SRC_L0_EN, &mixer->cmdq_base, mixer->regs,
+			   MIX_SRC_CON, MIX_SRC_L0_EN);
+
+	mtk_mmsys_hdr_config(priv->mmsys_dev, w / 2, h, cmdq_pkt);
+	mtk_mmsys_mixer_in_channel_swap(priv->mmsys_dev, 4, 0, cmdq_pkt);
+}
+
+void mtk_ethdr_start(struct device *dev)
+{
+	struct mtk_ethdr *priv = dev_get_drvdata(dev);
+	struct mtk_ethdr_comp *mixer = &priv->ethdr_comp[ETHDR_MIXER];
+
+	writel(1, mixer->regs + MIX_EN);
+}
+
+void mtk_ethdr_stop(struct device *dev)
+{
+	struct mtk_ethdr *priv = dev_get_drvdata(dev);
+	struct mtk_ethdr_comp *mixer = &priv->ethdr_comp[ETHDR_MIXER];
+
+	writel(0, mixer->regs + MIX_EN);
+	writel(1, mixer->regs + MIX_RST);
+	reset_control_reset(priv->reset_ctl);
+	writel(0, mixer->regs + MIX_RST);
+}
+
+int mtk_ethdr_clk_enable(struct device *dev)
+{
+	int ret;
+	struct mtk_ethdr *priv = dev_get_drvdata(dev);
+
+	ret = clk_bulk_prepare_enable(ETHDR_CLK_NUM, priv->ethdr_clk);
+	if (ret)
+		dev_err(dev,
+			"ethdr_clk prepare enable failed\n");
+	return ret;
+}
+
+void mtk_ethdr_clk_disable(struct device *dev)
+{
+	struct mtk_ethdr *priv = dev_get_drvdata(dev);
+
+	clk_bulk_disable_unprepare(ETHDR_CLK_NUM, priv->ethdr_clk);
+}
+
+static int mtk_ethdr_bind(struct device *dev, struct device *master,
+			  void *data)
+{
+	struct mtk_ethdr *priv = dev_get_drvdata(dev);
+
+	priv->mmsys_dev = data;
+	return 0;
+}
+
+static void mtk_ethdr_unbind(struct device *dev, struct device *master, void *data)
+{
+}
+
+static const struct component_ops mtk_ethdr_component_ops = {
+	.bind	= mtk_ethdr_bind,
+	.unbind = mtk_ethdr_unbind,
+};
+
+static int mtk_ethdr_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct mtk_ethdr *priv;
+	int ret;
+	int i;
+
+	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	for (i = 0; i < ETHDR_ID_MAX; i++) {
+		priv->ethdr_comp[i].dev = dev;
+		priv->ethdr_comp[i].regs = of_iomap(dev->of_node, i);
+#if IS_REACHABLE(CONFIG_MTK_CMDQ)
+		ret = cmdq_dev_get_client_reg(dev,
+					      &priv->ethdr_comp[i].cmdq_base, i);
+		if (ret)
+			dev_dbg(dev, "get mediatek,gce-client-reg fail!\n");
+#endif
+		dev_dbg(dev, "[DRM]regs:0x%p, node:%d\n", priv->ethdr_comp[i].regs, i);
+	}
+
+	for (i = 0; i < ETHDR_CLK_NUM; i++)
+		priv->ethdr_clk[i].id = ethdr_clk_str[i];
+	ret = devm_clk_bulk_get_optional(dev, ETHDR_CLK_NUM, priv->ethdr_clk);
+	if (ret)
+		return ret;
+
+	priv->irq = platform_get_irq(pdev, 0);
+	if (priv->irq < 0)
+		priv->irq = 0;
+
+	if (priv->irq) {
+		ret = devm_request_irq(dev, priv->irq, mtk_ethdr_irq_handler,
+				       IRQF_TRIGGER_NONE, dev_name(dev), priv);
+		if (ret < 0) {
+			dev_err(dev, "Failed to request irq %d: %d\n", priv->irq, ret);
+			return ret;
+		}
+	}
+
+	priv->reset_ctl = devm_reset_control_array_get_optional_exclusive(dev);
+	if (IS_ERR(priv->reset_ctl)) {
+		dev_err_probe(dev, PTR_ERR(priv->reset_ctl), "cannot get ethdr reset control\n");
+		return PTR_ERR(priv->reset_ctl);
+	}
+
+	platform_set_drvdata(pdev, priv);
+
+	ret = component_add(dev, &mtk_ethdr_component_ops);
+	if (ret)
+		dev_notice(dev, "Failed to add component: %d\n", ret);
+
+	return ret;
+}
+
+static int mtk_ethdr_remove(struct platform_device *pdev)
+{
+	component_del(&pdev->dev, &mtk_ethdr_component_ops);
+	return 0;
+}
+
+static const struct of_device_id mtk_ethdr_driver_dt_match[] = {
+	{ .compatible = "mediatek,mt8195-disp-ethdr"},
+	{},
+};
+
+MODULE_DEVICE_TABLE(of, mtk_ethdr_driver_dt_match);
+
+struct platform_driver mtk_ethdr_driver = {
+	.probe		= mtk_ethdr_probe,
+	.remove		= mtk_ethdr_remove,
+	.driver		= {
+		.name	= "mediatek-disp-ethdr",
+		.owner	= THIS_MODULE,
+		.of_match_table = mtk_ethdr_driver_dt_match,
+	},
+};
diff --git a/drivers/gpu/drm/mediatek/mtk_ethdr.h b/drivers/gpu/drm/mediatek/mtk_ethdr.h
new file mode 100644
index 000000000000..81af9edea3f7
--- /dev/null
+++ b/drivers/gpu/drm/mediatek/mtk_ethdr.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2021 MediaTek Inc.
+ */
+
+#ifndef __MTK_ETHDR_H__
+#define __MTK_ETHDR_H__
+
+void mtk_ethdr_start(struct device *dev);
+void mtk_ethdr_stop(struct device *dev);
+int mtk_ethdr_clk_enable(struct device *dev);
+void mtk_ethdr_clk_disable(struct device *dev);
+void mtk_ethdr_config(struct device *dev, unsigned int w,
+		      unsigned int h, unsigned int vrefresh,
+		      unsigned int bpc, struct cmdq_pkt *cmdq_pkt);
+void mtk_ethdr_layer_config(struct device *dev, unsigned int idx,
+			    struct mtk_plane_state *state,
+			    struct cmdq_pkt *cmdq_pkt);
+void mtk_ethdr_register_vblank_cb(struct device *dev,
+				  void (*vblank_cb)(void *),
+				  void *vblank_cb_data);
+void mtk_ethdr_unregister_vblank_cb(struct device *dev);
+void mtk_ethdr_enable_vblank(struct device *dev);
+void mtk_ethdr_disable_vblank(struct device *dev);
+#endif
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:10:09 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:10:09 +0800
Subject: [PATCH v29 5/7] drm/mediatek: modify mediatek-drm for mt8195 multi mmsys support
In-Reply-To: <20221227081011.6426-1-nancy.lin@mediatek.com>
References: <20221227081011.6426-1-nancy.lin@mediatek.com>
Message-ID: <20221227081011.6426-6-nancy.lin@mediatek.com>

MT8195 have two mmsys. Modify drm for MT8195 multi-mmsys support.
The two mmsys (vdosys0 and vdosys1) will bring up two drm drivers,
only one drm driver register as the drm device.
Each drm driver binds its own component. The last bind drm driver
allocates and registers the drm device to drm core.
Each crtc path is created with the corresponding drm driver data.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
Tested-by: N?colas F. R. A. Prado <nfraprado at collabora.com>
---
 drivers/gpu/drm/mediatek/mtk_drm_crtc.c |  24 +-
 drivers/gpu/drm/mediatek/mtk_drm_crtc.h |   3 +-
 drivers/gpu/drm/mediatek/mtk_drm_drv.c  | 296 ++++++++++++++++++------
 drivers/gpu/drm/mediatek/mtk_drm_drv.h  |  10 +-
 4 files changed, 245 insertions(+), 88 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
index 78e20f604158..30dcb65d8a5a 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
@@ -874,21 +874,28 @@ struct device *mtk_drm_crtc_dma_dev_get(struct drm_crtc *crtc)
 }
 
 int mtk_drm_crtc_create(struct drm_device *drm_dev,
-			const enum mtk_ddp_comp_id *path, unsigned int path_len)
+			const enum mtk_ddp_comp_id *path, unsigned int path_len,
+			int priv_data_index)
 {
 	struct mtk_drm_private *priv = drm_dev->dev_private;
 	struct device *dev = drm_dev->dev;
 	struct mtk_drm_crtc *mtk_crtc;
 	unsigned int num_comp_planes = 0;
-	int pipe = priv->num_pipes;
 	int ret;
 	int i;
 	bool has_ctm = false;
 	uint gamma_lut_size = 0;
+	struct drm_crtc *tmp;
+	int crtc_i = 0;
 
 	if (!path)
 		return 0;
 
+	priv = priv->all_drm_private[priv_data_index];
+
+	drm_for_each_crtc(tmp, drm_dev)
+		crtc_i++;
+
 	for (i = 0; i < path_len; i++) {
 		enum mtk_ddp_comp_id comp_id = path[i];
 		struct device_node *node;
@@ -900,7 +907,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
 		if (!node) {
 			dev_info(dev,
 				 "Not creating crtc %d because component %d is disabled or missing\n",
-				 pipe, comp_id);
+				 crtc_i, comp_id);
 			return 0;
 		}
 
@@ -956,7 +963,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
 
 	for (i = 0; i < mtk_crtc->ddp_comp_nr; i++) {
 		ret = mtk_drm_crtc_init_comp_planes(drm_dev, mtk_crtc, i,
-						    pipe);
+						    crtc_i);
 		if (ret)
 			return ret;
 	}
@@ -968,24 +975,23 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
 	 */
 	mtk_crtc->dma_dev = mtk_ddp_comp_dma_dev_get(&priv->ddp_comp[path[0]]);
 
-	ret = mtk_drm_crtc_init(drm_dev, mtk_crtc, pipe);
+	ret = mtk_drm_crtc_init(drm_dev, mtk_crtc, crtc_i);
 	if (ret < 0)
 		return ret;
 
 	if (gamma_lut_size)
 		drm_mode_crtc_set_gamma_size(&mtk_crtc->base, gamma_lut_size);
 	drm_crtc_enable_color_mgmt(&mtk_crtc->base, 0, has_ctm, gamma_lut_size);
-	priv->num_pipes++;
 	mutex_init(&mtk_crtc->hw_lock);
 
 #if IS_REACHABLE(CONFIG_MTK_CMDQ)
+	i = priv->mbox_index++;
 	mtk_crtc->cmdq_client.client.dev = mtk_crtc->mmsys_dev;
 	mtk_crtc->cmdq_client.client.tx_block = false;
 	mtk_crtc->cmdq_client.client.knows_txdone = true;
 	mtk_crtc->cmdq_client.client.rx_callback = ddp_cmdq_cb;
 	mtk_crtc->cmdq_client.chan =
-			mbox_request_channel(&mtk_crtc->cmdq_client.client,
-					     drm_crtc_index(&mtk_crtc->base));
+			mbox_request_channel(&mtk_crtc->cmdq_client.client, i);
 	if (IS_ERR(mtk_crtc->cmdq_client.chan)) {
 		dev_dbg(dev, "mtk_crtc %d failed to create mailbox client, writing register by CPU now\n",
 			drm_crtc_index(&mtk_crtc->base));
@@ -995,7 +1001,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
 	if (mtk_crtc->cmdq_client.chan) {
 		ret = of_property_read_u32_index(priv->mutex_node,
 						 "mediatek,gce-events",
-						 drm_crtc_index(&mtk_crtc->base),
+						 i,
 						 &mtk_crtc->cmdq_event);
 		if (ret) {
 			dev_dbg(dev, "mtk_crtc %d failed to get mediatek,gce-events property\n",
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h
index f5a6e80c5265..606f72f35924 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h
@@ -17,7 +17,8 @@
 void mtk_drm_crtc_commit(struct drm_crtc *crtc);
 int mtk_drm_crtc_create(struct drm_device *drm_dev,
 			const enum mtk_ddp_comp_id *path,
-			unsigned int path_len);
+			unsigned int path_len,
+			int priv_data_index);
 int mtk_drm_crtc_plane_check(struct drm_crtc *crtc, struct drm_plane *plane,
 			     struct mtk_plane_state *state);
 void mtk_drm_crtc_async_update(struct drm_crtc *crtc, struct drm_plane *plane,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index 83fd4f38d07b..4de5d0009a06 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -214,6 +214,7 @@ static const struct mtk_mmsys_driver_data mt2701_mmsys_driver_data = {
 	.ext_path = mt2701_mtk_ddp_ext,
 	.ext_len = ARRAY_SIZE(mt2701_mtk_ddp_ext),
 	.shadow_register = true,
+	.mmsys_dev_num = 1,
 };
 
 static const struct mtk_mmsys_driver_data mt7623_mmsys_driver_data = {
@@ -222,6 +223,7 @@ static const struct mtk_mmsys_driver_data mt7623_mmsys_driver_data = {
 	.ext_path = mt7623_mtk_ddp_ext,
 	.ext_len = ARRAY_SIZE(mt7623_mtk_ddp_ext),
 	.shadow_register = true,
+	.mmsys_dev_num = 1,
 };
 
 static const struct mtk_mmsys_driver_data mt2712_mmsys_driver_data = {
@@ -231,11 +233,13 @@ static const struct mtk_mmsys_driver_data mt2712_mmsys_driver_data = {
 	.ext_len = ARRAY_SIZE(mt2712_mtk_ddp_ext),
 	.third_path = mt2712_mtk_ddp_third,
 	.third_len = ARRAY_SIZE(mt2712_mtk_ddp_third),
+	.mmsys_dev_num = 1,
 };
 
 static const struct mtk_mmsys_driver_data mt8167_mmsys_driver_data = {
 	.main_path = mt8167_mtk_ddp_main,
 	.main_len = ARRAY_SIZE(mt8167_mtk_ddp_main),
+	.mmsys_dev_num = 1,
 };
 
 static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = {
@@ -243,6 +247,7 @@ static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = {
 	.main_len = ARRAY_SIZE(mt8173_mtk_ddp_main),
 	.ext_path = mt8173_mtk_ddp_ext,
 	.ext_len = ARRAY_SIZE(mt8173_mtk_ddp_ext),
+	.mmsys_dev_num = 1,
 };
 
 static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = {
@@ -250,6 +255,7 @@ static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = {
 	.main_len = ARRAY_SIZE(mt8183_mtk_ddp_main),
 	.ext_path = mt8183_mtk_ddp_ext,
 	.ext_len = ARRAY_SIZE(mt8183_mtk_ddp_ext),
+	.mmsys_dev_num = 1,
 };
 
 static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {
@@ -257,6 +263,7 @@ static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {
 	.main_len = ARRAY_SIZE(mt8186_mtk_ddp_main),
 	.ext_path = mt8186_mtk_ddp_ext,
 	.ext_len = ARRAY_SIZE(mt8186_mtk_ddp_ext),
+	.mmsys_dev_num = 1,
 };
 
 static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
@@ -264,36 +271,124 @@ static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
 	.main_len = ARRAY_SIZE(mt8192_mtk_ddp_main),
 	.ext_path = mt8192_mtk_ddp_ext,
 	.ext_len = ARRAY_SIZE(mt8192_mtk_ddp_ext),
+	.mmsys_dev_num = 1,
 };
 
 static const struct mtk_mmsys_driver_data mt8195_vdosys0_driver_data = {
 	.main_path = mt8195_mtk_ddp_main,
 	.main_len = ARRAY_SIZE(mt8195_mtk_ddp_main),
+	.mmsys_dev_num = 1,
 };
 
+static const struct of_device_id mtk_drm_of_ids[] = {
+	{ .compatible = "mediatek,mt2701-mmsys",
+	  .data = &mt2701_mmsys_driver_data},
+	{ .compatible = "mediatek,mt7623-mmsys",
+	  .data = &mt7623_mmsys_driver_data},
+	{ .compatible = "mediatek,mt2712-mmsys",
+	  .data = &mt2712_mmsys_driver_data},
+	{ .compatible = "mediatek,mt8167-mmsys",
+	  .data = &mt8167_mmsys_driver_data},
+	{ .compatible = "mediatek,mt8173-mmsys",
+	  .data = &mt8173_mmsys_driver_data},
+	{ .compatible = "mediatek,mt8183-mmsys",
+	  .data = &mt8183_mmsys_driver_data},
+	{ .compatible = "mediatek,mt8186-mmsys",
+	  .data = &mt8186_mmsys_driver_data},
+	{ .compatible = "mediatek,mt8192-mmsys",
+	  .data = &mt8192_mmsys_driver_data},
+	{ .compatible = "mediatek,mt8195-mmsys",
+	  .data = &mt8195_vdosys0_driver_data},
+	{ .compatible = "mediatek,mt8195-vdosys0",
+	  .data = &mt8195_vdosys0_driver_data},
+	{ }
+};
+MODULE_DEVICE_TABLE(of, mtk_drm_of_ids);
+
+static int mtk_drm_match(struct device *dev, void *data)
+{
+	if (!strncmp(dev_name(dev), "mediatek-drm", sizeof("mediatek-drm") - 1))
+		return true;
+	return false;
+}
+
+static bool mtk_drm_get_all_drm_priv(struct device *dev)
+{
+	struct mtk_drm_private *drm_priv = dev_get_drvdata(dev);
+	struct mtk_drm_private *all_drm_priv[MAX_CRTC];
+	struct device_node *phandle = dev->parent->of_node;
+	const struct of_device_id *of_id;
+	struct device_node *node;
+	struct device *drm_dev;
+	int cnt = 0;
+	int i, j;
+
+	for_each_child_of_node(phandle->parent, node) {
+		struct platform_device *pdev;
+
+		of_id = of_match_node(mtk_drm_of_ids, node);
+		if (!of_id)
+			continue;
+
+		pdev = of_find_device_by_node(node);
+		if (!pdev)
+			continue;
+
+		drm_dev = device_find_child(&pdev->dev, NULL, mtk_drm_match);
+		if (!drm_dev || !dev_get_drvdata(drm_dev))
+			continue;
+
+		all_drm_priv[cnt] = dev_get_drvdata(drm_dev);
+		if (all_drm_priv[cnt] && all_drm_priv[cnt]->mtk_drm_bound)
+			cnt++;
+	}
+
+	if (drm_priv->data->mmsys_dev_num == cnt) {
+		for (i = 0; i < cnt; i++)
+			for (j = 0; j < cnt; j++)
+				all_drm_priv[j]->all_drm_private[i] = all_drm_priv[i];
+
+		return true;
+	}
+
+	return false;
+}
+
+static bool mtk_drm_find_mmsys_comp(struct mtk_drm_private *private, int comp_id)
+{
+	const struct mtk_mmsys_driver_data *drv_data = private->data;
+	int i;
+
+	if (drv_data->main_path)
+		for (i = 0; i < drv_data->main_len; i++)
+			if (drv_data->main_path[i] == comp_id)
+				return true;
+
+	if (drv_data->ext_path)
+		for (i = 0; i < drv_data->ext_len; i++)
+			if (drv_data->ext_path[i] == comp_id)
+				return true;
+
+	if (drv_data->third_path)
+		for (i = 0; i < drv_data->third_len; i++)
+			if (drv_data->third_path[i] == comp_id)
+				return true;
+
+	return false;
+}
+
 static int mtk_drm_kms_init(struct drm_device *drm)
 {
 	struct mtk_drm_private *private = drm->dev_private;
+	struct mtk_drm_private *priv_n;
 	struct platform_device *pdev;
-	struct device_node *np;
+	struct device_node *np = NULL;
 	struct device *dma_dev;
-	int ret;
+	int ret, i, j;
 
 	if (drm_firmware_drivers_only())
 		return -ENODEV;
 
-	if (!iommu_present(&platform_bus_type))
-		return -EPROBE_DEFER;
-
-	pdev = of_find_device_by_node(private->mutex_node);
-	if (!pdev) {
-		dev_err(drm->dev, "Waiting for disp-mutex device %pOF\n",
-			private->mutex_node);
-		of_node_put(private->mutex_node);
-		return -EPROBE_DEFER;
-	}
-	private->mutex_dev = &pdev->dev;
-
 	ret = drmm_mode_config_init(drm);
 	if (ret)
 		goto put_mutex_dev;
@@ -311,9 +406,12 @@ static int mtk_drm_kms_init(struct drm_device *drm)
 	drm->mode_config.funcs = &mtk_drm_mode_config_funcs;
 	drm->mode_config.helper_private = &mtk_drm_mode_config_helpers;
 
-	ret = component_bind_all(drm->dev, drm);
-	if (ret)
-		goto put_mutex_dev;
+	for (i = 0; i < private->data->mmsys_dev_num; i++) {
+		drm->dev_private = private->all_drm_private[i];
+		ret = component_bind_all(private->all_drm_private[i]->dev, drm);
+		if (ret)
+			goto put_mutex_dev;
+	}
 
 	/*
 	 * Ensure internal panels are at the top of the connector list before
@@ -322,28 +420,53 @@ static int mtk_drm_kms_init(struct drm_device *drm)
 	drm_helper_move_panel_connectors_to_head(drm);
 
 	/*
-	 * We currently support two fixed data streams, each optional,
-	 * and each statically assigned to a crtc:
-	 * OVL0 -> COLOR0 -> AAL -> OD -> RDMA0 -> UFOE -> DSI0 ...
+	 * 1. We currently support two fixed data streams, each optional,
+	 *    and each statically assigned to a crtc:
+	 *    OVL0 -> COLOR0 -> AAL -> OD -> RDMA0 -> UFOE -> DSI0 ...
+	 * 2. For multi mmsys architecture, crtc path data are located in
+	 *    different drm private data structures. Loop through crtc index to
+	 *    create crtc from the main path and then ext_path and finally the
+	 *    third path.
+	 * 3. Use OVL device for all DMA memory allocations
 	 */
-	ret = mtk_drm_crtc_create(drm, private->data->main_path,
-				  private->data->main_len);
-	if (ret < 0)
-		goto err_component_unbind;
-	/* ... and OVL1 -> COLOR1 -> GAMMA -> RDMA1 -> DPI0. */
-	ret = mtk_drm_crtc_create(drm, private->data->ext_path,
-				  private->data->ext_len);
-	if (ret < 0)
-		goto err_component_unbind;
-
-	ret = mtk_drm_crtc_create(drm, private->data->third_path,
-				  private->data->third_len);
-	if (ret < 0)
-		goto err_component_unbind;
+	for (i = 0; i < MAX_CRTC; i++) {
+		for (j = 0; j < private->data->mmsys_dev_num; j++) {
+			priv_n = private->all_drm_private[j];
+
+			if (i == 0 && priv_n->data->main_len) {
+				ret = mtk_drm_crtc_create(drm, priv_n->data->main_path,
+							  priv_n->data->main_len, j);
+				if (ret)
+					goto err_component_unbind;
+
+				if (!np)
+					np = priv_n->comp_node[priv_n->data->main_path[0]];
+
+				continue;
+			} else if (i == 1 && priv_n->data->ext_len) {
+				ret = mtk_drm_crtc_create(drm, priv_n->data->ext_path,
+							  priv_n->data->ext_len, j);
+				if (ret)
+					goto err_component_unbind;
+
+				if (!np)
+					np = priv_n->comp_node[priv_n->data->ext_path[0]];
+
+				continue;
+			} else if (i == 2 && priv_n->data->third_len) {
+				ret = mtk_drm_crtc_create(drm, priv_n->data->third_path,
+							  priv_n->data->third_len, j);
+				if (ret)
+					goto err_component_unbind;
+
+				if (!np)
+					np = priv_n->comp_node[priv_n->data->third_path[0]];
+
+				continue;
+			}
+		}
+	}
 
-	/* Use OVL device for all DMA memory allocations */
-	np = private->comp_node[private->data->main_path[0]] ?:
-	     private->comp_node[private->data->ext_path[0]];
 	pdev = of_find_device_by_node(np);
 	if (!pdev) {
 		ret = -ENODEV;
@@ -352,7 +475,8 @@ static int mtk_drm_kms_init(struct drm_device *drm)
 	}
 
 	dma_dev = &pdev->dev;
-	private->dma_dev = dma_dev;
+	for (i = 0; i < private->data->mmsys_dev_num; i++)
+		private->all_drm_private[i]->dma_dev = dma_dev;
 
 	/*
 	 * Configure the DMA segment size to make sure we get contiguous IOVA
@@ -374,9 +498,12 @@ static int mtk_drm_kms_init(struct drm_device *drm)
 	return 0;
 
 err_component_unbind:
-	component_unbind_all(drm->dev, drm);
+	for (i = 0; i < private->data->mmsys_dev_num; i++)
+		component_unbind_all(private->all_drm_private[i]->dev, drm);
 put_mutex_dev:
-	put_device(private->mutex_dev);
+	for (i = 0; i < private->data->mmsys_dev_num; i++)
+		put_device(private->all_drm_private[i]->mutex_dev);
+
 	return ret;
 }
 
@@ -424,15 +551,36 @@ static const struct drm_driver mtk_drm_driver = {
 static int mtk_drm_bind(struct device *dev)
 {
 	struct mtk_drm_private *private = dev_get_drvdata(dev);
+	struct platform_device *pdev;
 	struct drm_device *drm;
-	int ret;
+	int ret, i;
+
+	if (!iommu_present(&platform_bus_type))
+		return -EPROBE_DEFER;
+
+	pdev = of_find_device_by_node(private->mutex_node);
+	if (!pdev) {
+		dev_err(dev, "Waiting for disp-mutex device %pOF\n",
+			private->mutex_node);
+		of_node_put(private->mutex_node);
+		return -EPROBE_DEFER;
+	}
+
+	private->mutex_dev = &pdev->dev;
+	private->mtk_drm_bound = true;
+	private->dev = dev;
+
+	if (!mtk_drm_get_all_drm_priv(dev))
+		return 0;
 
 	drm = drm_dev_alloc(&mtk_drm_driver, dev);
 	if (IS_ERR(drm))
 		return PTR_ERR(drm);
 
+	private->drm_master = true;
 	drm->dev_private = private;
-	private->drm = drm;
+	for (i = 0; i < private->data->mmsys_dev_num; i++)
+		private->all_drm_private[i]->drm = drm;
 
 	ret = mtk_drm_kms_init(drm);
 	if (ret < 0)
@@ -457,10 +605,14 @@ static void mtk_drm_unbind(struct device *dev)
 {
 	struct mtk_drm_private *private = dev_get_drvdata(dev);
 
-	drm_dev_unregister(private->drm);
-	mtk_drm_kms_deinit(private->drm);
-	drm_dev_put(private->drm);
-	private->num_pipes = 0;
+	/* for multi mmsys dev, unregister drm dev in mmsys master */
+	if (private->drm_master) {
+		drm_dev_unregister(private->drm);
+		mtk_drm_kms_deinit(private->drm);
+		drm_dev_put(private->drm);
+	}
+	private->mtk_drm_bound = false;
+	private->drm_master = false;
 	private->drm = NULL;
 }
 
@@ -585,31 +737,6 @@ static const struct of_device_id mtk_ddp_comp_dt_ids[] = {
 	{ }
 };
 
-static const struct of_device_id mtk_drm_of_ids[] = {
-	{ .compatible = "mediatek,mt2701-mmsys",
-	  .data = &mt2701_mmsys_driver_data},
-	{ .compatible = "mediatek,mt7623-mmsys",
-	  .data = &mt7623_mmsys_driver_data},
-	{ .compatible = "mediatek,mt2712-mmsys",
-	  .data = &mt2712_mmsys_driver_data},
-	{ .compatible = "mediatek,mt8167-mmsys",
-	  .data = &mt8167_mmsys_driver_data},
-	{ .compatible = "mediatek,mt8173-mmsys",
-	  .data = &mt8173_mmsys_driver_data},
-	{ .compatible = "mediatek,mt8183-mmsys",
-	  .data = &mt8183_mmsys_driver_data},
-	{ .compatible = "mediatek,mt8186-mmsys",
-	  .data = &mt8186_mmsys_driver_data},
-	{ .compatible = "mediatek,mt8192-mmsys",
-	  .data = &mt8192_mmsys_driver_data},
-	{ .compatible = "mediatek,mt8195-mmsys",
-	  .data = &mt8195_vdosys0_driver_data},
-	{ .compatible = "mediatek,mt8195-vdosys0",
-	  .data = &mt8195_vdosys0_driver_data},
-	{ }
-};
-MODULE_DEVICE_TABLE(of, mtk_drm_of_ids);
-
 static int mtk_drm_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
@@ -637,6 +764,12 @@ static int mtk_drm_probe(struct platform_device *pdev)
 
 	private->data = of_id->data;
 
+	private->all_drm_private = devm_kmalloc_array(dev, private->data->mmsys_dev_num,
+						      sizeof(*private->all_drm_private),
+						      GFP_KERNEL);
+	if (!private->all_drm_private)
+		return -ENOMEM;
+
 	/* Iterate over sibling DISP function blocks */
 	for_each_child_of_node(phandle->parent, node) {
 		const struct of_device_id *of_id;
@@ -656,7 +789,13 @@ static int mtk_drm_probe(struct platform_device *pdev)
 		comp_type = (enum mtk_ddp_comp_type)of_id->data;
 
 		if (comp_type == MTK_DISP_MUTEX) {
-			private->mutex_node = of_node_get(node);
+			int id;
+
+			id = of_alias_get_id(node, "mutex");
+			if (id < 0 || id == private->data->mmsys_id) {
+				private->mutex_node = of_node_get(node);
+				dev_dbg(dev, "get mutex for mmsys %d", private->data->mmsys_id);
+			}
 			continue;
 		}
 
@@ -667,6 +806,9 @@ static int mtk_drm_probe(struct platform_device *pdev)
 			continue;
 		}
 
+		if (!mtk_drm_find_mmsys_comp(private, comp_id))
+			continue;
+
 		private->comp_node[comp_id] = of_node_get(node);
 
 		/*
@@ -742,16 +884,20 @@ static int mtk_drm_sys_prepare(struct device *dev)
 	struct mtk_drm_private *private = dev_get_drvdata(dev);
 	struct drm_device *drm = private->drm;
 
-	return drm_mode_config_helper_suspend(drm);
+	if (private->drm_master)
+		return drm_mode_config_helper_suspend(drm);
+	else
+		return 0;
 }
 
 static void mtk_drm_sys_complete(struct device *dev)
 {
 	struct mtk_drm_private *private = dev_get_drvdata(dev);
 	struct drm_device *drm = private->drm;
-	int ret;
+	int ret = 0;
 
-	ret = drm_mode_config_helper_resume(drm);
+	if (private->drm_master)
+		ret = drm_mode_config_helper_resume(drm);
 	if (ret)
 		dev_err(dev, "Failed to resume\n");
 }
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
index d27561e5e274..8d3ff32b5364 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
@@ -29,14 +29,16 @@ struct mtk_mmsys_driver_data {
 	unsigned int third_len;
 
 	bool shadow_register;
+	unsigned int mmsys_id;
+	unsigned int mmsys_dev_num;
 };
 
 struct mtk_drm_private {
 	struct drm_device *drm;
 	struct device *dma_dev;
-
-	unsigned int num_pipes;
-
+	bool mtk_drm_bound;
+	bool drm_master;
+	struct device *dev;
 	struct device_node *mutex_node;
 	struct device *mutex_dev;
 	struct device *mmsys_dev;
@@ -44,6 +46,8 @@ struct mtk_drm_private {
 	struct mtk_ddp_comp ddp_comp[DDP_COMPONENT_ID_MAX];
 	const struct mtk_mmsys_driver_data *data;
 	struct drm_atomic_state *suspend_state;
+	unsigned int mbox_index;
+	struct mtk_drm_private **all_drm_private;
 };
 
 extern struct platform_driver mtk_disp_aal_driver;
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:10:07 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:10:07 +0800
Subject: [PATCH v29 3/7] drm/mediatek: add ovl_adaptor support for MT8195
In-Reply-To: <20221227081011.6426-1-nancy.lin@mediatek.com>
References: <20221227081011.6426-1-nancy.lin@mediatek.com>
Message-ID: <20221227081011.6426-4-nancy.lin@mediatek.com>

Add ovl_adaptor driver for MT8195.
Ovl_adaptor is an encapsulated module and designed for simplified
DRM control flow. This module is composed of 8 RDMAs, 4 MERGEs and
an ETHDR. Two RDMAs merge into one layer, so this module support 4
layers.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: Chun-Kuang Hu <chunkuang.hu at kernel.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
---
 drivers/gpu/drm/mediatek/Makefile             |   1 +
 drivers/gpu/drm/mediatek/mtk_disp_drv.h       |  26 +
 .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 533 ++++++++++++++++++
 drivers/gpu/drm/mediatek/mtk_drm_drv.h        |   1 +
 4 files changed, 561 insertions(+)
 create mode 100644 drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c

diff --git a/drivers/gpu/drm/mediatek/Makefile b/drivers/gpu/drm/mediatek/Makefile
index 840f14436d3c..d4d193f60271 100644
--- a/drivers/gpu/drm/mediatek/Makefile
+++ b/drivers/gpu/drm/mediatek/Makefile
@@ -6,6 +6,7 @@ mediatek-drm-y := mtk_disp_aal.o \
 		  mtk_disp_gamma.o \
 		  mtk_disp_merge.o \
 		  mtk_disp_ovl.o \
+		  mtk_disp_ovl_adaptor.o \
 		  mtk_disp_rdma.o \
 		  mtk_drm_crtc.o \
 		  mtk_drm_ddp_comp.o \
diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
index 33e61a136bbc..654f8e257984 100644
--- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
+++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
@@ -7,6 +7,8 @@
 #define _MTK_DISP_DRV_H_
 
 #include <linux/soc/mediatek/mtk-cmdq.h>
+#include <linux/soc/mediatek/mtk-mmsys.h>
+#include <linux/soc/mediatek/mtk-mutex.h>
 #include "mtk_drm_plane.h"
 #include "mtk_mdp_rdma.h"
 
@@ -116,6 +118,30 @@ void mtk_rdma_unregister_vblank_cb(struct device *dev);
 void mtk_rdma_enable_vblank(struct device *dev);
 void mtk_rdma_disable_vblank(struct device *dev);
 
+void mtk_ovl_adaptor_add_comp(struct device *dev, struct mtk_mutex *mutex);
+void mtk_ovl_adaptor_remove_comp(struct device *dev, struct mtk_mutex *mutex);
+void mtk_ovl_adaptor_connect(struct device *dev, struct device *mmsys_dev,
+			     unsigned int next);
+void mtk_ovl_adaptor_disconnect(struct device *dev, struct device *mmsys_dev,
+				unsigned int next);
+int mtk_ovl_adaptor_clk_enable(struct device *dev);
+void mtk_ovl_adaptor_clk_disable(struct device *dev);
+void mtk_ovl_adaptor_config(struct device *dev, unsigned int w,
+			    unsigned int h, unsigned int vrefresh,
+			    unsigned int bpc, struct cmdq_pkt *cmdq_pkt);
+void mtk_ovl_adaptor_layer_config(struct device *dev, unsigned int idx,
+				  struct mtk_plane_state *state,
+				  struct cmdq_pkt *cmdq_pkt);
+void mtk_ovl_adaptor_register_vblank_cb(struct device *dev, void (*vblank_cb)(void *),
+					void *vblank_cb_data);
+void mtk_ovl_adaptor_unregister_vblank_cb(struct device *dev);
+void mtk_ovl_adaptor_enable_vblank(struct device *dev);
+void mtk_ovl_adaptor_disable_vblank(struct device *dev);
+void mtk_ovl_adaptor_start(struct device *dev);
+void mtk_ovl_adaptor_stop(struct device *dev);
+unsigned int mtk_ovl_adaptor_layer_nr(struct device *dev);
+struct device *mtk_ovl_adaptor_dma_dev_get(struct device *dev);
+
 int mtk_mdp_rdma_clk_enable(struct device *dev);
 void mtk_mdp_rdma_clk_disable(struct device *dev);
 void mtk_mdp_rdma_start(struct device *dev, struct cmdq_pkt *cmdq_pkt);
diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
new file mode 100644
index 000000000000..046217828ab3
--- /dev/null
+++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
@@ -0,0 +1,533 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2021 MediaTek Inc.
+ */
+
+#include <drm/drm_fourcc.h>
+#include <drm/drm_of.h>
+#include <linux/clk.h>
+#include <linux/component.h>
+#include <linux/of_device.h>
+#include <linux/of_address.h>
+#include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
+#include <linux/reset.h>
+#include <linux/soc/mediatek/mtk-cmdq.h>
+#include <linux/soc/mediatek/mtk-mmsys.h>
+#include <linux/soc/mediatek/mtk-mutex.h>
+
+#include "mtk_disp_drv.h"
+#include "mtk_drm_crtc.h"
+#include "mtk_drm_ddp_comp.h"
+#include "mtk_drm_drv.h"
+#include "mtk_ethdr.h"
+
+#define MTK_OVL_ADAPTOR_RDMA_MAX_WIDTH 1920
+#define MTK_OVL_ADAPTOR_LAYER_NUM 4
+
+enum mtk_ovl_adaptor_comp_type {
+	OVL_ADAPTOR_TYPE_RDMA = 0,
+	OVL_ADAPTOR_TYPE_MERGE,
+	OVL_ADAPTOR_TYPE_ETHDR,
+	OVL_ADAPTOR_TYPE_NUM,
+};
+
+enum mtk_ovl_adaptor_comp_id {
+	OVL_ADAPTOR_MDP_RDMA0,
+	OVL_ADAPTOR_MDP_RDMA1,
+	OVL_ADAPTOR_MDP_RDMA2,
+	OVL_ADAPTOR_MDP_RDMA3,
+	OVL_ADAPTOR_MDP_RDMA4,
+	OVL_ADAPTOR_MDP_RDMA5,
+	OVL_ADAPTOR_MDP_RDMA6,
+	OVL_ADAPTOR_MDP_RDMA7,
+	OVL_ADAPTOR_MERGE0,
+	OVL_ADAPTOR_MERGE1,
+	OVL_ADAPTOR_MERGE2,
+	OVL_ADAPTOR_MERGE3,
+	OVL_ADAPTOR_ETHDR0,
+	OVL_ADAPTOR_ID_MAX
+};
+
+struct ovl_adaptor_comp_match {
+	enum mtk_ovl_adaptor_comp_type type;
+	int alias_id;
+};
+
+struct mtk_disp_ovl_adaptor {
+	struct device *ovl_adaptor_comp[OVL_ADAPTOR_ID_MAX];
+	struct device *mmsys_dev;
+	bool children_bound;
+};
+
+static const char * const private_comp_stem[OVL_ADAPTOR_TYPE_NUM] = {
+	[OVL_ADAPTOR_TYPE_RDMA]		= "vdo1-rdma",
+	[OVL_ADAPTOR_TYPE_MERGE]	= "merge",
+	[OVL_ADAPTOR_TYPE_ETHDR]	= "ethdr",
+};
+
+static const struct ovl_adaptor_comp_match comp_matches[OVL_ADAPTOR_ID_MAX] = {
+	[OVL_ADAPTOR_MDP_RDMA0]	= { OVL_ADAPTOR_TYPE_RDMA, 0 },
+	[OVL_ADAPTOR_MDP_RDMA1]	= { OVL_ADAPTOR_TYPE_RDMA, 1 },
+	[OVL_ADAPTOR_MDP_RDMA2]	= { OVL_ADAPTOR_TYPE_RDMA, 2 },
+	[OVL_ADAPTOR_MDP_RDMA3]	= { OVL_ADAPTOR_TYPE_RDMA, 3 },
+	[OVL_ADAPTOR_MDP_RDMA4]	= { OVL_ADAPTOR_TYPE_RDMA, 4 },
+	[OVL_ADAPTOR_MDP_RDMA5]	= { OVL_ADAPTOR_TYPE_RDMA, 5 },
+	[OVL_ADAPTOR_MDP_RDMA6]	= { OVL_ADAPTOR_TYPE_RDMA, 6 },
+	[OVL_ADAPTOR_MDP_RDMA7]	= { OVL_ADAPTOR_TYPE_RDMA, 7 },
+	[OVL_ADAPTOR_MERGE0]	= { OVL_ADAPTOR_TYPE_MERGE, 1 },
+	[OVL_ADAPTOR_MERGE1]	= { OVL_ADAPTOR_TYPE_MERGE, 2 },
+	[OVL_ADAPTOR_MERGE2]	= { OVL_ADAPTOR_TYPE_MERGE, 3 },
+	[OVL_ADAPTOR_MERGE3]	= { OVL_ADAPTOR_TYPE_MERGE, 4 },
+	[OVL_ADAPTOR_ETHDR0]	= { OVL_ADAPTOR_TYPE_ETHDR, 0 },
+};
+
+void mtk_ovl_adaptor_layer_config(struct device *dev, unsigned int idx,
+				  struct mtk_plane_state *state,
+				  struct cmdq_pkt *cmdq_pkt)
+{
+	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
+	struct mtk_plane_pending_state *pending = &state->pending;
+	struct mtk_mdp_rdma_cfg rdma_config = {0};
+	struct device *rdma_l;
+	struct device *rdma_r;
+	struct device *merge;
+	struct device *ethdr;
+	const struct drm_format_info *fmt_info = drm_format_info(pending->format);
+	bool use_dual_pipe = false;
+	unsigned int align_width;
+	unsigned int l_w = 0;
+	unsigned int r_w = 0;
+
+	dev_dbg(dev, "%s+ idx:%d, enable:%d, fmt:0x%x\n", __func__, idx,
+		pending->enable, pending->format);
+	dev_dbg(dev, "addr 0x%pad, fb w:%d, {%d,%d,%d,%d}\n",
+		&pending->addr, (pending->pitch / fmt_info->cpp[0]),
+		pending->x, pending->y, pending->width, pending->height);
+
+	rdma_l = ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_MDP_RDMA0 + 2 * idx];
+	rdma_r = ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_MDP_RDMA0 + 2 * idx + 1];
+	merge = ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_MERGE0 + idx];
+	ethdr = ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0];
+
+	if (!pending->enable) {
+		mtk_merge_stop_cmdq(merge, cmdq_pkt);
+		mtk_mdp_rdma_stop(rdma_l, cmdq_pkt);
+		mtk_mdp_rdma_stop(rdma_r, cmdq_pkt);
+		mtk_ethdr_layer_config(ethdr, idx, state, cmdq_pkt);
+		return;
+	}
+
+	/* ETHDR is in 1T2P domain, width needs to be 2 pixels align */
+	align_width = ALIGN_DOWN(pending->width, 2);
+
+	if (align_width > MTK_OVL_ADAPTOR_RDMA_MAX_WIDTH)
+		use_dual_pipe = true;
+
+	if (use_dual_pipe) {
+		l_w = (align_width / 2) + ((pending->width / 2) % 2);
+		r_w = align_width - l_w;
+	} else {
+		l_w = align_width;
+	}
+	mtk_merge_advance_config(merge, l_w, r_w, pending->height, 0, 0, cmdq_pkt);
+	mtk_mmsys_merge_async_config(ovl_adaptor->mmsys_dev, idx, align_width / 2,
+				     pending->height, cmdq_pkt);
+
+	rdma_config.width = l_w;
+	rdma_config.height = pending->height;
+	rdma_config.addr0 = pending->addr;
+	rdma_config.pitch = pending->pitch;
+	rdma_config.fmt = pending->format;
+	rdma_config.color_encoding = pending->color_encoding;
+	mtk_mdp_rdma_config(rdma_l, &rdma_config, cmdq_pkt);
+
+	if (use_dual_pipe) {
+		rdma_config.x_left = l_w;
+		rdma_config.width = r_w;
+		mtk_mdp_rdma_config(rdma_r, &rdma_config, cmdq_pkt);
+	}
+
+	mtk_merge_start_cmdq(merge, cmdq_pkt);
+
+	mtk_mdp_rdma_start(rdma_l, cmdq_pkt);
+	if (use_dual_pipe)
+		mtk_mdp_rdma_start(rdma_r, cmdq_pkt);
+	else
+		mtk_mdp_rdma_stop(rdma_r, cmdq_pkt);
+
+	mtk_ethdr_layer_config(ethdr, idx, state, cmdq_pkt);
+}
+
+void mtk_ovl_adaptor_config(struct device *dev, unsigned int w,
+			    unsigned int h, unsigned int vrefresh,
+			    unsigned int bpc, struct cmdq_pkt *cmdq_pkt)
+{
+	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
+
+	mtk_ethdr_config(ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0], w, h,
+			 vrefresh, bpc, cmdq_pkt);
+}
+
+void mtk_ovl_adaptor_start(struct device *dev)
+{
+	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
+
+	mtk_ethdr_start(ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0]);
+}
+
+void mtk_ovl_adaptor_stop(struct device *dev)
+{
+	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
+
+	mtk_ethdr_stop(ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0]);
+}
+
+int mtk_ovl_adaptor_clk_enable(struct device *dev)
+{
+	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
+	struct device *comp;
+	int ret;
+	int i;
+
+	for (i = 0; i < OVL_ADAPTOR_MERGE0; i++) {
+		comp = ovl_adaptor->ovl_adaptor_comp[i];
+		ret = pm_runtime_get_sync(comp);
+		if (ret < 0) {
+			dev_err(dev, "Failed to enable power domain %d, err %d\n", i, ret);
+			goto pwr_err;
+		}
+	}
+
+	for (i = 0; i < OVL_ADAPTOR_ID_MAX; i++) {
+		comp = ovl_adaptor->ovl_adaptor_comp[i];
+
+		if (i < OVL_ADAPTOR_MERGE0)
+			ret = mtk_mdp_rdma_clk_enable(comp);
+		else if (i < OVL_ADAPTOR_ETHDR0)
+			ret = mtk_merge_clk_enable(comp);
+		else
+			ret = mtk_ethdr_clk_enable(comp);
+		if (ret) {
+			dev_err(dev, "Failed to enable clock %d, err %d\n", i, ret);
+			goto clk_err;
+		}
+	}
+
+	return ret;
+
+clk_err:
+	while (--i >= 0) {
+		comp = ovl_adaptor->ovl_adaptor_comp[i];
+		if (i < OVL_ADAPTOR_MERGE0)
+			mtk_mdp_rdma_clk_disable(comp);
+		else if (i < OVL_ADAPTOR_ETHDR0)
+			mtk_merge_clk_disable(comp);
+		else
+			mtk_ethdr_clk_disable(comp);
+	}
+	i = OVL_ADAPTOR_MERGE0;
+
+pwr_err:
+	while (--i >= 0)
+		pm_runtime_put(ovl_adaptor->ovl_adaptor_comp[i]);
+
+	return ret;
+}
+
+void mtk_ovl_adaptor_clk_disable(struct device *dev)
+{
+	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
+	struct device *comp;
+	int i;
+
+	for (i = 0; i < OVL_ADAPTOR_ID_MAX; i++) {
+		comp = ovl_adaptor->ovl_adaptor_comp[i];
+
+		if (i < OVL_ADAPTOR_MERGE0) {
+			mtk_mdp_rdma_clk_disable(comp);
+			pm_runtime_put(comp);
+		} else if (i < OVL_ADAPTOR_ETHDR0) {
+			mtk_merge_clk_disable(comp);
+		} else {
+			mtk_ethdr_clk_disable(comp);
+		}
+	}
+}
+
+unsigned int mtk_ovl_adaptor_layer_nr(struct device *dev)
+{
+	return MTK_OVL_ADAPTOR_LAYER_NUM;
+}
+
+struct device *mtk_ovl_adaptor_dma_dev_get(struct device *dev)
+{
+	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
+
+	return ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_MDP_RDMA0];
+}
+
+void mtk_ovl_adaptor_register_vblank_cb(struct device *dev, void (*vblank_cb)(void *),
+					void *vblank_cb_data)
+{
+	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
+
+	mtk_ethdr_register_vblank_cb(ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0],
+				     vblank_cb, vblank_cb_data);
+}
+
+void mtk_ovl_adaptor_unregister_vblank_cb(struct device *dev)
+{
+	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
+
+	mtk_ethdr_unregister_vblank_cb(ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0]);
+}
+
+void mtk_ovl_adaptor_enable_vblank(struct device *dev)
+{
+	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
+
+	mtk_ethdr_enable_vblank(ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0]);
+}
+
+void mtk_ovl_adaptor_disable_vblank(struct device *dev)
+{
+	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
+
+	mtk_ethdr_disable_vblank(ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0]);
+}
+
+void mtk_ovl_adaptor_add_comp(struct device *dev, struct mtk_mutex *mutex)
+{
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MDP_RDMA0);
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MDP_RDMA1);
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MDP_RDMA2);
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MDP_RDMA3);
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MDP_RDMA4);
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MDP_RDMA5);
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MDP_RDMA6);
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MDP_RDMA7);
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MERGE1);
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MERGE2);
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MERGE3);
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MERGE4);
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_ETHDR_MIXER);
+}
+
+void mtk_ovl_adaptor_remove_comp(struct device *dev, struct mtk_mutex *mutex)
+{
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MDP_RDMA0);
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MDP_RDMA1);
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MDP_RDMA2);
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MDP_RDMA3);
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MDP_RDMA4);
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MDP_RDMA5);
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MDP_RDMA6);
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MDP_RDMA7);
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MERGE1);
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MERGE2);
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MERGE3);
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MERGE4);
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_ETHDR_MIXER);
+}
+
+void mtk_ovl_adaptor_connect(struct device *dev, struct device *mmsys_dev, unsigned int next)
+{
+	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_MDP_RDMA0, DDP_COMPONENT_MERGE1);
+	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_MDP_RDMA1, DDP_COMPONENT_MERGE1);
+	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_MDP_RDMA2, DDP_COMPONENT_MERGE2);
+	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_MERGE1, DDP_COMPONENT_ETHDR_MIXER);
+	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_MERGE2, DDP_COMPONENT_ETHDR_MIXER);
+	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_MERGE3, DDP_COMPONENT_ETHDR_MIXER);
+	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_MERGE4, DDP_COMPONENT_ETHDR_MIXER);
+	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_ETHDR_MIXER, next);
+}
+
+void mtk_ovl_adaptor_disconnect(struct device *dev, struct device *mmsys_dev, unsigned int next)
+{
+	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_MDP_RDMA0, DDP_COMPONENT_MERGE1);
+	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_MDP_RDMA1, DDP_COMPONENT_MERGE1);
+	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_MDP_RDMA2, DDP_COMPONENT_MERGE2);
+	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_MERGE1, DDP_COMPONENT_ETHDR_MIXER);
+	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_MERGE2, DDP_COMPONENT_ETHDR_MIXER);
+	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_MERGE3, DDP_COMPONENT_ETHDR_MIXER);
+	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_MERGE4, DDP_COMPONENT_ETHDR_MIXER);
+	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_ETHDR_MIXER, next);
+}
+
+static int ovl_adaptor_comp_get_id(struct device *dev, struct device_node *node,
+				   enum mtk_ovl_adaptor_comp_type type)
+{
+	int alias_id = of_alias_get_id(node, private_comp_stem[type]);
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(comp_matches); i++)
+		if (comp_matches[i].type == type &&
+		    comp_matches[i].alias_id == alias_id)
+			return i;
+
+	dev_warn(dev, "Failed to get id. type: %d, alias: %d\n", type, alias_id);
+	return -EINVAL;
+}
+
+static const struct of_device_id mtk_ovl_adaptor_comp_dt_ids[] = {
+	{
+		.compatible = "mediatek,mt8195-vdo1-rdma",
+		.data = (void *)OVL_ADAPTOR_TYPE_RDMA,
+	}, {
+		.compatible = "mediatek,mt8195-disp-merge",
+		.data = (void *)OVL_ADAPTOR_TYPE_MERGE,
+	}, {
+		.compatible = "mediatek,mt8195-disp-ethdr",
+		.data = (void *)OVL_ADAPTOR_TYPE_ETHDR,
+	},
+	{},
+};
+
+static int compare_of(struct device *dev, void *data)
+{
+	return dev->of_node == data;
+}
+
+static int ovl_adaptor_comp_init(struct device *dev, struct component_match **match)
+{
+	struct mtk_disp_ovl_adaptor *priv = dev_get_drvdata(dev);
+	struct device_node *node, *parent;
+	struct platform_device *comp_pdev;
+
+	parent = dev->parent->parent->of_node->parent;
+
+	for_each_child_of_node(parent, node) {
+		const struct of_device_id *of_id;
+		enum mtk_ovl_adaptor_comp_type type;
+		int id;
+
+		of_id = of_match_node(mtk_ovl_adaptor_comp_dt_ids, node);
+		if (!of_id)
+			continue;
+
+		if (!of_device_is_available(node)) {
+			dev_dbg(dev, "Skipping disabled component %pOF\n",
+				node);
+			continue;
+		}
+
+		type = (enum mtk_ovl_adaptor_comp_type)of_id->data;
+		id = ovl_adaptor_comp_get_id(dev, node, type);
+		if (id < 0) {
+			dev_warn(dev, "Skipping unknown component %pOF\n",
+				 node);
+			continue;
+		}
+
+		comp_pdev = of_find_device_by_node(node);
+		if (!comp_pdev)
+			return -EPROBE_DEFER;
+
+		priv->ovl_adaptor_comp[id] = &comp_pdev->dev;
+
+		drm_of_component_match_add(dev, match, compare_of, node);
+		dev_dbg(dev, "Adding component match for %pOF\n", node);
+	}
+
+	if (!*match) {
+		dev_err(dev, "No match device for ovl_adaptor\n");
+		return -ENODEV;
+	}
+
+	return 0;
+}
+
+static int mtk_disp_ovl_adaptor_comp_bind(struct device *dev, struct device *master,
+					  void *data)
+{
+	struct mtk_disp_ovl_adaptor *priv = dev_get_drvdata(dev);
+
+	if (!priv->children_bound)
+		return -EPROBE_DEFER;
+
+	return 0;
+}
+
+static void mtk_disp_ovl_adaptor_comp_unbind(struct device *dev, struct device *master,
+					     void *data)
+{
+}
+
+static const struct component_ops mtk_disp_ovl_adaptor_comp_ops = {
+	.bind	= mtk_disp_ovl_adaptor_comp_bind,
+	.unbind = mtk_disp_ovl_adaptor_comp_unbind,
+};
+
+static int mtk_disp_ovl_adaptor_master_bind(struct device *dev)
+{
+	struct mtk_disp_ovl_adaptor *priv = dev_get_drvdata(dev);
+	int ret;
+
+	ret = component_bind_all(dev, priv->mmsys_dev);
+	if (ret)
+		return dev_err_probe(dev, ret, "component_bind_all failed!\n");
+
+	priv->children_bound = true;
+	return 0;
+}
+
+static void mtk_disp_ovl_adaptor_master_unbind(struct device *dev)
+{
+	struct mtk_disp_ovl_adaptor *priv = dev_get_drvdata(dev);
+
+	priv->children_bound = false;
+}
+
+static const struct component_master_ops mtk_disp_ovl_adaptor_master_ops = {
+	.bind		= mtk_disp_ovl_adaptor_master_bind,
+	.unbind		= mtk_disp_ovl_adaptor_master_unbind,
+};
+
+static int mtk_disp_ovl_adaptor_probe(struct platform_device *pdev)
+{
+	struct mtk_disp_ovl_adaptor *priv;
+	struct device *dev = &pdev->dev;
+	struct component_match *match = NULL;
+	int ret;
+
+	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	platform_set_drvdata(pdev, priv);
+
+	ret = ovl_adaptor_comp_init(dev, &match);
+	if (ret < 0)
+		return ret;
+
+	priv->mmsys_dev = pdev->dev.platform_data;
+
+	component_master_add_with_match(dev, &mtk_disp_ovl_adaptor_master_ops, match);
+
+	pm_runtime_enable(dev);
+
+	ret = component_add(dev, &mtk_disp_ovl_adaptor_comp_ops);
+	if (ret != 0) {
+		pm_runtime_disable(dev);
+		dev_err(dev, "Failed to add component: %d\n", ret);
+	}
+
+	return ret;
+}
+
+static int mtk_disp_ovl_adaptor_remove(struct platform_device *pdev)
+{
+	component_master_del(&pdev->dev, &mtk_disp_ovl_adaptor_master_ops);
+	pm_runtime_disable(&pdev->dev);
+	return 0;
+}
+
+struct platform_driver mtk_disp_ovl_adaptor_driver = {
+	.probe		= mtk_disp_ovl_adaptor_probe,
+	.remove		= mtk_disp_ovl_adaptor_remove,
+	.driver		= {
+		.name	= "mediatek-disp-ovl-adaptor",
+		.owner	= THIS_MODULE,
+	},
+};
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
index 3fb85776b8b3..d27561e5e274 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
@@ -51,6 +51,7 @@ extern struct platform_driver mtk_disp_ccorr_driver;
 extern struct platform_driver mtk_disp_color_driver;
 extern struct platform_driver mtk_disp_gamma_driver;
 extern struct platform_driver mtk_disp_merge_driver;
+extern struct platform_driver mtk_disp_ovl_adaptor_driver;
 extern struct platform_driver mtk_disp_ovl_driver;
 extern struct platform_driver mtk_disp_rdma_driver;
 extern struct platform_driver mtk_dpi_driver;
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:10:11 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:10:11 +0800
Subject: [PATCH v29 7/7] drm/mediatek: add mediatek-drm of vdosys1 support for MT8195
In-Reply-To: <20221227081011.6426-1-nancy.lin@mediatek.com>
References: <20221227081011.6426-1-nancy.lin@mediatek.com>
Message-ID: <20221227081011.6426-8-nancy.lin@mediatek.com>

Add driver data of mt8195 vdosys1 to mediatek-drm.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
---
 drivers/gpu/drm/mediatek/mtk_drm_drv.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index 442ef79d5a3f..b0b584440e1a 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -208,6 +208,12 @@ static const unsigned int mt8195_mtk_ddp_main[] = {
 	DDP_COMPONENT_DP_INTF0,
 };
 
+static const unsigned int mt8195_mtk_ddp_ext[] = {
+	DDP_COMPONENT_DRM_OVL_ADAPTOR,
+	DDP_COMPONENT_MERGE5,
+	DDP_COMPONENT_DP_INTF1,
+};
+
 static const struct mtk_mmsys_driver_data mt2701_mmsys_driver_data = {
 	.main_path = mt2701_mtk_ddp_main,
 	.main_len = ARRAY_SIZE(mt2701_mtk_ddp_main),
@@ -277,7 +283,14 @@ static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
 static const struct mtk_mmsys_driver_data mt8195_vdosys0_driver_data = {
 	.main_path = mt8195_mtk_ddp_main,
 	.main_len = ARRAY_SIZE(mt8195_mtk_ddp_main),
-	.mmsys_dev_num = 1,
+	.mmsys_dev_num = 2,
+};
+
+static const struct mtk_mmsys_driver_data mt8195_vdosys1_driver_data = {
+	.ext_path = mt8195_mtk_ddp_ext,
+	.ext_len = ARRAY_SIZE(mt8195_mtk_ddp_ext),
+	.mmsys_id = 1,
+	.mmsys_dev_num = 2,
 };
 
 static const struct of_device_id mtk_drm_of_ids[] = {
@@ -301,6 +314,8 @@ static const struct of_device_id mtk_drm_of_ids[] = {
 	  .data = &mt8195_vdosys0_driver_data},
 	{ .compatible = "mediatek,mt8195-vdosys0",
 	  .data = &mt8195_vdosys0_driver_data},
+	{ .compatible = "mediatek,mt8195-vdosys1",
+	  .data = &mt8195_vdosys1_driver_data},
 	{ }
 };
 MODULE_DEVICE_TABLE(of, mtk_drm_of_ids);
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:10:08 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:10:08 +0800
Subject: [PATCH v29 4/7] drm/mediatek: add dma dev get function
In-Reply-To: <20221227081011.6426-1-nancy.lin@mediatek.com>
References: <20221227081011.6426-1-nancy.lin@mediatek.com>
Message-ID: <20221227081011.6426-5-nancy.lin@mediatek.com>

This is a preparation for adding support for the ovl_adaptor sub driver
Ovl_adaptor is a DRM sub driver, which doesn't have dma dev. Add
dma_dev_get function for getting representative dma dev in ovl_adaptor.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioachino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
---
 drivers/gpu/drm/mediatek/mtk_drm_crtc.c     | 15 +++++++++++++++
 drivers/gpu/drm/mediatek/mtk_drm_crtc.h     |  1 +
 drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h |  8 ++++++++
 3 files changed, 24 insertions(+)

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
index 112615817dcb..78e20f604158 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
@@ -58,6 +58,7 @@ struct mtk_drm_crtc {
 #endif
 
 	struct device			*mmsys_dev;
+	struct device			*dma_dev;
 	struct mtk_mutex		*mutex;
 	unsigned int			ddp_comp_nr;
 	struct mtk_ddp_comp		**ddp_comp;
@@ -865,6 +866,13 @@ static int mtk_drm_crtc_init_comp_planes(struct drm_device *drm_dev,
 	return 0;
 }
 
+struct device *mtk_drm_crtc_dma_dev_get(struct drm_crtc *crtc)
+{
+	struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);
+
+	return mtk_crtc->dma_dev;
+}
+
 int mtk_drm_crtc_create(struct drm_device *drm_dev,
 			const enum mtk_ddp_comp_id *path, unsigned int path_len)
 {
@@ -953,6 +961,13 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
 			return ret;
 	}
 
+	/*
+	 * Default to use the first component as the dma dev.
+	 * In the case of ovl_adaptor sub driver, it needs to use the
+	 * dma_dev_get function to get representative dma dev.
+	 */
+	mtk_crtc->dma_dev = mtk_ddp_comp_dma_dev_get(&priv->ddp_comp[path[0]]);
+
 	ret = mtk_drm_crtc_init(drm_dev, mtk_crtc, pipe);
 	if (ret < 0)
 		return ret;
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h
index cb9a36c48d4f..f5a6e80c5265 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h
@@ -22,5 +22,6 @@ int mtk_drm_crtc_plane_check(struct drm_crtc *crtc, struct drm_plane *plane,
 			     struct mtk_plane_state *state);
 void mtk_drm_crtc_async_update(struct drm_crtc *crtc, struct drm_plane *plane,
 			       struct drm_atomic_state *plane_state);
+struct device *mtk_drm_crtc_dma_dev_get(struct drm_crtc *crtc);
 
 #endif /* MTK_DRM_CRTC_H */
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
index 2d0052c23dcb..364f3f7f59fa 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
@@ -71,6 +71,7 @@ struct mtk_ddp_comp_funcs {
 	void (*bgclr_in_off)(struct device *dev);
 	void (*ctm_set)(struct device *dev,
 			struct drm_crtc_state *state);
+	struct device * (*dma_dev_get)(struct device *dev);
 };
 
 struct mtk_ddp_comp {
@@ -203,6 +204,13 @@ static inline void mtk_ddp_ctm_set(struct mtk_ddp_comp *comp,
 		comp->funcs->ctm_set(comp->dev, state);
 }
 
+static inline struct device *mtk_ddp_comp_dma_dev_get(struct mtk_ddp_comp *comp)
+{
+	if (comp->funcs && comp->funcs->dma_dev_get)
+		return comp->funcs->dma_dev_get(comp->dev);
+	return comp->dev;
+}
+
 int mtk_ddp_comp_get_id(struct device_node *node,
 			enum mtk_ddp_comp_type comp_type);
 unsigned int mtk_drm_find_possible_crtc_by_comp(struct drm_device *drm,
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:10:05 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:10:05 +0800
Subject: [PATCH v29 1/7] dt-bindings: mediatek: add ethdr definition for mt8195
In-Reply-To: <20221227081011.6426-1-nancy.lin@mediatek.com>
References: <20221227081011.6426-1-nancy.lin@mediatek.com>
Message-ID: <20221227081011.6426-2-nancy.lin@mediatek.com>

Add vdosys1 ETHDR definition.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: Chun-Kuang Hu <chunkuang.hu at kernel.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 .../display/mediatek/mediatek,ethdr.yaml      | 188 ++++++++++++++++++
 1 file changed, 188 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/mediatek/mediatek,ethdr.yaml

diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,ethdr.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,ethdr.yaml
new file mode 100644
index 000000000000..3b11e47a8834
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,ethdr.yaml
@@ -0,0 +1,188 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/mediatek/mediatek,ethdr.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek Ethdr Device
+
+maintainers:
+  - Chun-Kuang Hu <chunkuang.hu at kernel.org>
+  - Philipp Zabel <p.zabel at pengutronix.de>
+
+description:
+  ETHDR (ET High Dynamic Range) is a MediaTek internal HDR engine and is
+  designed for HDR video and graphics conversion in the external display path.
+  It handles multiple HDR input types and performs tone mapping, color
+  space/color format conversion, and then combine different layers,
+  output the required HDR or SDR signal to the subsequent display path.
+  This engine is composed of two video frontends, two graphic frontends,
+  one video backend and a mixer. ETHDR has two DMA function blocks, DS and ADL.
+  These two function blocks read the pre-programmed registers from DRAM and
+  set them to HW in the v-blanking period.
+
+properties:
+  compatible:
+    const: mediatek,mt8195-disp-ethdr
+
+  reg:
+    maxItems: 7
+
+  reg-names:
+    items:
+      - const: mixer
+      - const: vdo_fe0
+      - const: vdo_fe1
+      - const: gfx_fe0
+      - const: gfx_fe1
+      - const: vdo_be
+      - const: adl_ds
+
+  interrupts:
+    maxItems: 1
+
+  iommus:
+    minItems: 1
+    maxItems: 2
+
+  clocks:
+    items:
+      - description: mixer clock
+      - description: video frontend 0 clock
+      - description: video frontend 1 clock
+      - description: graphic frontend 0 clock
+      - description: graphic frontend 1 clock
+      - description: video backend clock
+      - description: autodownload and menuload clock
+      - description: video frontend 0 async clock
+      - description: video frontend 1 async clock
+      - description: graphic frontend 0 async clock
+      - description: graphic frontend 1 async clock
+      - description: video backend async clock
+      - description: ethdr top clock
+
+  clock-names:
+    items:
+      - const: mixer
+      - const: vdo_fe0
+      - const: vdo_fe1
+      - const: gfx_fe0
+      - const: gfx_fe1
+      - const: vdo_be
+      - const: adl_ds
+      - const: vdo_fe0_async
+      - const: vdo_fe1_async
+      - const: gfx_fe0_async
+      - const: gfx_fe1_async
+      - const: vdo_be_async
+      - const: ethdr_top
+
+  power-domains:
+    maxItems: 1
+
+  resets:
+    items:
+      - description: video frontend 0 async reset
+      - description: video frontend 1 async reset
+      - description: graphic frontend 0 async reset
+      - description: graphic frontend 1 async reset
+      - description: video backend async reset
+
+  reset-names:
+    items:
+      - const: vdo_fe0_async
+      - const: vdo_fe1_async
+      - const: gfx_fe0_async
+      - const: gfx_fe1_async
+      - const: vdo_be_async
+
+  mediatek,gce-client-reg:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    description: The register of display function block to be set by gce.
+      There are 4 arguments in this property, gce node, subsys id, offset and
+      register size. The subsys id is defined in the gce header of each chips
+      include/dt-bindings/gce/<chip>-gce.h, mapping to the register of display
+      function block.
+    items:
+      items:
+        - description: phandle of GCE
+        - description: GCE subsys id
+        - description: register offset
+        - description: register size
+    minItems: 7
+    maxItems: 7
+
+required:
+  - compatible
+  - reg
+  - clocks
+  - clock-names
+  - interrupts
+  - power-domains
+  - resets
+  - mediatek,gce-client-reg
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/clock/mt8195-clk.h>
+    #include <dt-bindings/gce/mt8195-gce.h>
+    #include <dt-bindings/memory/mt8195-memory-port.h>
+    #include <dt-bindings/power/mt8195-power.h>
+    #include <dt-bindings/reset/mt8195-resets.h>
+
+    soc {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        hdr-engine at 1c114000 {
+                compatible = "mediatek,mt8195-disp-ethdr";
+                reg = <0 0x1c114000 0 0x1000>,
+                      <0 0x1c115000 0 0x1000>,
+                      <0 0x1c117000 0 0x1000>,
+                      <0 0x1c119000 0 0x1000>,
+                      <0 0x1c11a000 0 0x1000>,
+                      <0 0x1c11b000 0 0x1000>,
+                      <0 0x1c11c000 0 0x1000>;
+                reg-names = "mixer", "vdo_fe0", "vdo_fe1", "gfx_fe0", "gfx_fe1",
+                            "vdo_be", "adl_ds";
+                mediatek,gce-client-reg = <&gce0 SUBSYS_1c11XXXX 0x4000 0x1000>,
+                                          <&gce0 SUBSYS_1c11XXXX 0x5000 0x1000>,
+                                          <&gce0 SUBSYS_1c11XXXX 0x7000 0x1000>,
+                                          <&gce0 SUBSYS_1c11XXXX 0x9000 0x1000>,
+                                          <&gce0 SUBSYS_1c11XXXX 0xa000 0x1000>,
+                                          <&gce0 SUBSYS_1c11XXXX 0xb000 0x1000>,
+                                          <&gce0 SUBSYS_1c11XXXX 0xc000 0x1000>;
+                clocks = <&vdosys1 CLK_VDO1_DISP_MIXER>,
+                         <&vdosys1 CLK_VDO1_HDR_VDO_FE0>,
+                         <&vdosys1 CLK_VDO1_HDR_VDO_FE1>,
+                         <&vdosys1 CLK_VDO1_HDR_GFX_FE0>,
+                         <&vdosys1 CLK_VDO1_HDR_GFX_FE1>,
+                         <&vdosys1 CLK_VDO1_HDR_VDO_BE>,
+                         <&vdosys1 CLK_VDO1_26M_SLOW>,
+                         <&vdosys1 CLK_VDO1_HDR_VDO_FE0_DL_ASYNC>,
+                         <&vdosys1 CLK_VDO1_HDR_VDO_FE1_DL_ASYNC>,
+                         <&vdosys1 CLK_VDO1_HDR_GFX_FE0_DL_ASYNC>,
+                         <&vdosys1 CLK_VDO1_HDR_GFX_FE1_DL_ASYNC>,
+                         <&vdosys1 CLK_VDO1_HDR_VDO_BE_DL_ASYNC>,
+                         <&topckgen CLK_TOP_ETHDR>;
+                clock-names = "mixer", "vdo_fe0", "vdo_fe1", "gfx_fe0", "gfx_fe1",
+                              "vdo_be", "adl_ds", "vdo_fe0_async", "vdo_fe1_async",
+                              "gfx_fe0_async", "gfx_fe1_async","vdo_be_async",
+                              "ethdr_top";
+                power-domains = <&spm MT8195_POWER_DOMAIN_VDOSYS1>;
+                iommus = <&iommu_vpp M4U_PORT_L3_HDR_DS>,
+                         <&iommu_vpp M4U_PORT_L3_HDR_ADL>;
+                interrupts = <GIC_SPI 517 IRQ_TYPE_LEVEL_HIGH 0>; /* disp mixer */
+                resets = <&vdosys1 MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE0_DL_ASYNC>,
+                         <&vdosys1 MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE1_DL_ASYNC>,
+                         <&vdosys1 MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE0_DL_ASYNC>,
+                         <&vdosys1 MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE1_DL_ASYNC>,
+                         <&vdosys1 MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_BE_DL_ASYNC>;
+                reset-names = "vdo_fe0_async", "vdo_fe1_async", "gfx_fe0_async",
+                              "gfx_fe1_async", "vdo_be_async";
+        };
+    };
+...
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:04:42 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:42 +0800
Subject: [PATCH v29 10/11] soc: mediatek: add mtk-mutex component - dp_intf1
In-Reply-To: <20221227080443.6273-1-nancy.lin@mediatek.com>
References: <20221227080443.6273-1-nancy.lin@mediatek.com>
Message-ID: <20221227080443.6273-11-nancy.lin@mediatek.com>

Add mtk-mutex DDP_COMPONENT_DP_INTF1 component. The MT8195 vdosys1 path
component contains ovl_adaptor, merge5, and dp_intf1. It is a preparation
for adding support for MT8195 vdosys1 path component.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
---
 drivers/soc/mediatek/mtk-mutex.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/soc/mediatek/mtk-mutex.c b/drivers/soc/mediatek/mtk-mutex.c
index c1a33d52038e..41cba6aa0e83 100644
--- a/drivers/soc/mediatek/mtk-mutex.c
+++ b/drivers/soc/mediatek/mtk-mutex.c
@@ -602,6 +602,9 @@ void mtk_mutex_add_comp(struct mtk_mutex *mutex,
 	case DDP_COMPONENT_DP_INTF0:
 		sof_id = MUTEX_SOF_DP_INTF0;
 		break;
+	case DDP_COMPONENT_DP_INTF1:
+		sof_id = MUTEX_SOF_DP_INTF1;
+		break;
 	default:
 		if (mtx->data->mutex_mod[id] < 32) {
 			offset = DISP_REG_MUTEX_MOD(mtx->data->mutex_mod_reg,
@@ -642,6 +645,7 @@ void mtk_mutex_remove_comp(struct mtk_mutex *mutex,
 	case DDP_COMPONENT_DPI0:
 	case DDP_COMPONENT_DPI1:
 	case DDP_COMPONENT_DP_INTF0:
+	case DDP_COMPONENT_DP_INTF1:
 		writel_relaxed(MUTEX_SOF_SINGLE_MODE,
 			       mtx->regs +
 			       DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg,
-- 
2.18.0



From jason-jh.lin at mediatek.com  Mon Dec 26 23:47:57 2022
From: jason-jh.lin at mediatek.com (Jason-JH.Lin)
Date: Tue, 27 Dec 2022 15:47:57 +0800
Subject: [PATCH v7 0/2] Change mmsys compatible for mt8195 mediatek-drm
Message-ID: <20221227074759.5216-1-jason-jh.lin@mediatek.com>

For previous MediaTek SoCs, such as MT8173, there are 2 display HW
pipelines binding to 1 mmsys with the same power domain, the same
clock driver and the same mediatek-drm driver.

For MT8195, VDOSYS0 and VDOSYS1 are 2 display HW pipelines binding to
2 different power domains, different clock drivers and different
mediatek-drm drivers.

Moreover, Hardware pipeline of VDOSYS0 has these components: COLOR,
CCORR, AAL, GAMMA, DITHER. They are related to the PQ (Picture Quality)
and they makes VDOSYS0 supports PQ function while they are not
including in VDOSYS1.

Hardware pipeline of VDOSYS1 has the component ETHDR (HDR related
component). It makes VDOSYS1 supports the HDR function while it's not
including in VDOSYS0.

To summarize0:
Only VDOSYS0 can support PQ adjustment.
Only VDOSYS1 can support HDR adjustment.

Therefore, we need to separate these two different mmsys hardwares to
2 different compatibles for MT8195.
---
Change in v7:
1. Rebase on v6.2-rc1.
2. Squash patch 1 and 2 in v6.

Change in v6:
1. Add old driver data for mediatek-drm driver with deprecated compatible name.

Change in v5:
1. Add oneOf item to deprecate mediatek,mt8195-mmsys.

Change in v4:
1. Deprecate original mediatek,mt8195-mmsys at the first item.

Change in v3:
1. Keep the original compatible "mediatek,mt8195-mmsys" and add
   "mediatek,mt8195-vdosys0" into the same item to make the tree
   fallback compatible.

Change in v2:
1. Remove Ack tag in the first patch
2. Change the compatible name changing patch to one revert patch and
   one add vdosys0 support patch.
---

Jason-JH.Lin (2):
  drm/mediatek: change mmsys compatible for mt8195 mediatek-drm
  soc: mediatek: remove DDP_DOMPONENT_DITHER from enum

 drivers/gpu/drm/mediatek/mtk_disp_rdma.c |   6 ++
 drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 128 +++--------------------
 drivers/gpu/drm/mediatek/mtk_drm_drv.h   |   6 --
 include/linux/soc/mediatek/mtk-mmsys.h   |   3 +-
 4 files changed, 21 insertions(+), 122 deletions(-)

-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:10:10 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:10:10 +0800
Subject: [PATCH v29 6/7] drm/mediatek: add drm ovl_adaptor sub driver for MT8195
In-Reply-To: <20221227081011.6426-1-nancy.lin@mediatek.com>
References: <20221227081011.6426-1-nancy.lin@mediatek.com>
Message-ID: <20221227081011.6426-7-nancy.lin@mediatek.com>

Add drm ovl_adaptor sub driver. Bring up ovl_adaptor sub driver if
the component exists in the path.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
Tested-by: N?colas F. R. A. Prado <nfraprado at collabora.com>
---
 drivers/gpu/drm/mediatek/mtk_drm_crtc.c     |  50 +++++---
 drivers/gpu/drm/mediatek/mtk_drm_crtc.h     |   2 +-
 drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c | 129 ++++++++++++--------
 drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h |  50 +++++++-
 drivers/gpu/drm/mediatek/mtk_drm_drv.c      |  78 ++++++------
 drivers/gpu/drm/mediatek/mtk_drm_drv.h      |  12 +-
 6 files changed, 207 insertions(+), 114 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
index 30dcb65d8a5a..c79a2f456482 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
@@ -379,13 +379,17 @@ static int mtk_crtc_ddp_hw_init(struct mtk_drm_crtc *mtk_crtc)
 	}
 
 	for (i = 0; i < mtk_crtc->ddp_comp_nr - 1; i++) {
-		mtk_mmsys_ddp_connect(mtk_crtc->mmsys_dev,
-				      mtk_crtc->ddp_comp[i]->id,
-				      mtk_crtc->ddp_comp[i + 1]->id);
-		mtk_mutex_add_comp(mtk_crtc->mutex,
-					mtk_crtc->ddp_comp[i]->id);
+		if (!mtk_ddp_comp_connect(mtk_crtc->ddp_comp[i], mtk_crtc->mmsys_dev,
+					  mtk_crtc->ddp_comp[i + 1]->id))
+			mtk_mmsys_ddp_connect(mtk_crtc->mmsys_dev,
+					      mtk_crtc->ddp_comp[i]->id,
+					      mtk_crtc->ddp_comp[i + 1]->id);
+		if (!mtk_ddp_comp_add(mtk_crtc->ddp_comp[i], mtk_crtc->mutex))
+			mtk_mutex_add_comp(mtk_crtc->mutex,
+					   mtk_crtc->ddp_comp[i]->id);
 	}
-	mtk_mutex_add_comp(mtk_crtc->mutex, mtk_crtc->ddp_comp[i]->id);
+	if (!mtk_ddp_comp_add(mtk_crtc->ddp_comp[i], mtk_crtc->mutex))
+		mtk_mutex_add_comp(mtk_crtc->mutex, mtk_crtc->ddp_comp[i]->id);
 	mtk_mutex_enable(mtk_crtc->mutex);
 
 	for (i = 0; i < mtk_crtc->ddp_comp_nr; i++) {
@@ -434,17 +438,22 @@ static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc)
 	}
 
 	for (i = 0; i < mtk_crtc->ddp_comp_nr; i++)
-		mtk_mutex_remove_comp(mtk_crtc->mutex,
-					   mtk_crtc->ddp_comp[i]->id);
+		if (!mtk_ddp_comp_remove(mtk_crtc->ddp_comp[i], mtk_crtc->mutex))
+			mtk_mutex_remove_comp(mtk_crtc->mutex,
+					      mtk_crtc->ddp_comp[i]->id);
 	mtk_mutex_disable(mtk_crtc->mutex);
 	for (i = 0; i < mtk_crtc->ddp_comp_nr - 1; i++) {
-		mtk_mmsys_ddp_disconnect(mtk_crtc->mmsys_dev,
-					 mtk_crtc->ddp_comp[i]->id,
-					 mtk_crtc->ddp_comp[i + 1]->id);
-		mtk_mutex_remove_comp(mtk_crtc->mutex,
-					   mtk_crtc->ddp_comp[i]->id);
+		if (!mtk_ddp_comp_disconnect(mtk_crtc->ddp_comp[i], mtk_crtc->mmsys_dev,
+					     mtk_crtc->ddp_comp[i + 1]->id))
+			mtk_mmsys_ddp_disconnect(mtk_crtc->mmsys_dev,
+						 mtk_crtc->ddp_comp[i]->id,
+						 mtk_crtc->ddp_comp[i + 1]->id);
+		if (!mtk_ddp_comp_remove(mtk_crtc->ddp_comp[i], mtk_crtc->mutex))
+			mtk_mutex_remove_comp(mtk_crtc->mutex,
+					      mtk_crtc->ddp_comp[i]->id);
 	}
-	mtk_mutex_remove_comp(mtk_crtc->mutex, mtk_crtc->ddp_comp[i]->id);
+	if (!mtk_ddp_comp_remove(mtk_crtc->ddp_comp[i], mtk_crtc->mutex))
+		mtk_mutex_remove_comp(mtk_crtc->mutex, mtk_crtc->ddp_comp[i]->id);
 	mtk_crtc_ddp_clk_disable(mtk_crtc);
 	mtk_mutex_unprepare(mtk_crtc->mutex);
 
@@ -874,7 +883,7 @@ struct device *mtk_drm_crtc_dma_dev_get(struct drm_crtc *crtc)
 }
 
 int mtk_drm_crtc_create(struct drm_device *drm_dev,
-			const enum mtk_ddp_comp_id *path, unsigned int path_len,
+			const unsigned int *path, unsigned int path_len,
 			int priv_data_index)
 {
 	struct mtk_drm_private *priv = drm_dev->dev_private;
@@ -904,10 +913,13 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
 		node = priv->comp_node[comp_id];
 		comp = &priv->ddp_comp[comp_id];
 
-		if (!node) {
+		/* Not all drm components have a DTS device node, such as ovl_adaptor,
+		 * which is the drm bring up sub driver
+		 */
+		if (!node && comp_id != DDP_COMPONENT_DRM_OVL_ADAPTOR) {
 			dev_info(dev,
-				 "Not creating crtc %d because component %d is disabled or missing\n",
-				 crtc_i, comp_id);
+				"Not creating crtc %d because component %d is disabled or missing\n",
+				crtc_i, comp_id);
 			return 0;
 		}
 
@@ -937,7 +949,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
 	}
 
 	for (i = 0; i < mtk_crtc->ddp_comp_nr; i++) {
-		enum mtk_ddp_comp_id comp_id = path[i];
+		unsigned int comp_id = path[i];
 		struct mtk_ddp_comp *comp;
 
 		comp = &priv->ddp_comp[comp_id];
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h
index 606f72f35924..3e9046993d09 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h
@@ -16,7 +16,7 @@
 
 void mtk_drm_crtc_commit(struct drm_crtc *crtc);
 int mtk_drm_crtc_create(struct drm_device *drm_dev,
-			const enum mtk_ddp_comp_id *path,
+			const unsigned int *path,
 			unsigned int path_len,
 			int priv_data_index);
 int mtk_drm_crtc_plane_check(struct drm_crtc *crtc, struct drm_plane *plane,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
index 6b6d5335c834..8cb76f2a40e7 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
@@ -389,6 +389,25 @@ static const struct mtk_ddp_comp_funcs ddp_ufoe = {
 	.start = mtk_ufoe_start,
 };
 
+static const struct mtk_ddp_comp_funcs ddp_ovl_adaptor = {
+	.clk_enable = mtk_ovl_adaptor_clk_enable,
+	.clk_disable = mtk_ovl_adaptor_clk_disable,
+	.config = mtk_ovl_adaptor_config,
+	.start = mtk_ovl_adaptor_start,
+	.stop = mtk_ovl_adaptor_stop,
+	.layer_nr = mtk_ovl_adaptor_layer_nr,
+	.layer_config = mtk_ovl_adaptor_layer_config,
+	.register_vblank_cb = mtk_ovl_adaptor_register_vblank_cb,
+	.unregister_vblank_cb = mtk_ovl_adaptor_unregister_vblank_cb,
+	.enable_vblank = mtk_ovl_adaptor_enable_vblank,
+	.disable_vblank = mtk_ovl_adaptor_disable_vblank,
+	.dma_dev_get = mtk_ovl_adaptor_dma_dev_get,
+	.connect = mtk_ovl_adaptor_connect,
+	.disconnect = mtk_ovl_adaptor_disconnect,
+	.add = mtk_ovl_adaptor_add_comp,
+	.remove = mtk_ovl_adaptor_remove_comp,
+};
+
 static const char * const mtk_ddp_comp_stem[MTK_DDP_COMP_TYPE_MAX] = {
 	[MTK_DISP_AAL] = "aal",
 	[MTK_DISP_BLS] = "bls",
@@ -402,6 +421,7 @@ static const char * const mtk_ddp_comp_stem[MTK_DDP_COMP_TYPE_MAX] = {
 	[MTK_DISP_OD] = "od",
 	[MTK_DISP_OVL] = "ovl",
 	[MTK_DISP_OVL_2L] = "ovl-2l",
+	[MTK_DISP_OVL_ADAPTOR] = "ovl_adaptor",
 	[MTK_DISP_POSTMASK] = "postmask",
 	[MTK_DISP_PWM] = "pwm",
 	[MTK_DISP_RDMA] = "rdma",
@@ -418,53 +438,54 @@ struct mtk_ddp_comp_match {
 	const struct mtk_ddp_comp_funcs *funcs;
 };
 
-static const struct mtk_ddp_comp_match mtk_ddp_matches[DDP_COMPONENT_ID_MAX] = {
-	[DDP_COMPONENT_AAL0]		= { MTK_DISP_AAL,	0, &ddp_aal },
-	[DDP_COMPONENT_AAL1]		= { MTK_DISP_AAL,	1, &ddp_aal },
-	[DDP_COMPONENT_BLS]		= { MTK_DISP_BLS,	0, NULL },
-	[DDP_COMPONENT_CCORR]		= { MTK_DISP_CCORR,	0, &ddp_ccorr },
-	[DDP_COMPONENT_COLOR0]		= { MTK_DISP_COLOR,	0, &ddp_color },
-	[DDP_COMPONENT_COLOR1]		= { MTK_DISP_COLOR,	1, &ddp_color },
-	[DDP_COMPONENT_DITHER0]		= { MTK_DISP_DITHER,	0, &ddp_dither },
-	[DDP_COMPONENT_DP_INTF0]	= { MTK_DP_INTF,	0, &ddp_dpi },
-	[DDP_COMPONENT_DP_INTF1]	= { MTK_DP_INTF,	1, &ddp_dpi },
-	[DDP_COMPONENT_DPI0]		= { MTK_DPI,		0, &ddp_dpi },
-	[DDP_COMPONENT_DPI1]		= { MTK_DPI,		1, &ddp_dpi },
-	[DDP_COMPONENT_DSC0]		= { MTK_DISP_DSC,	0, &ddp_dsc },
-	[DDP_COMPONENT_DSC1]		= { MTK_DISP_DSC,	1, &ddp_dsc },
-	[DDP_COMPONENT_DSI0]		= { MTK_DSI,		0, &ddp_dsi },
-	[DDP_COMPONENT_DSI1]		= { MTK_DSI,		1, &ddp_dsi },
-	[DDP_COMPONENT_DSI2]		= { MTK_DSI,		2, &ddp_dsi },
-	[DDP_COMPONENT_DSI3]		= { MTK_DSI,		3, &ddp_dsi },
-	[DDP_COMPONENT_GAMMA]		= { MTK_DISP_GAMMA,	0, &ddp_gamma },
-	[DDP_COMPONENT_MERGE0]		= { MTK_DISP_MERGE,	0, &ddp_merge },
-	[DDP_COMPONENT_MERGE1]		= { MTK_DISP_MERGE,	1, &ddp_merge },
-	[DDP_COMPONENT_MERGE2]		= { MTK_DISP_MERGE,	2, &ddp_merge },
-	[DDP_COMPONENT_MERGE3]		= { MTK_DISP_MERGE,	3, &ddp_merge },
-	[DDP_COMPONENT_MERGE4]		= { MTK_DISP_MERGE,	4, &ddp_merge },
-	[DDP_COMPONENT_MERGE5]		= { MTK_DISP_MERGE,	5, &ddp_merge },
-	[DDP_COMPONENT_OD0]		= { MTK_DISP_OD,	0, &ddp_od },
-	[DDP_COMPONENT_OD1]		= { MTK_DISP_OD,	1, &ddp_od },
-	[DDP_COMPONENT_OVL0]		= { MTK_DISP_OVL,	0, &ddp_ovl },
-	[DDP_COMPONENT_OVL1]		= { MTK_DISP_OVL,	1, &ddp_ovl },
-	[DDP_COMPONENT_OVL_2L0]		= { MTK_DISP_OVL_2L,	0, &ddp_ovl },
-	[DDP_COMPONENT_OVL_2L1]		= { MTK_DISP_OVL_2L,	1, &ddp_ovl },
-	[DDP_COMPONENT_OVL_2L2]		= { MTK_DISP_OVL_2L,    2, &ddp_ovl },
-	[DDP_COMPONENT_POSTMASK0]	= { MTK_DISP_POSTMASK,	0, &ddp_postmask },
-	[DDP_COMPONENT_PWM0]		= { MTK_DISP_PWM,	0, NULL },
-	[DDP_COMPONENT_PWM1]		= { MTK_DISP_PWM,	1, NULL },
-	[DDP_COMPONENT_PWM2]		= { MTK_DISP_PWM,	2, NULL },
-	[DDP_COMPONENT_RDMA0]		= { MTK_DISP_RDMA,	0, &ddp_rdma },
-	[DDP_COMPONENT_RDMA1]		= { MTK_DISP_RDMA,	1, &ddp_rdma },
-	[DDP_COMPONENT_RDMA2]		= { MTK_DISP_RDMA,	2, &ddp_rdma },
-	[DDP_COMPONENT_RDMA4]		= { MTK_DISP_RDMA,      4, &ddp_rdma },
-	[DDP_COMPONENT_UFOE]		= { MTK_DISP_UFOE,	0, &ddp_ufoe },
-	[DDP_COMPONENT_WDMA0]		= { MTK_DISP_WDMA,	0, NULL },
-	[DDP_COMPONENT_WDMA1]		= { MTK_DISP_WDMA,	1, NULL },
+static const struct mtk_ddp_comp_match mtk_ddp_matches[DDP_COMPONENT_DRM_ID_MAX] = {
+	[DDP_COMPONENT_AAL0]		= { MTK_DISP_AAL,		0, &ddp_aal },
+	[DDP_COMPONENT_AAL1]		= { MTK_DISP_AAL,		1, &ddp_aal },
+	[DDP_COMPONENT_BLS]		= { MTK_DISP_BLS,		0, NULL },
+	[DDP_COMPONENT_CCORR]		= { MTK_DISP_CCORR,		0, &ddp_ccorr },
+	[DDP_COMPONENT_COLOR0]		= { MTK_DISP_COLOR,		0, &ddp_color },
+	[DDP_COMPONENT_COLOR1]		= { MTK_DISP_COLOR,		1, &ddp_color },
+	[DDP_COMPONENT_DITHER0]		= { MTK_DISP_DITHER,		0, &ddp_dither },
+	[DDP_COMPONENT_DP_INTF0]	= { MTK_DP_INTF,		0, &ddp_dpi },
+	[DDP_COMPONENT_DP_INTF1]	= { MTK_DP_INTF,		1, &ddp_dpi },
+	[DDP_COMPONENT_DPI0]		= { MTK_DPI,			0, &ddp_dpi },
+	[DDP_COMPONENT_DPI1]		= { MTK_DPI,			1, &ddp_dpi },
+	[DDP_COMPONENT_DRM_OVL_ADAPTOR]	= { MTK_DISP_OVL_ADAPTOR,	0, &ddp_ovl_adaptor },
+	[DDP_COMPONENT_DSC0]		= { MTK_DISP_DSC,		0, &ddp_dsc },
+	[DDP_COMPONENT_DSC1]		= { MTK_DISP_DSC,		1, &ddp_dsc },
+	[DDP_COMPONENT_DSI0]		= { MTK_DSI,			0, &ddp_dsi },
+	[DDP_COMPONENT_DSI1]		= { MTK_DSI,			1, &ddp_dsi },
+	[DDP_COMPONENT_DSI2]		= { MTK_DSI,			2, &ddp_dsi },
+	[DDP_COMPONENT_DSI3]		= { MTK_DSI,			3, &ddp_dsi },
+	[DDP_COMPONENT_GAMMA]		= { MTK_DISP_GAMMA,		0, &ddp_gamma },
+	[DDP_COMPONENT_MERGE0]		= { MTK_DISP_MERGE,		0, &ddp_merge },
+	[DDP_COMPONENT_MERGE1]		= { MTK_DISP_MERGE,		1, &ddp_merge },
+	[DDP_COMPONENT_MERGE2]		= { MTK_DISP_MERGE,		2, &ddp_merge },
+	[DDP_COMPONENT_MERGE3]		= { MTK_DISP_MERGE,		3, &ddp_merge },
+	[DDP_COMPONENT_MERGE4]		= { MTK_DISP_MERGE,		4, &ddp_merge },
+	[DDP_COMPONENT_MERGE5]		= { MTK_DISP_MERGE,		5, &ddp_merge },
+	[DDP_COMPONENT_OD0]		= { MTK_DISP_OD,		0, &ddp_od },
+	[DDP_COMPONENT_OD1]		= { MTK_DISP_OD,		1, &ddp_od },
+	[DDP_COMPONENT_OVL0]		= { MTK_DISP_OVL,		0, &ddp_ovl },
+	[DDP_COMPONENT_OVL1]		= { MTK_DISP_OVL,		1, &ddp_ovl },
+	[DDP_COMPONENT_OVL_2L0]		= { MTK_DISP_OVL_2L,		0, &ddp_ovl },
+	[DDP_COMPONENT_OVL_2L1]		= { MTK_DISP_OVL_2L,		1, &ddp_ovl },
+	[DDP_COMPONENT_OVL_2L2]		= { MTK_DISP_OVL_2L,		2, &ddp_ovl },
+	[DDP_COMPONENT_POSTMASK0]	= { MTK_DISP_POSTMASK,		0, &ddp_postmask },
+	[DDP_COMPONENT_PWM0]		= { MTK_DISP_PWM,		0, NULL },
+	[DDP_COMPONENT_PWM1]		= { MTK_DISP_PWM,		1, NULL },
+	[DDP_COMPONENT_PWM2]		= { MTK_DISP_PWM,		2, NULL },
+	[DDP_COMPONENT_RDMA0]		= { MTK_DISP_RDMA,		0, &ddp_rdma },
+	[DDP_COMPONENT_RDMA1]		= { MTK_DISP_RDMA,		1, &ddp_rdma },
+	[DDP_COMPONENT_RDMA2]		= { MTK_DISP_RDMA,		2, &ddp_rdma },
+	[DDP_COMPONENT_RDMA4]		= { MTK_DISP_RDMA,		4, &ddp_rdma },
+	[DDP_COMPONENT_UFOE]		= { MTK_DISP_UFOE,		0, &ddp_ufoe },
+	[DDP_COMPONENT_WDMA0]		= { MTK_DISP_WDMA,		0, NULL },
+	[DDP_COMPONENT_WDMA1]		= { MTK_DISP_WDMA,		1, NULL },
 };
 
 static bool mtk_drm_find_comp_in_ddp(struct device *dev,
-				     const enum mtk_ddp_comp_id *path,
+				     const unsigned int *path,
 				     unsigned int path_len,
 				     struct mtk_ddp_comp *ddp_comp)
 {
@@ -517,7 +538,7 @@ unsigned int mtk_drm_find_possible_crtc_by_comp(struct drm_device *drm,
 }
 
 int mtk_ddp_comp_init(struct device_node *node, struct mtk_ddp_comp *comp,
-		      enum mtk_ddp_comp_id comp_id)
+		      unsigned int comp_id)
 {
 	struct platform_device *comp_pdev;
 	enum mtk_ddp_comp_type type;
@@ -526,19 +547,24 @@ int mtk_ddp_comp_init(struct device_node *node, struct mtk_ddp_comp *comp,
 	int ret;
 #endif
 
-	if (comp_id < 0 || comp_id >= DDP_COMPONENT_ID_MAX)
+	if (comp_id < 0 || comp_id >= DDP_COMPONENT_DRM_ID_MAX)
 		return -EINVAL;
 
 	type = mtk_ddp_matches[comp_id].type;
 
 	comp->id = comp_id;
 	comp->funcs = mtk_ddp_matches[comp_id].funcs;
-	comp_pdev = of_find_device_by_node(node);
-	if (!comp_pdev) {
-		DRM_INFO("Waiting for device %s\n", node->full_name);
-		return -EPROBE_DEFER;
+	/* Not all drm components have a DTS device node, such as ovl_adaptor,
+	 * which is the drm bring up sub driver
+	 */
+	if (node) {
+		comp_pdev = of_find_device_by_node(node);
+		if (!comp_pdev) {
+			DRM_INFO("Waiting for device %s\n", node->full_name);
+			return -EPROBE_DEFER;
+		}
+		comp->dev = &comp_pdev->dev;
 	}
-	comp->dev = &comp_pdev->dev;
 
 	if (type == MTK_DISP_AAL ||
 	    type == MTK_DISP_BLS ||
@@ -548,6 +574,7 @@ int mtk_ddp_comp_init(struct device_node *node, struct mtk_ddp_comp *comp,
 	    type == MTK_DISP_MERGE ||
 	    type == MTK_DISP_OVL ||
 	    type == MTK_DISP_OVL_2L ||
+	    type == MTK_DISP_OVL_ADAPTOR ||
 	    type == MTK_DISP_PWM ||
 	    type == MTK_DISP_RDMA ||
 	    type == MTK_DPI ||
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
index 364f3f7f59fa..3084cc4e2830 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
@@ -9,6 +9,7 @@
 #include <linux/io.h>
 #include <linux/soc/mediatek/mtk-cmdq.h>
 #include <linux/soc/mediatek/mtk-mmsys.h>
+#include <linux/soc/mediatek/mtk-mutex.h>
 
 struct device;
 struct device_node;
@@ -30,6 +31,7 @@ enum mtk_ddp_comp_type {
 	MTK_DISP_OD,
 	MTK_DISP_OVL,
 	MTK_DISP_OVL_2L,
+	MTK_DISP_OVL_ADAPTOR,
 	MTK_DISP_POSTMASK,
 	MTK_DISP_PWM,
 	MTK_DISP_RDMA,
@@ -72,12 +74,16 @@ struct mtk_ddp_comp_funcs {
 	void (*ctm_set)(struct device *dev,
 			struct drm_crtc_state *state);
 	struct device * (*dma_dev_get)(struct device *dev);
+	void (*connect)(struct device *dev, struct device *mmsys_dev, unsigned int next);
+	void (*disconnect)(struct device *dev, struct device *mmsys_dev, unsigned int next);
+	void (*add)(struct device *dev, struct mtk_mutex *mutex);
+	void (*remove)(struct device *dev, struct mtk_mutex *mutex);
 };
 
 struct mtk_ddp_comp {
 	struct device *dev;
 	int irq;
-	enum mtk_ddp_comp_id id;
+	unsigned int id;
 	const struct mtk_ddp_comp_funcs *funcs;
 };
 
@@ -211,13 +217,51 @@ static inline struct device *mtk_ddp_comp_dma_dev_get(struct mtk_ddp_comp *comp)
 	return comp->dev;
 }
 
+static inline bool mtk_ddp_comp_add(struct mtk_ddp_comp *comp, struct mtk_mutex *mutex)
+{
+	if (comp->funcs && comp->funcs->add) {
+		comp->funcs->add(comp->dev, mutex);
+		return true;
+	}
+	return false;
+}
+
+static inline bool mtk_ddp_comp_remove(struct mtk_ddp_comp *comp, struct mtk_mutex *mutex)
+{
+	if (comp->funcs && comp->funcs->remove) {
+		comp->funcs->remove(comp->dev, mutex);
+		return true;
+	}
+	return false;
+}
+
+static inline bool mtk_ddp_comp_connect(struct mtk_ddp_comp *comp, struct device *mmsys_dev,
+					unsigned int next)
+{
+	if (comp->funcs && comp->funcs->connect) {
+		comp->funcs->connect(comp->dev, mmsys_dev, next);
+		return true;
+	}
+	return false;
+}
+
+static inline bool mtk_ddp_comp_disconnect(struct mtk_ddp_comp *comp, struct device *mmsys_dev,
+					   unsigned int next)
+{
+	if (comp->funcs && comp->funcs->disconnect) {
+		comp->funcs->disconnect(comp->dev, mmsys_dev, next);
+		return true;
+	}
+	return false;
+}
+
 int mtk_ddp_comp_get_id(struct device_node *node,
 			enum mtk_ddp_comp_type comp_type);
 unsigned int mtk_drm_find_possible_crtc_by_comp(struct drm_device *drm,
 						struct device *dev);
 int mtk_ddp_comp_init(struct device_node *comp_node, struct mtk_ddp_comp *comp,
-		      enum mtk_ddp_comp_id comp_id);
-enum mtk_ddp_comp_type mtk_ddp_comp_get_type(enum mtk_ddp_comp_id comp_id);
+		      unsigned int comp_id);
+enum mtk_ddp_comp_type mtk_ddp_comp_get_type(unsigned int comp_id);
 void mtk_ddp_write(struct cmdq_pkt *cmdq_pkt, unsigned int value,
 		   struct cmdq_client_reg *cmdq_reg, void __iomem *regs,
 		   unsigned int offset);
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index 4de5d0009a06..442ef79d5a3f 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -58,7 +58,7 @@ static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
 	.atomic_commit = drm_atomic_helper_commit,
 };
 
-static const enum mtk_ddp_comp_id mt2701_mtk_ddp_main[] = {
+static const unsigned int mt2701_mtk_ddp_main[] = {
 	DDP_COMPONENT_OVL0,
 	DDP_COMPONENT_RDMA0,
 	DDP_COMPONENT_COLOR0,
@@ -66,12 +66,12 @@ static const enum mtk_ddp_comp_id mt2701_mtk_ddp_main[] = {
 	DDP_COMPONENT_DSI0,
 };
 
-static const enum mtk_ddp_comp_id mt2701_mtk_ddp_ext[] = {
+static const unsigned int mt2701_mtk_ddp_ext[] = {
 	DDP_COMPONENT_RDMA1,
 	DDP_COMPONENT_DPI0,
 };
 
-static const enum mtk_ddp_comp_id mt7623_mtk_ddp_main[] = {
+static const unsigned int mt7623_mtk_ddp_main[] = {
 	DDP_COMPONENT_OVL0,
 	DDP_COMPONENT_RDMA0,
 	DDP_COMPONENT_COLOR0,
@@ -79,12 +79,12 @@ static const enum mtk_ddp_comp_id mt7623_mtk_ddp_main[] = {
 	DDP_COMPONENT_DPI0,
 };
 
-static const enum mtk_ddp_comp_id mt7623_mtk_ddp_ext[] = {
+static const unsigned int mt7623_mtk_ddp_ext[] = {
 	DDP_COMPONENT_RDMA1,
 	DDP_COMPONENT_DSI0,
 };
 
-static const enum mtk_ddp_comp_id mt2712_mtk_ddp_main[] = {
+static const unsigned int mt2712_mtk_ddp_main[] = {
 	DDP_COMPONENT_OVL0,
 	DDP_COMPONENT_COLOR0,
 	DDP_COMPONENT_AAL0,
@@ -94,7 +94,7 @@ static const enum mtk_ddp_comp_id mt2712_mtk_ddp_main[] = {
 	DDP_COMPONENT_PWM0,
 };
 
-static const enum mtk_ddp_comp_id mt2712_mtk_ddp_ext[] = {
+static const unsigned int mt2712_mtk_ddp_ext[] = {
 	DDP_COMPONENT_OVL1,
 	DDP_COMPONENT_COLOR1,
 	DDP_COMPONENT_AAL1,
@@ -104,13 +104,13 @@ static const enum mtk_ddp_comp_id mt2712_mtk_ddp_ext[] = {
 	DDP_COMPONENT_PWM1,
 };
 
-static const enum mtk_ddp_comp_id mt2712_mtk_ddp_third[] = {
+static const unsigned int mt2712_mtk_ddp_third[] = {
 	DDP_COMPONENT_RDMA2,
 	DDP_COMPONENT_DSI3,
 	DDP_COMPONENT_PWM2,
 };
 
-static enum mtk_ddp_comp_id mt8167_mtk_ddp_main[] = {
+static unsigned int mt8167_mtk_ddp_main[] = {
 	DDP_COMPONENT_OVL0,
 	DDP_COMPONENT_COLOR0,
 	DDP_COMPONENT_CCORR,
@@ -121,7 +121,7 @@ static enum mtk_ddp_comp_id mt8167_mtk_ddp_main[] = {
 	DDP_COMPONENT_DSI0,
 };
 
-static const enum mtk_ddp_comp_id mt8173_mtk_ddp_main[] = {
+static const unsigned int mt8173_mtk_ddp_main[] = {
 	DDP_COMPONENT_OVL0,
 	DDP_COMPONENT_COLOR0,
 	DDP_COMPONENT_AAL0,
@@ -132,7 +132,7 @@ static const enum mtk_ddp_comp_id mt8173_mtk_ddp_main[] = {
 	DDP_COMPONENT_PWM0,
 };
 
-static const enum mtk_ddp_comp_id mt8173_mtk_ddp_ext[] = {
+static const unsigned int mt8173_mtk_ddp_ext[] = {
 	DDP_COMPONENT_OVL1,
 	DDP_COMPONENT_COLOR1,
 	DDP_COMPONENT_GAMMA,
@@ -140,7 +140,7 @@ static const enum mtk_ddp_comp_id mt8173_mtk_ddp_ext[] = {
 	DDP_COMPONENT_DPI0,
 };
 
-static const enum mtk_ddp_comp_id mt8183_mtk_ddp_main[] = {
+static const unsigned int mt8183_mtk_ddp_main[] = {
 	DDP_COMPONENT_OVL0,
 	DDP_COMPONENT_OVL_2L0,
 	DDP_COMPONENT_RDMA0,
@@ -152,13 +152,13 @@ static const enum mtk_ddp_comp_id mt8183_mtk_ddp_main[] = {
 	DDP_COMPONENT_DSI0,
 };
 
-static const enum mtk_ddp_comp_id mt8183_mtk_ddp_ext[] = {
+static const unsigned int mt8183_mtk_ddp_ext[] = {
 	DDP_COMPONENT_OVL_2L1,
 	DDP_COMPONENT_RDMA1,
 	DDP_COMPONENT_DPI0,
 };
 
-static const enum mtk_ddp_comp_id mt8186_mtk_ddp_main[] = {
+static const unsigned int mt8186_mtk_ddp_main[] = {
 	DDP_COMPONENT_OVL0,
 	DDP_COMPONENT_RDMA0,
 	DDP_COMPONENT_COLOR0,
@@ -170,13 +170,13 @@ static const enum mtk_ddp_comp_id mt8186_mtk_ddp_main[] = {
 	DDP_COMPONENT_DSI0,
 };
 
-static const enum mtk_ddp_comp_id mt8186_mtk_ddp_ext[] = {
+static const unsigned int mt8186_mtk_ddp_ext[] = {
 	DDP_COMPONENT_OVL_2L0,
 	DDP_COMPONENT_RDMA1,
 	DDP_COMPONENT_DPI0,
 };
 
-static const enum mtk_ddp_comp_id mt8192_mtk_ddp_main[] = {
+static const unsigned int mt8192_mtk_ddp_main[] = {
 	DDP_COMPONENT_OVL0,
 	DDP_COMPONENT_OVL_2L0,
 	DDP_COMPONENT_RDMA0,
@@ -189,13 +189,13 @@ static const enum mtk_ddp_comp_id mt8192_mtk_ddp_main[] = {
 	DDP_COMPONENT_DSI0,
 };
 
-static const enum mtk_ddp_comp_id mt8192_mtk_ddp_ext[] = {
+static const unsigned int mt8192_mtk_ddp_ext[] = {
 	DDP_COMPONENT_OVL_2L2,
 	DDP_COMPONENT_RDMA4,
 	DDP_COMPONENT_DPI0,
 };
 
-static const enum mtk_ddp_comp_id mt8195_mtk_ddp_main[] = {
+static const unsigned int mt8195_mtk_ddp_main[] = {
 	DDP_COMPONENT_OVL0,
 	DDP_COMPONENT_RDMA0,
 	DDP_COMPONENT_COLOR0,
@@ -381,9 +381,7 @@ static int mtk_drm_kms_init(struct drm_device *drm)
 {
 	struct mtk_drm_private *private = drm->dev_private;
 	struct mtk_drm_private *priv_n;
-	struct platform_device *pdev;
-	struct device_node *np = NULL;
-	struct device *dma_dev;
+	struct device *dma_dev = NULL;
 	int ret, i, j;
 
 	if (drm_firmware_drivers_only())
@@ -427,7 +425,6 @@ static int mtk_drm_kms_init(struct drm_device *drm)
 	 *    different drm private data structures. Loop through crtc index to
 	 *    create crtc from the main path and then ext_path and finally the
 	 *    third path.
-	 * 3. Use OVL device for all DMA memory allocations
 	 */
 	for (i = 0; i < MAX_CRTC; i++) {
 		for (j = 0; j < private->data->mmsys_dev_num; j++) {
@@ -439,9 +436,6 @@ static int mtk_drm_kms_init(struct drm_device *drm)
 				if (ret)
 					goto err_component_unbind;
 
-				if (!np)
-					np = priv_n->comp_node[priv_n->data->main_path[0]];
-
 				continue;
 			} else if (i == 1 && priv_n->data->ext_len) {
 				ret = mtk_drm_crtc_create(drm, priv_n->data->ext_path,
@@ -449,9 +443,6 @@ static int mtk_drm_kms_init(struct drm_device *drm)
 				if (ret)
 					goto err_component_unbind;
 
-				if (!np)
-					np = priv_n->comp_node[priv_n->data->ext_path[0]];
-
 				continue;
 			} else if (i == 2 && priv_n->data->third_len) {
 				ret = mtk_drm_crtc_create(drm, priv_n->data->third_path,
@@ -459,22 +450,19 @@ static int mtk_drm_kms_init(struct drm_device *drm)
 				if (ret)
 					goto err_component_unbind;
 
-				if (!np)
-					np = priv_n->comp_node[priv_n->data->third_path[0]];
-
 				continue;
 			}
 		}
 	}
 
-	pdev = of_find_device_by_node(np);
-	if (!pdev) {
+	/* Use OVL device for all DMA memory allocations */
+	dma_dev = mtk_drm_crtc_dma_dev_get(drm_crtc_from_index(drm, 0));
+	if (!dma_dev) {
 		ret = -ENODEV;
 		dev_err(drm->dev, "Need at least one OVL device\n");
 		goto err_component_unbind;
 	}
 
-	dma_dev = &pdev->dev;
 	for (i = 0; i < private->data->mmsys_dev_num; i++)
 		private->all_drm_private[i]->dma_dev = dma_dev;
 
@@ -548,6 +536,11 @@ static const struct drm_driver mtk_drm_driver = {
 	.minor = DRIVER_MINOR,
 };
 
+static int compare_dev(struct device *dev, void *data)
+{
+	return dev == (struct device *)data;
+}
+
 static int mtk_drm_bind(struct device *dev)
 {
 	struct mtk_drm_private *private = dev_get_drvdata(dev);
@@ -745,6 +738,7 @@ static int mtk_drm_probe(struct platform_device *pdev)
 	struct mtk_drm_private *private;
 	struct device_node *node;
 	struct component_match *match = NULL;
+	struct platform_device *ovl_adaptor;
 	int ret;
 	int i;
 
@@ -770,6 +764,18 @@ static int mtk_drm_probe(struct platform_device *pdev)
 	if (!private->all_drm_private)
 		return -ENOMEM;
 
+	/* Bringup ovl_adaptor */
+	if (mtk_drm_find_mmsys_comp(private, DDP_COMPONENT_DRM_OVL_ADAPTOR)) {
+		ovl_adaptor = platform_device_register_data(dev, "mediatek-disp-ovl-adaptor",
+							    PLATFORM_DEVID_AUTO,
+							    (void *)private->mmsys_dev,
+							    sizeof(*private->mmsys_dev));
+		private->ddp_comp[DDP_COMPONENT_DRM_OVL_ADAPTOR].dev = &ovl_adaptor->dev;
+		mtk_ddp_comp_init(NULL, &private->ddp_comp[DDP_COMPONENT_DRM_OVL_ADAPTOR],
+				  DDP_COMPONENT_DRM_OVL_ADAPTOR);
+		component_match_add(dev, &match, compare_dev, &ovl_adaptor->dev);
+	}
+
 	/* Iterate over sibling DISP function blocks */
 	for_each_child_of_node(phandle->parent, node) {
 		const struct of_device_id *of_id;
@@ -823,6 +829,7 @@ static int mtk_drm_probe(struct platform_device *pdev)
 		    comp_type == MTK_DISP_MERGE ||
 		    comp_type == MTK_DISP_OVL ||
 		    comp_type == MTK_DISP_OVL_2L ||
+		    comp_type == MTK_DISP_OVL_ADAPTOR ||
 		    comp_type == MTK_DISP_RDMA ||
 		    comp_type == MTK_DP_INTF ||
 		    comp_type == MTK_DPI ||
@@ -860,7 +867,7 @@ static int mtk_drm_probe(struct platform_device *pdev)
 	pm_runtime_disable(dev);
 err_node:
 	of_node_put(private->mutex_node);
-	for (i = 0; i < DDP_COMPONENT_ID_MAX; i++)
+	for (i = 0; i < DDP_COMPONENT_DRM_ID_MAX; i++)
 		of_node_put(private->comp_node[i]);
 	return ret;
 }
@@ -873,7 +880,7 @@ static int mtk_drm_remove(struct platform_device *pdev)
 	component_master_del(&pdev->dev, &mtk_drm_ops);
 	pm_runtime_disable(&pdev->dev);
 	of_node_put(private->mutex_node);
-	for (i = 0; i < DDP_COMPONENT_ID_MAX; i++)
+	for (i = 0; i < DDP_COMPONENT_DRM_ID_MAX; i++)
 		of_node_put(private->comp_node[i]);
 
 	return 0;
@@ -922,6 +929,7 @@ static struct platform_driver * const mtk_drm_drivers[] = {
 	&mtk_disp_color_driver,
 	&mtk_disp_gamma_driver,
 	&mtk_disp_merge_driver,
+	&mtk_disp_ovl_adaptor_driver,
 	&mtk_disp_ovl_driver,
 	&mtk_disp_rdma_driver,
 	&mtk_dpi_driver,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
index 8d3ff32b5364..eb2fd45941f0 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
@@ -11,6 +11,8 @@
 
 #define MAX_CRTC	3
 #define MAX_CONNECTOR	2
+#define DDP_COMPONENT_DRM_OVL_ADAPTOR (DDP_COMPONENT_ID_MAX + 1)
+#define DDP_COMPONENT_DRM_ID_MAX (DDP_COMPONENT_DRM_OVL_ADAPTOR + 1)
 
 struct device;
 struct device_node;
@@ -21,11 +23,11 @@ struct drm_property;
 struct regmap;
 
 struct mtk_mmsys_driver_data {
-	const enum mtk_ddp_comp_id *main_path;
+	const unsigned int *main_path;
 	unsigned int main_len;
-	const enum mtk_ddp_comp_id *ext_path;
+	const unsigned int *ext_path;
 	unsigned int ext_len;
-	const enum mtk_ddp_comp_id *third_path;
+	const unsigned int *third_path;
 	unsigned int third_len;
 
 	bool shadow_register;
@@ -42,8 +44,8 @@ struct mtk_drm_private {
 	struct device_node *mutex_node;
 	struct device *mutex_dev;
 	struct device *mmsys_dev;
-	struct device_node *comp_node[DDP_COMPONENT_ID_MAX];
-	struct mtk_ddp_comp ddp_comp[DDP_COMPONENT_ID_MAX];
+	struct device_node *comp_node[DDP_COMPONENT_DRM_ID_MAX];
+	struct mtk_ddp_comp ddp_comp[DDP_COMPONENT_DRM_ID_MAX];
 	const struct mtk_mmsys_driver_data *data;
 	struct drm_atomic_state *suspend_state;
 	unsigned int mbox_index;
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:04:38 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:38 +0800
Subject: [PATCH v29 06/11] soc: mediatek: add mtk-mmsys config API for mt8195 vdosys1
In-Reply-To: <20221227080443.6273-1-nancy.lin@mediatek.com>
References: <20221227080443.6273-1-nancy.lin@mediatek.com>
Message-ID: <20221227080443.6273-7-nancy.lin@mediatek.com>

Add four mmsys config APIs. The config APIs are used for config
mmsys reg. Some mmsys regs need to be set according to the
HW engine binding to the mmsys simultaneously.

1. mtk_mmsys_merge_async_config: config merge async width/height.
   async is used for cross-clock domain synchronization.
2. mtk_mmsys_hdr_confing: config hdr backend async width/height.
3. mtk_mmsys_mixer_in_config and mtk_mmsys_mixer_in_config:
   config mixer related settings.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
---
 drivers/soc/mediatek/mt8195-mmsys.h    |  6 +++++
 drivers/soc/mediatek/mtk-mmsys.c       | 35 ++++++++++++++++++++++++++
 include/linux/soc/mediatek/mtk-mmsys.h |  9 +++++++
 3 files changed, 50 insertions(+)

diff --git a/drivers/soc/mediatek/mt8195-mmsys.h b/drivers/soc/mediatek/mt8195-mmsys.h
index fd7b455bd675..454944a9409c 100644
--- a/drivers/soc/mediatek/mt8195-mmsys.h
+++ b/drivers/soc/mediatek/mt8195-mmsys.h
@@ -75,6 +75,12 @@
 #define MT8195_SOUT_DSC_WRAP1_OUT_TO_SINA_VIRTUAL0		(2 << 16)
 #define MT8195_SOUT_DSC_WRAP1_OUT_TO_VPP_MERGE			(3 << 16)
 
+#define MT8195_VDO1_MERGE0_ASYNC_CFG_WD				0xe30
+#define MT8195_VDO1_HDRBE_ASYNC_CFG_WD				0xe70
+#define MT8195_VDO1_HDR_TOP_CFG					0xd00
+#define MT8195_VDO1_MIXER_IN1_ALPHA				0xd30
+#define MT8195_VDO1_MIXER_IN1_PAD				0xd40
+
 #define MT8195_VDO1_VPP_MERGE0_P0_SEL_IN			0xf04
 #define MT8195_VPP_MERGE0_P0_SEL_IN_FROM_MDP_RDMA0			1
 
diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index d235cb678da0..241416803c23 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -137,6 +137,41 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
 }
 EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_disconnect);
 
+void mtk_mmsys_merge_async_config(struct device *dev, int idx, int width, int height)
+{
+	mtk_mmsys_update_bits(dev_get_drvdata(dev), MT8195_VDO1_MERGE0_ASYNC_CFG_WD + 0x10 * idx,
+			      ~0, height << 16 | width);
+}
+EXPORT_SYMBOL_GPL(mtk_mmsys_merge_async_config);
+
+void mtk_mmsys_hdr_config(struct device *dev, int be_width, int be_height)
+{
+	mtk_mmsys_update_bits(dev_get_drvdata(dev), MT8195_VDO1_HDRBE_ASYNC_CFG_WD, ~0,
+			      be_height << 16 | be_width);
+}
+EXPORT_SYMBOL_GPL(mtk_mmsys_hdr_config);
+
+void mtk_mmsys_mixer_in_config(struct device *dev, int idx, bool alpha_sel, u16 alpha,
+			       u8 mode, u32 biwidth)
+{
+	struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
+
+	mtk_mmsys_update_bits(mmsys, MT8195_VDO1_MIXER_IN1_ALPHA + (idx - 1) * 4, ~0,
+			      alpha << 16 | alpha);
+	mtk_mmsys_update_bits(mmsys, MT8195_VDO1_HDR_TOP_CFG, BIT(19 + idx),
+			      alpha_sel << (19 + idx));
+	mtk_mmsys_update_bits(mmsys, MT8195_VDO1_MIXER_IN1_PAD + (idx - 1) * 4,
+			      GENMASK(31, 16) | GENMASK(1, 0), biwidth << 16 | mode);
+}
+EXPORT_SYMBOL_GPL(mtk_mmsys_mixer_in_config);
+
+void mtk_mmsys_mixer_in_channel_swap(struct device *dev, int idx, bool channel_swap)
+{
+	mtk_mmsys_update_bits(dev_get_drvdata(dev), MT8195_VDO1_MIXER_IN1_PAD + (idx - 1) * 4,
+			      BIT(4), channel_swap << 4);
+}
+EXPORT_SYMBOL_GPL(mtk_mmsys_mixer_in_channel_swap);
+
 void mtk_mmsys_ddp_dpi_fmt_config(struct device *dev, u32 val)
 {
 	struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
diff --git a/include/linux/soc/mediatek/mtk-mmsys.h b/include/linux/soc/mediatek/mtk-mmsys.h
index d4b535a3383e..de84ca230d33 100644
--- a/include/linux/soc/mediatek/mtk-mmsys.h
+++ b/include/linux/soc/mediatek/mtk-mmsys.h
@@ -82,4 +82,13 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
 
 void mtk_mmsys_ddp_dpi_fmt_config(struct device *dev, u32 val);
 
+void mtk_mmsys_merge_async_config(struct device *dev, int idx, int width, int height);
+
+void mtk_mmsys_hdr_config(struct device *dev, int be_width, int be_height);
+
+void mtk_mmsys_mixer_in_config(struct device *dev, int idx, bool alpha_sel, u16 alpha,
+			       u8 mode, u32 biwidth);
+
+void mtk_mmsys_mixer_in_channel_swap(struct device *dev, int idx, bool channel_swap);
+
 #endif /* __MTK_MMSYS_H */
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:04:35 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:35 +0800
Subject: [PATCH v29 03/11] soc: mediatek: add mtk-mmsys ethdr and mdp_rdma components
In-Reply-To: <20221227080443.6273-1-nancy.lin@mediatek.com>
References: <20221227080443.6273-1-nancy.lin@mediatek.com>
Message-ID: <20221227080443.6273-4-nancy.lin@mediatek.com>

Add new mmsys component: ethdr_mixer and mdp_rdma. These components will
use in mt8195 vdosys1.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
---
 include/linux/soc/mediatek/mtk-mmsys.h | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/include/linux/soc/mediatek/mtk-mmsys.h b/include/linux/soc/mediatek/mtk-mmsys.h
index d37fa6a426a2..d4b535a3383e 100644
--- a/include/linux/soc/mediatek/mtk-mmsys.h
+++ b/include/linux/soc/mediatek/mtk-mmsys.h
@@ -35,7 +35,16 @@ enum mtk_ddp_comp_id {
 	DDP_COMPONENT_DSI1,
 	DDP_COMPONENT_DSI2,
 	DDP_COMPONENT_DSI3,
+	DDP_COMPONENT_ETHDR_MIXER,
 	DDP_COMPONENT_GAMMA,
+	DDP_COMPONENT_MDP_RDMA0,
+	DDP_COMPONENT_MDP_RDMA1,
+	DDP_COMPONENT_MDP_RDMA2,
+	DDP_COMPONENT_MDP_RDMA3,
+	DDP_COMPONENT_MDP_RDMA4,
+	DDP_COMPONENT_MDP_RDMA5,
+	DDP_COMPONENT_MDP_RDMA6,
+	DDP_COMPONENT_MDP_RDMA7,
 	DDP_COMPONENT_MERGE0,
 	DDP_COMPONENT_MERGE1,
 	DDP_COMPONENT_MERGE2,
-- 
2.18.0



From jason-jh.lin at mediatek.com  Mon Dec 26 23:47:58 2022
From: jason-jh.lin at mediatek.com (Jason-JH.Lin)
Date: Tue, 27 Dec 2022 15:47:58 +0800
Subject: [PATCH v7 1/2] drm/mediatek: change mmsys compatible for mt8195 mediatek-drm
In-Reply-To: <20221227074759.5216-1-jason-jh.lin@mediatek.com>
References: <20221227074759.5216-1-jason-jh.lin@mediatek.com>
Message-ID: <20221227074759.5216-2-jason-jh.lin@mediatek.com>

Because compatible of mt8195 is changing from "mediatek,mt8195-mmsys"
to "mediatek,mt8195-vdosys0".

We have to revert the multiple compatible finding function and
add driver data of mt8195 vdosys0 to mediatek-drm and the sub driver.

Signed-off-by: Jason-JH.Lin <jason-jh.lin at mediatek.com>
---
 drivers/gpu/drm/mediatek/mtk_disp_rdma.c |   6 ++
 drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 128 +++--------------------
 drivers/gpu/drm/mediatek/mtk_drm_drv.h   |   6 --
 3 files changed, 20 insertions(+), 120 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_disp_rdma.c b/drivers/gpu/drm/mediatek/mtk_disp_rdma.c
index 0ec2e4049e07..66cdd0bc1311 100644
--- a/drivers/gpu/drm/mediatek/mtk_disp_rdma.c
+++ b/drivers/gpu/drm/mediatek/mtk_disp_rdma.c
@@ -370,6 +370,10 @@ static const struct mtk_disp_rdma_data mt8183_rdma_driver_data = {
 	.fifo_size = 5 * SZ_1K,
 };
 
+static const struct mtk_disp_rdma_data mt8192_rdma_driver_data = {
+	.fifo_size = 5 * SZ_1K,
+};
+
 static const struct mtk_disp_rdma_data mt8195_rdma_driver_data = {
 	.fifo_size = 1920,
 };
@@ -381,6 +385,8 @@ static const struct of_device_id mtk_disp_rdma_driver_dt_match[] = {
 	  .data = &mt8173_rdma_driver_data},
 	{ .compatible = "mediatek,mt8183-disp-rdma",
 	  .data = &mt8183_rdma_driver_data},
+	{ .compatible = "mediatek,mt8192-disp-rdma",
+	  .data = &mt8192_rdma_driver_data},
 	{ .compatible = "mediatek,mt8195-disp-rdma",
 	  .data = &mt8195_rdma_driver_data},
 	{},
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index cd5b18ef7951..b12e5b977c50 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -4,8 +4,6 @@
  * Author: YT SHEN <yt.shen at mediatek.com>
  */
 
-#include <linux/clk.h>
-#include <linux/clk-provider.h>
 #include <linux/component.h>
 #include <linux/iommu.h>
 #include <linux/module.h>
@@ -218,13 +216,6 @@ static const struct mtk_mmsys_driver_data mt2701_mmsys_driver_data = {
 	.shadow_register = true,
 };
 
-static const struct mtk_mmsys_match_data mt2701_mmsys_match_data = {
-	.num_drv_data = 1,
-	.drv_data = {
-		&mt2701_mmsys_driver_data,
-	},
-};
-
 static const struct mtk_mmsys_driver_data mt7623_mmsys_driver_data = {
 	.main_path = mt7623_mtk_ddp_main,
 	.main_len = ARRAY_SIZE(mt7623_mtk_ddp_main),
@@ -233,13 +224,6 @@ static const struct mtk_mmsys_driver_data mt7623_mmsys_driver_data = {
 	.shadow_register = true,
 };
 
-static const struct mtk_mmsys_match_data mt7623_mmsys_match_data = {
-	.num_drv_data = 1,
-	.drv_data = {
-		&mt7623_mmsys_driver_data,
-	},
-};
-
 static const struct mtk_mmsys_driver_data mt2712_mmsys_driver_data = {
 	.main_path = mt2712_mtk_ddp_main,
 	.main_len = ARRAY_SIZE(mt2712_mtk_ddp_main),
@@ -249,25 +233,11 @@ static const struct mtk_mmsys_driver_data mt2712_mmsys_driver_data = {
 	.third_len = ARRAY_SIZE(mt2712_mtk_ddp_third),
 };
 
-static const struct mtk_mmsys_match_data mt2712_mmsys_match_data = {
-	.num_drv_data = 1,
-	.drv_data = {
-		&mt2712_mmsys_driver_data,
-	},
-};
-
 static const struct mtk_mmsys_driver_data mt8167_mmsys_driver_data = {
 	.main_path = mt8167_mtk_ddp_main,
 	.main_len = ARRAY_SIZE(mt8167_mtk_ddp_main),
 };
 
-static const struct mtk_mmsys_match_data mt8167_mmsys_match_data = {
-	.num_drv_data = 1,
-	.drv_data = {
-		&mt8167_mmsys_driver_data,
-	},
-};
-
 static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = {
 	.main_path = mt8173_mtk_ddp_main,
 	.main_len = ARRAY_SIZE(mt8173_mtk_ddp_main),
@@ -275,13 +245,6 @@ static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = {
 	.ext_len = ARRAY_SIZE(mt8173_mtk_ddp_ext),
 };
 
-static const struct mtk_mmsys_match_data mt8173_mmsys_match_data = {
-	.num_drv_data = 1,
-	.drv_data = {
-		&mt8173_mmsys_driver_data,
-	},
-};
-
 static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = {
 	.main_path = mt8183_mtk_ddp_main,
 	.main_len = ARRAY_SIZE(mt8183_mtk_ddp_main),
@@ -289,13 +252,6 @@ static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = {
 	.ext_len = ARRAY_SIZE(mt8183_mtk_ddp_ext),
 };
 
-static const struct mtk_mmsys_match_data mt8183_mmsys_match_data = {
-	.num_drv_data = 1,
-	.drv_data = {
-		&mt8183_mmsys_driver_data,
-	},
-};
-
 static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {
 	.main_path = mt8186_mtk_ddp_main,
 	.main_len = ARRAY_SIZE(mt8186_mtk_ddp_main),
@@ -303,13 +259,6 @@ static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {
 	.ext_len = ARRAY_SIZE(mt8186_mtk_ddp_ext),
 };
 
-static const struct mtk_mmsys_match_data mt8186_mmsys_match_data = {
-	.num_drv_data = 1,
-	.drv_data = {
-		&mt8186_mmsys_driver_data,
-	},
-};
-
 static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
 	.main_path = mt8192_mtk_ddp_main,
 	.main_len = ARRAY_SIZE(mt8192_mtk_ddp_main),
@@ -317,31 +266,11 @@ static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
 	.ext_len = ARRAY_SIZE(mt8192_mtk_ddp_ext),
 };
 
-static const struct mtk_mmsys_match_data mt8192_mmsys_match_data = {
-	.num_drv_data = 1,
-	.drv_data = {
-		&mt8192_mmsys_driver_data,
-	},
-};
-
 static const struct mtk_mmsys_driver_data mt8195_vdosys0_driver_data = {
-	.io_start = 0x1c01a000,
 	.main_path = mt8195_mtk_ddp_main,
 	.main_len = ARRAY_SIZE(mt8195_mtk_ddp_main),
 };
 
-static const struct mtk_mmsys_driver_data mt8195_vdosys1_driver_data = {
-	.io_start = 0x1c100000,
-};
-
-static const struct mtk_mmsys_match_data mt8195_mmsys_match_data = {
-	.num_drv_data = 1,
-	.drv_data = {
-		&mt8195_vdosys0_driver_data,
-		&mt8195_vdosys1_driver_data,
-	},
-};
-
 static int mtk_drm_kms_init(struct drm_device *drm)
 {
 	struct mtk_drm_private *private = drm->dev_private;
@@ -623,6 +552,8 @@ static const struct of_device_id mtk_ddp_comp_dt_ids[] = {
 	  .data = (void *)MTK_DISP_RDMA },
 	{ .compatible = "mediatek,mt8183-disp-rdma",
 	  .data = (void *)MTK_DISP_RDMA },
+	{ .compatible = "mediatek,mt8192-disp-rdma",
+	  .data = (void *)MTK_DISP_RDMA },
 	{ .compatible = "mediatek,mt8195-disp-rdma",
 	  .data = (void *)MTK_DISP_RDMA },
 	{ .compatible = "mediatek,mt8173-disp-ufoe",
@@ -656,53 +587,34 @@ static const struct of_device_id mtk_ddp_comp_dt_ids[] = {
 
 static const struct of_device_id mtk_drm_of_ids[] = {
 	{ .compatible = "mediatek,mt2701-mmsys",
-	  .data = &mt2701_mmsys_match_data},
+	  .data = &mt2701_mmsys_driver_data},
 	{ .compatible = "mediatek,mt7623-mmsys",
-	  .data = &mt7623_mmsys_match_data},
+	  .data = &mt7623_mmsys_driver_data},
 	{ .compatible = "mediatek,mt2712-mmsys",
-	  .data = &mt2712_mmsys_match_data},
+	  .data = &mt2712_mmsys_driver_data},
 	{ .compatible = "mediatek,mt8167-mmsys",
-	  .data = &mt8167_mmsys_match_data},
+	  .data = &mt8167_mmsys_driver_data},
 	{ .compatible = "mediatek,mt8173-mmsys",
-	  .data = &mt8173_mmsys_match_data},
+	  .data = &mt8173_mmsys_driver_data},
 	{ .compatible = "mediatek,mt8183-mmsys",
-	  .data = &mt8183_mmsys_match_data},
+	  .data = &mt8183_mmsys_driver_data},
 	{ .compatible = "mediatek,mt8186-mmsys",
-	  .data = &mt8186_mmsys_match_data},
+	  .data = &mt8186_mmsys_driver_data},
 	{ .compatible = "mediatek,mt8192-mmsys",
-	  .data = &mt8192_mmsys_match_data},
+	  .data = &mt8192_mmsys_driver_data},
 	{ .compatible = "mediatek,mt8195-mmsys",
-	  .data = &mt8195_mmsys_match_data},
+	  .data = &mt8195_vdosys0_driver_data},
+	{ .compatible = "mediatek,mt8195-vdosys0",
+	  .data = &mt8195_vdosys0_driver_data},
 	{ }
 };
 MODULE_DEVICE_TABLE(of, mtk_drm_of_ids);
 
-static int mtk_drm_find_match_data(struct device *dev,
-				   const struct mtk_mmsys_match_data *match_data)
-{
-	int i;
-	struct platform_device *pdev = of_find_device_by_node(dev->parent->of_node);
-	struct resource *res;
-
-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	if (!res) {
-		dev_err(dev, "failed to get parent resource\n");
-		return -EINVAL;
-	}
-
-	for (i = 0; i < match_data->num_drv_data; i++)
-		if (match_data->drv_data[i]->io_start == res->start)
-			return i;
-
-	return -EINVAL;
-}
-
 static int mtk_drm_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct device_node *phandle = dev->parent->of_node;
 	const struct of_device_id *of_id;
-	const struct mtk_mmsys_match_data *match_data;
 	struct mtk_drm_private *private;
 	struct device_node *node;
 	struct component_match *match = NULL;
@@ -723,19 +635,7 @@ static int mtk_drm_probe(struct platform_device *pdev)
 	if (!of_id)
 		return -ENODEV;
 
-	match_data = of_id->data;
-	if (match_data->num_drv_data > 1) {
-		/* This SoC has multiple mmsys channels */
-		ret = mtk_drm_find_match_data(dev, match_data);
-		if (ret < 0) {
-			dev_err(dev, "Couldn't get match driver data\n");
-			return ret;
-		}
-		private->data = match_data->drv_data[ret];
-	} else {
-		dev_dbg(dev, "Using single mmsys channel\n");
-		private->data = match_data->drv_data[0];
-	}
+	private->data = of_id->data;
 
 	/* Iterate over sibling DISP function blocks */
 	for_each_child_of_node(phandle->parent, node) {
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
index 7b37b5cf9629..64a1f66df26a 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
@@ -21,7 +21,6 @@ struct drm_property;
 struct regmap;
 
 struct mtk_mmsys_driver_data {
-	const resource_size_t io_start;
 	const enum mtk_ddp_comp_id *main_path;
 	unsigned int main_len;
 	const enum mtk_ddp_comp_id *ext_path;
@@ -32,11 +31,6 @@ struct mtk_mmsys_driver_data {
 	bool shadow_register;
 };
 
-struct mtk_mmsys_match_data {
-	unsigned short num_drv_data;
-	const struct mtk_mmsys_driver_data *drv_data[];
-};
-
 struct mtk_drm_private {
 	struct drm_device *drm;
 	struct device *dma_dev;
-- 
2.18.0



From jason-jh.lin at mediatek.com  Mon Dec 26 23:47:59 2022
From: jason-jh.lin at mediatek.com (Jason-JH.Lin)
Date: Tue, 27 Dec 2022 15:47:59 +0800
Subject: [PATCH v7 2/2] soc: mediatek: remove DDP_DOMPONENT_DITHER from enum
In-Reply-To: <20221227074759.5216-1-jason-jh.lin@mediatek.com>
References: <20221227074759.5216-1-jason-jh.lin@mediatek.com>
Message-ID: <20221227074759.5216-3-jason-jh.lin@mediatek.com>

After mmsys and drm change DITHER enum to DDP_COMPONENT_DITHER0,
mmsys header can remove the useless DDP_COMPONENT_DITHER enum.

Signed-off-by: Jason-JH.Lin <jason-jh.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Rex-BC Chen <rex-bc.chen at mediatek.com>
Acked-by: Matthias Brugger <matthias.bgg at gmail.com>
---
 include/linux/soc/mediatek/mtk-mmsys.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/include/linux/soc/mediatek/mtk-mmsys.h b/include/linux/soc/mediatek/mtk-mmsys.h
index b85f66db33e1..d37fa6a426a2 100644
--- a/include/linux/soc/mediatek/mtk-mmsys.h
+++ b/include/linux/soc/mediatek/mtk-mmsys.h
@@ -23,8 +23,7 @@ enum mtk_ddp_comp_id {
 	DDP_COMPONENT_CCORR,
 	DDP_COMPONENT_COLOR0,
 	DDP_COMPONENT_COLOR1,
-	DDP_COMPONENT_DITHER,
-	DDP_COMPONENT_DITHER0 = DDP_COMPONENT_DITHER,
+	DDP_COMPONENT_DITHER0,
 	DDP_COMPONENT_DITHER1,
 	DDP_COMPONENT_DP_INTF0,
 	DDP_COMPONENT_DP_INTF1,
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:04:34 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:34 +0800
Subject: [PATCH v29 02/11] dt-bindings: reset: mt8195: add vdosys1 reset control bit
In-Reply-To: <20221227080443.6273-1-nancy.lin@mediatek.com>
References: <20221227080443.6273-1-nancy.lin@mediatek.com>
Message-ID: <20221227080443.6273-3-nancy.lin@mediatek.com>

Add vdosys1 reset control bit for MT8195 platform.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: Chun-Kuang Hu <chunkuang.hu at kernel.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Rex-BC Chen <rex-bc.chen at mediatek.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Acked-by: Philipp Zabel <p.zabel at pengutronix.de>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 include/dt-bindings/reset/mt8195-resets.h | 45 +++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/include/dt-bindings/reset/mt8195-resets.h b/include/dt-bindings/reset/mt8195-resets.h
index 24ab3631dcea..e61660438d61 100644
--- a/include/dt-bindings/reset/mt8195-resets.h
+++ b/include/dt-bindings/reset/mt8195-resets.h
@@ -35,4 +35,49 @@
 #define MT8195_INFRA_RST2_PCIE_P1_SWRST        4
 #define MT8195_INFRA_RST2_USBSIF_P1_SWRST      5
 
+/* VDOSYS1 */
+#define MT8195_VDOSYS1_SW0_RST_B_SMI_LARB2                     0
+#define MT8195_VDOSYS1_SW0_RST_B_SMI_LARB3                     1
+#define MT8195_VDOSYS1_SW0_RST_B_GALS                          2
+#define MT8195_VDOSYS1_SW0_RST_B_FAKE_ENG0                     3
+#define MT8195_VDOSYS1_SW0_RST_B_FAKE_ENG1                     4
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA0                     5
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA1                     6
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA2                     7
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA3                     8
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE0                    9
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE1                    10
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE2                    11
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE3                    12
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE4                    13
+#define MT8195_VDOSYS1_SW0_RST_B_VPP2_TO_VDO1_DL_ASYNC         14
+#define MT8195_VDOSYS1_SW0_RST_B_VPP3_TO_VDO1_DL_ASYNC         15
+#define MT8195_VDOSYS1_SW0_RST_B_DISP_MUTEX                    16
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA4                     17
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA5                     18
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA6                     19
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA7                     20
+#define MT8195_VDOSYS1_SW0_RST_B_DP_INTF0                      21
+#define MT8195_VDOSYS1_SW0_RST_B_DPI0                          22
+#define MT8195_VDOSYS1_SW0_RST_B_DPI1                          23
+#define MT8195_VDOSYS1_SW0_RST_B_DISP_MONITOR                  24
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE0_DL_ASYNC               25
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE1_DL_ASYNC               26
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE2_DL_ASYNC               27
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE3_DL_ASYNC               28
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE4_DL_ASYNC               29
+#define MT8195_VDOSYS1_SW0_RST_B_VDO0_DSC_TO_VDO1_DL_ASYNC     30
+#define MT8195_VDOSYS1_SW0_RST_B_VDO0_MERGE_TO_VDO1_DL_ASYNC   31
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE0                   32
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE0                   33
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_BE                    34
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE1                   48
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE1                   49
+#define MT8195_VDOSYS1_SW1_RST_B_DISP_MIXER                    50
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE0_DL_ASYNC          51
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE1_DL_ASYNC          52
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE0_DL_ASYNC          53
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE1_DL_ASYNC          54
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_BE_DL_ASYNC           55
+
 #endif  /* _DT_BINDINGS_RESET_CONTROLLER_MT8195 */
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:04:37 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:37 +0800
Subject: [PATCH v29 05/11] soc: mediatek: refine code to use mtk_mmsys_update_bits API
In-Reply-To: <20221227080443.6273-1-nancy.lin@mediatek.com>
References: <20221227080443.6273-1-nancy.lin@mediatek.com>
Message-ID: <20221227080443.6273-6-nancy.lin@mediatek.com>

Simplify code for update  mmsys reg.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
Reviewed-by: N?colas F. R. A. Prado <nfraprado at collabora.com>
---
 drivers/soc/mediatek/mtk-mmsys.c | 45 ++++++++++++--------------------
 1 file changed, 16 insertions(+), 29 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index 6deb6552f035..d235cb678da0 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -99,22 +99,27 @@ struct mtk_mmsys {
 	struct reset_controller_dev rcdev;
 };
 
+static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val)
+{
+	u32 tmp;
+
+	tmp = readl_relaxed(mmsys->regs + offset);
+	tmp = (tmp & ~mask) | (val & mask);
+	writel_relaxed(tmp, mmsys->regs + offset);
+}
+
 void mtk_mmsys_ddp_connect(struct device *dev,
 			   enum mtk_ddp_comp_id cur,
 			   enum mtk_ddp_comp_id next)
 {
 	struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
 	const struct mtk_mmsys_routes *routes = mmsys->data->routes;
-	u32 reg;
 	int i;
 
 	for (i = 0; i < mmsys->data->num_routes; i++)
-		if (cur == routes[i].from_comp && next == routes[i].to_comp) {
-			reg = readl_relaxed(mmsys->regs + routes[i].addr);
-			reg &= ~routes[i].mask;
-			reg |= routes[i].val;
-			writel_relaxed(reg, mmsys->regs + routes[i].addr);
-		}
+		if (cur == routes[i].from_comp && next == routes[i].to_comp)
+			mtk_mmsys_update_bits(mmsys, routes[i].addr, routes[i].mask,
+					      routes[i].val);
 }
 EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_connect);
 
@@ -124,27 +129,14 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
 {
 	struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
 	const struct mtk_mmsys_routes *routes = mmsys->data->routes;
-	u32 reg;
 	int i;
 
 	for (i = 0; i < mmsys->data->num_routes; i++)
-		if (cur == routes[i].from_comp && next == routes[i].to_comp) {
-			reg = readl_relaxed(mmsys->regs + routes[i].addr);
-			reg &= ~routes[i].mask;
-			writel_relaxed(reg, mmsys->regs + routes[i].addr);
-		}
+		if (cur == routes[i].from_comp && next == routes[i].to_comp)
+			mtk_mmsys_update_bits(mmsys, routes[i].addr, routes[i].mask, 0);
 }
 EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_disconnect);
 
-static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val)
-{
-	u32 tmp;
-
-	tmp = readl_relaxed(mmsys->regs + offset);
-	tmp = (tmp & ~mask) | val;
-	writel_relaxed(tmp, mmsys->regs + offset);
-}
-
 void mtk_mmsys_ddp_dpi_fmt_config(struct device *dev, u32 val)
 {
 	struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
@@ -176,18 +168,13 @@ static int mtk_mmsys_reset_update(struct reset_controller_dev *rcdev, unsigned l
 {
 	struct mtk_mmsys *mmsys = container_of(rcdev, struct mtk_mmsys, rcdev);
 	unsigned long flags;
-	u32 reg;
 
 	spin_lock_irqsave(&mmsys->lock, flags);
 
-	reg = readl_relaxed(mmsys->regs + mmsys->data->sw0_rst_offset);
-
 	if (assert)
-		reg &= ~BIT(id);
+		mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), 0);
 	else
-		reg |= BIT(id);
-
-	writel_relaxed(reg, mmsys->regs + mmsys->data->sw0_rst_offset);
+		mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), BIT(id));
 
 	spin_unlock_irqrestore(&mmsys->lock, flags);
 
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:04:42 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:42 +0800
Subject: [PATCH v29 10/11] soc: mediatek: add mtk-mutex component - dp_intf1
In-Reply-To: <20221227080443.6273-1-nancy.lin@mediatek.com>
References: <20221227080443.6273-1-nancy.lin@mediatek.com>
Message-ID: <20221227080443.6273-11-nancy.lin@mediatek.com>

Add mtk-mutex DDP_COMPONENT_DP_INTF1 component. The MT8195 vdosys1 path
component contains ovl_adaptor, merge5, and dp_intf1. It is a preparation
for adding support for MT8195 vdosys1 path component.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
---
 drivers/soc/mediatek/mtk-mutex.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/soc/mediatek/mtk-mutex.c b/drivers/soc/mediatek/mtk-mutex.c
index c1a33d52038e..41cba6aa0e83 100644
--- a/drivers/soc/mediatek/mtk-mutex.c
+++ b/drivers/soc/mediatek/mtk-mutex.c
@@ -602,6 +602,9 @@ void mtk_mutex_add_comp(struct mtk_mutex *mutex,
 	case DDP_COMPONENT_DP_INTF0:
 		sof_id = MUTEX_SOF_DP_INTF0;
 		break;
+	case DDP_COMPONENT_DP_INTF1:
+		sof_id = MUTEX_SOF_DP_INTF1;
+		break;
 	default:
 		if (mtx->data->mutex_mod[id] < 32) {
 			offset = DISP_REG_MUTEX_MOD(mtx->data->mutex_mod_reg,
@@ -642,6 +645,7 @@ void mtk_mutex_remove_comp(struct mtk_mutex *mutex,
 	case DDP_COMPONENT_DPI0:
 	case DDP_COMPONENT_DPI1:
 	case DDP_COMPONENT_DP_INTF0:
+	case DDP_COMPONENT_DP_INTF1:
 		writel_relaxed(MUTEX_SOF_SINGLE_MODE,
 			       mtx->regs +
 			       DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg,
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:04:36 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:36 +0800
Subject: [PATCH v29 04/11] soc: mediatek: add mtk-mmsys support for mt8195 vdosys1
In-Reply-To: <20221227080443.6273-1-nancy.lin@mediatek.com>
References: <20221227080443.6273-1-nancy.lin@mediatek.com>
Message-ID: <20221227080443.6273-5-nancy.lin@mediatek.com>

Add mt8195 vdosys1 routing table to the driver data of mtk-mmsys.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Rex-BC Chen <rex-bc.chen at mediatek.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
---
 drivers/soc/mediatek/mt8195-mmsys.h | 139 ++++++++++++++++++++++++++++
 drivers/soc/mediatek/mtk-mmsys.c    |  10 ++
 2 files changed, 149 insertions(+)

diff --git a/drivers/soc/mediatek/mt8195-mmsys.h b/drivers/soc/mediatek/mt8195-mmsys.h
index abfe94a30248..fd7b455bd675 100644
--- a/drivers/soc/mediatek/mt8195-mmsys.h
+++ b/drivers/soc/mediatek/mt8195-mmsys.h
@@ -75,6 +75,70 @@
 #define MT8195_SOUT_DSC_WRAP1_OUT_TO_SINA_VIRTUAL0		(2 << 16)
 #define MT8195_SOUT_DSC_WRAP1_OUT_TO_VPP_MERGE			(3 << 16)
 
+#define MT8195_VDO1_VPP_MERGE0_P0_SEL_IN			0xf04
+#define MT8195_VPP_MERGE0_P0_SEL_IN_FROM_MDP_RDMA0			1
+
+#define MT8195_VDO1_VPP_MERGE0_P1_SEL_IN			0xf08
+#define MT8195_VPP_MERGE0_P1_SEL_IN_FROM_MDP_RDMA1			1
+
+#define MT8195_VDO1_DISP_DPI1_SEL_IN				0xf10
+#define MT8195_DISP_DPI1_SEL_IN_FROM_VPP_MERGE4_MOUT			0
+
+#define MT8195_VDO1_DISP_DP_INTF0_SEL_IN			0xf14
+#define MT8195_DISP_DP_INTF0_SEL_IN_FROM_VPP_MERGE4_MOUT		0
+
+#define MT8195_VDO1_MERGE4_SOUT_SEL				0xf18
+#define MT8195_MERGE4_SOUT_TO_DPI1_SEL					2
+#define MT8195_MERGE4_SOUT_TO_DP_INTF0_SEL				3
+
+#define MT8195_VDO1_MIXER_IN1_SEL_IN				0xf24
+#define MT8195_MIXER_IN1_SEL_IN_FROM_MERGE0_ASYNC_SOUT			1
+
+#define MT8195_VDO1_MIXER_IN2_SEL_IN				0xf28
+#define MT8195_MIXER_IN2_SEL_IN_FROM_MERGE1_ASYNC_SOUT			1
+
+#define MT8195_VDO1_MIXER_IN3_SEL_IN				0xf2c
+#define MT8195_MIXER_IN3_SEL_IN_FROM_MERGE2_ASYNC_SOUT			1
+
+#define MT8195_VDO1_MIXER_IN4_SEL_IN				0xf30
+#define MT8195_MIXER_IN4_SEL_IN_FROM_MERGE3_ASYNC_SOUT			1
+
+#define MT8195_VDO1_MIXER_OUT_SOUT_SEL				0xf34
+#define MT8195_MIXER_SOUT_TO_MERGE4_ASYNC_SEL				1
+
+#define MT8195_VDO1_VPP_MERGE1_P0_SEL_IN			0xf3c
+#define MT8195_VPP_MERGE1_P0_SEL_IN_FROM_MDP_RDMA2			1
+
+#define MT8195_VDO1_MERGE0_ASYNC_SOUT_SEL			0xf40
+#define MT8195_SOUT_TO_MIXER_IN1_SEL					1
+
+#define MT8195_VDO1_MERGE1_ASYNC_SOUT_SEL			0xf44
+#define MT8195_SOUT_TO_MIXER_IN2_SEL					1
+
+#define MT8195_VDO1_MERGE2_ASYNC_SOUT_SEL			0xf48
+#define MT8195_SOUT_TO_MIXER_IN3_SEL					1
+
+#define MT8195_VDO1_MERGE3_ASYNC_SOUT_SEL			0xf4c
+#define MT8195_SOUT_TO_MIXER_IN4_SEL					1
+
+#define MT8195_VDO1_MERGE4_ASYNC_SEL_IN				0xf50
+#define MT8195_MERGE4_ASYNC_SEL_IN_FROM_MIXER_OUT_SOUT			1
+
+#define MT8195_VDO1_MIXER_IN1_SOUT_SEL				0xf58
+#define MT8195_MIXER_IN1_SOUT_TO_DISP_MIXER				0
+
+#define MT8195_VDO1_MIXER_IN2_SOUT_SEL				0xf5c
+#define MT8195_MIXER_IN2_SOUT_TO_DISP_MIXER				0
+
+#define MT8195_VDO1_MIXER_IN3_SOUT_SEL				0xf60
+#define MT8195_MIXER_IN3_SOUT_TO_DISP_MIXER				0
+
+#define MT8195_VDO1_MIXER_IN4_SOUT_SEL				0xf64
+#define MT8195_MIXER_IN4_SOUT_TO_DISP_MIXER				0
+
+#define MT8195_VDO1_MIXER_SOUT_SEL_IN				0xf68
+#define MT8195_MIXER_SOUT_SEL_IN_FROM_DISP_MIXER			0
+
 static const struct mtk_mmsys_routes mmsys_mt8195_routing_table[] = {
 	{
 		DDP_COMPONENT_OVL0, DDP_COMPONENT_RDMA0,
@@ -367,4 +431,79 @@ static const struct mtk_mmsys_routes mmsys_mt8195_routing_table[] = {
 	}
 };
 
+static const struct mtk_mmsys_routes mmsys_mt8195_vdo1_routing_table[] = {
+	{
+		DDP_COMPONENT_MDP_RDMA0, DDP_COMPONENT_MERGE1,
+		MT8195_VDO1_VPP_MERGE0_P0_SEL_IN, GENMASK(0, 0),
+		MT8195_VPP_MERGE0_P0_SEL_IN_FROM_MDP_RDMA0
+	}, {
+		DDP_COMPONENT_MDP_RDMA1, DDP_COMPONENT_MERGE1,
+		MT8195_VDO1_VPP_MERGE0_P1_SEL_IN, GENMASK(0, 0),
+		MT8195_VPP_MERGE0_P1_SEL_IN_FROM_MDP_RDMA1
+	}, {
+		DDP_COMPONENT_MDP_RDMA2, DDP_COMPONENT_MERGE2,
+		MT8195_VDO1_VPP_MERGE1_P0_SEL_IN, GENMASK(0, 0),
+		MT8195_VPP_MERGE1_P0_SEL_IN_FROM_MDP_RDMA2
+	}, {
+		DDP_COMPONENT_MERGE1, DDP_COMPONENT_ETHDR_MIXER,
+		MT8195_VDO1_MERGE0_ASYNC_SOUT_SEL, GENMASK(1, 0),
+		MT8195_SOUT_TO_MIXER_IN1_SEL
+	}, {
+		DDP_COMPONENT_MERGE2, DDP_COMPONENT_ETHDR_MIXER,
+		MT8195_VDO1_MERGE1_ASYNC_SOUT_SEL, GENMASK(1, 0),
+		MT8195_SOUT_TO_MIXER_IN2_SEL
+	}, {
+		DDP_COMPONENT_MERGE3, DDP_COMPONENT_ETHDR_MIXER,
+		MT8195_VDO1_MERGE2_ASYNC_SOUT_SEL, GENMASK(1, 0),
+		MT8195_SOUT_TO_MIXER_IN3_SEL
+	}, {
+		DDP_COMPONENT_MERGE4, DDP_COMPONENT_ETHDR_MIXER,
+		MT8195_VDO1_MERGE3_ASYNC_SOUT_SEL, GENMASK(1, 0),
+		MT8195_SOUT_TO_MIXER_IN4_SEL
+	}, {
+		DDP_COMPONENT_ETHDR_MIXER, DDP_COMPONENT_MERGE5,
+		MT8195_VDO1_MIXER_OUT_SOUT_SEL, GENMASK(0, 0),
+		MT8195_MIXER_SOUT_TO_MERGE4_ASYNC_SEL
+	}, {
+		DDP_COMPONENT_MERGE1, DDP_COMPONENT_ETHDR_MIXER,
+		MT8195_VDO1_MIXER_IN1_SEL_IN, GENMASK(0, 0),
+		MT8195_MIXER_IN1_SEL_IN_FROM_MERGE0_ASYNC_SOUT
+	}, {
+		DDP_COMPONENT_MERGE2, DDP_COMPONENT_ETHDR_MIXER,
+		MT8195_VDO1_MIXER_IN2_SEL_IN, GENMASK(0, 0),
+		MT8195_MIXER_IN2_SEL_IN_FROM_MERGE1_ASYNC_SOUT
+	}, {
+		DDP_COMPONENT_MERGE3, DDP_COMPONENT_ETHDR_MIXER,
+		MT8195_VDO1_MIXER_IN3_SEL_IN, GENMASK(0, 0),
+		MT8195_MIXER_IN3_SEL_IN_FROM_MERGE2_ASYNC_SOUT
+	}, {
+		DDP_COMPONENT_MERGE4, DDP_COMPONENT_ETHDR_MIXER,
+		MT8195_VDO1_MIXER_IN4_SEL_IN, GENMASK(0, 0),
+		MT8195_MIXER_IN4_SEL_IN_FROM_MERGE3_ASYNC_SOUT
+	}, {
+		DDP_COMPONENT_ETHDR_MIXER, DDP_COMPONENT_MERGE5,
+		MT8195_VDO1_MIXER_SOUT_SEL_IN, GENMASK(2, 0),
+		MT8195_MIXER_SOUT_SEL_IN_FROM_DISP_MIXER
+	}, {
+		DDP_COMPONENT_ETHDR_MIXER, DDP_COMPONENT_MERGE5,
+		MT8195_VDO1_MERGE4_ASYNC_SEL_IN, GENMASK(2, 0),
+		MT8195_MERGE4_ASYNC_SEL_IN_FROM_MIXER_OUT_SOUT
+	}, {
+		DDP_COMPONENT_MERGE5, DDP_COMPONENT_DPI1,
+		MT8195_VDO1_DISP_DPI1_SEL_IN, GENMASK(1, 0),
+		MT8195_DISP_DPI1_SEL_IN_FROM_VPP_MERGE4_MOUT
+	}, {
+		DDP_COMPONENT_MERGE5, DDP_COMPONENT_DPI1,
+		MT8195_VDO1_MERGE4_SOUT_SEL, GENMASK(1, 0),
+		MT8195_MERGE4_SOUT_TO_DPI1_SEL
+	}, {
+		DDP_COMPONENT_MERGE5, DDP_COMPONENT_DP_INTF1,
+		MT8195_VDO1_DISP_DP_INTF0_SEL_IN, GENMASK(1, 0),
+		MT8195_DISP_DP_INTF0_SEL_IN_FROM_VPP_MERGE4_MOUT
+	}, {
+		DDP_COMPONENT_MERGE5, DDP_COMPONENT_DP_INTF1,
+		MT8195_VDO1_MERGE4_SOUT_SEL, GENMASK(1, 0),
+		MT8195_MERGE4_SOUT_TO_DP_INTF0_SEL
+	}
+};
 #endif /* __SOC_MEDIATEK_MT8195_MMSYS_H */
diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index f3431448e843..6deb6552f035 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -80,6 +80,12 @@ static const struct mtk_mmsys_driver_data mt8195_vdosys0_driver_data = {
 	.num_routes = ARRAY_SIZE(mmsys_mt8195_routing_table),
 };
 
+static const struct mtk_mmsys_driver_data mt8195_vdosys1_driver_data = {
+	.clk_driver = "clk-mt8195-vdo1",
+	.routes = mmsys_mt8195_vdo1_routing_table,
+	.num_routes = ARRAY_SIZE(mmsys_mt8195_vdo1_routing_table),
+};
+
 static const struct mtk_mmsys_driver_data mt8365_mmsys_driver_data = {
 	.clk_driver = "clk-mt8365-mm",
 	.routes = mt8365_mmsys_routing_table,
@@ -311,6 +317,10 @@ static const struct of_device_id of_match_mtk_mmsys[] = {
 		.compatible = "mediatek,mt8195-vdosys0",
 		.data = &mt8195_vdosys0_driver_data,
 	},
+	{
+		.compatible = "mediatek,mt8195-vdosys1",
+		.data = &mt8195_vdosys1_driver_data,
+	},
 	{
 		.compatible = "mediatek,mt8365-mmsys",
 		.data = &mt8365_mmsys_driver_data,
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:10:04 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:10:04 +0800
Subject: [PATCH v29 0/7] Add MediaTek SoC DRM (vdosys1) support for mt8195
Message-ID: <20221227081011.6426-1-nancy.lin@mediatek.com>

The hardware path of vdosys1 with DPTx output need to go through by several modules, such as, OVL_ADAPTOR and MERGE.

Add DRM and these modules support by the patches below:

Changes in v29:
- rebase to next-20221226
- fix reviewer comment in v28
  - keep original flow if comp node not found in mtk_drm_crtc_create()

Changes in v28:
- rebase to next-20221107
- fix reviewer comment in v27
  - extra new line at the end mtk_ethdr.h

Changes in v27:
- rebase to next-20221102
- change mmsys compatible for mt8195 vdosys1
  - base on jason's series[ref 1]
- fix reviewer comment
  - add error return code if no ovl_adaptor's comp found

Changes in v26:
- rebase to next-20220819
- resend for patch corrupted in v25

Changes in v25:
- rebase to next-20220803

Changes in v24:
- fix ovl_adaptor binding issue (mtk_disp_ovl_adaptor.c)
  - Since ovl_adaptor is an aggregated component, it should be bounded after
    all its child components are bounded.
- rebase to next-20220708

Changes in v23:
- separate[7] mmsys/mutex and drm patches into two series

Changes in v22:
- rebase to next-20220525
- rebase to vdosys0 series v22
- separate dts to a new patch

Changes in v21:
- fix reviewer comment
  - fix rdma and ethdr binding doc and dts

Changes in v20:
- fix reviewer comment
  - update mmsys update bit api name
  - add mtk_mmsys_update_bits error message if lose gce property
  - list all mt8195 vdosys1 reset bits

Changes in v19:
- fix reviewer comment
  - separate mt8195 mmsys component to a new patch
  - separate mt8195 vdo0 and vdo1 routing table
  - separate mmsys_write_reg api to a new patch and simplify write reg code
  - separate mmsys 64 bit reset to a new patch
  - separate mtk-mutex dp_intf1 component to a new patch

Changes in v18:
- fix reviewer comment
  - fix rdma binding doc
  - fix ethdr binding doc
  - refine mmsys config cmdq support
  - refine merge reset control flow, get reset control in probe function
  - add ethdr reset control error handling and remove dbg log
- rebase to vdosys0 series v20 (ref [5])

Changes in v17:
- fix reviewer comment in v16
  - separate ovl adaptor comp in mtk-mmsys and mtk-mutex
  - separate mmsys config API
  - move mdp_rdma binding yaml
- fix ovl adaptor pm runtime get sync timing issue
- rebase to vdosys0 series v19 (ref [5])
- rebase to [7] for modify vblank register change

Changes in v16:
- fix reviewer comment in v 15
  - fix mtk_drm_ddp_comp.c alignment
  - fix vdosys0 mmsys num before adding vdosys1 patch

Changes in v15:
- fix ethdr uppercase hex number in dts

Changes in v14:
- remove MTK_MMSYS 64 bit dependency
- add ethdr.yaml back and fix dt_schema check fail

Resend v13
- add related maintainer in maillist

Changes in v13:
- fix reviewer comment in v12
  - fix rdma dt-binding format
  - fix dts node naming
- fix 32 bit build error
  - modify 64bit dependency for mtk-mmsys
- rebase to vdosys0 series v16. (ref [5])

Changes in v12:
- fix reviewer comment in v11
  - modify mbox index
  - refine dma dev for ovl_adaptor sub driver

Changes in v11:
- remove ethdr vblank spin lock
- refine ovl_adaptor print message

Changes in v10:
- refine ethdr reset control using devm_reset_control_array_get_optional_exclusive
- fix ovl_adaptor mtk_ovl_adaptor_clk_enable error handle issue

Changes in v9:
- rebase on kernel-5.16-rc1
- rebase on vdosys0 series v13. (ref [5])
- fix ovl_adaptor sub driver is brought up unintentionally
- fix clang build test fail- duplicate ethdr/mdp_rdma init_module/cleanup_module symbol issue 

Changes in v8:
- separate merge async reset to new patch.
- separate drm ovl_adaptor sub driver to new patch.
- fix reviewer comment in v7.

Changes in v7:
- rebase on vdosys0 series v12 (ref[5])
- add dma description in ethdr binding document.
- refine vdosys1 bit definition of mmsys routing table.
- separate merge modification into 3 pathces.
- separate mutex modification into 2 patches.
- add plane color coding for mdp_rdma csc.
- move mdp_rdma pm control to ovl_adaptor.
- fix reviewer comment in v6.

Changes in v6:
- rebase on kernel-5.15-rc1.
- change mbox label to gce0 for dts node of vdosys1.
- modify mmsys reset num for mt8195.
- rebase on vdosys0 series v10. (ref [5])
- use drm to bring up ovl_adaptor driver.
- move drm iommu/mutex check from kms init to drm bind.
- modify rdma binding doc location. (Documentation/devicetree/bindings/arm/)
- modify for reviewer's comment in v5.

Changes in v5:
- add mmsys reset controller reference.

Changes in v4:
- use merge common driver for merge1~4.
- refine ovl_adaptor rdma driver.
- use ovl_adaptor ddp_comp function instead of ethdr.
- modify for reviewer's comment in v3.

Changes in v3:
- modify for reviewer's comment in v2.
- add vdosys1 2 pixels align limit.
- add mixer odd offset support.

Changes in v2:
- Merge PSEUDO_OVL and ETHDR into one DRM component.
- Add mmsys config API for vdosys1 hardware setting.
- Add mmsys reset control using linux reset framework.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>

This series are based on the following patch:
[1] Change mmsys compatible for mt8195 mediatek-drm
    20221126101220.18179-1-jason-jh.lin at mediatek.com
[2] Add MediaTek SoC(vdosys1) support for mt8195
    20221103032512.9144-1-nancy.lin at mediatek.com

Nancy.Lin (7):
  dt-bindings: mediatek: add ethdr definition for mt8195
  drm/mediatek: add ETHDR support for MT8195
  drm/mediatek: add ovl_adaptor support for MT8195
  drm/mediatek: add dma dev get function
  drm/mediatek: modify mediatek-drm for mt8195 multi mmsys support
  drm/mediatek: add drm ovl_adaptor sub driver for MT8195
  drm/mediatek: add mediatek-drm of vdosys1 support for MT8195

 .../display/mediatek/mediatek,ethdr.yaml      | 188 ++++++
 drivers/gpu/drm/mediatek/Makefile             |   2 +
 drivers/gpu/drm/mediatek/mtk_disp_drv.h       |  26 +
 .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 533 ++++++++++++++++++
 drivers/gpu/drm/mediatek/mtk_drm_crtc.c       |  85 ++-
 drivers/gpu/drm/mediatek/mtk_drm_crtc.h       |   6 +-
 drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c   | 129 +++--
 drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h   |  58 +-
 drivers/gpu/drm/mediatek/mtk_drm_drv.c        | 366 ++++++++----
 drivers/gpu/drm/mediatek/mtk_drm_drv.h        |  24 +-
 drivers/gpu/drm/mediatek/mtk_ethdr.c          | 370 ++++++++++++
 drivers/gpu/drm/mediatek/mtk_ethdr.h          |  25 +
 12 files changed, 1624 insertions(+), 188 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/display/mediatek/mediatek,ethdr.yaml
 create mode 100644 drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
 create mode 100644 drivers/gpu/drm/mediatek/mtk_ethdr.c
 create mode 100644 drivers/gpu/drm/mediatek/mtk_ethdr.h

-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:04:34 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:34 +0800
Subject: [PATCH v29 02/11] dt-bindings: reset: mt8195: add vdosys1 reset control bit
In-Reply-To: <20221227080443.6273-1-nancy.lin@mediatek.com>
References: <20221227080443.6273-1-nancy.lin@mediatek.com>
Message-ID: <20221227080443.6273-3-nancy.lin@mediatek.com>

Add vdosys1 reset control bit for MT8195 platform.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: Chun-Kuang Hu <chunkuang.hu at kernel.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Rex-BC Chen <rex-bc.chen at mediatek.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Acked-by: Philipp Zabel <p.zabel at pengutronix.de>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 include/dt-bindings/reset/mt8195-resets.h | 45 +++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/include/dt-bindings/reset/mt8195-resets.h b/include/dt-bindings/reset/mt8195-resets.h
index 24ab3631dcea..e61660438d61 100644
--- a/include/dt-bindings/reset/mt8195-resets.h
+++ b/include/dt-bindings/reset/mt8195-resets.h
@@ -35,4 +35,49 @@
 #define MT8195_INFRA_RST2_PCIE_P1_SWRST        4
 #define MT8195_INFRA_RST2_USBSIF_P1_SWRST      5
 
+/* VDOSYS1 */
+#define MT8195_VDOSYS1_SW0_RST_B_SMI_LARB2                     0
+#define MT8195_VDOSYS1_SW0_RST_B_SMI_LARB3                     1
+#define MT8195_VDOSYS1_SW0_RST_B_GALS                          2
+#define MT8195_VDOSYS1_SW0_RST_B_FAKE_ENG0                     3
+#define MT8195_VDOSYS1_SW0_RST_B_FAKE_ENG1                     4
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA0                     5
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA1                     6
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA2                     7
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA3                     8
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE0                    9
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE1                    10
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE2                    11
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE3                    12
+#define MT8195_VDOSYS1_SW0_RST_B_VPP_MERGE4                    13
+#define MT8195_VDOSYS1_SW0_RST_B_VPP2_TO_VDO1_DL_ASYNC         14
+#define MT8195_VDOSYS1_SW0_RST_B_VPP3_TO_VDO1_DL_ASYNC         15
+#define MT8195_VDOSYS1_SW0_RST_B_DISP_MUTEX                    16
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA4                     17
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA5                     18
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA6                     19
+#define MT8195_VDOSYS1_SW0_RST_B_MDP_RDMA7                     20
+#define MT8195_VDOSYS1_SW0_RST_B_DP_INTF0                      21
+#define MT8195_VDOSYS1_SW0_RST_B_DPI0                          22
+#define MT8195_VDOSYS1_SW0_RST_B_DPI1                          23
+#define MT8195_VDOSYS1_SW0_RST_B_DISP_MONITOR                  24
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE0_DL_ASYNC               25
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE1_DL_ASYNC               26
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE2_DL_ASYNC               27
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE3_DL_ASYNC               28
+#define MT8195_VDOSYS1_SW0_RST_B_MERGE4_DL_ASYNC               29
+#define MT8195_VDOSYS1_SW0_RST_B_VDO0_DSC_TO_VDO1_DL_ASYNC     30
+#define MT8195_VDOSYS1_SW0_RST_B_VDO0_MERGE_TO_VDO1_DL_ASYNC   31
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE0                   32
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE0                   33
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_BE                    34
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE1                   48
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE1                   49
+#define MT8195_VDOSYS1_SW1_RST_B_DISP_MIXER                    50
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE0_DL_ASYNC          51
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_FE1_DL_ASYNC          52
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE0_DL_ASYNC          53
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_GFX_FE1_DL_ASYNC          54
+#define MT8195_VDOSYS1_SW1_RST_B_HDR_VDO_BE_DL_ASYNC           55
+
 #endif  /* _DT_BINDINGS_RESET_CONTROLLER_MT8195 */
-- 
2.18.0



From nancy.lin at mediatek.com  Tue Dec 27 00:04:39 2022
From: nancy.lin at mediatek.com (Nancy.Lin)
Date: Tue, 27 Dec 2022 16:04:39 +0800
Subject: [PATCH v29 07/11] soc: mediatek: add cmdq support of mtk-mmsys config API for mt8195 vdosys1
In-Reply-To: <20221227080443.6273-1-nancy.lin@mediatek.com>
References: <20221227080443.6273-1-nancy.lin@mediatek.com>
Message-ID: <20221227080443.6273-8-nancy.lin@mediatek.com>

Add cmdq support for mtk-mmsys config API.
The mmsys config register settings need to take effect with the other
HW settings(like OVL_ADAPTOR...) at the same vblanking time.

If we use CPU to write the mmsys reg, we can't guarantee all the
settings can be written in the same vblanking time.
Cmdq is used for this purpose. We prepare all the related HW settings
in one cmdq packet. The first command in the packet is "wait stream done",
and then following with all the HW settings. After the cmdq packet is
flush to GCE HW. The GCE waits for the "stream done event" to coming
and then starts flushing all the HW settings. This can guarantee all
the settings flush in the same vblanking.

Signed-off-by: Nancy.Lin <nancy.lin at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: CK Hu <ck.hu at mediatek.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen at mediatek.com>
---
 drivers/soc/mediatek/mtk-mmsys.c       | 63 ++++++++++++++++++--------
 include/linux/soc/mediatek/mtk-mmsys.h | 15 ++++--
 2 files changed, 55 insertions(+), 23 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index 241416803c23..3383567219f8 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -97,12 +97,27 @@ struct mtk_mmsys {
 	const struct mtk_mmsys_driver_data *data;
 	spinlock_t lock; /* protects mmsys_sw_rst_b reg */
 	struct reset_controller_dev rcdev;
+	struct cmdq_client_reg cmdq_base;
 };
 
-static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val)
+static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val,
+				  struct cmdq_pkt *cmdq_pkt)
 {
 	u32 tmp;
 
+#if IS_REACHABLE(CONFIG_MTK_CMDQ)
+	if (cmdq_pkt) {
+		if (mmsys->cmdq_base.size == 0) {
+			pr_err("mmsys lose gce property, failed to update mmsys bits with cmdq");
+			return;
+		}
+		cmdq_pkt_write_mask(cmdq_pkt, mmsys->cmdq_base.subsys,
+				    mmsys->cmdq_base.offset + offset, val,
+				    mask);
+		return;
+	}
+#endif
+
 	tmp = readl_relaxed(mmsys->regs + offset);
 	tmp = (tmp & ~mask) | (val & mask);
 	writel_relaxed(tmp, mmsys->regs + offset);
@@ -119,7 +134,7 @@ void mtk_mmsys_ddp_connect(struct device *dev,
 	for (i = 0; i < mmsys->data->num_routes; i++)
 		if (cur == routes[i].from_comp && next == routes[i].to_comp)
 			mtk_mmsys_update_bits(mmsys, routes[i].addr, routes[i].mask,
-					      routes[i].val);
+					      routes[i].val, NULL);
 }
 EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_connect);
 
@@ -133,42 +148,45 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
 
 	for (i = 0; i < mmsys->data->num_routes; i++)
 		if (cur == routes[i].from_comp && next == routes[i].to_comp)
-			mtk_mmsys_update_bits(mmsys, routes[i].addr, routes[i].mask, 0);
+			mtk_mmsys_update_bits(mmsys, routes[i].addr, routes[i].mask, 0, NULL);
 }
 EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_disconnect);
 
-void mtk_mmsys_merge_async_config(struct device *dev, int idx, int width, int height)
+void mtk_mmsys_merge_async_config(struct device *dev, int idx, int width, int height,
+				  struct cmdq_pkt *cmdq_pkt)
 {
 	mtk_mmsys_update_bits(dev_get_drvdata(dev), MT8195_VDO1_MERGE0_ASYNC_CFG_WD + 0x10 * idx,
-			      ~0, height << 16 | width);
+			      ~0, height << 16 | width, cmdq_pkt);
 }
 EXPORT_SYMBOL_GPL(mtk_mmsys_merge_async_config);
 
-void mtk_mmsys_hdr_config(struct device *dev, int be_width, int be_height)
+void mtk_mmsys_hdr_config(struct device *dev, int be_width, int be_height,
+			  struct cmdq_pkt *cmdq_pkt)
 {
 	mtk_mmsys_update_bits(dev_get_drvdata(dev), MT8195_VDO1_HDRBE_ASYNC_CFG_WD, ~0,
-			      be_height << 16 | be_width);
+			      be_height << 16 | be_width, cmdq_pkt);
 }
 EXPORT_SYMBOL_GPL(mtk_mmsys_hdr_config);
 
 void mtk_mmsys_mixer_in_config(struct device *dev, int idx, bool alpha_sel, u16 alpha,
-			       u8 mode, u32 biwidth)
+			       u8 mode, u32 biwidth, struct cmdq_pkt *cmdq_pkt)
 {
 	struct mtk_mmsys *mmsys = dev_get_drvdata(dev);
 
 	mtk_mmsys_update_bits(mmsys, MT8195_VDO1_MIXER_IN1_ALPHA + (idx - 1) * 4, ~0,
-			      alpha << 16 | alpha);
+			      alpha << 16 | alpha, cmdq_pkt);
 	mtk_mmsys_update_bits(mmsys, MT8195_VDO1_HDR_TOP_CFG, BIT(19 + idx),
-			      alpha_sel << (19 + idx));
+			      alpha_sel << (19 + idx), cmdq_pkt);
 	mtk_mmsys_update_bits(mmsys, MT8195_VDO1_MIXER_IN1_PAD + (idx - 1) * 4,
-			      GENMASK(31, 16) | GENMASK(1, 0), biwidth << 16 | mode);
+			      GENMASK(31, 16) | GENMASK(1, 0), biwidth << 16 | mode, cmdq_pkt);
 }
 EXPORT_SYMBOL_GPL(mtk_mmsys_mixer_in_config);
 
-void mtk_mmsys_mixer_in_channel_swap(struct device *dev, int idx, bool channel_swap)
+void mtk_mmsys_mixer_in_channel_swap(struct device *dev, int idx, bool channel_swap,
+				     struct cmdq_pkt *cmdq_pkt)
 {
 	mtk_mmsys_update_bits(dev_get_drvdata(dev), MT8195_VDO1_MIXER_IN1_PAD + (idx - 1) * 4,
-			      BIT(4), channel_swap << 4);
+			      BIT(4), channel_swap << 4, cmdq_pkt);
 }
 EXPORT_SYMBOL_GPL(mtk_mmsys_mixer_in_channel_swap);
 
@@ -179,20 +197,20 @@ void mtk_mmsys_ddp_dpi_fmt_config(struct device *dev, u32 val)
 	switch (val) {
 	case MTK_DPI_RGB888_SDR_CON:
 		mtk_mmsys_update_bits(mmsys, MT8186_MMSYS_DPI_OUTPUT_FORMAT,
-				      MT8186_DPI_FORMAT_MASK, MT8186_DPI_RGB888_SDR_CON);
+				      MT8186_DPI_FORMAT_MASK, MT8186_DPI_RGB888_SDR_CON, NULL);
 		break;
 	case MTK_DPI_RGB565_SDR_CON:
 		mtk_mmsys_update_bits(mmsys, MT8186_MMSYS_DPI_OUTPUT_FORMAT,
-				      MT8186_DPI_FORMAT_MASK, MT8186_DPI_RGB565_SDR_CON);
+				      MT8186_DPI_FORMAT_MASK, MT8186_DPI_RGB565_SDR_CON, NULL);
 		break;
 	case MTK_DPI_RGB565_DDR_CON:
 		mtk_mmsys_update_bits(mmsys, MT8186_MMSYS_DPI_OUTPUT_FORMAT,
-				      MT8186_DPI_FORMAT_MASK, MT8186_DPI_RGB565_DDR_CON);
+				      MT8186_DPI_FORMAT_MASK, MT8186_DPI_RGB565_DDR_CON, NULL);
 		break;
 	case MTK_DPI_RGB888_DDR_CON:
 	default:
 		mtk_mmsys_update_bits(mmsys, MT8186_MMSYS_DPI_OUTPUT_FORMAT,
-				      MT8186_DPI_FORMAT_MASK, MT8186_DPI_RGB888_DDR_CON);
+				      MT8186_DPI_FORMAT_MASK, MT8186_DPI_RGB888_DDR_CON, NULL);
 		break;
 	}
 }
@@ -207,9 +225,9 @@ static int mtk_mmsys_reset_update(struct reset_controller_dev *rcdev, unsigned l
 	spin_lock_irqsave(&mmsys->lock, flags);
 
 	if (assert)
-		mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), 0);
+		mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), 0, NULL);
 	else
-		mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), BIT(id));
+		mtk_mmsys_update_bits(mmsys, mmsys->data->sw0_rst_offset, BIT(id), BIT(id), NULL);
 
 	spin_unlock_irqrestore(&mmsys->lock, flags);
 
@@ -277,6 +295,13 @@ static int mtk_mmsys_probe(struct platform_device *pdev)
 	}
 
 	mmsys->data = of_device_get_match_data(&pdev->dev);
+
+#if IS_REACHABLE(CONFIG_MTK_CMDQ)
+	ret = cmdq_dev_get_client_reg(dev, &mmsys->cmdq_base, 0);
+	if (ret)
+		dev_dbg(dev, "No mediatek,gce-client-reg!\n");
+#endif
+
 	platform_set_drvdata(pdev, mmsys);
 
 	clks = platform_device_register_data(&pdev->dev, mmsys->data->clk_driver,
diff --git a/include/linux/soc/mediatek/mtk-mmsys.h b/include/linux/soc/mediatek/mtk-mmsys.h
index de84ca230d33..8eb5846985b4 100644
--- a/include/linux/soc/mediatek/mtk-mmsys.h
+++ b/include/linux/soc/mediatek/mtk-mmsys.h
@@ -6,6 +6,10 @@
 #ifndef __MTK_MMSYS_H
 #define __MTK_MMSYS_H
 
+#include <linux/mailbox_controller.h>
+#include <linux/mailbox/mtk-cmdq-mailbox.h>
+#include <linux/soc/mediatek/mtk-cmdq.h>
+
 enum mtk_ddp_comp_id;
 struct device;
 
@@ -82,13 +86,16 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
 
 void mtk_mmsys_ddp_dpi_fmt_config(struct device *dev, u32 val);
 
-void mtk_mmsys_merge_async_config(struct device *dev, int idx, int width, int height);
+void mtk_mmsys_merge_async_config(struct device *dev, int idx, int width,
+				  int height, struct cmdq_pkt *cmdq_pkt);
 
-void mtk_mmsys_hdr_config(struct device *dev, int be_width, int be_height);
+void mtk_mmsys_hdr_config(struct device *dev, int be_width, int be_height,
+			  struct cmdq_pkt *cmdq_pkt);
 
 void mtk_mmsys_mixer_in_config(struct device *dev, int idx, bool alpha_sel, u16 alpha,
-			       u8 mode, u32 biwidth);
+			       u8 mode, u32 biwidth, struct cmdq_pkt *cmdq_pkt);
 
-void mtk_mmsys_mixer_in_channel_swap(struct device *dev, int idx, bool channel_swap);
+void mtk_mmsys_mixer_in_channel_swap(struct device *dev, int idx, bool channel_swap,
+				     struct cmdq_pkt *cmdq_pkt);
 
 #endif /* __MTK_MMSYS_H */
-- 
2.18.0



From frank-w at public-files.de  Tue Dec 27 01:43:40 2022
From: frank-w at public-files.de (Frank Wunderlich)
Date: Tue, 27 Dec 2022 10:43:40 +0100
Subject: Aw: Re: [next v7 8/8] arm64: dts: mt7986: add Bananapi R3
In-Reply-To: <Y6dMWFy7gChG88j0@makrotopia.org>
References: <20221127114142.156573-1-linux@fw-web.de>
 <20221127114142.156573-9-linux@fw-web.de> <Y6dMWFy7gChG88j0@makrotopia.org>
Message-ID: <trinity-256904b6-bbb5-4424-9686-50ec7fa14f26-1672134220733@3c-app-gmx-bap27>


> Gesendet: Samstag, 24. Dezember 2022 um 20:00 Uhr
> Von: "Daniel Golle" <daniel at makrotopia.org>

> > +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts

> > +&spi0 {
> > +	pinctrl-names = "default";
> > +	pinctrl-0 = <&spi_flash_pins>;
> > +	cs-gpios = <0>, <0>;
>
> I don't think those bogus cs-gpios here and for spi1 below are needed.

at first look it seems it is needed...as i get this trace with 6.2:

[    2.145931] pc : mtk_spi_can_dma+0x0/0x34
[    2.155212] lr : mtk_spi_interrupt+0x74/0x360

[    2.091801] mtk-spi 1100a000.spi: spi-mem transfer timeout
[    2.097310] spi-nor: probe of spi0.0 failed with error -110
[    2.102930] Unable to handle kernel read from unreadable memory at virtual address 0000000000000010

but i get the same trace when reverting the cs-gpios change....seems something is broken in 6.2-rc1

6.1 works without the bogus cs-gpios (and the mt7531 interrupt-change)...

have tried reverting this commit, but it does not fix the issue:

8330e9e8269b 2022-12-07 spi: spi-mtk-nor: Add recovery mechanism for dma read timeout

any idea without doing a bisect?

regards Frank

> > +	status = "okay";
> > +};
> > +
> > +&spi1 {
> > +	pinctrl-names = "default";
> > +	pinctrl-0 = <&spic_pins>;
> > +	cs-gpios = <0>, <0>;
> > +	status = "okay";
> > +};



From nbd at nbd.name  Tue Dec 27 01:55:57 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Tue, 27 Dec 2022 10:55:57 +0100
Subject: [PATCH 3/5] net: ethernet: mtk_eth_soc: work around issue with
 sending small fragments
In-Reply-To: <20221124175410.5684-1-alexandr.lobakin@intel.com>
References: <20221123095754.36821-1-nbd@nbd.name>
 <20221123095754.36821-3-nbd@nbd.name>
 <20221124175410.5684-1-alexandr.lobakin@intel.com>
Message-ID: <9e4685a4-5dd1-9f7b-1235-30aebcc9dfd3@nbd.name>

On 24.11.22 18:54, Alexander Lobakin wrote:
> From: Felix Fietkau <nbd at nbd.name>
> Date: Wed, 23 Nov 2022 10:57:52 +0100
> 
>> When frames are sent with very small fragments, the DMA engine appears to
>> lock up and transmit attempts time out. Fix this by detecting the presence
>> of small fragments and use skb_gso_segment + skb_linearize to deal with
>> them
> 
> Nit: all of your commit messages don't have a trailing dot (.), not
> sure if it's important, but my eye is missing it definitely :D
> 
> skb_gso_segment() and skb_linearize() are slow as hell. I think you
> can do it differently. I guess only the first (head) and the last
> frag can be so small, right?
> 
> So, if a frag from shinfo->frags is less than 16, get a new frag of
> the minimum acceptable size via netdev_alloc_frag(), copy the data
> to it and pad the rest with zeroes. Then increase skb->len and
> skb->data_len, skb_frag_unref() the current, "invalid" frag and
> replace the pointer to the new frag. I didn't miss anything I
> believe... Zero padding the tail is usual thing for NICs. skb frag
> substitution is less common, but should be legit.
> 
> If skb_headlen() is less than 16, try doing pskb_may_pull() +
> __skb_pull() at first. The argument would be `16 - headlen`. If
> pskb_may_pull() returns false, then yeah, you have no choice other
> than segmenting and linearizing ._.
I looked into this some more and spoke with people at MTK. It appears 
that in principle, the DMA engine is able to process very small 
fragments. However, when it is being flooded with them, a FIFO can 
overflow, which causes the hang that I was observing.
I think your suggestion likely would not fix the issue completely.
A MTK engineer also confirmed that my approach is the correct one for 
handling this.
I will send v2 with an updated description.

Thanks,

- Felix



From frank-w at public-files.de  Tue Dec 27 02:28:22 2022
From: frank-w at public-files.de (Frank Wunderlich)
Date: Tue, 27 Dec 2022 11:28:22 +0100
Subject: [BUG] 6.2-rc1 spi-mt65xx broken on mt7986
Message-ID: <trinity-bd6bf7f8-5dbc-42fc-891b-8bfc802a1a2c-1672136902605@3c-app-gmx-bap27>

Hi,

the following commit breaks SPIM-NOR on mt7986:

c6f7874687f7 2022-11-28 spi: mediatek: Enable irq when pdata is ready

> [    2.145931] pc : mtk_spi_can_dma+0x0/0x34
> [    2.155212] lr : mtk_spi_interrupt+0x74/0x360
>
> [    2.091801] mtk-spi 1100a000.spi: spi-mem transfer timeout
> [    2.097310] spi-nor: probe of spi0.0 failed with error -110
> [    2.102930] Unable to handle kernel read from unreadable memory at virtual address 0000000000000010

after reverting the commit, no trace happens and nor is recognized on my board

regards Frank



From frank-w at public-files.de  Tue Dec 27 02:29:38 2022
From: frank-w at public-files.de (Frank Wunderlich)
Date: Tue, 27 Dec 2022 11:29:38 +0100
Subject: Aw: Re: [next v7 8/8] arm64: dts: mt7986: add Bananapi R3
In-Reply-To: <trinity-256904b6-bbb5-4424-9686-50ec7fa14f26-1672134220733@3c-app-gmx-bap27>
References: <20221127114142.156573-1-linux@fw-web.de>
 <20221127114142.156573-9-linux@fw-web.de> <Y6dMWFy7gChG88j0@makrotopia.org>
 <trinity-256904b6-bbb5-4424-9686-50ec7fa14f26-1672134220733@3c-app-gmx-bap27>
Message-ID: <trinity-6777c8ee-36ac-4564-8542-f74d3a942a91-1672136978587@3c-app-gmx-bap27>

looks like i've found it:

when reverting these 2 (latter alone was not enough and seems not fixing the timeout as shown in my trace)

Revert "spi: mediatek: Enable irq when pdata is ready"  (HEAD -> 6.2-rc)
Revert "spi: spi-mtk-nor: Add recovery mechanism for dma read timeout"

so this breaks spi on mt7986:

c6f7874687f7 2022-11-28 spi: mediatek: Enable irq when pdata is ready

have sent bug-report to mailinglist and author/reviewer/maintainer...

regards Frank


> Gesendet: Dienstag, 27. Dezember 2022 um 10:43 Uhr
> Von: "Frank Wunderlich" <frank-w at public-files.de>
>
> at first look it seems it is needed...as i get this trace with 6.2:
>
> [    2.145931] pc : mtk_spi_can_dma+0x0/0x34
> [    2.155212] lr : mtk_spi_interrupt+0x74/0x360
>
> [    2.091801] mtk-spi 1100a000.spi: spi-mem transfer timeout
> [    2.097310] spi-nor: probe of spi0.0 failed with error -110
> [    2.102930] Unable to handle kernel read from unreadable memory at virtual address 0000000000000010
>
> but i get the same trace when reverting the cs-gpios change....seems something is broken in 6.2-rc1
>
> 6.1 works without the bogus cs-gpios (and the mt7531 interrupt-change)...
>
> have tried reverting this commit, but it does not fix the issue:
>
> 8330e9e8269b 2022-12-07 spi: spi-mtk-nor: Add recovery mechanism for dma read timeout



From broonie at kernel.org  Tue Dec 27 03:57:15 2022
From: broonie at kernel.org (Mark Brown)
Date: Tue, 27 Dec 2022 11:57:15 +0000
Subject: [PATCH] ASoC: SOF: mediatek: mt8195: remove a redundant
 comparison of sram
In-Reply-To: <20221215061046.16934-1-yc.hung@mediatek.com>
References: <20221215061046.16934-1-yc.hung@mediatek.com>
Message-ID: <167214223584.82924.11453521857555977092.b4-ty@kernel.org>

On Thu, 15 Dec 2022 14:10:46 +0800, YC Hung wrote:
> DSP SRAM is not used for audio shared buffer between host and DSP so
> TOTAL_SIZE_SHARED_SRAM_FROM_TAIL is zero. Remove the definition and
> redundant comparison to fix coverity "unsigned compared against 0".
> 
> 

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/1] ASoC: SOF: mediatek: mt8195: remove a redundant comparison of sram
      commit: 3f58ff6b53c11773b1bd564082fae37d48e0cc40

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


From broonie at kernel.org  Tue Dec 27 03:57:52 2022
From: broonie at kernel.org (Mark Brown)
Date: Tue, 27 Dec 2022 11:57:52 +0000
Subject: [PATCH] spi: mediatek: Enable irq before the spi registration
In-Reply-To: <20221225-mtk-spi-fixes-v1-0-bb6c14c232f8@chromium.org>
References: <20221225-mtk-spi-fixes-v1-0-bb6c14c232f8@chromium.org>
Message-ID: <167214227202.88639.2335851712877417463.b4-ty@kernel.org>

On Sun, 25 Dec 2022 09:37:12 +0100, Ricardo Ribalda wrote:
> If the irq is enabled after the spi si registered, there can be a race
> with the initialization of the devices on the spi bus.
> 
> Eg:
> mtk-spi 1100a000.spi: spi-mem transfer timeout
> spi-nor: probe of spi0.0 failed with error -110
> Unable to handle kernel NULL pointer dereference at virtual address
> 0000000000000010
> ...
> Call trace:
>  mtk_spi_can_dma+0x0/0x2c
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next

Thanks!

[1/1] spi: mediatek: Enable irq before the spi registration
      commit: b24cded8c065d7cef8690b2c7b82b828cce57708

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


From lorenzo at kernel.org  Tue Dec 27 04:05:19 2022
From: lorenzo at kernel.org (Lorenzo Bianconi)
Date: Tue, 27 Dec 2022 13:05:19 +0100
Subject: [bug report} wifi: mt76: mt7612u/mt7610u - 6.1.x hard locking
 systems
In-Reply-To: <CAFktD2fbpUv9X5MY1jozyXoxvNXW=4OfaJ3B1KcZtdrBfiG4NA@mail.gmail.com>
References: <CAFktD2fRnSbNgWRRoGbQzG5_Mw7=zFJKTVBHS_3D+mNUYcv9hQ@mail.gmail.com>
 <Y6Y3wzSxbTG2aLAo@localhost.localdomain>
 <CAFktD2fbpUv9X5MY1jozyXoxvNXW=4OfaJ3B1KcZtdrBfiG4NA@mail.gmail.com>
Message-ID: <Y6rffzYy5hgIQKSE@localhost.localdomain>

> > > Starting with kernel 6.1 rc1, mt7612u and mt7610u are hard locking
> > > systems when connection is established. From a report this morning:
> > >
> > > "So I'm using a MT7610U based adapter and updated to 6.1.1 in Arch
> > > Linux and it's a complete lockup a few seconds after connecting as
> > > other people have said, I'll use the LTS kernel (5.15) in the
> > > meanwhile but this is probably going to get a lot of people that use
> > > distros with newer kernels."
> > >
> > > Background: Problem first discovered with kernel 6.1 rc1. Bug report
> > > was seen on linux-wireless around the rc5 timeframe. This is an
> > > additional bug report.
> > >
> > > I don't think additional info is needed as I have tested on several
> > > distros with various RC's of 6.1 and the problem is 100% reproducible
> > > and unavoidable. This is a show stopper bug and will result in
> > > widespread reports as distros upgrade to kernel 6.1.
> > >
> > > Regards,
> >
> > Hi Nick,
> >
> > Can you please try the patch below?
> > https://patchwork.kernel.org/project/linux-wireless/patch/20221217085624.52077-1-nbd at nbd.name/
> >
> > Regards,
> > Lorenzo
> 
> Lorenzo,
> 
> Today, I downloaded kernel 6.1.1, applied the above patch and
> compiled. Once installed, I tested with an Alfa ACM mt7612u based
> adapter. I no longer see the problem. No system lockups at all. iperf3
> is showing a consistent performance of around 387 Mb/s. dmesg is
> clean. The patch appears to have fixed the issue. I can also test with
> a mt7610u based adapter if you think it is necessary but since that
> patch was not to mt76, I decided testing only with the mt7612u adapter
> was probably good enough. Let me know if there is anything else I can
> do.

no, it is not necessary to test with mt7610u as well. Thanks for testing.

Regards,
Lorenzo

> 
> Nick
> https://github.com/morrownr/USB-WiFi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221227/cd8c7ad6/attachment.sig>

From roger.lu at mediatek.com  Tue Dec 27 04:09:11 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:11 +0800
Subject: [PATCH v2 10/13] soc: mediatek: mtk-svs: use common function to disable restore voltages
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-11-roger.lu@mediatek.com>

The timing of disabling SVS bank and restore default voltage is more than
one place. Therefore, add a common function to use for removing the superfluous
codes.

Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 44 +++++++++++++++++-----------------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index ee663cfd4483..6cda1e93c77a 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -651,6 +651,26 @@ static int svs_adjust_pm_opp_volts(struct svs_bank *svsb)
 	return ret;
 }
 
+static void svs_bank_disable_and_restore_default_volts(struct svs_platform *svsp,
+						       struct svs_bank *svsb)
+{
+	unsigned long flags;
+
+	if (svsb->mode_support == SVSB_MODE_ALL_DISABLE)
+		return;
+
+	/* This spinlock might wait for svs_isr() process */
+	spin_lock_irqsave(&svs_lock, flags);
+	svsp->pbank = svsb;
+	svs_switch_bank(svsp);
+	svs_writel_relaxed(svsp, SVSB_PTPEN_OFF, SVSEN);
+	svs_writel_relaxed(svsp, SVSB_INTSTS_VAL_CLEAN, INTSTS);
+	spin_unlock_irqrestore(&svs_lock, flags);
+
+	svsb->phase = SVSB_PHASE_ERROR;
+	svs_adjust_pm_opp_volts(svsb);
+}
+
 static int svs_dump_debug_show(struct seq_file *m, void *p)
 {
 	struct svs_platform *svsp = (struct svs_platform *)m->private;
@@ -726,7 +746,6 @@ static ssize_t svs_enable_debug_write(struct file *filp,
 {
 	struct svs_bank *svsb = file_inode(filp)->i_private;
 	struct svs_platform *svsp = dev_get_drvdata(svsb->dev);
-	unsigned long flags;
 	int enabled, ret;
 	char *buf = NULL;
 
@@ -742,16 +761,8 @@ static ssize_t svs_enable_debug_write(struct file *filp,
 		return ret;
 
 	if (!enabled) {
-		spin_lock_irqsave(&svs_lock, flags);
-		svsp->pbank = svsb;
+		svs_bank_disable_and_restore_default_volts(svsp, svsb);
 		svsb->mode_support = SVSB_MODE_ALL_DISABLE;
-		svs_switch_bank(svsp);
-		svs_writel_relaxed(svsp, SVSB_PTPEN_OFF, SVSEN);
-		svs_writel_relaxed(svsp, SVSB_INTSTS_VAL_CLEAN, INTSTS);
-		spin_unlock_irqrestore(&svs_lock, flags);
-
-		svsb->phase = SVSB_PHASE_ERROR;
-		svs_adjust_pm_opp_volts(svsb);
 	}
 
 	kfree(buf);
@@ -1568,7 +1579,6 @@ static int svs_suspend(struct device *dev)
 {
 	struct svs_platform *svsp = dev_get_drvdata(dev);
 	struct svs_bank *svsb;
-	unsigned long flags;
 	int ret;
 	u32 idx;
 
@@ -1580,17 +1590,7 @@ static int svs_suspend(struct device *dev)
 
 	for (idx = 0; idx < svsp->bank_max; idx++) {
 		svsb = &svsp->banks[idx];
-
-		/* This might wait for svs_isr() process */
-		spin_lock_irqsave(&svs_lock, flags);
-		svsp->pbank = svsb;
-		svs_switch_bank(svsp);
-		svs_writel_relaxed(svsp, SVSB_PTPEN_OFF, SVSEN);
-		svs_writel_relaxed(svsp, SVSB_INTSTS_VAL_CLEAN, INTSTS);
-		spin_unlock_irqrestore(&svs_lock, flags);
-
-		svsb->phase = SVSB_PHASE_ERROR;
-		svs_adjust_pm_opp_volts(svsb);
+		svs_bank_disable_and_restore_default_volts(svsp, svsb);
 	}
 
 	ret = reset_control_assert(svsp->rst);
-- 
2.18.0



From roger.lu at mediatek.com  Tue Dec 27 04:09:06 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:06 +0800
Subject: [PATCH v2 05/13] soc: mediatek: mtk-svs: move svs_platform_probe into probe
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-6-roger.lu@mediatek.com>

From: Matthias Brugger <matthias.bgg at gmail.com>

Moving svs_platform_probe into driver probe function will allow us to
reduce svs_platform members. This will be done in a follow-up patch.

Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 20 ++++----------------
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 7fea1a5bb842..bbec96696c55 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -2325,17 +2325,17 @@ static const struct of_device_id svs_of_match[] = {
 	},
 };
 
-static struct svs_platform *svs_platform_probe(struct platform_device *pdev)
+static int svs_probe(struct platform_device *pdev)
 {
 	struct svs_platform *svsp;
 	const struct svs_platform_data *svsp_data;
-	int ret;
+	int ret, svsp_irq;
 
 	svsp_data = of_device_get_match_data(&pdev->dev);
 
 	svsp = devm_kzalloc(&pdev->dev, sizeof(*svsp), GFP_KERNEL);
 	if (!svsp)
-		return ERR_PTR(-ENOMEM);
+		return -ENOMEM;
 
 	svsp->dev = &pdev->dev;
 	svsp->name = svsp_data->name;
@@ -2346,19 +2346,7 @@ static struct svs_platform *svs_platform_probe(struct platform_device *pdev)
 
 	ret = svsp_data->probe(svsp);
 	if (ret)
-		return ERR_PTR(ret);
-
-	return svsp;
-}
-
-static int svs_probe(struct platform_device *pdev)
-{
-	struct svs_platform *svsp;
-	int svsp_irq, ret;
-
-	svsp = svs_platform_probe(pdev);
-	if (IS_ERR(svsp))
-		return PTR_ERR(svsp);
+		return ret;
 
 	if (!svs_is_efuse_data_correct(svsp)) {
 		dev_notice(svsp->dev, "efuse data isn't correct\n");
-- 
2.18.0



From roger.lu at mediatek.com  Tue Dec 27 04:09:10 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:10 +0800
Subject: [PATCH v2 09/13] soc: mediatek: mtk-svs: use svs clk control APIs
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-10-roger.lu@mediatek.com>

In MediaTek HW design, svs and thermal both use the same clk source.
It means that svs clk reference count from CCF includes thermal control
counts. That makes svs driver confuse whether it disabled svs's main clk
or not from CCF's perspective and lead to turn off their shared clk
unexpectedly. Therefore, we add svs clk control APIs to make sure svs's
main clk is controlled well by svs driver itself.

Here is a NG example. Rely on CCF's reference count and cause problem.

thermal probe (clk ref = 1)
-> svs probe (clk ref = 2)
   -> svs suspend (clk ref = 1)
      -> thermal suspend (clk ref = 0)
      -> thermal resume (clk ref = 1)
   -> svs resume (encounter error, clk ref = 1)
   -> svs suspend (clk ref = 0)
      -> thermal suspend (Fail here, thermal HW control w/o clk)

Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 54 +++++++++++++++++++++++++++-------
 1 file changed, 43 insertions(+), 11 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 70f87715a084..ee663cfd4483 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -6,6 +6,7 @@
 #include <linux/bitfield.h>
 #include <linux/bits.h>
 #include <linux/clk.h>
+#include <linux/clk-provider.h>
 #include <linux/completion.h>
 #include <linux/cpuidle.h>
 #include <linux/debugfs.h>
@@ -323,6 +324,7 @@ static const u32 svs_regs_v2[] = {
  * @bank_max: total number of svs banks
  * @efuse: svs efuse data received from NVMEM framework
  * @tefuse: thermal efuse data received from NVMEM framework
+ * @clk_cnt: clock count shows the clk enable/disable times by svs driver
  */
 struct svs_platform {
 	void __iomem *base;
@@ -337,6 +339,7 @@ struct svs_platform {
 	u32 bank_max;
 	u32 *efuse;
 	u32 *tefuse;
+	s32 clk_cnt;
 };
 
 struct svs_platform_data {
@@ -496,6 +499,32 @@ static void svs_switch_bank(struct svs_platform *svsp)
 	svs_writel_relaxed(svsp, svsb->core_sel, CORESEL);
 }
 
+static bool svs_is_clk_enabled(struct svs_platform *svsp)
+{
+	return svsp->clk_cnt > 0 ? true : false;
+}
+
+static int svs_clk_enable(struct svs_platform *svsp)
+{
+	int ret;
+
+	ret = clk_prepare_enable(svsp->main_clk);
+	if (ret) {
+		dev_err(svsp->dev, "cannot enable main_clk: %d\n", ret);
+		return ret;
+	}
+
+	svsp->clk_cnt++;
+
+	return 0;
+}
+
+static void svs_clk_disable(struct svs_platform *svsp)
+{
+	clk_disable_unprepare(svsp->main_clk);
+	svsp->clk_cnt--;
+}
+
 static u32 svs_bank_volt_to_opp_volt(u32 svsb_volt, u32 svsb_volt_step,
 				     u32 svsb_volt_base)
 {
@@ -1543,6 +1572,12 @@ static int svs_suspend(struct device *dev)
 	int ret;
 	u32 idx;
 
+	if (!svs_is_clk_enabled(svsp)) {
+		dev_err(svsp->dev, "svs clk is disabled already (%d)\n",
+			svsp->clk_cnt);
+		return 0;
+	}
+
 	for (idx = 0; idx < svsp->bank_max; idx++) {
 		svsb = &svsp->banks[idx];
 
@@ -1564,7 +1599,7 @@ static int svs_suspend(struct device *dev)
 		return ret;
 	}
 
-	clk_disable_unprepare(svsp->main_clk);
+	svs_clk_disable(svsp);
 
 	return 0;
 }
@@ -1574,11 +1609,9 @@ static int svs_resume(struct device *dev)
 	struct svs_platform *svsp = dev_get_drvdata(dev);
 	int ret;
 
-	ret = clk_prepare_enable(svsp->main_clk);
-	if (ret) {
-		dev_err(svsp->dev, "cannot enable main_clk, disable svs\n");
+	ret = svs_clk_enable(svsp);
+	if (ret)
 		return ret;
-	}
 
 	ret = reset_control_deassert(svsp->rst);
 	if (ret) {
@@ -1595,7 +1628,8 @@ static int svs_resume(struct device *dev)
 	return 0;
 
 out_of_resume:
-	clk_disable_unprepare(svsp->main_clk);
+	svs_clk_disable(svsp);
+
 	return ret;
 }
 
@@ -2340,11 +2374,9 @@ static int svs_probe(struct platform_device *pdev)
 		goto svs_probe_free_tefuse;
 	}
 
-	ret = clk_prepare_enable(svsp->main_clk);
-	if (ret) {
-		dev_err(svsp->dev, "cannot enable main clk: %d\n", ret);
+	ret = svs_clk_enable(svsp);
+	if (ret)
 		goto svs_probe_free_tefuse;
-	}
 
 	svsp->base = of_iomap(svsp->dev->of_node, 0);
 	if (IS_ERR_OR_NULL(svsp->base)) {
@@ -2385,7 +2417,7 @@ static int svs_probe(struct platform_device *pdev)
 	iounmap(svsp->base);
 
 svs_probe_clk_disable:
-	clk_disable_unprepare(svsp->main_clk);
+	svs_clk_disable(svsp);
 
 svs_probe_free_tefuse:
 	if (!IS_ERR_OR_NULL(svsp->tefuse))
-- 
2.18.0



From roger.lu at mediatek.com  Tue Dec 27 04:09:09 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:09 +0800
Subject: [PATCH v2 08/13] soc: mediatek: mtk-svs: use svs get efuse common function
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-9-roger.lu@mediatek.com>

SVS might need to read both svs efuse and thermal efuse on the probe flow.
Therefore, add a common efuse read function to remove the superfluous
codes.

Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 69 ++++++++++++----------------------
 1 file changed, 24 insertions(+), 45 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 9578baf3d9a7..70f87715a084 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -1701,26 +1701,28 @@ static int svs_bank_resource_setup(struct svs_platform *svsp)
 	return 0;
 }
 
-static int svs_thermal_efuse_get_data(struct svs_platform *svsp)
+static int svs_get_efuse_data(struct svs_platform *svsp,
+			      const char *nvmem_cell_name,
+			      u32 **svsp_efuse, size_t *svsp_efuse_max)
 {
 	struct nvmem_cell *cell;
 
-	/* Thermal efuse parsing */
-	cell = nvmem_cell_get(svsp->dev, "t-calibration-data");
+	cell = nvmem_cell_get(svsp->dev, nvmem_cell_name);
 	if (IS_ERR_OR_NULL(cell)) {
-		dev_err(svsp->dev, "no \"t-calibration-data\"? %ld\n", PTR_ERR(cell));
+		dev_err(svsp->dev, "no \"%s\"? %ld\n",
+			nvmem_cell_name, PTR_ERR(cell));
 		return PTR_ERR(cell);
 	}
 
-	svsp->tefuse = nvmem_cell_read(cell, &svsp->tefuse_max);
-	if (IS_ERR(svsp->tefuse)) {
-		dev_err(svsp->dev, "cannot read thermal efuse: %ld\n",
-			PTR_ERR(svsp->tefuse));
+	*svsp_efuse = nvmem_cell_read(cell, svsp_efuse_max);
+	if (IS_ERR(*svsp_efuse)) {
+		dev_err(svsp->dev, "cannot read \"%s\" efuse: %ld\n",
+			nvmem_cell_name, PTR_ERR(*svsp_efuse));
 		nvmem_cell_put(cell);
-		return PTR_ERR(svsp->tefuse);
+		return PTR_ERR(*svsp_efuse);
 	}
 
-	svsp->tefuse_max /= sizeof(u32);
+	*svsp_efuse_max /= sizeof(u32);
 	nvmem_cell_put(cell);
 
 	return 0;
@@ -1768,7 +1770,8 @@ static bool svs_mt8192_efuse_parsing(struct svs_platform *svsp)
 		svsb->vmax += svsb->dvt_fixed;
 	}
 
-	ret = svs_thermal_efuse_get_data(svsp);
+	ret = svs_get_efuse_data(svsp, "t-calibration-data",
+				 &svsp->tefuse, &svsp->tefuse_max);
 	if (ret)
 		return false;
 
@@ -1873,7 +1876,8 @@ static bool svs_mt8183_efuse_parsing(struct svs_platform *svsp)
 		}
 	}
 
-	ret = svs_thermal_efuse_get_data(svsp);
+	ret = svs_get_efuse_data(svsp, "t-calibration-data",
+				 &svsp->tefuse, &svsp->tefuse_max);
 	if (ret)
 		return false;
 
@@ -1975,32 +1979,6 @@ static bool svs_mt8183_efuse_parsing(struct svs_platform *svsp)
 	return true;
 }
 
-static bool svs_is_efuse_data_correct(struct svs_platform *svsp)
-{
-	struct nvmem_cell *cell;
-
-	/* Get svs efuse by nvmem */
-	cell = nvmem_cell_get(svsp->dev, "svs-calibration-data");
-	if (IS_ERR(cell)) {
-		dev_err(svsp->dev, "no \"svs-calibration-data\"? %ld\n",
-			PTR_ERR(cell));
-		return false;
-	}
-
-	svsp->efuse = nvmem_cell_read(cell, &svsp->efuse_max);
-	if (IS_ERR(svsp->efuse)) {
-		dev_err(svsp->dev, "cannot read svs efuse: %ld\n",
-			PTR_ERR(svsp->efuse));
-		nvmem_cell_put(cell);
-		return false;
-	}
-
-	svsp->efuse_max /= sizeof(u32);
-	nvmem_cell_put(cell);
-
-	return true;
-}
-
 static struct device *svs_get_subsys_device(struct svs_platform *svsp,
 					    const char *node_name)
 {
@@ -2335,8 +2313,9 @@ static int svs_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
-	if (!svs_is_efuse_data_correct(svsp)) {
-		dev_notice(svsp->dev, "efuse data isn't correct\n");
+	ret = svs_get_efuse_data(svsp, "svs-calibration-data",
+				 &svsp->efuse, &svsp->efuse_max);
+	if (ret) {
 		ret = -EPERM;
 		goto svs_probe_free_efuse;
 	}
@@ -2344,13 +2323,13 @@ static int svs_probe(struct platform_device *pdev)
 	if (!svsp_data->efuse_parsing(svsp)) {
 		dev_err(svsp->dev, "efuse data parsing failed\n");
 		ret = -EPERM;
-		goto svs_probe_free_resource;
+		goto svs_probe_free_tefuse;
 	}
 
 	ret = svs_bank_resource_setup(svsp);
 	if (ret) {
 		dev_err(svsp->dev, "svs bank resource setup fail: %d\n", ret);
-		goto svs_probe_free_resource;
+		goto svs_probe_free_tefuse;
 	}
 
 	svsp->main_clk = devm_clk_get(svsp->dev, "main");
@@ -2358,13 +2337,13 @@ static int svs_probe(struct platform_device *pdev)
 		dev_err(svsp->dev, "failed to get clock: %ld\n",
 			PTR_ERR(svsp->main_clk));
 		ret = PTR_ERR(svsp->main_clk);
-		goto svs_probe_free_resource;
+		goto svs_probe_free_tefuse;
 	}
 
 	ret = clk_prepare_enable(svsp->main_clk);
 	if (ret) {
 		dev_err(svsp->dev, "cannot enable main clk: %d\n", ret);
-		goto svs_probe_free_resource;
+		goto svs_probe_free_tefuse;
 	}
 
 	svsp->base = of_iomap(svsp->dev->of_node, 0);
@@ -2408,7 +2387,7 @@ static int svs_probe(struct platform_device *pdev)
 svs_probe_clk_disable:
 	clk_disable_unprepare(svsp->main_clk);
 
-svs_probe_free_resource:
+svs_probe_free_tefuse:
 	if (!IS_ERR_OR_NULL(svsp->tefuse))
 		kfree(svsp->tefuse);
 
-- 
2.18.0



From roger.lu at mediatek.com  Tue Dec 27 04:09:12 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:12 +0800
Subject: [PATCH v2 11/13] soc: mediatek: mtk-svs: restore default voltages when svs_init02() fail
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-12-roger.lu@mediatek.com>

If svs init02 fail, it means we cannot rely on svs bank voltages anymore.
We need to disable svs function and restore DVFS opp voltages back to the
default voltages for making sure we have enough DVFS voltages.

Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 6cda1e93c77a..b3a345205319 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -1495,6 +1495,7 @@ static int svs_init02(struct svs_platform *svsp)
 {
 	struct svs_bank *svsb;
 	unsigned long flags, time_left;
+	int ret;
 	u32 idx;
 
 	for (idx = 0; idx < svsp->bank_max; idx++) {
@@ -1513,7 +1514,8 @@ static int svs_init02(struct svs_platform *svsp)
 							msecs_to_jiffies(5000));
 		if (!time_left) {
 			dev_err(svsb->dev, "init02 completion timeout\n");
-			return -EBUSY;
+			ret = -EBUSY;
+			goto out_of_init02;
 		}
 	}
 
@@ -1531,12 +1533,21 @@ static int svs_init02(struct svs_platform *svsp)
 		if (svsb->type == SVSB_HIGH || svsb->type == SVSB_LOW) {
 			if (svs_sync_bank_volts_from_opp(svsb)) {
 				dev_err(svsb->dev, "sync volt fail\n");
-				return -EPERM;
+				ret = -EPERM;
+				goto out_of_init02;
 			}
 		}
 	}
 
 	return 0;
+
+out_of_init02:
+	for (idx = 0; idx < svsp->bank_max; idx++) {
+		svsb = &svsp->banks[idx];
+		svs_bank_disable_and_restore_default_volts(svsp, svsb);
+	}
+
+	return ret;
 }
 
 static void svs_mon_mode(struct svs_platform *svsp)
-- 
2.18.0



From roger.lu at mediatek.com  Tue Dec 27 04:09:14 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:14 +0800
Subject: [PATCH v2 13/13] soc: mediatek: mtk-svs: keep svs alive even though debug cmd create fail
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-14-roger.lu@mediatek.com>

Some projects might not support DEBUG_FS but still needs svs to be
supported. Therefore, keep svs alive even though debug cmd create fail.

Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 8ef330175d39..89579276c09c 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -806,7 +806,7 @@ static int svs_status_debug_show(struct seq_file *m, void *v)
 
 debug_fops_ro(status);
 
-static int svs_create_debug_cmds(struct svs_platform *svsp)
+static void svs_create_debug_cmds(struct svs_platform *svsp)
 {
 	struct svs_bank *svsb;
 	struct dentry *svs_dir, *svsb_dir, *file_entry;
@@ -831,7 +831,7 @@ static int svs_create_debug_cmds(struct svs_platform *svsp)
 	if (IS_ERR(svs_dir)) {
 		dev_err(svsp->dev, "cannot create %s: %ld\n",
 			d, PTR_ERR(svs_dir));
-		return PTR_ERR(svs_dir);
+		return;
 	}
 
 	for (i = 0; i < ARRAY_SIZE(svs_entries); i++) {
@@ -841,7 +841,7 @@ static int svs_create_debug_cmds(struct svs_platform *svsp)
 		if (IS_ERR(file_entry)) {
 			dev_err(svsp->dev, "cannot create %s/%s: %ld\n",
 				d, svs_entries[i].name, PTR_ERR(file_entry));
-			return PTR_ERR(file_entry);
+			return;
 		}
 	}
 
@@ -855,7 +855,7 @@ static int svs_create_debug_cmds(struct svs_platform *svsp)
 		if (IS_ERR(svsb_dir)) {
 			dev_err(svsp->dev, "cannot create %s/%s: %ld\n",
 				d, svsb->name, PTR_ERR(svsb_dir));
-			return PTR_ERR(svsb_dir);
+			return;
 		}
 
 		for (i = 0; i < ARRAY_SIZE(svsb_entries); i++) {
@@ -866,12 +866,10 @@ static int svs_create_debug_cmds(struct svs_platform *svsp)
 				dev_err(svsp->dev, "no %s/%s/%s?: %ld\n",
 					d, svsb->name, svsb_entries[i].name,
 					PTR_ERR(file_entry));
-				return PTR_ERR(file_entry);
+				return;
 			}
 		}
 	}
-
-	return 0;
 }
 
 static u32 interpolate(u32 f0, u32 f1, u32 v0, u32 v1, u32 fx)
@@ -2417,11 +2415,7 @@ static int svs_probe(struct platform_device *pdev)
 		goto svs_probe_iounmap;
 	}
 
-	ret = svs_create_debug_cmds(svsp);
-	if (ret) {
-		dev_err(svsp->dev, "svs create debug cmds fail: %d\n", ret);
-		goto svs_probe_iounmap;
-	}
+	svs_create_debug_cmds(svsp);
 
 	return 0;
 
-- 
2.18.0



From roger.lu at mediatek.com  Tue Dec 27 04:09:02 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:02 +0800
Subject: [PATCH v2 01/13] soc: mediatek: mtk-svs: enable the IRQ later
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-2-roger.lu@mediatek.com>

From: Ricardo Ribalda <ribalda at chromium.org>

If the system does not come from reset (like when is booted via
kexec(), the peripheral might trigger an IRQ before the data structures
are initialized.

Fixes:

[    0.227710] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000f08
[    0.227913] Call trace:
[    0.227918]  svs_isr+0x8c/0x538

Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 0469c9dfeb04..91e06f43969d 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -2379,20 +2379,6 @@ static int svs_probe(struct platform_device *pdev)
 		goto svs_probe_free_resource;
 	}
 
-	svsp_irq = platform_get_irq(pdev, 0);
-	if (svsp_irq < 0) {
-		ret = svsp_irq;
-		goto svs_probe_free_resource;
-	}
-
-	ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr,
-					IRQF_ONESHOT, svsp->name, svsp);
-	if (ret) {
-		dev_err(svsp->dev, "register irq(%d) failed: %d\n",
-			svsp_irq, ret);
-		goto svs_probe_free_resource;
-	}
-
 	svsp->main_clk = devm_clk_get(svsp->dev, "main");
 	if (IS_ERR(svsp->main_clk)) {
 		dev_err(svsp->dev, "failed to get clock: %ld\n",
@@ -2414,6 +2400,20 @@ static int svs_probe(struct platform_device *pdev)
 		goto svs_probe_clk_disable;
 	}
 
+	svsp_irq = platform_get_irq(pdev, 0);
+	if (svsp_irq < 0) {
+		ret = svsp_irq;
+		goto svs_probe_iounmap;
+	}
+
+	ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr,
+					IRQF_ONESHOT, svsp->name, svsp);
+	if (ret) {
+		dev_err(svsp->dev, "register irq(%d) failed: %d\n",
+			svsp_irq, ret);
+		goto svs_probe_iounmap;
+	}
+
 	ret = svs_start(svsp);
 	if (ret) {
 		dev_err(svsp->dev, "svs start fail: %d\n", ret);
-- 
2.18.0



From roger.lu at mediatek.com  Tue Dec 27 04:09:05 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:05 +0800
Subject: [PATCH v2 04/13] soc: mediatek: mtk-svs: improve readability of platform_probe
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-5-roger.lu@mediatek.com>

From: Matthias Brugger <matthias.bgg at gmail.com>

If a compatible misses a match data entry, then something is wrong in
the development phase, we don't need to check for that at runtime.

Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 5abf94aafbac..7fea1a5bb842 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -2332,10 +2332,6 @@ static struct svs_platform *svs_platform_probe(struct platform_device *pdev)
 	int ret;
 
 	svsp_data = of_device_get_match_data(&pdev->dev);
-	if (!svsp_data) {
-		dev_err(&pdev->dev, "no svs platform data?\n");
-		return ERR_PTR(-EPERM);
-	}
 
 	svsp = devm_kzalloc(&pdev->dev, sizeof(*svsp), GFP_KERNEL);
 	if (!svsp)
-- 
2.18.0



From roger.lu at mediatek.com  Tue Dec 27 04:09:03 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:03 +0800
Subject: [PATCH v2 02/13] soc: mediatek: mtk-svs: Use pm_runtime_resume_and_get() in svs_init01()
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-3-roger.lu@mediatek.com>

From: Shang XiaoJing <shangxiaojing at huawei.com>

svs_init01() calls pm_runtime_get_sync() and added fail path as
svs_init01_finish to put usage_counter. However, pm_runtime_get_sync()
will increment usage_counter even it failed. Fix it by replacing it with
pm_runtime_resume_and_get() to keep usage counter balanced.

Fixes: 681a02e95000 ("soc: mediatek: SVS: introduce MTK SVS engine")
Signed-off-by: Shang XiaoJing <shangxiaojing at huawei.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 91e06f43969d..465b60a5cedc 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -1324,7 +1324,7 @@ static int svs_init01(struct svs_platform *svsp)
 				svsb->pm_runtime_enabled_count++;
 			}
 
-			ret = pm_runtime_get_sync(svsb->opp_dev);
+			ret = pm_runtime_resume_and_get(svsb->opp_dev);
 			if (ret < 0) {
 				dev_err(svsb->dev, "mtcmos on fail: %d\n", ret);
 				goto svs_init01_resume_cpuidle;
-- 
2.18.0



From roger.lu at mediatek.com  Tue Dec 27 04:09:01 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:01 +0800
Subject: [PATCH v2 0/13] Enhance SVS's robustness
Message-ID: <20221227120914.11346-1-roger.lu@mediatek.com>

SVS driver got accepted upstream but still has room to be improved.
Therefore, we add these patches to fix issues and coding style.

Change since v1:
- Reorder patch for helping readness
- Re-write patch [9/13] to fix the corner case issue
- Remove redundant codes in patch [13/13]

Matthias Brugger (4):
  soc: mediatek: mtk-svs: clean up platform probing
  soc: mediatek: mtk-svs: improve readability of platform_probe
  soc: mediatek: mtk-svs: move svs_platform_probe into probe
  soc: mediatek: mtk-svs: delete superfluous platform data entries

Ricardo Ribalda (1):
  soc: mediatek: mtk-svs: enable the IRQ later

Roger Lu (7):
  soc: mtk-svs: mt8183: refactor o_slope calculation
  soc: mediatek: mtk-svs: use svs get efuse common function
  soc: mediatek: mtk-svs: use svs clk control APIs
  soc: mediatek: mtk-svs: use common function to disable restore
    voltages
  soc: mediatek: mtk-svs: restore default voltages when svs_init02()
    fail
  soc: mediatek: mtk-svs: add thermal voltage compensation if needed
  soc: mediatek: mtk-svs: keep svs alive even though debug cmd create
    fail

Shang XiaoJing (1):
  soc: mediatek: mtk-svs: Use pm_runtime_resume_and_get() in
    svs_init01()

 drivers/soc/mediatek/mtk-svs.c | 341 ++++++++++++++++-----------------
 1 file changed, 167 insertions(+), 174 deletions(-)




From roger.lu at mediatek.com  Tue Dec 27 04:09:08 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:08 +0800
Subject: [PATCH v2 07/13] soc: mtk-svs: mt8183: refactor o_slope calculation
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-8-roger.lu@mediatek.com>

The o_slope value is dependent of the o_slope_sign, refactor code to get
rid of unnecessary if constructs.

Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 51 +++++++++++++++-------------------
 1 file changed, 22 insertions(+), 29 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 308cd36a23fc..9578baf3d9a7 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -1893,26 +1893,27 @@ static bool svs_mt8183_efuse_parsing(struct svs_platform *svsp)
 	o_slope_sign = (svsp->tefuse[0] >> 7) & BIT(0);
 
 	ts_id = (svsp->tefuse[1] >> 9) & BIT(0);
-	o_slope = (svsp->tefuse[0] >> 26) & GENMASK(5, 0);
-
-	if (adc_cali_en_t == 1) {
-		if (!ts_id)
-			o_slope = 0;
-
-		if (adc_ge_t < 265 || adc_ge_t > 758 ||
-		    adc_oe_t < 265 || adc_oe_t > 758 ||
-		    o_vtsmcu[0] < -8 || o_vtsmcu[0] > 484 ||
-		    o_vtsmcu[1] < -8 || o_vtsmcu[1] > 484 ||
-		    o_vtsmcu[2] < -8 || o_vtsmcu[2] > 484 ||
-		    o_vtsmcu[3] < -8 || o_vtsmcu[3] > 484 ||
-		    o_vtsmcu[4] < -8 || o_vtsmcu[4] > 484 ||
-		    o_vtsabb < -8 || o_vtsabb > 484 ||
-		    degc_cali < 1 || degc_cali > 63) {
-			dev_err(svsp->dev, "bad thermal efuse, no mon mode\n");
-			goto remove_mt8183_svsb_mon_mode;
-		}
+	if (!ts_id) {
+		o_slope = 1534;
 	} else {
-		dev_err(svsp->dev, "no thermal efuse, no mon mode\n");
+		o_slope = (svsp->tefuse[0] >> 26) & GENMASK(5, 0);
+		if (!o_slope_sign)
+			o_slope = 1534 + o_slope * 10;
+		else
+			o_slope = 1534 - o_slope * 10;
+	}
+
+	if (adc_cali_en_t == 0 ||
+	    adc_ge_t < 265 || adc_ge_t > 758 ||
+	    adc_oe_t < 265 || adc_oe_t > 758 ||
+	    o_vtsmcu[0] < -8 || o_vtsmcu[0] > 484 ||
+	    o_vtsmcu[1] < -8 || o_vtsmcu[1] > 484 ||
+	    o_vtsmcu[2] < -8 || o_vtsmcu[2] > 484 ||
+	    o_vtsmcu[3] < -8 || o_vtsmcu[3] > 484 ||
+	    o_vtsmcu[4] < -8 || o_vtsmcu[4] > 484 ||
+	    o_vtsabb < -8 || o_vtsabb > 484 ||
+	    degc_cali < 1 || degc_cali > 63) {
+		dev_err(svsp->dev, "bad thermal efuse, no mon mode\n");
 		goto remove_mt8183_svsb_mon_mode;
 	}
 
@@ -1931,11 +1932,7 @@ static bool svs_mt8183_efuse_parsing(struct svs_platform *svsp)
 		x_roomt[i] = (((format[i] * 10000) / 4096) * 10000) / gain;
 
 	temp0 = (10000 * 100000 / gain) * 15 / 18;
-
-	if (!o_slope_sign)
-		mts = (temp0 * 10) / (1534 + o_slope * 10);
-	else
-		mts = (temp0 * 10) / (1534 - o_slope * 10);
+	mts = (temp0 * 10) / o_slope;
 
 	for (idx = 0; idx < svsp->bank_max; idx++) {
 		svsb = &svsp->banks[idx];
@@ -1962,11 +1959,7 @@ static bool svs_mt8183_efuse_parsing(struct svs_platform *svsp)
 		temp0 = (degc_cali * 10 / 2);
 		temp1 = ((10000 * 100000 / 4096 / gain) *
 			 oe + tb_roomt * 10) * 15 / 18;
-
-		if (!o_slope_sign)
-			temp2 = temp1 * 100 / (1534 + o_slope * 10);
-		else
-			temp2 = temp1 * 100 / (1534 - o_slope * 10);
+		temp2 = temp1 * 100 / o_slope;
 
 		svsb->bts = (temp0 + temp2 - 250) * 4 / 10;
 	}
-- 
2.18.0



From roger.lu at mediatek.com  Tue Dec 27 04:09:13 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:13 +0800
Subject: [PATCH v2 12/13] soc: mediatek: mtk-svs: add thermal voltage compensation if needed
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-13-roger.lu@mediatek.com>

Some extreme test environment may keep IC temperature very low or very high
during system boot stage. For stability concern, we add thermal voltage
compenstation if needed no matter svs bank phase is in init02 or mon mode.

Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index b3a345205319..8ef330175d39 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -585,7 +585,7 @@ static int svs_adjust_pm_opp_volts(struct svs_bank *svsb)
 	}
 
 	/* Get thermal effect */
-	if (svsb->phase == SVSB_PHASE_MON) {
+	if (!IS_ERR_OR_NULL(svsb->tzd)) {
 		ret = thermal_zone_get_temp(svsb->tzd, &tzone_temp);
 		if (ret || (svsb->temp > SVSB_TEMP_UPPER_BOUND &&
 			    svsb->temp < SVSB_TEMP_LOWER_BOUND)) {
@@ -600,7 +600,8 @@ static int svs_adjust_pm_opp_volts(struct svs_bank *svsb)
 			temp_voffset += svsb->tzone_ltemp_voffset;
 
 		/* 2-line bank update all opp volts when running mon mode */
-		if (svsb->type == SVSB_HIGH || svsb->type == SVSB_LOW) {
+		if (svsb->phase == SVSB_PHASE_MON && (svsb->type == SVSB_HIGH ||
+						      svsb->type == SVSB_LOW)) {
 			opp_start = 0;
 			opp_stop = svsb->opp_count;
 		}
@@ -616,11 +617,6 @@ static int svs_adjust_pm_opp_volts(struct svs_bank *svsb)
 			/* do nothing */
 			goto unlock_mutex;
 		case SVSB_PHASE_INIT02:
-			svsb_volt = max(svsb->volt[i], svsb->vmin);
-			opp_volt = svs_bank_volt_to_opp_volt(svsb_volt,
-							     svsb->volt_step,
-							     svsb->volt_base);
-			break;
 		case SVSB_PHASE_MON:
 			svsb_volt = max(svsb->volt[i] + temp_voffset, svsb->vmin);
 			opp_volt = svs_bank_volt_to_opp_volt(svsb_volt,
@@ -1710,7 +1706,7 @@ static int svs_bank_resource_setup(struct svs_platform *svsp)
 			}
 		}
 
-		if (svsb->mode_support & SVSB_MODE_MON) {
+		if (!IS_ERR_OR_NULL(svsb->tzone_name)) {
 			svsb->tzd = thermal_zone_get_zone_by_name(svsb->tzone_name);
 			if (IS_ERR(svsb->tzd)) {
 				dev_err(svsb->dev, "cannot get \"%s\" thermal zone\n",
@@ -2154,6 +2150,7 @@ static struct svs_bank svs_mt8192_banks[] = {
 		.type			= SVSB_LOW,
 		.set_freq_pct		= svs_set_bank_freq_pct_v3,
 		.get_volts		= svs_get_bank_volts_v3,
+		.tzone_name		= "gpu1",
 		.volt_flags		= SVSB_REMOVE_DVTFIXED_VOLT,
 		.mode_support		= SVSB_MODE_INIT02,
 		.opp_count		= MAX_OPP_ENTRIES,
@@ -2171,6 +2168,10 @@ static struct svs_bank svs_mt8192_banks[] = {
 		.core_sel		= 0x0fff0100,
 		.int_st			= BIT(0),
 		.ctl0			= 0x00540003,
+		.tzone_htemp		= 85000,
+		.tzone_htemp_voffset	= 0,
+		.tzone_ltemp		= 25000,
+		.tzone_ltemp_voffset	= 7,
 	},
 	{
 		.sw_id			= SVSB_GPU,
-- 
2.18.0



From roger.lu at mediatek.com  Tue Dec 27 04:09:04 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:04 +0800
Subject: [PATCH v2 03/13] soc: mediatek: mtk-svs: clean up platform probing
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-4-roger.lu@mediatek.com>

From: Matthias Brugger <matthias.bgg at gmail.com>

We only ever call the SoC specific probe function from
svs_platform_probe. No need to carry that function in a global
datastructure around.

Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index 465b60a5cedc..5abf94aafbac 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -319,7 +319,6 @@ static const u32 svs_regs_v2[] = {
  * @banks: svs banks that svs platform supports
  * @rst: svs platform reset control
  * @efuse_parsing: svs platform efuse parsing function pointer
- * @probe: svs platform probe function pointer
  * @efuse_max: total number of svs efuse
  * @tefuse_max: total number of thermal efuse
  * @regs: svs platform registers map
@@ -336,7 +335,6 @@ struct svs_platform {
 	struct svs_bank *banks;
 	struct reset_control *rst;
 	bool (*efuse_parsing)(struct svs_platform *svsp);
-	int (*probe)(struct svs_platform *svsp);
 	size_t efuse_max;
 	size_t tefuse_max;
 	const u32 *regs;
@@ -2347,11 +2345,10 @@ static struct svs_platform *svs_platform_probe(struct platform_device *pdev)
 	svsp->name = svsp_data->name;
 	svsp->banks = svsp_data->banks;
 	svsp->efuse_parsing = svsp_data->efuse_parsing;
-	svsp->probe = svsp_data->probe;
 	svsp->regs = svsp_data->regs;
 	svsp->bank_max = svsp_data->bank_max;
 
-	ret = svsp->probe(svsp);
+	ret = svsp_data->probe(svsp);
 	if (ret)
 		return ERR_PTR(ret);
 
-- 
2.18.0



From roger.lu at mediatek.com  Tue Dec 27 04:09:07 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:07 +0800
Subject: [PATCH v2 06/13] soc: mediatek: mtk-svs: delete superfluous platform data entries
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-7-roger.lu@mediatek.com>

From: Matthias Brugger <matthias.bgg at gmail.com>

The platform name and efuse parsing function pointer are only used while
probing the device. Use them from the svs_platform_data struct instead.

Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index bbec96696c55..308cd36a23fc 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -311,14 +311,12 @@ static const u32 svs_regs_v2[] = {
 
 /**
  * struct svs_platform - svs platform control
- * @name: svs platform name
  * @base: svs platform register base
  * @dev: svs platform device
  * @main_clk: main clock for svs bank
  * @pbank: svs bank pointer needing to be protected by spin_lock section
  * @banks: svs banks that svs platform supports
  * @rst: svs platform reset control
- * @efuse_parsing: svs platform efuse parsing function pointer
  * @efuse_max: total number of svs efuse
  * @tefuse_max: total number of thermal efuse
  * @regs: svs platform registers map
@@ -327,14 +325,12 @@ static const u32 svs_regs_v2[] = {
  * @tefuse: thermal efuse data received from NVMEM framework
  */
 struct svs_platform {
-	char *name;
 	void __iomem *base;
 	struct device *dev;
 	struct clk *main_clk;
 	struct svs_bank *pbank;
 	struct svs_bank *banks;
 	struct reset_control *rst;
-	bool (*efuse_parsing)(struct svs_platform *svsp);
 	size_t efuse_max;
 	size_t tefuse_max;
 	const u32 *regs;
@@ -2009,7 +2005,7 @@ static bool svs_is_efuse_data_correct(struct svs_platform *svsp)
 	svsp->efuse_max /= sizeof(u32);
 	nvmem_cell_put(cell);
 
-	return svsp->efuse_parsing(svsp);
+	return true;
 }
 
 static struct device *svs_get_subsys_device(struct svs_platform *svsp,
@@ -2338,9 +2334,7 @@ static int svs_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	svsp->dev = &pdev->dev;
-	svsp->name = svsp_data->name;
 	svsp->banks = svsp_data->banks;
-	svsp->efuse_parsing = svsp_data->efuse_parsing;
 	svsp->regs = svsp_data->regs;
 	svsp->bank_max = svsp_data->bank_max;
 
@@ -2351,6 +2345,12 @@ static int svs_probe(struct platform_device *pdev)
 	if (!svs_is_efuse_data_correct(svsp)) {
 		dev_notice(svsp->dev, "efuse data isn't correct\n");
 		ret = -EPERM;
+		goto svs_probe_free_efuse;
+	}
+
+	if (!svsp_data->efuse_parsing(svsp)) {
+		dev_err(svsp->dev, "efuse data parsing failed\n");
+		ret = -EPERM;
 		goto svs_probe_free_resource;
 	}
 
@@ -2388,7 +2388,7 @@ static int svs_probe(struct platform_device *pdev)
 	}
 
 	ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr,
-					IRQF_ONESHOT, svsp->name, svsp);
+					IRQF_ONESHOT, svsp_data->name, svsp);
 	if (ret) {
 		dev_err(svsp->dev, "register irq(%d) failed: %d\n",
 			svsp_irq, ret);
@@ -2416,11 +2416,13 @@ static int svs_probe(struct platform_device *pdev)
 	clk_disable_unprepare(svsp->main_clk);
 
 svs_probe_free_resource:
-	if (!IS_ERR_OR_NULL(svsp->efuse))
-		kfree(svsp->efuse);
 	if (!IS_ERR_OR_NULL(svsp->tefuse))
 		kfree(svsp->tefuse);
 
+svs_probe_free_efuse:
+	if (!IS_ERR_OR_NULL(svsp->efuse))
+		kfree(svsp->efuse);
+
 	return ret;
 }
 
-- 
2.18.0



From broonie at kernel.org  Tue Dec 27 05:43:23 2022
From: broonie at kernel.org (Mark Brown)
Date: Tue, 27 Dec 2022 13:43:23 +0000
Subject: [PATCH] spi: mediatek: Enable irq before the spi registration
In-Reply-To: <20221225-mtk-spi-fixes-v1-0-bb6c14c232f8@chromium.org>
References: <20221225-mtk-spi-fixes-v1-0-bb6c14c232f8@chromium.org>
Message-ID: <167214860344.446872.17166503994226712534.b4-ty@kernel.org>

On Sun, 25 Dec 2022 09:37:12 +0100, Ricardo Ribalda wrote:
> If the irq is enabled after the spi si registered, there can be a race
> with the initialization of the devices on the spi bus.
> 
> Eg:
> mtk-spi 1100a000.spi: spi-mem transfer timeout
> spi-nor: probe of spi0.0 failed with error -110
> Unable to handle kernel NULL pointer dereference at virtual address
> 0000000000000010
> ...
> Call trace:
>  mtk_spi_can_dma+0x0/0x2c
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next

Thanks!

[1/1] spi: mediatek: Enable irq before the spi registration
      commit: b24cded8c065d7cef8690b2c7b82b828cce57708

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


From nbd at nbd.name  Tue Dec 27 06:08:07 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Tue, 27 Dec 2022 15:08:07 +0100
Subject: [PATCH net v2 5/5] net: ethernet: mtk_eth_soc: ppe: fix L2 offloading with DSA untagging offload enabled
In-Reply-To: <20221227140807.48413-1-nbd@nbd.name>
References: <20221227140807.48413-1-nbd@nbd.name>
Message-ID: <20221227140807.48413-5-nbd@nbd.name>

Check for skb metadata in order to detect the case where the DSA header is not
present.

Fixes: 2d7605a72906 ("net: ethernet: mtk_eth_soc: enable hardware DSA untagging")
Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 6 +++---
 drivers/net/ethernet/mediatek/mtk_ppe.c     | 5 ++++-
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 214cd80a19a0..b54248bce501 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -2039,9 +2039,6 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
 			skb_checksum_none_assert(skb);
 		skb->protocol = eth_type_trans(skb, netdev);
 
-		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
-			mtk_ppe_check_skb(eth->ppe[0], skb, hash);
-
 		/* When using VLAN untagging in combination with DSA, the
 		 * hardware treats the MTK special tag as a VLAN and untags it.
 		 */
@@ -2054,6 +2051,9 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
 				skb_dst_set_noref(skb, &eth->dsa_meta[port]->dst);
 		}
 
+		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
+			mtk_ppe_check_skb(eth->ppe[0], skb, hash);
+
 		skb_record_rx_queue(skb, 0);
 		napi_gro_receive(napi, skb);
 
diff --git a/drivers/net/ethernet/mediatek/mtk_ppe.c b/drivers/net/ethernet/mediatek/mtk_ppe.c
index 269208a841c7..e366a83cf516 100644
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
@@ -8,6 +8,7 @@
 #include <linux/platform_device.h>
 #include <linux/if_ether.h>
 #include <linux/if_vlan.h>
+#include <net/dst_metadata.h>
 #include <net/dsa.h>
 #include "mtk_eth_soc.h"
 #include "mtk_ppe.h"
@@ -700,7 +701,9 @@ void __mtk_ppe_check_skb(struct mtk_ppe *ppe, struct sk_buff *skb, u16 hash)
 		    skb->dev->dsa_ptr->tag_ops->proto != DSA_TAG_PROTO_MTK)
 			goto out;
 
-		tag += 4;
+		if (!skb_metadata_dst(skb))
+			tag += 4;
+
 		if (get_unaligned_be16(tag) != ETH_P_8021Q)
 			break;
 
-- 
2.38.1



From nbd at nbd.name  Tue Dec 27 06:08:03 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Tue, 27 Dec 2022 15:08:03 +0100
Subject: [PATCH net v2 1/5] net: ethernet: mtk_eth_soc: account for vlan in rx header length
Message-ID: <20221227140807.48413-1-nbd@nbd.name>

The network stack assumes that devices can handle an extra VLAN tag without
increasing the MTU

Reviewed-by: Vladimir Oltean <olteanv at gmail.com>
Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 drivers/net/ethernet/mediatek/mtk_eth_soc.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
index ee06406e9ff6..628ed72911bd 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -34,7 +34,7 @@
 #define MTK_QDMA_RING_SIZE	2048
 #define MTK_DMA_SIZE		512
 #define MTK_MAC_COUNT		2
-#define MTK_RX_ETH_HLEN		(ETH_HLEN + ETH_FCS_LEN)
+#define MTK_RX_ETH_HLEN		(VLAN_ETH_HLEN + ETH_FCS_LEN)
 #define MTK_RX_HLEN		(NET_SKB_PAD + MTK_RX_ETH_HLEN + NET_IP_ALIGN)
 #define MTK_DMA_DUMMY_DESC	0xffffffff
 #define MTK_DEFAULT_MSG_ENABLE	(NETIF_MSG_DRV | \
-- 
2.38.1



From nbd at nbd.name  Tue Dec 27 06:08:05 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Tue, 27 Dec 2022 15:08:05 +0100
Subject: [PATCH net v2 3/5] net: ethernet: mtk_eth_soc: fix flow_offload related refcount bug
In-Reply-To: <20221227140807.48413-1-nbd@nbd.name>
References: <20221227140807.48413-1-nbd@nbd.name>
Message-ID: <20221227140807.48413-3-nbd@nbd.name>

Since we call flow_block_cb_decref on FLOW_BLOCK_UNBIND, we need to call
flow_block_cb_incref unconditionally, even for a newly allocated cb.
Fixes a use-after-free bug

Fixes: 502e84e2382d ("net: ethernet: mtk_eth_soc: add flow offloading support")
Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 .../net/ethernet/mediatek/mtk_ppe_offload.c   | 21 ++++++++++++-------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
index 81afd5ee3fbf..412d215b9571 100644
--- a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
+++ b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
@@ -554,6 +554,7 @@ mtk_eth_setup_tc_block(struct net_device *dev, struct flow_block_offload *f)
 	struct mtk_eth *eth = mac->hw;
 	static LIST_HEAD(block_cb_list);
 	struct flow_block_cb *block_cb;
+	bool register_block = false;
 	flow_setup_cb_t *cb;
 
 	if (!eth->soc->offload_version)
@@ -568,16 +569,20 @@ mtk_eth_setup_tc_block(struct net_device *dev, struct flow_block_offload *f)
 	switch (f->command) {
 	case FLOW_BLOCK_BIND:
 		block_cb = flow_block_cb_lookup(f->block, cb, dev);
-		if (block_cb) {
-			flow_block_cb_incref(block_cb);
-			return 0;
+		if (!block_cb) {
+			block_cb = flow_block_cb_alloc(cb, dev, dev, NULL);
+			if (IS_ERR(block_cb))
+				return PTR_ERR(block_cb);
+
+			register_block = true;
 		}
-		block_cb = flow_block_cb_alloc(cb, dev, dev, NULL);
-		if (IS_ERR(block_cb))
-			return PTR_ERR(block_cb);
 
-		flow_block_cb_add(block_cb, f);
-		list_add_tail(&block_cb->driver_list, &block_cb_list);
+		flow_block_cb_incref(block_cb);
+
+		if (register_block) {
+			flow_block_cb_add(block_cb, f);
+			list_add_tail(&block_cb->driver_list, &block_cb_list);
+		}
 		return 0;
 	case FLOW_BLOCK_UNBIND:
 		block_cb = flow_block_cb_lookup(f->block, cb, dev);
-- 
2.38.1



From nbd at nbd.name  Tue Dec 27 06:08:06 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Tue, 27 Dec 2022 15:08:06 +0100
Subject: [PATCH net v2 4/5] net: ethernet: mtk_eth_soc: drop generic vlan rx offload, only use DSA untagging
In-Reply-To: <20221227140807.48413-1-nbd@nbd.name>
References: <20221227140807.48413-1-nbd@nbd.name>
Message-ID: <20221227140807.48413-4-nbd@nbd.name>

Through testing I found out that hardware vlan rx offload support seems to
have some hardware issues. At least when using multiple MACs and when receiving
tagged packets on the secondary MAC, the hardware can sometimes start to emit
wrong tags on the first MAC as well.

In order to avoid such issues, drop the feature configuration and use the
offload feature only for DSA hardware untagging on MT7621/MT7622 devices which
only use one MAC.

Tested-By: Frank Wunderlich <frank-w at public-files.de>
Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 101 ++++++++------------
 drivers/net/ethernet/mediatek/mtk_eth_soc.h |   1 -
 2 files changed, 39 insertions(+), 63 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 8245cddccb5a..214cd80a19a0 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -2042,29 +2042,16 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
 		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
 			mtk_ppe_check_skb(eth->ppe[0], skb, hash);
 
-		if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX) {
-			if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
-				if (trxd.rxd3 & RX_DMA_VTAG_V2)
-					__vlan_hwaccel_put_tag(skb,
-						htons(RX_DMA_VPID(trxd.rxd4)),
-						RX_DMA_VID(trxd.rxd4));
-			} else if (trxd.rxd2 & RX_DMA_VTAG) {
-				__vlan_hwaccel_put_tag(skb, htons(RX_DMA_VPID(trxd.rxd3)),
-						       RX_DMA_VID(trxd.rxd3));
-			}
-		}
-
 		/* When using VLAN untagging in combination with DSA, the
 		 * hardware treats the MTK special tag as a VLAN and untags it.
 		 */
-		if (skb_vlan_tag_present(skb) && netdev_uses_dsa(netdev)) {
-			unsigned int port = ntohs(skb->vlan_proto) & GENMASK(2, 0);
+		if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) &&
+		    (trxd.rxd2 & RX_DMA_VTAG) && netdev_uses_dsa(netdev)) {
+			unsigned int port = RX_DMA_VPID(trxd.rxd3) & GENMASK(2, 0);
 
 			if (port < ARRAY_SIZE(eth->dsa_meta) &&
 			    eth->dsa_meta[port])
 				skb_dst_set_noref(skb, &eth->dsa_meta[port]->dst);
-
-			__vlan_hwaccel_clear_tag(skb);
 		}
 
 		skb_record_rx_queue(skb, 0);
@@ -2889,29 +2876,11 @@ static netdev_features_t mtk_fix_features(struct net_device *dev,
 
 static int mtk_set_features(struct net_device *dev, netdev_features_t features)
 {
-	struct mtk_mac *mac = netdev_priv(dev);
-	struct mtk_eth *eth = mac->hw;
 	netdev_features_t diff = dev->features ^ features;
-	int i;
 
 	if ((diff & NETIF_F_LRO) && !(features & NETIF_F_LRO))
 		mtk_hwlro_netdev_disable(dev);
 
-	/* Set RX VLAN offloading */
-	if (!(diff & NETIF_F_HW_VLAN_CTAG_RX))
-		return 0;
-
-	mtk_w32(eth, !!(features & NETIF_F_HW_VLAN_CTAG_RX),
-		MTK_CDMP_EG_CTRL);
-
-	/* sync features with other MAC */
-	for (i = 0; i < MTK_MAC_COUNT; i++) {
-		if (!eth->netdev[i] || eth->netdev[i] == dev)
-			continue;
-		eth->netdev[i]->features &= ~NETIF_F_HW_VLAN_CTAG_RX;
-		eth->netdev[i]->features |= features & NETIF_F_HW_VLAN_CTAG_RX;
-	}
-
 	return 0;
 }
 
@@ -3211,30 +3180,6 @@ static int mtk_open(struct net_device *dev)
 	struct mtk_eth *eth = mac->hw;
 	int i, err;
 
-	if (mtk_uses_dsa(dev) && !eth->prog) {
-		for (i = 0; i < ARRAY_SIZE(eth->dsa_meta); i++) {
-			struct metadata_dst *md_dst = eth->dsa_meta[i];
-
-			if (md_dst)
-				continue;
-
-			md_dst = metadata_dst_alloc(0, METADATA_HW_PORT_MUX,
-						    GFP_KERNEL);
-			if (!md_dst)
-				return -ENOMEM;
-
-			md_dst->u.port_info.port_id = i;
-			eth->dsa_meta[i] = md_dst;
-		}
-	} else {
-		/* Hardware special tag parsing needs to be disabled if at least
-		 * one MAC does not use DSA.
-		 */
-		u32 val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
-		val &= ~MTK_CDMP_STAG_EN;
-		mtk_w32(eth, val, MTK_CDMP_IG_CTRL);
-	}
-
 	err = phylink_of_phy_connect(mac->phylink, mac->of_node, 0);
 	if (err) {
 		netdev_err(dev, "%s: could not attach PHY: %d\n", __func__,
@@ -3273,6 +3218,39 @@ static int mtk_open(struct net_device *dev)
 	phylink_start(mac->phylink);
 	netif_tx_start_all_queues(dev);
 
+	if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
+		return 0;
+
+	if (mtk_uses_dsa(dev) && !eth->prog) {
+		for (i = 0; i < ARRAY_SIZE(eth->dsa_meta); i++) {
+			struct metadata_dst *md_dst = eth->dsa_meta[i];
+
+			if (md_dst)
+				continue;
+
+			md_dst = metadata_dst_alloc(0, METADATA_HW_PORT_MUX,
+						    GFP_KERNEL);
+			if (!md_dst)
+				return -ENOMEM;
+
+			md_dst->u.port_info.port_id = i;
+			eth->dsa_meta[i] = md_dst;
+		}
+	} else {
+		/* Hardware special tag parsing needs to be disabled if at least
+		 * one MAC does not use DSA.
+		 */
+		u32 val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
+		val &= ~MTK_CDMP_STAG_EN;
+		mtk_w32(eth, val, MTK_CDMP_IG_CTRL);
+
+		val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
+		val &= ~MTK_CDMQ_STAG_EN;
+		mtk_w32(eth, val, MTK_CDMQ_IG_CTRL);
+
+		mtk_w32(eth, 0, MTK_CDMP_EG_CTRL);
+	}
+
 	return 0;
 }
 
@@ -3599,10 +3577,9 @@ static int mtk_hw_init(struct mtk_eth *eth)
 	if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
 		val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
 		mtk_w32(eth, val | MTK_CDMP_STAG_EN, MTK_CDMP_IG_CTRL);
-	}
 
-	/* Enable RX VLan Offloading */
-	mtk_w32(eth, 1, MTK_CDMP_EG_CTRL);
+		mtk_w32(eth, 1, MTK_CDMP_EG_CTRL);
+	}
 
 	/* set interrupt delays based on current Net DIM sample */
 	mtk_dim_rx(&eth->rx_dim.work);
@@ -4203,7 +4180,7 @@ static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
 		eth->netdev[id]->hw_features |= NETIF_F_LRO;
 
 	eth->netdev[id]->vlan_features = eth->soc->hw_features &
-		~(NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX);
+		~NETIF_F_HW_VLAN_CTAG_TX;
 	eth->netdev[id]->features |= eth->soc->hw_features;
 	eth->netdev[id]->ethtool_ops = &mtk_ethtool_ops;
 
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
index ce8044e8b3f7..00d9a3badf9a 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -48,7 +48,6 @@
 #define MTK_HW_FEATURES		(NETIF_F_IP_CSUM | \
 				 NETIF_F_RXCSUM | \
 				 NETIF_F_HW_VLAN_CTAG_TX | \
-				 NETIF_F_HW_VLAN_CTAG_RX | \
 				 NETIF_F_SG | NETIF_F_ALL_TSO | \
 				 NETIF_F_IPV6_CSUM |\
 				 NETIF_F_HW_TC)
-- 
2.38.1



From nbd at nbd.name  Tue Dec 27 06:08:04 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Tue, 27 Dec 2022 15:08:04 +0100
Subject: [PATCH net v2 2/5] net: ethernet: mtk_eth_soc: work around issue with sending small fragments
In-Reply-To: <20221227140807.48413-1-nbd@nbd.name>
References: <20221227140807.48413-1-nbd@nbd.name>
Message-ID: <20221227140807.48413-2-nbd@nbd.name>

When lots of frames are sent with a number of very small fragments, an
internal FIFO can overflow, causing the DMA engine to lock up lock up and
transmit attempts time out.

Fix this on MT7986 by increasing the reserved FIFO space.
Fix this on older chips by detecting the presence of small fragments and use
skb_gso_segment + skb_linearize to deal with them.

Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
v2: add proper fix for MT7986, limit workaround to NETSYS v1

 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 38 +++++++++++++++++++--
 drivers/net/ethernet/mediatek/mtk_eth_soc.h |  2 +-
 2 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index e3de9a53b2d9..8245cddccb5a 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1441,12 +1441,28 @@ static void mtk_wake_queue(struct mtk_eth *eth)
 	}
 }
 
+static bool mtk_skb_has_small_frag(struct sk_buff *skb)
+{
+	int min_size = 16;
+	int i;
+
+	if (skb_headlen(skb) < min_size)
+		return true;
+
+	for (i = 0; i < skb_shinfo(skb)->nr_frags; i++)
+		if (skb_frag_size(&skb_shinfo(skb)->frags[i]) < min_size)
+			return true;
+
+	return false;
+}
+
 static netdev_tx_t mtk_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct mtk_mac *mac = netdev_priv(dev);
 	struct mtk_eth *eth = mac->hw;
 	struct mtk_tx_ring *ring = &eth->tx_ring;
 	struct net_device_stats *stats = &dev->stats;
+	struct sk_buff *segs, *next;
 	bool gso = false;
 	int tx_num;
 
@@ -1468,6 +1484,18 @@ static netdev_tx_t mtk_start_xmit(struct sk_buff *skb, struct net_device *dev)
 		return NETDEV_TX_BUSY;
 	}
 
+	if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) &&
+	    skb_is_gso(skb) && mtk_skb_has_small_frag(skb)) {
+		segs = skb_gso_segment(skb, dev->features & ~NETIF_F_ALL_TSO);
+		if (IS_ERR(segs))
+			goto drop;
+
+		if (segs) {
+			consume_skb(skb);
+			skb = segs;
+		}
+	}
+
 	/* TSO: fill MSS info in tcp checksum field */
 	if (skb_is_gso(skb)) {
 		if (skb_cow_head(skb, 0)) {
@@ -1483,8 +1511,14 @@ static netdev_tx_t mtk_start_xmit(struct sk_buff *skb, struct net_device *dev)
 		}
 	}
 
-	if (mtk_tx_map(skb, dev, tx_num, ring, gso) < 0)
-		goto drop;
+	if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
+		skb_list_walk_safe(skb, skb, next) {
+			if ((mtk_skb_has_small_frag(skb) && skb_linearize(skb)) ||
+			    mtk_tx_map(skb, dev, tx_num, ring, gso) < 0) {
+				stats->tx_dropped++;
+				dev_kfree_skb_any(skb);
+			}
+		}
 
 	if (unlikely(atomic_read(&ring->free_count) <= ring->thresh))
 		netif_tx_stop_all_queues(dev);
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
index 628ed72911bd..ce8044e8b3f7 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -246,7 +246,7 @@
 #define MTK_CHK_DDONE_EN	BIT(28)
 #define MTK_DMAD_WR_WDONE	BIT(26)
 #define MTK_WCOMP_EN		BIT(24)
-#define MTK_RESV_BUF		(0x40 << 16)
+#define MTK_RESV_BUF		(0x80 << 16)
 #define MTK_MUTLI_CNT		(0x4 << 12)
 #define MTK_LEAKY_BUCKET_EN	BIT(11)
 
-- 
2.38.1



From regressions at leemhuis.info  Tue Dec 27 06:29:49 2022
From: regressions at leemhuis.info (Thorsten Leemhuis)
Date: Tue, 27 Dec 2022 15:29:49 +0100
Subject: [BUG] 6.2-rc1 spi-mt65xx broken on mt7986 #forregzbot
In-Reply-To: <trinity-bd6bf7f8-5dbc-42fc-891b-8bfc802a1a2c-1672136902605@3c-app-gmx-bap27>
References: <trinity-bd6bf7f8-5dbc-42fc-891b-8bfc802a1a2c-1672136902605@3c-app-gmx-bap27>
Message-ID: <b76fca16-9a7a-e8a7-6d4a-36fd88ea15ac@leemhuis.info>

[Note: this mail contains only information for Linux kernel regression
tracking. Mails like these contain '#forregzbot' in the subject to make
then easy to spot and filter out. The author also tried to remove most
or all individuals from the list of recipients to spare them the hassle.]

On 27.12.22 11:28, Frank Wunderlich wrote:
> Hi,
> 
> the following commit breaks SPIM-NOR on mt7986:
> 
> c6f7874687f7 2022-11-28 spi: mediatek: Enable irq when pdata is ready
> 
>> [    2.145931] pc : mtk_spi_can_dma+0x0/0x34
>> [    2.155212] lr : mtk_spi_interrupt+0x74/0x360
>>
>> [    2.091801] mtk-spi 1100a000.spi: spi-mem transfer timeout
>> [    2.097310] spi-nor: probe of spi0.0 failed with error -110
>> [    2.102930] Unable to handle kernel read from unreadable memory at virtual address 0000000000000010
> 
> after reverting the commit, no trace happens and nor is recognized on my board
> 

Thanks for the report. To be sure below issue doesn't fall through the
cracks unnoticed, I'm adding it to regzbot, my Linux kernel regression
tracking bot:

#regzbot ^introduced c6f7874687f7
#regzbot title spi: spi-mt65xx broken on mt7986
#regzbot ignore-activity

Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)

P.S.: As the Linux kernel's regression tracker I deal with a lot of
reports and sometimes miss something important when writing mails like
this. If that's the case here, don't hesitate to tell me in a public
reply, it's in everyone's interest to set the public record straight.


From chunkuang.hu at kernel.org  Tue Dec 27 06:48:08 2022
From: chunkuang.hu at kernel.org (Chun-Kuang Hu)
Date: Tue, 27 Dec 2022 22:48:08 +0800
Subject: [PATCH v4 1/6] dt-bindings: mediatek: modify VDOSYS0 display
 device tree Documentations for MT8188
In-Reply-To: <20221206020046.11333-2-nathan.lu@mediatek.com>
References: <20221206020046.11333-1-nathan.lu@mediatek.com> <20221206020046.11333-2-nathan.lu@mediatek.com>
Message-ID: <CAAOTY_-aW4xHvSF-yTZdwO1yiN7tVdq=9Fyfu2uWJ=xDfCg0nA@mail.gmail.com>

Hi, Nathan:

nathan.lu <nathan.lu at mediatek.com> ? 2022?12?6? ?? ??10:01???
>
> From: Nathan Lu <nathan.lu at mediatek.com>
>
> modify VDOSYS0 display device tree Documentations for MT8188.

Applied to mediatek-drm-next [1], thanks.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/chunkuang.hu/linux.git/log/?h=mediatek-drm-next

Regards,
Chun-Kuang.

>
> Signed-off-by: Nathan Lu <nathan.lu at mediatek.com>
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> ---
>  .../devicetree/bindings/display/mediatek/mediatek,aal.yaml    | 1 +
>  .../devicetree/bindings/display/mediatek/mediatek,ccorr.yaml  | 1 +
>  .../devicetree/bindings/display/mediatek/mediatek,color.yaml  | 1 +
>  .../devicetree/bindings/display/mediatek/mediatek,dither.yaml | 1 +
>  .../devicetree/bindings/display/mediatek/mediatek,gamma.yaml  | 1 +
>  .../devicetree/bindings/display/mediatek/mediatek,ovl.yaml    | 1 +
>  .../bindings/display/mediatek/mediatek,postmask.yaml          | 1 +
>  .../devicetree/bindings/display/mediatek/mediatek,rdma.yaml   | 4 ++++
>  8 files changed, 11 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,aal.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,aal.yaml
> index d4d585485e7b..92741486c24d 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,aal.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,aal.yaml
> @@ -31,6 +31,7 @@ properties:
>        - items:
>            - enum:
>                - mediatek,mt8186-disp-aal
> +              - mediatek,mt8188-disp-aal
>                - mediatek,mt8192-disp-aal
>                - mediatek,mt8195-disp-aal
>            - const: mediatek,mt8183-disp-aal
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,ccorr.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,ccorr.yaml
> index 63fb02014a56..fe444beff558 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,ccorr.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,ccorr.yaml
> @@ -27,6 +27,7 @@ properties:
>            - const: mediatek,mt8192-disp-ccorr
>        - items:
>            - enum:
> +              - mediatek,mt8188-disp-ccorr
>                - mediatek,mt8195-disp-ccorr
>            - const: mediatek,mt8192-disp-ccorr
>        - items:
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,color.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,color.yaml
> index d2f89ee7996f..62306c88f485 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,color.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,color.yaml
> @@ -37,6 +37,7 @@ properties:
>            - enum:
>                - mediatek,mt8183-disp-color
>                - mediatek,mt8186-disp-color
> +              - mediatek,mt8188-disp-color
>                - mediatek,mt8192-disp-color
>                - mediatek,mt8195-disp-color
>            - const: mediatek,mt8173-disp-color
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,dither.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,dither.yaml
> index 8ad8187c02d1..5c7445c174e5 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,dither.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,dither.yaml
> @@ -27,6 +27,7 @@ properties:
>        - items:
>            - enum:
>                - mediatek,mt8186-disp-dither
> +              - mediatek,mt8188-disp-dither
>                - mediatek,mt8192-disp-dither
>                - mediatek,mt8195-disp-dither
>            - const: mediatek,mt8183-disp-dither
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,gamma.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,gamma.yaml
> index a89ea0ea7542..a5c6a91fac71 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,gamma.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,gamma.yaml
> @@ -28,6 +28,7 @@ properties:
>        - items:
>            - enum:
>                - mediatek,mt8186-disp-gamma
> +              - mediatek,mt8188-disp-gamma
>                - mediatek,mt8192-disp-gamma
>                - mediatek,mt8195-disp-gamma
>            - const: mediatek,mt8183-disp-gamma
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,ovl.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,ovl.yaml
> index a2a27d0ca038..065e526f950e 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,ovl.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,ovl.yaml
> @@ -36,6 +36,7 @@ properties:
>            - const: mediatek,mt2701-disp-ovl
>        - items:
>            - enum:
> +              - mediatek,mt8188-disp-ovl
>                - mediatek,mt8195-disp-ovl
>            - const: mediatek,mt8183-disp-ovl
>        - items:
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,postmask.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,postmask.yaml
> index 654080bfbdfb..27de64495401 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,postmask.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,postmask.yaml
> @@ -26,6 +26,7 @@ properties:
>        - items:
>            - enum:
>                - mediatek,mt8186-disp-postmask
> +              - mediatek,mt8188-disp-postmask
>            - const: mediatek,mt8192-disp-postmask
>
>    reg:
> diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,rdma.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,rdma.yaml
> index 0882ae86e6c4..3ade2ece3fed 100644
> --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,rdma.yaml
> +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,rdma.yaml
> @@ -31,6 +31,10 @@ properties:
>            - const: mediatek,mt8183-disp-rdma
>        - items:
>            - const: mediatek,mt8195-disp-rdma
> +      - items:
> +          - enum:
> +              - mediatek,mt8188-disp-rdma
> +          - const: mediatek,mt8195-disp-rdma
>        - items:
>            - enum:
>                - mediatek,mt7623-disp-rdma
> --
> 2.18.0
>


From roger.lu at mediatek.com  Tue Dec 27 04:09:07 2022
From: roger.lu at mediatek.com (Roger Lu)
Date: Tue, 27 Dec 2022 20:09:07 +0800
Subject: [PATCH v2 06/13] soc: mediatek: mtk-svs: delete superfluous platform data entries
In-Reply-To: <20221227120914.11346-1-roger.lu@mediatek.com>
References: <20221227120914.11346-1-roger.lu@mediatek.com>
Message-ID: <20221227120914.11346-7-roger.lu@mediatek.com>

From: Matthias Brugger <matthias.bgg at gmail.com>

The platform name and efuse parsing function pointer are only used while
probing the device. Use them from the svs_platform_data struct instead.

Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Signed-off-by: Roger Lu <roger.lu at mediatek.com>
---
 drivers/soc/mediatek/mtk-svs.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c
index bbec96696c55..308cd36a23fc 100644
--- a/drivers/soc/mediatek/mtk-svs.c
+++ b/drivers/soc/mediatek/mtk-svs.c
@@ -311,14 +311,12 @@ static const u32 svs_regs_v2[] = {
 
 /**
  * struct svs_platform - svs platform control
- * @name: svs platform name
  * @base: svs platform register base
  * @dev: svs platform device
  * @main_clk: main clock for svs bank
  * @pbank: svs bank pointer needing to be protected by spin_lock section
  * @banks: svs banks that svs platform supports
  * @rst: svs platform reset control
- * @efuse_parsing: svs platform efuse parsing function pointer
  * @efuse_max: total number of svs efuse
  * @tefuse_max: total number of thermal efuse
  * @regs: svs platform registers map
@@ -327,14 +325,12 @@ static const u32 svs_regs_v2[] = {
  * @tefuse: thermal efuse data received from NVMEM framework
  */
 struct svs_platform {
-	char *name;
 	void __iomem *base;
 	struct device *dev;
 	struct clk *main_clk;
 	struct svs_bank *pbank;
 	struct svs_bank *banks;
 	struct reset_control *rst;
-	bool (*efuse_parsing)(struct svs_platform *svsp);
 	size_t efuse_max;
 	size_t tefuse_max;
 	const u32 *regs;
@@ -2009,7 +2005,7 @@ static bool svs_is_efuse_data_correct(struct svs_platform *svsp)
 	svsp->efuse_max /= sizeof(u32);
 	nvmem_cell_put(cell);
 
-	return svsp->efuse_parsing(svsp);
+	return true;
 }
 
 static struct device *svs_get_subsys_device(struct svs_platform *svsp,
@@ -2338,9 +2334,7 @@ static int svs_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	svsp->dev = &pdev->dev;
-	svsp->name = svsp_data->name;
 	svsp->banks = svsp_data->banks;
-	svsp->efuse_parsing = svsp_data->efuse_parsing;
 	svsp->regs = svsp_data->regs;
 	svsp->bank_max = svsp_data->bank_max;
 
@@ -2351,6 +2345,12 @@ static int svs_probe(struct platform_device *pdev)
 	if (!svs_is_efuse_data_correct(svsp)) {
 		dev_notice(svsp->dev, "efuse data isn't correct\n");
 		ret = -EPERM;
+		goto svs_probe_free_efuse;
+	}
+
+	if (!svsp_data->efuse_parsing(svsp)) {
+		dev_err(svsp->dev, "efuse data parsing failed\n");
+		ret = -EPERM;
 		goto svs_probe_free_resource;
 	}
 
@@ -2388,7 +2388,7 @@ static int svs_probe(struct platform_device *pdev)
 	}
 
 	ret = devm_request_threaded_irq(svsp->dev, svsp_irq, NULL, svs_isr,
-					IRQF_ONESHOT, svsp->name, svsp);
+					IRQF_ONESHOT, svsp_data->name, svsp);
 	if (ret) {
 		dev_err(svsp->dev, "register irq(%d) failed: %d\n",
 			svsp_irq, ret);
@@ -2416,11 +2416,13 @@ static int svs_probe(struct platform_device *pdev)
 	clk_disable_unprepare(svsp->main_clk);
 
 svs_probe_free_resource:
-	if (!IS_ERR_OR_NULL(svsp->efuse))
-		kfree(svsp->efuse);
 	if (!IS_ERR_OR_NULL(svsp->tefuse))
 		kfree(svsp->tefuse);
 
+svs_probe_free_efuse:
+	if (!IS_ERR_OR_NULL(svsp->efuse))
+		kfree(svsp->efuse);
+
 	return ret;
 }
 
-- 
2.18.0



From miles.chen at mediatek.com  Tue Dec 27 08:18:20 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Wed, 28 Dec 2022 00:18:20 +0800
Subject: [PATCH v2 12/23] clk: mediatek: clk-mtk: Extend mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-24-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-24-angelogioacchino.delregno@collabora.com>
Message-ID: <20221227161820.18186-1-miles.chen@mediatek.com>

> As a preparation to increase probe functions commonization across
> various MediaTek SoC clock controller drivers, extend function
> mtk_clk_simple_probe() to be able to register not only gates, but
> also fixed clocks, factors, muxes and composites.
> 
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Thanks for doing this! I read the patch 23 first and I thought the
mtk_clk_simple_probe() cannot be used like that. So I got the whole series
and found this patch to extend mtk_clk_simple_probe. Cool.

Reviewed-by: Miles Chen <miles.chen at mediatek.com> 


From andrew at lunn.ch  Tue Dec 27 08:20:20 2022
From: andrew at lunn.ch (Andrew Lunn)
Date: Tue, 27 Dec 2022 17:20:20 +0100
Subject: [PATCH v5 1/2] stmmac: dwmac-mediatek: enable 2ns delay only for
 special cases
In-Reply-To: <5baa7c88716042421b0dd1d579c6aa70d253a546.camel@mediatek.com>
References: <20221223015029.24978-1-biao.huang@mediatek.com>
 <20221223015029.24978-2-biao.huang@mediatek.com>
 <Y6W4vwJHG+6PI8fd@lunn.ch>
 <4a82aa5437e496e2b65b77ef08d7897a4b23f7e5.camel@mediatek.com>
 <Y6m7eNdWVL3IKFj2@lunn.ch>
 <5baa7c88716042421b0dd1d579c6aa70d253a546.camel@mediatek.com>
Message-ID: <Y6sbRPbDDzeGbkM+@lunn.ch>

> OK, as to this series, Is the following modification enough?
>     1. phy-mode = rgmii-id;  in dts.
>     2. remove the fix_mac_speed() in driver.

Yep, that is good.

     Andrew


From miles.chen at mediatek.com  Tue Dec 27 08:22:54 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Wed, 28 Dec 2022 00:22:54 +0800
Subject: [PATCH v2 12/23] clk: mediatek: clk-mtk: Extend mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-13-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-13-angelogioacchino.delregno@collabora.com>
Message-ID: <20221227162254.18359-1-miles.chen@mediatek.com>

> As a preparation to increase probe functions commonization across
> various MediaTek SoC clock controller drivers, extend function
> mtk_clk_simple_probe() to be able to register not only gates, but
> also fixed clocks, factors, muxes and composites.
> 
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Thanks for doing this! I read the patch 23 first and I thought the
mtk_clk_simple_probe() cannot be used like that. So I got the whole series
and found this patch to extend mtk_clk_simple_probe. Cool.

Reviewed-by: Miles Chen <miles.chen at mediatek.com> 


From miles.chen at mediatek.com  Tue Dec 27 08:26:45 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Wed, 28 Dec 2022 00:26:45 +0800
Subject: [PATCH v2 12/23] clk: mediatek: clk-mtk: Extend mtk_clk_simple_probe()
In-Reply-To: <20221227161820.18186-1-miles.chen@mediatek.com>
References: <20221227161820.18186-1-miles.chen@mediatek.com>
Message-ID: <20221227162645.18483-1-miles.chen@mediatek.com>

Replying for the wrong patch - this message should go to patch 12.


From lkp at intel.com  Tue Dec 27 09:59:33 2022
From: lkp at intel.com (kernel test robot)
Date: Wed, 28 Dec 2022 01:59:33 +0800
Subject: [PATCH v2] ufs: core: wlun resume SSU(Acitve) fail recovery
In-Reply-To: <20221223084158.10069-1-peter.wang@mediatek.com>
References: <20221223084158.10069-1-peter.wang@mediatek.com>
Message-ID: <202212280100.4Ay3LUBS-lkp@intel.com>

Hi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on jejb-scsi/for-next]
[also build test ERROR on mkp-scsi/for-next linus/master v6.2-rc1 next-20221226]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/peter-wang-mediatek-com/ufs-core-wlun-resume-SSU-Acitve-fail-recovery/20221223-164240
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
patch link:    https://lore.kernel.org/r/20221223084158.10069-1-peter.wang%40mediatek.com
patch subject: [PATCH v2] ufs: core: wlun resume SSU(Acitve) fail recovery
config: nios2-allyesconfig
compiler: nios2-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/cd4c2e13ebc910bc510ad403cc21cf899e5cb771
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review peter-wang-mediatek-com/ufs-core-wlun-resume-SSU-Acitve-fail-recovery/20221223-164240
        git checkout cd4c2e13ebc910bc510ad403cc21cf899e5cb771
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=nios2 olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=nios2 SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp at intel.com>

All errors (new ones prefixed by >>):

   drivers/ufs/core/ufshcd.c: In function 'ufshcd_eh_host_reset_handler':
>> drivers/ufs/core/ufshcd.c:7377:23: error: 'struct dev_pm_info' has no member named 'runtime_status'
    7377 |         if (dev->power.runtime_status == RPM_RESUMING) {
         |                       ^
   In file included from include/linux/device.h:15,
                    from include/linux/async.h:14,
                    from drivers/ufs/core/ufshcd.c:12:
   drivers/ufs/core/ufshcd.c:7381:43: error: 'struct dev_pm_info' has no member named 'runtime_status'
    7381 |                                 dev->power.runtime_status,
         |                                           ^
   include/linux/dev_printk.h:110:37: note: in definition of macro 'dev_printk_index_wrap'
     110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
         |                                     ^~~~~~~~~~~
   drivers/ufs/core/ufshcd.c:7380:25: note: in expansion of macro 'dev_err'
    7380 |                         dev_err(hba->dev, "WL Device PM: status:%d, err:%d\n",
         |                         ^~~~~~~
>> drivers/ufs/core/ufshcd.c:7382:43: error: 'struct dev_pm_info' has no member named 'runtime_error'
    7382 |                                 dev->power.runtime_error);
         |                                           ^
   include/linux/dev_printk.h:110:37: note: in definition of macro 'dev_printk_index_wrap'
     110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
         |                                     ^~~~~~~~~~~
   drivers/ufs/core/ufshcd.c:7380:25: note: in expansion of macro 'dev_err'
    7380 |                         dev_err(hba->dev, "WL Device PM: status:%d, err:%d\n",
         |                         ^~~~~~~


vim +7377 drivers/ufs/core/ufshcd.c

  7354	
  7355	/**
  7356	 * ufshcd_eh_host_reset_handler - host reset handler registered to scsi layer
  7357	 * @cmd: SCSI command pointer
  7358	 *
  7359	 * Returns SUCCESS/FAILED
  7360	 */
  7361	static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd)
  7362	{
  7363		int err = SUCCESS;
  7364		unsigned long flags;
  7365		struct ufs_hba *hba;
  7366		struct device *dev;
  7367	
  7368		hba = shost_priv(cmd->device->host);
  7369	
  7370		/*
  7371		 * If __ufshcd_wl_suspend get fail and runtime_status = RPM_RESUMING,
  7372		 * do link recovery only. Because schedule eh work will get dead lock
  7373		 * in ufshcd_rpm_get_sync to wait wlun resume, but wlun resume get
  7374		 * error and wait eh work finish.
  7375		 */
  7376		dev = &hba->ufs_device_wlun->sdev_gendev;
> 7377		if (dev->power.runtime_status == RPM_RESUMING) {
  7378			err = ufshcd_link_recovery(hba);
  7379			if (err) {
  7380				dev_err(hba->dev, "WL Device PM: status:%d, err:%d\n",
> 7381					dev->power.runtime_status,
> 7382					dev->power.runtime_error);
  7383			}
  7384			return err;
  7385		}
  7386	
  7387		spin_lock_irqsave(hba->host->host_lock, flags);
  7388		hba->force_reset = true;
  7389		ufshcd_schedule_eh_work(hba);
  7390		dev_err(hba->dev, "%s: reset in progress - 1\n", __func__);
  7391		spin_unlock_irqrestore(hba->host->host_lock, flags);
  7392	
  7393		flush_work(&hba->eh_work);
  7394	
  7395		spin_lock_irqsave(hba->host->host_lock, flags);
  7396		if (hba->ufshcd_state == UFSHCD_STATE_ERROR)
  7397			err = FAILED;
  7398		spin_unlock_irqrestore(hba->host->host_lock, flags);
  7399	
  7400		return err;
  7401	}
  7402	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
-------------- next part --------------
#
# Automatically generated file; DO NOT EDIT.
# Linux/nios2 6.1.0-rc1 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="nios2-linux-gcc (GCC) 12.1.0"
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=120100
CONFIG_CLANG_VERSION=0
CONFIG_AS_IS_GNU=y
CONFIG_AS_VERSION=23800
CONFIG_LD_IS_BFD=y
CONFIG_LD_VERSION=23800
CONFIG_LLD_VERSION=0
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
CONFIG_PAHOLE_VERSION=123
CONFIG_CONSTRUCTORS=y
CONFIG_IRQ_WORK=y

#
# General setup
#
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_COMPILE_TEST=y
# CONFIG_WERROR is not set
CONFIG_LOCALVERSION=""
CONFIG_BUILD_SALT=""
CONFIG_DEFAULT_INIT=""
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y
CONFIG_POSIX_MQUEUE_SYSCTL=y
CONFIG_WATCH_QUEUE=y
CONFIG_CROSS_MEMORY_ATTACH=y
CONFIG_USELIB=y
CONFIG_AUDIT=y

#
# IRQ subsystem
#
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_INJECTION=y
CONFIG_GENERIC_IRQ_CHIP=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_SIM=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_IRQ_FASTEOI_HIERARCHY_HANDLERS=y
CONFIG_GENERIC_MSI_IRQ=y
CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
CONFIG_SPARSE_IRQ=y
CONFIG_GENERIC_IRQ_DEBUGFS=y
# end of IRQ subsystem

CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_TIME_KUNIT_TEST=y

#
# Timers subsystem
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
CONFIG_NO_HZ_IDLE=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
# end of Timers subsystem

CONFIG_BPF=y

#
# BPF subsystem
#
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
CONFIG_USERMODE_DRIVER=y
# end of BPF subsystem

CONFIG_PREEMPT_NONE_BUILD=y
CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set
CONFIG_PREEMPT_COUNT=y

#
# CPU/Task time and stats accounting
#
CONFIG_TICK_CPU_ACCOUNTING=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
CONFIG_TASKSTATS=y
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_PSI=y
CONFIG_PSI_DEFAULT_DISABLED=y
# end of CPU/Task time and stats accounting

CONFIG_CPU_ISOLATION=y

#
# RCU Subsystem
#
CONFIG_TINY_RCU=y
CONFIG_RCU_EXPERT=y
CONFIG_SRCU=y
CONFIG_TINY_SRCU=y
CONFIG_TASKS_RCU_GENERIC=y
CONFIG_FORCE_TASKS_RCU=y
CONFIG_TASKS_RCU=y
CONFIG_FORCE_TASKS_RUDE_RCU=y
CONFIG_TASKS_RUDE_RCU=y
CONFIG_FORCE_TASKS_TRACE_RCU=y
CONFIG_TASKS_TRACE_RCU=y
CONFIG_RCU_NEED_SEGCBLIST=y
CONFIG_TASKS_TRACE_RCU_READ_MB=y
# end of RCU Subsystem

CONFIG_BUILD_BIN2C=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_IKHEADERS=y
CONFIG_LOG_BUF_SHIFT=17
CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
CONFIG_PRINTK_INDEX=y

#
# Scheduler features
#
# end of Scheduler features

CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_GCC12_NO_ARRAY_BOUNDS=y
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_CGROUPS=y
CONFIG_PAGE_COUNTER=y
CONFIG_CGROUP_FAVOR_DYNMODS=y
CONFIG_MEMCG=y
CONFIG_MEMCG_KMEM=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_RDMA=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_BPF=y
CONFIG_CGROUP_MISC=y
CONFIG_CGROUP_DEBUG=y
CONFIG_SOCK_CGROUP_DATA=y
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_SCHED_AUTOGROUP=y
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
CONFIG_RELAY=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_INITRAMFS_FORCE=y
CONFIG_RD_GZIP=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
CONFIG_RD_XZ=y
CONFIG_RD_LZO=y
CONFIG_RD_LZ4=y
CONFIG_RD_ZSTD=y
CONFIG_BOOT_CONFIG=y
CONFIG_BOOT_CONFIG_EMBED=y
CONFIG_BOOT_CONFIG_EMBED_FILE=""
CONFIG_INITRAMFS_PRESERVE_MTIME=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_EXPERT=y
CONFIG_MULTIUSER=y
CONFIG_SGETMASK_SYSCALL=y
CONFIG_SYSFS_SYSCALL=y
CONFIG_FHANDLE=y
CONFIG_POSIX_TIMERS=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_FUTEX_PI=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_IO_URING=y
CONFIG_ADVISE_SYSCALLS=y
CONFIG_MEMBARRIER=y
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
CONFIG_KALLSYMS_BASE_RELATIVE=y
CONFIG_KCMP=y
CONFIG_EMBEDDED=y
CONFIG_PC104=y

#
# Kernel Performance Events And Counters
#
# end of Kernel Performance Events And Counters

CONFIG_SYSTEM_DATA_VERIFICATION=y
CONFIG_PROFILING=y
# end of General setup

CONFIG_NIOS2=y
CONFIG_GENERIC_CSUM=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_NO_IOPORT_MAP=y

#
# Kernel features
#
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
CONFIG_SCHED_HRTICK=y
CONFIG_ARCH_FORCE_MAX_ORDER=11
# end of Kernel features

#
# Platform options
#

#
# Memory settings
#
CONFIG_NIOS2_MEM_BASE=0x00000000

#
# Device tree
#
CONFIG_NIOS2_DTB_AT_PHYS_ADDR=y
CONFIG_NIOS2_DTB_PHYS_ADDR=0xC0000000

#
# Nios II instructions
#
CONFIG_NIOS2_ARCH_REVISION=1
CONFIG_NIOS2_HW_MUL_SUPPORT=y
CONFIG_NIOS2_HW_MULX_SUPPORT=y
CONFIG_NIOS2_HW_DIV_SUPPORT=y
CONFIG_NIOS2_FPU_SUPPORT=y
CONFIG_NIOS2_CI_SWAB_SUPPORT=y
CONFIG_NIOS2_CI_SWAB_NO=0

#
# Cache settings
#
CONFIG_CUSTOM_CACHE_SETTINGS=y
CONFIG_NIOS2_DCACHE_SIZE=0x800
CONFIG_NIOS2_DCACHE_LINE_SIZE=0x20
CONFIG_NIOS2_ICACHE_SIZE=0x1000
# end of Platform options

#
# Processor type and features
#
CONFIG_MMU=y
CONFIG_NR_CPUS=1
CONFIG_NIOS2_ALIGNMENT_TRAP=y

#
# Boot options
#
CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE=""
CONFIG_CMDLINE_FORCE=y
CONFIG_NIOS2_PASS_CMDLINE=y
CONFIG_NIOS2_BOOT_LINK_OFFSET=0x00500000
# end of Processor type and features

#
# Advanced setup
#
CONFIG_ADVANCED_OPTIONS=y
CONFIG_NIOS2_KERNEL_MMU_REGION_BASE_BOOL=y
CONFIG_NIOS2_KERNEL_MMU_REGION_BASE=0x80000000
CONFIG_NIOS2_KERNEL_REGION_BASE_BOOL=y
CONFIG_NIOS2_KERNEL_REGION_BASE=0xc0000000
CONFIG_NIOS2_IO_REGION_BASE_BOOL=y
CONFIG_NIOS2_IO_REGION_BASE=0xe0000000
# end of Advanced setup

#
# General architecture-dependent options
#
CONFIG_CRASH_CORE=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_ARCH_HAS_DMA_SET_UNCACHED=y
CONFIG_ARCH_32BIT_OFF_T=y
CONFIG_MMU_GATHER_NO_RANGE=y
CONFIG_MMU_GATHER_MERGE_VMAS=y
CONFIG_LTO_NONE=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_PGTABLE_LEVELS=2
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
CONFIG_ISA_BUS_API=y
CONFIG_COMPAT_32BIT_TIME=y
CONFIG_CPU_NO_EFFICIENT_FFS=y
CONFIG_LOCK_EVENT_COUNTS=y

#
# GCOV-based kernel profiling
#
CONFIG_GCOV_KERNEL=y
# end of GCOV-based kernel profiling
# end of General architecture-dependent options

CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULE_SIG_FORMAT=y
CONFIG_MODULES=y
CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODULE_UNLOAD_TAINT_TRACKING=y
CONFIG_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_FORCE=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_SHA1=y
# CONFIG_MODULE_SIG_SHA224 is not set
# CONFIG_MODULE_SIG_SHA256 is not set
# CONFIG_MODULE_SIG_SHA384 is not set
# CONFIG_MODULE_SIG_SHA512 is not set
CONFIG_MODULE_SIG_HASH="sha1"
CONFIG_MODULE_COMPRESS_NONE=y
# CONFIG_MODULE_COMPRESS_GZIP is not set
# CONFIG_MODULE_COMPRESS_XZ is not set
# CONFIG_MODULE_COMPRESS_ZSTD is not set
CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=y
CONFIG_MODPROBE_PATH="/sbin/modprobe"
CONFIG_BLOCK=y
CONFIG_BLOCK_LEGACY_AUTOLOAD=y
CONFIG_BLK_RQ_ALLOC_TIME=y
CONFIG_BLK_CGROUP_RWSTAT=y
CONFIG_BLK_DEV_BSG_COMMON=y
CONFIG_BLK_ICQ=y
CONFIG_BLK_DEV_BSGLIB=y
CONFIG_BLK_DEV_INTEGRITY=y
CONFIG_BLK_DEV_INTEGRITY_T10=y
CONFIG_BLK_DEV_ZONED=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLK_DEV_THROTTLING_LOW=y
CONFIG_BLK_WBT=y
CONFIG_BLK_WBT_MQ=y
CONFIG_BLK_CGROUP_IOLATENCY=y
CONFIG_BLK_CGROUP_FC_APPID=y
CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOPRIO=y
CONFIG_BLK_DEBUG_FS=y
CONFIG_BLK_DEBUG_FS_ZONED=y
CONFIG_BLK_SED_OPAL=y
CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
CONFIG_ACORN_PARTITION=y
CONFIG_ACORN_PARTITION_CUMANA=y
CONFIG_ACORN_PARTITION_EESOX=y
CONFIG_ACORN_PARTITION_ICS=y
CONFIG_ACORN_PARTITION_ADFS=y
CONFIG_ACORN_PARTITION_POWERTEC=y
CONFIG_ACORN_PARTITION_RISCIX=y
CONFIG_AIX_PARTITION=y
CONFIG_OSF_PARTITION=y
CONFIG_AMIGA_PARTITION=y
CONFIG_ATARI_PARTITION=y
CONFIG_MAC_PARTITION=y
CONFIG_MSDOS_PARTITION=y
CONFIG_BSD_DISKLABEL=y
CONFIG_MINIX_SUBPARTITION=y
CONFIG_SOLARIS_X86_PARTITION=y
CONFIG_UNIXWARE_DISKLABEL=y
CONFIG_LDM_PARTITION=y
CONFIG_LDM_DEBUG=y
CONFIG_SGI_PARTITION=y
CONFIG_ULTRIX_PARTITION=y
CONFIG_SUN_PARTITION=y
CONFIG_KARMA_PARTITION=y
CONFIG_EFI_PARTITION=y
CONFIG_SYSV68_PARTITION=y
CONFIG_CMDLINE_PARTITION=y
# end of Partition Types

CONFIG_BLK_MQ_VIRTIO=y
CONFIG_BLK_MQ_RDMA=y
CONFIG_BLOCK_HOLDER_DEPRECATED=y
CONFIG_BLK_MQ_STACKING=y

#
# IO Schedulers
#
CONFIG_MQ_IOSCHED_DEADLINE=y
CONFIG_MQ_IOSCHED_KYBER=y
CONFIG_IOSCHED_BFQ=y
CONFIG_BFQ_GROUP_IOSCHED=y
CONFIG_BFQ_CGROUP_DEBUG=y
# end of IO Schedulers

CONFIG_ASN1=y
CONFIG_UNINLINE_SPIN_UNLOCK=y
CONFIG_FREEZER=y

#
# Executable file formats
#
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_ELF_KUNIT_TEST=y
CONFIG_ELFCORE=y
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
CONFIG_BINFMT_SCRIPT=y
CONFIG_BINFMT_MISC=y
CONFIG_COREDUMP=y
# end of Executable file formats

#
# Memory Management options
#
CONFIG_ARCH_NO_SWAP=y
CONFIG_ZSMALLOC=y
CONFIG_ZSMALLOC_STAT=y

#
# SLAB allocator options
#
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
CONFIG_SLAB_MERGE_DEFAULT=y
# CONFIG_SLAB_FREELIST_RANDOM is not set
# CONFIG_SLAB_FREELIST_HARDENED is not set
# CONFIG_SLUB_STATS is not set
# end of SLAB allocator options

CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
CONFIG_COMPAT_BRK=y
CONFIG_FLATMEM=y
CONFIG_MEMORY_ISOLATION=y
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_MEMORY_BALLOON=y
CONFIG_BALLOON_COMPACTION=y
CONFIG_COMPACTION=y
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
CONFIG_PAGE_REPORTING=y
CONFIG_MIGRATION=y
CONFIG_CONTIG_ALLOC=y
CONFIG_MMU_NOTIFIER=y
CONFIG_KSM=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_NEED_PER_CPU_KM=y
CONFIG_CMA=y
CONFIG_CMA_DEBUG=y
CONFIG_CMA_DEBUGFS=y
CONFIG_CMA_SYSFS=y
CONFIG_CMA_AREAS=7
CONFIG_PAGE_IDLE_FLAG=y
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_HMM_MIRROR=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_PERCPU_STATS=y
CONFIG_GUP_TEST=y
CONFIG_ANON_VMA_NAME=y
CONFIG_USERFAULTFD=y
CONFIG_LRU_GEN=y
CONFIG_LRU_GEN_ENABLED=y
CONFIG_LRU_GEN_STATS=y

#
# Data Access Monitoring
#
CONFIG_DAMON=y
CONFIG_DAMON_KUNIT_TEST=y
CONFIG_DAMON_VADDR=y
CONFIG_DAMON_PADDR=y
CONFIG_DAMON_VADDR_KUNIT_TEST=y
CONFIG_DAMON_SYSFS=y
CONFIG_DAMON_DBGFS=y
CONFIG_DAMON_DBGFS_KUNIT_TEST=y
CONFIG_DAMON_RECLAIM=y
CONFIG_DAMON_LRU_SORT=y
# end of Data Access Monitoring
# end of Memory Management options

CONFIG_NET=y
CONFIG_NET_INGRESS=y
CONFIG_NET_EGRESS=y
CONFIG_NET_REDIRECT=y
CONFIG_SKB_EXTENSIONS=y

#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_DIAG=y
CONFIG_UNIX=y
CONFIG_UNIX_SCM=y
CONFIG_AF_UNIX_OOB=y
CONFIG_UNIX_DIAG=y
CONFIG_TLS=y
CONFIG_TLS_DEVICE=y
CONFIG_TLS_TOE=y
CONFIG_XFRM=y
CONFIG_XFRM_OFFLOAD=y
CONFIG_XFRM_ALGO=y
CONFIG_XFRM_USER=y
CONFIG_XFRM_INTERFACE=y
CONFIG_XFRM_SUB_POLICY=y
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_AH=y
CONFIG_XFRM_ESP=y
CONFIG_XFRM_IPCOMP=y
CONFIG_NET_KEY=y
CONFIG_NET_KEY_MIGRATE=y
CONFIG_XFRM_ESPINTCP=y
CONFIG_SMC=y
CONFIG_SMC_DIAG=y
CONFIG_XDP_SOCKETS=y
CONFIG_XDP_SOCKETS_DIAG=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_FIB_TRIE_STATS=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_ROUTE_CLASSID=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
CONFIG_NET_IPIP=y
CONFIG_NET_IPGRE_DEMUX=y
CONFIG_NET_IP_TUNNEL=y
CONFIG_NET_IPGRE=y
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_IP_MROUTE_COMMON=y
CONFIG_IP_MROUTE=y
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=y
CONFIG_NET_UDP_TUNNEL=y
CONFIG_NET_FOU=y
CONFIG_NET_FOU_IP_TUNNELS=y
CONFIG_INET_AH=y
CONFIG_INET_ESP=y
CONFIG_INET_ESP_OFFLOAD=y
CONFIG_INET_ESPINTCP=y
CONFIG_INET_IPCOMP=y
CONFIG_INET_XFRM_TUNNEL=y
CONFIG_INET_TUNNEL=y
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
CONFIG_INET_UDP_DIAG=y
CONFIG_INET_RAW_DIAG=y
CONFIG_INET_DIAG_DESTROY=y
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=y
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=y
CONFIG_TCP_CONG_HTCP=y
CONFIG_TCP_CONG_HSTCP=y
CONFIG_TCP_CONG_HYBLA=y
CONFIG_TCP_CONG_VEGAS=y
CONFIG_TCP_CONG_NV=y
CONFIG_TCP_CONG_SCALABLE=y
CONFIG_TCP_CONG_LP=y
CONFIG_TCP_CONG_VENO=y
CONFIG_TCP_CONG_YEAH=y
CONFIG_TCP_CONG_ILLINOIS=y
CONFIG_TCP_CONG_DCTCP=y
CONFIG_TCP_CONG_CDG=y
CONFIG_TCP_CONG_BBR=y
# CONFIG_DEFAULT_BIC is not set
CONFIG_DEFAULT_CUBIC=y
# CONFIG_DEFAULT_HTCP is not set
# CONFIG_DEFAULT_HYBLA is not set
# CONFIG_DEFAULT_VEGAS is not set
# CONFIG_DEFAULT_VENO is not set
# CONFIG_DEFAULT_WESTWOOD is not set
# CONFIG_DEFAULT_DCTCP is not set
# CONFIG_DEFAULT_CDG is not set
# CONFIG_DEFAULT_BBR is not set
# CONFIG_DEFAULT_RENO is not set
CONFIG_DEFAULT_TCP_CONG="cubic"
CONFIG_TCP_MD5SIG=y
CONFIG_IPV6=y
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_ROUTE_INFO=y
CONFIG_IPV6_OPTIMISTIC_DAD=y
CONFIG_INET6_AH=y
CONFIG_INET6_ESP=y
CONFIG_INET6_ESP_OFFLOAD=y
CONFIG_INET6_ESPINTCP=y
CONFIG_INET6_IPCOMP=y
CONFIG_IPV6_MIP6=y
CONFIG_IPV6_ILA=y
CONFIG_INET6_XFRM_TUNNEL=y
CONFIG_INET6_TUNNEL=y
CONFIG_IPV6_VTI=y
CONFIG_IPV6_SIT=y
CONFIG_IPV6_SIT_6RD=y
CONFIG_IPV6_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=y
CONFIG_IPV6_GRE=y
CONFIG_IPV6_FOU=y
CONFIG_IPV6_FOU_TUNNEL=y
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
CONFIG_IPV6_MROUTE=y
CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
CONFIG_IPV6_PIMSM_V2=y
CONFIG_IPV6_SEG6_LWTUNNEL=y
CONFIG_IPV6_SEG6_HMAC=y
CONFIG_IPV6_SEG6_BPF=y
CONFIG_IPV6_RPL_LWTUNNEL=y
CONFIG_IPV6_IOAM6_LWTUNNEL=y
CONFIG_NETLABEL=y
CONFIG_MPTCP=y
CONFIG_INET_MPTCP_DIAG=y
CONFIG_MPTCP_IPV6=y
CONFIG_MPTCP_KUNIT_TEST=y
CONFIG_NETWORK_SECMARK=y
CONFIG_NET_PTP_CLASSIFY=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=y

#
# Core Netfilter Configuration
#
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_EGRESS=y
CONFIG_NETFILTER_SKIP_EGRESS=y
CONFIG_NETFILTER_NETLINK=y
CONFIG_NETFILTER_FAMILY_BRIDGE=y
CONFIG_NETFILTER_FAMILY_ARP=y
CONFIG_NETFILTER_NETLINK_HOOK=y
CONFIG_NETFILTER_NETLINK_ACCT=y
CONFIG_NETFILTER_NETLINK_QUEUE=y
CONFIG_NETFILTER_NETLINK_LOG=y
CONFIG_NETFILTER_NETLINK_OSF=y
CONFIG_NF_CONNTRACK=y
CONFIG_NF_LOG_SYSLOG=y
CONFIG_NETFILTER_CONNCOUNT=y
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_ZONES=y
CONFIG_NF_CONNTRACK_PROCFS=y
CONFIG_NF_CONNTRACK_EVENTS=y
CONFIG_NF_CONNTRACK_TIMEOUT=y
CONFIG_NF_CONNTRACK_TIMESTAMP=y
CONFIG_NF_CONNTRACK_LABELS=y
CONFIG_NF_CT_PROTO_DCCP=y
CONFIG_NF_CT_PROTO_GRE=y
CONFIG_NF_CT_PROTO_SCTP=y
CONFIG_NF_CT_PROTO_UDPLITE=y
CONFIG_NF_CONNTRACK_AMANDA=y
CONFIG_NF_CONNTRACK_FTP=y
CONFIG_NF_CONNTRACK_H323=y
CONFIG_NF_CONNTRACK_IRC=y
CONFIG_NF_CONNTRACK_BROADCAST=y
CONFIG_NF_CONNTRACK_NETBIOS_NS=y
CONFIG_NF_CONNTRACK_SNMP=y
CONFIG_NF_CONNTRACK_PPTP=y
CONFIG_NF_CONNTRACK_SANE=y
CONFIG_NF_CONNTRACK_SIP=y
CONFIG_NF_CONNTRACK_TFTP=y
CONFIG_NF_CT_NETLINK=y
CONFIG_NF_CT_NETLINK_TIMEOUT=y
CONFIG_NF_CT_NETLINK_HELPER=y
CONFIG_NETFILTER_NETLINK_GLUE_CT=y
CONFIG_NF_NAT=y
CONFIG_NF_NAT_AMANDA=y
CONFIG_NF_NAT_FTP=y
CONFIG_NF_NAT_IRC=y
CONFIG_NF_NAT_SIP=y
CONFIG_NF_NAT_TFTP=y
CONFIG_NF_NAT_REDIRECT=y
CONFIG_NF_NAT_MASQUERADE=y
CONFIG_NETFILTER_SYNPROXY=y
CONFIG_NF_TABLES=y
CONFIG_NF_TABLES_INET=y
CONFIG_NF_TABLES_NETDEV=y
CONFIG_NFT_NUMGEN=y
CONFIG_NFT_CT=y
CONFIG_NFT_FLOW_OFFLOAD=y
CONFIG_NFT_CONNLIMIT=y
CONFIG_NFT_LOG=y
CONFIG_NFT_LIMIT=y
CONFIG_NFT_MASQ=y
CONFIG_NFT_REDIR=y
CONFIG_NFT_NAT=y
CONFIG_NFT_TUNNEL=y
# CONFIG_NFT_OBJREF is not set
CONFIG_NFT_QUEUE=y
CONFIG_NFT_QUOTA=y
CONFIG_NFT_REJECT=y
CONFIG_NFT_REJECT_INET=y
CONFIG_NFT_COMPAT=y
CONFIG_NFT_HASH=y
CONFIG_NFT_FIB=y
CONFIG_NFT_FIB_INET=y
CONFIG_NFT_XFRM=y
CONFIG_NFT_SOCKET=y
CONFIG_NFT_OSF=y
CONFIG_NFT_TPROXY=y
CONFIG_NFT_SYNPROXY=y
CONFIG_NF_DUP_NETDEV=y
CONFIG_NFT_DUP_NETDEV=y
CONFIG_NFT_FWD_NETDEV=y
CONFIG_NFT_FIB_NETDEV=y
CONFIG_NFT_REJECT_NETDEV=y
CONFIG_NF_FLOW_TABLE_INET=y
CONFIG_NF_FLOW_TABLE=y
CONFIG_NF_FLOW_TABLE_PROCFS=y
CONFIG_NETFILTER_XTABLES=y

#
# Xtables combined modules
#
CONFIG_NETFILTER_XT_MARK=y
CONFIG_NETFILTER_XT_CONNMARK=y
CONFIG_NETFILTER_XT_SET=y

#
# Xtables targets
#
CONFIG_NETFILTER_XT_TARGET_AUDIT=y
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=y
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
CONFIG_NETFILTER_XT_TARGET_CT=y
CONFIG_NETFILTER_XT_TARGET_DSCP=y
CONFIG_NETFILTER_XT_TARGET_HL=y
CONFIG_NETFILTER_XT_TARGET_HMARK=y
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
CONFIG_NETFILTER_XT_TARGET_LED=y
CONFIG_NETFILTER_XT_TARGET_LOG=y
CONFIG_NETFILTER_XT_TARGET_MARK=y
CONFIG_NETFILTER_XT_NAT=y
CONFIG_NETFILTER_XT_TARGET_NETMAP=y
CONFIG_NETFILTER_XT_TARGET_NFLOG=y
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
CONFIG_NETFILTER_XT_TARGET_NOTRACK=y
CONFIG_NETFILTER_XT_TARGET_RATEEST=y
CONFIG_NETFILTER_XT_TARGET_REDIRECT=y
CONFIG_NETFILTER_XT_TARGET_MASQUERADE=y
CONFIG_NETFILTER_XT_TARGET_TEE=y
CONFIG_NETFILTER_XT_TARGET_TPROXY=y
CONFIG_NETFILTER_XT_TARGET_TRACE=y
CONFIG_NETFILTER_XT_TARGET_SECMARK=y
CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=y

#
# Xtables matches
#
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_MATCH_BPF=y
CONFIG_NETFILTER_XT_MATCH_CGROUP=y
CONFIG_NETFILTER_XT_MATCH_CLUSTER=y
CONFIG_NETFILTER_XT_MATCH_COMMENT=y
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=y
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_CPU=y
CONFIG_NETFILTER_XT_MATCH_DCCP=y
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=y
CONFIG_NETFILTER_XT_MATCH_DSCP=y
CONFIG_NETFILTER_XT_MATCH_ECN=y
CONFIG_NETFILTER_XT_MATCH_ESP=y
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
CONFIG_NETFILTER_XT_MATCH_HELPER=y
CONFIG_NETFILTER_XT_MATCH_HL=y
CONFIG_NETFILTER_XT_MATCH_IPCOMP=y
CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
CONFIG_NETFILTER_XT_MATCH_IPVS=y
CONFIG_NETFILTER_XT_MATCH_L2TP=y
CONFIG_NETFILTER_XT_MATCH_LENGTH=y
CONFIG_NETFILTER_XT_MATCH_LIMIT=y
CONFIG_NETFILTER_XT_MATCH_MAC=y
CONFIG_NETFILTER_XT_MATCH_MARK=y
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
CONFIG_NETFILTER_XT_MATCH_NFACCT=y
CONFIG_NETFILTER_XT_MATCH_OSF=y
CONFIG_NETFILTER_XT_MATCH_OWNER=y
CONFIG_NETFILTER_XT_MATCH_POLICY=y
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=y
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
CONFIG_NETFILTER_XT_MATCH_QUOTA=y
CONFIG_NETFILTER_XT_MATCH_RATEEST=y
CONFIG_NETFILTER_XT_MATCH_REALM=y
CONFIG_NETFILTER_XT_MATCH_RECENT=y
CONFIG_NETFILTER_XT_MATCH_SCTP=y
CONFIG_NETFILTER_XT_MATCH_SOCKET=y
CONFIG_NETFILTER_XT_MATCH_STATE=y
CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
CONFIG_NETFILTER_XT_MATCH_STRING=y
CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
CONFIG_NETFILTER_XT_MATCH_TIME=y
CONFIG_NETFILTER_XT_MATCH_U32=y
# end of Core Netfilter Configuration

CONFIG_IP_SET=y
CONFIG_IP_SET_MAX=256
CONFIG_IP_SET_BITMAP_IP=y
CONFIG_IP_SET_BITMAP_IPMAC=y
CONFIG_IP_SET_BITMAP_PORT=y
CONFIG_IP_SET_HASH_IP=y
CONFIG_IP_SET_HASH_IPMARK=y
CONFIG_IP_SET_HASH_IPPORT=y
CONFIG_IP_SET_HASH_IPPORTIP=y
CONFIG_IP_SET_HASH_IPPORTNET=y
CONFIG_IP_SET_HASH_IPMAC=y
CONFIG_IP_SET_HASH_MAC=y
CONFIG_IP_SET_HASH_NETPORTNET=y
CONFIG_IP_SET_HASH_NET=y
CONFIG_IP_SET_HASH_NETNET=y
CONFIG_IP_SET_HASH_NETPORT=y
CONFIG_IP_SET_HASH_NETIFACE=y
CONFIG_IP_SET_LIST_SET=y
CONFIG_IP_VS=y
CONFIG_IP_VS_IPV6=y
CONFIG_IP_VS_DEBUG=y
CONFIG_IP_VS_TAB_BITS=12

#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y

#
# IPVS scheduler
#
CONFIG_IP_VS_RR=y
CONFIG_IP_VS_WRR=y
CONFIG_IP_VS_LC=y
CONFIG_IP_VS_WLC=y
CONFIG_IP_VS_FO=y
CONFIG_IP_VS_OVF=y
CONFIG_IP_VS_LBLC=y
CONFIG_IP_VS_LBLCR=y
CONFIG_IP_VS_DH=y
CONFIG_IP_VS_SH=y
CONFIG_IP_VS_MH=y
CONFIG_IP_VS_SED=y
CONFIG_IP_VS_NQ=y
CONFIG_IP_VS_TWOS=y

#
# IPVS SH scheduler
#
CONFIG_IP_VS_SH_TAB_BITS=8

#
# IPVS MH scheduler
#
CONFIG_IP_VS_MH_TAB_INDEX=12

#
# IPVS application helper
#
CONFIG_IP_VS_FTP=y
CONFIG_IP_VS_NFCT=y
CONFIG_IP_VS_PE_SIP=y

#
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=y
CONFIG_NF_SOCKET_IPV4=y
CONFIG_NF_TPROXY_IPV4=y
CONFIG_NF_TABLES_IPV4=y
CONFIG_NFT_REJECT_IPV4=y
CONFIG_NFT_DUP_IPV4=y
CONFIG_NFT_FIB_IPV4=y
CONFIG_NF_TABLES_ARP=y
CONFIG_NF_DUP_IPV4=y
CONFIG_NF_LOG_ARP=y
CONFIG_NF_LOG_IPV4=y
CONFIG_NF_REJECT_IPV4=y
CONFIG_NF_NAT_SNMP_BASIC=y
CONFIG_NF_NAT_PPTP=y
CONFIG_NF_NAT_H323=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_MATCH_AH=y
CONFIG_IP_NF_MATCH_ECN=y
CONFIG_IP_NF_MATCH_RPFILTER=y
CONFIG_IP_NF_MATCH_TTL=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_REJECT=y
CONFIG_IP_NF_TARGET_SYNPROXY=y
CONFIG_IP_NF_NAT=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_IP_NF_TARGET_NETMAP=y
CONFIG_IP_NF_TARGET_REDIRECT=y
CONFIG_IP_NF_MANGLE=y
CONFIG_IP_NF_TARGET_CLUSTERIP=y
CONFIG_IP_NF_TARGET_ECN=y
CONFIG_IP_NF_TARGET_TTL=y
CONFIG_IP_NF_RAW=y
CONFIG_IP_NF_SECURITY=y
CONFIG_IP_NF_ARPTABLES=y
CONFIG_IP_NF_ARPFILTER=y
CONFIG_IP_NF_ARP_MANGLE=y
# end of IP: Netfilter Configuration

#
# IPv6: Netfilter Configuration
#
CONFIG_NF_SOCKET_IPV6=y
CONFIG_NF_TPROXY_IPV6=y
CONFIG_NF_TABLES_IPV6=y
CONFIG_NFT_REJECT_IPV6=y
CONFIG_NFT_DUP_IPV6=y
CONFIG_NFT_FIB_IPV6=y
CONFIG_NF_DUP_IPV6=y
CONFIG_NF_REJECT_IPV6=y
CONFIG_NF_LOG_IPV6=y
CONFIG_IP6_NF_IPTABLES=y
CONFIG_IP6_NF_MATCH_AH=y
CONFIG_IP6_NF_MATCH_EUI64=y
CONFIG_IP6_NF_MATCH_FRAG=y
CONFIG_IP6_NF_MATCH_OPTS=y
CONFIG_IP6_NF_MATCH_HL=y
CONFIG_IP6_NF_MATCH_IPV6HEADER=y
CONFIG_IP6_NF_MATCH_MH=y
CONFIG_IP6_NF_MATCH_RPFILTER=y
CONFIG_IP6_NF_MATCH_RT=y
CONFIG_IP6_NF_MATCH_SRH=y
CONFIG_IP6_NF_TARGET_HL=y
CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_REJECT=y
CONFIG_IP6_NF_TARGET_SYNPROXY=y
CONFIG_IP6_NF_MANGLE=y
CONFIG_IP6_NF_RAW=y
CONFIG_IP6_NF_SECURITY=y
CONFIG_IP6_NF_NAT=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
CONFIG_IP6_NF_TARGET_NPT=y
# end of IPv6: Netfilter Configuration

CONFIG_NF_DEFRAG_IPV6=y
CONFIG_NF_TABLES_BRIDGE=y
CONFIG_NFT_BRIDGE_META=y
CONFIG_NFT_BRIDGE_REJECT=y
CONFIG_NF_CONNTRACK_BRIDGE=y
CONFIG_BRIDGE_NF_EBTABLES=y
CONFIG_BRIDGE_EBT_BROUTE=y
CONFIG_BRIDGE_EBT_T_FILTER=y
CONFIG_BRIDGE_EBT_T_NAT=y
CONFIG_BRIDGE_EBT_802_3=y
CONFIG_BRIDGE_EBT_AMONG=y
CONFIG_BRIDGE_EBT_ARP=y
CONFIG_BRIDGE_EBT_IP=y
CONFIG_BRIDGE_EBT_IP6=y
CONFIG_BRIDGE_EBT_LIMIT=y
CONFIG_BRIDGE_EBT_MARK=y
CONFIG_BRIDGE_EBT_PKTTYPE=y
CONFIG_BRIDGE_EBT_STP=y
CONFIG_BRIDGE_EBT_VLAN=y
CONFIG_BRIDGE_EBT_ARPREPLY=y
CONFIG_BRIDGE_EBT_DNAT=y
CONFIG_BRIDGE_EBT_MARK_T=y
CONFIG_BRIDGE_EBT_REDIRECT=y
CONFIG_BRIDGE_EBT_SNAT=y
CONFIG_BRIDGE_EBT_LOG=y
CONFIG_BRIDGE_EBT_NFLOG=y
CONFIG_BPFILTER=y
CONFIG_IP_DCCP=y
CONFIG_INET_DCCP_DIAG=y

#
# DCCP CCIDs Configuration
#
CONFIG_IP_DCCP_CCID2_DEBUG=y
CONFIG_IP_DCCP_CCID3=y
CONFIG_IP_DCCP_CCID3_DEBUG=y
CONFIG_IP_DCCP_TFRC_LIB=y
CONFIG_IP_DCCP_TFRC_DEBUG=y
# end of DCCP CCIDs Configuration

#
# DCCP Kernel Hacking
#
CONFIG_IP_DCCP_DEBUG=y
# end of DCCP Kernel Hacking

CONFIG_IP_SCTP=y
CONFIG_SCTP_DBG_OBJCNT=y
CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 is not set
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
CONFIG_SCTP_COOKIE_HMAC_MD5=y
CONFIG_SCTP_COOKIE_HMAC_SHA1=y
CONFIG_INET_SCTP_DIAG=y
CONFIG_RDS=y
CONFIG_RDS_RDMA=y
CONFIG_RDS_TCP=y
CONFIG_RDS_DEBUG=y
CONFIG_TIPC=y
CONFIG_TIPC_MEDIA_IB=y
CONFIG_TIPC_MEDIA_UDP=y
CONFIG_TIPC_CRYPTO=y
CONFIG_TIPC_DIAG=y
CONFIG_ATM=y
CONFIG_ATM_CLIP=y
CONFIG_ATM_CLIP_NO_ICMP=y
CONFIG_ATM_LANE=y
CONFIG_ATM_MPOA=y
CONFIG_ATM_BR2684=y
CONFIG_ATM_BR2684_IPFILTER=y
CONFIG_L2TP=y
CONFIG_L2TP_DEBUGFS=y
CONFIG_L2TP_V3=y
CONFIG_L2TP_IP=y
CONFIG_L2TP_ETH=y
CONFIG_STP=y
CONFIG_GARP=y
CONFIG_MRP=y
CONFIG_BRIDGE=y
CONFIG_BRIDGE_IGMP_SNOOPING=y
CONFIG_BRIDGE_VLAN_FILTERING=y
CONFIG_BRIDGE_MRP=y
CONFIG_BRIDGE_CFM=y
CONFIG_NET_DSA=y
CONFIG_NET_DSA_TAG_AR9331=y
CONFIG_NET_DSA_TAG_BRCM_COMMON=y
CONFIG_NET_DSA_TAG_BRCM=y
CONFIG_NET_DSA_TAG_BRCM_LEGACY=y
CONFIG_NET_DSA_TAG_BRCM_PREPEND=y
CONFIG_NET_DSA_TAG_HELLCREEK=y
CONFIG_NET_DSA_TAG_GSWIP=y
CONFIG_NET_DSA_TAG_DSA_COMMON=y
CONFIG_NET_DSA_TAG_DSA=y
CONFIG_NET_DSA_TAG_EDSA=y
CONFIG_NET_DSA_TAG_MTK=y
CONFIG_NET_DSA_TAG_KSZ=y
CONFIG_NET_DSA_TAG_OCELOT=y
CONFIG_NET_DSA_TAG_OCELOT_8021Q=y
CONFIG_NET_DSA_TAG_QCA=y
CONFIG_NET_DSA_TAG_RTL4_A=y
CONFIG_NET_DSA_TAG_RTL8_4=y
CONFIG_NET_DSA_TAG_RZN1_A5PSW=y
CONFIG_NET_DSA_TAG_LAN9303=y
CONFIG_NET_DSA_TAG_SJA1105=y
CONFIG_NET_DSA_TAG_TRAILER=y
CONFIG_NET_DSA_TAG_XRS700X=y
CONFIG_VLAN_8021Q=y
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q_MVRP=y
CONFIG_LLC=y
CONFIG_LLC2=y
CONFIG_ATALK=y
CONFIG_DEV_APPLETALK=y
CONFIG_IPDDP=y
CONFIG_IPDDP_ENCAP=y
CONFIG_X25=y
CONFIG_LAPB=y
CONFIG_PHONET=y
CONFIG_6LOWPAN=y
CONFIG_6LOWPAN_DEBUGFS=y
CONFIG_6LOWPAN_NHC=y
CONFIG_6LOWPAN_NHC_DEST=y
CONFIG_6LOWPAN_NHC_FRAGMENT=y
CONFIG_6LOWPAN_NHC_HOP=y
CONFIG_6LOWPAN_NHC_IPV6=y
CONFIG_6LOWPAN_NHC_MOBILITY=y
CONFIG_6LOWPAN_NHC_ROUTING=y
CONFIG_6LOWPAN_NHC_UDP=y
CONFIG_6LOWPAN_GHC_EXT_HDR_HOP=y
CONFIG_6LOWPAN_GHC_UDP=y
CONFIG_6LOWPAN_GHC_ICMPV6=y
CONFIG_6LOWPAN_GHC_EXT_HDR_DEST=y
CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG=y
CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE=y
CONFIG_IEEE802154=y
CONFIG_IEEE802154_NL802154_EXPERIMENTAL=y
CONFIG_IEEE802154_SOCKET=y
CONFIG_IEEE802154_6LOWPAN=y
CONFIG_MAC802154=y
CONFIG_NET_SCHED=y

#
# Queueing/Scheduling
#
CONFIG_NET_SCH_CBQ=y
CONFIG_NET_SCH_HTB=y
CONFIG_NET_SCH_HFSC=y
CONFIG_NET_SCH_ATM=y
CONFIG_NET_SCH_PRIO=y
CONFIG_NET_SCH_MULTIQ=y
CONFIG_NET_SCH_RED=y
CONFIG_NET_SCH_SFB=y
CONFIG_NET_SCH_SFQ=y
CONFIG_NET_SCH_TEQL=y
CONFIG_NET_SCH_TBF=y
CONFIG_NET_SCH_CBS=y
CONFIG_NET_SCH_ETF=y
CONFIG_NET_SCH_TAPRIO=y
CONFIG_NET_SCH_GRED=y
CONFIG_NET_SCH_DSMARK=y
CONFIG_NET_SCH_NETEM=y
CONFIG_NET_SCH_DRR=y
CONFIG_NET_SCH_MQPRIO=y
CONFIG_NET_SCH_SKBPRIO=y
CONFIG_NET_SCH_CHOKE=y
CONFIG_NET_SCH_QFQ=y
CONFIG_NET_SCH_CODEL=y
CONFIG_NET_SCH_FQ_CODEL=y
CONFIG_NET_SCH_CAKE=y
CONFIG_NET_SCH_FQ=y
CONFIG_NET_SCH_HHF=y
CONFIG_NET_SCH_PIE=y
CONFIG_NET_SCH_FQ_PIE=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_SCH_PLUG=y
CONFIG_NET_SCH_ETS=y
CONFIG_NET_SCH_DEFAULT=y
# CONFIG_DEFAULT_FQ is not set
# CONFIG_DEFAULT_CODEL is not set
# CONFIG_DEFAULT_FQ_CODEL is not set
# CONFIG_DEFAULT_FQ_PIE is not set
# CONFIG_DEFAULT_SFQ is not set
CONFIG_DEFAULT_PFIFO_FAST=y
CONFIG_DEFAULT_NET_SCH="pfifo_fast"

#
# Classification
#
CONFIG_NET_CLS=y
CONFIG_NET_CLS_BASIC=y
CONFIG_NET_CLS_TCINDEX=y
CONFIG_NET_CLS_ROUTE4=y
CONFIG_NET_CLS_FW=y
CONFIG_NET_CLS_U32=y
CONFIG_CLS_U32_PERF=y
CONFIG_CLS_U32_MARK=y
CONFIG_NET_CLS_RSVP=y
CONFIG_NET_CLS_RSVP6=y
CONFIG_NET_CLS_FLOW=y
CONFIG_NET_CLS_CGROUP=y
CONFIG_NET_CLS_BPF=y
CONFIG_NET_CLS_FLOWER=y
CONFIG_NET_CLS_MATCHALL=y
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32
CONFIG_NET_EMATCH_CMP=y
CONFIG_NET_EMATCH_NBYTE=y
CONFIG_NET_EMATCH_U32=y
CONFIG_NET_EMATCH_META=y
CONFIG_NET_EMATCH_TEXT=y
CONFIG_NET_EMATCH_CANID=y
CONFIG_NET_EMATCH_IPSET=y
CONFIG_NET_EMATCH_IPT=y
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=y
CONFIG_NET_ACT_GACT=y
CONFIG_GACT_PROB=y
CONFIG_NET_ACT_MIRRED=y
CONFIG_NET_ACT_SAMPLE=y
CONFIG_NET_ACT_IPT=y
CONFIG_NET_ACT_NAT=y
CONFIG_NET_ACT_PEDIT=y
CONFIG_NET_ACT_SIMP=y
CONFIG_NET_ACT_SKBEDIT=y
CONFIG_NET_ACT_CSUM=y
CONFIG_NET_ACT_MPLS=y
CONFIG_NET_ACT_VLAN=y
CONFIG_NET_ACT_BPF=y
CONFIG_NET_ACT_CONNMARK=y
CONFIG_NET_ACT_CTINFO=y
CONFIG_NET_ACT_SKBMOD=y
CONFIG_NET_ACT_IFE=y
CONFIG_NET_ACT_TUNNEL_KEY=y
CONFIG_NET_ACT_CT=y
CONFIG_NET_ACT_GATE=y
CONFIG_NET_IFE_SKBMARK=y
CONFIG_NET_IFE_SKBPRIO=y
CONFIG_NET_IFE_SKBTCINDEX=y
CONFIG_NET_TC_SKB_EXT=y
CONFIG_NET_SCH_FIFO=y
CONFIG_DCB=y
CONFIG_DNS_RESOLVER=y
CONFIG_BATMAN_ADV=y
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
CONFIG_BATMAN_ADV_NC=y
CONFIG_BATMAN_ADV_MCAST=y
CONFIG_BATMAN_ADV_DEBUG=y
CONFIG_OPENVSWITCH=y
CONFIG_OPENVSWITCH_GRE=y
CONFIG_OPENVSWITCH_VXLAN=y
CONFIG_OPENVSWITCH_GENEVE=y
CONFIG_VSOCKETS=y
CONFIG_VSOCKETS_DIAG=y
CONFIG_VSOCKETS_LOOPBACK=y
CONFIG_VIRTIO_VSOCKETS=y
CONFIG_VIRTIO_VSOCKETS_COMMON=y
CONFIG_NETLINK_DIAG=y
CONFIG_MPLS=y
CONFIG_NET_MPLS_GSO=y
CONFIG_MPLS_ROUTING=y
CONFIG_MPLS_IPTUNNEL=y
CONFIG_NET_NSH=y
CONFIG_HSR=y
CONFIG_NET_SWITCHDEV=y
CONFIG_NET_L3_MASTER_DEV=y
CONFIG_QRTR=y
CONFIG_QRTR_SMD=y
CONFIG_QRTR_TUN=y
CONFIG_QRTR_MHI=y
CONFIG_NET_NCSI=y
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
CONFIG_SOCK_RX_QUEUE_MAPPING=y
CONFIG_HWBM=y
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y
CONFIG_NET_RX_BUSY_POLL=y
CONFIG_BQL=y
CONFIG_BPF_STREAM_PARSER=y

#
# Network testing
#
CONFIG_NET_PKTGEN=y
# end of Network testing
# end of Networking options

CONFIG_HAMRADIO=y

#
# Packet Radio protocols
#
CONFIG_AX25=y
CONFIG_AX25_DAMA_SLAVE=y
CONFIG_NETROM=y
CONFIG_ROSE=y

#
# AX.25 network device drivers
#
CONFIG_MKISS=y
CONFIG_6PACK=y
CONFIG_BPQETHER=y
CONFIG_BAYCOM_SER_FDX=y
CONFIG_BAYCOM_SER_HDX=y
CONFIG_BAYCOM_PAR=y
CONFIG_BAYCOM_EPP=y
CONFIG_YAM=y
# end of AX.25 network device drivers

CONFIG_CAN=y
CONFIG_CAN_RAW=y
CONFIG_CAN_BCM=y
CONFIG_CAN_GW=y
CONFIG_CAN_J1939=y
CONFIG_CAN_ISOTP=y
CONFIG_BT=y
CONFIG_BT_BREDR=y
CONFIG_BT_RFCOMM=y
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=y
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_CMTP=y
CONFIG_BT_HIDP=y
CONFIG_BT_HS=y
CONFIG_BT_LE=y
CONFIG_BT_6LOWPAN=y
CONFIG_BT_LEDS=y
CONFIG_BT_MSFTEXT=y
CONFIG_BT_AOSPEXT=y
CONFIG_BT_DEBUGFS=y
CONFIG_BT_SELFTEST=y
CONFIG_BT_SELFTEST_ECDH=y
CONFIG_BT_SELFTEST_SMP=y

#
# Bluetooth device drivers
#
CONFIG_BT_INTEL=y
CONFIG_BT_BCM=y
CONFIG_BT_RTL=y
CONFIG_BT_QCA=y
CONFIG_BT_MTK=y
CONFIG_BT_HCIBTUSB=y
CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB_MTK=y
CONFIG_BT_HCIBTUSB_RTL=y
CONFIG_BT_HCIBTSDIO=y
CONFIG_BT_HCIUART=y
CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIUART_ATH3K=y
CONFIG_BT_HCIUART_LL=y
CONFIG_BT_HCIUART_3WIRE=y
CONFIG_BT_HCIUART_INTEL=y
CONFIG_BT_HCIUART_BCM=y
CONFIG_BT_HCIUART_RTL=y
CONFIG_BT_HCIUART_QCA=y
CONFIG_BT_HCIUART_AG6XX=y
CONFIG_BT_HCIUART_MRVL=y
CONFIG_BT_HCIBCM203X=y
CONFIG_BT_HCIBPA10X=y
CONFIG_BT_HCIBFUSB=y
CONFIG_BT_HCIDTL1=y
CONFIG_BT_HCIBT3C=y
CONFIG_BT_HCIBLUECARD=y
CONFIG_BT_HCIVHCI=y
CONFIG_BT_MRVL=y
CONFIG_BT_MRVL_SDIO=y
CONFIG_BT_ATH3K=y
CONFIG_BT_MTKSDIO=y
CONFIG_BT_MTKUART=y
CONFIG_BT_QCOMSMD=y
CONFIG_BT_HCIRSI=y
CONFIG_BT_VIRTIO=y
# end of Bluetooth device drivers

CONFIG_AF_RXRPC=y
CONFIG_AF_RXRPC_IPV6=y
CONFIG_AF_RXRPC_INJECT_LOSS=y
CONFIG_AF_RXRPC_DEBUG=y
CONFIG_RXKAD=y
CONFIG_AF_KCM=y
CONFIG_STREAM_PARSER=y
CONFIG_MCTP=y
CONFIG_MCTP_TEST=y
CONFIG_MCTP_FLOWS=y
CONFIG_FIB_RULES=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_EXT=y
CONFIG_WEXT_CORE=y
CONFIG_WEXT_PROC=y
CONFIG_WEXT_SPY=y
CONFIG_WEXT_PRIV=y
CONFIG_CFG80211=y
CONFIG_NL80211_TESTMODE=y
CONFIG_CFG80211_DEVELOPER_WARNINGS=y
CONFIG_CFG80211_CERTIFICATION_ONUS=y
CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y
CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y
CONFIG_CFG80211_EXTRA_REGDB_KEYDIR=""
CONFIG_CFG80211_REG_CELLULAR_HINTS=y
CONFIG_CFG80211_REG_RELAX_NO_IR=y
CONFIG_CFG80211_DEFAULT_PS=y
CONFIG_CFG80211_DEBUGFS=y
CONFIG_CFG80211_CRDA_SUPPORT=y
CONFIG_CFG80211_WEXT=y
CONFIG_CFG80211_WEXT_EXPORT=y
CONFIG_LIB80211=y
CONFIG_LIB80211_CRYPT_WEP=y
CONFIG_LIB80211_CRYPT_CCMP=y
CONFIG_LIB80211_CRYPT_TKIP=y
CONFIG_LIB80211_DEBUG=y
CONFIG_MAC80211=y
CONFIG_MAC80211_HAS_RC=y
CONFIG_MAC80211_RC_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
CONFIG_MAC80211_MESH=y
CONFIG_MAC80211_LEDS=y
CONFIG_MAC80211_DEBUGFS=y
CONFIG_MAC80211_MESSAGE_TRACING=y
CONFIG_MAC80211_DEBUG_MENU=y
CONFIG_MAC80211_NOINLINE=y
CONFIG_MAC80211_VERBOSE_DEBUG=y
CONFIG_MAC80211_MLME_DEBUG=y
CONFIG_MAC80211_STA_DEBUG=y
CONFIG_MAC80211_HT_DEBUG=y
CONFIG_MAC80211_OCB_DEBUG=y
CONFIG_MAC80211_IBSS_DEBUG=y
CONFIG_MAC80211_PS_DEBUG=y
CONFIG_MAC80211_MPL_DEBUG=y
CONFIG_MAC80211_MPATH_DEBUG=y
CONFIG_MAC80211_MHWMP_DEBUG=y
CONFIG_MAC80211_MESH_SYNC_DEBUG=y
CONFIG_MAC80211_MESH_CSA_DEBUG=y
CONFIG_MAC80211_MESH_PS_DEBUG=y
CONFIG_MAC80211_TDLS_DEBUG=y
CONFIG_MAC80211_DEBUG_COUNTERS=y
CONFIG_MAC80211_STA_HASH_MAX_SIZE=0
CONFIG_RFKILL=y
CONFIG_RFKILL_LEDS=y
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL_GPIO=y
CONFIG_NET_9P=y
CONFIG_NET_9P_FD=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_NET_9P_RDMA=y
CONFIG_NET_9P_DEBUG=y
CONFIG_CAIF=y
CONFIG_CAIF_DEBUG=y
CONFIG_CAIF_NETDEV=y
CONFIG_CAIF_USB=y
CONFIG_CEPH_LIB=y
CONFIG_CEPH_LIB_PRETTYDEBUG=y
CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y
CONFIG_NFC=y
CONFIG_NFC_DIGITAL=y
CONFIG_NFC_NCI=y
CONFIG_NFC_NCI_SPI=y
CONFIG_NFC_NCI_UART=y
CONFIG_NFC_HCI=y
CONFIG_NFC_SHDLC=y

#
# Near Field Communication (NFC) devices
#
CONFIG_NFC_TRF7970A=y
CONFIG_NFC_SIM=y
CONFIG_NFC_PORT100=y
CONFIG_NFC_VIRTUAL_NCI=y
CONFIG_NFC_FDP=y
CONFIG_NFC_FDP_I2C=y
CONFIG_NFC_PN544=y
CONFIG_NFC_PN544_I2C=y
CONFIG_NFC_PN533=y
CONFIG_NFC_PN533_USB=y
CONFIG_NFC_PN533_I2C=y
CONFIG_NFC_PN532_UART=y
CONFIG_NFC_MICROREAD=y
CONFIG_NFC_MICROREAD_I2C=y
CONFIG_NFC_MRVL=y
CONFIG_NFC_MRVL_USB=y
CONFIG_NFC_MRVL_UART=y
CONFIG_NFC_MRVL_I2C=y
CONFIG_NFC_MRVL_SPI=y
CONFIG_NFC_ST21NFCA=y
CONFIG_NFC_ST21NFCA_I2C=y
CONFIG_NFC_ST_NCI=y
CONFIG_NFC_ST_NCI_I2C=y
CONFIG_NFC_ST_NCI_SPI=y
CONFIG_NFC_NXP_NCI=y
CONFIG_NFC_NXP_NCI_I2C=y
CONFIG_NFC_S3FWRN5=y
CONFIG_NFC_S3FWRN5_I2C=y
CONFIG_NFC_S3FWRN82_UART=y
CONFIG_NFC_ST95HF=y
# end of Near Field Communication (NFC) devices

CONFIG_PSAMPLE=y
CONFIG_NET_IFE=y
CONFIG_LWTUNNEL=y
CONFIG_LWTUNNEL_BPF=y
CONFIG_DST_CACHE=y
CONFIG_GRO_CELLS=y
CONFIG_SOCK_VALIDATE_XMIT=y
CONFIG_NET_SELFTESTS=y
CONFIG_NET_SOCK_MSG=y
CONFIG_NET_DEVLINK=y
CONFIG_PAGE_POOL=y
CONFIG_PAGE_POOL_STATS=y
CONFIG_FAILOVER=y
CONFIG_ETHTOOL_NETLINK=y
CONFIG_NETDEV_ADDR_LIST_TEST=y

#
# Device Drivers
#
CONFIG_PCCARD=y
CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y

#
# PC-card bridges
#

#
# Generic Driver Options
#
CONFIG_AUXILIARY_BUS=y
CONFIG_UEVENT_HELPER=y
CONFIG_UEVENT_HELPER_PATH=""
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y

#
# Firmware loader
#
CONFIG_FW_LOADER=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_EXTRA_FIRMWARE=""
CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
CONFIG_FW_LOADER_COMPRESS=y
CONFIG_FW_LOADER_COMPRESS_XZ=y
CONFIG_FW_LOADER_COMPRESS_ZSTD=y
CONFIG_FW_UPLOAD=y
# end of Firmware loader

CONFIG_WANT_DEV_COREDUMP=y
CONFIG_ALLOW_DEV_COREDUMP=y
CONFIG_DEV_COREDUMP=y
CONFIG_DEBUG_DRIVER=y
CONFIG_DEBUG_DEVRES=y
CONFIG_DEBUG_TEST_DRIVER_REMOVE=y
CONFIG_PM_QOS_KUNIT_TEST=y
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
CONFIG_DRIVER_PE_KUNIT_TEST=y
CONFIG_GENERIC_CPU_DEVICES=y
CONFIG_SOC_BUS=y
CONFIG_REGMAP=y
CONFIG_REGMAP_AC97=y
CONFIG_REGMAP_I2C=y
CONFIG_REGMAP_SLIMBUS=y
CONFIG_REGMAP_SPI=y
CONFIG_REGMAP_SPMI=y
CONFIG_REGMAP_W1=y
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
CONFIG_REGMAP_SOUNDWIRE=y
CONFIG_REGMAP_SOUNDWIRE_MBQ=y
CONFIG_REGMAP_SCCB=y
CONFIG_REGMAP_I3C=y
CONFIG_REGMAP_SPI_AVMM=y
CONFIG_DMA_SHARED_BUFFER=y
CONFIG_DMA_FENCE_TRACE=y
# end of Generic Driver Options

#
# Bus devices
#
CONFIG_ARM_INTEGRATOR_LM=y
CONFIG_BT1_APB=y
CONFIG_BT1_AXI=y
CONFIG_MOXTET=y
CONFIG_HISILICON_LPC=y
CONFIG_INTEL_IXP4XX_EB=y
CONFIG_QCOM_EBI2=y
CONFIG_MHI_BUS=y
CONFIG_MHI_BUS_DEBUG=y
CONFIG_MHI_BUS_EP=y
# end of Bus devices

CONFIG_CONNECTOR=y
CONFIG_PROC_EVENTS=y

#
# Firmware Drivers
#

#
# ARM System Control and Management Interface Protocol
#
CONFIG_ARM_SCMI_PROTOCOL=y
CONFIG_ARM_SCMI_HAVE_TRANSPORT=y
CONFIG_ARM_SCMI_HAVE_SHMEM=y
CONFIG_ARM_SCMI_HAVE_MSG=y
CONFIG_ARM_SCMI_TRANSPORT_MAILBOX=y
CONFIG_ARM_SCMI_TRANSPORT_VIRTIO=y
CONFIG_ARM_SCMI_TRANSPORT_VIRTIO_VERSION1_COMPLIANCE=y
CONFIG_ARM_SCMI_TRANSPORT_VIRTIO_ATOMIC_ENABLE=y
CONFIG_ARM_SCMI_POWER_DOMAIN=y
CONFIG_ARM_SCMI_POWER_CONTROL=y
# end of ARM System Control and Management Interface Protocol

CONFIG_ARM_SCPI_PROTOCOL=y
CONFIG_ARM_SCPI_POWER_DOMAIN=y
CONFIG_FIRMWARE_MEMMAP=y
CONFIG_MTK_ADSP_IPC=y
CONFIG_QCOM_SCM=y
CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT=y
CONFIG_TURRIS_MOX_RWTM=y
CONFIG_BCM47XX_NVRAM=y
CONFIG_BCM47XX_SPROM=y
CONFIG_TEE_BNXT_FW=y
CONFIG_CS_DSP=y
CONFIG_GOOGLE_FIRMWARE=y
CONFIG_GOOGLE_COREBOOT_TABLE=y
CONFIG_GOOGLE_MEMCONSOLE=y
CONFIG_GOOGLE_MEMCONSOLE_COREBOOT=y
CONFIG_GOOGLE_VPD=y
CONFIG_IMX_DSP=y
CONFIG_IMX_SCU=y
CONFIG_IMX_SCU_PD=y

#
# Tegra firmware driver
#
# end of Tegra firmware driver
# end of Firmware Drivers

CONFIG_GNSS=y
CONFIG_GNSS_SERIAL=y
CONFIG_GNSS_MTK_SERIAL=y
CONFIG_GNSS_SIRF_SERIAL=y
CONFIG_GNSS_UBX_SERIAL=y
CONFIG_GNSS_USB=y
CONFIG_MTD=y
CONFIG_MTD_TESTS=m

#
# Partition parsers
#
CONFIG_MTD_AR7_PARTS=y
CONFIG_MTD_BCM63XX_PARTS=y
CONFIG_MTD_BRCM_U_BOOT=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_OF_PARTS=y
CONFIG_MTD_OF_PARTS_BCM4908=y
CONFIG_MTD_OF_PARTS_LINKSYS_NS=y
CONFIG_MTD_PARSER_IMAGETAG=y
CONFIG_MTD_PARSER_TRX=y
CONFIG_MTD_SHARPSL_PARTS=y
CONFIG_MTD_REDBOOT_PARTS=y
CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
CONFIG_MTD_REDBOOT_PARTS_READONLY=y
CONFIG_MTD_QCOMSMEM_PARTS=y
# end of Partition parsers

#
# User Modules And Translation Layers
#
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y

#
# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK.
#
CONFIG_FTL=y
CONFIG_NFTL=y
CONFIG_NFTL_RW=y
CONFIG_INFTL=y
CONFIG_RFD_FTL=y
CONFIG_SSFDC=y
CONFIG_SM_FTL=y
CONFIG_MTD_OOPS=y
CONFIG_MTD_PSTORE=y
CONFIG_MTD_PARTITIONED_MASTER=y

#
# RAM/ROM/Flash chip drivers
#
CONFIG_MTD_CFI=y
CONFIG_MTD_JEDECPROBE=y
CONFIG_MTD_GEN_PROBE=y
CONFIG_MTD_CFI_ADV_OPTIONS=y
CONFIG_MTD_CFI_NOSWAP=y
# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
CONFIG_MTD_CFI_GEOMETRY=y
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
CONFIG_MTD_MAP_BANK_WIDTH_8=y
CONFIG_MTD_MAP_BANK_WIDTH_16=y
CONFIG_MTD_MAP_BANK_WIDTH_32=y
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
CONFIG_MTD_CFI_I4=y
CONFIG_MTD_CFI_I8=y
CONFIG_MTD_OTP=y
CONFIG_MTD_CFI_INTELEXT=y
CONFIG_MTD_CFI_AMDSTD=y
CONFIG_MTD_CFI_STAA=y
CONFIG_MTD_CFI_UTIL=y
CONFIG_MTD_RAM=y
CONFIG_MTD_ROM=y
CONFIG_MTD_ABSENT=y
# end of RAM/ROM/Flash chip drivers

#
# Mapping drivers for chip access
#
CONFIG_MTD_COMPLEX_MAPPINGS=y
CONFIG_MTD_PHYSMAP=y
CONFIG_MTD_PHYSMAP_COMPAT=y
CONFIG_MTD_PHYSMAP_START=0x8000000
CONFIG_MTD_PHYSMAP_LEN=0
CONFIG_MTD_PHYSMAP_BANKWIDTH=2
CONFIG_MTD_PHYSMAP_OF=y
CONFIG_MTD_PHYSMAP_BT1_ROM=y
CONFIG_MTD_PHYSMAP_VERSATILE=y
CONFIG_MTD_PHYSMAP_GEMINI=y
CONFIG_MTD_PHYSMAP_GPIO_ADDR=y
CONFIG_MTD_SC520CDP=y
CONFIG_MTD_NETSC520=y
CONFIG_MTD_TS5500=y
CONFIG_MTD_PCMCIA=y
CONFIG_MTD_PCMCIA_ANONYMOUS=y
CONFIG_MTD_PLATRAM=y
# end of Mapping drivers for chip access

#
# Self-contained MTD device drivers
#
CONFIG_MTD_DATAFLASH=y
CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y
CONFIG_MTD_DATAFLASH_OTP=y
CONFIG_MTD_MCHP23K256=y
CONFIG_MTD_MCHP48L640=y
CONFIG_MTD_SPEAR_SMI=y
CONFIG_MTD_SST25L=y
CONFIG_MTD_SLRAM=y
CONFIG_MTD_PHRAM=y
CONFIG_MTD_MTDRAM=y
CONFIG_MTDRAM_TOTAL_SIZE=4096
CONFIG_MTDRAM_ERASE_SIZE=128
CONFIG_MTD_BLOCK2MTD=y

#
# Disk-On-Chip Device Drivers
#
CONFIG_MTD_DOCG3=y
CONFIG_BCH_CONST_M=14
CONFIG_BCH_CONST_T=4
# end of Self-contained MTD device drivers

#
# NAND
#
CONFIG_MTD_NAND_CORE=y
CONFIG_MTD_ONENAND=y
CONFIG_MTD_ONENAND_VERIFY_WRITE=y
CONFIG_MTD_ONENAND_GENERIC=y
CONFIG_MTD_ONENAND_SAMSUNG=y
CONFIG_MTD_ONENAND_OTP=y
CONFIG_MTD_ONENAND_2X_PROGRAM=y
CONFIG_MTD_RAW_NAND=y

#
# Raw/parallel NAND flash controllers
#
CONFIG_MTD_NAND_DENALI=y
CONFIG_MTD_NAND_DENALI_DT=y
CONFIG_MTD_NAND_AMS_DELTA=y
CONFIG_MTD_NAND_OMAP2=y
CONFIG_MTD_NAND_OMAP_BCH=y
CONFIG_MTD_NAND_OMAP_BCH_BUILD=y
CONFIG_MTD_NAND_SHARPSL=y
CONFIG_MTD_NAND_ATMEL=y
CONFIG_MTD_NAND_MARVELL=y
CONFIG_MTD_NAND_SLC_LPC32XX=y
CONFIG_MTD_NAND_MLC_LPC32XX=y
CONFIG_MTD_NAND_BRCMNAND=y
CONFIG_MTD_NAND_BRCMNAND_BCM63XX=y
CONFIG_MTD_NAND_BRCMNAND_BCMA=y
CONFIG_MTD_NAND_BRCMNAND_BCMBCA=y
CONFIG_MTD_NAND_BRCMNAND_BRCMSTB=y
CONFIG_MTD_NAND_BRCMNAND_IPROC=y
CONFIG_MTD_NAND_BCM47XXNFLASH=y
CONFIG_MTD_NAND_OXNAS=y
CONFIG_MTD_NAND_GPMI_NAND=y
CONFIG_MTD_NAND_FSL_IFC=y
CONFIG_MTD_NAND_VF610_NFC=y
CONFIG_MTD_NAND_MXC=y
CONFIG_MTD_NAND_SH_FLCTL=y
CONFIG_MTD_NAND_DAVINCI=y
CONFIG_MTD_NAND_TXX9NDFMC=y
CONFIG_MTD_NAND_JZ4780=y
CONFIG_MTD_NAND_INGENIC_ECC=y
CONFIG_MTD_NAND_JZ4740_ECC=y
CONFIG_MTD_NAND_JZ4725B_BCH=y
CONFIG_MTD_NAND_JZ4780_BCH=y
CONFIG_MTD_NAND_FSMC=y
CONFIG_MTD_NAND_SUNXI=y
CONFIG_MTD_NAND_HISI504=y
CONFIG_MTD_NAND_QCOM=y
CONFIG_MTD_NAND_MTK=y
CONFIG_MTD_NAND_MXIC=y
CONFIG_MTD_NAND_TEGRA=y
CONFIG_MTD_NAND_STM32_FMC2=y
CONFIG_MTD_NAND_MESON=y
CONFIG_MTD_NAND_GPIO=y
CONFIG_MTD_NAND_PLATFORM=y
CONFIG_MTD_NAND_CADENCE=y
CONFIG_MTD_NAND_ARASAN=y
CONFIG_MTD_NAND_INTEL_LGM=y
CONFIG_MTD_NAND_RENESAS=y

#
# Misc
#
CONFIG_MTD_NAND_NANDSIM=y
CONFIG_MTD_NAND_DISKONCHIP=y
CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED=y
CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
CONFIG_MTD_NAND_DISKONCHIP_PROBE_HIGH=y
CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y
CONFIG_MTD_SPI_NAND=y

#
# ECC engine support
#
CONFIG_MTD_NAND_ECC=y
CONFIG_MTD_NAND_ECC_SW_HAMMING=y
CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC=y
CONFIG_MTD_NAND_ECC_SW_BCH=y
CONFIG_MTD_NAND_ECC_MXIC=y
CONFIG_MTD_NAND_ECC_MEDIATEK=y
# end of ECC engine support
# end of NAND

#
# LPDDR & LPDDR2 PCM memory drivers
#
CONFIG_MTD_LPDDR=y
CONFIG_MTD_QINFO_PROBE=y
# end of LPDDR & LPDDR2 PCM memory drivers

CONFIG_MTD_SPI_NOR=y
CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
# CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set
CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
# CONFIG_MTD_SPI_NOR_SWP_KEEP is not set
CONFIG_SPI_HISI_SFC=y
CONFIG_SPI_NXP_SPIFI=y
CONFIG_MTD_UBI=y
CONFIG_MTD_UBI_WL_THRESHOLD=4096
CONFIG_MTD_UBI_BEB_LIMIT=20
CONFIG_MTD_UBI_FASTMAP=y
CONFIG_MTD_UBI_GLUEBI=y
CONFIG_MTD_UBI_BLOCK=y
CONFIG_MTD_HYPERBUS=y
CONFIG_HBMC_AM654=y
CONFIG_DTC=y
CONFIG_OF=y
CONFIG_OF_UNITTEST=y
CONFIG_OF_ALL_DTBS=y
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_OF_KOBJ=y
CONFIG_OF_DYNAMIC=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_IRQ=y
CONFIG_OF_RESERVED_MEM=y
CONFIG_OF_RESOLVE=y
CONFIG_OF_OVERLAY=y
CONFIG_PARPORT=y
CONFIG_PARPORT_AX88796=y
CONFIG_PARPORT_1284=y
CONFIG_PARPORT_NOT_PC=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_NULL_BLK=y
CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION=y
CONFIG_CDROM=y
CONFIG_ZRAM=y
CONFIG_ZRAM_DEF_COMP_LZORLE=y
# CONFIG_ZRAM_DEF_COMP_ZSTD is not set
# CONFIG_ZRAM_DEF_COMP_LZ4 is not set
# CONFIG_ZRAM_DEF_COMP_LZO is not set
# CONFIG_ZRAM_DEF_COMP_LZ4HC is not set
# CONFIG_ZRAM_DEF_COMP_842 is not set
CONFIG_ZRAM_DEF_COMP="lzo-rle"
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZRAM_MEMORY_TRACKING=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
CONFIG_BLK_DEV_DRBD=y
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_BLK_DEV_NBD=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
# CONFIG_CDROM_PKTCDVD is not set
CONFIG_ATA_OVER_ETH=y
CONFIG_VIRTIO_BLK=y
CONFIG_BLK_DEV_RBD=y
CONFIG_BLK_DEV_UBLK=y
CONFIG_BLK_DEV_RNBD=y
CONFIG_BLK_DEV_RNBD_CLIENT=y
CONFIG_BLK_DEV_RNBD_SERVER=y

#
# NVME Support
#
CONFIG_NVME_COMMON=y
CONFIG_NVME_CORE=y
CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_VERBOSE_ERRORS=y
CONFIG_NVME_HWMON=y
CONFIG_NVME_FABRICS=y
CONFIG_NVME_RDMA=y
CONFIG_NVME_FC=y
CONFIG_NVME_TCP=y
CONFIG_NVME_AUTH=y
CONFIG_NVME_APPLE=y
CONFIG_NVME_TARGET=y
CONFIG_NVME_TARGET_PASSTHRU=y
CONFIG_NVME_TARGET_LOOP=y
CONFIG_NVME_TARGET_RDMA=y
CONFIG_NVME_TARGET_FC=y
CONFIG_NVME_TARGET_FCLOOP=y
CONFIG_NVME_TARGET_TCP=y
CONFIG_NVME_TARGET_AUTH=y
# end of NVME Support

#
# Misc devices
#
CONFIG_SENSORS_LIS3LV02D=y
CONFIG_AD525X_DPOT=y
CONFIG_AD525X_DPOT_I2C=y
CONFIG_AD525X_DPOT_SPI=y
CONFIG_DUMMY_IRQ=y
CONFIG_ICS932S401=y
CONFIG_ATMEL_SSC=y
CONFIG_ENCLOSURE_SERVICES=y
CONFIG_GEHC_ACHC=y
CONFIG_HI6421V600_IRQ=y
CONFIG_QCOM_COINCELL=y
CONFIG_QCOM_FASTRPC=y
CONFIG_APDS9802ALS=y
CONFIG_ISL29003=y
CONFIG_ISL29020=y
CONFIG_SENSORS_TSL2550=y
CONFIG_SENSORS_BH1770=y
CONFIG_SENSORS_APDS990X=y
CONFIG_HMC6352=y
CONFIG_DS1682=y
CONFIG_LATTICE_ECP3_CONFIG=y
CONFIG_SRAM=y
CONFIG_XILINX_SDFEC=y
CONFIG_MISC_RTSX=y
CONFIG_HISI_HIKEY_USB=y
CONFIG_OPEN_DICE=y
CONFIG_VCPU_STALL_DETECTOR=y
CONFIG_C2PORT=y

#
# EEPROM support
#
CONFIG_EEPROM_AT24=y
CONFIG_EEPROM_AT25=y
CONFIG_EEPROM_LEGACY=y
CONFIG_EEPROM_MAX6875=y
CONFIG_EEPROM_93CX6=y
CONFIG_EEPROM_93XX46=y
CONFIG_EEPROM_IDT_89HPESX=y
CONFIG_EEPROM_EE1004=y
# end of EEPROM support

#
# Texas Instruments shared transport line discipline
#
CONFIG_TI_ST=y
# end of Texas Instruments shared transport line discipline

CONFIG_SENSORS_LIS3_SPI=y
CONFIG_SENSORS_LIS3_I2C=y
CONFIG_ALTERA_STAPL=y
CONFIG_ECHO=y
CONFIG_MISC_RTSX_USB=y
CONFIG_UACCE=y
CONFIG_PVPANIC=y
CONFIG_PVPANIC_MMIO=y
# end of Misc devices

#
# SCSI device support
#
CONFIG_SCSI_MOD=y
CONFIG_RAID_ATTRS=y
CONFIG_SCSI_COMMON=y
CONFIG_SCSI=y
CONFIG_SCSI_DMA=y
CONFIG_SCSI_NETLINK=y
CONFIG_SCSI_PROC_FS=y

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=y
CONFIG_BLK_DEV_SR=y
CONFIG_CHR_DEV_SG=y
CONFIG_BLK_DEV_BSG=y
CONFIG_CHR_DEV_SCH=y
CONFIG_SCSI_ENCLOSURE=y
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SCAN_ASYNC=y

#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=y
CONFIG_SCSI_FC_ATTRS=y
CONFIG_SCSI_ISCSI_ATTRS=y
CONFIG_SCSI_SAS_ATTRS=y
CONFIG_SCSI_SAS_LIBSAS=y
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SRP_ATTRS=y
# end of SCSI Transports

CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=y
CONFIG_ISCSI_BOOT_SYSFS=y
CONFIG_SCSI_HISI_SAS=y
CONFIG_SCSI_HISI_SAS_DEBUGFS_DEFAULT_ENABLE=y
CONFIG_LIBFC=y
CONFIG_LIBFCOE=y
CONFIG_SCSI_FDOMAIN=m
CONFIG_SCSI_DEBUG=y
CONFIG_SCSI_VIRTIO=y
CONFIG_SCSI_LOWLEVEL_PCMCIA=y
CONFIG_PCMCIA_AHA152X=m
CONFIG_PCMCIA_FDOMAIN=m
CONFIG_PCMCIA_NINJA_SCSI=m
CONFIG_PCMCIA_QLOGIC=m
CONFIG_PCMCIA_SYM53C500=m
CONFIG_SCSI_DH=y
CONFIG_SCSI_DH_RDAC=y
CONFIG_SCSI_DH_HP_SW=y
CONFIG_SCSI_DH_EMC=y
CONFIG_SCSI_DH_ALUA=y
# end of SCSI device support

CONFIG_ATA=y
CONFIG_SATA_HOST=y
CONFIG_PATA_TIMINGS=y
CONFIG_ATA_VERBOSE_ERROR=y
CONFIG_ATA_FORCE=y
CONFIG_SATA_PMP=y

#
# Controllers with non-SFF native interface
#
CONFIG_SATA_AHCI_PLATFORM=y
CONFIG_AHCI_BRCM=y
CONFIG_AHCI_DA850=y
CONFIG_AHCI_DM816=y
CONFIG_AHCI_DWC=y
CONFIG_AHCI_ST=y
CONFIG_AHCI_IMX=y
CONFIG_AHCI_CEVA=y
CONFIG_AHCI_MTK=y
CONFIG_AHCI_MVEBU=y
CONFIG_AHCI_SUNXI=y
CONFIG_AHCI_TEGRA=y
CONFIG_AHCI_XGENE=y
CONFIG_AHCI_QORIQ=y
CONFIG_SATA_FSL=y
CONFIG_SATA_GEMINI=y
CONFIG_SATA_AHCI_SEATTLE=y
CONFIG_ATA_SFF=y

#
# SFF controllers with custom DMA interface
#
CONFIG_ATA_BMDMA=y

#
# SATA SFF controllers with BMDMA
#
CONFIG_SATA_DWC=y
CONFIG_SATA_DWC_OLD_DMA=y
CONFIG_SATA_HIGHBANK=y
CONFIG_SATA_MV=y
CONFIG_SATA_RCAR=y

#
# PATA SFF controllers with BMDMA
#
CONFIG_PATA_ARASAN_CF=y
# CONFIG_PATA_BK3710 is not set
CONFIG_PATA_FTIDE010=y
CONFIG_PATA_IMX=y
CONFIG_PATA_PXA=y

#
# PIO-only SFF controllers
#
CONFIG_PATA_IXP4XX_CF=y
CONFIG_PATA_PCMCIA=y
CONFIG_PATA_PLATFORM=y
CONFIG_PATA_OF_PLATFORM=y
CONFIG_PATA_SAMSUNG_CF=y

#
# Generic fallback / legacy drivers
#
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD_AUTODETECT=y
CONFIG_MD_LINEAR=y
CONFIG_MD_RAID0=y
CONFIG_MD_RAID1=y
CONFIG_MD_RAID10=y
CONFIG_MD_RAID456=y
CONFIG_MD_MULTIPATH=y
CONFIG_MD_FAULTY=y
CONFIG_MD_CLUSTER=y
CONFIG_BCACHE=y
CONFIG_BCACHE_DEBUG=y
CONFIG_BCACHE_CLOSURES_DEBUG=y
CONFIG_BCACHE_ASYNC_REGISTRATION=y
CONFIG_BLK_DEV_DM_BUILTIN=y
CONFIG_BLK_DEV_DM=y
CONFIG_DM_DEBUG=y
CONFIG_DM_BUFIO=y
CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING=y
CONFIG_DM_BIO_PRISON=y
CONFIG_DM_PERSISTENT_DATA=y
CONFIG_DM_UNSTRIPED=y
CONFIG_DM_CRYPT=y
CONFIG_DM_SNAPSHOT=y
CONFIG_DM_THIN_PROVISIONING=y
CONFIG_DM_CACHE=y
CONFIG_DM_CACHE_SMQ=y
CONFIG_DM_WRITECACHE=y
CONFIG_DM_EBS=y
CONFIG_DM_ERA=y
CONFIG_DM_CLONE=y
CONFIG_DM_MIRROR=y
CONFIG_DM_LOG_USERSPACE=y
CONFIG_DM_RAID=y
CONFIG_DM_ZERO=y
CONFIG_DM_MULTIPATH=y
CONFIG_DM_MULTIPATH_QL=y
CONFIG_DM_MULTIPATH_ST=y
CONFIG_DM_MULTIPATH_HST=y
CONFIG_DM_MULTIPATH_IOA=y
CONFIG_DM_DELAY=y
CONFIG_DM_DUST=y
CONFIG_DM_INIT=y
CONFIG_DM_UEVENT=y
CONFIG_DM_FLAKEY=y
CONFIG_DM_VERITY=y
CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG=y
CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING=y
CONFIG_DM_VERITY_FEC=y
CONFIG_DM_SWITCH=y
CONFIG_DM_LOG_WRITES=y
CONFIG_DM_INTEGRITY=y
CONFIG_DM_ZONED=y
CONFIG_DM_AUDIT=y
CONFIG_TARGET_CORE=y
CONFIG_TCM_IBLOCK=y
CONFIG_TCM_FILEIO=y
CONFIG_TCM_PSCSI=y
CONFIG_TCM_USER2=y
CONFIG_LOOPBACK_TARGET=y
CONFIG_TCM_FC=y
CONFIG_ISCSI_TARGET=y
CONFIG_SBP_TARGET=y

#
# IEEE 1394 (FireWire) support
#
CONFIG_FIREWIRE=y
CONFIG_FIREWIRE_SBP2=y
CONFIG_FIREWIRE_NET=y
# end of IEEE 1394 (FireWire) support

CONFIG_NETDEVICES=y
CONFIG_MII=y
CONFIG_NET_CORE=y
CONFIG_BONDING=y
CONFIG_DUMMY=y
CONFIG_WIREGUARD=y
CONFIG_WIREGUARD_DEBUG=y
CONFIG_EQUALIZER=y
CONFIG_IFB=y
CONFIG_NET_TEAM=y
CONFIG_NET_TEAM_MODE_BROADCAST=y
CONFIG_NET_TEAM_MODE_ROUNDROBIN=y
CONFIG_NET_TEAM_MODE_RANDOM=y
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=y
CONFIG_NET_TEAM_MODE_LOADBALANCE=y
CONFIG_MACVLAN=y
CONFIG_MACVTAP=y
CONFIG_IPVLAN_L3S=y
CONFIG_IPVLAN=y
CONFIG_IPVTAP=y
CONFIG_VXLAN=y
CONFIG_GENEVE=y
CONFIG_BAREUDP=y
CONFIG_GTP=y
CONFIG_AMT=y
CONFIG_MACSEC=y
CONFIG_NETCONSOLE=y
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_NET_POLL_CONTROLLER=y
CONFIG_TUN=y
CONFIG_TAP=y
CONFIG_TUN_VNET_CROSS_LE=y
CONFIG_VETH=y
CONFIG_VIRTIO_NET=y
CONFIG_NLMON=y
CONFIG_NET_VRF=y
CONFIG_VSOCKMON=y
CONFIG_MHI_NET=y
CONFIG_ARCNET=y
CONFIG_ARCNET_1201=y
CONFIG_ARCNET_1051=y
CONFIG_ARCNET_RAW=y
CONFIG_ARCNET_CAP=y
CONFIG_ARCNET_COM90xx=y
CONFIG_ARCNET_COM90xxIO=y
CONFIG_ARCNET_RIM_I=y
CONFIG_ARCNET_COM20020=y
CONFIG_ARCNET_COM20020_CS=y
CONFIG_ATM_DRIVERS=y
CONFIG_ATM_DUMMY=y
CONFIG_ATM_TCP=y
CONFIG_CAIF_DRIVERS=y
CONFIG_CAIF_TTY=y
CONFIG_CAIF_VIRTIO=y

#
# Distributed Switch Architecture drivers
#
CONFIG_B53=y
CONFIG_B53_SPI_DRIVER=y
CONFIG_B53_MDIO_DRIVER=y
CONFIG_B53_MMAP_DRIVER=y
CONFIG_B53_SRAB_DRIVER=y
CONFIG_B53_SERDES=y
CONFIG_NET_DSA_BCM_SF2=y
CONFIG_NET_DSA_LOOP=y
CONFIG_NET_DSA_HIRSCHMANN_HELLCREEK=y
CONFIG_NET_DSA_LANTIQ_GSWIP=y
CONFIG_NET_DSA_MT7530=y
CONFIG_NET_DSA_MV88E6060=y
CONFIG_NET_DSA_MICROCHIP_KSZ_COMMON=y
CONFIG_NET_DSA_MICROCHIP_KSZ9477_I2C=y
CONFIG_NET_DSA_MICROCHIP_KSZ_SPI=y
CONFIG_NET_DSA_MICROCHIP_KSZ8863_SMI=y
CONFIG_NET_DSA_MV88E6XXX=y
CONFIG_NET_DSA_MV88E6XXX_PTP=y
CONFIG_NET_DSA_MSCC_SEVILLE=y
CONFIG_NET_DSA_AR9331=y
CONFIG_NET_DSA_QCA8K=y
CONFIG_NET_DSA_SJA1105=y
CONFIG_NET_DSA_SJA1105_PTP=y
CONFIG_NET_DSA_SJA1105_TAS=y
CONFIG_NET_DSA_SJA1105_VL=y
CONFIG_NET_DSA_XRS700X=y
CONFIG_NET_DSA_XRS700X_I2C=y
CONFIG_NET_DSA_XRS700X_MDIO=y
CONFIG_NET_DSA_REALTEK=y
CONFIG_NET_DSA_REALTEK_MDIO=y
CONFIG_NET_DSA_REALTEK_SMI=y
CONFIG_NET_DSA_REALTEK_RTL8365MB=y
CONFIG_NET_DSA_REALTEK_RTL8366RB=y
CONFIG_NET_DSA_SMSC_LAN9303=y
CONFIG_NET_DSA_SMSC_LAN9303_I2C=y
CONFIG_NET_DSA_SMSC_LAN9303_MDIO=y
CONFIG_NET_DSA_VITESSE_VSC73XX=y
CONFIG_NET_DSA_VITESSE_VSC73XX_SPI=y
CONFIG_NET_DSA_VITESSE_VSC73XX_PLATFORM=y
# end of Distributed Switch Architecture drivers

CONFIG_ETHERNET=y
CONFIG_MDIO=y
CONFIG_NET_VENDOR_3COM=y
CONFIG_PCMCIA_3C574=y
CONFIG_PCMCIA_3C589=y
CONFIG_NET_VENDOR_ACTIONS=y
CONFIG_OWL_EMAC=y
CONFIG_NET_VENDOR_ALACRITECH=y
CONFIG_ALTERA_TSE=y
CONFIG_NET_VENDOR_AMAZON=y
CONFIG_NET_VENDOR_AMD=y
CONFIG_PCMCIA_NMCLAN=y
CONFIG_AMD_XGBE=y
CONFIG_AMD_XGBE_DCB=y
CONFIG_NET_XGENE=y
CONFIG_NET_XGENE_V2=y
CONFIG_NET_VENDOR_AQUANTIA=y
CONFIG_NET_VENDOR_ARC=y
CONFIG_ARC_EMAC_CORE=y
CONFIG_ARC_EMAC=y
CONFIG_EMAC_ROCKCHIP=y
CONFIG_NET_VENDOR_ASIX=y
CONFIG_SPI_AX88796C=y
CONFIG_SPI_AX88796C_COMPRESSION=y
CONFIG_NET_VENDOR_BROADCOM=y
CONFIG_B44=y
CONFIG_BCM4908_ENET=y
CONFIG_BCMGENET=y
CONFIG_BGMAC=y
CONFIG_BGMAC_BCMA=y
CONFIG_BGMAC_PLATFORM=y
CONFIG_SYSTEMPORT=y
CONFIG_NET_VENDOR_CADENCE=y
CONFIG_MACB=y
CONFIG_MACB_USE_HWSTAMP=y
CONFIG_NET_CALXEDA_XGMAC=y
CONFIG_NET_VENDOR_CAVIUM=y
CONFIG_NET_VENDOR_CIRRUS=y
CONFIG_CS89x0=y
CONFIG_CS89x0_PLATFORM=y
CONFIG_EP93XX_ETH=y
CONFIG_NET_VENDOR_CORTINA=y
CONFIG_GEMINI_ETHERNET=y
CONFIG_NET_VENDOR_DAVICOM=y
CONFIG_DM9000=y
CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL=y
CONFIG_DM9051=y
CONFIG_DNET=y
CONFIG_NET_VENDOR_ENGLEDER=y
CONFIG_TSNEP=y
CONFIG_TSNEP_SELFTESTS=y
CONFIG_NET_VENDOR_EZCHIP=y
CONFIG_EZCHIP_NPS_MANAGEMENT_ENET=y
CONFIG_NET_VENDOR_FARADAY=y
CONFIG_FTMAC100=y
CONFIG_FTGMAC100=y
CONFIG_NET_VENDOR_FREESCALE=y
CONFIG_FEC=y
CONFIG_FSL_FMAN=y
CONFIG_FSL_PQ_MDIO=y
CONFIG_FSL_XGMAC_MDIO=y
CONFIG_GIANFAR=y
CONFIG_FSL_DPAA2_SWITCH=y
CONFIG_FSL_ENETC_IERB=y
CONFIG_NET_VENDOR_FUJITSU=y
CONFIG_PCMCIA_FMVJ18X=y
CONFIG_NET_VENDOR_FUNGIBLE=y
CONFIG_NET_VENDOR_GOOGLE=y
CONFIG_NET_VENDOR_HISILICON=y
CONFIG_HIX5HD2_GMAC=y
CONFIG_HISI_FEMAC=y
CONFIG_HIP04_ETH=y
CONFIG_HI13X1_GMAC=y
CONFIG_HNS_MDIO=y
CONFIG_HNS=y
CONFIG_HNS_DSAF=y
CONFIG_HNS_ENET=y
CONFIG_NET_VENDOR_HUAWEI=y
CONFIG_NET_VENDOR_I825XX=y
CONFIG_NET_VENDOR_INTEL=y
CONFIG_NET_VENDOR_WANGXUN=y
CONFIG_KORINA=y
CONFIG_NET_VENDOR_ADI=y
CONFIG_ADIN1110=y
CONFIG_NET_VENDOR_LITEX=y
CONFIG_LITEX_LITEETH=y
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_MV643XX_ETH=y
CONFIG_MVMDIO=y
CONFIG_MVNETA_BM_ENABLE=y
CONFIG_MVNETA=y
CONFIG_MVNETA_BM=y
CONFIG_MVPP2=y
CONFIG_MVPP2_PTP=y
CONFIG_PXA168_ETH=y
CONFIG_PRESTERA=y
CONFIG_NET_VENDOR_MEDIATEK=y
CONFIG_NET_MEDIATEK_SOC_WED=y
CONFIG_NET_MEDIATEK_SOC=y
CONFIG_NET_MEDIATEK_STAR_EMAC=y
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_MLXSW_CORE=y
CONFIG_MLXSW_CORE_HWMON=y
CONFIG_MLXSW_CORE_THERMAL=y
CONFIG_MLXSW_I2C=y
CONFIG_MLXSW_MINIMAL=y
CONFIG_MLXFW=y
CONFIG_MLXBF_GIGE=y
CONFIG_NET_VENDOR_MICREL=y
CONFIG_KS8842=y
CONFIG_KS8851=y
CONFIG_KS8851_MLL=y
CONFIG_NET_VENDOR_MICROCHIP=y
CONFIG_ENC28J60=y
CONFIG_ENC28J60_WRITEVERIFY=y
CONFIG_ENCX24J600=y
CONFIG_LAN966X_SWITCH=y
CONFIG_SPARX5_SWITCH=y
CONFIG_NET_VENDOR_MICROSEMI=y
CONFIG_MSCC_OCELOT_SWITCH_LIB=y
CONFIG_MSCC_OCELOT_SWITCH=y
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_NI=y
CONFIG_NI_XGE_MANAGEMENT_ENET=y
CONFIG_NET_VENDOR_NATSEMI=y
CONFIG_NET_VENDOR_NETRONOME=y
CONFIG_NET_VENDOR_8390=y
CONFIG_PCMCIA_AXNET=y
CONFIG_AX88796=y
CONFIG_AX88796_93CX6=y
CONFIG_PCMCIA_PCNET=y
CONFIG_LPC_ENET=y
CONFIG_ETHOC=y
CONFIG_NET_VENDOR_PENSANDO=y
CONFIG_NET_VENDOR_QUALCOMM=y
CONFIG_QCA7000=y
CONFIG_QCA7000_SPI=y
CONFIG_QCA7000_UART=y
CONFIG_QCOM_EMAC=y
CONFIG_RMNET=y
CONFIG_NET_VENDOR_RENESAS=y
CONFIG_SH_ETH=y
CONFIG_RAVB=y
CONFIG_NET_VENDOR_ROCKER=y
CONFIG_NET_VENDOR_SAMSUNG=y
CONFIG_SXGBE_ETH=y
CONFIG_NET_VENDOR_SEEQ=y
CONFIG_NET_VENDOR_SOLARFLARE=y
CONFIG_NET_VENDOR_SMSC=y
CONFIG_SMC91X=y
CONFIG_PCMCIA_SMC91C92=y
# CONFIG_SMC911X is not set
CONFIG_SMSC911X=y
CONFIG_NET_VENDOR_SOCIONEXT=y
CONFIG_SNI_AVE=y
CONFIG_SNI_NETSEC=y
CONFIG_NET_VENDOR_STMICRO=y
CONFIG_STMMAC_ETH=y
CONFIG_STMMAC_SELFTESTS=y
CONFIG_STMMAC_PLATFORM=y
CONFIG_DWMAC_DWC_QOS_ETH=y
CONFIG_DWMAC_GENERIC=y
CONFIG_DWMAC_ANARION=y
CONFIG_DWMAC_INGENIC=y
CONFIG_DWMAC_IPQ806X=y
CONFIG_DWMAC_LPC18XX=y
CONFIG_DWMAC_MEDIATEK=y
CONFIG_DWMAC_MESON=y
CONFIG_DWMAC_OXNAS=y
CONFIG_DWMAC_QCOM_ETHQOS=y
CONFIG_DWMAC_ROCKCHIP=y
CONFIG_DWMAC_SOCFPGA=y
CONFIG_DWMAC_STI=y
CONFIG_DWMAC_STM32=y
CONFIG_DWMAC_SUNXI=y
CONFIG_DWMAC_SUN8I=y
CONFIG_DWMAC_IMX8=y
CONFIG_DWMAC_INTEL_PLAT=y
CONFIG_DWMAC_VISCONTI=y
CONFIG_NET_VENDOR_SUNPLUS=y
CONFIG_SP7021_EMAC=y
CONFIG_NET_VENDOR_SYNOPSYS=y
CONFIG_DWC_XLGMAC=y
CONFIG_NET_VENDOR_VERTEXCOM=y
CONFIG_MSE102X=y
CONFIG_NET_VENDOR_VIA=y
CONFIG_VIA_VELOCITY=y
CONFIG_NET_VENDOR_WIZNET=y
CONFIG_WIZNET_W5100=y
CONFIG_WIZNET_W5300=y
# CONFIG_WIZNET_BUS_DIRECT is not set
# CONFIG_WIZNET_BUS_INDIRECT is not set
CONFIG_WIZNET_BUS_ANY=y
CONFIG_WIZNET_W5100_SPI=y
CONFIG_NET_VENDOR_XILINX=y
CONFIG_XILINX_EMACLITE=y
CONFIG_XILINX_AXI_EMAC=y
CONFIG_XILINX_LL_TEMAC=y
CONFIG_NET_VENDOR_XIRCOM=y
CONFIG_PCMCIA_XIRC2PS=y
CONFIG_QCOM_IPA=y
CONFIG_PHYLINK=y
CONFIG_PHYLIB=y
CONFIG_SWPHY=y
CONFIG_LED_TRIGGER_PHY=y
CONFIG_FIXED_PHY=y
CONFIG_SFP=y

#
# MII PHY device drivers
#
CONFIG_AMD_PHY=y
CONFIG_MESON_GXL_PHY=y
CONFIG_ADIN_PHY=y
CONFIG_ADIN1100_PHY=y
CONFIG_AQUANTIA_PHY=y
CONFIG_AX88796B_PHY=y
CONFIG_BROADCOM_PHY=y
CONFIG_BCM54140_PHY=y
CONFIG_BCM63XX_PHY=y
CONFIG_BCM7XXX_PHY=y
CONFIG_BCM84881_PHY=y
CONFIG_BCM87XX_PHY=y
CONFIG_BCM_CYGNUS_PHY=y
CONFIG_BCM_NET_PHYLIB=y
CONFIG_BCM_NET_PHYPTP=y
CONFIG_CICADA_PHY=y
CONFIG_CORTINA_PHY=y
CONFIG_DAVICOM_PHY=y
CONFIG_ICPLUS_PHY=y
CONFIG_LXT_PHY=y
CONFIG_INTEL_XWAY_PHY=y
CONFIG_LSI_ET1011C_PHY=y
CONFIG_MARVELL_PHY=y
CONFIG_MARVELL_10G_PHY=y
CONFIG_MARVELL_88X2222_PHY=y
CONFIG_MAXLINEAR_GPHY=y
CONFIG_MEDIATEK_GE_PHY=y
CONFIG_MICREL_PHY=y
CONFIG_MICROCHIP_PHY=y
CONFIG_MICROCHIP_T1_PHY=y
CONFIG_MICROSEMI_PHY=y
CONFIG_MOTORCOMM_PHY=y
CONFIG_NATIONAL_PHY=y
CONFIG_NXP_C45_TJA11XX_PHY=y
CONFIG_NXP_TJA11XX_PHY=y
CONFIG_AT803X_PHY=y
CONFIG_QSEMI_PHY=y
CONFIG_REALTEK_PHY=y
CONFIG_RENESAS_PHY=y
CONFIG_ROCKCHIP_PHY=y
CONFIG_SMSC_PHY=y
CONFIG_STE10XP=y
CONFIG_TERANETICS_PHY=y
CONFIG_DP83822_PHY=y
CONFIG_DP83TC811_PHY=y
CONFIG_DP83848_PHY=y
CONFIG_DP83867_PHY=y
CONFIG_DP83869_PHY=y
CONFIG_DP83TD510_PHY=y
CONFIG_VITESSE_PHY=y
CONFIG_XILINX_GMII2RGMII=y
CONFIG_MICREL_KS8995MA=y
CONFIG_PSE_CONTROLLER=y
CONFIG_PSE_REGULATOR=y
CONFIG_CAN_DEV=y
CONFIG_CAN_VCAN=y
CONFIG_CAN_VXCAN=y
CONFIG_CAN_NETLINK=y
CONFIG_CAN_CALC_BITTIMING=y
CONFIG_CAN_RX_OFFLOAD=y
CONFIG_CAN_AT91=y
CONFIG_CAN_CAN327=y
CONFIG_CAN_FLEXCAN=y
CONFIG_CAN_GRCAN=y
CONFIG_CAN_SLCAN=y
CONFIG_CAN_SUN4I=y
CONFIG_CAN_XILINXCAN=y
CONFIG_CAN_C_CAN=y
CONFIG_CAN_C_CAN_PLATFORM=y
CONFIG_CAN_CC770=y
CONFIG_CAN_CC770_ISA=y
CONFIG_CAN_CC770_PLATFORM=y
CONFIG_CAN_CTUCANFD=y
CONFIG_CAN_CTUCANFD_PLATFORM=y
CONFIG_CAN_IFI_CANFD=y
CONFIG_CAN_M_CAN=y
CONFIG_CAN_M_CAN_PLATFORM=y
CONFIG_CAN_M_CAN_TCAN4X5X=y
CONFIG_CAN_RCAR=y
CONFIG_CAN_RCAR_CANFD=y
CONFIG_CAN_SJA1000=y
CONFIG_CAN_EMS_PCMCIA=y
CONFIG_CAN_SJA1000_ISA=y
CONFIG_CAN_SJA1000_PLATFORM=y
CONFIG_CAN_SOFTING=y
CONFIG_CAN_SOFTING_CS=y

#
# CAN SPI interfaces
#
CONFIG_CAN_HI311X=y
CONFIG_CAN_MCP251X=y
CONFIG_CAN_MCP251XFD=y
CONFIG_CAN_MCP251XFD_SANITY=y
# end of CAN SPI interfaces

#
# CAN USB interfaces
#
CONFIG_CAN_8DEV_USB=y
CONFIG_CAN_EMS_USB=y
CONFIG_CAN_ESD_USB=y
CONFIG_CAN_ETAS_ES58X=y
CONFIG_CAN_GS_USB=y
CONFIG_CAN_KVASER_USB=y
CONFIG_CAN_MCBA_USB=y
CONFIG_CAN_PEAK_USB=y
CONFIG_CAN_UCAN=y
# end of CAN USB interfaces

CONFIG_CAN_DEBUG_DEVICES=y

#
# MCTP Device Drivers
#
CONFIG_MCTP_SERIAL=y
CONFIG_MCTP_TRANSPORT_I2C=y
# end of MCTP Device Drivers

CONFIG_MDIO_DEVICE=y
CONFIG_MDIO_BUS=y
CONFIG_FWNODE_MDIO=y
CONFIG_OF_MDIO=y
CONFIG_MDIO_DEVRES=y
CONFIG_MDIO_SUN4I=y
CONFIG_MDIO_XGENE=y
CONFIG_MDIO_ASPEED=y
CONFIG_MDIO_BITBANG=y
CONFIG_MDIO_BCM_IPROC=y
CONFIG_MDIO_BCM_UNIMAC=y
CONFIG_MDIO_CAVIUM=y
CONFIG_MDIO_GPIO=y
CONFIG_MDIO_HISI_FEMAC=y
CONFIG_MDIO_I2C=y
CONFIG_MDIO_MVUSB=y
CONFIG_MDIO_MSCC_MIIM=y
CONFIG_MDIO_MOXART=y
CONFIG_MDIO_OCTEON=y
CONFIG_MDIO_IPQ4019=y
CONFIG_MDIO_IPQ8064=y

#
# MDIO Multiplexers
#
CONFIG_MDIO_BUS_MUX=y
CONFIG_MDIO_BUS_MUX_MESON_G12A=y
CONFIG_MDIO_BUS_MUX_BCM6368=y
CONFIG_MDIO_BUS_MUX_BCM_IPROC=y
CONFIG_MDIO_BUS_MUX_GPIO=y
CONFIG_MDIO_BUS_MUX_MULTIPLEXER=y
CONFIG_MDIO_BUS_MUX_MMIOREG=y

#
# PCS device drivers
#
CONFIG_PCS_XPCS=y
CONFIG_PCS_LYNX=y
CONFIG_PCS_RZN1_MIIC=y
CONFIG_PCS_ALTERA_TSE=y
# end of PCS device drivers

CONFIG_PLIP=y
CONFIG_PPP=y
CONFIG_PPP_BSDCOMP=y
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_MPPE=y
CONFIG_PPP_MULTILINK=y
CONFIG_PPPOATM=y
CONFIG_PPPOE=y
CONFIG_PPTP=y
CONFIG_PPPOL2TP=y
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
CONFIG_SLIP=y
CONFIG_SLHC=y
CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP_SMART=y
CONFIG_SLIP_MODE_SLIP6=y
CONFIG_USB_NET_DRIVERS=y
CONFIG_USB_CATC=y
CONFIG_USB_KAWETH=y
CONFIG_USB_PEGASUS=y
CONFIG_USB_RTL8150=y
CONFIG_USB_RTL8152=y
CONFIG_USB_LAN78XX=y
CONFIG_USB_USBNET=y
CONFIG_USB_NET_AX8817X=y
CONFIG_USB_NET_AX88179_178A=y
CONFIG_USB_NET_CDCETHER=y
CONFIG_USB_NET_CDC_EEM=y
CONFIG_USB_NET_CDC_NCM=y
CONFIG_USB_NET_HUAWEI_CDC_NCM=y
CONFIG_USB_NET_CDC_MBIM=y
CONFIG_USB_NET_DM9601=y
CONFIG_USB_NET_SR9700=y
CONFIG_USB_NET_SR9800=y
CONFIG_USB_NET_SMSC75XX=y
CONFIG_USB_NET_SMSC95XX=y
CONFIG_USB_NET_GL620A=y
CONFIG_USB_NET_NET1080=y
CONFIG_USB_NET_PLUSB=y
CONFIG_USB_NET_MCS7830=y
CONFIG_USB_NET_RNDIS_HOST=y
CONFIG_USB_NET_CDC_SUBSET_ENABLE=y
CONFIG_USB_NET_CDC_SUBSET=y
CONFIG_USB_ALI_M5632=y
CONFIG_USB_AN2720=y
CONFIG_USB_BELKIN=y
CONFIG_USB_ARMLINUX=y
CONFIG_USB_EPSON2888=y
CONFIG_USB_KC2190=y
CONFIG_USB_NET_ZAURUS=y
CONFIG_USB_NET_CX82310_ETH=y
CONFIG_USB_NET_KALMIA=y
CONFIG_USB_NET_QMI_WWAN=y
CONFIG_USB_HSO=y
CONFIG_USB_NET_INT51X1=y
CONFIG_USB_CDC_PHONET=y
CONFIG_USB_IPHETH=y
CONFIG_USB_SIERRA_NET=y
CONFIG_USB_VL600=y
CONFIG_USB_NET_CH9200=y
CONFIG_USB_NET_AQC111=y
CONFIG_USB_RTL8153_ECM=y
CONFIG_WLAN=y
CONFIG_WLAN_VENDOR_ADMTEK=y
CONFIG_ATH_COMMON=y
CONFIG_WLAN_VENDOR_ATH=y
CONFIG_ATH_DEBUG=y
CONFIG_ATH_REG_DYNAMIC_USER_REG_HINTS=y
CONFIG_ATH_REG_DYNAMIC_USER_CERT_TESTING=y
CONFIG_ATH9K_HW=y
CONFIG_ATH9K_COMMON=y
CONFIG_ATH9K_COMMON_DEBUG=y
CONFIG_ATH9K_DFS_DEBUGFS=y
CONFIG_ATH9K_BTCOEX_SUPPORT=y
CONFIG_ATH9K=y
CONFIG_ATH9K_AHB=y
CONFIG_ATH9K_DEBUGFS=y
CONFIG_ATH9K_STATION_STATISTICS=y
CONFIG_ATH9K_TX99=y
CONFIG_ATH9K_DFS_CERTIFIED=y
CONFIG_ATH9K_DYNACK=y
CONFIG_ATH9K_RFKILL=y
CONFIG_ATH9K_CHANNEL_CONTEXT=y
CONFIG_ATH9K_PCOEM=y
CONFIG_ATH9K_HTC=y
CONFIG_ATH9K_HTC_DEBUGFS=y
CONFIG_ATH9K_HWRNG=y
CONFIG_ATH9K_COMMON_SPECTRAL=y
CONFIG_CARL9170=y
CONFIG_CARL9170_LEDS=y
CONFIG_CARL9170_DEBUGFS=y
CONFIG_CARL9170_WPC=y
CONFIG_CARL9170_HWRNG=y
CONFIG_ATH6KL=y
CONFIG_ATH6KL_SDIO=y
CONFIG_ATH6KL_USB=y
CONFIG_ATH6KL_DEBUG=y
CONFIG_ATH6KL_REGDOMAIN=y
CONFIG_AR5523=y
CONFIG_ATH10K=y
CONFIG_ATH10K_CE=y
CONFIG_ATH10K_SDIO=y
CONFIG_ATH10K_USB=y
CONFIG_ATH10K_SNOC=y
CONFIG_ATH10K_DEBUG=y
CONFIG_ATH10K_DEBUGFS=y
CONFIG_ATH10K_SPECTRAL=y
CONFIG_ATH10K_DFS_CERTIFIED=y
CONFIG_WCN36XX=y
CONFIG_WCN36XX_DEBUGFS=y
CONFIG_ATH11K=y
CONFIG_ATH11K_AHB=y
CONFIG_ATH11K_DEBUG=y
CONFIG_ATH11K_DEBUGFS=y
CONFIG_ATH11K_SPECTRAL=y
CONFIG_WLAN_VENDOR_ATMEL=y
CONFIG_ATMEL=y
CONFIG_PCMCIA_ATMEL=y
CONFIG_AT76C50X_USB=y
CONFIG_WLAN_VENDOR_BROADCOM=y
CONFIG_B43=y
CONFIG_B43_BCMA=y
CONFIG_B43_SSB=y
CONFIG_B43_BUSES_BCMA_AND_SSB=y
# CONFIG_B43_BUSES_BCMA is not set
# CONFIG_B43_BUSES_SSB is not set
CONFIG_B43_SDIO=y
CONFIG_B43_BCMA_PIO=y
CONFIG_B43_PIO=y
CONFIG_B43_PHY_G=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_HT=y
CONFIG_B43_LEDS=y
CONFIG_B43_HWRNG=y
CONFIG_B43_DEBUG=y
CONFIG_B43LEGACY=y
CONFIG_B43LEGACY_LEDS=y
CONFIG_B43LEGACY_HWRNG=y
CONFIG_B43LEGACY_DEBUG=y
CONFIG_B43LEGACY_DMA=y
CONFIG_B43LEGACY_PIO=y
CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
# CONFIG_B43LEGACY_DMA_MODE is not set
# CONFIG_B43LEGACY_PIO_MODE is not set
CONFIG_BRCMUTIL=y
CONFIG_BRCMSMAC=y
CONFIG_BRCMSMAC_LEDS=y
CONFIG_BRCMFMAC=y
CONFIG_BRCMFMAC_PROTO_BCDC=y
CONFIG_BRCMFMAC_SDIO=y
CONFIG_BRCMFMAC_USB=y
CONFIG_BRCM_TRACING=y
CONFIG_BRCMDBG=y
CONFIG_WLAN_VENDOR_CISCO=y
CONFIG_AIRO_CS=y
CONFIG_WLAN_VENDOR_INTEL=y
CONFIG_WLAN_VENDOR_INTERSIL=y
CONFIG_HOSTAP=y
CONFIG_HOSTAP_FIRMWARE=y
CONFIG_HOSTAP_FIRMWARE_NVRAM=y
CONFIG_HOSTAP_CS=y
CONFIG_HERMES=y
CONFIG_HERMES_PRISM=y
CONFIG_HERMES_CACHE_FW_ON_INIT=y
CONFIG_ORINOCO_USB=y
CONFIG_P54_COMMON=y
CONFIG_P54_USB=y
CONFIG_P54_SPI=y
CONFIG_P54_SPI_DEFAULT_EEPROM=y
CONFIG_P54_LEDS=y
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_LIBERTAS=y
CONFIG_LIBERTAS_USB=y
CONFIG_LIBERTAS_SDIO=y
CONFIG_LIBERTAS_SPI=y
CONFIG_LIBERTAS_DEBUG=y
CONFIG_LIBERTAS_MESH=y
CONFIG_LIBERTAS_THINFIRM=y
CONFIG_LIBERTAS_THINFIRM_DEBUG=y
CONFIG_LIBERTAS_THINFIRM_USB=y
CONFIG_MWIFIEX=y
CONFIG_MWIFIEX_SDIO=y
CONFIG_MWIFIEX_USB=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_MT7601U=y
CONFIG_MT76_CORE=y
CONFIG_MT76_LEDS=y
CONFIG_MT76_USB=y
CONFIG_MT76_SDIO=y
CONFIG_MT76x02_LIB=y
CONFIG_MT76x02_USB=y
CONFIG_MT76_CONNAC_LIB=y
CONFIG_MT76x0_COMMON=y
CONFIG_MT76x0U=y
CONFIG_MT76x2_COMMON=y
CONFIG_MT76x2U=y
CONFIG_MT7615_COMMON=y
CONFIG_MT7663_USB_SDIO_COMMON=y
CONFIG_MT7663U=y
CONFIG_MT7663S=y
CONFIG_MT7921_COMMON=y
CONFIG_MT7921S=y
CONFIG_MT7921U=y
CONFIG_WLAN_VENDOR_MICROCHIP=y
CONFIG_WILC1000=y
CONFIG_WILC1000_SDIO=y
CONFIG_WILC1000_SPI=y
CONFIG_WILC1000_HW_OOB_INTR=y
CONFIG_WLAN_VENDOR_PURELIFI=y
CONFIG_PLFXLC=y
CONFIG_WLAN_VENDOR_RALINK=y
CONFIG_RT2X00=y
CONFIG_RT2500USB=y
CONFIG_RT73USB=y
CONFIG_RT2800USB=y
CONFIG_RT2800USB_RT33XX=y
CONFIG_RT2800USB_RT35XX=y
CONFIG_RT2800USB_RT3573=y
CONFIG_RT2800USB_RT53XX=y
CONFIG_RT2800USB_RT55XX=y
CONFIG_RT2800USB_UNKNOWN=y
CONFIG_RT2800_LIB=y
CONFIG_RT2X00_LIB_USB=y
CONFIG_RT2X00_LIB=y
CONFIG_RT2X00_LIB_FIRMWARE=y
CONFIG_RT2X00_LIB_CRYPTO=y
CONFIG_RT2X00_LIB_LEDS=y
CONFIG_RT2X00_LIB_DEBUGFS=y
CONFIG_RT2X00_DEBUG=y
CONFIG_WLAN_VENDOR_REALTEK=y
CONFIG_RTL8187=y
CONFIG_RTL8187_LEDS=y
CONFIG_RTL_CARDS=y
CONFIG_RTL8192CU=y
CONFIG_RTLWIFI=y
CONFIG_RTLWIFI_USB=y
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTL8192C_COMMON=y
CONFIG_RTL8XXXU=y
CONFIG_RTL8XXXU_UNTESTED=y
CONFIG_RTW88=y
CONFIG_RTW89=y
CONFIG_WLAN_VENDOR_RSI=y
CONFIG_RSI_91X=y
CONFIG_RSI_DEBUGFS=y
CONFIG_RSI_SDIO=y
CONFIG_RSI_USB=y
CONFIG_RSI_COEX=y
CONFIG_WLAN_VENDOR_SILABS=y
CONFIG_WFX=y
CONFIG_WLAN_VENDOR_ST=y
CONFIG_CW1200=y
CONFIG_CW1200_WLAN_SDIO=y
CONFIG_CW1200_WLAN_SPI=y
CONFIG_WLAN_VENDOR_TI=y
CONFIG_WL1251=y
CONFIG_WL1251_SPI=y
CONFIG_WL1251_SDIO=y
CONFIG_WL12XX=y
CONFIG_WL18XX=y
CONFIG_WLCORE=y
CONFIG_WLCORE_SPI=y
CONFIG_WLCORE_SDIO=y
CONFIG_WILINK_PLATFORM_DATA=y
CONFIG_WLAN_VENDOR_ZYDAS=y
CONFIG_USB_ZD1201=y
CONFIG_ZD1211RW=y
CONFIG_ZD1211RW_DEBUG=y
CONFIG_WLAN_VENDOR_QUANTENNA=y
CONFIG_PCMCIA_RAYCS=y
CONFIG_PCMCIA_WL3501=y
CONFIG_MAC80211_HWSIM=y
CONFIG_USB_NET_RNDIS_WLAN=y
CONFIG_VIRT_WIFI=y
CONFIG_WAN=y
CONFIG_HDLC=y
CONFIG_HDLC_RAW=y
CONFIG_HDLC_RAW_ETH=y
CONFIG_HDLC_CISCO=y
CONFIG_HDLC_FR=y
CONFIG_HDLC_PPP=y
CONFIG_HDLC_X25=y
CONFIG_FSL_UCC_HDLC=y
CONFIG_SLIC_DS26522=y
CONFIG_LAPBETHER=y
CONFIG_IEEE802154_DRIVERS=y
CONFIG_IEEE802154_FAKELB=y
CONFIG_IEEE802154_AT86RF230=y
CONFIG_IEEE802154_MRF24J40=y
CONFIG_IEEE802154_CC2520=y
CONFIG_IEEE802154_ATUSB=y
CONFIG_IEEE802154_ADF7242=y
CONFIG_IEEE802154_CA8210=y
CONFIG_IEEE802154_CA8210_DEBUGFS=y
CONFIG_IEEE802154_MCR20A=y
CONFIG_IEEE802154_HWSIM=y

#
# Wireless WAN
#
CONFIG_WWAN=y
CONFIG_WWAN_DEBUGFS=y
CONFIG_WWAN_HWSIM=y
CONFIG_MHI_WWAN_CTRL=y
CONFIG_MHI_WWAN_MBIM=y
CONFIG_QCOM_BAM_DMUX=y
CONFIG_RPMSG_WWAN_CTRL=y
# end of Wireless WAN

CONFIG_NETDEVSIM=y
CONFIG_NET_FAILOVER=y
CONFIG_ISDN=y
CONFIG_ISDN_CAPI=y
CONFIG_CAPI_TRACE=y
CONFIG_ISDN_CAPI_MIDDLEWARE=y
CONFIG_MISDN=y
CONFIG_MISDN_DSP=y
CONFIG_MISDN_L1OIP=y

#
# mISDN hardware drivers
#
CONFIG_MISDN_HFCUSB=y

#
# Input device support
#
CONFIG_INPUT=y
CONFIG_INPUT_LEDS=y
CONFIG_INPUT_FF_MEMLESS=y
CONFIG_INPUT_SPARSEKMAP=y
CONFIG_INPUT_MATRIXKMAP=y
CONFIG_INPUT_VIVALDIFMAP=y

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_JOYDEV=y
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_EVBUG=y

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ADC=y
CONFIG_KEYBOARD_ADP5520=y
CONFIG_KEYBOARD_ADP5588=y
CONFIG_KEYBOARD_ADP5589=y
CONFIG_KEYBOARD_ATKBD=y
CONFIG_KEYBOARD_QT1050=y
CONFIG_KEYBOARD_QT1070=y
CONFIG_KEYBOARD_QT2160=y
CONFIG_KEYBOARD_CLPS711X=y
CONFIG_KEYBOARD_DLINK_DIR685=y
CONFIG_KEYBOARD_LKKBD=y
CONFIG_KEYBOARD_EP93XX=y
CONFIG_KEYBOARD_GPIO=y
CONFIG_KEYBOARD_GPIO_POLLED=y
CONFIG_KEYBOARD_TCA6416=y
CONFIG_KEYBOARD_TCA8418=y
CONFIG_KEYBOARD_MATRIX=y
CONFIG_KEYBOARD_LM8323=y
CONFIG_KEYBOARD_LM8333=y
CONFIG_KEYBOARD_MAX7359=y
CONFIG_KEYBOARD_MCS=y
CONFIG_KEYBOARD_MPR121=y
CONFIG_KEYBOARD_SNVS_PWRKEY=y
CONFIG_KEYBOARD_IMX=y
CONFIG_KEYBOARD_IMX_SC_KEY=y
CONFIG_KEYBOARD_NEWTON=y
CONFIG_KEYBOARD_OPENCORES=y
CONFIG_KEYBOARD_PINEPHONE=y
CONFIG_KEYBOARD_PMIC8XXX=y
CONFIG_KEYBOARD_SAMSUNG=y
CONFIG_KEYBOARD_GOLDFISH_EVENTS=y
CONFIG_KEYBOARD_STOWAWAY=y
CONFIG_KEYBOARD_ST_KEYSCAN=y
CONFIG_KEYBOARD_SUNKBD=y
CONFIG_KEYBOARD_SH_KEYSC=y
CONFIG_KEYBOARD_STMPE=y
CONFIG_KEYBOARD_IQS62X=y
CONFIG_KEYBOARD_OMAP4=y
CONFIG_KEYBOARD_TC3589X=y
CONFIG_KEYBOARD_TM2_TOUCHKEY=y
CONFIG_KEYBOARD_TWL4030=y
CONFIG_KEYBOARD_XTKBD=y
CONFIG_KEYBOARD_CROS_EC=y
CONFIG_KEYBOARD_CAP11XX=y
CONFIG_KEYBOARD_BCM=y
CONFIG_KEYBOARD_MT6779=y
CONFIG_KEYBOARD_MTK_PMIC=y
CONFIG_KEYBOARD_CYPRESS_SF=y
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
CONFIG_MOUSE_PS2_ALPS=y
CONFIG_MOUSE_PS2_BYD=y
CONFIG_MOUSE_PS2_LOGIPS2PP=y
CONFIG_MOUSE_PS2_SYNAPTICS=y
CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y
CONFIG_MOUSE_PS2_CYPRESS=y
CONFIG_MOUSE_PS2_TRACKPOINT=y
CONFIG_MOUSE_PS2_ELANTECH=y
CONFIG_MOUSE_PS2_ELANTECH_SMBUS=y
CONFIG_MOUSE_PS2_SENTELIC=y
CONFIG_MOUSE_PS2_TOUCHKIT=y
CONFIG_MOUSE_PS2_FOCALTECH=y
CONFIG_MOUSE_PS2_SMBUS=y
CONFIG_MOUSE_SERIAL=y
CONFIG_MOUSE_APPLETOUCH=y
CONFIG_MOUSE_BCM5974=y
CONFIG_MOUSE_CYAPA=y
CONFIG_MOUSE_ELAN_I2C=y
CONFIG_MOUSE_ELAN_I2C_I2C=y
CONFIG_MOUSE_ELAN_I2C_SMBUS=y
CONFIG_MOUSE_VSXXXAA=y
CONFIG_MOUSE_GPIO=y
CONFIG_MOUSE_SYNAPTICS_I2C=y
CONFIG_MOUSE_SYNAPTICS_USB=y
CONFIG_INPUT_JOYSTICK=y
CONFIG_JOYSTICK_ANALOG=y
CONFIG_JOYSTICK_A3D=y
CONFIG_JOYSTICK_ADC=y
CONFIG_JOYSTICK_ADI=y
CONFIG_JOYSTICK_COBRA=y
CONFIG_JOYSTICK_GF2K=y
CONFIG_JOYSTICK_GRIP=y
CONFIG_JOYSTICK_GRIP_MP=y
CONFIG_JOYSTICK_GUILLEMOT=y
CONFIG_JOYSTICK_INTERACT=y
CONFIG_JOYSTICK_SIDEWINDER=y
CONFIG_JOYSTICK_TMDC=y
CONFIG_JOYSTICK_IFORCE=y
CONFIG_JOYSTICK_IFORCE_USB=y
CONFIG_JOYSTICK_IFORCE_232=y
CONFIG_JOYSTICK_WARRIOR=y
CONFIG_JOYSTICK_MAGELLAN=y
CONFIG_JOYSTICK_SPACEORB=y
CONFIG_JOYSTICK_SPACEBALL=y
CONFIG_JOYSTICK_STINGER=y
CONFIG_JOYSTICK_TWIDJOY=y
CONFIG_JOYSTICK_ZHENHUA=y
CONFIG_JOYSTICK_DB9=y
CONFIG_JOYSTICK_GAMECON=y
CONFIG_JOYSTICK_TURBOGRAFX=y
CONFIG_JOYSTICK_AS5011=y
CONFIG_JOYSTICK_JOYDUMP=y
CONFIG_JOYSTICK_XPAD=y
CONFIG_JOYSTICK_XPAD_FF=y
CONFIG_JOYSTICK_XPAD_LEDS=y
CONFIG_JOYSTICK_WALKERA0701=y
CONFIG_JOYSTICK_PSXPAD_SPI=y
CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PXRC=y
CONFIG_JOYSTICK_QWIIC=y
CONFIG_JOYSTICK_FSIA6B=y
CONFIG_JOYSTICK_SENSEHAT=y
CONFIG_INPUT_TABLET=y
CONFIG_TABLET_USB_ACECAD=y
CONFIG_TABLET_USB_AIPTEK=y
CONFIG_TABLET_USB_HANWANG=y
CONFIG_TABLET_USB_KBTAB=y
CONFIG_TABLET_USB_PEGASUS=y
CONFIG_TABLET_SERIAL_WACOM4=y
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_88PM860X=y
CONFIG_TOUCHSCREEN_ADS7846=y
CONFIG_TOUCHSCREEN_AD7877=y
CONFIG_TOUCHSCREEN_AD7879=y
CONFIG_TOUCHSCREEN_AD7879_I2C=y
CONFIG_TOUCHSCREEN_AD7879_SPI=y
CONFIG_TOUCHSCREEN_ADC=y
CONFIG_TOUCHSCREEN_AR1021_I2C=y
CONFIG_TOUCHSCREEN_ATMEL_MXT=y
CONFIG_TOUCHSCREEN_ATMEL_MXT_T37=y
CONFIG_TOUCHSCREEN_AUO_PIXCIR=y
CONFIG_TOUCHSCREEN_BU21013=y
CONFIG_TOUCHSCREEN_BU21029=y
CONFIG_TOUCHSCREEN_CHIPONE_ICN8318=y
CONFIG_TOUCHSCREEN_CY8CTMA140=y
CONFIG_TOUCHSCREEN_CY8CTMG110=y
CONFIG_TOUCHSCREEN_CYTTSP_CORE=y
CONFIG_TOUCHSCREEN_CYTTSP_I2C=y
CONFIG_TOUCHSCREEN_CYTTSP_SPI=y
CONFIG_TOUCHSCREEN_CYTTSP4_CORE=y
CONFIG_TOUCHSCREEN_CYTTSP4_I2C=y
CONFIG_TOUCHSCREEN_CYTTSP4_SPI=y
CONFIG_TOUCHSCREEN_DA9034=y
CONFIG_TOUCHSCREEN_DA9052=y
CONFIG_TOUCHSCREEN_DYNAPRO=y
CONFIG_TOUCHSCREEN_HAMPSHIRE=y
CONFIG_TOUCHSCREEN_EETI=y
CONFIG_TOUCHSCREEN_EGALAX=y
CONFIG_TOUCHSCREEN_EGALAX_SERIAL=y
CONFIG_TOUCHSCREEN_EXC3000=y
CONFIG_TOUCHSCREEN_FUJITSU=y
CONFIG_TOUCHSCREEN_GOODIX=y
CONFIG_TOUCHSCREEN_HIDEEP=y
CONFIG_TOUCHSCREEN_HYCON_HY46XX=y
CONFIG_TOUCHSCREEN_ILI210X=y
CONFIG_TOUCHSCREEN_ILITEK=y
CONFIG_TOUCHSCREEN_IPROC=y
CONFIG_TOUCHSCREEN_S6SY761=y
CONFIG_TOUCHSCREEN_GUNZE=y
CONFIG_TOUCHSCREEN_EKTF2127=y
CONFIG_TOUCHSCREEN_ELAN=y
CONFIG_TOUCHSCREEN_ELO=y
CONFIG_TOUCHSCREEN_WACOM_W8001=y
CONFIG_TOUCHSCREEN_WACOM_I2C=y
CONFIG_TOUCHSCREEN_MAX11801=y
CONFIG_TOUCHSCREEN_MCS5000=y
CONFIG_TOUCHSCREEN_MMS114=y
CONFIG_TOUCHSCREEN_MELFAS_MIP4=y
CONFIG_TOUCHSCREEN_MSG2638=y
CONFIG_TOUCHSCREEN_MTOUCH=y
CONFIG_TOUCHSCREEN_IMAGIS=y
CONFIG_TOUCHSCREEN_IMX6UL_TSC=y
CONFIG_TOUCHSCREEN_INEXIO=y
CONFIG_TOUCHSCREEN_MK712=y
CONFIG_TOUCHSCREEN_PENMOUNT=y
CONFIG_TOUCHSCREEN_EDT_FT5X06=y
CONFIG_TOUCHSCREEN_RASPBERRYPI_FW=y
CONFIG_TOUCHSCREEN_MIGOR=y
CONFIG_TOUCHSCREEN_TOUCHRIGHT=y
CONFIG_TOUCHSCREEN_TOUCHWIN=y
CONFIG_TOUCHSCREEN_TI_AM335X_TSC=y
CONFIG_TOUCHSCREEN_UCB1400=y
CONFIG_TOUCHSCREEN_PIXCIR=y
CONFIG_TOUCHSCREEN_WDT87XX_I2C=y
CONFIG_TOUCHSCREEN_WM831X=y
CONFIG_TOUCHSCREEN_WM97XX=y
CONFIG_TOUCHSCREEN_WM9705=y
CONFIG_TOUCHSCREEN_WM9712=y
CONFIG_TOUCHSCREEN_WM9713=y
CONFIG_TOUCHSCREEN_USB_COMPOSITE=y
CONFIG_TOUCHSCREEN_MXS_LRADC=y
CONFIG_TOUCHSCREEN_MX25=y
CONFIG_TOUCHSCREEN_MC13783=y
CONFIG_TOUCHSCREEN_USB_EGALAX=y
CONFIG_TOUCHSCREEN_USB_PANJIT=y
CONFIG_TOUCHSCREEN_USB_3M=y
CONFIG_TOUCHSCREEN_USB_ITM=y
CONFIG_TOUCHSCREEN_USB_ETURBO=y
CONFIG_TOUCHSCREEN_USB_GUNZE=y
CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
CONFIG_TOUCHSCREEN_USB_GOTOP=y
CONFIG_TOUCHSCREEN_USB_JASTEC=y
CONFIG_TOUCHSCREEN_USB_ELO=y
CONFIG_TOUCHSCREEN_USB_E2I=y
CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
CONFIG_TOUCHSCREEN_USB_NEXIO=y
CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y
CONFIG_TOUCHSCREEN_TOUCHIT213=y
CONFIG_TOUCHSCREEN_TS4800=y
CONFIG_TOUCHSCREEN_TSC_SERIO=y
CONFIG_TOUCHSCREEN_TSC200X_CORE=y
CONFIG_TOUCHSCREEN_TSC2004=y
CONFIG_TOUCHSCREEN_TSC2005=y
CONFIG_TOUCHSCREEN_TSC2007=y
CONFIG_TOUCHSCREEN_TSC2007_IIO=y
CONFIG_TOUCHSCREEN_PCAP=y
CONFIG_TOUCHSCREEN_RM_TS=y
CONFIG_TOUCHSCREEN_SILEAD=y
CONFIG_TOUCHSCREEN_SIS_I2C=y
CONFIG_TOUCHSCREEN_ST1232=y
CONFIG_TOUCHSCREEN_STMFTS=y
CONFIG_TOUCHSCREEN_STMPE=y
CONFIG_TOUCHSCREEN_SUN4I=y
CONFIG_TOUCHSCREEN_SUR40=y
CONFIG_TOUCHSCREEN_SURFACE3_SPI=y
CONFIG_TOUCHSCREEN_SX8654=y
CONFIG_TOUCHSCREEN_TPS6507X=y
CONFIG_TOUCHSCREEN_ZET6223=y
CONFIG_TOUCHSCREEN_ZFORCE=y
CONFIG_TOUCHSCREEN_COLIBRI_VF50=y
CONFIG_TOUCHSCREEN_ROHM_BU21023=y
CONFIG_TOUCHSCREEN_IQS5XX=y
CONFIG_TOUCHSCREEN_ZINITIX=y
CONFIG_INPUT_MISC=y
CONFIG_INPUT_88PM860X_ONKEY=y
CONFIG_INPUT_88PM80X_ONKEY=y
CONFIG_INPUT_AD714X=y
CONFIG_INPUT_AD714X_I2C=y
CONFIG_INPUT_AD714X_SPI=y
CONFIG_INPUT_ARIEL_PWRBUTTON=y
CONFIG_INPUT_ARIZONA_HAPTICS=y
CONFIG_INPUT_ATC260X_ONKEY=y
CONFIG_INPUT_ATMEL_CAPTOUCH=y
CONFIG_INPUT_BMA150=y
CONFIG_INPUT_E3X0_BUTTON=y
CONFIG_INPUT_PM8941_PWRKEY=y
CONFIG_INPUT_PM8XXX_VIBRATOR=y
CONFIG_INPUT_PMIC8XXX_PWRKEY=y
CONFIG_INPUT_MAX77650_ONKEY=y
CONFIG_INPUT_MAX77693_HAPTIC=y
CONFIG_INPUT_MAX8925_ONKEY=y
CONFIG_INPUT_MAX8997_HAPTIC=y
CONFIG_INPUT_MC13783_PWRBUTTON=y
CONFIG_INPUT_MMA8450=y
CONFIG_INPUT_GPIO_BEEPER=y
CONFIG_INPUT_GPIO_DECODER=y
CONFIG_INPUT_GPIO_VIBRA=y
CONFIG_INPUT_CPCAP_PWRBUTTON=y
CONFIG_INPUT_ATI_REMOTE2=y
CONFIG_INPUT_KEYSPAN_REMOTE=y
CONFIG_INPUT_KXTJ9=y
CONFIG_INPUT_POWERMATE=y
CONFIG_INPUT_YEALINK=y
CONFIG_INPUT_CM109=y
CONFIG_INPUT_REGULATOR_HAPTIC=y
CONFIG_INPUT_RETU_PWRBUTTON=y
CONFIG_INPUT_TPS65218_PWRBUTTON=y
CONFIG_INPUT_AXP20X_PEK=y
CONFIG_INPUT_TWL4030_PWRBUTTON=y
CONFIG_INPUT_TWL4030_VIBRA=y
CONFIG_INPUT_TWL6040_VIBRA=y
CONFIG_INPUT_UINPUT=y
CONFIG_INPUT_PALMAS_PWRBUTTON=y
CONFIG_INPUT_PCF50633_PMU=y
CONFIG_INPUT_PCF8574=y
CONFIG_INPUT_PWM_BEEPER=y
CONFIG_INPUT_PWM_VIBRA=y
CONFIG_INPUT_GPIO_ROTARY_ENCODER=y
CONFIG_INPUT_DA7280_HAPTICS=y
CONFIG_INPUT_DA9052_ONKEY=y
CONFIG_INPUT_DA9055_ONKEY=y
CONFIG_INPUT_DA9063_ONKEY=y
CONFIG_INPUT_WM831X_ON=y
CONFIG_INPUT_PCAP=y
CONFIG_INPUT_ADXL34X=y
CONFIG_INPUT_ADXL34X_I2C=y
CONFIG_INPUT_ADXL34X_SPI=y
CONFIG_INPUT_IBM_PANEL=y
CONFIG_INPUT_IMS_PCU=y
CONFIG_INPUT_IQS269A=y
CONFIG_INPUT_IQS626A=y
CONFIG_INPUT_IQS7222=y
CONFIG_INPUT_CMA3000=y
CONFIG_INPUT_CMA3000_I2C=y
CONFIG_INPUT_DRV260X_HAPTICS=y
CONFIG_INPUT_DRV2665_HAPTICS=y
CONFIG_INPUT_DRV2667_HAPTICS=y
CONFIG_INPUT_HISI_POWERKEY=y
CONFIG_INPUT_RAVE_SP_PWRBUTTON=y
CONFIG_INPUT_SC27XX_VIBRA=y
CONFIG_INPUT_RT5120_PWRKEY=y
CONFIG_INPUT_STPMIC1_ONKEY=y
CONFIG_RMI4_CORE=y
CONFIG_RMI4_I2C=y
CONFIG_RMI4_SPI=y
CONFIG_RMI4_SMB=y
CONFIG_RMI4_F03=y
CONFIG_RMI4_F03_SERIO=y
CONFIG_RMI4_2D_SENSOR=y
CONFIG_RMI4_F11=y
CONFIG_RMI4_F12=y
CONFIG_RMI4_F30=y
CONFIG_RMI4_F34=y
CONFIG_RMI4_F3A=y
CONFIG_RMI4_F54=y
CONFIG_RMI4_F55=y

#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_SERIO_SERPORT=y
CONFIG_SERIO_PARKBD=y
CONFIG_SERIO_LIBPS2=y
CONFIG_SERIO_RAW=y
CONFIG_SERIO_ALTERA_PS2=y
CONFIG_SERIO_PS2MULT=y
CONFIG_SERIO_ARC_PS2=y
CONFIG_SERIO_APBPS2=y
CONFIG_SERIO_OLPC_APSP=y
CONFIG_SERIO_SUN4I_PS2=y
CONFIG_SERIO_GPIO_PS2=y
CONFIG_USERIO=y
CONFIG_GAMEPORT=y
CONFIG_GAMEPORT_NS558=y
CONFIG_GAMEPORT_L4=y
# end of Hardware I/O ports
# end of Input device support

#
# Character devices
#
CONFIG_TTY=y
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_VT_HW_CONSOLE_BINDING=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
CONFIG_LDISC_AUTOLOAD=y

#
# Serial drivers
#
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
CONFIG_SERIAL_8250_16550A_VARIANTS=y
CONFIG_SERIAL_8250_FINTEK=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_CS=y
CONFIG_SERIAL_8250_MEN_MCB=y
CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_ASPEED_VUART=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_8250_DWLIB=y
CONFIG_SERIAL_8250_BCM2835AUX=y
CONFIG_SERIAL_8250_FSL=y
CONFIG_SERIAL_8250_DW=y
CONFIG_SERIAL_8250_EM=y
CONFIG_SERIAL_8250_IOC3=y
CONFIG_SERIAL_8250_RT288X=y
CONFIG_SERIAL_8250_OMAP=y
CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP=y
CONFIG_SERIAL_8250_LPC18XX=y
CONFIG_SERIAL_8250_MT6577=y
CONFIG_SERIAL_8250_UNIPHIER=y
CONFIG_SERIAL_8250_INGENIC=y
CONFIG_SERIAL_8250_PXA=y
CONFIG_SERIAL_8250_TEGRA=y
CONFIG_SERIAL_8250_BCM7271=y
CONFIG_SERIAL_OF_PLATFORM=y

#
# Non-8250 serial port support
#
CONFIG_SERIAL_AMBA_PL010=y
CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
CONFIG_SERIAL_ATMEL=y
CONFIG_SERIAL_ATMEL_CONSOLE=y
CONFIG_SERIAL_ATMEL_PDC=y
CONFIG_SERIAL_ATMEL_TTYAT=y
CONFIG_SERIAL_KGDB_NMI=y
CONFIG_SERIAL_MESON=y
CONFIG_SERIAL_MESON_CONSOLE=y
CONFIG_SERIAL_CLPS711X=y
CONFIG_SERIAL_CLPS711X_CONSOLE=y
CONFIG_SERIAL_SAMSUNG=y
CONFIG_SERIAL_SAMSUNG_UARTS_4=y
CONFIG_SERIAL_SAMSUNG_UARTS=4
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
CONFIG_SERIAL_TEGRA=y
CONFIG_SERIAL_TEGRA_TCU=y
CONFIG_SERIAL_TEGRA_TCU_CONSOLE=y
CONFIG_SERIAL_MAX3100=y
CONFIG_SERIAL_MAX310X=y
CONFIG_SERIAL_IMX=y
CONFIG_SERIAL_IMX_CONSOLE=y
CONFIG_SERIAL_IMX_EARLYCON=y
CONFIG_SERIAL_UARTLITE=y
CONFIG_SERIAL_UARTLITE_CONSOLE=y
CONFIG_SERIAL_UARTLITE_NR_UARTS=1
CONFIG_SERIAL_SH_SCI=y
CONFIG_SERIAL_SH_SCI_NR_UARTS=2
CONFIG_SERIAL_SH_SCI_CONSOLE=y
CONFIG_SERIAL_SH_SCI_EARLYCON=y
CONFIG_SERIAL_SH_SCI_DMA=y
CONFIG_SERIAL_HS_LPC32XX=y
CONFIG_SERIAL_HS_LPC32XX_CONSOLE=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_CONSOLE_POLL=y
CONFIG_SERIAL_MSM=y
CONFIG_SERIAL_MSM_CONSOLE=y
CONFIG_SERIAL_QCOM_GENI=y
CONFIG_SERIAL_QCOM_GENI_CONSOLE=y
CONFIG_SERIAL_VT8500=y
CONFIG_SERIAL_VT8500_CONSOLE=y
CONFIG_SERIAL_OMAP=y
CONFIG_SERIAL_OMAP_CONSOLE=y
CONFIG_SERIAL_SIFIVE=y
CONFIG_SERIAL_SIFIVE_CONSOLE=y
CONFIG_SERIAL_LANTIQ=y
CONFIG_SERIAL_LANTIQ_CONSOLE=y
CONFIG_SERIAL_QE=y
CONFIG_SERIAL_SCCNXP=y
CONFIG_SERIAL_SCCNXP_CONSOLE=y
CONFIG_SERIAL_SC16IS7XX_CORE=y
CONFIG_SERIAL_SC16IS7XX=y
CONFIG_SERIAL_SC16IS7XX_I2C=y
CONFIG_SERIAL_SC16IS7XX_SPI=y
CONFIG_SERIAL_TIMBERDALE=y
CONFIG_SERIAL_BCM63XX=y
CONFIG_SERIAL_BCM63XX_CONSOLE=y
CONFIG_SERIAL_ALTERA_JTAGUART=y
CONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE=y
CONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE_BYPASS=y
CONFIG_SERIAL_ALTERA_UART=y
CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4
CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200
CONFIG_SERIAL_ALTERA_UART_CONSOLE=y
CONFIG_SERIAL_MXS_AUART=y
CONFIG_SERIAL_MXS_AUART_CONSOLE=y
CONFIG_SERIAL_XILINX_PS_UART=y
CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
CONFIG_SERIAL_MPS2_UART_CONSOLE=y
CONFIG_SERIAL_MPS2_UART=y
CONFIG_SERIAL_ARC=y
CONFIG_SERIAL_ARC_CONSOLE=y
CONFIG_SERIAL_ARC_NR_PORTS=1
CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_SERIAL_FSL_LINFLEXUART=y
CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y
CONFIG_SERIAL_CONEXANT_DIGICOLOR=y
CONFIG_SERIAL_CONEXANT_DIGICOLOR_CONSOLE=y
CONFIG_SERIAL_ST_ASC=y
CONFIG_SERIAL_ST_ASC_CONSOLE=y
CONFIG_SERIAL_MEN_Z135=y
CONFIG_SERIAL_SPRD=y
CONFIG_SERIAL_SPRD_CONSOLE=y
CONFIG_SERIAL_STM32=y
CONFIG_SERIAL_STM32_CONSOLE=y
CONFIG_SERIAL_MVEBU_UART=y
CONFIG_SERIAL_MVEBU_CONSOLE=y
CONFIG_SERIAL_OWL=y
CONFIG_SERIAL_OWL_CONSOLE=y
CONFIG_SERIAL_RDA=y
CONFIG_SERIAL_RDA_CONSOLE=y
CONFIG_SERIAL_MILBEAUT_USIO=y
CONFIG_SERIAL_MILBEAUT_USIO_PORTS=4
CONFIG_SERIAL_MILBEAUT_USIO_CONSOLE=y
CONFIG_SERIAL_LITEUART=y
CONFIG_SERIAL_LITEUART_MAX_PORTS=1
CONFIG_SERIAL_LITEUART_CONSOLE=y
CONFIG_SERIAL_SUNPLUS=y
CONFIG_SERIAL_SUNPLUS_CONSOLE=y
# end of Serial drivers

CONFIG_SERIAL_MCTRL_GPIO=y
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_N_HDLC=y
CONFIG_GOLDFISH_TTY=y
CONFIG_GOLDFISH_TTY_EARLY_CONSOLE=y
CONFIG_N_GSM=y
CONFIG_NULL_TTY=y
CONFIG_HVC_DRIVER=y
CONFIG_RPMSG_TTY=y
CONFIG_SERIAL_DEV_BUS=y
CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
CONFIG_TTY_PRINTK=y
CONFIG_TTY_PRINTK_LEVEL=6
CONFIG_PRINTER=y
CONFIG_LP_CONSOLE=y
CONFIG_PPDEV=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_IPMI_HANDLER=y
CONFIG_IPMI_PLAT_DATA=y
CONFIG_IPMI_PANIC_EVENT=y
CONFIG_IPMI_PANIC_STRING=y
CONFIG_IPMI_DEVICE_INTERFACE=y
CONFIG_IPMI_SI=y
CONFIG_IPMI_SSIF=y
CONFIG_IPMI_IPMB=y
CONFIG_IPMI_WATCHDOG=y
CONFIG_IPMI_POWEROFF=y
CONFIG_IPMI_KCS_BMC=y
CONFIG_ASPEED_KCS_IPMI_BMC=y
CONFIG_NPCM7XX_KCS_IPMI_BMC=y
CONFIG_IPMI_KCS_BMC_CDEV_IPMI=y
CONFIG_IPMI_KCS_BMC_SERIO=y
CONFIG_ASPEED_BT_IPMI_BMC=y
CONFIG_IPMB_DEVICE_INTERFACE=y
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_TIMERIOMEM=y
CONFIG_HW_RANDOM_ATMEL=y
CONFIG_HW_RANDOM_BA431=y
CONFIG_HW_RANDOM_BCM2835=y
CONFIG_HW_RANDOM_IPROC_RNG200=y
CONFIG_HW_RANDOM_IXP4XX=y
CONFIG_HW_RANDOM_OMAP=y
CONFIG_HW_RANDOM_OMAP3_ROM=y
CONFIG_HW_RANDOM_VIRTIO=y
CONFIG_HW_RANDOM_IMX_RNGC=y
CONFIG_HW_RANDOM_NOMADIK=y
CONFIG_HW_RANDOM_STM32=y
CONFIG_HW_RANDOM_POLARFIRE_SOC=y
CONFIG_HW_RANDOM_MESON=y
CONFIG_HW_RANDOM_MTK=y
CONFIG_HW_RANDOM_EXYNOS=y
CONFIG_HW_RANDOM_NPCM=y
CONFIG_HW_RANDOM_KEYSTONE=y
CONFIG_HW_RANDOM_CCTRNG=y
CONFIG_HW_RANDOM_XIPHERA=y

#
# PCMCIA character devices
#
CONFIG_SYNCLINK_CS=y
CONFIG_CARDMAN_4000=y
CONFIG_CARDMAN_4040=y
CONFIG_SCR24X=y
CONFIG_IPWIRELESS=y
# end of PCMCIA character devices

CONFIG_DEVMEM=y
CONFIG_TCG_TPM=y
CONFIG_HW_RANDOM_TPM=y
CONFIG_TCG_TIS_CORE=y
CONFIG_TCG_TIS=y
CONFIG_TCG_TIS_SPI=y
CONFIG_TCG_TIS_SPI_CR50=y
CONFIG_TCG_TIS_I2C=y
CONFIG_TCG_TIS_SYNQUACER=y
CONFIG_TCG_TIS_I2C_CR50=y
CONFIG_TCG_TIS_I2C_ATMEL=y
CONFIG_TCG_TIS_I2C_INFINEON=y
CONFIG_TCG_TIS_I2C_NUVOTON=y
CONFIG_TCG_VTPM_PROXY=y
CONFIG_TCG_TIS_ST33ZP24=y
CONFIG_TCG_TIS_ST33ZP24_I2C=y
CONFIG_TCG_TIS_ST33ZP24_SPI=y
CONFIG_XILLYBUS_CLASS=y
CONFIG_XILLYBUS=y
CONFIG_XILLYBUS_OF=y
CONFIG_XILLYUSB=y
CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RANDOM_TRUST_BOOTLOADER=y
# end of Character devices

#
# I2C support
#
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MUX=y

#
# Multiplexer I2C Chip support
#
CONFIG_I2C_ARB_GPIO_CHALLENGE=y
CONFIG_I2C_MUX_GPIO=y
CONFIG_I2C_MUX_GPMUX=y
CONFIG_I2C_MUX_LTC4306=y
CONFIG_I2C_MUX_PCA9541=y
CONFIG_I2C_MUX_PCA954x=y
CONFIG_I2C_MUX_PINCTRL=y
CONFIG_I2C_MUX_REG=y
CONFIG_I2C_DEMUX_PINCTRL=y
CONFIG_I2C_MUX_MLXCPLD=y
# end of Multiplexer I2C Chip support

CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_SMBUS=y
CONFIG_I2C_ALGOBIT=y
CONFIG_I2C_ALGOPCA=y

#
# I2C Hardware Bus support
#
CONFIG_I2C_HIX5HD2=y

#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
CONFIG_I2C_ALTERA=y
CONFIG_I2C_ASPEED=y
CONFIG_I2C_AT91=y
CONFIG_I2C_AT91_SLAVE_EXPERIMENTAL=y
CONFIG_I2C_AXXIA=y
CONFIG_I2C_BCM2835=y
CONFIG_I2C_BCM_IPROC=y
CONFIG_I2C_BCM_KONA=y
CONFIG_I2C_BRCMSTB=y
CONFIG_I2C_CADENCE=y
CONFIG_I2C_CBUS_GPIO=y
CONFIG_I2C_DAVINCI=y
CONFIG_I2C_DESIGNWARE_CORE=y
CONFIG_I2C_DESIGNWARE_SLAVE=y
CONFIG_I2C_DESIGNWARE_PLATFORM=y
CONFIG_I2C_DIGICOLOR=y
CONFIG_I2C_EMEV2=y
CONFIG_I2C_EXYNOS5=y
CONFIG_I2C_GPIO=y
CONFIG_I2C_GPIO_FAULT_INJECTOR=y
CONFIG_I2C_HIGHLANDER=y
CONFIG_I2C_HISI=y
CONFIG_I2C_IMG=y
CONFIG_I2C_IMX=y
CONFIG_I2C_IMX_LPI2C=y
CONFIG_I2C_IOP3XX=y
CONFIG_I2C_JZ4780=y
CONFIG_I2C_KEMPLD=y
CONFIG_I2C_LPC2K=y
CONFIG_I2C_MESON=y
CONFIG_I2C_MICROCHIP_CORE=y
CONFIG_I2C_MT65XX=y
CONFIG_I2C_MT7621=y
CONFIG_I2C_MV64XXX=y
CONFIG_I2C_MXS=y
CONFIG_I2C_NPCM=y
CONFIG_I2C_OCORES=y
CONFIG_I2C_OMAP=y
CONFIG_I2C_OWL=y
CONFIG_I2C_APPLE=y
CONFIG_I2C_PCA_PLATFORM=y
CONFIG_I2C_PNX=y
CONFIG_I2C_PXA=y
CONFIG_I2C_PXA_SLAVE=y
CONFIG_I2C_QCOM_CCI=y
CONFIG_I2C_QCOM_GENI=y
CONFIG_I2C_QUP=y
CONFIG_I2C_RIIC=y
CONFIG_I2C_RK3X=y
CONFIG_I2C_RZV2M=y
CONFIG_I2C_S3C2410=y
CONFIG_I2C_SH_MOBILE=y
CONFIG_I2C_SIMTEC=y
CONFIG_I2C_SPRD=y
CONFIG_I2C_ST=y
CONFIG_I2C_STM32F4=y
CONFIG_I2C_STM32F7=y
CONFIG_I2C_SUN6I_P2WI=y
CONFIG_I2C_SYNQUACER=y
CONFIG_I2C_TEGRA_BPMP=y
CONFIG_I2C_UNIPHIER=y
CONFIG_I2C_UNIPHIER_F=y
CONFIG_I2C_VERSATILE=y
CONFIG_I2C_WMT=y
CONFIG_I2C_XILINX=y
CONFIG_I2C_XLP9XX=y
CONFIG_I2C_RCAR=y

#
# External I2C/SMBus adapter drivers
#
CONFIG_I2C_DIOLAN_U2C=y
CONFIG_I2C_DLN2=y
CONFIG_I2C_CP2615=y
CONFIG_I2C_PARPORT=y
CONFIG_I2C_ROBOTFUZZ_OSIF=y
CONFIG_I2C_TAOS_EVM=y
CONFIG_I2C_TINY_USB=y
CONFIG_I2C_VIPERBOARD=y

#
# Other I2C/SMBus bus drivers
#
CONFIG_I2C_MLXCPLD=y
CONFIG_I2C_CROS_EC_TUNNEL=y
CONFIG_I2C_FSI=y
CONFIG_I2C_VIRTIO=y
# end of I2C Hardware Bus support

CONFIG_I2C_STUB=m
CONFIG_I2C_SLAVE=y
CONFIG_I2C_SLAVE_EEPROM=y
CONFIG_I2C_SLAVE_TESTUNIT=y
CONFIG_I2C_DEBUG_CORE=y
CONFIG_I2C_DEBUG_ALGO=y
CONFIG_I2C_DEBUG_BUS=y
# end of I2C support

CONFIG_I3C=y
CONFIG_CDNS_I3C_MASTER=y
CONFIG_DW_I3C_MASTER=y
CONFIG_SVC_I3C_MASTER=y
CONFIG_MIPI_I3C_HCI=y
CONFIG_SPI=y
CONFIG_SPI_DEBUG=y
CONFIG_SPI_MASTER=y
CONFIG_SPI_MEM=y

#
# SPI Master Controller Drivers
#
CONFIG_SPI_ALTERA=y
CONFIG_SPI_ALTERA_CORE=y
CONFIG_SPI_ALTERA_DFL=y
CONFIG_SPI_AR934X=y
CONFIG_SPI_ATH79=y
CONFIG_SPI_ARMADA_3700=y
CONFIG_SPI_ASPEED_SMC=y
CONFIG_SPI_ATMEL=y
CONFIG_SPI_AT91_USART=y
CONFIG_SPI_ATMEL_QUADSPI=y
CONFIG_SPI_AXI_SPI_ENGINE=y
CONFIG_SPI_BCM2835=y
CONFIG_SPI_BCM2835AUX=y
CONFIG_SPI_BCM63XX=y
CONFIG_SPI_BCM63XX_HSSPI=y
CONFIG_SPI_BCM_QSPI=y
CONFIG_SPI_BITBANG=y
CONFIG_SPI_BUTTERFLY=y
CONFIG_SPI_CADENCE=y
CONFIG_SPI_CADENCE_QUADSPI=y
CONFIG_SPI_CADENCE_XSPI=y
CONFIG_SPI_CLPS711X=y
CONFIG_SPI_DESIGNWARE=y
CONFIG_SPI_DW_DMA=y
CONFIG_SPI_DW_MMIO=y
CONFIG_SPI_DW_BT1=y
CONFIG_SPI_DW_BT1_DIRMAP=y
CONFIG_SPI_DLN2=y
CONFIG_SPI_EP93XX=y
CONFIG_SPI_FSI=y
CONFIG_SPI_FSL_LPSPI=y
CONFIG_SPI_FSL_QUADSPI=y
CONFIG_SPI_GXP=y
CONFIG_SPI_HISI_KUNPENG=y
CONFIG_SPI_HISI_SFC_V3XX=y
CONFIG_SPI_NXP_FLEXSPI=y
CONFIG_SPI_GPIO=y
CONFIG_SPI_IMG_SPFI=y
CONFIG_SPI_IMX=y
CONFIG_SPI_INGENIC=y
CONFIG_SPI_INTEL=y
CONFIG_SPI_INTEL_PLATFORM=y
CONFIG_SPI_JCORE=y
CONFIG_SPI_LM70_LLP=y
CONFIG_SPI_LP8841_RTC=y
CONFIG_SPI_FSL_LIB=y
CONFIG_SPI_FSL_SPI=y
CONFIG_SPI_FSL_DSPI=y
CONFIG_SPI_MESON_SPICC=y
CONFIG_SPI_MESON_SPIFC=y
CONFIG_SPI_MICROCHIP_CORE=y
CONFIG_SPI_MICROCHIP_CORE_QSPI=y
CONFIG_SPI_MT65XX=y
CONFIG_SPI_MT7621=y
CONFIG_SPI_MTK_NOR=y
CONFIG_SPI_MTK_SNFI=y
CONFIG_SPI_NPCM_FIU=y
CONFIG_SPI_NPCM_PSPI=y
CONFIG_SPI_LANTIQ_SSC=y
CONFIG_SPI_OC_TINY=y
CONFIG_SPI_OMAP24XX=y
CONFIG_SPI_TI_QSPI=y
CONFIG_SPI_OMAP_100K=y
CONFIG_SPI_ORION=y
CONFIG_SPI_PIC32=y
CONFIG_SPI_PIC32_SQI=y
CONFIG_SPI_PXA2XX=y
CONFIG_SPI_ROCKCHIP=y
CONFIG_SPI_ROCKCHIP_SFC=y
CONFIG_SPI_RPCIF=y
CONFIG_SPI_RSPI=y
CONFIG_SPI_QUP=y
CONFIG_SPI_QCOM_GENI=y
CONFIG_SPI_S3C64XX=y
CONFIG_SPI_SC18IS602=y
CONFIG_SPI_SH_MSIOF=y
CONFIG_SPI_SH=y
CONFIG_SPI_SH_HSPI=y
CONFIG_SPI_SIFIVE=y
CONFIG_SPI_SLAVE_MT27XX=y
CONFIG_SPI_SPRD=y
CONFIG_SPI_SPRD_ADI=y
CONFIG_SPI_STM32=y
CONFIG_SPI_STM32_QSPI=y
CONFIG_SPI_ST_SSC4=y
CONFIG_SPI_SUN4I=y
CONFIG_SPI_SUN6I=y
CONFIG_SPI_SUNPLUS_SP7021=y
CONFIG_SPI_SYNQUACER=y
CONFIG_SPI_MXIC=y
CONFIG_SPI_TEGRA210_QUAD=y
CONFIG_SPI_TEGRA114=y
CONFIG_SPI_TEGRA20_SFLASH=y
CONFIG_SPI_TEGRA20_SLINK=y
CONFIG_SPI_UNIPHIER=y
CONFIG_SPI_XCOMM=y
CONFIG_SPI_XILINX=y
CONFIG_SPI_XLP=y
CONFIG_SPI_XTENSA_XTFPGA=y
CONFIG_SPI_ZYNQ_QSPI=y
CONFIG_SPI_ZYNQMP_GQSPI=y
CONFIG_SPI_AMD=y

#
# SPI Multiplexer support
#
CONFIG_SPI_MUX=y

#
# SPI Protocol Masters
#
CONFIG_SPI_SPIDEV=y
CONFIG_SPI_LOOPBACK_TEST=m
CONFIG_SPI_TLE62X0=y
CONFIG_SPI_SLAVE=y
CONFIG_SPI_SLAVE_TIME=y
CONFIG_SPI_SLAVE_SYSTEM_CONTROL=y
CONFIG_SPI_DYNAMIC=y
CONFIG_SPMI=y
CONFIG_SPMI_HISI3670=y
CONFIG_SPMI_MSM_PMIC_ARB=y
CONFIG_SPMI_MTK_PMIF=y
CONFIG_HSI=y
CONFIG_HSI_BOARDINFO=y

#
# HSI controllers
#

#
# HSI clients
#
CONFIG_HSI_CHAR=y
CONFIG_PPS=y
CONFIG_PPS_DEBUG=y

#
# PPS clients support
#
CONFIG_PPS_CLIENT_KTIMER=y
CONFIG_PPS_CLIENT_LDISC=y
CONFIG_PPS_CLIENT_PARPORT=y
CONFIG_PPS_CLIENT_GPIO=y

#
# PPS generators support
#

#
# PTP clock support
#
CONFIG_PTP_1588_CLOCK=y
CONFIG_PTP_1588_CLOCK_OPTIONAL=y
CONFIG_PTP_1588_CLOCK_DTE=y
CONFIG_PTP_1588_CLOCK_QORIQ=y
CONFIG_DP83640_PHY=y
CONFIG_PTP_1588_CLOCK_INES=y
CONFIG_PTP_1588_CLOCK_IDT82P33=y
CONFIG_PTP_1588_CLOCK_IDTCM=y
# end of PTP clock support

CONFIG_PINCTRL=y
CONFIG_GENERIC_PINCTRL_GROUPS=y
CONFIG_PINMUX=y
CONFIG_GENERIC_PINMUX_FUNCTIONS=y
CONFIG_PINCONF=y
CONFIG_GENERIC_PINCONF=y
CONFIG_DEBUG_PINCTRL=y
CONFIG_PINCTRL_AMD=y
CONFIG_PINCTRL_AS3722=y
CONFIG_PINCTRL_AT91PIO4=y
CONFIG_PINCTRL_AXP209=y
CONFIG_PINCTRL_BM1880=y
CONFIG_PINCTRL_CY8C95X0=y
CONFIG_PINCTRL_DA850_PUPD=y
CONFIG_PINCTRL_DA9062=y
CONFIG_PINCTRL_EQUILIBRIUM=y
CONFIG_PINCTRL_INGENIC=y
CONFIG_PINCTRL_LPC18XX=y
CONFIG_PINCTRL_MAX77620=y
CONFIG_PINCTRL_MCP23S08_I2C=y
CONFIG_PINCTRL_MCP23S08_SPI=y
CONFIG_PINCTRL_MCP23S08=y
CONFIG_PINCTRL_MICROCHIP_SGPIO=y
CONFIG_PINCTRL_OCELOT=y
CONFIG_PINCTRL_PALMAS=y
CONFIG_PINCTRL_PISTACHIO=y
CONFIG_PINCTRL_ROCKCHIP=y
CONFIG_PINCTRL_SINGLE=y
CONFIG_PINCTRL_STMFX=y
CONFIG_PINCTRL_SX150X=y
CONFIG_PINCTRL_OWL=y
CONFIG_PINCTRL_S500=y
CONFIG_PINCTRL_S700=y
CONFIG_PINCTRL_S900=y
CONFIG_PINCTRL_ASPEED=y
CONFIG_PINCTRL_ASPEED_G4=y
CONFIG_PINCTRL_ASPEED_G5=y
CONFIG_PINCTRL_ASPEED_G6=y
CONFIG_PINCTRL_BCM281XX=y
CONFIG_PINCTRL_BCM2835=y
CONFIG_PINCTRL_BCM4908=y
CONFIG_PINCTRL_BCM63XX=y
CONFIG_PINCTRL_BCM6318=y
CONFIG_PINCTRL_BCM6328=y
CONFIG_PINCTRL_BCM6358=y
CONFIG_PINCTRL_BCM6362=y
CONFIG_PINCTRL_BCM6368=y
CONFIG_PINCTRL_BCM63268=y
CONFIG_PINCTRL_IPROC_GPIO=y
CONFIG_PINCTRL_CYGNUS_MUX=y
CONFIG_PINCTRL_NS=y
CONFIG_PINCTRL_NSP_GPIO=y
CONFIG_PINCTRL_NS2_MUX=y
CONFIG_PINCTRL_NSP_MUX=y
CONFIG_PINCTRL_BERLIN=y
CONFIG_PINCTRL_AS370=y
CONFIG_PINCTRL_BERLIN_BG4CT=y
CONFIG_PINCTRL_LOCHNAGAR=y
CONFIG_PINCTRL_MADERA=y
CONFIG_PINCTRL_CS47L15=y
CONFIG_PINCTRL_CS47L35=y
CONFIG_PINCTRL_CS47L85=y
CONFIG_PINCTRL_CS47L90=y
CONFIG_PINCTRL_CS47L92=y
CONFIG_PINCTRL_IMX=y
CONFIG_PINCTRL_IMX8MM=y
CONFIG_PINCTRL_IMX8MN=y
CONFIG_PINCTRL_IMX8MP=y
CONFIG_PINCTRL_IMX8MQ=y

#
# Intel pinctrl drivers
#
# end of Intel pinctrl drivers

#
# MediaTek pinctrl drivers
#
CONFIG_EINT_MTK=y
CONFIG_PINCTRL_MTK=y
CONFIG_PINCTRL_MTK_V2=y
CONFIG_PINCTRL_MTK_MOORE=y
CONFIG_PINCTRL_MTK_PARIS=y
CONFIG_PINCTRL_MT2701=y
CONFIG_PINCTRL_MT7623=y
CONFIG_PINCTRL_MT7629=y
CONFIG_PINCTRL_MT8135=y
CONFIG_PINCTRL_MT8127=y
CONFIG_PINCTRL_MT2712=y
CONFIG_PINCTRL_MT6765=y
CONFIG_PINCTRL_MT6779=y
CONFIG_PINCTRL_MT6795=y
CONFIG_PINCTRL_MT6797=y
CONFIG_PINCTRL_MT7622=y
CONFIG_PINCTRL_MT7986=y
CONFIG_PINCTRL_MT8167=y
CONFIG_PINCTRL_MT8173=y
CONFIG_PINCTRL_MT8183=y
CONFIG_PINCTRL_MT8186=y
CONFIG_PINCTRL_MT8188=y
CONFIG_PINCTRL_MT8192=y
CONFIG_PINCTRL_MT8195=y
CONFIG_PINCTRL_MT8365=y
CONFIG_PINCTRL_MT8516=y
CONFIG_PINCTRL_MT6397=y
# end of MediaTek pinctrl drivers

CONFIG_PINCTRL_MESON=y
CONFIG_PINCTRL_WPCM450=y
CONFIG_PINCTRL_NPCM7XX=y
CONFIG_PINCTRL_PXA=y
CONFIG_PINCTRL_PXA25X=y
CONFIG_PINCTRL_PXA27X=y
CONFIG_PINCTRL_MSM=y
CONFIG_PINCTRL_APQ8064=y
CONFIG_PINCTRL_APQ8084=y
CONFIG_PINCTRL_IPQ4019=y
CONFIG_PINCTRL_IPQ8064=y
CONFIG_PINCTRL_IPQ8074=y
CONFIG_PINCTRL_IPQ6018=y
CONFIG_PINCTRL_MSM8226=y
CONFIG_PINCTRL_MSM8660=y
CONFIG_PINCTRL_MSM8960=y
CONFIG_PINCTRL_MDM9607=y
CONFIG_PINCTRL_MDM9615=y
CONFIG_PINCTRL_MSM8X74=y
CONFIG_PINCTRL_MSM8909=y
CONFIG_PINCTRL_MSM8916=y
CONFIG_PINCTRL_MSM8953=y
CONFIG_PINCTRL_MSM8976=y
CONFIG_PINCTRL_MSM8994=y
CONFIG_PINCTRL_MSM8996=y
CONFIG_PINCTRL_MSM8998=y
CONFIG_PINCTRL_QCM2290=y
CONFIG_PINCTRL_QCS404=y
CONFIG_PINCTRL_QCOM_SPMI_PMIC=y
CONFIG_PINCTRL_QCOM_SSBI_PMIC=y
CONFIG_PINCTRL_SC7180=y
CONFIG_PINCTRL_SC7280=y
CONFIG_PINCTRL_SC7280_LPASS_LPI=y
CONFIG_PINCTRL_SC8180X=y
CONFIG_PINCTRL_SC8280XP=y
CONFIG_PINCTRL_SDM660=y
CONFIG_PINCTRL_SDM845=y
CONFIG_PINCTRL_SDX55=y
CONFIG_PINCTRL_SM6115=y
CONFIG_PINCTRL_SM6125=y
CONFIG_PINCTRL_SM6350=y
CONFIG_PINCTRL_SM6375=y
CONFIG_PINCTRL_SDX65=y
CONFIG_PINCTRL_SM8150=y
CONFIG_PINCTRL_SM8250=y
CONFIG_PINCTRL_SM8250_LPASS_LPI=y
CONFIG_PINCTRL_SM8350=y
CONFIG_PINCTRL_SM8450=y
CONFIG_PINCTRL_SM8450_LPASS_LPI=y
CONFIG_PINCTRL_SC8280XP_LPASS_LPI=y
CONFIG_PINCTRL_LPASS_LPI=y

#
# Renesas pinctrl drivers
#
CONFIG_PINCTRL_RENESAS=y
CONFIG_PINCTRL_SH_PFC=y
CONFIG_PINCTRL_SH_PFC_GPIO=y
CONFIG_PINCTRL_SH_FUNC_GPIO=y
CONFIG_PINCTRL_PFC_EMEV2=y
CONFIG_PINCTRL_PFC_R8A77995=y
CONFIG_PINCTRL_PFC_R8A7794=y
CONFIG_PINCTRL_PFC_R8A77990=y
CONFIG_PINCTRL_PFC_R8A7779=y
CONFIG_PINCTRL_PFC_R8A7790=y
CONFIG_PINCTRL_PFC_R8A77950=y
CONFIG_PINCTRL_PFC_R8A77951=y
CONFIG_PINCTRL_PFC_R8A7778=y
CONFIG_PINCTRL_PFC_R8A7793=y
CONFIG_PINCTRL_PFC_R8A7791=y
CONFIG_PINCTRL_PFC_R8A77965=y
CONFIG_PINCTRL_PFC_R8A77960=y
CONFIG_PINCTRL_PFC_R8A77961=y
CONFIG_PINCTRL_PFC_R8A779F0=y
CONFIG_PINCTRL_PFC_R8A7792=y
CONFIG_PINCTRL_PFC_R8A77980=y
CONFIG_PINCTRL_PFC_R8A77970=y
CONFIG_PINCTRL_PFC_R8A779A0=y
CONFIG_PINCTRL_PFC_R8A779G0=y
CONFIG_PINCTRL_PFC_R8A7740=y
CONFIG_PINCTRL_PFC_R8A73A4=y
CONFIG_PINCTRL_RZA1=y
CONFIG_PINCTRL_RZA2=y
CONFIG_PINCTRL_RZG2L=y
CONFIG_PINCTRL_PFC_R8A77470=y
CONFIG_PINCTRL_PFC_R8A7745=y
CONFIG_PINCTRL_PFC_R8A7742=y
CONFIG_PINCTRL_PFC_R8A7743=y
CONFIG_PINCTRL_PFC_R8A7744=y
CONFIG_PINCTRL_PFC_R8A774C0=y
CONFIG_PINCTRL_PFC_R8A774E1=y
CONFIG_PINCTRL_PFC_R8A774A1=y
CONFIG_PINCTRL_PFC_R8A774B1=y
CONFIG_PINCTRL_RZN1=y
CONFIG_PINCTRL_RZV2M=y
CONFIG_PINCTRL_PFC_SH7203=y
CONFIG_PINCTRL_PFC_SH7264=y
CONFIG_PINCTRL_PFC_SH7269=y
CONFIG_PINCTRL_PFC_SH7720=y
CONFIG_PINCTRL_PFC_SH7722=y
CONFIG_PINCTRL_PFC_SH7734=y
CONFIG_PINCTRL_PFC_SH7757=y
CONFIG_PINCTRL_PFC_SH7785=y
CONFIG_PINCTRL_PFC_SH7786=y
CONFIG_PINCTRL_PFC_SH73A0=y
CONFIG_PINCTRL_PFC_SH7723=y
CONFIG_PINCTRL_PFC_SH7724=y
CONFIG_PINCTRL_PFC_SHX3=y
# end of Renesas pinctrl drivers

CONFIG_PINCTRL_SAMSUNG=y
CONFIG_PINCTRL_EXYNOS=y
CONFIG_PINCTRL_EXYNOS_ARM=y
CONFIG_PINCTRL_EXYNOS_ARM64=y
CONFIG_PINCTRL_S3C24XX=y
CONFIG_PINCTRL_S3C64XX=y
CONFIG_PINCTRL_SPRD=y
CONFIG_PINCTRL_SPRD_SC9860=y
CONFIG_PINCTRL_STARFIVE_JH7100=y
CONFIG_PINCTRL_STM32=y
CONFIG_PINCTRL_STM32F429=y
CONFIG_PINCTRL_STM32F469=y
CONFIG_PINCTRL_STM32F746=y
CONFIG_PINCTRL_STM32F769=y
CONFIG_PINCTRL_STM32H743=y
CONFIG_PINCTRL_STM32MP135=y
CONFIG_PINCTRL_STM32MP157=y
CONFIG_PINCTRL_TI_IODELAY=y
CONFIG_PINCTRL_UNIPHIER=y
CONFIG_PINCTRL_UNIPHIER_LD4=y
CONFIG_PINCTRL_UNIPHIER_PRO4=y
CONFIG_PINCTRL_UNIPHIER_SLD8=y
CONFIG_PINCTRL_UNIPHIER_PRO5=y
CONFIG_PINCTRL_UNIPHIER_PXS2=y
CONFIG_PINCTRL_UNIPHIER_LD6B=y
CONFIG_PINCTRL_UNIPHIER_LD11=y
CONFIG_PINCTRL_UNIPHIER_LD20=y
CONFIG_PINCTRL_UNIPHIER_PXS3=y
CONFIG_PINCTRL_UNIPHIER_NX1=y
CONFIG_PINCTRL_VISCONTI=y
CONFIG_PINCTRL_TMPV7700=y
CONFIG_GPIOLIB=y
CONFIG_GPIOLIB_FASTPATH_LIMIT=512
CONFIG_OF_GPIO=y
CONFIG_GPIOLIB_IRQCHIP=y
CONFIG_DEBUG_GPIO=y
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_CDEV=y
CONFIG_GPIO_CDEV_V1=y
CONFIG_GPIO_GENERIC=y
CONFIG_GPIO_REGMAP=y
CONFIG_GPIO_MAX730X=y

#
# Memory mapped GPIO drivers
#
CONFIG_GPIO_74XX_MMIO=y
CONFIG_GPIO_ALTERA=y
CONFIG_GPIO_ASPEED=y
CONFIG_GPIO_ASPEED_SGPIO=y
CONFIG_GPIO_ATH79=y
CONFIG_GPIO_RASPBERRYPI_EXP=y
CONFIG_GPIO_BCM_KONA=y
CONFIG_GPIO_BCM_XGS_IPROC=y
CONFIG_GPIO_BRCMSTB=y
CONFIG_GPIO_CADENCE=y
CONFIG_GPIO_CLPS711X=y
CONFIG_GPIO_DWAPB=y
CONFIG_GPIO_EIC_SPRD=y
CONFIG_GPIO_EM=y
CONFIG_GPIO_FTGPIO010=y
CONFIG_GPIO_GENERIC_PLATFORM=y
CONFIG_GPIO_GRGPIO=y
CONFIG_GPIO_HISI=y
CONFIG_GPIO_HLWD=y
CONFIG_GPIO_IMX_SCU=y
CONFIG_GPIO_IOP=y
CONFIG_GPIO_LOGICVC=y
CONFIG_GPIO_LPC18XX=y
CONFIG_GPIO_LPC32XX=y
CONFIG_GPIO_MB86S7X=y
CONFIG_GPIO_MENZ127=y
CONFIG_GPIO_MPC8XXX=y
CONFIG_GPIO_MT7621=y
CONFIG_GPIO_MXC=y
CONFIG_GPIO_MXS=y
CONFIG_GPIO_PMIC_EIC_SPRD=y
CONFIG_GPIO_PXA=y
CONFIG_GPIO_RCAR=y
CONFIG_GPIO_RDA=y
CONFIG_GPIO_ROCKCHIP=y
CONFIG_GPIO_SAMA5D2_PIOBU=y
CONFIG_GPIO_SIFIVE=y
CONFIG_GPIO_SIOX=y
CONFIG_GPIO_SNPS_CREG=y
CONFIG_GPIO_SPRD=y
CONFIG_GPIO_STP_XWAY=y
CONFIG_GPIO_SYSCON=y
CONFIG_GPIO_TEGRA=y
CONFIG_GPIO_TEGRA186=y
CONFIG_GPIO_TS4800=y
CONFIG_GPIO_UNIPHIER=y
CONFIG_GPIO_VISCONTI=y
CONFIG_GPIO_WCD934X=y
CONFIG_GPIO_XGENE_SB=y
CONFIG_GPIO_XILINX=y
CONFIG_GPIO_XLP=y
CONFIG_GPIO_AMD_FCH=y
CONFIG_GPIO_IDT3243X=y
# end of Memory mapped GPIO drivers

#
# I2C GPIO expanders
#
CONFIG_GPIO_ADNP=y
CONFIG_GPIO_GW_PLD=y
CONFIG_GPIO_MAX7300=y
CONFIG_GPIO_MAX732X=y
CONFIG_GPIO_MAX732X_IRQ=y
CONFIG_GPIO_PCA953X=y
CONFIG_GPIO_PCA953X_IRQ=y
CONFIG_GPIO_PCA9570=y
CONFIG_GPIO_PCF857X=y
CONFIG_GPIO_TPIC2810=y
CONFIG_GPIO_TS4900=y
# end of I2C GPIO expanders

#
# MFD GPIO expanders
#
CONFIG_GPIO_ADP5520=y
CONFIG_GPIO_ARIZONA=y
CONFIG_GPIO_BD71815=y
CONFIG_GPIO_BD71828=y
CONFIG_GPIO_BD9571MWV=y
CONFIG_GPIO_CRYSTAL_COVE=y
CONFIG_GPIO_DA9052=y
CONFIG_GPIO_DA9055=y
CONFIG_GPIO_DLN2=y
CONFIG_GPIO_KEMPLD=y
CONFIG_GPIO_LP3943=y
CONFIG_GPIO_LP873X=y
CONFIG_GPIO_LP87565=y
CONFIG_GPIO_MADERA=y
CONFIG_GPIO_MAX77620=y
CONFIG_GPIO_MAX77650=y
CONFIG_GPIO_PALMAS=y
CONFIG_GPIO_RC5T583=y
CONFIG_GPIO_SL28CPLD=y
CONFIG_GPIO_STMPE=y
CONFIG_GPIO_TC3589X=y
CONFIG_GPIO_TPS65086=y
CONFIG_GPIO_TPS65218=y
CONFIG_GPIO_TPS6586X=y
CONFIG_GPIO_TPS65910=y
CONFIG_GPIO_TPS65912=y
CONFIG_GPIO_TWL4030=y
CONFIG_GPIO_TWL6040=y
CONFIG_GPIO_UCB1400=y
CONFIG_GPIO_WM831X=y
CONFIG_GPIO_WM8350=y
CONFIG_GPIO_WM8994=y
# end of MFD GPIO expanders

#
# SPI GPIO expanders
#
CONFIG_GPIO_74X164=y
CONFIG_GPIO_MAX3191X=y
CONFIG_GPIO_MAX7301=y
CONFIG_GPIO_MC33880=y
CONFIG_GPIO_PISOSR=y
CONFIG_GPIO_XRA1403=y
CONFIG_GPIO_MOXTET=y
# end of SPI GPIO expanders

#
# USB GPIO expanders
#
CONFIG_GPIO_VIPERBOARD=y
# end of USB GPIO expanders

#
# Virtual GPIO drivers
#
CONFIG_GPIO_AGGREGATOR=y
CONFIG_GPIO_MOCKUP=y
CONFIG_GPIO_VIRTIO=y
CONFIG_GPIO_SIM=y
# end of Virtual GPIO drivers

CONFIG_W1=y
CONFIG_W1_CON=y

#
# 1-wire Bus Masters
#
CONFIG_W1_MASTER_DS2490=y
CONFIG_W1_MASTER_DS2482=y
CONFIG_W1_MASTER_MXC=y
CONFIG_W1_MASTER_DS1WM=y
CONFIG_W1_MASTER_GPIO=y
CONFIG_W1_MASTER_SGI=y
# end of 1-wire Bus Masters

#
# 1-wire Slaves
#
CONFIG_W1_SLAVE_THERM=y
CONFIG_W1_SLAVE_SMEM=y
CONFIG_W1_SLAVE_DS2405=y
CONFIG_W1_SLAVE_DS2408=y
CONFIG_W1_SLAVE_DS2408_READBACK=y
CONFIG_W1_SLAVE_DS2413=y
CONFIG_W1_SLAVE_DS2406=y
CONFIG_W1_SLAVE_DS2423=y
CONFIG_W1_SLAVE_DS2805=y
CONFIG_W1_SLAVE_DS2430=y
CONFIG_W1_SLAVE_DS2431=y
CONFIG_W1_SLAVE_DS2433=y
CONFIG_W1_SLAVE_DS2433_CRC=y
CONFIG_W1_SLAVE_DS2438=y
CONFIG_W1_SLAVE_DS250X=y
CONFIG_W1_SLAVE_DS2780=y
CONFIG_W1_SLAVE_DS2781=y
CONFIG_W1_SLAVE_DS28E04=y
CONFIG_W1_SLAVE_DS28E17=y
# end of 1-wire Slaves

CONFIG_POWER_RESET=y
CONFIG_POWER_RESET_AS3722=y
CONFIG_POWER_RESET_ATC260X=y
CONFIG_POWER_RESET_BRCMKONA=y
CONFIG_POWER_RESET_BRCMSTB=y
CONFIG_POWER_RESET_GEMINI_POWEROFF=y
CONFIG_POWER_RESET_GPIO=y
CONFIG_POWER_RESET_GPIO_RESTART=y
CONFIG_POWER_RESET_LINKSTATION=y
CONFIG_POWER_RESET_OCELOT_RESET=y
CONFIG_POWER_RESET_LTC2952=y
CONFIG_POWER_RESET_MT6323=y
CONFIG_POWER_RESET_REGULATOR=y
CONFIG_POWER_RESET_RESTART=y
CONFIG_POWER_RESET_TPS65086=y
CONFIG_POWER_RESET_KEYSTONE=y
CONFIG_POWER_RESET_SYSCON=y
CONFIG_POWER_RESET_SYSCON_POWEROFF=y
CONFIG_POWER_RESET_RMOBILE=y
CONFIG_REBOOT_MODE=y
CONFIG_SYSCON_REBOOT_MODE=y
CONFIG_POWER_RESET_SC27XX=y
CONFIG_NVMEM_REBOOT_MODE=y
CONFIG_POWER_SUPPLY=y
CONFIG_POWER_SUPPLY_DEBUG=y
CONFIG_POWER_SUPPLY_HWMON=y
CONFIG_PDA_POWER=y
CONFIG_GENERIC_ADC_BATTERY=y
CONFIG_IP5XXX_POWER=y
CONFIG_MAX8925_POWER=y
CONFIG_WM831X_BACKUP=y
CONFIG_WM831X_POWER=y
CONFIG_WM8350_POWER=y
CONFIG_TEST_POWER=y
CONFIG_BATTERY_88PM860X=y
CONFIG_CHARGER_ADP5061=y
CONFIG_BATTERY_ACT8945A=y
CONFIG_BATTERY_CPCAP=y
CONFIG_BATTERY_CW2015=y
CONFIG_BATTERY_DS2760=y
CONFIG_BATTERY_DS2780=y
CONFIG_BATTERY_DS2781=y
CONFIG_BATTERY_DS2782=y
CONFIG_BATTERY_LEGO_EV3=y
CONFIG_BATTERY_OLPC=y
CONFIG_BATTERY_SAMSUNG_SDI=y
CONFIG_BATTERY_INGENIC=y
CONFIG_BATTERY_WM97XX=y
CONFIG_BATTERY_SBS=y
CONFIG_CHARGER_SBS=y
CONFIG_MANAGER_SBS=y
CONFIG_BATTERY_BQ27XXX=y
CONFIG_BATTERY_BQ27XXX_I2C=y
CONFIG_BATTERY_BQ27XXX_HDQ=y
CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM=y
CONFIG_BATTERY_DA9030=y
CONFIG_BATTERY_DA9052=y
CONFIG_CHARGER_DA9150=y
CONFIG_BATTERY_DA9150=y
CONFIG_CHARGER_AXP20X=y
CONFIG_BATTERY_AXP20X=y
CONFIG_AXP20X_POWER=y
CONFIG_BATTERY_MAX17040=y
CONFIG_BATTERY_MAX17042=y
CONFIG_BATTERY_MAX1721X=y
CONFIG_BATTERY_TWL4030_MADC=y
CONFIG_CHARGER_88PM860X=y
CONFIG_CHARGER_PCF50633=y
CONFIG_BATTERY_RX51=y
CONFIG_CHARGER_CPCAP=y
CONFIG_CHARGER_ISP1704=y
CONFIG_CHARGER_MAX8903=y
CONFIG_CHARGER_TWL4030=y
CONFIG_CHARGER_LP8727=y
CONFIG_CHARGER_LP8788=y
CONFIG_CHARGER_GPIO=y
CONFIG_CHARGER_MANAGER=y
CONFIG_CHARGER_LT3651=y
CONFIG_CHARGER_LTC4162L=y
CONFIG_CHARGER_MAX14577=y
CONFIG_CHARGER_DETECTOR_MAX14656=y
CONFIG_CHARGER_MAX77650=y
CONFIG_CHARGER_MAX77693=y
CONFIG_CHARGER_MAX77976=y
CONFIG_CHARGER_MAX8997=y
CONFIG_CHARGER_MAX8998=y
CONFIG_CHARGER_MP2629=y
CONFIG_CHARGER_MT6360=y
CONFIG_CHARGER_MT6370=y
CONFIG_CHARGER_QCOM_SMBB=y
CONFIG_CHARGER_BQ2415X=y
CONFIG_CHARGER_BQ24190=y
CONFIG_CHARGER_BQ24257=y
CONFIG_CHARGER_BQ24735=y
CONFIG_CHARGER_BQ2515X=y
CONFIG_CHARGER_BQ25890=y
CONFIG_CHARGER_BQ25980=y
CONFIG_CHARGER_BQ256XX=y
CONFIG_CHARGER_SMB347=y
CONFIG_CHARGER_TPS65090=y
CONFIG_CHARGER_TPS65217=y
CONFIG_BATTERY_GAUGE_LTC2941=y
CONFIG_BATTERY_GOLDFISH=y
CONFIG_BATTERY_RT5033=y
CONFIG_CHARGER_RT9455=y
CONFIG_CHARGER_CROS_USBPD=y
CONFIG_CHARGER_CROS_PCHG=y
CONFIG_CHARGER_SC2731=y
CONFIG_FUEL_GAUGE_SC27XX=y
CONFIG_CHARGER_UCS1002=y
CONFIG_CHARGER_BD99954=y
CONFIG_RN5T618_POWER=y
CONFIG_BATTERY_ACER_A500=y
CONFIG_BATTERY_UG3105=y
CONFIG_HWMON=y
CONFIG_HWMON_VID=y
CONFIG_HWMON_DEBUG_CHIP=y

#
# Native drivers
#
CONFIG_SENSORS_AD7314=y
CONFIG_SENSORS_AD7414=y
CONFIG_SENSORS_AD7418=y
CONFIG_SENSORS_ADM1025=y
CONFIG_SENSORS_ADM1026=y
CONFIG_SENSORS_ADM1029=y
CONFIG_SENSORS_ADM1031=y
CONFIG_SENSORS_ADM1177=y
CONFIG_SENSORS_ADM9240=y
CONFIG_SENSORS_ADT7X10=y
CONFIG_SENSORS_ADT7310=y
CONFIG_SENSORS_ADT7410=y
CONFIG_SENSORS_ADT7411=y
CONFIG_SENSORS_ADT7462=y
CONFIG_SENSORS_ADT7470=y
CONFIG_SENSORS_ADT7475=y
CONFIG_SENSORS_AHT10=y
CONFIG_SENSORS_AQUACOMPUTER_D5NEXT=y
CONFIG_SENSORS_AS370=y
CONFIG_SENSORS_ASC7621=y
CONFIG_SENSORS_AXI_FAN_CONTROL=y
CONFIG_SENSORS_ARM_SCMI=y
CONFIG_SENSORS_ARM_SCPI=y
CONFIG_SENSORS_ASB100=y
CONFIG_SENSORS_ASPEED=y
CONFIG_SENSORS_ATXP1=y
CONFIG_SENSORS_BT1_PVT=y
CONFIG_SENSORS_BT1_PVT_ALARMS=y
CONFIG_SENSORS_CORSAIR_CPRO=y
CONFIG_SENSORS_CORSAIR_PSU=y
CONFIG_SENSORS_DRIVETEMP=y
CONFIG_SENSORS_DS620=y
CONFIG_SENSORS_DS1621=y
CONFIG_SENSORS_DA9052_ADC=y
CONFIG_SENSORS_DA9055=y
CONFIG_SENSORS_SPARX5=y
CONFIG_SENSORS_F71805F=y
CONFIG_SENSORS_F71882FG=y
CONFIG_SENSORS_F75375S=y
CONFIG_SENSORS_GSC=y
CONFIG_SENSORS_MC13783_ADC=y
CONFIG_SENSORS_FSCHMD=y
CONFIG_SENSORS_FTSTEUTATES=y
CONFIG_SENSORS_GL518SM=y
CONFIG_SENSORS_GL520SM=y
CONFIG_SENSORS_G760A=y
CONFIG_SENSORS_G762=y
CONFIG_SENSORS_GPIO_FAN=y
CONFIG_SENSORS_HIH6130=y
CONFIG_SENSORS_IBMAEM=y
CONFIG_SENSORS_IBMPEX=y
CONFIG_SENSORS_IIO_HWMON=y
CONFIG_SENSORS_IT87=y
CONFIG_SENSORS_JC42=y
CONFIG_SENSORS_POWR1220=y
CONFIG_SENSORS_LAN966X=y
CONFIG_SENSORS_LINEAGE=y
CONFIG_SENSORS_LOCHNAGAR=y
CONFIG_SENSORS_LTC2945=y
CONFIG_SENSORS_LTC2947=y
CONFIG_SENSORS_LTC2947_I2C=y
CONFIG_SENSORS_LTC2947_SPI=y
CONFIG_SENSORS_LTC2990=y
CONFIG_SENSORS_LTC2992=y
CONFIG_SENSORS_LTC4151=y
CONFIG_SENSORS_LTC4215=y
CONFIG_SENSORS_LTC4222=y
CONFIG_SENSORS_LTC4245=y
CONFIG_SENSORS_LTC4260=y
CONFIG_SENSORS_LTC4261=y
CONFIG_SENSORS_MAX1111=y
CONFIG_SENSORS_MAX127=y
CONFIG_SENSORS_MAX16065=y
CONFIG_SENSORS_MAX1619=y
CONFIG_SENSORS_MAX1668=y
CONFIG_SENSORS_MAX197=y
CONFIG_SENSORS_MAX31722=y
CONFIG_SENSORS_MAX31730=y
CONFIG_SENSORS_MAX31760=y
CONFIG_SENSORS_MAX6620=y
CONFIG_SENSORS_MAX6621=y
CONFIG_SENSORS_MAX6639=y
CONFIG_SENSORS_MAX6650=y
CONFIG_SENSORS_MAX6697=y
CONFIG_SENSORS_MAX31790=y
CONFIG_SENSORS_MCP3021=y
CONFIG_SENSORS_MLXREG_FAN=y
CONFIG_SENSORS_TC654=y
CONFIG_SENSORS_TPS23861=y
CONFIG_SENSORS_MENF21BMC_HWMON=y
CONFIG_SENSORS_MR75203=y
CONFIG_SENSORS_ADCXX=y
CONFIG_SENSORS_LM63=y
CONFIG_SENSORS_LM70=y
CONFIG_SENSORS_LM73=y
CONFIG_SENSORS_LM75=y
CONFIG_SENSORS_LM77=y
CONFIG_SENSORS_LM78=y
CONFIG_SENSORS_LM80=y
CONFIG_SENSORS_LM83=y
CONFIG_SENSORS_LM85=y
CONFIG_SENSORS_LM87=y
CONFIG_SENSORS_LM90=y
CONFIG_SENSORS_LM92=y
CONFIG_SENSORS_LM93=y
CONFIG_SENSORS_LM95234=y
CONFIG_SENSORS_LM95241=y
CONFIG_SENSORS_LM95245=y
CONFIG_SENSORS_PC87360=y
CONFIG_SENSORS_PC87427=y
CONFIG_SENSORS_NTC_THERMISTOR=y
CONFIG_SENSORS_NCT6683=y
CONFIG_SENSORS_NCT6775_CORE=y
CONFIG_SENSORS_NCT6775=y
CONFIG_SENSORS_NCT6775_I2C=y
CONFIG_SENSORS_NCT7802=y
CONFIG_SENSORS_NCT7904=y
CONFIG_SENSORS_NPCM7XX=y
CONFIG_SENSORS_NSA320=y
CONFIG_SENSORS_NZXT_KRAKEN2=y
CONFIG_SENSORS_NZXT_SMART2=y
CONFIG_SENSORS_OCC_P8_I2C=y
CONFIG_SENSORS_OCC_P9_SBE=y
CONFIG_SENSORS_OCC=y
CONFIG_SENSORS_PCF8591=y
CONFIG_SENSORS_PECI_CPUTEMP=y
CONFIG_SENSORS_PECI_DIMMTEMP=y
CONFIG_SENSORS_PECI=y
CONFIG_PMBUS=y
CONFIG_SENSORS_PMBUS=y
CONFIG_SENSORS_ADM1266=y
CONFIG_SENSORS_ADM1275=y
CONFIG_SENSORS_BEL_PFE=y
CONFIG_SENSORS_BPA_RS600=y
CONFIG_SENSORS_DELTA_AHE50DC_FAN=y
CONFIG_SENSORS_FSP_3Y=y
CONFIG_SENSORS_IBM_CFFPS=y
CONFIG_SENSORS_DPS920AB=y
CONFIG_SENSORS_INSPUR_IPSPS=y
CONFIG_SENSORS_IR35221=y
CONFIG_SENSORS_IR36021=y
CONFIG_SENSORS_IR38064=y
CONFIG_SENSORS_IR38064_REGULATOR=y
CONFIG_SENSORS_IRPS5401=y
CONFIG_SENSORS_ISL68137=y
CONFIG_SENSORS_LM25066=y
CONFIG_SENSORS_LM25066_REGULATOR=y
CONFIG_SENSORS_LT7182S=y
CONFIG_SENSORS_LTC2978=y
CONFIG_SENSORS_LTC2978_REGULATOR=y
CONFIG_SENSORS_LTC3815=y
CONFIG_SENSORS_MAX15301=y
CONFIG_SENSORS_MAX16064=y
CONFIG_SENSORS_MAX16601=y
CONFIG_SENSORS_MAX20730=y
CONFIG_SENSORS_MAX20751=y
CONFIG_SENSORS_MAX31785=y
CONFIG_SENSORS_MAX34440=y
CONFIG_SENSORS_MAX8688=y
CONFIG_SENSORS_MP2888=y
CONFIG_SENSORS_MP2975=y
CONFIG_SENSORS_MP5023=y
CONFIG_SENSORS_PIM4328=y
CONFIG_SENSORS_PLI1209BC=y
CONFIG_SENSORS_PLI1209BC_REGULATOR=y
CONFIG_SENSORS_PM6764TR=y
CONFIG_SENSORS_PXE1610=y
CONFIG_SENSORS_Q54SJ108A2=y
CONFIG_SENSORS_STPDDC60=y
CONFIG_SENSORS_TPS40422=y
CONFIG_SENSORS_TPS53679=y
CONFIG_SENSORS_TPS546D24=y
CONFIG_SENSORS_UCD9000=y
CONFIG_SENSORS_UCD9200=y
CONFIG_SENSORS_XDPE152=y
CONFIG_SENSORS_XDPE122=y
CONFIG_SENSORS_XDPE122_REGULATOR=y
CONFIG_SENSORS_ZL6100=y
CONFIG_SENSORS_PWM_FAN=y
CONFIG_SENSORS_RASPBERRYPI_HWMON=y
CONFIG_SENSORS_SL28CPLD=y
CONFIG_SENSORS_SBTSI=y
CONFIG_SENSORS_SBRMI=y
CONFIG_SENSORS_SHT15=y
CONFIG_SENSORS_SHT21=y
CONFIG_SENSORS_SHT3x=y
CONFIG_SENSORS_SHT4x=y
CONFIG_SENSORS_SHTC1=y
CONFIG_SENSORS_SY7636A=y
CONFIG_SENSORS_DME1737=y
CONFIG_SENSORS_EMC1403=y
CONFIG_SENSORS_EMC2103=y
CONFIG_SENSORS_EMC2305=y
CONFIG_SENSORS_EMC6W201=y
CONFIG_SENSORS_SMSC47M1=y
CONFIG_SENSORS_SMSC47M192=y
CONFIG_SENSORS_SMSC47B397=y
CONFIG_SENSORS_SCH56XX_COMMON=y
CONFIG_SENSORS_SCH5627=y
CONFIG_SENSORS_SCH5636=y
CONFIG_SENSORS_STTS751=y
CONFIG_SENSORS_SMM665=y
CONFIG_SENSORS_ADC128D818=y
CONFIG_SENSORS_ADS7828=y
CONFIG_SENSORS_ADS7871=y
CONFIG_SENSORS_AMC6821=y
CONFIG_SENSORS_INA209=y
CONFIG_SENSORS_INA2XX=y
CONFIG_SENSORS_INA238=y
CONFIG_SENSORS_INA3221=y
CONFIG_SENSORS_TC74=y
CONFIG_SENSORS_THMC50=y
CONFIG_SENSORS_TMP102=y
CONFIG_SENSORS_TMP103=y
CONFIG_SENSORS_TMP108=y
CONFIG_SENSORS_TMP401=y
CONFIG_SENSORS_TMP421=y
CONFIG_SENSORS_TMP464=y
CONFIG_SENSORS_TMP513=y
CONFIG_SENSORS_VT1211=y
CONFIG_SENSORS_W83773G=y
CONFIG_SENSORS_W83781D=y
CONFIG_SENSORS_W83791D=y
CONFIG_SENSORS_W83792D=y
CONFIG_SENSORS_W83793=y
CONFIG_SENSORS_W83795=y
CONFIG_SENSORS_W83795_FANCTRL=y
CONFIG_SENSORS_W83L785TS=y
CONFIG_SENSORS_W83L786NG=y
CONFIG_SENSORS_W83627HF=y
CONFIG_SENSORS_W83627EHF=y
CONFIG_SENSORS_WM831X=y
CONFIG_SENSORS_WM8350=y
CONFIG_SENSORS_INTEL_M10_BMC_HWMON=y
CONFIG_THERMAL=y
CONFIG_THERMAL_NETLINK=y
CONFIG_THERMAL_STATISTICS=y
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
CONFIG_THERMAL_HWMON=y
CONFIG_THERMAL_OF=y
CONFIG_THERMAL_WRITABLE_TRIPS=y
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
CONFIG_THERMAL_GOV_FAIR_SHARE=y
CONFIG_THERMAL_GOV_STEP_WISE=y
CONFIG_THERMAL_GOV_BANG_BANG=y
CONFIG_THERMAL_GOV_USER_SPACE=y
CONFIG_CPU_THERMAL=y
CONFIG_DEVFREQ_THERMAL=y
CONFIG_THERMAL_EMULATION=y
CONFIG_THERMAL_MMIO=y
CONFIG_HISI_THERMAL=y
CONFIG_IMX_THERMAL=y
CONFIG_IMX_SC_THERMAL=y
CONFIG_IMX8MM_THERMAL=y
CONFIG_K3_THERMAL=y
CONFIG_MAX77620_THERMAL=y
CONFIG_QORIQ_THERMAL=y
CONFIG_SPEAR_THERMAL=y
CONFIG_SUN8I_THERMAL=y
CONFIG_ROCKCHIP_THERMAL=y
CONFIG_RCAR_THERMAL=y
CONFIG_RCAR_GEN3_THERMAL=y
CONFIG_RZG2L_THERMAL=y
CONFIG_KIRKWOOD_THERMAL=y
CONFIG_DOVE_THERMAL=y
CONFIG_ARMADA_THERMAL=y
CONFIG_DA9062_THERMAL=y
CONFIG_MTK_THERMAL=y

#
# Intel thermal drivers
#

#
# ACPI INT340X thermal drivers
#
# end of ACPI INT340X thermal drivers
# end of Intel thermal drivers

#
# Broadcom thermal drivers
#
CONFIG_BCM2711_THERMAL=y
CONFIG_BCM2835_THERMAL=y
CONFIG_BRCMSTB_THERMAL=y
CONFIG_BCM_NS_THERMAL=y
CONFIG_BCM_SR_THERMAL=y
# end of Broadcom thermal drivers

#
# Texas Instruments thermal drivers
#
CONFIG_TI_SOC_THERMAL=y
CONFIG_TI_THERMAL=y
CONFIG_OMAP3_THERMAL=y
CONFIG_OMAP4_THERMAL=y
CONFIG_OMAP5_THERMAL=y
CONFIG_DRA752_THERMAL=y
# end of Texas Instruments thermal drivers

#
# Samsung thermal drivers
#
CONFIG_EXYNOS_THERMAL=y
# end of Samsung thermal drivers

#
# NVIDIA Tegra thermal drivers
#
CONFIG_TEGRA_SOCTHERM=y
CONFIG_TEGRA_BPMP_THERMAL=y
CONFIG_TEGRA30_TSENSOR=y
# end of NVIDIA Tegra thermal drivers

CONFIG_GENERIC_ADC_THERMAL=y

#
# Qualcomm thermal drivers
#
CONFIG_QCOM_TSENS=y
CONFIG_QCOM_SPMI_ADC_TM5=y
CONFIG_QCOM_SPMI_TEMP_ALARM=y
# end of Qualcomm thermal drivers

CONFIG_UNIPHIER_THERMAL=y
CONFIG_SPRD_THERMAL=y
CONFIG_KHADAS_MCU_FAN_THERMAL=y
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_CORE=y
CONFIG_WATCHDOG_NOWAYOUT=y
CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
CONFIG_WATCHDOG_OPEN_TIMEOUT=0
CONFIG_WATCHDOG_SYSFS=y
CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT=y

#
# Watchdog Pretimeout Governors
#
CONFIG_WATCHDOG_PRETIMEOUT_GOV=y
CONFIG_WATCHDOG_PRETIMEOUT_GOV_SEL=m
CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=y
CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=y
# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP is not set
CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC=y

#
# Watchdog Device Drivers
#
CONFIG_SOFT_WATCHDOG=y
CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
CONFIG_BD957XMUF_WATCHDOG=y
CONFIG_DA9052_WATCHDOG=y
CONFIG_DA9055_WATCHDOG=y
CONFIG_DA9063_WATCHDOG=y
CONFIG_DA9062_WATCHDOG=y
CONFIG_GPIO_WATCHDOG=y
CONFIG_GPIO_WATCHDOG_ARCH_INITCALL=y
CONFIG_MENF21BMC_WATCHDOG=y
CONFIG_MENZ069_WATCHDOG=y
CONFIG_WM831X_WATCHDOG=y
CONFIG_WM8350_WATCHDOG=y
CONFIG_XILINX_WATCHDOG=y
CONFIG_ZIIRAVE_WATCHDOG=y
CONFIG_RAVE_SP_WATCHDOG=y
CONFIG_MLX_WDT=y
CONFIG_SL28CPLD_WATCHDOG=y
CONFIG_ARMADA_37XX_WATCHDOG=y
CONFIG_ASM9260_WATCHDOG=y
CONFIG_AT91RM9200_WATCHDOG=y
CONFIG_AT91SAM9X_WATCHDOG=y
CONFIG_SAMA5D4_WATCHDOG=y
CONFIG_CADENCE_WATCHDOG=y
CONFIG_FTWDT010_WATCHDOG=y
CONFIG_S3C2410_WATCHDOG=y
CONFIG_DW_WATCHDOG=y
CONFIG_EP93XX_WATCHDOG=y
CONFIG_OMAP_WATCHDOG=y
CONFIG_PNX4008_WATCHDOG=y
CONFIG_DAVINCI_WATCHDOG=y
CONFIG_K3_RTI_WATCHDOG=y
CONFIG_RN5T618_WATCHDOG=y
CONFIG_SUNXI_WATCHDOG=y
CONFIG_NPCM7XX_WATCHDOG=y
CONFIG_TWL4030_WATCHDOG=y
CONFIG_STMP3XXX_RTC_WATCHDOG=y
CONFIG_TS4800_WATCHDOG=y
CONFIG_TS72XX_WATCHDOG=y
CONFIG_MAX63XX_WATCHDOG=y
CONFIG_MAX77620_WATCHDOG=y
CONFIG_IMX2_WDT=y
CONFIG_IMX7ULP_WDT=y
CONFIG_RETU_WATCHDOG=y
CONFIG_MOXART_WDT=y
CONFIG_ST_LPC_WATCHDOG=y
CONFIG_TEGRA_WATCHDOG=y
CONFIG_QCOM_WDT=y
CONFIG_MESON_GXBB_WATCHDOG=y
CONFIG_MESON_WATCHDOG=y
CONFIG_MEDIATEK_WATCHDOG=y
CONFIG_DIGICOLOR_WATCHDOG=y
CONFIG_LPC18XX_WATCHDOG=y
CONFIG_RENESAS_WDT=y
CONFIG_RENESAS_RZAWDT=y
CONFIG_RENESAS_RZN1WDT=y
CONFIG_RENESAS_RZG2LWDT=y
CONFIG_ASPEED_WATCHDOG=y
CONFIG_STPMIC1_WATCHDOG=y
CONFIG_UNIPHIER_WATCHDOG=y
CONFIG_RTD119X_WATCHDOG=y
CONFIG_REALTEK_OTTO_WDT=y
CONFIG_SPRD_WATCHDOG=y
CONFIG_PM8916_WATCHDOG=y
CONFIG_VISCONTI_WATCHDOG=y
CONFIG_MSC313E_WATCHDOG=y
CONFIG_APPLE_WATCHDOG=y
CONFIG_SUNPLUS_WATCHDOG=y
CONFIG_SC520_WDT=y
CONFIG_KEMPLD_WDT=y
CONFIG_BCM47XX_WDT=y
CONFIG_BCM2835_WDT=y
CONFIG_BCM_KONA_WDT=y
CONFIG_BCM_KONA_WDT_DEBUG=y
CONFIG_BCM7038_WDT=y
CONFIG_IMGPDC_WDT=y
CONFIG_MPC5200_WDT=y
CONFIG_MEN_A21_WDT=y
CONFIG_UML_WATCHDOG=y

#
# USB-based Watchdog Cards
#
CONFIG_USBPCWATCHDOG=y
CONFIG_SSB_POSSIBLE=y
CONFIG_SSB=y
CONFIG_SSB_SPROM=y
CONFIG_SSB_BLOCKIO=y
CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
CONFIG_SSB_PCMCIAHOST=y
CONFIG_SSB_SDIOHOST_POSSIBLE=y
CONFIG_SSB_SDIOHOST=y
CONFIG_SSB_HOST_SOC=y
CONFIG_SSB_DRIVER_GPIO=y
CONFIG_BCMA_POSSIBLE=y
CONFIG_BCMA=y
CONFIG_BCMA_BLOCKIO=y
CONFIG_BCMA_HOST_SOC=y
CONFIG_BCMA_DRIVER_MIPS=y
CONFIG_BCMA_PFLASH=y
CONFIG_BCMA_SFLASH=y
CONFIG_BCMA_NFLASH=y
CONFIG_BCMA_DRIVER_GMAC_CMN=y
CONFIG_BCMA_DRIVER_GPIO=y
CONFIG_BCMA_DEBUG=y

#
# Multifunction device drivers
#
CONFIG_MFD_CORE=y
CONFIG_MFD_ACT8945A=y
CONFIG_MFD_AS3711=y
CONFIG_MFD_AS3722=y
CONFIG_PMIC_ADP5520=y
CONFIG_MFD_AAT2870_CORE=y
CONFIG_MFD_AT91_USART=y
CONFIG_MFD_ATMEL_FLEXCOM=y
CONFIG_MFD_ATMEL_HLCDC=y
CONFIG_MFD_ATMEL_SMC=y
CONFIG_MFD_BCM590XX=y
CONFIG_MFD_BD9571MWV=y
CONFIG_MFD_AXP20X=y
CONFIG_MFD_AXP20X_I2C=y
CONFIG_MFD_CROS_EC_DEV=y
CONFIG_MFD_MADERA=y
CONFIG_MFD_MADERA_I2C=y
CONFIG_MFD_MADERA_SPI=y
CONFIG_MFD_CS47L15=y
CONFIG_MFD_CS47L35=y
CONFIG_MFD_CS47L85=y
CONFIG_MFD_CS47L90=y
CONFIG_MFD_CS47L92=y
CONFIG_MFD_ASIC3=y
CONFIG_PMIC_DA903X=y
CONFIG_PMIC_DA9052=y
CONFIG_MFD_DA9052_SPI=y
CONFIG_MFD_DA9052_I2C=y
CONFIG_MFD_DA9055=y
CONFIG_MFD_DA9062=y
CONFIG_MFD_DA9063=y
CONFIG_MFD_DA9150=y
CONFIG_MFD_DLN2=y
CONFIG_MFD_ENE_KB3930=y
CONFIG_MFD_EXYNOS_LPASS=y
CONFIG_MFD_GATEWORKS_GSC=y
CONFIG_MFD_MC13XXX=y
CONFIG_MFD_MC13XXX_SPI=y
CONFIG_MFD_MC13XXX_I2C=y
CONFIG_MFD_MP2629=y
CONFIG_MFD_MXS_LRADC=y
CONFIG_MFD_MX25_TSADC=y
CONFIG_MFD_HI6421_PMIC=y
CONFIG_MFD_HI6421_SPMI=y
CONFIG_MFD_HI655X_PMIC=y
CONFIG_HTC_PASIC3=y
# CONFIG_HTC_I2CPLD is not set
CONFIG_INTEL_SOC_PMIC=y
CONFIG_MFD_IQS62X=y
CONFIG_MFD_KEMPLD=y
CONFIG_MFD_88PM800=y
CONFIG_MFD_88PM805=y
CONFIG_MFD_88PM860X=y
CONFIG_MFD_MAX14577=y
CONFIG_MFD_MAX77620=y
CONFIG_MFD_MAX77650=y
CONFIG_MFD_MAX77686=y
CONFIG_MFD_MAX77693=y
CONFIG_MFD_MAX77714=y
CONFIG_MFD_MAX77843=y
CONFIG_MFD_MAX8907=y
CONFIG_MFD_MAX8925=y
CONFIG_MFD_MAX8997=y
CONFIG_MFD_MAX8998=y
CONFIG_MFD_MT6360=y
CONFIG_MFD_MT6370=y
CONFIG_MFD_MT6397=y
CONFIG_MFD_MENF21BMC=y
CONFIG_MFD_OCELOT=y
CONFIG_EZX_PCAP=y
CONFIG_MFD_CPCAP=y
CONFIG_MFD_VIPERBOARD=y
CONFIG_MFD_NTXEC=y
CONFIG_MFD_RETU=y
CONFIG_MFD_PCF50633=y
CONFIG_PCF50633_ADC=y
CONFIG_PCF50633_GPIO=y
CONFIG_UCB1400_CORE=y
CONFIG_MFD_PM8XXX=y
CONFIG_MFD_SPMI_PMIC=y
CONFIG_MFD_SY7636A=y
CONFIG_MFD_RT4831=y
CONFIG_MFD_RT5033=y
CONFIG_MFD_RT5120=y
CONFIG_MFD_RC5T583=y
# CONFIG_MFD_RK808 is not set
CONFIG_MFD_RN5T618=y
CONFIG_MFD_SEC_CORE=y
CONFIG_MFD_SI476X_CORE=y
CONFIG_MFD_SIMPLE_MFD_I2C=y
CONFIG_MFD_SL28CPLD=y
CONFIG_MFD_SM501=y
CONFIG_MFD_SM501_GPIO=y
CONFIG_MFD_SKY81452=y
CONFIG_MFD_SC27XX_PMIC=y
CONFIG_ABX500_CORE=y
CONFIG_MFD_STMPE=y

#
# STMicroelectronics STMPE Interface Drivers
#
CONFIG_STMPE_I2C=y
CONFIG_STMPE_SPI=y
# end of STMicroelectronics STMPE Interface Drivers

CONFIG_MFD_SUN6I_PRCM=y
CONFIG_MFD_SYSCON=y
CONFIG_MFD_TI_AM335X_TSCADC=y
CONFIG_MFD_LP3943=y
CONFIG_MFD_LP8788=y
CONFIG_MFD_TI_LMU=y
CONFIG_MFD_OMAP_USB_HOST=y
CONFIG_MFD_PALMAS=y
CONFIG_TPS6105X=y
CONFIG_TPS65010=y
CONFIG_TPS6507X=y
CONFIG_MFD_TPS65086=y
CONFIG_MFD_TPS65090=y
CONFIG_MFD_TPS65217=y
CONFIG_MFD_TI_LP873X=y
CONFIG_MFD_TI_LP87565=y
CONFIG_MFD_TPS65218=y
CONFIG_MFD_TPS6586X=y
CONFIG_MFD_TPS65910=y
CONFIG_MFD_TPS65912=y
CONFIG_MFD_TPS65912_I2C=y
CONFIG_MFD_TPS65912_SPI=y
CONFIG_TWL4030_CORE=y
CONFIG_MFD_TWL4030_AUDIO=y
CONFIG_TWL6040_CORE=y
CONFIG_MFD_WL1273_CORE=y
CONFIG_MFD_LM3533=y
CONFIG_MFD_TC3589X=y
CONFIG_MFD_TQMX86=y
CONFIG_MFD_LOCHNAGAR=y
CONFIG_MFD_ARIZONA=y
CONFIG_MFD_ARIZONA_I2C=y
CONFIG_MFD_ARIZONA_SPI=y
CONFIG_MFD_CS47L24=y
CONFIG_MFD_WM5102=y
CONFIG_MFD_WM5110=y
CONFIG_MFD_WM8997=y
CONFIG_MFD_WM8998=y
CONFIG_MFD_WM8400=y
CONFIG_MFD_WM831X=y
CONFIG_MFD_WM831X_I2C=y
CONFIG_MFD_WM831X_SPI=y
CONFIG_MFD_WM8350=y
CONFIG_MFD_WM8350_I2C=y
CONFIG_MFD_WM8994=y
CONFIG_MFD_STW481X=y
CONFIG_MFD_ROHM_BD718XX=y
CONFIG_MFD_ROHM_BD71828=y
CONFIG_MFD_ROHM_BD957XMUF=y
CONFIG_MFD_STM32_LPTIMER=y
CONFIG_MFD_STM32_TIMERS=y
CONFIG_MFD_STPMIC1=y
CONFIG_MFD_STMFX=y
CONFIG_MFD_WCD934X=y
CONFIG_MFD_ATC260X=y
CONFIG_MFD_ATC260X_I2C=y
CONFIG_MFD_KHADAS_MCU=y
CONFIG_MFD_ACER_A500_EC=y
CONFIG_MFD_QCOM_PM8008=y
CONFIG_RAVE_SP_CORE=y
CONFIG_MFD_INTEL_M10_BMC=y
CONFIG_MFD_RSMU_I2C=y
CONFIG_MFD_RSMU_SPI=y
# end of Multifunction device drivers

CONFIG_REGULATOR=y
CONFIG_REGULATOR_DEBUG=y
CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_VIRTUAL_CONSUMER=y
CONFIG_REGULATOR_USERSPACE_CONSUMER=y
CONFIG_REGULATOR_88PG86X=y
CONFIG_REGULATOR_88PM800=y
CONFIG_REGULATOR_88PM8607=y
CONFIG_REGULATOR_ACT8865=y
CONFIG_REGULATOR_ACT8945A=y
CONFIG_REGULATOR_AD5398=y
CONFIG_REGULATOR_ANATOP=y
CONFIG_REGULATOR_AAT2870=y
CONFIG_REGULATOR_ARIZONA_LDO1=y
CONFIG_REGULATOR_ARIZONA_MICSUPP=y
CONFIG_REGULATOR_ARM_SCMI=y
CONFIG_REGULATOR_AS3711=y
CONFIG_REGULATOR_AS3722=y
CONFIG_REGULATOR_ATC260X=y
CONFIG_REGULATOR_AXP20X=y
CONFIG_REGULATOR_BCM590XX=y
CONFIG_REGULATOR_BD71815=y
CONFIG_REGULATOR_BD71828=y
CONFIG_REGULATOR_BD718XX=y
CONFIG_REGULATOR_BD9571MWV=y
CONFIG_REGULATOR_BD957XMUF=y
CONFIG_REGULATOR_CPCAP=y
CONFIG_REGULATOR_CROS_EC=y
CONFIG_REGULATOR_DA903X=y
CONFIG_REGULATOR_DA9052=y
CONFIG_REGULATOR_DA9055=y
CONFIG_REGULATOR_DA9062=y
CONFIG_REGULATOR_DA9063=y
CONFIG_REGULATOR_DA9121=y
CONFIG_REGULATOR_DA9210=y
CONFIG_REGULATOR_DA9211=y
CONFIG_REGULATOR_FAN53555=y
CONFIG_REGULATOR_FAN53880=y
CONFIG_REGULATOR_GPIO=y
CONFIG_REGULATOR_HI6421=y
CONFIG_REGULATOR_HI6421V530=y
CONFIG_REGULATOR_HI655X=y
CONFIG_REGULATOR_HI6421V600=y
CONFIG_REGULATOR_ISL9305=y
CONFIG_REGULATOR_ISL6271A=y
CONFIG_REGULATOR_LM363X=y
CONFIG_REGULATOR_LOCHNAGAR=y
CONFIG_REGULATOR_LP3971=y
CONFIG_REGULATOR_LP3972=y
CONFIG_REGULATOR_LP872X=y
CONFIG_REGULATOR_LP873X=y
CONFIG_REGULATOR_LP8755=y
CONFIG_REGULATOR_LP87565=y
CONFIG_REGULATOR_LP8788=y
CONFIG_REGULATOR_LTC3589=y
CONFIG_REGULATOR_LTC3676=y
CONFIG_REGULATOR_MAX14577=y
CONFIG_REGULATOR_MAX1586=y
CONFIG_REGULATOR_MAX77620=y
CONFIG_REGULATOR_MAX77650=y
CONFIG_REGULATOR_MAX8649=y
CONFIG_REGULATOR_MAX8660=y
CONFIG_REGULATOR_MAX8893=y
CONFIG_REGULATOR_MAX8907=y
CONFIG_REGULATOR_MAX8925=y
CONFIG_REGULATOR_MAX8952=y
CONFIG_REGULATOR_MAX8973=y
CONFIG_REGULATOR_MAX8997=y
CONFIG_REGULATOR_MAX8998=y
CONFIG_REGULATOR_MAX20086=y
CONFIG_REGULATOR_MAX77686=y
CONFIG_REGULATOR_MAX77693=y
CONFIG_REGULATOR_MAX77802=y
CONFIG_REGULATOR_MAX77826=y
CONFIG_REGULATOR_MC13XXX_CORE=y
CONFIG_REGULATOR_MC13783=y
CONFIG_REGULATOR_MC13892=y
CONFIG_REGULATOR_MCP16502=y
CONFIG_REGULATOR_MP5416=y
CONFIG_REGULATOR_MP8859=y
CONFIG_REGULATOR_MP886X=y
CONFIG_REGULATOR_MPQ7920=y
CONFIG_REGULATOR_MT6311=y
CONFIG_REGULATOR_MT6315=y
CONFIG_REGULATOR_MT6323=y
CONFIG_REGULATOR_MT6331=y
CONFIG_REGULATOR_MT6332=y
CONFIG_REGULATOR_MT6358=y
CONFIG_REGULATOR_MT6359=y
CONFIG_REGULATOR_MT6360=y
CONFIG_REGULATOR_MT6370=y
CONFIG_REGULATOR_MT6380=y
CONFIG_REGULATOR_MT6397=y
CONFIG_REGULATOR_PALMAS=y
CONFIG_REGULATOR_PBIAS=y
CONFIG_REGULATOR_PCA9450=y
CONFIG_REGULATOR_PCAP=y
CONFIG_REGULATOR_PCF50633=y
CONFIG_REGULATOR_PF8X00=y
CONFIG_REGULATOR_PFUZE100=y
CONFIG_REGULATOR_PV88060=y
CONFIG_REGULATOR_PV88080=y
CONFIG_REGULATOR_PV88090=y
CONFIG_REGULATOR_PWM=y
CONFIG_REGULATOR_QCOM_RPMH=y
CONFIG_REGULATOR_QCOM_SMD_RPM=y
CONFIG_REGULATOR_QCOM_SPMI=y
CONFIG_REGULATOR_QCOM_USB_VBUS=y
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=y
CONFIG_REGULATOR_RC5T583=y
CONFIG_REGULATOR_RN5T618=y
CONFIG_REGULATOR_ROHM=y
CONFIG_REGULATOR_RT4801=y
CONFIG_REGULATOR_RT4831=y
CONFIG_REGULATOR_RT5033=y
CONFIG_REGULATOR_RT5120=y
CONFIG_REGULATOR_RT5190A=y
CONFIG_REGULATOR_RT5759=y
CONFIG_REGULATOR_RT6160=y
CONFIG_REGULATOR_RT6245=y
CONFIG_REGULATOR_RTQ2134=y
CONFIG_REGULATOR_RTMV20=y
CONFIG_REGULATOR_RTQ6752=y
CONFIG_REGULATOR_S2MPA01=y
CONFIG_REGULATOR_S2MPS11=y
CONFIG_REGULATOR_S5M8767=y
CONFIG_REGULATOR_SC2731=y
CONFIG_REGULATOR_SKY81452=y
CONFIG_REGULATOR_SLG51000=y
CONFIG_REGULATOR_STM32_BOOSTER=y
CONFIG_REGULATOR_STM32_VREFBUF=y
CONFIG_REGULATOR_STM32_PWR=y
CONFIG_REGULATOR_STPMIC1=y
CONFIG_REGULATOR_TI_ABB=y
CONFIG_REGULATOR_STW481X_VMMC=y
CONFIG_REGULATOR_SY7636A=y
CONFIG_REGULATOR_SY8106A=y
CONFIG_REGULATOR_SY8824X=y
CONFIG_REGULATOR_SY8827N=y
CONFIG_REGULATOR_TPS51632=y
CONFIG_REGULATOR_TPS6105X=y
CONFIG_REGULATOR_TPS62360=y
CONFIG_REGULATOR_TPS6286X=y
CONFIG_REGULATOR_TPS65023=y
CONFIG_REGULATOR_TPS6507X=y
CONFIG_REGULATOR_TPS65086=y
CONFIG_REGULATOR_TPS65090=y
CONFIG_REGULATOR_TPS65132=y
CONFIG_REGULATOR_TPS65217=y
CONFIG_REGULATOR_TPS65218=y
CONFIG_REGULATOR_TPS6524X=y
CONFIG_REGULATOR_TPS6586X=y
CONFIG_REGULATOR_TPS65910=y
CONFIG_REGULATOR_TPS65912=y
CONFIG_REGULATOR_TPS68470=y
CONFIG_REGULATOR_TWL4030=y
CONFIG_REGULATOR_UNIPHIER=y
CONFIG_REGULATOR_VCTRL=y
CONFIG_REGULATOR_WM831X=y
CONFIG_REGULATOR_WM8350=y
CONFIG_REGULATOR_WM8400=y
CONFIG_REGULATOR_WM8994=y
CONFIG_REGULATOR_QCOM_LABIBB=y
CONFIG_RC_CORE=y
CONFIG_BPF_LIRC_MODE2=y
CONFIG_LIRC=y
CONFIG_RC_MAP=y
CONFIG_RC_DECODERS=y
CONFIG_IR_IMON_DECODER=y
CONFIG_IR_JVC_DECODER=y
CONFIG_IR_MCE_KBD_DECODER=y
CONFIG_IR_NEC_DECODER=y
CONFIG_IR_RC5_DECODER=y
CONFIG_IR_RC6_DECODER=y
CONFIG_IR_RCMM_DECODER=y
CONFIG_IR_SANYO_DECODER=y
CONFIG_IR_SHARP_DECODER=y
CONFIG_IR_SONY_DECODER=y
CONFIG_IR_XMP_DECODER=y
CONFIG_RC_DEVICES=y
CONFIG_IR_ENE=y
CONFIG_IR_FINTEK=y
CONFIG_IR_GPIO_CIR=y
CONFIG_IR_GPIO_TX=y
CONFIG_IR_HIX5HD2=y
CONFIG_IR_IGORPLUGUSB=y
CONFIG_IR_IGUANA=y
CONFIG_IR_IMON=y
CONFIG_IR_IMON_RAW=y
CONFIG_IR_ITE_CIR=y
CONFIG_IR_MCEUSB=y
CONFIG_IR_MESON=y
CONFIG_IR_MESON_TX=y
CONFIG_IR_MTK=y
CONFIG_IR_NUVOTON=y
CONFIG_IR_PWM_TX=y
CONFIG_IR_REDRAT3=y
CONFIG_IR_RX51=y
CONFIG_IR_SERIAL=y
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SPI=y
CONFIG_IR_STREAMZAP=y
CONFIG_IR_SUNXI=y
CONFIG_IR_TOY=y
CONFIG_IR_TTUSBIR=y
CONFIG_IR_WINBOND_CIR=y
CONFIG_RC_ATI_REMOTE=y
CONFIG_RC_LOOPBACK=y
CONFIG_RC_ST=y
CONFIG_RC_XBOX_DVD=y
CONFIG_IR_IMG=y
CONFIG_IR_IMG_RAW=y
CONFIG_IR_IMG_HW=y
CONFIG_IR_IMG_NEC=y
CONFIG_IR_IMG_JVC=y
CONFIG_IR_IMG_SONY=y
CONFIG_IR_IMG_SHARP=y
CONFIG_IR_IMG_SANYO=y
CONFIG_IR_IMG_RC5=y
CONFIG_IR_IMG_RC6=y
CONFIG_CEC_CORE=y
CONFIG_CEC_NOTIFIER=y
CONFIG_CEC_PIN=y

#
# CEC support
#
CONFIG_MEDIA_CEC_RC=y
CONFIG_CEC_PIN_ERROR_INJ=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_CEC_CH7322=y
CONFIG_CEC_CROS_EC=y
CONFIG_CEC_MESON_AO=y
CONFIG_CEC_MESON_G12A_AO=y
CONFIG_CEC_GPIO=y
CONFIG_CEC_SAMSUNG_S5P=y
CONFIG_CEC_STI=y
CONFIG_CEC_STM32=y
CONFIG_CEC_TEGRA=y
CONFIG_USB_PULSE8_CEC=y
CONFIG_USB_RAINSHADOW_CEC=y
# end of CEC support

CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_SUPPORT_FILTER=y
CONFIG_MEDIA_SUBDRV_AUTOSELECT=y

#
# Media device types
#
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_SDR_SUPPORT=y
CONFIG_MEDIA_PLATFORM_SUPPORT=y
CONFIG_MEDIA_TEST_SUPPORT=y
# end of Media device types

CONFIG_VIDEO_DEV=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_DVB_CORE=y

#
# Video4Linux options
#
CONFIG_VIDEO_V4L2_I2C=y
CONFIG_VIDEO_V4L2_SUBDEV_API=y
CONFIG_VIDEO_ADV_DEBUG=y
CONFIG_VIDEO_FIXED_MINOR_RANGES=y
CONFIG_VIDEO_TUNER=y
CONFIG_V4L2_JPEG_HELPER=y
CONFIG_V4L2_H264=y
CONFIG_V4L2_VP9=y
CONFIG_V4L2_MEM2MEM_DEV=y
CONFIG_V4L2_FLASH_LED_CLASS=y
CONFIG_V4L2_FWNODE=y
CONFIG_V4L2_ASYNC=y
CONFIG_VIDEOBUF_GEN=y
CONFIG_VIDEOBUF_VMALLOC=y
CONFIG_VIDEOBUF_DMA_CONTIG=y
# end of Video4Linux options

#
# Media controller options
#
CONFIG_MEDIA_CONTROLLER_DVB=y
CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
# end of Media controller options

#
# Digital TV options
#
CONFIG_DVB_MMAP=y
CONFIG_DVB_NET=y
CONFIG_DVB_MAX_ADAPTERS=16
CONFIG_DVB_DYNAMIC_MINORS=y
CONFIG_DVB_DEMUX_SECTION_LOSS_LOG=y
CONFIG_DVB_ULE_DEBUG=y
# end of Digital TV options

#
# Media drivers
#

#
# Drivers filtered as selected at 'Filter media drivers'
#

#
# Media drivers
#
CONFIG_MEDIA_USB_SUPPORT=y

#
# Webcam devices
#
CONFIG_USB_GSPCA=y
CONFIG_USB_GSPCA_BENQ=y
CONFIG_USB_GSPCA_CONEX=y
CONFIG_USB_GSPCA_CPIA1=y
CONFIG_USB_GSPCA_DTCS033=y
CONFIG_USB_GSPCA_ETOMS=y
CONFIG_USB_GSPCA_FINEPIX=y
CONFIG_USB_GSPCA_JEILINJ=y
CONFIG_USB_GSPCA_JL2005BCD=y
CONFIG_USB_GSPCA_KINECT=y
CONFIG_USB_GSPCA_KONICA=y
CONFIG_USB_GSPCA_MARS=y
CONFIG_USB_GSPCA_MR97310A=y
CONFIG_USB_GSPCA_NW80X=y
CONFIG_USB_GSPCA_OV519=y
CONFIG_USB_GSPCA_OV534=y
CONFIG_USB_GSPCA_OV534_9=y
CONFIG_USB_GSPCA_PAC207=y
CONFIG_USB_GSPCA_PAC7302=y
CONFIG_USB_GSPCA_PAC7311=y
CONFIG_USB_GSPCA_SE401=y
CONFIG_USB_GSPCA_SN9C2028=y
CONFIG_USB_GSPCA_SN9C20X=y
CONFIG_USB_GSPCA_SONIXB=y
CONFIG_USB_GSPCA_SONIXJ=y
CONFIG_USB_GSPCA_SPCA1528=y
CONFIG_USB_GSPCA_SPCA500=y
CONFIG_USB_GSPCA_SPCA501=y
CONFIG_USB_GSPCA_SPCA505=y
CONFIG_USB_GSPCA_SPCA506=y
CONFIG_USB_GSPCA_SPCA508=y
CONFIG_USB_GSPCA_SPCA561=y
CONFIG_USB_GSPCA_SQ905=y
CONFIG_USB_GSPCA_SQ905C=y
CONFIG_USB_GSPCA_SQ930X=y
CONFIG_USB_GSPCA_STK014=y
CONFIG_USB_GSPCA_STK1135=y
CONFIG_USB_GSPCA_STV0680=y
CONFIG_USB_GSPCA_SUNPLUS=y
CONFIG_USB_GSPCA_T613=y
CONFIG_USB_GSPCA_TOPRO=y
CONFIG_USB_GSPCA_TOUPTEK=y
CONFIG_USB_GSPCA_TV8532=y
CONFIG_USB_GSPCA_VC032X=y
CONFIG_USB_GSPCA_VICAM=y
CONFIG_USB_GSPCA_XIRLINK_CIT=y
CONFIG_USB_GSPCA_ZC3XX=y
CONFIG_USB_GL860=y
CONFIG_USB_M5602=y
CONFIG_USB_STV06XX=y
CONFIG_USB_PWC=y
CONFIG_USB_PWC_DEBUG=y
CONFIG_USB_PWC_INPUT_EVDEV=y
CONFIG_USB_S2255=y
CONFIG_VIDEO_USBTV=y
CONFIG_USB_VIDEO_CLASS=y
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y

#
# Analog TV USB devices
#
CONFIG_VIDEO_GO7007=y
CONFIG_VIDEO_GO7007_USB=y
CONFIG_VIDEO_GO7007_LOADER=y
CONFIG_VIDEO_GO7007_USB_S2250_BOARD=y
CONFIG_VIDEO_HDPVR=y
CONFIG_VIDEO_PVRUSB2=y
CONFIG_VIDEO_PVRUSB2_SYSFS=y
CONFIG_VIDEO_PVRUSB2_DVB=y
CONFIG_VIDEO_PVRUSB2_DEBUGIFC=y
CONFIG_VIDEO_STK1160_COMMON=y
CONFIG_VIDEO_STK1160=y

#
# Analog/digital TV USB devices
#
CONFIG_VIDEO_AU0828=y
CONFIG_VIDEO_AU0828_V4L2=y
CONFIG_VIDEO_AU0828_RC=y
CONFIG_VIDEO_CX231XX=y
CONFIG_VIDEO_CX231XX_RC=y
CONFIG_VIDEO_CX231XX_ALSA=y
CONFIG_VIDEO_CX231XX_DVB=y

#
# Digital TV USB devices
#
CONFIG_DVB_AS102=y
CONFIG_DVB_B2C2_FLEXCOP_USB=y
CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG=y
CONFIG_DVB_USB_V2=y
CONFIG_DVB_USB_AF9015=y
CONFIG_DVB_USB_AF9035=y
CONFIG_DVB_USB_ANYSEE=y
CONFIG_DVB_USB_AU6610=y
CONFIG_DVB_USB_AZ6007=y
CONFIG_DVB_USB_CE6230=y
CONFIG_DVB_USB_DVBSKY=y
CONFIG_DVB_USB_EC168=y
CONFIG_DVB_USB_GL861=y
CONFIG_DVB_USB_LME2510=y
CONFIG_DVB_USB_MXL111SF=y
CONFIG_DVB_USB_RTL28XXU=y
CONFIG_DVB_USB_ZD1301=y
CONFIG_DVB_USB=y
CONFIG_DVB_USB_DEBUG=y
CONFIG_DVB_USB_A800=y
CONFIG_DVB_USB_AF9005=y
CONFIG_DVB_USB_AF9005_REMOTE=y
CONFIG_DVB_USB_AZ6027=y
CONFIG_DVB_USB_CINERGY_T2=y
CONFIG_DVB_USB_CXUSB=y
CONFIG_DVB_USB_CXUSB_ANALOG=y
CONFIG_DVB_USB_DIB0700=y
CONFIG_DVB_USB_DIB3000MC=y
CONFIG_DVB_USB_DIBUSB_MB=y
CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
CONFIG_DVB_USB_DIBUSB_MC=y
CONFIG_DVB_USB_DIGITV=y
CONFIG_DVB_USB_DTT200U=y
CONFIG_DVB_USB_DTV5100=y
CONFIG_DVB_USB_DW2102=y
CONFIG_DVB_USB_GP8PSK=y
CONFIG_DVB_USB_M920X=y
CONFIG_DVB_USB_NOVA_T_USB2=y
CONFIG_DVB_USB_OPERA1=y
CONFIG_DVB_USB_PCTV452E=y
CONFIG_DVB_USB_TECHNISAT_USB2=y
CONFIG_DVB_USB_TTUSB2=y
CONFIG_DVB_USB_UMT_010=y
CONFIG_DVB_USB_VP702X=y
CONFIG_DVB_USB_VP7045=y
CONFIG_SMS_USB_DRV=y

#
# Webcam, TV (analog/digital) USB devices
#
CONFIG_VIDEO_EM28XX=y
CONFIG_VIDEO_EM28XX_V4L2=y
CONFIG_VIDEO_EM28XX_ALSA=y
CONFIG_VIDEO_EM28XX_DVB=y
CONFIG_VIDEO_EM28XX_RC=y

#
# Software defined radio USB devices
#
CONFIG_USB_AIRSPY=y
CONFIG_USB_HACKRF=y
CONFIG_USB_MSI2500=y
CONFIG_RADIO_ADAPTERS=y
CONFIG_RADIO_SAA7706H=y
CONFIG_RADIO_SHARK=y
CONFIG_RADIO_SHARK2=y
CONFIG_RADIO_SI4713=y
CONFIG_RADIO_SI476X=y
CONFIG_RADIO_TEA575X=y
CONFIG_RADIO_TEA5764=y
CONFIG_RADIO_TEA5764_XTAL=y
CONFIG_RADIO_TEF6862=y
CONFIG_RADIO_WL1273=y
CONFIG_USB_DSBR=y
CONFIG_USB_KEENE=y
CONFIG_USB_MA901=y
CONFIG_USB_MR800=y
CONFIG_USB_RAREMONO=y
CONFIG_RADIO_SI470X=y
CONFIG_USB_SI470X=y
CONFIG_I2C_SI470X=y
CONFIG_USB_SI4713=y
CONFIG_PLATFORM_SI4713=y
CONFIG_I2C_SI4713=y
CONFIG_RADIO_WL128X=y
CONFIG_V4L_RADIO_ISA_DRIVERS=y
CONFIG_RADIO_AZTECH=y
CONFIG_RADIO_AZTECH_PORT=350
CONFIG_RADIO_CADET=y
CONFIG_RADIO_GEMTEK=y
CONFIG_RADIO_GEMTEK_PORT=34c
CONFIG_RADIO_GEMTEK_PROBE=y
CONFIG_RADIO_ISA=y
CONFIG_RADIO_RTRACK=y
CONFIG_RADIO_RTRACK2=y
CONFIG_RADIO_RTRACK2_PORT=30c
CONFIG_RADIO_RTRACK_PORT=30f
CONFIG_RADIO_SF16FMI=y
CONFIG_RADIO_SF16FMR2=y
CONFIG_RADIO_TERRATEC=y
CONFIG_RADIO_TRUST=y
CONFIG_RADIO_TRUST_PORT=350
CONFIG_RADIO_TYPHOON=y
CONFIG_RADIO_TYPHOON_MUTEFREQ=87500
CONFIG_RADIO_TYPHOON_PORT=316
CONFIG_RADIO_ZOLTRIX=y
CONFIG_RADIO_ZOLTRIX_PORT=20c
CONFIG_MEDIA_PLATFORM_DRIVERS=y
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_SDR_PLATFORM_DRIVERS=y
CONFIG_DVB_PLATFORM_DRIVERS=y
CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_VIDEO_MEM2MEM_DEINTERLACE=y
CONFIG_VIDEO_MUX=y

#
# Allegro DVT media platform drivers
#
CONFIG_VIDEO_ALLEGRO_DVT=y

#
# Amlogic media platform drivers
#
CONFIG_VIDEO_MESON_GE2D=y

#
# Amphion drivers
#
CONFIG_VIDEO_AMPHION_VPU=y

#
# Aspeed media platform drivers
#
CONFIG_VIDEO_ASPEED=y

#
# Atmel media platform drivers
#
CONFIG_VIDEO_ATMEL_ISC=y
CONFIG_VIDEO_ATMEL_XISC=y
CONFIG_VIDEO_ATMEL_ISC_BASE=y
CONFIG_VIDEO_ATMEL_ISI=y
CONFIG_VIDEO_MICROCHIP_CSI2DC=y

#
# Cadence media platform drivers
#
CONFIG_VIDEO_CADENCE_CSI2RX=y
CONFIG_VIDEO_CADENCE_CSI2TX=y

#
# Chips&Media media platform drivers
#
CONFIG_VIDEO_CODA=y
CONFIG_VIDEO_IMX_VDOA=y

#
# Intel media platform drivers
#
CONFIG_VIDEO_PXA27x=y

#
# Marvell media platform drivers
#
CONFIG_VIDEO_MMP_CAMERA=y

#
# Mediatek media platform drivers
#
CONFIG_VIDEO_MEDIATEK_JPEG=y
CONFIG_VIDEO_MEDIATEK_MDP=y
CONFIG_VIDEO_MEDIATEK_VCODEC_SCP=y
CONFIG_VIDEO_MEDIATEK_VCODEC_VPU=y
CONFIG_VIDEO_MEDIATEK_VCODEC=y
CONFIG_VIDEO_MEDIATEK_VPU=y
CONFIG_VIDEO_MEDIATEK_MDP3=y

#
# NVidia media platform drivers
#
CONFIG_VIDEO_TEGRA_VDE=y

#
# NXP media platform drivers
#
CONFIG_VIDEO_IMX_MIPI_CSIS=y
CONFIG_VIDEO_IMX_PXP=y
CONFIG_VIDEO_MX2_EMMAPRP=y
CONFIG_VIDEO_DW100=y
CONFIG_VIDEO_IMX8_JPEG=y

#
# Qualcomm media platform drivers
#
CONFIG_VIDEO_QCOM_CAMSS=y
CONFIG_VIDEO_QCOM_VENUS=y

#
# Renesas media platform drivers
#
CONFIG_VIDEO_RENESAS_CEU=y
CONFIG_VIDEO_RCAR_ISP=y
CONFIG_VIDEO_SH_VOU=y
CONFIG_VIDEO_RCAR_CSI2=y
CONFIG_VIDEO_RCAR_VIN=y
CONFIG_VIDEO_RENESAS_FCP=y
CONFIG_VIDEO_RENESAS_FDP1=y
CONFIG_VIDEO_RENESAS_JPU=y
CONFIG_VIDEO_RENESAS_VSP1=y
CONFIG_VIDEO_RCAR_DRIF=y

#
# Rockchip media platform drivers
#
CONFIG_VIDEO_ROCKCHIP_RGA=y
CONFIG_VIDEO_ROCKCHIP_ISP1=y

#
# Samsung media platform drivers
#
CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC=y
CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS=y
CONFIG_VIDEO_EXYNOS4_IS_COMMON=y
CONFIG_VIDEO_S5P_FIMC=y
CONFIG_VIDEO_S5P_MIPI_CSIS=y
CONFIG_VIDEO_EXYNOS_FIMC_LITE=y
CONFIG_VIDEO_EXYNOS4_FIMC_IS=y
CONFIG_VIDEO_EXYNOS4_ISP_DMA_CAPTURE=y
CONFIG_VIDEO_SAMSUNG_S5P_G2D=y
CONFIG_VIDEO_SAMSUNG_S5P_JPEG=y
CONFIG_VIDEO_SAMSUNG_S5P_MFC=y

#
# STMicroelectronics media platform drivers
#
CONFIG_VIDEO_STI_BDISP=y
CONFIG_DVB_C8SECTPFE=y
CONFIG_VIDEO_STI_DELTA=y
CONFIG_VIDEO_STI_DELTA_MJPEG=y
CONFIG_VIDEO_STI_DELTA_DRIVER=y
CONFIG_VIDEO_STI_HVA=y
CONFIG_VIDEO_STI_HVA_DEBUGFS=y
CONFIG_VIDEO_STM32_DCMI=y
CONFIG_VIDEO_STM32_DMA2D=y

#
# Sunxi media platform drivers
#
CONFIG_VIDEO_SUN4I_CSI=y
# CONFIG_VIDEO_SUN6I_CSI is not set

#
# Texas Instruments drivers
#
CONFIG_VIDEO_TI_VPDMA=y
CONFIG_VIDEO_TI_SC=y
CONFIG_VIDEO_TI_CSC=y
CONFIG_VIDEO_TI_CAL=y
CONFIG_VIDEO_TI_CAL_MC=y
CONFIG_VIDEO_TI_VPE=y
CONFIG_VIDEO_TI_VPE_DEBUG=y
CONFIG_VIDEO_AM437X_VPFE=y
CONFIG_VIDEO_DAVINCI_VPIF_DISPLAY=y
CONFIG_VIDEO_DAVINCI_VPIF_CAPTURE=y
CONFIG_VIDEO_DAVINCI_VPBE_DISPLAY=y
CONFIG_VIDEO_OMAP2_VOUT_VRFB=y
CONFIG_VIDEO_OMAP2_VOUT=y
CONFIG_VIDEO_OMAP3=y
CONFIG_VIDEO_OMAP3_DEBUG=y

#
# Verisilicon media platform drivers
#
CONFIG_VIDEO_HANTRO=y
CONFIG_VIDEO_HANTRO_IMX8M=y
CONFIG_VIDEO_HANTRO_SAMA5D4=y
CONFIG_VIDEO_HANTRO_ROCKCHIP=y
CONFIG_VIDEO_HANTRO_SUNXI=y

#
# VIA media platform drivers
#

#
# Xilinx media platform drivers
#
CONFIG_VIDEO_XILINX=y
CONFIG_VIDEO_XILINX_CSI2RXSS=y
CONFIG_VIDEO_XILINX_TPG=y
CONFIG_VIDEO_XILINX_VTC=y

#
# MMC/SDIO DVB adapters
#
CONFIG_SMS_SDIO_DRV=y
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VIDEO_VIM2M=y
CONFIG_VIDEO_VICODEC=y
CONFIG_VIDEO_VIMC=y
CONFIG_VIDEO_VIVID=y
CONFIG_VIDEO_VIVID_CEC=y
CONFIG_VIDEO_VIVID_MAX_DEVS=64
CONFIG_DVB_TEST_DRIVERS=y
CONFIG_DVB_VIDTV=y

#
# FireWire (IEEE 1394) Adapters
#
CONFIG_DVB_FIREDTV=y
CONFIG_DVB_FIREDTV_INPUT=y
CONFIG_MEDIA_COMMON_OPTIONS=y

#
# common driver options
#
CONFIG_CYPRESS_FIRMWARE=y
CONFIG_TTPCI_EEPROM=y
CONFIG_VIDEO_CX2341X=y
CONFIG_VIDEO_TVEEPROM=y
CONFIG_DVB_B2C2_FLEXCOP=y
CONFIG_DVB_B2C2_FLEXCOP_DEBUG=y
CONFIG_SMS_SIANO_MDTV=y
CONFIG_SMS_SIANO_RC=y
CONFIG_SMS_SIANO_DEBUGFS=y
CONFIG_VIDEO_V4L2_TPG=y
CONFIG_VIDEOBUF2_CORE=y
CONFIG_VIDEOBUF2_V4L2=y
CONFIG_VIDEOBUF2_MEMOPS=y
CONFIG_VIDEOBUF2_DMA_CONTIG=y
CONFIG_VIDEOBUF2_VMALLOC=y
CONFIG_VIDEOBUF2_DMA_SG=y
# end of Media drivers

#
# Media ancillary drivers
#
CONFIG_MEDIA_ATTACH=y

#
# IR I2C driver auto-selected by 'Autoselect ancillary drivers'
#
CONFIG_VIDEO_IR_I2C=y

#
# Camera sensor devices
#
CONFIG_VIDEO_APTINA_PLL=y
CONFIG_VIDEO_CCS_PLL=y
CONFIG_VIDEO_AR0521=y
CONFIG_VIDEO_HI556=y
CONFIG_VIDEO_HI846=y
CONFIG_VIDEO_HI847=y
CONFIG_VIDEO_IMX208=y
CONFIG_VIDEO_IMX214=y
CONFIG_VIDEO_IMX219=y
CONFIG_VIDEO_IMX258=y
CONFIG_VIDEO_IMX274=y
CONFIG_VIDEO_IMX290=y
CONFIG_VIDEO_IMX319=y
CONFIG_VIDEO_IMX334=y
CONFIG_VIDEO_IMX335=y
CONFIG_VIDEO_IMX355=y
CONFIG_VIDEO_IMX412=y
CONFIG_VIDEO_MAX9271_LIB=y
CONFIG_VIDEO_MT9M001=y
CONFIG_VIDEO_MT9M032=y
CONFIG_VIDEO_MT9M111=y
CONFIG_VIDEO_MT9P031=y
CONFIG_VIDEO_MT9T001=y
CONFIG_VIDEO_MT9T112=y
CONFIG_VIDEO_MT9V011=y
CONFIG_VIDEO_MT9V032=y
CONFIG_VIDEO_MT9V111=y
CONFIG_VIDEO_NOON010PC30=y
CONFIG_VIDEO_OG01A1B=y
CONFIG_VIDEO_OV02A10=y
CONFIG_VIDEO_OV08D10=y
CONFIG_VIDEO_OV13858=y
CONFIG_VIDEO_OV13B10=y
CONFIG_VIDEO_OV2640=y
CONFIG_VIDEO_OV2659=y
CONFIG_VIDEO_OV2680=y
CONFIG_VIDEO_OV2685=y
CONFIG_VIDEO_OV2740=y
CONFIG_VIDEO_OV5640=y
CONFIG_VIDEO_OV5645=y
CONFIG_VIDEO_OV5647=y
CONFIG_VIDEO_OV5670=y
CONFIG_VIDEO_OV5675=y
CONFIG_VIDEO_OV5693=y
CONFIG_VIDEO_OV5695=y
CONFIG_VIDEO_OV6650=y
CONFIG_VIDEO_OV7251=y
CONFIG_VIDEO_OV7640=y
CONFIG_VIDEO_OV7670=y
CONFIG_VIDEO_OV772X=y
CONFIG_VIDEO_OV7740=y
CONFIG_VIDEO_OV8856=y
CONFIG_VIDEO_OV9282=y
CONFIG_VIDEO_OV9640=y
CONFIG_VIDEO_OV9650=y
CONFIG_VIDEO_OV9734=y
CONFIG_VIDEO_RDACM20=y
CONFIG_VIDEO_RDACM21=y
CONFIG_VIDEO_RJ54N1=y
CONFIG_VIDEO_S5C73M3=y
# CONFIG_VIDEO_S5K4ECGX is not set
CONFIG_VIDEO_S5K5BAF=y
CONFIG_VIDEO_S5K6A3=y
CONFIG_VIDEO_S5K6AA=y
CONFIG_VIDEO_SR030PC30=y
CONFIG_VIDEO_VS6624=y
CONFIG_VIDEO_CCS=y
CONFIG_VIDEO_ET8EK8=y
CONFIG_VIDEO_M5MOLS=y
# end of Camera sensor devices

#
# Lens drivers
#
CONFIG_VIDEO_AD5820=y
CONFIG_VIDEO_AK7375=y
CONFIG_VIDEO_DW9714=y
CONFIG_VIDEO_DW9768=y
CONFIG_VIDEO_DW9807_VCM=y
# end of Lens drivers

#
# Flash devices
#
CONFIG_VIDEO_ADP1653=y
CONFIG_VIDEO_LM3560=y
CONFIG_VIDEO_LM3646=y
# end of Flash devices

#
# Audio decoders, processors and mixers
#
CONFIG_VIDEO_CS3308=y
CONFIG_VIDEO_CS5345=y
CONFIG_VIDEO_CS53L32A=y
CONFIG_VIDEO_MSP3400=y
CONFIG_VIDEO_SONY_BTF_MPX=y
CONFIG_VIDEO_TDA1997X=y
CONFIG_VIDEO_TDA7432=y
CONFIG_VIDEO_TDA9840=y
CONFIG_VIDEO_TEA6415C=y
CONFIG_VIDEO_TEA6420=y
CONFIG_VIDEO_TLV320AIC23B=y
CONFIG_VIDEO_TVAUDIO=y
CONFIG_VIDEO_UDA1342=y
CONFIG_VIDEO_VP27SMPX=y
CONFIG_VIDEO_WM8739=y
CONFIG_VIDEO_WM8775=y
# end of Audio decoders, processors and mixers

#
# RDS decoders
#
CONFIG_VIDEO_SAA6588=y
# end of RDS decoders

#
# Video decoders
#
CONFIG_VIDEO_ADV7180=y
CONFIG_VIDEO_ADV7183=y
CONFIG_VIDEO_ADV748X=y
CONFIG_VIDEO_ADV7604=y
CONFIG_VIDEO_ADV7604_CEC=y
CONFIG_VIDEO_ADV7842=y
CONFIG_VIDEO_ADV7842_CEC=y
CONFIG_VIDEO_BT819=y
CONFIG_VIDEO_BT856=y
CONFIG_VIDEO_BT866=y
CONFIG_VIDEO_ISL7998X=y
CONFIG_VIDEO_KS0127=y
CONFIG_VIDEO_MAX9286=y
CONFIG_VIDEO_ML86V7667=y
CONFIG_VIDEO_SAA7110=y
CONFIG_VIDEO_SAA711X=y
CONFIG_VIDEO_TC358743=y
CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TVP514X=y
CONFIG_VIDEO_TVP5150=y
CONFIG_VIDEO_TVP7002=y
CONFIG_VIDEO_TW2804=y
CONFIG_VIDEO_TW9903=y
CONFIG_VIDEO_TW9906=y
CONFIG_VIDEO_TW9910=y
CONFIG_VIDEO_VPX3220=y

#
# Video and audio decoders
#
CONFIG_VIDEO_SAA717X=y
CONFIG_VIDEO_CX25840=y
# end of Video decoders

#
# Video encoders
#
CONFIG_VIDEO_AD9389B=y
CONFIG_VIDEO_ADV7170=y
CONFIG_VIDEO_ADV7175=y
CONFIG_VIDEO_ADV7343=y
CONFIG_VIDEO_ADV7393=y
CONFIG_VIDEO_ADV7511=y
CONFIG_VIDEO_ADV7511_CEC=y
CONFIG_VIDEO_AK881X=y
CONFIG_VIDEO_SAA7127=y
CONFIG_VIDEO_SAA7185=y
CONFIG_VIDEO_THS8200=y
# end of Video encoders

#
# Video improvement chips
#
CONFIG_VIDEO_UPD64031A=y
CONFIG_VIDEO_UPD64083=y
# end of Video improvement chips

#
# Audio/Video compression chips
#
CONFIG_VIDEO_SAA6752HS=y
# end of Audio/Video compression chips

#
# SDR tuner chips
#
CONFIG_SDR_MAX2175=y
# end of SDR tuner chips

#
# Miscellaneous helper chips
#
CONFIG_VIDEO_I2C=y
CONFIG_VIDEO_M52790=y
CONFIG_VIDEO_ST_MIPID02=y
CONFIG_VIDEO_THS7303=y
# end of Miscellaneous helper chips

#
# Media SPI Adapters
#
CONFIG_CXD2880_SPI_DRV=y
CONFIG_VIDEO_GS1662=y
# end of Media SPI Adapters

CONFIG_MEDIA_TUNER=y

#
# Customize TV tuners
#
CONFIG_MEDIA_TUNER_E4000=y
CONFIG_MEDIA_TUNER_FC0011=y
CONFIG_MEDIA_TUNER_FC0012=y
CONFIG_MEDIA_TUNER_FC0013=y
CONFIG_MEDIA_TUNER_FC2580=y
CONFIG_MEDIA_TUNER_IT913X=y
CONFIG_MEDIA_TUNER_M88RS6000T=y
CONFIG_MEDIA_TUNER_MAX2165=y
CONFIG_MEDIA_TUNER_MC44S803=y
CONFIG_MEDIA_TUNER_MSI001=y
CONFIG_MEDIA_TUNER_MT2060=y
CONFIG_MEDIA_TUNER_MT2063=y
CONFIG_MEDIA_TUNER_MT20XX=y
CONFIG_MEDIA_TUNER_MT2131=y
CONFIG_MEDIA_TUNER_MT2266=y
CONFIG_MEDIA_TUNER_MXL301RF=y
CONFIG_MEDIA_TUNER_MXL5005S=y
CONFIG_MEDIA_TUNER_MXL5007T=y
CONFIG_MEDIA_TUNER_QM1D1B0004=y
CONFIG_MEDIA_TUNER_QM1D1C0042=y
CONFIG_MEDIA_TUNER_QT1010=y
CONFIG_MEDIA_TUNER_R820T=y
CONFIG_MEDIA_TUNER_SI2157=y
CONFIG_MEDIA_TUNER_SIMPLE=y
CONFIG_MEDIA_TUNER_TDA18212=y
CONFIG_MEDIA_TUNER_TDA18218=y
CONFIG_MEDIA_TUNER_TDA18250=y
CONFIG_MEDIA_TUNER_TDA18271=y
CONFIG_MEDIA_TUNER_TDA827X=y
CONFIG_MEDIA_TUNER_TDA8290=y
CONFIG_MEDIA_TUNER_TDA9887=y
CONFIG_MEDIA_TUNER_TEA5761=y
CONFIG_MEDIA_TUNER_TEA5767=y
CONFIG_MEDIA_TUNER_TUA9001=y
CONFIG_MEDIA_TUNER_XC2028=y
CONFIG_MEDIA_TUNER_XC4000=y
CONFIG_MEDIA_TUNER_XC5000=y
# end of Customize TV tuners

#
# Customise DVB Frontends
#

#
# Multistandard (satellite) frontends
#
CONFIG_DVB_M88DS3103=y
CONFIG_DVB_MXL5XX=y
CONFIG_DVB_STB0899=y
CONFIG_DVB_STB6100=y
CONFIG_DVB_STV090x=y
CONFIG_DVB_STV0910=y
CONFIG_DVB_STV6110x=y
CONFIG_DVB_STV6111=y

#
# Multistandard (cable + terrestrial) frontends
#
CONFIG_DVB_DRXK=y
CONFIG_DVB_MN88472=y
CONFIG_DVB_MN88473=y
CONFIG_DVB_SI2165=y
CONFIG_DVB_TDA18271C2DD=y

#
# DVB-S (satellite) frontends
#
CONFIG_DVB_CX24110=y
CONFIG_DVB_CX24116=y
CONFIG_DVB_CX24117=y
CONFIG_DVB_CX24120=y
CONFIG_DVB_CX24123=y
CONFIG_DVB_DS3000=y
CONFIG_DVB_MB86A16=y
CONFIG_DVB_MT312=y
CONFIG_DVB_S5H1420=y
CONFIG_DVB_SI21XX=y
CONFIG_DVB_STB6000=y
CONFIG_DVB_STV0288=y
CONFIG_DVB_STV0299=y
CONFIG_DVB_STV0900=y
CONFIG_DVB_STV6110=y
CONFIG_DVB_TDA10071=y
CONFIG_DVB_TDA10086=y
CONFIG_DVB_TDA8083=y
CONFIG_DVB_TDA8261=y
CONFIG_DVB_TDA826X=y
CONFIG_DVB_TS2020=y
CONFIG_DVB_TUA6100=y
CONFIG_DVB_TUNER_CX24113=y
CONFIG_DVB_TUNER_ITD1000=y
CONFIG_DVB_VES1X93=y
CONFIG_DVB_ZL10036=y
CONFIG_DVB_ZL10039=y

#
# DVB-T (terrestrial) frontends
#
CONFIG_DVB_AF9013=y
CONFIG_DVB_AS102_FE=y
CONFIG_DVB_CX22700=y
CONFIG_DVB_CX22702=y
CONFIG_DVB_CXD2820R=y
CONFIG_DVB_CXD2841ER=y
CONFIG_DVB_DIB3000MB=y
CONFIG_DVB_DIB3000MC=y
CONFIG_DVB_DIB7000M=y
CONFIG_DVB_DIB7000P=y
CONFIG_DVB_DIB9000=y
CONFIG_DVB_DRXD=y
CONFIG_DVB_EC100=y
CONFIG_DVB_GP8PSK_FE=y
CONFIG_DVB_L64781=y
CONFIG_DVB_MT352=y
CONFIG_DVB_NXT6000=y
CONFIG_DVB_RTL2830=y
CONFIG_DVB_RTL2832=y
CONFIG_DVB_RTL2832_SDR=y
CONFIG_DVB_S5H1432=y
CONFIG_DVB_SI2168=y
CONFIG_DVB_SP887X=y
CONFIG_DVB_STV0367=y
CONFIG_DVB_TDA10048=y
CONFIG_DVB_TDA1004X=y
CONFIG_DVB_ZD1301_DEMOD=y
CONFIG_DVB_ZL10353=y
CONFIG_DVB_CXD2880=y

#
# DVB-C (cable) frontends
#
CONFIG_DVB_STV0297=y
CONFIG_DVB_TDA10021=y
CONFIG_DVB_TDA10023=y
CONFIG_DVB_VES1820=y

#
# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
#
CONFIG_DVB_AU8522=y
CONFIG_DVB_AU8522_DTV=y
CONFIG_DVB_AU8522_V4L=y
CONFIG_DVB_BCM3510=y
CONFIG_DVB_LG2160=y
CONFIG_DVB_LGDT3305=y
CONFIG_DVB_LGDT3306A=y
CONFIG_DVB_LGDT330X=y
CONFIG_DVB_MXL692=y
CONFIG_DVB_NXT200X=y
CONFIG_DVB_OR51132=y
CONFIG_DVB_OR51211=y
CONFIG_DVB_S5H1409=y
CONFIG_DVB_S5H1411=y

#
# ISDB-T (terrestrial) frontends
#
CONFIG_DVB_DIB8000=y
CONFIG_DVB_MB86A20S=y
CONFIG_DVB_S921=y

#
# ISDB-S (satellite) & ISDB-T (terrestrial) frontends
#
CONFIG_DVB_MN88443X=y
CONFIG_DVB_TC90522=y

#
# Digital terrestrial only tuners/PLL
#
CONFIG_DVB_PLL=y
CONFIG_DVB_TUNER_DIB0070=y
CONFIG_DVB_TUNER_DIB0090=y

#
# SEC control devices for DVB-S
#
CONFIG_DVB_A8293=y
CONFIG_DVB_AF9033=y
CONFIG_DVB_ASCOT2E=y
CONFIG_DVB_ATBM8830=y
CONFIG_DVB_HELENE=y
CONFIG_DVB_HORUS3A=y
CONFIG_DVB_ISL6405=y
CONFIG_DVB_ISL6421=y
CONFIG_DVB_ISL6423=y
CONFIG_DVB_IX2505V=y
CONFIG_DVB_LGS8GL5=y
CONFIG_DVB_LGS8GXX=y
CONFIG_DVB_LNBH25=y
CONFIG_DVB_LNBH29=y
CONFIG_DVB_LNBP21=y
CONFIG_DVB_LNBP22=y
CONFIG_DVB_M88RS2000=y
CONFIG_DVB_TDA665x=y
CONFIG_DVB_DRX39XYJ=y

#
# Common Interface (EN50221) controller drivers
#
CONFIG_DVB_CXD2099=y
CONFIG_DVB_SP2=y
# end of Customise DVB Frontends

#
# Tools to develop new frontends
#
CONFIG_DVB_DUMMY_FE=y
# end of Media ancillary drivers

#
# Graphics support
#
CONFIG_APERTURE_HELPERS=y
CONFIG_IMX_IPUV3_CORE=y
CONFIG_DRM=y
CONFIG_DRM_MIPI_DBI=y
CONFIG_DRM_MIPI_DSI=y
CONFIG_DRM_KUNIT_TEST=y
CONFIG_DRM_KMS_HELPER=y
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100
CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM=y
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_DP_AUX_BUS=y
CONFIG_DRM_DISPLAY_HELPER=y
CONFIG_DRM_DISPLAY_DP_HELPER=y
CONFIG_DRM_DISPLAY_HDCP_HELPER=y
CONFIG_DRM_DISPLAY_HDMI_HELPER=y
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
CONFIG_DRM_BUDDY=y
CONFIG_DRM_GEM_DMA_HELPER=y
CONFIG_DRM_GEM_SHMEM_HELPER=y
CONFIG_DRM_SCHED=y

#
# I2C encoder or helper chips
#
CONFIG_DRM_I2C_CH7006=y
CONFIG_DRM_I2C_SIL164=y
CONFIG_DRM_I2C_NXP_TDA998X=y
CONFIG_DRM_I2C_NXP_TDA9950=y
# end of I2C encoder or helper chips

#
# ARM devices
#
CONFIG_DRM_HDLCD=y
CONFIG_DRM_HDLCD_SHOW_UNDERRUN=y
CONFIG_DRM_MALI_DISPLAY=y
CONFIG_DRM_KOMEDA=y
# end of ARM devices

CONFIG_DRM_KMB_DISPLAY=y
CONFIG_DRM_VGEM=y
CONFIG_DRM_VKMS=y
CONFIG_DRM_EXYNOS=y

#
# CRTCs
#
CONFIG_DRM_EXYNOS5433_DECON=y
CONFIG_DRM_EXYNOS_MIXER=y
CONFIG_DRM_EXYNOS_VIDI=y

#
# Encoders and Bridges
#
CONFIG_DRM_EXYNOS_DSI=y
CONFIG_DRM_EXYNOS_HDMI=y
CONFIG_DRM_EXYNOS_MIC=y

#
# Sub-drivers
#
CONFIG_DRM_EXYNOS_G2D=y
CONFIG_DRM_EXYNOS_IPP=y
CONFIG_DRM_EXYNOS_FIMC=y
CONFIG_DRM_EXYNOS_ROTATOR=y
CONFIG_DRM_EXYNOS_SCALER=y
CONFIG_DRM_EXYNOS_GSC=y
CONFIG_DRM_ROCKCHIP=y
CONFIG_ROCKCHIP_VOP=y
CONFIG_ROCKCHIP_VOP2=y
CONFIG_ROCKCHIP_ANALOGIX_DP=y
CONFIG_ROCKCHIP_CDN_DP=y
CONFIG_ROCKCHIP_DW_HDMI=y
CONFIG_ROCKCHIP_DW_MIPI_DSI=y
CONFIG_ROCKCHIP_INNO_HDMI=y
CONFIG_ROCKCHIP_LVDS=y
CONFIG_ROCKCHIP_RGB=y
CONFIG_ROCKCHIP_RK3066_HDMI=y
CONFIG_DRM_UDL=y
CONFIG_DRM_RCAR_DW_HDMI=y
CONFIG_DRM_RCAR_USE_LVDS=y
# CONFIG_DRM_RCAR_MIPI_DSI is not set
CONFIG_DRM_SUN4I=y
CONFIG_DRM_SUN4I_HDMI=y
CONFIG_DRM_SUN4I_HDMI_CEC=y
CONFIG_DRM_SUN4I_BACKEND=y
CONFIG_DRM_SUN6I_DSI=y
CONFIG_DRM_SUN8I_DW_HDMI=y
CONFIG_DRM_SUN8I_MIXER=y
CONFIG_DRM_SUN8I_TCON_TOP=y
CONFIG_DRM_VIRTIO_GPU=y
CONFIG_DRM_MSM=y
CONFIG_DRM_MSM_GPU_STATE=y
CONFIG_DRM_MSM_GPU_SUDO=y
CONFIG_DRM_MSM_MDSS=y
CONFIG_DRM_MSM_MDP4=y
CONFIG_DRM_MSM_MDP5=y
CONFIG_DRM_MSM_DPU=y
CONFIG_DRM_MSM_DP=y
CONFIG_DRM_MSM_DSI=y
CONFIG_DRM_MSM_DSI_28NM_PHY=y
CONFIG_DRM_MSM_DSI_20NM_PHY=y
CONFIG_DRM_MSM_DSI_28NM_8960_PHY=y
CONFIG_DRM_MSM_DSI_14NM_PHY=y
CONFIG_DRM_MSM_DSI_10NM_PHY=y
CONFIG_DRM_MSM_DSI_7NM_PHY=y
CONFIG_DRM_MSM_HDMI=y
CONFIG_DRM_MSM_HDMI_HDCP=y
CONFIG_DRM_PANEL=y

#
# Display Panels
#
CONFIG_DRM_PANEL_ABT_Y030XX067A=y
CONFIG_DRM_PANEL_ARM_VERSATILE=y
CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596=y
CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0=y
CONFIG_DRM_PANEL_BOE_HIMAX8279D=y
CONFIG_DRM_PANEL_BOE_TV101WUM_NL6=y
CONFIG_DRM_PANEL_DSI_CM=y
CONFIG_DRM_PANEL_LVDS=y
CONFIG_DRM_PANEL_EBBG_FT8719=y
CONFIG_DRM_PANEL_ELIDA_KD35T133=y
CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02=y
CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=y
CONFIG_DRM_PANEL_ILITEK_IL9322=y
CONFIG_DRM_PANEL_ILITEK_ILI9341=y
CONFIG_DRM_PANEL_ILITEK_ILI9881C=y
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=y
CONFIG_DRM_PANEL_INNOLUX_P079ZCA=y
CONFIG_DRM_PANEL_JDI_LT070ME05000=y
CONFIG_DRM_PANEL_JDI_R63452=y
CONFIG_DRM_PANEL_KHADAS_TS050=y
CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04=y
CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W=y
CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829=y
CONFIG_DRM_PANEL_SAMSUNG_LD9040=y
CONFIG_DRM_PANEL_LG_LB035Q02=y
CONFIG_DRM_PANEL_LG_LG4573=y
CONFIG_DRM_PANEL_NEC_NL8048HL11=y
CONFIG_DRM_PANEL_NEWVISION_NV3052C=y
CONFIG_DRM_PANEL_NOVATEK_NT35510=y
CONFIG_DRM_PANEL_NOVATEK_NT35560=y
CONFIG_DRM_PANEL_NOVATEK_NT35950=y
CONFIG_DRM_PANEL_NOVATEK_NT36672A=y
CONFIG_DRM_PANEL_NOVATEK_NT39016=y
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=y
CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO=y
CONFIG_DRM_PANEL_ORISETECH_OTM8009A=y
CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS=y
CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=y
CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=y
CONFIG_DRM_PANEL_RAYDIUM_RM67191=y
CONFIG_DRM_PANEL_RAYDIUM_RM68200=y
CONFIG_DRM_PANEL_RONBO_RB070D30=y
CONFIG_DRM_PANEL_SAMSUNG_DB7430=y
CONFIG_DRM_PANEL_SAMSUNG_S6D16D0=y
CONFIG_DRM_PANEL_SAMSUNG_S6D27A1=y
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=y
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=y
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0=y
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_SPI=y
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_DSI=y
CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01=y
CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=y
CONFIG_DRM_PANEL_SAMSUNG_SOFEF00=y
CONFIG_DRM_PANEL_SEIKO_43WVF1G=y
CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=y
CONFIG_DRM_PANEL_SHARP_LS037V7DW01=y
CONFIG_DRM_PANEL_SHARP_LS043T1LE01=y
CONFIG_DRM_PANEL_SHARP_LS060T1SX01=y
CONFIG_DRM_PANEL_SITRONIX_ST7701=y
CONFIG_DRM_PANEL_SITRONIX_ST7703=y
CONFIG_DRM_PANEL_SITRONIX_ST7789V=y
CONFIG_DRM_PANEL_SONY_ACX565AKM=y
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=y
CONFIG_DRM_PANEL_TDO_TL070WSH30=y
CONFIG_DRM_PANEL_TPO_TD028TTEC1=y
CONFIG_DRM_PANEL_TPO_TD043MTEA1=y
CONFIG_DRM_PANEL_TPO_TPG110=y
CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=y
CONFIG_DRM_PANEL_VISIONOX_RM69299=y
CONFIG_DRM_PANEL_WIDECHIPS_WS2401=y
CONFIG_DRM_PANEL_XINPENG_XPP055C272=y
# end of Display Panels

CONFIG_DRM_BRIDGE=y
CONFIG_DRM_PANEL_BRIDGE=y

#
# Display Interface Bridges
#
CONFIG_DRM_CDNS_DSI=y
CONFIG_DRM_CHIPONE_ICN6211=y
CONFIG_DRM_CHRONTEL_CH7033=y
CONFIG_DRM_CROS_EC_ANX7688=y
CONFIG_DRM_DISPLAY_CONNECTOR=y
CONFIG_DRM_FSL_LDB=y
CONFIG_DRM_ITE_IT6505=y
CONFIG_DRM_LONTIUM_LT8912B=y
CONFIG_DRM_LONTIUM_LT9211=y
CONFIG_DRM_LONTIUM_LT9611=y
CONFIG_DRM_LONTIUM_LT9611UXC=y
CONFIG_DRM_ITE_IT66121=y
CONFIG_DRM_LVDS_CODEC=y
CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW=y
CONFIG_DRM_NWL_MIPI_DSI=y
CONFIG_DRM_NXP_PTN3460=y
CONFIG_DRM_PARADE_PS8622=y
CONFIG_DRM_PARADE_PS8640=y
CONFIG_DRM_SIL_SII8620=y
CONFIG_DRM_SII902X=y
CONFIG_DRM_SII9234=y
CONFIG_DRM_SIMPLE_BRIDGE=y
CONFIG_DRM_THINE_THC63LVD1024=y
CONFIG_DRM_TOSHIBA_TC358762=y
CONFIG_DRM_TOSHIBA_TC358764=y
CONFIG_DRM_TOSHIBA_TC358767=y
CONFIG_DRM_TOSHIBA_TC358768=y
CONFIG_DRM_TOSHIBA_TC358775=y
CONFIG_DRM_TI_DLPC3433=y
CONFIG_DRM_TI_TFP410=y
CONFIG_DRM_TI_SN65DSI83=y
CONFIG_DRM_TI_SN65DSI86=y
CONFIG_DRM_TI_TPD12S015=y
CONFIG_DRM_ANALOGIX_ANX6345=y
CONFIG_DRM_ANALOGIX_ANX78XX=y
CONFIG_DRM_ANALOGIX_DP=y
CONFIG_DRM_ANALOGIX_ANX7625=y
CONFIG_DRM_I2C_ADV7511=y
CONFIG_DRM_I2C_ADV7511_AUDIO=y
CONFIG_DRM_I2C_ADV7511_CEC=y
CONFIG_DRM_CDNS_MHDP8546=y
CONFIG_DRM_CDNS_MHDP8546_J721E=y
CONFIG_DRM_IMX8QM_LDB=y
CONFIG_DRM_IMX8QXP_LDB=y
CONFIG_DRM_IMX8QXP_PIXEL_COMBINER=y
CONFIG_DRM_IMX8QXP_PIXEL_LINK=y
CONFIG_DRM_IMX8QXP_PIXEL_LINK_TO_DPI=y
CONFIG_DRM_DW_HDMI=y
CONFIG_DRM_DW_HDMI_AHB_AUDIO=y
CONFIG_DRM_DW_HDMI_I2S_AUDIO=y
CONFIG_DRM_DW_HDMI_GP_AUDIO=y
CONFIG_DRM_DW_HDMI_CEC=y
CONFIG_DRM_DW_MIPI_DSI=y
# end of Display Interface Bridges

CONFIG_DRM_IMX=y
CONFIG_DRM_IMX_PARALLEL_DISPLAY=y
CONFIG_DRM_IMX_TVE=y
CONFIG_DRM_IMX_LDB=y
CONFIG_DRM_IMX_HDMI=y
CONFIG_DRM_INGENIC=y
CONFIG_DRM_INGENIC_IPU=y
CONFIG_DRM_V3D=y
CONFIG_DRM_ETNAVIV=y
CONFIG_DRM_ETNAVIV_THERMAL=y
CONFIG_DRM_LOGICVC=y
CONFIG_DRM_MXS=y
CONFIG_DRM_MXSFB=y
CONFIG_DRM_IMX_LCDIF=y
CONFIG_DRM_ARCPGU=y
CONFIG_DRM_GM12U320=y
CONFIG_DRM_PANEL_MIPI_DBI=y
CONFIG_DRM_SIMPLEDRM=y
CONFIG_TINYDRM_HX8357D=y
CONFIG_TINYDRM_ILI9163=y
CONFIG_TINYDRM_ILI9225=y
CONFIG_TINYDRM_ILI9341=y
CONFIG_TINYDRM_ILI9486=y
CONFIG_TINYDRM_MI0283QT=y
CONFIG_TINYDRM_REPAPER=y
CONFIG_TINYDRM_ST7586=y
CONFIG_TINYDRM_ST7735R=y
CONFIG_DRM_PL111=y
CONFIG_DRM_TVE200=y
CONFIG_DRM_LIMA=y
CONFIG_DRM_ASPEED_GFX=y
CONFIG_DRM_MCDE=y
CONFIG_DRM_TIDSS=y
CONFIG_DRM_ZYNQMP_DPSUB=y
CONFIG_DRM_GUD=y
CONFIG_DRM_SSD130X=y
CONFIG_DRM_SSD130X_I2C=y
CONFIG_DRM_SSD130X_SPI=y
CONFIG_DRM_SPRD=y
CONFIG_DRM_LEGACY=y
CONFIG_DRM_EXPORT_FOR_TESTS=y
CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
CONFIG_DRM_NOMODESET=y
CONFIG_DRM_LIB_RANDOM=y

#
# Frame buffer Devices
#
CONFIG_FB_CMDLINE=y
CONFIG_FB_NOTIFY=y
CONFIG_FB=y
CONFIG_FIRMWARE_EDID=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_CFB_REV_PIXELS_IN_BYTE=y
CONFIG_FB_SYS_FILLRECT=y
CONFIG_FB_SYS_COPYAREA=y
CONFIG_FB_SYS_IMAGEBLIT=y
CONFIG_FB_FOREIGN_ENDIAN=y
CONFIG_FB_BOTH_ENDIAN=y
# CONFIG_FB_BIG_ENDIAN is not set
# CONFIG_FB_LITTLE_ENDIAN is not set
CONFIG_FB_SYS_FOPS=y
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_MACMODES=y
CONFIG_FB_BACKLIGHT=y
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y

#
# Frame buffer hardware drivers
#
CONFIG_FB_CLPS711X=y
CONFIG_FB_IMX=y
CONFIG_FB_ARC=y
CONFIG_FB_CONTROL=y
CONFIG_FB_UVESA=y
CONFIG_FB_GBE=y
CONFIG_FB_GBE_MEM=4
CONFIG_FB_PVR2=y
CONFIG_FB_OPENCORES=y
CONFIG_FB_S1D13XXX=y
CONFIG_FB_ATMEL=y
CONFIG_FB_WM8505=y
CONFIG_FB_WMT_GE_ROPS=y
CONFIG_FB_PXA168=y
CONFIG_FB_W100=y
CONFIG_FB_SH_MOBILE_LCDC=y
CONFIG_FB_TMIO=y
CONFIG_FB_TMIO_ACCELL=y
CONFIG_FB_S3C=y
CONFIG_FB_S3C_DEBUG_REGWRITE=y
CONFIG_FB_SM501=y
CONFIG_FB_SMSCUFX=y
CONFIG_FB_UDL=y
CONFIG_FB_IBM_GXT4500=y
CONFIG_FB_GOLDFISH=y
CONFIG_FB_DA8XX=y
CONFIG_FB_VIRTUAL=y
CONFIG_FB_METRONOME=y
CONFIG_FB_BROADSHEET=y
CONFIG_FB_SSD1307=y
CONFIG_FB_OMAP_LCD_H3=y
CONFIG_FB_OMAP2=y
CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
CONFIG_FB_OMAP2_NUM_FBS=3
CONFIG_FB_OMAP2_DSS_INIT=y
CONFIG_FB_OMAP2_DSS=y
CONFIG_FB_OMAP2_DSS_DEBUG=y
CONFIG_FB_OMAP2_DSS_DEBUGFS=y
CONFIG_FB_OMAP2_DSS_COLLECT_IRQ_STATS=y
CONFIG_FB_OMAP2_DSS_DPI=y
CONFIG_FB_OMAP2_DSS_VENC=y
CONFIG_FB_OMAP2_DSS_HDMI_COMMON=y
CONFIG_FB_OMAP4_DSS_HDMI=y
CONFIG_FB_OMAP5_DSS_HDMI=y
CONFIG_FB_OMAP2_DSS_SDI=y
CONFIG_FB_OMAP2_DSS_DSI=y
CONFIG_FB_OMAP2_DSS_MIN_FCK_PER_PCK=0
CONFIG_FB_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y

#
# OMAPFB Panel and Encoder Drivers
#
CONFIG_FB_OMAP2_ENCODER_OPA362=y
CONFIG_FB_OMAP2_ENCODER_TFP410=y
CONFIG_FB_OMAP2_ENCODER_TPD12S015=y
CONFIG_FB_OMAP2_CONNECTOR_DVI=y
CONFIG_FB_OMAP2_CONNECTOR_HDMI=y
CONFIG_FB_OMAP2_CONNECTOR_ANALOG_TV=y
CONFIG_FB_OMAP2_PANEL_DPI=y
CONFIG_FB_OMAP2_PANEL_LGPHILIPS_LB035Q02=y
# end of OMAPFB Panel and Encoder Drivers

CONFIG_MMP_DISP=y
CONFIG_MMP_DISP_CONTROLLER=y
CONFIG_MMP_DISP_SPI=y
CONFIG_MMP_PANEL_TPOHVGA=y
CONFIG_MMP_FB=y
# end of Frame buffer Devices

#
# Backlight & LCD device support
#
CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_L4F00242T03=y
CONFIG_LCD_LMS283GF05=y
CONFIG_LCD_LTV350QV=y
CONFIG_LCD_ILI922X=y
CONFIG_LCD_ILI9320=y
CONFIG_LCD_TDO24M=y
CONFIG_LCD_VGG2432A4=y
CONFIG_LCD_PLATFORM=y
CONFIG_LCD_AMS369FG06=y
CONFIG_LCD_LMS501KF03=y
CONFIG_LCD_HX8357=y
CONFIG_LCD_OTM3225A=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_ATMEL_LCDC=y
CONFIG_BACKLIGHT_KTD253=y
CONFIG_BACKLIGHT_LM3533=y
CONFIG_BACKLIGHT_OMAP1=y
CONFIG_BACKLIGHT_PWM=y
CONFIG_BACKLIGHT_DA903X=y
CONFIG_BACKLIGHT_DA9052=y
CONFIG_BACKLIGHT_MAX8925=y
CONFIG_BACKLIGHT_MT6370=y
CONFIG_BACKLIGHT_QCOM_WLED=y
CONFIG_BACKLIGHT_RT4831=y
CONFIG_BACKLIGHT_WM831X=y
CONFIG_BACKLIGHT_ADP5520=y
CONFIG_BACKLIGHT_ADP8860=y
CONFIG_BACKLIGHT_ADP8870=y
CONFIG_BACKLIGHT_88PM860X=y
CONFIG_BACKLIGHT_PCF50633=y
CONFIG_BACKLIGHT_AAT2870=y
CONFIG_BACKLIGHT_LM3630A=y
CONFIG_BACKLIGHT_LM3639=y
CONFIG_BACKLIGHT_LP855X=y
CONFIG_BACKLIGHT_LP8788=y
CONFIG_BACKLIGHT_PANDORA=y
CONFIG_BACKLIGHT_SKY81452=y
CONFIG_BACKLIGHT_TPS65217=y
CONFIG_BACKLIGHT_AS3711=y
CONFIG_BACKLIGHT_GPIO=y
CONFIG_BACKLIGHT_LV5207LP=y
CONFIG_BACKLIGHT_BD6107=y
CONFIG_BACKLIGHT_ARCXCNN=y
CONFIG_BACKLIGHT_RAVE_SP=y
CONFIG_BACKLIGHT_LED=y
# end of Backlight & LCD device support

CONFIG_VIDEOMODE_HELPERS=y
CONFIG_HDMI=y

#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y
# end of Console display driver support

CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
# end of Graphics support

CONFIG_SOUND=y
CONFIG_SOUND_OSS_CORE=y
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
CONFIG_SND=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y
CONFIG_SND_PCM_ELD=y
CONFIG_SND_PCM_IEC958=y
CONFIG_SND_DMAENGINE_PCM=y
CONFIG_SND_HWDEP=y
CONFIG_SND_SEQ_DEVICE=y
CONFIG_SND_RAWMIDI=y
CONFIG_SND_COMPRESS_OFFLOAD=y
CONFIG_SND_JACK=y
CONFIG_SND_JACK_INPUT_DEV=y
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=y
CONFIG_SND_PCM_OSS=y
CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_PCM_TIMER=y
CONFIG_SND_HRTIMER=y
CONFIG_SND_DYNAMIC_MINORS=y
CONFIG_SND_MAX_CARDS=32
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_PROC_FS=y
CONFIG_SND_VERBOSE_PROCFS=y
CONFIG_SND_VERBOSE_PRINTK=y
CONFIG_SND_CTL_FAST_LOOKUP=y
CONFIG_SND_DEBUG=y
CONFIG_SND_DEBUG_VERBOSE=y
CONFIG_SND_PCM_XRUN_DEBUG=y
CONFIG_SND_CTL_INPUT_VALIDATION=y
CONFIG_SND_CTL_DEBUG=y
CONFIG_SND_JACK_INJECTION_DEBUG=y
CONFIG_SND_VMASTER=y
CONFIG_SND_CTL_LED=y
CONFIG_SND_SEQUENCER=y
CONFIG_SND_SEQ_DUMMY=y
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
CONFIG_SND_SEQ_MIDI_EVENT=y
CONFIG_SND_SEQ_MIDI=y
CONFIG_SND_SEQ_VIRMIDI=y
CONFIG_SND_MPU401_UART=y
CONFIG_SND_VX_LIB=y
CONFIG_SND_AC97_CODEC=y
CONFIG_SND_DRIVERS=y
CONFIG_SND_DUMMY=y
CONFIG_SND_ALOOP=y
CONFIG_SND_VIRMIDI=y
CONFIG_SND_MTPAV=y
CONFIG_SND_MTS64=y
CONFIG_SND_SERIAL_U16550=y
CONFIG_SND_SERIAL_GENERIC=y
CONFIG_SND_MPU401=y
CONFIG_SND_PORTMAN2X4=y
CONFIG_SND_AC97_POWER_SAVE=y
CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0

#
# HD-Audio
#
CONFIG_SND_HDA=y
CONFIG_SND_HDA_GENERIC_LEDS=y
CONFIG_SND_HDA_HWDEP=y
CONFIG_SND_HDA_RECONFIG=y
CONFIG_SND_HDA_INPUT_BEEP=y
CONFIG_SND_HDA_INPUT_BEEP_MODE=1
CONFIG_SND_HDA_PATCH_LOADER=y
CONFIG_SND_HDA_CODEC_REALTEK=y
CONFIG_SND_HDA_CODEC_ANALOG=y
CONFIG_SND_HDA_CODEC_SIGMATEL=y
CONFIG_SND_HDA_CODEC_VIA=y
CONFIG_SND_HDA_CODEC_HDMI=y
CONFIG_SND_HDA_CODEC_CIRRUS=y
CONFIG_SND_HDA_CODEC_CS8409=y
CONFIG_SND_HDA_CODEC_CONEXANT=y
CONFIG_SND_HDA_CODEC_CA0110=y
CONFIG_SND_HDA_CODEC_CA0132=y
CONFIG_SND_HDA_CODEC_CA0132_DSP=y
CONFIG_SND_HDA_CODEC_CMEDIA=y
CONFIG_SND_HDA_CODEC_SI3054=y
CONFIG_SND_HDA_GENERIC=y
# end of HD-Audio

CONFIG_SND_HDA_CORE=y
CONFIG_SND_HDA_DSP_LOADER=y
CONFIG_SND_HDA_EXT_CORE=y
CONFIG_SND_HDA_PREALLOC_SIZE=64
CONFIG_SND_INTEL_DSP_CONFIG=y
CONFIG_SND_PXA2XX_LIB=y
CONFIG_SND_SPI=y
CONFIG_SND_AT73C213=y
CONFIG_SND_AT73C213_TARGET_BITRATE=48000
CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=y
CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y
CONFIG_SND_USB_UA101=y
CONFIG_SND_USB_CAIAQ=y
CONFIG_SND_USB_CAIAQ_INPUT=y
CONFIG_SND_USB_US122L=y
CONFIG_SND_USB_6FIRE=y
CONFIG_SND_USB_HIFACE=y
CONFIG_SND_BCD2000=y
CONFIG_SND_USB_LINE6=y
CONFIG_SND_USB_POD=y
CONFIG_SND_USB_PODHD=y
CONFIG_SND_USB_TONEPORT=y
CONFIG_SND_USB_VARIAX=y
CONFIG_SND_FIREWIRE=y
CONFIG_SND_FIREWIRE_LIB=y
CONFIG_SND_DICE=y
CONFIG_SND_OXFW=y
CONFIG_SND_ISIGHT=y
CONFIG_SND_FIREWORKS=y
CONFIG_SND_BEBOB=y
CONFIG_SND_FIREWIRE_DIGI00X=y
CONFIG_SND_FIREWIRE_TASCAM=y
CONFIG_SND_FIREWIRE_MOTU=y
CONFIG_SND_FIREFACE=y
CONFIG_SND_PCMCIA=y
CONFIG_SND_VXPOCKET=y
CONFIG_SND_PDAUDIOCF=y
CONFIG_SND_SOC=y
CONFIG_SND_SOC_AC97_BUS=y
CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
CONFIG_SND_SOC_COMPRESS=y
CONFIG_SND_SOC_TOPOLOGY=y
CONFIG_SND_SOC_TOPOLOGY_KUNIT_TEST=y
CONFIG_SND_SOC_UTILS_KUNIT_TEST=y
CONFIG_SND_SOC_ADI=y
CONFIG_SND_SOC_ADI_AXI_I2S=y
CONFIG_SND_SOC_ADI_AXI_SPDIF=y
CONFIG_SND_SOC_AMD_ACP=y
CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=y
CONFIG_SND_AMD_ACP_CONFIG=y
CONFIG_SND_SOC_APPLE_MCA=y
CONFIG_SND_ATMEL_SOC=y
CONFIG_SND_ATMEL_SOC_PDC=y
CONFIG_SND_ATMEL_SOC_DMA=y
CONFIG_SND_ATMEL_SOC_SSC=y
CONFIG_SND_ATMEL_SOC_SSC_PDC=y
CONFIG_SND_ATMEL_SOC_SSC_DMA=y
CONFIG_SND_AT91_SOC_SAM9G20_WM8731=y
CONFIG_SND_ATMEL_SOC_WM8904=y
CONFIG_SND_AT91_SOC_SAM9X5_WM8731=y
CONFIG_SND_ATMEL_SOC_CLASSD=y
CONFIG_SND_ATMEL_SOC_PDMIC=y
CONFIG_SND_ATMEL_SOC_I2S=y
CONFIG_SND_SOC_MIKROE_PROTO=y
CONFIG_SND_MCHP_SOC_I2S_MCC=y
CONFIG_SND_MCHP_SOC_SPDIFTX=y
CONFIG_SND_MCHP_SOC_SPDIFRX=y
CONFIG_SND_MCHP_SOC_PDMC=y
CONFIG_SND_BCM2835_SOC_I2S=y
CONFIG_SND_SOC_CYGNUS=y
CONFIG_SND_BCM63XX_I2S_WHISTLER=y
CONFIG_SND_EP93XX_SOC=y
CONFIG_SND_DESIGNWARE_I2S=y
CONFIG_SND_DESIGNWARE_PCM=y

#
# SoC Audio for Freescale CPUs
#

#
# Common SoC Audio options for Freescale CPUs:
#
CONFIG_SND_SOC_FSL_ASRC=y
CONFIG_SND_SOC_FSL_SAI=y
CONFIG_SND_SOC_FSL_MQS=y
CONFIG_SND_SOC_FSL_AUDMIX=y
CONFIG_SND_SOC_FSL_SSI=y
CONFIG_SND_SOC_FSL_SPDIF=y
CONFIG_SND_SOC_FSL_ESAI=y
CONFIG_SND_SOC_FSL_MICFIL=y
CONFIG_SND_SOC_FSL_EASRC=y
CONFIG_SND_SOC_FSL_XCVR=y
CONFIG_SND_SOC_FSL_AUD2HTX=y
CONFIG_SND_SOC_FSL_UTILS=y
CONFIG_SND_SOC_FSL_RPMSG=y
CONFIG_SND_SOC_IMX_PCM_DMA=y
CONFIG_SND_SOC_IMX_AUDIO_RPMSG=y
CONFIG_SND_SOC_IMX_PCM_RPMSG=y
CONFIG_SND_SOC_IMX_AUDMUX=y
CONFIG_SND_IMX_SOC=y

#
# SoC Audio support for Freescale i.MX boards:
#
CONFIG_SND_SOC_IMX_ES8328=y
CONFIG_SND_SOC_IMX_SGTL5000=y
CONFIG_SND_SOC_IMX_SPDIF=y
CONFIG_SND_SOC_FSL_ASOC_CARD=y
CONFIG_SND_SOC_IMX_AUDMIX=y
CONFIG_SND_SOC_IMX_HDMI=y
CONFIG_SND_SOC_IMX_RPMSG=y
CONFIG_SND_SOC_IMX_CARD=y
# end of SoC Audio for Freescale CPUs

CONFIG_SND_I2S_HI6210_I2S=y
CONFIG_SND_JZ4740_SOC_I2S=y
CONFIG_SND_KIRKWOOD_SOC=y
CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB=y
CONFIG_SND_SOC_IMG=y
CONFIG_SND_SOC_IMG_I2S_IN=y
CONFIG_SND_SOC_IMG_I2S_OUT=y
CONFIG_SND_SOC_IMG_PARALLEL_OUT=y
CONFIG_SND_SOC_IMG_SPDIF_IN=y
CONFIG_SND_SOC_IMG_SPDIF_OUT=y
CONFIG_SND_SOC_IMG_PISTACHIO_INTERNAL_DAC=y
CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
CONFIG_SND_SOC_ACPI_INTEL_MATCH=y
CONFIG_SND_SOC_INTEL_KEEMBAY=y
CONFIG_SND_SOC_INTEL_MACH=y
CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y
CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH=y
CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=y
CONFIG_SND_SOC_INTEL_BROADWELL_MACH=y
CONFIG_SND_SOC_MEDIATEK=y
CONFIG_SND_SOC_MT8186=y
CONFIG_SND_SOC_MT8186_MT6366_DA7219_MAX98357=y
CONFIG_SND_SOC_MT8186_MT6366_RT1019_RT5682S=y
CONFIG_SND_SOC_MTK_BTCVSD=y
CONFIG_SND_SOC_MT8195=y
CONFIG_SND_SOC_MT8195_MT6359=y

#
# ASoC support for Amlogic platforms
#
CONFIG_SND_MESON_AIU=y
CONFIG_SND_MESON_AXG_FIFO=y
CONFIG_SND_MESON_AXG_FRDDR=y
CONFIG_SND_MESON_AXG_TODDR=y
CONFIG_SND_MESON_AXG_TDM_FORMATTER=y
CONFIG_SND_MESON_AXG_TDM_INTERFACE=y
CONFIG_SND_MESON_AXG_TDMIN=y
CONFIG_SND_MESON_AXG_TDMOUT=y
CONFIG_SND_MESON_AXG_SOUND_CARD=y
CONFIG_SND_MESON_AXG_SPDIFOUT=y
CONFIG_SND_MESON_AXG_SPDIFIN=y
CONFIG_SND_MESON_AXG_PDM=y
CONFIG_SND_MESON_CARD_UTILS=y
CONFIG_SND_MESON_CODEC_GLUE=y
CONFIG_SND_MESON_GX_SOUND_CARD=y
CONFIG_SND_MESON_G12A_TOACODEC=y
CONFIG_SND_MESON_G12A_TOHDMITX=y
CONFIG_SND_SOC_MESON_T9015=y
# end of ASoC support for Amlogic platforms

CONFIG_SND_MXS_SOC=y
CONFIG_SND_SOC_MXS_SGTL5000=y
CONFIG_SND_PXA2XX_SOC=y
CONFIG_SND_SOC_QCOM=y
CONFIG_SND_SOC_LPASS_CPU=y
CONFIG_SND_SOC_LPASS_HDMI=y
CONFIG_SND_SOC_LPASS_PLATFORM=y
CONFIG_SND_SOC_LPASS_CDC_DMA=y
CONFIG_SND_SOC_LPASS_IPQ806X=y
CONFIG_SND_SOC_LPASS_APQ8016=y
CONFIG_SND_SOC_LPASS_SC7180=y
CONFIG_SND_SOC_LPASS_SC7280=y
CONFIG_SND_SOC_STORM=y
CONFIG_SND_SOC_APQ8016_SBC=y
CONFIG_SND_SOC_QCOM_COMMON=y
CONFIG_SND_SOC_QDSP6_COMMON=y
CONFIG_SND_SOC_QDSP6_CORE=y
CONFIG_SND_SOC_QDSP6_AFE=y
CONFIG_SND_SOC_QDSP6_AFE_DAI=y
CONFIG_SND_SOC_QDSP6_AFE_CLOCKS=y
CONFIG_SND_SOC_QDSP6_ADM=y
CONFIG_SND_SOC_QDSP6_ROUTING=y
CONFIG_SND_SOC_QDSP6_ASM=y
CONFIG_SND_SOC_QDSP6_ASM_DAI=y
CONFIG_SND_SOC_QDSP6_APM_DAI=y
CONFIG_SND_SOC_QDSP6_APM_LPASS_DAI=y
CONFIG_SND_SOC_QDSP6_APM=y
CONFIG_SND_SOC_QDSP6_PRM_LPASS_CLOCKS=y
CONFIG_SND_SOC_QDSP6_PRM=y
CONFIG_SND_SOC_QDSP6=y
CONFIG_SND_SOC_MSM8996=y
CONFIG_SND_SOC_SDM845=y
CONFIG_SND_SOC_SM8250=y
CONFIG_SND_SOC_SC8280XP=y
CONFIG_SND_SOC_SC7180=y
CONFIG_SND_SOC_SC7280=y
CONFIG_SND_SOC_ROCKCHIP=y
CONFIG_SND_SOC_ROCKCHIP_I2S=y
CONFIG_SND_SOC_ROCKCHIP_I2S_TDM=y
CONFIG_SND_SOC_ROCKCHIP_PDM=y
CONFIG_SND_SOC_ROCKCHIP_SPDIF=y
CONFIG_SND_SOC_ROCKCHIP_MAX98090=y
CONFIG_SND_SOC_ROCKCHIP_RT5645=y
CONFIG_SND_SOC_RK3288_HDMI_ANALOG=y
CONFIG_SND_SOC_RK3399_GRU_SOUND=y
CONFIG_SND_SOC_SAMSUNG=y
CONFIG_SND_S3C24XX_I2S=y
CONFIG_SND_SAMSUNG_PCM=y
CONFIG_SND_SAMSUNG_SPDIF=y
CONFIG_SND_SAMSUNG_I2S=y
CONFIG_SND_SOC_SAMSUNG_NEO1973_WM8753=y
CONFIG_SND_SOC_SAMSUNG_SMDK_WM8580=y
CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994=y
CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X=y
CONFIG_SND_SOC_SAMSUNG_SIMTEC=y
CONFIG_SND_SOC_SAMSUNG_SIMTEC_TLV320AIC23=y
CONFIG_SND_SOC_SAMSUNG_SIMTEC_HERMES=y
CONFIG_SND_SOC_SAMSUNG_H1940_UDA1380=y
CONFIG_SND_SOC_SAMSUNG_RX1950_UDA1380=y
CONFIG_SND_SOC_SMARTQ=y
CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF=y
CONFIG_SND_SOC_SMDK_WM8994_PCM=y
CONFIG_SND_SOC_SPEYSIDE=y
CONFIG_SND_SOC_TOBERMORY=y
CONFIG_SND_SOC_BELLS=y
CONFIG_SND_SOC_LOWLAND=y
CONFIG_SND_SOC_LITTLEMILL=y
CONFIG_SND_SOC_SNOW=y
CONFIG_SND_SOC_ODROID=y
CONFIG_SND_SOC_ARNDALE=y
CONFIG_SND_SOC_SAMSUNG_TM2_WM5110=y
CONFIG_SND_SOC_SAMSUNG_ARIES_WM8994=y
CONFIG_SND_SOC_SAMSUNG_MIDAS_WM1811=y

#
# SoC Audio support for Renesas SoCs
#
CONFIG_SND_SOC_SH4_FSI=y
CONFIG_SND_SOC_RCAR=y
CONFIG_SND_SOC_RZ=y
# end of SoC Audio support for Renesas SoCs

CONFIG_SND_SOC_SOF_TOPLEVEL=y
CONFIG_SND_SOC_SOF_ACPI=y
CONFIG_SND_SOC_SOF_ACPI_DEV=y
CONFIG_SND_SOC_SOF_OF=y
CONFIG_SND_SOC_SOF_OF_DEV=y
CONFIG_SND_SOC_SOF_COMPRESS=y
CONFIG_SND_SOC_SOF_CLIENT=y
CONFIG_SND_SOC_SOF_DEVELOPER_SUPPORT=y
CONFIG_SND_SOC_SOF_FORCE_PROBE_WORKQUEUE=y
CONFIG_SND_SOC_SOF_NOCODEC=y
CONFIG_SND_SOC_SOF_NOCODEC_SUPPORT=y
CONFIG_SND_SOC_SOF_STRICT_ABI_CHECKS=y
CONFIG_SND_SOC_SOF_DEBUG=y
CONFIG_SND_SOC_SOF_FORCE_NOCODEC_MODE=y
CONFIG_SND_SOC_SOF_DEBUG_XRUN_STOP=y
CONFIG_SND_SOC_SOF_DEBUG_VERBOSE_IPC=y
CONFIG_SND_SOC_SOF_DEBUG_FORCE_IPC_POSITION=y
CONFIG_SND_SOC_SOF_DEBUG_ENABLE_DEBUGFS_CACHE=y
CONFIG_SND_SOC_SOF_DEBUG_ENABLE_FIRMWARE_TRACE=y
CONFIG_SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST=y
CONFIG_SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST_NUM=2
CONFIG_SND_SOC_SOF_DEBUG_IPC_MSG_INJECTOR=y
CONFIG_SND_SOC_SOF_DEBUG_RETAIN_DSP_CONTEXT=y
CONFIG_SND_SOC_SOF=y
CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE=y
CONFIG_SND_SOC_SOF_IPC3=y
CONFIG_SND_SOC_SOF_AMD_TOPLEVEL=y
CONFIG_SND_SOC_SOF_IMX_TOPLEVEL=y
CONFIG_SND_SOC_SOF_IMX_COMMON=y
CONFIG_SND_SOC_SOF_IMX8=y
CONFIG_SND_SOC_SOF_IMX8M=y
CONFIG_SND_SOC_SOF_IMX8ULP=y
CONFIG_SND_SOC_SOF_INTEL_TOPLEVEL=y
CONFIG_SND_SOC_SOF_INTEL_HIFI_EP_IPC=y
CONFIG_SND_SOC_SOF_INTEL_ATOM_HIFI_EP=y
CONFIG_SND_SOC_SOF_INTEL_COMMON=y
CONFIG_SND_SOC_SOF_BAYTRAIL=y
CONFIG_SND_SOC_SOF_BROADWELL=y
CONFIG_SND_SOC_SOF_MTK_TOPLEVEL=y
CONFIG_SND_SOC_SOF_MTK_COMMON=y
CONFIG_SND_SOC_SOF_MT8186=y
CONFIG_SND_SOC_SOF_MT8195=y
CONFIG_SND_SOC_SOF_XTENSA=y
CONFIG_SND_SOC_SPRD=y
CONFIG_SND_SOC_SPRD_MCDT=y
CONFIG_SND_SOC_STI=y

#
# STMicroelectronics STM32 SOC audio support
#
CONFIG_SND_SOC_STM32_SAI=y
CONFIG_SND_SOC_STM32_I2S=y
CONFIG_SND_SOC_STM32_SPDIFRX=y
CONFIG_SND_SOC_STM32_DFSDM=y
# end of STMicroelectronics STM32 SOC audio support

#
# Allwinner SoC Audio support
#
CONFIG_SND_SUN4I_CODEC=y
CONFIG_SND_SUN8I_CODEC=y
CONFIG_SND_SUN8I_CODEC_ANALOG=y
CONFIG_SND_SUN50I_CODEC_ANALOG=y
CONFIG_SND_SUN4I_I2S=y
CONFIG_SND_SUN4I_SPDIF=y
CONFIG_SND_SUN50I_DMIC=y
CONFIG_SND_SUN8I_ADDA_PR_REGMAP=y
# end of Allwinner SoC Audio support

CONFIG_SND_SOC_TEGRA=y
CONFIG_SND_SOC_TEGRA20_AC97=y
CONFIG_SND_SOC_TEGRA20_DAS=y
CONFIG_SND_SOC_TEGRA20_I2S=y
CONFIG_SND_SOC_TEGRA20_SPDIF=y
CONFIG_SND_SOC_TEGRA30_AHUB=y
CONFIG_SND_SOC_TEGRA30_I2S=y
CONFIG_SND_SOC_TEGRA210_AHUB=y
CONFIG_SND_SOC_TEGRA210_DMIC=y
CONFIG_SND_SOC_TEGRA210_I2S=y
CONFIG_SND_SOC_TEGRA210_OPE=y
CONFIG_SND_SOC_TEGRA186_ASRC=y
CONFIG_SND_SOC_TEGRA186_DSPK=y
CONFIG_SND_SOC_TEGRA210_ADMAIF=y
CONFIG_SND_SOC_TEGRA210_MVC=y
CONFIG_SND_SOC_TEGRA210_SFC=y
CONFIG_SND_SOC_TEGRA210_AMX=y
CONFIG_SND_SOC_TEGRA210_ADX=y
CONFIG_SND_SOC_TEGRA210_MIXER=y
CONFIG_SND_SOC_TEGRA_AUDIO_GRAPH_CARD=y
CONFIG_SND_SOC_TEGRA_MACHINE_DRV=y
CONFIG_SND_SOC_TEGRA_RT5640=y
CONFIG_SND_SOC_TEGRA_WM8753=y
CONFIG_SND_SOC_TEGRA_WM8903=y
CONFIG_SND_SOC_TEGRA_WM9712=y
CONFIG_SND_SOC_TEGRA_TRIMSLICE=y
CONFIG_SND_SOC_TEGRA_ALC5632=y
CONFIG_SND_SOC_TEGRA_MAX98090=y
CONFIG_SND_SOC_TEGRA_RT5677=y
CONFIG_SND_SOC_TEGRA_SGTL5000=y

#
# Audio support for Texas Instruments SoCs
#
CONFIG_SND_SOC_TI_EDMA_PCM=y
CONFIG_SND_SOC_TI_SDMA_PCM=y
CONFIG_SND_SOC_TI_UDMA_PCM=y

#
# Texas Instruments DAI support for:
#
CONFIG_SND_SOC_DAVINCI_ASP=y
CONFIG_SND_SOC_DAVINCI_MCASP=y
CONFIG_SND_SOC_DAVINCI_VCIF=y
CONFIG_SND_SOC_OMAP_DMIC=y
CONFIG_SND_SOC_OMAP_MCBSP=y
CONFIG_SND_SOC_OMAP_MCPDM=y

#
# Audio support for boards with Texas Instruments SoCs
#
CONFIG_SND_SOC_OMAP3_TWL4030=y
CONFIG_SND_SOC_OMAP_ABE_TWL6040=y
CONFIG_SND_SOC_OMAP_HDMI=y
CONFIG_SND_SOC_J721E_EVM=y
# end of Audio support for Texas Instruments SoCs

CONFIG_SND_SOC_UNIPHIER=y
CONFIG_SND_SOC_UNIPHIER_AIO=y
CONFIG_SND_SOC_UNIPHIER_LD11=y
CONFIG_SND_SOC_UNIPHIER_PXS2=y
CONFIG_SND_SOC_UNIPHIER_EVEA_CODEC=y
CONFIG_SND_SOC_XILINX_I2S=y
CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=y
CONFIG_SND_SOC_XILINX_SPDIF=y
CONFIG_SND_SOC_XTFPGA_I2S=y
CONFIG_SND_SOC_I2C_AND_SPI=y

#
# CODEC drivers
#
CONFIG_SND_SOC_ALL_CODECS=y
CONFIG_SND_SOC_88PM860X=y
CONFIG_SND_SOC_ARIZONA=y
CONFIG_SND_SOC_WM_HUBS=y
CONFIG_SND_SOC_WM_ADSP=y
CONFIG_SND_SOC_AB8500_CODEC=y
CONFIG_SND_SOC_AC97_CODEC=y
CONFIG_SND_SOC_AD1836=y
CONFIG_SND_SOC_AD193X=y
CONFIG_SND_SOC_AD193X_SPI=y
CONFIG_SND_SOC_AD193X_I2C=y
CONFIG_SND_SOC_AD1980=y
CONFIG_SND_SOC_AD73311=y
CONFIG_SND_SOC_ADAU_UTILS=y
CONFIG_SND_SOC_ADAU1372=y
CONFIG_SND_SOC_ADAU1372_I2C=y
CONFIG_SND_SOC_ADAU1372_SPI=y
CONFIG_SND_SOC_ADAU1373=y
CONFIG_SND_SOC_ADAU1701=y
CONFIG_SND_SOC_ADAU17X1=y
CONFIG_SND_SOC_ADAU1761=y
CONFIG_SND_SOC_ADAU1761_I2C=y
CONFIG_SND_SOC_ADAU1761_SPI=y
CONFIG_SND_SOC_ADAU1781=y
CONFIG_SND_SOC_ADAU1781_I2C=y
CONFIG_SND_SOC_ADAU1781_SPI=y
CONFIG_SND_SOC_ADAU1977=y
CONFIG_SND_SOC_ADAU1977_SPI=y
CONFIG_SND_SOC_ADAU1977_I2C=y
CONFIG_SND_SOC_ADAU7002=y
CONFIG_SND_SOC_ADAU7118=y
CONFIG_SND_SOC_ADAU7118_HW=y
CONFIG_SND_SOC_ADAU7118_I2C=y
CONFIG_SND_SOC_ADAV80X=y
CONFIG_SND_SOC_ADAV801=y
CONFIG_SND_SOC_ADAV803=y
CONFIG_SND_SOC_ADS117X=y
CONFIG_SND_SOC_AK4104=y
CONFIG_SND_SOC_AK4118=y
CONFIG_SND_SOC_AK4375=y
CONFIG_SND_SOC_AK4458=y
CONFIG_SND_SOC_AK4535=y
CONFIG_SND_SOC_AK4554=y
CONFIG_SND_SOC_AK4613=y
CONFIG_SND_SOC_AK4641=y
CONFIG_SND_SOC_AK4642=y
CONFIG_SND_SOC_AK4671=y
CONFIG_SND_SOC_AK5386=y
CONFIG_SND_SOC_AK5558=y
CONFIG_SND_SOC_ALC5623=y
CONFIG_SND_SOC_ALC5632=y
CONFIG_SND_SOC_AW8738=y
CONFIG_SND_SOC_BD28623=y
CONFIG_SND_SOC_BT_SCO=y
CONFIG_SND_SOC_CPCAP=y
CONFIG_SND_SOC_CQ0093VC=y
CONFIG_SND_SOC_CROS_EC_CODEC=y
CONFIG_SND_SOC_CS35L32=y
CONFIG_SND_SOC_CS35L33=y
CONFIG_SND_SOC_CS35L34=y
CONFIG_SND_SOC_CS35L35=y
CONFIG_SND_SOC_CS35L36=y
CONFIG_SND_SOC_CS35L41_LIB=y
CONFIG_SND_SOC_CS35L41=y
CONFIG_SND_SOC_CS35L41_SPI=y
CONFIG_SND_SOC_CS35L41_I2C=y
CONFIG_SND_SOC_CS35L45_TABLES=y
CONFIG_SND_SOC_CS35L45=y
CONFIG_SND_SOC_CS35L45_SPI=y
CONFIG_SND_SOC_CS35L45_I2C=y
CONFIG_SND_SOC_CS42L42_CORE=y
CONFIG_SND_SOC_CS42L42=y
CONFIG_SND_SOC_CS42L51=y
CONFIG_SND_SOC_CS42L51_I2C=y
CONFIG_SND_SOC_CS42L52=y
CONFIG_SND_SOC_CS42L56=y
CONFIG_SND_SOC_CS42L73=y
CONFIG_SND_SOC_CS42L83=y
CONFIG_SND_SOC_CS4234=y
CONFIG_SND_SOC_CS4265=y
CONFIG_SND_SOC_CS4270=y
CONFIG_SND_SOC_CS4271=y
CONFIG_SND_SOC_CS4271_I2C=y
CONFIG_SND_SOC_CS4271_SPI=y
CONFIG_SND_SOC_CS42XX8=y
CONFIG_SND_SOC_CS42XX8_I2C=y
CONFIG_SND_SOC_CS43130=y
CONFIG_SND_SOC_CS4341=y
CONFIG_SND_SOC_CS4349=y
CONFIG_SND_SOC_CS47L15=y
CONFIG_SND_SOC_CS47L24=y
CONFIG_SND_SOC_CS47L35=y
CONFIG_SND_SOC_CS47L85=y
CONFIG_SND_SOC_CS47L90=y
CONFIG_SND_SOC_CS47L92=y
CONFIG_SND_SOC_CS53L30=y
CONFIG_SND_SOC_CX20442=y
CONFIG_SND_SOC_CX2072X=y
CONFIG_SND_SOC_JZ4740_CODEC=y
CONFIG_SND_SOC_JZ4725B_CODEC=y
CONFIG_SND_SOC_JZ4760_CODEC=y
CONFIG_SND_SOC_JZ4770_CODEC=y
CONFIG_SND_SOC_L3=y
CONFIG_SND_SOC_DA7210=y
CONFIG_SND_SOC_DA7213=y
CONFIG_SND_SOC_DA7218=y
CONFIG_SND_SOC_DA7219=y
CONFIG_SND_SOC_DA732X=y
CONFIG_SND_SOC_DA9055=y
CONFIG_SND_SOC_DMIC=y
CONFIG_SND_SOC_HDMI_CODEC=y
CONFIG_SND_SOC_ES7134=y
CONFIG_SND_SOC_ES7241=y
CONFIG_SND_SOC_ES8316=y
CONFIG_SND_SOC_ES8326=y
CONFIG_SND_SOC_ES8328=y
CONFIG_SND_SOC_ES8328_I2C=y
CONFIG_SND_SOC_ES8328_SPI=y
CONFIG_SND_SOC_GTM601=y
CONFIG_SND_SOC_HDAC_HDMI=y
CONFIG_SND_SOC_HDAC_HDA=y
CONFIG_SND_SOC_HDA=y
CONFIG_SND_SOC_ICS43432=y
CONFIG_SND_SOC_INNO_RK3036=y
CONFIG_SND_SOC_ISABELLE=y
CONFIG_SND_SOC_LM49453=y
CONFIG_SND_SOC_LOCHNAGAR_SC=y
CONFIG_SND_SOC_MADERA=y
CONFIG_SND_SOC_MAX98088=y
CONFIG_SND_SOC_MAX98090=y
CONFIG_SND_SOC_MAX98095=y
CONFIG_SND_SOC_MAX98357A=y
CONFIG_SND_SOC_MAX98371=y
CONFIG_SND_SOC_MAX98504=y
CONFIG_SND_SOC_MAX9867=y
CONFIG_SND_SOC_MAX98925=y
CONFIG_SND_SOC_MAX98926=y
CONFIG_SND_SOC_MAX98927=y
CONFIG_SND_SOC_MAX98520=y
CONFIG_SND_SOC_MAX98373=y
CONFIG_SND_SOC_MAX98373_I2C=y
CONFIG_SND_SOC_MAX98373_SDW=y
CONFIG_SND_SOC_MAX98390=y
CONFIG_SND_SOC_MAX98396=y
CONFIG_SND_SOC_MAX9850=y
CONFIG_SND_SOC_MAX9860=y
CONFIG_SND_SOC_MSM8916_WCD_ANALOG=y
CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=y
CONFIG_SND_SOC_PCM1681=y
CONFIG_SND_SOC_PCM1789=y
CONFIG_SND_SOC_PCM1789_I2C=y
CONFIG_SND_SOC_PCM179X=y
CONFIG_SND_SOC_PCM179X_I2C=y
CONFIG_SND_SOC_PCM179X_SPI=y
CONFIG_SND_SOC_PCM186X=y
CONFIG_SND_SOC_PCM186X_I2C=y
CONFIG_SND_SOC_PCM186X_SPI=y
CONFIG_SND_SOC_PCM3008=y
CONFIG_SND_SOC_PCM3060=y
CONFIG_SND_SOC_PCM3060_I2C=y
CONFIG_SND_SOC_PCM3060_SPI=y
CONFIG_SND_SOC_PCM3168A=y
CONFIG_SND_SOC_PCM3168A_I2C=y
CONFIG_SND_SOC_PCM3168A_SPI=y
CONFIG_SND_SOC_PCM5102A=y
CONFIG_SND_SOC_PCM512x=y
CONFIG_SND_SOC_PCM512x_I2C=y
CONFIG_SND_SOC_PCM512x_SPI=y
CONFIG_SND_SOC_RK3328=y
CONFIG_SND_SOC_RK817=y
CONFIG_SND_SOC_RL6231=y
CONFIG_SND_SOC_RL6347A=y
CONFIG_SND_SOC_RT274=y
CONFIG_SND_SOC_RT286=y
CONFIG_SND_SOC_RT298=y
CONFIG_SND_SOC_RT1011=y
CONFIG_SND_SOC_RT1015=y
CONFIG_SND_SOC_RT1015P=y
CONFIG_SND_SOC_RT1016=y
CONFIG_SND_SOC_RT1019=y
CONFIG_SND_SOC_RT1305=y
CONFIG_SND_SOC_RT1308=y
CONFIG_SND_SOC_RT1308_SDW=y
CONFIG_SND_SOC_RT1316_SDW=y
CONFIG_SND_SOC_RT5514=y
CONFIG_SND_SOC_RT5514_SPI=y
CONFIG_SND_SOC_RT5616=y
CONFIG_SND_SOC_RT5631=y
CONFIG_SND_SOC_RT5640=y
CONFIG_SND_SOC_RT5645=y
CONFIG_SND_SOC_RT5651=y
CONFIG_SND_SOC_RT5659=y
CONFIG_SND_SOC_RT5660=y
CONFIG_SND_SOC_RT5663=y
CONFIG_SND_SOC_RT5665=y
CONFIG_SND_SOC_RT5668=y
CONFIG_SND_SOC_RT5670=y
CONFIG_SND_SOC_RT5677=y
CONFIG_SND_SOC_RT5677_SPI=y
CONFIG_SND_SOC_RT5682=y
CONFIG_SND_SOC_RT5682_I2C=y
CONFIG_SND_SOC_RT5682_SDW=y
CONFIG_SND_SOC_RT5682S=y
CONFIG_SND_SOC_RT700=y
CONFIG_SND_SOC_RT700_SDW=y
CONFIG_SND_SOC_RT711=y
CONFIG_SND_SOC_RT711_SDW=y
CONFIG_SND_SOC_RT711_SDCA_SDW=y
CONFIG_SND_SOC_RT715=y
CONFIG_SND_SOC_RT715_SDW=y
CONFIG_SND_SOC_RT715_SDCA_SDW=y
CONFIG_SND_SOC_RT9120=y
CONFIG_SND_SOC_SDW_MOCKUP=y
CONFIG_SND_SOC_SGTL5000=y
CONFIG_SND_SOC_SI476X=y
CONFIG_SND_SOC_SIGMADSP=y
CONFIG_SND_SOC_SIGMADSP_I2C=y
CONFIG_SND_SOC_SIGMADSP_REGMAP=y
CONFIG_SND_SOC_SIMPLE_AMPLIFIER=y
CONFIG_SND_SOC_SIMPLE_MUX=y
CONFIG_SND_SOC_SPDIF=y
CONFIG_SND_SOC_SRC4XXX_I2C=y
CONFIG_SND_SOC_SRC4XXX=y
CONFIG_SND_SOC_SSM2305=y
CONFIG_SND_SOC_SSM2518=y
CONFIG_SND_SOC_SSM2602=y
CONFIG_SND_SOC_SSM2602_SPI=y
CONFIG_SND_SOC_SSM2602_I2C=y
CONFIG_SND_SOC_SSM4567=y
CONFIG_SND_SOC_STA32X=y
CONFIG_SND_SOC_STA350=y
CONFIG_SND_SOC_STA529=y
CONFIG_SND_SOC_STAC9766=y
CONFIG_SND_SOC_STI_SAS=y
CONFIG_SND_SOC_TAS2552=y
CONFIG_SND_SOC_TAS2562=y
CONFIG_SND_SOC_TAS2764=y
CONFIG_SND_SOC_TAS2770=y
CONFIG_SND_SOC_TAS2780=y
CONFIG_SND_SOC_TAS5086=y
CONFIG_SND_SOC_TAS571X=y
CONFIG_SND_SOC_TAS5720=y
CONFIG_SND_SOC_TAS5805M=y
CONFIG_SND_SOC_TAS6424=y
CONFIG_SND_SOC_TDA7419=y
CONFIG_SND_SOC_TFA9879=y
CONFIG_SND_SOC_TFA989X=y
CONFIG_SND_SOC_TLV320ADC3XXX=y
CONFIG_SND_SOC_TLV320AIC23=y
CONFIG_SND_SOC_TLV320AIC23_I2C=y
CONFIG_SND_SOC_TLV320AIC23_SPI=y
CONFIG_SND_SOC_TLV320AIC26=y
CONFIG_SND_SOC_TLV320AIC31XX=y
CONFIG_SND_SOC_TLV320AIC32X4=y
CONFIG_SND_SOC_TLV320AIC32X4_I2C=y
CONFIG_SND_SOC_TLV320AIC32X4_SPI=y
CONFIG_SND_SOC_TLV320AIC3X=y
CONFIG_SND_SOC_TLV320AIC3X_I2C=y
CONFIG_SND_SOC_TLV320AIC3X_SPI=y
CONFIG_SND_SOC_TLV320DAC33=y
CONFIG_SND_SOC_TLV320ADCX140=y
CONFIG_SND_SOC_TS3A227E=y
CONFIG_SND_SOC_TSCS42XX=y
CONFIG_SND_SOC_TSCS454=y
CONFIG_SND_SOC_TWL4030=y
CONFIG_SND_SOC_TWL6040=y
CONFIG_SND_SOC_UDA1334=y
CONFIG_SND_SOC_UDA134X=y
CONFIG_SND_SOC_UDA1380=y
CONFIG_SND_SOC_WCD9335=y
CONFIG_SND_SOC_WCD_MBHC=y
CONFIG_SND_SOC_WCD934X=y
CONFIG_SND_SOC_WCD938X=y
CONFIG_SND_SOC_WCD938X_SDW=y
CONFIG_SND_SOC_WL1273=y
CONFIG_SND_SOC_WM0010=y
CONFIG_SND_SOC_WM1250_EV1=y
CONFIG_SND_SOC_WM2000=y
CONFIG_SND_SOC_WM2200=y
CONFIG_SND_SOC_WM5100=y
CONFIG_SND_SOC_WM5102=y
CONFIG_SND_SOC_WM5110=y
CONFIG_SND_SOC_WM8350=y
CONFIG_SND_SOC_WM8400=y
CONFIG_SND_SOC_WM8510=y
CONFIG_SND_SOC_WM8523=y
CONFIG_SND_SOC_WM8524=y
CONFIG_SND_SOC_WM8580=y
CONFIG_SND_SOC_WM8711=y
CONFIG_SND_SOC_WM8727=y
CONFIG_SND_SOC_WM8728=y
CONFIG_SND_SOC_WM8731=y
CONFIG_SND_SOC_WM8731_I2C=y
CONFIG_SND_SOC_WM8731_SPI=y
CONFIG_SND_SOC_WM8737=y
CONFIG_SND_SOC_WM8741=y
CONFIG_SND_SOC_WM8750=y
CONFIG_SND_SOC_WM8753=y
CONFIG_SND_SOC_WM8770=y
CONFIG_SND_SOC_WM8776=y
CONFIG_SND_SOC_WM8782=y
CONFIG_SND_SOC_WM8804=y
CONFIG_SND_SOC_WM8804_I2C=y
CONFIG_SND_SOC_WM8804_SPI=y
CONFIG_SND_SOC_WM8900=y
CONFIG_SND_SOC_WM8903=y
CONFIG_SND_SOC_WM8904=y
CONFIG_SND_SOC_WM8940=y
CONFIG_SND_SOC_WM8955=y
CONFIG_SND_SOC_WM8960=y
CONFIG_SND_SOC_WM8961=y
CONFIG_SND_SOC_WM8962=y
CONFIG_SND_SOC_WM8971=y
CONFIG_SND_SOC_WM8974=y
CONFIG_SND_SOC_WM8978=y
CONFIG_SND_SOC_WM8983=y
CONFIG_SND_SOC_WM8985=y
CONFIG_SND_SOC_WM8988=y
CONFIG_SND_SOC_WM8990=y
CONFIG_SND_SOC_WM8991=y
CONFIG_SND_SOC_WM8993=y
CONFIG_SND_SOC_WM8994=y
CONFIG_SND_SOC_WM8995=y
CONFIG_SND_SOC_WM8996=y
CONFIG_SND_SOC_WM8997=y
CONFIG_SND_SOC_WM8998=y
CONFIG_SND_SOC_WM9081=y
CONFIG_SND_SOC_WM9090=y
CONFIG_SND_SOC_WM9705=y
CONFIG_SND_SOC_WM9712=y
CONFIG_SND_SOC_WM9713=y
CONFIG_SND_SOC_WSA881X=y
CONFIG_SND_SOC_WSA883X=y
CONFIG_SND_SOC_ZL38060=y
CONFIG_SND_SOC_LM4857=y
CONFIG_SND_SOC_MAX9759=y
CONFIG_SND_SOC_MAX9768=y
CONFIG_SND_SOC_MAX9877=y
CONFIG_SND_SOC_MC13783=y
CONFIG_SND_SOC_ML26124=y
CONFIG_SND_SOC_MT6351=y
CONFIG_SND_SOC_MT6358=y
CONFIG_SND_SOC_MT6359=y
CONFIG_SND_SOC_MT6359_ACCDET=y
CONFIG_SND_SOC_MT6660=y
CONFIG_SND_SOC_NAU8315=y
CONFIG_SND_SOC_NAU8540=y
CONFIG_SND_SOC_NAU8810=y
CONFIG_SND_SOC_NAU8821=y
CONFIG_SND_SOC_NAU8822=y
CONFIG_SND_SOC_NAU8824=y
CONFIG_SND_SOC_NAU8825=y
CONFIG_SND_SOC_TPA6130A2=y
CONFIG_SND_SOC_LPASS_MACRO_COMMON=y
CONFIG_SND_SOC_LPASS_WSA_MACRO=y
CONFIG_SND_SOC_LPASS_VA_MACRO=y
CONFIG_SND_SOC_LPASS_RX_MACRO=y
CONFIG_SND_SOC_LPASS_TX_MACRO=y
# end of CODEC drivers

CONFIG_SND_SIMPLE_CARD_UTILS=y
CONFIG_SND_SIMPLE_CARD=y
CONFIG_SND_AUDIO_GRAPH_CARD=y
CONFIG_SND_AUDIO_GRAPH_CARD2=y
CONFIG_SND_AUDIO_GRAPH_CARD2_CUSTOM_SAMPLE=y
CONFIG_SND_TEST_COMPONENT=y
CONFIG_SND_VIRTIO=y
CONFIG_AC97_BUS=y

#
# HID support
#
CONFIG_HID=y
CONFIG_HID_BATTERY_STRENGTH=y
CONFIG_HIDRAW=y
CONFIG_UHID=y
CONFIG_HID_GENERIC=y

#
# Special HID drivers
#
CONFIG_HID_A4TECH=y
CONFIG_HID_ACCUTOUCH=y
CONFIG_HID_ACRUX=y
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_APPLE=y
CONFIG_HID_APPLEIR=y
CONFIG_HID_ASUS=y
CONFIG_HID_AUREAL=y
CONFIG_HID_BELKIN=y
CONFIG_HID_BETOP_FF=y
CONFIG_HID_BIGBEN_FF=y
CONFIG_HID_CHERRY=y
CONFIG_HID_CHICONY=y
CONFIG_HID_CORSAIR=y
CONFIG_HID_COUGAR=y
CONFIG_HID_MACALLY=y
CONFIG_HID_PRODIKEYS=y
CONFIG_HID_CMEDIA=y
CONFIG_HID_CP2112=y
CONFIG_HID_CREATIVE_SB0540=y
CONFIG_HID_CYPRESS=y
CONFIG_HID_DRAGONRISE=y
CONFIG_DRAGONRISE_FF=y
CONFIG_HID_EMS_FF=y
CONFIG_HID_ELAN=y
CONFIG_HID_ELECOM=y
CONFIG_HID_ELO=y
CONFIG_HID_EZKEY=y
CONFIG_HID_FT260=y
CONFIG_HID_GEMBIRD=y
CONFIG_HID_GFRM=y
CONFIG_HID_GLORIOUS=y
CONFIG_HID_HOLTEK=y
CONFIG_HOLTEK_FF=y
CONFIG_HID_VIVALDI_COMMON=y
CONFIG_HID_GOOGLE_HAMMER=y
CONFIG_HID_VIVALDI=y
CONFIG_HID_GT683R=y
CONFIG_HID_KEYTOUCH=y
CONFIG_HID_KYE=y
CONFIG_HID_UCLOGIC=y
CONFIG_HID_WALTOP=y
CONFIG_HID_VIEWSONIC=y
CONFIG_HID_VRC2=y
CONFIG_HID_XIAOMI=y
CONFIG_HID_GYRATION=y
CONFIG_HID_ICADE=y
CONFIG_HID_ITE=y
CONFIG_HID_JABRA=y
CONFIG_HID_TWINHAN=y
CONFIG_HID_KENSINGTON=y
CONFIG_HID_LCPOWER=y
CONFIG_HID_LED=y
CONFIG_HID_LENOVO=y
CONFIG_HID_LETSKETCH=y
CONFIG_HID_LOGITECH=y
CONFIG_HID_LOGITECH_DJ=y
CONFIG_HID_LOGITECH_HIDPP=y
CONFIG_LOGITECH_FF=y
CONFIG_LOGIRUMBLEPAD2_FF=y
CONFIG_LOGIG940_FF=y
CONFIG_LOGIWHEELS_FF=y
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MALTRON=y
CONFIG_HID_MAYFLASH=y
CONFIG_HID_MEGAWORLD_FF=y
CONFIG_HID_REDRAGON=y
CONFIG_HID_MICROSOFT=y
CONFIG_HID_MONTEREY=y
CONFIG_HID_MULTITOUCH=y
CONFIG_HID_NINTENDO=y
CONFIG_NINTENDO_FF=y
CONFIG_HID_NTI=y
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=y
CONFIG_HID_PANTHERLORD=y
CONFIG_PANTHERLORD_FF=y
CONFIG_HID_PENMOUNT=y
CONFIG_HID_PETALYNX=y
CONFIG_HID_PICOLCD=y
CONFIG_HID_PICOLCD_FB=y
CONFIG_HID_PICOLCD_BACKLIGHT=y
CONFIG_HID_PICOLCD_LCD=y
CONFIG_HID_PICOLCD_LEDS=y
CONFIG_HID_PICOLCD_CIR=y
CONFIG_HID_PLANTRONICS=y
CONFIG_HID_PLAYSTATION=y
CONFIG_PLAYSTATION_FF=y
CONFIG_HID_PXRC=y
CONFIG_HID_RAZER=y
CONFIG_HID_PRIMAX=y
CONFIG_HID_RETRODE=y
CONFIG_HID_ROCCAT=y
CONFIG_HID_SAITEK=y
CONFIG_HID_SAMSUNG=y
CONFIG_HID_SEMITEK=y
CONFIG_HID_SIGMAMICRO=y
CONFIG_HID_SONY=y
CONFIG_SONY_FF=y
CONFIG_HID_SPEEDLINK=y
CONFIG_HID_STEAM=y
CONFIG_HID_STEELSERIES=y
CONFIG_HID_SUNPLUS=y
CONFIG_HID_RMI=y
CONFIG_HID_GREENASIA=y
CONFIG_GREENASIA_FF=y
CONFIG_HID_SMARTJOYPLUS=y
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_HID_TIVO=y
CONFIG_HID_TOPSEED=y
CONFIG_HID_TOPRE=y
CONFIG_HID_THINGM=y
CONFIG_HID_THRUSTMASTER=y
CONFIG_THRUSTMASTER_FF=y
CONFIG_HID_UDRAW_PS3=y
CONFIG_HID_U2FZERO=y
CONFIG_HID_WACOM=y
CONFIG_HID_WIIMOTE=y
CONFIG_HID_XINMO=y
CONFIG_HID_ZEROPLUS=y
CONFIG_ZEROPLUS_FF=y
CONFIG_HID_ZYDACRON=y
CONFIG_HID_SENSOR_HUB=y
CONFIG_HID_SENSOR_CUSTOM_SENSOR=y
CONFIG_HID_ALPS=y
CONFIG_HID_MCP2221=y
CONFIG_HID_KUNIT_TEST=y
# end of Special HID drivers

#
# USB HID support
#
CONFIG_USB_HID=y
CONFIG_HID_PID=y
CONFIG_USB_HIDDEV=y
# end of USB HID support

#
# I2C HID support
#
CONFIG_I2C_HID_OF=y
CONFIG_I2C_HID_OF_ELAN=y
CONFIG_I2C_HID_OF_GOODIX=y
# end of I2C HID support

CONFIG_I2C_HID_CORE=y
# end of HID support

CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_COMMON=y
CONFIG_USB_LED_TRIG=y
CONFIG_USB_ULPI_BUS=y
CONFIG_USB_CONN_GPIO=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y

#
# Miscellaneous USB options
#
CONFIG_USB_DEFAULT_PERSIST=y
CONFIG_USB_FEW_INIT_RETRIES=y
CONFIG_USB_DYNAMIC_MINORS=y
CONFIG_USB_OTG_PRODUCTLIST=y
CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB=y
CONFIG_USB_LEDS_TRIGGER_USBPORT=y
CONFIG_USB_AUTOSUSPEND_DELAY=2
CONFIG_USB_MON=y

#
# USB Host Controller Drivers
#
CONFIG_USB_C67X00_HCD=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_DBGCAP=y
CONFIG_USB_XHCI_PCI_RENESAS=y
CONFIG_USB_XHCI_PLATFORM=y
CONFIG_USB_XHCI_HISTB=y
CONFIG_USB_XHCI_MTK=y
CONFIG_USB_XHCI_MVEBU=y
CONFIG_USB_XHCI_RCAR=y
CONFIG_USB_EHCI_BRCMSTB=y
CONFIG_USB_BRCMSTB=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_ROOT_HUB_TT=y
CONFIG_USB_EHCI_TT_NEWSCHED=y
CONFIG_USB_EHCI_FSL=y
CONFIG_USB_EHCI_HCD_NPCM7XX=y
CONFIG_USB_EHCI_HCD_OMAP=y
CONFIG_USB_EHCI_HCD_ORION=y
CONFIG_USB_EHCI_HCD_SPEAR=y
CONFIG_USB_EHCI_HCD_STI=y
CONFIG_USB_EHCI_HCD_AT91=y
CONFIG_USB_EHCI_SH=y
CONFIG_USB_EHCI_EXYNOS=y
CONFIG_USB_EHCI_MV=y
CONFIG_USB_CNS3XXX_EHCI=y
CONFIG_USB_EHCI_HCD_PLATFORM=y
CONFIG_USB_OXU210HP_HCD=y
CONFIG_USB_ISP116X_HCD=y
CONFIG_USB_ISP1362_HCD=y
CONFIG_USB_FOTG210_HCD=y
CONFIG_USB_MAX3421_HCD=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_SPEAR=y
CONFIG_USB_OHCI_HCD_STI=y
CONFIG_USB_OHCI_HCD_S3C2410=y
CONFIG_USB_OHCI_HCD_LPC32XX=y
CONFIG_USB_OHCI_HCD_AT91=y
CONFIG_USB_OHCI_HCD_OMAP3=y
CONFIG_USB_OHCI_HCD_DAVINCI=y
CONFIG_USB_OHCI_HCD_SSB=y
CONFIG_USB_OHCI_SH=y
CONFIG_USB_OHCI_EXYNOS=y
CONFIG_USB_CNS3XXX_OHCI=y
CONFIG_USB_OHCI_HCD_PLATFORM=y
CONFIG_USB_U132_HCD=y
CONFIG_USB_SL811_HCD=y
CONFIG_USB_SL811_HCD_ISO=y
CONFIG_USB_SL811_CS=y
CONFIG_USB_R8A66597_HCD=y
CONFIG_USB_RENESAS_USBHS_HCD=y
CONFIG_USB_HCD_BCMA=y
CONFIG_USB_HCD_SSB=y
CONFIG_USB_HCD_TEST_MODE=y
CONFIG_USB_RENESAS_USBHS=y

#
# USB Device Class drivers
#
CONFIG_USB_ACM=y
CONFIG_USB_PRINTER=y
CONFIG_USB_WDM=y
CONFIG_USB_TMC=y

#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#

#
# also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=y
CONFIG_USB_STORAGE_DEBUG=y
CONFIG_USB_STORAGE_REALTEK=y
CONFIG_USB_STORAGE_DATAFAB=y
CONFIG_USB_STORAGE_FREECOM=y
CONFIG_USB_STORAGE_ISD200=y
CONFIG_USB_STORAGE_USBAT=y
CONFIG_USB_STORAGE_SDDR09=y
CONFIG_USB_STORAGE_SDDR55=y
CONFIG_USB_STORAGE_JUMPSHOT=y
CONFIG_USB_STORAGE_ALAUDA=y
CONFIG_USB_STORAGE_ONETOUCH=y
CONFIG_USB_STORAGE_KARMA=y
CONFIG_USB_STORAGE_CYPRESS_ATACB=y
CONFIG_USB_STORAGE_ENE_UB6250=y
CONFIG_USB_UAS=y

#
# USB Imaging devices
#
CONFIG_USB_MDC800=y
CONFIG_USB_MICROTEK=y
CONFIG_USBIP_CORE=y
CONFIG_USBIP_VHCI_HCD=y
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_HOST=y
CONFIG_USBIP_VUDC=y
CONFIG_USBIP_DEBUG=y
CONFIG_USB_CDNS_SUPPORT=y
CONFIG_USB_CDNS_HOST=y
CONFIG_USB_CDNS3=y
CONFIG_USB_CDNS3_GADGET=y
CONFIG_USB_CDNS3_HOST=y
CONFIG_USB_CDNS3_TI=y
CONFIG_USB_CDNS3_IMX=y
CONFIG_USB_MTU3=y
# CONFIG_USB_MTU3_HOST is not set
# CONFIG_USB_MTU3_GADGET is not set
CONFIG_USB_MTU3_DUAL_ROLE=y
CONFIG_USB_MTU3_DEBUG=y
CONFIG_USB_MUSB_HDRC=y
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_GADGET is not set
CONFIG_USB_MUSB_DUAL_ROLE=y

#
# Platform Glue Layer
#
CONFIG_USB_MUSB_TUSB6010=y
CONFIG_USB_MUSB_DSPS=y
CONFIG_USB_MUSB_UX500=y
CONFIG_USB_MUSB_MEDIATEK=y
CONFIG_USB_MUSB_POLARFIRE_SOC=y

#
# MUSB DMA mode
#
CONFIG_MUSB_PIO_ONLY=y
CONFIG_USB_DWC3=y
CONFIG_USB_DWC3_ULPI=y
# CONFIG_USB_DWC3_HOST is not set
# CONFIG_USB_DWC3_GADGET is not set
CONFIG_USB_DWC3_DUAL_ROLE=y

#
# Platform Glue Driver Support
#
CONFIG_USB_DWC3_OMAP=y
CONFIG_USB_DWC3_EXYNOS=y
CONFIG_USB_DWC3_KEYSTONE=y
CONFIG_USB_DWC3_MESON_G12A=y
CONFIG_USB_DWC3_OF_SIMPLE=y
CONFIG_USB_DWC3_ST=y
CONFIG_USB_DWC3_QCOM=y
CONFIG_USB_DWC3_IMX8MP=y
CONFIG_USB_DWC3_AM62=y
CONFIG_USB_DWC2=y
# CONFIG_USB_DWC2_HOST is not set

#
# Gadget/Dual-role mode requires USB Gadget support to be enabled
#
# CONFIG_USB_DWC2_PERIPHERAL is not set
CONFIG_USB_DWC2_DUAL_ROLE=y
CONFIG_USB_DWC2_DEBUG=y
CONFIG_USB_DWC2_VERBOSE=y
CONFIG_USB_DWC2_TRACK_MISSED_SOFS=y
CONFIG_USB_DWC2_DEBUG_PERIODIC=y
CONFIG_USB_CHIPIDEA=y
CONFIG_USB_CHIPIDEA_UDC=y
CONFIG_USB_CHIPIDEA_HOST=y
CONFIG_USB_CHIPIDEA_MSM=y
CONFIG_USB_CHIPIDEA_IMX=y
CONFIG_USB_CHIPIDEA_GENERIC=y
CONFIG_USB_CHIPIDEA_TEGRA=y
CONFIG_USB_ISP1760=y
CONFIG_USB_ISP1760_HCD=y
CONFIG_USB_ISP1761_UDC=y
# CONFIG_USB_ISP1760_HOST_ROLE is not set
# CONFIG_USB_ISP1760_GADGET_ROLE is not set
CONFIG_USB_ISP1760_DUAL_ROLE=y

#
# USB port drivers
#
CONFIG_USB_USS720=y
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_CONSOLE=y
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_SIMPLE=y
CONFIG_USB_SERIAL_AIRCABLE=y
CONFIG_USB_SERIAL_ARK3116=y
CONFIG_USB_SERIAL_BELKIN=y
CONFIG_USB_SERIAL_CH341=y
CONFIG_USB_SERIAL_WHITEHEAT=y
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=y
CONFIG_USB_SERIAL_CP210X=y
CONFIG_USB_SERIAL_CYPRESS_M8=y
CONFIG_USB_SERIAL_EMPEG=y
CONFIG_USB_SERIAL_FTDI_SIO=y
CONFIG_USB_SERIAL_VISOR=y
CONFIG_USB_SERIAL_IPAQ=y
CONFIG_USB_SERIAL_IR=y
CONFIG_USB_SERIAL_EDGEPORT=y
CONFIG_USB_SERIAL_EDGEPORT_TI=y
CONFIG_USB_SERIAL_F81232=y
CONFIG_USB_SERIAL_F8153X=y
CONFIG_USB_SERIAL_GARMIN=y
CONFIG_USB_SERIAL_IPW=y
CONFIG_USB_SERIAL_IUU=y
CONFIG_USB_SERIAL_KEYSPAN_PDA=y
CONFIG_USB_SERIAL_KEYSPAN=y
CONFIG_USB_SERIAL_KLSI=y
CONFIG_USB_SERIAL_KOBIL_SCT=y
CONFIG_USB_SERIAL_MCT_U232=y
CONFIG_USB_SERIAL_METRO=y
CONFIG_USB_SERIAL_MOS7720=y
CONFIG_USB_SERIAL_MOS7715_PARPORT=y
CONFIG_USB_SERIAL_MOS7840=y
CONFIG_USB_SERIAL_MXUPORT=y
CONFIG_USB_SERIAL_NAVMAN=y
CONFIG_USB_SERIAL_PL2303=y
CONFIG_USB_SERIAL_OTI6858=y
CONFIG_USB_SERIAL_QCAUX=y
CONFIG_USB_SERIAL_QUALCOMM=y
CONFIG_USB_SERIAL_SPCP8X5=y
CONFIG_USB_SERIAL_SAFE=y
CONFIG_USB_SERIAL_SAFE_PADDED=y
CONFIG_USB_SERIAL_SIERRAWIRELESS=y
CONFIG_USB_SERIAL_SYMBOL=y
CONFIG_USB_SERIAL_TI=y
CONFIG_USB_SERIAL_CYBERJACK=y
CONFIG_USB_SERIAL_WWAN=y
CONFIG_USB_SERIAL_OPTION=y
CONFIG_USB_SERIAL_OMNINET=y
CONFIG_USB_SERIAL_OPTICON=y
CONFIG_USB_SERIAL_XSENS_MT=y
CONFIG_USB_SERIAL_WISHBONE=y
CONFIG_USB_SERIAL_SSU100=y
CONFIG_USB_SERIAL_QT2=y
CONFIG_USB_SERIAL_UPD78F0730=y
CONFIG_USB_SERIAL_XR=y
CONFIG_USB_SERIAL_DEBUG=y

#
# USB Miscellaneous drivers
#
CONFIG_USB_EMI62=y
CONFIG_USB_EMI26=y
CONFIG_USB_ADUTUX=y
CONFIG_USB_SEVSEG=y
CONFIG_USB_LEGOTOWER=y
CONFIG_USB_LCD=y
CONFIG_USB_CYPRESS_CY7C63=y
CONFIG_USB_CYTHERM=y
CONFIG_USB_IDMOUSE=y
CONFIG_USB_FTDI_ELAN=y
CONFIG_USB_APPLEDISPLAY=y
CONFIG_USB_QCOM_EUD=y
CONFIG_APPLE_MFI_FASTCHARGE=y
CONFIG_USB_SISUSBVGA=y
CONFIG_USB_LD=y
CONFIG_USB_TRANCEVIBRATOR=y
CONFIG_USB_IOWARRIOR=y
CONFIG_USB_TEST=y
CONFIG_USB_EHSET_TEST_FIXTURE=y
CONFIG_USB_ISIGHTFW=y
CONFIG_USB_YUREX=y
CONFIG_USB_EZUSB_FX2=y
CONFIG_USB_HUB_USB251XB=y
CONFIG_USB_HSIC_USB3503=y
CONFIG_USB_HSIC_USB4604=y
CONFIG_USB_LINK_LAYER_TEST=y
CONFIG_USB_CHAOSKEY=y
CONFIG_BRCM_USB_PINMAP=y
CONFIG_USB_ONBOARD_HUB=y
CONFIG_USB_ATM=y
CONFIG_USB_SPEEDTOUCH=y
CONFIG_USB_CXACRU=y
CONFIG_USB_UEAGLEATM=y
CONFIG_USB_XUSBATM=y

#
# USB Physical Layer drivers
#
CONFIG_USB_PHY=y
CONFIG_KEYSTONE_USB_PHY=y
CONFIG_NOP_USB_XCEIV=y
CONFIG_AM335X_CONTROL_USB=y
CONFIG_AM335X_PHY_USB=y
# CONFIG_USB_GPIO_VBUS is not set
CONFIG_TAHVO_USB=y
CONFIG_TAHVO_USB_HOST_BY_DEFAULT=y
CONFIG_USB_ISP1301=y
CONFIG_USB_TEGRA_PHY=y
CONFIG_USB_ULPI=y
CONFIG_USB_ULPI_VIEWPORT=y
# CONFIG_JZ4770_PHY is not set
# end of USB Physical Layer drivers

CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_DEBUG=y
CONFIG_USB_GADGET_VERBOSE=y
CONFIG_USB_GADGET_DEBUG_FILES=y
CONFIG_USB_GADGET_DEBUG_FS=y
CONFIG_USB_GADGET_VBUS_DRAW=2
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
CONFIG_U_SERIAL_CONSOLE=y

#
# USB Peripheral Controller
#
CONFIG_USB_LPC32XX=y
CONFIG_USB_FUSB300=y
CONFIG_USB_FOTG210_UDC=y
CONFIG_USB_GR_UDC=y
CONFIG_USB_R8A66597=y
CONFIG_USB_RENESAS_USBHS_UDC=y
CONFIG_USB_RENESAS_USB3=y
CONFIG_USB_PXA27X=y
CONFIG_USB_MV_UDC=y
CONFIG_USB_MV_U3D=y
CONFIG_USB_SNP_CORE=y
CONFIG_USB_SNP_UDC_PLAT=y
CONFIG_USB_M66592=y
CONFIG_USB_BDC_UDC=y
CONFIG_USB_NET2272=y
CONFIG_USB_NET2272_DMA=y
CONFIG_USB_GADGET_XILINX=y
CONFIG_USB_MAX3420_UDC=y
CONFIG_USB_ASPEED_UDC=y
CONFIG_USB_ASPEED_VHUB=y
CONFIG_USB_DUMMY_HCD=y
# end of USB Peripheral Controller

CONFIG_USB_LIBCOMPOSITE=y
CONFIG_USB_F_ACM=y
CONFIG_USB_F_SS_LB=y
CONFIG_USB_U_SERIAL=y
CONFIG_USB_U_ETHER=y
CONFIG_USB_U_AUDIO=y
CONFIG_USB_F_SERIAL=y
CONFIG_USB_F_OBEX=y
CONFIG_USB_F_NCM=y
CONFIG_USB_F_ECM=y
CONFIG_USB_F_PHONET=y
CONFIG_USB_F_EEM=y
CONFIG_USB_F_SUBSET=y
CONFIG_USB_F_RNDIS=y
CONFIG_USB_F_MASS_STORAGE=y
CONFIG_USB_F_FS=y
CONFIG_USB_F_UAC1=y
CONFIG_USB_F_UAC1_LEGACY=y
CONFIG_USB_F_UAC2=y
CONFIG_USB_F_UVC=y
CONFIG_USB_F_MIDI=y
CONFIG_USB_F_HID=y
CONFIG_USB_F_PRINTER=y
CONFIG_USB_F_TCM=y
CONFIG_USB_CONFIGFS=y
CONFIG_USB_CONFIGFS_SERIAL=y
CONFIG_USB_CONFIGFS_ACM=y
CONFIG_USB_CONFIGFS_OBEX=y
CONFIG_USB_CONFIGFS_NCM=y
CONFIG_USB_CONFIGFS_ECM=y
CONFIG_USB_CONFIGFS_ECM_SUBSET=y
CONFIG_USB_CONFIGFS_RNDIS=y
CONFIG_USB_CONFIGFS_EEM=y
CONFIG_USB_CONFIGFS_PHONET=y
CONFIG_USB_CONFIGFS_MASS_STORAGE=y
CONFIG_USB_CONFIGFS_F_LB_SS=y
CONFIG_USB_CONFIGFS_F_FS=y
CONFIG_USB_CONFIGFS_F_UAC1=y
CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y
CONFIG_USB_CONFIGFS_F_UAC2=y
CONFIG_USB_CONFIGFS_F_MIDI=y
CONFIG_USB_CONFIGFS_F_HID=y
CONFIG_USB_CONFIGFS_F_UVC=y
CONFIG_USB_CONFIGFS_F_PRINTER=y
CONFIG_USB_CONFIGFS_F_TCM=y

#
# USB Gadget precomposed configurations
#
CONFIG_USB_ZERO=y
CONFIG_USB_AUDIO=y
CONFIG_GADGET_UAC1=y
CONFIG_GADGET_UAC1_LEGACY=y
CONFIG_USB_ETH=y
CONFIG_USB_ETH_RNDIS=y
CONFIG_USB_ETH_EEM=y
CONFIG_USB_G_NCM=y
CONFIG_USB_GADGETFS=y
CONFIG_USB_FUNCTIONFS=y
CONFIG_USB_FUNCTIONFS_ETH=y
CONFIG_USB_FUNCTIONFS_RNDIS=y
CONFIG_USB_FUNCTIONFS_GENERIC=y
CONFIG_USB_MASS_STORAGE=y
CONFIG_USB_GADGET_TARGET=y
CONFIG_USB_G_SERIAL=y
CONFIG_USB_MIDI_GADGET=y
CONFIG_USB_G_PRINTER=y
CONFIG_USB_CDC_COMPOSITE=y
CONFIG_USB_G_NOKIA=y
CONFIG_USB_G_ACM_MS=y
CONFIG_USB_G_MULTI=y
CONFIG_USB_G_MULTI_RNDIS=y
CONFIG_USB_G_MULTI_CDC=y
CONFIG_USB_G_HID=y
CONFIG_USB_G_DBGP=y
# CONFIG_USB_G_DBGP_PRINTK is not set
CONFIG_USB_G_DBGP_SERIAL=y
CONFIG_USB_G_WEBCAM=y
CONFIG_USB_RAW_GADGET=y
# end of USB Gadget precomposed configurations

CONFIG_TYPEC=y
CONFIG_TYPEC_TCPM=y
CONFIG_TYPEC_TCPCI=y
CONFIG_TYPEC_RT1711H=y
CONFIG_TYPEC_MT6360=y
CONFIG_TYPEC_TCPCI_MT6370=y
CONFIG_TYPEC_TCPCI_MAXIM=y
CONFIG_TYPEC_FUSB302=y
CONFIG_TYPEC_UCSI=y
CONFIG_UCSI_CCG=y
CONFIG_UCSI_STM32G0=y
CONFIG_TYPEC_TPS6598X=y
CONFIG_TYPEC_ANX7411=y
CONFIG_TYPEC_RT1719=y
CONFIG_TYPEC_HD3SS3220=y
CONFIG_TYPEC_STUSB160X=y
CONFIG_TYPEC_QCOM_PMIC=y
CONFIG_TYPEC_WUSB3801=y

#
# USB Type-C Multiplexer/DeMultiplexer Switch support
#
CONFIG_TYPEC_MUX_FSA4480=y
CONFIG_TYPEC_MUX_PI3USB30532=y
# end of USB Type-C Multiplexer/DeMultiplexer Switch support

#
# USB Type-C Alternate Mode drivers
#
CONFIG_TYPEC_DP_ALTMODE=y
CONFIG_TYPEC_NVIDIA_ALTMODE=y
# end of USB Type-C Alternate Mode drivers

CONFIG_USB_ROLE_SWITCH=y
CONFIG_MMC=y
CONFIG_PWRSEQ_EMMC=y
CONFIG_PWRSEQ_SD8787=y
CONFIG_PWRSEQ_SIMPLE=y
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_SDIO_UART=y
CONFIG_MMC_TEST=y
CONFIG_MMC_CRYPTO=y

#
# MMC/SD/SDIO Host Controller Drivers
#
CONFIG_MMC_DEBUG=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_IO_ACCESSORS=y
CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SDHCI_OF_ARASAN=y
CONFIG_MMC_SDHCI_OF_ASPEED=y
CONFIG_MMC_SDHCI_OF_ASPEED_TEST=y
CONFIG_MMC_SDHCI_OF_AT91=y
CONFIG_MMC_SDHCI_OF_ESDHC=y
CONFIG_MMC_SDHCI_OF_DWCMSHC=y
CONFIG_MMC_SDHCI_OF_SPARX5=y
CONFIG_MMC_SDHCI_CADENCE=y
CONFIG_MMC_SDHCI_CNS3XXX=y
CONFIG_MMC_SDHCI_ESDHC_IMX=y
CONFIG_MMC_SDHCI_DOVE=y
CONFIG_MMC_SDHCI_TEGRA=y
CONFIG_MMC_SDHCI_S3C=y
CONFIG_MMC_SDHCI_PXAV3=y
CONFIG_MMC_SDHCI_PXAV2=y
CONFIG_MMC_SDHCI_SPEAR=y
CONFIG_MMC_SDHCI_S3C_DMA=y
CONFIG_MMC_SDHCI_BCM_KONA=y
CONFIG_MMC_SDHCI_F_SDH30=y
CONFIG_MMC_SDHCI_MILBEAUT=y
CONFIG_MMC_SDHCI_IPROC=y
CONFIG_MMC_MESON_GX=y
CONFIG_MMC_MESON_MX_SDHC=y
CONFIG_MMC_MESON_MX_SDIO=y
CONFIG_MMC_MOXART=y
CONFIG_MMC_SDHCI_ST=y
CONFIG_MMC_OMAP_HS=y
CONFIG_MMC_SDHCI_MSM=y
CONFIG_MMC_DAVINCI=y
CONFIG_MMC_SPI=y
CONFIG_MMC_S3C=y
CONFIG_MMC_S3C_HW_SDIO_IRQ=y
CONFIG_MMC_S3C_PIO=y
# CONFIG_MMC_S3C_DMA is not set
CONFIG_MMC_SDHCI_SPRD=y
CONFIG_MMC_TMIO_CORE=y
CONFIG_MMC_TMIO=y
CONFIG_MMC_SDHI=y
CONFIG_MMC_SDHI_SYS_DMAC=y
CONFIG_MMC_SDHI_INTERNAL_DMAC=y
CONFIG_MMC_UNIPHIER=y
CONFIG_MMC_DW=y
CONFIG_MMC_DW_PLTFM=y
CONFIG_MMC_DW_BLUEFIELD=y
CONFIG_MMC_DW_EXYNOS=y
CONFIG_MMC_DW_HI3798CV200=y
CONFIG_MMC_DW_K3=y
CONFIG_MMC_SH_MMCIF=y
CONFIG_MMC_VUB300=y
CONFIG_MMC_USHC=y
CONFIG_MMC_USDHI6ROL0=y
CONFIG_MMC_REALTEK_USB=y
CONFIG_MMC_SUNXI=y
CONFIG_MMC_CQHCI=y
CONFIG_MMC_HSQ=y
CONFIG_MMC_BCM2835=y
CONFIG_MMC_MTK=y
CONFIG_MMC_SDHCI_XENON=y
CONFIG_MMC_SDHCI_OMAP=y
CONFIG_MMC_SDHCI_AM654=y
CONFIG_MMC_OWL=y
CONFIG_MMC_SDHCI_EXTERNAL_DMA=y
CONFIG_MMC_LITEX=y
CONFIG_SCSI_UFSHCD=y
CONFIG_SCSI_UFS_BSG=y
CONFIG_SCSI_UFS_CRYPTO=y
CONFIG_SCSI_UFS_HPB=y
CONFIG_SCSI_UFS_FAULT_INJECTION=y
CONFIG_SCSI_UFS_HWMON=y
CONFIG_SCSI_UFSHCD_PLATFORM=y
CONFIG_SCSI_UFS_CDNS_PLATFORM=y
CONFIG_SCSI_UFS_DWC_TC_PLATFORM=y
CONFIG_SCSI_UFS_HISI=y
CONFIG_SCSI_UFS_RENESAS=y
CONFIG_SCSI_UFS_TI_J721E=y
CONFIG_SCSI_UFS_EXYNOS=y
CONFIG_MEMSTICK=y
CONFIG_MEMSTICK_DEBUG=y

#
# MemoryStick drivers
#
CONFIG_MEMSTICK_UNSAFE_RESUME=y
CONFIG_MSPRO_BLOCK=y
CONFIG_MS_BLOCK=y

#
# MemoryStick Host Controller Drivers
#
CONFIG_MEMSTICK_REALTEK_USB=y
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
CONFIG_LEDS_CLASS_FLASH=y
CONFIG_LEDS_CLASS_MULTICOLOR=y
CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y

#
# LED drivers
#
CONFIG_LEDS_88PM860X=y
CONFIG_LEDS_AN30259A=y
CONFIG_LEDS_ARIEL=y
CONFIG_LEDS_AW2013=y
CONFIG_LEDS_BCM6328=y
CONFIG_LEDS_BCM6358=y
CONFIG_LEDS_CPCAP=y
CONFIG_LEDS_CR0014114=y
CONFIG_LEDS_EL15203000=y
CONFIG_LEDS_TURRIS_OMNIA=y
CONFIG_LEDS_LM3530=y
CONFIG_LEDS_LM3532=y
CONFIG_LEDS_LM3533=y
CONFIG_LEDS_LM3642=y
CONFIG_LEDS_LM3692X=y
CONFIG_LEDS_MT6323=y
CONFIG_LEDS_S3C24XX=y
CONFIG_LEDS_COBALT_QUBE=y
CONFIG_LEDS_COBALT_RAQ=y
CONFIG_LEDS_PCA9532=y
CONFIG_LEDS_PCA9532_GPIO=y
CONFIG_LEDS_GPIO=y
CONFIG_LEDS_LP3944=y
CONFIG_LEDS_LP3952=y
CONFIG_LEDS_LP50XX=y
CONFIG_LEDS_LP55XX_COMMON=y
CONFIG_LEDS_LP5521=y
CONFIG_LEDS_LP5523=y
CONFIG_LEDS_LP5562=y
CONFIG_LEDS_LP8501=y
CONFIG_LEDS_LP8788=y
CONFIG_LEDS_LP8860=y
CONFIG_LEDS_PCA955X=y
CONFIG_LEDS_PCA955X_GPIO=y
CONFIG_LEDS_PCA963X=y
CONFIG_LEDS_WM831X_STATUS=y
CONFIG_LEDS_WM8350=y
CONFIG_LEDS_DA903X=y
CONFIG_LEDS_DA9052=y
CONFIG_LEDS_DAC124S085=y
CONFIG_LEDS_PWM=y
CONFIG_LEDS_REGULATOR=y
CONFIG_LEDS_BD2802=y
CONFIG_LEDS_LT3593=y
CONFIG_LEDS_ADP5520=y
CONFIG_LEDS_MC13783=y
CONFIG_LEDS_NS2=y
CONFIG_LEDS_NETXBIG=y
CONFIG_LEDS_ASIC3=y
CONFIG_LEDS_TCA6507=y
CONFIG_LEDS_TLC591XX=y
CONFIG_LEDS_MAX77650=y
CONFIG_LEDS_MAX8997=y
CONFIG_LEDS_LM355x=y
CONFIG_LEDS_OT200=y
CONFIG_LEDS_MENF21BMC=y
CONFIG_LEDS_IS31FL319X=y
CONFIG_LEDS_IS31FL32XX=y
CONFIG_LEDS_SC27XX_BLTC=y

#
# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
#
CONFIG_LEDS_BLINKM=y
CONFIG_LEDS_SYSCON=y
CONFIG_LEDS_PM8058=y
CONFIG_LEDS_MLXREG=y
CONFIG_LEDS_USER=y
CONFIG_LEDS_SPI_BYTE=y
CONFIG_LEDS_TI_LMU_COMMON=y
CONFIG_LEDS_LM3697=y
CONFIG_LEDS_LM36274=y
CONFIG_LEDS_TPS6105X=y
CONFIG_LEDS_IP30=y
CONFIG_LEDS_ACER_A500=y
CONFIG_LEDS_BCM63138=y
CONFIG_LEDS_LGM=y

#
# Flash and Torch LED drivers
#
CONFIG_LEDS_AAT1290=y
CONFIG_LEDS_AS3645A=y
CONFIG_LEDS_KTD2692=y
CONFIG_LEDS_LM3601X=y
CONFIG_LEDS_MAX77693=y
CONFIG_LEDS_MT6360=y
CONFIG_LEDS_RT4505=y
CONFIG_LEDS_RT8515=y
CONFIG_LEDS_SGM3140=y

#
# RGB LED drivers
#
CONFIG_LEDS_PWM_MULTICOLOR=y
CONFIG_LEDS_QCOM_LPG=y

#
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_ONESHOT=y
CONFIG_LEDS_TRIGGER_DISK=y
CONFIG_LEDS_TRIGGER_MTD=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
CONFIG_LEDS_TRIGGER_BACKLIGHT=y
CONFIG_LEDS_TRIGGER_CPU=y
CONFIG_LEDS_TRIGGER_ACTIVITY=y
CONFIG_LEDS_TRIGGER_GPIO=y
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y

#
# iptables trigger is under Netfilter config (LED target)
#
CONFIG_LEDS_TRIGGER_TRANSIENT=y
CONFIG_LEDS_TRIGGER_CAMERA=y
CONFIG_LEDS_TRIGGER_PANIC=y
CONFIG_LEDS_TRIGGER_NETDEV=y
CONFIG_LEDS_TRIGGER_PATTERN=y
CONFIG_LEDS_TRIGGER_AUDIO=y
CONFIG_LEDS_TRIGGER_TTY=y

#
# Simple LED drivers
#
CONFIG_ACCESSIBILITY=y
CONFIG_A11Y_BRAILLE_CONSOLE=y

#
# Speakup console speech
#
CONFIG_SPEAKUP=y
CONFIG_SPEAKUP_SERIALIO=y
CONFIG_SPEAKUP_SYNTH_ACNTSA=y
CONFIG_SPEAKUP_SYNTH_ACNTPC=y
CONFIG_SPEAKUP_SYNTH_APOLLO=y
CONFIG_SPEAKUP_SYNTH_AUDPTR=y
CONFIG_SPEAKUP_SYNTH_BNS=y
CONFIG_SPEAKUP_SYNTH_DECTLK=y
CONFIG_SPEAKUP_SYNTH_DECEXT=y
CONFIG_SPEAKUP_SYNTH_DECPC=m
CONFIG_SPEAKUP_SYNTH_DTLK=y
CONFIG_SPEAKUP_SYNTH_KEYPC=y
CONFIG_SPEAKUP_SYNTH_LTLK=y
CONFIG_SPEAKUP_SYNTH_SOFT=y
CONFIG_SPEAKUP_SYNTH_SPKOUT=y
CONFIG_SPEAKUP_SYNTH_TXPRT=y
CONFIG_SPEAKUP_SYNTH_DUMMY=y
# end of Speakup console speech

CONFIG_INFINIBAND=y
CONFIG_INFINIBAND_USER_MAD=y
CONFIG_INFINIBAND_USER_ACCESS=y
CONFIG_INFINIBAND_USER_MEM=y
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_ADDR_TRANS=y
CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y
CONFIG_INFINIBAND_VIRT_DMA=y
CONFIG_RDMA_SIW=y
CONFIG_INFINIBAND_IPOIB=y
CONFIG_INFINIBAND_IPOIB_CM=y
CONFIG_INFINIBAND_IPOIB_DEBUG=y
CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y
CONFIG_INFINIBAND_SRP=y
CONFIG_INFINIBAND_SRPT=y
CONFIG_INFINIBAND_ISER=y
CONFIG_INFINIBAND_ISERT=y
CONFIG_INFINIBAND_RTRS=y
CONFIG_INFINIBAND_RTRS_CLIENT=y
CONFIG_INFINIBAND_RTRS_SERVER=y
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
CONFIG_RTC_SYSTOHC=y
CONFIG_RTC_SYSTOHC_DEVICE="rtc0"
CONFIG_RTC_DEBUG=y
CONFIG_RTC_LIB_KUNIT_TEST=y
CONFIG_RTC_NVMEM=y

#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
CONFIG_RTC_INTF_DEV_UIE_EMUL=y
CONFIG_RTC_DRV_TEST=y

#
# I2C RTC drivers
#
CONFIG_RTC_DRV_88PM860X=y
CONFIG_RTC_DRV_88PM80X=y
CONFIG_RTC_DRV_ABB5ZES3=y
CONFIG_RTC_DRV_ABEOZ9=y
CONFIG_RTC_DRV_ABX80X=y
CONFIG_RTC_DRV_BRCMSTB=y
CONFIG_RTC_DRV_AS3722=y
CONFIG_RTC_DRV_DS1307=y
CONFIG_RTC_DRV_DS1307_CENTURY=y
CONFIG_RTC_DRV_DS1374=y
CONFIG_RTC_DRV_DS1374_WDT=y
CONFIG_RTC_DRV_DS1672=y
CONFIG_RTC_DRV_HYM8563=y
CONFIG_RTC_DRV_LP8788=y
CONFIG_RTC_DRV_MAX6900=y
CONFIG_RTC_DRV_MAX8907=y
CONFIG_RTC_DRV_MAX8925=y
CONFIG_RTC_DRV_MAX8998=y
CONFIG_RTC_DRV_MAX8997=y
CONFIG_RTC_DRV_MAX77686=y
CONFIG_RTC_DRV_NCT3018Y=y
CONFIG_RTC_DRV_RS5C372=y
CONFIG_RTC_DRV_ISL1208=y
CONFIG_RTC_DRV_ISL12022=y
CONFIG_RTC_DRV_ISL12026=y
CONFIG_RTC_DRV_X1205=y
CONFIG_RTC_DRV_PCF8523=y
CONFIG_RTC_DRV_PCF85063=y
CONFIG_RTC_DRV_PCF85363=y
CONFIG_RTC_DRV_PCF8563=y
CONFIG_RTC_DRV_PCF8583=y
CONFIG_RTC_DRV_M41T80=y
CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_BD70528=y
CONFIG_RTC_DRV_BQ32K=y
CONFIG_RTC_DRV_TWL4030=y
CONFIG_RTC_DRV_PALMAS=y
CONFIG_RTC_DRV_TPS6586X=y
CONFIG_RTC_DRV_TPS65910=y
CONFIG_RTC_DRV_RC5T583=y
CONFIG_RTC_DRV_RC5T619=y
CONFIG_RTC_DRV_S35390A=y
CONFIG_RTC_DRV_FM3130=y
CONFIG_RTC_DRV_RX8010=y
CONFIG_RTC_DRV_RX8581=y
CONFIG_RTC_DRV_RX8025=y
CONFIG_RTC_DRV_EM3027=y
CONFIG_RTC_DRV_RV3028=y
CONFIG_RTC_DRV_RV3032=y
CONFIG_RTC_DRV_RV8803=y
CONFIG_RTC_DRV_S5M=y
CONFIG_RTC_DRV_SD3078=y

#
# SPI RTC drivers
#
CONFIG_RTC_DRV_M41T93=y
CONFIG_RTC_DRV_M41T94=y
CONFIG_RTC_DRV_DS1302=y
CONFIG_RTC_DRV_DS1305=y
CONFIG_RTC_DRV_DS1343=y
CONFIG_RTC_DRV_DS1347=y
CONFIG_RTC_DRV_DS1390=y
CONFIG_RTC_DRV_MAX6916=y
CONFIG_RTC_DRV_R9701=y
CONFIG_RTC_DRV_RX4581=y
CONFIG_RTC_DRV_RS5C348=y
CONFIG_RTC_DRV_MAX6902=y
CONFIG_RTC_DRV_PCF2123=y
CONFIG_RTC_DRV_MCP795=y
CONFIG_RTC_I2C_AND_SPI=y

#
# SPI and I2C RTC drivers
#
CONFIG_RTC_DRV_DS3232=y
CONFIG_RTC_DRV_DS3232_HWMON=y
CONFIG_RTC_DRV_PCF2127=y
CONFIG_RTC_DRV_RV3029C2=y
CONFIG_RTC_DRV_RV3029_HWMON=y
CONFIG_RTC_DRV_RX6110=y

#
# Platform RTC drivers
#
CONFIG_RTC_DRV_DS1286=y
CONFIG_RTC_DRV_DS1511=y
CONFIG_RTC_DRV_DS1553=y
CONFIG_RTC_DRV_DS1685_FAMILY=y
CONFIG_RTC_DRV_DS1685=y
# CONFIG_RTC_DRV_DS1689 is not set
# CONFIG_RTC_DRV_DS17285 is not set
# CONFIG_RTC_DRV_DS17485 is not set
# CONFIG_RTC_DRV_DS17885 is not set
CONFIG_RTC_DRV_DS1742=y
CONFIG_RTC_DRV_DS2404=y
CONFIG_RTC_DRV_DA9052=y
CONFIG_RTC_DRV_DA9055=y
CONFIG_RTC_DRV_DA9063=y
CONFIG_RTC_DRV_STK17TA8=y
CONFIG_RTC_DRV_M48T86=y
CONFIG_RTC_DRV_M48T35=y
CONFIG_RTC_DRV_M48T59=y
CONFIG_RTC_DRV_MSM6242=y
CONFIG_RTC_DRV_BQ4802=y
CONFIG_RTC_DRV_RP5C01=y
CONFIG_RTC_DRV_V3020=y
CONFIG_RTC_DRV_GAMECUBE=y
CONFIG_RTC_DRV_WM831X=y
CONFIG_RTC_DRV_WM8350=y
CONFIG_RTC_DRV_SC27XX=y
CONFIG_RTC_DRV_SPEAR=y
CONFIG_RTC_DRV_PCF50633=y
CONFIG_RTC_DRV_ZYNQMP=y
CONFIG_RTC_DRV_CROS_EC=y
CONFIG_RTC_DRV_NTXEC=y

#
# on-CPU RTC drivers
#
CONFIG_RTC_DRV_ASM9260=y
# CONFIG_RTC_DRV_DAVINCI is not set
CONFIG_RTC_DRV_DIGICOLOR=y
CONFIG_RTC_DRV_FSL_FTM_ALARM=y
CONFIG_RTC_DRV_MESON=y
CONFIG_RTC_DRV_MESON_VRTC=y
CONFIG_RTC_DRV_OMAP=y
CONFIG_RTC_DRV_S3C=y
CONFIG_RTC_DRV_EP93XX=y
CONFIG_RTC_DRV_AT91RM9200=y
CONFIG_RTC_DRV_AT91SAM9=y
CONFIG_RTC_DRV_RZN1=y
CONFIG_RTC_DRV_GENERIC=y
CONFIG_RTC_DRV_VT8500=y
CONFIG_RTC_DRV_SUN6I=y
CONFIG_RTC_DRV_SUNXI=y
CONFIG_RTC_DRV_MV=y
CONFIG_RTC_DRV_ARMADA38X=y
CONFIG_RTC_DRV_CADENCE=y
CONFIG_RTC_DRV_FTRTC010=y
CONFIG_RTC_DRV_STMP=y
CONFIG_RTC_DRV_PCAP=y
CONFIG_RTC_DRV_MC13XXX=y
CONFIG_RTC_DRV_JZ4740=y
CONFIG_RTC_DRV_LPC24XX=y
CONFIG_RTC_DRV_LPC32XX=y
CONFIG_RTC_DRV_PM8XXX=y
CONFIG_RTC_DRV_TEGRA=y
CONFIG_RTC_DRV_MXC=y
CONFIG_RTC_DRV_MXC_V2=y
CONFIG_RTC_DRV_SNVS=y
CONFIG_RTC_DRV_MOXART=y
CONFIG_RTC_DRV_MT2712=y
CONFIG_RTC_DRV_MT6397=y
CONFIG_RTC_DRV_MT7622=y
CONFIG_RTC_DRV_XGENE=y
CONFIG_RTC_DRV_R7301=y
CONFIG_RTC_DRV_STM32=y
CONFIG_RTC_DRV_CPCAP=y
CONFIG_RTC_DRV_RTD119X=y
CONFIG_RTC_DRV_ASPEED=y
CONFIG_RTC_DRV_TI_K3=y

#
# HID Sensor RTC drivers
#
CONFIG_RTC_DRV_HID_SENSOR_TIME=y
CONFIG_RTC_DRV_GOLDFISH=y
CONFIG_RTC_DRV_MSC313=y
CONFIG_DMADEVICES=y
CONFIG_DMADEVICES_DEBUG=y
CONFIG_DMADEVICES_VDEBUG=y

#
# DMA Devices
#
CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=y
CONFIG_DMA_ENGINE=y
CONFIG_DMA_VIRTUAL_CHANNELS=y
CONFIG_DMA_OF=y
CONFIG_ALTERA_MSGDMA=y
CONFIG_APPLE_ADMAC=y
CONFIG_AXI_DMAC=y
CONFIG_BCM_SBA_RAID=y
CONFIG_DMA_JZ4780=y
CONFIG_DMA_SA11X0=y
CONFIG_DMA_SUN6I=y
CONFIG_DW_AXI_DMAC=y
CONFIG_EP93XX_DMA=y
CONFIG_FSL_EDMA=y
CONFIG_IMG_MDC_DMA=y
CONFIG_INTEL_IDMA64=y
# CONFIG_INTEL_IOP_ADMA is not set
CONFIG_K3_DMA=y
CONFIG_MCF_EDMA=y
CONFIG_MILBEAUT_HDMAC=y
CONFIG_MILBEAUT_XDMAC=y
CONFIG_MMP_PDMA=y
CONFIG_MMP_TDMA=y
CONFIG_MV_XOR=y
CONFIG_MXS_DMA=y
CONFIG_NBPFAXI_DMA=y
CONFIG_STM32_DMA=y
CONFIG_STM32_DMAMUX=y
CONFIG_STM32_MDMA=y
CONFIG_SPRD_DMA=y
CONFIG_S3C24XX_DMAC=y
CONFIG_TEGRA20_APB_DMA=y
CONFIG_TEGRA210_ADMA=y
CONFIG_TIMB_DMA=y
CONFIG_UNIPHIER_MDMAC=y
CONFIG_UNIPHIER_XDMAC=y
CONFIG_XGENE_DMA=y
CONFIG_XILINX_ZYNQMP_DMA=y
CONFIG_XILINX_ZYNQMP_DPDMA=y
CONFIG_MTK_HSDMA=y
CONFIG_MTK_CQDMA=y
CONFIG_MTK_UART_APDMA=y
CONFIG_QCOM_ADM=y
CONFIG_QCOM_HIDMA_MGMT=y
CONFIG_QCOM_HIDMA=y
CONFIG_DW_DMAC_CORE=y
CONFIG_DW_DMAC=y
CONFIG_RZN1_DMAMUX=y
CONFIG_SF_PDMA=y
CONFIG_RENESAS_DMA=y
CONFIG_SH_DMAE_BASE=y
CONFIG_SH_DMAE=y
CONFIG_RCAR_DMAC=y
CONFIG_RENESAS_USB_DMAC=y
CONFIG_RZ_DMAC=y
CONFIG_TI_EDMA=y
CONFIG_DMA_OMAP=y
CONFIG_TI_DMA_CROSSBAR=y
CONFIG_INTEL_LDMA=y

#
# DMA Clients
#
CONFIG_ASYNC_TX_DMA=y
CONFIG_DMATEST=y
CONFIG_DMA_ENGINE_RAID=y

#
# DMABUF options
#
CONFIG_SYNC_FILE=y
CONFIG_SW_SYNC=y
CONFIG_UDMABUF=y
CONFIG_DMABUF_MOVE_NOTIFY=y
CONFIG_DMABUF_DEBUG=y
CONFIG_DMABUF_SELFTESTS=y
CONFIG_DMABUF_HEAPS=y
CONFIG_DMABUF_SYSFS_STATS=y
CONFIG_DMABUF_HEAPS_SYSTEM=y
# end of DMABUF options

CONFIG_AUXDISPLAY=y
CONFIG_CHARLCD=y
CONFIG_LINEDISP=y
CONFIG_HD44780_COMMON=y
CONFIG_HD44780=y
CONFIG_IMG_ASCII_LCD=y
CONFIG_HT16K33=y
CONFIG_LCD2S=y
CONFIG_PARPORT_PANEL=y
CONFIG_PANEL_PARPORT=0
CONFIG_PANEL_PROFILE=5
CONFIG_PANEL_CHANGE_MESSAGE=y
CONFIG_PANEL_BOOT_MESSAGE=""
# CONFIG_CHARLCD_BL_OFF is not set
# CONFIG_CHARLCD_BL_ON is not set
CONFIG_CHARLCD_BL_FLASH=y
CONFIG_PANEL=y
CONFIG_UIO=y
CONFIG_UIO_PDRV_GENIRQ=y
CONFIG_UIO_DMEM_GENIRQ=y
CONFIG_UIO_PRUSS=y
CONFIG_UIO_DFL=y
CONFIG_VFIO=y
CONFIG_VFIO_VIRQFD=y
CONFIG_VFIO_NOIOMMU=y
CONFIG_VFIO_PLATFORM=y
CONFIG_VFIO_AMBA=y
CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET=y
CONFIG_VFIO_PLATFORM_AMDXGBE_RESET=y
CONFIG_VFIO_PLATFORM_BCMFLEXRM_RESET=y
CONFIG_VFIO_MDEV=y
CONFIG_IRQ_BYPASS_MANAGER=y
CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_ANCHOR=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_VDPA=y
CONFIG_VIRTIO_BALLOON=y
CONFIG_VIRTIO_INPUT=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_VIRTIO_DMA_SHARED_BUFFER=y
CONFIG_VDPA=y
CONFIG_VDPA_SIM=y
CONFIG_VDPA_SIM_NET=y
CONFIG_VDPA_SIM_BLOCK=y
CONFIG_VDPA_USER=y
CONFIG_VHOST_IOTLB=y
CONFIG_VHOST_RING=y
CONFIG_VHOST=y
CONFIG_VHOST_MENU=y
CONFIG_VHOST_NET=y
CONFIG_VHOST_SCSI=y
CONFIG_VHOST_VSOCK=y
CONFIG_VHOST_VDPA=y
CONFIG_VHOST_CROSS_ENDIAN_LEGACY=y

#
# Microsoft Hyper-V guest support
#
# end of Microsoft Hyper-V guest support

CONFIG_GREYBUS=y
CONFIG_GREYBUS_ES2=y
CONFIG_COMEDI=y
CONFIG_COMEDI_DEBUG=y
CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048
CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480
CONFIG_COMEDI_MISC_DRIVERS=y
CONFIG_COMEDI_BOND=y
CONFIG_COMEDI_TEST=y
CONFIG_COMEDI_PARPORT=y
CONFIG_COMEDI_SSV_DNP=y
CONFIG_COMEDI_ISA_DRIVERS=y
CONFIG_COMEDI_PCL711=y
CONFIG_COMEDI_PCL724=y
CONFIG_COMEDI_PCL726=y
CONFIG_COMEDI_PCL730=y
CONFIG_COMEDI_PCL812=y
CONFIG_COMEDI_PCL816=y
CONFIG_COMEDI_PCL818=y
CONFIG_COMEDI_PCM3724=y
CONFIG_COMEDI_AMPLC_DIO200_ISA=y
CONFIG_COMEDI_AMPLC_PC236_ISA=y
CONFIG_COMEDI_AMPLC_PC263_ISA=y
CONFIG_COMEDI_RTI800=y
CONFIG_COMEDI_RTI802=y
CONFIG_COMEDI_DAC02=y
CONFIG_COMEDI_DAS16M1=y
CONFIG_COMEDI_DAS08_ISA=y
CONFIG_COMEDI_DAS16=y
CONFIG_COMEDI_DAS800=y
CONFIG_COMEDI_DAS1800=y
CONFIG_COMEDI_DAS6402=y
CONFIG_COMEDI_DT2801=y
CONFIG_COMEDI_DT2811=y
CONFIG_COMEDI_DT2814=y
CONFIG_COMEDI_DT2815=y
CONFIG_COMEDI_DT2817=y
CONFIG_COMEDI_DT282X=y
CONFIG_COMEDI_DMM32AT=y
CONFIG_COMEDI_FL512=y
CONFIG_COMEDI_AIO_AIO12_8=y
CONFIG_COMEDI_AIO_IIRO_16=y
CONFIG_COMEDI_II_PCI20KC=y
CONFIG_COMEDI_C6XDIGIO=y
CONFIG_COMEDI_MPC624=y
CONFIG_COMEDI_ADQ12B=y
CONFIG_COMEDI_NI_AT_A2150=y
CONFIG_COMEDI_NI_AT_AO=y
CONFIG_COMEDI_NI_ATMIO=y
CONFIG_COMEDI_NI_ATMIO16D=y
CONFIG_COMEDI_NI_LABPC_ISA=y
CONFIG_COMEDI_PCMAD=y
CONFIG_COMEDI_PCMDA12=y
CONFIG_COMEDI_PCMMIO=y
CONFIG_COMEDI_PCMUIO=y
CONFIG_COMEDI_MULTIQ3=y
CONFIG_COMEDI_S526=y
CONFIG_COMEDI_PCMCIA_DRIVERS=y
CONFIG_COMEDI_CB_DAS16_CS=y
CONFIG_COMEDI_DAS08_CS=y
CONFIG_COMEDI_NI_DAQ_700_CS=y
CONFIG_COMEDI_NI_DAQ_DIO24_CS=y
CONFIG_COMEDI_NI_LABPC_CS=y
CONFIG_COMEDI_NI_MIO_CS=y
CONFIG_COMEDI_QUATECH_DAQP_CS=y
CONFIG_COMEDI_USB_DRIVERS=y
CONFIG_COMEDI_DT9812=y
CONFIG_COMEDI_NI_USB6501=y
CONFIG_COMEDI_USBDUX=y
CONFIG_COMEDI_USBDUXFAST=y
CONFIG_COMEDI_USBDUXSIGMA=y
CONFIG_COMEDI_VMK80XX=y
CONFIG_COMEDI_8254=y
CONFIG_COMEDI_8255=y
CONFIG_COMEDI_8255_SA=y
CONFIG_COMEDI_KCOMEDILIB=y
CONFIG_COMEDI_AMPLC_DIO200=y
CONFIG_COMEDI_AMPLC_PC236=y
CONFIG_COMEDI_DAS08=y
CONFIG_COMEDI_NI_LABPC=y
CONFIG_COMEDI_NI_TIO=y
CONFIG_COMEDI_NI_ROUTING=y
CONFIG_COMEDI_TESTS=y
CONFIG_COMEDI_TESTS_EXAMPLE=y
CONFIG_COMEDI_TESTS_NI_ROUTES=y
CONFIG_STAGING=y
CONFIG_PRISM2_USB=y
CONFIG_RTLLIB=m
CONFIG_RTLLIB_CRYPTO_CCMP=m
CONFIG_RTLLIB_CRYPTO_TKIP=m
CONFIG_RTLLIB_CRYPTO_WEP=m
CONFIG_RTL8723BS=m
CONFIG_R8712U=y
CONFIG_R8188EU=m
CONFIG_OCTEON_ETHERNET=y
CONFIG_VT6656=m

#
# IIO staging drivers
#

#
# Accelerometers
#
CONFIG_ADIS16203=y
CONFIG_ADIS16240=y
# end of Accelerometers

#
# Analog to digital converters
#
CONFIG_AD7816=y
# end of Analog to digital converters

#
# Analog digital bi-direction converters
#
CONFIG_ADT7316=y
CONFIG_ADT7316_SPI=y
CONFIG_ADT7316_I2C=y
# end of Analog digital bi-direction converters

#
# Direct Digital Synthesis
#
CONFIG_AD9832=y
CONFIG_AD9834=y
# end of Direct Digital Synthesis

#
# Network Analyzer, Impedance Converters
#
CONFIG_AD5933=y
# end of Network Analyzer, Impedance Converters

#
# Active energy metering IC
#
CONFIG_ADE7854=y
CONFIG_ADE7854_I2C=y
CONFIG_ADE7854_SPI=y
# end of Active energy metering IC

#
# Resolver to digital converters
#
CONFIG_AD2S1210=y
# end of Resolver to digital converters
# end of IIO staging drivers

CONFIG_USB_EMXX=y
CONFIG_STAGING_MEDIA=y
CONFIG_VIDEO_IMX_MEDIA=y

#
# i.MX5/6/7/8 Media Sub devices
#
CONFIG_VIDEO_IMX_CSI=y
CONFIG_VIDEO_IMX7_CSI=y
# end of i.MX5/6/7/8 Media Sub devices

CONFIG_VIDEO_MAX96712=y
CONFIG_VIDEO_MESON_VDEC=y
CONFIG_VIDEO_OMAP4=y
CONFIG_VIDEO_ROCKCHIP_VDEC=y
CONFIG_VIDEO_SUNXI=y
CONFIG_VIDEO_SUNXI_CEDRUS=y
CONFIG_STAGING_MEDIA_DEPRECATED=y
CONFIG_VIDEO_CPIA2=y
CONFIG_VIDEO_VIU=y
CONFIG_VIDEO_STKWEBCAM=y
CONFIG_VIDEO_TM6000=y
CONFIG_VIDEO_TM6000_ALSA=y
CONFIG_VIDEO_TM6000_DVB=y
CONFIG_VIDEO_DM6446_CCDC=y
CONFIG_VIDEO_DM355_CCDC=y
CONFIG_VIDEO_DM365_ISIF=y
CONFIG_USB_ZR364XX=y
CONFIG_STAGING_BOARD=y
CONFIG_LTE_GDM724X=m
CONFIG_FB_TFT=y
CONFIG_FB_TFT_AGM1264K_FL=y
CONFIG_FB_TFT_BD663474=y
CONFIG_FB_TFT_HX8340BN=y
CONFIG_FB_TFT_HX8347D=y
CONFIG_FB_TFT_HX8353D=y
CONFIG_FB_TFT_HX8357D=y
CONFIG_FB_TFT_ILI9163=y
CONFIG_FB_TFT_ILI9320=y
CONFIG_FB_TFT_ILI9325=y
CONFIG_FB_TFT_ILI9340=y
CONFIG_FB_TFT_ILI9341=y
CONFIG_FB_TFT_ILI9481=y
CONFIG_FB_TFT_ILI9486=y
CONFIG_FB_TFT_PCD8544=y
CONFIG_FB_TFT_RA8875=y
CONFIG_FB_TFT_S6D02A1=y
CONFIG_FB_TFT_S6D1121=y
CONFIG_FB_TFT_SEPS525=y
CONFIG_FB_TFT_SH1106=y
CONFIG_FB_TFT_SSD1289=y
CONFIG_FB_TFT_SSD1305=y
CONFIG_FB_TFT_SSD1306=y
CONFIG_FB_TFT_SSD1331=y
CONFIG_FB_TFT_SSD1351=y
CONFIG_FB_TFT_ST7735R=y
CONFIG_FB_TFT_ST7789V=y
CONFIG_FB_TFT_TINYLCD=y
CONFIG_FB_TFT_TLS8204=y
CONFIG_FB_TFT_UC1611=y
CONFIG_FB_TFT_UC1701=y
CONFIG_FB_TFT_UPD161704=y
CONFIG_MOST_COMPONENTS=y
CONFIG_MOST_NET=y
CONFIG_MOST_VIDEO=y
CONFIG_MOST_DIM2=y
CONFIG_MOST_I2C=y
CONFIG_KS7010=y
CONFIG_GREYBUS_AUDIO=y
CONFIG_GREYBUS_AUDIO_APB_CODEC=y
CONFIG_GREYBUS_BOOTROM=y
CONFIG_GREYBUS_FIRMWARE=y
CONFIG_GREYBUS_HID=y
CONFIG_GREYBUS_LIGHT=y
CONFIG_GREYBUS_LOG=y
CONFIG_GREYBUS_LOOPBACK=y
CONFIG_GREYBUS_POWER=y
CONFIG_GREYBUS_RAW=y
CONFIG_GREYBUS_VIBRATOR=y
CONFIG_GREYBUS_BRIDGED_PHY=y
CONFIG_GREYBUS_GPIO=y
CONFIG_GREYBUS_I2C=y
CONFIG_GREYBUS_PWM=y
CONFIG_GREYBUS_SDIO=y
CONFIG_GREYBUS_SPI=y
CONFIG_GREYBUS_UART=y
CONFIG_GREYBUS_USB=y
CONFIG_GREYBUS_ARCHE=y
CONFIG_BCM_VIDEOCORE=y
CONFIG_BCM2835_VCHIQ=y
CONFIG_VCHIQ_CDEV=y
CONFIG_SND_BCM2835=y
CONFIG_VIDEO_BCM2835=y
CONFIG_BCM2835_VCHIQ_MMAL=y
CONFIG_PI433=y
CONFIG_XIL_AXIS_FIFO=y
CONFIG_FIELDBUS_DEV=y
CONFIG_HMS_ANYBUSS_BUS=y
CONFIG_ARCX_ANYBUS_CONTROLLER=y
CONFIG_HMS_PROFINET=y
CONFIG_GOLDFISH=y
CONFIG_GOLDFISH_PIPE=y
CONFIG_CHROME_PLATFORMS=y
CONFIG_CROS_EC=y
CONFIG_CROS_EC_I2C=y
CONFIG_CROS_EC_RPMSG=y
CONFIG_CROS_EC_SPI=y
CONFIG_CROS_EC_PROTO=y
CONFIG_CROS_KBD_LED_BACKLIGHT=y
CONFIG_CROS_EC_CHARDEV=y
CONFIG_CROS_EC_LIGHTBAR=y
CONFIG_CROS_EC_VBC=y
CONFIG_CROS_EC_DEBUGFS=y
CONFIG_CROS_EC_SENSORHUB=y
CONFIG_CROS_EC_SYSFS=y
CONFIG_CROS_EC_TYPEC=y
CONFIG_CROS_USBPD_LOGGER=y
CONFIG_CROS_USBPD_NOTIFY=y
CONFIG_CROS_KUNIT=y
CONFIG_MELLANOX_PLATFORM=y
CONFIG_MLXREG_HOTPLUG=y
CONFIG_MLXREG_IO=y
CONFIG_MLXREG_LC=y
CONFIG_NVSW_SN2201=y
CONFIG_OLPC_EC=y
CONFIG_OLPC_XO175=y
CONFIG_OLPC_XO175_EC=y
CONFIG_SURFACE_PLATFORMS=y
CONFIG_HAVE_CLK=y
CONFIG_HAVE_CLK_PREPARE=y
CONFIG_COMMON_CLK=y
CONFIG_COMMON_CLK_WM831X=y

#
# Clock driver for ARM Reference designs
#
CONFIG_CLK_ICST=y
CONFIG_CLK_SP810=y
# end of Clock driver for ARM Reference designs

CONFIG_CLK_HSDK=y
CONFIG_LMK04832=y
CONFIG_COMMON_CLK_APPLE_NCO=y
CONFIG_COMMON_CLK_MAX77686=y
CONFIG_COMMON_CLK_MAX9485=y
CONFIG_COMMON_CLK_HI655X=y
CONFIG_COMMON_CLK_SCMI=y
CONFIG_COMMON_CLK_SCPI=y
CONFIG_COMMON_CLK_SI5341=y
CONFIG_COMMON_CLK_SI5351=y
CONFIG_COMMON_CLK_SI514=y
CONFIG_COMMON_CLK_SI544=y
CONFIG_COMMON_CLK_SI570=y
CONFIG_COMMON_CLK_BM1880=y
CONFIG_COMMON_CLK_CDCE706=y
CONFIG_COMMON_CLK_TPS68470=y
CONFIG_COMMON_CLK_CDCE925=y
CONFIG_COMMON_CLK_CS2000_CP=y
CONFIG_COMMON_CLK_EN7523=y
CONFIG_COMMON_CLK_FSL_FLEXSPI=y
CONFIG_COMMON_CLK_FSL_SAI=y
CONFIG_COMMON_CLK_GEMINI=y
CONFIG_COMMON_CLK_LAN966X=y
CONFIG_COMMON_CLK_ASPEED=y
CONFIG_COMMON_CLK_S2MPS11=y
CONFIG_CLK_TWL6040=y
CONFIG_COMMON_CLK_AXI_CLKGEN=y
CONFIG_CLK_QORIQ=y
CONFIG_CLK_LS1028A_PLLDIG=y
CONFIG_COMMON_CLK_XGENE=y
CONFIG_COMMON_CLK_LOCHNAGAR=y
CONFIG_COMMON_CLK_PALMAS=y
CONFIG_COMMON_CLK_PWM=y
CONFIG_COMMON_CLK_OXNAS=y
CONFIG_COMMON_CLK_RS9_PCIE=y
CONFIG_COMMON_CLK_VC5=y
CONFIG_COMMON_CLK_VC7=y
CONFIG_COMMON_CLK_MMP2_AUDIO=y
CONFIG_COMMON_CLK_BD718XX=y
CONFIG_COMMON_CLK_FIXED_MMIO=y
CONFIG_CLK_ACTIONS=y
CONFIG_CLK_OWL_S500=y
CONFIG_CLK_OWL_S700=y
CONFIG_CLK_OWL_S900=y
CONFIG_CLK_ANALOGBITS_WRPLL_CLN28HPC=y
CONFIG_CLK_BAIKAL_T1=y
CONFIG_CLK_BT1_CCU_PLL=y
CONFIG_CLK_BT1_CCU_DIV=y
CONFIG_CLK_BT1_CCU_RST=y
CONFIG_CLK_BCM2711_DVP=y
CONFIG_CLK_BCM2835=y
CONFIG_CLK_BCM_63XX=y
CONFIG_CLK_BCM_63XX_GATE=y
CONFIG_CLK_BCM_KONA=y
CONFIG_COMMON_CLK_IPROC=y
CONFIG_CLK_BCM_CYGNUS=y
CONFIG_CLK_BCM_HR2=y
CONFIG_CLK_BCM_NSP=y
CONFIG_CLK_BCM_NS2=y
CONFIG_CLK_BCM_SR=y
CONFIG_CLK_RASPBERRYPI=y
CONFIG_COMMON_CLK_HI3516CV300=y
CONFIG_COMMON_CLK_HI3519=y
CONFIG_COMMON_CLK_HI3559A=y
CONFIG_COMMON_CLK_HI3660=y
CONFIG_COMMON_CLK_HI3670=y
CONFIG_COMMON_CLK_HI3798CV200=y
CONFIG_COMMON_CLK_HI6220=y
CONFIG_RESET_HISI=y
CONFIG_STUB_CLK_HI6220=y
CONFIG_STUB_CLK_HI3660=y
CONFIG_COMMON_CLK_BOSTON=y
CONFIG_MXC_CLK=y
CONFIG_CLK_IMX8MM=y
CONFIG_CLK_IMX8MN=y
CONFIG_CLK_IMX8MP=y
CONFIG_CLK_IMX8MQ=y
CONFIG_CLK_IMX8ULP=y
CONFIG_CLK_IMX93=y

#
# Ingenic SoCs drivers
#
CONFIG_INGENIC_CGU_COMMON=y
CONFIG_INGENIC_CGU_JZ4740=y
CONFIG_INGENIC_CGU_JZ4725B=y
CONFIG_INGENIC_CGU_JZ4760=y
CONFIG_INGENIC_CGU_JZ4770=y
CONFIG_INGENIC_CGU_JZ4780=y
CONFIG_INGENIC_CGU_X1000=y
CONFIG_INGENIC_CGU_X1830=y
CONFIG_INGENIC_TCU_CLK=y
# end of Ingenic SoCs drivers

CONFIG_COMMON_CLK_KEYSTONE=y
CONFIG_TI_SYSCON_CLK=y

#
# Clock driver for MediaTek SoC
#
CONFIG_COMMON_CLK_MEDIATEK=y
CONFIG_COMMON_CLK_MT2701=y
CONFIG_COMMON_CLK_MT2701_MMSYS=y
CONFIG_COMMON_CLK_MT2701_IMGSYS=y
CONFIG_COMMON_CLK_MT2701_VDECSYS=y
CONFIG_COMMON_CLK_MT2701_HIFSYS=y
CONFIG_COMMON_CLK_MT2701_ETHSYS=y
CONFIG_COMMON_CLK_MT2701_BDPSYS=y
CONFIG_COMMON_CLK_MT2701_AUDSYS=y
CONFIG_COMMON_CLK_MT2701_G3DSYS=y
CONFIG_COMMON_CLK_MT2712=y
CONFIG_COMMON_CLK_MT2712_BDPSYS=y
CONFIG_COMMON_CLK_MT2712_IMGSYS=y
CONFIG_COMMON_CLK_MT2712_JPGDECSYS=y
CONFIG_COMMON_CLK_MT2712_MFGCFG=y
CONFIG_COMMON_CLK_MT2712_MMSYS=y
CONFIG_COMMON_CLK_MT2712_VDECSYS=y
CONFIG_COMMON_CLK_MT2712_VENCSYS=y
CONFIG_COMMON_CLK_MT6765=y
CONFIG_COMMON_CLK_MT6765_AUDIOSYS=y
CONFIG_COMMON_CLK_MT6765_CAMSYS=y
CONFIG_COMMON_CLK_MT6765_GCESYS=y
CONFIG_COMMON_CLK_MT6765_MMSYS=y
CONFIG_COMMON_CLK_MT6765_IMGSYS=y
CONFIG_COMMON_CLK_MT6765_VCODECSYS=y
CONFIG_COMMON_CLK_MT6765_MFGSYS=y
CONFIG_COMMON_CLK_MT6765_MIPI0ASYS=y
CONFIG_COMMON_CLK_MT6765_MIPI0BSYS=y
CONFIG_COMMON_CLK_MT6765_MIPI1ASYS=y
CONFIG_COMMON_CLK_MT6765_MIPI1BSYS=y
CONFIG_COMMON_CLK_MT6765_MIPI2ASYS=y
CONFIG_COMMON_CLK_MT6765_MIPI2BSYS=y
CONFIG_COMMON_CLK_MT6779=y
CONFIG_COMMON_CLK_MT6779_MMSYS=y
CONFIG_COMMON_CLK_MT6779_IMGSYS=y
CONFIG_COMMON_CLK_MT6779_IPESYS=y
CONFIG_COMMON_CLK_MT6779_CAMSYS=y
CONFIG_COMMON_CLK_MT6779_VDECSYS=y
CONFIG_COMMON_CLK_MT6779_VENCSYS=y
CONFIG_COMMON_CLK_MT6779_MFGCFG=y
CONFIG_COMMON_CLK_MT6779_AUDSYS=y
CONFIG_COMMON_CLK_MT6795=y
CONFIG_COMMON_CLK_MT6795_MFGCFG=y
CONFIG_COMMON_CLK_MT6795_MMSYS=y
CONFIG_COMMON_CLK_MT6795_VDECSYS=y
CONFIG_COMMON_CLK_MT6795_VENCSYS=y
CONFIG_COMMON_CLK_MT6797=y
CONFIG_COMMON_CLK_MT6797_MMSYS=y
CONFIG_COMMON_CLK_MT6797_IMGSYS=y
CONFIG_COMMON_CLK_MT6797_VDECSYS=y
CONFIG_COMMON_CLK_MT6797_VENCSYS=y
CONFIG_COMMON_CLK_MT7622=y
CONFIG_COMMON_CLK_MT7622_ETHSYS=y
CONFIG_COMMON_CLK_MT7622_HIFSYS=y
CONFIG_COMMON_CLK_MT7622_AUDSYS=y
CONFIG_COMMON_CLK_MT7629=y
CONFIG_COMMON_CLK_MT7629_ETHSYS=y
CONFIG_COMMON_CLK_MT7629_HIFSYS=y
CONFIG_COMMON_CLK_MT7986=y
CONFIG_COMMON_CLK_MT7986_ETHSYS=y
CONFIG_COMMON_CLK_MT8135=y
CONFIG_COMMON_CLK_MT8167=y
CONFIG_COMMON_CLK_MT8167_AUDSYS=y
CONFIG_COMMON_CLK_MT8167_IMGSYS=y
CONFIG_COMMON_CLK_MT8167_MFGCFG=y
CONFIG_COMMON_CLK_MT8167_MMSYS=y
CONFIG_COMMON_CLK_MT8167_VDECSYS=y
CONFIG_COMMON_CLK_MT8173=y
CONFIG_COMMON_CLK_MT8173_MMSYS=y
CONFIG_COMMON_CLK_MT8183=y
CONFIG_COMMON_CLK_MT8183_AUDIOSYS=y
CONFIG_COMMON_CLK_MT8183_CAMSYS=y
CONFIG_COMMON_CLK_MT8183_IMGSYS=y
CONFIG_COMMON_CLK_MT8183_IPU_CORE0=y
CONFIG_COMMON_CLK_MT8183_IPU_CORE1=y
CONFIG_COMMON_CLK_MT8183_IPU_ADL=y
CONFIG_COMMON_CLK_MT8183_IPU_CONN=y
CONFIG_COMMON_CLK_MT8183_MFGCFG=y
CONFIG_COMMON_CLK_MT8183_MMSYS=y
CONFIG_COMMON_CLK_MT8183_VDECSYS=y
CONFIG_COMMON_CLK_MT8183_VENCSYS=y
CONFIG_COMMON_CLK_MT8186=y
CONFIG_COMMON_CLK_MT8192=y
CONFIG_COMMON_CLK_MT8192_AUDSYS=y
CONFIG_COMMON_CLK_MT8192_CAMSYS=y
CONFIG_COMMON_CLK_MT8192_IMGSYS=y
CONFIG_COMMON_CLK_MT8192_IMP_IIC_WRAP=y
CONFIG_COMMON_CLK_MT8192_IPESYS=y
CONFIG_COMMON_CLK_MT8192_MDPSYS=y
CONFIG_COMMON_CLK_MT8192_MFGCFG=y
CONFIG_COMMON_CLK_MT8192_MMSYS=y
CONFIG_COMMON_CLK_MT8192_MSDC=y
CONFIG_COMMON_CLK_MT8192_SCP_ADSP=y
CONFIG_COMMON_CLK_MT8192_VDECSYS=y
CONFIG_COMMON_CLK_MT8192_VENCSYS=y
CONFIG_COMMON_CLK_MT8195=y
CONFIG_COMMON_CLK_MT8365=y
CONFIG_COMMON_CLK_MT8365_APU=y
CONFIG_COMMON_CLK_MT8365_CAM=y
CONFIG_COMMON_CLK_MT8365_MFG=y
CONFIG_COMMON_CLK_MT8365_MMSYS=y
CONFIG_COMMON_CLK_MT8365_VDEC=y
CONFIG_COMMON_CLK_MT8365_VENC=y
CONFIG_COMMON_CLK_MT8516=y
CONFIG_COMMON_CLK_MT8516_AUDSYS=y
# end of Clock driver for MediaTek SoC

#
# Clock support for Amlogic platforms
#
# CONFIG_COMMON_CLK_AXG_AUDIO is not set
# end of Clock support for Amlogic platforms

CONFIG_MSTAR_MSC313_MPLL=y
CONFIG_MCHP_CLK_MPFS=y
CONFIG_COMMON_CLK_PISTACHIO=y
CONFIG_QCOM_GDSC=y
CONFIG_QCOM_RPMCC=y
CONFIG_COMMON_CLK_QCOM=y
CONFIG_QCOM_A53PLL=y
CONFIG_QCOM_A7PLL=y
CONFIG_QCOM_CLK_APCS_MSM8916=y
CONFIG_QCOM_CLK_APCS_SDX55=y
CONFIG_QCOM_CLK_SMD_RPM=y
CONFIG_QCOM_CLK_RPMH=y
CONFIG_APQ_GCC_8084=y
CONFIG_APQ_MMCC_8084=y
CONFIG_IPQ_APSS_PLL=y
CONFIG_IPQ_APSS_6018=y
CONFIG_IPQ_GCC_4019=y
CONFIG_IPQ_GCC_6018=y
CONFIG_IPQ_GCC_806X=y
CONFIG_IPQ_LCC_806X=y
CONFIG_IPQ_GCC_8074=y
CONFIG_MSM_GCC_8660=y
CONFIG_MSM_GCC_8909=y
CONFIG_MSM_GCC_8916=y
CONFIG_MSM_GCC_8939=y
CONFIG_MSM_GCC_8960=y
CONFIG_MSM_LCC_8960=y
CONFIG_MDM_GCC_9607=y
CONFIG_MDM_GCC_9615=y
CONFIG_MDM_LCC_9615=y
CONFIG_MSM_MMCC_8960=y
CONFIG_MSM_GCC_8953=y
CONFIG_MSM_GCC_8974=y
CONFIG_MSM_MMCC_8974=y
CONFIG_MSM_GCC_8976=y
CONFIG_MSM_MMCC_8994=y
CONFIG_MSM_GCC_8994=y
CONFIG_MSM_GCC_8996=y
CONFIG_MSM_MMCC_8996=y
CONFIG_MSM_GCC_8998=y
CONFIG_MSM_GPUCC_8998=y
CONFIG_MSM_MMCC_8998=y
CONFIG_QCM_GCC_2290=y
CONFIG_QCM_DISPCC_2290=y
CONFIG_QCS_GCC_404=y
CONFIG_SC_CAMCC_7180=y
CONFIG_SC_CAMCC_7280=y
CONFIG_SC_DISPCC_7180=y
CONFIG_SC_DISPCC_7280=y
CONFIG_SC_GCC_7180=y
CONFIG_SC_GCC_7280=y
CONFIG_SC_GCC_8180X=y
CONFIG_SC_GCC_8280XP=y
CONFIG_SC_GPUCC_7180=y
CONFIG_SC_GPUCC_7280=y
CONFIG_SC_GPUCC_8280XP=y
CONFIG_SC_LPASSCC_7280=y
CONFIG_SC_LPASS_CORECC_7180=y
CONFIG_SC_LPASS_CORECC_7280=y
CONFIG_SC_MSS_7180=y
CONFIG_SC_VIDEOCC_7180=y
CONFIG_SC_VIDEOCC_7280=y
CONFIG_SDM_CAMCC_845=y
CONFIG_SDM_GCC_660=y
CONFIG_SDM_MMCC_660=y
CONFIG_SDM_GPUCC_660=y
CONFIG_QCS_TURING_404=y
CONFIG_QCS_Q6SSTOP_404=y
CONFIG_SDM_GCC_845=y
CONFIG_SDM_GPUCC_845=y
CONFIG_SDM_VIDEOCC_845=y
CONFIG_SDM_DISPCC_845=y
CONFIG_SDM_LPASSCC_845=y
CONFIG_SDX_GCC_55=y
CONFIG_SDX_GCC_65=y
CONFIG_SM_CAMCC_8250=y
CONFIG_SM_CAMCC_8450=y
CONFIG_SM_DISPCC_6115=y
CONFIG_SM_DISPCC_6125=y
CONFIG_SM_DISPCC_8250=y
CONFIG_SM_DISPCC_6350=y
CONFIG_SM_DISPCC_8450=y
CONFIG_SM_GCC_6115=y
CONFIG_SM_GCC_6125=y
CONFIG_SM_GCC_6350=y
CONFIG_SM_GCC_6375=y
CONFIG_SM_GCC_8150=y
CONFIG_SM_GCC_8250=y
CONFIG_SM_GCC_8350=y
CONFIG_SM_GCC_8450=y
CONFIG_SM_GPUCC_6350=y
CONFIG_SM_GPUCC_8150=y
CONFIG_SM_GPUCC_8250=y
CONFIG_SM_GPUCC_8350=y
CONFIG_SM_VIDEOCC_8150=y
CONFIG_SM_VIDEOCC_8250=y
CONFIG_SPMI_PMIC_CLKDIV=y
CONFIG_QCOM_HFPLL=y
CONFIG_KPSS_XCC=y
CONFIG_CLK_GFM_LPASS_SM8250=y
CONFIG_CLK_MT7621=y
CONFIG_CLK_RENESAS=y
CONFIG_CLK_EMEV2=y
CONFIG_CLK_RZA1=y
CONFIG_CLK_R7S9210=y
CONFIG_CLK_R8A73A4=y
CONFIG_CLK_R8A7740=y
CONFIG_CLK_R8A7742=y
CONFIG_CLK_R8A7743=y
CONFIG_CLK_R8A7745=y
CONFIG_CLK_R8A77470=y
CONFIG_CLK_R8A774A1=y
CONFIG_CLK_R8A774B1=y
CONFIG_CLK_R8A774C0=y
CONFIG_CLK_R8A774E1=y
CONFIG_CLK_R8A7778=y
CONFIG_CLK_R8A7779=y
CONFIG_CLK_R8A7790=y
CONFIG_CLK_R8A7791=y
CONFIG_CLK_R8A7792=y
CONFIG_CLK_R8A7794=y
CONFIG_CLK_R8A7795=y
CONFIG_CLK_R8A77960=y
CONFIG_CLK_R8A77961=y
CONFIG_CLK_R8A77965=y
CONFIG_CLK_R8A77970=y
CONFIG_CLK_R8A77980=y
CONFIG_CLK_R8A77990=y
CONFIG_CLK_R8A77995=y
CONFIG_CLK_R8A779A0=y
CONFIG_CLK_R8A779F0=y
CONFIG_CLK_R8A779G0=y
CONFIG_CLK_R9A06G032=y
CONFIG_CLK_R9A07G043=y
CONFIG_CLK_R9A07G044=y
CONFIG_CLK_R9A07G054=y
CONFIG_CLK_R9A09G011=y
CONFIG_CLK_SH73A0=y
CONFIG_CLK_RCAR_CPG_LIB=y
CONFIG_CLK_RCAR_GEN2_CPG=y
CONFIG_CLK_RCAR_GEN3_CPG=y
CONFIG_CLK_RCAR_GEN4_CPG=y
CONFIG_CLK_RCAR_USB2_CLOCK_SEL=y
CONFIG_CLK_RZG2L=y
CONFIG_CLK_RENESAS_CPG_MSSR=y
CONFIG_CLK_RENESAS_CPG_MSTP=y
CONFIG_CLK_RENESAS_DIV6=y
CONFIG_COMMON_CLK_SAMSUNG=y
CONFIG_S3C64XX_COMMON_CLK=y
CONFIG_S5PV210_COMMON_CLK=y
CONFIG_EXYNOS_3250_COMMON_CLK=y
CONFIG_EXYNOS_4_COMMON_CLK=y
CONFIG_EXYNOS_5250_COMMON_CLK=y
CONFIG_EXYNOS_5260_COMMON_CLK=y
CONFIG_EXYNOS_5410_COMMON_CLK=y
CONFIG_EXYNOS_5420_COMMON_CLK=y
CONFIG_EXYNOS_ARM64_COMMON_CLK=y
CONFIG_EXYNOS_AUDSS_CLK_CON=y
CONFIG_EXYNOS_CLKOUT=y
CONFIG_S3C2410_COMMON_CLK=y
CONFIG_S3C2412_COMMON_CLK=y
CONFIG_S3C2443_COMMON_CLK=y
CONFIG_TESLA_FSD_COMMON_CLK=y
CONFIG_CLK_SIFIVE=y
CONFIG_CLK_SIFIVE_PRCI=y
CONFIG_CLK_INTEL_SOCFPGA=y
CONFIG_CLK_INTEL_SOCFPGA32=y
CONFIG_CLK_INTEL_SOCFPGA64=y
CONFIG_SPRD_COMMON_CLK=y
CONFIG_SPRD_SC9860_CLK=y
CONFIG_SPRD_SC9863A_CLK=y
CONFIG_SPRD_UMS512_CLK=y
CONFIG_CLK_STARFIVE_JH7100=y
CONFIG_CLK_STARFIVE_JH7100_AUDIO=y
CONFIG_CLK_SUNXI=y
CONFIG_CLK_SUNXI_CLOCKS=y
CONFIG_CLK_SUNXI_PRCM_SUN6I=y
CONFIG_CLK_SUNXI_PRCM_SUN8I=y
CONFIG_CLK_SUNXI_PRCM_SUN9I=y
CONFIG_SUNXI_CCU=y
CONFIG_SUNIV_F1C100S_CCU=y
CONFIG_SUN20I_D1_CCU=y
CONFIG_SUN20I_D1_R_CCU=y
CONFIG_SUN50I_A64_CCU=y
CONFIG_SUN50I_A100_CCU=y
CONFIG_SUN50I_A100_R_CCU=y
CONFIG_SUN50I_H6_CCU=y
CONFIG_SUN50I_H616_CCU=y
CONFIG_SUN50I_H6_R_CCU=y
CONFIG_SUN4I_A10_CCU=y
CONFIG_SUN5I_CCU=y
CONFIG_SUN6I_A31_CCU=y
CONFIG_SUN6I_RTC_CCU=y
CONFIG_SUN8I_A23_CCU=y
CONFIG_SUN8I_A33_CCU=y
CONFIG_SUN8I_A83T_CCU=y
CONFIG_SUN8I_H3_CCU=y
CONFIG_SUN8I_V3S_CCU=y
CONFIG_SUN8I_DE2_CCU=y
CONFIG_SUN8I_R40_CCU=y
CONFIG_SUN9I_A80_CCU=y
CONFIG_SUN8I_R_CCU=y
CONFIG_COMMON_CLK_TI_ADPLL=y
CONFIG_CLK_UNIPHIER=y
CONFIG_COMMON_CLK_VISCONTI=y
CONFIG_CLK_LGM_CGU=y
CONFIG_XILINX_VCU=y
CONFIG_COMMON_CLK_XLNX_CLKWZRD=y
CONFIG_COMMON_CLK_ZYNQMP=y
CONFIG_CLK_KUNIT_TEST=y
CONFIG_CLK_GATE_KUNIT_TEST=y
CONFIG_HWSPINLOCK=y
CONFIG_HWSPINLOCK_OMAP=y
CONFIG_HWSPINLOCK_QCOM=y
CONFIG_HWSPINLOCK_SPRD=y
CONFIG_HWSPINLOCK_STM32=y
CONFIG_HWSPINLOCK_SUN6I=y
CONFIG_HSEM_U8500=y

#
# Clock Source drivers
#
CONFIG_TIMER_OF=y
CONFIG_TIMER_PROBE=y
CONFIG_CLKSRC_MMIO=y
CONFIG_BCM2835_TIMER=y
CONFIG_BCM_KONA_TIMER=y
CONFIG_DAVINCI_TIMER=y
CONFIG_DIGICOLOR_TIMER=y
CONFIG_OMAP_DM_TIMER=y
CONFIG_DW_APB_TIMER=y
CONFIG_FTTMR010_TIMER=y
CONFIG_IXP4XX_TIMER=y
CONFIG_MESON6_TIMER=y
CONFIG_OWL_TIMER=y
CONFIG_RDA_TIMER=y
CONFIG_SUN4I_TIMER=y
CONFIG_SUN5I_HSTIMER=y
CONFIG_TEGRA_TIMER=y
CONFIG_TEGRA186_TIMER=y
CONFIG_VT8500_TIMER=y
CONFIG_NPCM7XX_TIMER=y
CONFIG_CADENCE_TTC_TIMER=y
CONFIG_ASM9260_TIMER=y
CONFIG_CLKSRC_DBX500_PRCMU=y
CONFIG_CLPS711X_TIMER=y
CONFIG_MXS_TIMER=y
CONFIG_NSPIRE_TIMER=y
CONFIG_INTEGRATOR_AP_TIMER=y
CONFIG_CLKSRC_PISTACHIO=y
CONFIG_CLKSRC_STM32_LP=y
CONFIG_ARMV7M_SYSTICK=y
CONFIG_ATMEL_PIT=y
CONFIG_ATMEL_ST=y
CONFIG_CLKSRC_SAMSUNG_PWM=y
CONFIG_FSL_FTM_TIMER=y
CONFIG_OXNAS_RPS_TIMER=y
CONFIG_MTK_TIMER=y
CONFIG_SPRD_TIMER=y
CONFIG_CLKSRC_JCORE_PIT=y
CONFIG_SH_TIMER_CMT=y
CONFIG_SH_TIMER_MTU2=y
CONFIG_RENESAS_OSTM=y
CONFIG_SH_TIMER_TMU=y
CONFIG_EM_TIMER_STI=y
CONFIG_CLKSRC_PXA=y
CONFIG_TIMER_IMX_SYS_CTR=y
CONFIG_CLKSRC_ST_LPC=y
CONFIG_GXP_TIMER=y
CONFIG_MSC313E_TIMER=y
CONFIG_INGENIC_TIMER=y
CONFIG_INGENIC_SYSOST=y
CONFIG_INGENIC_OST=y
CONFIG_MICROCHIP_PIT64B=y
CONFIG_GOLDFISH_TIMER=y
# end of Clock Source drivers

CONFIG_MAILBOX=y
CONFIG_IMX_MBOX=y
CONFIG_PLATFORM_MHU=y
CONFIG_ARMADA_37XX_RWTM_MBOX=y
CONFIG_ROCKCHIP_MBOX=y
CONFIG_ALTERA_MBOX=y
CONFIG_HI3660_MBOX=y
CONFIG_HI6220_MBOX=y
CONFIG_MAILBOX_TEST=y
CONFIG_POLARFIRE_SOC_MAILBOX=y
CONFIG_QCOM_APCS_IPC=y
CONFIG_BCM_PDC_MBOX=y
CONFIG_STM32_IPCC=y
CONFIG_MTK_ADSP_MBOX=y
CONFIG_MTK_CMDQ_MBOX=y
CONFIG_SUN6I_MSGBOX=y
CONFIG_SPRD_MBOX=y
CONFIG_QCOM_IPCC=y
CONFIG_IOMMU_IOVA=y
CONFIG_IOMMU_API=y
CONFIG_IOMMU_SUPPORT=y

#
# Generic IOMMU Pagetable Support
#
CONFIG_IOMMU_IO_PGTABLE=y
CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y
CONFIG_IOMMU_IO_PGTABLE_ARMV7S_SELFTEST=y
# end of Generic IOMMU Pagetable Support

CONFIG_IOMMU_DEBUGFS=y
CONFIG_IOMMU_DEFAULT_DMA_STRICT=y
# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
CONFIG_OF_IOMMU=y
CONFIG_OMAP_IOMMU=y
CONFIG_OMAP_IOMMU_DEBUG=y
CONFIG_ROCKCHIP_IOMMU=y
CONFIG_SUN50I_IOMMU=y
CONFIG_EXYNOS_IOMMU=y
CONFIG_EXYNOS_IOMMU_DEBUG=y
CONFIG_S390_CCW_IOMMU=y
CONFIG_S390_AP_IOMMU=y
CONFIG_MTK_IOMMU=y
CONFIG_SPRD_IOMMU=y

#
# Remoteproc drivers
#
CONFIG_REMOTEPROC=y
CONFIG_REMOTEPROC_CDEV=y
CONFIG_INGENIC_VPU_RPROC=y
CONFIG_MTK_SCP=y
CONFIG_MESON_MX_AO_ARC_REMOTEPROC=y
CONFIG_RCAR_REMOTEPROC=y
# end of Remoteproc drivers

#
# Rpmsg drivers
#
CONFIG_RPMSG=y
CONFIG_RPMSG_CHAR=y
CONFIG_RPMSG_CTRL=y
CONFIG_RPMSG_NS=y
CONFIG_RPMSG_MTK_SCP=y
CONFIG_RPMSG_QCOM_GLINK=y
CONFIG_RPMSG_QCOM_GLINK_RPM=y
CONFIG_RPMSG_QCOM_GLINK_SMEM=y
CONFIG_RPMSG_QCOM_SMD=y
CONFIG_RPMSG_VIRTIO=y
# end of Rpmsg drivers

CONFIG_SOUNDWIRE=y

#
# SoundWire Devices
#
CONFIG_SOUNDWIRE_QCOM=y

#
# SOC (System On Chip) specific Drivers
#

#
# Amlogic SoC drivers
#
CONFIG_MESON_CANVAS=y
CONFIG_MESON_CLK_MEASURE=y
CONFIG_MESON_GX_SOCINFO=y
CONFIG_MESON_MX_SOCINFO=y
# end of Amlogic SoC drivers

#
# Apple SoC drivers
#
CONFIG_APPLE_RTKIT=y
CONFIG_APPLE_SART=y
# end of Apple SoC drivers

#
# ASPEED SoC drivers
#
CONFIG_ASPEED_LPC_CTRL=y
CONFIG_ASPEED_LPC_SNOOP=y
CONFIG_ASPEED_UART_ROUTING=y
CONFIG_ASPEED_P2A_CTRL=y
CONFIG_ASPEED_SOCINFO=y
# end of ASPEED SoC drivers

CONFIG_AT91_SOC_ID=y
CONFIG_AT91_SOC_SFR=y

#
# Broadcom SoC drivers
#
CONFIG_BCM2835_POWER=y
CONFIG_SOC_BCM63XX=y
CONFIG_SOC_BRCMSTB=y
CONFIG_BCM63XX_POWER=y
CONFIG_BCM_PMB=y
# end of Broadcom SoC drivers

#
# NXP/Freescale QorIQ SoC drivers
#
CONFIG_QUICC_ENGINE=y
CONFIG_UCC_SLOW=y
CONFIG_UCC_FAST=y
CONFIG_UCC=y
CONFIG_QE_TDM=y
CONFIG_FSL_GUTS=y
CONFIG_DPAA2_CONSOLE=y
# end of NXP/Freescale QorIQ SoC drivers

#
# fujitsu SoC drivers
#
# end of fujitsu SoC drivers

#
# i.MX SoC drivers
#
CONFIG_SOC_IMX8M=y
CONFIG_SOC_IMX9=y
# end of i.MX SoC drivers

#
# IXP4xx SoC drivers
#
CONFIG_IXP4XX_QMGR=y
CONFIG_IXP4XX_NPE=y
# end of IXP4xx SoC drivers

#
# Enable LiteX SoC Builder specific drivers
#
CONFIG_LITEX=y
CONFIG_LITEX_SOC_CONTROLLER=y
# end of Enable LiteX SoC Builder specific drivers

#
# MediaTek SoC drivers
#
CONFIG_MTK_CMDQ=y
CONFIG_MTK_DEVAPC=y
CONFIG_MTK_INFRACFG=y
CONFIG_MTK_PMIC_WRAP=y
CONFIG_MTK_SCPSYS=y
CONFIG_MTK_MMSYS=y
CONFIG_MTK_SVS=y
# end of MediaTek SoC drivers

CONFIG_POLARFIRE_SOC_SYS_CTRL=y

#
# Qualcomm SoC drivers
#
CONFIG_QCOM_COMMAND_DB=y
CONFIG_QCOM_GENI_SE=y
CONFIG_QCOM_GSBI=y
CONFIG_QCOM_LLCC=y
CONFIG_QCOM_PDR_HELPERS=y
CONFIG_QCOM_QMI_HELPERS=y
CONFIG_QCOM_RPMH=y
CONFIG_QCOM_RPMHPD=y
CONFIG_QCOM_SMEM=y
CONFIG_QCOM_SMD_RPM=y
CONFIG_QCOM_SMEM_STATE=y
CONFIG_QCOM_SMP2P=y
CONFIG_QCOM_SMSM=y
CONFIG_QCOM_SOCINFO=y
CONFIG_QCOM_SPM=y
CONFIG_QCOM_STATS=y
CONFIG_QCOM_WCNSS_CTRL=y
CONFIG_QCOM_APR=y
CONFIG_QCOM_ICC_BWMON=y
# end of Qualcomm SoC drivers

CONFIG_SOC_RENESAS=y
CONFIG_RST_RCAR=y
CONFIG_SYSC_RCAR=y
CONFIG_SYSC_RCAR_GEN4=y
CONFIG_SYSC_R8A77995=y
CONFIG_SYSC_R8A7794=y
CONFIG_SYSC_R8A77990=y
CONFIG_SYSC_R8A7779=y
CONFIG_SYSC_R8A7790=y
CONFIG_SYSC_R8A7795=y
CONFIG_SYSC_R8A7791=y
CONFIG_SYSC_R8A77965=y
CONFIG_SYSC_R8A77960=y
CONFIG_SYSC_R8A77961=y
CONFIG_SYSC_R8A779F0=y
CONFIG_SYSC_R8A7792=y
CONFIG_SYSC_R8A77980=y
CONFIG_SYSC_R8A77970=y
CONFIG_SYSC_R8A779A0=y
CONFIG_SYSC_R8A779G0=y
CONFIG_SYSC_RMOBILE=y
CONFIG_SYSC_R8A77470=y
CONFIG_SYSC_R8A7745=y
CONFIG_SYSC_R8A7742=y
CONFIG_SYSC_R8A7743=y
CONFIG_SYSC_R8A774C0=y
CONFIG_SYSC_R8A774E1=y
CONFIG_SYSC_R8A774A1=y
CONFIG_SYSC_R8A774B1=y
CONFIG_ROCKCHIP_GRF=y
CONFIG_ROCKCHIP_IODOMAIN=y
CONFIG_ROCKCHIP_DTPM=m
CONFIG_SOC_SAMSUNG=y
CONFIG_EXYNOS_ASV_ARM=y
CONFIG_EXYNOS_CHIPID=y
CONFIG_EXYNOS_USI=y
CONFIG_EXYNOS_PM_DOMAINS=y
CONFIG_EXYNOS_REGULATOR_COUPLER=y
CONFIG_SUNXI_SRAM=y
CONFIG_SOC_TEGRA20_VOLTAGE_COUPLER=y
CONFIG_SOC_TEGRA30_VOLTAGE_COUPLER=y
CONFIG_SOC_TI=y
CONFIG_UX500_SOC_ID=y

#
# Xilinx SoC drivers
#
# end of Xilinx SoC drivers
# end of SOC (System On Chip) specific Drivers

CONFIG_PM_DEVFREQ=y

#
# DEVFREQ Governors
#
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
CONFIG_DEVFREQ_GOV_POWERSAVE=y
CONFIG_DEVFREQ_GOV_USERSPACE=y
CONFIG_DEVFREQ_GOV_PASSIVE=y

#
# DEVFREQ Drivers
#
CONFIG_ARM_EXYNOS_BUS_DEVFREQ=y
CONFIG_ARM_IMX_BUS_DEVFREQ=y
CONFIG_ARM_TEGRA_DEVFREQ=y
CONFIG_ARM_MEDIATEK_CCI_DEVFREQ=y
CONFIG_ARM_SUN8I_A33_MBUS_DEVFREQ=y
CONFIG_PM_DEVFREQ_EVENT=y
CONFIG_DEVFREQ_EVENT_EXYNOS_NOCP=y
CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU=y
CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI=y
CONFIG_EXTCON=y

#
# Extcon Device Drivers
#
CONFIG_EXTCON_ADC_JACK=y
CONFIG_EXTCON_FSA9480=y
CONFIG_EXTCON_GPIO=y
CONFIG_EXTCON_MAX14577=y
CONFIG_EXTCON_MAX3355=y
CONFIG_EXTCON_MAX77693=y
CONFIG_EXTCON_MAX77843=y
CONFIG_EXTCON_MAX8997=y
CONFIG_EXTCON_PALMAS=y
CONFIG_EXTCON_PTN5150=y
CONFIG_EXTCON_QCOM_SPMI_MISC=y
CONFIG_EXTCON_RT8973A=y
CONFIG_EXTCON_SM5502=y
CONFIG_EXTCON_USB_GPIO=y
CONFIG_EXTCON_USBC_CROS_EC=y
CONFIG_EXTCON_USBC_TUSB320=y
CONFIG_MEMORY=y
CONFIG_DDR=y
CONFIG_ATMEL_SDRAMC=y
CONFIG_ATMEL_EBI=y
CONFIG_BRCMSTB_DPFE=y
CONFIG_BRCMSTB_MEMC=y
CONFIG_BT1_L2_CTL=y
CONFIG_TI_AEMIF=y
CONFIG_TI_EMIF=y
CONFIG_OMAP_GPMC=y
CONFIG_OMAP_GPMC_DEBUG=y
CONFIG_FPGA_DFL_EMIF=y
CONFIG_MVEBU_DEVBUS=y
CONFIG_FSL_CORENET_CF=y
CONFIG_FSL_IFC=y
CONFIG_JZ4780_NEMC=y
CONFIG_MTK_SMI=y
CONFIG_DA8XX_DDRCTL=y
CONFIG_RENESAS_RPCIF=y
CONFIG_STM32_FMC2_EBI=y
CONFIG_SAMSUNG_MC=y
CONFIG_EXYNOS5422_DMC=y
CONFIG_EXYNOS_SROM=y
CONFIG_TEGRA_MC=y
CONFIG_TEGRA20_EMC=y
CONFIG_TEGRA30_EMC=y
CONFIG_TEGRA124_EMC=y
CONFIG_TEGRA210_EMC_TABLE=y
CONFIG_TEGRA210_EMC=y
CONFIG_IIO=y
CONFIG_IIO_BUFFER=y
CONFIG_IIO_BUFFER_CB=y
CONFIG_IIO_BUFFER_DMA=y
CONFIG_IIO_BUFFER_DMAENGINE=y
CONFIG_IIO_BUFFER_HW_CONSUMER=y
CONFIG_IIO_KFIFO_BUF=y
CONFIG_IIO_TRIGGERED_BUFFER=y
CONFIG_IIO_CONFIGFS=y
CONFIG_IIO_TRIGGER=y
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
CONFIG_IIO_SW_DEVICE=y
CONFIG_IIO_SW_TRIGGER=y
CONFIG_IIO_TRIGGERED_EVENT=y

#
# Accelerometers
#
CONFIG_ADIS16201=y
CONFIG_ADIS16209=y
CONFIG_ADXL313=y
CONFIG_ADXL313_I2C=y
CONFIG_ADXL313_SPI=y
CONFIG_ADXL355=y
CONFIG_ADXL355_I2C=y
CONFIG_ADXL355_SPI=y
CONFIG_ADXL367=y
CONFIG_ADXL367_SPI=y
CONFIG_ADXL367_I2C=y
CONFIG_ADXL372=y
CONFIG_ADXL372_SPI=y
CONFIG_ADXL372_I2C=y
CONFIG_BMA220=y
CONFIG_BMA400=y
CONFIG_BMA400_I2C=y
CONFIG_BMA400_SPI=y
CONFIG_BMC150_ACCEL=y
CONFIG_BMC150_ACCEL_I2C=y
CONFIG_BMC150_ACCEL_SPI=y
CONFIG_BMI088_ACCEL=y
CONFIG_BMI088_ACCEL_SPI=y
CONFIG_DA280=y
CONFIG_DA311=y
CONFIG_DMARD06=y
CONFIG_DMARD09=y
CONFIG_DMARD10=y
CONFIG_FXLS8962AF=y
CONFIG_FXLS8962AF_I2C=y
CONFIG_FXLS8962AF_SPI=y
CONFIG_HID_SENSOR_ACCEL_3D=y
CONFIG_IIO_CROS_EC_ACCEL_LEGACY=y
CONFIG_KXSD9=y
CONFIG_KXSD9_SPI=y
CONFIG_KXSD9_I2C=y
CONFIG_KXCJK1013=y
CONFIG_MC3230=y
CONFIG_MMA7455=y
CONFIG_MMA7455_I2C=y
CONFIG_MMA7455_SPI=y
CONFIG_MMA7660=y
CONFIG_MMA8452=y
CONFIG_MMA9551_CORE=y
CONFIG_MMA9551=y
CONFIG_MMA9553=y
CONFIG_MSA311=y
CONFIG_MXC4005=y
CONFIG_MXC6255=y
CONFIG_SCA3000=y
CONFIG_SCA3300=y
CONFIG_STK8312=y
CONFIG_STK8BA50=y
# end of Accelerometers

#
# Analog to digital converters
#
CONFIG_AD_SIGMA_DELTA=y
CONFIG_AD7091R5=y
CONFIG_AD7124=y
CONFIG_AD7192=y
CONFIG_AD7266=y
CONFIG_AD7280=y
CONFIG_AD7291=y
CONFIG_AD7292=y
CONFIG_AD7298=y
CONFIG_AD7476=y
CONFIG_AD7606=y
CONFIG_AD7606_IFACE_PARALLEL=y
CONFIG_AD7606_IFACE_SPI=y
CONFIG_AD7766=y
CONFIG_AD7768_1=y
CONFIG_AD7780=y
CONFIG_AD7791=y
CONFIG_AD7793=y
CONFIG_AD7887=y
CONFIG_AD7923=y
CONFIG_AD7949=y
CONFIG_AD799X=y
CONFIG_AD9467=y
CONFIG_ADI_AXI_ADC=y
CONFIG_ASPEED_ADC=y
CONFIG_AT91_ADC=y
CONFIG_AT91_SAMA5D2_ADC=y
CONFIG_AXP20X_ADC=y
CONFIG_AXP288_ADC=y
CONFIG_BCM_IPROC_ADC=y
CONFIG_BERLIN2_ADC=y
CONFIG_CC10001_ADC=y
CONFIG_CPCAP_ADC=y
CONFIG_DA9150_GPADC=y
CONFIG_DLN2_ADC=y
CONFIG_ENVELOPE_DETECTOR=y
CONFIG_EXYNOS_ADC=y
CONFIG_MXS_LRADC_ADC=y
CONFIG_FSL_MX25_ADC=y
CONFIG_HI8435=y
CONFIG_HX711=y
CONFIG_INGENIC_ADC=y
CONFIG_IMX7D_ADC=y
CONFIG_IMX8QXP_ADC=y
CONFIG_LP8788_ADC=y
CONFIG_LPC18XX_ADC=y
CONFIG_LPC32XX_ADC=y
CONFIG_LTC2471=y
CONFIG_LTC2485=y
CONFIG_LTC2496=y
CONFIG_LTC2497=y
CONFIG_MAX1027=y
CONFIG_MAX11100=y
CONFIG_MAX1118=y
CONFIG_MAX11205=y
CONFIG_MAX1241=y
CONFIG_MAX1363=y
CONFIG_MAX9611=y
CONFIG_MCP320X=y
CONFIG_MCP3422=y
CONFIG_MCP3911=y
CONFIG_MEDIATEK_MT6360_ADC=y
CONFIG_MEDIATEK_MT6577_AUXADC=y
CONFIG_MEN_Z188_ADC=y
CONFIG_MESON_SARADC=y
CONFIG_MP2629_ADC=y
CONFIG_NAU7802=y
CONFIG_NPCM_ADC=y
CONFIG_PALMAS_GPADC=y
CONFIG_QCOM_VADC_COMMON=y
CONFIG_QCOM_PM8XXX_XOADC=y
CONFIG_QCOM_SPMI_RRADC=y
CONFIG_QCOM_SPMI_IADC=y
CONFIG_QCOM_SPMI_VADC=y
CONFIG_QCOM_SPMI_ADC5=y
CONFIG_RCAR_GYRO_ADC=y
CONFIG_RN5T618_ADC=y
CONFIG_ROCKCHIP_SARADC=y
CONFIG_RICHTEK_RTQ6056=y
CONFIG_RZG2L_ADC=y
CONFIG_SC27XX_ADC=y
CONFIG_SPEAR_ADC=y
CONFIG_SD_ADC_MODULATOR=y
CONFIG_STM32_ADC_CORE=y
CONFIG_STM32_ADC=y
CONFIG_STM32_DFSDM_CORE=y
CONFIG_STM32_DFSDM_ADC=y
CONFIG_STMPE_ADC=y
CONFIG_TI_ADC081C=y
CONFIG_TI_ADC0832=y
CONFIG_TI_ADC084S021=y
CONFIG_TI_ADC12138=y
CONFIG_TI_ADC108S102=y
CONFIG_TI_ADC128S052=y
CONFIG_TI_ADC161S626=y
CONFIG_TI_ADS1015=y
CONFIG_TI_ADS7950=y
CONFIG_TI_ADS8344=y
CONFIG_TI_ADS8688=y
CONFIG_TI_ADS124S08=y
CONFIG_TI_ADS131E08=y
CONFIG_TI_AM335X_ADC=y
CONFIG_TI_TLC4541=y
CONFIG_TI_TSC2046=y
CONFIG_TWL4030_MADC=y
CONFIG_TWL6030_GPADC=y
CONFIG_VF610_ADC=y
CONFIG_VIPERBOARD_ADC=y
CONFIG_XILINX_XADC=y
CONFIG_XILINX_AMS=y
# end of Analog to digital converters

#
# Analog to digital and digital to analog converters
#
CONFIG_AD74413R=y
# end of Analog to digital and digital to analog converters

#
# Analog Front Ends
#
CONFIG_IIO_RESCALE=y
# end of Analog Front Ends

#
# Amplifiers
#
CONFIG_AD8366=y
CONFIG_ADA4250=y
CONFIG_HMC425=y
# end of Amplifiers

#
# Capacitance to digital converters
#
CONFIG_AD7150=y
CONFIG_AD7746=y
# end of Capacitance to digital converters

#
# Chemical Sensors
#
CONFIG_ATLAS_PH_SENSOR=y
CONFIG_ATLAS_EZO_SENSOR=y
CONFIG_BME680=y
CONFIG_BME680_I2C=y
CONFIG_BME680_SPI=y
CONFIG_CCS811=y
CONFIG_IAQCORE=y
CONFIG_PMS7003=y
CONFIG_SCD30_CORE=y
CONFIG_SCD30_I2C=y
CONFIG_SCD30_SERIAL=y
CONFIG_SCD4X=y
CONFIG_SENSIRION_SGP30=y
CONFIG_SENSIRION_SGP40=y
CONFIG_SPS30=y
CONFIG_SPS30_I2C=y
CONFIG_SPS30_SERIAL=y
CONFIG_SENSEAIR_SUNRISE_CO2=y
CONFIG_VZ89X=y
# end of Chemical Sensors

CONFIG_IIO_CROS_EC_SENSORS_CORE=y
CONFIG_IIO_CROS_EC_SENSORS=y
CONFIG_IIO_CROS_EC_SENSORS_LID_ANGLE=y

#
# Hid Sensor IIO Common
#
CONFIG_HID_SENSOR_IIO_COMMON=y
CONFIG_HID_SENSOR_IIO_TRIGGER=y
# end of Hid Sensor IIO Common

CONFIG_IIO_MS_SENSORS_I2C=y

#
# IIO SCMI Sensors
#
CONFIG_IIO_SCMI=y
# end of IIO SCMI Sensors

#
# SSP Sensor Common
#
CONFIG_IIO_SSP_SENSORS_COMMONS=y
CONFIG_IIO_SSP_SENSORHUB=y
# end of SSP Sensor Common

CONFIG_IIO_ST_SENSORS_I2C=y
CONFIG_IIO_ST_SENSORS_SPI=y
CONFIG_IIO_ST_SENSORS_CORE=y

#
# Digital to analog converters
#
CONFIG_AD3552R=y
CONFIG_AD5064=y
CONFIG_AD5360=y
CONFIG_AD5380=y
CONFIG_AD5421=y
CONFIG_AD5446=y
CONFIG_AD5449=y
CONFIG_AD5592R_BASE=y
CONFIG_AD5592R=y
CONFIG_AD5593R=y
CONFIG_AD5504=y
CONFIG_AD5624R_SPI=y
CONFIG_LTC2688=y
CONFIG_AD5686=y
CONFIG_AD5686_SPI=y
CONFIG_AD5696_I2C=y
CONFIG_AD5755=y
CONFIG_AD5758=y
CONFIG_AD5761=y
CONFIG_AD5764=y
CONFIG_AD5766=y
CONFIG_AD5770R=y
CONFIG_AD5791=y
CONFIG_AD7293=y
CONFIG_AD7303=y
CONFIG_AD8801=y
CONFIG_DPOT_DAC=y
CONFIG_DS4424=y
CONFIG_LPC18XX_DAC=y
CONFIG_LTC1660=y
CONFIG_LTC2632=y
CONFIG_M62332=y
CONFIG_MAX517=y
CONFIG_MAX5821=y
CONFIG_MCP4725=y
CONFIG_MCP4922=y
CONFIG_STM32_DAC=y
CONFIG_STM32_DAC_CORE=y
CONFIG_TI_DAC082S085=y
CONFIG_TI_DAC5571=y
CONFIG_TI_DAC7311=y
CONFIG_TI_DAC7612=y
CONFIG_VF610_DAC=y
# end of Digital to analog converters

#
# IIO dummy driver
#
CONFIG_IIO_DUMMY_EVGEN=y
CONFIG_IIO_SIMPLE_DUMMY=y
CONFIG_IIO_SIMPLE_DUMMY_EVENTS=y
CONFIG_IIO_SIMPLE_DUMMY_BUFFER=y
# end of IIO dummy driver

#
# Filters
#
# end of Filters

#
# Frequency Synthesizers DDS/PLL
#

#
# Clock Generator/Distribution
#
CONFIG_AD9523=y
# end of Clock Generator/Distribution

#
# Phase-Locked Loop (PLL) frequency synthesizers
#
CONFIG_ADF4350=y
CONFIG_ADF4371=y
CONFIG_ADMV1013=y
CONFIG_ADMV4420=y
CONFIG_ADRF6780=y
# end of Phase-Locked Loop (PLL) frequency synthesizers
# end of Frequency Synthesizers DDS/PLL

#
# Digital gyroscope sensors
#
CONFIG_ADIS16080=y
CONFIG_ADIS16130=y
CONFIG_ADIS16136=y
CONFIG_ADIS16260=y
CONFIG_ADXRS290=y
CONFIG_ADXRS450=y
CONFIG_BMG160=y
CONFIG_BMG160_I2C=y
CONFIG_BMG160_SPI=y
CONFIG_FXAS21002C=y
CONFIG_FXAS21002C_I2C=y
CONFIG_FXAS21002C_SPI=y
CONFIG_HID_SENSOR_GYRO_3D=y
CONFIG_MPU3050=y
CONFIG_MPU3050_I2C=y
CONFIG_IIO_ST_GYRO_3AXIS=y
CONFIG_IIO_ST_GYRO_I2C_3AXIS=y
CONFIG_IIO_ST_GYRO_SPI_3AXIS=y
CONFIG_ITG3200=y
# end of Digital gyroscope sensors

#
# Health Sensors
#

#
# Heart Rate Monitors
#
CONFIG_AFE4403=y
CONFIG_AFE4404=y
CONFIG_MAX30100=y
CONFIG_MAX30102=y
# end of Heart Rate Monitors
# end of Health Sensors

#
# Humidity sensors
#
CONFIG_AM2315=y
CONFIG_DHT11=y
CONFIG_HDC100X=y
CONFIG_HDC2010=y
CONFIG_HID_SENSOR_HUMIDITY=y
CONFIG_HTS221=y
CONFIG_HTS221_I2C=y
CONFIG_HTS221_SPI=y
CONFIG_HTU21=y
CONFIG_SI7005=y
CONFIG_SI7020=y
# end of Humidity sensors

#
# Inertial measurement units
#
CONFIG_ADIS16400=y
CONFIG_ADIS16460=y
CONFIG_ADIS16475=y
CONFIG_ADIS16480=y
CONFIG_BMI160=y
CONFIG_BMI160_I2C=y
CONFIG_BMI160_SPI=y
CONFIG_BOSCH_BNO055=y
CONFIG_BOSCH_BNO055_SERIAL=y
CONFIG_BOSCH_BNO055_I2C=y
CONFIG_FXOS8700=y
CONFIG_FXOS8700_I2C=y
CONFIG_FXOS8700_SPI=y
CONFIG_KMX61=y
CONFIG_INV_ICM42600=y
CONFIG_INV_ICM42600_I2C=y
CONFIG_INV_ICM42600_SPI=y
CONFIG_INV_MPU6050_IIO=y
CONFIG_INV_MPU6050_I2C=y
CONFIG_INV_MPU6050_SPI=y
CONFIG_IIO_ST_LSM6DSX=y
CONFIG_IIO_ST_LSM6DSX_I2C=y
CONFIG_IIO_ST_LSM6DSX_SPI=y
CONFIG_IIO_ST_LSM6DSX_I3C=y
# end of Inertial measurement units

CONFIG_IIO_ADIS_LIB=y
CONFIG_IIO_ADIS_LIB_BUFFER=y

#
# Light sensors
#
CONFIG_ADJD_S311=y
CONFIG_ADUX1020=y
CONFIG_AL3010=y
CONFIG_AL3320A=y
CONFIG_APDS9300=y
CONFIG_APDS9960=y
CONFIG_AS73211=y
CONFIG_BH1750=y
CONFIG_BH1780=y
CONFIG_CM32181=y
CONFIG_CM3232=y
CONFIG_CM3323=y
CONFIG_CM3605=y
CONFIG_CM36651=y
CONFIG_IIO_CROS_EC_LIGHT_PROX=y
CONFIG_GP2AP002=y
CONFIG_GP2AP020A00F=y
CONFIG_IQS621_ALS=y
CONFIG_SENSORS_ISL29018=y
CONFIG_SENSORS_ISL29028=y
CONFIG_ISL29125=y
CONFIG_HID_SENSOR_ALS=y
CONFIG_HID_SENSOR_PROX=y
CONFIG_JSA1212=y
CONFIG_RPR0521=y
CONFIG_SENSORS_LM3533=y
CONFIG_LTR501=y
CONFIG_LTRF216A=y
CONFIG_LV0104CS=y
CONFIG_MAX44000=y
CONFIG_MAX44009=y
CONFIG_NOA1305=y
CONFIG_OPT3001=y
CONFIG_PA12203001=y
CONFIG_SI1133=y
CONFIG_SI1145=y
CONFIG_STK3310=y
CONFIG_ST_UVIS25=y
CONFIG_ST_UVIS25_I2C=y
CONFIG_ST_UVIS25_SPI=y
CONFIG_TCS3414=y
CONFIG_TCS3472=y
CONFIG_SENSORS_TSL2563=y
CONFIG_TSL2583=y
CONFIG_TSL2591=y
CONFIG_TSL2772=y
CONFIG_TSL4531=y
CONFIG_US5182D=y
CONFIG_VCNL4000=y
CONFIG_VCNL4035=y
CONFIG_VEML6030=y
CONFIG_VEML6070=y
CONFIG_VL6180=y
CONFIG_ZOPT2201=y
# end of Light sensors

#
# Magnetometer sensors
#
CONFIG_AK8974=y
CONFIG_AK8975=y
CONFIG_AK09911=y
CONFIG_BMC150_MAGN=y
CONFIG_BMC150_MAGN_I2C=y
CONFIG_BMC150_MAGN_SPI=y
CONFIG_MAG3110=y
CONFIG_HID_SENSOR_MAGNETOMETER_3D=y
CONFIG_MMC35240=y
CONFIG_IIO_ST_MAGN_3AXIS=y
CONFIG_IIO_ST_MAGN_I2C_3AXIS=y
CONFIG_IIO_ST_MAGN_SPI_3AXIS=y
CONFIG_SENSORS_HMC5843=y
CONFIG_SENSORS_HMC5843_I2C=y
CONFIG_SENSORS_HMC5843_SPI=y
CONFIG_SENSORS_RM3100=y
CONFIG_SENSORS_RM3100_I2C=y
CONFIG_SENSORS_RM3100_SPI=y
CONFIG_YAMAHA_YAS530=y
# end of Magnetometer sensors

#
# Multiplexers
#
CONFIG_IIO_MUX=y
# end of Multiplexers

#
# Inclinometer sensors
#
CONFIG_HID_SENSOR_INCLINOMETER_3D=y
CONFIG_HID_SENSOR_DEVICE_ROTATION=y
# end of Inclinometer sensors

CONFIG_IIO_RESCALE_KUNIT_TEST=y
CONFIG_IIO_FORMAT_KUNIT_TEST=y

#
# Triggers - standalone
#
CONFIG_IIO_HRTIMER_TRIGGER=y
CONFIG_IIO_INTERRUPT_TRIGGER=y
CONFIG_IIO_STM32_LPTIMER_TRIGGER=y
CONFIG_IIO_STM32_TIMER_TRIGGER=y
CONFIG_IIO_TIGHTLOOP_TRIGGER=y
CONFIG_IIO_SYSFS_TRIGGER=y
# end of Triggers - standalone

#
# Linear and angular position sensors
#
CONFIG_IQS624_POS=y
CONFIG_HID_SENSOR_CUSTOM_INTEL_HINGE=y
# end of Linear and angular position sensors

#
# Digital potentiometers
#
CONFIG_AD5110=y
CONFIG_AD5272=y
CONFIG_DS1803=y
CONFIG_MAX5432=y
CONFIG_MAX5481=y
CONFIG_MAX5487=y
CONFIG_MCP4018=y
CONFIG_MCP4131=y
CONFIG_MCP4531=y
CONFIG_MCP41010=y
CONFIG_TPL0102=y
# end of Digital potentiometers

#
# Digital potentiostats
#
CONFIG_LMP91000=y
# end of Digital potentiostats

#
# Pressure sensors
#
CONFIG_ABP060MG=y
CONFIG_BMP280=y
CONFIG_BMP280_I2C=y
CONFIG_BMP280_SPI=y
CONFIG_IIO_CROS_EC_BARO=y
CONFIG_DLHL60D=y
CONFIG_DPS310=y
CONFIG_HID_SENSOR_PRESS=y
CONFIG_HP03=y
CONFIG_ICP10100=y
CONFIG_MPL115=y
CONFIG_MPL115_I2C=y
CONFIG_MPL115_SPI=y
CONFIG_MPL3115=y
CONFIG_MS5611=y
CONFIG_MS5611_I2C=y
CONFIG_MS5611_SPI=y
CONFIG_MS5637=y
CONFIG_IIO_ST_PRESS=y
CONFIG_IIO_ST_PRESS_I2C=y
CONFIG_IIO_ST_PRESS_SPI=y
CONFIG_T5403=y
CONFIG_HP206C=y
CONFIG_ZPA2326=y
CONFIG_ZPA2326_I2C=y
CONFIG_ZPA2326_SPI=y
# end of Pressure sensors

#
# Lightning sensors
#
CONFIG_AS3935=y
# end of Lightning sensors

#
# Proximity and distance sensors
#
CONFIG_CROS_EC_MKBP_PROXIMITY=y
CONFIG_ISL29501=y
CONFIG_LIDAR_LITE_V2=y
CONFIG_MB1232=y
CONFIG_PING=y
CONFIG_RFD77402=y
CONFIG_SRF04=y
CONFIG_SX_COMMON=y
CONFIG_SX9310=y
CONFIG_SX9324=y
CONFIG_SX9360=y
CONFIG_SX9500=y
CONFIG_SRF08=y
CONFIG_VCNL3020=y
CONFIG_VL53L0X_I2C=y
# end of Proximity and distance sensors

#
# Resolver to digital converters
#
CONFIG_AD2S90=y
CONFIG_AD2S1200=y
# end of Resolver to digital converters

#
# Temperature sensors
#
CONFIG_IQS620AT_TEMP=y
CONFIG_LTC2983=y
CONFIG_MAXIM_THERMOCOUPLE=y
CONFIG_HID_SENSOR_TEMP=y
CONFIG_MLX90614=y
CONFIG_MLX90632=y
CONFIG_TMP006=y
CONFIG_TMP007=y
CONFIG_TMP117=y
CONFIG_TSYS01=y
CONFIG_TSYS02D=y
CONFIG_MAX31856=y
CONFIG_MAX31865=y
# end of Temperature sensors

CONFIG_PWM=y
CONFIG_PWM_SYSFS=y
CONFIG_PWM_DEBUG=y
CONFIG_PWM_ATMEL=y
CONFIG_PWM_ATMEL_HLCDC_PWM=y
CONFIG_PWM_ATMEL_TCB=y
CONFIG_PWM_BCM_IPROC=y
CONFIG_PWM_BCM_KONA=y
CONFIG_PWM_BCM2835=y
CONFIG_PWM_BERLIN=y
CONFIG_PWM_BRCMSTB=y
CONFIG_PWM_CLK=y
CONFIG_PWM_CLPS711X=y
CONFIG_PWM_CROS_EC=y
CONFIG_PWM_EP93XX=y
CONFIG_PWM_FSL_FTM=y
CONFIG_PWM_HIBVT=y
CONFIG_PWM_IMG=y
CONFIG_PWM_IMX1=y
CONFIG_PWM_IMX27=y
CONFIG_PWM_IMX_TPM=y
CONFIG_PWM_INTEL_LGM=y
CONFIG_PWM_IQS620A=y
CONFIG_PWM_JZ4740=y
CONFIG_PWM_KEEMBAY=y
CONFIG_PWM_LP3943=y
CONFIG_PWM_LPC18XX_SCT=y
CONFIG_PWM_LPC32XX=y
CONFIG_PWM_LPSS=y
CONFIG_PWM_LPSS_PLATFORM=y
CONFIG_PWM_MESON=y
CONFIG_PWM_MTK_DISP=y
CONFIG_PWM_MEDIATEK=y
CONFIG_PWM_MXS=y
CONFIG_PWM_NTXEC=y
CONFIG_PWM_OMAP_DMTIMER=y
CONFIG_PWM_PCA9685=y
CONFIG_PWM_PXA=y
CONFIG_PWM_RASPBERRYPI_POE=y
CONFIG_PWM_RCAR=y
CONFIG_PWM_RENESAS_TPU=y
CONFIG_PWM_ROCKCHIP=y
CONFIG_PWM_SAMSUNG=y
CONFIG_PWM_SIFIVE=y
CONFIG_PWM_SL28CPLD=y
CONFIG_PWM_SPEAR=y
CONFIG_PWM_SPRD=y
CONFIG_PWM_STI=y
CONFIG_PWM_STM32=y
CONFIG_PWM_STM32_LP=y
CONFIG_PWM_STMPE=y
CONFIG_PWM_SUN4I=y
CONFIG_PWM_SUNPLUS=y
CONFIG_PWM_TEGRA=y
CONFIG_PWM_TIECAP=y
CONFIG_PWM_TIEHRPWM=y
CONFIG_PWM_TWL=y
CONFIG_PWM_TWL_LED=y
CONFIG_PWM_VISCONTI=y
CONFIG_PWM_VT8500=y
CONFIG_PWM_XILINX=y

#
# IRQ chip support
#
CONFIG_IRQCHIP=y
CONFIG_AL_FIC=y
CONFIG_MADERA_IRQ=y
CONFIG_JCORE_AIC=y
CONFIG_RENESAS_INTC_IRQPIN=y
CONFIG_RENESAS_IRQC=y
CONFIG_RENESAS_RZA1_IRQC=y
CONFIG_RENESAS_RZG2L_IRQC=y
CONFIG_SL28CPLD_INTC=y
CONFIG_TS4800_IRQ=y
CONFIG_XILINX_INTC=y
CONFIG_INGENIC_TCU_IRQ=y
CONFIG_IRQ_UNIPHIER_AIDET=y
CONFIG_MESON_IRQ_GPIO=y
CONFIG_IMX_IRQSTEER=y
CONFIG_IMX_INTMUX=y
CONFIG_IMX_MU_MSI=y
CONFIG_EXYNOS_IRQ_COMBINER=y
CONFIG_MST_IRQ=y
CONFIG_MCHP_EIC=y
CONFIG_SUNPLUS_SP7021_INTC=y
# end of IRQ chip support

CONFIG_IPACK_BUS=y
CONFIG_SERIAL_IPOCTAL=y
CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_A10SR=y
CONFIG_RESET_ATH79=y
CONFIG_RESET_AXS10X=y
CONFIG_RESET_BCM6345=y
CONFIG_RESET_BERLIN=y
CONFIG_RESET_BRCMSTB=y
CONFIG_RESET_BRCMSTB_RESCAL=y
CONFIG_RESET_HSDK=y
CONFIG_RESET_IMX7=y
CONFIG_RESET_INTEL_GW=y
CONFIG_RESET_K210=y
CONFIG_RESET_LANTIQ=y
CONFIG_RESET_LPC18XX=y
CONFIG_RESET_MCHP_SPARX5=y
CONFIG_RESET_MESON=y
CONFIG_RESET_MESON_AUDIO_ARB=y
CONFIG_RESET_NPCM=y
CONFIG_RESET_PISTACHIO=y
CONFIG_RESET_POLARFIRE_SOC=y
CONFIG_RESET_QCOM_AOSS=y
CONFIG_RESET_QCOM_PDC=y
CONFIG_RESET_RASPBERRYPI=y
CONFIG_RESET_RZG2L_USBPHY_CTRL=y
CONFIG_RESET_SCMI=y
CONFIG_RESET_SIMPLE=y
CONFIG_RESET_SOCFPGA=y
CONFIG_RESET_STARFIVE_JH7100=y
CONFIG_RESET_SUNPLUS=y
CONFIG_RESET_SUNXI=y
CONFIG_RESET_TI_SCI=y
CONFIG_RESET_TI_SYSCON=y
CONFIG_RESET_TI_TPS380X=y
CONFIG_RESET_TN48M_CPLD=y
CONFIG_RESET_UNIPHIER=y
CONFIG_RESET_UNIPHIER_GLUE=y
CONFIG_RESET_ZYNQ=y
CONFIG_COMMON_RESET_HI3660=y
CONFIG_COMMON_RESET_HI6220=y

#
# PHY Subsystem
#
CONFIG_GENERIC_PHY=y
CONFIG_GENERIC_PHY_MIPI_DPHY=y
CONFIG_PHY_LPC18XX_USB_OTG=y
CONFIG_PHY_PISTACHIO_USB=y
CONFIG_PHY_XGENE=y
CONFIG_USB_LGM_PHY=y
CONFIG_PHY_CAN_TRANSCEIVER=y
CONFIG_PHY_SUN4I_USB=y
CONFIG_PHY_SUN6I_MIPI_DPHY=y
CONFIG_PHY_SUN9I_USB=y
CONFIG_PHY_SUN50I_USB3=y
CONFIG_PHY_MESON8_HDMI_TX=y
CONFIG_PHY_MESON8B_USB2=y
CONFIG_PHY_MESON_GXL_USB2=y
CONFIG_PHY_MESON_G12A_MIPI_DPHY_ANALOG=y
CONFIG_PHY_MESON_G12A_USB2=y
CONFIG_PHY_MESON_G12A_USB3_PCIE=y
CONFIG_PHY_MESON_AXG_PCIE=y
CONFIG_PHY_MESON_AXG_MIPI_PCIE_ANALOG=y
CONFIG_PHY_MESON_AXG_MIPI_DPHY=y

#
# PHY drivers for Broadcom platforms
#
CONFIG_PHY_BCM63XX_USBH=y
CONFIG_PHY_CYGNUS_PCIE=y
CONFIG_PHY_BCM_SR_USB=y
CONFIG_BCM_KONA_USB2_PHY=y
CONFIG_PHY_BCM_NS_USB2=y
CONFIG_PHY_BCM_NS_USB3=y
CONFIG_PHY_NS2_PCIE=y
CONFIG_PHY_NS2_USB_DRD=y
CONFIG_PHY_BRCM_SATA=y
CONFIG_PHY_BRCM_USB=y
CONFIG_PHY_BCM_SR_PCIE=y
# end of PHY drivers for Broadcom platforms

CONFIG_PHY_CADENCE_TORRENT=y
CONFIG_PHY_CADENCE_DPHY=y
CONFIG_PHY_CADENCE_DPHY_RX=y
CONFIG_PHY_CADENCE_SIERRA=y
CONFIG_PHY_CADENCE_SALVO=y
CONFIG_PHY_FSL_IMX8MQ_USB=y
CONFIG_PHY_MIXEL_LVDS_PHY=y
CONFIG_PHY_MIXEL_MIPI_DPHY=y
CONFIG_PHY_FSL_IMX8M_PCIE=y
CONFIG_PHY_FSL_LYNX_28G=y
CONFIG_PHY_HI6220_USB=y
CONFIG_PHY_HI3660_USB=y
CONFIG_PHY_HI3670_USB=y
CONFIG_PHY_HI3670_PCIE=y
CONFIG_PHY_HISTB_COMBPHY=y
CONFIG_PHY_HISI_INNO_USB2=y
CONFIG_PHY_INGENIC_USB=y
CONFIG_PHY_LANTIQ_VRX200_PCIE=y
CONFIG_PHY_LANTIQ_RCU_USB2=y
CONFIG_ARMADA375_USBCLUSTER_PHY=y
CONFIG_PHY_BERLIN_SATA=y
CONFIG_PHY_BERLIN_USB=y
CONFIG_PHY_MVEBU_A3700_UTMI=y
CONFIG_PHY_MVEBU_A38X_COMPHY=y
CONFIG_PHY_MVEBU_CP110_UTMI=y
CONFIG_PHY_PXA_28NM_HSIC=y
CONFIG_PHY_PXA_28NM_USB2=y
CONFIG_PHY_PXA_USB=y
CONFIG_PHY_MMP3_USB=y
CONFIG_PHY_MMP3_HSIC=y
CONFIG_PHY_MTK_PCIE=y
CONFIG_PHY_MTK_TPHY=y
CONFIG_PHY_MTK_UFS=y
CONFIG_PHY_MTK_XSPHY=y
CONFIG_PHY_MTK_HDMI=y
CONFIG_PHY_MTK_MIPI_DSI=y
CONFIG_PHY_MTK_DP=y
CONFIG_PHY_SPARX5_SERDES=y
CONFIG_PHY_LAN966X_SERDES=y
CONFIG_PHY_CPCAP_USB=y
CONFIG_PHY_MAPPHONE_MDM6600=y
CONFIG_PHY_OCELOT_SERDES=y
CONFIG_PHY_ATH79_USB=y
CONFIG_PHY_QCOM_EDP=y
CONFIG_PHY_QCOM_IPQ4019_USB=y
CONFIG_PHY_QCOM_PCIE2=y
CONFIG_PHY_QCOM_QMP=y
CONFIG_PHY_QCOM_QUSB2=y
CONFIG_PHY_QCOM_USB_HS=y
CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2=y
CONFIG_PHY_QCOM_USB_HSIC=y
CONFIG_PHY_QCOM_USB_HS_28NM=y
CONFIG_PHY_QCOM_USB_SS=y
CONFIG_PHY_QCOM_IPQ806X_USB=y
CONFIG_PHY_MT7621_PCI=y
CONFIG_PHY_RALINK_USB=y
CONFIG_PHY_RCAR_GEN3_USB3=y
CONFIG_PHY_ROCKCHIP_DPHY_RX0=y
CONFIG_PHY_ROCKCHIP_INNO_HDMI=y
CONFIG_PHY_ROCKCHIP_INNO_USB2=y
CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY=y
CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=y
CONFIG_PHY_ROCKCHIP_PCIE=y
CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=y
CONFIG_PHY_ROCKCHIP_TYPEC=y
CONFIG_PHY_EXYNOS_DP_VIDEO=y
CONFIG_PHY_EXYNOS_MIPI_VIDEO=y
CONFIG_PHY_EXYNOS_PCIE=y
CONFIG_PHY_SAMSUNG_UFS=y
CONFIG_PHY_SAMSUNG_USB2=y
CONFIG_PHY_S5PV210_USB2=y
CONFIG_PHY_EXYNOS5_USBDRD=y
CONFIG_PHY_UNIPHIER_USB2=y
CONFIG_PHY_UNIPHIER_USB3=y
CONFIG_PHY_UNIPHIER_PCIE=y
CONFIG_PHY_UNIPHIER_AHCI=y
CONFIG_PHY_ST_SPEAR1310_MIPHY=y
CONFIG_PHY_ST_SPEAR1340_MIPHY=y
CONFIG_PHY_STIH407_USB=y
CONFIG_PHY_STM32_USBPHYC=y
CONFIG_PHY_SUNPLUS_USB=y
CONFIG_PHY_TEGRA194_P2U=y
CONFIG_PHY_DA8XX_USB=y
CONFIG_PHY_DM816X_USB=y
CONFIG_PHY_AM654_SERDES=y
CONFIG_PHY_J721E_WIZ=y
CONFIG_OMAP_CONTROL_PHY=y
CONFIG_TI_PIPE3=y
CONFIG_PHY_TUSB1210=y
CONFIG_PHY_INTEL_KEEMBAY_EMMC=y
CONFIG_PHY_INTEL_KEEMBAY_USB=y
CONFIG_PHY_INTEL_LGM_COMBO=y
CONFIG_PHY_INTEL_LGM_EMMC=y
CONFIG_PHY_INTEL_THUNDERBAY_EMMC=y
CONFIG_PHY_XILINX_ZYNQMP=y
# end of PHY Subsystem

CONFIG_POWERCAP=y
CONFIG_DTPM=y
CONFIG_MCB=y
CONFIG_MCB_LPC=y
CONFIG_RAS=y

#
# Android
#
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
CONFIG_ANDROID_BINDER_IPC_SELFTEST=y
# end of Android

CONFIG_DAX=y
CONFIG_NVMEM=y
CONFIG_NVMEM_SYSFS=y
CONFIG_NVMEM_APPLE_EFUSES=y
CONFIG_NVMEM_BCM_OCOTP=y
CONFIG_NVMEM_BRCM_NVRAM=y
CONFIG_NVMEM_IMX_IIM=y
CONFIG_NVMEM_IMX_OCOTP=y
CONFIG_NVMEM_JZ4780_EFUSE=y
CONFIG_NVMEM_LAN9662_OTPC=y
CONFIG_NVMEM_LAYERSCAPE_SFP=y
CONFIG_NVMEM_LPC18XX_EEPROM=y
CONFIG_NVMEM_LPC18XX_OTP=y
CONFIG_NVMEM_MESON_MX_EFUSE=y
CONFIG_NVMEM_MICROCHIP_OTPC=y
CONFIG_NVMEM_MTK_EFUSE=y
CONFIG_NVMEM_MXS_OCOTP=y
CONFIG_NVMEM_NINTENDO_OTP=y
CONFIG_NVMEM_QCOM_QFPROM=y
CONFIG_NVMEM_RAVE_SP_EEPROM=y
CONFIG_NVMEM_RMEM=y
CONFIG_NVMEM_ROCKCHIP_EFUSE=y
CONFIG_NVMEM_ROCKCHIP_OTP=y
CONFIG_NVMEM_SC27XX_EFUSE=y
CONFIG_NVMEM_SNVS_LPGPR=y
CONFIG_NVMEM_SPMI_SDAM=y
CONFIG_NVMEM_SPRD_EFUSE=y
CONFIG_NVMEM_STM32_ROMEM=y
CONFIG_NVMEM_SUNPLUS_OCOTP=y
CONFIG_NVMEM_U_BOOT_ENV=y
CONFIG_NVMEM_UNIPHIER_EFUSE=y
CONFIG_NVMEM_VF610_OCOTP=y

#
# HW tracing support
#
CONFIG_STM=y
CONFIG_STM_PROTO_BASIC=y
CONFIG_STM_PROTO_SYS_T=y
CONFIG_STM_DUMMY=y
CONFIG_STM_SOURCE_CONSOLE=y
CONFIG_STM_SOURCE_HEARTBEAT=y
CONFIG_INTEL_TH=y
CONFIG_INTEL_TH_GTH=y
CONFIG_INTEL_TH_STH=y
CONFIG_INTEL_TH_MSU=y
CONFIG_INTEL_TH_PTI=y
CONFIG_INTEL_TH_DEBUG=y
# end of HW tracing support

CONFIG_FPGA=y
CONFIG_FPGA_MGR_SOCFPGA=y
CONFIG_FPGA_MGR_SOCFPGA_A10=y
CONFIG_ALTERA_PR_IP_CORE=y
CONFIG_ALTERA_PR_IP_CORE_PLAT=y
CONFIG_FPGA_MGR_ALTERA_PS_SPI=y
CONFIG_FPGA_MGR_ZYNQ_FPGA=y
CONFIG_FPGA_MGR_XILINX_SPI=y
CONFIG_FPGA_MGR_ICE40_SPI=y
CONFIG_FPGA_MGR_MACHXO2_SPI=y
CONFIG_FPGA_BRIDGE=y
CONFIG_ALTERA_FREEZE_BRIDGE=y
CONFIG_XILINX_PR_DECOUPLER=y
CONFIG_FPGA_REGION=y
CONFIG_OF_FPGA_REGION=y
CONFIG_FPGA_DFL=y
CONFIG_FPGA_DFL_AFU=y
CONFIG_FPGA_DFL_NIOS_INTEL_PAC_N3000=y
CONFIG_FPGA_MGR_ZYNQMP_FPGA=y
CONFIG_FPGA_MGR_VERSAL_FPGA=y
CONFIG_FPGA_M10_BMC_SEC_UPDATE=y
CONFIG_FPGA_MGR_MICROCHIP_SPI=y
CONFIG_FSI=y
CONFIG_FSI_NEW_DEV_NODE=y
CONFIG_FSI_MASTER_GPIO=y
CONFIG_FSI_MASTER_HUB=y
CONFIG_FSI_MASTER_AST_CF=y
CONFIG_FSI_MASTER_ASPEED=y
CONFIG_FSI_SCOM=y
CONFIG_FSI_SBEFIFO=y
CONFIG_FSI_OCC=y
CONFIG_TEE=y
CONFIG_MULTIPLEXER=y

#
# Multiplexer drivers
#
CONFIG_MUX_ADG792A=y
CONFIG_MUX_ADGS1408=y
CONFIG_MUX_GPIO=y
CONFIG_MUX_MMIO=y
# end of Multiplexer drivers

CONFIG_PM_OPP=y
CONFIG_SIOX=y
CONFIG_SIOX_BUS_GPIO=y
CONFIG_SLIMBUS=y
CONFIG_SLIM_QCOM_CTRL=y
CONFIG_SLIM_QCOM_NGD_CTRL=y
CONFIG_INTERCONNECT=y
CONFIG_INTERCONNECT_IMX=y
CONFIG_INTERCONNECT_IMX8MM=y
CONFIG_INTERCONNECT_IMX8MN=y
CONFIG_INTERCONNECT_IMX8MQ=y
CONFIG_INTERCONNECT_IMX8MP=y
CONFIG_INTERCONNECT_QCOM_OSM_L3=y
CONFIG_INTERCONNECT_SAMSUNG=y
CONFIG_INTERCONNECT_EXYNOS=y
CONFIG_COUNTER=y
CONFIG_104_QUAD_8=y
CONFIG_INTERRUPT_CNT=y
CONFIG_STM32_TIMER_CNT=y
CONFIG_STM32_LPTIMER_CNT=y
CONFIG_TI_EQEP=y
CONFIG_FTM_QUADDEC=y
CONFIG_MICROCHIP_TCB_CAPTURE=y
CONFIG_TI_ECAP_CAPTURE=y
CONFIG_MOST=y
CONFIG_MOST_USB_HDM=y
CONFIG_MOST_CDEV=y
CONFIG_MOST_SND=y
CONFIG_PECI=y
CONFIG_PECI_CPU=y
CONFIG_PECI_ASPEED=y
CONFIG_HTE=y
# end of Device Drivers

#
# File systems
#
CONFIG_VALIDATE_FS_PARSER=y
CONFIG_FS_IOMAP=y
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
CONFIG_EXT4_DEBUG=y
CONFIG_EXT4_KUNIT_TESTS=y
CONFIG_JBD2=y
CONFIG_JBD2_DEBUG=y
CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=y
CONFIG_REISERFS_CHECK=y
CONFIG_REISERFS_PROC_INFO=y
CONFIG_REISERFS_FS_XATTR=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_SECURITY=y
CONFIG_JFS_FS=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_JFS_SECURITY=y
CONFIG_JFS_DEBUG=y
CONFIG_JFS_STATISTICS=y
CONFIG_XFS_FS=y
CONFIG_XFS_SUPPORT_V4=y
CONFIG_XFS_QUOTA=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_RT=y
CONFIG_XFS_ONLINE_SCRUB=y
CONFIG_XFS_ONLINE_REPAIR=y
CONFIG_XFS_DEBUG=y
CONFIG_XFS_ASSERT_FATAL=y
CONFIG_GFS2_FS=y
CONFIG_GFS2_FS_LOCKING_DLM=y
CONFIG_OCFS2_FS=y
CONFIG_OCFS2_FS_O2CB=y
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=y
CONFIG_OCFS2_FS_STATS=y
CONFIG_OCFS2_DEBUG_MASKLOG=y
CONFIG_OCFS2_DEBUG_FS=y
CONFIG_BTRFS_FS=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_BTRFS_FS_CHECK_INTEGRITY=y
CONFIG_BTRFS_FS_RUN_SANITY_TESTS=y
CONFIG_BTRFS_DEBUG=y
CONFIG_BTRFS_ASSERT=y
CONFIG_BTRFS_FS_REF_VERIFY=y
CONFIG_NILFS2_FS=y
CONFIG_F2FS_FS=y
CONFIG_F2FS_STAT_FS=y
CONFIG_F2FS_FS_XATTR=y
CONFIG_F2FS_FS_POSIX_ACL=y
CONFIG_F2FS_FS_SECURITY=y
CONFIG_F2FS_CHECK_FS=y
CONFIG_F2FS_FAULT_INJECTION=y
CONFIG_F2FS_FS_COMPRESSION=y
CONFIG_F2FS_FS_LZO=y
CONFIG_F2FS_FS_LZORLE=y
CONFIG_F2FS_FS_LZ4=y
CONFIG_F2FS_FS_LZ4HC=y
CONFIG_F2FS_FS_ZSTD=y
CONFIG_F2FS_IOSTAT=y
CONFIG_F2FS_UNFAIR_RWSEM=y
CONFIG_ZONEFS_FS=y
CONFIG_FS_POSIX_ACL=y
CONFIG_EXPORTFS=y
CONFIG_EXPORTFS_BLOCK_OPS=y
CONFIG_FILE_LOCKING=y
CONFIG_FS_ENCRYPTION=y
CONFIG_FS_ENCRYPTION_ALGS=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_VERITY=y
CONFIG_FS_VERITY_DEBUG=y
CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY_USER=y
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_PRINT_QUOTA_WARNING=y
CONFIG_QUOTA_DEBUG=y
CONFIG_QUOTA_TREE=y
CONFIG_QFMT_V1=y
CONFIG_QFMT_V2=y
CONFIG_QUOTACTL=y
CONFIG_AUTOFS4_FS=y
CONFIG_AUTOFS_FS=y
CONFIG_FUSE_FS=y
CONFIG_CUSE=y
CONFIG_VIRTIO_FS=y
CONFIG_OVERLAY_FS=y
CONFIG_OVERLAY_FS_REDIRECT_DIR=y
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
CONFIG_OVERLAY_FS_INDEX=y
CONFIG_OVERLAY_FS_METACOPY=y

#
# Caches
#
CONFIG_NETFS_SUPPORT=y
CONFIG_NETFS_STATS=y
CONFIG_FSCACHE=y
CONFIG_FSCACHE_STATS=y
CONFIG_FSCACHE_DEBUG=y
CONFIG_CACHEFILES=y
CONFIG_CACHEFILES_DEBUG=y
CONFIG_CACHEFILES_ERROR_INJECTION=y
CONFIG_CACHEFILES_ONDEMAND=y
# end of Caches

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_UDF_FS=y
# end of CD-ROM/DVD Filesystems

#
# DOS/FAT/EXFAT/NT Filesystems
#
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_FAT_DEFAULT_UTF8=y
CONFIG_FAT_KUNIT_TEST=y
CONFIG_EXFAT_FS=y
CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
CONFIG_NTFS_FS=y
CONFIG_NTFS_DEBUG=y
CONFIG_NTFS_RW=y
CONFIG_NTFS3_FS=y
CONFIG_NTFS3_LZX_XPRESS=y
CONFIG_NTFS3_FS_POSIX_ACL=y
# end of DOS/FAT/EXFAT/NT Filesystems

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_PROC_CHILDREN=y
CONFIG_KERNFS=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_MEMFD_CREATE=y
CONFIG_CONFIGFS_FS=y
# end of Pseudo filesystems

CONFIG_MISC_FILESYSTEMS=y
CONFIG_ORANGEFS_FS=y
CONFIG_ADFS_FS=y
CONFIG_ADFS_FS_RW=y
CONFIG_AFFS_FS=y
CONFIG_ECRYPT_FS=y
CONFIG_ECRYPT_FS_MESSAGING=y
CONFIG_HFS_FS=y
CONFIG_HFSPLUS_FS=y
CONFIG_BEFS_FS=y
CONFIG_BEFS_DEBUG=y
CONFIG_BFS_FS=y
CONFIG_EFS_FS=y
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_FS_WBUF_VERIFY=y
CONFIG_JFFS2_SUMMARY=y
CONFIG_JFFS2_FS_XATTR=y
CONFIG_JFFS2_FS_POSIX_ACL=y
CONFIG_JFFS2_FS_SECURITY=y
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_RTIME=y
CONFIG_JFFS2_RUBIN=y
# CONFIG_JFFS2_CMODE_NONE is not set
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
CONFIG_UBIFS_FS=y
CONFIG_UBIFS_FS_ADVANCED_COMPR=y
CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
CONFIG_UBIFS_FS_ZSTD=y
CONFIG_UBIFS_ATIME_SUPPORT=y
CONFIG_UBIFS_FS_XATTR=y
CONFIG_UBIFS_FS_SECURITY=y
CONFIG_UBIFS_FS_AUTHENTICATION=y
CONFIG_CRAMFS=y
CONFIG_CRAMFS_BLOCKDEV=y
CONFIG_CRAMFS_MTD=y
CONFIG_SQUASHFS=y
CONFIG_SQUASHFS_FILE_CACHE=y
# CONFIG_SQUASHFS_FILE_DIRECT is not set
# CONFIG_SQUASHFS_DECOMP_SINGLE is not set
# CONFIG_SQUASHFS_DECOMP_MULTI is not set
CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_ZLIB=y
CONFIG_SQUASHFS_LZ4=y
CONFIG_SQUASHFS_LZO=y
CONFIG_SQUASHFS_XZ=y
CONFIG_SQUASHFS_ZSTD=y
CONFIG_SQUASHFS_4K_DEVBLK_SIZE=y
CONFIG_SQUASHFS_EMBEDDED=y
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
CONFIG_VXFS_FS=y
CONFIG_MINIX_FS=y
CONFIG_OMFS_FS=y
CONFIG_HPFS_FS=y
CONFIG_QNX4FS_FS=y
CONFIG_QNX6FS_FS=y
CONFIG_QNX6FS_DEBUG=y
CONFIG_ROMFS_FS=y
CONFIG_ROMFS_BACKED_BY_BLOCK=y
# CONFIG_ROMFS_BACKED_BY_MTD is not set
# CONFIG_ROMFS_BACKED_BY_BOTH is not set
CONFIG_ROMFS_ON_BLOCK=y
CONFIG_PSTORE=y
CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240
CONFIG_PSTORE_DEFLATE_COMPRESS=y
CONFIG_PSTORE_LZO_COMPRESS=y
CONFIG_PSTORE_LZ4_COMPRESS=y
CONFIG_PSTORE_LZ4HC_COMPRESS=y
CONFIG_PSTORE_842_COMPRESS=y
CONFIG_PSTORE_ZSTD_COMPRESS=y
CONFIG_PSTORE_COMPRESS=y
CONFIG_PSTORE_DEFLATE_COMPRESS_DEFAULT=y
# CONFIG_PSTORE_LZO_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_LZ4_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_LZ4HC_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_842_COMPRESS_DEFAULT is not set
# CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT is not set
CONFIG_PSTORE_COMPRESS_DEFAULT="deflate"
CONFIG_PSTORE_CONSOLE=y
CONFIG_PSTORE_PMSG=y
CONFIG_PSTORE_RAM=y
CONFIG_PSTORE_ZONE=y
CONFIG_PSTORE_BLK=y
CONFIG_PSTORE_BLK_BLKDEV=""
CONFIG_PSTORE_BLK_KMSG_SIZE=64
CONFIG_PSTORE_BLK_MAX_REASON=2
CONFIG_PSTORE_BLK_PMSG_SIZE=64
CONFIG_PSTORE_BLK_CONSOLE_SIZE=64
CONFIG_SYSV_FS=y
CONFIG_UFS_FS=y
CONFIG_UFS_FS_WRITE=y
CONFIG_UFS_DEBUG=y
CONFIG_EROFS_FS=y
CONFIG_EROFS_FS_DEBUG=y
CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_ZIP=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ONDEMAND=y
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V2=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
CONFIG_NFS_V4_1=y
CONFIG_NFS_V4_2=y
CONFIG_PNFS_FILE_LAYOUT=y
CONFIG_PNFS_BLOCK=y
CONFIG_PNFS_FLEXFILE_LAYOUT=y
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
CONFIG_NFS_V4_1_MIGRATION=y
CONFIG_NFS_V4_SECURITY_LABEL=y
CONFIG_ROOT_NFS=y
CONFIG_NFS_FSCACHE=y
CONFIG_NFS_USE_LEGACY_DNS=y
CONFIG_NFS_DEBUG=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
CONFIG_NFS_V4_2_READ_PLUS=y
CONFIG_NFSD=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFSD_V4=y
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_SCSILAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFSD_V4_2_INTER_SSC=y
CONFIG_NFSD_V4_SECURITY_LABEL=y
CONFIG_GRACE_PERIOD=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
CONFIG_NFS_V4_2_SSC_HELPER=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
CONFIG_SUNRPC_BACKCHANNEL=y
CONFIG_RPCSEC_GSS_KRB5=y
CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES=y
CONFIG_SUNRPC_DEBUG=y
CONFIG_SUNRPC_XPRT_RDMA=y
CONFIG_CEPH_FS=y
CONFIG_CEPH_FSCACHE=y
CONFIG_CEPH_FS_POSIX_ACL=y
CONFIG_CEPH_FS_SECURITY_LABEL=y
CONFIG_CIFS=y
CONFIG_CIFS_STATS2=y
CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y
CONFIG_CIFS_UPCALL=y
CONFIG_CIFS_XATTR=y
CONFIG_CIFS_POSIX=y
CONFIG_CIFS_DEBUG=y
CONFIG_CIFS_DEBUG2=y
CONFIG_CIFS_DEBUG_DUMP_KEYS=y
CONFIG_CIFS_DFS_UPCALL=y
CONFIG_CIFS_SWN_UPCALL=y
CONFIG_CIFS_SMB_DIRECT=y
CONFIG_CIFS_FSCACHE=y
CONFIG_CIFS_ROOT=y
CONFIG_SMB_SERVER=y
CONFIG_SMB_SERVER_SMBDIRECT=y
CONFIG_SMB_SERVER_CHECK_CAP_NET_ADMIN=y
CONFIG_SMB_SERVER_KERBEROS5=y
CONFIG_SMBFS_COMMON=y
CONFIG_CODA_FS=y
CONFIG_AFS_FS=y
CONFIG_AFS_DEBUG=y
CONFIG_AFS_FSCACHE=y
CONFIG_AFS_DEBUG_CURSOR=y
CONFIG_9P_FS=y
CONFIG_9P_FSCACHE=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_9P_FS_SECURITY=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_737=y
CONFIG_NLS_CODEPAGE_775=y
CONFIG_NLS_CODEPAGE_850=y
CONFIG_NLS_CODEPAGE_852=y
CONFIG_NLS_CODEPAGE_855=y
CONFIG_NLS_CODEPAGE_857=y
CONFIG_NLS_CODEPAGE_860=y
CONFIG_NLS_CODEPAGE_861=y
CONFIG_NLS_CODEPAGE_862=y
CONFIG_NLS_CODEPAGE_863=y
CONFIG_NLS_CODEPAGE_864=y
CONFIG_NLS_CODEPAGE_865=y
CONFIG_NLS_CODEPAGE_866=y
CONFIG_NLS_CODEPAGE_869=y
CONFIG_NLS_CODEPAGE_936=y
CONFIG_NLS_CODEPAGE_950=y
CONFIG_NLS_CODEPAGE_932=y
CONFIG_NLS_CODEPAGE_949=y
CONFIG_NLS_CODEPAGE_874=y
CONFIG_NLS_ISO8859_8=y
CONFIG_NLS_CODEPAGE_1250=y
CONFIG_NLS_CODEPAGE_1251=y
CONFIG_NLS_ASCII=y
# CONFIG_NLS_ISO8859_1 is not set
CONFIG_NLS_ISO8859_2=y
CONFIG_NLS_ISO8859_3=y
CONFIG_NLS_ISO8859_4=y
CONFIG_NLS_ISO8859_5=y
CONFIG_NLS_ISO8859_6=y
CONFIG_NLS_ISO8859_7=y
CONFIG_NLS_ISO8859_9=y
CONFIG_NLS_ISO8859_13=y
CONFIG_NLS_ISO8859_14=y
CONFIG_NLS_ISO8859_15=y
CONFIG_NLS_KOI8_R=y
CONFIG_NLS_KOI8_U=y
CONFIG_NLS_MAC_ROMAN=y
CONFIG_NLS_MAC_CELTIC=y
CONFIG_NLS_MAC_CENTEURO=y
CONFIG_NLS_MAC_CROATIAN=y
CONFIG_NLS_MAC_CYRILLIC=y
CONFIG_NLS_MAC_GAELIC=y
CONFIG_NLS_MAC_GREEK=y
CONFIG_NLS_MAC_ICELAND=y
CONFIG_NLS_MAC_INUIT=y
CONFIG_NLS_MAC_ROMANIAN=y
CONFIG_NLS_MAC_TURKISH=y
CONFIG_NLS_UTF8=y
CONFIG_DLM=y
CONFIG_DLM_DEPRECATED_API=y
CONFIG_DLM_DEBUG=y
CONFIG_UNICODE=y
CONFIG_UNICODE_NORMALIZATION_SELFTEST=y
CONFIG_IO_WQ=y
# end of File systems

#
# Security options
#
CONFIG_KEYS=y
CONFIG_KEYS_REQUEST_CACHE=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_BIG_KEYS=y
CONFIG_TRUSTED_KEYS=y
CONFIG_TRUSTED_KEYS_TPM=y
CONFIG_TRUSTED_KEYS_TEE=y
CONFIG_ENCRYPTED_KEYS=y
CONFIG_USER_DECRYPTED_DATA=y
CONFIG_KEY_DH_OPERATIONS=y
CONFIG_KEY_NOTIFICATIONS=y
CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITY=y
CONFIG_SECURITY_WRITABLE_HOOKS=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
CONFIG_SECURITY_INFINIBAND=y
CONFIG_SECURITY_NETWORK_XFRM=y
CONFIG_SECURITY_PATH=y
CONFIG_LSM_MMAP_MIN_ADDR=65536
CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
CONFIG_HARDENED_USERCOPY=y
CONFIG_STATIC_USERMODEHELPER=y
CONFIG_STATIC_USERMODEHELPER_PATH="/sbin/usermode-helper"
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_SECURITY_SELINUX_DISABLE=y
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=0
CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS=9
CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256
CONFIG_SECURITY_SMACK=y
CONFIG_SECURITY_SMACK_BRINGUP=y
CONFIG_SECURITY_SMACK_NETFILTER=y
CONFIG_SECURITY_SMACK_APPEND_SIGNALS=y
CONFIG_SECURITY_TOMOYO=y
CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048
CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024
CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER=y
CONFIG_SECURITY_TOMOYO_INSECURE_BUILTIN_SETTING=y
CONFIG_SECURITY_APPARMOR=y
CONFIG_SECURITY_APPARMOR_DEBUG=y
CONFIG_SECURITY_APPARMOR_DEBUG_ASSERTS=y
CONFIG_SECURITY_APPARMOR_DEBUG_MESSAGES=y
CONFIG_SECURITY_APPARMOR_INTROSPECT_POLICY=y
CONFIG_SECURITY_APPARMOR_HASH=y
CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y
CONFIG_SECURITY_APPARMOR_EXPORT_BINARY=y
CONFIG_SECURITY_APPARMOR_PARANOID_LOAD=y
CONFIG_SECURITY_APPARMOR_KUNIT_TEST=y
CONFIG_SECURITY_LOADPIN=y
CONFIG_SECURITY_LOADPIN_ENFORCE=y
CONFIG_SECURITY_LOADPIN_VERITY=y
CONFIG_SECURITY_YAMA=y
CONFIG_SECURITY_SAFESETID=y
CONFIG_SECURITY_LOCKDOWN_LSM=y
CONFIG_SECURITY_LOCKDOWN_LSM_EARLY=y
CONFIG_LOCK_DOWN_KERNEL_FORCE_NONE=y
# CONFIG_LOCK_DOWN_KERNEL_FORCE_INTEGRITY is not set
# CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY is not set
CONFIG_SECURITY_LANDLOCK=y
CONFIG_INTEGRITY=y
CONFIG_INTEGRITY_SIGNATURE=y
CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
CONFIG_INTEGRITY_TRUSTED_KEYRING=y
CONFIG_INTEGRITY_PLATFORM_KEYRING=y
CONFIG_INTEGRITY_AUDIT=y
CONFIG_IMA=y
CONFIG_IMA_MEASURE_PCR_IDX=10
CONFIG_IMA_LSM_RULES=y
CONFIG_IMA_NG_TEMPLATE=y
# CONFIG_IMA_SIG_TEMPLATE is not set
CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng"
CONFIG_IMA_DEFAULT_HASH_SHA1=y
# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set
# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set
# CONFIG_IMA_DEFAULT_HASH_WP512 is not set
# CONFIG_IMA_DEFAULT_HASH_SM3 is not set
CONFIG_IMA_DEFAULT_HASH="sha1"
CONFIG_IMA_WRITE_POLICY=y
CONFIG_IMA_READ_POLICY=y
CONFIG_IMA_APPRAISE=y
CONFIG_IMA_ARCH_POLICY=y
CONFIG_IMA_APPRAISE_BUILD_POLICY=y
CONFIG_IMA_APPRAISE_REQUIRE_FIRMWARE_SIGS=y
CONFIG_IMA_APPRAISE_REQUIRE_KEXEC_SIGS=y
CONFIG_IMA_APPRAISE_REQUIRE_MODULE_SIGS=y
CONFIG_IMA_APPRAISE_REQUIRE_POLICY_SIGS=y
CONFIG_IMA_APPRAISE_BOOTPARAM=y
CONFIG_IMA_APPRAISE_MODSIG=y
CONFIG_IMA_TRUSTED_KEYRING=y
CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY=y
CONFIG_IMA_BLACKLIST_KEYRING=y
CONFIG_IMA_LOAD_X509=y
CONFIG_IMA_X509_PATH="/etc/keys/x509_ima.der"
CONFIG_IMA_APPRAISE_SIGNED_INIT=y
CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS=y
CONFIG_IMA_QUEUE_EARLY_BOOT_KEYS=y
CONFIG_IMA_DISABLE_HTABLE=y
CONFIG_EVM=y
CONFIG_EVM_ATTR_FSUUID=y
CONFIG_EVM_EXTRA_SMACK_XATTRS=y
CONFIG_EVM_ADD_XATTRS=y
CONFIG_EVM_LOAD_X509=y
CONFIG_EVM_X509_PATH="/etc/keys/x509_evm.der"
CONFIG_DEFAULT_SECURITY_SELINUX=y
# CONFIG_DEFAULT_SECURITY_SMACK is not set
# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
# CONFIG_DEFAULT_SECURITY_APPARMOR is not set
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf"

#
# Kernel hardening options
#

#
# Memory initialization
#
CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y
# CONFIG_INIT_STACK_NONE is not set
CONFIG_INIT_STACK_ALL_PATTERN=y
# CONFIG_INIT_STACK_ALL_ZERO is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
CONFIG_INIT_ON_FREE_DEFAULT_ON=y
CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
CONFIG_ZERO_CALL_USED_REGS=y
# end of Memory initialization

CONFIG_RANDSTRUCT_NONE=y
# end of Kernel hardening options
# end of Security options

CONFIG_XOR_BLOCKS=y
CONFIG_ASYNC_CORE=y
CONFIG_ASYNC_MEMCPY=y
CONFIG_ASYNC_XOR=y
CONFIG_ASYNC_PQ=y
CONFIG_ASYNC_RAID6_RECOV=y
CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA=y
CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA=y
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=y
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_SKCIPHER=y
CONFIG_CRYPTO_SKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_RNG_DEFAULT=y
CONFIG_CRYPTO_AKCIPHER2=y
CONFIG_CRYPTO_AKCIPHER=y
CONFIG_CRYPTO_KPP2=y
CONFIG_CRYPTO_KPP=y
CONFIG_CRYPTO_ACOMP2=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
CONFIG_CRYPTO_USER=y
CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
CONFIG_CRYPTO_GF128MUL=y
CONFIG_CRYPTO_NULL=y
CONFIG_CRYPTO_NULL2=y
CONFIG_CRYPTO_CRYPTD=y
CONFIG_CRYPTO_AUTHENC=y
CONFIG_CRYPTO_TEST=y
CONFIG_CRYPTO_ENGINE=y
# end of Crypto core or helper

#
# Public-key cryptography
#
CONFIG_CRYPTO_RSA=y
CONFIG_CRYPTO_DH=y
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_ECC=y
CONFIG_CRYPTO_ECDH=y
CONFIG_CRYPTO_ECDSA=y
CONFIG_CRYPTO_ECRDSA=y
CONFIG_CRYPTO_SM2=y
CONFIG_CRYPTO_CURVE25519=y
# end of Public-key cryptography

#
# Block ciphers
#
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_AES_TI=y
CONFIG_CRYPTO_ANUBIS=y
CONFIG_CRYPTO_ARIA=y
CONFIG_CRYPTO_BLOWFISH=y
CONFIG_CRYPTO_BLOWFISH_COMMON=y
CONFIG_CRYPTO_CAMELLIA=y
CONFIG_CRYPTO_CAST_COMMON=y
CONFIG_CRYPTO_CAST5=y
CONFIG_CRYPTO_CAST6=y
CONFIG_CRYPTO_DES=y
CONFIG_CRYPTO_FCRYPT=y
CONFIG_CRYPTO_KHAZAD=y
CONFIG_CRYPTO_SEED=y
CONFIG_CRYPTO_SERPENT=y
CONFIG_CRYPTO_SM4=y
CONFIG_CRYPTO_SM4_GENERIC=y
CONFIG_CRYPTO_TEA=y
CONFIG_CRYPTO_TWOFISH=y
CONFIG_CRYPTO_TWOFISH_COMMON=y
# end of Block ciphers

#
# Length-preserving ciphers and modes
#
CONFIG_CRYPTO_ADIANTUM=y
CONFIG_CRYPTO_ARC4=y
CONFIG_CRYPTO_CHACHA20=y
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_ECB=y
CONFIG_CRYPTO_HCTR2=y
CONFIG_CRYPTO_KEYWRAP=y
CONFIG_CRYPTO_LRW=y
CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=y
CONFIG_CRYPTO_XCTR=y
CONFIG_CRYPTO_XTS=y
CONFIG_CRYPTO_NHPOLY1305=y
# end of Length-preserving ciphers and modes

#
# AEAD (authenticated encryption with associated data) ciphers
#
CONFIG_CRYPTO_AEGIS128=y
CONFIG_CRYPTO_CHACHA20POLY1305=y
CONFIG_CRYPTO_CCM=y
CONFIG_CRYPTO_GCM=y
CONFIG_CRYPTO_SEQIV=y
CONFIG_CRYPTO_ECHAINIV=y
CONFIG_CRYPTO_ESSIV=y
# end of AEAD (authenticated encryption with associated data) ciphers

#
# Hashes, digests, and MACs
#
CONFIG_CRYPTO_BLAKE2B=y
CONFIG_CRYPTO_CMAC=y
CONFIG_CRYPTO_GHASH=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_MD4=y
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=y
CONFIG_CRYPTO_POLYVAL=y
CONFIG_CRYPTO_POLY1305=y
CONFIG_CRYPTO_RMD160=y
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=y
CONFIG_CRYPTO_SHA3=y
CONFIG_CRYPTO_SM3=y
CONFIG_CRYPTO_SM3_GENERIC=y
CONFIG_CRYPTO_STREEBOG=y
CONFIG_CRYPTO_VMAC=y
CONFIG_CRYPTO_WP512=y
CONFIG_CRYPTO_XCBC=y
CONFIG_CRYPTO_XXHASH=y
# end of Hashes, digests, and MACs

#
# CRCs (cyclic redundancy checks)
#
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32=y
CONFIG_CRYPTO_CRCT10DIF=y
CONFIG_CRYPTO_CRC64_ROCKSOFT=y
# end of CRCs (cyclic redundancy checks)

#
# Compression
#
CONFIG_CRYPTO_DEFLATE=y
CONFIG_CRYPTO_LZO=y
CONFIG_CRYPTO_842=y
CONFIG_CRYPTO_LZ4=y
CONFIG_CRYPTO_LZ4HC=y
CONFIG_CRYPTO_ZSTD=y
# end of Compression

#
# Random number generation
#
CONFIG_CRYPTO_ANSI_CPRNG=y
CONFIG_CRYPTO_DRBG_MENU=y
CONFIG_CRYPTO_DRBG_HMAC=y
CONFIG_CRYPTO_DRBG_HASH=y
CONFIG_CRYPTO_DRBG_CTR=y
CONFIG_CRYPTO_DRBG=y
CONFIG_CRYPTO_JITTERENTROPY=y
CONFIG_CRYPTO_KDF800108_CTR=y
# end of Random number generation

#
# Userspace interface
#
CONFIG_CRYPTO_USER_API=y
CONFIG_CRYPTO_USER_API_HASH=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y
CONFIG_CRYPTO_USER_API_RNG=y
CONFIG_CRYPTO_USER_API_RNG_CAVP=y
CONFIG_CRYPTO_USER_API_AEAD=y
CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y
CONFIG_CRYPTO_STATS=y
# end of Userspace interface

CONFIG_CRYPTO_HASH_INFO=y
CONFIG_CRYPTO_HW=y
CONFIG_CRYPTO_DEV_ALLWINNER=y
CONFIG_CRYPTO_DEV_EXYNOS_RNG=y
CONFIG_CRYPTO_DEV_S5P=y
CONFIG_CRYPTO_DEV_ATMEL_AUTHENC=y
CONFIG_CRYPTO_DEV_ATMEL_AES=y
CONFIG_CRYPTO_DEV_ATMEL_TDES=y
CONFIG_CRYPTO_DEV_ATMEL_SHA=y
CONFIG_CRYPTO_DEV_ATMEL_I2C=y
CONFIG_CRYPTO_DEV_ATMEL_ECC=y
CONFIG_CRYPTO_DEV_ATMEL_SHA204A=y
CONFIG_CRYPTO_DEV_QCE=y
CONFIG_CRYPTO_DEV_QCE_SKCIPHER=y
CONFIG_CRYPTO_DEV_QCE_SHA=y
CONFIG_CRYPTO_DEV_QCE_AEAD=y
CONFIG_CRYPTO_DEV_QCE_ENABLE_ALL=y
# CONFIG_CRYPTO_DEV_QCE_ENABLE_SKCIPHER is not set
# CONFIG_CRYPTO_DEV_QCE_ENABLE_SHA is not set
# CONFIG_CRYPTO_DEV_QCE_ENABLE_AEAD is not set
CONFIG_CRYPTO_DEV_QCE_SW_MAX_LEN=512
CONFIG_CRYPTO_DEV_QCOM_RNG=y
CONFIG_CRYPTO_DEV_IMGTEC_HASH=y
CONFIG_CRYPTO_DEV_ZYNQMP_AES=y
CONFIG_CRYPTO_DEV_ZYNQMP_SHA3=y
CONFIG_CRYPTO_DEV_VIRTIO=y
CONFIG_CRYPTO_DEV_SAFEXCEL=y
CONFIG_CRYPTO_DEV_CCREE=y
CONFIG_CRYPTO_DEV_HISI_SEC=y
CONFIG_CRYPTO_DEV_AMLOGIC_GXL=y
CONFIG_CRYPTO_DEV_AMLOGIC_GXL_DEBUG=y
CONFIG_CRYPTO_DEV_SA2UL=y
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_AES_SM4=y
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_AES_SM4_ECB=y
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_AES_SM4_CTS=y
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_ECC=y
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_HCU=y
CONFIG_CRYPTO_DEV_KEEMBAY_OCS_HCU_HMAC_SHA224=y
CONFIG_CRYPTO_DEV_ASPEED=y
CONFIG_CRYPTO_DEV_ASPEED_DEBUG=y
CONFIG_CRYPTO_DEV_ASPEED_HACE_HASH=y
CONFIG_CRYPTO_DEV_ASPEED_HACE_CRYPTO=y
CONFIG_ASYMMETRIC_KEY_TYPE=y
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
CONFIG_X509_CERTIFICATE_PARSER=y
CONFIG_PKCS8_PRIVATE_KEY_PARSER=y
CONFIG_PKCS7_MESSAGE_PARSER=y
CONFIG_PKCS7_TEST_KEY=y
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_FIPS_SIGNATURE_SELFTEST=y

#
# Certificates for signature checking
#
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
# CONFIG_MODULE_SIG_KEY_TYPE_ECDSA is not set
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_EXTRA_CERTIFICATE=y
CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096
CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
CONFIG_SYSTEM_REVOCATION_LIST=y
CONFIG_SYSTEM_REVOCATION_KEYS=""
CONFIG_SYSTEM_BLACKLIST_AUTH_UPDATE=y
# end of Certificates for signature checking

CONFIG_BINARY_PRINTF=y

#
# Library routines
#
CONFIG_RAID6_PQ=y
CONFIG_RAID6_PQ_BENCHMARK=y
CONFIG_LINEAR_RANGES=y
CONFIG_PACKING=y
CONFIG_BITREVERSE=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_GENERIC_NET_UTILS=y
CONFIG_CORDIC=y
CONFIG_PRIME_NUMBERS=y
CONFIG_RATIONAL=y
CONFIG_STMP_DEVICE=y

#
# Crypto library routines
#
CONFIG_CRYPTO_LIB_UTILS=y
CONFIG_CRYPTO_LIB_AES=y
CONFIG_CRYPTO_LIB_ARC4=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=y
CONFIG_CRYPTO_LIB_CHACHA=y
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y
CONFIG_CRYPTO_LIB_CURVE25519=y
CONFIG_CRYPTO_LIB_DES=y
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=y
CONFIG_CRYPTO_LIB_POLY1305=y
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=y
CONFIG_CRYPTO_LIB_SHA1=y
CONFIG_CRYPTO_LIB_SHA256=y
# end of Crypto library routines

CONFIG_CRC_CCITT=y
CONFIG_CRC16=y
CONFIG_CRC_T10DIF=y
CONFIG_CRC64_ROCKSOFT=y
CONFIG_CRC_ITU_T=y
CONFIG_CRC32=y
CONFIG_CRC32_SELFTEST=y
CONFIG_CRC32_SLICEBY8=y
# CONFIG_CRC32_SLICEBY4 is not set
# CONFIG_CRC32_SARWATE is not set
# CONFIG_CRC32_BIT is not set
CONFIG_CRC64=y
CONFIG_CRC4=y
CONFIG_CRC7=y
CONFIG_LIBCRC32C=y
CONFIG_CRC8=y
CONFIG_XXHASH=y
CONFIG_AUDIT_GENERIC=y
CONFIG_RANDOM32_SELFTEST=y
CONFIG_842_COMPRESS=y
CONFIG_842_DECOMPRESS=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_LZ4_COMPRESS=y
CONFIG_LZ4HC_COMPRESS=y
CONFIG_LZ4_DECOMPRESS=y
CONFIG_ZSTD_COMMON=y
CONFIG_ZSTD_COMPRESS=y
CONFIG_ZSTD_DECOMPRESS=y
CONFIG_XZ_DEC=y
CONFIG_XZ_DEC_X86=y
CONFIG_XZ_DEC_POWERPC=y
CONFIG_XZ_DEC_IA64=y
CONFIG_XZ_DEC_ARM=y
CONFIG_XZ_DEC_ARMTHUMB=y
CONFIG_XZ_DEC_SPARC=y
CONFIG_XZ_DEC_MICROLZMA=y
CONFIG_XZ_DEC_BCJ=y
CONFIG_XZ_DEC_TEST=y
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_DECOMPRESS_XZ=y
CONFIG_DECOMPRESS_LZO=y
CONFIG_DECOMPRESS_LZ4=y
CONFIG_DECOMPRESS_ZSTD=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_REED_SOLOMON=y
CONFIG_REED_SOLOMON_ENC8=y
CONFIG_REED_SOLOMON_DEC8=y
CONFIG_REED_SOLOMON_ENC16=y
CONFIG_REED_SOLOMON_DEC16=y
CONFIG_BCH=y
CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=y
CONFIG_TEXTSEARCH_BM=y
CONFIG_TEXTSEARCH_FSM=y
CONFIG_BTREE=y
CONFIG_INTERVAL_TREE=y
CONFIG_XARRAY_MULTI=y
CONFIG_ASSOCIATIVE_ARRAY=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_DMA=y
CONFIG_DMA_OPS=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_DMA_DECLARE_COHERENT=y
CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y
CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU=y
CONFIG_ARCH_HAS_DMA_PREP_COHERENT=y
CONFIG_DMA_API_DEBUG=y
CONFIG_DMA_API_DEBUG_SG=y
CONFIG_DMA_MAP_BENCHMARK=y
CONFIG_SGL_ALLOC=y
CONFIG_DQL=y
CONFIG_GLOB=y
CONFIG_GLOB_SELFTEST=y
CONFIG_NLATTR=y
CONFIG_GENERIC_ATOMIC64=y
CONFIG_LRU_CACHE=y
CONFIG_CLZ_TAB=y
CONFIG_IRQ_POLL=y
CONFIG_MPILIB=y
CONFIG_SIGNATURE=y
CONFIG_DIMLIB=y
CONFIG_LIBFDT=y
CONFIG_OID_REGISTRY=y
CONFIG_FONT_SUPPORT=y
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
CONFIG_FONT_6x11=y
CONFIG_FONT_7x14=y
CONFIG_FONT_PEARL_8x8=y
CONFIG_FONT_ACORN_8x8=y
CONFIG_FONT_MINI_4x6=y
CONFIG_FONT_6x10=y
CONFIG_FONT_10x18=y
CONFIG_FONT_SUN8x16=y
CONFIG_FONT_SUN12x22=y
CONFIG_FONT_TER16x32=y
CONFIG_FONT_6x8=y
CONFIG_SG_SPLIT=y
CONFIG_SG_POOL=y
CONFIG_SBITMAP=y
CONFIG_PARMAN=y
CONFIG_OBJAGG=y
# end of Library routines

CONFIG_ASN1_ENCODER=y
CONFIG_POLYNOMIAL=y

#
# Kernel hacking
#

#
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
CONFIG_PRINTK_CALLER=y
CONFIG_STACKTRACE_BUILD_ID=y
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
CONFIG_CONSOLE_LOGLEVEL_QUIET=4
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_DYNAMIC_DEBUG=y
CONFIG_DYNAMIC_DEBUG_CORE=y
CONFIG_SYMBOLIC_ERRNAME=y
# end of printk and dmesg options

CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_MISC=y

#
# Compile-time checks and compiler options
#
CONFIG_AS_HAS_NON_CONST_LEB128=y
CONFIG_DEBUG_INFO_NONE=y
# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set
# CONFIG_DEBUG_INFO_DWARF4 is not set
# CONFIG_DEBUG_INFO_DWARF5 is not set
CONFIG_FRAME_WARN=1024
CONFIG_STRIP_ASM_SYMS=y
CONFIG_READABLE_ASM=y
CONFIG_HEADERS_INSTALL=y
CONFIG_DEBUG_SECTION_MISMATCH=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
CONFIG_VMLINUX_MAP=y
CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
# end of Compile-time checks and compiler options

#
# Generic Kernel Debugging Instruments
#
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE=""
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_FS_ALLOW_ALL=y
# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set
# CONFIG_DEBUG_FS_ALLOW_NONE is not set
CONFIG_HAVE_ARCH_KGDB=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_KGDB_TESTS=y
CONFIG_KGDB_TESTS_ON_BOOT=y
CONFIG_KGDB_TESTS_BOOT_STRING="V1F100"
CONFIG_KGDB_KDB=y
CONFIG_KDB_DEFAULT_ENABLE=0x1
CONFIG_KDB_KEYBOARD=y
CONFIG_KDB_CONTINUE_CATASTROPHIC=0
CONFIG_UBSAN=y
CONFIG_CC_HAS_UBSAN_BOUNDS=y
CONFIG_UBSAN_BOUNDS=y
CONFIG_UBSAN_ONLY_BOUNDS=y
CONFIG_UBSAN_SHIFT=y
CONFIG_UBSAN_DIV_ZERO=y
CONFIG_UBSAN_UNREACHABLE=y
CONFIG_UBSAN_BOOL=y
CONFIG_UBSAN_ENUM=y
CONFIG_TEST_UBSAN=m
CONFIG_HAVE_KCSAN_COMPILER=y
# end of Generic Kernel Debugging Instruments

#
# Networking Debugging
#
CONFIG_DEBUG_NET=y
# end of Networking Debugging

#
# Memory Debugging
#
CONFIG_PAGE_EXTENSION=y
CONFIG_DEBUG_PAGEALLOC=y
CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT=y
CONFIG_SLUB_DEBUG=y
# CONFIG_SLUB_DEBUG_ON is not set
CONFIG_PAGE_POISONING=y
CONFIG_DEBUG_OBJECTS=y
CONFIG_DEBUG_OBJECTS_SELFTEST=y
CONFIG_DEBUG_OBJECTS_FREE=y
CONFIG_DEBUG_OBJECTS_TIMERS=y
CONFIG_DEBUG_OBJECTS_WORK=y
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
CONFIG_SHRINKER_DEBUG=y
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_SCHED_STACK_END_CHECK=y
CONFIG_DEBUG_VM_IRQSOFF=y
CONFIG_DEBUG_VM=y
CONFIG_DEBUG_VM_MAPLE_TREE=y
CONFIG_DEBUG_VM_RB=y
CONFIG_DEBUG_VM_PGFLAGS=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
# end of Memory Debugging

CONFIG_DEBUG_SHIRQ=y

#
# Debug Oops, Lockups and Hangs
#
CONFIG_PANIC_ON_OOPS=y
CONFIG_PANIC_ON_OOPS_VALUE=1
CONFIG_PANIC_TIMEOUT=0
CONFIG_LOCKUP_DETECTOR=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
CONFIG_WQ_WATCHDOG=y
CONFIG_TEST_LOCKUP=m
# end of Debug Oops, Lockups and Hangs

#
# Scheduler Debugging
#
CONFIG_SCHED_DEBUG=y
CONFIG_SCHED_INFO=y
CONFIG_SCHEDSTATS=y
# end of Scheduler Debugging

CONFIG_DEBUG_TIMEKEEPING=y

#
# Lock Debugging (spinlocks, mutexes, etc...)
#
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_RWSEMS=y
CONFIG_DEBUG_ATOMIC_SLEEP=y
CONFIG_DEBUG_LOCKING_API_SELFTESTS=y
CONFIG_LOCK_TORTURE_TEST=y
CONFIG_WW_MUTEX_SELFTEST=y
CONFIG_SCF_TORTURE_TEST=y
# end of Lock Debugging (spinlocks, mutexes, etc...)

CONFIG_DEBUG_IRQFLAGS=y
CONFIG_WARN_ALL_UNSEEDED_RANDOM=y
CONFIG_DEBUG_KOBJECT=y
CONFIG_DEBUG_KOBJECT_RELEASE=y

#
# Debug kernel data structures
#
CONFIG_DEBUG_LIST=y
CONFIG_DEBUG_PLIST=y
CONFIG_DEBUG_SG=y
CONFIG_DEBUG_NOTIFIERS=y
CONFIG_BUG_ON_DATA_CORRUPTION=y
CONFIG_DEBUG_MAPLE_TREE=y
# end of Debug kernel data structures

CONFIG_DEBUG_CREDENTIALS=y

#
# RCU Debugging
#
CONFIG_TORTURE_TEST=y
CONFIG_RCU_SCALE_TEST=y
CONFIG_RCU_TORTURE_TEST=y
CONFIG_RCU_REF_SCALE_TEST=y
CONFIG_RCU_TRACE=y
CONFIG_RCU_EQS_DEBUG=y
# end of RCU Debugging

CONFIG_DEBUG_WQ_FORCE_RR_CPU=y
CONFIG_TRACE_CLOCK=y
# CONFIG_SAMPLES is not set
# CONFIG_STRICT_DEVMEM is not set

#
# nios2 Debugging
#
CONFIG_EARLY_PRINTK=y
# end of nios2 Debugging

#
# Kernel Testing and Coverage
#
CONFIG_KUNIT=y
CONFIG_KUNIT_DEBUGFS=y
CONFIG_KUNIT_TEST=y
CONFIG_KUNIT_EXAMPLE_TEST=y
CONFIG_KUNIT_ALL_TESTS=y
CONFIG_KUNIT_DEFAULT_ENABLED=y
CONFIG_NOTIFIER_ERROR_INJECTION=y
CONFIG_OF_RECONFIG_NOTIFIER_ERROR_INJECT=y
CONFIG_NETDEV_NOTIFIER_ERROR_INJECT=y
CONFIG_FAULT_INJECTION=y
CONFIG_FAILSLAB=y
CONFIG_FAIL_PAGE_ALLOC=y
CONFIG_FAULT_INJECTION_USERCOPY=y
CONFIG_FAIL_MAKE_REQUEST=y
CONFIG_FAIL_IO_TIMEOUT=y
CONFIG_FAIL_FUTEX=y
CONFIG_FAULT_INJECTION_DEBUG_FS=y
CONFIG_FAIL_MMC_REQUEST=y
CONFIG_FAIL_SUNRPC=y
CONFIG_CC_HAS_SANCOV_TRACE_PC=y
CONFIG_RUNTIME_TESTING_MENU=y
CONFIG_LKDTM=y
CONFIG_CPUMASK_KUNIT_TEST=y
CONFIG_TEST_LIST_SORT=y
CONFIG_TEST_MIN_HEAP=y
CONFIG_TEST_SORT=y
CONFIG_TEST_DIV64=y
CONFIG_BACKTRACE_SELF_TEST=y
CONFIG_RBTREE_TEST=y
CONFIG_REED_SOLOMON_TEST=y
CONFIG_INTERVAL_TREE_TEST=y
CONFIG_PERCPU_TEST=m
CONFIG_ATOMIC64_SELFTEST=y
CONFIG_ASYNC_RAID6_TEST=y
CONFIG_TEST_HEXDUMP=y
CONFIG_STRING_SELFTEST=y
CONFIG_TEST_STRING_HELPERS=y
# CONFIG_TEST_STRSCPY is not set
CONFIG_TEST_KSTRTOX=y
CONFIG_TEST_PRINTF=y
CONFIG_TEST_SCANF=y
CONFIG_TEST_BITMAP=y
CONFIG_TEST_UUID=y
CONFIG_TEST_XARRAY=y
CONFIG_TEST_RHASHTABLE=y
# CONFIG_TEST_SIPHASH is not set
CONFIG_TEST_IDA=y
CONFIG_TEST_PARMAN=y
CONFIG_TEST_LKM=m
CONFIG_TEST_BITOPS=m
CONFIG_TEST_VMALLOC=m
CONFIG_TEST_USER_COPY=m
CONFIG_TEST_BPF=m
CONFIG_TEST_BLACKHOLE_DEV=m
CONFIG_FIND_BIT_BENCHMARK=y
CONFIG_TEST_FIRMWARE=y
CONFIG_TEST_SYSCTL=y
CONFIG_BITFIELD_KUNIT=y
CONFIG_HASH_KUNIT_TEST=y
CONFIG_RESOURCE_KUNIT_TEST=y
CONFIG_SYSCTL_KUNIT_TEST=y
CONFIG_LIST_KUNIT_TEST=y
CONFIG_LINEAR_RANGES_TEST=y
CONFIG_CMDLINE_KUNIT_TEST=y
CONFIG_BITS_TEST=y
CONFIG_SLUB_KUNIT_TEST=y
CONFIG_RATIONAL_KUNIT_TEST=y
CONFIG_MEMCPY_KUNIT_TEST=y
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=y
CONFIG_OVERFLOW_KUNIT_TEST=y
CONFIG_STACKINIT_KUNIT_TEST=y
CONFIG_TEST_UDELAY=y
CONFIG_TEST_STATIC_KEYS=m
CONFIG_TEST_DYNAMIC_DEBUG=y
CONFIG_TEST_KMOD=m
CONFIG_TEST_MEMCAT_P=y
CONFIG_TEST_OBJAGG=y
CONFIG_TEST_MEMINIT=y
CONFIG_TEST_FREE_PAGES=y
# end of Kernel Testing and Coverage

#
# Rust hacking
#
# end of Rust hacking

CONFIG_WARN_MISSING_DOCUMENTS=y
CONFIG_WARN_ABI_ERRORS=y
# end of Kernel hacking

From sashal at kernel.org  Tue Dec 27 12:32:41 2022
From: sashal at kernel.org (Sasha Levin)
Date: Tue, 27 Dec 2022 15:32:41 -0500
Subject: [PATCH AUTOSEL 6.1 20/28] iommu/mediatek: Fix crash on isr after kexec()
In-Reply-To: <20221227203249.1213526-1-sashal@kernel.org>
References: <20221227203249.1213526-1-sashal@kernel.org>
Message-ID: <20221227203249.1213526-20-sashal@kernel.org>

From: Ricardo Ribalda <ribalda at chromium.org>

[ Upstream commit 00ef8885a945c37551547d8ac8361cacd20c4e42 ]

If the system is rebooted via isr(), the IRQ handler might
be triggered before the domain is initialized. Resulting on
an invalid memory access error.

Fix:
[    0.500930] Unable to handle kernel read from unreadable memory at virtual address 0000000000000070
[    0.501166] Call trace:
[    0.501174]  report_iommu_fault+0x28/0xfc
[    0.501180]  mtk_iommu_isr+0x10c/0x1c0

Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Robin Murphy <robin.murphy at arm.com>
Link: https://lore.kernel.org/r/20221125-mtk-iommu-v2-0-e168dff7d43e at chromium.org
[ joro: Fixed spelling in commit message ]
Signed-off-by: Joerg Roedel <jroedel at suse.de>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/iommu/mtk_iommu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index 2ab2ecfe01f8..3d913ab5029c 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -454,7 +454,7 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id)
 		fault_larb = data->plat_data->larbid_remap[fault_larb][sub_comm];
 	}
 
-	if (report_iommu_fault(&dom->domain, bank->parent_dev, fault_iova,
+	if (!dom || report_iommu_fault(&dom->domain, bank->parent_dev, fault_iova,
 			       write ? IOMMU_FAULT_WRITE : IOMMU_FAULT_READ)) {
 		dev_err_ratelimited(
 			bank->parent_dev,
-- 
2.35.1



From sashal at kernel.org  Tue Dec 27 12:33:35 2022
From: sashal at kernel.org (Sasha Levin)
Date: Tue, 27 Dec 2022 15:33:35 -0500
Subject: [PATCH AUTOSEL 6.0 20/27] iommu/mediatek: Fix crash on isr after kexec()
In-Reply-To: <20221227203342.1213918-1-sashal@kernel.org>
References: <20221227203342.1213918-1-sashal@kernel.org>
Message-ID: <20221227203342.1213918-20-sashal@kernel.org>

From: Ricardo Ribalda <ribalda at chromium.org>

[ Upstream commit 00ef8885a945c37551547d8ac8361cacd20c4e42 ]

If the system is rebooted via isr(), the IRQ handler might
be triggered before the domain is initialized. Resulting on
an invalid memory access error.

Fix:
[    0.500930] Unable to handle kernel read from unreadable memory at virtual address 0000000000000070
[    0.501166] Call trace:
[    0.501174]  report_iommu_fault+0x28/0xfc
[    0.501180]  mtk_iommu_isr+0x10c/0x1c0

Signed-off-by: Ricardo Ribalda <ribalda at chromium.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Robin Murphy <robin.murphy at arm.com>
Link: https://lore.kernel.org/r/20221125-mtk-iommu-v2-0-e168dff7d43e at chromium.org
[ joro: Fixed spelling in commit message ]
Signed-off-by: Joerg Roedel <jroedel at suse.de>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 drivers/iommu/mtk_iommu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index 7e363b1f24df..b5ccdc134e84 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -452,7 +452,7 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id)
 		fault_larb = data->plat_data->larbid_remap[fault_larb][sub_comm];
 	}
 
-	if (report_iommu_fault(&dom->domain, bank->parent_dev, fault_iova,
+	if (!dom || report_iommu_fault(&dom->domain, bank->parent_dev, fault_iova,
 			       write ? IOMMU_FAULT_WRITE : IOMMU_FAULT_READ)) {
 		dev_err_ratelimited(
 			bank->parent_dev,
-- 
2.35.1



From sqladmin at savezone.co.kr  Tue Dec 27 13:56:15 2022
From: sqladmin at savezone.co.kr (Jacques BOUCHEX)
Date: Tue, 27 Dec 2022 22:56:15 +0100
Subject: Bonjour,
Message-ID: <20221227225615.417F609781D0B5CD@savezone.co.kr>

Bonjour,
D?sol? pour cette fa?on de vous contacter, je viens de voir votre 
profil et j'ai pens? que vous ?tiez la personne dont j'avais 
besoin. En bref, je m'appelle Jacques BOUCHEX, d'origine 
fran?aise. Je suis atteint d'une maladie grave qui me condamne ? 
une mort certaine, un cancer du cerveau, et je dispose d'une 
somme de vingt-cinq millions cinq cent mille euros (25.500.000 
euros) que je souhaite remettre ? un tiers fiable et honn?te pour 
son bon usage. J'ai une entreprise qui importe de l'huile rouge 
en France et dans d'autres pays. J'ai perdu ma femme et deux 
adorables enfants il y a 10 ans dans un malheureux accident de la 
route. J'aimerais faire don de cette somme avant de mourir car 
mes jours sont compt?s. Veuillez m'envoyer un courriel ? 
l'adresse suivante : jacques_bouchex at yahoo.com Que le Seigneur 
vous b?nisse.


From michael at walle.cc  Tue Dec 27 15:07:19 2022
From: michael at walle.cc (Michael Walle)
Date: Wed, 28 Dec 2022 00:07:19 +0100
Subject: [PATCH RFC net-next v2 03/12] net: mdio: mdiobus_register: update
 validation test
In-Reply-To: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
References: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
Message-ID: <20221227-v6-2-rc1-c45-seperation-v2-3-ddb37710e5a7@walle.cc>

From: Andrew Lunn <andrew at lunn.ch>

Now that C45 uses its own read/write methods, the validation performed
when a bus is registers needs updating. All combinations of C22 and
C45 are supported, but both read and write methods must be provided,
read only busses are not supported etc.

Signed-off-by: Andrew Lunn <andrew at lunn.ch>
Signed-off-by: Michael Walle <michael at walle.cc>
---
v2:
 - [al] be consistent with other checks
 - [mw] make the test a bit easier to read
---
 drivers/net/phy/mdio_bus.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index bde195864c17..d14d7704e895 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -526,8 +526,18 @@ int __mdiobus_register(struct mii_bus *bus, struct module *owner)
 	int i, err;
 	struct gpio_desc *gpiod;
 
-	if (NULL == bus || NULL == bus->name ||
-	    NULL == bus->read || NULL == bus->write)
+	if (!bus || !bus->name)
+		return -EINVAL;
+
+	/* An access method always needs both read and write operations */
+	if ((bus->read && !bus->write) ||
+	    (!bus->read && bus->write) ||
+	    (bus->read_c45 && !bus->write_c45) ||
+	    (!bus->read_c45 && bus->write_c45))
+		return -EINVAL;
+
+	/* At least one method is mandatory */
+	if (!bus->read && !bus->read_c45)
 		return -EINVAL;
 
 	if (bus->parent && bus->parent->of_node)

-- 
2.30.2


From michael at walle.cc  Tue Dec 27 15:07:22 2022
From: michael at walle.cc (Michael Walle)
Date: Wed, 28 Dec 2022 00:07:22 +0100
Subject: [PATCH RFC net-next v2 06/12] net: mdio: mdio-bitbang: Separate C22
 and C45 transactions
In-Reply-To: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
References: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
Message-ID: <20221227-v6-2-rc1-c45-seperation-v2-6-ddb37710e5a7@walle.cc>

From: Andrew Lunn <andrew at lunn.ch>

The bitbbanging bus driver can perform both C22 and C45 transfers.
Create separate functions for each and register the C45 versions using
the new driver API calls.

The SH Ethernet driver places wrappers around these functions. In
order to not break boards which might be using C45, add similar
wrappers for C45 operations.

Reviewed-by: Geert Uytterhoeven <geert+renesas at glider.be>
Signed-off-by: Andrew Lunn <andrew at lunn.ch>
Signed-off-by: Michael Walle <michael at walle.cc>
---
 drivers/net/ethernet/renesas/sh_eth.c | 37 ++++++++++++++---
 drivers/net/mdio/mdio-bitbang.c       | 77 +++++++++++++++++++++++------------
 include/linux/mdio-bitbang.h          |  6 ++-
 3 files changed, 87 insertions(+), 33 deletions(-)

diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
index 71a499113308..ed17163d7811 100644
--- a/drivers/net/ethernet/renesas/sh_eth.c
+++ b/drivers/net/ethernet/renesas/sh_eth.c
@@ -3044,23 +3044,46 @@ static int sh_mdio_release(struct sh_eth_private *mdp)
 	return 0;
 }
 
-static int sh_mdiobb_read(struct mii_bus *bus, int phy, int reg)
+static int sh_mdiobb_read_c22(struct mii_bus *bus, int phy, int reg)
 {
 	int res;
 
 	pm_runtime_get_sync(bus->parent);
-	res = mdiobb_read(bus, phy, reg);
+	res = mdiobb_read_c22(bus, phy, reg);
 	pm_runtime_put(bus->parent);
 
 	return res;
 }
 
-static int sh_mdiobb_write(struct mii_bus *bus, int phy, int reg, u16 val)
+static int sh_mdiobb_write_c22(struct mii_bus *bus, int phy, int reg, u16 val)
 {
 	int res;
 
 	pm_runtime_get_sync(bus->parent);
-	res = mdiobb_write(bus, phy, reg, val);
+	res = mdiobb_write_c22(bus, phy, reg, val);
+	pm_runtime_put(bus->parent);
+
+	return res;
+}
+
+static int sh_mdiobb_read_c45(struct mii_bus *bus, int phy, int devad, int reg)
+{
+	int res;
+
+	pm_runtime_get_sync(bus->parent);
+	res = mdiobb_read_c45(bus, phy, devad, reg);
+	pm_runtime_put(bus->parent);
+
+	return res;
+}
+
+static int sh_mdiobb_write_c45(struct mii_bus *bus, int phy, int devad,
+			       int reg, u16 val)
+{
+	int res;
+
+	pm_runtime_get_sync(bus->parent);
+	res = mdiobb_write_c45(bus, phy, devad, reg, val);
 	pm_runtime_put(bus->parent);
 
 	return res;
@@ -3091,8 +3114,10 @@ static int sh_mdio_init(struct sh_eth_private *mdp,
 		return -ENOMEM;
 
 	/* Wrap accessors with Runtime PM-aware ops */
-	mdp->mii_bus->read = sh_mdiobb_read;
-	mdp->mii_bus->write = sh_mdiobb_write;
+	mdp->mii_bus->read = sh_mdiobb_read_c22;
+	mdp->mii_bus->write = sh_mdiobb_write_c22;
+	mdp->mii_bus->read_c45 = sh_mdiobb_read_c45;
+	mdp->mii_bus->write_c45 = sh_mdiobb_write_c45;
 
 	/* Hook up MII support for ethtool */
 	mdp->mii_bus->name = "sh_mii";
diff --git a/drivers/net/mdio/mdio-bitbang.c b/drivers/net/mdio/mdio-bitbang.c
index 07609114a26b..b83932562be2 100644
--- a/drivers/net/mdio/mdio-bitbang.c
+++ b/drivers/net/mdio/mdio-bitbang.c
@@ -127,14 +127,12 @@ static void mdiobb_cmd(struct mdiobb_ctrl *ctrl, int op, u8 phy, u8 reg)
 
 /* In clause 45 mode all commands are prefixed by MDIO_ADDR to specify the
    lower 16 bits of the 21 bit address. This transfer is done identically to a
-   MDIO_WRITE except for a different code. To enable clause 45 mode or
-   MII_ADDR_C45 into the address. Theoretically clause 45 and normal devices
-   can exist on the same bus. Normal devices should ignore the MDIO_ADDR
+   MDIO_WRITE except for a different code. Theoretically clause 45 and normal
+   devices can exist on the same bus. Normal devices should ignore the MDIO_ADDR
    phase. */
-static int mdiobb_cmd_addr(struct mdiobb_ctrl *ctrl, int phy, u32 addr)
+static void mdiobb_cmd_addr(struct mdiobb_ctrl *ctrl, int phy, int dev_addr,
+			    int reg)
 {
-	unsigned int dev_addr = (addr >> 16) & 0x1F;
-	unsigned int reg = addr & 0xFFFF;
 	mdiobb_cmd(ctrl, MDIO_C45_ADDR, phy, dev_addr);
 
 	/* send the turnaround (10) */
@@ -145,21 +143,13 @@ static int mdiobb_cmd_addr(struct mdiobb_ctrl *ctrl, int phy, u32 addr)
 
 	ctrl->ops->set_mdio_dir(ctrl, 0);
 	mdiobb_get_bit(ctrl);
-
-	return dev_addr;
 }
 
-int mdiobb_read(struct mii_bus *bus, int phy, int reg)
+static int mdiobb_read_common(struct mii_bus *bus, int phy)
 {
 	struct mdiobb_ctrl *ctrl = bus->priv;
 	int ret, i;
 
-	if (reg & MII_ADDR_C45) {
-		reg = mdiobb_cmd_addr(ctrl, phy, reg);
-		mdiobb_cmd(ctrl, MDIO_C45_READ, phy, reg);
-	} else
-		mdiobb_cmd(ctrl, ctrl->op_c22_read, phy, reg);
-
 	ctrl->ops->set_mdio_dir(ctrl, 0);
 
 	/* check the turnaround bit: the PHY should be driving it to zero, if this
@@ -180,17 +170,31 @@ int mdiobb_read(struct mii_bus *bus, int phy, int reg)
 	mdiobb_get_bit(ctrl);
 	return ret;
 }
-EXPORT_SYMBOL(mdiobb_read);
 
-int mdiobb_write(struct mii_bus *bus, int phy, int reg, u16 val)
+int mdiobb_read_c22(struct mii_bus *bus, int phy, int reg)
 {
 	struct mdiobb_ctrl *ctrl = bus->priv;
 
-	if (reg & MII_ADDR_C45) {
-		reg = mdiobb_cmd_addr(ctrl, phy, reg);
-		mdiobb_cmd(ctrl, MDIO_C45_WRITE, phy, reg);
-	} else
-		mdiobb_cmd(ctrl, ctrl->op_c22_write, phy, reg);
+	mdiobb_cmd(ctrl, ctrl->op_c22_read, phy, reg);
+
+	return mdiobb_read_common(bus, phy);
+}
+EXPORT_SYMBOL(mdiobb_read_c22);
+
+int mdiobb_read_c45(struct mii_bus *bus, int phy, int devad, int reg)
+{
+	struct mdiobb_ctrl *ctrl = bus->priv;
+
+	mdiobb_cmd_addr(ctrl, phy, devad, reg);
+	mdiobb_cmd(ctrl, MDIO_C45_READ, phy, reg);
+
+	return mdiobb_read_common(bus, phy);
+}
+EXPORT_SYMBOL(mdiobb_read_c45);
+
+static int mdiobb_write_common(struct mii_bus *bus, u16 val)
+{
+	struct mdiobb_ctrl *ctrl = bus->priv;
 
 	/* send the turnaround (10) */
 	mdiobb_send_bit(ctrl, 1);
@@ -202,7 +206,27 @@ int mdiobb_write(struct mii_bus *bus, int phy, int reg, u16 val)
 	mdiobb_get_bit(ctrl);
 	return 0;
 }
-EXPORT_SYMBOL(mdiobb_write);
+
+int mdiobb_write_c22(struct mii_bus *bus, int phy, int reg, u16 val)
+{
+	struct mdiobb_ctrl *ctrl = bus->priv;
+
+	mdiobb_cmd(ctrl, ctrl->op_c22_write, phy, reg);
+
+	return mdiobb_write_common(bus, val);
+}
+EXPORT_SYMBOL(mdiobb_write_c22);
+
+int mdiobb_write_c45(struct mii_bus *bus, int phy, int devad, int reg, u16 val)
+{
+	struct mdiobb_ctrl *ctrl = bus->priv;
+
+	mdiobb_cmd_addr(ctrl, phy, devad, reg);
+	mdiobb_cmd(ctrl, MDIO_C45_WRITE, phy, reg);
+
+	return mdiobb_write_common(bus, val);
+}
+EXPORT_SYMBOL(mdiobb_write_c45);
 
 struct mii_bus *alloc_mdio_bitbang(struct mdiobb_ctrl *ctrl)
 {
@@ -214,8 +238,11 @@ struct mii_bus *alloc_mdio_bitbang(struct mdiobb_ctrl *ctrl)
 
 	__module_get(ctrl->ops->owner);
 
-	bus->read = mdiobb_read;
-	bus->write = mdiobb_write;
+	bus->read = mdiobb_read_c22;
+	bus->write = mdiobb_write_c22;
+	bus->read_c45 = mdiobb_read_c45;
+	bus->write_c45 = mdiobb_write_c45;
+
 	bus->priv = ctrl;
 	if (!ctrl->override_op_c22) {
 		ctrl->op_c22_read = MDIO_READ;
diff --git a/include/linux/mdio-bitbang.h b/include/linux/mdio-bitbang.h
index 373630fe5c28..cffabdbce075 100644
--- a/include/linux/mdio-bitbang.h
+++ b/include/linux/mdio-bitbang.h
@@ -38,8 +38,10 @@ struct mdiobb_ctrl {
 	u8 op_c22_write;
 };
 
-int mdiobb_read(struct mii_bus *bus, int phy, int reg);
-int mdiobb_write(struct mii_bus *bus, int phy, int reg, u16 val);
+int mdiobb_read_c22(struct mii_bus *bus, int phy, int reg);
+int mdiobb_write_c22(struct mii_bus *bus, int phy, int reg, u16 val);
+int mdiobb_read_c45(struct mii_bus *bus, int devad, int phy, int reg);
+int mdiobb_write_c45(struct mii_bus *bus, int devad, int phy, int reg, u16 val);
 
 /* The returned bus is not yet registered with the phy layer. */
 struct mii_bus *alloc_mdio_bitbang(struct mdiobb_ctrl *ctrl);

-- 
2.30.2


From michael at walle.cc  Tue Dec 27 15:07:18 2022
From: michael at walle.cc (Michael Walle)
Date: Wed, 28 Dec 2022 00:07:18 +0100
Subject: [PATCH RFC net-next v2 02/12] net: pcs: pcs-xpcs: Use C45 MDIO API
In-Reply-To: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
References: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
Message-ID: <20221227-v6-2-rc1-c45-seperation-v2-2-ddb37710e5a7@walle.cc>

From: Andrew Lunn <andrew at lunn.ch>

Convert the PCS-XPCS driver to make use of the C45 MDIO bus API for
modify_change().

Signed-off-by: Andrew Lunn <andrew at lunn.ch>
Signed-off-by: Michael Walle <michael at walle.cc>
---
v2:
 - [al] new patch
---
 drivers/net/pcs/pcs-xpcs.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c
index f6a038a1d51e..bc428a816719 100644
--- a/drivers/net/pcs/pcs-xpcs.c
+++ b/drivers/net/pcs/pcs-xpcs.c
@@ -199,9 +199,7 @@ int xpcs_write(struct dw_xpcs *xpcs, int dev, u32 reg, u16 val)
 static int xpcs_modify_changed(struct dw_xpcs *xpcs, int dev, u32 reg,
 			       u16 mask, u16 set)
 {
-	u32 reg_addr = mdiobus_c45_addr(dev, reg);
-
-	return mdiodev_modify_changed(xpcs->mdiodev, reg_addr, mask, set);
+	return mdiodev_c45_modify_changed(xpcs->mdiodev, dev, reg, mask, set);
 }
 
 static int xpcs_read_vendor(struct dw_xpcs *xpcs, int dev, u32 reg)

-- 
2.30.2


From michael at walle.cc  Tue Dec 27 15:07:17 2022
From: michael at walle.cc (Michael Walle)
Date: Wed, 28 Dec 2022 00:07:17 +0100
Subject: [PATCH RFC net-next v2 00/12] net: mdio: Start separating C22 and C45
Message-ID: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>

I've picked this older series from Andrew up and rebased it onto
v6.2-rc1.

This patch set starts the separation of C22 and C45 MDIO bus
transactions at the API level to the MDIO Bus drivers. C45 read and
write ops are added to the MDIO bus driver structure, and the MDIO
core will try to use these ops if requested to perform a C45
transfer. If not available a fallback to the older API is made, to
allow backwards compatibility until all drivers are converted.

A few drivers are then converted to this new API.

Link to v1: https://lore.kernel.org/netdev/20220508153049.427227-1-andrew at lunn.ch/

To: Heiner Kallweit <hkallweit1 at gmail.com>
To: Russell King <linux at armlinux.org.uk>
To: "David S. Miller" <davem at davemloft.net>
To: Eric Dumazet <edumazet at google.com>
To: Jakub Kicinski <kuba at kernel.org>
To: Paolo Abeni <pabeni at redhat.com>
To: Jose Abreu <Jose.Abreu at synopsys.com>
To: Sergey Shtylyov <s.shtylyov at omp.ru>
To: Wei Fang <wei.fang at nxp.com>
To: Shenwei Wang <shenwei.wang at nxp.com>
To: Clark Wang <xiaoning.wang at nxp.com>
To: NXP Linux Team <linux-imx at nxp.com>
To: Sean Wang <sean.wang at mediatek.com>
To: Landen Chao <Landen.Chao at mediatek.com>
To: DENG Qingfang <dqfext at gmail.com>
To: Florian Fainelli <f.fainelli at gmail.com>
To: Vladimir Oltean <olteanv at gmail.com>
To: Matthias Brugger <matthias.bgg at gmail.com>
Cc: netdev at vger.kernel.org
Cc: linux-kernel at vger.kernel.org
Cc: linux-renesas-soc at vger.kernel.org
Cc: linux-arm-kernel at lists.infradead.org
Cc: linux-mediatek at lists.infradead.org
Cc: Andrew Lunn <andrew at lunn.ch>
Cc: Geert Uytterhoeven <geert+renesas at glider.be>

---
Andrew Lunn (12):
      net: mdio: Add dedicated C45 API to MDIO bus drivers
      net: pcs: pcs-xpcs: Use C45 MDIO API
      net: mdio: mdiobus_register: update validation test
      net: mdio: C22 is now optional, EOPNOTSUPP if not provided
      net: mdio: Move mdiobus_c45_addr() next to users
      net: mdio: mdio-bitbang: Separate C22 and C45 transactions
      net: mdio: mvmdio: Convert XSMI bus to new API
      net: ethernet: freescale: xgmac: Separate C22 and C45 transactions for xgmac
      net: ethernet: freescale: fec: Separate C22 and C45 transactions for xgmac
      net: mdio: add mdiobus_c45_read/write_nested helpers
      net: dsa: Separate C22 and C45 MDIO bus transaction methods
      net: dsa: mv88e6xxx: Separate C22 and C45 transactions

 drivers/net/dsa/mt7530.c                    |  87 ++++-----
 drivers/net/dsa/mt7530.h                    |  15 +-
 drivers/net/dsa/mv88e6xxx/chip.c            | 175 +++++++++++++-----
 drivers/net/dsa/mv88e6xxx/chip.h            |   7 +
 drivers/net/dsa/mv88e6xxx/global2.c         |  66 ++++---
 drivers/net/dsa/mv88e6xxx/global2.h         |  18 +-
 drivers/net/dsa/mv88e6xxx/phy.c             |  32 ++++
 drivers/net/dsa/mv88e6xxx/phy.h             |   4 +
 drivers/net/dsa/mv88e6xxx/serdes.c          |   8 +-
 drivers/net/ethernet/freescale/fec_main.c   | 153 +++++++++++-----
 drivers/net/ethernet/freescale/xgmac_mdio.c | 150 +++++++++++----
 drivers/net/ethernet/marvell/mvmdio.c       |  24 +--
 drivers/net/ethernet/renesas/sh_eth.c       |  37 +++-
 drivers/net/mdio/mdio-bitbang.c             |  77 +++++---
 drivers/net/pcs/pcs-xpcs.c                  |   4 +-
 drivers/net/phy/mdio_bus.c                  | 273 +++++++++++++++++++++++++++-
 include/linux/mdio-bitbang.h                |   6 +-
 include/linux/mdio.h                        |  48 ++---
 include/linux/phy.h                         |   5 +
 include/net/dsa.h                           |   2 +-
 20 files changed, 891 insertions(+), 300 deletions(-)
---
base-commit: 1b929c02afd37871d5afb9d498426f83432e71c2
change-id: 20221227-v6-2-rc1-c45-seperation-53f762440aa1

Best regards,
-- 
Michael Walle <michael at walle.cc>


From michael at walle.cc  Tue Dec 27 15:07:20 2022
From: michael at walle.cc (Michael Walle)
Date: Wed, 28 Dec 2022 00:07:20 +0100
Subject: [PATCH RFC net-next v2 04/12] net: mdio: C22 is now optional,
 EOPNOTSUPP if not provided
In-Reply-To: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
References: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
Message-ID: <20221227-v6-2-rc1-c45-seperation-v2-4-ddb37710e5a7@walle.cc>

From: Andrew Lunn <andrew at lunn.ch>

When performing a C22 operation, check that the bus driver actually
provides the methods, and return -EOPNOTSUPP if not. C45 only busses
do exist, and in future their C22 methods will be NULL.

Signed-off-by: Andrew Lunn <andrew at lunn.ch>
Signed-off-by: Michael Walle <michael at walle.cc>
---
 drivers/net/phy/mdio_bus.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index d14d7704e895..20ba38a346fe 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -769,7 +769,10 @@ int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum)
 
 	lockdep_assert_held_once(&bus->mdio_lock);
 
-	retval = bus->read(bus, addr, regnum);
+	if (bus->read)
+		retval = bus->read(bus, addr, regnum);
+	else
+		retval = -EOPNOTSUPP;
 
 	trace_mdio_access(bus, 1, addr, regnum, retval, retval);
 	mdiobus_stats_acct(&bus->stats[addr], true, retval);
@@ -795,7 +798,10 @@ int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val)
 
 	lockdep_assert_held_once(&bus->mdio_lock);
 
-	err = bus->write(bus, addr, regnum, val);
+	if (bus->write)
+		err = bus->write(bus, addr, regnum, val);
+	else
+		err = -EOPNOTSUPP;
 
 	trace_mdio_access(bus, 0, addr, regnum, val, err);
 	mdiobus_stats_acct(&bus->stats[addr], false, err);

-- 
2.30.2


From michael at walle.cc  Tue Dec 27 15:07:17 2022
From: michael at walle.cc (Michael Walle)
Date: Wed, 28 Dec 2022 00:07:17 +0100
Subject: [PATCH RFC net-next v2 01/12] net: mdio: Add dedicated C45 API to
 MDIO bus drivers
In-Reply-To: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
References: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
Message-ID: <20221227-v6-2-rc1-c45-seperation-v2-1-ddb37710e5a7@walle.cc>

From: Andrew Lunn <andrew at lunn.ch>

Currently C22 and C45 transactions are mixed over a combined API calls
which make use of a special bit in the reg address to indicate if a
C45 transaction should be performed. This makes it impossible to know
if the bus driver actually supports C45. Additionally, many C22 only
drivers don't return -EOPNOTSUPP when asked to perform a C45
transaction, they mistaking perform a C22 transaction.

This is the first step to cleanly separate C22 from C45. To maintain
backwards compatibility until all drivers which are capable of
performing C45 are converted to this new API, the helper functions
will fall back to the older API if the new API is not
supported. Eventually this fallback will be removed.

Signed-off-by: Andrew Lunn <andrew at lunn.ch>
Signed-off-by: Michael Walle <michael at walle.cc>
---
 drivers/net/phy/mdio_bus.c | 189 +++++++++++++++++++++++++++++++++++++++++++++
 include/linux/mdio.h       |  39 +++++-----
 include/linux/phy.h        |   5 ++
 3 files changed, 214 insertions(+), 19 deletions(-)

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index 1cd604cd1fa1..bde195864c17 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -826,6 +826,100 @@ int __mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum,
 }
 EXPORT_SYMBOL_GPL(__mdiobus_modify_changed);
 
+/**
+ * __mdiobus_c45_read - Unlocked version of the mdiobus_c45_read function
+ * @bus: the mii_bus struct
+ * @addr: the phy address
+ * @devad: device address to read
+ * @regnum: register number to read
+ *
+ * Read a MDIO bus register. Caller must hold the mdio bus lock.
+ *
+ * NOTE: MUST NOT be called from interrupt context.
+ */
+int __mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum)
+{
+	int retval;
+
+	lockdep_assert_held_once(&bus->mdio_lock);
+
+	if (bus->read_c45)
+		retval = bus->read_c45(bus, addr, devad, regnum);
+	else
+		retval = bus->read(bus, addr, mdiobus_c45_addr(devad, regnum));
+
+	trace_mdio_access(bus, 1, addr, regnum, retval, retval);
+	mdiobus_stats_acct(&bus->stats[addr], true, retval);
+
+	return retval;
+}
+EXPORT_SYMBOL(__mdiobus_c45_read);
+
+/**
+ * __mdiobus_c45_write - Unlocked version of the mdiobus_write function
+ * @bus: the mii_bus struct
+ * @addr: the phy address
+ * @devad: device address to read
+ * @regnum: register number to write
+ * @val: value to write to @regnum
+ *
+ * Write a MDIO bus register. Caller must hold the mdio bus lock.
+ *
+ * NOTE: MUST NOT be called from interrupt context.
+ */
+int __mdiobus_c45_write(struct mii_bus *bus, int addr, int devad, u32 regnum,
+			u16 val)
+{
+	int err;
+
+	lockdep_assert_held_once(&bus->mdio_lock);
+
+	if (bus->write_c45)
+		err = bus->write_c45(bus, addr, devad, regnum, val);
+	else
+		err = bus->write(bus, addr, mdiobus_c45_addr(devad, regnum),
+				 val);
+
+	trace_mdio_access(bus, 0, addr, regnum, val, err);
+	mdiobus_stats_acct(&bus->stats[addr], false, err);
+
+	return err;
+}
+EXPORT_SYMBOL(__mdiobus_c45_write);
+
+/**
+ * __mdiobus_c45_modify_changed - Unlocked version of the mdiobus_modify function
+ * @bus: the mii_bus struct
+ * @addr: the phy address
+ * @devad: device address to read
+ * @regnum: register number to modify
+ * @mask: bit mask of bits to clear
+ * @set: bit mask of bits to set
+ *
+ * Read, modify, and if any change, write the register value back to the
+ * device. Any error returns a negative number.
+ *
+ * NOTE: MUST NOT be called from interrupt context.
+ */
+static int __mdiobus_c45_modify_changed(struct mii_bus *bus, int addr,
+					int devad, u32 regnum, u16 mask,
+					u16 set)
+{
+	int new, ret;
+
+	ret = __mdiobus_c45_read(bus, addr, devad, regnum);
+	if (ret < 0)
+		return ret;
+
+	new = (ret & ~mask) | set;
+	if (new == ret)
+		return 0;
+
+	ret = __mdiobus_c45_write(bus, addr, devad, regnum, new);
+
+	return ret < 0 ? ret : 1;
+}
+
 /**
  * mdiobus_read_nested - Nested version of the mdiobus_read function
  * @bus: the mii_bus struct
@@ -873,6 +967,29 @@ int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum)
 }
 EXPORT_SYMBOL(mdiobus_read);
 
+/**
+ * mdiobus_c45_read - Convenience function for reading a given MII mgmt register
+ * @bus: the mii_bus struct
+ * @addr: the phy address
+ * @devad: device address to read
+ * @regnum: register number to read
+ *
+ * NOTE: MUST NOT be called from interrupt context,
+ * because the bus read/write functions may wait for an interrupt
+ * to conclude the operation.
+ */
+int mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum)
+{
+	int retval;
+
+	mutex_lock(&bus->mdio_lock);
+	retval = __mdiobus_c45_read(bus, addr, devad, regnum);
+	mutex_unlock(&bus->mdio_lock);
+
+	return retval;
+}
+EXPORT_SYMBOL(mdiobus_c45_read);
+
 /**
  * mdiobus_write_nested - Nested version of the mdiobus_write function
  * @bus: the mii_bus struct
@@ -922,6 +1039,31 @@ int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val)
 }
 EXPORT_SYMBOL(mdiobus_write);
 
+/**
+ * mdiobus_c45_write - Convenience function for writing a given MII mgmt register
+ * @bus: the mii_bus struct
+ * @addr: the phy address
+ * @devad: device address to read
+ * @regnum: register number to write
+ * @val: value to write to @regnum
+ *
+ * NOTE: MUST NOT be called from interrupt context,
+ * because the bus read/write functions may wait for an interrupt
+ * to conclude the operation.
+ */
+int mdiobus_c45_write(struct mii_bus *bus, int addr, int devad, u32 regnum,
+		      u16 val)
+{
+	int err;
+
+	mutex_lock(&bus->mdio_lock);
+	err = __mdiobus_c45_write(bus, addr, devad, regnum, val);
+	mutex_unlock(&bus->mdio_lock);
+
+	return err;
+}
+EXPORT_SYMBOL(mdiobus_c45_write);
+
 /**
  * mdiobus_modify - Convenience function for modifying a given mdio device
  *	register
@@ -943,6 +1085,30 @@ int mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask, u16 set)
 }
 EXPORT_SYMBOL_GPL(mdiobus_modify);
 
+/**
+ * mdiobus_c45_modify - Convenience function for modifying a given mdio device
+ *	register
+ * @bus: the mii_bus struct
+ * @addr: the phy address
+ * @devad: device address to read
+ * @regnum: register number to write
+ * @mask: bit mask of bits to clear
+ * @set: bit mask of bits to set
+ */
+int mdiobus_c45_modify(struct mii_bus *bus, int addr, int devad, u32 regnum,
+		       u16 mask, u16 set)
+{
+	int err;
+
+	mutex_lock(&bus->mdio_lock);
+	err = __mdiobus_c45_modify_changed(bus, addr, devad, regnum,
+					   mask, set);
+	mutex_unlock(&bus->mdio_lock);
+
+	return err < 0 ? err : 0;
+}
+EXPORT_SYMBOL_GPL(mdiobus_c45_modify);
+
 /**
  * mdiobus_modify_changed - Convenience function for modifying a given mdio
  *	device register and returning if it changed
@@ -965,6 +1131,29 @@ int mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum,
 }
 EXPORT_SYMBOL_GPL(mdiobus_modify_changed);
 
+/**
+ * mdiobus_c45_modify_changed - Convenience function for modifying a given mdio
+ *	device register and returning if it changed
+ * @bus: the mii_bus struct
+ * @addr: the phy address
+ * @devad: device address to read
+ * @regnum: register number to write
+ * @mask: bit mask of bits to clear
+ * @set: bit mask of bits to set
+ */
+int mdiobus_c45_modify_changed(struct mii_bus *bus, int devad, int addr,
+			       u32 regnum, u16 mask, u16 set)
+{
+	int err;
+
+	mutex_lock(&bus->mdio_lock);
+	err = __mdiobus_c45_modify_changed(bus, addr, devad, regnum, mask, set);
+	mutex_unlock(&bus->mdio_lock);
+
+	return err;
+}
+EXPORT_SYMBOL_GPL(mdiobus_c45_modify_changed);
+
 /**
  * mdio_bus_match - determine if given MDIO driver supports the given
  *		    MDIO device
diff --git a/include/linux/mdio.h b/include/linux/mdio.h
index f7fbbf3069e7..1e78c8410b21 100644
--- a/include/linux/mdio.h
+++ b/include/linux/mdio.h
@@ -423,6 +423,17 @@ int mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask,
 		   u16 set);
 int mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum,
 			   u16 mask, u16 set);
+int __mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum);
+int mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum);
+int __mdiobus_c45_write(struct mii_bus *bus, int addr,  int devad, u32 regnum,
+			u16 val);
+int mdiobus_c45_write(struct mii_bus *bus, int addr,  int devad, u32 regnum,
+		      u16 val);
+int mdiobus_c45_modify(struct mii_bus *bus, int addr, int devad, u32 regnum,
+		       u16 mask, u16 set);
+
+int mdiobus_c45_modify_changed(struct mii_bus *bus, int addr, int devad,
+			       u32 regnum, u16 mask, u16 set);
 
 static inline int mdiodev_read(struct mdio_device *mdiodev, u32 regnum)
 {
@@ -463,29 +474,19 @@ static inline u16 mdiobus_c45_devad(u32 regnum)
 	return FIELD_GET(MII_DEVADDR_C45_MASK, regnum);
 }
 
-static inline int __mdiobus_c45_read(struct mii_bus *bus, int prtad, int devad,
-				     u16 regnum)
+static inline int mdiodev_c45_modify(struct mdio_device *mdiodev, int devad,
+				     u32 regnum, u16 mask, u16 set)
 {
-	return __mdiobus_read(bus, prtad, mdiobus_c45_addr(devad, regnum));
+	return mdiobus_c45_modify(mdiodev->bus, mdiodev->addr, devad, regnum,
+				  mask, set);
 }
 
-static inline int __mdiobus_c45_write(struct mii_bus *bus, int prtad, int devad,
-				      u16 regnum, u16 val)
+static inline int mdiodev_c45_modify_changed(struct mdio_device *mdiodev,
+					     int devad, u32 regnum, u16 mask,
+					     u16 set)
 {
-	return __mdiobus_write(bus, prtad, mdiobus_c45_addr(devad, regnum),
-			       val);
-}
-
-static inline int mdiobus_c45_read(struct mii_bus *bus, int prtad, int devad,
-				   u16 regnum)
-{
-	return mdiobus_read(bus, prtad, mdiobus_c45_addr(devad, regnum));
-}
-
-static inline int mdiobus_c45_write(struct mii_bus *bus, int prtad, int devad,
-				    u16 regnum, u16 val)
-{
-	return mdiobus_write(bus, prtad, mdiobus_c45_addr(devad, regnum), val);
+	return mdiobus_c45_modify_changed(mdiodev->bus, mdiodev->addr, devad,
+					  regnum, mask, set);
 }
 
 static inline int mdiodev_c45_read(struct mdio_device *mdiodev, int devad,
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 71eeb4e3b1fd..c33ad3255e3a 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -364,6 +364,11 @@ struct mii_bus {
 	int (*read)(struct mii_bus *bus, int addr, int regnum);
 	/** @write: Perform a write transfer on the bus */
 	int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val);
+	/** @read: Perform a C45 read transfer on the bus */
+	int (*read_c45)(struct mii_bus *bus, int addr, int devnum, int regnum);
+	/** @write: Perform a C45 write transfer on the bus */
+	int (*write_c45)(struct mii_bus *bus, int addr, int devnum,
+			 int regnum, u16 val);
 	/** @reset: Perform a reset of the bus */
 	int (*reset)(struct mii_bus *bus);
 

-- 
2.30.2


From michael at walle.cc  Tue Dec 27 15:07:23 2022
From: michael at walle.cc (Michael Walle)
Date: Wed, 28 Dec 2022 00:07:23 +0100
Subject: [PATCH RFC net-next v2 07/12] net: mdio: mvmdio: Convert XSMI bus to new API
In-Reply-To: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
References: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
Message-ID: <20221227-v6-2-rc1-c45-seperation-v2-7-ddb37710e5a7@walle.cc>

From: Andrew Lunn <andrew at lunn.ch>

The marvell MDIO driver supports two different hardware blocks. The
XSMI block is C45 only. Convert this block to the new API, and only
populate the c45 calls in the bus structure.

Signed-off-by: Andrew Lunn <andrew at lunn.ch>
Signed-off-by: Michael Walle <michael at walle.cc>
---
 drivers/net/ethernet/marvell/mvmdio.c | 24 ++++++++----------------
 1 file changed, 8 insertions(+), 16 deletions(-)

diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
index ef878973b859..2d654a40af13 100644
--- a/drivers/net/ethernet/marvell/mvmdio.c
+++ b/drivers/net/ethernet/marvell/mvmdio.c
@@ -204,21 +204,17 @@ static const struct orion_mdio_ops orion_mdio_xsmi_ops = {
 	.poll_interval_max = MVMDIO_XSMI_POLL_INTERVAL_MAX,
 };
 
-static int orion_mdio_xsmi_read(struct mii_bus *bus, int mii_id,
-				int regnum)
+static int orion_mdio_xsmi_read_c45(struct mii_bus *bus, int mii_id,
+				    int dev_addr, int regnum)
 {
 	struct orion_mdio_dev *dev = bus->priv;
-	u16 dev_addr = (regnum >> 16) & GENMASK(4, 0);
 	int ret;
 
-	if (!(regnum & MII_ADDR_C45))
-		return -EOPNOTSUPP;
-
 	ret = orion_mdio_wait_ready(&orion_mdio_xsmi_ops, bus);
 	if (ret < 0)
 		return ret;
 
-	writel(regnum & GENMASK(15, 0), dev->regs + MVMDIO_XSMI_ADDR_REG);
+	writel(regnum, dev->regs + MVMDIO_XSMI_ADDR_REG);
 	writel((mii_id << MVMDIO_XSMI_PHYADDR_SHIFT) |
 	       (dev_addr << MVMDIO_XSMI_DEVADDR_SHIFT) |
 	       MVMDIO_XSMI_READ_OPERATION,
@@ -237,21 +233,17 @@ static int orion_mdio_xsmi_read(struct mii_bus *bus, int mii_id,
 	return readl(dev->regs + MVMDIO_XSMI_MGNT_REG) & GENMASK(15, 0);
 }
 
-static int orion_mdio_xsmi_write(struct mii_bus *bus, int mii_id,
-				int regnum, u16 value)
+static int orion_mdio_xsmi_write_c45(struct mii_bus *bus, int mii_id,
+				     int dev_addr, int regnum, u16 value)
 {
 	struct orion_mdio_dev *dev = bus->priv;
-	u16 dev_addr = (regnum >> 16) & GENMASK(4, 0);
 	int ret;
 
-	if (!(regnum & MII_ADDR_C45))
-		return -EOPNOTSUPP;
-
 	ret = orion_mdio_wait_ready(&orion_mdio_xsmi_ops, bus);
 	if (ret < 0)
 		return ret;
 
-	writel(regnum & GENMASK(15, 0), dev->regs + MVMDIO_XSMI_ADDR_REG);
+	writel(regnum, dev->regs + MVMDIO_XSMI_ADDR_REG);
 	writel((mii_id << MVMDIO_XSMI_PHYADDR_SHIFT) |
 	       (dev_addr << MVMDIO_XSMI_DEVADDR_SHIFT) |
 	       MVMDIO_XSMI_WRITE_OPERATION | value,
@@ -302,8 +294,8 @@ static int orion_mdio_probe(struct platform_device *pdev)
 		bus->write = orion_mdio_smi_write;
 		break;
 	case BUS_TYPE_XSMI:
-		bus->read = orion_mdio_xsmi_read;
-		bus->write = orion_mdio_xsmi_write;
+		bus->read_c45 = orion_mdio_xsmi_read_c45;
+		bus->write_c45 = orion_mdio_xsmi_write_c45;
 		break;
 	}
 

-- 
2.30.2


From michael at walle.cc  Tue Dec 27 15:07:21 2022
From: michael at walle.cc (Michael Walle)
Date: Wed, 28 Dec 2022 00:07:21 +0100
Subject: [PATCH RFC net-next v2 05/12] net: mdio: Move mdiobus_c45_addr() next
 to users
In-Reply-To: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
References: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
Message-ID: <20221227-v6-2-rc1-c45-seperation-v2-5-ddb37710e5a7@walle.cc>

From: Andrew Lunn <andrew at lunn.ch>

Now that mdiobus_c45_addr() is only used within the MDIO code during
fallback, move the function next to its only users. This function
should not be used any more in drivers, the c45 helpers should be used
in its place, so hiding it away will prevent any new users from being
added.

Signed-off-by: Andrew Lunn <andrew at lunn.ch>
Signed-off-by: Michael Walle <michael at walle.cc>
---
 drivers/net/phy/mdio_bus.c | 5 +++++
 include/linux/mdio.h       | 5 -----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index 20ba38a346fe..0b04ce3766c8 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -842,6 +842,11 @@ int __mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum,
 }
 EXPORT_SYMBOL_GPL(__mdiobus_modify_changed);
 
+static u32 mdiobus_c45_addr(int devad, u16 regnum)
+{
+	return MII_ADDR_C45 | devad << MII_DEVADDR_C45_SHIFT | regnum;
+}
+
 /**
  * __mdiobus_c45_read - Unlocked version of the mdiobus_c45_read function
  * @bus: the mii_bus struct
diff --git a/include/linux/mdio.h b/include/linux/mdio.h
index 1e78c8410b21..97b49765e8b5 100644
--- a/include/linux/mdio.h
+++ b/include/linux/mdio.h
@@ -459,11 +459,6 @@ static inline int mdiodev_modify_changed(struct mdio_device *mdiodev,
 				      mask, set);
 }
 
-static inline u32 mdiobus_c45_addr(int devad, u16 regnum)
-{
-	return MII_ADDR_C45 | devad << MII_DEVADDR_C45_SHIFT | regnum;
-}
-
 static inline u16 mdiobus_c45_regad(u32 regnum)
 {
 	return FIELD_GET(MII_REGADDR_C45_MASK, regnum);

-- 
2.30.2


From michael at walle.cc  Tue Dec 27 15:07:27 2022
From: michael at walle.cc (Michael Walle)
Date: Wed, 28 Dec 2022 00:07:27 +0100
Subject: [PATCH RFC net-next v2 11/12] net: dsa: Separate C22 and C45 MDIO bus
 transaction methods
In-Reply-To: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
References: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
Message-ID: <20221227-v6-2-rc1-c45-seperation-v2-11-ddb37710e5a7@walle.cc>

From: Andrew Lunn <andrew at lunn.ch>

By adding _c45 function pointers to the dsa_switch_op structure, the
dsa core can register an MDIO bus with C45 accessors.

The dsa-loop driver could in theory provide such accessors, since it
just passed requests to the MDIO bus it is on, but it seems unlikely
to be useful at the moment. It can however be added later.

mt7530 does support C45, but its uses a mix of registering its MDIO
bus and using the DSA core provided bus. This makes the change a bit
more complex.

Signed-off-by: Andrew Lunn <andrew at lunn.ch>
Signed-off-by: Michael Walle <michael at walle.cc>
---
v2:
 - [al] Remove conditional c45, since all switches support c45
 - [al] Remove dsa core changes, they are not needed
 - [al] Add comment that DSA provided MDIO bus is C22 only.
---
 drivers/net/dsa/mt7530.c | 87 ++++++++++++++++++++++++------------------------
 drivers/net/dsa/mt7530.h | 15 ++++++---
 include/net/dsa.h        |  2 +-
 3 files changed, 56 insertions(+), 48 deletions(-)

diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
index 908fa89444c9..616b21c90d05 100644
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -608,17 +608,29 @@ mt7530_mib_reset(struct dsa_switch *ds)
 	mt7530_write(priv, MT7530_MIB_CCR, CCR_MIB_ACTIVATE);
 }
 
-static int mt7530_phy_read(struct mt7530_priv *priv, int port, int regnum)
+static int mt7530_phy_read_c22(struct mt7530_priv *priv, int port, int regnum)
 {
 	return mdiobus_read_nested(priv->bus, port, regnum);
 }
 
-static int mt7530_phy_write(struct mt7530_priv *priv, int port, int regnum,
-			    u16 val)
+static int mt7530_phy_write_c22(struct mt7530_priv *priv, int port, int regnum,
+				u16 val)
 {
 	return mdiobus_write_nested(priv->bus, port, regnum, val);
 }
 
+static int mt7530_phy_read_c45(struct mt7530_priv *priv, int port,
+			       int devad, int regnum)
+{
+	return mdiobus_c45_read_nested(priv->bus, port, devad, regnum);
+}
+
+static int mt7530_phy_write_c45(struct mt7530_priv *priv, int port, int devad,
+				int regnum, u16 val)
+{
+	return mdiobus_c45_write_nested(priv->bus, port, devad, regnum, val);
+}
+
 static int
 mt7531_ind_c45_phy_read(struct mt7530_priv *priv, int port, int devad,
 			int regnum)
@@ -670,7 +682,7 @@ mt7531_ind_c45_phy_read(struct mt7530_priv *priv, int port, int devad,
 
 static int
 mt7531_ind_c45_phy_write(struct mt7530_priv *priv, int port, int devad,
-			 int regnum, u32 data)
+			 int regnum, u16 data)
 {
 	struct mii_bus *bus = priv->bus;
 	struct mt7530_dummy_poll p;
@@ -793,55 +805,36 @@ mt7531_ind_c22_phy_write(struct mt7530_priv *priv, int port, int regnum,
 }
 
 static int
-mt7531_ind_phy_read(struct mt7530_priv *priv, int port, int regnum)
+mt753x_phy_read_c22(struct mii_bus *bus, int port, int regnum)
 {
-	int devad;
-	int ret;
-
-	if (regnum & MII_ADDR_C45) {
-		devad = (regnum >> MII_DEVADDR_C45_SHIFT) & 0x1f;
-		ret = mt7531_ind_c45_phy_read(priv, port, devad,
-					      regnum & MII_REGADDR_C45_MASK);
-	} else {
-		ret = mt7531_ind_c22_phy_read(priv, port, regnum);
-	}
+	struct mt7530_priv *priv = bus->priv;
 
-	return ret;
+	return priv->info->phy_read_c22(priv, port, regnum);
 }
 
 static int
-mt7531_ind_phy_write(struct mt7530_priv *priv, int port, int regnum,
-		     u16 data)
+mt753x_phy_read_c45(struct mii_bus *bus, int port, int devad, int regnum)
 {
-	int devad;
-	int ret;
-
-	if (regnum & MII_ADDR_C45) {
-		devad = (regnum >> MII_DEVADDR_C45_SHIFT) & 0x1f;
-		ret = mt7531_ind_c45_phy_write(priv, port, devad,
-					       regnum & MII_REGADDR_C45_MASK,
-					       data);
-	} else {
-		ret = mt7531_ind_c22_phy_write(priv, port, regnum, data);
-	}
+	struct mt7530_priv *priv = bus->priv;
 
-	return ret;
+	return priv->info->phy_read_c45(priv, port, devad, regnum);
 }
 
 static int
-mt753x_phy_read(struct mii_bus *bus, int port, int regnum)
+mt753x_phy_write_c22(struct mii_bus *bus, int port, int regnum, u16 val)
 {
 	struct mt7530_priv *priv = bus->priv;
 
-	return priv->info->phy_read(priv, port, regnum);
+	return priv->info->phy_write_c22(priv, port, regnum, val);
 }
 
 static int
-mt753x_phy_write(struct mii_bus *bus, int port, int regnum, u16 val)
+mt753x_phy_write_c45(struct mii_bus *bus, int port, int devad, int regnum,
+		     u16 val)
 {
 	struct mt7530_priv *priv = bus->priv;
 
-	return priv->info->phy_write(priv, port, regnum, val);
+	return priv->info->phy_write_c45(priv, port, devad, regnum, val);
 }
 
 static void
@@ -2086,8 +2079,10 @@ mt7530_setup_mdio(struct mt7530_priv *priv)
 	bus->priv = priv;
 	bus->name = KBUILD_MODNAME "-mii";
 	snprintf(bus->id, MII_BUS_ID_SIZE, KBUILD_MODNAME "-%d", idx++);
-	bus->read = mt753x_phy_read;
-	bus->write = mt753x_phy_write;
+	bus->read = mt753x_phy_read_c22;
+	bus->write = mt753x_phy_write_c22;
+	bus->read_c45 = mt753x_phy_read_c45;
+	bus->write_c45 = mt753x_phy_write_c45;
 	bus->parent = dev;
 	bus->phy_mask = ~ds->phys_mii_mask;
 
@@ -3182,8 +3177,10 @@ static const struct mt753x_info mt753x_table[] = {
 		.id = ID_MT7621,
 		.pcs_ops = &mt7530_pcs_ops,
 		.sw_setup = mt7530_setup,
-		.phy_read = mt7530_phy_read,
-		.phy_write = mt7530_phy_write,
+		.phy_read_c22 = mt7530_phy_read_c22,
+		.phy_write_c22 = mt7530_phy_write_c22,
+		.phy_read_c45 = mt7530_phy_read_c45,
+		.phy_write_c45 = mt7530_phy_write_c45,
 		.pad_setup = mt7530_pad_clk_setup,
 		.mac_port_get_caps = mt7530_mac_port_get_caps,
 		.mac_port_config = mt7530_mac_config,
@@ -3192,8 +3189,10 @@ static const struct mt753x_info mt753x_table[] = {
 		.id = ID_MT7530,
 		.pcs_ops = &mt7530_pcs_ops,
 		.sw_setup = mt7530_setup,
-		.phy_read = mt7530_phy_read,
-		.phy_write = mt7530_phy_write,
+		.phy_read_c22 = mt7530_phy_read_c22,
+		.phy_write_c22 = mt7530_phy_write_c22,
+		.phy_read_c45 = mt7530_phy_read_c45,
+		.phy_write_c45 = mt7530_phy_write_c45,
 		.pad_setup = mt7530_pad_clk_setup,
 		.mac_port_get_caps = mt7530_mac_port_get_caps,
 		.mac_port_config = mt7530_mac_config,
@@ -3202,8 +3201,10 @@ static const struct mt753x_info mt753x_table[] = {
 		.id = ID_MT7531,
 		.pcs_ops = &mt7531_pcs_ops,
 		.sw_setup = mt7531_setup,
-		.phy_read = mt7531_ind_phy_read,
-		.phy_write = mt7531_ind_phy_write,
+		.phy_read_c22 = mt7531_ind_c22_phy_read,
+		.phy_write_c22 = mt7531_ind_c22_phy_write,
+		.phy_read_c45 = mt7531_ind_c45_phy_read,
+		.phy_write_c45 = mt7531_ind_c45_phy_write,
 		.pad_setup = mt7531_pad_setup,
 		.cpu_port_config = mt7531_cpu_port_config,
 		.mac_port_get_caps = mt7531_mac_port_get_caps,
@@ -3263,7 +3264,7 @@ mt7530_probe(struct mdio_device *mdiodev)
 	 * properly.
 	 */
 	if (!priv->info->sw_setup || !priv->info->pad_setup ||
-	    !priv->info->phy_read || !priv->info->phy_write ||
+	    !priv->info->phy_read_c22 || !priv->info->phy_write_c22 ||
 	    !priv->info->mac_port_get_caps ||
 	    !priv->info->mac_port_config)
 		return -EINVAL;
diff --git a/drivers/net/dsa/mt7530.h b/drivers/net/dsa/mt7530.h
index e8d966435350..6b2fc6290ea8 100644
--- a/drivers/net/dsa/mt7530.h
+++ b/drivers/net/dsa/mt7530.h
@@ -750,8 +750,10 @@ struct mt753x_pcs {
 /* struct mt753x_info -	This is the main data structure for holding the specific
  *			part for each supported device
  * @sw_setup:		Holding the handler to a device initialization
- * @phy_read:		Holding the way reading PHY port
- * @phy_write:		Holding the way writing PHY port
+ * @phy_read_c22:	Holding the way reading PHY port using C22
+ * @phy_write_c22:	Holding the way writing PHY port using C22
+ * @phy_read_c45:	Holding the way reading PHY port using C45
+ * @phy_write_c45:	Holding the way writing PHY port using C45
  * @pad_setup:		Holding the way setting up the bus pad for a certain
  *			MAC port
  * @phy_mode_supported:	Check if the PHY type is being supported on a certain
@@ -767,8 +769,13 @@ struct mt753x_info {
 	const struct phylink_pcs_ops *pcs_ops;
 
 	int (*sw_setup)(struct dsa_switch *ds);
-	int (*phy_read)(struct mt7530_priv *priv, int port, int regnum);
-	int (*phy_write)(struct mt7530_priv *priv, int port, int regnum, u16 val);
+	int (*phy_read_c22)(struct mt7530_priv *priv, int port, int regnum);
+	int (*phy_write_c22)(struct mt7530_priv *priv, int port, int regnum,
+			     u16 val);
+	int (*phy_read_c45)(struct mt7530_priv *priv, int port, int devad,
+			    int regnum);
+	int (*phy_write_c45)(struct mt7530_priv *priv, int port, int devad,
+			     int regnum, u16 val);
 	int (*pad_setup)(struct dsa_switch *ds, phy_interface_t interface);
 	int (*cpu_port_config)(struct dsa_switch *ds, int port);
 	void (*mac_port_get_caps)(struct dsa_switch *ds, int port,
diff --git a/include/net/dsa.h b/include/net/dsa.h
index 96086289aa9b..732c7bc261a9 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -858,7 +858,7 @@ struct dsa_switch_ops {
 	u32	(*get_phy_flags)(struct dsa_switch *ds, int port);
 
 	/*
-	 * Access to the switch's PHY registers.
+	 * Access to the switch's PHY registers. C22 only.
 	 */
 	int	(*phy_read)(struct dsa_switch *ds, int port, int regnum);
 	int	(*phy_write)(struct dsa_switch *ds, int port,

-- 
2.30.2


From michael at walle.cc  Tue Dec 27 15:07:24 2022
From: michael at walle.cc (Michael Walle)
Date: Wed, 28 Dec 2022 00:07:24 +0100
Subject: [PATCH RFC net-next v2 08/12] net: ethernet: freescale: xgmac:
 Separate C22 and C45 transactions for xgmac
In-Reply-To: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
References: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
Message-ID: <20221227-v6-2-rc1-c45-seperation-v2-8-ddb37710e5a7@walle.cc>

From: Andrew Lunn <andrew at lunn.ch>

The xgmac MDIO bus driver can perform both C22 and C45 transfers.
Create separate functions for each and register the C45 versions using
the new API calls where appropriate.

Signed-off-by: Andrew Lunn <andrew at lunn.ch>
Signed-off-by: Michael Walle <michael at walle.cc>
---
v2:
 - [al] Move the masking of regnum into the variable declarations
 - [al] Remove a couple of blank lines
---
 drivers/net/ethernet/freescale/xgmac_mdio.c | 150 +++++++++++++++++++++-------
 1 file changed, 113 insertions(+), 37 deletions(-)

diff --git a/drivers/net/ethernet/freescale/xgmac_mdio.c b/drivers/net/ethernet/freescale/xgmac_mdio.c
index d7d39a58cd80..1861cf14f4d7 100644
--- a/drivers/net/ethernet/freescale/xgmac_mdio.c
+++ b/drivers/net/ethernet/freescale/xgmac_mdio.c
@@ -128,30 +128,57 @@ static int xgmac_wait_until_done(struct device *dev,
 	return 0;
 }
 
-/*
- * Write value to the PHY for this device to the register at regnum,waiting
+/* Write value to the PHY for this device to the register at regnum,waiting
  * until the write is done before it returns.  All PHY configuration has to be
  * done through the TSEC1 MIIM regs.
  */
-static int xgmac_mdio_write(struct mii_bus *bus, int phy_id, int regnum, u16 value)
+static int xgmac_mdio_write_c22(struct mii_bus *bus, int phy_id, int regnum,
+				u16 value)
 {
 	struct mdio_fsl_priv *priv = (struct mdio_fsl_priv *)bus->priv;
 	struct tgec_mdio_controller __iomem *regs = priv->mdio_base;
-	uint16_t dev_addr;
+	bool endian = priv->is_little_endian;
+	u16 dev_addr = regnum & 0x1f;
 	u32 mdio_ctl, mdio_stat;
 	int ret;
+
+	mdio_stat = xgmac_read32(&regs->mdio_stat, endian);
+	mdio_stat &= ~MDIO_STAT_ENC;
+	xgmac_write32(mdio_stat, &regs->mdio_stat, endian);
+
+	ret = xgmac_wait_until_free(&bus->dev, regs, endian);
+	if (ret)
+		return ret;
+
+	/* Set the port and dev addr */
+	mdio_ctl = MDIO_CTL_PORT_ADDR(phy_id) | MDIO_CTL_DEV_ADDR(dev_addr);
+	xgmac_write32(mdio_ctl, &regs->mdio_ctl, endian);
+
+	/* Write the value to the register */
+	xgmac_write32(MDIO_DATA(value), &regs->mdio_data, endian);
+
+	ret = xgmac_wait_until_done(&bus->dev, regs, endian);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+/* Write value to the PHY for this device to the register at regnum,waiting
+ * until the write is done before it returns.  All PHY configuration has to be
+ * done through the TSEC1 MIIM regs.
+ */
+static int xgmac_mdio_write_c45(struct mii_bus *bus, int phy_id, int dev_addr,
+				int regnum, u16 value)
+{
+	struct mdio_fsl_priv *priv = (struct mdio_fsl_priv *)bus->priv;
+	struct tgec_mdio_controller __iomem *regs = priv->mdio_base;
 	bool endian = priv->is_little_endian;
+	u32 mdio_ctl, mdio_stat;
+	int ret;
 
 	mdio_stat = xgmac_read32(&regs->mdio_stat, endian);
-	if (regnum & MII_ADDR_C45) {
-		/* Clause 45 (ie 10G) */
-		dev_addr = (regnum >> 16) & 0x1f;
-		mdio_stat |= MDIO_STAT_ENC;
-	} else {
-		/* Clause 22 (ie 1G) */
-		dev_addr = regnum & 0x1f;
-		mdio_stat &= ~MDIO_STAT_ENC;
-	}
+	mdio_stat |= MDIO_STAT_ENC;
 
 	xgmac_write32(mdio_stat, &regs->mdio_stat, endian);
 
@@ -164,13 +191,11 @@ static int xgmac_mdio_write(struct mii_bus *bus, int phy_id, int regnum, u16 val
 	xgmac_write32(mdio_ctl, &regs->mdio_ctl, endian);
 
 	/* Set the register address */
-	if (regnum & MII_ADDR_C45) {
-		xgmac_write32(regnum & 0xffff, &regs->mdio_addr, endian);
+	xgmac_write32(regnum & 0xffff, &regs->mdio_addr, endian);
 
-		ret = xgmac_wait_until_free(&bus->dev, regs, endian);
-		if (ret)
-			return ret;
-	}
+	ret = xgmac_wait_until_free(&bus->dev, regs, endian);
+	if (ret)
+		return ret;
 
 	/* Write the value to the register */
 	xgmac_write32(MDIO_DATA(value), &regs->mdio_data, endian);
@@ -182,31 +207,82 @@ static int xgmac_mdio_write(struct mii_bus *bus, int phy_id, int regnum, u16 val
 	return 0;
 }
 
-/*
- * Reads from register regnum in the PHY for device dev, returning the value.
+/* Reads from register regnum in the PHY for device dev, returning the value.
  * Clears miimcom first.  All PHY configuration has to be done through the
  * TSEC1 MIIM regs.
  */
-static int xgmac_mdio_read(struct mii_bus *bus, int phy_id, int regnum)
+static int xgmac_mdio_read_c22(struct mii_bus *bus, int phy_id, int regnum)
 {
 	struct mdio_fsl_priv *priv = (struct mdio_fsl_priv *)bus->priv;
 	struct tgec_mdio_controller __iomem *regs = priv->mdio_base;
+	bool endian = priv->is_little_endian;
+	u16 dev_addr = regnum & 0x1f;
 	unsigned long flags;
-	uint16_t dev_addr;
 	uint32_t mdio_stat;
 	uint32_t mdio_ctl;
 	int ret;
-	bool endian = priv->is_little_endian;
 
 	mdio_stat = xgmac_read32(&regs->mdio_stat, endian);
-	if (regnum & MII_ADDR_C45) {
-		dev_addr = (regnum >> 16) & 0x1f;
-		mdio_stat |= MDIO_STAT_ENC;
+	mdio_stat &= ~MDIO_STAT_ENC;
+	xgmac_write32(mdio_stat, &regs->mdio_stat, endian);
+
+	ret = xgmac_wait_until_free(&bus->dev, regs, endian);
+	if (ret)
+		return ret;
+
+	/* Set the Port and Device Addrs */
+	mdio_ctl = MDIO_CTL_PORT_ADDR(phy_id) | MDIO_CTL_DEV_ADDR(dev_addr);
+	xgmac_write32(mdio_ctl, &regs->mdio_ctl, endian);
+
+	if (priv->has_a009885)
+		/* Once the operation completes, i.e. MDIO_STAT_BSY clears, we
+		 * must read back the data register within 16 MDC cycles.
+		 */
+		local_irq_save(flags);
+
+	/* Initiate the read */
+	xgmac_write32(mdio_ctl | MDIO_CTL_READ, &regs->mdio_ctl, endian);
+
+	ret = xgmac_wait_until_done(&bus->dev, regs, endian);
+	if (ret)
+		goto irq_restore;
+
+	/* Return all Fs if nothing was there */
+	if ((xgmac_read32(&regs->mdio_stat, endian) & MDIO_STAT_RD_ER) &&
+	    !priv->has_a011043) {
+		dev_dbg(&bus->dev,
+			"Error while reading PHY%d reg at %d.%d\n",
+			phy_id, dev_addr, regnum);
+		ret = 0xffff;
 	} else {
-		dev_addr = regnum & 0x1f;
-		mdio_stat &= ~MDIO_STAT_ENC;
+		ret = xgmac_read32(&regs->mdio_data, endian) & 0xffff;
+		dev_dbg(&bus->dev, "read %04x\n", ret);
 	}
 
+irq_restore:
+	if (priv->has_a009885)
+		local_irq_restore(flags);
+
+	return ret;
+}
+
+/* Reads from register regnum in the PHY for device dev, returning the value.
+ * Clears miimcom first.  All PHY configuration has to be done through the
+ * TSEC1 MIIM regs.
+ */
+static int xgmac_mdio_read_c45(struct mii_bus *bus, int phy_id, int dev_addr,
+			       int regnum)
+{
+	struct mdio_fsl_priv *priv = (struct mdio_fsl_priv *)bus->priv;
+	struct tgec_mdio_controller __iomem *regs = priv->mdio_base;
+	bool endian = priv->is_little_endian;
+	u32 mdio_stat, mdio_ctl;
+	unsigned long flags;
+	int ret;
+
+	mdio_stat = xgmac_read32(&regs->mdio_stat, endian);
+	mdio_stat |= MDIO_STAT_ENC;
+
 	xgmac_write32(mdio_stat, &regs->mdio_stat, endian);
 
 	ret = xgmac_wait_until_free(&bus->dev, regs, endian);
@@ -218,13 +294,11 @@ static int xgmac_mdio_read(struct mii_bus *bus, int phy_id, int regnum)
 	xgmac_write32(mdio_ctl, &regs->mdio_ctl, endian);
 
 	/* Set the register address */
-	if (regnum & MII_ADDR_C45) {
-		xgmac_write32(regnum & 0xffff, &regs->mdio_addr, endian);
+	xgmac_write32(regnum & 0xffff, &regs->mdio_addr, endian);
 
-		ret = xgmac_wait_until_free(&bus->dev, regs, endian);
-		if (ret)
-			return ret;
-	}
+	ret = xgmac_wait_until_free(&bus->dev, regs, endian);
+	if (ret)
+		return ret;
 
 	if (priv->has_a009885)
 		/* Once the operation completes, i.e. MDIO_STAT_BSY clears, we
@@ -326,8 +400,10 @@ static int xgmac_mdio_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	bus->name = "Freescale XGMAC MDIO Bus";
-	bus->read = xgmac_mdio_read;
-	bus->write = xgmac_mdio_write;
+	bus->read = xgmac_mdio_read_c22;
+	bus->write = xgmac_mdio_write_c22;
+	bus->read_c45 = xgmac_mdio_read_c45;
+	bus->write_c45 = xgmac_mdio_write_c45;
 	bus->parent = &pdev->dev;
 	bus->probe_capabilities = MDIOBUS_C22_C45;
 	snprintf(bus->id, MII_BUS_ID_SIZE, "%pa", &res->start);

-- 
2.30.2


From michael at walle.cc  Tue Dec 27 15:07:25 2022
From: michael at walle.cc (Michael Walle)
Date: Wed, 28 Dec 2022 00:07:25 +0100
Subject: [PATCH RFC net-next v2 09/12] net: ethernet: freescale: fec: Separate
 C22 and C45 transactions for xgmac
In-Reply-To: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
References: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
Message-ID: <20221227-v6-2-rc1-c45-seperation-v2-9-ddb37710e5a7@walle.cc>

From: Andrew Lunn <andrew at lunn.ch>

The fec MDIO bus driver can perform both C22 and C45 transfers.
Create separate functions for each and register the C45 versions using
the new API calls where appropriate.

Signed-off-by: Andrew Lunn <andrew at lunn.ch>
Signed-off-by: Michael Walle <michael at walle.cc>
---
v2:
 - [al] Fixup some indentation
---
 drivers/net/ethernet/freescale/fec_main.c | 153 ++++++++++++++++++++----------
 1 file changed, 103 insertions(+), 50 deletions(-)

diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 644f3c963730..e6238e53940d 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -1987,47 +1987,74 @@ static int fec_enet_mdio_wait(struct fec_enet_private *fep)
 	return ret;
 }
 
-static int fec_enet_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
+static int fec_enet_mdio_read_c22(struct mii_bus *bus, int mii_id, int regnum)
 {
 	struct fec_enet_private *fep = bus->priv;
 	struct device *dev = &fep->pdev->dev;
 	int ret = 0, frame_start, frame_addr, frame_op;
-	bool is_c45 = !!(regnum & MII_ADDR_C45);
 
 	ret = pm_runtime_resume_and_get(dev);
 	if (ret < 0)
 		return ret;
 
-	if (is_c45) {
-		frame_start = FEC_MMFR_ST_C45;
+	/* C22 read */
+	frame_op = FEC_MMFR_OP_READ;
+	frame_start = FEC_MMFR_ST;
+	frame_addr = regnum;
 
-		/* write address */
-		frame_addr = (regnum >> 16);
-		writel(frame_start | FEC_MMFR_OP_ADDR_WRITE |
-		       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(frame_addr) |
-		       FEC_MMFR_TA | (regnum & 0xFFFF),
-		       fep->hwp + FEC_MII_DATA);
+	/* start a read op */
+	writel(frame_start | frame_op |
+	       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(frame_addr) |
+	       FEC_MMFR_TA, fep->hwp + FEC_MII_DATA);
 
-		/* wait for end of transfer */
-		ret = fec_enet_mdio_wait(fep);
-		if (ret) {
-			netdev_err(fep->netdev, "MDIO address write timeout\n");
-			goto out;
-		}
+	/* wait for end of transfer */
+	ret = fec_enet_mdio_wait(fep);
+	if (ret) {
+		netdev_err(fep->netdev, "MDIO read timeout\n");
+		goto out;
+	}
 
-		frame_op = FEC_MMFR_OP_READ_C45;
+	ret = FEC_MMFR_DATA(readl(fep->hwp + FEC_MII_DATA));
 
-	} else {
-		/* C22 read */
-		frame_op = FEC_MMFR_OP_READ;
-		frame_start = FEC_MMFR_ST;
-		frame_addr = regnum;
+out:
+	pm_runtime_mark_last_busy(dev);
+	pm_runtime_put_autosuspend(dev);
+
+	return ret;
+}
+
+static int fec_enet_mdio_read_c45(struct mii_bus *bus, int mii_id,
+				  int devad, int regnum)
+{
+	struct fec_enet_private *fep = bus->priv;
+	struct device *dev = &fep->pdev->dev;
+	int ret = 0, frame_start, frame_op;
+
+	ret = pm_runtime_resume_and_get(dev);
+	if (ret < 0)
+		return ret;
+
+	frame_start = FEC_MMFR_ST_C45;
+
+	/* write address */
+	writel(frame_start | FEC_MMFR_OP_ADDR_WRITE |
+	       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(devad) |
+	       FEC_MMFR_TA | (regnum & 0xFFFF),
+	       fep->hwp + FEC_MII_DATA);
+
+	/* wait for end of transfer */
+	ret = fec_enet_mdio_wait(fep);
+	if (ret) {
+		netdev_err(fep->netdev, "MDIO address write timeout\n");
+		goto out;
 	}
 
+	frame_op = FEC_MMFR_OP_READ_C45;
+
 	/* start a read op */
 	writel(frame_start | frame_op |
-		FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(frame_addr) |
-		FEC_MMFR_TA, fep->hwp + FEC_MII_DATA);
+	       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(devad) |
+	       FEC_MMFR_TA, fep->hwp + FEC_MII_DATA);
 
 	/* wait for end of transfer */
 	ret = fec_enet_mdio_wait(fep);
@@ -2045,45 +2072,69 @@ static int fec_enet_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
 	return ret;
 }
 
-static int fec_enet_mdio_write(struct mii_bus *bus, int mii_id, int regnum,
-			   u16 value)
+static int fec_enet_mdio_write_c22(struct mii_bus *bus, int mii_id, int regnum,
+				   u16 value)
 {
 	struct fec_enet_private *fep = bus->priv;
 	struct device *dev = &fep->pdev->dev;
 	int ret, frame_start, frame_addr;
-	bool is_c45 = !!(regnum & MII_ADDR_C45);
 
 	ret = pm_runtime_resume_and_get(dev);
 	if (ret < 0)
 		return ret;
 
-	if (is_c45) {
-		frame_start = FEC_MMFR_ST_C45;
+	/* C22 write */
+	frame_start = FEC_MMFR_ST;
+	frame_addr = regnum;
 
-		/* write address */
-		frame_addr = (regnum >> 16);
-		writel(frame_start | FEC_MMFR_OP_ADDR_WRITE |
-		       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(frame_addr) |
-		       FEC_MMFR_TA | (regnum & 0xFFFF),
-		       fep->hwp + FEC_MII_DATA);
+	/* start a write op */
+	writel(frame_start | FEC_MMFR_OP_WRITE |
+	       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(frame_addr) |
+	       FEC_MMFR_TA | FEC_MMFR_DATA(value),
+	       fep->hwp + FEC_MII_DATA);
 
-		/* wait for end of transfer */
-		ret = fec_enet_mdio_wait(fep);
-		if (ret) {
-			netdev_err(fep->netdev, "MDIO address write timeout\n");
-			goto out;
-		}
-	} else {
-		/* C22 write */
-		frame_start = FEC_MMFR_ST;
-		frame_addr = regnum;
+	/* wait for end of transfer */
+	ret = fec_enet_mdio_wait(fep);
+	if (ret)
+		netdev_err(fep->netdev, "MDIO write timeout\n");
+
+	pm_runtime_mark_last_busy(dev);
+	pm_runtime_put_autosuspend(dev);
+
+	return ret;
+}
+
+static int fec_enet_mdio_write_c45(struct mii_bus *bus, int mii_id,
+				   int devad, int regnum, u16 value)
+{
+	struct fec_enet_private *fep = bus->priv;
+	struct device *dev = &fep->pdev->dev;
+	int ret, frame_start;
+
+	ret = pm_runtime_resume_and_get(dev);
+	if (ret < 0)
+		return ret;
+
+	frame_start = FEC_MMFR_ST_C45;
+
+	/* write address */
+	writel(frame_start | FEC_MMFR_OP_ADDR_WRITE |
+	       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(devad) |
+	       FEC_MMFR_TA | (regnum & 0xFFFF),
+	       fep->hwp + FEC_MII_DATA);
+
+	/* wait for end of transfer */
+	ret = fec_enet_mdio_wait(fep);
+	if (ret) {
+		netdev_err(fep->netdev, "MDIO address write timeout\n");
+		goto out;
 	}
 
 	/* start a write op */
 	writel(frame_start | FEC_MMFR_OP_WRITE |
-		FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(frame_addr) |
-		FEC_MMFR_TA | FEC_MMFR_DATA(value),
-		fep->hwp + FEC_MII_DATA);
+	       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(devad) |
+	       FEC_MMFR_TA | FEC_MMFR_DATA(value),
+	       fep->hwp + FEC_MII_DATA);
 
 	/* wait for end of transfer */
 	ret = fec_enet_mdio_wait(fep);
@@ -2381,8 +2432,10 @@ static int fec_enet_mii_init(struct platform_device *pdev)
 	}
 
 	fep->mii_bus->name = "fec_enet_mii_bus";
-	fep->mii_bus->read = fec_enet_mdio_read;
-	fep->mii_bus->write = fec_enet_mdio_write;
+	fep->mii_bus->read = fec_enet_mdio_read_c22;
+	fep->mii_bus->write = fec_enet_mdio_write_c22;
+	fep->mii_bus->read_c45 = fec_enet_mdio_read_c45;
+	fep->mii_bus->write_c45 = fec_enet_mdio_write_c45;
 	snprintf(fep->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
 		pdev->name, fep->dev_id + 1);
 	fep->mii_bus->priv = fep;

-- 
2.30.2


From michael at walle.cc  Tue Dec 27 15:07:26 2022
From: michael at walle.cc (Michael Walle)
Date: Wed, 28 Dec 2022 00:07:26 +0100
Subject: [PATCH RFC net-next v2 10/12] net: mdio: add
 mdiobus_c45_read/write_nested helpers
In-Reply-To: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
References: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
Message-ID: <20221227-v6-2-rc1-c45-seperation-v2-10-ddb37710e5a7@walle.cc>

From: Andrew Lunn <andrew at lunn.ch>

Some DSA devices pass through PHY access to the MDIO bus the switch is
on. Add C45 versions of the current C22 helpers for nested accesses to
MDIO busses, so that C22 and C45 can be separated in these DSA
drivers.

Signed-off-by: Andrew Lunn <andrew at lunn.ch>
Signed-off-by: Michael Walle <michael at walle.cc>
---
v2:
 - [al] new patch
---
 drivers/net/phy/mdio_bus.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++
 include/linux/mdio.h       |  4 ++++
 2 files changed, 59 insertions(+)

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index 0b04ce3766c8..7f6b12b65f0d 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -1011,6 +1011,33 @@ int mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum)
 }
 EXPORT_SYMBOL(mdiobus_c45_read);
 
+/**
+ * mdiobus_c45_read_nested - Nested version of the mdiobus_c45_read function
+ * @bus: the mii_bus struct
+ * @addr: the phy address
+ * @devad: device address to read
+ * @regnum: register number to read
+ *
+ * In case of nested MDIO bus access avoid lockdep false positives by
+ * using mutex_lock_nested().
+ *
+ * NOTE: MUST NOT be called from interrupt context,
+ * because the bus read/write functions may wait for an interrupt
+ * to conclude the operation.
+ */
+int mdiobus_c45_read_nested(struct mii_bus *bus, int addr, int devad,
+			    u32 regnum)
+{
+	int retval;
+
+	mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED);
+	retval = __mdiobus_c45_read(bus, addr, devad, regnum);
+	mutex_unlock(&bus->mdio_lock);
+
+	return retval;
+}
+EXPORT_SYMBOL(mdiobus_c45_read_nested);
+
 /**
  * mdiobus_write_nested - Nested version of the mdiobus_write function
  * @bus: the mii_bus struct
@@ -1085,6 +1112,34 @@ int mdiobus_c45_write(struct mii_bus *bus, int addr, int devad, u32 regnum,
 }
 EXPORT_SYMBOL(mdiobus_c45_write);
 
+/**
+ * mdiobus_c45_write_nested - Nested version of the mdiobus_c45_write function
+ * @bus: the mii_bus struct
+ * @addr: the phy address
+ * @devad: device address to read
+ * @regnum: register number to write
+ * @val: value to write to @regnum
+ *
+ * In case of nested MDIO bus access avoid lockdep false positives by
+ * using mutex_lock_nested().
+ *
+ * NOTE: MUST NOT be called from interrupt context,
+ * because the bus read/write functions may wait for an interrupt
+ * to conclude the operation.
+ */
+int mdiobus_c45_write_nested(struct mii_bus *bus, int addr, int devad,
+			     u32 regnum, u16 val)
+{
+	int err;
+
+	mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED);
+	err = __mdiobus_c45_write(bus, addr, devad, regnum, val);
+	mutex_unlock(&bus->mdio_lock);
+
+	return err;
+}
+EXPORT_SYMBOL(mdiobus_c45_write_nested);
+
 /**
  * mdiobus_modify - Convenience function for modifying a given mdio device
  *	register
diff --git a/include/linux/mdio.h b/include/linux/mdio.h
index 97b49765e8b5..220f3ca8702d 100644
--- a/include/linux/mdio.h
+++ b/include/linux/mdio.h
@@ -425,10 +425,14 @@ int mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum,
 			   u16 mask, u16 set);
 int __mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum);
 int mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum);
+int mdiobus_c45_read_nested(struct mii_bus *bus, int addr, int devad,
+			     u32 regnum);
 int __mdiobus_c45_write(struct mii_bus *bus, int addr,  int devad, u32 regnum,
 			u16 val);
 int mdiobus_c45_write(struct mii_bus *bus, int addr,  int devad, u32 regnum,
 		      u16 val);
+int mdiobus_c45_write_nested(struct mii_bus *bus, int addr,  int devad,
+			     u32 regnum, u16 val);
 int mdiobus_c45_modify(struct mii_bus *bus, int addr, int devad, u32 regnum,
 		       u16 mask, u16 set);
 

-- 
2.30.2


From michael at walle.cc  Tue Dec 27 15:07:28 2022
From: michael at walle.cc (Michael Walle)
Date: Wed, 28 Dec 2022 00:07:28 +0100
Subject: [PATCH RFC net-next v2 12/12] net: dsa: mv88e6xxx: Separate C22 and
 C45 transactions
In-Reply-To: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
References: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
Message-ID: <20221227-v6-2-rc1-c45-seperation-v2-12-ddb37710e5a7@walle.cc>

From: Andrew Lunn <andrew at lunn.ch>

The global2 SMI MDIO bus driver can perform both C22 and C45
transfers. Create separate functions for each and register the C45
versions using the new API calls where appropriate. Update the SERDES
code to make use of these new accessors.

Signed-off-by: Andrew Lunn <andrew at lunn.ch>
Signed-off-by: Michael Walle <michael at walle.cc>
---
 drivers/net/dsa/mv88e6xxx/chip.c    | 175 ++++++++++++++++++++++++++----------
 drivers/net/dsa/mv88e6xxx/chip.h    |   7 ++
 drivers/net/dsa/mv88e6xxx/global2.c |  66 ++++++++------
 drivers/net/dsa/mv88e6xxx/global2.h |  18 ++--
 drivers/net/dsa/mv88e6xxx/phy.c     |  32 +++++++
 drivers/net/dsa/mv88e6xxx/phy.h     |   4 +
 drivers/net/dsa/mv88e6xxx/serdes.c  |   8 +-
 7 files changed, 225 insertions(+), 85 deletions(-)

diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 242b8b325504..0ff9cd0be217 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -3884,6 +3884,24 @@ static int mv88e6xxx_mdio_read(struct mii_bus *bus, int phy, int reg)
 	return err ? err : val;
 }
 
+static int mv88e6xxx_mdio_read_c45(struct mii_bus *bus, int phy, int devad,
+				   int reg)
+{
+	struct mv88e6xxx_mdio_bus *mdio_bus = bus->priv;
+	struct mv88e6xxx_chip *chip = mdio_bus->chip;
+	u16 val;
+	int err;
+
+	if (!chip->info->ops->phy_read_c45)
+		return -EOPNOTSUPP;
+
+	mv88e6xxx_reg_lock(chip);
+	err = chip->info->ops->phy_read_c45(chip, bus, phy, devad, reg, &val);
+	mv88e6xxx_reg_unlock(chip);
+
+	return err ? err : val;
+}
+
 static int mv88e6xxx_mdio_write(struct mii_bus *bus, int phy, int reg, u16 val)
 {
 	struct mv88e6xxx_mdio_bus *mdio_bus = bus->priv;
@@ -3900,6 +3918,23 @@ static int mv88e6xxx_mdio_write(struct mii_bus *bus, int phy, int reg, u16 val)
 	return err;
 }
 
+static int mv88e6xxx_mdio_write_c45(struct mii_bus *bus, int phy, int devad,
+				    int reg, u16 val)
+{
+	struct mv88e6xxx_mdio_bus *mdio_bus = bus->priv;
+	struct mv88e6xxx_chip *chip = mdio_bus->chip;
+	int err;
+
+	if (!chip->info->ops->phy_write_c45)
+		return -EOPNOTSUPP;
+
+	mv88e6xxx_reg_lock(chip);
+	err = chip->info->ops->phy_write_c45(chip, bus, phy, devad, reg, val);
+	mv88e6xxx_reg_unlock(chip);
+
+	return err;
+}
+
 static int mv88e6xxx_mdio_register(struct mv88e6xxx_chip *chip,
 				   struct device_node *np,
 				   bool external)
@@ -3938,6 +3973,8 @@ static int mv88e6xxx_mdio_register(struct mv88e6xxx_chip *chip,
 
 	bus->read = mv88e6xxx_mdio_read;
 	bus->write = mv88e6xxx_mdio_write;
+	bus->read_c45 = mv88e6xxx_mdio_read_c45;
+	bus->write_c45 = mv88e6xxx_mdio_write_c45;
 	bus->parent = chip->dev;
 
 	if (!external) {
@@ -4149,8 +4186,10 @@ static const struct mv88e6xxx_ops mv88e6097_ops = {
 	.ip_pri_map = mv88e6085_g1_ip_pri_map,
 	.irl_init_all = mv88e6352_g2_irl_init_all,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6185_port_sync_link,
 	.port_set_speed_duplex = mv88e6185_port_set_speed_duplex,
@@ -4198,8 +4237,10 @@ static const struct mv88e6xxx_ops mv88e6123_ops = {
 	.ip_pri_map = mv88e6085_g1_ip_pri_map,
 	.irl_init_all = mv88e6352_g2_irl_init_all,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_speed_duplex = mv88e6185_port_set_speed_duplex,
@@ -4279,8 +4320,10 @@ static const struct mv88e6xxx_ops mv88e6141_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom8,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom8,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
@@ -4343,8 +4386,10 @@ static const struct mv88e6xxx_ops mv88e6161_ops = {
 	.ip_pri_map = mv88e6085_g1_ip_pri_map,
 	.irl_init_all = mv88e6352_g2_irl_init_all,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_speed_duplex = mv88e6185_port_set_speed_duplex,
@@ -4426,8 +4471,10 @@ static const struct mv88e6xxx_ops mv88e6171_ops = {
 	.ip_pri_map = mv88e6085_g1_ip_pri_map,
 	.irl_init_all = mv88e6352_g2_irl_init_all,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6352_port_set_rgmii_delay,
@@ -4472,8 +4519,10 @@ static const struct mv88e6xxx_ops mv88e6172_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom16,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom16,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6352_port_set_rgmii_delay,
@@ -4527,8 +4576,10 @@ static const struct mv88e6xxx_ops mv88e6175_ops = {
 	.ip_pri_map = mv88e6085_g1_ip_pri_map,
 	.irl_init_all = mv88e6352_g2_irl_init_all,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6352_port_set_rgmii_delay,
@@ -4573,8 +4624,10 @@ static const struct mv88e6xxx_ops mv88e6176_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom16,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom16,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6352_port_set_rgmii_delay,
@@ -4673,8 +4726,10 @@ static const struct mv88e6xxx_ops mv88e6190_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom8,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom8,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
@@ -4736,8 +4791,10 @@ static const struct mv88e6xxx_ops mv88e6190x_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom8,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom8,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
@@ -4799,8 +4856,10 @@ static const struct mv88e6xxx_ops mv88e6191_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom8,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom8,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
@@ -4862,8 +4921,10 @@ static const struct mv88e6xxx_ops mv88e6240_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom16,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom16,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6352_port_set_rgmii_delay,
@@ -4925,8 +4986,10 @@ static const struct mv88e6xxx_ops mv88e6250_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom16,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom16,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6352_port_set_rgmii_delay,
@@ -4964,8 +5027,10 @@ static const struct mv88e6xxx_ops mv88e6290_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom8,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom8,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
@@ -5029,8 +5094,10 @@ static const struct mv88e6xxx_ops mv88e6320_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom16,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom16,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6320_port_set_rgmii_delay,
@@ -5074,8 +5141,10 @@ static const struct mv88e6xxx_ops mv88e6321_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom16,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom16,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6320_port_set_rgmii_delay,
@@ -5117,8 +5186,10 @@ static const struct mv88e6xxx_ops mv88e6341_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom8,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom8,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
@@ -5183,8 +5254,10 @@ static const struct mv88e6xxx_ops mv88e6350_ops = {
 	.ip_pri_map = mv88e6085_g1_ip_pri_map,
 	.irl_init_all = mv88e6352_g2_irl_init_all,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6352_port_set_rgmii_delay,
@@ -5227,8 +5300,10 @@ static const struct mv88e6xxx_ops mv88e6351_ops = {
 	.ip_pri_map = mv88e6085_g1_ip_pri_map,
 	.irl_init_all = mv88e6352_g2_irl_init_all,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6352_port_set_rgmii_delay,
@@ -5275,8 +5350,10 @@ static const struct mv88e6xxx_ops mv88e6352_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom16,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom16,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6352_port_set_rgmii_delay,
@@ -5340,8 +5417,10 @@ static const struct mv88e6xxx_ops mv88e6390_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom8,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom8,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
@@ -5407,8 +5486,10 @@ static const struct mv88e6xxx_ops mv88e6390x_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom8,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom8,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
@@ -5473,8 +5554,10 @@ static const struct mv88e6xxx_ops mv88e6393x_ops = {
 	.get_eeprom = mv88e6xxx_g2_get_eeprom8,
 	.set_eeprom = mv88e6xxx_g2_set_eeprom8,
 	.set_switch_mac = mv88e6xxx_g2_set_switch_mac,
-	.phy_read = mv88e6xxx_g2_smi_phy_read,
-	.phy_write = mv88e6xxx_g2_smi_phy_write,
+	.phy_read = mv88e6xxx_g2_smi_phy_read_c22,
+	.phy_write = mv88e6xxx_g2_smi_phy_write_c22,
+	.phy_read_c45 = mv88e6xxx_g2_smi_phy_read_c45,
+	.phy_write_c45 = mv88e6xxx_g2_smi_phy_write_c45,
 	.port_set_link = mv88e6xxx_port_set_link,
 	.port_sync_link = mv88e6xxx_port_sync_link,
 	.port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h
index e693154cf803..751bede49942 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.h
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
@@ -451,6 +451,13 @@ struct mv88e6xxx_ops {
 			 struct mii_bus *bus,
 			 int addr, int reg, u16 val);
 
+	int (*phy_read_c45)(struct mv88e6xxx_chip *chip,
+			    struct mii_bus *bus,
+			    int addr, int devad, int reg, u16 *val);
+	int (*phy_write_c45)(struct mv88e6xxx_chip *chip,
+			     struct mii_bus *bus,
+			     int addr, int devad, int reg, u16 val);
+
 	/* Priority Override Table operations */
 	int (*pot_clear)(struct mv88e6xxx_chip *chip);
 
diff --git a/drivers/net/dsa/mv88e6xxx/global2.c b/drivers/net/dsa/mv88e6xxx/global2.c
index fa65ecd9cb85..ed3b2f88e783 100644
--- a/drivers/net/dsa/mv88e6xxx/global2.c
+++ b/drivers/net/dsa/mv88e6xxx/global2.c
@@ -739,20 +739,18 @@ static int mv88e6xxx_g2_smi_phy_read_data_c45(struct mv88e6xxx_chip *chip,
 	return mv88e6xxx_g2_read(chip, MV88E6XXX_G2_SMI_PHY_DATA, data);
 }
 
-static int mv88e6xxx_g2_smi_phy_read_c45(struct mv88e6xxx_chip *chip,
-					 bool external, int port, int reg,
-					 u16 *data)
+static int _mv88e6xxx_g2_smi_phy_read_c45(struct mv88e6xxx_chip *chip,
+					  bool external, int port, int devad,
+					  int reg, u16 *data)
 {
-	int dev = (reg >> 16) & 0x1f;
-	int addr = reg & 0xffff;
 	int err;
 
-	err = mv88e6xxx_g2_smi_phy_write_addr_c45(chip, external, port, dev,
-						  addr);
+	err = mv88e6xxx_g2_smi_phy_write_addr_c45(chip, external, port, devad,
+						  reg);
 	if (err)
 		return err;
 
-	return mv88e6xxx_g2_smi_phy_read_data_c45(chip, external, port, dev,
+	return mv88e6xxx_g2_smi_phy_read_data_c45(chip, external, port, devad,
 						  data);
 }
 
@@ -771,51 +769,65 @@ static int mv88e6xxx_g2_smi_phy_write_data_c45(struct mv88e6xxx_chip *chip,
 	return mv88e6xxx_g2_smi_phy_access_c45(chip, external, op, port, dev);
 }
 
-static int mv88e6xxx_g2_smi_phy_write_c45(struct mv88e6xxx_chip *chip,
-					  bool external, int port, int reg,
-					  u16 data)
+static int _mv88e6xxx_g2_smi_phy_write_c45(struct mv88e6xxx_chip *chip,
+					   bool external, int port, int devad,
+					   int reg, u16 data)
 {
-	int dev = (reg >> 16) & 0x1f;
-	int addr = reg & 0xffff;
 	int err;
 
-	err = mv88e6xxx_g2_smi_phy_write_addr_c45(chip, external, port, dev,
-						  addr);
+	err = mv88e6xxx_g2_smi_phy_write_addr_c45(chip, external, port, devad,
+						  reg);
 	if (err)
 		return err;
 
-	return mv88e6xxx_g2_smi_phy_write_data_c45(chip, external, port, dev,
+	return mv88e6xxx_g2_smi_phy_write_data_c45(chip, external, port, devad,
 						   data);
 }
 
-int mv88e6xxx_g2_smi_phy_read(struct mv88e6xxx_chip *chip, struct mii_bus *bus,
-			      int addr, int reg, u16 *val)
+int mv88e6xxx_g2_smi_phy_read_c22(struct mv88e6xxx_chip *chip,
+				  struct mii_bus *bus,
+				  int addr, int reg, u16 *val)
 {
 	struct mv88e6xxx_mdio_bus *mdio_bus = bus->priv;
 	bool external = mdio_bus->external;
 
-	if (reg & MII_ADDR_C45)
-		return mv88e6xxx_g2_smi_phy_read_c45(chip, external, addr, reg,
-						     val);
-
 	return mv88e6xxx_g2_smi_phy_read_data_c22(chip, external, addr, reg,
 						  val);
 }
 
-int mv88e6xxx_g2_smi_phy_write(struct mv88e6xxx_chip *chip, struct mii_bus *bus,
-			       int addr, int reg, u16 val)
+int mv88e6xxx_g2_smi_phy_read_c45(struct mv88e6xxx_chip *chip,
+				  struct mii_bus *bus, int addr, int devad,
+				  int reg, u16 *val)
 {
 	struct mv88e6xxx_mdio_bus *mdio_bus = bus->priv;
 	bool external = mdio_bus->external;
 
-	if (reg & MII_ADDR_C45)
-		return mv88e6xxx_g2_smi_phy_write_c45(chip, external, addr, reg,
-						      val);
+	return _mv88e6xxx_g2_smi_phy_read_c45(chip, external, addr, devad, reg,
+					      val);
+}
+
+int mv88e6xxx_g2_smi_phy_write_c22(struct mv88e6xxx_chip *chip,
+				   struct mii_bus *bus, int addr, int reg,
+				   u16 val)
+{
+	struct mv88e6xxx_mdio_bus *mdio_bus = bus->priv;
+	bool external = mdio_bus->external;
 
 	return mv88e6xxx_g2_smi_phy_write_data_c22(chip, external, addr, reg,
 						   val);
 }
 
+int mv88e6xxx_g2_smi_phy_write_c45(struct mv88e6xxx_chip *chip,
+				   struct mii_bus *bus, int addr, int devad,
+				   int reg, u16 val)
+{
+	struct mv88e6xxx_mdio_bus *mdio_bus = bus->priv;
+	bool external = mdio_bus->external;
+
+	return _mv88e6xxx_g2_smi_phy_write_c45(chip, external, addr, devad, reg,
+					       val);
+}
+
 /* Offset 0x1B: Watchdog Control */
 static int mv88e6097_watchdog_action(struct mv88e6xxx_chip *chip, int irq)
 {
diff --git a/drivers/net/dsa/mv88e6xxx/global2.h b/drivers/net/dsa/mv88e6xxx/global2.h
index 7536b8b0ad01..e973114d6890 100644
--- a/drivers/net/dsa/mv88e6xxx/global2.h
+++ b/drivers/net/dsa/mv88e6xxx/global2.h
@@ -314,12 +314,18 @@ int mv88e6xxx_g2_wait_bit(struct mv88e6xxx_chip *chip, int reg,
 int mv88e6352_g2_irl_init_all(struct mv88e6xxx_chip *chip, int port);
 int mv88e6390_g2_irl_init_all(struct mv88e6xxx_chip *chip, int port);
 
-int mv88e6xxx_g2_smi_phy_read(struct mv88e6xxx_chip *chip,
-			      struct mii_bus *bus,
-			      int addr, int reg, u16 *val);
-int mv88e6xxx_g2_smi_phy_write(struct mv88e6xxx_chip *chip,
-			       struct mii_bus *bus,
-			       int addr, int reg, u16 val);
+int mv88e6xxx_g2_smi_phy_read_c22(struct mv88e6xxx_chip *chip,
+				  struct mii_bus *bus,
+				  int addr, int reg, u16 *val);
+int mv88e6xxx_g2_smi_phy_write_c22(struct mv88e6xxx_chip *chip,
+				   struct mii_bus *bus,
+				   int addr, int reg, u16 val);
+int mv88e6xxx_g2_smi_phy_read_c45(struct mv88e6xxx_chip *chip,
+				  struct mii_bus *bus,
+				  int addr, int devad, int reg, u16 *val);
+int mv88e6xxx_g2_smi_phy_write_c45(struct mv88e6xxx_chip *chip,
+				   struct mii_bus *bus,
+				   int addr, int devad, int reg, u16 val);
 int mv88e6xxx_g2_set_switch_mac(struct mv88e6xxx_chip *chip, u8 *addr);
 
 int mv88e6xxx_g2_get_eeprom8(struct mv88e6xxx_chip *chip,
diff --git a/drivers/net/dsa/mv88e6xxx/phy.c b/drivers/net/dsa/mv88e6xxx/phy.c
index 252b5b3a3efe..8bb88b3d900d 100644
--- a/drivers/net/dsa/mv88e6xxx/phy.c
+++ b/drivers/net/dsa/mv88e6xxx/phy.c
@@ -55,6 +55,38 @@ int mv88e6xxx_phy_write(struct mv88e6xxx_chip *chip, int phy, int reg, u16 val)
 	return chip->info->ops->phy_write(chip, bus, addr, reg, val);
 }
 
+int mv88e6xxx_phy_read_c45(struct mv88e6xxx_chip *chip, int phy, int devad,
+			   int reg, u16 *val)
+{
+	int addr = phy; /* PHY devices addresses start at 0x0 */
+	struct mii_bus *bus;
+
+	bus = mv88e6xxx_default_mdio_bus(chip);
+	if (!bus)
+		return -EOPNOTSUPP;
+
+	if (!chip->info->ops->phy_read_c45)
+		return -EOPNOTSUPP;
+
+	return chip->info->ops->phy_read_c45(chip, bus, addr, devad, reg, val);
+}
+
+int mv88e6xxx_phy_write_c45(struct mv88e6xxx_chip *chip, int phy, int devad,
+			    int reg, u16 val)
+{
+	int addr = phy; /* PHY devices addresses start at 0x0 */
+	struct mii_bus *bus;
+
+	bus = mv88e6xxx_default_mdio_bus(chip);
+	if (!bus)
+		return -EOPNOTSUPP;
+
+	if (!chip->info->ops->phy_write_c45)
+		return -EOPNOTSUPP;
+
+	return chip->info->ops->phy_write_c45(chip, bus, addr, devad, reg, val);
+}
+
 static int mv88e6xxx_phy_page_get(struct mv88e6xxx_chip *chip, int phy, u8 page)
 {
 	return mv88e6xxx_phy_write(chip, phy, MV88E6XXX_PHY_PAGE, page);
diff --git a/drivers/net/dsa/mv88e6xxx/phy.h b/drivers/net/dsa/mv88e6xxx/phy.h
index 05ea0d546969..5f47722364cc 100644
--- a/drivers/net/dsa/mv88e6xxx/phy.h
+++ b/drivers/net/dsa/mv88e6xxx/phy.h
@@ -28,6 +28,10 @@ int mv88e6xxx_phy_read(struct mv88e6xxx_chip *chip, int phy,
 		       int reg, u16 *val);
 int mv88e6xxx_phy_write(struct mv88e6xxx_chip *chip, int phy,
 			int reg, u16 val);
+int mv88e6xxx_phy_read_c45(struct mv88e6xxx_chip *chip, int phy, int devad,
+			   int reg, u16 *val);
+int mv88e6xxx_phy_write_c45(struct mv88e6xxx_chip *chip, int phy, int devad,
+			    int reg, u16 val);
 int mv88e6xxx_phy_page_read(struct mv88e6xxx_chip *chip, int phy,
 			    u8 page, int reg, u16 *val);
 int mv88e6xxx_phy_page_write(struct mv88e6xxx_chip *chip, int phy,
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.c b/drivers/net/dsa/mv88e6xxx/serdes.c
index d94150d8f3f4..72faec8f44dc 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.c
+++ b/drivers/net/dsa/mv88e6xxx/serdes.c
@@ -36,17 +36,13 @@ static int mv88e6352_serdes_write(struct mv88e6xxx_chip *chip, int reg,
 static int mv88e6390_serdes_read(struct mv88e6xxx_chip *chip,
 				 int lane, int device, int reg, u16 *val)
 {
-	int reg_c45 = MII_ADDR_C45 | device << 16 | reg;
-
-	return mv88e6xxx_phy_read(chip, lane, reg_c45, val);
+	return mv88e6xxx_phy_read_c45(chip, lane, device, reg, val);
 }
 
 static int mv88e6390_serdes_write(struct mv88e6xxx_chip *chip,
 				  int lane, int device, int reg, u16 val)
 {
-	int reg_c45 = MII_ADDR_C45 | device << 16 | reg;
-
-	return mv88e6xxx_phy_write(chip, lane, reg_c45, val);
+	return mv88e6xxx_phy_write_c45(chip, lane, device, reg, val);
 }
 
 static int mv88e6xxx_serdes_pcs_get_state(struct mv88e6xxx_chip *chip,

-- 
2.30.2


From wei.fang at nxp.com  Tue Dec 27 19:31:53 2022
From: wei.fang at nxp.com (Wei Fang)
Date: Wed, 28 Dec 2022 03:31:53 +0000
Subject: [PATCH RFC net-next v2 09/12] net: ethernet: freescale: fec:
 Separate C22 and C45 transactions for xgmac
In-Reply-To: <20221227-v6-2-rc1-c45-seperation-v2-9-ddb37710e5a7@walle.cc>
References: <20221227-v6-2-rc1-c45-seperation-v2-0-ddb37710e5a7@walle.cc>
 <20221227-v6-2-rc1-c45-seperation-v2-9-ddb37710e5a7@walle.cc>
Message-ID: <DB9PR04MB8106662C6101FD0C2B35104888F29@DB9PR04MB8106.eurprd04.prod.outlook.com>

> -----Original Message-----
> From: Michael Walle <michael at walle.cc>
> Sent: 2022?12?28? 7:07
> To: Heiner Kallweit <hkallweit1 at gmail.com>; Russell King
> <linux at armlinux.org.uk>; David S. Miller <davem at davemloft.net>; Eric
> Dumazet <edumazet at google.com>; Jakub Kicinski <kuba at kernel.org>; Paolo
> Abeni <pabeni at redhat.com>; Jose Abreu <Jose.Abreu at synopsys.com>;
> Sergey Shtylyov <s.shtylyov at omp.ru>; Wei Fang <wei.fang at nxp.com>;
> Shenwei Wang <shenwei.wang at nxp.com>; Clark Wang
> <xiaoning.wang at nxp.com>; dl-linux-imx <linux-imx at nxp.com>; Sean Wang
> <sean.wang at mediatek.com>; Landen Chao <Landen.Chao at mediatek.com>;
> DENG Qingfang <dqfext at gmail.com>; Florian Fainelli <f.fainelli at gmail.com>;
> Vladimir Oltean <olteanv at gmail.com>; Matthias Brugger
> <matthias.bgg at gmail.com>
> Cc: netdev at vger.kernel.org; linux-kernel at vger.kernel.org;
> linux-renesas-soc at vger.kernel.org; linux-arm-kernel at lists.infradead.org;
> linux-mediatek at lists.infradead.org; Andrew Lunn <andrew at lunn.ch>; Geert
> Uytterhoeven <geert+renesas at glider.be>; Michael Walle <michael at walle.cc>
> Subject: [PATCH RFC net-next v2 09/12] net: ethernet: freescale: fec: Separate
> C22 and C45 transactions for xgmac
> 
> From: Andrew Lunn <andrew at lunn.ch>
> 
> The fec MDIO bus driver can perform both C22 and C45 transfers.
> Create separate functions for each and register the C45 versions using
> the new API calls where appropriate.
> 
> Signed-off-by: Andrew Lunn <andrew at lunn.ch>
> Signed-off-by: Michael Walle <michael at walle.cc>
> ---
> v2:
>  - [al] Fixup some indentation
> ---
>  drivers/net/ethernet/freescale/fec_main.c | 153
> ++++++++++++++++++++----------
>  1 file changed, 103 insertions(+), 50 deletions(-)
> 
> diff --git a/drivers/net/ethernet/freescale/fec_main.c
> b/drivers/net/ethernet/freescale/fec_main.c
> index 644f3c963730..e6238e53940d 100644
> --- a/drivers/net/ethernet/freescale/fec_main.c
> +++ b/drivers/net/ethernet/freescale/fec_main.c
> @@ -1987,47 +1987,74 @@ static int fec_enet_mdio_wait(struct
> fec_enet_private *fep)
>  	return ret;
>  }
> 
> -static int fec_enet_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
> +static int fec_enet_mdio_read_c22(struct mii_bus *bus, int mii_id, int
> regnum)
>  {
>  	struct fec_enet_private *fep = bus->priv;
>  	struct device *dev = &fep->pdev->dev;
>  	int ret = 0, frame_start, frame_addr, frame_op;
> -	bool is_c45 = !!(regnum & MII_ADDR_C45);
> 
>  	ret = pm_runtime_resume_and_get(dev);
>  	if (ret < 0)
>  		return ret;
> 
> -	if (is_c45) {
> -		frame_start = FEC_MMFR_ST_C45;
> +	/* C22 read */
> +	frame_op = FEC_MMFR_OP_READ;
> +	frame_start = FEC_MMFR_ST;
> +	frame_addr = regnum;
> 
> -		/* write address */
> -		frame_addr = (regnum >> 16);
> -		writel(frame_start | FEC_MMFR_OP_ADDR_WRITE |
> -		       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(frame_addr) |
> -		       FEC_MMFR_TA | (regnum & 0xFFFF),
> -		       fep->hwp + FEC_MII_DATA);
> +	/* start a read op */
> +	writel(frame_start | frame_op |
> +	       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(frame_addr) |
> +	       FEC_MMFR_TA, fep->hwp + FEC_MII_DATA);
> 
> -		/* wait for end of transfer */
> -		ret = fec_enet_mdio_wait(fep);
> -		if (ret) {
> -			netdev_err(fep->netdev, "MDIO address write timeout\n");
> -			goto out;
> -		}
> +	/* wait for end of transfer */
> +	ret = fec_enet_mdio_wait(fep);
> +	if (ret) {
> +		netdev_err(fep->netdev, "MDIO read timeout\n");
> +		goto out;
> +	}
> 
> -		frame_op = FEC_MMFR_OP_READ_C45;
> +	ret = FEC_MMFR_DATA(readl(fep->hwp + FEC_MII_DATA));
> 
> -	} else {
> -		/* C22 read */
> -		frame_op = FEC_MMFR_OP_READ;
> -		frame_start = FEC_MMFR_ST;
> -		frame_addr = regnum;
> +out:
> +	pm_runtime_mark_last_busy(dev);
> +	pm_runtime_put_autosuspend(dev);
> +
> +	return ret;
> +}
> +
> +static int fec_enet_mdio_read_c45(struct mii_bus *bus, int mii_id,
> +				  int devad, int regnum)
> +{
> +	struct fec_enet_private *fep = bus->priv;
> +	struct device *dev = &fep->pdev->dev;
> +	int ret = 0, frame_start, frame_op;
> +
> +	ret = pm_runtime_resume_and_get(dev);
> +	if (ret < 0)
> +		return ret;
> +
> +	frame_start = FEC_MMFR_ST_C45;
> +
> +	/* write address */
> +	writel(frame_start | FEC_MMFR_OP_ADDR_WRITE |
> +	       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(devad) |
> +	       FEC_MMFR_TA | (regnum & 0xFFFF),
> +	       fep->hwp + FEC_MII_DATA);
> +
> +	/* wait for end of transfer */
> +	ret = fec_enet_mdio_wait(fep);
> +	if (ret) {
> +		netdev_err(fep->netdev, "MDIO address write timeout\n");
> +		goto out;
>  	}
> 
> +	frame_op = FEC_MMFR_OP_READ_C45;
> +
>  	/* start a read op */
>  	writel(frame_start | frame_op |
> -		FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(frame_addr) |
> -		FEC_MMFR_TA, fep->hwp + FEC_MII_DATA);
> +	       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(devad) |
> +	       FEC_MMFR_TA, fep->hwp + FEC_MII_DATA);
> 
>  	/* wait for end of transfer */
>  	ret = fec_enet_mdio_wait(fep);
> @@ -2045,45 +2072,69 @@ static int fec_enet_mdio_read(struct mii_bus
> *bus, int mii_id, int regnum)
>  	return ret;
>  }
> 
> -static int fec_enet_mdio_write(struct mii_bus *bus, int mii_id, int regnum,
> -			   u16 value)
> +static int fec_enet_mdio_write_c22(struct mii_bus *bus, int mii_id, int
> regnum,
> +				   u16 value)
>  {
>  	struct fec_enet_private *fep = bus->priv;
>  	struct device *dev = &fep->pdev->dev;
>  	int ret, frame_start, frame_addr;
> -	bool is_c45 = !!(regnum & MII_ADDR_C45);
> 
>  	ret = pm_runtime_resume_and_get(dev);
>  	if (ret < 0)
>  		return ret;
> 
> -	if (is_c45) {
> -		frame_start = FEC_MMFR_ST_C45;
> +	/* C22 write */
> +	frame_start = FEC_MMFR_ST;
> +	frame_addr = regnum;
> 
> -		/* write address */
> -		frame_addr = (regnum >> 16);
> -		writel(frame_start | FEC_MMFR_OP_ADDR_WRITE |
> -		       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(frame_addr) |
> -		       FEC_MMFR_TA | (regnum & 0xFFFF),
> -		       fep->hwp + FEC_MII_DATA);
> +	/* start a write op */
> +	writel(frame_start | FEC_MMFR_OP_WRITE |
> +	       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(frame_addr) |
> +	       FEC_MMFR_TA | FEC_MMFR_DATA(value),
> +	       fep->hwp + FEC_MII_DATA);
> 
> -		/* wait for end of transfer */
> -		ret = fec_enet_mdio_wait(fep);
> -		if (ret) {
> -			netdev_err(fep->netdev, "MDIO address write timeout\n");
> -			goto out;
> -		}
> -	} else {
> -		/* C22 write */
> -		frame_start = FEC_MMFR_ST;
> -		frame_addr = regnum;
> +	/* wait for end of transfer */
> +	ret = fec_enet_mdio_wait(fep);
> +	if (ret)
> +		netdev_err(fep->netdev, "MDIO write timeout\n");
> +
> +	pm_runtime_mark_last_busy(dev);
> +	pm_runtime_put_autosuspend(dev);
> +
> +	return ret;
> +}
> +
> +static int fec_enet_mdio_write_c45(struct mii_bus *bus, int mii_id,
> +				   int devad, int regnum, u16 value)
> +{
> +	struct fec_enet_private *fep = bus->priv;
> +	struct device *dev = &fep->pdev->dev;
> +	int ret, frame_start;
> +
> +	ret = pm_runtime_resume_and_get(dev);
> +	if (ret < 0)
> +		return ret;
> +
> +	frame_start = FEC_MMFR_ST_C45;
> +
> +	/* write address */
> +	writel(frame_start | FEC_MMFR_OP_ADDR_WRITE |
> +	       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(devad) |
> +	       FEC_MMFR_TA | (regnum & 0xFFFF),
> +	       fep->hwp + FEC_MII_DATA);
> +
> +	/* wait for end of transfer */
> +	ret = fec_enet_mdio_wait(fep);
> +	if (ret) {
> +		netdev_err(fep->netdev, "MDIO address write timeout\n");
> +		goto out;
>  	}
> 
>  	/* start a write op */
>  	writel(frame_start | FEC_MMFR_OP_WRITE |
> -		FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(frame_addr) |
> -		FEC_MMFR_TA | FEC_MMFR_DATA(value),
> -		fep->hwp + FEC_MII_DATA);
> +	       FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(devad) |
> +	       FEC_MMFR_TA | FEC_MMFR_DATA(value),
> +	       fep->hwp + FEC_MII_DATA);
> 
>  	/* wait for end of transfer */
>  	ret = fec_enet_mdio_wait(fep);
> @@ -2381,8 +2432,10 @@ static int fec_enet_mii_init(struct platform_device
> *pdev)
>  	}
> 
>  	fep->mii_bus->name = "fec_enet_mii_bus";
> -	fep->mii_bus->read = fec_enet_mdio_read;
> -	fep->mii_bus->write = fec_enet_mdio_write;
> +	fep->mii_bus->read = fec_enet_mdio_read_c22;
> +	fep->mii_bus->write = fec_enet_mdio_write_c22;
> +	fep->mii_bus->read_c45 = fec_enet_mdio_read_c45;
> +	fep->mii_bus->write_c45 = fec_enet_mdio_write_c45;
>  	snprintf(fep->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
>  		pdev->name, fep->dev_id + 1);
>  	fep->mii_bus->priv = fep;
> 

It looks good to me.
Reviewed-by: Wei Fang <wei.fang at nxp.com>


From peter.wang at mediatek.com  Tue Dec 27 22:01:57 2022
From: peter.wang at mediatek.com (peter.wang at mediatek.com)
Date: Wed, 28 Dec 2022 14:01:57 +0800
Subject: [PATCH v3] ufs: core: wlun resume SSU(Acitve) fail recovery
Message-ID: <20221228060157.24852-1-peter.wang@mediatek.com>

From: Peter Wang <peter.wang at mediatek.com>

When wlun resume SSU(Active) timeout, scsi try eh_host_reset_handler.
But ufshcd_eh_host_reset_handler hang at wait flush_work(&hba->eh_work).
And ufshcd_err_handler hang at wait rpm resume.
Do link recovery only in this case. Below is IO hang stack dump.

<ffffffdd78e02b34> schedule+0x110/0x204
<ffffffdd78e0be60> schedule_timeout+0x98/0x138
<ffffffdd78e040e8> wait_for_common_io+0x130/0x2d0
<ffffffdd77d6a000> blk_execute_rq+0x10c/0x16c
<ffffffdd78126d90> __scsi_execute+0xfc/0x278
<ffffffdd7813891c> ufshcd_set_dev_pwr_mode+0x1c8/0x40c
<ffffffdd78137d1c> __ufshcd_wl_resume+0xf0/0x5cc
<ffffffdd78137ae0> ufshcd_wl_runtime_resume+0x40/0x18c
<ffffffdd78136108> scsi_runtime_resume+0x88/0x104
<ffffffdd7809a4f8> __rpm_callback+0x1a0/0xaec
<ffffffdd7809b624> rpm_resume+0x7e0/0xcd0
<ffffffdd7809a788> __rpm_callback+0x430/0xaec
<ffffffdd7809b644> rpm_resume+0x800/0xcd0
<ffffffdd780a0778> pm_runtime_work+0x148/0x198

<ffffffdd78e02b34> schedule+0x110/0x204
<ffffffdd78e0be10> schedule_timeout+0x48/0x138
<ffffffdd78e03d9c> wait_for_common+0x144/0x2dc
<ffffffdd7758bba4> __flush_work+0x3d0/0x508
<ffffffdd7815572c> ufshcd_eh_host_reset_handler+0x134/0x3a8
<ffffffdd781216f4> scsi_try_host_reset+0x54/0x204
<ffffffdd78120594> scsi_eh_ready_devs+0xb30/0xd48
<ffffffdd7812373c> scsi_error_handler+0x260/0x874

<ffffffdd78e02b34> schedule+0x110/0x204
<ffffffdd7809af64> rpm_resume+0x120/0xcd0
<ffffffdd7809fde8> __pm_runtime_resume+0xa0/0x17c
<ffffffdd7815193c> ufshcd_err_handling_prepare+0x40/0x430
<ffffffdd7814cce8> ufshcd_err_handler+0x1c4/0xd4c

Signed-off-by: Peter Wang <peter.wang at mediatek.com>
---
 drivers/ufs/core/ufshcd.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index e18c9f4463ec..0dfb9a35bf66 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -7366,6 +7366,23 @@ static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd)
 
 	hba = shost_priv(cmd->device->host);
 
+	/*
+	 * If pm op resume fail and wait err recovery, do link recovery only.
+	 * Because schedule eh work will get dead lock in ufshcd_rpm_get_sync
+	 * and wait wlun resume, but wlun resume error wait eh work finish.
+	 */
+	if (hba->pm_op_in_progress &&
+	    hba->curr_dev_pwr_mode != UFS_ACTIVE_PWR_MODE) {
+		err = ufshcd_link_recovery(hba);
+		if (err) {
+			dev_err(hba->dev, "%s: power state %d pm_progress %d",
+				__func__,
+				hba->curr_dev_pwr_mode,
+				hba->pm_op_in_progress);
+		}
+		return err;
+	}
+
 	spin_lock_irqsave(hba->host->host_lock, flags);
 	hba->force_reset = true;
 	ufshcd_schedule_eh_work(hba);
-- 
2.18.0



From Biao.Huang at mediatek.com  Tue Dec 27 22:22:10 2022
From: Biao.Huang at mediatek.com (=?utf-8?B?QmlhbyBIdWFuZyAo6buE5b2qKQ==?=)
Date: Wed, 28 Dec 2022 06:22:10 +0000
Subject: [PATCH v5 1/2] stmmac: dwmac-mediatek: enable 2ns delay only for
 special cases
In-Reply-To: <Y6sbRPbDDzeGbkM+@lunn.ch>
References: <20221223015029.24978-1-biao.huang@mediatek.com>
	 <20221223015029.24978-2-biao.huang@mediatek.com> <Y6W4vwJHG+6PI8fd@lunn.ch>
	 <4a82aa5437e496e2b65b77ef08d7897a4b23f7e5.camel@mediatek.com>
	 <Y6m7eNdWVL3IKFj2@lunn.ch>
	 <5baa7c88716042421b0dd1d579c6aa70d253a546.camel@mediatek.com>
	 <Y6sbRPbDDzeGbkM+@lunn.ch>
Message-ID: <e88410d2f1e770ceccd31e693cbcd07ad0c09a03.camel@mediatek.com>

Dear Andrew,
	Thanks for your comments~

On Tue, 2022-12-27 at 17:20 +0100, Andrew Lunn wrote:
> > OK, as to this series, Is the following modification enough?
> >     1. phy-mode = rgmii-id;  in dts.
> >     2. remove the fix_mac_speed() in driver.
> 
> Yep, that is good.
OK, will update in next send.
> 
>      Andrew
Best Regards!
Biao

From biao.huang at mediatek.com  Tue Dec 27 22:33:30 2022
From: biao.huang at mediatek.com (Biao Huang)
Date: Wed, 28 Dec 2022 14:33:30 +0800
Subject: [PATCH v6 2/2] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <20221228063331.10756-1-biao.huang@mediatek.com>
References: <20221228063331.10756-1-biao.huang@mediatek.com>
Message-ID: <20221228063331.10756-3-biao.huang@mediatek.com>

Add Ethernet controller node for mt8195.

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Signed-off-by: Biao Huang <biao.huang at mediatek.com>
---
 arch/arm64/boot/dts/mediatek/mt8195-demo.dts | 81 ++++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt8195.dtsi     | 86 ++++++++++++++++++++
 2 files changed, 167 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8195-demo.dts b/arch/arm64/boot/dts/mediatek/mt8195-demo.dts
index 4fbd99eb496a..2e6979c47aa6 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195-demo.dts
+++ b/arch/arm64/boot/dts/mediatek/mt8195-demo.dts
@@ -258,6 +258,66 @@ &mt6359_vsram_others_ldo_reg {
 };
 
 &pio {
+	eth_default_pins: eth-default-pins {
+		pins-txd {
+			pinmux = <PINMUX_GPIO77__FUNC_GBE_TXD3>,
+				 <PINMUX_GPIO78__FUNC_GBE_TXD2>,
+				 <PINMUX_GPIO79__FUNC_GBE_TXD1>,
+				 <PINMUX_GPIO80__FUNC_GBE_TXD0>;
+			drive-strength = <MTK_DRIVE_8mA>;
+		};
+		pins-cc {
+			pinmux = <PINMUX_GPIO85__FUNC_GBE_TXC>,
+				 <PINMUX_GPIO88__FUNC_GBE_TXEN>,
+				 <PINMUX_GPIO87__FUNC_GBE_RXDV>,
+				 <PINMUX_GPIO86__FUNC_GBE_RXC>;
+			drive-strength = <MTK_DRIVE_8mA>;
+		};
+		pins-rxd {
+			pinmux = <PINMUX_GPIO81__FUNC_GBE_RXD3>,
+				 <PINMUX_GPIO82__FUNC_GBE_RXD2>,
+				 <PINMUX_GPIO83__FUNC_GBE_RXD1>,
+				 <PINMUX_GPIO84__FUNC_GBE_RXD0>;
+		};
+		pins-mdio {
+			pinmux = <PINMUX_GPIO89__FUNC_GBE_MDC>,
+				 <PINMUX_GPIO90__FUNC_GBE_MDIO>;
+			input-enable;
+		};
+		pins-power {
+			pinmux = <PINMUX_GPIO91__FUNC_GPIO91>,
+				 <PINMUX_GPIO92__FUNC_GPIO92>;
+			output-high;
+		};
+	};
+
+	eth_sleep_pins: eth-sleep-pins {
+		pins-txd {
+			pinmux = <PINMUX_GPIO77__FUNC_GPIO77>,
+				 <PINMUX_GPIO78__FUNC_GPIO78>,
+				 <PINMUX_GPIO79__FUNC_GPIO79>,
+				 <PINMUX_GPIO80__FUNC_GPIO80>;
+		};
+		pins-cc {
+			pinmux = <PINMUX_GPIO85__FUNC_GPIO85>,
+				 <PINMUX_GPIO88__FUNC_GPIO88>,
+				 <PINMUX_GPIO87__FUNC_GPIO87>,
+				 <PINMUX_GPIO86__FUNC_GPIO86>;
+		};
+		pins-rxd {
+			pinmux = <PINMUX_GPIO81__FUNC_GPIO81>,
+				 <PINMUX_GPIO82__FUNC_GPIO82>,
+				 <PINMUX_GPIO83__FUNC_GPIO83>,
+				 <PINMUX_GPIO84__FUNC_GPIO84>;
+		};
+		pins-mdio {
+			pinmux = <PINMUX_GPIO89__FUNC_GPIO89>,
+				 <PINMUX_GPIO90__FUNC_GPIO90>;
+			input-disable;
+			bias-disable;
+		};
+	};
+
 	gpio_keys_pins: gpio-keys-pins {
 		pins {
 			pinmux = <PINMUX_GPIO106__FUNC_GPIO106>;
@@ -434,6 +494,27 @@ &xhci0 {
 	status = "okay";
 };
 
+&eth {
+	phy-mode ="rgmii-id";
+	phy-handle = <&ethernet_phy0>;
+	snps,reset-gpio = <&pio 93 GPIO_ACTIVE_HIGH>;
+	snps,reset-delays-us = <0 10000 10000>;
+	pinctrl-names = "default", "sleep";
+	pinctrl-0 = <&eth_default_pins>;
+	pinctrl-1 = <&eth_sleep_pins>;
+	status = "okay";
+
+	mdio {
+		compatible = "snps,dwmac-mdio";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		ethernet_phy0: ethernet-phy at 1 {
+			compatible = "ethernet-phy-id001c.c916";
+			reg = <0x1>;
+		};
+	};
+};
+
 &xhci1 {
 	vusb33-supply = <&mt6359_vusb_ldo_reg>;
 	status = "okay";
diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
index 5d31536f4c48..b90d38d87aa4 100644
--- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
@@ -1046,6 +1046,92 @@ spis1: spi at 1101e000 {
 			status = "disabled";
 		};
 
+		eth: ethernet at 11021000 {
+			compatible = "mediatek,mt8195-gmac", "snps,dwmac-5.10a";
+			reg = <0 0x11021000 0 0x4000>;
+			interrupts = <GIC_SPI 716 IRQ_TYPE_LEVEL_HIGH 0>;
+			interrupt-names = "macirq";
+			clock-names = "axi",
+				      "apb",
+				      "mac_main",
+				      "ptp_ref",
+				      "rmii_internal",
+				      "mac_cg";
+			clocks = <&pericfg_ao CLK_PERI_AO_ETHERNET>,
+				 <&pericfg_ao CLK_PERI_AO_ETHERNET_BUS>,
+				 <&topckgen CLK_TOP_SNPS_ETH_250M>,
+				 <&topckgen CLK_TOP_SNPS_ETH_62P4M_PTP>,
+				 <&topckgen CLK_TOP_SNPS_ETH_50M_RMII>,
+				 <&pericfg_ao CLK_PERI_AO_ETHERNET_MAC>;
+			assigned-clocks = <&topckgen CLK_TOP_SNPS_ETH_250M>,
+					  <&topckgen CLK_TOP_SNPS_ETH_62P4M_PTP>,
+					  <&topckgen CLK_TOP_SNPS_ETH_50M_RMII>;
+			assigned-clock-parents = <&topckgen CLK_TOP_ETHPLL_D2>,
+						 <&topckgen CLK_TOP_ETHPLL_D8>,
+						 <&topckgen CLK_TOP_ETHPLL_D10>;
+			power-domains = <&spm MT8195_POWER_DOMAIN_ETHER>;
+			mediatek,pericfg = <&infracfg_ao>;
+			snps,axi-config = <&stmmac_axi_setup>;
+			snps,mtl-rx-config = <&mtl_rx_setup>;
+			snps,mtl-tx-config = <&mtl_tx_setup>;
+			snps,txpbl = <16>;
+			snps,rxpbl = <16>;
+			snps,clk-csr = <0>;
+			status = "disabled";
+
+			stmmac_axi_setup: stmmac-axi-config {
+				snps,wr_osr_lmt = <0x7>;
+				snps,rd_osr_lmt = <0x7>;
+				snps,blen = <0 0 0 0 16 8 4>;
+			};
+
+			mtl_rx_setup: rx-queues-config {
+				snps,rx-queues-to-use = <4>;
+				snps,rx-sched-sp;
+				queue0 {
+					snps,dcb-algorithm;
+					snps,map-to-dma-channel = <0x0>;
+				};
+				queue1 {
+					snps,dcb-algorithm;
+					snps,map-to-dma-channel = <0x0>;
+				};
+				queue2 {
+					snps,dcb-algorithm;
+					snps,map-to-dma-channel = <0x0>;
+				};
+				queue3 {
+					snps,dcb-algorithm;
+					snps,map-to-dma-channel = <0x0>;
+				};
+			};
+
+			mtl_tx_setup: tx-queues-config {
+				snps,tx-queues-to-use = <4>;
+				snps,tx-sched-wrr;
+				queue0 {
+					snps,weight = <0x10>;
+					snps,dcb-algorithm;
+					snps,priority = <0x0>;
+				};
+				queue1 {
+					snps,weight = <0x11>;
+					snps,dcb-algorithm;
+					snps,priority = <0x1>;
+				};
+				queue2 {
+					snps,weight = <0x12>;
+					snps,dcb-algorithm;
+					snps,priority = <0x2>;
+				};
+				queue3 {
+					snps,weight = <0x13>;
+					snps,dcb-algorithm;
+					snps,priority = <0x3>;
+				};
+			};
+		};
+
 		xhci0: usb at 11200000 {
 			compatible = "mediatek,mt8195-xhci",
 				     "mediatek,mtk-xhci";
-- 
2.25.1



From Biao.Huang at mediatek.com  Tue Dec 27 22:23:05 2022
From: Biao.Huang at mediatek.com (=?utf-8?B?QmlhbyBIdWFuZyAo6buE5b2qKQ==?=)
Date: Wed, 28 Dec 2022 06:23:05 +0000
Subject: [PATCH v5 2/2] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <d7c50228-5d4e-8c73-28b3-4950917708a0@collabora.com>
References: <20221223015029.24978-1-biao.huang@mediatek.com>
	 <20221223015029.24978-3-biao.huang@mediatek.com>
	 <d7c50228-5d4e-8c73-28b3-4950917708a0@collabora.com>
Message-ID: <be254cc7a21c2ccd91230c085e9180cd0684ef94.camel@mediatek.com>

Dear Angelo,
	Thanks for your comments~

On Fri, 2022-12-23 at 10:24 +0100, AngeloGioacchino Del Regno wrote:
> Reviewed-by: AngeloGioacchino Del Regno <
> angelogioacchino.delregno at collabora.com>
Will add in next send.

Best Regards!
Biao

From biao.huang at mediatek.com  Tue Dec 27 22:33:29 2022
From: biao.huang at mediatek.com (Biao Huang)
Date: Wed, 28 Dec 2022 14:33:29 +0800
Subject: [PATCH v6 1/2] stmmac: dwmac-mediatek: remove the dwmac_fix_mac_speed
In-Reply-To: <20221228063331.10756-1-biao.huang@mediatek.com>
References: <20221228063331.10756-1-biao.huang@mediatek.com>
Message-ID: <20221228063331.10756-2-biao.huang@mediatek.com>

In current driver, MAC will always enable 2ns delay in RGMII mode,
but that's not the correct usage.

Remove the dwmac_fix_mac_speed() in driver, and recommend "rgmii-id"
for phy-mode in device tree.

Fixes: f2d356a6ab71 ("stmmac: dwmac-mediatek: add support for mt8195")
Signed-off-by: Biao Huang <biao.huang at mediatek.com>
---
 .../ethernet/stmicro/stmmac/dwmac-mediatek.c  | 26 -------------------
 1 file changed, 26 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c
index d42e1afb6521..2f7d8e4561d9 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c
@@ -90,7 +90,6 @@ struct mediatek_dwmac_plat_data {
 struct mediatek_dwmac_variant {
 	int (*dwmac_set_phy_interface)(struct mediatek_dwmac_plat_data *plat);
 	int (*dwmac_set_delay)(struct mediatek_dwmac_plat_data *plat);
-	void (*dwmac_fix_mac_speed)(void *priv, unsigned int speed);
 
 	/* clock ids to be requested */
 	const char * const *clk_list;
@@ -443,32 +442,9 @@ static int mt8195_set_delay(struct mediatek_dwmac_plat_data *plat)
 	return 0;
 }
 
-static void mt8195_fix_mac_speed(void *priv, unsigned int speed)
-{
-	struct mediatek_dwmac_plat_data *priv_plat = priv;
-
-	if ((phy_interface_mode_is_rgmii(priv_plat->phy_mode))) {
-		/* prefer 2ns fixed delay which is controlled by TXC_PHASE_CTRL,
-		 * when link speed is 1Gbps with RGMII interface,
-		 * Fall back to delay macro circuit for 10/100Mbps link speed.
-		 */
-		if (speed == SPEED_1000)
-			regmap_update_bits(priv_plat->peri_regmap,
-					   MT8195_PERI_ETH_CTRL0,
-					   MT8195_RGMII_TXC_PHASE_CTRL |
-					   MT8195_DLY_GTXC_ENABLE |
-					   MT8195_DLY_GTXC_INV |
-					   MT8195_DLY_GTXC_STAGES,
-					   MT8195_RGMII_TXC_PHASE_CTRL);
-		else
-			mt8195_set_delay(priv_plat);
-	}
-}
-
 static const struct mediatek_dwmac_variant mt8195_gmac_variant = {
 	.dwmac_set_phy_interface = mt8195_set_interface,
 	.dwmac_set_delay = mt8195_set_delay,
-	.dwmac_fix_mac_speed = mt8195_fix_mac_speed,
 	.clk_list = mt8195_dwmac_clk_l,
 	.num_clks = ARRAY_SIZE(mt8195_dwmac_clk_l),
 	.dma_bit_mask = 35,
@@ -619,8 +595,6 @@ static int mediatek_dwmac_common_data(struct platform_device *pdev,
 	plat->bsp_priv = priv_plat;
 	plat->init = mediatek_dwmac_init;
 	plat->clks_config = mediatek_dwmac_clks_config;
-	if (priv_plat->variant->dwmac_fix_mac_speed)
-		plat->fix_mac_speed = priv_plat->variant->dwmac_fix_mac_speed;
 
 	plat->safety_feat_cfg = devm_kzalloc(&pdev->dev,
 					     sizeof(*plat->safety_feat_cfg),
-- 
2.25.1



From biao.huang at mediatek.com  Tue Dec 27 22:33:28 2022
From: biao.huang at mediatek.com (Biao Huang)
Date: Wed, 28 Dec 2022 14:33:28 +0800
Subject: [PATCH v6 0/2] arm64: dts: mt8195: Add Ethernet controller
Message-ID: <20221228063331.10756-1-biao.huang@mediatek.com>

Changes in v6:
1. add reviewed-by as Angelo's comments
2. remove fix_mac_speed in driver as Andrew's comments.

Changes in v5:
1. reorder the clocks as Angelo's comments
2. add a driver patch to fix rgmii-id issue, then we can
use a ususal way rgmii/rgmii-id as Andrew's comments.

Changes in v4:
1. remove {address,size}-cells = <0> to avoid warning as Angelo's feedback.
2. Add reviewd-by as Angelo's comments.

Changes in v3:
1. move stmmac-axi-config, rx-queues-config, tx-queues-configs inside ethernet
node as Angelo's comments.
2. add {address,size}-cells = <0> in ethernet node as Angelo's comments.

Changes in v2:
1. modify pinctrl node used by ethernet to match rules in pinctrl-mt8195.yaml,
which is pointed by Krzysztof.
2. remove "mac-address" property in ethernet node as comments of Krzysztof.

Changes in v1:
add dts node for MT8195 Ethernet controller

Biao Huang (2):
  stmmac: dwmac-mediatek: remove the dwmac_fix_mac_speed
  arm64: dts: mt8195: Add Ethernet controller

 arch/arm64/boot/dts/mediatek/mt8195-demo.dts  | 81 +++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt8195.dtsi      | 86 +++++++++++++++++++
 .../ethernet/stmicro/stmmac/dwmac-mediatek.c  | 26 ------
 3 files changed, 167 insertions(+), 26 deletions(-)

-- 
2.18.0




From miles.chen at mediatek.com  Tue Dec 27 23:24:14 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Wed, 28 Dec 2022 15:24:14 +0800
Subject: [PATCH v2 07/23] clk: mediatek: clk-mtk: Add dummy clock ops
In-Reply-To: <20221223094259.87373-8-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-8-angelogioacchino.delregno@collabora.com>
Message-ID: <20221228072414.26391-1-miles.chen@mediatek.com>

Hi Angelo,

> In order to migrate some (few) old clock drivers to the common
> mtk_clk_simple_probe() function, add dummy clock ops to be able
> to insert a dummy clock with ID 0 at the beginning of the list.
>

...snip...
 
> +/*
> + * We need the clock IDs to start from zero but to maintain devicetree
> + * backwards compatibility we can't change bindings to start from zero.
> + * Only a few platforms are affected, so we solve issues given by the
> + * commonized MTK clocks probe function(s) by adding a dummy clock at
> + * the beginning where needed.
> + */
> +#define CLK_DUMMY		0
>

Reviewed-by: Miles Chen <miles.chen at mediatek.com> 


-- 
2.39.0




From Kyrie.Wu at mediatek.com  Tue Dec 27 23:29:21 2022
From: Kyrie.Wu at mediatek.com (=?utf-8?B?S3lyaWUgV3UgKOWQtOaZlyk=?=)
Date: Wed, 28 Dec 2022 07:29:21 +0000
Subject: [V2] media: jpeg: Fix multi-hw judgement
In-Reply-To: <4c198fb0-48a7-2e4d-3363-7eac47a0d5a7@collabora.com>
References: <20221216035247.18816-1-irui.wang@mediatek.com>
	 <4c198fb0-48a7-2e4d-3363-7eac47a0d5a7@collabora.com>
Message-ID: <52c48ab759bc9edc129774d7dfb745deaeaa174a.camel@mediatek.com>

On Tue, 2022-12-20 at 10:53 +0100, AngeloGioacchino Del Regno wrote:
> Il 16/12/22 04:52, Irui Wang ha scritto:
> > From: kyrie wu <kyrie.wu at mediatek.com>
> > 
> > some chips have multi-hw, but others have only one,
> > modify the condition of multi-hw judgement
> > 
> > Fixs: 934e8bccac95 ("mtk-jpegenc: support jpegenc multi-hardware")
> 
> Typo. s/Fixs/Fixes/g
> 
> Fix that, please.
> 
> Regards,
> Angelo
> 

Hi Angelo,

I will fix that issue in the next version.

Thanks.

Regards,
Kyrie.

From irui.wang at mediatek.com  Tue Dec 27 23:00:06 2022
From: irui.wang at mediatek.com (Irui Wang)
Date: Wed, 28 Dec 2022 15:00:06 +0800
Subject: [V3] media: jpeg: Fixes multi-hw judgement
Message-ID: <20221228070006.11111-1-irui.wang@mediatek.com>

From: kyrie wu <kyrie.wu at mediatek.com>

some chips have multi-hw, but others have only one,
modify the condition of multi-hw judgement

Fixes: 934e8bccac95 ("mtk-jpegenc: support jpegenc multi-hardware")

Signed-off-by: kyrie wu <kyrie.wu at mediatek.com>
Signed-off-by: irui wang <irui.wang at mediatek.com>
---
 drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c |  4 +++-
 drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h | 12 ++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
index 969516a940ba..9278fc356532 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
@@ -1692,7 +1692,7 @@ static int mtk_jpeg_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}
 
-	if (list_empty(&pdev->dev.devres_head)) {
+	if (!jpeg->variant->hw_arch) {
 		INIT_DELAYED_WORK(&jpeg->job_timeout_work,
 				  mtk_jpeg_job_timeout_work);
 
@@ -1885,6 +1885,7 @@ static struct mtk_jpeg_variant mtk8195_jpegenc_drvdata = {
 	.ioctl_ops = &mtk_jpeg_enc_ioctl_ops,
 	.out_q_default_fourcc = V4L2_PIX_FMT_YUYV,
 	.cap_q_default_fourcc = V4L2_PIX_FMT_JPEG,
+	.hw_arch = MTK_JPEG_HW_MULTI_CORE,
 };
 
 static const struct mtk_jpeg_variant mtk8195_jpegdec_drvdata = {
@@ -1896,6 +1897,7 @@ static const struct mtk_jpeg_variant mtk8195_jpegdec_drvdata = {
 	.ioctl_ops = &mtk_jpeg_dec_ioctl_ops,
 	.out_q_default_fourcc = V4L2_PIX_FMT_JPEG,
 	.cap_q_default_fourcc = V4L2_PIX_FMT_YUV420M,
+	.hw_arch = MTK_JPEG_HW_MULTI_CORE,
 };
 
 #if defined(CONFIG_OF)
diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h
index b9126476be8f..ec04a8ce73cf 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h
@@ -46,6 +46,16 @@ enum mtk_jpeg_ctx_state {
 	MTK_JPEG_SOURCE_CHANGE,
 };
 
+/**
+ * enum mtk_jpeg_hw_arch - arch of the jpeg hw
+ * @MTK_JPEG_HW_SINGLE_CORE:	jpeg hw is single core
+ * @MTK_JPEG_HW_MULTI_CORE:		jpeg hw is mluti-core
+ */
+enum mtk_jpeg_hw_arch {
+	MTK_JPEG_HW_SINGLE_CORE = 0,
+	MTK_JPEG_HW_MULTI_CORE = 1,
+};
+
 /**
  * struct mtk_jpeg_variant - mtk jpeg driver variant
  * @clks:			clock names
@@ -60,6 +70,7 @@ enum mtk_jpeg_ctx_state {
  * @ioctl_ops:			the callback of jpeg v4l2_ioctl_ops
  * @out_q_default_fourcc:	output queue default fourcc
  * @cap_q_default_fourcc:	capture queue default fourcc
+ * @hw_arch:            mark jpeg hw arch
  */
 struct mtk_jpeg_variant {
 	struct clk_bulk_data *clks;
@@ -74,6 +85,7 @@ struct mtk_jpeg_variant {
 	const struct v4l2_ioctl_ops *ioctl_ops;
 	u32 out_q_default_fourcc;
 	u32 cap_q_default_fourcc;
+	enum mtk_jpeg_hw_arch hw_arch;
 };
 
 struct mtk_jpeg_src_buf {
-- 
2.18.0



From miles.chen at mediatek.com  Tue Dec 27 23:54:47 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Wed, 28 Dec 2022 15:54:47 +0800
Subject: [PATCH v2 13/23] clk: mediatek: mt8173: Migrate pericfg/topckgen to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-14-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-14-angelogioacchino.delregno@collabora.com>
Message-ID: <20221228075447.12469-1-miles.chen@mediatek.com>

> Function mtk_clk_simple_probe() gained the ability to register multiple
> clock types: migrate MT8173's pericfg and topckgen to this common
> probe function to reduce duplication and code size.
> 
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Miles Chen <miles.chen at mediatek.com> 


From miles.chen at mediatek.com  Tue Dec 27 23:58:26 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Wed, 28 Dec 2022 15:58:26 +0800
Subject: [PATCH v2 14/23] clk: mediatek: clk-mt8192: Move CLK_TOP_CSW_F26M_D2 in top_divs
In-Reply-To: <20221223094259.87373-15-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-15-angelogioacchino.delregno@collabora.com>
Message-ID: <20221228075826.27396-1-miles.chen@mediatek.com>

> This driver is registered early in clk_mt8192_top_init_early() and
> then again in clk_mt8192_top_probe(): the difference between the
> two is that the early one is probed with CLK_OF_DECLARE_DRIVER and
> the latter is regularly probed as a platform_driver.
> 
> Knowing that it is not necessary for this platform to register the
> TOP_CSW_F26M_D2 clock that early, move it to top_divs and register
> it with the others during platform_driver probe for topckgen;
> 
> While at it, since the only reason why the early probe existed was
> to register that clock, remove that entirely - leaving this driver
> to use only platform_driver.
> 
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>

Thanks and this patch makes it easier to convert clk-mt8192 driver to a kernel module.

Reviewed-by: Miles Chen <miles.chen at mediatek.com> 


From miles.chen at mediatek.com  Tue Dec 27 23:50:16 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Wed, 28 Dec 2022 15:50:16 +0800
Subject: [PATCH v2 11/23] clk: mediatek: Switch to mtk_clk_simple_probe() where possible
In-Reply-To: <20221223094259.87373-12-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-12-angelogioacchino.delregno@collabora.com>
Message-ID: <20221228075016.12309-1-miles.chen@mediatek.com>

> mtk_clk_simple_probe() is a function that registers mtk gate clocks
> and, if reset data is present, a reset controller and across all of
> the MTK clock drivers, such a function is duplicated many times:
> switch to the common mtk_clk_simple_probe() function for all of the
> clock drivers that are registering as platform drivers.
> 

...snip...

> +
> +static const struct of_device_id of_match_clk_mt8183_simple[] = {
> +	{ .compatible = "mediatek,mt8183-infracfg", .data = &infra_desc },
> +	{ .compatible = "mediatek,mt8183-pericfg", .data = &peri_desc, },
> +	{ /* sentinel */ }
> +};
> +
> +static struct platform_driver clk_mt8183_simple_drv = {
> +	.probe = mtk_clk_simple_probe,
> +	.remove = mtk_clk_simple_remove,
> +	.driver = {
> +		.name = "clk-mt8183-simple",
> +		.of_match_table = of_match_clk_mt8183_simple,
> +	},
>

cool, replace clk_mt8183_infra_probe and clk_mt8183_peri_probe with
mtk_clk_simple_probe

Reviewed-by: Miles Chen <miles.chen at mediatek.com> 


From miles.chen at mediatek.com  Wed Dec 28 00:31:23 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Wed, 28 Dec 2022 16:31:23 +0800
Subject: [PATCH v2 15/23] clk: mediatek: mt8192: Join top_adj_divs and top_muxes
In-Reply-To: <20221223094259.87373-16-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-16-angelogioacchino.delregno@collabora.com>
Message-ID: <20221228083123.15298-1-miles.chen@mediatek.com>

Hi,

> These two are both mtk_composite arrays, one dependent on another, but
> that's something that the clock framework is supposed to sort out and
> anyway registering them separately isn't going to ease the framework's
> job in checking dependencies.
> 
> Put the contents of top_adj_divs in top_muxes to join them together
> and register them in one shot.
> 

In mt8192, we can join top_adj_divs and top_muxes:

mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base, &mt8192_clk_lock,
		top_clk_data);
mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base, &mt8192_clk_lock,
		top_clk_data);

However, there are other top_adj_divs[] and top_muxes[] in different types so 
we cannot join them.

For example:
in drivers/clk/mediatek/clk-mt8167.c:mtk_topckgen_init():

mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
		&mt8167_clk_lock, clk_data);
mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs),
		base, &mt8167_clk_lock, clk_data);

So we can join top_adj_divs and top_muxes in some platforms, but we
cannot join top_adj_divs and top_muxes in some other platforms.

I'm afraid that this will confuses people.


thanks,
Miles


From hsinyi at chromium.org  Wed Dec 28 03:32:04 2022
From: hsinyi at chromium.org (Hsin-Yi Wang)
Date: Wed, 28 Dec 2022 19:32:04 +0800
Subject: [PATCH] arm64: dts: mt8183: jacuzzi: Move panel under aux-bus
Message-ID: <20221228113204.1551180-1-hsinyi@chromium.org>

Read edp panel edid through aux bus, which is a more preferred way. Also
use a more generic compatible since each jacuzzi models use different
panels.

Signed-off-by: Hsin-Yi Wang <hsinyi at chromium.org>
---
 .../dts/mediatek/mt8183-kukui-jacuzzi.dtsi    | 26 ++++++++++---------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi
index 3ac83be53627..543286ce9cea 100644
--- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi
@@ -6,18 +6,6 @@
 #include "mt8183-kukui.dtsi"
 
 / {
-	panel: panel {
-		compatible = "auo,b116xw03";
-		power-supply = <&pp3300_panel>;
-		backlight = <&backlight_lcd0>;
-
-		port {
-			panel_in: endpoint {
-				remote-endpoint = <&anx7625_out>;
-			};
-		};
-	};
-
 	pp1200_mipibrdg: pp1200-mipibrdg {
 		compatible = "regulator-fixed";
 		regulator-name = "pp1200_mipibrdg";
@@ -181,6 +169,20 @@ anx7625_out: endpoint {
 				remote-endpoint = <&panel_in>;
 			};
 		};
+
+		aux-bus {
+			panel: panel {
+				compatible = "edp-panel";
+				power-supply = <&pp3300_panel>;
+				backlight = <&backlight_lcd0>;
+
+				port {
+					panel_in: endpoint {
+						remote-endpoint = <&anx7625_out>;
+					};
+				};
+			};
+		};
 	};
 };
 
-- 
2.39.0.314.g84b9a713c41-goog



From allen-kh.cheng at mediatek.com  Wed Dec 28 03:57:56 2022
From: allen-kh.cheng at mediatek.com (Allen-KH Cheng)
Date: Wed, 28 Dec 2022 19:57:56 +0800
Subject: [PATCH] ASoC: mediatek: mt8186: Add machine support for max98357a
Message-ID: <20221228115756.28014-1-allen-kh.cheng@mediatek.com>

Add support for mt8186 with mt6366 and max98357a.

Signed-off-by: Allen-KH Cheng <allen-kh.cheng at mediatek.com>
---
 sound/soc/mediatek/Kconfig | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/sound/soc/mediatek/Kconfig b/sound/soc/mediatek/Kconfig
index 363fa4d47680..7bdb0ded831c 100644
--- a/sound/soc/mediatek/Kconfig
+++ b/sound/soc/mediatek/Kconfig
@@ -182,9 +182,10 @@ config SND_SOC_MT8186_MT6366_DA7219_MAX98357
 	  If unsure select "N".
 
 config SND_SOC_MT8186_MT6366_RT1019_RT5682S
-	tristate "ASoC Audio driver for MT8186 with RT1019 RT5682S codec"
+	tristate "ASoC Audio driver for MT8186 with RT1019 RT5682S MAX98357A/MAX98360 codec"
 	depends on I2C && GPIOLIB
 	depends on SND_SOC_MT8186 && MTK_PMIC_WRAP
+	select SND_SOC_MAX98357A
 	select SND_SOC_MT6358
 	select SND_SOC_RT1015P
 	select SND_SOC_RT5682S
-- 
2.18.0



From tongjian at huaqin.corp-partner.google.com  Wed Dec 28 04:22:28 2022
From: tongjian at huaqin.corp-partner.google.com (tongjian)
Date: Wed, 28 Dec 2022 20:22:28 +0800
Subject: [PATCH 0/2] Add new AMP MAX98360A for RT5682S
Message-ID: <20221228122230.3818533-1-tongjian@huaqin.corp-partner.google.com>

Add MAX98360A for RT5682S, MAX98360A works same as rt1019. So, it can
be supported.

tongjian (2):
  ASoC: mediatek: mt8186: support rt5682s_max98360
  ASoC: dt-bindings: mt8186-mt6366: add new compatible for max98360a

 .../sound/mt8186-mt6366-rt1019-rt5682s.yaml   |  1 +
 .../mt8186/mt8186-mt6366-rt1019-rt5682s.c     | 22 ++++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

-- 
2.25.1



From tongjian at huaqin.corp-partner.google.com  Wed Dec 28 04:22:29 2022
From: tongjian at huaqin.corp-partner.google.com (tongjian)
Date: Wed, 28 Dec 2022 20:22:29 +0800
Subject: [PATCH 1/2] ASoC: mediatek: mt8186: support rt5682s_max98360
In-Reply-To: <20221228122230.3818533-1-tongjian@huaqin.corp-partner.google.com>
References: <20221228122230.3818533-1-tongjian@huaqin.corp-partner.google.com>
Message-ID: <20221228122230.3818533-2-tongjian@huaqin.corp-partner.google.com>

Add support for using the rt5682s codec together with max98360a on
MT8186-MT6366-RT1019-RT5682S machines.

Signed-off-by: tongjian <tongjian at huaqin.corp-partner.google.com>
---
 .../mt8186/mt8186-mt6366-rt1019-rt5682s.c     | 22 ++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/sound/soc/mediatek/mt8186/mt8186-mt6366-rt1019-rt5682s.c b/sound/soc/mediatek/mt8186/mt8186-mt6366-rt1019-rt5682s.c
index 8f77a0bc1dc8..af44e331dae8 100644
--- a/sound/soc/mediatek/mt8186/mt8186-mt6366-rt1019-rt5682s.c
+++ b/sound/soc/mediatek/mt8186/mt8186-mt6366-rt1019-rt5682s.c
@@ -1083,6 +1083,21 @@ static struct snd_soc_card mt8186_mt6366_rt1019_rt5682s_soc_card = {
 	.num_configs = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_codec_conf),
 };
 
+static struct snd_soc_card mt8186_mt6366_rt5682s_max98360_soc_card = {
+	.name = "mt8186_rt5682s_max98360",
+	.owner = THIS_MODULE,
+	.dai_link = mt8186_mt6366_rt1019_rt5682s_dai_links,
+	.num_links = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_dai_links),
+	.controls = mt8186_mt6366_rt1019_rt5682s_controls,
+	.num_controls = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_controls),
+	.dapm_widgets = mt8186_mt6366_rt1019_rt5682s_widgets,
+	.num_dapm_widgets = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_widgets),
+	.dapm_routes = mt8186_mt6366_rt1019_rt5682s_routes,
+	.num_dapm_routes = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_routes),
+	.codec_conf = mt8186_mt6366_rt1019_rt5682s_codec_conf,
+	.num_configs = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_codec_conf),
+};
+
 static int mt8186_mt6366_rt1019_rt5682s_dev_probe(struct platform_device *pdev)
 {
 	struct snd_soc_card *card;
@@ -1232,9 +1247,14 @@ static int mt8186_mt6366_rt1019_rt5682s_dev_probe(struct platform_device *pdev)
 
 #if IS_ENABLED(CONFIG_OF)
 static const struct of_device_id mt8186_mt6366_rt1019_rt5682s_dt_match[] = {
-	{	.compatible = "mediatek,mt8186-mt6366-rt1019-rt5682s-sound",
+	{
+		.compatible = "mediatek,mt8186-mt6366-rt1019-rt5682s-sound",
 		.data = &mt8186_mt6366_rt1019_rt5682s_soc_card,
 	},
+	{
+		.compatible = "mediatek,mt8186-mt6366-rt5682s-max98360-sound",
+		.data = &mt8186_mt6366_rt5682s_max98360_soc_card,
+	},
 	{}
 };
 MODULE_DEVICE_TABLE(of, mt8186_mt6366_rt1019_rt5682s_dt_match);
-- 
2.25.1



From tongjian at huaqin.corp-partner.google.com  Wed Dec 28 04:22:30 2022
From: tongjian at huaqin.corp-partner.google.com (tongjian)
Date: Wed, 28 Dec 2022 20:22:30 +0800
Subject: [PATCH 2/2] ASoC: dt-bindings: mt8186-mt6366: add new compatible for max98360a
In-Reply-To: <20221228122230.3818533-1-tongjian@huaqin.corp-partner.google.com>
References: <20221228122230.3818533-1-tongjian@huaqin.corp-partner.google.com>
Message-ID: <20221228122230.3818533-3-tongjian@huaqin.corp-partner.google.com>

Adds new compatible string "mt8186-mt6366-rt5682s-max98360-sound" for machines
with max98360a and rt5682s.

Signed-off-by: tongjian <tongjian at huaqin.corp-partner.google.com>
---
 .../devicetree/bindings/sound/mt8186-mt6366-rt1019-rt5682s.yaml  | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/sound/mt8186-mt6366-rt1019-rt5682s.yaml b/Documentation/devicetree/bindings/sound/mt8186-mt6366-rt1019-rt5682s.yaml
index 9d3139990237..aa23b0024c46 100644
--- a/Documentation/devicetree/bindings/sound/mt8186-mt6366-rt1019-rt5682s.yaml
+++ b/Documentation/devicetree/bindings/sound/mt8186-mt6366-rt1019-rt5682s.yaml
@@ -16,6 +16,7 @@ properties:
   compatible:
     enum:
       - mediatek,mt8186-mt6366-rt1019-rt5682s-sound
+      - mediatek,mt8186-mt6366-rt5682s-max98360-sound
 
   mediatek,platform:
     $ref: "/schemas/types.yaml#/definitions/phandle"
-- 
2.25.1



From bagasdotme at gmail.com  Wed Dec 28 04:29:52 2022
From: bagasdotme at gmail.com (Bagas Sanjaya)
Date: Wed, 28 Dec 2022 19:29:52 +0700
Subject: [V2] media: jpeg: Fix multi-hw judgement
In-Reply-To: <20221216035247.18816-1-irui.wang@mediatek.com>
References: <20221216035247.18816-1-irui.wang@mediatek.com>
Message-ID: <Y6w2wG2MlIiHlkr/@debian.me>

On Fri, Dec 16, 2022 at 11:52:47AM +0800, Irui Wang wrote:
> From: kyrie wu <kyrie.wu at mediatek.com>
> 
> some chips have multi-hw, but others have only one,
> modify the condition of multi-hw judgement

nit: s/judgement/conditional block/ ...

> -	if (list_empty(&pdev->dev.devres_head)) {
> +	if (!jpeg->variant->hw_arch) {

... like here (if block).

Thanks.

-- 
An old man doll... just what I always wanted! - Clara
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20221228/fab03370/attachment.sig>

From krzysztof.kozlowski at linaro.org  Wed Dec 28 04:37:12 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Wed, 28 Dec 2022 13:37:12 +0100
Subject: [PATCH 1/2] ASoC: mediatek: mt8186: support rt5682s_max98360
In-Reply-To: <20221228122230.3818533-2-tongjian@huaqin.corp-partner.google.com>
References: <20221228122230.3818533-1-tongjian@huaqin.corp-partner.google.com>
 <20221228122230.3818533-2-tongjian@huaqin.corp-partner.google.com>
Message-ID: <cae5273e-aac5-0c4c-6686-fb2cbc5379e3@linaro.org>

On 28/12/2022 13:22, tongjian wrote:
> Add support for using the rt5682s codec together with max98360a on
> MT8186-MT6366-RT1019-RT5682S machines.
> 
> Signed-off-by: tongjian <tongjian at huaqin.corp-partner.google.com>

The author and SoB should be full name. Is this correct (full)
transliteration of your name?


Best regards,
Krzysztof



From krzysztof.kozlowski at linaro.org  Wed Dec 28 04:38:05 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Wed, 28 Dec 2022 13:38:05 +0100
Subject: [PATCH 2/2] ASoC: dt-bindings: mt8186-mt6366: add new compatible
 for max98360a
In-Reply-To: <20221228122230.3818533-3-tongjian@huaqin.corp-partner.google.com>
References: <20221228122230.3818533-1-tongjian@huaqin.corp-partner.google.com>
 <20221228122230.3818533-3-tongjian@huaqin.corp-partner.google.com>
Message-ID: <76a34e02-ec76-10c8-5cea-681a7477a026@linaro.org>

On 28/12/2022 13:22, tongjian wrote:
> Adds new compatible string "mt8186-mt6366-rt5682s-max98360-sound" for machines
> with max98360a and rt5682s.
> 
> Signed-off-by: tongjian <tongjian at huaqin.corp-partner.google.com>
> ---


Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>

Best regards,
Krzysztof



From andrew at lunn.ch  Wed Dec 28 08:00:28 2022
From: andrew at lunn.ch (Andrew Lunn)
Date: Wed, 28 Dec 2022 17:00:28 +0100
Subject: [PATCH v5 1/2] stmmac: dwmac-mediatek: enable 2ns delay only for
 special cases
In-Reply-To: <5baa7c88716042421b0dd1d579c6aa70d253a546.camel@mediatek.com>
References: <20221223015029.24978-1-biao.huang@mediatek.com>
 <20221223015029.24978-2-biao.huang@mediatek.com>
 <Y6W4vwJHG+6PI8fd@lunn.ch>
 <4a82aa5437e496e2b65b77ef08d7897a4b23f7e5.camel@mediatek.com>
 <Y6m7eNdWVL3IKFj2@lunn.ch>
 <5baa7c88716042421b0dd1d579c6aa70d253a546.camel@mediatek.com>
Message-ID: <Y6xoHH6ETfbufX/a@lunn.ch>

> ************* MEDIATEK Confidentiality Notice ********************
> The information contained in this e-mail message (including any
> attachments) may be confidential, proprietary, privileged, or otherwise
> exempt from disclosure under applicable laws. It is intended to be
> conveyed only to the designated recipient(s). Any use, dissemination,
> distribution, printing, retaining or copying of this e-mail (including its
> attachments) by unintended recipient(s) is strictly prohibited and may
> be unlawful. If you are not an intended recipient of this e-mail, or believe
> that you have received this e-mail in error, please notify the sender
> immediately (by replying to this e-mail), delete any and all copies of
> this e-mail (including any attachments) from your system, and do not
> disclose the content of this e-mail to any other person. Thank you!

Please remove this. You are knowingly posting to a public mailing
list, which is publicly archived, etc.

      Andrew




From andrew at lunn.ch  Wed Dec 28 08:13:40 2022
From: andrew at lunn.ch (Andrew Lunn)
Date: Wed, 28 Dec 2022 17:13:40 +0100
Subject: [PATCH v6 2/2] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <20221228063331.10756-3-biao.huang@mediatek.com>
References: <20221228063331.10756-1-biao.huang@mediatek.com>
 <20221228063331.10756-3-biao.huang@mediatek.com>
Message-ID: <Y6xrNAyvJhP22RdF@lunn.ch>

> --- a/arch/arm64/boot/dts/mediatek/mt8195-demo.dts
> +++ b/arch/arm64/boot/dts/mediatek/mt8195-demo.dts
> @@ -258,6 +258,66 @@ &mt6359_vsram_others_ldo_reg {
>  };
>  
> +&eth {
> +	phy-mode ="rgmii-id";
> +	phy-handle = <&ethernet_phy0>;
> +	snps,reset-gpio = <&pio 93 GPIO_ACTIVE_HIGH>;
> +	snps,reset-delays-us = <0 10000 10000>;
> +	pinctrl-names = "default", "sleep";
> +	pinctrl-0 = <&eth_default_pins>;
> +	pinctrl-1 = <&eth_sleep_pins>;
> +	status = "okay";
> +
> +	mdio {
> +		compatible = "snps,dwmac-mdio";
> +		#address-cells = <1>;
> +		#size-cells = <0>;

The mdio bus master is a property of the SoC, not the board. So i
would expect it be in the .dtsi file.

> +		ethernet_phy0: ethernet-phy at 1 {
> +			compatible = "ethernet-phy-id001c.c916";
> +			reg = <0x1>;
> +		};

Is the PHY integrated into the SoC, or on the board?

You also don't need the compatible, if the PHY correctly implements
the ID registers.

   Andrew


From Biao.Huang at mediatek.com  Wed Dec 28 16:42:00 2022
From: Biao.Huang at mediatek.com (=?utf-8?B?QmlhbyBIdWFuZyAo6buE5b2qKQ==?=)
Date: Thu, 29 Dec 2022 00:42:00 +0000
Subject: [PATCH v6 2/2] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <Y6xrNAyvJhP22RdF@lunn.ch>
References: <20221228063331.10756-1-biao.huang@mediatek.com>
	 <20221228063331.10756-3-biao.huang@mediatek.com> <Y6xrNAyvJhP22RdF@lunn.ch>
Message-ID: <a3959ffb49cd8ab2f3b0fad5149c222b08fc2032.camel@mediatek.com>

On Wed, 2022-12-28 at 17:13 +0100, Andrew Lunn wrote:
> > --- a/arch/arm64/boot/dts/mediatek/mt8195-demo.dts
> > +++ b/arch/arm64/boot/dts/mediatek/mt8195-demo.dts
> > @@ -258,6 +258,66 @@ &mt6359_vsram_others_ldo_reg {
> >  };
> >  
> > +&eth {
> > +	phy-mode ="rgmii-id";
> > +	phy-handle = <&ethernet_phy0>;
> > +	snps,reset-gpio = <&pio 93 GPIO_ACTIVE_HIGH>;
> > +	snps,reset-delays-us = <0 10000 10000>;
> > +	pinctrl-names = "default", "sleep";
> > +	pinctrl-0 = <&eth_default_pins>;
> > +	pinctrl-1 = <&eth_sleep_pins>;
> > +	status = "okay";
> > +
> > +	mdio {
> > +		compatible = "snps,dwmac-mdio";
> > +		#address-cells = <1>;
> > +		#size-cells = <0>;
> 
> The mdio bus master is a property of the SoC, not the board. So i
> would expect it be in the .dtsi file.
OK, will move mdio to .dtsi.
> 
> > +		ethernet_phy0: ethernet-phy at 1 {
> > +			compatible = "ethernet-phy-id001c.c916";
> > +			reg = <0x1>;
> > +		};
> 
> Is the PHY integrated into the SoC, or on the board?
The PHY is on the board, an external device as to SoC.
> 
> You also don't need the compatible, if the PHY correctly implements
> the ID registers.
But without the compatible, it seems PHY driver will not be attached.
How should I do? Thanks in advance.
> 
>    Andrew
Best Regards!
Biao

From andrew at lunn.ch  Wed Dec 28 17:06:43 2022
From: andrew at lunn.ch (Andrew Lunn)
Date: Thu, 29 Dec 2022 02:06:43 +0100
Subject: [PATCH v6 2/2] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <a3959ffb49cd8ab2f3b0fad5149c222b08fc2032.camel@mediatek.com>
References: <20221228063331.10756-1-biao.huang@mediatek.com>
 <20221228063331.10756-3-biao.huang@mediatek.com>
 <Y6xrNAyvJhP22RdF@lunn.ch>
 <a3959ffb49cd8ab2f3b0fad5149c222b08fc2032.camel@mediatek.com>
Message-ID: <Y6zoI3XYnFFbN/Z5@lunn.ch>

> > Is the PHY integrated into the SoC, or on the board?
> The PHY is on the board, an external device as to SoC.
> >
> > You also don't need the compatible, if the PHY correctly implements
> > the ID registers.
> But without the compatible, it seems PHY driver will not be attached.
> How should I do? Thanks in advance.

Check what happens in mdiobus_scan() and get_phy_device(). When it
reads registers 2 and 3, does it get valid ID register contents?

      Andrew


From Biao.Huang at mediatek.com  Wed Dec 28 16:37:10 2022
From: Biao.Huang at mediatek.com (=?utf-8?B?QmlhbyBIdWFuZyAo6buE5b2qKQ==?=)
Date: Thu, 29 Dec 2022 00:37:10 +0000
Subject: [PATCH v5 1/2] stmmac: dwmac-mediatek: enable 2ns delay only for
 special cases
In-Reply-To: <Y6xoHH6ETfbufX/a@lunn.ch>
References: <20221223015029.24978-1-biao.huang@mediatek.com>
	 <20221223015029.24978-2-biao.huang@mediatek.com> <Y6W4vwJHG+6PI8fd@lunn.ch>
	 <4a82aa5437e496e2b65b77ef08d7897a4b23f7e5.camel@mediatek.com>
	 <Y6m7eNdWVL3IKFj2@lunn.ch>
	 <5baa7c88716042421b0dd1d579c6aa70d253a546.camel@mediatek.com>
	 <Y6xoHH6ETfbufX/a@lunn.ch>
Message-ID: <fc4926e561cb09e68626464e370d19b92f67aa28.camel@mediatek.com>

On Wed, 2022-12-28 at 17:00 +0100, Andrew Lunn wrote:
> > ************* MEDIATEK Confidentiality Notice ********************
> > The information contained in this e-mail message (including any
> > attachments) may be confidential, proprietary, privileged, or
> > otherwise
> > exempt from disclosure under applicable laws. It is intended to be
> > conveyed only to the designated recipient(s). Any use,
> > dissemination,
> > distribution, printing, retaining or copying of this e-mail
> > (including its
> > attachments) by unintended recipient(s) is strictly prohibited and
> > may
> > be unlawful. If you are not an intended recipient of this e-mail,
> > or believe
> > that you have received this e-mail in error, please notify the
> > sender
> > immediately (by replying to this e-mail), delete any and all copies
> > of
> > this e-mail (including any attachments) from your system, and do
> > not
> > disclose the content of this e-mail to any other person. Thank you!
> 
> Please remove this. You are knowingly posting to a public mailing
> list, which is publicly archived, etc.
OK, I reply with the wrong mailbox, sorry for that.
> 
>       Andrew
> 
Best Regards!
Biao
> 

From greearb at candelatech.com  Wed Dec 28 18:17:36 2022
From: greearb at candelatech.com (Ben Greear)
Date: Wed, 28 Dec 2022 18:17:36 -0800
Subject: [PATCH] wifi: mt76: mt7915: remove BW80+80 support
In-Reply-To: <20221229021131.9361-1-MeiChia.Chiu@mediatek.com>
References: <20221229021131.9361-1-MeiChia.Chiu@mediatek.com>
Message-ID: <f50c7537-f512-ec82-b3b8-a663bf749b09@candelatech.com>

On 12/28/22 6:11 PM, MeiChia Chiu wrote:
> mt7915 doesn't support bw80+80.

You are removing a bunch of 160Mhz support flags as well, was that on
purpose?

 From what I can tell, 7915 does support 160Mhz in 2x2 mode.

Thanks,
Ben

> 
> Reviewed-by: Ryder Lee <ryder.lee at mediatek.com>
> Reviewed-by: Shayne Chen <shayne.chen at mediatek.com>
> Signed-off-by: Money Wang<Money.Wang at mediatek.com>
> Signed-off-by: MeiChia Chiu <MeiChia.Chiu at mediatek.com>
> ---
>   .../net/wireless/mediatek/mt76/mt7915/init.c  | 38 +++++--------------
>   1 file changed, 9 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
> index 571c94835942..c72d673f02dd 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
> @@ -38,8 +38,7 @@ static const struct ieee80211_iface_combination if_comb[] = {
>   				       BIT(NL80211_CHAN_WIDTH_20) |
>   				       BIT(NL80211_CHAN_WIDTH_40) |
>   				       BIT(NL80211_CHAN_WIDTH_80) |
> -				       BIT(NL80211_CHAN_WIDTH_160) |
> -				       BIT(NL80211_CHAN_WIDTH_80P80),
> +				       BIT(NL80211_CHAN_WIDTH_160),
>   	}
>   };
>   
> @@ -394,11 +393,6 @@ mt7915_init_wiphy(struct mt7915_phy *phy)
>   			phy->mt76->sband_5g.sband.vht_cap.cap |=
>   				IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991 |
>   				IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK;
> -
> -			if (!dev->dbdc_support)
> -				phy->mt76->sband_5g.sband.vht_cap.cap |=
> -					IEEE80211_VHT_CAP_SHORT_GI_160 |
> -					IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ;
>   		} else {
>   			phy->mt76->sband_5g.sband.vht_cap.cap |=
>   				IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 |
> @@ -834,13 +828,9 @@ mt7915_set_stream_he_txbf_caps(struct mt7915_phy *phy,
>   	int sts = hweight8(phy->mt76->chainmask);
>   	u8 c, sts_160 = sts;
>   
> -	/* Can do 1/2 of STS in 160Mhz mode for mt7915 */
> -	if (is_mt7915(&dev->mt76)) {
> -		if (!dev->dbdc_support)
> -			sts_160 /= 2;
> -		else
> -			sts_160 = 0;
> -	}
> +	/* mt7915 doesn't support bw160 */
> +	if (is_mt7915(&dev->mt76))
> +		sts_160 = 0;
>   
>   #ifdef CONFIG_MAC80211_MESH
>   	if (vif == NL80211_IFTYPE_MESH_POINT)
> @@ -894,9 +884,6 @@ mt7915_set_stream_he_txbf_caps(struct mt7915_phy *phy,
>   	elem->phy_cap_info[3] |= IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER;
>   	elem->phy_cap_info[4] |= IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER;
>   
> -	/* num_snd_dim
> -	 * for mt7915, max supported sts is 2 for bw > 80MHz and 0 if dbdc
> -	 */
>   	c = FIELD_PREP(IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK,
>   		       sts - 1);
>   	if (sts_160)
> @@ -944,15 +931,10 @@ mt7915_init_he_caps(struct mt7915_phy *phy, enum nl80211_band band,
>   	int i, idx = 0, nss = hweight8(phy->mt76->antenna_mask);
>   	u16 mcs_map = 0;
>   	u16 mcs_map_160 = 0;
> -	u8 nss_160;
> +	u8 nss_160 = nss;
>   
> -	if (!is_mt7915(&dev->mt76))
> -		nss_160 = nss;
> -	else if (!dev->dbdc_support)
> -		/* Can do 1/2 of NSS streams in 160Mhz mode for mt7915 */
> -		nss_160 = nss / 2;
> -	else
> -		/* Can't do 160MHz with mt7915 dbdc */
> +	/* Can't do 160MHz with mt7915 */
> +	if (is_mt7915(&dev->mt76))
>   		nss_160 = 0;
>   
>   	for (i = 0; i < 8; i++) {
> @@ -1002,8 +984,7 @@ mt7915_init_he_caps(struct mt7915_phy *phy, enum nl80211_band band,
>   		else if (nss_160)
>   			he_cap_elem->phy_cap_info[0] =
>   				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
> -				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G |
> -				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G;
> +				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G;
>   		else
>   			he_cap_elem->phy_cap_info[0] =
>   				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G;
> @@ -1075,12 +1056,11 @@ mt7915_init_he_caps(struct mt7915_phy *phy, enum nl80211_band band,
>   			break;
>   		}
>   
> +		memset(he_mcs, 0, sizeof(*he_mcs));
>   		he_mcs->rx_mcs_80 = cpu_to_le16(mcs_map);
>   		he_mcs->tx_mcs_80 = cpu_to_le16(mcs_map);
>   		he_mcs->rx_mcs_160 = cpu_to_le16(mcs_map_160);
>   		he_mcs->tx_mcs_160 = cpu_to_le16(mcs_map_160);
> -		he_mcs->rx_mcs_80p80 = cpu_to_le16(mcs_map_160);
> -		he_mcs->tx_mcs_80p80 = cpu_to_le16(mcs_map_160);
>   
>   		mt7915_set_stream_he_txbf_caps(phy, he_cap, i);
>   
> 


-- 
Ben Greear <greearb at candelatech.com>
Candela Technologies Inc  http://www.candelatech.com


From MeiChia.Chiu at mediatek.com  Wed Dec 28 18:11:31 2022
From: MeiChia.Chiu at mediatek.com (MeiChia Chiu)
Date: Thu, 29 Dec 2022 10:11:31 +0800
Subject: [PATCH] wifi: mt76: mt7915: remove BW80+80 support
Message-ID: <20221229021131.9361-1-MeiChia.Chiu@mediatek.com>

mt7915 doesn't support bw80+80.

Reviewed-by: Ryder Lee <ryder.lee at mediatek.com>
Reviewed-by: Shayne Chen <shayne.chen at mediatek.com>
Signed-off-by: Money Wang<Money.Wang at mediatek.com>
Signed-off-by: MeiChia Chiu <MeiChia.Chiu at mediatek.com>
---
 .../net/wireless/mediatek/mt76/mt7915/init.c  | 38 +++++--------------
 1 file changed, 9 insertions(+), 29 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
index 571c94835942..c72d673f02dd 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
@@ -38,8 +38,7 @@ static const struct ieee80211_iface_combination if_comb[] = {
 				       BIT(NL80211_CHAN_WIDTH_20) |
 				       BIT(NL80211_CHAN_WIDTH_40) |
 				       BIT(NL80211_CHAN_WIDTH_80) |
-				       BIT(NL80211_CHAN_WIDTH_160) |
-				       BIT(NL80211_CHAN_WIDTH_80P80),
+				       BIT(NL80211_CHAN_WIDTH_160),
 	}
 };
 
@@ -394,11 +393,6 @@ mt7915_init_wiphy(struct mt7915_phy *phy)
 			phy->mt76->sband_5g.sband.vht_cap.cap |=
 				IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991 |
 				IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK;
-
-			if (!dev->dbdc_support)
-				phy->mt76->sband_5g.sband.vht_cap.cap |=
-					IEEE80211_VHT_CAP_SHORT_GI_160 |
-					IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ;
 		} else {
 			phy->mt76->sband_5g.sband.vht_cap.cap |=
 				IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 |
@@ -834,13 +828,9 @@ mt7915_set_stream_he_txbf_caps(struct mt7915_phy *phy,
 	int sts = hweight8(phy->mt76->chainmask);
 	u8 c, sts_160 = sts;
 
-	/* Can do 1/2 of STS in 160Mhz mode for mt7915 */
-	if (is_mt7915(&dev->mt76)) {
-		if (!dev->dbdc_support)
-			sts_160 /= 2;
-		else
-			sts_160 = 0;
-	}
+	/* mt7915 doesn't support bw160 */
+	if (is_mt7915(&dev->mt76))
+		sts_160 = 0;
 
 #ifdef CONFIG_MAC80211_MESH
 	if (vif == NL80211_IFTYPE_MESH_POINT)
@@ -894,9 +884,6 @@ mt7915_set_stream_he_txbf_caps(struct mt7915_phy *phy,
 	elem->phy_cap_info[3] |= IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER;
 	elem->phy_cap_info[4] |= IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER;
 
-	/* num_snd_dim
-	 * for mt7915, max supported sts is 2 for bw > 80MHz and 0 if dbdc
-	 */
 	c = FIELD_PREP(IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK,
 		       sts - 1);
 	if (sts_160)
@@ -944,15 +931,10 @@ mt7915_init_he_caps(struct mt7915_phy *phy, enum nl80211_band band,
 	int i, idx = 0, nss = hweight8(phy->mt76->antenna_mask);
 	u16 mcs_map = 0;
 	u16 mcs_map_160 = 0;
-	u8 nss_160;
+	u8 nss_160 = nss;
 
-	if (!is_mt7915(&dev->mt76))
-		nss_160 = nss;
-	else if (!dev->dbdc_support)
-		/* Can do 1/2 of NSS streams in 160Mhz mode for mt7915 */
-		nss_160 = nss / 2;
-	else
-		/* Can't do 160MHz with mt7915 dbdc */
+	/* Can't do 160MHz with mt7915 */
+	if (is_mt7915(&dev->mt76))
 		nss_160 = 0;
 
 	for (i = 0; i < 8; i++) {
@@ -1002,8 +984,7 @@ mt7915_init_he_caps(struct mt7915_phy *phy, enum nl80211_band band,
 		else if (nss_160)
 			he_cap_elem->phy_cap_info[0] =
 				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
-				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G |
-				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G;
+				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G;
 		else
 			he_cap_elem->phy_cap_info[0] =
 				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G;
@@ -1075,12 +1056,11 @@ mt7915_init_he_caps(struct mt7915_phy *phy, enum nl80211_band band,
 			break;
 		}
 
+		memset(he_mcs, 0, sizeof(*he_mcs));
 		he_mcs->rx_mcs_80 = cpu_to_le16(mcs_map);
 		he_mcs->tx_mcs_80 = cpu_to_le16(mcs_map);
 		he_mcs->rx_mcs_160 = cpu_to_le16(mcs_map_160);
 		he_mcs->tx_mcs_160 = cpu_to_le16(mcs_map_160);
-		he_mcs->rx_mcs_80p80 = cpu_to_le16(mcs_map_160);
-		he_mcs->tx_mcs_80p80 = cpu_to_le16(mcs_map_160);
 
 		mt7915_set_stream_he_txbf_caps(phy, he_cap, i);
 
-- 
2.18.0



From ed.tsai at mediatek.com  Wed Dec 28 19:06:45 2022
From: ed.tsai at mediatek.com (Ed Tsai)
Date: Thu, 29 Dec 2022 11:06:45 +0800
Subject: [PATCH 1/1] ufs: update the timeout timer after resume
Message-ID: <20221229030645.11558-1-ed.tsai@mediatek.com>

The tags allocation is limited by the number of active queues and a
queue is marked as inactive by the queue timeout worker after up to 30Hz
by default.

Therefore, tags for the general I/O may be limited to half of the max
depth up to 30HZ after resume. To make sure the ufs request queue for pm
usage can be inactive immediately, trigger the timeout worker to release
the tag set.

Signed-off-by: Ed Tsai <ed.tsai at mediatek.com>
---
 drivers/ufs/core/ufshcd.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index e18c9f4463ec..c77570caa3a8 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -8842,6 +8842,7 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
 		hba->curr_dev_pwr_mode = pwr_mode;
 	}
 
+	mod_timer(&sdp->request_queue->timeout, 0);
 	scsi_device_put(sdp);
 	hba->host->eh_noresume = 0;
 	return ret;
-- 
2.18.0



From Biao.Huang at mediatek.com  Wed Dec 28 18:46:00 2022
From: Biao.Huang at mediatek.com (=?utf-8?B?QmlhbyBIdWFuZyAo6buE5b2qKQ==?=)
Date: Thu, 29 Dec 2022 02:46:00 +0000
Subject: [PATCH v6 2/2] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <Y6zoI3XYnFFbN/Z5@lunn.ch>
References: <20221228063331.10756-1-biao.huang@mediatek.com>
	 <20221228063331.10756-3-biao.huang@mediatek.com> <Y6xrNAyvJhP22RdF@lunn.ch>
	 <a3959ffb49cd8ab2f3b0fad5149c222b08fc2032.camel@mediatek.com>
	 <Y6zoI3XYnFFbN/Z5@lunn.ch>
Message-ID: <5b4df04a2b99c3a09820608c3382f2ddc82e5eda.camel@mediatek.com>

On Thu, 2022-12-29 at 02:06 +0100, Andrew Lunn wrote:
> > > Is the PHY integrated into the SoC, or on the board?
> > 
> > The PHY is on the board, an external device as to SoC.
> > > 
> > > You also don't need the compatible, if the PHY correctly
> > > implements
> > > the ID registers.
> > 
> > But without the compatible, it seems PHY driver will not be
> > attached.
> > How should I do? Thanks in advance.
> 
> Check what happens in mdiobus_scan() and get_phy_device(). When it
> reads registers 2 and 3, does it get valid ID register contents?
Yes, I tried remove the compatible, and PHY driver is attached as
expected. I'll remove the phy compatible in next send.
> 
>       Andrew
As to the "Confidentiality Notice", I have asked our IT to handle it.
Hope no such notice now.

Best Regards!
Biao

From krzysztof.kozlowski at linaro.org  Thu Dec 29 00:04:19 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Thu, 29 Dec 2022 09:04:19 +0100
Subject: [PATCH 1/2] ASoC: mediatek: mt8186: support rt5682s_max98360
In-Reply-To: <CAKKM_AVxcSW+ZaTbMuR-+=Fbkr64Arm2-3-MPWmoYV9Dpxkqdw@mail.gmail.com>
References: <20221228122230.3818533-1-tongjian@huaqin.corp-partner.google.com>
 <20221228122230.3818533-2-tongjian@huaqin.corp-partner.google.com>
 <cae5273e-aac5-0c4c-6686-fb2cbc5379e3@linaro.org>
 <CAKKM_AVxcSW+ZaTbMuR-+=Fbkr64Arm2-3-MPWmoYV9Dpxkqdw@mail.gmail.com>
Message-ID: <ba935a94-ccd6-e062-a9f4-2431cc69f097@linaro.org>

On 29/12/2022 02:57, Jian Tong wrote:
> Hi,
> Yes, this is my full name.

Here you use different, so that's confusing...

> 
> Best regards,
> tongjian
> 
> 
> On Wed, Dec 28, 2022 at 8:37 PM Krzysztof Kozlowski <
> krzysztof.kozlowski at linaro.org> wrote:
> 
>> On 28/12/2022 13:22, tongjian wrote:
>>> Add support for using the rt5682s codec together with max98360a on
>>> MT8186-MT6366-RT1019-RT5682S machines.
>>>
>>> Signed-off-by: tongjian <tongjian at huaqin.corp-partner.google.com>
>>
>> The author and SoB should be full name. Is this correct (full)
>> transliteration of your name?
>>
>>
>> Best regards,
>> Krzysztof
>>
>>
> 

Best regards,
Krzysztof



From miles.chen at mediatek.com  Thu Dec 29 00:21:03 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Thu, 29 Dec 2022 16:21:03 +0800
Subject: [PATCH v2 18/23] clk: mediatek: clk-mtk: Register MFG notifier in mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-19-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-19-angelogioacchino.delregno@collabora.com>
Message-ID: <20221229082103.21064-1-miles.chen@mediatek.com>

>In preparation for commonizing topckgen probe on various MediaTek SoCs
>clock drivers, add the ability to register the MFG MUX notifier in
>mtk_clk_simple_probe() by passing a custom notifier register function
>pointer, as this function will be slightly different across different
>SoCs.
>
>Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>---
> drivers/clk/mediatek/clk-mtk.c | 8 ++++++++
> drivers/clk/mediatek/clk-mtk.h | 3 +++
> 2 files changed, 11 insertions(+)
>
>diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
>index b0a6225cd7b2..df6281492fb6 100644
>--- a/drivers/clk/mediatek/clk-mtk.c
>+++ b/drivers/clk/mediatek/clk-mtk.c
>@@ -533,6 +533,14 @@ int mtk_clk_simple_probe(struct platform_device *pdev)
> 			goto unregister_composites;
> 	}
> 
>+	if (mcd->clk_notifier_func) {
>+		struct clk *mfg_mux = clk_data->hws[mcd->mfg_clk_idx]->clk;
>+
>+		r = mcd->clk_notifier_func(&pdev->dev, mfg_mux);
>+		if (r)
>+			goto unregister_clks;
>+	}

Should we have a IS_ERR_OR_NULL() check for clk_data->hws[mcd->mfg_clk_idx]?

thanks,
Miles
>+
> 	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
> 	if (r)


From Kyrie.Wu at mediatek.com  Thu Dec 29 00:19:07 2022
From: Kyrie.Wu at mediatek.com (=?utf-8?B?S3lyaWUgV3UgKOWQtOaZlyk=?=)
Date: Thu, 29 Dec 2022 08:19:07 +0000
Subject: [V2] media: jpeg: Fix multi-hw judgement
In-Reply-To: <Y6w2wG2MlIiHlkr/@debian.me>
References: <20221216035247.18816-1-irui.wang@mediatek.com>
	 <Y6w2wG2MlIiHlkr/@debian.me>
Message-ID: <0846a7d726135d28f1da2a94eaa4c978754f9d2f.camel@mediatek.com>

On Wed, 2022-12-28 at 19:29 +0700, Bagas Sanjaya wrote:
> On Fri, Dec 16, 2022 at 11:52:47AM +0800, Irui Wang wrote:
> > From: kyrie wu <kyrie.wu at mediatek.com>
> > 
> > some chips have multi-hw, but others have only one,
> > modify the condition of multi-hw judgement
> 
> nit: s/judgement/conditional block/ ...
> 
> > -	if (list_empty(&pdev->dev.devres_head)) {
> > +	if (!jpeg->variant->hw_arch) {
> 
> ... like here (if block).
> 
> Thanks.

Hi Bagas,

I can't get your suggestion exactly.
Do you mean to change if (...) as follows:
if (jpeg->variant->hw_arch)
> 

Thanks.

Regards,
Kyrie.

From chris.lu at mediatek.com  Thu Dec 29 01:30:00 2022
From: chris.lu at mediatek.com (chris.lu at mediatek.com)
Date: Thu, 29 Dec 2022 17:30:00 +0800
Subject: [PATCH 1/1] linux-firmware: update firmware for mediatek bluetooth chip (MT7921)
In-Reply-To: <20221229093000.25369-1-chris.lu@mediatek.com>
References: <20221229093000.25369-1-chris.lu@mediatek.com>
Message-ID: <20221229093000.25369-2-chris.lu@mediatek.com>

From: "Chris.Lu" <chris.lu at mediatek.com>

Update binary firmware for MT7922 BT devices.

File: mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin
Version: 20221227151301

Signed-off-by: Chris Lu <chris.lu at mediatek.com>
---
 WHENCE                                  |   2 +-
 mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin | Bin 527150 -> 527662 bytes
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/WHENCE b/WHENCE
index f31fa30..25a4fae 100644
--- a/WHENCE
+++ b/WHENCE
@@ -5530,7 +5530,7 @@ Licence: Redistributable. See LICENCE.mediatek for details.
 Driver: mt7921 - MediaTek MT7921 bluetooth chipset
 
 File: mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin
-Version: 20221109111213
+Version: 20221227151301
 
 Licence: Redistributable. See LICENCE.mediatek for details.
 
diff --git a/mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin b/mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin
index 10dcc2c0fbc1f89a5dc289dd4f4286888f029e45..26daee294b573ca5e3fd0e223d0fd346bd4055e3 100644
GIT binary patch
literal 527662
zcmd44dwf$x`aeGBk~D48Hl;0;OKH*@prsT<tr*H_3E^Z#Orc;mf|grFM6H7Bt?Eg8
zfPfVWLaB%lutH^#t)Gpxu&$dTU_n%LjiPI{u!`V<rrg at p(EQ$Wl3oDa&*z`t>-7bm
zoH@@t^UO2PJac<y<}fCE%$U(*#@ssk=FvB0k0vB<igo%bvWf)ohg|cAzvlh_^2!p1
z6f=Yf4*ZZR<=M at fr3`?6`a_9^e)A7YIO1Fhq6#%3wQGaVp+re4Aq9h|wG(D=znPfE
z1Dsk7dH(kZ{uew=pB$wjG5-tQ??nd!LDBjTmB{HPJCO at 2h`2~1kG)Y&cI+xA_X1>(
zM3z4$kz0mH<eM+b$$7O*mgC9)rJM|Uu7afPw3E_$J5f)UelMH<=kd3cR}tyKDzfOs
zD$+W?ij<FDON23NNe7-&7FUr%Ky_giIU2Q={8Uv%8t`mHyn96ziGH$*RL!a)yGyJ7
zpD*X{2`G|Za{v<ne;0}WR=__1ZjlKO2iygy1iS{=2l!NEBK|BgI!R=-z-#M7CgG1F
zGcXshUStM8B{D;Q5*ht{B9r>1$PCkq%<zAS%#G<HGwK6CE8u&P89iKN#{2<r2LS1A
z0!`i*BJ+oAk(u(1$lN(sWM*#{nMI>T<{{+qXd>Wqk$J33WXe7fnP-viIgQ9j;9)Nj
znQ~5KmM;;R6<b8cfp<qO05Uu3M6zrJp8pn^m0poq-z+jOK)%XRfKtF)fb$}=<^jMz
zMY08XZDIj4MdsBpB2$|QxJ_hUj}e(2$ZsdgzVkzoc>~W~NVoe*k$Dqkd=vV3bB)OC
zfjl1#7MZUn0n8%P at -*NXk!ei^+$%CCcZ<xwrvQ!sJ{FlDYedF}r|+L4(~0~#7l^Fd
z1^5Tx9N=ew7tjW{0JsEb7um2`fER;s3+N{-5!p$91$-j1ciaki7O))P0Bi)j47d#F
z64 at zgKsaCkAPtZK7!J4rU<Di&*{Lf4D*-!2w(vGU6`)CEXG8!%KWD$l&OHt|0f1cd
z^dfuzc#&Pqifn0=$S#L0%U=@Nl`}(7gy&X~U4^_?4FY5V@&P81ec at X`YY4u_^EBWr
z0OfxH<*!7V${dkh-6*mzLQeWz^OML{Jpn*IYm-HG-4{W4Nhh)|p&Ty>BD>*9k*!_>
zfQ%cLh-_UP;5z_#@BSZ=-2>gYkk<7dk$w9!k!`32y#C+eom`P^bOSm>_T9}Q`(C2R
z{-Yn at 4#1s&y8s1%j{vBPe|##kZs^0kM`W8yMfSi&kv;gf$bNwOIUECc8~_;)qh60J
z6xk2Yi|j{8`>`mppCIno3;<+0_Adb9J~aTQ0v;CG<H+~;O#sx>R~o=GfOi2X-`6PH
z*Lwk<i|oG!0<uN++cAI~kv+$WY%AnH2VI at 30l+TWp@a4-BJ1A`I0QHiKz at F|$X<b*
zSDHn(D at Wv1mqbo`3*c73c)$Z9H~4_a4POd)5%7x0jaUKL2zXuOZr}h503MOcd;+i*
zutVgsPK#W&M&w3423QIBi^z>03`iBZF}nco0h&ebrauAp0X`79Te1L^B6n+y$c^`j
zTn^Ia{vdL<trNL%NI&jx0MOljO62ly6gg9Y$V~#y94(@E5IM_vkt<LGo)@{o|A^cS
z1K??qn~8GFoB?=H<nDf_7i>i2?nx23dr|ItuZY}zw*j^Rc8gqbhRDtB6uEijA~%1S
z$SwLw<Q|L^xyAn at au44va*y03a;1Yr?lGgt{pCJ9!T&LoV-M0VohWioOcJ^0Aj@;m
z&2uGyqayeGaFJUE8J5Wa=yKU6K&{BFSR`^U-XL<dkfnCH$nApeYCjdZ*CF5Q&j8#a
zx8orIWZ%gGz;EYzk*h;|-TeUQ{tf8*4d8YS5V=2pE^=>PhAh0uH6mRjbh>vo;BmmK
zBDW8^ItYCpM7<vT5P-Z6eg=U44qgCU1Y8234h|uYL!du|d=G_-+y`HY+)?oT5V|<3
z0s#Nn7?Jzu4nQ3sAab8?7r8H{1E8~3LF7&x1Dq7OlhDPv&4BL#=S1%3SU?^CG(SU+
zKck+ypWaH5JoKIDd*T+c^M*{(_mWo(Twz5bJS~#)M$z|}L-e(87ky7T#6aL(z#%c<
zr!@JZZ!zf0Zo#-PP3%;EAo@<u6 at Amjh`t%;#Lk;Wik%}8MY7^6k*wV<`YzOnzUB9b
zzDLH2zL!sePr2y3g1jf~LHKF#Gb4{ti2n-w%S2zt46!q8ljz%dMD+b>JaGRbc5<TV
zE4@=BFI*BkN3RimmySZ-?~xw)KJrJ=xACOtTTl-<enDQl5MC$xiXVpz4}<Oz(f9O5
z$Q&#B{2sA$xF6}JioPWeh`v8Urhiq7zNrhu&g8em&WKl#K2G%Q9U%Iaoj^WC$gcuC
z^rCN_RrIY+7JZjXMc*RGwn8m-jyx!K{^fD8a}xNy#EQQ42Jr3=nQda=SHI{xaZ&U=
zt`SN8mx#|216}74A20ek7mH-&Leb~CSM)vjACcI<L|g~*SStFKt_3}0zSJN3w~FMY
zDABjUCX&^sMBf{jXH5DQdL95BzXbX}BCi|7&QUJq>APe?+0~-&!)WB23cc8YA0m<$
zzk#0CLa#fK2Jx?zK!#Z;gAw|;T_jbA_kRpp<d^%S=v&wd8BoVxpN3q}PYKGq=+C0>
zuLD8*l1L_;1#Pw1Ij9rywFt+f3{Qx at l`lj79l$LYiHx$JXc9Y3ABn!A2cZwt*?I6-
z3%#t>ik(9*!*)J}JXNCap`S(HZY}EfA>{cP^y~&t=(D6jB&)oluO9X6`!{&JC;Faz
z7_vHHS9Q?$8rbV$l<jkoOgsad-7flS{{g<2A;TZUPSpzJ1v_5;F=RO}`no<9i3#@n
zD`X#;gFKLT?LBxuf-)h$j=#Vbn?>KRAEKNyphM`T3i??3IqD)u^wlkcP0kj{^5>Ce
zDtP}1c2X<)Uax}QP=>Y3#m;v&qt4bqUY$r5XN$gzR+KRf>A~lb2-yBm*xqT#a|ZHt
zqP%L@=@iI(Bk=W*J6iPB7$K(%<taxQ9~6m$>g`{MZ$Lbcx_B3MxDt3l^f?1!Cp%Rn
z&!fEwz^#GaSG)xo1|t19$eRs$r$OFXs1wXf*WCww+$jb+Poa#E?_rd!z7g^DqVIun
zJYka#*xus|?1vXShuNWzHq?zBZ2>%1wV};!LfePDzH;adb<$RavfTonXj at m7!*&ng
zxfFUsS+>L0o*o3cBqg118tUfCLeaP51=PC?`+FK?L;HLT^*(R9=(~>*I|m+t99q<c
z5%NQ??>vKgK%cbsebKk(W0YG0Z`6+;ZFToq(Rc3`$h#T<yX<@qfO1?ZfsEksNWAE~
z`|o(43cK=x&s#`)7kFI)UI#s*P5z2Du at -#|t(&TOsH?@I at 6JNJ!-jbDUoW9tohajp
zM92iaR11hJhCQQR*CI{pc9B$ap!r_x%-9P3qD(u7A%DofWGu?I3bt$z$#}omnN$uN
zQNh-b_NC3xb1Cc)_AqY}`pY8GR{=Y{KLhVp at Drh*rAUXeKVd~)u$AQ~pZ~Z>D!xIV
zwjb~X+5+sL3iY_gjOTwupZ87J0`&XTLiC;By-bff`J338Jp%m*^tW;W`qR(AXAjy9
z+U|Jt$E#u2xjyI~?ck|NkOS>%LnLejefJ-}Mq2cz0_@@?lzUnZZ0;Sze~A3i4=t=k
zeU1n1YUBr*9zvg0dldEZ!z?e+%ZAh8f=<$!!w4U*BhfNx*&;D5Tl^$Tm0#2xZYJUJ
zMTC`1y0F_U?Va8%)z-|_>?!v2Aaj^|8c&#bvy~$Ovl*^|<GL)B({0n#M<H%HA*xgE
zFk{s84_oxI+R{<6&o6-+Uqqta#u)40gJH&Gj45adhDj~Lp9RDGOoYD+hE>xLZViUR
z`XPKY6kZHIaiQ=Yg!_fUKO-C)3~S5?zndF%XQo*f&J^iZ<=0INhAMS+lS83FD0yTk
zoQ7}=%0I_EfUupUz`cSr3^C~=z2-1MYP2_2>|3?(1zFfvY0_)Rz8B4(&L!riIh;98
zPbv-O(Q^hA%p_WChMgo>2{FG_Me3T&f+<j!UsqvH)e-YHE3w)MGntvID|)+}So32p
zCJ at 4#=NU+RJyBU_mXmmisOu)jJBbDm9xsrH{Cukh{36ZXyGVRC(L%<kcq at rU${3{5
zAw?{3{XicFh)0?PX?ek+(ll$klvYq}*G#t09Z*>gn*IrHG5|ah5grKILGfNPIH8IR
zNsveq(hW7|6~{oT9}!MQI2qvp!g_PwqomS~kinYAuz02*mYHmrhcb})=11qoOg=F;
z8C+8fCd33T+RbZ=2Y at QAV9A<xs|97LBI)K6#U!DWWS9$<l7wtB4DrLwc^k;&*m*kZ
zG&^g}=edH(jHY1Tnt;`yA_c!_0|`1ZBEFd1fb!l5`pky=;`L-?f<Ussaa2Mv$xdh`
zqZ9OG3 at C2`<ycVO49Z(v_gR;$`3}^#f;tD(x5bx|ame>}P#Zx#9 at M#@o&ajWb)UJk
zm=v5LdZfq$Wj<hHg20maDwatoX4!;nmP=@5`2-!SiZ5o>@m4l0USKsYNW_MNGNM4V
zQ|d at iYe5~Apl73jj{&s~)UlxM=en;zoDx8axCAR3AD_)8#Ov7ppc*hauax}p4=j<)
zNSj!h58S|bi5-;SW(R|A2<VdHo$OHSPSm)UO-`s{^$8Md0Iw9_Q_b6ob$F%)?QAWv
z8W{G)JYdp6k%831&NB!NhlC>%O4%Eb%Z-pQ6Xh8R39}&KC`g#ClxKA19BYPdbAg7q
zk!B3?zX=@1#vfyEP9W?p@%8MjkS!;^l!aE=aR5KyivI+9l2~{wQ}fA?$mUUgV!oen
zmX1envvfQ$%B7~Qss!%A2DMY0PfVIRE$}~CI-V>7xGf!z&CN>KI#N<M at pxt)j;@gQ
zYKn9cv)AFw$5T_6 at 61!4d48#7i+O;1I!`M2YTm7)&wRp1(zYwL+6|rR&NNF$*lwGK
z;YC88t7j}7<<lSynYxZ-@*K%8BqY&BG$jZZTIVrhKAEMd8)NBUUo*aG6<^F-DL~$L
z2vJIc9*o_%Dq<=hXs>vou`r($YZ^aq%tu)giwMy)?)T(<qNbekNnxZX%=RP`7JMs;
zY#!T<Z`MFN1lj>rQKWmgB at l4B)4_R>@gb{d-bvyrn;dTI>uTbPK$*f2GkcX9d3JjG
znTNp%TmHBFlF?FP(P&BcxBZF~;gAB{X5lG?Nh6TL;-w|+*9nQkQvE0Jml(%SUnd)+
zJoN6VGHdDJii}Cq*T_tZL3t~XRhEuF+m!GfG~^+EA~jh$F7GyLbQ!#k#2?~IbQ0^~
zpnDc=Jl-#XYt)P%^P`DDW{gQ?V=W!C)8srkM%J6N!wDoLW+6PWC_geFZMTpyQGN+y
zN3xA5weh)MZ+=3ElMh*!tk${0^2w8t&Ecz?Hr7v_OAgAAp9}L`>Ps<IMIu7+Z_{|T
z-E&#im~>>mr9-_hRL6C+b}N=QPRl3O at W#)KN!DbP*g)S4 at lK!6(`Q-fTSwZ4b74Ws
zB4B6;mWi64k2fXGPN|FW7P2vwY_DYENrj49u&k{#y7GiEMBBBsl4;1ZY2rF%4J3I`
z85Q-RQE}!+5#|9x94zyHU?Vj3|9GaD;Tu23E90d(G*15D&co<ZY|Z8tx>BKMz9H3>
zny)*cp-;SL2j7o&zbnstT{E6N<FVchkG)VpScUVz&`8{0)=PFdFIXdM1Ue2se^yq@
zdOXi5Zvo}^VyKi6N*N<89SsloooGpnOuY8`JQE=w%O*?5W?OS2NtRUPK8Y9lE#o)d
zVbbv{NsJUmMoH?gB7_2l-}s;@rnUJvFEhESb9TR-^3Z|8nk<EZk5$eCpIe%vXsXpr
zHNh;T>$F;-UXB#Ykb=mJL?!$Y?c*fiJ-^hXvFVryTOu22(rJhXHO~`|%A`{h4=d{(
zn6b#kC+D1w60BO`_2E-e1ip4e%a)U-GkoQo>f at dZbY6owO~Sc~!vhNSG2U5iJUOk(
zQk`4g98N9s+%mUT9-bR at I?cn&H{fYPzQ_HNOknAzw+`6#Qj<Mj)^`e0*af at AH>gbt
zmxk3>$aAK?M$mdTUG#)sgk5edmcrW at q<zD#x7A2VUfvyfJ9mKG&YAScrJULUN?Gnz
zPi4tV^>p&2xt$=M^u)8CBwJ0D;Wtw9Jt_b6n<+JBonA|6JPT|!&LO|SK^NrUp7ERM
z^`2H+O}&AQku+{C>PNRHd&g~iM%Pc;Ja(K;CgXIx9&zFBTM*Z8&lvp1?YSw)sXN{?
z+*VUMENjNO@`I at iCq*-H5_*K?c>*g(p-1a4g!9^J(p5ojBGJ`VU0(=-z;^wp!y7O$
z0x_{&Te=45I1*E7uqCQb3A_{sZKk<zUCvAxd778?<&W8|!f?XwA1)UQ)>@KdiDuSs
z`bOiJE*Brs=A_DGPrYYQ<s4g%=Ay at kXSODOXFnld8?`a*fNy81FiET3sL$(H)h}nd
zOafVgSjGP(+jF+kkf-4_l})xp-Djxv1OAC!E9BzpH5csrIhpalzhOW6*SY8w16 at 8j
zN;X(J_~+1 at T?976((%d*c73x|3aihrx65-Z9WS4C4;Hwpa3OVbc<%V^8re`iKp>Jf
zC)Ppm?3cqhG{)J}|M1-{xl!9XZs(@J0;cFaqr8ke=@RQwACI`iIY%E4yTm)k9Oo~o
zoHrf&infvM1C3D&msK*xn1#!v3<)E|D^q2CZo>9~o|xZ>&&}PieV}`vT`xyL=0Q at p
z|9z!wQuUgPeaa^1!NOBfx>cdl#h`Q-Xz3&i?7Gn|H2<-?e9}rw$A<s72MBznCU at kv
zRv`{0B}4oUw)$>4Pl)BUJ0$$}+aqMnxHD}^p?kb%3`#cicS_cxNS=t2$x6v&$r3Ev
z#%GnXC3<wfOR+fj_3er7ckO~F0{Rrc3xht7b?cLsnA;{rpu|Kjh8-=V;}+^C5RjD6
zT!fxMh*kP17X1{5eu^~_K9TlQFQ1&sF*l;eW2>i5?Z;%iWta3hx<pMSW79-jp;VMw
zq5P;>h4#Q!4{hdT+9xrv;RwWXpdt#zy9xz|Jb2*LG)}?SH}goz?HLWMwg>xq2s;MY
zem&StA?!`SQb~gx)`YNQfer7$$|3B{z^Zz%Pld3z02|qZeK>@@71-Dw?7Wb~=%aui
z(1X9b2Omzy;(LCU)U-X!3YQ7=6GwhaKjTCC>Hi!0VH7=NUZo#8UIa_056MRL6V-!F
z2w|yy;(D+VAuQETOgFYB5W-UZB=le}hOksWd=K_a2ut;&)E||t=GzdK>POc@`_CRd
zQ2q4p!GF+$hen{Edu6?Zk at udb0A|2Uf4P5-z1TQ@;Tk%=N+)EDWD$w=_LfxsFA_sk
z5_xI1 at cL3sb$&eFUz$BNo~$ga!e+WkVyg4;rY+PFp?cI|Zl&I%LLbQpRU{6v?A5W3
za1Ylfmiw=<yb?QzERa-(lB!4L^HQ3{*WY57AiJ;sBuOu6Exx!P%yC{~@#)^M_!6#E
z+dW!&$|n&vCm&|gld&F^WcFaBBTFGm1ZHKo>Qxfvujt!VQkcR&qFZu@;9*w@)oT%h
za-vMX6%($+#9y1n6ESrO^Pa7a$IPDjJKf=B{x<8PB%R?*(2}W`JpZFPe at -GZ^*lL1
zwQTl=vqkN&&7E&B!X+bViO~`b^DzFF;Yqb0Ih<<W%X|_h5WQxdMj*p at kH(zrjj`(1
z!0#uJ4Bl%8uho?HJkqqJD)mRx=3JY0 at HJ@%AuXkoRal8UA*((~>CW*yQ(_<iA<e;4
z-sdUR at NV8g&h(Au*G;F;<ai1Zn at RIM&j<!cEDDBUy*x7e at GxRT3i0Ts9Ly_RjGoa-
z*%dyt?51R*lr^3AsIamLz;=2|oq0{E!8fR}?o<PL4^LBd-Kvz<D67shv{ZdGHH)VC
zK-0#UV!Ctc(dw*T{wQ0qtfI7S%qNio at 6-rY!!T!#@xrMB2|Zj1kpjYciI3kZDS6No
zz3G)wExk6cfxTr}dJXN9l=cGiiPo%(@d~MWja3K!hQWN-y<KZiDuWd0dgr`S|K}Ox
z^<=kx>uHVY=$rYG34!yBbzV%MtHDg%q-#Y_jVkffS`_NUU~Qm2xgrB$d#DsVX2|m`
z?f&)GQiGEFP0Hu5rTnja7ycIY)qHy>6sgZMT at 5|)3dVl|ZOrIlf6bQRY3;gW9r5cs
z`&l}kPB4cF!nP*k$mtHu--orN6mo$HnB_iIIIo->f+uj{Yo=nB+|f$7LX45rH at I*|
z(L6qcu?I1=Me~>trYeZpSu{@<!Z?DM*Nf(96il^I;j*P at 9$|ufC04<_1PmL(U>%K|
zUIm5^VKfS69Wa^@M(2(M&01h|6oc^QP>kNq0jn?M+`+uJ7tIqw(l~>dmy71<6$~x^
z8}>p at a=XLuE4g`iKj*jTsYaw>GTV|u_4HJ&-|5dgrLya#6Vm=OI+=P!Lq681J!U<^
z2DVOmK&rL0dt<5B;;HuBDBF`lRhpBJm-v25CAEuj9-hLH at r9`*Y`@xZvSc0!TYb8+
znWp9qq_M#q3hk|Xt7M53w#DU`{KkjY=|p2)5?ETdvZ2ZGgM8nY+^#n~U7HfC*lAdm
z$WG_VV_`XY)oe~)|A^JwJU-*>nVUZ4oDm*YO5T*XN%tvNhj2wJ^)Ebi(%;nlj4hE#
z!Wx!!PBv!~Nf^CqZocklc-MV(lbw at IV+jE!AL~>FQ#r(?&xf85Uy&KleOSpQ)09?p
zx309SQ#Yi!(ymV3kcM`z?@o_ZN+Q>t8npkX)M-7bF~jHep}dFxA5#zSNxfYr`@_w{
z++lny(ZU<T#N$bQPBOvTN`jY0#cv}C<`{3lN at 4<n3M+D5I59s#_^z0W75rZ%Z9GE~
zOhiu_SHGtXEI$-!9B=)H%*Yv`x<A_juZ^Ys@{@d=q_ZxOghHK at SdS4^o87)*nI16@
zo{Tyj=bC(pDKzNGXKHJ_#1vLZf%A4-4SU{|S=mHWwAnpBojP=eTYb>OO`Atlr}m$w
zqvOx;k*E}J|7#=xzT+rc)z8#F_T|-5aMV*oSE>>p*ISydXn0mM at f<MlmQ>jH2_|hI
z(A7Vm2%1K>%wdP%M%sU1HiLt6!G12^P^RhbK_W^i4&E at mbzU*NEhg~N=#_Lap>+E0
zbm;NiJ?Zo`9i{XAdOaNr{}vsWBlPE$Jk8I$W1M5*`wf_Nn$oV^u9&*9&aowg3t;tK
zSvS at gb^lkCOLeY038}KXa}06GE-_%nj{L68NtvbTQJ!!Q#<uPmo0nOa<h9$d7NGP>
z4__B7xtZ}2I^qiY at C3?R8FQ65Pn2_P;1JrqJMh697kgxLLN-Nvk)&HDW!z817(<{B
z9pyr;!*A&IvhtCbXT{>3ap~bJVjA at DnckSMdsnmf&wKT-P~Bc<H#Jt^BT)Yg{9S|d
zNm+Q~D~&hescHOkqaM1^H9DP3%`sgu)N;F`O$mf3x_iuw!;}b(kz-H;<D8F~QR_jP
zx-nFnn4d{aTG#{wn~22-#O_<WFP&;?-|NtFbTFn7y&NfST;CXvSwb?x at r~<4(j+L-
zY-k*)Nbxe{)$yf7h8NXjB|5C2NGfC>FY}i6j!sA)3l6%*wT(lRbekIo<GmQAq0eMI
zhk}pPxCQIu_KuTESv8HXbSC2MUyZR!9&44j&uQF3#P#R_`Y44yl-Pq5OW!Pki`6It
z{Mu4VA%RO=6AWdOW)3T6!1*&&57oK!z2j?h+8y=g``w&b6Av%EW~4c>o|tYXkrm7L
zt!rHWw~c#WY23Vbd*f?+-)P*mx4!YMz5m#^A09Zq at xb3caE4PaWSz3IDjII-c;pVc
zhA2u!kCla*jVaM>B}F<r*}G<6j5#?hpv+Ha=Ig%E>|L`r8ugvMcQt+5rM;`2qoEHi
z%FEY{4$6n|_ybu*?FhcpQb|Co3cW?lr*FpD_kUw18R=FM(cP*R9v^5PcBR;AV5_KI
zo72r-2h&H)w;E#Z3F1^UlopYRU7Nw4X!D2(edznd^$%Kb-xb%oZ1@?}bOl_^H+Q$W
zP at 7bw(PyMzV9d!9EROC9MUbwcU-M?&5aQv?x<RnZ;0#j9Kl?m$eY-W2);_bb2&FH9
z97-=0oMkHc=rYp1j8(UatQ-0jZ_>%{V<n at j7$}g61Ko4fh|=D9BicV^n8B7_Vi>Au
zi?;BHr4$$BPcYx at rXVqB!O^t*w3mYRXMswwnW-H4C&io7=C%TF!oE#mh{tNPUcrgo
zICF7$mvtU-P<oS&GfC!dO1v%YeKThg2Y8LO8lqaeDa>hO9z{=5Z#D3S5Dq$s<a=dg
zdP)(=Q;JTsxAy#CS$gS;48KX2buC at Vb#zK8Gj|_Fu8mfM_Gq_cc-PSV)LyB$o>fbU
zAtnIL&7o<jemV5L-TLKvMvD;D+#aevwahK<E#Wo17Wd(0y at o2pi`Erqh24i?#FO?;
zGwI*AD!uAwRvja{=1_e8=*^L~Y=&Q*cccR}LW!=zyVt#!?pW#f?%$VhPX45)owjQB
z?%z8N^8~t=!tDLbm4c_HA!YA0^xnF?pN0C7!QhMjhNM^bchk{>)>O}^kZ%w|V=9#{
zl8)6{%nKeuAH_MN@`+JXhdp?rqO+EFH4T_K73mx#_(WcM(CM5XN_qLCU6H2b<iLk&
z=lfmv7U|sZsRu)?q;8@!4s at z~k`vh+=8Qy75>0y&kGdzUu8Tx2Iwu#T8&2sWO5n;Z
zLXQo)P*_dsB6=+SZ=te;tj^1rMq#X3USue}#`c1A5zb%>4QV5#jVUDAWSy3tLFgTY
z&S2+nsm8<6-r8%2pIyS37}>`3QUqhDb)bbhgRNMOw6tHMEw4{2=$404D&w`%4!ULO
zwh%h9byH9Yd+bruO;KXNY{Ni$s5nh86_52ceWPpttEu=t>vk?w+vZ2yG2QFRe8ZHU
zxfIu at weV@(9J?BNX{c at RX+hcKP@Z1KoQbg;ZK`W|umrM_C-ln)EmzXOa!vJiSfggI
z;ynpcoM+arTSxl>+JE(tllrY_Y1$ZC$Lq!mx{I1ZJ(1e%=35D!mvBd{yaD5;0rfWJ
zRQ{Pb+i-S_Q#L2NgT9rSX1%Jl>+U*}(}Z>tKx??qqZjlS!@DVL!}(~Z+y%PutLe6S
zv_U*mdR6+wI#b97rYkL?(j0 at l=$xj%lGlJbty3GC58mgQz{f&5T|HTsc`60cC9)}3
zOBW_w#r<)Q?&^3Z`>Oc(p4{WF&mFw_=Kgpcoi%Y4_C^71OK5cCEuPm)!^}iWx(37(
zX&Bw%gEcGd*?8yliC76)J2TCr2$3IXNi)R+j^(PhuJCWe?$!eAuNEu&tII4Mbq6qG
zn9l1sb)_L5zri==Pt{YK;FFV6Egi4k3tXQwJiWV>XzRh<$^m_LD^Zu&qts)MG6j2+
z;SDMDc{KEF#xt}Z+unX2Bf1GCQT9n?yK9b+LbQUx(J!=D>Qi=RvHJ|`Q2Nw--7(GH
z&-PBs*L at y(Vm9+x*3H<b&A~n`dfj~8abReO?t|y+zQ>yqSFY^SYI^o*!;~G&Fzm**
zx7Wh6F9cWDoX*m5Gj`wI#j at M%#2WkcuqoCmvff(C4#`Ov#5Rm at O%737E1N7GW6#?b
z>Mw;brFj3z at Aelf>08b9NdNY-4y%*6tW|7IPQn(p;Rcr_L|tEb0&~A&q&a4L^41G{
zDtW;g$7Y6NKL`E*a4&YhBMy7#WB2)6A#1EujM^U&itB(Esupp(A#)Y-T)(W${Dd1v
zSvIjj3SRFR=E_s#-DF!h at Dh~|W5(N<Nri<dM5M0_g%=~dysr*aCTkUwV=ZN at SL=YU
zS9q4%7Dk73z*D&wLI)(sOO=Rsx}&laa2H at n2%imnAx?S?b8E3ePIL2E^V6PL=MKk8
zIjv<&wdt at 5D@(QMMXZ_ySrBwWcz$VdBt5&4n_+r!V<XnGVeUz=4HdO_VM(h-zTZ~E
z=;ch4-b-Nrg)M0)g&O<iX>^~wHJt8`2R>=|w`*dL$95)gIO)X{cir8P>KPhrF|_UU
zq#g2qOG{;-vdn~!iKbU%N$yND>tjd{uf$$nLh&nn!~4G{iQnBh+>BC$QtG)Ou9OnY
z=4opZieKg%_S1JMK;O|5_HRgm&h<iZad>{5HnQp7b>Y>?r@~L$;L+xa+LvF<36qH6
zHIhFNBiUlJMMp&7ACXUB2dcGOgK`=?^3-!$DBs^BvA##*iTQDSq!1fMPaRyXKj_wt
zGX@{fxsOs8oqDPPGr09|(sPOE2j=mS|D_ZRO5w!cP&sswO?Twa)1bz6k<uwQ>N3P#
z>D7Wd?vb-kE&X at R_HY><l+jE2$OtXZTp}?&GM2u|H=Mjq(@t1zI3LTxa|hjP;bq2e
zJl^Tq0m+TMu0X(xb($7!H1$w)h5c`7ivMG1V{PNGB7=^g-;8P8iF63ZgT^lzqsj&t
zW1iWFXCj_8cn(C}5$r~glQF=&eC9^HR}{6ccAtznosN|>cUa at n8<U^eMAx=1;u(Mz
zGjMah%dn-~l`o)11l=lSy-aC<&s)v9^a3Mb&qAF*PXK`HE0CBm-dWHhv)z6r&BCmk
zpLevRL4vr3Wc>E?+H>!eT*ikAS}Nqfr3AfC8ppd>1D3_g8SqzT7^4b4ga0z==`=aK
z#elbOTlDmN2E`a3y8j!{7>pxler$}I_UH9$g;;WHwPnkZ>aSiMB(%l0pNu)f8^^u5
z#lx>Q7ze$%#TYg7qmypqm^ZhaiI67BdU%|&jL9>bB{h5+lJQP!rld9|%{&Z_%`Itu
zDOdH&EUI~&K^o2%vw|_|nQsFt4n1&9xpqq>Eos$b-4Vv|SC!Y at l3K_S_B#Ag1<zlH
z|3<-UuESqc at Vaa9;aUZ+zYd?M;Dzh(!&_1}zIW&vDZ`Dl?0%-rZcHlpvLQLB(P`PP
z<Tj=yrCZlB-(s+|pM50vp`T|_I(R@<QcB<!G_FGWJaZx;cEOr0TU}g3go~rK>iRc!
z-moq>JKbxi^%<<;aH}T*ILlSIQtAGSOiPCONkYtXF|#PfdAJ1Y64_dF at A^Nu80%Vz
z$x&rQxWZg^<7{X-1DrKI9IHI)o^WkTy7YjpM*oAqiOR$iJN5ctHerv)dA$%OIKQA6
z?8d8Uy-E6zbd6ZcT#fmj&S3l2Yy>oa4JJp?BDKrZ+$c#0%>)Abp_hD=l6Whyt8zQ6
ziMGc6xv&0$)d3#`uWUTd0~cGddur*(8~`tBlt*XNgmuT1hGHTR6XxNlmo at 8Vr+ahd
z=4e|^eLT)o#TSiU_2li08)rA%^we8C8NI4(&r!;m=vF<8GkZZA=^7fjhi2KHf{+{z
z at Bkk{A4*-h$MotlNnJk?t>G1Vq9pU?^PH@&8PitLnY~9qJ9%ZZ9iHs4P<qrs?s)7H
z#L7;WK{<^R3oo~_n-EcRJ0p<IlN2d~vTfGsNO&lxR}qe|mXb&*jOJEYPjkDm%gf2`
z%N34p{!S{Nq{nX><w^_ at wR_}H==D7-Up=IxPI=>ACG~f0+~taz+d{I{T~oH*DBD3w
zk98Q$tNAMG`s;FX_2l$+PfjDt5|y;Ou1ec at UD|hh(*C_q+JQ>i%JUpfF7~e(cew(Z
zyvI1QY(QZwiNOkBMo4mZAAZ65J+S9MsHP9 at IUEWddi8_#Yxf+XC0bXYaK6tA-;`os
z&6g`E4 at X#^x;@%me&fjdwF>>@t4eW<rszZed5|8|k at XW5`cdbpe#eFKI8INHS&QjO
zGLyc3B6?AjM4=muTGTt#Z51KP?|*|5GvgbeMMo1oGbqHRF>Mt%!;gOI>Ezs~UnDsn
zEmGs*G1 at GY!#h)O7AW7p->+(O&{4p<5^Fz<3}yXo8Wr6~nC%URM|6 at gs@PhIk*L^e
zjCxv+F$Db)rLuI4O7gBWCe1jWm45epS=%LBM?Zgh^%Tb(M_yLK-Lr6}^o#XVthzw!
z%S>gqgK?!cOmP0O&F)HRD|Z&ORk+gHWapf=WiEZ&awp?m(c7;@crSz-?<}@n($H}W
zqb+hof7;XUMH-Fci|;btiSc-L*}xXyyGO>zS)N<3lBhtDD9^F&YKdx^s6@^O8YVy*
zJESRhrM6W-IvLU|gEY%&o_+Y1AxG;)jqCNRa&yzZ3;ory;5aI4puem7w at 9VOD~o!6
z5Xv!F8SOGqBR&1CmUy(NolkRTd&hS7yIPVnrjl(*v$UU?WsE7qZc3SM)BDB=Wzm=o
zyaql)QSv1D&kku_c_35i!+XlFO>0TNS^_P6lYVL3g!RT>{No;JeD{|QYt{3CA5(Cy
zI?q1$jB2&|6pOPJKhWLD2kWv_;@_KZfUkZ8M(FQ0=fP6G%YEn<+!-N8dKxI}=2upm
z1TvqV#1!(Xo~W+LO at C!|ZqhGh^i<4<#l5MJBA2Ex9V5HpeLY58^&eRe1-!ZEev$Ml
ziNJeZYMlMdcPDov_XlkxJ#zC1l<zx&xSX(fjr5`C9)ua|0swjb*r|xqQIcA6>vh=p
zVVc5r2$CDNb?np)XD;g}5 at Hh`7<BJ>vgmY_O_-Ns6XwU+#Pr*PJaZ<;Ydm9Z!sFpK
z;mKH=xMY+owQ{~kPum2Q-8Iqrmc&DTttXO(Tob!vaMG+}#J$pko&;Jl?A68Q45MeF
zsH7Ub#2mTg(YUzH4^TZ(sVnDO|4JC#KCGgebcYwJNB}uV#+3H=EFJ3){+M!lMCd#(
z_6mco(wOwjchcmRRL>CO$Y;JoKKG+Fe&JwG>d(X}X``P0(&AI~qY at zIO9y6@Pk)J2
z_dBQ at _sfJzLw9l)T{){k9m{8R7>(!T{{1JfT`yxh$DZGi?6sRDa*yzKZSlz?r*9J;
zPh{@BU|)LXW+}s*&Et&sa-4TymUh02^~G#zt2%oi088Z?CU{gl>S2?nA$eSkM8+|a
z{x7q(hkNaBF`JXd<?F~eL8q^LP-h5qO(_n159|Av8FPgqq9*XR256t-`M`fd+9j*U
zM-{YGo$Q_;XctS%rTbg5bCZ7Zn)OIwP&4pmI49{KXH{+SubW|Mv%fT;UmqMB`+Q*i
zPYua7U40mj(R<UQ4)iADa3*{l#>QBN at Z0m+?Db8XXN((NNycSY>MOVD@<@2)9iCPh
z`<T5lbuFe6Vc!koF6P2vEr#5vpRCYeiR{jO_9rj2T;hNa_5Cbcv2!GP-@(p&+wl5+
zPT4WX$v7rrHc}X(seoid9eGYuO{^ytadU)Jso1&Jk)lxLg{bJbG}OUhHXnu7Jhbw2
z&nIRLA=Yg5eAh%8C%YXfu89qp?VNT(js>PtH_3ffkz at fRDc?VI$~-9vy})2+o{M0<
z!aMRjVZvDC^_3&fG0~9<nc$Uu2Grn}<YX(4Qp+ey at _ZM{X`zx+QZOH^LUGQ9&isON
z3hjE#KT~^q^~^C|`vs=A at 6)=_3t!c%X)*7{d=_5yf)=~b+b?U+UOStMQhb(ud(z*a
z8QYSY`>O3p=_l*k#LCZ?R3Gaqz1H=Te#+y4&Z~2ddKWpLoVuMv^O);3z|$#3*WKp4
zxo(_G?R<0<Q+GSXyE3r2W%b#F=mo;)2|Vd<H6&A7uibgGx18GHrU-9EujEnImTcD!
z=jdbblJ=E0YH>@dE5kXOufU${4(D5+xt2-7F^Lf_k5!-E<9tj|>&a?Em)SX1(D8z6
zoAbtoWM`(=PIGWA*fye9i&5*hEo#ZO9wLnABy8{MT(B;I^}RaTk^3xGakC3ra>j0A
zb0%(Ld(%hrl}#<_wuR~Espm$qT{RtT?*GiB3tZVUu$nokKOJq%|75!`CYrx`T@@YQ
zlGfAfL|Nl7hDTZZDZjBT=pkS~g8>cH$CkAKV|nW`j4Lya9~_uJJ#7gsi_A(Tu4Ua8
z6Fqj at 11;H=m}T6(U}ODBcjbvQtn5D7dgc`MaDc-sxfSWZI5<$4RwMmJ`r at ASv#&`H
z&jQjHB0Xjg&8&xj&*$J${2N>xJzQp7#pU1EXx9syar)=mQ!Z3olrJr7EBD$hfy?EV
zfNyI(PF*h?X=(pqC)$e+&)3ibw=3F(PcyjII9I!@I5_88{ci3<=l0}AoqIk0A9TD+
zKiP&J3(s$9 at 0<RE!!4cq)tdO4#CFEvti4$ZJC7SW=_lIMok@;iG>y(Fkv-wBzJMo-
zyGs!m(QwZv{XHohzXz4{LlP?__SaG=Oox%A-i(z3=G7TP+SJR0n%g9IVg+IA&2Vuu
z=Xvy&b8xB at 5@cxG5Uv?5wbIm~c%0J=#-?Anpbq-<qMIoO^HJjX_w5{3It2575`A=!
zaq2qeh7ip$$nw0`9xC%ODf~S1>feF8uQ@(<Bwd#fr}Lx2DiUy|ZX4+QdR5xV)T!qg
z9X&~{x`6YWD3hX<=}M_=4z;q at k~f>LUu$8F6r78fVJ@!75^>#HtA|GJp;@+v-U-EO
zGy-ca0rTtbl0;PQ(Z2d3)>`K7wO0D`ZR(oQGUk~7zpS;2vDQ*@3$C@&MXy?JZC~zC
zhi2){KC6!3T5By=Qis-B=_A_I?aOOMhtmGmT8pkDQMTe?)GE?rY1u;c^vzZ40kg7l
z(6ukObfj%lG;l+r4);}(&eg7Ba8KuLoUbLs<y}tCI{kdN(qE{h&?+<fbnf_bwLN_X
zcDm_I<y<Xn3}Yu|2V<I}u#V7p)o3jXm3LKeJ+XF>rM+d07p<z~9sl>8<2L8+c^0!F
zjDB<lwfa+P7il5yeDtRX-{Ek-+SZx4C!4kwdOIQQ56Fc$hIRhYyL^vhb2!c=p2Q6^
zjF=VDdw-;I{=?SWZ%3b{9;2&!yO>1GDt^O at 6qBuZbFT9u#Y|D~*Ljg*7ApAbyht&!
zg1^p-6yt<fXwS7?p%^-1p;x2+7=E7JdX22dLmsaIefq2f>^5qlXOxxa>;-ZLf0MmP
zSsl=r%$7987uMHrLh(h|*M^pqRM`woRmx1q2v6gl#0cM4OB7d2wFFMQ`&v%NuHsav
zaGDX~<h`B~GbF at Gb1f%Eyo%FIh11<ZPRzpJ;Iux(Np~G5cmRK|bj<1NIR#6H+PFrq
zEIfLB_!NaK3Ho3K_$g^U(YaYMZU&U{A{~ic%cYXgC`_rARvu_cpE56S5p=Azn2pD-
zQ`&!{1J6lzoDa=Pc-|qqD-F4L8n>49H$GC9WC>iD5E_?p-~M?A_6D`);mAK$UF>2S
znw;TptaL`au?j7<9^(_n=*wp1wkK{vDy=RCzx{1Qr44c6(JI+sOI$MpxF)x at kG)a(
zH`BhDwrnLg9vr8Dhpt&=X+N2+jDdm6Nw%smUL at pw#ao*VZ!Ij*IN_Q3eYAC)dY_+}
zkCR+|y`VG)%w?3A=xbv*T_~pibupQtn4yrjcV+}`^t1+MCbuXYGp<XwG?Xsux^$H^
z-IX7dbho&tUc<GnC3QYq%R<+Zbq+(kE9nh&=gs*<8|fZvX+PnViZ6y^#hq)st89X6
z$GZBB3srGAOMG9MFh02~&pB4b5!FPEHWC`kA0JaT(fN43&Jk%$E;Bjbu3lptRW^yv
zr at i*Jiu3Y2|46`XqFx)~np-kFDy+81lsV6Tph%c|t^B-6k^fYdsx2E<F$mA$4axW&
zf%8jIWp^mt%X{mCpO5vyWcUSOvt^c+3{WN_9p-sudCCp}yr&3H^p at k-<gLJOP(rzv
z2iFW9x!^GYJOp@<;j6de{;w+)tJ`m#_h27IS9i~R*2H>OQ0;kF&S&Sd-sSUAHm at UO
zQR&9#%LaMFpqGK(aQr6HF`{gMSA$=yp`RYsg1eLWvIMEeYWHbFn??$2Nx^Q!Q92tf
zXjOi{^=K6iaSDfi3Wr#v&7iSQrz^iH`2D@~--Ytf)c2=%njU;7D}Bl<vO&-}v|Z8F
z+_hH3pQTpRcXtGPN2NT2lTk6x9LFBfqwsvw at K@$A_hWoE at DrZ-nl~_vanv*a;&pZg
z`uPUm&!DUE7Nylqv9z~7hZ5`P+8q8Gti{lV-@<b+=9Zu4MtO^J2+z`S6>}yH9a|kt
z?#Odacz)rNpy6N2a$<Rwj<>nbp4%)7<|?d^*GmK%_|!UwCpmEvdou4d)yqFur8vT8
zd1c1IVpP}hgz}{+af1hE84I9~VEID5L{KZ4y;`ZhL(vO83q8=8P%W0wn;DbqW*}9w
zl9uij9fYSHw`^;EZrNhfa5Qv|hFBUpOG7Fe>Y$-OlrgI0c0sv))2z-)sOb=JOAhyX
zm9LSY2U|q%tDoYhULZ4ZqW&S7$4<zjumk+=h}^NNdX&I0yfNa)8+3NEp-9GU*$tUH
zaGFvV*$n?)cltBG(iBJy9u7Uyvq#=o%~vxtWfoFYD(O&)M|Uv!Br(!G at Y=M&+$)Fw
zURs=}j9D<9-W<lgQQR%|{<NBzMTk-kiQWd7Acx^LGd#1{;gO897mhlpHL`E+I2P_l
zEm%`zb at c;s9%cZ_zN3--n4V_MHb#6rG)q;n8Wi6)>#`Cm9EYQ17M_;?Mkjm+0k_L9
z%WSTy!r_UK4cEnFP^+$7K=+#HoipmWoAY7Tf(<n|F%p%vV0Rgw;V5Yd)iUHQCJbGl
z%)#A0x(g+9xN$m0ZpvLy at gh!D_bbw^xPjgruN(@@8Y)*aZaWl=N1fw_Wyoe!)PCW|
z!$=hJWQ at TKJfR3j<Y95AE$v at 6LqF*_-!h!}gMX5A!kAPz(vG(N=OGxYk_tm17uv)9
zX}#}eT{6zH;eE8?iBWA{uY9K_#5Z;@_-?Le+E>WKWVgJnt-|Yo#1Tb0SvEdf7~i(?
z(z5zVl36N|mS47CUXB|?d=_}L3<JkZC1gOE4{rJF)ZEh%Xnph1L(ijU;oDZqf=7EK
zT%MDAa~r-}Q)WfXUCMp8fW%VonbZm`w_nK2O4yAPNE_OlM&yp)Rf9TmNZ3o)EU~8&
zBFWeV)8S-Cj({G*MWmC}jMU_&cNoKH8cWCFU+7aBk*^!FgwhKf1G;L)^RxfNl+ygi
zQEL|uvHlak>VKX1>m#83)~1PyP at W_XV=y}fFustGD>f2)new8%!S{Xl&y<RO_viEv
z*mYJFwXYbP6IRaB69g?WX9*#z7(zAyb^$s78Wtb804xS%0dfKG!je at SBm;c|J}TS|
zL;2u4rKLCt&nkeEz5`AI&I4Ga?FSeOpeM_V0E+>}s0B~;tx5HHOZyk^P%LiXhGEYO
zA?ih4 at D$o?8@?St+iaV$-;p+2#=~lPWNyNSZ?Tqq9W^-{7KE6S%+w2kQaK8J!MC&y
zH(ZpPu(r6L*3<bSe6=7<!Cu- at a4P-uh@eg!V$J{=rz+lsPSn~Pa>vsCq}8LMt!qQ8
zjI+o3Fohopg}wvFT$xj1HJ&zEMMIsu=d98beQO(zzHR)p4|7$MK9cj$8ty~OPeq!v
ztb`5UO^plaX)MJ{X!W=q<3USW8Z5KSqC8^Hd!EeUUBGGSF!W+e_e2DBpyYi*j-*mi
z+8u&TcMqM7wd}~V>8{Yw at f|GA8GCx$U)U?qF1~+9KJ4Kx(EEuDMu$-Dc{09f#e`p%
zTNqMx^-u|NINmS!yywXgc>lR?Dyk=1SBgGPAa*sCo>J_Iq_u>Wz<Yk~;UIL<dy*gZ
zyyta74sx(BN6M{}%CYZyPQ5u%4m+6YjOH1gw4}8?98H~6=FL6tlRBx)>wDhKo%p&I
zsqEn$qgY&UlxW)#UVV!@vlHLMBhPfFz#gimGYXi;`e4F4qk(y#4<;h_ZCGfaYgiv#
zWMAIFI>ed3m)zL>QED>rk^Vd2CGp28+WXEpvLGGxd_oF?4=>P?GL`Kjxvx{MSNz5l
zw1tEXCmbop+0)LTRkVV7Y3}&-A7o8h?`XkX9W5-1YP{Ma#LI(edy#QR!uwC8ZlQ8C
zM+VypZBfRg1=%h5YT}h+veu(gVl{HN&C~o2P)@52)fVHRBW+C=fcYD3c{FW{!Htow
zAiY~kKh`oEE;dCSN}w`=^HW(jZ&3OsOUEI6HONMyc$+2`R=prQm>%ACz2wI1X*wZl
z);z#H4L$f`e9pWywhUwF&&EZce=lXA)%>X?MUJ3fG<m%ZPXnIkKH-7K7XgqO=NsX3
z((j1cF@;(gEKzHWxa7ijSqM+0BgT|Vu5~(rVR at XjJVN<)4l?$;<Z4Md6h*n3^f3W&
zT)gEi%DZ|k!X;RpkzkHnb-54K93ULInWU02klg`YK8X1n_~8EkSfoc+Nk at 6Vko)Q`
z5#xi~S{ta;VmG2XyX(28(KsoY=#H}yF0r>|M$(fSSjVWa&X-omPD}geQ68+?7D=9P
z{MtR#FQ+OZ+Iu~$n`_Z~A_Q(Y`eL$M*5eC2^DG^2{E_Da0bz;M58ty`$YW>P?<T~r
zr at h`UEylT at e~<aqJ*U#MRJ$I67w++3zxSe$Ghi7L?Drx_e}-qX+3if<(TbMKMa%R=
zOG at s@nkmLn1r9k)#`j`sN7MOMjX-<T8XIcfu_JEBG|b7Mb7REO%pI}HJnSYTdo=SD
ze`dIx=0HDzbO{s_oPQm~=vyPu`B#mga6lS5|AMa5DshhSwZL!FdNhhX^gEgf$)2RM
zvZI;E6Z7+ue$9!rB^VJ$IihDCU(=p7sRrwD%*2vQ`YG~a=YRUoNc$Ah(llz?pVr)i
zwp-nY^V5h8(mg}9*OEe|1?SWnd+Yu)sjHecVUBhbwrCt#f_t8?)j^I_U<|n<t8<K_
zN at 75ZSj4<SN0OTET%VylT2hdkWmBmffz}jEkJV9-|EA at RlvQryAaGlB)S&439>0^O
zGLA3lce2Tta at 25U(5fcKM8pSkSfs?VM-AB1fdr5Vd4q2Za-S8<-4iQi$Pw6e>UeEB
zm2{O_(HTwSruiU;@zZ{iRVZtFRys76O8cLhdjK}NLMiE|&{OWLXL3k0Wg*QxUX$}l
z2Eqa@`=&=}sgMuWqJ1<Lk^4BfJq~Mm8YOx9sKJw3&1|Y)rB-CdIB2{9x>MEU_?>cu
zltDRJI<{Y-vYvFGiM>i1THBC>Qq%tI=LZ%27#ta|EQj6<C=dK;y)7&Xr-MIR<#*!l
za$eSgUCXHSSsQjOG$xe{k|Px>NIk`#!TwlD2FB9FfEuF+zFnn?1LmrjuI?B$>?a>N
zXQ9-yPo-gh`U&H+(|<<GQsb=O=I)k7&uMB%7AYn>h+=zZk>^lZ+cFG(dGukMf229U
zR_z$slS(pzHmA@;p`W96GaI!&6sPCzEWvIj_1Kmqo2|%YnuOb8wJLv;V!hap1s{~h
zp{Kndt7loPW$#A+Y>>i_;5460FUQbaEgjo-`kR#Z=x!;t#rvB&Y5s${F`Hk(Uekga
z^zAjjP&_OGv$J!TfIEwmUOlt=sJ~j;KW*_h*@#x{CzuPDViiQ^#w_(pRHAoi%ZBwR
z-wV4{JAZC1Yia)qcctMonGElih~9>^W|tG^K+LZ#IL8)Kc86<XzM(MEre`!bcPYtC
zzQG!KgvCgt*JEDSHk{W<(z=}7gtie`H at 9WOOJPyG9>cr69 at c+g_lEA<F`<4HzPB<_
z at pojq<9cP+EegfE;nT2WO==sSHKT0=$}`nW{dRhmC?`g7npHWQt2}W+R1F^oixaNp
zeuM0m=nby<vgWcKtNDlFO^HOQZnm@^UyG950zb#C{%v&abx#yld~Y_7`d|Xi$>Sz%
z<1}lrUBo(1-}sq{yl-`7<m+&!NXO__GtHf73o#0phbb4AntqWEp<B&i%K3SE&q$#6
zj7$S at 8y9y058#fGr{5>BLEgZJ(_6ZY`<3t233yJ!Y8^QlpMLXAy2`WtO3%x;YH^F8
zSZX!CS$02mOL?qdTcOPd?C3?zjhLUulsyoyvP+*t at +v#^2`!|v at v?=$Rd{}qS?LCR
zjcA2pZ8}(6ygWdtlHvq6i4)WrJgDqSIqrux=(?%|ds%trF9l*Q))DI$Qd;~1d%3jB
z`u1{-NqUypKeBGey=I(+5azLbJ~v;}fZIl}WWuu2FiXdlRrHN>v#bj at p7_XSoOJy1
zTku@~>nd5r{F|J<h&lFFGsz}_6%8M{qJ<eG4jN`1{)Xr&g at Mm-ul=yOju2DTvt;Ui
za-%dXpDWdvvE~Z27aUY;8iwGDCmma6Hu&L(L)+ZCvcZpU(h=OrPNUzf3+0KgmiFYS
zSMppy>m{(lV=${QQNA@^#gxm~)7yF>h^IW_7ck}5 at R6?LlLxya at x@HJD~!tB5Jvmm
zGOS&2SD at JVV#(Aj)yw^`8e5dL;N=-p=aCY$=JxO20OmgHQlhbEEGx$(hx}WAdK&JX
zb7TQlWH^<vv3^Q1nS2FbWn`M{f;(@=zN|?v>vrU at 352JkC064+R=S)uokZr2e|btv
zy4~r{VpW89_siYzav|-vUY^0L2rP$u$EFir8d*89Dj#3vyUmm2e2R`6Il3CMBPT2U
zW%zG*+*a8n%p(IfN;*iOI|xfkDw&G at X{HmSf;{*|L#5ZV8#~JF-{pHC71>L3 at cx8T
z#UEg&8D8f9RM6hu`xDAdEFA|bF?$m*d-FgmI9V!rsLugkp!hX}cf-T1q4BVCC0?e#
zZcyprd&0PcFH5Gt7Drn35_~Xbe7B*%&1qb-Ot_JU`vS(j(WX+ez*@`+)l&|KuRifX
zn2Bg5OZ(UFx-vZN7{lAYe#h^$boBo-oeSdLP3Fh+)W=j<9?rX!-RVd%=>y&_jN2Gl
z9;!}8FP>ERC#+xZp?(d}Q5xEIkYf50^bmLA4735g5{<d*IG4Mi&7{ost$xYUF|<YT
zsQ_nN$XGBtwl+_uJ}H{UosS$AOX}RD4U6fxwcwuBJow&eDt;Doy)R~BEDw3UAm5!Q
z+0(ee{ly*lrlcxBZ+3)yCOXi5!g~Hg^}fMsB2 at PMxNROR5v*?Z^m&d{Ny5IX8mE31
zwWLF?KtRTC`+x9tKKQMY3Sz0}C^Qdvi2AnVaO~^-h#Bsc9;|_C+daJipO<qP(RVV?
zwWiXr*P+lJrE$u4gKz9f(aq=m>-Yq}{TZ&@_X$_h??z3=6}Y1{d*Ppw*uCpqMm&)R
zzQX}uabG!UPCO>=u$0j~xnho}%maI+cl=JS^rSy*s)8u_mj18#(lHqMF at Gv7Cj6m4
zDyeLgH*N||=Q)m;N*R1hR8Qg&R$|SvrW0$K@=EJG=n6ePZdXRHKJke%*Tr1pQTl}y
z_#{wsUp?x<*NKDWp>%G1%{lm%m2eksMrKELMdzySq8?8=%k3 at Qz~3(&PkKtn_?^|!
z?s$Bm0%t$V;n%v0cSq$exQoXrFamoZVGo=1+-a!<vyVGzd!YGrCMgy`ux^{KBg;-<
z-KEJ@?ZCd#A_x7lN{>FUxO1yeKkw1{v2?un0Bxn+vDN+2mpv4c`w at jB+TJ&R?<4mk
zRD&|?3R+~8{s2$fLce*P>hYVMl$L53H>ai-_0jM*8-g0P|I1X&<Xe|i656L{QY|-q
z+^yxuB+S5qT0Z_>UoB at wy3td;*e at j8!#%P+(nq$3sa#Y8JS?RI^FBqVRJOZm at A2Yv
zsx76gSS;r2T#<)whJIGcO>|W!xkJ1cb+ at H&^7`;zr0^c*o^Blt`$!eIY)v7-4HR7!
z>6(n2JX{gF{svCbfgb%vj`H<Y4THO8mH6VF<PN>#1Y_l2sP51b(z|OXl=Fi<rQ-YK
z{GgIEEX=A$&bXz7o5d;40@|AE3aIA)bsBXj*bO`WAi1TJg#=%K6sn)IW2Le49`^`(
z4htg&i}|!BA{AceLAHflvMHM-o<yuw`Pu`XcwqS2_i-A3AroD at e+P@bgGgAekUv^t
z at YT<3tnFE8(VmWV3-|cw$tJ|jH%8RHh?C40X)8D3yNtp2%qqMyn0u~t528J4+e*6f
z$9yY6mZ-HfZfMww(H;F3{Ji7K<^^Zc%NJqXFZN>&*Y+m$ep>=xji7vR2B_n`jmDTo
zwJw4^j+jNSp<kcurTyOc!eTFjuN96gz)n9-(cgzR)IP>)yE3PWvcBJ<$2UO<L%ngU
zahB>piyj`il^@{TJ<f{`#y5w?*od-+y4X`_{QJy58{eGy*Q^EJ1C{tL?x|*B-n)Zx
z at rGM8yEfvR-y|NP{~?$l;1rpR-Jy5smkDvRa+5^w>fniUoVX(*kTf|r$?M7?H5%8A
zlpj5rS)C032gUDJ at Hf!Wya!iHahCRf-imlRhirmxS^2K}n;4ypJBU(-KwyWzH7mjC
zmWeH~o}M8bzej`lVp5rLj|OzNo00=>?GZX}gavj;BmAw{>**ijgRcdGVm#LEpp*4`
z1m)ehNAR~&T at 2rVaUQx3QDe`z>~`d;c?-9es21toW>9~UyE#59!7I at na<61eS~zBP
z2JY}iVRiQvM!{r^N=7<L`t5X<J2D-0VU<&4w=P*C%M5ac)QS+J+lpDqBN7LocCNA!
zwx0(lZoOyRJT!jBe+=uf;Zm}kPDj`R>?i_5YfBS0P{uc9oyRby&duH6JPNwJ+y&0}
zWj)=YL<?JsaRUB~t!w=_A2oc5|CoO+%JulxOsQ$hIGiskH`fqyisftVHNsy7&FKtt
zDR%6ZNCbNZGS$T|e>ds<j|d44B89b;;|r{5I6Y<t9=@BcFKu3m{&Ab*2+!MV;^*6I
zkpGkT&YlGxr<35YEO at 3Cj)jh2UN#ZRM<Q*Qi<+_Dry~-nXTgz#s2Iv!GUMyD9Y0^L
zJorhjGRMGKS9d>z9<8QU9yR?j*nQOWg)Msb6%(AEbnX<dBd`MW8BcmEa6f^me7_~7
zWFB_Dfe|=Ocr{M)pj0}Ew4`hv`@i$@pR|=SyzNOIU+Q`83SDD7cg2`AZ6wYr!vCne
zMNP}Jw0kaPsdkT*v0JqsE^+)H2E&QYmC|KC+(kWz-Fa5OW$D=0 at AoMEC-E0E&#z*!
znv9h3Z8t5>6!U2DUyqV;7Fk1AnOeLJr*orU&(dB%a$7o5V!d{rBU+nA(qI&%^YhGj
ze6`k#_6{2g^OI_5{kae59v<GKL+^i4c4hEI^6uS1<-5cam+7%1r)n#gPF|>J*lM4&
zvnqb8gs%!u??exjfPMav1(mL3X+%qkTkQqD5MS~3zmMKh`EGK}&z^p^g={c<)}ux5
z84REEsBH^X^tLVbSe0~PI0I1OW!hM2@&(SdRoaD{3B><CP7%Ye8$JN1t*Wr2EMcC=
zZ$G at N$>VR?f_-KwcPR18!b#>dx6AIig4H~FRHaA2T-w<L&+u(c5wtgj=l!<M8|as?
zpUd{ZLy5230fP~asgU+r%>$|jcdglXEGymFv_IC0eGKe^z2$O#6 at aI90BG!uR<sxT
zm8Q2EkKsOG_gAr~FZ3JCJrjyXuNaG)p<3=!{O1Q#(ZX*+D;U|F;k9?B;d|%p$KOWZ
z5Tm4|=agx>v%Ts3%C6^h$f1nLJe3b4GEe)4=}#-^U+{PLIx%P!^vmwh3qOe3Zr}2w
zca2656tg;Q8t&<@V`Zm&-!at?eIQV|&Eu!zj}~@nh0oR+E$iuC<uhUCsGt4?sefr;
z6iYe>PX`@`FzbWGVXSW4AJQpC<Y&`^W$5-;s5PNdq|p;J)>p79LY>;~R{lo~*dAYl
z+=c}0kar=BHcdUm>ZSPKGX8{d>L5J-qkzK<NhKI#rmqWyaYLt|8DR}dx*O at nhQi+?
zoE{9TkAfxvVdN8oUC)Bs5e9F*88kF4!Yb5-^;D3Clp%~SAS!L565+QIruoiAcyti2
zT at F4bgfV-JJPZ7np|Bs}kAq=+Vm+q77z{_bfu~+3&`0AQZGnI=ZF4q+?+W3egK60a
zv&d^c=yxJa<=llZEj!Y((1&##>{l=^9h+cYZ~7iytv78?;-=$t>-uGP2&zQqHvT|@
ztJbBO!nsw>5mR^xme9RUQrUVv^OpAJeCl0S{pfe+M)L%{<ZL_XuH|Eq%1!yu`bzZx
zsHX+@^Rv*4z)Eq7D)1h{=R)CDI&Z-|g`Vev1^lq558bXlbVspco?y!{YfACuBZT5{
zX7#9m9d)ygT(s)S1$=k;)@l)Vfq8SHE*&1TJgj~5T5$Vz0q$KbcmeB9>~CQ7zdN)C
za`*^s2|T{-ue1m0F!V!|odnF~&cBkI^v371kfSe;z}}0F)E?&0?Qe$kUqRwxyX2l~
z&pS*{)`rR&+1>JvON*sd(k at H;2YdXj=8edamkwK96=}$aiAPvEYh7QVKh<`c+t}#o
z-|6<myKpC58`&I3S2h3aXH9!PAlOOV)QZ5R(2VqcDYGTTB>jKny?K08MfNvby{0>B
z17Q(?bRaAugalBc#&FX#4GjX#9y%c;ECF{MTu at YQhYJJ<I|g(R8kZQ?iJHj}#jyh_
z0Tp$|c1Hu_FfgMtQB+79yPxl=d%N!qWORPd_&m?&{k(s4-#S%wPHm at 7Rh_Cj6^R7@
zA;#BTX2I!Hp+D1AxT?0)Uv~67y%4ZFJMv=1;ho>C6W;kV<`HGSa!K&nac{}sTZHnA
zXz_`IMJufOp8Ixa-hEHLF9vqypquXwST$w16}i6W!8}-T*0bGA&)S_ZNLYr at 8?hT%
zlJnw2 at se0^7}NL1zFSpm at a~H50(<cG(7+l8PHrdQ+;p64AWGhe9ijO#EFc^S+BE5`
zjqww=_jve{wo{Ujd-IIc)BrQItpB#6MOQmcoG+G(kECwKylw#In`t!Pgr)*#Algo~
zrPFQ>M#cCy*)eSi4kC}2pcS#-uyZzadRUW*b|+)Ls786wIzZ)IXQ1#!MRU>F3f&nk
z70hhj_yO^pIO*4 at auD?I(2XnnWPd1|QV(_lcddgjIBdO{_NCv{<@SC5OTlL8zFx>3
z{HC&Jww3fC8%Vpos1i2?n{#howC-4ExUj=UmejYFLB|XWA&V-YWBvi at 9)gbfeA~X<
zYZt8}t at ol0^`mKzWzl-f)#D1Lt<D24CX at XWYSVAV5WiOFq(R`)9U+`4n}L at nFlLKl
zDeNO!;>|~>=l!G2CmKaq;Bm9K!!%-BEM8{qL|UXdS#)N{AE<JBEwv`hDN10^tRMap
z+WD3S4e%}Xcg60Zt=w2M6TPMce0zS1i)3?Ddqp^)W1%szVB^k1IBRL98F9f{xbcDj
z@^UEe;fb}m_ncoK1$=J7uq(OBShY0J1vA>$bBqt^g%>Rr?Wu?q%*@{yl4Ba8KW-=a
zV>?Y6vJ>CR8Zw at PuKYiqv}MS at 9^5DHfZZf!CT(?i9Jml#bd2}VT>G|20_eTWF)*Hx
zUFxD19iuZsr>&<lPRIHBh5x#3`J0BnWSogtIoEdDeeU%$c<rUc!i3-0Ew#7_X3_Z^
z6^+|YqYmh%w<sCwb;1I>#Q_T*!sAcACh7m+O5M(MPkvj^&lXJyV2{`Ft?z94cdNt`
zG#-ip8WDZ{At7x04<a?l_=G;Rr#tn-pA6sX&g#E2Ox}+779x>nNmDp=zsqhR3wyd<
z_Xsw>rA|ll2WWd6aYI#r1&k%OLD0F6g!NUl%;5Ly%m^pTgT3(n%<$FeWh at P2ua4CW
z2ao6G;bsbcb3 at RU%$}K-)Y>aIW#&hDN#El}<;)NAlD at kM-}f>8UV`yAKF_r0B>WI(
z at gMS%&c20jJx-OSOsmV?JMBeJKdYrqPh~=C#(I4nMkQuZzINp+)a(7Ekrr#Z at NltS
zZ?yY7E_8je{p0iCE<_}fCJsdIBBC2}0Nl9~nJfCP%9G+ at gqP&qhx-+VU4FkLmDKeW
z&3^1szurkSlMR>Gj$@X1HiQ{J#zNcbdtteCELO~8ATjtJ%-{(Nx8Y2y1!r1Ibj-tW
zq7|o7D-#+=5*L31i-~WI6ifK2*1geFt@}pMnO5xB;7sej?;Xo3`H5E4^BDi{9qE<?
zoMd(S at 2HxB(@{7t>Up((Z;S8SRo_VG$`vc8n3tIo#dWb0ttBfD)7jH at docl7GMXi<
z%E#b*sQ~RL`uA%U?(?3*{1i>3!<S|v;g2w%?fs9NBoP&xxX>sV7NX|sO8x8o*0OA0
zB)m6Z*`(VRkJEw~3ymd)pkZM~36HZ-&oU9$TIs9I@{Uh9xzO~bz6?Viz6OL*3kL9|
zxUlOr>!G|!-sKY8<=l7O>v4ZJ`=9dTgn}5TndV^(YgGUDkO-Z;mR`x!GrhB=zF2Eo
z at Uu$k_>T`}dM&-L7W1peOZ4u51wZSN1Xm9FE2I_pRF{e`cC{*=*aAIBDtJk6WTJ>%
zK=UYywczMUe at FXofVLRpg!}yD9vH7u#CTeZO&tVR0)B~7|5{icR at SZHjPCcgZN<J&
zH;;$z!ur at FzNeo2I1Jki<KXu#PMZC$>YcJ_q9OdR`djO6-SI%xb9iyc9{v!}lpT|+
z?kr1ZLU?oilsfF~+o5yPLFeQnozpPThyx8fXprq18|{-p;^2#rfvg+kkg&s0)dzkS
zE`@{(FpLTYzI+Zscg+5Z-v_yq?)hjp^y8jab5rj5Na2j#oSXQnV9ojC{Sog|^zujq
zGbAN7#}4y0Tr at omiz#9dQqK{~$CxVJwk(<>rRvxiq(zpfE-^wb(20Yl%K+(NYbwzJ
zTV at TF9-DqfT|W6a(n}JsJMyE^hBw}reul%=Vo9~FysJ(iYgdl+g*+58EYZPkvhJ^>
zFRY7JhOql{U89okX5Jg)3TzuOMjr~}O&JQkjsI66mF|+g#wn%OI9;~LSy=ZRjhw7^
z+H{@p1{UtCI&Gb7u>3o1tL;6b-}kLA7@|9<-;8&kZ~iF9 at K8J-6MjVB041!<aZVUv
zk%)!YO*!o?0=f-9r-WO%q9D;57|_SEZmv!hCG~b^DpX1~X2XbTljhq-W93tZe^_e3
zzg{X41$+(o8KJ#emOE_8aIC=wVb+Q>+e?N+x3v(bK`X>Y?6es3`md^hy!<<~1$-5{
zY7<HA?pR~3+El%?DWx%)q|7RubigRdYM}@AoC;3I|LLG7bEf}&i3y%m^LscK!bj0=
z2$A(aIHN}Tv!=xAEWAZ%r4=1ka_6DZz1)5N&TmQYQ;oAr3f_?FEXcC4%1k?<It#On
zhPExz(A+efX{CP2qyhMc#t#4d6%h0sqtsta3ql9e{Tg}!L`<v9pnetWOIz9)wb?|x
zE=V;To=r6zeowC9Z~*S at Y7K{{U0lOF{vGY+{gIy at gCvaR^gXN^&Qmx~XA#}G49~@H
zGJcE5AGZ;IRO0u7HgHo at k4%#{71qsrFa8YhTeuCLlG)!o8$8QT7zbckh0Yg4uS+*1
zf;2vXTLrwoW!(>rFt25!d>;f_1_M_2?>Aa9yV><sx6q4hJA6la26`#2h106?+$M-q
z5lXw9hprCqM81i8=l5Qf+4UbcxX&G(h*IpJmy|FoYIdJHLK<1-N at 2`c!mj4NIH|@d
z<>PLs$lplogua;JV5td#E8XYbz9ujt*L?J<$wrptT^z~Gom=u(R~iQFd5aGq_qi3i
zhHEPNzh}1CahR$vG{ir;&%Nu;T=e5t$5JoU>b&O^&8k-Cy=#g8e*B8h*v=qdcGy>4
zRe&8Ak?!JQ-H$pyf4nL8)?2Q|Y@{cx(_zyBGU?nB{BFk&yOhM=u={(yTUXqEfbNK0
zx6M|?pyj~KPY+G(;*TNmvLF$0;%M>5u2BKDYE=V`6|nv(L38PE%rp59dhNBH>E!5M
zSc<b?t;+JSW*_Yx^n9GlkO8~MDdC_AItlJ_$@jvq)r9^O3;jt6&DDgq#X{SZ&}(SF
z6=wlc?!5{n!}>oCGnuJ23F}4ChnYrPL3YLM;L!8#_aSHP_y(m+z8`JV?Q%!n=!LQ$
zax;B8ei`n_QOsn|-3fP3{BTF<M~B2PZ#(zSS52LjJuW at 0(qTUHr$@2dKx3&6dtEri
zfjI9<cykNVF%I(r%pTXqNhS`P3euBO-RIXtAYtTJN0Xe`1%N)|0qB(IWZ!qRPIaI6
zWugpN>nFSh-9`)Cs6Rsv%ClVdH&o!f(kR(&f<9pCWTa-seYQbJxi3;Uh7|kCeu>!g
zU-O1cLnk6`CGqI4x%hn*%SRD<GkAebqxCA6eeuselN<l+)4;<zTK_Hb at utGnm&vp&
zo8b4VJnOFLmYX*HIXV+?`~7mL^&W&aDDDGr|B>$tVaE`9b9z$`JDafL_(ISUQfBV!
zYk)luX&l7vNLMATPEK|=-3FM}nU!CI at AS@W)ewSl<AgnfF#!C9Q&>uE4nTUOnc0E#
zXzx{H3zEMg*Nsm2kN+HHm94*#WwjY(y-r#PEnIh44E62rT*d^pe;Xk5S+b4|o7mmp
z>PKf(P&1vB9FqM?BSx}L=nKY%tqq;|cN^BFw at B32uohYKE?=A8LMN;VUi}ev&v;v!
zT9CtquEp5(H?T(OM0hlGt)ve^o11!~pUjuznY*FANS6eE!!fuQKnG%vzBEbt^l_wJ
zLYWP1&;;4h;xrfiF4P$*>I-bEZgQUsTtTY at 9jiA-E&qiOkF|)4QF>SpbVt6&C~B}{
ze+lc?pLX+o0xL#_Yx3 at BIgK5Y)6nUXy*nG9*FhJ^mSQx~Nk;sG-|^4ifTA%FZrp!a
zwHaSCz8jT!TbzX526ddlxie^!yq2Z3?)iZB+&{crxf{ZzZBrrg&|E3MrH2(vOY<4h
zPRb*tX3f_9A@{jgQ%L$^E`8NUv<_}2YVZ6Bemdmyj at o?cO$!${;iV*Yrw1?nad=)6
zovgeEu$jZNn=$~e0365RDNVhg4Uyju>cMUm%@{9D!U9;NTVOIq*3!9cVS&Mj(<zY;
z_56Pq|8H&c(L4|NI7sDzJAd at s9;{I||AEf_8X4=vmg*in9OoYe4UH9iK0<1i;_%YZ
zNUUpt_ey5qa!k;zje{P416G?7>+HsUtW&k6+FfacPK<Tdu>&}b@`a2;_ENw<o%A+#
z;N-y5hR#db0laR|NzcRszdhV}sdxZ(6W at bA+#ikAn2H&JP4_Ovg6agef~UO+$pr$w
zKl8J_6X?W#FpkFoWqkjv#QjsH4zd39jxp1GWnln2U2A^8tg$DK9E`-Po7hutoA2}O
z_O|$Z{oJj0jS-sz*mp{!y}|O_-W#`*jt6u4)`c6fQ){+gCM*kBaF+_!h=W*D7`nP!
z2M%*y(}z`*?D%ZkLQ$wM!+xXP-Fo9r>P>cA9&myqycWxFmMV5(MzOQt_hS`~C4^B-
zWp!dF;c>XE?$$e(L=NNh(>TgE)(<$#jC?-;EtYZe3#^wIUpuC at +}+xFGg;mL#_+Aa
zUZ~065A0#aR6o-Pdja>d_PDMs@$)=8#6zN0!M&|LZt51yuGchBYRtE#p%eZ$Q(5yK
z#DC;K3r;K3o(#KZ4)H3!la%j7<?B|y<8XUw=$228np^_|Qwv}j9<5}<n<U-Z7<SK-
zwtR|Fncd^?>*#eC1-i!X<EO at F(y46XzTDnh$Ih^eI5)V}b+A*eq3`yxl5&O<4|sRB
zoE0p<>k?^O#|C at k-irUOGi)qNdZ)2dZWoHDXEP9|5u>MGj+wF*?_VLN3+a8*gm*TO
zFNS<!N)1`q$KCq%n*ofFcel7aEBUM0$?PNW#@4YeJb^d^7K(#-t7fYUkVsHCB|Hi^
zB`9w`beLmuNA$fvckY%?M7$jHw#hXc)Tgay`-alKm5wZ^XYQ;O9xt)D*>s(-sHahw
z?zhY!b?Fm3FN=(d#&KrFL9^**)BZ*6|Mi#kbUUc^pIu-pPrxqIeCz<SyC3CgP1^Fw
zTPD{yq~m~9(O4?``UCsjwnmaldb3lH`Exq<nk)tjciY{JVHE~`H9N60Cx at 9V+)ZJa
z4L0F+sz2cD62NY9Eo77pI%<TJxo|=QuY02FbGX<A2gMTegDI#%8 at VNc!Vw#qe>oI7
zEXKwYS72|h^^;q1TeJ6;PmbWNR^%KO{X3V4*CNy|Hj9l2pGP}tTE4N}#_qM1vis00
zqj4s65a)ixS*eM0O$TvA#PK1H0jCrml|<a;E&q0vQu8But&glVp?!MLF5I`^&*d%H
znPbzPkUOiuFNrAHZ>ktLQwOe2Y)o2J-Z1{<@!^ymE<uO4+OeJ#psWuj;4R?s4dZuw
z9ySOp at pG(mS)3EA+3~g1vS(28M2yZOX`Z#e4*iNv?}FWLmFBpY$8|_^T*J7FXpZAF
zU%i;-v@>l!G+oY-E|@izK4 at UmSdZ7u42$T>^qqYxob(E(@rOn$_9U(h8vQ20)+ at d$
z{`ekxVIC#yi`izgG!fL#H at lzM|3vFMdg%nsIs3g1yVhcO6vjoPu%K5iARpWqPkMb&
zORKb7$x28+lGTs28KjBO={MHmJ|*b%uQhz5J7$txc%yDZFix6)?^;Nj6p`Ox?Y9f@
z(t-OT)pr}K7QJ?Jyw at IwmAfgqlJp1l!Nf|)(x3tV>44u08r`i=<IIecwf&uB?DO47
zas;kuvp*3yoGk|I(5$*!Jt4aRCn8%tZTOn-4WBxFCcYZ|*K-I`--30jA<vxlB}Ts1
zNst7kJF%`xftLCjsWH=>)^sv(8dgEzzaz6-+UJ#x6tc56c$UAzOJn2_q(6kxuf-ey
zcR8A?ebqwVEon9}uI3LlcRu;OyLEQh|C<ovzBB;ynbSB0!#uVPBLMdSt_j-a*4q8x
zO;#;P`I`ox%s*pvv%7X<4$%6$zjA5V*=hf2y11`%nt17-y2Cx=lS{<FZf7;kSQ0?z
zhw5dGn8RS?PiWbUnqKX0eX(9bkIfx=f8?M6XQd48*1Dt?oVRG(#?Q+{UM>*D%vo2z
z<;)7>7OB&whn%`(K=@xcn3m#Z9y)*AdcZ=bY?_iYU0474t)y72LC&lQIM?%A%Hhik
zQR<R?YkYQh<mJp`rrf=Y6Biod9{1FV7O|O`#KawO9zV4}{IE)$!-Qim>4KkuGilx2
z at Fq&yy~(he1-oE8?cUU8G>Az>Em`dJIfVW(VAQV?GlH05HPkiz82s8eMobcK at EG);
z7`uvk)=z(;q5?N at A`Lh(+jM0piy8DM>Ib-6mvk~3MFVD|Ld|ftL(G7k>O?wEQK?65
z9q+td>}z{egwEfEw%~q$&NN?rEYLGA`Rcdbtw|44F3?sOYc at -jwh9Yg@F<l~+N2SA
z=BwYvUI8N=4br_aRx1O9D^RL6s2Aw^=%frR6Ennq7xg+wiG_MYUB2aJQ+`5vZ#DIG
zx4wj4f?S`0#EuJf$4*P+rNcp5PhIP7-FXVBm>V%8e5nyF7<s9d&n6;~QIZws*=M*T
z`xl^v=KK1xefl%74OfCVH?bMzXX at 5bi{jL~{Sv&-g!aNAt#06|DUG#yPipxm?$!@G
zd;NNo%Wq`ZG4bozF+0kfBH&#t=#Mr!nbCS(E!%*v<+ at q{bq5Ove!)_!mo7&d66Qnq
z)#_n&GV+orH3PbfWRd4?;{q{dwH~_*`Zo}7|9Nl`^E at J25HCZb9^U%!DJhPBPg359
zlc+{0w|Ga2O}Q;^&DC$w`1evJ;-gnRd<^mFdsJ!;=5c!WWZrr8yN6TJR`0r76A#B)
zfT$Ui`klmSj0p}ztalKrPD%X<CG|%Yjwc*F;qcUl$5Njp8K_ at AyjhCl-wjeD&KsTx
z8pKngCdH~&YVj%E4)>uNaxO)!`GsU!rGYn|yza$7GW5!q*Os%9<;}qiXb{N%;p<)$
zp;Zo{ts6cJCdzd!V1JM5c=Q>n<6yTpaPtiNJ$BGbtOeIL9L37LZ*94VHpVRiEB8By
zxP39oMjBp)+&tOlz(@+4#qQRI)nXu&MYYBL=o94HMSW*Pd35qC$NFI|IUDb4*t#&p
zdRhzw%win&U|nd<GUTb}bxQ?Hi;mj3VH5o3ab8#|6oLoIuN;0e-L3ooaa{?9NjZL^
z%%2T+QXHPIWx-Shuakr`OvrU>(gr0~sis78K<SODMm48Yuaj|>nq>V?uLisO1}kZF
zWsjAg at z&_Ew{1gh?*BodmfNBe2lF(qLR}n0S?Go2NccB!o7)Z=w=?r~4~+gI#x4DY
zks|M}lSc*r9O&AHyZrhS(sg;g+nA$M#WG2FZo_lyo?9=?v)Qo=U?+Y$_&gtBy3l+E
z%Z+Gk+#sjeA#mxUAdMA=zT;B66lcon)0%wwxf?fqAO)NO!;q72p6=xv<k+6Ij2T51
z=z^DxQp-P=T%Oy>X62`+o8oDPkD2xf$S)oB#-<RRGYo!-GM#{a&SHZ=Y`}{gBE87b
zx#6`2r!+x<((x|Hq&0(ag2zUdBcxI~m9iq9pRm?RLTFg1S8e0B;Es{lm&h}<EhOoV
zy*QfnciCawmMcJS4xRi14cqs3ft7R1{_XU(+o4McS`NtFI`$1{@kyJ8BWCyxuDZ)>
zv-CN2*=gK~(Wk;%Z(n~ta?^~w2|>HpW{029Bjy(fc8j^~L7P7x at tW~kNE8P)Gh*(N
z8k~;6c~zWiTa)HmZnMzI&Xqmt;*jIPW!QP6IaGaI-9Yut()u|6m1U6fHCNIXuWMb2
z@%br#He%Xpvi;f6{#)elQvSu>Yx6c!o*7pk4PpQoc=t{W)Ws>(>1GG+K^=S$wP-zV
zkNF$w<1ki{ZoPYM(n_+;f|W4oYHLOXt^O<NO&iJqy?rBpm*a~$q}6ECizvxpl-igI
zH^Ff0Wq0Ccl+5D5EumCf;$|a$(zpWK7HItuVzC*GHXXG6h_6e9iy#?ScB9spbAN+~
z*YlX at z}tT)O>h5ID2=Y>D&maYIHhGY(0f5R^NcUmh{sx!orxNNHpA at 2&I?uxaTKQv
z(g)T;d2Ahz&Fi9zKM%PyqDGB1dDJSgS~1pRjkIFKaf~A@!DU+l{Zj_!#J($#QbJvv
zG*GEk6KWMV$wN!sq1(<OZVBqiiZ~_MK~BfG=a&YGZp_jjNBG~Ousie{tivByv?g(Q
zWtY9-K39J`)*Ld%e8hfNX_Z9cOuq}YBh<M3E{CnnQsaWgN!f=cZm7pOhZUpfM6QC<
z&E4vR1<w_h5UiBT_`tIgK5CZJA+0m$ppE!`HSwPv+Nj<udJ~<H33e at 9xaAwVtx^)C
zTcv);*(ZQj*O^gIMy2#wz(`s#1Kea*e6qREXpPTs?lVi{GlKgF8lREeXST-Y3hpyp
z<8vkVDbV<gf=}-iGbz8Z^abp>kLJ7Wqp7zy_VtgZwyzm|0autgx4`0blxuh`Q4iMD
z<U=O)rnf{I9)>U8Nq}#J-m?lM;?`g;-4t|M>&MiMp%)nH$Dl2Y*ipwjOVBpstGM;#
zt`qpX#j|jV1{#*hySOeOX+;k9_8F}tQF|A-RbO%;ee=|S+5S?J3omFzU*Y at 8(y)<y
z{-XHEP}|CAINrBGxU&b{(`(omyPv|Pso75ZF`+43p7vgGDfEcxNJ#)En5P~xXEk8t
z#!Gf7``5vhf)q$YfEPK7EZm0~L^;f90d at F0;a}Ga+ at q`SwcqGjX3iq_eu;W0rGm3b
zNbh*Ye&|Et at 2l(O*=`o77uWYf>s?Csd7}9L9_NDi(Hl1xq|u<0NQ&qhe9?P9lmh5$
z;)_<b{QHTIk=MFjGJTv`_%G{$w8r(l8jRtU4ZH^E<{xyr26L8(+Blx^k}mw}OTM}y
zF^;&U9`7uyxRmMxc`ORQ3K%64trVB+&HdW>YtXx_(Kj_op6 at T;ujeCUd0nn+IZlzF
z?r>Mi=y?>aNcE_;VmxjFWoYY{w<3>!aUJt^zX$`8hi*xA&?4eMnICy>tozIV+jeMQ
zPK@;^r*uLoX)n2jsAZz9^k1|P)t{W>XkX2G32z>t2hDC+2Uo0*^0za|$A%un!{q)+
zBP3$#UEPqM*$w3ldXn%BXpzvAXnV-xq}&=FW)|cgg<fkX`3=2iAL6_Hdx(2H2DV%r
zCoY!yf`8KByI1kOSL#dt$H|r;quy at pqI<xV0;!_(@S8Bg>K>4Nqy1j>fpk&g&4|U5
zWdM%@OsZeSEm97tzXKNK^v#OQF&cE`(Bvk~V7ds-bikTdDj;aoA<vqXx7q|&Zp0Xx
zgt$J13eLgnMCzqP5hd?SZ*D+efYZ+;LF>~d8_W!I=P}a2$p+&&j8-0Z=$2`D=IqgU
z|ABTACIOy+d15(W8kvs(b^yL!a!LaMF9&=z;3d*n4zB<_95CJ{;P?a&2D}pZ7!7r1
zz<mMV5BvcN+!OG9N_YaoI|IH~rmrIy=egQeDB(K5xM|;Zj}i{}<`Ce!mGD~ue+ziI
z5>D{n0pFE-^R^}_124og_Bs5TpUc+xd;y;ipBpaq|5g`Dg8MyS+zE>PL#cp{0=h%$
zC*}k9DBy#DZ<W$x at JoPiL3wGkk0AU7z&C?$qVb;seA73S@=<6`LpMJH_(o7qSK>be
z_y(FqN_a~E^LAzx#C*?a5jvQ$%dta4+EqJz#|M+~KPDD-gA&#mzHZDs#^mK?j|NUL
z=z0jwyb^HeW at x-YyZ=SBCunF-xPW%9hW11$LlW|?Z7T=uEYO}raOM?&LpS%}v@<TE
z-3xn7DL5NN`M&M~+Q~{7<$IFUUvh%>^`NZ>?IYp<PWyUy=qBvnBi|R%c9Q*~Xq{X@
z+u5wi_avzw&-W5HbG{GS%TXsz<a-HdAK<k6U6^lYKtp><`+PfJ(9ov(9gBR6pj{2x
zD+mT{5wvlG4EgSR5$$b1LtAP`J414S_DaxR&S?V%?UkTiqSOiFchxo!m!KB&Nh9x^
z&j5LIbUh?H at t)3v_~Vs2xF4~mB94dp9QlFX{Rq#I`nRJY#AtB-<unGsJ_EJUeF}|C
zP6K|RaUW=Ollr!!(I-Yj&PP1r7?ph73mVgq4`@7e2}(Zhb%$>JPU@$nF{X{vz`L#E
z8QUxOB^~J8*i3DRysVJvj3G^Gg3_)l5O=LY#Yr_X=Hm-;!a(6wB`5cQ!gRzr3<{7<
zyhiRp`0rvhBGdRojD}nzMB`y47k4W(9_KV<?z$V{8)G#h(|908L#`2`u|mlQTG%=R
z`B()SSTXQ?K&sw&W2{DG8p~od)O^fQ@^P0!qm<K-^KlnwxH-4jFXY5AlawBK8So0)
zbNQIjO4y|co0EGjNli(pEJY57V^s#eVxQwaap=ZNDU2Wrul^W5xQm9BaF6y9Y)p5B
z9&|U>S-}(uQcsm(V=S7~X2(*S?`Do4mDIkV)Nc4vN$m at s8rD=deA=#T=mFI7!23e!
zNoh!@n3oOpr-Z$ygyAfPbsi)SNj02|al9T%A_)9^Cn!IsDThk;MNRK5Qp%xHeoRAo
zu0r_^P~H_vRVd#9%D&v2SN4E4h@~`Es<q%)%~qo4;$|H<cs`XI`MMP`3PIs6X#j_B
zQQ%uak9xq(3cQ#`Ccrl- at I2}*fNxab+2TOa1^5O9o)R6&P+E+RH;h6X9z~pSfNudj
z3~&T|ND}8}zyqTr8Q_}$qh1kzfan5zBjD~7pV9z)17OT8xISbA?ZR7KvAXZVYe<$`
z#J8yXuU<zC31y^pGr_L`UhQW2KPm7bz|aBae~&NOjHEaR0e=m+A~;Oyi*GE2{F6!>
z4AxNJhu9xzs6PVun1=eJfZqU>$28Rc2>5XYZbW!J at dKp<-p-1aC;w at +Ji1~fb^x*d
z2n>=Bl-E}QzY6#P1t!V?z|gH*8x_A-0Ivpo5amHj%AA^iuZH?C4fRhE`xXuL&j6Qc
zs2>N6@!$HnhWaePUnuYagimgJ1a0P#X9w3)`(s3}n}_zph<-h_zh*SMo at RL~(Cd^D
z==!v}(U3AG?A??iHtL1O6ON7X<a(PTt4%!A%0pu##q~Ol8!zK72_Y0?0LR4`u;kmQ
zoG08R|KOprEW<2v$zM1wQ*b{+D5N&Wh16d1zJd#lC!n`^XiOe2dA%JjT7e`j$AzR_
zQr`~ucRVyELzg at em3o{qEN?}nUfn#BdP{aj<rEL!qRJ_RLryJOOR|Nh1=+GhBzeFg
z$b%(!x9^KfZi~(;(H7{7ORh)VYx?4nQaPvWD8kVfm&~afEzdFmqc1L*%HyYV`sj;G
z+<=crGK?A35|ZAUS<sTJut#ghenBZtvh~<msZgIo5_ievlow%y(Eyw|fH5+`<wZ}Q
zAGDk at owg{@xT?<(no4``(h&#tS*6z;U5vWl`YK-&u=lo86i<@&_Fyu<9Ug}>Ufpr~
z(SjHFxJxeule8gmOXxf##W8%D!+PqW at 9l+@T*SX9<uZ3@@#lcYDe!Lqe*k#A0^bJs
z7+{(YQ+#L`7r#O2A8wa^oH3fdL2RGCWnnaZV>5JAX8*bzb_wnsLw~w%mG7mbvUFV}
zy!NGyFDJQ%VdX`yb?+e?h5I+61_WuK&n~$_iAeQ#oAjQAkx0=}rYl;&bccsep3h3D
zWX2L5+JKiy5Jr?(5%&&Zgn+&xm#XR`_}nCnu#*oj7x!5ZEmc(u!i!vkY}mO3wN5Mv
z#sGi7$gvqIlqf0ODW at QgQ&MoMDTw1Zy=&AI6rbU83V<ku%P&abyI?W2vviBIyKyN4
z*CVz|bO|GxsRXIQh=5W8(Z%T}2qXMT2^1fi-=kdsop*=Ier!))H!?^kMNvBp(voOP
zO6`=LQu7XL6{wxE<7(a&ADZ9uHmAIoy?p`g;WKnTW!;Q38?cg`*0MiI$l9cjt)7#^
zX=uSf+alZur%~7^>kyM_8_c<V!#n8p^BH&%9=e7#xsLDy4Q3ZiSGk5om<R7uc at Q$g
zVTcI%TOHw9;l&MW4w!SNg{xe>5N846*fvLm>D|gB$&q0P)*OgK*v>M<pD}G!1U_p4
z?>Z1ikTCTDN2DA1 at mLQ=k~tpWy4{HNkcw4L at NesOYq9Eg^H{s1SoOOP=n(5+73+Wx
zx!?1Oj^{QTxqU9Y_a)!UxD6QI8!i?W#FvNfYVfuF6}xf+v9}#6yAB!y^rR5h5 at oKI
za_+_&zD$7CHu8^y`|1{n+-L#FyRs22s}%@(@UkJKGih1l`p9N69b$H)OVoe2&iEHr
zVluFN*wMEbXNkJ+*SeZ)My@><Lbn;$h>5tKrgMiDosk3)^P!Lh?!Q21k>c{hrnVjL
zs-=Z4;Wj)d-7MCEw2|7P_Yf!9wKu}}4#dnE%n-?q4?kq=Vz@~Xs13s at IN5v?G%2%i
z()l+t;8TV;-1j%RJ;OUd3o8tT+EYXg_h6ACFlGYdCeP!EI9G;t>ThyjZ$po}VDJUz
zZ?!brg%aHdup2NCwBJ=I-^cTLFO?-mdD-R&Q4Z$`%q%HXcWbG}LWp9OLJ>0#Uh)}4
zF-Gm?b|t$R at gG(wEo&FD3?VxeO0^25VHZ<sS019aM at vn3T&@e at 0cPZ_;ZNOeAj-R9
zHHq6J7v?Tj8ltxsdqA_$O3SFlBFBVf<x=W0(1;H|C^6iF8F&`lu<)eJA!qe)e-<(m
zmz_1h{XqyjOK=<ErW*c)L*UqjN2p930?#fy_?<Ns{MQwHm`WT7?&}IJ{5~!fJeUfu
zO9j`_ZWOd<q)97j`|CyWU_X}!6&J{Zb^nn(SpPHfV1uTQl02yFP#$cI_H0ESY*Mkf
zJlNc!JlGP&Qslu_6^qM*Z5_&k?H$R3g-*QNiMl3vurN=N4OF)|ifn*9SU6mf4d}HC
zhiGNP!v0#>u&~enST@|D%7z7>;xrEB1gR{5RqhL91MI<2s45#493mdPNH%N&*WIF#
z4Yw$qeS5opayxjmLMs~<>?UgMWWy~T%7$BjxmioIU0)))>)OkP1-J5iYGuPMo(p9I
zQQe}Y8tY9&aeaH)umJi$P4Bz4UCC}m{H+S5JKBZZfshUDWy1nknYoZsyYdjVZCYv_
z$_Aob8I=w5&s|J2RvMzWU6BoUw37{YKsIcYWkVhGV)NfuWCP^H{9}r2fSj1$q{s%y
ziTMXZ7A^}QC*~i}%8B{E*UE|c&;1H=BEaRuy%)%d`~D+2asSWAiItkZOL9W&P)_)w
zJzkL$<ti4J6RSFu6H*jQkrS&`EG{S3bSNj*b|fd}XQ^^x{$N#3%+FBe#QZ+0oS5H3
zD<|f6(#nbX@&98vp_xOJ9+ohJkmW=v>?B+uC&&(1J2_GMJL1QS<OFtK3`;d~VyVLA
zced*@cY<H<)yj!d+_AhsPAu(EPAmoHDlN at +{fg+`*IrJP7V>;*<;2p9<OETbv{Yj~
zizwdTUQUz_CyKE-#BJ?Lb{pcaRw&)oF61tRtZXkQO7ULIg_PQrhp4U5QtMDo5M?nc
zCrW7kcR}uAr6GE26*+NNJ2`O|<b+R^6D0vvPL#Z)%88OXRZf&Vr^<<v8m*it*{78g
zB at g{?$O%1JKBm1l7-uoCXTQ-+?m{baSi1<7R8il+4iv`Ik}cFXurueBu&yszM0$dd
znPx#H^Y~7Zk4|+1D)<KHfw&I92Z+}H!`<g<9ZDR8z}KbO=~@LC{XxusZiG~d*lPe^
zspu@$(EeEUr|=o7_^gfjWDpMGuO}@>30|+|T9Eaz at KnWTL(C at uxyKrUW@{xTs%hAW
zFa)y|I%|l|yjC at 3(M2iGYf)2HeEz0Qd0w-cvJ(EGnzG_^4ECNE(JNUia(ww@$xk<+
z4m+K?e$v3Yc_B#uc_&(Yb(qJ{3TNJ at RO|4^jAmYtY8`I0z`S=zBEgLr&AcNdkLu>3
z{7(Wph*uUVq&wUP at Xom$@;sp5w^Yb<Ap?d3UPs)9n9xehTSawHH&2=m_kG|tXxu_r
zv&_3o%0Sz8r%`O)ZKUfB8M*t$5cW(EA9|j7izsD|4Xw_+;>>P+K6Nd{{kUc8u>ZlH
z63030;<AuVU&=0%1_~p3SnKA|I(eRZ#t1e#q=$ra0CET;a;$)$4+3-z?ocBw-VRsP
zjmCcS<)m8+bw7 at _M&5cL&Lq4cKQLsdn|Bs#{CRzqmUy1yTuS at 5?0H!qH!qbeo&3)1
ztYtInzL0YZnE)NuJe-s3^Qkz%VH<)Ik~!N~>q0tV<Swf;kaAdjUe4W&k>Y4T-%#$b
z?jN}y=@tK7&0+DEWM77I80t=Ea6&yuY9mftj;V)*?$yscjIzLw`bhEH%BlgpSA1CM
z at t6S=H!3|IJW%|y(&N$Y#Wen-eu0gaFMbYbkQ*&uO#T0P4q={IypL7{KgU_cbt-2S
zKc{k5agEAZ#gC|*RlHlvS;Y^ioK?J8%UQ)0?K!KsNZ~AK5sPQ3oK@^mIjeYr%2~zO
zZI5zRah}3ikSxVHa>>DG;H={8|CF<educhVxT}`4ijy_%X6cx-itSp?n)|($v*!L&
z%UN^(Mx6ER#}{+f+)sXvv*y03<*d1{X*p}|D{2ns{-I;en)^;ioHf_4a at O33RL+{a
zL*=Zwn^ex4TcPEwxjvP%=3)m^<*d24{}N}-U8{1|T%XEWb62RGHTMpcv*zBa<*d0&
zRL+_^U&~o at 3)^$n++hl5LDM?-GL^ID_LDh_`u^PBDre2 at u5#AgP6}s%m*ysDIcu&_
z;jC^2%Y4lU`L{Bw=wDjSDmty at tfCWYyA^%fF=rK>)pAx*la{lJ8nv8N^b&E_GtXSi
zSw+wO9A_2n(Q;PNPAz8 at ZPDa#eaD<t^higXRkTdytfHG$&MI20a#m5P%2`E)TFxq(
zp>kHyWG!bEjr%3eD#A_I=xA6pL*=ZZ$tq_RjaNCV$f4z|qH9#nD!M|;Sw)%cIjcyo
zaMtbaP+^<OS%p7<n@}<ul?q!_&MN%7%2|b9sxqsP^#737vdk*{P?cF5zx+AQDm<v=
ztiqSIoK;w-wp-zI9dlOU8(PjP{H>O=3U_EZt8gQ6*3&C5=Bz^T=QyhnmS!;4IONf=
z at CGes6)w=^aBjz(Rd`27oK@&jIjazw8$Oz0G%UPY<*dSyDrXhqe1|$377kQ7t1w;5
zS%p1+iL(las+?6gQ01(`bd|FTFI73Ku&b7{3X at gNDzs=ht5DaTv%Eotv#{IaeMjXi
z?-502ErI_bm9xCBsGQ~fgDSJU&ucl$`;;oP)_wGIoaKE$%URw{TF&yWRol($>zK2=
z4{ABfi~U_b*XHvq?_w=yc}s}1o|<+sXL+ap9A|l*TF&xbtK}^3m6{x8b<A1b at f~rN
z_Y#$}yj at hz@+PUA<&9H0%d69J)|`;aS#!SAa at L%$e~Giauz?qqS#v at vXU+Le<*YgX
zR5@$TX)R~XIiYgaoKLl!HRt{IoHeIL;VkSk&Ur-TtU0?C&cY0LPL;}8bGE3QHD|rb
zS#u;UXU(}!<*e1%$^Q4F;hZH}&YDxI<*YegwcX~-=$NzS+@$5KIr&=7nsc?5v*wH-
z&U&){#hf)~z|V2kobFoAnq$*))*P!Qhq%et(F}ghr5$lr!B;A06`WEztDsrstb$Ke
z&MKh&zt{}E;BA$&3Jz;Is~`Z*Vk7}Ww4b`k9V++(mAmFig1G-;_&rNG#TgiRWxaz|
zM9?KOwjE)I!~h^CpdEk?2&{*+6RSp!FN82VD%iv+ip6Iw?2OT~0Gp*R;`SMC3y>v6
zo6%=CGN0gJB^KBb6y8ZDUchY^+ at zyb9QHuF!CKA`v2Sqn41 at S1&Tge#6a)5Lt)~$q
z)4N=MaVYTPvJjf)U2f<w)G!jEHYor*-nNctr{suzb4pA)?136RxPVsYoY7@;q%3_j
z_CM=0>J~bO0fJ9>55Yd+umLH-R>HQX3M*qQBY3HIsh+HatA58|8)Lanh3^hpVV!=t
z3HOC$EL}fif1Th;Ytfu$mNM`@k07u4+ at aYgja^xidV?a>#FE~DJsR7GoOYbc=K0WL
zt7O5Rs1=jTw&la13HgHmyYOEx29uGaI9DedpbcU$4yjvYoDED^2+KBfBZZagQ%lPA
zMkZQe0XxIN3KFoFj2lrpbDfT$VC$;#{Z_beg9B}r>pu6y2ASKC!{1j)M~wspLozkq
z&Q at w?>@73S)1{&vG4GXdtL%weaISw8-6g>{Q~3^tw$n&%|0sSVXB6GYd18)#6u*%(
z3Vg&s+uUR{miX2O4fx+7EXcKNdk49>kIrp@`faBUizTNGn-&D)i_Wq#xaJ2<MQ3#n
z!c|)J(W!-J^iqk`k7H2$D|l`O(w?`+ZnpbjnE^L?rbge?qBHY|`w6JyRukg)mU|)T
zGG=#|dm%I)STW4T{V3$$LVI at bsfACRKO1+S%*5|C*|=kuPvyX^w0zmkL~?UZvm1 at -
z>s`nJUhd*KSPr+P9<PXqb_Lgt)BB0or4z`GAI`Un^aTuie*A0PUrDcBRR57fcE#7W
zzcPAn3AAXJ59i{=k~aBdzlG|c`f>ko2g|k845x2_wPrZ?eTYNwg;wNT^>#=H+!!dG
z;j-yi$VvJL)Q|~s0WZ(X+C4g1um23^pRdg9-}VvJt7}9H^9bha>N14v4SLs*ln6gN
zGAlf<J_B(+c4Zk_C~UpnHLOiOSHi>UDD)HD0!gcSf_fXEPZ2L2_8rsHVBc{s?myIL
zw5_f^5*o%eR7>5h-5-jMjk9hd-8-~7&~nTwQ^rZ?IA)b7<0Nz(v%K;+i54CMXnJg<
zge;qNUCSEGvq`$)r0=Y;Eo*U~%ivF<HZEgXxUFDkHMnsAn~Mud0MYG9OQI1!xUq+7
zNu+joJVZXy0QlLX;ouIkfMJWmaDx+KxB|Ij<%vi7OQlR{JlCtWcGt(WY&h*P^8;u{
zOG74FKg at iWxDj|+tOU>zdBg_P2<RY{PzgN%_$B!7f*<w~IqnPmTtQC>FFyLSrGChf
z4sUjr)nv=1pZN&!!s9zaiDC)W2`D^>ev5Z1aa)jCJaP$il8YrRg*~cWxO0JXeZ=d!
zHK-xGTw0ugfEzrEnqu+|K->qUSA>>Y>&<c);l$#hR>-a16hWF@>e7y<%YMsoZxZ)U
zc=+wnn<ThZvXr|Kw<pEL_fqA1iGsUrTaT(?d-97~#L;K;A)5<!>u?X at BT(7~8+jLp
zd`!DAxa&54zk%Q0Sw&ym65`*b_)=Pm4C_JPx?WWS_vD|-gRDtWsDDD#XTY-WHj6fd
z at 6%Qw^-n{IRIf9>2CY<uR%c3=>iE~J!~eAIC=Z!k(Sy^^GvI6z(#<Dbed6RBgvoUJ
zL$?XxAG_>v%}RJ*SK9eBey30gM_DjW=IzySoqtBPa&etgxlt#_QRg{zuzq^4mEZm2
z^|C*Xx4~Naq7C>LZLs#jHrQ|EZGaYzwZZ3<TC5GUAzy at SNUs^c6Cv2uYdeYGUr2W0
zrng-ZV3C at vkJ<@>L>8lN$R?Y{jho99$C3ztxY46!H*Pz}+;)u{xG{gwjJXAJ%hHA<
zO-<5SD at lRSFn4QLJs(N=sgUU(DziiAdZ)jq%nq at -o&KgWJA|%x`s;GfhfWuAaQYwR
zJ}+x~r~iR^H_h)z-#fjwZFQTOOY#k}ByaIeHpHF!zbMJq)V>)S#_uUXlBfP&-bF#q
z){^w*{*cnsMUvn0UeWY>NPfdjWxJiEH{4W~TWFO7H%=o?UqY)Kjt!|ky|kqQ_m32*
zKHb}bmzSbao$iePvP6HhQ->0LxGdw)hLGN}JdC-yM30q=Gzn3OJ`&};L at p;JG9>!6
zuc<UR`PC2Zzfn5^FN>7{Y9{GRFx;O|Yx59D_i2BY+nB?U?)=quNOlhI0(?j+<1O6}
zcJV^f4#=|p8y(4d<WyIajlR>FY`c+^e`Mb;OLSEt|F at C}DZ>gxRHDc3144 at bvUDdr
zk}wK>#}ek(k?Q=`Gt&AWN_Rz$eTrIIR)smVKqKEW(BYCymi at BapNiMVF`jZ+`Rk3B
zkaz!4P5w%<zUzM@>!Wq#<aI<N3dwmIWuo;ZmxlW(qyF*^M}5jgw5>?uUo;lC9|vNi
zw9;B%P)?j(7^~9J=}2vRiSr?G(KDy^jLrNP1M0$iCg%NcC#miD>-G{}Dmwkylit5m
z>OxcgU+ynTz5M)$e41+P;t?6+;Tfu*Xe*76wi5X3S7?#HQ>w9%`N9_Y2XB$Ca*N2l
zhS~-Dvykte8BzXFYySUP4?6t|v!ye?FkAZh9`semZKLq**SwZ+D?G}#i2Z-A5B>9J
zTkKyvFWuF=MB9k^4_4AxJx^I4>qFS*pK_bpho;;ZZAoQS()U7s|L at ut)VnB>in#aJ
z??W^n?zj(~(DtG0e%(HF@@HG*FVrG<jcE&U$Ax`p@(a=SiPk(~|7xo?<m-Pj3N`;i
zA3E`0^`S32ZX2Z!{Z*+Y|NoUf1iMQ=BlZ5K<fS&6muMTQeQ1(${u?ty^r1=bsC{VC
zk!VZ)f3y#^blgrDhrWsSA#igbS~oI}{R$(|w?Eq^XO%X2x1(M(DJ9xM(YpVC*o#_z
zp%;DgU-hEzI&K}M7k#hPQnRLY{?Cm>KeTHx?W+EqvVvdcf~E8-cX&3|=ga<IujsJ~
zuwq3|XGHjlK1s8aIPss#iXQ9PiKl60Ag|3Qo>W%%SkX`XOj+GSmpPH{|3R;ZSXlQ@
zBt1CReSmOcYhn{$^AUs-WfL3Q*1(q3V%X&C`qk^-mG6$<Le^)qGEHB-_Wh~~du93-
zdSxUVp@%ATl{y}ZH&nhl7z-PLu*O)}NbC_zB|QPhyW%+Pf#RGYKh>$j`2bp_PJCKf
zol{O9msjV=6Ly{^?orm~RL))U`kdD76SuWg5H8K at CRWn^9oDdnVNE-6b<27Mf;M*I
z{Vf|59X_;_fTt<<HxJMmxQP?#)*~!tk&TN)(vR}o2&5ape&zgNyu8Ln%qz(U`T(Ml
zCD$=z>3e`KlULhx(r#iuS?7Wf?6Obn1+KEd;#VSRf*LCMS7 at k|(<Et&R86>})h}qk
zKj!MW*RJUEjiE&^3CH_M{dZP)yGQUA^NMubGBqPKX+>YuUNf~D%8L7 at 6H^>^V}iqG
zNhm)1<66O1f%m*uq at OX&!p;O??76LKLh!f}-|G%dI0vgWu#r!9!U=!EzbHjWO4x^M
z(SKt=s?E;5EiCVk*$eZY%XZc#=9Kh;B{8a_XntX768XhH@=KJXdxR4nryaeAc2c`>
zf2?;V{8s8G?`QIJwC(l?Cp- at g5@}a<NKV9jiuMSrbTjZ`ZKDyl#*9_ay?}aYj_G02
zX at M6e+|E-d!yf6iD;zjesY8A#&AG8OuScxXcKebq#`Yy&K-gWBCf}EQ5ztbfpXXo`
zr32V0n0G085b)AnG#@#pEGz0hzw!j`;4U>A$44S}L|Yd6JKnPRqGc708~WaaK1x3X
z-%h~&Z at EtB<m7}-O3wusPe at RDD0<-plhTXP2i*~19H8=_jR$ldkgR=6AX^R0D-FcG
zbZBVY{{S>c>MP~r7B5Z=x&PAkH|(H^IVCV^?b*T{({|}{N^Q(BJyn-8b&I9a=N&)u
zEcRhaR@;36-#%YCz1ioxUOWS9oadi^QN+8??(@%FDmFU|Ju=|)6nqlk(>Z5t59TX@
zecJQS`{9RI8K1FW-_BsCSUceZd)7}!DjR)xt9|CDuGGPPHybim48Trm99#loAcd#D
z5(5+lnrz6GK0EG7Qz+i&;`qnqSikF1p9EX7Y)F5=Na^YKIKA_~i>ptBz2Fk$Io$^f
zu6eKgB=CIC=J;$#k~kQ#aeIHra at Po0YZlz+pG`sj(yLgGX_v(^Le!lsIb&E~64XC*
z=*vZC3^rV(<L6>O2VH?%X&eaqma@&z^!kAqoim}MkHby`SuyMj%Z<HP451gf at x7eB
zv9NwTY;Zfj4EPOQahYh&>;01-{Wt3VUUi2j9PfJ!udi=w%1ipm at 3FC&9y@!=lP%uu
zjzsV#68wArv>Q7mcjpcL3GdcKV5xLl6Tz^zusC<<$};#Z$6lvuv#~#HHV$1eNRz7U
zmQ&^Kf0ruWa)^XasHy7u$*G3V$f at f3X;QsbmJ5`&avyk>{C**7Y5>o}KusQGx10y=
z{&#s0 at j^*>ubKyzq2%ESrQ{iE9>PDiEBQd4>HtluvKy(AUw8uQWdQCi&xqx75Xb1R
z!I0f at KDqm6^NH~z)<V&I;{7k)LfU*j(Jr5t at l-Q3smg9`J~RFeUmQd2*fgmgQ)&k`
zrg*ByG_`Y6tc3<+q=|<;eT&qL_dcOr++PulH!c+|7 at O_eTHZ0%o!HhA{3#Y6Z*}Mr
zW3 at E69-|33zEdzh=6AW`XLId>#o6>atI|h?)RU|ndfXo9f%5g4^nPCEr0;UC-Trvy
z*zjkWv(irDZKXfQVh=^^-YXy*c#ld_zKO~g_T=HuM<2=$>TocXK`sI5qxV<90&pO+
z+mKU`$Hq;4PYpPInXAQ`TySpVbvfN7CbS%2$5YIG^YXG%VM7)>!K=s`a8|IF1{xmh
zs)0rZlQqziV4Mc>!2T?~Y+$F<>g=wp&i*pnT2PeUueak3y);oim$50lw_fn$6{@TJ
zW$AH|f^_}-8Xw at 201G1wZpk&JB?WdGN5f`<p++*=S-i)Qg3}{xC45p+0h6E0!vZ)_
zA{L}uMDCXbzhPm6Y*E3PEwJ!j)n6y?mhW+-7g-bvjjpUEOraVFzeZ4PlqnjS0w)OR
zus at r=?h3#O#w?cL9L83L_uxGeN;3f%39b=#=14CfssvA at opqs~wJYF>1c$4`zf;_^
zd06^73Y(3vIj*b(`?g{seZy<;nFAlMb2OupqFz`(_<6~X((6Y#^1^O{7iE-p_y6cx
z%KYJ1l~`gKYzP2r8DJ6dM2G#fCHzO1&9XGSnfuw<YK8Iyz^g%dHBrV(Yy{cZYOH1K
z;W9qI=b^6d9>#NQ=Q$?7ph969aDoIAg;_))2nt&SywfUlF?GcXVGF at zuOL<6?yayo
z7*=-uwjyjR+^|8+wt~u5XBw<v%qp<eGVWtzRS1PeV^)QjRTy(x6!*?>ae?hoinS9V
zJC)I>UlexO-nDYKo$Yk>!3hc2O$g6&+5I@<pu|aZU6QfQW0ST4#?B&3!dsCxdJpDE
z27Ho`8^waFgWFJskBuD!&N|?%LyUuf54FQN1fN}GJrbe2+WgRo?a}^n4JpTABRX+Y
zVi9^JdI*g`Wd9g%@1@}$(eb`9E4rPyW!-COCno0C8Gb`o<l>eV)5Pq;eXqH|H<kNd
zeSvRRPW39H+QzL?poc|mK5in;t&!l974IR-B;cUAfLFU<&ON-TX0;zY!+rbKQ2S4%
zK8n_!N^Xa(*`kE{$j`sVl@;gV9Mjj at wPuZf4e!xw_PNk&B9U1I(_Uduy7sy70%@dR
zn&^GfW%L+CVH$X5TGy_ra1$Jv9GMq$bDSs?#gk$7j*7|NF?!fLGN$5IFl9)^B-l`)
zVj3z4R??K+(KI=vVp2>tO~qu>2v*XR-N5{WrNWm&6wEth*if!w8p at Goxss;rRxsrd
z6_a50o{GudBUnjOc1P3Xkcvq$4eL3k19dAH*5k3<^^xT8-%_*S#?LjbmW4kk$VQG8
zAG`${!5hSP$T0IN at QbNgkUUw2RVr*)1zGsM3bXeSzCncz8~lfbY_#j}q^>oG_l<L9
znLU*2C&%p at M||)sBbSof2~UngUVUmQ4L*XE`jOon2kp+GD4q<ncU4UGF6!r9rG8|$
zf+>fnm;@WvshEa!1S at IE?r54EQZXqeD^xLAA;C(TvKyF3i4QoWU=EdGgQQ{_B%~=R
zY07Q|Qw~uv31&eR6Vev2lBVpArpX}{lVTbwIi}19cs$KesqjH1TCI{K_ykCBL!}Wv
zMZOQ^a2D(h*{v<%W8n|M1Epy5Qnif<HmsJz46Dhlh7rs at Q1Ct=w;IL(8#W>ga>TF^
zX>N3lZj6q3FUo$bz>^Khy$4dI01MuN=$IGjhS7xkkX_$0$Gt2H<ED9YfkSUsVV0)2
z=Y&tWgh7lrA7d<j;XSS_oxtT7jk$Bm((i?RCJ&8b3JhB5dQpY(u6R02Rp4S8QB3lP
zQViK&j8SMM#;eOA|BLYoF`aj at 8=UQBEXw8NzFAg5k(u)qzp=8c1vC~h#wwxd3ha_4
zuEB*cSfP(e+;W7I-xjURh2IwPQ*gGR?YF417yX6%DBR&y;9V+T8Fm3<m%@><8+`Q&
zcv%k7U{a`GgXt$&!Ia%mOb%%<39iv#))1^<%I+v8hcuW3Z_{9IBUr(d-M}OXY~YZB
z2?@;MhcuWE0rMdRQ+7u&Ii$fP_z?}}BLpj$vO9{&Aq^(MPjO7S=RJj<_mtA}o<bjZ
zs+|PpK1wek2~6;IwbvN71OBZB{w?4~HSnW=pVq)n1Kt{y!JxMlx!D?(!>ADs%d$8M
zDS4luzz=Fl{UER(R7x$oQR-)@ra7d+BzT_&b05J9rtFSla!7+o at RJ(MCka+CWp@;l
zLmEuL|9_Flh6hxMY<K`|{D7v-34U0S$PbfS6GrgkO4#G%)`SuKtRj)0h5UH-0*Oq1
zo~T4Nc)-UVtwff6REaFZszi>$B$2s$sw$BUQ<3&mRU!kn8>XrfISNN5aukkAWDXx!
zC9>hT(PlWVN at T-vWlc&ldAur<aa#IaJ_3#B{#j}7Dss0FGL-z>vQ*}A+#Jq|&r;%a
zK^*d%;JlSZ6j?igV23K7??)W+t99K|E3cw3Cx%}w%3F(-mPcs|4v&p{r8)dVK{g~U
zLMevQI$jQY4EuS%nEn9GlJ}!u>_ at +t9dqBQ$Y>s-^b3;i`#~wdWx$AyT|p^8u<IVI
zjQNNz!?AREs3u*4n=}%niC_g&c1Lr}Aq^(MFK94dAXvea-N5AYP7W!UB=ufE*<R9=
z^(BIpvdV6hl}mUIDP<)I{}R$Ts443~f|WF7cQj27Y0 at P4s3x~Z2?i$3PmZDmkGe)-
zrd(f;?xk50_fcj^cPQ|S3QV(?7lHAz27VdvAq{*8 at S7U=O~B8qdI7`pDDm?yJD)F8
z3v)PvQgdm`A&ulCxIrT`8wghFOLj*wIi$fPxRGPZqZ1VRhDNN{yQ7cF?kfu%LovUS
zp)v<_5)L*&fsY6dXgTt?(#qlpFpnshvO9{&Aq^&A$mtj+=Es0#OvMdM%thf#AqwVD
z8OF>xhKc#GfSI$LTiLB(${{Ky!I(M6FfktntfVQsqiJ$T#iW>+Ima+DKjt%MUPH1w
znkI)-OvLmUe(w^jEoh0wXv5zVtknIB3jB%^_6ovY(S#BFx)Sy}xiw(~zl|{HR19w;
zH*dS<VdgBi%!`WOG|#lnkw_+>X~w07X|5^I7D0O!Ih6{Ce9D%!G1a}QxnNnjU4_Lo
z#XUW8zia6r7Fmh>PDi at aBbhFbPT*-zN7~bA_Fdq>tQl?@<}+|ng(0J%T;j0D at P$M8
z%tACwjMMl6IA0*|D-q{%#3A^ArnV0dthBJ~j at CAZG_`#Ix%<j>9bVL+a+W!!eP=<Q
zzd~8Ra?Lv*;q~!Pl#2UoJ1Z>jvrvJ)j^sHUxbq+wzD8<aN6LW5UE8(`<2x@@{9og_
z$_B4z8D4{Icr9E^8a23WaNk*A!&(n6f)st!P=awQ$eyeJVFT=}bT3#|(X`hWNEAlw
z5^@X=@!dPJ?VJ0cXbyfyF-cFmsc+TzQv-mr=ClQ)JYFx4dnTvUtcN|>5<m;$UVH2|
zZx6E(@0S|AJ*;@Y+GV$=<l**TFe%5-N9Sb`t1zOMKzn1H`VC^--o_ at pGTH|15%#I$
zr2g0w8!I_sBN}^4sW;#)?>MYi1~(dDnK}i#u^IF>2-Y&bhQ}HPC>mj3Fi8{AqzP%l
zie~`fV-=O*iru`!IRQV{w`JfJ)Ip$}483~~uT2+^)l!B49pSb?4!jZ<#9L;-vzIXP
z6FQl?BAv&e3r>?Qp2`}*ntVUK4`o!o7Wz7D-|;VL31#>*tNd+N!oS3~p?87J&l(=4
zZvbDH&4_o3%7 at fA;4*k at Ysc4&<r*<P^6{`sV9;2Lqd_ws<$9R=c|6dINAN<=8qzsF
zjB-BgO2h3c(knuD<{_;wW>)NBk9}Sw{DC9;OAA(+<g*7O%xGv+On~>uFz95j!U!+J
z7-48d%EQ7Rg#V?u_oA1TD7f+P+Y8*iW!Z#_JScGZm?QgLN{NTY(j~~R!S%~<441<(
zTp5B!d?A&>kFxE<xHK9o-Ohmb$?!_7jFT|#$#8fRNk6!=*gn at FgRE2kz$Mhlt84Oq
z#5opEKgwk{BZrTWpPc^+%0GvdvU9gfSPDH9uM2`7b&V~E;-?}$)-??494f<B!sjsX
zslH^lj7#pvlynL2F&QSj?S#kS at G;UY%5I14BP;HoK7q15hO$16vZtWzX26dta0}oP
z6;452n5ZszczBk>)<imA4yoE^?qg%s#7l5jgOA`wK5Xw14-srZ80o$(aHl$KUlEm5
zq}eFHTIRHGm9-0v2yawm$|}TZJie!i`WwGb1Ah^Ibem=fc$Vl50gYtX{*!MH&2ptj
znt4A=_UD(`cCng##7)KvYm{E{@jci#>e~S|ia}cR<T^XjpckoZ_3cxUQ`C=Vx)<=`
zZ03JMgXbFbkP`0qpae2)8)*LluL%CP`CI2 at Mp$Fk<?%db;oe*}Y7Jj-N3tUu<-`~6
zA at JA1J>*EHYrKsahqD|<cAGU7UxXf0LXR1<bi|wbRDA17;L1V|x7C*rH9(0(ZE`>M
z2GzGHkVK+-FR)cG?5rM#B<$zP0rgH|4!sMQiZ9B03~{OTj^Q;%NE_Ps0QG3y+j-q5
z!=FydSa2u1hknR^P6aqwG6lF2sa22OO?9E>umCwk?lyUQ7*aH4w`j|b_t|?GyLJ?c
z@>9LVY9^TD?P0pKqnO${1QxGDr9Kmby)mv`{y)V6730sf#L>(4Sn)D<f?QsdpSK8=
zH`t&2jwJArrCmD(dmQDxMQuH~*8tlVOleO^?NewSy1|x=U0Ab`iFg~6=~MBgK4#*#
zqS4OOqR}4vAN4Vr7vw$xw=p=-YcY?aJp8xRP?}h8Q}RAUBO}loD_C%p*AjQt|88nX
zf%flsf2O=^+*DKTQltJse)Mj9G(FszN58qazDPcRo-FM&{RLL+l|F?YtLam6KdQG!
zOUK`)H?)+0v+7&v>}sTD@#l-LVc#$Ty%W8{ffYPnr=%}t6!hMzM~G*28L*;}LbV3#
z1sQac5qHZofX&}i1%&*_FQ`&T)Qx=d*Hl3z5qa9I>?q<@R<>Dwla+0zQ^;q1?$D?m
zn3=`y$B)`5pH8N8c%#-zOt}r81xTd(&})Bl%*;>WxumjSSML(M`i&EKxDjv at Y!oap
z#No`Ad`2(MyToV-;T2<qEdX|@v;^sJI~Rbw;8&wR3EYYsd)Q at 6Ytf4Xj+4yo;A9 at 1
zCR=-DEH602H|pw4Q}`L2Z;7Xqa(L(d1a>q}^7DC=M}88m#qf>sThsA=ZL8W?-Yu6q
z=}gj>n^O%d!$$ntM6m>U&{Ll|lw!1twyFnCIqJupwi-QR^1IZRY*nUugJ{B at Dt>JY
zXVi3g<|!GHJui7mYEC~R%ds0RmFeCdwjbTCw#iL+pWHGOug6h1Yabpwn`a8|J-!FI
z#y?|i_J4t1HQQu9)noFv`aL)uVJkSd>86}GpH67WWfNE~?u|}h%h^$OlKq{XXFYWp
zrVLZ1p~~=_fm|7;{mM7P)C5;IQ+2kRjrwr1UcUnQG=+a(osIt&$20vh9`Y7KZs8$y
zJmdwun2YgAzp#4vDLwK~g4oXkE|Toh1ToEhe(%%Hl(xTjP7xVO7r-1IH&^j*z|V-E
z3BE7mi}#{!PvaYh?<#yPXpJxNwTh#qWN88 at _OHIJdN^KzZ?(OESKwQ1Pr6y$gYX}?
z8##_E4I26P9 at O4<@a at I(SX-T4HKs~G*~E+zUU+w=MDRjsZhT}mV&LSPsYVRozd>xq
z{}Y)ef56LXVXs8AIoVxzIal(0>vrEBnpUgpyb>ii|4ywqIy6H{cDLR(Moh!|K6V}X
z2AnAs6)2<5(}iU??d+LY{9WQ`z|V1v!5WMwoGA}Js9+pxhp|$F(Mf}`$(i!hQ!<9`
zGhjGkX_RpcC#A9UyawYAXUfYjD;T at mVNB9se4)W8a;CiXmW-ia8k!JG;R=-cI!?by
z6ML*P<@j+Wc7-N(pIGeYHL)|DDgXSZ65Fqd9T$uJkS2C_DUE8J;#X&Z4~*5>_%~G#
z$G^FH1pecgLAM-V3%+;bYsL2-eB<$5fo}r7_u`v~?|t|t;d?*6$@q%+rr_(t*M at I7
zzMb$T&g+b?gl`voSL2(C?;3o&;=2~#ZunN<+a2F^`1ZheJ-(OVy8+*x_*UY3DZVT5
z?L{0MnuHn3Yv at 6(DdXUJTMFde7xw2E9_&=v=x$Be?p<R35&n(5Pdx+If$D7PPi#N+
zc))eUYj}Gm&3S9v-`(f;FgkSzpP3%?sLr<%ZyuY^TXi<I)2-jhb;-Q&zYTG}zaZ{)
znz)~9;ug|Lx(ni7sfnw!Kc_nu?_4eRq{-=D%|tukGQehXqxYlS$jR^Id`ouZWC&rn
zQpfpuj#>A9?(@4ZBMMP$!08uJ*o6EG?ep~ZSDHNCujc>lA9H)dE-%%KO}tyJo44PW
zl4T6!s4STH#Pi1zbCcE&a<|3 at gC>$b@&5>#AS3i4eHHtfkwuhh0V8T+wJu=H>t^p6
z6!OgWo_TnSIe4wNhb6Z<Kd)QQkE$K`|G0V#{y(X9;{Vg?vH1V2+J*n))#LF0Im0>$
z-!H23b9??!1&pp=_o_5V>3NgB9+Efr>t4Ixs`^OGKRN$Q{1al%e5>^dU(WmrOJ#o5
zmf#PS{j0`T>M=I_%gxLcPS#e1dW_ta&flMBe)G0YRVf%%1YbTMg-Y<Q>6n3Ma{ETE
zpRqkIvSXW&ZWE at ZuWYN(@AOG5&pfn5Vs19_uYYq2w~Jj)UxN{&Q^7fDcg_<vO!z(*
z=jn{`seMkKI^8Ka^yH~CmlvJ&T^)>vYe3Q2^4|naaHSWWUG?<oK9UY}8gr92WLN5P
zQ#R1+>3_y6HI}9X$>PL-=(LwQgzU#Knk5|x#tEg58FO!4oVYNtd37doLAHP}L(&_k
zvRICH-mJ~9B%I3F`DB$YZ@|!!(^ty*T<uiP{qcMTkk3IU1C%=*<ugFJ(^EbJXL=Q#
zH9UR#lHA_w->OW{O<VsKG*o{UvINVKc*>y#Ib3{i81<TTchDUESMF$@yT^I%#BF3@
zNN*IxDNROtDJE!mVBof$xg!Rilxy*|v^~A5bSK3#mx7DlrW#oPHm`x~fTbxBr?jIf
ztO)-NDU7FAyTgA|(s-RtS1I$v8*|fEzG!63idUXq;A7UiG)q9;_RdY{wnWmkiJ0#U
zKfXu)Z*%(6#gmzRhWsh>mL9v#`Wz*@m}3DR{$V3^uu=9gR>Ym$EFq;T&|D^z<X$>0
zTg<K~%k91WWYtHxN!w2cySiC?7_*!&s{-I|W96ZpFI*7wFFfWMfh7u$`8p31Ep;S?
zt(ngay*#gM=;b-EFO_Q;_{vH98N()BRX(VGoWo4I8F-ghV0vRctQ}9 at g?tR!2 at 4Cg
zW89HDPC-l8dslXDmw~TTv6H$phCS9QhCBh!r=ypM1Y5bD at WUzfad`Eu&kP%j(?hbC
zF%}n2LFyLt<akhe9lu~+_0Y=^YSpKS7JBiw-rDvWdVpO#A?n1w;z7iDv#GOKlDl`?
zn|a9-2jz6BWI47(OJ%7y$M|Dj*~Bc=vw31Ry{z8*JaU>!^*v$%THG9<8CyQAPKiMi
zxnOMx1Av&{Ci3|fZcA)f<h5AcxkEQBIORN at 2OMLjc}la)pKHI&8Cb!DZ+JiIHt1^q
zx at k<8L#IT;-D|9pE_f;V=x>Yp=!2cf$M9s##}KrVkMU&8hrx1;4LxiTrCq7>T8w6z
z%PdSh2 at 79x2+rae{a2JReO%2Ik`cZ9UYx5PbewENb;|5E^j_3sO4U5PzrK}hXSrLg
zbYj_v@*Q+paW0S<*P)CD+r+%&q01$EjiY8vjnjtp9)9Vaq1kcT*e&>W4rNGgd^-Wo
ztyx{O7Va)Gw{|%S37UuB%{a0CIqxI4<Bi7Tp^qVM#C`tFVPru|3?N^Z<=sEoe_e@?
zO0$0O$|LT`?Z<<r9K$XK*C*6AeOe_`Zpxa=g7I!Pd}EUlGxzgfeL++aLjQO-kIe*z
zrOlt4wDvyeaC&2A-8iEYGdAK*!9N4QyRFGqJsk4-kziugo`dnQA$I<sb?{%*WUL+m
z|3|5BQBQ2sIhl1PMx8j=#W;WIsHUXMu6}w2H_mITH943qA&CFfgdk?F7^^RD^R<=w
z?8<C04ljbmJC|D51ry-1z;#p5jQ>NJZ7#J|Q;&{3i_!ks$d0^MBDe3lzsf4*Q(BX^
zG34}8)|5mk(G7+m?qBpg-(-?u*`~MoOxuYzofuG3Gas`cucg8GV{!PFASGs9fRvbZ
zel-6*KWwrRg*Px$PUzj{!+&arIo=n`vBY!yDbMjAd5)jqIj%&GZ at MtYJ)gKB$9vo7
z*u--zYwIab$lFY+*Pa`iY)UD3{;IAFSimb|f+jn1JJ}TZ5iz~7QrzCuThj_DReb_R
zj5rZook8rXZh>U9MI>@<Fup2T2^qyhjKQ;@Gd4!Y^Ka<PZb!$Xp+j#%$5qL6TroOB
z{tca(?dVKy^TqNrK1v6*k9%G2a}gg_8|NbBR4#Cq(Nn@~d#*ZV!Yr>4J0W}|t{jvT
zC*owgymm8Z2*vlXyl(6qaXtGUt{?FIPKw8W2vBSA+J6 at +>4TSJ4N17 at Q5swm;Yx;J
zFABr&drn)Xo5;gV!Q_7%25W=%WW;LC1Qi=@bmQBKZxz1h@!g5<Ied5F`vblY;`=?m
z58?YAzQ1krZ)0tc{wrpZMXNS3b8^owGBHca%bWCA)kNeab5dPSzG%tmq_dK=GyjNJ
z743PGdw#U0-{_?9S9v!_Sk7=G+f^yHh}G$Mm9Xkl$I{o9IXoh)>tEHc!jdz5owYLG
zJIMTFWnXCJ{*h^(q^ojFPG!j$S61eA0|Xg4c~`*Xut^C7(`?V(YS|JnNO8e<(gWai
zM}uSv8c$haHwrcq$ubyjIN(Qe?58ZmzB^zcd0=^R6IRpDWCc?=p7o3|Gud-{(3IE5
zb5jmh|IcJSmbJ<7Oio_|V|*Qo)F6TX7klpl7ge?PkFVh-Fu;t8h+wiMn6Qw6fdpj0
zVHiLPWf%s~5k-UnEfof4#LCN{sHEtip?1ntOwGbf@>-`7FOlX2D at VFmUQ;?*GIALt
zg#UN#85BFG-uJw}|L^^O`hU*om*-jcXFcm#m%a90d&f?+>+PnRpZF@)23xTj9Mb#l
z&a$^8m{mN=1wG1`Xp9)6d$kp at 6*-kQ<xGUcj(lnt5o_mYw2g=@XLk%7%-B_+DR(;t
z6U2#`&|4WZwRbjl6v%PA2;XuV*VnSUV2`-?Mm=m{;;VEeyVnV}EkGZ7ZK4fFMf(z+
zx4|oYaSc??RNG+Q9Rz-G*Lap6ycgru$!CKwo}F}AMq=K;>h;}UhGUF4zpNr=Veeji
z*@B@`?_F6=Dq_)wBqEkLTH3Hupz`!=H~tt=V8?Iaw3gppYFbiJ5AB`0Yg^&a<KBv!
z+QA+sn+n?qhh<K5H^kw#j5rbrar9WtiLh;PQtA04BzBIDEoDi)=B$Vz48P8~I(fq>
zxjV6w at b%&44pND}q^!2wCH91!V}xJLz_Jt43wS#SV{8b at A3fscrxRPr%{3>=?KbX}
zPWR-<Us>FXoWiAcdOxfr21zi>(;CBXwAF7g^&5A#m#%*XFWapjF16cVQup~X(y}z>
z+=Ttt9nf>@${k`p?zt`9PfDbAVSX`h^!j0}A1~ntkP0Ug-crAeiTQQH1>Y3?AXSBJ
ze2m+K?GcP0f3LG7*pG}Hs2>!u(|=&a+PlkISG1KwAF*xNZK|-7N&@_r&y+}$H&j<|
zNNpWZQ5KQt at 8m1g4`yQZgNBUL<6^+H>@H0aaM#YBx^1LPfS<`;!b$ds33^sm!HMAb
z<7_2#7#uJU<?fFd<BwJ5D?5x)k%PDMBmB4XE7nHr at gI118C$YlzmmsGq~qC=TR13L
zVktQyZaaU7 at L|aVen!dE{h;LW9u*vuO$6ETpj?w}L<~yxd1c4yk*X^8bmfAi-i`%U
zjY}*V at 6f_cwN2fFS94O&5tquFIEg9m;)}V0#poxG^<2?QA{aeuPtNzdo6%!?doa4t
zejMcB`8TZS)ZO}(oSt$yhv at 0P47Hsen`teCX?BqL^j?(`J9>S`+hB{HFrCiey}Qef
z-cLO_s2sh!x3bF_e^+-6#oskpUxa}gKx09xmg&n}U<s9~dVBkbAA;##(s{hhGJh+n
zJX&=$!me&$#E_7I5&m at pH?~wBl at xg5Dy{eLyMwO}Xm*y{5sok3BNQ=|<D}G+USo&q
zyxgwL6?y1M${UdznQIlz1L*irSr##1pp&sv-at62lMbi5uUN*SpMq&^@4vUkzMR>J
zx{<ADPrIbfhH|=+$9}29Q8(J=M%QweQ+60N#v5(%*H8L5DFGKW;X>aT4i#~6j&Tc-
z;p~<jJ+}oZ7tpnBw<M{zy$-X~J%?Y*m~x!D^0|6V at RJAJS2op2Z7XyeBpaNsI5l%$
z<!!Km at 7Gka*O$lS`~1*dzp={LOt0vWhXHfkJ^P>Q{SoK5iljS(9=XA5#y+3J-*0e#
zqV8AfZM*ESn&N at qW3;2AsQstF`FiY+IPAju6>qq6*bW+Oq&{0zj_KGJbSSNN?BW<H
zx8a6sbEnb1+y(q<Bb9QsVlZ*J!Zh>2=hnO8Z+V3SE9t`D@$)Nfkuw9|63~$-x4Paf
zX2j^xL2jdka;CQ(tJvMR3LK5lAfpRHMj(XQR0;pB at E-wxAEZ`6s)0cQpQ|wfpC9PH
zab>K6-+Ng)*s){-tz}}j9@<UE42S0%U`OxtxFqoLW at G-UzzPOE;%kfR<*!*+lf_k0
z&blsITq}ZEm(k){c8PUeu(--ASl3q;*U~W7^`*sCc7=6)VR7jzS=V{EhD_ocB3M_W
z#kKkd>pEv~RaUXCvliDXG3z>GalPEkx=veM71b5E=6&UJT$g0vd5 at K1?h_wdS9ei}
zF?14t=?&EJ7T)EI?-<*ZBkoPOe*$f`_}N_n|D%Ps)q}rb_1_Kty461!{51=2GaLL>
zE588z6)QjA7-=bS#mt8#IyfT6?@DycgP*m;0e0Z6B{~L!x0dK|9=x?g`xfxl5*-M5
zYl-&VSPu+>`!e2;HwpJ1E`UE_<xhaWWRc8X2L2oR1P!$Fk;TvPB>eD1C*CgUAdjHu
ztSpqSKkR?*TjeL2y9z7$*yT2N6<EqzchZsqJJ`2l9K5~(y#e|i=(nKXgPsSyj4K*?
zLW at DlXXt9P>)HOR&6vl!zupwqB~R)+kt`p~xrEYVLSzvm%kZWLFGkO<w&ZD?O?rPe
zB=6CXAiP}wE4cZf63`bw$AP{G8Uy+gXf)^oP%-GjAiQ}1bP?zh(8Zu-pn6a}Xc_2Y
z&?TUYK$n6p1T6<$0J;qHCD7%dFM_TBeF3xrbUx_IprxQILFa+40 at Z<5f);|V2AvDK
z26PUn0dzKK73lMzYeAm_T?aY~^cB#Vpw(EZ{*P9+^1(Jm(A&cM0WlNq^JAjBJ0l)1
zWAz&0%i#>dS$m5<!3|Y8y0ktRlO0{$yZC#;_B>tA+cRcQI9leTa*3C(o>NY~xsRDk
zzo%qR$Q}{9N;Th`M%(pXcK>$mm(z$xa!TV|lG}2+%Neghdd}B9v~B+=_cydLuH9eL
z`xiTR?a}Xidr#TUclIpVSzEb%&(cb}Z#t~@5)>kH4%TxbLi$$c at ZW@52ZiK4>W|&;
z`Sg7heRDINFEB^v!T$yLOF&-)9S8anXbk8A&}h(wpkmNP^xYMpi$Rxw>Ospu%Ru#@
zOF$QcE(Ki#S`NApbQ$OZ(B+^nfvy035tP1P_XW_GLFa?61T6(!1v(G35>yAe8nh5}
z4d`4 at 1Lz#kD$v=WYeAm}T?hIc=qsSJK&wG#g081mQJ@>>brR at C&`waSyNMYTYZcM~
z`Wk3E=<A?u@?6$>Cct{4VLgv^cRD|g%_Coqlg;CVS`MW{BbYMws>r34?&Q#G^<O-(
zGPss>&-NYc|6QuLPwMTICJ~#PNxj{XSRD?<wT29#8<KkO8IpRt2xh7uVmwA?mt(b+
z)cNg=q<ePp{p`nqo-{8Xxktk0<`m at M)r=i7XX?9?(A;~D&|UI!?AzhVJ(Nh}owO~l
z$JgYileQ#tX&P!G!P?$jI&q}~u5#LN-EQ7~>SSm6QOtywvWOnn at dsXQpx5)}?T6WN
z*mvO5Qc;&TlkVBvhQzO8ht#^mjXQR;P at kz7BeBOsp2P}rbJ9HycI`P&v*~Sd?tC_^
z5V9bSlwReGejC_ at d$m8|jUqlP7Gk&AZY#bTz#+Sa#CTx$5AVsSw82|4q*zncmy@!k
zWqC0kKF5=KpD)67-hp~MoN3=@^stV}j!9(HjCvRR%{4mVZx(hh$f&91<tOcpw&hEp
zk)^6#_)ftF+(XXyxfbL=wFBN^v>)g-#HlY6=m#i0^u0;}=~X_h$JIy6V at Tr=gEUx2
zVP_fdsfg7dE%UYPI_R$_bq;Jf$uH+f_?|ACUzQL*mmZs*%$@|gv(S?u;cs`_Gaspr
z(v?@sm)L0&VGZqpU0LilvwkNZ_3N_3%!By>v&D7x?-k5I10dh2awq&{=NO;UbO(`n
z3^gEl_GAEZXcK$$-YB=jE)k!!usojbWO!mOZwpJkc{S7;;C at p^Z100^Di<K$W^h}}
z?eKS-jL#wP*<S7l*A8&IK;MS19Q at AmWbsqHx4^vv-&(pl$I9sdG=Eh5Siv{2E)IRP
zxyoq+59RS8-4l=w&yv`}hUl)G)i(g`{8NzqmO%Q(3ha|&Wog7+Z8nY#B%~=xIVqQ*
zuAhm8E53^nFp+rUvja00>ofQ=QRp3~Heq+g=W~o#rz at bzO}N9u499bzkM+5H&U7(Y
zLwfj}MZ9y!=gj|^u9hW;Yc0B3=Ev&kb>6oBj;_k<skX|miVIi#L%ev!sd8sAZ^h?b
ze$c{cxKBd5Ps_(b&IZIdE93hRgj at ubAop(&dVblAn1eoFlw(K8=gXLRK3^eT)3T*8
z4L%oOk4E at hTs9zPxsMsz!A`1Ar)9O_a}VnW-1k_~5Ho at vQDhwPF7wKy&Ld}H<}tQ0
zI~lu}4UE0`dEWQsK9KM-@~THUM`I2$197G0zzps}-(cKh8kiw5`OHwdvSB>Ic>&&t
zT?MQK)&Z{o)xdh>i=M(j9)?S;m2p97u1Mhqi~xK91{ewW0*?cJfIlDrgg`J50*HW6
zAPjjt2|UGGK_L1cMgzT17e+=yinZt4%Lpe4*J^|lk2{*Oq)xuz<kRSZw(ABY_1=jj
z<MbTd-yj?AZ1|Q4^)^b5o{?0&>a^j#4TT%XhG#actEbN$)GMd!nT>mUd>U+Jg>Y#I
zv$3<+ at R_Y_ac_NZ6Gk<>Nd|ud=@Sq{c+0oh7URN=?ql7y<xH1kuMH%^lPAaKL5_&N
zT}j^6lf&p(fc?-R at Sm_(N_Sd$7f-su*RdYE>kNVY+oF%qdj)hvI^MlBW}+vN;PqoQ
z>fVXpj4dCDF~ddt*m9emgrlL|n6Cp4m-*_i$INBK^@Fir&)FcM_qUdFB3>EbgfZF1
zjv+h=zPhm?eRu4xquodM;!Ysx?Tblc(b&I_`S#Hk#N+sM;~CJHX^=pnm(<LG1foYI
zc*-h)wCr*H4ORxXzMN^UwA_d{2RQ9M`ZmW}^0D8C52_*@S{jW9$!^jTF&cK>zmU|~
zvl8<N_6fRUS*f?9wtG(6Q_0Ae-570F20|P9{fPbH$Mx+rR6GZMxdiJCg5A-8J)o{N
zCc9T~Q8TjMri<YZCOkI%`=8;S)b~%Y`OYVg6P_x7|0R8sR#N9DTa0J&+@>!J$_Ut#
zY*Wt_Peq<KdOg8g6=<G#D%R%v&9wAS2T6jf^<<>pC7F?MsVp=OpQCsA+CI-MN3Gvx
zyhF!F>|W#t?2%}z95?P=CTSSVO1_Wp7(q7KMDTaRT0T5;65pCx8CaI^@^qrsyBL2B
z@<46ilRUlNIY<z&=hZ|$qj!nf5U|JSEZG{MC;r66;>TZ4TyTHFsp1MrgCxp&JCq%d
z-a#tk^6^fSq|Vi0^xg^9Eme?4QjTXlgXRSs*4J<BYz!=mNiyHP9c2GYa=m at bJW>^-
z`z1LD^k#GO&=@yzA);yoo~|m&j2S`pN080fZzWax6X2?jV3s&n(%tH+LxS%5a$Iv2
zxQG`QaP!=@+tW9}1ROr)8{|Q%){MkCg8=MNS2Yig2||vk4mMxAVLg<M{P#yN4%p*B
zZo~oaF~5r)+j7`1a`Lg{gy*MF0(N#C%YEVJf-ts(`k`W1{b<#IUfd7FOt&?u^Mh@`
z2lcpjMAOq$eR1iY2`n7X-bwivtWWG;0+llZ_*)f7Jz<w(zb|O|L0 at QyQ_k>lFU0yL
zrE~NO<EHDxyS5_i`VYqa_u+j{Y<<uBoHNm3qQglt(cw8FVR<`_7hIc(r965fU{@@(
zV8(d_Jb7h{?-!8{EAI^c9=)%NCx+iup{pXC$Qeg`RffLbgMLj$%I^e4_#3~=uicV|
zO*8Unv+~#2{P?!?39n1QnLkK#4)Lt=*qo$kj6;4GvoFUF5NegyW*_)YJZ(#*m8)<=
z5+%G1{`KFb?aTRf#P7>zJuSsjQyW)HO>KBcd;fQ7`^v)i#z<ccOD*M6E!kvR(@qAT
zh%r>zH at 3Ql;`=o-*wNMJCT1<tg{Rw8miAh9=3#qz;Q+*DJ7Tlh?l#$DOZkg7G4RW$
zBcLO6PuMT`^nJ;PbI_MQ$w}J~C5mt#)^RKD2(n+1!LBK1GA%!;)1~dC11)<UR%ZnB
zFK1exTrRizg>=A@%oeM%aS0MYvkY4+2c*cg=G173zhNkHqIYfXVLeaZw&aK}JrV3)
zaNI$mx!Wq-y$5Z6C^tQ&VzHSPM?8bH<PW8N<0QRrk1ug}a#2eABk~#^32TD{?G}kS
z`yg?fMPkmo{Un};H%P8!HP6ZnnO6Q`$<zC3gX)RZADsnV(jF-nWBG$}OHr=bTCS#F
zxnuuXQ}!uT8}uzvmgiz^h?U3lvNlv}ssAJy+fpcha6id99?^)yBa%^#v{^Os<ij at P
z_&t=2`->&TI$O3CJCUN(h$k=ElL7qx?bYdIX|IRvM%`3)E2Z|AM#q9(X_R(Sn$Eh@
zDTO;7Eq(K!YGt)c?yi2ddc-cdum4l6td>cRJZxw3LBCopd9+r2A++_l+J9~f4wp*R
z-)iyXu%nH8|N8f at cmI~68biHi{!_iIt;H4hs~2sp2X at 32K2k4gM;+)v>8Mk?Du9#P
zCpBdD`jh&&{H{Lqxs(61`k)`%4tiL3OB?^bZP_)f<KAZ>b=MmEn at -K~mJw`aRsZ|U
zp3}A3iO$+5#q_DCk#<C%n@<K1<LLe_dgW~Nd(_8<7`-3$u_f3C=$FSNf_pAbkNV&Q
z5=!VU!!uTV@=gN5nKoh*i0Ac29%K>*IuLMA;>q=a!KCuZT~gT~GJRJZR<BH@?=D#a
z|8b^r)UNo1L7c6XA-fV120gyDGICd9!XV-FN?$yK at 0c(sn5m at i({f61Ck*lm2k)HV
z&Zj(mLl!r|9eIhsxg at yzZ)M}UCb$RFa0b3^3GR~Vl_SCN65QoX<rCoe3GPKSJP!Q8
z1o!f-Z1|uA_pMB&0DglL+_y2TpL>EQVJf5HHzdImlF)oS5<H8hv-u27 at F0BTqlK?$
zf(JwSK=8v7Jc22YbC<*`!9zlMS_kh04}8yW6u99D9 at F`ik>DOn at F?O}27nup;8D-7
zd=i{bg2&k^r1=m$lQ7tpU+E8SBwhF7eSKr_eplC*@NQoG4f~$H-_F4f?*OB3YNKx>
zW4~!c-vJhqfCWq6o58AFkwXaUE4SlY&s>FI?H`ihWBvLQ&W|<IlURslyEq|$*GtC{
zoE%+ at RD-SGb}K;mU|hTp#y6qZQ-?SaOW&wQ{g(FZOo*>1><PA|$a!gk#J(PHBX|oZ
z)Tnzf-pJsD_2y!nViUn{Fix6JlEo&_ciz$WeC>6I+m7Lkp9GtA2SxaleqmGKUStWg
zU1Z^H5U-CXl72kXkGJc`+gNxqoqa<?3ws)EI_fuF7KpcsS<Z#P&0$b?oH^q#2+OqS
z0dL6Ta}sfe!WRCC;Oh~ep0lV&oT#32GX5db(}=T2QPiCfTuKm^=J^S920xCI^(^Zt
zq`^s3j#E!Y5A+FM&T+!~2*=S=oH$L56M?LsTfPEkUlsaOaJwOnTW<zEy=~<!@u>gc
ze(?rVw>6%Hx5T5oXTNx!)NPGt;VtnfKcZi}5!BtYhqfVS1lnc<WX^`nBOt#+KK}^n
zw|qO?us{yi;$9X8Hy3VxKQ|xlA^qG#tWUfqBnb3WPm7@^$6X0q6Y}{6%+2LwR|2%?
zNxueYJ?rWTw-_-y5pyOqDyHu036g<!2dpkn><QvLEqk_yjZM$aSi_v at +6TO|JeEw~
zpO at fMZ#k1Vjjs3U85-Kg2mNTCQvOGlR1Arf`Pj1W0o+f|14SYf`LOTRa|Ry|Y3La^
zdX^|2?kwy1<OsO4VDFv}&tN8u#F<k1#y`)k%VooQktaQSL+dN$pP_Vlf={>g?SMG@
z10VK!#LkY8W$PR_5Zd#*24M$uSUJ7h=}C9_Mh}${5)A4=uiQot0o<|Ac5?%DIpgWf
z>nriR(CES7uCd%8a93GwAh;_m#|L-$HI#rfyiIuGd9<6HeZG0LYbCB_N4v1kA9A|{
z2*EDRXvcC_Jjc2eC7%afA|tK at v`of3PpKYPR$Pz8R4&j(*gd4a3uQR90=fWKfLxE4
zfER%mfcZcvFb~iH+HQR;qqj}K)E+yEZ&Q7=Iw_WO#VHnNpQ^W1^HOZc=qaQ(yyvZy
zK_q4hAKVjC4w*HH(Q_n>-s^_sC)?_^hBEo2-X$+DOBq1IvpPv{v%h>K(Px>6{$+zC
zm2uiQ`?dAeYu6=79J3sIhDykI?4llXe081FL<X!fNJffXj9(yc5B(rxTe7cY&{6&r
z&tAJ^8;NVefKFm;u5ZILx-E$No`fK7eFCqW7%wY42?t*uWSW0e$n{Jt$K6FT(#{nU
z+hJt0k*5-UwvC<`|Gqx<Q-6u*3g%F3Q8IcPiFB*uaW_?Pue&^Csa|3uca#hYcIwHL
z;5>Ct_V=5mgUEo_zL7}nT-J{?-Z^0>Lpq$lmk%I4LOhiZ%UDN(f`mmm+T5AK+`>6?
z3g-$-UMR_CJ+dtx*>iGrLAitk1ZZ<gp3m04P^89_JxuT at Mj&AN`H7hcv6HgnQqr=O
zv1!j{PfVXMY83V>NSZP>?%DW>XjUB7pRWxSrIpIGx!NE`U0m$^J3s0kJvuWXZE_k@
zqMpsfDaJCv^Ftzn#{>sQh6OSu+8nK}q`$W)B#xO~SXe}ZinXIhJCg^gX;S~-i1~p`
zM$YU$hx7k5fA!ovnmZxV#6I!*^88%^593UTOSj7UFXV_znK&_NVuB);NmD9f<$svj
z!+0}L_1xk=iuf>IVSYZ7S2!nU)?9`rnVB=UVC2Y=7TrFK^*jBBghu=;{f0ap{5$<V
zlEWVeGkWwRvHCaIe^t%{Jtt%`dFmOu0wyg*{;+ikdBooun}e}}Lu>&0m;R$ZHmt85
z!GSOKpDq5POCii2)E?A*2qE~2GRXs!fDG^h!ho&U2-yYf1svP3 at doe#cfb=E4lsZp
z5C8-M!9bXu0}gHC837=f;{a>GWi?;}*aCKdJ%FDc|JM>yQKcsV%gcZzz*3+bSOzQy
zRsa>i%YdGYUs(p=8hzzbpd45REC*HqIGMfjWq at W}1}p)V0_DImU^%b?r~qCDRsySl
zN?<jx1~33fUxxH$NMDBZWk_F!^kqn2hV*4fUxxH$NMDBZWk_F!^kqn2hV*3|-8{l6
zoliI~yhu1NEg+nQiwFlNxH!m>v$ULWmMtfo6%~Z@@=C&4RY^Fj*AR{YTeWM~5zZ^s
zgtLAF;cR at BaQ^lhc7Qfve`+(~Y}raUHQNa1&FzG<V<+L at lnUqVcL=9;H}<#o5YBsh
zakz$0h60|zaNscjtp@$`p?@6i0_*^LzyTNlI08<9Gr$F009U{b-~j`HLBL?Z9T);&
z;ZBADUVt|+0`LK7StH9Kh18RnfAA(Bn at 12i9bB_Z)Y@$Id at V-S*>iKUbLMJk_e+|X
z5u2POW8#x1#xfI9WburD9_^+?7ZN*H8>cOvJ;gt7Dw7xzW~F1SG{j1urW7e2mXS9j
zFE at KeQGRwo(X7JkTx8LgXOwz=Q8pbEvWwN~x!U3vm;nF0Q4B_gkt1oDQL~Gp{V`aU
zSja3b>r&5S$t>!LI1?u%SqI^046gGTq|1~k1GI(A#K=(?doBF<!V)c9gp7|%ewN9l
z1CW|QoVkTe?(F9g5G$7oW5-L`;YmAdj=E5%W$P`Em1V~#O;l1xk}P=wg9&Mtwve4C
z`r at -*YSxS7<mReNN*G1#1Uj2o;zcDZFk%%jxrK9)ayBbxfRZJwOi^+=WBf_DB|TLR
zn~2I{P4lQ<H2uZtO0<P at X1%D+V`S1qCOuZ6WRj7)R9!G at E*pbQ|EF=|=jK^sM*XXJ
zvh)e^|8AZS;y%n%96u>8Uam|^nHa;MDnyJnq+B3_nJm~!Lnxh<7me^)d9&3t9^56x
z at Bl5=uyi(cQg=}<>sHUpVQEPzO&Q1(;eibrUL>-{qiY4q!jBrCmgS?=)O)Od$pcfH
zgSNAn9yRCD^bf-N at w5IV55@M`?7uKps&?|g=EpM6>E;wM`Nf5EAWE*fNIR==t}}_U
z8vFlTf<GuDx3DBTr=&z(Y_V(Ss42y2+V^J7Ent*6#RY0Dqkx4J&Yenf3yalxRJa+s
z{CssWw9e$~X3q|w{cDu9Z#qXQ3$;13Vbj*Qw9~NG8OT^dCd5w=#wi#!qY{`S8%Ug^
z9;CobiTXz66cjLXb#s_#3=4rwuCBNkV*z!c=OYT5!I|py&we!gp%NLkH5vaBs_>|&
zDRkn;@@?uvS=p5t6BI<#vG)CM{h`^CsMPfM^mvSy2`LZU41Q at zs(6Nx$HzX)FmdS$
z1uKJpuH|1UgF4b!eScAZ>SPv-9?hgF;uuDjrev527=RgBtTL8ilt~lfE%`r)*O!)h
zusl2Lfwjc at x2nQMrs{<p#c2H!t-6?18&L$ML4$O?I^U9SER#1&jgfO!5d-mZX3Q-t
zo`d$svYU+(6;P5pQ=OMRYi at pFHU=t-%Q9kHcvk7rRLrOV^xp?DDgQ_D)U)PlA4Fsw
zmi4yP(0-pW>LHFzON&=1*?}dHDW<~$8L5zFC!{AQgGIm3DJi!0d;b#Dn-1#PvUp{D
zoH83123Qy}F!YGX;ILp>C at v}bDu}d?#KoB17i965D^ir%Ns83$U`AU!tDwL#A^a{Z
z<WIsxe-ak at Ct+cK687{XVRTlCjf;y<OJm{{iWCI{ahbHfD;QesVEmpA>sRflB+Pk=
zlnIPn#-t_7`;uD}2FrL5Zpkp#GX2Ho<rULuFeN`9%M5l&4l}aEg$#e17s9Q=p>Opy
zhefW4ht2UIum485blRp>|AS&lR9}QYDEI09`gk<%pVt?o&YzZR4gaHJ`&E}jJreg%
zi$&b=u?mb$|3$SQw#Od`5XK77Zw%;{?;l$PY~s;)|BV(x8oHQLS{7c`t1L at T#FX=(
zqoEIq#bQP|Q(dfPN at f=7X6G?8)QpH7*)20o{;b*Rk|0FEq*XXqP3JEE`9VxfObqN#
z#$LU}J+%5h%S8EDD`nG=U}iLfMI&7tP7DcV*s-xMEaYJrT~Iy}CPLUutR?#vmk(B!
z{qhb)oIhA-J}5s7ar!MfANbS!A1*-I!R0~N7 at Dtj@!D at O8WlS!iIL)Z+q!0jUbX66
zEi;nAjtZTxE!C&1Co4B6ht2?2M-Do%mCei1=2+QzIkRWwS^45pD}w^EXVOXD;-=$5
zpU%P|+rL;8M^U-v%_^LoL)SeF#(6BcbVb_#T1F(w?kAc;os$<3JW7~ZJWHz%2pQEU
z5nB^1Agyki$})Fk=N9)fsHn^YhTU6Ya&u?pKU}jv*n^r;kl$|u%DVGJh_mZ|QGtNm
zLfu^LSoVU(*_A3>J?Ej$on0R&-P!fg8accE>nb_BT3Y8poh%9eMWu3P&d8>D&c<>%
z+d3C9(U`5!f1;yf{7V8x1u`=94zv?>poJ2#{42qFuxKXMb4-5Dtl8L|p)08WFU*H_
zI$8&6RlgJeq5K$QXoSA`O`S&<LsY?*^~=M0#%IK0uD0f*rmG~HbVABRcJ{-SAg(To
z$@ruMQZh4#W=SvavgxX%FDwt26-Bv^coA%*Wm~Rsv4qwV!rBn7W9d~jb}5TyqpQ(P
zOPKXssGaU<&X}!JYYPjtGljUgEYfMMo18OqW(#w4+QRGt^<3c$Ei5G at JUb^mGF+5h
zR9GUEDzoK<rRw5rD5FHJ(W&R=s<YK|W at Y2T0h^%HC#@x&nQO_3eh7pg2RjH$$Y`>Z
zoG0a=%Rt{G3&_VLfP4aZju1I{kz-F@;t;Z!BPUW$0Ma-h&0|PYk2H at VO+C^SBaN3e
zO&HSHB8>!T!jQ%bX}Cx;+*;0XYdIREi9s4Z%31I)%CScpZ=}(q9B-u2qa2z>Y%Qns
zpVCzLSNd1^SNp%}zsY~A|91af{=5D6`tSEY?EjH}z5faSlm2J?&--8S|JwhO{}ulm
z{>}ck{agIo{5$=-{fWR%;3#kr at CEJyPr+~jBk&Uh2m%Gcf-pgZKrE05WP<U6WPx0u
z6igCi38oA31TzJ*1w{g_V7_310B`paR0t{sRf1~4tAb5}t%B`>U4q?$y at LIM!-9_l
z^@0<ElY%pX^MVV4uLXY{N&hMuy(IYSNcz{X(My6Wg1?TW?qV;ouQ)&)Bn}gg6-&kA
z#S_I!u}VBcJX1VZtQEf~ULvj#uMt;^UlVT=?-K73?-ze4J|;dXJ}15){#JZV+${c8
z+$Qc4+eAA?yG6T4dqw+32Sf)&heeN#mPU_{o*1o+Rz=T<o*6wiS{wah^pfa`=rz&R
z(XT~si{2HzCwhPMhtbEPPez}Mz7YLw^tI^b=wGATqPwDPVjN at KV%%fAVtiu)VuE7+
zI+A*cnFkt`JkaR$2O8Bs(CF3&8m)hz(JK!$N*-vGd7x3r1C369pi%t;jc$FQ(fS7(
zz4Ab#<bg&RR-<7te;r8~u|OQi+NeaFAWmj&bh<cSJe##qy?D8}lC{yT;+^8%tc})-
z8^mW=8@(dFDZb6xD2aB6c42Lli55f$vNkG-PKZusZFG8ce)MeCM)lFlqbpe(-5R|!
zdN*sM_0bK{XILA(5`8oJHfy7}6&~Zl+9(qvhzX1diy0g9*OAmiG+g8>5{LptBGDL;
zSR at rCh>}GLQHCf>G((gxnk_08%@ZvUEfFmjRf^V$Hi$NfwuyF%c8lH at 9Ta^eIwoom
zoe_O0x+uCNx+c0Qx-GgZ>JW8{Y(gDET|x(idV~%S^$it-28N14$ApSQrJ)I-$)SqS
zjL at vm8KL>1vqOtR=Y=i^T at t!Hv@&#E=!Vcuq1!@thVBl1KlEVeN1?|;8$!>7ei?c(
z^sgi7a1q05G?>+>gw?2=)#!9qqeZMn^{hs#SdDIFHM*D8Xg#aZ^Q=a%uo`V)HA+~G
z@>z{CtVV-bjY?RJ%2|z0XEj>HYE;i^w2IZ}R#u~XS&i1S8a)q<UJCu|NJ=&Oq=;&C
ztcYs#84=Z}N<=mKoQP`lMG at 8LN)grQYa*)AcSKa9ABw0(KNnGrek-CH{fCHZv`a)a
z>KsZn>J>^g`eZ28=-5!I(Pu)bMpdCyqtAs>jlLL4HM%mCYV@^Gs?m2ssYX8xr5gP_
zlxp<b&?}*T9ZC1cei(Z!_GIk&*o(10#NLR#9eX#nE0#zdrEXFW>2Rr^^hv2m8X=WP
z6QmQRN@<pKhV(gUk#xRvk#xDVQd%v2O}b6GOS)HjQ2L4Vg!GK`OX;`LE7E4^uhI at _
zx704qIc`v#XB-nJhzp7fixbC5<DQ9=$4!cx7MCA4J5C$-V%(Crinyw{4RM>}w#V&`
zdq3{Oxca!0ap&SL#$AfL5%-U{yK$XyME2K_^uySCX!IO3dI=i+2Q=CVjXFT1?$D?&
zG#U(z#z3RV(5MO;oe7Q3gGS4t(RI-1R%mn&H2M)V`Z+ZEH8gq?8f}9{ZJ<#;G&%wr
z4TMI=LZjoM(F|xb4;n3oM)lC>8fbJAH2MxSdKemQfJQGsqt~F(7HG65&O!Fqk+eRx
z0UEskjb4LBTcFXNSO=*KH0lM720)`@pivn#s(?nPL!)z{(FM at xN@(;|Xmlqux*r-n
z292JFMt^`tZ$qP9(5NFc>H&@VL8BsQR054oghsQV(dVGi`OxTcXtWv{-3E>Bg+ at Pt
zM$bT_-$J9!&}auVYA17%{dFYm2<i?ZLI<I<kS}x>dI?7e{e%I+AfZSYAruRx!USQm
zP%g|6s)W;pdBW#}bA?*reBmPD5 at Cg~Qn*gILAXh{Rk&05j&QGVzwkrhC&ClLlfrYt
zFNI$VFA1*+ZwhY<TZA3LE+GlF!<Wb0g585XgGU7W1_uNO28-}`mpE7woDlp>usm29
ztO}kMoEJPZcy4fU at ciHf!ApXd2UiAH1#bv`E%>h^>0d>oTZ8{Pk`kdEY}5 at l>Iob5
zg^dQnM#sQLC9u(FV53Ud=rq{qOxS2KY;*x^bUAFa3O4#0Y;-$pbPsIwFl_V~Z1fCl
z^dfBZ3T*Tru+cWyXphh?*bz252sSz#HY$LP2E#_j!bWAV(TT9pNwCowu+iDD(Rr{@
zJ#2I(Y_u9Sx*2bI`|C(5^DqpM4FiS)4B!Wh0)l`rU at Ra71O~3`DIgda14IKs2A(Vw
zhy-GRBw(b$N9GSa2?&9w4L&b=8^*op1NZ_ at 0D*>a3%m`_FYp0;fhT}K!}BS=hF4Mq
zz*9g75N>!S!Pn56AOM~M at EzTRa6_+b%O|-&A+Q*D1$Zyw-~JJ@?SJ9lfAsr*SIhs=
z?|=0BR~{dno8F8G4c!-W_RN`>{QR3SxLq`ER2FaCp2U&k49A`xr-^=MoO4s|I6RgM
ze*^q$#$A1JKm0$3|8 at 8i3F1qd-ee?KUksBVzT}<EHDA4x_s*A~Utn0Yj&gYI-1{$*
zcMb!iY6tZ9mpzX0{Rtot2mvC1XdoV#0AvC)fJlt_5 at 0-#3QPfH81s{XbYMC#8^D+^
zivpy;Gk_9vz*89agMl$XG!TzD0Av1w5Fi|g0TM6=jKR1c4a5TzfK1E*5g7N!0f~Sd
zP_c7Bwsj6z3c3aO?BAXOBL0`=fdA<C|LRQ3kded}ui5a!Ybylg2{MX2NuDBs1Q#_p
zJ%p_t at -!JkB1j~OBGF_Vkq{}7kp!ICeugBI6p~8PNCwWoPa)IDbdpQ*$t*IP6yk2|
zJn{lr$lf`vAeE$wRFl7vH&B<Iq?YU at 2gu)X*S3M2CSQ=R$q(cP`I+3sYrb%!mi(s=
z{&#!hfBNA6AI3O>9>~Ed3L6rRa~2giXVJ}`v2g%50KSe0bpmz92 at 5VJEf>HQz10o9
zlSk_C^g;yATFk^*ix!-<(BrJdGdOF(;H-rW&U8%2nGS+87X(j75In_z^EdeS82bAN
z<miJ`44$<ZiBfzK_Bh~&nEs#wNbv+>1%Rgq(w+pKLjHm56B`#WM%ZDLz}X!j1ie`V
zgp%J#7`cQ|gJ9ffL5)U3x-l3(?8#X0QQ*bkqakSwc at 85=9>$b8Bo-qCz7as;@QObf
zIZon{PXcKqiR2xOHF@~5L^*0zPo9N-l0he+<`YQ~Mj#hFAu=E1kS$Tbore6C7>CkP
zb_Qg~1nBAc$p}|LYg6FP0;U4ffNWqokb`n(kXMni2&MHBHQ9`@j7JJk+Du3=3;8~W
zc+Uf~q3t=4V=hn#cM)Q0fMTEo&?3DK^3H=+OQEm%kmUu$eGz56gwzYjVT_D{WD(Mq
z0n1VE6#&i#5u6PoE5WY<a5jkGY!F$4JPgoT6|7+`>b?&7uZK-+AUDZI;8nc- at NeWN
z@)}xxGvaT7Mz(_1AdhWm-5ucHM*F^l_O1iJA2<LU1P%dz2R_0xHT7uq6KKItVF?XL
z`x#p5B*IRiwx7dhPNSx0Amv%;<Q#O<h_Lg(7iiZnA<tLfF91g9`66tn3H;ZP`y24z
zLet+N&L#ML575u~Tn4Tn&#Q1>gBGsi37Z?x#E)qCo3MaeX#Hl$@)Pv<4_M~Uu*lnx
z at fTR-udv%YXa{QXCRqAiSbQt2y$yA2M{nssPcb9kPH62O+P at 3@Z$LM!^*-v*1N73K
z#KCDc&Prm#Ves`8d*Z+uM+R_wi8FXE-l*ULe;%GC!i)FFKwuCs7;p!M03MtzWGH7d
z@#LhCVVnv0GTbx7n=^(C=k$`t;6H-HBR-sD!f+zUNcj7529n27o*(BV at dq#9RFEe)
zGf4oal#BwN1fJsLlR#iJ5QK0c$B6`^tPoBW5rKvRVZhVC7|t*f&UunVa3mxW7z at 8B
zKnz3!F_3>8AORl>#BumU1{x2)1kgmzK{6gl0-gb$1(JaYz(gPgkOQfJ0!ZU<i4yXp
za~w$qXeP&*Oadk&FBQi`rf_UX7Uvx at l{1J;<BTWSz;w=0k^|Xh0J+E`4^RX7Kmjll
zm<2osJP*tU<^XenLe5xH#92x-$iEoS0`q|Rzze_vj+`vy*pWrx^=P+$=Qo~&`j00c
z&je<TC-qMPqVeR@=<(#su|Ujt&etD|w=vHdZ`0`v>>qD)&l6ZU-qvM1 at ZES@*Jpuq
z<89sG9vSM#tAgd)5<j~uc$Di32>=4^BqRukbvi<10N;-EFm}B!1>3bQuClA|-D=m{
zyVtJQN8;o|<WBX!@iCk-q-8P2)D{UwMmhS-Uhw#k3hit9DqEzn?Ops7D%uO^pROYE
zh$^yYY!&%DvWiR}S4B>O{}ng^cNSm+R3MJ^r+4q;I7I(yA8$kSfmR+e>ao0Me|YP<
zzTC>AE9&W7U{Bq8o3i21Im?&Zl=0!^K>c5aKL~mju_F%pus)t|;cel at iOw=lFqC(6
zuqmT)DX+KkcHqfCOFopvu%~xq8A2HF#D-la!iS@$aUllgsE0f{v_9DCkB<F-cf`AI
zsr)p)quoQEZ_i=tOa1xI79K^=SZw~3ckjm&j-#H|k&R>1kGJi|+gW&;3x+vX2Fgx{
z&S`z=uTRedSeN|*BBAp-+7&<Qm5pck at faxm*^qjRMD#&@x&|P82 at cqTUIFmypU&d*
zzxH=8)f;|$EfSKwmNv#GAg%tajUb%04^T^ep<PQjMr+H at T2~QUKfEi`swa9l6+a2v
zZYz~l&<2gE2l%AcS~$TtPu=f5a7$P>&eZn(sCb-y?qIn2yuMI6jX&zv|IXb)-B#Ja
zZl%tC<?m(P56j200p&f&{|2$CT3<zCfce0MgH>er`&DGqo+`5LTou`Wwu)@MP(?0+
z|8{p3IlQ at w=m8f%^+pvb-c&`td>wuKHS}>ng7}?h;Qvz<`MMVT=T#&F{%gSN!6$<k
zoU9^eK1H14RmAgX75U_oDw6k673uyE=@A|V1OYE@!P at KT0B<+;4<Va=sUm?uaCa5i
z+)+iuCZuh_7z4Zm>;$#}n}IKF){<R-$aXE6Xt$PJ;;tp#4r^hLmVZf at F=&(AzCnNA
z(%*Udi^E9S_b(2szTf|&X&OS;k`}-*YAtzAyq1g^ha=zrFa9JnFRQUqmiD`U=l8=e
zUvGQvUGXQft%s_Hoc*cMVd1WMPwm{W?D_}Vm6a#P*Dp^voh)*?y7jf^!?JgJ-u_kb
zqMxC5!NeNf)Kxbx4u4{_N>%lmu;7LFPvyR_S$}2L)|-mI9hjePqxiAh*Yh6#<x7Q4
zyU&00{BLv9W$(_pwAR=8>Y}xFt)oxXhh#@ASTrqYUe;?XOOyx8XZ at f$a&GaU&xVe!
z8|}V`|Jt;-;@3Y-(mS--hs*BXnUvD%9<l7C-7`OAMelzh>C^m+F6RwTes*tEY<RM1
z(aD_SbAo=!e&6YrbG+N at nru&at)8=sXPTDq-q3<8?-#Fjzp^prnUSYLS1o&H)VT#;
z^`1EMwS8!^UvSalbNRU;ks)~4DdcG$dL}bLp56%^VtJr{&^M`4t^Kl=<t6xwj~=r;
zJAC%_$Nqg!Pa|3Tjl3UUMbldSw^Dy=K5WOc at XQq&hxS2Rr+#v<V*-*t=&ur%x2Equ
zE)>xKYZ>~7{8q|Z`#M`(U%!8}k0aJ!>F1H6nmW(@<hAa%-kEWJRN5WQ*n6>ic0 at iS
zz36T}FmJ)UDL>zycUpW%xn7ml+R#`~^3iXno-4nzS31dWbWY~^6w#dxPbI9rNuJD@
zbUkNX_N39_H(nh)KCVpCWZwDhz;AZO&sh2oNB*ceYr@(JP10vfp7UFOj3aZ7?q0pn
zea~w at a1+;*+;^$FRpJ&j&*$i=)cWmp8ENZ#GBSRdqnNdA+vqPJ;~bn(vdsPL^=X$^
zIk?)`3MLkPG{R at 5YT%Nv81*;2H!7mLL=B67ZW(+|`s7K^lRIh-ngb`y_{8ni>UAGw
z4E`*$@%Dn4n#zi=)OUm4sLooq^n8;GbK$Me#~rF2dpJAolM}I;m8S-DKGQ^scbyn|
zHr*xUkaBtR+sc<Ufl7n<^c36En$J&}JB>}|j@@-X)oic(=DoHd0#WwRw$rjzKc9|Y
zb-J+P=ux-#em0w?*4=xrt?uhn7mjzB6x^mMLymW>sXfrSQ0@{M_<4!h+egzjS;cLh
zJh{PK at p(z<yW4s14@>*XL8B{Z4auC)9-X$YdBdcACpTpO{F^bPWV6KRmaaK)y2- at n
zHWgjqnTq&s)!tsb=D^3)AGIraw|1PUa6FW?rKerFrnEqw(%bINyLHITKhx>sqOSwp
zPx)M(s=ZsY?`3m*m*?wY3F_x`>57Xr@)pM(7YvR^nu<7 at EOnFD-_&26ozmRBeo}35
zysB|fYSvG;&MCj+pHnurw98MGc5FZ8=``i?m7dzhk~<lVL)$Z&N=)g;w`sDzYu98R
zx~f)|Ui5o+amS$rTY75ZU%r)?E^L at QRru-TX~GkevxUbePZA!RJXv^jvPxJ#c?!2l
zqoDOs*XY_N-Pn=AYda-<-TbD~&{j8Zz<qUQ-j!2{%i0&VYdTM5F1ue`s~UDFc}ou`
z{fF>UWq59?I($ZIet1r5LHP94>EVT`IpK3tXN1p5%?+R3o at wY!I+>?VI<>0JG%b7<
z+}%m1!A}a$1mBg^4qg?W4!$$V3|`h)a!MYa<{a{RY0-ttD at v77Ewrp7sfHWgr??$~
zy32RnYQIY~)gG0(ZRK@)YxBl>7w_w2+s1UcskA(*onsW<oU9i9I5}T<V{(D;`sC at t
zYm;+?S0~R9UYVTBHP>lZ+}|NHw7n at qJxiCht9=@8wog8E&6H)^QJeLiJuR<Y=~n7J
z<8^b<g{bC0{=TjnoubLxXVoE%?9^MPt(SL{xHrD_<8{w3by<oJ4rqTZ*F?KGdI=SW
zTt6<^c<!~k!b9C#+BGAD*OM*?uO?j-UMpI3d5KAKS!$An&(l?3R;<k%W3E#U{c(qO
zl{r+(?edZ}nCF&-x4*4iZBDv4rsHiH*F4_%daFhe-jSHrRNb!R-upmlcxH#zP<mvZ
z;Rsimck8e+ASFq$uTwp`e>&IFhv{@3Ua}g^7Ym!JO&5%%_vD|MTeA0cEsR=aHcdX-
z){;8LTwv39YgWS1A5FE~*2FZ}Vus>klJY0BNgiI>KAm at 8lNGff(Cc(l)sw at 50^L^~
z*G%E{THQ}hP$~{VrXi5&P-rpYoago)kgdLTc(*CeTdx*yGxKi6PdjT~pIv9FbZ;;#
z-wJQv$ks2s1NA(VWQ=S{%Aj at BwR*`Qqx)&IK&iU6L%Z4>8moTXdzsEe^^#e|#y8XW
z+_bz~Z-=ioA5f~yUPYgoP3G^KOxg+mKpSXvS*LHc${Kivk!;!?FIiN}+u?>LFXzaX
z!^$V`C8al+P1^8ziD|m~Ub55XCzPsyg5s2G+(}fI=j{$F`OWcZh$DksO2{LF9%SLA
z+{t;jP|v>=aG|GhXeVA`vu;XcOMEuMr-YXxT}_B|RjX!718?pYx6;GA`4c~`HrxZ1
z*5!TN8t4VRXn%bta4_#T_)Shy=Iskkq%v|_X#Es+4dywa++He^uQKl|$lR(!TbZV-
zw+74Dc#yZjoUw)5P2>1m;`HjWRK^1S#9LI?x^!9x;bdJ#-mL at 5Y0wSiPv>^{#Sgm|
zV#xzKZZH>q&%I0Yc-)dlyDlTL<?Lj?UA0*&Oox?s%5_Rrdwlk(TVKTP>zwO5#(Y3-
zF!NN6=ARN$?xUU|N$F?JA7q8k+ZX;>Z(>?FY<T03M=~|DUH6ylcgbtuWlvc=ujVxG
zH_g;V9l8;U1G+F?swUH^tyFjD!b0VtR~9O{rEbS~`|6Un{8qPpX#23t#ydHaY<0Zv
zj7RRhX>9DwGVIq(^*kD#*>urVz2Zkr`th5l)GbE0T5iX}r;Uxjtt<(1)$yLz99TT>
zuyUbi-O$F~I*)a&ZfOfTbg7DW4`>fv2z2Ltp-JN&I-I^H?Qr_)W}UpjY*Sok%G$)M
z<D~P>A5J%HacwU-z%lYXiagjfU)ZEKzJEu~y&LF0t}XDfyq7f9#x<r%HKuQ7rnJ5t
zzQyd9`BU{(rDuZQ9HXJ7VCI2gIqIUbNk06L;wG~uW0=|NK!dsIBN}%F;zIWso(YGQ
zpT>qv<#seGzU}a?t}|^<<+k}v<+fAzfhk3$pm%kt&~;*+X-BQ<w;f8Jv)6&2s_$i}
zqH2Q-ci%l~X!px-Zu0v2_{KW<QMF0JGab%&DT9-#*yr_iL%V%pLr2REb(yAQ)n^F%
zn3Jx!;Fr0$Es$UGw5yVPpf+nsn{G&g>9W-A**fijAN>@@J1to?SBsi8^BarZp7on#
zywfh{Ui6b2 at 3f_Hn+|E;yV at vqON8Fe0b17!C5JTo8#)?}^TI<G8464*YfRJDrnJ?b
z_~NTtzc+rxn0>W2tMZzuz>s1}G(77yys at EFZn$AGaZPn<$JPVd&+Y}fX&eIwb343#
z<n?Gu8anp-V2qb?OhYpZ+H}g2aIa-0;f)IauL3`>GfmMbX1Qv4Ln9S6rYZHDHpJ;Y
zobKkJOG8*aH_R`C7kqh!f3EjMuIYgGl(DYBrd9K$;*dsBlIf~cPp{2d-K9%!=qOez
zKJ;oH))|>a^D*|er*h4Q(_Ox}tnkmRRjzK;Wt5bn>{3^yCA>qyHA9A6zf5j;q`aZy
zl|kGwmk0UhqO6y^?71fIi>I3omGU&OD-(3m5u2{~<Z${guS4JaT#Y5>%L>1{wEyUo
zbtYA+s!dm&*m^kq_8Q&#nxj)HYT(z{5R%o{P$XCH(P5rFsL>FN1vIaXn(CS|RjRW`
ztzTtp;d8S(b{yw9BJIwiu$t5<`_+5u3Iwfen$pIG=jDpMM{XL7M;Z**b;^d0^$U%L
zyOU}D#$NN(eO*(2;a*&rQF;t at 8>&k$85+I|b(zq(<d=zcWmEQZdmACAF0*9lxSFGR
zZd+Aeuo39xXA>*Ga)pWNhAVrh8{})gD at Wc_XuR9@mU_P2dv>z_M4isI9Xjwt9n6~Q
z#G99;eoxfOR@^<De#`8ap^G at 2q5dT#t)boK9MGz2=e|zs3t7KSG`T|d`?=gU*9+V>
ztiPHx)pcuC-`2gXIuYA-S>fgvIgQ(KI3s^uh=SXpDbD*;qfp&DpfnuOl$^a`dV<?w
z(((?~YG1y)__41#OzEd at nTDS&Z-0V&^2bD8uWMV)Rn at mgZ<szUIaH)=Fmn#1T!m~e
zG>-Kvpn2>I<CTAvY54I-nxWh2h5TOcUsBq*lT_{ABet}e@)|m>I~;8{MMCC+qiv>W
zDsSE2R44YWO#K||qv5<SyjL1-Y21ys%;+<nY1GX<bQSU(kQt764S2WBlyJ1gG{u0t
zz8YXEaB=j^Qcn!Y)cxj{q5k-4rr|TM%<s%5Rmz##z%^aoL)4#n-%dFeuQZxFUNZLH
zRdet9EixLePEjB9&Qqs^EQm6r54U2RZ$>{e>J+Nmx~aw$Z4<cnYyB=?_5LNXr`B(|
zsWy;j(q*V%`>JkTrg6n at Q@O3Rem<td>6<x`3hr-*WbfTU+Y59`-VcY<n+v>KO2WNc
zEPd^=^znjPzt#7~qz>#FnpV)`mub9pH|@Jynm4)OwaKf{|6FG1CfAv!p5TV*6pGyk
zw4bBjd9+?0^mqZ=AKI{fKF(<mbZO|&Ce<LG(cCKMwxey$)HaabHgamsRrufOPNn&%
zT7%Kg{Ls%{bwfX!@%SrV>$#>t-sz_OrNe?A<ZJC`D6{5(_VibmXZYR at 99(0{N<sda
zrOO`nJ>T24S<BeImzAPw9h$)nABMbNm#}$1b=l_e+{=TI)`pH5r;T3g6>nSn at j>*x
zoU9bCN9~DKrW&S*y!!;N<8b;-ue!VqtwrvouNAE3EedqM-0Jq;thW5!1+BH>)z|!z
zkEWY!k1jI}pnc-U at Y*x0V6#+)<vo~3&(eP36vPd8%HWQ{n&HS1vtj?)Bu9}~4%S at p
z`@Wr5^~AwM_q=26O2bX~hfMa!vpKx`u|TgJZd0JQ^M$LjH8XVSn5!m0KNsq9rq*-s
zHzI$OaVJE|HG69p&qFz<NV?+VkgP==XG_0XK;7OSs at f=}ZGCo%->15bs-AJHR4wCP
zmOSMrA3y$s+M;Q{)5ZDXTHe|~XLkG?V;Kv6e2>;;htfcPHx{gg-Z!?(jaxd|vEavj
z);eP>u+$lP+uu*m-*|nVR~6`vF&5+b*+}7xaoMNMbp<t7v*z>mYD8R}7Z>9}8~TZd
z;-GFpLq~qRq&*~y?IZg%iiVEgE at FIWE7@@FHQ%p_w1`t=SYevc&{6QV+ad4Vly<HA
z(Q?y(8dK49^w-cD&99q~w>F{avW at Szy7k$=4&GGIs8J{ma*PcfIVV$EIqB+!A#&R>
z`8QN{2>YIf>57nFncJbFVwI8Axz>53ZvC8b!%}#rz#&*)r2ABaOj_LG{X<GmO)9Tr
z#|?uc@^AW>!@Ik1y=S7|5yVZUaoxVqy4QS>rKR%N9-K1-*Aq5%aI1bzQJywqe5%$w
z!EOE#*E^c2RHj88w2ob8x$WNXTXb-CiZETbUe$V}qsT{BP1B4q?@Q#BoAP-3CZsnW
zUm!;xA*Y+_1`P{3<*~M%wc!IL$O~iBQOR!yl#RzPOMSnyP3KkVF6Qmhyn^-PSVNlz
z`t=HPYtpSV-fErNU~cE6v>pgE9Ku{0es;1jH$-7Dn{pD{&Yl+LYNo0eYTXk}nzTje
z2RBX>xhLH_oL(b~%tjff)yF^fGqhY*R0RhP+1HucVOXk}v9C+zdC2^WGUeLYQ+^-U
z)ek=8EsUi7;O{!^p<BOXHMDcM#@-gp-&s1YS)<MS6k#8qQm$>UO)I+XEl#;Z$K<m~
zexJ~~VhlEGaIK{p!996Ow)Q at 3>|#h7w?l_?bZ*Vkq3_9?s_!XbJL_w%W@{6=T$OX0
zbVKSm*+txojVj-$#^RApUYklvxl=H{rH|_fe5}Tltxf5r>9e(U_p)B)B7AX2ARprs
zox4RNn`*_YT4?)cYq?|m<eV|@h8x;3?!0+G+j!>kjFC;32aTj_N;+So&-Zv<R*Y;y
zA8`rE(A{#qVC-$3R$^xJ*EMwL*Ks at O*oS$ogJV>m#N23d+Q!{rpRPFMHzmrvL%GHr
zsZf)UY~hL8tff5~h2cg^Y(x87SExMPR!wn3`?2iAUhg+kOw>jeURAsY{|+jv_w)Py
zp*p4M(rML=kYz)WF|xU+!!4|cPs`yp#XqaqIZjbJUKbuU6JyVeqA+77`fPS<c2x7>
z^lcxoc9*Sqr%0=6FVgaQQW?d^M=}lT&N}%$CzRKiN>(J^tL<LXQv7B3Zwu4IU-C<J
z(Iic_?MV8DYxIl7+B4m8W1xfLV0)tBKF2uh at 4-~|$q8*bjjD~4&i(3e`pPGCI;6=)
zn#*buIhAM9JQieoINk1O>U8(Le$!aD&Ea%gQCp_rZk@|39eELr%W|f!-fk-4ng^%;
z?5YuYy-_#7TQamG|4w}IY4g)c&ArG(V|Ggx@}0!#cp(*XDX3g5{~~1VUYtH4Gx;)=
zMR+_y9@&*RN!6N&{f)%Q-0=8k->5QSy)oyFy0s-MR at a%7+!or8YP=hdX%ZU`G|6$z
zexPK1k=BrCQjY4-wk5W;>v`=aIj_yc at LHdHrN;E@=I at l6+Qz$@^kL at 2XR+t-yj!Ve
zF}Kb8JTF|6tzM<s&+85x;!=8Kqv1zg8nv6twZ*mES2ULuhiE=m<-EHZ^gZFsk|FWj
zx_jA|R$n!RA9|}ZeOl`&+43GgiF$ZQLf-PgA?lrxsyz3QNvA&>p<G>K3ODT2q|W<W
zU5;(*2g)_7))|H$Oo}y~>WX1OHcbt at RVx<H^A29DBN?z~&Vshq0fsL1*&(;;E*Nfv
z$yd3XGSSX!qkh{VTVoDRGhA(nHQu3n0H)SqS0huY47i?MQ?vF9jd4qhD)F~gh2i|r
z?A0bycz)YZg{pmM=21J-mQ^Oxv|+8V6H&Xu(9=4|P_5(-zWA}7;h7@`4W at Y2DD#mF
zg9Kq6xEAefmm1n at Wvg01+d$i#UPL)1STALk{($%`@h^@#Qkz`W<}~j+TsvZob?)d8
zQ(Dx$Or^2+d}iqt<kMc8wXV%6f%X3;bGY%&7n!BqY<|gW+nf~WZ<(cSwaKfY6GLUK
zY-ua{(XBD6CsUp;9 at c?th8{ZiIIU<rwh(Qr+o0MEopse_t-1H^Hn&4ZcCNXXlxVnR
z8a(l?Non}-NX8lyt+zU3PS>!c)oV=)lWx~-vo#HydbVtGk?x7QCv3^~jXX!c_{O{U
zv(B17E%K7qg>7WEZ!|b^t5qi5M#oZm-BA2xqtiEvg5&RQU2|wy=Il1lmj?d&?smgW
z&&<=Gnc5nc-hZ>v=@&)8DeogGx4irn2fghRe;fKq!QI6Nz75mVs(SLT<C^h;<3hi*
zS>B%892Z~@;86Yzby0}sD<@NGz7g)W{2PwNeo5Rh#XrD*LX8RS*4rYr*iA at 0TmHRw
zw;B$5W+RP)_w%p}t||YwZ^KQs$h+ELYMGyM3vJLz+YI{Xt_^F%nugb++k3X0lTPJ`
zI at zciX*gxK%KWi2_8FyUQ_qC<@Peq5bvcV#hn61<Z_gSQR9AYZcUT<kBHeJ+lx0|J
zn$)<zO+IYjzOYr at b>XW at _9+i_*JT<8*Ns`-S~qk>tKa0tSME*yt{QulH7`tU+|Ydf
zyB&*a8~6VxxAw(xE{=ijhE`4H*(IiQDvNy!?K2iVrL at q#Gy3x_tr}cgc^yh|gAOkr
zR;DeC)EJIyGLSBH&PLB?4c9f9b2>azsJ%_ZbuF)5J>v2J)1*0H4~sXvslj!Et#Zq8
zO={8M{B*^ex-^Ud;~I}Gkkj=b&7)+9uIe*Kw*hoc<#~8N&kM(Oh-IvB<gTaVH|(t@
z-rZnsnfzV;Rprq<Q*6rFf at 2dJYXeu;YZjsp+6UR_bc%PLpY7e6E9d=So8Dly{a$rB
zQeiZ-7GqDhUUjkH+X=0$nT9VylDJJ+!|wDNcKOz#cWhgED(=NVj!>`Jk9FM?q24y#
z{=9n9W34(|!`OxjI2$v09mspz<mvlfRh?3AOC5yrbcXVl$&zl3qV!jG{_>+^wCjmR
z-;pa^*O!>jM*2N>c(;x7<Q&D0!@ILyt<73>H#LXTF*%1F%Wun>pnB_gwY9ataG$OP
zF|S<Y7!?Oozv6|P;tf5u$(6m{Z}2+Ok1gs5EL9!%zF_#Qs66?e$<OWanCu3gI99Po
zSG46;%L>Jw>wbo3{3K6Zy{_avlX_hpqr*BP{g~o{cbKrgUB=t%HCSENE;C#~y)Op3
zuD)ezUfpE+$=-NfW_T8Ev#B`|dw~tS=+2T1S0yjptHWq+8IS#hoQZe5!wlx4*Hc;-
zr*8pu(M*W9w#|S%vB_giM4)^4O`R5U)LZ6X)Z?Hj%y3NOo^&bD+pyd;eN};Jg!-|N
zOzeqic~5&^=eB7|6vmKu)e>DA?|k6A6kC+BvFP>K0ky}AJR$D~SP$*Oc#pj##ZEeR
zVt)M?c5Nz9mW;uk!x&dx at n^P1#oxVxC+;_88jgi{lzzWMxyl^*9Q3<8?o#2bS*@Nr
zUd!S1A)_Lbus at +(b+1<0_}fOA;Z`j^mRKWe;SDX#Z>!Df?bP7D1m?vHE}59~ZLD*@
z`luNS*@J6^w~A|rT at 6vF&udB+Vr}Mm4s*kCjQ#U;3wS1KXSa$~Z9n=M?%~=$!}V#m
zCg`rWMUFMa0lGHE-qF;&qJdcj_jXhp95o-SIxpLd45arQMrPS&<bUK=<fq_`&>B^3
zS|iU}8|L=Wf&EyEr6~>;wKa6Sv at 7xMk<Sb*nm6V(YbL7~M($a4RTIC;tg(Z>&VFb9
z#{sOtPbM{8R=lDQkqSF&vo>G%&P}}8uHdzJ1sct#B;VaKy=T1jxy)!b;=1{}RIJH5
z6MHq28#?CeoeyfmFem+u*LC>+;p@%An!47uaZnL3lC3fm(OPp#J>^tW5v15UfoQEl
zLP8)i)Ix};Xg0|PsRJEs?Ku>72b4~hQfqA+ZA}9N+gh|*tWp{gLfSeYBBHg{Y%+;V
zzk3Bd at B3ZX@B9A9wbx#I?X}nVtmnC(A+m8X>L?=P#NNcaH;T+<E-ut;<)_5`965t$
zIa*0^jWO&Jv}M4}Zw;1lq#fK0^F4ls;yh`a=;KLs!cyLaNKbbgd+D$y>ebV+HyQ9d
zkzS=m9x~whGu&;v!NpfBT$omNh?{WgV=nV#0+)OuiWBohOq9Z;ore9L!E*F-;0xK4
zmE2=^o??0Xs`P`Ubc$jCZKq;ipZvnggcvJX+h2&ja)tS0oY(U9HNM8)7p5!sej(Zo
zI{TWfK`Oou%%+Hmnq(AaQ}-cHaE2Jeh)_<&2tVR~%Pbflly|sbW=JY8=s0}B8uQc!
zbvFMpQ>VD0-bDpGNyh1drBW~DyF{hRQ)=x8#as$6NJ#Ss9dEH1XPjd<*b(s5T;Xpq
z-wEc%Jn2}<-r%JCg`#9nXBVz`K1^pdIbTRAyT&DuJ*50j at I#U<Y!P!N47huZ7j=c6
zPQ6KAz<jSg`6_jk8uqK3RM*&~ex1w(#wudoGK^^o at Q+Mj1PP#ndqQu;rjdE`4s<M|
zZhRqn-Gy%oeXkX}=k|qFCmsBMTHfxHg04Qq{{b at S0Y6!3kt$=RGtb;MfqOL1mb1fD
zrA`Jd3zRf;N3qZ97JX-Jk^g$#12`Uc64+*8?g7vXGx%R%Ww|n(Tjbo&Bl`_}N4%q$
z#lB~q))teBmMBjEC+Wpl_lk4aGhBw*)RzwVCKK37CKaS*6jr)U(TDYKXX^MJ;^mmH
zq?)cfv)7*GyjjRkv$7s7Fppf_Jokiq-KLMN+sv_byN#^dq)s<qzL;MnO0n#wB_=7I
z7;!=viuIx(`+nsk;vD2>k^E{Emw~nIOX#iFdXWVAD at eZL<QEatPkI-1T^L5N$64#}
z%lJahcj at h*ce08I(X(?;fIk`5N#E$ky- at W`B4|XDv!p~>^+m*F_c)XH1$~&yJ(GRN
zv+bfp?hCHWB~)YI*DBBRa&wK^DEGGq1W|6f=`L5gif_R<_JZb^f$L4FlXf1U3#sqv
zr>LC`vWb7unVMjX)i}_BOTy1I!G7AKvDx2K!ShSZcYC){3&>pAr0goyvZS^a`N4lH
zWro3v|D1D1C#~Q_OY{3e)+l<!%Co)q+AY1?wuRmlyeR+%KFb?>&>HCl{nzT4VqpsJ
z<|=axa9HfGPl4Y?AAR!McIezd)95tG_v$EW0CKgl at kT{>%N*e|g65W&fc;sL?;_tT
z_9k73H8UgeFF^>-jX$B|0M`3y)_yy^0 at rK><kUY#y5&?4uEV(A at Q}^@#a2w+5PTc)
ziy(xY1#vg&osv(~_9J-bB*)R_=lI3c70~!kI+y+7 at Ym-3wHmSlx705vvMBMIAcWT%
z_D`zHpe)<XCGZP$&sGdzPi&i)fqn3IVjsTaBHu&ZE^b0-SEIZ_)rR}Vl!|TQf0}Rd
zGZ(m+6!w~?4rfl5;s)0AanS+Z{JM5F6ukY{f)KXXdXey?6>G4r#rU>;^xL4V&aw+!
zLb((D>{7{+&Oly%R<~UJ2V_(4;OM+g(q at kK3&i^M)@dtj%p`?_3GlA>PX+(p26_5#
z&_ at X`dXfZdu}Sh}!X|wC2=69vqG$12Gdc%&o`UBc><#M&Ye%>Q^i7QP-;fa&B at JK=
z`Uj`xjWDumr}YDrm7(lH^9Ftj`?jVY@<W1R$dSO}%xt1we1p*I#PPysl;4f6lSCV{
zcM>P`ZgM&+`7yCyDZc|Ba7-C)>SC7X-w)aH-*LD3%kqAll&m<5d9C993|XJov+9gZ
zPF;`9{cjmEH-qkR4$HTONXYjmjp(8(F3>wc+dXT#K20ugh9>c1CP@`{@LjubIWJn9
ztmtMcwSB?_q{WK<NvWXW?`xrtX)fk;;N$mBvVxC~)@H&EU?ci7z0I>Y0OM!*Kik^)
z85{q_dA1ld=p|0<7YMni{J|Q;yuH#XIrIsxdj#7 at apZj9l|w}4n$P39)=~FXOKWCn
zz9H)X*mqIV;s04<R8_1;=RN3G|KJE;YoVkKQmOPv6zg0(y{0Dn(5VAlK{?i{N&ixY
zxpZbih>??1f7oKE0l~56GczB^wa?Qb{2Yau(0^4WYf+!!akQi5GcE$@zgdU+S5rq#
zhN+`3*<^$Ko5w-Fr at jbY_<2)~CYkWXrl#a%lVLq%C)0&l6PQZHxdxeCEqa0Iv1WZV
zDT6nEY%dfW0<jlVR2x at RQNRUMtijsdrVr{I(XZHT(@&wU^VccEB0YFk$iu(rm5<x>
zLEmd40~FWjYQ=S}3}?cRlN>k`avNm*v5l$fBW at mck#<=4fwl+vYVcTreo=(>@GX%u
zsTjdL(1U1JO)xaNR%8cFcn7$e1^3XGD1T*`4<OemX_LgS5qiJ(fvM#&smiJ1S>~(!
z5^5;YlMh|ZAJ%EoybFQ?@SlH%9$T2A{M8l at S~hOQuy8GPg-KDyV*hhkhvUUv<=43-
zf}EX<slF?7Khk47=X%pA4%k7*d5ICc{B?51cH;_+&{lPtwF?T$in$qcf5ds*RdpU1
z+z#*_o at Lj;tAHO7{GgYXotT#~_eXjM_MzkhEeE-#=M3A2HW6CZB}$8N;$7fhv%E!;
z7?*CH+SYPgxTeR&Is^rvH}64LQG#{)Jkj$2=L+Q4LT>n8tu?%_xTV}+h at o~9-i at wR
zz9W95v?$V(XX#$bx^OPu7e9ir$U?tXm|S%Je&{PuPhRnL(X%*rN(wBYOXmJ;)V@~y
z1 at qcPE}k9nl!bnN7Ce at K7jbg*+mn5u$M^%-VIJBz*g4Lxv2&T<508qKQ<>Gk1%Cox
z9L<+=r&*U=Hpvw$FQXx&akQMRp_2o?QSAWj&Xjyl*Pe7(Ujm**+Pehp&Eyw>-d9Bm
z%6hpOyR^1t?Da-iAd$Hh{8Gwz%9UF^&82pHvj_Z6AFiP37(eh1J-GKwE$iaM<86_i
z3Y%kqvI|rBM#%Norb$h<mbLpiZmIHLwkUR0-X9?=u!f!j&woYmKIl><UnERxau$yy
zO?G%w%j at LqcXK{zuHq(4iW)7Gbl;fz at gDMQXO`S5_!@k*7|$n8ifWMgszhm$?*!YE
zhDXchJ3^B2Eb76#;Qz^e^rR>{vseZC`Jh~%JAWMVck--)_d&B{1<uAp>=dlezG>2v
zUYw`$UtDg*lby>h`uH!%1OM=!_E-ULfiT>h%wJv8b at 0p0^&x9<)`SV1dXBvsyQI|N
zAtU`SE$Wn9gad#8=Oa%PtE}M;ehJxa1}{pqRB_QErmV(z%y0a}i(!%EY|gibWK)AU
z_lKdcb2>gvyv at 8hDO$Kj`7frBJ!3u7;$$M&J=R~L_l_UkYaVjRC&B5e5#}w00CY17
zbaS3|Uz6+HCeXYKCj+<(JS)9Z8H at gsbGR=@w%G-`DHt0gJNjAT&QEpc2ZEN;M8>~C
zbYQRrfnMAJ-6{8J@@7}48vTWi6a6(pm-a8nLdTRclZ0EIbjL$h>TuKh)B;P$^3i9(
zDS18aIf_SLt|Sf+97VfNG0dw(J0+NlT=Xq<QjDMi`{?L{zE3K1ETwJ$7q2J0vM^zn
z(=*l02axk<u(5;1Ui`zZPi9XnB=d>2LHHikYT%`{Z``A^q5GoBuF(l(?g^g-dLIe=
zDoNje at UYQ!R*LnPI7(Y=<JcjhU(!!}RC5sj?KdWWpHh|Qz5&{3Zjjb(0yf|tKc?OU
z{!;O``wUeibwg&ga*2c=N$Mx^>sT7tHmRQ%EKH_?g{g5q4bu0-(1mxPt~W%hu<i-3
zrbxOAdg8Sc7$)er7v#T*$32op5>}tuqfhgM{Gk}Z*tzv+*`MjxXCI8aN#*A|O`pv2
z=ay0Sgw-vF9I}>I3xG>>Ed!njTe*i{1ZMIMc#RJyMS))L at QdQ_1Lp8d*gh&a%p0<!
z7QFZRq)URwC)M}Z*`t85?(x%E8=aHr&<0~IL9Q13LS2sZjQB~MLu9xn7r!augx~_`
z8{^iEpls5h;BhxyY!yMC<Y|dr#{^%!YVL^sC+bFWPBHg|k^+8YI+ghVPntj3M^(<&
zat!c{TG%jD8vdiW1^NgKA2i0&=wvTLFPSGwQI>-bIdm{SAZTH-yIp_MSws%^DicAk
z({MO3o|NH{b0r+|);hvVkME8>0GbuS?#B6hk*Ozgwjz|NEi=#$Fo`JB=?%$cb=(Z-
z)>1Sv7#H{X)pE<t$1bNMa2^oeHkxHd<$f;%WSdPQy5^-%)7|uh1NM*<D<2<7S5m|1
z at 4rOp;H3!t>I+%1IC;E(-Vudu=MN!#rjqTWUkJ59w-t!IddSCL2{)piG-_DzSE3zx
zcZl3q642&tJ)LLceGA=d0+Ia^C%Z9_o#015abqA?B8zzbv2rF9-y8zg?-Zq>?rr0p
zDrvr>OH5r1O(yj!uE(r!w at D=`riPe8)U8Rp)%oxr138ebm}xDq-I0ax!+r+6fev(3
z?pAK43niamk2!LWcsX;=htKza=l3^h8P?8T<#(JXb<q*P9 at neB1ds6bNY16PbCw6J
zG3Z^JTlZ26jJ};MCKx^JE9{OZSO+J8?(BKiwyBC5Iq1L|m^ryv6af3QKz_{VSo17~
ztL$z%1N?!Vf-cMF8MPMcE(3D#4{?JyS34L<sg_G&PhpHZ=~}kmRu9aH at M|6UPlQOQ
z`%IDKOHbe;J!O=W!x%trI`i}fGDnHO3b%MV=@OhlS-hKx**t&nN>=SADwwW>e5q$*
zN&5^jhn%WUTW-)YFJ~9dsm4dxJpGip|I^19H@{W)H~1~kL2YzA^vzfEheE`-&dVPP
z%_y}qKa6*HS`;Ul<BC(D-ww2U;K;|+J0Tfu<LRGO!%S+amib1}`gAh6&l{l?&@YBB
z#`)wmD>fPZtwVbl-W2z{DQc@;LOGSm;Wl9^&$W<g8?Qc{H+bX_`&sBx*erOddW6I#
z=m%afrzj7MO)s-T_8@#oEB1m~B<4+r>^4&<Zky1@<n=IhrO*}R4KbC}eGj?v^Wgu)
z4mN(K*7y=Vc_PuL;kuL;Lo0B`)?u%t at HkHk^%P at N%xsKS at 1fIo*#*4VLC}wn=#Rh?
z&SyCeSgc<W6%#o#=}#`c+)o!@{x at _9SDD)CJ$=}NME>lGqXxQ!6>)V^_D9bSH?BB5
zPYxSg=o$T-zyO^ZXUi&IPfs&=u4g12O!6*gSe~Y6RL}i;KI|fZqy1hGIeE<91-OKV
z47PEk40P6n-;5O-Uf-8?dq_`1?jL}ypB%F40M7|MZf%0Z?1Jr-Em6{J<D|LX-~%^<
z2i!#XF5m5L*=ik=N}aEXsTe?=@&|R2=ZhcIJ5~9ao6g8441;!qwoG`Du1vBqa_W3o
z9?_2z+ZxIDXve$mc5tJ8ALVl=`=I_-)LrbyfXAEJS!GRAzC+iR*K!K%AMa+%0lN9j
zy5ZcDkpa2CiD2i;Fv=;wJi&AF>>e`cRArh}f)|Q&c<sVNnmVSIic$yi&A at -Z&-j$o
zH}|Aq5e1xjZ4Vi9h5^1>&Fk}!Rqy8Vl#6h7eOjlz4BI(gu at JgP&yG at z>6>>vExYVE
zKfe^uE at dDGTE#iL9JXS%7qa&WaZc<Ie#4R8L at v182Hd$fIR|<gxqE&V_$@#ioRq&>
z3x04W-$;0UV1jNQAGkbd;alN}tK)u#{QPC&YMv`I_oS4Q7&f at aM^x6w1$Vw}P0M#c
zFORaGvA(c}aqnkdq1|^QbmOCK{yllU#3+7_XW1!>I3=h+zupI}%SnV?O_>dNzLf!f
z&jdEPA{WH{Oz7v1 at 8WKXACVl7Euw}U7S;jV!}#FT^4;8uJUjo*5I*fc_oswS%20jo
z*G}c@;qT-gF}+rBAU`lYFAqB2sTJ6ZR`GMtS=K%>9(3eHtb`gO7}pDB3Wqok{P at y{
z)5`F<KY`C~602ed#Cfsz!5i8!zd?<UsMo2EU~jlI9f_;K*J~vW9_HL<!g49-HwiDj
z%NdiL`+j5~Wto?{WCXg6UR!dr<>Mk=m2l^(n^>zOj%?ty33IJF>1zW7E869!NyWbH
zbEofUQen3a94*37r at hjKF**jDzONH5C<aMB^4inRlRCkdJV9w;*8zN<=OW*am1DoP
z=Q8f~QJDL0!F*+S?14B=m$7>slM>5ejk(t+U8hW<D+$iG>L(F+()|mPx&)^{YnPZ^
zUBGPiM<sGC=>b=F$_)25E+?2+cNIO2XTun|?t9POy)Yw=D^1O}hbB^-?+HyR^ndpf
zB>7xOHuzGU)r?lrhj~MPcpbi1-59t_ at D~*WS^TTyH{*)+Rn&D|!0RKrfS0+g1#R9H
zU*_FIA8VM^5vO3Ei?w*=3iya#{j~i!Zxm;7ZjD5G at r_}zP0qi12yKA;=u4efM at f!r
zwU8U|o|Yjx{BkQ9!{^VzCI$Dg3BUp4H at _L0?lm14<-y#~!~LOK3=R<+wvjd3O0%cA
zai%8Oc~esw;a6Z={qatmbJJ?bIS0%Yw5v|Dk2do6se||$*bt138*DhV7(ZZNjC8h1
z_hH$PC)UqjF=LpvZ|qI*6S<J_^2DmdOQYD{%zq|GJfX)`!8Ty-YuJmolMiA&r?BnZ
zL}h3~VMG)34?UaS0WULA at L0~gFuwjD{vMO%=EYVq>}IYj?684Z?yH>Jl$fPBj=mn(
zFRLCA)KJ{Pc*?6mHsdAt9Bjef_=kIMT%jd#pC=#0yM=MBy7+(JfqwR`Sm|X2{&0|-
zIoKC_?i?tz>prZ2t>Dbph0u4bw?Lnt=^ecG@?;<A^ZOf8b*t#wn0vUcDM>-we0d!u
zwIO`5l3-WVQP?^;#7fW+W$a*rq{)6Sjl2(=gUiZtU=ZmdVz-cn``?u1Zk^D5jPW)y
z)^jID`fGyx0$`JL)+e%4@{p0K#2N$!oHb>wO+W$fT?f5t0nRCf!T#AfoQGPKwc*HD
zEuv(mw<Y_xd`4 at i{Op`}^uc86bx}Uv+qj|yHm8m at Wzxy$WHwi=fX-b5JK0U4R~zK-
zuGOoz;?Kz~9sR@(Xi}5&w{c0ZdsT3qKR#sCovr|$2K(P<^<36QMHhqfC2J$z4NB at Y
zDIThgoC*weyrow?uG!TO9Ru*$U6IpJCU{jJp4Zcb%F}+8nj7fHS+`xQRMFG<#6xwE
zaT6DR)#QvyN%E+Zem&H^j=D-0E_QnVt~4+*v^fBF!0TW)xdGVV`%RSBTjZNK-%?R`
zkisDn>-)1dH#svGk$w0O_5!iT{3^}wCvqNvr~l9RVU at I|>+koKi#T}&rz#9}f!DL)
zT>Omz_S_&_#*3BYTB at Y1v1Of4WR1My@5rf`lj%*4_MdsKRj|+T^U}Xp{2||hJ~R;d
z-zKEqgYMvJp22exvBSe!yVM|CEf#6e-gj1vpdY`Iek_&kdO<K{<%n+z=-G7A2ee<L
zY at iEUy6Fhu;Ibwk{(aOrkAf|GXQefM)`_w9H~77}a=h>;vCBc<s*`##Zcphl)b~AP
zj1l9xI5LQ55&R4D<VDp-7LW1 at z8Pq%l;`wKc3)xh`fxvViwA*8dvyM|_$S>j<vnQU
zL6L$NgEsb~jelXR?cNuauw#S0<>BpJ(Zv{(!#AzsM+p{lwwH#@5_Iz}u9$y6`DXcb
zT9eSzS%|u{<@b~`OfJXr+)q7ZVas#g#Cbm>$(D8#I^V-&E*AfUzStX5zn<aunx;y<
z0CqpML|+Db#3##g>165>6M!=la{TLas4L<Pl22 at j)Oos6a9j`mNwnheW=0;?mUF)N
zw(4L at -Afq~W1Vzw6TOqt+f>wfrakxb<VTgI`sfH}?$z-5TOaOp4IcrPx+Lsk&iT-Z
zjGUbJdz%V%Ep at Lxcz4&_)v)I)4&x~<>i&9z3;rl?uyns-NcUG67rZ;Kuk-_jt at JJM
z`IYQxdZyrU|0h%<+p8|xIXPr~@p#DMyqKJQp%eAM3%gZR>)1C=6J0cL-&Vic++QHW
z?IY`sUdG=?<R*a^&RtEXszS$e=}+r8qMO87-U0dyySBN at 9Ifm%*uqrWrm!>pt$BY|
zrOxxIi%)VLmnL1WN<HcmyDmVI*P~v|$W8lh1rVFociQW6|B*@jcZ691>-aa3AE at Zt
z$f;NB7gQNBK9B`(3BiA~(%CzmK9A&9+n!?|_u-WpxM$q<L;KVL%HP!t;Z-0<E`xo?
z1fIpwN?oUGBVH`L5M8?Ra`es`IjgEkEVpsRu(45<k8r`|{Wad~?S|C7nRvDp&-(Dp
zif6-P&)V>86Hi)gw>`&mcFD_s#ILhv32VX}yPha6>*i8Tz2c1U&h&?s8IaMM!CRc_
zlH)3`2#3D^Pv8zGlJnYPXc=Xrw{0(KI4p`)M>RSB+!b+3zn;48B?Askom{|)n=N-V
z3OmN4H8Ozb0v(pEa>dA3IjZf}kMTRy8O6QsZi5|daMUbi*D=#O<GFXCj|rl_7w1tI
z8&Z#4s}Zx?dwSvH^*d|hHsZZw&?{zPPeS+8Ae&_lTS4%%Cdc(<I9pQR|Jx>JuYhk3
zarCmcp~oX*_n98HmdYvRc8=xgl`^^;c<E|79JFwrrMKuFZy(bx(W4Eg$r${(9lTR5
z%GR}c(=$~LQ4(l2uJe}TeuK&e8=U5lgt%5Np6UrM%CnL2n3q`wth3FVsm~+NpALbI
zA?h<Rg|H2f at LVL#+YDbbAMp2?r2V|QhSV?K!@2BCTus*DE?||p2bg))XSnsO)0P08
z$Z=d(;Q9lx6DYPoUkTp{<?r-ff`jD7k at 9pD&)y}YessVlEIp~*MnAjXNk2RG9(kYC
z^8>LrX!4=n0B#US1q(`Je};_#>QEjMc&)U_BB6WD#Tc$;?KXK?JGUHr;T4==DU`#O
z$VLhbl#%GT>G?ePCB015Ew at JbYd;`(u`>iT2YtIII9Ps~D~CVAdC6f$j(LaOb)l}T
z*1eYZQr3h`#KvIOfUrSxw?P(F-6?qza&I|o2-nULB^mB#DtN~6CfH%EtLcj0zQPK+
zR|mRxdg(gFAiW7bXEzjtUJsBwx at hq|!4yKfp1kPy%P8%A=CP!XPRU|F(=$(7RLe~`
zQ|9P(&k{UWIadH3>(Z~rL)Wm_Pw+3E1 at he?I#ALM8%R5mX>Nz*Ucvkui9KY?s at VpU
z;_2J^_}L=@mA-$;8p$`fzY{qX=_JWFE$OpsnE<RCPfIUzRbZo|c}3*>T#{77Em;oC
zB#q~EKj&F`w{N8O(pXm}$<u##N}j$7-R1xz;~9aKe*Q(gm!6KMirw$7CFj80`LvlA
z{e*a~mZ_w-rCWG5V!z(Lp5PUggpYIEib8g)VZeu*i<JkH^C073A6w(&IFW?;NwA?B
zcAv4NoQ1BOYp3g=C(_P+RTp2uiIw!v=}N_2*oRC6f5wO12o*W8$#L^Y;sosLZjs!~
zI=-9RBof1p5Au!UICw at o@(3Ty<PJinll#pWvtc6q`A25fl?DA``U=ihLRn(v6c?5a
zns%h}DYZ7yyGE||1Xe4+UzYWS95?S7{NB9h>NmNY>DAPg$mz;?kyCSrxZ;X#!D5_^
z`LQ?Wi<KMbP1Fy-eMjg`%0Dni=fbYXae at tQe*Y=(S21GHck6c6Ze0Q&t0MReJ^Mx{
zY+CJ*2VxG&smVI&p5B^7wHNl}pia6Ua at PkV$e*N>z76^7aHzY#=A;?mX9v0>Dt-eG
zafaT>9K{)py;|`*`iT8ecxFDqCY}ThSlr at r$e_=NLwX_TLG0N5KXCsD?q`kNKaBeb
z+&?sSKbzP_B?W<24q*Shc;r(r6)jWQ>!h!$K$l*8TI_!QG+m4F)neahnk|lcdK2XR
z7i*N<Y{<2*DSzzj=-b`W!N~#(kpGhErxx#i8FlZ-0WVdkyxBEy8tr;ma?s{tU-Eqx
zSm4AaO7vIk&4X&nC*d)i&sn%HK)d2vTr}x}(EZJAko8F0Hbb{Vt{Y%;o0PB#es0nx
zYVB9RC`di$V{f{zr%Q_xHt}3c&<<zA;d#?bQaWAMZKx{}`WP)0MDPqzikZEY+~n9Z
zdH-(fVyuw>xBuJsbR}?mU!|E~qdMX1mf-K<>mYn%L^uKKV5xb}tzC-mIWY^K?A^x5
z2}$1&p7ma=rB^$V(u1a9UnqWw3~q8L3lt}6<ZtvxP6gjxSO(n$rKi$(`>=<qzlirc
zHcGeO=ohLbhhnpdj94~YC#?pCl6wK~Q)`1HheXTbIPAUa<o<~#;OnvOtmAEa*{9sq
z at k4VU0~(~wBZ(48ZG-IHSGyxB_JjX*0Vf*hT(<L-d70&htkDMh>jiRKDWmTi|B$8_
zduTk?806jq at NfFYM)YOiF<={R_(R<6>Ex8`so=C7MWGW$ea$tGDpi8 at l6yld_F8^_
z?rhCop^f&G<z5hOEOpk!f9(=(DRqV&Q=IUGJs~YsoOUoQbot=n!P7rT>!ovZ8d4QO
ze&&nV+oeus=Nc;$2w7Z=^b0&A9o^&*F3=PS^35Ylmm-f*47=0okS-#&)XbTN)O9oc
z%;cMUTn(w|W9LZ?_su6sy at Jp(mlb}P`s~CZ0X?~BRYvrXUh4OwYTYDrZ0e*AMyj+J
zqtre-Wu2A7U#jWJa)S8;uF^B6ksL3DgAQ=lW1BDctXKVHxPJcK0&{3~P3t$Nz at 2*e
z9t)AvTGq`BpaajkU~7Lxb(&Yzked0TU!}o*{#~4}I at Ot$^qB#o64<0KO1eV6H)hA^
zpcIBb*B|w=gv~ItpMN*J$v;pv*tzVN&6~Wy*J_Dfq~YFrBXD9Vxl;AShZ43FBSz^S
z*VuPz{n{n at M(J*!FOX+YupP$uS6yGkQ&;ycNwPo4H^#q0@?4|3$``3-<tw)4+*jI;
zOVzx+u$zfI7w(d`>u<e(cvh+0JZqP{W7bZ&W!4V)`B~fLt+QT`Uzk-QPnmTu@>~t~
z{^3yD=oK^}Taw=?xlReb8oe5%uM9qT);0FbApKx0FSlUyS-91GJu+6$5vAYgeT!>o
z^d0_x-#Ie&&R75a7C$G&{Vl(-Z~FcBn_oRBJ6iw#Z4Z1Jh%UbSA}}!cAM$EV8 at m_R
z1+WIXxaCGy#G{Q-;zxg&1AEcPbC}=L=1zVM at kglX+P`f at AAIk8_}>%E6LpdFCrN!f
zff4gOB#p#BZ+}VBke at VH20KaMI*^5v;D6BW_GhSr{v?Rrhj+e3xoxoB7U2xhsUKEr
zi}#rNy6a32ch{Pp=!QQgd`=Xh--W%d at 7f<oFiXgcTlL)jDHQj#MDo2TleJj23aemK
z(qEjGJtJI09R;25>rqn!PcMZ$^GfGU*g=5j_BccAE}0qn{{7P=b--DuHOmw|bO8Jp
z8%e#;6({nJ*ThpMlcHM>J`{OP)XGiRk4x~qsnmXb at LM(}lgKT at d%@Ql1(!g(iY>jg
zmA8-XP<BR6gRks9=oSJD_cw|`2Ok>in~-wQ`}iH`-`n7qefU%L;{7k^*Y6M3zqQ}3
zM`A5pPH4^{hIN_>yX#4xIVt-K<^^&eu^lA1T+$G1ge<}gBBv$YhCclaYz!>0#p8OG
zQUj1%y0CX1s##4D+b*i~jvIqM{-7 at nhod$KSD<{aI-JxGUDb7FMrSX*`N4Qd>KhKn
zEQZflH@^D~=_BbY{j{l;_%-P4 at G%_guVw;ulv%(l7VMDd{pvM=A~Dv(Jo<j*WJ$iD
zEUC?p^k1T^7Cpm at G5xc9@mYDWOO$TPy(4AYXxSRz6g-RXuyT6j%qCa6Z)YVp#r#p%
zcglBK5|8yO!zEv~tP9}$D&2Mc;TNTUZ~uopf30>>y*xMRrd&zvxylgd0Xoci;Jp=I
zgum}o&kJvZEzb~_$Ql=>@f`A=;)*U8e3OV?Cm_k*b%r&T)`d_t at Pl~zbxm;OIWk9~
zw?txt{Y*Uc+vl2HZ(tn*H|)ci(bpnBc25cVUYEL__}_s4=DF025;XXtjn-if+c3XA
zOMY)D39z)}2mH0^M&JbH3BhCfC3A;!ri8yU4><cqEq+OD6RiPx19kBgMtwrr3Dj#+
zg+mUO8~!@8xox6)>>2WZ)hl@~mP8qTIa5I1L;KbeTPw7$AhFM{Qdu4QwI&8*WNJw|
zb`E1S)Upa~9aq!3e;&_1PYhk7j)wjm{Qg9qt0f!dvXA|WHMccKrhEhC?>sFhZ33^O
zEj)v=gRyI{-xb*J@!0QCElrMyNAEtB&2wfy%e$G?^6=wbft0ZayoaBCZ0~=Eb6!eC
z<6Wmn;%_J^jC1ak#llAkSkB%ipUIyjS!?3i&i|Efq4!dO4Z6Y^qGa!wo(OgTdWf++
zdMd$&_D34`+{!||S}LX!bSQSySr at 0HPm1K>^M&!sl;csbTU@{n>7HhX>Y`@4h~E7r
zDP+qi3idbM8mupkUQQXMf$3(!Jj0(Gm4Wrj5RA$B at V2m>1^e^~^Z(KZdmA&O{XbJp
z&;Jc_iv_;v-KJ&Tnoj)m5j-QKon4-B2UxL^^zUfw{v}E0 at ND0_EmX{^b(n)pthcP_
zUVoViI&DRtU{N9^+~(zkz3AY|go64IxmP`~2jj{W-j<T0Hg9!F-k&R55f5V$+7ZpO
zjm}NsI5Ibr&!evFm^_D^9a?o7bM<Gq6E?Qn7-@`>;MCwni~VF%qk=`MpXk(4K4SZa
z#uGcGriqA=anJSa$y)~L8izdI)T>So{Q>-&4|PLRgn3T!GrQNcO|%qw`2@=WM&!*K
zCVLr}L at Mz+7%S5+BJ0FUQ<NjsSUMl>ekU5X<=}m8f&Vs`p6p&s?0&G{V58eat-hJm
z<A`DJ$G~4xp!MR2&Xw#7e+k9|`Xwd+`@x2>W2hL|Z4T+Az{aKfz$1MKf13AB`mQ1}
zB`~(EP}p-<TyHpXFj2IwiGT5G(!l at lA4!}bkk=;2MY}4 at RaW?iI at c&KKxZ(LlMs5Z
zQ1^e-F(3$p59f2rcRbC!HaZ0|rjA~uTl8u_#$gNa_IgHwHu>@_uoJ0A-q(oHfW50c
zgFc!CQRP+ipBJxlDQh7ou#VUrA?p|KAaYNf1-4s#2j%6i*doQSO~`Hq?{rNi1LnR`
zG45bYg=_IzoMm?9d7L-A1a0WCc}L2tI8Bq|AF1KcZ5PCZWGKAh7cXa$@e|{hiXVw7
z0GybUQm532H-UFKo0P3g&?q|+Q{s;1*-Ra`ro<lQmQe7wFL3G^LtCOh*{4*DY9Nlp
zn3=Dd4?j?KY%49N{C(bvqxFxxWrMtHSD%O6XK(I}l%8^l5(yv5I=QWE2e&@7HZpXL
z&4F`7=u>9lwl=%?QpL}8 at nV8q-EB!1u%hv~RX8*6Mux71-8p+MXS2y^PnP84opW{Z
zY8N%l<aFS^E<T;S!$pEu<T4<S$ET6|5%+!eMOUAWlvzdcx=6isS~X&wu)heVv1e>M
zB;V>bS6ESJDYc9SkAyldD<;>)uN*C3B49ZgdzaRhIk}~*#a({KX!)FHl^qYtyLk-R
z(b$h`c at _`zSbs|me~Oz=_E_Ut3%y?QE$Qq0gci&3?3OdfvIV(%<`siJ*EFp9fZkw`
zb`I)gtVWpCV!4Cox3UG#<GDt)n!c)+-W|a at s#_{k)Qyc#ZIbllUhXLI7x8QlE{d^*
zu65Vjdo0^@MxROQE;Ib^dPnPMa+P4MddN(!LMw?q!`=%H&vP(>mfkzrxdqB(@U2!_
zt!M6zj5jyAioV|E)JrGN2OYUi at W7=q%v(Oze<N%L`kH$q$efP$Ys8?1A5^?;7-xvV
zpfw=v-KN)?h7U6AU21%b>tHsp539-bRt9{!^QXMgn8y|hPSxn|RzN3)xC_>dvJN_7
zF=T?dIYP<Y4NGM_Gsmza*f+7T6?k`SPA`qlX^Z7-wyC!~6Kifti=_qW61B;q&%D^d
zJxhOVkX{_rOR1F6K1Vs95Y%*i{5 at MwKfBnun$Q&vefxd1Z^D4)-Wbx4H8HNRV9)?9
zYtigbrm18~G4xRvbUP|I_&k&f{!m=Pb(cPVD|AANwz2imzDkOCBumSjc<+X~L78??
zOWjn-*e1;mQ*Zy2T}6U-&$@;`HJd<RI=D-8mjHJ8kezl>%amz?E%ZIu`MLdF>*6I?
zZ<MuaLbZ#m)kiZyTcSv;1^3$S5~erz&P6*ByQ=pQ(q5(edA%^haDU6(qz>O~V9d`b
z?v0I8Kh}ALXc_4F%g~3ez}kyq>kw1n{@D6~-?E at gwc68)7y=H0mBnOvbMnAB at KgMc
zO9ee9q4TgwE!IiZBf&{3tLd35^9650o`kP4{Dt$u9qSG8lofHMZpNnaelEz&|0`6i
zzxDB;5^=^D>?694n%2 at wr(Eu(S0~vD;8)Np!ShSxIpMMYFV7b}cs^>wQzNw|3nh at l
zKFqV%NZHR-;DJQ&t+|z8b~PsC-wlP%k14{s1;$#MJQFldlFwU;-!lA`OY&>tKX$3Y
z+q{cqdBZi*L+D$Zw at a4ShuBZ~WX}>A88rWXomTETp1|I!lFoG1Y1g`_rIN3O%YgeW
zzja6heb%GW?Eb3wnXbI>X4iaaHZZ@{E~<oQ#Gd7dZ3+2qsa*24JI2ReV3~#b-#>gk
z*1^agc_gh#&wcoYMovf7;F>fD9`40NInKh!SSQjIiK)O}&uQwGTKM2S7CV;);cRH6
zjG~pw*734Hrcuq>O9PwF&{9)<OO~l=Xk4kIF87;Z>Syobu$Ok(^$c565?D|ln%!B~
z^)|sHH at fJKQ!0IOvuc{uaIRPudPX%_|L at ifCL5h>v=?QXt}{_4du!(G;mGlzcj*F~
zKC1Fs+GYQ*T2}iy$@|Aoo9?SJjJ1WCCOaJ!uF8-_6zz;Q{9G&}_-55Re*116>XMSZ
zlhr-Crl=cL6DqKFQ(O;a-#XNdXHn8Dt}Z^&MWvH*are>HAT7N*=F{!MSv)LC2JVrj
z=wYPABYy40TyQ333C-kP5d!a?xGVo}TB~yKc81~^k<p01VsQ}g;XKfViTbEs*zBSl
zj|vXX*1vR1q~c79E4s7s at 3@5dofG(<wt3KI6{nZa9LD-RBrNTm;3>@w^WUC_yu~E1
zQOGp^#!0=83R(&rArg~al!-MOpy)DgFLjmpD<l0=N!hKWY_l-?th;PjFUn?^?4G3T
zW+TByIDwV-J7NadneCyU>tp^sAM(zX2Y3beg9g1laYO~r7u)$JYWHU~UALYHy{ejR
zlGu|?Z{JF$j)EpvTH%M}>qiAQNOKF(ze6fb*d%^i2*tk*dOOd&)rzyKuzf+x$_*D?
zwEW@?F2&UQREDWnqgHQgIPCO7{ivgcyY)oz at 2c(8QGHBB8+7@@zT2S#PM at 2LI!~xp
zn;_44&JgCBx7xOl`l4G_Z3z7sZGOiPe_#-GxExbp?;}?hHb?_cj at Egxjh2&oO}PVV
z(9gio-)Mi+J8CuL)l{t2mH(~(>RA1Jv`3NmO1 at 1W^UnN`R8PA~8hVf4Mq(Lgh#YVd
zv6dVU$*7oy)U3a#oRA_$YI5C?Aa5&uBF~I#{@8T}+AJe{FUsoZAQH<?`8?WqJ_HDh
zGGz|&<)49=HWxtaMnZ2=IiZB#H at 3|2?H9}p_jSM)4t8iobY-(^n)Fl^Cuw#C;0n7i
zj^0&#-*=U%k4sDh{;lV3%|nc#Eb^SXjBouaTw>nS7q5IS7B;!JM2SO?TYabtiLmn^
zWicn?kUuYRCXLuQkRj%XLTlDzE(uPsO(iA!jXrT!{wVQ9^Wi&8Qd!jgK2AoS(;It$
zG1f^z^P|{nRo)-D>ZGe&v(`1cK;x^pG{gO3*?4EmI$zK;#D_?nJS<#ow5O7oZtb{c
z8a5Woa at FLypq138{Y>wAtg0Jzk~aEPkTUN4B=Q|$xh7^Wa3Z7hwf}`P?fEaxM4s(U
zPI7<-xjMyjqhoPK@{c$9M7)KVldCPR!HtG{?}d)0 at 7s|M8BGtpjPy*TwP;ru(ld}|
zEH1}Aq{BzkLpP9~j`RYHYd8pL|FLuk($mJ$laQV|mVN^1DP!q{NCzWbWO4OPLpo?I
z9f>sXI(Pn~NC%9i+mVKR=FUHl^v1FDC8YDm(!U|SVJv+b>8)ew6G(3vOaFp&!C2af
z^yabj&q(JWO<P>|fbG5KJ(j+S^hDr?8!!$+q`i>NN1BiH1f+8?h94s>K>4{A*U%QE
z!!*U6<E~AQT4MNe<D)n$KFz$xt)P0~WAziAaO#Xc#eCN$R#;7wu6ZW_L?CAsEr$H>
z8&GC?=9)Jn%^Ki}sGj*LteIYF?(9n at wySXxVGYU!xa++2;io*;L+eoAif2c-JnF`A
zrOC>rQrCoX{TCm8in5;(EbiKLg5Q1kgF8KgtO4K!YS;u6Lnc>~XVtmD&!YJCx%+ds
z9+mSv^${~I^qV+Cp6BmX7kfVy>Dz2{)SD{1PQ?y(PodzCr>V~kr=r7tDJ{~c@|Nl+
z&g at VJQ2}c8$pc)9`a}H+-pQQ|^yI|G$Ftz+#H>8~_Wg<x{k&jj*cOwWd*yPaqdsIs
z#$UkmrKg<w<brnCr<#dhtY9;E6YwW~LGYd1OTiC-3K-w9T?>B~i-)|_(Qx>;m(>BV
z$&)ovp9#Ifw at Y%jZuqOk#;8&62H;<TRM3ViRDIZy9YtZw_^|hbulAALt`dpYus;5s
ztBAF7P5k28VLzOkHN}*L3E(-%SVW%7AA()~hrt^7D=f-CiuBu{N&A5751AB~U9eR+
z8acg&`}lLkXT(kl=h<hSk}jPv1$<dH#?Yr2vM{i^49xv at MdMcg{C3lmmtCO=-g^0j
zwIij>tV1PF%(=T$HtVkNnVPO at ALXX7_ip#UMNj<(nEo}<y5QaN46}<b9`DS~K>VxB
z=HAxSX3NX8<fu at BI^vV;rLtMQoy)p(jMUi9N!M_u7cN`R0#_DFNUYD-Jvt><c;GPy
zM=`W69q7~!=(WI$LAHc$uJehmLyK3MdygiYs at 7*x`{-IKpP6cQ-CO786Ad9*`GKJ+
zykVmMd--`~E_8o-Li>C*kRhRmLw`RN?Zo;?4_FVo-NDZ1uS{Yzm+RG1egA<J-b!II
zFrrU1#r^PMojOI;R}x%psn99xT@$Q6rA%n!!jB;ri$Qxr4ECm7ZcJ!B!N)rb(I>6`
z>;Y-eVCwwPk=f$$9lB><pG*^fAk<y$1>2Yj%F~_8zU~l|P4X9|P6`Mc_O^6NzP?bR
z4PA`0Zx5qQvZ~Inu at _tpJ(MF;_ at T~&CB<8Ri%ZEvEHOP-J(1|cRqz)f_+r;V-t!Wj
zUpw+AjPi(nvRy?wX&kVFg#)^bMfYHP<Jc6eDZ)B)Y<e8{hV(7iI^kTH?6##DYFXEd
z_&>fEBDG0<4bnFcG1*w}im~}8cC50qon0Am=3w!yURoDx#(Mggt^}U4+TyYES)(;y
zYVvL&c*?HZms??zV-nAe!y2<i`ZT#(g~0X#ny9xz6wR2!r+CYF7ldm^%b?tBCJk#W
zugNEWev|8#H!y}|iLOC9@;Gd_T&*(RebP4GGOD$u<nmLIMT$F15#z5Vz4s at qk?X)~
z98*6dJl at x^`y5#b-NhdVJ|t_FvP2d&x&D3<dv=PZ2=Tn)5FcqF?B*@B)@<n)ms{xc
z1P=IgTd7PjZj|5a?5(((Zw^^<tCx#6_Zq;nUtec-C8i at k2l-gf4ba_Hyx9hO<FRqp
z>fg_QlNW5775pVv%>K^F*-I^}Zr$<C(!Xp}8~&_HVu^m=*cHKcHXQi+KCYL6*%^O*
zzpH9;uJVd*(M1wJ<|b^sKMD0WSJx5y_KWbpo~lCZBLjKXfoJDJv(44l$uqOL+JdWf
z0)7+C)q0XQ+gxoR*9dc!i9DNzbga3$hU6JhmzSznx9Ak{&8BpVek9i~bWvwX-AxUt
zmK4EJbM*mImO@!?;#Z0EQ|9WoNM0-Q7N{&}!{N|Gr2SOQx<$W{Iu;}EYpjELx~Sht
zU4sp&FVLi}BksD))rZNI#1Ht=T)l*(yYT)ERX^UVgrAY8F6u8*PYCD{;?kN8c(*EU
zm$~{eQr2RwT28LDuuVw~w+N0J?tlEa1iYB~Hta^{f^TqLTC4PbI+=&qm5M<zV)yk+
zvCgVV`IjDMGJ)Tw9-l2Z+T`)~zm)zBx}A}DZ}rpAv5u4~{dK|$yWl8%fTlN5I>bW!
z at kOP7OZuN5p-g6^7UgA83k63J$IJzt>}92YV+5OTQe6D5;c$m{*l&hU^#(cDIgbAb
zVj{-Pk|PF6l0hLpZ`deqMLezxhWEun-Y|(x`Ld(tr219Ew_=OLs5(gPWHOaZopvx4
zv}o6Zbm#MYA at m<(<xQvcnUp#*K<TgA+~j!w0%^;00{F6i(IDHh4c8+LGR7O%ng*HB
zi2gY`XQ52$_9sc&>%P(-7^CC4P~=G?-x7eo=6{+rU`%2AT0$??LMA=LY-_f7N_ihe
zs+(MwKT5g at I#?}AP`0jWkA{BwqP{M^&*iUG^@8tH5*kqrTSK9k=(W141%*U^18ldY
ziTZk;;yTG&Wj6d-^DE9BCdt-txb-7p2IfFlI8&HhXm2?D`!nFtW{VU=Z`DL4Edfuu
zHOYp3>$<!}dALCrw29~@7`wjz6(Ln<%q{ExLg}Zfi+?f3H!anN<X4a8-$VW(lAk})
zd653R+Q at Br$HK)=_IVWccP-hqX9+I=O!BKb?Z9WyeGenHsoeC!&>mXU-0P4AU*-bX
zlgEQiwys>ZrDh^!eDnZ$-u3@@4oo2`!DgD&wTJK^uLwKMjFhdTw@`fxGRx}dtW)(O
z3GSai1-%;D6d-f+J at b<FUsMYfcGIMxJvBi*7kHVLC*03dCht}FJ)sKc74 at W2LkZ%D
zD_ucUOIHzfvU>$}rza176M2*gzh7}bLii_wS;CGRSSs{%&%;(AFv$-%pv#t>bdhO?
zjZqpfwas%L*|a9q>0g`I4LgZD34LC{1uMMmC3Jx^??_%>mx?t3XCHzM=s;I6YZB_c
zgFuH&jBL&!&@59|B70(ff-;(1 at g3CX9YpFu+zWTPkiFH&gG>YYhsL>rSXg at Co8S8H
z&BM5|$NVevV7Ct0is05yC0U_sYbi~A5F2fDjO*gdT=~1uhb>8c?y>)h$k%0O=$Qrf
zkfmOB*m_y^e#zq;xzu;_Q+V~j2nMKEJ~%^%@H)bl)3=BWK8nLoRbjgl`#1T)hD>|g
zxA1KqbP~J)hmviecpu#01mui`jo-A%#Vcoy?^szK{ap?d9p~3R>n`HG+p_(zPS2T~
zt(oK7vwsagl$|u|tL&c<Ti6{Fj*4aw8(HvvTr1rUTe2ku#gOfX1%AzzSEuf965BiI
zbZ>S^sq5hB;I9%FL)&39zQlaSs$$!@bkO=V6L{@1Gd&~m{uV!AALG3*Z2Bnlam>L$
z&Z6qmT)L(hIO&qSHRGMzlfC=$0t+sLN&>F{6Ssw?Xo~$ED%+;?t at e;KstELftmTFW
z_KyVP5}d<X92k4k!_21IO8I6cGwx@^6%1&QzT$wbh>XjihDzZ_7?b??^4QOpLYH4{
z)9lnlbIE>JVhgEZ%qzk4Q`7<A&BBuYv<0*MW8e8E;W5)U-Ox>r*4gA5TErW6+nY&u
z&!#Io`zmxMIhVNVp+=Y5TlRb+e4F44n917dg7L8Xp?*z}MEojy9&sKrU`r>bV0%rz
z&Du1jc%JNc$^8s?Kb|2j=b_E8i at wjH9Kls=$<%B|A~htwQ^Y{#jz%meCv=ZZFbKP+
z%dP0=64?8|wFd;g-gXt at 9B^sjBV97~KIUz|dLL|MT&1O6mnHS~O7 at y(E55Ogx>S?G
z+B`4B#may|S~q(ImsG-EDyvkZm+*$Q?JXP=Vbaox>?&J!sahTK!9wT)1U(;64*Z<z
zZ6_IP3Tx%IfFG6 at S8zPo?@CX7qDSm^QuorCr6a4u*|Rn!Ra%2*4boTRv;pi*x^#1W
zXco@}`??GG-NqQ*qt`3$;#?s<TUTNePsVdA;LElHSe=5!vrt=XChk+AkCCun*j_kw
zNM8**DwKsT`bTa%^`q)ULMOM5`VR3^hCCB;w{8dim6J>lfG at n^DbDSu(>*(YV?!r@
zrNJXJaKt0U+v(Y{%i)<2IAVK-jjYp_1yUXb7Ja<oj)xg>Y|}6fX-Ok;X=uMnnrMT6
z(;zTGhbpk3Gem;9OJQ4ZE|=OiQMdJK at V>#SLDCNWk}_u%!#cW<?p{sZ=9;M=;hTPw
z-n`QZ-;-gS7Y(XF at 1UOf?7(=LsoNp*j`2(l;rD3RL47-Q-Sa2K&4WuQdudU=nM+|$
zgvymIh`pPI at 11a@umhs_IYs1~!A0J+*=EwlIf&P$gq{yPXX-4YZ98>)K4KkuWJ~I7
z7+VjycQE+nA3Q83#9=WN(}~ePlvH|y=EXcMOz#ACp;Xi$_8p0<gt2ehDXZ?cDcxg!
z5B at 5SPzi|}w1EprRtz*+Sj6Y8#(ZNg$a+<jU-E?ynR_gB^kiEOJ7P;=?>H_}_LBJ%
zU8?f^C%BCLYQz+BH1 at LGA;dH at NXrI2B#6zFiFH%(>q*c-)c4T|t^jkp7V*kWzz&yf
zhs}d~UmNsO!eNgH{r4A%L#SgI>tVJ>a at lzfz9aIjnsE5)8$HbYz2k_y7^pn7_enp!
z;|%+~BZ57Ca6RRthh6pq8lhkRvMua+R%nAQqyO>WJ!lzd<2Re%1fNxnm`B$WNG#FB
zMA&4MUs(t`W&IZWKMnsOP)KyBe2Y-R|3jEOsRO?G9W>&N(=&>?)a at t#!DS;3PdxF5
zg6y;qWvdh;bQXLVLv}d4h;AZ?ZN(nxv}R&oNZ1y{s<HY`Qgk-%VcR%)`CzOTK7%=-
zqvO36cCp*o>!4fnw#zQYa60|~{I~Dd7=Qy6QvFO|aed7a@?RT>>G!d>pvzKzX=fe$
zb^bc_vPeEY2>R~hbT;hJ1B(9;DNt8-B5W2Rr=)@>S*qvu{7c`zN2m!znal7G^YJTA
z>SKzld$}#+ZLq6=tq8wkY#iUh7=G`tz^^s&F?%qBv3i2C(uMF})@hcg0}?-{Q?TDj
z9Ws85XmWW3x3(gND_C5Qy1(VB$_IVdoa)z;{hN;cySDru9S?iHZ%eH>V-E>ev>bX#
z7E-N0_knXtxGHpMAT@}y(RFWO=QU1tQI42`;~Mv|9M=3G%6|sk^$-5(Dtpf!_6L&Q
zo(`MfaP&{<bsILpO`zdqUD|DV&^x8zT8g+)^72dAL%(vt6^{vCzj%_?jh$2Biu;)B
z)7D(p2;Kl#x$-N)>o~ur^M=EocgNH-?yN&h0iEW(X(=k(4%r7<ZiZ$W at RBNGTcEDu
z8(_N=!!5lXTi91dbD<=DX2DEuH+$mX8P+Fc6UM2OjFa{i#7`Z;I9;J<Hu+3KOgfPg
z=ie5r^=Cobc9C+(H^5dGvOf)5+gE3npX7cm({o|4<zI=j1NH#IXLD1T0Mk52W at i^)
z*D{ZbfR0Q8f8fI>XXt?i>ibw1VrvWvlW+HH^t_n7!zRsJ8Kxhl$);ECCNH(q7ht;(
zP~jTe2jB5GNsKXa|5JXoz;0{VdfN_OsxAO_{a)qV_Tus;jxDR_l%sZ{C2G%9!wT=+
z>C<=}UGa#q2fGxt78r^|sR5P%KXBzC#89~{-dZl at j*&RONqyiUErOR6c4NSc-ecda
z(+3^GKE^q?GU;#e2H1)oOXS2`_xEy&xo-%Q-Pbbcs)u(3DqFxi40pTOFoyV_NOwbt
zRel+C$!^=lb73tsVqSlPZL0vblkg|p3CxJcC2VT8SSKj!V5igy|FW~>+@&+CD`_oa
z>Y$C-n^ySaRrx#(+u36{e--2!_w!C-uX+sYWfwW0%P$vRh^ayB*jdo!yYBbG4=;uf
z{lw^*Dez)n<~FdmY&(cOaCskS(Hx<?yq_y8Wsnwlo`)=Sldsmw*tfaO at a0VNf0gTE
zPv}pVA(qI+hiO>=&223IE$=$dg}r}I(1;ksQqyiV@!e1LjM7K=+48QBYiHzTq1^OR
zEn;2%{lvynn at 6fQH&v^GUZh&hX^Y-kH4eUEFP{{0%2H=n8*B0L9c{C4$1Z1`w&D;Y
z*-<D6;>UoGrpJl*$8eJB7{rG=%{_&8qS<TQ2JCk&;;3a)I(mL_5crHuz_&Pum>ud#
zVY#k9%75$mmTd$r=MJDgL-8JG-UQP>=)`Aw5?-LbDUnfECbZ&w!Se}X at B7`jlKz*Z
z at 9*atN*&mz1K4-Nq;0<OrB0vpvGy&y*hkAd6Dz*lus1Ybe2<h7Y{9<GgfB4JzrYTC
z55#<e at qd`qt;_6$3>352Lrx8qloWe3%GICv8LNvqE&7wCkaV@<8<p&ka99)IC!(U^
z+vw(PFi+b5|9N8nZQC_ASFNVmtr at 0iqKuXOTrk_If7suq51x*5r&vQrnd;7h$Me&h
zY|w41J;jsi1^m*|1W75)$ypQe4~Cue9mhGgaXa`(?)~!LF!xF>!MxZO#@2E>c*FW>
z(`~*y-kbU$Bi4O&3awQb=~A*r at qY|Kd<*7Aobh(`9?VM=_X6pYvViD8$hjYqNaTwZ
zz1*boGg0Zgtoi^y8+hDWvX_{rl`BT;gCB1qJ4pM$wpB+%J{_Aw*!c87U(t2H{5PSv
zTFzzS8(AOZbJNRhwB!=LUurW*&p1^9yNYb!<L2dt7(K<i93|qdmeA!dAV?~EXF>*V
zn7`e9{?;N6 at ILHY8}<_VP~7gTiK&@Dd=+1gy8?cc8!z{EdPuy@^i-?|+?S;7$9J$N
z8oUR(u_gq+j-6}qFE~AtQ}1)hi0iNgu~0Lq!9v)yO|BT5Z at l|pzG(@3adbt9L8fl>
z(`za{JKVmc?eIa_zxSV$^$rU;U-*9dsfTR`Jt!aV)QdkNzH!}&WYg)v<l-mvLGRf(
zqhBYt$8V7Mq<X+kszFzrK5Ym5X%DekI(s>%t1TZvY<o_hJl7tK^HE!e^GyO@?CGmG
z%yCPpEZ>Q9ek$ZG8hppi8i~~>I8}9rll%SQ0IenQ=iI#g7G*(K73 at y7RL650_Q!K;
zL9=s;ZC$-M=c|FuMDQGlH`Idl9mQ?MGj|#A3|Vm;ku~M;so-)@?n`9>;xF3-TcGzE
zB6*0lIBr!pX$xe42GSn1<t@~MGoefho<qnPS-U2edeV1msl&T<|GUK3+|z=XGKj+r
zf4GNgu3LR-)=@o)t2?jL?WJ}{F?F>jm}*`!waLNFD(!=Pph<5p8#dU>cI$f&aOx}6
zCEEaa)WfHrd2p_vzliTyVTB)FWZ0G#IXw&C9VFi+^wRGP_#q=`*#<{1i8o4JqWznE
zeD@(vZ#27ojP`$9sLP!|BbM}N+tJs@*eFd2uftwNHR$6P50o;dV9(T3!J-KEQ%$aE
z)@A9b8cx#rHZ9{<3Dv9YWV|^!KLmCQoM$Qza$|9=HlSLn$u0hdnFss*fK at -h?y^NV
zjc4?L?sDQC${3r5Hf{%of^$H#eSGv*Wx at TBgNP-fEp?2y{2F^Q9c$09)2^RnbaeHw
zEyu^>e|YvZy1IJ(E?-Bx{6EZ_+7m;4D<osQEAelP!x<4`LaV<6Pnc5bU>NE+_=9Mh
zH<ix?`<)r<E7>pA#P_eTEvBJo4|Pm0ZM?tg10v7)T_)q at kW=464}Xd96m+O2fT=u{
zqgO8-*};H!%-rQ@&}}<HS57i6PQh7shWeJg=Z7{B8OwH<YV}MV*MaXYCH*Dk37#-9
z5In;7ngHMo*YNw+U;De&jiYPJjKsc)%VA%&?O=Os&_mfW%@)|XvDmBdU8JIzfXSNG
zA1zqaUBrfU6_sDc?-G8$;df^B{snQkUWrk#W?TB2VXmmWzcdhbW8>)MI|D;ic=o$(
zA{!ayRp!OL;N}<B8RF-+*;lZ?!B*&mYC67?#;c!~O4Xz6#f7QhAy$<CAzazgv_Ng@
zC>f6!mpP#-*lG;|pSXi(7voZSr0gHUtON%WSZ%g#TY<5z?y;5dCvq#w2N$kV-3Cq)
z$PY0cT+=P?5_o}^BK=7zKgj*3+`-i<`p~9FZK-U~9O4(3TK<zze!IW0b?*7X^D$4Z
zdLRC~AH>;WlB=t at B?=qr?&X%0|Ad$mqZo!4TW8w_+HZ#q#ZsQ7MqAODSQPPDx_88Z
zbWiXp$Etg6yYPDfzf%0R<ClwHo+Mv3EzY%51363{`a_AVthYjU_P&7abd7vR-w%eY
z!SqS;gXMY9H at pTL#eWY&mvMVjMkvwM;79D;iM^oVKSl2XBRZzPwdcCAH(#3nWQi=)
z7%Hx5{riIgGh#ml at BPxRmA9m24;?{S{p|VoanFs$#PTgZEA?~hd=Uf385Wd;xPoPz
zZqe&~%!iNx-Xi*A^$cP=i|aH|@?*6!snUda!0-uEYHU(q1&Aj?(vZvUKvzQA02>wN
z0MQK?61;btUg*y`E30sdGKg-#(-|j$J-1rHcl)J4pDD9E7ULhR8j|fT*cXyAx31vT
z*->YuUTBls2ET)@UF?KU;SaK{N&T|faolzpe6FOkPsr}hZ7B^5&C9%NtQyF2>mySA
zf(V8~Y<bmN5LX2Lb#XTZki(YBB|q4fPy^dF`@8A1$9~$>Hamg*rxfhqogVm40l|6L
zN2U=!MoN!&=fLI(|2Z<vvn8=Md|pbNalY8I0~l|c5Iz#H9}V^}W4srEH+PSRqF)#J
z2Im`UvU3tmD&ZSZUoUVg7q=S!Tj0>_Lu?PkHo!Y!h?P@{^9*tHiM}OTY2NBs2kZj=
zk3m-;chwfRf_~oy{UjKECY?fT5D+t_HfaK49Q36fia3>?uds`sdt|=&xrlS5Y}&_!
zuELj88qwU<OAU5`_en3<FQrNB%U1K&KG*{AO^B0~0v_R+$0v-ggO!a5DT(^@0`R<9
zq-=FOjsGj*f8Ke4O98K)PSdKy75%`9ZZFI}a-EZJwT$|VvbPbZ!zx^kJn4~I_<zMs
zjZ%$FRjVv*D%QSz-qxxR&{1yXXq&`&-o=S+k2RGb_T*G;p1Z!C3~<ktb6-u=JoZ}V
zBeR=yzr1lv7*Ax6CACaDWE$u*U)`qu8Fu|f;_m@`E(m?MryWw*9`u`$J~BRig911g
zdyDgCZ;}{a7=v4Lk_p{pZzZI78;$A8$QtQOAw4py52*)nsZbB%^N!yyhyBN>>{Mcb
zE$ic_AAC!!(gY=>@QRrF#MQ#THD;`(;L*9HV&-jvd`|pS7b3PG{trSVpL^QRiC7$~
zfl;nvPKi~@HxmNp^vWliM@(7x?~z2<=X`B;-Ct+!9Za7iG-l0pQL9b8_T)J?;Jbtv
z$w%HL>$1(8b+y61caE6Ec6sb{W*+%JGsM||KN at i4KY7n7-}G}*?)W}r&2&oopFupR
zKBBMObBh=4?i<$Y=zo6 at on8MkB+u=SYlJPCEN(&M%(-vqe%al7P>%mnl(Tub8gbor
zP+nmHhL!~z;F!+Bcm6-ZzC5gnYwuqKD;QxEkuBQRnp>oBi?|`BtzwB0w~&wpB8v+F
zsai9TAzDSet*x~b($<B0uUbm2wKTRG!;;!sYqcn18W%!bYAGV(QY#@FAj|J_2D-fO
z^FGh-k9lV1%*>fHXU_Sa at A~;}ot|28DYI)yA8=#)r2k#FJ47^jBNMQ{k<N_xIw)HR
zeBP3$VwdOG at caOt-^7#WHiU?7IBW at mw|Gg=9Y3D~zhvNnzobB%F(o9|x+Q`#_F8q0
z{h-|Jj`cJ-Oqqg%?C}Wp`XTliE?dvnXp=iOMDY__Z<^pM_SscAod$VxZ>$$v?|~4J
z$?-v^Ku at lzc;s4pZ)`5P=KBk|wm(yFhFr_<&9NKg?%vofr#`ghnH)PZ1(yx-*4|i^
z$?=~|!4-r2QE#lq<fzCLG#-p8amN&J`h9nCI<O(OgVTkr8(S~7K5TYu1HSMfvaQLF
z;VjILsfI7F?=I#cTecQubMs^1R~-W#QyF-X8pJVwtNZPp+tK_wr~NVoKgv?j@$%lG
zwf|b>ig(<s{=0_irMG~d&OpALszhUw)gtViHwSt7zWkJy0Iydjht7GjS-O6*iO?<J
z-(lVoeXw?bx0bp|XU-|0r(>R{<vxN;&=n%Cw*rf}sVha%IT$atom>CoyM#^*pgkRQ
zMpkvSyks>k0~SN((hlj$k*@TW(67p=Ug<Myn?f at 0*|8?MTA at 4Mq~4EvCZ7UE7P$`p
zCty|0B7PTs)hessPAKajbFBlmmS5oRFZ at 0LrWEMg5Y2s>>Tx3WTdiL3V|3PoZq?-o
zz5n=}%bT`Txj&GEe0N^{$hzT|*>w6d5vq+(F6qE{@2^CBQ499|GjsYufBIXY2P{jV
zoUo(x+Y_|in0wtKao8zfg%8XIZ}a+ik3dn9B8;wDdm{vMs6|Y<c}ZS3T7ID1q^~gV
z#}k?@SW{TwGZ()9k?*wd7vcNoC*I+9fk#>v5g(UAu=|1GtKkgBg6mXRR}~}itukPZ
z5`CeCT_aMdpcv)zYF%$}D}2YBbP1|X(6e?M6Y+g)26Pn+(Ipi@@5V6zlW-W at m-8U!
z#iI{1M*M>Q>}@>@IkmUg&Mi^cb-g=!xx195z$&Xnt^xET`LC>h+#U~$UlXyL(0i2m
zsu}3J&gW;$Nm$S&z0d!?Rjuvw*&J2R-M<&I6Kq83;zrm`0#*K;m|06<uUHaM-zvf!
zzQ67ScYk&VsYg$1Z{r=kadMIqiqk(#>Qx=7DSm^NE5_{Z at r$;}ss0woT6Q_r-I_#o
z=jo#AiCl<22qgX$_jq;G at f2YPY(}LR_usKG>W#pusKVMNgKlS63G`yHUkvJD&+1qB
z+X?mz);riO)z7LB8^uU&+@=qh#Sc at UL&>x}g0Akijaf>@aTDa at K7UEh6~x7b9*i$O
zB+6OZ3%knWLIyarDJ8A6%(JO=F0kNuZ+EghSUT3Jj0n}H&6D+f^(f88%}+Q5>irrU
z!F2u)`h4>o<U)$tCQ1oAgV?^>)JwoBl7*e7(~C8<R2v2iOYc!{L&lYj(m<z!J at h*%
zWbN~G6)|XE3f`Ma_zKkbbMqBjGFczZ1vVL}w>S%U9@{%f`xBW~!x?IuH0ud>t5xd;
zFYp*+-kzExaHcNjxaq>M$Em4`F057e|F%}$A6l#K!)9(*H!9BaZ-!gtv#@puuy&*&
zj`oPf+JoEyy$hAdi|o$@KN3!`qSn5vxGQ&B1_si?ch*YQyQyX2yLf4qf&Pr}4{Iew
z<a{UBCu=+}BU~oan49##K6WJ0NqXsfSaaV0fu9~;t6RKpj(kkGL%-`?$klb;oO>L%
zARXTi{w#;+w^9WIgtv$lO|BbSlU&Y=l*_giddo3$?ag90gIt;bA*rzKuqZlok#BbE
zek*;9a!qs^2Y&DkR at +C=Gkn544PCU2P8BzUK5RKC+NOa&y8G@#KPzzcKu@%fc?yfR
z3wW%dH-*H;c|SU7f0iu;SQ$Dx8v5LB_$Jrd6wqU&gD=Q2|FAa6tS9y~f*FN5Qlpwh
z1u~hKCy*nlBJgDM;;d8WmE_pOps5qZ)!hAlWuQsD(p%z2|9sRf1|G|aV80D7Dg0Fd
zz%Ck3^`WlnK|YX*Av~i|$CRqng#P0HF2GotyR at cgkZ*aDsfy}JT~76<{0IGZC+c*p
zJnRfF``PKdtg(b%-OC~J_Ja8i9N%T1SqNL^Lgs)d%yegCSPATz{QlUqh=g?I<g at 8_
z;%edqirajt at QzgB>EK=naiuFF=C4Tzail8+ozm>db<&*4KQfY7*ATyo{BT`6Rg7OX
zy$kQp^V1CC#X(=p>Q|AkE)Te@@lker7Bx9~k+#;BK6W>J#|Chn*ga3vFT<B*c!D#u
z5V^YpDDY&|L%Wx at J6mn8cEIn0waX4CIbz5-NB#jx=|$a)cN!rVH0fqQ4ta6MU7Lvd
zAy!D<i8W^`nIl9`t35+6B{@IMb#l~Goj?&C)Iq&60CWKFRFN1_=&s<4(wQ06z!PXY
z=@r6o-HUGzgC66qO+(!it!GZh$+eC2BKkl at f+}L8w9eZ*4s|co-li9faGgxj!cUjF
z3t34`%bC-L#^P-}IgXRa`%9|m)OCHqX(ReJ{sO*s!G4 at 8@LkG?gC1J%KlSA!&8Jth
zIdDk3EoCm^53>!q!KQ%sm+ZYSS}p8`PtzQKbxt4YThZOITfa;o`C#f?NB$9ipPLt>
z;lEhYY7>XQCSR=FsE2GO|B0eQYhnucX$@AtFOdI8M`ai#Z%+c9JP#X;9=yCp_hP99
z&oX at I)$r^g#MId3BgnnVFXT at kPW4=jnx97MMIDvw^YNgY9pKM)qMmxxp+i1K8;(hR
z70BUshvbW~!xx+LvG6m*)4Suvh+oc!ZS^VT^Sm*LP2(&73H!k<dd1RfzzGYBE*ipn
zdXnHhDXx%MG?F*PE&@-(Rs4)`KRbE at j>jl2>t<}bg at 1hq7#p{u3xFN`4QPV|F&JND
z|AzY(M=w^!@aAK at rD2SumA0W>U-L37<$bB}^Gm3sY7l3MvRx$3jr&isJ|U-a$_;nN
zHsL+=@dG~c_pMGM|4i5?_Yc>EK51@$Jt^2KPgZqt-x(T*u)D!`5_uSb1vmy9_;X(=
zk?|mJs<jWMi{kDAFVCBLhV{2Y3?2P8WYwl&@SXYhfTi6uH&}zUxDPf?CpVA^iq4FK
zk7l7Oastt at 5j!2Hk2{)RLJs<!!AC9^Sb(`q1~$a8lNcAQt+`AJ at r!+bHso!RM+&?c
zWd;2kAozfU_I4(5U`w$KI7A%SYx5$}1{dOn&g;_VbP!)^<n$YWEf{NV-7x7F`30f5
zmPd0%^|vocMnZ<C5ZkFge<G>&GmY#IzsB;>-1AxIb&Kb8niBnecyh!2wUy;o`f1of
zCn4sT;3%ZC|JvQ5&^VBjJ-0Tk{H91u;_n4E=#&tjkNk;)GPD&m!xOoxz5Vop3*_DL
zix>1Rkk(q)$d>%FaW`n()cIFAe8u$z61J>qsO&QSUk$Hd!Q-LwM?>YmqkIo<-Yi$W
zdc1Rb!pK>mbvtJ(Fm5c0UQUt%7#G^ph=Fz6hQW>`(Z1>HsQ5v&%d-jk9dmrr5(iJT
z#BSQ?KMLP<eeD+`ouK<W5f|;)qz*Yr^iXUYMdTWCeB!>1#BX5?^1BQ}?AcW0yb_J9
zDH=b%ohSEb8q|jj_0?Z>*21^J0N;iKh#y1UInIp*;|EB5jxQs)U(G97#mz;&*R(l(
zSXX@@+Z%k+EafdaMHkLTk at M~ZywgkDH6 at hrOQXGYFP2k8{vv%pH at W_{WievvkAlBW
zD1HQ7hH;43y=7YD at 1sk5xuaIDdsHdW?&XQ<-Ok1E0iR85saU%!!4DvJZu5$$7~R at A
z1EvsvA0M&dJifCF$D?wq%J0x)unogDwbo+K80~G!^&eFz-P=SblsDo3-=Qa223o2K
z?ZUW~dIVyPjXN2pTF1 at JdchQTw|BSVVW)2a`16{j4&#By3=e5R1#)}4{o- at S10@e@
z8apmK$#<jwd)8KtjDg?M&Ox~%Upj;(i(KJ;jnF+rz#iF#I!;3m^M5>BoAW562=Xd;
z);%OH#}7W<n2&A9Y5fZ9I7>*Zt?Cx)dDJ4(y4i92_y6io{ws9*h<PLaDa4;!#ZcpY
zD%s~O at sN*)p6Ox70{+d$UC=L#F}KnZ?5BpD9H)jpVNAAt6T4pkpKndo(6<nrgIc=U
z&*Jkhw!T)-hfwgif3ySNPIAcl`>=Hmn*@I@$Zoqxo^;sjYcxyPe$)Jq?<QjwZ5bH@
z{^)>yE(M=e?arJD>#UGZ4g at ESVE40t(GNP{{kL{h3l{k`d0I3%Y at JGAcK#^1PQH)7
z2-pu9%~$Eng8zp8Q_#siBg>!3&DFj`XOMZ0x&KA2dyQ<bn@&&+n7aK()r)pJy#;$a
zZ3%z$f81S$A at RkkGJFGz??C1}-dRJ}Y%V}sX5+mBeq^nK?-$O8#f~H26?Yd{41E=w
zi0xX{6#7qsBTN1#$H`lzJP%)#KFpEZ3#6QyddYZan}lkwcU1P- at C+LVGY@_^8M9ox
zxrT*nD{DK~K$kxH?A}f~p;m6q(Biv*&jfovMf`O#X1NhN*<R1{?IYjFU&OH>kC(R}
z^wvBnWHk2Q<N4>=e{}(Q;Jin72u_hc@{s=7N7w)CBe|m4Jgtk%%{3_2R+2s%>aXP5
z&If~iWg~6&i6H$nH2*%=|Lg6qYu%4zvHheC$l=*U^x=MKY#U}GCr|9#A7c#8^s7c6
z{QwN4!9E*Ca0~LjfG?QC#wGn$<oc`M=-F()!H>B^%=Vpwm&=(JnrnD{ZDov$?Zd@$
z+Un<i;A}%4w0cRnQ;-SXDVf-q^4@^oQ{MuqqK)K;g`VECEs5My`S*KvvG+)d+tIJ?
zd|52pf28fY8Sgrn0#Xm1#FGK%hREhJ(!N2u)8P$Yi*nE%9XscL1@;$9k2+H*OMSvy
zeTCyK&HF1EH*~?4$^@_N at DqJhsT}>72TT&gkKA9YtF_V at o_1aOoY5S_Eg+_*{dFFA
z``PtpLD%Y3sDHGvs9>-!^BG^*DdXj_=g63goXEKU>Z3d_LPyX~j$noPwmgZ_b0lQl
zCVqCDJ?wEW^v!!n|FN{h2^<v0)4IjwDccO6di<m9s2_S2!uxV07!NYc895c;qk=Ez
zQuvI>QFr{D8n!Mi<BkuUqb77`gw*WRr^ohs$jXn|B;>zCe<|b4VEZZ%^+?f9 at CW!8
z6X+_zdH7^G8BK0g at G5h*V-*#HYmRvNoSOJOXv6M82l5R)n4WHFwrk)M|51@^m`rTp
zEkOTD=Jb0=Edw6{kJtFg<^!?Il%*b0%mH~JVn;A<b8o)z*SVqRz)rE1<WxQ}RTT!i
zN+9@*FRRr(O|~_ZlfDA^W>0=ulEtq~FE9SpFoSv{l at Dx>@znV2wpiyVb=*FBA~1DR
zL!Q^q9Pif44<Vk?^r3B1opYi-?x^U?k<M|lk&XIQ95?RoNd3~Xz9ngtm8U2E8_&D=
zh*^PO)klW;Z*FUl7F#3F|6gTsWg_YLug1+ZpEXHiEvavbbNP<A0 at 3cM{x!4L$<{0$
z(FHrloyha#zLAaNH0JMV$>4oS<D*_?#;^M at I9bxkm&7$;ZHL_{q&4!q$?8-swE^F7
zD{{+z#XDkl+2)0S2SS|gLPPIa8Pf|q5bzA8nb-q!SP!fs&hKXNZ9irqj=v)M&D*1~
zaj=cT=7Y@}c9Dzl<Fj)TFosBc4e_OxaJqn1(ObPtH3s{~*pJ7)2m9&RcM~7%{Rsr)
zcB?q at eEmQRQw-WTu{}ouo_a;TgHbcJ at iOJtq0TH|S=9|&zDm%Hwa6WxH^^h#3zR-N
zuM;ea(x2i3IeO!PCojdmLVTC>w%-?Lg_*_g{~r2J9Fwt`fxQs>bnF*kpN4&6z8d_b
z3wSseLZMse)NyK1haK`(C-)1|Hp0_Vvm&1YZq1lU+oO?(&i>h?x1oc5f+w3)mr3GB
z)KpLo>~hfxZZAV49&#S~Q1L%8Y7WXNJNVDb%ABF=%YwsaC38Bn+7Sc#hGE~?1QJ(C
z at I(;DBq?o=Ci!Lsuz58q+UbIsZdy*SUet)OU#{p}ATggUoIgVYzh@^$hWGQskI648
zpOasn;?O6Iu*<K&K8IM;*OOpFOwU!z0?kbul5%Xi(eHGYNvN)91>^L%)^K<9D1rg9
z|1SMXQ9h%d<Km9V&!&^`j(dtH{?cRrf%i0s+wvT6{HoQ!0TnN`7plb7Jh^fjiM854
z2J-e=?8joij at Y8~_x4`~jan_PCUz at Ys;Oc3yEQi|U>i3tY}GSQimP#K at L5j!(6H-l
zF8nM4RIBJ}%|pFrdw=Nqbxyt7 at LSH0<&E at fu!X-i at nq)BW(U0*b^CKpL<Zv6UvmpF
zCvJK-+I<_CE*Z_Rxx)6iMtKaFMGo7m<X-kYCqakeff+8EJs1CS=KMRz-+gKSOwQ+~
zO#!W at MFB0?z&i%~3cQyxjLqFFcGb+K9nHgAcN0Ak%JvZ1!>E(0qh(Q@<a==ZE{;2f
zj<-fb?`}&c-(TnbT(b}{(5*W$h7UzfKpC+9aepavE~F0)krN1iqT<3vfOxOgopa);
zAn!=(62}WzH&ewYforuB`T{Fr|Exp%-$<^bSC?X}%&1tgKd|D1{XrEX;6nAG-k(%6
zgx!Iga~=on$>~FUsiso$&W(DW&i&;f$~RbEaLgB2))iLdmPmpR<OF4PbWU6hQvkhb
zy62M&(b<V{obmL?Ro_1S1Tc`Cz_qD4DAJzG2{yMo-=DP24t&(i<r4=oS15O`d!`yZ
zH1LMz;(uqrUs<m0H7nfidUd6<LIC}FhS);h!yR4F&tRVIN2~z8qaSuA8)(XTI-|g`
zg;{M0fuE+gl5M|dw3vK1Fu}Zl306g9x7c&s--I^UQEDQ&QFel37dbu(xjl0q1usJ!
zQxbA}rXhZ5KYVY1`*<M<{8AEP$AAIAUsLDaIx6-qe-Y;IvX|8!7Ob1d3#j>(()&oO
z+~bp~T)S1Hz0XVJ?(<Ts^{@9lZ{Uds-vha0fKk^rx*-onq~*4U$URZFrxSM94TX&5
z(fyARyKtlVtPQza<c&*gukmS7Au~zC1CHnksfs!vp^U7oGt;lO`EsiP*g4mLLsSbK
zXzwYr2(CH at eqY)%kckOi{J;2!FU|~zL!7?0E^|D)Kav?3XUiyy8;jUBZ@>CU4g6^(
zz{Q&M>Z%Eoa`|G6<MES at CQPH6+3PQschbNr#D6;mpTB;-m=n~()Al7yL%;gt`7T_~
zeBlG!>)x~&$0;S99aG~j!Edi;RT^Yk#S3~mAKyM=xX~vKe8Gj`pZb6vP}hfl+#u3g
z6a0%@#P^449DbOb^TngLEKqpf<&KTBEf6=mZ5rh<zIav_<hF~XjLt_{QT6tR>Np$9
zt~T&?S{bSG2-f(2Fd~eJ*U9*o`$F$$rFRSMz>B}e%Up6pwr#;p$Y-zt%N&>k24BY#
zOY^+<r;ghlo<np(!AT=sV|T&#r^?dYE#^26y+XNoB1^NG)p?TV<YRbp;Ppc<x__ep
zx_PuYh|pKygIy$;{h&)@#3w^Tl$mYF$xU#rNLfb$=G+UdSN at u_<X%P>IYEDI|6IiG
zEyB9WZ+6+zu+AJlwu!}~1TR*UfH{z^@7^JawGQ%d!w#m7ALP at v_=QyumA#o7G*osc
z%m5pGH^HY7sKaVFTf(Y2Ojs4MCEl9~*;qOUIzPm-`;xrFDD%ZXL7X4rV2^(iRNr9}
zF~FtLj$~$_f4#(45KB1h(RcOjcHkseB>2QIK{)@I&>O6gvXE;8zsaw5u+B>|V9n26
zO6*hZQxOY$3Hi at Eh~6n&LG(oDcu67GVn1iP5PR8W%6#)C;wH&_y33v~^KlQ_G>LBP
z^c_8P*o?%|?w9CsCUgsMebg!ra64|7c~Q=4^?KLjRHBE&eeiXcOO>$Q_r5q3>jGYb
z_!UId!an&+u$(cc2jIJBQ9;eqjyS6&Dh_fG%ot(u>&(7!8f)0S&up>=_gHDBqfn!8
z7H&qq!VIiiBtEqY_A?Q|fPzf*EY(48LD?O|%FVvv3En<t+}=5kqdOytBPSXbYNY1w
zo4|k6pkMBJdb$q&i}E)A_ecXUG(IN0v;K!~%E-IxJB|InzE3$j_fnlF9NLaD4=viX
z-W8snb*$wm<$ztr*@AHdKm6{}N;Bd{hBpTKQ;5|=p31S}>Oy_<e at YJr&*x=OSfkAL
zRN!ye`fpygiNq&2&rJONpa}l$KWNK>_7C3!->ZwT>7Ojxhv&Y<GY2W)37YM>gU>Vq
z&+lY2+Q*Iq&;0Sx8TIY`z_)@wkh?PjIlPnMv#wSk)^k`FPmc3N_0~(v40ko6p*?Jn
z?0NFgK5b~9KD5sm+Gh^!Q-=1bhU*%cwaG3qT-5;UJMVqesSw)#9HTS+H1Sf_zwe3)
zvLSNbxXjNTX~_B6e~T&3$5mhE1w50iY1y~UjT>i#bk>&z^y_1S%F_9J=i8*v|4a8u
zY*PQi?AxA=1m}cY2kykK+!>SWpsRb9QSVhF#=&en{CExW6+8moJsF?D#>0!g<Ru_>
zztQS;EpKS=EE=@2x?ZIA(#=%5 at sr$@>=*@2X`Wa1 at kxPp5%^Lk at RiQSiEp@Vb1^pB
zIZdXGKEQkNaRXDtF)kqI^qK@<+(@#KZ>_8XIwQmbmQ|QG`M7!chFyJI*4ctJ9<#FB
zLcL}uhb(1Ml-01iZ{+cFryvFm7%%;Mh<=%7@#x1bW>PrToFA3dv12jLhC}a^ggHDM
z<8v}O$NR%Lk7whba|3Z48&}I)2HNrz>Xd0e;0It0 at Z$WE$;MGnI#?J4KM3{H?U^Gg
z^!J8y$};9p;?+(lcRB;LJ%wYcYg*L!evP%s*%*fWdu3l0vh+fK3ipz4*on3t;k_1T
zWjK?H3ahi$X6&C-Sg6r|eQ9;#LsPDgJLiJu9 at 82hcYXFYSLVKn<(d1<mhKr5&t`sv
z<MOCyi*}FO1dLN_;bx3Y1LzkpESbizn!nyfzUki3H*y}+d5SrFwIU2WS(!>r1=?;?
zZh1QVYn~E(XLC>v*)L?Rr*q-MIbiNQ;w1cxMxywM{3GNW!rUb1$b$-BRucD&f8M~$
ziyt8C#U&ZT(j?>}Ebm;#%F_2Zd{PejwZ_ofhq*sGPH`Lh`8E#v;gals&^Mw3J@*G)
zL(Z&Ay0qrLb+6S?M-!=-!EvpC&riui`Red at xqixx^5<a#NvFGD>llz9$wDpzFT4D{
z+1;B&e=L7sZr^~l at wsh^NX{OMz^($Ox4QWX__XTi#5ijOY>%+Tb)et-Gk at mXLyYOy
zndy^?80n-wwBw7+OwNPMl&4=`r=Y$=Zlr30a|s=I5aAo&eZJ1Ud^YH}On>k91ms$m
zAh+KVPK_u7x~FvLpDSTAQp2W?*cB?CMhy9gtMIqaBsv=70j+RQ4^Zdr#f6XIy*jEo
zh~qRPCXK8U<?(gy*3Xbv<3P(J-zM;{($|g{Wk2!2FIHAcN}Q%;HgDtMSy<oZFJpOH
z>DuW=2{*(j3Eg3oOo%l~TW=escjjRKwo#IE7#rT5ebgvP`VbrPwww$!9v;8KC^cL&
zO3m|((wbLs>}{0(v>W>p?BB*V9osFOXBws7)f=V9Q;pJZpEXKrD~*Rk-z4wF+_Xlj
z(e~%aI#%bt{XXWr2-qXQ4=G#4sUh;9 at xX|)vGXDS%?okIDk at qoNpdYAa*hKwfJb&Y
z2Rh*+kUig at fp6=ql)U at UwCw(F@}EDQo{zb5)2fp+H2TVhXvyq3v(8Hz?6juJJyR9#
z&P+2LU%!yEh>_IZp(V{$zip=WHkGHVa5Z8$QdGbu+&<jI9edBW3F{XAnO{jAb!-Lp
zqw8FenRU*E$LpNJA8|gT&Rz6#ox2m5**`%>@kM+>R~GL5ocv!ZW)PPEd3_WFCxF<P
z#}1g6)oRR(*1I?1`_EL=w>#5;dF_DCC<U}cGQuTTQ&a$bcWY&WcTlaQ_*SLlP4_10
z7RJL$odX6Cb>=WIYZx)hUq%994f8Dm+hq7se}-){i7zjjgSOe~T&rG7bO5hE3^uN}
zAd7rMY$}o7Y&-hN_%JIDO^+N~H_WzL&}Wo1zsu@?Y=)jq*@DNwfx?)t^A3F=@WT9c
z#eT|k0VBc+-6!N9DhBq1wrGCTkI|_OcfLA<+#}@QAV<_RuXR>N23-VVL*T2aNy%<-
zy9r)CXv^j?l%APM at +@d?V;lgJ5qMo+>$~@Tss#S%Es7h2x!$YX23bPG>|~xQg6>8)
zLq%}BGzR(3ZNOupjE8G};(biywOd?l6R=Ih_9V8aK$n_;p9gs!cBmlMcL%w;Z%rWU
z>%NoVv&Lts?R;(GK?&uIMoyl6Cp<t$Z#_Af+Y{&Cvgc3n(&1N at B(&k#iR`oA!GAP)
z{~g<X=)(oV0m!wtBgb;wsoCTkl||qIKdVgeqv>%Zj|9R0CA_aD#Mg;f?%@sAH}kT7
zVKFzI`S7)@XxV4PyS_%BEhKy!i?`X*Jnt5_5cuNzjE4Wd`W&$IR})NnZ5!*KJr}vr
z_>_&{(S%N8`9;}oh54B8%%idUK862T_0mRSH$i*3 at Q1!l&tH0*ZMP9~MND`XjEAR*
z-yYRQCucR#$@+Wy4rf7D5E~X|QvE}|F{gzRed at kXPk(63!gtOWHp7?V4)S?kBz437
z)Hd}MwA;w`5f`yG$R|ngm{doRXTt^iMjI_g-N2qBb<^dfoilprbfW(iH}d5A{{Rao
zn)g<I;Gft!h)aGtmBr1mA(p&7{q at OLao-?j&d2{>d>z=P{=(ORE|uW>3}W#p*g889
zzfQ1tY|_^ih-qi>eY}V*@Xz;4GP-e3+q7id&p%zK7f1Z{{zHQ}J;-l|_-!&a2qw;7
zxIk#Pg`U5}W-Guu)aFiJ@*nMH{f0?g_8!<c_Ruxxdjl&2mI5DZEBgFfRbvVKLBSvJ
z$e0AKA>YqxXQ;%3Qf&uppL*iYhVk%Z<v+Aec1)Z=EDy;EDj at A3c`R-{1>305nSt}~
zJYBdC`E74agpPAO^<aM!eZS(=z7v!R`p$}Kbziey`HVgL4RP%(_#PRh?Y|<n=Jrb|
z|M$FP7{mEjufV?w`7uP<SBBerNA{&=V?4|yKGN^CBGwegoF?eTt9am3?U`&WMJvMq
zXFiZTE5^E7=i2iLu_Kclg76n%WkJ=>Xyog&&4=%enqz?s+lFtPz<wV)H^oNUpXATx
z?BVW)Pxt-5=G9+wYQtf~u at BBEdT35r@|*a`RVceU<%R4UmhG<O+%ds9xf6m@@@3!^
zuKK{=ke!2t4L{nF6_ at 7#6W4DMWsO$AcNlqN5JQc*n&(fjn25fg_7^w$q)_kk62ONf
zgd24U-}PXOuc^+_B36&>&zpHV+8cgXvcc~YLMIIwv;r}9poxR{0fV&d+N=8RYXO9|
z9XiR<wqb;}jc8?da=3rdwh^s^wC&JI<KeGg9HecB&SOn)06k-A<h9|bXEa+++287U
z_`m9TI8;v=>PZ@^=M&U(0QCS5P`ei2c@*FBG`9Ih$-9W-E16O)*-;Bw at CVRi(0k~x
zB-+{N2P=`|+5KVtD}(!E$?RV8?s1}HupfoYIukZf*#1;Oe)-7rfIQoy9L^cqV@?n1
zPQ?>`ttVztWw70KgZDimc^V+3NtPT}@^f#T7;gSdccIuQdB$?&ZW_i~A%%9)AMwUo
zzPd|%`v|?7r>NJB-Ut0q9c4~Xn02GKvd5-M#gDqtrN7w_V`&=;d*?e5^=qeQ_DCj`
zt4X{-bwWAh)4nsIg>3HQ2e6M_GD_Y{<-KA#(n)-&rXVMv+;HxMOxQL9ad5cyc`UId
zN{Sbd?{dBb8_x%E(a0T|3*CjA1KzZp0hWhKSp_}xA#NCSbj{4Pzy4pqX1%0LV_w*D
z#d!Gmgu#Aqv7$en(Rme@%GJP_VmL9#Szz_B4BEATJ$wt;CCC$rx{+V~)ti6P`)<&O
z8g3&6na{5^bQ;>Si`Z+(9(IMM{2G$`Cnlb(8<>*{;aO4-q4niz)-SvJ4;oyq%KCuE
z_|+2H%?&QzZW~*?(#CIIrJ8&CO&T#Xv;w)x=CxQ`VyNyStUKjus>68}@d>LbV34+4
z37r=AB+tOEHM5XEGZ3`QLYIkaq|fEvIC-danJOUsG~%B+PJUJ at s{QosE0qUE?F?Nt
zh^6#E`Y-o(Nv)$^?sP>-mCLYp3~-qcNA_+d1^xG9(@4X)XVWa(ZzWr{-xXQ5_sccc
z$sF=~5&7FASlZB?_F?!Npb=fV3-9#e`Cj;~_HlPiJ_h|+Jr8lYwpS+~`&+rew>tMM
z###^VdyMw!^lk71{*CzfmsSjZzw(<3NogyvBkRHQcTZh~wQ-g9Q+iqW58>H}4_IPZ
z at 5+pTKZ*VZw+sFnY09SbTum>==@sc}_zW_Ce8=Pl_y#RTyX;c<L*sfYd!7GWu_Skh
z)-0#?k$59uo?XOTy9l}*#5X8ne5;k;IC<J*L+!Z9wnKw<@Y!~}F=gS<*jN0mt`(Yg
z-Qwal+eoTQK1tR?=r8^E>m*Jsj;;S`wtla{`X_C`daPJ_3GM7co}4S_tA6CB9FTUI
z at 2HbbTcd>$3SO$^QRgf8)^zyKr9~+8{89E3YQ%t$@6SY8#?ZYYyrYSd10V01zkdVt
zaQLp%+fnaryvrBu^c`yFaOta-fm=jx6KiqZCHqT+&gSo?)j~V@*Q4AK^~9cpzWjiU
zhZA1f_Xqon-XNLs-1#9|YYr_WesWk#s-G)n<PkoST=M<MfdpU0H&>eLB&?qqscRp}
zT}l1oCqV9$I?9x#=+UL^xkujRn=j~K-x(ND&s{yap0o|Lpk>FD`JLq5;bVkVxbE)o
z6PzP^`|tUIy0on!@N>8x`yJYSxOx=t7%&xNRJVLZxszU&ABg*?UsTAWAXB|cj!lf_
zZu2~M at oW)%s7#1~FcX?mT1TsKe2N^G%m+=$(Mh&Cd=N{6I*+s0o at 0+aaIKWk8#2E`
ztsJ*=1pXsa+B!Lf{f{>3?9;dPqKIo4OH%xY;Vl0w#=Hl1et8;M8(P}gwIPz_pK0bp
zX58Os6g{{$v;eQ_+t-F at lpX6r4SX;`OF)B~^gGJaPVb_ZYCp9lENlbc2Ogxw?sRM6
zs|)&&L}(P at L0j5Gr%^8vey%(X{M-<YKt8FnzT+!Sl>;ZVT;$g at ZU)dx6G`1T2WBGh
zmh7h3fP6xqxOrhe()s1cY5I%@@s0JnJo$Un3;)SMp44|YOUL2c*mpr66pmQk{8`|q
zEQGiBY(lONRbr!bWv)F~tz5?K6FPleaqx)`|4mj(;<l-y9<t5EE-f66oK_uVeaR~%
zw&z at 5*WfXI1!KZZ{BS@|rCH|&`v5+uMHL^ECnf$2{*Ym+NWW&@1AhmdsxMHOF=yr#
zOKF+%5;xCWc1_B0rM^bKjqt-Q_CNUQ@&wS`6ktBqa$;2eiVk|e-*@y0g+t{}jRkEt
z%%U+?C8dqhHI{+9YGBM%!?*BF;X~=Tb(cb9&#0vSBWD3~-FsXfc%_6K2mIeV3YlkU
z(86})$hML_@)YRP$HAv|H+bG_`g`TeGkVa at f$3uKr0J)vdKS;J<ut~L=O1{M#E!`=
zKwp0gevJ0)gZ#qAHemfY%dQ_;$`28vs<BI`M8XS|NlM(UIOaxY?IZlVZKQ7?_{P4W
zd3kkcUdo5;k#!rAa?52&z+l at qRu(i4*p2U#u?(C&m37$bjkOmyNX<_WoV|ls8{U$%
zy7ptgN<wUyz}G$aRAW(I$jP7rJZBGCu2aA3 at Y#az&kXq(d3-u-3EIc7*Yv>mvE44R
zv^(XR-%!>~e8==pjIvitKI%N-WiDhymXmfuYo6hB=mK^S+M>bsZ{UD*>k{52=UP11
z4?eAr>tm=gtq~mHd0u&fUXOOq(YDhH%Olrx;?IkBXP9f3Co#1Z2Rnw1y^&pCkDN(4
zo*qp>`8hp<>z(HTZohdX$;Ht3`iWBwfj8ZS;}y-hf#EO9pY*KKCk(ge{AhV-s}7ne
z_YMCip{*vN;T-Qh&ttrJ&+m8w&(C=LpqcBQ2!D;2GLE+~ApA3V9q}U{S;Z5L`vm8!
zHX`<pw~Ms%6;?O9W6IF_l3j6X#}qO0TZ0!@<ZC3s9ET*8*myt_a|U at Jvi=ZE$H6?_
zkcYECXLR(Fh}rwu7NG4j2 at Y{y(vbWulne6f738C%BK=Wc2FuS6ka5BCC;w|)K##<Z
z3uZiWR?R^UJ!dnXLC#ober at v$zxaX<o#qB%?yOc;F-CoE`55R{?;tiPgX$lmK at G;k
z-+jzO{vgboI&5bNW(1Lo%aOzR<F6nWFC}z?m5T`tsv|N&xe_$$#-DuB0OZYnB5Rf}
zAEFtE0R%ST1EQCl`Z{?YYf{?MCVWR7JHC}zXOl5sv)K6xUV-Y1PJ)d&Lwt<L*fg-;
zLScI at 2mcc~jo`8w&Y8vTVlrnJ0{bF#4jVsmPAJx=mM{0)b0S)63Vlg<1~PI#XyuQD
z&mw%z)B?Oi$-biwGIGaX^9%f1hR_b(0p=d!($grL)2b!>7NMyPq0<cSnbzq4wPOl3
z=YPG^VSWK~`9sB2vOcgj;vb+V at iO$*ZGny^0BgWVwl5FTv!G{L1plG66azivp-6vR
z8v%XIEJIdXu;JZJDubi#$p%5E&O8tDCm%5^qnLfUJAq3dmvANch%JbEd~i7hKW>u0
zwD%(SBXjjp!~p<fdw`RWKmKH$%7 at vbu>0p_`!OHD5BHOeBUAy9V>=DE+nzL^7Nr}$
zIB+7X3;0inv82F at QIC~kv%C8uV)Ek4&(X<Bzm^8dCRzto>1yRZ+|w-$H at j8u@9(0M
zweTIHY|`*K1r=*3M<gw1We``iYI8YkLFC!;)wFo<9=h<)d)j!%p~p>$co+E(M#U}7
zy%L-hcd;P>JX<)9=X+e?C7^A=xtD`eJg(3IA>ZBOYn`h$PpUBq_I?9=4 at -02p>;uH
zbAH&U2Cbs4!{`mQ7dIlu3ZYf)^WTIYO~X~cenksxxu5V9oX<gnYk}>0 at 17cX&z~bt
zz>+enO{ySxudRQUEgLLD-MO at 5L~ZVt5cktbWlmbE7!4mK<Xs{@OWMmeiMY{}I--fh
zoNQu%(N+T;Tg^l_X!XqKLaL@)N^BK}*2($dFYBd#c2nlwZ{(T!K|Ch-^g)({|G<bQ
zd20A3?mrB at ZBK@G$*(Kl#(m$SF9-1K8dKZ|*gOxt8VP#^i{q3@#=w=4PDwU$6|?vh
zJtWtfDRG2#lXNhb+9t>nKJ?K2?3fW+zx=e=9h}5 at a!#`1;g_G5xETX<eBW|nNWA8l
z4k5wNij9SD{53Q2<rNGkIBBu6c<2G^sB>PxteuB<C6u!GX|ae)vS*SpLws_wZVtv-
z6TL}A#kHRn-qv{`cZ^p_ug>ee$IZhJ<uWrBebruCZ}>YOvU$MY*-M+w%*egW1Y`r7
zgHydRAfSDmC8w)<yw-IhP}ng|?kUUOOeOOwpv%+{eD4vYpDk=Z7l0<RHrR$Pzed;*
zmLLzdgq6#05Pzj>J=nU6hHSD?G<>Bk;I$foOQs$zE6g8$i5llceB-fp89#abEqWKn
z5fc)AHd+>bR?Z7Ki8+5BIiPRqcyIm?z3Ny`#e<4d8OjQMMwa2z&wjvs%^R|5MT*ao
z_hoFsR%p2XNdV^;JXaT4fZWts$aer-G}FeP&kdF#Z}<;&9^-G4Yq)pKm3A6-&I~2|
z;zR=U>C?Z&W<39jhir?(Gih at tedTpmWFBNjX}-i)&3O#FEO3D;KDZ={2WA4*6upe&
zz*<<yq!9hxx^r{@a_;OW_MM0oks9S(V&jS|0H5%wf{Xj{otu1s`RmMiVd-zp@!SH~
z-S#mlb>8C&phwXv&oeK>hgQz{h}2CmfoR5X{Nqt^E+#nQ>qwR2lkCo50i#Mp{s`f8
z at MRUWdVV$5!fLh-=%k|`CSCy+menaOciHE{9<45RwMa{DVGQ@#)Kvc<4S{|fc2D-6
zc at f=1_x!pFHcz%}G3P_fP5V%JD>D-^E<>)t&N-LFN>fdIDQA;3lp{wQe&=Nv9Hu~w
zjZ8x|H_y<uzJOp=g1*9UgL at IWA$6U{2rK$qg1qMGtna&x+_(0m!U<eU2lV4tFy=?n
zyW$_3<{0#dbHMug+G~(+MleZ3Z7SsK;Y)|wP#EzwZKXtb2C)lxw?F%CJ^OChmoUbf
z at b11p-#r%nKOstwypmWO1;^whKQHpOfLHJNcbBl=6me%6Stm at XzvM@%74XRx8<3~T
zPVPg at gd6_CJ^$_z_LvgyD9owhnf2-&ZshB(m1nH04UxeY^YFC!&7$yEpbvZ<_5V6p
zKc4B<-<S8A+v$MtZ)b}Ljk%-XCDnQODTKaEnWCQAt!Tj5?+wio*4owDM%XG`;6vQ`
z3t+>LmRs$K5j$YFaIKnv<ArQlyL}OSSrMBeN-uZis|`K7o(zwfrU^%0iW02PUmpQK
ze4h^+Hv6v at aCS1kKpsZyAmxufKpP+@_j<p`K1X6h+Ti;s<0&3=)0gm%Gr0DH675;)
z%Fz24Dk9mKQrIYfwa^KB2sL(Oz9uFadHkNjGo4v4`!+VX2P&~H22}j((t at nr8<Ula
zLga*7zfPIwza{4<f^qf7e;957E`UF9HW^{(5WVEG`b`Deb__Wm<_i1S7*|Easo2aq
z*WRhZ0n8;E(M^zeINsJo9`q8uMrq0>x(Yl%X4aPIG>or>z=23p5uUV|sRhq!0qs18
ze<ud^tn?oo9uG0^>BP=e+zt7<uSMdkQ4Yg5D$MPL at 0V}4TS8W$pS$%u|647*5=Od`
ze_`69sDEMncen6MSUg(2I;y{g at ul@@VL!pA#j$GDTJ*ER(~f(Ja-^J(Nd3s8x&=9^
zKO8#FL;l(B%%4jdAwJmQi?l_0Yf_=~RtWxS$m+~yU at 56Rcj}q)>6y*&1&xLcOM(Ay
zoj5?AM?3TR;s~}Kl}w3-xeR#{|8n#U at Sq9~!N%<MX+mz&zx5GhUkzf2W8nAJ^83CD
z+wbM0YV>C)cjy&m9#c#3J8uYVy3@(@OB_30^at%Nd?i|d`5_ZGsTu`s7%#3p at KcTk
zhLO)A!DG~qdn4i_HO-v_Pm#BS6UaL<)W?cAoAepTfFB_yIf>{x$bA%-x0d`LjJsNn
zg{33>k}LQo7ryB-t3QDbN(q0tjqihJiN|+K@!fg&R*d(Sgp!No8NCF3E-h*1!#9H+
z&nnJ`%*DYz at O>A3ARg=kqx9ZK_-5FI3Ge2-g{>7lhQ_RLtzy*hRZ_UIhu at Nf<j~Bo
zHA=nLL_^>IhtJPw=&_%Fm>&bZU{LKD_yd0LEr4&u<mif8`x=?pnj;a~$(Sa(C*lLG
zdl7!@yK?=5k1NLcN=F3_vmlp2a at P5ZPgRE)^}4Hn#$1Vz#|Ul2nsLO}LdGM<9+HL_
zEcmQ;CUg2iWSrh%QpE^e+PedcILArio{hRS$SX_iy7x~oD$QfW0=szg$b98kd_)3Y
zwp at e$_5}veA=q+dA^*uq!+gS8qL&sA<*TmvS8=@ZlKFKPuuR_XYo6!4h1^<Yg-poj
zDL?94isRwqHD?rw8?ex|)O6j1_Xa|9n`8XEI9C0xImr84`UB#c+kxMPIA-OSTp#R_
z>*QvVawBX2pkw~w#Qv$LsoUH at OL?a#*Jb|1%|JIT;_rg&pP{+TS8J~Tud|T9%X0>A
zGwW}DsWwyV){7`R){GQWgMT=00s3bl=^yiDTA-}fz4%^dkW}xn!va3o5*I^qOWP2$
zlF5s++EnnVygAw%_03cVAU;zAdkK+GucB>I?P*#9JL57E&lwV_e~Y at U4|uAdPTgE^
zuukjHHwN{GuJNm-Q<XaW;~wMTB#CO*W|!{g()Li7hwDp+)@2&GbxP=Zx!t7QI)#^g
z`X97Xajqh%!v}e{FPwBi&b5^UqCKtfvH6u(kT_s-mv)o(;k+F<_9T83y7I>tBFAaI
zAhz at 3rH050DT%${-w|i*e26$>GBzKo)rwo at Y0ihbGw<1ef7cFw9TL;%?#TSJjt2TA
z at li&SKY>X)HPa^Nz*lRqe;{vm;h6!*5H^DQWJ^aLg0sMgvugW5`|^A)iBB at pA~g@#
zi=8UXMffZ%Rs{%uwK=pEOa at yQa2x)p3$Y=yHG3l`Y*fbwBEBI*c^!4U$Htw?5WAd<
zzI|a-txm$q`ul8CDVJ?I<<4#}?^&G`oIs05dvkmIYNLmP{w5;sM6NN~Y{-`?X5Z8Q
z*L#E}?#YRE_|Z8CCIbGaD<{d+o|}m{s0_i)+4A96c#H85#acTpBEBPjb{l*`HgBen
z+LBb>`h?N;)Mw^*K(_oWbtS83v9jY*qHIDub~o;Y4Gr;<%nf(H4zb|NphufK$4Td9
zt<BSkPyYFB$XEF1x4lYz5IK%|X_mZPLPJjSJxOqhFlXkHIph9g&cN}Soip#Vb7n5`
zMMw?3=byy(6t-aII`fj at xAP%Pt!aJL*QTN>BcsB(m*K+s5r&`7KY`<sxNjIX4{XE9
z|L+!<L%Ua*7j_F6$@a6fwARvroH-kVCKc(@-t+ at j$|9mC_<b+<>KT3-`1Uobrc(ag
zi?DgRw0#(F1Ds)0A7Ur2Y*Z;Lbo<_eFId<a#O>dOefus?1Ya>Zbb*VIXIvfp9{T$p
zw)-S at J1y*)x7ymZP7=e8tq)r-wjMn90QWS(kGPDrKgCefRb%0=<1f6NX7QZOsPFBv
zE#qj?gC<v}?b<7_$@a=^^5FUOROXc&-*p#rJ9F-c0)6|BNx9q3Nj&;Qf$zF)^4j(y
z*~lD$#S=Mv6`{WH-%Je(GqghYgsl%-FSZ`&-yUFVf<AH=T}Av$O5B|_kYCe4*A}b`
z44u`yfKJJ_Z<MYN3Kntfp<>X^B#sSx*x})qE9E#?><*FmJ4Ri+la?nAh?eiQ)AF!4
zQlE~!#5-X4^!#zd at wJCJ4mzLsotdhXVbI%+Eb5FL(>#Sv;5aK9JG|>{QEprZzlivB
z?2S6<v#>99LT}PX>}SvU7q76%LDy1?$I(gDFVInYKbL}-`b*E|t6o=l(kTT>I=}Xk
z2t2m&@aHQ$M8G_eo>C(QD8P3HGk}<lB<K)0wO+;c$|pR};#_3nEKV^Awn|MwTjliF
zW~Xf#e8ZNRtaKRX1zKk4nsys&UIO^-1jE&7?S?b`eFjH=Z at mEieDgGontP^Ai(kPS
z*-^>7^%Rchn{u{FO!BQV^MAWn`7FaTckq0QwaEs*#Az*fegMz+>%+I-_UtN?XuAvy
zwJlGFYq#`Q2aL^irJr)_KEw1^`@hHWx10{NEf;NDWAa%n at R^{$+Hw`;Rh&+gXP`V2
z<q1Bk^;cUrpuCYYfO0X)lTrSPPnP~_`@h-yp&LWHg0{*~KHo>Bzj`l)E$>D7YLvf<
za=y=E{nfj{Y`G2PX(&%e`8=N#{nZEm=Jca1sY2NyN4W^)h%=|tMh&YELSKw=^Pm&E
zZ7K5;l6XF$uj$%|>-F=3-1Xu;Zo`?dE3fSirlP+g`m(TX^{<q<H>SaNUyWGFWQ7;T
zJaTY!MWMb{{GZQ|KVTv!4RiG~rU%EtD3fC!QZ0F-mDnmbZESG&OjT}61kc+!1N)1J
zPmt`l8V?^1PHcjFywT9bVw)v1+f5-{Rkhc4H}O|9Z#w)K?|1~6<U1n6TQ8BgT249c
zp{u=0+~!SRadCZstf>rgQCKHcoO=7H;kfcr!y&ta<7Ct`v1aB`c>W~uTe3!1tl0jO
z;mrB(m;;Ft4!oI^70j;Sk>gI}+%}D at 3Sk1KJLy@bs<tpP?!hl=$({q7c;(5$-3l)A
zVtuVM*;?)Xw&9RdLS$O~)khm}-%hj-GA`~rP2}nA_v*Y~UIkuq5IYTiOeBs&_EWSh
z!inRW|A|2%`<||f+NM at 7?R7dRd)pbR6Fw5aQju+?w<tV_Z~5piNNyzf^e+}VMe=-2
zmh8q^dKt$E{`aw7`P5 at m(6KJ+Y)Dp)R at LIS$nfojWrnH?{D~K-PQ%X^_=d&{eEMky
z_<XjMtY5*?JixumoRSbHHQaCk*N&P|hH@))U4N+<w&G$n-G!WHwqiAWO$5j8C}n2o
zbwlnF9~9!xZBNJd9PV9EM0^TKjwT7{F7Z)2IkpOUjc+1PBVw>go|nP=O{8wUgzC;g
z+&#fcj^z5)*v^z at b2ousxn5yA>x=y_+D>}8Qb<?fn8?1v_4fi-lYD!p+H6y><~|>F
zA$A`0Y{NW{>D1dBf<}j|2L2K2r_16WvGFLtKbrBjOFdI at 9dcc#dIt3(c&L8 at 6G0jM
z6{iWhfg_P4>SO$Lp3aI7xB8e8$9$`wank9OQ(YwgM&bMBU8iJJ2e54PMrqxDW2=C%
z!G~{TUCA!wNqI&+lk*a5D{2-vpv;^P9_1>XuG|t`ROg(2+fNgl&*_67fgU)nWzh>D
zGkigC(&KvR4e+_1py+N+e$(H)@K9Xnj))qQX72}l<TBla7)kDiaxrk8 at T~F(+E@`Q
z*V_VDgD+=}#=e(D#YA$cz|ebz1>Bp0K3(Lt{sj`~hR|NZFJ*QsuSUm{J`}d;c*TES
zqY<CTOP=L|Ox_eLLYx7yy9DLSoLPvkAMcm-k^r`m0_9m7<CkreEg1oQg4?$-&K+GD
z(gjRH&Xo^|J^;B+UlR5oRBIhU;~#J?i(_4X;Q8TyQ%?=XAvtq?C;oVK&fF~IKavHV
zAwKwn*nxG<f~Dlz#3rL`G>x(E5-g%zMw!>Ii2DQ%U!5~g2_Ft%Js=0Ix8G-jI1hfu
zNi0I0bMu?zSrRAwPJ2)q;>#qZ5Ak1r<E=&>S=!?MZKY+PdzAwHpjpFPt<2V?{R at 7s
zb<S*B`GQkI)rNX05dWvy$WxMQ at 0@0 at sfVsjgs*FW;uq3~pTG}tLbtHdczEUfXtnaV
zQ&Q?ONX)&_$hTkyHZE at -+R_KV-x;Mnz(@ghBJxSkKtAag|I at dARW9Ne{Kg(kro4@^
zVXt7mIt$y-ZZ-LLxt$?nsqw50D$hDhBT?pXSBSfAicgr|lqi#px{rdYleC}>A4Oz0
zG_=1YF_+~kf?r|etj^Mzvs-bAmLl$YQN7zPQH1Iim$w-uKLPjk$Zxs~Z3lN9 at H(!8
zpPx&0aPSRJMJc*z(7C53&q8iMaZ at z(4GSdVCgl1i|48nOn8(K=i+ezXd5Jh;2IX6v
zga58DE?*Orob$6U?3SKQTMA%bx>R|<=N0Z5<qzLT4DRl<?UpMAUjl2Z&b{kL!}- at P
z7O98Hid>%ZsDBy{7p?SdDuSQq{e0y6%?A#$(?eS55S7+ZPae-_BF|5BHxH+ao=&d6
z7 at e`#WvkP-P(O=v!Pj3VG^Lm(^dpPVM&wcd?zLFxeZRjTuyCI$cGCi`9kx*SswDYC
z<eS=AoAsV|rE;X3w#2#k<LP^=GMn8c(hwK$GpU?Y%}pgz#PlADv#(mDT!FX}7j%Zr
zu;1N{POL9)*%EasbYj>k(MprMBrWWe@$i*6Q=(%4zMbw!ChC+yV((8~8FdQld at b2m
zN{Zd7EAutYD}T1IxEtfC+G*l?;8=J*rj{vewW%ua3dvS4N<rdd^R2ZnmRp^2z<gEH
z^|6bK9UWHe=l(Loof6}s*2EM*Pwg?KBF2ehhCTi!?g6zX_JR2s=XL1)2A>ZrWwJk?
z`zvIh>(T79aSymFV;^AbdQ5pU#>rh7!?4G1#kg=>F!XFqJbbS!l@*<$?Vz9G;*V=D
zl;5nLq4lnCXtfpJQ`;+e+FE`F at b(itW--!Wf$<Yr@|?qQH~ACe-mjKCx|Fj6*ftzR
zaI^SlOSHKDQ491op<ZGAM#-o1YZn7^BolmAT39dIbpvv4AIcn<V?CHB18vx|&xw>T
zh?XfEQkP*a|75tn{;J{r`fEfdW_8;)K*1zC-9(EU+#k>!O(;kFF|#S`n8+V~t;@oY
zH)%&u>ewiKS%OaxFy+s+C1_6~Mx)&}&T#PMjs|zx3ORDG<VBlu+c$FZk(&UrmTjcM
z!N{`K0?*BjTxdMBsR?b`&0UGPJqvyD7Vz`c97m)#d;M8Pf_#75(2t;>#sgPpGcpaa
z4S4+H1FWwB#D`VTRx3Gj$F$LNC&r8&w$zT<!c!M*OFe4X@=cyQc>?G_=hwS0 at eS7t
zW1yE!@~q({&mTCMuk9!r&z4^;j3L(y|1F$4a%NCDVs_HR2ddSNnnMp!bY#G(_ic&_
z+b0a_na9$XrqD}K{RYXS0bWWxWZs{fV$(@%#m|3~_ot?F1|o+wSU<=&pOGhtkNWOH
zKDjN$cWn6~_R!6ASDRFO5#w(+H?ODw at A)OPaFZ)?7 at i3L@8H96`N%j<<0s2%(HG80
z?>WE=x%!}4{2B5DmV(bvMG~Ins+1i&4%@Cj`x~+B?Hd^xa}heBgOM8YAB)|#W+E>_
zSAC7>o~-Tp8!)eA1g`*PSE09>L*|XP3o>U{>I!x)wGYlE{NI)E_pA#0fmwtc4dbv)
z!2Q#d$3^3;?J7ywQPDV4yC`#h3+9>wIg)w|3Bq3dhlAixZjf_km#IBE9b+QZ&x&z<
zn)hn)ZD2kKTegH8*E at s*YIXB=+k)m at wt(hoG_O7iIrlmYk|Vv*?<rr!y46H<d4YM^
z9{g#Xft(%YANrDz+eV6h%@ZHx0}ttgyyDCBLXO6{lIq4>7|*TuWammGllx+DTHH-C
zPxwz#D*nq^pF5wXT!yfm-dV at 7{t#Yi17gd!L{$MJW*{{Pa at gjjon&m|yYxOn{O<zc
z0LG_Pl#Y3nkX4C)>TZsY3NwC^l7%%0V-?$W(9i?d)MPFpFRS~i5%E}=gm=t87>!sE
zU*CL<QPTJ=Yg0!Ku)|A~m-8$!rqFL=masgg<g%X4L%jN)yIUT!i13<pjh|H&gnUFA
ziuho=KUiK=P$s9G&Z*R`*agr7&ZREk{~F-a9&XDiX-1xd`wJFA?^-f(4`ZowA4!OL
zfS3UZaQmW6na99KW8ILlIBf1Cd|(hJ;hv-UvvAMG$n%)<H?q2CCz<NrN>ext%E$d&
zf9O#HpqDHva*O;eCp$8bBVE_*?w8QHl!E at 1mtl5oMEsX1&Fpr>D;&F1pYsPD9zcB?
zkmCwi%b+1=gpa|)1py!O9QwC5XA|9p>p79<AN0sYhMx6jmO8kr6^=4VDKIX8&%<6r
zo*cFIdsFV%l_BW_+nQ60d^u5Ne5#C>nR_K<*%Aj608I7w?%kmSfbpYN>M2jd-SwxC
z(<dJF(ul*)$NUx*w-cN?jKAJm7W-%H3McT8 at s8!}`^Os2uRpcaZcqvbcyd!+bb40R
z)FsN#f&wwWlX4uq%$z>Zq&v8O9rkV5ujQp<U0a6vasm4U>`jJq>raVuYo%KEi3IIH
zt&Hr=EsO|#ojizXvi`><UEF^cyKJu^E;$+B{A0+k)H1B4uaQ2BItFZmI-5kPKf$NE
zhn~O5$WizAMDI9uO=zj2A9|L%IBzm78oLIV&QU{s_3HF__2w1{>ioX=4!!z@)rOow
z8-d|!NuxhLh at 7J2Jv90k@A(k_q}CSy{85{%)C>MT{W<SzogE*CY{*ICI`on^4Yusk
z;nXW35jf7ru}983W^3R35r`38>MTrx?~tt2FGqrQ)WJr)Y;4wGeZUdVM;;szay=H5
zQc2 at b=Ybn%ZOPal4zVjmW_RBh_{XP*%+{;lv`b$XI;P4z2}ZZG<I4~?zDEh$bJzN_
zEFW=TdMa=xH<S9X4)y12bel^EoqNHz at j;JdY`#Wxg-^aEk6!@Yr(F2hS5jXFxo#Ko
zr`e=GC~uhJ#>!zIySv^Y&c(mJMdInP9(A+-`%=D(>y>yHITpG-EWlpUsYo7 at i{MQk
zVc!gz3LjyN*=-8=7-C-zJ}e{7dQeR{;>4)4LD9E6m0&m)J1QmbokSn3W+b463c~X$
zFGmaU9~^`?#aybx at mand>uV8Dj<TDe`{Fpn&Hqezl<kO{cRMe}I(bWRUjwcOB5q4U
zeNzU%08{GNH91N2uXy$wlpQZqzvGRvS93&c*>N0iU}?o~c=mc&AM{~}aT%MF_z>7_
z65%EAGNg|6pa%)qzn1tb?)xcb9*);0-l}u=C*k~uIO~G8C|BYg9G}K<cT~-So~Y^t
zkE0xkw^4Q~1~FcB?t$arF~=MJyZ-ycv)q4=W{}g|F*wHPF1<iEa4=yc##qcEqvXm0
zl^StCIu#tVFPVspK;$j&YEF<TV(cpD@$LW*4}KbT?k^pjfoi at M{&~0F#kz`|j|5u^
zI?3Jn?$99MI3w;le=}_SBK(8>;wJpBTcDMd$RPsUZ_Z_-<l-qZ9^@b7*OG6gtBM`A
zq7Zwuuzr1utoStK>j7tw_Gh0IacxD6b{StBLNGggoXe>$CM}Kz);!+*;LDsHqrD>o
zig(fRi5G41(ok+6<~^Nt8sp|??pFdE#)Jz#%8n3{ziBhBiKz}#;@H_d$oSa56v<$n
z9@${s9S2;+<=QH{6h2ic$l;wD?$0FU$2is6Tho_o>+Hw}4?O%%)QhnIx_DDt*YVxN
zN4m8oHszk?I(mcR7OvZrWjOXybk(jcw>g!5?t at C|><c39^a`b4EH8;WtwQM=CYY(c
z)A99<cDfSuEhD!xSnOfX0Uq1#)G3{;EFYjeq*9BIJ0030{UmdL_Td{28h&0KUzr>m
zGqFE1;fO*06fnq3M;)ZK-UfkZuR$Kv+af6Cpv<R5Q$lp!-=jSpSX266kPCquEbN^w
z#JBo2Soc}YXHvk&Fd6wVwvnY?Q<iaTc+THvK=>7SCE(-S+K%T>>x2FQze~<o^s6WC
z8$D^IR?_i_as}@7M11EB^dAq{jZIj?zMn0~QX&uW0LE+If}6-g@{7U_JT>V0N7ISv
zG1-Y3F-qS2sPA!4KkgYoUZf6;1 at xt-D|J=W_bA(tm==?R@#a2qSz%}Q*O2S$JJ?!M
zvow$i-NeQVIoV0%3h01&#9oNDc`--XHhJ;7kOL_I{dPvX#Tl)=rGHxZx4uIkE|_3m
zB{SVtl0MXx-?mH2v+Pp*1H`m<9A0Y2Hx8SWfm{fJQVQP|i|-r;{XO&+rM~b}en at N=
z9eU*HSq^?qmnn#b54~N6oL~wz_Kn4 at X8YHI99AchH(E^Yuk((17kuy^{klSnekJ~_
z9AIB#%r7JL;hr`@Fs~SEUHsB+U+Li7A at q|vLNHoYD?KblE?>)o9vKw2p)V^h+hY8<
zDmAdGR$Iz`oo6W<m}|0b%;dZjx6IW3&&>G*XDpInkvY=_bKB9tQ{e0=w$t&#hJ$YH
zC}1Q1PN#D&8YP$CvdMj2(c;mn#L at U~?<qQwBjaQIo2P+G*@R;qjw5(N(2OINfyX3P
z47pbid*XgS++WJxe;D^fGHDHWY{-?huQB8a+ZgI}WI*{Yl at a!lRTzJnnCmvGAMZtu
z<{e)`CU(2~&^F2TBe2!S_y!c0vAo9He%43^|J{hTQ`mnY_?V0 at o2E3>7FOb#orxSP
z$(9tq`50GeVO!ZTq(E6Z%J?X|8PkWdLY|@-Hs7%CMXOMDBW57+jH0gs at gi+<Eg66P
zi9g2lCDy?fD#ALI<S{P$OZ*Fk5O@&JMC1RD<%!7}f;?J`@D^EXrosmS&vx^Ym6s8h
zTf>)7N4Xo6Pe4CeOTS#_{nGP<X8dy+{1|KD-+v3^=LO7Rj2%BN@|IWIVtidV4vi5J
zzQkjCcAHkB(pxf-zoie~cbfJ`Tycix0gYT0+zo?eh!;kkQ>H;b)*UT>hGyGT&bH}S
z<eMC76V=U28*EdaF3yd5Zg3BhJaffoXvl#tz0S7FAMFBNUfN?z at FntiC&mYC%ETWM
zYjkhE2JiXMw^8^La($b9XNW(>9O?=EfM6dO-d*oDBwUyP{PT3`D2=$%=&yy3aeR{=
zN9|)8aegqkAm~5Y4&GuahPw^?Ng^2sSRd5482V*#Ey)FxbNJ8of`L!ru{H21gsm`$
zrFUd)`f+e=N__3cZCi5IQ&^9d7$r?xu^zQUM)da0sdMWN78L+v7`En(>lrB<cbK74
zvujiK;M(*KyEc9P#Gmil at jurl!k at 6XGLL#P>Zk{hkq_+S0E3G7cUchkZ5jAA6Xn<0
za_Fzc7USXnm|1>*#?jc~@9Q(MHg($kV+xRy%U*G+)SB4n_mNO~W0zf$*v{Rme3qZi
zi6Q>60?@IJFoC0bMv1#xB5;SQVq7^3h5h_=rHH*|5;!Vjv;&FKkW<m=as8naV=)&>
z1+j7~<R{!aPuM+JpR$tN-}w!DKm42*4%Vd*-Wj at XV(V*RuRHmfN|OLNCT2;puApvv
zv_d(V`&L{(H=C`04qLyp!5xF^Mv3u8Y%=F+TRe2X at FC!3O?79#v7n#Si&%w+)sn?{
z7iV0eB;;On2B`;e5t|y^GbPq-bQ<cHp#Guqj$IAzsia)WmUsVI{$_)FIw_ZBU1^)7
z?VOYLSN{R~s!wPsK4$YDT9+b2o`B5kK3gs9NR*y(_<6**k!$LpZxv)a8Ru-Of5X+$
zw>jrh$L_U4er>l+V0mjXiz_B$brwfiy#+8pkdOoaTHjrK4%iD52K^^OU#4Pa<wYG;
z1;WoeO`E0q+VV)B20Au#6ymUA0ufL7sG8t(x1nqnXj=^{4_&6=3*@tovO%|e!sj)z
z$354`yn60K665XJL{$y5ka&ZFAc7N5u=IQaK~Lg^kdMKeCY0JmklRFZO%=KBGXZ%(
zWt#8U<5%+;)RPDK=GN4u`7YZGzfeyLbxE)YeAh7Qk|&FkU9bVVT5rxpRzK_ROdw;n
z&RIG!zW~pQ|5qCp{?P`+AJ1~i!9Tyk%2MqeNl{okqp+T6;D1VdHZ=c_v-gi{s_g&A
zHB`U>2NmSUwDNA<WRi#?lgQKr0e`?Y29xp2WMh%PcGwPRiuS{@LRcn9x2A+j<vq>T
z#8KWRra?q=q6{oDLQ(utxx+Rlitv422kh>B-|x at k`}lnR;Bm&;*>$dSo$GpCuOH9X
z^Y!S^vEUw#*wYHmd$&SI-(k2}{9SZ!QA!lY;{qL71l#i7Iy*Re$=LQIE|E4aoAAkb
zOBwu*uHt{&;nGFtu|YI2v>M?31xl6SpwUHqm#+EMm)kc(p8mnW&)?*-)yawOwTzc8
zX+=Jrg4jWPAumz at 4$gJm<Qkq(AiI4pjb<DkanLDSfQJP}2KQ;@?h}<~4_Y*QpY8v?
zk8^(URkWJ~nbHc3n!P-2`WH+Ykry;DV8qW#_U(L+|7 at cu{=eFo&l5jvBeVx?V9fIU
zhTCBA`RPB~STNL&qKLn=kywniQ~Dxbi08S&05^tb6WzWiVtGOa^49AXc_tlsra`nd
z|G(P0`|q}Hi^{R)OILDj{m!6H`EXmPC&^&0di_A!0%kF*@Es-#eul at Dxm8m3g8+%@
z3d1OVt&Y)k%vnx2ffm_R=}F)XCSxpTc{1n&WRLq5&zW6Vfw~4{eC~Tv{|~=UD>M!N
zzRz>r|IhD<P4=JnPcLj6`aR?FO!~k7JrDbX*8&bdSy7|i;xe3dch<xlb)7s*y%hZX
z={MPPx)$}<J|^f)j}pCHuPtH0YgB2^MDE^mB`vh1tsD4l$a}<FcEg_~QLf``?%mc7
zXA<V!;e*Xiu}?2QcTbNxrSLcS*XCanQ$Ju|avgYycU-WfxRu_06MMbF>l#BvnSO)r
zPp)4{uE+d4d=URrKfq at 6$kzkI+O?;LUWaz2mv1qC)=DR8TBvOVv#IbB$PoJ`{$EM4
zOD%=3DxFqe)B3phAN&%@zAgNke^~f@!er&?guT(X(cX7)@x?Ar at lBUgx(CO4*Y%^i
zF3l$F-w`??cvbJ%(iNy7S!$~g>N>ICv<Q|17m<%WCQeSyoyIxn0zbctnrcGeb6}_E
z|I7Or)?PE>Us@`lI^tDu`*Asp2Zigc``8uGqYvU8-ihnuA;#gE23u%t(65N^^kAOm
z3g+Xt;}}OMLsdjAk)XyLzJJNweK|Ymu0dLCgf0X=ol at n{nwR&Lr-i&v_$m&Dk~W$9
z_}vb&_LIjA+htS0y%~@MUn+^8z}G1u<Mz`o^cnR7 at _Rn2*lvl9SFVeT7oLSbJ_hfE
zYUc~THEpW2V|?x=T$g<HQJHR9{ABo8Qk9Ry?~VMLUmp2<>`U-_uTn<Fy%e_p5b9#5
zjVv5=#sV+83BD-Bp6hg3WUnzsGZ1g}@^Gf;)}yU%_<7fRx8U6%E<xv*U9V-p=Ffo)
z^izgFU%FKz)g{*+{`^_QO}5eL+&ip*&m at w*Jp3%Pq4Q)&4#IBTX;38%&=-)OQ%2+f
zbg*I`V&&RJ|3emRLN3B@|CR;Lzsi+PX7Ep05Dr-YTVZTHkp<A{7AXzL;s5Q2kx37*
zuiS=zCX4u+;6FS-d??9?<Ky#w;<HA4c|U*D>1*s+UfYOPaBihy{-+jyLw{(LuX|wB
z{xAYD*q!`oIWvO368h<m*}nE^tDdOy1c#byL(4pdmOX7<P+sq`_*OLbG&ehc9DFQ&
z_`6?n33!m7e~6eD!LRP9CGS}HYe_BYjP7(EA3du^QS5I}y)k8!tg*pI-%-E$)4(x?
z1*ii*i4G$Eg~)VDW^Njn=A@|yswdZ2QRmtQ{aUgr_M*G}$y^(9sjscdBA-=#N2*KS
z3Y1(NrFl{{xTaQaJMxM5TY<81eBd76H?JC(q5u1UW6KQ5N7odn54m}uhnxeJvE)_p
z1mauGFmL(dsOnqGamV?p9mRKp!iH_NHw>!R?S_dTklaImv*)<9sezhSXC!q+xGtKN
z`A;o0Fz?!B;NEnJrXDk-ylsyozR<ytpUtu_j$Tcr?!*%L+Nb=2O{JQ`QR4u6Q$|{V
zvFisfa2qV;x%g;@73i)bZ_rjN?TijjR~)mu>n7P_s7X)l$8QHij^X_r1?K3E;HzOB
zDa3g82QP5f3=;hrd+|NOt51%YhY`@#@15CZc-i>!x(CnN%&spE7<|Ke&Hos;T%m>z
zAHkcMb6I`HQ#?MURv+;I at k!v_s1x)&FAss3x{tW~*Yxwe0(>_(q0FZ(X!&V|%|`8_
zr5HQp%<&r$zhGdS6Pw|g!2032{I*$TFc>BtA~r4Yb*4dI8(Jf46_3IHg&Lda-`nu7
zF0F)|qM9nC+Z;IG<dnLfAhDtifrh?!X8>z84mus`0GKz7dnQU`ZsmN~%>4oL#&OSJ
z4*O%iwwj~HJp*o%I{0O}p3MNCgY?XGT5K-kt`*)NsD=;m+1$p4PU++@&KIk&xNv-6
zQc&c`niSX<Vv`2Ni<HZAGR&@bGURvY8p3&yvLHZ|iyCv4_kfdfO}lC-+mT@|dnZG=
z+#oBx0!}i!V`PWRG1B6?1 at 3+En8yB*QZ;Re2^%!X-n}yHGk?b0+1St{r4P+XR%(Hf
z|4y}0 at ipPAoRz9<8us^whJKHn#~h_rA5(H=js*56_8-K;vHu{xl7Y2T9QHY$HvqmS
z;)kCY`aRPy>x6uC$I7F(;Zr{|fy6fwfG;atcRa8N_tENV*%;j?SmS>%vyI=C-m|tL
zN3zW+hR<0f2gba_4qvvNk>DP(#<u1(<K5ExJUi~sB3}}@lspIe2A{euF7$h)fz_5i
z%EpvVhR;7)upPA+q?LCAVpZ_Jm0U-i2$vzFvD+p^-V^w31sRz0Z^(OU5C6J{_+^Hl
zaT>6}1Dt;oa{&8gPXaIs;AL<jN9y{KgO$BOBE-$p<#*vjB<F0Vm=bbifkB5ZAV=*X
z`B)M=<b3|=<E9S#{{7*HdBCS3f4LZoB8SW)%nKLxyDr%212ah8<_aQ97e2 at NbqPj-
z_!i=Ph!1jrKF0ZsAMKDhc41%a=IhR=3~4+&@(a!&4&%i~zCf%N at 4zG<{ELs+Z at 4WX
z!AjIh>rM^hC#ZjHCw^o2iYq7~Z<EBz*DxKye#$jy8#NC`$3#hhuj=ITk6wVDR-yJc
zzPwhAd-^}S&oJ%))~4 at mtWB+DC0Uz+fA?8Y*t5E~-Xnfp60oDxc{-4)%-74o<w<qW
zk5ca;Cgc&nW)1ds73z!|j3>Kv{lFjG33VfD2XQuF;RTt*ud=%u_n*(@J6-*sYc+V~
zknC8i#vUJ0)m$<H{)4kvj~GM!rqUjBpYK)pIAwI6qT<vdT`qmh+*1Xg89PDeV8 at yF
zpUjrEBcB0W-1~kpi0=#li}_VJZMkB|3<6im_C7|m2>!07ZYN^I<=(`v%J~`t;6LkP
zA45BVx-J?%ugLVc2g5StL)0oi6FOmRvmncCe<nMQhxWhFs)=6@`F=9pG2_UF{wXWD
z|BrEeNQ94g68iJ9E{4u&m%%rcZHo>2E;tnPGY$UV7}VbDM%~^j#F)x4HdtR;aILR<
zU6~QeAZ|8aaR%QH=C?$ClQu<oI&G!=0Y0Bi3lW}4TOqge2bs2DKeRszeyBx5{zv#+
zy8ed`Qc4*GGWhY1Q3Jr_xq$8IGRC;~vkcWpauK)q=N+GutU3?grmwazc`ZT6rwR=M
z*H2#YCw=L~roQo$x8*XDLw}Bym&63w7ePyy%b^9z^Nd#UP+#~UxDsQy9JmpYrVuh=
zdg%9w{jsyB4~RR$?u#D{dTNHGt)6ayy}H~hf3~O%F*U^FVu8Uq6qHN3 at p}-vYg4_#
z#qFL3CgYnK&>2}R<nlX`ycub*AEaTgh=UF6yFU!!1#D7fJN)za^I1ICC|#H6qRvT=
z10O_Y(=k at sbdi->TI~}p&cRf~g#s+cS>!vhEtcNFNc=zEV#WU^n-t%-;{Qq9_rTCt
zT!X#jyJ at F~;!&2~9uesSVnP!Zk-pD_4bo<L!Ld%v<?^&477}eGF(L1kFk6a5xm at Ls
z^)xZ)21Vj`===Zq`l0v1rcmJXc$?IL8`MkR?Aa1aYA-ao*nla6 at aq6;r2F2et>~}z
zLwT&r=C<FnrxXQTw6ry6K0c^AtLiyYt@|Y~l{spZ?&;6IG^M{Yg*qVnAa6%d^3*}#
zbzqz6j%8;&HK?Cd+M{3n#&6y&3!R>F<e<yI8#3t~2kM=i>JeKl50Im+pHyr+0^eLv
zvZgR!Z$0Hmw>Df%qaugb0BulCwuesO`qlth(Tn;!oUhR>1<!AdZqqMOgReNMP3-U1
zn&vObD`KL+DX*y@>y~ZMeFY!bN;X8-*ztm0!?x(^Dnd|4T%`MiU6FcKA6nXt{kIpq
zf~He#x*k&hPml_G1^+Y0uumKVZayTCB6ZS$r{7&QU(G}QO_$c{Q-N4ZH|A(t`Onlo
z`jW(i^>_k%!9Ax-H$ZX>uAbJho at tzabU-j4b&yt2Uju_ at ijrae7_f#OtL#A>zyou?
zoAsx at j?GdM`GGcydt$SulDP0p%=;%$@9IowK~j$=@^9wU%7Hgo^H{hTwWu<Y7jOXW
z1d_Ia-}eGmUmM>~o}-G?Hj{M#OAnnypa}?Gaazk}cooL0LbfKX2sz_ at 44+>Nc|Boe
z$Z6oYCu&>3&G7@|9^&`T_Xy?=eF6`AS~jU47t%+ at s7gyk$EAi`Pg at kyh4BS{*Koe(
zhd#T$hwn at saP01EEqwD^;Wv}|+}M(w=L{tHy&BA?2;Fg+BIr`~>Z#ju@~4zWiQOWz
z*ZQ;x=1(1y{TZ)K%UD_&c~H(QiRmKrpRcRG)p-!E>E8Wo1_F!SX3N&XrzWAA*R10i
zLMOU~<Nv<!WU9Febpx64;E;WPsyWy<u}3DT?4r}%BKdBK_hi?mZZpJ;L9W6Gj~rjr
zK+FK2`Xaa4u>HGdBvCv1VkrmWpWk&BQdf=Ifc_i}zF&afzc4jc_9WrCZ0}yHpZo>t
zCf>(2zta`)7ibet$ex at UM|9k3<~@(Ag;bwW%kMYFAkKsuVx6cDCJUJw%YO&=i<$Zc
z{<q4epv}Umui^7W*%SDTT8L~$2V at 57>@AsmLB+>?^Ko7?^)nW=C;9J8UBmI&TL_oE
zmpcBJ4%BU%`Z03d?tupZ95n==8Mz60SJ!cUH~*c;jYV(4Un-v3fLzWqMdeeIV7K-e
zQuL^qg`CruFh4}@!Y#~bYv%%;J#HU-0^o@?c~$o2H%D9r_TxC}Ek=nd+v~yK<tzFn
zY~$iO-Y&~Z$2!%Lcn9>9LZJ-$nhdhhPcc>;1lhTe|CQ=lA}fbvr?(@>4*5F)^THI|
zTwFmXB-vGuF9N<Fe(Tgl1IV`(B9D4*5o5fuai5&U=jXW3l|F5?`l#j(Nl#K#LgO~}
zBjdd)remwd5BU6KNt>q_>nl_~5URB_{QiXGAd}(c0Xy*x`a;n3+;)ixIYt8lvGIdl
z%Z)GX%D#P{q48{G at QbE&w6R^$R$z4o;tHaz{HiEx==X-3 at 6HHYAG{*Eyvk3vFzxfO
z+%y)kqKxR{alT=j)0|;NX}w|pN)r<Ki8iFz7fZ26u7)nBGrO9zldd5?Ab^fk5e59S
zPbtAeIVyk)>V*yS6l{TZ#BV%&cHwuQBQCnMbP(tA@!fbFH8_Uic#g<0=<Cza&N|`R
zBydg__X0oS3SNPG!CzB*_{dCx-Ff#1#JCP0iT6;Ut%!FAun(Ja&k(*v_4=egaF2IL
z+#SDJ_usL1k4b1p`pY2E$4H!j-@)tkn9SKB(~ysL{M_#9C9uuA*vF~w%^Q3#Fk0-v
z1y<etLd2zl-Fo?bh{4R~^f#7QB(WwSuO-2%JkL}Ax%a-hI0bv}DWR*=MtuoCaUoyB
zyBO>zKcyG!Lq4dZJbWqP;MD4e_wJvNzkT}M$ffp#M6`8o*6+je{Y^ves}n*e$lFmH
z=}XAJZ^A`G`wwhmkFj~ESq&SxN^AUSEe*VIAz}?F5 at duT_6^)1FbqYUo`CpTxsT$x
zP(S%2v74<rr-ZwA1bwW-;Zqgl3P`PdgU$n&Nu*WxE6Fn(%ju#wQJ-Qgd at sL)$MbS{
zGM;^WTo-bXK97nSe)cWUU1xx+&z;0=Zoj8G0t}m<yb*OF8(2R7DZ{tP1Mp*cPsq##
zC#L;ClniwS<Np2IgoSw4GXzg(2iETP4)V<OT=`YL`}AWW53hR#_i$G{CzeSLvVJ<~
z+qWy33`>0uV$p(3<p)v8c-J2ie<@_^=Ul%B5)dCwXcHoqEYt|*!}oN^>T)7R)3|fO
z at fvN(TV(8bkI1i+u^T864&u5k`q1JYyrT|q#_L>S=uztxCg2jtT%0QOtEYZiX|3pq
zQAX#tMmAN;bdHJ`cL$Yj>9S_DcW;o=cN1=)A129Hn8P)HwE<9D at EZRyuY!cYo8WuE
zS~(tMrxpsM6M}BKdg0fzKPh|`zUHIA^}4>k&BdzVv(Bv{oT^@5b8~WP at H*v8 at a~Dd
zt;6fCB%}uMi#weuuxXYmPs5(MgZ0b48v#2wVcgS at +jsSw-nB)Eu^xzB0-eY5iesmE
z1paS9Ucl!esQ03=GJe!|tM-{peNwmMo&MxEmEd7<tfC`$rqqlIa2!1~fb&16W>p at i
z-Q13+X5-lAc2U2ncr>_Q3c)oSavT``PcycKR4a9k)Cye%yAiqr1umS6F?S8hZ3ExM
zAU|dG8?MF(zN>N6W3EQO2`)pZn?qLScAPpiWftu6_M#N}kxqr~5<Y)KeOcLn-#4&r
z^mv?8>o*;E0(?vFqu#eaqn$^udedZbO5Iwy{w}TbW~9$Eh5#LKk^v!&qrq7{rg)I-
zjn1QPz)BXok^Ci}OT4ziY{Q{<zoYW=u9;2YAw1W)R~)Ml!w1K;&Q+9Ru at uQF>e&?N
z?FaCDODlsl(nc9_ZX~^1wUe~-c&@xI)N|PC*4p^u8?Kv5UGH%2YzVl^MiwCk*jZip
zo))&K%x|j320R#^<-TEbvBTiM#9?@A!hm7d9*6Pug%=H9;M^np7K7U!N0y)EC@@=3
zuE{h{nX9%`DGM#leKJ~Z7_)Q0IA-BR%5#dwF!8Y#Lw=LPXMv>+*R`HhgKN0Za{7Uc
z{^zEYN)t<Re3s)`e=eTINU2YZ+5=nj4!Tz}+NX{-`WL&381+v#{i$B`(}(Nl!ACUz
zlzw7I?(_;q8W6{5r-l?UrZYuS?)mRHKSNEajLJu3Q>LEDetha{*;A&zn*BG(!mKHE
z!E<4YW#BWh>#~&TT#h5++_1O$A)D^vfAC@>*A3 at zypJQvxx0^=hZ*EvM!!85 at t&eL
z{Jpf7-bC(eu{;<W_dCx0+<gOKzppZ=is7g7Pc&*Pw>FNZ at O~;kX4CO*4!gDDIYxUM
zG^jzv>mAWbwYjxP^x&@mrXB15D_$$&IQk*}W#kzE17>-_exg>d+KYXqtwI19R%YFH
zPcj_0T}yHd7J{?LeuCs8mITU?Z)oT&3A7GIgOj8rh}8Drari{YsINN4+fN+%Sl86C
z(*9MD2>eek<z9!L+Z#NZlYbu(-z at R(J4SLc?F9KvuonKJY~+1l&ngKda#wW+`5?%h
z+xohB!{vF5jBsYi`}7g7Bd)NoALsXR=Tph~da5^0BLfzxKWH^s?}!@}At#}3C at 0~;
zqKcc=%_q!;M=!hJBU2!z;G&!4xA9peSccCHau%Q02;#_jGh`sa#!;DqZ2W%#_(&<W
z$tXS5PcWNwPmrBEwkX!{zacR at NnSvV>WX(nqYnIaLZ^$;TI4 at pY?M~GfK%_?<Uht#
z72<tgJ-1_)<~jLb`EvctSdve8c-v}{yW%NI@)3Ze2s#0&Q)>wgf=-<m^eNs)ZG7J3
z4jjL9swow)Sv3BCJBMeyR}^k(?H2`oP4v5P;tTWBeQ%fujJ2$>b|ld`w8bu4TUB#A
z^r_gp at Udy%v>TWY9--{;JtI%8d?dlB%V!VAehD6(i|rD7=iF}lC#Fzv<jW{SLL2r;
zX;@R$Yr1I(tsP}*ZAS#{*CAm)5;|0i<4{A{ejq$Hn&tOIvA~)vQb*LgS_k9cANe#b
zN+LweR{eM6k5nYcf=)+)x2|MF5*sT~d>x1V#FdXWUP$Wa;_MQ{;c>3_Oq1&w5?hxA
zHHS;0+2B#6-IB!#GDXIm?5fU^5sL;9=RZUGhT32K;Tx4t#H<G{AZ_vu=uqXc62yN}
zquAIi<6Y%bxW_W|ZEX}=BNdal{x*Je9Q;_6K^2&I7ks3hv2!pVhp=vkRVCEsP`@Tu
zDDKbA!4c at 6DCq+K)o0rg<7W}$M_-QrhTk1d5MV!DP~1h2H+M7HiQNqNvr0xpUyg54
zy!n?l^?z+MAvNemIDGG|N#H9_5BXm3Vx+TLO8pt*zaQJ=nudF8)pDm=D|F&H9}Hmy
z-mI*VN?nKQs6jk~6MY&!|CXf&^>=W-mpd>2^L$Q?G?kop2CMfdXfb~C3a}9p1vkbQ
zX%g$ri$#7{5B5^3)t@{^q*nZrkeQR3G*~M=G&fufO!o?41mv0k=%r3Z5n^C?@F6!F
zZ>)U*_<%{!7bg(?mdJ%z=q{h`fbXye`bYt4OYSZTPq>BHco(CA%+2HUFpE*@>W=~^
z7em*(P8i92-*A=qu8YFS=U3(s9pkGhz{)J=ec_#gSkd38U2fJhkl6}5aKi&8_&0Fu
zflsm9kck+7O2M}zzV4yY6u|aHtt?)lG4?>esvUCQx5>4m5d0o16rYm%P{3d8;<sV1
zOVDj&U$*LcWV`_2Yr9$BusY7Ch4wsF$D>X>ugzl>{J6*R9UiODS2gvy$Kx6q+DDv?
zS6Gc)F=NbuesBjFYovEtU^kr!=4oW+G~YYK9%sTaCfd9jdY8&dN1z^F3gQpzkjvp;
z5Bih^zagLFO}-5=1aUo8-X`zY3oLf{#8Jm|+~eTg*MSQHdiy6My&Y(a<vB<!wL+$I
z!ry5R{<}tov6<=ZN6l7)gRNG-F&j9c^YnP^+dC0!$Op%-^qZGZzsg2p2%}#$zO;6!
zylY)9d@{)-=W?UFxykK)L6&liA)?%lI;;21(@<-5Id42^2j9cyAv|&5fV36{W1K74
z%tn_%ilbQZ`pF0ji*?r(D at DE74Atr?>1$Iw-=S>a<uQ34CqCw*E>FZ=Y2;Kt0$svy
zGWeSr at Z!c%!njpM1)lFk+dOyZw$d+Kw>grzv9@|%CSwiUlO*~(&oaah;KTM@#si;Z
z^ru`K8nls0YA9|g at U%7BuFvRj*@_BNMy70bGJb`kktx8BL;o9no97&nQsjIDdz)Vx
zYAiC)_sfe4;-(dD=AHw&l;k-Kl41uP7wtk#+rc19himZl!s6h+;rZrcjz#FMbJxm;
zpE--Np$?YEs85HE?g_)sI%g<vob=EC4fM~yScPW{Q2XN<$3zc!y2Iw#q}z$-ti(JM
zGAWgI+L!a44jLrn`~sUGoxG0?r@{3_iC6K2n1lF^vXOcKkMxrJ;JzQ>{{qz8g1;SO
zdXl?e6LNVTjz|2T<MBJu-Q2Z=e{ch8S#e|Y2O}QB%78mW172e%T~VYR(MoEl(E+j0
z>qq^#1>;=r;fddkNG0_*Hyvb#@iq9(UZNWyAL=4>L!);DVz6ZoW3XTM^FKhIp}?ot
zY1LVr*K|$J+1u_SCd at jWx&i06x(6aYwK11xY3LFWTN^gj?4aqPewMT0nbekHd#yaw
zFUW`P7>?ZvB_ at N)GC=<_{QnH-2Sc&k_f^$IE^7ivF5S-&N&Sci+*?;J0iT+$MjTl0
zvQ}scv2PLEIUc$Wa@~x#)}E(?;>Yk^CvcU}hiozJ2M46qk6Dr8#?(ws9+_1O!LK2@
zeZMe#_?~k%^>Q&|tH#B5=kQLb`CC-QcZVHzBdnLiAD|n#&h2Kq6QtAgYo+Fnc<8af
zD_#xtjC8 at axI%CiM-G;r3tY~{QTvY^+ at 2YTII8n_?m)SuDIf8JJn&8BaW%SuNhW!e
z#qV)=g1fbc^#L2ojQ7?ig10H-ok8HTcOLnq*gq%@`M%(S`SX9V{8w^5P}WiQ?&6U>
z0n1fCA)oP=LkC7^_-BXsp&xAe<kXjw8pz*|#D?>^8i{eCgh at RNWPi~NoTJ(*<k$IE
z>OI^HkiUoZ;7+Qitm}ry;s)LgiJv>j^V)YN%$r`rKat%rL7dwk{ATvW;FH;Rg8wEv
zkGyjaH;251Z_fTbI6vFQcgSvW=kCa_aBW`|x`OGbHt_mIBJbdFQrFb&XL7$o8Ubpg
z`B>#W3G>1n=5#mUBQ-7#S0YUUR)6$DF1GS3vFk?10GoMl<8NG?CyDqWcs&G9L+}cU
z##;Sm4I@>c{)Ton!7C)FfZymQa&(t>LN3902xDO*Qnz15t|3jZ46rd*BS$h*m_+Ug
z**iNF>&~Zy=%PpaFt08Vj1xD%Fo!NQkbA*qy(wvhKJzHS76Jd$f-%2*=m14M%pq-G
zy7#_oG5pJW<oDsX4grU at i+xiL-9z`hK!(pBkX#pK8Rn{s*sMOt|1Dqcc_By2jd5kd
z^B7}Cb~DEDBIfc;9&)-8o>zVlPVzkN0kf6B+3(1W7VeF8DA!Jn6}n`|SND<Q{7%MB
z&a)9Z!@QGZKUHT7h#!8N(3c^311*Hpz+REWVWJr9 at lD_wsi$uIT2DRSl!RE<d}(<0
zUvh(qU9Yb9kn9ugtJ2!)0v-cz>^HntLyY_VYVFv_=ttUJ8ZGkHqk;}0hP62%<=Hlj
zV|b`mxQ8E&JZZgpKm6SJwfgmsaL<xT^vL4ZQO~j!ya)$rZN#1#8RnME?Dj5N2EHd>
z`F)X3Q!@*nHTzN~3)`$;m2T<o^VRjz<C7e*0m~lOn|17x)Tt`HR_&OR9XAKEj_ms!
zJ_h%*2!epeA<z64SFe38iIwt&@)|yE9sFAc^!DLcDe4Xk&Pg8npPwrqfNpQD(CTbt
z4^}PY@<+^=e~Y>KcN4N}y5!*ExmXtyh<>kZR+SeYqY0*x<TXr}m_#o<{M^)#u9ujA
zv%9x(H#b+K$XumNcpuX5E)hJL$78@^Bk#RrMx<+`H99hwK2w35QSbnqsR(~j_+iZp
zI+ti-)_2fTJ27qvB)>g8R#-`NEdCYjU&}Gy4}a#5IPu_Itm~1<&@1A|_X~e{sIx;q
zv<}P8ee_Jp=h(AP0bAvuNj~B~<yUJKAtoG=bUl6^8Sm*QpI8jM=J-Xwk^2FE at N2LL
z`{4rAkcvZpVme5F?vZ{yo&}wk<eS_g`T0bLq+bIkZSP1ck+)$Fz|H1CMREFcH+)Z<
zAAw)b8!jU9{&4MA at X7oKw#RU@{RZB{Qn%hAzYNKbw!aazRCzGgp=h2Whb&wcE#qIw
zcJNQg?s4xrFX#s1O at kz_z2tFTFE0l+EY>jpTiBs-SSQCI+aq*!q3)AIa<6i>=3X)e
zcs3!)8Hc{>;dvQ3&$v%Gcpf-C|8b^{vxQqAkC8V3+@=ola4&SaKVq~G_1n)z4(qp(
z&~M)@3ZIX7+Snf0dR^ved|dwmFI-+v&4cXXV@}#q%q~NAQV)NSa2P&wo?vcF?gV>>
zwUm8&v at L<x8oaQ*+jiu1mrdH<?UJ7EVvh!)jzeiT>^;qpzFF1zZlt-QFFVoBV=Aw(
zdB|nRvv&WQmf&Er<jDQJ*dH!qfH?(kx>)ypHTc8B7u9<-20(96BgbA-?>eR;dd4e1
z5q)qZ;jk6cA>^6YcJhSgXt(z<=Vyg#brQ5IgRc`fneVf)KGxaO3qJ-|!#BBSMmhpg
zhxAFer$}2Xy!h^rNy%2(ub6*ck??`mfeWH4&q>BBa7)LP(i5mBs)@!PRtavzaq|e)
zllu+inAfAY-U)rpX033D3UB0|;oh+eYn$LGSnRuPX%ppl^eMVu@!J{Xw}RN{wi?+y
zmXgOg^p1V~56@$aD%iDN9>Z+}%!A*u`8DkIsC!@+L!T2^9L$b->U?}$Cvu=%$V+JA
zKW1*=uyTqwjC}WE6FnY2xbcOz`1=&6L;b?x7hmuT=__#23XI!|q4)4_d|f!|ne;5c
ze(k3-fD7RF+=uy1PkVXDwp(i2Iov()^e5%O;pv`){Nd_ndY`Pqm?uFFq%{tWKi0}^
z`ES85Lss12WW^FPhv#N;Ij<asC%8_yWOyBK$Gr;R+a`1F0>QYB(GdO>B1Z at oV?E)T
zxmJ64;j-|UdTQ>iq<epvgOF=(?=xy;L#;l{Z}D^1hUlg6$Lxa-du~Us&ntP(Qy=Sg
zLf$Rq<lP;}v}cGsgHK+HcjZ~{G3hnPtu*Ld?@8Jcq|vg3d3gUMUw4Mw$iE^Za)WzM
z<a|^W-tDKHe$_<mB*<`=(>D%zSGb-hZzp4t at Gp4>Pi#HfxrFRz*yG6WN}%_i6S`uh
z)?Riwx1YgJE&LFB37$`LNs#zZXG1#ys6&o>4t*cDMDP~Ia+!Pp&k)5u!*1;TdQAtx
z?74G$H{q!yGAd~R^-t$+EQ8EhW^&z5)f7VZU*Y73dsr`D0r_zXd>qMY_?F&F)MvZ}
z{_FY?KBMDU;1CeYBp6tplUyHc!gav?)asc at TgrK`Eh;#iFkPmoA$DNl4sa~)8!f~f
zbFqmg*9{K;OZpLqcj!5Os2|FMPO0urqqLl~*#^6-mo8V-glB at Iai8+w#&Z02nQ7bY
zEaky#$a#S-hMYy;KVqdpol$B-U&&M86yD(WzLU{)nbUn?W9mNPI3+$ry;UjVQ9Ijf
z*nhe+O3`GyD#-9-iNMfUGUsV)t^TPMXb0Fl-<#yUxTiqINi+NP85txteNr!tCC7gV
zUaY77ScyL+{&N3}UA#u*I;l;GF>3I*L!M{s7qI(@?(#EqmtXL1INgQs4j=dU1vl~k
zJfh3+-66}(vOjR|-#NWy0nt;m2L$Ve<a~{ka!t)u9>hDp)FCOG5DxC4vAObJFlXlS
zh024XiAvejMZ~wTfZUVAwe~!ZdHI^8ZAfk?b}~x}SMuGPI<c?SJS7^^;khw$SU<5R
z6P}T5a5Tc^EGKj171T=L@=_0q{dqUQVSmOGoRyP3l?O?zNu0uTgcc0%QCZv`_27TL
zdo}7m{Q2%H`0j)&0Jfkwtk)T$yT^8ce-L}3j~E<-WN-Y~r*O?v$S-;{=`+Y`2V(pK
zsQ2^$wtat1%l1s at i-peP&=*@u&p}@-v_DA=ta+xmj7^uEjCuv1!z3re6YHrv|FFDv
zQyM^3rBF@!%g4K`sx`_Z2Yf8V=762ys7lcufem5~nlE>Zm*!qKh)zKl-g)xq{?hA#
zsgE27CUGFtllmEZ@(kE30kwyBB<Ecq<Ev<%nu+?nL-vYqmDF)l at Hzf}NltkmBRJa6
zqu!m*L;mW<F~oO!t`GJ15_}7)r0O5BNA##Nd6%(wKE|DkQP%}*P#qi6k=<_d2b8->
zuEOA>ypzlro`xwfzJVI|h>b=%u?EaM5y at 51MGNxlsoy?<jLk?G;6cXl9*^r0Y=Ta=
zO<5M7N_1QXYfd{uu$VjQ1&J76-=tq*(?rHg2`)O)LFO9TdU9C*`wzLm+-C4DMxP}*
zJ at -7|;M%wuHjC>V_<;Z8dD`(jg~QMDZ9u-tJp4TThtFe-{GGiTAL;ye{}Vd6elL|@
z99k1H^q2M(h%vTF*#ACHy7QOkC=<kDUVIMyTVJ&6fA2r<9{Pt^FPEc%>o%Sx at h{7X
z|LW_H=<DUbjQtlweSKuz!@idIx{N1B*!xQ2Pv}aBJ;T`y7~2ozKi3|9-va%{CS1>8
zT@)lf9P@{3ndAVBT`s>xjy$LQ4|4RJB){S at I;jhNcW~E%NBQAe|I7H3wVKZ$SMHJ5
zHHD~0F+7im9lGgR$RC&G at _#-H(}q25)_;%t$ej<L#VGl`{J+K>ee&@5ALIV>pX0vi
zuj9^$xN+Y^#(lHoe;;=;4x8TnGdJe2g-`nW-Tr!yZ%01FJW>IO-P9tU^U0QiyjG&W
z99l>@s}E8h at cXk)5f#P%!7_pt?Qx at b17Ab1Zt2jQ5ARKLinx3SJD0y8J^nl}nfJJJ
zEB6eYJG^%lcfT7va5L*_5zBdCkJJ4D?sGdIoCv^Du$;dow$uge*<F%PVIwx>Anx;W
zy~l{N<e1bg4pE#zygx?#c;rIyl*kvve~Sc9-ilQIAoS<+xb9hk_di~QarhuKXo&Mf
zEroB_54K at Fd_=O6E_NAkX?#mPbDlgyP?$mSx*c^4&T#Sa80ZTZE#D4uye*nux@>a+
z-kmQOON=Hy7x-Te!tWAyakM%`)pN>Sw*m8EyxvDg_Lz6zdv~22MeV_7CQ5 at m#kcD{
z9{mQmEZAhKg|IK52R0$qi%FOixPqT6oHxV=qE;vUL3FhQPPal%ObGO`Tf?#SPoeLd
zysg9g1<_Gg#3AM~c4lxsS&Qpi1xKI at 4=AINchKaykmv=_8Hug_*7TFuXJk{C$$v*&
z-o=h5aiBOiahBp)a&7Llf9rwydP|vI1iT2aB8AOZ+iI+*9Yp>RorZyZq$!AkY<d)U
zY1pX}PLD($2lO+KF(!N`!u|fi*{M-Oa!OMGy`TraYLnUznDX>dx#+_-7Pv3Iwz0xT
z4}8nvy-8KVS9z!n at TSjxsx465Zl_b@oSW5_oq4H#3Fc^Dt7<a*^M%Icz at 9=sH0}l#
zw!*Nmp8Bykip4%?O;cg7Ed(FxQoPHTk_JNk@%#nA!6*2(5F9-5$K$t<jf67;*y$`U
zE%BASnMpXMgh_%pFYU6`jh9&|En4#1Y;y&pvn~0<dhJ!&NIT}EGrv{1DgH8Wve4VH
zS60wv*bilRKMvikYO&4{&cKG2!hX&ue83Y(OwIu6fv1?!fn(qpVxL1cbqlaLidT7|
ze$cZOy1T>gwGbRmMWKG!@2^YR)P4jrbF|Oit-Ax?_0RCb*TDxMCc5=ck4ZktZ;7}|
z&Lw6AJ#A2q(HO>!*QiQ{+qYV3TA`-{TgRSs>FnhhrQ>U)s}Ua}xV1P(@XI78Ty=!_
zlz>+waY3wO<f7~*Ht)(sL<gYDf$Pq&b{iySS9q4>D8XiX=2|P9S=I_ehP9$o(%~qT
z4xL9HXlSkeq*)(PjJT!64vv{F{t3Jn5%Aq|T$^m&#fp^+;9s|M*ldxtqFDwG)Az}H
zfG?cfOWfh|DU%$nm6nI-aUFOfNIN~uU#}&8g&$A at Uh;DtT^?r_uL2G}BS?iDtgCUn
zde at B^(VvDV3lE7?;S<Y%?^8qB$oUg{a9$(7p^u<$>La$@)<^1)Uq``5pzBPKMtvHp
zjs8?GRo_S7uO&!}3PQC}H)2=uTy7~O7Rx;oI4YsD*2uvdSIlFiz#p%xr at Cq4|3{y`
z8}h}IS}k-zz3XHG><T`fH^%ZHK`LqEcrf6{xRfM6hH>dOqzjMeGj_8U`KgV}Cb^wE
zs_UsPi~KCtuNceFcZ_^wf;+Lts at UxZfZ;(b>(XyTo|O|^O*bnK`(Xp}l`biHu7qv!
zE8<lO9c)tI@{a=h1n!OT=*uX)FA;LY5FbGeD`1_z`PtiP_;I^$ShZ>)!AQ}cr;U;1
zVQ#yevARL=h_IEw>jUe0l+~x|5dSZ+9g<Qe;!_a-^Go|RU1g<>4b2O%4o8w&^Qb9*
zjP4`YH|X03fp at vf-$Zxf^8wf^ft<Z^g7_W4rx!@pT-YkTbQ{{Yur>bh)1+E at u*SmB
zb}Rb>a at YJU+s0)m#)4PcWe6E_#rZAO16=>PVVwUrbQzxaOU0oCr?t|s8S5uP2jAYu
z6OfDMFu0!@$SH3x1Lu5ibuV=nxoN=losk+uKXRN+366T#`M#uU at k=HQ07nLX^T?M@
zx-9ljked}eR+uM1%<9r at wC!lT>zy9i%HL#x{Aq0KIcT}=N+t4vzH5qq)q~$p_r+@)
zTSiJP*LzdxyNNBr0`D?#>Ur}_&t~(ETk?C5i)#9KgOuQDlBptp<XIen-0?PaZhwx9
z1 at z?_MPF#pbR$0y9DwCXi1qNhDk7<Mz=z*4L{!*kCAU}8OJBfxF|gaqt>3b;MRq)o
z3D`p9cO#~GqWBv&)}nG|>U!1R5{^*I)^Qn at vgQnajX^l^3gUNtD&Ebq0jZ_TAu72}
zzuvg*+(FCM!c=^IRoAMvw0Gz0)pHEYiNTH+-ltXHsvn;ts_Lv=k@$e0L-43=Tk{Zy
z$Q4Q21X=YS0zLK+F*yfZcu0WDJk7TX^7vqAP*{&?iRLcG#9)$ccQ;56Ig$4^NKI(G
zKcH83P~#gN7$;S0szsF|LcDGSk=xWReGFyew}hS4=K_C=njClk)p7lvigM(vhQ4?T
zdemwXuTk$oz8sk|dXx5558!<<AGZxwF|W#~N09T<B4_bAfcspAyc9Ag-NRl6PLTAc
z%Dlw)0CMtBbC$Yx<e;t~2w0CkV1YX`<pc1)41$A^$Ri?Wkk^8>Afu5t<NFcuUxTZu
zmCYK;$uw{D{RlcPIE4&-SU0qIBIYT%z9ocCn}`@veox}8M2%|(_>n9x^dw at h`CtOU
z;kj8{%aWRIvwC_%O`ICFGklzcqiU at i^ep7Fko%aUd_Usn0H2ZtZtmcww)g%n`5f=r
zf%Q<vl3e~2;|FWqV8_Sku8aS%^t!iH at +Dn{>q2>hu|oJTM2elY`sZE`^(OgGT$^ol
zjk1s~3;SvY!B`rIuL!b8VCm!M#PyTwYqZ<PKFm{DJ67Ij@&lLAL~t4LeGi2O6QANA
zrK%%{Pf3*(X=xf6kqx3T(G_BUDN2iF*%^OB^Y&fQh+Fu6jPa_*b5wA=DO%kiT|RvV
z{V3T-(kcSB=U%Oq?k~o8oZ$E at B{z}BPjdX_J;0Xt9s<6c9|)e)Wy-p6)Fs}Z6W2X2
z9s4D?ddT;P`2s^yJ3w&gD!F=wAQ``xDNiuk%5K{&_zH8{6>PdCCoMyH0vOW!!B6v=
z=?HT at Y}4!NGl`BvbxFvTEmZ&qFlemP4C<eI`wDNT{2KC-V!}zz&H~+;TK(Vn;hD-4
z<onL9(im`n<#?k#CSUQ+pKX1U=rGpJ8mw6cUiSGsr}6BPL35Mueyo9`Ouq6xw6_wu
zq#p%rH}w7Fp>h;`DDT<wUf at fJXQAd>IqEN)x^HJGDtQD)cnrRkHr*~;gYlnh-Kla$
zVm`};bo8pvPMw+S23=*O^sGU#WI(lN=_OfmlKqf0$wlzQ;Zkt^bfX{OxMclH*Uyb_
z?>0*(U#?Nizhj8y^#SkEWr#U5pyFG*d(zvxd-RF at Y;0-Lj0|40v9Ne+1#Ht!|I)QY
z7sGqoPx2vRwbR0Z&v0;jvE#Wt;p(+m-TjJ~?H<)BULI6>;|=d=%4|w*c2#9?I6;?b
z684E)U4J#><$>IWF_}NBSmz?$asGPFcLc0Si5>H2f9M3_PYV0o@=A{}MIPNs+7*vz
zN3EutkUR9<wE091QUT)R=r;RV9s95!)_klFPsq}dVc$6msq4V~4A7#5PSp0fL6N?U
zZEUc$Sn4&A^c>W0=rJnO2L)Leo3q6CVXl8N)6(tgrRP*Ay*#RCczO6VVf~DRPPksu
z7L@@UNNkCVzVFtHx`fNgy6aso`O2U=GeGiv=*h|q)t-9l>=wu<$Y^t;?|yz@`_5(9
zA8fZK&z%7-H{bxfH at t1C$df7-^Dl#|^Eu4D=eAu5250o&c+j~Q=xpKQ;$GIz?Y=<7
z9k0eRyc3}ld6Nb4Xs033ZWrjD5X9t#RRbdj4&*kp*~)PsYk{L=z=8bayS-d{Ip8Ti
z66ix`8E$TWoYXf?cSdbghy&EQ_rV{6_t);CWqG~jpB`?;I{c at Au~zm$uQJ4Z0#2 at 3
zu8O)@u7K at C?iz0X*SysFJBu<#9&gn8KWNl?JB$2HZJI2|=aCv=KtXPcKBm$Nj6o#o
zWg_nE`xSkh at Su_SyZQ}0Zx?6(FkF3X at TEb{pjI}gy9jI?&XRgdlM1;&#_#}sf6zSD
zw+h(x*~m}4w|2BLI&Be-V?w&BW2iebVxixZC-o5 at Hu5oYaQ$aIzxolLzvKLKdmOCV
zc(33?<%KA44?5G89R?BQB>DwnD&f}zBv<YI*+e&o{*t2-DLOb_y*jeb5MOh|U`>(Q
zgL*w;3tgT>Y=r&P1>>c)BkNsVQ=lU*4?AO&?(C0BhP~oxU{7Dd-;YEu#r?$aqh=}B
z3BcF4)(tu(`1sbkK~K&ianzpUz$e;if4q0>SHOnvC-MQD+|Y~S9z4Xwuk|FhW??^a
zg at DKP{Rp<KgX}R;V#2{)DIn(wM>2mjvC$--A#ZXS*+)8YL|==Mvw_^qQbn+hJGTZt
z{_CuwG{>0YzLoI<R^;rI&l6&qR$RX!A(nTZj-;5h2}2m9nnq%q<v$NSY<f`&&xAPh
z^xzqUiz0aBP at W<AUh at ROB^{fmDGZ;aF%kXhUKMbiIjAQeqPsI^y<!IZcb7xGVK2hI
zx6#V;p`(3Fq28;{L-#rvgnIBa{PuJ*_4TSz7u_{a=Gv>I#r~@%<~0Y#S$b}w9^8?G
z at 6-pSAqQCSXAUrH3jb+;mGIsDT3#T)YERp9m9SmN{`Wlc^(R)7oM|DMKO|;<;TcK@
zEMz9QdSEMFbkqEuDhw0_^+lzQ)C|A(yQ(1E`|r7ZCIvWsnGrlg+%_lG6Lo%L!CnQu
zG-Nxtvg%=L4&7rc;b6rcPs4}o&(!eOYYI`ntSgisW<!owH?Uc~^sai3pAvu-JN%jt
zr at sSF@a6NsVG*qLX3UFt<+qrBxBv1#!CvEk*iL2KUS=2P5c`D0_ibr&V)Bj#iHtW&
z?`sOTc;{6yDX4vyig-DfORGUn0BX{TbuRnAFel-QhnybDr}fq~*uJRRPwmJUw7f{q
zB)qUS+B=s~JH8OMn at h|O(vUetxdru+oVK-Im`})2;438mqK_q=4{j+ou}d23^AwHk
zh&>;qf9<&5qj%d&&6M_=3Q8ewid~c&uw{wnR^&22Ffr=4tC%<beJ&GNxI{%E at RK(<
zy$~@t)c?KeEYw|(guSaF{T1taZ8ws-+3M1zLEL9v+XQXAjg@&nMsQug5TM>MWW)n6
zIzARP#-%<>;|VYO4RA7~Y%Z`Y?lFolMct^$#QJ$5<UaA)`!o!3iI06rQ-Ijer&v3?
zRF??ub=mjGLAyip&yag|2cO%GjAa0y+sWtPqkG!u^$M+1sk?toLET2|;2yra70Smm
z%JJP|#Z0`X8<0gpg4f)>E6Iws%aQAHyh?#wm+!*9PV>Y*EJUtL0CHW-$aOh~To+1`
zS0h(HMJ>h{L(YTCVJ7V6I~-T>Qb`^#-gU at _{$WlsxT~ZwEa5qYj~kzdZ6%%(Ivn)?
zYrh<N at 0U21flH*<=}-L>>rB3f<By`r$pbiE5<QyS;{@-Y=&=lNWWr`BgP(%%y<=^j
z{{;7+A^FTM)y12$4RcY4>^iHpT5P-JGsxV-dKkpB3yn%)KluB|=Xr;eNv>-+&Pi5i
zS*BDGEvAkGi+2ZDyyKAP$s|wnLUZE1P(Jpj^2CAQ6<F&_d95TK34K<GzU~4ZxSNdy
z7C%R4QkU!6)U8X}SwEkgxkdPY*TQBt#%DZq5Nma;E)crd4Uz|k_hEfDP2p9gpmb^9
zNor#QFqh<EpJ6WD4gDTEbV^49EeOdA<wqa8riFgs4Oy9n`5OtF`mRrFwP2PjID!(g
z;0n(9x_x1|H1YCcHFX{`u_ZJ}k;ddxtjdm@=9YSwQ6u>bIvbBaOF21w;prUq1<Qqm
zOp2YgoM&P-Q{{9ku33O<i0-&o&N4;A=dzJs<{RB&5KZgJS%NwFN3?_Jeui<v0sgFw
z+D^aHHL(Fp3~Wki4r)s at aJr?L=xd2hq%H6b5Sg7b=M{|IH;QSH!!L$<bK_`(UYHX_
z){9<UM)Y%hm&mOlNmv~#)eXQO{VVYgL?tULP%}BMC}ppU?uxuYI0MaTqq>Og{7M|`
z6W};)_tB2jtN|B(9q<8G(jO+ at +=l-2+RPoTwzEkWA#YsBb#(PWPIji~2132bc#u6}
zsv-F8DTcqa**7;0I#V5wHEOA?Xlre_Som>#qOu{Bk$fe-sH{-cEgM{SE3YPSQAdl<
zM>xvE5RV5Qd69LSGt;`QFZrf}7L9y>xCn5o&|9S2rZoz7x?oQ^kzegn-?Zv_V=*>l
z46>o$X93e4js5|fa$O9ruvEr($zoDxMq(W)i+h0aX%7BW`5yo4Bs=yd<W3Lmg?tUL
z0m!8iWD~#Zh)JmH#PT(pdqYR>>0#3qI~TN({cQ3E#F4**-uVHkAq8GXf8uW_sZ(C4
zYN65>K0Dj>!iKp44CG?9le!UF(CBQI(v8Nt3H{(=ZHuB3k4y|u9R+{QM+RBafNEjf
z^=j8F*UCq&GP_7?6{Koghuhyn&ysu&Uv3dUA_)7T&&sKyN|m}!-p49 at a+vW{fzjW6
zD?6ri<;hVN at Iqr8>QG}tBl(!fOXw%NNqtn<qOF|#msa-Lek(r4#sXI()m7Vm!~Pdd
z2RbL}c9Z*o6ZJg7wo%VS4yyf7dytv!0)DqOv_RV`m}G7loh|unR%~K- at Ta_H{w!Ww
zm9$iqJz;o{dzN|+`S8C8RM<c2c!s~|3u^v3?Bf|2Uq$J%nX<|@+aHN{k^h67v7t3#
zu%a&g0OIzgT-^Q{<U-+nR2lYbE#EXF-zw$2`_AF<*iB!Qn6#U<$3wj<WwxIrpItkv
zvu#$s1ilqA at 3mp@57>jr{o>49{j=xaP2eFGzMOog=>qRy9ehC~|3rkp-Pohs*jQd6
zJ4#mvTP1>3mNKxFj@!zY9EZ)5GxueUYi)KO6PSL}M2kAgOZVr^4$QQ6TQjVtc8RsS
zQDi;!{d&ynU5h$k`;1owCtd`9>Ilfe)`#-wxojeL3I`U)@2O{(N8W;6a!;^a;gxTl
zof6#U<*|4%&dVcj;QZZCKDaz%N+aM8CAK>7Wj&}3Evcnzxb<CC9Y@`*@q6KpVPbJ#
zu6oIrnClEU4gLiisn=Pc``MYQyK_nezdiA_rwLOSsqm$$NL{*We$sF8OWa!Ho8U)A
zEH7aR>d+&03;)HfwNc7Q!Ln$B;45?QgX|<5c<aFh>AM>|1bxO7tiJ?vYhO0cK1=)X
zdiX)0SFDYSbn&YttxK28Y94+!+hD^V3iV at bf-K4@$oR|k8S=-V|5T{`;U_ at cQ(fm{
zHI6p+Gw)N!joON>*dx|Wi$QF{T-DrMw8jAZL=LO<i9A)HQ(^C(h55hnlniSiCy&K<
zH1x}9oS*M)Wd_NWb9TdS6XW_+-7cpX`L#Qa4z64sXAfQkT_L#`ToiG?1TTsMW{A4X
z_!goL;0JxEh0$$$FYiK78uGbfN at sa~#?1AcCx1Y$f$!xJ?)y4kxaSMRhAaHN#!v0?
zkq4dkTp}@{Kk&&`_Nd?UQbPw0C-RtlZ<GdX<z(j>FOT?G$yZpTvz*{KaW0_x^7TRI
zedHFWU8MVhRv?E;q_z$FKK7|fi2od%HsCc>*WEPIdUM>(5MFPm*oWX{K4F(hzRaD)
z`AI4bFY3B{HgbKKWt^|-=dW4RXPCbbb~x}(k?r5G=}m3VFSWEjAUWHR$HZU2XovLn
ze0}>BeD8X0sm0}#!@rAqhn$_d$SSjD-Rxn(ae{d*!@M5+K6BW1z0TRLu^97EZp=|$
ztNKNqN3}2I0X`LQG8$5d9Yt_i!G2!!vg~1bFw61{8%Hq55x;YKHslzwe|s`4#<`h+
zcbWIVGa%zV=eZ*BQ}DMaqdj;AK_+?s){fpR_!KgR`hH5PJ}Q`~YqOn=y<3f3`kBk|
zT{b6UnvE&Et;~mzCuii}8$?8oCfyr)$B<!>qz+6m>nT6&@@WB{mb~veFONAA9Dm^U
z&2{`WWDkJdj_2Xe!gYn<Mos3OC(nlGIz2qEKLjV}=gfP^EqLyO2gr4Sj^#5Gd0{T~
z4tWpSAp7i0uKgW(ErAl{Yfi1s${&<ifrSVl`@&Ciz!4inO@#e|`UE9iMqzjVsYo4@
zAVscdi?U=$k9a6g;me<c_p%E6bZxto9)4dx%E1|uavHp`ShInsGta;mAViIsP(6wJ
z<%6RizRGIy`E7lui5$1<GmeqttA;|$fa=V$R&M;W6*MD(K2 at h^HOh?rSYPW9 at 8NPD
zC<Ss=Ne=Ej at QtVxbhU81hjSFQf5VPF74%5?r@<FcBNqFPF_zlesr6Z5h~xY}cWi0O
z5+iExK^_UGNQ9 at 6)4G5sm49xOb at xZ5E@FqClh-eJ8P^Go{hz>3-WgFU1lP|u{ORPq
zEb=nMp^t8fcefbwCIl at 9U(m)y10DHCf6;5Vvl!nMOa}IO5&Aw}*PyO5A2es1uWty!
zbNtZJtv;J_o$;HpUO at 1T@VfwOwk7xi{4UqHxx0weYK5#P`ee7dCDBSaIOsCy9;1~N
ztRHm|Jnn;bEfo(=j0e#fF*f6<tNqW3_L}J1@<HX>!S)GlD%AGa+eY73RzR00JRIPz
zLY{GK-bL_X)v;C|CJ-2<3p+aM)o-JYfIl at 5B)VC{roeYSQRhUy=m2UAw$f$u9ie==
zgTF#j>+C`fN=u1J|MOcto?_Yeg7wxdzh?QC9vMUR9uZN!`FdH4AQyaA1;mC4>w~@<
z2dsjP?9V>m!6uiMMuvlHlH>M#S at PM$0;~yx%6>>m^@5YHo=&aA|KN}Tp5Cxv-2gp_
z+Kc!*kCuR!XEHDc6Ey)^nfys at iaex7q4O|}f=)GNOw$$y^}u7)gMEIwUdmwlwn!=;
zK{XE7&3eh?>XUZ3N|lnM;B&d^EuG3Rt&lURyaHKyKmqo?K&HUj at ThD;Im_5Qpocy|
zFkaZphWxbxU5%QVx?Q%`66X*pDnlPjvVp5*p(#aHQIwT^4jkCmYvObcr at QWpDp~2(
zDGHsHmM^<39#o9YnRKQtTr*96l1{oPTQfC@@O|)~L~LuxgeKf)X;dOOv5DRh0evX0
zbX}FOR2BR-$r&xaLhK048O#@~*)zO;?_-oKmX-e<+%#C9ihQSlx)m-8DxQ-pw_}fW
z&dH>Zw`08Z%0 at TTJ{Wb0 at EE_M;668~we=nf3+%Yx;yxyF51j9Vh_`Md at m4l#SoZO}
zJb0lJ6ZYW-V2!?X25k2rIUDcsf}RfbYpfXNQYf?kg-hYR*+X0kH=mGvImD&#M>%rc
zz*FDImPy?lCj~m2DdU!_NQPXeB*|A*ekJx;HQI~-C!jj|VsMf2kvR2G+#WLXDdfW2
zkc)KR+(hz`j`RSRB!mwsg5-Q`uRu;Vv4MX<JBsag*q!TPcWz2+EN-LYLe^j{bfj6}
ztB{B2Ie!B%@f;3(6&GJWi!}gW3FniVjW#3k$N5g6uN+9s4|f at 4O#`ZQ$ft9NS<ahb
zOY9-fguecb)B{zXt8OqtFE344xj7LzPMCKw?$a92PIFb;px?wmzljOyt9DSm#194D
z_Pf|05~H&hJ;0oQF<fLWGiS<sAV&rT;IAO|O^_tAw<i5P4 at xd9n7CR|7`Wi(Ra#{2
z{ywAQs?T0vXJyuPKS-k6U?VpOmPfb2f6+kVaRQth{@fjh_d4ph@*KG*ot)@o7~l#H
zDbF!l#LF6#7R<4CJ0$zd!bMF3K6*8c96nck2JyA+sbDkAj>c at _>l<~Av!NCZU6a%T
zIVwRL#Gd+{<WFqRFsChT;Bbzqqjq4g`lVKC{Di}_!=LNp75{KQNr1itUlh2vMiSo+
z6{!Z#mwxHCCipkZ{57ySB^LYK%%Ho#yL}5RGIcI7?7Pkg#8X$1{b8?+l at R?ssW1Pc
z at H%(@2FQ$<(v^^<s}o}J{j1<FiG_|K^;wUj2}c$3rm&a6j^lW5!oG{sl6)!UJQDv#
z9xb=G at Ygi9*;;V_42yk3>f|oil;k|HF3?l5!@i^LMYrX+|LG?-1Z*e%b;FnN2ivRS
zbb|u%xHnY1j&Ay8lhc)&7gm&lBW$&e#Up{y82wcB80^OZoS*u?YxTwK>#cweFu`g0
zWLcu++al4;`eo7~KRthqrGAAk9c5rf?}VM9 at LaCDrarTX^<0QrD@^;KK-Ac67t!ls
z!^@1Ld8o;$t5$!r7~f$Y$;_?hOmi<2($o#zsQX2E(20CK-kF*BZDBj4j_M6g<b3pq
zbxCUB$7`ceW7&4IeHUUPbHkxa!>8`*gP;B;cv^e2rk}u`GLY*wdAI5fsgt)8n4R>d
z2Iyt=sEaslW*mI+%ytj>;yM5R`sK*~8(IhaMuktWk#X-8WOMsGd51mx=_PIK>)^i)
zHoS(p(2QCGz&@fsDOHB%qRj<}OFY0n*`Zf#yGZ7(PoMk-?HG3fHI;wUPkOr#-~B%H
zPK$cM?RbWX1b*e8 at _YJ8+xmcI{s6v#U!pQNJn-?_!_~h-E*9`ofa8on41Fnd7d{oq
zI#7R+=x^~<Z#=0LCsvl&wYn*=tG@)sVUW(`wPKBI!(7-%V#w$x at +Z;H at 1ak$SqEK2
zub77TM?CMOK4x2Y!0N#Ny&j`>SMN|?c at _L>^m72e6As-o_(IZE=pRbf;gf3 at P*Y}t
zTNU$GiTaIBwQ!b;5mUd=<0Tgbs8fXVX at pn4Hg(Jf^zT~0_W#5E1iMK6M+a&(PNore
z7Iwz5{QdB0h=P4`kDQKW!RN`poP>IWV;-l=;%+fnghw9S_e(1)*sQ8w9~?LQ_~Qr2
zkJTDmuFahG70Dlu<+%2ttBDNai7%l}<7U()KgQW}-AQr6x^NL}CxxW7Iz;C<^>^K&
z+QT1)B`g#s!JqIt(K$(e1t(t;Azvm6E%1|pgF5b^th+WW>y-M??Z99691j;0>`u>d
z0ctir(jv6*TcGFEErOrol~oC=m4(n9a^T~~`*|fNVf9$NPtu-+!+Low0&hr!?txyg
z{VB^gJ*ZnYRA(mP9Ek^qE8rWYY at _O(>j}<Iui4AX01s6JFkq?j2jt%HB at t}d0}juF
z`Wz&eu!@ninPPNqRWaTsgS7ZpRZ2&9>2G-rf$2E*=UD>NI^0XoUK~L`o%;a3iJ-tt
z2KWW$SwS-Myg<x^!;e|P=Hh-wF2A!uav3}&LBNSaw{thUeg}^Lo^>DbJwk5!9Ebw{
zK-cj1Pf2RU$m6-2L}DGfcSt+~V_L{>fxlw_cIW$UWL|_rPG9BZ^n9{kL$?Q(oNx{x
zE}}(!->08lTy?s+D6c#y(R!yR%i7i>=IzpN+V)#Oy{Zej9Cz$#cxDAvBlDgbW~d%(
zKXTx)>p`errPsbSNcirUNchl%&{t=GcOaHZrdx@=%?mfiR%{IpBRcDk at Cj7nD7=pT
z6+kZMaJJ*Hokr#WxJePiA>08y&{cJX><X;Uv$}q@)$#`Hr#aQXdU>cFV~v;t4(&u`
z9b%0vz0}-&GduC#m(tSv(DQyqy at Nf7#{?nYbQI3PKHb at WN>=JZeEJhF8R1cdthhL=
z^B=%I^J3B!)VsK#4=uSmaYimUY6zxT+X6d^)B_>@E{6EKu*L&$-F4?S<oCi?1K$`+
zPnUe=1i#p+w{$&MuMl2L_}Vs6{{pX?%;1Z<CJPtZ at ZA7>R4kn(?>RCadTJ{53JYGw
zaJ5xuE5usHXXdz^+#mW1cs}yrGx95qoW0Ou49^Vw_0&Y27<~eUc>RS0HEbsv^3I7|
z>EIQrZIEZ7+Xn at UhR<1jk_|&PA^ei&t50TEnrz*Y&#?ckpPdB1?08~#P?f>9f7^qc
zAGJ=A{Lo&;^AcX5FGDBb9^R*)WZf+G at JwJ1!7)JtOYeRh_aeEkF}mYRB-CKaBx3Uc
z3pojSG0}0(;Ka(;=uG(Z#FEd%;<#4GH5Kb`o!2*C@>%dr)PaRhjKp1Mhb0YcS}z}j
z|8#M!en~|*I3PEzh`tB@{(s?_?ELk>&mB<i#h3#d9I+sr8{2x1<m<?V$)Y;=UTA+@
zB66KWzCfKIjJxtEp2cOWAbMM*i_Va=!q&RS%aHf;fJI at l<u>qlZ^PJm_(aPm4ap`u
zkL0NnJS_MUfK!A0`6)QUV1HuY8uAw)f0~o&SA5zqC!nkBQL)L9eH_+8JoKHnalt*O
z3N~_zPfmEoEE{ApY)f6ex?XaT&Ln#lB^+V3cHCRQ`IWB$_i~-ho_v<W5oDv*lmF~~
zzNWpkN6#y-J^arMvgh<cml;7~zW1;v5qsK0S*X at dpTqwE98xFpoX*+0e)xroVV5ti
z78+eS`-mTF*hd^u;Q|h$8{ZB4g(Y8!eBmF<4E!i3E$G*&smu(0=)O+Ki{Ppl-EP&S
zi|%xk>Yh_gU1v6;X3}%Clk#xu2!3a>y)&h>61H+PaN(WcDt9?E;b)eReU8M+)j73#
zURl&~tL`4zyMs9W>jLJ3bIU$?D>$CohHTwLmKl#ZMs&h6LwlspM1nEAx+`1`eylX)
z>Y?tc4L+F8<SKS=gd1f0Rq%2T+32&=;SZNFkwgc0biVuxz2G0<^y)E%FKI6$x`;la
z1be#gccI$20odz?A$#3 at E9Bmaj+H&8nWCXuIm7Gu{m==_I6*?kS)T)W<$=qJKW4Kb
zpH5GX%XQ1_8?wK*^^-Q3 at x*@OJxbaE_wqoke#=yzi5ehvf at f}IBKgzv!eG;Hu*eVU
zgG8vQsQnX at a`NAp6!N>3Phc#r at uws9nX%WFum<b+cV3_%TL`WlVIjYo2R>T4eVEs*
zWcf}qPqy`te7`{tjSzm-LBx6HAs%N!oNb;{;U%ous8dmh at 0>ror!Bv1k1M~t$<=ra
z$M^8J1Ap%~x#Tt+cQ!e4VsQMhsdo;z(DU~KhdA7xGL>Kf5wH8OxFNr+=@RRp^A0hu
zrCif`39m`LB5I`8lQ_=8AL4ml;rK)R3-Q4W=z<^ed;g<9GSZ)Gw&DI%G`W6Wiu?W9
zAJUiMdrQ59$R%~<m;L2`a7+*X4@%^lE|7cNT^kzG$1K6|iI96_?*nIw4ERisXZE2k
z>Z%X}!D2n!dw~sj-4yf1z{wQd72v||uAM?K-#k}f7ILT#Sh@`vmTt9({@ft-vLmi|
zO^}9qP}z|GtHE1OaGr}2?OZL at MZg)P34m4IHo$Sdze#MqgQzDtbmX2tHLR}!copCy
zbZK%D3r0O~HS&gohUV}M!ecLLJcT^p==`?G2jXvvtJ(DM>&s%>&jQO{4m?%agVUBW
zo5<2@&TQ{aY-x9~%OP)WVBep&rYHBLrOc3#YeW76xauokC7iJ}em8f}v($B-u at ciz
z{T|3*fo>2vdKDmD9kMk&NNtv3d)&jzgX2O#?7-W>^$)fHWIEx>EVH_Lf!*zvSY0>C
zxxXtf at Piaf#6J}`Yyht595`apuRr_be0z<<@GaF9xSRopbmb-bSd)vj)l;3DEv7pn
z=<$=>w^U8swuPQsxHHrb`QHwmP4vF9Fy~(iZFPv+1<p&CA&$4Q`v2qX-Q$|L(m!A*
zDqw_B0U at BZuGzJ&w1^@p)m^KCh*k+9Are4T2$8Ba0~z8C=|yW>lvG7&S6hup)kZ5R
zV(8j>sftpHkxHN~YQzg at FUpV`2*Ue46YSdk{dRxv`~H#7oXnh=IdiVhd7kg{eg3TN
zG!*+;Lq3H5!Jqose!R$mZ+L9mseNqUxVhJUXY=EPGx>S;2FihTNN+#C`4Z6=6D+=W
z2GOljYeM}s7wDIQF5~#4VF`7Iz9cpVzOQ7xb4}lbr%`Kh-fUP*-5DswJ#nUUI9Cwr
zZ!YN;n at cdi?6t?a^ab|wy^he}!p-lcVUO<B|Bi&(iwE2ZPsG3Kurl+gnb=>z8_L=I
zvx=*|CXXUMtSXlH!}_`*HnR${vrN<RB<3|_g+rkp97f#;TkBJ8Ggam7$14f-fAO++
zAP;r*;wA6p%x<Db0hYb4AIsk3y at V;`&Z#sPp{G)E>D3zG(6q56&CJnUt<2oZ>0g++
zn)^s|*mq`w<{{GQT%H2WU8GaE^lD8v(yn{gXjr6Yap#}lLC{xlZnAFNXeX&FE9$9h
zQMH@@yZ?&41Q`&%w&uN$l5u|HQ?ZwlhCEwU`ns0L0L)h47+>AXjbE!|9AZHddDX!F
z2s||zL*QVVM|?hayetQA($@JTJ)uetY>_MdGDCb*kBDK504|c;hw-h(SV|hAUNBqd
zzJKMUyYpv<-<_Ls-HmyN|JU*u>W-n5x--06xpV4>QRx}yM}=ig3u-DAZdp`1$k$Xl
zV(aFtyFs61F*j^Q2Nv8~+pubLkZk2&_ at gam-va}U!y>b6es`4>y1aJJb^fb%2B}wO
z1<jS$4ikX4y?9jwKf^N6_rR(TgG8RPVNT^m-KXuI!=~a|!zwjDKZsfvaeX6GX{lx^
zgM5cg&T0bIz;0)#Hs#r?gY0i9A5N5e8g-2AdSFP_UCaaTD8Uby2V7oUnY<7Gi<F3S
zMR0m?M}h0J0n2B at +?oX3i-6-8+>E&fa~Lo+DGMIMuKD}@n7`gZeAHI<1wQ<C2!;?b
zPG2Z=uqj0Eh&{ve at ohespV(L7o3l>G*2lo^AtvW}O;!3OH7-09_PGay&T#bMk>i9;
zvZgKA28=uGaGX!@8R5QgrQ-X9pt`n|>9gCwN8JirAME7SUZdlL!0M`J%##TBF?nLM
zV75ZT^M`EzlemgejVs4q191akR|lqR-P at df^SL<Salg4H+y~oGYl2_JJ;jTV)qVoM
zRv6yN#jqzBo}q;y&3HdBi}X&OS(T?z{f at VfI7aMLkVBSjCr4(4W<|(K&2r#FkLbVK
z%jt-N$i90N{LW_pkH5&gw?08}4!UQ1$jY!v;Gf%oe{Nf=q*#J~4%#KZ&iPLy!X^tn
z*yyQpGslfEgXn+2mt#Vnd*C4-9S at AbRt{ssVVEVTuTpt8ooL?4!Z&#2;r{$h$p4{B
z9t`>vIyDZjy3EV_7oG#Y79ABb)8o(~h|To^(Wy{@A)daCm?!P at F0-tCw%fs at tkwa&
z-y_JPuy3Jm9>lZI0h}q=c at _9%yhBYHAV=g7{TbnE8nMQ#tdBFVWD~h}t$`nC3%Q2+
zc?_QvYv8Ud8=V9FNiKMX{1E?bG|HAw at ZQUghO9(cKdyN9buZ#$(qHCx$dNi#rO%wD
zpSHJ`$XX*FS3A#Tp-!hD4iE8d$glR|zbXHmU=SHK`0=^8h0DTG?ruQ<$~Xdh at srU1
zrGT?20o<z*TP{Nn at kOWyu}_1);mEs*`tP>>6tXgV3eh>fv at pwp<NTL2!`=$iWHoW}
zVV(RJA}a>X;OxS$hx94p!xs^|9QOC!3p(J3_9&l;T-$GhS||YLAoe$}3uO3~MbJ9}
zR}wNA^>-HK_lJHnF;{rnsS*l4K)?7 at 9)W!{c!8l0E+>0mqC;T&h|hd0=C8peJbQ=`
z at u!Y#9tn23+fiwXuZS#SJqbAk^O*J(GB&{Wno8mT at tpA2!Fu>EY$NbN#kghXVw|NC
zE|{UlP&Kb3M2LNH0^w>QzR_>p3Y05*0 at IW%ILW)95A77BoBJLul=lTjXY~cn&axKF
z&2Hz*xY(H-2Vw}ge=RfjmrR^Za7h at yYvFfsK-|PgXV`+f(XX4yJAl`Nj}Mt^%ObR%
z(-Sg(gU>)7V#<0A8bQ7XxVH;eo$PvXHi=tPv;yfES6VATI+fHzwVMy(k`E57rp(3A
z*-EwpuSEFHnm6~Nzx$REf0*sB>;J61d-R~MgD;!&P_W*-3D}T(z`S3j#Tu5g(e&lY
zxFaxUWkQri#vmpK)56)P){2|J<LViOIX^fKdpOKH!38|%013ZJE;z~b9X?ER37bL%
zVy{%v9vjyM|D<1uo;Vn~9`wuG#NP(N3krPfC{t^05_wlhDZx2pVl5`uR`~na74^X%
z5e#ERC-JMhN at ER@C{{x!umtULAyiG;&)pt~c<+2!=5O#H=J<5*z2FV$cqV)y`bH^y
zGsM8?i0Vr2r^f*+C-1b(Wc&25Zs`u8UtCuqEa{m}=F{ckCWB1NDkVf_9IB3iK837*
z&<$m9n6)!_mM*q~^fPZ at 61je-i|^pD3TH;$C*O|#=msv?t}Xj`P3it)PNWBt_J{{3
z;xS7&Fp2^hp0SUV5k4w9p3~d%<XwoN0DiqKy7;S4o(DZS;T_t9b;xN{!%u{H&z=wm
ze0d6dtWvkM;@UghHBEujz`RSY{R00HV9#mLfuQWEd;5UTJDA`Lzl(XmJS-e{luN5|
z^ci)|5S`wa>@&3?W3j1iOlnix5=m48#}!Zw+%C9v*_puYR)=*}NG|sNE*ryc!quxN
z4!SwjxZry5Ce1W8fXBDdir86J34Jr}8)1t<2t2j0&{-lWboyQmUxM}k=O}gGy=k2d
zvfvxw3xFI&{3S9MlJ?}@dxl#lGtftzSD+Wg^Z$lx;rPy{xtF}CH^Jp50aoc<VPB{k
z{DzAOW{^1@{66M~JIo_NN~DuX1V)4pP6{!P$aWEN&&uKFxi*ObzXOMJY9}%b+ZQ*)
zHCK3bVcpt7>>Ka>DbAPhlpM2G9eHCsxqcTib^A}*xA<!@zDas~b~j&ccG at N)_Figy
z39*GhH<gIrvcN?74dPFR^hU&Q0e`}qB>kB_^$l|T0Kc`^Gm<py4tvP49zQjCAC89z
z&WS(E-1jqi&okM- at Wt5=PJdeTCa%4sPu)iHe5#jxK#rgA<j6yr`^+TovsXP?TG_2n
zJxZ>f&`XYx<38RixHih%*F^G+LY|zn1KO9F`=ZGI(fAF=z5_Owj7>qS;S-2^v<ooL
z!)K4Pm3)*SLTqRW(OCl9a;R_zo$A`7W2`#gK0*cBMHGo~_Xk}?*+p$<rFs_nq`nK7
zIMid|UO_ at 6^h)B!sLyNRXJKlS!agw(^5 at MIc@NgM9`G5q=_T*>=_3x~-BsW}EP8}F
z+Xg&LBqJAw5&2Oo!`f8_AIkmUCpoB%)KBBE0(14#IE=u8IeA21fpXsL*Pq=%-cK?1
z6U`+S>=!QMo7qjgPJE-#)y5_^jtaA5t-U-)&Ldn|M`MbGM?$9J8A8k}lK5Wz6!`N^
z+skt61#IE4U%!k0eZW%AQ-VXTV-d#U6s-^ZB&oPpp>NvPkI#~5Rf0s}5zepD-`rQf
zKN5aK;znK)%3!W`^NKL{*+_Ywi$v at e^i>LdH7V{28C$>!ea(~NT9ochU`e!Hvyp!!
zC5(zztY)N&a3)C at hB35*PIT$n1tQlo=1{_;;HxmiNEX2N5_vH<Q^WBb52A;G>^LbF
zdR6T~_;C$^f0r*;UL9B70r;*v<hk(qJ`nyI8G9Q}3SO_KI=*o|n at N^`-(N?lpICt)
zht~xgMUP+s(;;}3=@!gH-Ug;sFq>(^8gU2QZqATq*yu}y;Md0*D0Yp>@aQLNguG{t
zga<yC*nzO=|4DF?tVvoMY=#bSk_qYJ$)7^*yuitwS?0aHq^{0nkK at Ca)~Ph_?Ii!F
zoGoV0$vgGa{z3ZfZvC_pay+DuAmdA$j~_6Bwb&<PPdJF$G0-e7kKZIL1((R9fl`aT
zXdhV@%*LD0FOoKZez6+s%0Tig=s7R4i^#nkX6b-(x7Zj5e}kSBVF&okzJh-*@iF*=
z&O4NExyY)+juLEnvhUR6F5iZz2Gr|c;@r at _+`5<ZzF=83cthov|Lq;6g4uYN%NMAM
zo=CWM<SqY}=Sxx!)cccs2T8s- at GWq-c<{&x<QUJH+Q;NMoV|J=|D{m>OdrViBEor!
zx=lpi7h3+r0!xoEl`1?2EE(3^)y<^+3HPfVdtj|JzDxf%E&37iV9kC;MErR7`fz<_
zKe>mi;~9amO7IW at k0>d+0$HdPV at V$<gHL}_(RVm^Rxf$Kl*EETou=adkNVV&B=1k)
zC&b+N4oN at Kr*0zG{gA$2AkVg)K3McK(hs at 0FfRK(=D%C|)SV=cZ(uxREy*r&AL4lC
zA<ntDX%5*ZG3XCRvwvYk;G`=hX>(r#=_9AfoTqHZv&_)14#G1K8~QMLR+v6DmK=xT
z7cgfLd4~9(!T0!`Q8B_Jgfowk#<kDEIznU?ABX(>9K=oyUJxE8z&g;8XWrX_ at lEmx
zljSDN0Yfkc{A*05Zf+HnaeBWVjA<$y`;w4m{I(mmZ8-vduCzJrywv`Ajq}-d$t`i7
zz#M#weHSP9a<cGBly9l4eB9h*XMZANi{}u)pSpeflmm9~$#OQMg^}$XHWGD0<`c}F
zn*{~rp4bcMM@}}qw(W0{W+!y4j|~#43!HF|SgH0KtY44gW at 7FVM;=LD6#1Au!!^If
zw!~2{Rz}25ZF(+- at b>T=!qiCMwut<e`vB!S^?RKJ@*Hy#<=4r3qg=d9J(bb35I-Ke
z>_y<rCs;kX at Br+z|LgnaB$E0Ee at Gwn`F38r0Gu)y4-WEtW}*BM<_f$wz6~+e+WY4X
z*d|=u;)G9&f$TV>oW!eyT(AZ85&%DE3Gr=;N8HhB=Wlx;5626?DoDz1LqFIB9+V#r
zm-@(pGhE!5DUvbHbjeiw$dUa1jNdV*Lh^z$MKan+Yzc9}+!(fFEUkdwvzOb8JbT<;
z?8md>zl$FpcbV8ef-~d4iBX#$K2kylnR360jy5+r<mR>}VE(EXS(-RpIO4xu7nvV^
z#{jz(?W>qLN7s_xwcr8qTS$LY?G`jleh2fdmAsQlcl8UwBB3)>%{T=|F_)Htt5Kix
zkN9D6*PdX&pV)f{W*TkX2A=uG_Me-b^U>Cm6J7ptu<bio3IATD8u%2cmb8CQhLTU>
zhatuh at loQiVgIO-Y>Xy+mV}3N>mI^i6!uN<sBz!GzK{a`W>Tl!L`M5<F5)di?j<rW
zIIngKWRPh~g;o7yZMv(DdDbU&yjN;<Y{joq;)A2XQ7T1b0{l;qxXzPn`CNJjm(P`U
zUE3l3&9Osz)e$$4$YzD+xIyH&^*+Xy8_ILDpXV^6a<a-vEggmL!G7u4_#R*#GvWrR
z)+9(rO)nJ|2HcL&K8#z4w&b3(x6kz)BI|8N>^icqSp6~A)`PgV?!b461 at o%i23&(3
zYLT!kAqi_a`kMRmXoqCsqfp at E!;=-~Dr2-x-pI`Huqk}Vd(vjukHqiRu|IxI^vIZt
zMnHeE665=|YB&BMB7YuymT+sVTPZ)+|L*30d-n%|T&$rM;Y$Jyc^BfcFLLz<l3y^N
zJI69<a(B#yZxQ~QL9jt^>+P4^+`}>pg)ad+n88cJ9Oee!beXuRpTAXzef$@PqkWvo
z!!S3TAvz_pS1dly&8t}J9+NWvE&CB4{t@<9`{k7>IOk>VyG^bI^y{15z=u{#<|L*!
zZWGRj;6LJ$koDiQMQ9IIV|@h=Q2!bT87gmx05Z+M_qjSPeNv~-zJoe_Y7b{Y{a_Dd
z0dDtlxT at N11gCfWz0Q8MOaiuY+UCxxQdJ2j?-1E2BH}Nh!4wPms5sP5crrYdXGRPl
zqd){*w_Yu%OAbPLum>Q0yBOsgB;J=G%3KLMgqv?RY~pIFr-J#VCvM<;__cBJ#NRQ`
zjY;^SuJO0 at 82Il|Jqf#s49tHi<C9mLfGzETk5X^Ool!q!dGPl=CmQx9d_ntu$Am=$
zIt9s*Cnu&CUZi98HmdFelNPhLMD-JNIndkNXJ>ctVejX3`K_qChi2z(=p#5i{-5x_
z4Ra#6G9a5 at w@hODs!HjX85z?wFR0pU_NZ#gF%WeNxtiOPq5Zvo?ceVvll^Yy%BVCR
zcyzsQ at JM@IM+}zzJotfn- at rHJVgC-S+7>TEG}eNk1&{O*upySxuVH>Aa`Yxvz_cOX
zN085->6gz3LO%C|e9oUEC9-zxv)~O9MSbCt$@z#)iTn3PzQ%M32ANBmKR1_rdnEE#
zPVPV0FN-HY7Khw_`B^S+S>zI?Q?Lv&%K&W;=4(=qk5G>{$INlrZLwEy*=^IzB{x&6
z-Kb#K_X-%-JA?4NW<2j(*SoJXiSk=IS^GfXhM>RKL3S^{1<pS=DvsADNQK at j9qHB8
zl(U7`?b20X?SP*hZ+rjRQOvV(`$F{pR>;gAcI*o`$**G#ar501`6*c!!MoHzWdC+`
zwc9h#6Fd>Gm&_CR_Fr7%cx_!=66P2;Zq4i!CK8 at ye6L>fF7`o)A&hxp6X6@}c!tEC
z*>c2XiwKs(mLY-f1L3Sq4Xa>|W8dySu0k*)tb+K)B at Z2<nU`Aoz!$OK=Um&mk$pAn
zJQrtIr1%OPNb46|SDXVc)HlGteG@|bN5q-WRFy8t6u?HG(73gYb%_5N>p$*9NDYy@
z`|V#I at O50IJ-{vopHoJ^og_^0H$x!e;`!G)ha>g?<_lw8oX3Y`j?FPod6XY8WvyLE
zJ(1hC1g0xl%*jNSdfyv;ne36-5oYHta{M#dKMvV2U!-Z`MTm{_7ioSWxYGIQnuomS
zaa^dm4LiuiQ2)sfy at 4-dkw>&l^SCneSR3pq-y%lW#rjup?zR514JWpZV-H<69oSjm
zEAYW^<XMI|jwmDQ;ZcE9xK at xcBya9QUSIx{h;^6?z91MGa-Ee>H=^=!EqZERM&zX4
zf+^-RzR{u2Cfez_lRs~Mhn11NqX*`pIre<%s7k?p<mKMsSu(eol!3%eg3coyHeZX}
z8vM~O-Szcc{ddku9#|ikr)*aySUk1&uDYo-%HDn(bveO9VNbOc at xx$CEIdJ{*Hs=)
zH=l0L#oDlt#ASueX?E;Aopdk)*$l1~q*xqkwWS(3hQ~N(!MSEZ0?uXP+~TN)SYnrx
zXnR6 at N8LOeUE~b8<cc{${Gz?W5KlFyuFWSksvde5Bhzj=cz0&do`6S`zfz`TkA12d
zz!&kNq3 at J0yK(F|D;b!WmCr8 at P-V5}FGNhYnDG}2Wb(F^LjI}1TqSGp-)n3Mq*?`O
z*PTWCT-Wnuo|;9OTQkAaY)we3c1t>Z><;`kn>uGTK at a3{y(Z>8$Vo?2s!E at aQA*=k
za1T0zM2c*@(^2*c<rTt={m!RY_p|R0tD5++IR1!Z430nHn1W+7j>$Nl$1xrK6<A&T
zU=Kk&<ZpR4{19(t*q;&Gv5Fs;>nsT1E5k(uGe@=6$;wOUDX>$dmzS92-&kuR-f1<>
zWjE7e%?jxCVhj-^&cV<aA7J1EQ<O%RoZ^x4gtNP4<_`0ZYfsi0hMy}tJop#re at BK1
zHdH)X`l0*^(ti at bw|?n6a`+pLd`U1D>9^&-B0Wv;D$;MrZz25`0etnB{zKl0^ccZH
zq(32Cq$34{vwZ1Bxee);Yb5XEdw%KWZzDW at x@`})>b$RQi0ie?-QUPaR{g+F)+_-p
zC5!(}!`3M~yqirn7V(5>F&{h;xkkuY`{`oe#vmF0u}?AQzt~nce&l3}_{>#cZEdE%
zp1BR(*Vym`&8Bdf;k{Fm>~Qcw4q$_nJq6o?Vwqv4;;y$nBD3yb4kY}SyNw&O!4-Qi
zG{|>NB3#U6hWlDI!Q9i&*V9^XMtVAxNw9ZJ@!h5Jcekt62KN4Bs^@Mke7{drySY6!
zWzga|J*!^FzB-jR6>%-wS1rr7Gkf8;{mI#A7IM=}9(a3pqwlJ<OTgK(Ija?XF(i(k
zD02wa3}4r8;LnyG^jwCAsnL*H*SIa!l=P#>w2_}`5??PjZA|*WB>qig+I~;8CXd9L
ztt!pO+^gCd4*c-_{CMjO?A53V1tbO`!PdFC@!$uqSCxg!uG&~&<SYsFbnvwIW3~s@
zhJ1i=1J3<ma4646P%H|CFL;3rdUSB|yUs!G5z8S96t#2b2~R)rb6C3wUn3*+ZLBKY
z(2N*2UcP&v8(l)roRpw at i)!PQ2xcjO1vB@}c%|C@^^{l}6G8gG=ocZ!4e@>}wgdB?
zhB3;mI0~6^L)X5=M&or!ZRaoveZ}Iw^r1nr-Ad^dN0|om!FExtk&VdwRv$ebm=<<2
z{1ptQxi=oJ$uqXCl<+_BO_BHEe{)T=pOf(?|4q)DBAwyk)@*5(%2c^CH4A(-CMR_G
zh$C3r#$Ho(#x9E5fbpP;@<6Oz*l$9ziJsW-PoFJj=ZswF06sul4fUM3X1J-W%YXd!
zn!HU;WiDMVE4bhGx<s+CO!9#foJHV$QdpAyMjKpQMjzRYUT=6&ewMNgSi2QT at _UB7
z5~FN3{|e<d{!U5sP-jSYv-5$3E;put18M#EEbtvU!58K1PO51JH&$b>p5Qt>?KOEj
zoyJ(`w$%gdhUm at K;D+7c0;#ZFo at Bb%BdYlB at +9#gqT|?gzT%&+w~FES1Yd{<U&w;K
zC#p&dcB<664(eunhb5ejLET>q$;NlhuD1Wv6l-N7s0cw`#iJ!#vG4s{(-}1bYfl3u
z6ugS-7Ot%jOWM^|RY~W5ib^Bbd69xt9E*8V1S0M at 8U1MzWK{T76`^h0lcN$0+o|om
zNdnlDz^ff at 3a6)=<TuXMMC+ZEDXW}_dFQ+*qTLM9roOB#x^G6l%5&;7i>#FrZHa{r
z6YAB|AESLIaqSy?qZ=IfHq+W0S8Euky{z=j5O4_=-EnV#jA>mpCc9CPG&sP}P+_&?
zY<n><lAmF?@Jk<fs4~J~=b;*6ZM=n?ze9oHyxuxH{iW-5YuaO1#b(>VanRP`kM@=+
zZSa$Xob<kp#BA>H&(!GG7j{%e7j+<(pQR(Vwyix87~WLuDI>6^q#+%F^eWt|hfU#*
z95K9#9>YJq4;aD{!efPW3DVy|59S5AB at X|;GbqFQ>Q<F+3*`}g+C62Zzt#)Bx`^Y9
zeI|HgR7_5FRnmnhf+29G$9Gf?&>kCnT~3ar$0gd&VFNvjSi2qi^F_b<6q_10rPh?x
z$C}RbQ!O^9#8Uj3M74~XN8hAwD_%B8Ojg5`-PXGjpY*#CK8uha`D!-T$69O}iDlzo
z!SA&xmA*&m=`+5yuKd2;yPdh6yGwGra)l#Q%2K2Mu{#D$cb_ilJ*Ppb?1O)*)fjQC
z4Qs_k=nW>+oSWb@?3?T){I&Kx(_x)(qtg&WS$%8ieZJ>R&Tx at x;oT(d<hzmDNj}Av
z;z!^;qeUpAhib6__8`2^&hFX0ll?eX_#f__ihEyn-HWo8;@fIXPJ_s_>#hj*Zp6Kt
zFc$|<!WjY7J<QR$DmCorX!jX=hz%U^fDZ$+f*7xHwtNS;`5eJLe1|dmlY^9>sV!+}
zq?D1u{$9E`$0WCS(m6(_S(4dGM`V6jqefqqX!i%#W;O;Vct$eP%rVLfnc;P^L;Jy5
zcd;)0(EeaM!D4T&iCTo%ImH!s8r?^=86-Z|yE01XvlFo}L`uDn1aZewpg#~<Dtq;r
zUmFL!0UMUFuS_w~%T<r?^X`vLV$Zqwv0b+HRpkY`-ryf%_f4$5cUiCM@||_R at -nz`
z?<%*xinzfx>#v9pn`1I6l2q-L^UA$^<*J({Bg(y~irwd}z?a||3;xS97I4pap!(8R
ztop%qKb~j3--vfShj+~PX~=we=R)Q149UOCY4P1y17M at rO8iBdbkYHBI>mt7L{3}#
zs-=4E93rO;aN?Ym$Z2a+ac<#%k<$XA?ztf*Blg1H;o!Q?8xI)}cuCt5-L});lGsP6
zo5P5YA==$x<=W4Xtvdi)wq7-}<`qAuQS!+_gXDt>U`0BtcC>p^wcBVLRbM0Wa|Xvy
zCBajTO}|Ni>vGRr7R+RJtl7!42fxM7!u{uf6^~>jh#B;I-^tlVAAh1Ri?tGb?4k~?
z50$&hFeE>&hx8#=8G?I^w^vGPoHqxUoDYTq at 6y}<{)qqk{lVJ_M+t{D)kLL|ep6xV
z9h3Pk=~J%$wZ+NxuOhN<f42)f2rt9_Dy-8S+Mf|^a#%&MNfwi`|6YHG!(V@@{uZPD
zYJac4Rj5B}ZadfiiM{eB>Hmi4p%qFg-Fa8!BSxGm;F6cvo{WLtejfun{x}9?WDH<V
zJqv8lPGEa>=ANL7r=OtbL9eod3Ut|Qp+iaIIW05KN-Q~NmsRPX>jIV;7?&|#q&?wt
zF&G at c)|~6YSP$vcON=Zt{ps?=wHmr~2T+HS9sj8fZKMsKs>Anwufyk_uEWz at 9ac)V
zEMhd6Pp8NBgnR at XQgKBCH%_HnF*lNNN-zOB_Tkoe;B7~~P$MXDE`px)_RF5_Ch`7j
zs1v<lj;{XU7Ranx<L3L4=cZ4_p7=K9x-I~w<hHvjZ4qw^3m2jM%dlR_ExSpaLp<X;
z!74(o?Yg#MftAR$uz%mbriM(PsB5{V80Y{V;=&pduPfTXUMm3K)0zS2;WK{_YeFNf
zCiel4UToN=ebro2G?XiATb2IfpTTkD#hVPf`lJ09 at yz6FjOIaQ=8_SDdC0Q`97Ot$
z`$(SKQeUHBAvsck*rR_LE<)aQavSbz8aiCrgZ<edtVe5d^tBg9pP*>0Nq at 6^w*UID
z-OBC?VW87AX+M1FRm<QvckQ(ui1RDqIF_88ED=&|KQSiWQl;M-6Gg*+YG#wO=Xgcu
z(yv|V#|=n-<x2Oxi?pFX&+|x^_n+ at U+Sq@7B=*Y!q-QlbJIZmMJO^p(6{N{?khYWO
zljo2;<oV<|<a{U6<T>Pgko;s-(j`kcbcfdP*sH*i-^9Evt4kUAEYdB9C2ts!9_>0`
zv>fT-{dsDU_Uk{t7is_g^L+x1>)DQJcu#-1oT*6nm#b?c(*5Ofh>-3tS63#|{pE6Q
zL_5#M{}a%^Mff(+JAHSm0)2C717znRn5%}5{pRRCN`|%PblOtjhu~*{J>^YbJ^EiI
zI8!4$Z;(AxS{D8vH#%+7k2`4i>MSiB)WnKZCAYx^g?{{eUEIh(!D`a)#+xQaSNy#6
zE2A?vX;fQU)_7Bm#K)cnzT>4QaK0S-v$&DZl5-i+V=u^7kbGm$;~D-qKV0^!v1zsR
z<L_z7`1l(2X6J2M>)bgfi`}^}s~-Lau#x7~L+%Q*%-r at uc=G%{^!wTx;2n-)U+&Z3
z{{2z#1o|}m;e1>Fc`Mn!dCh_@*jVirb_)J+u+LZna)p*}w!L5xpIrsp%@}fy^-%14
zDY3%VU?cn4&tyKub!|t}&28<eIQK1gE}NYDG95aj#ELr&weazc|7 at 8d0>0={{I4->
zZb>sq=opVidQs3Txb|9AY4+|_S+I+Rz*gpT$NtaM at HoxzEp;6GFxX+>@6=rr<LN9L
z=Lvb$=vb3Fr=v0jayYAXack#bU$MpVw(qeZYDzTfxybONZke&#E&-RMe_bOp&hWGE
zMq}IR82Nom&If+*|LB<tKE1Erz}ztRd__&PZ>u1hS3fn8GFE7K8%=Sl)9|%<lD=9K
zJ*btQ2(HIgRaG5tXpB(}UatkJgZ;-(`;TS)#{>Px(*EQAy4=I>8fFwaD7Sg6DOnX;
zqkgMZkPN*}g5k%nZi2^Xc%5y{IKxlA5 at Ta~3|(qk3mt)USL>2B0Vj?fpiFd<lC4~)
znpzR<3A_&WN{e;hQ+MX~)Xi4ytBKy#ix{_ET7j|cerm3e{P!t#KcPGy4_?&0PCDAq
z^_9rz?2K9dfS*|JSyZk>-KqTGV~Ds0R4Z^@MrIl%T$N_J_;@B_K{A;)O>uN!O|*wo
zm1nwW2gV&fL~Z!BzMKdgmdh{WF9OWF)E at Xv`a#G4z4kT at TR9u!=|Eg_Cv4{CB<%k^
z%!)m?5koNeLFTXYPLy#EuZbBcKF!U|n5%myuWaYTKd at H_E+NF{eNb5kUeO?mPPBkO
z3G3MB1rFUj at Q3PiYA^;3X-hCBM~*#f5ug8s=;6t^s?xlhA>CsyNSAmxl-OT;MNim7
zrQrWkq!%d`rYR?YJAv;&KAUtL-Kmt0Jr4{OiHG+nHfO at 7kV~04vC>>Au#NS)byU}k
z5=#}GZaGBWKcsYPCoNX2g$-tF6!@D at e+M0AdiJw?#0PbgT7DoHM&C$zpSyJHJz7lg
zldIni`7yI7DyG8Lcwc*uPFvX&By)F!{7BLm<6F5oqLX0L27MmiE=An8j)o>@d&AfZ
zR at 9R*`U6ixw2!?^QUuIx6wBh<G0$HQewO$apnju+o;Qr6at(r^){u=+f#f=LOWUXv
zaQ#I?FI`^Ib9qv()Muh^6OrXqfxsV;F&*A7j{uL)VLZGblU$mP_+W;vheh~?4V-+^
z7;@M&6Z at F37Lmz$U34RST}0F`))1-(W$W`!Gez)IH9hkiw^q>$Q7>stmF*If at isVC
z3?oXdh7qT&;6``MZ=yah&{{jOcX at f|JLr6Z-C!h~e0cuwEyK;RRzu5l>)l&EuVa4V
z5jp=q$~Y32jKkAF#wmx4Q=Yp6`v at U#=yaQ#c>@zV@^={#zHLOV`E#a8zU_q>fut?y
zIWwfwE72xzvJ)t9{si%W;puUc)^xf<KS0TAT6?1DPGG=Th9P?slVo6O&2;kZKZ=H|
zi~A1Wn2vVEHyds$`^Y}|x=6Sjb<u5|NA-p*Gj&+;?fvJWf1y61)kKce1b85RHE?9<
z$Y&$pjXW~wjKtSPyA#+2kVy^^nM(h=OlAI~T<mnoR3zRdb&8&h_L(2sSr<#>(Kj{*
zPpIgDjC!Zh4RY#KPR1(j-v at Q}%dDkXTWv^}2ER`5*hRCVViYgyGKV;0WdD-4Vr5fp
zkYP)e(#(KZS*C{IUfpDoYZC$#k;wtMem+B=$g}I+G55bym+bXE_8Khk6GX4R*D~qs
zYowk at eWR{>;TMT|R18L+{KeR_*QyLMIUVgcCUpzYhf=5>!$oDEcRKZfx17`|-D!~M
zt#OU0<AqIa?GkM#J!goQ5_P{RRk1urk34Dpd7898(C|H`)ijN|Jr}b)-$C#XUN2%y
z&8ca+Ie>rC5c6)L;rs-vQfkUT9E+vankRMqALUkuYww|P$KGQy_8yachC&`LW-4aL
z#HXK<ogojNO at i$FT9y7Un}G%9Vv#P4aDDd-jISX-Os^z5KF>f3v3lXd2$`DHf$RGf
zFGH?vBLBgs*W>Y|@6D`fMBlsVZYF(<e-eGEZ6N%Iaz*%`YRcrNLf;fU!Aj~e=SE~A
z>2vhtC-ua)8YJC)A(x)2qYkc)8Y$o~(BGvb#w_;8>0Dc=KRJl9v^v at ehb-S=I73<Q
zp4FQF&#~9P$0l)F$sA7|{k;#q`G-FEmp}AD&!_qz*_W5P_T}15|3CWRWZ;JF7iU-e
ztk`|dNv{~j1P+J)f>_y%y?XWG(jnt&ay^}fvI<V;QL|S6TZ_2n$~zN?zD|DMnA`cD
zj(L+Wn2&SgEsZ_z$#3IaA$T#T3Q}+`%+mPiA-FPgJGbhXO=-aIUwLP&rO`1K{$-FC
z6}t(Z7PxCs=DadVxh5kK+>uys$a+aQXn`pLe)H{L1hQ(c$FqRrl?Dw2x2aG)tlI0*
zv6XC4ir+gl;!z}z;oFBLD%mRiM$dIbPhK2UK(J+4BO!0<-h6NZ_LhWr5?2oPxQ)Jo
z1l^n0RCq?2M<hen+3e%o9qSVLcG$eY_oDcxim at EDi>7|h`!hI7=&9eUBEeCDBSUm&
zq0oP&Mt#pq;9XH&Q5aF)7Z?q=6Q?SS<Q(JAyb}U0F(#L1gpPM(2<&O>Vsak3!z~IU
zBkE7rB8_+fOfJr6;@(- at y&vM<$K+mS8m<?g+d+HJV0kmaS38_}OOS|IjEPJOxsI|K
z4YJeDvg2B>ngpYh$@Q?8ZPa=JKc{2-jhoL)8Ari^AYX$ruvdxq8kE9bgTk+Zmqgyf
z4-4_H_%>q?@5-7e#>V(-tLYc;KJwfb8Ec3?V#)0va+^_C{8LjvonWRgH$zoi`5t(K
zlaR?}eq;QreZR>9ADhf0AnORf(;(PUk-yXUR$OXOEU*V+aLibBnnG*LiK%vD<~uh-
zmPXlQ at a~W!<fyG)^9k_Ap;6#Kq>Lf{H5WT)@vP+ititmJ*MFw}|DfMcCmrM(>T^*4
zHLiYH#i08B|6HBn|AqelTpi*6&i?;5UC$o0&Gr9Dn`o<7U&eQH?T2$k3S&ZsqBc1L
z`hopE83`Hpo$ZowXDVdEo{(>do*BBeRHEDRl?68p(ZH|$F*w{Di2c}YZz^&myx=>z
zB6?L{@(W=_6$EGfLL}<$ew#`X8967wmw|3nGiPU^tz8QFvO#gdTgEF7d3`tjlXFA7
z;E$*c=^+16?;HGTLsgjy#=p+FEfw6(X<=u0e+EAL$hb2JW1)YSaO-QEwHO at X8DVc2
z7jE%FJc%x2>`BP)$n&S#PKTbvo7n73UYc3W<Yu1oUWGbu(3nCxG-pEwD-^s0h0)8M
z^xM3Xq(A-MAMYS7%Bw_uFGJn8cx5w1Tt61(nQ(4gh=1M%9MOju)@vQ_V;tMP3eb<o
z;XZ$+kB&q;`)5|`lv~FI<2}LP7&rQV92-19p#axAboIs-TH;}@^By%_InsEAm3V#+
z3~Lc(&2BR=?_2pIV*@a at _SirVNB%@$Z%)-bFjsRr#WtoI_ at jlp@30GTOh$W%HFxgH
zw2y#+dQ_RJ0xxczvy#+TGOq7JzFjz$c!Xs{D~=wPRA0@}<Jx`bFIOlMptm$3CaNi9
zFk+&vxNoIXP`~L&6aA*G$yqN!+6MjGe&037C*xwL+6rw&dd1<pvUV?Wt^{~7JV%D~
zCGPt2sl#H#bsGn!o5pPg|7W|{9M*n>7YH8Nu=crBFnDKK_<<!d5=*1?0$*4*kQz`k
zQ`=V-Kn=-QZ$8)oZ0aqM+4Qr>*w&Tg;Q&TFNNp$I9(Fcl*|@U_OSwLI7VERSDiFRc
z$z<%1vW|Pi$=n!E7(;*Kd>8zo|FLoSdfDCc)MLAZGNF(4VZAi<r- at F8q%U##mxq1B
z<f4y=#(i at a{W-WAeJ_plJ;k`YcfccT)54G9U*pwVfpLs6!%NUKKQ%U4ZyMt&PhlkE
zo|mY(|I|3`^PYuk8~U%!)U^F;jAHx=HGQmNpze=jbch%7tmOJ%5wC&q=Y5!?e|nrE
zzIXpP1x{^>F-^Y#yxJSkC#L*eWU|G8%MP+fAbcjQ;0*4m7}3-NzO;wo#Q$doZ0r7(
z6Y8Pz4%pjI>jDO!j8#P$?NaK0+SsQIhU`Lge=l7kwok-53kUB&Z&m3Ei^_lMB at Zdl
zwL`X$5_ySM8JG_$jK4y*uuPF+-%?KJD+b3wS4- at Z!?*JcbYfjc*Eqv{-2ug9I_HTF
z9{R^<?f$ytQPV>vLw{SGIfjuE-JfDvUHV7!>SQ0iiQ`<@Ie*tfdNg4^22RD#;M>H>
zZAqEwO6b;52FN!<D~NnU`whvT(@S)_C_|4+Z#(=7R|YHg#Q%30l1Le9ogI>jp0;}x
zwze at i-hWz`oDa??$VH_qr7AU77q+ME4zCX-I&G>Pa#oB>$1RL?>0no!V1`re6(Y}#
zrnwf+kPoQ(r}WruEaDMl>`{CGdxS9fEuM|oBPu0C&&k!r+gx2drIU3#++P>G{<^^a
z;D4=)%l&on9qNMA-Dm$F>Ow;50{ALd8QyS}0rsqkh=cIsfSr)}5O)LmF70$1Z|H_R
zw?^^l{{7O|kgc!G7%?4vr(isN9P;xIBp;E>n`2q2Ileu8gTt6oK;i;*8DrjRqf!d;
zbfR{zK;WC(r<saj4_`Vk)i7Rn$Pl$pR5Kd>>7Jd6Cb#v1%rhZN#GPG|Va{4<ii49)
z|F}1Dnnm=PoS%d%AwNGR^0OgUZ>3U%tH{0qd#FCh$JSgC-AQG*_Fwd9MXlkCj}_N@
z>B&UqM{F?>&q=Gpv(fj>^adll5_<ERoE=WskCs6W+D~i_s{?pW#0$Af+KNf(?=NAQ
z8Q%O24iDf!Fh=gtGGa$??LDZBA#36sJm{$?*d0uFP|nUc8<E+`9tLF)`JkNinYebG
zTL at m3Wu^>HhEKyD7;?5 at VxX0g@EYSgfX#iIx?UqDwh&|eZxYx;YB8s{6MNR66AU;7
zSe2_Evj_Ui^&;l`Oz2-tT-ogZYuS4Lt!!kB|9jaw|7+RI at sCip>;I)}N&hNa?~^h1
z0(80(`9Ha~gw5coeeRRCjQO{=jQwBQau&C*`44T$Xu=T#a6|2XX-nIawj{d1{ywig
zj4=otT^s59M#<)5*b4)La18b-F5N`*wN;-nxlt)k>^R(boonc~K?r2ObdT8fKlj5K
z62!byQzPhI)%I^o;;mJmt#*b33&sv%HXw%mMb at p>2tJ!k_Em87#+vR7Otl<@9oYGq
z#MJOns;Y`gQSGCys(zqqYmUJNR7t<R+e~kPy%f3{)f9}kATr*3D`&`fO}wGMkIPet
z%Xh>zE*IZbA$HMI<8mCvW!V2VE?r|xv()g#I^aHGU;0y9pJ7&^m6`y1D`a2F53<KK
z at Qg6jNz$+5(66y3sh(=1cJR7&Qp>TvUMKyB>^0Hf6StE7ehGQ=k at peW{W1D{dpq(X
z&d*7#zdzj_r+p6gi9Ou at GT-Pt`@8+>^i%e$L5=A1w`ufw at 0YdEnWL|#?8Q;XUYmjb
zCdtg8 at Si1qjem)4!`eBPok2MvA3)zydyj?eh_-izc%yu85Uhw6x(na{lEY4f>>PIj
zdLpN3?*8{zUWe{vAawgvD4_~A=@|jOu;DE>xz+>GN>v269>9i~Yjn-U(07VV)mRgz
zqm9n8KM)%kd?XI<X2FNVt&9I-O^V*(tmBWGPUe^je`+Jv1Dc(!y~<!Nt}2yGXNbM6
zbk(mcYyrepjTq=o_7%zrz20qnqm`CmZTc*4UDRy&;)~#8{|5Pf$T at ntvvMB3S59=R
ziqGJaKbByKT;G+KMX+MPYIacITLI?d at 9_P6M1lXLF0MV+GK?MvOz3Y+0B_gd#AMG5
zjBgq+UUBU);WES-NQ(gv{N$c+QL{5gFV0p3o1Ej*#M#iPcK)7!I+s7XQcXFjpXN^x
zoCc3?r2Iv2k^Fe-KJ=Sqim&ozcy7vQ`?@5HkzOBShn!V=^wYwC3d!5fAeqHDc=+|U
z_7y9y@<mq%wg+UjltyoT$4{lS9{qId)}Yzf+d3Y*u649#b(KaJ2KcG69tB=kb_*8O
z8ruU9o7{ivR*WrUM=P*k*FC|xUKoJqI^Ul=Y}e5Pz9xPeuc>rI(RbhzEzW4<nFV>4
zf!ZCwIj#iGk-1)JeXio(THz>$(Ex+{X~!B8e;D_eOGj);>A$B*kjiT)9Z@*E|9_(q
zI8UUvTb?;HPZ{C=&&;XKI~O$Qbf+F7X3-)4e;Nh`Pg#CL^@j2`y%2fk8wIrUHNNS9
z(m^jIW9zO)`xxirEjedid5s^CZ%_=Hg7kvSsR8+AgC=TlUl8 at SuKv_5T#FqjrFa;N
zJ9TGI9oMy-y6L&gPnKm{CzD%C6}*5ovaolQ^&F?ezT`ji8g-d>ODYE_N=!5Nzus>r
zWRzPya}Z}m<^vfI<IawGZ(K=qk(YARf<B^0h91`KukRJ)36eJCxr2WYSRNi{dwpX*
z%lI4WwTDPw)75Ja&u{1c9|lj4o^FBcJ(lCwApTaL5gGqRgf&&zf-z`|`)2AdI3ljq
zR$J^G at Si6EOP{Pb8;6)X at MHFll7asm*a7Pd#WN=ShwN{K9KQ<h_73 at uznYo_oB4N{
z`Gli~ZWd?nOb*>n?nD2xhU^6PCw0rM5S^g~?|q0dfxIZ+XNpzIX8I<|wJP`q7q?|K
zu!@hw^<+%2JTlgYP#EhHU<42OZGcXag-y!|y_?m0QLYBQ)mHEHTn*m!g^y%5bT_Ku
zJ`LcVgWrsA1$X{?l!1qFc at z5}Yw!eo_aSg#yg_h9m>)6zaD6bY-!fzt+9xf{d>6Rv
z!HCT<mK&#o6^;FQyh|h$@%#5C&#_CjtCYctRUC)LcbqT0m+wbhJ&|{{{2%YS{r}=!
z_CLHU=zqQon7X;p;l3P*zJ>1}?h`rP7CK7t71~6|Gax2n8o at 9C^A7C2o4HWKE-H*=
z7XlLro*i%jDcQKfHg>LM92=^L1a|6vOfvdIYF(f`-5l7iR=ieF$#Y~K5jXyQANYEK
zYbWEt`>%u_5V2F0Th-oU#pR+5&D*?}#KxE(HJdR{fKTR^M^e;1^&5WwP`pOViH{e!
z{a$B=Ll at CL=RssG_Tz;m(Vn(B_olKTSy7-Bz`UGF;@v`L7E|$)CeM8Y1A9?u-YWy_
z!?izq2i9Jk`%rA$nLOcp_#BPv&=&@>i{2NKZxQWiW_=}v+t|3+_A(g-o-EFv_{>15
z#^Q?ON)>o(NQ_r%z4tt#_X2+JhUPa?X8O9O1!aC4*VcL?&O`4Zocl at BO>pD%B~2f$
z0WVIeyk&%IhxkHnM*OsU8e+p|pCdMWeCsgIuAj$oCS3<^+rPjTIuv at q69h+$ID_}y
zPXvx2?K444_}pm3)IlG9lNJ-+0s1xU6Z1IV$IrmkC}%wwb!IuoEBmd%p#7)etoG!*
zcKF0EK%AHPbp_>ba{j>wupXogjWfN*j!mBLVP>RbjwN5-i<t`N(I<#56S{6Cn_LK9
zgbMlV4=OfZ{u3X1OX_Q4ci43-wxvoxZm^3Fitr<8Y at z-^)xbEmvhZQu^TH6X;DecG
z at y+0NCOS=EG!MidKzze}Sd)do-u0rt2rWxl{v@@<Xgw6R-JmY$h5!6~MbN0LhUfvg
z$>Cu;>NMqVmPC7bDbLdTk|$2RYEZ8tc@`L=!}>DTo7&cjqOQXCItXocGlck(HABxC
zjrG16oN&L*hAmIKn&Tc$AlEQn)#RG1e^(&Zo+0xMKg1CdV$5#{7enqo03M*^36o$q
zZP6aUoFOIkKi?V{sB96WaX70+y77LaHE}nNPud~}SYpx^IRSXiS|2mov_98C7e`(4
zFrz=Fa5~&uG4n_sRhVFrEA|l;DDUV$*BLtxaqR9-y+`g9v$1{P7VCWdXT>CDl%@;u
zdmbejavk{2z;L;)Mf(Q$A8w&sw=qBcqrlbn$K~KG0G8OCi}70V;o2#Xmm2t<28FM+
zF7TuHek|i^L)M$tP`?@Atic{~6!!Ep2&cn<&t;NW7IV(3aLBlRG?^<a9<7DncRT!1
z!qUO at n7XywB;T*~UZQw8A(`k}fc21#dxX9HRMb5<Vhk<Uz60-01b6ReYlX6oy0`(`
z_0jKG2!F`hiLxHNhwu*odw}P}@W9hBU`L(zfMT5AK0ey at z7B9ag#{YAu7%?G7MEwc
zE9MNoNeE683Cb%w^ek*%A&R8yPRI~V2Fc`KL%(hIWMw>~UkL12r(gs7+H|oit>Qpq
zmFMv_8q#hrK3Kl~ex*at at 1SzWJ<tuLEHU+-Rb^7`yCr$rcd1!X9c$K2{X&t_?0LE2
zzT<L(sht)@0n1P7v)U`r9N#(}ezCCmNMZBICjL3?Y21Gq{x7f6`+Y>#6plAz(eJiL
ztR>ky!b^EJqQ`+vZ4}{TTj$Sz1 at qXult*MfzT??>ivs!-iOo*DxAk%Z_K`PGhibw@
zg!c}MzX9JH_wXG4xp2{VlSzDbd6`UWNBT0-uOV$kx(?~=tZ(D2vQ-B5bS<&z#&$y=
z^D^oi9H6?E(>7iG=}XmKE8{U9ZMl_<zv5uaI;uxkOLa5;AOAp$KfX#!<La<J+3Cu7
z8 at R8l+1RZ%;vZ&}Y5x>5eXEUq>tib|)!MANh3DBk?SXcq<+zo3=@P-4)6%dQ*yDQy
zBG~8C!=ja2tDPPG*dK at ytNYEZxDUs-GK=(r%|ExuiUI|RT3h?^%wMsmdX$`?y+o&H
z at 8Qdazb;4`zB2PJBFjx`?+f)M_}g3C2nQNsJ4~^Naqin(hdVe4Lbk(>`mDGT{T=^F
z+R#-LP5yI7 at R%rWAm+d%W~jx<`ioEVQowIIwAw8gyi~r&aeM_w;Mgq-v8QqupC&ko
zYvs)T(2=}*RnpF7WInYhNMFX>P^wrRK0kXJU*-`hNb;CM%4djuyEkxyvTKcWyoS+$
z8%Jy^$zEt`y`QuIc;1q`iyD5v_nmMJx!3O<L6YAl#VG!1gW97v at LA=<HU8trAwD8&
zkRrY(@u`XCA+}>-H^m!s5bwWlS!i at -ryA~GD<{WXjp;RAw<YJ=iJAb)={MBy<F#^S
zPmH+<aSx*M7`3sLPBpf=ICUsV%@nQEvh-S|UrAOMjz+&GWk<{u#3>L(?LywWuDmE?
z08gmOq1YJ#yO+_hRr>BOaI7ffS4;%wD&{Iikj!rhPoH5`uFzNoiNmUu6685+-fKP@
z6tAE5*>KbinbR%-pGU at tTkryWM?9%lqw~H**RnqVIEOS+x4 at ua54V2={x2dp#!TYJ
zTZFyQNjgB>;L{La>!Yq8RCJ39pm%2V9V=^}#N;W#3lDDFc%1K0UZbUq5$#lCS!nq3
zT6w0&v4g7Rd^ORDF-B51rr`a4!TV<PtW at y95%u)BT-mDsaSpyEs;rSdHgPuOA3dwq
zo&lEcn2*2i?1N9VN_O#z2H=6F1-<5Zd}yBXyO1XM$1TS_w6cP(1fI{s*H|TaJ0U#V
zthI@&-NrqPz2#F3uFyop#hOXVBxjH5+Ghu)Ak92o7GQdSN1&fYJznGLczfwEt&>Sr
zFqP`tKN%K}u)6%&fUjD5?3dvh#Au1j>R1!_I(YS=6DU>~*a(cDhXmVK2%QzywFr+!
zf at 9}6BoTkwF45k?x_2m_!CJ?|^=aJoy{@?oYexb62x1HGuxSgx(@NdM9PtSIX!t~F
zE20vC3z{|IaX7FkX^@Rc|A#zq4SpbOaCN*@I?SUnZP*{q-?qnUdnd*KgR;cjXO~at
z<?c<>;yIA>#s7L1 at F*(yLO~xxj_{4R%K1GZ&8=Cka?Q?E5S}LAPchf$A^zH|3C4V8
ztWg?(_XbR;M7k2()V9mt6TcQ<T5!a3X>f0F>8Hxu9b6qtWch(U4HJ&zzT?uNc*f9N
z4e;I_rn$P)oIeeClYAubeNT#M3~4g_Xc>t;_;QY)rVqY?wtT7Fo}U!rKzyZ(T|+Q_
z+&pcpq&>7oTG)plaHG0Y{l~9Na^2~wQc(t32TIhGed<hw+O$@88ufbV>1X|yd*38j
zJJ at nB(mNHG>|@X-7bzq9=gN{;t$iZ=O1n}qwnh at Yfv5y{`{VSAt#{~noKN)IU>%?>
zR$h<-OX1OI$ntpQb}aR)AbMtZjD+73m8LyF2QY7~c??VruEEE6reSf&D~2SG-WE^F
zSTkGeEK8!=UH-MRjjV>Mq@|{^HDjryve{JoOR~*&R*HE+_UeU#DIQ4~QuDC}-K$@)
z!?foNdGEj{<Y7Z)v^F((Cyxo{@nmcuRmsYz6YLUPA91WN<V(|q^&(TH85|{{p0!Oo
zukaBEv>1MyC_CXr{s#W$h#!NP1hX-YO1dhuQ&Fx<m^W`=-n_1mVm=(n&4>7YGM5-y
zEThOAgL!(i{O{m;V_THeCE6(;jb9{e=+`xBQ)Bl$pW;Ca_*wL(>0=M1QeNduVAHMn
z?JtzCf4lcm-bLquRBd~CnyCv%$C{1LBxT)cc-T;tZ9f5>;GtA)1^5?Y3{%e8yi+x8
z-f{dFmt8g$KW+$`eLw>~QRV60OY1K>YgW7sUCHGeEvc7p^oUI7ThjQ?XY4VW9!r9j
z)l4hFHPhwC&>bziGQ`V!0sqAV4Ap6vGTn7Au9xTU?JLjUg>_?eFJg%d&6vi2zC6Fg
zS~Kl!r(xx;T;<jgD-FuGv1j1FNY$8j8E0MYV`EKwAEz02-k1FJkWIXNr&7*~G#m-E
z^9RK1jvmoA1|@*Ub)h?W-W#0ti6$G;4*1R4m}1^NneF+V<!aCx+b_4a&mAvGQe8sd
zZoEt{HkIYhH8pn3RV5IeXw9fVC;INWHKOKIY>M&J63NKPYedFVQ4&vU*+{ChX4Gis
z(soa4&8T@!<f){&Jfjjx9tFu0pyl#p3^jhf2LIQ94}<D7ISh-Y=UtK(0h9NMla|Q8
zkgViQF(jSttyw|(Anr-kIu*eCpe`?vx+L|RaV_W`HP47x at jSIb@>Z@=8aTzEpfs!2
z at NE@IT1Qrad%j^r$&xH5FRude2^mY>@fK+v;%rcpn7MU3*>U_AX|accs-bh24DhUw
ztng$EgLW^OVGi0=!~DacWX2Svtr+X;)0<nV^5;2&<1_b?F{n}(zQxAIA3!|L;;2;Z
z7wqE9Y^p+28v~gHe&+V at Ka5H75}#euZH#*CiQDri*1DJ~W<9CO*m*=I;yGjd$auw`
z_9l^c(8p(H?;(Ab%p2(EpQE22Rg5B7&42IT+WqX}trfJef9%u`@e27Q^8<{Xy<HzX
zHEwq0I*gfHoYY$z@?Oqwu4cuQ=H>Y{7h5Ff8fkgWMFTl5s<}v$qZn~ZaRk?km2iCz
z>B-H*{-w~z44=kWZ6oW3n50Di at gjHr6(7i4foc+?f*PU9^F1CK;9CMNu2%RuT|rD|
zBV!ArX`0G2WW5dC#)*!{lI9C+qRE7~XcHzScqA=~4%(X^;K5|6uMWh9Jy;)I1U^ss
z=#~N63-ktyjh)8(I&{RG?`1EHj}Lio{CrlX-9%zL$R29X(Gs%H3psT+R(o5YdZvR(
zGGA;@*?YcyHuROrkRxNTPf3HW7~JLU2|OF*%e%yO>Jx$eYmBdv75Uz!E5Rvz(z1j0
zH#@tQ@){Esi}xco<=5fsv{uz at _{EEPcHkpg1>(I{RSd5W>ANVyh46Wh8*@0E>jm8_
z)Lxy4(i6EeVM*AV$z#TyWn19u)uw$EvRHdt6(g=PwD4GF{odI281RkHCcG9~5U0lD
z!{E?(E6ULtB?hm!Skp}(msgdQQ1;Wiv>og??G?dDavr=9QB+`tjPDFwly$eNG|LKK
zO*g)y<~QEwrf*cRMUr_|7wxu?F=rm4tF-4-G3JZbeAAu$H2&!|IodYZ<ZN`J39*Fu
zCtsR_^&@9NuU$mJ->Gn4!V=@=E{PoSz4kbpWvaA^w52NWIE6IUHhrAQ&Cka(L}FtL
z%EP*A&soGj9UPAsy0m|8Am^_r5uZSu-8Ob;jT63)&Rz)(zP)qc7A5ikxd!gb+3tP+
z`p;Ovk9n7 at hoJ%B30hC;<Vjv4m&ao*)e^t&?QV?)dBA!%yEpxPqMMBOHTc3R-Qg$X
zub_m?v(v3^Nn-3-yd8mWX8mSRy#08FsJWF*^t2gXE$mK`1f4c~y4%iQWIUfQq4_V1
zO?U0H-6PZegJSao%$8FXyg+rp;9}f+dB#waAb$~8M}aYtpCV|nse at gpqaW-s-Ev>p
zEM)ck0yRTN3}3HoDicv&&ot#Tr0gC^h+FXEdfUWU?M)Wg))`6jy4ED)dz<JMgQSme
z9JW(~-6LCOX`NYjo at o>u_ZXoMJu`iVi0n-i1EZ31hr3IsSCGB~T;XsZDZW?#(`EQz
zcHP(@{=x@)_o~v@^01#V(v`mEm&9V&%HjJ79}apak*(r~gydE`-l&gv3(1Xt=I=>S
zf5&r#YZ{&}@pCBq*2u<d*5r*b%G4f?bTyG_c#S-NL(PrVhA(eCpXou`z$Fv!Yc>V%
zD-7O8+CkUy;0+?1p8f^rrjm1zHHx2-!|y>3k7Ssv2h-F2Ap8IEnSx}pANb?BqX)HL
z2A$@CKTm!J_a^XPryM+gUemwc at kCyKQjYoozL%8f``Cw}yl3a2ydP$IJo*2m{NVMl
z73_j6wks(1$+iEKm&o)!l0SY|_^aSciKhBOLz>&bGjx5G1u<_E!Ev-d+kkjg54#d{
zEoXm#|7o=LGxS+-%|i~%aNUFbEgRxF)mact;;`i!?f%+Uc0|#1y}$l(*&uLf4Jc#v
z{zj{Q$Z--w3Ni6~kE`;iNXX1r_0u-><XoN7YK_sR<TD?)vYnBwf?4L0PR#!uY39AQ
zSHM|2yWYchTUJ-j)yP(>gpzY{g1fkMGM9cto*5Jys=j`emhhDZ#iv$-A^^W3*2-v8
z8}Tdtcm;`hPU=rre`CGz1T9%vVOqOyDnET{-r*5iN35CGR1-t>)x>DY9@<Gejk{Qh
z?(7ZK%7`F2j`YeMK?zfLA)cKzb_(*&cI8FCLEG(Xw&d))QZtZplD^|NZ0d<1Sx|;h
zL}IPVTWkJ;z2>BSSN*=oYQ?eMZ=2Fu!f34m(M;=M9Ag9e-#uH~2i*hY5a9XufUzN&
z^o8jd2ec|&MEd`V(fK=rVg+SbXRseXJBQa)sn%A7j>H)G at ToMoq+RD-N0WSCGnWVB
z$n^3DZHzyOa|?aNK=3Xro7&b*6dO$9eH<^!@Q-+braztDgSlOZa~2#UalC>f_<8r$
z<A at k*`@UyV4eSjS?_OO>82F=Vo7fQi*PtKE+c)D~Z{Emf2!>`l_*mSA?<IUJz+;?3
z`XB#q%8l<?{rfk#-T^uG>~!uuT}1-Kco|8?C(%8uP@?~lc|Zfb=eL#8PVlqD`_ke(
zanyd@{r$k{7ZpPe2F4$Aw8m#*c@&)q|EGo~XZO(K&adJ7$fezmcm7TN_sQQ%&N)@f
zkK6vH1|D_FV55H8mK$~>Wmm}yBfyX0UN6q-EfZ-;EWs(^Nza^EFO_ at P-=J)2iOKDP
zIO}nl7_mC_s#&<^0CRvtpfj;G(v^?-D+Zk&5u&^+SZvH)o at BHwPg>a*q-nOYddLtp
z@%Hrr%c}UYXB>iqLipwcb{i5PJ1uxBZz7l1&94 at DN|DEQ at NQjqShpZ`Svlg(fp0dj
z8 at LZm{!Z}dcgSrc60_W4%WZ(qm*%i!(~fT?7Aw8{xO0qZf+p?ScspG<<}q_zhdRYx
zZdq2ZUa-5bMz(`seG2j`<sLrH1vUkIKfp`z*Pum+eITiAyFY{O)=7>zm&iFk^pB_{
zKKMJ#&b~ws2UAa9RZ6(?WqwkgCP?P*$WnVYL4WaOMKtAD6g`H_4NX-^2c|^HctXMa
zYWq*W#q)sEvHx^Gp5o5ykbVfxlL9KxYc+{qpkTPMn?qtJz`xv<yA$z;`c!J6lPMNA
zsr-dbwN%^`3r?@0_X_gdq*L#a^#k9qN);h=Af8pb;kg~%p=y)haawZ(t at jmHCGF}%
zyrExLM`^!@+|+tDX~FH9Stp%_nT7U=Vx#kd#Kf{mv5yUZ-f_2O46!wz-jff0>9f-b
zw}yG|sm&IvuRgnrpMm}y8Fepax#bcKEDiC0LA!4OZoG?`0_;!9N=J~~^u7K0X7sz~
z+YC~w+mNKao6n4CQ;w8->c1<3+!NLvvJ|@G at 7{BzkAR!vyN%!+3F{^{LSQjk$oL|$
zNJ7<7_o|Xg(ugiEW*(6R5#xIVFwlGQ`0i$&@M|GeN9O$*P4N8@#9Fy|Vn1|O!ztEV
zZOLS%@reC0z4C51W%tU5K5InYb at wFfR}rV$t3ZBJIWzv&^t9$3v>y3WW1*MS^a>UZ
z9h7wh at f1p5-xmdLSR51e)6NE!O{Bc^)6V?KYgd7TQRhWqetOwwS8fSYoO4i>XNW4o
z{MFyDejT2Z^`K@<pc7?3Su=A-+c4+^4Y3}*HJOD at VoSmvrAztltAumfZRlu@za#+u
zcqOKv+l4BB$kItvgi7`M^L`tisBEc8 at M{~kNa?yq;XcCe;~<KE(%6w5z3MTa#N94^
zy`KAi!^*!0=^*FIqAn4g=+G+#46do%n>N^E=D`PP#`H<viLf=uke-EhoQb{1<pKxV
z at HV@SYGIdCx7ZNsCfap at PgCyhSFX6Y_qv~_wtXx8#j5f@?g&s(wr`~mt=~!>UX>0Q
zYm^PLETcvJ`92&|`K`3pN~axnR;nf(O!Ft-2*09COGlBO7kKoJwyWj?zc%=Vbz{E%
z67M;LzS$ROR3b(+iTkWd%&#<SyHD~0Nk7C`tPPrF-rP*$B##g`)o6Brr{L}0nrPIe
z6n)*r{bi*g7Y<`RMhL#h4Kb~4-;6cQIZ@=^*uS=+oearE#fI!6!Qj0$2_<cox!1nP
zI<TrKD4mO)F}g++=!{Ax?Y)XY3}noq at bN`FCGT0rS=p%`;Oady3~kiN6jQ^{r%ntq
z6FxekBgOH>0tYz!h;O0Wuu=VE<|I!@e?hVNJExz>y0aSV+1h64Mtyzkxh2q@)tX+W
z+CrhvNBTR}aExoUC6-kWR;itvp%*9I1Uaw%NNXKaMSD?i@~&b2O146Ma-$(;^J76m
zo#X5{s%eR4 at 2w*Jxuw2e8ET4(DbYR+b#Gq`Y{`G6+V&|Zdsh<Wko6oqPD_v7p(R-V
zp$lG<I?$+JzooNWGP=nyyRfM|byJHW+VkusNo`-ve2Q?4S*(eku(f%ft%<Jf``V{{
zJahcmc{btL0ai-?R<G1r>jSkms>oEW64BS|J+*e<Jk`gBLGgWtLB7^{nbw*A1#S2B
z>yI<yOLRITt+4kR^S7I|58u at trq}7dq}QrG_RS-FRN%kz)tx;%T`?QDgg_s%@0?bU
zhkB_4H+C=j!zcJPVx7AT&KlH<>Jsobs~9z81AWd$wAU|)*YP5b55WQ4;VvaUOtcs>
zvkm-u_l5Am!P;#Wr0UokdGYX>$USSCw9gDa^Y2|T`*hXBm(Zd>JOKTAPw3D*V&}oP
z{aM(&M^wALs6`BG at S{An&Jz7$vfve0f5bd&Z}TDZFz at S_d6<XwIkA>Wx at sZxl>@#1
zAHLo_uF3L^ABXS&PWGsX$flLGPh|25DU|qFc?d*2?ZDVza?spZROTMGu}~2!%hcr2
zLaD3}%}kf&9H$P5hGIxKKn58W;t9;uJ#1s39DeWnf%^3M{(j%zAA3E|p5y)8hwHxX
z>v~`Bi-);dGKV}5IIRld7v%kh4aiOBrX$GsuIcoa+dO)St)NpfTwgx4S7?CV;4jbW
z4 at b_ECka0rv3;H=m{bYl4 at _5HK6F{+Y|t5TzK!JA=5&Ebu8i`xOhgxeP7+x&@q><W
zI_-#I4zD8Q>#=il3Svpj(M7B|`WVq6lq7#LV%>Oxh~<1PZz1xv2JeHOA>XmOWQi^c
z-}_v6Ik-OM{O7rx+n-Vn&R=9G?4(z~jsa|E`2nd?hc*#R0 at lsE;RNDbJkBg$%UE?;
zlUrVf_t;u`7cO&X=ZRf8C6lSufhzwTqy6svFCIUwOxHXjkWc^7fxe at 7c={-Qysdhs
zM6+<X+~0&w#M(4jvqJHRtz=j7bT8qz!*w-Q^Bn&b_<`c}v#_>-T!yYRisXfy<1xNG
ztqgkmp|rr-PCjIk?PW(x4zO}HMxH0fSkMA2+}#u3kb969vI&^iS^NUJBnRX4R36ql
ziRA}kW)M!rImKlC$8RZ;AupNyf|8BGnmi40cF)7!FN2+50$u%Q<Uj*Qf3R$O7Y&|S
z#|J9dBk=u^AhbTjl*3-AGly<#YLh+N621hSS1XIy&qpY4gAeA;0T}~4iUT;qph3(t
zq;I{_mPwW6fDi2GL8d%dVnIwY_^qG|(i5wxk7mT)$SuowD0l<#vMXD>vK?ic*2rxm
zmdRy3XE#)~H at tMHMR<<7gqRjzzvHn}{7Z)Nw)wWGFux%V4*BQE*6$mY19>vefZqW=
zoh-~B(qqVDdz$FYg!`av!M^$cL;7W#s`A$G|2F*Zu`S-Wy-l_cG0s7r0E5<n|8s`+
z)31Vi*((gW2!;QK&wMgf8fwx{f{m*Y&wn5C{sb_?GejTiC&4aIE<7Rb5RQJ*ZJtPV
z8RhoM9^`H2Y!2&qdpLYRlipMW{%h1Zc*M!t?Qfq$FXvl8jx_iZ+MLJ%{D1LH{ErX9
z`Ty^O05*v8L0}6%LM!Kkz&>KA3>fDdsYzJ3)w*X=19Qn({9GR-d?;h2+eP)V9n9t6
zBwn*c6mY-9#B@=A#5mGFUgT_tO#mE9Zp1-fhOK3g-ss~FeUNElUl0!_sC~Lq)HAAc
z5+1Eao{(54k-3R8z!m=J8N@}kz&{f6w9>mY<;LE4IvFz2fLzZ)Y7*9<bFmirF+9%R
zVNbp3L4IXVtIXa}1MJkfn6Y$ROq<8??vOu3Fq7vHemv_&X7lV#*$I(eV-a`8Kd)E9
zFOog{t=QsQf91Xv`~UE_sL8Wt4<Ltc_RI|=N8H=U`^@=-*o5DgxpD&^%}D@%U`pDI
z`zZ5$^Q)iT4fPM3X?}HUui%Ng?*0&_%u%((F+6_1hFmu#B;ooby$St$Cf1LC`)BEu
zoWB;bEq;Ib0oi$MzrZ!4&}aIIti$;Xe_&fe14$ih>@GsC0iy4MH at F$~0bIqf9mxPY
z67XdH2IdgE+WN876Xz6;2A8v1w(nU9?3YO at m)pSfmPP1%kBX4reH7JQq};@NOfq3L
zzft9UwOU8#>_J-x%38t~EV=?b&=wY4o1v>(H^VkC^>75^E>h~egB0-p>_lF@?=k{|
z6+Uy}gI4;(mZ3A4?1-Ugp;NMofNgj;$7tDg%C6agygN5+vdVXb2cb_lVNFhxeop=6
zzm9}GvW1Nyetl-41N^6aH@~IM&!@S<OMI{Gfy#F)yu}09nuLQ&XIocgmgoh_LFZ&$
z(812 at TnL|GitGq&uy*DcDTnVeyu)spe`*HfqF0jlF{kO3yg|#VH=W$r(qJwgH&Gut
z(Q@<DFE?GRqD+~Q9NU$hiSg<;4LNqQ`iw?fM at AyntG@(S`ljfE;1|1zbvLdrE1>1@
zbqdq(LRQQ|T<;ZZ<G at kk750biv`$hBeV_Q|uU<gTbYPf(?{N{V61Rr&2%pbN2e#;K
zw0(ggkiQ4~2KRL?zEL=`RY{xeb{0JMusyfX5^5GW7H8E>50lSEEaz+WuwPCf+^&V!
zz)^m~9I at RA&fK$Z8Rg0 at R$Yoh9HCPN><;4dMQPl&cleqvcP6gM%IGe7fb|@eQr%@D
zv_0D0Vz9c3v|hYNB@^cGx1sGn(@oDQUECEc5trs3Q at LQft*NU)8=Mu_fw#5`@yoe7
zJz{lpOpQ7@)|yh}B#u{gAdf<i`A_&sCr~#mEBAn}p7YmMYj->eePdXjX at W;t#)Wb|
zEjM^xElb<3(g~2caz<T5Q{AM#vlDGs+!9g`s(!q04xL2R`)T<eou0G{SNEor<k6SX
zQouo&s(zy)-*(d0Sh?;n%eX}v`&`TXYG2V>^>?rV`-P`~KX<>FwLtb at 932-ewmAv6
zQs at lT9rGtU?!sQ}CRnPvCE(LYf{yZU(r1vj7W%Ry2KzG at cBt=w8??jPgMI~@hI|3$
zf%WvpYOkmueNbB?`e6sjhqBS=gSFSc4vRZ5Zh^@G7wrBVH)4PZSJ6E(XT7(-+UwtA
z^~SmkpJNt7<p8h at 16ss{ok(hhJ=%IMX99ifmDJI at wM$03w0c<vun)aCQ|O*-MQ|r%
zQnPU)^83YGf6WQtO*U^h>EeA~wCki{{^f%alshsS{KJW`-KQe=4Dts$!B@}#Sx6%f
z%}EnDa%3m$!nG#k?b&v1HR;!H8SDAKOpa}zLpg*;?4F~9-_@=01K)#3RBrdQkIlG2
z at 20@xiRZqC=Yns~sWdg!W&2p^OiS;{*KM0K#>nh`^YA_~YzToQU%)pmzlBBZCpWY<
zu?ovar%vmlET%1{nuHHL=r{SuQ}GS*Rh+~Amsnr+(8V<!@ELc|Gg~qKV4rCsd<L4I
zMWe_(tosN)0O*=N#}6O}Lw06S!^s at vwf5CT9n>;z+kYxUh|jMkA;2SAWxba(0p*Lg
zZ8n^<ym3;m>S|kXqCQ8hi?Tg(q7Ch(6}>QgO)8#~X>0EMNjDAWE+A&O{iM$4EdOKN
zN7r~z9uGT{lmq#sA34!T{CvQke~=vyd#3?qOXLNam)iQZmt&xhuVBGJgm#T};aR^4
zk03_bt#4rsRKLZzW0A!O+=QCy(>l+4Zl};MCw$oYjl--v!cK%OKn+e8Yj7`R5xWj)
zs7~z}_!o4od%&Oh1*>Q+Ws at gAdhlSFN85!QdDka5YtLw%dYY2bZ?}$GCC9#=3ZT!l
zj>;zcG!;+wjbuNQnnjOn9i{)rHM*f|63B773D at W-Bey@1d(L?BOxp0@=g`sI at j&jH
z<bPZ*;jZDz0A3aHuBYiU at Lx%&owS9L8za{2j8L|C(TX_N;RBR&7THf;M)o_hqanMJ
zNE?stfxZkZ48`#Q at Sm^kV1-dE#=>Py0{YR2bXSqwv9N8yrDH)RZSTx@@Z(5v&03Y4
zw=U!AWQoygF>JY<jed$bkv(Zd`xzFpXs5G?iM=hFXTR%;M?0!pJiQ9lz3^|4GyAXq
z8<7uF{?3oUUYEeOa-(jAk2UmMhHJ8d*NOkvY_dzo5Vu~BoMt!JCSf-);C=<sd_Tl|
z;6LVG!*uAUl+_}qltz=Kojx{4DJ?+1h_n8xd8ej>9iWfJW&!J;wYDrc$@-n<9iLLm
zq%CE1LFkjQ$L7%4y5JL{Lx@#Sjx{dEnBQo=S-sIrf4S)5?E7_b!hhu?pnfJsu8&Kq
z^L(2exlXuw?;*!-y|Q+Nu(o#2^d<ZDQg<Kxsx2e0xTN>G0empysR41a=3Cfv?KR3R
zp73N_wL7)UnIre<u95f*YUdHZpRJo5qvcp at 7=tT`zvq4>))1+ at -D|Q&w`ivb`*Tv&
z4;?dOPDs9N%1MaoEK|IPZEhCLgDqHf>H8Y508d1U?cf at Nx1wgmNA8-DZ}jKPBL16g
zJ~<77=Asa$4?d@|S6*Ignw<K0UayjJ3;8zB4T<K=ie;(?l%FGRN8a|fPBh1nJFB%i
z(+utwGu;^*|9Ewo`q=1P`y7WQaH_lP6>*Q>(kMsSSme~5L|s*;kDsm4O$BGeCjE5<
zbycCQIqNO=&T?bl5;z6dZ}KhDc==L`>3YQfy6Jf&uj_Olw}R35Edj4$_4FUz>5L{f
zL6caZ8HfB8J3Z9Uac{Tc?QXxMz3%%7)4i~t=@*av2JmJlZ+Ewgy!U9|<Kjp<$#dI9
znicL*g<HsTN?t)+$#=os<T>pk>p8T$2kqVytK=2X%C&of(?Y+f3r1VcvX%5t9NiV`
z2!;(9_)2A4DXk7u9F%YJEii&p^@Wh;7>V^B`babSep#&UcfY(JN<LK9uf7XeZ&3!4
z{)Ku|PLIrNn02pY9OJP}dZWZ at JUf7qwN7b|=_0wYAxpD>&u>=LPcODa+6FC=+nmZt
zJ}keL>But|{zR{{<#$Vvdt?dK>fJoI{~Y*Iyc#yrqw7sa{dkD~jmVoV@&n)0xW}JX
z2H7^F4{bI`rk5ZW${>I5^yAz!Lwude07lEE+VWkJ>6V-{-Ro?$!>_%TYW2$|&xd_W
z&TH|ie?4<_qv at ibRuckFl&hAIxr0Ob$ZT6)JvDRnlKHm$Q^`{gSd49hmRWmV6rY;i
zeo#ks0_)ictmi7xGQ<=t=e6W0u$F#3*Vz6Fb#Z>`SYNKp^&2z28jE{o8RlAR<w9Ua
zV5^%3y$Ug#{_pEO=RdwwiC76&oE-5q>JYosSkrPxUgxo-ka~{v*j~OQ&RH7ew5cd-
z>_p4O{hx;zjFSsn*f_-X%E48fjANUyP2*YG4a~VRL!Rlnf$6~Su5I0=SFrul7=Y`i
z*IZy1;yMGae;8X6uj0CzxrTdQHa=T;mi3#3csV8|M;hf`0^h>TCLecF42~%dcH}5S
zuH%?favH~CaZHxqk)sH?ierPHMf<pt=7%*4KfDRwG3KDekY>a`m`hexbO47vi1-Mz
zJ7J5)Dz{;Oi^iSsX{PX{z1>$Ews+qYAr2vVFSg*EH!xSN#tVZe?^UwD+RN5ll#FuD
zQy(Dv>+7*UAA0rza5XQ1e`*E(FWBBfC)G87i|gnl$T7mryIXHU&N-JG at nP2J*goJ9
z8lc-hOBaWo2k)WFD(~ovibwpyZp1HKlQqvR8oQCmts=;+HW at X6;Gu<^5tFb0^ZUfv
zs}?N)wj5jHlSRx6WGUiPl-mpN-h4~i{Npy<lWC8*XVr)Y7hi<jS_octJg*{!$U*WP
zf=wsSX(7A|t3(@toy!`VwS;g5fLppEW!5_62Wcl*c0VP#X74q60di9=7)y9-%dX>`
zutwI5czzOxQ-;|7cG&j at yAp@rgL0Gg3-k^ey1EN<R2lhx!tG<Mtm_C*nZ1tA53By4
zZ~rTH;~(G7*(NN&A<C!cnm6RJYru2mZ&6)0Z`i@@Q}guT<bBV9ItswMwjz$E%?%p_
z|1<RECcGDZXxN%c at vFfPHZ&6-ILp>H+0F}X3wE}FBYPQ7Zv7+ceb`hG58m^G`q853
z5vR-LdH&!r9GovfKB}T>k7F%<cS&9V_XXif;4d!_e;LVHD at GhVbKNG}=@l9rW+C~X
zS8uSi-zg5WXdlIP`_Q%_ at xSL9(l8&gQ_qs~4asPWm!PkHHMPmM;G2QCm!|${lYP^V
zI0uj8eGA)=jdlg at k6tQdSHEEG8`wtnr*`5R;5D*Xk-iAes5#sH`Sxy>wN;xGHJyGd
zxIBlQ=;JcP^uXTo%>c?+t9dB65^Y6s at jox&`j>ETs<3Od6#PgtkyrO6#L^JIVieZs
zD>R4WTCMj?i;=5g=}pfa#6^1Kk!!hJjfiiy$yyJVo6ikKskpqo_ at 0^`yq9oUb+E-;
zjFPO}TstBv8F_V)SCpNBF_;p9*aF<U*lnXHmbK_p32(!PW3V3XU|+R%u5I1!Vb at rD
z)}B^Z0aMyqw_^N@&>z~6gT33a6S~Y85|i?{3~?eItlLClEfV|?_s4o#JNWXcZ8^q_
zAA=#^a6JBCv<~gy(;T#li({GKj>&sECo8xTb$qc1m?i1?n}kbyA99g3k=T$}6R`u4
zeuMT-tM=XaF7|t{)mQuGK1kZy(!1RO%)kg)<xmb(-cP{59>cGa*f(sdgG)FYVH2?3
zB$i?+);Hn6lmb`1Z6@%J2LJw?1pDCNVN!Rl-S}n?zPV>@o{Z$t^dSDpM&d&V&jji7
z4J6k(ax<|il;a?_2e4)E`w+i9gb#?k)0t~D at V@7Kw+YDAGT~;2>3eG at a>-ky<4FD*
z%8eMDO-bYDc85+K_MyDT>qY*Ri-)86;pO{(y at LCD%lFH2jjC$z(B9nc&~fmEBTv+O
zzNDO8rKJ4tjr*(oJlLy0=5g(nI@?q?_xKIlQ|=b&_?C`rdB|~M`&)DiIlK^qgL@<K
zgKxWQwiq7R_Yhk($uDv(8ISm0<jvMlNh&S}E#AYDydoratXnu5IGqWI>+rAkjVLGe
zj_<|2{Ntzt__P9Yu#dc;ZRmgD at myTZ7A|&Agj`eEu`c*W-x}6E&yzYTH^00Bza$c;
z1fS4Hz{=^ct&KH=l%`Ao-Z$-2GFP=T#dz0jvKF+roRAm_L<++ev%GK+>#Js++>&%^
zv&uOp8r#!|!GVADUvE-VEoVczC**27zyoKYpQAecWCbqxSM2nX%&Xv7Pi<FHoucpb
zfutOQ4&3uR`5scQ`+g&S1KtSOprVQIo!H&~^3QYM?Dgmwy$NFgxjXYd<#5*o-}OAO
z*3rxjBM<XRSld}$Ij`kv3^foc#GKRgX@>)Gv;K0}r0tgWKk~61#P==bVvWYbrbYT|
zChC6=T~Z{y^I1{Rox-AB4U39aHN at 524Ysv)<i1%2Zf?lU5~6eSfUVndpL&1k-+FHE
z(Tt|xXmBpsZD)EDZKG&Kx--W}cWS5LxWuQ_ykW}&CL^!qb2ZaVM^Ned1gcc`uc_Ui
z8<_4Na;Pq1cNWF?WThK2=*eQ+ at mYx{PqPwwoJeV_UbWDtRD1fD-`RxLO4^+9>SS44
zC7bZ8n>DMtf=<IO23^}|e?W00`WvVIG1au7*EeJZ558m!UTW+1ONn(_HTpqtvJZB}
z*H!zcY{<$9RQ2afBKW+z>XC>ywrbW7K41^l2Kj5Xh!uAuX53W~eQbmK7SYqSuNKMQ
znC2H}YPK}&^^BXM?Wa>^rNWjuzyVOMsCeLoAE}DZdw5iX=mk?xkvG$Qu$%G~l_Sqj
zpvEFq*t%%tDK~%SSl_jQbZ at 0X_hqJ;`0Ca^Kl%Hr5BOuB*@=0268s&>h?67wXsK`n
zui1T;aZ3&n8;G8XUBYW7K3o5gC*StAR~-mXd~)-XDRVl@<t@)At%N^H-ttt^D#9hg
zZ$TcNp9x=AL)^liBG?;5iIC%qf^KMmi4z3PDOHMmn&-%-ZBbrZb8PY<m4hA0+^F!<
z at zX?qb6W=uKLc(5|M3j3>04rEM?2tKC(k&6XY{ipsT)rM=j%8a^8h(M%=3(OCvamC
z<o#=APgaebT^ASjeTiX*l}@O0^@i;2rsoe~OLnJ%>m6&LP+)T~{=NyFLVRqxNd$kU
zGoY?VfP?se;hyo8BKD6x$fNRF$oBTLRFzG&vjedbW7<u5<5<Mp8^;$mIm!#KIlja1
zdtA2`c}<jg58^k~NMe58fn6)8+H-haNEKv3G3xDi)LW!m&0J9?sz+({)9x1~_%{ps
zr{8Z+ at NaxInCIy=P~E@|yUbJGbLJ>iu36v{!vFi`DR2Gr|5@{t%K!d1GLhyDV($Ob
zxV~bcZhDl$c%?moKN0QQ0`6!_L!9-9^dYP(OOEyG5)D#q@)~FGLfhHvDP^`ng{{e$
zNN3DRrjA<;OE$Acw2_Iycv1=cUDjWv4;dS*hV7e;z`U{x3#-{^?`G|kLhLVutz++i
zZ5{tU;YY2BdBaV3Xa`e?4hTDTpso0Nils)ksH}Ol0=|Rjp!>oR^gd&8*^SkykBvkf
zo+>|({e*HQ<mksy<Dr+4_$FU|8DxK;xX%b%H at iw>VWW4Po+)YbIJE>TsQ2(DSpSed
zq?r!+HiQ*25ZR&Lot<Cn>50~CPQPaDkxsU4zMg{mAFJ6MWU=MncH`JX>5jS?o%ieJ
zboQYSWMV$Ks9S{cCGvg>h}Sx5Vs`Y`#E`jB#WyC{3T^^JZd37Z)kN&-$M!zi!q<AM
z?U8T($UZ)q3iv>a{M$aW{knnM`kIUZ4y)ndj)jwBu$gnQY_d}5J+}f%(gy^{?S}f?
zWmUelIaZ-pq8t-=ne_d-?64n<vv at ycPb|6NHlU6dl6oKQUQ<v0w_#r3j(4ys)X560
z`PAT^jmFv}nz at QLE+b{q8BlkrYaDdG_C7C at yr&L4c}xep&<8#Q=DG+zE2G_VSeH0C
z7iDj;nD!26PnWsZD{N=noDAic<`}gjE$X+fbKk3eyPwRX{3)ExE{P{2^<H;{4Jp*p
zF|c>%>kIy>4`bly@#$ZYwq7$cc!N!jesyDo!j^tB(RLO2OQUp)mfyh`Q|Tg#iW=go
z_R|Z>*j9y2YhOsQH9sB%mo050 at 1lSOqI2=ia8(zF^VmVngzg?h{9;^;)+dw_dfzS7
z=O5XIRA;J))2#<!FS<$p5Q1E+kM?4Y>R{(1Z~Y1TUAGGMsEL|f=ovpAj`kXfIyMP6
z$Si~>!rw?RHnkq-Qfpu5leM0!?`bx}ZWLD{e>+VW0-dR|+Kb0jdyR?bA$MX$8o2%P
zX>i=;?5_42P1^S;=FgW;JVZ|nD$ZG2*g~u9gW+Ey{_y>|rNaBvm#dKnEumFY6)K$b
zrB^~oDRMz!pXm1?CBl`m^19ef*;k=Al6~m^;qdds4DUaM{e{AnyhxG<5!*@a at LiL0
z?V>!b?J0g0Y>`CXl^Y|lP8f-G*m2mkOELGi$SlH$LXWPD%-ynb_>m at tB4#OkIbyp$
zC~CO#3HrmzHBFNxql?F9rMr;3_TJ1ib??lS9UgY6*ij^R-Gr~$CIY4cG93Q*qE)zW
z7v|{pJB1iezl_FQg8F)5Xngfd{_pt8$^W16^*+(pe%!$O5 at V}tNas|IHH)?*Z|PrS
z>xVWnrhpNDE;j-7{TcV3H|`XYzJz{+m{U^MWAvo1$=qZB-lp2iF9>Te$nQ28e+e)P
z&T at H>+#7i=(~lE<k?1sh8~TVRNCB*6f%Xb=iMoST)_eIc%UbH9e8&YKuTWjmA2p$d
zz_Y;Nx0C$3x>upVN|6tV<bIF&pKGbVuQk=QG%T>R>s}>wi)%7uEx8FY_|^3V=Rf9u
ze-M0YI`H8G=d-Epk)09GOKUyh(a7Ds!TLwhd6G9(Jg^8hns7DZT$^}7B#&-gT-zGL
z6G0cpj;KrOIAfN-$(G2)hj0$@#hacuh;jQ&67c)5|M#aBu|Y=g79YXZfbG}F-FTI1
z3C%)|BDr`A>_sDlS9#zVmf6F<;=#^- at xAbU;Dt0_+!X#f$!m9UGw==bj6`l`AwDdD
zafct%{1Q&e>4J}76UN;sDkwZT5}an at SSnz)3A~W1az#Z}6uBlJ*T8qU9l3bOJu~I_
ze+TyjAP;vh>N*eG{_q2lGVj?Xa^08!Svq{)s9P@*_eZw11^go at Gh|}<fq$Pg$LlT|
zjj|)_<Ar+RC0liSil!|9d2SG^a~JF4CxgZzAJw?g#Q_s+d+NmYm3&p)2+O>HZp~y(
z?rI&bO-P>-kZCJeCT{Iw72<1cvY#o`eScltL*tMq5q^T!z3X91)+DT9gOwvA;ctt?
zy8k!mvKI&k2-b8t!+q#}&?fCbxnlDKv;*pLc?jzAyK=eUEc(hdY+JRvHD4R0wJp^q
z;`1wFlM8&Xu6P6(ddRH1sxt%!p{DVB0q<G at e$<VSL2-2*&m|)cF)pkWcCe15K-{;J
zyYFc{)BV5CBr=v>C6Ze2t^K{)qcPWdW^tHHamXS$*Iy=yWN3qk+2D$dGyw~O7>{F7
zx^Yw_bc?U(63u&cD+Gh$mLgX7wk@&&IH2Rd#kzC`;5JV)rrGhDctb?h7FI at 05lIYN
zL<(b&VM^Sf&@ra0B7$+!pMgteC&?>%ZbZ0(=Uy}}quKJoT&Lwnv(s`C+|&;TI4vO|
zPW~;OPHZ2pi!AGDOW)IO_&~da{-_)B-|@7E!#7Rj$`&O23O**8eTzjhuT!+Fh}FX`
z<A|;H6n7Kc&ACMC#b8hPp=wX`O6Zci?LGXMa1+}99?qqU_Em$kO6-aoCmwB7MB at 0E
zpXz$UGK9COvT*5`py$(GDix*Fxuy}Fn{FErjA|XlCTQ!x*XJodEj|@DE*5bdKW_|=
zN1bemb;ijxheatGU3g-(C+17MOBd-8b|Kfn0_X-KRX0oI4qssyzeRXk-1qzfQWwQ*
z%aF6LLN4xzD^&GAPx6Axi?iusO?-vO#x5`9MTnH7-0)RzENakC4fe4FZHJtCc!jum
z_*<pptAmh_-Y7 at EKwL46HRIS5k#3CZo|!4IMXZQr>39wgcv}>2y{AsLJNQR6g;D!~
zJ<8X2&rgt at sEZ2w8uRf7XeZa)XtFLYvgoE4ozgv_{sMinqa7ISGkTsWbfT)5RWiRt
zEiWp<xre8x{PSAVuOh@{30^{7JVE*(f2&b}_ at 0gA8r3!L1eul9GQX4i1ygL*dgLV2
zO()Ohb(I*tZ=<ZTV>tJF+l%~d;NrPq)vO(~X#AaR6Zl(8q6 at pp*f_IM{RMcFFbC_i
zFlUo^sUYbj&708k?g(e_%kT|mffc%dZ>$sXk$0owDd1}O=JEqiJ}x3y1|QoaZ0vs;
zDxP9~CFOu at ZxlpU6|g4t_HaYk+rnw;OTroOZ{+X`SS|HC_wCW at FHpW?mI>3~d(P|%
zeK5AUf))2WW5JQ9Wcq;Rxg%1DFVmm?=XcR2v{Poamt>3eJE;%8Et)yVE at RHHH200i
zgr7YL+!%@X33~@+S|j>a?DUtbYl*G^y}yxe$|wgvrs=R|q%c at w9JFef%`uTn`~BtK
zCxU{g?qI~kvCBz3H_3mfFJmV%jXFcd>+rP(mW{xDqlWJr#cY=LFYC|!EyEBj!Pr|4
zoE&1KLbDL>MXP5IeHZHUL0k1&35jh0cVsc+Vd<!!f>zXMfoWg8zFh0%ZK%__L*{gb
z1~S)ZnqOv)-g4U<z4<mcu5QIFsrIa1MMXv}(5y7e?+yqjBZlW=`(2Nuu)y)LsRs4e
z7#g5DE*u%#B`6aUnfsF)KJ%GtfT^Ip2MCWd+UT}Of#(}z&tkt3`Qw9$ybM2qaiDmo
zJnDGZ4&gLhzfAM4(?lVUc%ID?v;AbKUsR`X<`8B(^g*#G<`wiYZ^Y`Ru4xJW5IG_r
zz_+ahM at r6|mmoX9D*)Y2Hq1?l{vIi1&@Y3n&v5;h*X6fT{X5+#EA!v2sRPdFH%=#A
ziS-O61zrqemm+=GXl6ak?*u2!o at E*lS9S-sjGMZdg>p6r{r;)Buse~yFLvgVx#$UU
z59v#`s#hhvE{+?7lxyW!-_QW-IjQebVB4tQ=>W9nZv7ti8goZy;4371wkuiS>*zGT
zF?3|qJ#dya()oy`Ign8joT!nMAeQ)XB{;W`kF7zT+69iSUh~q;P9ySz8Z%Etu*p<k
zxxB4}V7-xV_XxL*msJ3Z_XCYw3+TVM==hD at sJFXxCaE{mMfC5B+M^`qv1+qr75WQp
z_jokJ^{7UlS%zGv8%W<qOdmKE=#AJW0>76k+mBqWEoasT^94`K%8UyAq&mN_uPVH#
ztF)f#5A_cAu;ZvZ!gpmwMk(^O8oob0^d877*a(bDVAwEMlkrP%Nu&?tCS>#i=XU^H
z<0s+!wf&VB?6(NvskIB=sM!8w at 2AWq9&nSuamxMT!<9V5y%4$Sml5 at vW=;4})k);M
z^*Dl!z|CmZ0MmIIm?~G4rrNXWb8)pOn>$wBCiDMS_<HsJux$0j at NCs@+&!<W{fF=Q
z9dn-6-=%KA at 4?|?&4LcSlDlqkjhhADlVCn^-4?vR%ijgvHG=zp2=}~!dz9EZac%&=
ze*6!`|2O?zQ$681WV|iEBK at Vd!11bW&&{_O5Bm6<(g!u~>I|9>fL#avNmhY;EHAQR
zl~V|=LL+!k2}a4=9`@c}W5O#zRzY-W*e5u7K<8r&FU9<~M4by<(Jiz5t=o`M{oxD#
zl5J|f6Fg~x1^kxueD$T!z-mwP=~%?1P~G9O*3I-0%;h4+7cq(#{P8TTiT2D%hU|j;
zMcZLK>rHgN*pic64E$KJr^pai6(y<lxQj!oj3ky*kKYDf=T+n_G0I_|h#7w;NL6?m
zybkuE_Vge8t33xd+OA(+TygzE=E2)->v+A;7X~r*8btFnFNwb7^^3kXwu`<pUKQ;}
z4(WYHr|65n%W;8>Rc?%4f}R`!j at 78JeY#n5#v2So_E+s<*Tr?QCgwNo$rvZ_Py0mk
zs@|t#ff-y%xSq84z~OW$bY$3OogDpG2HdIg8LUHr$H82)!6<AFNCA%>nfJi8bmk>q
z0p>j?{lT1ZqAgep7VBH;GQ#$eYl}n<ub80oc6T!H3;D-x>U=M3rj=FS(7MIf917~U
zgI_V-!KyqrP5<bzBrbB|*lm##|Cjv;+oS3R9pp26!u$X8E?_qCuI at P{qOCk7Ed|an
zDQrtYG*kDC6gv8A8XLhJhMt>VIx{xRT4I1aG>qOSowUY2Ic at q=>$80JSYmi)WpnTe
zYs~iUwDHpk$4)UDjkzU1<Cn72m?KUO&k?7o%|&vZ*N_}$AcrycX{=+Ul(x%qAjoy}
z0PIA1%Gai9ZL3jl^T5yCqD+BLSO!0LCNBtFgWZB`_0z(OVO8D at VJD@J0beA=`S{lj
zUiIR}r=y4Zv2-=+*c7%2I5p_iHsz|6y@|9^^{3$RSeJ07iWTH)-W1N at HHUfwyJrYH
z3AuDnx;oINkxX at Zx2PP>Sf*by)u-7DoW__xoHHemvqlvwJfc}g@;~q&*Q^sbV=oJU
z?{>`J;bK$8H%2Oj-4+FN8N6$K>}bg9S16}ZDl0-CJ|p~0R>mUchUHO%IL-#RY=`Q^
zbq9gR{+!iszlv}8l1^Fviy&6kjQ)t6UVp at e&%=01-a=xQ+oEK=`@)N)ud4=xIj{xN
z>J)+}ft-0juoHE&f#CVo5-+8=&l?<y7~f^>Rlz4#+ihj5C92EmDXOc`gBl)LiaZ)p
z&2!$$<$Yd5*LAE~J-HkBsuGVx<w{RbpZa^Aes!qK{sols871ihSeyM)b%<`$153^{
zmR&=;wvQAdhcU~W!rx%c-?CYx;BR2%R3nac at ut+p_J#nzGJGA|4cT47Z#4Jmx at f67
zOE;0pr}g$iKH at Y4cF17~)o5GS+Ga^$5U)-(DieU6GOX!WPSxHD$kg6;%b2e47q;VG
z at l{;gW=_^&-K@@n{2tnm$G#VZ_&=&`ni3qK<6pH*exXWkna9m7gZ(n117N+GxE*mg
z;(qCj<^7=#^2#i;7*- at he3yhr=Iq&+JKFI4df^*t4|$eDLft{ke?4 at IJN$Sur(k?O
zG=y>I at c6~xEkRCRf8<7$Qp*X}_HH<^SKPah6B_F?PnqGHcALyUf?i^}N#~;;BdR@@
z-ozZFWbWYjQfazRH|cwbosz}8Lgd4oPCqf-Oa2Qk*$4Y|b2;qM*j?hg7*}^}3;dTz
zC;2p^Z+ljyKv(GE=GNQZ2?5qJxz4vpzKNF!-c(T%)~_E}SbZn2Q-t+`{w~>v4UHXM
zA9T&>gpE#?T|Bakzw4BTUnX45e}AfVwj{$kS>bK1TOTG7?6eQ^WzaPc+REzHPm2(H
zz&(?D78g$`Lpi0E=)!@zC1Da01BP!3fGx)zyM*xC83!Q09jqF<uX at Kl?G6$@@wZ%U
z;B=s7!p)ks9{E^K0B6^LTvkMf2WK9}nm6<rT73y)>UYv63Hye1gx7Sxgd%qYbQ*_I
zj<|RlvUVBtnr86;v8&;|@Q(xMpF at 0km{%gHNOu$CmMU{I1($Y2vuPPUv9C~p*IOy)
z)mzBN^j|sEW<9-qGvYx?fzxHcL*Qa_#aQ#BOu4)Oa49tA>N47bbAaJr4GjNGO^PrI
zoY#};N;+OE`HkqPIc2f8%jG^Vi(XK_5;Y%leJrQfA$Q=UtD+?QPvib0PvDd*BBB>A
zulAgX3_BSWZD-soc3fjqbDf&0Oa#7XKc`D25_uJJ((OgLBBIr~xhWYg=-9YVg}AV}
z*7*%>KhY{m7fP!-1dpq~6ZUCRftk^Vr~F;dzsJnraJ`+7FZD#maI)(KJY%Eyu8-u&
zx4op`_KHsc<-Wq{9L at AiTY$MVEhHu>1o3q{RXxB*baC}rr``_U45G`nhjZ}<My<D`
z%4A92 at g*H!wLe^f^CoqExU8zcA_XpgMc7x!#f^B)_Z)(sV!0e{V~%6(GmqKK(mOt9
zRghoHc9heY^En-Qszx0;26}NB>fWjf_Ak>zucW$TUx6Q_c+O9-i6Lf-iiB=i!O9t|
zw at 6tuhw)9n5w4EVsiZI1J9?As9rxzLR=S+{czkY0&9C;X+oZZKSQy(u)?XGCX at _dx
zjE7W%SSzqZhYSPGe)VK>zxS^}S=#G$HDOBbn=7icmPE9fTQUg0j>5PE<LJ1iO5jiW
zD6w%E5lcyX5L38E7r`&3OP4v=80H4zl`sdQzwaS>I`o6H7z3yCZjg0pqy*o+5$B#7
z{_YIh at k`)p5G^5m7tC+u8k)=1RqZ?GQF1?LOHq3#6sp;cGAm-0=0YbhKNXL81$`2_
z$DL3U at hzh6C6Gm9LVyi~pQIG`mr{}8 at nMc|Db`~Tirt9^2=1NmBtv&w2ED&j_Jz(c
zdaA%}+e{w_I|Ck#BXkaY9S at 3K+E?|F7Nr?>Q`jdb*0i+C`OTS4Gp{Y0UzN_vYMNPj
zRk|g0M*;or4iCL`bR>8 at SBXZ$rikM>Z|BZS$$8bjlIS*1#cA=M<?^bZi2TO->^tFJ
z%>v;zVBKHd(L%q3XRO7#PdM7GO<<bn^lC4k0p!Jgt+pM{(Jrs3X<^N_3)zaWV^5n1
zub1X*fD-oK!t`6&L2KQ?%XprdiW$9_Kg#{!>+|^q^9uGMAMh;lj<LSLqhw{v+6veo
zCodGKAg7aIYi?@kc>VR@&YB3yBgpfa&97ID9G<(srJtfU4#!>Pd)uu7sShINy1 at r9
zb6sY%s#fcG)zS<7FNm!Nu3S<z&(h2|*rky1q1e)p-Aa>#eU!OV at rW4tv^XBpPn<6>
zec- at HUhx@NS5lF2%3LFS+zzb0I<bbiNAib9si=FQfw>0oW|Vr at Z*+PiChLMM)>Xvj
z*}M{VIM}pYgK`Siv3|BI_SLc at nN1iQ3d|jns*fzMkvJi$7VYOxtJGPUP4>C`Bvrdb
zdc at 0HY3s1R5Zs-Ux~6CH7pe;ZiRt~`@asC_s-i4n&B}85=L^FZ%z at 4YK9we0enWC@
zx8>#covS~2*c18y<cZ<?pR_w{#aGZ*v7VX;S?yqR@$E8vJMnFo@#jV-6Mt?|yKaX1
zVZ<4cSm7d`uR4B6kJNvla{)`6MNQO=Tc^X=Q4>B!{)t>e<!okyAUD_e^G9L(N>1n5
zq8}ead{yQj@|isF(l{&b*)~C5+{M`c7+b8}-y(RzozBHfAAF+kXr=;>|6-(@{S{-u
zk8eV~>QS$Qp(B9}-H_`>zUlc<s$4hfHIq(8y*6%Sy`|NjdOqqkgl}`Im_F|Y203A{
zM)k8 at OF+Hq<Qu!aC0xBeZAnMHCQ at x&y`p{*54brhQFYIve8S6H`aku0%R4^yE-ize
zBd2Z&?2wO%M4x+u<;pF8qt9FUV<gti_pzSZ-!7v(qNKuL)MEnbF^Q|kV`Dc&&qY1j
zNj^ONZmiE{LmnN0ziGcNg7i7{IIKg#DU0#Gw8|N-oc|Ni4UCi2dO;-STj*%!<ju~?
zvw7vH|07Y5ZDZ~eKZ5^k#I7~W-9XlMh$VyTO8-Nw`)P3T(92?6#&NKj22lfodhXhX
zV0(7ZY0MRR8P6)HS3fMc$b)YiwuUDDPTd8Qi>}~rL>nBb`zTC7WGGut-Kp^6?**@H
zTU#c7yYCF<E$Bjw19*MMJfeF+Ul{|PZ0RYNV?3vuA@?-St*iF@^5!YGW25yYDFvC7
z44LFY+XX^Tf^KL|-j24;`@k&ULbmS<7UKTdc%B0Kvm)gD`fTC%t92ne%+EgL@|}iQ
zmovy!F)icS$}jT13i=fLMNnXrS$l%s$Npq+eJZo|(Z`_+`H3OF4R+4v;&*Bm^z{C6
z`Ocp3)ZnvGiun#>f at XcBM3Yf2FZ!|oIAL at 0wl2aC<hR7WW!GW*mZERCdRkQZ7?UU3
zhx;FaJ*Ek^0Hvw7ZY%2J81zRObr)mb<tJsj=%qMEVi#s3&l|8$V|{keu)CP(Dbzjs
zb^Kq&G|;r>;oM;GnWQksVYgZr)U0*Bnow9yuRt5oZ64TVT(HXp(91{NFHvJXR{z$f
zq7_sREuc0S-LTz{5T9WmfX?~|)yS^GZ#?wbv$Dg(GOavxBIeNV)cMA7 at S81D>y5?M
zccqkdk<^a|j1Yf2jd^j at oTyG#O2I~wn-%j4<?u;henfda7XwHiu)LvbLcfDdS{JdX
zr|m_5u^<wGxD%N>kPjB4)K;A+u@%24QQfPY4eoTD$9lel)160=bI?^L!WLXQ)c*IB
zCgd;0oVw|(FEz;3=QvizoQzsP+SYVhID^>Uc=k}gzwK`>qZ0j80zEd?+M`Y}-8U-9
zmKrRV*Z2h~PmQ2Hw7jAJ1JC<}d&i(N$)4s;V_24OO2unRF+NUJD(Gji9=uLha5g_D
zy$n2D+`B at 4B6>K^F9ml2)`@%3Z%s{HKP2tA7;TKTA2`oH0MG9q>J-wihwNU^8!Muc
zk*j1wQG at Pr#Lhp9wRLi}XVJfSF8DGAzBSY7&_SGT3FQ(gN&m(3{ZP(x_QGzZ2{BSz
zEWYdQg}X=}nSp*hON+RoLL%o1%+I!wZMN?cd%+v8*$ZiM&2L$EOC*d3cJvqFo4O*X
zfNl9Ua?+(B)+mD6K=RaJtMiqro!A<LE}Z|j$xkp1+a0)0rf$ITI3a^|aR-j=C3Yrk
z3r#|EUmomw-Db{rnuz*?d>7$c-dlXiO+|vM>}%C1oDV3McU=(p6PxS~m*3mqT7#S^
zH%|cPsV1BoSLaOOwnqO?3<(xm|123_?|&Jt#Qq;c@(6aZPlSJB&h(iB-i3-2_{M|C
z$?ExYa_r at Dxo>&YJhHaJT&?%+2LD^V+eCpIHSBZg(H+gKr`lua;cRhUc*i2{J~hdQ
zt6A^YhCa1hbxBYb%cAY-{k)0Z#=XBY+yH$_UZ{!!PXwK*s)L^JBW%p~%zd9Zcgv_o
zVIZ%x-0Wj6iKz4-t~2er<Q7Yhul<0PTR)V#OoxS4Tzt_{ly!f({HKS_a@{p^-={Z(
zPHFFuPJ?_23+x>(sdqEtLYzD!Ff#{XOC>tch^L+g7Rl51z3LZS--Yjgv{I3|Oi*^p
zHTEj{E51`JFT{4NFXZ)jI-cl1;6X&4+}?w_I48cm`qfj{#=1$_ at tne<Q~Eznof%s<
ztV>RSFTf=$6P~L^9#hkxIU4PPbvC*7Qs7zNu?_ls1Nb>?Kl(pP=2x9PCre<3kJQME
zteX?|6 at Et$^UKl`z-ex-_Ot|BcIgZLzt?@Mkv~!Dw5-zKI_v4`g-nQJwCpnKcf|AG
z&`pH at gTkB!&Q$1=$1s27>n4b=W9*T+spDJuj;-7rY2XEl()i$7s at 1Y)=zGZRS8|&1
zr9Z%&wT<t=e7_AgdctM(e&jmn=X%D;>esYX9%7D2Lo{!~p7XAE^Y*K(0)80@@yqPE
zz^2tA9|dd(n8UqW<^nsJ13c7v9eBM4VNbdSy|+wIue#~2+=$rTSg&v8 at 9lw(aoIf|
z{thXgF%5Rn2=Yw43wBcC>!A%)U+9CUTwQCc7Idwl1_kz9Bl|FOr>-^Z2<LBqoSPqs
zuik_)?>q7%_yCChW+(Zba=IUYKefq;x$fwkPVI|$&PZx-{&=ojKcie-mGbwl49&4|
zjocbImy8d-DP~FVsqn?9i?Pt-qoGq6)Z2|EVqkLS9{0g|XyhU)Nbr_=9p=UFV0-+k
zG9)hqxk1J7r%nW}!i4$l=WxWTvrA)L<T}ht`=Wz6y*0#<ek#GSj at wr{HZomU*EuVd
zd5x9t<Taum8i6_a9dk+JF*)DKzDWIU8P8lBo=3hHer7ANLJ!3J_8aE6``VqS&NyHP
zcPUMkBtG$h7L%2|Lfxg45c at cZ=t9t~mQnZoM0~=_a0`9x9&+A1me~Ydu at iHD+w%K(
zR)a;tU~D?4M5R*y(QV)>MG|hSpubbOb%R*bZxXjxzQa5NeWxB}st=fTY9#v!o}B|6
z!we=C{x1_tBaVI?<YVtC5qlBaKZok-fku9TE}yKwtBS&7t9FIQKzAJ=w(Bk61SR%q
z%@>tQ2J1d`7RL4~D9>H^2i))vtb{J~YLQgutCa(L at iKfeGR%)7bB%P;cA8eGv%Fh|
zz7Kh+4rF3}jFK at dbf3Zd%T?gzMW2_y&Bs0H`)@x$C!^naXSga4<=qv1OAUe#uLAXc
z-CI#*a;#{Y>qv$^kcnKglVb0Sq$g*w^P3`_vG|r4)xoT$F%hCf`<5;u|G&i8s-*s7
zDA at iIt>i0F-*?zXyyJ)Wh at RAZ<P#Eelh?`lNFJd6Jh6uXX32P3mmk}OvivT%sQL{t
zs~6D at _p<E3I&2*(^B{Tl0laq+&x-a3XF31f=@PDgTXFp*LA^cKp~83wRQJXtA|3~^
zQ?TbAicQ3twvwL`{UGMF&8I}vp;NorGR&7x0EaR{y&W<4cibMv>1<(;lZNQTZ#j(;
z6)<PiZ}b%CqwQq<UD!j%{;lUkv&%<Sa(WKS={eWvhj=EU=lH%Wu4jYLN43y<rRpy@
z`$6E7XTUkJnWae^dj}p3p}HfKypj+F&pI^j)q2FIM?;pp_P4&wjU6T($0ZdJHYXV)
z*jMN#a(eV#g2zE$cn!X|J480x9)XSo+mg>#jBnsrz3sy~AL`6Ow^aed=b<xmy0!0B
zdm8V at 4G{f@=-|Fnht^H7`(xcSr0<NqNa~xh&^fjuI#x4dc#ZYFAWT*UoJxM>LV9Dl
z-1WX?8}lc02SZj9)&!8Jx(}%Tpq`cPTFQmv53up51H<-ttU~sMH(7(i*4ZcV%@U<j
zeWY(ieZy_{f0fU;huWQ)hjF4~X?_yk<G}sspKoBEQ2zq`X(Zo(_b7O!ehOYO&U@(N
zL$(~EAHt?{WVVcIp-C>;!)UvB*meVk=8DGE(0Rhpcbt$VL+jtyh`r@}q<TB216PwV
zhB3Mt=a<P!*%8di3UA#3;k2-~1-VQnWbM1KzxS0~gI*i`DAvb(6OqaAKjC_uo6qzO
z9j97#`S`Brs_}WNc3ff8V24k$jZRr at i~a3|;1k*e%nx7a+T88vYrB{}I+yw$^QZ5q
z2IO2C>R&DVL!6Ec`{Iy}4SW1Q`&}mb-CnNWwfhkL`Wkd}+UP<bb;UL~h-~Ch*U<MG
z<tvBh-C$xDmK{d_<G#H&mB^Jh9b`TsawR;Caj`k-b%OQK-;)T2pKlVSQ2mgxcZ}n(
zZbQHGQ&7*LJ?9wZRD(|f^%?dbhtF>!ojfGJyfT5oPKF<09=QkpW^PS(*4MxMl-&PM
ziY4O<xzx1aE&TAm`aCxW!FP%r?a#rE5DtCePqOxzvxw8#|I*EaG|z$C7<xPDd-}l2
zNPQfcKd>JGo9ZmcwZ-Ae!U8rIKClFm3j<@|ve-%TJqqgeS?CvL*qripfzVM{ev5gD
zj>w*0jhRF at CdY^kn#`rSMlS`{*qBQliwQ=8Ul1(=Cr<vDmu%bk=HmPv?^HZRl|`;Z
zeIahjp+VnC&buhM<b4ku4h}&s at XQmo2eC_41EjA=(}gE2(YdG4S0ZOG-SIh_x&ygW
z*C;11R9^F&N^}G2;t<Xv*WjhZ`u{=OW>##Q2|uTcKF-gEY}>kFmasb at jUPT)LcxBa
znvM0`V@@U2A0#_9g8h&I9za$~FwXD^H0CBj{x2MB5HFAXli&lg^QX?XL~eh$vXr^c
zjicl at 26OhPx+I-yg(Z at Cm^??5Fp>?5$FsVrRy+gx1zBrQzk9d9wvYyFI_GDFtwFh?
ziB8o7d$*8p7?YDL8Odtpb>VEnn6l#hJlmRwb6wdRNqvqfsQWf-pTYH?UZTTQ6f<vD
zJj#4kS;pKa-$S_kfDyZgdFu<vuAL|s!JhcAPcwJT&*qJGzW_M^nL+d%uY_D9Y#M!>
zZ{9Cg?<L7~JM~Pz at H^-?kPF=R#zLl`4p8p}?DFj%Ry;bAoLjxymjA|Eh`UMlnI)2L
z-^ohI{~ecM!**+?!iGfJzMj_rd*%`EhK*gsMirHYeD|=a0LQ;VBptRF)wVrCC)fdK
z%IyZurC-R)&C*5LLomnr at -Mal3#U;{n0#skAH1q`j%>efBJgoa at n8YVxHgPaIY};5
z(YNXm!@9}m7R|qq7lrEg=jI;xXXHc|jk}F`FikjHc^BjMF60fyzO9<XA!pVP`*ytO
zaiIZBKD(6XvB(Qp|0ZC9n_y>Y0(O~N)&s16<8+mGYLEw5k_7lLl}tCgjJ_8-R+d2{
zP7pj-8L+?H at Rwt4O(VwuVnlmV!S8NfwUM3}>l8#Hw`e^VU(`Z!ZxTDsd9+{DVuF2I
zdJF!TeVQF}>~uF}su;^$k4Ry5(;Fwh0Q|^7nodNVA7#(6gWEHnQp6ZllVOA7Faac{
zX#0oYhFsI)xtAK5i at 5RghvnO<;w}sw>y<~+!^d8UYZyA#(-)~9I=1zdxR#+~-9JSd
zhmW<z*@y3aKhosiH1)30U_%aQ;tSLx=FR^>L62tZGg-W5_ at f?#kIPdA9*Rd7t~owg
zO6<fb4$;EYuCgo~OIF>3Z%B>&WS%9l;JqB)Ux>J`-SOWX-yLsmB;2+73XMb<xExqr
z3-+<Lm#1D2pwqj`q6<9_r>Hu}^B<PhVEvHFijWVkT>f+t+6LQaQjt@~(SUd`o64V&
z289`u0#X0}i7Epg>SIz~L67>)Y4PglX;Mw-G$pQOt9{?PNieVK6 at rem!7>Ho`TN|i
zYTwUhk#ib}U|O03=lg|B+91k0K{#FP#CmNpv8R1{VECGjw0nQwpM1+vFV$=#JPZ1p
zvEb6UDgc(&BXrgv)<{$Oa6DIja3vOc9tR)MCh#Zkjz9Voc^COUVPLAG40xM|VcTez
zD}Zyo`~~^83zq-;Gu}!h&-l90KM*`i at L33-$j!p~UdyJh8JLXktvJox7rmm6#`X#+
zXT at pTdAzgH9HDD6Kl{;ucY^7fUtG2Co6qtliPR|nE_>mfWL~Lv0x2uCTeQGlcrBI0
z$jthA=oqh5RDtU(@ZTopc9U`&Cyw=np0l{z+_y!v)n3>kBiH}uVbLa(T?!70h>x9U
z=i|`R?v)ryTZirH4&ac=z`3(c>LTr}*;*l at ehJX0v!s5oe_ynU)LYdSdI9H4c!$kW
zfs1b^S4YMm-X76nd*M|XDJQR3l!kYWN13qJ7p<@tUP-3vjg#<Q4~=OSEx@^O{2FjR
znO8DgR<r1kz2M6CIL?k~F-Lq#%J}|p884xX#7;HfpO3Nc!u;jNntuNBtN!w_S&J82
zf0BB3oTYcn?yOsDdkTFzzAQS|Lp`t at _Cy`<b+;Ui<6+mXCi&m^xigbVoUHjAXFCOk
z1bwpG%dXxp2-<F^=cnC&I%#=tOv0QJtP^e!-w~CR(JhjVnIw|%1L0SnWHe%Ja|z?(
z58LQvVvD!_W^Kz)!1xK0czZ at BaJKlY;r7o!{N@%m3G=%HHZ$+stjN?F54h at JYZCYI
zfFteQt?D1fV}X}hKbwab+#WJ#yEI!-_63kBvmuA}Al4`YF~Pqg4!6ZyPG>(ozpf)N
zZFvu!&vOeF!_G5b?7(<%VXgG7QKq_Kl&X4g{~iCPx{i@)%kLQ#>YG>>U4fn22|u{2
z48CE(V!|Uuui)w at 9DdmZy!Tvg*6Nour86<6HeW-zXL)xA$+Uj}zjOZZfiZLc!teaH
zq2Rvfb?&`4$a}pLxc9<0tG*KT6%TTPdw$mL_^&b%Q-io0 at +{=9NwN>R7IOFX{-5`O
zN08$!MY({pM|&M7V;a|Dy*>6S<_tI5z81MvfF)t)SM6aJE*}U_p3 at v7XATkG9X2Kn
zaUS<qkalfQ!9E7=9(*hMetra5za?=phSx3p1sHKR at fkukNHrM(0p9fy-et_q5(Zj(
zG@*pguDaXH2k(9BuR6fGHVS^`H7#DI&FYhu&#j*C<yLULEb;UsCqh5C-i!(AD}R4e
zy!s~mg3lsP(zbBSu?HiWF#>_Tz)jY2lT3F-uh<JNgU4tvg{zlA$4XweV7}@s at u`k2
z6Z_-dkI6lBF?f<7o5p at JeBFY-+q)0%a*}!%5q at Vg-Gp{`8>JY#3)DAZ8}uC;h-WV5
z&RsE!wskz8in2f!aNp~#SNL}76}yw3%tRYK<?kl#&ual6th+oR_uqK`QLK~pV7<)-
zn})tSYo|s_a!Pl+xV7K2kdznCQ<CTL99$cP50_EN)dNe)hCbNhZ_m>C+c5?$Q$7E!
z<7(f%;OQDW{~z@`dgwjb>VMYnL;u(MZF|H&Zuao^P~YkmT-~|EO}?`T$6eSS=vauo
zK);VizfVJ1QBMMa3U!9}YIrRA#&ADX-G_fT1?_i}J7)q<AleeSGz+ at Y=64CF$42>P
za&`3-WKtLK6tIuk2k%I-{zT58(r{X12{$3eQO?{#4n}vVANpt#zXf{S-Qhlgbs4D(
zdW}et)$I;q?xh>yzgx&SA%D--Y0sBgCLIR87=GO>p2xdI{U>ZkFU=1koT^v1x+AG8
z-uAd3iJXAk{{myUS0pC-ySS-s0$9Z+-5q>x at dog#W1SYm+XTLjKCF at YpchPFO;i=_
zK(6U$#rJr?ayZH%gU2ARL!}RiC7c5Jl3<jO<0KCQ{>$|V_{Pj34t?FSzx%+Fp|*Mb
zlc7FPwGQJyog2qj|L*fL6 at 2ojYYEROSgd;BufE8&JxlP~h+!5{_uSX09$@z5b!Tl)
zp^S at X65m;|?I}7IcD>gr2R(uMtlYeh0mjsU|0Lcx2miNg3CB;4c53=p!J~)gg$ChS
zn>B67{~5&Tm2RHLFIqg{j%BW7+9N;DNr)8Tn at oaDM3xX40(oH8EeTH{as>PhqkX#L
z2(GV5{V355zybHM)Mabhm7>`?hv+82FMwCD!-4U%u8+tR^&29EW<EE+JaV&u{d_s}
z0^QRhX-hsE4LP#+X8yqUtt5ZLN#PhyehrNi*^rzWTSsJWW*pwtZI*x3VU~Yz)13Ut
z1#i3Q4(WUT at CS_v$1hCPk7GUL*cimZkD>6JNo?sD+o>i8u(MgPB|@h$kTDj8ZzQr7
zx|@0~`3}q(FM@}qw8DVCM&^@N+rjk`Yv-Os>z8}dZm}g6Yp3+2`b{CYb&bYq>fm9n
zevU}bYUWQ9YbH;NvwzbL{LJ|laWCSqF9xa8yRiKQd0mM=b2`sd?fF5dp at AK^PjDFi
zO-5I_yz|!3_To|K=zmDh+V8OO$c+$G?VERu%(JiqomD%hry<4?_SZuJ>J`E|C1MxI
z{oJ|$=W9K*JgqZ8n$DU>GJV1;X_&)Mp5-+jr#$UX|0a}ajrjKeQ6`dKYdR0{F+WK4
zCLa9A1#b;)4<QF5{(DV$lziW at D19i(EZ^F1mcNU<65FmWm8&0{9<92uRIYh#I^s6I
zl&S7>`!e8ww#5RYO*lg#S7qdWa__c*AZhyLpk(b8=-jV~l+an<R+9d_Ix-d5tX^P~
zRuk^rKCtIP7nIo=N&oYggEwU!)q+07!fxBls_iX~)MYMkd-NgqT2r~aLyWq^wsjWf
zW7ZO`_Ye*i+7RQyGcpk~d)92o>wj7aj>|OUeSrVqqgs3$wg>yU_sIU|9lQQt?`Xt3
zXuJd4RxS4qi at v$-sh!Uumh9R2z{O`DUpsTMq$)o=S~UR70rAWI7<H86)%FoK0(%Aw
zod7x}coP&vM;3mcW+&|=csuQ;pdt-ClbYA2EmJp4U#2NVpIk=T>KwS`_zN}92-`K&
z-EyiOzT-Y&ps^9p21iNNMO@>{N1H(o#LYzAl+Z*s`}$k14 at ZS5fJ68i>xBoWEnd?#
z8Dno6Fl0hkTAd)X>X1bcRt-Cc+^uA;B7Wj5EkoUq`A at Eb9zl7CzRC1qyva-c1E0{z
zVPB93zMw&;dgxyNCdkou#4dq%QUlhjpO+Xailhf+$D|tgQan81jCuBQv*YGJuDd>b
z-O+zshnyS~zL^E*1HNHA+Iu3u1+r6KG>?L91$kDAV=oN<cjA9gcy!Sl`kC`?K|e$e
zSj2H246+>koHsFedF>X5Ty?o<Ce=Zccvuf?5=pRWA+J}JfZBz1biF9Kb_?pVK_sc&
zf}9ovk1Pj<+t)H2GXq{0UrSKf0JV4cKB298Wxebed=QakYH(0}3_a at X(i?3Pc0MOm
zuW`1$h+KS<(I1RgreAM+U}w~{72r$wAZ-wJ+`*<^^h}eJ+#KkyM}xEH>?c at r%SC<Y
z-fngta&Ej%VmSH8 at kULe_oz$4R{#U_8RqmWfiX3w-|k18-E;VE@%lYwTRKyKC%9pK
z at 7S}L=YR_Y$MFETX`Wl3Pp&WX+)`jYniLj;w#WPmIqcDt7M-QKg=+MXiqY^}!Ct}n
zuLuT&t0(l+fbH-Z`Im at xcrc#_X%7y6^N69?7V^ymBQE@&nq3ji>_bf7)e_=|jb at 6D
zem=K5Sf-he{T~F60FU-IzBgC>ApYA$f?6lmIvs2fxcHOduZ?DEh`-hnq&hFG!|@m3
ztBtnR3Y`k%cJ+T0c?p7`ZxY>dl1{Ix6FO5V;`cO`s!o at iL(dwIiQUHHYR|Pq(m$)f
zIoq<CPFC-)@J2rG5UN916-%})BE_N^<UY|-@~qk|>_pWyfp^vZ^Y0A*Z&LM at fg6B&
zQ4G0ID<jvIi1IuJ_%v^B;}?|63&unCE3jTzU2%=MhO!n|qKD+}w6x{@72pCFOo(O4
zeTPH*JtE~P4ND_uPck^Q<$D(cBX<Sd`W at j5q1VV@Gg)cNw<IGjU=HJfPp*qaPCAjY
zwhW$1$?!Np&SHXR90R)<iK7+|2%V6rGBP)8L+q?24Ej?SSu^SXAaWjDE{kCoXyX;Q
zjfgMTFy9&j5!=kikK);hJp$vc57)Iocm9Gdfz45(t^p6W?;EwyHy-2s)c+Em$MF=+
zwkQQKfFwreoa(l4cI{QPnI}Bn&io-oY{v>!U&$E8lZ`kGqhU=Ko}Do{UgaZv0(Aoa
zxe&TSxw-pwp`NNQmp|w&Py%DG!W^4sVO4JfmxmZ&*b0!hn7$aEu2D`~1Q`^snOre~
zF$*MV{i00ByDW9Xv_+(^C_6=oM%1C;LilUy{jh7W#~XMT{MPHSrVtMpb;O75^cN5x
z?K#ZVvY%zbK+N|=`YgXp?*CJebB|3!IVVeNJ*VVp4pAoLUZy5~noiYB=Cl_#iSG%#
z)6niePpIRCDU7;m-)-IMH-v8T4&x=iX+$T`-^3VFgU<!|-17!GeRec?er*@wHaP#W
zKNAP;EH*Z>yWD*1&{72{d)j?rU0OBqhd(Zk>>iTMrJ16Q;F-x4JAjQwU<K^I0kO?-
zO5-KS_S3^{|HEQAVuKbu<>BIzRz!C5)?uvbB3#4gzh^a6)iQ;wOe9f4SJ8JPKH1%X
z+*aZ6Np71a#(K^5wopxQKdz62YGbQlB4nq5*dQ?ey9rnOzu$x1B|-QE+8=yCg0Y&d
zJYaLEFJM!5<5vr8g~&Eomo#!d@>KS$zoG)hZR9d;{|>o7=nEkYJ?~W_KS|E at Nb%76
zklIDch?o`*e<^$d>&KThyL8;U!RutEw>}eNJ@=X&xdo5acDT7X#fm2F4*2uW!JofU
z{k3Ri+<oCgVc8|}twD#4TZ58*4Y^0kX*yZkfi?P8WBx)nFQ1f;>4oe74>Dwn$kqzX
z*Kfd_`~r+dLnz_|8|1LzCc&;EtL-R)eI;Cqeo>-AePwQol9>MVTcnRX7`@5EZ?$)`
zDJTn(A5x8yd^fNQzSLNi>u_YAry!E)ISd;p;`z|8b%)F4pG5jMk>}%jS=}K^3eml|
z`L18!t=T$V3R_$mi7zKHC6MD0*2U7k;TW^@)(#f at mzUSqT?tRAx*m?aDu|6uZu`++
zTrU6UF2N=7H;J7kGa1N`+I-liF3}HCpCKoU=h`=D7Z-2{$4O2<YogSRGDj1<Vnu;v
z<pifC=o74Upi||;o?EOh^|ntRq)RCHG<1<st8sq?^3+vr>;^};=UxWtLB2Vj&Yy16
zuAgRuO)afrCUWK&2(DrE&#22QQL&gO`=HMPk*WWa;7Tx`4646YA|K$?jfhbMHtObU
zI5t547&^AvW1lkJRxaN)lGt1Pvot?rt(9S%IM*eJ&oTIMc>ru at kT0V&I0>=E*%{z7
zhQ5%is)yd#U{3y~L6ij<5W(CA#%EA?1^ApK^<((oFIuX34clI!1M($S)q`9h4&y{i
zuf87dtWphBgfPHFefR*dwupbztS5fU`l+acZf;!erSqS1mB1#rNUC(AzjUzCvs`8J
zywTJGN<r|2aV?P^tGum`+i%juQxlfE;#yQ)ixOzdOhu##^TKFqo%oNXEs<<oJ?i2(
z>cRq>+EU<a%)0eUm7JXFSSpERr*k=oGqteY;<;pQ0X7Qd;s5*p;q1-hnz-8baS#<S
zk`VzRNv%)&q_wuZ#VC@}%?*gSC4 at jEvbZEf+Nv3nfT&3AW?Ku<3eu;WrAlp0ElrW7
zi(9c+i!`EySW(f6QrlWHSwUI8*BP+S^S<xr`}r+@<TFWT=FH5QbMA95*L~fXfA{)C
zQDWeyqUIvx6n7)3kMRGhUvB?j`sMDuenCI<pdVgCKlHPG6fx3ADgW-5wwuHKB4}dg
zl4W|nntxb9A;tsDj)HR3CDf3-=}sZA<R{*Qj;SBfF%8f$H@{^UM5wip?eIktU9?~^
z(KD$>q}_rD)gZr at m3c0He$Ei~zX92N2**NSB|bOfS6F+zkdyEE+h#b4t}u=CeOnxP
z7rm4UxvUDYVS!?}|BZ&Y!bQ+I9SZuYNEv4krii^b#<QRue!k^cH?n3JlI3DObc9gg
zhb9jDYIOVYKGY#Ltg-Wk=bONuJy17?_?pRlO-JsEX+Po_K1P7Lzwl#?;B~#MO%O|T
z`z-~3+XGpY8+9gqyP6>X701(vzm4R3 at Sh{=<$tb`s8<7flKUp{uMt~_l?ABhh;i~7
zSquA+_r~hL-w?T;oMyZT-OE?<47=tEVJqD~4eRizfEhl1zLLRy<VWeA7S5UB;U8As
zXjFXj7xe5t#A#0ouD13JOofkj9yoPVj5c5at?1W!!FtH`7F_o>aykrTyZseLB6T6B
zq-mNAKId4|PmOzdFAApM+~vGpf+eQT at V>F^3;YQ=Y0pKan0}*E13LKS<lZF=e8&$R
z)tV}Vb2ydoc{q%l3%eW5xvNAUnQG}3>Zkc*M)bikklT!^i5xTR7eQXDos&+uKzU`7
z$-;0=1?KnNssx80>asg9)|pDgjm();6EJsYqQ{Wy$`3%VQh>whaQtS?8~i=s$X{Wt
z1y<l0#Ih74eOFC#CV*l47#tzp$PWh>$e7vedh|Yc2h6UG#1BK~A&%)!d@$6<#K%i~
zFmxXA!Qi(7aw)C2AU*?F4iyEAw7Tz!1h$?x>I}=<h1u{&WZ8O954)!?#s3oWBd#G&
z5A~79t3;W@$ARmP)Qu>>JsqqwG_=;K58ANS6 at -Mthk~42!b1{LPQ_V&;%Y~Z`Qg-x
zFrOuICuDP;kXOw+c}f;GBvv+i10#WZE{FXm(c6vXmN#@Kcw<jRM!?s|w*7r^g&eic
zw)x?{m5`gL_k+CX6PlUBW0qVGzSF1lsLRCFg1^K@*EPINE6}dd`n^LYKS;2sr?kAs
zPlZnPk!!Q}b|`Op)C-}<j5~Gu;`cfgjQOc&1?Qybzt4W_nsJ&UF`a$LlS3U%C*ry-
zx!u4#Ojo}~ee{UcqM5o?@Vd3GQ)W$~6Y>7JXnz$r`zMi_$j1}8udRQY_g<HqNnYO{
zB at 38l=`r0%nyLD;T4@?Ds(k80a3`Hxoz8O~P1P+-)UWmOZaqH`mF<5D_<4^ur!CN-
z$aM*R!upjRKZth+3^rLiIg!<|FZ*=iR<%){e6#D<9kc0OmiX$6YwzQs)&Ou8K4w+3
zZ_ggY!Xnt(h;_V7a2FXGu6h*UTngvRB=uZ`hY?FnlY$fE`Yfz%LmVC12j5b<Y7jPV
zy>(${$*F{~KE%=*s!5%<<;}kLzani~eyP65ws&K=J)DzfEVNA8e;56GgGoRiY^HWv
zCQKoI#>kKYN<0^}tpaTFBmDEBuSH^g=PibhZ=Kz5bMJ5-)c|tk+VJU__b*@KB8{{$
zZOi+ at 6jp|K{RV(@J5O{P_$bph*ZV8wwfytV-T;$6jeN(N)<GX4xiacah$-Dk5q9<r
zD3-cD6Qg#a@@6?B<JIO~XMgtyW%!*CmBgRG{<gEf4N*zpun<p|*~?)MyDFjI<X-3f
zB7**s9S+<!{B16U%JG?aJA86C%Y6!*e;#Ww^5YuQin+p6e|}_rE_}VX7Z34Ss5jyN
zP4L|wg0E&9;_?pz^D&j=59wY-9_LyLb$rU)@cRdGrJe2ph2 at Rvi=CwQ+0Ec&(!bVj
zqhZ<+((i(Ek`B!6pMjydnfrY*_*ftM%L3a?xmE?dhxyU?&zpV9O35gps at b<=A?z!{
zK_07e0^?MFN-~apcjTN?N-p?EYHnNQ58Wnu%t)IzFwXmoa!yyH;`8H#O9$H at jNk;o
z_7`C`hv}O4&~1Fj{%e9p#h>39<%NCpA^1IW;AcoH90GrK<?k|%Bbac9z>jryvGoum
zv!4i5aGb~&scV<r8xQh^*1VwTx~V1~_swy3%ds#fxDVLh5W?+(tv|3-Td^Hem<f#5
z*M#@PJDR-9n?5ESc8qYgGkP-Q`EfksdQ0E3x1`5ld%UY%B|Xu#>Y=~7Mm==0mG{uA
z!AtDTDGGwcN&byrU>ou!;~go!C^8zUdgvU!GglBl7+-aK`I6cL%O7s}67j>~Ia>_=
zUCnGCcN1c24VZ6r<Qm`@ivVs$N`99(qbC$HT{A+4%&}!o&LPBB?nC at S@y58L&AO1*
zjDI$WKCZo!^}H0^M={&L#oqvb(Khr+5OssxJL3FXtF|sz<CySM4cvX!I#+tF`?E*w
z&Hf6VqifW&*P^*ZZ*912(S+$OlityTPXaj5XRiT^^Uv1ghql9a?TI#$|G5A3Pm$MJ
zRnPv_n*7fn1zOndYV?heT*I21cBa`oYO3|+7i3&}*TmCXEZ(l6#`L$cuoj`#N5kb3
zBlvKtzS3LvK7vn(tCbhCEt=a|H)!TK>6z9qSHj1Q*ySQJMuVSa*W&==BK1Q?1 at O7*
zvJfku8&fyhw98^dO}t}E`Yi_PE`?(3rwU3vGi6p=Q9xh>;ba{k{t+S%buA~C50aRw
zMi)OJ`E;eStVi_1O}FC<$xqeFvJlZay!%~J7i6M1eg$eQgiFDr6+>`izqBfCn;_ at Y
zd7JTnyVQyQ-^Bkm91GqijE at -1Ps|}Eo!$2$_FcoiA$H$?VPD3%(R42I-U&|zeDCPH
zhk;ERhj!kA&FX|511tw*!aB`)jJx;h6kC0bX<xq+4}U!JPmR%2q at 22h?ZDDYZ-A%G
z-j!d|v8e!SW#Ll|X2W)SumthhS1}f-mYzP~=SA}|zZX at twHe3Q;J at xkG+^z_(1`u*
zEf_B)`g}8+Yw<8=abb9+<Yn;_^E<nl@}<|R#V-R}QPa^i3iZ!YBeD^HbtWpHk15j`
z&K%_E)^Xgy*TDCKx*_LYlw9wU at BbL`*c)J%-mO!ZTG{p=DbaKAp76Uqct$}dM}~JM
zE8I=y`0NZ^KeohxeSyH`I7vU?dyCMBHuF*AgvNavhmRqCckI*ppV1r^!au-VLA#6D
zSl>g9=7Xz5%ZzMHm$bnlxft`*51~&P$cCM`*7Zu|%f9&KM6OBi3bvDW$AFKx)DfIy
zbn#y^dV&LS%`CjLol?|rB>zEvOvZnz<U6=-C3zOd)1<H1eM7)8J<Q6h%(6kwV)hx7
zc!t5?O;v5btXXo6y<Vc`5z>E~Fzy`7G;7%YIDtH{Y$9`weZd=0JLiz(HpWJzXf8Y6
z23iZP5s=Lye|xchW at h1TA#!&F_YXghF$eGToNW*COvo4;ax6qYbdzhBRr;S9A7orc
z+SMEeMzWw%Y5FQY1J9Ep-G}>^kZU{DxON6GO!4a9fGs7p>+HC{cJ}_jou%7 at F<xj5
z!}XtGudgcX5E72Z``G8(<9`O<Cyw09a#ekuVjISw^&HwchjDAic~6U$*S1@}L|Y%0
z7y`~L>8?vK?V^@heSP!C2mMD|Cbq3L!)<XCsy{LAe5eibI~j9g at L09!@O<-dJ@*nP
zat;lg#VRL%H}GI~BRGu_TYt^yC0p{og-JMW9or9f(huwyTS(d_{XwveApu0k*KK2E
z9_9w_?-lq2mSg)Wa+d8;@EaK}7+a)+{>n`*!PhEMUvDtJTJ`IQj at LxbkT>`vuV-Z)
zd}Du>AU}ReWS3mHDIPvgt6aE<$iA*oT#O0s)CcBc{kYid_h$Tm<LP0ns?#NYGR+BL
zDsm{(G at p{Z9 at N>zJ>cG6!FHR3$dZ3SM!$<OdyUL({;oib(=ym$rYiUuhWlS)VfJO?
z`N%f2+57nJW^c?tEPd5c&3>j0(jn;UWn|0}T{)z3MBc4yIe8@!Tt}7gKgzie;`zqG
z9%%rto_M^PYa4maGZyV67kx?I5c!VQ2`pdCsS_0gsOi at S`)vsK;WEd*(PB(P&0Iw#
zYUZjO&*pI8)3W+*E>piw-UnG<z%OrdrGoowmEGr2s79Hi--7*f<G}?ADf3wZ$G4yz
zTm-V4;7Exp961LuiW|=k?+^TYf6>497ZBTg+<1Jv at MjyojL(lnfBiO+zXsl+{4-MI
z-dnIG{C8sAl1#C~SRU?D>n7(P{KS+VRWO~Yi#6>^R_FpOQ>XZG&y48Zy4n+8-msQm
zeL0FEJZr;i1GQs`T;7n|{rB&ksEgN7hx*o7tImO=>#5dA>jd-};v>!8DSue{@?Svi
z)dCH;<SVPe>Drs}q&yGr5_m682Y){NGx4+qvEfU=+Uy1gtM~pYZY6w^ey>fU#L&@D
z- at f#9I=!@q`Q3hEg at U)U`UDj;TS?J)=ZHgDQ!~M##NOLlYuztc3xWUtPCWUzngL&M
z^pw&{=5$NXKs#y^tpcwYYHo$;s;a8_ng>VT>(9Ko_7kZJ!c$PiRP&`y>-U{s^LG#P
z23GTlerEOM%?t1fH`-6k8#zvQp5-yyB$R;f?0l7_nm^KKYwagyvHA?Vc5Nc-ST!H-
zG{JsCsF>@f&%$30egEFIp at T!`hP_p1^3matU9LO_54mr?74UKICN?lNsd4Z8UF)ys
z9YrmjUSMrbf3|n5^^`u)XQ>{>nG9rB44vGv?H23}CCOKEzAe2jm<HdS8$SBgb4N8Q
z-paHnO$>O3-oW=cBu@;yLnF1rNX&*{FAxXl&uJOqoO1#{u~eu;9O^GhjPV^7c1U}b
z#15c)RtnZrXNawgxFhUjO3`Ru_oZl2VMm=>7et?fKX*wB at oyZD&m{hF at R;wTkBgS8
z28o`E8o>T&drDju`d3b3p*k9Tk&}cu$ph$<PwNcdoyj+2-0?}=0J(=AVk-dm0PH^T
z3()1f)}tw=Uj;72WD_aJTsHsfxp%?U at O#P-{CplwI`k$fu#TZ29!&+#YXgVq)xX}?
zoC!<M?Jg=<@8u;B|1k0Kt3QU#p8kkzi`Trk208~~G75b<>%Xnmr{j4I#SyjVQ|wEJ
ztQ$jmz|rd|Ha6UF5sqQlbh<FEqYn8`#!3?Nifjc>SA#a%0^f;E!j*RcciLIVm<6XN
zK4V4Q-GE6J#^kabpZTXHcIKa$_xGb;2StmJ<GS#a&q3l8Kf*8iK(lWkpZF}Ly-yH*
zX%IU0R6P5iz+L{u5yQ^x!}|K(6WQSZgMSV(<$0Fp-~r at w5L@a;iPIeW)^C&2bN}cX
z)ww?=1 at HA@)5pv__)EXQ_a8OO$UD}euFNCp#!6~6Jw2L3^w{sZP*birI^43edNlm9
z7YP>dt at D_tDp5gKJCkj>sgG{x*_3YUxhu2XUb)12^=3HyFd3SY%xJ1<S^{)M*fhJo
zl=S1AtRSt_0e|okHh<zf&Mb?(vcaP;-QkD8w$5(Y>PpXt4_mkY*(8FsLfy<=g^b{=
z#BJ_A>@@DiI{ag^?`^qsJl5-tt&hbhkpmZscwHpn{U-93t|%^`8 at RR5ADu*3F)D`F
zG<_C3J{$xOL+W!z#76nY6{27Ir8g0yx(-Zr56geJ%r?|Jukb-h7U^rmg&=z+S*n5H
zcj5;zCUW3EWM!s)H~bqF&Az*R at PR2lAXtjHkV#y-pN*Pjgb$Q1p6v$yf2Yw__#yC4
z?vUM`uQ1R1qrP?C#Hjqj4 at 5foH~imt;N>W at qc-<V!C8NX)Hf8gqV7~eiGl4O at S3I^
z-{6K{uP!<QTq(zq2e0RNkjvXlPr$Wjsjg~sk2{$;c!!HQc8i;0;7^C0^v+9>mJ$Om
zRl*1$OX>TYeK(#ceBa-0Ti=#y8*0nJ*veAft(!}*q*B*m<WL6Bl(@j%vd7<E;znIH
zCyU|TjoPl0xDD(xwa<3bTabS+W0L{z=kWi2Cdij8X*+5kfERl5C)&;>zyJSvrry1%
z4Njg3KH9r?h<!=0CU~yNc!un}iL?RFC6_o+XY~l46Y(heD0vQldy^8JB~FXXR at sfb
z`0<Q{<vSVwO^Lx at Y4f$EaO{}-vqE<B&X**ju4#%qkIb{^pF->53xggV0vwV&kCPzJ
zbE!?YXC|%P9i@!;LMZF%FxE$Wa<Dq&RiKD&9o!f4DsO&_p#=Ptd97_ at J@s0*c8tnd
zWi;F at D&QR<$MI6n1?nHpb*0z?YBTH~pvC}+cY~`co!de0))b5A(i7mA&@i&V9m4c6
zJFWrC4$hX_{B^)51Y?a}F~SG9g5v`(8f^WL3UG%t@%Lao<Fwen-(YQC&2lhu;<Rdc
zJwFz947fq)$%V(jPn~3b`Za(4p!67v)0hXWhJ44<MQQ8Byk)$T at C#O=ev=bC6-R;%
zz-e4pMKz{<ei$4M-m@<RGNJ{9w;Z}Y;VviVNO&jtm!x;n!okIoqe1Qudp<+X$2fS8
zTu*oy`b9bX9V>AknV2`{Y4D}p;~mpCh*IHGR!cj8EvgYFFa5pl1lEIc&LsFozXLA<
z{9MQ}RXue{J8J1b at I2{|E5)=vEX%5Gm0HV}NCPJ2er_}M9-ZqpR*-muydFMC)D-|<
zFY1}bgX=uE+qS3ob3Jl3aUbAW0Ppx&q6dN#1?Qr_m9|P>?i|<pRapDVO)h#Ra(@w@
z at oWaCKnl1GbSgJ=G{mBDY!>#fz%z7dW|}iUyds?ccOUoQoZFr(_~ib*-!a_Zy90%+
zZ<P2vfd?zs6vt<nMk7}}(2<I~ro~;px0>@D)u~j_a4rIB+k%tXCB%D=rEW9rrejPu
zbxZ*MbQ-mDW=Bfhh<DsRYB${lSHVEoSGn%zeph)m?TSi at +>zT)@}RiyN{0yl1M2wL
z1uwv#2%jSG5e;+&FugHYGcMP at -?>FK*cw=U=@B{Bs>|Sd%Bj8-(hkgKEd2PJ!5@=`
z_nfbuUX-R$p})XOThm;W)+u4kRS&ckh*957vqvPyS|X{wguZ at ApvU`y|6R9&%q=`)
zrs{Wg`vu{RHig3<b+sXV&wlV6%`aZA>`goz^}w^s?v2^fCfzfohcFi!aO{(ixkJ%W
z>KWCFQeS+XifvEyhRTnvTT&|a#lO79f!vpWK(A@}Y%kW>)EM7A{A{19_EzhfTAx7A
zX%I@}Ul{Y%9KlS at WaO{7!KDNKNaR8Oh1l~-tdYNJ&Tt~)yr;k;g6l40 at 7EaTo}N)v
zrC;Clu_YVZb>KacW4pGgie64#AaP2{IURmI-3-(gW|Hj^l0WzgeMszfoiN=N%1YJ9
zFNq{=AqTP*xcs--c2jI?UnE%FagbM=(Z+3De>}wqE_cl=s{xO>%+L{;s&yMGROg3}
z?{baDxQP0^*?VT1WK?6?7j*n5oeX2n^B5|%zaRW4<h3Xnj_Fi6_R2zDgI)M~tzx^^
za>&%ZM7hYxOfoeQ9OsCBbb)@xT6YS1F59-e#pe=&%U-T>A3Vkhug*t4wu-uZ&}j0|
zPor)RB^@BY>4}h)Jz`*&jYq&unxbECnX6xCc|gDRxPp;kz5hk*22Vr~^*!{xQ6bit
z^aTTuo98g6higp-lUmcrFUJ^MtpIKh_C)nqwC at Gx>MU%H>`)70BhC^fWG>0C0oPhQ
zxXf4%vY>k$l;Hc$sagr0b}%}E;E1Tm!+uhS5S+|K4Uz!iax$M5+~p_1zLlx}OQ=L{
z)nf2lE!JcLS9xaGrVTL*e#ZPKc__apIgpolT)_IzbFL8m4Z6n$#Ak-gitXU>*#?|L
zX&*3zc0RAGXUnGnE=q+t<3s)lFlA(pVD0kaUHv&c{y3ZNVc4(gD$ey~Zu1eWIe$N%
zu?g#G7KyciKOwUQxv;}IM67=wF%$TWH`FDRvfLTRiU}6WR!L6=FN96o4X%jJ$Pcve
zLzXt7Zf+ZNkXGSJTP5(Ll@@U8UDXn9P~tBzT|Bsdo0pemt6+4*4`J#uKLfr^H^Dc;
ze{EF1g#T`mxUyvl(e<e|PPpo>U at dAgB$PovLjL+B$WHSAed=i;?mw6|8t;gQS`YG?
z8K`jqnbp$cV&m;cE&&_1Avz2?VW(}sW!1ScG^w>Zdi#Y)2I>8y%g&icm!1_)vhBaR
z%C^64g{`J9Pj!>ODChLSPdHv)rtK4Ek*%6B+G=Qx>aPaO?*}#_cV|P3uTP;oLt_2A
z`&7U;YBnGyPRA#5JmO^>H+<9{@my6m+5bs}>Q~&?SKy|ggb8@(kU@=#+kJ>(4Y{(C
zJ*ai=+ZL$;rUm&tX9-SHLqo=6-C%LLFTh6kfv at g@bydjWXg<+lkDNgqi{QjoiV`qJ
zQ{-Rczq5z~9*z!Ub>)?;u8e%9=%1ur<lK_ at sN3Lev03?@FI#e7wx^Gu_V|OOUZ5Q7
z+~&Y~)N;G+%p%{xqnQ#>tUaM}O+Ntc!_BQ7*VEP>vKVLnNyni+-)5}+hWwM$vp5|@
z at 8rHl^s_zj!W_f_i=e;XPcSaJ`NXGv^+U)?evAEBKD7gR(HB_z&rSRdAuZ6EkHlx=
zSrSUYt9s-d{me`sWYV?;^5fSTG4#~wrfqaY=uhCUbd`LYhn$mflVlk)daM6Q1tlli
zj`}if`#mp^xG>~XKvNy9oOk7LxXB$qX92-qziQmk98{A9%+wMbN8`O0!VY>HG5${A
zH}9(c%<WI^Zy0R~vc$dT5yP+W`Tmwlrd at q1Zn@Z1tuQfokKW`nalQpMaUtS0J;JOx
z4;m}PzGUzpCATB4l&PVOM*jiCHo=#%V|sLiSk3nNWW>qOs+{mMG=R at _>d3pf2>dqe
zJiYkn!@9-L^(7%`h&>S=<^-Y>W1MHGZKO6jaGZTL`%EW!GR>On_|D=Vk2m|Szsq7y
z3+|l<{`3KU0rH1mlp<Fh>pMB-gW+TFzU%RxOa9k;4i7{v>5=ywPTunvoAx5!Gkn%e
z`2Tp%;qtu5W!jzw19&x!FYi5-R^}CD>3!2>&ED`IfhSFSZVii94#!wnGcp!-;{6lu
z`4l{h;tlXx496+DCzAD$#BSb;5ZvP0+53*Ro@|%Nzb0|dV;gvnV|>)Z55H8Dtp?U~
z!-pcout at y2QSojL;w6N`0sImeZz7C0)cwO)A-M$6{DRQ0A`5e!h*^&%dM{#ElywR6
zX!V6<U2+aZ+5-lUwQ-D}5A$Dk%^SZ8u?8D&spPM&@5ir%z0xDNC2<>PsoL0k+aetg
zEbC=ld#O>Z`UCggf$#0c>8h*n?fo+zxDnvRecemhd+inh^UVJCBL1odRyr0oPb}8%
z4CHf0X!zuuXuh at 1d8Vo=|2TPGj?<zY<q}*+Oh-Xvyyai|HCX2(roLn}0y~{i_~*#D
zxq!UTJ7lhtxLITYV#v=D*@iLG3Hg44<AGhg!Kl=T_yw$wp=+d{pTzhW>GO9#8fohn
zv{i>(Qa3Y+yo=kd`~uXcP~7$k34h`wIebj06{I-BL7heyzgF6BT{vEn0{!jfui;yB
z5kJs)8QSe5eH3_Figgoxmsy7QLfU(`9Xu&`XBdYUVqRpFxEAaj^844?W}ioW?|%Mu
z2%H70u)iL5z!5Tr$TI*Jk7t5xVe7 at rM$D8G7q%<cbyzIDg`9Ng$LODx5-#*piSQ#9
zbMG_)>z0DrFT*vA$k=ZV5~Y(I7!vP<UdZA*z-N~p=WaZ3rVaM4vRXm)ite*ja>Kxb
zvjzS6Gvd8#?0y^F4Oa|l$YoQ=dm9vH-|e(pzFmr)-rH&KVS5Ym`hs0lO!BBM%*WV!
zJy}6?Zpfa;2_9bOOisi1hcP~Xg50jb_a{-O;z^RL&>Up=LF^T!${YDNCHQS&Casy_
zOHPMv6eRYdt!i^Z*P(;^s84t~w%cu_O`fgCvd-3XH3Q%8xAo8kww{%nZ9QAbzDcSd
zfUm4aehF;Faqwl5H3ajnf^dQY!&0F-nXHuFiWaCB#?L2y=`}4v33ML1Ie2WP)RwH2
zHwrUFZZR8w96L_51o|dwKsk<SjzN#;Cu2zn-&*y6)RnAMzb{mZ-NpjrQ9f$hCqr)<
zXVw=&FY>ZJvRLpFq(VRWsta4-aaK?U+SeTPFmmuoJ_B at kU@d?x$_GcvCW0&CT@%Ee
zT7NZt`^z+NWjj-CzOC?2^etBb6ZTgHa^E1EiHt7nrf15(MBjV{9ps8<I at KF|U(`HO
zQ|93Q(${$GvvZ9j<ND`(GqscT$4v|?!<wjwz8^71H|kX=y9VQz%{_+oKYip_E5Txd
zlm7zhmh33f3%(`Cuhs!eoxgn-i3RAVN6iyqU1Ha*b;IrQ7ZF at 7aIyPfr^oSri_cbp
zOOx|5?uSe6CrYjw)vEmY1b*Wkpw|6Xm52W#WU>b_;(f4zRs*Y|RPTo^wVPm1|Lv<2
zyMaCTL}dorLesR)#=T49<I}~)<aEguDdCa)P`xXx0J`NK<mulI^n?-&$u->L4yjwP
zLgh&wj&XgFoEGP%LeFVw*gtyl(vDW~&nLwT&yDsp<T6!a_s!hvz-6agD)-b!B^m2r
zS3{0&nk4q}RY^{8-h2sp8_15GxKpoz*U2WhEWHWeWkuWq_?DN7y{=f(?SuQbhoeSc
z`I`%)lIUWUbFX-N1lsLj+giZJVk;URCOAmg5xekQm!-c$udaw+iZ+(O&iEf~peE2r
z8_?NtKO4SaV>A`DQwy<v*Y<y@##k1|d0|I3A-}64S!qq%nQ1CyR%nWK2C>&7-tQ7z
zwyN!CtS-IG+Hgx|^=!>T++$c5`o^;Ian|1~I6uQDaO4oY8u%B*1<C2nL7`ttodgpc
zeqMDqSsCYPG_Rq^*lRRv-XIuj%2iU}4{m<k|KjL~rpmJW;HML?ddq&Dftoa3hG)vb
ze8_<wKg_o$##qf0Y?8Xn(KX<2ZuaTFm5ir9Q1z3X5$9*3{=+9t4B9gjj(@>4PCYn%
z-W`u?O}fpg!}lEo!y0-Tb{_mC`f_Y3G2!h#PGquiB4ov=83T{Y#RI at T4vGp@=h4=z
z_=C0 at _<_hg`I6WsPWS+P`*3~`{KuGc!K)-r;MjX%*M=n{R|2(gFNi)@O*2Ptn;<la
z?*iLJ at X-U&Jji>3B~QV*yQRO8=fZQs&O^?&jB`XdU)(Ra44j!fq&)s0aQU0bJ}Ebu
z=zJ?QXQq9t8V#OCmoXH0g!>4Nk{u7?<Q(<W0=2byF8B;|G7YVf at qE-S`X5W~&96<o
z$N8(ktqUImzZbeUAG*1b=;m+QBAu*meiOR+Az@@*PE<r*X4E|7V?C$pHjk#RAN+(W
zfNs8jXNGP6)*M?+Rj$f`9Gp&IxG$N<Pq~PDjTOmj?`(P_z}vcf%%kSfuR_<Kf;_e5
zO9gQ at AAGw*D;I-zFTvE*8ZTTZXlbpar^b+aNq5li9q_Fmc_dvEYFsq+7#S0s)kJ>v
ze>R+_h1_?vL3}Q4z$ph!C3Rn6Yw<%&RijM<r;`3PU`aAH6v;?EXz0w)rPwvzP1Zxs
zw}Mgd4KLQrFh-Kvve04Y19z8Mb4}266F8@(&JoPrT}}elx1Tg`V0~PJ=V7svBu^Xp
zxyVs&4vIV_g|4keEUCl`yki4&>R7VI!EZ5$Iwfb!2}5TEkH&a~$+n(0#QR+fft6c;
zbz~{lsW*}T;+Z%Tx!uPaVs$}Jq?o+S3i&5OB{e881Ujn3FLJ0=#MjK)kz&$M(^GNX
z7U<@Xzk>6`4j}kR(>D0YOb%llVz+z1C$2du_*429 at CCQ8%-2*h3Eb6BBxzz6wS)h#
zmh-hFT>b at YI5l+sZ^>MR&2ogq)rido-NFTV{5)*n3XJoC=<%#Av=scocT%h>kDv+l
zv9sA)VE2xNZKPR2@{)AFN&8_pEkzCr@)(JIb>T;HK5Msv=b+L2)Jc+Sa2U8A{ciX%
z*05uAmLNjnK^`>e|1;1lA2o(sI~eGDq}J5HIt|Go$)YmkHNjz;3Q;D<20jNp!QKpM
zH0gpz(I0O38$QB5;5LIJ!O2fB at wf-lCf-{fj_GBwo-7U-aoTT4E!&V;z;rYa&OVlV
zbN#TNLBCs5PjWdhwuah}*TDTAeDFpSbW79~Q at k=-;KB6<3AYFQ<3F+YbN1f-^dBbY
zNu30HA6)eRbRWbn9DaWIi|e32{|bHmT4e&To(VO`$F%nGzea34M|~DJ<Dpu`$wAaj
z$NL!ecZ7)X-u-}$Up`!8xOYPX at OFYDezvN)ddsZA$SK-^$jRDUW<zNYuqedW6epC}
z>~xaNzB0jPw-7z%Pt^c?biZo(yrV~xOi2rXPoO7o?NZcV)Bi?%CgU0&Py!ztUg9PE
znaoMx0p{>-qTh;^=CHM)?jZI))mUfq`AB>J6b~kMVfz@)uS9G}2%kvwQ2)q!@a4h;
z)J&?!elf`>)&Z{~9z;$;w>kO^_)oU?f(z}=!ex|h<oKhko)FFn7v2wFuD|JHBIh0$
zJ!=rpGlb`2s?r>Oh;MX*6C3u(#)1V|#a>Yg$&>Z36Q&2$2iRa+OG><`bJ=G$07q*?
z-)^Q*V}sP8+W28S^014QB?ZP<aOszr+KKK&IK&>DC;gqjr^JhEHd!W&a`6=-Hq!l?
zXDpMd$eI=w9fCSTZ=*jXYwc0S+B+MIh>RP30so_hxRgoGviW+mZ9Z_;4(oPrb9};e
zvpw*MH3<0cftL+F#QfRD#seD*h2J*&(XYzC;N(yJQV?tM>D~q&SHTsvW{kc@@VXo4
z5c}To3EL**9gVt}obcHm0b;%UqW{(wFs!T};s`x+W)JSu3$ApZ^~n&EQ8D!gwl>O>
znx+gb=5)j(v;A!(b`TZyl&slLIu7{_dqqe15Ao`b&OyCn5+m%#XNdD7{8v)Uqbz(>
z_`XD_0{39{+(Fn7IrwC<Hus+@$o2gFvop7N86D*lG=T at or*e?|3G%zqyqST`^c><}
zyJ+P&JN!n-o5);4 at P_}lya}=%KX`%7n}ALa`7 at F?ai<rU{0cq#QghnR-dV{!uXfB;
zf|o4P=Cjbi`9^5(U_70TOwkgb+!^5_jL(IL*UVAb**Ucs?<|GPE9qatL|_ovyp)z-
z*_^Ee=x at 7|?vgo8=X2_XDI_NVzOHc0_k)GsN)~B?f$O^sPXD03yHEWV(t-O3SBtA-
zsUPPm)s6r=WJVxm$NcU5J9ndi&E4?17OE~{j$@wJ+(b^*!^q|P6?uS8_}GwRq556$
zEw+is-AFL?2}wOG at asdC_?!>jy9d<}kz4VZBflX7 at 7x9F8uY06o6u<vH2d6p$a%Nn
z|GUkYW4mDM4Ci<Bg`m$m?&TBAatj<?J&2W80XJx0V2|^S<P#JovpED-yC;2#djWDf
z7NyZeGt=V=5yuRiUWj}Hd7Qp0AM0R#$i(TXh{-0J?7Cxn?7EX=-9)YO#WfBV+y9_A
z-&leCp^t$fh5yYnlW at PhxgD4rFR@{`GsOAA^kiqUJdR*|e#P2ZIgGXUcUHTDf({Bz
z&;|D_0?xSRR05aSI?4v%)2c{r$vjRRYWK}F#DbsL&GA}JO!YN>o_)P2>s%mWXTZUR
zm_!-y4~44+;5R}|Kw{HS{erifgRag57VCN9|6_d^W#Ey-+$vipxJA|x>9y%fUQ at i1
za5S+0zaxlaabXRjxeKl#=Y1J;50P+rYtI8&OWoQPs2v0D3+T>12bWzh2Ze`6?3O9O
z6@**A`W?RWkVCM8*>ze3j83PW-gn%_SV<l;WMPx7r)u80Kza;(wh4P0%?Vb*kM at Hw
z2R0}0^(&F{zZ1tfiaBn<+prHa-(-k=2zmawIr9y2>>sEJL$<e3UkdpGACm9D0ER38
zrwH;1gSHBD#6EN86h@$jPW%p=UlSZ~QR-x6)nC$+z%5>eOhtVv$g~U4PbS#xERW>B
zSl>ZV=_cIgVfhy+VH)T&ueCNFFx-c0>CJ`@;rHU$a4&OHU`Jjd&$AW%cA)qR5#%1~
zs4t0^#mu4Qs{I1sOgyQiPY1W-_*ui(O6uc3%4wrxTboh8_l6FA;Q%M8qX)XdbzHlE
zL*hCmxLyLbIg8RmZ$xIp{_??JkOzOkfAF7(6-T|t(~iQHKj|ae>x%b$$x6uoEX?PM
zrNgo33e?I`+q&)|htaqj^6o&%TC73tlye*#@FgUc13y4%FWYyp*GbMv;Zu^k$?5QY
zZGilyv947}#}3>0Vz)4pwXxjEO3g{M^|Gju=xXXO_)c4oH;dTpF*?$&;C;x(y>kty
z80x`0t7SQ==V{V~&uMZYBf5Coh}}aM2v at Q9`=5S<3&U+2P9!TiHoiS(HQH)FD$%|2
zKl%+^o3M|bHf=-Sy~0H<oTC%9(PNP>GDX_&8Eu;1kXEHF&Q=nCl#LEkJxX*v%;V&l
z1)7RRbK38sW$d$!_%9HHfNuNf32aC7s|m$Y$oKVck^Cjj1<f0%r{_lQ!5w`1_`Rp>
z4n<Z!ZLs;gSf4y{3eU5_71Cbt4*cdLIZR?;C*FWhLY$BMCEp??<j?Z|Eq at lIXi|Y0
z_RLg at 4Z@UJUh3=;PjY)FFoM$C3x at N_;OjsRuSLp43ou?!62A%VX}9zWkuxqWkuz@{
z6()#XBDuVgNhn)QbX{U=hI~ia7qp3?D-=FTeskML@{jz)gYf%e-k35XbF{yL8-RTO
z7uF94be(0$k359m3ixJzFlW9-_HDxF1#>2utEL02oJZZ-tMjnNkU4OH<S=a}T(MhF
zlkkvPF+`3tko!9vfc=lkzX3j_zgBU#AML-GoK41$u^z{~#vT(&bmwEGut`58Sob3j
zz!sg(w)qia++^Q- at tJY`=EbFq`DvXixl6nST&?XS28A{nF at 6nb_dCccV2s3@g`wb+
z_*Gg*+Wz!O)v07~M(2MZ9*7piIG}HO%n94EPQG#?nz!A@<lL)$(dlbdOdb&I07okw
z2U}*l%UA;2atmUblhglLpjdj#W1#v<P;=_}g!g>3N_9Os2RN53 at j&B&m9GJh3Avts
zg<Q*213R5uvr|04iO>{YHE at ff1)Q at PVR&zO&_xi_qAP5-eFTGaLUqNQ at T$wacuGIv
zj6r<zWNQX&!<jJ-l5f<DcsWgu`+?-8Zp_BI^euE(llke}<k`&!_nUU}BzaHsa`K+#
z71=5s8^AUDOz8KK>A7veg|^D8h=o-t3vUW1B5yU;REr$J0dwq>2L6MHdF3IFrY!6c
zzQD%5e!@QY-yG<xMmW%O@%|!6UMUAT!}(VQaai|ckXtFJC7G^mW-&GusteGIl<@07
z&)pz1%HYqq9~`J-Z9|r7;QnUBlp<zvpAmc at 8&;|&;5}_1>k4GR5+T8hxlxA!y3g3l
zSckGvXTVHf9BJ1rh(jz+j$Gk%=&is6A>T`lc;G7W67Z$ST70xZd9BebpNjQzjWJgJ
zCt}yNz|ZwV4vpaF=E+cRP!nxv_FFK$#5*^V)6i(na-$v-!BXYGzF~7#F@~h at 4Tt)t
z5ue4}r^Rz5-2|(I+;!!>eK<Z7^=>fN=Pstp39p^;Y22Gp at PmKfL4^tNOTC@=+UP at +
zm);G1$(`p#-5-0L%(l(7LG?3lK5PGsAwEJ8IGDJY)9}e6CtmE1mx~Fe*^!(kbqR<c
z>J!MPPgHi^GLElS+%<@M8!MK>rz_K(B;RpQV}*%YaKN;dS7qV&eaXlR966WxWA<U}
zD$sANKN|PKmGr{~SuRqF!ObNm`7Z=ByEr)+F}>uNm53Jz<Fmo%wFSPzV#2K;+{D^m
z3fSDUxRvPhmEx3xhnS at 23&6z|TJ55O#F+=xOwuo_x#n}L=`@u`mtVE at t4nhnf)#}`
z>cDq_@%gM}CGw6_ONNZ$bKMPwJ;3#c95%Xbx4E)Y`+>{5vaihA17D5Lecam6Co9Y)
zIVX6w!|-oAj`~c_;C!r&fv6j#G+l&zm<s$UbVAhrl at Yn{eJ*qv at VrWU#Q`y|!0zq<
zhxoTdKXJWH*51-Z;|!|rz-96d+JYR^ZGxO2GR8ambqQi<Ex*84LO)?0OR_L^8>{fi
zbMfGl(rtsz<k#$dHdxY&Tn{@xmxG)^(?zlt)@?*wf1X;4=gV(QQ_d9aQ=K{rUz>P6
zVj3HyRwMEZnG%u%0Uzj6)S?5I4X_&j;xuD_5zj50$8Ae_1bK)X<sEpYYK(oK>q*QV
zMd_~3=1_&k4%mO=b-l9>Yx3e!YEIBa>Z8Ep{>W9((*+%fUmCtXmv1I{bsy;ou2z3P
z@^FhVj=z`wj_2&gI9(~*t!aV}dL?+*&luB+z4>O~-N5G&co?`(;9;2(3BNIIE>DEm
z+BC6b0y!t1*unR!pTzeKt;>JwuaHX-W7Y#>g!@}ao}ao1yx>YkNnOAgJdArK{LEP#
zH3$5-y6mGTb$V=HXR$Hk!TmveE2rRFQNj*#BhDtPT?n6wyY*&Fo>YNreFWdZEy*?d
zkm|4GOxTY#upbY?PbRndR?2`|Rfz{h`-pEx5+ZDzK4ccY=2taUS4jA*@lK0L`?V?H
zgHX0QAIQq{@)lJws#n09CPhD&Nba6fnz}`E!KJ+!xYWdh`<SEv at 3ai)S<g57m}&SQ
zIu3cK)0KE%8xFdeq!xSGXQB1l$!qI#KhHglydU8cS*^c5kd-uaPGaf~HRRqEDk1w)
z4|X$>^>$wRf{Vxn6vyk~1Cqf%&~3Wan!&#Xf8JHWbjZmx)O}uhu$@U7W7kAYJ{uO1
z>wJF92i;7PYM><I1N^UITuRgRk~H8jk~F&nt5hyg`W(i%2;-5|^jI4661cTHkiV_9
z%mdynsnbiRf;V|iRaM<a#Q924pSz>Q4gwzJctO|0aZGBn_u&}$=+c&H2rmfUWdves
zC9wVAk0x^&_GKm+E5|*K4Ifl8N%~3f_g<jux_Zj?=h;vz<_}My3I1^4bCPgh66o%v
z9=!pznSG|NqyIDwU7L#fR4z^(#{YE0P&*OhyTl(;=+EX(h0i8-&mLWSv-jygq=UiA
zwF5k0)gKPGBEM3jI=UP6jd)#7Ivtpi16GMAoy at f@Ud)3Ua3wRC=O^LU9ir2yi{Nn^
zV1M5S8&?ZG_!icpABJ-rcGa-;{(i^)OQNOVP0!JMO6sy=es6;ezla*R-qmSQhc;!C
zXTW&a0y!c=?F<}``>rJILXSCt`Uz&b1aUln;MSkOm?+|TEn}&cI)mwGNs*;bbwZt*
zI~#gJhH-zG8$O|bez1>`sE%6S6>81%b-&U%h~p$u7ZLyaSer)LuvXJ+3WsnG!(?b;
z!rZwBgc>sMfpx#n|4wcB_E+-FWGrI8s>RN<E5Ctl?AEFzf8jna{O5I1XVeE>wh!a@
z`r&k{HFvh^E-)#*_zZDIgJWg1DVQ7sE}4&*6x>&m>ejjart9z}Upl(i<d`7HMXhJk
z<!Q?i7tUNe5GBJqNK|>WN;2LSx=K8#y}5<#Lv8XLjOnB?Uc~>0z^6lM$&z;1cbl82
zd4|8Lkckd2#j}?lVv<J2UH<qW`WZ6z^pp7is(pv>n~6g8lSFd(U at +$RGgvIh-?g^M
zT9hBl5lhdC4AKsfUfKqqzCm2VKVRE#sl_-T`6%z8PCVk3`DX|>)p+xCf<50FXvaGI
zAl9jW7LoYti^R8$wjlfRgQQm%q>EkCmB<%H9BV<^Qa8yL24=#Sd`9dB51m1j66dri
zs4L0sY at 2$v%{SRLr=iV9**4!8X>&T8)A9eQ&6Kn7V at Gs?2Yzusbkc!pwaL${E at OuA
zT2jaX)1mlO;2xK0>IGx`k%L0w9-)JOudm_b+A(flV321VISI9>g0<j=3i%W{0>|~^
z)>b6W(lVcEs0PU_PMt7&3Hffv_j;ks-b^RN??xSRU>DJ6$8qn#QaOMP%g6j?z)ym9
zD?Li;PJAZ$55C_NjvF!cRVj}mzukyDRg$}MyvxNs!1F<$J3->>Mg!VNAnVbaukbY(
z8!})R;e(@7!L_A$^Og{K)s2en53>6*P}4q})O#PF!=LdK1HbK%M2`Fe1LdIMukm!S
z*q|`17Y7pMb|2HO8o*jfd=>|aanJhTrx?MSct$8C=QiP7k`p+76<Kq90V?=g5$`AU
zhO)^1uD|yiC&B(ZPIzevXBByFvYwA$Daum)jQEmu1SilW%vx{(JdS-46`eb1GdOTF
z7o5TG-jUz7#<Yw*BK-mvYMT;%rIV<ww>l-$x_Zr**5))B?{Q<x0tWrp$3#-~g0Hdm
z!dG2q_y)Kl)m>e!>H&Nni<6CO2d*~SprfV>--6$%9Q_P`{4l0&{EFzG$o)y(xGxu;
zZ6&FblHUZsc5ElGXO`pnt<s;KKr9gZ)(KZGX#(c|5E(Pm_CgnnAY&`^N$p#C<xwff
zU#~_z@~qJO$Vl+?DPDw)xo4s<ll|?)Z`d_^h9bqlrWkZ%QFHl$k}bTWkp=z(JQ=SL
zzvJ1u9ZKL(K47o67CLJMcvx1kc>8p2y)F)Vsh8;Sx{rZVt;#>v^f5hQffM~xuQegR
z26|ncLWh_d_BH+N^3VMF*U-$Wo%!F7i!_ffbFJ6pc`d0qLxw~1JdqXt=@z|oi1b6G
zXToa-$5LKkuoqdz#td1;&d|?FH)4*546!-5V`sW7pDc1&_Db=g at CkImxBEHz`jRD#
z<jz~><{w+&#Jd>y=8(xvVvk%oVxlsRIB2d->VS{Ky at KHLpsQSFYh!*ur_MeUTx;6L
zL;|BaPLqvsL~N#y`2{gA!mmVh%4y*GAUKo`T`YM=#}k+Z82ihBJuQJB@*}dPzJq<O
zL=B1I|G0nu_p85><e8Niguua&m?qIXon@>K$>+|-8b*Fk8vgBSft_<)ZNoe`!unH!
zOWdCU*XM5^o*x*m at MD(2Ur~4l at h~R%N3y at h7c3)NE5WIi0LQf%`PEy<v5<`f2jhe-
z_>vG<e&nf=XL|>E%4GX8=?BmIg|A?qCip3r{$_0FcrfqWv}|p$C5+?ZrfxFCq3$Xj
z0ev)GlP89r$wd5H&y1#sp83sXZ7In=q|OkGD>VRlG}(5Ny9N5gam4G%JuEI8d@>st
zz6p7!cyc3OC`W8=0$b1g2U#2ROkjN2+CS;YdzcA6)B)h35^H}1A0~?@B5Ov92$-#O
z!sEAP?d;424r4m;D`AeDR$XG{(`k-aNFyI95^=BDq(8Qy-wJQhsRSccHio>1K9Vnz
zirSWnvIoh0Ju0V1c_dUnYKM#^`>$euv=K5R2JggyIa<$h|Fpor;1;JNcil`QzCC_D
ze9(-T<$zPcFH&|bSuP!#jhtsDOZ1><ncNPHC6NKZ4}L>rG#f`8zDIqbC`4b`l|O!E
z)enxKgU6twHk+JPLgW=IyS6beP;t6&%`U7rVY*oP$70}@BzjJqkx>!8`>;fPB2!Yp
ziIeE56rm(kAIZ}WSQ4n8BzoRQ5rw%!t$)OX376)%jJ{l#uo&lgdE(O<IPcugLzc{+
zhuY5!=d4FlE%p-|5VyH+59Z9=iHWIgfn_#rAL?(^TTXoDYHj)LZX)Urvi(jI>@Z at N
zhtQrw6~l5T=Ebaf5*%tWdi!oVo78blc1P!P;?OtiM97IEG73Is5An0-cEc~fhQyZe
z>?+KkpQVg34SwhZvJYEXl*D*Q^(CHp6_II=KL_rynIs2C0{fh*Uq3g`9VPQ`gj{mh
zxlKWyL~4lWyRhd7m)a^3VuMUXUMFu^XLpfeDL5xg4V6;^eaMgOfP6ZPc2`S^mtOHG
zs2id=EKXMqf5PkVRs4o|7K-ETBsQAct#ab~P;NKYNwVJkJcs1h+eJz2ICcWNXuT)f
z_!aPHlRhlrJx=gF!}$<gJM3R at S3EddMDpVklI_G#<pQ51Y_`j&@rC&yxgM8D_RSq?
zOxsq`xc6+91b9^;d>)_Q0bfZ0)}AcRZ}_iWSi`l at Ur}wam)rE2*6*)o`qv9i=G9v?
zGxX%SsrRt%v`gF#z at J&fH3VNm<lrgGq}{&`bFmXV9<b+WOPz;f$y#hmC9=k0B(ZDh
z;B-0SsHvQW>jtV9^I<N0l9k3o+(OdFI=y9Dem8dq-luG$LED1o5}?k=&*GKPeG?!H
z6W7A$5c5No#59CBtUEsA_$(%6dle(gXrtwpoB7>^C$9DYn<^#uZtHR+1IHO*>+&tJ
z<@g{s34SlQphd};_arb0uzyqMcnlK*CIv5!qP7 at EbqIH0?jh$8{9``ZnS0j^=+NG`
z)_zrD>WRu4ZliJU88usPIze9;PcQ(-m!7<?p!!h98rRGFmbYO0NhV|Q73fS2VR6=u
zCDJh!*A1q=>uS at TC#0s6;E!y_y`-K>nCUBuc+bwLu--neaz;{GrY^w|bR97#;Q!7;
z4h_!*hUkCN%LK>jNif}sd_sF2oKJm6^`<N9vd)buJCHl{gc9v!kbXtHDhK%GgL!X7
zrLwYYxQ(6L_cIw$gv*J%ukYC!&h644!AT#X0|o~?1}=iX^_(=3y6qE0Iix?S!N$F9
zTgm$%`cS?LT(-5+yWlUy`T;)!#!t;m at MQ08J0;A5%@<LKdY3xzj84Y<1_lB#-RKFZ
zqZ~0ZZq?(12+k8+*L~2-<A_fRW92&d9N{xpw+Pb<HL%y}NAB_be;lg}3Fjc+2kZZL
z)F9&j at RR8jWPDgv<0bG-xsBz((8-eBhsCJdnOgWSI+ff%#&<Q#pM*7lswXm$<$fY_
zXw at +O7&d1la)RJT<nGo1$2sAO<Z4JAcu0$@Ecs3T1(7yvzn6brVmnvIq*?1u!<UNw
z`++|bv7|c0*iM%@Nx#t_bSdaeY5 at IngGSC|{*PF%QRDdYmmzD?kvqTl>~hR=7xJ<C
ziM}@Sj6d*;t+mMYYCt<IFAe+`^)4;-hegA63I9O<9FpFpD*}eFmO1%rko&v at eV)oO
z3g=RVxJRO^eGWc$FW%8g+*fl+n!Luc?<<!jY%<YNfFm)Tpd(a*5Ce4Na`Yc`z>)sb
zGgD3Vu%ix<eu1rAH*!zM1gJ%d_oK9K>@=N1emA&XZ&pVW?j}8vH3I9S=yTu(_!f*4
z`BNg{7s&PQS5H73gY2Jx{m=isUq<#L_U%SaR4h0g8#!X at 9i0Dw=>m9Mk>jME5Klu#
z(jztmEViTY at zTS7)b9k>8k=IePDj8Oy(I6ks6_h-_^j5%rsBUzraC&pTIVDA-{f7c
zMeeckDY@{=rzQwr#I?X52p=wZ>w$Yb!ih}Cw`An^H@(dymUzJdeiz)ZLn;5DnBvU=
z$gw`VDfe^g*@R+MU|bUV(<$v`<@>VjJ&fx36-GY3a8X8}ZNV=bJDHb=bypg~;WKKa
zo}rIelJmQpR?!=_?}g9c8l9Paj@<XNISU6F=nS;Qe*kui%MgJaT??K;Vn5-*GsI<W
zchkT^(-E3wt23<)zy8nXc;m^-!mYL(*kR4U>|kBcM_Qi)em#w{=Y&5{fOXMM at a)J*
zKIu_JZn~;*1eq7_3W3ZxkWx#=Ubd?$T}P4ilW;hWtW}qI_ns-M>m;+{sY68t@$E*#
z)Gwlck~qjZIDI8z2g~JokX!YUQQ8g<<kgG?HoH&W+01-qvpP~Or>dhHI*Jr3H<4|S
zHNB8$cE~f^J$VMX)LT at ba{Lc@*8AV&nMIxlZZZ=YPrzW*kori-O+u|5%^`f>C5UA8
z&d(8VXtd7bzK+kE;AeQFPVv%e!Bp7TqguB0KaKnZfq$I#p{UK~nYuo_v#O$0 at M0B%
zXKZ at 2-+_HyuW(;f1%|jGJ7b%J7OSa9*qb|C3e$i{jD89j=SvW^Xt`!f2I_-<%uHEm
zJ^V0rjG088Gl%O=fUB(y at 30NAflgN;HQ-932Eq!o?&(_S@#Nhatj!+O=@z93axKQ~
zSL2tIxoO>6ttHOtjY4HBq0HLtSrfG->;vsxW-My{X{o=0lda8anf2%u%y+D>7Tu$x
zyc*-$Azl{I+xCF>|JxR09LBPY%1oH8n#%;@yh!RC|0j&|Q7!f#R*es$zO~lbaX#!p
z+&gSctX0q(kfXiFM~C9`5T5_c1Mt1adlA4E4Rfe}8NdB~=tGmmQ;L=12 at Q(ZTA|-B
zPyQbDgVsSmb&6LF|M%7#$;XEO^Uf2i at gHgwy)-+ydH6rq7IE(Iaj%smpBVnnJwv=<
z<iFtL3&a0;j)^x8pS$&T^7-Na9EZf4M~>T>d>Q|t4${DHq;3($Kt1%L8=OZFr%4c$
zYhHoxf9}Y34kv;A4SrUt5 at U4kDIs?N+c~FVu`P;`8VwE2OjZD5xiw>ehj|DeA=U;R
zJ~WA|(z}-oApd^|*q%>}I;qFFp|vM3jq>8U6}pI+I=Y-|(}}kiGT_d0WyiQn(h*|=
zZi$V#^JlxGC&#>sIP_48*58A;l^eOWKcc4So!ob$sAp44T}(>+0O2+h()cbb?PkQK
z?TkL6p7M)n64U}Wi+!#+Cg5uWIs~=$ZH!Xm2i at I4>*dv?wikV<^c<5$Icg=V`!zqP
zuS&AfPMW|g$twMoR$!lkhxe#^F4)N93QJ1d(G#Gb)I%4V$#bE8rJH#G+Z267mDqF;
zx_mkF^kdDMwD`famGJ|vxs)%hyVM0<y&&!*@%^q)lh5S`4)kHZg-iKn!uLdEJ!EG6
z+FITsz5ThaNr9HBldnu{%e_?;9yrS)-s2axPwRPBA~;f%HpXp<-E#%}?sqp82G(1Q
zdya(}I6j_SeF?l0L|=!T2fpHIN{pJa+jME%3Z0#MP8V8210(h;xG7!c&D#gN=IwYI
zIYP6G5U)g?OnYCp&3+XzlaTM!6@)Jvc|tD#4pP4|`8JN79##R&_xrimNxt&Y{iS~i
zGi)VSmnEZ?Ma>^!73zwplt6E2`SH=Nl^k*1E68C=0eAM at l6?3L3P?Rre|uifbu)$h
zOkMEL?*`AdKALyV|BSlZFCBilom(77lgbMHl)y1OZ}%%c{qMX70c>1ex&|MuhnHT7
z582-PSUicTs5`p9tO9Fx_0jaQ&yF^inen}b#QB*+r4i=u$_B~rl>Z_%^;B+MdCbp<
zqgL||7H{OwD=8wjU_%1(i4w+kY8N%wX~p(#dO7AsyWQ8jf%oYt1#CMBb)YCc(Cgm`
zdw9IO9-JF-e&8F`E|W6;%hg at Q>065YJGb1ywFUx~TYbhX&GE2stG88JvcZ436`cBO
ziQoJ#u6rOXT<hMHj+jz<$%f}MUudwT)cz^xgWviyVC&ys>)~xe{%<*aa|fUDY3E^E
zRq9|)V_S_}_HRuNS3Ud>S=iQXzrutLKa(fb^c8B+t-tq7u2j<tnzXfp{++o_^Tkrv
z^-ijnNiCfu91kvzJ%P4>wDt9<``9mdo-2kto|&isZj$7<{ed>qvAxamruM<-J{LCX
zd_ggEGwtlJHEAUq=KezU&3zBHzD{zJNiDmBc{GS^A8O?}$y`FcZU^Sz8Ah+>YJM2*
zW7i_;rfWHM3-`DKF=8(I(cw^`PM#h1+h}lp0pr5*siv0nqNb7CC@<MS+Ki5XF1Tz<
zpGd~Li~Ica-+isBVN_*|R)u~MmHxs!iWtN!^bbdT8uOPM at QeDY{{_ at jimXD8eIV*Y
zt5H`DG>HmeF?jHo%_}a6j(~kISMy0?Vet@?K;6()Y`;M-mJGqKc2)4e<`ThUlzmiY
zX$NgWjldsTdnV^>E+OrX%51T_9>TFwc>fauj};g2Hi44>(9<PO!Kwh8|Aj3Z%&(A|
zj;5vJq>|oZyl0`xR^rMi>9v4EVWLs%@RM<mhNW43OO}>w7 at e`u4Zlmjf7<1EhdRLP
zZ|i!6K99Pv|0rQZi6u_IG*ct}g7u_FX6mKa$Uhal4sL>tgfEcDj7 at jKE@=lwsW$ea
zw%?uW?@@i%?^3;3yWXP*sV#mPR^Q5i#AD_^OP&6zEq8>gZ6zLA-T?1Io78i#q%SNs
z*XgHP+s-RcU4K4u)8^5aH*fK~sJV=I&k4Uw)Os{*9vq#$sh{@^WXg9DUySM6SUl>|
zmXhJ|uw at 8i%swh><G`4l+(3U-)5)^;R02(w)ps=@ah<=a7<I1l*P(vlYGK`R&G?Vm
ze5q~BYOeC=)ch!L8!)H~TtKHnN3>JlA|`Wrl(IQE<RMCIDM$PWJmjI6W4Tw7hbrYJ
zFZr(uyqbbOPTbe#{HcVaKroRbPE?qtGKr|y{XtXc(#ga9jTmDs at _{OlFE9~2EIEF5
zYL+gNy9+w)E$|EF2&Q*_1wU at xpR$&dQ-JGK7Z3MoG{@RhEVI^iVQpvq05`!|{tN%I
zV0u$wnPr?$EageokFoCdq+2^YNmW<#Z(6;cB&m}Mu;BYRZ_*-a&`(KyKzC6xJbQ!a
zJIK)l at P?YL4S&kic_T9a7t4wO*D!9D^)tb~P at iWp;%<(ZAGcP_t0ChyvYCuqQRZU}
zsJYI#0;yeTDLF1S*X*089HLK&oQFQ&j&o(;83<P$GL~~Kx_os7?Dn6)Gw?@I7SG4O
z#H|!*9|PWPdoz<lUB$RBWae^}u78-K1!MT!+=JV%q2 at J1_OWZB0oa5vGTzl!wGk!;
zc|t>uoTrXrUi2~=Q=cV`>#9wlyc5H$FSRaR+Xg<JTNWSHoqJua6SS#jA%5q&HUoT0
z+2Bf;#f4r3pRt$ww%Vhy>&j7sR&P}!W+-G*TE!pasD3xJ+hQEj(zDEF4pSUK>ot=D
z>a;)bj!=Hvos3NLDQz%09jHy_NX1q~<Q-+NEnnTwq_DDQ$RZ0I6s!vDx1gp1f0Oik
zI=e74J{P%P$lu{UOhrQOxF;28j%(9C=%tmpcdF*-f<o(ZT~+_k1?L`I?~THmcMZqn
z)?AoDn at e%bdIv8jYAM?9GwO_A(=(_o^l$3M_!N$~RvhUIF7cn0yI&<hUd=_|NIX at G
zDEC}j*N=2c!E{l9=^dKP)AY`lXmg;rWOq~oU$UOzWte`X(>doX%9pot_~bbXOKBI{
zOeM!!-ONjn|L4(ekLv!e88z*AcebK(@W(ty)?AE-63mq;(zA&MUe)vhjiM^H>@IB4
zyD1N&KMFLj^AAGbNy7U|Q at LGA(+$XM#|s at +x9uh9!0FVpm12{(DuwdoUbjjRn{={c
zXd6dtnQHd!+ern5?$RC&E}<6j1=8B$-8kp-<FUv$5LZ7y1qs)x&x>j(V0&nlXzy_i
z_v7KdrFN9QLo3O1!l#uM_-x4z>j`qbYfn*b(&t54;5Au<d-x~k9O+9=6#QkE5D&z2
zizETFV1x5V`uJP6kIDb3<o~tLMtuZXo`UvXj!HVZ&2$6%JL$<(A3vzDhi-ol<3j!^
z$<h5DJ~-iA+f;|l7ISyb2fHA*zIUiP%LmQY6a9pDa9GE>2yRsisYMl1r=JuuOTA9l
zZs{w0zm at S!E#1aEN at CZ1Zms)TKYvpc7rqd}uLUd!y)Uw!5=Ui({v2AK>t6R)R1(%P
zH)8z2?2)lV&O=-|tn^1(sW$5jWb8yGgvzyNgXiE`a=PB;9#HuYA4Bcr2XXDdFx!F6
z|B{|Tj#u3PzcF(0IbED7)cf=~PFlVh=Y8AtHl2=kcIA$>OrW~)oIQQu2>yPP{rDAy
zdI#&@tJ7D~72F2!#OxJ}DZRm%P}}ze)lK~Uo<!4MSc7jcOV$4c|1j34sHckb)>xY&
zYIf*5+8&F<e1*&vj)59ruX~A-;k`5Ld*9b0;eyw+E at 2yDSl^xhY~?|pB{TwlB&wg-
zIIhvA7wB^Sheo5uMn at D5RF9>CajqLVm4(rfoDR<Yz#uf09%4?T at 4Xn`AC<cCyPG+^
z*1JEI)%WY6Yx|hf5^zKjKM2<EQ>t at a-|v`hEMNO9?_+T1Op)F?jM~3stUocgw8t^a
zcKb#WIY-)unz!o_yG5*a`!Q{n%7y2<qD?~^j|apF>t=f~7oAm`D5mOp_&n2`GSL<?
zAHi2GDRtAQ!3DS~sn4aPUNB4mMk0M&9XRftMHSCK93{h;SB|UWl$$=qdi1uzpu7%y
zbNx&exW(maSy7r*+c(du#oS>Glel(HIj~Fxm>1augP8v#aB;wiBKEM35~Ka~>m%03
zMJXp3bFU}=0lEExKt%e?c!Zu&dWb&VSxp~6-(+ash7YK2_&+L(FOaydiK!LB6#rSm
zFF#PzO{Nq2y8n0=nngZWB(;L&E2uCMABf#p&aoL4#_#AE9Gdn-1>Sp)=BM8ng<9l{
zMM?dGa0T9bpLOaBAJb<EcZptUF}yrzeQvzeXyjet&u_R<q at a6Gr3J#zWbGNqviy?&
zC&{1TT|r#DPYb>cQ8N6#i)(*caLIBrQkPc|HK)l=ORBC$KDe|uEKSS43t<Y5$+Y&s
zCimToT at x;nkXYjP;(P@^p)~rw+B+j{c%mYkDrv;CBOhFHsx>37xNBbC%lvtoe0)cJ
z9>QxIw}QVN{2m!`>-pOQ9l7Nk at T25ywJ6`4llyejUJ>v-kv8tmqEwB_k`f6$4_K1y
zwo$ZB>#(Fy;G5SKZJwnXjdr(!9|akdyrZZ^WG{k$2;*G>Y~;D9x3Eq{a2p73)F_+!
z5&95n5t3`Q|HpkAnw0b+_F4ag{>E4ok6q!O;dbP9*Irm~e#!s3Pi;Hy>p`oFp5MBg
znHnVt``{M`4KDeRxRL_N^IRL9zQvo!;T{^(vC+W%K at mS{wP;eOlUAZmIPxgC&y;xZ
z++u&F`jH|z&*yrK@>q6I-In(KKFi0um?$YnT!VY(&4+ybRd(GFzV0Y5-|GHF(H6+)
zv>jT4<y|PbTZNkN7B|%`tVZ4G`Rnh`y{(0A7!Z+rQ1xha3gr}KKlK}3T<n3~6~uiE
z^LUXy0%Ieh=pD?5SM)A_`xbpb+h%&qx%dTs%3{~3lugWN at J!);p9gO%<Pydf<V2nN
z=FTxn5(m`l34Ta7i}LC^rfpMRj~Oe=<)q{IXw+rw<)(0aIl1~tDVkF!VP7?G*wATb
zmdE^X${6SaZWZH?<5NCl&1Do;$XHFjvB2b{$8(No4?c2|9)N6=b}DFd*Go)#6lDO%
zd~tmgrR-iC!AmUsj`ZPSAp&<PR1I+Q$oCmOC;pp%j0vgRqkvr#%P94e48Vl^_5KSD
zJenGao&vvfGO at Fyw*)oNF)}r8BPRIOh#ljmLrW9r(`qg~MST^qxwnZu^4Jc^0P1Ob
zg{i2w4ZM=DbX<e(*=Z*y#^$!Ce=@GpkU33aQ9kAi4bS~kS^WfR6L9P@&Ev0<dIsFI
zrfnA0+R4D#xHGU;TT*tBG20)d{KptwEZ)oKstBx6KGa`n1J36pd@<Vy*QsEXWvA{p
ze71oD=p)#sOYOe9i at _^k8u>o1IXG}O_HTucI0{?%Uvn}a7(}kfQL-ie9pFyy)(PKe
zFqTi(OR at gx6XM0oY!4f)GeQO%(-uy{c1Qr<v~b`5q3g at znz;7%L25+ at 7*rNX>|z_G
zw%pcKg`#Z{1tW?AArJ^4E)$|%lz|Kp6}i3Fd%e{QV_U6lwY9j`##U3--qyN9U1;1w
zRN6)q#I2Gc2 at w_eJ!gV#@B9AVKk}K$tmm9L%XfLc&lkAdy?BNf*DDQ=Ds6n}r&idE
zPVG^Z?{3TrJV#_s#7~`~yfCJf%7euAFAXKOXH&wykBIHiuhe}1Y?3sTerP^<HWk|*
z{CcIKz;tD6t02SoVc$Xaxhh}=N73yqDfD&oGk(eXNZ3v7TNSJdzqG9mHXi<tPSZOD
zKjGJi-)X87_$&(*2RxpE+{?GOwD8wko~GON)DWve8D5_`FZ?*l at MatEmiXCQ8u+Fb
zH-8_$Zu}mgtg!`0 at vI~G9X6#D97681{g?xQ7b<h2T_U1hK&;cL1k$#P(ay3c9qNA)
zHn>j{nmxxlWl_bRW9!(2OP*s6P1Fj{u{GWaHqWuX?5L9d>!K2V at f>@YF6JFad;ZN|
z%sY;E*r!Lap6kkD#JuB+V3+$as>pNf-#Zh|^uKpml)nF1OG1<9nCr4=zjI6H5&I(*
z#ZlqCnYrO4UTbrUp6|o2SFvGC5x(yh{659+vlczQS+Q|UNy`NKBmCB6T-v&c9fsd<
z{GP(^N&H6O7lz+R{GLF+1E1B#7ZC%m!~Qtv|6ig%kH>x#evy at 1_A|t{2+Y+Y*zbLl
z9&#JxY?4*ZC7qEMfGf+Ia9&RAj6`m+L<B=8nXlaiyu~p`3f(c-5l~CEu2HnpnBMCw
z-Orpx{%ykH(Nwqn=p at Ki=h#HsLaxSqzBmmzi)zf*T?4}MmW4p}RG%N<su?(rtIBh6
z`<cIJj}IJY;`j>4yiSvPjl;i+_!GtVR)e$hd_-`PL!yC?BjwXnR;BsXae?n}wen75
zQ?GN?IJ&PwSQk8)GM_t}c4{}?v#V{ur{`H!SYC0u_%6g#4Sbc;<6Zd!BNZPIyB at Pt
z3tiqdm7LGdSA2lJG=UDukEAE$=PPT#UDgd*UAT6Ib}POq40XieeNMb at I^GvZcMUEv
zxBsF#KZvUVF9HjG!=SJ{S$f#2P2sc?c?W~9AyyFcgqsV(I|B!~6v{G`=VrU0mgY&y
z&9G&#_Y_LJ6P$ecq4aS0=e*u$!n%s9&OXM~41CQ~*5G<$eXp}58N4of#Nk(I=T*m=
zEyz;@IXCSDu<G|@a}dXzqqq|BDDGatv_YP1=hlO_PxWpy at L1ppfFJu1a<UoKJEE6s
zn&4+zMD%$4|6V=^Jnn?kFhS&cy()6OPOo=U?_*vqB)k#O>F2!-Zg1o?oJn{iba%M-
zH4jN1!r|$}E|upX_l$_6CL&Lr16<X3p64D(WL|r5`cmtNWX%JV=W*EV5Sv(LBk_Qt
z at 1b3Y&lr9$wuX*`OstQZThX%f-k`{g24!7wA-Eykg=(^YO~$K;JsLXJ%^3K at KNxRz
z3QELdLw at xKPsO4ArA6bCkymoNEXG^R?@&1qad=%^5n>C{lty6IYP{jsKYbDZi{RJs
z6=U3+*o~x3A&cRfm}Kowt_l3NVyuIzY6S8&Lq<~?!QFt|oUmE^3T{?qz)^X!H}G5m
zM?G=k#J61U`|LT9KWhzqGQh4kN-$o?HbUGQga6k5|3yz;FoLxh3V%~!*UpK&Jt`Hl
zZesLv$SvmMZ{hCwTbg&XsWUtAT=#F&3Jnx|O8#k{GS;a+kpHP%$T>u*+4r<lt5qLG
zE$&&@Burgw3R4r#N88SPM(u at XPLzxP(avI-KDi+$Hao3%AL1Gi*Mv6O09y`tBE8Z^
zD1ZS>FuuCkA3ig1Ls1sItBbT1;zVEl^LuT|z=fo)gD0T<BPoO6qTT8K0h{tIbZ|-J
znl3i2)>W46Q)C>u)sNd?(*_uqz8;pCf6O#=tAU#^DE~x?kNd>qe|HBAt*z+E_W98G
z)>fLG1zqtepU666<=en at Jmp{0pF>SW8HQib-RK_3ci9$P>lyCW-5EF4eB6~Y;)CLe
zGkeqhMtm{XkN>dTXx_Q_jHWN$4|4jBr}qgH?Y;reKE1ERq6tBL43LowVqVQ^dLo-{
zy4ie>u7d0_8ZoHzn;)9qY3?z-*W6baMP*^EO;`t=fewv(4V)yo^<JqTpg)7ZvvbO%
z9}WocQDeOgxW3uJrolfvkBQ`z%CD;R4L3Yoz!=krMP)Z|m9c4B<oICLV(dgqJ9wwC
zmKhE`|J~SNX%}o4$a}z_2HyfFae>noyp>b_R;d54d(;2>UI{qLoP@`5k;aL8uROXJ
ze9paf#@DC#TfsZH*>u9Nh1ORF4O*?sURNzl1;3fnr^%SO*-Hw4CS+#xdBll-7;qut
ziACRpO{Z#1 at w*@F)YDfd$2B8Xb55_MQPi`YT==I}p-BV(i?WhRFN`GEv)ZG~67%xG
zF_i{tbwzNwJ1sIadZ=0lPON7w<T at _3Fw&LASLW0VvPL1ElTGuEys4tQ at J$2AdB~}e
zMAnS(5%YU at M|cNpA{YQkWBv+h%b>FrPWmZV3g4yIzqM(E-WHy(vaMnFmYro)FO-!8
ze~PVNNkW=7kkv;ONzQ8v*j!VzVGFR at -<gG*DqE{vWpfMeLCsu<vRZs!4r~W{jFT$*
zeNt|5th~OimYu4dY7BbUQ8F>?rHaP`8pdujTz3WY7uj at 6tvxrc*BG>}PvH2cCS$zV
zmEiM2ZZ)ZtuBkN8z<E=VunYYFA8w0O+Stm5kFW|VdLQ~gpGnoxXA1h%f&WR;2JH*T
zcOnEV^yqFRZz}9+R<!RW!<G at X$W?lujcjaig|Dk;r&=1^O50I3tvQc1`g9qyH$QHE
zesBzI%sqpL(Os~0KlREVW!aCijH{IMtMSfD7479VVJHnuc)3mbj%|W)hj9x^p5y at A
z7mx~$btUy7;RkcEbk}4(@abuo+ZD*yJ$3QVVTsWDGMXD$OPsJX&iB-~ILacMyZM6f
zqz18sWj*luw-^)O71|X1fwmOnj+N49Dr0$18>CUcz^_l*;BP{>@+<gT_rYf~%LLv{
z>9_E?+&N|aHdXtAY2FwIr_4VDdjwh2-Jw(HO<_y4QwMXji?q3e<3BczT-P&rZc at kK
zX|^uAo~q3~tGQqtS!Qt|hC!VccDBHnWFMT<f9?!&s-}UTZ?CqF4Q^~=!(pFFC-Wc4
zS4 at 3Rz6-wJ3&x<br%<-*Z1_6lDAqWEl at v^mb at b)wDS>d`e~b7V$xE;=T{va6Guo-r
zwd6X)*ykV~e8pl5Fl-Nh=cx!XeQelrN^NHX&Q>1Vz1qa=>jN%k7F)$TSU>GE63nOh
z%lPg2EA#E-o0IPXJojL+-IM7SwgAsX{7W}5;`b$_ABC?*zSfI`(*iM at O^^B(un<l5
zl`oBXIor=L`^oY1XFj0ZnZWjQX at +)}mTob=wc6^^;=Z at m-LBxut=xoB&&Wubk*|-P
z*m$fsoUSS`qCc&$G}sgHuDKSoBOA|zuQ7Lu#)Ukzb(IQwHKzn#VJhT;hGzG}$H3d2
z#ykMNx$nVRO(L+ at R@Mn_ at 3d%FP9o{6mRj)B9CR5B*MP~p2w!e{XmTF<$J+Z9aRF9!
zrcYOHrbZC=Gq9h5?^4v*CVrPRv?X%Z-Akd)_V*PF8*V<{n#_MF+~B(eKmMQgeDelV
zws}KmGU==ME*a*kJH+niEc`G(Fd!=56~N_3k at knJrq-fHS#n(pyrZD;iV$wI=EL at _
z_V#JY^#<+)?|RVxF68lTsC at Q=^AQ1N<~J3;oxMT66<?Xpns>^x%{vQ{%}0Jr7QfYf
zQ^=FBmz~IMNssCJd_DbC#1pV%Ya+YMmj}lnUd8GX`0m+hboYv1CFf0DTQT42&BN#B
zU2`PU2FDco-IBCV9qfguE@@>{QH3JFZA$*YjTnDb at k**XB7|VM(C*{;)$lbxm7<Nl
zj~{RbpLVi{!vdcV+W5KJ>Y(xl_QS at F^TWqZPzRP(36s`s5T*uyts4n0=F}1Qj3dh(
ztOb4H!l_MmrqQxEoNq$g)fOi;wwI(ew$D!s{yKMPy>HG>WUU)pm40Td;f>4MshImd
z#5kxYHVsx?R?j|v{_*_dIy>Up&*kf3*GKNB`~q#AgfrKl&E{*-PVW9b?apWMJ(hds
zG4$v0rVu0AY3%7r*rqF^j9qV>dwM3Z3Fb^Fi~>hu1 at KPYTp-~Or~WGLza{RM6I&FH
zl}o=Sc`RN;?vHn`gZJVU^BaR>V24e01!2sNe7CoRvvjn5Mb>`krdvGnRltFy>%g-d
zN3O6+VE8UVF7Ls%rL<`AdGNQ{NWb#PTKUh)=X&};cPeEe$0eh*L&-UD&3+HOc6vWU
z(xu2^a3#6-<t)AymgC8D$->?R{WHdc`zfsc=@X|hpVPhv8QVc+!Op)HJl(}ud#A5k
zBPf`am>YYs2DeIIRXmP4x>d$veeVYD at tzN{4OpS?YDVk_9%2_`29D`D*?+{Cv`m|F
z!!XF_u#=E64Lo#g<-MhUC(lJ*51MmJGVq-H3Sh8tU1GT{L6wA9fO3IL);MNd&<Le}
z+|w#7N9 at To!ii8$&Rs7}i!va#j`)ngm!WZ${C=(H-N3~wjoBZyB1gK8<VfE{ncFQ`
zFZ16fd=q)j3RU6fb;h6eC0sx~1WWt%<i%&gR-inc`~|^5718Ig-v?i8%GN5OPvg*%
zc*s6-%-qnOo;Yw}8rEKxxok}Q=pNn`1U>N~VhiiYKDN8D9WE2&E$KS)U$&evqpTec
z9d7{diIr-3w&vO_T2Ra~H)$7cy}@Qv?%0rZ7lg&ODm(hv@=0V(BKZDt#OvX`J<Mf1
zb6Ed7$d<fg=r!1(fuZQb{~sayO$3({zGD((G3}?4HQFcTIaC*`XA(K0ld9_Jxr-}r
zC68vzSmTK9BoH6eoNP at emjXR@@8%9Xb8MaJ at e)eKJivYyVo^Iueo0T=!NVx-d)k=D
zX!hKSmRlz1s_-=+M&fE?*3hRVHo~n4yZWnAhxDb*h+PB6nF`P7rd*OXj8_#MDSbJq
zZ>NH{k4xFQ3GMBMzVN`qNghz^>5JwgXW_^GHdgsnbT-y9?F)|TAU+g$!%(b~Z3XAX
zU6fi!n1u`cNlCQ0ChZXJn5)lXjw9Df+sfjEN$`;>qvj{9Ksj?fF+<STt&(k;9tm*V
zM-P)6r<BNjdezLV42{eC3UPxMfpP7X3>e#`D+qJT=TI)$^r3C&*B!qfgTItjqmD|8
z!If;Wbxxz4h&cn7H)7+DYVMJJS%!BdFyZ7mMO;c)itbqah&DVM<LF}aOz+^({UWDy
z&7SSv!%sYm+?l(_yT4Oax?Rct=xI at xpO<B9b=p~sm8X*I1?M6UBw%fvaU|+h^anv#
zkR(XnBHsdSyF$Co`0%WNHn|_6*Emu_U^C=UFXW?;zRt*`2a<X at mFL^%zDa at Kn@NQ4
z4c|k%!oLc6U4jFw at DF67&)g#Oj3DF38sq-eVmwyXi8<#&*mOoxa4xE?&X}~$+p-F=
zo6rYVL|sJR>ElwF>6{w*N0IXa`e`K55B+`tKlrexUxrL at HEI_6?G21CKVW;;YQK_R
zMjXqXe7j^Mkx3Bu^&jo at h#)d9%G)Kj#qD8aK3GfmSlPko4 at 7Qh2>1_?Sqi~tg??St
z-zTP#wR4K#=?~B&Hv%K+$M0Zon5*B*CYXa5 at Sp-CGu6`Wo(&8o`TntU9HoVb8A6;F
z+Q1t!fs>s|Md>+BFUC&18JxF}dtKD#Ayy(wqm5eob)9R#<S8SD|Nq(<GTuh`@Wr_k
zKA!6_UBVO^oEzWyV(dI;Rt~9`9yAI1yqGS at 71O(VU6oS~+#{QfV+*lG%)9<AX5}W4
z&jGP^Q-KrO#TQkmc at BP}9&VU+Ht;Rwcvh%BILv`KXRjSEA}0BOg2ZBfA`8)ul;^_#
zlLK951GrC>sAq+xL%!R_2r^ro at HE|v7$C1bUUV(y=;`2Rekh+3c1^BqtnbeC*=Sxc
z<oL<tB=<>mk`?dxJIZ?qwrS}6L(Gsl`=V2sqv#VWD&tZgj@#1QCFm6|SEj9b$d=T5
z?cNpUj=rV&1 at r3~K?-}$rxM?V+uyd2NS}iIlgh8y at ff>F%KgY+J6_CRyPg|C;!e<)
zJmWE$xgp7*Lh;@Zxl+3=CD7EZXOvBm;AFj3iFzP!G5jE1k~U at mo-spw#_hsje?6Js
z(AG}_^W<5dPH^C at hU|`9#K1K!-0EcC#4ku(XD(nJJ%TaUhP=Qro?PyY?tf%QC3&t7
ze at M31RCI?pmt~^=)#6 at h|MoF#_XCIhf6TkJs(fFrO8b3<>aSFRC2HlIU$k$4_q~Zt
zWi(tm^MKf$B- at yy1sBG}&ABpe>YS^TAZgPgrpq%f*;LQC%n8RFUC1Q5bf|+zzqWe#
zR>6HREWj##S&RkSWu7_Y0p%6rlrA&f)F)HlK<92odmfZ7SJoudi)(c<zH^4RGTJWv
znfj2s0A7$_YkPs$#5U<lr73neRmILyR>!|-ZcoX6!j}1B^p6SCV-D194|yAY#>?RN
zy|Iu*{e!o*vQI``DxI<z>vo<?`X!Ee0poAXuQr}OE5w3#UHv7v^1NfJQmo+Whn>m)
zeT>8R3u_d!0-8MKEx%#b40+%g58wY4`wq5*`bN48Ih&Uc{Rwh4V&T`?E7bYY&~(H_
z*V>#y6Y4dcGD+`(JB0_|M6!i<&cX5La6E$?r$VFWU_QAF`8F-=yXWF(w%MK;a(!nw
z9fg?sS`t$)n~QH&71k|B%)z$(bSU~z2<E^_l%s1L^1tfi!AH9RoMTF?SxYQ^^0&mX
zq7ui-D)j4HVTEL at OrC<i56+lMaH`6);6u+TDXQCk at fGx!OXNIwTu$iD%yx0rcwd|L
z^H;J at bhHrp|6*hNUvlT%+Zo4OU&+w=ld-bHH_UC4 at xKAHNMiM;H>w-+N|oma^}K|7
zkFRuAHhA}Zwd3!9#n|6;a16f({cXA~Sz#ybH&}_b at YY<ZQ1ff*()O{@63qagG)ud4
z6WXCF?Avi0!z#z!Chws>tlR$cJ9!&4NfMj)HLO=hFg6<msq{J1 at l?cT+@*)-<PjW~
zI6g5y-$C5-pT?)gg1&T_^f7LjPhUg`+6o+<4GyX^;fOfjBahx1$ZV98jG1cv8aFqw
z-uJ9k^MLpR>26IQhZxpd-(c+O$vQ8N+sG2cfC^7n-dnK|?KFz4(-kfHxQYsWJl2FZ
zEfbK{ub<8gdy(jm{u_Zus=->4URp%@k$edm=P}iF#vcX{Imf74+Y0<0Wa at u+c&Cx$
z1vSXu4c_#|2gdBv-H>ZqWEtQ{2|=0eYV71c;TFbtoX({YI{^5a;vtLNhg_>Fb9(Ze
z6Im4N5MnE#8%_u3np=GL%zf=b4fq1HEbZm7;yOj*ErUdP%!K$@=(r9gCE&Xv{*c1F
z-#v-6O^b>?P2}*OJ{jU>H)`LLKZRJHhvy&boF3+-E2pd@)TeF)Twq^mVffsG^LYn#
z8L@^z<;`Ng at +<Hg<Nzx#SZwurY)yzyQciSl=Y;dneQgfUK976|Hq6ad;hRV29VVIb
z(fKaesm<;47vlV}&B!~%L}MPzTey;aS~niNs>gtTuZJ8qv9t&rL|^9X5r-- at y=&N_
zt;-+Ym<k(0r%=pa6@;<Kd-hQ^<c%L|?`(Ay*yQ)>ws*{4{QkOg!ZdkzMOwg5Zyb?K
zTezOc)ZV}o*t-0E>U~dk!_HbD&KLg at Z75Ud)dE8ggAK8rt+$w6DWH1@(l|;dnj1>&
z+E*&`2c1V-XcxZ-9>oHTq2fVZ74f{TByG?caJ|B|MeJJr^Zv~;t1t<6U7`89pa%Co
z_=~#Lh6ABFx^8?=Yp7b+DW8FFqc>aupCIAxYZ*M<;;tVC{)M-6cIX7o!8(h(sn`JC
zwI9DRW?v*YNWyPcJXvjMjR-OPDw|<jE&R+>Ois163Qd$LB7~_ZQG$bHn6ld68Q&)v
zK#l{?wA9ZxBE*kP&_*6}82FRYWrb?!xlZ9V^fAIIH6AkX>q#3huIgvx;rd0$<B2@&
z;3e1s+vsNb0MEU$*`#l+edti|ML5n4)=#WV&?4u++u%T+hG)eBpAv&-y<%vcrHiUB
zE`pBoqP7{=Zoxe#iwXBeOraY4pW)c2E7C~*ao$#N&d+yNUjOwG;`N{5np5KSul1MJ
zg6B3RT^Gw3i068)EBgI9OQCvWHb0E`RP!eUH06ho at 1PJ6A6F|>DQjheU~e at 2*)ESb
zkYtjp$zzun^<NcikH}9hg!22q4<XvjOd;SE^Q?6i)4XRK1tQiFb~`n6<Lq~TeZ8>q
ze)4FvPd(!Ljf<UgjsU+xI8N?qoGlG}7RKRNWA at pHrj(9e>6^H23)OYa&2LS3fc0es
zV#?-f7lAYE-+pSw+rJ8HlNhf at xa~0>2l^Ri6jPfVdj8|wPpPJBas25S%Sm7IZU|ke
zt3|Gt>OI>B^3q-pul=>`?G|Hz<*Ug_zyj9-3!DhOyO^rU{iUp3Sn6|DmKonI#6bs)
zTlWxS at -i1XY88BFr%RT>ud@`_ygnWIyCJu~Jm(tXUM{N#THD#gQM-_*2+!dT_CMzw
zDTn`s+u&8e*d*no{?BsOhZgE~d&>Ek^-(!bU0zeR`NcN(WW*q%oZxCe4z}X4yQCXO
z?GnpVK+4m9ZfgIz3Y24RfB6&p%OBide(`$Gb$jCIzTAOgeJ!#$vHsupm-~_|Tm1h+
z|9_jO9;idGXATE0IuP&w7}z&u-j-&DRX4V4$+#tB<e!Us!!(#jIpCdAl5SxRzA!k^
z;&zq7&Nt1_YE;$j0LO_r40G*u*cF>f4ZWCSFJtWP=pVZ)F?OeNs_8CH$;=`BpX5D!
zB^|QXZ_NA>923XnBBG~|YYh8k0|@^WOL>lK>fkT)4S2$$b9{?&_WGPB^S+qkK>r$v
z*ctH9hjjrvbRT-5=exzBEfx5-25{gk)jWF*;|Xh)9q+2(xKTBD|7Ljs*5-q6TV*q0
zhs+Vjb}!bIIk-<8-?DtmQU~I*@qdftH!`mMd@*LbbfJf at 2-z5e2bb1_C1V~+7w3wT
z{u{Aw6_4$ec8)@hOz}C7#<_S;z;Vw#z{@WmtU-MEuaKL6BkvZ+c00!0NMO<)kakn&
zFuPHv`6YM`sbhf=bH^gyX^&01CM7mS at XXk!Dw{|hi&19(ji{GlRE?PX*!OmyAP_wd
zb3hPe at aNGVCQ<ITH2xA~$98#1*cYM8b$|Et%K=G``eonW_B4biW{wK~8-6n=2f3b0
z*X-a at U>8c?+$Ai>nm+<MG&!!+?B~+NV{TapI0TWi&z=B&cvV at GY&iZWm(^oV?U|Iy
zciEL;XQS1eOE#Nx%BIEHg*2iYE1bxQ+)jZ%7-e$E)m*16hjYkM$-PNVDiu1OGHefd
zmo7(f6IeuIV{=f2;73m^b5IL4_l$A>2AAF1zH0Epx1{k(=(h&on|rF`_|IG7c_p~B
z;osz3SmQqw?XI#9&YMpTj`4fUydh16*o1NT{-&6&(){!7Eb`Pc-vV2k9AJ=)wCVFz
zv;nq7gJ_dCP{OhtWo^ZN-cI~N()Va$PdsQV*mu8e6Ms^B*xDq_+IqpBtKBPoV78vk
z at ndJ*vRz>Jnj<YLv2PeErb3qwfsA}uS<Nn|zJZ)LFCql%)8|wr_TP*Mp_{o-oOj|p
z?6Wwg^4MqzURFD~VokX_p at aCxOKuC`SCuZ=3Y!pRkQHc?B?r{qtc7wQ_N01GoY!P_
z7`-K880->L5LY^t>S0%DUu9QOz0$437d5t9x_4AJ`qWeM6cLLXCVQ9YJDR`r&+{%e
z#{A7S5w|Y-so*yxwqV${;TM8mDdxaL#9E3rQ97hTU4AWMDACn1HYI$OaD(|o`VM?O
zcs^o(vxGrBd``dnADp@}VoQL&l(q_TW71X3!xu~Qq3<WJ+a&rBC-7Iiz-5&pC=YP?
z3Ky#<bsn{>p93EJ4(QWW=+jq;d_iQ+vQ~B}<Y$ZrR)G9~e3><K!<HFWmf1_Vupb;z
z^hsF?V!od!+rTd3n^-C2uxv at 3DQev&*u8fnf0E6SIw+F4j##T at nl{8UwK_QZuJ$QO
z9PCT>;*FB&6;b8UvXnt*8Jlf`V>R$>>4+1~uIsFbT0J(et>11 at fcJM}43N3fTe}zQ
zu3Iot=j&82?hMT~G>uUE$ibUE2EM4Q+S6NIH1f`zDmUD8CDVGgptNi7EZR!;W#CeV
zKGoOBY4=j|fdyFz9k0jFw>qxej50r6VDuRS`<2(J8_dEsHGKuSLC%WvqCagNm*|(D
zFirVo!ck3YY4T!MSlpv$FzF`vW?K{i4@%;3?@96AQ;0E^%i~G;aV^@-4!aKO0PI?&
zbAJu4`xUmAX_!YMk>gv`ZOcz${Zu*#f9FEvFNhPlagWL3Egem9VfT<j(MiU-JjXK+
zN`{Q;l^pSDll%sqLV(S5g~h!KyxrZ|iz~xYFo#bHd*_wZ#g!vwWB-M)cgDqHeyk<;
zLS{yurR&PEy_hG!xn^<KWRLBYJRv?0b0+4xYF;g*HD49d=GaTpAIX1IAUM)o$ca<|
zPJz<mRG%*BNJAq+M$kCk*MIyk;_(ol;Qr(7Soc0ee^p`)17@;FAhyNOz`XmSO<Du{
z#3Dm0vG3|uK(0BaxrDx^g#2^Gm{`}@c;dw$Wy#v_UB}>u$&ort$F}x@{|<KGu!}8f
zUWYz(#dg(cjPPMzt~36}#{|2LP9^eyJ4%wns-<HU&gIAz(h^>NR+jG76hDh_cNa}T
zd4}OVTG*mH_o!&Zka~9kKbwkYYDKyB*dTjJ8dX(NtE|r3i?|Sd(rK)d$Wt@<MxC+r
zZQP%V`&A}Y0EtPk!%o#L&OdHtHR^>}Xw++|a$9NI`9Yo2bq+3w`xyFBO*K>AEIG|q
zF67Mal4+=K!xMeFLbJQuj{QSoyE3Hxs1Tol{q0vP&)nw}YAo*ZWN)V~oqWGRXG*F^
z_2%tm<|E(qZ)m%#@@Z5PWY^OXgTX~I3w<jaGKY8MW%yXG6&I4V%%>@yTG<tmPq4XV
zJA|dlj<0spwIkG6%ie=MY1r>F$^astKxcrDvX1x&|4}Vl=a!-Wc4uQf9dl|;w`xd}
zjQB%TW!<pZf%AWDPeq(PjN~;msy=d1RU&6htzOTopugodO~d*-iRAVzYr|S{2yLwN
zPBT0p<H~Of at ScM5bC-(mZp?b|M{;b)Yoc884%zqph4gJpUsKZW&uAfbEV3>`hHQnL
zaSHen at Z|H?1!-6p{P)M}woAP5tXgvaU?*e7wI7Ejht-Wp#y454>8#Dxy;Y%lXOy><
zJiD|IJYOgJ^`_gR-UPYJKC at 7cHn;)3sm=d=%zFk=Zvs!#M|X^>FV2!<HPEkiafNas
zYeAPeMam?DOyPZ=nJ+8Fm|Kc6FCNq-!*>EVWjn at dmn?<sLzhW~9)z-xW6+sS6{nZx
zO9l{KYLvk<Rz5=ee_ at B+++d1dH$FFr+*i5^=a$KVwevb_;Z3O;r}tTn6E+UQi&yM*
z4(n|jIJ)CzJ9WvW1-eOdh at M`IeU?irEoBRdEs*{pc2m9Yk={bNC|i>l_o?3Jk^9U^
z>G9qAeQu%;0$dOI6N#Q<o{*BQc-X&w38n?xMIQv@&56P>{snwH_=m}}^BmQ2HgMRT
zYB#|K9$yKpHtgg>qH%7jg77){4w#R5YN~fl=u@!ySP?@SYV|VwtM<&YH1p$)$elG%
zb->N5Cc4{IrS5^MB)2!VN3q7kKSB8ZGW%^h0(sVB+hN;x(ROwf`1*?!w^7&l=-JSL
zrf*#%yn!6fx~NO=WjKgU(;;nk0JHr)r^b1Y9mgd3EAv1WLTsy|Jt|(dsNV(+IS9VD
z`=L|v?(a;dUGikCH48PJJM-zT at yQf?OuW+bjmkSoIp`?FFV4aH;x%`ScRu+|w4qKD
z+xo{k<E~q<*T6rwwwql0IPCDSy|~?}R3BslCv?gJHr0^r(f8m>P%_gIcVY(zvs)l~
zqS~V;5^RNVNBI?rDf||;7V-^DA-mz1B{Br at lY@sC{#@ecXa9%)op37=I~DXmRrFL`
z6GgA4I8r{_274T7t98!uPdse~+oqsi2<%JRs6zy&XPyLKZ54gigLzqJg)add<dg|~
zG%e&g9^VTvQ>mw{-T3B%$0*>FifW at c^1P at vtnKYBGX8|vPGw^cA$G1ScOm4HAkm&1
zYMS>F?CXXmj}L>k`)}|w%vurI!fk*YfqZ6Nz_4Q-ZehWB{?!CvVt_Z%9WyrpJ5X~q
zIqV=}{*wZ-Sg-!R*-5xmiTx}}N$f7H4*r-Z;E$q+uMM13UGiCrUk*#~jtpI|yAS!i
zYR~q^jVH#3!tYcm`klHnwqBzQ;ABJ&6skz$z?g7REc8Xl_a5IId_^kQUEY9Rs>b#P
z(NQ1$hrIL#!3DlZuyz9BisO9X&z=|nj6EIX_jrIcA{bmLnFN1O|G>6jC>=4J3B?>k
zY%gC5QT&mEQT*3L1~$Ju)E_ at T{Ake+1D=_U+2!Zh9A!;o)^lm*BSVAD?++c=*!*0o
z`RY(_^f5CqhF%o7Z<p>gr7Zp2^xo2n%KPbVTPs_%<^r3x$tnQT9`Hqlu=G3PLot1P
z_n5|Mp0vILxgt!Bna at EUMy`lqC)}=7tJ~=XIT^=mRqO0~RBIa|Lhvkm<-PP4!Zq<+
zEXSF;mpWlnsD at 3Uy0C`i$Ixt_EY!x~`nVyy3%OCK$HV_wkxZMV%PO6_wgD?KzVg0i
zFEDh;kV9Ulh)l4BtiLTfev2$wO2+pVa?BLB#x-u&6J5YkoFo2RioqBK&%DQf%WSFJ
z`x5df!506<<g*pX2VQ54`C0lM^MK<J at 20NzTJ>ABJ)iiO5Gx`1clb~7O2p-YBUG5j
z?27QBS5 at oHU!%X&rf4_o1U0GeW}V%ye=8+A#uI&+OG=AUv at tbYs84%D2-)_x%Q$5<
zuy<Ac?NS>N0vV9=#L<9r-NmI4zX7m=PrNi8u}`Vco0<?q(T=!px4><6>qos*Pud7;
zY*UMB$gX(eho#ZBU6{KkY4y;r?1M4C!**~N`g9ZQm38>-E-(^(6S=HWPkgI1`0n<S
zZFM~F=3wLf^>3sfo at x_Rlige}wW-c{umSz`oI+pGvh=$-E{+SYu}vL10JfJ-Y)9xu
zi2ny=hT#0p at G6|I#PP>7hgRN7cZZuin23tQcRvR2Z82pXZqRkZPIN_gh}c<SPh~7t
zdn$bY$9$S(y9joJaPL$cUb?r!wDfD{ph-K_O>jMR$%8&%H!{dU2 at V#`P_<+mC7_?u
zQ7PJOST}kj^u$LC-R2|3eH;3G%v`QPvIhR5n0k6i48C~*lNd?j_bw8hW`Fe3pG%7p
zRM2G<=*RmMF3Fh4t^}3Osk-exvqaxId|pCOl$*<kZFj!t|8>Du-~VpB=X8=CHkd2K
zj)OM7!fjxVR_OW3iVw%+Wz>&hI3>o<URt0SMuvDY^tC`6#zB{)V*=^}-sO4BeT>~}
z#19JjqiseSa6U!A&dy~J7xi2k`({jG?1%NfO~aB}Feb0Vr`w8cn-0F$n;P`V5sDtk
zYDFLB*&VE2;fPJHcVAHymiWhj146~G*Ci)8%(vF-WNK5w-9(b7^4%UugH{i{;AFf~
zt4CkJHU>D>FCWKq??VUtSR!Y_P1>ZsgRtYHZ1&=D%KehnmcFiR^r^{nV2{s_2j3L>
z7i?i9S7-QPr(*%L!2h7=XHAODfbTR8{-3ydUn}g at u_K7B7qI~!!u~rY>1N&b6BF`-
z=rhQ#?p1f44wcqm{!kk(!v6m+ at bcVaGr>RnH|RAq_UDU!r9Qbg at _u~Of6r+=KSLV~
z`@%i=a~??MVV=C$=x)qS64)GI)VCi`me%mAh3K$T@?4bfm88DP at Ienr%n<aiUuDVU
zJu%;5tZyQ|;AmjYg;#Lh%X1zGE9m><u_oEGfjgMr+ytMNRi4G3#CyOc!LNsG)cs24
z)>a`})1wEkvhK{$f0plhRL3DTHs!7k^T}Pe^%v=1E8`BX=7788^sqhPIHzya9S)~V
zY>tl*G4gPl{dfg?cWZ_G?q@@+!&d5Unv_PjPNn@(K4r31Cz*5IF^KO&-zs`8qilze
z1DjA&x*f-QpwH<KJXZdXm7Hc6xZC#2VwrHUUo`NW!GW<|I0cTwhVqlX65{7BKS9c^
zOFpXG|2FCv{l9!_4&qZAH;1$-_^VUEFJ7m)4f$_9<ZplYFT2O(z^Atj=a-89 at DBM7
za7M&UmrB2e9v4^dRdX6XYg0h&;6ljV3}2^RXU_Xe4)fRmOTE|5*WT_O0AJ^%q!kY!
zi;%vKTuks$$&d^0J=h<{Fb7N0%=K!-;;(oQ;~TPwBy-RQ5yPREKSX)Q1B)654AfAb
z5uzb;#VKkbLp_Yn5&ej)^lOD<a5=u=eDa+Y4xH-)r$1>A<Qb`7hPr=}vhybLRS&x@
zt)ZKBi>T_l?LX$AexI11-*ubL(gx$(+|@4wCN<6|ey^0#%4%{fc0}VE3;ABD_+BBT
z?Vu~Cyj0JYlKxzI%dmH{5Fe~<!1uLO$L0Hi6R$I6^rwh_f2lt9A`|xZFzsV#zoQsq
zJ=h+>_F*i1e||$I3)RzkckJ1E-(Tb}{S$41m<GDl!O%V69V?7SJ3-HC)s;;yB<qTl
zuODmy2QD}>+=5rV at 1?QYbHGrVxnc0R=WKSfZ&B6=ANZrdgUfNuUeTT}V;mCjXll08
z%@wM0mstMrB<EnY+9f#*S#8FNFT7Q at ovbn6B;|da1x7Wof$kGySx1TT>pvvJ%ts&>
z)fcExcNzIs$eXBQ?sH1mH}v%anHT&I9!{grKkEPBuCN$-knhPkxKwi<SdW{=W8mja
zz&Kt?#<8ETQH3%f4>_A_yTLA?Oa(@KySW&D;}L(W3H$EAWAcprAcG_S34==?gy)ey
z5RH4Mo7KV`{6AVa67mmlf<s5-b72m)CO`$*BSDlsZmsXA+kR?6{srxm6>i#AafWts
z!(e-o8{T7)>+JJQbTed<9(ED>>@#!}=ElxS^_qv#d76tm!EGJw at in{QYj%H?n`9SY
z3uRZ<d)2PgoJV_meAcu0GeUa&ZJdJ)zUD5wi0<)0KmT at 8qoF&Oj)JV+=aWW!#;1%s
zH}Jj(t*|2!&KLMt*g_uMRq&x}iOjUvg=e@%%!O<W{3iOVFgOK%^JGncJR8?(9<`Ub
zd2qaTwtSjK!p@~__>Qp0l4tq(3gZyhe|dx=Du;epF$KJQ!~A at ucNH(P8^~OX`7;G^
zk2#t#SSO!?JrRC>#j7nZ({9MHA*e5KYGu#L4i<j<(<dMZ+JJA4*!|exmyX0<jG0hp
zG~S1u#RqFbJ at MZ{o(#kOam*FBkoSoEAF5k^7`Tq#<-f(^H#oVzBQ`DOJ9Zd&5lC!l
zDcb)Zz{^do5H2Q~-n}?u$aidEWBVmCt`KJvF_Ijotd+9eWbD~X5LZaPEpQCS at jfTs
z_i$V?nQ!Jer9N|Pn^b(m%(ShL#hCH18QHjyVYhX_?^JEX{G=w&XYY}E{Le8xBh53W
zVOKd;DKoAnV;Z at HyWrm^Ytwwp!zp(^qe2fnP1l>$;huSTr8p0t!<>6foQL(8hY^>K
zdH4>FwUBvu>{QHUCFr9o&Go<o*B2yXzZ7F-6+5n9E*B&N#oWQ)5?`HcHO`NuE}-q5
zT)uW&JY)+g^T+%#BaO at -U@21$9YpGn?Er2V=Gm2yk54PB6Vfnlbd(A0R88iRA#a^n
zV}d^G{R at 32WqwRSopI->8EKeD!8gMy${N_Y7_(=h+>*?7wSofNp~}gH5kcVlYS2d1
zefjku at D<JQ|D>>o-9Z1ClH!py&c!9|$Gb`YuEh3wbP(EhI_&(&71p^FHo&(;x#I}r
zj$`bsm`Zk->BQ0s=&kdUkmq!$k30^2q5^ArM#b5Sv#DmYX4h@$c$8b=BM at J&2QNgK
zkn^WE;m)JEi^!}5ze?sT)6J!)ZEkzIvYN|9`F<ri!yuzgft;`PJ{US2y8hG9^#h^n
zZ}~&l?^B&}zo*J{KdZ`dhpQ|dSLdF9-GHj$Ce-^j{{!oZucf_}*n1xnIUWimhnXp;
z<1XoI+7xLuIFTDQ2aJgySJldBcglSDr9*Mw<D{*q9_ek(DP!U%$B0ZubP<9{40xGY
z01oAMCD(wFUn%Cm*p7AOAp9No2%eLb;`bQ*r@)d*Ukke#9Sgla7qWBuqjTENbTbt_
z9L5RN;fd*j?X=@&w)Qh=r#3_eTbf-CeGWKh<dfMDomuhT(ywEC{*WbuT^w at KNIDAD
z3sp?$(qLejiM;t0)kkDv5?>{$f}Jf^n=EZq_mbSdUEqIT`W2B$5zmxPw#?t8-;lOv
zH2#QtPj68OsAKFt6;JrYh#c;QUG4#58BvaZ_YMAw;x^=Z8nV}KgMkkcbq4gcDA*!$
zU^7HH&&hJJA5U`Sa5uPA@(#)g-2wV;p_}9}{lW+xVQ-SaLEh-hp}K*u=;%!5+~Ar%
z0Icg3lzq5pFVd6vf9NE5ew|VF6uW^5jn2V1_!)MA9fYHNsJ|?k<YY;}982Cqo{K!{
zD|IKJi&yU1K4|zOUs?B(UyL8T-tw_AVhiv;LrY<^)yj%3e5=OuJnA)4zw&b)+zK#q
z83u<uf$EfH<2yg2pvd?3eU0ksFCQ(-qQKXVc8K`&Az3qh`A6Rm-)yMi0%>>W+<LDc
zCLs?L{68FrYfeMwz_kH~nb1-tWE!=0$)k25*LNw!XV5bE(}-^ja`tDW{=l3PzPv7W
z1HoUy4mho}3;Ko?KGG`@fzTC#)~SW5bQH(IKeXLf3%lVJ-3Z8RiC9+|*aoMpV}z+k
z7l1P(w9feEUm at e)ls1GP?T<0JfS9vYu=^lp4fZ)h#o?^{iubaZ%KH@@><p0sm8Ol)
zJ0kQab_<`|b`}PiYuk>JSPRH$Q%+gGTSadsu}P9)$n~5A{m2iwWwJ*9-F$Aet?`A?
z|1e)2-E2NG`jWYG^hNyFlU$lvXQ(E#X3R^HZH1wTl?(M(F%04+TW!kGzuF2$+h8Z{
z)Dmtw;1osOeJ?QXi6$Yd<dF`~|48W{>G1XR;^DvR^18acp*-GkE9+_KZEx^acA at EP
zRx!aZRtQ<kVTV;y4%h{N9p`tGGSnHvk4Uc~ZsmeU-^^lAr<LZ0l_K7Gr~|qtbTd<T
z#=i-^nK8+c+pkMm(UMinFcKPV;Fr(||E^m|R9b<T)NmWLN3S8bILhaSjlqrYPUpd{
zC^?35mU?i)k!r+E-y-^Fe;XE{%^Br>Vy8hny4_PmJ&oj`S|Cq- at f&HR8u%&7O7i%!
zdi0-r;5<*~UTI8_T;>R;!N+gchQ*b+*=b?pjc=9r0Ta|PDOsBW{N<I3I9gW{tO+BW
zR!jGoge8Ya97!yZ#jjQCkDswE7=2#UJym>11blb?76!UHvya%Cvhqp1#prYRZ^9hZ
zO`egp3P04NG52yie#ngq?&J&-W1+ZhR*wF~Hg)vR at Z%i>XJe-s`?6eeeWi0p{P{t4
zl at 56S%7;7RA^U$Q=E0r_f2WmPhxhzaf^UwwrjtBJHrLdWwTj$_agzK5dEa#@UD>)L
z-n)s`;9k7nru;4xxz)sdGPeNl8VkG`Lu?t62Id^GV>FEs?HKK>3gaX6C0CvCi_f at Z
z=KX3F4Qv`Y$1v4#`}%DhUnC$Vw<QZ>#*KM2E1%4N)C2r35W7bf`^fGwCc$I(7=6xT
z_ZWSa*gdieVfWAzyT|A=#O{$bir760UC1T3sdEp*5bRvX8(2G$&&WmAp?Z^$aS?s%
z7}33O?ikJiyPR=}2`|O_GmtwEV`-yVIVJ(^(;S^zQIS<Zu2FZ&z-??QNCLJR&v~`-
ze%2_{&5UDYeT6)|4e}P|wTwH%E9<s5VxB~K1Lt%~zxHuqe|ep;bq%)55Z4X7U-|vP
z=}C^dv`IgsPyJ?_I%ZihxTZ6j8OFAJ%re*se$zb(+Xunu%nmyM9p*P2>kyC4-fBhO
z at NMu3_h2lQMsVme%aU%?siw9@&oDdBf)B=&^F)VKV8W$eZ3Q2X_O$dsMN7sdMW-%<
zlvm>rw|A(T*o`z-w|)O1ZX^1}2C;9TkAoBKFviXpalH=rZ=y&ZH78=Rqo}}`E~x~v
z6hk$k4#+QwSdS@)CI1LplGkY_w&+`svjohCHtiE(Kg27E4enFKgg~}Xd17W^dqeIs
z>1lr}iSL1a#gO;|$_>B8!3ba2iK=Z*;YH;)=wG$@`bteE?35`aezalp0$~c>(`KhT
zlN9w{1<0#*>%*;`!V>C6!Wm#2Gco@>A#zrnl+MF*m*U(~<X&JF2Zt?!d_R&3k*83@
z#j at 8JP729%HRhxrANi6LO85vMe*`+i>uXhOw^iVmnTPurMLXt#^TdA1<=4~9r})<M
z9?gH$d08%wuM~06zd|;!N;=4YT=%V}$rw>~6Yp6oPr*EhccXnnVB_i(fbACEfIg8-
zuOnqB_$8`Ep^S25YNM`*w#z)?S15lOxyx1yQv4nRwq-W4fiogT96nLxEEhS07yE->
zWC>(C^pi^bzTx!HOXDy<AjW>l7p6-~?$ma<bHJe&<kMtg%)PpiqedgwE9Qzoir{$7
z%0LRS;X^{>bPmFKzGM&9w_x)oQ%-47-p0yX%reL*Un;+BObE0_JUK#PJ{g!KhwKsX
ze&ziodf1b{#5Khgrn?_gwZj8-R~?uGb at 0#IGx-LVX|8AY#MvE>(KlX9Mn1csOl$xA
zIMTKtaG`BLU at Cbxr#F4O<PP|ZG&K%GnzZD5by8n(;8^VegV`}DJ+rff(+u>)UcrVs
zE?^=Tw6Y+7TuJ_Gxx7J0dyW&1fg5fE?L-`MuPm3(7r=cf6!7zeS+;RPqAgj_W1O&}
z&3vq=Gp$|U5fZ8UW+$-JTpDmL4%=Uam0NKi-Hde<Hgwt!yYQ3pw{2I1WrWup{+#XR
ztH_PkM*K;f3%t5+s!K6zS&>&0-3N^5ckJu0lWTs=+W;Hb+(u_{F7!-~9%>f~5&Np9
zJ#h#k7W at 1|c?RxVR_|rL4({k#TX7Be`O`^G1nj>;-DpYW&ysiPR7o~2%{EWSBgeO*
zUWkQ&ZW$3`NpdJi8Ekf8C3s&``DV=2XW48|S=hdMub=jghyrH3Cu%O=DWnkn7I^Ui
zWG#cOG8Oo)Z2Er1H2yf5!y^1hY at 4<Kn1 at Jd55C`2)En6I#!k(3;~ns+rt)WSt&Iz!
zx72N~Owp+{ozVFnpid)@pkL%GImrK#Pq}LKqC82-=0P4xO(Hn$yPR6n4jG-~8fuM+
z7v(sLEzn$u$raCoqaX6dG_03jV9iY|?c}(pqhwQ>ooss2L$V&S#o9*F9{4W35h1`p
z&qP}w4+gj=7lZ3*xPLlrP`p`E6rD_Wu|=8=jB&&Ym2zHblW%Y#F%xC+;BUDAo|jjc
zX|d_dT=2RW9IAKC(wLZPPDNF7uqQNLFXa5wM4Rwk$bchlQv;_(6e%t=7C$#qi040f
zWhP{XWr=sd%UJ6O=5Ltt{#K~tR~5CqNjnz4y7fmkg|8P1EoSg8xxhc~(D~Y$gq1Py
zS>?xr*8({%SLvgnH=j-})T4Yo+=b{H1J9H?*@BqytX*@BlxdIZ at 0%r8VjPklQr<GR
z`z_!V=2A`Iw*E2p3~gYYDCc)4Y{2JV7fv;{2WM}_7Tkr&VGe(5quZ4WE&^5MCk)AN
zc8u9UbRao$<p5j$J(o-7Xzi;+&Ltcijm477m~(ZNdf-gc_y$Kje<eB_G3D8D?K>IT
z at bVN5aOmZol`5Zy5htOGX2aH}q7CxYo8Sff^tv$3ldlBp!-wkN0JY%c-TDdBo#1zI
z2}&BaUE1-+xyrRD3w#VC6qTd+)#H>*kUW_e*c9ZsQ`7a}qwIq(qLsbeIKh=Rv>NtL
zJ8%eesKGp;k;J#cAI=ha`Ym9XriH!t3ghj7f4>3Tbf>}nX45`pZf6&S{SaC-1bijl
z7Q)Mi=a$uN-x05vg|$RqT15Ilgm>8vb|t|<Nj^1INW6xv$ZOYz4YZmblTMkCNfnqL
ze`?;uRE;D59F;Chq0};U0LyjpPL at GDmKL$_A>RYzE6Q&_vagf4EYv~W2rkCP4TsZ$
zSlD<v35ROw9r$uX5I6Qr;DU-%bl<5dgRHM7R0vCcOgcv9y5||p)hFp+MVVn0j-NoA
zM)5;r!1CCY%^QS0-jTBO{DQB-!Fe^u^zM at MA+_MS87$A_cLW$ydeWa)^|8oZ&kb8y
zB)z+`OP)HQrsRMnx8*xBcTgd0D&i)QAJldv(9IgFZxrh*QkG<MQLqd4fCHn?tO<0n
zg~TqE)LFVQb^!dUAvorS|L?!-5x2J_5ueBPXz+x=4$&?cray!|^}AQHwV#ih4!dCy
z`clx``&_y<7&7?#T#9yv)SI$N?t?qCsIWv57<O<R@~yNe_yXK_16x+6h7JELk-Ngq
z;{R5iYLyEy4R_^;>y*~S{7|7rK8BIXYG8$e$@54KwIwY?uMV6>WF7b{rHzxH8wuM)
zyP&mnI1>w9kV_1)>St>ldHf;aasJ<mS&%i9>ny at lTbuA4<*o?fch(tOF8ep(o)E}X
z&yjTzKB$Ydp)nf$Uxof3$*&gUOXBz)kZn9V*8H&NNxqQA%<v|}J2ylOM17gkqR=8@
zE72W?E`F5Q9bU;KenD%yJ|fc4sJQ42f7JTM1Q{)xgSk)Bf6hxh=hc5MK$g*eoDq-H
z{m1<?10&tk<M7A5rEQialQEmWoan$qo_{eO{5VY!gM%Bi$;fd5eMGswun00?Ma5(M
zPQ*d93j=Jmf)8cwE~2}3YQcB(*1sJkMH=VJYLd$ZxePKa=AL99i%gy9B)S5wX)wNZ
z at Xyx}zl%*SUNc*~<}c;bUDSL$`z6u;ZLnQkKZ&#%;`+ZhwZg{=Y at iK%A3ujBy%3l8
zSK!pAFrPv8yRN$m4E7+q?|}j4hp?Yw&W3!Pg0 at XOTES)yXu^FunF+RuYG4Jxt*M8e
zkRQw|*koIj at WQF*0#t834D+7cQ<2ZRPRRDTP0$t8Pk<9rHRFIWZg;0KZo5_XCjBd$
zL470I*sZV!&I~&PIZ6+CN)Q6+PS^?$N&od}m9VJ)dj^r*d}Q2eEK!{HGsG^NN!}`x
zcCtfS-OpcO2zwEDjr at op?KbG^`L4(Kt857^u)`CD#>IiR8$(Tpv2N-k*x_?bPvc%I
zxc>T}ORs_r`puU*W6#7)tTTT2Gi<neGIkK}_%CeRU{C$|pn@;|zsCf892(fAG~n?{
zL*G|wXT&}M890PGh_w!O32iWWj&4CxC$^QSXCt=X0h=nsJ`Oo-0uwHgm%7^2Jh6G5
zm2)V+0(m_#7RRZnOPCkVL=@4X(XrakV9RZnR%6~dtZ<m034BwQOYEGG>4U1<i(x16
zt4(sv-JtypWp00EI+HyvPD=w9b>;sWiv%y#m>GC8Qzs?9y)vmze1}z9U6>=!wCxsN
zu(b<ksM_vyx{E%aK7>;NC#M9zWhU%W&?&f~=<hEm4|?$H#O6Z!8n~!31Da~%*6afg
zVJo|#R=q3 at vc+u3^nqoo1p{!=8sMB%<;?->nZGb!nOC#hQHRhZNA(5%xUA at u!T!1C
zhM?y^M~)dQI}u}F0#4I{=}ziD1lLyHjP|Lc7g3=EFI_7u+gF?_?W&fQ{nI4-!0UwN
z at vg>?18>6KzR4luZ6_`~-o<=vS=y<99Q*@)2HZD>OkJ5%Sm*;gBYz0kv7f*r;S}E1
z?1#<zkZS{v at ncrN7Thkp{iy=i5iGz at 7|*<XM%fNw(a~-4*=Y9{M2z!J_(w3-+22I_
z<|xva|I}yW%g~3Fwd5UW>qcPT!P!IJ1$*TZE!I$exjX}NQ!^Roi^;sYY(z57Ez*Xt
z87S-EfKA5JWh53JYvOKObdLCKt>e_Njb_~LttJ at LrPBXIc$0OKei-3Rhnn(tyBCH$
zF+AX}r`)G=NZZm6k-K3V$0 at fdlxXLX(AQGvhi|{6ak9C?%OVEj{ej_RPV7v{Q+^4Z
z$#ad8ehB&E5c20e<W_oN{#tY)Q>$~fwe!yZx!znq2K at zVf>-+HR$+Eh8~XS4=q$4K
zV7*b4eZj_|oU_sefub$=cC}CEP%deWb{n^h$pkMV;)}3G1pzBJ3*!Ur#OdKn#ySIg
zovp>dBVT6B58OyHrj*qrZXWF&%_WmHMjMRv-i~`dk>1vR#sxRKUC1qx at pDqAxgc;V
z;cpPP87HhnK3#I9@<w`H<wxlU;qU*iasSap`7o3>UQs2yfH998eUP1iCm8)V_&-`p
zl%g-_2#(jvQ*d1%^uHx!ErbsU_0Icdl?#2zM%Kf~|6Nx8_p*|;F%@g=Yb4j9Hl%-C
z!Y=wh*2rGy&cT1kf#7)}eV`$~h#ro4X`3h)=8%48`0<fkC^HOgf)B_EPM_b1echD{
zJAnMZ+nMyy!3ESqe1n_Ptrp%fmwEs at z3^JfWI+KRtRmfWuFe=5hj}m`vNh40f#s;D
zON*gTfg3{Hr#yDK{&lzN_jQ*Gd)|{vi`ZBo6HT)mbR<*V(%Yo0%bvvZY=jE}&;FY1
z*X{LgBz8JUhi3O5bz1h!?{ymbd!0^_I=M5EEBE%F>b26-f1sy3xJ=TnVn1?-zJM(3
z>*qY!6UX=I3J at bRO@TOJ>Q|491N(9j=F2`Zp32?hGKoLqzvkVGo_V*wU2>qi2f?;Z
z)=!RLazs2%56WCPSsmLaO98f?;BdBKUEDzZD9zJ`px>@U-&g?|1z3^vZJG1NHtJ?3
z^+N9LLtnW8IkydKL9KcT=KNU5s#DOXLa>d+HWb^b*am`&IRo>B0srUV|42Mzc at kok
z`R^(e^lb|AmOcph-OHF?feps<8n|rj4A~QwrS?=DXSOneR#Q##hyaIig7iD&#ttF=
z6nrzZCDxK7*nhs#`NPMRtv`H3o4ARTLGl~gYl)P^TT~*~M+%9x5ME^J$$W|L)`aa(
zc-J!My{*C}ockH?I!_BNZhjShC3Qx<mh?6MZ>cViU1%)1{!~bj=qKNdwL=&Io)2(4
zI5`8Zt0euSSVM4vf{L$&PSV9rz}m8snRYTO$%=WQ3v-GaSQD2iZmk3RPE*`Khe_q<
zaKzIs{uabaOk+RCJbfkNB=nU$*dk{zCego>f_*Kpo_<)HRKza3rd{gLE*YCG+KdJ0
zr}Yv);@e^Nd3bAJ8?+Li&gjBF`E(E?LTt{4vnFkb1G%{uBVXJmhbEy at GR&Lce+iyw
zSTy6Yh1!>6U0(~n+_|TKQ(%}nW1xljGX}n at xnX>@tc|>Xl%{{32n05O$sdAes=?KT
zJUbdY@!v=q>V21h54X;^;y>WG*av<KHFQ69|NBU6kxTkyzny=^qq_YI+}g~(KlwwR
zAiAP|T4|AF3c)-cuO5&FeApMBoDECAfURgTb3)P(QyqIQW_+D-b2jqA96@{EMcyFi
zU}9gL1K#2M!x!wUFeiIqTY&8pY>N)J3V&&?6%s86Z{`DAuKM>iZ}902+64dgUohuS
z0p at R2e;tD>4lmh5<hR0^9=ojJ9(Tde8vQ-ut)|p_9ScaJ{cj$w6845UFgFZ{O^-3f
z9)Ulc<RCQ`KZSe(utVoB_P<H&rHcEovD{-1;rAXXU)bU3x%lQUXnF^)B)B`n&+;9G
zGl`4^zqS_dy99r{6L^Aq>~Yv-vgoDa{Z7$;ABEU~?U)ySmfVkNft<Ao^XpVnMwA0_
z+L+^Ch*1+h;>RBp&O~lq<fh3l-l^h&LEl7t`io%0V8P+vf$NvV0yhX<T`KZI)R!Wz
zsrcrf-j8)(?Eg1Vw%;J5k=#r-F-P2hoe)?Y)a7|>3*h(tl`>(BA4mMuYRGr@*cWiT
zFb3EwV%IYK%1zW<guHoO9LKZ7alaYQ1YZk(7VA|L?zIxXF?kO#8+WjF+^7iWJEVDd
z&MZ7HhddAONg`MsWp(<Z=hpV?$KWxeHWK`<c<+KFg5kO$d7}Tm5kzj||AqH7lK$CZ
zhK>G7$aRT0zZB1%jqM`n?KNV|*9nv#b6U*zL at yNOo|W*W?g_ghau{7Moary$AD!{D
z@;|N%{~m&NIwxZ9J`u5Z(RUN0+G2z2eXqSiFpW&BWTd&iFj>SlUgLmk{H~Y{j2MpR
zeGS`eCNPt?PPlt_V9qeI-RQp#`4mkH*#cKT5PnBLj}LR9=#yExkKA|I1<=TF!k+-2
zsO{jcvYYUMn)YlT^3;iGL%O8V%6l!U&F-73-HuDiyB$_=;=qOp8J}QNJmW6oB5ZLS
zY-Vx$I^Z9W_itBl8#OJc&qdud;PQ5pIum{>OJ9J8n~3;phd_p at lpF>|ueRTx0l(=r
z@~w#<<8~Ez({X$QGuNTyU5&ZT!4d`Psl at qgZ-LnC`rlP7aZsVeM*&~qM)Nbo?=fbD
zej?W1+=_QH%&>=Q#>^)=+*hqUI7O45(+4S#&uVn at IM@b{oD8Uyr3ci&#@LPPlHLx)
zSZu=kZ-L7pMeAPzA92Q|dbfPN0(q_cB17|am7X^8eelRn+ at 5^OT(|we>U_PzE|xKQ
zh*g$1#EShsyRL#ft2<hK7zuf?MwJ3*vk}J&HDS2t>*!>L<Y9OcK9m)DJ#_A*KV7e+
zHqE>ca6v|F7|NtkkiDXe*=E^{3jsgNlmS-u0P at -$#J7MxlyM8T(Upk1N{Ma9nAD&?
zu!)aJFwY#5B>fuotO|2uUOOk-dH5gpBI2h*Tf(1YpH;bGN1S(LUR&js9dU;@*rx%H
zC*$j22Toy(Pk0Sa&2zmDUI@`|n at 6vY7!F^{Cehb2LG&YqYu94FKrY+S=R(sbw2nXy
z5|pJ~$er_(sDmv4_b_8>$+$J_HYp1iqV=!a{+$E$O)yU)SUS?y!1K(eq~O(S|4qdB
zL?ZT|93%do#!cceCBf5)ZF5#WZDK3CtjaBiZTY0id|p_<J97W3>FGb_6pt0)*pFj>
z$PH$Iiy3`3L1DU-am<6S!@C#4&(MSI0&E|GL&eu;Ra6`C>BU;>eQ&l<PKh7$4luj0
zeQv4Yi2pGT^4zb;pPD?SkNu$DJ?BQ!rGwY`%kZy;u%FfY?yW{Wnkxk4!|bzb>bufU
z693q9Z~eD_Y+{>jCj4V*@Q<Z$?GlpsF8Ie>z-Rx4V;$nL*;}s*iLrv at 4d9Q*fV;yF
z at 64R>P>cu8z<Bss*@U)kmX~Odr*~YroIM;Duv=rn{_5yiX2&D{8RqzI%wK&iv*`OR
z&GZB5-?gNVEsstKdw}ntlOacz_&tJSCa_KQUWX2e93crJx6iGLvsthsnK*EY#_w{N
z81Q}Rk2g!EnCq7&EBAvtC=_%4yT~UIa<D63kNt9g6T#cip^^r&-q-uSQHmIYVG5y6
zb-xp_YQJE9=?p`zS0ZCz>@{E=v4y<}JkBty*9t#vj%kO7bE|vNFUGAN%tbHic^+fq
zB4Q>E%1VK|fWOo4H6p+K33CCP<&fT_+lXI={GnGye?jD^RaZrhyF|zVS!grxH+s$1
zU at cm;jl7 at u?nRsou#`i1^1QXcK$zl;+5aT*wphPPulhSlj0I$vqm1c);4VJ?>60<f
z{%`Et)@2x9Noe!qx|x{s+F at ga9Sgeh?)}}61 at zFjXJOxg<B)NMAnd#P$JNq$uip;*
z?%#P=^zS^sz5~xfZdk-^0tbgRzxxl29A!X^@K}tyg`67w@)Ew^lEY5>Uo<1gTGhX<
zlC`-I^5XHG@!~p5=Huq*%$Tm&5wr<8Pryrxe%}E+-e_QqFz+2o#4~&}gLIc?Uq|dQ
z%KQ7eD)g_bKmBQ4J^uT;+VE&yWs-5-8G at Jd_&NCP at F`TXz(t7jM<}&HTvrYJ4c(#H
z*Zx$WBGl)d=w%f8ioTh&p*|?=QZ$SCDT}lf(Vfli{4=HS?Vt`Bf2u<h>fo=qhgkJq
z<b1cpzK8g(d#KZH%&$hhfHnxz2b1*}b7)@JVNrJ-hq^5hW43L;J=f!X?XW))-nhH)
z at B9n>Bvbs3%OS`4BTr8Ow%)*|udF^_qJlgW!XRJQ@|V5}0^Z5Pxq6|RS?G=cu42id
zBs28qYRUTQYsD&hJ!IFffGtjD3(38R7rPm-DY`J`0nxpD{UIN7sNcw~PIfFa9&sjT
zSYQh);1?ir132tkg+$^fgYGjHHj4~xsdOcHqynw&%Qn#axry}3h+)89kA;jeB4!8C
zg~W0buDr~cUH@$_D30~$;HY~v!9l?`kU{JLWKMw(v=05q$CR1zGxR2`!(PRv`LJDg
z%7%$+MW20fl$(54Vh14ea25-U#Z0uRTAb?%9=v^=8n%up1UC&iQ$4{gSx;<pVTg$z
zcDru-4+PKbq_fC5O=p72!{LJR0<SnGf#4FKeD$RxwQ*ZTjC1R5=<T;PPK?E;`fUXF
zvED;&2%OgVpx=)EAIv%2?-;+D(6GY;?K;n#QhM(XjNfh5HFt?h?xvAnb!WQGRU!Ur
zU6tv;`(<LT%SRlE+OUSao8bQ1-ziK7Zm)yrZ}ePd0nxkdusiKh at uk50`FfwidDS}S
zU?1_A0ex(QF>aG{uvD|(822$5cf<dT2W)>*!~;5UJQ(_?Rk-l!1!0<{qgBiswd at 4y
z_zuApLZ<eE4nc6x7sTfk;+t&1b at 86}NUKF15i!Q4dqf<f>R$vGeP6sb{!cc6ew&i?
zHQa9leo<*@ze%to4m?NC8?G7nD?9ak?Lh;dhplydp|xH3nb-%Q=fn|=dVHr#Pv1p(
z%aO+ebw(exA?|K=k^}Q2VlH4iC{$Vq_J~VI-`Owv;1`k at F@IOH)vlU-&(l`_KYK!9
zIt%Pxs|LCt#_E$_dD_<vTQG;%Pdwj(v9-zHMR1qEHHQ6BcYG6YAFjM#XPh_IgTs8c
zli0$<@?bnYHdJ$ujH}0xyZrxWBk8w|IHjGM7W7x^xS6PTwrFF!5)Dj><UaK)vBeS0
z(vp_KbkSDuvo^%v^{5QwxrOP#H7NaE7z2l3kNE?G2>EyP3K0W!$Xg)%&6umSgikhW
zBy`iDiusxpaE&C;k>;7B2eCCnSJZ8PZ(-x)(Q_cT&Lr>Dq?qPsRaJhJ)lNm>_%ssV
zmUWtmAvOV#A6`{)Sd*gsPYQH^tS^|ir2!-lHPazi^1Fq3=A9|o&`lo8cT0m$S!;@5
zGoA+y at T~lcQh(^WkYn+DA*+h{SUnv6&*V}2C5cHlBczqLir%ZdT(myAHZvHy`xi`y
zgk}(Tf_TG3?33IVIn1`PO6|Fn42<odaPS8Mk9U{EGmTy<*#g}<9qVK}=Geb$-$@xh
z#|d7$Ch&F<eKi;M$)}~yAig*I(Q()oZrR$)cY)_R%i^|yZ|0{A{NINEITm*_a84(c
zqF=TX7%C^RgTS9~T9U{$MM$@{+b`o?Rno2!9J4894tZ?l<&;y at rV7NrQ+mEhm<O%}
zcfBw7S4E#>(%Ai*;%EnOj}F8<|55KrXd4aMfaIRmK;E6ecS|PmRzWlT?<QtYukNV1
zsb?H;N*c5E?Hp{g%+}fekFz(AYwFtG#=!|Nk~n}2ky<sD(sGMfBvQQ&6-3k;5)vXI
zh)P1L)|vx3AXTKTwzgG>wIH{(Eu}crrh{piI#^T`i%8=Dq)IhX2b|3zBoRe;pM8S2
z_kO?c`^WG1M?UA|jQi}p_TFo){j6t^E#dfz3prd$WBz)P`U1M+_29(~9$PM|?!(8E
z3*B}$-f2U8iNgnTnOP#}!n(PO)RTGPFXpV4X?GXSiK&KPe|Or2Y4=k&!YjzF(og%9
zS*SF1E at xWV3GD@SE<IIWqdn1l?Qy8JQ+sSep7>l7uxR);rFwR4#j$K)ZXZBK2+nKX
z6s7z5#J95K2=c0(ME!QMzMFaf;k#imv{gRk9SSkxaSn)B9Bp@!`j7y9tov(vz?Pc)
zJjpMi0B16MKSIbZ_Lua5^QSOKvFaKv&+MU>DIVd!C`h^LHl3Ks(CNT3C}4x65_=Hk
zx&>L6k=!!CO{GU1sx?fU;we*UIDV=yQWwFC)wxV8H_x!R>@j~l_{EkHIYXN&SnR4a
z5^KunC;eSwe8<iBE;9Bj#Nd1(c!*@geqAQ9djeo=asKY#^$@%`7nqKpR^z%$1Y6ts
zF^A#%q94$TTR5Hx|Hp&i#VQ4^`yxC at wMdhScg*295wjrjg&y>0vFOpj`Gbg`DX-Es
zwOCgQy28g0yq~(B(wT0g-UB{91AXW#(k~mlQ_ra;@qa*mtFPZF30_QMC{_14{@{s<
zE3;@X2(LFMOkUKSH+gZqAL1M(lM!QEh_zrr7wL<sm8ds4`8M?*kxA%h!0Te2_cZ}x
z at s4QXc{I3cYFDceSE~J%#WhPwy~IO@)m{e%4D&bY0Co$vlN^WtO{}rNE<Fg_J&Auz
zeU$Lmy588#w4*M#qZQZOaw&QQn|lcje6`{~`U80m5Ao}~pWJnCOT<2MfFLKTi<V<d
z*bdoxi^LR9p0;l6s+Rxar`M at xi0AOe28V=Rp>rf(R7DlOo7ED%QAGGR#gaDUsJo9C
zZkJuhyI(FVd{+Z53UEH#%Vk~bHL^x?hcseMxjMpifJSb5I at eCF`*v^PJ7R05qhRC+
z-6E at S6X68qHzJ=pP1*u|b_F<#mxHT#1^I9KB(+rX9V0DTSzB>sEA-zZ)<J at -35db{
zYzO8P^b4+uj9sc<Q<g#pUu^BPPtNTwkHz~#&XGJi;5)nBe};lQecs at 4=`6OTqzxn9
zK>IzHavqq>_tBQQy9yCQjC0#uOdRBHyYZ%C0gv&KRl58WD_tep5#A at Ii(DtAO~CX*
z$I3w20!Z1^rOYvIp1qsbgXc|y-E*RD-}W0+CG?ar7LObclDk^{32Co0QjSX`-R2xG
z+wa(%e1Ne?Zgy=;Uf126_`JPeoB+Qj+N~93*rDEzzCYFchJf%59Dyt#XA-aVr1ZA^
zq;$=>zqd^&&ms%j?KxZ at 0nVv`?|>draWW8N^9C}1r|u%M_t)1yN(%-2-=XWwDXe4`
zn||5zq2x#6XF5o!W`_G2dlX87&)4?T=_g$Fd;k7_mDnKm>nPWU>N40Qa}5F#`%|dE
z+K7uuY1c5xM^yH%29Hmk<Dn01eT1=gVEoliM_hgnm8Pg}j<}EjePdmnyfD+y{oWD7
zsj_;M`$c{P%J(7o65=pV?F_BL_G;e+j2TWcZ=qfCyk8{!3(s_cH~+e3UYSdK1Y7`;
zoHNkhJU%%=zV)}qZoPu?=Ti}nu!dZdvXs+>GJb(~Oa+(vOg?acsXMV=oCdt`?Q>q)
z&j3r9$R7I`?G}kKyXXJw+(6#HIfBFybE^2Cs<1w)`jm`=G;}fh5_f%3m7>RNY|AqB
zx`azaj}jCJUMWAL__G!9q>$en^=$J*9NRd!+MFdQK$)HHGK>2D<38Ju(xPE?p+!Sb
zcb%J5ueJs*<vd24Ps1FU4ZCzCI8>J68Xc(z+Fw1JmcX_`zvfNDHU##Pqcz<r&+W!~
z1kqpD&XqNIpW6rhei?k-X|Q>e>TiwGcggxgFY;Tu9!mMf;4LGlg>h!rhf1 at ndv54m
z=<+={|8PN^*=ds^CdrBW=LZ3kH6R<wMN&L_Yw&CuIVCYyk~$cWW!MH+m^Hks!B3ex
zH%h_LH6QPt>(ye69pVZf+}Or7Sljx(fjlXw@(llwHr~tr{mt<g5=maH{KU{>crO!d
zHxo{VHk(uhdy&_d=co2D(%W4q*JJ2Pu5MzxDZQLH*K3r%=TajUvLrp^OiW^9FC$fS
z*CdKuS!biJ^HM|a#Rs^@juD at 6khiYE<6oZ>Il4xC%-0sg1zqlta#xb$mG5&Np<WT=
zL*z(=xe)cazE$2$d~54Dy`&9rE(+iMmCu*)_nU(zhtZU|<Z&AE&OBu<W;PEdd3=7X
z(*1r$vsY5{?fxPcB>~UxNsh&*=ExS?GSi+tc2#r5FphubKhv3S_i_9J6ER*z@)8lh
zxt~enJjAnypq+DK(xJ=1uO-$5{aRb`Wg9zpwgT5ebpP5`xpOgWyO)VfacbQ1$Z6$_
zgFL2^F#v6`UGK6T!MA>l>pvN2Gr4vhE4R1~?}_@)@pbncT=T!iN>j^?7lhX_R^B3G
zCFLF~dlU;WMq- at w*Z#e&l2*E=VI7QJhn)Mje#w#I{g+zPyCtpbE<;Y4KT-CjC_8X~
z|5<jyU#7}EA1=B-P=9BuRAXO9zEjMNzQxV*3salZe?MXUkK9?%TYL9>$o4TB{Y>Zc
z2HFd2c|IE?--+9Rb#O|4a?jO*tlEm}5_T*^4oa-`!S^f3;%7IwdcYr%`bj9(01I^B
zDLV~6TPLgErY&iQJ=7-1hhCO`VQTHyGea;>lUNS#JE53YTZsP~<97 at 3yJF4fmA}h@
z^@O9Imj8NIH+dG3uOAR2R%^Jno|X>iSEQW~r}-!m`nDrGDnm;Cdpe1|5tE4bv=O^Q
zpo1RRyXQ8m$3<cPLFxx&ea!f=;uvt1<5YWMmT|0DcOhKl)%d<^sE-Y_6xi=f)Uhu2
zILS at JjKdsvOdWPk%Dd*)C9_$KyZI%7CfEy at 2|w#G#?SLK))#J;lekL12^-V at n9xJ}
zSt}XD+N3!rJf at pCeb)kzR}kyG>CFw!H=^*1!8=edvNa^W3)~%u!vIFe(me0NKdN-V
zUB&4i*XXp~<@B3A`N>oVpM$kYl1D50U`)24Kxh3y5c+L}p7CfcrxfpKnwxzh*6?j|
z8+0b`*tMj-UV7A=bm1R$5<S{q5E_|_<LmHCZE$KEp##Z=T#Es>xnc`hPe6IZ_~n)}
z+O5DlOQ6dpxz{!nTktFyFAy9Fj^IpO{|=ECwBb7(A^O4(wT8)kF^F4Bje~#aEj&LB
zd_(U;UUx(1I0gTwJji62q3uB|s*CwrH8xlte~y#~HhvrM#CNABs*h`=s<F*J<Hv+9
zGyQADK~g49M?j(mczwm==CJWR{uE$<ld<OYRJ at mfV2lydq}Vc0mc)VmEvx#$SDoS3
z|2&d{Gt6Fu$EZVE;o2<S?WFLFkiO$ID+HQaL-<J+Z-9IlX!B6~-oUrK#lIVWFCm%D
z>Gv06Pfjq(kasn^7x(dlUa*CGkabh@;mmokBQcLaZ-6|iBl#26xv-bpSle<7zS~Rv
z7RH}zo^nYWp7}Gr^_j?Y_!GW_?;w5?I4W3~e at 3uSy(H!pp~ED#_QlM_+Lub-pD{UT
z`qVV_Pl-vA3ZiouGXgJ at z8w4r*vfXu`cBrK3ayn5{SCjL1q;|`ZNUDa$n*y1hWvQM
zf(aJK#By%pn}mX;sH6K>=aDp>7kr8H;1h!Gn_FA4`XN=>;Ndq9xfUu`w`ze$_FK;-
z#}8}$8hpC<a7$}t!)8#$>LrozgDridvC}54cSXj*XXUP+UgQg8vQCTa39k-zCfpDn
z%a;jbVJn0}@0 at hV(`+-w34wWA>l7p!#fmqFkHztchdg;*=D!3JbyeuE`{TQXi3-Q;
z<l$ps=MM==FiTPs&2OzeZ8o-^HcRd$23o>BPzP(x^}UJaA1=dx8t&KNTz|z}X-^!e
zpS9po^UL;!j*fMCQKxkx-oH|?q1o%gKdhq#qJcIu^G}d9XV`sPM)d(3^N8>;2Bw*8
zdy0-Q%tm(|3UU+fTc-*(%%022#0DZK)|XH5Y7PIqM(Q*Yv1f|=sLvY%@_z$$1O9f!
zAMyPI at jx&5Vl5dzr*F5(V^2{z^TRjm9*`W~#2=D&thN8KIvevie02)d$3&M}`?UE)
zURuy{Bfa^f4x(G>#`IzPz^HqXY=K+RU(d+63C_)+9lXKN`Qy}^Yb*Ym#D5x?8ENs?
zwA}RI^%vBeY4B+B;e&9$$FmE3<o|^WNSi|P>rAr1k5EHZm9J2Wz%5JWLmtcHkF|&$
zv&ZO;3}L)X?<rn4{h?SxxQzrS;d|*&zCz;6Cf;#K_1DcuCuKm_oZ7s~`^A*jn9|@C
ztQ~LxIw>8z0<mK&z*V>sYc+F_-^O<pxPLNxYAbH)f>$8$uUmfv_GCLP;e8%H2IE~Z
z-lgGKnimP`t&)lNBa at 6hX{XB1DCabIC!OKk!228VJ8qsj=^w-glm;J=J0C`Qd0J7q
zQ7Mv?lRi?lLA8ote2ISuHg}H_w%+~4<sC|KIir*ieeDCpHB7YUA&y3wWOg|*hx~4^
zc5eEL>OqWTU&eg+Vv}*LlK5nSJBE#^L at rEa8hq_i)dF^2OW at rIr$x4b`mmDvV0{`d
zP0Ao+p>hGrkp=l21l->_$w6?44fu}6)FY;DHoHE5ZUT6KOb_tQ at L34z-9C#+>&P51
zf1TTBq0kVYg`oa_`Yf7Ze=0?uX9IGOLuqMd7yl_mchJ`y;tPhqZ4&$y at P91y)l<b0
zz2c`Dyrst^-_bPuL_g5b+j!N%9}pW6I8C;!tz{h|w~iFNg7_VXyidH1_nyj^5t~Y2
z=ESN;(eRTgMXIA570*ay3pUSu;+KHz^gG~}P^@wLC6uDS{SpUfa{BPBJH#&mIr{gv
z2CvA~Ll at fzzr<1Em$=(X>I!v6DK6po5AaLef&3_N-ADiSOTfObHGH(Yw&M31>*$Gh
z_&*M`cMfu}$iT}Fe?`ko_$%D^)&1?Sn0UwSuYjB!CUS!J<PjMm?*tY+L2wd%VO_1^
z9~U`Ne5bU*$4+Erv50AwpWjGqEyZfu1)m0D{w5->Z&C(gGHs;IQP&xWwE|8L<=G&z
zk$02%wiK}}wbHNt5%UeoTwxv^yaIFIYpC<&gE49UQXLKF>q~7HNZql%i-&IC1?q|T
zE_&FuZ3)PR-#!EO at HoWgPa*cOo9nw@`m at U{o##A|e8h2FsxC1|zlUv7)S8ea%%!Em
z9QGS92P#EE_(iDUIClj)lQ%aFx_2tDNu-}Y#QY-FSBvE#odk=(bVZVDKZBj>!%;o4
zL)?Am?h7c71Z5Sg4jE&)F7!>iBS3#0F$hP{e>yiw`FZG1{l?gJ_zn9jB^uW*0~cl-
z`fl12n}^s52Pb2!>tvRJKVcf~O~rMwxJE(x<lC;iWbDT^HgFBZj<Pmv`i8n`)NSii
zYt2rkaoS@|Na)o?%MhOe-(uTp;bT60a!Q5U=0M$d(`kzCgtWm<euR*+W=(XUoK7Qc
z?l;m!q|B~7KU^<2w{=PJJ^#<KfDbN(+r1fC@%EZ at y-Of(v`0##9`jO>!!IuM9xaQh
zL|fk at TvVif!}$?3u)(tMAmS%Ry>f(I{F$gv9+{i*zE|Sy2}`j?1+F}DALf4(u|F_|
z_OtuR>QRQ7MUN7eaV+8_PEGI_;bUUk(n*S=hMC)Y|L1YR8$t&5)St}>-cu8n4UDxr
zLaXEbgpbL1jN_3hV^xD{E52gyWqrf2`ys3MPzQG-C7z^j--VuqI6=r8e9G=IW8xj)
zlLWZt4*DcyA?r2%#E8l%6dC6ftp??Lh*d(l7odD4#K)wr?}*YLO+Z|JX)N0>?j$Tz
zp9q!^nE_|+#E7aXa&j*jryIP*?b&n&a4Tu2h`!Bnq7NZnJmv_-DR=(U63MT?Jsyn=
zQvVL0)zer*tz%rgBV)&CYEY&N=<n^waa7NLZ(yDeFgGksRP7*Zi^}z8*LekE01KL2
z%(&*2j22@}h!;2pM>b&$`?)b{e?PXruGeuM8lnojIm^oI)JU~5e7xup@*n#WAL_UJ
z_31(Krc$PtV*-YzhTjjLj`YiO0x^m4#@tjwwwTLHFkcoEd;3TiqXaLO-#S~6d?<<0
z3E*#lo~#5Xp>%CP5b!*{z>5QyT&>laJ`oEzt%wKe5+-w6z}4ky-!Jl-y%9W!(tR%l
zpM at S6yw(wfe4^UjuziWHU8282tt7Sv`4&|Yu#YDAmyZXD&kdnenumgSaQvwnmn*r|
z#$Bo|n_Vs%O!yS}$WLM0EgB&xN#F|V$i1+25(K|i>GXB{58Qf(a($4U=mpC497~2w
zZ4N(awp>dyHY&A2r}Ib7 at A64ByQukyU8Gf)8{>vLvJBLNM%mEE?(4uSGH<ZSyl~>V
z#@L|_o&q^;UqhQlaV=VZd}|c^O)HS2Z#VkFACUW3*c=<9W9Hy}d4q}UU7!#@gt=o1
zm9EZ at RKmVk4u1Vaa*kWiOyC^}Flok;_Vy9*J~xgec_7O_L>m|1RRqoh2jc<ALt7-|
z7W{M21ttRbF|i$E<CVKhsRwv|dsURaj<h%T25h=aF9z!oCj37{uc_(0zYKK}$gwoW
ze#FW|UNQK at 15~5=0ffs^|A3jxJ4)gi=}que25=bIg4HQ26c6ci{P$N2Q&y1sRns~w
z`bzSQ;2h)4y??5nlM|etALj<1 at esKms_I<&NAM}N1%HZP4zHSDgLscJv}-Y`2h2h1
zk;Bn#Km35a67_CbX7jP``u&rM=d>-eo!T63a(D>uQMf<wQDS{5vr^%pK3+8iHjNhJ
zTe~r?v_}(&7}sZs?b;mc(3%vA5dBtW#jsxrs*k7{@j38~D!PqNk6~u5Mu<+{5t<3(
z!Pl+56{+-an$Mywvf2OWj}tFUpM&vtJ$NFdrH_m<V*5^PPmprHS|6o8)FI}X5 at a=&
z+shPIW`e%z&_weU>)9Q%foF5%m#m!~w6wl>$$|D*#(-D@{|49DS4D$5IuQ3&tiX6@
zcHLZxF&zAt_-;H)k7sdyYm6;<OzVW*jj^Tuz!$V3Cg*YRr=*|hyBL4)z(7S*u2)&X
zY102lOZJ0)p1ufvCx5k{K*aXPX at XbS{yAMR7xCA{WPbs;3?LsVEDrrRJ7&=ehTerZ
zy1l^U?fbj_jbm#`evb;+a8<^YU)zIUWOc@|1G4-JczpW8{S$uXx9B^yn}dFyGRE`)
z>et1rB=ybRVd~hn#U$9ah4v at 8moUF-!5anLjTeFbenj6zfdzDx{2XElTU`&ye3KV%
zr_!+=@+oi&{y0YF)I9i=#o&;qRkJxVP7Cd)_G3ozzz2yj5B1M~%Uso+2o8C-te8md
zUgOwe^a+eFmD#0K<+gZ6Rw!rU34WA^c;W`{j}py09ZF6cBj(kI4-JeD4)PL~$9ixa
zCwLC-h1bq#TQs)Oy3DQ(pP3~$eR#9*p0b!E9%A?XMeN)(Gq3^mvZqSdeA>7|f7Lkl
z0N%HDRv=^pa&VOIum6%-N$NpPVwlz&#asKA-t>f?vn4QPHC;!gtIh_0p!$it)0jBh
z$x}pZH%fU;{0LrY%Bvhle3E1j(bG*EgI-8n4ZW>08+;SIX~<zedko?fN|ffa&3S at -
zGvYYa%^L*!U=LIT2eJBjO!FGSo^XHYW5Z0J?(aYyv=A-<Ni9{P-)g%K&VrrlVR=>H
zK^i*a(uNW*Ms+&mMeYsL)%Gb(E|;IVo0(^JIdsTrR*mgE$W+u|=M*Kj)0T8$ocu1I
zrpP*8TVOKX$<GYJ7>@ovi1>>H`wC<daCw++DTYCgXU5wdvApXk=@|R`UWkTW{5v?T
zdXN|45}PYehx`m1-|qnbw$UJc#}vFI;wU&%tt8GbWd(g1b at g4!O4V5^iLQe#F2r at m
zaoq`0pX at pb?0AeN#6M)^Q&<m7k9c`+?2E39O{*>jidUVdwV8IrtXU|TmoqOp^l0!B
z#K10&I8|Hm?fl>+9GB1M at J%2G3fl0Tb)|1Y_!z}mu|{-Byj)!tnFZa1^&MdSKsmfE
zU&gj|o9xRM>J$D%T)+ZiSK}GIYGti-&tvmZ-vrj?S+)f24Znsoh9PqH;g)QncqN{v
ze)2rbcN<0BY8l2k#BPwX6K-Lyid%zn4L3^nTYx%LcchuSdX&2{rV*KWXJX1q!l^vA
zQ2b at C16-s`xEEvtoNPq)sEd*s!7I at BUPV7af7$!F=&WEd)&{?S@=o?%1LUdG5sUkB
zBRs>$@NB^psaN>w7i0 at -E0(54LQi?-DmYq$wz+JwW|uKNK7iy^ri+d5D at P*7=|}4I
z?0aebF-nUvjKLb#MvTYZ*_P%Q$Y7XYZ*#!;m!X3k9q1cp$auko@{Z1euZ#O0u}$tD
zG*6tk8^2QD?okc!D}c`kvN9dND6EGXC_l*d4`xNX2xFhate9xR+MOJ7w|7b^I24x4
zACbNonFhZf>X*9%<HJnJ_uw^R{RP;EtR0L|3ZP at 1inj5Ap;i9A>alz7oVd0|S$5IU
ztv?GLTf?*?*WR&hrOa{lnFY$VmNouZH>AxKDN?V*gg?E+<~Js8!@FLOTGmv<Olkh1
zLpxSu%-sDZ_<k?FlGb#BnL>@p^D|$kGl08Xg#J;Atp?j2*sfyj|0w8>F9I7#^vKr*
z?EF3Pbz(aOcVmq+8FC`S{_h<5;)|HSe>eW9H1l>+6z>O0oN}e-8ND;#;bmi<(f4U&
zUI($gr8(|(8r!Ry5U(AY!oV`YkLI>(gUtJ{{bj!HN;L0RB~HzOJ+{QC_O&l;$rhRy
z?tnjpH;a+-rZBO*33<t+Z%bCyyjFIxd?-&7M*(wVxY?;SP+!DT5ufdqZuc&Y9pR02
zjEiy9j2|*oA>V7p4gNLH-*ju&kEVyae&Xck>3}WBP$gr$x*Qj2ZtEBvRFgTRy+LbO
zo1Fhov!z*NcCMJm_0I!7_ugi-hYm6O$q`=$h><TTHuTG&WyrC&X+%zfF61wxw7ox}
zTXCK$&Q+~ZHFe&*Nj+*7z8PVRDt+22+3`H}17sTd&po{e_ at M@m>k}JYHiOzaMnayU
z>C0-JW?8)_<V&OOouozGitFG_v<TBYqci53i|w}ErIZeHn#BE{YdFUrAJIeNKvNW^
z_i}zAoJa#@p`%-k(u)4Qv0QKDMA!y-+nI-Tdqt$_WKPj=Z)3$Ek1?rOKisV8;_Way
z>3Is+aoa98=e`-io73#d4+RdUu&J|4hrDkY=2FMz=5EIX&PCqRrt7)g;2#-`*w1-n
zOy$*>a<^?UN=xii4xT?;{R_%<j-OSKGcbRBq1n5E_~&wbWf)gE at H2~BolIVK4*FOr
z^pg8yB;cbv1<sd^qJARJVo9^>ZaUWCz~95)DftOlk^ZVzwBEcy(FF^Z0jna9&IeYZ
z7UMIyzZv^)&`Qh?oa~%h!zaKOd~Zek#ZUZIjb$C1TKng!A`Y9Ru3qT;_7chWJH;8$
z<6p~d60dA_T|~YoTV})&lhi=YU%+_O89pY$!zV>@5bIwzebOWc7wU2`Hbk}g$g!V;
zaf0|G$05hsnA^;mGwx@{$g$6m=TwmA^fxDTL)Y|k!H#nHB#}0W=;6N_+QZuV8`Qrb
zFXv5gT^&z2Y5JFf)8Ktp51kbJ1_O0=aFC4TKopdIyQgSSAl69ClG2Z`ep3;Nwfu)u
zO%K;yg3fV{eQsaykkCH(p}-A4aT`?$4iWJ0 at O7cbFb;e4=t7|nJu?jTgdB0C{=p%E
zu_pLUQeR|z(!w5tOiMX6<bLsTU at Ai_o!L>m5~@vN#CU$2_?6&Sy;ECpJKy^9gq?)X
zl9nwwH$8>t#9Hw!#krwQGRIZLcDcqN$70~Tawa`8{tn_Tud&xJF2c9rediPpkh`}v
zXerh=QUzM8WWr81KQ{dM>5<vF=BX2Q68 at X?QN&L<0lZmw4(+xz%#sOh1ph>G{c?uj
z8VWh at TJi3)t(Sq9LHWoxlm95o$dGeJX#hjG;fSvj<9`iPjPdbJbtv%sw}5fFmHAb3
zu_Jw67j#hjtmK5dK8mIj3gBeI{a{bp8a$5A4~nKPVs7#qXz$@9F6+fGW59=QJ**i1
z-C}|_nmAitJR!PDsy~i0V(vA6Mf6L`LVQygt3MO<<6Hwd$Ic6%f$xjV51*+Ikz*(y
z>;vP67sg}kFUJ`FFQO|NKTOw=Zznu<uq{&yXm&16eS#ayhP^=ie8_KG!tskt=J=zY
zEe7OrgOBPod<@h1%Sj9{d0vC}s=JLYJMnP=Ym=_y2vN^1sQWhbk;Uv<Q-XlnAmiIJ
z5|R6}75?9=cs~tW?t!|VKNR=OQ4{~=H{@DP$$%|B{zZcE?MTmEbuJL{M%oAO&0i#i
zpIY}yKWuJWKK#b%xp>ZLeA{YK5Z-w%60(dr at dfzG7e~h9e(n4&&9h6ohi54qx-9S_
z42`s{Q3Ypb?0D at AY@V;7?|`dz!cJgqT7%MtTd-b4*5p4NuETSM#0LqSw5<0Joldu(
zIy=x-Pn91 at kCfC98LF9C<|qeN4LmnHs7t(Mj!wM}F&7=AyyUqKp&tA#+Yq17`;gQL
z;aN at B65l@h*V(|BXay@*4-{uP-M~&of<K}N?fEn1FKMxkp0LxpazdL?J)ZCk6Pw~!
zV?YJQIwJpQJE9W}#0I77)b(hiE5SUR(*bWqY==Ze*Kj}1Si}q at A%?mVwughNiur0#
z>jrv=1$MPxgNI=j at -o17?T9T}X*jmE9z6F>CbqC=?rDPAGhYEuW~W_|`_LG=sGtAa
z>>p|?-u245B)sk+&bO2GTe&)HE1wQ~C(95L$p0;D%iv^n-h#M|-6_j>o0eE+-0+Y!
zxO$%>u{1kugiqYyi86l%9jFxgNDg!m?*>=D4mb&^#6Y-a5C`CT^eVQ{^(cQ5hc{@}
zlj|N`D#*dUE8M%lN&Moq(k<_z4>aC9#j6<=g*mTE^T4{W^z~8xnnxP~sO$~7WNraZ
zR5Ie-m84&gaY#~)^^Q|mix at k`AGi~LU=7#t*mcoxe_#&RA=WlWV=wrx<KP2WY%R4<
z4xIn({%!t&iPqBX?Sb=wT?ZzX^?65!`&(P=lY=t9-OHYD+1?(Mc|`|Ke~fM6z^N^Y
z<5;f6=^x?uFd=R?Fgf_8l6&#(GKrz~>!A<b-}ax!ylVeGM%GFqWW=|h^ENm^WEexG
zX5>Z#cVc=-C$No=kbm`I_{l~K&b7gAa55?S>&#O3+5{7)2bP3<KXN4OB=5lX!-4G%
zcI)aOTzt8-i7ElFl#cMXAtolQ$+fJdKvyL@?OG++gs}eE)g90C{_<*V at cvYgEwyI-
zI_AY>PHUA)e**T^LX&RumJ|>2o+XGyDjbV=0)OZR3*jp|VT$wG@=rPay&zfjTFM^{
zuBJlwdz<!=t)x1f4<Fb#vd=?(N@}mc=R)f5_fPCR at EsjQUW&oZsY55Z_uo#(z5x5b
z9*`D(n_vM4Qi#Rn>J!rL^F?<PT5)Wg#bw_l%*At at Pvod;{eQ{Pz;TSr!yCM(jQg*1
zj`&5Ja?l?S#I4Dv2U!}tXTBBR?<s?=K0MzsNZ#PGO^LY?w<w#oO1``oelngRxfZZ)
zdlBO<=DwG?G_5vc&SA2OG3Q7|L=&86)-F;%#-6NVjwRi1LUsCB at HBbiyQdwDp^q8g
z*ZFZQsIP3qN`h;7M at +cC@Fo2J9z5oCq9DlmC-4h_Qx0?I;cKD#tNi7tE4lu9LeTJB
z%sp38Uc`V;+moW^?k4$MhP5_oAQKr{X`>ul2_tO`btGFRXvZ}MIObSJGEoGFpq?I%
z{Pf6;W5aV35o_JeY-8WyhyP>n8;##6eld>svUcPj2|=5jW24JrnGbd&w+!StUSqFH
z)h<Flpa<NRS4(jHxN9f$7p}SV4MFpePh-Bt)xXE<5z2ZT<IFYiSLNm{#l0H$xks_=
zIg?<+tGn?H!l0L}e{sJKs^g6`yAq_hE)&<qTU<SrUQRsY7 at lzznEBE?o#IOQT<u`Z
zILd@$jsw!S>+)m+*C$(C&T;PR^YXwKF%s=e;#;eUZ=>ikes{>X+Lmxe(~{xDK0bup
zVTecAtz*WkD}&z&JqmfMJ|KOwB4s7yDFE-^5qcQM?jDeCp>ch``}{ir*za at iZ+VP;
za4w!nN?8v3vH|aN`|%#}pThpgZKyBs^!b<Rm;mqv`CE at tST{VA+CHB$VEuI+^7N>z
zk+#=b<F6$muVtqCW&Uo+%cm0LGDIC9UyG}l{yuyh&&px*nBe~@Nga_>vxFn&z>c6h
z2d>*G%tf8p4oKf$mC$NhpSY4dM~!?Y$ZaTnZ+~;@sQH*1;P2o$sVbnoN$zR7RsTKg
z;w;kEmBbcK$ObOszB^~p`<M4>;af^F+w(*?-v#^p8shP<0<TW|nb&yGTaYKR7<nR#
zIgg;j)M#m*KUIqSIl3~~kjN8sfp_MlRAevL>9?JfnJx0m7=v5FHeoF~=cL^1!tsKC
zAO9olSNK}rz}z6 at 7ZOfGlAlV{>yYZtgFmPrTqkAfMD=#m_f?{gp^rt9zDE^@*@J%$
zdv{7YS*I8gDGv>cGsb=3Y8L(OFOVBMvUaMc^E=dGu=CP285l!*!(KK at w~oOWn(o#|
z!<@lCBR_O%(+QhO{jw=`^A`DaYbRAXVS`))+zsX`lqVPVI1?~O!w`7|4{P!OCv%l&
zE4P}e;htmbbI9!O at DSBT<fdvIJ4*8qzRS+ at OTm#gH@<goEbsA at L~t(5Qgi{!Vd5lb
zPa}EExNjj2YnIpPQ8G<G8_PVapc`uiHs4*q)yCX(^^yFgG3sx?^YY1F>6@@W$$y-i
zg*CFw04?H9KFgEkJ{B0*`&_=eKHGwG=tB#5J>W4cs4DGbWP!-Hq2S>=rumL7$kF=q
z{IpuOe)rFngX`A1sxxr)t3L$6?`e$P{|J0;f5oH&)4ptp9XO`lSjRw_(9XL^{x<D4
zlx25b_Bv+}css~>@;x*-#?VHel%k9{_6eVd??S$SKKTF1f1KM5tn9H>=Mbke-OK5-
zOySMmC(WLAB^2k-&!fNDdWDjCj=dSHcV>QrT+-h_zIH)3ehIwzh)KcNxH){BTi(0F
zITnsbXagC`F#c>MJm1W0E3nAwN;(PqzUtSJuWBP31J6T$9*O?EP`Cm8!E`|SE}d}R
zeeA(>VV?Wgdyxt4?qkj(p$2_=M#3fZX~JVM0$idE at IA}*1~R``M~~tm$CK{>ue`&k
ze#!;k6J&CfFED1mf<t<MJNUi-CwK5aS-wSjdaYsJsmLVY<mSN#pv3w)IHkc0jGSz2
zj*f0>s^lQcYn&#*+Ix16dG)A*4jFGpM;z}%D!I~SOtfC7qSQm=9%a|5DPc~W+e!2v
z at Hd};53vpLGv~nTdzMZN`WgF|rX(8Av$2qG?6}{&YVzAuP9=%??I!WP^1~C>$U~3|
z7cp$9*-tok36JNJ`_|DrUZSJceiRg6Xrbl>Rv1PU^@7u at A3hYkr?3lLp5_Tj=r_j(
z?-Kk-?q%1DI$l49SeK1#+{$z4&*y3l;wH~ltmhiUr>LmebZ}lse|p at 63ZqQam$5NK
zpFV$rAl<XT*%U|en#skHax!<qrk&N`9f9~laL*DR;77h~;4wW6t_Xg1tDBEI?1TpE
z)~_E4+o}mBd1;LuuOC&fKy2F at xf;i9VaLtSjl|qMay8*QSQ{#-0>|jen0d45lX4N(
zct@@Vw__3+kD4`ypSiMz$28HKQHJEaNOm2M)9dTR7)Wwtq^aAQ(+|%8Zu1d1Z+iK(
zsrT29!GE0k>=-<sjoHGuA!GTNg|l*+<XbIxw at VkL*J0gHz{r|}jDh>7c1)N#M#<fz
zn>MHoe0}RWzEgA}?^*vL4;y#w>)=sv^8*b{{zrW|cMtks4dUHJv%A7WIDMur{T5&{
z5EmTwZpU1`6PV(wj1vEqh;>|qJhREjD=$XBlxF*(Z~FNPXGb^5yx4MJ?C#g;xCiC0
zi7vD6^AuhA`+YniVnN;Su<^EdipzE~Qi%z&=eLm_{1h<cqcD#6`O0R4106EIaHNa!
ztFchZ!F>kh_~D*1_MJJtQgAT5N#care!KhM{q{FuE)6>b{nkmiqY0lhWF7fVcox`m
zVp?ZHUMj3%tlaSua#LL`SMlVS7j8nwzI;WcH)HN7#P1FK*5}jUWjLl72i<8#IO4OI
z5vB(zu=B&mnLbGY2QoN_p+6CxVCV?(>iTd#ws8&Klb_}YF^<W>8#u;1bz}xO3Ig~6
zk?8Z!L|`osu`rYG at tcLnt%!ag!k94H;<D`%YB5e2p at U{5{OLaS=%8?u`&iMcgi8b0
z-4SkN$Br`?I}YRi#TYxz6B~Up{2y#AYtKO4If%Rv8{W+Y4%u!cvYp*B$3i$7d4B0?
z-fxJ(>LHvP9ijSu$Pwg`itu%1w=^yCvOr!lrpM0GQ8g19s5RCHl!C;OLf=qUb(5TZ
z+ at x$Ny);|uD=q)<^}}-!2do8tAGpt at tUm6|n?w8p?)lAkI`Rz4Hf0Syt^N%;-xR96
zf-e5EbGs2E$Jgpa!<i`kCSe-OQ6xt!ZEyKVUb#S#Qwfe4Z at N{{VxLR6?&sU`ft&!Z
zXW4V#C~nLB!*coWhtY&nM{Y59zLB`?Ecov&+ at JN=7?J)g;}`VRA)R)-w+<K_11FbV
zm#UrJ4;?ikd>nA at Io2d<5V(als$XNdRcOpN;6%ZC<{kM9L4<SVxO|<yg-SPfYLT1d
zbp!BL3!6KyrK{HB+;8$#;GSL`wvA7NFI5-Th+|dqHNa&BU=5AnvqoZ at hV3Y9mo=T}
zkhOO*i$c0IB%XE*VujOj|LCx4BmIG0KGxjkN(`$s%HFekHsD-pST&Q&doXa$=}Ih6
z0fTTAc?_ at d-`kMk#^vR-hWq8tuTqsch9WPt&jY+eURX=%BsHFiyffiXiLMT8d+o?$
z?3u_v6z)@y?Kx+#)AO)mi02$nvc2j7{=)F53U5$4Q6GDaC%J|_H{{7ZKF{IVi5uWk
z!dATDiq9nCgPP5tkHY6SGJ{?OIXjBAQ4zi|6=S2V+0_9~_}3dTUd-XW4ZhD+;bVvI
zYQFvK7&|zy$@qqCCAKelB!b`U*8(PdB-#eJ-{<WF=SK}@*P6oc%mwvb)H1Bsi(w;#
zAqI=^K!u at B7h7YQ#pFHspN)KlOThUCS!U;CtKLps#PL5crvC3ZY?d!7d^FAl<C>BB
zN^m#hI_!_bc46+v!3BD7M`~?!rF#B=&!jZV&~)OAY`r$z57&!u-ICmIF-G5Fy!5xZ
zN$UA^Qf+XR>U#&SubC^6{90}SzS at C!>h-D at sTViV@wa)WueC!z9#1%%Ki!G70OuDa
zzOJ}e)e2MWhW_|hqkE~!=1xy#^v1YXn>&Z5#WZ<JBqpraGvHVLlYCodcpxV_t+}h`
zZ=Pp-JIb?B^`dd?_x)_X&wNP*H_2Re9T-&jdP-5IZnn$?DDx)u#9%2nz~%Z2D0e&e
z33fM%_zl0elURS~Qsyg(yy_nf)aL|$e*7Ri#(o6ca2;Fs(VVW7%m$D9p3oIl)^7L)
zDmhZrT at Y*M)z(P2egT{8Gw4Sczu5hc$@tYX7+lEDxW})Q42)attj at C^I!~!K02mGA
zNzg{K{;9pqs|KB-b`an4pi|&_sG}=Q?`>R1a!w3tHlHo8X?}jtkNDN%w;%ZBtLCFW
z8Q~+nZT at SYJ)qRIbi>%pUc=07SPMi<%PR`R?~yI%MLM;tl;RtiV`}wWJgXXh%ZCA_
znGSjf?dpi)?Kew)YT*BDda%)-#U5S9|6}wb{11WtulU*P-?=R40Uw at +>Ey<B?wk(I
zF(_-)2iIqVf7E>~rwi{mMOP{M!AJ67<2rXf2fEUY1sIU4J=T>!8N-nmP+S76WqgUe
zId4#HcrJWf4y^B`3~Hu}x4|YxxmTCJb!_w;OEA^o{hp`k;l|fV9v$RfYbN^<2d!EA
z>}eMwY{(Od_}L*RkjsGiBhhqW1N;Ji)uaB_l6)sk*9q6hd%%ipd>vS+4EWN7oNnN(
zu9LEoayKUo!dgYoYIofi+W9ub*+>gXylDq=Dac9Q*y9Hy8c2Q|$WckHq40P)bQSns
zJ!vug_`sXEbK<DKgf4$xTtag9LTAg(mSg^b|9^5lN6GmuWqH|EW;oGncf3efLw-1r
zr8$^iqSTdm-fe<=fed9pFa84aAhDANCs;8LE`c0HvAQ;nZEjCEZ|wR0U&2jRN&5y|
zTR|`4v?d%^A6jq;&xBozm_3(Gi|2X*f1HK#`*YjCXOaOd%_VRYpVp3j<=k9<-dD9>
zYQ-p<`D7|$0_9DX=Kc$H{N;$lIEMTb<9Oc0K16H~Y)H(zhfS}hHnH)%n6LDm1S8>F
zLa<ob4*33Qn)r5x=IfAKpv~=n9I?q$w#hM=U?@vq8!sd0i4T%v0S88PEfikNoiyoh
zsmmjd;d$R6Ci6N6{zDR%D!vx+PKtj_jd*#3$Hk?jo+7rur)l9A6YML#Gm7Qt`ij_`
z_=Y-S&%i(5b1!yAjo2S~dcXFZ6wW6&K#l`-R7$>K`xj(g<)eS#9um9qD`K|kDqSPi
z<R at nkjw-~;yX*v;x!o<dZruyteqt`+*xW}+^0LFd5kEe1N%vf=siOSg0bk)|kbd4d
z=T9C3J+Y_O at IfV6X9Cxl&Fc*2y at kNL5FWIJ$Ypf~ztaU2 at OZ{4;@S3ax*$i8yeY?1
zwz3oc$y?%X<S7)jc6Pi%@bchFP=QaDVAr}MoRJ4O7R-m=hYyV?QeE@!Cu=EVN-~E6
zXC{XqbQS!*ef)JC*a6z-sHpfW{ODF!H at K)ij58tjoWz at 3k&~UaFtonD)^Kb2w<>U7
zCv!?EIoAJ3T<Nh{Q=yaGCl~?eIO1DJY?~G_Zh!_;IV5HcoG_HRtyk)0s!?mbjr6}<
z<!TQe?_|g>-olXT4SxIzqjXYV=DeGGsYT{0#{_(HuG#g^H1o9_vaiM5PvQG5q&}fb
z?g)(Q;PYCCwIY8;9Ok;kVZZUe6J0_1*F?s-c?%p0)b;53Y<zX<356YP))x64>Vv`Y
zQA;@Fzb}KbH?gtg^6%lhb^8(Ujt1f at M0-oWu8*06IIr$CErD at Z*O<8k_}~d;SX(1;
zXg$b9BMAqmHXnFkqPr12J9Rl^035w6KhInuH^^l+Q`C`wd<!>`kGi&EZxpbFT^wbD
zNBb?hpI|o8PcjkDRY&?vLW>Y_99|I%l7-#yw_IN&BXTJ0=Fg%L(}s7jYbTR4V$e5u
zt%zMd?Ac22#Y_<J#p5j=*~RKK!fTc>=llMWh7gy}s`%dmc4?}75*4R`PbF=ff;GG&
zh}qKsyX>-EK>Z;enwx<9Mu%CfL%UC|2xBnmw`9DTtP&u0DD?#NQ;Fg(u&j1)5p at 7}
zdWG%VCrJBCYJv64gFd_tao`z*(<hLug$xsobMq9DXTfIN?rs}fJkj~7O7!J3)aX2#
zUqkvg^s0gW;pSHefgRX2I5J(mocNsB=gQBy7{u<gYYKko`=>YobTVv>J-pNW>ftSJ
zpW6rN7zfubsRu4)F~+g!k~+eZ0H4o at bYMZ;7(u!-Wd%F`5}zCy7yVg3BN;2Zp7<Hx
zE at f>C9P53SorguNU-1IQ5BL=m{!kxU(hiJ`KmLydhCw0d=cq!fXk84+^HGT3cG!e&
zK67c4%f48>1?~JC>Yq=>op68fAb=M^`!C4XuK8CH>lr;g7TCZQ7(+{uFF=f#ls3g<
za7kibMjVtyVTZr#s36^q*Clf#;+oMu0>~a4JJ-AC7UUy}#K3U^s)}viRa at ZmZ7Fiq
zT*Wtb44PcijV<%`sG4Kg9`-zf*b)bckwZR`ZYE`S6r;c#<3HyCooDP&+%!&56q|0X
zsKWjoy#FrIT?MZouC<cJ`U(6<*REOg<o-Wk51qdT&S3bQ?eIN!fj_*C#7JW<pN at O-
z2rkV0(j*J51Wu`e?o2qrj;mW)-Sed<ZNhOSw4*LbeIgGunYa47gaz*Qd9(CM`}FM!
zJxpvmwk`g2w*{ReM67A(+Zd}&sM{K97q?A2k{1x}ziOJfYts6lWX?3`JKZ|EyaTa1
zoh)vC^pSU%k-(XKy7qM4e*JG)yS~wEK5s;x6I{cwfM at hRVsW4|s5g_jCC)$MS76vk
zOiNor9O;wl&HNUQoy25(`G~~s?62bxyh4szOLE!YMD7jmyQc2_qxp6=?jQk}fVqVC
zM9^WLIH`n<dqMn&0D0q)GmFT~QO<7DNyQ at QO1vgZRX*|{uaq3bJOTf!@#8cd>TXGc
z$9Wr%Sun4`d;MLG9dQiZ_~xxdo>1<dG(68|eUqh<DnF8TOmdK{4dYuNBVB{}PXnW?
z#XQlZ-i%y-_2Bxbe>RTzX?=_BI{p3Tg5OWjexF&G#m0{8Te&u3OCoO$TMt#blV_oS
zeM5Bm at joHIDg18kIZ*Nq&S4Imq#<)4>egi^7^-_jXT$&Y29HDYvN1=2H>VYA;=A0k
z%f=2U)SKgVq~4B9L>!QY<O1POoB`hJ0j#+W-{?#7eN;Vge;YUp=FNDIVD;jsZFHu5
zCcF$xyv23|b5IW2LM8cy)@`CY7V#co-V+M4fE!q3b=iybofPzdmlfcmDp$9XH7=~z
z?B_?S7|rtdZo^D7!O`xrN+zub_lS^AFQ9>iwHczyo-G&J0*q0mjAt at 1tVx(R{M~Ey
zq%QE?r>UtMfF*$L=>!I2E*sy|@%KDJa;N2-grBW18gZ*>7f4(oX^(6<|LF#Aor$#H
zf6519y|iSECow3KG;Dk2l5bE~Geh+C at R`?#%_n`3v={IGl_(zDX8b=$d$Tfg;-CLg
z^pWEO<wLx%<T)0H2YISQJ~bi}z`;4G5^%+`90l+zf1_Ow{C|(zM*jaBy9Qr$#l^RL
zTS;s#w?1YGSttH(1^k7;b>bUd#{Bs`=Ffk!^XKRP_xY2|xsaWz|C~EfuL-~<CSaR`
z`7 at Ez55B>HIaAOIEKMuoBku6efmdEy>JmsAd{ndkyH0Bj!;hmMpX2zcXOs13j-Myi
zy at TptQ(}z}{90P%+I|e)=%+D<MHS`Y`O%OC4LiS%A~Nmi3{W6`C*M84ZqTX at 8~2!8
zgwMj5Y;xR{mb+4<^IYd;oz8W#3}<t)500B1K7Ir%kkcDbjeApa?SfYkr%v?4cFrSj
zDW at Cq)$Q|DIkUZj<oRy!u-tO%6#S<ny7Rz|Vsdf%Ne)WI5;kt at Hk*G3n3}X>ko8N5
zOQ~UHp~UBT#C)ayk83505X`T0>f~A>=6X_3w-L*NywT`y22L9PX^eyIxerLJA>s4^
z_TooFc+nLim$X^E88IE}aewfW^H1W1(~jlV(PF&sJCsYrmg^?+i;QYc0Y}9m)5Dw(
z3v!xLk!vVx(t4jiN$kqo3Ou{SFtZH#dIWdaad07c&+uJ2I|^vrH`UWJ+tDQ5=Dz18
z_8ygB9-hB|<=QBtCArA=D7Xn7>JehQa>=!{UoN=Cq5lj4UWCJbQw<rb5qDD^JO=#;
zaW{e>)ORX-j<kQPIEi-<Tpa!ASF`D5xxW=`Sv4&Xx*f(_Bk*|F8C8+WB=gz=J!W}~
zlG982AnbP+wL)=$R_2~&ub=z>xIT>o@*`Y77Cc8QR7(Zm4NxqE+@@npZmDuPfWtx@
z&Kg>Vb;T}DAFv_cl_(2$)*4>BOk at o@e<#l0aF0O^@6(B_o?kshN%Z{eB!hAb^2=xK
z^0h%;z7X~D>!Gs&ZwT4!{#L3-JO}adXP07*&0y!)qwM^ur6uq=5bV=v&RAe+w(2<e
z??0v<bM<A+*;$yY?;^$_8}s%(et?zrO<=yg18%beDH)i9Mez6KuyZhu741&A=ssrq
zQ-~PaGoq9g at T(HLaisbXp4EwG{(xsQ*dD|)A7XB*V=>|4C3e~$F~)LEO^ph1jad`#
zTUSoJKNUG0n$yqct3yn8_FGMr`!AXH?6;~X8ppm#@ce|M=puIm!CYmRB9{b at ABy=k
zgnq<spW at iqZ6KN7CbrX+z+dHY6Kjf5{+&fH*0f-Iy3hgL=gxtS5v}HjXJ%9#(;o*u
z at z=bMp6DFbEyy`{<JwmJgKMRF2KtN*<?m<p7})5j8<XK5x#NKc16GQz2_KgoK(M|8
zI-V7C_HF!b;dc)8R)_WK$<3)FPm{G!g1f^S+0TRrJ$zh~>z-d|J;BrpzWf_gE7;TE
z9kPMrif8dGDzRbl2jF`dq at RHtRED3kb6NhVl#o{Bs_4uc9QROAUfywR?-GWMW4Hi&
z?<e3`Fs_mLA9#&1C<AaA?-eGTMmqtQ;q(yd29Euh&^B<4E6f=<_EAC$^hM~=z^4W1
z{D=QmF4q^~JNKjgD)9RfJn!XMXQ4;OLysPTU$dmnys&)+X9#4)7wh8C1%r*y2g!P$
zKhde(^5N(TJ%V>YX10|)kt0Wgu;AZ%+c8}4r#?jMi0lB*_G$EbysHv2^eEl$>1fQy
zuVW4S at 7%7!0%txA{yrhAM-&62e?HtF*uQv=Me8To8$J~4o7vn__~N#zLt<_K8~>HI
zTYbqB=?{>{!4BNsUjDP-ZuPAHl98xAVw4f}f~1Igsz7om@>_*nyn at pvz;Rj|@1S!K
z_u``;LyhFR>S~HwX}NkMXT0k7$R#r@@^M%{OPygfsq1^E&Tnozlon&OW=+`oVj?#h
z<J|CQ<qVe`9ME<#)`W$V%untG2hIh)C-1cQ49c1_!zTBe-w9t&F at Ko8hFNB=av|>?
zlMW1CQj?|JM^z`7kG7TPUgr<PcL|?mz>AG*o;?U0sjW(9{rZ3!7)|&d5f7RK9-t~<
z{t`x~l)XpIgB{q2cTd(|L5}4raK$y&R#;oKEoMeMfCaQk3%4+nSpJn#_~0+o8)4he
z)3?|ZJRR+5 at cuqfbdE{~kIX#D*V^v2{lT8*NzEcsZ)W>Nl7AL?MW~IELowfyYt}l0
z68-!4R_eWji<)hWwk(jE$H_5PZhI_HpzJTAEZIx!>ejW at LCO4TToV9Hey&jx;l`G#
z3g6`|FvmO6&?cMK@{JQscbPf7S~}5P_MvUa6%3BetVS>A7=`B1(Bws3Od{{3LHW6@
zB9xkBluvRAVmU7Mp0WCRYBjEZfIOD#&0Qp3s$8u7tWK=I3Vt9vxke+?pQADduDjjT
z$u;l-4oO9Sk(fWGv*=+R#zp=xwaPeBf0c%>7j<2yDKuA|z<PmT*^J-D07K9$T6Hdd
z4eI%W;k$Ijif(Q3 at Ld#Q5`K>19TLw|e-=C@;xbJS&&8O~N7X9&gJ;qwbhswikGqlj
zNxc!dL1H}Hu$5zLnbTEQs<+ow>$iH!BDyt+ at izVyPB-5wX+>`P9&rZ8QeJ8E4Id`i
zM=-LKLUIUky#~Qg>N$AMM&!N&Z+31~B;ox6ADu(2w;?~y-Qe)neq*}gzBm)S1fym!
zd!<FL$e$Iz at vV6FCtM-6HvT7GJ;3}PAu`JU1o-Vm1<oqJ!gtmF=FSx>pKmO$<T)8F
z?>MP9B1c1!f3NQA4Nf&;z&hsXui8=uJEy0aI~#S1K7x5)`lhH;unoBwv93ueC111U
zO_3Zz&O$r26!=3a`r+t^V+Q5st~iOhDPDs0rzGGe1>24?@y~Vet>FK|^QeQcdjiaz
zb9a~<@=gcUX||KR!y-H5!8<8HUKD1rdG9FYoSqu#o32cq*5(Q9$`NIdlbclF&@56v
zFBmz)7AX&N at wqd8Gx|mJGx5AfnY8u+H%W1rs>J-8f^WCZ_$qiUFF-df-j2EWrfwSM
zNPpg;rJLc4RU%d;E#fk1KXCV7j!O!2!KdEUF^AVE0H at wV$SUURUicC1)M^D|P!_|-
zgng``>VVy`z0A$SGanAf&p|SOQR!HtMT|b*GvXlHlJMSmk7!_X#P*Z_7{7PX#U$>M
zTQaD1Znxo1;UhK<&7`+$6_RS$=~cCc>c8xBc&Fo*sYg<}n8&Z}EpTRji+(8QO%a%2
zgH&a=dA3RrgInO_uYu2W5qvu at 0|%cPv4D}`Tcq2&Av3c)WY4b%&t-8~9bygf{cyTd
zG?0<lt*$BJX4e5_4DqEWV at y%_hM>%EaN97}o?zl*!Ouo8TiLUi(4xBx%{v(<nRAVa
zFM2qAZR@&Q;`TP?fTG`UYG;>W<L8$I-~zp$)oOKURVKP}{zLxo7>1GY_5+t|<NpKo
z?ZvA`ImTifyi_hPdY}$eA7e2$GxaK)Lj4hP16rxH8DG_Y{gj75(YTe8Y9pgjzR%JS
zvs49npULKSDvOh-Oz at jrwJn)%2d1Te$})^Q`RW7l5|Zz#=mB5D8OvZBxrAJ!-fN8K
zWNXHmGj)j#o`WXG+#vX8BCBzWkUMG7z!*H8_jz2Cq^9l}Z2><&qT3{`@2yML0&h4Q
zv0dP=O;CG4w=Oi}f1IQdYXp>WI at SeiE4mJZ4}-r_rFx9D(W`R<I5nI^Ra`h3$EP&-
zEcb!@afqG66Ed+yJ+zVo%;253#LHVBaMS1q!B^=&ARDfkwHzT?8%92wv7{~07H{+4
zP;b-f)O+bgp@#?NfgkxN3M(-u*2HDC>Tjo6I<@dKF{@(E1YcG38Ny5ZN&7xVJd0Ku
zb0#jU9h?^;8--kswz+u6Jw>x2{G+bDvEyCSSLmg-C9V3Kb6MHGM&_n~tjzx4hUe{L
zbeVk{bZgE8Nk|+jd}fKfWh031ac`^s&V0;g{%Rd!n#q{li?z2t<fhqJYq*^So5uUA
zw+XgHn-3e<&VK`Wf&8EsH`bRL!5amC%W7ewJ2sBW;(%k}nT441g#-&bLN(iob>|;}
z>HHvkn0hhh_0v_cMP{{Zla9z6>b74DEc}$@h at +luoc?I>Y^(|V;pgk(S>^&G`_%}n
zv;ULitZQ(+Cg7F|m7D;S&4y<omIAT2KXAZ at ZZFeqig)N}aGLynq=Y$@D<|*4vpcc1
zVtXCiOV=Lp$osBE#~}_>j`87QA-11&Q)96OhKvfpap*tPCCp*@$OEwl?Vs7Y?ooRA
znLieDkegxOZT^b|dHIq8<dz;a2sx+wNzQ4^y~mNSVx3^A^(wPE_Xl8Cs^Gi8c%`qz
zw$IbTaS5I(XO?{^B4hm5{N2DKBJLaUQA=_DIGaOwoB}w4P#$@f;nX{@CHCDnKez9;
zE|7QH6uW;5ur=V3#q(by_?mt9O at jSfhFusuYFK-NcS?;2arL2N@{>t<@qfGGL3zC1
z9K3h7Gx#yqJmd9E1LZmCE{`5MUq~0;bwaRmHu6ow at A|5wj?|B#*K}66-YxU|3Or9e
z!rLl&dTQi+w7>NHv%$@j$^3 at T>{W4It&o*G<QLvX%IslLTt^wyWFOm1L0W6N9lTZR
zej;Tu_N at D*Ku4v`uB81`alVHLz7S(tN?{9=9p48T-63ASgi*h<c2^L%hQurQ`}myD
z!@zZP-1~ee;-GiT)PSQXNDQ0Jta@(1MnbGfgGb8zc!ITnUrKF={7QY^X9S63D#-Ei
z01jPu+n35JaQXy?0RsXbP6^N7M<aRwUV*ltrLFp|q_FB`EzPB?WD2|7Z|#}D<fn7s
zQ>mdViM(+whbHL%!kp<0o~-`bXWpQ5j8^Nz%+Y#BCakT7YBh|ZHTUzY0(pX3^On1Q
z!!3t|yiWP#uoHYA_y(@OW-0lO$H=dTZAtf^kek0lF^ugKq-<EDV#_v~#r>_9%iLuq
z;{*I_)nr{4J|gtPZN1Gtg4Lmk;Bp<Q=*BS}!Azkah6xhc?FP?Q7R!&h!t{xvQGKZ{
zS}%8;(Ax}xPe>fb8dj(FhhM~k*x*%&*^ZmR1dp8GQ4`B^<!h;f at mXYywRYQ5`9JeD
zipL}uu|uiH+z at XkK3&_A8OFUby**~$wk}5A>^hW=d~x!kyOH1tnG2nyYbiTsmQPP=
zZhK1^V<h^+wi0qJd?B&G3_a0z(x9I!If$8tUL2s_OI=jl5@&ic;1BD0q9-9IN&moH
zYvK=k;kZBzznZndN47t{Z{YY3<T&z5{sCXb#@er+9~JpU#Bt~$kK at j^J8V)>mrtDj
zm`$MwbP&u)tp4Ei`FagA8nODR`bwKZwTfpND8uLx-f?F!pQmL<lR4b`hPj&(k^Ssw
z$Wyeh40$G}<>yRE^lSlV9O6r1Z%;)Z-rj2NN*vse_;<4-ad597c`&1vHF%DDmBjNz
z)B}6cZ_m}A7BAoAR3BFdr7TBVjxRs6Y&-wg4LK3 at kn5x3<-m%_TRXcXoO9uxs*IH7
zGnfO?GT4ralk0pDNAtQBImLOEgMeclUWE3U>E(ovo}C}3B;Is&Al4VS&d1>6I2+uc
zZ(+tiUya;*r)2 at KtMZ?(B6;}Gr_RWvUc|SLzNH>X{->-M+(!0;4~N#rK?dFLB;$Hk
zyLdTda2m;(CRmLa92-BMn>!#wE76A4h+(}-RbsB51$@z}_`AsIX`MQ6#+kiRFINoa
zr98|_B=56BO7%phG(H$^u)3TE%6LVi|13Uhc$***d1jKi7Rb_Y$aO!Fp%}y(0Y84%
zfjo!!mQLXFVgC)}MnpXhwD}?aFy2PNQnxHfevE%SaQtVtEFj);75q?;6UjEw5LQoK
zI)mDq3_Uq%psj<{dj++a^Adom854i+iM&P5d7^uZ9t=G57uac)%q&Tb1GunRTgmq-
zdWn4aJcxgcIpnj*&yc at aIVZA!<e(&YVC7(frH3z*6M%fcW8-u|<x>hGs*s=Y5 at OJ!
z*tHX2uhFL;PyY&d)LBco&=)$Ue at XN)@Fw5kT4MH~9MIjvb424%Ht4jH*3ml6X!1Vy
zdyu;o>%hb>1ij%r8OPYUx<!A;`q%dlqa}qVD$6QkU?<saywhW6Y7mEne4f$|%GOS<
zvHU5kDLpNtpUT^%-B4?I^=FfC|G5lV$W&wKM;@6iUQ;sFtS$Pla1Zm*#6)vdJ8UFi
zlulRaVAIX9x{7A4Wdc)z=Nsd<9yUdJy-mqNqOVNhmH1Y|CtS(70l!c+Rm^SUzmcEA
ze-`ze)~e}B;?^LK-3a7bLw-n3HRioTb}xNNri>ThGoDjQxWEk0Ynkw2s+UUSMUwm~
z$T`Mp!>R2|evW!1or8SXr#@ivbFr_5Zhq>08`-DwC0`1VXP0jZJxXOq91Zu(eJ|WI
zv>tejU)0Iwt#?V>*&wT(Ygpw#d|DC}veAjTkmXw9EGK=5Q<EnPBK at U|v at 3T+;T|SB
z&<VZ*x6S_22yc2C;h}4Nm8+b=l(PMj*XLWpyChyA`O;^c1i1mh5BQV_9J!c}V>!st
z*5J*N at B+|YWqC=E3*?4~R^naR>X8Lip+_^nRq#l;Q&!GkG%v?LU_$l3sJ=6Ak?A6i
zAlK*DDH;Fn|344(>kH7={#T!tB@>w=^%QZG{eJeDoHqVS#JYNd_hx)(z5BWFPpou5
zm)2R>@q&Eo at U@ED?zJ=XW?G3{9MFT9$0CxS4O?=5#1Zy>Ka$Hd^l+Snj5Ugv>B<-0
zV*7<ct<n at q4h-~_Pq1EM!?;qy<Q4(%aKnr-B${Ak(l7G@#AA32$72AKmd0@{y*=p&
z at C#Z>M{L7ZYnMo+W7I_xrY_Pq*tRUbjr~b4y`pckZ4Fv6V=mDT;5SbPAGMS#;135+
z@>clJGBDpL2~R5<Z})omNuqy)qg}_P4IAHO?6JI842wU%3f+R_6X>SL!Pi5c5zC!1
zMLENgJPu=VM&RzJlgU~J at v}_`;4eq~;>$aP(_u at J>l0es>*eVm0Gm)^>fQHJlxu20
zxiS5NMK$EQX89i<Lytbr#PRy8bT8l6a1bM>01rtjxZHH$ayy|er6qcc_JpdfJeI4G
zE7U8}6`>x6aYZ)SN%brmIRc5z2JDXz_=7Nd9B?p6|F`!>yQaXVzE?~*cy<U=CJ9NI
zOX<pT>fWc^gW4C at jt}w=GKc%a{=iyt<XXvh7-RMuV#|(Vd<mVRhJLj*s3$UyV+)?r
zXhmMb-!Z>->--hKHp7Ng7IFBWk#mLTfNyKzN0Duzi at Gt?0S at y;$dxo2$M9cd16HV)
zN#ymBwUv&m+|Y2}vUuCp!D9ut%ip^9DMuI{xOPfVS`gxJRHewPvM)w5I9gDFzBMG?
z$F~ypW}K?jLG$(_Z|A;9MXRM_X{*JttkrTxsds|I1-wTD)6R}>WE`nB&Nug4M}PFD
zHb+(WPdV}-B&*&s`fan<IrSeoJoVQd$-Mo0kxx1@@uY<U7jmUe<YJP!>tp1;;08Mh
zZgRat+w5bBk)Q1Bkm}#jzP$i>h_{k!LTSJF?ke3jvOhC2Sv8TFtFPBp{(i}k_<Nr*
z@%R3!M6>>GqV{Rt8fprzp~0nKv*++$p{1Vt#w6oe|1x{Lq9o5VyXd41Iq}b%x4e?5
zj?tu=w`fN~UxeK8KM8s;RA%nhf+L3bapImA*+`vhQu+4a5G|=s8>vrCs`>yosmWD7
zw7!&i1zQhn=Qg=2HexHmHlMYxY~fyt-YTiJ<WQ6zaWd8q4 at H?7(g&&0 at TZr6zw%<d
z)z`oL!!rw8OTpKB1IJciEqqqc_wZMvO{mHxfAL$uS26 at X&$tGkw@<}Cbj0(nBgXyE
zf?)Mmtba$Mew+V%c65G8V7#D)bA$N3sbWbjV*3v*D&yRkE?1upAF3_|cfcXv7Svzd
zwoYdJ?oQ?@$tnl<FZn|YuQRvWPf$sVyBHc=VHe^UtP!AXIsM@$gMOT%6xo4O8$x2n
z_wGYZYOJH~-AmRO+r7e1ZbPn$LML-8=yIf3 at 3d_uIp|<BC4*CS6XO0 at P6=)Y#)9kU
z%YWr1dx4*LV2yFV2r+}ch?7=bgx~j%nC}`~tK{(>8iL`O#;x&rjP<pP&_}_O`=AB6
zh}Nt0R7uc{#ulE7mcHuXuRAh?`G=~Ee at B0mSuT1Q2cPfd^u`+7qTG`5v2S_<I~@Q$
z`g2N7VxPIC{4kNdIVM6XNI+X>%)g4*-!_7m(JZPdMjtCvT?_Q8i2@(6 at J&wmQ0mC5
z=M?>XU1KTNFxXCxanB;hd4c3h%1^aM2d-XSj=GxKG_1AO at bGd>@}P5cRC!1C59VyK
z&I+6sbS*YVNZERV$Eqma_7 at W;x`BFliLM;%1h4l?{6KxD?c-HPk)IW~gQAy^U+)O+
z|AC4(*KbT5(0?=|yfuY{mrY?O_t5TK at Vm6#$R)S|_#S2MdgIgp#{r?9 at ZU`*n6XE|
zIIRFb(ixFxD0uwr!86sOm>(@4Qs9~8jzXQ at Aa%wqh0o;_vqE2w{Bl>~z}0X$F8A{q
zzoHxDc|I4R>#MC*eFjT0NIv1?)^8Z7$6U4^8&QumTaTCdflt~8<JSM7>)qp;EdT#;
z2orF!Tjk8Mq*g?cN})v9TTyVL=GYiaCI^j;X-e*9yO}4%%CbVZD^Ysay9n`6lIaA5
z4j$2&Ax?y`JT>urDtEJushob#YfzuV_w)N>kL%ujzOMVaUf1h-y`Hb<>pZ at X5Z{MU
zRz^Lp{7Jc+ at C=1el)|L`Q%2fT`BPB}*=JHi7F?jSq+2nL4<r9NbWEPvfNv`R|5Ia4
z&lhM at JE_kD)CV|z8yW9{FHq;ys&};emUx6nm{CGG*}mY<)gU)ZD$5C$6P%p>T4T*6
z8yzF=X^7oBtSWY+4>-X-U6QW94_or at LLKa**~-`|;QMGT`A#E!XbUB4tob7>diu$B
z{!Vbf<NTHBr0%AsdnqOZd>mN+0B@|bo>0RUZGoPJcDoEtsO`ZS>g!>@if%d+Am3!v
zPUs1Jb{Unt9US^`l9LYpPL-8^R`oOb+JtDyl7EHBZ{xmhTOnc(Svj{5Ys4(fk3sR>
z>Fr}DV~tx9k`mc%h}q&2jHiOG#;|YHO!?1M;4(TeUT+mKR9{q~s+8cGY at e%!*C(<$
zOpwv#2v_`7Go|(s4erCn>Qk$6{u!KaA?FKonq6fyWKx#uog at ZhR_|q|v!!Oi(^M;X
zkvo(8aZf$$KA4lD1hB&=mc4B_!Nd66v~HptYq0r{8^bQR9?Iaq{)VhO5MxxQI$V>v
z(SGPT_K7Gz^yT&QFviQCc~#+_zdGZ<qmF!coFE1~d>d5Xq5ldGMX=M|=e`S`we{p0
z#4CM{vJ(IQQ`PzBGbpD*4}E>YVc5 at IW+^zW_m~GR%pm%{a#K_xo_|^T16_dkc>;RR
zLVYD-r_L~`Mcu at fjDGropiN{qJsqAYRKl)3uw)<vyk|MR^K8NM)m=rve&h@&+6e|E
z=K<~sOli&lnM<YSxVgyh5y3WLE<V(ddf7*?hJHvF=uPDQUTHW7_aCzPZ4awN3|gCV
z3i`u#gYsSEnGDYXXF;a*vG4^3VA>5qAK8hVSC?vj$JlM<bY&|J6|&zrkFkd)V*O^C
z9=-s-OtNNhKYJ`Ncv+-Au<6Y#E~K?Qn^&6hG<;Ug#8ybg?y>!%Bf@#Jn!pe5tJjOK
z5t}LD%l#^<_Q6}gd%q>-?H6eA?RWWH6s8mazeqnvrz-BCy<N6<VS_fXi0vSLG4fsZ
z{Ru28(F?{WX at PZ4iX4!S^+KNKk6l;O*g3*4pl5A{teC2;Aae<$gP-q7GLKAHS8#R`
zzB4t at p!`7pooe_6C&M08^BQgd&$0L<<Ly$7^=vaFdRqjiq+91C at f*0nve&pI^rs-x
z0C=Bf8-hNx<Nq6iz}vaB+*IE^%5+td$)4aAh92Z at vQ7L27q((N584|7O-I+HkTz81
zV@|@FMY(mtcO_;z33JU~@Rxi);aXe at w*M`9T+j at ATLQJ7ODlUjPJ%JD0(JhSDHXC9
z+l0Gb8w{*%@E{jLqzl|0gsT%Ahnv>b%L*!h1$PqN67>aN9Qu8cQu3-+`S4Y`sw$^n
za;tG`0eB=3i?!Sxr}C&JBka`b@~{~guf|Zs4CnNtFZC%9A4^L7e*k at yY(G%g at vXCk
z)x?&}w^;GK=wQ|1xIh*11-)wruHZMwLD+%BCP^w=!DTA1$1(adkQc9WkMkErf&)8e
zK!iCsd_i;q-leapI(nwL!km4<fwAGbAT?K<gpB+x)9C59qxOMvxnWUGf5_r`+4TFs
zO+C!JoZKVG=e35tKvmSLO4b+Dus1YEAv?a-LVrd*6Hrf)@*&o}H^9HTS8z}~P?Pwf
zy=LzF;584=`G-fQchF`I|GBGws at ry_7iclJxN~9BPegz3*7 at V&q=-M2@#9E7?BX=&
z|6lOXuFyH4chFA`a>~FT9}BG54nYjr=jOQSLM{N8?HHb+qk^!8 at ZtZGZwryCDu6Zn
zF>LK%PHsP4!3n`cN}nVJPv^A2VAY3XH`OP;r#Gm0>(nh~t9`+Qq>SslhKw81UEu23
z58Hz)Lyff;a+U=L=XEgwadgIwh?xeY;gckJ2hV?>#0C_cV08Msf{F2l)#(Cl?x?uE
zlIJEER}x%yO#YTA0i&(WeX6ZWR`%kO;L at 9P5_l7l535K>nO72Q{8hp&t=)pyf*VY^
zb-m_8#%_o$;WXM7B^Oa@$N9h(DNp&;^Xml at OPc6Ze#O!X!Hc;Q^S=rOKMI|Kx=3(d
zqBe*(N|Or=ULi05HxmNA5r3{p@<1*lO<i6v at AVc-pT>KlfhqY0G0r!Ek+7+gv_T{v
zDh*y~!kGuGazV`k4JXL|vVv>X%IO05rhXuGRO;yR(hjaBbfx-u(z%IqC^K*oM|`pN
zWf%%EH|!BSYjJ&|#^->L;#&0EH~Q~a+YZR6-WJjJQvb9(js_>3D**NV3hR}@=h&kB
zc)wmxWDA56Rb|`{gqIy-)S>MNvrv<rN${r&*(Px3z#gehx2xFX?W&Qk*M4Ac*ji?K
z2(G&2oCCI#;Y1E%J#CI|44Dy|THMVrdJp&>Ony$-N_TbMiLO>W?-vLev4{#5Eluo$
zF5L>BVp9^2$As~ClZD0LFUfu5iuEYr(1iZ1Ao_E0VPj3<Vq$kqTB^6j<#<ibyQX-Y
z;0jUK`MYD>`1x4EgX;{YZVauBj~mqQ+MPk{PB*4-Gx(gkJ&7L#I5q8l`1XFG>y&Bm
z+5Rxu5BN&hn%&&fElLR!VA^sUIS0EG$&Z}VC>!E{2Wr-AJP27ye3<)$bV3{2&AtAK
z6A>O)?Ey`I_+i1NSPk(r@|I7&0X@!{cO7HqOJ0zWaJ^PHW;#<S8}{27UC7KZf9#)6
zu4OjF;oH^6uqQOo4Vii-Ru`ZurJuxHdLFv{Sn3n9-T((EjW#$YB(ifeY*CxhR(Dv7
zy&hO^CHz3QRi8*w1l_?o;Iqrd*oy%tP9c9wR3N)ayPpc4I-hOR{<m|n7CHz2IN`tY
zq2}_54&)H!koVDyGenmR?5<+H4Y4d2T3Gu?BE;M+fn7H%v^8#?;#$~D@#V%ER|af%
zgxfK>pyq<BOC}ml1AB|PN)*?quwm}*iVDG6Ae~3-xxs$1d_7&kpX_DfZ;E<~-ympi
zSp+`fj}^Cht}G?ta^=gJaue5@>HVa4Yuqgocczn#EQTHsMQ4Mvr$)0pXfodwn#p$3
zx$`bF<s-TaEs9 at iu5IMUrJBXgLx@w$6+bTAXBOMHfxESO-`wa!e6G-}ujM4AL0C5}
zXY|sohb-(h4~f;A|7)8Ey)3UsGM>mW;@>#mL- at H=WAnSA$4{;+XRjeo<kUjTYqpvT
zny%PHv^VfEgZFaVM+cB&<FRkQU at bZs@U8bs2J8F%h;D8=br^H<g;z00+cFb+aZZDV
z<fZY1&YMDf#ngpE9qf-Ox7vnrYt&BO#uAQBD$#RKnpf~=PiVoo2mdSEWv_=^J%u%o
zX9Vnb<bR2dPM7XLF3mwaKqmO+e~NpE``d-Hc^wrgtRu=3V{wh at U3$LiL(h&PCo`YA
z&{%V9*5CJYU)!<P>6!M=wFAqajejWMt##<q;=17vZ2>-T_6i;3St{h&47QqPRCMG5
zqtCnj&^hMEf9U&$#Yoqb)Pmckf%IwMrf*$G>6BvZ5&O#*Y#qHK{-IK%3QKy?RNwmd
z8fXf*D^<_f4MF{g<%AC(b10n#pUG|IBzk|#CME*@jyVxVAuyVnfC)ylLl>}P$csT;
zLR*ili7MsbM>{8|LVHKSevNICtFaU1(3t<)uyBk$MTIpvI4ogDpB=VExs9pg{mKMI
zyq^&POuL at 7WIPk`j;H`!5=r>Y#BUmY3HT9Q)=K<VfPaC=$LrW$rIkabo*?``f{!O0
zteK&CNc_!^)0NTC&q>Yz^v$L4SLlg8Lgq at pNtpW=Ht)o^{7G at UrS5vf_*Cc?*3fij
zg8vvb at s$M`o~`hJU#QVwp{{wDp#wkJa`m=`U#=-seXD*c?$*Rq>(#QFu`!02;KS;%
zf?ty6sJ?|i{b#{yUNrQb_^?e&9HDZrNyt-KiRX*r_OyA?pX51<w!}?In&Y;OzD5_s
z-@<o=ofKS|^+e`D-htnb_*UTKg8UPYB)%>|JMo|M-+om|cv1 at d<Fa5!tH(RJ*9oG(
zgqdzX*GF+x%^NtgqQmX0d7p2I&WSiowue`!D(Z!-5xT;w!Wm2u_IVszsH%|ULMQOI
ztj9WguTDquX|M2$lkfszU$Q`s1#7gt3WF+`gM8ae7f=W3HlvUC7ObZ>YxjGY2m3{s
zHx*32vpQ_11NVTOaL2~P$Nd2R>8cSOg71NOTZMc#Pr<IZ>Vkz%d7~Hh3zz)|=#;4>
zZ)qj=D;&h$1Nmg}f}NQ9R699ZqjhmQ_AvRboDy@}nzGB}I}?7VFw2C6;FlnB{~YoR
zb_-L1yU1iM^s3t(TpBQ`t5hclpE3Ut(HF#aNvpRx1AKhM=Na`Bup&~-dphY3_#_BU
ze~b0$@cF<Td_nvYhi0;0bJt3t7oqRuNOv?iG(O8x_=pHv$D?z=nKR#{I+rfp51Z~~
zP0YNDz{AZ~&pcv>9s4EdbAQ36bJ-x>=@itueO*S_z#jnX^gha7Mvr;SH^K;AZ$2=m
z$jJ~sU!tP^z%kp<KG-qC=aX&tdb;wyJx6%3yMWL6AnHjfIBf?{|1bH;Lmct|<n*Xs
zQVUdL>vfkd8Dy>j<Ui9Ij at 8%+cP at ByY8PSMyju>QoO<XA_1X&9aYd-(ilI6daWSPq
z8iLgfgnfdPkB_ly+E2QWm(A7xttpL5pX92V$nUAqYU-Ted2UF=8YFS}g|H~t9ge|v
zP=>Y6kPU*)ChsR|6O;jsC|MF1G6%W6X2Wki1Ke(zrknXX;5h?gT~WTKTnVxH&oI5W
z><p#ne+dp1Z{k<EbfHE4`yNB^Sje4;F3EM%JAWc4kn&qWZtlLZ2Jq(vl6yxJjNOcR
zz5ey;e*ZwV%`m;B0Z|k`=V~H87<>oxd5P*Jw~Rad;^Ry^*3&7Zy;LvdeTlY0+aN;i
z6+`$ZT7o^SF4p`S70_l!8#`&NSNx#Iz*Zbg#vbgzy*THlGY#i4ye){WZ^HU=s~{iq
ze#=aE?4R!(^d))3uflAM%j#d&5PP9yDH&7Bz2qBK41HtaJmkz+pL|*JB4RVL;M1Im
z{~JP<<XubXA at loVyGyQNokiB}60&xOeI^!qO&!(=$bsbU3*cQ;S;9j7wQfG_6sneb
zOnPAVF(P~6H%#Yu)XOee!HI65UnjZbSBDUv?O=WQ7Pl-Z7xnyCeW*{lQKUX(EUQWp
z2k>@S7q7uEse*(4^e{G~<SN#3z_q~#5$t~F`&~;Fe@&fB^p6#(kW04jf>|e-Q}P%E
za7#vyqw~ppWU1p)z`c|i(m`)h+~I^}5tHY- at AY@RH=y2;dEZZS<Gmh>RMNbQ|E=DT
zIm|`gWYpyk=u>;?myuKY4 at Cy_$XEPg2;Knt3eFLxO6vso#JsRcZ5y~WvQ1TNze)KR
zg2e+v{pt6YQ{rXJB+c(SnY2N(#=71%|41Syp3q{@?d(<^Hr?pVlGYV5MvvwTe2Xe@
zLQ9nA?N|<Rxz0p)e>@Skb9 at WFx5HThKEt)pf1Z4-8ypCIhdMMbNZzI{+4bOB_$i`A
z_>Qy=x*10Y>bVgC3Y%dXZ-5?a^vV5eL_K#CawLav&an-)G15B2bEW|zAJN~>r;RZk
zy_jMGmKe_?{W9oV^nI$w?I+yKvtTaS0nE?>;I#HLI<&**7p`#&nqB{zYr5(7rHqQd
z1wG9Y9f0+oH)0|S)f{X>p9wZ&eviht2)1t0Ab*EVrTRL070;41=i~-{jdVv<ga?oR
z85u{=3u at zT!9RE$zIfE7xG-ty1R}3456w^4xD>y at xReP-_!he`FL6n8c<q17FZ6A<
ztn%9|-T~Yev1M7XE;}I5N_R+}8A;DcLchs8c>?xi<BAm}9o*Q^Z%-npxw^TbW2H=R
zuvi0`pi?c6@|<*|B7y>*deC-3c;mZMux|M)qyhGeT7zi9fO at Rv!9TvoK;;yIF%+Ce
zya{~9VV;r^&Y6g3kn!KZT7e>V-?(qkr&`3r4JrN(*dk)dybsy8j`X3Ha}$<C`HiTM
z$ocJ>AS%ev3E39{d&^UNy*qxmj@`yBRPE0z7IUqLLoy7XFaWN(Z}~D+g(2 at LI~Txz
zn>@o1bRT>Q7wlY(27U|v8~CQj4M7`gN&h2u%Zre|H9eZHdgU+hw=|zPnig^zIuN+&
z$$5mAUX>sBm04f)AG7|`&!9J*5;*s4`=BD^?vW(^9oWZU7n}%tire-A41iyqIfZ|t
z&1=P^ybR>)7!b69E2m2NyFt!!es#v~u9JdpW-Z<0pQ;`vJmB^d!EVTNc>qlhPC-{U
zu%ATd7bdAP1@}ZFqe7G~*H2?zhL{p(ERkQxt>9jJbt`|5+o4UPQ`dHTrLTc)OS8%S
zjBe{qTL624o(;J$r?dflQNVfTZ?*?eeVt0m0&d8TtLVR>Daf_$1^g>w)9JzqYp?6r
zozNNk;6HWIH0EG}vngB)Im>T|5?ISM0j%2ALU6KW4<stLUergPjpzQ0Nsl-Ny`WY&
zi5xGz6?QSy9w&#*awhuk{CN*C2A5+V=v!S_;-E*XzRk!Z*iN^7yCdwP>PV-YJ&Wtx
zg~-X!72v+6nbWgp)zid%70?@?Yn}xLW*_h-$Aznbky!x0(+Tz>d9E<i{Vr{I_v6B?
z^DNMDI&dxG%2~62Ao7RL;|G%G7qm^@N1ch?S<BS634V%wnb_E?PVjps%D;5bWAGb>
zZwKxM=u8#dG1$l4xfx(b$ddjNC#hY$W&YhhL#ygE?0zEdN#t#KoVpn0$#1B+s_EOk
zZDR-QGN%OxMUJr5(7km$@XGNnF!hnccpfbsE7MwTIMV`u$O$KQ;?prXi=^A!^P0-i
zG+k!ecOQLFz6kRg^q#OF(Y?WWfUKpHuOt-!gE14nMuJK1x$WYRyE><5P%mQA5g!}e
zY{$I$Ec7Gz#-NLqi-;}YOs#0f06m8Kls>EcR+t054&RYGQ5pzdO}sz84c1S7b at 2xE
z(KmQ at 3%k5A?NXOIZJ8^y$~=w#jp}E*s6 at _<$93*{LPt1dO|;Dy<oc(p{oOWN2W%51
z1nZ%c!(Q<c<^gi<r6^BwuHa4o0CfZxTpASi8$D`hJRPI|kT%rI*e1wMU_V$9c&WN|
z at L@V_loLKg2RD(jzjYRI4o~r8i9F7`#+M&zV7ZpNw|X{bn+gPn#2kq+`jq6CYDYea
z>bh?<?PSe2DAR}@2%E`P8oot3S9FKYK;8_0=&8e?!;S&ZZXLB(IA+<;p_wgLZfkgf
z2Hn(e)W;OR)$7U{4D^O?R3}2!%wEM&`wVtD)~}aBf5Ewo`9pqI%e%KVrfmsVc~7Z(
z6=!#EAHF4|8gpEVN)tCr(chR>mZVA}eC7FlA=4C|VXMVY(K$xX7srYG!PT+T7GT<X
z{c6~M)V&P&)G_zhDbVK_Z&K&lNfq6-BDQ-q!D>s$ylqMZmbDAl`|#(A9b|i`{fvf1
zL3YDv!U at gdT=W;L`@%Y?An5FyXb*lv(Wge2`j)sAzU8w?*=AQ~A>v+jq+g01lBEjd
zk%!%UA at 5LFzNnYjikK(Nm5!8Vi%mvs`QpBer7v>9+3K#EDIeRJ|3EfWs7^<PJ*TbL
z{n5&#vQ6|zipF{~7WpT@|NJ>{`rq|bCEC1#3-fF>vTCkMW{V;DP~F at OG77Qu8bO?7
z^ijlu*-4H8zjo`*vTu+FG1ct4Bn1|yg5<j(xd#yM2$`Q4L+}v%4)AyS1+PH=OGS*L
z=A`!nfyJXB<-hWiS<|bWw`En%mH3 at Y--(~zbuRst?y%dcwZJ+(4Bjuk$JFK7fz$bb
zuEUs1bNp~X$UcB<b8tSuIVsS#B&Q;L9;_VpqYU7n6bdKo6@*8%Mo73gd?=gnN1TiG
zI=^e^+;mkb))QwCgB{Lf>Cc3{z-y&rT8wz+4Nc3u4#=Dure5qI??CiLejMU>qdv5e
z=bSrG`}yj8tgS{+{b5&>H1tQMU_4}<7JPp1 at _J#PSp at sG3iDq!WY~9fmNFsiEH8+h
z$K=FuI4%c{{2}xQ2UCam4b(N7*qPIuM__-WYkI%tFu&!-%~$+VAz__0vX2L99Pe{g
z65CV2E$zp#Ji#UL4Xi1<OFn4Yz#(54sVnYviAf{%Cv{e|4Yr at UiyT8gb>k*EA7D3r
z5_iI$kzA9unqV=%aNE1SbJve>f#6!`ghRP<6?gt;JsE}K44GFnClrVAp2sj}=1yGw
zKhF`2hdusV)hEzJ-<~`hejlG%|Fk3ZmHRp1S2lWv@)=j~{x~jV?u4UBI#nrbtzWy_
zu>kG3PVtBbJfRTw1o)4YOa`{)Je%-4<jxvzl75=`+$)@#-IH_{u{51qi9ZVYpZ_=u
zJzyVMhxx$|jTni=eoS#8bk*SK8510s&#sWQJ+R^=Hzs02sPDjKXbZcdsvzIS&#6oh
z#Gr16wdroV^JZY7aZcEkk at T!2vOo5QT|~M240xYgeN*9^Ii*_EnO3$Ox>vXDaErwm
z0i2f3+F?5u*(o?0-if*HL2!EPjgWL+2kN0B|6va-Cw%56Dd&Ve8SewTf`SV2G8<j0
z>wF8aRu39wf(7V1yH;kI)QIiukf@})=pv(M<mreek2GK_hfgp<7d8q8jNK;|u?~6>
z>`>F(-vRX*sd2yWiP#%Vf$}54D~MM*7HJ6kFx=p`nfT5$Dw3Pb>45BUKbvpH^WH;#
zATmZ=s`y|QI<*Bp)B||WLi8&K-Hx0|gKd0<v^(@>VE at 1gAXA=*&W?B0$UcDFSl3mY
zGMIzJuU*VJb!^|tLfC6zdySUDFPr0S#y9RI{se-{3+s^XPb3)F#rz8NZC~{5W`==2
z?8`HIn#T`^j)1yOFhU2|F8C?FHA4mab3&j7e$4Hv!((feyG<YbS&g+Xe6h=4!WjJz
z_zSW;yI0mtT+5`yaRt`c8)(BSw0mAMcnDC=MM?V89M~_G+ok3lCt_1X((z46FT*C6
zN%F*vEgq`pMWR!7kiG;v(MaW*LQykf=E!_Ci85;nsamw-x3F<H{5{4CE=|6Hev~^e
zi3gh;KbQ7zvCt9d7cC-=lk-*3bsq^;B{Gsr9X6%fIJr5eJBf8 at jAFteuRuE@*5 at 5J
zpG?jp$b+p*UWff0eQr=r{r#N5zQ~Y#4c)@z3C5(Q_)Z%r&PM>*HXq{zn0UIV2>Ki?
zWG=+fL-nx^emBKvaQ)9_Wbv&vb1S<D7e&q^tXn4`*K!Am!yz2u$}b4sH7w5Pv&sb?
z?4`tp@|r<3$J$l)!;&7u<)`|$AEq80+EMli at +CKZSMB{wSgz_QiC4cZi*yyGFT&5>
zeOp%HEJ=UL{i``udUK at Q{Z4CP2R at 3i2-#D1f{bgFduvXWU4qQr1(`W!q#Q9hHT1hf
zr2_k+hOW5+dG&tHu`-9R8n!N9_;9}{a3moQ1~p=+Jc at mvkhamUJ9MJ#^3XFI-Pg;=
zGug4iB;@P)6KzH8&pXf$$T$5H{V;Rr9?QT1P-j-VzxCFk=bRoowsxqTEIRLdU~o?H
zdtOY|Y39bQ8B;`a$UdGWI9+x6pD_;`1!VRT!BNPN--hn{^w53Y5 at Y_x9FeL_Ahrzm
z9FeU at zIc6Q+_k}Pi~296i^#Ybyk_JtykgN=_>jYzE#Is`&e)M|49g0)+^EqWjh4pW
zLOyuUh%<4w(60N3+Ob~~Bfk9iv!Fw}pM~-8kMERAg1vJK);~tHVXR`dL>2#Q)RWlu
zMSC%%z0kLEfH#FK8oXzLj6p1y=Jo&nF7ePSu<n0C`33rTz0eQs`>o;><h?8RDXbso
zD@^DM;8u6ruMUv!<Fv5os|6oRRF8u<%H&#<1vxfcaL|xg0$ZwCY?C0CtxN%4sDenL
z>WGq`HYg7Vziq)5W&vWJvPhq&kpCopG5XFQajA;?$cyQ8&l{qVn&c$h^D(T`k3%LB
zY{`A{otE5BPEtGFwyRt2oW{@({!dwO>Az$FFr34eoC!?@9%?MOExsc%f#^N(t;a}z
zBx`|hw1_Vp$rQTzEeTglxsoB{3VvPJ0DRe<`l0t3fpyqn<e$1S`G&5J%rBF{jS7tB
zVQNdQ3iD<f|84mHT^i$(?#^TU+z{YuAaf=UuCKAiP9wZ6k##wviGEi1an7PhV>I$=
zYinVHNR2$6vxwk1{YGIuqQ`s|Ykhjp at yUpb3R8+~eh%ctT9E7qY`7fp2-}0TY8%R3
z{srf3u*=D@&X>ccZ?P8aIUY~&R;$I=UIp(0y&3Xe;ckQTp;;(>^IJ)dYQJ_0esHWq
z+O-|-93z|Ib16*fNd|7s_7rk$?7FrmdJM{%&PHL-+<O&i&^u+H_tfaV>#ItG-kF})
zRimp$9<+TA;dc${6qaQG3(~#bWOyg%A*n}r1|u>0ez8bwCp_AfD^zD-kGdm>;Tbq3
zUrB7#z}x1-W_=ZX{P3%Z at fE?syhlu2Tt$>0vjs9=8RZx8%B=Ru44tl=kN86uu<AQG
zQR%&j^Vw^5IWUM>)@$}zMxVpAM4u|Xhgbk_v^DJ6gWnhD8<0bzxh8QVFa#w%@cmxp
zWoq at v3;J8&Jauo;Tm|eBrN33n*!zJQd0hnSCwOv*e>IR*bF$}SIQN`Oas^VB=mcO=
z-RlI6P?!jPIRRtud$d<}<gwKUL#Wyas{5@?;~o>rBah`QBHzA#jXSOeep`W3xfbzn
zE*%fwHb}Ko6M&fOx><Fcyz~s#^#fQFH_`q)M_9hXh<#4fbD$V;wa)3N>-<oczYex5
zdFdnMAL{$mKzPr<nJQr&_8jp|V8{CGYIYpt{WYx3`kZ?9a#b+fJT2JhTJgHFk|vm%
z1#2930fq0%+X=o{m;}Xt)+=E*c!L*&SY at B4ZGXoq<9Rs~F2k;B2X@}+=Bpw(!vYX@
zkx9xg--P}e+_{h%Fg!cPuHFq<!fUo{T|}*gj?qu}z|rT`=vQXgN_Ki!!1*cxS8{gg
zG48#%U+FsXj<9{ru-0*l|5ev08-8Cf(0r5IGwH!&gnJczMz=_t=H`8=BjZ4|lZL&?
zo{sm*^h`Gl=Ov(Rdh(`tc08|f<3z48G0^4faL)ylPM|dU7L=$mXDu-LG99s>B2WEj
zKL at zj7wES{OQ3J~B7glys!Z4k>YZxnZM%Ht;kXO!f72c?(@yGZ4}c9urmW+1e%-I+
zV0;^Z<$&)*8}Npm at N;Ql<I!xdJ+J>h(Z)=w#CFLIZaVCsN#I;mx?^`M1j7)kP*>S*
ze{&wktTFoB^dSDCW;Itc;V`(!RwQS}s*?+2<;nWkbkye|zAbp0N}c{`;AFjMm2tDw
zJz+CNSl8g2&xT)8#9nLM<xR!SMLR6TchAI{M^xG{aW?)d*miq*zBy#BS4XD^u_pRb
z at LrcbVkRlt$$g6ue}$NWYxWFs9nPK49<$38R}jzebEC{B3->nH%+d5SGPF;3Y&+Ua
zhMaF5*RdbDZ31a4m4)+0lR3d<5o2v<^wkWMpnceF^g^PC;eP3EJ?z_h-NoMpUk~YF
zby^GB!Gd?fItlt7IA3ksFkUhV7fG2n)-kS*-{5CmNUm4zfZju{HzNP^1FUuBeiQi?
z%_M%Umt~C>@y2>Cfr>Sxz}6`*W<1hOU7eYsuD#`yy()!eJzGx(!!KjE-LSsG39ZlA
zt`*Z&wd;5_jxu{qZ^;>MVd)XO2RmL}VmjHEQd-L`9_qI%LdUyfNP5c#oGI+KqO>pV
zoVS9*cC~xkgSFe=JmRpWAvXu{mrW!8VbdTw2(U!ZZ4Y;*lpewP+l%WF!-Ep-<3nY#
zwfHX8cKHZPK4W?>Us`&VdrxlVQc8b~*5e-8WmoOFCDq&-*aK2Z at 6#cshWa$>3*6^2
ze}$qC<sWp2#!knT*tr=khg9K4-;a|>tZnHT{F;SY$N|p0$2PaLnq!+Aocr}x8h1Hd
zxb80A;j%r2op3dU9oKmn=N~Tp4ZmirwQIQ|&vf#Pk<&F73TlkLCAF2gb}dg2t{=n!
z1Ft6=@jBgJRn at u*@4L~vfZWeZvW9Ei<$RKCW6d(5O2d{^Ei9Yi9L4U#{^+DNu-Ro1
zUx?}h_#69xG3gE4uUZLP;XqPm$yIKa*MMNOqRTmry$c^0I5kkG+0v~BS%Wj|a9l6L
zxc~3+kjHf=Jw=_N(~C5XTeHf&Qr#E at r+pzi-l<`4!?)^N^4?l|Rwmj{j(#MG??qjq
zH at N%FMfZ85*xQJ?k=s(RR?zb7q^;1tzhMm6?MvL>Zon=^t})o)J<U9~ADDU+-|LYE
zom^4uB>g0cM^8jQge^LB{NriR)oSQSzrEsqKUwV^{r9R9z<}Kb2M_U^_6f%D+B-4F
zV4nG{h{%p5M0UU*Jq+VbJP&hQse at qIszjxC8*8dmWW8<|OTQ(0$JSiP#8D&;k&Fwn
z4%5Qt3jf;Up_8L{#K&^cOr8(Dq0lK~ue?ffKrI2^;@mO|a{7SVzqB8DeVYA)O&xED
z*%S69UR%@~D^Z#oy2SaLLnMN{(Ua9(Od+mY4BL>Nl)xR#g?u3M;@pkk at +S9W+E9m+
z(1|Q$j)lDazuvv+|9*E0`E4;St`q%3x<4$Kb!iu4e7qs<tC5xd2^snuC-XbGG9CF=
z+YtxCng<>(z&Ygm0ZVw!Q*7g9VcuOW?qZOKiI*}o|3Xiq%fo at 0`SD5lcB&y~(cC`C
zxMpwLGSi7So|*8zzy91|;4XfWIC%2yL5Ey&<%IQypr?qwl^mTOe$=f)O`?LKi?1iL
zxKm$x1Xx#VW6gh7Xmkok{V~=Da at d^gh;2`HLgt1*Hp<D|gzuA1{Q|i;P~~E)J+Q{t
zrQ=u at xHg_Nx|na>bCJWYkoOG9&Ab0YZq6VwR)o0K(*Ede3R at L;c<Ew&VBGhLhuChT
z*Xm!4+p8ETV!ph_A at 3GszC)Ob_68;j{RbstWvie&$Tr4B6aIi*oG0X=h4ZGG2$q*q
zmpXGV4#_U1>h(dN7;txxm4aca9nd8n*<EZfk?mCx>|M?q{p4mT)&Zq5t{(OCu&(Dc
zs6!T;XiueV!&>#Zabc^vfK}>q$LVezv8CPt{>M7S0q9esaX%Z{sT^}cfDn2!<o0M_
z0yT(#e}p>rMkh|S5#7Vnj5vdN#mvkXseU|LPjnEvO}{b8Up1UwyT%6H<5A-->N@<Q
zuR-_d#d|q%{lmyC%sJ7RlMM<xc`oKiIXBA9Md7K7A-vBcD)3BCa*RHNak3TtMnP<~
zRSW5{;8oF8%DK!zZVsX3%lGKiN*PV!gNaU}CjLVTeB-cv>~-rU|Hc at r4O6IgVhr`-
zJ*%ruux)ske$G{D6GETlLafM<i}uN6Wp?Rw;y-%@cFg`^tw!J6Xc6DD4SH9`|Ee>O
zvi(!%ORKsXWjuCJr-?uKSSoay45KeyseQ$*(`*^k?ePu<yaSiA39+1Ykc~pN-=4?@
zF)^w$v_GY5++`~fXsI)3vs<t^xp5w0!ATCum(Vkmz)C9-?-c}Hhp*Mk1ArM>fLwfY
z%P`i%8=`*0+(7(DI^|b%xqeQS+^-4PaXZSRbOFZd0j=D9%{FpPWfxC5bWJq5#y$QW
zw(W?OCUM)_-JB$s1q0F!<T<&?%~NGYG58LRi0 at XQ+$HL(l9x8oT5|tV#8Tq^8z2i}
z_=vfq4r>BSDxfF7OOtiQ8uJEw{*r)DiFt!<KIYFD^M=kOGu!F|?r;g^@?B$faL33P
z<Q?+O*Pr6mE4Gt%#kg6{JfS~9>qG{8t1e#^^SE#!?v;UirQlxEz*`}#yjv5s=P(aA
zHoSKiEn~c4J4hk-<<;R?$O!;H%HX|oL}vGWG87#{_g6Dd7(Ji4OIhL)@a=&?v!}~%
z7Su3-bT+>OGG#x;!Z6qa9JZaxr5F?2g^S(sJO#Y%Xakb#6|sqAY+$Tx!dUSqIyE2q
zmhBtZ8|7tQVZY*>#0iHnCqmDPAUfax&MQU?YIjDi{-|()QZ;xC<Ka?lAC47~yt}~P
z^!tji?`4dUeTs`=M#2k%|Jh$Exh(AaLt%%W;^4@>tk}Hd>{u0Y30;%q4xLAGF{k3Z
ziwfw05r-wYIPXI2K=QGXME>o<b6(gkr*1|o2HPHWZ?{XKk7crTc7=5tH%oC7$1Twd
z2HVdr!SPfa&l)<eF}k!TNX!$@W>7z-MO-J*;m&ZQDddfWpTymt-0L&Ms9GKNh5yx0
zsGre3|4SddF@;@EFD%)HID6=XrFD>zgJU^Qr6hV9#zMJ9$FJ2Orv5S5Bc1K+6}sGH
zmt>mMT+)zE_{oq?XgL`>q!T^^ozNdTp|<L?e{{l&Zk=%4|DhAoq2t5egm3!)S0{un
zSZMU|%O&~*VnC47mCS*DU%B;*LEW(Hf9i(Zs8UC9y|1e%4RL`|=$ONaK4?B<6aS;X
z-RG}(b#ddahqwQ?4hK8YmBi++UG^pTEmk~oKsPKl6TOi7iAJ1pZIG!A*EyMX at EfM$
zU35klT}$b$kL@`}^tF|(ICoZ&<FOQ@?*=K^Cc2%qjeFkOWV;NVaJ12PeM3BAJE?x?
zZv%p7q040hn~<Xn6r4vt%8VZ%x?54EYM)R-^f}<Tt9fmB&)ZR+;95#o=8BNt%l+SX
zZMP^b{uf$HIlWqqo>SV3x<qs0f2Gq)o4C at FHf}bhY25Y5%Om}n0d88UgIoi-WhZ)^
z9p54^ZAdrL;QY6hNB+^}irj5GV5bLlH*f(B>Td7H_qy$=bK@@(z8>;T={i$W5y5Mc
zIbd1nc*5I*ejTNf=Lc{8;V%w;2A3bWPX3!dcV|$agUvgEH9~LSVNdtk@^lu~`zeSg
zgnYKAu|dEb4UjlOIsn+bZ1#pdU33rc-omAo9!{EUx=GJxJLrUv0Ymx*XPh+j5Moa{
zsK;h at bp}#bh+mGfSK>IXPlN4Zdi-X at Djo)B(iPavdel$6VK)SLJ13<ePZZ9fyhuqQ
z?vd?w>$=i-x7~|NAh-o^>V;Tb&KtE4mcKj5ulMLJY`=r;WN;)e#`Zd*hYoV;@Dd5n
zv~U?u34Wy~AeZ)I4nm9 at UCz`dq^W+43RcZcaOe2^`4>Nnb_;MM at MRNRvubheIBGqK
z2hqfU59jby<P=i91Rv74S_hAC`+!#ywz>CUZyx22Nw*X1IQ;|WXIa at 4tg&x(im3A$
zZ>e5_J;$HSC$vtrDPy_YE*2|z8hu8`wnYU?%~t98htSo2w7$9LY*@c{1&M94j at fg&
zUT3|e-Y9KAuIIDX>3dosR}KRc^St^A<kvaNpM&<lGD&nq$IYZFu?`^oY!@-#V|-GF
z=qb$&pY&2WjWV at fs6&4soFOZyO4#`tu+}ltlbajP at 1W9fd;@fm0Psn`&jsE;iFv>Q
z`y|Fu_xbY*2YgVqf--3}V$<NWvYNK5JbZv3G|oRW{uD4O?=W=9365^Ia5b<K>7k2F
z;#Uw1Wy?w7Y~oAT1fcCaVVCuGx8Kk3vyIF9B7~a!rgBp45gy4CHPnW<S0VbKMp_qD
zNcH&&koVJ}n!=>RKaI8omdpXprkk{c*uJE7jWv|Xy=JRPen{FcIuUXBix7uDSpUuS
z0e|Jt-9}d^_#E7I2$5FXmF!Z~0c#tRaoHJ?(?|7=;8XJc)PB5cJK+o?F;;dVo1B20
z2JZN{z3 at kUxTF<W-HtGS@~uO{$r|?pZ<Ygg??0iR{vEII6%)hO+x9|EJ5i6MQX^t<
z!(W~czf(-5(Y9Bm7i<K-`F>ohB<m+Us}9eKVUrQp at loDU!9l_1+ItsXaJSQG^fP}F
z=MtMT&r!@M_mVpJImLH~ua96e8>{dCW%uT9j)a}nH&y%y{~yI=0}BfK#FEFwr1YUq
zBklwxKbPdrz#6H(_Po1aGt_!{rg`82e6ffzyMo_UdlGvE<NT`NSB#xtrk41;64D at V
z!tgy{4 at MseBDqz=wh+G|{8MwNtAhIzs;`2hiC|@sBWOUtL*7z`V78DCD6_b*m_b~0
zhw?gfhOT;9Nig(VS4B**j+qY}2y(bK)*Q$Kf1;bC>bP`uHy2wPWaq)Q=GOJ8!){%l
z^jlBmWJA#Bz#nL1NIqAB^Ch at nVn-!5DS8FsrV>fK7~!)fF${0-iwZXSgu(~!UZ1s)
z_C_C7g8S&UDw5&F?GNjk$q}0|Gha1jFgN(#xQ&T}@}$oZyQaa-*SYQ)ckV0!^0)T7
z^Jz6A$ClR3gHQI|ap&Cvujl%AlF#B=?CX2io%{7CaOl6EOme at 5V&D2$J#=puI9o+-
zj at H{ue?#Ji!`~%(J}$V4?^8kitKm`jjd%OFHj><>1aHIp798sfOo~r#f`3oM6oQZ3
z3mp2_A;XYc;bRT%KMc78uf-POeRqC`+>vfhTI}n-<L0R)`x=tl2G8sLB9_K^sKdIK
zl3NGgx4$t~JG8IWoxc`!=zrB+2VA?+*IftP&pC6j4$uc*A$0*x2{<8 at 0bKB#G9o5_
znlWzjXBpv>%QK#yygTEW$-7`b8%Xvcx*6UzfcUYYvjZ#3MXLxuXCeIkSCYzk4|9~w
zE-p6Q$fSiIXA;7XF|)#(bUI!ixMsU at -Yj*{>%tG`W>z9 at 41VI_(8ID+`(}Bg%s}aZ
zG6|(8$^?{;p?m|S7s_OmBT+IaNp2V#B_CxGN($vlls+g`D1A{bLOBU#KFY}`m!OPA
z8HjQs%F!sJQI19VGRjaD>_1ar+hBJzqaR`WI<~ix?O7vm+)uR+y8AA0|8HqNR%4-y
z>Xl|4uUjw at cH(m6(1bslv>#JGQZN1>S}0x@{j~Vq=yBqW(JzVF=oiHwMMsKDqJzct
z(ShQIXn(OGdbGIK=sRN_ex<<Wg2zHoQ2SunM?4p;!y4;*eg)cfPofTE%Zq)FPE&qh
z5Pk;Ct<j@?wb({yVLerSK9cvPqRHTj=&$MBJGf7_VWE&VJiOD`;5sL}aIK&Q at iWU{
z$I?(v#4f)cm$&#pXrdwR&i4)6g>-Q*v0L`!0$Z5T(0U=A>Zi2?e@>lgS?TKwxg8rV
zF>kRU=2d{WAi-CZ#ZCi1sYmXRUAFyL!#r|x9WEhUhYA~Aj%&YCIDp at M${k~*0{>5W
zv#W0n?B+98tU8cr>M}iD{*-VG_T at I+<ffxs+H}*f)GG!YdEJd^r$Ri>5qm*I=wSKW
zjf6DnjIj9m$0w&oHl^?MUvG%u+rjl?yZR#4*;vhg3w8yYz(>(Z+C`HItOanW_Jbr=
zEE2g at O<NqueFn}v*O)g%+|^kACg3=np6A^Bd$m{(&xAbnIDSGqa}aBUvHKSKH$%mG
zm{qMU3&sS=^CD*o_$I{4M~bK!k%<P`dOP+9$}dMAGsr%$H&#=xd0-qkMNKyh1$e$T
z^0DB_>Q-)8DgOoJEEU{_O=%6UA?&!K7d9 at hswCTUz~0yx8L-D96 at 1~^^eV;{7d$G@
zgVr0n?-|9z{G4cm>gEhTC*nJu$i?W?egOHs#oa#|B9F_TRqYn|MsA=MM6MT{N1xd%
z{aK at Hc0EjL5*da?HpwGQa!m^S{MFQlblq3;>FHn10^cp-<k at f43b9fC^z-im*Dzq1
zIl>OVd|&!ACi4o|i@{HN9Q+8*$=Y~L%@ZXY at FLrQvAr9%9N$XZWZ~XuI>F5VZo`cA
zUrtEpq)d$GQ-bc%0eO!`$K<*D(u?tm0bUyN`pj3 at dFcu#FR^%)JMTB_Ab#87CoML5
z?B}$@36~gYW7Db!n+iH&SEHRj5b#yI<U;y^JVLcH`5bIiWX>xgJaGTx+?D^&xfk5$
zdhDC@|D3D-f6hHVcy8kyoGSy@)JOQ<QGD>=8C~yx4er<?zTDl;Kcb%L>{Y}Sp{-HM
ztnbls`T;kMa=6?4r^0sFjgAW-?W0pw=LF9KPYgS{Esn3pd%KS3 at Ef9~;KKJA(I6P5
z2baK}?`eBe1>N2 at tkp+-6#vg3h~b~#y>rjGP!aZt)P2~#0e+^)dfA>X at S5!Kl{C9r
zHQ+t at 8TZY@_Ht}*#<`2tz-I1gIS_ODOqdfkoQ1Fn+{1A{91lUsZ>rckufX9uMzI;^
zt;4+*;ofZMG#vBAInU(BhEUj^itT2UPviXbsSjZ9aQ#%PSK^v7T%+|b2M-8xwYQGP
zd1jOoz;o~uu*0%rslJFE=~OE3RLR(1DFxPzJCR at NnDr{1wZTlMRam&RbRKkMjt=Fy
zeE$X9kL<AA_hsZ1ZD70T??Q=w{9<PpyM}{Z5N+CpyonqafHqI9d_b?N<hYB7+n-}}
zS%Y!!`@m?*LS4RNa6R~hX$g*B(%-%+W$ST$Kdv8eUmuKPSvdAbd~dDn?tmyqF$u>V
zovFZ40RM>d>^RQ`tOuThZz@%F6x85<3jSwSqEsLb0&QT||3%6JGxd+$<tcr?yWFMk
z;-%pIo~8O=kJ&(LrvfW=>V3LEH5>m~@~mRmhIemcM<D0Qw~ey#Bfw|;X`}2HZ;cK*
z^Q5Qs;2+pqBnP*67W#-xaX_Ar_mGqKuzHsn$UCuZv;?t`^{N*_msl;-z0kaR<>^EI
zlk<-3-o`(4RSLe&>C{6yP3?gGacK9p$JN;PVDSI at Wc#LXqVi6IuJQzRKIx45nVG$f
zHI7=k4*oa1AKrzJHRECH^!R_lhkTzYFuKlf5M2}g1leC;^f0RU4Z at ksO-~cglCa>b
z&uQ?a2u3OTbwRL2%~w3e%T^3y(iOw$Y%N8`kHI+ at X9xXf&v%J_8w8(7mke(6Ui@#{
zVzO;gj05kD;o-JK=@JgS^6Gf#KFRD&ZZ_h==3sla^0%7AsgH;qpId`p5q at j&E5>gH
z^jHQs>doL&BlF~TlVddU(Jb3xW*swMc&9~PekyV{&(b0;KZRU%OGvx|a at Z{~P5<#-
z at Qt%wQef7;7d;Zn&FrO|crGsU#UqU}et&d|l4;yE{A)UuYDFxXN3}Qbcj^Dg|6z96
zD<JQ^?B47ZjEi@|liMDbJfrTx_V3{{^5r3k*2l-&d2Rly)i;INI2M&>+r4AL#*nOL
z*T at k$94!U5z1ld#uLI-9Pws#ZlB-Hjkp#=tcJSMcBm5yFM_|81;Ro)tTl4~>$B(y>
zUu*#n{u8f#f*|o0^6VtY_g0^rdfa<gDB0%cG-Lbw(0pvKmNzr)yt(yDHEQV6^;I&e
zFFS191K{)rfYa~q9ESgCl_%)=(5*8Rt>pbe6Ue)&|0H#aOxAZ|Of+ at Mz|V>pIh6e<
z_o3_)A_fKT*CV;<|FBuN!6HnBPj*`P!`#g92L(0I_cGZB^a3wOP8P2_CmY8S!h3P7
z2X>yG9OU?h-+Yf>hql6SjJ;-<=si$W!FLfJXa;K$dW@<bHuScn7|%&OdHDV8mNEA_
z&6Jag3H{4IOMT^}<lXKZT|-xInwJ(jqqFS0hORYfD0h+4Ym0kd4KgN>b<Ieg#US%X
zY{X#BJui#Vchf<U?Vmh*<qB?S+vCT)VsN99{CY- at 9m$aYF@`16bf!(vX#)+1d5HI>
zTIGs1Z%(J~PYO)36&>^rt^x;B-uEg6xLq5 at FzVstnfZUI>Z60=UC{yX`M(w30DE<P
zr-OB5Z}zX%@ggx^SxaaU`kFSfiLS43U_NnhZ-#1L$yE6X-VTRMfelxw;N**jwliVM
zcr*ND)lIhz{-OK|Fzi8*@5ry3x)@owK0mNh#!0Q^T)?u{(Dw)17WzXllM379q^i!=
zbgZYR&9qm=lywW`)(YD<WbH}xbd?rs;76Q;z1wz;b+sL19c|@oH(7%k<PomGSs^n+
zr-dH-mjqnFDQ{as=bNr1q%F6EX1 at JpXy&jBqjYM=sF*zTU2RZH at b8TJd#}PgruLT|
z9pDE{Z?<%<BG^U3rGz;ictxV~ac{XXr5;sdA@|l1ea32m%zqVJtgjIsMqpJw!2I$!
z_Zf15j>LN8UW59!%v@<NG`jA-WwqF4Jd6CZw&Ao+-IWxR=qO at B4`HrpIFM%Zd{s_j
zES3NZoX0VGeHUbGHsY$zU at ddkZ?n1b(LCH^mh}Yg(V#1gG}I(&dXsdpGh|w?(urRC
zw;!W?)W at tYE}*HKza!~^u=Ik1`_4Sjn>FDyWT5Nr=X^^|4ERH)tm`+VP~be$YzKZ4
zG5+8Z11Cri at t419ZKJ_+!stTtFh(Cw(#`X(m$4^vGAq?|+PEU<PJKB!(2p|0doUj0
zU!u<DD6DeuuRG`h<Ua!!Y|euCGlW~e?i=fyoYY*|qroxc^Au-VKjY?$2Y|`zod}E$
z$@PkLbw6xS2IMNn_3-O}VvLsN0ZT#kOiUrUn1Qi&AICGZVPlbv9RTJZ_BN^)r4wVt
zPQyP3830}k_c8eOs5TsfZHTO6 at a=%lB{FcU1(-}3bm3VT8{=xfSaT{FoGgzm6ing8
z5)J~Ssd%*J6v>bC*g_^%e_5mB4fsy;?$6uI>-SBp>OAqRw at sZk&+eZ#q9Zglxl5-r
z<<e4xQ&Yg}ZQM0#wsrcC8z$!9yyxaQ{4tNkO2qc>@Q#Ak3!CUP*q5FG at 1RcqTJ(J2
zE#^?jgSzf{*d=a4-#US{g_ABPe1CeI|1Wtx)+?V(v7Y_pb*9exDy_3VPsfb(5i*G5
z*Qtl8mm#h*K-@#(dzn<~qOVQN*%Qh(pS&A9;9KMs1P;pQ5eIGw%`w^kgnl7d%5R8E
zB>VH92>GUpZcVO=Zk<Jq)&=0cI%^0Wqi9c(iM^Rr_KHoR|2X;(DI0Dr0k)f)*wA?^
ztASgbMYu5V4j;7*L*KoQ*kG4hrd+Fu5e*O-VgP6Cm?!cc7fN1q#rY{b=zSNUXNJ0>
zXS>h8&mbq6?=Zf_jcrcC+7EoeC+GMNz at OHhklAqaUe?t6Cy#yBpP#Q%AP#h|X05`Z
z@#k9*t8u96OR6H_3963{0cP<9_&M|@AtxG9f#`&5dAlLsM5ZgW2=OS>^UsH*=AXf@
zH6-<})7A=XdkU`~HsRirbDnXXEZ7Qe5SMz*B*jyH->AyauMg6Ju%~^)>j!S7vvJqx
zaPY<FlWq6A!M1yH`k4Ncsh{-|?q}#1tNp&wy6~MpSBK2Ax9H1{zM`NkD33F+XMKE5
zJkTO4KU&Px-n#>QAf1kW7J!(-5Y-=KKj!jd{yNA8zR}~$2k^h=sGg5QKA=__GOobe
zqJCoD&sOP=pGS|yI7nk<oD963qf}3D<0uzmf1GPH;2o5);5!ZB8)C~`z_<RIcOC5^
z;n}%FzaU{ESu_6qpZ`#piT{uAKLgn5M5>b>WAyzfsn&64k#}s%)bgXi>_X?Y<9mvG
zm~09-JgN%q<HCC$Sy^8DpF3{?n_PqMfi<#Uc~$F)c(Dz~juxfW_TE_}T|&+)N()`t
zl2d*pez&#*_Xuj-^<X_>0j@(I>=T@!f{A?+`2HS}2Zo;i;_;%iXO0ir2=6+%(In at o
zlFXIRCkO}G?&-prXpdR>;2GL;Cj at OWdb7G6oR#|pV=6b;_Cen6y7E0~BgB<o!#Q{T
zH!Fdm at a`U6&f|a$wnNVOesHh$8tRA~Mde4aX7SCRMeK{@{y)SD_ru3rePK7T4WayE
zu)KAsUZyPtMjLp`$U=F!;Z|R{sbfXTR~C9}q)xtNXuCSHK>o?l_V<w*`Da7hyIBjD
z#h&0YhyMS7|2eFS%O>k<<Ye9hpS+Au5j-pGnJ(uv<Y@(eo;|tt{MLZTe)*G9Gp$qH
zmxITnFTo!;cFioI!hfwiDe|CziQF#uHF6tSn<>5`_P22sMn^Dz%`U%%gZxvCyILiU
zvf2Me9p((yLHh??zP2!Zi+imf@?UGkRo(xrt+(O&TTMH;&G}s+Pm+6Ky9V3P!Thw?
zZpO9(+Y)SBQ0kj@?iEwE{0O7VuGY`Nvo0JM#=ej8{DEPoALi#7T~1mr!vFWN-^*W;
z_W;|c4-6wVRqd7o!%RH+xX5GROLy5;>6c=k66aN-oQIM|S&DPU=Bpu}m+4p6%L>YI
zkGA at 41)KeQFlP2cUz>|}>BoCz;C&8a`xWeyH|;ch>3<Bqj5^<E@&66%7ZTkL`zuI)
z8M)Ip8vl>xwBUY^aNkexycH<*cwQ2DZ~F#)HU2LRpNaEM=3K(|avV#=+UG+YA2Izc
zeJ$Q=#Pnc&!!X!f>Mvq#nliPXQSj;;tM3YirBPitcOB00_`Xknj!yMokM{}pEyD9<
zr9HkhV$^iJ+QzL3UC<RiYDvBoAsB7+oH|2)-(6pw{wlfuj4S$^z<529BmV>N*)FbC
zKLAWWunO#aU*wwm{u9j4UQ^*?QcW0UcIR0*&&yJ+Vv?0_$knU5VZZJPlh)o@^BZs;
zusbqic at GnU6pxSx1-LQlEbLIe!Z#UbnArX9wRrcH!Z&%YoHrHc-S1pO&lDE;AICe3
zgoPM~GW5}Gx7`IfC~EI~^HOMc6#CuBQ^>oVuDBsz2s;fE`7ZkBJEVWU+)psY<1D5H
z at 8mRAfBgglKfn9A)fa9<26y}Qx%=;>sNZTGJDR}%j<~PvweEd?kg>r8fERK&csqaN
zZJ|4)2KVtI$WYQJ|Af953}59$*rMiBz-d=FIB>C#UmJcJdWf-c>+}uqJ42qRGNMJQ
zi;dNv{~K|`7Si|J*F7Qb&2Aq%HQPLH63*T2=ODUU`%eV7L3CbbEOg%F_*g~}eu7CI
zwDZ<4(9FwG^X}#>L>n#QIdk4boYy9!$E}}2yK{1(Ysgvn6o`&7xK<>-66CThj8;Fd
zk4=G2m83WaUdspaKowse6zLEwpW2OiA2DfXRdj)(!#W-0T*;C3>1I<o?0I;f2jE>7
z4+sjSh(}|O#>rKmL56dJN8-M;0P}rkrs`s}glfh04D4rS^ixMzI at Wcv$bmR%<U!N)
zaaPEYhom1g?uxjqmM!UJba at y95jWHUuvr!2+npvd1Kjp&i0={qe?#5<jh?UHgH3dS
za&?Y!>_CpHiqpIwe!QrHa5B|9I312}#&<|F4-CvJE^G<CSl5sWd&g$0i}PTt4Z30%
z^SZRnGY$G5`d^7m3jZ8r+fwk}6>1Bk=Mp=7WVakVx*Az1){PGr$H`&;YbU-Q-p{5C
zt&8OFlRt;G2Jqdybn<SI#WlJz at L`oclEbD at TS{{Fl=SD5{KTb{1 at k)iKS>*C+tCK@
zc~-+vf#h2jjp5fpcfFp}KIg`D2iuKrYRPta`7>$w{`KMJY+EIAqIl8Z<IvM7+F1ET
zv(=VM`k$dSdo6xN=7H|Q$R4 at X)L~0$8*VbI|CB2tUo)if?N!@sg5A}==R=bs|0RFY
za3ou0=*(8uUfj_H{^+CN2^bEZfG)h7oL9lDK)==U;6KtNVUF&|2|znyT{alcIidpV
z7Uwd{^D(0jLcURvALQpPxfmLTc+TM#kD~R1`JnqW4ThrMy;c|bTz3hsAwIM&^x*Do
zRB(uV#1`Q)1Gi10IEwui?9bc1oed7H!oC#6MS0%n{lOY_s7ZRhTd0AZ;2`X)5k{ZW
zDzU%dH<V9;`!j0eeasE(Ar}O~nWIk&TA`OMh&<ky_L~y%Kz(wxvAeDtF&vV}ChW_g
zmU{)Q%=Vrrc=)_GbRh})-y*sg{i$xO%TM=wtUPe^JhhRRc8F%r7Gqt5^~sHsx-VVZ
zRqTgq<B_w7sji0{*kAkjd+UpwA(g_PJk!S~Vk{#EZlVu-F747o`Oi{&O^VlQqJntf
zg`4K!r6X<v at f3cDuLt%4cFgC8H`eq&8&pVHLKa3Qy)tr1E#hUZPEX7Mz!eG?g<g%5
zk2xk3MGjlGD6;A0R59l-&$FA}+|weIFgH!oJuQOrlP6je4P5K;(3P*ujFiJ~-2$KX
zsaLW?t{?Je`~2l<+v*s>jnQ(o!&Gqff$8Zzr`1na9cg_#^bpQH1sQ!A`I{`lY`pVC
zdZ}T1naA#G>X#7c7-$nc`eW?GZz=H8p}vxN9t?afbb!&dd6vSPr&NUajfRb&4t{-!
z>PKFH+h+eGaGMWkdE_biU#2`;N at TO)u%BJN#FSf*5@`ySz@{=9ykL_fPwN7f*h3R9
zq|ys6<gVRjvaigVx}O<k^z7U&?vm&8Vi5D;WXdB?<C=QJk!}C3+T*U^*kBx)Yx<_0
zpUTV?UHMEy0{og$LCikkGIM2 at TJgJlnR(#am;N6yvJK$MnmYL;Ljn7QxSAh$&c>>T
zhYTs+{lFh!4*Tk0+$`Qcrd)B4T;uADJed&K;L6BU2<R->dF1HtTPy3K1KNa{IPY`V
z*MKW##=w6vnioTI13~ZpL~x&XCv0!zY2=W(pD>#Durr>z+*tjW!S7S_CCDYemB_D*
zaSfRYf6RsrbXw#=d74S>NU;v%Z{>CPug+_S{a$UD317r=W)k7%ZIoR*5Uo*NtciNx
z?wg}<`YNbc;WxnHJrX|<6r0%|#2kAqfKLdVGL1DwZ^Ex*=WT&5wS`xqRsz#JmT&<Z
zJw6?!os4^UAf6L)3%Xn;Y`}@U4sewA6tqveY)C4(KC217vn=VpB-q413>nG=3IDU;
zWq01EB-ngcRO#4FY7J~5Q$&A;Rq4-KrJvjli^d$191fn$aj!%d at IHm@@aI~&*Lpgp
zt~)xVuG^rCw1-7U{w17YX7?Zu>0ih6IQNrW_jN}UJ at D0i6?U1Nhg?5$_TORAu)V~G
z_lNxi%xFiQBU*?5Qz{+Y*~os(PnzHkg6m>u!fyK&aFiuXAda7>{z%wNEpFU8ZMAP6
zIQJYPvnOyL+(pyP)~w2F+$GaZL)O^)xNZ%%fFjqgMoD77S6K^o{M9L9i%5PXW`*h#
z_!5hYq-33r`(EeOtLNZ8*Qr17ZYzhLu^T>_nbeF>_j?cyKW><)-Tl0dq32otd0xTL
z^XQ at HX@;Js{rh<sQ^Y3V;4Sz&cMGuvRehTM8Nocj-$-~Kz$?#yM>TsBxJiofUdu#Q
z*tbz42Ak*{oA_r;k9?=rUn at I-_cZy}sc+KREsm at RuOQ63&!e8_h_AyOjP-pAa{l~O
z1qwIlLNw8D;{OGl3OL2cee;7u=b5_x42Yc6sb<f~&qUT4bi?i7+I%FJz{ax;&&*d3
zxbKzh1)eJ0%b+uFPoaGL>M#dy!aNs at HIhVn(E8 at o<A@*k2u=g{g}m8vH`H`^O-k)g
zg{-t8Om|Y<DKoju>99FHLvrzmA9+fowbqyS+y__PBLRgRGYbq46Ba386TggpEgCM&
zQhmQYk$qrNOl?|OpgQJPVf6Vrq_`_;6c2V5qwC$B;#%^&xM@{K67oz&NhZ$`<&Ect
zfO8L+?ZM}gXNrGC&W<sSvYq2REy!(C3jA7T?X~Y_dYi2;Pdy^cK(fv({Fe^?XKaeD
z7Ln!p%0gax%Mzgn;}70{#cGGB#A>9M;T;r+SCnDQrJcOl`i6nz6=LnF<lS)(iN1 at x
zFRs6V`6Y$a(GRQq?2T^To45U at LjD&6t3!Ma$CY12Q6<~xk)?I?gJ#R0YfF#O{m54#
zFHNKmNgK$z6Ef9KlNc{q{TEyc1 at 7rG=+ZZOg^2O`TtWJa3Ui5m7JL at IUw>kB{d=9r
zmZSy0izxmKY{XYNx!<wq6stq4mhMA8xfh2R9!{6ko3;@8e>T4VyyD`7AYPYOhw8j8
zpi-vUhTrxVn~)Rr9>Mqh77zc+VzE6c5cucCtV0WVX_N3=OaWw}j4?&|;CQZx#Ok=V
zyiE0C?H&yIMSO0SXkGl7TG{H}=vizzHyzxF{icTKEaehLE=3OWO_!)@<;E!DSLzq_
z3NG at t2-ZM%j<(z^`i$C(yr~AiL+D#6gY6aO0U4=6%yh469k`CO1>8t18C0hXiF^8U
z6IH8{RWa|w2Gy0DsN_1AQjZL26Z&(7n2!{dztRh0*K?}U8#q3YJ8A4q$m{Dxlh|%M
zIVMug#j)$a)(wR1#l9?DGh^%){O5`$VS6t2rB(uCgL9|h{~H9SN3hu_>rpCDvb+Y|
z`$0k=(@#&P7{O~V9u at ci7gT^8d$R60zcbppZ at vVEs!nwgn3)DHmb%=z%J%By$CPy_
zBb+ko{i_PwlevkN56jjeW<i1S9h8|U-$j{$n6Njn{T{aGSDq{TsPf-s at 8kbQ#DJEg
zEEVJ-j(Bp>6Qwt47QB0 at luzeuTh!hf at 9x|+I9^tHyX-^$w>llgRn4}&D%c`^MEam$
z3~a7xr7mt=Lsxs&1vOox at aDp7FYq$LI&fYD6GnZtJ&5%cyf$*wH at j@Xe&y)15rcKn
z>DUTxhU#MHZ?-AO*-(cv9`!hZdW>?{V||H>eh$xm-(+dcLYuF$J=>|U2@$7p192J;
zvHdj40hHmnfuxQ&_dPGH8T@)WU$ec2^Pj=738+^r%JHOrC||P6s3_Qp?xTJ$sK$C(
zD_}38Yj7=l+6THZx!;SLrS5u8K|Om0>j~^T+SNY8v-{*Ue!p-#`(xQh*4t&Dhjs9R
zsIN&Kc{!?o7u5dYTUMuy#e7}M8-<v#K$2 at t^`mnlbp`gT!%P}t|3;$^%u)?!+N~XB
z|H5`MudTQ~_O{`<O`KP&bZdhSxfGanJZied!XXDk^6VmAlyAvmT3)OLR<*xzYwSf&
z^Q7A};ye(~FrLI3ed+|C4omu!ATN1#?DDItsUAjQ&gq4nIsw?Kzb+F at KkvLRVpdR|
zgN`^8HXn<i7`!lnB at MumZni5%YG)V4?&Ate at 4x-5ne7FtfY!BKFN&bG*9+OdXeVn1
z*7~|V3%TIrf*rzi at P08ZuA+!9w{!FI<%aZE?g<k|YG?W5y3H+H5N~F-FO7ctmH&^g
zFOO^DTK@)70V5feooLmX7Af4T)P-8Ch=OQcfRGS~ELIXyt7t|tMpUG=_S#BeY-{!2
zs->vZ+SJw<S=wsVs!*#jDw{28L_oA|84?nZ?fssBZGZRuz3(6MIcK&rXU_7R=RC{z
zLF@{BqRZBnME23zD`BfFh+#W0f3GiI4EsCmS4kTOIQ7Rv$eoz~CAWbWMwbTnjE~Q+
z<TjqI(q&?fY!9C4IW^NFPRg?Qr{Fw4YquXA91gy=7PfHSlK<d5?xjx8IAtHsz3^<K
z<g+ZRUkvPIA%~)6C`ShRPJvD`7pwSR^4`>i`NFO+JYJaNGCfybTV&r$%0*m{vVt<M
zoP4`r7q>mOo#;W at PS6J^v$0i?p+a2jtgAZa-7j=vy+tXeVQ2p#=Q+~&r6E?<ryMbl
zD;W$t;+e)TTVmw~-B4;awH~}Xqqq^XGIw3S-x7)0Ih<acW2%9 at _c?QOrTe!N!X7L*
z3mw~sz}<cq7(5v~%`3oatPr;p5BRw?6F)cD!ape1uxzoiFuLOFD_a-LhfnE;C}$$d
zxjhATPFG5z*ZzO}+(hs(b@;huC&Dkt;pYY$6dPm)RRK4F%`lnwR8Rz3dISC8THm_%
z!(1C(uP}v-f=z`Np+5>;KYpZ3aQk3j!NT at Xa!XPJ9aNCSly%ha_27-3Wtk5xUg(qG
zvh;p)f^$6UGNB7AfQ<~*c~W8Q9O(bLQu*eg0n3e_tf&!{N4LqI=6>o at rJb4o56Hv4
zOT{0KrIL*Hmbof at z-nU&-9$GKJ1mUZ>7)+u3+sL*CDLLMvq8cn(4c%-Z$uo@?T85m
z{v|iw-v%8W&o9~3%6*GH%6Gu1Tkd~q%}v*KojAWyNw8y~a~9-nUPteOeZHK%<0Ogf
z<)(SueMJgfpVR^yux+|=-tvlQz;|pH%9c<*+L?uIxiWzjF&~R8 at h%;TM43eatfIET
z{x*+x;1tc|!*`o%BzSGW)Cv;}&TID-of*;=j(x3bz0-zn`Dwu$qK+Q12AEdWZLh_r
zLw^Z-n2Eq;Ry*)tH>iNkLay;|V4vijr*`CfhHJ=u#v9k|==bd&QW6J7>4R~Tzrm`m
zi)lx^Y<px}Ll~zuc9w{5A)YjRMABk8;A}n7k1ndleqUK4f`0HSxes1&CFB=BQ)NTz
z;d!Lz?|{DH%Gv~v9nROzjOS8-DIwLsULP{Ik~3S|W}vL};ZJ8QI>T@>`KGoQHb}pW
ztzNU(z)cG at +I!|Y^cJV4u9h2dZ=ybv!ac;`szZzq at P@^4W_N1Ghp6|+$D6qSdPkjq
zj at vl$rsID8-|siXaN634w%Pc0416tSyV!E4UAn`m3_s_pR*U_U8Zxo&+);(rhPB1z
zwS~eS#1i9T)5o*b!qf(iON at n0NI_Gs#Lz~o6l<G<sgC9bs<Rn>Va+_MYp`i^uFK8O
zuG1+SRn03YOU2hWd`8Wp_F9o2lCT}ub9<fAHgsF at tQGHA@vaqR=-$vj42|=jq*yF#
zS1$U!kxR_WJ~*0kqf>v~-F9M=1$61)tRcVqB9PlXovKi7S)^EdY}Lx at FS4MA-anV~
zTM1vfG?Xv8{G>hBbgxi*ss4>X(*wTtl8Fh#y$q at ZK6KssO}s5G_4$Ljjqr`%V0?UD
z9A#N~Ysht>)U_;UBibdcU@%u^a0*fxopMB(cZA8C+FnkD&wiO<Ymh3-`_Kf+CQLhB
z%8_g3j%z-`{T`?DBpySBojf1i7G4kd%<k!%L93G3+lZeSLhRoyA{+^M))rs(R#QFe
z+vLjn+}X_r-*IJMYF4tkW at 1B7RnXaJFX(G*E$D3yWKGQ)whDegl`R_fz3;^Z6(!49
zH^JuvG<Ti<KXn1W5u6kT7?mLbs|_!5DqbDqm1pC27jzO|KuZ<t1MGheet^I*q|Y-9
z-;S|wL%u<`jJ3l at wWnCYZ=h=~)kQ*|YFV_T?N~Hboh_AFv$3M-W*6Dl)S6o9p9_y$
z(hW~K15H;8wT34-fraPb!#tSV0Dqm0hIg`5hO4Qn)5kf{5Wk$#A;*Mqu1H;v<#^Xd
zn5FLZmR8W8!5 at y*HwvmpO;O&r9AdrnE`n-LoAQZ1m91WTZF)?xINw{p=<Jqe#DGTo
z1ULDzFD>|Z>dR;s)BKjnLlz!_UDwuzpD_<B#lQk`tUII)M(l%aG~)zpn(%g!Bc^2=
z(q0LPWhf%Cf>EwDzdBmP9^w!ahFfYZQN_tG1&zfVKc&#3eV(YM8s$t%?74t at h>;MV
z51Y>5bwX*uHQ*;8p06M?;E23YSHm`|tdxlZCR>H}(JS0Yekc4*bjzOAg{*-k#^V{l
zA%YBH8<)Du>@PBMbd0xgWU8`LH%@DZ4z=emTCH-WO^6?QDx7N+vYi<xfDOB}ppgs9
z*Ku(!SCwP-HFGBl-r>T+xsBOKvk6Z^=W}wlQ}-fx3@^4rACu7?Fhr0Eot<{2r{G5t
zZ!tqfAHaARo52`clUxwLGlm at tT!7P9n at pJ!Lt=YixDL4FzvH-pqk)TNJ2{5!;4;{=
zx~QR+k|-xPoqSOCvw9-#(;1AhC9w6sapcQ<Z@*OFv8=ClZ7)|^0#?Juc|ECf!8z`P
z=Z2BKl+{n_IYU{1YuVmUs3h2JmceFTg|=qtt|@WGyIclz((4R|XjPWPKhdR*N&;rr
z`XTK(YF7(leU6>q5tc&6G<?H3E>83{#zw=!yaF8;=2~`?$?qlqmi4j$@j|nh%zXs_
zQOWFGX``1aD!r$9O2>S)Q6TGC`8F+36kfJ at q`B_)oNBxhD*m;~^1>zCYp-3pdos{S
zwWk`LrXMw4nIX=qIGV8VqGz at LPkwW~cTukhPQE3{vSh3ray_8XAmLs!#L$74ueGOM
zzIE&9<)4{Us=f4FzPE6ZR~LVMK&@_`r6;E*OOvxv_S}h7#E6bzL-bL>)kmZ9?K*3A
z&nWBATsnH_`cVg!Lxs{+Vg3h6d#HZgIM3MHl3{3P#=H7t4nZ5{0KfgjGhPZlXp`Xk
zeO$J4U|vthyuRj`*MS9{?c3N}@LA=6D`{?TWvdXsL5H>NnzMw+gtN<avswEWQT&Eu
zDW272Z0i>B`t%{6RO|NhxGyw3Z^-Tmwg+e>p_jwyB^xgHF|o*}zkFRk>QJ?Qt+x7=
z1mn+H64y_3kpi1gguK|1x96<er{>-VKlQ<9HQcDrnz at mmS-DMn&T%j9Y32g4j^-eK
z#7i=<1NSMBr}<vH_I)z0oD+?ektqcSIkvuXv$)_mcY>ZALh-EFbJme~kPbiH6TsiW
zeoVy>ANtxgcK9e0Y~Nwcn8#Aq7h at P0VFh=98-q9&g_c}k2j- at MXP5_!j#SvI#JO}J
zmTotAhh7EZUzp>;KWvp*i^T<j;7!6jrYUaFrKD_rd3zOg32WGC-Hwdj8JdC``lW_O
zPJ(%qDsObIEtn77nIhQUx_$IM<xA$WF3Ge7G8_K0IYCd^Xak at 7w|N`Rk-j2xlFZMN
zIV at uL%D+T;T3wXZrtlk6T`Dj5mtO5sjemd-=u{Ks2L9>Ii&qMFXO+$G<kdmXTpv9O
z{j!w33p!N?KS=mi8e7-LHMDNl8ml&4 at w5HaX8p0hJW9bEy$syEyy1*fJ!BX=6^Dvt
zW)I(ZU^updH*%_XV)n{U>kjJe1oNv)Ji~TUde)kdNY(%#K*Mf`@Ikz<^B4xPQ{9{>
zO>q=35v2t^gA&2xNWtT5rNHCx6V>XGkJP~)&#7+id6Q10p3BbV|CHTBr8!?YqcR5r
zlj}OW)spU!9$*5U+CICNnm=N?e%!XLIw^HKbEm9lXq?M2>dk>`fs|9`HzP0mCMZ9{
zH=3PHE;j1Tjk$wve)c|{^4UE);j^!3(T25x&Pw;6c5P?_ufSOsQfBZ8eS=ar_Bf at -
zSYcP$&PXrqexx#8E7a14wQ=s{$ByS$XQvtL=T(=Mx2rC#J0Iww81ZxFCE(UxHY+g~
zHb1cIhn%f0>1N%EhYn*$#b;i at JnGq8YOI&U8fSeZHcUV1Slc`VM;Co`=GY5ow{V9F
zx(_a*+%VUE^NTaiy(y8kub)YHgp10y6NY6H)zCeo at _t)JOLCbF)t66xARZbf{CHU1
zG6}G*#(@V&qxyLOg8z`5*WQBp3p(eE^)0x?mDRyl<QUfc&fCDYX$&mr!+LLO+09mA
z{jWr9o%e*(!I!dfgT9%9E{sR&+i3~Je5fyY%54Ll1Na5^kXx<bIW?r;^m~J=&FHt#
zctc;P%HvC+)Z<4w+EfjH*e7VGY<(_pC&35hjBu>sh%XS;qdWcLX`NHJO&7_t>6h)P
z7N!_8k}`~Eqb064^vm9 at hE1inK6=8|QaSbz6|S|O)0EYy=PkX+SPkB!s#v_8)#skw
z;`k>icp3atvj+d6!9T<heLnjJo<GWLAmdK+8EgxIZAcr1!=A0<6zt&`C*ice{*~Db
zK8Db{-K=SV<~_wfcj5p0fG;*0^x(;we;CRhshrF7%&BU<I(%#KV2oYNFaCPha`KPa
ziI?n=<4vX35bV)5MD^;F!EbMzX at pOvVM~un)<@2DFHExK<QcX+QW=_413}x~cZL2B
z^+ml&ox!i^&`-z6e}WgOL?2+kujvMT?)g+oeSE4))iFR9YK6bDr{RYRI!EZ;Gg at b?
zbpDe^=*OI)6S7BUh+!)tzPcN>a=^zR`#|~eXbJd}C}%716`dh>xdVM>Gl at sVt-;=E
zI&dEHa at 9_CgoXk8FA?Ku6V}d5 at NIJ|?Vm7#=jUg_*F^m2L9&w7({miL%B}9H4xAC3
zU#z0UJS(Ml$ohZ*^Urf3UWoAppO6aemchmKY&hiZ!SR{Ysp3|40>Qud?8QmvoFvo<
z=s-RTm}e4mM`4#GEwtb{7lMhg&l%s2+#}|ahn0`=DjID5evg_<-xI|pkvgF-e?q-}
zQ6y!g1fB_)2RUULo?VASgF}sj;n{#!mB&mo!QUMJ0}KoY-qW9WMH|;uh#$sdT=zLi
zOf{TerTyboRIgKFuGQ at hsrUL)N4c<T_)a6cgZ8{d)?lm`&oQG6<vA+B)RFa>oMH at p
z0DO?2Fiv0rKkf(nboWnPz>^$@-RjuPF7SqSZXV*>NaZb|@$%v$2lKuC6C4;FMh3n%
zLXpFd-N;+TvxT_vEHSCs-u-*s+;uT49sXU_uqA3n9LrWqG<-TwDsF*}!q>FY?dciH
z9KABv<~|=fb%qKfG7H2E_6_(qk<q{hPYT)a8<Q?26Z^+Su<If6&FCVV`6u{JiwF**
z$^v=94nZD2(dDM7%(@ftE`KfPz#41e$$)1fE^OdlFL>f~g}rZ)ZC;D~Q>SalCv8 at 7
zuNQ_n)fL?5w$J#*@;W;vHfQrX+`p>}W5;DMo7Kp7JKZSwfMeMimX!PjTyB0cw<$k|
z%gp!ZHkj^nHzLiYQ}ey~_l!HaEwVOF222}qVGne98{u2%{?1maE7A}ATv9|X#+?`L
zV-IIKY?+UBcUVE4bLu7zvDY|YGCXJ$Q8wr(Yzh%#a2_>U8TcO1ae0=KKxex`YTWkl
zjl8zTm#KDTHvG!XxF@=3=ZlSZ=)^ImlCYz8-DICTjdKw1FAA}pXy8b_Oj+f>6h+br
zo6Ne__wMLuwmoBXz{<w8RJV at KZ*Od)dUW>p?r<An*S!|<XBD|$bd`>}P~Usd_(^Bt
zn84`ZqL1ik;|?xyOa#hn(#_3pm;YjHwnr8<(veh6h6?E%_8uLFbna$b<29-yW7Fs-
zjn7kUjdx%x-bQudT1(?Gsu^{ABAton76*Nf{3Gcs<YR;OBL6`8$|kFFim^4<jB5)v
z_u$%nN(R}eh`LApp4XkR3fGy<eaZ~rz8xKN2=%SUy;`*AozP_T!~48b#UiRE#K*+Z
zc{u-qDG%|<9^v7erzYcRP+g_{$QsHQv?NUEkSXOWxybNd=$%?2OKWuKf#Hjk9T{Wg
zZNr$E%3gAon&4-qm=+pIu<Ri#G02=?3*p1XIp~fM{;IpVHI&&&lG|SKb(LMXG`yEl
z!M7la$g&hB$gB<?j&jeUfmsqVii~ke2bwN}FWXcPA)5$H#4u at 8UY@Ews6`52T^;>N
zuTH{Nm#8T-e8H+?7Q)sejy*;v7&W=6#;}%D=$pv3_`J>LkI;9CMZL~-I8V*X)ya^r
zM?N`k6Bkc)I$uYAY2F6pTb*k2a$sB8f_yW4nePfdXsE{?uXSVG=4 at PV%7{aoUI7k?
zh}{o+;*aU{ytR1tj&lRbn3JbO{x<Xv-ywa1=N}^fE%J|%9zpsD={F@}>K;;U2F<fM
zeD+iFXxzJx=l>vnSV$ifpI3!aOW8a0!s-n8LFG7KLiuX^Q}7tGlOaz9to at eaNUDw*
z9r0*T)dt0o^P<wo`KCK`F6qln&4cG{ysMR$a$5Nj3)Ypjr^;Ba at hrQ!v6{{07E%`D
zwFqzHoCq)Y8ru!A_3z<YpYh{}k+?Pj`7Wemb*+dG7N=iyc)b2z>KgbVr|BOa4#D_c
zq-%`)66t)Thjed5esSgn&RT$Z2`m?4pM5#6m-tIMr}^E}P3K!mWNe2ntiZyFs775N
z;?6)m=#&y}*Xwq7V@%z3z6E-?l=`A1p8Z9@)Q&aBUu-q6hb_<sy36 at S-czTgMyW0(
zuTzaEK9C`G!=~2aoMaT4<MLVsOx|YaG>knLj6HX<?rjg_B6Isdi%xqUGt{&PqTb?t
z_d%1$yaP=`nleq+_(MTQ<L?De8b2%OThfE;$)V}~@vwP*y`V=ZEegVZ<{s>|3Ei{I
ze at gxxWo$<}59v?)7I4QSid&wt=PR_^!l4I#(kLsqTl_kk2imo!Li}XopO}10sRy{%
zeX3HG9LYzyk)}>E|1kGDxi2ELJTKUnTeDp~d|=zOdd4sC&B;@Z;Mcg+*0%DaC|iZN
z_8s5`)zhNzuLempUDG!O8!-p33e%wTnCt(}D{68b^DR7k8sgTB<D^uhL;fl*=nI_(
z{of6=%~HiQ*lfYhigyxxdMlkk-NJh7=20qh1<vB%Wy_s^%9fq$TU9lGlP$xJ8uk($
z%rr$_|6Co`CD=siXz1}^w^~;rz9t}csv+L64I72J{b+&>rr<|`61;{t<kmN-Fxb?V
zg#k+l at 9#bw<+3k20rtG-;PXEXYt at gy5ExYiJtpL-u%EJ7{-!g8oLl{`{%;X`2YkaE
z;A^sHE1?hj5qjeq=w^@e%2Vsc)2UZ^<%~K|-K2)yoA>zAbl>qu13ZiBxp|;9F*s&B
z^t7nc-}JO0f7jDG_K`O%N-CA$#QdeB<pEomg)X$;?oo?4TId__Z at _dYsdV#$4_C$4
zPX-U at aPLMZz!nHGSZFWmR)x535ACIS(0CCTLP^vwLRIk371|en3I#R_SG@%LQq-%O
z_Y3^e^YEV3@!n>t9Pa^RGo}@KT|zf(Yqdp5H1Q3%#dOjush|3Fk%X7vyW$v%a;#iz
z at YxFSfo$l7F;0NvB<5X(otK at rN~9$^+{0J0r$hg>i|8xiJ79-C?UjJ({Pz_Sm%e}#
zm)&Ryzf4s}O at vK<XW^bo`&WlzTL*M(c8;Cjw&ow at 2d$FyAs3|m_U6LxXSc0A1-;tV
zY+qgAC-tf}p6w(ssk`P-Hg_l4 at KIiwt)5Alox;ehF8>&Ttx0Njv)~xzrKBuMv)ijl
zXLl|seGhh$tIGYp$m;U at av%IBWaCEpW^$gdWLlb*QFh_hF}s at Ztnfs39qL_=^{2B?
zFaMO;DX`_H$j2VlQZ`zP`sz_%<KOGMpl!_y<p<S{`ug-bV#$BcvxTJ_cdmd<<jFwR
z+!cd4_H|R5 at LT-D34%S>uS0QQX&fZ_IN+@&KtHhpV`vH5zT|(orpGleejU9F{(L^r
zkJI4))&m<#O5F at y7&I?YZY+flb97>$v9#+M at 4o3`)$31;rFS9U!*dNYQsG;Y8QZ6e
zqi$c6vh^N2iH|#C*@_}QM}OIoP6~w`e&p8JHsoIb-$c^S2^MT+e744MKgV(Zrb+Z_
z18j2paBX~l?4XG8j(1WD{_u##Gh6Q4xkT7CY$3KH5ij6)(TI0|$F`w#>DprGx^IJz
z?4YwEU<Y}t$>Th+b<}mvUMxChl+Ah+G7|Y%(J at 2v1Ynt0+Rv`T|4aI9Tq3{w)5gU{
z<__#HhKI$Cti(4+d_6tZbNCcHp5-FHbAhdR|8<XAl&QvdyeMC39KX&to|@)AA2J8$
zdMEWNg_7uF>}l_`w2B$4a4FL!OlI1J>5N at S+U+gyA?Y&294 at f%(k7ghuE0E4s(23j
ziq_CnwuWBrpD`t#vK7ZrRfwNR(mvwX13S!LU`Nx~7z6A__=I!8cyBKF?!`gx0}G>>
zTQVV1IuWv;Xn6~s`vdP814>L*_)4b1x92{1|GVjb$T}J|>>s#)AICi$^*HKq)Z(a-
zzJ)SjUqusKEIMdGh|eDQ*+70Y^^I+UT=^dYE8RH*`;FolUb}EC#@EZSN6~*;<4d#Z
zLz!VF_`^+B2M4{QU8L%h0xy)GUKGWN9C(186=L11q5FrGZDxpH8t}1yfDc(prTwSx
zQI3FT7i#oRQ)TNJw96f4r|$*nD6A>z5r-l#<}ug@{KzCn9AdoW(ZE$G*Un;x3d>=q
z=f&#|xa&yU1MbTH!AO=XJ&xBt=_Y#`mCGX`WMRFCm4tkslEiq#L1GPS)$jbORlmJk
ztKLF%2rMut&PkHSpM~A?&(O7Xq%U`=Vn%tMCN@~~9JEQY<}$`TvES-I`WPwb9QY%&
zsf4uIJcsRaGp>=gZ9?1MFNQxT={H=f#<hnye;`~z#_)&?TzinN4E{BJ8Ek_|T!cmA
z&)`}|dIs7)N<M1fz1w)NbFDV`0 at 4l#7Dg1Fjm7t(Wq(ML$Dc!e&!WDMQHGsff-=PX
zyXhIoV?W8IAXOnvHCeedluKi5sW6Vjgl<3|@DddUncYUjrGhN-)06P;-$d3B(C<xL
z4Ew<h>BwGTDrJN3Zx8yD_(E^YOLW9dz at 9z!TaPfx7rIfSim9~k+zfvxDKH4iiLFg6
zk5jX|z#Ht=)eMCn4f_$!-_tb<dXfJZV*OrG@@nhNskQZ%1m0AwI=>CJkL~m>_8PYr
zI#;iv>vTNw`xKY(&(LYfe}|9U1Ho@&`T`yo-J{b at uuZ`KY~tx)ThkTdQ}k~-X5V`F
zvdyRG at a)=4Z(AV4xByJSO4z_0r|X$M!K>L`46%Wx*H%@C^Dj8$4qWZFPQw4)#9kP7
zRN at a|PqLfj<@52c1_1|tWR2nyvrzs!&WoV`rTicx68y%y9q<^~JF$qXJO5%icL25;
z*TNnbi&>`y2D~%VrPpCYI0ODj at rZ|m^-S;^xh`K!_QZVO*dAsn#;hlFl#5|==*t!f
zUWL41ZbN;J_)M*Nmga5HKX0s|z&DEU61=Oo9)1z_7=)f41D%6EPoy4c4AK+w?FMQ6
z7Qqv=%~8ysHTR(#fbL{2?$0&C_RwKp^cc^upp%H-5HSShK0rDc=^sd4U_bu^`TLQ+
zObgFfb`J4l&cG-4f%^s2*-J4lU<b;IGBtCXOdW`O)Nhv<#PbEVEWUyE+Jw46<^g;f
zU}0*mOcrV2 at 4;RO5Xr2K!LS{H-Qeoeh{yUHjt2No`0^^4slcp$HCv<&`Bx9*6-GhC
za5sG4&iKd%7fV$`AOot`3g77#yw=ca77uruoOa)C7At(<M@(!UH{e*`UoO6DI at 8Wy
zg7iAlIV5ff9p%B9to-5?R=@a>7kv|93;v*=cEML<G3;d_+hs43H3$Fw)UiL5$-r+C
zUJ3t at jCwDmp5o|4tXj at lI;Kz1rn!T6_JqdgSu;`;huwhz$<4s?B62Q23_64Ox{mx$
zO42ULpa<x`wOaWU!Mi-2R;)5d#*sDz{~Q+q|4Y#+ly^DcD8{RBE2+;Z_<fOm#ckxv
zkv>6cK>8TzC8UqgCrwBnVot#32j71s7WmohRg~S0>!A1S`C{}Vp&dek%ZO`?+SEb6
zjy at Y*%tg7eu$#sFQN at _>9vROg{c_h^;gc~c<Afg{&sXo3Qsn`|&e-|Zh~rE$^AlwC
zk4wGSQG!?Ty_rSt)5$Im146?dXPkhZUx#y9*lJ+{bYhEPo3}l-OZYbLDf;mz=;t4k
zaSdH?CwzfLr{=Lr!oz|-b*dOeKKelg+5w$S at E`PX%)1)U(`=sIQv&+t<$n*hFxlwi
zhoFhuF;{IuU{;xdHzJHfJHs~*_a1=8K4C_Iwk;HuVtqS}^Fw)(36+cwp?9KEoR=^o
zsCy0?J_t52F8)_wtC1j3P`@xE at l2BAneUhp$VWT!TE-XoNaUsL6TJT)#s~B}j{kH<
zyy%Peb8M$jnx8?(|ML<f)!Ys^Br1<zgBY#OBWy>${IJD8Zdg6<2bo39T-;_}FJD7V
z=2 at YK+?I8~uh3x!I%c>V{Ti_`#5_nDGd5Fi+$u3658G*Cla09MKdPX=t~hY*Q`nor
zo-unm at mqNoKM{Cwj#y)sn8IC<@A~Kz!z?Pb#-c1BSg)e*iH+;Mjl<m}2MH!U;-*A>
z=c|n>3erwc1t0msz0B{!0;_o%^c1DFb{pBZ00+ms26$=**na^t%ZZ!7SX-oQS;%0t
zb!zz4lBn3Q$#JGOZoCM1Mjv*Dj10dT;#&{;GUIA#)He9~75>g7 at EV$=g}WU7CQ{y3
zsjp&sx-YR09Xka5PJDx%zAR;)Vh^?daMYlW1g*rcN5 at 5vBr&^mFvE20Z}xdig^h`X
zH}=$S^nV3xG!lW|f!Gz%mtAUe;3ryQW&7Z_YRTP?{5iHB@&rpRVh<4C6o+rUXLuOK
z at z`|vxS=S+lDiA at IRUs*Sl5lOhwsf=R_XLkpv!BB$Jt~Og=gjNa)Ir&*`3Id3$+x7
zXIRtP at T?FY*d<?f4a2v(c=7OCiW^^vdretzVh{0g8ISL_GO4&OBG+e{m=T`mLwr2X
zAYaXlaPVlr7s&P{JTNei%*3Y$>%t)hdRcAC+fN715AfDsxXy|7KkWDA?F>;79vzsr
zZ^v5PRlHroO{jx6){dpI#8>UEA^Cau9!>5R%JffDk}BO}AIN(9uZ4OG;~<NlF6+QQ
zm4io`%t+SV!?R70$sZ|I?~sFD?l$;8-v#_M at Vo@8BBt+IonQ}IA)H;?*Ohj`%t2qs
zIq^)T>bLE}wA#MjdC#sf4dokIJMm8<{z!(L8<5K){vl$^r|vV at -vO>h>OSzu-bZK5
zQC-|^_cH9dFDbqny%TXYO8GU=S0biy`22;wyxqotnGMR}S at r&2R88(QV at c1{{1X1x
z5+|c<W&`9(yCrGrdi^=AjTdJSb1KS**_k!VUl#nKv&7iCLgxP?{!g0wDX at x)uOU9J
zY{&w!{E%=C*3&cau}OfQU~=W4Z_bNu@#5&ScxK}P?3J7){-^L>Hl96P9`)U0!_o<}
z$e!Hv@{Xxw96p9WR_eZbJLmWhw7W0XYX<STm&P_ at KYAZ^zX1G`UksYs`{i<sVTIEt
zu+O#+$GT1>%dnpQb)T7vx&&dLtyMiTqI}{L7VRTiVG_*@LY%rF5~pq;Ke0a_J_X~X
z-uP;`iTKi%s at avsmu7~CjMjBVBd!&1gy<BV;JAK at T$_W~=FDi(DXdqplg2ThcP~a1
zSP5E4c>BIm at xOK_uVC7lm4O#{(bx~f;+TVDAr3VT=)JkiMa}dG97({Wgr5h#DMg#S
z2K)LR(l!-ed*panNjt=Jc_5Z_^vav9v;^mGk#?kg9e8<D(bvcM_4p at W-$crX-j&H|
z&z%AvUAP!FY-_F}4i5ikU<{yr=djM+nct~fjZec(#y at 5@oSIN5mdb;MuBr8x7jHw%
zxK&2Ne|sJ&q00O{YmHY3Kh^>}|8>fT+Eqp5-e%tyl-;K?*>zfZA^FC?q?w=}z6w|E
zs?W*&Z0)M=NUFlUo!V7el3$JTuKCMqjn$;Q-)gI_AvHSzi~B(1^aWMq-LJ`WZ)xR+
zkro~WR<%>n?J!N&a-_{+>jVdDjo*`ZOHr3G${OveOXT?}C|B>FUTZu`?ip*1dPj<~
z*VY=3ll;Tls&b^}*O?YQ;)p8G>8?h@*BkG~Xjk1LW%!_s6942{V+DEs_u8sr^1LYM
zJp3T0k?(#)u76ltwS%PJI<8L<9CW0m1L*~+5^b>3^Q at p*->rRJ;p%7;ub^`%qfBs+
zdMaqfnp(~)@29)YhnQ&;6Ecd>-GOIEC|n)?ygE#QZz``!6|M{X_1#~c2>afUUiTbi
zpEhm|Wfw4EuVP&MB7Gz1UF2sVU;gZQlW6#KqiE(NX=bHc);5K!p82l-f1g7vU$3lM
z;8RI-QHSiE%i-rD$DEhQ207|EO5vI(4SLTvQP&vl3Er&1QSVdIWxQ&=I3IiL at Sg++
zS&o*ljkH)%hkCRNenDOetgkbq-ijDQdhH+NKPwL0`R4*o;X3fWeSiDjR`NY2#kow!
zu*JMMe>v$7<J$1~jymid23bY;eBA+-^A9ji?nyCmoWzxsH}69H)ShAy+m?edv9}la
zCgQ-}V#LrZInKHXk70agRJv`sinfe`U*Ff?d at kHjyXH&|>%~bu&vF>kC}TaXKI6ru
z0&g|hc()xq|8QT~L+yz|&bTGK9KITy_C!IGBQLp7Pkc6_y{Biue#IUBUDncQ)&knC
zpsPjYQn|Btp2Xj_ at wmS=H_>l+&dw?~iibMD?}~y<j~4|y0N}dx({_R};u#G;&8N}g
zi}(2Y@#Sf?n{By?6nOT23>c4E(B|hBcfddJ`{+&n5uVeP=3K@%oEt*b1|1<j6l7h-
zK506k=XvW)&xaoa22ZU at s#_4fX at 1)RvEn?&@K}Si_K(nX*z`i~nm3p_it(lDA77vq
zyRh$1D=v=yG at V-@25lwwo_k>9c at y8h4B8e#nXt}cUM#+1S{|Nd8Wp|@w0<ha%VJ%;
zFMOHUL;slTdmcD(O;~$ZGFF$w%$ccokBWWm<`nZw(iE4v6XK&zQ>D(h?i!!jO>i`1
zzUWWFXFt7wSX2hr+6O`LVRpf4eEU4+$o%3n(Vn$cd{5MGH0m}6>nrHrg55){7(3Ve
zqsyB(u|Q4y(H8o`9>Zn&RN)td|G-!td!~_#4?7-8%dX5g%vN)fS`$B#^qamTCCOjo
zIa1lRqTcnCv@*b|V~V;KllLvtrV0=7Y=}8v2ZB(U^8AomWtB^*a_rD{VL_NaG%;){
zc!>@=^|)OZr at J2=p%}~obIdp={NGaWMbSb+gQ1_*D$U^2hxyOLnzUB-0PT)_ at bu&0
z^LrY*fMqt4$3^;p-b!S*|6lhg)B|*&_;3{Uf{TRO&D4l=3swRf9ef1(^Ww90u~f(!
zpqux`8Wlp~b4B~aa%j`zh^0ELKeiP3k92>F;Ah}eBtPGMNX+)>#qT0cBDww>boT~(
zV>-r;c-;-~Ql*9k&-cLBxJ|Iy-!6>v-#8^vk){k-Vl5G~?nL%3$R*!EKP2OQIQ+hn
zp#OaxtB_K26vqA-T?6;i$bJ9cX2fB?``R-Z4)OQo>48^NN_!C>RIIUKD&Hxy!)w6@
zj!Z|a9pFs$rKgSC1bloma8CCh7QgddGGfUPoGGQea?ne?L=I9pXsaT&54`hT4tDvE
zPggpxS<JLz4G$dPp_W(dAK8lf?j1OP1Lu%c&J5Cuj}UtPk?Hvz5zMFR8qZIZz+ at Ah
z2$hAGYt=<v`2SwCxvk|KTV`1JJg}h$7dd3Q6~*s7{v1AwMe5@@35vDD!m^(8UkzN5
zmC&gu!|lLbtRk{V_>#SKa;ouuw5UjIj#ONX5y^Y7hwmYBN!THDgp5SHq+)(0VjP0j
z5WlIG2UI(bK0%JGlRSrh>OBm66T{NydmHVAcZf{={fWS>`9>BxaIcTt!~f=coPxi0
zKi{~lV*jW&9RHYdq-Wr{)`91W&=&1 at -X2P9H|j(`27Kh-8JfnkIM-FWtr$ezt2prU
z6ecB`3GvH^58Va3RZMq=o^m{QA at qCMNP-tcy$_#J;Ax&%X|!@8vL|rxz;0AI73Q7<
zzTtzj1c#4vPa^gqgkPKaQpJIr-vVn8W0K@=oa!G#C~FtWlF94Kql)a5EVidY{7x76
zsoIJI2OscIuA^+V;uiRq$@Fn~eQ6A9XLiy$T}(b_oHG-$=2w5i_!(EB?OTTQpR`C*
zO9SJrLj3jWSyG;b;2IE213|97`KuF4x(w2~=R#BU_fkee&$tq8KMFjsS1~u|L(sjr
zO1C%tkuRupzv_YU8|Ap>esz%ik5X6G&JV!7Ex;ceEa1k+7dOs%x6)qoGXC95_aDt(
z-HJJ1F`jDTPkJKuDdZymQD)cLAI23W at GEd_JMeyTA)AO(2{>sX2fP-7y%q#LN&?Zd
z?0BBsqwIOuFBOLsR&8Qt2V*{mq3jRloFL_^tJPlHnrR7S#K4x~wik){T41`4#hxn$
zdp^V-<ZE${#BacuqhsWU5W|7UCW0!okB=6|soVrtO*_qU$ZofzTrn_slArHUz8>2W
zp!Po<inumuUPR_a at F!*lGh$7XP>Q~MAN1)w=|{&rz8 at +h`hl6jp$SA5isvN2FKNIt
zoetk*8)WdG8(*IJ5A>G}{oN-}K&~%7^&>ATdmZ|69p3$iX;8%H;}f!N1NSa?)PnAK
z6~FO#Z}CUbBmCxu5nF)SJRi at K%DZ#|=45&};zt+tVoz)i*vHghE-IN%9rM5sG)}LS
z#oWd`ehq%XGs&F9dmVIw;+N3W at OscJ&X5zZnWque4!koIdI9{uV~@3lkybjtr3HVU
zFFNMH+ZY7Ajh_hK2KE+5;5X=qtypWnO87Ye`hR<^-NEP1WLoh5Xj at f+N{w+mi1Nih
zzsLUs`AH;JBAw~T+f^z&bCO?;HhPghjaUIk$X@@kK|YwoYar{$pWg-ER_ZtXSRW{R
zqQ}npUH!Cw=ooqouHPJ})6N0fp(eBg{7F!Dm^S6xd;N3%yN5i49GSBn^%#NU3cjnt
zF%tWF#DnFL^=dY3Q$OL|gDqGs`YOm{C-z?ol=BAKWwgUz`#^>Gw+QCA;uiFF^^Jjr
z&<R&MU3V3gK+a?eNQ2A}GEiO|@NVy7+>DN`CwqCu6PO{(!|Nw6<J|)dZ%YR at BIi85
z$0WMyo1Q){9CoIkr2jVNRQm7zblfy&+^IYUcoC!XEwt2NFG-JWGb{*DfezP|MzMNe
z<7*i;RmQ|Cyh4UT#yYvu{nA1Qj#(LWz^6R+X4jRfzw4uS0+Tn1SHmF29hdV at 8|0UV
zE3`ge3uPDKFNk}<$Ki%K?w`Z`O596_KTl<a*!~jmGKqY+p+f8T1JWD7YxxDK2`Q1K
z-$HseK5)|69LX5qCtY7rA$~8!xwg15Z6$nPb2r)Gw~oELUpI+A#pROk;QHq9k1Djj
zV$5GhjAziE&(^WLdT>O$SBU0Up9*7-31$&{tm5J{FZmyg#8}mmM1N&i=oVspdEABZ
zN#M;E)VFGe1NZ$i>LVI!KI&0sT05?sVVuz(@)F^?1;92{>_ZuiX<o4H5a)LVERer%
zSn3wSK;M at 3mgWlRI_BuO3#el$baSw17*`7a`m&Ib=&N|DOi+$Blu_Jr%>OvZxo3&A
z<bMJd at O*Sqsw*H^-+_9Q_byau{Wn1;UuTfM{ZeRjzfLXfEy(kLeGHyIf;<Cy at lNz!
zqLUl=?i_qKifRWA3;C|GLL2AvKfeze3qNw=1B^0eVO}PBcpaUQwhF#jx%_&=47U)1
z$7*YyUzXX#>xvkGv9_$XuPq+BasODu0&xsv?BmLT at qoD7`B<at$1bRet#as7lNI~G
z3u{e-9RFj}$@g?oJpDb=52(-I+IX5B@@&`xpv}BxmIaXIoUMXiw->K2&zsj4FjV0M
zo*(vlsy)Iu=m8TQ7~nRtKTh-gs~y^sQ8yp5p5wX?X#>nT*KFWViuCZo-(~z`oH4ox
z_RhI{O))V3pw~=(90i-36rRu8TVc0#F}yCwQCigM>C1RSH`^e?G|tN_S`O^m2F#mV
zSWm7fs>0!G$QBEVoy)N2|2$^xi-VKC+$V=@cPr at r9rGM&M^1JTNxR~GsLlGQjeW_)
zA1oVocl(X at M@f{9B4aBIe7{Vj!}`!c=ZZ>59A at yAw}^ft{W8wICvAyQ6IuKVD+cVP
zz<)Yd4UZxF1jG|kXZwKeM)dQQ7{`v-rT<%+-DiCLD$z52LVTK~sX-CYb#~AzKsyq1
zH$ne%G2m`?o=5aW`_(L7J<$b6N;Yp0jL6RPn8n}Chy!K`)O^@jQ1=3i!|Kax%x;1J
z-3-lMYF6=;x7|*jq3SphJ2rFy%b6EfI%j=9q(^aOjDA#NW)mZh?2h5dIxj5rX!rD1
zS}tt#=%Kw`Y}hYc_1j;5ePtTicbE>)k_H9z`JrZc?V6T?1veNmRi5dU74N^K{9blq
zmXCjo_iNbm at Ag~j-2q;{%0JGujlWgay>d19d%4nF`~nL-uZxZLmW`T}<eYe6seij?
zg0gL8NVO|1S6YjOY?V&R>-G2vvLJb3l`+6Qf;Jlt<p%oaaYLzz<3%oY+C_UP!LNw1
z0v#9p1Fjfl?h!l{4|-vq2K%Y8+TlcY!qNmorcusLguTgUjq1YNEne*PCNFj$&iCM8
zaP48Eyzmj?PgK2fl*C-AePUUkZ4dYnd`zg~6+xpS2>Qmckc}aRcebWj%x{%eLyz~J
zshs{0wk*NpN2IooR~36vv55CnhcvKBP3=itXDU~TO|7a$6C~-T at vnK*0DEaJPfEw@
zE@<{%tiQX{cQ5CKa=pNBMDaQ0%S#Zq$=_Z)lwTEmi2TzB&5V_5Gj0IJMAW~-R{Vt6
z#V2Zw at O!W+#ikOKJkg2N)!OYS^EZ^)iZaKvE2u`T`~$>_>Mv{J0nrLU0eHeB at C(y6
zuM033l<g|r2b#S`u|%BzF*lmOTab&f-on=?{Y+MK;*z%F+0?e2Y+1XLgy_B$6?C at Y
z4jnj5N=x!v=?yEY{E{F$JsxySZO1<)1aay%&?D(Ekw9P&(W+r}I%%LC?fH1UCom7<
z*@;H1Wk|;$^?5c=1?wF?6t at JcXK=({&YX<+9MIA9&sk#~H>iKUwp6iJ9PNk|(+k|4
ztMvLwJ at jh^`+F&YJ;3hc$ny+*Hf#Tvc?zA=vw8YEnWw2AUkEGIib~?gS32{SnnHUa
z2d8r at -I71T{00w`Cx;EwYt&{s$uZBtU;pb1;5L6iqik|LWE9)Rorvk=;tOv>PTfrt
zy5LgZnr(h|Us0hSPi-agO8SIpt14>zFTi{qu(KE!+HYquE|kzW(Ct6%EYdzEb{75D
zLHGJ#cTlg)h~b!ppo^bF$9w~HaeFLqIL1Xd|4wxOj5Xjc?;hTH4Ky|gJYpVn4|yI8
z`j?DbHQ{~btLafBehD>_UI+h at 6N}p{QPh8we)C!|26nfrc)AsDfo6)?eIY)skfWmy
zV!^YvEB*;={Vp8;*W7C#N}c-ex#uyR=(vD&QY!aTVb7tO3c8d5ADWojHGJv1Ho+cU
zr)IC_PN)cSMRg{@V)Ax>z0ys-Dcc+P%EpsIW3Bd*%Ibbl at d}y4`Z&akj)AYMn4OgF
z8QcyX{qM at P!`(uGp#{uPAH*LecGorB at _$w$uBn^c-BHdNlrxX)_1?Qj`4U_f?KxE^
z#$y5<Ncs$MUD0=D5mFynGxo!;&}s4nf^`f3or&62sy3BZjM*Kra6wmGARnzf6<7$n
zun*q98pB>k{7}U9H1}e>A&zk5Imn-{3+KDkD4(lzk4TAaTjTA2ih&O$Bc%|>FR~_P
z;gL41Q72)iY1fIjHRed1YZ~KOZ`iS1$Jn_OIvae$yQt5ce%rs$Bx2J<`Cg4=y}?_%
z&)kmjvj$iYQnm{3LC(fj!KSc{i7RU3%H^|hZB#%LS<|5xL>~8lLpl*@15#h4=aG&O
zWaIhLNn7KWZL$$wOexvZ#(83GOWN1Q5&fo;x}_7J>T8N;KLfrF!P~h}p&cF7&zDiX
zxOOx8<x02ZAA*m!p<h>`U+0p3)jaO+SA!)dkn{&^;Fplp at y_q@u(vxg!O<@l&@WZ!
zUqXx3f<{fFMZ*3E@{n_<q%<%7(4 at 1)3`^xm$JoGYbtokhTH?RRvLgOaYwA4E9dAQ5
z9XQ-A{*bAT`{tz<&&kU6)PEV8=s@@!B>`76SO(0+ at 5=FwQuOyh!DT|%h%Qe9yL@~n
ziaPho7+HI0s-};NE_?(mv9`Q*D{B2$Vs3aEsu`4B99?LKKjheS+2S7j at 98NC@<Zu}
zJ4s^cXh&f_BQ6#f#^)jy0&^ex2JM^RrLi~g_#~z=U;(h%y$FBg_}6bxkEf_dM}UEh
zd4mOh$dGgUUnToKk21ujEW_L?!`vzZKU4<)w^GF%!5(UtUg^43#T4wKUu~%2qWm+%
z)3BeL2mkq5yl||aL;aIvJ(-r;qK7HY#3x_lCuOFArwXh1`UmTbD6~_qp&4yr$NTkM
zRJ0lMe9tR!kWnP^!X5jzY5a0BM+1IjKjtzhU-;j5fd_o~loVJth<ynD`DOHvn>Iyd
z!CK*C{M9`|AmD$lZ>6?c;;H`tmwHo44eMrn)jh&JwxEqmW}86YCg7Mte|V;u+s!s|
zBF%JQO^<;LW4)jUeSp}#s#xre!T))bDk at ZK4RX?#xR3pxBq!jPA`5*&lhPPRA>J@`
zYDRK{g_96j#tmr;&Y>@l`a4e=pa!4lMR;reRri;M*^A@&t;KIslNxJSvqeO;7w_Od
zamWs0E1gq5+GC;RJX`T;YHU9ZACyCnEy|`7i{62pWH;FxG{T3UVR&tfm#mjgFQS11
zY3Ke8e`*JhkA4rMwnC<0mp%{qKpJdwG8S_@$@nwit=+y_js7f!z4r;&UsU#whhYz5
ztYj|`@QZx4YK%e51Y+);;I$WXg{_#2X7b(-&_{-<_14}GVp}31 at 4}jBCN>!k{qSBq
zp8y>ak%c<;1JC-^WLE*_INcL*9=_hc9W>3+j`;t_f9*+R_n~;gUX>mPJ^B+%Jo~gM
zjw(X=mtm6%y#oA46aBAf#UDF-E`;#4tk8~utODb(6tbSuT9zLN|24?GHGA>z=y&ca
z6%1R3KCEBYxvA`P^zj9K7(-(`MZ7RS;w#__o8Xx-*07DTri%T~BStP&wNX;gOwSZp
zGU5b3cuF!69{}qOk>~t~=ihYLXPkz8!$j<de?$BVH>weGn0)ZI<FNKGrEcKf7~I<u
zDS%GTD`$1UUDT}$^JJ&umV0(To)p&m|1ifL|I&)Ruzqq}KSmYe&>jW-3d&gr|HdHr
zOVOZj`N$vQ*PGVv*u%N96LmueTXaKTvShA;9~!}_lC$T`bBDVT|69Tz at UO>QaO~@r
z!@uzjo(;T#{Zwu2b=aXaYEwRFK>1 at sH!0!*PNrWA=t!?&NIcGs_|8v6w~nzdW#g4|
zD{aTV^)D|~Z?lv7RA_%+9U508H_w%Ile+iIw_x9q$U_|X!rRm1!E-I9uD}jE%wr~r
z;ZSL>rup at 2vR1S~KM(=@y)O<Qa9$aZ(T~5^C6?MLvDRji1XW6fiaO`3LFc3|BE1rH
z7H!u+d_lQR*k!uZJLPTtFT2bX=BZGG{a76AG836Lw0WoW4YYp_{viqJ2H1im=dDA%
zn^D$vq{RNFD&XI^r{vky1dnMsj#U?1uPz4;=|$>%;{)m}j-Qb~U7=Nbz_tZga%>Wv
zqkAW92kae}QoR8`@^r>K<E9v2ANQkRJ7rt(qNo%xGR7kA<`Fv8^Bwoivi(vy%2oJo
zla7JCP9|b)FQhK#e(JzDH at MbC*bo!uv at jZNwv@W;uwPoe4K~T-ouW7C%p4|Cf;z#b
zZP=siv2-eAnOb#$$BCdSJb&pgdQ6^$z1^#|eGlX09_Rxy?m8Uht$@r;yLQiv=%5%P
zV}TyulFP{2^BCwo;7^e at I(sa5m$8sfjLm=_g?STX2p=t}_89G`<0YO7^?nol+9$j)
z<4fS#&lOhT-!FRZRCdw{25W7g%XG{iGWO3$!XIFGhF^^EpkvSfvd3QV=2Q9Qw4|SJ
z3-zH!>c_)xvx*vvcn4$Q&-!Vjlp5PF|B%;1zFl6to0>%A78ViP-dM%I?HE_s&&fRZ
zSPAX>lkRz9Kb%+;5B=un4!S4hKPGgK9;5IAE%}%WgnUy>>{kn`9P|zGY!7{&?F-)V
zT6-XSmpiefhOBpPf`0l&{);|l*isvac+IFAli1Jak~p~EpO3ZT8t{4zZMA`jB?x<D
z_%yW9-U=^|<EGYcKVNafFAe?VaTd7aCi}PMYV7?7^lxIwG51As#Zgy0eCf>F!YJUt
z#%rF=NRi#v&P0rEF|Nletz-`depds&_n(l*w+p2>AHac&-UoV7bEbv6m%WSL32ZJI
zzf3R at df`^s!`_hlk$zEGFDlJ)%B&X!Zw2o+4|baCmB;)i(Wy}uIDT?MX~R5DVt9iF
zf2`XbY{y=ClrAQi*x)@td<zCL2H01Dp3X33)8CBg(lsB*Zfs>Aq8~Kt6P#_uxB2!|
zg{g at HPU-q7m`}tmD-yo#1NK*>ER^H&rw!I__6h7dkE7f>AwE<WoyRLBxTP4ER`7~X
zXT;?%N9-MI`x&+^#0BviWuVW`Q(Hq^O=9{)!7&bW1h%ZFlm-1h;_blEKN%N$8+hp-
z(5Z?MkX7tgd4X2fOsK>)4V~mthj;;2*o at tS%n-JD#GZ>^ex!K7p6gYIJy(@^{l#sT
z7l at xMY`RK~TXPTiU3SpS(Z<pS*u*ymvVE|j8=(sfPC&lbqm<~uD&02uL*MythYd$n
z$Y}J98rZyVg@@Bpc|v01TnodDFAe#X at Y(qk(Y+!rVHx_?A3V9SGn%zk?4NfZ^5ZY*
z<H4j2ZVR^N at 8%XX?CcYdnH4r0`>o-?RH`HTSDps;tvcv$4&wh$l*&(>6R#4LtJN~Z
z%MtyQH7OXfGt~<!b@;uI5#ts|N~o(X7hxwb0x{{{gD>v>=oq3;sn{Pfr$3EOLV7Kc
zKk>0{DD3=)K4(c>H1RF|l!*_y7pPv{(9xE}*Ei6DcZ{X?;wG--XH0xk=d;toO{02-
zR2z5dQj9wv#<BmRQ&jWue77!ahXrY;>kW1nbmCh>Q;b{Rj6*(2<%D-SbV at JFpqoK2
zB%aqaC7z?5603}rZ^dn5q+2E~cTb;~K^>U5OsBvz^=u`V2HWCPV`XTHeEM1~@+maR
zV7tkEq at 9DV;F;w9I&{Y&pQL(|Q^2Q7^R~t1>V at A0tf{W=M~U^M5B1ckcE-Jm{V|iH
z7jCvi)<uM(9Sj~E)9S&IwwR0g<7k^TBo&;5o at NtxmQ{%RL at 91T|A=`|SRX&h(E3{X
z65`)*UMv3a4rEQho&Go|WGLwICWp?BVDVXq?fNqr^yv>KUDAsix<ljjf5 at v5Cy#+W
z{|H_m{A+>F#4`)ZpUJ3iIeT>XulXwVg8RgG$;};W%H>J#!Vj)FJ`g@`vmw`xMoN5+
zqmV8_DnlBHbScs~fVUE3?Vd#Wf{)BM1Ph%EIc_14kC*D1Cw+#EkoQ8)8MX}T-ug<n
z4WPsD&v_buchb+EiJ2DQ^O|$K^fwMiPx{%AUf+WK=*{R+cowpP&A=36)YyMS0Rtua
zr85>+wy#3mcsd at jcxB&Uo=pLU^M35HWc#f2CZtPck7(%D44V2U24($igKvG4!L_~_
z at BHyU-+|3 at BzXtv98(kRg?ug#c8Ju05a_#)pW~GaZcv{xwU`5tbLZ3$OfmR~EYqJm
z9IdZ8JP*8Ug0U{gg~(pB!+>`Ty~NQOk6+P$CObg-4tAkqCVi+E&+QJ4L;s})euy~A
z`i0^P+Zx5H at v~IWHD}h^+lbC)_=3i0QEU_N^3boJ4EgVVr9J=Z*E1z#4U0I>i1Ggi
zWCqg4nAh3`VuSso)G%O}6Ipl!{P2eGY2cMc5?iLPVys%>4)b*QS(AIf)bb5WW#wiW
zz9;^9GLu5xf}dNMAzTPsxrnpGpC$4QtR-ki#6|MLwR5=kPV`~mj3r_}wbxPizP6Zb
zd;h%w{58;uO<oEU;^e9wZ3SO9VyBpxI`Ndw=Q&GK;>7O6=ZvMx;$Cb^OrH3o<67Lr
zj>G`RHQ0h<KRcL0jMnEYO<usw at uIqM-ZOCCf%B(0?;1G2i}Oyzzv$4-+iq!!Vq58T
z at TotFIW!BtW~o#dbn=?R;w=w;6`!@w{*=G#SLxh($hOOgp3ye}7#{b_4~ivc_fLM*
zV4>sBw3{0p{7bo1fqAte=sb9b3&nwKPnI%oEu9_F#&~P8RTjuJ%nftFJ7CPih7{L<
zZ(HU*0oO0(nK6FvI;ZKo56{c%g)WBgoPzQBZ2 at pKk$#7CG19M)#v(n8bP3Y0O<TDo
zvPaS^%@*>$dkA at 7vz@%}UWfbNYE;M%cfU^F)np<+%>8Hb9_pPKdoMDcy25yA&R~D}
zg>x#dYxDY0j@<$qZ=^P)kCC<`eTdYG^bt}^?m=0z`*Y-ZO$E;F?oRlwMDs0q)_oZA
zQq4~CTuB^dDcQ-oo!Z4#JHF)&-hB at KSMB)UHpl;p$p6-x$^RZs>Hpuusr~<ZIIaJG
z52us=m0bXDWWyZq5irBu at D5`CuupN`HE>S!!5uj795^R_A;6|#;oItXz7OZkIByv^
zCpzjoIByy_ at 4@+PoHq`fcL(I*`9&nI9l at _f{gU9LyBsm~G!8xDLNe|H)R;f8(Ok!Z
zPQsQ6bkZ06B=lxOS3|e>6tblYF7dFZSyAbh`vf#Vsy}{MtUvgrmgqGIEd@=8!}$AY
z(ply>=H?O5qA4%Bps$?Z8v#E*)`YaZxQaCvb8NZ$+6(sfgnGNx3B37c-m!9VzWK0t
z`?e4tl%0;UQ}hQ9C#<!Cj&%VaVt)KGl=<zSWl|`scc9E3q_^PbT!R1WFH`<M%KS0J
zhm>>O-JrZa3^B7j46fJtD08`^OwiDQdO91V*N69)d7bAd6ZHb0<e-PgQZUvLLk)cH
zABUq{^Jq_M2jOo)PtIaoJcVwR*aDJ!O88+qbXC9y{@-Zj7 at j114Cv(;;4?yZTj^B(
zv7;YWI{IM&&sQI{rjO_u9kdPW258;i+ndO)q3a!J at 61VO5rdtNz21(bFEEx5fSyZ$
zGeYQkqDjoHGG)Nm^y)zS;$Ns+%*cUu5{gQ(Ms#D1=))Re9xg?hN$A5AN0|U~A1L!1
zl$APAW*X95>LzdKaJPXntNursekc>|i?Ysrd02n^%Ww5HUw&O_-?QCOCiQ2T`w>s$
zyZ$o2{K`@0Ez;J^NMhqn9i^vGnrChO|5|sjH|k$^#EM%awsWMixDjj0leXC6#wf8%
zopQ7eDfBC%Nyqh3b9<A0`{_UY6iK`ZjsgGZ5$E9TFM|IlqmPrdYcuqJh<g>mN8I6q
zsl-kzO1z at oUqtoB`(hnS2|V78xT7eqd$N>gou0_E6Z<Z*t~lmUDw#uAKb8^S$cUdq
zMsBw8NNnX*iiT(r*7010AqMLZ_!?q=0(~LTJ at 9;(8t1Yk#lGX*%zZW7YcCE-Iz(bD
zxtgJaxJKtf2QiA+g8!w1pr;UBAx&%#c0%vh>CpKtrLGXULe?2Yo&#GM>ybKXZ8Pi~
zi5{_@*kvPr_g0=1Yq}HG^g)W{ytw{+?j_{ok%zq at JsWw^K>i@|2?P1t$fphD3y~-K
z2t2QP3;E>!{MruWWdr%0isgi_qjy4{twwu`fTaa{pQ}-ncg5F>#f|X0>Aw$|*X!7)
z%?fTisgCVHj4nUu!Cnz;U(!+>#cxHty{F8=@twl-O1F)75E}~eO<-NCn1#SLxk1+O
z(mGO(M2t8pqF_7p%&?8dUVy~dV5l(YH1h;6$mf%NF#iYOSj5VY0bl<K at na5+ROl=l
zsdj=-3Vm&pMa}vnZJeAiTr+=g;MN600?!Ji(BXaod1`x*2JtFfAt%Z4Q2%p!xf(c6
zhg3G;|JpqT$~JddaONouyV(jozT at 6E=4bbM<FE1d0iSCtd<_+N=56c)yL?AOcJd;y
z`jc0bqRh{5t<%>B*Jc(VF4M at jj+DH;(l1VPS8_i3uw^RSyQZ;vXzwqX7Wb53MYuEG
zn_WGWQ!5Xl>|DKiEXt;8rRQ+%pi(EfSv|B-tSl8H4kpqIgs<>z&TJ3QVh_=&D`Nbl
zbI%GhquZw`CVrpk^7 at rTf!`NXRTo=<n;Y&qMcE!s)9-r9mF=%Fu$d8;j-u5ux23Cq
zsSwBR=76C|@04HXVyLDZ3F3e)7{ZNIXZE7ar6djt=$jP#W+{`JEe(GU@>py3$MDns
zPNk-7^rzceAxF7icsr;}+G4D;#s!tCXBlnwxILYPKLq_OeLiTe;049X7Ma;kno-nQ
zxKsW)eA1^2I*{K5o;V$AS(>5_xYOQP=LXhIT$AnVEG#$JQ&lK?@1MTwUp0Si9z59_
z<3(mpRo~Pc_uokA^y-MMz|Oa)0t1U%Iz9}0m%E%d+p5dlVoCiJ*J9W*Zl3Xccie<&
zxYv~aF|I|9pNxDXWcRnB-$g7>wzpVjo(mbMlS2k|Pcu*WUjKJETnC<ZD)6X*2V5=`
ze#3Y}-ksv8!>nO84)^d(geT%5px;-J=kc5hb}rUWrI7uiuJmR@>&-yQCJkt)rxT;w
zphs(CRFK!MgFP}cUMKbZU#}lU*>f9XsM}Ja6I{f07Vbs57;?`!1lNhZU)T!_xQrqV
zml1psYutqXb_gnOj48N{cO#HKX at A}94}7ZMkoqCLj_YB#j+n6K=}3E!PD9#ldEM*{
z+#_$KUP!$p-tddu9$bq2MCrAn8cTH0Q9RcIxkq245_=^vi}(%&P4GwM@>JFEdm#T}
z>MZQ5bRP9d;Cb at j#lT0GOf=d!^}g1^A9!}`3BZFatwP)Mko)k7>@4gZ?gm-$Vdl8w
z|A3c|GCKBv7sUB($oZG;c^5iV#AsCL>4bhPf<$rk5bhx6)=QJtxu+;O_l?j|CY`C_
zo}a{&%Q25jFjo~$cF*wPZvOF_di3+t at F|#MNsB+hynH%kTCgf_MD@^~Af*=Pt-hm`
z-yyy0>#IC~v<2xQq|KlY_5Ncgtz}*{)aOF~ARP=FgM-Ra>3hz*e1nx2B=1!ZeM77?
zNQPFsB0VE^tsX*ur93Zoa-_d;LqHdrl{b+-MSAts#3j`jcRk8?7uBLp-O96z?|Y~b
ze at 0AIllUwbJgNE_bAzfd)-0TmeN6T?0UHT_=xT%h at Q;lNYwG>rtLR~6+CzS2h#g3m
zhZVLC&*r4p-{$1Qzs<>42j=9D|6 at +NI_BgK$DDi_^REYUr5ACWG4}@MCc(1bi+mE&
zeMkw;`{x7mvgprw`3sqsjCjeHm=nqF&dM^qdO|hgwb*k;{W&LF)5%<%hq)N-n2XcN
zT*N$WcFfaVxHkv)BFR0Zi`Xx at xnv(TVQNa83G|b-af`=4;w0>&^jPF$$3H;+LHYuW
zm50y;9Kl{)%D#v(l?*=y#C}ITpJMzx1Wx=@&^g#NRqdBiyfW-h{~-5<{YNdq{2|X2
zW!10MVl1_g=kZ)G!A5#u<wlbGRIgq<VJpUZPl=js4;T4cm=UoS#v5bZr~h7V%6LX9
zh3<^Z>$n)`Suw8(-k^l~3GJ}8QNnhkUa^qD-j+rU%;Tc}n#WK7YaXW(diLi$o{4!!
z<}sPSWFET?%;PDz&SCz(jMO|ZZ$ofS<~^C;vyhVc{TkA4sW-kM3ogTa4wCp_Zs!Ld
zN8T4PV)`U;;Mq!pfP+wQSL%xA<^@f_9Pg8!!MsmJyg-q2^%2-+W4~MnI+;|lfA#p}
zOtjZi({F`agY$I~w!SIK?8<m!?*=|>!b-GZD!C8c2Kof^`-EeD7eP-&=65r6$z*;%
z#QCy4Teu{u=kN3T$icUPt)i?xa?r`{&p at 6dp{9}86tK-oR;lMd3Wfh{WgTQoQjGtd
z;kWWM{y+Jy%LK*%|0%FDoM4k;=QaSJw*)fXon)@S4q_*-8yM!Fa#qS-9B+2>U8p><
z>L$;(_#)M(T$R;>cv=pfh%_)LTJS-6$Ewuwrd80{@}Ic)<nD;|6TX4?#nXqayKu$F
zMyDvWs-5K>Z%P!&STDS}1+fq3P2H#A;)yPvFBOam-i|%|XfC0!6aM`j?Q^I*peLz_
zeQ;VgC%=nw0VYhZ4C at 0W%Kg;8$}=tV`3muMZ>+iA#Ku7)u6FGeE8$ZH9w<Gy4e=;|
zr386y0{*vV;D2gB2WqnG{^Ex;by&v<FVrfDS7_<ukzJwbkfX-{%OfY?O*#SiMu~{?
zxD##Co?Rxr$uF0t80&#u(j(v^Y=~Px?9`_~2Y5SRBx&c^=KgYGJ7AB~95NCZIN~1;
z8dd}-=mg*=iI|EI>^TEQ!X9AG9>mo}xu2pwUc4~G2XjR{CA0r*^cn0_LC@}zbLlF%
zSpfU<&?NA6;{0yVochrHvU>b;BKW&Rk9K)DunqT-J+B#hGx0JOnt5ZX`N~UMAgd*D
zM}E^OmRN|+4SnqzDwR*@w>QbIBl1PTnxKCBXRYdW{70`~jl4M^f$%wq3BO<F5fFoU
zw`|W&tS4xLpmI`A|G`0Jj?^!xG>=*Fi~s0J>wp_a))2_ro!t=U=@-ce=Q at l<H~-ba
zFCQs!O7vgOwsJ`;s{AvN%3u?)0qIhtn~_E#UF+bzw4UoS>ww|#ROzzh9%R+fxqp38
z`eJNb!1OGe-y)gy|1kFLaZyzL{}7ts%8tsN)soyIk|$h65KRFES4G`r*=1q5Y3;gs
z;c*9cz#EcfTB&R%NLhyKB~vQhxR#nJgsIU+3hT8EQPIc8Vqh<#Tz>B}VBena_jmha
zUT1c8=FFUPKIfdz_5Jb7*WOfW)c%9E^L(W+q=E6y+YbJWuT*QMM5PbpqT?aPh)D$x
z4Eu#=bO?!+uTzp-Crd(laei8v60%lVW_AFp+Q;>3$V25-&1UGo at 4@%154ivRg6H8s
zoM3R$nRvz<Wfn>wl*Df5i!v3ZA4(O<k#3iH-qwdSWVhH<(El`UZG8#)gX+NkIq;+B
zT@*=qEm#YhVP~rz*!!VNcs1{JaYCNbwHfClB|WjqJVk6`p4^y5eH}Y0dPA-Jr~R-`
z!$z$Bca^Q^EK)5OK at V{n`Dll*kMPVA_yAe?%8KGcoA55+9Gw`gLtJ->lHZBnXW9 at O
zOs=;k8GaA^M_C8E0K6C4j^BR(_v|j4WFXjBz*JHft!l=)^;%gj{TlcnDR3fZlkY>h
zps*V;+gG47A~B#LDDR^5K|R%E?L%3E5_({&3S}?KN|Ze)D^T8yPr$nQ2JE&=LH|qC
zUt|3ogXhN at 6Da5wfUyX?FLJLa4tM}#ASb?qJ{-%`Ko<52C2{t9qrWEi&?@R0GrGb3
z`E1D}LbrhueBWZ&RI)&;xed-UHWd~457-G|1FV=8ya~93bwqZ`x*GHd?Y)n0`H|&O
zr$Z8_BTqNhk~p4Cj5^`pbeZ<alLY?5%@HVpO at 0XEoKu5z{z^y${3?e9OnlM4Y6|E)
zJgl0NYYym~MrNbCmtg5$&^gvzxAy{`1|4U*w)m~keybQgNc&?Z94lnN{~Xm;f~N2I
z<!K3?*=>|Rp}d8;^9wgGV({ELZ3C{|^iylEqHM)IzY+e$OSkkFG7n(S`EN9j`I!mc
z=L^F7hzX{{O<-COJ=iVy)gTX&p_jV6%I=?HZnq<k*OPg{q+(uRPC!P<_ngYj3o|z_
zvblND_#gA)+F$d+f_XvaP!-Bv%#S{9e&mt)V6b2e$lSSv{~qC<Qz*MpeuwfQ%9AKb
z4x$q%@1Q)6@;1tEQ4+iNHwB9^-f2{AsBd&P*3(K(p7;XeJ4T&8mGBQb at DH#JGkLK2
zjv3fjK{Jhz8CY=wc)(e(p`#w?G`eH4ZkcXJLnb!IkUC>W6YR{N#RKz5Gj3oWq3$%$
z<3F=4$gviVXMYYn&R?&yHAY?u#(%KC)OqtG2~VS=@jH7D;@8P_%po!_(*BxDjsJ5l
zk^e{KwE`2q^%v at U%p+h)U{2wCQU2+ghPkj7dQd(12LtZ)#T--NcOHJfhcX{!C9aRb
z^>~zHQD&li24xn?XHll33?TCg=c#B%Hh%l#_bL2N!FeFc*y(pMZ-2mE1Aht369N1l
zqy!6*{4Z&b9SO`!rC|d4{3O;c8+(kyq;QKJP41z(>D9brwdEO%C>6dP1V=B8GGop@
z#J+T+R{q^HLNY#Sf17W)hTs1;^R4lJJKx4MxIg_IdEU(-cnfn5v1y*QxgQ`8a-`Cm
z$O}YHLB6(d{xLR at a+3Xs%O57RcCreMij{JheuuiG6w!5b;`d$AWW;AkuQ}NR;*!{8
z<ge!b+Xi3Ps6NCUR=6h1D#}AI{Dagd_;Un3PaQ$>XZ0X=6Lj;StA%D~V#ZkFzwiKS
zG;l$-cLVE~(CfblJ}%08uQ9;gCF_2ITMMo|#(npJKSO*rEQptiM2YJ~5dt%Gss`Mb
zKenIXCFA-<-2W$h<j3Ru*H~qZ#g>762AJE34cX(~k3P6Uu&Us%W`e%J1fIpzY^X{x
z)Y3H5qh_!M`bLKj<fcMjnZProYZ{apnm0I|4)W_pEl|V8_1&|Ge;{&ZZ{Ts_>!t~r
zD1%RQ9Pe)CM?u|zU1f;tC;Fn3Y0w=e5A-$GtCEXPZ;)%hOO}q>h4t&}L|^R3zTk&d
z7z at 4jJo4K-EZlH$*rNT~?~y~NpB}a44y)kSy2~qE15RO$qCEA8MK0D%qJe+*y(?A2
z at tL*>4T2r`9VGTtAa+MLLh=V!x&RX{5&Y(jm){PV!?Tcm8~gXO5vq_nHlHf+^49hc
z9SYH<z&}pOi$yMQ<P!x>n9@^3MRdz4#AP7|_ib+7u_?8M`s{Jh*h_XJp9%I8_|af&
z+XFwuS{MsmNg8#BtfhoU3S7g at d0mu@_ at C(VMRB>K89C-qdbT5Azuy+DZGXCC)L7_r
z;`gm`(=+ at UUB+<YSJUs6fqnNC%u!{7JN+3yKTzD at JiQvRfn=Q+MXrxOL--|jc440}
zM(2J`z7={-!=L0?lz+534R- at S<nIdg+0Yj_^XXl{HFfg5U0Yhkp5M3H4BsP1osE8j
z)PwSrp_7IVBbTf<=_nT#!hgy0CidTUl-(%rv?-})Vu3BAlVX3AVSmKD3hFg{PN&!H
z7pYE9Avn>%X=2&y at VC2IrUwSJK6iy$cYBM$DQE)C)qx*2 at g9Mmb|S{_E^?W2{2g>M
zpCC_CjcyXZ3G1E{^WFv?)K5gIb%Le=U5f4!$^`fujv(<R90n(uYrr$cTvK4Ky>h|J
zKFe?uJZyWsVylII0plHyIT4TCXA4ozL#aY8I^;wPJVx at N?YT at 3<f1!-YmZykar5d=
z;Q5ew^#{s`E<F{B^9P7cadgE|<8jZwiCyZoG12yOar^r4`##5KBX+H6YJ>X_7yidW
z8+^;iygG(?bqw?BSaTUSujVn2Fs~|@!00K1^NRI6mb**mP55D+U#tSyL+~NwkHh#%
zG(YJR_`eLFG{74JJM^~T2-d#L3Fm9eI|4<CWm@!aKKeP1UPOHTQg#SWsc*s0xAnHj
zfLPI7U$Tc2{j5TGaTw;>Pomd}+ at szPKiL5I$#yAUSab&G{={ci`9gDh$2!BEuJzCh
zFVcL5eXR#+!+-?^?CK0ji!e`&T+QOUxbII~yVI4v=y#!H4rKl9eZmyz`^6z|!@r0X
z48=34s=le2n$JWsRUc#qPAB}trw8*X-_!56sq{)JLZ`=k8pG)okqQX%{-+`J+2c at _
z!3L!2m=0d-7Ml at 5e3bi?&uBIaeuTc#IH>2?2Kn?8^wl-U|Jx|PiSyllA$jU_Jd&es
zw at 1-_o(1xJn3rDLvrGe>QtH<3qWv`%JL2rMV^l*RpS#p5-VdQGM~t00dwX}$G02F;
z=ws-o*|i-r1fx-JSv(7W?tit$6$J<rfip56KG4U>y}-wu#p$~`26FZh9lvhLfL?uq
zQ}AfQ7EUIfgLN^^@Gs!Zp??F8PbIl(<~R5AQ$v2xs=yz~RQ><Ge>{CcHlSbnP5RAU
z%1n(cRskAKMmyi&)?3JpkjrAoIAZ;fX-wM73jw)ac8Q%=X6g7g;G2mu;3<lMgBVxj
zkA3*B?}W at pzVZ11ojnyHcmymaj18AB{O}-MXtrBdd14*jix?C=Yy-l&Qc)He>p5M4
zD$qv^&NEbx;HS6wWVqxZ8^678s#M(#EWHk#_fJjKd<J}b$3UEWu0wevBwG25xn;E!
z^IV3tJ$68T^;ih{PKU3#kjT2=g=P5<24W>bHYh&{IcZ{^?!rFDVh_0aSNl8h4B{r6
zo`3R8gR}D&$cN3u)<ODQ(xs3?2LfLN&r1`|dT1s63N>PIA0ZY`N at Q^IUAfJ4C1~zC
zw}v~3e=5Hk^~M3u)IZuG2*f%lk46k-QMRih_$Sxo;0vzG;Pd!4#gn-tl5#RJbVukr
zQhz9LFG179_5r(xpE5n<J5$_yUHERa4fUH)f0FuZ_?kOA5dSKYadIvEOQ0tuaeZ>`
z+im3eLEFjytm8Q9NF_Q0*kLjt&nT%j_#m{BwIZ&A(-YVczkqmyLI>7O!Y{E3*w6gG
zM7vvf4$l_oW-5t(0zTp#HZd>4UT?T5-g#O9`t0mbX|`gV+j3ts7u!=HQ}iJob52<)
z+lTdbHrlXR(h;A*VdHiKANL{jGdq#j<x1`TZ!&b3Gy>Mbze#eD!VhN;_<#(QJCNrz
zg;ow%=%*NLx;5YhmDq2KB|pW>UF}*0a372>y?OGfjv)jy-(G3B>G7(e9=gS29S4Y?
zF7^%Jygq*zb6pRALnr2MZqd`z4P`IVQuU{T at tQQ~LaKQgR0-Xp`6xcewOKnBbSnj)
zQLbBGEC0S-p#~22`@rdxs3PN&8r$E_TJ&$$g~~8_oBIZHuABvq-7-!`A*C{+QU?7=
z{>qKY<@58x`s}pk9Q_w!!mAlu#%;P7aZy7I$ge)94;YRsL&uPu0*12~%X}_Z`Ef#P
z#-^ru75_^2;VH+f at Shs<Nw)ng9bb2r%^<iR$iFp21zjv++n_TLxxg2$nA1tska1Bg
zMxR$=@ACpLF^dOG<8Pg8tl>=5+(lO)Yqc^Nny8!`5tkFzx;eb^%$9|V)T>Mf-*aK6
z1UM_?6&GQj{PJ+z&~@}^;uDkm!bCCVO)zu|z%``fQO=s);rdJ1&#p~jjjq4)ECaEH
zu%jrcvy2>kKs=9Ns1D$%O8Eh;QocX@>0TgyHRxY8Xct%(-1%CO5^LHT(7v3Cz<)WS
zr0EuMPFQv7^I`VXrMM2<X`K(zzezgD+N#s5>^kJ<!@VDZ9x4&%T@`^iUHkXcO{3UQ
zhxcAUd>`6;gMoe+d6Yl{Yb9Mq=mSDWfnMhW^A3F?*gayy+;yTW1q$Su44?cU at F(*v
z`)g=__|}WSZPC-jmddxZue(eg3mr|-LXszv;H_SOUpUEc3GCmrK3NUsT?FP`glJ at L
z4fd}NW4PfyTW`1_OthBbU0SvfzQpmAFV>d^&UU$0U5WgvR`?DBN3p0=FjU+lOhj(t
z6tdrKx6oTv9Rwc)d_xFyFE!=$+wYYBRCF8n_9)b&tC!Bmu%!!OL)VSp;#o{`8jly#
z$OF&F$D{8_Nn-ejJ`Vcw_c$MgWtg*lY&&H^p61~bGqL~9n=lVKG1`&43HyucW_&JL
zH_Z*Jr6C0-&Co8T)qH2IH26)$OXPph(CRt1#Fv8KDokEx2cNYOJn41&Swm-+7TCPf
zI2-WeKE}0cQBw4^R`LOpN3l;e=f4Ag`fEDxu(zI4%<5$Q4E3hCXTLwyj%SsIo|<)q
z&_@{Dsb8C|9qAvdS?ScK)_knx1*oG?LTvqgC+j75{3b5#9_^>?7iM7{&aBgl((BHc
zfN4|U6J-)+g~b>61jh at L!Ws$`!3~J#Y)4-n?a07=i^A$~tq$*FQBT*&C58t}Gl>6d
zzCF}?a109&YobNW<ZsB4T4lXRD}ra^y#d(^A%CW+p7E>_L#Lcu%2e{9a~)o7yk)2}
z78`09<Z(U|C at BUW!Y=p&v_-{*)kAJ=$N6pOi7qk>Sx0CJ=eKaQ{Z#r!qFz2+uHOY2
zD`xuvR&4fQWlQ@*q-EZ$zpAHoi{ZF1UD?%YL8&a0v;Ne5%+qi2?5`7*ZvDt%)dl=a
z8 at q(V(>)FU-#*&E!DDYcsW1D!zjEk(&<cr-Y$M-O0IZ9sRPvuVJyGlCNY&zejvMjk
zxh-^%xpC58bTIoF{|Bl7&&u3V-6hJQQ}9a!kN6f2ueNevEfF21`r+ at sfG*zpCL1fh
zf%BD^bHf5((aZ%lIj}*ano^$+ej9V{8uIhqL0ro!^k1i4NnHUZq>Ww&J<e;~cM<I6
z%ZPnF13I~q`rMQGNcM1^<z%tBpfv^<!D4;@iREK_EDoBqcMUHWbNCh;7!U>hR~)+`
zxW3KL(2cr|gI2yppF^G)=wt9KWbS`IO$lD+_53$*{&V0u#NPa at x0*&$OAa=W*rg)d
zs|>FXYhj&WcXppXT-(QFzz=J&Cdvd%>4Ucn?vP2Yd$bvH*v07M^_r+EZ=Jiz_wz2n
zH|DzQ(kF9YR^#y$;ic8cOIy_CF-c|j7?FQisLbExAu>DZ+4y$k;9-}F5vxPad8M=k
z>j?$Fiv^S^@l~0L4K|P*O1IG7ALP(kvTJ2u5d4Y<>ow}o;i at muANSB7{^+l(@EyN?
zI1WDiV)TtZ_${KFg--GzlP9*}+V>dqJ7}- at we%70_<e!2-H85RfPYha<a-Z{l@(a{
zp*iLF=6LR#;g9Cohj^UJIpz3v8IAm}^nIK^#`S(&zmija!D6qbD=HMjF6NXEwn<Co
z_h6f}Pv#KzU5%lV)pBd0pJ;V1Fo at KbMY)XC6ix-9e{azme=+)-4M<1di>U^|ZlAMD
zFF`j}Om!efygL=R{Q!-;qqOFwbA$SSYhVe<0cW+*Ys20}+>4Uz9k4k$uk4oC6!8BE
zME)bP)&bj!wa#zrfiFX+S at yv&a*fE~#NG<o1@@5;_#bcYP`==L3Hr%yVY=owtZCO_
zn|C4dI&4VoY+=CRiC=}h4c+F&fPHfbFQvqqt^_u#FNrGxKmD^Z)ZDI<h5-K<JZJ)E
zLkWg`+X5R(xpjG45A-4|<Kx<5ir at NJJ4Vvhss$FsTIl(@F}5SWyogxO8~E?^8a-rV
z8EASWt}ljO1bj8ef4UF8Un&9K|A4NO<L9P?)Ih#-2pHfmCmQVJ{n&>_>Ii>5UNawY
zAC2T22tOrw(eNQH8=hBKV%~8t#b2xohc7H_qUXw*okf}G>jGXCJ&A&jzIuvqepq9<
z{Hq?|g5<S|s8?H0Q%ise(;}22C(7wW7Cevh%k-!YVWuV${J<B8aW12up+2T>$V_ww
zWJ5i8Ri6;2z(Z56{0IDXR%(t29))aAUgfv$=)odqKw1b-c`v)fKP&r^f5x!Nb-Go}
z{)w?{R3i9m*tKELhJ8D?3U%ZQ-UY7<pAzuwy-Gju`dJ|rIDf1hh4a)9lQN0Zhjhde
zes~A`yoZC&mclltm+TX))ojI at bO8O|3*J!*S at bdV=skje`pj69S60v3(AO7KcEK0u
z?=HwZsp{Yr&BGj6KNOfJ$<Rr3pp;>rA*&~MkBvPa&?;KbYXQbB at Y!p8T!9ydxK8J}
zT*{BTwolcvVx at m1ooltR7aE*DzG67QI{7t0D#TT%ZttQe!lw(luo at g#%bmEV6Mo5Z
z<n~C;ox<_!?gO$D`F7Fg;D5Sc!z8#-mx$djw?yd;o1H?_B8Y}9BpG at KRW!lR^a8z|
z$M>?Zkw%LA$$0ZEqOpd#w8~J!o^O_PEVlrcw+!dh_0XsBy-j at JtrFc??Tm7H$DPop
z!7F1wr)BUv9)j<?UzmqnUiiQ2fiNx%^W>{`jvjsiJ&XfA052w9)(9WdC>FXbAMn4g
zo^&}z4bTJc%Mr1ZPEaf}2|v3x_+C{Y;#Td5TP1#7<%4a4JOv$vK7?yi;C%ypJ~T2`
z3jNF~j+VznJqy_cc3;s*(k8Tx=zC>Y8_#3Cl4>G^$!aV67~>>{-;JMP8Dhe&9rnd~
zh;w>_Mu0JD2d!HOtv9$f_ZKl7Z3AN)aRkj6(=*sRkaH`PQQZPh^6E)fs(qjh!>`a|
zDIgzdB11>3I!g!Z#8~-atb9Ec$D-n5V9%3Z{TA>2%{+SA4^gwQ2Cj!6^_s9*i7y~e
zyVQ8PDQVcH8Z~fK6Q27zp*g~dHT_zx{ODV*&4mugmv)zC<S8j2IBpvpk at GLqvvN9U
z+E|QxfEe)+(@1>8*C?-6X$(%2hI$NZ&}HDM)R<>Yy8^#dmTt-0iEm;+-`_?h!ncw5
z;IF>$m|srQT$}>1QQ}s^@5Y-dr7z`ugZc0bhbJ>9+7>z%_pg3}Co}C9$q^xx5-h4|
zw_KI73KCZuw;D2F3uvze^Rgwk^5@;t+LB?vEf*G at 0@gQ)%RXEl`X2b(H_w5$b+9(r
zP%s~EwVO7^sYA}9t{({YX51S1os848%)1owz4AGf&FW9_UjydWpwCGp1HPsQzu`9>
zsV8j?42g8QHb**KTkxG4&4PK!h5C8Q!d$u_+5!8)JM^pu=P$vk(>#T$u6)53kN<do
z at c--ms;PL!>p!0H{BO at _2EVx_WTWym=oed&tI8Mo$}9QJbSbdBJlsQF6m!p2<r|#T
zBlsRg09QAC9&6g`)#vpwbgS;%I0E}_+7DbzGl`9Oy5jZpu at xVtKLcOZwP=?*Aa`=6
z at pRmp3oWeN+|rw(+uO)<57o|+^jLGIH3*KIo!u#fKIq>`ydIszs|J<??J)yu!Y+L8
zIx^Ne6M2SU5MjLD=kB?fe-vX4{6h{q=)cA~3D1aetcH&Y@%a}Q+6J(LF!qTU=Uo`*
zT^RFSl!f@!M#-#}myOFR{b#H0fS*Bpopi3>2H<fb?ilA!!G4XHI at sW_w+{Tbv<to#
zoNc&9Pw0MpH}>a#?p^DE>6W5%r&Lccjz~@t=tq1AZ8kXnJPKSvj^=nZJVkUhhf||p
zBCe7fDxfDlihd+^i~T5XGnH8To;BTzONqY4jGno=Z34-62ApzlUN_>&eox;AoN&pS
zJm6e7#|*)KjrS0o$hh>7UeMj`f_%i3s-__qLM|{_eo63~4I51(bT}o5eWffet3Mpb
z5nl&9&ZF|%&L#3Fr&V6&XjS~5j>*m-Ipg$ng!B_x$UmL%`8pBt-`!N7tKj at m3W3RJ
z1YXthTt#hp_lx9S<yg&;+VV%Ac{-x)1q{JUiDm-7-44A~$XVt7%7-F7(a}}iT?3z*
zE!%Px#8yM_>SKNJpPbyI8AAMB;k&_Jh#LkOx_g|b1NWZFRS<oVzyt4>N`6tk02}d3
zD%e at bHNq2c`;3CyBfTXfAO{Wyjv{hhmN{7KKumC(!ce0O3aJx#>~XM&k=Rm}tH4^L
zfDJ>z%OvLnpLyCXjPGYU_~p{on%@#juic^J7CoSIz`rN(PSx(?O#>bN+ase2c~Tl&
zU)U<?s@<33E0p5A%EwG{;ozR}!c1~M(IZ4VhF#h7I=w(sf!M#!TKV3o&=1&LT7Z{i
zS)V(!iC||nw!fP-=T3#(2`om=ufCGRV<Atd-A%c^YiJ_szL2ZurRC}g<{t6mem6^U
z3-4V)7b6}5e&eC;>VH+l<@XW4{7Cq3V=t`1crC|%MC?9;&xkLwkY$tizJ7^y0{1py
zRHL7GsePuzZ6bK9K01ly*`jvTmLFK=S#0erIs$y69AK0n{|lW7pMKc)udWpHg|!Uy
zT9{YGxlW}wMSNqd at HMLPTd(a_`Yro40DjQ?55&Fj{g|Wt?8SO~#|G#W35F(OQ%Q{D
zv8V&K>}vWFwaZ_-?4rMBS%v>Ps+m?c*K{N{*L20JZdh}ogS2nNS*OdUIBqKpeYfKc
zy$SNI$P29cll$*#{DTC=#|>=8$9LFF<Br%jr#P4XPX3?Q5B-w~*qdL6<}n?@bXl`d
zNn*T_Uxvg+0fSII!`KwNZEHK5we=92y08WH1y7!jYnvgTOXk}O?X&ufYJ(-- at 8!b<
zK8-EgGomUdDqUNqrsEk^au at iD$EeG4JI>H^dx+r?;nxGVg>{AM)nSQBnFYB~5bKv+
zjl98rC5N`sqJ%~FJmnSV)iXxu6EY%uP0ZGDrXgEn=%#u00v}@km)KVpWHX2MQx4pp
z$jC?N=UJz$n|EdM8V+x}Afzg}*<5UshEyb%nm6gC at S{tBzs#r*7VC#OHW|F*k~KL`
zUzdGXTmB>10v_v;rVgV=BR)0`{%Z=^CHM|?#=<V<nM(4SHMm#n3+<sJW9_`1SQ~qD
z%YNQ{RY at 0z<dOXjdq}S``NgM9w~M-zTCX=vtq8SPY at U@P4LNNJMkvQ?=1sZMkRH0w
zyeUT->7>2LdwBNHe98Ut^bbw*<fJbm9E|*9Cv0O%+M`TMPvNy7N8j_-S<ykjL<OE(
zbP!?^ggC|vS7Yr{Ytqn`t9s;GYQ08X1BNO4v<30&t?;3k%Yz)C7orWVbLC;jLzxK2
z?Qq!aY}Ap~dTJMP19J5WjEJ##)3hUY3ywF?t`ms2*bE(zCf7pVyY%wBjsYyW=pbH_
z>JRv-kXXFuAqO|1etAS1;^zL!HHA7h<9OS&gX0-&l82;@C(m>79GmgJw_*QG0!`bf
zQYDGQSQqjYWUp(4Mn!P}ZBYdl2a9z&_RSE)U`)GmP+_oZ<&uAK&&WY<X=vjli4EUl
z=cVC$-vow=g0v$yzm&tPjt&AormKEC(=q5L_ZalnKvzK~%BtHUN&?^a3UH|6RXwmZ
zJU%I;x{yofCV1O2dmME;6ziDii)QB^se9g`XE!_VNDJ4J{A#XOq6rQz(W}q#1U^!1
zC}Kj!X$-Usv2N)aL-t~vCut0bo4T99;K-}^FeAU>oeUk~Nkup&QW55tr2Wg5o9 at Mq
za|;tJZ~jDdl*IaHM|0O+M2;sH&AIZKVV;nEoQ<i0pTdUO&bs69z%d1F+>DZkBb+%}
z6}K%C_+wY$V`yc at TxjpI?Xj?{_q4MGBtIU`3vp~fPO}KaJzS3{n0te%Fv<-VNK7^6
z7Unb;W4)8$<iDIw&bLL9bFWXx`F3UK7|hLNGB<Obgx3GcWd(nf``xOGwdL^+5d&<@
z^%9aB=LN{okLJQg(wPLlJZmd>Kox6;?^&om(iwPHW&w?}p?X3u0bL}g*nMk*`_ym9
zx1b-3Wnb5p&v}{lM&7?|VV$9R{I at li#0!-lMs9le(Lxu`#b!m~drG-nM3sv?%xj|!
zCl!W{f-!ZDqA!Nm2$P3bBZq<|zSt_J)2)%Ts&40^+85sgPuU$Jp?aYAKwdD-!l+p2
zdXrv$6a3AuA!(|1<?FERq=cL!enuzt<_;r#kLcB!p(5pUk#H;KMJ2{VX(<uKg5I{w
zd59RR4|rqf6{EbD_7J`%b_ at 1&mj;)+AA+ZnBbGu at QF%Br0XF*R at l#cZ!J2sCEbD^%
zM=tH)?tg=_)$ZSgxN(UsUO$J#2*^lW3&C^&zu>z0D9<lSI(<}pQWQ&U&&0QZ?6t^M
z7iO0m9*63|v*^Kl`D$-t-h at p~!&<y);bWXXKRE;6x(2k&7;c5;ak;19BaVLGCixxX
z6fBA%*uc at xGjiY~BysiighCD^b5-lVs0-te1S~MbxdMk<v8*#77W|OA#U=NhK`fAz
zw~(U^JbtWf8T_3rq31)u--Yyn=W~XhAL|s&UUUoNvhHNOxzniE351DW<4?v*9vAx8
zIZPSTTjK5XRg%kr*e19(dGjrF3FRY_ErQ(&Iqs1IiPozeCE~3jg2Um_a^GhEdg?Fn
zvM4|C*N91mZh<brej!)i5GwB5Y%-!J%KxxL`5yEc>NiAb)0<ApC6CPW at eSb;w(t!y
z4|A1;t1%~agb&303#B6URdr4}(alPYTGmo>=so1PM8B`#S)x*>H^tjid)Yjy9qnuP
z@;2XID48x3Vy_vT3rVz%%;DrabLG&<7a~XHn(XR;xp=o^iW5Fg*9(|Eci2KzTfzFl
zdp6*n)wm}U_hfMQ+~Drn06iD<Irt{5C%|t`x87pY>ztw_w=m8|5X0%gu-58~Cgk?P
z`&&p~VXU5WZN6V@`(RG5M+{{_+ef)7NIqTNm!9_cPLgj#u$=hP<|1Z*+&iZi|3%Sy
z^j9ZmA35yVjCG#mo%ly?9=;(@v~ba%#15%Ug-o1jg};b8AbYVoQ*m`XqfEoKlm^$;
z*-^lf-uF3lB0bzb>pdK~IA&UOkRxNiT3Hj29a0CM-g@|7H*mS^)?!c13DY5N&Jda>
zfuEhBy-957Sd;f`3v7Mu!g*v3#Ww)QH!2<Hp*ZiM{Pc{Zoy^VDWmHr4>$ujAdUCO6
zrc>W>b>%-*ZHzS32zP)UkXz$`jr)!(`d9dfo$a8AFD>NK#W;60Iy;7Pm^SqTbgb_f
z;OocAH#)}3$2uR&jjZ?7!MwIF8I9gi23yg7Wt~~Ie9NlmcqYLg;wyOPR`j0 at Jaa$J
z^Krh9t{mPXV!SSx=PxhA?-Fay@{d~cDd6uf-)K})z~VqX&@0i4sU|kRgTl2lp}yGr
z|EnGOq4}n6?^oa(y-jvXxB~xe;QA^*H1Ekf>6w3f=fAmk7J6NvH=s{o3*qXI`Kx}s
zGt${=q3Z02&!KbCpO>ibLi1I(=gFxXi5JOlS+fYblcF!Nhs3E^w6P32k}$z)mtCYk
zPqphxJS)dK2l!2*msmC>fQfX#CRrXV;W?s{BAwvnke^D{0^jfYQ1?hD;or=YqJtx|
z2J(f8lE at kltSxR2Cp;wh-b;k9nDYa-R;}aKs%y$ih-(vRZzL-a$0I^Ija|U!6KR{P
z)P|iThO+l5;3rICj#3?i=aXNwlRfIM-w`4By<JJgn4P_|5Ca`aaj`IniGf{aSyw<T
zY_?*&ciW;i%z at yE@!0ogAXd&J>oI;mKQT$%U%p^_zc7($4?X|n+1!@oV&D<R8G1Qi
znfJuqgfEzx2!25Y{U<3A8y(6N<_VLLr9go>rlEYR5|C3ff%+ZmY8ZI3pQEL`$F5gY
z->mY1&UnQD-L09c$q+=z9@<krvM7Nw#22W#xOc!GN4S!+ABNM#s>|FOO|ZBzH^UE!
zdCZ3)W~{?@|72zg$=!+g^3NNmkH5x9vG0_Gn8A-tiOy(n&5H)6`dT7$<{lN!#@?MM
zvk1l5k7d}~RKR<aF;kQ)fwz^RiXH}Drgr~_e-b|5^EURk+qo8L#)PQE-|kmBWxutv
zQeSWS?MfT$9 at 6v4l8YVbRM+oHsw?^SxXhKq5igkO|LM7ikNa2haGo`AZX8PWv*Cuv
zOJ~%S+(zza{O()ljeXH(cCfSkKh-K~?6=e1K6x#DSWXr*J_<Yz{08{d_Ik=8zj|No
zL=JP}2j`I<A_?^kkw6}`tl8y1=bY59A2|T#n52HroO0_enn6xRJ at JXd|HXSgU^!gz
ziX$1!e714f_-4ovm5?JwmmGT6#CU at jnN59Q4vaRuqNMD?#3YZ#b>mxvv+90e*Sqx;
z_yjoPBLlSM=}COvNY%YYkMYg8H=nzA7I$wmovgYI%siKXG(!m;WB7qy>{h*IlH2Yz
z$^flaK3!I>-)8&AfuKUNHp8#<C#(;VB+ozwBksf+b`SYqT2MAeCE^;e!@(Cm%E*&+
z;aW?SlzE8%ui^Y!6tLi9cd3aTIlDmWpU+MJHieQmnW^M*l*|(N0*7e$bPJ;j>Mtne
zIgqDe19+0pv$Bv6GX-_74kEb<BeGPao}h<JM%fmcU>6L>zPD!XPux3JYJS2!Q=rGW
z*%&px#r#sVL2zVQTR>)AF`Y55GkY=iwOjc&J?5&O0*$o at _0SC_RP4^kGrb#oN#o(C
z)ZRQ9Nwr0$c-3Kl6~m4>8oUzLJaVr4LvUoes6e6l3AUoKc)pq7lM6;bPh|&AoISS`
zeB at U2PmO@^&SNwNoFC`Thj8cnx$_a=p^Gnw*~NPEaF<A at S26T5UX7b>=py^qB)PQ<
zLb>wK!Sen<3BL)w#xO5^SO<9Ai+^2Pk88-cR-xRw3Ex;FSl+m)Sr>`iWznaAS$}R`
zBHHUetV6Iova3RQh}?4s=Qi~|TzBEF+i~qE-WwrU?k`3R(<1PK7PP~VAU8F|zQTAh
zdOBfVvg{PvvXlG%aIP)of>2)MJb89xKxU-9Lb;RFU0zV4IfuL}Phkw+7A2t%ULd-E
z%;Og at X3tAHP{(Fq@)1mv%|r&EiyPc09hBIjlk>NLzQ}vGnx{oy0HzIibb~o`Ot=$e
z9ra^mKgo}nAm at FIbMR5*oS~?@k?g=ZzA=$!A@}pZht89d^C`}GN}fe?hI<ZWq#gby
z#J}^ZRd#hN$}2c7<2Wn0kNuz6KeRZA|HvgAiwG};^>rp>37)IN3%vcy(xn}uG~}Yz
z5{v^C8<oLxaOVVHOJc(Rx%o<OqcL_y=0n13OiUb*F@%t_`A-pDarCEz9~$Hfs~e*N
z->-@@)CCT+s at b@g-A<09y0c%WZh(g$8YMFvpfh0uk!9VDuTTvkbQL%rHjhQ*f445|
zzxWTaqnWU`WN6Mo2DpY;Q{eTWucKX|<Bt9W?}~(v+yLf4IKR3vWZ-=j!mXQto7OJ9
z%fEh7L|r`PgglS~9J;IUSy~O+ at OFh?4q`228sNM~e^Nm9x at c;qFw3hB*cT?jXJQt%
zgkIR>*q~$lruYw3FX3H&XfxuikjFK3A at SpQ#OU+8NqY+zwEqSv^MRj4_Dk3^Ap`N-
zh}{P^_$d{;)svyOTC6@$=*P30o;SGa@~`RX@&&9B_+RGtqECTe3}@$>LSp@|dDG?7
zjvw0*={(tKxNQV(yD`?#Mn6k!rLQ))Zv0K$$+{XYo^&ysiF-!n51ZE;I&aC at rC(6j
zX)n at m@JWv`-^`Z7x5c+Cht*NN at T0i{+38Qga at aTE7er_S?f$rsw0kPPu at ZdiT&|BV
zbA7xHeH_L0 at owQkw5JmDpZF3qS1ccB2OkI+TQ^OTT9atRKp8uz`~Td+t1<--b3Ir?
zxi9@<`V8GnGyOnb_W`@|bU5-^_0T!$HK#Ts#z#tBA at jFTfw9GYCs>YmP37`Te=MBm
zRfq3vqy4Ee`XbsIBfg1oxOmddd|SBH&_%B!^BrR+rJ!Hs#%?z^c2U$Tx=E1r_K>#Z
zI$W9wrqp_e2XJ;_qjAue*5_f|YC2L9*zz&kAGs*<ay*;eTCnET50+}rX0)?8x7wxo
z?_+fhiQa(Op$8UUdfl6Bs at DbB)V>3Kbh5*!mXj{jJ<zTjX!j6kw??!8w#2by45(jP
zPa9h3Os-GQa(${sJEw7d`VnX*0(2Vz%#jG-{^k9hZVUaaakQSicWW`7&OZVAy at dRZ
zgnoND`c<P3hH&%?zcQ{5KH~ad8Z|?h3Hn|A<ogWxzKNrBqtP$#as2|Cq^dpU;2iWx
zhllhdzg*9x#Ab6>N*;7ATz}*Zma&6${Qsg|D`@v9N4q-EuFL<R-A>SM^Ap<rbTvo2
zU7+3iztQfMLE7!)XgBX~v at 89KcC8%kF6C(V2hi>oj&_BlU7%f^=3HPKVmI!ikEe5e
z{GssB-{^Kq#e0Kvt0!v%=ynsm9&{T_UDW4|yk+t&=X^*GZZ^2b at 8lmdnI<@~PhN$8
z(H*QmO at UY8yS@<pK4Oqwg&e(Z5zh8H19~Ox`-r~L;97Q9{4jZ3ol%sk8VwrXKR7-g
za^o|dn!%058{Am at f6!=t;~;JRI9M(ppi$@|7K0a_+}Pe591=Zg9c09u=sg8K*w1D{
zcN88}n6YR4jI7;3t6LE_nDJ4W1u=paI(7V1{H}Lx2KMBgLSWzK+g!1~g9rGOlpac6
z3(=GEe<$)KJ;nn$?L3=Feu7*lc=|f%B;K#kzqN at e2??II+;}>6rt2>AtI>OyDM7)?
zJumiiG2m~9ypo*B#fCqx{4gj;`BBg~<?gZuHof^Qa at j@-_3(F0fAJxA??#+w;J*}<
znJ80HrWk7IEbjSn(BnR8jW^VzZDq(s;Ny|Un+V=Gi}+G{%7G1*8u&S|HCbBb7U2;C
zEX^+l=^Fm>z&3e2Sq5yA6tw5m;QD-?!<8xii>~FyjdAX$^}uNa4bAm1zc;PiR8QT}
zMV(&E|AH53eBa=RSnL*Y&}nc#Cku8S3^%+JnS?ktd3MvG3KB=n7ip7Ecd=>Ko2-I*
zyrz)CzJWO6MA&5%xqfRtRdt at KG4z{6r55BT5+ncA%SPG&?9*Y_>6Bq7=qVIkyYHqv
z>VWDQR%&o=V9af_!p*T-Zr0NA<l9sUWWF*}YHFOx&9!`)xtd9#rP_Leo%oIm$$Oyu
zU_xH`%A$U4o4Lh4=OXm3vSr%(YYsNae8`@x>^sO943pF8HH;iKNZEkChS(z}W??+i
zcr7OVu*dOwvt`YksG8983%ZyUQP2lPm14|yF%#D3DM|t+Oj=`wJOv$33cp0>0~)_V
zbT^Qnn5}QoQY!M~bB2FC+0&VDaUa&jUS>+&K00yK*e^ARi- at 7@v5J7>^yvIVS4DFN
zALF(3*7T9WW3ZoB;XN1D<xSFBm52q+Rg{=d_a-j at wglCybMSZ7?rSw7P8Bv}Ra4vs
zyz8{#68sb{GU0XmM5)#`I)>V11Qr+_K&`Lc*Eal1wZWlyIog5vY&+if5%)eWXT`MN
zgw=S*+~I}7-GlEPXy2$w8*rWIq%!%8ZVK8rZ?Jvyx2oxM?wt?t&KB;S8CJw}fp2(L
zGxW*3w38^4M|Pp3JW0orTxW3ws*#W at eLbh}ULV at re6}eO{YTcCV#7tbLU(V<YOXKk
zx(I$X#(&gc`&!~_xxT!Y{5r36^vI>X$i>`DPw_fWKilBCr~cwu#8R};$)s&Ov<-Bf
z at L%u59^^gn&X at 9lWA_d4x|h<sphHzr6$R at H^Gpuv4)(g=<8$bTz&g5{syQuX$5Ugv
z#grZKXAb1Z_|7kr(4F?NU%K`OKbiKTpA>xiE1XYgvGD2U{y&KAdm`*(dToEXeD{rV
z`A6r<<sW|~9EodrOTUNCrbaua&_R1KTRfJ8y-B47pAo*QcOHD-;O-I2+vTw+EPl-i
z`uEhO`TrJv5pW9nu4DM7^NHi=hpCHIEyLy4CbQ+I7qj!IWBBhH$>WQ4=;_4vVb4;t
zgX>MwFo&t$a0jwUz`%R34tk>>0>U=pU8hML-3DJ*VBDKAA4%>=vyzT~x)ePBde5ri
zcH!OOUBW+5euT0N<HOnHuwQJG5V<Ru;7Y~5ja;~~khw`5VGPM%Q`I4oBBm%w^?06q
ztCP)8bqth5AFfUydR)(N%2(&hzZ73$or5^1V)(ip0I#smlxnpB^Y8i-UYAV+|B{&1
z30^XQ at RC@^{P3)wj^UTYm+-4kPNaGhpAY-FfRUYylJZTs&xPKA9C^#9_a*v(Z;c;%
zUE at FY*C;8GJ5)9zYruET&(oX4L-Jc{!gcNf{Y%3Oq}JlT&vmr=b6&40m~sW*z|vlt
zfZOna#4|fFPtrv3*vlp&W_CG;k#+?B;74H#eWIg(TL^3|>|Z-EhlawQ+(pMjPxqhi
zasR))2XgqIcvmT{&+I$tBI%?H)N6!NsxzKdQRF(lVUH-2dq=5YIok950RA<df$s{(
zd}_n{(&5*i4%>O!hV>JHSpoZ>)fi{!W05BSI+`11)l7>^b0HJ!10BUv4K6+3BL77=
z$$z7<1O~Wu8RJ}druwb+#w&sE!-u)U{3!ZuV^GIXVWKHD_Ic}@MaQR4G`>$csx}$w
z$X*XV^A4i~rW|swhvbJf(5q!9MGMrQ((4=Be+WiQvDU4c?4RHXpr7Tnc+4RFcj`5?
z4BzaoITycE^-|*VRPVY1!SUB<O}!8?cpWtKLi=vHiIh}t=qMsT at EjhHp-?(O`x)TF
zYLF|;NtbBgR|&qC#K*;ve9`bTOHzNUkq*Bx(2gUg3ywkmn+sj}SWQ5x2KthP=(mZK
zWn6k<7vZf3`<Fk^zqb~0V;oNSmA}Tg6#DolW4u|IL~?**jJ)8Zd5_=)VlH_ROmf2=
z&tlj_^;CO-5BP>Sv^{>=*8zIMS4Z6i9{G{O`-hx8mpja9I#}U6F0XJp;|@KzBA<TO
z1^ff`AUBU-%c6bYsRyss<mQzi*MMg;bd&IZ)8!%8HPPcwq)yT^@;hMXyvBXYGt{S;
z^YD9t-Cjx6i)ggbUHu094<3-;#u%y}a)XUvk>fjoLk1tbbS at wC9mo}(xb~14P39eN
zjnV(C3H=2hRKA($nfW!f<&$66p`DZ4po^Jq-ASvUr&w-%Emt+%!3K9wUml_?0q&ru
z<qfWGVUoSTw03nHCOJ at 0>ra*2fYT2?iR4}fCUqy#{Yf{9UBJWp#p at RhZ@oo1Gxxyu
zn_QMpE1}!n7xWnRC~Nj^|289H)Tg91wsdEyM`T^GUSjj|$$w3tC*nKxi!jY_sc3)D
z+Eq8z0p}GGVA<gJ5%hf~biL(4)kG)0a%<2%%;gTEiyqKT6FqRvE%=^t`8|pL_vAz!
zY%;li at V99sdX8srL9e8O4oHGFFOxh#`|lz~WlNVl<TQM1dte9tF&23U7tZEAqF0c-
zbg*H1*A??WBltJyx5=*_f*!-cs;PcA>}4I93%bhH+j~9X`-bs-!4teBe_?JOe8<0p
z?DWCUyI+A_v39pkUol at j*~rFp!e=rG-+;Jk=*b?|mM?mm_#n-D9l2QVs%+);MP0ya
zzGs!qyeQ}uk3hL&Q1?F_=R0AGxI^YS=6#J|n+Dhj4bI-Ps8^@Sj5>z>=s|<~M3V0#
zZSwh0zFXeHd&bi-IpzjAe7TWNI9t12R)cz)2J2Mnz4;ls->4Z?mEdPN{t<iJ1Zqr0
zaLp#=O3*|Qa*+E++XR8A_eZSzna1vz+ at nM2q*V_Qm%oF|ncDINFC&JjRCoy2Q&&9%
zUG at hg;v2~R=qm1ltacD_3WzH^Eo1|r?Vdl=5(~S&r<VAZalcEs--X2QQ{T?{pMsW#
zOCUc2kC;Y28Te*(>g_7K9{oFU1nSlqTVr&{9bJMl2j$NZ=L(pJdFHh<t=Vr9TmAyY
zeEDPtKVfp-ycLtqnKb;aP(IfOE4ACz+Yl4soOdb5hWo+q>;52o3iic(=tWxL|5GlS
zW9p7sOX^0xgmDts)eUtO?OQj2KCTZuL%Y|?H)#-;>-@`(oY>%ebc4jxHMl3dBO!WE
z(8Lrkq7NbVM}h^O5DZ at -_%jdu<~co(C$rYL!%Xb^i5GE?{=$~d6Zs=OPUJsRA>a9_
zdD^rI9`Vzg)+nM_kMHua9}aV*YVyZ;B!<1cMiKmj$H7MDgBfEVn&j`oZ#`_&8tA2L
zF9p{hj)Trk73Czp<eu{U2yzZRTuqJqy?0 at Q#{T9~b{P9N{4Keh;9}UU<KE#}#QNas
zRNvsr)RDnor;ZLj2LG0RlEXfBoA?p2)yB(Z=&v=uq7Cp#fUacQfL)cu^3f#)dFJQ7
z(c-^n{7!(5UWA=sxW$DYQ}f13g?Y$Ax$I%9{7Yw}{F<{&KGdm at i=4!lY}k~-Jf+&i
zp8bLFQ&bbtnb(%*$y}R>{_GnKc#%D at eI256wm3<g&#;|?_c!3XqE(dx*9#oXl>A43
zd*)-|s{?hpDG1-RTKBjAb_>@(`LDs<L;AP+rm6n at SAF6CQQwC`)sts<yO8s8&fn_W
z0({Lo_*ONsKX87qcCxOMu>?lvzLAOOlU|gw{~A-(z?kBi%0m{m8DrUi^9=I;YiVYu
zQ->TsFJP>fHn{%N(P()vBW#mNQPF3TZ at joh5jHzM=jAhr2kCVcd2el!z8W?(RomFy
z8yx1sR5n_AgGbN_*MTiJQez~tK;rYf3c*uhafvU0S5F_-Jb3-_+;noC(2J>CEVp3q
zh#Hl0kl=c1>S3RcBzENk;moN5nXHP_-(jui1tK at +{OOUk<r9;vv##z~k#1rSOyXe~
zXC7y1pu=B^y<%8UJu@$;4w#r{$oTT#9axXKd62~I_4z~&LabfBdH%Gz#0<BK6m-Oa
z8wTPSIKR>~<3`=anEU9rVRSL(`-1%5D)sDe`l6~kI^M|YHsYEJF&QLhN#F=~{5P5Y
zmCIS;;a>}y_vTkmB|hfGl+WbDd`o%y#;%oTRsGhdu9k!U>ab3_dK9)8F|g>SaC_Jt
zwCm*b(n%F%OKJJIf0qBW5q=Os4;qyRRap|)Bj$SjOSs5rJmBtDg6D5G1_bVdPWh-`
z;{74c4=CFTi?Q{<hyX3*@(!)7)WRyp77F)KHt?&^IS#fTK6IXbkaeo4DY2w4M{2%7
z?&^kEA0GUnua+ZUNGE(gZHUK59Fk7yS(;m+)5ABnI at -qQnF{#le#0cISr>&BKJq*h
z?tcW|%1Y)LBYVIdzQZwPAJVbtZ%giEU_JQJ#bsOA46iDsB1FuD<9ZQzsVoU=gsnSt
z6nsgu at H<mNd_%yCar{FsFig)jhCH_)ex!$Jeccv1&U%S2tlMSEpneIwO4jOW`(cL%
z)&u0#gXrhH!o1r3B~R0pg^q|=O*!Hn2w(bGC^nQ5>~iFQ{F+gyiI3VNw5uEcJrpi%
zaJm1CxGzu!pD%*dp#sfJP(5P9xBJ2eznWpfI)T|iusgVCkQWU1AyzI0 at eC@>X2d%@
z6#Qs*K9VBNcna_UFPZPyh>k#fG?Gm|nh(9W68Zx%<extDqu3N@?t3jgz<IEeau=<I
zPh&acv)8rPzua&512(l$=B?jOJ~wNMeX7p%@a+1UQoGzYI(pXJyWszucw=OzKnLd5
zQi_Egx}((zpR;zVuk9?=dG5I>y^vXa3syEiIQ+G$gZR)xhv|#heP8fEh#BGenG;ZV
z_$Yg1>`QNkh(qc`N-toyhnztP++D(BGN*`*g1b*Xs at K!z=35 at Ri{w?ox=lq|pPF_i
zI370Zv{>Z7y?O*Z3ig$Y_edVR10L{8TS9a^TpWcX at fXBD<{CN at 6U~<HrvfxW*@RBC
z|Ex*>XD=h4 at Mh|g;5v_)&=+Jt?{4!tL%C?6>*eB7y*d47G4!;fCcN2{Z-5U+{=RI2
zFE0;jApfDBr#&x)<W0^9$(fuKma`@=`0K=xZY`-J;V(ODL<I7R4M#laMG}XUyraQ=
z=2QuARSc(z{|)qkXN5}Q2Lk+&2*UsO`qiv2bJ*hzYOTDn-8CKln`dEHTM1ugPsAc&
zUy1YN^lX?b%P>aoumk<*X^$Kk(vbO?_?M<b26oi(rHzUpA~VxQj8TK&A!J=(%&|wb
zSCmU6HuC-WhCc9qN(%W3vF{x|95?(Q%oOPR?gyPA at p+K5|7=nkI+S}?b@<1{k-P@|
zRq}Uh{&v3yc)6^s#j37J+}M$Prn>jQ1D0Zrn2CKX?sZ}xo5tAy<3 at 7lr--c#*I)~z
zMwu^sYc?N0UT)rc!pr>eiKFKGC+-KDhV=<T!I#GjmMMc}9CYgo$T|GLUpIH9$~EVB
zbEzv8Vro;tJ60#X9 at o8bEuFebu0cNrTjjJ0$c*>m#+cbFxSvU(u5<TSQI3LiT=$0$
zUg&$#;D2lIO`J_K4)#f=*z|hK<qKOL)#E$rhe5ubwjVt6Yl7wAcfa7)|L(ZOyvWSv
zary9dd|1Eof`z>dyI|UJ<Wt7^JLLQX?1eZF<<5_C=iEIf?sMm_%TA%cKEV-go;2+%
zLQB?3(~d^ZA#;stg1^I2_~<>Xf1jKi;Jb%)Y6lmuag^{KaZ9i#cvF$adPBeTv%0qi
zY+sNulLq=hxDR%;l$VFVj at C=(5_=Z6Mxj4cuEw*5cIjR`lV-gI{UvgF1U&b*drsk=
zr*Ti4)cD`(MSltRk-fv<^qgo_7L`*Gz9TE<rw8)<ZkJOwJmaX at guDfBJ_VneY37r+
z46nH=!7E=K;CEK9tm#OVn};=m-?3j_=%-W<cZw5`YpBOMiGN`F-Jq2re<Uve&#|bG
zF;-DFTda<^cUOnUiCKmwc7ZO;n63*uImdiY=~Li<&)EZI@&-HnzglrU6!xL=p%>TF
zLz;FYhD<ZmmOyn4NnFnkO%it+r3S}A<fMzctqR?nXK-W}410U2w<`K%i=>*VQk_$(
zt)uyS$sAc`%e$nt{rCapv^VL7pS%d1QkM>aQmyPaN;?AS0;(ML96M7rtzY;Vp7~;H
z4*y7<j-7AqDmsBR(HpkPWS(zaI{Mh8<Dm|B)bS8?P=j^w=>pDXI9SKDPrzG$44%RZ
z`klz`cI26>gfAoPN3;&}$J?NW4nxQ)40<-1v)v*0Y)6<VuI$yKZC;yNHyIqQmkf5J
zPUiuP%TU;odg04>Zaw4XyJn9+C486Ys|W0H$;EsN#-u_wg_DunjQS42WIe|48-m3N
z+^jLpTe?!3x4?&FOGhTK9x9m{p^QAstAIau73670YjB5vMvfx*!QP}(FrSE>6S^KU
zpLGmZ?`_meO-`kLA-rlUWKm}HsPFMzES_(JegU+DI*SQ@<2mQUOBQF(YW3{%X%dSu
zl4 at 5ZtLH+tgnu61kwfS*a0BGnWAtQ>MtNE}d~kpRfcKr^-d8EPV+`+jmX^(X=%PRy
z at E*)3A at W7F(Q(}O4cN^}K(FCP{aE?YVDu&SLc`!*$bI_-=yKfym+}ej#0R84=tPSN
zk7iE$*1SS(Ztu=K*Yn9utFxz#eq3NethS;|h<LnkRtbCwDeQMr-LoX86*XRbVS~@>
z6#=6L=)GWljTH3$6i4qd<#oy>RFhySct6N+{0!Bf-0y!5{#L^`mHa<^@b?u}Kli(H
z at OJ?G=2V#5D~T at 7(8WJd28<<cJ*X3=@dUIiZw1kbVa+`!OyZ3MPQfVnl=un>_IYK<
zB<*_(eh2T at OjkjN9rJR|Ns*zO9o9j;oIdLNL7KEN3AvHbB?3<ZcJc(QFX1nCF4fJp
z=~t+J)mey6-x|!OzsxX|!++G5)a{@pR$I}w7pqUYO1hzI2vhpHRxQi?XN|uM*A2t2
z2|kl}o04`uE~qlUM$hr5Q1>XrjQV*-ARjOf7&EwEThH at FJpE&Py}@Qu4tsoXli at 6I
zksfQ)3K_rA>+_i6;h&SWMXww_CFf$@t8_u3O~gQ6j)AQ>tI#fzd^(w5YwhBHv%$gm
zs=8Z`=>$fpE)e;MD}+g9xljJ%=4K+XCqTdduGzLM#Vljzs3_!?^YI+Ti`40(`&@o0
z$QgD~_FXJ;hPyU{mt176qvK|F&|OrMTVf$2E-yqpOK-hSPjz@?p0l<pw%%c_6k8Ej
z*pC<t*cEzCx at O2KOj0kq=MMDwn+sb1>hrjlbJ6FIj7rdJE`?YGod|J}cY$Xs67J>Z
z#a&`cVUfq#SWorS)dn$S>hFx<R5!f=ykxoVZsJku29*%}6Fqi7r;_+G^x^-69x}%u
z$2y^B6 at -V=<iJnBj<xC(J(aufUVJWfib{(@+%I(Qz?S0sgcYsNqaT`L4|S$yn-OPx
zP0W at Ln<+GaH}kfZ776(+tliLQj5qX0LpSCa1-<cTtFs8X_ at LvJgZ`m6Q*Uln>b8LX
zfe~nUjFRXBA3 at Is-Wf+0hyBrtYewv!hu|-N4m at F`Cu7}GB!u4`^qejTRYiYnAK<Z}
z-%?UNq9o8x7~!v=yW{HU*h1$NI<S912g&i+$YF2#C~gSf(&+Kre){W_$85503-Xw;
zbRyN{ei=U5JEkWJjd)kM>D{=MxG(CtZ**SpFIZ?eP;|l?S9AgxV{sf0Jb^|$j;F_e
z>1WCOp?6ZFK&x0+8eHEmBsQKhThZraEyX(G_hPj1G1Ubch#+x4ypavAza=aidFr#G
zKIlh|Mgix>b1wJW0sZIahxb!w&y64LFddrA=|9_%&!<%G=H$uGI at T#%ef_>h?BM6k
z+74y at M))7 at gHF0ZFdlsW3XKdh+0j-W)y>FPk^GM1wb#vOSb13soi)}9+-q0zKCD^O
z%In{;dANBsAU`V${4a-a4)}u+*msMYwOo#-yCFX)pEo;o@&M=$m at 3?37mUw8GWfj8
zHy7W~2RSE=a?&eEJvn=r`~aumOUM=Y9>^PP)I6RIJKl2xdEG9Yoly*Z8Gg@*H}1$O
zxmL^`hL3s5pxikI|CbENoL+aVpVLXuUrZSMrstZqT}1!&LI~cYBbbF<7{_lIspbui
zXBc9B+bZKf2ft#QM+(;cBiTy_^R}I;Qa`U?F3D=3^C%_XE)q1a>I!_3<Z^a*-yh&)
zX!PBe;?GEZq^=;@Jje$8=R}AfiA20CCmZ`=k2sS3z7W17aU&#G%75B+Rk<`|vq{c(
zYN11Mr_Jq683Cun2_f;XEeLsfBE~o{jn^djvg}91>tCjmR6V?8O#>s-ywSP>vd=o;
zAj%Ez1g=3lGgLiB<cM5jgH0z1cs^*Gkw<l!@`4 at oh5#+2f=<OJHyqbk;XdpUJowuC
z*SxVRc|Zqr?ugF)IF5}t!f at Ou*SVMB at YGivNq2$FMCQ>>YS(jFN1OSft7-zIz$Ms0
z*=ZU+>-***S9RH~qJLoi2(7n at UVvU$$SYN%O&&7|Z%$W0x2D7#g#5H*OXHgH-L5UL
zduK!+ioMX_9#hDB6gvcYsgp_0aCQ8cdgvp-Un*1hEp#<>v)N+AYv=70E>=&6j`R_o
z2i`c2_!FZX0$)vUa()zk?MDwFCUs|&)cixib1Iuj{nkdt!t0`rnGe!81HvGK_O1~j
z9zR`7 at +3VbGKhyBm>4|dJ9&xdk5<2nHKP}?(>>FY@*fV!CL_ecSwy#b6n4#3mjhz(
z&MZ!bdGtgkA^DM at Q)|z;#p$%lQAZEi$DqrHtaKD|dByH at 7gJQ+5Nj~_s~y0II#483
zZ#K4fYzavP)`24Ad`JfR?gi>9XNSXDB;0_t`P5N2TJg_X|MhN at fz$LxR60fc>&^5f
z3F7C$^Ar#{D`y8?41K~S18|u_FvnKUp_B5XXyDcj((X4^YMm|A8 at 2%Me%*eKcZxvF
zAZ)py_5YJ at d(WV5yZt|O+sIwsK|j%L=lbY!aGnD^IOti~jk!J?{XYW#?P^9`%3m at l
zd=6(?JeEjU#O9N@@2@<oE8a^F9KP#h(6Q0RNZqrM at H>iIBC!&FkWSEiL+n*Cdg^nJ
zBu*cV^>=0|&BOZk2tHHxnuqzx%@6r9>>nw*V at qG*@-(_Am*`AE at OO-X?ZgA?yJt07
zw>e$%1=yZnA(#Mv*9)^D1A5`iO`KlXP+LAO41L4tg)zs^h*X at 6Jrd_%i4eO<zWd4l
z*e@*v?+UVi3!a<U1R0gCEV~8V$Xl$NCJgd*JE2e78#49~LZ4jwIA3gP!l1naF;46%
z$o?rr_6J>M()$J4|Ju7eZ50Qubt_n+qaFc!AHk$Uj7?MAh=trW59BHyyw)1GWKoCG
zdr_x(*3~17J_vpiXshd1Cur3|d_QAicox`7oNexCAMpkK%5*LUHa&*tS7}6^)~u_|
zz3k^C_UBwF^7a+?Y-ajF|DPX@^SCECO*Ju at npeRWKNg&3`fz<8@>NY2oF?*gG>@k*
zD`gi%SyFvaF2u12$2=VKaU|f-lQEAT0ot7mAAUZ`!I$wG^o+7-Pcl9xIr37h2r`jx
zZd`^qTi}E9=krRvCSw1SX&(z!+Fq;~HSoLsk%3Lq#0=YuxKRruqpAfpSSx%G6Rad_
z#k#!O^6Oukmq+tRY)b1C>W?}3FTCvj3Fp7IOXo}Zk^G9-x4xoF`LF>U+zcB+HGECV
z%{OPZVn25Ma3D`01)IY|!S#W)Vcn}5E8=hWFwG=3Y~~+A4Pt%#DqhbR30uVMfa4QW
zpiA@~ymvWlmt20YnSWSk&HP>a)S}1GW!4Pz<xmrJEnJSTm_?_HSzpkqM237%Gw+9v
zYH+{d&2!*;jv<HIlQ`ibrWpIxkPE=3rHvD%pc5bXydwTSCZ at r?_Yh(T;dg>>YC|2!
zvyFJOG}O6>tMlKX$VV76m+&)q&WrfU0-wSgJXj!+Y3^(l<_qcu#*#OiX$IbB2K601
zgKOizAsfabA7M%8Xkb9dX8xOwK>Lu-v2eb*D<hqkM{;Y$%mr3KCv->UOJBs=4tWf@
zr?UCgbSbd~RXj=*UUT*;BrH!FW#=u3vI!R&O-=taZfshW&=w&!F4>b7#fWP#zg5|~
zfGqC|CMmCflvK+KD6^$`_Ata at H7mOkWXA;sM)u0<z+T&mdS|OTYY*#Qi25ow64<oA
z2KEhu>@4ny|CMJ`=S9&RkKlFT?0g0Aw2CXvBQG8BwdrN2@(j72K73+lYoklVJ+NO;
zh|7QttEfpRgB>hi)q~%?0xIAxqm$TaJ?Tdk^3Qw1kEG~7uP at Zpljo5K<g4=V?KY+a
z at u*+GPm;{5FEF=P6y_nO++Hg$ixn*gZ<2~NGB*Da;z9WEkFQ}WhB?Fust3pyd>h~M
zXKnds^1=VA2L3}GkTvx>Ro`FFRFY?g!&ejhA}=}ubLnJ!0`C`V4(N6UrK>I9<PDyl
z#8M;I9LXy-vkmokf-W8im1xUC#A<1CBgh<M^!czKp=9#AxH1nkF%|PjK}CvJz@|P2
zV>=sq=s5*><>~J|!oJy#`fkR{FmG3cHNZw%BZR%SBNg|=;ojKkEUx{SsKNi<DuS&6
zyUWZ!6PMz*Pgp(vtBMCs<=!jgeqwXKHiPImNq at n{1$z~a8Bb!gxpnp^_>H=(jG%t*
zdy7roneRkJwuKum;kb*V1&0Mkb8EQ4i1H%Jy*Q5I_zK6D&}$*T8kbiu8(4#{@{&Qn
z$ZNL#SFB?MR}ZwjdcNjW^Q3Vv;|L?`DBjt|^Ny-cy at C8-3vevNv503O*b=}&xsCO|
zANM at YN)PJG$_(nsN(tg(%o&oy4E5#Zpgz?&GvgJcBYD*`T1bp+R1Fh}_}C0yb=K%I
z#FpVa6LC>l$kn~rbUJgCsVQ?LXMeE|e6RZitgAMh?}fcE4Ch^g?J(l}u30v22GPZ4
zen9$Z`b>;pji3PQXJy4Z$RD?{DVxDq9c>g8o7kpRrj2{j8a$SLe8Kkewcz?1J at jMD
zn`WcZa08AY&Vs7ac2?1B=sv1BUoMXZ?v~+tAuyBK!hG;ADA%YuaP126coV#{D>%QV
zMUDe@^$2&XtgRi`A<$uy`!KF+?>Si#zqgimm#K_mtK{3<fsgSu4pXWIc8!1rXV>R^
z3-~)vV&80&Qe=Ee4#&B-27ZM+b5hFAd-g*6<N6EEjxoq(mx?2vVE^HW0Tv$e)Us(f
z=HL*+KD+PPR7O7B0v{dZ%Gy4)Dz4~SX6YU+s~lg^T5srLl=zky9I-fN?SVcL-!Pkd
zP8s;k2zu_-h}BFU_++u+2POyaScLn45zqSL(Bl4d92usKZm%@B#(V(3gbM7PUTDKP
z%$0N;$gxYEz;Opy)?p3qQ9>@qBQUCl4i%gR?}ylJ<BvSQ%)R-L+oyk%xwpa9^+tp9
zNNa<8tY3rk^W_cB_r^E4bT&4)@?S!I^HJ9?IG$^8rD(iIOn7D3kcP-k(8Xj8L=0aK
zS<6lAEd9LRP`?KEhgW5lwdG@;3k8l+d93Ees5rH!V6*x;!DjH(XC+uW{#qZwgHPQE
zS!MXQV=p}9e+WCp5YSvS>g+YW`^N&=*WjBif`7qQp)~BR-T&5Mx)?H?CnuNPsgiHs
zr)LWFdaQLF5vyt7g7*Rkz#i&H{Wd2@{RivZ?rZM6dZ_j6cAxV~iPI?F{tv;S3R~aR
zJ+_YNnmUZf8R+h+!5?YaCFhind9qsM@(gdSFM2iB2YN$ZgX?E+TkGkO(`_z_>7R?e
zgRA3}A1m49={DS>jaQawJFXEM#fWDG{b+Y0&lc-Toe->%RT6)oQxh<*@|KNcUd#ed
zW0p}^=a*-R;Dg5X+2G#1zLK|#Zb2N$OJt8*p5=K8KEr9cm&~%OhY+Kf30=T0&?I;s
z*BX+G7rqzokbTa(m&{Kx7R~)LVhHxG+0h|~e%(g5HKql=qs#){FJw6Cmx{}3GL~;%
zaE<_`U?A{yVV}>pha;y`q+!cz?~furi!6B7+`?_Jb1E;CvgO1M37fC4q&uGM(}JKH
zCNHSEDnU0r%Xgd}|2YIBP>&wAd_{xP&53x)2Jpa18iEm^{OkI?|90Jn*czkrXa)77
zxO{b9t^9v6_V#g2*8BgssHr%|<qh}K%3LCeBBc;fAqh-V*$o?$38Kf1MM`q9T`W|j
z((;@`a8+V-D&?S&$5z?m&d$l>F%?szi87XwF1$n2bQc>86yf`PUz;7z`TRb=$LEhd
zu4~ur`+DELZl15_t0aNs7|+y~_GYg92;-s9EgFv;<J$>W9-e#hzwTGgW}1}X{C`W}
z7PX(W-z*9nMfBem$$KiuG>9vIvl{Qm_rXW3m0n3P=Gj7*vt8V%yw=cc+ilMZtRwyc
zduayYS>@$aKCU?`RChsCCM7<wN%1Q*PUNsY9secz`*~oLfX5K6mW=iCsE}vZxo`G{
z^~cDY#}3;j9TKOaZtJDO{ktAzVs-<k0sBdRNLXu(1hSxv$buTgj5hlj;IHUk-BHCQ
zCk-*kA4766!yd`Y&-{Ezb!_EkD*i#@o&r9ST<8IhVbfg7Lp_$-2EA%@i~2oPo${lB
z{d+V1R$!F6fscQjQR|on<9lu4d+O?MdQcDQ_msTMHy3=0e;DlqUn`H<I5F7}=RHUI
z+Gr>GQx&)c4v~IzVzTL`w at xuXDB-Whd-O6XutW6+eSMF=7BX%VZ6|%S{vbFbNI5!a
ztbr#cWBeNhE;>jT=&gI^YD><0ss<%880Mfnm>W(^77)D^&w;<73uEw4gewu>xx-*`
z;CcLdirk(3Yaq*w(j_y<-Ps?A+ at 0gGk9Cpk7wps}Hz~J%zgPLD3$nsp?4R7LeBBIr
zf%6{UB4LV}{Uk*8Rtg62KIE?*&S2idf4pl8el?KqH7_rYI)O2GnfQyoiVsPK?6(N^
zr6am6i)@TX6cJ}4Wfw)%^?_$NZtTjFYHnoy9LA{cTcm1n+aj3VQIqTLWCgXj&qiQ8
zSrrFMwrfT&Qi_&}hLdrg*N0y}es}OgelEjyKU<Bw6}fQ7KAJxzY(?FN3tL+%vm+L{
zRa$9xNrT1@`dbk1tH-*S)Iaun+9(-LeAnoQH)<jTo(+L at cNU&%s=B*^;snEppE;gG
z9)dosf1RQe)4t34Yqb`-jh1^6 at vM!~OT-^6DsA>(F&p_T7itq)ien9Hf&`x9sz2S!
zTp7=i`$!D?7oU`QNG^rYbVpaAd7XVvIv)#6^tnTXXL(_(K>b*Dnp^dA$`IjTu1TiO
zkXV7J6Eim)Fghv1V}Sc_Y~b@|hIuBb^jyoLSi^CpkmMZuKRgHc$R&sE72p>@AAr6>
z>`9Qv7p3-ur!x!GALnliORYPH`fArjjClX46;J5nve@^z1&6CF@~Mg7_btl#SQC!=
zD-tq-D%hW#j^X=$O;9`V9A;WZa(-c0a@`5sfAo69h at vO6o`^O_z0JjBJ at Lc=G0Uw;
z)`a5T48kM7BAIdvd)T+=1&6l=)Mx_!@6RjyKRwSuxULt)7J}>g?i|I;#3yBl*;ttT
z?|Q8v^@U>#4j=Q?2XOPSv8C74v at S|<*TAkOcx^`4q*i@@OI~bYU2fHu65A3^`SwDW
z@=u4ia*9X0#LyG(e?!`rk9N^&Lx$rI_urc}I7dCRG$G5!lU<;pNUR~Ss-0-dVJh&L
zIbO)?ccA~0Jg6a=B<Et at -C|W3X-6)EoX0tSA9;t!K8ei<S<df+2Lsn=NNi7 at cR!Qg
zhb&6&<@dowgZ<?s#>n>^4ZrWZp5OOf&+ilNn*Zis?^Y?nSMVj~&32v({0{o4eNvHr
z5d86RX6 at TUC5*$v6=;T$ZzJ&<Lf~h at D@lKrxM7QQ3jP&oniQhHOWL9?rFu(AP?}3Q
z*|w)gG1VmAgZi^gHPI^cC*)A&77ChR&vbKc_80C5``a9;z&7TT^fuut5!AybG1p#s
z_gCs(&0>;MLwZjh0$CyroIDv3^~>IwUL at XA+DrK5u%5jS{)ZcUd#YIzw_xcJx<Swm
z;Nnl at Sw`D&37+-B`nA-M_gT=Pjf88sOwT1b(hUn2I*AN(0(cGeOPWDZiKB}P)Q%$m
z;peF9lnL$fh>zxSGOZ&s;-h3vrJ3ocA{>SUs~>Gh&_o;c52X#%rm#J8WS9q!8BF?r
zEhYE_ at UR%(_j06bcep~>d*HaWfxmjl;-)TJI;}$mZ3HhPa1n0rww2beSIHDj^1s at S
z^~dDx49m71b8WC4>sbSQtJ>5rUXGXz1Go$rJ+Q9TgZ^^cF^kT2j2035wziDe^<b<1
zfKfU~eAf@)75l}~OkJi|ki2+OVD%v at uSj!)k8;>{*{t{EkEem}QqhiFcf%M4Ib2}J
zDgduU!S3qIhCoB`cG>K17h+9;v+BdOz}P6-fz at d4R0mMVtI{NFxZ#q~Wl-dN<=;>a
zd5&#xEdVDkd^QE28-mF<A82NOn{;09w8*Pr>u~x{FzN><7U+MoWbC>B{}Ll3`S(7v
z>dSp~@OT>Hr at Zgu-!lR4ia~utUnOly`1g_P!sAjyC(S8`9a!q(F>Vj at KG{R0eS|it
z8~I~h+hx&(;3f|yIg`-Oera&Crm=CyP3RK_^shmZGYL5Eb4-!x>lg_*JJTXt)U&|-
z3cIje{}KFLIx18DkrF;9;_r<U*F}#ouLaHa?8qO<_mR8_2Lh#c!O!o)H~cFqFnSB&
zrpk=aJdSrOgbkz|TS+;de6So%Zmikd7Au|Y%UhVw^Iuo-Jl=bC`(mVJ-E>mDJ4Wf~
zaxK)2RL`jHav39!t0Q&o@(AceE3^(KE8_4K58Im=!I$k#aRn*c*30TAB2PR}wt)xB
z7QQiJi}<}8F1f`J9J4CzFtMc-FaqdUZ087 at t^vFt#K-XI{#~kvfS-y at QS$$5 at qY?<
z?_$A;eVNWK>7`5f{6U>q6K*sZ*STMwz+R at 8B{-S6PaMvDw%PykQ{HFtar)aC%x#8V
z`FPl$llS$5r>-5?<lCKkrc1ou)@3o;x)AsHGx#xX%t;oshZDIn4PasLWq|*}&5TcM
z^dBj8qfZucYW6pC*2mof1 at yKwU7VQYCs`<UigtM4$BYNZ8hkXWe1Ru(CGh>S**pgl
z;lU4oKKd{?FNVSb;SZT>AGUssPH*|d8!OPi?9w+op1xFt{Hj0U9XDbYd3{th65$PI
z0{pWoMFXi*Utc{7pF!s(5d}Lt;#k&zj}RO=F>3VFcLgq#$^9Q?nyhFeW5OWi%anmK
zP0T<}myq^ceABFMp-Ots99RJvnVw8y)+y)jJRn7|vAx^6kmSymd{<o9p{LFH&xaW(
zF8n;WYx#L>Cfnm?FPfK>{RW=v8*^UZ^Wa?K<mC?FwY$9Y8FJIe%iG~2M}D^QoAI*f
zA0UTz6TG#!+z=;!DePMOmlWdrVRsJD42N8WoCl;oB46fssxu{B5QlmCYSeJj$Ia*9
z8_Ncc&}rNVzngb{8S0D^9)aEmEPqs)co*!i#+lu8gU*bx)hP>Rk2y87-QN2 at J0v<r
zc(%d)oAm``)rg~Vy=~|W_+c{%PFlr$Ld_Rc)fn0Hh#zdcrwKiCJjgIqGS6o1{}T8^
zCA*(iS)0qVtj+7+!Ow}`Dg5SG+t-h0;Wx9kUo5b;56Y~Km%hUFavYOc8}2%-4MV4}
zuf~>KmtpN0DxmL>_yD8vqnBuvV;P;*?58?K;+CwJ>CCWy98caeRHCvCwSLL&;+7-s
zKRE~az1hx3*B|b(6yv|-a8FDL3tw;2X->}m0^6cZpD&FpRnf=wYU!--*mYcJ4tN3x
z{`OE}W5L{J|IFdQ?`Lbbm#7X`aVaEElqP1R>hP|B&k0^YGd{R5cTv+czgozqT3~f1
z3g-%*s<X4b4M*59#<_m6aW9(AAvb`jVA9%qq02kEIWyIPzV|NL&QJMVzSE+93Vc4p
z8^yJ2PdOBo(=ErI`pt5&?zc(Vxj}ReY__V>qB$h~^!4~_zIox?a8<%f at D~wG{M(Yn
z3D=0N4t7!KPgajxMr3)iR#LH?OxWk>-beD_x&(jMxEsV39XRFyN84SOjGByGvO}Wv
zn49ewlMll;z9QkD>W3mDEV{8S^(bqzNf!BuMK{J}UQ=LiO5VB;IKb-T+JN5U%IUp5
z^Qm*iYDX8-NZ;jF3LVIkIzp#%bQuD}Q!UD}Ul0 at SvczozH;cwrc>bvy;Xecg>i%eL
zT$N34TUs)ueUeRo@%Lv2dY`%a$<eNodGrlIiKutA-0JCBV6D22Tpr8^tjnMV_l=sl
zECxo4%Vw`~S%hmH`zx$n2C~hub`{EOzXYU=+q8ILoMX*HqTU*1`CGcslXe&U+x-is
zoQZl^8qy=9E^zaOj-Hj&*VeI at JlyzzDa5YqpXF!{2oB1h)M#y6nx+}7O=bOy>6s<q
znrWu`g7Q~y&yTaH>uyeZ-}-(_8t{@PeUCuW(ZGE+x=<CH_gt}2-^1)29eZUC^(*kx
zRWV7>+f`H$;%c2Ip at W}PmDz>v&{x1w_Lp^!Q%?O9_y#|F{ac|M9B6^kA?PW+bP>2m
zKYP8A=hT94@)^WfO0qw4K?Vycm>0d1{)(Dg)8icT^!$X=7US at hlECPlnL$*OC5gR^
z`%bUZSu684Te}XaTDIm*)m)-YR5v}vv;uMq@@G<m^ps}*q15x2ITe2$c==kkUXQ4L
zg9cWsbe^@5ek`<VQg5y^cP?GGW^hDfop$sV{ZjO&j17zgJmBbWVSe^ay?z-9fAh~l
zOqQCI_l<|a2i at yuqk0jy<v(!CP$Yjdc_<~;+Dk8p at 0F)SfD;Zp0kKpgZKT}(vCu)|
zHWh)3{UBmj>w8X8mq*P{bxEd7ql8U53sYI{;n-qkw7u9cy7gpLPh){W&PceFQ`Xum
zm)0|4Sz%97yXkvBRboTZDbu$}GO7u6`VT+3WRT9G&V#G_orh%2V}}nK0x?$?3gfgp
zhS^xLAv2%{IHmV`?ow9{Ze=;igdM<37y?}qDk}Vy7Cl`M-OdEEl?DwPXjoRljIfs&
zMzpe93|V-$%<B1VK`DcHMi*^JWbn;5>z>;7Mp8!0yLknue<V55qizRAmi8tECmL{m
zH(#z29DAv>J3gBl0-wUS^z$2B`}c1AOxSe8mCjlE_avikmC+6KT;#nXxQAz>iy)Vp
z<|triGS{8cp4a?b8^qq72S4PQsgP5LrFGK<IDSgQ;dswHIrdu>Hep-GRf`gweah`I
z!nT&H-{g?}cYh+sx#Tn#up<RxT}LBlT-=TLdpfGfV5(J>dt&628|SoQ6JossrQNg|
zd;o_uH)>TC_s^{qCw26;Dt+g^*Yww^tOLILip1$Hy$!&|^Y_^m?Ra;4OU_ak$(4AG
zCAJ3L_c1xq4W)(Ps#Qe0OBH849O4$eaXh;3vDP5RRK?jj+0hLoFV24DI~l}Y?OY$-
z9FtDgn+n88V(v at 8v*rf0i`I}_H5J!WvVl`q9!ll}<(IjQ0!s-)??w*F%95h6fA)CT
z!Q!B>+)Fg;O35a+{3!=JjqCu<pOUYH|F*9DG^c{C&M3;Ib97;@B(_^52>MDFiky%-
z$`qz3N8GRIpCSQeTH_L}UOmyT(Isbl^+)r2 at XYS8bn8`ab&I`c>JF?S<==5~MXk$^
zb=B&IjX}JWA(w%CJ^ZBI77#W&YOJCurKG%@lTW?3I&10x)|@+{SE{?YOhbtIX2n^^
zC#PUv(OZ<&o!ECUg(HdrmLc~`+z4YXlW(#F*4->_4Q<aa+)>ZPK!$u$QNzga>^xnq
z at 7ZoHW@<m4jrg&O+jzFyxr98s>X14p)veBuw(@-bV)n92!a5v<XFVkh<nK7$JCK(v
zaL+CNo~5kYxv1IG^9W=@5w?DmJth;pI-(rt5y%g+_vPhcIo>}D&tHoBXC++l@=cL<
zZL5hIr7J54lzs|Xs|NB$4Y!Kji0`S43S=*G4)VUV0ptwqb*b6PnyGA$Kk$%>Lz;e)
zN6>eyqf|Amg~TNmnw!T+#wQFSZhc4)Ji;9noNz(47Ji;2<h4;kwketUBeuV+&LTdb
z1d=P{W at j>c3w`1;y%2tzH2&UeB~rqnJ+mdH1lKYAy*6OEVdK`FEntvS0X}SQP})Se
zx?E~%8z%`kN9+o~XOzUO^5(V?jfBrNnRO#y;Sh52x#<%0H&(<<2+AFg`U at 3*Wn1TL
zLVF#=xjE`5U|+u}+E3O~$7R<-hn-ui4HNCbdtO4`TBG7~(spfn_B(E6c|CVf(IkEc
za#x17udprlsOXC+4uYkE41FrRlHVU%I3IH%cwBLOFkCvtfp5MB`Hh239`U!Z`#xh}
zg!9Nal5qY5Cy)J-0zUZXb!Vf3%G<bgWlAm^<&7)Tav9Mh%^N>+Vho(DVcf&T>9(J@
zW#O8a9PNMpCa+PPJvPL=@wo4Nm%n&-$7{5i;KOXz?g{0)I9Wy`M<aLnxuqw_ctKtn
zl0Wk<Y-isV8_~W7GNwk`VWZ>18Hd}s9OH+?)}p^Z53Cb#RIbciO;4sip|t^PA*GQH
zr6{g at dX#pLMH$bDf$QVeQpmqs at l4ELO<AJcxDxcE<G_8 at q95&qo}6huQsy$REjs}n
z_q`eUY at 2gQSn*S<9G9J0n~D$vrsE_P;C!rrt}Y$2aBsV?KQK%M94GQk0kizIg{vU>
zy>=t62r<7Ex4q>m^OXyEb62qS$WhnA=_~Fox}d$^mzxUBREhW*oBkKn#V=2zt!HIa
z<6XD(;c43-#{*ZzzQ8?%n3VCz2ZVeY{kI`!ifqyz#BTN^BQ{l8b_aE}$NY1d6FGgI
zovrL1aTd-Yh7tAi$w7Mog}8E8XD7QK^UQDH?Cs{3Vy#q^i at AjIx!hyrM(*+QWNupX
z*og=5{si#Cq+t8l;TlUOwvQj)ZOO)V8n`Uve4T&7&!J1_gJagV?iX3aQE^7Zk;2n)
z_o9Z68zUOa*KLEZZmXkUI}m0dZ{i%1OAy-xY}MF4CTM~#=R$vc%cW#r!+y6YF|m>O
z2AOo-U$Exe$$T82ZhEUhyYni28tc~p>3d~cIf-_aISc(wjsB+O``ZBen;ZSjgZ|db
z_qQzcH~u{7Z)KOc6 at o^Kc63i|IyL6Wm0HIY3471G2B7a;Mc?T{UoPSM)<4j<?8xVM
zM6^xuHJ)(+bK5DM8uH=`e!Uo%J5v-LU04qXtH4(R|1L)d5q+Efhi`uRUNj2h?>Wt$
zS}oP{<Pu_|`UvlrI_1bk+9N}*u#AXg@@&j~?Z9u1_ubbB&WIzp$Mxh&+#~z<J*eXc
z?}5)#h1^NhCoz1SZ$T|-4;p!#oSCTv$GV5~1JNwl*+)~2Q6>`4B=~y2@{f7G_tf*{
zdlvWzH{qa{Hl+k&9haq@#9Ddh>HO$<h at JkIJjBlyQj~iXcD`oW_E5p|#pTC1gG0|f
zyW=pe!hYe7V_ZHkXOF<A{V4vI;5cd5jV<jpSv!E0qu!AO3eMA$r~=y6>^c2q0#~PW
z3`!J4zToo>z5y&U7gYqCU1j+mE@$SZnK{^I&fGXNz1+?%n|Y5)Qtb2Ewoz}(Yq$~5
zhV{j)AovAc1#A+#=^&y<ll9(be*_1=T;1X6R7#yq%D3K!|Ds{P at -vdt)K0keIWc?w
ze*T%<zq1}%gn0R^vO8$wH)An()*S&?xA9GVopNihIBDS(avXmAgXBNj{Z0J;xWUMd
z^Zox=Ea!dIZVowmY4`?vG8eiUlr4HOu|Y);Uv`V9N2M8vMV`?9$ynba&?fsd at Qqg-
z#PhZYa&YWv-iH?lAAShN!5tj`80!VeDfSV6J|5RRqkz373i at Q(AkKA>vNR~))Qi)x
zE)bvibYD3h<*ys?U3ZDR<M-<%-uJ_|?&c6bj=tBpfA1@!(Fc$hM|T11)|2#NL0!~j
zrcb0Z?%KbLE&=}iee>K3CvYSj at a69#E_09xw0?RoyRlEF>}clFt+(%KfPY$)_pR<B
zy}P7H(^FCqcF+<yV(@riwWl_j;w-6U{d$qDt9zOCyOL#A>%COR#R_xN_qwbOHEkZz
zs6S$}x5-}mI_!0#@7k)m$^Lr;H-{V>6A<ItKyV`9ou~x1h?Wwc2W?(l;1t96_fP_I
z9xM-n4mRcV7oUuMA~YL5>{)dmEIds$qJPvznIP9ezZI24yK9wYo)`s>N#6uL<58il
zu5aOKMP6+(>v}pXtPa0^@V|2m_=+%2eD-V#vDv^(DBoxb|AoYiu%3bOd0&&55s^-R
zCxq4y9A7iq^W=)AK1M0MH)(FJQ=jGKIfg%=i1<u|O2xM^nF&n|&#Z0<_%3Ns<VhRc
zzpHSbMa^<zxtGVAf!!Z{)Dsm-HHlUuuc)S`^Tbab9$GDR_NdstJ<4+A#54~e2E_zB
zvq?CQ_%7>yEp32L at MnTW+IO1xNGIk??+`xM;Y|{u7`BTy%He0-H82(5`zQRS$K;n)
za?5L0-TJuMZ=AKXs4lK+0KUiV;EJ>C|7^InAW#t8 at N0n(IR&rl*Am=;^tPy8(wS0d
z?aIzbMI2tm8vWR`eokF3jL!kqOo4e%X-*Q$fkXIgxF!CJ5y9fd8t%kTz=EjZi~PwD
zY}H(@f)DWQhjS6Hu$=Bg&Is84>V92QXYHa>J3KCB-L*A!QpB+XleU)$fIp7o=dL_5
zcab=D>0M4)K0!Y|wOe0^e8axB5y0nwzOZQyd^RC7)Gn(g?~He at IN3D>oO_G{e!TM%
zk|PE_6-$3efg&#+91jc6OM!{He=YJuXi1DC(IvFUNDc~|2WJgAFLiTDwg%fCa1ZCj
zs39wvh(6Uk<^w0son>Ow1`}<B{1qVW#vJUS1H3$BQK9Io8>B<~m6wmeX9uoA`c4$_
z;S*mW)qwmYy3a{I60~^}@`c+ikA}d$GUBO|YRYbYwps}NUd049H5DsGVqlo>AWHIR
zan^`N^Tx7aLgl26k^&O at EvTYHnwt8R*5*|OO~=T2OYXKo^Tz67Q70x$hwY?^UM{Gb
z5UY3gk93Z?KFT?!WS%BqH|oFGNU4G@>yZOT)f4_ at l_$VFB18N+zRe(rgPt8M5hNlG
zs>zK!)3GSeSc0n<F&?^Sd$a!$a2Hw?C3UUKsb3C)cQPr1I_1AWb2lj?@qoXi(Cxz*
zeU!Ab+4IJ*eVCsPfgh7{rmO+h%tbkq9)`Z<WIQQrj at uD~)jsfa;&c0z1K$f>hBxU(
z$NSv!N1hsHOI(>W8oA?)0l>EuB-NUzzBu(#lG`H|dij1F%M~aSzfC%v_%wKxJxPxw
zYKH?G at y0^TYpO)!aa9?7Q?Muh4YAkph{1kZ5SJt!%^jZ~;wjlawSm;Jah at e<#Q4Oo
zlGG)=No=#fzZDqw$4cswCQ)z$CC=Tiyf at r>k^esk9t{5 at VZZ{xzmycx)I}?sE^^3o
zZ_YwneQM|(VcXa%2sCxVPR8#u<4s-Iclp_nX(w=_kycs1FIH~q^_M5QhGhuqh7%sr
z3kHKwf!t^9CB|W at M1yahG2`22C&>~^;Zrxkr at jyWA5F^I)Z?qygZ#a(8EDvnU%yo?
zh@%U2(JcwF5mwDhn7dDUuC(d4v at G|VCaUDO;)Wv?2PbV4*x?JmQ~Db5sh_kv5kCz-
z`f%MX9NVg^Au*wMfiDO?rTa!$S<`uI=R>`EU^#D9gX1S1IF~+hPMhu>OUT(V at ttQK
z!{2$XWs%=B2JtY#r%rC=`ts|-Qp-luO7>WRMnAYACSXEc?W8TP)l}mFEjv^a<mf7x
z%yUYqVQ*4n9QloX627-Al5Y*;2W8;;6bHSy2C52vbpD%aA7Y)ylRvm;8TnCFHf%=v
zqf}ALhS-Rlze5imcGBL8oR7$Fz;nveFC(9`xgZESz2BIridsAu`9Yzxofp`VzoG%Z
zdgyW`#Que`?O&^8kzeXh;E086pk&YLH5k{JU-=wL>vcjew%X83;w*q$TS)XLIu<f&
zJJSW-2y;7fkk63bT=#gMBWwYD2(k8Ig>GH8<r8nbO}}RQr5kD6FSRP!4Z^m49`3Bc
zgni_Wfy~oJxG1O)(fWY)f?z&>;4dh{%Op2a=P@=P`J&e{1ub1F6>`g&3ld;QF+v|&
zL-He{jB$u-j}vGJ&J3|YjnFrjOn3`<el8;JXZzmWf-|B)>uAF5(XXkxbbU$HrA{%*
z;I7_^GN`d%EOZn8b=_HTI+eww@%MK6?yV9H>OLfVNe`6&RlfX)%Ru>ae=on0+)o9e
z4u0Y5V7|8w7}NpbAb;T9uk!Cc!oNHB|L5H^|NGsj6P*z2E(bp<_E-P@?zxCbR0F?H
z^z9(zjh!JC%4gfUP8GvfbR2o=H`Z8oXlf4a$n-OmJ|Akc9HqJ}sb<eA=Aoa*&#6{(
zhtMy+(>v*O>b(D8SbuKYqI=^@b4mM$@W<SthQu#nud?wu`-X!*AVm1Te6R7y|M*@V
z|Gmff?_JG*FH>4XHvj`ysofo$314-P&WP_JvicR|BEAgS4>5ymuk)XfBeSsuClPYK
z4}sI#1y1XBx}mfPx=$4+A@|}LS at 0=|aBVVV&85I;swy5Pav!$ou)n*QEadW#0h93J
zrMvL4Ivt-OKk4$^ZeG42 at -o&>_#Z=%a~C=00=9`t%8t;vz(A;`R0G at 5gIqrza9OxJ
zZ%|I;pt at WTi1^U`@I{^Z0&}0>fF*hKA%a&BO$+Nm|BM$CTry%ysm;3Ah at Az;x<p)u
zo0CbnS~WWaocdFkzvnWL>xhmgNWt7JgPsTZj?Y1fe30C6tpno|xv>bRTI5{)IdFH(
zTY3jMte8nfxp40yw?$^8XOc1ZF8Piyd1MdvIbgf6#*?*Imj_$$_WkBR%uxl7=n?5_
z=v&oe?T+`}d9L8z;nm!aR#%b|WnM#tAO_%7^4<c1bG(q?)W3l3Y05b!1>5%M7XOUs
zA4-?!xxuIOcA*(#a97|?$Vcs at 4g#bBRj at VV8|kXTHt-ogjF`+Zm_z2WXLC=4O5$E+
z-{DS#uFAc<=oFXE%HvIKaTP_@>t|ICCwDT8_y%*i5v+15^8N(8Q0?TLkmC*PFB~VR
z(y8dX^d#VkW9?nVb139K$N6q14t0mP#ej~OQsj?cPV7NwlVV_Rkf-R8c>!@Ti-}EX
zoC)><C-(x{VMl2Z-rb3E-;peiyEsh6+F at sMIKN^&&RS{6fuuPzz!&m2e1lnB?z1UA
zY(3JNMU_Ma5<e8M{m&vkbspwuZ%$0)au>8Cr{@?7vLj?h=)8p?1xBKC1VvfE+b3$J
zE+GHJOZdL_8V at B$Y|I(t{7ye`*?K2 at 1#*}@Li~w at W3D=x_6Ul^h>4^<>TX~|zh>Gs
zSBRd?nJ9&BO0}DI(!0S+e1w55nm_+D{6}rRat;$z at pc8@{K at C*Tuj<1Xr%?Q;`+(3
z_aLr}`ZIjO9{jxZd-;E<UpLo{JZgagyY=O>rN at H=UHYtbOqiU+6ul|r$4O8?V~UZA
z(?3H6&4Jz_Y?1(1$lD@!F*6lk3Aa=4-2Wdn$uF4bm?0L#bbrdS-Z^!Y^uajHyUH^j
zS~<ZZQL<aPb-*Vou=dSF-3Xzp7y0%_Tk`h&jQ<6`|BonYj~7hpVi;VP?%M}$f1FBD
z%M>)7$xlYP_8DSf3+jvtg3r<jJJAa!2jT4^Z6+K-zwJQ1u7l6sd+s;n*+P4oIuEF+
zGa+B)_AvVk-C`-`rDXQgIcaEDvw`qNZ3Z^`2jO;a+mE|O+2P|tJPP}1Ocw0!83OQ=
z!-i`%<O{b?0fruRh<r8}kM_>wimTw9b21ZwDO6V5ok at hZmF;q7+HO0u`20b+f)e6i
zAmbN4oJybldA+VymP>Lu!ycSU?DU&mf>f;}MWH(>;W4MM`>O?QnZZP+#=bnk4veKo
zV)Xq__q_u#Lg6{SW8k2FV85Ne7hJ7AA9kB))a;{#e+;&}t`vpz67V5w>BWkJf=?B-
z5_7ZP$iupi;n%;*1nSPED5|$OllZb^3p4)LXZ$Lk&Rhw<Y`cB;1zj`Rz;EPK-D|6}
zbPB|V37N^j5TqlfIZ)uTET(wQFVQmzoam)^<U!@_6=&fuFH4!Y^iC~P;YnB#$#zOA
zE;6r1Y>AN(yDQ>IkRzIWKlHSL8f8US)P&h@%Jimg*ckhfznk<?f}?3IG;1#~CyAV7
zu*us6BJ;*KPt}N7Azdjr$d>_ewtV?$tGyMRLZWHF1}aGT1P5WyY+__q#Nra0u<kFg
z6U>R4kkHDgfEhJL9F<_M7xrQfhpmn|DeYtC>4 at xF3H<51v>kC%6BQQu^w~!&!GChy
zFAp=9FU$Gg+uQU&dnYGwF;Y@*r2lQ~ib-X+I5X$>(FR|8q{2^)x_sy(zCDJ(8H)Ds
zwS~7XE^*3=JMk&R##C{M;0cH=m}`sY$hh49*<U}D>vVfFb?6tW*$s5%eH?=MplB4q
zA^hG4t_gBm?6o=7mz_yVJL{Akuw9iQKY_Omqef}_$Qllx9(>!nACiKYKC-U;-i9_q
zySyFvmW|unMC)fHl4~J%9Uyi;Z<$)UYID+Vd7mrrh;-!Hf+o?lDMQGw&D%i*%b~l#
z7AjUCM`1H_MDQ@|UEX=;E72%{iIf$x!N14Nf7jzOQjcW(yutgqM&|kY7i<mxYu%@K
z at 4?#F6Do^70v!j~E9U6_UGw9AAAd#gDOTp44h?qL18R}8_2mi0A>;K!=z~|Ic>W~q
zfOsYP{Zi(hNJrL(jg<Gh5DWRG;2^;U{?C4;xnW+inZq-#L`~2Dzw*W<5)T4<m7RMA
z`R1l#8;|Xyf<|B)#zr0^>(7R1Og+9&S;5_}S70Pmkcopc9**2d?3r|BDhHoru3#hP
z8FwW6bV_8!)61ic(388-4oAeRq8aQXMq~b7(k|j+$Ww9F+E-;c*Vb$d^I_6*Z^<K=
zUh|S_SEe4e;#}DLm+pYAUe|&?c1t~reB;CkQKKSRY$ua(i8{05nTNe~#@r6SOl)ox
zY;Nj9kR{bZnXm78abk}D>U*3ZS9g+(cZos^?#+sGOkndE(FCl;$;=gzPP<byO}89#
zkplg0(A)1wedMMIPm#9e`|xGVV;2dQ=C{-bo?(&#i<qlu$qUz^jCO%Y(FWPVgZb}G
z!pA7nV~r*F!y>PL5p%}3j4=SXPAb?K$hr!OefYGrC%y*8V_W2I$e~8*2$dE-EX~Zr
zBsPQtCd=>V#0Ew#Xu5Kj>Jb$q_Qt3Q5>^{LvS2DshFl-uiSzm~NB?`w5kDV2S87Ws
zOtX{uzD}7w5VNeMYgTrAD}&r|OfcI_AEJO0VA7EjyzAYZw81*%ZH!CZli at 4K8dUW2
z?|n27_!Kua$Q?m>NI$4gCBErg_@?9VEK9gY`Y+g0D=kT%xz=Q%osGaE2IiiE{PM*W
zHMqniRI^$PY}=EOZ>q28p1}X3>PI7!MSq&ssD3Q+1#BCDksDH9(mjzK0^i_M;5Dd;
z_yK*WrBecV06JPqI_9Nx<~A^r7t!W%(D#B-rf!spd$4aZ4Ekmz<bX+9Weo9m#aS=5
z$%2OTs+0DL&(<}Crl7wqL5xxi-`{RCvWO!j at 4GWg@HO!_fyaYiHv~(x68=5Gh|LcY
zv_aQU8efGx8;X5}7CfqmVVXm1c02w8|K~ldL2mAQMFaM)Fypb`r)YqlxshNk3yhLu
z%w!7n!7d;?t~Bv~X7M=4_sRS_VmbJ74E$K;kPm_IyEb54_k#xqF{IQcMxNLxdL{sQ
z?oN8FZC-hH!wJfQIEhV=Y2D5g#GbrQxO%}6xheh{+G7y$jBVjL(78Giu0=7hqb`Gv
z{V)}*o(x at Wc4WEwH?%`C`-6H$<Py=JFc-X(V5cjw4kgFi<-xYwcaRTDoC$e^)Z at Mc
zPXD5WB6tMiXNf9`e$%{U%MCKd$y{NC+?u+k*>Bj8?ql^@-CFf4krg5ad4VO7C)LsT
z&gIk<vfhKo_?&R30kM~xU`NJW9|{`*%9XO1v7yr|V~CFUFH&B#gAF{%4Am$orb6&N
zB-iK5L|=#hbkOU!WiQc6e9Oa{A%6U&hiw&v0iRgO9x2ewE|;y-#`@-W3pio179qx<
z(qQ+lBY(OM95d>NI>on}6S4zov&*FJ6%8p91 at 8c}(Uke=g6;<8zOy2S_HU%UFIIuO
zjm$U7Xa<~(_C9&^T=Uwuu1AeRE`{N`VZe at Xj7d9yvc5{%9kST{b at Rx7uA84sN1ryC
zjhhGY{GUV)fhk--IPRz(V!M_>4&t;G{pQJk><13 at C~&K8e{g#H8&E%INiH+ku4Rhd
z4aR-Pq5=u_1o0KC6gHI2BwPV}M)KBfd5G<H|4T%6Be>8Cr)W3klw{1&sj%zp3asS&
zZ|nW%NluAB0Y)&F%&Xdg6otT!I7Jg31b-aj+{AVwr(oVQRa_D!3aY^AxLz`IX}9Pk
z^v at 7*O=MBui;5wmN-8c1FW@^a7!J^t(LDu>9~Y7#2nj=sVP-CQ2I|MC9SC2c`#AjZ
z_-pV*tVh2XB61*IADvPfoYxSRL#`v&llH~+n5+FJkaf50!FB059*a|HyM0MRVhQix
zlfdm&?(=}}9yTFTpN4vHQNkY-U>ES5=;&iYw9{Jj-{i8vbu03E<XyS0b*b<Z0D~-e
zMKf5sA+Ie|=C?m2L_dT%{Rrt>f{B>d!PP|1cO0hYhZ)qfQrzkmx<;>wl*X$gf1^&r
z&iStCYs9u(!W#CgKpAlaW91cEk%;`vnsz*6oqATJ6n&x%oT@)U7W>Grovd@=Vqmn~
ze&Agm{x~qFnf$Tm5#uokjsjpgmd8LJzsvKjRw2)MgReb-zv0(m1M)tbaBNW|#ThHE
zXXMj))RV;C`r$_P+8Gs*$rCPwWatrdT=6TlUfPZA^?->lz`pL~tMrwzJ_;O{$R(fx
zUOAQyVty(xYL(FG$E$VCV?t&GG%=-zz^e_NJQ;Sq&_h?aKSmzgZ+;n^n3xaW7Puwp
z<t}>8v=eGAbfN{3z_C-e;X8%y1l!PRZN2KH9Ul5Mat*czab79>MXf_V8>R4H>fCCN
zAtmw%_OGZ{MJ~`U*1dH}NkytxO>yGbfO>UglJD3IQ6JleyuEL6Cib5Gq&BF~7MF?j
zk??8{h#tqe%&?cj8{?MYSRan{`|b<D|Eu`l<@+Cu|5xyA_+Ef{LH=0(jks4r|FY<w
zHbK7_<;l_}td?P$jrDi|whC<-u6N at 4-*Ejc(c}0I7Uve>zJ;bi9J@&^h+B^HcI;mh
z1z0_OvT<Xue;voOaNLIdcK*I^G5@~++{s9+{~BExFfqS$&JQ at pFx8g|UX>1Trt*I=
z405V2!?OnIzru!-Em#Izp&Ijk9Oma2sDCo^1c>#rfcv1 at RUnyp0`sc}bqpLep1lBa
zuMXQKupO;o?s?@I<Y8ICoQG_3ik~a9nf>r($8jqI`swW14Kg)9R}%fE?f1EIyWwl(
z<cNhWjmO)NaTquhV29o0PJA}zoTG?I(J5?xHed-H;2k)F at qzC`9?OgJb+)0~qnCVw
zZzgqo$6|cTMdX7TPe9j(z_8o~CFFyQ+#d*Ek0?O*nOaQusUvj7nQ4))t2<3s)xXex
zEwsmKAQO<f9YTJ=`P7J53I6kK9saPj>s4?4-ox=!9QVEl at dB4ps7IIyu#dogMsFte
z5#~zfI{yFIN1xFg;q4!)h#$tT)wssK0>15{`}Q9q^Ss;w{SPwTnkBH;-Hpq5VgX{i
zKA<z1!POrp)|0v<9Iv8hW|wpNfPUFJpM1v<{&BL#5UjJt4Sw^{7*9_U{6C{))wGh;
z)2bQIiPm{#M=y5i<&K!;>>k8~?W)*??UKX013raKIjwn2$$3Et+A2sk9lG3o8Ism%
z362ahd8}|=KnBL?5xSlqr*lR7VS8)CSlr33!n<f%)d7wl_FXyy_ChCh_h2vbwr25m
z`JeSNT<6pb=hxrTu<ID-FW1VbK5SpHG_hUgZ#fd{vIO_IjRn*NVxxOVAJBxY-^z0V
zRh)u-*)kt|EU#2^-0_;f?8q5?e!}+LZpSmQjTY)%8+L}Kh?jM|$C<6}Rwc1#77KyX
zTC+hB%GBD~F_wZo9?^d4g1#BgokD at jjQR$;2jg4Q_i!R`dTAEjCI4Y3<=;Pi4>++m
z1B<tg<+u}Ju9y{z1|fGk=^*wH)`-&m=JgG{J#Qmq?{)Xvlf=?Bj|rL;&=j+f*z<sm
zl9ykm=LD!l6EniNWMKH0R7{RL!0vG#K;3`sd)IZms|R}8I?YV^D>l!mqMGYFG-I3A
z<-AfAy68NxB%^<>byH)+3z%bGxr6zHj3rt06DNK0#y9#}pS;lkn|i}ZHD_k7l0Hc4
za`;)Sx$UUCmg;x8AFActVPX@<_^fBnir*#}5-;YBu9xnik at uB8wC@Z})`wcixf1FR
zTmj|rj|cuE`OLta%ofiV+3{FYu}%iFN9aRr9pMju=r%cjdtgp>i|1XOZ$&;Htm9)w
zFUP!a0x`f6R!JX%tqb<Ahp5A9%QAA`Vyt(F{S6||!SNQdrp`Wswf?cpT%Rpzq at ZeV
zFx$)P%9Z%GN<$Ua*G7S!iVOEh?#d#bIP9x~TG%Cc{a;v5d`AIQF at G4_WVC_5b(yYE
zz1E8UDZKz4?n0}H!g$-rkbO0{{fE~?{$N&e7uBywuW)iI4?diJ$XCGjY~bj*hg~sQ
zM1~MFX1szjPGY<1<6(7kWV%D0a_Z%cLAIQpEt(hM&j}H3f(}rx9bnR7+tnO*a7yiu
z7~4aLWpM&O*sr>XHT_fcp+fBd=B90;M94A|nO;#b<ix=Tbo$~4>?zA(Ps!2NJx#b{
zUIx~E<9)r-YZnueF&IhKY2-;P2FJUy`fu{-1pA}sQVKi3KYr*kmw>f2A%SC<7Eeu9
zJm)e|UBHhWp;MkX?ivkVY~>EfUpR+$L%I5aJNXIQK5UPXI2Z0I>RQwk)B&U2iayea
z`Sl$pHsYa}tOTwmg8hPU-b)l3$ZG5xPZcI`^w$Ktx6MtbC0x4_!48tRK7M^zrh845
zk2OO!vjyu%w`!g4V_+3ICiM6**vp$Yd at eAF#FBpb<A}|B+ at KOUC<e0Xxo`pG^YKid
zuvgHYIo+U2S*)ldb^-=*mcWU$z<$*@POG~B`@Rjb<klD(GBDOB=rg^sYU&htk}q<B
zyslM+Hvb-akx?Xu|0z`fd|z~P&0^TTKaXgJ4ElAQ^6=1aYPJD#Qv>ia at FijHdzi#j
zC4 at Y^xWi2+OK(JtivNE9F701LiCB+k>(+*UNAwQpePlgMMVn3m&r)&pTeU{Y{!~7&
zV8)2IggZkcW8voz?o|APc@;QKC1Ni}MOxsK>{SH;Q>U8Q6Mlo@%s*5NLO!+7Pf<vU
zZt55AWR8W4rIYw_Po&;y3WR?!cuN!N>269P*5<5u*axHELX4U{^Krq?sGsMAMMVCj
zLIfD2xYs7yEp;;*^qnkSGjzrCyzNqsc(3KuP*M<VYgyWJ3~ArF$D7a&4R=oIw#KIm
z&Sy^NpW8*+;{G$i#lk-Wb=%EMRx}WuKPDZyb~mwI+yGs}^ZsQCs!*OGd>h6$IN_#{
z`sQW5IMI447-Q3J78kfWBPuQu-7Y)_x;Nwp*koVh`$Mp|KdhIL{(yF3$T{24MH$0|
zUxwbC>c#cJP6_^zhvIcIqL;#+M)cBD!CmMS9^{_VaSEb~?{Hzhb|S9S%@knH5K9k}
zm^|oV(4*gck?16Mw;>-5=`Rv?0be&N#D=Na_eE!?429o<&Fgz!PaYt8GS?@l!?#~1
ze6f&qzPev$_kQK;tkqX%F4UP3anY^d|7%PN at _o;IZ~fl;6 at FvzSjLlig4oh!l#`SP
zw!j|Peq6q?q~9+K$|ZrW*heGZ4BrpJ1XbRCuz3;sftx`Lps+o<-n?XMKVo=Kd*Aus
zHHIPqVvkWC2j-`(F-run>%m5u4qKeB%}M#8=iX(qBU<G7g7zvUJCvDE$_2koC118)
zrWEz}!1ruSzW+TsU^*-AU~TJ$PxnG*1oVED;P3FeyF_0I8h-!&jif#KbEr4isAakU
zCK%<g>$XDohMsM6+~VWLFemD8UXF315LB5rzRfjh(bl?=4!(bckmq2IBz9 at oyy$x0
zTJZ<3%?o2T!)2sC%CSv3nA2Wvrz55sS5Ka5z_E{WT5;@jc^5r>>Q}2bYQKWtqDS;R
z-!D2`qX~A8{UDOyWv8R>Jf<c%;cM|}#5Sj0D3Ixz>B7Wbe{csNzra85*WHi;ZJ#MP
z=WF{Wv^^u&VO#}9G(+cRgzC~Fft=(RAh}oy7BF*x#R(DolmBkJq1Wr1O1lPKN2q@?
z?Pho)+Gr_*F at d@P&X0f3B74IS>0_CU&HEmqC-d=y)~e)akE9UoyMoj!)5grz_Ax=f
z*Xeew?H3 at cE}SECY~hd#2Y!P~DT=VOkiFFE{JbIfxYnp|<sHO!9j+Uv{~#G^7wgi0
zc<2asG;HtFa{3qeR^5cFHvEWoEAA^*uN_-edxY(UUwHujLE at kCD;=;RKE%3!Rz$M;
zaDojyq~yRwkNknqIsG!=Uvygzu^jSR4I)qMej}rC0oVMk(TFjv01vG!@<*|Zzt)KU
ze+P5Z9irFbT9^72jf;QB6V=FTfV>47jPn;E8!H6$zqi3F=)d)n7SV2uhvk}^ME^va
zJtSGoKl4lCM<X0o;kyIuF**FP{RfV)P9g&!H`Ul at A7MPm8Fx>-G`hJ~$;Y=~&2RRb
zr;l!~!v9R&xG}2P<i07-GxZuy(4cV%{)w?skGZ80 at s$iX>>70!YP9SnfkE4+rqYJE
zK=u+ikX>q_E<miVeu<WY6IBj>#G=U0=VY-SZhlyQye#rJ5vOq at Hv{3R0N+H#bzdL%
zjq%r8$QTzGF~+weKB0jjaR4556vl=M9G$bU%@BM|uc3 at +>#YTWlAqOUQ9p|!e<aT$
z_Tx^u1AH-P`(v<ou9e(X&q}>Vu*`#U^y^(q=7A$)P at K&4O0pHT>ZoSF)$_2Oh3%7w
zT|v$XeDe-)9mmEL8cq{g5&l{)c7vn1hGfcvIrX++nXVZ!!@vC>3g#2vm_5w2k-3ri
ziS*mL<fjHPJ`}|NkNh at qG1`+|txELw7r`w8TLkg5Bn3eynZn!w*DU6{`}5cvO{k-8
zem%%$?vZu73U-%F9ccsaTp&8;vq_Kt_dEc(EF;E9<`#lIhreeo>U|1xHhek1))?{p
zhX2pGWWs~bKw05G_Qo9h=9*$~)ZJ$5xfi^CPJ at 0?r%Eg75d!mHP at 4)H8+#mhpWlcK
zJSh%1QNqi`&m&`}0kf+X&Z$Xi1<%QWsT6V}?YmK&9_B#|a9m8zOb_CG2UV+d<^rSC
zMeL$C6(fR?*K at M)E9k%{W^Rruf_|}^%t?uV?Yv95!k^Q<ChCI at e&6qut^3P;J=>z2
z?vkl}I-}P6O^6Y8$#^@yFXm*UH(rSM*Ao97{6(Udh~F%p3rB7+XED)J6%!!KBDYrJ
zuYy!v^Mmgc at cG_!f5F_g3jT`&86OjQ$+op?UEZ)Tjg2L-Yfj0bH^EiBwL8tmULmn;
zznWH=#qa!+&xNM2u{X&vhiQX3Y9G-B_nM<VC);Fydvs5!g3k{*{J!lMZ3bVk_MRwF
zH(9b6vgKLGbb*2)QL*7Ud4{8_q89eFY{ccNP21#pzn+i`<V||xzP-*nA3iNdKUjcy
zZ70SZFbDg0Ej{iZ7Tsf3zUTIza{pQrbO6N;eD at V_gl3TIfS<n1q+!e{O*YI^J&*x>
z{u}t`7nnNaYMbY_+T`&0vyKqo5Akh~xFy&k5ue89iVjM8;2Z3tmD-(nMz5%E+!*Nm
zeZbs%u{CHv(r;#6HM!&&HqQ-GH;>&f6VbCe1`ejOA9{U{y2(Ud00!wOc@|=T at Eq?r
z^7=OMU+sJDa`+-2!Z&8UvH!lmO+3Xro at 01>=a=;<g~Sfp;+d5ry;GN*J_!FXUq4=5
zPhbKzCnlw^#WNvCdbcil9nR|}o3r*gVPAcc*lVVMvw`T04Mz5l`^~E(FrW66X5{t!
zhm9536W+FSEcyt44lzLR%kkgZ(@A7x>E#ropG`j{&laXJ^s3}Kb4)h#Q}}Y|K;v}*
zNkPDdd}t`b+WmC_e1*Kdh}g66{#nOhW0D2jL2Te4u~*XB%rRnX6pvcu2nWvu;*xtr
z6EUVjh(E&QRNsW%r!985Ix=$ceH)MZHvQLyLy><}|H}I-9>H_ebT%1xu$L|%<8JC&
zVk^OX^nkr4v3~W(6nyN=px0i5GA?HigF0qV7ChU{&rQTHSKu9kqimW%pIxj)FjCPb
z_);^Cx8I<T&?;SKoEpBDY*Qw<f5$NGm}45z2QFg`{)S(J^XL*XH#U!X>m<wDz`}<S
z+<!ukOUFh6+i_Jijcs)0Af|4?IA-B`IB^kwh}^DMMeD51E5E|=RP8x^xz&@D1<Y7B
z`g7)#YD=<X5ZJMMSYP__oEZx at Ot~T2+|j(r?7J>!%8k{};`(LKS4clg1<tJ!TM4$?
zwSRW0*kI9Z$js#V8XR8`cL93d-POt1Ps6b+_Nps8>>A>~4d|;kQ67 at R=mxe<Y=6c5
zQMkTu(W}s-lBaZutZ_f%c$+18-yr`Cy1bYB7G*6U`WBImnBDyPKgZtCKbv3wuQ2NP
zK|v-s2q1r1z;D9IVCz)F{|Y_U`Re_(LZ|)R##J(IjL-h)6ut{Rx)S5@&LTHti6Q^h
zCyxb~1q^HtLE?PM&Jg}@bN>Xdof&%BaxLVKaYc(>)xBmhk}~RkSX7F#$)<Ec_T|EF
zv7Ul0+MAp*V0t+8Ak16;^vdn8E#}uTHPfG|Cu`RO<=ON=d3p^E_sau+-jM$z50od2
z*q5N6mI&%dKiFz5Yon8xtMXB(Yo!BrS>4x#?Q_qeJ-aQc=s^)TW$Pj>;Yga>j5>C$
zPS!3Z$8mljTrp)U>i!Yz-@!R2WC>0X=+#+D?(1OLuxaK(R)TLP?(e`O_54 at 44G)z2
zeM6JuyM4bh^~eEZ0+xQ^Xs2GO-Gq7cHu`3JOcK_y9`-VqHuG>)5!qrLWuDk<3I4N7
zzumVc<r7;DzwSlC=JS3*kS>$2gEPO^!90IvX18bz6 at oT~-Cv4vU4DjE0wbp|Z6=%+
zV$H&bOM}C5LxOYr;aj;5T*;_-sp;JY?W!>5Cyc2NFs7bmD+ at A{M)F+2bL?H~(}=B`
zqD31O7XOFH8c)&UVb8o%8x!D3Opk6cD>ru&Tl2kaQ$vGR at dV-21IJq(`j?Als?+H-
zaJtWDiA>Z%)=AR;Fcw{~jVoy26QMWMdF7%JC0M(iydJpRmUB^Uv|t?K{^l_SRjj)p
zlkmRbna1cJ>y*a^Gr at lX99KJR5^=m8c(yk7cUv&{Jb$;LH$X<LgbbWvh;2yW%W;nP
z%hyYX5uX&9n;}b&3AKN52|iyh4%En8=It|wbg!XruM%<EI9_ib&&ytwu)n4F<gTkk
z?y6H-2fcFF>@CWbKA9^lEa1MaIA$~{!vk{ScGzZ&``mO3Fc2;OelM_suV8%l78k)r
z_(Rx1!7%jQ3_%sjuo6D_S1^V=n2X#Z9o8?{W{AFoK5&bf7cr7tQwsd*7oV{HVTi${
zk9&R8ruXP;@CCgLJ?<1eQPe}9S6Cjf5$+G)!`n&0n<xP9+5>f!O6m&rR<HSik5 at KI
zVXxk|nf^Wi_HUFs?*ZIw1M?k`!BO at e$OQRl<F(LdA&;Z{WUb}P3ha-JpOY at jbuFHT
zY<@1v15eA-t>dY+^FAna)05c4^pBzT{bt>b2g>-V{tLd0#AeZ}{<yU0i(0BFEXVTA
zp4XZhhB6j&*0E<-A0IWsGcBF?L`r*U6MS;&5$#b0yictNGGkYd!q(-I*=}D{056((
zKMv2}fsgkm>-w|Pjx(?K)FfA6ZG;^WYbdxSz9M*om?Ze5za&0tpKV75+*&f51OIX<
z at h|f>Cu4l8&<$TF$=PbGxRXF)0*?wD at H@Jh$)-NucZgUDa?ZTb>o;W9ql_{E?Cu56
zdCy1ItJ|&ZZdv5lYVf`oWszTHD6Ci9vKbz=%G%?U`Q1d at 28T)f-p2O_hb?!svp0z!
z=f{JSGIED%l4+ at aN`7xBj~!-!SB%`G{@B|7s*K=`A~&jc`u3+ru2+BH+mDYdR*U#G
zeKXqreS%#O5Sx&PZ}+2qD$|bzZJT;w8#N-fHW{(CO2pP`xoM^rGRIE*6><yg!29<u
zI*j^QMd}0VMCZY(f*{vu_Jae%to_)&j+{34uzl-*pOwS*wFATEJWlSP<PTl3fxMUC
zuWYvmw0u0<pMCF4#ygdGrxx$rf_UCB0YBV--;09#@*48K9^>ETC%xl+mvxYT7xG_|
zcTI=QZ@)R;Azp|+kUinKkl1J=e9H}(|L*eg2K>u{35qt9A3Vy6cElQY-Am{3X+M$U
zuvdVWEB<f8ZDB<X+ONh;h|T4wVF}lC4=X+sr_()p6<wFISacxDFa8?IzZ~UnD1uBY
z6~;n8^4a!yTz at 0RWD;9X&$p_avP5^(6vQjXmAWmR|LE<pv)w&atSf4~X`5vgb=flE
z8yCS!2wtVW3irUC-2q#I#4*~UJn5-0=l8)jQ3R|?Lye3w!3LL351&*n2zI#Wv9O1&
z0DfY=pn=D*yue?xkH@<J>qS3~GAzY*I<83*SaAOv{B=g$8$j-Xzh8j4d8}3KmbG~D
za$34{IUR~y=2W*}J@|0INnDpycE)G~jzM-@?;1Dyf^N!5J@{hu%GD;0ejZquK=}5T
z`{uwABxmMK4~?~j&H={LK>b6ULS*r>ILuez_)zTfUuHdoIk*(xJ3#Q#BUB_8b-_VD
zn at _LAGr$7^e+SkEM at cWZ#XE$J|A7w*;&tbwns+~at%m#1U)tr1Jt{i^TyoMBOaJ>H
zBSuJB at 0kVrMet8`cXF at UhCCZA{U7}T-DtMMUh(6}V@|~HgsrhvcgqDXtK!-mtL6$-
zlkAE>4z9&DTF++sv_QRId67lz=#BX{3V9f=P=b-#HrV4^AtRh(NY0}}#T!NA4S!$)
z5f?iL^KXp3%k&cAO;uQghe%8y=@ZR<#;d451$<Dz{1F at p#-4}Zr=FHMs<=MbCFZgc
zKCX_({}Q}Gstd=~z;0i~Ir&(-GygtMo~bK~hwnlEvJ{+mc<wn(Kjez+7+~3)#m!@;
z&yYSua4Gz`3j`B`7}P*gE^ir&zr@@>QQ&Dv-gjDbo!~a$d)W><#Mr}CF(i&5(9-##
zzhe)#*mC`&aKGOE+=4Nk+JX=+mukPRrFtVj|DSak+~PgP8A;tY`#thk$sM{7HoWWT
z8v!TnXE&WZc4>*A2)s;pc-~oWUG+fLU`SaI2lgVt=d26Pv!TCl6^5SN>Qn~UTV at 6=
zZ;AfL1jr1gy}IFLEi;2JpHQWHNUpy3p04lX+jv_I_uli=jQIJ~HQLbZ7xFoE&HCca
z<*;k{g-nyWQWj4E{>jq+!H38*hc>iot|iii-g1V_sHu7H`4?`Y{kPU6ckin)8tQ7a
z#&jB7*E?n*N6seP_jgAZ*Usz-H{lyK_xBA6zJ9lc?{|}ZIoYm}e)qhd921Nr_tv|=
zFe)1G{C?EOo~U3$0@{Dj@#Ig_S~5cyBYvyZ{OsE<>yy{!kU28IW~*``-_Co_OEDMe
znyu at vhB3;-#(o{!TcT<@)|16Ha*IO}JA)8wnYGW4L5>4(T?`?fYtw`M5N+)3hv&<>
z=oM4z*N(Sb$9I75a;u$IRoQ at Bu+xjHZS-O_6?MXUjrHZ$NsxE#c at DPy-nbF%*NrSN
zqx*y?FYHHD&@da*M4Rx88Nh2nF9t at s>9=I|95Wg7U~uG*>L at S1PS_*uB7Gn7=8YJc
z!|g;42iPNT^83ga!Sgqfu|e=?k4S-k!gqfQd-H6>gxbA*bc36+=w#qkS6AGCEK|<R
z6}gbVZw-7N?;)p0Bt4OjEpa=g#1B{wd>s|13w3y$3w1{@uawu|efZxM at ICU8qJO)z
zkcS9&(ne7+;#qI#j{=vt446dTra3Mc`Z9bqC<m)?BTuS{^u?GL4EKl}2j1 at KINz5t
zv7^0JnL>1ZVCgaDN9fM+_iQ(mppJm$6ZFC#xPio%(vyha1hT}8X8-FQ0zT$6Y7}*9
z|E|&1QKN_-rP;6eY27e97ct at C8^~Hj<O#wD*^()Knb|JoQYz0 at a&0Y at zvU2aQ1~Eh
zhNA=@GQwv1F at 9-H>xgHms=W-`Yb`9PwrWZaTGyBCJ1*JmIi9k4=(uEr=XmmFo at cIe
zH#ktQk{l+aTx5MmnUI?oxjGRSd(zXo06LqLYE4oXzdEW_SLaZaRKx#4uCGQsV+zS-
zggH7n9(f=}JZtxG$lo#I*+u756n4ZvgP(+6<O1Ks739ZQb*s8YerqQ<{Up}z>%Lf}
zn4AQAZL-ia2XbV<GYQTr#Dh!HN5qQ1A<w(+dmiQ?)E{)6Ub+(Pn6jxTYQm=8Im<{L
zlKg}TT=*0o8#gB4H_dObg&jekx)h^;j8F*q>%0aWKZr{x4C{>H*K-^Xfxj6xUf3`6
zKD-rT9(f)H__QtkBPLs}j~EAzE^`6$E|*lp at 9kogDC2n&7cIRaxAE;gkODr(8`)ts
zbFvZhu_$~EnZt?SHR=S<Mf`C}8x``L!gQACT!`zL%(*N2k<-v`)}I1Az(`!=x&rQq
z))5_`?nBM)MNaqty1BTDe%Mfui#PEoxW1g=fOA_$Nrx<>#<=#5qQ+SCpStRT4-ddb
z(XdkHTVKbG8xs{sFc!qWj{F>ZwYP|D9(n|R_jKT6!5g%FJ&EhepACHAc~Nzo8~)sZ
z7;sM{!QS1y?6A_Z0=!UJI)8JP1^kTRx5TLek6-(aSINBv<x;mmt?3bcR$7`AEa+x{
z5ky(L`1pJo;o04Hn(W6*%77(k at w}d`xf?zxb(JE%y0uW79iQ$!{wCpM%OJKY#Knxk
zbNi(OqB6;U@%fJ_27f)qjP63*+JshcvVR9V_C_YF+5cJkWLJQ>{0J9O-bSY$Mh*+@
zy1J2NXIA&*E5lL_x5p$CKSTh=P8qPG;E_=K_#+~i0daP|Dm3|UGjc7o;eI!r0=|f+
zu|^)^G3D3DIK$XhBQE~noJoYwHsF0mt=m{Io(d#<q0q0KXj|}wCe9-HmjBHcn)o>Q
zLW3Do^(CG!v{cdXy!`l9;KR0*27a^|^XVr}O~PR5J;+qcPTD8HH{l9lw}Cr!Y&dUE
z1>Zo<NsmAY4z`Jc_n|kFxvh)5o97g5Ae^G$#iY~h@{kF|U({}XJ8V((Q|nHg8FepO
zf7 at kb`)X>PeqZb!@mg3)ep~2r%w?K0qq`62?_oZx(;dri3<bXp;+DXL%n;qqLvlsc
zDycul$ZEL4N=cW<P4~wru)kfm0x<`JA{PI%@c(@x-x2I4kp*l+nD-zL=sqWQryT9n
zxA<JwOQyb=qt|^7UjMk9mB@#eH1#`v9uGvB3sbMF$9I5-KjntHEu~v+16H$rDTi^a
z=j6au$s>&kU#9hoKi}%+5a<5bi=#sh%qbWb(x at k~kKjFLfNLS+KYHG}@6U|-aW8Ib
z&EFoX&Z`T{NbUH&J`BIthwVS=LyG!X3Jw>|nNbBb`b*$QH1qXAcvm;&oe9gtwglU3
ztT(U17R%QYsUxB{8SJw6$y!u~`pkERsZkbp^wAJmu0U3!yAb|vzB6=p^mq6_LOwm;
z9$E{`!$xAy#kM5R6_$?etJo53gPZ9Rx=|nbe(fPe0!L^Db4*@!vdN;%H-;{bHcV>I
zy)h{^_qR#&a&J!x%I$=|(*X_+aJ;b>LJIU<*q#S&<u0}z_&)@h?q|YT<ZVw<R*G;)
z{m4xA>kY}s?GcQeeOF$czb!Nw{4LrJ4<`qfQAss}6V??5y_eSK0sn&QGV+;Fb^i9S
z45kMh-WL$-au?h4A;EZuk?O#I7q&kqWH4Q>Wa=((8(j(6Xiv4x-Ytg at 6uv3}erhGS
zL+2CQ);rHR9((6mrt)wly~66Y@$<Z7i05BLUIVlzVp&PM0#9xP4 at d?TL{|ZWk)d(v
zmtl at oO+6+~53A8nM(kK}+0C4Bd=5 at vGn@Tr8L&|@fhR``tVxFNo|pK0n#Jj%Q*%ET
z)L9<ic5_ATj8U+2_wV239C<)&#k`H2;+2rAM*>q(xx$Uuy^B0H12!P=nDryBVq=~1
z?htUwL!xTr0Z4x9i at nLCjsv4tD%v=1j90E05d(SDLUI>CW`I^pg%q|27z+vl-ir!_
zKR3rwNryWE=|>z!I at BSiKh)d~9<RTL{JZ9wChFZ9JGHH5EA at pq6W2YD>mJ2*({bIi
zww$}fhcOMgr<9NMW@~jn#Vl<0e6u&tMbFLMtrA=9J=tM;OW^35+?4#Hut$PQ#>eUp
zzPv27JxlAG`$;@YpyoLAsImI>;58w#Q!&XMVasu*VxEIdP6yr|`Xz}|w1N8BGM~B$
zT;%CX$5 at Zpr2Q!-d+pA!bYM10sBib1`wGQNXC5;vKXRF~-gK3yrX54Rup#pgd-}kQ
zcSo>5GiV;D7&QOjaGGx(z#Pkdldb*F>s8vd_AoVa%qVTrK80=FJsH`z_8-FcT~bh(
zdoVwx?Qn5~n;;p!nFXvzrCn!-F5cUj&U%8!=eo at UZ=S|?baDEb$8=Lfy?Rx7E3Ity
zf2JtFPOy&^$ZOT3c&RlkYb<hHk@#3{IQYT>=q&0K{ji`)sijuz|7`vcc<VyIf2ekx
ze&^YOpqiLlJK={`vP~BGo|^@8$J!74i~YnROZ4cy at pb=9Q9?$T$j9Z?Lx$*gyztI*
z8(>QdN!Amcv=Z{>yNIcAgCB%&xxLFYKn58mXgWS}tLJ#qXwM7<;WGKN&{zp9>-Ofc
zX at 8P*o8R8*Vj2SG$gkS$Jximv0PEf<*L57 at GLo+njD4tv=c5|X%Or!bS%-o+V!LWZ
zdu&qJ!q4am#dk<<#H=@k^%4%8E5MTcv7hAia$<gN&6IFxgL>~gK<0y)u=~B{fp3V+
z)8?3E&;{3H?5o+a$Z6yxvMU*{uz{L at i$I(p$@!vtEBpq}U)+_XqFN#I%!prxb at 6+m
zlS-WMX>~mgES1m(jG at iYs0LO_oedu`u#J=)zL-Vu-OH?1CD|QY5z}`8GD|n=`25q^
zqvHs6I)B-W(H4o|3hXI}jU64QM(*eQW%O4$Vv?i9a`sko`Bm;k?E&Zv<1$0AznE?3
zUg2#~o!%Jb(jv?&&+gx){=P<B(Sx~V8x30=^;v=ka at oBabpe+Gej_>^xr!(1md1eF
zCHJyp3phDM_}*CXXvHF5a1)uA$o#}q=FbVswz~58xk+(8UIuxSpPR_KNcfcYd1BI`
zv&GmwL%@0lG?99m0i7B9fs%_&%6(m=9TH(zL_1VF)BW1XF)NNi?|W~ra`PJ0VWQ90
zSA};bHYm4kAh|$F-(W6 at A_Q^ZF?p=P{dPyelaPl~>;7E&M$4A75tB~t-}{#c#3daq
z*}lVFFsHiGU_m^&QWN(7`1<m&CeHP3DO$lmrplT`ZE4e^w6uyMNa?Alfw(p#1R at cn
z)x>C(njwT}73pHt9));Xm$ueg+)z`O$P!ws)}<&SjR+xH7erCix at 1ToAPV38POv@a
zeAo5+W3Jg}-g)O;p5=b-rzXwoWqppdZb`bj$iKA8-5F$ecf3>5 at nJ~swh-IFz1w~z
z9ZNs$-F_L{pTI{SG@!wHqI9`$Y3!YfZO4Bgm=FC>U<ZRMy at o5;V?TRvAe<wJyNUt#
z$-mEDtaiIu9TMd(gYGp3ImUiO?v~d|O~~Jpk9KElI!(1^E;LL4m-3mc56Hc^@0xmx
zRr%FPT&Kwl2|J`8q`#PXKFq8Sh5cV-+!isIb0>45zCAMw*EXU~e<%OPxXM|^wL at n0
z{iaHCys@=358Gb!T~4$aF$Li1Z5x|Um0Le3-M}RI2m1hjRk624!(P(^PN{2F7c+xK
z&Xm$T>qn&~IvFzNyh``w-y}`!GaGRIHtK!ytj1BLc^WycM=rRt*9fN*^cKje;B+FK
zBO$(gU=1L5S8O{mF(iKOpV8^rF8xqhnV^IBD{u?QM_jrT at i>rqOP5+i4j=GL<qMu5
zo_{Ky(a6sA9hmPSD at eMDu8VfNlg=h}!`gR<{ojVN9O1XlujhRbS6k#>TMs_5){*aV
zg3ZIIuEq(a%XXfIoFC6=8 at U|ccE);BpPG2VH&yZo&$>qb6W*z=*fZi#B>cXG39?dr
zv!+76^8w1Xz>M6{DBA+)H^{?a%mG&f%4J>kAkqBE*+w1mD}yu84&8S{L5t&U+oSG8
z=*Z_t><-$0F2>eoUTtg=`S(PZIRd$lY at -d0;g$n41nw-fo1irYCgJ!726CYwC-x5J
z2qq##_11<Y<EVse=tChz at 9+AA*ju$@J?*M7$}vN>*ZH#XhBj*cKpt=#`o-2&S=)fU
zEJJzvBgYcKQ$)c|H72XwEFXOzbzw(NCCpE<Qo((3mpQ(F&(2f8dMB&3vD=MKW|Yl+
z>xceBLrOFbXSVT{K0EFX)dyS)6O6YKrqXMKX+ at uSk3~C(Qt#GA$x8Ve?|~(vuj&$}
zR;}Wi)Vqs at _2HOLeMNG5KZzJ>oeeu^1D&CMVNRKK1^of$5$I`xV(MzvMQ}2NRQhfj
zi20UNZNH#1o^qD)e<wT*gg<ImDe6YPhUC(Cr$TQ22An;>8sfbgj)gxHc#(Zu?X3yp
z$}8jt-t at Qq>161t=BLPYKrf&>!S`o{oVkfEean($12?Zyc37JO+w6?_E^u~(0|wh^
zkl7B*+rZmb_2)}78e8(F(VvVgzTC`|CH4o8#AN8BHxpd8;-*AfajmEt{0o^~g2S0l
zopSC*Q~GKr?0q4O+<$0n9`)2ZWgXg(`c&*HqmzD9(pRul+{z?TD<VZo<ZE2#A9=LW
zedH5yQ-%C&DY#a=AyZzAEmel%n$Kca7d2I{Dq^Zvf;;I`wDVHV6D-}BW9vCDWS<_7
z94P`mr=1_J`d07=vhVY-9i+pD={us*%ckD#)xc?wM(kw8-T`m<yD9s4TcvMquue{R
z?0jipK1HarzTi6XDfuHeBfnjrD}&FO at Q;z>G860#x&G;@OZ>~k&rPtSYTM1FRJR~N
zmrwYHB0|~m!-vZyxqnx<V%5OU2SV>uSnS~YYA{VR_?g~baT^@}Y(BV1iCW$yDhMUH
z0Jxu!*ub^th2sA#1LYv`t0+Sc#;sz^MJ8dg9=u$fcI5c8=?V68eUbU$ci^l0lv7?L
z@|$US-slc^0Wn^3tpWC%)`T%M at 2zCQ1&G{8i<Nyn^BLEUc!yx<cRJSYlqR{8R6M{E
zJ!xEf#E^YE82LUIld5P<(QJ`3@>k${k(DGQ8 at KDq!!4SNCvA~Qmv%8Jszxd<%#yTQ
zIS9Tm_*#hVM|L<GF}B(<Hg~%o{4}MK`(<+N9cs4tx?l~7dB?FFaWj96#3eW&xsCbE
zUFIX{@Pgh|W{@DqJa~1034 at I*6>TP!BgQ%d>oi at ee_-}$EjT$=uS7mkaLuJlz1wSM
zzKl3?@bi{~j}N)T_)}H=`TJG<k(0|^H`#+bhV1+uY;sHaK}4rrdy7skb(@pG at mt8|
z`Dk|jD;)J+Fq}_UyOEm^eLuD~B4o1)-}jJUuAE2ECo%8d?vMY{hqMih(P%FbFG`-E
z++JVIgP&-dyUZ&EF$vq+JCO^eBO&K<3oU*3Nt?)cXU at Dt2l)3I$hh`}i5-8Ti;|p!
zB$puRXJkBsU*$`^m0Yt{%#K;Z^;3tP;4CEEf3x-{?N=#|4Ku2d7o!|_nA<mn)TGG?
zn^!UEvSJSxLqU)}#n1ulXcM?Q+I>ZpUZ0(l+$QxQR8o$nVFf`I at _i54^T0D>`xJkw
zn)Q282RIuASEwA+(-!2!JdAv9jRdRRI+NH1FNWawzk%b<^w<TE-*3CjjCess#om87
zF(!F^@udX$0RKQ59pomWRT)d74Cl*oeza-UBLCGCnFVqRn at 1MwyBc|a at VY_w=_|hF
zn*f~ROhc#dOpIp+W2v(oei<2J1OljaWq}Vfk&n(dY&S1Dg2QoUn{bWRa}8|D;Blcg
zlm+hSN4HnHtFFpQ^;)dkl`Z^5$ocSqe2*GA4cPDb%NE;;SPjhtaSJJPK?L}pW`G-d
zzs=p2g!V-2bclUv8S`xJgij)e%#rR|*8hMUk&N890%d;`5el6k>T-)AJ<&z at QQ7@y
z at O19S+;Nt-XXG}_A6Ixz!HHfzNpMsWY(<fLZD+(lG6!(#sTp7$6s_C}dGpaTY<#Oy
z{bHmP-vYnT%Bo5)?Yofq#=y?_B8y8ifh)3Akc0edQYHMHveJlt*iN#pYQx;b*Kjvs
zoID+ge^y~S`$l9^wZ;*sY$`fVwbUruzc!yT*@ZJ3pW|+?>qF;h`jI+Vc~s&wAMf8I
zR9I){rQcmar}Q7H+C3z|D}~sB=Sk>%()Kd%7b(_uL=3dvXiFFT9^p0Y1f5ao;~pw2
zm4;RNG&3 at AY!wm?3u}e^kQT8%yYcT&GMa+mr1!x?0{$sd{>X`huV!sW#kLuL;N3pW
z8}Mw?{?(D0$Z;ZC)rNb{l6%Smjl at Q204Jq?WHQMQzQ2h7iTYKKEr*Ip{f^8{|4~mF
z$eBsTngwx;Nq(Rj at g-x)x2-yl=WpxG6ZF}<f(eq9j+LrT=?`f~3o})xfT0WADU!r+
z*S+gxeU1YgU9C#+1+#W9$e3><Zeto^ut*<J#sNdS%DqRv3NbX~nH}J6!B~BZ<G86P
z+z1)!AjYg1|7BE2>J_vRWXop6{zHpl_ii%yhmJ*l#3t<Pb5)lWfs<PUHq3SDbCj)1
zvlm<hx6dWu6zchx!wE<D1>n-^q$%Udm#kNR+25un&&_1{O%shRXs3 at HQjQICg+In^
zWr#t8c>y_!o~v|QW6 at 6Pbx)Bm;|;I#%eCkqXCN1!6>|_<e~rY<PiKJP3Kra_z;i{7
zsgPGaBsnQ9QzkL`GU#v#oIs(H6ErTB8d$L>W=drGWJX^O?sO?N6xR;~UO&b^9efWW
z|4_lNswk7ZxE{X$Ydo3FePe>n-7ry?Z<7B~Z;~JGF{K}^jOdHDZ&h9+|M}Jw%)hf#
z&j}Macf1;ucff5rnBNy;>M``aV}x&^U~mNdA`BN8KoR7)>*|HQ<IUtUdDO7KZINql
zM}&a$fXuUU&zuQ7#8{Gt*12ExGJl7s9pbxBB7RH4QBbw~`=}SWVKwRze<k}gnVWsj
z!Dcf9JWk at Z7ZA7H%)F#diA^JO9@^13oBK9mQqZ1yZiCAfF-^DqH;{E)E#cZ7d$6~y
zm635n{8}4gBzMAB5c`w*Vk~@O4-ZJXg-UjfHmH`wey#K}MHDjVmv+QlkAg10Xs6tW
zJVC|hq#E8G*f^&;6@~u><|IC%uk{qIuvr}{;|k}#Np-mP1I>icnCNLL**|AhyC0Gq
ztFHq8bb~TS3{v}KUx>Lw>_wBSWyONsm at njw;L;*`CVU_3vRxJOCLiIC>^!nX_yecI
ze}n!hmNr)29%E~1&xCHCqYgm~b0}w`N<!+0#A^{gGQ<md1$MKt%%%!cj*#S^)nabt
zB<O;P{|9CM&XoSO^XBQo?}%I=XczZ|+%_N<cHCX15<bpvG|9gn(kAV#pMzD7O4XVj
z%ys<d!I`fiAHkN$Bv~<V2@~{-&G19lw6+Zkx0pn0hhbiDl3WtP?}^P97 at 4mMnu&hU
zHLGBU<Db<nb&qCEDHHv2UpUM5=*+WYiL*pyqJ6HHnyYRVog(k?KKoL)vALDz{iGS3
zD2r97?Lq|^FCp_N3V4F+7%S2X9iF-uw+biYe;!bBaL!-9SbPuTIoc!dQluE;`8mwv
z%WRJ>&9K(#GqMiyltI(??c9BvmkgaCSzjrXA%;3he;WP7&i>PM<b^Y7H{)5{V+!q7
z)QewiGUjNhdN{#3b2*9Cti1Afn<ZFuw#_2fk5i~1<2$g4n}N45fY*Bp$BusF`?lZT
z<F8rq`q>K8+T{@;BR;J#Z3&0~H?{-w7iVFmyZXys{op;KAG~>jjms>9t+R}3$5`CM
zs0u=XBeZdbZvn1!d9JtJX1^ibY-fTHFOj{ug+XkJAXk0R|B9|hAF|~l at VP%izU|>}
z^2oZte4QqJP at hwBXL^^p$$NvOp6IK%M}j%7Q;HmM&Sb<T=^%f718%wGq9*T67%vNr
zr*vhLnIzcK%z;~+s4p5E_Q?6Vrw-#i{2jVRdcFR>;8*;M!|H{4IThT;2E3MPTsivE
z!D!gC>F0ryNSBqCiPl1<uJk#*2;<`zDr9Gh6?P`BEhk0{Eaidjoy|rU?4h4CuaY{S
z>)I4!wC`L;xpuZ1eV|Xdt!8jVW>XGt*p4`@wx0XalcVT#<Yxot{{<gXSKte&x!g{t
zOLl=<5gaR!Spy}`ohejHY%;d%C5NzWj||2&A~AWsh3v;F?yhI*VegdkyhgpJd~AAx
zknqCeCz+*62hmO8Ys*4kKTqeWzeM at nmJM8cWUjGZS5DQExk4XR>HZyDs5Ek4bKf)~
zE7*7jI!{rB{7k7Zy}(IB#wmS;>V{r42>mq}a&j>2XTgw<fe9l07I}G8)HXpMJm*))
zr+w8EJv at Ti9c&vx9-7}rLcXzqtMIT_8T_(w`cQMN_c!phCu03A)?%zThc8qAhV_c@
zJY4e+#T9I?3}23IA^)QUMtT+dACJfrN=K0MuSl;}ovxjXW1qn1`?0ODU8c72zxmVY
zkm~HFWnZ`I1IYC__ld3Xwv=-a_q<G(zTQc1z*zO^kRJGPUrL#S?X~Ron@;dqYG&d;
zCE!>gbhvn|jpj?<U#q_)?dtrI at YBF0^avuWTUv8S?8DE;;hP3_t{^l&+I-ymJI=R^
zh}r?E<{j&Vyno_-Z<}(yYrU0YEJt6hy(Kc1BRAq>_ at l=`-gckgfcarLCs at 2-aqif7
zDn?uij<#IYLyQj_1mjfQUgyy!OTkMb17>hRrTdF3%5LZd9f$*U3&!Q?(4R<5s0F&z
z9|8wt6~qc7{yGME3pT>`@QP<VT-}59)>v?gRLH-QAP+N%J#in0{#LOqgJ3J%7Zzfi
zm{sNGv16t8(=hhh3+9LrjDgXW0}>a&MiE%m1^wIoR1V+Rgd*U8FWZ^a>9^6Yx_akL
zv1iVNE;CYQ7HTkOMJpR?6d%79y9~Bki5Naoy#;pOp^&+1fnRUWzAzdbbh6zMfzNb%
zQpO+lP7jpr<|dDhA$d<OWCPcmDzlI}nS{1`dcG327E+!{pC&V8R*Y3A%OSVr6bzv*
zZ?!v*+8SFwg8vk`LB*&GR*yOWITg8ToX0M=FbdnF*2DwNj_Tt#nOWGM0h}BB^~fWS
z^X$B}+uw!Q6dB2Da2kFQ%yZX)kHK6;a&AEe8lnkJWQbnnn}#+G8xY12<gr at bj`6gT
zf1l{?=tmDo+#UR9rQjDjp`KVIE?lHf&ubSf*FPe1LISa2OIX<f{3MV~dfsi;ynuX8
z3IAu=Zj);Tb4giAf70D9%URRY=Tg2NxT|)Im)8X^Q~`T{w(uK!?!o__>-3yEO!&aH
zxrA?CHL65jhulmkH?ajA8ga_2G2X at hr}8PrLW^{m#ZI%F*ai;U_NEa#^SHK%;BjqU
zS2%9Og4 at Qwz;WmU7wZH|i0oG7ZX at sbT6e@xB|Dt-D%W1*E_kC%zRrCMF-d)E7w3k<
zC+Jm+Iv$Vzx7hp#=3#r=F!dJ2DtjfJ8YUDY_dLD4+TE5>IpFbf<;{08;-D8pHm;AY
zg)PD$%&-}qvpmNl<*~K=pDMjRcCoQOPQen`Jdg*w<Dd4H>??o8|2pX~#6Jh3J*1-U
zj^Ll-pH!H-!L3{1s7ZU7$xA`5YFVS)Sx7yVzKT3l?@%GI0d<??Yac*fA~8p+gv&`>
zoADI#O at ULX(#K~maQ3oEtr!<m_@|WDD@^nNT(^(tNELe%r-83vBJ^K>{wJ#b&*oZS
zom~9;ste+5(k7Lq`lL#)q*`$+t{cix=wg_Vf?#VE`tc0vS_wE3N6rZU1vz87d-a<O
zz*4y3?}B}fssj&QFyij-Vf+cE^Eh243DgS3i- at sIfln?i?%+<nv2`>!3P_ptFIKuA
z3Y1UuGiv72!@$QIPr0D;B92M>2gdXmRyH^Sc at 4foa0nhwXjP97p9NV1vem==62wEI
zZH$561l;(LV-1mu2(OY+!#oFnmVpz3@#@<?7h-+DgO`LjfrAKi{R92Gd&&%sbAg4O
zZ!Z9gZke7D^%!&Sg#{Mgn`9map7A{Nx&eKhm|wOHTgRL>9w1{<Ni%f~_4hWNOr7W7
zt8^!f0!H?G7MpD$He}`$;xX<+R_uGJg-O}k>^wZFIY9?qML}#ku%QI$tC7oW8tj{d
zvp9nzQX!wQj^);dZ3mof!{3QToCP at fV~7kP*u=Gabf<#Q$Rdu74@@sO3fS=)&q=0r
zD4$77KYNaUK9TE<uGU0}19~dB4awNGehZOPSzAYj-tPIwoOUuV-g%42^XlP{|D62&
z$UC2|ewE1Tk;xd#5VwS6*)9C-=nvT#o8Kg3C(&Ox7J at hNZdja;7`Al6;UdTdPi83O
zo;)H;ZYAx~PoETbMzEE`BrH(BtxsjQTgf(wYwa1r+8)5cR_XOQI7FP%xH}bl#e1>u
z8~Zw^jqhr#cOdWG at Ot=2b1^0%rXJsP&+|=d!1E7Yk4*TPP8YmEBM%3-fnUbjCd`l(
zM<Pd3t4`wJXOM3o^I`VOWV~(FVXOt;b!!I2zy at EAdfS3>e#wXnhJyd=9P(*jJEk%2
zZ3CACV%45RrZuY2 at 9OD{Wx069d#o*H$g*}}uI-U?D0{A(@2d0~_m1RouYIeVf3{cN
zq=9z}R31m1TX}4fzT+0ww2YL8Itsl$1pKwdLY+D)jwatip5^%-;M%*rZQ$8`3%O5n
z^V)@JklPaz!K*}p(;D+C<Wk6>^+ewDdk6j`jA<768n<92>d$nQ^arnT->~Diqt~A0
zHEuV2=qm}HX6*&ihCiv46<5eNog_MwI%$Y=a<zJRtVrcASV`<}l|J8hO8y7?^H{?u
z*1}Fz;2`~xeiMB3E6JR+cs!mrpu?MBQ<00x2R<W at ZRd9HxKK@O80c^1kh^;(Zy@*3
zLtsM!7KLDmFwU3CcC+*85+a|kDTQsq!u~5Iz5$pQV!QaPUE+k^@O&)v0Nnpip=eDr
zJ+q3P^JBLYd&C;pBM7Glu}3t$fakYD{(=0g4iQ*64#BU>b1LM!rlb6XtIdbIPT35<
z2)Kbfb`HIauJ+iT{D1ln{koG}`}{yzDQwyY{hyGz8{E60)WJ^VDx{;rf2Xy9B|%-9
z-<ndW9&n!bBuQ4m25i|$?ApQ~IhF%EC<?d}$j#pE<Ql2OWAhgNfOdFf&24%n+Vw2(
zO=cznQ>m{<drSf!as)Lfv6Y_z+`dUyC@`vD6(%&^VwAjNOB+IN4ouO2eqq&0yytT|
zT}hEL_6s65I-T85<+1gA_Xnwm8*_-fTVZO7j8y1d!U;BGkCfPcl+CD%lc<Zw5h1ej
z2m#_P9!i{;2TBp|;1H(j8PZn$6sV^t#Qg^4=W1aGeESdBtaK_pY*!(Xdg#dt=*hCp
zE;?w$saTZZ?R&5zq{K4PVdxvPps(G7+ at 4Jx1$X8Y<eBW<&OHjeo?Gldd0|K3gBLwg
z66ZF_w?2fe>bg at 5--u{+U*N>LD&)mMnCE(Kou<m*D|FZYp at iLqx`sOXNLWVnc3lHx
zh3E>?$fc3#h9_+~#(Nqe#<E;pDzQPw0Yg$@njBA;=C>m+>|<$z&HglP#1svj!~SiE
zLCMDVo%Yz)kvAvRU%xz;w8uUv?>dmH3w;%S^it&wx)kGChVd5q-)G>p`OY(TQY2>d
zvkH055h0ODO*ubf3{Opnvehs%J?&&9xqm%d-{4TlIg9fO*3U4D(l=)3y<Vg$ctc!`
z9O9+Z at 96^}OQ#qfK$kp$<v8S}Ke2!hV4 at IXnVa!~KQ0yW^*r?9nTXd}p#M`JsC**0
zgt$i8GM%^0&j<IN(Ib`z<8hw<EabB?jA+9%81Vv(*CHZ=AU>U(%Yp5+R0SNJ<oD=>
zadwmFU)PZn4dV$rA0;pfBlIh)iXRI-yPx4E-v^u!;2)_l<-I9{?v46?751B(z%950
z>oIrbsJ at Np2Y*suV?Fb{@f6d~&xh|r8Pe2hJ?Yo>TpaU5pH2nOw2R<#RqqJK#qRD?
z$9Y0 at 1i=zko_#_%i@>MKC%isCf!7Ciy1%X+nGxQD?>?)@KplMGZ4(lnjrmwUSgz%W
z$+r<sX55!4VKKoz-?PsIPb<DRhHKZharJ^+s!kuwh5w#===ntGeT}RQc|XbzCEPy<
zu at T4UIx3xByw#~YOg*lUm;D1dG4|7$n}v*Qa}<-jC5NH$KhvRyO&MSr4<CO=oZbC&
z+U6Ow6n2K^h#q?A%L;kPo4B_#(x4i0v)S0w<TBpGf_7BtKDQKkf6K*$uXYDwzR;$O
zd$4ZC_sHo)EMnCVBCivBvhRJ48-1}&@HOILXF|qIieBt*fnU#}D-kcq%YCkaThiBF
z>GKw_aF7=|{MV7b3H|v1vD<sT$vbtKtDlI<=!3XC-C at iR^0IYA-#>TnS=q-O>R(ss
zKJ%jyenC|L%Ci^sd>wOEr{Gb63pv+1=o#Y<0YCBe9{CDhg}giviy{)aHETxU`&`DJ
zoWQLLCY}nxcgOticQv`G8~me)yMaDfVKP*p4~+KL=4<;P7wvPk)abq!RA)$AjMYPy
zJB+a~sb+mm`nXPTpSrw~4V|dZjM(_)o#F+PU^g)U|Ehi9 at 5p!bQRF$FlTvhFnV%1i
z75Y2$&HfJHziiwMS_QX`HZSSoF95bgwl0*&H6_1}?g3Yu1GWoCtQ45PQj*7m*bq-5
z_S!a<`{PM5)|0qD%yWi{d;P!*;m at 7P{?o&eC4x_B=w$HcVLV%0>|aWJz+T`usOwAb
zojXGK6Y at GOkTgOE3mKaP+w``?hBo-QN<{fj#!e!(>UW*MBtL4JSY-BoNo_MnALyyr
z*1XIdxXCGKAUVzV)RUZp5rMD`y~J_zmqV6?AH_eqK*PwOH)p8MXxEFMkaiLGJsT?-
z#BY%OqFpcXD*^{@+bW~GZ4=^^?M8<axG<&#lm)vgy~aP1xSWXDWRlkcV{Pa}oKvTN
zIs6*1M^%{emq#YRK3NW~xQr?neBW+nAzhVi61NBwf#pjUcL)>pZF)UyTC2s^EusVW
zV3+vRzue&PO_Mz5n}qRmu=07a2{OqN>M;Fw_65Qjz)euT0DciS at Y$;(CziNY`{CF>
zB=BSBt;#31SRweN#&~=ROP6yjw0#X?YY2W1_-;pT8s_pw!CicNAh?SYfSX241CyxU
zOK${c%T>fSqAuth{Y{i*)kxq(b!GbPc{+3FrR%C>#MM8>@y~<`l=-ESg{w&nDmXr}
z>o&{jv at I%n61WrJ50B3(GISSdjNN8YU!*k+-!JG0&oYA-(JbocR9O9d*y9&5rYX at c
z(yT46q%F<#Wb7kulbPAOKLy(fkcB<~KK*6M6AN(sMIy>-mab_-?vXaUw+cE7;^rC^
zuyZvKKQJ>MvOsD0DS<C#wob`2qU|oRXg+h-q>WB5Qd3sy%V{^fQt*9&;)|HWe8zq(
zK2OeB<}LFnQui52eOYp5dJh|$FrGY1p;7OJJQRho{IPxv<Vewf)+>CHDY`L;Gf4J9
zj5+-DV at R7pZtj=JGrjEiH{5Zh8pJ6&&cS~1o8%?o_n2!$#zz>-Z4BZsFsH(2ZoGFy
zE@^me>U=40GV<-bZSRv8Z*i#Q*8Vlf_v4m*!90+qwwV0>b=#sq9mtJVY68h|CYx^(
z6*w0C70XHTr3 at j@x8a$OOzHn>T{PoaoTt&w<Qj_^(R_26NbAE(!1z>ecRyKead)Hu
zPoC+Os(AuzvDE6mwT_495F9@#s~7S{0VgaKF#KQ1an(84Jb>ka?l%d2CI at 3n-`=r>
z<c^(EjaYM<@WkB(N7YI30*rB!fLotjP|8d(?qELfqbFsKf$UNGP3#<UjGQCKA-AW2
zpDQ;OHsaoEOuAPPOIc5FPlEf1iOJTR at a>xfi#gD{!;}^B5eDl_V+nky?xa^r9_Nmb
z*@ZJ=&%l=VXZD5YCsSuYexIa^hRzqwa<;)Hg!WJtiTs&Ze^VyZ`ozv)w^txv#zVHu
z3gczp$x3kHp-(lObVVk!ZQ)ZQTafdf;}S0qu36WPJ|~GyN1wYv`WD_-phVufJfn}?
z6L-tTRtP26;SWXLuk3k|iD=70FA_(xDk7A#(IXQ-Hw>~tPMh4=5-~_;Aou&0R=2dx
zS5JWqZvo%#ZDt<V!lW3_p<R!u*ycT6n?rCL$YVb1Kl<t{(pMpipU1yRLz!Mux?qd^
z41H6DzA2|Cm87rE3O}xBQm at Pk3y=5Bh*^ez)UC*XT#=z(skj#Y3%^{wB-<3T6!T0C
zBR2kS7IB^6Nxz5vv!uW2r*3i4Q`r94^H+aFUyL220*9>ex<LO*HLiVt?T6StTLey8
zMS`J8 at qFVBCQZFS(Z8{tnW|nQP7c3~Ywig2;XCtIlH=fA%|d^lgfT#(Zpb#h0$i{0
zF0Q$U=bXVdiQ$F~&uGUQwlHG@)?|LSVcm>%J=Qm|uEY8U{|d&933y&M))QB?Ar2c{
zwBeU=?jDm$-N4$0^#iQW=aotO18dKYC&DVieaUTz2o3*C8~9)2$XRg3V_X5x!JR>U
zd&h%TrguD8wt|ea?067E{vXky#2Ex9qXTd9a^!|bp172}HspG9pSe7)1hV3vkQJ8_
zOb402E9921p_jX>Hs`k|EP%f84s3|P_7EQfosw|6LVmazT#9>8A3q8rE4{V=AH~2A
zdsawY<HyQ&;dn95?_ at N_U3?!RCxWX_jojrNqbqxYq?JwvzE$25C^&$*O$J$a2KYKz
znRE6$At}=~s#kx|&VudF&cBx%g|e^L<{($HyyBcTP&EXxTyFSEoVuThtb^E%9^l}5
zD&41s08^2PeA7C8MTPvE5;}vr$`KH3H!v#liunpv_)6)m*S#v_KVP4_KEBD4dQ{Wa
zhnko-^JKC462VY^=JHJ+QE8Izarq{_e%vH4A+`;J9zIVd9<~Hg_)3LpM51&T-c_ld
z^Os!s7WP9Y{UKFjOs==LEMCmJQ&ms7rE`rUCI#C<%1wjI3uS1F6!(A8>=oc9V~IXj
ze^jw+`02TCt12+QFqrSogR5FB%we(MNAzRxA4Vu2;$GyJwj`tOM?^|l8_-qYTF7 at E
z#`VK0<UhqjrtYSfW8b8`iZLRvX7cEC<Q$Y(W?(*%e>{>>mUK+-0ghQ-eh79X2kP~@
z4{VW^z(Ux#S=*ScOx6Em?i`sVrd0U`{40Toseuf5c>b|eZ7$mLO~_Z^E;HVMKetKo
zDyawXUdw-etc`*#{%BDX=U8vuBrV(&Dn*@*_ihJP%Z+EG5j~$7kGxMlgb$P87}%J%
z*Xit1cVtp&M`TX;Nr5`NTkr}v*QWwgw_fbfBTlJpxf(o(x at g#3+>vt0Z4YJv at n%0Y
zf<py)S70;P^dsi9kAQ<tP(IPT_HH-iimQUVY`m$PnTl~27)|mV;RJOQExXhJTV1{L
zu<ATwP~FXH+o~oRv1zdP5Dfl7^qG9rVYI(K_6%a5VYlGey;9gR5&wB=kpi*W$WvpQ
zW`*4VxF`*BUCB2G at o9pcBDg7C>P{hLh<+C_j<6R;gy5Qbl+z(APT;8D7hKn$!}#sK
zwS{9(;E-|OAmEdK9ib%H4EM-yJ$;WmRvF<h*V_rU0snQn$Bu%w2AgB#%>VutJs;28
zn(e~chsuL4Kf{y%aeUJ9cA^`g?Ja_h+`^fxhOL$KE7Ip<@6a0(y6BWV^sOW3iM at y6
zqCE0{yyKk`cZb!Rzd-yi^d|i0WdwUpa>Zf$V|qQx0j|uL4Al_K at i$|27>mOsb^aT~
zcXukN(8%$&RZrsCIZHy?;{UWmyu;ECn};kic`^gcO)dU~kKZ?*clmEPuI8>GdOP_S
z+B9L2&W?ErV-V&-r`it~ug8ebb0A*C{{N3T&|%Skz_0f)bWp^&5FHq0of6+#Q+=mv
zLy~b2$(hjG<{OYtf`$(^2H$i8d4X%`<OC<?$9!R`p_wCB^}*PK_~c6WZ+qGAcEM)Q
zMF+;+iGxh+7p5efi6T#Z>fQY97%MTio2G3i<HnkOJE%W+>EO8_ at g?VNEq`bX7m*93
z>qvreeVN?x_=w23!6f>{<*S8lDuKk|77W3+fxCi~fA*nBjN9n1<N2pN?aE_+SoS!g
zFSx<ps`T2Q?ZNy-gg{r{J8Bf(xn58TZn09-BeCHYpq(He!0`&;DB)Lm{uq2<@xaLC
zsAKrsmG}7Y9|MQ*3;9meFXI$buuCnL>T}?4_9J6Cg|VE%SWaOqAND)OY3LHfz8mWh
zB9@)|k`m+6;gyhq%f*4pZhF14i`cR84e)!ZHhS!?OE1B<4ZAYtAeZD8!8V!F*S6}D
z2zCXwF)!pA0LK=vFh!(KT&*ScE$D16$kU~;nH;8~^HbH8`c$qBc8^wIg&4u2#2(;g
z><pLFL-Jb*GlApIlpQwbY}%wxw-Wx^28OG?DwK|E11H9 at h`~me?il!{Teo68E*JBb
z`^G at s7=Jl(pePLe{p$-(1NU;e9r?dUC#fzq<rIYCzxE?J6Ff2|aA?5Kc&BiBh!0J$
z+*l7kUOSU2`Eh58u_e+ExRoQ98<@iwSB}A_G#&mQ)@CjK1-7=c725=1kr at YE@b at _x
z8R1qj%oBb9-5vi#;II6h<a}p<m)x0PbeX2Dg<S*wE!cdYk5bkO`Xt_fZS-cXqHx}^
zB;ynKQ at W5R1NbM*5kZEv!twBRY6#v(*@CjT;46CEdo9CWyX-Rokrn&QMqM9M|3)xJ
z?AR7He4I9j at URm*=fFa36t4&4dbe4;26c#hs#h8>FsbURXp`_y72a>7sSXQpVAO?#
zgUI3R3Mrp^q4(RiMgo6<dI9hF?6a_&!)`Q}CwvdMAvx6=Im_?>Io9w^;PxfoG(&k_
zuqmMhHuw%a$ALJ*)~q)uMl)D>1J64}{E|Y*OQ>J?L;ZX(C%53br?{@ia~-kqYp;3w
zLjK#RJH*zBoy+x$hK9=6Z-kwN{l*aX|DvB#tBH;|JYTC<%VC3fonVe($8h60{TJ=z
zJ at S0F_p|S=quKBFA1oL^+6&qvkw4Zi*FmRt`&-l at k$a$fm#HOW-t%5B at j7-}`yB8-
zF4$RZ{G;JzeQe>SeHuoTdw3C^zl at l@4r#Du;}SV<cU1z%ow`1}eaVLYF>{-(uK5!Y
zuQ=1XUY~J!J at XoPs-@H}FPpKI?rZ#%ejYy6jRO>#tZEI{<o8idP<}S-9ODKBf-|rN
zT>dX|4d}m%8SjGNBVNX3Bz6k>+M)}EUCwypEiY-79XTdfo8<w=kBN<I`HN0!%<#vN
zzWrRv@;2nMF?rdkqkR<Qn0hsTA9YacQZ<=RLH3nW2O@$heP{O(J2oXz?Rgum8b%x{
zW at H6HXb&B2 at y0emn2|v};J$)7CXuV)PY5j+DhjqU389TU-=losW4~&i`zguIwwu26
z5qu;ZOJ7BnnfJc6-3FcV!9?mpfYjPj^KO>HoI3jcf^@6<!JNdp#zA?}{}gi?pff}x
zmI-k^c~LYUvejsNOYS7JcNb at 4#30BsT@>`U4IlUVAFeR73xb_57;i-c`s9Lhs7$!E
zv6V?tD}hP+H$6!g2;WsO@=e(U_eh(E4J1r<=vcI|Fd^Ia$ozi%qlmt$3xeyOv6j{m
z|7q0yzcF at HE!yWv{(ZfRv{B#0XMWhNZ<GEdcnf1KY~hf_!k>-T7>|$gX;~@jOU5-`
zDy0Q|!hm+v<-g&-WrMFyz)o8#@kU*{ZX#zQY|z^<C%uF*xsI9%T}MmoQ-}G`6Mn!s
z*lm9XZtj`i5%x4CnKNi*EczmRTo}J*&m-fyFj=*cwKL-VgTE!Vc#N$Zbf1&>NsMU*
zCer9+2;XFrvGpAmr=__e%r-Xb%HhW(xe<!yM}hOBAEWSVI;Jr87eu1n=V1Ohp&T+U
zaT0VV?uYm$d!!6{i`3}UZ&W(K6HIXFh-=_Pb5xYWEDGr&`8j!S;l6*V{iJUga*GuH
zZ&b)va<w_o>*dIWy306PZ~)(d93#4)v4)-XM1#`hlo=a0!4^YjhAzi9SD3}%{~hAN
z5dBuo-Gug@!Nm9nncgn^4ZIUqeZyfRU8eS9-2ObYQ>G}=;j=Hs*j|*R^~HPILQ^Mq
zLI=5uy1EV at lY?H4dYMJ$Zp_hjaU?#<Kyv+vlht2VY<n0_CoBJ?Gf|dqL({Ps<0tfT
z%Iy0h^@JX@<_4Y0*;pap{z{P+&ptIDz6%XQ=i_<r;#uA#j_<u_;qyhcwM%Vw!ZXVF
ztNmhgVW)Ub?I$>avE?vwqA<qRiaimzu>EhR`$&J`^d)sqb({5 at y6AT*-B&(>KIKK(
zk9b)v at QwHksZgF``cON_KMQ}4)D?LSb#;77rTdSsU{}}^@nfWnJj>WY`zh+jC30HD
z8Q}NJ!1*(<4~qTKHnKlNJL%n?gPdHte#rOSPmcw@^?v$USmfA_$0Ejd64q(De*QsR
zOCOtR2=H7^=myc4pIgZ|2pyD5?9kwuSR$Qm>);Z8p==VfM0Y_S+-a7tX_CHTyMyEP
zINpNe+lh`y^87jt#tYCD_qT- at dz}4^b->;rmzd!l*iNv0WH)kD1Z_vGSCh0L6m~NA
z at keV^49f0nJgH$asi)9^eyWgv{1dPUwH&^(MzJuwQ2O9?-wJurg~%DmLxwrlFBffM
zDY>@N-JL>YmZFo|9Lb-~7$fGewJ&ndhZiaqj(AtPztY{<x+q4knA=9=6FMI6`vo$O
z{OB<}|2#ND1BIS<Lcjd at Ci~7%;OKlwzd~*$;B5Fu3EoFN=N$$5*(UXug8Rfy5B(G}
z$MI$OpW9*EO;(-f2rAt@#b|$d`U;E_73{b1!cP;uDrFn4`%<kWalaMvZQ+qgL~kqV
z^5|e|TNJN`pO)Sl(GSNe1iy|e_1Nq``v&{4{Xrj|fU?Seh at +z<co&(Eb*Zt4rz79r
zV^coxQ^2+ at Kl+n!Jkd#y8u5;q&?_O^E%wFt;X0yMev*uSa*c!U^ZAL4JwJ>^n~1`H
zkMfV^T9Dg$L$;l()BbzSa9RYpEfRhEZl(L$JJ7?3kD{FD=@O3VvexM<<+ at FOYKcGA
zeJu|8jeV$Z=zQuUx`X6*C~Br>RJwnChZEBK9goHbErt(wo196a_S`xT48(QHabq1Y
z;s>eyw?3wNZmy&1d~?zE%GK|acHyfc{X}x!qbL7R9Lb);7=nC(;2iQH`2jF?eG3~E
z>g5wR>U$q~Hev~zv4(%fcq`jPWKiQxQpV%`;0t7R?jNo~FTeTBZUCFN`|5s47kkYD
zVyD6NXm`*xUJ}k{^<mftP?q!DO$wD-rckTTAs^_+DYM~QNg7xFw{K<J35*;4Fy3EB
zy~eZ8n+S{}xHVdTp-c3NMOT22ce2mV#=keIl2G?Sr2M4aJV72Gv>WL9i%$xFU^%|q
zi9fSeT)6O9JbZA5!UdW>@47h4U|(6rTQXV!pHhyo-cfbAlF6C&RI~E<2}WAe5}vMf
zTGVUY6bHuxalG>Q1#<iiay%EZo_B$TSr&Un56(?GNOi5OuaWp*5QD65hc4JauP1V`
zdb>Utd0<%lOF;{>4D+V^=&Sg)i^ShX+I3?Yi&1#OKZ at 89@z!Q~0Op%S^soLSR`M|}
zxwome=ckfq%x`PL+(pYY(809t!AEVwJa$JwgU58Hde7v`tj&PfKvOYBr2_vN4BlDD
z1Jq+L8{V^+Yo~R@*0aqAZLbA-<u!T`$zQ{P?}hj$t4}YvO7uPGB4x1gihxm4!e{JG
zY=w;RDaN{Bau26J?y18VznpNK%^MyIJUnSf+$*|Z%qb3BgRx*qyg%XxoXMVZe#6MQ
zwY}%E{rt-?CIEBH|7dGVYbN}cI(-$<EBK4mw(&u##RNwjDT=dzgRqn3V-l@}Ec0U`
zjT|?v;Cta7WMieS!Y+S at USCuBdFHg%v=`ue>{M3qTWET;UbQ*xC7b)iG!hr2J|g&G
z;w^Bh1jCNIa*xP+COwGwyoj8{Ic%M*bC-zwugHWwd-Bv8_vh&`^ZdIBwo_Jo(@?lk
zyg)S_erDv-tQ;WiBLQC!-roY*b{%kCz;efeSD4tgcl80*CSKwMF6U;%!2ibOd*XQ1
zKK|XT&Oe&qK&3C>IWEZFIYx`KoD)K?- at 2-G=EOe;ei3;02Tg$mp_p%hW&7+JuxI%1
zl|F&rOE883Pq|2?>BXm^FM=DtQh6J?qZf1`U_Dor?-BL!BKVD(G(I<CkkSP^_G=#9
zL%R<0PZ6;<!58<0=#@o^f|d&T-uJNHinR*5rJM8 at 7JD+2ZJVci^@v8nb@<7CAvPW4
z1%f<B`rG3otd}Ae`nSqvQntq|9_E8jJ^K04fzRYUk4~aG+bFyEqGpQZDZ9UI6v~h1
zy^p$h7y8KoNta-$<SF^4!4z_f9OAfv)%5!6ePgrpIpV`A at E@6svOh;;Ns}*ZJ_a&=
z(QURzSBVS}TGt;wxFDXm*RIfS{z=55Kvu)KTZUrOwB5w^Fxe#9aou+aVv`joi|G|v
z7r;4Qd_rNcAP(zx#6VnoUv>Vad~g`1WnT7upRx;JBe}EzHl>_|mPp{;AiKN*T*lkJ
zI_e-P>rkr-vd$0ZeW${Pi at q@Q-v(fKiGAk1CBEaI>H2f5LMg8peS`0tNpyZg&v=FG
zDB6&JtTf*h at dDm^LZ#5l)Ngw!5IfOFhP)u)*$Fk at LtIO^bO`S!_>p?}n%*4n at _ny)
za4T%S?>H7qoc<l+QAwO4Y$h{hhe({D=U)>%QyhaBlUB at SkcAgc5o*c5gwHdXU^5UG
zVw%l|4R9i9bL2mE{Y<V~Ft_(Vw*B{iRPSg1;{-`H!N*YZlvcFcp~M!4GI!ItL=RQZ
zBUm0`JY}N?LI*gfti?5hH3Hy!Sv~l@)xybY`PjeTuN004CzO!rsj4~n*MouiY9W|l
zdWP-MQ_nqXg$n4HB^W>2b<pu7o%}88?;5jz`f;=jx=$9tK!67=#e at G~<ZGLxLnTlD
z^2aG*S66~xLXLQr7&h)lA)T9_1K;se(V#Ush=md{$>8x!H%2juz<pLrT+V9b%OU>S
z)s*9`-0B?v0vj88hmH?#7d+zF$0xz|St_x at kD2Uig?%gi6WH+$3xrGJ&hL~<+_6h|
zUySVkmtTL*^z?j}W}@UU at V1sCE~C at br9ButaxU!gm>aE<V#L2z!{@lYkAhQf)_>Lo
zE7{!9bH+I#n+DNCAa9VIQx?cimPUq#j+T(D;up!S;3Xq6c^!ORfBX8!halcInmQ(4
zKz#?<d^z2LchrjQUf@)~zJnf&<5#Jfz~xBs%r1Wm{P`9m;tmpe)I8oXI-20c_Vg2O
z80X|HuJq}f49tK9x}v<G81iKdGF7%h?>hsZ+mn&$1#WG0z(kKfH(#1HjQH9N$I(YO
zYICS|x(s#}Z?3_qp#B6Vf#@bXi`>*@qGNEEu=VDEF5%O63i`p2<71eCMCMxlO<6Pi
ze;MrdiX&30#y8zSVphnxZ0w(eK6n>)>8GsEeIjLvT}*Y8{{$O`lRuNSowo~KK^uhK
zJaU5C1|MZJ=9~ZUQI7brLO$fuGauz_+T)|dJnD&~5b1)U0|aBf!npWu58~E0WL*dU
zT12Ifw=CdPum5_nf4%-G>|yTI!PA|JtJYo3Nd<Pt7{o(MIhLC_h<oaL<nX>-)G6NN
z`S0>(&X4B}oiF00&!52yv=w(QuoXX^uRLn%``vNjpt^qa5{(1bUg3RYE57`p@~o+E
z(XYY}aXduRjN=ww9=1PZud(tLW9*VBuN3XlM(KmHDtHp*1=vv^2MnCsUADu~70{)5
zg8e72j8{HHY{P}&6Dr-dcQ97dsOv0cM}_>9QV1FIm{kcm_FM4PAnxHYY`5EB(<Je6
za*o9}iCqJSr=5%c>88hoAB$52d?-w|7E9B^_s{)jKo%7ju5tFocTUqf%yUO{n-)4;
zG at a_yM{ObY!$;Q?hMTbYp61P)U&E8k{}npz@{q-v$05sLud(%x(Qn!wxyV?3-f-R|
z`ff$Yd$6S~RhF7W->&eTVtZ6i&JD*HpADPW{NsI@*XExIjl{lw?iOEgilN at R@s2Az
zFI!7PA6v_1UxUjeD%yuJ|9c!S<K^I*K+Rrk*YFaty->3YHs&+fKgmN(*~$6J?L|AZ
zZ|iMYi+MpXjfl!lVn2%A|43;rQ=wkR%xz)ob*TnEA&2Wo0(A%LCs@~-L^Y>`n(EVq
z(@)-}^RqUF&cgP1Y{z3g5$iN%UD;A<_>v&b#(-$epTfz6k6rnoLVnIIoM^LOz`wa!
zt-J+1vyTvQE{`86yDGK~|44|jq3t6j=Dg#Zi63w;un*)v=mQN-b{&L1G at HZ}%jP at P
zB*w0ICmV+;0SATe{2RQ?`K>$|Y{_$gFCGj$g8U0h#972NK0p5vzT4eAgdE%WGkkkh
z5ofC{g{fJF(8TKgg(+DbJgv=rTvgYfQEQwg`3{_iT=kL7ef9<9a1%M2j>xG)SU<qJ
z3Tx*Px%MB$YOPDSC>$}L+NX2gZmi^{C{HTV!;hNfTsQS^<)!>c<>ex^_Dx})*G8cZ
z=Ra50VLw8s$M!eMyZK?rNxyJ&hcMmiW7LcF&Mc+Nv~Y)mQ5OW|kD0$wm^vV2=XP*y
z%)<3wDjB@*p-^$Dk~@C>M&55acToz#d!x+;a_w`{DcIy3w|6E{KB$vFz{h=QSB0g)
znF^k_WR^dn3;42sG75hl!EzEjI^<$^dkgCqwkW>iz22lM;H6#}61}h3xQ3V12)nS-
zQFMxGQw*_gnkNrUbc#^tqSe<4-(qciU0>#PF6{G~7F_=`PiF4i<FdH_OcnRgB=7W4
zJewL|7mj58n2-^)jqGy=SGE1oyk-ZDSV-5Wikqgle`ww*H4Y&5#F{0%A4s{7KgJ$u
z`OB_RD>MN2>}PkkpSKj>k)PaVp25D${%0y=dwd)8_&8x|&L#3~8X>WT*dE=T1v^W!
zZP5kT2`c1Y_z8)fX9&uafaCAt_;hle@`i@|^K8u%$jpX4BCnRJzFar#sLlZ&DWR96
z>;Y(Vh?}G{fYl$vfiIzQK*BuMXR;<?J#_jvp~qwbn??L3nd&pzD6&>9*9N{m8TqFk
zgP-wU>=5-k$W>+sFLFI+Ci?am*t+|2HkRdRInEcj8<;-+!4-R^!S_qm!q?J;y82!C
zf^i#ib1?Z&dByrMgs-sR5Ir(<YsH at F{mA_B5=U}fp+Y+!UpZhwwS?fWN$%_4obOZ4
zRF%vkcms06Ak at zg8Sw0g)5v`G>{;hwTX!=Pii&C{aW;N1kcXU_c)p_G5R=3{e+<!Q
zJ>__LpkPaWF8n8LDff`48F^e0w+Oun^8E)NeMJX`l;*{6wbLToQ+hWm^9O at h4(IX$
z{`(yIupF{Qso?|vdc?t%POtF~GJnz6j|)t%ei*^J=Wmc)R(t at zl}us>4!BDQoIH20
z^(L*r+C+E8PFCJzb*^ob-iw at A>9YqhpHA>&r6+qg)J%QZp^u_!Nj#&eO<xDhLqLgQ
z%?d_tMBJ~J_qY`(^9F)P!n at 0+*ZK#Vzj%Hvw_Ka^*Sni~-`&K%dnWtt8_ctJCo7-g
z-+&Wf(*9T}o_C1!8N!81p4r&qtOuS+l+a4z(SdE7pBI19&Ha&$$FjiBNc7l`g|i7K
zpypTP9op)UnmhZBgua4u;v9*cxdt0VC-j=zk+bk!bfb$-Z$$osO0Veg$~&-YKEZVd
zh4FFSV#48>GVFI at yb=B-=+EE|^)B@$7 at iRF4A_P{F`vbN8#4wRA~Cp^4_r`i9+B<J
zl%c at uBi5>Nz`Ws-o|?3QcL{eSIMl8P6<b_PK9)S4f$&u10S8z+MeHE4+vMI_#O(9G
zBJVkHhyN8g6mx^h8?z7CalSqv)#@Psw^l2gADaySBJ8=i&MuUyMiLBQ?Ns$}c0ENk
z63 at 0R2!cH{2iF<0+RQAb=|CO%H??~2a%=X1hRAml$$RVB_ZpNWe%!`x=l);!OFG69
zE;fVY3HvUCk~{-EEo at nA*ly_EZa~~eJ<4w5e-%`Q<Mx24XXO_;;$%8^88Fy_l|=W(
zcjlm6Qzbq5q&{-k^4$?8dy#V9Ve2U8|0)yiH{kx<-un&g{kGowZS4Jq|LcB_j%uA^
z2uTa#*sBa{+ at ryV@0&Ivx=PRK$<r(Qm_!Cfy1~+*PlugnVVH%LTcFoUgNA*sAb5-S
zF+Ze}_&@bTfmMG)@T=@FaBDlgY at WDc#5n_ZO>8QQ0|>`Y+hp~W-gwOmY`mt3#2o^M
zJw<<m<X&NYCeK5zUI0F*0Oc(lYsPiogHM3)uHVA;2L2}Xcltn17rh{Mw_pk8 at N2q8
z{zp^{8`lK;2WJ8m%)hLj<9QZhk&{=ku~V(tY8cuIw`MJ3*WZs1BJV(q^K$6EDO7N$
z2sU862hSIi_x^P)-iz(;$-4#PikRmQax7wwgt2BX4glsHxlU1rZpc-Mx~D{s(#vCa
zllui$*yNB8m6X*}PPWgsdFF!WUOX$G=%zWP9skTh-NQy!rCNhJ2d?)3awZ0ne$?2)
zaFK_m-d?#3{k=+0x${ys+36Hp&)ow>%oY*LMbizO0&Eb*16cOM=U{;@VTLYo6}pik
z?LDIJ8$ZRe0?TI{^3NhT4r~|dvtbt)V{OpS7|=jX?0-#@f_Lxdgy3Fqq at zu!x2|CR
zft-A&jUQKRE8yv;;a>12KmW_HQ)TjFZp8b1glp?^0?ksNwcs(Lx2l*oanH-<Pim)N
znTjO`iyliZ76TS778*-7mZex!SkzeNV$ooEueyV~4(}O(bvf3<@yv!s7XxfMccdOZ
z>zF0{{TN5Gar`vinXB?geSW(~<g=AVu5iLB!o0?D!;aUAvYi(UjnOm>Gp@#Bz><qN
z-8XQ&(R$)y2*y{$v=ZK3=&>o_NgKnlH07+lwKGTS9-U^jOEZvz6FE9Lb75N}IX?D`
zD~GSEgELpng)DIy?Z<{#Z+FV(>Wj3gf9bxR#tV?g3)p-j>w#?@XYXU!VL87<Zhf9$
zTkUhx!iIfH7HjW1EzB|~a&qx=k&`9w^n3zKSe`=udgq+<u-{UYVW)%ve{V}?DQ`01
z4i-v`ZaP2gH>aHH%G3<$5vsBOe%Nm~XU)`LdrsI%VLsM6C4*zvgbL5~LOnSa_FL94
zPN#5&=NO*R&EAt6b}}oB)0GeaJVTo29PVw*)D*bE9e+~#M!*Tdz}L^9T&LA3udmj~
z!%k<uYHX&b&>fj7!Ywewt#=`|ed?kVUPfGbm436kDra*~UYqSe&$j*weU5i$Skk6j
zkoN`<oGt1nn(0g3WdbpmL}h(xp7WwT-&WU;2 at WXFTn{~F4;5nB0Zysy{ZCf~3~e{>
zDsdl{m$*~puez7WIqrce at D<CqA_nU3r68pf`-|E$u?)m=tanYe$)ZRJXV(K$ob7Yu
zL)_$Ej$H3<NwKzfrF at Qa0lnw@v+GFtqV_l}lX36pl(hC??6S2zWwvq?mNx0!u;2Y%
zagmDIVZW!m8c^f=MnHASKa>QcX%`k7!NC>wJGL7#Kcs527NPCFszbagd{#3IUm-`L
zi}{E>e=+kzY^%b~@o$C^Ea`8V^Rcf9s}ktK&VY-w6F9IQVF}fa?JnN{oXdrLHwtTm
zGG<W%&n*m!Gc(|x&df4aGJOSaX6`q(GyTHO;n>d1dD!j~b{5;)GC$BM5 at e9e`iK3F
zve%#t^~^HwHuY~??S&?kYnI_r);z2;3^%hrz&g{=!oJ&ycWDie`0ET!Z24yy{$$sX
z9Y*!%Fj*tw%!1`Q1^){BJ+;DBxIPaUynj&bh%fdUHL&-)({Sv39HWqj0gDpep7|lR
zQ^U^ry9VCY$nlIZI)y0*T=+`~eyZ at 0zw5PwCco7V_%qhQS9(ksVLNa=88~jC-Q6`<
zxzgmfj-2}zyg?&`@7NC1l5??kcV~xky~(cx=U~5;e-bP7fzFs9XRu#}=adQiV1EMH
zU%44EC}Lr#?LY~+_aAn*W3Td%sqflW=%MYe1-)iA_1*CY>;#v2Gi=4Tr`d|{>TL&Z
z%*M5&!FzvRc at g-kCt=HA-<*+YH~E!c!#mEf&&*}{fP#QgatkMU%GEYWdEHaqwf%+2
zwZtrD^OkJgBmdWEAvg&T$L((WQrU`YzS$%Hd|X-v#-ym%#%cq(xe-B#3kl)I at I=q_
z6l=?a9D=K{81BofhGCou%l%P#Z(lLj9XieGl4jU?3di%T(9>#h4~rMg7g_D_&&*|T
zkGA(7!*@y-uxf}g`gC6iFqFIrYP&WH+-6y89Eg>$I38Lz)FM9V$w0${J at 21#n}dsx
zr^aTiNm5?*)p1;~eH{}7b2r7(YVfVG_iS=J#Pv(8>ub}kmb=gyNX%9(a>wp@|Ad=A
zTV}z#?m`BB!s-u&)D?Ota_*$!o(UX>e`%b3Y%=tU_bR<~68QH at k(U}+ROp;7u($Rk
zgc7_JY+!?_%MnWmHU;x`KGjA1FVxY=PG?Br2BD(b!ZpP`Va8KkME`- at o>8%9bUtF)
zt_u7n*Wp=hks at PhYvPs_jxiIT@Pkl4<B+%IB8j2*@YmrQXQYChzwD&bB~KBndMh#+
zwqWGl_Sl6n-<N{xh4 at -7lU#rt64UuNPhmRvKYms%zKQ(buo<=g*STfcr%ltoe#*!T
zt0Td=5R2Gi=g&$P?AM`)Ep@`zS{@OyWi_3imm>(U8E+#t-dP^s$tVh|B0V{~ZM|5O
zN_{k?1+FmDKOH%d4kNc+E-4GzcPinSA^bDs8Q^nDS7ENo%VoFa9KwCQagWIFPr-3c
zYwz}9Y&$&L{ll@{<JtE8N^o3Hbl2T`L<78V9DH>zjV3Z6bc?BaeOQS;2i&h2sKZhA
zmVB;S<dF~6wKX#bK8*<7x`_eS)~d{|(|_+3eM{u<#p0707*?Jc99Ek7LfD}^(RlBg
z$-MbBX*|V}6an}KM;27bukmZ*LZ at 3t-QQvzHNOFi-NONgcz)m+3D?F>k at 418DZy_c
z7aiKJRc1Thh$T|Vv7o&0PjM4!6x$wn^2?YRziF_=$#<m+vP(J^WfB{Yneka|zUxyO
z*3%?Mjzl?i3Ckg3d$hjghCh2Icn-8YLH4kd;5zi-o>14O5&z10wAHsOeO?96z}@?m
z?(Ky*=B+37co*+HCTP)<`X$?&uubX_9CZG5*nWy_ at c;SH*zUykI$UGMc86!1(qX#=
z+u#Cxeh#+D|G;znYq8yo?XSUQHyzuzvF-UEE&5y7{shMZ1TBQ;iDNIzF>V(;r at w*Y
zo53}BK+ppD9NcMwqg1p;DfV#WOpx3Yj<0HaP*3b6-cQ4~$qxG}!4rCb*euiwr9 at 9o
zkUT~|?GP?ydHH at sPUtqoa)p8qCo at K&tcx+gesa|2ZdHuGt4|$P#r~f$>MwVSe4HaQ
z5oc8mepvAH7EV=NZi=J+5N1qvah59EI4ad;eGcTQC4_4X{pgAA82A-VJIgWN%)8V;
zr-0k$@>JNV3Y|@cf>7%c==NhNeM#VFkVTE%rU<PQ9M8e}u{HLm!!Vwu+ZJ&Z1MG^y
z;1n7Et`okUyF#s@@1PuwlVDbT56Mb>D;9#QT;D33j<IEdvdQ-#c>a^XL6Bp}j|efm
z7LYu*ALm`=Q*6H!kgV}z?;D}y!spXLFU9zt0~|i9E1<mJk+|qe_fzl(IDZK at My3w2
zX#^ZM-plAyY%Q(8WTef;buL{G@&7Tv0cf%%kI{b at Vckt)sG%p_@$_@`LFm%?{(}kM
z0mgGV;RxYeF3Evy;nlytRnW(H3UvdyU$uA?cwHPxEVf)4k~`PI7z%tg>5XluE1$+G
zn?4Mp=iY>G{zJ_l2`!w2XXOT8VhwU_gNGy{h*O6?bWS+auo2&l_E6vhe(k}+8M0FF
zBKZ#aLefV_FpegcJI)7n at -ym$y-x5We1<0W+;RAod{Fjr{(~{rl_A&9Davh4!@pXr
zUdIT*B_E+hE<x~n&65?61ZR~aiD1&zzmmKKzTnAu_^Ft|v+o3yY94`y((C-k5^h9a
zw22eyg~%H at hj3DnvauX6Ch~89BiTD=VJtBJP80lXM at dZjl}z04V6U4^$_A_xxrZ$$
z`B$)s$%l2qX4H^2h}FIDPY}ZoP83`>G&YIF1P>+tKPhk;&cj36_?s>x=NhM$Pjax%
z at aVAYKavw2Q7xu(;1`S}xV<@_<2ZC*wHz_XEZ$R4t%?%-TIu!6MzotetZ!hw{6C%n
z9xw2<+Z2Nh9|<DESNi at z+KEaEU*BDU8~;^8^l?rbY#Z0~>8kz}+rsaW*n?m0kZ(OP
z24x1f8vMKqiBAz+ba+1}9&$n;Yyf%Sn4h4!1YiG6e4`C9_FlV>B330$wG#GY<liP-
zq_{T=wsHshA;EO4C;BRM=y8}gL>vqJ^UzZf<IH{&xDOAjZDW&FQF<hoAe;r@!YG%9
za4d6jDP||)>U`&-{8tEe9ULXi#Ge{>2e$O{C|53B4;yZ_4m|Z#1HE3uATIpANwm%;
z%(S&!n*pD}(zy)lBOtc%$(ZZw)i(G{{qddE=zmwSz6ef3jKkU)!Ze%xPbG3BXDe@;
zmThqQCL^D?d>D8`@&0=74g8KALP=ZO9KR!vG;H_!i{`W7+Bw}cZ0l|0>208iEEU9w
z at v`L{w4TikDH&E=SCtgt1|NruPUzp=2l4&W&Oo16=7uau_HOsz;2mvxdkqiY5$!(<
zI$(Of4)Nurep=c33F3tO^{kj-cvgrzG9EhWvuC|5dCWcw`eml72=ffF5#_#4o|ji<
zGq#oBdp95kCB=Nnr<B at Q6|}}}8e9l&9!q6gI?tUq$M$I7cFda-a$je$;pMPlY$&RI
z_}#m=_3N#3frm5)Y|%hIH~ywUd}pL$tHQYreE7GN&k62H98FOLUP54!xhs^dz{dD+
zpCZ6sL4jvqtp<k7qF+x9B=x|Sdlo5oz{({V{jceRyn}tGg;IH+*|s7tIcXorV}f^=
zQDb-s?~-`wKyYg!2fB72_^83nOE at L8tB{+p9lT#Qy<FL at e*t-Sa-o9{+6-Msm%1>>
z`*tV%mUnZJH*Pon!x&Bs;<0lFB%9~^l-8_(Js{1e)Z)yNbGJk)J^uqSVP4ZemN?AP
zuiSl749%#w;JgjCt!+m+c2085D%x|;ms#@hH_WGpxxups42?F9&hWm?-rIwIokSsK
zIQMm8*YjDe98T;iZ3iJ^693~y)X81=uv17o+6+#4loxg^$a6tWIn+u1mMv}?{R)1#
ztu^B90>l9?8m=gDT|I{K4~^TT)x%a0jq#wI at Fm3V#$1K|m>!Ss2cL=Uv{T9p8-;m5
za7phZoCG(ksTRUZ0FHw$Q^dX}h*>BbiCi2NCMjar@%~_NHYv~^*6T~gr>K9 at r>On~
zta}&6z-iFYi4CmB!!I}Di7<7<Q!g79#Cemrgo?fPhyHfm|8R4|u0`VQPhbp7U*lqi
zB0jUBalK;(r`5yFebMI`H}~$BbaJaqf0oESMNx$WOL=;%40EuCbD5d}Y%In_*h_9f
zuCvg{4NaF3TUw)>POfRuXKrnF%qO-q<9i;PnsE`h%Ed*<7l30QfM;DC3+^S at e;3lF
z;3~vEjxW at gfzP`c`8AS^4(L!m?6Fen>Hi%2Kwl~=h2FcUV%x9(Kwc)2W9&YC#He!2
z1OHY6sXr~r1-d9K)7tVhgLgEbZ7zdnEy~d&FGmh?iJk-Y3Rq=ar=pLdKF;w<MoQJk
z$u;^??4SH=|2=m99Q0o6koJHSO{-ppeA)Aq77q`wdi&T6<ae51<KB{)3CvvKS at a2}
zV(-Aj$W%@UDI at CXy?_*8I>~c?&uZr-!A5ls=M=^d$@u`tBcAsH6Q<yVRG0>?icGHb
zDV;>}o`@M?TBXmTVPZ;1;)>5%Tj+_rcA`Imw~6$_9^{Lx&V&8mF%MXd!>TCkpGBO?
zWv9rv5PHUAtUtiI6YKY|?!tNz)=xM()n!30k+mRaL{Twjd4H!SiQAwJ7F$LwkQHl3
zZaKwR#hu`hyBu(I?o+dYa~<VzY350O%P$M%3b!Gz%Q=*7x&&B(>QU+xUVE%ec?0GD
zGxkU2?Lj$nJLn@>Lqca+>*+bXqhl4kH6tg3%V3|<3%O?&5m_ptAE`Ig=lm at qri!h%
zU%`3M>5u;loR8PBa!KsXVa7$mZ+iC&C4uZd;{NINBV5iL>Q;U#Vi=$+F?w1joh8^M
z;0&uoo7}3k5sbO|BCwY;o&C8R(VlLEXAs|<afj|O@$n(<vMtVmyfFl`G`}bYvBj`&
z7OmoTIZsf~>+rwQvbrH3cKZL)=+cgo9V&wSQ?YH#n`YOV9&BT7Gt$UmzUi3V__SB|
z`mIb=U81*vha^Y+Wkf&fYQ)f*I;mFurKTUg=S|5Q&-|cGcEtT25Vz7Y>JOh3Wh=O@
z8o=>fNy-p8lf2vNwoSzNGX>ijSx?N(B at b@47 at rE`i<sRXljAkur9 at jwL;T|hSf_)R
z9_O)i!-iXj=iCL(`A$Hp#!(Va)gkuc2kN5IIa*dzw?vDvSgCa3KXihJ<09H(55|&C
zl*b`eqa40N+QAv at oE-$tkyOaJ6V!81Zs?(CFOjTl`XXnt?nPi0Uj$D3MgO714=Fo*
ztkQT~8`$X7jw<+!KF8|BPVE at u4d&&>ue5>Q4Nc>XpI{uhi?ZDb$e9bQly<aPME%PB
zy1=Q8R)2?bbb4LH_ogpihVuN$_L*52t0q%tI8&&DViV#AQ(#Bd4m;)ly>6pZXk4Vt
z33!6oJg=!rt|d#Y7N at GXn@Yql){z+3|Hs+8$2D=LZ{s3bzyZbs$RS#5n`&ukl@>vY
zE22O=10f+0IkYtaskLTEhLkF at +uGVLLfVSbuC<7VQk%6J1IDhlXjK#~MwAe(wMaqH
zdSXaIR8H^pOt9bG at 4N5skKZ5pWHOm~=9%YsAFlhlb0 at ATfV?n&q%`qF)pTDI=G#D9
z0G?fJ{(VUzay(|u8~mSsJ8~k_594SdaJh>xPcvL~qo2cda(VakR8=&_-b0k at A0{?;
zJ2Hm)3(vti0=-c^9ys>#J`-AVyV6=Kx)3v1B`N#V)<wftj&ik$;Gxt#8kd!0Gf1kh
zfp2!GAK at zn#*O}&Je%kh<o)r^a;ha+DgJi3w3sDhm+-R^9Sri;XPC1wgrl4FtF(5#
ztldmFx;ekHH*@5RD&m_hrmm#Gwi#ZfCg4I$J-+yU8Nc1YTT*ZfvV}Pna>5p@*;m0;
z<45GFu!&~lsw8vw>q*LExzg5}E<aIUd#dgcK7;rSw55W#M=A&3rLMU`MfX(X(mlB+
zgI)?tE8WedAKzif#CL|Y+xCPG{G1uRtaO`{OW$U}dz|Dl at yV)ma9Vs+d_KQk>~l5K
z3D=QoDM$1k^8UVISkr0<#>bVX4tA6traT7x(3BHAQM=rv*r)u&Mqqz2_rX7nc+svm
z&pO-7l^gN at k0d6|vr!C=+HH{})~oji$l&3+YTI`UIX*uI!L|rXkh`{V_sHyHySUl=
zs=IzZwv+pdt{VHsF7B0RnSMl>-7C4Y8tt~Phg|Q4<Cg=g>YmW;t9Vw|6TCLi*KmUF
zV9K}Ua_6>f;2I%MkM=D;wBvYwm>6qC5^}<g_B{`sWPh<#U>j3Id at N;Wi9g?<dgTri
zLl=22gY5kpFs&-!;TJ<+ln_6c2>je-4OOSgdZU)2|9{4O{)t98Bo4Cd4B`}4+j4cU
z1$zQR`xV}E$q at IOg4(j=Ny6Q)9WBg0yMfD*4^lsZqy7*$g%3iO--SJ*Mhzb^%Elf(
zb0PSee!lnww>Aen<m`RyJHS0Ft-(R=wyL;c6g}3hMHx8pV)`?PaWMY*jPfMJWfQ$s
z;3Tp?aA_56YcTL?z6xTe;`h;+E{<?s?mtNSjj8>UuiAx~j3NAg;Psnj8SE965>9Dn
z`w!W+TFJK2Az6 at 1?j&{*3 at tUR-g6W!w?U`z0iRgA&t}Le1UH;5^09dU2Qp&UFwBSE
z$<?}Dwtp#iK9!6zUxvR6yyjgi61kZ~4?KL_5q6yCnjR0%)iY7c$bX{ygtvh^N0I&Z
zZB~VPOWxZqOy{5NLFAOZyFNAry2^P)Xr#}RaXG5q703GM9WC}u@~(y8UBI48#@`Bg
zqf7T9`eoVKfaKh!Lwf(*uq^D==M+C9#uhQ!h&ySNcarl_Rb&q*cy{^VA^o{umE*C;
zTY`SXHP~xQYq$pJV5`Y9)V~YU;a{6tc9x8jzNCCRH3G37TY(SU%-j8b!&<T$@9{c`
z6(hV at U3qxU&nV}(LeDwN8Zak*Ama%!84?aM1pV@#{ka+OE<b=Xu!~@6sa?Qxf*XX_
zX`ss<(#L*7Fs)s00xO%0cv}tjUf`b|_+vg56WP|%c_TQ_9F$_Y-$CX`3_j0TI&W#P
zPsASYG(3y`;JF(yjvp4ki+ZNJ{et5 at tZ5p24-~Oj+grfvXrdO9Ij#Ifs3jQfd3|J@
zPS3!atyeAbQc<6dl!{H at +v=>%UfN}poCVJo(XU5;q!<3PkIyqC8){ErWhj4)y+OX5
z2Yfkcd^xKh+eGvAbOkAo^yw^MZ<%pKhh&@hcU?iX;=Hqe1aP@;$zM36pZh$X at e&!2
z1cw9eFXX+z|9<i)#GqvO6d+&KK{|4nWzHl1Sp+j5In=&Ns+_q<>W#SC=7hoBz>c!D
ziCnGF?1T+^1J_J)z9Vh{`qz{D at jm*$>Gp`|9v9x6;FR$!#Om~eKkLEQJU*PCKip~5
zMNDD>3Zg>;!4u;FPE-waDG$UoJnhy3+s)tpM}LrAa_JA0E!eJ{MR3r>UU2vxa61X4
z4aZF7@#^2MOeQ$!=}Cmo8SBMc^<JwXd$A1SBJPm7sHO3KN{N1LNfYtqS4*JJBToSM
zmX`;xERh)o+w}A)*WAZikPdDH#_DVv;zlqL9JxL}LWng2HZ{U^UpzAdYw}^lR{tv-
z;|}>FiJb!cAEA>d>p0DA_xuCM39O-Q0_PIjOqn*%#{&BYVjzHj@>*Sw829mrsV6yG
znhBpD&r7?J)wHhfN<&)!kITd&#zTRa#ksC|!6-?t*wPbBJUB)?r#1?Pk at 9E`y1nP4
z1*IKK?9`u?6Q?yoZajziVnVyw7#T1w+Qgf{(q6Zz=zgXD>VtucOD{4R_ at 1L{XYvzn
zAU4{rl*#SvI)?B+!=^g?;-8$3NhD{o_(yg>&wc7SX+4o&qs9a;A#F-xCgx#YlJUvZ
z0Y^sicGR;o_}unruYy6+SBLhauQK?)>SEIrGC?Jc7<uR?*xS4+N&I+7oj&gKZhc$@
zCtRkqc+Hph$7>o-%|Je4QTS3Di9MqqVoo#@8;UFMHp%CLXI-jQ=qSRo8|p{KpK2eU
z<70*|Z0X8NOgU`4NmMt%S~;%K^MVyv|Mv2nZzj%z-bduBkd%hbHce}%y5qPg%)hEl
zty*e{FAA!fxk!v0VZfnziw}~xPr|Xf{(NG4W7M>F$$g>z$14me`2UH#uE1D%6n|bu
zVttQSoZI0#4<1XxUH3b9)Y?h>T~r)p_o>Z$6x2 at 6qi)|FlltBu at mH`NK9Y|F_Y_&<
z&xW2caMTKnC5iEmw{{q7&iqJ4GD(U3@&564<R48ahJFIxtc%F?XA2!hd{1Y=AENk#
zkH_J4Si;o+ZWoOivBvWsARjQ{tnBQ%M=;(?kt+qfm8sPEL;7^sf622*8Kf-hi5(KN
zF)RanWVyPI at QYwim=rZ<$i|zLXx9rj-X6+r at Gwkf*<c4hMVDw)3)WuZzi at J+t~edd
z{B__Kz;Eh`(=L at y07j@Cwt3|3OuQX%Fy}7xSL~5kYl at ZmW7WCWVXK4ePvRho{Pm%F
zqD%0x>A=Jwo~P_}<QB0%=JlsYK9G#c_1&=N5}O_7VvJ9?_%QUrCg5^D7UUv^>x6D&
zXy85>a+5oc^ojZrx9V*;q3f(l?s7BOb)CYbQKs6nDu3Rl|AO-9^kt%cwx%KeZZmRg
ze(9T}kq+Mmebue1R5aYDCUJyM4RAZ~#YLsKgTwCl-^#wjUNH;$%1Wv+Om_C>lix*i
zv|L2?&{0v#u}7Z^YKuY)F0o06ts(g&j_(M22YEt at 6kDUP&mG$FbH|v>T;%0!d9hHs
z8oaeMhgh{1FHxn&wnzC-q3CT>Py%q5-`3?eiAud at W|R0{;4IZSJRj at utFG$=^t5BZ
z#M#?6l#b%<CpTb&nMcM`{ixUD6tb{obPtPoMF)5bx`B(c%e07 at p)MTKzq#EDenzrB
zJJ!N){gWDT{^BEHA`&A~I;ttI)T?fuuDh7zhxvA&hwa;@VZOU_`MEgqbL^kw+GVb5
z5v$=<#0LG~uOQdvxUTsf{wEE7?{Te(%x3Z7p)t^cF>rHtq^_^{tGpROOCd|4UBN?d
zp#0~7_i5v!usEs*>k#lRBUdtG>59;?7^D8Ee>(E2;(vY}otIY|G>6E~N)_IbLwpBv
z3YYrn7ncrTAA1YAwrwnf=OgDOvHKv_!520llgmH-p{;S*=pQM<Egl7)q2bCnY7UNH
zMSS1aynpW?i#%ji_OjIt$2K`b13kLH!M2y=F>Da22Z??2VHM(nB|*lS$%OCT-R%2|
z0^BTF&Y4NAo&Aedh4dSVm$_xg7ZIo9rZb9+>GFNZEqd&C4t$MYWFi(VIq2}rjK=bh
zGvN<U4D%H9sS05`d(^aywjn30%^2A}5Nr#wMP)aZmuAWbO)1wrg|Y^Ft6tgadx2mv
zVJnb<do~F<^^&LoV_ZoO at _OajG-Z`~&8h1ozZ`NU^}>E~p2`E4{$ZDm1eh^0U%<;V
zv{#Y5goH1i#auKIA0vAZdWnhf_NvB<4+k8`-EETSA{`#Od6-*UG#Z)Rbo87PKAA~~
zAKSMl&SNJy{7-Oxrp`5~^9SgEOhoJ)e_r1ZH^xDaLe9sedap56D{6y?JbT0}=KLxp
zHei!&CSc8%{ONnMg^9=>vHC at n?T7v+SYnhh(m{`fZWUnel#+5j;JH_9Q6zUtGWPei
zIJZe1$tj?l_=VKHoPz!MaAl9}U+i7d at 8DDSuU67Mz-5zo?bl#WarsBg7*A<<=TVTo
z4cWH?vfx`W<aP&S<Z at JwoWmOVDP$bvcMnoWCt+M<$nEe!c2aZT*DHSPbK-S`$38IP
zKeUAr`MeP_d^U6;Gu!c}4=fesqkZ8^*a92uB+g#ym-=hGE%(~Q2w{e~8MeK5iUKTF
zCq40HPO-5+=StqELBr^P)yh1(sRQlV=AjQN5`0+9Udd(jtG)`%0 at u(Ux0~+L#4aw^
zyMNqYa_lcJ at ona0-pG|no0dyW-Re~2Wz;rqaZGLK1opeLFwHHZA<o}H%M)!3Vv>c(
zO_QHha)R-LT$jmTf6K+Sfp%A--4`Z;(^Byg>?MAPKk6j8=$RC%MVO3rB$FmwIL;dQ
zoPm)Yk1;i##9xL6^8NELjJHXu&*u8cy9H~gmZ((f0$K0r>m=T{bSysOaE}(gwF=0e
z0jlw_9kA&K0 at rtx=%u9H1Ywn*!{5Jxkt_EL!sy?;a)HnM9C6thWFOns&CS{R83(>U
zpDz(VGd=2{%cjly!1{r+-)xhVZGwG}gKXCcUY^q^+w96`1%KW_OKX>itRKi5Ji*+l
zk_7$OE-KqZ<dxdJMAlP1N9sppI at 5ezFZiVgOyHENigR~jokyG(d@#xQ$jClTbPZJy
zIAc2XlD~terL5T~yWbbZHrlJQMJ+kqu@(y4q()hLU(}*T`xn_FtbZGvF^k}<eNnBg
z3)9^)%A9>s3&7=?9s39B8Q}8!;C~O2yHtnRD7Me1`K;5nmi#XJoE&rQ<apyK{=AJp
zzYF8LLe*U2<T8B^G6%t$CEMD>Wx^ht*igZ3Z!Nd^L5E5%;W+RNadS8J0?)G#_#%CS
z<YNckVI}>V*<?AsN at bX0yrWog)>*e`6}TvJyK2LaSq%{tPbsbkCe%v4>BM!Sw#@&}
zvi?>Z_pymiTQ$KTskj!HylNm&7E}+s3&E9C5KcbTc-l`j9UNxO&;c?niCt+4_Ulu1
zkJ?Ucbi)4DiFmg^gd+aj0M7OB{?Q$0=OHElJ`Ht1aJ?undATT9_?>07Z9eQ1VqGaX
z{XK-Ss2B1R`qV(*hK%V8J~_O5r`nI{HE620k2^?r8KlO$J~hZidRW)oouyb^<j<@T
zZdY${w at _LpU~P{IGN<n&fl=khw?R)(*4c_WjkzN4{osV0>v=B+C15OWG20!PZrH0_
z>s_wI<W#4Yv@?Fp!(8C}9Z9sQw)~q;V`tq($j3poLbS(<37f`FGH<xGGpCKnk>Hnd
ztIez8j_yw!B)@}m8=c2gq;0p(V=}kCkNJl9XZ9L=ItSe?v>y{d6%3d1<Lw*e=%Ko0
z;9CQG`f|aKxf4;Z0#e?#j;`=T8=DGWZg{DpEBvh0_AIfNZf)k$Er0b*hy4X at LpymM
ziC%+5e{DgloV0%*+BU+c2z<#>+6bIGxZh#t5s9m9qOuAe$Gi@{?alBDC9sW{UyopS
zy&M}raK>o!e)Me(_!hCJBY)E7uIVIyBY5f$nx&s+nB&$aDOHBiQ*DCphdAsJZy4&Q
zBsrEY>3=S}-1_n-F}1f<&f?91BJ&q&r{=)|3*=YWWE1ar-4vV9Muaz~jl_FQNr)cc
zWu0a8)#Oa at V&_aHa?}75an{rlM at uoD^GG?u5_N$7=hE}8vS0uAvhNI)-R||vpJhMb
z%g!DuJ42fdnWEck5bf}c8}f0>$N1E=w)^hMvjoji?gamm-OD at A0e+xB!A0nDho~zA
zBVd$K>y!PJ5$XQ&di~FTujX}>5$4*zWf<P{ktm$1iOBKcq}O-L$|`KhItOxe1lKCW
z&LJKDwBfDyZN6*7CSImn!rOn^_}r%nkayy=dr&94*L>y4>&dzv!a0WbMlQ>5I${6M
z#y!q1nf4L#(va@~<OxwQQ%ex at pvVA*gZK#E7W@;sp_Jxuyhi`?$NzG*&Afka8}PaF
z?cT`wA$MCKxV^#~B`2pU0}SH_2ZJT0-CSyPmf(AHeP+^-y<la~OTKHoJzf2oduyn#
z?(pq7Z>T-zlz>Y}k&&+l=e=A>vwmCgo8HW1o;7{aM at va;CSAd|bEHp=Wp&R&wDIDy
zgJCNP_D73cP^FwrTUG(?uA{k^zz6dhb=WBLSTER2nbQ4H4sw6i`h9j-sIshnn9twa
z4DNkZ)FK``bcOM2Y-XoU`x<&Vus)Vn+nk^^z+~QF0~_syQ*U)LsZ;UZR14Y^?RhVo
z=|O#_sRJ0lTb(}{g9eQ8t$j07m5s*u`{a9%F}{<0pEbs}_sx_6Gbw4j at o{#7eUGHl
zS;y#XdnEgSzgG7{F5B#o=u9qtd5on}=rI4zF`q>^-XU9L at ILrH-UmP7xftMva=Wv{
zhrtCnir5JBp?|*&`FRjJ6p86*XIbDxQi**JTxurl)gBxBr--2&Wsx{-)nv%i{lE$R
zj=5W at U;M#!!LUj at coZHWuJsn-h(H{`5bg*2xLh5BxgSHg at Vg?SPCMds1Ia1K-zHwS
z*6k9H at ptjz^Z%3cQKx6l)pd5KCiEkp?7d;F5!Z%YLaxfVja|ZYZ|(f}b!+D at TepV9
z^mKy at gVn5Ci~mUuPmb)z!0wRTl4QL&=<V;j>9@~5iP2c7$l98XR>O`#E~tp^1vi%r
zT)x(@g|Lxil-=g$dJjUz>6)3E_<L9i;=Fd8`v~Xyy)wXyngO1cG{p)0?uBlCt%z0Z
z%DL|CN&H*8%XOZ at _e$&x);yo0tL08VBKrg;7$Qq1)2{(LmAzHNEZ7>y%&(N>Cxc%%
zk?d0hpQ)~_QqY64M%@M`!@T~Tq>xp>boUyj65i|9Q%st9{kusaZ-YOBGqikYlbzF<
zm^ib#H!0*T+}CM1zuty>BbgMl^a1W=%FSZ(A9Ad<8 at TnhDh=H(8%Y-#PL8t4o(NGG
zj(XV)M at QJ0cjzCPS1?Yd_{xC)<d}){C$Ob<0F&?o;^8iaj;M_5P8D5;%u-JBav*l2
z;`%Awz3Wch{kDpYw(C~iU99ETgbR^BXTeqpH@`BxJ9(>yTZkBb_=~#2fit;N);V<F
z at 3^lW_t|k at 8}939>)hz5+o1cM_$Io6;dHJ2%D13LMPSW;NWBfr+cMaOc+436$mfU|
zG6(s<f1 at cKll#}jw%~oxI}SkBIsjgjxW(OjSaAK~Kk`5A4&Cg)<7?x{f40Z}?N;hK
zUrn~QKu;LD-+aT7;JV&tEo^Q_@=rarwBGa0&#=DDn-APp*;~6MIxZ}M$lS2qW-FHy
zA4=N`^kuJqx at -jC#TbpTolUTPKC^u*NR0WLe-JwnWTTNf8|*wsRDM{$Unq6LXEMn9
zOkM=1dyR<5w-dp!eUpAZ!5j0?6eiaF4jKQ`x&+-e{MHWr{sO- at V@_ToIT|^d<ck28
zk2{H-{Adz4jNTane?It89|&%3n-BZO>FZC?4rVO-NK^tWY#eOIqX{1kv4M!rBIfOk
z>st9a#6q4156e;0{H$KcpZDqKm(JNOqQ}p?M))PP84UdKs55e9Ll>1WAE$jy^sJ at b
zQQ+NRS-B1K#+Ab*QvMsSgC~hPOlgU|Rg(9e^qYx~u%7gx&rRTDorw0Ch#2;X;H{kq
z{*OsR^5IS*AJT8aemqULt2>LfPUhu%F*qaC6O(i33;7o!BZ=OI+_|tdgL_3fV<34a
zd=B22Lq8HZ8~XoT*nk2P`b_ijY{=0DSqXUGm6t-jVJjfq{eCWt9sCO~q0YdAh`KqC
z($PN*OVmRiMBD-TS*YV?r@`*x7j%r|zd#&u9|f+~z}@mA;E;eFoS8u|U}cE!4D5w&
zcjWj^W at V+qc7*Cd8FrS}*NHAh^3M}FU)#sj at a0_w{+j2K^j<e*B$J}Os?tn53Hwt&
z{12u--z^2a3VVmzAiJsw^+<jt1!IVBj}*BObt3jkZ|IBgMMR=~BFTGUuN|)%kNNx@
zFnC9Nt^d1SJ+}^(nO1d- at -tuPPhHZ5`ttquVvBq*IR_XTKVmn>`c+2yRr at n+bUjRY
zQ32xCe+LHbQcy~(hwuB;!Eu7z4q-kxIkS)7FleXM0xzq at Ua&woe_Ac_7Mh5?*yoP?
zcMj|D^kjl7%D*oJzb(FPc+c_3<A%Lf`AM=r_Cwj!gLsDm-rkeMw{I(S3 at 12~qRBVu
z*T}`NIVC0j?y~PB@^v1ul1A*J@)FA=A|C?YEiDT+y`VbWC&GQaeSz3$^`RwpFB$A9
z#Q)-L+2B~6H&&$qmQGl9OfM`w=u>Xl(4 at 6&FeF)YZ4+F&f0%fMB`{ulA-GijP#;=(
z2JQ4SFY6 at pK87x@#fq1ND6>t0etDPXyvC>_;a9AM-f*7J)dznW=~vRH!KLIss)Zcq
z>xr(ru@|!Fb#hLaE_z6=`*UxFEfRQCp4aDzAoMF+TmYPI3|qcxdQfK2DcGRE364Il
zcaIS61h0~$>eG8)5?N*eY at M)|?Zbbw<TUa&T)r0v4)`CaYxLMke1r2DI>V5CYTF*k
z`>Pw51s#Umfc}kkBHuW2FM+pvhv78v$`3<FtV3R at GP`mjv6sleVNd)&+h(}9q-cMV
z|J^LATyOiH<n$imfYGZ$eH=r2uNwJwc$||`BzPlaNv=Py at A{E_q*e&sZiRV68#s=Z
zUX3(ieke_GI`^tLALw$F)gak)Eqyt;UPG{hGTx5F5^OK+e`v>nX{3zDJc+(N at T17)
z*oeIVcwW>8d#XcS7yRz!dQMt-%7y3WIb+RNWJ~J*r%pi!XQomX**(5q;J^}HAbuLY
zesQQ at nmHHxk%G%~>33d;Z+NWVF=~P}nR=AWlTi)qUE<eq?NR)Ej6vRj81PqGQ~`7i
zGo50Ie&cmdU}S3kU%J#;YfBun2Kik~hLe>8!z{QybJdf>q&b&s{XRAsg_Rc#Q>kIV
z6*Xb(IHHyj+wOrgSPyS6_&M?x*^`$Zk6cCePa)xrniHA3U at qz&KmDBr_58IB|Iua{
zXrs;0_cp5!rUEmq_wMRWooL<dE3s6!B8M~PbT#)ZxISdsMxjQxzB_x`NwPjM at aMY5
zGg(K{;BVd7PxyAIzq!^Us+=G5Jq|5oI;_iHm$Y}eQyV$VoqHJL4n~Z8Y1)n5`4__P
zELniKI_*X~jyslsXUF$1t};d?V~)B*mqRXKa|m>tXX*8}fU=6 at RY7Er>3yubg!)Z8
zCwN2In7&GWno-gALpzMo|Nf5jPiO~uWD%b0WW+NbEyP;w1z#b_SxZ&OFTjRA8teX~
z$s{lL5we%@I7SDXOxErHT&t;JFOB5)n=B&#LbmZ!yyPuoF>dn>7 at rY7Px@LpNoiG-
zxOJ0yR_pufIOKD9l{GR4=$qhGdn<H;3$MeW4TB3UgTBesO~GYg4^)a>IM*+ at th003
ziY17zH$mPx1Dr9(E`t30ro5k0HEwWBg|8=z{Khwtt5*^^8MYa3$hKbr*P=OV<-9RJ
zhEvFQpgVw%2_F*6+K&%8cMG2r_?#r`saeh%u~v`8 at j>9Et%8D9iES3J6S3&y8s8==
zsWF$Cs%uw2tGlQcGCSMn_#VZc+Di6H#25{K{tdaEU at dGa-=l7p#`P1k<GD6QS94vf
zTP2LA&m&h#TU)ZOh6yLfr59DpgQf+0y7w%XVt+YT`5tork at 5Es<If7*1N at VT1Pi-3
zDh>V6PvYN7GqT@?z2 at AwpTRd011tqF89I|%W4Z5}jIr{o{L27s?pIV2J;fMKuSd+}
zdM;B}!)5q%Ghsf4DT~bm*F6#IpLXRsBNO~+h%b4VD at d>v%?O$%gde_3+&aife{php
z_tczO at +V(SqMMljxs|ok7nm{2ZW}TLdSLJO?@p!dN~w80BM+RZ58c=e|3jTH!=md-
zc5eX(a<@LT)K=sllw0HotP~oaUq4G+xr at ujCrf_Km{EB#r<B$j13cCfJw4YE)KlxH
z^Q5~NV9T~v86;cV+O)1dV&U`d7n5}kT=1~-fw!vDtDUS%%rj&ks}h!WLPxVRqe*PT
z6_Q8Sjyd%U<4-uEX=9bBbUQ1rR50V+4+_ at t@=7y&FPmYHaLHuv%iCf17=*mBhPRLQ
z%X_OlO50fpY;_|-ptF_Pv)8)Mo3;=AQciMQh7{{Hsv|yrtrhTh?c&B{8b*z-Z07tL
zTP~|0V`xHtEKG&0yf~y3ew=%<??TFG&uyJu*#RH0X&%;9_mx*=-^C%GKxZ<BSFg|B
zF8>341lfW%7&X=F4brW8^k?r-`#KqU(1S2B=?h5^n~HTorZZx%f5=KFw?k*|EK}8c
z`VZ9&amJ`0#=gHgQugKOJ2 at J}yMB{n^wH#%SA~~$2Bl!$U1&U5I5i~YmDQCe at XP?@
zC$n?@A!IJptjex;lbt|*yz?lRf!wTL8O68Bdf?bbBX?Sr++Gn!gWFJN6oe7XC2|^`
z=drBzl_YjwN^ODP;0titX_;}zB{`P77s?-lwzIQ{kwE?IM0Uw{BYQBlKjg;-=|%^g
zPIBsy--4RF51zZlL at eqe=fQD<b?x)MLhTDbP;%JU=26yMsnQHw7dR`(^`;x$skcrs
z8q290$USV$YCYw<J#TYhvZeEClI8x-apoQ_{DoRpV(Gk({~Hk(pw9$f at vn-jt}?`V
z*yBy9zs3%jpGSsk8C at YuF_&{<$ow_nxDXj`A=9;!3D at OvDZm3Kg>X^tn4E8?DxSmG
zudt-ZFX(5LHk;3|;~J8 at 9l<4n9>qShj1!rGHGhtY%nIpZHz#(rzI<t#F|6XEAyU_M
zXwQSduq=-!Wp9Rjv_|^2DG=Pk at C8E#f;=PH9~GdYoQ=!EvKKTPxPX@;B_x;Cc(LK~
zhki5iO`4K{J?zFwjcdkEHH%lA1^<IHI?2#<%0~{~$M3&0i@)DT{K at X%32#h~SO+-@
zIVkh~hIfSx1hLa2E3MGAtjrVmeqvftdJB$+;dmIn-SF*(?-BSO0W6mXctAX0Ti3u&
zpBxg?rqJz at ZDU17C3pZ7y6V)gDmQQ=pX+P$)9sdhUU`ZeX5L+tHl-G^A%lh|N(PE%
zWZ0?CF(%4ase)43S+XFM=k}+sX)p>rK6q!Dj}(5t=913*hIIwG%iwePgwH(?0Kaer
z=Xs^vCSBlQKl$@MQ<%(J&Pnk*PWR8<alYE=<aa9nTfaNbXORC5Jf$IST(9phX8T=v
z5XPSI(fq66Oisb~B at t;8UFaDl>3i^}h)J%ICzx``wrfU>55r!lyfG>uDut~!fV<eh
z>K)@!5j%_APJ^L}dGKFqZIX`~&MZr`2H(!Hv*q#@$lWK=&ws#YIbGv#I=xC_?(R>6
z9F&^ai}mZ~DoMzX4Du1Nj(V?mwt!bS32_u1?(nmJJV776F#zolG33LLV}E<FTc*=S
zWnJmu{1Uoz9xdo*pqml>3_2lji0~_v`&v|y;BFvTA;Z`n1xp8D{_boG(Cvn8VgNX)
zi^#q1>Fa^H=LXwDD#q?S;NdmCR&XzS6^>|JJ`q at HZe*o`8$sTi_%baUY;uJyc$YeW
z;Fvga??`+`!1wzl&iNS{0#s*B+$Gv>1a3B7Gy2B>E|)9T=2-$|iEg21;_a+IFcieE
zDS^D1vb2|zkUUcui-i%(UP(#tHOup$d(b`jIEa6xaaqJN^Z~EKFk-{4fDYLD9=XmF
zJsvVmAJ)5_;G^#jPC_2+X1;z}_;j^1Wr|f8*A6m&A-6i<YiUsh;GL@}aOp%WdrL~m
z%)?ipZ48F-sm71yKQeIRlMKn@;REG7a4fT|?#eV&jhDE7Q(q#kLZY-9CGCBfTaW`#
z*K)NL>q0bqR6nDAt7UJKHVHA~c(-g7j=iRxgPd8I{C4C!Qi7Y#e}VApod?!ukhDL2
z3j75Ll>}GS!GJH88wHG+3ir7Yy$)Dl;PHB%B<Gk1xl-JZ-_CIS at 2-~VB_AP%`TYla
z$$R+h!RHWsTRU&)GY(vb|0xn{DdsfW2 at Wu4H!!>KLz&32tsFkF41CZJO-h};?safn
z!&jC%CurQuGPV+HO(n3s_B~44ni_j$H>X+HpA&Ix2bbJf&-3VxEOF9 at ao!K-3yvKi
z=XoC8@!-)lMi<OTV#d6 at F=`9?rdt*tbW9jexMTPAaMEKo at PYM3C5P<J4O}`M++%~?
z$syOl9~!}r3F*25(IW7+Xmoo?3>W5Hd{`>mLom2iin7(v&n*n;KU<;$HV|z<5 at N-X
zOR`uSR0rLfBFB&OW6{6FJE&A~URXSAE^)1$W!o_Zvn at _*mc at BB!{V$Lw>rxz_&jac
zC&>6Bv174zV&~A$`lyTGclJtjw|tr{mHjEebx1Edxlr=odyoH{NB*-u{%-~OZ|Bf|
zWtHT=`p5tIlK&12{a1S1<u`;(2ETXeHp(<EU{xTG`?u#!3fe<Q=oMw0EGKU;Xs5i3
z=!x~u9^X*5SMCvzlw;3bHu<D1*W&d35x4_m$nn+V`F9@`REyswAwT6NiC#!WUMVkG
z;xyTEw3Q|C878H*gUir%hiwfxiri!1SXQkI+lDcn23*3Y_)dq9e>2&Cs|<R at qH8`9
z!}rvFN*4dg at hyhz=cPZ)NE}S<29_%MxuhS$>HZ>zd$HcT0rQxwIT%M+cUr~y?U-v;
z^SjvR;y3miq`HdC at skbN<El9CIVA3k{9k48p3^jv8=L#UJPOwpOz1ZhOsdG9>t0|U
zo8O-K;pFXP9I%VX`at$>*c8Lb{*1gP;|ZRn$%7k{+x3=(@KCEf7_pp&-}L~FUna6R
z$(z;sbbdQqzIu94TF|LsQt at vtAGc~;ajjcK(Pp{3&t^jd%57o7pQ}pEN_mv({#@US
zS<ekLjP!QAD1JdH&0>BJ^>)n-^PAZ3{juM7F9C0{sXjlIN=?q9EixOeIrObpV3AY|
zEE`SM7d#v5%Vy-${#FCIptuL$Ke2x1_B_d|{f4+#tVIQi7wNPh#PmUbK)DU9x5J>M
zE11n8w`3H(8Sn6%bgI&f_t->iU3vu_p^8|`s?H}4=EPv`iO<ToP|amw(pi~p{-~Bi
zd-|S_g6#3lM-9k3c=i;x!c@(qN^L8omB7He_v$mQ_}1D>Z)@0NA8_s9Z)-O^M4uuq
zyYy7(1cD*SZzp{4#$@`Uo5fK0%|~Y<oqlHnY|lmy8pJvW_&nFyuIU_Hl5SvZc+O75
zw4Vx-y>%q;$;NIsm6_zOIKa)(4dyhjiU{<(GL=ItY}5*H<uSSEP`7u$qpZcfU52 at I
z&lpwCC9iqwdd6sSeuaIh!fUDaR#d*u#-*&W7d8hr3lHgxT#DcEx-q)j<ep(tk4J?`
zjm`#@w<qrD%?*cMtkQ8z%o+{vd;0qtdz6^mKT?~cm5((fztCgo&~*q0fcMEz{5^II
z_Tp&pSQKD=-EoEEGDQ7UigNMe^WEog{zsgT1D-7Hf1Uq3&TDW!{ePYRaCom-ZaMWs
zbJvH5BoEIc&*K30dE}4Xm>CN`TzU%`=jw5=U5vwCJ<i8JYQ+c(*~bZYH1Yue^Lo#Z
za6%ln7-SSEdsTLJM)V3BMYppxn5SaH7u0^=^JE^4*5p2jf4R6v_H at V`#!96g`gYV(
zeTvFnR6D$-=u3IvY#DnSahuQq)fUkr%IRhedB|*r?;{PlWOrQIjNeD$hZu=t{V*Bx
zz|BhR+a>4SFmHg7^z{BjgqX<~U@`OSqQucRhe=~JI6malV|<i&U7QEmGNEx%m?-oN
zes_rTpzlVLHIjU at 8WuT*)LQ8US8f9tbT43E^TIMqtlYJR8}Z1u%A~vI5NtRBjMTRU
zV|yfQ<#!kjFqO5?ljr#O&rE)9BiTno;-6cB{Mt8VcW6$wm$D|Uda3l#x70-X^@|mp
z6tdxFf}@JIqCRP?Cd!IB{gK!^^!*5HM3<?D<R!=d>8N83TTTa%JiLw3Vd+dh#(WoB
zJG^OBOXvjH|Kew!CU!Vx9P$Szz1xlF#QqR&wxNEZMO)y5J`BEp4IL>Xc+0<s)Wg>I
zoNRkl74><@T-no-8?D3HS6`4DzfHUr_|0=!#=j at Fg&fT(QN0ZLZNpuX->)|0q)}1=
z*?^rX%S9RgFdU;kH#AXS7;h$C3pt8*ovUB`Q8%R~zu~_~X1mBa!2{?{8OoN%?CyU+
zmgz&xQon#T_HCSLv~PSBF~u?*ze?8YdS~}&W5>o<nFqM`3tWr5uxvm?7VIsb!#??i
z at t4GF#xsd++6Kt8yEeXz`zOnK8@<BjHKvCx4S{T%*rqzbN>+7)bCcj$C*uBSd{4ml
ztK=HgXCA3jqpbUVJYy at VQ_xZ}E)uaX5L|BJb;O!kT(NX`$F2YS*%- at j5<DODqOO%U
zf{-J=K|wq7upO4^<usm=UMw{}NPL7f-VZuWjUkWfLZ3cb9TAji+L<Rwa&fXBgnhP(
z*yW9HCSHe)SW6S$zkPWAAJA!<3BMj&?qMPP)U7Y?yMS{|g<CE{?kDyb at z-Q*Wv?c@
znY01 at d|dW6;+D!0k8`cT$(17?&J0-x3(h<5IrJ8c>v3ZWa{E%nmO7{Sxi0;LQhW9$
z_m-jz`EcxM+N{O2EGzD*!7Ry;j-ajL0-jE^_(&$VLWg?I6b>9*<cC*wkI+59 at 6`<+
zTb;Z8bPpP2mCn|&c?E^Z9=2?7_61Cy+zGv+BzrM96(QU5d|$}B2R#L`^2A3_iZ~5b
zF$)|TH%Hz}+Nv%^_YnP)0)4tYI|pt1iYr&$!a2yxz6d!ICLyLuFE++6TGvBOnvb!(
zK<4A9_l&v<+qR~31H;gfeBO^w{><m-=`*l8;Bnp$ZjM?e3J30{thAofPBpRx&xED>
z!|weAbg|d*?S=0*N^fxLZJo#|djq+%JCQr~2Iq$JD~O+1cRKV8VrY|fH~2jQxQau2
z2Hy$GaIL}JWyJ2SK0z?w#<;D0z+%`~<Z7Ta6CJtp{0DQf-(!q at k9lq17>qH2`Ijp@
z*3HekVmC-Azo;bh`liglnT$B_9kfjVbfJFWo4aQNH_?`S(auR>_rb?!`Z~t_;##$8
z^t<_P){+&7n?CF&gHNu8ii}Dtwja_De;aF%9s1EYK3{N6qPJVpy6$*za8n<PF6?e2
zwn1<^=-CBP3+XQSbCDC9eK~3|$w{G#4HGTsOQ4FmVJRd>cl0`@8|&yY^*E9vC~7-!
zj$c##KKmi7?l)lX#(J1a at Ui=DLw{N4k}u(d8BO-xqW6%;?+Ckc>W5g*nv$m`T*Fwt
zG(E`;IiU7k3X21WdItCu6-)by2^XUR{El<?)erq&pF9<q3^uV{P$MEaQuZ9$vFi=!
zK_|k1JqBOH31JF!wbv4DJU8TPihp1&`6sS<o#>xKypSh}-V~Ljun9ht4?sr8nA2*Y
zKiPseCAyKi%#;~#&VPV%ay)=%u6NTs{L at xo_0d#)8t^o)BlokZRc!%Jn>!rKnciH9
z=mD=oA6Gob)ZqW070<QK#n?|FWyl5e>yVY~WXuQEAa6%Eu$x-w8Hl|AuF)B9GmO|b
zkRyO?P8Kln)hseL^12PuSMF9zbY1i^d0)<~pw7wY^X_EJzU~y!^*s{kPZ&FT#m2r_
z$(ON4y7vo{MT6C_ITocc;L@|4>i!mXu3s^x!imkq*GlrZga#Vr^RH5o$T#yn>pw%=
zcspWEV{6|rbN7m~waAy!nBDi2IX~~O;A#LqKk*zFjvQdK%53KDyuX@%$}0g^De^oR
zxPWP-FZ14GH4$p_+&p&vFA?uFCib1f$Bf?v_<XGIC~YFPmVg)W38hZ6<q-vmEe5n7
zem`Y+7;v7|3x<cSOZ+WtZQ`Y{ck6EGPMKfLyNEvE`>0SF<UF*43W7Wl5EEbTcI7ng
zYq1PI6jR_QidZMyjy}qDclEoN^gDli9NhD6SAM~@FOWXu&z(eGutlWbd4AC~BrX~M
zDfs_R2|vTJl0U8&@;M+Cr(jcl1ik at a;#9v4#a4{UxD1=BWUwCk7{>O8T1T9>Y?vkJ
z0r35=5FL$eHf?!bV*0vGqI$1k#H7I@%W7 at lPRQ*%PlX}Rdw%euV1tY2V%1s^M=;vG
z|HN9j+3?VNzDHzy{<M07q{J$irH%lu#X5bS+5x at nX7IPH6M9QDLn*gV^OVgjuoi*|
z^hd#yfDc|mY`7cm`Lv*)vDOXabC at b81rILm6O4krTti|aHzKbr`t5zSI99Ciq9m;y
zUG^A8ux{Fk+(jaL at YiyCm56SS6}L9q%3@~Bk!f4mBwVvAh8?;FF)^(jHi`KXBT-(Z
z5?yt0m&SwzPg0A0WOSrxWfAhjOk1BzCAiANn(hW(jeCnpdG*e=as0FRa=Ny=%7H9$
zC7z0zfig768?wQ+V@?~mHk~$bIfZ^to1)SbTlJDE8!J^d!*70`^;6`KwGO$?Mheyu
zeND}|+K0Xwd){#C9^yL(PO(nI8XE0YCK9ZRsjJeKO=VtSVNX at n<9WXcCd9<xc}(Mi
z>7N&|#+yr{6aPhg-$Qv<ukbzu!lyI_e!=mG_fXe+F8NY^CYYPo&vTSLYwdjZcbexY
z6X=x}^%<2MB~yL?T`&^yV2ez`zj{_p9p?1?#~ko7C_g~FEycI}N#siU7xH9JQSJo(
z;5Fe9_}IUOFF_P^i>w`Nab<^Xw{j=&P9AIlj=v_nzKGXK!S^!A0a8UIVh2V56J~uy
z46L^d_Va3aGjJ;I(FF;>p=`t+`rqov-V$tQJA$7A?&KS#7ckARr75tVP?rQ1t*3#V
zK7zUz09OJ3Il)8nTs*_6`J~M;W=0UbllQT7!q3yuRSv(^j@?P%6Zj3^a|K5diM-;x
z3fq9o|4v!k<I1){k8`5F?uc)?|5FCrf_i$uh9Lv*%>9$uN(%*EoGU+}eG8OzY`EeG
zt~Z*W&!0wo^(qa?cT0c57AlS~XOW}oYu3buBYyWo^ewnH7^?L+@^yLA6X5fER~a7r
ziQ-6du5za`DaZ+YB{)%Gd!K?f+(mQ2$JMVuZX1N3VWeO-+HCi<8m3%uICsL-n&5YV
zozI~vf+vx-!CE<5`2o?RHJaiA^P~LRhNmVCRz=c-g@^$r+%zkLMci7}vbwj5 at Wzli
zOIZtRqRywkNcUt4Cx4JV^_dT#lfWMie1A3iRz58*_bhC~GRgwZLrd^es8bC%T2ib|
zE?@CJu_4-Ols{7omF|D`$plxQU_HUyhb>5<(=aPro4eMNF`Q5O?W$|;6K>iDnXlgP
zh4=hXSF5<cf^#Q&j6gH(L&W+!3bRJ`DDSRv1ZG|wq4o2ytVzwWFRzskW09>=bYSX-
zMeC0#e1E{W;`w;U+JwF?HQVx<-3Q6LuGnb!*n7UHjqttn?w});ubDcS)Pw=^!u;Ds
z86G|SHTUHl|9>@UkKlQEe?(hmLf>=x$p at 90XHP}wS5*WhpLIq_q8vh*;0I9wiTCoD
zp04C|x7yG^I-s>1*aQuIlkzK7Fj^{75PbYIZYdut(}7$~H-Jg}#BkKZVUWTHmz2mg
zETh1^YkI&!=g}{&bVIC}NNCjUVnXTeu#7PUhB+P&;cL8;8z=XLJ-MPm;Ng7h<SNZB
zna(pXdr`j)d2f-64%e7ZIugx;jzrp^pH&%TKwfsAErgQ?7@(g%iLu#r&CG#SvxAoL
zn27<@r3-ldPYkgoj_IiscyIy}gu8(yMqm46feYkow+pbrS-?B{5;#*g?AbYdQ^UMb
zJ%(Mc at SLf&lDptc{fl#@)W3&(4oh6$kAMH?ce>L<vbo1By~|(g`Y*-F$Aj;}n9T#O
zIi6|>UZ(U7-U2+Pm}>G$K<*Zc;ro621EM*lx1~Yh;o>m<4%ffQUw<ArTCMrryG^Vn
zCgP#LuBXAzeUKa3_0)<b;EH$xTw#khxB-XL0Q~0-;q3n?@8o|e?>C{hQi6Hq0a at k@
z at OC$l7w`dFp!CH&L!H=PgcJU~4A12MyA1ZS at Qwet=Jo$_%_X7gKduS;FV~zB{>S@!
z#{QRU>d6{_HOT|<Mkiza*X4tc<p8)Hik3^%oo<#P|Hb(l=WfYtjalAApOIa$9@^m!
zo5Y=MQHT#ev|~g8vB7`$R=wMr&O}?hcw&!8OgEY3_r_2Y6yRz;A3(73Yuc)+KAS!J
zomq2nZ4LZwz;IP*REZ;zAFb_U{(3Lh^>^E1-PyWetvZ+ZOu&=6GIk<){!m at 6)i|Gp
zz2S`H3TzMeyhwdQ$0PUQ1jEBkbH%kjC)B1Vk>^t7mpf1!u8VApsT=9>$oP5A4*6hh
zc$u>?=ExO~+s4mVh=~6PypVXeXC*_&pVvHiRx>;7j3mXWT3KU%QA2b3S&7}|g-x_j
zX1Mj)%zC$XORBifW{cWz{&$kI0Pp{R$t3R&opQ&>!my<1o6BLlAn%VHb$Ac{`fK{X
z=-Qxn;`))pm=u)tfWQ84VM)at_%#@_{MKGzd#i)B$Y%olKgQ*cJRjs7+Q1YU9)4GY
zHhhZbuKc|f+><d&_~SP7!t()M6Y1pGg=oiB{JCq?gqS^~ZGyF=O=3PJ?aFh#5?|D5
z(v~sb54G*QGm>T2IX{teEYia~ZclO_X;X16Ux&rOkBs2UzE`U$b24hf!_C7`pLh6k
zcUzynvu%0BoSXc$iH2L7hmrnmwff$nixBgk6uSm>V*?ZT|L4<&*l5GUikHaPxV0+w
z8QKu6mH#nRAHf;PMQ3cVtFH&r0u#^|);aIhIQL3u1FkPUBTGSl<NkBNPLCa`--0*b
zV^{aED)@Iji42~9pMRFzXdn0(G4Kh;I=FFHTzs4aujUVZg^j(<U$acvgdF#KYc<uD
z;Zoq?#{qZdt8DUGc-DHEUE321TXg_S<lwv({`xrl)`(p18vp0L=Uw+w4zCrib8M0~
z^8Z#h4VQ}dL%-+q2n1;O_PWlOBcd+CuC2$OW->p22fl`J24-BVf*H*^1v6lqpG*Hp
zNt9b4<2F at ksk`Ku$f(>K^pD^phR-(yIp6MVV<p)0-=Po##N=b2wwhl>Sv4qYEGdV`
z$aGtk7JL5;7Y-sh(A{xpM^I(am&QkVpVvYbCNc^*FD9II`rN7?9<tGJ>yrbp=Z(j4
z9sZLVzStCATu>$If=|D-x$FS!%H{QL?;M7nFDkR)(^Um*L6xXm%ZzP3QTj7gFamRW
zup07HxT(5dVlov;Qn;cSt2PJjCH{9l&I_ at 3is8Z6V)}#o(MP`kQ$IK6hv3~Yb%N at c
zVqm|n2mdR^AgIQ9IWR}QigCb at zAv~RsSge at Hvcw7F(6u5T%a$~b($C6@^Np8>8;YJ
z+o}}mrYb-B)SNNkF8Egd$h`3Gq}a4pE3+1O at 3&e_%*@#bz_)P<YuA at y@iD#Tg_b(X
zPf;2sW}UHthRgc5<lU4c=CJu)OPvezp*slKI68O|J1EeCqe??XnxAhPC!hoVTJ*_Q
zrz+c02|j!ok at evN{2Aqb2A%nl*D1{TzZn0>`yAMV^q|94aVl+aIj}dH7zcb at 4^ih*
z;Kxm<@9R|px~q0XnG-nx?+dfh_TQquiq=!Agw{jwxjOqt66}fYH0t5f2_z^x46-=#
zz<f3u{pKgeyuEo9Hds?A*1*q(xy}vM<*tB!jIlF29mkD_@;)~-d^UouGbC(ylslo~
z1|xN=Ym28Jw8eXm)vwV4UqSp{+LK<n%8R-Ai7u?mN!AIy{2|%^xeTcQrrhwi&;Fvd
zn4iA$De!fB at y^Iuh&}Z+$`mYR2ZYPu7e at XT)ca at XCp`jH(5<i}g1u2~W#!6dg5}`j
zlYAgwHKJW8<e!w^F_L!y*UbAfkt1ZwI`TebF5jsXsFd5Mi+~xV6Ol(9&v~7HPQMWG
z!-Cn$I`f-%I?+cCVM<U_n3!BA3dVeC#=F>nmAwu5tCK62JAzL%Serz~JHJgqO#M^f
zWEJE4JY>=gs at XjE&S$9KT;W1*?V|7qJ?$QJc)AG3z7c!$n$j-B?L5+JHueFZikJw>
zGIV{Z5O~v}<If)NS7dKuR$>i(m#t$;$ew~R20l+RU;llbBev*@du;U?*+pycONjXb
zAK+)R)oL>5(6>$jcvynJZSBzAYqgi%qz^JLyT-($anMVU7XtXW5s;yqf}bM#Y-s?n
zWH!k8^+Fls_SaqVGxRUmPq4o)qfbs>0$lY$S(|_^F2IKs(5>saL&X{#s~L4n0a;`C
z_8qURV_t#&F#z1+Jj}uPm;;3K6ge#+$G1AW=OFJXusOl at 7!u2R0b{?p(JOGtv`mU?
zTo$;9l^7r7+%xw5Hbr?6KKJ`GlY(kt->Db4FXdpn8T6X5)ZsN<5sJLoona#7q}}iV
zyppQ at XEow<q3b=t^AEI$ICtq1=uzN1Jz3ln6_2tI&m5M?V>&iN?zOSt!LyOvlxr~_
zPC|G55xQsG#zC*_bv;B+6J1sp<c?On0DiBA=~~##7b!nLp4%qEVS?-Jw!MfOIFGpB
z20m~6NAStt4CWf0rN|HZmsN^`uxEg)c|<IOJe#3om7c;i3gdJ+>`F<>4+KXP#(e$K
zt_q3HCg>(M1#eG`bMl_2Foxem9Q$qH at O`H*@n+^PYV7pNh*+V|p#SyXb>`xpbnr1@
z{IwxQeh at i`IJSt?Q4w0ZOr=GC-t;YJ9tozX3(%gX=|y<gy-RI8j|j1I`9aqPM$KKS
z$QdS0XybBAeZl*94dbC5&l~u69i6-f+7$NJf}=hb!jn_)8P|mIlmU6Y2DsI at GOJ6b
z#_wwA)CEMRCb2=K0l{0L|0koKlC7N2uO#Ox+HjZhEpQ>-e;hB3IO!j-wj(C06}eLB
z at uHQ4gH7p<F*pMGJUShjL2844iDQNc_0}rh7aYOd&YUwy+6s32?qJ?NLt>y_o$B+|
z<rYrLRMjQu{sO+Bo5qCRK8#`Xn~0lD>Y;zS)8{Mg>w-ek#tpr`dTkTI7m&VR_9pp%
z;c1_*8n1txy|jUpKQn$#XRyw4A9^%t>tdg;pmP?W4o_B|fX?ZTvNjBr)$faVeOey5
z0`>MqyxCwE|GZ~A`1{G2CH)}AnDQfi5AHnJQIfAIa)Ncp4bm*Pqu(Owbm-1s9W!zy
z at 9AEVBjQu7Nl=LOZczj0Dj)ZPtHib!@i0U#@gen^GT!H_2IP8GJ)A*uqV7#-n$3`U
zk{qFm_qkK0;{{J*Zu=t+QAMwB%Z2SCHAKnOF0mJ-iVwKPtoySh_aqs&Y_r(FzSH<V
zI~92qzQUY+3VAcnQl@<H*kSFyX_O2O2yeOal5ybMZVM<K5t0RYm~f`QO>8>gLK`dR
z{V!=pF)r8A`-4xa|AKisg5YF{K906^*DpSD4)J2BFOdsM-EnS2?yF0W!fxr9zCiKv
z^7)B(f%CJn6P2}LvC&R;<zy49o_vs6J-L?jO?Cj at wR*A<>($MoWaR;Jt-#xbU#2%=
zO~)MiTlUfiq`tsS-vpN8{>e;!-SdU6jCNy)zu!dc4Bc^wgpZ;<EQyRk at d45n|2~&V
zn+Wva9zY#ipDuc3x1H`WoS+6GGB3Z!0h=mKoo|Cp{uQ>?bw9?yM8t?A7Jxl at NFTjf
zSctvx at w$S2jm?)^a>oZ9!`y!ug}8RMh}})rm+rZV7;E*;3*+VOVIpuyB%rUWfj5y)
zJE0sMREPD<!yuvGNYACNqHNrQHGhh-nabhc=i6$;h$6n%5r&*x<o!R$PH;qIf`=@V
zj2reO8Rstx at g9itWM`7`(RjUoDpirat)!D&KQeo1w-1pIMa1_89`o9vT*&br>si0a
zMY4$rx1js^%uG~U9e%o-rYSn7?}0fT#)QGX>2a9<+bx|xrNjQ^;_PV%^+PN`4XIoH
zL?1hBtJtTutl(wCk9pbf%-K_2 at C~rFWDMwv+eEfsiQSHCZMAcwTRS!`rVUlOwo|P2
zUF4|#;67wu8&ghX{Ss$)CAg8Q6!Tz<%>svhA!NXZv11iakX)=d?uTqxE2viP#JU2z
z56ZjQT4O6qu*Lev%mBC3rda>kjzf|SDy-pF!Kg@?&w2IvKg<5SSi_f{@n_lBV<({O
zv3%JNgLlt<<%}%RDj0^nE=xHHINld?lM?QUZYMqp{;T0u#dml|$d|FeiTdQvwlg;Q
zHD0#NdMsP==kAO2$W{A4*EjLk&z%i!|Bv1$vfZX5G5wJH%!n^+CHCJQcsYW<jwuq%
zP)^Dny>yUZ?=iNmq+flXB6?$@oduu0;0V<U4ju=1Q95i at Rc)Vzxmgg;@*w}hjEec5
z%yuGEV&3e<`bqeE5o27|1%B2+VG7kPOhy?g at Ixn&y;7Y-IJEe-$ojJ_+G3wXTTD=n
zi2W7spP&eO+%9O#J;D1Uzk%Fc5gY=U8{EjQ_iMHK<fAR-wwipNEN177i2>KoM+eLc
z?;NN6VtRvLQr1ECI~bM-`OKiah<(2kw!A?i3-a&wn(`v%o`+zR@&jV`_4yTY8$-rb
z!Em2nF at M68iy9-he*m5N4rJT2RdHP(S82NPn3wC_@;f0Lu4wJ#G(>-f?%gaR{Fy|5
zyIQN57mb_~#Xd!_p^0x!H^1664)gX3_*IV}{)Xt(d+Mg>^hD0u@(EjACEL(eCEBnu
znB)ui+A`Q7!1r$KN643mx}*umqF$rX53eMGKLdRdDL+F&=1_kvKUXDN-(MwKzlIv2
zXvXnX94{ls*z4-6BG>;`wT$kjMr`OP)4LtKh1^}aC*aRVJT12<-i^&buBO;ld%t&U
zNB<n6^JCsCV-T+u;IZ;oU479rZavu_SRRb|jv8PQ&&;$azaT!NEt}L?$d~Z{v;QKk
zRa!ExqrMqtN#ymW;J+5L7}rhEk%sz`=tm!K5vKEF6*`q`tU{;K6P?O=iZ#Wi!FKVQ
zqEs*;(F(o)%h?NfIsf3l_cJrj)z7rw|LW&Hw5O8q=N_Lv*L|d~`LQuZ(bG5;eIA;K
zKEGRmK9545k3lT0oBA$fY51ej=lfwl`TgJe`~v#?)lffPPxumh at CAVdaiXx<^Ro1G
z+;;>xznjDkqm=41{?X3s68v7So$u3(`T!@v_b-`q;OwBpL~n4dZU46nt_5c1 at 5NQ3
zjmMA!elp`ve at gVXeEr#Ktb0!Ta>!As`=h)+Db^%P#d}G9naf(^iQhuk*hBq{k8*B;
z%ecF>nOpqglgZH@&4p4a6_xFhnW0w<I>p2%t&$4o86V{ykGi=)7U5VV4R<yM1-)(_
z)g*x3?J`Sn&r__O>bHvQOgN<t9SfUxf$Nz|A3t;LpU?b9&dpfF0 at Kz|PdW*<0BcJB
zv`dAl9+A&|6Fb0)A*bIY&txirn;U3M4_u_r_;|n#@kca;{A;XO|NpMbh)I9e<-wnI
zkpjP=etV>O_v^n46l`;pCT+=-yJ?9*xmqbbZo881tU96VZ3qu?7-m&CVxTt*(|t@#
z#e4TS>8pnQv1jdfM7o|I{-W{~R=?MQb7A`zQ-k{#$59=kF3%sPtA-_6-3t`g-N&a{
z1Fd at DzV7`QC4<5ww^Xf^3K-XtBP7^c*>99*z=#}M)w5k5uNx?BuI>3c=97SDayME|
z-CJfpxg^uPB~RmCp!^{)A;-s3*S4Kb1|HjEC#$=edtzmEpscl}tmbqpCpqKfUhuNY
zzIsa&_ at voX>leMruv_E^(wOU`5~4QM<?Gt at FR1!g?KPk3_lwpT#(!ZKS>-njew$43
z(^vY at RZ*LQvgA*Y-*NlRCs)eM=Za)en+yTQ!5r3n^7;z5gSn+k`t)kp05{W;+}-dU
z)KZ67yWGL_T&d$0EwaC{8F^?Y&^@~nbe;#->YP;*x;%HK>O7eW`COt$|G)gJu)Q4Q
zZ7&(_TgHUv_yBKEF{ylA!JLaxH&q3!lgTgY;c?H1?SpQ3WzOfw;iuI>N20ILZm?Cq
zW9r}}rp~*->cF4p&Pq-r4{gg}zc*!S5N&W86oLUmJhchOgGK(9)@wUy*to_;(5KH?
z+cKyvMQmPupv<jaxM%#{oLQ!Q*Chu#91`+vJ{TqOP!(Qx-_rI(m#2#($$g*xt*<8G
zIYOo=`WrF_RJKt)2g^6?`{p0(_f;LHdrdgr^VtXcm~E|1;9rn4nIV&8e(ou>mkF`V
zy6a4uyRA at L*;)3D?o`<x-F4qR+Ac1EenbPSQnp9Cs}OkLhBr%``FdO{XTEJiz8@|}
z<;fxE&!1&1^JvC-&lfgOPDW$uY;e8%C{|)R%E3lv$k#a)X~dUpGO`l)7Gut&^%zt4
z+jioA*R{cj1OI+4i6!-Kos9Sr?SmpqaktHq-Nn&a at rzn7GI1f1vRS0wmDhd035nnm
zRHKTL at LYUz3e+h<<(04Je|zD#Cw`-TxK=M62Y)?Vg?v+-*4HT$y1#;c>cIOptE9S)
zvOVtO3L$IZ-J6+j@%vj3OPdJgX=zUmbBDiHf4rj1^o9xC2nSRJv|nrsRe}5%5hE>H
zuh{Vz6aLX3VJ&zH*fs0j<)-7TB&N0 at j&{bjcr-V}>jsOYmch2|A*W=|x?RJVxepy@
zES-+nxg{YdWmAEjF2V6q=s%ko!Yy-0_FBk$Rg$ha9N)&ZN&K}7LXOFv!L`S5?Lu5@
zWgY>KGKgz#;+iM<Yc$Gb1n*Xyh-+9}Qv%%=yk8u0_i$;rcQejwalVs(&P8BeNEr|D
ztR$3k0p+~Gmy?fsmc<xwUW4=J*%`FMU8*hi`4o9UR<12z3aG8|)S4czqgc1aMFq@^
znjYAxB4bk(S+X<*CtHH&q{kT9Wso)W%sxEl0jq)DD#rOm^ugGSm>CW5+chZRCyM*K
z4LM1XBia3+er at IO*wIBj><sO0p9|{!!&+uTVxwm;;QMe-^=%$$#rmp*&GAXXrOI6K
z{|fwN>&G1nQps%r>vL~X$c=bLl4y%PU(;jI=q at rz$n!BL<VW~uerNpxyz+*xwgzS8
z8G^(y#)dc#XG1*vTK at 9km_Ig3B7Z<)?p9k&CzKM?2{t3sUgSW%?7VMq80Pm;cNyPq
zM`82nXJ-Jjv|T;jCn at TqkrsOM8EK+zPHK(Apb1&twubJNHR9Rn)Thko*}#!8W8+uG
zsKE>8>HPuK3yf$!bb)Bd+E%vQy|-!v-6_9HYuWG(7EW5S!B=l?=}+_6Uo>m0)mLvZ
zH|=n<{g9yY0OqHhabO+s`<ufse#4`p2^F=B)Y96t*KJFY%5vJb8vAcDa(iq>{))ww
zg9PJG@*8^}SLer)SbXH`a&b3}yd9fr?#%PUe_~huxd*dM)?4uB5Z<(Rel>R%`ZZW_
z-0~na#?io5IAcFU41I45hg=+<zJI9m34S!)zo9J|xs0{1OszE~MwM2 at x#gz^G;~BB
zZtcvUGSz5Wdd0IUZWK}mH~ija050x at sRq-Mn5wEck2UGz8g6*ywRXNUxV4kZX!t!b
zt+jLQ5*(AfE}GY6;NH6kyxHgM1h<2Ra1T?e(p0 at hqI}vg{&QRERMn-_DdvhIKV`z4
z38vaLSte7l<hk{R at e^#R&x-e?PH~+t&U(MbS8qDBCd+M0^vCpP2f_XIO~!`G-SN7v
zoqqHK><#3*w~wWJa^{&Tds9u{EKfCk6q)Mr?Ec(MPQ#RE`V0{PeZIHMANXfqH8FD4
z!kt3;QO>-;ry2wk9StvxaTIP)jrDzA_1TKoRX^+urw8zVe~x?LYYkM8qaoVgk at LRk
zqt&VBPUa<D?PRipwi{j?=kR@`n&0q(m!rtvV;sKw4O61~3<(~6bclI(NVe)<g<am7
zCFvf?hAGGK{Ih)x)PnxS8PUzYw>;tv0bhMn*krDV$~IT8%2vH+NT5C{R7Jd_Uu%Ay
zUF+5oA8xv&P4%d`tLgHbx%Z6<>~$5)mL*43nrNrW|H=k#r3d1xq6UJJ>EDtw-FwnA
z=U?C1Nt?!1=8(LUt;qj(q%c!l%Vf5;Gi$ZIYbu{O!q)hHY7p)0*;_ at M3fJXy0Tbov
zyQX!nZ at GMUg-CaLw^nz$aNUw_azD8j>*Q~Ojrpfyfk_htM;oxNXoCxZM~d$qfZo2z
z5O;q-xdD5n#N27f#J3ddg3R36lxgl6lc}uF?KSs=Wh(!Q+^c4TblL#suS38g7hX!P
z4YGz=D7)Iih0<K?_yTZWApUql!Gfwt-9<JdWPP#J)S=FJA;ADn!0fB^r~TS4&*c*)
z7sUrmUK_O=dcX)@>o8<dW(+al=V7adTj^H>!IlkS$(9efrN|>TPh2-l%GSlEiED?Y
z##|@9JedOZ3x_RS8PiLJ7ugL0cc*7AWfjK8^pcqBd_8|p_0T=-)QF*bgt*5)rdN0%
z#?~MyaW*88{L3UCuX?JF<ZLzkL7u*M;Ts5yIt?B+#1rUFF*Py0!&}y9RAWj%XT}42
zso~3p{y^#jJt7X at GRhb`M_jwSqV*EvgFM5 at CC*#YE>D#2EMg~L(=Yy*4&D;e8&A=n
z&PmdSz(?<TK6Klm=STZU3pr8A*$S?_umEyHBy0+YNV@=!JPmbtINZ8MJ)#M97*UeO
z<f9&H)Pp=<PM(kN1bipq8@}UV$;g$sl+-6?C95%YJ0ul7WqOm1?Dg66Ecc!NL_4gE
zdFU=heZ<<=Q6G+PkN>I9OrO-kK~YKJfQN;z6N@@6^=VN9H%JW<JeYxCb;kHMGoKKD
zo*84Os7Ej(X3&M9k3P+gju{LckM<}+d!QZo_K=nQ*&g65N1x6v3?0w5V*gQ7;WXnl
zlCrKuu3c`K$v%Vu@$sot|2Pc!M`GazRB16bX2f7`B0iOM$b%H);GcmUR{!l8lxB7j
zgX?22plmI!!Sfp)zvDjjY!aK#)RHkn&!9%EEg0GIuIB#`_U3U-o!S4mxKv^!*9C<n
zwbq$T?LsSYLuxIeXhelT3`8S~)`W=5m=G?h8`##?&Zxw;Do$;s;NEC81Po*AsMVqr
zX<P_Vsf{QKF4cr21Z4ZYpBu1t`TV|r<aKZE^4w=V&spB*9F*%JvVX|XY&VYes9zqL
zUy*a^bD-V*Do(TWBIC at +HDGqF1y5>NwlM(v561HY at 7i&BUeJF_%QvtM$Mto~=J;*D
zm!NNY^Bd$ITI!oqz_bmDoC}})v1{l)HVOJ*;(5r5Eo5FZ^Bm(CIh)i0#~JcgGIw!(
zKbc>VGrF#4lDgqPe4qQrM_h>vw(5m(ie=ERqg-5Dk81<4H%s(aH7nsa@~*x?v)WQ^
zOtMrr#%bQg-g(We(DyRZ|8^Bj3oye6{wvWS?Tn{upc8B0kMf`TsVw%_@}K+}`7c?S
z3;WG<I%};vL?^$6ypsz=v%=gn62~>ol$wsKzBe8`QVQ&Cj_JqU|ACFCo^9<VlT=}T
zd4BplV~n3o*c8Gc at wNB=QmOh%-$y1f6PYetPQ}9pY at 2gp)Q*+9zD=(k5ViPZKe?O8
zdrZF5yS}mnk^h(M$?jX3e&bElZ>q0;kUN>SuF9m{rUPjWVVN_k$7Ri|ntGFwBc=bU
z|G(-_=gWhA^11xBeULS8T=LWQRFn1yl9 at QdA0oe`r5Ajw85#Ev-y$~CJMcFq- at M(M
z<C$5tbDuNHdeSwU$k|q}H|qav$7;d1#1_{uMu6DG2IQ0-mrCU0t~%Ug`|6O?C1*3T
zt;C2vM(zp3u-cR2CiotLnc?NZ-#tcAgBWUuLEC?tL17R0C$TN!xOlt)*DiGDH!{pF
zA^N9&Ospj7=3eS7 at Ub6py+KLTQ0{QxmZmCGgoBBFF0s|H=1`kKu+9m)%FPo3OEq*#
zY(WmO#huw;jJ2+?&L(<fu8H at t#j9B&uJ`HjTib-GxLz!RjkL_a&&v#EF-QPx7=v$I
zOY|;l&hpj3Lj=aUz!Qh at UxGbnp1qE<H@%9RTu|HVU$IW;y<f%qejDJaj%VHonvR%Q
zmys`gq^(EB48<w_LP at h#N_*MTQC_Q5=6!`ZC;y-Qjqvh&z!o<<x5aSb5b}zxZ&yu$
zt?gyZ*=5Qq^uxLpgAj*tm34)8r7|A%Ah{^>_DcWNDHK1o at 72QQpAJ7z5<e;j_P&<N
zmBBG%pl at fdk?*JDlvU6%0>7$g67UgYTt~yMN9=&|lZLa0kWUW!&O&9CU^x?8=sfE2
zBkFMhHo96N;@}YdBkzp-2PRJANyITaA+KT1jn);H&G=u!=q;@(#LDLNCb&uEhXS!x
z|0J0y&xLQ?GMqi!Ss+vQKpgLO{72py@=XfyP?TAMc>8)zUiy&WLN>4|K0kUUc5MdH
zc at tTS(0<^CrIzy=DRmy0Tv at 3hZ5LZ=y!ZKw)B%Dq{ylb6vOlE1l8yCe;X_{-aFHn!
zxk;@Shgy4u!Mc`EVUv=dwObN92X$UE7+4V4(~ZFWX=W+<05|IIf9okGSjOOn9i%+U
z3?G6H=+Bxo+etpO+%3St>WKg4rKsHHuy3>mB%wbr at 12Mv*FCqPTfqLM7)$K^ymw7?
zXEy*_hkO7e#(Tieup=CUjUBmyuov>W%L_=tGo-8<tQE!Ya};B3^$C?(A74j2IoKc`
zpIu4pOu&yGSF%YikkZ1>-ArE}Rt^`&BbIb#nO~g at _LgX|3wpWxB-c^nEHQ8?n;M9n
z8dz`W)RiZJs~zOCeP++?t_ShAg{|}wzS(O+7O{CwZwNrVN7yd^qAy3CMXVk!8JBq~
z^a1QN(0gJXk@#N9tnM-q!~0$2MZz9}pECU_^xieV4|Z}>)30-9rQ3sNrq=|E8Jnt~
zV5+tL=9KgwxXIS~4mo(LX|Egs-LMPhA|}{2b}?dtIRz5t+RuW-HCgCWEAV+FZ!(j^
z8GAX&r+ihDyvCPLIW#+q%rC-c^h!|P;5Ug}z*{fmAFwN&A7kFZuFM~&=qNR)%<$(N
z%WtxJtK+Pl6$8*`F(j|*rbp13Gd5K2Fp}p5 at p+DeF726I`}cWzDe&2;)x<uXL$BvI
zARhQW*e%_#$J_)q>7nk&f*}1w!NBBpl-pUIbj^+2K5RmdxH at 1B9+Ky%i>z!ayP&Ur
zB4Sa!##%%j<&Q&o?<!9U7Q at b(qT9mHhJ9@&=*5d{k6 at VSd*=O7R1os0eL?)78e<48
zTO8o5-#nzis}}=*G!^^X(gKx!R))d8$GL;Lfp`X;noCp)zLCt1kzdl>KwK#&{g|(d
zC??n}%?rxy{5<kq#a`o5*hPoSD-20{e&wrS<6orwik~;#rAj>Qa?Xu`oej3hJrP=7
z5$M+n&=hTq-M0?q4-84>R)(fT>uPyLPw7gnLAsap<4vq at _y-W*0^kE+qes8jh9kcs
z=npsYVt;>L5!Uiix-Q at -+Zk|FTLnz`u!)k1=DjpxDQD at w0}mGldwU at KPJqQ>a!J+)
zz-|;d6yump#&NMBJcf)B;wB;|F~(&Jzk&D_z@{w0e(=9^H)JFRv!8%x*jkJii|E30
z+gUGTeh_TVROExy$xFf`b?bd~Ts$URrpx6O5iGw2d4Vx5u$lX4ChF_8c3!6${Dw<-
z7+9C2;INS1lU=G8PTzK>VBCbdAD;Hr3H)dI=ssz)MiN2uisbM`Ha}tdZL_ZEw|)b5
z7-d(?AhdTncoTLzYo1~t!IuylFW)L32fKUy1nA1g-S^cevYPZE@*v!`dTVlki(2dF
z0zGaf?K+vLP73KQu4W}EZ-5qDA+&)1k{n~g_<GQ=fy3 at v=0B86=9c;$W}J^l;JRWU
zbZx5;2T)2&v{H7gRvMro>nfszP5AX}^q+Lo-Jm#Cqc8*g9IL~4 at 3~-*ntw7R?IrvC
zcGf)7hSPVPXO+8E^V6%bhxB&s(UtSF(f^l~S6CX|FKCM^G!FVCf+tbSYxru!oeWV(
zCZ#+}!+qG3klv)u=}oo!H}{RKX6U(Bpiy2Ck{myC at g0B6uO8{u<bH;sp!V~Rrq`qV
z*3dX^Gp{#%>!ivL;r}56zKv<OAPMsv_xO#_4J83TB7 at yI1M30)B!Y!x{fU1-EU&(>
zeRD at 7N%n(Qz$XIqw*=3_7ya{(L{}_JwmhCJiSVG at Akf7g$V;_`_ at P8zR^DJ~m4ndt
zB)*vAZ3b_#*dR!r(TQ<EeUu+!{rtr2V@}Mi=`-q~bL;lOfqxAfxsa46ee06`RZxn0
ztx=xLFwpt at 28^MOCik-hC0I93=)kiPA8!wxi<}a`9$~JKJuA?>zeQ?3w^Ax~68*I2
zn{MnOe3COyTb(v-HS9NG$bstOj{_eBtbp?&e11SnG)r}w at F`@B&7B5mv6J6!^<I_f
z+UR1~zY7%|tXv%Tp-viQ7RDO(M6&PW`b+T5Nh-BWgWl1#zouRjAKU2jagaNB{S+UB
z^!AM(Gw%s*AXAxzHPIXE>+zL%- at Wii<zoI<%=!i91atF{+-;ZCjRFrxvB?^E-hS3~
zNb#K at 6M4E31B%e^Ym=>=S7QjRo_vdrBYXvHOg9OZi(LcU;CSBf3^xn0U@;b;A#5Aw
zwgi2YNcQ!BEYctFue_d}H3oV;&P&<^IxeD^>>UNN+`f?{wgx3G=x$@FA-z9ug0-`3
z*+j(6gYQig)fgJ@!_f%lC=L>znxF(S*D;5t5I-2`POJpmf$z^g+~~U}y2Y<h_KH_=
z8wg$pG%SPUBK&+4`tcCW?9~OT%@k;|g*{8z3-ghT1!9>LKLL%dA~rli1L$PXm4AXB
z$1vZjCEpTES0-TI2OFaHVD6cpbdMRnQHxlzh&e}Wgrm+P9%=L2$?R6l-CnSZf<FT7
zX##C)(q8OgwQq2&$J`hbaiUiO at iAGt1h)J-_<?Ck4XgQ)LxDl40}X~QamZPQzwQa_
zHuU7m8v!nDQx7Znh<(6P&EDPY?9Ipu+!vFP!wPnJU_<sWI1gfvl<t0Vc#r-%Hx4wi
zukNftT4*y!kNv<}MfO|Fq2sC8yU9LCd~I~w_}?KXY?AUc|DObNMD~&e+gWp`-!(`n
zH*2!|Nl38HinW7WE1P>VeE#hI{=iP{A$E2`yNRtG^YuH-rx(%hz-*%a|6|HNBLH3#
zW4kXT*lu&$6n)rIvS0bi!dk7w{&3Cy4&GaqdllpE7apg3!k(<n`YU`{_dJJPw3)Mo
z*!c0CTa3SuKj%4M9pqxz7`pfIh5mx|=yxmDvXut at P3!9NBYd-mmH4mua2k~&U_ubT
zIPx;^35;GG{9_8vtBH;r=aNyy at Uug%a`>%f=8h}~-26InUxtCtSUMpt;#lN%V3<N9
zj!jN1^MCH2=-WeV+mI-gGrcbVu48MjCc!trT_%mngzw^F(D|Z?^X%swUzwX$A~(Rw
zB%;&*pg-}O6J#obfGdJepxkX)wdJuUvDj;jix>;NxlMKo{9e>6O|UiGh0Um1BQ at JJ
zNkd^b84(XTn`2p3_W@!oL_iK3ADM(TaVTOn=F at 6sKiV3xnx756PWS9S!>rkpJa<>z
zMgg^c`Ep6o at _$N-um-(n;xUJk_E-pw<{x0jiUZ#>$bS(fEH1`Vy6Y6MG0-pSPJ{$?
z`>Czl6R*Ozi{V#`n3od~@607*SC<y9`vw at KYX0-eL1bO4Rsr*X^;BwD^oXyvb{Y|*
zH9Qf%dqEZTj$*dC^y`$(pdr$LEaFS9KTBv<!N^=0d?y`{F+j_K&u0 at nHFXi~)?&{b
zF2p{dA$oVjawIV>Im3Xp_tz!_WWF2${+r;%z9W1%@X{{@WvPk~TdVf-P0KF^Yd{+|
zFAoY%DeL#u&!T3`CvPoB3>i7U9rV5zTS4ZoVl+ESE7Kr`I-wz?9l$>_d at QF`ev at G4
z1e2ekt-x~xzCh at W+zq@Mg|_1zA8mc6jh$$t48Df404ZI7IM=<Q+dP9~FVKXCz?)fR
z&y#hYPxkyBK}wQKe!~Mp)H*ZkP3z;^1k-mm{RiY2_|gz{!p#aDRjdr=o}3rt^AYm-
z-Vyq!`wCdz=YR)$jD0p1bXV5Br-BZ?uBj;V at AYqj6(VvWGtPd$;TV>QSj)JV at ZJ*N
zo~kS3tpfcip7!emLeHJLUsy4}?I%Ol|F)kH8vN{@!kRpt;D^5#%qPBj+-oRvJ@(uN
z!5sLXld at 8EZqkov>lS_%nL}lMoxoYLvat6QTlFqE@=JWyJ<r~2K+N$_l0&)kUGNVw
z{c-!0wXcQ_L!7yPVY~`!zY`$;GKpo>IfEI$5b`{c<vJ&Wp1&h*AXq>%@&X}m%cGN#
z`p18bo%PLo5;q(HRNmyPp;y^T at VVkf_+!FX>3u(70q-+dz-UPk&Krbtfa{w at aH*g{
z at C63Vw=p@>r24~*p5i*_Lm}wy&o5JNry@`2IO~z?arCVKH*_#_Wp at Qf(gWeswh8sA
ze->Lyk0bIna*1PpcBF`g3-)yHX^NfD%X{sqm=EI#Zy;*yrjbv1EbPzd??S?3b?=LY
zkX$!?jO5 at X*jw-ms|la498?mO8-%uD4NeyGdrWSgz~EUlB7usO?enALO~7%X{0eV^
zs1<o2z0P<sVn8x at ajPJauIIft{SSNava$ci9^A?7!SU=?#A0kG{`xr91-QX;?X%k4
zaaQ}UVw~^grjMCI<n&iMfg5{8mK^pni4p0z_)2?pu}@a^;lHw0GyEChJ-TGrl1zt(
z$hDA>J9^p}odHvJE6Tp|F3LWRc=CH*iNM}-kzjjd$>15~ue2MIPF6E`^>pPR_!U=S
z?gCGOxMEYtJxg8pJ+??$#amZi59~iM>8O7d(RFmim4wd>bj!yGzUtEmLQfBowXDXz
ze1#ij^|sHjdfVQ$dY{O2>xpjWvv-u+S!R51u5OJX>1*<A7M{I~HU7RK=^*(}v-;Wh
zIp+g=)U(&o7TE6z{tI?|4zL9;zII4AhHqp)VNIaDzz`bw<4o&+c?o*xnLdnD?&o$}
zZV_?@6n2*Ta8SSl4leWi=qC|!8k0H#Q>1~P5(j$am)Kb$fd$4-Bc`@9Se$>@>NAqy
zFE&<U6u@=>e}gS3;~KD3BjE$KS%~=S at LlWZ!pi|Wb;O4He$E=D9K?Dp7PL|qgZ~;;
z2IjsE>-sj^$(l{-d2bSboGzblq;IpLnEx^OpNIdqSV_$PVfcRp|7-F7r=*|qa+TW|
zJlE^`d%wf*0nfGT!>1TN;JKQwhtFkvBfcOQK2kU6u0JIC%k6_6elaP9(FFsCPjXul
zT`=-dkg*y=d?$eI+6w&K8{%IXf5fSzU(i3<73VI|><p4uk^emVQ|P72`3>-;NMaZ9
z5`28SU^;_8E9XBCK8L|5f>#o$b?|v1{ZPrC$H);f+4G3|nU{VU>z&CL1wYmg4({$-
z^Lszm552!8SiQrfimwgQkLrU`RIZ>os++8s^m~{WI?RviV9ce9lXdkB-IhVFoyO2?
zhBpd&qGRyYgU5hAOk(toec00ptw4E6Uz!+RE-JRmzbLn=vhP<P!e8c`Awd76AZpXv
zg3L`P3KWjM1%Zwr at D}-k6nniMenk4u?dNj$*v+}cSx1?*pn`rhfp!TNVvVF?E==l$
zI2`G>F;8~U^0XW1!_UIw3V at 9iyV(-Cl^rj)K at J2Sf#^BDc)(7OKW6r+Ons;7Y)m83
z@!Xpxe;$4IggH+oeeA>j at rU|&^QUVaHbKG at BX_UGJ>P1-oU9BY@(6U?kC3CdonQbp
zgW;ot_xsBjT^eG15?%;+L+F+vk8Ee=|7fyC-}B-4k}<x|`v1s*=OaF;h9wr%*<nap
z2h2A1c_rP%$eQ3SpYrBW%$_|7^!7#A^O}HNweiO>^Dy5IUm*DVwAwQs?y8&@G|?!9
zuT&iNl`7?n7z at Nrj=6@|u#a6a;AN5D6YC=;GEQe?{J0F+X9V!?{A^W(i-kBcJ^m5l
zLfKy8XGY59KQD44rcWE>*Dv`-U30hZ5^E-D3&#8hqPNg5FwEWr>^Pob=BLRG8qvvM
z6+;Ps2Yz}ip1o*oaxSGCvF7r~oQRCGe&dv5?LC6;<yK%iiNDbN{{E$goM8gsHa}a1
z>+9hQx3Bwpw$)d+2p7TZ^4}K!h;I(+@*P87fQP%*BHl>QWURMIDzdNn53#db1ZyyN
zLPaxyu^l7$6|^|ewC9(X;CrUP_c8YxU$EO6f6*a^%vvk-nDv;4Hq6I!xy6`^dq{oO
z=07_hAzP4G_ at D3_<i8qbZ)+p;<I_x{r}T}7V7~S7O}X+*5-;Idyr at r>13kY;_8sb2
zC_{@Lp6PmT3z?Jk;;z1nCv`@A>12H~skbndS!WD?$nPbu#T>pZ_=avoU63zt2Y5{E
zSwj$q;Te4D)9+Qm*EGY_kk$Ztk_6m(0`f3I7l65*6_7$=b>wJeNy=5wEts(<Rq$7$
zj=zxnh2S4z74P!iJyY)#<9sHL8XRMgvsz7Z@>)+i=2M at +ZuU>eK<i=ux&t2$U_8O6
zsI at uMWU${aAN2_GMWr)=YQ?c4J{H$j$X&A8IOh0rroacsT=`0H%*m1Ze4<Z8ya{{b
zGEOz4SC6ySyBEmMF+NsfYrNhh#%JtQ0P*9H>WN<!hp!gd{+id4><2CV!6(D(F0-<s
zhkA)^CN>zRzm$Z&K%YYF6I;Q9?yZ6R6BEE&6>~|&hc8hSi8TSa>aF|@F8J){#*&;V
z>i2p7fRE?DmCr|S1T8*Ecm};olNc5R`H|7F6Ff1UBL5ru(t=ppbxhfX(0TRMwnOI=
z6h4{gUH;d|ij;jPAad3I>5Y(2Er^i<-7|^nfp|`|9J;yOpNa0`?3!-*y1)Mjn(?hb
zZg=qm=m>9z3?%epcmsHt2F+69YZ11XmLeA$bmo2+={m$B-Oqc3yy1z;>!jTI72Wy{
zv;jHd--GWMe4bIp(sP&(Yw5X&S0d7`Mc?~{s!7cC%|k)c{tchoR?{=`oO9&nA>(C)
z$09r&yPD{YAeZ#@#m4|$1^)+3`U%7ml#wzqu71!DZw*LAjQZm2tniskA2?aF&g?gG
z<gG-nG$C0;croJR(-~cXJkSS7IZWIfKGE-x`um at jm!n^5n0{INOuuA3?U(z%^-B*0
zDKB#9ANu7oUFTOV*^l{nhYqAY{FS7x|F}bRmd;Y2UW>ffE5X-4&_y!e9#nyOVuydx
zj~G+CxZRn#$)@TN%j6#-d^xToJ}7*7qBhlrMiKif^qYI&%V?mi$RA_nz3a0vp`UY@
z9Nyp!h0#R!!p^HzAgAN(O*hd`&jBaZsd_%vg<PV21gYHkF{vcS>gGPY=h$|7G{K*<
zF9A2M3s6#FpuLBYe-d$OKW?Pwg2wi at uXp7Ve*kH!kcY7;79&^ZW{&WMXKa?SIFG{G
z368x5- at kNKzu3Dt=HNeYiHt9xLo<iOYbf)d^_JYtn;;fIwwYy?A})?}9g%OUu- at 7#
z=Y?*5)=!D}>e14Qde1cFOgiPaxH+#DAU2K!GENVS=NWkiJ5lap!^eXy>UvhHolf}V
zkl at XAkX;@(#j$HhTrI5cb%>vRI$lL&f8}uGPx}FSTfZ@@rk~^Kr(egM@!8$ha!-fD
zXVw#`ocY&u0D7G&<%c95PIoMyS3hOqE8XEALT)?wu=w;l@^<=N)N3`$L(XF4MY_em
zhcRdJ$gpjQX%ns4ikw{uVk?h at xWAeGY#QV at y>pIg<quFifE}+2G^ELy#Ptf}kPB#^
zyj|58bC;h7-fRup{v6Q<6MHap!4h^WzYKP`IZ6{x3IBK@$E-1DXQ{I!->S#rdJ6L`
zsU|_>z}i)6GAIZ3&3t^<+eqYeHu;|2#WAGU)0wLBJ0hx;lm+})ouinswS?53+uQ>_
ztDWIVOb)5<obl9$SUdH<j~@m861wWhPZi&>W95&-7a7YR&3 at ZMWcnTnBz~Nd!|2GN
zEA;79eY$SG5&Y6}=rU(v{ghD-w4eCLBAyxiT%pqzq;Nk8ou(WM+6vvbV()MBR_;W+
zQYGvo<ejnrqt=G_Fxv^u$G8)Evfp($<tIWf#vCTPUhcdxG9t at TLk+!iA%}|E1&~*p
z?uz at 5FOYK(H?TuE4>pLXKieP#^Sks2`{aM;O#tuxA>t>?!54j=?g~yJ at q(c90Zn;5
z1vy(1L8qWQ2?*p=)0r5HV}IHI>7 at TXr2kKm{#Sey6bHP)OUmb&<C|n3NOyww-bH8b
ztkcY8+V~M@$?N=+VIj`RlxN1ru)oX!t)htBC$9%qAPsvM0*7M#%@p at y_POz}aed47
z3MRwX_XotJWqicN6rCVPoN(qj>gjX;mG`MdtO2yc+q4GzE at O*|y-jR|u&*Jmi{nv&
zDmNeT3m-w3 at IV+xw}NM=qvJ6~i@<*_Byxr0SE5UDyalW&$*DDi-Oks=+EH&CKP^lq
z(9s^`fHd*+#CAsJHnC~QpQuL1){?nRzCp&gM4?B_R^5M?y>$`h_?+%Jj(w7h^;Y;h
z!q at J%btH0j&uzhCB0KCn&6@!|$J4%Jc%HkJGWgjfi5m&OFNn8xIBACGzfZ>QjRoNO
zGsO4)^vrzbnKrz$MabwImdp~Q(oWR76LLbo-_1ePOFe|t3ptJMQ(;)oP2mz|USHD8
zkyntl-tbO88>!oG>)kXreFybRcN~Dq^q`5BRS);G*I1h9d0gP&^i4Ty@|&FV^P3ut
z)&^GLZ~WUEL*%WfGh$6X{6q-bYN;U({6EGc3B2mT?mp|H3$!8(Yb6NyhUmF_#U1GD
zdsrKN3ziZZpLrE?HZdUkXt-elVwmhq|DwM_brdq+`v-TkY~_oP`)sc-c2Rql`S1q<
zul`>lon8_r&F><azhNHG at Ar^zdXZp?J<kzBc)<wOkFqmfKj^GaWXh|bd6vY>d;egR
zKi%!83)_3WAj-!-lD>&1acM>%|1(D(EMg<CNbX84`U`n#kfWw!nD at _X3%Lc*x1O17
zTQ~h8<-p!_2{=^54`c93do`1w0}nDSjvWD+OY)3N{6`uZNDal>wRMl7P{GWpYnhoO
zhAQaxT=XeZKJnpZ=KVvglU<0BxkfM_-;8E6 at c@`PgIEpV9T881{pp`%@nqV8dGvca
zww3Vo;u?~RzLEH%A}-vWjHf(hC&uj|ZxuTa-zvnnJ_()5zEn9Ycot-=Eur%X?@nxj
zfBqKoG2>g<>;KrcRitg(YyPrrQIO5hE`0L=zK3-JUq<+=`Q!ng>_9WVRFE-76FWU(
z_3fscu;(`aAMN_(*>*MPp0=x*w8{6KtQUU&9jy-Z;fYV~fDh>CSlG=ZV<3}z==n^n
z3!`W$v*rSOS-bbu-|ck=39WrVXssXU%?D(@65Y+i-9)yY#)kdsdDslWr|<{(<X6oQ
z#39KbvSOJ(pRs4hwz6UnKO{==9k8c}*P+-PKAUz6vN6`H(e}4!voJcs6q!W)1C?J2
z;S0?-`egJBgYP}?D$vXQd0YhZBRV4oKu0Abu||lz{)hSS=^tsG_!61x57gip)>4k&
zcm{?pF!4xoqY=jfbKQS{yc6^R-zD<&Uwr$I^L}vnc{1-cM&wckhPiwGBew_Hn?b|S
zhi_oMNVgGv-$&qenl)2 at -=DCvpO}W&lnfnB)-y8g_UyH85|amhA0A*{9I*eI7`a^n
zxf$|#-XrQ5e1kW at r|>4QVD*9&G7jV#=Tg_T6O8_7uI`afZxGQAe6N}JhUhU{Ccl9;
zUd39=X9tS!M-D=49iL3!N at V(OT|&3MK_CL3 at +a9=-W-_{VT3--4gHCSjTn=E;HyFd
zUI1+j$vDUGRe{zGt?B8{b5pDvTBfGIz+G<L;3e~GqWp|Ou%jsGkgCxj_|JFfqfZQi
zymJP@)nACNg6yr0Z$M5vEN%>q1NP(^Y%sH^4m*7Ag;SApWZrZ}E{8u2c=+6AqVMaq
zMc$5c21~RyQr?5;$obbu{0ik4)0fJ>2Y)rv?+W<y0*u81BC9dDuSbG4<oqdZ2EFao
zM=-nlnj!?edaHAw{=-ShVP4SV50HasDxt at M<S;^?pZ+H?0|<S7N`H6#aXvz48ld<(
zCjqf<Bv at Z%<ePFg*%y6l3O0?I*y|TSe<jU at etPp!27i>}<K=#n$Hfo2coCOyD)^Nj
z!MliX{2BRz=bNslJ&Hl!&~{*9F8vMzIqP>A$j6L)(Hru`bBMdit3W)7#1 at 8cMx0d0
zJw(^S&|AU>^9K-louRiUu^0C7(WZg>V1qM5UVTp0k9#sS8#$NfD6Y|eu5azr`cCVr
z at 4T-1CKFu%Xfb?#iS8eI_h)dLTAe2oGEjFNdsb9Cr3sz9RnQUaL!ac3I)Y9Q&CbGF
zv}%f#(b%`cGH!%s&A5ubF7)*^c*Ey3$-aGvmt5xmkN04U+8g{zI2}xlkHj3?hd4jL
z*15>MEYh80k5SIztLclZtAytQZL*^6+jaRTdRs>D^9Zg(*Fc^T6d*@JKcZ{QC2RaB
z{Kws_ at wyUzHte90;4!3|9|_}hpM%#}j5WEN6-s0=vd6N2<~`TnpFL7Ji}eEYTqCes
zw^)62U*XwoevfOwx-)u-1q{{%X+VIPdyU}X at SQJ+Oh>Swhoh(_UXdb1BSFrWS-_v}
zrH;}WiZoUxu>-DcBG at IqTK5ZCOOAD77i$f8HxAm<L$QD*2S40UzQ4m at -<vH}8~NWt
z&mkf6u7I at V0Q1fxMIT`h)4pQ_<3KQX1taxh)qLea{!9J+8D90DVX&tXeO=sjAMVZ<
zr<LD>!TVJ?&)d&B8~XcyCG*vPLNb+se1;-mE&8%!Ks(k#9ykjO%LyOuPBWNbZIol_
zcgY;IoTsJ0u}o!jyTB<zkI3-B<QrG&H3`62xD^8l&wD41BEAM4`~e$Xnz`C>(1DB#
z7|k&=u`(}ji7>R~{!DLO9)Y>=rAmQ(ov8#rr*9lX?3VH9p8*`3P}Xa_;9C+m7`o1{
zsa=zk5Fd8{$v3#PjM(2blOuBY*@$1dNx_2u&lTR+{cPsCb^e+Y_9 at xYWp?h08kfev
z#C$z74e_0v@#1rkovs0UJ<BNF?FnDoYiQablE)5m^VI)KZayt_&Lc9EsJUCGg19{=
zfLU%w8yLPpfPCA8e-J2pRtr9v3>}28Jn*FhiA*olAht%-rh2T)K8D#F8=lc`bkgvD
zh3>=5#yo*<d;FOB-Fgnf_f?#8BKJ!##J2+<c8bw=NU8CNolnZ*gwC_(HO5=>JQA(0
z)Q~`OCcRCsD)V3PcM>~9+c_;07+x`QhG)i-m|E4Lz{m27fd`|R_&?RPqD{8$7(kGV
zs)<YkdRYx!B;n(3;vE}eGm&q9#ePnahP;|P(FgaH!OF8;=MBnW*jmmj5f@%ea@^L2
zPS<)7UvwvlO<N${bf2$+K4XF%wp;v<QZMDJNZrJ>U9osU<2Ka_<?QYJpOtnWAI|v~
zY(~f@=feOKzkbBudheh#H at R~DfRkP4tvEkQ;;~!gmj?6BR at j_dch<WW;g_+qzA+NN
zIPlYmdw3^PA6y&tK`wNbuRw=kgHMn5wv at 8c(w$!TB#%dKyXw*cO(<W87(Y>EJ*j-<
zr|?VNk82ZrG0zx1(HDrt3j8wa9;~l-j^`c>{YGC0x%Au6LP9qyz3r)5op7qwi?Kn>
zxJ|WVq9C`=8fKU{m&otP$sHKwK;CUL>SIG*-d10{f*j<T-85O4f;=;Yn`R&0lj{wR
z!?{8IT7Xsjgz3+ejfkNDoorxCBl7W??;xHw`mc()mr2HHqt}_)Wj8O-9RB~eo9o?;
zGa0<~y^w*-9I-L)&jQZ()UXFa3A<CH1rDuL-bg1=7YRNW7^{mRL1li87fJrx!B>g?
zqj3tmnz?2}c~9}%y1K6MJK-BYJQt1of53FRWVt)(v3wUWzuw&Qkd^*st5?fm|FkiC
zb%W2ok9TSOva~W`5^^ik$gLdD<hrkB at NdXvh#a`%)U at PS2tQxt*aSI0tpCGO=>-$w
zY9r1f6^7W&JDIsP&yITVzy0$(WOQ1H;kQdDl$G^l9R(fvuc_|mp=2(T+y`slDm}R7
zeCfgT4E$0{3v|ay58hH*<Qd#bQDHHe#{tqTlII6=FoO%6s#!ChqJ4e9-cTtkEDjlD
zboM_^%7r{1=xZyTW^(^Ll*9*-7!mW57f^+KGo|8A67Q%owXm4*P5nz at XO~LwJ?$Kn
zzg_L7#@nZCc?(#JNtuBp4nJp{XjZ=__1hC0_P(h1A6!iQJt#-W5RMLUuuFuq!5<(e
zH1wi+)>OS$J&*X8*y}Y*%KW|<=uZm}|Dzy^vXmCyD$laX5#tmzG86mrIK9)k5J%R=
zh0bK;>ImrX at 7NkJguJWG#k*SS7dm*?Sf^z0sgR-2^UTk8W39L}kvLAqaSD!+kjW3;
zx&z;7a=Ze40y%!)1ABvWO6)1)WcDf5FvJ&{GR&UZhYQ at B{_&zDycbhY`{=Xf$Yru6
zB6wxrrU6pb4W~r^y--VJeD!8L_iI7C{vp4`-l$2a5jhQ#10+_*<)M}{P7$?qtzKeY
zlK at O{NPeV7njhzsYKIypQ+39(@Zl8cYiobdHwnIEHwZq~nuj0q#eSp{6xWT?Q60QT
zcCYq0w<#!*b8Iq+L!7KS13&on#<Lt3iNSwh9puAgr9n7Qc});cb?}yo&B#r147^as
zm=zV?{-RfUo^V_4)++UPW$!@WG5wWOweaufO~UzP<$Rpi3zBa%X;Qde*p+Qun&?E{
z&J>8t`t>;d_e#vQ&g2zk{Q|jvFE2f~WJmH+dxIu2qOo8#)AlCkM9L8v-)sCz_-s-)
zp%at6oykrdG8uVME~?J5TS^OmOnp8H^B%U>kRiaEAIw|@Or8z7gz6m at Drj$S%C$F;
zLOdbKfs)Kam739#gCT)>x7xz34VOhCHxKd#B#Iw0vAzZ&*4LDYHkv&mXIduPlzL+#
z at eO@H^_R_c>hTlJseLhSJrD~l^TiC<YLE*8^K-1ys&2~8^1r at 0&pEF`WvRN-+c8AH
z0sEZHDYq<|CP`~NT=;5Mrd8!azSd)zRr*G43F=vpIT?AvFN7^W{SW7|)8m})SgPn`
zjZ#&%e3COVU=ZgcRU?T{J$P5zgOc9*&rAb%UNMf(8-XyFeVys5wj+BTN!&P`tKf at 2
zS>>X0AXjHoZKa0sqgk at xGWevqLfDui3%Q5~XDP0Ulb8caIN5?Pv_k{NVlT`>9>MKY
zpn5=A&w#}o9dh}Cp6Epm6Y4T2vyQi&?ohYMJ4>q6{@4R$nxu-6&PC8~o2 at pF1UQ<d
z;7 at xjKEqwRJcz5k)HAm^?aJU)Dk~|6rL}t<AIG|KNc^BwNpZ*!NvX3ccfd)Tp1B{w
zXIpEdatHWwo<pCr8UD}UAvhWIS;5N1+qm+ at -v`fK?%<|$y^Civ42W-yBRft0z*kqc
z)mZqNlUxgyEpu?8uOa2p0~BxguvHpT?;nsGel+|g>z%4#YWG0B*Emw#X&m{y%cywU
zWgPi8*WLk?f7jfws5Yz5BOX&wz<AO>{plW7om36~osc0LWzK2X0}3+Z)b0p($gs_W
zHA$O4&?M&&{}7w&lD at C!6aBi70Tr^UDoa(g)RKnWsFL?27~3S0V~X}-9-R|Npfh(@
z)VEi`?|YcaJ$P}Nd+;2UJJTa~oov!qX1cSRLV|R&y4q(hh{}B}`4{ZvQTlZ!tMxbV
zOf%wIj%Hoz8rx+R=Vm^(6we}Kdko)-LHVKTF(E;S30KI~v;M(uH@&03VjRfsFe*o_
zL*BAn%`om89FkMapdEsDJkGzH>N@^~c*7$hANp*nhxSTyU7(-4_>0m#;88!te%G^K
zw!N+~S?tmz(C2{Bgl#0(%vVixLN+8k`X1!>F*80eJmkv_Dn~2@$v)&zU~@ht{YGC_
zXF}FBTfMIAiT^Wb)whrb5ILf9mjRFMgx|E2rNQ_Ql>Z8U=VI0h(&st{WPa?wx-);(
zAMpJy=6`~A#G~A!(4|k`cm+PW7da_IVw9&c+=~VfIY0xQv!oc9zMgEUHVixy_I%`h
z!hECy?e&h2*+I#_?A+k|JAAU1mi6?{WuGT)_5UBKa~7vW`hm{3r}a7AUqq=HyLK{c
z1PN4F<vjmafxW#cgq^-5TI3X at l=<zf6$J!XBO75Co1 at 9lov=$dBB4aLzho9Lf%D}a
z)^Odom8?-q%~82tJ~y#F0zQoD_hOwM=oz7d?G(g=-x&h=DGBiyhLm}49bnsyQ9&(6
z>Bc+AVdK5E8^3+jB^H<POtni%E;Kq}Z4-+JJN{qQ33-lpMlf}9qE5)MTh?#Wm;$G|
zPV8jGS2Q at Knr49v&#=mRCgq#Hjt5WTkSdSAoD$iAC<A{Bm5}<t4xS`$By|K2)`_`z
ztW^5N>+~ALv5;H5p6ST%BK=|lej^b#y=PK0Q at 4Fg-4YQmMEda|(BnKca<}&HLyal@
z`ny8p6soIa at oxxqkdNXt<-#O=5qt`pK;K$9f0v)~#8HjZ60yrUkZKa-;28;?iNiCA
z at +-LK;CwoR+;a<}+3yO(6FYp*>b-(UJe%Nq)|nu0!Ly#Odx*7*dos0fyh#sCrDfZ_
zx$1RhDeA%I-$2|1%zecY^K0s6%vpcvI<E5$acsO=wXpIv{tf;R<+;*>Kb{cEP50y7
zkk64{xi;DKWX+GT&7_v+d8G1oyCh&>&`g!n7-nz at WaW7+Qp#zWsj0WDx)5(!qB+N|
z%32H`n;#9*h$s9-qIOcY8SxZ3pP4>Z5+9p>3aT>N|7B{C#z^WBsx0%~KA`-8jQi~)
ziYcUCoKMNKm2P9I7`c5f#38;brFuuypLfV~KWn3=MHp4!ENV2}S7uwh+PKQCCsIw#
z%IxTK1cy}ALtcaL=}wHb)bUq~_=5Q;cL(IcuW`(OwtNL8M4qprw(fG|t^6yd>&k3=
zbIOHOU at mKm+AU4qI0m1H^0D`VC*_rw at 9;C&w{{@*sB5KyQfDfra4ws6D6^Hv_=>WA
zC7r-rjfd?E`AeVaJ1_dKwX5$O#<;;QK|JE3K$k~i&QnpwYegN#a%uss^_S|N at YAi{
z$a%_B;VGo-a&L!Jt*)HNzXAHQ3;nTM7*pvEPZif<ZN4lNp<VvUN~ZrP(w6dOKPE;h
z>61#gFje#fK1IGhU#c-qI3cg*9pau=A)XA%N)qItojqbZOd?TRsD$(%`lLf{>*{MG
zuQrzSM>5kN%@(isqTE_4{j!SRj_>OJ_`R+^ZSLyRi@)pB`Aiut=+leceLC60JA{7C
zq{7gzA9u{Rug at m^D%P#yTv1Fx{*J!Bxq$w8f_b(?V`2ZS+d=Xg^xs3Sq0g4lI at V~p
ziRrVs=(A+>*{9`Rzdh<uGN%QLbXzdrhLHIdI-|^cbFXi%-TYs9L&to at 6n<Of)@`X8
zV;JytMXdybePNz4)6!{7*yN%Hn;Mka@><9bBY**C;Wz>JryHYiU)tYQxsrdwJZoJu
zzfDs>%_sd0n(1rH2Fwv(TW07k{;4f at nYL80uj-%=?`q3kv}G}^Mckg31p}D%(~9-e
z!K|P8>%6}8BR_>YB>b*DH+*A%v%0+A&+v!#)HCgwX3Vsc_Gr7>a|>nshm7CNx6tNV
zOMO9-#hY=F%zaXZGL`CyoQ3m2FWg$ML3-pmu#=aAQmFA<<l=Qq7FXxQL6<rcm at uj3
z5qRBW+&IkjB>63a)Q)_{)E&XR=v(}6%h+p0l5d>STxGbN4f?pNNsv<Ea!Mh0k{nCl
zu)U=RdU+5h-|zE!B4-^9r+Sy)6wVc2^GK;P(bXHhn%-eqykEj}<bR1y?1g`gSF?az
zANDKSW4a at y_Va$Rd25NBU!z!iP`c5JYwz-Ysq~g4`>y3lEnU}?6 at sKN5AL6dPQbn1
zVa#<R+x_&p#$=u<ZWXRV*$cvGd~biWRk1d at iu^B!-U0DH at gBLpDAv-{IDouQzL(!s
zwhims_dS!eqSIFgo7dQNjlWpl8J&px3&NUkZ+|p%U8}RmH3sC_br$V{{sX=W9%;bM
zz0!}pi<11@@RfW-{`1ngSIt^+yE4K0I5K79UB}PZH(%8>-$}^L3HcHKuRi_1n&?XS
z+>Lpzso*g-2hUBrTLXV2u?z8W!Z=run-gv2rJJ6_3#|2#k=)b5=~ypOiY3?wT1rG>
zZwYPj^7Xn#a?Tq;9mDvn#k%T at l#^#RwUM#<@@<S;;cY#0-bbsuq|kc at j#qh7tB&+_
zN>^OvCXO(ZdLWLx_tr*HhdJtljsod(-j$NFp7Z%yop}w~IZgi#_E`5F9PLvy`Ju<j
z_?OqWCnH{yv at c|af0!UM*B1RmnL~PQ^g89hlsz%sUueRy!}R0ALxYbE)}8L{bZEWi
zW%=F=+xSj#(y*7(YN9X4Z>*`0kye(`sl#r(DdV0L%qc&Id?IBlKQ_bn2e#vV>Dz+m
zTkGv|YyD4%ugNLIf9RoWlGx)7vx}Vq8GAJBgJTVuJKGIwc07rYC@*^;N5jXS$SER$
zh&>KDvhA)&)MxkdCg6zkSUJ|m3|4~D*-nb|N5T};B|h8Kyl}U?#;|6?Exu->O|$Iu
zWv9k;9q)L82Pu!o&*9!g{L>Q5sdm+T at h!wnwm(?Ge5+l>@9!VFK>21opZgVJT-SS6
z`@Y4Ega71q$Ul(fit@#7;Gus6J$gf!q?pfl$UMlW3LCrHVDEY1E&Dqc-mnk4 at EYzf
zH4Z(}$^S3j`AM>eC#|rx2!T1<r9K52Ku2^`Sl^BOL)K1rI(bI?6Hg{S<?DBR_fW5<
z!3k+s5wE!C3_lUD$QRy%4w2}ufY-e62E9$(RvA7Dn3Bq^1u2%idyG%1`q%$w9Y+6F
zhmaqcIrs$M at cR&cN~H&XvXXCDBp3e1=+MS;@+!+mErwj#!GA;CiClNlswqmjAdd4t
zK_bU&c)06y2p97twbHvSRosYv7>K>{eaM|1mC*yfMZWav at MJ1Tkg9x+|4`gxniRJ9
z0;c>CbcynE{M<_Kuc;yj#-eSn)Z|^10vnt3UcEEU?*`)e{uefe<Mz=PMnnvgpD@(z
zbQvD*xO=ip9nRmY6bpAv1dUt|pT_ru4FB;y=7-8Ex)q0Du1N&ze_;f at g*`;D(kgP{
zT1!22E>lQ7Ad?6udf@{=1*y{-bL8nR$RG!OWzZw(67Wg^)Z3a9&`l>Rw;81Wh79r;
z-?4Wb3_~vGI`&Y^)uEct%2 at VHaXsNV+;Xe;let!J0b-{Xy)Sa6-L`FYR^i*StlQz=
za4Qgd7;%Sd+?qsSm*UFUtL0f1jMIxF(y;G;U{QUNq&&8FA?0rzH`K*f1WzwLXfcJ$
zC=%!Xm{VHe<w(_`#*weNkVkw^N#=&#n$bQvQnM9v5`E6!Th`B*bK1jcQ*MS$gv}qL
z90vdGWcal%2JZ=(1bK8NY**=l=Ux)Xbd$o5pq at r?3up-|Ln3Ogj2 at ++<KdqxnGQWh
z8T;M)*8Ij*pf_I!^guq)M*gpstxl4=cPm?_F)F8&NOy##w{NU=PC?8)8PW6G_o@}L
z9;IKO;fE(Fj6u*z at QTx&!HF|GVG_{2bKnCdXnQ=$KC6pi+CH7M9qUd(om%u(O&Le3
z2 at UDXZbJJCRhv!6<Ih3nbOSe&$<!n2uv_1Re3UNwnB2jdB<e?-VHd?X?3Ga-^sh${
zhklM at yV1r2rG<CJ at Rchl+BC1uGWx=((yt4z+Xn><G!8xJG7jD9;(sjJLnmN8_OzUx
zOJv)vpqty2vBKB_r?x2l0arxE{UhQ>+PoJr4ofmO`5S3{i)ymik at F$jY)r^=f>wE1
zV$g*|v?+toQRusW6$2v<K7EGDh4-A{Ddk>crVae2rOt`xdD-Yg5)1SDuJ=;#ULX~w
zMxML>M3NZI7yc#;oB_M<g%`p1v>T)!KBD8~wxBJl?}52lcX0P}i^}H&d5wEaOun$1
zxQ)NsGw>{pXV-kl7tBi^8;l$*jk5|a6 at 5@s?M#Vb`h4a4Wqv!f=#LLl at 21r$-#03@
zyNp8)Ag23;7t!B{4J_HC+N?MYx)c_$6*w9x6^1%Y5+;}ROng}c-?Rp~39-M at s+qkE
zW1{?*W}C>(A0jq+1p1EgL-5>N;=82>5^MPX*;ucg%H5%Q0ebb!7+1+^#QpD;U#FQO
zM=rpQxxy^HTO(JLgwHJVTlb~-A at iNt1x{+T_*Q9Q``NV#?90^Lfgh=)E1H7iZ=m0X
zW(j0|<5q7C76s+ at s|-%;S6+LLsx3Vr^Mh`(b~SY7nn<bxW7q_laJ(jgi3uU=t}k-X
z`E%MT-OdEAC%|gKUYCA at n`*pPu+ at CmBjw&SN-5-wQ!Zro&aslO5cj>MYaZ?+ag+n9
zn0GES?==5E-`VSX$InCZu9AMFQ(`@Iyzb6#`?2m0_<^Qg)`CkVGh<p{PkjPAejC<C
zPgza57kja{IRWPvA@{!{YV=FU(&CpvbdDJ7<^16r>oxM2qRN%S2aFkteeF=M>cLrQ
zKN^yDHGmdFA68jEBz5}t at dGOBm#0p5c*g46_J)DB?gDMyio7ZN(mk{>t+hbr at C!nY
zI_?~HATV#852ESu at U3$|hKG-&<hVznZ~yZ?#+|^EcCDQUit(JK%o_FDM^~Ia8KytN
zUnFj^jIMZqAHmM~{Rg_2(!zT9GL-pk-)-7 at MSgmlb5X%3B{QPy=mcFQeis<|0r9O$
zrSBncC-Nj!$~&0jOC*Pc4thJ?FLp`AePI;%n#t at Y-~@?`>tvp(fz6)0^A>a;QDk4K
zIE6AhajmEH5cs^&6{qm+p3)<zN5L!C$hnN{lLfCl#u!-rVC(j)&dIdPD=d*iBQkp?
zl;_ui{!MDj at c^@1?3W0?^1(T7oFDg-;k<W2OUd$xl1ST{rqTmb-(l_#V4gk6+~+aR
z?n8N%zVc93HFLj+d3G3czm$3QIh3{HX<0j%`-7NgPcZlUGSBWtSrt#q at +bFm+2mQr
zL2^HrMV at sS%GU`~Hdbknqqby4MMZ}JF))_iYw9p)n(Z?yDvL!qUL~)lK6 at +k|0imu
z<#A at U=BWM63X6Gl&iMj*o&PcEx-hDzCI7+D@^3o~1qVwO+e<nO>UTMf<;8wdOUd0t
z^{G2Sl#t;|GYbkz(l@#_`N2E#fY~+%?sVZhX5Tj~9#5R+o_$G0xp7%fnwq82;NE%T
z?0=O|H9M;``S5Sf%E`i*o`MeWec)W0OAGJ+8 at 9u%1 at oz9y07kA7IkEYX1>T}3JYpV
zyUVPDaz8Sr#C})ssuSaS0l!N8D)9RWzaQ}{$L~CTX4VR^3rCAUr~FsAOnFQ=3p`4)
z_yO?V&AX-gR#l?WS+Y#=qhWSL9p=n=@cFG~^pQuItA~8)G0#}%583h{HGgN5BZR$&
zUTthCSq7hp!Nh*38RX<s;K3>`*#A~x;lF3ub|3k-)p3}IlPy~vab<p6rv!VuXviMT
z7>3_V2uL7pzVH_DCo9 at 4cA-7~>|nGFHbZhwO~>{3eCPcJ5`EiWJb&W1X9A|+8SrhN
zc*LEh1ur5u&lk`EmU)~1r`3haV8=*GZ|2I_E<s#+1NShy5jwFumGg)9B6N<d8RyF)
zqK6nsd_ReNQhK1 at SaLKf>>b9ylbyVI%w8;3?H;z8;a4*=&Z)LhS=cLfW6zir5?EfI
zYp|DP8_MC=Zz*1zXsNzGo?T73lqX6LUf)4vSm;7Qmm=!Ts~rAhju}N8Je4bNOe&G;
z3r$grIzzIs5Bkb`i$>f=(9S04`20Ef%zheXUpOi(q=&tX)0?Tw#KTI&;kqm_GjmXE
zsroV*Sa=y?sz`Gk0aeH)Xi(1!s4BmPdR2EAEOjl3rt7<RRRG^tSwAdEVkPaXoHzW9
zkW66umT7fpf3`4E;TDRtUKV6y$LA!*dxg#U1$4X8%^G%8MZNP2_!UbxL^1p at WaW&-
zL=JmkXWm_kcfq at BU$Azz{nPYB-mfCh^$+mkADF({lM6p4L$C28<}Du$Jq~4&3sl_r
zKJkM!Dvv6njCF<uI`s8-uY)GBzHcdTW?U4zqLceNqi=+HS8f%eZi11J4;u+zDqmlK
zALN82#66G*UZUg3HS`g5o`{Fk1pTvrKsDL3D^3d~m{W_yZmjJKNA^4V2FF?RatZIY
zp1LGJyk%yt4Z$_ULBM}UX+g*vC&I*?WIe*i0rB0niO8j$i2ruPKWhq&XZZCu$h-l+
z at CKg$f%IeO9On99TpK8eH`W#%#ji-Q8hv$-xzD^;@jxIm)|SlBwLf$1K65P^bv{bQ
zxy;*IFGe1Lk2d1>9P*&pEb at w)O3~q4j2#$yXYh;B_IE0-^V5UN5Q7i#RDgj>ko*_(
z at O}O+ONj+M9L6IW^kjF?r=}gT7T9e0h|w2f>!ICZ-jXi0^sbajn!RbZ4>ndq=8<m3
z^VUVEdn$hO at k_x^j$a&pN%+mhFDk&wJljUk2d~<OUps!y__aVUx=MT>xx%Z%W97|$
z3BcG)fqm{mnYZOfZqr~%nw!5>?qEmB8!^}OfEje5U!bREj$dOh_d*_OjF*WU`CG9D
zlE^yn at q);E=S4emDqDsRhU_H)eQw5_<zW4Ismn3<kYn>k$P4g!TuZfw_+8oHjAT~}
zWWaA{VvbxBJHqA=*+;O7$g7&Iv7Yg(A&VqHe$HXq;-d59;88WZz;|@Az+aR~*Z<8T
z(d6S=zA&=P`{cV}9V+Q^XK);Q99=B0N4?7-FVs?R`5~{HCZFC8c`jb}DEwpit`;kn
zF!(;uF8Nj9m4JySv<-5F|8wtk at iLHK=geo1$9Lvws*FZz68KPK!RaCsDHA;SHpK~}
zV33Qm8}W#E%1Oqc=UpLz$~PeszQezuR^J&*y#wCPtQo63uBO4?lvUOzq{ep8h*QZA
z!29jMvw&~a978-%FOdnR!Y*>bPdI(XU4|b@>NRwcl3SW~sIug6(sW`AY0sp&rJ;%a
ztaz at 6P*z!T5H_ at xQp;AU6#Jd4!VG!qUf2BkY>~iHeA_p_-hh1J1-=A*#Sxj?@?FAs
zw)alFUMY|;wq)xap<W4Dxovzh_(-X~MWaP*8lsONx>oRlrG=OOE*w(kcW9HioT=jq
z<#E(UxmOzC6;9=z42z3(=g{1f at OPB5qScOqD2|siUwQmapk9e_^|iN^`UF1iwIwt0
zZlGQf8dGz}C5^33%e3EdNKMyO-g0xh)K=1hcr~1<>SnyFc=~P|d6%Jk%Y~7qA64F{
zJMg<hzoQ=;B}e((iux8QY(r%XZ|a6EM&YA-<(AsGjb)m1m1PO3vzfjR>5F%~OyBD&
z)49?KiBT89FZzv>#5ArQ!d01+b2{<A$2eJK*(-<_>y}pJt(0memqe+(#&I9GjDZ_H
zSif7*&wFU0uaEg$_GNr?(Vem6yQsrT=z9oGu?#Y7NkOgQhuFr-=;8iBy0qG^_4~W^
zN=qplFOA($dVsT%o>j(H*Wlg1LEe86*hR!S;AaxM+Hijod%`gl_ue)=S$KrH6!HR|
z301h^C(}_W`-a0G1^vrW$qB5(Z|EWNPQ24!lfnGoM+cg&E;QghgYjO`TXy6FH=k1{
zSlsQIeoe}_VJ_^k{VT(V`-g$<I^^<8e^pO`xWH*R2Rh=yuM at vk{OYlG4#%_!<#coE
zGRc48n_z2ku=7F&%Nq}m1->GYJw9<6*3ALMzOK0`spJmtPkj0jgM#D{ZNkwk*v|Gc
zbwE3VWU$*OVE!2->1e}ikSSrK#D9~>$^Q at ZqGkA<lce)xh!Hne^%%LCZ|;p+=bbPY
z{NtYKPSq?i;d5L>S6U*Gq~qLapHks6NjG-oEmgRolWyh4ka(>%^&Qgbt$U;NeJ4n`
z4a8Pd63 at Kj!27i&#Ev;<Ir4XndDxZn)XTdHKM4|xW1F~@&_KLvo)8b4S3F%0zQl!}
z2m8i0$nx>p2Fl&T#;HOK{x$}SlOj2$9*aKv>9mK$xLs(}oIaVjxeod>vr{hlFC*Vi
zw0vKMwab&OaT}GC7JOTqY7 at gt{KuH~zAJ=Bcn*bog*CnO<i6bDbcv;E<=mRPdwRfL
z9Z>U9%P*$|&RLr1lUcd1v!f9EIF)TGm2Q-qWLMhYSL0yT%_-`0R$#@saH+=cq$*da
znNv~kO2pWm)_w2qNoy?0)Oe{|F?N3)6?EdXz5}?MQ?NBQY8Ht+tnVV+1+%C&|7?-l
z&!%{&Nzu>Hq-LE%4vL>u%aQj(x^W$1EVmim|8N->9&q_zLAf5Kf|Z0EsZpEB`blsu
zrP}^0&HchYCE$c1>V4SCbGMj8SK1Kg3h_5KxiT~5zgAuw6%QP0dq^MayPUXwHo-jI
z9pl;0JlIR@*h?s5oS}*HsYO8pFH9X-X5$u-wL)y{y*#iBBL4>LlvA(24*$OcnoLu}
z!lP*W3*u(Tpo5oupl~Y=3>$>_e;uHGjzL<>2QgyoJtuU at u*s8lI>t-vXOLHQ=-wYF
zf6%=|U=kkC30Hb+3^|#>vWgAPuc`Lh*QhpDeRzZFb&E?QB5mKqA#F1%Uv>GXqTQ8P
zufXS!ehT3+W4OFh_0zYk4jngGQgMzV{hy`}gm0kDEKvKeO|;i#e{I>|Ni^Nu1AkRM
zo3d5T8a|kZIBAWkr2bg*4(POx4mkjw<x<km$Z6FxCosGLJpMa=*6gNfv+#eJj}{2m
z`o at aY!#7r}70h_HJTsmS-s`=F<|G7DJTc;Frsx-IQgtUVmcRJMa#I><5C5EQ4#sVn
zfIG1Pv}`a_4?nDrB*fT8y;f$G^<48c`6d;FK6a32mh9xQ7a7r~#TcK_953ck^E2P=
z<h^b`<4o{t+H0l!d17BZVb9tgE<>I-(3&DQnY+NdOhFEVFA?{1dw7FJYjHV!{aobh
z=QmueUg+oZ+&9o42iQ?$u5UU;?y-jBdb#|%W=>aM%z at tF=#a0J!NV?thqRG>G(0)B
z(>zz~Cbl5z9kB<QwD8^KP29*UeKm$OcS)3<1zE3+9mV}0Jpld=Df;v1pL^(w^n=P#
zh~22Wjq}9<x@%pzB}WA_%Wc4HgO^`!%rK-ur}kg3FqNIx(}tV at sbt?GIi)u&5OlA_
z3#3fbanNov3wWP?MW8t|NqmTGw-a<D!vLPsq8&o?DDV~k4E|!~O4;EiH7(x9?8lR_
zr%H31Oj1i*xV*-zNmO1IA_l)EY1mzX49661Gkpws=StYs(DTg-=~Iq89;n~fy*$RT
zkZqzz#Tyqs?p$(Ry^!F37HzW}TNGz0c^Jp-+eNeGl!@fOzK}3jqG~+6U+>S21J?O1
z_5H5<$-s{t4cJ<9Ta!55&3g~=KV|`kRwpMq!9haA_iK@|tAX`lY2HSB_7 at 4}MDK;o
zVL9ghe*yxrKNQZs1>20vqvSN1l;XBG<<p)7y{nuU91neM(y)DK2lRs6cj;r(&<>7G
zJp}Sg12Ct5)s_V-d~J!>leUy;<ATre&vo$&&6)uu7kE+Aawj+bN^hq@<r2)b=5w;C
zPrBPudLZR8a?Z1|hb=zIjrQ^5IX%pA^Q4xZgdcB_zjw(tJ at 1Y=5!i|(MU+5NPVAI!
zbCMo8)wv?#tJFV{v=Qz4>GTiI at xXZm!Y&Ux```qQRXt8sY8E{98U=$r<A)Edh3$^?
zt)DRJnQ=_1^m0?h9gLj<<EWZ1ax*bIk3AhjGsdvQH-`Doj$u67oF<F2EL!&4_{}pe
z=!Kl<e`vQH?H2vk?vTOAb?`NOU5cqttZ9rN^(Fjcmjo1JKg8S{(@Tpn%=ey{rgxTP
zT5z;D`8&wC$e)yC9_hMHk?S4Ib&Q*;hCO5=^mU?H(5E+MXBp<G>u9VoZG&W=Ig_Dx
zn1_};$h`OC8v|Ezz8^Lo_5;+TYrHxqe%vR4k&~XCdu^C|^%~fOn7yn+a+HjhUjnH!
z$$g|P4)BmY9CGpkZIeZQAqVs*h_3?1XM^Y>WYie at 6hZ9Z1eI$oky9TPd?J6O{0#Zy
zef#e@>J#!!VrSU!F=T|T1W%aO0zJ8#Jy-7GzW_YKY`nJ>xzU;TwOK^YEG-Cp6?V*?
zONygg5AWIhA at 4$3<I<!`w`ZhQ$GJM>9AtfBQ#DtH9S^WKR@{bNpaT9dSJj!IPbS!T
zGN4Zuh at F<k3eR3C)gL|+L^tR;D5YE~sbVPPwyVN8MlPC;^B;sVoCoTfoib`Ko^y2_
z8wF9ug(Zog14k4?;R{<x&$_qOIRv_+xZvrQ?<*Qr#IJq`^fX=g;gtzWIjIvp3(rW1
z99H4 at gAOBt=rF*y4S=pAD3e}xgS!Nn*P)`vnq<h33n$u;C;121*;d%6SXJoP8t_}l
zfd)D%BV}Trn6um_m;v99rQ&<jGP(Z^6&GAGoZVdS)DAl~I7 at Zgo>Adc4qIVeTcUDX
z at Gi=_h%y|?1msAHM}NcaQZh%O=3kPJ8y^c9OrUT>mbc+qH~7OI=&NeP+UO+zNnau6
zS|hQ02_n%)Kg;j*NHD%vB4fLGX$p5<m_CQR!z*DopsmidJGeI|csgkxXaLa at MQBD7
zy8^~*Tlr(i5MFfx;vq;m;2)p<KkfSueL4J)2}Zlfh#%y`qNA{xCB at o>z$$r0kg)}y
zh<QTpm&k04uQ<LvUXWE&wK6TH4Rt^pC{iC{!yE(|7`gs__v{$KTrpyUk!uP!{e?1~
zv=O{@7<4oPVM{s|nj<~~zN;Mbe1H%-FqAU@<vyJ|=!<%Ru4etpv>DLF_~uvF_Xgme
zO%VC}xrS?IL2B1G6BTa!*YW#ty}S}ddKaA>PwmE at Wg@zC)05Z=kt;x|(}MQ}zY at 9_
z>j8ER$!@~W4osx;$a*3=oW9Qy{U2mXgZdMdveLUZ33{_q$aYgM<iW;&4t5PK>Yhh<
z at 1n8X9r!<{>%X&TtR%hr-mfD-%f at P2p8o&av;R$X7h8czN&RLn<OZB8KJGeiyVweu
zLPoA*Jp36N0Zav+X<?q1`_7r?$$8tw7Up at J<N5x~^GC?_v)_>G$B~Z at GSOL_r#j5I
z?#>M)_7l+mZ%oax6<Qteh06$SAb1f^AjjfSa4OAn)O|S;jd0P~VH@&>>YMVgwg!h%
zV~pd*{2CUec-<JLe{t=$^hv>q?6-}|;jk4bzrmcGO>~IRaS`2<KWCGvc>!dP%6Ttz
zqHd7su+OjZBY2T(L{6!kPp+GuEI|G$%ghV;&`VrhOK>c!CFvxuJGoBE={pIsBgzmG
zobkW$I|+HLs=TvSf?U2y!x}K(JIVZaB36tsm3fE#@8?j5vB2i%BTnS5e&&@46%#mB
zH6xt{&X<~9)G&26r?sS5|JjK~szL*Khc`CX?WxmuoV=^Q>KZ|L#;0z+tVxJ*m_~+O
zF^=r(mv#s|;<3%2YT~2YTpG$XW=`eSa<ye^%lpv(BvRuBpRg!mVr$^HwcL3ro~kvT
zGd&zQw`LLeGw4vaxYbqp8Ja2fLT5rvg2o^ptyx<mbQ)lrIpA(3xMt0}%=rzYDiAqU
zHq10CiA`Gh4fey+MY{@|#Vajk!X(S~4Culgmn>%;amsHPIqbfrEHVy!O|jP8O)KfG
zeVh1~I7Yf;`3qe5RPctP{5eb;+e!=md4=KWhA8qv<H~x5T;iBb!n~%nCBf6s#^DjN
ziXEIP?gr?w*&9FX(u*`ew=tMt+6u}IKU+Q;m{itNa*M2w)!F#wV55qyCF6%U!5>o}
zAco+}ma>(hIKG18032Vn++C@*<SmV}xS_-MIz|Cg2L1Yh<Is^6R#V~0@<vv)xIghz
zV#SDBp#!@tJizV at sKPUQ#IDjpYiGEO#($d8r?ck3KQ&(0v3IP#nP7Jh7`ZL<PBAH~
z|Dw2H9ZQ1yaXN=;mb?wu0uck)S$e>evIw~pK#!WiA3}!+y&%4adh|>mBK9DjtM7cU
z_zC#?=PN}HvoL<SEjYegRz}SHKj^qg8$SDr%<ti^sg^MF&hOKCOgVm^o$NXmYIVGF
zzornZOB_Aqh&_M9qB+d-UZ)ARG>Hc55*Wcq#(v=U`E;y_rQB=bkn4*PKhFVuZ)suO
zb&QGM=W62r1X>2(0pEQ+Jg(d!?4x*|UIM)S>%YGSn at lcQ*T9A|G_EDvboR=tL at qDi
zpDTqf*Q0*V3?1=^sO62pbIQH9q_ST%lB^3 at TZl7}T5p#A;vF$hUT>70>|8V#Hkc*s
z22CafePJ2<V_^163-9eB`~vKdD at fmfUcMDj1$}{@<n_?;fxpf at 7}ZxeZvZe-PtQra
znf-fJY2m|4*!cZ97t8#%{1-OJEjT}hw%w7~nDPpL4ie5odATB&d5(A=@1)-A{F!aT
zzUU-22Gak9I|*(0tsl_l9Mu1!FlE#}qjZ1gUdT*&QEV?Yc;r6NiLUErT({u5_;=U&
ztu<Z;FfwYX=IFdWz^?(L7T?F>wI<bgUAV6O!}Zg+UW at Asf4ko5nU?#lQTi>)e~j{1
zp!}V89l;ov=;5zVhzAz1kF9<+!OGFT`Lg94_>PtEcLY9pVea%s(BORsqxyKAQ55k<
zck}z9oq?9Jfzb1<j<Xzd#!*8-AAl1eV_I;!#6V;q<X&3&!g;ea$IBb0sTHoN+3qYx
zpEi=U^N0(aIP5+a+r2n4uPk>@Ck?x8lmb5)_3w8oXT5N~GJW{#Z^oCOLfy(%OZ80}
z#CUgLK0J_WZeolROAGIm87^$PgMJPPhb`w;7IGdAwAE+xMw)1;?l$2oir2{R7%t at A
zeReEp;zKf-?XgIHw3E4;H;U~w2sSl?@3~6 at Te@JNsqRWyx%WJ<?4<{qKco|VJXG;o
z%=<MW<aB!Be4bQq#y)ZWcjY2ZhjTKXSu1jMJ)<Mf5UfdQ;SHfM<qvb_MwboX|D){9
z1EMPT|8Wr&aD<}*%A%PyMcnwLD2qg0H9=%aV3-AlEw2m{SIs#xhmjO5m#7dYbHOr~
zamjQtJq|FI*Q=#sBht7qjAn-Bf at I|!n1!9+>p5Wc`F?-DKYo8a^E~IAXP;+z?{BP^
zeRuz_^-?yl)^6p7LoWP(t+nQXHMY<6f0bD=SVsB3%T&5JU%rg1^%cZww)6Naf(+&-
z!478Y?kesngs}+Y5dOXUAU6rY7hycYqTNO=0AT{cXav9A7q~!#i3np5{7o*$7WM`O
zn=RawkOxL_IqYdH^T<jNa7^_@=%aq``c~{!o0ZRYQU$xLTqfGcdAc~S5p`!F<UV~o
z&mZ;5XGk*Niy3zhGW++`l;e({wl`1owBt^JwgaIjfAi!B!dJ<f4IaZ5_usPS2yFM_
zwe6W}o{vSDw#-jMI=t=txUMq6_#eo*vk1X&x0UlpJPu(z!e~5?K|B`07hwXPCnA0d
zVG=?Bo&ymFA&`28Aq+<tf#89?F>X+Pfajfo)-XGv`GhX$ZO9cky%@zex^wTlfKLt6
z3EyAaEU#Lse10j;YF%e*Lj!c)3GbiLp7>(=dv4Or&?{JNFWb7Kot_tvaO#3;B4E6s
z1v9aCX2*36oJ&LRVjXdeKhfU>{5rch5`3~>8WNx4z$c3&urq9FEsV+oU#3`a3Oa=M
zxZJ>Zpr6-=J47}kExv23L_0P%!DxgHcVj1PxGT>s*&296RAlmpKRdq)_z(;{?Hj4|
zA?GpEXxs+Bz6TeGRqvXH?d~tL1Xz8iD&26F;!avp8xUu{P?l>v-z&a(kj^mIDdd4K
zPLugYDO22=loRA0sKd&r!AlLIqP=$Ba&fZ)jf|gQ+|*fSd*=%;7!N44Hg=qQXQ672
zja9mLQzzY;^0x$@CcFdv$}@rBAH(0tM$Rm6p2Iu^A9XUeRd<`n?Fe>xnP=Ju>eejs
zhi=+za(3*RNqmKW02*(nn+3k=vNd;u)<L&FOS_$pQ`u??B3#ry#azJL(9<iQ8|J4y
zK_?*JEX6ZH;FWN&QO^me`#u at aeI&AB_d!dVtw6rjPH!t~(rw3m5Y!yq8BaN7mnK at +
zIFIS3xdT3cyZ7lh-Oj)>W>ND$$=spO*^F9nJZyp>3g^xt-FEhCT?gi7L-1G131%zi
z%~C2R@^<D24td}S*yZbH)oc4qbIV=IIc7VTNq3l}<^8nGV!m;l!1T at XW>IrC>`t^#
zl at YmfU90XMe9OobhtOWr5DV_*Otw?EK{1V)Bsz`urwow@{u4G1 at 3v#!HVBLi=tY#C
zJPRyAX3SU8qPvixHDJyP5YoIdR+kKsfd4zP&dYof-yz at l{W5`-A at J;*;K4rA9MU|t
zIR^ch;WY>2-ClnoTdcA*4{d&#(*J#4b?@rd=)T1-t1CyocLwGc<(>}{@cEx3^AEVO
zAoxBHhfA5{Vkx;NzXCi==1&G1&oAV>)t9Kr83tN_+ksbc_w0us%;JL{KKi9I0z_C-
z8NemB%Rzgv^mp#X_XGbg-#>Zs-Lf0rUSbRH-P%HI%bfX-pkH|pemS#uTj>Ps0~z9M
zH|YPmn`3nBreCXYHZstASq%TjkYk0dy74p83=c~l$$vkw_sp0EFVA`5`2lmH;lpK!
zB(H^$YHTq%tDVA(q+UkK%b>vzH|`4DAtjG6J~ia*A7UO~tN#)5=h-IV2ablBU-<&(
zw8DPgS>Te762-7lu8!8=oiQdC^p1S&^TcQu at Nr{eBXHrggcgIW9C+>}UxREdiO29|
z(xNp%*XumJA{*>?Q0DmVn|75rq0b=OLGnC9^4P at Dn!*of^%<h8dLR?|5??MST604G
zuO at GMU_0QuO_+NpYyfBuiQh3_gxo2eT-_0=t{Xa6Iumj?Gw#x$hsPUcI_V0;UjqMx
z4Mk?+OlL6Y at xe<Aehj`La0LBP at LQ0G&;MYy6lFEom%16>&Bl2ae{iPbgzn`w?AM`j
zbBMphC*?{0m;WI7<5rXWFJJU-3XPOmf<sw_$7We0{j|(#u3N4OEoK!Xie*=jJ{Ag5
z)Zt*onCn*9v{o+1?0h>d26Tnu?Km$ruv=rK{i~fdY1BiE<(ll=WR0!@HVh at zF1+g^
z at A4a)XV58>6KUAdz<U+)JffiI$LHx8%#%qM4Ccuj%u^41Y#>h`$usM{$(oDe<aRn^
z at cT(>-{3r+<m-N0(>Lpq$pv|MSKlbU?kmWDO(ve)zfAx040;Ci*Bb$=Os#fBrcsYb
zow5m&jby$PE>c}5bTO~fnMkjJ{;e)%IGu-il~a9~*IR^VF?TH0iS$+?-!}Ij)WZ|H
zSTUW2`F=!oBOONPBfXF6#k}5w&h^kZqWi3S`9HKA>FI!tbuX)lJ`8nE(?-ujeBB2;
z5LK=BNpgk@{)>CYjI#{z{jZn78wtR-b_5Fp{}azo<>m1pN3i}FU^rK|GT2$zINH7N
zE540)N&mnZwr~6<ko@;b$Q=eN$^ZNv-fiIDy at _|P^6&Z~e_$OQiL%lBxE7K+W*o=&
zA>{kq;V840l$o*TNj-BT at Q&r*?Ew5Xbm1iQQ#Vlun&Z%gk at YT@A7D6~Vcsx7?5!rU
zJ3mbW{MwtIYdU^K41JZHkUqfe-FvotxNx4-bkN}ky^ew?2I);S;AT3LPnX;8AuWqy
zlBLjV)YH0oO;PtiXL%obm0!=h5UU at Q87nm~{rw4^u at z6`>ZpsR3+-FzH_5x2<?nb>
z7p+a3#4-AK&xRJS+}5VPE!HN^k36?Faf^_CGe(~*L;6LeCq$}AdZXCdR3na5C&^6L
zy|M{Egr00r$oiA45q9cRdNgA2$Rdi9(h58eDdJs8mm}J#HFN-pjl(Kr)Ta$~UOD)l
zUJ!FgLDeT+iD(PbTkB?uBbFtl)03%_BsT5aB&K8dv<UMc<nx|Lx*EZeyf2F*=p+%J
z7qMwC at ClNaPRc;ub$s5vN!KE5B=6JW2vt%BpBJ%d-(X%<QjY1My at 1bqJn5&1ev<cj
zam4DR96m2%(>}L>dRHgqB5wqr_fXQUh(40{MRCNcq+C8PiDRgJc+S(9l75cp_41D>
zOUlDHJ&8?g-X-;rbiS$F701`JKdCvQht%UIj#!zL&*w#KS~Gbd at 5-c1Q@P!b&#O<m
z9??zmhKeIrBxUk>5u4Vq$m>%dz9K2hRAsN`^KM?Ik9a#Ni_HB}*FYNi_mOv|kJCxr
zBrP{pxd!UiCH)xDN$L(1N0cVX`Miito4A3zrAgV)`P|Rfy(j5rM2D9qVtG<FpO3_3
zT+5RN#&j_0Tto}0>s4`tGAWLp>?4>);uxRg>B^*dzK*Zar$VIBzZ}v(r0F8+Ze(F{
zJgqaTX1XZ%sKR-(fK%>=F7B|Xh4W at 1&K!(oQ40Z!S#g(r6rKs(WFa{RZt-$Kd#XNM
z8vkbCb?k%hsqC0XkQF)}|E41IfcO~j%BjFBW9lK(wIu!p(?joUleKL>blgUoo$XS(
zBVk_j9q284R*65t{q~_N at w@0d#)9=O;8G89-?icScjLrV^6ZJ{_Y;4>^RV^fDY at 0P
zQ5?M_c|P<lvlY$MRr<~3A0mG at zO>ZkH79aOa%#P?P>lVf$Nsq#xi~qME~VN at Y%+HH
z(V&X)X=ry8jATpR`(>FP&-3byOP-XmM=na9$Cn{7O|6YUY-- at dn%l|WNB&w<5aOz0
z&?iQln{0yDy&us&V)VV7?+Z!4)$9s7WNunMdz2@>wbm58 at T5$7^2Nwjz6^=4(wWH@
zBU*zdn9r at 89Z{5&+*(KDzofe&-h4f|{zAT3)rtQRX%*))ecGGJ$@Ru0(r?X(Uy|!1
zt;S*N61?U{%97Q5e at RSJ-Q?Ny<!rI$PO?3+$><3jf1tl97^^gyp-X+{Oh*hkp$L9H
zkS236g3N_9xnyweK8}<mm(aQzbs||GBu%57WL}BM*ym?%NzXCgSI>@;%$tLAQIGX<
zFX|1FE)iQ>G~%c?lIPSvbmE*m6en}dI~#SIlABt(0MjKRZOk6x8N8D2G{!xK%xd%-
ziE~W9(Bj}W(5PQaJR5zhX5L1ui;d)ezna(=eT)3(hs4pj$<VQ-7xDjjT5 at 0HPgM-^
zFxsz^`y+qCoIag|*jTU~a&q`j`Xg`FC>e~M<k>hfxg+u>KktZ*1(ilVPe<gBgLT-F
zJ0pLjhFV+7#8L8jrKE2gqtQ2c;)+(tL;^0$iq0hIA8?1?5l3gvTT$QtgP!h8?2ft)
zyVV-x#XD0c;Z2gU;>_zv>@Jqc{N_WyDipSB)?*$+OM;&=w=7SC448tzx}nCYS%7z;
zLyEcCBeN(@v2i0n54j3iRZ-DjW#9YXWfKPAWcZeG>2p4W%!hW_c#*OP_!3F)3ZD;r
zfXGd~qPYjUZVz-xyY%8scCSp|I^5f-UO9Xm;g!b6F(|WMrU2a7hR_~*9x!9ROo?=F
zDB#jdxd=J31$gcV{T6AtY$4KJ2;Bv{@SG6bf%JW?oy$Y~0HFnG0*Bs4oQe1jaM3Kt
zhd#u!Jg^-!9m1PPYDk9e`zNW8*GHaTL3cl|I4>l+&;x1kg{VTID)c+R#&?D4&^jgf
zYR4Zzb_?>&o(YQofEKTiJ;48?r*9*#LMRWNEBjpW^7I^mgB7ps4ldjQev{mOU+v?p
z5f_hQ)CG_y(z*!WL?$M7PQD#(n*qM`OV%M}{~7S*Tmf0U1>!NT4DoZWIpRpybaA31
zR-ECAmL at v>3PrB7k_*nGl0-+bB-r`a`++>OCDG1se0xr!;J<lDb~^5&{CTOxu^I6W
z1kK;-TP>aGNR)=wo!EQX&ucT`AJJMyq5*AP{u|&JSErfKB5AGH?*bwR273tQ?|HQ#
zzqmZ#tDBE=y!!cA<JHc`axYhC9ps|hAnR%;@|f<YHDB`o@%GR<VM%D6?0H2K<i!4=
z96h(4VIZSBs~~4aF408>zo->>>0F|NU0|32`Q76`5Sk-=ajwDq?;^auOR+}ClOulF
zD>n4J>^a4e;2%TRQrV&Fg1taH->KOwD-3-v*hf(+dz$W$g(wb#_EqiWJ&>1$u5ClM
z=Qv&l?Of<N+0$m1N*w6KJAW_VdYAVXzzZhS4Sjol!a=OfH;pT`E{9~J3;N%EGKC@&
z=fWSs-$OQEthqqOL^Wt`^6 at 1NPs97_7(aG0ZnuMhn%4ibFPOJKyb?m|U~d$5n!fwm
zD=V}PWATv{f={(Q^c>P|vNtf+eb_^ugZ=TZ8 at l2>$PA5wY-${2E8?Pi^8N6xM*j8x
zSw9&ElS6#Sox34`yar<E!;?1Xe+iX*yim9z6nhS`uW_T=VGk*e at +Id2WasxbUK28W
ze_j$MVh#i6w>jb}HNiS!BcoD-yVh|Zu}o3tIa(v{=3`HJzf1vsswmh=);ygz(B~j2
zPv`R-1->B8ASd)*Z;nq_;w-3qJYFWS1}1}sx)kzU`g)h`9%!TD51OI7_fRh`zopMn
z-C)v)?4bM%;dAkM)P(klIr at _67p@#A$8C_iJ^9YvmV5k}J|~~}XL^R*_s{eM=<E#E
z$3^^EUkh1J;4Q)?O0i{NpB5W`_;ge~<bALoM(Ix+*7 at UGEcqrJ!*a_!71q>@;atJx
ziPNI9qd3q5H&dfwGi2dS8Lf|UQJH2}>l_9AX!=}Hjm3Oy7gz;>bwii$r^biVHC3&u
zC at y$RloPfM`w`m_cO!NnZV4XKY^P^Mxq`>+7Sk!a3+UGiR@{+MzY|+pG~}sN>k-dG
zT}JSmCipbbTLe}*Suus+!SMOuk|}q;NlPX)(|W{G%yFiot|4(~5%gQyP&a&23#x=~
zL!Q5E>{;689?L*>h?W#}1xT5#Q;x=28?uHL8N^V9${tz-`yRVxYS^^;cc>M%u4?%7
zSodw6Qms?D0q>u3uhlQE at L(e3?XxY+R-tre$qHY{Z at _j{{?R(OD-(-n659x@@NOTG
zMJU`s^eKwA4f5w-W|h<0|J13-wv^lETFTo~X8mCl+gz-N)-gGk;=D5DoL;!GPcN+O
z`6p}`pAdhz9`^E~^Ze$Gfw*X_w_Q{;pes<{EF?1jD+hR|*!O*57yta$3LYzDm!CXe
zdWJk7fA`PlXZh!M{(O$%pFjQcc?SQy1JARdQ*Rnm1DmXU{P}eQcOH1)!y5?C40Mwl
zb)Lh(J0tWYMgqN7X`Pq-Q?d_$hlhb4az=0gwA!~|*YTo0ZYH at mi;TlMTs~t>E$!m7
z2gA=6SAk!sWz|#Qr^aMw#b#^A?3XP|u50ec*TQemmzvJ_DA2kaHNEXywJx2Sdd(|c
zTf&K(t*}url2sGfvT`n-Tj)`sTb{(bxGDYQJ?_6>8oVaGc*TKpZ5`!$Cd1V72>d20
zw$5{WpvHb`i?$a&irzQI?Ewr;WX_9f2;JyZBh_zI*SQ$L3V3I3NchV4)IIX<%#(LF
zPV7DZ^eH>a?>#Rx#%+00-U8l^`>Ay#@9`&jAA_EJoK2(b%5?A!N+*RH<NovHTQ9z`
zKAQqYM&V9aP+ at BMt`YrnhwrFE1uLk9fzX3m-AHIoPdzFgPv+Q|v%4MkG5!Jh?b`G)
z4K3k0A;;m574pL$4G#yrv-clzJ8*A?+(l1SkukmT0-vts(<Asa_>_#AHR&$}uP_bw
zaD}F`o%%~2j<AdFP5P8ILwNgyYQy0L8((WPx`PKbVz`UhY6grkYMH%+YO&9y9@(YT
zU3($**r!SmeXMM=<5-HX<5<pS2m3$1j(f<Hdj8Y<^t|wY-$TCCZ>KIzZJ6J7tW4WZ
zzD>{g;W3>?zVFydC#Kkr<={Q?-H)PviA<-zUv?!L`HN++hmy_so1I*yu}LGPZ<{1u
zy_kb4y77PW$HreSgf63k0ljm6O~D7+FhBVj^Vs?y*|<r>21T|>z0=_kQZ33F)zkM8
zKgmm98)*&mV?WVf8o5n1G4ukPPIa?!7{lxeuAy{l<_sD5XZfLZ;klvb@}Cd96P`Y0
z7$crCH%vq1dfY?wm)4AKcyVf`cQyD2rR>-GO9CrkL;K5e%<G79SEz`eSEFpMsHlvw
zJnlJ2e9K^;<ZDL3HfbklKHHdls+P8D1fXMWI3%vTmZcOp^8vFGzNpuKsOWIHpb7H!
zwR9v^;&lppYKqm>elFx3Bbi)BXtsb~p5g0~5MC^J25QaZ!MaR;s|)K$mC5IqX_EeI
z8*(^kI}!P{uubarxBL#TKE7=$BNYs^-9NCO+vR_2J6-d}U|nsrKedgqXqFDtRe9rY
zb#Y#o2kR0Ij^oN;UE}_$3;lZuVItqhG|gv&_0}?J)Hb?Fvtw{f#=q6u?=@<$-W*b|
zpv232aDImURWFmPfj?J%uKNc2$PU(3^;cb>y;mYYrw{XP^IASwufM>Cd1t&z2kRC7
zt=>G%AAj~SkMHB}gY|0uKk5aYon}#{1OI!+KwrQs2pp{YkH6~1JU9^UA^!x#parVT
z2-^|XA><-Fi!g=EmHFjM at Cl+C&G^;3+SEJkTqJ0mVb+%7QRI2RMknk}PA4`xsVzj_
zfQ~*Q*8YU^oujJ2=goWRcVqJE at 0T<w at _}DPv*PtN)HJ#yYd)Vhg3q_jM0n)~%A~>E
z0pzKQ8v>jy<UWxlqP7tkCpyXq{y5R?On(oycBH09z|TN~Ks{Ld-V*TdEHi5XJG=v#
zWcQaZB=iI&V7|8$q at nN6gC|7ndW52H5iw~@C(?09M-HZ=kd8u{%t>sGc;h0-^4l4I
z)DsKdku0HKIse;sPIS{rzlbqy0lz7|;9l^%1+L)3#O5 at 3QW4K#pYVEY5rj7d-JB9{
zKfurMlj0KrJ5{5tu8yAodyzHJUvEo#Q4mdFcF^xvq0a}Qi_)>620R-(nNOsv2j+Oy
z7b2GN1N{0Ed5?EXtt};^4P6EEh+WiC_|I0YW27US0Oux~zq^!(kc2wt!G;a|?GbxQ
zBfo(DtON3sM31%&G10lT5xv8j9ClO9EOKW5tC6W at Hy!`M at cx4L(TBqXc1GIB09U!R
zxZy?Uue~^FH0qWiND(9q!4JP=7aZS<u+P*1TBfUChJLf`yT^~9>`~Mc!NZp=1Quj6
zk^Tzr^=MOqAVzz;*!1Ju5k6r%{~&PWe#AM54}dns^IDMSQ-mD|yHR$JVZ-HPNWX*d
zF2WjwwFny!DiO#x7U4L80d3?W<RRqOyUdNC9m|kj0h*V1<1FZe_6Q`H&m{O2l`G-|
zkOkn=bx6ww(#4*NILsBV1CRI@$RClpY~^)UL5Cjx2(n^6&?o+)&TTZ2#s3{)Dw)p(
zCqcjVoD^6bP1Y6c5W`l4$x7rkj~@}ZW=I9_1J3L4dXn{h{8qv>oC(m$yR-^?-wRBZ
zpvg1J at N2<5wsYBH#kmuQKiLV}DT{)xo3~ua35ZjQ&F47ScH!lGUk!W-GMX<A*eW1r
zKdCSEmbavC<f!hM&ajE-&lj370!JOcwb~grTF}L)OU?mb`UdyA0- at mlv+h^^R<~u~
zUcuOo;7qX6TMQpA_ at JPR=db=VaKu0#Zr<b4=5yeAwZo1FkKY>AJZ`xJ@)R#p3vj<>
z%qRQ?6)z*w0r`jb>F<baOnB~1z-59aQjS(*kGulhb=OV1O+2?ZeD=+CD)GGgJZ)i@
zz$Q#jfV}3VSD9pjb6{NC2jfpD&TD3!n=Xpz1lJAKG#R!pc%SeJ;4f?l(KA`<5JV2>
zCI at AKFZ|E?3${7Dd=lu8=KUPjz<1(2)|W19GK$x`P7TwR_@)>38pV|)y#Z%0iQn<I
zn_Rz&^I;=z4|)E~DBg<Lyn-E&Tk`aIzF20AJA-%BSEvi+kCS{Si0l*MFHyc_58zVz
z)w2hIH$nCZe(hocLC+~`1pn?l_B3qoFQvTg;FWrkIfAcE2V`l+7<%@f;(0V32HDx3
z!aJ#4L+n#*L+qp%gz1Lu_`ZDs<P|3#AhL1`CkFeNtA0%*>v3T)(KnfRz+BCxJ^9Zt
z_LKox9<+(Jm&Ojns}uuqfn at +6VD@<1`8NBXjBg~yhc$Xd7&o934qlbpzCFb<HX3qU
z+XYwkufVsnO3-!Ui_)D$cRW1H<mv{j7~BM%V!dJok)bh&ANLD$aW9eg&k#AG2G^!s
z9*69BV-dL{AzKL?AehLtfW{M!ye%Xz=Br=q-U7Rcu6yKp6wdX%Kdos<3?_D!k_K(a
zp^T}epXWQn=Q8dv(jMBbC27PLy&H?#19JfD!WIQ|?LC9v7{D(Gzdd*p`0W!2fBjD$
zd^Fyj;@{oIyQg@*d^X-eE&%c`o&)d5zR*QzAH)8ERWJ<x3W9)pF2-8ip!k{*g_s2J
z8BH%E_S&h-WL|3aSGtbuqw)h`TZZQ+3gLe~q0ar<?qUseY&L^m?|x>Z0Q|TQ>iP68
z0kJW^`NW?8&LHw>##j849m6U$y680lAtg9(-!wtqYljP1cdrq0U3bL8yGcHWxRN2y
zL1*x-X+VAtdoYK5yB|@h;p_fh-p|LEP|wsl_n+Q{Z{mSE?n1r|@_Q<l&^@2dUUC((
zd%&ymdcm7 at LC>S*7jYiWv!7fqWRv!_Ei2+6UzP{`{L-oMv>Nrf5q*7fN5hW0UKQ4m
zIQ2E?SvNt48nU#Yhb7U|jq3L*K>sZ>sl9uN3_!=BV(S2`^A6pRJ#{Y96^F#{K__!+
zyitgBi2Fgn#j}hNNJne64Y5<_0Pk=&SyKDauZlx)BOD3p=c6*41TG>!M13SGBDgCF
z;qk?;G)tX((>2N(o+lvocGo3HLi)0PetzYNJ)eI;`U+h1v9}mF;eRLwzRIQ;{MN3c
zr`8*}e>Jq+38`?>O5lQT7$3N#b?zY(&_*K}OR>@XHa$t at M_F*EPch8at~39;F at u&&
zIYn;^iYXGn-b<cO<J9yD7xxCr$vvKOBv3t5LF3^zP^^L0u5(DV-<{Z#<@DZCe~??;
z;8KK)-KUGw9?ZJ6;~@81a|?Vne$K@`|6kp3?S=cpw2$$v3hBF<6Y+i+^2|q`SCAGW
zPrO!%Z~Kt%QE6oJK~5O5tJI3`VLL8xNzeB!Ip(gsU!b+3j?;@uLRMwviHhRY6&JXi
zCEEgI{(ppBoKjLWe>ma8W6!AE!$uWr;{Bkvoiim0c52#-65Mdck9n{{vcwL#Y%>0;
zIKP*oRO;aqeT_cb=qk!lx~j039$#<-b_v=TaZI0gwa2T%9O_t*&+w_G8Preo*n%So
zJ7GsT0_FUNkMlj|vsI;`rqdd;^M<(4Mvo?Csjkvp@*diE_|zaD=n>BHb&+yJ)*rIp
z<74K=)=Hl;A9(wVn-ALb9#S^`V4pJ9L%MKOz&pyjxv-l=<hw;hF^R=SW~vYTtx!?v
zc~ee$#ZxxA40lZp?0(IS-Nocg+^IZS^l at PRl=JCNH(#UE at a+<1^WMVWebL?#_)j*d
z4Ca^VNpCKwsNr%d)^qU|ZJQG5T+8XU6^ySz=zC4&=aE+0R>9D6pDlEb4+EP}o<8AA
zdIHoIn@@7ZT`mXq$nrhL&^fU45=ZTzoAKR3S^0HFue~NnYq&;-c(7Otow%R-A at en!
z$v}`|p8TK(v_Vyjyk`1pgRv}x&B7YpT>4Mwbf=`;p{tp8Lj<)>Rbp;y6&Fmy|JE3j
zW&WjAOhE^oI!jMPTcLq2jLCt3b(XN#+t2Xn{9k>Js~F$2bO}{W8w-xai!Ax}^afXD
z4*UxDRJ0ky?R^QN*ek~D)g6T2gFQPbL1b1+{3`C!`6gxGe)C<8)ZCbrLwD39Z}3!}
zr#q=Rt*$nG40mGBfz=E1Vy_$!Z}0?fk#oy)_f4pdrHv`?cpfN$Jub;-0=DpAA6ue#
zu<G at XlqXF#H?c=`aF5yAC8am9l8W{O5z!q>_}qJZ(Z{q=Sv|f4wlv2XKAgXejQ_)X
zbbRCEwxWu4bT0mnCD21%>~qU-&Uc;TY3gxQVdZvuUd#)y4`1(L`R6i^CTg5Yjd{3C
z_0h$KALswN68^?i_hBFHVcCDpYkv2evayT_*@$y0(xIjv=+ztA1 at htu*f8vae3yXO
zRT^~wwvBR%BN!1v27<IW0&6isAQu(kJedNz!X!gM`MNZ!qKVF_zp#IrxJ}1sty#n6
zTunj8>VM?#c)-Oc^pd-cz&oRM5<MsZH=s|Q&_LR5 at S2)bBmQwy=qywFb8o<w)Yuqj
zR<6lmYixG8R)+L~P6b;Zs_y(*IE&P%SKP5WG!bb(+%aOR+bG?r(TU4{NdRt?l{cjf
z=c_a8XFhHpj9W+?bTp(4?V{}>OQ0X*{5H^cN&ky3y#yO|KW=(4LGuee8fPEQqXi+F
zKZ at Q#-{qQL({e-pNY8uz_xlp<17S(M^}U}YO at h&s#^C3%4*rb?&o9bQI^M$$+X%nG
zmqjhNIAj~n8;wJ(ZC$3H@=u+=)|`+wr8mnMVj+8!fo{6D<XFsMVyF9U!J`>(Lq=(9
zoqMJ%+I3o_wLzBBJ+n~otFQ$2d-gp4<B2``3|cLCICVbG(5oT6L6bvz61G0S3NVSg
z^`(SP$SS#Ku_&9NZC@>k*6`)$!lsT?&`NA~08e&!74kTFUW_Q#$#CDc!4_QxY*KWa
zgBo`m80wlSs at yRJa;}G8 at i1}{ZGU(U<xC%r`>WA?n||?!9=P{waW79H=R%N&dr10o
z^UZFSk<Co?kS5qqv_XE4;FSx6Zx{Io$e^>m3O=>fQ|5ZbfqtDq<kX5BYQI8G`1)#R
z`g58twLiWyQ|1CU at 1?5~dfg;b-aEu;NgY|IU8<*r6$51gz9PQ4OWqRhRf7&)90eT0
z$XsU+9e$;u?vBd1wM=@pip}BsU3Dj(f<6Q2%PT(|hP#x=g~@8-)}A=AXVXIOM(~54
zDXt>x4Su{^_D_RM{6py%=6^J1upv~mLq>HnjAmQ&cdBk(n#yy$w9t-qKi>Q+?z*wf
z5je-%=#<p@^d-iYR%y|B*edGxt{$~AF%`7c{V~SGc?gLy*7(eU?*Rw!EotyuGQO!}
ztci)SGL(0<O7r{v>fgGL(LaMDowCN;W4le_D$uY8VI_NgOV_J)?vEEVx4|Bq%QqKR
zP#3#TSNj*fPR`4kxQ^8?e8GNj*k)b_-z|1J8 at wC6s$BRvS?5?|(pBm|_xH*T4+i&k
zS3<I2Gb3JI!Z0({v{fL2ZpKvaCV|bnX$rTf33f;0k~>)c-ETmCwkJJzxO$<*Xl%)w
z(rfbjq?cd6(6cx#(|+b1sZ00CY`(e?^j@@+93X=}M-7{Z{wRxb%+n-f-&Z%&Tn^@X
ztN9lR+Dy;;F at n<@U5}(@zs?*sl=@G?<@8+gocg=tUs`AUPi0Q}O^;(HMYO{-&gcN$
zk%BH`P-!()PiU at G$q!s2XnOZ^v^~P4`W9|6fnORL9U(iMTncOpXRAU<eI}`;!>7`G
z{9Q>ihx_Lk?h;v{no7p}EDzr<&o0{<c)>TXa1QjeriZ63u?4sQ-_($K1I&uE4L-g*
zQLnu-qyn;f%}!1|B?@=dgBkG^IMXbT+eC<A54KG<yO$Pe;165#6T(elih$QK*Dv1C
z273mb!Z?e$JwE~Vn>CLS;1^c&JEM`?PsM3r$6fOy{zpwrDd5P!sgb&IT5Ebu#a1qN
zF0rBOIZ8<I8r4aD+)nu;{VN-6`hpFA=oeRZ3+0w7`^nihq&Z at PYGkUso1racdz!qT
zz~A^!FTn06;2HwA5t&rT{*$wooOR^R-;A?V-Ld+`45WYJ&t>R;@%lJM*hXkudZnla
zHUv$FZ9%0)7hiaw8gDVSi3Ik6`!qBJXF|8p7c}j0YhA{LsRs at zyj?4%hCEAG8 at iN7
ze422M0VjO22j4q>V$bI1m`KC-^ZzisKmRd&mp-g_VGnl9ZzXs56m|L-4-51MqtmaB
z>um_08ijPERBAXeziN~wCDZW5{9mVc;r+aZMN@;4a!}7V5q(Gpq<_?0#igY5r7QfG
zEQ(uV2kbmOaIV~rZ_^{NjsXu?8CeKq%3;6ECUDVeO&#Vu8hbmMNdrGjTx1Ir>2!x}
zx;uwCsh!w0IwhsrPl;1G26vXvOQ7*X-;RxYjC-;2YH)Xg#ajaT&pn|xVfV(zUrKa|
z4IRoO<g5<e!w~+dUiIIYEW at w!x51t-Yyh|A04C1Gn!&t}8j1g7fX-m82}yOC|Ginm
zT>qhkNms=jgZ+tk*I5UhHtTm`-b-Ia9EzRBM%O#0OI2?qY?^g9&T2mDkS2Afc_;O<
zUzR)KHx;(C(H9&-sY;cw$*rVN?Y{ffYV3)r0>C5tuQLqnH|@PtMR1-Ulh7`2ccs`#
zZ-G8`&W2uNhPF*d=yJ>Jt!}W{ug_U?fAHNtfeN+^#D;J7ju-3-QyG5TyNKe3NPy#5
z2w#@)=__C-h49R#g1&=2BQAyvIgwYuxg!QX_&*e(Q|<wc|0;MbeSq;aOm>~SSX!`b
znI*b2_>$s$;*aD`3WUsgeTxG!?CnlUL+t%{iwl-PR$`{{mEC=?Z9wc~&xGA;t3&L=
zK)$LS`nOE532U2ypFCc^1-1?w>xM2JrI>wRrquwKdweGs@)?b-fDyo7CeLc<@-`_B
zk+MNo at a-eu-o*Ada3;udV?Qt#K-<)ly#hMYLvFO-i~QWlz4`f*yYp{O?l+6-&f<T4
z=1JL_98wl#!~<oTi?zq~D>t?=0qkXNtf3>k*YGfWnPMa4{#~3qRU4+^ar~%;?9}X;
zq9=0 at UCLyG4)=n!W#tPdEAZo{zIW=}f88ShZM)80GF{MdV$X{!qVp}giC?-0KfzZs
z>FacXmH2RZa2-0Dxy{ygaf~ItL at _i0_UT|ZyASrVOPc4PKPek+<iALlYAObBQ^<2?
zXjvkE-<wnCdQ>UsGUHj820OHRRsBraBi9u+^epW0IrHDp*|;&_1?LGmNuD5<ml1ys
zYnSA`Lf{H>cEz=Z#MC at IKMOsJTJXYdbE1D3YYNJp2SyC>{6{*Tq03Iz2eWnb=VLZ0
zJB!AK&eSj7*e}fuc&MLH-aa!!-o at L?{#+0(%+c-PGO}#uY;FIFv7#DAEN?e2)N-_p
z{fNtePGD(jt~t44A0xhbflG^PcNC~Rv)8*j%T$*B55DAida&c1nv1nof;uvI+n~Je
z5NIno0&9)>19R}uW;?e$<SaRNz18*Bwrb)d8UAgCV$21Ce$e=F$2~m)aW{0T9y2T8
zpDKsBh38J_rgS0hsflAXSlimX&z~Naw`cb{E;nS&U75B&xC8T*2DmGO at OB|XB!?|k
z8T?u0vmFi<{<l`cui>v59!~!ba~sIox`$xA!*s{EAj5CPuj$Tk0qh<}q3$v_oIU0!
zK%QXsjN@(gvO~$*9EwysBPI5DK|e~u^9s-uGAhh61=<t|dh-jJzI-L<fUmqTjZ<s8
zPlss3k4dWfYSrb3zbIQ*VMKh0SuZ$NX4cRZ-qvFhv#faf$V(&rMsAf^m- at q|v|M&o
z8_lIztk8|r&{O5N89!?4m;mL^>;w<!0c*QV<Jb2Z6q8(K{_>&h%1JJc(RRgV7z^&^
zxtEN&UN}TJ%QDlEZv5)5RBkto+UZy^=G)6$&ZJtCW+%#dxP)ID8}H^p&ce at q8@Ent
zqnk#$N=J|WivH>6T3Y^AcVM>B at 0xV!CxIffw<)8LE3?SkPt~N_%bJEdg$K+fcf at aX
z1<I(8h3r{6JZ<z5I#8g|H9^1SqowM=IODmy(zomZX|)$%m)o`?e9?RC0>kg7f{DGT
zCxEsHs>&P~U&hjt0cn(!X_WuW?bo)CiB)>{Hff!@JvJ}UsX7BiL!I}VY at Qfnx5@gh
z<5W{>pU$Fnj?PrJ-+zGj<J`9iKM0*Z#;WYjIJKxeFx`FI{X*EY at OLkfZC+X(aL|1m
zxpQ>TtzX##A7mcIlLVlXkGfGjX|+H6 at udGxRQ68!sIZHHg-qm<>Hv9|Gr at ARmQG8y
zGgt8cT0Ay`-)dBDkPnBvoyIr}|J#TWf`g2<!&K<uf{Kl?ERX)Tsl>xoCUav>`)d0-
z3*cMbGVo6L<qIw*$J|0c^X(b<+j4ZuCfdTKOc$#zZ!BN}m4#}zZNh^Tc+|za>1v-Q
zM#S2<iDa+))Nr6>a8`=wF?GThfc#Dxg|l#XJ1uG6Ov?~s{n0zkjp-5YQDtMO=4v(N
z(nPs6>F20^lD=S0SdcU3DRzXQsx&HS*C{vZVcJ`6lF}>Q-Hdoh$>9uD-;Z;(Eyq(R
zJA5Cwg!|6+v1!ESq(E~lcT)H0Mx`D9)2LQ|m8Y=Q?X>V+&=s=;MpeYp(}4*u)YEGJ
zaitL$Q-1jcTB<$hqc@)~Ypgm4zc%ie`+niqp|G>NfeVK{D{dI<7{+Oj3Z(^+LDx#U
zFb+En|L~p(x7s=BOO?mscJ~W}0;{^#t3>y)%~QWwwHHz+r&W)JL>(?xePaV{f6uFw
zQ?>5r1GLmTNM}GEgX&E0B+7~TzQL`wd0zcl<;iAvbeE?5pt+N2?&c)!H7ll?U7cCz
zqsZ*)&7_YBQ|KkEUwIcS85qapK7E1pOYO^3OkT(OP3dFjmv^sbn(Jsa-I-Sio6VW-
z)A!8OI`{Zc4&i5^^~?7|Uns|;g<X?sWJgd|VT;FHVIRfm3y%K5s+acphfPihAU;v!
z&DQYTMdkVT3+-jw<h_vp=<|PNay-682xacm^T!YWXTq-HN!~BPZg-SV?Q98T)dCb>
z`%QgmcmVEyPHb^4$*{O`(gmO$7dLR}S|>UCa8De^I_St(3OdMnmtQF8&lOHS%cz;&
z{AVVw$zK?{M)n49>GaT9ijS6V4ajk`fS%Yddp5Xj4D72gplf?4Y;5GxHlE{T=6`nP
zG~79*LVFVPYh^jjN?NU`8~rMtrHXd~(!5+FVKa!78F at r~L9kMOeR;>wlF=8Gx7ZD9
z`|0xn*_a2-mW^L3hqBVOy`}|P*8!>42HUvptc2=h3u9f%WRFdEBvcoxSlg>Sd#i~{
z!+()Ev&6)#b(LMFZ_l<EoxM5kQsMjVX6}mCK3n3}4BYecQ;k}izA>qdZ~HOD%^r=t
z3Sa8x<jOf3Kd<K1lGLBU6W7ohi?Q?QOvCr$iH=_x%E{QzIJnfM34tkZ?J9E=?q*fV
z-<s%h*S<K)#>Q84Dg(^T_a)|*(#*;xAN|lK%6;bpAH94M)_7RiCy-YdH`8E>^LEUd
zWq!b9x;2^RR`!|_w60ky$TDUc at 3-f<JM}r`0ZhcP>)dGXEj9I&tHy5g+#~TWKbGKb
zU0!Fo;P$q_ID3|{rCa*#ZH_Vacf^}r=X06?^O#+Z*Jf at u`3-mI#QiSAIPGp-RJqId
zBkF4D3bXy&Tr>RhG`K9_KirTQ`<Lg+?cXmR(O2egY3{6aFBg7V>`nY<B`hi{IU)Y!
zIo#{Gzo=T=v-cgM at iXr;RIl)>g0b<7;Ll1=KP$+<8RCooTS07m;4GQIZs$hh4qT43
zDAfYk$YxH~_U>b}4LbOE3>$|#F5{My8-e?<->tS(B&s2K8j4bLmW=Rd#NEy34I4-9
zI4viPBl&P|r?^|l-P)E*(&QcJI7>t|1P(#{df;t802aycZe%fM+6SDcZ=W(7GH0Fw
z7H6W%G0xoND4|u1gk~vsbIa@;E9_{}9RxmUh~eRwvH1lP`|}m(pM!nq8ggv}x5W2+
zV4hn|*f_MQ#ycVTCbyHeNdK@`pxa;U3`#ciEL(|rTHf5!zH%mb0Lwmili*#M?jyia
zyKOYq6yPZI?-hXr^EI~4)sl$$@wN2d&n58kpKu~z^RH}7KFP!M38f5VyN|Y_>@o9n
z?P(tFTA?)n7hMYfD2v+}E!nqWsCS-s<BKlH6?p2z9iGG{0_<zq9P`*W$$w#+qkE_A
zuDN}QSnFyN;<*%Qd$X%8OtT}r*nJ!$Gu!FC=FLmQ at Yj=5+1mW<hFMIN?+<KT)gAcG
zgzo&Pa=?@K*)&Q9U%pze;i=tA-h%Dm*UXz~F?_oUi9H73RKTsU25xgsLs$4I%j1T8
z!;jMzSek8lz`ynro+a^5teOK{li;OBz-v!67jKw9etcn9a|YUsb_cBp=jXHRnYO!b
zwPt*4Fr|ElZ}XuGe`CCieV-exJdNj6!7%ihAA{m1&Z|?+(>J7s%gy#8{vE;HU|0KW
z#UsGC4!}x}u&xZHB0*Ex*4-^_!hi&fc?&m(wYB{w{|)tG%_<*}dYMILJIB|-91I?+
z!*_wDbc?$aK9b9oVnHJ-t~g_!vmurA33jAxZNFp8e!7p^e&^?UciTeUZO1%nJm#yb
zdCrDef*{Rpta*&beH$wo|1D?&kK1YT%zRxIX|65$m&Qi+1isg>imGqn7geT<8>Iy;
z(M~5Z-{6}K-(a(?>W&$6MA}^~9cULgm8Yiw?L(iM-U^(f&!YV!59`Wl>3^J0VSlRT
zz at BfkKI~|_`Q?vS3)0A56*%<5kL(O&00=C}O-Qsi#HQvD+yHj@`@uKgNN_jWUj$w)
z{>!KEU;cM4a0%uh=$h8x<pX>~?3rNT8EivV>I8kt`Zi`Y;Qg`4Ki2ZND`gO`c?tb{
z9(0?1shl92w9Rw~VK0-cXF(iq0~`AlGP4=)^0?O^9(7eOK4{bDd=6Z?<OlD at DLufO
zCZuNquR1ZM59x{Nc}SlM?MFSQ&~Ny8-vrqgn#exok+lFnzMek!2#gPX?r=lb!T{EE
za=E~GIzxNIsIIUB7B<sPN_|nfsQse!(Y1 at x4A({JHLET`dzxu%ZrTvXcK-I!xUE;E
zK8yZ6dO!S`A2~p08_Vy+Hyl-{8jk)RGVa9%-R{g?59*qJ!qFg{2WJ(-aqonU|3h)!
z<4TYZ+j<gsHMbu&24q%O_u_&hMlsqIzkeEY=uxAt^f;k2zRN%+WMKf{cCq2G at -WVh
zZ-CDUO&3t6Zq+%H5phk|Inh;e#<*GPT=(a!f?cz^dbH;e<U_{g4mtFRCvjKb!TV;&
zukHoi<wMXu;TQX<Jx|)iyo5j=2LHAE*M>Rzg~kZ<CHno-Y(fR_qK!v&GQK}IbP1K{
zo7TfDKYtT^C=T<1=M6{ES1XUF#{o}or>YtPC!XZxf5bZO#2cv(Fz2UnZV=op18uRw
ze4NvHYzJq<|6l_i7pu*Hob4wk$(=C4;&P;7P4!V%NL#_n6+41&rNVzYV7LA77k66F
zL(WP;F27c>HngYVPjNB9%>_B+9qeWNRPq^l#<_0*t>7)xQxE#);uCu2YqSqv%Ed19
ziNG)q5wm*nyM21`F3>pE-aet%h+zlEbCf4^)v*rs;_di$6yJ9A;VhMrZ$9r7Ydqh=
z`iT%k8@~^zF$ytXA;XlaY1W0y_K$QLx8V8Xca#}RZV5Skg8jZ#<!KUab(~IvEUWJ8
zEbu!7v%(u>mB2;toX$Uc`QZOldE&VUHeZnMq=_!`fxY(6l&3+vSH<|;D%)z=#jT}!
zysMiJwu_sM?fZlO3tzm(n}rnYBSQ97>rq{F>PQ`>Z>XbX9(JWHV;FR|oZM?yJh&}|
zZAbTSJR1mJAoeeKNsyCQ;vR^=cudVM&d;pm;th)}XQ-e5wk}>~rwaNtVsm+Ao=JxF
zCUQ<-6HmN(%=Ftw^_q?P`Wdv?{P>30_+5DX4}XM9jK-pP<ImyoUpCX(4aPgK(2I_}
z-rmb9+Ix?uOuBab^&RViCN$K1{i?a{?b!t*OYeIyzD*t<m&TecM{><gJ*u}HwQ&{p
zFH$^D|M2$5(*s0HPX>zWuhX!jSfjRiu58+ARfRS7U-^u&*7(^xYXlU0(!A(0tsL=y
zx;*Lhn5IH*%ortCvx0)}WB3Eto6U^cz3DFFqt&Olf*JM23+VHkwD<?`6wS at 8;v-Tn
z%=oh--uzu<9zEUQcW{?M8M3a_Wv;`suR*b6onc)0F1D<~c?~#LsjJ~?r;2<lIL#`C
z{lb>K=kgs*`af|G%dELJx)$wE{CoTEmb)uAdgxP*{*z4^?}82N7OX}1rpNjauRD$Z
zy4Z;E!v2i;uYEOeCO9X6PrV;Bh*5PzFFYq`<JY;KKI&a<I(jE}hlSp<!$EJ|ai89{
z<2=22M-Ba1g at dkwJvu1`c|y=TQg-)Y?T175z9%LFG_6fH!Ha|p7&Qn_3?+1 at L0VXq
zg6Jo~XM&+)dIMw)<rj_cbrZ`llQoQANOitta!vk~$<_InCm+kdT5#-%9D%q0$`ZDq
z+`2kyiJIO*`3GkE$rfyNk76%W^wSf4YJ+_I6Wt`{Uo7I_LZLLcFvtfy8orFjK$)$4
z8R_537)cp6UGEwq`CA#BBh_P5??G<nDDjVg{czVmt+0*QJ}U79JvYm9Z<rds2%jeQ
z!0XP26T3U^12&DCmtAD1Pt;wh_OmqmjK$dke8#>C=Z~MfSx^YRwkJ<doIdDtZ#r<>
zSlG`og3gCFiQT%V_M2b3cpUF)nKA5@>d}H)^RkPlLGydeJjHgNn5Xy}ca%ez5bKm)
zH~d<dD{4YN_mlIkAu#~<T18Dl^rtXGWaa5IbMYT|kh at 25J)G8PAggL=7izB+?wHlu
zkQLAyrk=9S{LDqr=PEh0TMNCZo*D64J2wO{b0*Orxmb%(1Go=5OBY$9pHMxPpPvU9
zk24JNQY916Rx<kU2j4eh?P(=w(9<u;Z8gal+iMq%D0dw4H at Gu&o2vaSyW7<$KPKUK
zuO+FEiH${lj-kyw?P3l12>tprfn6v94J{4+H>8k>8EChL$f8w`fs7mMh1$SRgbj%r
zVykMX1aw+jcc=Q5xsdPntZqnr{Vn*$C}~Dt!^?2)PP<sEf2Hyvo{z_*)_MMR?EiP0
zkgM^mrqzQoHGWuUSHPnK9hj~qI`E*qel|!it!7*eiGiLfO`ZGgQIJW3e9W7>8P|zD
z<2;NLcK7K at Haw1(-u$IaPx$oov4oOXi!oaTc{K3p<u}2 at HJAT3I>tX9vbLPwbk0W%
zdE2qDquOLX%cR9 at jW028`5?#C&H*NEolA7!p$jZ6jy5hv-TtFo38O=rvZAIm1{a1j
zl0Esuj`f?HU#olEEc#gGt5({u&(`v`U*1%FjrrIeGmCAlema`)nCgR<N24Fw`ou>5
z{^Rq4ZUG(ScXpEdD|`iX2XhD>71|H|CY)!0*Romex2y72ea;+S5AnCF_>W$Z-_hrY
zc-xT!&%m2R7vIC4F$g{tS;<`D4zaG at DzeP{s@~;&NMI$pR!{c0IeYz5$R~GnUne at 8
zbNkK7>vuOKzb-ScSYIIo-@=y4KJ0!TbW10Dz58-#ZT|4kn*0%Sp|1vBwmS4VUyX89
z(bgA!OJ8rSWpa3XI&K2#fINz~SagyTYxM`jl}_kJ0S;gPHrAD``$yFIBi5D- at pZxR
z{9A(B{GZ)%*RNkeXtR9XsNY+{e&VyA*m|KjX0)hA77}_MIJQ$cq0V#Y_rN!0;A4tc
z7rR~A*+Hkzw9{Kf|DBz#uqGtyIG+Q7&<!KJiVaP|0F#YN=lK~oYt*aBydPwuMAvYJ
z-U2`3bn`ORu;70ME~Mr}&m`%@34rA!feVBGMc+>RY_&aX^lE4PqRQ)Z-puK`VBFn@
zcf3pHlnGMQgsWp+%-fTV%<{>#I8SRB&E#sPXtIG(Pd?tBOtt0VJYD$N#OAzfyIZ*2
zRqbVYisPhg at Tg+7n@nWzwiaLD*GSk*M{tnI at j-R7t0!_bV@$W~bF((Pnr^IC8Ko{?
zx1UTM*Y}%lpFU2$H(N_?tX`#y8+*=}sqJ#Vyoxp!tA^;}%Gc|dHRp!>-0ad*rawyF
zDqH4uv)Q_WLfJ!QD<Lbf-neq#6rEz-eO+9^{WAa6O0&G^n){7ar9-bnmU|TJ!#-0~
z=`IoUz#l|Scxr5P^y at lX&r4W~=?XXSje3Y3-|;VqK3DpIS1S^o7N&!4GOo-Ce3+Cu
zDwHwypj`&L#s%0k-%IR$kMJK2UDFCc!<H1h+MKawUrZ|K<3rioz1sy%4aq4NV8b*Z
zc!pvXIoAu%l5<pG9I%TrQU`qu1~#N at JwyKD(Ex5Ugr_rq5FVZ9al?;=@L9s(ynz0G
zEME_7e(ycWc8*uU|9T0(zuIy3zCrE~$4ltTLgJqW;~EMaF?)?JYz*G-{fnQ|keG4-
zeh448i(vbESe?rWIooMOp9H>K!u)l&d;VuWe4RnpwY0c|<i%Ou2H$Nir|!?^P9pb$
zwXX}lm4Llctbx3Ss|$Af$l7ksSUVc9=@syvTs`Xvon!52%u6NS{T3EDrI`1dmfg_Q
znjiR0Y~D4G;^&m`dzkWO8Dn at jtzO=KWWV?Nz%Qp9gUm@^dK!<9IUBN4&Xc<n_fiM^
zjKAP*(cSJnra3|Ih8{QYC&g=C1^>now2RPbFwgmeHUaevU}>D^xMNPdkzfy6g}o~g
z6$QgaWIKEf1<xqB5FS6JdPcU^#SJNP1f;?5tVHfm*W9qt;FqpW7r{0vu^*~%BWED~
z11svg-4izdN>E#oB|t-Xj&)v4Gknm at S?dp7n>Osv+r2g5Q$u!V{D##fh4o5qfM5I`
zY*h}(KXjfjS|3Vczju=;ZhBkDoUPG at iwLiAW2YDRI;5 at eV)QGH^vm$;v^PLAOWDxI
ztfISt^WUN}gPltB5C0A9j-{N{$8G4*$9;GY&t13!uP7veIDcSYZdrYckN&I+JfiNP
zU4$+HTFid@*Wy&@j;Lk~l&$1YwjFh}FGM-`Gu{}Gj(lP8QwO^=3s#c+hKq$R;LQ9y
z7&@lC0XQpT4eUkYY`rb0$!`=?GwP6HCQ4A7JLXwK{<z7tx#ON?bA3aWWqll?y00d3
za3}}bO at nM?Rk#eYhiL}8+G`@YlUp0|M^+JAv+BrH`)Y~29eMN%d47<gM;*!kUoLwZ
z{<HZyTlXE%cwPft3-!dL0cN=fm_;`75Yk<RKZvYB?tvZrUi+S`fxnfVjk3R>EaXR#
z{|i39ndFDxi_BEAhyER=CUdX5jW!<Jk_+}6P;2ee=L8z2<{9p(N6v-b1)(bd9=R<l
zf}PO*29J at 4P}kv58Q_eAfTIrJF2T1M2hc`Vz|t@^+5>LdeTVF?)g=w7BlXQ0>u1M6
zZlth5M0CO0aWBj!@5uf at 8CjSb?Z#=lrzR8_ri#$60QZqh-lc^7e6;rk+S8*w_}Tmu
zrfF at +e*HDTYiR>=xmv&tufMjMDY_O|M&Kmq)&B!}^?r)n;22TIt@#z_VLQ5`dxN1-
z?J24u^<n<M at V4Nr;mCV(t^g*&J2#x=LK%@~BHsv)TvW7B3^-`c+E^xE5rcN(25f6$
z&2Ja<27hY!b$ZJZ=fMmLdj@);?yW8kdL`3F@!xy+ at AsED1JVli1Q*I5{H>mNUv*)7
zkh`KmD8f1znP5YDDZe(dQ;z;w7w9B|bq%!jq^^<j`+Qw_e4n1wl`hOcU4n#uz8{$b
z|J^jm!Fu~2i#d9k8s}~i)xtO0j-Y~X9bA~s)_a_7y|KOEA3*^xI at xm{v^Pu{c{oub
zvf}@F4d)NhP2Gku&mnUQzTy|~1^U6EeM1)o_nAFjhaLU3K^2b}ziBQymwni^o%)Dw
z5?#f*?@^DGpAPdDY)ikq%E{!Ln at Teaeh80`wNA|z7*oU)W6oX|OHUVF4c;l}0X%Rl
zOk>!f9x3`t?LVa$@@G9PUEUqE1iW54RuieB`pn75{}lC+FkbW(6FHcN at fgUHfO_W&
zjC3w(f0`?dR{WF6U*)8IMUC)})CZpMG4O<m>}}LSvEiQPPVj$~w-S1AZjUi19gGe7
zpx~rLqF59ISw5^u6JV$*I46!Ch@;x3&JF&2wQ8KRti;25ZG_f!t$=cshJ)&>2!1!W
z`p9`s`s~cXyuDM^rrSQy at hU9|UbXZ+kE(0_6l@!Q*tc{D$_}So*Zfe{&tn<mG}qk!
z?wQA=u4{~KWYK*1D}U`-*m@>+EBS9yFLQC)eM at h<U**rKlyY0TETR2~M2j_s`%WRK
z;(gyh&mX>TT)lXPj~Q-!fU=i?KX3Sv!MoHpRstEH0op9;g>6AG at KcrHoaU9vYEC6G
zw#&5Fc%KAPIqsPaZMY*`_6&i2a1EXX?Y*OSi@<UxPJ5vyZlmYjI4$nz5a5$ItMhP9
zyIWkH8Gs|iI7{L01-K9K?LKtnBZAj`Oq25+`@3!6jN#!}mcNJa9%nJ+5CId4$#}_m
zZ+UEouY~qE?G^JJt(4$3z at a6unPKHdun&8;?6A_yrV!iMm(jkJ*}}fxyJh?t<acW*
z{mH1zagSWMQe at G;Qa*&(3^Kp?ZZ at +e@WOcb;oIw{v^B^)k0?USEe^Td){x-&r7|tp
z&c;!lvc<6b2w1wT*0S62U!r at 1`R%J4ny(@7(TA;Gg!Y?L0UKw}zCe5#+j1%BLJI6&
z48?hs$a`@AJwo^u-)E4sjge}8W%A{%cz%xLcfb}}?l!(02S1^9uXO0JisW5no^oN=
z at r3S~?~r#cDT_FPfv&=p*@m7=kR{>c_`0DvfjV3NZ>dC9V;RxIKwOA&#Y_gthY$}N
z$=Pe8$z8;#VGDH`Y=>$9pE5|(NS7e3!d$~&Ktq;SD`at;am!vB5vGRxht7QnU>{HK
z=KxdaRlh*yq#wM9nKe?a<51ir7kC8iheCM2?K2ZZ&yVoliuQHx2{@mcARlJGKP~2a
zdfUp97 at RxzrzhY}@oEiI&-)`N0M9cuKgBOn==k&u&DB5CF`9>ereD_lLDJFl3Qji2
zc6{VDca<}ED4*W#mHB6SmzU_z^v>Y#L5tlp%5#WBq4RbWZ!^cPjmBDby9 at gVh=(9{
zBBp{KRob~Dz$IXB0`y3$?TZQ_msSzMy`)uhnc6t+_ewGMRb>HpRJ+dhr9#(^@{s*-
zL+nI6BxnqDN58B at dBjId-|cr3Kn|8N>J%gQ-Y<vjQkAyyj#b-zr$syeu1o8E_kwoR
zosf-?aa67It|{I+tEtBBP%Cz*q5unv$XTmP>t*HbvO=wxlZ{oENpF^OGRT8UZz}m%
z60rQh7OmYpeXXDQ*|p<z=~}xIboSm__Kn_SWS at Yi`ZA%bHozuHpws-#!B{s-!AbVn
z%~r`0*z;Id(avU6S;ZE`4xgKfRrEIrcgTLT=Tcqfq${8e6FgP^tC9V2ug>t{UOJ1q
z;f^_^Mbr)WF=(UHQ=9lR0B}d!+`pIMaRt~6Wm}Iz&W3waaZ{LS`enZx)uoFYxp$xr
zftAD!(K|M+RGAAT7&jX-)7oyO+S=ctoWZxK at iCd^Eo_dND at vm-le}zNRXbfQ|Kk8~
zj_?$64;dQoPcye<sbB1BpGrAd#@tWMQN6*a%djT+_P8hQdDp@(U-f`rH3HMB)Tvis
zC!!}xWYM<g1HK<C?`w!nG2m|9K5dNLzEym58qR40aGbr|Eb0K=82n%OxbJQ#N;wuL
zaNpLjDCHPv<5w7Q;7g!|6WJ=@B!u_k*2?qW#3lbhd0mWjVpACdT&Eg$D#jR8K=6?S
z;{Vvi1)9r0$-P<Cb~s?h!j!-c{D)(J3ycLUe`euUzytdYjhg?#8T*!Hm(Ocw%fn}#
z-Nw$9UmW<444+P0IJ;j!V26eBHYT0KxU-HE{HEw};0nMrFItDFXDO7y3q&2QL7Q%!
zE&TTD(?NfQ3qj^@y*zn6#wTa^8DRooCehjQ`P<<KUdnKTXFGfq;~dONsV4G{)5ha$
zes--#!%VM at -gaW6=*hUi?^}p9L{}W71I_mXb8jA4b~y0FLWk}Q#!`*3SnXphU- at L6
zeGs0X(I;Fekj178Yz^5dXTXoSO2$1tL0Jcw;r&DVMur5RGkXx<JNJieKBybke9(lT
zTWLI~TYj3HX$SfHBWn<5SqT3ba=EuaD(B2|&^O9!Bhh~)uqftb;2s=L_$4XT1RpyU
zKQ+p`k at yeCKC1!Wk?fl%u at UcT2jA7Y59}%IC-5o2r(Ek-Cc%FNSO96?GAW-POXwQC
z24cHD<qY^}-;p^%{x%*i%Gn5+inZeg%RPzx at Xmkmoqw5(ug90iU*iX1c;KkL#=(9Z
zNBWq%gYPFxcxG!y5Ae>`jwbi3*DTm3*Q+9V{>52>kBEq0>~F#ZME`5U)i7Tk&zuB4
zSvG83c={B>#)Y0v<?j)_Y8>#ZcVjYi+?7=L+668eF5>%-Jj>^LH{w1TxPvDT+`;62
z)w<|q+7_CIZJ8as?4dJ0%Jk4 at QL}56-u!@;vfm?*lh&Aw+!nK=eH`7v#Z%WH!`ZEP
z3igCyH#h-wBIuwE)Wx8#lDeVWCXl|Pe?*V`AnHxo?TnWYx*xHZ3VOCA)*1X3N$W26
z8d(!y(UUCWVU?UOI7QtIQ8yQ__2r+xrI%-2MxGkLlIj-=@vWpGFy#!s`|Bs{Y{R{3
z73R6sDsS at N|3$fn)GX5rn)3b7CmCdXp;IqNnOO^6)z?6y0ZlT1V^D_p0rvKz#s|;v
zX#(8U=TK`qSVnI at 5~+3mGaWKgTLj}kM;#B_rCyc#R1S0bPPhy-)Y-G{g$0h%%*%rP
zIce0}z!x4)TM+$+vKZ^8lAM>7<o|owd&|JROU@{I3+~v%?SbKbiClZM_DWe5eEP`h
z1j9bV+4!%5lVmJpU77!VFcz{fR*3{>I+=@a%}NLKr{Plse880ND0jB=$YP2OUJg6R
zQo}cea!nU(cC>!EoMP!*#Z7b4H8VYy?fi1N;wJoBz~=OZtI%(`kS#;rN$~Z8vj{Yg
zX2NG4=of6A9&VR}Cneej`_;(FF!r%zFa3od1b-h~XimC%Gk7`Z at B+Y+H0n$ntkaHh
zN}4-pDfPW>1!zcH>xNdnQ9x*Bc4CVQG4xg|AJP&9e9$I<K8i8MRahmtL{@oY|DVrU
z1cod)8T>u`3*_u}fgWx!uUH$ckWReA#+CQ61#A2Moxk$|H)5i*RI{^|^FVsYPA7CW
z;lpR3uM!J^O9W9YQ`z2-;PskfVjyHmQ;xC);~mpxnOj;j-L4g_cefP9A8FylN1AA{
zhlLpj`JR70d-Pg7<;eAuTbNq<gQ?6QJTD23dTYK1b8W8HWs2X}x75?aa!m?cU>M-}
z at g6dEgzxN}|EIj~j*9Af*A}r*l(7vk;DAQ`nOK4t6^Sv5f=E=FXBZozQBbTPj7W^4
z0v5`Q2#6KL5+#_B362~)hz(^#R6t`vKtYXVhAEpW_t^(XG~buI*7wI<>s#yo at vMDz
zIq$poyZgJ_s9#7hXh}1=;{Lb93g3D1oh?SVuZ5dm3|)h<O~OCpb8InBGt$-ibVQKF
ze<IdeRNsT{<DLXG*P1GD$9JA at pI`LBq5<!*zc6FO&mqJ=xyRe^(qCSvnVf2sZ_mu|
zwH(i5YQ}VQxVGq6VC82i;T9jqBL(q5`NsYql*OwCC3s^Mds<N*?k_pEUXL^Qdh9_d
zqvJsrZzYMI=ZL3^>0WG8VT7V&li7U#WzZd!a(;fU9lph!ANnRS_90^oXf)e8xZ7H{
z+5SAYho*SD`dY^%?D;a2VsFTMtj9)TpMV#w`{{d{Pvz}YPd6A7P%Yote9Gws;$o4r
z at Q=g6YoG__mtPAtz&}!Ycdk*0#D});^gr4Mc|Zk1>mc-xSMlbf+w?-T$LUr(@>A5l
zaJ$0kB$r4$7mr6 at U#PS&4!~XUrAk}l0IO;FIdZ&f!Ije=G3U8L-vR^e)!9v9SAeVF
zAyHs&Hf<MqMmSUPKq)p}tRBkK+0O;-JG7n7-=?0A?`s?%e~H)P at n{RiDD8|xz-w_E
zuf-fMtf_FkLcr at 9$Ezvq4)|OHuA at vR<6MR=r1aKY=!(bkJ`X<4jS25yOn3-m!dko$
zsKXubTD%2G#Qui&mssbQ+0Uf?gIJAzvCd^C?k5zFQ=zTIT*i12`t7E$TvIjGaiNTV
z4_)G$usq!Ly_Sv_Ov|t at oK&IxO|Jb`Vo<s<^p-f5_OTJcrzWgz`<^}qZ$Nj~N9e6h
zA~-ig%mYkosXSaUmqR;tK12jPSW?)RkU_pj1Ng>m5VgtvGAEOTl9`bG1mif!V?mod
z7AU(K$6HPF(_ZLP^aA=(yp<jQRJp`>A-(efI^=jD4p;~*pn49(f0fd~I2QC{M$CfT
z+j$gnJXTBQaXezcV^tfERp1f(4<1jzV|5#kSkR6ERs*<a3p~WeE9~cF9}OFVv<x-W
z_n!yzHb;M@#256%#yb#pI}OLlwuqKNgemZ-2d^-=uiYT>Yk|3(^S@!*%<0ANBOlP-
zgcWeKmbLL(%JC|Nds!Q=o1A~3#E;`80k2TdTFTM7MR}pV+(Z45aD4~v;0nrSGk++y
zcZS<Q=soAfG;(7R<{<Wn1+4;H0K6v?k`jbH0iDLsI{w3*AjsI<9QyTs0UykJ1boPB
zicx2dicp&}&}~9ruk+&7x}2Iy$FjK*!8rTY*Q6AClo}Ol%WHXmxHKz7vKrnT*W6>y
zc0 at kP^zFcv(1WUYO{lBT(eT7}6Xgq<`r)iCohL)@uJ<%;8Ho8p<#Y+o)I+a{v7bac
zrv_;gb7|8;FW=t-?<-*r)(iXl^0!0=*Fr8jP98WdJEw(n+dW4UoQQgognDuc`DI}|
z8FF_<o=%DwE%@?+2<LcQa3*`s;_=<@uhdx14Xd#>ad5OU#Qmsr4BHJfD><4 at 11GK&
zTTa2d(M-2cH at wqnUE3Cpwk<SV6&G$|Z(YC}+J?=rx^+d(+-fw-3@(;SI_r4%MmxG$
z;Y`cE#fLJmFBNIZLV7&7^t=fP>m3yEj{f(ZmA at G0e|3skK}Njqf`g{*b2wwYs*M-!
zh2eO;<#@SsdYeV4lRt*&>6j4f$hFXoEQM}lty4+)4a~t_;tn6&FaCB7`bynuUjgn$
z3R#VIEem!%otvVKpmzdAwcZUBGJxtPyYqQ{Fo((NP$C#Ray9nmEu!y=nxq5;nL0R%
z(|0yLgU-`rh9-FaMy%;%-yGRZ at TW4&B*T7=g|YEmP8XUH at B(kHi~9r*bT+NCN}W@;
zWZ(3L<v$nI)-$}P%Wrox!hg_Dc6CrrfbJLn8i at Gu;TzB{_x4tFPlj%79rg)e45bX8
zo)si{guBT+3aJhad*&`HT}^gNlBQ_OzlxrG4DY0jn3#Pf)RgLByK2LG@$Rg*;No!N
zuQ*KM;!wTh=8QV!66k)zOftj8o#nwHolkM`Fy-Pwb;7$Hy{Imn_E+*fjd6%iqG_`v
zl+wmp*Hm7y3)8CaEuWP2Ml#>M7VAqUEroddv0KS%)nxdY&UlXaWzx8=U)%N0F!K-x
zYg^<i-50gytNJB7=zGc-FC~?bf_Wvx(HHuz`KHj*VXfc*w=ajseXpSTU<RFOWY6H_
z)-i~3 at csmmsA$`J&+G%C#?XC3gE%a-Z644AI^$;sr4~U;&SGv9mT{!Jb-O<G%nz}z
zBz>}f4$$$i&lWn*kytMa=5*5;0~hg%)t<ccqV-YZj3-hZt4tHzkymUe3Tp_$epcvT
zRd}NX?_SPnpy7hoU{7zx7Bfj7voh#dRg{*}*wQEXp!eN at F5H~{L-5Rx=Ja^W7Wxgj
zbw^qcTm3QLaYdP13!S~I-%8ZYWID%!ZoHPR=Z6pp6XwL3qA-`DY0$$kytf-f2T8Cy
z+O*IDS%nB=2%m8yhDpY$7R3r*UKph^n{Whe+Ic#Tz}>JFm=|yIXc*yxvy`+R2eh5D
z>ehPBYV2G(Px@;NT5ElS>H*4YLJcHY)*Z24cnY-kwzi*U?_iIHeKWOl?I=AbZ%F4m
zTFjA*GFroRv&DCn_t`b~$28D8O{YE_Q^%Q)&<6hie&=1OuFV4N?PW*k=EG{aI_!lu
zz>{kOG{_H(!;#-#V%}zFDyCz8&=xsje_Es+om*J@^KMAQbo~G_@(IJ9W==MLa<Z99
z;{iS34Cw7z-CuF;-_iR%5MC74*ydiwxpQkYl+HDyE_dntDxL(dHPlxzJemi3*J+UB
zn25F9T+^Gbm5zH!&-dZ1?IY|nfZht{CfmkYUFmt!^zMUcyfBwJV(%%hYwF<rd+R*F
z<2sue{wvltjXL$BZO!^#fD!tY&77M8`X at 0rkHmRb$ayEiO#;B*G=k1Yw`>7612S%`
zr8dPm(COD<-$dU>2+6~G=`HLH>m$?Wm_`u)l9eLMN!H)?CIQdoonp0 at I>=ghw`MeP
z_Zzx<2lAN!?Q)TK;PQE``wxOWy#v3R^5mL2G%rs*GkCb<K0RwOrv-C at 28@>*aXzDw
zXUfBy@$F><XJ?ib+`qh}ytH;nXFcW*I=M)e5e_|q!O`-XjdP2L`UbskJFNzLz4W|U
zLX5R#q~3R1OP%l5mil>HTk5dKTKx~?8A^2(fI&y8t{A2o=!x(CfIUFNSG4`3f(czV
z(E<d}1NA^P&<r#IWxx~Q8c+ye&V&1hWTXLT0X_gU9wopdpd2UwZUVP~T;?JN%C~kY
zPa=U?{==c<gZ*DerjBb&dpcMj6>VSnAld%ymfh={q+3j at _UtyT-WzS-oUqg3^@$|M
z>W91VPacpTaPeyXqKlU)t*xV<?}{3jbyOkDEj!)m8e9Bz!@gUgKPNs3tx4Ve&7J+J
z0~BTVM;s|jwy)Z~-Lx_FfW6{wGX8ttK}c2_3dwSq%^iirpo@^y;az3oE!EXdk&<1X
z*Tor5cs4Rm^ztz;a^U81rBh-|yWi+KZ`1HuD^<-7Q!@G%Uthj%+*S3mE}P;mR_YQ@
zj(T-DW~F`#k8c$+eoI~1k+-kEE)gGDJ=^&~&Y_UQ(K4&z6W^ZPpJspioMqYA{^tgD
z`(1E;&8c7Fx2G at d;dh7>ty@%(({V<nsI(&U$3frBI$-^4{;g-DHR_wm#=D~uN^*zZ
z+h`k+bJn5C&LnDB&j3X;>z$eT)wTi23-Xpr%@45qe%zcl|6s at U!lW<zw at e%M^TW5b
z<Lm`H8eg7$)oH`#WnU+p5r^0BT=>8}EO}R8kCPVFd*TfiE&I;MW`e=-&o}70G`Rn+
zO#4lFxX!7=s0y_xUQ_R!l at si724k0aZHZS#Zh`Ny!Y6_0H>ljJm{f8drjjWkhnZa@
zRdigpSCpvp at mZs7_kWH1zFsg1C>OiPc4jQu!Hgq4na6sSNZN)tZLK(_R(*9vwEpt)
zEiJdckF6{8k9+$tXz%N%VX0MR8&jU&3Ex at J%v`wLF!Stn&7AC9t?#LlimB;$t37^t
z^nOa#<Cjh+HY at t-w*GEiD?8V#ar=3G)4_}mulD`g^<Cm|vznws#?Q{g4^&=^8E`Wv
za!CGfQNynsOBh>xc=v?T%(OA(C->Mt=s76P-~6-K?`?-}S#CKjdPR4~o#7_mrff8H
zNDb>WVsFqF!c)FqT4m1}-23dzetj-5qYX|tjqH*&WgPD(k8h09r!EvV at dLaYd##>Z
zYrS-yuI~o7XU0Fc*O-O4zUvw~@l}V}E3XWnzbt=<c+t%Po{N<OU4kFjPg+|(W?Dq)
zgz4*w$3nhzO at OPzuOQQ0POdWC#noDmPQ$!JA;>>}PI&#dr;GPK%l#pxGH1sAKl0a|
z|G&F42OgagC10tExTSl&Aoa=b;>61p8<d(i-)}1a%_||dC8S9GZpD`3+cUFnHwVjG
z?yQQsSLpjoVPjY}ae4EV!{~!f1BNPOB)db_rJq8t9Xk|Svpa1>)vidygXZtQ!Eu`n
zQEsv!rhwvvH5X2pY(sRrY)DC>4S5K-0sr=YyZeqP8!{f~9Bo4!j<(XFej3;x0%<_v
zxmNe?`)x=O!X5(-0_`;Z&GdL?L$<xMAuSa)<UO#z(uRmqtx1WKHK|x(jW=|y$?@sd
zWb}+y`o3`A-{x)y_gC(%?!R=fCh>;WL;^F>#F|WiNqOe%u^~=rHpCI8`m{A^+1DDU
zhn`lXH;@Q~`B{;JURGRqS%x*44a@~Li>!zcCYM$w4fo1#BWll2<!zQ3WMr1v>PFk{
ziV%w9<RNp1{Q8%@9DB}M?SZRg<bvB7{aKt%r|ooW_`mIZ!*>5a$yxa4^`~LZ=#@;X
zz1XVN-u{2P|5 at fXd5rLX|KDnFrJs%XWOIFlnn}hxl*c$cVie at 4`m>Y$q{vIpG}0|2
z$cW1)pID?-MlSchruaDD@?p>Yhud0&`#8*?!`E&Un109fs+kg*zC3ME%&4FXORI|d
zir<)LO?S`!y7+nAAj5q7M_KE-d0PH5#NFnQO||c#HN(b>rI%V3_UbwOe(#G(8yD}}
z6~LdG*=1kmHiw&|H=en4FM6uM;O9?#e^iO$b!u at O+O;_C^8z2k+bQ$PZQe!N%^oc|
z<i4z<@sLbyP<wo|Guz`9i~cn7MKj$i^jCc2bQM!#p&LUV>l_Ka9`)O*t7B0AnHZhc
zhnn%EmWc!6bsDs>&u~9teGkb0v5dUhllC?3m(@&KHvZkHVWe8E&kl{=TSinqGHsZt
zjjD8e$AH1d?vg(yMvk at FTAXY)eTd=n(3TH at J%07d7}sMIZ%E<O0rz`)KMM}Caw<@I
zyiOQNRt;Z1X~p|NYow_rd!`=ozxzKe&%}Oz9!Tt01-v_;oxiE-<##8`wO%o`9FRVZ
z5A7G?v~-N2 at qrvDK60<cH^vT0srDpwOTX89ciA6GP3!kMI%V{mT~AHl?1{98-`5o<
zc8z;2`_-XxU%A8oTlilc-=wDe at P-^VFD%<Tx+3wQeKSe7EG+xY;mxjtqZ{``e$*DS
zeJ#RR{@|`G|G|2-INqG?YrcZz|6vLE!|w*%J>j;K<v%uI%_HTk?WSW?XRL6JZ$bL1
z at eiNn_aCno;|#QOYzy`<v>@yb1<nj3oDO&X>UCmSwZcUPzpNIv at 0!!_kC&V8)hL{|
zA?)+La>fk%h2zaD#POX$uM5^M2-|0?omwo*PsjN@)>e9)HP1pASq0)FVQmb4QDaXV
z%YX6+Zuz*AUjrS2p5;G$j<ocUAI+xk3hB$ev!2Qso*H)*Rl{G0a4Ot4P0GFO99VwY
zW7a%M$(oNeQO>qo$_k_Vf_6914!;GRInq|i+TLBF4#PPg at K-RhtB99Q=OwE~x-=~R
zL>czgUDu70RU!_#>Lt>8B_0`8yT<deKF<TKh1hS^!U|IZ70$dCIqv0P`K7nP^N<{S
zIS?Pvc)UgDDyv4?8W0Dua&C{ckjE*txVt%Pvt?PfC^iaV!qK-r!#?L6thr-tByybm
z=vRcb=^z1L<j0{Ka*<R6*>z$0j}*$;179jagNzUd1EjYW at i0~fKKVxH$*Tsf4AwUF
zak+PQH}LaeZMI**e#mOpw$qOa=OUV)&mo6*$F9hX5auG=H{=%H2{2-X7k_4j<E_=M
zQoJMI-3 at d<$eHaLR#@D*U?vayPkO9<f%g^U{=GDa;|G>MVcT)YA3Oq)4_bv6>bzK%
zi~maG4E8^{8J9qwM!<Ci#tq83c4FjvXSH)YKL`1PaB9e>MQLmonC{%c2yZQ$6ihY+
z4PHLzd^o0+(K69T&Y(P*<9xUIJ`F9G;JXuYuq^t{c!C0bk23s;1>D0}q30u(pRpNq
zk*9r*v;0{iw(r%=IE#7>amdNQ{%F=V{x$NNU%=qpuruiMp9#~&(i&FSychEOT<&j$
z^nUd at _HNK~B>0ZT`B~|8lm*;%l9B*EKT}@i-YGlf=E!Tv8T{(7A0P)j6wnFcz1%b+
zH<xPUE-{*H=WS6apRZ8v`Pc{X3~|}V+H7+;BSaau<-4-NWf91)ji at _iEdTXvl=oF?
zPo7>aHmjGLW8I7Y*dBUBa>i!78{G4e&ogc^9%V?sA=0D6yc)8SHbDNm3hb%QX0|n<
zT=C)Gl at +RcLcgV|5XV)?&Ep`uLB=dU>=f?f?SVZhL at sgofVek8SEhn2^3uie!%+qk
zS at RJ)kyncqco!9Wr*c6Ta%i~#dgqWgxuB_0Or&MrB@$(^0d)`h)Il?lFWIcH<|t at 3
zrHkWg at Q%PR(AlkEVo`RChGo0RqL8nrS at Q!~Y+s2d+76;XpP+D7H9}{gSK!_foFP>s
z%)6>-JQ}wabtu{$+xRaa^VO)|jjXNvEtWq{j{HEm8+cQ0o}ek1X-3<g2dr?*T=3#6
z7 at Q^Jmn|-LLj4!so`Ux5C${hUnF?kU+Q84!Q5PyvXEo3R>dL(bUB{lR7P-G&3(6wa
zIXsZ3eO at VD_b22ygO1Q8hqaNV!mmc|Z=?A|BGYG&ijBhBCf<IqTME8^AP=&NKnH2{
zLHSz*db!9q3*>oc{8z>bll&pa%dD+-Cd$HV)R&WLSF~qhSsLP5AU99e;C=yG=38_F
zWtC`iQ3v7;Vb5au{XP`Ud8%RiE{H<@6IN(-g2oT|i at V&iu;(`mZNw_tHnkvMnpoQ|
zBDuLxgMZ&cepTvF>0;#13&=~&3dgu3To&S9jWVu7`EJoo<W;A0<xO at Mb&ZF!B<ql-
zhpes3!y<39?TBAo#d_Rn>MSL!?Pu%Zhd0m%MIv2Vmj6PH@>0m!cI%BeZ$+5v*-T0k
z>cVlPC%4 at D)*r}I>?ajYKznJ9cC?7)fAbP)8Jf*>jZ$00RY9Nl6!ETQg|%yL;%yGd
zrx<yogKWjDaFs3M`VQ^SfC{m+5_cF?ur at X|Ij9c^i!x>X1pUARr1ctWdpa2Ps}N~!
zW`*a*>lj%x>QVq}tBOEdMeBx2?r)C1NOm3HCHUtK!ql<+s)gYBk`*pbz&ItDwOu1t
zFX8f{LOJ(kV~Rg-J8R3*cZC}j;0c)wLSHf(X at TsKPp-0i<=$p7%Gp+FtZn5<xNSvR
zyBtS(hTM_&AB@?)8%xT)d-7P@>Ai6OJ?he<UlGrWbmTW{Yl?bbT8H|pQZVI^v1&;M
z=A&G@<6J~;ii(iGV at 9I<A4a_=>8{ej@&!D!- at Vd{=IngW3MaX;whaR0S97*=RTJ8v
zFx>U1L%uJPOR{KRbR)$-h-kgHx72w at H#N`R+(hTeI>@knK3DI$*~rXwtI-FH*GXn1
z#_ZdTn&{ZwHAs(si(nj&GeQ{S%y<8fde#=Ao*zZjb7O1C%&jn?hk!mpJ#TAWqhC}*
zGu_K5im$8nj8p5q;_$tx?!(-Fflpi=jf>h-R;$MSj-Wvr{UR}L1dZ9UdO8Q-;_9_S
zRqxBiy{^LL;PV%gQ(nGv+ROQAXKkq`NE`9pswSSX8l7isbA$JeRvP&KPv9A)11K5j
zn8Z@@Cyj5bn;>}L`>ZqW7?(mG7c!+f!IL5)C@&(>;T5|!_iNaj6kfS|&)0|dMK3y?
zmur9FkNm|Ka~}&H<=*)I;)(Me*xT0v?);u_digYKb?5Y9Vd04*)|XEl;a@&+-dcI_
zLeD#=ez&@q_c-9v)qMX8SFib>y<V{RVmt5uZ_SgC4Rjya*B*JRd1+*e@<8NqDle5N
z$Vk-><pJLspB<$Bxr5OcxkZ={b=7MC6%!Gx0aT1#i3U(HDHk+=ikYxm1E`oV_~n#Q
zXqeTQLqtG-Hv#ua&#h50=ir`AQTlhd7Pu2&Ffaj_2DH-P#@S3Fcpm|5feAo6{l+jA
zb1SEnUKZSAvp at 9<NzpKwDXs3Yr)XHjvn~8_gioVo-iVIh%`&s<Q4gxjW(74i&JQZP
zIxDDwe&<cO(3n4q%7j9Sd5{!gWtdA|fId-4PNOa_V`4S!bb^=32ru-#E at 5%-b>e*K
z`U~gs;|Zf=B*FPo4X at 9o8seQ+lZWpY6RG~Rye47P`xN>wl{KAj%F$1T-*452ru|_}
zIzMWidk+U+wKzuAI6Lk6^U1s4yq9F&d9*J5dj0}dS=guW_tU~FXDA(&k5pfQbfHf|
zoNQ}}Ph?K|{aA;bQ3WZFe5AxZGe|o=bAi$A%#fFcbC($3KGMPHE&A=9M}mx`D`Xwb
zlIUDM=vhx1r at +7J&tGMDJmP3e+X&{836;YO=Dk`i%0e9l;0NfbS=<KQWvNb52xx&O
zsZLi9R0CD8zme)@FO=${uSj)XNzgMST9JFNtVlM#d;V!fx*oJ51Cp&s7Ld8qiU@#%
z307nR{3pDG?gC+_y|yCxFw<cVhFOOH76IyCu{R5OK at gAQodo0yAf&T^<SY}AbIS!}
zHjvRrKzsoMAdN2|RptV63FwLM%`p9d;eavFVj&=;hk&F5VfYpRiTEDZQ$X^23EI<6
z)V&2{FYv-rKo$uE<ers)JhB!Lb9SSF2@})&VIp+c^WvX1iKMzZU#Xt>Y<>SqEY;Wf
z#%Z<Uc>P_U_<MEEu^KJL*gC)eQ~p%8Z~X<t2^bn7Ag=-h#A1nntY07?j=+u|1mvqO
zh|@Zl at OuI`KFmuC1;h^S^nZ%MeFbDc{&Rx6tgC=@1qS1L=J%kvUO-$o{vFn_1JZ)9
ztHT9Ew at 5&;Z6T|b0&;8><OhT;6_D$Je}`}9 at jqqOVoXchg<{M#RGp;cE7VQ8E>QD9
zKso~vbpq1A5c!xd;M}PDKk?*(fQa-0l05Wpzvxg?@(}nqY<8-El<h&<1(pPxvWbVK
zCArtrlDvo6jskp>B*+X{Z*55;0lQ-Ya^xqJ9pJx{1LgJPKLWxl6%Zl5!w~n#-2&o}
zA|ML~2}s2%OLA+OC7HY0l5AUHNd!wRiFkn}IRe;PSdxQ$OR}SnC5c~XNjmrYJ1vy1
z$9 at 6Xu<cW~kJDD4EFhzSMDW`W2)83&fpgCUBph(G6Ocy8FoK2q8I+$Q0eKI3DSty5
zm*HRhV*so~I05*}hM+va-p*sm4%8W>;|y>P{#_AgG4A1%L4MYNL}*C{1Aexa#0#?h
z at 8tBcpQ=-q_6EjIYC1M#GIVr|L-kPanLXUM8gsr(hULELn$iv?QeFRJYn$Z4Y*E)Q
z<?2AqUeS^E at 3OZ(zpLwqwYI at tXlpn3f4hH=!}DF+$5(9LIkq}6$>Ghms4-QkyV~ru
zt#(8Gq~>T}(CgWX;P-9c1Ehre?js{!j4VcqaF`nqFHww2OTVEn_#{pLu%mo`;*UP+
z6FbJVpV&e36Fb_yPwZGj`@{};ePYL2*(Y|4$v&}TZS4~~*4aL>)3g{TwdP^?02wiD
z`$jy8I=R)IrkmI1PW!v=ZQp43h{0-%$pH1#nAmo?Y(|(?{bH+}8xt)Fg&-DdhXAEb
zY0|cU{zLn}cGKgOCFu>EQJ`)B3Lpo_1|+9Z{$NJupxy$1;=34d0_<fbT%I0nquCyp
z{|)B<#x$$ueMZy?wEWcVbKSx0oAMd6Z&)R>=|H9Tume@~!w&3l9JbZbamWzIv73iD
zdOHmnQ0X*GRylE-tcpZjv?L*{CGiL50$l-nxD5p^oke>LGw+fmc`LFYi7*vsEQ!d+
zf{0*ugS`ad|FvAHutrn*_x$Ex!~IJ+Wj;7(dB1tG^;P-2`}>A3uABX5=%~y*pFT-b
z#QaHTR9n_cUwr+alvi_yWs<dHfBQUe?B)$&`U5f3U+rm3`|`p~dFA<xmiUey*FB;O
zgrz*$>+diBXt~Nip^w*^FM at A2pI7%t3Jg at OINEWx{~7Dv=U<P0yZ&y7)^YE{QEcJ2
z4 at wjL7EB*A)50*yYt!9nw_P76xlVn0Qut!3N56qq^7G!j!9MX1^Cm?cFM4sQr{7!Q
zrqxM9gLiDpNr+x>G;GtxTTZiP?3{SjEacVx^mY1EMa(w^)BHnf`t8~>)2;W0N%3~$
zibmLbpTFDSq${&&QvJ5_Y*D^jV?*dBQ%{LUvv%<8AqGAD++92wk-LlEBoA*VzsYWX
zlSFRQo&6XmS3fuRDIR|P#`g;yzREu+RI<u{_{xQWtA?)(b#NSG?>}<*$PxAq!)Gwm
z=0^>Ok$x^C{bo41x%)ZIbertw?J>j8+i8a1439}}(_Q=~Pj<H-gP%r at v>!Rr!G83J
Zu_NqFeEiph1g>87^`g-u14fM)`CkY$g-rke

literal 527150
zcmd44dwdhc`aeFq*`#Tkw&@MZr8Mac&{7J5Rt#kuLf9x`3I%HfEw_q at S_M5`s&3i^
z0#+ypr6NK=go?_kpA&2Gnj&C9RP-1{kI~Yj2p-UsTQ7#@_nu990rY%6|NLIBFYsh%
zpLyn)XP$ZH_RP#OI%o9gQKNEh95rgx=uy`Zl0U^deHB?n0{BC&_`_ZC{(pI82}6n*
zLU;#$NR|BT=FL(DK<_&!($Js&VTpn`SAxi{B4o$f;4_ZMNkyb!5VhdUy^23gOydF0
z2sL@;uL%AZJWZbxsU|W13*BEu2LeIS`VA4u$woVo3Mz=ONF)!xT26NEE+=;ZB#%gz
zKP-~#2aDwUugl3<l|+`~$^E^Y41BtRr0=qm(mFd)O&9+voB!wW*Oylj at xCgu=(#G=
zJim&Rk6KIk(Q8RNo>LZAkwQRqVHG(NwU+!^RYmIYY(TtwMHPvDtcq04sv at tKR{cL;
z&c6~+Ab(sB7!P<?ApWs{_W>UWOn4&TPCyOd?|_2<ufRmSEil@>0;2(5;}V#}bpkWs
zQNR&_8T6*Wq@)UrZll1Y#|X^OB7qqmFEH267MPJ;0+Z7pFi2oV-7PSq%K;Stq#Fa8
z{7V9JGw5$s0V)M%_GbdK2<h(sN?;x`3CzPpV3rIQm@=QhJaxaoJbjJ8h>Hcr?hu&r
z41rm`L10$61;&AQ2V`{|02~&`vK0ceQYkR2;sj>>DS at ff015z*yYim`^IU?!ta%o2
zK_FXd1!hww;0b|wX{NyJm<oUnUKu4YJCWb6PXT8H=2bjjL%P>D3CtTtz;*!2z6WxB
zI!R!@dkFBbz<758b_q=LEr3-5(}J at 6dnw>7;G)3%@}a<VoCCBAOy})@RRXK}7Vwk6
zhQ$Hm0f~TqfF!^`z+iwK at IOJge!sv at SSGNO4gih|>@5OdHDDv)1wbuex4=#b1H=IO
z1Hfm>Fu+*A4S*W~Hv#4Vz7yD~D*?{}UKQ9v;0xCQJ`&g&8UWJGc~@ZPegOdO+|vR(
zZ-BtwlPj?I1q8M<LSUD_30NzzD+ at y~6VI0fb`=LeIaXx>cz{u0pZy;2LkL>%JOTI>
z at E-tpS0YX2^#Z%PUSOZg3_jPK6xgaq0LZ86XMtU}DFk2P`J2E#k2D($0$V*D at QT20
zL>YH|Ca|?H0-%rA9}w6*CV~COzXaB`OJLuEzUqqsDF1(jPJwMG1GohCJ*0pCLxKHZ
zFW at ZTJm4arU0^?43V0Oo7yz{H83Nk~z3)f<2WAQE$LRvwgz_9347eTu-5k~m>?bJ4
zrzqE_K7sulai9AI_UIHqIRJHev<YxQV82Kd*l*qkKySy!0RADc-$FOv-UFx+*zbV*
zZUI09z%IV~USPeT_5LKVr}qeK^A0 at U5!f@({~4#iwp9b57yr$G`GDnsDgfm1zag-f
zN&sIA3T3sRh&%@P7Vx8>&_oJ~K^8$V^b^2OfU|;P*bji;0DeI++y;10P+XHGD6ahs
za1wAyP-IUK6eI7(^AMmJVU?iBc^L47pcu^n5&<cIPX)zwv4A0hVypyc5fs-i5ESF5
z2#On;1Vvu1pvVQ!aV#JjFi=q3bfciiFBcROcL|C~@qiLRF&T1Lkj6R>@V%fY6aY^H
zz7Z5NHUa(z0DiY8^uisp1cePWv)2oXyY2vN06_M;)d0Jom^%aD6%_N3*CHbTycb6Z
ziu?aAC?0rLP&|n8JcP7+Uc>VZLGf^$pm^hqpjh&vpm_8pLGjdV0Ce-z`-0->G{7^0
zLTUtj2lzL at 2j~<O%iV&a@<~DQ^8J7>1jX(#f?~&Dz%77-g5s4(K!c#z2_5Xb6 at aqr
zgid#%yu1D(C~Eb9LI7~DLdMs0kOT6*VHFf_?**Vf8(sw<?}k%?VlQ|c2m>IG1CZ;$
zaKJTyn*qr40QerDGzEYn0CaNz`aLj5P<%W}P<#Tt9Y#K%pnRVI|HUdn at nx5w_$L9}
z4nUba(8<@3;YaB7csk&E0Ax9hGM_=6p2-KGp3flu40L#=3b3~K`FpcK?*CEf_}leD
zCv2<Zd7lut#0rFeLLlW0LdU}np`&fP(DArK2n5~(925e6N at El{7K6SFW8Si9LZ|9u
zp`&H4&@pYa&@tnT(0Sbmp>ueWKvsM!khQN19p`F<j^%d>9S at EXI$mf2pK_t&Ql&s9
z?Lqhn at G~Qik%<2m{L6%n_8CHF*e0Q4*I}XK(ec3jkI<<QgpSf%1 at i0#p>xz4q2t04
z$omu0Bi{$_5IQ!t2ptRRAjj{>Yd6B{gpT4zAj1Qodr;_jVk2aZ6*~MLp%ZN?5SS`-
zEV)<cxC1i%t6J!ox<Kemc~j_&coFI2g^s=bg^p#%kxvows{jw3(6P=cbgWJhIxdz9
z9g85_3YE|~;(*Zk_eX at zN#OT9D|D>agLgm3Y!d>1_=S$+=Y at _()B-VngZOMA&~+B^
z2|`EbVu7q&D0H~)5<2etk3j6-Ag&#GEEPJIt_3}0zR(Z)w+iI>D4}D6O(3gJ2pzBH
zLT^7n&;6m}=Rto5^14Ro9O;su9T!X}yGrQzBpUgqK`(aT2Mgr6 at 1du)(CaRwLHx at l
zkYN_eV1Pbu5=a%|{hxsr`Q`m0bS#8z7*WUHorGM_PYKGq=ry6^9|J)9yg(+L25q&_
zIj|G)I}lDl8U7}8tb76T?*wkSKqQp?c%#s1`c&vBx)1t5ot*`bwb092jnFydB5dai
z$WtYB-2a=<@wx`}dq4905_)!nC-hlTFOXF}p`#A<-0^Sl_(14*>;cH?gk9A_-)ms6
zhfub!1TygyY<9cQvExJVy$Bg at 7CMzHkQeND`Dc*jtkBW*g+NTO=RY9(h+O1>yfHTk
z{DC>n1mxHLci3W+(DBD7DCZ355PGSCK9+uky2uqeYL~$#XA5NcGe|QPydQ;~><~I$
zse;~6hPBIu&bK$C&elL)tw0v%2p#9GC}TR(gU^Ezu>B#hy_1mV6y)nfc~!8}DUkVE
z;OiiFw9rvwfSfLrryOOxPaqDew|^nN9`PLN;yu{mO5k~+!x<1d*{K3~2JMXpZVmLl
z;!Vgf0O`j;-W<p~4f4)HoqQ;eb$3G_w+eyI6DT9(djMstYe0OR&~a}$p0G&=Z0`{U
z_QMICL+#K<E9%CMwg4WhTG3`Vq3uK7j&kS?b<$devRx0JXj_+-!*=)MxfFUsS+>L0
zo)`$aWI0{OG}O(dg+j;9XHoAG?C%Mb4ej$`)cd^YLdV^V&^h2R<j|ll43Hmsefvq&
z1Nx-39|;|6K0~=h at J9Xk(N<qSEp*)VHS(?oz%DyK0H7QgZ^<(7crZcexcz;+Pla9i
zz~@b*y$!rB0I!7}(I)>un^=p!hSp8hJk-@<q2ty<yu*e#^k2`TT%9Q6 at g&Fuy;Spv
zD~3IzUe_W`^LBw$DnRp-(3!av`bC*`4MqNtf5{k>Z53=;FOczmp)<K0Hll>BA?@><
zq32TAA?#t^B=na>LPrJc^qx$-Tft9&ewHE~%KkSi@`9}_NBR861XA%m`m}w3uhAA@
z2UV!YHD)~jBXs!QfGt43k1s^u3Es<esFQbv&Ya=sN1(rz3(%i_2|jz!ZqRneqd#5^
zyUy!??$Hh&p9DG3t~Nx%M$mWP{2kJwKjmQ;&!gPaa$$3CBmNWQkA7(34%8>sKUJ%d
zA7r{8eb$a6sF$B-`G`)^pA6@<qQ)FXxCAYUmWX$Y$auH-Nw(5h)D&(e;R!{A6;0Z(
z8!c^}zHH^ztkvuZ_T)fwn0p#Wm;|#`K>}toTm#3n*-EF|rml-Z+;l>eC){C%sOg`0
zb&|@`Uh$4!1UIgTM7s?!*7t*9#$<>o at CL(V2f|+l!`w`Se+-6|(-3YBhQs0zJ`xHq
z2A}v)cn`vHq3~}A#|Fb{Gs5rXMctZZ)`l}h+EvEdiNR2%wsvwTG!P|^429DXjzRh7
znEMm9lN7jDkov(UU8K((#)}R1hKhGqz4NTZzf)<_smVLfnZKAz%#Cvt=6D^c)SE}m
z>0dCDXsnrbl4vEw{ALxYZ8Y<yK&`R1!knfh=51DDwG(DCGgn*mRyna6W6mcM!kOpk
zNkSb_T4$D%1d*s}Cnq?G8W5hqlL({Hss_JEv+p*NkV7<(F)G1IqLDHNskBHD3tSxN
z;{gdslPE4PI9Qr)Z4=WAs_p8 at _PPBl%R$pG(M|e;M-svVKszwOM+PNUk->=~Nk+OM
z=KSIqNc9WCDF~+^96(rS&VPth+7Z%Q^BES;RKzlq_47~$GT;2r+?dJ7=ca&bTET>v
zz<IlQZE=54r57w&(`L1xEL9}Ke7u+>mXb_!!BUc#Lxv)Lm^ps~nH)P$Yn^6itwv5!
zFqu&o%v%$%>XoG6cTFHsONJ*DlWS1kYeAn?e|Lh8j7a23HaLz<EG9XL&16)fj*JH7
zb)Xyr%CVrl-gUQi$(kQQeFLa-L49LFDH(@+ZvwRe)Z;;&2kHr+=3RH2ON&XtDWXG)
zd{7zz6BBusBvi3XVlm4m=CF#yW|m9TvdV;FR+V67!xDH_?Se#XI4C0u1UsdU1hod#
zQHeS>8u%DcYe5|g>NwZk1;Ug7Qp6`(*@T1~HZeiV_5)S_$@!(^j+<E`nvpiC(g at su
z1d$z>=w=6jZZPPQ6P)Z2>n_x|k4;IeVs(iks|T-C;M2_8inVyA2kmSvvFaK2xqM(U
zK#_^mL(eh at 4TFTk6HD1^kju4 at Fbm}w0SU7q;YdiBBbR4X<s56Kc5{K6xRGWw^1luo
z#v~kN$0ic?`h+_62FRA1P|8B9>^OiQaLIohJxMG)mT5*ZII?M^pP26<3QPM#H(J{N
zHqxb{t*Qj>!FrWbV<aYZtp at mCE$xpL0o<1Mhv#M|ZXF at 28aX_(4n<dpd(}l+k=g5T
z8u3)u8lCy_Gv6<Ix0w68r*ou&tLEHF`ZN+QlD1v3*{<(Yb*5X|!(O+k8BQSN={m;J
zUOo-dkg4lP7N;P_LPC;kL|uY#p>-Z37|ASk?PyCo`?3Lxhv)KF@{sp!LgbR52V*y`
zikQj;+A5xHC^V8{b;DN;MwBI~h!AzdK2QGVD$2=73L`yXw#S&T;9F5-)0l32lN#C~
z&<?1IBHhC*fq>JU0nUpI_ge+?E)rka=x|$KQ4v=J$`po}*{f8 at v(po29!f|>`MbuF
zQDRcjC{g?FK3R%zNC9rM at D#(u;YeZe(UQh>LgKJA|8e{!hVj$aNqR9Ky?dI(TG|yw
zhUDpMB*v?k-wGt9rTsOV9KMByJj74LMoas}*Uf5eCZ{C{2e}fh$a)meJ&QJ;;1|I)
zYQ`_dXrh-GLvq;|OZ)6}DPM|_bmp9J0ttzk4^JvGMh3*~7BV`@FJkOSu at Sj8zVhqL
zf8*n&gVrUhwXQHDc`ULie0Af-x~X%?0SWRe!aNuHQcP8nh*11nG at fnqT$I!%Etzj=
zSG^Oe<62s~70Vl at 8HqK#;Y&lZH3cQs)AvHW(<k)wWp>8a5w>B9upng-Ff;_qL`~1f
zn;d7S)WvuU*_cwYS278tLP;%H(o`B;`TS_2>DpS!)aTpO at tu+ylH4bcin`FKIP=p8
zbALV_mia%h5t{mcJX6f at jUVOY@zNX`Cx3S5V{|FD<|r1r(x7LqKFyV8)b3Z)C*E^{
z??<}d<)=~GglErqtTV%7&leC@<~$%Y68DpIqFu at l*2o&3j>FHKmQ<1s&olB{K>j`7
z-IC-oa+db`d;LzdBt{}WdtJVXkk2HOrG2xlDT$<rN^-Zz at o~$zjklPz+)5H7hLMq?
z>e~pufZ;aYXNqZVI>t#%p7M;{Z>K!8ps=QhVc=tx^1<i&rYM?fHB(J63+XzklBt&?
z#WJKI5+hOxe?j|b0es*W8`U-~6JbkYBTZU0 at u228;!&EkD&k=!odYu#skmj%$td2c
z;a?dxC6(uP4EJtnF`eQn=Tsl_oTKv^%xMzOR2=GGsEhH<YURjDWw!Fn@}_WVnP--{
zHPW!WsFUd)PPzt96Y at Rg7bOBqH@&&vt`i&WMoHJni(%*NmX3j~Vz at Z8u0onK^<{$A
zv+2Ai{5<S(W3d?C${_8lcAc$8O!jf^$eR at V$xRBA4!M+5J3uMReX6M}dA^QLp42xH
z#FL(Q){|_jsnY*RO0Fm6qko!GZPw~El*Y5bR^uG}Cmggv4(=I$nqKE=w$;?>*%(pn
z)}Vg0dvbQ(xMx(|q|IZ-X(cjF%jpmo?!F#zaeGGNH-67`K~CNAo?*6{(xKTi&XgZW
zV-#XE6EC7iSf0<bQWSc$etbBmsU}?&<T?^vUDfq9&+}~8FIv0-6T=e|+qI>uzg9tF
zD)qJ`)d`*x<Dt!T_YKRL2_sH&lCJz=yOkeC*nPvKV&1xg<XWPc^_#v|JElv;hc&rr
z64_Jd8CW^Tma9JR>A*8bov<s8H)^6brtk0ARmxA&Xg2Ed<Er9vr%NP|%?nlB-*Y^t
zEA{zmPF>k(OVWOcTHo)V*tJ3`u3mG_zE2 at B{*N~7L;pG#y<(uNLyD60mUixG^k(OQ
z&9t<?_^e&mWEI2ejCFQtj-~yD)9yjMqAHwE+Z>)Ze!E)ISNG?MsL73W5Io~@8Hd_1
zd-}~kUY{4Wt^Fp&6j;C%ooA$vaVKA3U8-Xd7ZlD>$HFdf&e6xX3rgp8N57?QWcvU^
z)WT(zj3H*>GBH!c2=U at nNtc(neSjzCFXHp^Hf$f at e#fqpq9F4?G2H)=TsE<K&G|lM
zlk#EVX(-*QQ0Zb&x^uL2q6K!{VCS3e=q{hQ($c=+KkoiKSE<e$v8|bpM at h+Gzk{v5
zUCQTUIn7QHzj1r`>>0PFPbqYd_l!o#hWtgzyt3p;D48UeOcE`@vTb}yE?bgE`<E1p
z^IqAW<bKc2dm^Au;m0uO^Jup|X^9ov#0Zp_NX4+DWpvy^{R9G{9GZ*JlL)bLAH|}d
zQlOt=O at vFL{nQIBQx(j$=<(R<sZ-;a%s1_#E?1kRu4HWLh)a};Qp=Q|HYw2_*y<ro
z3W at ef3~V?8u?kQTnc_W}LV-Lu;8ZkD#@97*NU7K}3Rq1K_LUHJG_Y|!*i9kqb-+?d
zgB;d`uw#G?@4-qT>{wuxJ=n)X*z19f?7=<|!rlOEY!7x`NMiI+!1wRL-`;}{r(^M*
zzlkc^9%hA01p0|5f2N=DA^r6G6a6r<9<nae4;?RprPGCEqxy;J!6t^VR6p at O*oY98
z>L;cfTN4OjseTfBu;)WqsvoWgdn$yb`jP98%2xA32ut;&?V<f=j~=Lg`t{&H?!iMN
z(9d0xPQ=K2=i>k~V5Yy^KgV8d7{7209bd)c5=OF!q&mAdjr+UE5T!_-pUuCrR9$UM
z!29#FrzVh<g;m&0SBgxv5pSA8E#a$29#X8-d6eiQ8NQ0dBbL29))DSe^odpc*H})D
z9Y_|4%7e+(BaNJxZt3V}v5Szsqu(S^Cu%Gm at jsj6eZ<nCebv&Dc&Xa%(MVH1kFYtp
zFq4jq at hC;J2O}L>3RxmBE4x9b6fu8A->wwHWd0G|k~?@0_Q<N&A_nC|nf@#$T#iY&
zGL0u<>JsJyTP=r~J at ft_@Vqkb&N?rOrxYe=$y7|9`NeFUlf+CtOZHPOn|<MIQ5$S?
z*Q*SF!9ct*8lq+%z~3 at FsrDm>QSJMf&%=14Q?FC=WGLrRn^Sx-R_z-2{dkhe`Rw4e
zn$n&{8gH6he>83Gm1zfEk#-=`QaVYAmB`;D<>#s0Ii6)o^d!KiJ2=YwETtOO%{$1M
zzR~=;>13K*Pa$HnXuf9|UJr={UO%*#M^+ym28>7{9^I6KIGKyVGfFPI%!iiUltSdP
zW^f)QRyG0HPH(BRt|&G51~t~5Y5?cqXsWIo<kA`><ynT7s*k2-(KH{cTNzVKcTPQ8
zoz=@9Wh<7Hl(v=mJd)>}YQAbH=FBlZI8`8_M^Qq=0KZ=361IwR9yCR7dbw0fugq&e
zZ&{XJLHih`J;!{mF>7Ode40*e)q=l%5Z85A*BX>cF9y2aJ}cM%Sq6DM)~(+<T4P%J
zW`1x&;4EXE7Zd2JHxoDMTG3OZay+#bnK~(08>ml3k)E(UR5Bhj<oT91|N1MbL8<st
z%4e>m{I7f${u%Y<e0wNlsn0T9^*!-2#(x}b%-~`F$dTY_?Yd<h@#{L{EbUJun!|X0
zTccsbbO+||L%pemiogWSavv|8S56MX6S(kYQ!z_!X(oz7jFHqgxNv9DJT8Q>2QfQ}
z<}o2mRS>hQXr4BNaRf216wOo1m}-N}WlPaK!UXw>tc-ac7&e5#IvP2>1Pm9#sAbGL
zVALUu)*T6&wZLd82I0-27 at b=ItgcYu4(7eRXdWMu#u>!CP&7{`V`%wbwHGQxw>u2K
zqML*FbG}zcH6jj`SZ^xT)8jk*PJjLhrClc;7x$ggO4KVF^07wkHtP`9v$f*A;torj
zFP3^O9&gKwvOUIEr8~I<k&9a at s$7io&=dt3UzkS1_Ng2#CG$ww>XVgCG&QFu4fW<w
zXm9PCB}>GxEiT98S3j{%Cu-}Gz|z{4^^K07rMtgT?0(hLwJE8JorYD3<aDk)8kU=1
z&F1F!i&(wQ(_xrBbJG_JXM~3pQ#K`S(te?+MYy7w`WGH=@i#U-X-i^~v4&-xlg&9q
z<VUTVYt$YI at 4CBovU9R&3?aZ6u}+mSm4jV6BlLXelEirK#!4=QrnI8Fb){dPx<1{N
zetGKpbhLY2cY3T+k`&#kLHmD7o!*lgGki`L%6r)VG4-&X)Y~PpFWfxT9md5H4ZI;t
z0-n_8BoVBwM0jbG+%}SEj`0PoBqqQsu_D)o6Z78)*A-K-g8PT4Nnl8#iRehf>JK!5
z<p(1T<E<Y`jFcIw`_o={Z7gjUALHUht#ygW7iyivdXy+z?e-PRbcngHCF*3nYw`uA
zP_H9js;mhjQ&=Si&f0A?>{(Y<Wg|_|YWMtl;@~O8>H{9dw0T5%V&6$RI{pS9iBk6V
zzf2P0JC3qd{YL#`-&`(*f_jSRN>$|IdrQ+54bO@?K>-ZBB^CB}c#|d&=;~)Ayt=_H
zDX>FuE$u%ro58`kU_WQnm#MpZkcd)>gEvfPomUKRiwV5cIyqfTD4ni59eO->PdXh<
zN9j8LxSEcIe~XUG5xTQ-p5|xVG0rjY{RYfhb!k^#S4`~~=a>?r2w?SHSv$rMb<eky
zOLd+*8L4u*a}06GDbZubj{L67NuH(YP at ZrP#<uPmn~zzS?6cdj7NGQU4__NBxtZ}1
zI^y!W at I=a69&_b5Pn2^^;2_$)JMi(V=X+#xLN-}@k)&HDdE8IJ7(<{BE#*S3!>{l4
zvT~7_XT{>3ap~YIV(NA9nO<wuzNg;%+Fl(jRJ+&NO^p@!aMV8of7c)*DGP6SvEf=g
z)eWyT=%5>IgVVXx9Mcs;Ew?M$lt_rIyNAs<Oo`BFDF!t#&iSwzwH~CY9Zj`~`I*?L
zflV;5iCBz4>^p1U$)K8g=M`u<IvCS{UXBzutZzubEFlHqgogDYX%b~=HZ%;7rFa4I
zYPnJ(!Ha6L5-nCxBn`5UmpDsXdncri1qW at z+J?b$y3GxP at Lr74&}RysL%>ID*n;(O
zTYHOKR&~RRok at 86S3|6v$67h=D;l>DaXor~K1!hvIrad>(l<-sd^O4dzqXiKNZ=Az
z2SYieNr4qJ;Or@?hw41~-u|6A{gyiOJ#K|rod7SqdW1Qtj+n-h$cp9ftZP{R?#8_@
zHf-Lzz2W7(uQu%7Ti5XB-Vfi|2M-+Au>akUo#E6ASu3xsiiTO*AH0RGA&Sz_V`Zae
zV at kAJNs-o0_O5v+#+(uskmsi}joR<kd)MrZMt$e(T}_{Maqnv9DCk3j@^ZDKg7RTJ
z{#a5{JA&`DROHdBLT?fC>6>BpJ>Q#2W`>nSbhoO7#|D^(UMjZg*(z$+<_z<9!SoUH
zt@@ZdgE-|3xkY4Q*Jh9>+B|$hANoFV{el+Ucg3|X2Yv<>T>)2fP2FuS)Fx$VbeS3F
z7;}mUi=(?j5u|I#cbr)}n0ORs?LgRNa0V&opL3SEy4{*dbD!B*gxr at v4!M^K&NAhE
zw3!(`#;RRK)(!cVGijxdu#(YM4B$z{{_Z(yL}~B55$zu{%wS6|(GQWeMO%2pQi==m
zCz$VcQ;-<6;AmQY+Dk$Evp^-=%v1&WC&io7=Qaax!oE#mh{tNPPR0q{ICF7$mvtU-
zP<oSAVG_;Vlz3a(`)1A}4)7Xd)kigVQ<&37KZKs7&Z_71AsloN$@R*}^pql!qZFNJ
zZ*9h4S$gS;^nXg1eI;GVRdjMGvtB=fTpO%<&5>@&@UEu&sl8GudR8qZ`j`MTH;1OB
z`c<Is?bffNXS4`W&F!J;Q_G6Qy(PSY*Wy0BtXEKlc+t92SYh{J81clt(@eULta7jV
zrB%xat~nHM9JM*pmcwwX^AER!hA+`p`1ZQ@(j6<^-hJ;F%_*Pvw9{tw-hF$gVV*$u
zQkcD8x>E5}*Qf5ChTdDd_sdW}G6;Op-;j*zer`H?(3<KQ6^wd5G^SGNBI#JI!Mxyp
z^ic|Dl#v+Jwb+9vN;+$KPhF3hQ<2s|f=}e71D)3SiI{I3<%%?=qy#=uIX~*Ut4QmH
zPdylFCbbit at t{*0Np56Qm@^VRNi^+AJgT0ssx}h2Xq}26-7rcQQ36+P5qfOUg~BRQ
z8_{Fw?}o|}vN|7Q8i}!Hd6B;K3fl|PML2^kG^CBxR;G~TkaZe*2BCKpI)$CTrD~6Y
z_SQZ-{Olse#K=~rmm(NLtphF88EnN;q^0cwZFzlKLAN}VQXa46cF-+Lw}sG=t($^M
z*kh0CZi*5;W*d6aL#0snQgK*s(>J>IznqHevu;;}YTNvvJEnVGY1B{YnM*19v=%PC
zn`2jfFAcQ~E<Grl6w1 at bn6of;qfK=!50*fZ^Mro6pyi5cSgxtg4r^5JmAxlHinGl6
zb?azfK>M#ga#Ft)Eln#!>v-LGUVC0$s3T&l-FyR~^Ag2jE2qb}sYks{Ibl2%ZyUyr
zc1q?HchI*o)2vfAcimoVa+=U?0%#3)dvv_+e0Vp7Z5S8rl)69{emUJ%k0yv`N-s;F
zRBH;^z;wAqRGMRu7oF4elk at 6dt8r>V^TE446S!DNr>!IFvQDHzx+FIBa_PeO%eX({
z(Ow?U<Xje?(35+@)wzRL-`pRmrL!hQg}s4C+u|GCcuU}P;!rcukgom-L>x+Y_+ZU)
zdp6uUeIiyu*3K;RNJ6B0z3HZyz|lPA))oG3*xg!y{ncW5e|4Fqy>>rl4AVKSLRG0x
zz;E!4d9-?JBYbjFnx*}vyMXI+hNpM85^X)WTiL(QZYAmxdz3otQKn*VGQ2*OK97W+
zO?Za(W82!!VnjEgB=SC~WOvQsQ;CMxJK{onr5*ClEOwt^9de&))E-su{c`U#qxP%N
z6SJ8wv&UkeHW&M}=yi?SW5Cc5-3K>nf5Mv_S1#|<s(bcn!{i;zFzm**we5gspAW9C
z6<SOCSnR&LizT<&i8b~sVN<MCWWBYN9h{pukgXr?njE6ERyJDN$DFk-)LjT+O7Z at y
z-|a7!(>I&zkp8V@?N%poS*zIG+{7(x{WUI2h`O%wIOcxENORQo*bV2nH1e!9p3Mry
zeg*t~;GXM#M;!Lf$GqcjhODt-F=~H!D6Sn|s2zxV9WqxT&-Kg7%zty^D9a``NWtkG
zLtXi at yqjzb2V9`?Va#|7GpVo;g at E*xq3~jam-p3y(qye-a;>F|^>Q6>bu!OV+rsFO
z4mc|JLg;`5c`1|dPIpvx0d4~<3E^{qFT_c&p>7RU$mwnlYkt}@Yu({kDW`k4RGSVd
zv9eT|p2Mn{mv~;whZ{?aBk9?VyiC(`8ym2e4RcR|Z78X|^Gll5(ml2sMki&NbUp(6
zFZ8CP6e{eOr_+7%=5V?{9{9Ze->!*09^09~;iMN++;w|>nrBF`#n86XlXmd`EiILS
z$}$r^CYoNBC8aantcxK%ypno(@x?E4^&kC}Bz|}2Ff&RKN~u!}cBPhJHcwj<U;F}B
zzmL9)0s4-fuwQ*Dbgtuzi^Glan#jhx)`eH6oCrT at gGXCY)VBP5ZkR}TpMl&=3}lPV
z79A0Re?&Tt9jNAR4NB?o$Wza0p>$7=#JV1dCmQ3qNIo`<o;tW(f6%QPXAC~3b04`b
zI(1Y7W^n7_q*ElJADG8Q{+CiPD1{S$L*>v$Hr`^Kr$&uyBgGSL)Mbdf+^Yq3+#_e7
zTKeyr?cp*kD5H<`kr7&+xkO}oWGsD&t8ckV(@t1zI2X&pa|hjP;AO^d0^aG_0nv at U
zu0X(tb(#ikH0 at w?h5g-h+5a)5VMoKzBE6QN-;8P4g>(offW|KxqRRRkVxHWHXA+(@
zcn(0_5$r~gmKb1OICU-FD~j4yyIW#TW?&_)IHY#z3 at J};qH9|h@$^TF8L-*t(r+nu
z8F|zQuU#dtmnjYK`Kwu%j%Rr6S*Q}}2>@_?5fU?oTMN7r+wE6UFU%hMjKiA_3F7Nh
z at Ehl|=iMs04EGm!E2MW*gWe~#<2|ea%VMQW_$xCFQ3YSZf0_J5x)ko!<Lw8pj-Jn;
z7{mSdd=DDEVZ_YO3{lfwTfdf%B{x)Cwj8eh_N9S*YiwIf%qh+=?u{)TZnfSp at Qp2o
zsF|O(xDBJ<*m5dDoG9twamqHN%xn@>@M(yKTdi55%8)$s5I8n@)BR$e^7mO(^EiVv
zj4Nh&L)4Q$1Xdip_lk18E|z%HtH-z_4C5~=uiKkes37cB_#-l&y9)okj8|WUKQH68
zSK`ApGG2ETK1s&&SK)_w(>8u^@Cqrz4YcfjrqympF8HQCC8*J9Ij)pe#+%x$Yl-vf
zEp4YC%)9@$S(FYQkd>4YxCITXkUrm>ge$tdHAk|#6!j4<1+7)rzp?X%b;0TBK0B??
zU=4>`JrTfJF2j|I_nc?EndZj`G0(-!q8R7l60J)lYt3EjZ+0=(wIY+N%#3h_x$K77
z&~hd?t9v+Bc~m{&9o`J_UR#asXMZD=i6eIE^}%eyo`CauAxv<7K{42kSJ8SCbs^~*
zu$H+T^AnxH_O00nX#NUJuB=6BmuY!Xq86G71olBMMwF8HDzK|^6Re50#(sG({f^ZE
z7X`0u0?q>$Td{j;Y0v5pFKU!WYg31H$CQR*A`lbiQBW^y_E at KTbLHk}TW(zf&Qv87
zjav2CO^h37H{A5pTLKxis%*~@%9&_aJ%uxSK^pN28mWh7*`9)s91idRA6^$qUAf2f
z(lSw1HxaGjMS7wnYwTHtq^lX-TG5%ahetbkakCws?66RJ)Ir{O>=MLEPM2OjjS~wm
zx4fGWQF9Z+lg*Q4DTA_Y)@n(3D5sYYj<A-JNHL7&R#-=KySB at xklYt59Nqk#R6bFM
z-*n2A=p%OQkwT$Y_N;vApqx7O)w|@>Kej3^R at B@WlCAcNvb~P79ia4Bhta&6E~Boy
zDkoP at PH*+(G@>j?PP_ZEv<+9KeXl3&`+d?5kkeM4Rp8`eznXCuE1=0c4I|3>7siqp
ztN><&BzO1W7p&j?d-jKF`oNw;q0qsXK3>0e&tY1kbp<l#yM6FY$@bNBv4Zk&g!QT0
zBi-dUjJQW5(@(yv6h~=_KJ;G&=|LS?H&Lb^d6w#TTquuY^aPo;n4Tmv>FOq;7ez^A
zx<RN#okP`H5u*I*Pbe`nz6M%!G}1GJe0)07T7fhC=%=1Y$&313l#FPRY7d9eW}y_`
znToSOM*lv)veiLH0pCij{V+0=^|Ps!bRS{1FB~4xNrtFmYb8daVyhwQ2_41|^hcD+
z(mpcTx6+V2<5+ga?eir~mt-CF%*oYL9CIA`*@?H$!kN;q*H5u(1I;fml{pT^l~zB&
zc}J_=mD*bFENHE8rMF7XIjzfFy4K}R#<!xkUyJaa3pd<aY`vhS;}%9+<cR*Xr{9Y-
z7{(XhX1EpO@$9kzUf{b&#>iQo8!nTmK$a-qvF&n+Y8t6T&U@=8KpH!wDR-r{RzNxl
z(kz2C%W0l{_?96@>v^^7mCJH-)4mJ+)w19?DygBr%lfxSxyLJu`e-1^F-RWmGEpNv
z{jG+0G^m{~@@D(SboaX&k~_MR^`=|ePR%mJlwmieOuOkL!-TSE%m!WtpCKrDvh<om
zTvr~*lKb$U@@vw)8JA0-fp5|;j+?OF at VkH9gAMQf-fpdWCh$ut&Q<5z=blooR-IsR
zw&G{HJ9%Giwo-V%=^FUzhhv2PadSQ_<;T4Hf5)8>VxXsivd6x-+QgIj^du&qU-h@@
zn!Jn`SLY at FUPe#F3}4)v3Mukv3e!>YI=rt(iL35Y>%o98 at 67L_PAL+2uS*THpZu}q
zb>x1Zjbub_9**+;ND!ABmY^0t@!W|pV_g6s&m27waWYC&iEf=18$V2A*iK$_!?uo|
zxaQPF-9$oc{JjJ3I!hLvjI#0ba&7$lc$<)MQ;=uw<OH>6jE#RJ+{Ql^YZI1?bfs0!
z_vmPwpt8FrTHh3LQg*n;6G=m^iQO?cY1TgcF7ZB3A}tyA>SA+;(lb$1QngNG4qx!7
zU5d^3Qaw?rE9YDPK^WXVtfHE9hZibI06B<;)V2>S?duQxl6rD@=sYj>3WKfEko at G2
z;$&}{XRu+!lRqM#d(axccCanFQ}J at zs3*R$bSUGf1c>>@ff?l!-yqdJ4l2hz5~0%2
zo!mv2PODMJ(rGP5<2iZn|LU{rBy8u{jrA!$yGbN>@^9 at ZZaIANM*fi`=B{)0rKiS<
zndTf0XS|o=yaThe^F6FDW>Z_$+5-VtDpx<jqvTKzo7D9w<6=ZIjuCZ#pS3;QXMdB~
zoIK8`CF6LluJS&uKF~F#IPep!?_Xxj6^e+8z}p(2eU9g2|8a4*q#7Sp;H_%uo*!ry
zi_67(yg7NvzxvENq|mDvcr%=nw2-rENAVw<VQI6!(W74<6dU_YVEwQ4DK>3g7>Ch&
z(?bsQCgX4>d>qEcScY)h^IPq8jhknT8&yfh<y7h_w`uc9c;zjgW(oV4y)tzzrV?S_
z4dX86!eL&0UevEvXs|?b=RNhS4_Yp9z=!%#wyoGX0=@4br_na7F3u at A<~SM0M9fAC
zLo^kTY=|S at X{w3!#3F7EpC%SN*E&*Vs{9ZY9hZhU7|iCQ(3*!-e&zYxtR}>oqnhuU
zNaG~8Bh at vr9<!a3PROyqRO%*qFUgWDfF$MnhD at 0!CZiV^<ji*w%vU%^z9)<ygS at _V
z<U1xh(jXJOvQL5<{F0q)<q>KbWyzi&Lpd#!b4m{8gH<Tb+0dC^a899FkNIa>Z?B#;
z+Gjt<^!9xk7kc5#dNmE^-I&k9t6t!>^S%AD=Jb`bxhUCZ*|#VC6PhvJw7i#WkBPrp
z-y&9SzNq|6Tj{f|7j;t}33OhbbJTmtxn=5h63t<*R}W987+rg#b8PK6m&*CjDyH@(
zig#sVam(s*2+{F`(Ghsk->grev_89YtgoEf;id>*MX%&hR&S1Lr*qU%cuD(88 at 1S*
z=E`)A;wrEwyVLpRm#$?Ze^g}ni(^zL_c$NsRXVa--(_}=;k6v^+UC5rKE;{kv(p at 0
z3$_jK)ne58ZHv4))`Nucw7~W*&jsreSl>&N9eGb-6*s%Un>%I`n>%q6+nYX`t8DaU
z*cN7-rJftvc2#t=x#vrhHgIXnfNG{icQV>w{Cqn<I-0wDT@{_+P4DS-qO9>4!=tQm
z@^7pcJp}A$5TKs=*s>R3EN@<hab?D_0|SiH)0fb)NUT`mTGnkb(POsV>&>aeEaUbC
z8|zx!mB&x9lDnn()Cub00EbypGtz&3U;sa at M*NfX#Xad~Uy&Z31*9)Tddwc0SPuc8
zufV1FPq;XGxXieW%fGMCt`9cj^v}1ao~t-7U0Bvy?z3A07t1Yyj;(b#b-i$erS0ck
zXfIkkUq%buE^8M)&EQ(&%#LNn!8zCJ_ww#PvnMa=%qs~W((x{%r4>CEo<GpuH{)lA
zTRicHHR)xM?Tp7+d$SmJ7B_S<j<>2hlO0288m&_#d%|CO7Ecy;mm)Bt;hs;%2VyvW
z56I~UCsl~-AEjcL79&ZW87l?Mt1}0;s+RFJH;V403c}Wz;o at e_a_BAR;8ZCj$kenV
zTr)~+rl~{mIHwtm&A4<<74+#vH&G1cqr~y=n-o~-5X}Ec^pQP=sq2_)LNrGq%QHTE
zsLV&j at UzTI?*n&tQ$pSdx-KD3=ck2LB;ZQhHo*Das`Qq$sb?82JxQ%Rhx3~#ldP5L
za;a<%mAuxHHk+?rYhjHPoQs!XE-uRwan)L at heqn5S+<AX3B_tO0&6WE^Xu-CL{#q4
zy!0H_TITMxR>m`}s+v&}=9vG#thI`<){=7zuC+1*pGs<OTkcSWX6ep8tByZgYb}>k
zht^sd!&_Bt%WFo3(*D_6i>@P4w&J1GDl%ee*+TX7{blO`v%GT9wk@}`r*D%ra7~gH
z_f?Y5>{!L%p3Yl1UrUI~x164J`t5ePzfg&xRc7?byzyst^z<3n>83N4Gdo~o7&|dL
z7~K?wb%ffdLTgzlzbk|5iM0bQZQjv7w5pP~{Xcb%+nl%ODa?j2`q35C>My8Wq=&ro
z(O)2Zi^Kg=YiH7)9NJpw?S%B3kqdDQ?YzUce2-&uIL;-u;D#AS%nI>?JE)u=+Isu#
z=+o3=ba`(VlZ08tpLmgCa%6ALRbHf+DKh>lFH+1x8Gn@*DMpg<S9y_QobU?mxzZ~X
zLq{z1YSbUY&9hstko8!|<JG at UpOuK+Mh*0gvT_Q0ft1NzXD^ah2Q((jn=bpp`ua^M
zz6kr;(2|@ghoPxTnduneY20HN;rnWd;&xCiffMJxlGD-4I2FpAW`sETuI9uH4slXn
z$%zpz<1|y|bbF8!v+z$itq*b1Ud0I>z`rUTbMk6V!P22NuFxwBk6s@>MIlRqK3E=p
zN?K2JZdQz&0i~QkM`G7<u_QDKQ>vwv`@I=c<^|4!j<puE3D|W?|8I2QImwRmq1lPg
zI3#zaJ`YdB*0O$v2g{NzfpZf=<1+5sKjXmOpvF85`Nyh?T}*wWGyK(+&WKl6p{3Sg
ze8L!g(JbHg#7#)K)y3eqpN%LrAub$RB^zvsYi0n~=+^YHH!A;T+85K7E$7C8;}r1F
zHYqJ_EgA9{7`T{hs|w=;LOzncwK?$C!V(P=o}AxDTgRyP`N{b>$<@~jN^`(mMvjTT
zGDe{d#q_%>CMy&(1oHOIjKGba*1*i<dYNP9Rq2+7(q&(ju9Bv^^s}7qdiT^TxYl~p
z=CeCk=vuVSVTf-fy`k<LYb2UT_ZUmtai>^(J{&9VJi~2e6I?sj)oom;jK^8xyUY0T
zDP{T2F-iqdPE>0mp)uq5n6in^M~qrWq#>ou<b11ojbUWjBs!n=*;^~lN^gIdh}%TH
zHl%3sW_pxZZILN+p7~goFz-tFIg>2^iEL$S4y<Azp2O->@H-smm!isUk-3-m)(1Bq
z>x0Sg3&3W}EZ$5|CLtZ>d1d+X4gtKU2v78t<JaV?z;94Osh5YM2|V(^V*+^a at F2ri
zZ^ivzR~lBgKREBiK8m*X&iSl~^{t at V^R1lE&S!ng=c8;sN64Zw49}De^o2n$1AO85
zO`>B&S%04zzgR;*G1QB at llZa(sl#gb34N<t4D+U9H{uALjTSV^zdv|1GKYAXL!8VZ
z7HKnS>=POCZz_KOD*cb4Jk)jl=$)qf-p<aL@}i{YwGK^JbhYA2E8<R5E9$#Dg1w_s
zj={;Om?w{6kLV$IzG?VdbC~;KE(iDtPkzVg8OAX3$$xQLI|KcEkMC#D)wow~byF;D
z%}=AmTDmrezXoeDwBa}L9E7>$7kN>>qFlnUbX>)pNlnLA2a`AAj1!(;_#|lf_p;nr
zj-}&m-cx5bOT4)XE9CVefd;;?&f!RIyvVlXpQL*E=c-gk_$;5qI9QD8T8>b at G$n5E
z;4EVS^bssysFw(8C978})wjrcp=Y57I1{Ud5_&UZa_tPHYLe5^y`lr~wBwd-&2Qc<
zHnoC=&d?A`L#Js-Nki>46o at iJmE6S3w{MzM*@-pnJZ{P1Ua$N$67*n;=zaAQ+|+Yq
zCQj7fFLBrjc?foZ-<^>=S5=SX8HO`N9DbF~PBs)txGlROYbQ=qY9pKA-|J3)>JOR%
zslmgcLwfe`tE;(chNjF$ib^>hO7YN6#z>MP-2<*n8_d0O*k7f^iOQG-)9KA&+#AK+
zV&AW;nOTI$<q+v at fC*9<ZZpF(iya=(Fni(10~!PS#?GVRe$;|BRZ>;oE9GMbAn!XG
z*w5%`)*M5`XG5};6{|t<Lz6Z;vBGgEN at C%831D=>cMx#9{G!C>DJvYF2uXicOeVGJ
z$^~?<iQYM*p1V1pWG~oIgA*fB*$ZAT!!sNuEumV5yv2l}>ytUS+edeyBn57qj+Pqp
z7F0ZkQ`K=r+7;K(o8y&3fLTN3YQk-Yg7K(x+^`JUjFQ?f{CF6NLY|D#n1Lr2;fOpe
z?xdydn<nTd1Ls?YF*o}siN_7eg(K`}>#q&QSe0BD3c1i8?n&=`H)~UHmJRQtWKWE8
z^LqI^H6gySgTQxl9n-c#8Y;P^ZLJkP2PBRt(n^xysltTTl^2%PO%lywiMaft{o-=m
zAmXyY!#fllv*eH-Wj?Uw%M)`?Mxgc0M-M%Zo`r8+De)f7;c#hA-q==rx2DXBnA_z0
zZUK>{-ZQZoT5da+m7VxHP9SY)YaE_8es>M($RT1cUA at GfMu;e37fg$j9l1Pu2p17s
zsu{7-P46&<(KMF!L%-9fINYcmyoA#83I=r5jORE1 at hPRoM^J0$53>H_f9U?0_{W2w
z{lTV=ijbcq9%C>&1u(vlkV`fady(>@yutS)_ivPne)s3(&)9WV7PYMylN(mf(h~&U
znA3!iRSY4U0J{P005yvbTmTjWvH^JjcwxyZ1tbG~Jw7Vj4MVu#JEf&K5zi`slfDC5
z0A~R#(#8SC0O-l`BEVvRA!@<neQQ#6*3$O%+Z2l%xMA4yLWp`%7d(zO+lp at o&^Fs@
zh&$X$%Xmm7jmS&f at B`M8ub?Jp!-5dg!c09ED3zkn7yLl$aKm|ggD?=dht|{CB7C(V
zOvYZ=Qg9;U<nW+Q971k?38yOFgHBYMYx2g>{-oKXq^)a1vxKw9x-gj^359+H$2>_P
z$ErQ8l9GlxInQaiC;GuQ41L at 9X`kdNCw(gAqcz-(mY;?+>Dh at Jew-Q~(9u|m7t!i*
zJH~^Sv@}>|iA8yYp7(r7fp;FKrNhvRE!`6l)PbD$aVe5YMQL~PHtn5sHs;-#Z_{3)
zp<_E)oHO?Hw!g3!p<R6cj(pO?ou~H`8H^60-18-T(~1edDz`AC>gu85rEt7o?0L_Z
zBJloO-&9mjw60`*97pVGDm|sx6G>|cErIj=*297Cr1vC0?Rn4dgdF5RUyhVpCza!!
zt2y=NL^<qasxzBrbkdUU=;3JUq%v>rd7sotWnSO&Ztld_wMb<T?-<$Qf}=$1&hYB%
z-C3RZCLVdRI|cSo)tynmJlqEp-Wd(dy?rndd2hi&16 at P=;3E6-4%Q*g{5|i+?vGrP
zNe}kh2``C1Ue?}^h7koBsORHi7<_mEZ|YRGi{!mRxnA-cQqdL?Hyn4Q8fH&Bg;voF
z>ZN((*MFQnX}!aXxjI@{6xDdOg-?(M(e@(Yj)d=@NbRL^G(`s63T;t_<OMlid^PdX
zQAy)b%CTyx+vaJ0`zfc@`f7_|;NjNBbHKbyTOLj8)w?m$6=ZZv>Bm}T!}-RjgNal|
zaDF^{>;}1Sva}z>SA%RMinFO>Vbu$Ag6ZLH*NJY-o~9F`V$J>C)6j!2#^=mSW6Lmx
z{$^P8)lXt3TFs;0R4Iaf(d3m at JoR{<`J4kDUj#sEoNt8BNw+g<=M-vXutbd^;(`m`
zWg#394;xZ1xYlWThUIY9 at -XGwInWSy!R1Xo7)807bTI*NT)gE?%DZ|k!X;RpkzkHn
zwR!i~>?aB`mZXu<klg`Y-iP at c_~8Ek7^Fv6Nk at 4<pZC&k0po+)x+74j!EQu#PS?|o
zqi|9($sKPailp9_8A(rSU>&2xI$vBNIW28pMR~AlTO at kI@oV=`znrp&Xzuc`ZiQFp
ziQpB(&=-@}B^|!NGtbig>Kz;x2=Gh9IDF4yA%~r5znc)hj`n)Ldku5H`U&%^J5OX}
zD|g=yFWe)+e(yOxxBoIG*zZM<ehkOvu-lowqZKWei<aqc-qgGiHB$^D3mj6q6k%!K
zF^bN&YIxe4*4R+<j-By4r(sS8of{&KWbKTV=V8|w*dtjdxKqQVbO-tgq)Vij;QZ?d
zM&BBq&cAASnFG?$`4 at DZUWs#zF9-gd)}xl~A?`>PBzug`%8q0qPt4Ct;+m3ZOE4gg
zazxKOzNRgEQVrJQn2Dv7#L4nv=YRTdNc%X_(ljdCpVr)owp-nY^Am^-(mhGF=S`*3
zf^%Apy?NiMv{j9pFh at HATQrO)!9CBHYavG(F#5a^)wza|B{85yEMi`yBS}qnu1``P
z-c;mf*;Fb;pfv^4V|5hdziGK6b(PyN5Zo3W(aU<i)9<9I4C71US{e<hNA#x#u4;5l
zM0_xZMRF{AM2|fkNC26TH~7XN_gTT*J+We at 6oFl*_LrwqNmr?4ozXOInh$aqKkZjZ
ziL$n3XFy|VwEwBO6JVn&l#)1^o^oeBlS7&*3u)$&n%vJb5$0*xH$6m4g?z9U?W3`X
zyhp(85m?I;D9IB?^q#b8W>eiNl`J#HLBloBow6p^@023MOv=g9zWoxFwZ(lZ_A+T`
zZ9@`DP5ZOo?vwSScVxb}9D38EJn*OWwy-Fi4*qhL--)}+`PmD0FQd|DZ`i%ikX$lQ
zij=J&?F4%Y`(q`U7)z4^DvTodc9k+7n9E|ix?@zZA0u+kMyY3?NXP#4-waPp{|zlm
zg|mK}yIU4Lr>Q2{q?qg^vhAHlo<k&!cPRYw=)*SuLUVwv+A*>xmt+QQPNs=MKS%9m
zHfntcPS4$1g56B&u`Nk4Tan8&5x2#5DE*DH^<qC3d{7>Tj`o7Aj%Bfyy&e6tUJO5s
z(|j(S6hm{hv~SzxZ<ODoyQSEc;BV}t`48;IY<>}YO$%z!x7Ykm at vsQY&dyu_?lew%
z^~~y{{$XkR!s~Ce5sk`EFc&VxDu~XFS?ZOjMDNg=1M88$7j}bY{@fj`rR`hXm4?q`
zGQ3*?dK=c7Q%;-%Fu%6o99vA;Ev|`1ePN_c$Eb1cQj{2 at -WqwB#Ym*nVP4ldjMIwZ
zy4<|P*5TP>TXW#0u*hDIVclL2>xbCAq5F1Bs9%NetxS;p9Xam!UfH#aLh)|+G%VSZ
zT8CxNXdRC7Of^%#osK2)iBX(pmCxqNPn-}{!N<YkgloB9FS$i}gKNH|zG%m4{sDMX
zB2lWbmbPPSQIhN7=eWVYjjp}!jKYfVji!+wPrx~O+ at x)oW-Yc0Sm)^)zBG}KtgcL>
z7I%uYjCM8C)QPqbBXfCxa&f8X7wHhX!5k)^pQrbXczVysGyu18aTjnu?ihLEK93FZ
z20onL(rwr$f3J?ma~f9b$jR`;8*k86p6w5MUcOm_TLi^ov*C at hd$3!|VFlX^ZQg4~
zFJf-M{5+=Y-UOvx{5+CV+Nn=yA)SqvEd;K@^Q**)*WhbJD`aca!rBs~{(O}f&$~%H
zugc^=WtYow541toRVCQV$~S+*6LYbaSict26BgLZ#ogAoma9$TQ^fwMbvy1g<17R}
zkL8St`RaPyHi9J+mKBFu+PAEtZwfcdx^Ux(i)_M4$8UZB-vzL)l2y#V$;tDWV{bK+
z91>Vj|A{M_pF!fGVb<ZVkDgK(_!9Tp51DHTF;zW9rtTxxibIWxQneXtu0UJC0hPLb
zFur)wzGY^;AAUHr&8;iz{rDyw!JX`M`pvpfp7?5MPo6qC&jqwz0xLXvvl0{K8xoXE
zxr9Bvt>=Px$|GR`Q+@>>@hU#~usf1a%#^#rsND5owBIem+68w7iVe?|OwCrl5Qo*+
zqU;4P%$Pcll%O at Y{rD;{cUzYdwLNoLIVL&e- at 232aPM3}7GOn&QyClUrWBLOm+)0a
zrqRy3^LM_JJ?RDQ&RjN;aCEf9YMjGLS7FT{k$K}^nBvW_JKfo=l5p<0ybUiD(thiO
z8Jv>9a>$Qt2I0gJl at qIs_$uFxo at D3ablk|*){vdK*%>duf4lR>%0_-3>Az9bLIUjp
zSW<GyRP;|Xofs9QLC@(ceV*5`qulnR(F3W-UYdjNSDY&T7(31IGXJN7_V&JCQEp;s
z-(QK at 8;{wW2U@|&Qqe<w4)_AaA0fOO9%eO-hn36m68&|9N(bK)#wC1NG8MKs!m1PD
zgE8Z~4Fzt6+BM6B8+o`dVAvaNDkTf7#R|T9%AxSp$3G4;5sheR`|dqgrl$>Kc-wbx
z`<<5dey`EFAnx5{eMV1xOoip)yj$6=j#QH_;OoM;jgjU4>J;?i$%T(%{dy<$Yk-c@
z(6)mV)0d!!xD{uh_2`vo%x%XMc?()i@@(Jg7cK2Wys}RPINL(Tg4waPX)^Um(KK!&
za#$>?@{%_!rsLLvJ6Chyd#kDVDa`f0o{6zM<oSYpx3;h+afAEoTkuUuWq{u72>DF3
zp#7Zn{D<m&gVjW+?E7%rJXj)F-R$Y}9BHD6eODDu{VeikK(0VQ!f)Gu at O3`;t&$63
zsplv(54fNDwxn?E>-~Zm?xh~Ao@(1Yy#Sw=a~aTgGSIcUQoq+B(;lI5@^^!;?Mczi
z=cB9m1i$?mF5mYFm(#zFnv5 at SN2~Y3KP9qz*SQRMA`g6r1HR(Ea?+eQOx$59qk3}1
z98sPJ_Db*gi(KhRf7nz7k at GG6U-PA7F!Ey_Ei5M7!8_zsHp&|}g{E@~1u>N}_?D=S
zBp at uunk987)-vUl)_KqsdVJijj9z{Gb9t_dxyD2E3oGzRpys}P$b+vF2g^h0-1wSv
z at GU#>Hr$NNiR_BbQ{F~Bo^+PmTe<;%T{@2Rl#cN`tE1fs_(BEFewM?pbsOi7%3E+7
zhf`n#_CUfOFzFO0#S+XuZl&#k=F^!hTL8hjZMv2$JArkVI#0P1`$mf#^vfze`oQAO
ztwjBNK<mfS{@lH^m3GHg_d{QHe at N~JWsYcj- at o5S?gyy`CD;|T$jJQxp0tI2{|eRP
z_q!-9)i7>OO)u)B;qNyDHEjQvshBZZmsAqkr)N<uH-6Tw<%dPgz=B#n_Ca4QXGOZv
zQ#}_KlI?*W*&gg8+XGZCssRp`Qi6G(tWzr6?X>rJZaUSLTvjX=japaap|Q}<N~w{q
z>O^;l_oD8$^nHFG-iu`3L*3J at qhKFtydp<kNN at v1TSdAi<0g-y2wi`@Le_x}{YI|*
z^;I>4yJnU6;+^OYz2gL9<=?69&=NAbYbTWReLbb(`s93{oHH!Uszc7WrG%Tssm=o0
znrjQF=KpmPb;#TGJ8u@<VoM>x7a;lSr|np2?7GuEoSwtNh{0k$t&T{8*Lk3Ap(4eU
z!xB#t)~ei&{hkD1xE&wiH2y*+ddI$<EcOl}VY$3<l*r(#pE+3Dv*MyX?dulq>7XZ@
z5I5ftvEw<MWIj(@xe4E848CVo;hn+UbESJA?NM7-(v?5vTZxiLt)*c@{Z@?b=(phK
z9bYytIFnw!2;+XSA9J|YH>mg968LsF<%2Uo?H_D3#4Ot3BG}`IS at bgc^~pZk?~N}k
z_A&Tc;fMn4^y3u$-FQRoW30BzbE+uoM_wJi2}&61ja!YgRQtU;c;r at ojC1!mFFFX{
z92#vS@*e79Pod%cnXeh%nE8+F1-|{2_%7~=CVt*~1M~2PTQs{j;+x+j0ipjPm>}R3
znS|Y;_vn`iakFxhNbl<4iF2H|Bf^t(DKFXQ$|W^w*R_-%J(*dZ0{;iazb at mip`&>Z
zZU at C#+WvV1;-y@&3BG0dyY6pbbTaHDav1`Fo&M(RM5kLKwxl|GhH(5IHRg-SWrjU!
z(A{K83B0+7 at 4OZk*e(wDH)F4-Ux*LB76^**Shs^t((U2pcf%gu-%NEeYy-x5=sHA=
zJ>#;QkgNJl+*+bqq<fn|{fX|TgzQA0NO#D6q9J+V=+&9H!yARw-M1J8Q!pwS=qTy8
z(^>9_4Ag~HN|oH&6p<{`OPOLbLX37RW+e}b3IMfprH!z09-O%KopN)~_$mKUtjC6l
zDN+U<VGFRM2n?+)b=Uw2-;{M8#h5xbZ-es)=<@RxI6snfbcYfxY%RtK_%pVy_2Ych
zuqFPZ{<$dEBU`h?#x3J;zNp+>L&yo1+hMQa|G}$IW|~W}W4A;k*fWr*E`ERCr1L+>
zCpw52)>@7)u%_emm>GEZZni$Zc`5qGZH~hnXRk?^Z?8fAkKsFe7I>Umz+qYNOf4J>
z?Z3ZZB9xCvS}_+jW4}*JL{i6sBMDJ4l)Grg*K6B<yI6VP^E`QufwQjeID{UmrdA#`
z{bAUB)bxd3o%@mrPER^_O3)Hm0s4%`d=<E#z*K(ZO)Z&+oo`@xg*v<%CwWjRtw_A7
zo5%d`y!<V;QiiiV#^FmnPhX;IjHfRdlBbQpSw;9C<+rG5S(Y}>g>2>PV<hZWt%pk-
z|A)aaqIIQqnGbbQ4`O$o)o)tb---JxN`DLfV&?g6ELM||629%G!I@$XE&jWa63!y4
z=_*r$w_$W{^v7x13y5w at dupuD&MAn-rWVy01?l`eD*<1v^`X7PhQj=$8d`t)W4ecj
z_vq03-{oBye386+cToN=@x*01?8qrw%f*&+74=)~lXg`lY!&fU;pv^|ffBLLKcb-0
zl_C!Jrn*%=;0y5;Z~sT=E#>bf*Zk&*vn^zU;nN-sde30^j7Mc#sHC at TvBxT>3&R<J
z3Ln$Tij&VNTwBH6xS2rwAK?@+{JP=&aoVa1JIW&FiQM)>yBj at z?-uMci+MwcU*cPs
zlZxGT&n2wp(WA;e0_M`rMtFvAY>c42DLn5tc3wljg#C1m2Odg%-3}Oxa7=~xj at 8`1
zdQjJzcaCOfI2-rHTCtCTU9dM@&Tj+o)b<CBy}^q1Lch}VX2Vh32kibT7WIXGkGW at J
z(Wn(;a5Ge+_yYg=!Bn*H>(B~DG-dkio$2`AdE2qK&^N@$Dd{<7n(lOOI={T at IURDy
zBQi(j!-&k$zG3<ka{6ce-Mvl>S_S>GJM_X0q_*3){ODby(F4V-PM?N*`s-N9DcyZk
zIan76RBrS5>G-38om%0uwMI)ix>xyRm^td#e?jWs>lxXS&cM?_$05x6U~w3$8}@~C
ziV^v#j9?kMJr*i;s1)h+1da7Ytcp;lw%g_ZQ3JNe)gZUQK|ADJ2%}9?53y<~{<n-r
zF-{$T=YJ${m?0^7L(KGbp)hXf6f_~MMoC{sx-p^fPY7oO!>S{oNkka=#9-I6;3kB@
zn`;6MO^dJ+bzwabq#<Pp;|qv#o2W$iEre;la}gdD#A}v=j|pMS9wSc!|4k_DNBFZ~
z7 at t^=DKG at XQEuR=mkIRIxJO&SBTU<z4dL5Dc<5kS4#F(*nh*M22va$CBTUPVv at G;t
z9S8g6%}d85n%A3tf>-Me+he%tINiE_*)6;>$+?Z&pXl1*Qch90mCoT)I1!f6y-rfv
zdOh=&wk9L>t}B1>yYr$sf?jgAopjgo(Mb8Gd}w{8ycg8dg8TW|=tW?qI7Jos0O2#C
za5J5^V4gzHbHM_B-qVL}cOSYV*fCGE<(k!{`0^1#2{^NQgvXA$Sxe4awdFj%yL>~n
zfV;q)IZ2xVk6Av}zWH9<zFmNOR|}rSx)b{w82xV#?SULROj`nnZ~M#bK|BQg5P2s7
zbGfrG<|V)SmBi=j$|JD%q9r>HDbVe2hV<V;;$pk#o@&oOL{HX+${N|-@{Wm%#Z}^N
zOWVhL{LSW#$dMBdSzQ(B$cITlSUhcAU!gnEdQ!2m!PBqP?MZOqPPitrDW0xs{uyUY
ze<r}&N&M7`z=hC^^d2$Gn`#mR0ndNL2-k2mPN(u2gmL_T<h^-(R7LhTT)n0{YXe~s
zfpj1&B7_7`qQ-F3Gz|>`%^o at -BrE}U99&RTZifp52s;LJ5E_>l*NK|R5XG?rDghOB
z#&$;o<1jFzGf`AX8 at r$Hse8Nc4P<nF&-gsg=l#5Ybl*Bvbxv)kPF0<%I_0X`Qh(Xe
z^YlW%?(E2m6^D0zvrc&D&zMJ)`N}21XUDxIgKrVaGor;O4i>Gj>U-|np?UW``Mwy~
zm4j}+J7Cq6;a24Oo(J<_#aYjGGd*i}!XRN8LT|)wWJ%7855-Gj#bHd}ANy`qt--r1
zz6<QZ+d~6u95}h1fOFGvu7N0dCw7G9$FP8KBxuv5vo^+0+}`8iOWICJLhj8oQd0xW
z(6av9iWXh%IB~vME<TdF8S}aUm~W=hd=r`qoPlUN)s{}XIT#h=-(<(MB{+yYUV>J{
ze#6e$(CJ}KCfc2h`Jx)-Me6{SbDe?07ZuG#XDf7Pv{W#&dE*DfbK<05qsl?hze6{!
z at RR+aY)U=Y3EZ^~zTmL+X4;p2Q<vNK{VxTZrTcmzckr9ap4nE?gKQw}_M%GM6l~7D
zdC|IKo#Da`8(C7{S_U06EQBnofR6bGq<aWD=JRd)a<5&qj<nv3Hq?)%J(fl5F;|Z(
zn6^3(yqHY(PpD158AJS9p_2xIOLv5DrfddYp1_zbilwlRXo)u;p`Q1THlJt|VS&fZ
z;ttb at ZLxTnwG(NP=48>C9e<$8?X}dJFsCSiJ+prJPiW^`8Z^MS)ZZ1mhqiKK%}n%~
z67cQ$DK3)DQSBAsfR2U6#Da}G58<q(nP$WVYvINV0?5muyoV>&=H7FDffVq$1;ei7
zDr42sKo`ttU(Yc<q!(VaShS}iQZO at rV@Qr^i2k^p<d5w%X~<4|D{IJj4!ZLHc+!?3
z|9WtrxC3^Rn3=TI;c?(XXwfm=Lv!uhA_<`PGRMGpLUyT(T6B!g2%WZ`$~Yb8>lgm(
zw&iac{*rMfUgccdY4^F;&)~I}5(^W4W4F}eCYVL%b5t~LJB>P^o8F>itk($(>=p+s
zcnFU_`I at BvgDZ7A(>?iZJwIDCC4fC%$G5(-<=?FmPtbTM253a|^@oJ8?LUarAmbDI
z(4Owp4}UUzt2?Xz&M<j9-dl)7o+VA;)cr2Ig)HppcHJY`{FXW$%^#rcZNv>#0TwWp
z*aku8J`&bf(K3VIuQMZ at ED!d=`!mB=r<bubjJ-NmGaNjgn}?ez_{|MLTQYlQUQ%nX
z+?1Ig<t2TO8<jIZ$V>X}CVbz=_<IS)-}pS!o|EuHoW+00OFH`&zV$d&mNKm_cki?p
zJ^iefIz5#MsTu3_br_YHMfuv5uTZb|lSW#s>B7UsdcD!^^SIFU$@Y)WgS!xsNSZhh
zxr>Ny%mHxcPGqj=yDCqLhY?<qcOULo7<T#nl2lUHS2X*vOZ|E$(M&d6UOSFi;@J>p
z{1^*utM7&7*0ESIkAcMCdoY71EZl}OtrnbVEzvO#!--a$O07(297$aK4J;<UHBv0$
zr&{+$PqpqFL1$XAV}moT`@VN9tK=tIQO{%izjvft5^$2$>A$0D3QkAiyr}2Z`n at f_
zZ&!UIohw(YoMK*PP88S0PPCS+JWOX#+wH{!WXWijuqq#e^Q8i`qv+qSRk+W44)aqq
zkq%#)iG)AGe75&LZjwY)Y~n(rU|5KnuPgPh_gl-deUb3qfMt_zTRct+W-K(87=ng{
z86`Z<LOshwTx+GTGRr$Y;p9Tom-;dcdH5O-MlBe?m*T>%*Q|%~CV7`jY?pK2b+5<$
z+3bJHj}r=Fpk|tfF|1Mj-$NpF@>+T&Q_u9ymil6?X~EAbrQ<(7nCZ3jzFN$$9xu_m
z0~Y+OM-p5)=&z7g;8R^HzSz~Ocw!6mAgSOby^)C`askbwDAt0bC;c7mzX94}j1%tj
zlY3yiN)h8}EjD!!TnYFkO8skLd01Juf-}0`+qM<^Lft$bx(n-LkNBQ?^5ZaUGmL}Z
zw>W9`yQ+7}riq5|zv^$TyLHC{RnOtYA$#~kKvQ;1uDY`<oeAO1^;7Dww{M5eNe7*i
zk91DMKqC$`?4UumYizVn28n|&LI$#KkVC=_LscL6S-2DuF2FD<82Iuz2;DLJD}Ep3
zPP*r#-O!JFUd>Ip=OcwPc5`mxtAaJ>kM~EsPtnUG5zLU3)Eqm^+i=nJG%TiwK}bDE
zEFWX4blb9Mj+ClnV~`eEqPoNgxj-ilnl1yRhpnkZ2W*)&RC;Xs8Fl&O=SVL}!0yP8
zMjPIEWBM5mTZ<*tw(_nzfvjCQ(iiej$go5QyUDu0lD at DmS{cIb&vlJTzMFY(j4QBh
z#29 at jj5lQ{^fvxqg;csr_8O;@UgLDxB4=UUb2M_Y-f7cy!W&q)uj;gQvcdB2w5_)H
zjDFv at zF>&%pnfyneZKjl9K%ELd`$QeeFK!RGRHY#ghe72UN_~mw+QGq{G1YQ<%)tt
zZ(u+l%euKbRg~1*ovBbM*_aI at s!f`28;zAu8UA6Z0snfbL=^Bf;Ae#PYFX~ECBv}>
z8-!Ua&TKCk4&By5oCd8B8?n=3%<I3Z0`l_j&=&Aj=&DU5wYy`DwQ5uK(x#NgWRfzg
zaMA&zB&&rU*mEj49sj3;p3Is4_a!EHQqAw-TnHaUyCFo@|KN-o>Cc)HtF!PHp_Nv2
zSjnA-M)z{}`8&TQy-zjHE-83Js<R-=#ws)Igz7BJHX7QtNJDeeaHf^|C6fl=9~wLS
z^H)I7bBt1dF)aukO!sT(1rRZ<GK2b6tS at b8W7K97@wy<@aCkP=aQHpBhQk54x2rWA
zo_28!^Z0kPoA*b4dJK{<n$!2NYB*2fJe@^!=Q2DOzsdM5B7fXQ{85SD3);X<O+7MA
z-c(pO at 4fglz;EF;cuHn}?`-faKVckzWfeMK481PhkO<QF1a1}Z{+4w=G{U@=jq-gE
zXc-Jx-M`;x$?Rs=SKUG{vhDC4=^5yyv=&aQ%5$3_PDLo~avr)myc78*?w#LzRc6<J
z+~7WUbRtTzgI-d?tf<+2?g(jQnJa}cV+p&O`{JY;r<9Mop(1}HtrPlUhJ&Rh1g><S
zd;6Neh+Om0t0o&+mUnR^Gk0#uUtMV!u;(p4fZXR+=o+r6=>MMCV#i^szR(c==sx$Z
zJ9E*GUmZ)mP^<HvQ#7kuo%gOK{`>JOK4UwBeA!`NbyWd&TtvEyhjl;d{QU8z+*@zC
z8ncm}v`&Xj3&^B%OYplLKkQNxf5YzY`EFft`vJNmcHK5x6@!)oGe12vv5P;3#LI$2
z#EGNDAG<~c*s4_xG*-a+rv%NVzcJ6`Kj^jBcBYe~dtoWgg0(8k!<v1xchK{3E<*<F
zBBz9dCg>!%%O&3nzg83aQ!Ml+B{WwP+7=6KQ$nwy{Z^a>Ou6?elnm?tILu_G+9a$O
zMIUAwaRu2Gw}V5^yWfYLwc{I<GWmYAO}EP(d7~G~e#p)A>G);1BS$flJ$EPEJ at LaG
zr5_y<!@TX>J6|<*R`$5`uu6yd%%2{`ZUc>_I_!1f6bItGE8)#8NXIzL3ov_J8z-4K
zY$`}kN_C%K6M=-0UmZ<yViy4Vj0d1oqLY2!(K^+A-j|6oV6C6<8gv^iaHIYVIVjI^
z+22rs^Gc&+w+Z at ysgseK8TZ)+A?3bE;TTfvEBhs4&wtGuG7X)GxRu1CyXNBeRV*Jx
z=*{2-HjUP+T=vC3`%G^9vrhvL>uCMA$j6%sS6?R6vTTCitMaV7qFZj-^ylbI!0q?T
zq1Jm4+Mu`(!2L(QFN7UK=*{U(J?w14isK7GOGufyudf02Jfv|DyCYqdv^qK2-E<pZ
zT4z>%4ZhPmvsFU~#*Gv948{QP7fxX*wK)Lkk!EHG(xbgsjV(z2id;83;XnR!lvTF=
zMwZoPko7ugA+&JaVKLOVzjGNA*#2#R&}YdyHf&;dgR38%Q9;dgQgTT4D~%Y*I-xHZ
z8 at 4ud=HG2tm);^#U&C5t&AWVUdJCPfCV2Hn*gfNIX=*_Z7rGW>*WbVzr4!-N(6y32
z2yJfaiGDI)j%V(M_99&p{0+z8UH~14J^Iol>C?xNb_r!Rv_TVOM~l;3^t(`Jq^K{j
zt-8s5E^q~{5_GKI9JTxxLOj+YE=K8LJ<uKb9;2wij{PO9Uw_)o_X(^R8Lr8 at qvbSq
zOin|mOZM(;d|n4#AX|#jL?;>X4}Ql#e*=ofK)7-LWz}YU&G>Fq=528jb{o`j2ItP8
zP4Zfn(z at pZ+H?Q#a^-Fam$prX$U}3b{FWY8FfGkzNINNyl$teL_lMl)UQHqCi at Eew
zAJICvnW(+<C-~`*&pT at KsW&ZL+=Q2s*qt7{^vB_OO?0yI9>8V}&u+>9yaI3>ho?04
zf;L2cKd1-0RWxI~Gzkk}k#2#>7+Fi_wuJ=-BTlD8KGgI7UHreb%}4V*<l`Wf2k!jQ
zZ+oyt+587O`)g#Z6I-f#@Nk at e6f`te at c9U-S&G9;M<cPW1>P%}fy*&Lw>A!X{0&%b
zO02UR`>{^dmTGsU5jru}S;r3GG|Cq;4%tfq|8&yZ*nyJ+Pa8TfWe4!OK_@*E5B&CU
z=cVES*iC#7`fz_VR%0q=1UB8f6bq^o*b1KZCL|XK`2Nh#_D-M^`@uLK2bA&svl91D
zl{&=w(>umY^Oc1G>~yX90kg)QIC3x&uWn*by=}hFx7*v|^YwGL-Ze&S4q)FYjrIo1
zb9-;xPC6dU>01|W#7?c*ewnZ=V8LA~SR)Q%O=0NjZXGzxc}*WyQL^K+Z3{)Az6|?~
zc6aNIJE=F>ZF#^6j__J6!&$1>g&D=pg5Qr-IF=AbF_qPcorK5XvbtOEToO5q(@*0l
z-&jB3EHm=`0JK=f$uF>8VtnnG+H!Ym=gnkw{~N=%`g)-ze?PE?8B_gCAM6F(%i80*
zw#3i#><|x$Rt5LA_PD8AFuPvUK&dg`mWEFF-%MrAdl3JT11&hMOnWlyo;k#;_)b#3
z6P2%9`HsWwsi9jwIcjnZ3`{M6Wq7ob4R4ZkYh&0wPulV+MrC%7!>^;)T@>gVzmK09
zpGl{(iTiSUZyh_sF5=waR at cE!xrV;m%Sy at _PCVe<*>YB}0Iy4=Z5<ozk$WrtyUwt&
zEa{!bPPttuo}SG>oJNeEdO2pwR=j_Om at cIENfX}LK)x9Ag()>;VIOzv*KY<eLf+lt
z@~q^qW+$_cz#Ch~y6^<z3|J@*;;ovkE<hqd;gs+w;FO at e`OsmG$sN)6{@l4+J`wS9
z%-bf{Y*3%Jp6we-`&K%#pq{z2R(QO`;%3uz!lIr=VY=TkgVd!@?7S>8DjLU`6$j0x
zn@#%{wg1;&*3<2v)_-<^tvms{O!Kh=$nJiWr!{HICvTZt<B*O6Rz+i}?CTHgciS3C
zD(THmJ?78p*lV&FEZl8(Glo?d_|@#h&YT=(vT!$rVK&%=+o}G5vr7QG$+eJCHt47k
zQs%-54ZQA&uFv6O7aSBz%nzoZ25sb)1PVuNX#V9;=&%?YPh5e$xz<l^#cj>rTRu60
zw_1^NSoH5)B3_G7yVxu?B77e0sA>7eb{o6bR?6-}uZ+f-)Ips45oe_)&NUsx5fR6S
zI0l?jcvKQ`o45SiRZ7i|<h4Gs)`a%yLA!9 at f<KqHU}ug^cS7#00>31pXuqjq;7lF3
zI<YZnRe8hsm&b=wcDMu`-fG8sQh>5Pn1Hu{$2W}M at p;%Fu*A=?&Sh~<tY*j8Qp=t}
z$rCX;kED6l{yOw4HoXgWzg3#!ULMyW&2bImE}}V((|q+}n$ym-`OtJZN4j9vSo)xW
zO=CS?H#01vE7N!Ot#HySoW>s-t=N;eGHCRh1Y588s`%r3=!JQdurFqt&C*0rKi}+r
zV*eAZ at 93oyH0SL1I_z4D;ZYbDjlzOnxqy6dV?62gK`pJ)ZY3)r{YX|n(q at n*LZ{zY
zi~E$I)4$g6jqaF9a^a1-4Z%2R0={b at X;MUfgSFo-#7hV6i&WojtXlNi&GBA)99Hh8
z<Vw;X)CUtQAxnb>{HFtcFKBePK8-UoPS*B!lCjTsBgqlCqRsw9;BdAWutT%zZuNxh
z2Aqg&^|aw@!Z&>C^qKf-^k2^*NPP>|sfIjr+LsvlS|>pgl<vg3Dg|2VYox|Zb6V5M
zz-d?of&Y%oZfT!aHd4sW+TdCK4lj+7N09yyO1~C!0NmwhuJ%<6dAFq5#JHM2)ZF>x
z_wLr&VgGMJi2Kq2%x6yH6b$p&HjDt=2e>9^n_Fx5gEv{VAmwiwd@}!x(arAKjX6N;
z at BYfAVP~iPr|IIp&S~PMf9ekRj885R1G}BoG-F8sogb=~HDV5fkw2kjGirLZyY<C-
z2|YG<=>3s{2Aq{LxLfOzT5#T?Z5ux?6M4Bn6f<XC{gyK;j9a8mn;vrNk^$j=;b2;d
zn|bK`aq9sKow8|4&U9V<=eLq#u?9J_BH&!lZz+c_FGQ(J_O0>R-I13wkC}4!E>2u%
zh<n^qCtAd2W)c&3#CiPG0`bEtbq*7by`&3%2F|2)bHke`Y4;|>Y8LE*@w9tWo6#U9
z6}4os)8`QS$AD44O3VmihSgBl^keXA;}|hXyuoA8e`4$^>RCViiHZu`#ECTE#B9@*
zp)6+5pQs<;Ze7yJXcP^YjS4lx*$y!ScB&KUJVm7*wRODncCoMRQ4u<S7utgR{W;To
z^|3(DyyUCjcDE)yOu0Z?VXWCKRoW^nc)_DoLTQsm<e9I28+!$ebTml!##pTk5UxO}
z)}UUX>!Xu0uuRMl`(4!QASD*+4R!gJn@#x%>Als|*WLOOdI at rU1`<0i)Ezr5k(Uk!
zX+3qVyLIO&q+)KwjPRvKv|!|=T0WbIL`F$goM)fmj_hB67Mkzt%l7Hdz&2b7;@re$
zl%J_vM=gp|@AgaZJ`>sthqStZtEM#8>OHCDpSW8;?CkaHO)kHYVaLR;W5?_$bBcg>
zv7kTN=wwFgb+v2*zLx811=JlZ9QXxGtzNnuX-Jq4-B+uJ)yc?9qSOrNE|Nu_yNwIP
zl+}9dF6iGty#43FMa=VvXhFOTiF$bJ!>6P;{yj-~BTk|kq1 at sfDK_P{yfs(9MdRN~
zm57gC_3$yor|(gzIhe=k-IICe)$bloMO(e=ZcRKKYXPEWQ0jLQr!git5V77ttU4w2
zCzRA5RXCn-^n}AxA0A76l4PKM`S4~bj(;~ujW}<3B4`j#iJBCvTB*gSbUWOKYRI`1
zwdNO+X_W at vc=Eaz1If at UUtU|zMwT}RGoV2r|A()8QG`}Ggtl(@FqkOUwSfISs^igT
zsE&i(-oVW>?DyC~FR>O}+i(;s_rA5|BH9?Y2&~-iAmaALC>v>b6>{@rn*$>$Y!<s)
z8&->fP!`n|`=d{gYZvvM5#`azuN>=#x#VoTt6}TH5bJ3%5HO2z*n at SUHOr8vp4TlE
zEG;@}<AzP}o5y)!sZa<WB)@X_&2+c!|HpMD7$)WTi86mS+(~hGzLo`36}(Oo&M+a@
ztw|e{Sf!d0%>ku1sv6atQoT;bS!$B?KfN04?i;M6(Um<`e#Tp)$KJLLwYmQXg<5Wl
zP8`hByb5)35M`kkk|W{Yz-?|jXxz at s*F7-$ix{``7e<P_zfK+%{Bxjd8}9P!Pe|A0
z^=@O1P8G`};kgaZt$S|0G|y(oE`Xi*>EQExgy}-_87w!Vv2lZ(Vu!$`i-I&(9Quw+
z?NXd6t50k4<>zkP^nny`1`I<^zInQrZ;)eq)-q-kS)dDEHcBo3TylACC!3X at o^Fb#
z89rv(Cm_Fc)Ek>Zbj~pNCCYRH`Z<dY0<i%va)|UIN9Tsu8l2Ju1xm-eAd}V%#t9x9
zS&ooO=~T*!cz(iKCkdfpp<cC(--0_vVqYT9)V7eMJNDve*574^aa*ncy*YI94>WAw
z-vw6AE&I3A+ir(0A!s=uck9?Upv5O`8jhIZJGkmDug%iu)Mck}Cq|zNYrTE_`N&N(
z at +JiBUYi|$LXVhVAlNPDwg+wge8g+UYavk_*vyEzOKNaB0_Rn6u5C at 4Yq`xrCp%a6
zsEb362bW>zjpk7GadiXLH%sf|{8yGi%GX>;U%ak$CC2Bc{Mm?UtI76fL;G)$zf1WS
zd#}ygOnGKpeKd#xVBp<5F;Ew$P^X(6xCeFcLDZu4xIN}?sE at -~MY{Fwxk)R at HVan5
zq^qqN6}0-Vq&ICS2lV!h{9TSO=8#sSO)sJ(gHdW at D%=Fat(V=2n^7{01Gj`yZHb$W
z_(|gmY+Io9M~KB{G}?5~_9MP76)u8gT-l9UU(WpvB3{p9q62ULp)|eySD`eznyZL2
zcH at +m(LnD7;mk9>R3jd1O?D<~0NM<*7dtOlEyPirGDsg-3+1tOJT|Y3F8(~^(uf*0
z*5pyE#A?M at k2TVY5yvr(umqQF3G`1Hm=pW1KuQU9aneAgR!yi?+$0Yzb%$;{hqxuE
zCoAHVU<WxJ<DOp{D7rCAe;na|i^A^EZ?F!3T+y1u;gwzXhWlLo?O1cj81oVPU8PkL
zi8K8!)Q(W&^1B?iHcO2Q8Yg8Rnz*4J=Nwjyq7%6aPB(X}6BayISVFK;F5?5wO8BT*
zPKUJ4po2Ez`_;sMc4(t|ujoy5LMGU?aN(A3=(b8pkZzUwA!nZeT3u&GJsFkKX8|K=
z#SCzhS at Fr{KBF~0!@18ajn4?~BWQd^a-Z26pDVb}aE;HE+^0a}GYUSvSIngR#?lwC
z=RTV6wvVRX-q_ban%cf*^aWgD=G+2{(^0PBwM0EwSCbE!)SKQCX?PgEcqakA5qi%m
zkceA at xpY&|X{{eqH-=tds2_v2Fk(j??<_&vjIZL>le<pf?-tL(DH>>4Chy|9fTR^U
z*xP5cl0 at xY;8uOfh4jr+17`b6NiMvg6 at 7*8D@(&h^7)J6BSUQ~qv3ep2I0;gbWg8g
zW9)tkm!@Vr?Z<?saCzE$#ih_ArXwW*oM4`M$eh)HksB}BrR-k^R|--f4FO){EV6JP
zW)S5trv=pE?}UF{FK~~pzSn-EXPG&R-1{Z!p_B^FCLz7!8T+9Rg}<+^muI_Kpk7?x
z3$1r4-RFto|9hMZ;zw`XT#!bCP9iCyYw$(y{ZI;^uZb^O)$;ErK1N>addc*0X5qiA
z2htkX_i8YPS2pk(pqqct=^D&gB5LD!#!I^Jt1tQLio`hLmU_Iiu;Nmx59F~Z{3>9S
zNVHO1vN!i@=dVHUvPR$3BzeBSe7~NLjOBH?uH`sIg1W<9DWm66v?A4`+KTbG36!C&
zU*3v5{>637+x;R8NFKT+)j^Ah17&{Xxv}mq|8Lu&eK|4Kqny$SrKG*&7NVAkw$gvm
zLR5cpj-!1w>m|H-fF3lvVI5qtKFZ(DBp(}k5D%04CykJZsdsfler7k6H|R;iH=spA
zQ=;u5kCSq1c$is`dlY)Do#Z$4o_&b#_U|F?@fg^0ah$kV>I?o!gYRC&_g<+l`5z}+
zf{c2*v5W2jR|=$x(!+1U2&;QQ_Ko&?)d$i=i8mt_PnH2Z4lt>H6}Lz^r2Y<Al+!mW
zGRJ7pl|z%8G=u3PIMV at ZUa5efQHMNhR^Dn8Sh*2nXcFT36e>6euM?@45=E4}FTJ?|
zeF08ClLW0#n`|&M%$>(b11B4d=P+7%+ at V{h<(acb<NXKPNtgt90_KV3fN5kt0 at wlg
zddVpb1iT#Z)qs~sV>!G6 at NmF*n}FjJJQ(mw;A1q at nF03&d_V99C~!}}_bK5C2=5H|
zUYWj*V4UY_TcL#O0OO{8+dWD+;G08$?^eQZ1^g}G<w`ige+PV5?#<hpqzt?e&)Dbi
zYkn?U<MRc4K74Mt)c;#uC<*TOfN>`%_79~3Itu6xsh^k++ at pXG0=`vBkHIeiz6Ir_
z(LRFk7XaT3zKO<v3h+(eP|8Q4ISt+X2;dt*Jza_a5a1hV7AfH^0nFQ(RS@$%qebXo
z#xBPW4QW^H at Espa#{ZaD*bPcpXZX4?^B9wtmpvLd#h~jUIP*%tp_`%c2JQYA(Vn28
zJ>de{xf<FNr3^{PySA+yw6j2a62X~Q01n;UgVWBqh;}dRHKpKe6y^K63uq at RVU+Jl
zQh&(_+Sh}&9<+~$132yL-JzSXe~)}$MB7RBi=uUM0c~fqCf}2!emvhx+|2ntXfH>d
zIFauqpnZVT?ss9nodFH)Ded#^d_hB->US*iErND6Xs;j`v_;Uy4Kn1r??tq?{S0lX
z9qkOs0op4;dpV~K7_?V{c8O9ajNet;KwN at a%qNY!b3Oy)&C&Ic?8JLI6XK6o>fnCF
znu<6c>T~1=diNtdN9x~>h7hB{`Iple0Q(HoM)xT+GC2+SfyRBH(M{^xjz*st4LKk2
zh+|apaW800Lq4GK&?PAOxYr%J at jI!Xmd2PiP6O|@j%RGI+?RBqb7M2LA at Z_9rZa{#
zsR>HEu0Y(i3Kb{S$e52W$O!|5SCyRH0}9g-=P)QhHt`y{2jRbq)rd^v4>1~YjS!88
zm0aAd(0H8Fkh$w_gl~-1h)m;w7!A2bh{g&fA829g4CG at KXkf*_^8u-P<BhQzk!dW8
z(NOa-N6E)s3XM`uL(a!tpyB4+V!x0R$4pXs;AOxoXwT(iMk`^LB5Y3XwInqqp|TV?
z9FA2P_=<gw`^2FeFQqVoD7^Y(_~0%YR>D2nORzEB6?)L!SZ4)OBuG6~hK;dkQkxx1
zZN8g1epFKXf>OKTOC_~0cxqTv-SBC<vY`i1%LDHVr6;8!onl@#)SnXeo)U($7}j}^
zJS5d{GRE<GD2X8O^PQmloTeNq-4`{zw at 4|6O8GGj<+%#wJ3x6?C{>|+2Ppe;Z(i90
z)*zPBSgF>6V>Mfeo{O7x;NbaGZshA$#3%%XyQBdezD0p=1wHBkH!JXB8kqp!q`>p2
zw*bCTfoF>YMHk>36nIK>BtvO2I^Hk}ZFm%M#sR(s at G!s;@F7W at n*k4uj%0vu0*rb^
z`~jj1 at Qr}GQ+!GT at C|@5x8VAa5wr_$b;atw3$GzrZV}(2?!S5+F(j0c*3AUJ26(lb
z<^QC>hX6wdnEyS#WHXZD90dF|;ELcdsV}~<6!K3hZ7^6veIH_fprQT<;A0x<j{<%J
zR36h%|0CeX6}S=M^~4X95_mf+TAuu;)$-_ymDmBq`Xew%K2Tm?1^g=D2Nakn2LMC2
zZf#WjUIDxs at IjOZEh%$q{=FLN!!*=CMeJKN)IS4UrlEcuFvfrD=Njs>0Dqyt2M|8F
z?Gdz at N1h#APwkHpy>1 at b4<q{Z)c%^$?0TBztw66+Mxg7{>PAD#n6P(KirA<Z8c#Sj
z#*^!9imW#AP%96OjTG1GIBvX*yCj5Ai~$@MW5AMcqjH{bm;8f=%CZcz$R&T_xJ<$Q
z455(P92Zi1$@>Z}G at gLo=AkipyyW$ExM&5Ev>X?bc1e9Z+~4ugm<(O=L{#c=%CNi@
zm3npaNa`)w8I at B!e2Xfl5Dq!DWG%@So)%=w5|QKqhaeA at +}*w}F1al_t3+F%FD|(r
zb+74*OG at ROvZDw`UtBV$ZnQkh1dP78WGauJ&gr8sE^z}sBFQjjR7*&DYi2=9uEHLz
z9s32PILX#yXQe`Y4oTc4ms4JZ5k>=W<^aaX1eX^*eSXk#%5>VIK;x=DLue}Py-P<N
z*k_eqb96E4e(S4zO~BsUPEkBb+S`N4{C0R8&Ukgl?MDk<;Nvd66im{F#4VxokQB%8
zWe)49hrYKLQgRXhqLj<rp~asA9;d*+0sH~r at d|t!;A4PkK1}hUVO;zMrGL0x`f<i+
z`UbIm`j&;!^o`BXQJMYga at ZxfcMSdMx>dfHlFHI`k?`7=HolzX8ith at z1F>lY!vR_
zh#C;2fj+zB3MC at d-)+)+7DggPOPQ`{0n;5GK6ySXrIHy-bZ7%!CP5fcVny6Lgb at Pz
zid?FykKl8YFv3ngyj<L8L9|p=EeJ1i4YFb964W}eBp3ty0VBs|q)?)yaHpJtI8I5y
zsiq)~<MggkQ&4<{%P9b&6fVCYh3|sJ(9Y5=&hEyg3|x=cF3}~7Xr>aR3L^qa2}BpC
zpCF9zD<x2TXnv1&0d(FSD*LfLeci|)ofJjwFi1<HEh)8Ac1q1VtW}_P%8sjfSA1xG
z&)b~xUiS6{w1>~o`IL1t&TPO+a$3v&Bq3{)KDK&J4yU0718s|NBb-KIpR7Yns%<dm
z_6_f#*Ux9*MR at 2M*5o?E4>XuvFkR&u7GWN|Pvt?#42K~i<ZpF^XN4CxtT|xLoffWg
z^+KElh-2Fv5vF%5k0eKi9awW94q-dX5P!zBRT22C1-$D(96`d=2ON=Z<i}$@7)j=M
zfa`W6)<Y^*J;A at N+pWc_-_2v~j$+mCKA=OahgGZtKIDGSD>|OrY~=R2 at ZOhvFXJ{~
zcyG8^SP)+xzN^94_E+r64aDAdsO&mu4A7H8SWA?-TFSW_Yxpt&R@=xw4(_X4Byyt#
zAn(dXw5(Pj=)uc|kj|uKjq4+u#dL_-jV at 9D-8$o6Sc%EN@?l5cVw@%FzF+HVvKhJd
zTnOD}Tq7ppdYaB1T69JdM9ham7P$Wcokfbv51ZO{ysMTLx`f;CpmeiX3(`hvi{3+=
zWY^vZ<2w*DXD~w~H$ME3v5Vm*NuV|ir{HAsP0*yw!b#`f%z#fB;&9*J<n|2j04=OA
z6lzZqHQa+miolo&jGH`<C*oWg+Nr<EfxQhq?t;M=n7`H1Y!^y&AHZ(FK+t|yp?n|D
z=e<;x80BS~BSblzCor?5P~EMi8VezcRSHGSIC#lt5XBg^o7<J_X2gG3p|q at B$TEcN
zR4COdl!jeQsa<)9+8!-6;c>Yxga??Bw}wA;yMZY0iq#};k6f6$SZRpfUhDzQLMtt!
z7K<DcmX%AX%RnPO{Gh~e4`$$5aKplrGKZYi!~I#vOk8%>0QUzW>@2};gqv#k6Apo6
z7apN9aR at xS@ZfjWRPbL{@L?)(Ah at q9xbXY9RPbObxGoi3N4rtbo{=W4r0uU4$%Fk|
z9#mW)57zxh@?ibX$b$`<K1%YSvO{^WG1{{gd9X>v;__f~hw at -c6ibl@TU9JB54LqE
z54LwC4;DJ{ZYS!R<iWx`MK(~~<|wiO@?ha`MK++<E*zqj4Ga5gWy8Wg|6|#3hbkKu
ze2UXJloO<~09Ls#kPWa0L!qi{Sa67V at FLl;30!xJMmF4{aQ5x(`pNC!(F(0>Sg at O@
zwUZ6EbSN8c0p?~c&31i>=&oxo8y4Kk^Qn~$w|Fj;4McT|mTIgw5ykcGWy1pK|1`bt
z)^;Vk74f$!l<sI3atA^-w3iJFU}fe)O6|%+)V67<btoH%a%EID%s+QA%~)xO-gZSc
z+|f=p+yU9JQI-vL(2LD~Uy%)v6Z4NLvH@~pev={_ASdP at 3|Y7=fSj0rKr1Ka|6VI6
z=0Eo<$cX@#6Zc*qC+_=?<i!0yBPUjB`Yy={u|qlGi}rX$PL!)yTu!X&P)<luEJaSN
zR<XF8Sks}LSlf}Dn4hJ}iTQ(7IWa#&l at s&(sB&U{53QV--$^Sc=Ewh!<%DJqQF>Uy
z3__L at rLdE5ft(;aVD02Y>F<aiFOn13eK9Q6$cd#2m*3g0&)f-qy;mzIN^!^X0y(j?
zLpiY&n5(oj+x07=dtZAwQCi6Jsg)B;FOm~PRnk(8^(>-ze|tGmI-DrR<`B2FE7@&`
zzgnSmSG$nA5VEqpoG8V6F&9#5S019aMoX<jIYE at gsGKOF`QHV(i<O4xtySd2UG3z=
zU62z#RZf%yR5?-dk}4-k>Qp&V@|-FsN@}!nqGX>|PLw?Kzab~|Wcir(-e8=?z at Gg^
zH at OR~$YJdwR8mEK13OR{PfNB?- at wkCQ^LBwWD)5JLS~u;mCWNiNj^H&4XEH7oCo4M
z03RS){||Sct92-G5CUJ9W~XZvVDtwu|G5!TDPpeye5InZSVQ|`)t|y=sN%CW=957<
zh`*k+93^<YmTN)Q$HG$;pA9je1mqrT2%4>xn5d><Bf=2OR_LrDI`dl9ltmY%Jg-Gf
zS at HRsHsyKEYRXFZhib}-&oS70UPP~Ct;q4^lO;dhfI94S>iS6o>*j?Z{pX!%@zr4-
zLo1wlpHi*EA2XVHL8^7Q(E{_{A&CSxW;FATkUXlJhw?uO=pbHMq>%1#AHX~3a>(<5
ze&13d(}fHe4tO1L8)8B$F>e*sLESuQKHT?#+n{j^Va+n{E-3?T+nq+SdAE_SH)Q1Q
z8$;MLL44?W<}IR>IX1L9^NKUO_4(Ab6!+tnt;7BYdrBPVu#3w=I(;d-Od2SR=wYp!
zN9*Ky?inN4=#U-~&H>0FjL5M9f<6e)HMm2Kw0JvQQ8ya<&6ksIE!6!u+8TN5fjE=!
zhWx;gp>Ez;tnugdRa)YCj&mvP-?HarecZfMvUKu0v$K}XtouUFEo1_8So3gBuFt39
z0EcY|PDti#U#$!2gps?f(m={#@p(CSGe(M|0ewTc!@7Uuexz6YcQuE_Uy^+p%3-KG
zoxut9AgPTwZ8 at eM7P?nI^DxQ+Kk6gJZ!4<?@Lus at rN?6iP~52Wc<?~+%Sw+&yBE{=
zkNO2RTE6%>q(N at 9d@=R^=Q)IVX7N5+5&Rry71ybpRs5XFS;aLfXB9u9a#rzfEoT)!
zpmJ96W-VtGSG4D>;v$8!phYa6rE*rWN9C;I2`Xn5W4ArZS;ct at XF;+Q=g1`opMkTA
zv;R}hD(<D_tm3X(&MHpUw40 at 4&MLNRIcx6sTF#pLPc3K7{Tp%Cvmal~S#v-6InJ8<
zrk1njzNY1 at xv!`>oco84Icx4a9dXuNzsgy2A5uAM?hci+=5A6sYi@;>v*!9#&YFuI
zOqH|d-u_FRHFvGbS#y0VXU$!qa at O2CRL+`vtCq9oE>Ssa?tCq0%`I%tS#yUeoCQtm
z+{;wXn%ht2Eb9And#ju^x4X(&b2}-V1zwt)pyjN&MuoGw6)f{LBjn%8tfGHuIjiWj
zma~dZsO?ttX~&#ZbXLn*MNL}HDr(enR?$nuS<gIkF=rJ$`*WOCv`5QXMLV^eRkTHu
z!}T3=R?#CJaaPeXm9vU&RynI^vC3IRr7C9?6>2%FXokvJMU%ChRW$CGII9RZU8AF6
z(F~QdiYBX^RWx4ZtRjb&vx=@!IjiUjEoT*Fw&$!Oy~0_yyF-O-DrXh`0B%CbXjCd}
zQ8}yd?<!{%eyPf=Lel?3TFWx4 at IzH*ZT#}*IIHlWma__9)^b*1o!V}N&vndMg>Ps%
ztMIp4&MMrY<*dSu#92?TyqL2J#h>G>LRgx?SmTgK!@?W1oK?6$lf$_kb5`LU9dTBn
zOXaLWXm0puhS9L_YL&AJN2;7vi1QulXjnK<<*dSVEoT+>{3XsR9IA3w;XswM3e#22
zD!f$XtirBZ&MHh+Ijhj3<*Y(od(QF(70$wLkM|vwv%E(XnY9G|hg8n;zM^uL_YbPf
z@;<NSEbmjQ%v$%+&vBOb0WD{FH)%P`yH;&Cudidy@;<2LEHCzV`COaNv%HJ7oaHSc
z&U$Lv#hm4x{&Sq=b!s`wd##qUyjN;+nAI_7dB=CeS>8)j&hmCqIm?@*a+Wtv<t(pG
z%UN?mDre34PRm(yzWyc7^1=pQRA$Wyshl<EJC(EM{8QzuIj6OpHRpuNS#v(sa at L&p
z+jG{O8ilj4&p781m9ysTRyYeY+&NV$XU*B7a at L&nDre1+w462PK9#dpV<-FHkA`!W
zXgO<6sg|?mc-3~BGoxe9nsbwuv*zS$Icv_<TF#m?f;j8R{uguBoB=<_S#!E;Ictth
z%UN@*njGRLUq>_eIhS_CSp{FIoK<j2<*b5cm9q*yQ8}xC_Wxot_=2}p&MG*p<*b4L
zIE#@44AFk-CU>ad4^-}&Ckf*Ii{bYy<rHUN<dyXfS`k5)%-D8>9TEe8oPc%!Iv}tf
z(oU=zIld6W?5JQ9rzjSmwXicr&jM_gzKGjrxGg}I6m3SI-N<}`gOyldM^JbtnRo%W
zU2v0*R&m$^?FMT(L&Uzp(K8I<k2t%Pa#0M}bG4pEj7;xx{l%fckIO=6ns>RO!%)LW
zgxaJ4?0DNcqMec>_RT3V>97ZC^xy(oopVN)(UG$B(b)g2&!}7I90mwJ;XMTVgu at 1;
z1X~H)nkuY}v5erQ-lcl760Z6kgKdoEIu*V<XoYq9<tE%0lCgCCjQw?jE3HLynpw)g
z`#gfY=5vQ;pEP!5N$L%XR1-^j2li-eA9C7pE}Q2=kFAmgd!klMF58w5gC^t){_nzn
zy%<bJj^bRMY=Ab1!8oLDk#ROKVIeHr(2W#Uu1_r~*BhB=g$3*k2P;UxUNUY(>CAOH
zf`YB9%J*C0!VM0zS+4us6B}f1Lk at pmB^@;q6b#AKcspCEow2vfI8T>~cEr3_!mY9=
zZo#?!QFNCC-%RB at 7}`!Fx&5Q~jhs<*Bj<@Z{!#o!&M5E^18sAY(OBYJA2i^9hp-^m
zvh5w@<~};N1?sn*IxLo)Hf&lDj4wLN%HWzGG!>oIJqTB6)kmimp3zGsQa_GC at vq>y
z8AyBH9=qA at hh+xb=$RUQQ;W{bBkm`lj$2KL-&^j5q|2DyUG9a at cwoga8~3A-e+%u|
z!KW5JasF)FeKHfj*JR_4T|Siqx6<-uHxtRtIn8b~s;_q;2Y9)Q=U_S9mU_G*BH9&P
zJ5KK>VwX-JJAOFdF47k;?D_GpaepPfc2WID4%ro7+y2Vvy(Q41T|S(P7fagYll>N|
zgX+iq!yPQwQZt;s1=gD3-1i|4!53PQbJg1+9dKiybcV~OV<9K$BTz#o$OXJSFKhSc
zWWD|~oPWMDvwz!1RIjcPEzBdBudB-tvNz~mLsBCA?8vO}y!s5p`Ph|ZXrZw6de^Wv
z`CJJPtE13Qa0?`@>Iv#?fIdaMbl7)HPlJ8Oy}18SpV79u_DE<L*HA5Ww|0LhIyTO_
ziFEJK=0M9at4tXuq2riUqKuQ!am at 0{<0M*m44~<;krJ|O)^#mwFwZ9GhLgUt#<r}*
zeJ+DPiQ2e~W#P7hoz>vR0c<WVC;>#bCoPFa{NTnOswI)y;qegpNCV(!kA{Og$O48f
z3d0Rfh~Wz4j+G}K=`WQsrSV*^*4kYk)3V{T$IK6)9W4!+X#FtrUE)UIWw8=KN8}M3
zP$Qs&R6-^60N|J4zYBiYN94FK at N)${CA|3P&zAZjM>@ROSyq!Rmwx6W#0!t_2qlUo
zR41VDAo?xdsl;tTX7R`+&`B<qv=sKJcHzzi&h-(m>(-!#>~d*w1_EyIENY6$Hvn-T
zkX{j5YOOcRVT2Qlhgu=GdQ${xcBxA{o-X?>$Gu71KjGoGM{kngR>@NCM%<nh7vD>j
z?<ETEwrxGChV98OY7s}D(T8j<*sa4ogpWXJ8*JoV9P%;k!r-pk`27ZcduJ7WaZ8AQ
zm*PulDKe}Fed~Hv4cwD|Di5+IMWOx)QJ(?JzS}I?5WY`afz&?@B~rc4_!_iQ6<VDs
zU8>_>vkw2$x}!W~c0~_PKhJ=(Nk})JboGgoZxANa=?~o|gn#U^$2BYAeO+ni)A*f2
zB^+hJJejvw$94W0)yl<nPUS|O97mn!)WQ1cy;gqrkJrooINk<p>5DetU$nv63)^77
zk+%U_IMxQAQ);m`(1v^wvLU@@{7!^mSFi0Pet#j^g`3`XNq|LavOa1j2ohP0x*?lv
z8aHk(Qyfbo{NYBAmfg7R9CO<>Zs5lJK{MtS$Sq47k~B3*XRRa!Lc`pxUG;n<<)=cX
zf2hn3q3fOgo-#Yc>UR2@%Ipxj-s!K)Js&z<$ieA<l>5A_?VbJy>fJQIBYp4m+P2kg
zW-iG$$dbIpH`x$(>i?o7UsL;LXc)hz1WBIydwCZHIa^E8oBKmbPZvpk%X>xB?;-gO
zH<j&nlHPDrS#F_K4%|46IDHANayT}m`t;J43fw<Zr22Gk3tnD|N_Dz3{>u{m(M}yo
z^x?9MLmNVR%knVh<`O+tF481KCHhE|^Afq7kjRke)4rzC;N(|7xc^4&2)ry-2B?{&
zFTrqsLaoh1Al;|^S#DzvL%Q=<+acLGybJIlsf at RDKiI_!O*<gV`fqe3>ycAkO*Z;Y
zXR_@^QvQ*Bzbw&JiTvM6CZr525K)O9yAKE{{>##x at JPZa_#I1_Uq`C*ThB=Ae<<A*
zIrb at PX;~HK&;pHo%Rq-qGFkS^a(^mbAIEsgW#z9oUP9jeM>Y8?$@;GUjjWH>k(1XE
zjVL7NX_Sf9ms}d|r;Pf`I~?^X7tyvNiGR^p+<qL0jnYbMeL*>Kc44eaN2epT?Iq5K
z#6{1X+A}uuUks=V at 0pnQ!=0qI<FDIGc&X_0XHR<nPN at q``G2{;DE0F5Bl2mgv5QA!
zjE85aexj{3KH5s)uV0}>{!XdJM&=7!<R836y2>pg_Zn&!?9W2JduBxWL#_G$XFcfj
zFU*$C{K9PM=X=ms9k-3bw_o#G!maQq-y-(^xjyvIpKY;!@w{|b^Ac?%>OWXXWA!{`
zd8`j%pMT12Y9E?%W3(leRY~6q`Tf6ZUr_I&NGjsqU%wC0e7NI2bVA#QuKRWS(8-@|
zk-t!j;5DW##2pv*p~){q+b3G{i2bXr+K{jR$tcwP3w`Lsf7OS+?6_@|KJ-_mmi+%$
z`Vj0c{fyN6o06B>XkMair1qgn%K2~15YdMwy`%P_Nk^hB`Tx;A)Y5S~VI2A<+K0f+
zfoR>xJoYP$MBn~wo19hJ<lT;X(WI1U3q|Yx|6wm``GsEe&41O4zU#PklwS0`QcKO6
z*7-j-68+Gw#k8yXbIJ;SnG2TEtK8w)Sf4NZf4!o|D!_^rJ)IHZEBYkOPU6IWDl2-d
zXD6Pfm4UoApLkMP-D5>R at iS$04_)R&y8j2g9%5nLKaup{SoZ<KiLHrEe9cD?PLxe-
zY+D0cQj1}euj^N at e^<UcehXQj&B`==_1gEVD(sc%Tj-UMY=j=F&{gVqDBe){>R>Ev
z1i~6)VI#3eFqQNK9Pf(bum_5BhWu2g4(9`Cl{)chWpz$DeOz9hBTv|Qnz%<<pHn$^
z$?J1kw@=*GQbD*hubWs&`*&EwGKMwn#MLe96$skciTAf`P;~gvQUac)+}}JvXW%AI
zq+5@$m_;@&5=lSGb0d&$0Q;5mgYohj8!@jWALs*!MwVR1kfrYdx=dbe(@DFD{bZdB
zLa at s|u@|_?0*haXqzP)M<X at qoQcjbkEmAe%j#j^*0sok*=U%&_&o_n^y(Ap(C-vW1
z;q4y5Tg)rcam&<<(4-Z8QG3nQZYV46n@&t|*o_Gen<b(6?2l^&TLs?pUXgyrFbg{q
zgt6zgstLj4N_?+7G~pbq*1$$S-3cfB3IC!LAt_-Wu0{Wi0jV}S_qMRSKV~n?doJ5q
zo0wD53zo#Fj-vU6rAg!$|Hv;<j_wgoc${|h9@<Im#{IG0nebbwpS+*R&(XHqBb at L&
zG)Saf*&#U*^C{XRtkTWEi?xkL+!`}hLH7dcr8%aDNv8!~m~cB!p$vPZ*RF8jOr;L_
zr8MWp(!3tAO55#Az8Kq=d;wv1QJQ>T@<l*PeSV&UO_UB`r(oWt<UznochP+0n6j*>
z`~1oixP!aYY#bkn+!1YA=<j&T;)|A5G;Zj76Z$Cq5PUlU_rK*jp_7vnIw?IDTs$E`
z>7nR_6HH1kMjv!XfN_Aze>NV_c|fxEErDz`Ft0Qa_tK%EasLC*9I3CAk6XMrG35SB
z+uyK*CgzmDsI_Mcb4=T%%PF-n$MjTP&eScIN}qT9%(K{sDOqjz1$_H_<@9Es?|ShJ
ztZ|-y{zVb*KD*C9bE(+uF!acP&r|S8fKTU~wLO at x1ommqKktVhUS)j7f_*!Konq~T
z5A0b#9jR>e;jQ+WpSn^9``v8FSTO)Qsc~=#h=CNI{z?o`7-+H~SNiO at CrzPvpNr!k
zmt*~|OMMb-$+98+0VAcS-{bVo|1PdR5%z*hkmqzCEV$;q@{_>xJ)7gRAxYw3#K!IY
zA<JDOV69njpMN$5`Ae^2Ii_6}%Lq|-vgC|meMwON(4j9EoiW&Ok&d5>{Ty@!Zl!S`
z>|4q<L(}UAVsy at gjy?`M5oE=%FDy6qUNMAT<i_`M`o_Zg at vy<|{4(G-bj4+&Ij{Fm
ze)Qj{`+L<Lo^ZVHF}%LMttl_*C%?zWW_s-GDNnX|w>uKSn at I5Q{nKvjl-!*+^e4Pq
z6M?1DZA}Ej-ooPCp)1Saw;X$&s?Em!u-Q0t#UM?pvRh7-yZ>FPc*`LYKB1<n>nEog
zJ|m~9>!(TeT3Ieo+RA<4S at QdZsHp)w4+AxMklk_~xclGbLBtCs;k{}eScZ~^CzO(B
zsCfwg*skOQd8z|6smgAoN`B!9sFwk_w>%@3&p{lczXn5g%lYK)pUo%6k5~&u^NIJr
zcnfLs`9!;XUdB_+(4;E6wfW5WH+*pnwPVwydQ7Pu*qGv}9 at Es$O|cdljFBcD_Vg`M
zGv51zc5#12Fy6RSv|wzuZ)<tSSa)JuOYo;ye7x16ON`ah;ChTE;P_6#_?X}2il5E3
z3l?Y7>#Ry28B$NOa_Dh;pa;s=XVUw5nUlWDy>|QKnPbDBWzI at FiMN&h9E&{^v3sw8
zY~VdAN%<x!U)Ym}KOcQ4Kd8gOR0g>Oq>tWT0Smx^%x*(YK^_}7^*uG<^kuFVYjVN4
zjo0OLmzdCUfE`aU_sz at 8N`(zs>;$hOYrt8-UK(h4u&V|d8BEqdOM-D4$OHSc^s<4S
zQmeDOvO4?AY->SLdcWR|H}uj(`CP`P at ZNgCk5{O!@|UH at MGDgO^J{#7O9Cv6Ft{bx
zl$I3OX&eok35FWUXlL;rM+#1lu$AyhNd-)PE)NUfM2T3CZV|a(7W{^V4YEZAXSTq?
zdsTm(yj#A<kzQm`C^WjVmN12C9Q+zVwNa*MWD1-hq{IGf`noFsCm6F>f^!&K8Qz2U
zNGQz&U?jLk*qI}}fT$8Yk#^RFe%7vlClVa44*yPZ&*ow2>nLnC!sfWL671WGh4c-t
z!DkM9yw1^#N{V`6{ov;%KT5A3<;V-W30{;@-rfJBYbo=GUsYm>Ww0RttYv^j#1kF%
z)0XfbT{g?o at Mi93XR8&;69BIU<<&$PFR>A1W2>>2v4_j}{GNxpx_cPUv7P6b{DKOF
zX}}2*OcZ7jg&-(w5%5l{(8bghD}*fslf8mefxEZD>R?#e_1lWDt#HEzG203%Tb*gJ
zf-$SWR?E1Lja4BO7L8dIVpd_yX;Iue!^H)*M=91$gzQvCqkd7?VSCrg-FCLq)dwde
zU^gK=%VqcDjDr#<(RE42Hjho(1{gbwED3K#+UPx)BN^~XLT(fbt`2TP89p|45IF0A
zvkoy10zT9Z=Ma2$k at ZM~?rQTxC$>lX%Qd7NhmGjOO^HS5mFOWf0+Ib=yuFu(dql_k
z#;oXe;+A!<rJb0VUuXCYU6G4hT1*qO3-`U|0^d~bd-VmrT{+dOh-w?RN`W30wfVS-
zIJZWEPgcB#ER%qP<^o>rf;so_rkd4$@C^6uTSM(XmHH at Jdn&mdwq}bG>LWk at 8dp}F
zhjUC{YuB1J{x!Tuui589uZcuv6-;}DJ?Yx#!V9F4f at z}nNte-M5QS;rnQ2|Srov5d
zWO8I)%*}D4P!vyw**hvGd&lTu at 5q>nTfvke6_a2?g^FpYAXrILc1P3Xkcvq$*)$cC
zO(R%IQ+5OM6P5~J3Q;ickYPi)ifJfEn&nEGvRlEFLsU$H*?TG`dyilxP1zkylS3*d
z#Wbwvm=4sfU|5gGa at R+a!+%T7f*U{AxLOwepdcGLR($XlYy at u*-yy at ytH3X&W<l~~
z8CI#VVHITI`zp-dNB9O6Hf-=87P8T<!;`w!9Nst1m1Xu&uAdyYZyfQ#vy5CyZYMlB
z4te#dr8M{mR_aG~a~!lghoX2g%-&To*}JHpca{2)-3q20qGA$kSf^qd))B0vDZ8U-
za!AFbn5<C6WQ7DPY07S39wk2Dkb*f>h7FR6X^@bnq@*dk6-+rq#Uz*oRZK`*z)G63
zJDMhkR7{F#sN|S3AK>vcL#4t8m1wm}lHd~{!3~v0{1o{<l*3uDH)OZAgpY+k1P_#=
z%}dobCfKlA4l}GKw;Dz;`#{0_fZS>r18mrcFvt<ZMx?pXHM%i6=DjHUu>wyvB=;Uj
zl>#hy3!-CQq#H&P?n8Ec%N+NzD2$ut%>@p<U4>bi;+_*e<q`%l;(Uy;_=WelvUCEM
zV>IT at DNDZ>_L)31iYYK?rRzl%#=GL_ELDMvX+$x}BT6x3e=$a(l^Cxshx{+bE5vl(
z#cpu6m$4|9llx{_1x04gSNz7xvKG)-#2BlDrYo>ZmbeBN!eE6yCUMIVPJUaoG8cYZ
z$WOu9g0|nH%3kyr?xS#rSAln_d}Y`Lj9m&x%5L!0E8t~0M1x78ehsFdU<FflM=?31
z!6djwgIPncf+ at SBm>kkz61+`=xs6~2Q+5NBB(Q-)3MM2lhab{lJ_O8%6inG2#pI9%
zli)`*n2!*wV9M?&CWkbb1V6<w<(~Hxdfrn?&wC1e;Hh>JnENQbgd{M*+tprU*bex&
z8u+(>AJxE*0)AQpKMi<mR0f0IR^(=DR1Tv?I4sNJD5T_lf&xFNDfNTEeo!g3>_(}d
zrJClD29w}@8q9qJE10r7ipe1jCc#f?FrOq?!Ia%mOb%%<0ssF+A{!o1C9>fGwDAL)
zHYfODMIt{;ZcP}$k1Ju1lUox;@Ux0UeiriM*$X5x`FWxe+28>md$bZ+_E9CW46713
z3X??U?y0IoHcUm at Q&ou!*lw7rO5`XUmB>*zDv>#ST$RX%<3^j|xGIqi$CWiH$>i~>
zOvY*Hclii3p8IE|y{pLGLda0^bIVeh$8mEwD?Uq!(*<$JZ-Vny7ExsF1cDu^e7+xX
z$gkFQPp!O)!kid>wJ2{bR$3mVEjT<j?v>{74+Ytfv<RgbO6zzz>@n=;{bKq9G)vx(
zez70 at Vs^}Zry`?yh|(`ey6*?20G9zHHg*N20Ku+%urlT&x(vtC<)NB%32xFzkS2l^
zOxYdHF^4pm1izrce1TvEQ+5NB&pSD!V3O2(0cCqhQ`VOVR>~^7QC2SDIi!@8B>YQA
z<DjOj2MJcvl-<!ZIiyLG;G>${9wiu<G(S0t7Ch=2g_&}FLAsY_N!&-7CEcOGFDfw2
zUS0&o%NqD)z=t&OA;52H;5Pw3uj&O1&!fc8yX<_vOfAge2ujVREr&FckKhK4%xoZ7
zsV~_b#pI9%li)^<DUVK2=o=cbUhj at RD!Z>Na16!#N`}fD&`CJh1O+}KIH2Xo-%2Zs
zBfvbOV9M?&CWkbbfFY-2n3x{}mN6AKFfkW}FNG+WLuD8<=NKmD!vbc`a&Bd}f+>fn
zm;__y9K*zX7_gG2?2e|%Ar+HiV&)vf#Qd1goOun&?r54EQZW(JWB9#Gu(qHj7NZS+
zPq0$=FDmdWO4ut1dqopQ at asz0>*Usi5&Sm7pi?otjoiHLnunRQ+%hjJe$zbDHb)|v
zfTkIj8m76XKwAXuS>#kIAo3|&*2Yx#s^)@a<#rVo(-img$o;ORgIHuG@;e>rPLE`|
zJUW4=JsoLJr`dOb1G8qhWth*vMHPmOhH{C+9>W(7;WG=-FfmT!3*dZ#yst!@%Mpj*
z1De`CK(NxnvO8Ma9MaVG0p#v0*L8SNgUVUvnD(6odHxDz{mM1(e1zA>KT#^~v+b;~
zyw5 at f`Z|*5aNy2^VE7uTeH|$S9(QfqE{yNIQ1O3_=PDb#o at ICqvf;IGF=^D`w!wX8
zfemXtxCm18Q9}vFtsr}@{)Y{)v(mj_Sw+)cUm#H!u}jD?Jj8eJ$hL3pgQ7Y39mOO)
z?WVp}<4+9$&YIH}jPiKBJnosCQnMcRWJ>@oh<oj^+q^x at M!a8Y^!Bjg{c4xpo|1>#
zf5D_2Lm!=&MXbVzUIOinaq2gSaeEt^@XBZ#v`5&dj+6RhPi(B at gpFwIEv4Rox4h%9
zUK!kIfMx0w?8au$+aOrW_!=H-7@%l`eZeG6NRuX{2`iofgpXBJhAVdS4(9~?T;G;~
zS5OCmax(PpJ-jwuJXT8?0(6Ai208FbTo7-W0nc8-$WQ2G>WXw8gDyBtws<OQ1Z(pB
z^gfhP`C91fuzknBq$QN$&#dydSqc9V--g}=Ha}~4n7#pgT{a`$DJmaQ<ABTHv8^3n
zGnQ+_^vK7<E`dQ~Esh4wc$Dj5?&tA9FCM`QJ!?qk_%O=(uqzF>t4Oa1-I<59zL;6D
zhduUrk?;qO>@O`?Ws=Vxj4-32O)&x9Bg3GRy$U0|3}b|$6)6u3e-Qqc;@*p1R-)j>
z!*4He_m*W7F7lwj;bV^McPS+v8cUZTzXsPY!!cYA$8co`8u5ix3O~xW5988ktaLjA
z-Y3H=u`*7=xF^HmO(gx`&SLvqgAB4x{R5X!C$Fx_{}Ja{JpCw_-HaSQLVj}oD=7aQ
zR?5!ZE at 3J3P`oY(e$+L#Ac~)g_*mC4taGRgTM3`Tz^D3>-7+q at A5+pLyvJmi@U{~k
zhr`E6w<x<EwvVj1fBFQ<_87|gILe-avYP=vuD~sTOH?=obz!2q;Njs}4qFrHd^x0Q
zo4JpTRTD44T at 5~h8~L!kM?6HZ1!1K7w!oe0uzf{TQjun({A!ugzE##PG$OoFktwSX
zr}6lnChBkeJ`Mau_|a{eA>dh}Hv}}2Vf#<MJv7Ue9%<(NFxj79X4}PT@)0)~FRW2|
z$;bC#->7c~)F=jN(Ua@!NP}LavemawMNUyap6On|i?f;k4Go at a&_hbN--8m!v~8gM
z2fQNq-{x<fml<J=S(nH2n1y?D*{C&q!5zttY?KpUxQD=B2ltR8nXd6RW*p9P9NBHw
zRD2P7ObI<^%+e8W>QnKpD}gHuJ=|7bLeu~y61B<w*c(*eqCgUf>b<~L!LYM>9Fnk~
zD+km&i8=HxU at E>S?=i%s);osR7$I$F-viX6b#Lc&pA3IGDPzH%>>m0d|2Y-lWXTlZ
zN~BgjdN<XDn!^I*5V_mr?O{mKl-;5&JKksSVeHybD9TUu7OR<Hj<<*D(vD(k>kwGH
z4wd>$4EDyjcKQDl3sj6h*AhoB+hfJc+zE1dQGVVcRNi2J@;j2iN0xT&6zp-7_ZGGF
z<X!`8TQH?PCACkXb?63LGIn9jMkeBIOr}r8m-?8A--<>%Q;SA>?0?k9WL}W_1l-2p
zK(EC-it_N^QbTECy-msc5RHsLZ>(U!QC>^jRsXxGAqCpM<NcZPu5nXMwM&iq2l>&v
z at zL~fXCD3L;`$=_0D7{t)AScuu~+&OdaR~T$^EF_9xWYzo8Hh;{>`dyrL(J%n#G?l
zzJ`6n1oTey3I|s3c%72Im{HJss~#bq)n&knMhev$tQTa^O-9@;&j2=mPZbdIBfp?Z
zAyGH-$zM|il|<xev$CUzS6SI+`At@~nNA^}^|?c%c3@@}yB|MlqkKA<&f$$(D>3CZ
zd=?;)?nAHr%`r1Sh3AsWf?d5!@ai{C;NeEVO|Vh0#1MxwTk;vbIPVgpC4^Uu5w-x>
zrP30l!|hxE@`7KD{v>cKZtP)~F|9=}4meISw}X>;bee4Km9f0w4Bx1$Gfm-VaK0s;
zPRik(`xDsFJju`JQ6Bk8v=+lR#&1o>`?alVV|lk+?xZtGUv5q{tPC6RYZJv1<Uvn;
z=1_{!F50RdIOV7xbJ}Y3h{^9#U$Rx1>J6d^d#d=gF`QA;<(a2sNcOzsDXBUAj4a1)
zv{a^hd)R(-x7sE*;eB$;P`n;T;jDdl at NAwby!ZGX<Qo5swb}m#dev-``Baa|-|F|^
zbcC(o+ at _my;(R)xC6`TLxwtnvfh}i8*-7?ycAoXrWtcKdm4+(Aa|Uu{nD#5*3{w+a
z-AvWlZZ_(}$$I??<kJ-XeRVeeUmVZ$%Xr9J2)Tua)bWrP at M12;C;h_e;ivS-LkVI(
z54cFOOB2L2_xZg~J5$>J-Z at 2NC|v+^c-&mYzX3lZekS<7j4$4cwmpq+9KNgYwV*Y=
z#Mdg0mXf6jpxD3qw(8+{1-{kx0$zb{wLR%(aSy_O;BMqNt~6-m-+NGd-@&&R&tq+M
zcGZ|F{bUm}N_gSjnG(SZrMdBu*@%IYZ>AbCfd2-u8UIgYn*0GTtA)K1(dJ}#-Q`@#
z^R3%`duUp%uJcNi;QTwa;^@!}DcRk6+ZZto at B7$w<Qs6NR8*jhI!_mt;k2`7V)1v0
zqX9q1F$QZeo^Yl-_ at IJutR2Qm4Mryo#wKUVQ%}hly3c^&h^0}+F`Sgf((@XOJDe#m
zzpP;FZig{RgYkt1qsW=^)>|@$eraezEQKpj>gzcDCQa<I&XnWFmDm-U*nMKLpV!3B
zbf*0CpGs`MCU#sb_CuQ3-K8|Daf)A^1wJrVXXD>gJskh$>Jj*lV+P%Fd at cCijjt8o
zd+?3NcLlx)_}+_eBEI+Gn}qNE_$K2k;+ul64__O;<@k2OmpHF8z7oD&@Li2>D!yy*
z?TYVOe7oUWfp2$w*Wud(-}U%jg6{@=d*WM(@1^*z#J3l5aA*={D6gRhwWf at N>uo8J
zcVF0_V|cJrWuv<_VY_#U`A7IS@;>zpTnDPNsXwv()Z+oy5wGFxnKb9EZGU&4-^1wC
zA$(?f(4#uvO1yb&K5y08)K0g4C)XwO!v8kJ{r-Zu*J<K at u8CVnC+RMTd!;6>(*B(8
zSiEz!*pnuwe>D^BfXe`z$&KERaw8|dlk+Xvk&_{W;YuCn=Q(EG`?=5WzKkeDu>q%F
zL}3&1FSO6o+h1w&bibPaw|~s-4ZFNlFE;URwQk;iUrLrSkfX9-;uFswOUzALKgiu0
z9}JpE`o#YuXo8H;hxAqKYep7Pss)UwiPgG*F|V7wXHdv9+k58WE#~00-X50R>ioQJ
zJwK{;;Q!<5G5G(a+KK;9tH<L1vuYRqk5`Yw|K|+rBz(W9&d=@nLlrQ(e%-6mAf at L`
z`g%y-+^>7>eyi#uG5_TJGx1M|IrFX7Cww{cD=d}yRa=5TRQ9hLU#Z8~@GmzrS2$T)
z73wi^S2}-xp83t&I#s1$R1tjnd=x6dyQX6Xp2_VSxqim>xX6xeLb^?umcFvBLch}|
zu{`t85{bFl$iM#0Dcml0IeiUAj7|mTq}@4B)G*=uT%4yf#;5i<dFphh;Lww&&Rkw}
z)^~L<9<BjJXUl&RG{Kc#bavI#r~61c&}qy~+K^qT%T3upuc!YRuhdwY5+sWg1ESMj
z>JYLY!)TUtBp4@@K4#3lb#dat#OBqR$OYK~!VF1ooXTQ3-g&b&zmjk&W9O4qy1W5H
zOHN-Y=X14FJ@?1+89+V<oeWU!bd=8k<xWre44mmzbk^|n=}U5ZuYapDJvVLrThLJb
zS;!JBN8%}m7UXd8y<yaA(%nIG_+PoBdF~$Pxf8dMg(1CB5T`U5>7|&U;emnMcIJ*4
zcv7y#*V6X%s?wbl&s+*FdYfus{oA|-vICZ;M4Zx&rm!OXH>5D0UhNM5O-bW*I$fpA
z6K~8-Tlu1qF)LnqdV!Bw at 6s#*b=x~Pq1zHk*Ct}VGyM1-`M=HSOBYXO_8Ic0%v*Zw
zI_q<k>|%}uc=(5n)WJsC$5;_}a<hb#sz7s at P?CG;v}`fEqAa)f_LEf~<tA-E9qj66
z at nOtzzN`v>yN#8HcD`^y%)juMX9SigJm%{>OtjRI6t-qQH}vwnvZ0sfz`j(jVc;t#
z?Pm;|bXEDF`f(03>1N<vUV-V2^{{q4c^C3AXeTTz)Q)jS?l=W4UGH7lxm^anQpHZ{
z&KUMss~GYGJfDtUA`)!ndcqH<)W_k~w>~p$EKU!}UdC8lI0dO&(39gq>2>^qdDTNN
zN2pbwCR*sl-+F7?Yv=)X at r0-o`-%q<=gp?hVoC1aZExl!PaKrfrIO{?5-pXb-W=nP
zd1Vu`P|xOx+4Qn{@AJrMD%JOh1!!?|fM#s at usS6MP2_^LB at 6&!ew)bWTevN;VUgEj
zb>|M<u;7&QbRKYwndT|YGJmf9GG|}~6Tad7sN0~c{p+SNT at IZR4R^1xO1j{s<fFeW
z=A#dGCLhC-F&{(FN<PMuF&_rYF*fwDMU-}>&TBE6X)d!c at gyvK$sst4XY^lD#`JMD
zS4c+m at _TWvcF=LM5!ETP+t7Pak1192 at c#N%vYq8_wbF at YBg%KsWyQHbW?Y9d9&8iy
zl7}vr>@|*>F*Qyb)_eG+cZO!iX=AtG+c}gWx$*4;IJahX&04s-$lTiHC?seeemCR9
z`scil+>SRIlZQTrxDogHH;0i0Eir(6U6yzMWdC&~LMqMr!7GorBex$9nsN-g7+jxF
z+w^IbOt~p*E(^xH+3<}`M$FvLfAs}XMF{=l-8?oE7?w7FZqnNOpu_2nnRVlgPR!Vd
zI|cs?0PnUYTlH|r>qml#ReKJ`!-m-Tf7Zc&QIoNH1pFVRzC}H;P3L6RnHY8AU>D>3
zrK6gXGQ0Ze72G(lt=8mVwuB)5Qxk%ixniuoyv^5E>a#1e#W=hO7VlhYT^CG%%L3O;
zK{NgjVYa!{T1`DV at +?OCXCpiEUWwek>;5XMluv0*-o}vAOIcGAr9?Lvg1CRt^L&#@
zhGm=H<}+<4+H_(-NzHuBg1nXn<B!GRTY{9BbpcXh*7?!=_x!NQN)+C}OgW)<n-Bk~
z9p-pnEXNYh at uxh;f8;rShUd5vIlk$_9QS<Uf*kK{pJNlxv8=79JRxs0sa|_-XtF7#
z;Q6b%GGGC(j0u|T$n9iP<VVEx#!7K}Q*TWxq*V0 at 7%}2RaCHW;tGWe}(H4=&wZZtR
zWF=%24>1PMg3j0&9nZg^GrJufkA at Dt2_07@({aV<4EZ;7X11d<xy={L&-f at E)IRQY
zxz9y>SZ$n(lvBCDSw>F at v+cR+lnJxELhOX_k+^bDPMnC7?ef~qoFNq7!}7YZbHw%R
zd$@kU_d6*b{~<uF!E66rsH6{Gjx{9VqDN_PO at u2Mg1smVzwbG1nQkHvGX<0XZ5XT#
z+LIBhH4{{9xY3PoE523up2v45zUT1Wh3^meK8Wx4_&$X1cliFc&A*McLHe(lNfxcz
z#LUS(zsSTaDKBr*V^tH8m&{3ZIr*X`r<2Y~($4%NURAW`P44;8ntr2`!e8ax9AP=b
zjciw?*dkV^<5j|{PaR8NTjubHu&#eqzY0sv at O9S8eD5IhkClC)mHS7gd6KTmF*%hb
zV_aF8*9{P4<m6oelfxz at 5KOZ@cdKPfz#zp1<4F&I*BuR#DQG-ph21FFNF>W(xZ!{w
z$+4fZ5c}?ch2(+d$xT>IKa&+q;ds_F#>`~T?LkvsAJ0uWSp7ef^;p&>!!tR34UF-1
zC{lw2&Yx_Iv{B7Z-i5h=AG5)(k!P#_7kh64*VMJO5AOg*AP6X+R$4itM4TWbsHh2s
zFjNW%D5xcB6vU}2RB@=<nm`aFXc!Vu0cBQEQ4zJZwc=P6+gdAB#UkKPd#krv2XLr-
z&pru?y|?#$@B9D$@AvEXyU~ZW_PqAmYY%6iv(Hg&lVVossph|o at Rnf27}lPU>XSM%
z-9*iJNzKS9GcO-A^Ey*6A2qvUz-`5 at 0!_KgTtE=VJET3`ds_Pf>?n{EW?s%}8rRvd
zyU+!3 at r`=e!uXAJCA-%Gw#`Q$+C1Kb6Gi(Howvb9IO7^f&FD-p at Ad$1_iP-?+wH}8
zbtcFS<JlRjWa3?b)$8tiZ)1$OkeurMar<6;*@B@`?@d#aR3Ee<@$w<&hBi#+NA>Rg
zxbBwM95dVdoQLY)k{%?c)<An_e=|+xzO;Xco7#e&4@^=`y|~F1bT@>1*N>PJDKYQ4
zp5tYD-y%wB+gEC4Zhl`C*xowT%Ym`oXQ>O$IU8nA%%rx;k!r3?s$8PlskZVtX=d&<
zps2g*r0f#j4#L!(cAGt{@9k6LAClV}PO8mv_sVAU=7eRhX-7^YWoF6&SV{DdVwR^h
zhTkxwpB?oZ`*k~A|JWt(Qob!St6sA2Tr#<z<o!)Z^$jk1?mjiw`^d|?vTCwKX68A-
zyP$ml#`<wmTUU~5 at c?hBPiDOT9&*V!RM{gc)zshHI;7N#8DP8DQYsig`gK?K at G5ud
zo|^ev^23xzYUsn~5q6tW&16#70c+<<Wx+W*T~7GJuBj at ocU>%;-IaEXkFtluSS2n7
z9wh%pQ at H+S)`hxFWQ^;82VJC`;GW)YL4K(mFOCb&RzimY*JUWT+G~UhR+-slbz?@^
zmD+l_l-j0ddR4k~|1Fs<*{oB^<D{~2Y{~aIC|PPK*~_=o*1`RC$z6Xz$<+O-<Z(Sy
zIS)*{NZG4$ADDW1qg1Etvi1F<GT76Vs{`AgtTt*~YS8$T1h}cTsoQQnC;S^?m3|v1
zF~gqOih2As=qK;IY*I?S7$s{@mcPHagC5)d5~B<4$8Ox-o3NsbeW6U_yi|vAh?4Hh
zP}_NFGW|Yb?r{B_+M8v>j9%Z_<d~u-%%C%P`!3b7-^0)JP@{LZr$4jA-}TRW;qL~l
zFFZlDpgy1($x4+KEFnFrrb`#EMgiSRx`3Bi&MqYB$1;w2neFTD<>1lX%Vl5p-23Ur
zq;q=XDy{wVU4k23?^uSJ5sow7BjnYKV-cYw?R8J0E`*t>x*-oG2`w0v%e184=}O0k
zbd^`v?iO`zVW$Zv>I}E`MU!DH`dL70`}>{^UDQl2>P8CDo at Rk<r`2>NkNr~aF>Bi9
zb=}lfXU#BbjH@%n-vP4zWC=L8kV_qBIHHJ^rMI<*AI@%>(Q{jnay4DszK{mCKi-E~
z>M8f{Dn^Y{S5D0>{GWTm-ITviW}3P*N19{VWO0YL(I&?PzL%+Fd279AJ2k$j$<3&{
zL$BzNhZb|((=NZ%xFF7nC=zK2di18v9qjXQKflTQnYy!UOrM!yHDv?7vd)Z-qFqh_
z7izFS!rhMbE8cL&Ed>?SQJ<|*=8 at PJ<Swr<f5xe!T+YpIciQT at sI9=SucK0~pI}F<
znwUGb;A3jK;jcQC%S!t3ANUpNrpTFr?-I~{C|6fw?cI0SFgNRA?qN*(W2|C#;VN(#
zLfz`D5YiVROny523*p}v{!U081*y8b at tvBz`A&^=-#Fc8f^GYCnVtEP99qkFUnrs7
zNX&3}z5#Yr at zN^57H>AT)eKE#&?7DzT<b2gt{)7pR5k0WH at H#+tgFu8O1{RrE*V_v
zRMz#q!Ik96x-J at AswUR;ox!C{XI&TIa+qSP^<rJ$8eHpdvaW9ouJjDn^|isJ5wouI
z2G_bftgF`GO4X&}nm79#u1hB2d5<(PZ{QK*>TV2T^qOLubQ5*_3GZ^ocZ^Nch<h9E
zpF!^!{LGrb-!kx~O7J(0{=2~6F!~3BZ!z#D3&1xU`PJZ?jQonaQHByz=DseGYmOLy
zDA9Zt{EQ`bH3M%f(OdxDSR(fVcw>oO?t?d$$R*&7C3bm%^*|4}uj37QQ*iI$68Muw
z{v`No2FbekfxkkZpn-P2F!-6Dfghge#M>pgVP5o{m4VXrN0(nZR{4Rg&*IW;vCG~1
zY>uI<tTTob*ulQ*&Fymq^d at Kn=vB}kK`($_#}y4dp~WEOdvvw=EU5Ep)BBwlm-9WJ
zg$1^q3=Xs7Ttn&J9)4c^RCv=vA4bWpw!$WI@|7-Z$gDR*-0*e*tl(CFN<lvY9Sgb=
z)Ejgas04I1s2KEPH at tZO^b^oT&^4ecP$j4mR0X;QG!gU@&?L~0LDitEL6bpOfvyEz
z37P`>5ojvt3ea_+%R$pXmw{?Pmx88)#(}N}T?D!TbRnn~bOC4v=m(&gpz}eqK<9yG
zgU$ujVWs*%TG at u#nZ!eHAOG&^9rC-ax8y~eSAP|&S1)G{rw7j38}tdTSCqNc!&hUn
zxt0Ah+e**M;cA=85tSp+GGC~reVmmXHM#OTW-evrl1h(CA-hU#eL9`C>r+MNcI}i?
z-#2oa$hj6~%6Xw?`t(q8F2AI0`)9cqBzSjwahcw~DBoVGEZ<S7DzB(aEZ>=4TA7q?
zcIAoDUfewVECouAmq*9y9RB&JwVTJRH~q2uy at I}vqGN8R^9APUS at 8b|{!-ADpkqN-
zfqH|k29<z*3 at Qfwguc51bPZ@Cs1j5KssdGlCW5X3O#=M{R1NwuXfo(((6ykeKvO_h
zg3|ZvegwJ>bOmS{=yFgE=rYiB(50a3LE}I-fGz^nf-VHj09^o at 3HkwO7U+D?Y|we2
zI?%bGdU_QFnnSOXKyyLcK(X#7t)N(|kSCy<K_7$Wfj$b0VXY?w)+2%Syz`>XvOhMD
zoH-UI{Ry=kN_%-RD)y?#>LK09q1Wp7dShkK68O}#0{eg0YPtlrx5)yD$?d at Q7o)H`
z?1gI$KZNE4wm;Pdwm&17sT#d|4pXSH+6rvDdNc5;nSUqy;nI`l>VB0{Ha815Zl62Y
zA+w~u<%H(`@+jRUS7YA}Pwt^a8t;s$x&~j9pFti4wl1HDnn<y>Z(Tk<jf<<CN4Rcp
zEj at dtO??bA;kBtmiR<_S8&A{g`PR};*>c!-;L}o3my*DzCU+t6M(mIpceruKZXW70
z4Pzwsn8;wPAh!fQ<zUyIGn`FtigV`+V1<wcab)x=XV?y4JMPu~j5mrnrF at LtX0t+k
zHGo65J9ziR?jPQhk#2&wWXQ0ls!<bFl4_QBPp1=s?H|PBI`2S at 8P2rtuj^?Xlg$Ik
zpy(Pa{Eexzz~8CZy&!|8snut?)S0Rip^>Dh?f6bX4(=h(c4~3sQtg1}4jTa4f;crQ
zzOrjXPi1=qpR`8|SK{j9{yRv+^+p=3qp-7#_f+^OkExsuyAH}5fo<LIpRrYQq_(}S
zwycwq0ah<fUQT`)Kz9~i21sp7tt(d`)iJvAx_=QnZ9=S}dtz4>yUncMnK%8OnPKL^
z{D9fw2K%=OGf-E^cUEnIzw8|2R7-adnRieFf at e><B8Nv}N1Fn*8Fq<m$$gf`)18cs
zm}j$<rH(d5)EeL}@gt_cgXXLGh_?k?q1p_8i~Vdl1U{u|bGXXDZ3o=}-!Smy>R|B@
zn{D7K;JcHq&arYj0L>p0zcc3wtcyb*ZO*XBu|avZkZvHP!?Pr&upzoDXY_SNJOAv~
zW$RG-#tQ6{Vr5x}yV`6V6G%u?5;ajvQP;1;?kNr4d}b8h_{?QSV|@l+W(<1A*?jD-
zIGw|IRhtS;=Hm_z^ERFXeW%0abp9EGHDphxuMzJX<a7T2OjpSP;++OvB at bZrlxI`?
z-_e!2hH6XQERIY0n|MviS+%9uCgt3-0nkD%+-D%&DfMW`c^Wak_Oo>&2&o5^BKIo@
zy^tL3ebDJUHFkuYE_yF>`X2FqNKW!T?Q{wDSO=f_<gVUpom!zC?4&xi8CDxkPqBW$
zeUFsW-hJs2MaCTOGEWa|J9^%G8Dr{Q&X{@UFkQqS*!-w=f`r$RR}IQJ=6#Uqjw>xL
zWA_YwgR%EM%{X|^W_r<;4bvN3AHWf at Gk{DW3&;j^fFAjxr!bI*;ZbX4tWa7vq_771
z0!{z}^aGrM{=fjh1>ghjfB^6Sgn$U}L>_~IA*>Y)MgPNSpmchMkx?6J?D<{%2qzHN
zYJ}sDJDPrhZMOU~!_fmxv$_Vh|2m3{RdR5DgXH|0bCtL&O(Hl-Mw+qFB4<xdTn@>3
zFDI*pK6g+PF+<7Z?tSTW+SD%&t`7;5+t#lA%G7U7drkWf7}fA58T=hepMW6lKRMqq
z#kg?u#qk%WYUY`AuL&f=lPAZQK at P8uT}hkfGjGwc0Q;d1 at DJH5qdToO^=GW%YhHuh
zb%wzHP0>f_y#hKSop_PtJ-#=Q;`L)ivF+opj8^x<m|-P;XRXQ0fMcQ;n6F(wRXHnf
zcrRkaHFnsq=j2G~{jIeeuk5ZC7?VxR7-A#ES2uDZclm5T_Tt!H+zBM at 9WiMv8vBni
zcO1KqcpRq}cm~vaIwY8&lol<71j08Y7-Ez_rs}V}$;x2eku%Memg`m0)neDN9UNoH
z$Nw1KBZF{gX*3=ryG={PXxR4qrNFkAX_!Z_Pw>KrmAVwQtvu6(N=7cez-W^;6xvW$
zBlh7VHIHeicp>~^2-X_}yQ8j^pxufdm}TRlreBT8Gsf1A*s$rVzQR4J9|yAet|0x1
zO_ZzcMfxVKz_u^9)}5baJtNs|l51tKNexdt4SAX<l>~29pn2k{Sd$;O(9%!!kP384
z(obm>%t(1u78=KvqqMr*WtR2KSY>hDuXKFG?!|1^N at +rddG6k1>1jJw^8L2vUL at bd
z%XSy6<?#74_|{C?P*uRX86;L|Rrhzdo~R9cf at joNy765rH@<7jD6PD6Tr2A=rG>6a
z;zFzpeztmIh5Hj0sZC at eB#EdoL)rf59VFd%Hr{Cx*tXu2-aEm%B?Hn()p*9!ZJFz*
z%9`A^Z-=V916zN)>(=F7a7`EQWhBFU>Ahe#(A#(J^zybQm%K9i;_0gR$=-cQwHMif
z{Z^7u9RQcki%GOhr at Pe|hxjjQ)VSuFV<lcQhd0Z*v<rO`jO(Xoo!xqpj1B#8&cGFW
z)ERf|yxovvIM?K|HP%B4<X`Q at aIwdM+z1!%G5-xawrbcfa&j`{gy*MF0(N%I)z0v<
zLKs^@O)qgb<*=x(?YJL^nXWLf?XzOwvl`qxqUmX>j<|Hs1Qw2G?_{=@j8E)e0}W%k
z+7?bg>X7Xds+~b24?06b95rK$dm+X*DSbn)Fm87n|C^~0yZ&~#|NeHz6I(ypoa2n=
zj^~~s<GJ&Rl;zDhec;+c4CT=i0o#3`g;tzLz>`;|_<j+2V&pBsKc)9|@x<`%D0EeX
zlQ6~{UzMTn_n=>sk=eF^BD~-a`8_t|VR8p~JTmevY<{+;^a-zP!1+H(^9|w|<uN%!
z)6_ZqA!bL8pCQyJt;v4yZFt(2N*fl18<Hqt2l%`{r0vK#5Ai$l(bG~4H8tsGsHuq!
z(*FL3v>j#Pdt;=dhRY4*QZ1QGHl}?a{JR)KBRa;`ZX$fYCYl{xoo-{+BG2%2Ta=-_
zlFz?xuRb^cvBiv-Y%#k_DorV0Z{iKV*>nUnhwcgc1)q*D`EU+8(<eD;8=^!Z?!%fF
z;*KEu6&dWBa^9!q2ew%~I>V)9XJK_lF#mF<cgSV+Q>Tz8u%uRlRhd}1 at u69UtrZt3
zVvIR`YlxrI3pvrdHczphr*B&_$CsW6b}u;gpwQgiDBQgVz4KabdP>D$GxyE$3{v8s
zN?UM--nYk>IC}F?%HucW)xHt-2ogLtNX*#}i60px=Irhy at iM$YGLzLjD>GzD`_qzV
zbkYXZ6RSTu3tCNlqg;&TugYDHa$Ak%e%Ptp(f_EaE}>K#^es__=VDEWk;n70CRA(T
z{~#ILQYhc9lVnfc&<OVp$*4vi88tHabsKU9yq1i2&yXU^lx at W}q-d+dlb7tt0Nc*(
z)n;L6uh;EH-BflXrS><Gjs at E%QrbpoB<qf(6z)j0^zDDBmC-JF+dI|j4ZGy!{X?yc
zmPwAjZfEjYr&=YxS*wl^+IqZ%e{2g5k4n|qYVqW-xru$}`gg8(=a!-xL%rtyL%ocx
z#S?d`7j3OqcEodkqh8dGo}dRsqE3&aTsh$#QbXoG|Drxtf2a?A?&SZhKIq4$Jzm${
z(8hmkTXqd=zBdR`Kikmdw#6NP!w8m^(fK}e?->aR<1G^gi|JEO{mh6mW;W?c>V|c8
z(JSY=0dM-4kUGaVeM|}V0XpR|h2Wlx#hX4jfrJuXsPK%HEvX0~IMYT<hT?g>eg~O=
z?py+HFrHlRE+FZHx6Ax`kQv*3v3h0Fowxf1*!E}A2W|Hc=)oyW_t+i~(4&80`l#*i
z2J~>Bk?xFV at XZ5y2$*#GJ}rv?d%_^Ek>D)@>}@Ge-;l)%ut#1(a8?2KE`@B|ZUOcJ
z8qUDiI>25!BfTFun*jSTCVe0{+W`A`8tx0edw{*VkPYt<U|-0j^WkR~U|-Cze)a*q
z36m~?pF==zNJ8`J8PGd^2AfZ>fS$w_`6R%%cR){u@<YMD70^>ad7Qf>eFAz)DNpO*
z7|;{n^BV;2?SP&$Y|}@9dncf0yluKGxV`~BYi!d8gL4Y#`E>@;90tz>*qPd<yMXIQ
z*S&aO-w3?lwc9GZn-_mQf28lX<C at _eVDwFG^lfD9H;w2!z&rx5VCi@>SVlMG;KBNa
znb{i8TzO#a?-Af+{Q48lkKLgsu at K92O@OOSI~_-Ga&!$+*%`m>HV5H$xOlh2H=)>5
zhd2>S->63Yl3tbv_}38j1X~hvP708AslnR_w&8>tb=%>M3>H{#uE8lbA^hxc(tL`a
zPXK-A9evN&UVFIB7|ysUuvvRhgv&dH$>ILQ5N7&`fj2?C4xUIm at k}S)tP^iy;K>a3
z4Gs6%(`YkLzZrf*@m4Xzxe&NH4C;<EXB-A$lMQ;n8}e*9 at 8S%FDg56BUxWDcoJ9 at d
zjCuKupY0*?@>`re8bjRyg5?BpX`Wv~XYk`#7|*hvMH-wm<ygF&^b-06AI7o3`v}L<
zQ=B+WjT3>apY`ksIQu$5c@}PK#IbIlL{D!Uc|$zvZ`UcF9d#Sy8F)iH%J=RRuQzoY
z;~98EJj(a&6t6FJzpSKf$mxr==?j?^khw49=gzi0iu$cBg&P*g;Thb?o^bQvw(aD$
zh1;Q%+rjw6Yd`>BN%gb_dNSW0P#7 at VR*Sh=O|}O>i at oXB0F7r|d&4b8%r?ZF3yq4Y
zTNfhjZg#-v>Ww`?oTp{a_OP+(*%@P)C0+Y~w+!<kGpc6=IMo==Bu=O6eR_t5w(-FM
zG*6lB7lu>}8Rh3>%DxA%nw|$5g;3<fzE{r at yg#I&XW-~rB7eB28qX(t!95lB-uv|#
z%z%D4Q%c|X*Sm17-&^g-lb*ey^_AJ4r*v(A(+lI<0de*RKJ4{~nHeF;S>`!}_WWl(
zumk#*n%?c~O?UZ*_3|S`0NRsYxeapw?6J>wJBPX~@pR^mG(0af%nn=&%k==)%yQkq
zHL;v6xa*ry0 at B#z<B8{C)?w`P&BMB-<63r at 75n@l?-?H<*rgd}uI`5CSd&ol1<*u4
z(v5(s{A?~zs>GEQujd*n7w9M0J*2)L`{C3I=xSU6 at _McURstUZD}d#|GGHl?@IvXs
zC`|(}wfhXRHPIc at 1^RHBEPQbGNw-yJ6KX<+$w~Xjm)k;n5O29HxPdYbnKy+|a- at v1
z&rRvirn*e6Dr`!7;=1I}u4LrYHqw5_C9EG&PJKX>>$K8v#v*sYX1y*mD^O}a)%;~I
zDH(@d)Z^wGvt$oQSB+NMPi$599rEs}>{0h9*jd`+n612byIHV_v|B*eHd1$|<`JIJ
zy^pwiqy%wm0&HH8y6Y2q6Ar#S$lSR#Axz2maO|z5{mi;SVl#|vCSl=3sW4HJy3h4K
zr(C4MCd{GOqGXgNQdyz-3F|09yM35Pl2U3CW-jd^uy{FHiu2Sj6+do~^&nk0Uy;hp
ztn~frem!aChjci9AJ&z;bjMTqu#7C?=H?zhGa+WKdraKIg>j4AmwdED!FnhR9*TuA
zOWk4!adl0Yx#R;y!bkD3c(R8P3}X0vrjwtT3Gtbt at C}`)i13*hq!=F=GH4L?E6BtM
zAKxJV at n}{Y)?bkz5>8z1mk^WS#>6gOZ21R2>K-<1a=^s*Co)T77cjmPMl*sH9$tbG
z0>LQHq0EwmnF&jmboLf{_%aLP;^Jx0;)G$tEXk|XG^vZgYsFAz(#!=N4$J>({;`W@
z(cB4<z1tyPN1lHu;B}l3-$<jZ|3nVo(DCB~#|KRCVJ1dQ at Cp0V%wETfM%7~$|5?P>
z@#1FBW at g1LoH=h1LzB#%xoA$me*Fx(eI4r$`t=Zb{WJY~3>W-Czi;I5C&COH_C~DE
z4fbD^^GeSFlbKnu(M#tr6GOvZw=N-X_#0z$FjjDg2|)kSf7Hi>^)(|n at WuW!#b0zO
zgmnS!0&4F-2)?3BW&sg^A20y$1PWUS*$(Ul%pYOn4X_35f!@H|00RsFT!Ep00Pr;9
z;?O3Z5deZYTv!7xs{s?h6fgt20Qf2KKa-Hu3?*@0s{#^%BtQ)$18ad4AQe~#D9N}q
z6 at Y8>v?M?cBm--K6aXi))7AkrV-=7HBmrt58CVOX0I9$_APvv}>A-qm1E2+vUWN23
zq*o!m3h7lyuR?ki(yNeOh4d<<S0TL$=~YOtLV6X_t2j%S5zg`zg!9o#!dbPNa6bNo
zaBzZ)gB&?YYQjlgOE at X1gtIP<a5U+Jvwj2NXt7nBnMF9+I>OQC5Kit!!r8PLJ3#r^
zpV~q=TMG%NsF-j{N(rZ|oN#bTg|nlAaCYv({#GU7?AeRMHMXP|&>MIgcn3hMLI1YU
zKMr>RW<VE!3v>m{0Smwq-~m=ZH^3UO0lEV{06V}QZ~(AyCvO3L07sxN-~`aJ`l%s>
ztT$<GbR<Vw`;ss^xGI*!CMaT8Bw%D+uxO at Y=As1J{Q}2N@(B*~WBh~1`!FG)e*TQh
zEZR-UQV*X+3BC!77sy>^O=I5m at HEm9M(Sat!zo3I*JaF#o)x2rj-RcV6F)Cb5rZr`
z@*ESpB3?lU1;ygn*hLA8KVn>6W({I6GW6?5%N(;HUgCnma*2V=OJH5G%UCjxdLqvF
zkU--gEWzNqf<d~;ei5z-am at HpgE00Q_;GPd65t|aoNsUt6GI1}SO#$x#W67pK0ts^
zn9SX0oQxfw66P(8ja!<));r9{PvIXpK7u*|{enXnOi1$*;@EkjBR=aD%X*QSF)^`A
zmM{~1Lg;K_h&Lv90!FMkOibJ&q+Gzt=^DWjR;DpwbjJ7>;fC~7Icy>-i!sfceiHig
zUAiP8ZsEL at v9lOI*}F`n&x8mj7`e-0=geEg#$eO`%eelFW*K9S`DgL`B16LdyLrBf
z`#Mjt{}f;Uu!z9W@!kxoLd0l8$_-^OlL?H}gVK4kBnY23Ye6iH2ltZ2 at Bm%>Axjrf
zCw0fiu<qDpGg-Q1IZZi~iN^yQG(28tj7QfBl!YHPz66#Z6HC2EyDWKSY75bJ2GgVF
zJdFN9SSNnoKjop=4x9Za#!A&rUfKL;X8zKJ at yzVSaSI_zOl*9 at ytqY{WQ at _+|K}3?
zNf|M5OB6GgEQwuguxraP^2M>V at 6B5@hl!ZEcus5rGXWM7w`dxPiCY{yiwYOLboT7n
z#n3u4d+CA&uC#v*GWJc&F%fYIGZ(<7jd5wGVXbp0V+aZH4{`UMz_1xDfjP2)#B$85
z6qqSd-!U`i%wZNSUC2l<EDU90mM&h5v4FbJ^AQEjU`h4*uYNTAwGtV&H5r#BRN-UB
z$mzt7<=eE^va%~P#?6hUW9|Fj`a`oNW5Of-BmFU6286zHGx$vmjPhrgFn^yQhVhM@
zFoBi9CC2bCoIxFFtd75^KXo#zhYe#UPVi+IzljkH6M_Ml@$-rBVVH=(5Pw7dui|y2
zr5-HL4trn?@&2u<u#u^HA;)60{*r{)#jM)M1h<LMAYHGnFy!mQ%$gUAk#k-=1My}?
zFN#~d5bcj;HydS)>yntcv9lEO7R`=RV4yO%3?sIIXO%9YVvcb||9usc at _!aDcHW|d
zR}oo<VZCiMv_EEydWd}{PV}D;!451#nZ<NiApIuD6akUJ!C=wvXD(T6?DsB9P;WY@
zEByQ;{Cy)7xG=!Nkb$9ljS_eY{6x5<=%^slz7ZE=c1MuGKWsv1gd%W4xI(}rES@)K
zj$uOhLzu_E2owH`FwwsV^ZXZK!`}#_vyzXmum8k}jQ at lQp%WO0%S`OJf}zzG;5Xc}
zQ?<tgV$Pco8p4G6F%yHsI+7a{2FrLAZphHbF#Y+=nzfitgQ2r$W0}D&$zeu at xRBvr
z=7n&haOhhd&0&zs>veOy%Im*TE}gb%)&HbeGNvQKpOibivp(L8`>*SZQRiQlYYhLh
zVmnorjCmvOzbqDU$N5aa*z{ji`*nN#i2$Cg0G-BwPWk at 1MZhNBjQ8JYA*7*;sR+Zu
z%XpP#=!uweUUf9|L9tlOM9hs{9Lp at 38@F`9EG9aZ5wat at VWycqZ$a!5H$=gt6}Kps
z&Rs4m+!$|fZ`hw7d-dk~+Uh$j6Xj#Aq at W=JW*CD-BV8Ph_Yg4b*w_)~@j8qyDBlPZ
zB5W?!k{yf7S1Zd-d5aL|PZpZ5%J)Q^PK(Z0{xtvB3s81&c@;K-=4)KMc3O;%@tG3H
z$Z)-FT(d&239&H=Og{!YDs;X!RG+S%jNHPRbOtawW}*`t*;z9aW*XULGZ)O8W#ktx
zH!>(dF_%vA1~(lSI&?M?vi*}q at fa%CvUza}X3}*JgK-{9uBGt_|Fw)rr068tgxHz0
zTm^&NCoi6t5bNqOs6!&QCRjik-87Y9?oh-m?qpD7CI>L=-VzfNGjI0mHT$bQsOUMf
zJ8eK2cb*8b?Dk(&z%?dr>7s<u>;;WwH>&X1g|BsP+3l6mExWy0Bg=08yh at hc46XC3
zPKJd4q*62IMk{EZ3$R>P80R8Jg4qiFM<VfdS>ifqDC39Tfp($}w9va){w=|JFn%u9
zbIk0S^A=!thOVIgzc3%#>1Z9ORsBKy*YabGp%FUfx7b;9F+>$?Siiikr~f1$%+<zx
zV(BW0CJhN4&(40h62#TTVlpl;fGn9ilV(XT?-X=Z(h)Wbmlg3bZ+H=Gq$v#7xL86b
z5W?CJu4Cy{HFhcE7oe-rO-q>dBB-72X+|$t8k-OomoV2I7nku%6O5ajb7wAapSd(4
zPBABTk$ZFkEX8A_V&=$EBZZ3ixFzng2t`=j^4P at +C}T<Nhf8A@#l$LN7tT}Q!U3D0
zGp1ycw#k{~WG4)T9|t=KiDVc_A{U4nG#RvntR_c at EBO-g93^37C8rBn#UW%3CydBA
zu1Ld0ns<<<25H_wni`~8j5K|WX*`j}6ltVL<B2qVkcNjeZyU>b+gQ$rNaKw(wkT)y
zKPjgR(l{cG66H7|jS}V1G-6{p%l{!ws!O^{hKtT+qf5R^p-ZXDc9&f)dtItsK6UxR
zrN-r?%NdvRE*D%bxm<R+=F;SH)8&rKU6=bVk6hYZUbqmx8Q+|5#kb|#^Lz8(<}>^O
zd{_QZzJTw^_u`BBQobL596y*J#*g4n;ZNny;LqaE<uBmJ^Aq?h_^bJNyB9x|pU%(V
z>-Zb_`TRnDDStbE7k at 9mn*S;P3w{m%B>xQmJpTg!68|#)uOsPSMWfgFe;rBx8a8^3
z-^BmxNNO+cBX$<MirvJX;?ZK6c$|2=I6 at pHjuy`qFA^t+SBewGsp1V{op`gjSiD_a
zDXtbD79SU%5q~4TB)%$c5#JI2UHnM=Ol%@Cmsm^eC4D5$5?6_v#8Wa_B9n}hjF&`6
zq9oChxspYa1j$NCq9j$aL86mvmK002ODZMRlEaeYk~5NTB$p&tB`uOWlD|tHNuEhe
zyv at C>z3sjGcsqN$db at f5btLU0W?pGj`bwiSUTIYMN~49ZG+OgYqfM_gN?vJ{d8JY5
zD~-;0rBUT8jTXMrXw55)Hoej)d8JW?)u^ZUUq at 0#%oh)3ZB!}_5C^k1Izv2LynwY)
zrFgA4owd<Iak+RGYoj&d)8g~2jW&sIi|?{FN+eu~6>Fo6gfAJ&+Ne|#APHt|bcSTM
zWC3fVO37MDI%}hal5)u|)<$b2rzPiE8*P%@mfU4+6t}{?tymjny!qZky*<50d;fJL
z?J0a)=q%(5hYE$l5kj$0CJYb;3nvIC38xC9g|meVgo}mCgsX*#!nMM5VU{pQm at h0A
zmJ4?YtAq!IUkHy2PYcfrFAD30*Mu#?+rqoT--J(uFN7u{uE<K%L)26Bw#Zq;7Y!8&
zMI%IFkxUdI3KmTeO%hENMT=&O7Kj#$mWfu25=Co8>7p!AjwoMLEGif65><%~ioOsX
z7o8TJ7hM$9i~c&2zAa=}jS5(eN?DDDu^OGhYBZkJsFKxa2CLCRR-=1ajn=Rly})X;
ziPh+RR-=T~s4c5ehSjKm)u@!!Xc()}8LUR*S&b at Ljb^YKEo3#im(^$utI-S4=rz$_
zM^dWM!9uFh(L$=x_k>iVQ9`QG`9iAEl|rh~G$GaKW+ByRg^+6Wu#jr>oRDhts*q~*
zZ$hfkXF{q`OA*y*9}(5)U=h{mXc5)udm^gQC=u1 at d=b^?N)gp)nuuz2vxsW6LPRxs
zSVT2?PDC|&Rn#Q<>quJdbJ*v&&l#T!KJ`A0J~w^t`uyhe%!kO#W!AEuvbSXeWP at cw
znU_o|3y_VMMaZVgqGj`C at v;@NPh at Ll=`x*cv#eOQUA9+tQ1+$lr0l%xqU@@yNp?r}
zci9u!3z?a(rEd at 4-oA`4-`CC8(^u>(^L@`Z%y)|Kbl=&&3w#rNSNbOUrut_1=J;;$
zE%n{yTjhJ$x5oF3?>D~nzSn$j`u@%LH{Uj2;`i5)^srA2H2MuRdJP)=8#LMmjdGz;
zduY at d8WljJ-q2_;G#Uks&V@#oL8EGDGz%Inghnf&(J!FUbI|BzX!JHT`Un~|fkthi
z(Z0~=P-t{CG&&9%odk`}f<_lZqe^IW12mcsjaERTpF*Rjq0vjwXbUuY9~yn>%k}%~
zNLu4_8XCO>jkZ9e_o303K3tg<G};Fmb%jPpK%;)p=mcnV1~j?|8eI*Ira_|{q0w?^
zv>F;c4vk)bMjN5gyU^$}Xw)1U?Fo$zfJTMTs1zC<4~<TRM(0DLE1=P}(5Ma?Erv$-
zLZe?oqvxT~tI+5jX!Hp*YUXF<_t%m1iQ5Y|;?8xqbhmZ4ckkog*L{GytGk=K(A~>j
z>@IT;a1VA5bD!iM<vzoGmiv77MeYgiE8IVEPjpXpPj}C9&vDOpFLW<=uW;Y%UhRI^
z{Y&?g?q}S;alhz(+5MV(i~DW&yYBbhpSVABCjv8kdCXd1FX%1kD{vOL3Wf at Vc)Uw2
zkO~3>?+L;L5rQbebipjaT)`s2V!;Z*YC)o4tsq^HA;=MI7W{Q2{i|rSQ1I80l(?J0
zMy+9^y<wxyu+gEg(GjpwDQxsT*k}Z7bUJKwE^Kr$Y;-kjbS-Q&12(!DHd+cBt%Qw!
z3L8BR8$Ayjt%r>^!AAcE8+`;Ded%r{Fo%uyfQ`Nl8|A}B1+dZ4uu(tQ=y=%Z6xe7q
zY;*x^bQx?^2^&p=jp|^dTkw{*zmBASJ+)o^-U8kR7+?S}2yg>Dfzf~r;A?q)LjVCV
z0+0Z1S{pwRFbePi0)c*7CqEZpFyIah*E+3q)Q(;01ULf&fuY*5s~xo;tabvNfq}qK
z?FXUG+U!t1Fa+=bMryMIoVD!%d|(KG at 8|}M)VBL={W1oK1J(f9z#gxE`$tIe|H8lj
z==cAwmj9#Q|LFIxJU&?dP~t5T?f3rr{CV%$vu}IjcG1{DQ*FjpzT0oC_W1CzA4=XE
zYxzUWSUi>se=Yor#x}34hW|PE-+(`nBEIy85=Pp*(o>4~(u&C&zOR^7aS`-842#B5
z4zHc7T1hHC1qSWx+S%W)KgRcgz)-*g at B$=&KM(>;2BLvc81tpTI3OI51AZ9ugMmn3
z2Cx9YnC~|RkOA)j5tsvpVB8k~BLE5Dk2wHi{%Q|kB;XAMU=A38abE)X10ld<%mH2)
z_s0V70%1TDI|nF?b3hX4R^Y3DdkXOSUz!8{qu>9lGc7~<5of$+V*p-T!6yUBATpQ?
zAwvl+YH)f8TRUVp89}_rC^Cjf$XFsJGU7)9aAx~G5==r#IGIQ$;rzRtOeZr)44F;l
zkp(0UcVm~4kI2XDozqm3PBMs&Y$64yOF7v|_L2kSbKJE(O=`(^<T7a_H_0#LH at xNx
zH)_d$`rv=JH~yy&{{LZ&Bj|w~oT4xxBXQ0m73VBouxD(z;JU)s9HADVmN;R-!=z;e
zbVF~oM(?yC`|$LF7tUJD#aWB{IBTKAS&R2@)`G!V3lp5_n1M4L1ZOS?o{k`RiUH?u
z at b4Y;_rA!{38@%7Ytav-I3uh-FaR-KK>3hjAY!?Krw7so14EGiQ1*$9OBf@}FiPO;
z4&Z^_ECfX4Iq at XdFlrEt8~0J8VUTVF#*Z#!H25*##o#57)SJx5h%yUf%0l9U5dz-`
zAij9TpC36v{E<%p`Ifv(Dlpc}!j~n~s8tOKf_{QQLs0YaBpxG>6`l}TfpN%`On`eL
z@{hnc6p6AYL59fyJw5+E!lR%yIowl$X~1+q0n7kqqTFb*5h>$QT04m)TQHW{kU1!A
zE+m+TeCH$H2fzYodm-dl1jNA|kC-0<i-9FT0 at 5#qyvv}~<<Qp($np{5u0$EDka{)w
z6eHtM@(I$afVHT13V^dg1ZRUt8h8zWvq1!BgUANtp at q&eU=5k5dlvH7!zOabZITOY
z#On_?k)O$CwEPyt-wKTsf)*i<Vzh1<_#J593bgk=@YTQp;2>}a_#F5G&(zeQ)lZ at Y
zPr(vSBkfmcsWS*Wi`t%p&D5f%=ON|S(8)K@&9?}<0DOmby$E@}2Y(5ugP!YQLqCAO
z47sm>zY0w^AkH=T{Rq&{`CJE at kY_X8EzrUZJYjPanz)6QzYPoc39WwzviuA^{tcG-
z3oP<3WV{Ef{5$OSSF{7Q_y at 4`-(c|%VeOAl$H(X`Pta3Zk#8Hc_7v^^4E%H81+4XV
z)Zr!2PJ0pur`b4Z#Dv4(>nmLdmot`h<v0^d at I1Ux!3zF1c$Nq+-Xq<C9)KNS4>$ll
zIa^6D&KA;}6H4CVgy73??-57N2=X?koxB78z8o9k#0e%0$BXoXzcZ&h>5uXTaLy1H
z at O(}x8OWJSTsh0hAYd>sgfp8A1%?4`2zTdL5CO{a;A9XXs0i=`h65uwZ;_Fl!NiLr
zC8L1R at EZe&0SVv@`NslM at IHVq$Cmhk`ok{(^j*$DG7bm?-UEVwU?2n-4}=0?KsYb~
zn8 at Lg2*?x3F(;EiCvz;x6ySa26~%c#<Qx++l~X~cae9#HoN+_}%-|d&Ga*|v5Q98s
z0kObrU=A=Bm<P-UJ^&T~3xP#I9A`9%=OmF2k^f>K0aymC06qd%bHd2S95eC>cqQ8H
z-}#LrqW<H^k##`YI8qY~M2sV+6ywOnslbeJoXa1NGkNmaIFr^%<4oEJFbg<4&Xo6J
zoT-%vC>dwkjSs-hXa?A1z;aE=0JA1M%GE?%fuUwn;s*Fw93_5$tr>aAn6<AGm_1yR
zVOG;#Xx84o*R0)1YT-n}ENY(HVmM{U{WTa<?@KW<hM~{w1&<G@(7vY3Fhv^E_BBIL
z(RM&NJcERJWsu6z8RXok3^HSE1~~)%@4!j8rvfHGD&iP_O8X9uLzEjkcoU)=YUClK
z63ct`hqtaP)kYp&QAy{5F4V0wQN0bFv%K0wWeYDZ^<M{n5cDi!Mz~7P4&K(lo5GC~
zovPkoC~wX+QPH at RR~mUU at T9vTAIf6bQ<}33Aq;q8!Y&ix!%@<>5Ce16YaSh1DKPq@
zW543f@$OqHKaFp0_L{ft!eQ%6{cSA`Jc^*P*!(GP--#z2b0w`K8^@#*Z`z4BGw?JQ
z40Egul$`;c)B4h1hn~B#t}d&Il+NpDSNy1#0?+W{F;Mz5AvFex=!5!n4M1$AIA9Cf
z1mM>>ox$gS?eAWyH~jV*BqVzcZH!Mq8vR)tK{#t4poaQFyM}O#)`p+4u0pnccvq%T
zPxNpqep0sG(jqdT4H{Dk*pi*b!U at KC>fZCpEoI#}Q`_;Q;&D2;1#sKibcE7r{7tv=
z5AOTaZIlgcA$4{te=qBPT|Sl#DDPGNH;GAxK7)7zD}YM}Gsv#043b}&L9)KdAk|-I
zkittDq#pd$T^Z!lEg3`!SOHN58Dw#O2DzArKE4@!9FQV at +j;o^oIx({1b;4rOoIOg
z at JjH(;Q41V$oW%<b0UNEK9)hg{4#^g`XYn8IE?fN_XOO4m0Pj)8t&?7&Hf=I|6T?e
z3J6|gkS$L#i1-20-p3dNQ~>2bF|Y-=Xp%{`147eGGTtncT;pYu7u-zPqv2m5W(?XS
zcW=_)Rr<R?f4&$gJO24%)%VALG|g#ICb<uokI5wS#hGNpSRDEOfAJ@!c^QqBvb5j*
zJHN(zmy74`7Junicqqf+>z}{ne!P9zkn)`58=oblrJo#Evo at eMSZL8)xcLK5MS1VL
zf1j{&fOhBV at kL9gX>QlQJ#bi5RK{laIUiM>jrnMcvT0u7?FpL>tcWz3a7*pn`>E}^
zYjHp9y70vZ&lg4d?Ou2-)7i55lT5RR!_L-tD7;pGGTm+2)Xiy2A`YtOHAWr%W=)T;
zdJWq*%>EPG&C|E}>xYxbCkcvARlof at CG?@aSMnLN_Zp{4sy_-mHM`#Gf_Cs%PY3yo
z41Vy*nVBaRy4_P$S={@^=5E#xrYHNXU%1`o!SsMVz2-DkEnaWml<WOozq2Au at _U26
zS^a(c$@7=Hh=K<Q;@5mLJH}&_2Of6v7;b}}$%KSOwn2wj9w=Y+O{!F5zud|4QvAh7
zk6E4_K0Eqj=f0<;k&OK&tP`I>(;EE?slPEFw&NLirisR(ebCgRlN{`rfaI_GtCZ!9
z={t`L at if3#hVnIENLgcFXN&9T_iy%b#QH1!yxzLdxaQ86qVC?Y{J%L~p3!&Ux2YG8
ztZA5;Tk>1<?<JAFrXTi+ at HI<YH$)sa at Z#8->CxlvEbRTOxAoTtWNRV<lkV^R;LG{X
zJ at 0-|=+cw-`3Ci&$O4=4za8n}d&A9dt5eJn?STOYrr)^K<BRuxzPc#M^V$!gfw~bN
z?6LLyQPK6~`?JjwiiBeZT$SHU{_<1RmdT$_y4-r>-ua#D(!2um``h^0eeXVibL^gb
zMf}?Dnw{l!&wr7uc;@}S>qdW#(lVj!{U5(L{&Jt@{QR~H(`J5N_EE9ZR7syL4p;dP
zH at Od9s{i;_z`%U}u3vZA^wltvnce49?Am+bB(LJ_nNACXYg>D4S=IB46Pncpu_j+6
zMW;q(EFD=gWnxJ2#k7gVKlZ9GZqR$|p1eaNF3_9wPtscl+|tM=-1<Dy#K-T<4&NM)
zs_W}K_Fvzj|3qK%=>4O5-p*TjktVkei!SEsc%_O1MK^MF3DcT4r<6|#uNM#0H~;FA
zQ?g5uR<b8czc_ZF!{iC_3pdJAW@(Z{nYBf4<$hK6Q`&;cpDGsYIJ(LGtAQ^L_m3K>
z@!fiWcUy5F%~_tEc01}x^Idsb{VyJuZHnc|3gNZ+Ar-axHpN#R3d$V|Y+B^WA#EQH
ze;732aD7X`$BsLh47vZ0`lD9CPrupg!PAy-tL5dT^A*kw^Zok`h|yGd9BBH$WB<tA
zUu=o1Y_~nSD=&U$#gSysV(ntj;=C-I@&X5|2?Z-3?$#ulP0Q=<P?)#WrZA~HuOzod
zQ=!e(6x~SLTHL?7Q9eW$l2)59-~VIsk&;!VB|BGbE7`uPyky6!qLRv0g(Z7dm6YsS
zRa~-LaX?c_>*H};YhtxlQ7F$5Re!60zqlbMNI7xq)*^vYwC}sz6jPVYqN4A%rcSe7
z6>_*X|9MGT<oe<m&d%%@vNI#bbZ2Ia$<CaZZaZ^htaj>RY<B8ntZj-K3if*o9QTjC
zp2OQ7!-IRvehK)>nBm|z?l%R$D`q74&HFjvtMa;w%40n4fAy_HnzQEC`r^1OT9*H|
zhPBONg|0qHlksSp)`d4s&wn&YzNI-)Ftu6z(`L49x at r!rUmTbFy#Fe7N%pFgl8jYr
zOEOofN^({yOLA8wmFQL_mgp7wpv3RDDykZC-mgMERo~@q{W(u<v*(7AS20-^Uh#Ym
zEzhPn%Ar~Jtv<~;F0KCdPaEY)+yl+OUa!+s6`bNt(tNe9CGV7zL-1a01-BtI@$hX;
z?UeaVm$`MVK?5IqE+`KPv8>J2+*zgC at 4PB$KeI}ima1vu9n>(qsu+81v_|kjR<u5-
z*f&LycwK+CTCuUIG)up;Bqn!a at fH1kCR#VKN};dn|81tGG)8x%Ea{0&u_Dj6xWQGC
z*x=x=Z20j(u^?MkygGP)=}()tHgrz+zQgNu{d7&GkL`wNlAiFKRSu@**?P+zKW$9;
z`nsOCN1tQ4Em~jjC@(pCuReu0O_6z|47OOvt=?aJM9(Xaaj?meZ`D-9^{v0V^}zgV
zA;I-6*NZf}<poCfxI at L<I>@vfGS!_`BMx6t5L$I5Sr%2+ulYldcOMi9vX5 at xq>tNi
zD|=Z>mVWnvnB0YI{bF>eXWjn(3$ykY(mM9bY$}C}EnD^1imjE3#4Gx<hdctB<NIY(
zz3ld5<Lhbs2W5iniN~(!LyN8TO`m7$c^vHlUgBG+XoH^Gimk~ORapy{{=lZqZz_$;
zns}_?K+}tbS+e3!iuRWz>3NAU_D9P4ZEY&us{gUr`n>|Rqw+x|)#c}3%8LCOkCq`$
z733<0JXO#`RgA-fJ%Vi1^LfGV(9_v0y>5VAns)cXtfM;+zB|SN>FjH(uV-p at XD!st
zi*k at f`3-$Hx*-pg3Cj98v;Hphl6d$`{Vn+>_>I|LEI4#-AC*y&MeDcyQkFi~Ls39w
zx?C(shs>E;v=uMM<Lh%(Y&^)DrQbDPv4zIDZirK$t*|~+aJx at 3)wQ;S)?t-QTPVm5
zEw+SiAb*KM*SJ3<uhx(UbeyHv_fllgJgyk>$ki4u%o at 2T{#<y)_f!Yo+G6Y6qdN+c
zhaCE8v+h!~KD4|+|9DrP-fpksR at 8IW{*q04--;Ofz+>43N6KPg!zWVwi(IT*WdrM<
zWMwTZ+dafyE|G82>>RAq-r at eBJuVk%il*hPPr7k1rTE5!lwyU$BTxBvL5FKM1x at hH
zy-}36KCg0eugAkwKbl6WcAHc*)N6JImwZ)}RLzV2K1EZKtLAO1J at jarLYHzvwVShg
z;H1_h`DBgn5PMm%YkE*~UO`aP>C8uEt~%{D?%B}98wcxK<oh*ciaJ at zRexE@l}2rO
zmcH$`TiNCF<=;Oqkypt|8aS<{1AlnlU!IWG#HQKbR+4wYp<Izs-||6D{V#$(nrPKs
zUghKL{#zU~CmyTSHx?av;#eF!pmCGxo at K81hZ}m29wUziEv`*Y(rXGs^s>Sc<7LIa
z$Jdr8Juxk|&OsaI=G$fIeL@}cwI#Q*r<Zs{3 at _b~p)In`*A`Ou*3FNcLANO~LaLsx
z9bT%P-?&Gs*C?`bZ`&VvVp?de2*2ErF?nP|Ze!u}15Lwn9|x7|yYddovt@;@(a(#x
z-!%=(%54*6=`2 at x+|VRnFGJY%=Ox^OjYUIp>TeI6+*+*oA-tkKM|-13wo7%?prFKw
zDUGG7^_CTnlhXRS^ck*>8q`>+T5nUXsBSD*t+y^y90*B#o;18V$_2W60(iAL53JM3
zvUK9!^2plMhAzC-kF!hXIOc>4llO&RJe!VjJ1M;4vXYnCFpRgaVNlb}ywdgM4QqK_
z71=@AQ!_&ov-9d-y3DV?rO-8Xljm!avvlLnVw|sz%)VD7%Fz}NjBJV<7&*N3!+rJQ
zTiHb^TwZIUeCdhO$Js?AB6AR at KvohpOIwDp5sFETh4Kk5x(_+cj3PTUvEWcp=A=x`
z0B)V8bl~vTVvla&6<0QDOR{vS+1$%b_92^3RM31>1vc9hdRfVo{Vt^+a>9$RWNHfs
zI-qQa)?!1rRjEP`890qaipUe?S-N>o6cH{rKjfgSx0>!MvYVN$2SQYGJJ?n>bfWvb
zgnLa^^4YJ at _jj%R2kKo)<1=U<(iY#!F5G6Fqm8!9l$CtiLmTtBr0A2!@XIT$tq}M&
zKcRBx?|mG}y$G2dT3h6iE}rojT3=Nc^HNRoqbVu3HIRSq at u)hKy|npBUeVfeHqF7H
zY at f{hDDFjn(x5#51+CA~-QlAzZ#0zsWB$lJ9}d+fP0oFoq0qNRD|D^V4!P&wM_rO{
znHI?u1;ZhuwrF7F*AuN{U>h|3dNytG_t{h at 52{}4q;Q)`Z(gn{=(d}UmuW1cprZ`b
zO$R;bHPLozm+E-`@T%`KWF`Ak8VmbH$qI$P*Oq1FKAi;nEV0ggu#oBuIv8q~-CCTb
z>-v=<r`1`JgSFQIP4umYg+p)sQYdslJ)#0mY**-Hg(7}!sY0hw3yL+R)_I}D4L at p<
zH?8G;r_k{d<#pkSKV~HVlA`04Y)$6<ZPRU=?-UhI`{V_!CXbT}hw9hzJO<XKC1&ZL
z?Qu+pY>vav$9JK51Rj^)9#qtj;$PN~$17?mn>?YRyrsf}sV(Zasj<-Gnj`#VC1>yX
z7dAYV6%KOpFKYN5^=8wLyuOMTng}`69znb+$WZlTX87TYS=6m<sXd at +p|S|R`mgeD
zD$?qCyBsUSuU_5Q+~iT(?BG~<v{<FLTCXZF&sJnKrmF5a?)LbhIordzHZ4w%{+o$$
zJ`H{Bkhau%gLbFtmi6a~t>G6nNzJ|N^20A)%nrXQ&(;=N!|tuOXp2<0I6D=Y;TMCl
zQJ2&crHV}$U)H1T{j|mMFJvWO3~%l_FtWL;p`W=_FYgk5 at k-wLZT=hYm5K5ji&V+x
zW!hv-q#`o>@OAXPDJI%Ix3aeh6_d23+;2k at x1i6-GF@&i at 51&46Re*{N9NW)%hGK)
z@)+?{dW&*JF4|X5?E~p!PV9V~1poEiZ8RV2%yZ~tjp$?1-=L4_mOp6ft;nu#+j?NU
zDkS(-zQ#U=GEamiZr$giTehM8*5mB*&yasn|DRs>yJZ`~E52j<UHNC$nfD46kvEX{
zOf{Q#pv$A>9G9C&`-t|Tt%sU=b8C%#_>w02v1$2diiB|C^=x_lfauBJ$#t at ls`)`#
z$1~Gf`nMIVlD}QwqRD*pz9c6<N|YIX?uxSUuzn=(vHmCC1KKb4y&FFII_#Fpa1s44
zeh=IKE-NA*7AhjJX86&c(@;P1=+v;L46M2K|MY44>?N0uv<SA at 6gQ~hKe41qFjE#4
zIKC-EaiIR*^n;F7R|%aj%0GvG1h-7LjZkbIj{H%^`r2xRzBzG-J<8entb}{Lwqmeu
zq-uR%>TVuyokJ;Y>yf+Tw`pfu=b!r6I_uOL`@qKXw+H)98zBCJE~-+e$sg9gV8_k~
z!+5Z-oz_KB+z|bT@!%o!{@A8m^}7i>9_%||tTV;~L!F_wnofHDyvbYedwmPWH;m;Y
zzg<O6?bxah%6yzuzCnIbb5hZ(sRm<$Nka~=iF-+#mZi(zWuIGH!S=!LG^JTOjyc8%
zlYx&s7cASCmWViO8*cG*S-OHLQFYCF$J`Aq`rEt*kF(Qq^trrKkL~Q|Bk#l>2V5R4
z`&1jlOaFPkXt$=6d+B-qEM4Ak$IRy?9!|C8lOytbSkFe-Q5vRQi~QoF>eAHKhgh8_
zPJgV888z+3XY%a&8(3eI1pQiDIYig&>X<LzCf6x?G|Wf-2i|R!XQadgyEFzO?lu}X
zYX63o$NS3 at sXUV}<=(*c#G_kqTc;l=-m1qK^+fZXBFzccJDQzTrolQ|M-rpRZ4NQ$
zVC3#qBegNsnf_$J$J%I`CR!i3Pkx)1CI9YFiD3??f3o#J(9MuwQPZhh)`ootBCntB
z>>O#oDYQ7R$fbJOXHQGyziAmkt0orf$MX$28tAv__oxHfS*m1<omqOD$Bvny#~bP}
zk4BE%vx-w&+Mws<+U1Ottm0^PdN^%pvCGz!4MsoMdm*jmojh5|<B$_OP=>^#=-rDA
zSuUj~C)D5gY4c9f(5%t at w6XB-H}t)V9hD=;#$OK_ at orr+e<AG$SG0*Yl6zHT<=%8q
z6<A{KE>BYEHHm^^gk2XEpUMp{8?d4Il;e6jE{{AKe~s3)`IlO~2G?4JcN7((s#9BG
zW7V}~3Y`||=)78<guchFuV6bdkCVz0du(hi9(6!_<5o=BT1EBnUCZ7du3mbesmnlz
z2fH!8m3*M9|K)LZS)yYBO<$IHE3bT!0^vh+^|vuT(Rusi(gWe=u4mEqFH2NJG?qt3
zOvc&`<Ib_r#Joxu-O>XtH<!{iC7t)t=XYSPUwQz2WKnHlzvNbDRe{C!fqFLoq%7Ua
zrI>dy_F-<*J at 4;Pf%!4}VT9sQdkMF$ad(_vQG8W at qSPa%cE_sn at QNSuHKh$}Ee~bo
zPTN7{QDkb=S-GQZ><XGA9J8s7q;%tc4SyY#wYlJ@)WWeY8?}iZyCKV?wEhdz(n!>#
zwA-{C#et(oxF=7Q_8+W07H5gEhol`>4M(4qSnP;Pla)NV&Dz}#?wPbi>)f<NdH&9N
z?sd#@_eZwJo7a^;&R+MSU0%55)vVM3F`H6KV%}=pHpOoLp2 at oX?utW=hp_G}nc7-^
zpL at w>U&Get{X?#tqq6Vmk)utq&Us#<*e5G#oTp7fnjJ_p$OGfPJX`b2%9*l~u(F*w
z(u<ATS@#TC$>d1uqK1s1XJ6^Ie3SQ6-p(thdC3a>&)bg1X-<xB4|)*le2)m%A60MF
ze_QO5cVeGPVp)NFD<gGD+aOmdm5b$jL)I<HB@>4q97JVVRdl?3;l?AC)|p4Jzj0)b
zBJ${wv%m4M=E$9O>*2Z&uYAudR%FqBB)^wesM(kI!?1E(v-=KgO-pQW;T3<Z+hAgs
zW3x=2%PW`X at apB68L^ME?dNJoXr|?5Xi7r#M~-06p&-gZvrduIJWw8~+2L_lBa?5b
zzcIzZe`Z69wv5`1=4|RT#RJVCZXM0Xv0R>^LEo!8K5+Tb-*4rW4Zf1ZJ9gugNr`2q
zsOn;V;~|gLwfh7%^*20Dp4g2&s0znTp;?}Ki$@Jlc(>&lzn#x3Orh8AR#!@Rnucu4
z-JyX6t6Y1^qKe*yjXikI49>-TSkqPnJ?;s$%B;$B;O*<1Y2(w7(^wc4cC=EPY+2kV
zi&uSB8GiWtOxT97pxQ3OqPpRU|K5gBmy^%;hM&8dccSu2HZNJS#iF#~NlTF=yRlG`
z;~(BI-KMl*YeBg_hd1YXHg6|%c<ht!a+7jT at tpL_d8KiAyNfXfJ0Pqi<hygbuP5;e
zRmnDGpjb=T6!rfc<y2w4l=D!7_+ at dQ@BW)=y?s&tLyF=&J?ziMU)qp$bl1mN>paVO
zcmVknstS4*^-p2_(?9+({P6RfhdbE();kpS&&C=*=V6g*y#>8SzM at L*igjw&s<-nh
z`}piHD3Rpc*eS4RI at doSD0gyZeT!mpV=Z*H2jkGLl$f*@{T$2PF>85M4HwUC!`Sz$
zKG(90);l!!=RKlSi<1pseEnHoOiHOJKk(9$eGeAr-A;+zFiA7bS{=0Qhl0T3U-xb4
zmG{_g>4r(XY5gJ_OBIvSo#}diie1puhuJrBQf6AVh;r@}2 at mT(Pl at G8ggK#E4a0-#
ze~1p6`c?Lge6)3yv8^j5Yi?|dOqf1XKEH8iursb19nxK`v+j)-#-tCT`ys(D%`T36
zCr at q2Xi>sl6zq~d&^lEcGsOx1=`N*cw~DJtO<vqf%?};bZ27xVX7X+bw;)Zn=1URA
zvEb3uqZ{TU??_(h)z50H&<49{n?WBtRJf*8{f=wp4+Fm&qN8#gEr5Mqy>ZH>IJY*4
zwqZ%gmE(o)lpig~D|}Wi at fSv4FDO`*ckqJ>Q6lU@$E$8A;GJyP6x7_9S#W#PW1Ag$
zPi**`^r9VkIlO?pR*Ukyded_2jX|fs&sQ9~G(YIk#QdNW$Ga=;N6Zgu{x;LtUtXq8
zGxU|f9~yL27FAhore>Q#Pqk(8d|7eV2-=UZZq%>7>bS5u$ngmLMx97$DAE)*AnvHg
zEk_zunxav<me0_?lKbGgR-U`{jwY5 at IqL9@{SC)7xL$Z#TwA2sHsET03HO+`4CBDr
zyu!8RbWKR}7`R+JJA3}4`*dEFCo~txBXK=q7%yHbTIm>$zH{PeOM~8WkJikwSkL7h
za@<qk`PT06t5=FO8q6yXSI*ETanEFK4$a(DF8|_bNtXVpo%N9urK)=tYV7NZtg8!#
zzLjZF)UdzysNw+n?a8K}HOcC!lQSRhQdHNsu4>W9u(sR1s^w`(c-7X*z)UT!Wu6XO
z9J8=Uu0!56B{@GmD;(=_V&_eim(+0Ea*zEMO=<shb`HBp$LaUWhhJKHt2Jhze&o0D
z=CY_si%N32U&*4(+rlfZXY9<4)RpA2<9SL&{mNov8yvUDY}iWIgP2>YpZDip+UX*X
z<n3?B4?ldlpn0xbx5sm^u3lwb)a=|)mbSQe9`9n5&&eHG3s3Lkp4YCeO}6}yd;YD9
z4X%v`*Cf4FEO*`M;GxiBEwRUwd$9TVs$!ce`NgK&9ye^N8WK_O>iXwbl6ifv9N;;H
zA9|~*VG!JUUSB)x2WBn&%6y<_Yq31C$yBAc{1W>Kxqa3*A8*j7Ep*IGE~y2bVs~i2
zv27j*Ci0rDM%A~(sI`fZV}xN2Mm;X^jyDu)THg7x{$9gPUe5I{ygMEr*A`)4EKxqW
z*-??BN#-7^m3s`;mdUH?m5wt}#^bbw4zc0G2dsp=4OkPM!<di#B<@K%e`1ck9#qtj
zT~ItQ0 at v>mtx5c{r~SECnvV6U$2DbPZBzfFisI|~6Zz0 at RIe}eTP2w-N%AaNiBIr}
zqu8G)zMdCeoVRIVRYP)kmApV+Rl4w=N|+N~v2(Kq_a-nmu6t61dH<fHVg66m>n&2a
z=W)GoDs@^&Qf;Y6l_q%*)@Q**ykiYT&8LUhYt!V})Xv^fTIV=jY{<jDhG*-Er~}Yl
zfn_<?6~1(RjJ>0s0^46IM0pB~2bv)3%`T6Yj;Hq>8Y(7x=D!!!qp?)JdP9HfoDKcu
zA8j}u)fg(ndaR6lDa|BHr<!b+;qTFqrTM@)O|!?t>BN-lNt*rF^_t(HuQ6J^tuN*P
z?{^Nklz!DxTfJ&?c*QwYv))c^Q!3ADx~kHP4r-Hm at 2ippRVuwZ_L}-_!@A7cu0XRV
zOP3fo{nCcx7|Y}28)YSv+|rKI>zsvYNUKioe;s4AD(g{MTt)pI#ew&t<=Otn8k`}^
zCU(tbc|DuT!Mmf{{HVgZipo|yY5EV1>lAzITUi<ZAHLo^uBj{kAFkR`;kKcQw$;>H
zMWmIPDS=Y!w9Z#?tYsq76mj8J(_+;QmNJggjXE{NfaD4x%S{L&gscc*ktN`UC}^#w
ziyK(D8VHC;t*r=1E46*zC*XX4zt`(|o<H)s=bn4+xo7>H&*%MFB4d73rF`+H6uAOC
zPupPFw0l-y`Zs)S+e6iKBsN!eo}%vPnkgq6N;x!Zs1k9!qM28bdky=$40Kcr-tbfQ
zE_D^p?b6#bE#Cz*cAg$>PigsN-P1L-n^a_N$Dh8(c3sCf9~2KQ{}-3<sS=FDpFW3k
z?SeAe@<{peaBiBSd1I at ml+K4tp^iDxXY`oq1kd}4-z!?y?kr4Pw5z*VymQ4R&bT~p
z-g$XxVv}MSZ;yO0{n2qUPFJOOg_cCtoh>lSGrpTn*~L3OS&2n~TRDs~_x<uGI3xIK
z_1?d1YWL3Hv at WoL+e29r6Wxvk4IfuLFJ$(sG`lUGyQx~ThXfw)KlsWn_Z)jyk%^@T
z>7&dK^c`j%=DV8h8-ATG99g#U^78O`Kajb=SS>$WhcUHtGR6s<pcZs+do0sZN#-qn
zRbU;xC;s#m7T<h*a9Xf$Zg<zQx}hu5+mkJzt8Ix_Acvk9v4%}EmI*b5!C6}<PlQr0
zHw?=ipk+ON9W$D_zlhHMtXgO;$h-#}jG6^(b5Hn}pcf6`frpu- at RxAr5gz7YvfqH!
z%ny`s*!P?!;8nvTj7?wxRwBb#%bYA{r^+N1ldEvfJAtn_>7BV!o{Cw<%ftHDDwZYI
zIbE2qL&MUiT4y?`0S+=$+G`gK664H*bc=7 at R*kP)=lHtKCF_>o=;O^#CJwvp((8=P
z at G?`q!{YfF>!qCR`)3lJEb{l0eD@<%8P at h6gx-o~x^2imK=OIk`15p$Z~~p_`H^6c
zX^ZgtTf8}u6;1 at b19t5`oNl2kpud*yCAfdxcr*w!LZy-J5e&zlU*{WV^1e45bGdz8
zGI=KXEl3^zXeaB*#J-Of)C{P?OLLoj-_G+k`{<^xoa}I-3*#sQ&1nFZmlS7VPB43D
z596k1M_b>LFwW34jMY1!1IIjXhNg{VT%+y(pwrGMBssHk>9u68{4HFVv5sH8&^&O{
zWbG at Ob7hxZWa&`58y4qvAK_&=)kfLGxl-A_!?AMj);JCNw;6j-)iwwnSmUPY9=ljx
z8 at vfPEcVx1z;BOVTeoB`^lqSOOr at Vk-c0KuTemKMqT`E&o&S2?J5k>Q4A50J1Nnm~
za%K<K%#EO2Z$HkBXQ1Z**1K{487*@F*HRv2)m-BYGo6KNA+CGwS<@^1CG;NesvVWy
zesUJ1${EJ*xP0QTc!yO}S(1rE68b1;{PB>wTwQ-gL~b?Y1*&2F&bHk_yS at G5+OAG|
zI7Z!hovKX?6dmr+V^7RHTZVn`bWk3?!;<fzZkD<eD_w5xc;p4#FSmEhbY79jhn(-S
z3Olzudl}B0{k%O`)1B at Fu_$gXm%hx>@r}2ilLh>FW*%kfcoFM565rO2eH*m(q0R$T
zZMz2jlp3vkJ7ng+h+OjyLO$Jm>v%*XX)~3z{$s4)&7zDBrQ$c9PSG8IslS-rLWMx4
zej4=ACSHBphP4>(_f?Y--=@WKU`2ny at 5Qk>z;ipEKgaC}NSSG*YSFh6q at RY~>nvZ7
zHMsp&afDG}b!!4rP}YjF-%0|8?A-0_C6fCAwLDW`Er&BxmGaq6La&3~^&Ay=#@0!Y
zQn6{H+B2ZiJhmb+p=F)G13rK=-84uQuEqJ?`TrevWxq9|__l-R#Jmnu&#atO7&Oc7
zZ>BR_RR1kQ=BCIu&Oa_zb=%1IHyTCF9S0Z&w0&e)y3w&n({o6iaNELD;JaFnOT0SQ
z!ILPGp3C#pB3;5W+%5(U|KK^T$7z~QZQ!X<P6hmbb*>Y(0EOt!4_TXXx-oup{_nOf
zf0LUZKcAZp8q`CTtp6A?%+C+jAm+^*VjDb;Yp)k-J?cA^uJEFSeU!*5r^IT01zk{W
z8D5tCcd`zEf$!#j`@d_99&WkI6hOy%kRp8T9Qx&G%R_IkZRRwmei&}Ci*zR_Lp#>0
z;bMB3WL9tO%2vuuAM`&#>%B21d+!6;Rul5s5X);I^xv4ox#R+|nwg|ONu5XfX-+49
z#ZX6=8R{lG3`)qr4^z<b$^Q&qSYw!w?I3)y!B*xloHsx=j+&RYMUlkYA8jq3>fR?N
zd-%88Wn$6zUYH)!gT0`ntEt@`fmC<Li&(oeg<XtMc;K8;c%9B1su29A?XFk_nYdD@
z{!A(Cx-q4#o41?!CoePCiZkJ*jXInOe$mzndU^4@?|eM$+2;y9DbHmge=2yak4Ksb
z?MZaC_0tL7FF_BEb5jY9#zb${f+h?ATXW(5q`X;Bu8 at 8wqk09iqHOE0LigtfT<u{+
zvEVc3Wl6 at 6f;P2{Bm%$5Ro$>e9Pk>ze?Ak-HQNQ{{xzUwLsJVq2kD~<yI>jizZ&cC
zUFTEnnN)q;ge<Ay65n|S>2aP at XE0O15B@aYuNAy}COKng;0l~jnG(Tiy at t-|)Q$9F
zoX66X`M}}i;5|k<Gr_BXABnpnv~*g|mZcXna_mFfcTZB#8O;`Od1w=%Wm0$LCJo*N
z29~zjZQI0(D&{E{&idDjvnOymuL1NX)vcuzSf`rMG}w<&BRz?2kQ+SmjJ{urXA7cY
zPSDp0 at 5V$62At=@rnQZTT{9Xu7UyEV^Bl%vKl*jRz%r&YTIvAm$qUYOAI7<(Smf%d
zPcMtjxG+6ldL;*PvT at WJdo~h0miPV+>)5x~B|}$o5cuK4Xk$^x(E6((b?dKOC=q<7
zXaqJG3BLGvViXm at u@%;hY>T-w2r`<QF>@`9W63$A9JJf%=V78Ddw&c}i?p{M?R6$j
z1HB(^yVWV9ZY+2bxIyOf>W(R7ZoRLDJvC|;JT at 8}ro}h2!0+VY3Yw1b1Me^!_oKy-
zS4$xCkMNX%kJAMEXa$zB`-a7!TzK$|nraZN@^9wC3jefn9 at Y?K6Z)ukC+JdAV!WqP
zrOEN*e;7DG&xtd0?H5;@hN(Ln*Nm0n=f at Tg^^#{<`zNWq>%mu-;Q8&1Yoe_io^e<D
zwR=_2^ZM#rtm}5*S at VN;!T*!{;~Up7&frHtKOdCK^W_gAA4*^EPS7mtA`S4Ce`9^-
z-LSA*sS&{{O4YG0q)w6C-x2}-!E?3c7VwOll8B+kVX64-S1xrQ#98xWoJRO4m(fxm
zrn_e){STWKVpD9pXN|-8D2{JY539v*Lw36%UgK`y9SSU=Rk1ag-<r2`x;n_&yja^^
zN*CeWS3+;6;WY$hE4FN0?KvV?rP#yS0|a`F;yl+I at CtO_HDi12p4spCt*S_)Vk_ at c
z(9JcVn{Va5qhiA^gXYa+KceP|RSY9ohW?UsI8SeVg$3RGbbO2muEh7{7yI%*1}zOD
z7}+z~;L~6a0$sTdx>NN=$17}4Ci+`N`tV9C^mVHs3vni^A)IpY75A)RIv>3+UgYX_
zjXk?%kI3 at PQH@Fy_;`>W*hg#bJG{byB(&3pxlo~R#Tyg6pJE at q{-Ez0y8;{NJ;25<
z5nkC-yFfEq?BfH-c~rFgISzX<S1WXImS!@aSQ~`zF*X7-jsCuXDTV&)Zs%^Mmdrij
zvq0}VfVCXzHHZ^?*hmZ3U-cMm0j_5vIws-m&!>p5UrHXAzs<(<@Si~&8=@`V6~G33
z<EL0+0DsBb=Q~5o`4Y&iDyo|BBYXpqU&qtHw at LltG>?N$^Ax8hM_ayG2%M}Ab<J}(
zVcip6t(*^iZ`#%@;FzG}TOt3wx8g3}*wm=&6;>ud{@@ugc0OI2{mtG<_V`r!uxYU-
zYIWLns*ct+HR?|VTJ?Q8;1c{gV4AR(`+hYrlg;2Yk~gjay?%D2IdKS>!}DD;=(H|i
z#qtdB-a7s<uV>?>*%P at 7&OGoTRh*JxgLJuGtR=|R-dE|SwvinrPL{}UDt2h*4vTjI
z=$q81A3<4uk=Ns+i?wdZlLHyVw&TqYgvxZIFp}O=#s;h7)pT-Ox4~TE7^lyt)+HO$
zxi(4)JR=%53`u=Aif4m90>=l9aY2XP1l{Cpw_VT=KID|RX35TGhp%0Gnf*i#7j?U#
z+lfvLnn%hEkaOiG<gE(AORp_xNdV0{&t1p)dq}Z_$l1JfMRezR<^d+rY;dR?otLQ_
z(68A;6EH5m^K0R3A0Io1Igj&z at V3XfDPwZK2pB$>N3r|^A(wLV+kO(*(bq!n^dN24
z65z~E$Za3-^T&Cj$ikrM%B<H{e&BJe{i2W-Cr~By5!f0kvz8#Q2eRrfJSXab9gbjb
ziy3(bX%l3$s<m%*Jksr$la4cekGEg2t7Sc~4>Nrf>uD2NTi}Nq6t4$q2Ug;nkQH;*
zgYPS$50N!<tJs~#<VGq<y`Jh>S-v(s&#%UK)uQgYmd4?pjg>JwJtg9cF&9s33Te_G
z&>ZMO$7FB8W6U1E<Jf1qB3h&=nja(T-<)%YfsKG-lfXlb(1!xMxlW<-ckl_LM*V{E
zxx62{QrPu1uw3Y1qJh=V<)#y?9yS)*z>}PgvO$NY;grgEX`^@&)<OTe>F#dWsr4i#
zjE%S074sx_ohbv4Fp-8%>+N892G(8~#&l_F5zf{+g)Qt!%FdawuIiX*&fvcUxD(;o
zo?HB8w~fwM?DqR=6xhh at U9^Ub2V^Jv$s$7cgUUVm2^vO$b7;R<-dHN$j<Hqc8tF79
z2{Pu2IW%cs%!xsb at h$xx#wybAaaJuq$2}~(p8mgmJmKTHE>8o`1zPyz*EP^PKe^b{
zU4rYEi%mUcVOqr-YjvY at cvgjwX9f+|q22nmYv_UQvaENRzeU2XDC|ka-+8qs9ppa3
z$dp6Rcyk-hC{bdI1N~iw_DIG5_PuMLrxMy|jmZ(C^c0KPW@*;D@(AF at BJN~Q190oX
z$Se=B3wlGGMwPdJ+)~x4g8V^vlUnSDsqPZ-e;~i@@|0w4nJkUSQY;J8-m*oQ6iIac
zJ+t8Kt<O`6mcKb~${^8~R};M&t_|V at rW|YP6YLkeSUoz27AuzWb}c_Xua~J>p!MEQ
zDFO}ojd>q@;VDi{0goNoO((SV^Y>CU?Wv-g_I;w7&J0DgyLU47A(27(-_Uygg^u;m
zBNmT7=ff5Y&zfP23w`6rL%;za3e_xZ+OTOf7<|`JzdD6ufu at TMoi?WL&iNnMM*vI9
ziEO(!Zu<gk;+_>Ya-<A&*M#S6De3#+gUTk8FblH(<FNTNLtcGctbsnat;r@~VLzp8
zw3(EYCHxKWf;{kn{)G1$%<;)rixkCl4Sk|Rk2<3s)JdM7dQfkl;G~b%Sl`rveuKWe
z*~=vHmDraxT`bX)6FVC}5883h*N#WW`aZ_%u1iM!wWxdgh!lKYKQkOqDHvd)+uNve
z?4JRXYkii<Zk`<OXzLCycf;OSAr<@!xF`5dvG$%7x>alFO9V4?vf_G=DD<)-nqDLC
zNo)WH>~XwB>PxqJPtm}tXJ(NxS4e at e{!^TH&+5KT<q6)#`SoR7MmB8d#M3>{L5 at Bb
zhA}-^IXY*77H8;J&epJ}APcIT>;j#?gp)!3wm8`o6Mltl14K5+t_JojD`Wjy6=vW3
ztQ~1V8y=#!%QL_e_9wOyejm7?kIx4-Ux at mP8XHr~AVYuE*eGU8RP4)?tuMegKBqhL
zC@*t6pmMPe`gxR1cnkWXUf+JcKVLgo2p#!Yn~#*~{92t_u`A2E!|eSO{rZ5*!`TG;
znocD!eU$<jzM at CPwuPjY5qg;Uk5swyoL^_lZn`jV4yTK at ys+w4ar<@ZK!kQ^%gPU!
z-t>|tqu^7aYE)zTPs~6OZMddOSp2ayF9N#W<v(ICvQ8~@m(l-z7j(qZVxvt2=i2=l
zPv^`7Pu{S at VY-=K0$$tZRHo>ic`5ne54D)zoy*V7TV$lMHztJEH8z5`&+zNG7aTsf
zE1QO%lkn3EG~YPFN85U6*V*D}M(8(W{tlBXakqHb!_1Ontr`PMf!Wrkt3;LydV&}2
zxgGiv_HCXo9TfUfpoIpOw&Q$UhP)bM#KErbo2GfZB9f21ddqxLC(enJ^pmjf07frn
z$@g2#*l%;g!M|gD><Pc&J&Cg=Ar-p1bMGkZDQc`S-}+>h3Fb0M1nZks;s#&3wS_PB
z{uQ*gUV at Vk_sv1-g;h&3vaEdtc`kyBH4HP?#7c}2`_Rwn*PF{y)iUTMd#Y*m;LD*e
zi4M0HG}#ubyGy~F;=ER5 at bWNk=#RK=@JSyI&U&ZQ36RIXF58kiUHC4YDeAsr6m_?$
zSwq(5oo`1JppPwz#vNwZ>0&L)kAjzw39p^OdBbz!+%mQeCbo8ct<pUCFG3q2L;gY6
z$eaB-b2A`2;JsWa(dD<R$Qb6o1lttcx6}d)ta;^5PnGCDz$s4`ZH(D&DqfV<UD7v`
ztkJM6&Or?sY*q6OHVffdU}K%g;GDZQOwKvruAp7ZLWh{8i9_<P#3|78j*lB`IWjPQ
zz`qohk1IsUou*N&pC{*!<Jy0u$iY+iLC$;FsSG+chVKcNG}#h#u%(2JK>9W8#q6?p
ztY<q{Pu&)L+O%hf4LXP{<!10Rx8q{;U#|K<cyUG2U9)6EKnd(;0(e^3!Ymq8r`sC$
z^E%PjPGOzf=oQgwaSgpS+WL=C-yGy)Z(Q{4jiZb$^=w%@-aVRH3*E0mRC77UsTQe#
zL7XOM4)#UwQwj66qT~+P4GOzG(0Lfzq1SiDr`3h6ONL(G5MBJo876uYLWTbEjns~|
z{UNTCMz8$9sV4XpeE~L4I;R?RM4eL9WK(G;{Z8J8?LnBJA2`ITZeqVsiTl3@`h9w#
z$1ujZWUSNQYwHc&3ERuGh5z&Rsu0`GRz(ulAaG#Y^_fcVuL>DeF{};)4jfS4r+xc1
zoQD~as%RP%&oM`~uyh}#$mqNK_G|I0#SZ!hw+ZhRPOXC7scu0E-}<$K^OKju#zF>L
zSz~NQwE3IA2{T_c8oQ-+lZZXgZz|2)Ha=`$dFqgtcD9NlI)JIc=K652+E&PuDsaBo
z3h{0iUlvuqv#qTUIO?!e#(ZF6Cqd5ujP{wfYbfKLm51k-V1wuwNebPAemH%$trlKZ
z$jP0TA?JpiTBp){H;WH^choeag3e&}Y}4F-QE*;iMVq@}3tR!a#UkK?AE;9PfV^ev
z!ueK=y1RHfcS*0oR-n?9$jLt3iM>E<Gw*#r5=qV@@b#asEi_t&rPDqTyiJ)q)W$ur
zEO<R7&c(wD;Lp+4C+D=-!d)pAu61F>+pB1E$G)~c%*hWb-Cy#>Y;7`V!eH-cPI96P
zedr(<fd2)06#9dV!sQ9?6MH<YwPVrN*>1NC?cF at ph<=olejKqbc-njY8RMWG^y~-H
z2eiLM(827{OPKS(!mX<0p~q0?m-Kaog}ED0lV%xf|L7+pJDz#h^E$E5LEm2B%P?+Y
zQQ5rwd)7Iv7|#uDU1FE_d(6`yeW^_{#w!e#p{*9NX3*ig>Y}Y5)6g%T1}>cx^3t{v
z(O=uM&`y)PT%3S58qmgEjJ5Xup9SX`8|*F<U(EVif-y-vs&#q at 9%Ga-uwCi_??p)x
z^UI!X&tzm%vO at Ntu8j5q(+vX~=n6l5&$?=kehbd~8+ at hZS?GNe$y{tJL0`1d#iLV4
z{uMebZ-M<!G|`#CF7fM5KgK~HQ*`6Zge?E>^Yl??k>7FuYPyC=it7}De{vuAtW;rM
zRjr>NoNbKPUrsOcYmKv<urUmM(O*f|DCUNblz9Zt2#@d36g?RuVlOf5!!+>J`c;SY
z^JCvrn8|s6!nSvV{_+<O-rbx20_^&xcOB;)63zTxee3;*BH1>cNi?%lee2&5d9oCq
zQnnR*eiG+k`r}sipNuq0-c at K}BVwFfvKI2VI6?nT?0W<=oS~#^$G_nq`e<OkwIk8t
zmEiq{$hu?d5{HQF<Q>GhD`Otnxk1bdBmPhm{UpxvI?!j>x1~Q97|QMTAK>o#U*~r9
z`$g<cDSj_Gu7=O9u<$ceimxTNR4fTE44U_X!fY4{>L#|Wr|aWX+y967 at p$$xSv2%4
z at _TrBd5_L}LD<sLit&Lw*q8|Zqn0UsL38JP_;3DNZsnck&hyk!pB>SVyjyTYE+xDQ
zWXU?%W!w?F0z>IcCVEHr-g!y0YQmCc(`N1wy1HFSNnm%PY&TNgb^|@YWk(mExPWJm
z<5?b_sqn0D{8=@gl at D0lT7Rur!#B4V<JU;na}}6l_N%T=2~}*6Im==it(OFU<CoB-
z;4RF2Gp^>2FQD_^3+%yCmY0>lSZO7b`{K0d#LZ%Pvr6+s{|>WIM`!+F1s44ayOt_3
zxt@~ov>1z8*v_z^!wYLCY>KL#<kkkP!B51jq5k7*gBESj(GA=p#ShGU>O<&cx at eCx
zk3Iw%F`q8sX3U-fU#}NAB~^&`;-FjHk39+fPqg);m0h(2LsRKy2jOff{%($c33n8H
z^JjrmxNPY1$k?3}!sgO+y<JOvD!yp4hDd;!zQEiBE&Ng{%Xv~fq?qe>5p8ggF?d1;
z-YFVomt}2c`XhDjL!jBXo^|2AC{hVq at 6ztt)LPhXXWiNzp(NvR*4YWXGi$SANd$TR
zb~kJdQD22(59|Zr4?xlb1 at Jlh75u%Ev|oHVy7;~U=dz};k*vc7;CI5mRD9{SQ#wxL
zUkkm65Z42^zCmmSg6p8Og#U!#2(!tDg~0Ct_Lu|ou)^%tFuG19W8RVL at 1S#LSm_+f
z+MdO?c6^TO9$deGK28<AAtV~Ko#42Qjm8)7y+oJyj^O0ijxTPBYQDEa4wX~pb}e+E
z8UE+FXz1TmOfkmdQ}FoRqz&M8=c-u0cvHsCcNe)pn-40i5jq7~OBI52 at ZBqg>clB+
zzlh14*BjH<B?o#r2E5&B20C}x6=)pq at ID<mtkN7fI;=jH3wy^#mFDb1e(u7mj}40M
z7kHr21tE1G9&Waq*s!iM1&nfA0d(AD1J-bnrwn<OB#&-5Qh{>^y1rw%p^p<CaJ2QE
zV)v0@^^tYG%;AjK3?b}2Dy~U#hH4gQyq^gUh1j;GX2CA=$U4E#iVV=>I}hk_-`<kz
zy at tcb46>3kfg`Fs8RrV_5Bi-$I=8K_FTcbqZUx499Da07CI>yD2===eWlM$~b#ex9
z61~Fedww>)=B=NZ<MecLo*qV94!a2UF4iczvCi&GWf{-WBMjCV-c^9!v(7E_G{vT;
z^PF?U3B!Nh at ub2*=*I8Gu!*|-1Y~!gPY3z|dvo}{{88_{{aFdwM|^XKtjWe#59A3-
z`PCh}8;S2n2A$wE(>q0$%PwH at vH)AUZP>WO<~hvBcE&HR at 1`MJCc<u~xOsAmh|>nt
z!|$e}^E0QKp9lLrEo79>!B<Bi&&Tg}Re}ef7}^OQo7kNa-x{%~<EjZd%KT<qu$svT
z(lWMi!uNmhL~5d|<t;`#v>JHzs^wL;N+LcNU1-}Sx^Q+!*Q+$qi(d66`km`4<>~|K
z1%E)k-rv|bBhNdLE at N&2M<}Dqyg8T?Q~0Y*HbH44<mi$23C at -dTb7Q)pgR&~Sz?15
zc6yWLuy=*c%}A0$%dD4xhhZ{@-dx-Oo}HbsU(!3f4EbUS`=mp1>-m+w{vL1(p_i|8
zUk}J(v;olj4fMj7%nCZP4}HXbxT~76#~(g<{?**?F_uoEd%1`7uaLig8Na`V`##)v
zjo<g+{yOfx<M-Wdw^b?b*C7*CV!yOzZI(pPnjW)>oe%+?Nb9sb-}4XYG>oqc`=ll=
zqx0k8zk$YJmeW3Juct1?O`@gWFOQLO8s#g<zZCm$%v%>VOhs0bBqCB9XF2}}+SSu`
zyZvSAQg9CJ*kOak|4U<|qMF%|`U4{aCYQ)BMZ50BSZLCRUf(yvQ{=wuYrr2!8y|wb
z#LUz($k*T>-g_T<9#YR#$bjVPHyWH;rhu>4FIH7b-O6|sZRt3Kx^BV#3z!e&!X&;*
z)X}1hF0KroalYestdUmC&1HgZKrZ^qyPMD^N$+DBi+A-nB)yZ%c&D%qc8e~wG<o`g
z;aMfdXMXTI<?a(}u%~{(p3*VbK*O*vJbJ&j=;Am0JS?M~T<&+y>k-!ye4e=$qF1zF
z51j?yx<-us<;HVfb=#dF at ah<Ir-|h|Qq)~pct7#Ib8UC{(k2`BUNyOY`Zw^g1+m2k
zqXGvwqH{4e+4O8&S&F*NtI|C4%9-l{Ujb9K_<7uw!_r^dW)}M2=@?mPwv=CVB-BOK
zz2F_0i#@akYs at ZTLxIt}>;N5qjrbgK?1;7RpmTA8hEj9pTb0jG>$x-LXP(_5nCaE|
z6+C+2gezEUY)QRP5;STJKj0}0)5O(`vYz}fP1hSd%P8y!84J%5DCMBT2j31p{y|!3
zNuLm1%sV_1tZ)%ISHa9sDS9A(mms}Q+{zqR={g?|o#r)3j7J)fC*>9T(iKR<erwb^
z#~xiAXdMYA- at FLFLf+`u88WPXV>Msq{i%};fDfjyG|1%5S~sn>EXgFatS>fJY;0&L
z-dLxw2wbtv^OCcy%-x6Io)>i2OmLp1VM3|Fs2}9%m~LM^$}{GKOUB5)%mp7VYUn8)
zu6<+C(%C}uMHi9H7FGy9VtS11B=`#%BgDhe#Q|@QB=u<*e26o3L!^CSmGC3C0`};q
z_(#e2#_bn%!{vQ at 4X=w_T|e~IFZeLV*54CZ6jGPZQx1Zc%^>!WeFcW4ygY at 4T<J^1
ze-btn##qZmcKkaJkIeO>VlC&A<B=Cr&eg@%oM+=}=!{g*z6bfSHJ3>qJEo&-+b&RF
zRti*?t5;a&{WBHzGHtKLuoZKAnRgP?W>o~IJyY>q+U$xsY0p;7Pn%H at n)Y<Xyfl7=
zJ*}YawPE!;iLuJDtDX%k^`k;;2U5K2#;!4z%S8{K at yDOVSiT$23x9m<S&YherN`@`
z1*v2AdiK$=cRu*<JM{QF>;C(#5A=55w^GNynfl*vu6s~+tp2UJ5BwR34!+?Ka4+~B
zirb<J8#cssbLSa}eh>fr=U2Zi`TWX7*on5ihWU+<G!CsLz6it8t+`Y4;Cq)m^bdk_
zqArqN&CkmME<AA8?<(=n+p6H3Ml9hkfmQ>{f&6>O at 0)R7hRe{K>}1}-J1bEx7q;N1
z!3%Ggw?v*1+#B_9!{w+;4Q){;8$cPs-&Dl5cYWF`-P%KNO2~=&UiH at NwECnC`_;+0
z0y20iuaTciWpH-S5&8nKioDsGwEkoRWSEZ`IqV<6XRj_H_Lhnpy at svV{4V3nN at +OE
z%VN4&zo8gXFLcD!;!Yr|6;b647r}cXPnA;BgZ)^K at Ac7t2)(D23MY|O%0_Sow|c`s
zk0er=yk0!SJSS*sy9OWGcc4$`?#s_Bf!?xhyl)q19Tra=`ga>Va`I4LZ{*f}y_2?j
zdk44r^hcbFVq+(40Nsz;({PFOnX+(|m>0-;#Ac9SaeQ*_x;$k>HsfbQk8Xz!#swQZ
z_3Q>(4_QTuy|aXFq=`*eifo1tckX=9m*~WIUh*73`6=_hAoW8>m8rPF$e4l$<KcHH
zI&qU2{$3J%_Z;aX=_~V<p^f-7h$h0naJ;|SN%RFpi+H+suiwRyC7~a?ORyfk49Rc1
z=SO*?`PCz&|2DxL_fc^|)Rl$}k>+KryUO7Al!dEitTTX3h+Tt|1)sO|tJuFpG4M%{
z{Kk(J3 at og^WiZ|J`)Xmu67@)uudah5&Ap>rlf~O}Gd5nTQ1RszYGTLLi5L&iU499E
zyIe$g`aJoUG1ai)F~MiJwYgHPs|X7Ikv{=`Nko^^&DZh;T&rx^$`twpcmCvmLett_
zBXbnXxJ&x9i)*0Qe$B*wgmnz85WEmSZ=v~CfeCgHam7)@_Xa$-n3YQfpuq|yvjKA$
zg8BV at +L48dC9Z|0CArEcmTob<92X<3PcPJ8j~O@%Y&|anze8E?1$0N~<7zrug|(d)
z)LUV^3E9`&m%F$i>pl7SGvt>G)#7exb6 at 3R19=baJ4kG-&^|*@-bj+*PRshx1dLI|
z!b7+AV~k7-o6y#w;o7ZVinV7;pkv$+0=>B^dHA-NU08~8rMJql<{sBu1yfL7anelM
zgmW%qz8z(YT8?19mt()zV81u(ZGq=M&pBNx*4Ph=<+fKpTFLLBTW4G8f{}^idq0-=
zMANJBuEuR!abCJ7Rg+~+8S~rSq)NWKny;d3xW at k@-^FaAKaSoo|8ut^K4JEGP7hvT
zJTGJi!GpGT^z;Vp_vtYbLO_RFj7FB)5Mp(kV?>@BLHLSh*ekYhCec@%DXv+_5`B9*
z{Ndx8Y1rK~Ou_n^A~e&jl|7F)c)#r1o2OoS$@CM(WPVI_SKp!`VeQsjp*Oy@<oJq{
z#vc|R?k at KEq)Vde8m5HcCp<51Rb+hpvx5(OSWWtOjow<%-;ZZQXY=WV+6v5p6YFh%
zlC0kv30*cX&wDB;#gi-2Kt?L6sa<rb+bp^SyrH$`K)g%3J8QFC5wW)>6tOUVLpzR(
zm1A=={~a<ncju$7(oGKsnmJQ#1m^0Q7!7P|XDTe49wpec&xhQ)e9f)XktIy=7#|_o
z(qqZ87~VsCjDp7xvrLR-hOVN<Ad@>{uP8uwho1<YhItl at 1pC&s(%pbO6TxqQ3k`@1
z$zBEy at e=Vj7%yXRlXWr}I!$j0b%k7N82B1C<<N^U;LFcPeciBu*!y6=!8TWwQvD1+
zEARxD{|$UKy%{1k(X*0$(Qm_eK&PbW#(sDNV<)8(ATOFk7U1EQX83 at Ar4*HYV;yV)
z7D{ln{jsp)?#PU$2SVKyst at K&<Lm#I|KO{=UE*r58twW-G8_OulE;n+4nR*})Yrxq
z?A`Ex)uH!x!GBW=U!`DiHDibU`i78=qO<1>7>CDzv0qZy(564cF4%`$Lf$us&w#xv
zu%V9)-sbjU<{3pMWuIvjn>k&JeC4E5a>x at CQ(dsx$`hO0*_PeBLjMcg<I%;F?-{MY
z*^lww5ufN_PaPyOk)Q_W%|DwmV!5+)`!FR_>AwFxMq{)rO6V@*ZH7;Ll)`~u34X=+
zkyrx2hA9hemLt{#-c>`^xZ5NX)HT{uFBCpvs0+HDa)GL+ixrkd8lkkWy0Mq+Q#!%;
zcq)l6BQl<X4`^meEn}v)-`ScPBs_OYX>=L1^7$#y=b2<}79H!ZCVVKTq4ZoGrHgHA
z`+0^EymO`J_f8k3H?cz&URhktBLuI?Sy&Z!%RL-^7H4Ko+s`v$Z_e%47Z@}=haZJ^
z_Q%!CV~4L9G=aE}t9hKfqi*}Tlcmadh{^I8xi|XmOBL+o4W!I0k|!ng#%0VyoD;6n
z+sE1c<$m9b3OZD%bJlQO2zVsa5yty4uI8Ds@`|`yl$Fb2GCDO>1LyLUmyea#9~RU-
zDDUGjtk>woXtC>F at OXc-`}R5)vsnQ(oQu)<AyyJsd8StHT2ZREFDs4n6G|_i7pe?}
z#*~nN7z<M*v~p8C`}MA;@I0tA?jby%Vr&cnPH at DCb#(cNm3Mi3eA-+Vc7%GJ_=zOc
z-`c%N*>liWuWVVV!7g-?x;xMRpY at K_p<<=F*n)dj1H0Fc#GT;^Zrubna!W6Jsx<s@
zlLLIKU&vIU^oa4-V3ciKpb=Wui9km(2?lt?ig`0({l~yg;9-;ODw)%<ei>sjdWwWK
zC51Rc&c|f*Ast^W%rF#+rCiSNu$~o{8d%29z-}vpKey at cKP}JWp78#4_~P_Wpa+9L
zTR>T79aFmvGC}$Tk1ajmh*jJ`NjW3-4GsH%d*gF at Y-~>TF8Eu?K6YZwUDvx7A}!4{
zxP(qc9d$UQImV(W0=6O;>+?IBuWk)X6aT?oVh(T9R1>=LsEXYeG}bo{;uw5G`f+3v
z+tmdckiogK<$}K&t%66PgE}CRcc|g(Fw6TQ?-;Jn2y0%29*9>xzCP+}Er>(X(5b<D
zd*rJGe-&rYa-)^AWy=k+N!J%l^QIcvhu at M^fWFjG3qqt`*yBTXdS<vz at K<ksNCE8o
ze7>%6HGWucv?}F}n<Z=Yf)li*nQk3l+fq-JN!E&XB5sxJ3Tdy}_xzHltS?{F&aWFR
z1+ILQS1>+K2CVZR-F2YnJ0W`>z}jo(E+d{o{`mTV&vIP9u`xk~_yIbcIqWz4<JA>C
zyAa>T!y2KxBy^r&J0i<G<E=xHs;HxKk$0;frGTF?e1)muu8 at l{HM9ybrQ|Ke;xe6c
zac)mZFOwJ`c(d)bIoL-bmxr(EWsE&r#x(MkI`|WW+3<V;c}{rr|BvTqA3V?691szq
zq%F1xj}3BIa)g$)aA%F+f!y$^396N_%WD_s^gz$2*o}2t$J5FjLeMxrYM=qXI{aLI
z6kRjK8gFK8&ap-m(w0H=Eo<}R)`&dBeWJ*oCAOrX`T21flh_rt9Ft-ZvT+$R+2IDi
zZ#;Ft{#=cxvZ2GeV4(~tHA1%Vrindcp`e$U%?>NXt=O~h8x^zUyE3!iH{itx|B&Y0
z(|csge^PV`>%aeQ3GY>J`7AVwX&%OvUj!bmyU~oZup>o-^pB0jL{<;Id}K}{-rc4-
z(uK1jhHiBq6V(1{UHa7WOb$UDO?Jj&xU_J;!S?7-m at ZCry>R$%@zcBhwLmMBaxK!H
zMVER?nalk5K>sX%W0~i4j|d&6M{Zd9_UBk*?Z$h(H^YhyO2*Nn-RCr9Dw+-2Fz3gG
zZNs2<RdGsT^YPu5uoYh~Y}}wB at 2`k3<QvO++V(mPTBbSX5r=ihw5;QOWjVlPqHHY#
zBkwex;#<hx36PAfDSA)Joer$sN7;_j##1x!>|0BKI<6*&9j+qd;_D+DZ3zQE<MZcc
zaTXW49f)sH$;(n$f{i0{gVnd3w5!J{KI#F+{oC!u`<RSK-2fAdXGBILeu}|6<r#uU
zKo{N<HrK*d7v)0ev|FXUJwc}<)lud0Gm$l?S&xa?GW1qf5)&M$7Mg{HSih${+02$v
zOZXT4IT6U)M)IzDq^84^CH{i<l|{O4n?dV#VvTn5q_H_+th84U(_c)=zDmlLdP<GH
zvRzYAw#=X%C1neG2sWbjJ}N$fcmY~PPV8CXiK`;WJ4YYj72pp#gcE~|#tK8Y|9n--
zf7T33gHFa~7+VeDJcr?Skb}MentV3^{zrqObXv3}{IBTWDWh!F`$HisQ-)@N-hL^0
zJOF3a-ns8q)f6Fal3B5bvKwTl%M7yY%y~1T6D{wee$+9n4mufp#F#^05T59$hW@^A
zFb8_ys&qfpX)!h$AkQRx?omk|_s=KwB~{fH#WthO12HutMW}-fybc`JEchYXvh=&L
zI)UGrNxcTY37MduJ+X(GUc-Pq6Y^>?*6OkU)}Jw6{|9K#UklR~D}^Uci at J*wv_?y8
z!B7Z^V-QN at 04riF>9}9%gy>?bYnWX*O#$ENr)<bu7-A_5#x-jE>W4N1^95g at fcJKi
zICdrt+BkpZlio)J;TMS?{|%nby8yJ#KUO}>#u9$Nbz$cQgZJl{ZGo_VgYDTgCdtI!
zu;_*<n~D7iSJ;B7nZ3dJgH47!syYbxc&|F>OUbRt`^j^<3EwLB)B_u=5j@@kTil at 2
zK_<wp$;0!4VB0~;VorvT|7FlF#!lBlh7h`c9-f4`BsjrLqlN6Z5KE-_bK--RJT%Gh
za#iygV2k8=$mH229QGM#elxc_W#B9uXPL!v6($xmeweE4%g?c{)hw*o0D6Yl5Y_7n
zJ&iruauUyNF0RhL$vM{WC&+W}RZ`z`CxsKf7 at mPTNgGE#A!U5|e<t7Yq=zP?0w+Q|
z$^Qdqy7*t5i9Abn at O7X;Y)DD^>K2 at lLqb*Z)y+nBVxyGx%kL}L^z&Hyp}!&h(^&e^
ze<9tEbOzdW1L+$`OQme!7Nl>Er5}AC=^v18k+P4>L%Mf79f9<<@$^GT_l>6~BYk~5
zJr!v$(z~VX<e5l!ji=v08hD*Ae<jl0<LNh%hJ5DBUyXF(czPYurt$RKNEeNz1B;Q?
zkEan=a8v$xdOy;J at pL`X1>@;*q*<i1r0m2tqzA^*6LOKh4g9bO<8T4#L8MJc|AO=#
zq*;vN8l-Qbe7lsLK-&Lf==6}G`u}`e-}hCX2WQ1w{sq(lIt#v4B}}c(F0{knzl5iX
z`mKI*)1$nt<g8*!Apifdq(ACt{bq$FKu_(av(DJL2BtyMIN7llYb7<@vlivLeRVQh
z-V(DN6{zpP(?%+f-m^k&P*KJ7ZjZUwz2z;GeUo5u_5UIG-Ih0e>Ced;0A4T^b^y~M
zlTRhjHmiW2H78yw+7>?PA7=3;;d!Bp*@81flQ<%m#EaYhFtr9QG2G=xr4-G$PQwo`
z^it7HdUe-JVbg at g;$Y!zVV%5-{z#t5o}ldWeit4PTeGCljT5_`kwtGe?vKz)w(*R@
zFPCY$3Jh8*E&FcZl9lruGvQZZ(P at N^MfI>rZGb($%Ub~6gxFSf!Dnt04f}ukqhFtU
z at k#i(xbB(5bkT|Xy5-%l!-H<%?Q^0pB)0HLs+oGFA`|r%0srcucdDMJFLkYbep*+3
zB5eHNqrEm<BDIMMg*B%$5NBn#^P`!CBRDr{3GGsJi*;ly+Fo01f<6E5w`A~BIJ@`)
z(zijAhM;RUMU`i>uur(q_QS9`aU<^}v5mrcb~41~I^(f}FDu0u{vHfj7+75y=01ma
zmF-<zAN6%M+fy5VvEt55qfDB1N_uivPL?$-$8&U8y7_m(<gRT^hHY8P&q05?+g-8j
zdPSLp9V%I?v6mtCmD3~(D>k`4$@074v7wF{zE);UlZDi|&L}KB^^|3XI%;3GDiXM|
z$426OUP%hE$^Qu+vuF%MbDaU5dKP{R;Kd+Y&V`(P(sk<8F^TLS4#Tj)Ne?m6G^Oa1
zuoEkMeB$};{fj^Dv5N~y?5a;R0zcSoT_m(`PzD*&5*mg6e(7egeyWyCf~{^*h(`Xt
zLY93=Zs|3ww~H5e9KeWHhfbda-_ at JfBlDzQw`=DHo|b>dmMoLTUTt0jxwr(h=chjH
zYkPf|&?JJ7hwMS0GJ2isEzw2gr(%umC2Q+Mhp&9d5I-Q)y?GG!Fn0uwkh;-2Z}i6P
z?&6Ifby4vy5-&oU5xW6rU#}vAuQJY`q1A=Op3+-+si^a`RPyTK6ZQzi5$jcNzD;!C
zk?<2C_ at e9dfX46Jk-5mfGsYv1SQktaSyF)=e4rPVy<Y%(8=dN<&}mp_I#nw04a=$h
zMAsX1&u2elT3AtAvao8yfwl~OUbN-pY(**7d-?eM=VAR?jg9=W)P`FnjWT9KN(0tY
zGm`{7rBRxcRo|mhTMU~Q5<F#ZQ&Sl1aH2}m*JF(-+kRECVUvOFb*oag{m3iD9Eu0(
z#0NYF$I77GQbi@!Se`0b?N+fte*(tf at cTB}Qihm6cvmmZCv6+3qiYu`vc+w?d5R;5
z?YFS1wghV=6L^j8=1+vj8-=Z>^AqSU4z5ooYnFDk?N+hV0<dSVhfYH*ul0zHl<2O6
zY?~o*O)6=3F;!F4z^AKaR^B^f{2p{tPeLbE-zcMMB(fOr?9Wz6*v2a4v&hGKj<z%G
z&MjH6F&-c1jNV_=Tf}KmmzRA-Nw_1FnLD<ysZlYwzqczkvu|(8A>gIpyZPt2#^{96
z0$iJje($9ZT*G%&f}^6d3iwKQ$YIxgyr)-kKaSY6{~3PQeUXTJ)JLAx;o1J4Qpx>i
z$+KX|{XgRxa0kEJlKVoE*DARmL$2o~!%^hfHKf0j+^0$2Qq(mVDHEO55ufZ7(OE6I
zx<$=KQnxL-SgQ5DF1f#+l>HTD2Z%o<(r(H9Z6q%gc`cDHwBg&HYNSUaOGRh*kvcXY
z?;EUxw?xf3q^_dq;um8`U2A=HN$#&9R}weiZOQ$^B>fcLe<IR=_wK^KXp^Y<AgSjw
z&?Cg8m0ZNT!zcDi?w==R=SYSRk!v(;EQ<ee-TQi9e&Y9j;Kk-;Lnj&wzJZ;8SFru0
zLyVY}ydo#!_Dv#jZvIKixBjSb0>3TpKj?j3l{BqguswRi3#;(n3nv{aonMMzyXZm(
z`VHToA5<wKr%LyVLa=>d)v at 1D=6~8UP~Q5^)85w+!)$^|_n)PL?aR+|R8+a5JvuRC
zYuBIqz7#H>qz)NM{5xVIuIJ1u_VUfXSDf?vCObnBi)&urFU||%LK2hmlS#u?`HsHt
zopbzJjq&tsg;VfUT*m&FK#QJvkPgu#z7GAzczJ_E=%lB%bqlr|3skyyqe)v{dJI0S
z?r7^@_v89qv~|v8Tw9{8+qa>Ay7?cVO!15LB>jg&upJnq&M*;qmQSAbg1;Vmi?5Hh
zb9oDY-rEM5^pqmk<Qlbze{0Lc7&`cJ(82reT0w2?+$2qOqT*^?jf3sah?Ifvdz8?K
z&1c0dd`6(xa^3gtA^IC&yRWKJ5>E0E7u9vYHn?vu{R++<DPI|#DEr-0M(kqd at A5e2
zYoil$7Jx at v>MkdGD^-dMGXAihuf)D(L)!%3MsJ9wh;BkLvDfhF1^S6tRi`0dz5bE7
zno9|Tl at pUm{^qg#0_2|}`D%aWG_%p&O68w+Q8nw5FTmz*VQH6>@B+Xj5#OomB-0GK
z-z$!a+E?1koHoe<Ez6pyZqB;GYf$o4TorwrZoQB|p1b~ko&!^8o}!HU&DBeIkWVi#
z4GIf)naQW~zH at e7X7=kYxox=D=%80ao4P0X_ at 1+lUian;JZ;o(rM+~Qm<2CW^_B1W
zqaUW0uYc2cQ#@^UF>Pup*>RNLMOX26)7BXWXvOS2_)6r_75J6o-bnZ-f?2|L8(1pz
zbQ*eRTMs`KI3Vj^%0Hx-+gVRl0#hs4^>^iwSWSO)gaoz<il&D}X}SaPT4~lI`1nNR
z at s(T!aCQ at Hi}ZXiSK(O^zY}z*LSfx?3N)*NU(H$0)C$&+E53vJ;&+mI5bwfQu6vUk
zd5~$W at HxV{f;d>`fNy@^zbOLa%5nWk5wKZ-Y(;QuH(v!^Ta~OBx=CMLw6QUctLbFb
zd(nq{^p1 at EIwD_p+L``E+U^FC7WQ4P)VIazKo#A7#xA}Dj6gq}_MM&iNnF>}5W)}{
z95fndKRw*V1R0d0up7&0+P3#SF?14QeW04_7{34A9_ki3V`10Vw{Ch(|Ju5me<ro-
zrAg~Y=BDKk|10|_*6C{oO_+0Sz5SJ#Q}#n?U)%qNxWc}8aP(>g;v#!@rq(iZVLw*C
zXgXy3LNDTxebM*4hS&+APjbG6&IC^fAC=SuW+Lpw>m~L8C09>Xf!0?V*oltL2IfXk
zzGf8I$8h`s<@>QKF$a46S+|3#3Y`v|bZ+61wHk>dKCiH6(SaV@(xbq{l|A;*>HU);
zmCCADwcVAlV{-b|a>oOkM}l#A7vn7MNs-?R=3es8PHa#(i47S2QMBc<j7fqIPZ at 2J
z!58cs$7gd|Hcp2w->uAMLRV9c^+#LsU;|STWJ0<T7?Nu2-Qb*&O>`mVn_&Hq%e%p|
z{m9?z??s%NvG1R2x at tH#13JsG at +$Vxuf&B-M(7AE=aw-^Oy157hA66f*2d)%=54Oh
z1i{Y<zJX5oR2$a9UXLzsvh66Z(je|bnHV;SH0-cRn>b~5Hl91yAM-tf9sth}t8<VC
z+md_=<p|ya+q<QK)wIdUpZgSK at zsd!q=8P-M%D8RM5+!0Rm<fA at 78<&h}Rks_kgO5
zG4ickKIZce`8$XoJt1t?A7Or%cuCyu(NKJ&f<8vuIpyfQRJsb-WI%x^O_~JXsr_M7
zgf?+u?p(cEao+GGQ_Y3>mxfK1|MXoVbOfKyPN8-9Y2>-=Qvr5PMdgD}HV6Mm-G?o&
zMR#0?c<`j|BmH5<>YJR?Uro=V at hsYMp3d#&<V^M}mwNV#S=b#Pz%LtPRKVzXIXG{K
z|JKo#YIZ(#0Df(9V0h&mp2aF#oVYKBp2o(x{rBlk3I7TEN0fz*x|qtLi;XW&X{0LX
zcEnRLjn;-wk^mReJ3{o}7x#>ogcmSX33b4?p{tjlyXRbLyl0Qs_+ru3E;afe<yQIZ
zrS2|r32XWk_kt1Iwi4q|$v0M5Vhu)1kP^O5MZgMm#-2ru-S9=?+qo*7*R%YMbha=P
zJh3;jh_pjk->FHFaymZJGaBh^YB605Uv)WC at PY<@D1|sj+KfH%J7=Hb^uJmSl0a*G
z!f5fz4`$1_BH>&*b2O4C7uVBT+3v*+l%2Emm<3gc_xl>YX9=`(dUwsPY2=%?cE`8b
zgGn2AwW7=x#Qc^q#c8enIdt|J#6P at O>UY^6V|&jWp9Vhq%Dp)T#APu|XR4E~NR#40
z3pc&(sbYX>2wtTT8;!(S!r0rgtZsw9+BfC}@LkdM*hn0q*VNq(o__fp4l#S(m~YGl
zS+C{o#|Gg~<{OI*As_m)oYCLTDFXjYYo({&VvXrQTg%Q&MT{Zc at +q8p17e)Po~`Jf
z4Y8V>ST}|OE9fKYI}3ysb9)dm%ohPuta}l*5Wf9>UU)qQJ|@tMi-Sz4qY&$1={-kh
z4Fy}z%2lCXz<0m(UU1^bFGP;)5u8f>di}*f0p|%k&vlA*bg~dO+7D=lP}ipHQgW~R
z=lQkv3v-efD`@85U%3PR>po&2Wj2xcqSZmL)o4H34EhzY68par|0}Qu_*6%t%VSGC
z=y7bUgRg!a;?TL68*`=dx$Fw66!w2L#5W2u)wd`+oo8hB!=Le|=XHM&okbT{i#^g9
z;KaVLaaF`tcJMb|<MQoXHSA%FS~B22$i|M1_d!nUpUY)}p1mcpDiWv-iF){R=hMr9
z5AC51ik{$0bUpe14aDJF6aOiHPW!Q}W$@jZsq1o^*Y1QKypt(~O?r3mL3cUoDurz&
z at mVbfuhP(~-o^DAc3lYl7-gE^E0#Rs;^!$OZW)!oRtb9x*pMXFjgR9X#?TWu2R^RV
zUubVhF;*vO#E^zR^M=sB$-9HjGIs2D)Ny-lVuJf#`*P}FM*?Nob_sQVPrch-G<Za3
z5R&~{h5dW5y at 08Kt>Vfs70%vMo&)+*>DHC^g|B_5`Qc_{`jH;G2xlfc at oQ!`WmQBW
zhT%KQ-{I6)^F=6s5<2ZGh<T`;y`8&4(vqt0wA4-XPc6!Z?XwNEovcf(e;)DI#5Egn
zq|EKdu!qViZ%2&xp9(9pVf_5M$;-!FI|5W(D|iNA=z<g8f8t#GL0s6S^u^d~&02;S
z0~<m|ZrCH0nO4NSxDom<;3&huEk2gNn|K~JJqc7p6TSE0&LHY%5>s>0F6!T$MJ(Ww
zyNwv9Y%)&I-G^<f5#w}}>Bl&=BQCuf=VCtA`eD$vy`&uSKZT7iFaZYsZ(sByZsseU
z7pWg%*MAIW2kZnqhr<ID-G;XUos4v7gZ?e*JalI^_y#Ak{}2Kr6h6$cvnOyx9!HZQ
zdxbcmFwrn&TbZG_(qZsUcTCqZ^I+4^-NBCUgZ3e#U+XvK73Ps>;-k!6@|TNW5_QAI
zf3RIGk+j>WPdhJBYLhE)Nr=BRGvTF}1M%0b*Ti-F8pPa#y^1^o*osZ?1TY5pg$qt0
zrb at O`54+Jg68o2*2j0@<{fMWH?Y^{m{F|4BU4z)iI0ujM_c at DT!x|T)cIwZ_sPgom
zJPzL#eo%B_W{;o>JVoJ*3EU?N;)`OrOl-!RK$o=sd&Ml)!d1-cVc3j*3fo%v7QO&1
zNvv)%np^>Q1hA#y*TUD#NzPry>AuTkAjS^bh`p(TZ{F~ouW;_i;ruNp*VM8sE7oKj
z*2`XUKDRf)hoA-VWS2q5&pxySK6xh+p|==2Grfac7gfYD{&LthA8yYBEfRXn?FMRB
z*i%S<IyxUR(zA(EbFJKMssMhSl`HzFr#Oo+q7$)26iXQEk|3(E{czz_F^j!l;1wb+
zvBhv*PJH=`6V?dNuU8gMT~n_xBY^u4VNW8a=)SKC!<6 at m<JC7aBB3vFPo*;E4%QCA
zPi!aqI;9TN at IyG)oj=Cf?2#|f#AS4xQrMn<!rPsg0RB4Ymy$CHl+B%hcySKOjdzZ7
zyQw1V_YA~UE2Ymcr-FBa&+rHCr4B6NOtbBrn*XQv!?Ra%S3%3w>rr2f<f5kVj$s8;
z{cKj#KKh*0N+10_6z2<`|6UTGKLc0Ne`(bj1GOrQ#3t2a-xZR!4c3Hd?o^GpuTGK2
zn3<5BZ@)IuQ}ajxDdWw at zIDPcnCxF*ih~K8j${0nkh(=q2C~tn4fo8nNva4=T5g_q
zd}OJ6I+cO`?B|8^=i(bloXIme^rMl}^lJDy`gj}6)06-2^Tgfs-#b26p at yYlWrlyb
z%bqb%UanDiX at yegeFNuC@D!%ma5)k at -pC4r5<2gxqa_<Jd4CC;)np3`qRd<c at fC(`
zwj%H~?y3a*CG|o3Va)xbRIOx#|BqZ7B^MV8uf3rhyf3~Z?CQa~cMF&dUMrJL)+qj;
zp*zuqxrubV=kCS4tfBUiJ_&e4KSIv^?rI`;OqEf;wcEd~TA&hkuZMkpRU6q$imwFo
z#_EGlZ#7rM{0^Jf4Iz+Q$LA2XKeM67;6K)W*i+(;qMZ1~{_iO2hjt}n+l%jqDPt^Z
zjj?;dG=K1MXH_d(M at tsyq$RJqdR%{b#^1{+elHUj4(0gH-!{Ys9`eN-b&@^=*AL1z
zwfs)}7I&r|1wX3()f}(6XNzxO`mi2wFReU-?_f`?ir3G;n(!_fKi6vhqPgdom`^zn
zCn6v5Qk`_sUf8<b{bYQ;@$Q59W^C}w*)Z3H`Mx@`BJ}R)b3VV)dibyWo_b~7#lSh_
zd`V0d_Whz1-=&l97b}Vp^Z4>#9f$(u2!2!8^^KBRy1tRxzP<?9Lg78wPepGCUU)+e
z8*&l%nrLFXS`^)GM7(>o(2=gah4V3Y8O}Ew{IY+TrN$gr$*hYtIOlgj4hsU`A*XG&
z<Xgp&3d+3xU?6BMWCod!x6c>w`0v6VCEq=tDmpWtItZH01}phfaL)e|n9X^y4)KSo
zu)fz&dOY)$0ne~MRZV2j3i!5AEXutt;2|cn(wh%`7)A0BdvR!%gtP at RKnH0L+A@fG
za3*xV44&h43Ne$jRrI<+eVFck=$U)O?|gI)V$2{mGkoKs>8ZA4x`NJXY-BQ-xnc0T
zp)+VNU3$1rrK2jt@?bYuA)MG*7&Ec+x^T*fTK+tJ%pd=I5}lYg|G~L}{t_Pv6 at 2nm
zbrtBNn9KNX0QoMVm+S4|hgw0)0s^Oy_ at neOrdO3bIE^oZU+;`@+W-CD4dGizeCe^a
zqpw%FHQ5Sr9q(PbLs+v-FOwS5MvHZ6?(^K2*($@bP>ZgGvN5+AYvQmcbC#BjH)T%z
z4E7A_(PA;=$>6r!ZuiUCs^D{qFJZ6WJ?jeWF{?b+#I5(B)BG)vZf&VV8*_lI;2g-#
zS-YB5FUs$Z=P8(sFx{_n3g}m>u=bX}pcVesqvHp0RV#)KM&b6GEPu-Srf1Qv{^W=q
zvro|9d&n5?4cdosu)FIxtvnVyp*>8ekkXyt4_5mR&=loeZy)a~*)R8rAK>1QO&znh
z)11(9Gru+ke4lxJ6B(~SGyOgE^T!BJ!TcQhks?VqL6|w+m?;JC=v<(S-tZ at mN!r+Y
z%8s*6Kz~o(8$lb0jOCw5*Nzsisl#`JNq<Rsf;0T41CQ{J(2syW?8fi={)`-z4`0vd
zY$bM26bs)HIhW-R{gl5`;)4C#E$mhJG16-k-Rq`QzyI#W8N0bp_`BPi at H>XzVf^gX
z+umJ|>(Ot at xd#8L8HLpDc7v=3_GCjLbFzA3AHlOD{<pbR-`?@)sC_<uVNpyCznXV|
zI}95li}441r&4_BY%zTaWe+tMgNHcKe$aDFZ~HFOP$wPc?BIJJfelv?a0>;V9Xe4g
zCS?zL_D|6%dfW~Exl=LL?ks=B`aRTv_M+xvz^|6fYZu<;&uy&}oP=ELi+zB02>l^H
zdP>?)Q at h%A)Urvy%-uTwJf1eSeBBdH*}5sUshen=Cy7lCPDUL7oprc}sd}E0#E78k
z+e;9GVhrCH<SzT?g8om0eMN)VMQ3z0HtybW(mJr?gmnbGN}OBfzZbuK_+{glgP#h&
zJU^=HS}L0*gDhr_y&|=C%64ur=6gS7*hgYR@^3-jP(18M-7-f&7jXghi&qPw=g3x;
z#S%RZ!E=Z$32X`bZtVLI_)%OhvukRPOl?`bPHK&9?I{_qotCnw0r8;HQr})*J5aCh
zMQk3`$i&6 at xL1$G$rAq>X<6^n2Qx{urmKgKSc9Ev(b+3`ie$(ETZwLY-si+W3|IUI
z)E8}47C{AK1W(6*5<TH>0bYRkA|wsj41Q$3Ho$&m&IzJ7h^dXg9<{GxLZr1r<1Qn5
zg9Ht{ab-*<?*n3wLv)>0bG}IE_ePqkHZ2<Jwx?g#?f7_2q(y`_kv at hZX3aJYd<?Ht
z>G_7L)>O5`ikJ(Qk1bU*(yL at Wu@9Hb=oy}{->0j1X{3wbJH*a+-ed3$LJYN3xi>V?
zb;Rs<#lN1`OJrvxOyw6P%8-vk$^T5jMqYCd|25zZh3#ae&!_Mr-W9?g3jam&`lf}|
zU0<BFr?#FcNvH$<TkV1W1Z+#w?geAK&w at YqjR(&l>iAwg__IMv*+O3;yd&z90n=is
zM%ceh3LQeM55zjaJ3k_JPBzXo#MdXfn6K56#{(;XU)WX2KYAd0MF-b{hG&C at 5`6!E
z7(1~~Kn$5^{uabM$g_xcn5`zB)~Wrs$f at 12pOm$%A+!~~rIsC~{3&!1AN-HiaOP!(
z#KR1gJU*G&pDv=)Ja+I2M?c##who at T+GG#9Xf?RC%zjeVJ)gn<m<(-X4p4UR+f^Y!
z#_FjC;6>TZrN3rU=2u-~KBQbW;&!M!F63E$ZKJG9*WYZ8G~UdNbiJVDw307h9qtA#
zrH+lY$(a{Fy)onqn-uXVZ)QaJ>dTS>6FrvR*C_kqTFJSOZTO!j##2M&k7;d+xsYq1
z>--{jUKwouTZu0Su)Ce;yVfG&DIfG(VfpvF)*>FTE{>rFI5~;ogfU<)ItcCLm?nFC
zYiyNZ6>Vw#Y_`>wOzJ_bD%8X3hKA2X!8T+}eo{zb=lYrB!MB{s(49?o at ifJfpcgz(
zhc;j>rH#!cop9C&86ER9{4L at Q;(sFC=5)u%Lx|1M2>h~Xj at hXc3^sM|l2zQ67^C*%
zKS`=#y91xVhbkm8zp7oY$L>#OhZ_wto at 3V@_%$JJ@~?qpUA{2Du`j^(_agqst3>sM
zqa=^~#~I>oT=?DyjCt>XRxmj75bcZiL)J`)t>Ssahsq<m%w4m^t9^aLdL8>u5Tehk
zc%J0>e5;ni&di#+wyi(?C(&Qe$;4*-$D)~g7}r)@XNt`oF5qad!9F<Q{~_$%!=kG8
z|M9#;!qiYAd35ra0#SK7F%pp#=hT>*5fUPj>~IQ>W)g=yXjVipGYlv at 9A=n{Fbs3$
zIt<9bfHx$;`)J+(h0$RK#7WCj2qT%N)9<x5bUB~r`#irt_Oth1d+)W^^}XKfeR;h@
z@{SLlZ1gr)vgc at lC97@xaLM>k^>&VA at MJ4po8!1u%mHR^Uv`%=yaeBC at ckU8KB{)8
z8out<0FSc at a^=h6uvrF1xSb8ZW9k|5Y?>j!%RE~eF6HahiY{-dGO{+{ICDM9JU_~O
zbBoExfifw&zGv4n`PK!TX1-N~7q8UQ6<xQPd=C#*mnze011^$hg%`-P=87&YdA9B#
zdG>y7Koxnm(=S}QQg5v2+M)P?l~=0FtPR++Qr}k5m0zk%tqo{esXtKBB`8%=wE?aC
z!+nY~x%_g(7n9+D-v_ at 8hZ;u(4lNET4$V01i&&b_gpq at x39+#A9Zy*xVbaQw)*6~X
z;*dek<OM&{4g7Rx+}tbq_GX#N_YegeORPV2_KL~%|3JLzih_}izd}{eJ3vo65l4qN
zufJ}A;F%dMX^7W%_ZV#ehOcfK<k8zLjiuWg3EcuF9_B5P2|F~-GOB~FO`Am@#XPTz
zD#E^?Y{;as0iU?#p(J+kgfH3EnDB5Xp%WUEM at H9#b=&oQe#D=euAM7ul*h}f<&d%J
zsfxz#7g~mD+u^?*BcB8Lu|Rkd?`$^$GmAWjZ4|Jpz9KdmNtX&2B#jh4Fc<r-CBWKB
z+M4lB(kL*dK;I^5ZZEalA8|r<2_LJr%R1DB!8sSd84BMc*x^#78Dg%4=?~b1PktCs
z-JLU2^vxU@#(Q}@e2+Ldf72CS4*F9*2eQC)E2V;trQFx*P-E_?&8AEv at WVBo;BRt=
z61JMF*vn|%3;TvJhd3rm;jDUVALltrLD~xQemkMr#K(NJ6 at CHzS417{sQ;dMd2WC3
zNtT?T!wm$_AGp2(zKoI2CkJC)Wp6-Tp9B6Vkr}ozYeXZp?M%sMkH+~82w+#<5@!uA
z20atAL^+188pta|M4q$=vN!&Dp5b&W)0QpR>$RZ`YvK-~JuBvLu~+pQkh(u%OXK{m
zR=88)11{qCApQW_k at PELJ2!SOD5-_$ROolP4;OZ#?WTXW_Neu-vc|_AG0YJ<w4;St
zX7{GE*grvkWcF!=US(_HHGabBz0hSG$T82U#vFcZ$$)#)V(2Si16|<A$3H3#>q)FA
ze)&(vw=VSx23)kB{jZD%lj2!=s+@!Umam>t&#9u+JCd`^WN(Nz*h*|K0xrnXUomiG
z&?kM5aesv#@@WNM0NW9)Z92$zQu-hpgAQXt7F!vuS}rA6G+6JT(|r83LikNd43d00
zK^-=`0dkaD#AhUHl4vd&$1T_+YripsH^FD_6MoykQL}Vz1#~N=1tMV6HuMQ-U1H0e
zR$#+jxKPaSU}mgSH90c{h1)N72-gRS3RkPzg(m}91m`&eZC;p$7)e>z%?+7V at cZjA
zh61}tm#L at C1A(;Bu?)DDn}7HS`&`}nK*)7)hKz^!OCv6jScLL5;J=N8uRwlJ(@iX3
z0F13y&tmCFz5_nM_ZXf*%HOd-uyQeVy-~JWF=v580bZaKV_s^M2B?fmzJjJROO1`}
zGOSfQ{;*c<m|UxNK%Xw%wUAxYu_)VS`3h at C6V{G8_}H!!*zQ9-0iS~;Uh?u!!H+}}
z>?q~u>_Q9TAKYJ;JrZMhN#V6*-*MInG}CLce~2+GBKITiU&6LJYqFoK7pPmJfrrel
z3RxU&yo@#Hh_}O>-4nO}M6%_2wlX@!iM_RK^T>R at qTP)8gFn*{8CPR~hVT|$)!R*z
zYm(gm3E%^M4B6%NS%{fvoQ?RJz at _q*WCpR}gMCRIH at CkO>4Ek-K5XQ*Hr6J{8rCdW
z4|#M6-RRQ}`tTUP`dlDv)fF=@CE0+p2YTWtb=C`RO$A1)D}+PzpF8YTCw*8Az|Kex
ziHA&A4ZGzYRy|}HX7B}&w<@dD7l}@dU`Sz(bQgX_ZI#qwo?tKO-3gwoCBt^ArSE>0
z2{iRvpG)pdNnX&TipE(!t>1`|w+Z+x(Qkezw6i}d90Zop5T!+4mnQf?DuM8fyyOMn
z6$%OcMgJbcSZbZyEuP?8+!9{aZljVaNBHK=BM)ckyY!h=&f<T?Ic3WTy`nW_&wXen
z at Jk(q%r^(2=RCOJu=#vxp6EP$>l+^_ at 2bmrqPk>zW%a`u-G`gl`5i`1USoZt(*075
zyt+OoSZa+?R+j`6Hx_R<HA=TvOAP7qNq!Y^<LXBWMM;<F6#PFgDR2Tm4l-j##)>$0
zcLoAkRlrSX>#JmateDOEx8pp^ysVAjo8uj#<JZ$CVCxd}u*&7}>GU5YF(WC7?;VG_
zT*zIIIG*s+YV2b0X{sD$T|0rx-3TmMF(bb{2OfavKwE&_2K`j<51<!_sRg=4Vl3$r
z<#SBHj)M&Y^4tkouf(-gQ+Ce~vU)OKeRN5-)LB605aJye`kUiAue4#$VT<d;9_Q3m
znpI8dx`0(p>|4j=Wd0F3FtBy at hAk!E{wDkWL2W9o^0@%}nI_m^YakElh&y$;!d$`5
zCwbVj(H04imw`W{4`wxtC?8R>1XQ8-4lN%0A|8HP3ooIJH1JY(3XBRV3vsyV_ISDf
z0!lfeEDiKO&sO4EO6uY3rgq<`S*#J%#LowRy>kxko%L_ppeOhW at ukaStrU^D9g9}-
zq@>*l|Al%H9)1~Z&bmQglPTsO%Br>3Bj(oT7i>c{q%E_aQuGvvX=Bbbo>8nj+Cl6{
zGJf`Lb(C0M$}Vz0OZ4H{{&aBI*5;rL#90nbL%gNUGz)r<?chPQ!0I9PN(+JKo{MiE
z&$#Mag>P at e=cg+B2zl52OZIWeLhg*_1sNKWFY?&Ld_Nmw=M&ic978_k$m73)pM7C3
z%_8}Y34Zo(CVkV_gn6*qKFY0$Go+PZ?`eg;)QNTLJoblq?oT-;RvV=|^(C-||HU~p
zxh at Qlb-|f0_<0KKRv;%X##+(ugx+H0KF&T|pLZ4ry!W*UetxK#j8RS- at XS6VdUx0{
zqz&%Fdw<~+xl`E%ai=b5m^d$cP_FNQw{+^#?g at LR@+a+}#jL~7sSR<z$C?e_rLI!M
zpIc@>h&Db1KQ;6N=`(vx_C?FWu&dG5x1{C5Y#A`y*H5lbz%BvZ>Ku>)m-9T1stN2H
z`0<2726AXlaR+>&K!dJ;k5&-9mG?UKxuU0G4`=;boYf;JUkJTfP2YZ6$LJ9%It+Z<
zU8B!cB16I&j%VD{<I^T=F0q$|FFx?uUgkq5!iS$d;)1>mJDZpJrNr)bRywi0Ah<zT
zFNAE^9U_izC0m2`mcpJ8JfpK%0y=%?L6iabG7PRlrMK9eiuJe-`*f`Dyo8*$#)HDl
zar-wH$28qjh_Jt=2l=)Ltx6g`nyk{)`GQvw6miyZ{aodOq65{Q9m;nQTeD;NCJrQh
z(4)9|Uq)Zor4c!U6?0QPs^@EZU)E?iJF-fM|9+PVvUm9P6Tcv`cPFtkK3_|Gc!NLc
zDkc9;D>_}9A`ch7sya!>uK^7l=`321=ai%<m^9I3S^@fRh~0L&VKROHWcmT5cd<oQ
z<B(0Nn<Eybg8m+xN#f+ra at H=8BAx+ahqFs?f7q$VbuVmDRaprIuqllzO9S=;yZB_4
zXRnfvdP$b2iFDY59|L~2KF+4ON#rF=8H>p?r=GkQ-@`J3J|cz|e9%UKhg~chO6Zna
z;bSCvRYQDzCfn-wJO>eb<~nRC?!ZS5c at OF0+a_c(p)Fk<+F{@4xi!Gt(;TSr>{h-*
zD_GZqG;ycwo1GTi^U3{1G5&d!Wtr+Au{PmP`ZFhq&_mMpn`JRgzZ3xjVvDm{Blh19
zjFIIU8)B9hD&G-k_E&0@&+do4`Pbm<4Fg5-2FG34vF3t5*d#Gfh}G-WnNtLo19hIu
z%6EcFBDJWe1=swg+c?eCc^rpvjD+X*X?G-hYLxs$`Fs&2=7`Y$&6Ep!lda6&aT;GP
zUMfo+;VQ0=y}+$;r2(I{wnP0vbtte?sqLrqvXq(&(AA6)KilBkTdyq6Cwp0DTvn5M
zlbEf`H;Gb!qk4?&XJP+yUuYzF)JS5_T_^x;{{r?|dyt2c+V=nYHhl3>EyKT?h%Gn1
z!J3Ep7)<j55MyiMmxyDo7=wTD*nWF4%fO7=KlbZI(y!oW72yBZ!2Sg>(V>TbC1?}#
zT`pPMC%<WA#sc~#J^?(>`RG;(HmZ&h&CMk?>^aU4R>d*r(|YKe+>>>A7i9u&L}6~w
zD@=Z^pbxRoQ~X*E)E(ms?ZD)DxUvlOPr<&B)LlevA4SY at v|H={)SHZ1ltq*R`N<u%
zfHvTKEavJBA><`@7E1-p`7y+M1szEKLpdPxDimRFvzW=#BoPHo?~;)EWfTH~K}!`;
z6}QiZeb-gZe4`qFms`WSN@>YF$J|c~H at vEvZ=l5RFML7CA1Z!Cw=f^RB;sG&zoVVs
z0<5gfW1Xl2srOf8&f}j$)b<}C2fLGw|JDVQwXRPh!hJ%(1yZk$cHmvq(EACWJthkK
z4*HN{(w~UuY;bEGesm4yNK=YjGBl)+>dq=?>rliqHL!ib{s;Xmf=!UtYGex{=P%zB
zUi~WJDSYNvQ{wQcKWka27w|vfPaUFS-ZKn{@%`}58dArMLP;+1!w!aRK3fhu1*Y%u
z{r5~?l at fe{C%9d5(ngEqzqOI%w>DBb3x`KPU&XD7^k2S-w9#aH$-=7-PqdYZlsV`o
zX{X8g_d!H={U;>;YrC10f#BZ|JyJ06>rn<^ae!}o4`Yy#1Kv>qdugK04kHHM<~zSY
z*Q9s!lXkmj{Jq`0=}f!9hrPdqX*)f;M)H1`Ir7=%o0^SG8x|edGb9MqorT@?kiw!%
zuK<>xjL7-#T!NicO^V#PXGjqUJ;(Ukvr_WTGk<*NF!PQA{;pyo2X1HDkCa{DW$XEE
zBp>hnY!zhxC1^(#Dc=O$>4#52=z7qd&CHy)0dtI at N0&?K+#&Iln#At7!nRE#@PmMl
zjyU%fO(kfVX-5M)7j&uzZMr#JNNEeI1my?TEl at xf-4<_sYkRB^^h^f2R+5DLpZJu-
z#2{@s{&?sm!jHFW$e8oFGGh3>jqbz|I)Zl6FIGo4WlQO63m~fw86x|5Nf&b+1zW5{
z(tg;>CXVZXNAmbnkN#wQO7$arBG5<6k^eZcWhrzmP+&Z$FlUtXt3ge$$B at 8IOo_a6
z4-7GRtr{_;!GDv`ooD6II(2z_?IINicBQ1>+bgjazsI!ICFCPVIl&*GFIH09y0i{l
z^ILDZ7aO9(od($d?Wgr=$^%1bi73OGyL#wa4$Uc#E9`3}_WJjXPpe?FzZ31NIAC4`
zzmB~nm|v+s?h7b$UtT1~98liXf!C_@)U3<+{XVjB=jvV|+2gB5#{LCdq^009{;Rcp
zA#&8wI$|G<Ht76pRw4XC{cWXQ`ch_|#E{fY!w;uj_qeU&By}aaBxkoKOFbqvsFguB
zV9XzPxOlp-$d2Kx4 at J5qDv>~qxW#zCGV{Z at 7wytrLiR^!+ii8m3<cc<3?O at H!2{>r
za(^KpWBwm$9i3Tn>AfXzJ at d$+D|xN=<&21qpsY1!^Q(7nOnbFRU`cN?Hv6#1dm_P-
z)@TK#n0W8AZgU#H`^NFbvUAlLiVhLhcIaz0tv;-k!hxn!Cin~XP;$*Z_CKSI4#bo4
zVZle42L6a at q}Edr1)jmr59ca=VFd7yBnO5|-lh07t}}?e_PgtFtjEE}@eYn;U<HX`
zuLx{h;`>W{M&K)@kXV4jQ>!f-TZVH3&adFyi1S9A>xm4uO*~@tR7`&Wm``=~7Jtyj
zQfmzSVEgprdf*Zbrm5WDh55N)uggn_PU{k5Ei$C-nc%VeTHMJo2kadvt2*tH<eDr+
z9UCCRINTj!I#T5NV7O$~fw1pzO~xi-s2|ydb2-jCT`2Rcj?hP;H<1H_r@;k2c}6nx
zk9D9S#qMO3&r0lXsWrVffR%H7+prxm?|k3db`ATwe>ip9OqIlEMM!PaK<8(#kFAgt
zpiNuQX7&Gzi^JDbh^fNgqm at oRx4apBx{_a9 at d*4*w|f2?WhK6x1j7WrQ-*%A9oT5T
zO~A%o$QIMN at 4>G%#II=~=Ftc2Vyi)2S+M8bK+sCnhz|d6&OT>(g8RB9_;Y2nHBM>?
zf$k6fuenv=&COAd*1Oa#!m99+xSy^RryHm;d;J2{y=S$Bcm6|gM@|;fwndLfglTg3
z_0Z{b75*`w{g2<}<G*4|!R9?xw)y-&DI4exVye%T7UcU}a_YJ9z3}gP|2p>ZWjK3q
zR-;UYVfy`G$Tcc_E)jhgZ4ByW&Z$BBDCpfI4z^vCeB*No*XKu-qzyfHqO`E#7!005
zFAb7J3oe$sN|&gjg`QoSaC<Ag8+!KLE3Z~AqLp+7^1j9&=yl=xT2L<hT$r+r%><52
z4Gn!R^qLwj^2c>Kd6)UmRnUzfV3UV+wxTb)X67MYc=P*R{8N!duLvUBUlHNR#UTX7
zj2B~aoWaZLnkx$#Ya1u>C!~#GtbhhixnkF46;J5-ru5=kHhEoRhdiHUCiRzXJ~zsN
z-*wxFM7ZE+?@go;tjpvnb&%zdHay>Z6ZrVa!JlH!1Rt}uk)v(Yw%h$w^T=)B>m2jB
z3M{P=$RKQ(L$=BDE)rL%crV6Er+3=>F7N33Zf`iSsI<J~shbNsIqL5U!%J_y8?J><
zYhb*=SrmTZ7e!(ml`*Jacy1h++0+8Wu&Bab at Fus%F3m`g<U$^6PW)U#WPv7J*KFNT
z`o`9O0C!0RES+wCwWCh+Z?)Ke<F at O*z+tUauGCbjxFf1=H}+n at IBG?I*T5E9 at 2H5V
zH)7xNvx;hhT)qbJL+~H>y at lnHI?N;ZC!ikX&|j5+zSPh)3zd1Im)nM51A4oJlz+;z
zb`z;L=KF2nknspEb9$XSkW&I4ySw*RmXu)UK at Na8qESVI7Wht8A&zJre5TT%Zw7ua
zu>BA>0sd;BJsldE;<KCSg&pmfzn0C9-V4IoiWr2Fsno?$qf7C9l}nzH|MuoE!!$*h
zQDpo5KcAg<nkN3ky6w;)etqjhx){y*x+w9GJ`s5*s-VxEOZJ8juZ6$FGjt^jabheB
z=ak5sL&6J0+X9_$C(2hCgVWa;sD8318t+Q#2?=gH54 at fOz&`2$-t^`Rg#^Ey51TSa
zm3xrEUmU`oxUO<A1K0o#Q{@nIK2zz+C^5a4kxBU2vA=Jt?Ksj0EUs-cN^fpsb(k=Y
zhqhffbcAYWo}aQ8)4;_?znz0UVR?s%zm0Rjp*?g2?RpL0v+=z4pQCtJA<*Nxp|9BQ
zSVlAUvb#&`U^iU<&x^Debst^ZKUxP~=Eb$gMnMm}e_7kft#;TBU0Wn4c17NWYriJ<
z9j3P*v(_gTy02xFSWVcg3Ah(KOetm1{aQ&HG}j8&PWSL^VMYnk_H!>Bw at HlL)8JKB
zNUAX=z9i#+S^{JVHae9f1up#oXYHJQ_5XUTgBDWIEl+y~bKv~=)H!V-Ek{=0NX@<<
zzIDliRq^s~Q(#xb6SPk=@m0x)Sm&%3v_~+qROY)E5Kpya6!O;hB>|B6qs(qXUx7*X
z1c?m*x^&&=s_O<fYJQUg*y?S`B+bu?Id{6P>GwHH-d%9A_vY|{_gmpF*iP12TF$ED
zU*siSKTNRN3BM*@h&f;$R%aU0Z4<oNnnWY;=g70XO_`S_)3zAhNCWO1ott?cx_>pn
z#Az31c8~1Hyfh-p?49tR$9OT4{Vjax?~xeC at SVJeK7nr`d~Ywm?bgUx)eCGfLdOP4
zC))S6PZRtXQvx5>h<$;_Oj(l?ByQaQna~@o$2zQy#Bcr8i98qSB(TSrOY~miQ}DlC
z#K=(~8yH~AASbAER>d6XTECzSYj;^>?WGR*YLfX>$lP0!6%)Ert!<32%8Q0<Tw)N2
z$2t<KTr{wRgux#GD<nVtHl>Ocz9jE!#Cz}HJ=oD(j9l0R)U2QMuYqiV$a->mp!YmD
zs9#{I9z?yrqP8Ihy($*?jfi!y_Lrcf;__!ySi{<nuyk6*w?>w-K)_ZNz~Ucz_(Gca
z#PXn*t0uTpkj0&&Wb_WCJq%gh*OK>ON1kvaJx%$>hMXI{-+G=bGOE>~z?>{Xy99U>
z<^1i`=7<mP)dIJplkmII&wcMD{|=x2UHRONlxjvgRlH)VLzX`7K$%{WUo?lE;Vh?=
z(D$e~7)P-2S8wI3;ghnq^}A~n`~wja6SjH<E9iS$limz=)=*fZ)KVibKUgz%?qOB?
zT+Q#A_a(m?w)4+9ytmTUj=`?W3R{7z;?4N(4SW+%0mD!&Et&YH6&Qk7Lr^|u9C(4*
zSECV62c{NmjTAF#5HB2ZFUY{)U%IBusmFag<R2DKVNvzu8M;m8zH;(hH+eQso@*x0
zwUg(D$#bJ;Z;?*a;%o5iF9N3cj*ZB(o+JHjjCLgj9x#&qSyEFW_Bn{HBagUpuU7N)
z^2Z|2B+J9!dkYvUVNaLORJV#cV~WGyd!;=3 at KSGe^VwjQ5qbsV+2>it<@3vDCbkl6
z74jTd7k5fJx0~R{_nJg__EGpxSa?Z|BZ!Mo1YCVGK0o6n&2MvBffuk)q+koR;u$+9
zbhqp~)Lr^1>hHWYQ74!&3Yrqq($%@F$?+8UL=`ZdDi50^3RWw|#v}ZeNJ%m<W|9 at a
zF;U(a4A)Doz|}D<Mr^mPF35 at CgV@y-S(L1BiamE8*s-K!P>`^uJYdzv&dQj-NE*1r
z9)RO)j(P)rZ@`tQ8-xGA#R=T|6 at Qg9@NJrKZcmp7<7^D_rz*_hF^tb1a*zL?=a+V(
z&)tK#KAX|ww1BqUK%P1WY$C7*+~yywWPG=`9WQXhzCyTFTsi8!7%;~7n)Ym49&^*K
z@^?9Q7hHFDbA+hBK-A*DIuo(}x=t4`^kUeEcS#*aP}bAV-5EB?&)en|EDd|ml(ubt
zfneCNsA8TZQk$&MyqGu^sY!;#z&Uy4=9NEJrm5Seb>_TQxe3=FWW6R%T`>o^s<whc
zjLl^e^h>fjv-|gdkvg?c){$RI=dqJJgzRPD$-J;--^!XvDJ*8#?c4~s!kS7c>z^cR
zeFzKop_+*4_f&+RDKfC at NgpAu5#}bjhm0O}vc%UKeO~L#3)GPHVv%kELz58q at aGv8
zMjl0vG?R4DFO8?-0nGh7XW031r}_#;&<=}q|3lxDgueYs*ASbl8Ijhss@<~m=oM7L
z#JFa|mZ(o+smT7u{Ui5JmdntEm_y2-^Uzq<O~}P9kEs<tRUw_0d1|o`YvZ}+*sDg~
z6@>Wa11nreH-S&<v3F$HDCjhy<CCG?%PXJe)9`C`RGPQVlNh&YQH~Rpwfvox4O{=D
zs;90X1`{x?39p3s%HSJ6a>*2BW1!!<VS1Joaor7eMd1N{x48y#AG6&?^SPJ(g|HQX
zUyQdc1b*vr`{5%OMdS^<1V<pDWrQF2?`_yGJ|;_#t>vpC;O|D(iH$ij#hiG=??`Cf
zhJ8F at bG)>Or&FhZU$n;?`nw`6m794<De!-o3G8I@{DlslA@)t4Vby<lhS&eXGwykl
zXS8y7#x?`b5PlWMPM%@0o at bbT9I?$e at QmL+%S(C{KE$qco>6_1XB at oEGkV_P8O!$J
zd>-cp9Qa=S2JSsP<4qyY`0rah<2P)caj2b_w5pc;7jx6rD at 56^k#$U_`13~0`D);u
zJnbn<SMa-CQDHJ(!s_&{J>1QjmKa4>y;roz5Y;xM=PRAi1N-Xv#iXyX&s&SS6 at wR+
zL|P7wlYU-*G!%1Xr!CH)Z5`K5(vqLj)`S_fQd;0roXyWxR6-`KILLnrm=SrjfwqnP
zt5iHcKT%##0soMOVBjHMd^hseGJ5=RtXt at _u`F5oN<Pj%$>f)=$W(jkWvbQy+;_?p
z;&U>^4B&S^w+M12_&!XP$<klnNcxvbn7~3n{2+p%QcQH$%QO*|q2Y-3mlOij|8Mgl
z*EWm9yQXRs{tcidhB$e<X3?w|>wo}pJGViOlpAljq!1XNo_%itRR`Rm^uMJ5Cr9MN
z at Rz-J8TsH!%(+)#r+pm9pNUVqcpPPWKqfDHY at U*5=v at Yz0}u8heMBzadzUFkIT;@j
z^`mjU9$5;jDnQFK(ANlV<=6wB-GbtPQeaPE%*!^rxB(k6f8|}P7nA{)!bbc at 2`&-z
z(*^eCtZI9sHgC;h$o@&+AQsh$+e>T`9q{$wcLE#GKtr)s at esk;2XB=BD0NZN<%4(*
zj(m&*;6MT+EOuDEaWxm1r>*I3H|Dw at _d50xfszdivc=E|#B~M}?6AO<`s3Gu0h7*4
z8k9TNlKooir#QaAk%QxN9NC~tEs)7$KTmD5yBV7x#078tf~>C_SAx$P3Y+cQ>{!G%
zP%1lO|7?s-03B`pd?Jo0?%!bUvz=y%g0A8~&)1s6eEWJkFx^h(u^xjQx{0H~zBa$t
z!&exKNgcV5fd at PiZ%vv_50iKm1ap}1zCl^gd6oB$X>Fh8g`Hz?KBo~IPOoU=D*P)J
zZFZ3GZ4AbzD5RzJ(*n^jo_T&OzCx9_v?NZ2qkysfZiViknJOU|IIg1%zxZ56z53jE
z*EMS6>LlR5&uu-x*u%Ac3R~-Zde7W^rrfJAR}f#47NcK#i9H}yKv#y<(3QjV#-y;@
zWG&rOOO;RB+~{qF;g>e9R{g+|p`Lp<?Xc0vL+ns1$s78sf>Sn>dll10pTdu)1pG}i
z#?=MH^N_<AyZ~_rYG~lyk-X^-NIBoFpw0Xi$slBN`r&)P--&l-hHm{0&j-HH{f!J(
zPYL|j#noSK-~Ss<&)WZAOds)Y?*h~3fAD|mnLK5a_&+6$UlKoh22*GwY=wJ%`@g|Y
zjdu!8RO0<+l_}bk^ZWnfCa{4JM-M*ZWNZ)|p5L*EQ0_K*&zutA5#_BAs*9bKllVdy
zoA?Lu1t&HcWArO%`(?}?@H=2~4WiARg$w&&XA1rRdL#J5RU*#3%~wP%;u{?@*b`hN
zc5)aGpT}QxsF*Pk4L>0gf3%5|Baw{RY}lMU<6ndO*AwM<53zJxb0C}E?wxnCg?`Ly
z+!#&Gge_E8tgyB{y5wVN`BtBv)39mc84tb=zn%Q!4gc?XDG_;UibG(x1>Lo|xZqu1
zzj&>&7~`Rp*j`^2z>gKz{FZx0ey<aJsxQ_bj8lO`1X;O at eCvaCRVM%N&#;w(OoYTA
zurqtX;1N6G0<!kNrbozc!ydK(b^L;<A2T<7`sr(Zh}F#>bH8^I=ilem?{n%eU&D8P
zVonuI&Z(f#mJZRPS at nPY{O$5*5Z|CO>R*G>s4oT^5I62r-~Lh9F*0+I)>gAB*?W!>
zJy|<tv)4l(x(9N&S~6Fk_=w;?p-wIIHJ{ee2I{uc3O>Y|-5+PYxf^5LH&*I^A0X47
z9XpakHp8ClxrzF5%E@}{O@#j*XyOEB!31p!Dj!w{4HDWmdX=GVcL;5Z6G%4jKmDDy
z#R(>8+vrtZ(k-6}+BRB)HN6(}jG>W1W60+xCLiw~@{#<Xd?b_kc#+Rfllgpwd=3*C
z8qeThqn;N~7aopap1}zp!M-<Q4Oe at x7u10sgWf}iWpE^+9c*MD&zzHnZ%mx8-(}7Q
z=Vc;e at Li5QYZq)E5&xsmjo30wOz-tdU~ZoCAE)xDACd$szM{O)AF9Foo at wY+bwyVR
z?tifI3)hM<^^v$22l^Yj1!rc~VXV;<$`$e-r$=ylW+m<ky=q~b<9<2;`H(FA`Onyv
zxSzV2>&W-n)p0-d?}CkroCRHj`-2>_@)&D(!zKHp#1A3XYRCSxw#wyU;w<kZ_6Iz}
z<(Hf`!I>GvM$3uVgL+Th3LU55YxvmV*{QB7avpe^)XU!vJ;D1K at vwtnL3W`S0dKlN
z1pJVEZf~ri|ET*sWOPq0c<cB6d*#otxd at CnXlvpn{ricDcDLEko+^8uw|RpQxK<+U
zRfocD_kt$$Y`{Ct1zrl`Q6g`|axY%=8@*S9K6JYmQrPn)30y}}mK37*A!q1P9!HFz
zRG;oMZDifRoUG?ml6(lQ-ykIP-J$-K25-m at yX_Pu^$^<azA-S&@(kR^YNn?YwyNAT
z{Bh`d#6)Yc**J$O0Lc!EHXvq`KNo%vS_-(QwkFrnjL)6Rn6+jN;&g5WEo-CS^XYE9
z618txT>p~7!E8Nzt7OaG>JN`ueW58nVg0Kv<ph4yBgP&@wqZyauGh<ZjNBKnc4*w9
z7-e}XHwE(V(#R1{-IY4Q at SiFL!!xS|!_)Oad&wLcJB3*BR~g!%uKGu|3pAoE?!_w=
z_`U-6uv&M{_H&S*nPK}NW|eP0_lNZJ<4dC|G1hkDy;79#WOM-Ri{}#Gf&Q+E`g5I#
znIZsQr5QZG`ji4|qr!2Fwq)xr7Q^r0fZ(AAYja?CFuc$04_k{mZcDW`r~>1(sj&jK
zh at xNXvAq`h-M^w-(ni=><GFx&-u%Ul2JIxRQBwb%uzjMem}^$h<!v3y*pP*Bo&Fab
z=O)Y1!IVRQax^pLa9ub!Iri)Ske4b*9Jha<fHgvuSuRc8P3SNE$LGWc?hKPZkIDb`
zME;IlSdZ)HHlv(nar-Yfp{>eUQirCIt<Kw3rLx)g<-Fi*MBE-5>S~5vUR}-$(ar0n
zD}?YZVI!>;X*HAYR^uO!QxU-Ad*zRHfE*6>QVk>DeEcf|<;<8Y=ev#N0?nU at +~%x6
zK9ih737ricr-d9wZ~w!T95b=$L0gWJ at v!2y1N;bSuaLP7&M#^vX{`lzd3NaOwvI3T
z;)X<@lh&Xm_4nx_Hjtmn)ux6j@|@&#g2c#756%rhycSt{SQ2}8TwNzk#?`nuKt|3#
zxN^+yitT1nHqZi5rgLU7`S-=^oL)Rv`284wShJvQe+u0iSJ$0&&lt3~>vfbn$^Dk|
zHQ+VqD78gpSJ9SG*oMf`LslVngD!XmxekjCDhz2c-sr4G?ADjyTd{=DlztN}#C0UO
z?h6J at xj)X(tsI4q4)V-po?T(C7vb4=gx-+(?RuQA at E=7#iuwh84NO0lG=8nhkFL%+
zfUy*bet4JRpG}ze!0X>oN7e?Lm{}Y88U8sy@{a{u{y?JwCe{WUFtWZGo1{@vtP9=H
zC4-iL20cFf?S?wl9eS_h7|Z(S0`Ps{L2Oe0DGt~GgFe9i8MFaBs7>rTO7RIlx1kRF
z+$4>N119wNkk_~Y*rXe(lUi<cQrm|*NZz;yP9rd$q>*P|d4$j>cV1>SEw&?e>c^?X
z=5{Q2y8-#aCUb%(9ZzNGIP3^(8=~FW at B<EA1AdCw+pM|!IO2=s&ueXzM at a{T+!x#|
zj%xhA4A|Od at 2dZV_=Hmz?&+R<6!Y$xAN8=yCF at JxQ^aP1HGbd3H64O6F$MNF_ko at o
z!|Ep50Jg0=y`vkd<{bimI9tLa?aHFT-$ACjZY#Y4bEah=5;ktl?mV?O$jFx)caypi
ze%L1cm9O4l1>J1`&g857gu-iV8J(7Ng^p$`3$Ia-^ZT4XU4XG_=x=S*2sAT=z^_>f
zJHKrlN#pR6<{{n3GaIkPuK~{c<{Nq7m8{`P*wxDlL>~u$7K#yz+eXfajc~Dg7`D2p
zz`T5RnBJiD+l_K+PMW}znpL)F21C=P$2fWKR}4*}$8_hSt=|AYR*<O0{)O?G!1__i
ztRFJ&5Ac5t^fge62rraw=u^zWwflJ3UBbV!M%HZw->99Om-{E at WyGXD(j=^k`nkRe
zxNn=6J$Gvuc##{)SO&IVz9=Pk^^jF)RR4ou`|+_h<QUrI at 8eu*AUaH7`o>4Mit}Qw
z-pa*y_s2|)6FQZnJ5c}Hm`=nFlEJ^A6#AOoPU1^cEfD+bgLWZJjkL1pAJ$7_4X27%
z+*Z$*R10AD30l+5m&FZUCA1|F$4|f*QO8-G<o*`ED+iyZb^qe&jno7jc6tl`L6 at T3
zCmmwCUQqPlQAZExA#`Qxp0cV1Jyg6Y<=bZ#o5K;ON#jjuxg`$YJ+a;;#<^#xH<0)b
z4}5vU$aU>h6b!N3OI+FSSiVW at jkd0pYQhB)*3zYkmV4Q;gtkWR^VB&%OFZXnOT6N2
zN<89hUYe--A^SmR!;0mi!R#ZJFk+t`-|MVi at fGf;h~U%bOd;i*&B$gmos;WJvDcXC
zgkLb>#p^=@8~)8#HZ&3)4``xvf(Ih&55bX~h!>9iuncr2IplNr0v=)wI<%2ZqaPd>
zkeD$PiTBk6o0Fe=5x)!iF2c`i$hctmlm9a=;wQ(2WC(GxzJ}k!G#cL^Htn>~o{-ap
z8K6UYw;OY(g4-)uHO$&@9kSJj;d2B#-$@!&%S*ah=tRsS%o`JqN`gm0_Qe|zD>~_I
z?2Gpjy20#=2 at NulJ;H_((5PpA<C8SlZz9$<8T*qo1HOg8L)=N^lBd2T-(yXxo7;kV
zn3(Zhf_1hM^Hs*oSMUmy)?Ni2bB)hAvd5- at H|NqKzY3g>5-d1RU4+R9-WPjh;A*(O
zX8cm>Y^LFtHYk(ERvdRUx=wJautzQjt*j<|7U6SF<>DVD%s))nBg=lDU*OkjI8q9}
z9laj=6RbL_#D9T<@LPnY*1C>*{vD|q9?Eo5$^Yk{%81jL%l}}nChG&EBYqBYlG~n&
zmv=x$Gl(@{glWs;^jDCxw8O?oNzH~F at +gUSxM39Xny)-Q^Z)JnMv(7O&i_UmG9y|2
zIQE~R at Qv9d*&H<jyODK=Lf$;Xa#N*zCAArI9PtiotnPoRFTDZ(0%B7>Vh!ECEG#%p
z at -AEYP2S=UCGW%Lea$n^77{u4bWi^LZ`69T*>hrDbeI^}Qt;iRz>86(TG*jXdjh_G
zZFa<>=6=YDqDsu_MY9_#xWC{Xb>o0qQMeJYBP$)}fMZh9IFL4r(oo9Yf&hU8{z|2V
zcIbl0w{}0;H1Q5i|MpIS^G(Qc8*;uu%!N&d_eM1hR%KYZR`6^CxZab{<g}t}|Bl)-
z*pSdf55`;xXm+Sd3%7MgHl6JQc1T-D-l+dAPq<Db1g$C%rO<yHvWgJbh0v;bdoGnk
z8?^h!X0S!j<$mR?=br)%?g5 at G9Uuh8^m at c5IM8Kd8QBD5R`6SzWg-oEv*@XDJtaG0
z6#Z3QD%!~YXQXx~Vm-mOPw&{nGWfJcHpaCOUlxG~HifT1#`ele1!#4mou;~{8Hui9
z)Zfya{Z6zoNg7#uw$D;KJc0F8Np$XUupfwPu{37SabNUQ%>O34%<>oRHN59UTWavF
zZ{(Rc=sZVf^g>_3U_{lDF;K9<->?`lks0iZ-LQ|bMRvs51jdQ at Z365iMhhn2XT}W2
zmbiLAF<8a_{AeXxlDN80Az20)-y8e{;s<)OpF{Aus4f%vhS*yLyo<cqUAjQX0cGin
z_ro^11^+^fN+uotPQJBd%n+NLu!9r++eB{S?FxF~&-rn;5wGTUUq#&Q%cUV>qbx}m
zTN``Zu^DlOj<Uvq$#dKBcS&c|9?9Th;C}Egi3VR0-v|mXn>OT-uW)f>C-jNWl^0T6
zXCh>o0)i<XN7}iKY3E$fL`DY-8>NNNBf!pjnt|Du?<00kK at Z|!FPhZJW(5EbpbflM
zD=^O<y`y{Tksm{;E&mN-e7tSEHGgfSQ~1g=-)C3ab=j4c3$VT3-&ccJ(;aaaF6r!w
z>$|CWUZbhRd(kBG9DC<E%-6h0oz^j*O7cI`4ji;+ at 7sg?gZR$Wn~NCOGQ?N_=31m=
zN8Lmk;*&ooOZ|S7Jj1&h;wynT-X%V5&guZP>DGf?HJ>fGr+Zp?x9Z7aI^?hN-aPCX
zjiJwv3;Ctc%K~%AJGw|02s{R=#cts%u@=skG!XgSl6-m)aeg)t{Z7ubUI7<6Fg|c^
z!6&R{e~R}}&u8O9TJEVdr|0epX^Wi&z1x2!4e0kZkfVGG8}AdaU)A&fL-HngL$t_q
zIq5$ca>>7Q9KHGMuga&t86wG_hnN+dIPhg%v~cDntc91DJU&JqoOw;a*|PZqd(XEO
z`e@;RoMY_E#TeGIgjD$i4S{?ddQaw^mK^ouJHk at vJejop{2wqkrIYCbNf-9GBJvD+
z&Q{`sO|^6w`Ewe-<42$jUpi|%%19T+My=<PJI_<5$R+rgps%pofZv0HC6uN90=qDi
z0rAt#jIDeLc~7~Ltpb*&67q5QgoJFMQvxNCCp{P8=ZN+7#UHW1d0$dBStgo4)?u71
z1D)fb7f|8&X4UvY{QDa7?~Ba8p<lunYr(&@zx}%r?SC`tB4T7?Z45YPkwN~4STW$$
zcc-v9<&jsdOUODA*;x2UuaLx)^f`~%P*U=qZxygsTk+n5oZaxzcp;)OJ1SgwRe`wR
zJ(ij!JwrMQnBg103#ratz%w=<BX;By`Qsb^;T;w~wU{2vc6L at 18e@IIStU#LZslZ1
z-ea33sq9+tPZh46oE~4HqZPUeIrtF8&O^{)80|LSj+}3yw~&|K#PvZYP3+qan^(l&
zF`Mo3okGv<e}0pla6*txYyh!7-#P<+ct;0x*i2s?;*Ut4#C{mI(%x%m1C#;#<ciy;
znC}#jj~4LOJoz7IeTSM3MIYD1O8Evyr8i{q{|DKt7++QBD1hOBn7Oj_Z})`;o~cCa
zz#I5xde~dz3$=>-`B)bRy+ex*g?UAl+?NUvhfbm9-uz}qcs;?-`n4Z^{1$iv*MRLQ
z;uKHP%TI}XGyP+f?KQ-iXyueMzO(f?#;#hKJY_XUgSk{fWD~^C&iV1Y<&aBM at Qe>_
zq<P>0YQtvQ>oC3!0$*an?)iq~Rq(7qpq+n1-<g1SYus|zc>%ukW}@dBP-B0s<rvll
zYVV+q^=fg!M*FaDP|OsxvpV|1@?6e^zS)iPM;cDFXANQet2xbm3<hqrFsqy+S{D#4
z<dhRkTwKpAEkirkCra_oJdKh6ACiB(b=_l#h5f_i^~1gbhr04<_~+q0*djgFIBVPd
z##u4w(-^<Xr-0KWOdN?8+2bmof{pKS=&<V1{|i=X$oDAcBORt3rX2C2zCcMZ_LJz#
zJDuP`>-hwCvtsmd#6$f<8)5Go2;YPR*u9BnZH5of2kX0|7gGvXDEFr1Re}vF31KCx
zxU`)wrFZ^Hd!M>tZ^Hc0`Lq-+3 at E^Ok*B|oJ^?<`XnQ~@^2fV5LA?UHm|!(JbNE}G
z>n7W{KBJ_u8+*V_ at O7>tvJUbd^{KOr^bf|}tNb>Gjx_f*p-yttX%8bmfecCudpXfY
z at GNbpw-NQuLtQc6Io3Wa`6k+cHaGUQcfdA-8PECrA0$sqw88l2XamGhCT+kow(m!s
zp%W&&n?4tZ06a!uM7?2(L<n1 at dLz!TTQZQiouNHE<2yDx<o&<e{M>;YyZhPD1jq%q
z#Vm$B;PdN!8I0t_A*od7W78NoQZlBA?1}i+#GP^~B`HxK4Zg|VGHzVI^`{`jPpAwt
zQ>%lIN`y=HV_p>#{UB_uH2x?f){N8RL1aAgr9*XmnG-gvGb;JoAsxTsCnNiP_+e=z
zrtk at WtK`3bPJF|FeLWz_4=N>bpq(vbzVh2fs{=BabojZ9-vho-9CW$5n0uN!%qOfR
z(Z+!iBFmstyhB^sxXlq?8i0{<L>tng&qX{hFZ`KK8N!D}TiRgbb#ncz!Y;@mU!~&W
zZeG^7%ISo$+k9JeN?HlZuY<p|7}#*|kLI3r|AI5(tAti@{{$TX=-BdTQorZ|D&IW_
z*?x7DJYtP;He}Ob9VyuR*97h95IUNG1v<YYC2_5 at kg-E<j;VDhqN^z>){GY;qn1ZI
z521YylJ-&Wp_{lp at UtwwWgJe;3<4j#Fe3qFC}qKKrt(6Djg=3Z%0+K)Mt+IA2H|I#
z3w;UMpFV}M86A4s06n86Y^ml`^=ovKx(D$GcK;Y8d4Q!?2bP#2ml&jWyZ=ii(2cV6
z?yr*)el!Z^`B}rB6B`R6SVqsW>Dgfo7ppw0rf0LOSA0a7oEloX^&Q0eE`{H_*%9Wu
zl=$lk?)S5?+s at QEp7*QAeFN^TYzgB#s)HYKsn3PcUx+=4UK07~_0lu7*cUW-OSbIg
zz+Yn+=k+#c+wka?y at LB^m=xQAY5$Nf at n-~9`)_$vQ2zl=wqkrGUkX2ECF1*aOtdrR
zqXpm8AzmtM`LM4ncj_VcF+)~gLu7(M5BJ{W%kM2<7eN--G%A+KZ{{WS*lmso))-&Q
z<ORIVU-N=p&fU?keXjnzAng)-8?^2s<k83YoI>W`SOcEs-Y#Gdvq>ADbc{^2 at tc0p
zT|8;|BUH(bWG>{^oGz?iJ3xDtqqiJktQLL=^B?o?|FQ4peqLGyTRJ`bjm)I4Vx%jr
zODo_5rR~}=Q<<O7E<zudu&StH*G&@h(IKU)*0y_x9n!I6*i%(y4s}*i+TKxMGmt&H
zko!3q6K>*5Uypa8FT)sZ;TyU)!|%Hcdpp4a9o6i5>Fv$EH-D=e><xaao0&f1bAjIU
zn36LEeq5%|F9 at c0NVi@<Vs2$VKO~=3;}vabRk!$eCbnpf{%d+fi(W83l at I>LHGsp3
zqi;mQ|4-yT*X5BxPea&uo<m``_)WM!8d>T(61mfL9M{M2-eDYH;pig$pFMNfk^MZu
zGU6+y$tZbvZoj<12n^k)1)2vaZ%Ou_iEQsk66AB<!iB)W5G0MzE5L6O9O)X2x4H#~
zY1q)N%#Uw!dj-iefaPkGX6hyFXqR?&G4MA at 9N0p{Hn)}cp}h~{=perKA78IJclHUE
zj=>+m-Wlgw;*XE-4&faUXlEz!J4?C)h4VRH at _oDP1s~5UNax$q4?D^v3%B=HyFN~s
zKhvR_Kh>cu51>Xy9*sGDL%cM6s5$G>PV;WL_WYniT$6Q)ZEz^VtqCg8;`CVsUDRx6
zZ0I(LFtgWq9eT(H95py<aWuk)`VbBg_7I0bcVUO^Yv_vs7PAKY at y;7d!@NLjE at f<3
zd5E`G6()i2s#Ida8Mc5N*jP*Sz_1Xe759G2xA`BVlxOO)^uU%-8ZTwK+w<5dkt43G
z$nTe at OAx~o at z+OJx?`_{_8hxc?Q@>WrhuJC2X0Ls3Nst<yastKBxl&}PhT|aK()^m
z=(`|8zi*fSa}FhF(Qg0cl$554>}SeW+WfDF4NoK;aIU3FZ--IV at VqR<|CFWw<>y7k
z at Jp00TLAx`S3|ucb at 11?A2NpZnxp<zqT>ZJ+)wwMI^pZdpMIaGcluQ79Hn!Vr5hY&
zD}~f`Nd~2gwESra);}@Ud~syapI(fVcE22{?~aO at iM44q|L*8P&;AoLu_jiETBf{#
zYkyDG^eG<Y^l8IX_VYny_~s>iUkc0<1+Ihf{onBY-y=S^gcMj{gJvmhq0hg)8P7r^
zih2+o+O$DZ6?8bFs2elelr5=5*<ME3{^mJxf*o`<qR4&&>DwgLNM|A459tpD)kYMZ
z+==u+NgdK3K)MgoX9iV96rFjBdA|nfQ;<Fl>Ha}Y5k;pzVA8Q)ogRhsza#y at prVMP
z&RQnjgmhn|&p>)WP-#Tb;in{Kq}@-OwoXO*bfiBFp2GL>!!bOx#j=5ulXCf8#Fx+h
zw&za*$&jeTFjO+rP<p>H|Ft#cNu1AUbE(pJen=Q#h}S^oYlEMp%o&F<KM0 at 0&yZg$
z`e)Qr5%&554d&|mBaOI at LE2QD-_$C6TA4lV-dMxA5%>Ajz*xg&FV2sEr%=p+?a`BS
zQ)gpOyf at PF&N_ at Q*~kUYWo?M|=rjXa+lKc)wI2W258K6Wv9C$`*+JG$$tk=OtUc;$
z7~cQ%7kFMre6;z{TmNhhk=JjD{66;K*xP-GugbSI!G7*e628C5$6n*-10l~@{3E5V
zoRK at J*kgtGy1l^LUA^S<p(f9<us8WVZ8~avrTgr4GVUR(Uq#Lm#MOAFIdP41760d$
z!2wyk>uPrF?EwYZpGFiN-HG>BqkJ~(Bh&xNCw!FUNnUbb8sv!zVALpB4a8On_W1Q2
zRU`4G8G3qFdpn^`1m6tl4b(RC`SrF_wF41!)!F;$>c=3*NBY014(A$TTlGX5{AJ-2
zGVK$)E(?3URVu!WDwEt&w{RNNCUt|S_jyZ*kA at qwYOE!=F!ILrvPk#!yi##Uc;wFO
zd69zadERXkaR^*(pwEZ!ZdlBl8eK?NWGS8vgReP+bYTc5B2N#SR=v$@i6Q);4Y9EE
zpKp#;MH?u!rk&WL+{50d4>6i#>7P8EK=?DuWZZU?FZc_E8}joV;U!{V;w6Hf5&JE~
zcSqi8$c0JVdeG-ipZ>xj$Nhfc+)D609PGVL<2;{LP3hf%)HYl{g0-<L;^51*;Z{nq
zY>(px*4*#SrSQ2DP=^aVh<Q^Hbw(2vUNYf>ay1>k*^IsJL!S+KryAFfIVIq6s at Hqz
z57_PQPl1OJhJB+5`?Q~Yj>Mz{Z!XZ$@zdY&?2zA3dtcHGC~1pNi at ho_F8c7dDjK-h
zz=x3YiUYR!w^4Z<L(&7jhbgOb`}#4-CfKeZc2k#rRd9I#c$6Yw#|3i^@pN<F2LErB
z)Bq>r8n*|2GCQeiQyP41OFC+)eX!@a>a6$59#}C<2mLc_W#f>ib^ehI#A=O$e<XJw
z=K)GfzIES28OH*Y5vG at G;h)m-+=o?_bP8-zmWD078^jIhsuA3}&zwSR<WXM2FKv6l
zEhBpTTc_=N1jGKnJ%e8X;+<NJkRgczu>a(@q1?UW(}<mqqq~qhJ0JFQZSE3BOJTT7
zb<z@`BsO&&2F at mp1z4r)@5aM7JkZ}r{l{*W*jW0g?u_+6mb63PG+|ed at tE}d3h>Md
zo^I9hiSwIB?A0<=`5j`T6r-3(OWse;r6QSX=Ms#4V|pQp-z3;YV$cKEMYrxEcy>9#
zfkye>pTKws&LVs~PnY;9`Ih(yKWL5844DYVJo<GXyEe{X-xFszW`vETf%xN${+(Ux
zUJMK#7wCj8=A!$<0R=r6b{Vo##pp9^6M6Qal6lrW`Ru}c_`N!5(uO;1sLPODAWOe~
znPdAy+-V8nJ>C|wMJUT6XA^t?8U@}5>jd7JCV}@)Rf3=A)hsg*{Mo|SBr?Q)SBcXw
zUv+QAk0a&=!D9GW7F9gtp|&$Rs60_h(FN{Yx5}q1)O5r0sev2DOFk79TjjvqImIoH
z(u$88)ZUW%Hy23sjLcG1v6S6R8{sqDu2J|J*q_Ahw- at jXWqacc_jbkAIAm@$#`a&(
zCasig1oU*+%~r#|HGNo<f_Q`&Bak;(4L&W1FRrTig!rcj6jQ1Niu<b(%T0%UGt$Mg
z8TzEkT at V_0t1|r1IP{ixAAfol^h?e03GXzypW*6WHFy-$>MpiDm3tQ$UNXf$`#d%B
zCl)>WlWvjxu0AW4m$c}__~VOU=XvNJVhle5jAhk5<5NoWC$jWwvqES0zPwTqG8Qtg
zzfxnh*PNBJ!iGiOr+rwUF?)zz+m-_GGKMe}>F*HJ%?G<6_kHojfHwE{=*Om5DRiNV
z(yD0^#JC!XkzL*#UlOmNgEHhDLm_l&Ev?vYjFH19I9(G-w`?~?^$x~mNK4zfQ{h)4
z2T#-v{avBGL-R9mGmNg`Oru#|s at PtaY2+mpOo{B!X<*x_=oMudR~o9zjq)rbc#0l!
zjyDV_jB>;al<#PR-)M(<i0V0E(x_O5#8R(?T at uq6yqPj|Z}iq@=7F}^Voup@{`&se
zlBFT$uKfc_zXdqA7Os7$Ayw|xq|O3ePrWcdRfX%>%ynSKPOm0?XGFJtFR`;?zCYhT
zyL|mDVTeh;*Uo&KvC}P2-w7FZ>V>FOm0O-Vo4I}|RgUXflizk9fbI1=6fj7(U=KLp
z(;4%ky(6~Mv6-6cxJ5lr4O15!JsmZ`^0y|ekr>|$;jNi^_h?c^N5{7rw_^<lnl(98
zfa@#vXCbB?ZFZBUhy%He>-)@dp5ceEnEj}GE%=|h%nFoiANILgq$&O3*R|51)?h9{
z{)_Lbxs=($tu<Pp<9)%iSMgWR4#l%XCMHt&?i#9mNT+I{O<F}-0YA|7l~1RnDD#~8
z8thsvnHOWNSGO5GSr^l-$=iTeUpL?CxC$Q)F>Ba!{D_ZMk*=DCxGqn;6{&6JjEE8U
z0Q*MP2wN%9g*^z&83p36Ek~JJP^NLW9Cqwqp)E3j%`fCDd+##OUy~RRWAI<H)Qg+J
ziza+IRiX<bx`EVzXMsrpTyJ`5KtYV*US6amaRg&V3SFwKbDzS>+MCeLq!%TQfDUN<
z_GlD~nmv094nr<mmDug9oT*tRcF4qtjfwRA1&7Hq&yNMi;uCLu0H2*YAK*M4Xm`a?
z0lkBY+brM?y-l#`S_r?eqs6r#t9+&5fX3Mn2+Xb>EnQ}YF8!KbZZre;1+jb5#Of*w
zFqXzs5W{ZAKpsmRBXt#ql+8CftQdde?z}~_ at SlS&&$II0JNRZ0{Lg<u9})Y6x5gj7
zhKLz-H%-Y)DB2QYx(y%pei`WQDnjQL8kw=9WTpJp-Wt- at 65RqTWJ1S#1*9JbAUBXG
zrYA#I{Vb6^iNrg1VP5Hm6gv^qQ}I{uV<*YHag-V5{4%48nM>k{xrF|e!`_pZsgtyy
zRkDV0+{F7wxP9hfk+{&1dBHqfDmK^76k)C at 5tnH<@Q5qW567{O+(+&uDWzh&8DpX`
z$%b*Qca{(2v#gqDI6Go4M^EKwb_wZW)*<>1Ymk16zMzRgoIlx0!@UaoXIv6*x`oK{
zzRO#j+Hr)h(d4Lg4^$y;juGve=X0TB7sh4Yz#jS_KhR%JsWBI}yI)RZ=1Q+9YW-kc
zMhBTE9p6whJ5Gd+`}b1vmFL4NPQOWT0wJT=#o+Sv0xL#ibVI&WIJcOLZPe at H=sxs!
zE=Pm$X)~KKkE~&K^r<4GEo&KX&4XXVX8>ar#}?4ggd!)IONa%lSjdAvRxRQELXX(N
z%Z>xvmuJX at og|@`GR0awch8QX)JE59sn0U&ts%dXiG5tru9&7zeF|y75lFHXx)JNB
znIbmWinNYJv(ojH3j4m?u0xOmwo(n~-}A6(4`)gH+7UxxhxH)ju30O`BtiJc+o?O@
zGw?j{0AnI+uLDmB>xPlRcT=oghy8VxOp)+m=o-Ak0l&Cc at l04*XH}^wr;e>$S<+bU
z_Hcx(LC7U{E>f7U39kCpATE0{t(a~IVR`FAgw7hZTm=6wbDdhjZeuGm8o&4mbXbG@
z<|3{ZFq}a{7IR90OSKKSlXYm{9!*h58J^$Y`*O!_3-E0ei{~oc6>Md?p`Ty^0Dp%(
zLku3F!w{)mcHa<#o6YY*ES{M3X3FcVjcOXQ%uz~!H|PGWJ&zuQ&!muh&g=CQDk2dt
zs15lRzz<)H`CUDL{Wq}3td5EpA at XitHq9S6%lOAs=Kmf~jUsZcbY%%g<J6a$?B=jb
zrw(wB+;U-lSA{E`wc%ROq&&Ruk8=UeY^NFPng#RaMVzfTzvQV?L;{<@=uoV%Iy5oB
zNm^l5izL-(>q-*)1 at DB<DRXBG$XUDLmt2WDhsOxL7ObVaNt<Pz11^*axI5=oG*jxy
z?>i)VeD^$&J1+BeWwFa8`KaIX at J(x9<_oOon8~)9ak52Y;TVwT^8<Nw1>yJF#Uj00
z at oZg4Cm(T4$$x0HFaGlb`UJS-pIu<-`ZvPfr(Cnqq4HZBGgng;tBf{WI?pQZf7fe^
zS&8dMaGk38LT!6sV-9>o=c)?eug%f*f2c8_9AVHATbB7u<Ohs$F=FggBfeyAe|p_8
z@=TCavMO;-ijiuo)rtqM!#>^|lN2qyByIeXqdcWcB-r07KPpCn`aA&LbD4t6 at DayO
zHUhu0kmQGTXhvutFgysIdwYCg$L<DCXrMXd5mJ|jJ8~iW)N at M54H_?G0(TIzt)%fe
z?!L$~%Oap3D^yJNVWF>ci9bEoBQ?|Cp`mj3?RkZW-=Mx1G#9vt!5a|cgy3@(;Y_gj
zU?Yq%`!6<Z3~~Mdd{|9}jW48>hfT;cimlCPB-oGx%6P-&t7rp1i2<~*p7`H#_t^KL
zAEsjc8pK=*!!`F2Dc09{PCe2Vf$p0!;5Wa6 at F>IZn^*Whk*;#?#d}eB?t<Tzf$B?#
zT|i{xGG9$qh!EfQA?<Ry at XBVS&CpacX_s+5m!TDN@$FwSwZN-}kIS<ALGcxS22L}0
z5t7G4pa)Oj{9yB=c<+VO$8pVWo+VS<ABX$rGHlj>EP3<8xQ at WJe^$5k!K_Qxhq9E-
zGm#dVx at 3GI-pwKVUeAw;=jT<rGv1z!IO at uYF&0u5-SmrwZ;i(oOMQxGD0sP02tT0Y
z;2S)Hxb<ET=nQQ0Zu9utBCjr+0$EaC+^GTBX~-0bPx3Xf%?{Y-wSI$j6*wxuQcs0_
zGWN<Y7x1CscfGR^I)31)Dbjpe&|kTrm3G7 at 0iHO256_TSNXCQZ{m>p#SDH7VWbKTR
z+V^Q5;^+qSw1uzncRLP^Hu&^VhaF2gOfgdQahkspd+)l80K@^rzdO!qav(1q9JoWb
z&9k!f{hzp5nD+%?CXAay?zaO<Fec=%QC1F-*ieXx=4Ya0ksZsDoK?)3-z&m8J)*T`
zoB^hy($VW{giTcg;)XY7e<Z02P4E{wa!)E9CSSy$2iATu^2JyHU0mca`MtifD6Xup
zMEfqHHtu5Q;(3YoJzU>rm&KIXOZ-cc6#NpZ@~i6DII1Lxa#qE at MU|{u*52jF^NW>;
zX+G#%O;quqDM3oGSuz?whyDd~XpnofQ0Q~nf2w0%^d)t9d6Gm)>r3<1wRWZ7+oeiT
z?dxYa`u=}%n))}b)F)P~Y=T@`-~R#b(>PQ5<ehsQ$Nb`^l}Su^e?`y|`%kDNFmE<q
zfWASg?$yJdNAenCbgjjE>sUtCl>StA1m0bX7#_ROUt563D1v-iF*D!w7eU!r-P-}p
zH7Spw at 8&yU$2lJ|e2mNT=I~T)a~Qk8tiU^Fyi*6C-%7+cd77;(FlHLe3Zy-gs%c(~
zeY-*YFxs4)=b)c*5I;KCb#(w^9X`7<?0=bc4YJ)WY+$YSZ<H+OPDPzII{h)OQbKzQ
z2hkpj9gq1RcjQL*awgk^v<KSe(Cd~`U1`3Sv`?}<-`8OG at in4t;j8YKG*`+R=}&Rg
z at LSM6>F9e3`KG|;s|EkbfX+c80Y;(U3dHtNf=^3kJp}(LrLPWg#OfKJHYvfmX4)?Z
zaj#Y)1~t>Jvdw4ag1 at cvIf*$i%u+e at 6LzY6U}a-0TS$I*=c$0toY`2z+UBaqjT3W%
zp^FxR=^A_=FrDP%K^?p63qpHbC%JoAhm$@ngbbCg5P0Xd2)y^VmfA$MeEwlesrXXu
zOvKd+UWGlm#=nlpLPG8UmsvIP?tqkT<J9t}I5q)G`Ahg)S$T&1pAdILZa2L>v-v0V
z$!F|h#MS6TAM$`J+JftoxL)bp2U at UBpqWB^z!1lE?H#=TBi{dndH-v?vr1B@&0`_H
z*2aY~|6pCG^u2 at jJB6#D!%%Rf&RWdj2dHxV7xA92p2c2Q at eqsj^Tn^BqevJZ9Plzc
z#79Xsj47qxDwO>$&hG?tg7-171pS||&ST8h4q)sEUL4y)#!==V{yWcEk2EvVnvu3B
zRg1Lw&U&KD{o~kTYbp4F{O_2AjuUthepLxu$|>|kJqI`sAIGErGo2=~Hjwen$t7#Z
zDcBa^TeY*2y9fTZ-5mz%f_oP?ix%^H=o7Nd$2$ov`1CC at 24T0Ki}CX|<|f8Y(x({1
zmsp3_$#MP38R$&$zqs-M$Mc0N1W}0jqDB4mL>^_Y3ED{`wuO7wL>l~nk>}@c`NQ_j
zuKzfIDboi`nS_W at Iawx3?W~(9(~jf}1(8#^-vo~4;6N3P{oQe3tD{^W5jm&JHFr15
ziddZc`-?F?perVJj#zvBLId%iAI2AQ>Jc~GGTsS%+r^IEu6YF0!1Ik_isy;vZvrpf
zOkJQ)$~N0Ka7uCAK at U^^l`O>l2XD^0m9bdq+)pLAGr at OskZ}OIFKnGnpYZ7+ at q;u;
zzpVqaVJmn}N@$A#x)Vaj$eI&AvF0 at ImgKW4!!ohXJj*i(U07$t*!yiBAC at WN-X!uU
zVmtH9-y}xHpAhR1v*t{nSaYs0YtHK1zy0gm|6Owk-@)L;6x|11#v|P%b~j%M9Xjl`
z1n}n;Xy(=;{RES)BI&%OGXjQ>@4QBBd0rERHK&+$Ep-;+cuA?qep~axr2p8Ak~_YJ
zd1Ch#?urgGKY`f2wwvK2a6Uj8+u5gxH3TSJ2U6vlgPigXGxq`J*-HV+_`?oOvoXeK
zH)oW)hSM<@`a`<(BJ7LsZVN{}kssGi-k%Y}ybt^3KTqUU&&iv7-pJ%Pn|ZG4sO2`c
zBPPXZL)e$dTWYW8E_Z*FQSL5g@=s>+H)<7U at SJD(uBxk&zkhz4qnOwRIA#A(ly7~k
zoa7511WBynPxu#qOS2({w%3q+;O|hRRh%`5uG4kM-+=rl)BS+&e~P3VnRNAU>D#o5
zlO$ai_T~Ibj^d+rzqcPSt+ckFfpe^DlXSB`<{#J#E27 at u$eN7`<=A+t0`aMikMpo+
z)A1{f*R=cZ%;eV at J!fs$mx at _88J;<e!CKWZvWN?eJObDr3dDdR`0HE#M)V33b`h?V
zRKn at JtP6!M*l*W4d<tU)MbUMjV_oavUzNHQev(D8;A2MKN7`4QZLcu<oIQw at b#PP-
zOm~_Z7~M_IcxM`!S6}=<e7EmDPWAp2MEnRAVpV at yepmOTa?}NS(#FBQ7d)r6Uuwp>
zW!4AvlINp05j#{DbcMMt51oyC9>%^U_tf4{Ijb}2le<Awb31enw@*>ccNtvmh0hZm
z#K?;og+IaPWQLWDS($3v#n4&!HtheD;k94O0Kei_{Pp0AZOk4?>{pcqOu{UzCqZfC
zo&S%scMogoO5cV()TpE;RXj{dTjeCR_CTb_v>kh(I+lr)QbZ_wXe!h?Lrbw^t-q16
zC7fkf14%XzLO3K4AOVpC#1kT5wTg}k5|v#;0wUFxDng{zTHkx^VB2@*eZTMezCXBj
z*x6Zo?X}l>)^oU@`@!*VuA>+HJ)|y@*Y5E}(7iVf(x1GXgxGB&=SPO_y9_pCAv2Be
z*J5nlklR|nYK8SrWQ;xWJKqk+GMd?PdWCWz3)t8U;P^en9+J0*7~+$hwRfb|GaK^s
z51vKVH1M-67ZBa*xe at sDktfF^_Kl-Wy4GgGHM7Yz(nwo*YoR{NGyhftbVV=VT!DST
zeHyv at oLP}Ku*Y?utkmD`Bi!33L%YvFrZfV3mX}n&?W{bG$O~Wi)`|a=?AwbI{;Q2+
z|J8=qNY#Tj{wEi0V9XYOHqi!&^}O+G8_g5_aQj^w`}(kUdZ#+t at H}%pfd|908CnaC
z)1|PM;OlveJQIA+I;j?IdHq*g>war%wxJDczIPJWmdLZ<*S1iDlH)dhk+cOYVzu{o
z@@n`Gdc at NxUFA>16#*&oH2)N-nQdv`Ek|C;90jb$k`V(LV}Wv{9Qpv+<L2WzYrLH#
zj)4BCNALXq_<g;1&&2OFqw4>c-xFKwKkr}X-Q at bcCo{VL|NHMpus_^x=5UeDu+*iD
zWLZQ(nE5WVdKndHKfw&~Utss<yb;p_o#|gh-wsc`qy%5ly_qKD<ej{<m##<yw=isY
zV6y0s;HRn(Kg`+EAIVyT`!VlgZWaiuVpNXYGr2i>?_Kblc`dA>c4J>+-YJxxx3%;&
z(jT>8ulJ7wFEADA0iB*)uOioD{>6-J72<l>f(hBNz^2YQlS`}7u5QOJIq*e7)WFE$
z5iF*EoUJ^qkx%@(6 at 5&O4nC+l-#H6YV;DzL&RYKG@!vQi<Ns>;POP_ln6v}!8Cwqb
zF{4#2j8Jz5M+M^!zJVP%*uUG^NIDq0t(nc`GtfCITW<3kvA4(sYG58L*n2W<<eUoU
zV1GydbOt&ius39We(Sd-sebb#h;22|!E)zAI?9!2d-L)A;hk(bI1D#noju!8>#4M+
zc^AUgsn<3kc2kA59Uze5w`WHP7PZ|y$9f|=0pHhzn8!=Bb+Ci45}g#+`4fMM_%^Va
zh5F-&$LMz1Nt+|P at w=l$?*8*Ebmn8Q-R$7hw00UvtuQ|ZHXz=ef_e96MZ!DL=&K=T
z-Hamm-d{@GVada|%;v_s)shPv+(5=J-p_g?CzAhp+&6gl1&;8zznZ at juQPv`R73n!
zj`fK(rg8AW={6r3HNvkF=idU~Rpmkp6=~M1GsaDEbF*XN&v^!Inc>HI#%~_{gBWj0
z7osx}pSlh{-5%&Y)1db-d>;5c++g2#QAM~;DQt)DC7yb0;#pAVal(!~rZE722tPA)
zU&Niqf~CNXE%N!_WI;|^T#oKHSs?tqTv_0${Z$qmhb+K5yy;J50d%@O;<L!j-?e;P
zREm9N2mCI7B7P+J1>1;kq{a{XX3f<j#1|dZaP^4e7L&zaCT;p at 5xBI<F#pT?%IJil
zKQjEG`O9zjrO+F~Le$4XFP`pat!{6`G)e93hu}tI(!4%gK$m~sd at x>-u;;}j>}gSX
zjw|q;2=O<IaJ&y4Uf%xUI>#EimvD`oUT~=wwMj>WuZD+*Df+fb at -DpoOS!gkES9cF
ze|OFMlI9Bq^mX54;x{;DrUHXjta?e9MU`s1UqBr>fdX^FKhKi2VP^L-1#+ab@~X+_
z08LcHr7QgvSs(1^4$v07DNsa(zjLL(eAPdJXS^AtUG;MKSz~_2F<$#Z1!_uW8*|Ay
zU=(j`t6EKbrY|G at ep(x#IWJi39Q{NP8aiRCIV5 at 3Jc<1j$tm0#bbr-L-9Pv>3Xf1J
zr`1Wyx`FNUBx$z1I&f;vGHka>^xx#Q5Fh8v&4+`^ubzIijM~{s<f~BJ%`c;BI#D+g
z^ZRAJ1F`y_fDbw#WgKXS-^HdQA5amjYkIe{&i}&95%%+$X6o~<wfODK%~rgh(~p|j
zowhX-I?}lz!}6cNNi&n^&)AC}_IuuS#9rJEUH##LK}qq at 42J))B53l}Hp$gwRZ!BZ
z7fUjs!?#P{QZMx>AFcXxP;l(}PY`!3rn9L_^oi&MTNR~7&6#iLuce6buHSksE~aT<
zH|k*2T*{;mVC;|!=lB!i5@`Ys_b|q;shF74*Msr~yCwE}7$;62dkOm5P7z{qbfN!d
ztPj-XL_a@=-_*5kY7%wb`8Z!A)J0q(F`%>`1~r?&_XxcX9F)*4<g3Cu4C+SCH=R~r
z9JF&)80PR+%-6=CGpoYDIiiEVCG&_8JPo>nbh=7?o4dBHz8IJb<&j)%rAQYN%K2Co
z8V1MGPz6Pf%1{ON1&c^)+9Q5ZZB#Rxje?!@>x9c-vgfd28EVpX7LvT)a|<-LKQyXu
zZ#Ifwl$7_TfNLyIFitaqaSii`K~QYEsV%vy^KqA$leLm^TgrqlJZyZbwsMBfx3k>{
z-%kSzKB~|I_Cf3|x<?BfB@;g4fAaXm=MA}-8E(Fm(p~`@6nhX2Kes#;u at fWK&-Ual
zJo6S at LwxL?f{(ZIM5th+uj=j&{I>iWiCwfV%S)5JbiO~EyH^u`n9bnd0+!{V6kJ{v
zFJYg{4NvXMwV9-Oq}C0v{<(<5D-mzahmRb- at roDa;LZeYH#gkemoG0z|LTW|KApqk
zJBHXMHwl~J_6B0tJV7XlNsH=Mqz at Pn$F`sb1mcOI=3WN5ObYnF5u05VY^zcvzCVO#
z03Raf3;$fE6__5xK1famiGP%4h;+z>!a5e|1K_K>RAj4zy-3c%hdz at WD+I8^feWsZ
zHrk}n-^;;8M||u5;*L2C_)TV1!{)^tB6G<e0H10J(M91yXh5vV<WbBwv*mKcVvYlg
zNNj%SNIlpSGjr0&_tX|}@h6N)oXSld*c;8_5Y!6=A1d+y^AWFn2ex=sQWM7iGn*0d
zv~uuGUB~@jn`kSJU?CLDO2-5~BF5swVVdQu*3ogEE!GsVc_hcb#_<B$Mm+=BZ170b
zhcDuCibx#4J?4DSD=Qmt&+~^nHD~?wL(!_kZ#D#Z4(jC_Lmn&M{9uj7Wnqn$(ivEz
zCnwfu4%J70Mb>Cs#x>Y%1GS38z}5m^tW(*4tkYunWSJ+Nxc at vZugR-eIkER#9x?=8
z at i(~E>&gb~^G at INsy0Vf-!!^}j3M#K5B*WK7x9!SRJHvc_J;s!OGp(B{~_DOFK5q&
zj2D!2?*axMJlh_$Cig=Vu$DJOdnC=8V(qXjV at 9nsuYEV{aC0B<wymd7)21A_-_r45
zV0#-_8``;qT#fSJ*vHp*R8REl1o5r%x^|@tN<$3OOFG^~`$O+G5T7IXJM#Gs^^w<W
z_<HVt2ghM?4((h<e at y(@lukN@{W#pMH{GQ5AIAJFv at 79H>jz(hLHq$?O6wrQ5L<c|
zJnE}ncg*B9uA0Qk>`HuZjGkvM*lf3`HtTKG_?)--swIDOxy>Mcc_h`p2JL?ZA5NCb
z580PVqekKHe31-&74dEGc+)0e?vUHgZ$P=-8n%%xmN)XHk>`g8<|qa-Am?u&Cs-EH
z46M*ap at OXz-s&zA_IG!yyVf*XfBto>PFqP#0et8q*}P^)hP26EGBG}<{Ub1jgl{Vk
zagQP<na4j_lQd>DB|l->o!qD0?xBoOQuAOtsk8kS=0#Y5ohc`AGyf!QfNy(g6=L|Q
zp$DBLru7BnM}bE!bV%d{u6o1zCyzp6W0{^yW&<nAW|2Gv at W8<r1>ex_Xn#D{SNw);
zbFi14MUF{vn1f})GJ$tbyL3TP)>8m(B&%eAMNSnvPonP`$N$}u6#U=c%i#M3`2RBZ
zJ$xe)T~84Cu3qJe50M&Mqz~g>$zAQF?;A;O)nMAD7nA2a=tpbH7gI at JOqE|K9kW8u
zV?ABaws7%9^!@*Sz3Y9jD!LT<sX-hDIS6b`WICy<5T;|Tl}5jLR^V6orRpa48hH=D
zZp&jKsmDtypIk9Vl6tqe!WcSjpepNqKE149<R>+=ux87nl{JV%+}{4q at X-K8opFU?
zzyQ6^u|->JMBKDWRyQ3vM90g#HR0DU<&W0LF3&1QEtBgPbHj at +XrP~67FHsUJUswh
z(a{Ov*KI}NiaUjL{KPx<(Nw5`9pL(=fUMA?woVrOyaP*Ac>cMqsj{3gBjJlpKA)Ag
z`MmW{QH?FBWbY^ImgVtp07o6fUgZ}%)3z>V=kb{q_+H at KzQvYz?FGky8GEz7uZiww
z=JTsyYryWYN1nm|(k<90wg4A at wKzsL$nmJ2p=GGuHjQpTE=4<P0-G^MQ(GUWJE=!e
zuRNds1NMS?;(H}I1Scl(E4+~(iWr$mAVZC#a{4=9?E2mFF at H8;4cSChhzG=C?wi^3
z^mj?64kAC$hOjEBw2s7h-^aZF48Ev*9xy82 at L|tcX{%KvT%$y};P5Gi4?Yg<Tq11)
zpMMHi{H9Yi<T+^6ofG6!z{<m~IXE8dU$M%Q)n<Fe8T9Ak%k}wwTkyF|e<5BEoX{5e
z>+jA(9?>kwJ=kD<;RI8MK4p^Fntu1 at LVYb6Bf5$HII%!)*_@?s!1#7hTU|9FZJs$D
zc2$@z#_C_UunE3}Rlr0tIW3V2)Cwc`yiYNoocw|9mD-(K>gu{eES0Q#ZdUx3`kYjO
ztS(|pl05a at MoF4fqh0=}G9a^$N&8Oz5I;7m5x&>>Yo=v?$$D>ly%wBubo%Pua&VSs
zy^sHEMG86{Ip`)ScwwU=>I(gvPgZRo6g5yqS at Gi2C+oNS)O8UqN_j?lY{)s(Ow@{G
zR94n|u>H**yXd3c>2x{j<7vU6j#z;b78$-z!SB=R9@&0HVtzYMYF?S39zxB<-MD5S
zwGO_6rjtKxzfw1ca1F>C=f<L at X|1}cv__qwtid(F-_tGIuhu;xegpT*sI%h#l<ju3
zxwq~-K4)(4$7hlcrKKP<5L?YrXNC6Sz80J}*WG22w+6oYKWZ{$hV24UZz|h2ZXqRO
z3+qO~DO10FI^jYf_)GH=<X%~Dy;=N*`Prz|T9qibPJ#T<{HV2c9<W_&HLB;hdbU&z
z=0{#yTx6pxr89+ZNR-02 at acG}_OwVJ{m7oZ$;F8S(FvxHw!JG=MkhE|ZChx1_PxpS
zjzRsV7ejMSVXx<VJ)RGp4LAk1#~z)05wbJ2^hW4iA}d|8(=SkKfDHXJ=0(5%eAsxX
zzZdFg2Yz4Lz!tQdP<J+NC|mZoD8%r?rNnP9`#bmf-JDcK!eOaX`I(1%c4!y7KB%5<
zq|Uw51OK(cn(Cd4^)+lW at tP!x<NekVsWv+nF-I%qu1#L!VI{dpCP8k{=|k$E6^BZa
zc1!o**&>0%QBkR^Z)*y{-6S@*riediLGE(kp|TOvGyWB=N9Z2@{LP=30yg_2cA;$@
zNIYj+y7_t2lbeG~*EZiK@)K<^*cZdFN7g}?dy~WC?17H-33Q}(clf+~!U$*Prgr#Z
zi4SKxboE_aY$^)B`^0(!z6K-C`Qf|OI4;KVpE!~l0DAcMKSw(+K3?Bh=fWe=I{ymX
zD+NB3#3kT>CVLKILWxUW^fI6=r@(}LxNyxB*yxI}XEr>Cd%O{v)2YO7cDI%})1p<d
z$Gbu=NpyX)TgtpH6JJbB`Gfd?SRmJXedDq_5U(G&LU}#``@Dg5(4|BBR9WD?kK;9m
z_nzB}yc{+QIe+19mt?Rz*3lK7hpZ{_ at O{S5b!2!p{JQt{yr;t6`?*EeDW<=NZ`ez0
zmS_6c*sjY4J*x0*M?^be<0jnvWn%A^^O}8CW#eBP;^k;d*t~B-zMs`pJ at jW@mu(m7
z9(@n_S0KuB?LY8=#4f6)gNZMM-W4QY3BR*+Z>U?R%9=v^^94zzkO`%&B%VGI)3(3Q
z>#;>8wTAchq24I&y`I`amHWJ>)vYKHS*hw(;p}*L?@7XC(#h$fhY$mm!vC at lxq;at
z1)jaTqXF@`LHCS_XFm+xb>yx$?-*ivO-Wycenhw^ZN=~>DcIi9?V5)!m=uYNK6#<I
zANl)RZ at cG%?;-QI-^QonS*H-3)mGr(l7Qc`j!-|__KJ at g9kU)>cM$hDW`939-#P;R
z6zJPYC#716G6Z!`k?YyzPJF|$#QzG}`U%%>Q#|6t@$)T+DO(l`Wbi-z4IDxx!7&4Y
z1p}o`GrP&yd3M-f-v#T=ODslQ_mpf{ScP|#BghT!y_^d at YQMb%_(3uk|Mhqee0oLU
z?H4otpKuQ7$7j|Xn8Wtp+W_Ds-Xp#UjKTx_##VyguzVbUF;VwT0%AW`EU0nm{0Tl|
zo$5J)jUZg9{Wsz7i(UK$Hz)t)zuWP?f)Vij=1#1;HF`T|AFE)~?BsBf2MF%A%n84H
zHuDAKcAcz6Q0bnF^+4<r=sbf5HyulE!~gSu`~O707qTb?u}JM}(t!SM at XK_bC%+Lz
z!?u2za?1PvrF9>mRJA6Y-|??f(E!z+HSn(z9Oq|c!q52 at _&`t>Vb>GI!04xHXFVaW
z;Ftev9lxDD0Nvr=;DMQQq)t;Y)zqJX{FA!rx&ddYZs048ZlI??ry0&F-yWGY;QP1A
z57<int|*l=s<V>66Q7;F|07c1_X>8tb2ZNS%3AzB1E13Ir{>bHN}CS)ytXo+zmGvZ
zVA9{6qG%~|V3EekM-4vZKL(EO)D0XL8p+<+_i>gUb9WudPx5(Go*G*c_;cAz+V6Fr
zkbcosx$errO)vMtjvRnbAW9`EipqCavcOLE#o_sOio)JuLZ=|7X1Z<3&5(D0k?UUf
zm8WiBm6bM7HeJ_I!Pjf2;rS=;dII%z*G7?g)9;Ud^)75taMmyG&EOmHEW0&Fh2@&_
zXUa9J3rw1*h2`qkk7sH&<6K9nOw+!w{L>!EPZ9Z&O{<GTK3&it84KGhN$<{g3N^<U
znAFFQXZn6!xma^SBhy&I%6(EKskkn!paJ|1dnKw1`Of?6RHA;C<nW+2sO)j!2U3Q<
zrEc;&_xgsko6 at G*p9angby1CD@{aQ~a0^0;>*t2d#VL%p0bF8%QbsukH7NcO)fkW;
z#c<CLo;B2q(u$(C+w1bTIO@)CvDfu%8GtM-tz`V~!xq!xGqLMR9YW;FnXu2+!rrQZ
zY^uZmb@;y?$66eB<4AJqcB7u*OmZ)E&%#W+r;j6s-1Jlnxv!+?f@|Cl^u=@c4Tb&w
zvc at 2UZzxZsZW5gvI7;LFh(^KJXY5NP^)rNT`E4TgrGQslK&LL5Z at sg$0ClDibMZ|E
z-z;OjL$K+7$Z6@$C3eBq9~21#m$0v-whTgsMTU2sRfg-VcxNZ;Ne;nrBV^MLB-gO&
zk`4KUfsIv{!i}@R(OY#fi}?9bUu$VIWYi63_tqb>Hu6iH`mHwt@}eTBntluPT)jWb
z$v-FY&%&Rqvz_K-+7IM6{!Jk|eF^e9uxC|WB64?tM!pB)$&<eSEuM_}yiUZE?~!=&
zB>V5<$(R2*K80m~H7Xe>B6=p`M>KK{{_M&*n7*fjelGh)z2w^+#K+7-Y=NOy2zKD}
zG}}RZ77LX4EVMO{^QakBL$GhuE4CW^?*n^XM?Ddu`wq1-@&7|4mj_2L|5=VeSMAAR
zb3n>?yLK4-bdkcz)cnBO?1lhc2Ll|sDs$lN9_S*V(V at e4oD^u2cHe)iH3K~DG2K@?
zs!&J6Ao|D#4kE0-AYiO&;oF~QE)6}2@$EI2hP2?w3Nxu`!hFgd|6f<%8!F5?u4&{M
zLcbw8T&K$?*26E=T=)>U)6n6iMDJ)4>U!t<rjJ0UN_xRDOVc#jplN(8%6FNtfI==>
z>k+w^|F|vQZwszPJs-$pF7``oo-5SWTjW`g8+0XpKK4q+R6 at UsILQL44cO!LR1Y<s
zU2iE5r8~eixAnFty|n`Icle^G&W>>g>wf-Y2Ye(?&v92;NNuvs$PsCe&)2HlQLDMC
zt+OIYiMTxWl*?wck=9wm#nP3IpUJszW`*gdlURJdHeIA_t?<7{+MW4We7=3goD$#0
zs<w6`;^z6JZ{$6R4mdvfct2wCh3XdQQAd)Lh$9uWR3w!K)rA2^cUg|U)wfiXGCd at A
z-z6UGfG>-_5_;)m9k at oDlI~zmW(a|=NxBodhF;3+3DfaNe4fn1HuNvAGfVvE!@Gb%
zs1R3?zAW2|-~AFlh&>e;7OFeMEG;={mNw!&wY6r)&9k5TU7NrBzRmaoL{H$8{yDqD
z0DO3<pv+t*Cp_1sE^NR#S(t7z?)`29>Qgsa%6`KKOg>S{oYkdG=I{Y!zu^O>s7sk{
za-QG=%0hp|2TTbpWxB|Df)5Z=x%loN at DNHnH^z5b$lf^|j~uQl?58n5?<CJ*_Drs^
zESgi$X;d)Jd`!4Dvde)J(ENrIke)<N?ju1hE7KOHvX`MVb`kkOWJ4SDm#5(im{A3t
z#2d9E&qUok-HKR!gVYSUTg~ZWMeqyPxPxPm;1BcuLe}`bJ;b*ib(4JlC5h-6xp#p}
zRLh6_REQb%(;Z9Z0u!vZ8w%jV*22euV- at _0W(~N<o>JY)L(E_ARX*+w`!|)Xk$b7r
z{c1uzAp6e&uf7*tq~-P_&{dJEO?MD~F63e>JIF7V4bLc-Zjq-Um-uS3&fY6yBqmCE
ztLQQ4eA1>{TFA5D#re0i$R*39x^AJiEB6c~(s|NUHlM`Z{^K5jLG>$lcEHafKaMq&
zy5a);9(+>BkCyA<qf*2FIRHKU+`L`L*|_SMj(7t6x=D8hCE;C~Jov|RIbW|qHVnTp
zVw<Dyj88#Z)1~<&u9{fR764nDXFul`2>awM)ccIe0nb`+>~msZhLER>b+!R<hjj4x
z>hd2(jVcA=Jqh<W54ouh2r`-66$Jy86mY=L{ZG(}sGGKGak8YnEswK#E^{`|CeluD
z?2{h@(*(X7 at H~2Z|BvJI0_ViIJNZ at q1FPFLO5mn4TXm@UY77uix}MiZzo1}4OM6CN
zr4+y%Fr$dU!nfM}BjU$DIKk1J2JYJiDzZh3x}YB<DMmN4SLtHeprDc)>*mp=WUPUK
zsz@@9f at 3$-+{ug{l!7xd=_J=i0oo{gYQY`PrE^DlTE%0>XvU594k9%P<^A5v?h?N^
z=JWk0q-1|X9Yx%Czu$uKG-?YSzhrL9W$(wh=cwT3k5f_s+0l^1Aa7DT at B+<D`_%iI
zy$8>^*FSG{JDbj3TkE=(Uri}c>nh<F%5}WAZ{k`1EzN)Mj5k)Je*?r0qPFA=;2Ccw
z6_1VpgO<aN;5qMMo<+*_uuHBc8!^wck_vKup2Ai~-p4Zr at OdSgw9-h|ckuhemi_S+
zav$6`0{^F=rdGZ*5BKXM<8ea>efz<99R77Y<cO~%+-oIz+%tP7#^y_Tl?yi$9Q(?2
za2FTQ>rrcR5vh~ryQP(^xhI!moD~V9_}x!sq(<nI7v&RJ8~kRN)L%f(Qv-C0bK~ve
zmBKhS8$L8~aLjj~I+Dbcuq#F-^k(aX?re>)qq~UMlESHMu`qxwH4amc7T?oUK4F-!
zdpbhbSo^v7?Bf$Lu5oLB=tuOD2^+4B*CWZpx`r*rVS<k#7Uzmp-_%A>k0D;Th2+aE
zZWooHR#PDp&jV-L%GstL6wGrUz~6{EgRm{0y6X+yCJp(mi>XM{HGDT07|S{mkB}dG
zNGChWH~8mtn;<V- at pZ<{(5l{feBz$}eo{sIASR9+Ovea^eM$+AUGkM<1or0>$*PeY
zj*E<W{-eqai*DN^!8&!58Ju~r|7F(uaSY;bu)Y1}MZMiy+rOKOsg^{&eesok#8ic^
zE-Ox|D18KcIec(R@#O~m0e4JtB|rIq!xj_;$K3Z$LwyO=K5#P`FKdCl9*GL?+d5D$
z*hlzYe*M2nkV?+?m(#a59g55y-W{+HIg5uPBG-mGo^f$NPtO^>{Q7kz`8!DD>)5<F
zj0+Xn^bn~Xx+EOu5}$cVknWhPNVxMVWN*y<aXMI$_?%^8ES|u-A!7l2!1EtfjaW`>
zyWj}pw_K}QR$@=$H`rJ4ciMZVno$!Y;m#|9y^cTf<@R*G!ZCGfHh0cLkixY+Kc2B?
zB{m at +buDrWf=94c at A#4X-8*AL9kelTL9XRQaz5Dy2<C>vnCL{n<A-~4v7Py3j|g83
ze@~&zgNwO5L$He at lcB5XkbhO-UmqO%)OT{7KX at 7z31ik@toseK(7wu&>%uEw&r6)W
z7np`D at xv{Lqvu+%A8j?oKSS;b*&AiWx*JO-`~F=G=G6g$cjD$3=FpSN$-Q7RE+qD|
z&%X%H2w0%K81vSM$e2qH@<crkoKVj?1iy8nK#g^>3Ov~ie=}Dj{I6V%@Q;a(EarSe
zWDg$OLgE0id(=8^jPF^##u!iKTQH6dn9FaCAaBd^wRjM@#R+2%1HaXZJ|uV|uQ~pH
z>lCrD+Y-;zp~l!)EzWQ7%p>PvTXugX;q=KBHeg5ipTz$|PI3bftHXPAHgWhUPvC`1
zmyt1<^Q0p2=mimK(#-uHx)|~$dR544EI~dad at +iI>OaN*Or=)nhOdDe_IYWe#2lfP
zroOwjZA{MWNM-W*XF at xXr~a5l|8Wz>F~XV}f5*`!B3RfX at R2+c9Q*V}?pex!^VId(
zQM0l!IOfMgbn1I|P8!vFt7_z#bU8Skt_sw~A4 at HKU0*K0WTrACmBY4VOhtWj`idyO
z)$wR>_)Dy^p=|rK at Km4t_8RvX$hz;ieYr3+75A&N5q}wZ=1t%z)Ui?*22OCnktNe!
zgq}=d=g<#xQCmRUUg`SZkt-;MeqWEg5e3<UwM|@(NImA?lid7U2;J}^@7SJBtcyXS
z7mF?0_&zI5 at RcNY;Ucfc_#l>av9z*07QP)5=ITe>T&2idb-qS)n_ at G;mfgAzY)Tq*
z>|@Af_fA at C&nj>tFEoSJ6*xN!;(rNiWErE~%?SN64db?y%XhcL--E4H?3i2Nl<dZQ
zkNN2tTP18VtZT^q#HS?W`vr$Wdr`Zpoa%;8t9e3p{!DmlaPBg2R{1o^IsB_Y7Pg0F
zR=11N%_qosZ|l2s2-wXlb9RyY0gI3deG9m8_+%Q;A2Ut*Q%L&NTMhl0<di%{a_foj
z#diR_v#2FW<ZW^(_}3DgXE<M427IoM{isL2rZ)@xw20W97stIPFbs^ENj4(B%nZ`-
zAu{v<<Tb!YL-a}52#$^e;$y8-{4H!PWZ}W2K*wBuz9VdEq06TiniFpPMoavrTdh*n
z2*dj~S;L$j+JJQu4B6h!>Z~IntBU7wv6cH|4Df7`BrhC!-wC5W$ZN)ZI!%ai5x<(%
z6E%cMJCMiyQrKeNcF4mX=yYEmP8ClhV~;U^2eFb|$H=y|sHgsI*73QB!MvLbdoMHS
za at cTi%>31zh#MdKR8;c2Jo;S6Ou|#R?PG$!3B5*ecvwp{%tp6XX`{Vap5aC at naIP)
zn5APf`R|0HRzq(FY>C+}ebbq?>4 at 4nwZ<cFBn^J|QWk%*43GN9^X1h7<acJ3be4Mp
ze+q8&Dr8xJBfJy-<$#0G8#0kcpP^vh%qDuqv#mrQyn74st;%;5d1loDX=KppsGFGc
z;nq~}FqO&zg~-nd)|CWeeaxC!=Y14>l4Zq#k@<-0ar)#PmbCSJqGJRysZti`f%$j)
z2)Le>gCj0#MFAPF{vCA6r=h4BnvsM(tP}i)F25u98_2QS-{ShI(ATEIA8qi?DGub`
zF at v=YKE6vz?7K~RJNT&dY$|^HHt|{7EJ;ma<sT}YweI=hQ%;sVIFB)M@(ZIACfeBY
z75oBAXJW5MZG)Lr(C4}|`SOi8_m(?Y%sLt5&D1z<s4HP36iE~p&N)W<dgv?cSNtp9
z*^ZA%?0!Riap1f|q_41jco?_IuJ at qM;C`d)I|r at _?TlvZ*Zpia^8Mw-4|15kiB727
zrn%tBVeo;imk3b1j$Q3&1GWd_G!9&ZYJmuHV3yf6{#YxI3wGHHAuGV)ggtHv=Vx(Y
zJ0>s~@k=Jw at ejDyT=;UyoZCb2u0LlIj2n?71mpH}c5uv{?ZGh%rgfSXiN}|V3V$~T
zA=jdA$}`0k!Li9+drrzK+YTUB`ZsWHchah{FIN<-dW#)_ynB|DcaK7*u|&4<y5u^%
ztNV(CtBH_XyP<P^z-zMTk^(I!@cv0o?lHkR$K0tzZgB63obQOjyQMh&>Ua1=cjQ*#
z`g?-?WK1l75wwg{$xe$}$bN=Bj{GhedT(Gn)2frH_`A9N3>e?|U$B?p`TP#p_C3(q
z(2fJx7~IqKz55c|CXD4lK{1|z;-29n*if;4Ed;-JZyDLU2^S at iQKDkhIF-ucAaf25
zFtfo)1KFR#$&Zm_l|u>n5dz;=r4RhzM?J!gU9dA1abp?oN?SSj)w~EER$4%=$A0q<
zk_$8w<1q3Dcm=?9=g#4w$-PK?Huf#oy~M|aI#wQ_YbP9|;Pmi6Pwd2<tHHDQx9~{J
zL56?8)fd7MPwT0*;LR*XO;)L6Bz!G?`(;2^Td8B@%pjj|@abLaMce2OUg4^1j#T8^
zAMa~KPDzm}l|9eD#pOZ927cMhKrelp;0n_g5nkcYi-BKO4F(oh-PsKu`r5D2&SCuK
z5Rv20{ta`Fxm1IFl5n?uD`VQo at sywp<3Pp&`r1*&uQ81CPa<x^YqvkHNSs^cwS+v+
zt|8d|cJcG<4#;g9?{6c~Q^dzOedG{%&#wPDz2zY8&FQ#4DP(Qj91-j$vZHlMDMRa~
zR&laor&IaJpGEtj(^c4L?CF0K--hgkel#^J2>yky$UQlX>&0In!(O$fijToRalzgu
z%^7`Oe9X0vPRZkZTg}{<1%lI95elpX(6*6~naFR44deygh|~9z&&yk|59WLK2ge3=
za612bm(Cw}Xk-cI338yYXH}E=g!u*@f5<D$O`p#);-&CSbPyfO=@=oL0I&zEl2yWU
zY$1ORTTZxC#|$w&<milunO9&#zR|a$Q;^sBz-kqvu2U)O`;suPi?2XuoF{x0I-^%_
zEp*0th{F^Yuzk1rb-ccgFY);judj2TB5~eS&49b^^+ZZf)r2qY&!8gwrbk7_)DgP_
zwnjdsUvvg`Nc{ltM&Ig|rArLo!LM+fj$GTD-e0!vJTQvI*89|9?8}7jW=n9)SHnsl
z@(%qi-6quGb=fTcpmb%l?a%nXM36WhOz`zrs7-sN$WwjppCmr`{3O)bYh5{)()k=D
z_z$f~+KT;iGk4DHqZ^h7SY3K at l*2JY{3FR-nD(u-PkvK6Tb?rHfZtdv(!~{Ep4X2U
zNbUmrjxAl0IDZ4=tnu;U5wgC{y64(*h%PI>Z7w5vt|!KQ(Ob4d-0_TUAIA5p2s+ at B
zC1#yxzBMf_pXknLYxRT<_#d*tQ!dB5xW9zFOYV8pc%Ip?TbSny|Lb`$2fe?Wc%G`^
z^niNT^Q=4f;CVuh>{mW|IIiHg{y*Nr^}A8fFfnJ*U*FBPDva%Z?18U}cK+@;#%vbM
zi$6mLk6m)&|J;8mYG6HAK9RG5>z+FZJ%$PV^MCdAAo|+!yRknz(bo+R`nvV1{@m)@
zRhq4bZwzlGHVtPtU~E4Y91e~-riPBAIK9gg^3%)f!I(qVa<&M`3AkA;$R@{;6 at o9x
zarBBH<<_Vu6E at g~+;zaH;~4uN<4^XjN94$z`*E}1Jk*_-m`B7GeKHn%0~7eoe?E(6
z6ZSR4!7;bYKEE6H$R!V+C8T2i_<xN%`gH5Z|83k`e;xPq-;cYeKR50<WZa(${6CL7
z8HXo_f6bMN(L|EIE_+jv at CuE&L-H%(_d%?um*CklQdTq)9VViQDv-WSCBXl$6dEYX
z at scJE{ATOvj}ZU4g?L*XWNyrf1wsRt|B%P!GwAxClIsP9+&R at 5*SVMzgWUZdk-~S$
z_99+aI<tZO5*+7w4saj9mQiv(7fUaLm}L>kuW%!F<xJeCSdsA45^@w}n9liE0IRdu
zWR3GQU5Hy`Iv?i^J#MCBCUoD$xULiZ(e=;6INZ11aA65 at bchM`!#+F;8L7LJ$v+6}
z$grkDzL-2iXsASC%|pF{a?XElhR)!tshY;|vk>3yQ*-g|HW8oH*lFT-fe+?w_+A>a
zHs<I9a#xM8BFu+P;Xkq at j{Y5D at 6763)E#_Y(2+rK4T^*-0UQ<;IS{ZhzlP_$EP8?E
z`kE<@-1t}*?}yKvrausU?Qu at O8r8r*)z4-Vd<SfglhFC$$8qgRAb(G|o$rp=%e!yc
z)2CuBKAmHupbt+MM+^0A&1e(R4WKs?dwtWkK1ZAQ`R;=Pxz*Xn at VPjH`+8Hg|6j?q
z#qPi9g4wZ}+cOPAKYdh#{oD_0JCob at Ab%e0cYbp_Ae*j$@esD^a!!|otqL72;pf-!
z9l^LIakeVul2gb%+Z~&W{ir9W9~kqxw;n<t2Kn{CwWn&GW3e$!m^Y77ZRh`v8URCM
z;D7J0lIPK7?gi<Ynh|B$t4o7UuWZ(SH<Y824ZW!1bi|<_Rhh6Gn-q!OvlD at tUD>S9
z!+t13zV`vV%MwwsmFPw(z{R(&+)HrrB%Y4nLN*d^4B%F)qvsQU$rmQV9ToqKts#1T
zbCI@{uk&5j;IY0wF^yF;{6UtrtvoUh^RXa%QT!9;rQn@`?oReZIu83`Io{6{Hd|W7
z=69ySj at H43HhPzibn$wG4ytst%5xZ80 at m!<3A-9NzA(l4zgzn`oJ7&Ydz}ZariH+A
z7BY|UnsN|FB>tM2v)P^SUmu3QUx)oTfauqYuJPKlz1}M#=NhX+-;gNZo-G;r^K5PM
zMEl;F3r|B=Up0wUuAa>1B^i4+h3Wo?_zS_Cy64-mzJg-|juXEUmvf>c>lpk0M?_y*
z4sHkNa`C8zW0Yk`D%4D8HSaXx+#1c5Ifd0Sr^G08iYn;*Pj#;I$O~N=9D7X at -rk4&
zC`}%6?lT=>crOG$j<}|%QZ|OzhBtidd5{C(E|oc#g6H0`fxHL!!^yp>Xl5*qcRE<t
z788!^zz0Fv`QNW4zJ(W2>%AgdN5{M8nY5_!1H2`2vScmy6wI7sNhdoi<2y}d at QVSr
z>6Sq$$obbc;(Uf6C%m1a!`r)egdbs%ZwGvTJDX<FC7!gVCY=n|`KZzNEQ at Z*Tx)7#
zPODbR+|dgjJd+k2Q)zQw7bx+Jf0qM?PpcJ)Pf#QVfIhwK^2d{!EOd&3S=|8rav0BR
z)|6UwJk;g`-$f<nXsE!7amkR>#h(c`{#zMX``x3!o8)oFOtg1eVBq>?*0{b)6U19a
zh)o9kS0rL%z&m+8OXOKwHP%iBzczVy8hj*P$ThcoB1qwI%*M{VaPwW%l*K)-pf6YO
zz7SUyB1VE*RftXJH;zvoJowqw<m1{VQhV07OMeqsk{skHSy-*<cJd_f at M*zCrwlJ+
z5hK5(h|p0z#IItjYGLU9QW;;TtpvV4M>S4r%A<CCu&)O4dR|c7%45La7CEwg)9|?s
zHp at 27W(g&}2k_?oK-OIH%y3;d+Se$<2H>kH)8t}}g`(|7{)@nu_G<>eGx{fmfg at 6K
z?(Gy|0F{fJf!Z(&uGLXxbR3>H-oMi_Rd!F3&H0w$- at Ek;a at 6uABi|LP<K?%(Ew7SJ
zqKc5Srqb#PmP-sfIc_G)6b19tBvF>RWpy!fw!mW^=eByXCNEaUX4rp@=aYN{FEQGl
zqAeP)i)(abYaoBLO*7usq|YiN^1-(#^ziuvhnug)oT}Y>SEosTxXibx(JOu~@O#y&
zyV9N`HPZ8e=?3Jc4jfGb)@7=0dScc9axN&yox6i+pPeLQ0e$&(|03&+ZRZ@<kS`H0
zLcAv|Gw}#D3-tzeO4>W}PE^W|(+B2by$mWpi<edL%je|bc?dom`QC_0uJ0 at 3TQt*z
zCRUXbFtm5MMRWB#qvrNfW7q{rTW|_ucpB}!mfH{MG`9tYOX>8d+QH}F)?D3LhR>gY
zAMyoxMs}=Ej3n&__=S(TYXf|O+YQdN;Czo#2Lqn(^0cc;#3G6fye1nsfG<~L52+&O
zfO9<eIumqxWe4Q(G3$-w+|U-kB8*9QsP5thiSAxOh}lo;9Mq~GiWRpyuW0izPSc()
z(@d*3AZB-)*!I*|IB<FnujIb)Tvm;ERnwHe(CL%%sC;!1^u-Y9QAH$X<8x=+i<>hi
zLQ~Ht0K<j(*sZ0~&IdZjkpJQ(P~!6z?sJ?g*F!auJOjM?q(2>q=e7xv%M%WMrl_~s
zxrA$SstMQ at lb{$r7%jLKi98~52Aqjl3+2AZp;_6^#eS1ucUEIgB1bc5=gM~IxZn;N
z)L`AXo9vjU<a)2o?gWSBn{Ige#6CafBzTYl8x2omulea3Y*&?2!!++N-NBFb6@@kU
zphiYa0pX%jIiY9G;^I0?(3zF(4&+--t)@n;-<LKeoaJ at lJ?CRR+~$+qe*Mr-Dkq0G
zPB$g}A$?rOW9c|t*DKYww!x2K at V^}#`?n+3yCffqYZH8T;(2sj@<lFZWi{~^K^Aps
zG!DkSgj^q%dhu_Leo<~~D*E!XKm-2U{0KWZi-uQrTE8bc#)0p(6v-D8JN5N`fkZYK
zZzefS1C#QNBW`)}fkDe>?<FC2vGOR!>o~^C$?>S9vRXQR+uQWFWFMJzXL#E(S+MT*
z5XJ+z7w{!j5NtWg`4{9So}*L|=coe5HRS9Z6ze)se>j?P&-khi`z1Je$oGi*0!uRd
z20j;PYkl5E{^?b^Tx^r4c4oLe27e(V=ke<_ll4Zi4IC9}d!N)ox2r2)o2KUkdgMne
z7a at 1Hmxr2B+K}ab+VGR#q>OA3WPx*Rac8|WkKfE9pX9T5I!$65`Cc at qcQLrWCXb^%
zdAk3%zqa+fM}ElijoPq-J_(Y&(t?m>3$;NjRvy6`I4w^XkD|Rv!0NRRZyVGs`XwMg
zD?yN(@xdB5#I#V`tqpaS2Qp??`~N($%b)PSGWJF6n45U$Yt;xfE(dy_e~wn=EZhE8
zu at kz=_#}fwv9MU1_=f{^m7=@|oruAjXF7G at _L+@-fXk9U(CcyhuskD37t$K0n7dPA
z0XF;xk4%ZVz?Dl=C(oD>>rukD^geUaD7A#h`mQFzHWdx at K1_5mytgCBolvx<ei0$n
zQTfCA*1s>g!tDvNg%(zwXug;r)dTBXr_C9^EMDQPRWp=vvy7~Z(CgSIa at i7TT698G
z1p9u~Qvpih9`?Lr7w10$*7OqilMWo=IQx;G5%{IyTzzd)BWc%kTaKDcEs#6DMI8RH
z9~{Y*Nli1CvC0SicrG1t@;+qgc(PF_qtbyRET#<$3Q)r*$4UC~v$oRBOH;Aqh;IzZ
zkqA)=wYF-E%`(EJs;=lWX)<O_@{LIZR$F>3I$>-D*3UR}!d<+k4kPd}mP-shD at uj>
zgD;YG_wa7sMM+*kG4T97$Uk^lo2W>9B^ELYG8#EoM;zDWBhA<!+#U;&o<zPG!94Cv
z7;q|e{$36raB`l++&kHwVxOl-xcD`6?q*ieS%v)H{wTH0z#V0+Y0^tpyYvg&VYDOm
z$eY>4zGgG82nF`LXrRJXvuRcga0jWt8>U?j4d}M1xc2Ps`6bkvkLc<_`ZFu3V=OG}
z*y-;-oViR5J`ub>U~I|>ukVi*ti!KuX|j7$p;t-Fqu}1!$RsY`$P8~Ia(9sauX&mJ
zT0xdE at _az*Yo!6H?-XPW3^eVihI}6PiyTf_wm00|*$kY)TGYiv?0Mxy`c=Yr#$hQP
zc-~CT{z>ENV1pM8wh(G!bGl1c#d`9;bCcimm at i}u+wl8iL47Mbd at Br5$W<&<jf$i7
zdvLtDIa6w;cAm6Azlj%Vh#wm{8Q^YRd1|Cz5jXlA&YwhnNaj%CmkHuM9pD%g)`?ps
z2EqxyvJG*Sh=pB*6X=*1WK;q4m&sa#e+$Q-x18)VB$x0#Z5Zv7;QaKx$LV+xu at R0q
zeTELG#*yo0g^sv8xjaO7yriQN_R9T1<x9`v?>VBE;(k@|rB;g{wt<&V<%CWN-aVC*
z_{m5t)o>m;hk5h>-g~6qJm9a75c%L7BYKg0DeMdQez2bJ6I;`}gv4L)T<x%B^T{65
zQ3XG1Oy at E#E(0H~W0crvyi<I0?{j1y5#flwUPC at dFV6Aolelw2`1uiu?wuT>kGLxD
z2VP{^mM)9Mvk}*eEEcJmK0+<f4+7hhrC`Fu#5P;}SLk7Dvh>m(_~F;UhX~#O%~)X7
zTkIv|d%xG<r)1vj at SE3p-LHq}SCc*jc9TKf_;c*e_Feu_ at ZYss@4{Y$eeaefHd{wy
zdaQT<XhtlmZvfm|G<^4TCG}0-t*i|@x|iiqy1uP>_7#@?22HLz>b^z2eYs+w9y!5X
zzvcuhLyzw|LbchB?7FumQIhw09+zuK_P?(~*GTLmB!@bZ%pVfBfAR(u860!=J8<{F
zR?J$z<196=-w>+lD2tpu@!pHHH*oK>%QT at 1aQCLI{kx>0yTJKSqFI)5f=3_N`~$eN
zDqw4Bxjpu0!nKOH8kZ;Kd4c4Kp-x$*bvPM$s^>Ds^^}T!Pm$mmA<_oN^h9&|J1_;W
z7yHcxcg#+3v at -NzaTVs@j^F*Scl}TN;M`u8XJUwbLSp<CFSVOjoE|U?<$Q{LKjZF-
z4!IsR?#d7|C;78D=g2_q*(#Qq`4`Md_~Rj`NxrSG^)6fKw$gdTxp9Uzu)y~%!v6{`
z*jCht=XeE7!=bauoN_utH6+(W^%KEeU_L2%Hab{jMh;>RzeQW2RA~1j{(Ov{Pp8j_
zjk at nVI;kWyr5Ez1k8wKtn)v(FjmT{-4Ndd8PNiM=?VJhRIs5#t0~43S>4k{H1;<?5
zE|jt9r(o~yApNakRc=p+GWZd_&kk^(rA^mTA5(xQY&*erMMP4lYYZ8|k9Id(kcX*@
zdDd*{WOAM$KL4lY1|Bk;Gd-J_6K2BtY22(P at su$!$6b?fv&3&M;zK8~cE+^N68!6<
z)xuP2Cu%vU7UGD{`$N(+#rV9ReCBe~cKI(5Dp~bH1+_z%#unncZ0j(du at -r2hy0(y
zd&+?<iX<4%&)yR?qwR6KGU+^}U_JFOCx4^Ak9FIYbiT!r{Fwfw<c0b_CfoFPc>J(h
zpT9T{VT|vIqruJlmJo5>2iSX(V~*VH-R+emH~A4I><j4X<nx5BbWe<&F{%`6e;j%*
zi{owZOQ?hc)V|iK(+hDtX#8$^F^&g}-%igJg5S at 0Z3eh7VKc<RPtic;72 at F=aQ|bx
zQ!{n!Q$aO at QshUc^HXJYZXXHW=Jw~DPA#52GDI0)0^UIKIW|HmViw}qUg^JppVrH3
ztD?@^4B&mJke-K*Ehf0cC;dDMt;h#=i}xr-9xUQE(nb=KggzUIzK#JGoPm6*N<PE(
z<ixX0Ig1wV=l91<K2GER_ZC?A=9o>;L7Jr&b{llD9QYMfcpuG2>iy#=1vRXHnb+Iu
zz+9?LK83kdWc?F#Xgys?cWvfdhm)+pU8+rYAuH=Ke~-YX7Q{44yEZcRdsHMJoWSZg
z<er^6kJdezsNHadx7T{Z{{?wErPNNNZh=#b32Eh>g3k7l<EVIhXA?7-->BJR0q*g{
zZfTD^n;NGV;hGv;Lv+UvkuOe9oYT_={?(+t62lj{>K4q&KP2T7-A^(UU+g&g+<Z}g
zudvmzu$!;%olGB5S8}@LOGIDus3C2Ee}KsB$?aca?4I|36LNSe)+`xE1 at ywn9b~=4
z`rIb^Ilg<ETSFDeI=+s}PfR8LfsRVC6Sa|jv-BqzdQMyp;Sda}e=C#N&M6JBPk`lg
zn}v3C>KittSO<(iGwF{!UEPHKsN7zn8{L+P8X#{N at Y*pmASXq7w%B@?j0f2xws+hA
zxuyGeZEB9!LuXnpRgxMjXzSt5s`#Vkec}ph8t<aXSL{Ttp_X}U#fAPo^xm;`IMya3
zCf`@$sz)FjoLbqEPa7gj5f>?*sMio1&~==FJq5fx#&Mx+_+bmihKxZC^n2vBXPrj>
zfKPd>3fy63p8se#L~_-6&3DV)OEEqcJ0%`<{6&<9y$LzYuD#Ha0ek?-o2nsx*R at Zg
z#*)&J at s!FsdM1}&=YRX4C)v+JoQNf}&^v#kJ9%BGeYTbO8 at 4VN@1eY?7xtf8&+L=`
z9d&o8Na<86$C{!oSgP|ig)CnU+;w(S#~qI|-#Y?MBR8pCQZ6diHo2!uCvRj5zm)~f
zG%RYil`U$VX#WoV6|W1v+=Y(zQ0#{>le!I^({h#zG<-$OWcd|pZpc8yRsPN1NvIjk
z12&S$S&q618N8!JUP3?lk<>wjE!xP*e_f}_&7;rCw*XtCV~@LeVE;SqyG>|ke<b$<
z_o<o05S?tCHm4so2GiCfzeL(-O<B}vyRP1QAM^Qy#UsN`NiB|}(k4pRJFRkXVvjpT
z-Lek8d&riD{bRYb`*- at n94<%7i1AhQKKFHbXOr6>Jc{IKUoLa42}uuX-G77F{r_;W
z`!H8dxwAVuRa3UqsHv!595FI69zW8)yq;azi_Tl`b_TjV%{#Sl8LLQF{t5gmWZo|d
zg?}K={vz~-2KCh&HFJwB_Ye=?O}_KX1P`GOzMwqh)-J=}kJzJ|_!j9r<PYg!tE}TI
zdl$e~I`0<0 at H}ju$;XTR7*)-R1^sm`J+y%y|8(t&sD6_y<2j?O$Fo9~5nzyA_TPnh
z{ob4w*gl)I-+MHGCp8Xou<?OBI#xsEj(72%!)Ge^yW_GKT2T9Yw|`u=_xd3FqUeM@
zhj6|&E(hm}tiw{GSFM9TlwdG{F*BeBG^yLct?v#ga%sc*=kJu*`!vOw3t7zd1>w4r
zHrPliVG4U#SjO&LWq{wF_}c5^gXFq+H|hxcf_ATHm$@aX(Y(UNUv6nxk=I`dj(Kom
ztImkm*$yUk+t#R6(`!VC>B3%XUHPLUT%ZZjWBs+N8>iMt^G>8bxE_8G=oP9nag1XP
zuW at h7M$5#z8H5erY3=t^*s7 at l!b{<5AJ-cN+oAtBb5N6=M%*)Jc}#N%>ix*yr_P6@
zc3j0CG3%Tev5A+QmZkIy-M~;x=BLK2U6sO4!`>Z^`Tr<tw=9G#Q{p>!=$9d!pYL<=
z%W~Mb!r8Ffs&IW7J0`56G?I;XwS`6Qd3FnQh04BMdbj%_yT#oMov~GZ)f at HxPH9l{
zBE#*26?+EiqsW+tk4Ae+M^6Y!$u;o3yvKdNTpBUjNNhN7d04*>GgcdF9&O?Epg-`*
zcIM`M03JSzG=j)u at _mTz^{brh42(`NTX+|-M#F``90;2!O?GUkd8}4bFw?-Er4<_e
zbc2s#!uRnr_ at m%I2Y&{54s({boTFpazV7FwDp6I;6vR2c;veL(#b0rLl6#T at Hgjwz
z*N5<sy#XZ-%^Zzn?*iE2z&st1m+|XLn~omPG)}J#oqPiFnD`6isV==eJ64{8 at 0nu<
zG^o7^|1Rnpa(3z-S>SWkExCMfr(j+OVqR<gO%t~3Bb at E(hcSPX8}olkd!z+yg7hkt
zKvx2fr5l_@>?nfGvX?}=H`h$agReAY{04$MeoxNnz>s6a{+(geoI7q>QzZXDb{Tl?
zcSrL*PV!TGr?>qg?Y5c7`<JymTn&B>qpR<$bUvqTc5uBcn_VQ$k52e{H@>UkWQ-+5
zFTE;HfIJBlR7(s*j*1Fh?-(-d2rvb at KILdF!;E<WQ%m0W^5}&23LIbL_RU!i4cP-=
zx8r#nM{%7D`H7WMGkG>V*Zzrl{R=okyW}4rzu at GlQsj3)$BKCiwSk$Oje=aXLH60V
zxb`=$*xO$r9zgy?Gx$52!N<qdxLWjYaK_%CK85{)Is}(8L)t7QtB$Y>EXXrMp6)f5
z9`Qh)!k7PVycaF@={M!e>52E{T`NbOMDQAegHZJY>dB|U7tkii4DY>9;(m{Siyywq
z5%T$Zc<%r?{t#}olViU`2F{bfM;p2EukoKPuYf+a+`loTe5eHLYu1Cj2d4sD2L!8f
z0(=R1{<EcR7ZZfHs3U0`&p7FE!AbjK)Plvn6Jnu&5Qv!~Y2f at nJKgHV*Fr{yN+6FS
z*@}2Qa$&tkbb_vsa!W}^*&L<oIi)4GVqDiYR1yn6xv0H2Qf?5GIc(&;%=uW-fId1s
ziZWKO_+(%=xIcEzDfUgjdni2hq7vgfMQ+4CZ$RI#u$4K>)u`>KPER|B=XjCM$XPZy
zUEaUN!$vTU at VfwS_PBj9{4Va?-1Q+fSt09*KADl@<<X27P!k;o-D6bj<o8nz;A_{;
zOr at R*zusHgW_&~ua;v%InBhbZ{kT9|`uUrA*E|DI!{bB~{kYf(U0%!C(Cy$+v8-qS
zKbDT~9kZYx7 at 8+H(iJ(Mqh7!ORXkv5xd85p{6srjfE?E19D7V79XB`MIxNU{<nwxk
zsO1;#b*U%(sjl47s;SksU9!hLs#ks=b(2y>87NhD?9{!sT<}|^5E~|01AW&QSOo>y
zpT}N?O|I)*+X?PTj_b3Sck25TtcleDdEi%3fupa2F6+eqf`VPZ)JvLQDyFYf_Yr^p
zJGeqy=<k3zu={P<RW4Y)OD|XzreG67Z^0LI^RFQ6N8N9;k9KN5t8%UevxrU*=X}Lg
z7wh4i0n`_#nNO9x)8J!~jqA2AkS~IqDU;5vi+_DC_P%ZM6j|k!^3~(~w2B1ip|25~
z7xprjzqX6LkdwCkhq^+IufX8{v-O%tA-u(UhU%v}v#R;E;KWW3Yhd$*BkWnKyjR95
z*k-!+(N at z;|0MPGf~L-lFaEeXOVm)O+5QZ**XQq!Zp5})R at dM@&vxtsM>f$r+My3M
z^v<H%dZ*d{iF{D-a}zrPa|ZJTYc^0?G9F9?woVtU1TQ+)C- at P%IDUj{E`9{+SAK+)
zorDwNtpkJ~Aw|J`t|a^jC1+sAdAJ`Xau3|@TEtriNxYR$c!G#e;a+sYNH4Dk`*0<&
zMy$|rF at fZ3Cfo~s!`iQP^4AR&Qfc(<nf>5GspK_{R^hu2L9sPeQ|aErLvAPHwW$Zj
zwaJ8!UaS0A7nQ%di&cag4>MWi$amV$yGZq4%4^NU at 7l%dS~8Ow>_gyG$aKZ+Av6DC
z?FWbH<p(?rcXA021AIv9NZ!Y1>k0P)Y~Ux+j^bh->`o8Zolodr0q;t~W+B!>i~fba
z47zsn3C`aDTs(&b*K+Z71J(e1C7e$x3T>{%ALl!PzS7p1zJZaHmlkX5AfNuINPJxT
zzM}CV@=WOKdBhwB#kErL5cKlirG?oZ$aBKHGsngTEc=3y@}S?Cq2HJ{Yot>s74bu@
zn#>kqe|WmBW=<*Q{M1f^`gRaFCLl+&wz4_J#J(A*h*O2t9Zhi7#?Sq}$p3nObBl}y
zZ<xOk{4gH^KU*%FwY(y!iSQ=cb|*E#e^E)|aW<Tr_?*##_xj7L;#zV~y3(USo(5cj
zR9q`hMZ8QbuEQMr*0<vJ?M_2!@mQ>nJIRYT6F!OlGfuuyogYv`e0^_aaW>Q**ELOE
zkfRl7gV<9dl8bindQklzDmkoMS-1#$)uCYBP&bEbUx;=6(_;_zlcms?;ENiXp&BQ?
z9cpckU6dPspt}bCje3U$HfMz<@3<+n2za+D66+0IlWY{VBc7 at y`@@Mqeg)CrMH=v<
zr*rogLuQzJCqb49EEatKS at azEMpTgh9ys>kI1RZ|*vnwY-GHndNH(^llAI~=5)%JL
zJ}tMmI5gTOH!s}ZsL4w!3&{k=iJbq5(^G1ajn0RYn$#n|`iZ-Tw-NvPAPawR9)(<P
zTh%Iu_8y%<7Y`K7Dq9hnrN at zQkZq47xZS@<Z(=`oaDHl6Ek5F>)?tq5;HNg9R3$<O
zxHeVuRr5YgRhFTpqFLwi(>pYpilVE&lq4;D1a<~*bT^xo6F5gX+Ju at aX>zU20PZ$}
zuLo at Sz>rbt)$CaIc+T at r;5*Eta&=>nNv)EfE6spzl%c5&y_6k`clHwT+roAz3qNGv
z&-v&P>*DpokJm(_ma^MI`50m%(oX2o at Y6H1;HP&7Z|lR=+b&^GDK2(~{HWbBsbFLS
z$(t&zgkDyG`h_81H^3L4b}<3Ic$a^lJfmwJga#;LR3T{*Dq9V=&y#nU>#$vF;(rQ0
z-0uemFc&POmWA^z^hfXPUP?bT7jcPF?2|3witYw7Z^wj!9D2&CJ>dJ<6 at L924Zf4R
z-sut*__506M}Q63Bq$8O-mL+i`6u`W4s{qgOz?Tcwv!<j=Z@%+>)DPN`T^)J!_->-
zl-`Fp{oydBGLzU^mH67sRQ7e))hsX$TG}LS#2OjITzHhkkkL=%P@<oIf<ECX)6OD#
z#bv}l4omyO&D|NpMQhyf{Qv!qQ`=RpzDk{rHR$Iz_+6Xpp7zBe8T60o{3$UH&FrFH
z|GI+n?M>g+fxPIpjf}jC)J^0y*ierM^Z6yhGap<Q;f?-f4R8Cu+^?%$h2Q7z>X3dx
zYR{gIb5}an!KYz(^P^%4dA;EGL~X`Kw39%`xo4xkB6#J&zjvV1$**>%PJeaqp!dg`
zbYUu~#rVZVl1JXEBi#GY)eM6H-<L>B>1@;=59aK-jHZToU8e!IlakjcJ%_rsXW7o+
zn6F>3G{rvynQtdLC&{tk<jX$D7khji{AA#yc7Gu2vL<BR^zhz`z+fBBcUBSXj^Vrw
zSmYnQ;_Dn<&~uj0fuG{pnU*5)Jm?OS;p4~qd3Lg;=v}-|(w>IHdfnc`yST8OEe-Fw
z_?N)v4X97%swZRlBZ&uZ;K4VV=$5G{NMlHh)$jfYa+-zhz<`wrO3A(9OWFg!WGRQ|
zsU|THvbXV?Le1=Y%KT1`MAw(9)zcZDdaS7Iufx%8MO}YAz2VbkS#k6?%Sz#!NbWaz
z0>9uHZL9SBtF6j20)9*<KNt6-b{tQu*ul)~4h7yDy4{GHSpYr(JnPTI_XxT9(K`d+
zA(%7qy^YsvLN3pg{Up}G9w+e(jOjdw7yKPFV0XR`UI$%F1mv`glhb?2ehu9od4|YY
z0Y4)(AGLblIC99TUrMhSAJ`|`Iip(EG^0v77M|0+YuG;^6ZsrFXV&AH71V{gyW2x0
z5%1<jMM}~Kz!wmn+NH(XnI}I2A6gsq)nnivuux)p5z)7$5h0e2tM-dTXWa>(Kqrpz
z>FD2F$mPkL?KoklkvRZf2gGpvoY+&LtFrU>`B<OJ*peJ?jRW>mjC6i<Le7+T&tVSa
z at 3M<^h&3wd1L_R-8jr%)b-ilnd52N|;11$3$;dhV0Ow$z9xqu{-pe39{nhPq!mA2d
z;X9%8M`E8T5T&60#h&oqOS12eElVeDz^Aeoc9eR;7Ft03U0CB=a9z6a6Xf`U{|~+~
zC4G^1O85^pchx2~_tCkO(pCXqTMlJ&^v48BuA<IK(*gy)D~69sNmmPUqpm<tEu;Rx
zFK4SeGr{{N!&=5?`KtnQf9NaV at hFAQsK0mZnI_G-PScvyRdzN2eFBE~={=TA*iJm;
zo)fvUL^>~r2YJ?eQES^Xan3tNEOFU{@Jp&?eKnmuZnJr(u>X0S*$=<$6=HW#_w18?
zvj;gp>T>^}2lg`F%_#RS262zO%xb<<lh<hi<`7&H^e*H>yo!5~{8#YBHB?aA`s>8z
z0~Yc+a$~yO3+($l2WS&~dR4qrrYiSF$hB$w0U0!V-YNS$u{$`Uaa1In at evhg?h<I>
zKlKWZUHD69l%OCpKdBIW{x&>Qo`djMMT$)rb6|tti|XXYR*_KSk9?SFs>N{^?GJe%
z-+A*{n}LkG_!ORnaa&LHwm611B3H{GC>${gN=AT1k=F<m;PW2D*a1^2_}nF%s{T%L
z)d?PUSEc|sHQ1l;qSgiMPwZPRf5AF}>4Hq38`Fe20bS+HG=62AhQnG^xxO1;HLp;Z
z2OC)*Gr7~a5!|aJr=G3I@#i&we-e8Z75S65tYuO&=U2``EwXfeO^AWx<g7tWr-Ah)
zjtqI at j9BS-aLg~)$(}P6x(w<HAa4_U68x--ei6^hN!=FXNTTz{LRS<BJJ=HVg|5La
ze^S~u#Hjy9{8*gM5F60m!2pMmf$t{#!n}*dtMHGR*0ihZLsPrUJl_TfRT|{QTFT7+
zsJ))Gfj$#ZD9ohN<vURu>7;Lg^OvX=`{yBfB7N^Y*vb~*!qdQA&InELGgpv(j>O7+
zCI`n#%Q|+0YlZCHH#q$Z99fEj%;kbca9}mLY+Vnf{0in6(Fp at xd*qm%U<{kbI%~lR
zRgZi<aM`*MPMk`oa$`H;iD`B|u+h)#Lw(+I&$UDcxUyGpHoWUJ_$3TIoh|a)L>CEf
zzl1$~rO}$|UJQG^+hwmuT!q}5;;S<BfbWZ|oinkXZ(0XEH``ii!&u~s@&1E-N5QMp
zloJ%<TkM>vaoOM9C8Q1c6=FY0|3%sX7c*-1ER~GBMitAk=X_o0xz=G at 5el1L6j*!n
z#DD>{6H|Z1r1brUNg=;m{u;(2%V9(8(|AH*(O?~mq}yyY at eKS1^BilWh!YF)EP9;x
z7GKkCAoHX<7dkF8Z4_K`2M}*crD7w}*dD~$Vugz6$grL4G$-OaPc1vslpS}5$&N2&
z0)lb;0Dl|t_kJl;#=~(#X};QwV?wE_9XXTPA99>lTzjQu1Ph3GT|!@Fc3kNJ{uEz+
zL|RYK!qn)<g}Uf<VLDkKj^X%w3x5&#L;MTzK_hg*gfP{A^e2$?XCZH*KkG}G#RqV|
zU;9J)GI4KRbR_agne4dV{SVIRiT?{swJpr7P{iPRH*4fAIQDEVBzqrtA>Dw_Ot`QC
z^-r~%y9pNS!QKmOfIZZFwRp9jO#v>fNOgf=zNJimHS(k)H5n44CL_n-+a=LO=OM0`
zWvfShs2a%sB9WHEdG7JZ<7%ev0nVU)6R at h?#T*CxW at 7W*w85t5j@<K?C2PPtm;rpm
zu)dbWf>Ea%d{%BZTyuENcfivbw3m_V8=dVLS895`?>N71Lwd7CZUB~j9C)hR(}Og(
z-3%I4kV&4==mqZD-H<m=VBbISLT<4{b6a9ura=A)xDq;Tz~JSF^|y at DU-{@pEj+?&
zk9t0k!CkBtd3sJa{e-Rg3#rvIVUPb3oxt%SAa*c5h3g+|0m$?}`Hdm(j6p4C=5b*4
z+{wAK;ysQZ{Jl+2_f at 6=*Yvy>*RNmuB>en^d`SS6*}ofk-!b5K3 at +t3^&k4Hre~f3
zdi?c>$0>U^I7q!mto_IVpTa7P?~CWD|Kh(udd`QDn%6Rt2I(YeH(Ml$Tb<`fg8!kP
z$`%Iqs_+b at f_S!6_>b;l;hgUO#o7DEHC69_;Q1p`R-^opDRqq>lL{+flBwAb)Qlz<
z5f{n{SCDzbxK>Kun{{Oy1LdS+V`l@#fNgBZ0D%ppR6;?sAoC}nEXT$~Qlml`+%)t1
ze4k<0?&sdm=llKsvB&#;-sin at -sk=E_4D~EseI<~X?}r}3g^(*ei3IZL|#m6 at rM{9
zTc!LvdxOg9Z&y?yJs{9fS at iQh9RnZp^M+*F()LQ~A(S@?)KnJ1$Qx?b>QVLxFd9AM
z5O*5;%T2##ue`u7!lLT at p{H+iC3y7T#@<n0Vp=y!up<7|hq20E8j1d8bct8zUzDs&
z{d$D>u?FX1eWnhNAO>?5XlH#;Zd^+XY?r?xykT3XhqY1ffUeam2Vlo$)0Ck;k*Blw
zqpBg72z~XDWk?tB3z4J1mc3 at omc4jL6L6U=%L+0<PIWh%-yH-yG&_&v<zEEV#VXrb
z`HTEu5RE)*`!3%Rv<rCzaYmh;LD|SJVDr0!3Xu2yS00pyd;nXXcjtGu$5E#Q4C$-M
z=%)#Ll*vC%xdS`PO8jlbH}9%Jxz8QgS*2?-ql61t%q{t3*fH*JXV>p!!)C;MB=l-u
zUeGM>+CluHr-<L at J5FvP@^eZ4lz<D{B5(fC0pg$f&oJmBU>8aLhxIMNS}I-hV12D8
zWsUaj?8e&l*|pU>ljZNlyz;7z$`S~vtncsRj~;eLFD{6Pjwxze(XjULx#!mYoLIfq
zdA_e`>WW{Bq&ey>t7c_n1TO09)h}4;zDzd`uZruqdMHADc`E-Dl~J}{+`DMBSF&JY
z??G<G)ziRmPhRwzo1r%huUd4y*Bl>tbsXPBtt?xA^*HVYE_%>SuSgTO?7SpjLYK*x
zta$h8(TD~T%fe4e$#nCx-}2kS-_=$X-$6-Bn+FCWvat_b)B)@HQ`qI%;<-9p|DZ$M
zD`KZ-qhQxJ9{!=@vA34O?&Wkiv2*FeUV}XhHZ|3=N}$*L{r}j%E+P(UCdVEFza3&j
zctXXo!w#;R$Q{8mIQ(U!*q=E2;hO_L$WR;f9>Bj)IYbRnNs*OadnoX^t5TSD%;8I?
zQW$ck)qemRcj)0*zu;$5TG|!iwUs{>$TSsGWQYZx30)ub<jT~(<`mfKJ{nYKNNJI0
z_%u3d!>14Sg0`RQ(=E^1d>XullI1mE(<M%4^_x*P*yBF?T}lgdLz$I*{W&G)K&#E|
zFDyBacLK+P;9O%rz3iHcJZu($z1*0S5j5p at d;69fL{9}e<hh?oDt88PUD}|@un+w<
zZecqsBkm=9_f`0wH^Lr&kN9S2dAJ_3XN^m{tqb<gGT1-MGJyF+?4Ntz;5M`V6DH_n
zAqVR_&TVAz5gLj72behvQ0GtK&l7nq$8estv0-hP4d^c+w}3W at M@fv9OQNy*z$)wg
ztCt?^T?v^QYp?oT>d+%16?`pnqxIU7&g;M;>n1W4D%~}hSdV>DL%$)8^sQZeG~ph*
z3Ua at E(4x?9p>H1Y&w~uWAWO-HeKOu5q0WGgxSz<+2wu|<a`D}v&0;@}iG7zp{6MAT
z9{LASd+myWHzL$@CgdkFU=8&tQ`<dg8%^xJpF82wqOBYIuc&?_J|<&revhQocTq`U
z0dZ~Z1gAdr2ab|ikb^#LMO+@@+du<XZ!7nkSon3wC7QbhY#hVq;?eE`hZ}8lf)__f
zS>WZ|oK()e04&cc$RSR4dWe1+7!HZw4a6-x|Cvj>IDyC<TlPjYA$__<yv#Wuj%Z-%
z!$sVkgjVcrWc9-Lx+aGQw(lW&Iq>)Q&B}!zT7I at P`Jpi#)Ita1%YwhT*P+L^?19`7
zb|tPO=)d`Be=p>lrV!z>alt~z+n5(CxvznbexH>G6P#f9#YC2wbi{A|Vel|NzbVon
z=9LE6dQb4mOybtc at N<L~nH&Q;1p8R}J~B@|dFkG`4GjEsa2{TWhW)&btXs}OtTPM2
zgIU_qDG}wm4udZ)CwMKufG~7s3{>%p2P*k_117!}^3XyD{H5>O%he57BXk3`5enHs
z;Fjw}1doA@#q2r^yZ8DLPg^aqOTzm76n+=0d>Z7&>1wAR=Jj0i4%q9#$A|2-q89u5
zqvc_{;WIF8G%)NR^3w2;(ZKM#6Abny(gt8hR3o41&71m=*Rgb!Fk~3(8F8#{-39pq
z^WXw}C$Zx=eHQYM;J1hm;e!$4i=5i*x8Z-M{$@Y7Dek1b(AfmJd=@YW!K<L&g3<A8
z`q=1r($4AX!A7oZu%1h3^8=j{;=?x;zH?zT_%)oLVV}#fCJCMm!76*YJft4&FQlU&
z+iU60I$njd`g7ukAC^aC#ZIhC!VevKG-Mv$6*4-3yemA7 at SaZ0O>*!1mqX^cGQ(bn
zO?|`sYJyAlOD)+~Tyr72Avh7aJ`EUGovd^*>;m~}=jXTk**mTuCio+Uyg3;%#5`hC
z5#7>Se0;Bnaa4Px81r3|_J-G5o+=obS}`4RZ^CbA)ts^z`1Rx20h<^vZHWE*8Fv33
zhiAP(Y*6LKpoL`5CD-lc at TW1@#}ynT-wwYMA!IvM<~QY%^bV6dy_1YbJ8b4cbNqo@
z&Q;?-ZxVZQ%-c8QhM+&)eiwXu2oLl|d)Dpef$s&5kLo1x<zW43>hCMvwuAVMz&}hk
z$%cDp*n7mMrv6 at XZ_Lle)3A95+OG4r&?e5cZ6}}~$bqh)!1zx#-+=U+0<~6Vw`~5V
zSsbkwSUI|QtAJ?|vseN5fEEVEu3d^V>z+#3u`j9g((dG2h at B?-RdF12`|t;055o6S
zDi9-XvGhEX248wlL&^kOy>=wXA|LTXY%M<n{4(cZJb*n)9}Io)mLBw32k-(w2ZAnR
zoPK0H+4qiP?E;^{95LL0Z33SE7qS-cox5&hcx`ilmUt1^WdwsN+Gg=-fFFWB7Jg2H
zSHk}8j1I_mR3$TV6EGxx0wzV7h|qO$w(q%WXEck`KroNO2`!RtNjVN13e34c9&Aiv
zFelUQ<EESd->M5WE7K;<Aoovz_UoQG(8xa!XE{moKLT4z8)t9~0`E!J-a_ym@)+L<
z_&vW^>7c>ylIt^w;ex&3Zj%2+teZ&EWB5HL*3Be&V1_(I(ro+!$@`Gr%3jZr at +EPW
zL*zY&2fo0*asaq6r*Q8Zv2Hr4GazQBk at QG_7InUfvk<*`_XWrwYu$Ury2r^qotSxy
zq$2 at h+&dj-xk>7rMjhL-xbB)b%T)G1DC>kQ2YR3ArA1HTJivcAv&5cBEM1NKH`^5O
zS00nM**E!pN$I?D39M5?MG9g>BSsM at q(A5lh;K<r!!gXqr-|(b`q59v&9!C_Il@%<
zr=3d`Sho|u3-~IwVZVeeQbm&*_HBfJ at jQulKL^Z1-x}=6dg$IB5ov875n9uv1`WQA
z(wC(Slme&Z5%J9c(%zZkn_(oKo(!24VvXqSAw<@Mx{FYE1J=DVuEhfy{vs)(<khJA
zuy>3FWhviQmLj%7VX_w3YxTB&ZW7vlAviDgQS2#9d!=|7wj{t4W6u=G`NIBzb5sW#
z${-!^<0kEapJS_i6Z|97Z2KW+dTq=u%V3}CFp+1&_PrNlyE+;ELq7F`rFeIsGWl8|
z;`NX=pBj5F-q~LIh?T5;y!*RBBkq0cal?jWU_veGW8ZGIhWpEn;j84ODKX%q25FO5
zzV0x4pJDwa<pjq{ooP1Ag3l%Df)4jw#dAi9`~@`QS5qNRwcFvp^;h_Hz00;Yfo<>G
zWL?-kLY?dWd&ru*KE$npj_<k^v1Neil<&y?S36rj<l5v_IL|A%^1*WMuED)r$ehl7
zGic*x4_a|H)N!@s{lE!NvH at Qo^i`hKAcCETf8p)3!LbMH6Mn$0E5rWbSVjCY?P}-=
zRalooI(fqp(3<5et(hynN!AVLnZ?W8 at SnX;A-*}DT(>eKoJekAT-&!~On- at MYb9x0
zT+7!aosA#t0879dW1sn%8oU+cbGl)3%3<Kf<li#Vnk}!vPp?eeF$*$9GA at uQmO;M!
z26-0NgNd_;{Fk*;`cjwX(_w>;flqZxE^y2o at aZLf1%Hrpcm9MuR>JP9YU4jQb$b07
z()MAjmfA)zw$N+f`7<2FN(Pu2!1MjXI}ST)@h-3bPdEJ~!PwzS|E-Rlv;+E}+x3o;
zdNyDzu(t4Qd_Twzl=c$x99Bm?6qDH58<qkZ;92;NH;_G#%x~UV6VAyy_rAI1WKID)
zBF*nptU059K4K3l+5ORo at xglZUz@TEa=2vMb?@HAnYK8~Er&c4W8o`XT;zs*+T`C5
z)4iP0_!gi{C1$uIBn}M5YBH`r1x-Zi$`==qJ&}x|Zw+Exllw0te^96$&@*rQHY2~E
z-2-<F9K^oYDAqkd>QIY!yQ{>^6!Jgd173SN1vUoBg}_Rz$C$l4 at P$YLxoI-V$60<O
zbKoCjuXCI5tPEh(#p4->bNwWF)<<GpD at m8(_hNDhd4_jAPtCObV)t+^id4r<$(XNX
z%t97B6v>E_8n(OPBQEy;bB$R4N^iYK@*RcPAJ&RJG{yGM8?21i#(j%TA&2 at f(H}fa
zxIccYB9EBU21~g`-<Se)WBZu~bgshd<Dc>+Z2n-+4LhzLV&?{#>a%Fyd~f^MJ*m|0
z&#r4DcW+c;_q at 76@P;-bdpuoWHGxNzl0HfK)^!?t=4tL1<Ug&sm=gwjajbO)BZ41W
z!5%FGy{)3X#;)RMaBl5Mkz!o)tiNn7vF;(y at Hyw47E{<-pYpB6`KPRAiEk#s>X92C
z(OGex5}Iwa3GKT2d!Ka5jmb*K4)WfqL^sQDDoSL>5JMg^+!BF-(gJr*Ya4|9 at _&3^
zvXb;a<j^6oZJH-HamBze%f>TFY}x`xjrSaHx56LZG`44yhVAy^iX)~aVyt0Zy+?4q
zS^oAT==eVO(oT499-(n(ya^rv>lXB(40FT-?34ZR!nJ>Qs=b()M#EO7-0%*5BqhJi
z_}yR%4BHr^LC6sOf$ax&4I`%Qqmd3Xp}|wu at yc$Lw->BGb6iVwA7Nj#Yc at 5+?LTRT
z4y7<nLdoJJ&{tb;7Q|V9D4`_5Zw@#k5c_RZ5x4(Ry{iR$PuQ%Ty!!NK+YS(%==4QV
z!iWY(9rjvt3Ijf)*gG${tRFmV(B8#9nhc#~>c}_iPafZS+h+f^tzFMP4(v4XZXIk;
zLq&!S80(qJF~7JZzR}L;no1gA6QJUd at xQI7Kzt)&W9 at 2zZ`KJVbJrBYBf$PUmEaX^
zD|Pm52G*1P5yUozf0%y(;Ui{z4h-jKqG`~s$=KsBIrN0yP3gvZYefIXd;3>({&xSq
ziAX at 3@ryN>kh)aMj3!k&t}6}Ra&j-5&9}1kym{|Ep;4w18l@`R5W$V>X|(-J((^RV
z$z-%gGKOt9F7{|J<55NH2+#lP&;G@*Z5(I&IoQ9_7 at f5CaL?A6E%sfuy%<OKIqf>{
zb8aZW6GnK?s=58_IRDI!GjJ*c7C4%f$-jLG`nxja7-$4tXgL{oZh@`F2YO8Z0+*Wj
zs03Va{yFR)gB4z$$DzkQk><$@5)hd&)`=6c5-rwakuuq>Bs9#>#{@@1tmW#*-fR4~
z_x3qtuxWcHCD9>H$;aB1$@h4lP3k)iuw{AjN-p;Gz^eqS=GR7czGxh=tbQR+zBeTi
zYiYt at Dc0(B_ at V248piNih2Ysw##`4i#(u2RXNdfW(AkH|@vK?ojJt=lxovU28@>>J
z`^RXM7L<X0B{VB&8Lw=45cp?3gk}#YvTa8B54i5~@?<w3Nzq_$W`Ji~KX&#(e;=Sg
zTa$17iS5tBcl75S{2JSDI^P`9Xa03j!spodCP4xg>$S at 9xn~IU(9H?eco#4xz$dF*
z>qVa0&7gzIaL&W0+xDZsj>x>4hPjGC$Z>xD2;X0d?+;|pKOyi|zWQBmAq)oYE3tnm
zsNYnPa^!2%*tc!O_iWiVGg^AA_^_<ULsx7|Bs8xsEn4)Iq~|DI0eiB_XkLMQMT^ek
zt6<K;F3WPKe=9fN`s1u(=+!g*rHPNhcPZ1qCD9-DCB%+5d!U?;J^MU4qeAd|D$ek=
zF3!TzFK%4V!CuIRPVVO99iE|di!#~66{!a$Z=R1zde;M4iwU$8=xCPz%0%4+vKBz&
z0tb`GW2P3#;cK~z4j|8e7_yoac`3QZHwCe_JMeGT!X6G-_cdbAta?1(fw3ZV^GSQ(
zpcVDL0X?2DMvt!qJ-!O`_=;o|p{-j5(AC{Pb+eZS=R+ro|MxvyIatL#7S}QeI at p<J
z{hX!q-yWmAAwTzk&cE2h*3Emkbg-IRfpg+0rvh`3^kWVBv4OKw1fSkm19$@i at E4%(
zj%#VtMG1MIdB2xi?|mos(3U|w&*^=4rAX;$1fI%D&~xQt4-d5Zyhg}xgmd13oh|&<
z&llqvz^c12PQG_+jRI#M^KsqnH6h3T1wQZy_(1T9k1qfpxYV%&G^sE+!a79GL*T=U
zVV`E{Zio^-_AO|DodmOWaFQ~4WUY73|JG0De9B?=tgL)QX(e&dG5>&Lo@<59+WGnV
zrK5pl%vhU`H1N>aL&6H7^I?e22Yz3=%1fej at aP@JOTZ(!1Yd*R&8Kz*zRCK|dxn!A
zAwH#*3UNQd({cR-tm4Ptdf26gzo`bkRGM%u+Lz~iO_|(xlIY*J&6sSp&+q&xt;6W{
zV(t)nj^N(_52=JRXxDQTcEgzN^heiUwVjBChd2i;)=lJSZ~u<$;{?}s&9u6jgtK)|
z_l(fD>9zBSr%?vHDzYE+1Ys@{p4i?MXJB<C7YV<(BXomeND=^@$cB=kF9?RuhT at _9
zME|j&U}#^7iKF!CXxtxE2;B$Kn^X+#DKUjwftg!^xLnE`Vw6>mwe1Yza+yN+v$)@|
zKcx!6`<y|Y3gG>qjp&COq006&*8qQI*mfig*FJ^4pdWT8edIoHX6dO1aZlD96g|4H
zQaBvP1k3ga{yxt$d*&wSuGEBA%r51szbQ>n6*##msLQ at X+VaLMugwIv2=a|$=yd;t
zv;Xx?dvDy&_J4J9zBqGnquUgdORX|J4xGJx?#eOUOCPZh1s at dxJ#S&V0=|jG(N1YG
z?6R$}KP(`zSYhv&-P%N}b{EoRyNkJnlyO}Hm4`SFdr+2xvfbQVltGfcPTwR>>mb;j
zoQm)h1r1V}uOWOAv0L at ZVgfHChN_KVhcsp4{O%Qn3$C4z7JdD~BKoBmwYyBVVK|Pj
zkUs!B9>1vBp@=6b_E~XIcld?6UQ<GWzn;phRtnV)>+%uZ)x}nKnYP2fx4o0Laf{X(
z%HH(ePf$w(x0oh}Q)+>ETTzto<LFSt+y#9hiHFQ5dxsl1FUr)%A6F(<@ncl&W!dX}
z4G{|0V!YER7t=}M_2mU2LSA$5%&QW97Se~1W+L at RT8MNO(tM<MBP|AR$RT!21PlF6
zY;@*5V3ZE<cZ?c at XLS+&z#wU7XluWEUJEr0ezAC7OP}^-v)eP?)<>tGh79w0$nfsh
zdL95Cm+F2ZPX$JIHNV44qa>`qjnVC2f2=X+Q^bO~s5ut at YcpiMuf#ZZ^ylaQm1{-*
zMF;%o^WWpbxA2uj$3f)Nxx0~H=h%<@hujS0mpb5=pZ_km5cwqz;G*XLg<y}q at -o3F
z&;J1NFKS*{!#6mf%V{ofZ- at rH>KU58&9iaNjz@}k2S at 7VhDH0`H9-^P$=p0#H(cGt
z&mDS_$RfEKnw3X}bb!V>L?<WK_v&LxMw3}zMcMqGSK at eOsyf)!sw2Nsk+_U6A*N%0
zyT0%0Qp4hSU_ZXi`H^2Ndus(x-me{*ke;x*XbSAQk})=E?n`;VhMh9J;$5i;7}0w4
zn}pcc^8}&UcHl$CGrCgfHd+&hb9#lE-IBh%sYj{e*^A-l{h~7YI!`-}E_=9`$;bX{
z5v`3o-K}JbA%}ejKH7glyjRF^KkEcWPa5>c68i+;v-B0+4{R7S>~YLt$(|?S*E$cr
zYZWV^3Ow3+fu*2+qeVL}$gI8OwrImbUe;c!dRrSd!>s*ziuuWD%O0>RqJ&R;fNvay
zjw@{{a6S%zC-Hn2sv2EFWU^>e34Gp at f{(T9v(+5f!|}>_Ns!Zx*=NT$xi)y`m9t1J
zJ5V0}Tqpd#W%_J}0}Os|8R(ue5_h><$(9pbelib<U0q9JhuoN0k2aL#v_LkQN(p%y
z-lJcYdz_vJL>@;&IPAW}x&!-^ninIds^u+Y4hU9&j{ED-mZ{j=?9=5haTQ2~@|XLx
ziE4L8h at qtLs)1+ajXtwWVE9tuNeVw94-_BuHJ5a7TEZ&htQ%p!Vv2)r!kNf}IlH78
zZkfgqb8WbqtHbr at eCu*X-b=2v%q+9#%=B%G=NDyZyEa)OfK8)ij_LzGhaIAf^F(lA
z)1I`4A>*FX>Iu8z2VIS;1Xw&xedk6$5;F&6;QimmSY3)=CB3LUHlg>EW`4#gMknK)
zuHM-sQyIb+iVQ~>;1dDkDZII={WfmVaZSu`XHz|W^s&q&EmKm;%@Jg at c2w8KSUr88
zWTjb`GOqjN%rpb<bWAnyj&^)95!glyu%Vc7rMl07gH=B<iP&(&Yxo(5nV7mzMj%<K
z5m?VCoEJ_2_XF$uh}Ps|?%zA_h))}lZM+-Ne@=D34}6^9_t28)ksA`vMhQbZawMKy
z&x43lbBq^)zW>67n8^ofm713}PgTfUsMj1B{rTE$kkhRRDr{}UITT0<9s6-Vg&nJs
z+hY|~nmf{3N$!hQJ1j_(MF|cwo5o>2t;AUiAF6JQZP}vM^1h!vZ;4id7bQ5_ at sY=P
zNs(1KdcO4*6I;EA at nBr0n0d(pt5#R^k*D<1ei0L=>{h at I#KX(pCXAD8EW!A$WXJc1
zoC09pt0O<nspCsq8QtAHi3_-aTc!y20b4}DbS<t&T;;8Tz<vcU^XQ6!Lowq7{AL|6
zr^dBIZs!S{s)js{;M_kVh`6OVSn+Q2e0dp<savc8o`GyqFTrZ!tKky~8p@$|y?Fv<
zVOQdEdU9i}-MNl(anq!_5}B_F_PQ3>&bJiEMk|qTLB0V0O#)pqg`0`GCGbVpf#39y
za|d}3 at _RwQq(a9KitD`s#Wvmif{R0)H;EkW;N7vk_Eh-g=COFOy@?$;(m7>Or3wYH
z7vKu~b7QaBkN*sM3F+ZK8|>de-)Tgw&fK_&?%kuw+I`zCI!|bw*6g;>>iZ1z$Vx-7
zucwJ8 at k|e=1O}}_(0W2K+pu==?3T69p+4&A`a<hy^)3T_=_Ihcwp(~Po+O at Oc(J$s
z at O>wko!k?ioqi$0AF}v|V|s673B)xzs`LUQQ1Er|MODPK+>qg{FvSbkH1H$0GlJJP
zFa)dCFGJf-9X`njY?NYnF|TDfQVab~@WR=p_PE)H>?=o;>5;pDaYmcbMo;i~fx%ya
z_h~q(Cq_9NLxlh3ziaW|HQxWCtwMa;Vl5*uYlml>@!t>d-_6*I-IVZvo65l+{XmWc
zI&+Nsf$c=!O?~IA1kGlKFX#BjRlwm>Ia6X(G1j)Do<6Ot>QeH2xe>Z{;k=Q^DtbMg
z>1Libgm0u<!Y=Y9n5zc+A?FKW_0IBmU?7LRq~nJP=j(qx1RaoRe#NhcoQsLw^_iWm
zdk`xpxj$>}XtYdVSgV+=r-Y*^I9JX5uYujteWMz(12f$<F)8dq%(b)Y1yZ+8l=oJu
zw;x4=w_}m`W#--T)1Q9|F<)(h-dN4BsU&A!Qm}Top{Z+L67PfAit|s62KJ~Y&x)Do
z$<%g~lm;tfn=YmfR|QMboEH&K_JnydY)SBpx&O;E=CaRtDA+z+7QEm4e?0H*rh2?1
z3h#ItI#tkg{Pzk7uBEx>Ecn5$c*K(SmHC5C>z095BfcRGlyRku%3CRRRMV=A{d8Hz
z7u*t*F(^|w%28%P+1|8$O~h6TGB?*hqb2cH#Pxn*?Cfx-<y;S<wu0CGOM3xud3qo-
zg>58P;~84^9Eo*=_~Vs`hhaXEJDDB7J`Rw&A#)0Tl)rB|6JuyQDli;51-p>k$rCW{
zrJ(h{qilTha>n&K<#C>IH_R}UK;9oV$texXm8OU^&JSZI;{STsg|9}u<kkP0J9CEU
zsM~U~sS08XTQ-xOL#MrMSToz^OXiTb4bBv|SYyyJv#x2GX_sKzGHLAnMgRBvoyi1`
zgtaT3-fAK9re8g=E9@$nQ{MS?j$!B5Hc?|#(uKbR^MHaKzHq+y*FyzXt!lCvvZ-X!
z_TT&Ot9Iby|K5LU^xxv&`|m#VpJJyEJO3ef2$qofFR(5>r8DvhXPeiCAubhcke}Id
zdkxI^eGMG@;~LPDHGn;JKJ0i>V8 at dZa+Xfsc$RL0TxC6#&ibYk8A_#y;ng$G at G=?S
zsH83Xpa-`h6_fF#`@)LA4=Hwprtp3-ZnDVrVXN<KkL~_GEwu`LXgK!Y#!yYh at Qyyb
z`g<RC-r0v&***mS{G42 at Oug^w)MD4W&{-$<?_<}g at jUiMvQ7!#>B*bE%^&*vS7Q06
zTbZ&{W$Mfy<CT$RBVV9TzIJ@!u}z2EB>(U3zNv;SNnb;EG*j!n?*QLBQ{m0?%8tgg
zo6-JaoL5!!FC?}hp3zL~5<%B$=j at oJAat!m at 1f^N7B#p{9_gICI2CLk%B3Vem$ff%
z&Q4%E$yb`;AAc0MVfD0x{13M0$$dlV`^BCum)N$-qLSMF3Ou9K!K3~P-n}CxJaf?;
zY0#&!%E&E_Ce--|ctc5Tn at OEnpCooT_L7uJ2cK_;-hI)WUC_DTJJN9FB6tgnPaDo7
zf5KPxy-4CtQX<~#Bh6RS_yy62moSk>M&LIe><b^cFLKwnyJ!Q8r^K+d#DG#0Gugi>
zD(U>)t=aJTsh2W7QT>Ja0&o7FK;&Qb=I{Oo^2^8SIFNsNtlSs*m&VGkfQLSfe1nvk
z^fJoHbC91r2YK=w<o(F=$#X~@@_h0fQqD!5JcpG3$UPrbs%vkD>~OMcY8`CGCD^wk
z=U2b-G4j%Q!`TkxKk=4#Pe%T|u{ssVzdu%f6ZsFv%5 at I0_u2Qh;XPyRy3d0ASi2^C
ziTqf*?nR95+wGd5M1HJY_kDnIuEq6>;7eN)8|ak8(HvLe1N3sx&eyS5UEErl at ER3~
zv*$v&3bsP<sQ~VeWH<@)Zwc^GTjCEAo~b++*HLbUYy3KwhF?zpC#xDb=3viE;67m<
zzdFD9m2}5$GVeaAZnO69$bZ$%>@1CzmFIp^%{Q#olmpv1|3#F)4F0V7m5)hTfpu$n
zbs?#@)r at C+i1PQUXSo|B#;<E>!zWMjC1;qK*>+~r7ZG`z_D0wU{vh^l8|bbWUj5P7
z_L`YG%=-$yp@)IZ4SZaLwF$rk91Z+KxooUl0U2b+wFbz7Us5J_q{0^t{QP7$c;b0S
zV|iuFebE0bVR?K{`0*A~zxt{1u(7N7EpjxuK$cJ;mibyx_8eQrA!SP{V4G~}&w6Sx
z{CPkB%~#L at zjGt5U(ojXS8AW3Z3*@Co)v+(Hz`WExQEGwE^Gk0uyI20f7*TbRQB!h
zM1c>3?g%os0=_Mt5uJ($z3Ns;Ef43$R)Y?|$L__^&IVuc5$zgYyCUs`75)6Tz5^7b
zKz;_`M)nre%TM*~82-R5li0X4FZ0Ozkf{_O26o=dA7XDfn0tzEP0VyyMYh8xsv}w~
zx)j+Qd;xwnxAS#;>#9upOW-=*AKX3v=F*TD2{61q3qCrQ9vMrIjiq0XrH9ATL-S=f
zuLv4 at RGyL9d66~2Jieqe(@_JTmh!#>FFy#(qKgG;>8ZZYh7Im|UmNdm<fm!{-`J9=
zmA`aWxQeQ#OZj=RyMot7TjPNl30_I<sr5{mSv<csxP@<RDMBn<ZTe}qY^o(hNUled
z at 035VG6!b7?S)U>CfWKeFZ0oN!S6%f3miKNc3B}E at -|AyRBBE4)FbwzG%O>snU~JD
zCNMb}T9Y5_!r(6?!!PrYDJXBu2V<!N`>rPyK9Z0l{TgBy)6kJ~Z1F08GsQqx-dF|x
z|CgZfTQd<e(78O!NT;BUsfYo5#peRMH)F4!*uOyOhA-emH*kZ>U^Bm at 02rbx(tsWX
ztR$RcYeH326R<*)=2T)0o+;O0O<vh*<dx;_1dr21%A$lpZ at BK;T3(|`Q0c&553ShV
z at 2SSM3i(&V7nUow11BLyg?d|RPVowL#;s=93zPVF`AwPI`&}=DJ=kOnnNRFHsa=%z
zz?*b8T|u{z_m2qAL;4jC4A8khwF0Yo*+S?CDi(k2wh%uVdOxvO96rR=-7ubqM2y%<
z&b{KAANE75tzSKNwmpZgT+q;~7ph$INgiu_8 at opo5*zMc*Z3=I5a(?Y{8 at bix0X*v
zKgC#&tQT0<YD9)^*w?1zaq#Wf=bN2Zh#vv^*Sg|W!71ti!Re(6*XFcza(}-5;*f{L
zX12nX|7FOSjv%J?mx&F8mdkO$7O@^{`q&sf0^57muH!e*B+qX|Jg`3P^uOU7cChqG
zy|YsLDEOEdf3ubeG3UgKThew;9-xZRHr-IA_BFR9sJQXb^WF4b^h>3*%h#aom<c=;
zfpb(La9&ja2VK<|KwT4L+ciYjb?w&UD%gKwUkZ4Jr4J)+W(XeKsu0ZBsF*!%?Y-Ea
z-XV1Uf2DB at UK(dm3>xQU&^RxL41$jk4qn=*z8>_%jLs{+(}?h6BXrICizBO!#vX8y
zvEV&%z__ssW8&sqpn&hQ;+?qe?&9l4UEvML2Rv1}Odl(+5IC55aw*|Ww9nkK=#t2{
z2btH*v at OIpR$yH5&4LH{I>IN1m{TUBFA63%QAMs|ZSG`z`&c>TFVwHJgwT;eTYo7f
zvEIX0qn?_4H|j(}W)v1;KEdaF2AX6Yp{Z{DPE$SoN4l8t(o`hACG{PB6ytMXYT^7k
zLXV!k<ovF`7&L0u+!4^J$5|Td at E9LdI7YJ`#@VVy{;;!<*j{(v(`pMxG|)9nv;JT7
zR+D~{8Z_)-oiS`nlRoSUv2newPkyM<9sZip9rFI at rQ7uEV{c&Zzc|0<_3y!JAilPP
z$kT7~jxdu*Ka>7OUjr+W^kY~N=HyPqUsmXT)H3(_<g6Tb8gr<cDi(zEbwd@@wV^7~
zr at TUe;g-VoDEfFWkr%@T^NTg9I`sW^OZcQ6NvKmfRwux|pN5|?E#XZ?-|CxnkE at 8D
z|JpgMsV{U5v#!OQ7udcF7es7V=#1KNh*@#h<QH!D at qeXTRbJjBC<VMn9C(ko(MzC*
zlLJm2(ED7tgLVcz$jk%nJSi&agZp6*!Nwjnba}t~0M^&YQyaU8jPIt4LTq06D}tsb
zec=86a0+y71G$C{rTCZIbFW at kkGUtg5k%%#%z4Zu*)8}A?KI=sqV;iGAaAm6SCD?(
z at mO*=nRE2f+x--y5EyE7t{3j;qls)E)qCcWwKjJ?i75*nc{Mv0lD4C0OXj^k1TQv5
zC3uEX%${#={6E*;7>`ZjvXVU>A<%EnLH8f#;K at JC!S#2{LBf|G_VVTSqyInVU>tm*
zG|w0J?<h&rFm&Ov83PyLt5C-O9K3p2yig?O%i<Y9d_ODm;D35c?q8;}etdz*>$r4`
ztm-Ny?bzlxfU+LC-e)^kjIztXz+CI7M%j6~{;rw8#gtY3L`hG*09$?Q#~pP2y&do+
z1HD+1M&$9ZPc?@Hi3}H~7npz(iSve>mo)HZ2lRZ{6`$PX&?{5#N+|G5HLlnI98=-$
zeq3)`kk?zi{34Cm6UMF>%~caW4|ORqk&`E{c*GHdy(}5LPKw7p?M3L~%l)BaJrBM9
z$tXv;$2}(t&qzyHEzd4c`<)W1#HJVx^nson at a{QM`lz3IQ|;gx;E`l+s?9kBJQAdG
zB0K9Q7+`6&gXJP?&YbYGXm6}s44lN{;b%#iyf@&Y%N?MU%S0WJ at m_Mdah|G4Ib??)
zg`bt1$MTDjH&7jN8OoLTZv*?^>-cX8`LDbU_YpdXzBN5>upZd77XzFQ6Jjr#0;J?V
z+ICi;zsiWB?5X^6HzSuNXha{_Q(-sPD(`joJ#P$9$yTj+SD;u at q{Dj!ij*Qj-ttp}
zrQ|&^F)nxio`O`7ReB;oE$_9L(RRF#Joj9H!sSNnxYcVn$R+*fcI~9j%3A{@oj at DL
zw|zPU{6V=4agutK?>=i?tmxGzY%NMe+`QArPGzUKoi at t~9&8W7fG4A%#661U7dL5Q
zl&2*wRhp(5?{*1EYA=)i1$L3$X}~+AI$Um at X?%l7LEg{Fi;wkQ2aH{>lA}*@$vyPv
zTVwaw{^jJYvW;D{eTM7uv1_)Ea6LM9E%82k)sXl4_L$hqB+ufz+3`c!-@?yUGT{|Q
z2J(T`Yx^siCdSvW*$}NyDRxB?IWuHy79!h9jC5XDGaWwcCBSP_A=YDoUqH92(w-O>
zZC#`@+PD1>4O?oXJsEx1B+D@*ueQ1qXFxVO-I~&)_BDdO3=A(H(u+>J@=xHJl&wjH
zz4d at Aj9jDNcPy{y%nI|D_ZBc4Ehp5R%58?hGg5|=xY<zI0r|UuJzr&$lYs}$Z0n8L
zdoC5RBeXGfKY at NnowFr{_a>3p5@#5rDr~=87Iu250DT at 9RP722GP-^ZpEy_^e)ifZ
znYV%G$$a{KK2Aa29N2~a_C?=IuayM+z|P~tfz>Em=5hy?BgGsF$h)>nbPK8S+D^>l
zQ}|zRfQ~+dadwC8rxfRxIq at Fnt~IGKy<hX3KZQ>Ot~+G)ZYga at Xq<m5I!SlMZRHr^
zYhkzggXiwWGJ({gaGTxxU{|YYawVv;VSf|)itf{=!&sT3OdbZ?qrE4xID3)SU_8o#
zvS#b;`M`+GkF^8?1Gj*QCH+-{`){D$8%W<wh$*m!pNKao>vkmJ-fYM(3&Zb$+_D-m
zP^(?PA_i(<lY*{B|5hMR<eTHAOsE0*@sPi*PW%P+BH37}<9pOwlET|(>&sF}SsLub
z at SI5GE$n^Wrp?V|1($ABXqRoR6!-a-iDP^dMd`qdjqyE5{SBDQdGPrPmmBE%$^00h
zXoz~7UvJlm+|*wSa>Percir)jSzLX;*)5v at eRQ1V#z(s+kZ<2+bQNzlR;t)JX~g-Q
zk|Tv5OAT2&q^+CtS(+Q`32R8?g5NFO3;EA@)@LDdb_7-8XP~Mv$8<O^tH<(0CPeZU
zw!Us#sa%FRV%}Uj8}r#Y7jv(Y%)RiXv!?(vc)T6>!v9*YLwQ)oSTlp=L7(5THuHwE
zv92=0&ysaNXbPh5Sf{$72He{*cCS82_OCUH^>;W($H|Lp{o@*4lZrZi?EL$iXrH`S
zbbUwCo$Hk1++L@!QA>!ay!9|Jv>(QtNH}8Fs+)mZ2ihb3-*oW1+KI1EBlPUO^x55)
zSUvj%%DwJ<Q&w7spON~XvfI{mpk0XU?_CSgeZo#89vB1AgFl;>)4R#?i;>9ML0cFJ
zy~LX$kRCY|GYhoE<8RIf-*TF!!-{O<Au|R4^u3Sh3~egNop7p;rdEZoq%&{J;30ps
z+7HdIiB57If&4Z(>?OI8$o|43=T{tme7^p;8|h=vbN()e{3QVUu|b)9`OU-zmToHz
zTdjj^4Q&8 at v-A|9Z|J@?v#pbeY!_|t^~!C(Kg6~{0iO8(ZbK<)LkTm<&|mz>pZe90
zbRnI6r!4t#;5!j}nFYWyVEaOSr`|zziO966)1b3LyfW?-o>vC at Yz}Z=mC@$-OOXfZ
z^{x$+?G8D%jDy$%1*zdf&_ at WJABxmO9}#OHa!$4{Tx?(5A(Oo>8taRavAzI*@E`l)
z*|EM at h`u0w_mBS%ePJMdAp-5swxQSC2H2i{iI at jZuN(!<cOK_vVgBDYss}GUG41-J
zJ{QLLr5 at 1M)&tIsm^+~YItujjQ=}fD%jG<dQT(KD#S^NS>QE8`NE>78lzFN{r%~pz
z)B!W>pxd+~(1+i3%hD&H*7Z?|X5A<7MPENYPnw+dV3^*e at hO~OSjL1K{ZuS%`bXY~
zdD_e~?3kP42l}~$(9eRpTMAEg3gY>K_iUncppO+h&AdVn<K at 5T%i$G*XVxlkzlc6c
zXnw>IGm98nvYvyv-$?Ip=V>4}=Vu;cpg)=fI_MD5IY`_h2C+fv$XLm%$L7oVu!%!I
zJ)!yqaj>vPa%er#BY1fa53|PKc9#fpDhhfBZ5G;DXd6#xcEZD;4d%6IC(mH>LD^nl
zuoP>@u{3-ocwo at kf-jdS<OWfF!$jEHq*KlOvgP3U+_o78=tEw>o-#`GS*y;<fgixh
z^3G$<s<C#R!+x)X{B;4_HqC!*+oXSMo9};U8~1;0TVun$Xj|z2(zeonwQb_<HD-rQ
z*T6l;jwN&kcksEl$1>#K#*+6R#xj8AYyQhv%Ejvu at 9&9<|79%Ix5tvm0>|e3Ks?qU
zY?EbV?#CF;90xB98-yFsPqFz1BCm~lJz%u8`nDd2T`P|X#&i%4;7k6n;eYbOh<6YD
zJ+*~?L#YX;{1s8JKPhO3?>^^xz{7}HZ{m!UbZ~AkKAio)<E_(X-LlX}p$BGG8npXT
zEWzEL>fja+FL=LavF<o at KwWhDiAMS(=u081$!W!U`;n}-#I6H+QN!S+-`6F4W1sxi
zyDsNt=O9ke9qV!#)@96pT9 at 867Ic?j>C-w^pL5ox6EyTFJQtvE1?}tU1MTqyFh!))
zc`~nUnAbRyrra?`N?^DZdUQBnL&^Lhye8(m={%Y57Sx at My7?IQ63ls}FX|$u&v~4`
zpUpmHkAi;UH<rJo-OQrj^;cK#&|j^p$D9|_nDay5*da5=T(53N>dBkai1}s+o9Mwc
z2fngHC#TAAcD}@Eq!`c#khhfNAnuYDW6!v5p?x0`TM;{C7qA1U*>=|T=H|1I6ETqo
zN50pDLUu9)*?ub}%z;k&fIAU7ym{5$^I+mYP78Y;K!+L9;oXZN?=)-6a3&;SjEtP8
zh>ncPb5@?n1NISnF8+@*$$E^L|5J1l*<+%6sY^HyrgCcSb#m;*QNp|Ua-we&PJEXG
zT>#NlBj!27*+(&u>xuD=3fh3P>Gi-{t+nvGCvjyyB;OA at 2R{0-P59m_B3ljr3jX&m
z5gQ`!cLh!)zMY-V_2qgt!pF0m_d5KG^F6>incrN-<Ms2FA?~JJ?iLLnD<eEJu?dEa
z7YL4aJz@$}J^;-34aMzdIkO|lhg0%{mN`@D!+}h- at b~&(v-Ri1N+`xNcV at IB8koI@
zxGR7=a$xCf$T#D|&t>cJ+-iYFTuOJ)Ik6hhSrrK at d$vX!x|m))-SP9qoig9T1$Az7
z_6A>fgmkU-{Kd;zd_}^_^FQ_0?vzd9c<)WRKSI0K+Ozd?Rz&_lD8In5r=-KzjacNp
z=YPW5>X>vtY{5d~fv?`P70+efJGg8(VO3%^>=_%@I=lA*J9MPrQBk8KgWiz7K07%_
z%g5Z_*)_SdKPTgG^bEO}n?bEK`;%D1_)p_n=eY%A|7mboMElk{d)^znu8&b-?`T^2
zGjCY+xUS{JbH&HyqxFHF)}=EMpJ?5S=LAE4PEb4++^d_;TZlSO$DHOdxj$*Y)ZN8f
zNY>VDvAqQ4Px3NVfw at 1uG+U6jDgpVq#m8ToE&BPb>G<DAo^+3G=``G{i<|GciM5#G
zF)oerNS8hsKYUpqp%&}8inV#7ty2BAi at FdNzoEr=MpREJ>pZd7!ab4oBlnK!31{fG
z#ov#ZDv_h0 at v!bR*!PyDS-VqpS7+&n92s)h<dZW)r#VWWn05nLgRtd!ht<7)I5SV)
z+h<E(N9LNxmM)s9WUocQ<VoTYzuK3G{U+;Y^*W*Pb6%TlNs(d=s%`T&?L>+gR_E1C
zU%-C16t?s=;YJ(c>+tGL8(a0jI*0AR<i_x~BXJGdUjaJ)KD>LQYf;QBPXp-xg<+2n
zJRbT<AI_$lzx_=9hxw;)y$RbN%ef3!T%R=kb<ABe_=JUM-|OM`>Yn6D(60NOPp~ms
zX2Di5e at _Tm6Q*~_S|9lZYux}F!F9_YhD<UKIxPlrH^mU*U&rk~rx>aTnT~gz95qaV
z>?ZiV(Li9#!47(O8Czb9HoSv%DFGj(aDE57>vh1p_>kBYVSmK>!~MVDeuhBVqxouY
z*j4y^{snP3USikjui^D$bvC9MDB|P4kvzxGXunVQL- at TcUdBS=|Bv@=V*81_OZtDj
zOZ at -hU7A0<>&O53F4)vP1{v;}0n9CY|9hi{HmW<Xvi{7%!R3g5SV?Rch=0zx)ayY#
z(>Z&3c$~dnOdZ&O-_2?6k#P>v%Q)TPufcYTZmz+6uoR^GRfyAlCE*;|5|OGX(Wm~%
zYry7h7U{@382XN20U}PS;{1a{9X_WmOpt5vTc3{Rr-S;iPr&B7Ill&d at A1d)-Ea<F
zMf}`=<Ch=s9%K<p>qE&E;KwhgS>x5#KW)l$<)-B|mtkMF6fk%%<7?~xY*&VGiyZo*
z&Wveq`(3o}7;=@EYG?X%Y^vE_3mg7rlahMUIeQ#J at -3G2^1NX~&k(11s#2t<U>DBf
ztQu|^gPOcCTd7Be#Kaby`qNMok$b^@@39~`X)_%fBt at HDxcATyVmeG*hqAdr1q6GT
zem+QtdnVkQGNdQCI>ZO^i~>6R=|qRm=_ERQd}}|e*Pq7XBZU&b@=$f>CCC9^BzDq>
zDL7kr7Cu-QpY34;yNyQt9L!-iUG at alHE$C5#A)8ONPPEA at ZAqP#bU at l*LNm;MV~P}
zX0{SoCUX(f<>~o5FS=Rmh*dZbs+WdF7MWf$9!O}E8`F;)pKVvsdr^)#L1dYbb>9tn
zgojhz|E%hv{!8=D#z1aK^$@+oyXjM<QAwLqz1U9#3n at t5*}I|)HjbGb_^!TfUz6&L
z3p3-JRm9$R6t)}btNg!2EW;L@$wJuP6=A*zc`DPkuOxKG<aOJA7Dz&i5clBek{_e%
z1lE-g7>{imoG-rUPP4wAs+-SiF at CwJP9RxC>dX~bx9JLUw6Y9yS{?kIKf;(vpo5li
zo`js!iu3+S_}%+YfiBNJi^Ul(C-<;kCFGuWev`O*0_EBF5i>}LHUDsX8R+g+!2GG%
zz7l#<Y5FSc8Aj6oGZh0azSL34+F8}pk2cj$Hl09vdo1R_mY9sioUM4yL!&_$(~uAq
zot$R*B?$Aenw8;ZG&hkt!7+|K-Z)1d7dLmTtgxvGcHXl$<&gjGxo4^lIAVpWhr{FL
zSA(>O)stVfJVb@>OmD9O_QQv;4WEW~0k?4Y-B9n?M{zYbf?!J=6oU2Ie?6lW^ip8V
zdgqq@&PQgA*`7Y>jcI)pmigdgzXRX<Cc$sWxbX?o3LWblV4`f=yP%frjgZHB(5Jak
zLZ9u>N9!i<?bFWb4k~rMyDk6r{%))RPyJWuJxwGA=E!}B at 9bg!du!#$nR4KD9}~;Q
z=fEDSX64|S3cQEl4OrOcWXgfbkO94U#$l8nn;`SP?_7SA at NVcIMh1{R%GNn1g6}%~
zsE)4$b_nKCAm|GLbX<Rq)vPsiS6`Npc$+>P(JDLS!3(;fx7rSU*vA6pnWFiFzy4k7
zir+_MD3${+HKjSfOVyS0ti}WM5jtnn{n7!sigTf<k#m73X)2H3-`pQtC|Y%KdYbX#
zbb*OdG{KgC6t+iENsFho+or=G)+1eZm&dm3IpUwwUBq6G$My5dRLvZ6zOWb>CAW1%
zt*{Rr_|iXFt|#*b`n6ZqJZRk$*P)w^d3b@>VtowXA$YSyVTn}|Jwlr8;&kw~v(bkQ
z1P2oDJ=spf_hz-fO{ex(R2TN;Eqh+B=9D6 at Mg9fk&B*5?|J(}Baq}m8Bg+6a1ASa8
z?Dz{dp}#9dL{Ak7J=Nr>q~&GMX+ at 4YMIEkd?faq2_N5UkY342}Z)O&yI-cLe(52KC
z(1E)q<k_<(>xqBZc{OKi_^ru$`;wW!#OLVGTm2OFM$TaOhm`Al{XyV0_?jqH<^9mh
zS8x^3$ro2X5VIo6aIO=4K;BHf{l&@nAJQdGJ7Nemx2t`lxQG+ho$geTwYE8zqoaxk
zzUHgdi?|x~vwsdQn$kD4#p3fdv6p`P2*F>6?d=<$Jd|-pjiJ+k!x?tnDC+5S0*eyY
zBp+E-CL`Bu3fja)BOcmYqEnQ?-qCp_pb$0+r|>`ceFmo^eH-cfkyV}oxg_9F=M~J~
zs*(2xM}02Ho0O`LCB)y+Q%2 at 8;%_CpzVZKb;2p&HOyO#>-yrSNX5CY{xY=D5uc{6d
z?Gqig=LuSt6bNjsnl`g`cxvsI>A(N?n*ToXU(Fe=MsqUuJKYs+Lw4oj9{2wEj_MEO
zGP+Ewl2@@9;xf5jEA!jSYcpNL`ww~w_=Y90lOK7Xq=-XX$=mC(t#P~0(uM`6B0n8@
z-(9h3TD;S)Y6=oH at NJZik66xxE~Ce}hdBn1agB4qYrR!Sdlx+DF5fhaxCDx(R at ANa
z)<qkkt4XxcWgE|WWrM+qH;ga8rMomMm*Ch8Kg!M5)%zD8HOEvBnYl_PF9tfq;Jf15
zZoOMHOMLUG<;vt<*sTrgAX6jjL>T at qe1mqAekC?_h_iI|vLvF2^ex|t>#`kPxGsUe
zezI#B{CCe`zx|Oq+bKpI!s3tyVSHH-{UWux*CKms%LY-SyA(2vGVX4a^W8fs)nG5i
zsmN0h`NPQj&M4X2!_V^@h+J;4m-J1aea_2a=|?M;m+1_DEE^ra?0=Lc#M$e5qeCJ)
zpMwp=EyV0&m`2WxkPe>eh=>zm*MBee*rvS`VUfBPHoA*@7)~Ah>vix)$>yJ;m%yIS
zlh_eu=;F7RhzGc3%H#`+re=&L0~geU7+Cd0PRGp?CX at yDVhzZp0UiHpH*9)fk3fHq
ze&Z3$py0u^{dPuf37-)wY5Yu}j#3C*(Fzg^k*B(`le8nWIU<*|qgM}^Kyvs=PD^*X
zV<xffL%SMruC*l86FYVmFS5;t<7cpE;M{A=mg20tiTiEr{hRFEAh=CC;YU!{lf|i=
z1x!{7m at Vh?!AEBSgZxyh34Tcp+e_MEn^F$in2amvfiH-!y>qU=qNYEgzMRFm{JmW4
zS7$G3v%v-he)4`*+l$!$R@(6#>_27ydKT<arV!t+`4uFEZv>CngpoXZW_jCH8|F{;
z&Eb{6s>*<WV8ix~Z0XjH8aLkS-rj|L7dZpw1ryt3*t8(UbEmRCRLI}a-U8=bg6|Z(
zVKi`iC;r!2a|zG56fzz5-nm#`7g&E9;u~XVYM at IWXhgqdMSkkJfPS#RU#Zq at fxn<W
z0q0MGro_nA#V8>s%A*cT^>${<-`y%d3x4oT<Xs(0FZXGASCq+T&yap&pDDTXnFAHr
zLl7%1yEInCH}>f8Bm2yEW2pn{<^tpa$FMFtpwBI%Q^GBNT^N^essl8-Us|1A(^e_=
zOu!k+yTZy2DqwTpNf(~aqCZEuY5BvGuh~a*{Bf|SNT?U&CIrr`qjo#24;C~VVx+B=
z_AhC7fK$qWT at LO!%mI%I)Uknr(u5-aL8^maYiC5Ilu}>?_Q8)+Iyhpgi#BSHNjs={
zqFPGXqCcbI7-LSg=^rYWwI<9fFp7^qmGIC>PQP6*$T$tZkOTW-t at h`g4~b?t4~Zf<
zE~<;8r_ORTxbM87b46>*v&`DAr-4t>Iat!LX%30|c?feIZ6`R$^WZ;?crl1U5RA3t
znXqK>^JtgFtzUl7QM$aj#MnpkuDF>z_WNPeX6Tcm?-`_dyvy9zf$f&(ub?dSIPNF-
zt%e at Gd6z_6Kdx!*$giKpOr$q&d}*D9N_|zjq~W0hWwEd3bQMKp<T2|kcIB&;S}jtQ
z^n=&t6-~+5_0*piYgRxmxXNNb1#Ey2L90eRWC at ZDHOH(_J`23mz!kyk#J~?#TrG+K
zCLO=93-Xe}gZ`GngFa at h*}pR8)q+%a^*x3azWlaU+|yRw1No71&YIMr&tg`rlTw9(
z){Wl(;{L02yY5xG1->AHBE$~)pr9 at 0)mQ0O1;4F}5olW;&~1zI6DYdCH^i*)yr3P9
zX(-fj>a;iSsdSG{HSFHSF%@RTR*6;%5|?P)*Zf-(67BW9<-l#-D+I241`}%1s*zX0
zcTO!&7Ufir|9JFO$r(-cgu+bUgP%N8l~rV#a9vVGtF^~=9 at N%PIvC6+a#8-(B at EVs
zUTT(q$EkLIr!~A1CpEjjYc<3xL|3Rn{#5~!?-Q@!U!BdMP8ZGAi4G at qN=O~Iovl-F
z$^DHK*V1yX(!<rN1ba44i!gS>F0YND4cwD^wW0(;>D3~BA(?~tkHyZEz~%>iSx)+r
z^l!lvD{?$dZs3WD9uyclAJ7?>Bna}T>5M!^9bIZy73~zx7C2ic6pa&2i$**``Qrth
z{>B2t)u2|&4;GAaPQ|RC%Mw(c7kCe7uf?C*TNpn>@bifY2ZB}%^QGUabkg)k$_ux?
zJ31+(E2kIOUaGKP$r{X&^f)<n{$C>g=18l>ev+dOo9tN at RM89^)-=6c1FWSx)}&AW
z=o=f=a>>@SGn=Tq$!cnZGe~tcH4*wq#5DJj^$NcBLA!;n!2jwO|3>C4S^Jph-(a4f
zD7i}PHUE8n+YfQn=TFgx$JS2BnpD?c!){{j+???C9qZ<e5LJxw9OK#Y#I!@Syo^&u
zO+R!%XYw~_>gg(-NkGy)IulLOGQ=rG+74Qm;MI-X9Wo6(%ul01 at N2BI*K<Y?gOtcX
z&avfzqd~x0T}NV4P+M{`5<5HHi5|q$%7nj at mD1Zg<m0zZrL(DNg4{0HZuI8fW003~
zOxkM1L5u#XJYim$b;ZqWcfyP!N%jWLK*ZnTtlhxx<bL9R&0bFLpw*l<Leo85TW$a3
zN!RvIp62N7{Unw{^-Q~-HV|Gf_Pg12c5$3Vl`Ah5n|!O=&A=k7_N}q2eQn at FDj_ch
zR=IDvNbRrh&L;ZP(H8Kqw!{vOIWe1F0$k%5dXVlFGZR#z`bxFWA;hBWY2Rg6<N(ub
zQkh5t8;MLuS-T>~Cek6FjW(3GHvtDfleKj%r}j}dDKqu8{Cl6SO3gO6v1_xDGXwr!
z57_hJ(=N`j`E(0ri1Oq)?L1!_uyAS#w#7N%^Cet&cKa*Pj?C6F65}zbfR5sJi{7L(
z%igf(a!%Q;jw@{J$K)TbQt1Wy7-nEkM0S*rpALV`WcPPE`QRFDX%6&}WS^z1s~5_H
z!ba&o+x0m%v1u}`&C0HfxggE7%b=G-Y-TT3LdzF8KQd<(`I#yBJoU6xYTSJj4Dicc
zV(;YSYP+~*`{5j5IJq7zY1p7-_h;6h-XHDZjN0|QvfW3|0RNBf4M}Hx77adU5m#5n
zxuj#@|Hw=<@U+ne4X{MXnMdvc>#|m;``2|q6Ywyz2|e8D1|Dk;>66=aY2b4BtFgb>
zaR2A)j}qE`vF=7d>Z<E{Q4es!x^BQ%=*JpLDF1$=;(Do1m%KMgHLx{8F39UDIbfD&
za!m1R!Tz3tD#MBkf|VyU?mdtw8+h9em1(p6YK5y!y(@UxZgJDnWuo-m?sX&hZ`FZI
z+LyEUuzi%?Y}ox8Xz*OlUeDBNsoIPid*wn-Qp_W}rM%a^&*3+S%v9<>10J72+Wt!^
z;uJjnn7XabF5$qw^+4%tt+WQ;8^Dta43)spJg4;hDqQW~U}uV^yjJgsO4t(Dtx7sz
zhRx^q;p<yVL*Bb#+<1!29q?iAvAj&u?kxCWYJ+$9oE!!J9wmJKEAa3g^peEJmNFmc
z%i;eCKMp#D&{zI{b;*>fkM#b at E}8!uM at rLP$8&_zz>htb at 8avE`cI}yGtxV%B?&5%
zgwQpjdO{lq at 9wh)JHpb*7=YgaEjs*p<PXD_ol#^QJkn_&lCrBiQMQ(pfz}uqm4F7H
zMs1~2B62`~ua-+AJ{_a2|L{yl4NF`9p$xROy*F9}OgpZDrQP#y)9$z5LFnT<+riTE
zSQB2lebE<a?_a~xZ(rYTKf#cdy+L at e6};Q`{#)JA@#Ope_+9P$!)syNt?L|+%Nh;Q
z&CKJ7aciO*hF32>gZNatCX{=mi=KiHs at 47#=IkosbI)PC|A9YUo@;OuBeRmYYatze
zz4lCwvpXrS_g0DMXW-IZ8_bLAbt~eoJ4wta#K24J%*miugKn;iYdclEgZF0UWSf0K
zw)E>v4mUZ|(IEDW$NoR5QhbxU4;ZzzvNwk}L?BjFa^_?M^(-3~*pJOGV)OTsXRhFN
zN_N)KhM2nrdDj$zyqEA>qlmR?WrSDWP)K5&_f;-}A5?J8Z9Z{$?f=Cm24{Ks#Ng}&
zgT4QmPXymJ{5dak*vcQG7&3P*_isAet6wqhxEYxJMs6nmq at Cd%8Lqp$G$IqJ?eYe`
zB28*nILr?!fXlCFa*y$-wRRos6+wr<rayIo&|O33!bY4syeaKwGXI~A%T8IrbHwAE
zf$zeiFGLNo5_@;&6|9lJ-jN4(w71-wMpg}f&ep*?iu~q?46$ty{~5B2A>i96q%twr
z=S*bTa5J%+_?{z5k34(zH|*^~lr<q;jns-1c)Y_lq=>0DTr0Qq<ppPna^_cW1AbIV
z17`r&Vj?Rj>%+U;!E^wzqY0M-*XR4YAy>h(FTaKSr2jYV#`o<0{TsaR03EyNYxX_b
zEvFIF<qBD!gs*<~7tBAh4@`&bb5E?XiUB6!yL4G#SnFyJy#}`WTarNs!_FUj^z_j$
zFH*D;K2Y!<n4okr%i;gX=6jum$0Vt7VFnG8qjRc{Nnn%Ox~?Ox?c71Xmncn6RnKd*
zUYinH7EvTJ+ez%eg!a<c&Sn|8Z~A>msdpQ+$uE>el!(d at n=>gm0QXeX7Q~QA(B|=t
z3rgIDt1kR7z|VH5-47^A-D*YY0$s0IuHYnrhIqkWljVM{+pT|1<%mmxe-7j&<)EED
zyQ8j&t($!LJn9HhXZ%q1{QI^QI4sYdMtnI&P`;!9^0DdJDZt{L$W{Mfib#PzcOU$|
zro&$FXqbUk&^jk$&)Pn{{E1IA^e5>h at +c4b6#hfS5k+yQPw4piW5nKPFnbC2&CzkQ
z)Ftr$0I&B-?;gZDFqFuqHu4H6*v4tASYPxTp3)di=W}A_Zc~Cv9>S~B0RuM{ahoq2
zMbmrrFRF?p at eR1PM_VaXnKhm44GmGHgDI_gk<f8KsR at Yne+P3;6A<s8#+D}_A43VR
z?WEGL?I!UG!e_8+H<QFlfShZ5$SC3s>2f5%Ku`8*$mvaCb{l;fnwpf!R~8ak*QOkD
ze&8EiIV~wF#II5cI*%0q`}gI0D&?=yNr}R!(pD4V3+<Miu-Afa%3M at BOU!Thi4oNI
zXxhr$%nJr>9;b9_iQvq!Z2vBzZ@&6lHt?hueNFH+#5b3|Pb-F#7Hi!M=5tY6PP2}-
z(6FZ=J}?;fA7MMLmAAtFr+R^^w at O><=a6IGeJm3gsRBW%Jv&>PF4JA%u8&*T4Z3Gr
zflGzBKnpK;^FrWLEIbL^k!=M;jtqMYDOq16_DH8BEhnn<o8>oxo=`P6vGTpGqfXdC
zrw0D*MvzFj{4iBR_Wc6^@c%hIRl)8Pt3|?`i at -~f&^{caKVrRX?3#TarMX5^c?X<<
z%{NNHuOcq>wVhlEWLX(UE9HZ966#x~!ha{I$gy|nTSbY$e-<t at w-Ov^;lk;0ZOlia
zFR9eHHr0#QQbJX7Nnir at r!}K*gm~o1bB^X@^if-|e~rzn-QQ<Me9G at y!l3Oge*H1o
z)g64Tpe~_^uk2xnJ_$UER`-vGfH#XVl(85lTj7)EiF~+Bn9~bdx|Dh?C+qj;$-g)8
zrTp^cva5Ue-v87Hw_M)1BF!D+&dswfDshuI+rot!_WPGFc)d3Pbgn+las%}Fm6p&M
zxHobm;0aB06a0`GH?ABqLEoT9z5(M{58mV1P!+~d%-KarA$!f>3{Vn`>)g?RkYD!C
z(KTSNsGrbA4TTw-6*;|5)lXTJI?Q-L5oS10S95J^NA=H;8=J at K%}VbIGnOdmN+%PW
zwf$&$FZo9J7Rl+{ElHyEgei6{|Lx^6_=Xi=zqaE&ZJ3+7ftUEXu!|!8s^Qs7!~^4E
zMCoK6Vl7tmHi-KINL*y6PXk|k3|IwSMSLsz(uldv$|hzhXwZdMgA%qlmWKR2^3$?D
z$Ud1iv#@?l28wa&TeKy)kF(|Ux|{s+RvGW$j*~^J7B%!%V2qQ3KjE8~Fs(IYyce}2
z<}vnA`1vA!(oh48gDnZGG4`7=M)mS!YBT24*<XV&=SDE6+(^%bs(|xF{0oz>W{<6z
z7?F@(O66szY&=^uWiHOMrw+!o{r2wYgb)wpXBCm(P_j-5m5%)0oQqi35}L=6tediX
z+!+OJB=`h#o(jsgs}7sn(QjPs)n0yHwB)Bt0^6AqM|pv2(J87yD{jx&lBBt7_|?A3
zEy+|wqL|7_v_YTz9VJW5qcjsrDOI)aP$zA?kwqJD{#)FcQcGM%T+X?|R}F#&L2XaN
ztCmwzfi>P3VJOk at 4^TRXMcg#m6c2q{ypeA$(JjAGCXh$nFmuXpe91BL<e>_?BGhG9
zd;S)-#IplsrNNEEUulma_T;e~^9|7M37b8o!KcUKXrIs_j&{Bode`2B__*$)uke1Q
z_Va$A4h(-4+&G4db%Lk5`kQMiVwgmQsPNst-Uz~2=MyY!oD*N+mjT_KmSAQh-;4fU
zBx<-p_|s0v)+od*_y}o&GWC|8tWC`4iJ%qqz}P$Z2z<S8MrUw!yt3iOcJQvFOy5v&
z2Jp+X{n>lGJYW<-wol^r{Bs4KvzhE~q8|A6U{9U+Bx2FPj}PxJDN%h4EHr}gF?=sq
zjB)Go?oZ#&Ap4X2`%O8Wh%YcQ)icD)djxXEr at xga<9QtNJn;XZ_sRQzeo8co7;7Ff
zw_}>%mkQhoK}(BbtiM`3LeOjhA<VT({}Q|(nAqot%+in0DQ8DRri0dioR`EQCD=U^
zZ<1I!zOZK;O=jE3+!Kg4QtbKPF~hpB&K);~<2C&MF!uIwQB~XjcxqyDYEZ#UM>Bbl
zlv~Y+L{@xmValb62$fLI#YybpUd*i2>PD8sFbvE=hj|8u0cIG6hXFwzRYVlb)VZc0
zU@$q%fJkOm3Ii#bzxO^+xBLBlKfl-Sk9nOl=W(C4_g-u5wccwj`qs!^_ at K?O8K;OO
z0cMe8CAn{^eUQ>1NA+gj*|RiTm+<d5_6Bc(pF=Z~UmzQK7vK92?!S=dQzP5P*6RB^
zbPD1#s^>P-x$y5GE)H?PeeviMUMHc?FN3I!X6mVvrz|ZF7WHX@@g70SMd_L1D3Q$=
zw<|9`veU6Kt}f<C`#TkiJteM>c<M at BFUHPiuFCcP;ExLwF7L^9-|^_8P|w%p_1S>H
z*<`4U<$pd&t8=dR{L3LDmEgn3m&EE$U%C3Z`&vvwYjJ;pgu1o6GrHM-Q?V2CBP9+t
zn1MREDXz{t#jcJyqJEFu;~Iy4)E4h%RxiUG)f~rK=h^Vs*-v3SB%WAE)_(Ezv>7$X
zOwthQJl5l7h_l0(yjc!AzXf{wv#56#OX}VBWihpOx93|N*djo?6Lc)rJ-x6M&WY)D
zGz6IcQEzKT&MU23wfWXGIr70|ZZg~9*D(WUxElUL4e93x0#fNN=|I%<xb^nl0m~p_
zl9AsEdLYxU+`jdmcdF#Yuss7Z;AOSqMDfc5{W_EW?M9PFZkX)4I4FO(-W5h4LrhE3
z at XOwxkFB1l(RM441KEZ+xKd6&*$xXiO4P(CL4F7L8+?(QaC$ZTG!~*WPxxs at YT%bi
z38}cAG5Nn4|8ql*j$Fe$LX7ij&9#(ZCH`-k*k2(cKAbMpy7-e1XBX^S)p-6b at Ooeq
z{REEp0(ZeC(Cd1cD{<ZYR2S1vXUR>X%TrOKnYA}$3P)IcfN$Vj_~{7EHPre4vf=Al
z-va8P!I#iH6ZL-o7vIEx`5<QgfBPVS4Pt!|*uszS1nYyqexO^H0zQ;Z at 4}j`4Ef^o
zz9e&hUEprlPhszPO{MkJY<tQ;m9S3G5s?!uvS+y$&Q|8VyHLS}JpehBbnr2zz|LY|
z(&Kd9-`N|edaj{L8K*8$eqojteQZWekbs$l-yZk^Il at 0KL0nWl{3C&9jIo_1v(EFG
za>(%%)OEf=@51^s0qc-LTZ>5YR4M$j7LjHN=5R2uQ at q-Z-nF%i#`E(De~9yhQ0dyW
zB{luA#C~zn*2GcpwvlH7L*N(TPJS!4_}0I$--`V|`CF9aS&4b5*ULRCBRQGdQRA8Q
z38|_cpRbh+e7v}-4Bt at pMGo4W6O(&(A96IVi^;vLclPC|XSCb9JVO>MCwcq7;kTMw
zRfX%T0_S3UuY=7&J;5&r^^Dfz62T{g$Ih?-SCE435nS^o#!Su_ at T)iv|L$_1ZsZB-
zzOh_Qn|dE6x^DNlunzP9u42-LL~=|6Pd1if|B})S{bHT6Na4DPoY6{;)>9VPE~_|N
zuN1pJs?|R!t^>8)QO}(=cK-8Q%i1X;{v3st=kG0j1ARRJnNzoLFYrKvRGBid`=I<P
z>;hk`Z?)@aqd#)>!(a0 at YUsTZ_VGYrTmpD0@=FRKyZsvBpRZ at EzHPu-d@mIb4nK!F
zd8o0I8e+cwz3Ua|(!N-aOUXE=he^FImJhe0ZMCG9klo)C`EN(2#n*@4i>r$m<z@$r
zT>m~|jGKq;T-VHLih%pC`#9=p)VT3ID1(i6W;J|<R*%z6%8*Pdrj at sv@D9I0zvnL7
zwTza$&u(F~LW4lptzhSt3ci)AFU;=lA7q|;5;;)|2SQZk-dW;Q_+0PpMm-(he7RUJ
zQ32QS+>=q4Z&?F(!!O2Q&5i2^+>8mn&KoQCfmeheu6HlCGm)btvFm^I7MZ00x<1K`
z)p!u~(Sczia)n@(*!7FXW%Ios*rFlyy?g&a{0Q<J<jAJR&vOmSLzo0nBZd6-ushc?
z7CH{tj=0di<fs2#4SBW{w#zFEvSV6pX{b$*8q?Z`TwfQ9z09;$9L_n`hB(5RW?**^
zpYJGRxBAIzvb<7p&E7CIJyNWRE1}g<9q4=XyC7vqODi_~v&XV_)5vG&`+xWgq%S<0
zHDKX(O4f3;u-jTg|B61~bE}YZH4E{}i)0euV;H|`8R|%Tm7xA`F-L;j>A5ir;3vI8
zrwX*K$WzbyYt4q_PaA;~o#1Dxs5b>yKVkh at UdZPvIKqgSBJf<3-Gi3WYC>=E0sUSt
z3!ww20PowxRM9oVig=AoLi&ZJ{oIoB^~Z{>$U#`j>yJp(n?n4rKeB#?UFT4V5(JIP
zBu6&S0sHSZo0Y|es083Wm`4{JNA(JlTdDgVCo?9gXCG|UI)bGNZALzgD(Fi+WX$xb
zAh&>#!~SKvYGUkg6wWzAxfoZlXWZujIWV6|S0=WJ19u1bV;s&71h#1TyxUlJ^=;-#
zFmI7N9l5hNEYl$dnB*$TCNk at z4a&qz>cDxS1#umMl<Rqdn!Y>(V!~dk0?wggs8o6-
zphHo*e$3FkUTcs5vjbgT`h7sIxG+ivo>V9A2PUO>=#X?!_-Twxt-TrL9)31uZi=v#
z)}2F*4X*>R+n0(of^y`aLcW3^@It1<t$J2O>e77Q=*scaBR5=H4jI?Gm(+|r`APuy
z9IbREh%|8|=j$|n67oH09IuKr+&f{Z%vQRd<p1}|#&eNxZ>G_&AygjM&ZG|NpWUy&
zs`}NVakv5RI}H25KyYe|X<R#8?G`^PlQ&R>gX7Pw at TUc$i*tjEzS3aajG{KhIn<~q
z#r|2WEm1qjAenXtc(hXlvjf|VFPqQcfa7N(hyBN4|IZI?iMz0=24gqXUHdG98rHx0
z(?W$^7xM4xYly!uxF|y7&<$lvub_R!`m6h&9~^jA!pRD#`@Tl1^ru5Qzi&o=O?T8!
zUQ>$ar0VPD{Ez=?oI8k^VezwRam6F=;y$TCgZ5~sQ=}cJ9o_kT^<?bBO>r at 7ohkeS
zjswEoF-P<ThKFb8g(rArk=j2WZSdCOSuL&v#3)Y-tfx}w0)e<^xj<|`Ln-Ne!}MIu
zJZr!MRqx5qc_#RurutzAP$H+xnkc<Hf~!qX(K16Yd<$vv5#-N2NfpXFsq$A|6s}L!
z816?sJnvWP48g&Q3 at IJV?3BN$H(_5wf4~IG-xQO5Da|MQa<ZRF$1%h5H#7cpjcnqY
zP;#8{#WiX4Ja)gIea=quOeW<&&tYoV;~%rvl>g~^3wsUQ2IN&C?}}l9;k&ZXx0nd}
zX?g3aTVET+iA>=l?fO_+ah~j#&nNp5aSeD^73t&kxg<X`lSs4q07gzjFTJr{g}IPY
zP=s-GYlRkdul#|H>9`>Z)}Jj#ew-3qlY`o5nPH-S%aV5J&M9JyQ^-WsvtsmL${ZE?
zsTejcxuZd}k5i0(RKm7b$jP>CLLI2z|EHt&rKzJ3*lTatRZ>GM<J!BQ57YJ+3T618
z7Gh5CK-_u_>X)TbzR_x6z_)F$iQk5p5B!JhP1yte6jc{ZbckFuC}!5~2(fO#xM&$V
zRPeq*LOl at B(Y#mK#q52qYoKcAn}YY_It9*)UCfqGUTI#t!&{sd^{pcYu?ohG^QtlD
zQxlrasR;pRYo1EX32ljvkQRYH{afePR-q<S`PN5VJI{aVxiv6^Um0D-KeuOD{C0ZZ
zm3W5Q74Fh6PC-7HAv&+VoNtFMw=vjwQG+$7*{gIwAvMLRgDr6eLj&>o>DA;I1MHnt
z9CexadZt9ew^b?})9qbfZ}>jCKw8S%`EmkeLV4X>Y0-9BRN*(+qMp-T*nun3dxA$J
zG+$fwU+Gd}R|elYrwbnLDv-7j-;HC7H1O3ry4{`+e^Zwt at 431CrJwyU%}DE9zvwj!
zE&LK=6X%V}b%@(BF+;MB9ZE@?+?<|(+${+KvgYE?%u&iKZ%O=iC<OzNx+nuTclgM5
zWz-$i&vnwG%B(dT3eqBxv!QeL;zC+fp)eGWn__*uurC<+8?Nt6qE#D`+(!dy5dW)V
z8b}S-JzKmA?K6g(kynwor_d|QK0{K(e|Ed-CDh44j?;<bTfGX~)x%ZibyJG=Bw~No
za544+?H1(5)NwmvM+~2`aU?SGTy6*d8LyvhgXB5U2E>)T5~U{3;dTs_qTe;>_uOWq
z(9Ia18yP73<Yeei=*u?!r5XL}vzk4kVE+Za(a3Z%%H)+oQ)kk4F><Qb at 2qRF3}s`C
z)M4y*HK)n8?RwdDr*diNKJfaBl>=mafo{e<vFU+ZvZJrsH3DbXrAV<V&pmz1Bb9!$
zvq&9m at KPV(^Xn>>?&%hs&>I9N9EwV3oND9=yJS~_t(?i!k3MK&*QSTZAKO;IL%x(d
zfy=$`F7-P<d>8S*t-Tu at _mFSu>Sr;PF8x)Ep{x5XdoCg0xnX4co(t?V+yAbp9JEiT
zO7){0%bttUGXDisjd>e4j6OUpC(nm%%OtG7v-B^s?)v*R4J-IBAt#DR(7w$uQHM-F
zs11E{%E3nc=yT<fCj?@~AZTm7uRb(UEKH+iz^u#M?!;-1Cd3pR64px#Z8Bzm&^)ez
zZfYvsn8dbu>GD~3{GGYyQ?|A9P0_%Mz^;M11Y>UswPSCRdSU685i6msH6flxxwFwK
zHq`r=ax?-fq4QQvNM8CA(j(gyAr*9cbN^t|#&tU%mj7t0r&<u#YeKH#avb{z+cM!r
zZi>A$Dy4Vs;uO0CzkMN@=`*q2FCWD9eTIWnHLgp+_1)Ntgnf&Z_B7n{fc&hjn7X$G
z at pAURN=vru4#KbC?Hi{ns>QLwn-ZyUrxeE&<tuRPAdZ=jOQeN6ML1 at 7vnEbk)R<i7
z+R+TZF=Wtzopp$RI1{bCCIJrHfcS_rUPTvYM4I&2zc|CI=*%ov{(1HMz&^Ei2jURQ
z&tr>PxhZy0q*!V|dqreFXH;KDm!q8xyi;Ufv=sY|(6j51tGOAzsY?8>>#Jv~a_Uy&
zI;IMI%on+Nw+7CQDz|BYlgo~*@y-Vpp%%LRW+ptj0(lR$k*3=GwqnFDY(@OS9FMv$
z<2EiNe2WI(3NX{}12dQ7+KHHiI>`6_#A!8k!1Q8E{IMkOH|oUh;~M+ic<-p7Z0>~+
z+=Kk=*^w%)q53KCt!k40Jx3E^C47)PhhWpmbHpU?!Zb%ZuycD!4ttWjA*U|Fy5$kn
z1`!i1`>>H*b3To!LmkSxjU;bv*J7M=J?~M6czzOx(}mc6F>HH=2M$cW2kj>77w8?{
z(ABk&QC;NwNp2r`WRApUO?-q&Og8`5xBniy at uzQRZ4(i&DVg>xijnoIbg<ctMR24s
zvL1Hdjhd9OH!4A+5Ad$*h@)xtB3M$?!UKLAIp#>+?4C~itoU7mo#0*MT{|3LK6x;p
z?qqX#?6QY$nugLd--JyC@!(Tm=DkGMyk-eE_3l6(Lqn4Vb*SQ$8qXa3<`bN*@t{i!
z{N-1~R|eTr$VD8yT^eFOnTWa)7fG$>9ND1QCp`J0p$pqR6WgEz|2Y>_26;FmvY4C?
zDo0=BLtl-LYzV0v&#TRk+#g~dFCg^}Jl`Bt1<BE`!0j<dqE$KdL;3fAM)o6RxCU4a
zzYiP|H=bcAesEo%nwp_E?<+LOhAa7D?uq~z#yAf#J;23|=b?>d1=pf3qp!BJ at jv;v
zJ|Fj%MrY-eAV1P6)X>dGEDh{{*RElWUdgxBJ~5QN?<i`)9BJ10ATIJD)7FPj%ct1}
zds~QE{#AHF!3S*>ga+h$47qqO$z>&>!r2%l9?r+Nm7|6(YKT&oF$b+X5nDj8#>Psf
zf1p02l;myr_dl>6mQcAvGR+gfm+FUdH7j_?muEj5TDj&v=nu`Px32bl8 at kM|BqrrE
z9`NoGYMLL3wFn(X+#fYXE*UXJHcQ1}g#+MkIL;T=_ at f`<>Tc-RIF|RlYI|d(d!sIc
z#!WQvO4etZk(&oG9>45pAh99MB4P(3;|Bd*rc6rx4Er2x8D)~>N7C1W`VTyS7r5nd
zd7|E_upAiJ4*V_?`$kB`&1LeGf_msRmr30k^%1OZFh($bnfFft>zJ~sKw5+vheATT
z!ZCca2H%{k`Gl<juR%;&C5aCqc_zr14<dEdQIm<PKs(lB8;k9~@OuxxH%LAp^3IY)
z@)ThY>$ffPXtiExmh6iflA&(=Me9{kzlPQ!2B*JhXq&qG`lSElZJ|D at rlSe9ZJ6*4
z^0#rnK7516u)IRKwR>5Ry89|@+a}aT{*AQL(n;F?(beDEFN}>T|N5V7f0ZWA4Lx%;
zHRPnR-Z~_fh)p{$5ZhnPw!z_#5QBqzWATGu+p?j43f5{|)T8}v>qBHdLav}jHb1eb
zf~_};_Y`aKBe7#@*G*t_t{_%pT$%KB9HBeD7x#|51RB7fb*&it%Mi1M at n<V$<7x)k
z*u4(e+~wZHSL&M7Ju3)}!V~^y6 at Jf=I3 at Ul#(|TYgKb%J%FfP`E5Q4foguPHygMB4
zI!@MtqWYICkGUO%j}69{YzC~a>SU(D=brnJqxiW7+ZBkxfp4_$VfqUJf2aDpj9>}!
zz+Gf)v~1YiriE{%k!fBkLXP!0s0Sf)yb|~^X at _$T?qU7wgsvkk_%+_V1shZi at w*dy
z`tQDZ_L~!X&LLkjYSqHVbC1Pc6KvOMV6AKHsq(v!D?LoH>{Vg?{8~D%`vzo=?-_|F
z;%3K8u&MhEif1KaI}_h`gv68h?}SZ at jMrJ9{|K|%9qjWDcbm^Y;lnuQo)*+%*f+3>
zkw|vwkeeHPb2ZVqg}~Ka%yGZ@$RB#{G&-zdpawaY{PZQ$4(Q)x3Rftk;sBZ9dmOjK
zb;igpzOhd%tlzA(tC?2%{){5JQ+6>@y&3lKwG5p_?9PtbIG?<fFz^1u`U~d|s4bKw
z;6sN|Z`N1GbsAP=9;J%pmzjhxPQRJCOcm|dQ3;%^8!KQJgRU+2dwu0=HRFnm3!K$A
z_CM}3F!T9&1E|wAZ1q+|ssatj$!>U{ILAC at ecVSnz$uVA2{tdsd=K%)k*cQ*zxYK>
zzcC&>9kJp%#ENJmYOXx$wTS5H!5rGuwR-rdU!x%KyypAwgY%hEk514(tp#;v8Kbun
zxtg329_FhlshpJIO6EA)848=q=cx75=^9Gb2})?~nnM54^n^8??h1`=<kyW!#9w-S
z+lo&kPWiVU{St9$tAFnk^wR+UOS!nugDU*=ZRBoD92?s%Lkv9pgMnX`UkLJnjV`CW
z{r<d`W~FBRKX)48kJ7AvYiA+Jt&H4W8dnazA)s?Sy|t3L!xVFJz~eJiwNb#l at h-It
z>=~4bXRC at k_5@rTT=BM}*nX0#)twljcMtxNpE-Q;87u#<&p1`tv19Cbaa<kyjO%zt
zsr at 8Vd;fOSOndW0963IjCmVPX*iYT${nxgx(2KSXrCWb2sGoV2R!15yUR_*7 at 0F(z
zp4n1By+drX9-S<oyyJ11_}E5PgWvSW*LQ;+#NK!FZ^H5b^YJ*$ovI>-%>(u#y-y9|
zC4{yH&ox*ZCI~NZMZN#x9_&rV?^9fN0J(6ro&x;-CM0n`5#Ryc;U;l$krp;C7wDD&
zx+V4%Q;mCaoa>@$iVraA3^6aP at _<d9Azk~8+;p*?DT0l_D7yTBB~IrsF4jrO{{y1S
zGyeQvDZ2dJfBx4|i6Y2Ca{YW<uak~^=B>NgXj98xME}CB9&lwmJ at j6(13Y%u%8K}$
zpYM+{T(bmA1<Lcl9e3#jB4LjE`Pl|$D5w5>JMgcyx(3P;SLcX^EnS}MxS5($@6|4J
zQ?+&}S7nz-FbBBUZ#|$dUThs~k{uA%IU5I3rxym~1{ZY|fX~z;cD7UCI-eJk7oQO<
zj?_)qT=`$R-NN0$wUGs;*FZz$Bfa~`9wYby-TV at 4%p}Gs!T+Q2B9Bg68L203FLVvr
zB{LNZ6tt<w(mh0E!jg-jEy)hoXRs@>{TWyvaB at 7u*}6V9+SDO&wZ9SoTt$zd{d^wi
zf6mn&_P*f6S1WPM(O*3D{ksQ-?z~%uF%Ss;ml>ad_T|V8$hlfPkUFz;AeHC>4qB)d
zw6^6)ke^j{Y`{IY6x#!2%krs#pqBMJ^Ws;n8!!{Uw_hk~v+N*q0QuiWnPT?X&*T_%
zO*WpbdjR^)u~obJt-Mpfe>iTQ%+bzh-;VrsXh+17TK9pWL)L4;5xHS~7r(Zz9yFE`
zx{C`VW|RMPirv5-ud(YvlU&rAET(F}QxD?TfIjYbqfPPkpk2YWVmfx<z>-?>o=9Wg
zRjP*IQgB^0rw0A+6Y^_(PTq2~Jw at NJ*cvrGxG+X1$m+`xtOpJXu_gnrA?Iy1`@O|e
zN?Ci|Wg<^U9$ca#bdPMbU*)c#Qzz{Dztcn5DSqjd?WC`-y%pRnn1XRt`+-gn+?FF~
z5b8qSjn6pSglBlgy8}kX(<8=caj^NO4)rdijCo+%66BS2=aP2?z+XTg!*~4bC}Hs;
zuP|@HwjMrVSHkfGW-8?CG0?MReSNQG*C4@$$*u4gAEoyc4GJ|S&{rUv_EI(RUm)Lu
z9yqctR}l1RHP$P+ps_E%rTYr2x6}o6o<xp{o_(QZtv^MZ&P2J|p(`yc&`j~<Uxf{6
zS$OP{C-D0~esoZ^%9F+67#MThhVa-YE}?(lg-&99_GP+D<%-+KO`(B<<^B^fi0hjM
z_|GzTBjIoS;<iic(c5x&xw>co^`NjH+Vc1HMNYo4`^He({eL+lq3$F5z at okhxjJid
z{~hdm^NsSvGj8e#wySOMU6XURLC+O~!!m8)N`j9=?NK*$sFTpIK8Ae$n7Kkf+<k at b
z=9=O^BKl4D4fx7l1isdnD at T0SI;=MmFdmH8L at N|x*K>%gLQVCm1^Ld(1$n^u at 3R$?
zJQDD2<^m at TI~?Y5SHMc#ck-kVYn08HPxHl)C7{>!iTTyh^Pl+ at 7yDoH>nqH!qu({l
z?_zG1Oz7B-O^6di&C=iJ)-y6Pr(nPRM=WAr;)LvbI!|sUV+rF3ai at gVk0}VPiEO&L
zn%L?6>Pg+<aX+_8_9)~k)<vpd;3rM5yh!|HL}!)dVvLx=bXZ%xKF}DegFg$o^N(4(
zQ-*%YT(e3wP&}0VUY<w2LMg0s)M0#@<0~DO*eulKBemXB|LfZLKdx<vN*Nc2)Wug4
z+Txnh?vz+Hi}!B5Ld$+6IiX066!=ZLfZf{SlND{^N>H!6IkbiGA~jR7)`UHUTTHNg
z@^I9}Jvx+5KO at w2i|O5MF+<r~vqTyXbAiTo3+E7HeE%16%-cEHLX$lw#&ijJkHhNV
zx8H_sJ+?bgU-B<ZibrEx3GV5Doj->E7kMG{xV_x%a?II;Q`{}2rgTCp_bpP}F5x%e
z8 at NKkHyaUarWskq{lKL}9TyWf1ooyEF~9C(!nuZ8-~nxO0y=7Z5u4<t)IB>3b&yQl
zSX>hqT4h9SBy!IJV*7sz_jI8C^)sM#G`7#zk1kS4wiakcgvj?<LUhdd6Arc(cl?Ry
zR{w2iGkBshv8+L)9H|%9b>E9o7A)m26sT- at uJl#f0fHYqf*8c)uy)vQ+r_R`7X at uY
z`(r}<_2**rB3)5*k1HthAg)#SN3N<Bw7#=nNbr;g-KxLEgZ8CE>H0OOl?eO4 at aq`0
z!4$2&W)9Yh5|J+ at 5xGm#vEE6OYdjOM=6QT_3>^r2aloq7-B*Er04>jc2wMJxvRFqk
zRt{o&C~AXiRG1Z=@<RjT at 6i=t{^)gr8?<a;dDfGTEcl^JucqObg?GtdUuXdjN{_6W
zN9ydPTL)m{sM*<x`(oJp-d1V~*8TT036FKJ<Ya|btyvsyivA?pw3y^I*VsNxM1Dw&
zm(?5<`oLXdLcT3uU_pSRTlsE$JA*uL)NOi~3-t%`%inr9z#RXQAaNWxpzMWh#`t<X
zV>;!#Q0bbn*&WdVzgHyI4;`?%hi|@ouAI-?->-917Fq~@WDIiMX<m&(J*mRP_8VgT
zx+aT$+EW(&loE^Hr9*wMB8&g>k$|^+CTY<as?diu7NX8y3I7CWL;mxD(IEJyF1Bsq
z{6y5xRK;}Y6(^fHnE~ca$m!Y(I_2{T?&ekRfFgs5`*yeqsT5O$8)7Q`Q|o=v|5Z50
z=WGc#8KgGj)^;0es?_56e#6i+*5~<;G5y at E{oy|OKMZj4B8^mDn<b~3w(?F2*W1+t
z*`z*d{tTOXYkM0oD1Qs$!X^{HwhgvI*RPyBR{%FB+_d9Gyz5}Ci9cf!hk4R*v_OMA
zk+Wqf{Ksr%K4L-(-YNs~Fk>xJvvsqh)CV{!91Es*yJqMH1?D$5%eQc}q}`DDEdi;U
zzBRnA at Ad+pG6%giZ}MBSG^#MQ1AG?a0<p#PQQ*G5s72OB3OpA!kX*#XDB*KV8ac#K
zhE~05h$;4e*Y&0MR$z}}$BM{$8Gin8$m3J!C*xcRbfflwEAih2sN=6Yf54cmv8kg|
zeyWlCqSiR at YE-(nJYWRpKAx8M=WB=M9OPr?m4X)6$rzM<%i=a#$Tg0GWW5a=IYaK}
zT@<J`Dabp>v*jfP^?#KGeAqpRbBw!4*0)OAUz=mT4xdB at YM05rEs$`F$lUm;#rea=
zq;AOIF+a#`zd$!^ikDoMpyxI5ePsRkhTnJ}Ko>aEhP>^}5pN|^Jjlp?Qzn)_$}xqW
zPi_ at _Y)?CusvD-{q#fYxQr<{JtG&V5!>zYo;5(h^d>>$>j>=l$^Jmy^mpFew`v&zF
zi%|=6w8W#YO|0YDN)Z=Y1`K=|a?Lk!bhdi>@5dO<i|8lho%%E&^rz%je4B*&*`7&d
z*{j)a9OQ2*2X1UEoK{*dqD at _#Piz*fmkWrl0KH#I&%JR2xjTKuX7Q)Niksy*W~zP1
z=;_ixjpTY5u!q6$b=u`5rkm8B8|$}sQPTMO8&A+1m=_FR;=ZpY at B4~sPk#PPY3#xq
zOM(@cdvf69REWoFq_lK3Vn|7!N<hy(fohGSdl2IQwE!rSy}H>DmK(JKnD3|8M-5n(
zG)J!JyV}z1(McVotAUk}Ogki!+;<4IPg{1#!cCD4h at nYwJu5;^P`-nz>7`?iTvl*f
zd+A{V=qL5)a9rV^Yy;oXo<#nJL{7OE{N`u%=o at Kl9?9j57*@0mct5dsG4`ut$}c8k
z{4BF!eG^`IvA^x5<e$*LS_b_)Q$(X?d2gklw$IdkZ at bKOY67#}{T+90ivi<n41H3%
zs(#=-VOIAD`YZ=|QigVT0z<I at -yaKoa-!Bzk;k{^N=W}lwYOTyxD;j$Yk3z4-yPe^
zuL9Pnh1EwDL#M5`rz?n!%X*t!x8w{p#eS6Fq$$3=8gXTruxBu`Q?{omV4|I0Zo^yx
zzyFr2kg(&Q+yj3Zqc>_T!Yn~nmx67VmW<({QtNMz0N+L*Wd=POu+|-+=GZf3De)`I
z-{=dWkdKZji=Wp$ygeIv%c_|~#L~ouT^cyRUlEO1;tnJ7ZlNYykjXO(dA9VZF|LrO
zaSG(An%AjvIzQaRbQ5e4*6gR*ZLvom<hg^4&+hNMGnnG#YS3*TlZrNu`88oIG#O|T
z^QgNj(AgD?RHS)GHAzP$Vg#Gemoi$(q#~xT24g85+XKMxm3kZ>t^}?3MZN1h3qD;K
zxC`sRuOmij5hI}sy2qk4)Kxmu^-qsBdCA5kyvH)}9>mHP1 at 4j?19xHlNXA|!!6uP0
zASnvd1M7Dj`NmD~|IYorHdx^Cs3L21SKr5uqT9^lLM6e)gqsqk+l)fQy%3(9u(&OU
z&#}>*O4ll2Ie%CJ><nt)ntF}ERcYI at lp6gP+!9A7d#nWfGs33io#@I$j*&X<AxAoU
z{IGLFU<i9Z1G%>%FvOXP-<ru|VqU=HGnuGD<oHAz#-`%Bj=&IkNni-{S2z3r7Vhc7
zJ=3tY;G7k|QvClM|2qRia!lN#WX_#!Or9UziZR{R77lD!rt4C2pUW at 4-i6$usB4hd
z{oN}8f>8T at hlPI=av%oyzr5~yK|a<Vz7w>{bfJ&Cza#oIY!oa{01csMLk7y6{-`@~
zOr)7{2z;uPEB>9oIpca7fPWF8Hbbm4-2?uDU#GTN<-kgFRmkeG4f1 at DO0Zp}(!du?
z^vH?wKV(2Pc*R`QIlm|^cLGD^)X*u(#x_fV#w&cMQBGnxCHTpNGT0_0a?=^qCRvkt
zqrzrEZimK+{@nEC at BKMFT`!$~^qO>8>P>k-rclq;MlsrJ9S!^t$7W%HW8)IBBYug<
zv0;hc at j7aSzxGEv4wAXb&e0&)5L=OF6}(;6wqxi1ltEhd8~A(XqAW^eZ!tVQTLBDI
ztD`~pGjkBQ!6PK!Q*bu&IJI;SCtsDBFpkZ at o*LgR0DssGnRGo(99?(K8k`57E#V^H
z(qHq1s7K6EFmLVn(D4EKJ3O#Hv>>^aTuXPD6I)!ljb7!zFeF}qtdU-2jJk77+M{Wn
zg>;KB9{NH>ua1#wHG%^R6*wk$81cVJ3;QD{m2t&w`0maBdKYk;c-MV9E;+sshA<dY
zSZ5Dzud!FPmLSG9n_o$AhuzQb={$Qdxji}sV<%;OtJS%xvA=B3YofhzBZ6Atnaana
zzKyKyQx^~I$-)||8*4J~kgy|v;_ZgW74%iw<exafhwb3QycU;y=pWYG!C8XX)!MjN
zS}l~&Ng);T=3u2m17CA}r4 at c*Gvs)xa5wS|s-4$)L9Wnb<9J}Q$$9}8qY|7i{>#I6
zmU64l)L_i^)Ad#jXe>(Z2Ubm8 at S{FNZ$1AkW9002_IPVur#LFeT&K$qdiogfdnw5#
z at TF|4=EceaOQd3a2}e2epuM2rdR*Nd<TZx;P at J`Z&x$!JR|5Y&QUhYd!N1RWzjunW
z2lBj;9qXz0jL~Yu%cLOpT0ZJpS0ffff%?I1;6Ej<_ke>&%nfyyHsHAG+Eo3Qp@(z6
zk`~!cQIb9pzTqrmUC`vL_Nap_KwYn65w- at NH)IouS#EAK3v*ndWUNEiV_+wc@}4J{
z67ZQfoC`r48E>`o{^eR*Sx{DVKl-QNHq~%F(nruAsc_W4lILh3^m||*;zY7s?*(bk
zmMx#Su0~+WD~hZWI4>(4##hu%#UFCIvb!HKLDs<6nW=NMu3QfaynKGdE&9<hV96<|
zApo-fG4ZEixdY}Umu1UxVyCrpbh2f34I{;|k|mcT=UlvsS__lc*+apbcgdupu#plv
z%Q+P>+$ZRon6v&_OffHnNhJJ#ut_M>tEm)w8YA7KhRm(MR=Vfgfn%#`2M+bAs1k09
z7w)w+;98l;Fk+$eoKqpEC-#-tKf%bze at ctm#23E1vLYp7ie3a=1Ty}Tik0=IOF3SM
z3$m3ae}A^rqfg$iA3<GX74!s!9QlBN<!r|@6pV!bqO*uRt5?A^A<u>cx<!+}vU>#d
zN%_e!fpKSXpt~_QP)j+m4tAuk&z9o*k8qXXtH5MmLS1OA&rF8;pt?a-#uoT6j?%H9
zqdVL*8qI`59{}z%V}3I5!_kTy)S|G?*inwLsA_5U+wZO*|H&A*bg+r7d9!rA?TB51
zd&C)!CL?!BbdSI!$b$_q_)ZbV`=KDU4sqNgB#wJC>eW<mvax<$7h>MDOy11FdSTO(
zWFK>zH at Q9tZfS;%ZpQlEqJIC^kf-9Kf~Wo0=UiQ=xN&ubPI7hVh;=$ID5l(B1syvC
z<FdxNkb~F*_L=On<jtgw_}#CUaIHf!>vYsvBj36fwwyvzR|Z&nD;;YqwiiS9EuL8w
z^$LlfVEG(kF#noL at TP(DNY3zE!6a89V!2X<YN8K~8$H^w4nGdvxZ0U+KSeR5PrleP
zIj5>d_IY%HC!RT7EF}4Ss=<3Rp{LHXS&3Z@?|q7_W0xEy`BTS$=lAlp>#WA0Sx*0+
zrBqp1ZnJ^@c<~doV*Vo3WBR}7pU^#TAP0e#%0R4%33D$)_yKv3BrU9YU_UVY8esT6
z`G0ktN6zc-RhJj_>zjx_LHfRTdblZWzT=QRi_&-_7Hf5#t%23+Qo|F%_dDQoR2|{w
z6P=~2T$z-8h?9jmE)O at UN39xfNlb5FF5y4p$d5p6!8eT&os-USUE=!`Y5Gnu#z!Si
z|KD|4!b5k+nyzk}MH^^6u*ubq8s3l2Yy2=51q{kk?u1Msv}SgEPh{ACWG3%Nl4lR^
zZm}I%rYOI#JPUpsWxM&)s~wh}Q&brxhD^;bnzi#P at Q>>pmB28Rurz%LeAGbhLku2U
zm+j^gL5c`py<z5ES_#~<0_P7p+qkNTRy}Bk at o^h92uekR50tYsVek1lg7+il@>NQT
zcU6EtHTCo|ko&B at dY$jl{VR0i7tseVagxVg47`N;P3mR?V(7znloQ{^ST8%5dWi1P
zR*Zg1=iA7*A^AGGuiMioDb@~ESUc2V?Qo2&9pbXu>Xn+ki#Q@@t+&+KrgIBwlu3C%
zW9^)<x|h_H%=?k6V*3S{`<x%hGhz=Ro<<t_*W?f)`)@|*rV9?BFQ?safXydV-i)#S
z65r??CpjKj+K?J%?;)mTMAjPL$-FRM3I786J+O{}t%iAn=<CoE`1Tgm6HX=T)N>Ym
zdpgdYoc#6z{e`7i_c at wL-V4kFT*I(+yAXfWPVQ&zGu-han+KIn=E&05C*}d<%OCRq
zI>Tz-h|L0j(XTs!6NJtF1>FA`nTyFvTM1nQKBF_m5)3 at anQX^;7W)4S9w%if>%VY@
z>8~=e$t767oo0}G4cBT7xq-0)<2~4(priF0>S2$qOZR;<t)@|TKV>%5Q6}B}g3=y0
z^LdYk`2t$>3Hvn1P4GS($N5I~d<i+v!8(=EM6BTM4>#$`z+V*Lzu&k%<S%i320okD
zQ_tk%899&xH`eP=z@&l6QYPMh3^lT|3&eQN^g4l|o=VUk6c;9UoDsQ;eEz{VUo)~f
zzA|6~)(tcXHD?RI&|?kRI}E?}?NiWEu`f4~XOVYoOaeCL-(oZ4rdGb<@2CLZE{8qc
zS1idq5+w_6r8UmvxD6vqIqyvJ8#{B7UdYDuCI*fo#_bcUJKjfjAMyg6dUDpWih}8$
zxx^Nr+f6Nnz0RWZ6+C8FQb&-FtQT9U$S}j`r=+^<nGu~_)Yf8ilKwWc-ky(q_^2`d
z1=g2zY^^b99{k-(tifcEm&l(ORMl2NXLk<-J&gPro#RWFE5?mV&9YK&Ej^>R@=j5Y
zk}3;&xbl0fXYc9vKBe(Eo$ibIQ3!cp(TxkTNz4#khW^{ZRPaL5eMJc)RUEOP<hR6e
z<fnV8K1wYuU6tGa8t34(11k!~;p6pe(b0m#{D;C#KL^<Ac0l(+UKL;cXi#~OT99{2
zk(0DbGbsnl5g*w72*xVbRUg4msH8IR?Ph#C at pHczpKz=kw$@I!SazBB0%DFx%y8Sy
z-*}-D`efiu*;L?a_tGE9u0A;jym|rQ+arGqdU(xo`=ieEpm|U4fK6jXZ{;z^<_#eg
z at n_a1+J8WP8b!o|`hM_?eUPQUU`ymX!4}?{dDNaCozioq;5xAR>a9BJFW{f|;^%^{
zvq4uw_b_mxvLGF5PjlNUf^?wkET$ZE^<S<UFHvfi{|dUc$5+m*u;-5l+EE_{Yt?)D
zv?|b5W?HTux3F}L5oCd`2k2&&uApyt!eirY2RPXR<L8OvCI3a&jPYXceMElBOmv2G
zs&1~}0FmikDz at FGuKaPMHWusW9LVtFTr&;dg)JF$3<VvZW9hhd<D<vUfR28oHeTQu
z^xF;KN2iHwl(kOSpRgW9ep$@-BRYl6IJX?Scc$FQdm20#x(K1q1;rYEZ!hS7x(&ST
z=Ld)ld(#HQvDJPlBe5umD|^jdoAI)@?hJDBFio?y@~hBYT+p$mu-EQEoUf88v+re^
zgze5Lyce903wN`A3E%izvH(9VBZyy!J~$n^BY7p^q0~}3Gh#IUHge212c*VdyLH*_
z!W#dEC$RgT4Sk4(hFtg+y4Dem)^iA3tp8_{bD2tw at 5dUQXZnz*^)`4?Ie5}k^c}Gm
zvASFz`nvaKjOilT{_L#9{m1dVLg>+jJ1a!;=$@Rkoj=8#6=-i=LflI*>Q-C|+q~wr
z-mh<L!+socbQpa{ZoG;8A5qK7=-bM?G?Z<<$A!M|SUM}O?rGwnuNQ=yPNvyPql()K
z=PKnz{Q2iBe9v%``}B5ThGWVdStL);aI<J|n@}`JZ(`}Re9Z;>502Mye<$oRzOV at x
z{q&(<fF5h<Ov+5}!`#;nm)NtIBP8|{Hu>YI`Gy$lQFo6w>@Rbf at 9Au2KmP0NwTzVi
zg5)RUHL=<+z<%|}jmLr&+9F#oQ;9y3G8))t;9IbNz#Lka6Rm{azw}Z+T}kIMKhTfL
zr@{7qi(5jC&^1&iT}|om8=`Amd=J|sPwVaOha7!{HzL1E^h(~-^6;VWt+$7kTko;{
zqiYPXTECvzE~83l*h+$YS`4)Ec9Fdh?bY~QA!A^0K<0~a2cER|`oi1*^`<ABZ60k@
zzdaLr@<n-x-fXhyyR$8v>@~-cM;+&h9gww6{!GrX`9PIpFHH3ReMUd%%#f)csgm3?
zS$cj*neC>wI?}g(7MCBf!3i6QJ%Z#;AaY4=#5lD;?>q=!fz>ZZZX{dU06Y78H;kIM
z-R}(!WGuw<lGt|`W>$&9yvpn<#LXhtE&mecN70(XfX!GJN*Mub`-9Gpd|d3ic9ypo
zh#f27N#roVdhtBQtsig%M88Kr9z`FcKr!;4-$c&e^n5EB*Aw<H*f9Ir%2BsO=B|}F
z5JP_gYwU8Rre+9rTPk18Tb&SaKlBg<)+1Vnk&IvBH$pp~7u|i(=!bZzix+RHM0dB5
zF>)E>xGfklMmECd+%abvvgO_qi`>cCqPq;aCdgMFZLw=$Tb_2!ykf6&4Q%U=z+YuW
z+)=B2KB-xQ?V?-7JO#G1UDI&h?yGTjV*4*#XXe%7_;T0hSRc>9v7H7TWUZUp;g=la
z*$exgsa>AJuXG#${lMQH_?C~%8lC$Da+Yo6yovLh!cCSO=Q#f%)Q{8-!*1d9B6SMa
zo`9~jj-6M}`z3_<Z~AS2(V%z6Su(#)joOUZUpT>!utxdKH5W4T&JN^X_}+<cJcatK
znul*ek2d|ivaJF7%x%bONvs-q;A*@?@Y$CqpR&?Db<`B4X8%goCbt{!SkB&uJiBDx
z4nKu4wUu)?JR$PyHZ#V7#IFtfZzp at rUT!^fI}P_iZ}c5q>&S-Qp at Ytdak9YDqQV@!
zBp*;FN$(Z7pEDufh39$24l{ir`jj1cjFUrvOP~1O+vtN4rRJ3nM4FL<qOke3{1sgl
z{57tJ`2xhaiDPOUSrRe9axJL?e&!3;^a2TO(tX*m1-K+r_gfAnu1EY+#zz|6C@^_B
zW{q}q9%*YVbS at jV8<W^J7ZV+b^C4;bythG*=ea34xtg at mFdDW}rN-l*?xKu^nv&6w
zNqzFl&^Okp9$l_5r6$niXNajm-yk;vxprxRDrs~{;OKtj>Ihl6=|v)AWq!+ioNMXb
zHnA`k-}g0sr(pwBF;|e|JVB{>;=94&j4jCb^A>12AHPS1B;O5>tV7u~?DWBD8H-e!
z2fV-+TI|!QCgLA at szBBcpU-W`HRMo*PT2t&G9tUel}^eh_>_CDvvM*;__3o5w#e{;
z=~M!AKGgb)USUsS-h$lvJYEBt{~hf0bFuyTTqbmMiCsZSR at JYGv7ffKPxw>DAL|oQ
zg?uMvvBO^3bC4=4Kz#~*su$$=_>yhFQZ7TTf~R~CpAYN<p3x-ia!%ne<HqHP_4Q6%
zZTe;edPa&@qg_Xp;2BtZ$y&)X at vbIfJ3{+X==|>QG};GpbdNotrwz`jLG!3?duHep
z$*1Lo at I^UT8A*J_b20Ce?!5(n0MX(6NWG_J>R%9N{-g)w9lb+lP~$nnw4rH;ZC4 at M
zm9 at t7&E5$)yQrFAu(1AQpViVFRb)E~T8u!KuYq2X!uwIanhRXPwhOnhF1lAo?{<F7
zTMXIw4eXF#uW9dHgIb~f at V$K$ax#7{WL$*}vFp?kZ!NhFvZ?jhPps~`#xqM3>Y2&z
zhj^xAt(G38SYzz1Uh{r$HRw={S}aE)PpV%w#VaT^eN- at HPn(n_J+Alkmm;AHLdLa#
zH|7}L)|7ZY1ADO1?=p#3{H4#Yo${ggF;$3#bP|0C`c)I1J=_rw+-q+J##lCL;0V)w
zp)WoP`M+#I4xUvju-FlES+cgRl-?+l#fLa7>~<yd3hYfYu_k+;D_--yJsvtw4cb(5
ztqrxslkjY25PGLQfNHYOg`ew~{3_<Bmu4;X6t)W{X!VP4yjzw?*5<l4+d<v1trq(0
z1JKV*7m*(n_SymdN%;S<_Tv#O!Av5*;VaO=S1=X&5Qi at DPci_LF^~uUj2SX=IA|VI
z)#uF=@<PU!One{eRDF{U8411vULrC~ImAJpUg%_|_IGg)bhGw1m~xD}u`unLnBIMk
zXxf0>czvL|bi7bE*RyhOf at e8&f>hL=&GF80l&IsV#=WsK58_*DIbUV^Zhjp+dGG-u
z12$uBMbaDhZ|U=7jPW6$cP8bJcf9-!(Ut06OCm8iy)xEcGD7cv=?!}(^lq~((K`!m
zIqH0z(}Eb*CiH_U(@&$NzL;q9bn@(2y!V)}9sPe4^Y8nM7Iu8M<N9OHDWXN56_^hL
zyxf)ph|fVR6>PiTG#|jaHZuON$G(GH`%tsi9itheUWCm2HcZ!li}xcn+n(t)#jcpS
z#Eu#@tgTBSw{T!@qFb2np_9%gYj9gGbMOycXDM}P-DOtSnZfEhY0Nd at T%zmT`h;6U
zY(<m;x^D^3&e{<MJ}rSA6E+6Y$FU#BwbSaajlxTpfx(!V_q?YOukH_C^57pjGdp+e
z_v1JZ_6r4>BiQ$p^|QJ(@pBN_`yl*snS?inbjDvJwt?HbF~5OpWidQN?*q*|rHm1n
zWet<MOl|m7sd=2UD39nsL=V4pePZnd9{|=)6FSf6Q-t33iwvW0V-E5+Pp-3ioZonK
z0V6xQraE9 at xT)|P!DsgU&>tSoBv=;kQ`uYeM$kFLD~#6S_#0F)Xpqw9OBH&Y94G5g
z=++*Vzxy~!>3lM_+BUJ<<F6;$brbz=_r*M!1K;j*c#jhIV|;c&PVg$AL%lPSg7*{(
zJBJH}-8ipdUP8`=%H*%X+pb}I`rl@{o*}hmh3LCt_~-^FWX0oJ=sn#SJJZ2SCf2|Y
z61&UF6R<rI{fS5B80M%3=bPa3y=6B=jQO8{PihD at zgfh`4qI4$^c?86H6LS*96y)v
zWcX)sJ<c`S^Cynehh>TQt{UCWUAmsV6zeC~zg42q2L#qfeQPL!e0a^j*$eV?<~#O$
zCWG#Q{7m|F2{3gN<EwrohSjsXVe?`2Y}n at iJnm*;+}&o!-Ml!WW2Zq+_m)q^7=7Nm
z)|2qYyL1}HUiAU(q}=^UZ$4}BuwneM-#)FB at Re>Qktc+&*vjm{9`F`B_0Zv~2&O-N
zuER<ffX8OauVU?naW`B at 3(=pO<R-fIb`kw6_Fo1z at FS*tf`8pf0VcZ~K7|Hy4}8z;
zx=fWc_NwOTu?4h>%rDedTZ|lrcmAW(voZ*NRMc#@!Ip3w`oaRT{@Jmd)!Tp9&t3dY
z$a4(cos7M}kJp?C3?lLa`>(@Cha6hVd~HUXo63MctccXcz#Mpxt01;q=afJnjEgg{
zJB`W)prg!)ua9Z=C%os7JeBCj<QR0F`9zim&AU^Gbv9%vuw%c#uHrssrgzH{H+zPB
z7Juf|#GWe=C+V(pTF{H&CseH6vI#cOY+&G&#GmLI>f22n;pCCAV$F*FR!|dEgs~F)
z?;|~@sL~$PQe73&Up*~t_&VQb{4u)8bqRhazo3Wj7-0kWPJfj;tY1eR=4hFh;<*G%
zlGX-%RayM{ehUp724 at 4-bT7>`(gionnzyO<>{|GyJH3<`JH&Tf1^!>X@!|SITlW*J
zfH*O7gWyD8_?j2&IqW<t?=nc=;AE9Q%JUSQu!oc96coj%ZWQBL_tA&(4CohRy+I!x
zUjq9=8S>;KHw5vaj~ja$m{R_~#+Q(9*t}R`iBTC$IqRvS&0Vi1_Eze;gS6swa_we!
zXmoPx{;BWji4GSLZg)m>*}q=%qCJOv56SCSP_!x=a_b~`*DbWG1$=A^^(FkaXM5lB
zss|qc&melvouZ(5SXbq<e)@Ysv+r1fbTcLP0 at th1Z@?GW?>z{f0vdqsZt75<hB~}H
zmYmDksvk|>jX0e0xHv~i-z~~Q{`aI%r9rxa>#!q{zF#V=g-!GHc;NCZVy9{=3sT>K
zT?P35RgRKLn^73^0#k(iDlI|knFmpO?rxBe?7V0VWL(n7Q%n|gyXU_9QS<f)a;!3p
z$8lM|95!^WVfzfbHti}$u^6>c9nrkECv}rk0 at Vk=oX`bhtn7h5z(jP>MRLf&FxT;E
z`!H|!f!|>6>&+xCIejU?4!~wU%3_2 at sUygNWNJg5DPVwnVQcY)-{kiETx!@}eX%0;
z`5RM!D=C64-e^}-O##{6cRVNtaf5P`2L&5U>X- at ZYpLB$A!c-HDeyW8A at i7iZ-ujs
zuEksd7KdP}Cu}*uvY%-?3QW?sk7NKZ-CB^mqmj9fo*Qw;F8$hSA7j#ASpqD{SB&&Q
z#Qo8YQa|MRET&hsh&i9a4i^Ic5JF;%K6np#BK2a;eZOv9ggEkw^(M!n+JK2;(?+*?
zPab=#HgMwD)XiIGPaM1aR_&6BV-K#|I&bpWwOYT)>ke(5JLVg?PmWqG+scV=I1n*#
zn?7^S<X>;yE36B_J}{-4DCDK+sa|!Vzl7L|XDS`lo>@_Qajcw^9on4ifm~mjnh4~;
zoZLTp47It6$1m(CzE at 51*k%a$D_qV645{6dA;9|H<SD%-U6B=4W7G6nITG^x-Vy`W
z51uLq>cfSb-kFEK!S>xB5f7mZLVQ?A#ikopSMt1~0nq>7+q-}>|An;IIg>YFFXjc<
zOZbs?Bd(pHO#0Vc5*x((ALks(KyVg+oO?%^^d{nkQ0sbyvy)Qde1Yq8%7C`M at 9N_!
zux5Rn*wo%GnY?BWmHo&4<t at tPCH(J5-i3_C-pH-d_#VO8x~3Ztd&IxgTg<i}c at u4#
z4q#e8JwRx1`!(_|@_jC+r!orIn_k#AxTdMdF;#b#eA}{!|NR;NGLvWAsRq^~miR4P
z-v;?$jX#~rT9wz2?~Pbt&v6)d0od*(?TlEVufRL2V_N+iV$PlezRoXgxJ8-t$#LN>
zhZ607M|9VxT-Z5YMA}M^IqF1rA1x)=<Sp3~$Ap~@0j`S>-5og)q$cf__is#sp7VHk
zLg_un7oxk1%;fs_o_BnNwwE9$MeElJ^z#MiY5M4t{=<{DbtN!KUC6=nopmbdZ~pa&
z4*JM7$qE&r5B75$Izl(yAXCTs6RuEuIfrA;o at 8kxcL_%vM at 4t%n at Kx`-HtN6YY1(!
z&^7Q~-F>8-u8||h+b2Vtfse+yukZ`R`Euc<$+osRVnpsoqHui1=K7e{Go+0_Pqy(G
z+DK~G<RMqvA?sAguW5Y}rg4F2%(T&``sh%(bxKb$lbk3E&C$PxG0l&v3DUSn7Qm+H
zUq<@u at gdl@d88g({GzkvByRRz1#3TD&dz`J9Y5X)r?an-X{2(_R4vfA6zw3ksZ`=W
za#sOwY2LicVTu3PQ5e5VF2>qsIp)Pe{acNP2e)P{E~sB26=pdrgd_KgSbMzBWdBo$
z=NzP}Am2S;H-j(nT&Y1bZqmcv#Ld46?B}#MI0ci~tStnub`u!tsZM;~RQ`3e{W0*A
z4d6o~@NZLy5k7>t-1>1-0QXE|j^wAZ1-VS3Q0F`fTTdNViTR+#TB%oV=A_C?IJvk#
zbIdnKa<6Pbw!DzXU|l4Jty%$Gt~Ls}LY+rRUa5dpEPcKLwy6m3eLl!1C!c at mEaueb
z51`#`vFaP<;B;VlD%Qs)Wc-fh36!<vJhY#EZz_2&^4F2~!r#afx5W#=C)nrv>?r<a
z7I2%u){|$6G!ImX44i8AKK=iBpRGj5<}gLO5R-%cdWp<wT#NPg=v>H*Y3Tbf)LH?q
zglg1{P}K|aY~?%ZT1 at sYNgf`mmV*DUY6a=npbFT?kjn?(im`uu16jWnEo7gkc0Gys
zFvLi}R`#8(gzxFRfp_h|IdPDW%Q=)=&`a>_O7*xM at 7?`74X~~~55KcsoS2!$GYZxX
zX<jr9A@|E-%?#8>n1LES@*<x2k8djGG4Ks;W)krZ$XL`h`iJv|$n8bea!$W}4ui<O
z0C|n3TUojoJhiBcT*oOUzSYqexjS(0FXSF39C?$#n?{o+uS0CXWPj)5T?#^X2g&uE
z5YPbn>*OVvyLCJU_Q9ml0X*|4dv0$`heL9*6m0=7V83 at PaOJH>16S^-`g9ih=(VwF
zr2ml{(hs=vqLu%|`_E&YG=lZEYCtsc-Qpws1*FFGBK75hhpI_?@jT>>blwmu**^Me
zvW-TT4l2?%jKTUbKi at g1#io2bB2x1o8Y`2wG^34;f1>Zr$@eV%GkpdBD}4hxHwFEB
z at _XFTfh$?sP31P+Y9sY at l1HFpiP>>qjB#Ivwt`O18ywIK?^Ov^7#ox0lmj1h;9t>y
z40}!lJPP^}wKd%jl+Dd@^?B2`QdwHP2A-6Kygjgwi3~m#-~Ff|bjc>=U$BXUbzUZW
z25K_uy6<6(Rw3>Wc+1H#fpr<7MSz#1&{yr{vS;Usfn}+-qkdt3ai}7<OW?eVTvzbz
z?iFgrm+*>UJMwIDk^HKS^Sw^cd&m726%sxHzF&<wtaltH`a8EF;L4_lNp8oljy{fD
z>sY7N3j2{;G9PQCeCP%5QzF{Pc%b(5NpAK{5=;0hc<?xCJVYWNrLp&O at Rv}zg&Zd}
z8Svi}7>aM4H5oVe)E{G at d7^Jb$0o+Ws!YuPEOs7?{uuLS4*c?<wMD3K9_768`&eZA
zeg@`rD`J{E=xnb!bT06FPlxjLuc3{PpC$gYaQ$n{LD=>7(@Mk~{TiMy(gVDy68}m3
zF>C-MUm8fxA13&Vy!a@@p0Kj3*2UMi6Pz}_V>hc;P7`W|Yq)vHb+|X(Z|f;((blyj
zp3AwD%zeT`zz-7qm)Wd at k077J%{X-}!T9;|ULv{ya>D&$ovLpDzWMqIqMHE6fINc|
zPt2#i at Y^{oynaU^-;b3qoy~4)-2&(Z{xOac at hAm6!^rmL(fgz1q?Uup_3H$`Vdsf?
zg3pXTM|keiAiPT*V>%~^F at 43vl%GC0?&p_D#@-lwLO*|nUk|4M$8yQBpAj4X^KJZ2
z5qmo3cB!8dI9kLtJ_eoUF_H(E#y1jP3*C*kf{i7TC*Oy>ES(W47;9t=_=Nr|k!47R
zSjDr5Ra8Ys059}3Z@?9Wobh7icHsvseNJ2Xd_VhP{wMYp(K#;gG%LU5>JfL+bVIo!
z3)>^8^GbZ0f}0|xX6+z<5%2>!1dB1|y99YlkLo72``V$Sr(5}=OsW|1Q!ZuFuC+wY
z!VbjeDK3@;YHq^*nxNwSkL#If+KKzwbpg&7Xc!YEyH>J76*Fwlcll6|VQ9}G19FN}
z`^S9ICM{R~f3%6z+Y;QADm4+pz_~Z!OWwYCV!Jtk-6nqb6ZyU?bVe`QY`R<!WBL}c
zbq-O3iMR1$4JWn1#P_;*0P(a at oE&x^K8crhdjqdca)^SjLa&2fh<hD*H%eBd+$ay;
z3!U4`VT8`QV;ULHQ_dl_(fJ;1#Tw|r38ih2=W}-;`kRcuF;gG%s?hZqQ!3bP>nNqD
z-m`SR7P&t1nW7~P;ig&&w8K_T<grTdRiK9CWMNWfYw?U(l-OPzlhRvo#)zDkWvBrG
z|H0Nkd>ghxKKmZtf4$?K|JOUJ at s8Vg2e$H`*mpz(*8LtI*945b_@(F8^;>kKwi*uV
zF~S~XvKO||Y|P{q*K&gS1JAF5t>7w&6~y`=nrbBd<lI3q&NWm4`pL`Q#H+p7#78a?
z|EEY_ at lZo{q<Yd1V}c*1yf5G7TvCl^BWH=O7S|+=Kz9cp2s#VeL`#WocBhXW!{?J%
z0*ml(tQS7CA6=EzkGW at O0_VD>QB}@V-IszNlFhJlJdJv5BH$K_88c`@<e!NHJ%ZK{
zeRH=b=9|ft5M%N;O<-L5G)x_QhRTV1$9%y at -{)$bqYu?$y?QD-<yxC{y+?;t1^@UI
zAuz|n#_$9)^QY^ilh>X9({-rNL3f5H6e9-&zF`Rcjks^{&Zm(#5VjT6TnYC+IQd_J
z|GRB9?tzR`J{iytQ4>~~SoPNGi*f6O9}OHT81yu8Qs`4O>KS4VO at U3K3N|g&_*(S?
zJ&bj9jibC^&<i#xhoxX}rimul<fnzGts+o8XCQGl$kUP}a3$xtw@==8LvPMq>d`^s
zf1;GgN%b!DDE=d<0as26U8+?I#Bpx!x2(T;-MB&;FmjT%S0aDHTa*DbmQbbpG<FlI
z(}D3yM{!SVAb88cri@<XRB1r{jr}ApB_1{3=v~Yk$YERw9MC@?(|ukH3|`S*fcQ`$
zzWWK$8v}!LtiTk^8v60&vn<X$);WM2o#vB55$fn!eFikM3$Y%pN)ANdL%xC!PvKvp
z`Lx=l!Wa>(hu;eJ3f6x`a3Cz5Fis<`!DqB1x}!$}dA{4Qe)5}d>CGC;#5WVXxGS38
z5K&`qy;ihB#QI`u>}_%Dwy6iqd_Np_IJ-Df=MH>t2Jb`sZ*=@npuk#3Lb(tVSPq|U
zjonIowgMNY!u1S}*TY|1qc3w!pNbsVn_g@)3U@=_B)a7;nS at j2n(n!s_&((?a4g{o
zpP1!q5d#;l)I3^B#-~ohSj1PEa^8uEG1T{NrzNguy~(!TQMfRY+~+t#o&{WfKPSyO
zsyn{&{mK8noct&g`cTaUUnt;_Yoj}QHT%U%jrYIe-QlLTkFZ`?iS@#ih&lE&v=unJ
z3BGGDTTl>@!p(EKyiqriKYxAuCd313W>8Yp?<wbIg`3Vl37p(s<k^?ls-f4IVKdR9
z?pZnNG at P?*;FHUuP at fL*0$n2s{wpTu0csc%9O-7*&4>)<=DDVWr<#dua45n}gAvf5
zvdEe#V<C|fq>ec30?UMMFEMgqsqA+7fUTbS1;5+EMq-b^e9Omm_0XM9GOJ;8wD77N
zSdSz>2YsWR^;Jh8UIY2+_}{e^0tZMij?Z)CuHywF^qIznx{<R=5a&_J$&dckt`Se=
zDdZ`uvhZxGznHVd^(|-uAG+&4;vYB7cS-1)aMQ~%P9yO46_BxIgQ~)v6S)ImD?lCN
zfF at fOf2I8xcu+C_lZadPGfoRt;7A3(+smu9A0uOBn#^%v31}F-#g@%G0lS9kZ-K&t
z!}|iUrT`8!O$h!_vcpMm#?M1mo3nW?@Tal3K%e1M_Wx_(a~thwXMah7<~b9kbfkjs
zrSf_9G)^6nY1vb_+0Ic4{hs}P=-uR%@-$`A`_p*+uKUP4mK+<tM0A2c26M;*`CU-o
zz1P6%vp31}3$jQo^U8NO-Ka$_E$ZM_b$CLHt)Y;#oyu`NLzxLKu;cJn^#pJ3pX*3R
z%yR};39RYGwlvs(2fgcRjY~)@y=AiR9n~hp3Dv!=VPljkx2kU<wq_*l4ejLl9!f<U
zNj#^+G7Y*)pt{CXpbIhu=xy*xzJCdM+7k+gTq=V7DI9mHmK=8GgLkG78wBP*>7Uqt
zorK+Grt4eu|2AckbA*5WCh$4#*I-khhF=))6&-p*XjP0K>Q?58d^o_l#XQCCKSJ(b
zUE`8M&&wtJlhk0}`ozTgkRB#&M0^X2!E}9#^<y6Yj*NXb@;oI3TyL!%DpmWT&fwYt
zi5DA>c&)*Z41fOf at aJoJ|8{5><+y%I=0=+??_Mvyyu0WxJF`hU_pL0DV2yrVo;XK$
zGm*5<t_SZxUS#l=4*g-^zFL4gIRczUZMU1mbisyO1-puw#Uu=}x%O8h4}8MX at 7gSW
z`-hJO#tLgXH6u at m)RYx%A^f9+zmj}6>R=?f?{Kv1PxNZGpRnhyhYb|5>=@Vnws6yF
z=$YjCxZa%erN9c^>i{e7@|~mn>le-By7>D^yg9Lz!Zzm)T at 0J-^a9v$rj`h6P>bov
z*&~sS+`Nct?lJJ>XRI^b(=rw)HH#V$bC%%07JT?7 at DSSQ6TpRJpq{x6G&g;n2;W=?
zFbz8izd+rYmC-eQEbeGkD~XMp at V$Xw$3jQiJqB!3WjT=_7(0pHCfxsi<pTagcZ%kM
ze_XI)?rZLwLC03+Mja{69eTj(sk_M-H`g=BUxkS48C0Wp8u(op=648q at e>56fjRI$
z&hb5!;R&HNh*^Yg+E#>Pe|76T&cXK6U74%Y%#DUUd21kY-D12wFYIbE@|3ri_&rMM
z0tm9$Jhj<~H9mBsBp7q4=a at r+7`arDAt;s8=!yn5=MZo^<&Yn(_H4)wH&x2nNBAvO
z!6&}UG)JXf#uN*?U<aLzcg}EFbyq3ib{4KjJhGASbAlzllK~opvbyQlbZmpM0JxvT
ztcw=(FY=%sG#WIX>jK2gG+?bvTOY1Po<h2e-Jk245peOWaqGj5l0>!p$^u=j?<B8k
zdHdm7^VZp*#ZJ)T{g~F%z(9hwPrj{<21e;(&D)Av^EAW`V;%eiCyzXrl{suqd;cH6
zdw-`1S&J&0jD&ajH~s&n%aQ+uE(d<63+PY-I-Ca`%2*n8PSObS=y$q|PoJO*|DkAN
z%e%6m*7-M#<HPJ6L5-Y=ac$er*&A;9F$(%!&7^);5B;wBffW8F=Tpk05261NK6~pC
zvhE7_(RPr3$zkRF521tI0^VJY^WO>&k~PYQT(S>L1M1q26=ALLb&yX3%ZtexW$UaO
z(ifHBU0AQyE=kl(&|g?z<GTfRgkFuij;pO%!pW*F!Zn47bE8Z_x$eyWhqJejYqH+|
z$5WDm<v0pjI!zJq2C^84WJVcA9?v90B9u#<F}0IsY3cEtJe?S0fLzJgE#erk8^+B*
zWMg6~q9Bz{%NxL8HZ~@j5|zRv<y61t`x<u6_w#vtAHT=%_s1T)xvssh_x<~I^L#yD
zoRTBK0=Z=_*4?Y{Gq3R4ABOK at Jh;r+kmX%(*aI5;%T^yD_GZ$y at nzVD+u_qtvIdb0
z7`Ci2+^&Mr3tEYMA0G6FPGF)`$UCWgw;N}GPC1L%+?t!igPaG*nfc%6B=XllryTw#
zv9S?-h}jR2-w}1&LC(WE5;sNU;BU#^ZqWyyg#4ux7cuAVYtWZIyn?g%mys<>XSR<V
z*AXujy1{W|OOZ3dCmUmti?L9{S6ktlS}cC-66~~y0bo}KHvtoP9CND!>+Kg)9G*MP
z7kp3T9h@=^94YILU5j}?fb~=rpOWZsfjf_`OFT$0#h$r|-}2TZS0P62 at xDqjXHpxT
z98&i{Iqb(P5~TJK#}U2<b`O~(KO`qUJ?c^0TZku8MJAJ&c1C_4!ruKDTTAZo+C~uP
z8q8lr_(9#f0zY;1aYvvV7E at +J#$aZYEJ>%9Bc5KIR6}Wjy)$<Wk>~n;g}r8ReimfW
zeC~jA6L|Ag>Px^2tb;#m at mSw|N#ZAfc|QeC!5rj&KpcKjI&&s%WdmnZ`82V`&}Hyt
zju1Nxb&A+|i5-S6BX$^k*CBRUzaXfs9(ayg3RvmLgRN#RIAwszbNe1~RKX@;5{i){
zTkKPr(t<b%A>#Is^LTBLt;TyFxOqrE at F3Lb>}q6NSS`EXg!2xZRM^`PgG;ztMlz^3
zV_r;~Fm_L6v}%Qt=W2&7D(*FRa$-faafRlBR;Kvv0`Sks=Q7+d&x(9N1Nl*jo1$H>
zz~0D|U7joOMeegJ8K`#*@(v;Y58|YwxNmspEO{R6rx!?`rnCw9eQ8bfa`(@)4(0x&
zF84PgKRx_?(bB|K(KkO*l4mn at i;r8=cQ8RGc_(yI?smyyR{96)!L at +?`)yO$nFHI2
zUuT1n at Rb)7!na#pG8wpsFCqgxZ~e25C;!OpdRKil*r*PrEg1jbP`&~@{!ET!<-Fk?
zOE<W;(<)ZW($YR-DvvkGo_(U7UBK7c-?zQ}!M|5(uQn8yC#n)ELg%-Lmnhtvm&^L9
zQcS?n7ip at +oBefBQdb=80#(~fi0z4-pChgO-Tc<8%KSdHuf#Bu4huSyPH*m~_~A?b
z<wpJiU at Ztgm2z_+{9$e;SK?K7jarD at Dxv@#xC8q5Nx92cZFlhCPt|k4Y0(e|SwV9r
zhg^ewshnK`J+~v~gk)y4d5seOv`&Vnq)w*X@;)gOF?``ndD-6b at E?8f6rOXa82y{g
zGNTXjsUhAC9<ep<9?7Iqjw9FA{Se=4&V>or2a!k3eGGQK1ELJE(HmR!82D)- at S53p
zLD|yGofEH*c-m3P>>-NLcY$?VNaPyWDfJ6}Au(glg)+tcig~f*^T;EJyNM?;Gm(fb
zfR1-rB7RIaU7CCvxeT?<_gKcnOC^EKcd^5W at 8(sZ&P?XJmHD2vDiktE$~mLx9&}>q
zcE~s-fr-a$)gHN_4;UZV-28wEO+MWVyIk|Vi8}m$A<kcLXrVrb9Th2mA6ym%doSwZ
zL+loj)8qBw3t_+Qg1x36zWG;y`$!;hMEM^fu2W6P!Ck9@?SJd==MvRpy8Z!vxP;_F
zqla2Z|EhB&S)W`Z{q712Y{c5G1&)R;Su_*zeLFwnL4T`Lvw`{e{e`wPnX-->xDoMY
z%B|&)Q3x-2D`L&e_KxU=4b0e)|3qukl<<}8k1_1rkFm}iD>EDOTrDy1o8xuA93#1Q
z at P1MPjsU!y9aVgJSmVz9_}mz;Yg!SnJ9<oF2vO7Vuzgm;)}Rm3fK%J^CnH}r1ilvV
z_9*9D)Lks2$oQ*{Ux>JotIrxA&Ic05xBm6jm+Z>ne{Qhy7O#*G1pos)>H*IQ-ba8J
zLp%U$DC8yJwCseh<cYgvESr&U7P`#kZG{Y<NG#e|+^^Ps%+W#4`bDGQ7{e4hKMNb)
zSrPlw&YMHWMFx|O;BjW=JB32c#1 at Q^?!ip(0(L+SQHDPOAA-lD*B-z5mG)xUW%v-i
zYnBEluY8-5#2ZRp!FpRxo&i2{H?T8J<a<P6*NqT)*ctG^wDuI<0S6N6HsQ|s?ym`v
zp&!K7 at 9DI?dGkP}hO-6r>Q4rrFKkBrgv-eDCsKF#`uBL;S{d%?({v86QD5~dzo|;T
zCNhlbLS<pYTZLV}k+ at U$37&k#B%bs9B=AcB3%XSZJkBezEjw?)eht1Q1|Ry$Xr=F^
znA)wM#kTCJaY>=S%W&3RCeKhmT0a+SBTns78Plv`*AL9#Jwj{Z%e$B3EJFSd_X*&W
z8+oZWCh=1KiPt(QI7Rxqev at 2%G at V~ax2rF!VdsYbasip6LtioH@!OK-$TW!#7+qP<
z2QfdSC9b|}zrzzDN8aLTrMxVv*b_8O7M<B$bk?YD5_yvM5T4e at h>e8ohdE^x+Q*4s
zl{>lZ#>_+8wLN0n!Df~J+Q2Hlw&w%e0gU}-jud-hN}EceV)b##(1*7$=a0u~h10Ol
zFLLMO_c<JJ4DJ0Mzc=AttF03AqZ{iJYlv0OT<gO%A+BkdYj#|#&)q^7A`YJLX2AZA
zb@(dqNq<E-BrdWLx(x6f*b@$LD=_cwuhw-c<Mlu8XoF3jl^Yq<b&K;ZbP8bVIoV;2
zqt>wO(MDk=&Pw42ok>}})}aRYXg|VSxL+pr0gm2g#rkgcSRzD8O|W5$Tad>qpq~5Y
zXmA<kOT?tSbSCEF)jP*R{<gj0YD%kBlEccFF65uSszmvX;FzN?RJ`&ce6WQrI>=+%
z@$x%Il*-}deAUnt?qnNsi7a?DFgMIFbjnsIQ#_c+DaKh{&y??om~;o at gzp_gXXbo<
z$A~dAh76N6-d>OAw?<6Gwavih6q0_x=W2%tWo9GqNiOOw^4>#i at 3=N$bT0Rr19B;A
zD#|^^`1{i0)9>H49SUarx}=OdBqpOVG7Wty$KEi6XXS3!URAc$k$sI*?20GlCMlrT
z$c7FFOP$+;i-zvtnI??cI~?S6B)?(*7{G6}GY{ao9?};7bEL1BYZ_pgUS;;Hnx2w7
z$Cx(6pbaHM`#qMB(rH5Gc^2+&(tkqCJO4vm;Bry#D8z$Rkv%t9Jyd{vI`M(~F*kPG
znwa at k7AsWm!QPxa8oXfA*_x1H2V!_!1K##XsxhWv!e0?@Lgtvp9~?`p$>iBRp3%8$
zw at MC?a=F)llMLFfwO?$jM|&zcU!eYB<k^qQ at a%fvn7)b3hmO{S`dd-IBTW6=c>cSX
z<3jaLJfF`zzc!@NVZt+RGwu6zbS^$$AFE3pyJNNP3g)1?0p&Dc-dgd$4Ys<QM|iKH
ztiMJ~y+3za&T6y$j^~hC>0 at 2H^}os*WXdY_mUTzRF2KA~B40=znR6G8!}gMc_BG;p
z<EIrO_HgQ*W9&lbG+ at GlgTZqQ|N8b|1$igq?Kq744lw;-CH=t6u at j_h(jNrhxbAHR
z at 352E^RPBhzYn2L)#3f4ZI_M*uY&Dp_EAY3r({(7oYb|FU5M``ZOQD+F&R%wpYiP+
zMSPEXIqYN8Bc!o)yxn1j9n;!i_lz;@SU~nZ at I+xwq$Sv`I6uN=89Utn2XBu&ruM+h
z2S%>ZQGr-WJ@*`m??K*O)B*MU5brw!$zC#wJ^B~SSs_{5&W*{Kr#*!j!#2WS#`J$f
zzkCC+rIPm=nWA%<OwqNtU(Nqfma$vM(Li1&va*NB$|G-&?RN*tDyCbIBk*n5APs5D
z(7wMyA0fPADfeV)O=Ime^Q7 at oI>NVe at crmQ;Q11xqfVD4_4KHrPZO>&X;SNV)e=2&
z=<3>#LzgW(Q_Y86ORWq%6gfb~gPbqmoFDY75GY*=kupHX-k8+$E%YDrvt}Jfo^0kT
z&2#t)$SmMYfu897&lFsL!FxUVkL#lUTn{4p`p*yWdIa|Ktm{->EBfncFV>j_9-_Rt
z92ptoyt%M#W(g)Y)d*ygjAhc&oRxn{eZ#(}FLRT8b*uf3MHl)u?-DO#c<z|oopaOp
zmp`fRadwkjlMl}Z>TZ+4x3gsOAK!-v58G;sot#w-;0jw8>r#J+K7)@$rns at PU!8Xl
zF<2+LM%Y at qN5(@oIPc5CSOW7!xLo1O_$KTM{KF?;XBtM{L&bGbng{mDjDI##DUi{S
z at 4ovsUEVEb%@7$6>Jo?eQPkFUEft6{hc8OaHG)%#Ik(j6t06cG5d+}3Frf5hsUX|k
z>h`c+C=)+62l<K=;1EL|u3I^tHvSLXSH{M**4-pBR_j8Kb at h4V{2w at lF^eR2=QQw7
z;0)sbK;$#EQr-xz*3U%7qht5wKbuOh!P6WKp0 at mFJy-ZYjP;pXWc-GaXPC2Vnzsy$
zsaa%n=%%RXP}syE?>~GtWN^sb(6^SuPS%ILYeJmNjTpFzD%iO<5*?V at 6`%5CoiZ@)
zJLK0n2)xaq<diiNqQ%KdUa}W!@>tDjO<dj;3G|H^*!`4`Z{p;-dVMb-52c5toU$=q
z_w7qOtz8bjq5*uKL*m7}d_{ymhWKp={sO)Le^xcISFF%+3W1?`#-W8T>M3yg8rJQ+
z6(21k{sYLK9`G=miLMOaBlKiyaeVp<UAE?s#?`XWtt1bd<9L~Jv at T5FRzvJg;5J_q
zrnl9>o&-4+Ie`Tz`;+q~^sj;VLqh{?X~48q&n!cqoLimsJ at T+%-u*y)2jCv`A-V#v
z58&V=b^$sgu|A>Fp6QwZzpRCl9d{EO)JwnFkWbX)2j8_1Hx_c!Lf{=g8u8(d;D45&
z&EP!U$~E6AkIE5cE>*bA#70c){E?@jvoE at A3`g$DQOF$d%jo7UVr;m{^A at 4KQ*+(m
z+X$YniTP}uINH)(lq(|Ky<VLzzdud38Zl6kw~60tc|CZ$IyF80u$>6Qh7B~Zr;;hG
z^wo#Hx2chbH+2{9F}su(`%VGjk;J<HC;GL-){I!!6R;l<U&Tv^(Yh*AJ|;q2{5c0(
ziM;eUWb8|5`*dJ0pW>%L&s5`lz292Je+&3Zg7^1h_ztcjri18GF9jARwSJrbLwVG`
zuwhAiXC=lpyyz6G5w_A)e13`h0vTfsa?M;W5B7MJVQad6C35Wd&B!x13%Tru_;+u<
zU<xOAz;BOXojz~Nq`?!_Pw(q-i-qMv at i?P!zxudZ6xatlOg-1Yx=U%Vm?0}dr+N3U
zfu;D*%Xg*VLR_@&IVOhUFZ@)Vp{+AO2Ycu!bn7a&+pl~s?AW30XATp*6>@2A4w1XU
z164_rZxu>5;v9YnWxdXMALsQ`vEO-Z#_&_ZCJY%F`z<Y45JbO{b_w!hA(2(U=fa$6
z`%KLI0N)?-#{x6))4x{<&I{2m{u~;9s$Afz#n2rOo;xJejBgBC)@&kuO?Vgi%4QS0
zZ0P;%CB$ZoHNfnd`!>S9A&`Nmm)Nh*rZe^zXPWgv2$d?)A^xA<ra}zBkR&AJ- at rVn
zMm9=rurw*icOAE*FFWLSTaNFy&Y;ADL<T^vZrT-|A}2WyUC)CT(;NZ&D(q{>lW2;4
z2Dw`8SG(NcgNsExyqI5vm|g>Y1JC}AEz%S!3t2}nh7EixZ#*TZzbAUq`3Hk5BBr`4
z0_Cna;M2c{?et8 at Z==D&i4hgBM^|HRnb^gvn+TqiBV7TGouT$XDR at JE9Sx39A=g?V
zgX7&eFLlJ3*2%PK&NdaDhZux2&rQYn^#1QQVSh1kjvyZbatN$EqggmD at BdGm#=n7F
z;iOGXXdjE{mjrKub`78n#<(4H7TRS9EJW_rYw@}Z at 54s>9cjmCa8ZoSP*lhR2J30W
z$KQJ_&}*+=6)|;Gi+pv+mx{HYI<hhGnAn0`r<J}evd+3*Oz40u407~3V3B-Tcg(&l
zKbd|1*~3eQ`?Rl|cNpnL$+B0 at q$aPssTqipq^?<a({0^5ReXb;BVQ`s6tFB>r5R!u
zQli<kC^PXIxzAmZyLsQmD5)tp^^!gq{L06O&l}uT<!O!dM(!+IZnqI!6OXZs$#)&)
zNq46K&+c~znD&FfDEy8y8gZ};KcI at Q1g8sh{dFVY64N?2;XM1b%=&zR+E5H%^+*Q)
zO^wXA!}%-p7;uEp10g!_?1v_uyDV_BIJz;;WIlZ68$|l0;N(uMfL-t$ayk`)uj1NJ
z7O)zD?2qI1_veGlL9xIuS#CSY at M(i9JkrDbry;Sz2^(5{A7X5)xy at t$2UjG?GaGuJ
zJkP;{e31cr2jX!3Yp`yf4FiALLmskuoi=d(IQMZHfiJq?Xqle3Itu4O27ec9qYm&R
zz|Ms@)7lSOG{e)&h8j8Gt+7wMWl~Rw{ak&o>GM?NFcuDuUpYku&L_-K-wxOy<%C}V
z&tKC9e&&+N!e7Uy%|pB<>H)q5 at Sq<iav-=- at L%+|R_K{n7$j9HaP|@Isv^Q&0G%u!
z+ya&0ILKkEAfv$_jeAYFu0k6YaNkI(IhW<I{?W%`{AYiF2{yU^T$g$KyLB_+SH*ZR
zzBKruXSLPaw;*PHvwsEn#*Wd-zeUE$_!ZPvZ#=?04{Vx^ewQ)st<-+j9J`J+nbNty
zYfmGePP>((T5$<{8Nv2qa2Ax^dNoQ_ID=gz+`KAua7z^OF~HvR9!EoXAduUKaQp4{
z;@PN9S^!)xcz8|oZ~hjX$1aJzbEoC90cX{G#Qj#^X&IRV+-586`1#<G(L<-pj!YHl
zxl7SsTIeJOksch<>7L~gnF8c|<KDFyaF#UOX+dAFaEUQqu)pW4$l5|1YuI_r`&#~P
zoIQVoJxY{VZfg&?M+N8B`5bKFty+HO(8D>~t<AS}cVR7b;@-8`b2VK*Muzis-O9G*
zY^FThr|b+Sm&sm%vTgT^GQ_{cL$0Y#PFeSBbj4ofLkz7??M+E+=}o0e%<ptG_ at 0+!
zN51De!~Fy?EGls7fKL*!kWaz?T!b?+h-<#%&QL^yPXy0>fvK-3Lv^m+)3&d;=oGIC
z?+1!b*$jAB7q!uK)KS8t;CXZt?0TVZAm6au5*$ck2yf8w0+nBseZRxl?TZ+b-J~qU
zLDm7A|1(o=r7+-Qg4g{w_N#o9F%8duK*?S6>7-rjI5NsOyK%50T2&xmAM at T%OYdP`
z^rguZ5o-cB#_LDlYkNZ?XQjs#6}%mtm-^Pa>wQMtvyd%YXIyt3dg1Mrx?Tk at -k#H>
zomI$k+O-7BIVK++rETh~(U5bQvJGWQzsu?g&l%XN)W!V2 at v{+=T}z!v71 at jEbF!`3
z_c>+cJAEB{<s<>{%fZ*cRT{moxIbjyf&S(D)XK#yBhLHh1S*oR-LnYt-tfA*&hi=H
z0AJUDHSNtm{W}Gp0b<NC2a9#U?m?g6|BUh<fp07vx<*yP75GL9#aisSB*q3Dlx-Db
z@#w!XTx^IT;8ws!>jRm#1bGU8C8BmC=ZDMz-fPjH0^fGjk at YmA*lB@&Ym8jw&?3I-
z7`P*kabE(q((Kh~*PV4O!TKk$C^II at 5SyrXIWZT&P)Fo9$R5+-pV2T}(BLA0Y at h~?
z(CWNJi?cVRN*Vq(#P;BffDat89O1yRS40<h=O2IPLmWFN=X8Tl%@rlVn>&-y#usp&
znuxCryaF|&h==vY5i$0C_)K6op1#`L&G at okpa~vJ=%EL|4-pcb1I~!g2e(DT4%w|m
zE?o;`ka|av&;tyqhbI>P%8?SjP+~8zpG-}<qHvppBdi=^hp;y%+3XD?;|azQ_G?k3
z8^6)6AmCJv6Iq|K-05Q%yVN9qMbAg%yTpmTll*==@*l|gAdkq!82vOa<^#j%8^{r%
z1c$fS&rIaK+bzI{O$Yz%SEhx+cAg^l9h&4{y$iqgW6|=YyFCp_ce at WeoWgdFLf9Um
z5?=5rW7E!N)}hol_zHK8 at C>V2_$5muyg<v at pCw{_+do76PC=Q{N9SXf=w!<GBH6$=
zaygDn?#wm|zv#jtz6v(#q6<yz9CCgAW9&@S>moQRD2Ewijy)(|m;E+;SQ<am%p&AJ
zSAKGw4O|OidJvC6aF*EPac(eJT{d)dB}-;M8lza(i~RMZO=iMNiaFq8Gh>cc`r7f^
zVfX=i30E{^WgkXX{+{7ku3$;}?fkBkUwDOAt+fw6S at kW+9caM$mY>{#yl(p+H<8ca
z)2w`DmL`fVJ-6O&W#tz)&eAXG;)&iVpikK<Sot{fv*uQuGw~aVyg9s!$Yr*5 at L#vH
zB#_&`C-|1og~XQ4*@`_99MUgjQ+E*)eU#DrkRuM*n`+3)*V?Mk26Hz!wr at Akws#2U
zeZSeD%w?U1eENmGpLQoyfyYuRPK-mm$%b7u^;-_|JE^S}i}1UNHNy6QgTx<<eaTaF
zmDWzpTG3}$wH=v3u-7*vTVz{PDuI_ej{9;k-a_a<o8eP`2H4F2c0q~%%+kcW_N}~A
z-xOVdJ>jjyG7oD`Wc~R%ffP9b<QPANWp0Mj93q$kKaJR73R)%+2$UA^A6e$WpH#zz
z%|4|JKFvbHMcCyQ_%eMx0H1g$yAbw;PVl-WjE%`jV7Cd!U`oQp&}SjzhmGjrb0U1q
zW+Dq?e%D7HA$ih);Z&!ru~)c_+?ZMT%wQj5Wy)FaGkDXWhyQau$tiOR5j*@b2XX2+
z*U3Gbz4u^_bj181nfbrQxi1-crN_p(kBoCtlO`PF3|lp;?|+PQpD%0hP_#HP3!K=Z
zOP$gB9tGhvJZF?CetI7m0{zQr45wiq=0fS%TzCiLkNklCm1v9ZJ8)Wf{S!~$Am<?Q
z*?hCx^<<irskcL2 at vPC;PW+uO6eO;~{OExFeYUMC@(6e$ezC!KMf|qFz(m7OLiiiN
zErI#=CFUD)0Aj8H?;ZBKQ<!jZP#9GRU-c#;@4{!beQ`2kXvHBvgc<nTNqNBEF}jT;
z4R(ogKJ3_QAAygd$$d2Nv#>>LeW0g^T~7w8ByDU9Q at 77J?*qqr0?!VSoMr=;!iRt9
z>qf~JY!PgFue5=G5Lj{L)5n;)X4!yuX1>S4?<xaMx)r)kE6(hC#B#d1|04hC`aym5
z at wuM1yjap+aAHf}lDY!n%h8d&y?=CHDfV>tM^1?dxas<kg0XpX6fvO($Qmd9vcXLF
zj=v&%8s^MG$U;&4BCPT05-oR)Q^?pBn#cNi1LntApMQONtgPcG>ng)F?<8Y!yum39
z1g<FiUyd5c6ix=`tjG6{kh4+he2r5Yb7F0n33A&%Fs^wMi2Y}66v|bTKKk_~4$e#T
zT}=<hg_QTT6&xuTGt9$h_x7>0coy^<^8Kk5GG)O2hxNJ82~5- at xZVNz{~DP?qz%Bt
zqfOXbM9A;4bsK!8{5NlHj*_l8&5<A;9da at Hrzr3}l5flL7Qs}8B4+^lU?Fn2WWg_7
zMCQJ1YvTqI|3dtnkOy at H*8x7e@(fk{dhs^sxiNelb<lQO=o#)$X&lT$e?AXCZ>cCF
zbB#NzK#w>!o$tX!-S5gN`p=c`>e>}k^xxq9bL`Uv8XHYws0#cr_ikHsUY;=4x2TIQ
z6j&GRLl-eWU&MaB4xi7<l%-A*ry$!}5GzpFDtvpKQv&h5U;abs7Nw;eI?-<e1<Lv|
z$xL^puA$DjtA+a`$bR;dP|Q0Z6m#nF`Fo+5&J>E(`9kqtCT5CViCh?&h%HgXr*HTb
z^}yMIbtfSFpwO)a><WvPBk3B9oYQ6{_UIR at 9Sx9ma%J28{W7P?qV?@@)NEE=VEm42
zR at jb1&P4zDFXrmNH&ROGk^?q1el$mF(MH~PXay=sX7G2;*V*_EoThf(6v#sg#x~Xp
zZh{KPC9l$W2M$L?O{K at lwqBcxb`xGoJ;7LT2PE0R5=luMU*ZARDa}OWl62Aa;LfiQ
zD)+)J;Zw&3Pu8(+#Jyo}CVO;94&Cm18GU1e?2#4l1$A)f_Nv*)^B_x2>b~w~+MX6T
zHm_^*(y1ZF4tIUU4>$`KcYP0E<9OtY)6ykvho<Oo?k^g<w~pX2yZYHj!x|-bMdH=n
z<o at Cu;Ha~E?+_orzAsi`4;nkS4tUFTHWN%OFtKZ(pPx$1Z>wU1OOro{`n*T#(`R6B
zjMW}Ak~|cMk&rrfu#21 at VNdpfZ+H!KA0;p<+Q at H#M;s=&)Bo7$1S;Upi~4Gkn+EjJ
zh4CrVqua^_Pg=?Yv#f+i@~@HiZe>EId>1kL(~^q at 2zF!&>bQlYa;exw7O!vXyhWd(
z^4!dwKtu1 at cY1nb?CFCQ7f$4E33w$+PMt2NO9Fw(uH1JoVA-lr$#Uq^*hhue1qx@~
z<U;V>T*iLO_(b-d(p(3IvB@=`L&Ih{a{eT2%0~qXzgGMH)TG|OAz$CU9Vb?W(lonp
z-Ra&vD7TR*D~s{LjwD{R6WrQvdNbNJpOXi9dZg_r$~X at F;(wGO5j`vevO4OMwVv_K
zjI6vAg7f=k>0e}+%cnCG&>yvk?HaLY)v?=Z>{D1O?yUSQfr58>Na~ue_FXtvE!}5S
zcRp!U7wt8{-{F;kzU38t%-ES-&u#%ejYV*4;9nF3S;}Qw2VUhA5<Kva&#;Rv+Ki(3
z^cO!Mb1y!fJB8q at Jrg2=M#0gK`aj#{F7oWU4g1_6Be%5YXHmP(8PTR{tcPmI?_R#W
z6wKAfk?%*E)H5n~K=#?UG4OqQ8 at rUmi#*QXT)Kj5C;0fYgzMkc%kKc6&oB4ztRH6a
zuj2Dvf?pkY9{L^ZB>OV(eqTWNyY;Y<=_S{(R}60{>o5q)R_f>yn~;4BWu>-J!V9qf
zkacpI=p>Ir_n){1|NjkkW30KM1A&FWupfjzyVHU=3FO5!*wWa%q at F7uI{qOj2BwQ(
zqszK}!hR2V-=FY)ZRF&WcA=fn?+~wT<X>}G1*NX}z?T`;-D{(O$rqDrocAn5=2LOa
zR}$G<z|$y|+yoBcHo+}2^C87j9hvNss}09%BA2_uS4%azur;3D?-08;kyDRp_C^|+
zSU<$OC*2*jr at lcox-G(Xc4l0(+aPTBKOt=QbFsSy{i8Yt{h~xk4{Rn!gRq at G4B0&d
z`o-Pj2a at iZN|PSYm5vHv#tVQ$&l6ry??XG@<`DezpBb##r^5DeC{JyaZS8%EVB0RC
z-MszKqr|Xz{8B!P8?&;Nx?xfxZ&E!to<&$k1LKQaiTr%MlHiYns|g<R at 280kosr8?
zMmNeBg>P`qpx5@%Z{OELx5L((JF`li%j!#(&dQ<=aAfvQ66+sxeq9VXCnY~}TPfJS
zT$}h^B&RFlfU;btplcoBP6XF|=ebJk8PE;rL&0L4i!9eQoN)vr$Y3UMKI*wwagMR#
z)8k@@{_6aanXA}mp=Z90J!d at ZZ@|O(h;d%zatBO$c3zTs)C#^eI>~%xUy|7*f&9cH
z`?qQf;<}X@&v5!=;H>Q0t|7=xCazUfLEn3HLzsTdAGesXfvKj;@LYe`iE)N;r=d+&
zvX`+g+sok-Y&7eH`#InhcgeYPY{x&a0xzBAYPE~=7f;T0ef;*6n2vQHN`Bbh*)@u@
zh6@?!N3zF)^JU;2;M at pT1Y|$tb~nAmE^?g$wzmp4E$BOtH>B93+0ch4V(ynQIl&&@
zyM*YeBu^~zrXZG%k>N<rI_O#(^2z^+zX!hq_u3*Mu~<dFlXU|eMKyC)ZscAiaT84c
zgZpy$Q+_8;WQQzAa5GnHU5}tYA16E-A(vgJu(xFPtM|<%GHGW8;-&|PJOOO_MqHD+
zu7z|t42*3bdkrZQ<Mtx%soU$1XEONXc>SaKO#IYF*iZThUmwHabcn=uLl#PPIRlGO
z?g-{p1IEY)yzq at I$ezeArhMcLZY-YnvZtQlwl6-;)F=00eY!p&|3eHn&e)L3|F?P&
znakULUzXAtcciZgc<v+3V$3^ngc+Fc+Q?5==%`X>F8ty(#meO-<b=m~cztK{?qS?d
z6Q6=tH at LPx+S02m8wd{y3tG3M!4&6kSH)d(9~D~t%t9-pp9$DGNm*2GQWj5~l%*y%
zr-hCx*yx%P?V8)r_X0D3U7#-IXKf}nm<5QvT2s)+Qgyl0I!E<{kIe218=g>e0{!;P
zrcx$HRJ})D{vm%C^bAs7pT#728t=F9|F_yIh5bH8;o#otv2(nCqZs<|9$ddi_SxYu
zPNu~Kyk3KFaH2t|45$+-$JK8vro+bWzYRZxiosd+!k%}EHDcGg#H{uP6WUXQb{S~J
zt`zX?G=LurXV-6`8724ioI<QIjo8U9%5^UYN;=k^GpdIVwN_~58IU*LENrHsCy;zp
zznu?+&p%a#7;_Ie^-r>dUi at u*`r}!)mdNB$J)Q|HZH_TgF{bDD5?;G765sop?|I}K
zN=APWJZ)oa{ToNg9+xS>@4B93n?X>Lq`Qo`PH@$ZGIo+=$Rzd0k-P3rAJ+~}8kI{N
zY&kw#w(Yn3u#u-wFL#XwTlD>04@;Mp48AF4{-&D;GLNJpZ{Qn3v`@J!mnjqb9fkau
z!JWs;xxl|gUi&}FDjMs%0r<<!s3*9X8NH^5uhbXv^T8oL>Qa4VB)I3=t>DoSQK=<~
zlcez}n{_yIGpw1B0UD=L$g(hYi#V*Cmn0g*N=?T)dK|9+e13|p2A;00-2{K8KVE)(
z<Vat)(1CsZ-rXsh2YP!0t>aDvCsdrHg2YXb at 4#pS3kVL9xD{Vessiv at lX!`5$v*ji
zjh7(t=8prbNw`u%iSK?aUgF|Qz~a9-g1&SWhfn3V+H0H at +f)*FNEd8yhk*m at a6_&Q
z$c-y><1F?Qv-2 at OY51Lljx1(P?I-pEvaW2$+1bDl!1qka8GjY>8N!d7+IonrY1p;g
zY+x?dO`@~;omlVNhkgWp1iY6Mt>BPPzY^HeJnu==qtnTecxcTwm9t{ORMhngIt%N!
z;E$M%CMIS>*G)V2VU1&*N1T9;OXB;Q5YJc1#QcdJEr{hp&S at r|ua+$$wm(0zm*~Fj
ze^>`c4Ur83HDlkg2VPuCXHk%u0-u4Mb8EcL!6*OQRwMLmGYCBtWOQ#_#}&k*qON0c
z1PxklBxSa51}6#Z&>2&abI%(`Fh{_|4)C&ii_U5 at 5X<ql!t>0uBJ&*Nb6Ye02;vOn
z=DFa8ezo7SZ^d*OxJ<KIS!v at qS!urH+>~TMcY+TTec-mt<G+a*D}fE%7xB8 at A;@}4
zb~ju0KrbNUIb at l~F1k=Dkee%kA!!_o$2U_4#g&qn&(d at IS&$7m+<uz>z%9<#6P}en
z{Q4q^0P%}kz;iWoZ;V8*o}kysw%b=Gm!z)g-Q$M+cV7?Z0PIDbjw;xQkQ)%|<axT9
zyCy!}W&*aW2J#l{HQ0mf#OEVZ`ai*)P0kV9k?AUp3VC6`Wx at P@o;%WZ44ADxPUiU|
zj9vu$75m^yGpppBHc{KAB|Hwq_SSQrIWJA at e~!sj4u(hJ<|!|>Ig9APn}N%bSm`y&
zCKloahlw5;BNS7Oxtr-B$WdlnPm-DJ%RQBjYUrE5)T<HezYX{K(|na{Gjzimhn(n!
z*h9Zgsv&!B&pzaZA at BQ<V+t_>=g4Q^{?>)#96}u7`fnZ80wv at uxeGka`^GWt-FE*A
zPGQ%mUFrW6rvg~T6Tm1M at m=iy3}luYLMy```2k}$*t(|(_2l`UH}!MPN#@J-@#|-=
z$Fn9SWt~GG@|#eX5EFFB>7+e-&=>0$l-p{Ueek(9<K8*6f!*!`wj`i}^i$0R+ at I=w
z)?~G_mv5n4iwyyn?AiI~3x9Bt`cK075{PGK@`*2JCZ6{w-s2j|6S4=ZpnHvjt)NVl
zk$dt#yc`#F1B#{k0qF5^C3&Bv`$lQe!met93 at MoI^*0NUFGntH9*1*WvJ~><`UtnJ
zNuV-?@tc4tA^scK0J;w{eFt5g#F^~B9$0KChuy0HTno9FR|3u^uYNC3IcgaFN at dY<
z4JfPK_Bw-|JMVl<D1O33^!2 at yNx814+1OvFd}T`!fG7OBOAJ4CBRAGj!kvJ<s at c7h
z=saOhIuuNO|J#Oe)LZuKYzy+OIcM)3hq8_&G=$#xAN>Z7P3T7F?EUDw8^d3q4;LaY
zdMjc?ZgENj?%IPB^_~g2RV2oW-$eJb|4eN1$mbYwHj_INpFXb9M&j`Puw6i&i<51=
zxESx(h%77HdRxK)uf)>ZBtHJmLhgWT2x}yceE=`D(@$gd*ZGx_J?{zP_cW0G=o$IQ
zoH-A0&L|+K+#d}Q059<!>=A-LCF**V4O$xcA;a2$RkoTDyX2|$#*mpSxskvLWA7nx
zWY~K`rxjV|NPr9E>^FPkmSE?=8MJ~U?;6B><r13->hv}zi^!XPQt->@zWvT&7D#Od
z-yWRN<KUz4C3 at xvkFuKQ31GJj`3w0zJZCKC=pN41noC$W_N9Z>(V5T%$mdb)*)qte
zFF?oW!uQ3n%Ty-STqf71;l)m>VPvSUnDge4P|0b;zE0M_GuZFa=TF8xGm>=2aVD9_
zf2NZ9t#IS|HQ#T6Nhw{at1m_QeU>URe}eOI&voXW{bavX+<`v&Z-Q at s^;hVjUod5U
z1-~}A*49>&Q3}~co^&o$YFQwd0ghI1bdr6*-h=r&73Df0{{mMec-nDOrd;F0xk}1j
zGs-quz!jZ0UQpIGxL1ZfyC})r3z_1g5!ebPtNLNy3yCsTx3bLj4!Bu!GfK!kl6}xC
z^WeuE7{AY~n=T1JK4>xWPD#z*DCt^uuB95-7L%YXetpchz+gfro4cPpYxfT5=;WDa
z1Z8*J+$lIKILPaKSl^FvD<Sc<z%B at c`zI3IQ4~8X$qc>l7_XFY#lR<75nI1wzU$0h
z8Hq6(4<9*A?u#b+;Il75{_RdUY#&TIcbv5SY-*By*xeAf!Cf7<-YpS&{0qP_YfC6c
z-eb#<Q0U>n|3zs-Xyk=l1fSL=aHE$cwemWho$zy&!FQ$&5jzet{;n!qQ~kkzt{CG#
zFU0t{A at hvqBUX5>$aM<xx)J+UC35hTM;jPijeva=w$&KebRfSx^CHPl?D-z@<~^Z?
zmkg}mnY}+j{`eR4iHxi|_J_n*g%{4Iu;&~EBQ_p67$6`2`&pbVRa}4kesZi_mFpDz
zZwBaT<q<&y2ZR_eU-$qYxo{jjDaJA-t at 9Dar~AGFz0zOO8mWiB`V!&Z!9FyGnVb5e
zZGR-ED@&GPE{RYacR{X6_md%~9>Gt=LDxE9@{2r=ImE=RjxxEXrmVei<o_1aO8A_n
z0N+7mwBU6_#&AWYs8e-z_$<A;DIHHKNGz>SPn;s at a*y at AQP}TSz^-*$8GY*=Vjr|w
zupY6dVUI;Dyg=1v5D*-*%%X=*Cx;E{4eU>Eu&wSxeC5j1bP43mO&1KX=Nh>N@)`Br
z<gi48`=$6EWy1YyW+E1F?7zeovj%f_j0<sJ59(4FNaBT;*t7z0atTPx3&F`gYiWTW
zuVt?fbXjmrgU2fmc0-zQD(sj>cpMqOYg?KJeeQFi at _rZV@XJBqVEc$af!cbZ=DsiM
z at cwbb>AB-*<oe3b_PGBX5hQb|Lf%*no(s&+^}M3jq`Zm<jihgiDly9jAIQ31$#~)Z
zVWXxUSiGzae^-l-*Qk~3Saqk5G2~GaXM(o%!nQ3-7-ugW%EsAv2RVbZ_LJBj5`Z~n
z@*u+wjeSA&Bjk_?$Zvh{f at kjy)U^@Z;oU at z@!Les-tGlIXR#gNFnNHoi2r69_6f4b
zDB8;d;Xf-op6ks~CXP7VFJJwc2d_A(8}_LDov=&Y!+pVl2NB<4bt;*>Tqns{xcW2r
z@*5+cLi_#{uYW>dTf;Ubz|MA|82*d`PMw#poWwoA{&}>l(;pl*(C0?)MB=(6QRQe%
zvzQ!+J^akK5pDXCU`hSXW9{g=?<60grbuQ3zw;pUU^|cNf4*|mNJ}EG0E1gI3_F%<
zHu1j>Hsqy~Sh``v!eFew2gi#9^LP;_5ADpsy!NTt$koFB>@yky-aq{UMP52|OBwtp
ze+JeQ7+BW6z`w`qrwDEEt6hr?{E+;ot%{TtxgMXV$JU)F{lLJ1UwIyIMX28i(theB
zFoHfTEp-%guorbDyv#4(k at 3Nc8~S1bH*^x-Z!>t92jKi5Hk6n5`Z=_S86VHsS>~IT
zuvLh0XIXW4)?1uH*iM9WJo__CjZis$olr?r(21cNtBt^_)(T2&Yq$p2l)w)huW!;M
zUA~+_T?(B-c&ss|vq<?XE5QSyEiSa1;uP*?qML&+?Q`_=zQE!IT6>PI2^`w_OBHU*
z{V!ODQx#Y0A!li1N>(p^hl~UL at Z>oyd|w6kRjk8h)?NIB4$Z)lj*_&fLx}Zxt<_YV
zX*W&QENHOj3}i(WJG9vQD(>g78kSn!<ugw5D-oL`=FV<2BDQ+6U4nei66AXpxxT<Y
zslR!k^yvK~tiwsxvL9C-zU7W8ln$NEVI5|diQQ-MJ6rCjwdacUz+N2Y-f=0|Qd at bD
zT+&Q%^~mFKbgvVf+KsR~OyD&F<91l0pew+ae8khX`ZM_W_VEi{v&*b;xg at R&vL5bZ
zRmc?I1#ndH`iV(|4+LYm2mZ8~u%E#`1Up_EmC{y2=8Ce&zu>Hgb$H$`*m{rB%W3hh
zq_`&JiP;w*w8It-OwM7{s{yk6T7qX!^RUL*n-e<inrWAiBVq#oD(3$h_)kBFe-C-0
zLj+8`RNpqpBaUD5=g1UauHcjmX_u6_flvSLq8he7?$U&f$Zd3sE~Jq~C40R(ETEjM
zwQvR2!3A(6BTu2d0ybR at 4f_Q6+sc^lx1m=`AqR7C7DapG8s6Q*<kQW=^%mPv*h8wh
z=SUtvtnYs8;U|#?S5d5A)g`PVZNPlU!#?sQ@@C+E)EjxX?G=z?jIi;XrT4*yHv+8s
z*O(KML<R3>s(N*n{X4OwUtJy*8C!A|azcG@`>pZthjgC(g4MwOF6O-*6Oyc<nRGRL
zI2P(8e1E4jdQyh^OS&{fga61`_1wf;<D<TE$jQ0~zWsK}ft4A(H}cZST*UR-GAnD2
z&$r+iQE6%eKSMo_{`Yf{Yg7qYR*iX_yP}+`FFDID1`g#QUYa|1!L4%FzKz at i4w+U~
zCF*sUEm at Fc&xQTIB_YKwyFD0%e9!h1SL)ysu31vnXT%s-*hLyGnQu=^#Xhz#Sb5|c
z?9bJh(}$B3 at cnDRqeJq^l5&`_EwOOdIi(@;uD))xy}OHbcx>KfuiZ-9$lRN^%en35
z1Hx-&yE$){4ZId)&N<r&{(~b0Ct4Nbv)7TB34V$-bn{f}?9G#`^I*@<63lciyjjXi
zz&s!^DDQ8cLeBoYxrCEy?b&k#Z at wql3T}yIIHz6_5#Q_IFpo)D*!%K+<A}`V0$>Rc
zBMcvwSwCGxVuXR0P+H~+RN$YRYOBmB<msp^%N(Z6NlcmlWXj~B%s(?_emYj>7fc+-
z|EDrdp>_q!Edl at gQ>Bne%lI;TMv|;Y?!{<vun*X~+A4r`JjA`~8cIRj3GsO(l>BkN
z_H8(VdCMlT#e+`R8h(!kC)B!ghzro~`}dNOmbPelvYhH{ZsT8dR81qFt at zyGFd~DS
zdHXOepmsBT7K^&aplsL!^02;H;3Yx1o&YU%pbd7EyhXr|Rq|Evr$1u4hM0B{VpB=H
zN-QlMUZ1FhJZB`nbx9V=Fq8AhanrdUbHfPSVjbT~S5UCOI3y0lQp3KnjJa0Ny^Guw
zGK_bev;714N}XKOOmd16dzTyj_t}hHZ70r)uUZTuC2J153}+?D$N3e>S-<c159F at W
z?Q+NG<iADuFNp(O`v^I6CJvJvp78Y(u6z@@PXBRT;)MPeOZaFBR~2bDInUSn*i7tN
z*gERQFalbKX~t3TH>!UUNbb_<;J&SyVaE4^W8a(N_3Qwfc!rcEr3kMQa=fU=nQGMI
zWUr|W^~S_ilDHXi^q-pLqB>kF32tZ<dE9>lrifjfpTJ&@*UIz84M%{beZ3%uTI2W_
zoF*CQXW&=8IJ&jtyIv&q<ET(CDca^k@}uO%K(=a?0B_c>&s)l=YK0#V*Pd_`P16GB
z-$mxkl@!QgZZfwL)@nYEyVqBVnDykit8P=mp9Wpv=hJmS$F%Km)G*%*@f~`NO*42J
zxRk8WO~|{vT%4Eq-C$-)ncJ8+1>Y$qUxyYLlx at uO0wA-Ffa~%R24i2I){%b-a_J*P
zjz at mAEZ{~K7oDPS%qT?vbZGv8m>S4+t97AD&t_bUIVc^iIhZ+6;~C0Zv|)GBgC40;
z9;e_{urvknQ;P-#DT{bwj)wHZpwFw<Q-7uuz+Erk{k&Jh`+3WxZ_0zQ#@A_>xZ9uK
zk at DV{CFP}X at S^ZaCOjD5ps!na{Ulz#KO}GQj6#e>*|K=MiufIe4e*B=`6+jsgbV#)
z<6uh(CJ(a8d?q*M?{vksuAv0@)m*@({+s*anBU`+6S<LLS0XYc5BwekgVLDaO2!De
zSx#c^AA-GnAMp1{<ehRrzm7rf2=8yd{PA1nsFuW*MND;M@~y<5N#xGQ_cAslCEJ8E
zjC^-`zx%~O&xwsZf^~3>v8VhVp-KjpZ#3AuJ}_U$qYT(9Ld*^=^1!}Cu8%5*jO1NS
zFlsY_;d&Y|)icPw*c%B3rVzTI(*gWGVpEAe_yDoV<lRO3Az*XJ4Xo37546+sC3E;i
zSa&MgxMUWupD!J*cy8+XN_=-i9xdnkUx1v+a{oup?D~bsnLnP;>?JXW at ZDdBPRAmC
zGhxMW9^{8u`07a=j`ftBs)9fBMw|(`kpJ#5*!x*GFi$SqD{JOK&IG;(GN?sTj#!6w
z at Sr{pER^MD4R|maED<>~Okcu3S&qFWJ)GTM1KVY}H^wCI1$GOwKfM5+nq0&nxnOTU
zOZwvq`Yl8PZl6ZT|L>4- at F6iG707F;>sdzDYl0zcV?YB{iku;v$aM~`cZslPbYo1$
zVT~?hxVWleUr=2rhu<wd48HBPz?^o=FEHG1Y}iG5gcbuw(~dZ2mTB`c+aX^oaFt{a
z0Cw<4vPWMdF?rrP&YNNzo#zS5Uh6|e8 at 8q{hKw3%FQhIbmRL*ovkp>k=J#>$;Jn$H
z-|Bnn0(`Q~V*Z<w$Jm7DerJn#l3bk0f3sOkMLQZ2CJp`+UB)w0Rn6kW)}Mq?8rXez
zI*!IkCF7!`4jTV^Br#=iJ^mMVP{XS^sCjm-H%`6lmon>11>AMK+cvD3DLYy!#G7}8
zM5|eq_6}auuhQ7K6U8maJ;?NXF2M@}XCII9eA$T%XJXmjM^1q|ttPj3n64r at TxY7f
zviWbKZ=Qf98UDhxPr%MxM0~L&li at QcrGRBe+iS6Yp6AFVdf1=M<Qm?MtHLDl?8|8L
zBV<qOC;{i#*Cg&H5c)aQp=^p%^%+xourH}rkGF3PuuvKz??Rs=9BPl)z`w+D$9?WT
zB*_u!rh{j~-nso!vJx?ojo6=hQSP{AdU{rXj>@(jVSG-$uqWJxt%CSxKEnN05 at S{}
znO%s_nv%&lC&_vDd=QDLx7rRf^SBVW#kz-koAW97lSm)#OI$^;J>D3IG%NI9 at KyXR
z-9}>K%`>gUPUSa%m<e5XGje-jJp|^Sw~%X7H1YattK(C0CN%@A>VVDTt#ELZWa8{G
z@$>Q95y!f;EA*?B1^TjOUyZt)Q<Ku+;>LCG<Xa|@c6+wt+?f-oN(A<dcY2gyOUOQG
z;yGJ0y&UWWiwC^9etO}GR&o~Gxs2^zL@)xJl5+<5Pr-Wy9Kb=WhuN at 6dL;2_Q%E1@
zi~D(blhf{EJfptPimpbx{;}c=RePZbvacC?p=Akd4tp!92D=76B2`;GayeG^wy}&8
zEwrJZ&YK)!<V*rC^>b2pVY7b=Fr02-^TgxAxQW;|33hKNvn+;{Zkx+8L;tM^Dk`|1
zx at +jzs_ogLw;CN=u=e7~oSUbtnfvgWsg0W3ORSs*ySNXSJ5ok`O7<^I-f8o^DQy*y
z0b{3E%+gWnt{2Jk;=0`@dn;J=Ph~-7>b!MI-PrVb(#WhVyLy()exUVpdj)tSkDwfG
zwD}#S$o-9#Rg3dh!!8`WA1z;PHf)_`wxg_@$FL81*TQ2&{^Oh=7}fx@{lMVY(YfGx
zQYVP*Sqf9`JG<6LX<D@?r=IkyUG1m_cA1L%v9E&J%e-a0)7#FfUxl30%y^YEIh^Nk
zYQROmCm;A5a2H4k_BMcPm(r%lowjPypHxYFinyJO2a$*JCV<2CHBK>g1Z%+nI|JrV
ziW~gcDdPPO6Ldaz2y$J9f?sqc);Gx~O7Mrsq3j-;x3aZc3C0r~*J{Y+ZxWjn=1MMj
z9APt$ta6lxJPLiSW2}zH{_9 at w@bMAjgY*9{R0*&Mu#<%@Ci5evc5N7JQz}UY at N>qQ
zsuib^v$G=P7rKJfAM^WNhBFCg0M$YEM27E)tRaOLdkmd(H{yU`M@$>e&xCFLsX)=l
zaw^4n({m*+CM9Sv1n-M{zY&MzUS;XkR~N&UiuqpYJck_E%lRq5$rh4+qqotE=^CmG
z{gX{2PBQN$oY%;2{8k|LnsUU;r{n};ol6meRZ8Twu{KsZZ>ldLzN-`EFkCdSUv&6M
zk&kv48*$vI+ac=BT;P*|AFe{&@MkDzk7PDGlb#cK5#utx>lef>=&`>oLYw3%imnIh
z&5Mod%f%!f8W<8H8#!JFFH;tkf<8-x&%ujPpJ%_paufN3oSPUs=hzr2x!(NV<G~ly
z<IZN)__Dw$H0XK<bCB>~zurHPH at OIyfylq1t@4&l><=&oan9FZ2PM}NaQ&q}u1m>v
z_`PGmv+98?_YX-%|5E(l$&%2%=&uszYk`N8ruUeMtcCOXNX at rJr|A|F=k;_U>oC=k
zbnLs&2LBb6oh-egl*BzP!*5qvPO5|Fg#W at jmun&Ks#+dn?`%n6zk+8WK9tx5B7!hK
zK9$73Z;5$gZQP14?a1j3UhhNT6sXzjq7A9dxyvy=?W?xa+ulFnSTh5Dy0y{ZXCU%J
zG1i$n!D^T1&3XHPC^O?JN!B-FRxSM8ts6RFH~I(tSL)N48JK&q)aL>Bs3Ni^dU8m;
zgG!MLrigY^JH%DMLl`%7ILfIVXhTl2v=?odQ9^VcMrNP5Qp4-}>VLN5&nId2GUW9v
zRLX(ZVfLeb6S$icbk^?9iV*A-S%_H(Pi>5r^(y7h+6=qWh5Mge3(WBEdq2d!;@4xO
zi-yy1A8abnae-lh?v at w*uuUbD3=E{M<fdleqxGXCMu*wM%CUzX{9_LjF?-m)q^$42
zhHw9C(!m~COo?PLT9gc(9{XG$_M5uN1=!=dZe?P=`?|$VgvYuLc=`%{jiWN|Yd1J6
zccr7>>QJ}+CyKpxyS+QW5v=C-kog4s#RHOC$M-vu8_DIu=P$Tj3}-92Sy+Q4Pas~s
z(7msfDSa1nZ@@0xw)%3{uZSh+5epKpmn;z89j?Wg4JXSuX8Vbl6KQwiQ!+Qe7Wax{
z&Ab at wF`oGJEyw71=$!4{N>&x;9{Q=ZK==O7BsMYT3FKrNu{*v#Sag$C+ON_%!p>nS
zY)IJ{!|Wy2z5<fxsXG^Ws+!!|=|<!@Bx7sk$$PUjz_*k|s~ZCv13&ZEQVqAF)FV87
zlnQHH%4_JYE{RyO-hBu*)Z=y|eLN(OCx2bayL}FOW10oJ#z2mKb>poX at Z5m^iDN`g
zqf-6|=CYLbd;d2_5V+iq+q>wTNI%T;HstKp=cR{z?9BxL8J5IVGMu`Qd%&5CoU0e{
zx{mfws(@X-89udB?=tyIl#AZerURpJ&GMI2l_deWf)0q3kLv_JiMq at 6kXPTe#E$*8
zLom+!+qL@^E`CFfq6sGjk9mLV9<W4v?;9U4nBe`*@tkF$_qTDw0*?2$-cKygjs5p)
z!L+geYAp-K{yRf33%?=fQJ0w5JTM3Lz-~KF@(Fa1N!&MGmtaE)8hf7-EM~q>=PT(}
z%+Vlse|{C-r?@?MKWduJw?@nDCAsCm3cdk9<PN-c;*1ExE0o~psMNDn1WOEDPaeO)
zR?h!?rFpr6*5kRS(mG5|#6 at PN-3ypwhfl4$%%n{zf^Q0#C6bfTZa=Q|y=J;dIR5t<
z#pUq5!H500#_qy7N|mGq$^4A=!se<7Ro4ynVSJYQHQ4X at 3GHU7JM6Sc#oaL)LaucS
zS(OorToHFi@@43TZxR~_W$yZ!<X5A1`{meSH!aS&S-tvE=aKDYC<pn#wwL%dQA%7>
zYKU+2<&Z`V#Xd=R(_r)71Kseh#u!NKkxsl9jx3|^v3_BzsMGde>*cEz&8APwo2$Ar
zY2Bw`env`(eg9T-b at xS<uKP4ixU)!Hao*akt7SW1CUOAw%ssbmMCXrWEqhwFMt!5$
z`uv~zjwW}CHiGvfWyxlDc~DN-K(a!pReLyAa1b9#IwEqb8#&4)u+c=zoiuV=A=Z!C
z=g(0otU9VcU!OLTADq^Ze={O5DXTjZT$IwJ{N9qV#xolb8<Z}BuM)X2tv*#kD+m6P
zk-tQG2uC*JgQTOgNzTfd`*H7 at TLNIcw?^fX_~eA7Zi%B_IFoZ|Ch}K|?z<(3^z>CG
zD+V%@Tl^IKl+_<1cBvA4*%KrF1e-w+$pJbV94DTYP9YvMblal$($izE#Wjr1jm&*e
z4x8LN;j)CoJwXq&z%XclVTk`vyn_q+t*e|%UPZ3*(|D2hhc9(eO9gU`CiUFIdHrQV
zdC$3o$eyq8`2z9rv*Nq=B>knQgnT#I$vCrB`5Aj_;Y0n>nY!R9=aC2w(E}6Bh$Awu
z->+$QTWMWy4qb;eGDoC*;#lIjXdU#r2I?zOd9q at 3A#~vfzR*EmSpNXNdCeh?e6%jI
zIk!BVGrBPR0G?HLzfP@`n7H~|eQHJQ=MmFK>(t=UUqWo=2k_jlZuLd0gyrzNl}AjM
z);!<ItGrp at dIC1<^}y6`T~g%Uk9gk<?2&6fP-+_S{${s~^#b1C048jWUFNq8^VWp-
z<-J*~o8C4BRM;;f|J=lfZSt$IvyscLWOO0cP<Xd=)<WtatD<|CV-(yQ?<P0h*Dvir
zuE$cBCM^ZFzc*TRz%h~7whWY6j`ycEVt-(tU~iuT{dBgAhFm7yW-rr6Oh5h{r9QqL
zdVX#o&8p}*0R6WF?`q`7D<rw`kf&S5GIpC;;>e9<(cV7xYo=(wI!b~%-i3eo1N5WJ
zzZUrcb&PD^4nMja{)HZ33}mBq at XcuX@`v}JuXE7XQq3Xs!LJbqo%yLn51xsb?s#BV
z`x_F~sQ=G?pV<czGVQ~t>p4p?*6-NZB2Q`;nV)2iJHx0>+u*0b{PcbcyP4>IxHmtc
zYv_X`_iJE7v!uNV-Ex0h4Qy$RT<0(0+#ot at zQ#{Py-w>_Kf2N!Tlz~lY0rFc>vUho
zy#=GssKp{>YLn*K<R;DB at abnOx%%A92+o6r!UP7##F?2pT9;Zhx{$5LI2^!S$YklB
zZ*+rKDgX8o1yA>mWOU)P2fo%4%zlI-?Y*9gTs_vyC2AV-Sl$>laI!}$!xgMSs*We?
zm0~?tcm2xU0Dh3;lFGzYWY74$e#s1X)qM4Db>H~Y_1~n?wcorz*Wv8?ntGXz2tUBn
z at mfzSg$w;EBh(M-*}A0gUg=;}G(Ty2?|Y-QOR#Rk)whJvO^(B_bp5{I*;&6tgwOPj
zcen;~$oh-v*|OiOqxWJ@`9wPU+|$3!pFiV4IQIm`%lM!MIUuv<m;6 at sTxs8$2=xk?
zA<gmn>JpyL)_Qtrg!+CRY%xoLxmnEKl at K|1Ba^S<vR#)yUU}o*DiZ7Adj at tN8Dzw%
z^p7M@;e6na=JnDU>J+RwaELC=v}uvcuclcJnIFG-^BPJ7$jQB(#9eVON-{oBvcSN;
zJbiBZidQ#X^Y%AvI5)tfa|$^RR>0rlA3l}dnAVm51!UTz{XTqu?j8P3>`~4yq^o5y
zh(&$<gtt$9&+$~LQl8TT*?_TQ%y$@WK2=I{@2r?(*ioRHS)iGmaE8~`Tf`If=EAl$
zpQrE5wN-|-#^7^-{=IzK6t1GbqMoKFpzRvYClWnd4FBI&Uf&l|=SyRI{%2}!uF;E`
z1vX$0(J!28#Q4D%FUg4X+{%c4pUhjioXlH}hT(xQbbmpA at oAymNMu{~-j)i^yUae{
znl=UhmC_k$oemd2CI5Pw#o7A2)m;W|vXjXr8eQb%{8o;!p77zx?S*tB=KUOdX8!nY
z7waF~Go{q3_X3XC_apZ*t}$n!6 at InLWWGC(BzCY26!3LDr7gFyF6!(CR;^l*Z!8wm
z`sXk6uHKZ~%2s=tj;a^a4dC^h$Gz>?2wQ;h><~+bT$1tghVylNWxhKtHvh}l7r{T6
zf_$`Q9 at n0eu+v_+GNY-~(XwGm(#Jgoe!2E$i6OPaGk5j1Txa5=nt`y>0hM;C>sQLk
zs$}*V<b~}~lRbvcDo(jsZ7=jko-%*njYQaQMb+vsRzqa1t%xcc@(Zj4zJvJkZ_ at GI
z2Wjn#O)f>EVp<)g>Z_-P!|6+RA;#Y|ynfYt1NtbbM0XbVta^XLJJeR}Q>uZA=+Y7n
z%CF@&+(AAMI)Yl at yc<|3$tb=j*M*!EZ(Oy- at jBw?_aU~doX)4U+kz+!Rd{zZr-^le
zBI~q>f0f!Q%1B8qnG~5jV2D1z(ojW`9JT7Pj$k`!$I!P_6v~v5dwE*>a>zN;Q0`m@
z4_qKZj9q4O3S!eu<c!9AIEl65u;qSW)eKK>a{1C8f09G`(B7Nqk0w`0<VMIlxfm}6
ziPL9Ua8^{j_9RdH`*O&@Mf5h<ob<$>x+;{1d=rjJW)8h3$xz>TPFL^-oxXI9`*z4l
z`sv7a+l|yz{AYW at +jhAmL*k^<*|knJVot$-;R)bmz_u*#_H9^_-vvrV+PVF-T_M_*
zlEjme=be2(Ye}CcmkeY?=c5jNk{r^P!QJ3Ant^yYw40NYyAd2FtH=8IN2ZU-?=tfH
zt!+_n6T2wNi!TWzIlOVbfVxK4MxGrqQ&VPPUX1Z1oz(1w4faFGG#_6QP6Nh|Rn(*A
zpYDKtql at rGdSxuw>3G+7V@=Q7HL`r(urnqNc`wt`R~mY6_+7RS0B2+^rHW(TsgA5I
zp^!6PjBy1H)^jIr51kQpK&f7u(x-j(xst$cjP+7$ALJx5m&pI<JnFKahEh3yOS6)>
zQ!;6(+?^XDL|aO!FGIIE-t^u>pNTx1p9TDK7W~lt)DXGfVNuUzHSm>^{9p%tmYOVi
z1o?^Yaz3WMq>50^n!aShSxs!oSKv?j{#df&oRZi(pl|FNX(hH|@X*}hp7FETUoRU_
zPoNvH9x8jYS%}jQu-GNey=uhwr8bqkpKRv6{kyVc>(X^@vpVNFD_JYSR=SFL?hJYY
z#@)b-`{vb?L$?w=$Ok;c&+iwNFVLwkN(sM3HS~F1cROndl~QWsH at Y&Zj-e{am-Kr4
z7ku#W-F8Vt!M%P``*=T>eIoik7W4aUU>C+i9-nwizhB14`)<hEI{U=73dVnwi1Yh#
zM~=rQXe;=%wnYoTt>dsAEmF~l)6oo1&h#_)3 at 05spG*E at tL@IAUx4kgQmqV7CYCsi
zXrDDvfiix|6|i?5*JCYK(%|`^Yv9{Z?Agm{A?tB)b5xF>mYN7IKz(a1cr2D|xHPDZ
zE-G+>E4(uK&7VGsBK9CvfipM-IjUu at FE?1P9EQI6!ZbCj8Md}ZlNG$ED<WPL){bGr
z)%>jB6yTehurA7gAH+TnF8xY^MVwntXQ2ES5;_J1Q7XmkRiPJ7V&7iE{h9RHodIgd
z&qYn-|4eN|-yCp#2^)~p`y2guWP6+O>^(Y$T`1nj-Z_m+jb};M?fS2=Fnj~dB^^V2
z3CKZ7Y#>?u6ySlCcW#06DwJAOvgYA93V)rLN_`|Ts8#fC*w_CU&$5aQBMg at t_~+Et
z$4vdEyy^T#jWsee+LEmF)VUQR*qM0dt0gg?tzAfBXEatdaEysk*e~+nGv6OumN6sd
zL|nt*sVL!!EGj3gG0uIi4l+D57VJXYqv4sMlQa2<9&*~jwhX(M<R<tBr~7^vTR&Dt
zc~lo{(^tc?<J at OUZXPht_lO3&B89H+ at cCK(9$OXOV<NXBr^NyD3z6GJ6{}Jt8J at Pm
z4z+65lvTfiuOvUr5EqnxCRyfsLR~0_oOi1#x-2D?YH(Mm3+V>vY|p$k>_|en9dS+Y
zBQ$AlL-x)}#u<wFJ{g=KIZ=r?r#kZcsG at w){2*r<wHrAR$+N&+ at kc$aE5=j#Oj|#P
z{AN%q>#d=a@<pq{VkH^V&i=1 at CL-=D&doDYSu5M at H%cZiS)X1(fxB!TIPkXD<Y!Vv
z5A+|L%XdBZ<Zr?DaJmom{F!r=UrDKKMiN62`tQ+lv^yh0<xERPK5N3cs7|6A)Kfxq
zYQd9+r~*lb7<G@%!u}f4ad<=L?c327o_0tHeuf6OC=vL>P`d39oyjU!$IuPzO~|jE
zHNac-tQ)dn?y^<yIX;yX(v_UDmS*b2{c^}%z+_<^=Z`ESey`+pSPuy!M&$pVyWmg1
zgg!U9d1kokzHxrx?}lf=SAhDy1RhiDOPE{OC(0_epLtHz)d$YCx$}l0iwx8Hv?uE>
ze-dg+{<u=&gZuwM?M|vgT)b{~<;e2AhC~^3F8TWX{4D!HQ=z+2M060$KZ)*>>%3_A
zG_c3Iz5 at omlDZ%nNPMqWM!kr=v4B60+Dcuu7nP)K06%%^o|3dr!fq{#&K|l&`mm^f
zR~qD)2mB at pVtu^-3EXRVW8N;#IC~M!G}XxR4ZsebN&mht`Y`-R4)~GsT6Bpb+fnZO
zkaIMyFQNZE)T^}AMZZZD^eW2XJOZrRmqhm)x1p`7Ig+Jk%cx4b!u14uRY70c?{%{0
zJ$=G|zEjY;K~pzbt*X~8?d<#flT9a at k?SDqV?)hF_#M+j703spzV+uQDNp+m&T4hx
zlVr|TN2v^Nq<Jtd+a1fWx9gB|B^$UO8Ei3^VT=2i+X^1*1$ey{b7tM!u-izIb(i+X
zr*n3XeYVA~Uw8 at Em%&EdO*pS5`rVoe6XHZ}lXqg at L9E50vi^yE{FKJIn at QehadXCp
zLAu%C5i-dXUt92A!+kS8ot*&;@phDP`i_Zv!xD~MU=7fROGQe5|C<LDxx|J{I3a>h
zV@=D!U!=~P%<Uq!=a?Ddb;Nd<7v8@#WjeQuuI^{0_~N|^FB7+ms-!e77i9Pvd^VEL
zd|*;+PTFiMq%HmKya^jdh(CrinNs2fc5*5kzQpL5j<o at JJ%QImNhNT2nZaUUw2qMf
zvdp&GEQ`%Wn>U;*$l5N~%RkcU3sHxczVT%l at T#!+vP8DUta`j^@j8UM2CW^BvV8D*
zB<9hz<6`6X?j*jZMekL{pkD?p{~|t1!RzSTD)jRLOVs~E*SE(-RjvJ}CMJ_(ig+7M
z5s4B#&49$|Vy8&z5E2m*9(FJVc{)KJQzOsG>^Ka=;A~+tSHxj}xdC#O%b<dILoFRI
zAu<Xh!wd*iMumW+cKLnR9<0v$zP~@_vuF0~%i3$N^{nUeeZCK#zeue1n3KHFz3*B;
z{Yv+~nI9+5ckk;wTmL8bzR3g0kGl7DoTz`?y^mX&yvV)JX0Km?edy1rUnS3W at 9P??
zU+zBcp$3u*0RAn5P0H32$9*4~%+?)8TdsZ2)*UDN&aidIv9Bkb_1_r;dg6a%l7#1s
z7267pBv<RA6}*7>RBVbh_~QMZ#perrtf=F4anpLk<JK|y0zQ|w&gY$^+VQ!Jj{~0`
zd^+*DhEF#>*D>yXMlGs2A^Z20;QKIQ;i(wUxA6ToKI0*0_n8qxL?3S05C8pH>;C_R
z;hJqBenz6V>_SbEle}Wr2rw}6&Rn|5H&E6~wmnW-FUtEwAG^hw4?Lq8xCpT#=@n1t
zR#GaPdP=xGA~Qw>PVwy#^*yb+pf|2U_teD2^=uby6sGkS3%59TL_H|lh}_gs=)8KZ
zW=e^F8f>gI_P$Q)V_Bxh74V1cLyRMLfd{2_(4F3#rXD|zUNr9${rX{O4*Z!f_ at 0Z9
zB7T1h_Zhj=x*(HM>w;qP*n1(DO7y<af_v49k~h6U{CdvSQLyEE#N_``zfEsoERE4G
z#gEhP#Mj#TcyebIbam5NAKI{K+juCrbDMgCaX%^U*G3zCk3`gst5H{QJ2(su{BR_u
zLl*@6T|mnKt(R_OUO0<9LC6V%umksO6Bln%PDgt-Ar4y<#9tQyU&dI~Cd5mDaY~N2
z(J#kaLSqjV>WndIvC+cqB5>7_w#t>FX`krh<iJ8%kmsM~dZuVs#4gk(f}Yzp2)t(%
zmjQOFpw;4Wt)hevj6+u@%l%a+j0T=nJtGHLT;%Q}_B at G}C{o&g^lEm95ocQC=4@#H
zfyW?cYB%iGESChn-h(V}gf!IP(}8Q%ks5=r>Gf{Th(KCg3~cOSVT at xx;gWbdkN6`|
z-|!&pF$wcF>d2RH(#iGQ=fJ;MM>r;cYp6zhVtO<*_$Q~!NG{--*YSMOc*lr)QQPTc
z=)_AG7lA|LX>sya58F^o-GVy%Q{$7#_p|++NyHxw8|#QSu-}KvV0$T%iw*tNU**^E
z&6az<3+2o%MN;vk08(FC9kLVoFh=1)<io0LcYtr}Be^sK-{SW{#C0x$i($^Vm|9Qz
z6uKCW at s_)^sNME0o3Ehee}<d{=xDY(0V?q4s^PO(Vg>f at cfLt?jyU2Y&>yGIM@?4L
zZ6I-Gg*to(<_p<wWVb2uwu#^Gxod$DoPrwhrg0-P$}uliK-bM~*$GaY82>rLRsM5?
zw<yKMQe4;YIiAr6F(rSMyNwF<ym^0U7i!Kild0ETbBolAl3scaHUGpzH-a>T&xZOT
z-rOFGYcA%oztPWZn;t#JBR)Hmq#PV`CD>;a#=@7QlqRoG70d?CYKiFQCBOue8b{17
z+{;M%3V6ML{PDhHO4U>3S$)UQ|KrRu`)b<o>3P}7_&M|oapO~rlq#sWR0ngaoA)<i
zEX7}*ax*n3dsMFdlDAAaCid&gl^Xg!pJrJ8WzgtVowQX{#fzt8uoWHBWJOBI^Wfuo
z)qlG?{)T5<_Oy3jOZzE~am at H$+0#$;9bPDo$n7a8I1 at 8^vEtJU1wVgufzxVAiTL5A
zS&s5gFF;S<Xu4}3{U~91ujy{w9LGy|o at LOHmic#pgW at ClZ7MJL$neuNFh`>wBL8&t
z at S5N&!_Nhu8h(B}$!8zt+Sp9k40Px}e*&LsVQB2XLol9;!38QhdNYp?OmHk at sQ;1@
zN=2}Rz?CQoclJvyz?D3XxOS*N@=&SR;ek|@>s#bmI^cu<K=3CHFlo*gVCP>?y;5X^
z at 1h*|+<b5?EaiIwD~24Llo!W+{_EVl|2~&rOt5X>^8)S&=UVQcn|g%-zh%=r|GD52
z4GS(vNT7Z4JH%~~x|vS9IQpAzrBp1+UJ@(t#8|olyh0js#N%WlkL%wK21%JdZH8|(
zaybvq0<SMsbgqIwnYFX^!hr?p_IVD(Uu*+DdE?0hkD_xqgZrDaQ}P>`Hu{RE;XmWb
z51!TZfw#1D7dcL-7*9qG`GM`*#p#Q6Q_x3}<W at Cp#5<+P|IkyDiLU8!k`cp4U+HmN
zb~2UJv6(#jCxMSRgAS%&?aAdB6D?nz475;N<JHt<YSZ)#N?mg;?#cpevmQ at Yxn7|x
z^}hT^T-{V*Fya!xlYbInYE at IUU1|#XZQ>l^RhyH&Ujcjv7R-}0`g785cCP$7vzHRP
z=88IIl*EndKA}ICDW)Wk)c0KBWK((3y<LUJD?}YL%fUbN>MYEcE+uM^qMn+di|)&B
zq}xynAsK$5n~32y2)e>+seyuYyPCd>F at SuR)N*adf)e~*DDZH-4^DH_a)YfG&pp{6
zT&D1=rK5lMBqS8{f>XMN8V^_W49rxbey^fiNogpRFo;SawM3T0^xw=*fseV&x1Bb^
z*Zu13-`moUwrtG*fzyV2?x7#^l-a+eOHg}UCU}v0$G*yGv at 1C!z$e^Yu0V|yCDSTc
zZtLwiKpSUSW}57T^FI at Hyv0MigR)`w<qH+moZ}`&vZrvNgxSR{S|YOdI4U5g%MkNN
zjj<V~OPQRnF6Gij+*gvni{tJC6_bVdH0gt at _5s^3h_~KFtmRSd)zosqXNcddib_{1
zP%BDrC=n`0)$m7<HQlgAM4t?*an1E at po>YLcQ$a&i at Il)`4(B5eA6jomxbv~d&D6U
zbx+ at gF~aOr>3~PKntcl<{+s1E$f!7auT8EY>Ponn0`8v5Bk~V5pL3b7$$P>3`%Kg^
z{Z+KBo*Dp-Obi|&Z`jtSQ_I((ZV#!gr99-k!T%oqC2wHuQBzG2L5 at RyeF1X8o4~~>
zm+b$IqoO1Dd_qFh<Sw%;BY&!Io7NmqZf~O>rP4Sh)CJead=;l8{xIiue9NerymRti
zfZ=|N?RPodK-J^A!1WS7%`fd_92whs8aUa6&qAb|B)&hkfQ1luwNz}IughBYUeCeR
zZ$HBrwq<~0PBl{3V?w>Rst3}0OgOJ<=25!AGhH}l-p(a$MvXpdG+Z7tK)W`iU_3Pe
zr=Ep-6-Dps)Zv<lHKvIi#o)Cc%Fm?Rgi7EQ#Lx>oga+GbaFn9{w0|seM<W~yz#o at R
z1v7?Cs+QvI*<`Fn_kx?|o1Vsz#vV1DjaY8o8hJ0q2e*cn$kKQ2l^WCbI!x^Me0<Nx
zdpQ_>fPF72^rbku>2fZUF)>zlQ3DaV7v-E*`x6|a{Q{@Gt2W|<Ru^&Nnw*SPyqEk4
z*BRpX3m$KcZ<8g(ua+&1zfJldzM7AtC!;N%J(;*ieYnLwK&8jS_r3GDRGfAkxD(u~
zZQ@?2W30&UotNoxHbU^Znsb|ag1jrvK>UG-A9%niZ;(gi^~%|IRinMS5B{=9PitPY
zQ5H?V3M^NtU0Y}D=VhlL4<x;Z&#8P*MOQ{IDa_P{@E~u0*oVA}#!flCtW!i^k5eru
zp}gyjf)DF`=}ehHE1zcoZ~vs27RKpumGH-*-*0i+5Nm#QhpD9oAK(lYlv1c$fSd~S
zab+*^$rMyv`0<E=s&{s_O?TPv%{*Zj%kM>YN1t;j3aUiio+T7=^n~6~C%eqyyIvaL
zh|zbwF*)INajNjT2$lR^+LxgT+aD%tU6t$8Syjtk;JM~P_O)UjD2Y#l(o9!UH{)XB
zAM7(Dw^|x+fnPrdezAJj5WgWpc~8gbML!uP#<U^+0NzKlTaIBo|6P0aN%T`yem;ED
z`L~}mzTjnALVSYT&y6RIDVb5=ohpTG1Q*YAu-~iL?{?yg!aloTGvVbc2dCqVdT?HB
z?XSpAfgkpPo({~}?im$v4be at PJ|Js9Y|{j{ezp8lYd!ERxmMuNdL$V8*`8(CHpCtr
z$_$b-GBU2*y4L8&ydw7)Xjd at 1$bNpGE0X-juGz1HlgpB|Y~%d8mHyt*21&tCV^D#+
zwk2wb16Pxk;>P`qJ8w`Q{u1Bdx&R%!#AhG;{C@=p=yj~U(wUd-na%*n#tN*#waAf(
zfsC%@9>DtkXXN=jEhWBzblAHy1GfMV at t!jeIHsN49W3VY;W6bSufX36KM9%Bz|Zdr
zsR|1v*JZ@~i^B%~UR>wd)+1wL9GC4W1GjW3jyDPAj*=vAhbi{=b879)(M>(+gs;z&
z{8t|f9#O8A{6<YnU;*NOJJx+~U_hsdbc<>|PC~!g7aH4A6H)go*30-x!Zp#Wr`6+Q
zij-G>P4>of at T2R_%ZDUEO=wRL_+$bZUq3H=e;%>eT%ODRyrU$F<Xk;Z_C+Y#^S*dJ
zT!ppwfb*s(dr=kc^&;%V{iwS*M80Et3)`2urLh08kNoB~JM+-iCgi_?Gao!KOH2FC
z%4pLjS%f&sz-yt9tCo6orpR7Kxw<gMUjLD-NnBvtJ*&AI-1j->O<ePpiF=SOxyRbG
z at I&)ck<(ZXpKBa=pzZ=E34R&DPtL7^t-v~~=yd*@jFHs)Rctaf4`!9O^NW|%qPD>V
zmqtS+H<u{|7CHWlcW|GGP{SL?Cf?1{$V1H~^&~mdaj)s%Uu3_t`G(Ju=keS>@$TGt
zBJBHhj~D2E=c44U$1Y*qfZNPK#)vS_IfEUa>s=RkI$^C{ajw)l#+l0Mtod#Z^7sy!
zm^_2FIG`Ns%0Z8_t>r>xgz`V~s9t*-<YXFR^3ts3?>3Rxe8E1uH>Zeyk6n|7?W-c3
z_aNg)&Wm9A^jY?Mh><GmS0^{&Sy4}f<OsoDPv`G&l<{jq6TY6ra@}H{;Mx0}0c#|^
z_j(#J=UO}~_{Xb^k at Y$Qk70_rQuP6h>!#oKAzn%$4+eSs%aDUFyOz%A at toNtp64^!
zQANIU^Cbf$#|7v3qE_C6kyB4ZUc$Bc#jQtTw-3F{a!6l^iCup<r~|b!qu*1%Xc$z_
zENLs^>APwj)mDwC6m#xto+4{`QcwL1)cRSSoXF94DRmh<r8AGb3vwSpYqY0CiN4rt
zOXtdgQ!28F!K?pI_$ICVFjp84b$Q+I-h5aHdy)Sp;#PPcf(7HDh(Dt~2G*HpFlMrd
zECC-`M0DMCadcp3u4LDm#=Zmm|70ysmcoxW at 1E}p;E!NOWV8LLW6b<#7(MEZ!q<;D
z?|RsQDYucc;&<bt*C9uDU1-6Wc at +4GyTJ8+D!Al&5<1$#<qGEwVnaZ_t|R&a(et|`
zr0;=$({Mh;yMW&YHVm;d%%kgIV}SDrIR|&?(1|f&Av(t#rF%TUhDm01u`_O6jO6hV
z9UDH<29ab&GwkqejMIY)<q`?<g^=S#-aliyq at f#xu{mOH0p^Z>Ft~1+B=F8|O0<ym
z3w at M1p*M+O_wa4~|5rb=`u(_jyaM~-m8#-2QsCS8E)VnQ)nHSi$raJB%*jnvIlcOC
z=E$8IYdSv_`wfVxA{Rcf${B$CTGUAKG{uUCijf=YOKUhw5hE%Sw!7woKf;ba2~E7B
zD*=y3Y|csa!`9Xk<W*ndUUfwPKh#1Mz>bLp|BMp-_;z#?@9&hr-cQX!?o0)BG&C0d
z+>5#A1^&(bJdv)ErwmuN7fO%!8*_4<a;t%~3HPv}ooe`{f!)s82Ys{LOW{;v-T70#
z<m&!~2|}aY()wP$YRZ1_`o?C*>kM82jx5O5%l0n#a)JsI!jrx>2j-osB=3#7h4-HW
zuJFC0zY`v;=;+}{E_e$!cumYjxwD18mqGp$=Ov!fHM#?}4in8b at uC7h)A6l%4msu=
zax?hPIQh87V)hy<kn3V0YZPK>E+PZiwTZ1u488pTWRih05IKlX2fN0Iu!iPg4joV=
z>81$|WcemnfxAOjztDZWaX;CfRntxE7$j at a$2hlZVtX3fE#T$;|HxdOdNe_p=K7vi
zKbVNR at K3zE$n~614$fW$=3bt&hWMQLJDkc5-VL+f^=X**t}kQaKjX6Ee^xG23Q~74
zG=BSO#z at sU-{~pAGq`Q*be2EuGHj at JSvrx07+WL#bWXL;iDtdvaPW~ta7Du2&Ov{E
zBWMP9_B6IH9>jZ|5uj`_3l=f0LevAhd?luC1E=<Y;F#@3>Se}7$!yNe<q>r|bosJv
z-?!+JrOjU{k`x_?F*4w4X$e1o=fA?MrF!c3#EOQnX7?5gQn2p?TT{X*nh|SCMGf?w
zlfjYK+U(jfm#*-DkI6p<zMPnG)M&du7d%_~wK>&x5e*KFKX>AL33Y at S6dVR$P_tSK
zow{7q&o$GU(bs^Dd)@vqrMJ(+b4i&Sf+vCLdM)}g^xiH9gZ*D)e?HmIgnBVpt9j6E
zRl4scXIwlm)|XSy4A4pRz-X^@0Nf2E&pJ(4$peNyYd!MuQP&e|-~ifTTv+I5O3VN^
zc`T{N4Bu)^bUCkzohy^rxpEBSnyY(^%#~RpjD0o6zB*(-Zy)041$TTENpEp6UiOgx
z!S at 65wX?;-k8r=`uDi2!kxf>j`!5Kun^t(Piji>AXXm>%khzjmsWWK%Ifo|JK(9ef
zcu=e|?v1P8;kj>x=<_`!Wzvn)IxzQ7ss}kgVZ3=o%3IB(|9q9`i{lOpt>Ii&sOHS~
zvOD6QP({}{-b6p7>AqdKUN^9C1-TE?sz}-}ye`(UkiSUMh_xyYb5mjOD%z=i at M?u3
zDP{Z91-%5r#m-NxtB0wd{y0A!yD*j*GRB1M(sGZh=qvER3_Z`3CQqp+^0Soi^kdHI
z$($*&fD>XgG~wP1M>UBB`u*8aE=<GR-G;e~9Jq;jn;fU&xa=;>|Mlo6Ct0KY8WJUb
zqlp>F-B|7tEZ;XFV`<$EvKEkagu5L+le~MrtR7QI=6SPIk at 5`1PmMM>GKWk-sGWB$
z`<^ise3XybP^<f3v>`t~x_qw|I*r&-4Q>=1Kem9YAioKpFli4%@cgjtr`O~CJ<JEc
zPp8IR)7(extik*Tmn4xl<4eJJ2^nKOa!<l}0T`Dmk>sO;tb8DOmLIcumajn91GmF;
zlTZm9D)J76koi>`;A4<N232FdLX06%O(zTPTE9jPkEitS4;_e1()|m5Zhet#beUf~
zPhnpZmS>j_uLM53x9c!ln|!V|19fC9&|6!cOUL#V=pm+e)PED3YaOUXKi&O(2(=Gd
zuvS|*Yw!PG+U_vj|KA`N at 6t-NYWyDvo1lp=1lIk*e3 at UU4wf$`5HgVu9jrBA4!DQL
zWZ- at p9U{ILL6 at vQUqH9PAH~>rai;B50n>05x<+~ALTg^u6C0sJH_uSM+jD?p*{G$A
z at s+u&U-QZTyL98s7h=~#pH>llnh&2X_;U(KtQIzFU3eokz)?^ivOXO??D$f!qXM at s
zY1Nvg9)hs&%$QpA#WdwLyIPik`e00qimJCyl^SE}7#Fc65o^3J1DAAKIOl<%nZ{&r
z^x)eEZ_yOJZ_iLgkQVRL0=z`7^(fv=x^Ft_c^rkGKs<6lq<-!Oco+5sDWc2IYewWE
z^-9JUd}{??Mwjm)*zK?J;hoU?X4;&-M;u4#0nQ5k at e^h`le1LVZgcXFOHJS&x#4kj
zeDW-vbDZq&Y~<u`NU=FFXOu}Lz%`Y*a)667fRDh6F-EwgPDB6wf_EFblc_Ej#}}ez
zCu*{TkKh;JP3~An-RC-*$=Grf0)H|G`{#|MztdK)L|%jzyvG(?>tJUl=Pa&u(KoYJ
zo@^5DvNwV={V<OG1?QBB3FpRH|6qLo3HyE(8A+{idrQ{x4Joy`6UTS4$Nz+5_Or)Z
zC)(<Z>n`PGux%W`b=}9!`RzDg)B!2Cf5`gsPR2LLoMcXVDUlb~!3jm(zF}c7{ffXR
z%5Xkb$$@{TL1clC at uPxx*2kC>Qu7Jws&vaqEpm<vzK>e_6QnK;n~&r6Nga&Pd at RpO
z&|aMjI~!}Z7+hmVPDx-hx1)df$mdU3qiI+jn9JxfZ at F9zPhfu<^DrX1Tv8ZO+Fan$
z;kXo`YQZG?&-F8U2B5nSd6o%+!4-D%ww}LZJQVsNn- at d)>@golHh9-D!m;V;_Iu`3
zVFThW)pdKwSc)|d$$~mi*X1fuZBMu!a&y@)C?7u<{iEp8iNkgYY&^-#Cg?<r at QOJA
zF|z!)dPmJHEplc)20pkDbMg at 5N?SA?*Oca<zE?hu`2yU)b<o*QEfgUS?@-l<SVA|Y
zokC3_T*s$-;yMRNJI0qCgPbMy5!(6l|F at kc*r})8?R<Usemey#+rNM3TCMs7au3l?
za5NylhS_<_^-kI;wmli7Jrn;mO#By(c9c!DziFcVeG~0xk9QvzQ%C8{Bkc1YbkwoW
z at 0e(Jv!k5-eSPA0i~Bk741ED}CUmu}xc@!GVfY0pj0dgHmlTnCOXkRjYYO@*AxFjF
zf+^)?K?XODG=cw<aBW(AGouaPo&mQ>6}YU`i!v~8cl#DV#va1lJu at +P31{t6#xOe%
zy46xL{z;9)lf^=%a~^+^6#LjYS%`IoJ;wL4W0de-`MvMn&+TIQ<Zg<lPLIMo`(ojz
z1&MPA*T`pVeb_f5RbLx}_QEE2zqdN{Wi8&V=xin at pZnqh%%|~W)El42KhB8LuHgQ6
ztQoL(!k at M{jtJG}3U+RzP9)kkF~1#|q8ZbXmyO at QIOmahy&(m2R;6>P(>djsgW=C!
z=_`R8DrRLx8R83>c#j1xej4mo_B!|HIeX4%koz29<>!x70#p1re4F#gz1g`f!JPXH
zc&B{QZ&eliYiQFXDXv4FF)IPGqY(augFKOI6z>uIGM)_{4dfZcX!Ce7o=cQ=g{^b^
z%P}2i8nN*p1A3v4UdMPiFH|ov+M7`mLSm&O&kgMfa=FLloA2Krms3Cb+1%YU<E8G8
z at Hr}!ljEV=pJ7T#e!(RbXAgWg-w8GBeiQdHV`TTK9Zu+ at i0OJB11G$pv%%4i-zA+U
z$kd|aX1fZw`ubMAPoAUMN8_+OqTm>bUF at Yn{bR|nk*h_U<W{{;uA{<7?l6;cd75D}
z>^oDWmE22L;Y9;~*aSULJ}d#ha#N>#Sk2u>@_C}09J(lQ!t;!FK6G1e_??QP>g*?Z
z^>+UFGC>sLlzCX=N24yoFM0X%+TiCB5^mqp-mWnqFX0T{|0}5~Nv0I|V?|Qo`}T6W
z1o-D0^jw*N0-lKSX5(ifp)$R~ql0?ct{^#~u6HRdGvLvUc=FyQ at 7T+VLc|T67HgyD
ze!)f846P-gVuM%hBD#@|*RFpOcx9|3-c$qZcqeqj5Ra?$9^seJl_%SrSfAb$w&DA9
zo0B at sxbXjE{4WCvR&Rf5B2I+(n;@Rr(xt9nKztTY$bg|%y7pR?v`Ogg$Utm6Y>Jll
z70O{l*f9Sk^bP74+YR_68in&54Z<QiOYjz*B`k2I(wUxyomy9HnigYfr?r&Awf%ND
z{)0I<gBvxW-{sL~wO=lPj7NWBJx7c>iNvQ62RNQ at rrXvfywZxeEQ#Au)JK%QOJo})
zb~=0w-`Z`QM<@I{xIXm8r#bNRKzC$gJ+L!16S`yYxN!w!4sRFaaFZkxwtfj>+=alI
zp0uam1&39|G>;x8(<_e#CMYx^Z8CDMREYh8*8yWX6k~c0(J!F)9{`3kA32Sf5A-zX
z52%f~t}JpP;w=iPIP&`R6I2=S$ql-joww;idjmZLJ*@n-$0APjj3KY;G- at WbOgG1@
zFMI_4?;NfaxlEbU#nhgnuU~r%xzh at 9@@vbf6J3;}G^W1r3HtW*t-u)<BR{zO+g$3z
zmk|YC6F!R!+<zwK0FjmBf{R#p)tm%jZKz?#zlX|w8+!F|G4Ok?MeOP6$Y-p1V;V)0
zV4*KPvxJ&UX9TE5S}4R at sJV_K?z)B#i3Jyj^9U~0nn`nz(^c11g*Jy~CB&@-mN-f9
zXa0jr^i(?HOZBW=yhmBiHEoz(Z}Iq|KA4*+DS=&4cmEoE&j`IeomU&5FRjP94)$Dv
ztBJAJllJ3S^qVJqI(P<P;0HCYzJTM-!S7;$961g?X4aPPD#QB82X^+}kQ#Nw>R3+P
z5=Xr#du3hZKGaLpkhyNHaLYmGPiY0tr{bi}d9ahFvA#O>TV*2kl=3xgeWj4$=Og=0
zn%A`THsgDDWZ$`ikdH5tbD=ZC55LH?vjB1eTx%lry7HX`&VKfKkeQHmFWG}pgLfCl
zxKJT2zOVlYw<0$p4|R}^Q?>TRVso5|xe>R`=3KW4`*johquBk<xa|}BCGb&<Vm|P(
zhRKh$EK_0)X&M>`+-n=_naZhzPomH_6TZBBT{iTZKyEX}8Xx*kdUVsbxgme~q})*=
zxHdD8(uyjg<Pm|^0`T5xIGo5Pp58tcV<_EkPVrgW7=HzPP47pP!X7q6UJYxs%cUie
zS6w|`nq8<5!fWfQcNDL0AoxktSy+ble2Du at BR=gI1J&Uui3KKz65yKCSiLqdMj<r{
zZPFJ#t`@{Ixtw%fHJf)}CN^HcLpWc6^Ph?^#1m|}f@*=xBJyXF$5lKRa-Q*A`5wn5
zM(M_f4j at +1>vIqG(UmAg*J0;szqWj_RxP#Qc?ID*9W0b79{Bzg+piv^|Aw7$?@jby
zhqdOOhVz0*{ZUD*MpsPUUre3!rL=;Ac>W~RmS)g*yQ~&r19aDF+ppjtX;CBvu7%Dq
znsjJpuU#aTkhLtX;n>fQt8AGuih`uhGo1Vf<#EweN3R}h*?Y)ox$&Eh@;1>=U^5_I
z`7Pm`9*DZ!qjq5YPASKF+E&y*#gN$GsAcU&EpSZ|*x*H|nYDw|FpM^wmk)=+j=OB{
z$Vs<91^aEyN(<KC^Q4Y%rxa at m{8D!QJ)>_vnOC<{fbp9K``lpHhE#o0PWJs^W%ZIi
z^8Ho-8QUV=%EP~1LrnZxWL<_137k0UFPw}~NsXvKF%+o+M`&qi>}xOJS{>y4k;(jG
z9D8r5B(kfw1n;DXn;Tgk#H9=!FWvJY*AAG4*lfjw-L#vvo1k}j9`TPs9}v!U>G->l
zdm`3uLLB#ePPE~tda`dF?5nrL{xL+?!Wy)nw8;UT;+`LWl4CdKTt3=d6r*zBJ%N)_
zg1M at 4l#=hTWz4XH&=#@}Hq(A_almZnII*SDyxnu<Jo^79g>!tTH?VWj=3a7Mz#{y&
z&<ZYsyZ)k~2s2l6&!4LyHIXqEd3Tp%z4Zc~qi%slR}%1u?)*Yxr}OaLi!lZ)rX|Gx
zM_q4z2Y#qW;G-hCbv4FnLu at VTooR;C@!sm}rLd9P*!V*$l_qN?c8>PVigK^QiS<hv
zp&Do7570N`IDz(Xyt}5MVsh<3c~l*ZJoh3=1pME}BICieg7<j||1}`z3EzKILryis
zUK#otJ{}+BkGjN3d(!*r(v8}8Lr^d4SHsupG{ZaU#fAX&uLhp_9=1<ojd!*QNzCb4
zX8`fV1u4n3eu;-)AG}ti4#FL&*KRzke`_;rpaa%^4zl$}<jKuLb%Amco0&eu$Z0*#
z!RYb7I|kD3+{WMQaAHg&o`7rnI|})WFrM>>9)w)Py+e(Gdxgkbx0Yb7QFC*JnUv~m
ziBLzzulpT!<&t)coj{E45bjsc&52%kkzr#&7Pha;LlbTtgnt`(j1Db1_NPOnFQC(#
zg*xa28rYPNfOq40x4qY;BYsi%*bwu2JdZ={M7`TibcJKAF7!C-dLRBO_*%$2h;WX$
zb7a!{?;)0&MrXJ&DYOy31Ne6)mkR5_i6SPPN>S<UYS at 8KwGzz632I<iOxj1^_N*g)
z)uZ|719zXnSD~y at Be%_%W`M10A+dLG-y%j#ume37To>Hq!glb`h{<)_aTj3&Z6<y&
z%(pMS5RXch4vWe4lBHPNCA`b_3bvni>@)yRqcW=z-|vkl{_C^|%?@3w*|)(RzW|SE
z(gyF^>?AQb_**<t!|Y+;i?9xh>9<j%^(1gtF6x3VP}>kuuDvq9B(j?`OsyKN@=KZ+
zo4JHTmDIw!U?P4Ozp04D!~%N~i#RZ_(ktZFmNl>U9gAH*^!K2>(9dl#v2O$ioqh>1
zr$IL6G^N at q8Ww?zk>M(bcX8#I6M4f@*o)Bb5r;us4sjv_{4NEUJ9=y%B{u5)-_V!9
z1x;-IID=iu#=XaYmurnz$(B+d-~J(<U^!!*@H<AOEAstRVVi9I{0QO~z+C!*bHZL6
zcEWz1=)l3J!ZzdcPkc79F&Oa6Y%cFQ03Y*}kg88Zf>(!a4}Lf7y^vL(3WDc^C1Z?L
z1)IW>hQWEOj_D6lzu7;cjvL%tIf>4sceOXt##Rf*nAbm=IHpubM#`-v{rBbsay7x{
zPi3PnM0-fhr_hJN>2*V=o at o}VxwoMwV}GQfM-gLim~Bp6%VTg~CG08O-<J{hYt at tC
zQ+NqJg_r!VppM`}#j%@}k##t}E^&zX;D>+Mb_2NaDp$^+=B at Q-<@D*ny~XjD<iIO6
za=s7}o!}QXrYyJrG7(e$h3t!{YtK735mSc0y&PP$D(BYwv0MI~(D)swxr3N*!RC4j
z^^ZamQcGM>@W+ag2Zs6|8Nr(rGUO at Xdy4bl+bWNl>|HdtK{*<}-FBN=6qT+$kMYt`
zp}aJeqbJXMX{zVliR}=vF~W7my#aG7l)%@y;v_aF*-rG!8IP;YeL~wrzjWA~&;i9-
z$xI8l7E6Qj2;Lq1ewp;m9m|0+7Qk+5s8H%8$oW=t#8!3ARpe5jkFdrz at C=Ekj)61G
zc?W&_0Ax4Ow`<|AF#7^WjWO2 at TU`tv<q$r%Hl)B8thSm3|8mxl<L{qWl)*6w;r|`|
zEAh2P9k8p98H87ulZupQ)xe!fH(C4|!ag}yENn3LjUoLxa^zeowvmyY?C&?WUB&<J
z8eRB*0Q+OMeHn7>)2EC#+;|8-)u|2OzdgjHKi$|@37fzYISD$K68t4*a1$sH_n#^i
zbKfJl4U!j2#<bs!u+7dJT9ewqj&r&A47J`_>2VqSE9{tIOc<l_i*sRTt2q at O7Q~(Z
z2D$UM)|#;q^#<>vVFf=7 at gltEwcUsZ)jQu=L~{2QKpugIKWs60_|>puGW|?p|7<Ph
z57Zfx)zU&mlJr?tjw9w}@2EEjYq5?MlWW80jauvOd*ePctY+Bj7WkgZ(Z?2HtW!x_
zIRD%fX9(Il%^(meF^@LUCLgnND{{#$DmJM~F)xh#HxJ->I7;9?!SNc}=y4hCw{Q+5
zsW3ke!geZh?j`SqDsO%)H7+#arygqq#vrN3T#N02NW|S+wV0=!t!4bg)^gZ$!<419
zBo%ct&&kIh_y2`X!WcQt&dmUJZZ0~N4NgSejB5T=tg(d4tL&JGj1i27qRjy3C{q3u
zjceB+rhJ}1?0jEqvX-k+w;k;>#|%TZBu1BC*FiV9i(0EGqqDgM_<j#IybkkhAWYwB
zaPs{>V`HrgQ}Yo&l~4k^BsAgY7P=y}llXaI!^BZ-c9HdnA}R7YtmhKKZKaq`hYCJM
z99A=u4Ln9SczLR*z2I{QMa<(Oz8ABxrE=bJ)bZFban1m)pYMV{&a(<Jooc=b&$J*M
z_4%xj)xfAHy|`5HF{jP`qppxwi1yvFmgf(M_mi9<aMIFTIk`{schIp<l6WxI`&#=Q
z95-^V+TKLhEC2?uO9$LRu~3Y-RyuFrSP|}1fpzmV?61n%dwI3?A01_h9gd2~S+BI4
z-n;*dIelZwWljB at Wk(Yi&~(1!*)}0?mqLr}8?s+$2 at kwEz}%n;q$ZE<um`%P`7H+*
z$GfM5Iq83H={urTK52+lyL3F!vGhm~8bG%$$N2J{oIicoUI2gJyvt_nE9+EqeDY3v
zwt+A06=9mJpS#QXK07u%I2YB^Jjd;xbfwzEvtU^liFJGGNV_BDuLSO^!888&zv5~o
zB(AoQA$<yd$Xsxd|I2X{W8^gQ<~AUPS-G$PdQ39 at uV!Q7O}ve$GaxznnqV_*H%Vx0
z!2sgcAIf at t>tL^#IYUveMg&bOa7I5qCp4C6`?}(B#5*6!`L!Cp3o_nOhY9|Me$>Hx
z9eT;2^G2L1Lb(%bK{W6U3MKRwt at sREXY)C<_ZG0I5 at 4Xd<Ou9PLWh#H_Co*K?^VFY
z5|;}$x0d+6hId#@-g9dS{wwD-vHek^NDBP|&wgpgyPFJlv*xJaV>%~tKjTy+t at Fq8
zUFyHN?5N*9*Nb>J&54JBNtHawzONlOY)-N-wKM$kujG9x at V>5+zC+w5w?auBCF42d
zSi+`brp;GeO1$4)MUv43 at amQBxUm5F?~wNkoKdf|yJFCP8qBdWZ1b?)pGxXLoIPeL
zl5z~GkAx<S|5VYAK0!_cUE67<%d{rhW1G=Wz_Qgwt~>S^V%NQb at X)t at Om@##%<J2V
z6yNKD1HhS9F*own|Eaj7ruU%@V~9(E2bW;LSik;dzMRPS;#lf1W$4PYInftwm}mMa
zc}_lbwxhap_YCysbi(p>*Jp8>tb{4V7kZM-YyFaye}hh!wix=6Da(L!FT-c_CE91;
zYZ(*#9C%mcJ&lK}L&la<1<l`)xQ;SqY?&|Wd}%c!yScT%d(hE=;O9LC*^<wwIY}E*
zqQNyjg4*Nse&8`w!uG5L!IP*hfbnKOhkVn{S8i>57Gp^+yXl*k(~Ij(CGQaD9?%AJ
z4&nD||Iff>hFrd|Ph{dqIsHQXQ_w*uR?d9 at ITuDhhAVHO^}=@RsP6 at O4^>F{P=}$D
z6w)%h``c73IC~C)<5AaIuFK{bfk#D5I&MD?JOkhY+5`Di#%0jIZkck>p35orlHxz;
z-tGJ7{Zvb6tnw6{l&_hxANno9R3MH*OYCyGI8tj>61`|m9*)oJEn~SI(jd!}Bf#KU
zOSm6c%W+)g{l3s18mSjNX|-_wh3hus9RasauC*bBa|XHKE7$p5sGtbnUjcJtLkh<E
zIvN<sthX`W5r6*c2HslUDM}69G%dI?Y$v^&$TMD&<6Q<iIc$|J-2aS!dxKK1Kn||K
z3Oy$EN=07k0%Es4*#h6(n|LqE318Sce9wg}I7aG<z&ExwvKevmk4ZlhoJ{a at r=~je
z{hT>XsjBAhsCMukklfMz at X4$N9tt(6Z)FExzqLE(JH#jJM##JYE(*R^>}S&R`+dpW
zGRGlr(A_`1xwxMm_uIcvPUOisz2L$*Sqo~(zpVm-K;v8lUlIJPnxm1x=oCH;`J*A%
zAFCqI at jvHmlFB`2@#f|E{ZF=$Im^}58xg}NYtL%P*#}Pvnb15Jt<-9aZaLe+%2_F7
zY9lLWEs(RwJBOS-jC~D6&Q1|SRvp3IZ;4O>@2lKE;uuFEw~mc%B=Z1s*92V<Y6$0B
z5~JgW;s0(%gud4cYh9z8p+5*rzsrXt6_F3l2XVq1<oU6U6ShN+w&4BEusM at e@c)#+
z7p8=+2wAbTJ at T?v4KAfcv}8wdv%ez6=T?#ma}RtnROWOARTQC&pH+`J3I9x{Zii5L
z>@klH at OgQ-K2xNw_&0pXi~XtbGAb5efLyme@#8^jKkf~T=ad0#>%BVAw^I1_Q3vc=
zweHI7Dpt41gKi<GWX%IqdvHP6+pvM!t*BwDeiJp}Okr<hOyv7z+}gwB^lO(L6^x+W
znNkyx0d7o?TQ()H!WcLS+pz$4K?spes9%#5d?aj!TP6t$(Y__)>F_BxLYG&@b`SN#
zp0~lC9}p*Hzwx_0Kh;pAPBqL>cN(UvyHVG3ewhxw0k?kY6Ndi(MI?EYjN4np5AEmW
z<nw(nUr)Kt38uMT0N?R5+ at 9#B3%1D1l)54hv1jN!KIgy(D-agB7IXJUH(e|tZ6x*v
z;eZ%D&7T%(==sVySEPGDMtla;3Frykh-vI2cuhC{6fsggwa0ZXl5RZ++kO8+#9!|J
zC-_-+#H)yb?J)cg!YLEB8UE31uX4f9F1}#91O774&tbEbccX5z&*1;oSwq3SLv&XE
z;Cur=LfyBfwvXt$lu$?XN`h;4eu{T^P!Q<)^OORj-#v`{GBt%`;-RmDM_e6Gu**c3
z<o}K2msQU5LjBoKePa!FmfM$H196~y<VB(#*K{LxFXZusZNhrbjI^OXA^IZ<Ytsez
z8%i0%tLvk8?8kQrsoU$*%$UhNgc{hhuxXKJRg9WSVbJ~Kc}k{QBzdSps0D^1`=Jsa
zV3h^efmKdN+qbYjA?Wz`uOFK5VJe-(k7%ucZoLAwKU;Sh{Z&Hhtt<xCgxrT*7xmF)
zK^3sK+hA|!-;ak)*}MDf`(Ie at MR$Fnz&u(EzwBxUBN}?N(tW+*F7kX`2i({cVV<Mf
zS8hEf%ykgm`HI*3<bB`jVzJbueVZIrLU6I8AG*#KlJ)S`U+=#^yt6^yM$+%xGDXtb
zA5r58F&^ZqrrerJ@(Xdj5PpQjM7Zh%Gw=5cIsRc2dyP#F=(;5S1=;x%d4Ay9*c?PU
ziQp^Y>$3!?5F4@}4w`NoK#pN=PcWwe@>`4;Q0!Yb;TufXeFxpQ32UYT{=dc^4^Bhg
z1K@*B3r+aTV#q7nCD^8)$b)Dk+$+EU#Uc+jO(q&M>NCei^oqf~lo-B*<MC|~$)Cw>
z>AKULH|fuJ_i8(q1Z!_c02}PAEwa3rMcpAeH%=F9hr{rljiGK#)fQLq at +~bP-CG8O
z=WIC~yn0J>@Pk{L at Ov)djnqFTYzVI08tGi;p9cI|8tOYtb=z25j`(G4X at M^^w+Q%l
zf?a3r^LX%iH}xy^v>W>ko2z^{{l1;9*rb&IX0Oi=jeltv_sG)Q;Nvc^TWEEEy`HhE
zY4w;=zX$7>UMR=;UHF_PZ3s=+=5Wp7 at 5R`(pbmghufQ|OwB}6Y5=AJ(<a9DW)7Iaw
zHGBdacpcwnMcuxKO=Ds`!=LKBgFYCWuq~V1wk4A!&@VvEaI{YiKY|+XeN(}U`2Hl?
zX>sF#&+CzAy$EB$IMIh0<h~x4i7y8Ih?=&7#hCMjEQhuElP_JzrvM`*v>>-gO{Zi0
zaFHig>=Pey47PGF^8PkI-O*RqsRrLkG&n$Y!2Otymk6d|9Z9F^sHxIEk{5vaA?!y^
zCCOLw&W8 at 28I>-t^HXi9B^X=SN7**S=f-{cHrsRjlf<8-&-CE<nYJ9jZyVa9CD+hr
z;j>$)3fZ3{!6$>*;!HKk)AZUMYyzEl!<M6n)pdibF*g|B9s9}ggPO#8=|)dOki5t^
zSeRH3Z0Xx9wloegO$#{=_c=y#8X#+O$#ooM{bGF<IS=!sB%ItY!*ypcGqFClVXPA8
z;{JZ7 at 6%8>jr~q!i`69X1*U8&aK;y%f&2r|<5O0yAU?Aq360zg#<c at H?LU3Pl<<e6
z49Lx{A^-8Gf{$Iz^a;oC-;1boEY at Sr%zzx#XR;h6`QSKjY)Qv{DP*^J+ZDfttpUK5
z<l<Qm=)NPrx6~V*_+PTk#-wj+!|yudAjaU;ZS9bsd8iXN_K=W2mEhyNM+lydt(P|~
z*tB&4#^6+9SA`~=7GO;UHhJrO=likn3vA`FbLDuy(y$2cBF9VNH at c;s9MfLPRfNWB
zGp+GLQosG at keV&d;3He7lC>53UovzpEv~yNZ$Ods>N;|MWZSt?!DcCBq~S?L%G=%8
zu0qasIdsGtU-+CAs$-YodptBIHmr(49f_?Aoq=P`hE>3=9E$9LZzBi(fIYgeV4obq
zz9x3x9$q@?ffM{f8Ro|dj|RNM!`2ps`tygpc1P&%f$K$Ekl!Q-a=tJ4fCsJ}SH55?
z`fh$}X=FZWucL(Bu44L9*V9WCNvku3>tXZ7vbE2F2?yWVG?FL4 at -1!ipT`tqoT2_9
zo#fNjY!uj`N0}Kho&mKUk;frIp7`Ie-Gw!n##T(~kW4p0Udp1b>uzpV-t*mIT7Y~H
z=oM;rJ}i7~SgVS at _Mb~~ci<;8liUJ=+vj}aaS?u??UdgBy=@TV1U}@DncE<@c97gq
zk0l{?5nXmkK$mXJ42|9JS70#Xc%}9lrX_h6Y8>x{e7R2ibDSc99 at nkLf7KitWgdDV
zXg{Zf>SkWz<uWg`ZQnjp1byF$V|6-R-_x{u>PMTDQ3ksW{D%HUrB2Nqr}5cViu25^
zb&w&M{4mIa+R*sdeDSXJ&;cyYcgTKjA@;YhIA{94Ocb`@xG0BMG&KDP?$d*M&xS7C
zn_zTd!<DizvI at jG<+OveVZ);OhE2-)l5M7Xi{P33@@=K89`YXan>NVJHv4JBpY|Ys
zS?yjc1z(X`<SZZXbN=8CSqps*<75DzL7 at eDodk0L_|vuT2k%+CD#+Mf0Dim<saR`{
zsEF(~e<+ghO8dpCM1s?We1gwdB}7g_NgT%E+J6w7K*ULH!9Cw~>mlzBV?9i@{W_SX
zO84kN{Q!<?ArJA3<uM^OYc22<rxKaycjMFsruXT#zJshxL~INEnvjV?CH0Tv=FZb}
z%Y$<0fF0fGw1f_fyW$8RGpe2%YgKuWdqW<5yLJ_ at JKDgK1Xa=F8jZC)rmc#f*BDXq
zNM1Ma2aea>c~$U{4$IyacKqlcKYYh;ULj|hT~)c%J{7!gv9umJ#ueZZ_p{f*Zms78
z+hx>7dp0%IZXq(2wU<6+?WKr0P0x+ at 4Klz=3stDc5lD5|TX;B+&gu8k!!J&oJ+9(C
zS5g-H;jmeD1>ze?5ye!R;{bda#lqF#%zcV6Zj$}vyJ8+)4sL<(s9&4NF*)mE;om9>
z*T)nh7J|BcLJiMsuR~s|hIZ!}uvlx at wfQ*jaA<75CwQS{<QUXl$fH9sKFszzOp8^)
z$sqTNR9m6vQo;68vY&_NLaxIxVn0PM?93!>pn!qA=SwR%IRW#4N7cF8LOmZEd*j1`
zBw)hJ78k+p&7Hu5x02is_#zdYi##1&L#K0ci460&K-PX&H|*GC)Lkj>663jnEg$p%
zK4BHG4GN9~$I65q^jSqxhyc0*YVIwo#+WvYiL;Vt7ob*2E$V<+0xVef61jTls|qW@
zVK)OeTnC+~jO5dKXD}t?f2!Ug at -AfmuMnc1GpmEX&!ls+?;$_Sl*APY^@z>wha8qt
zhk(~Xf8f1Tcw9xCokm~O6W+<u=fLCivVR`EY*YCiUoSarqz*coh#fA3yjh_-)*`&x
z{5CfO94_AAj=A9UO3ib6g4<<Tr<%J*@N2UZ`hrskpV*)$@X#vO=i3aOJbX;7n(J|}
zRWx|0G90nzOS5UL+lRk649>;g&MTZ2ZK=m&k+0qLwF2`L{xc7JgB+#3E_xq0m5RYF
zUlMti65Csvlc7620)0_W#oqPtg3Ubm?zj)yS0?msX?b$iJv~+5j4T#MBWaUZJ?Sog
zd2<PW4QcOmgQFSPgCg+yt6Oxbv*=}1FwPH;lmUNVZ}$wZ`-^S~w%{d{>q`9Rh8ubc
z!84!^x%Ap0#CfMWe;~FFYED3pzWueZkjQ9PDjVm5Zaa9WkkmH|%(oy<LB&yYW^gQC
zI^>J%j at L0}df9vtc!+_~%vVeIdvIWf>fpyy)600M$4YrGsJExH+{Pp>(7N-AY%=g9
zhQzUxdT_TC+m$r at wsgr0ULieb3t|Wbv-6#twuO)zxBhM|!T+VGVW+1|Im>Vl6KuPc
z`ESlNhFt~5Kmn}5rXi8`&5*;WPl=c}P4ww~z$sZGM@}kY<%r>%r`J-|;E-!6`Wl>b
zs>tg at yAr_z7<(`xkOJ0(`aU%F2Tn^1;>X~-2e+5ZHr{!LmJzJeYrjUsy_WP<cA%u_
z`)EtVt*B)eYlM$P{17qul9?-)Ef=nKlnR3#`gkwq0lS7)Am2(UNQ`iPg<LyUe=DcI
zAbD5h8S~j(*=La}3x7{8U86{mqyX~;{%pT1YagK2P&z?ljOElZ$hhZuC4Qr81z#%q
zwW{Zc{{#NDEbRY_mt1(l{tpMy3rx&yjxct;qj>ovad;<=L;W{Z#fcpp{qj_6js47M
z!qlS5>ksH?Gdch9Ij;GStE}cXuSg?AYj}~U+kqSn)INzrJaWu$^;$KZ;F5{c$AVPl
zKC$rm6}>Wzhnnnb^Jod{kII!KdxHbk|0C=pxynU!5>;MNnmVibZAHqgfAcb-_hhuz
z!547={vgq8l7H2CvK;=P1Mms%f}PXrxtA#xd<=bIm?;&kaE)Re<bs20m;VyyuE_3l
zsHFm*{3AF|hOL)FZ_VWR!{=HZS&!d8>kKRMmekt!ki1RTi>cSK?q6lTA at dv8#Pvvh
zG}Sy}SFiPfZnYR|&A&q~eEQk=<IsncqHJ!HKe*#4?`Hk>E7NoB2F?%m?^;?&o at viP
zP6I9FID~4-Y5zPl!BRH96z4dxJ~}X7QD0vDC(4_hCm5UI$H8$xeB^cZGaSW)eUKOV
zSHkBTQnRfA+#4p_2%c9FFlT5N@!bZMLbmCN-{E8piT#NsIbBKKA+>vwfeF49a_qxR
zjzh2oD<}TD&Hk4(@!toI>WTddcK at b{{hN&gN$TMrkXyb_a2S00 at Rux~Pv-6qJ)ijB
zGYT7QzrJWLDhZb}ut&=N<v$1QZKZD6KS!>EgfmKaaK?m|DZ9Wkf!c-9`>x5QySSP!
z^rTJ;W8zecs-~619dzjDYly9YW6aU}ZvOF at 1`cBKR`!?$>@ipWH9K#Z_{ULJ5 at X8S
zZw_LGkS($)@#h5DaTehJS`Z^S+IRRrj}?3jEP5mVSLkvXx;emE51Ue68PyijWhCZ|
zv0jS4ZOUt<%inCkc~cQ1!I&d;P5sAmpa;tO?0$3!9n0x1dUe$B=fb}6%|%qEJum3;
zJ#_?Zg(~oAPBAR%iLM&~5B<2sp`(t_)xs}X|G5w1V at D$Ep#RN<zNX|1P`T5G?FQHT
zXKkFqiTBxy+`u}v=H|f*V!_Yg#jGMVsUnn{<*pYdcpXHM>)=D24c~q%?Dg3*Z`pUz
zG^M2b=PN^s*6t2*^&3&MVy;d4%E|~E&h?=(9n)b;XZ_KScd`P$*STcwz)$-Pwo>>}
zkA~ISzy1Hu31I#zA*(BS&?PbUO at bB8H)+&36L#C2T=*prH^X&wDqb$OZFtTaY&(HJ
zRW|>C_2nc#(Rn5y4|O1k&#T at lM*C|~vlDaioL<-rxlm`@MWwYK6#R^si^PRoA61B#
zJow7m>5l!xp9^1puS+6^pXBz7ygXBq;Aga1a`FKGFX!q6NzgqZ>;Lb$NH9^*18Ji?
zsuT0~dzYNOhsE`R|6i;%^l45vE#W*S?3hwasmA;!|AR3A3up4+SZm;yN{4-j>Jpr8
zk8U?co#idXSR1PksEKcgtZTmjtijK8QeSYok?0Y2HD{o6fFlC-xe{0=L)YQazw_4>
zQrZDJ7SG_~$)lFpOC7t4yglFK$`HdoiTW`Xx)pQ(TlkGLW^0Dm5$symVf0VeSfMZt
z^H?5vx$}b99Hol7+<7D7^5;oGzHg{PHm{{&=Z%4nwk2rU8>+$$q8Sg>LNE9$Y7~se
zdmH7zeyPC?p|=~R>+O|NlAEICUWT9AFf+-H`J?qi>`21Vp7q0VB=@2c^LfY${!vb0
z-f?R)`n{XQF at KI22=R?FWUh~1C1d#yW468%W7wmE+yi}G105NBkK|tPSMC*Thdnmm
zS`FE>ip=vhM6NFEEx~_<g6(uQ+WKq!SoAZU**Fes;)tlVf_=A^b9(qjtB(~#5gciL
z)HT~UStqGN+c+>gnIr0aXZV)UkBih#Rgk_#j7H)C+`q^178CmU8`yZIRAF8xS3~cA
z<$K$&xc|U5A`^2fay`B<=1v at Aq6(ph7*HFpkddv2{Ccj at s0`99nMHUX|9ibzGzqo9
zuqNCs1|Ll`Pm1xK(ON~;9;`RDo#*H}w6kTh5`3 at +@$NdhDuj8i7X__M4*zLzF(Zcv
zYg8}ra4nc0=qDx}F=MPV at Yl8QME0MpRjJpRZ^)bi?gf|(^f$$nkTpi|G1hwp&iT=`
zSnxB`$Ear-`f0-oUT$#4+NHpW$=PkSTd!5k9h6nRHh8x(9RBhDn)m0gT5qs^dmG}|
zQs}OA(4i}cpWwa^p2S13zr$LJ;|8o6&R((>Lf^-87pz^8hq2T`*2DAvyRAdNwUw-m
zW~{a6#Av5r`^3D2U-W;hkq`NI$od9<bnAHh&l$sZG6u}xI^9C at EQxR2in?9Ej8!oE
z@&1ko-g1b-8W7XffDeWt{`Hyr;X^y~-~CL+=!o>bE(!a#OqdTpz4G(Y&B~TCaGw;r
z{|ilc=`F~?*$i+RtWPdeu}RVlTcjNNHu?Uw+b=h<?%IA^cg2x^b=S#4%-|e!A`7^J
zN`zY1V$#-?J8?bM*2cBZlkcJNvA}M?Pxub^^zYBK^2OhtY4EpaDkIM{qXu<w7yse8
zWbW}3-PI{)YDmAb<4DfN0@&Qvh50dccAYK*c`z0)<Zla)xOE)(mv=#4PABuJOMR|}
z#54X&?l!sQ?nJ*-z}MRg-#S at 8#bd at fn}rte{1>6kvrg!}b&gWt=L2EquE)BVBrJF3
z3bte1K8mri!0nfqJYv-BtbsmX0KHd-u_A+>E5%ySQMDH`{~&bLMvN)Mlj(!ly0C4)
zb^!dx)sPn={62)=-{2a1cnZksPO6sLJq&#-rxzIAm5{H%|KfUPrd+VXaZ at zI(~SKJ
z at O3J=S4o`^;4&-7xI^9R?IfOpcZR;iTCy77uMcY0ZXV2B`%kK!<YPPMp}+P<k(`RQ
zn7TJ8l25_8#&06>67Q`6+e+MPA?(~t&Xf3W1 at 7fXDZvZ72%ja0u}vdmZ9GZ{eo1?`
z?aoee{QhruVZH!UfVG2gJU4*5LBoh}To at T2s~`*fiBGA6_&?~ASX*TL<@_q11#$s=
z`IMUQfJM|f2q(NIqApq<Vb~y_UQda~eF^r-?<C}Oy6w3lH76Io$fJB48{a9#cO~$g
zW6*;P#4p<}aZMG>Y%gbh#!C1WOwKV9+u@&dUJ-mkVmf*s64Ti->kly<_|S;Y*|$DI
z87fEJZH}#1G&a3*ajw%9OEA7VtPdZyD%`$M&plWRK1H3gvLeJ3`BOs^)>e^t#;@nN
zvgmW2QgVMgaE5F=V1U%DS^f`PGZ=hi3R=Qdkob@@P?4fKMr7TS*T7$K68sgxh;al@
z+>hiB<+*N7`1z0Cf41x31m>UoLp<a^h+~6KFkp_emf*eQSAR5)wW||JehabVVcQn*
zYn*|pSDTloMu#R`3II;182!Bmyn31u at X^qR7z-y;-RPMGnS2}D3~U>*-KEat*qIJa
zlc?J(6Zmn%HPJor+W-7EV&Hbj{6^sVvL>Ff5B?${Tetdg;`0QibRV<KH?#Fs<Ww~(
zlAgc8+cdsJZR5m8${`!xZZ1x3Z(dD!#|h8xs;#Z1q+aN9&iE46ue+CxyFZ1P^?Rg!
zk;c|Cyz_2u!HA6bq<xQB-|&B&=vat(Ps9D1;lI-WPq2>;g0H5En!%nw8Dp`EiiM4S
z0&?M~lbb4ro;3#fx|FmL?O4tjA>+GKgR>HV4Sv}Fan#L4?V05~_+o%FZzZ@;&zBOG
zdx5Jy8^=G~4D2_sDF0 at 85cmPeFItuLhx=pQXUD$`ZDXLLY0$?sWQ2 at x?{F^SS*~N7
zfq47lh+pgNrO1&QfPS}+?#6ye>KMVzklbIUmD>b;GlQMSE$qC%gKL71#a at r~ssZO(
zh>wZf2Y$00tQ|7o#IjwvxK0bMS3$0a`y6)r$|?&#{c6HKwt;JYoM3d>b5*<oa;~#~
z;=J#O-e&&>_raJ^r0^bwkNzv at bxrs`AJ=Whwh(svi)>z31=<gpmg*pOA*=Vu5K9$C
zrWcXtUFrY$_~$n$_`$EuTz2gr=qI<2?*rDyN6l#h=R=<&Wx>dp5iwUO!7T1B!Pwov
z2j2-|PK at 7HTR*P10WqqY!K}(fI`xBZKxQQP5uSOuwUH|(TVUtkL)`J7?iglB7CY|$
zM$S{`P2a`cg4lBfVxlc!uXpAk2HGAIn;;3YB&uAOJofPnm(*T{JMt$=?#Nex^9DKk
z(D4a2#Xau~e?nYIEX;%dD;qI at n2GHI)TRb at V@s3HqR#VtgFJH_@?J!`Q8)JxiHH6J
zI!v3BuT*=6A{G#cafZ0*0 at 8<wqZk%Dl at SK)PvWncZnEcv>}R$+kspqFiK!A3@!3t>
ze<eSN2_-R#!Ef}(`};`T!|<oXQRps(epj|~;SbdsRug}L)Q<zcQ0tY%j at AmusGNoH
z4Sw~gtQS6-KCJ7A=^7Tk(iR%~-CaCK0Js`*T^r(17kumdPy_E`tA+Ro5i55ALvRB*
z0SduiNdGJ at DXI#M{d!cE4h|O5zLG?XBRA24?>bL8+OjB8+p1Ulb9Q5W0?r{T8T%#N
z9XRK5YYCt5I(>@x#)6!5*xQHyaJ)%4c3 at e2ql5S_OuUz%cOmCY`*Pi~_ at fR}yoHWH
zO`dS#k0<8<_aj4IRjIcG^YPE{`@ZjoXF$AUm1~0{>CYcTsv*;A9Wm-bPceznk#?fr
zj||>UtczV=;5GP5Vx9Un@<}H+VziTf<A|x6kYBmfEtZ4g9X1B{CX)pHrcLk_WJNz2
zw?oBmXZ9AbZ6Vm3O4j~TfiFkVFE%WCc{gbb;}mR0pT9?9VZrAK<_7N#?`v7J at ZWSs
zzGNPYlS at KwKiLNzHZXsT-De`W6}E5ct(JE(=^Urpio6HDL0ijF+2!VsxkVHEH0-_%
z?0bIab#os-2ywys`r7_xLm>ZOc{c>_;@*=Gn*yKj)(5aHYzB_vPEN9v#Pgbc6e(W+
z6l$Df{9b2`5P1AAS{V|1ti!Vgpe}03938z;p>DX%YYuzFeh9JEkLZ6WQr?WgbKH-O
zRVq|fFN6Qbxbq{#TN&JEp%}KOVbwcQzav{0a*TFHS8P>r4#Q{J9GM6FHG_TG?7n7e
z2B*ne>D&ukZyR`N#&FM?MTKm<4E)=_#mi)f<r&`1ux6?s8;$0o9`(D0tw*%-fO4%Q
zq9QySGF|I@%POO5tPAOC!3!>6Ck#(|<?5<QpK?+A3fqOkE6wjv^Fm|4nalF_EMnhl
z0AlH8#-wdXE!So&E76*3fYp65ho4E}+O~f10)@h7-HkdCFR4RDAH(-+{vWdSh62et
zuSm%qME-!w3tY%Ge#k>>hFr<*L;Y5wTOh`1#`@9Hr*qFCQJ3H^5pTG;w5Am9KD*J4
zwE(ZsmRih<CgekOI(7qZQ4Kxy646`!fVF_H@`s0cyOEm=y<_Qft%*c`TCs;Q61jl&
zzY6`8g4*B5xLAW$oG14uF?%*H1-#P_JIVDNz&`Xp6<vOr<kDi at 3fMC~ndDDEcM0a(
z{s-RT-s%swzKGi0WX;qx_W?Kcr_?t?6Rbg)TdS~El<JN^*3E)%5&kRK$fsYO2^}CE
zc6JNCPsM)dwwzvkpE5D0@)b$*c98f0i>bcJVhyjK%Eq-!5+g9d4eVO4Z8oNM(l?+B
zfF~6BzaL at FO=9#IlTRv=p2-3h*UtTftWgu|DOr<eK~F?>4ZFS)IefUa=68G at vkYT?
z5%{Xwfh|J3_nC5BV~o2|w{k%S;uL7_Z|kXYVm+<=!+Ki!+j=Uvzn=1ga9kbMU0}?p
z0{FB}(53b^8h8j+zjFz1v+JqIF4H}=K=g;_nS<x~wlzmcFllDehdI5G&8<?%Cc at L#
zOKfJXTJ~7LBkVI&|KS;y;u(JN0w)c(0P%{0&F>+1YX+Vv8nQKEX%YHhM@}DEhao?6
zBaN)hdIrx14k}`&a at J5L+)o0(lZN=65c~NC<77Ge9``_hyN8-X8Q6}~9vqpgR%*cd
z<m3mTmO*%2FK|w7KG4P}MTpu4Jca5hUKQ--tIkC(k=Q`pg3fBSX7ht+2{{+JV9D`g
zt&-GyVsqX46?(B4&-V>5T|N8&9&BxzCi)K5Li7bxoXO-g5zHHGo*wurss)Q&Svm=@
zYm)R=smn|&^{DLzc*T04TYQ&#hS)%CyE71Lt4Tfe-+qEsPr7YyJo_afiH|O2s^JTp
zOXLaiWnRNL8tZ at 7umbiH*5A8|{weTT=Q?h%>x9m;C|OP3s~dwy#wxHCN6 at GL6Jyy(
zFqQ;E`L^1Pv5Z8%`^&pSV{dMT4x(}6E4jJ#1~)$o+N&Y!Y;&n1<;KMw#gTPZHNhb+
zu7<t7m<tSOz-JS_fxYh7+FGBG8592Vb>IgP|Ay_mGW5OrJx{q?rbzzzJGO6@;h<V-
z*r*- at U#zg0&ZF2*UtV}IaDFvo^;icjo_gPYa&MB4vN+OzHSl`b#BLia<4+^@wkP~e
zF$Vi$VEt0=J%IlWJ(`g*cAq!K*eB6-t(uV`?&avZ3uNAH`6CW+ at fj8esKNg2usbcB
zWoH{X;E8#ZttGY+IWYm>5<DSv>3_m at AlT+c_IeV$lO!Bh at 4k-<HB_KSzlGyRS^S~l
zI>9>cWsj}@gD+shm*hH!^Pd22(Ik?15$xhrTqoV`y+CA7M}3rzFp>R1Y%OOcVhLvj
z at e9DdsT<77j-Qn~Go9Ll_I?{<=)yB&j6Q*!x at Mjn^05hiFeM}LI7l!@OfkmJ%LIG2
zb`tVS+Qz3a7Ei;1eeS;czx)XPt7%~N9<788n2L9v=<eSc at Bt%cs=@USVr~tOPa$|q
z;2FRF{n_zOz-jn6 at QkZJa^o+%bBPa(Z4c(tFE_dS$h`Vx at c;IWO!!1JE<RTb8EH9p
z1kYX0`qt80n*^;+uJ8!)!Le9^dH$<eAHfR2_VFqA+d!`CzZ&^%{P8K615d#Z^E>ts
zdheD6EcWTCSf%YQi+`F%I9v7Kz$Wb-n^If~9+6|z`rsp5HqtMIEeMT0JuBqGmX*M^
zJx=afT-rZHA3AtfKT8;k{XQgjP5%r(koW?Cb&ExP0b_9~siQE~u21C8aQ&$5m|wzA
zx0>vyIU4Qf73Hu=ZY@{4oJE#(yWlI<fYZ8ad6VllY+T at XaDAmdlz+FXzePfqq+NDe
zc(iS3Fl*0ygNOF~eNzX?v%+=Lop<=@OgeIon(&>}n5f{NXg3KCR8(Vb_ioE)u|@NN
zb*S7j!#Nc;bure-S&*^Y1$`C$3pI3$M+0Ke#7<oUzvK(9E5P}b-`@|P0?@`Ey^j2k
zDv{c+Qlws8jo<6>yF#S)DHo~vCe%B44mH-E6KaV61960Er^TnihWs+mmAF at EluC+y
zex?uQ)`O at Myhb=iA-8=v-QK{_fJb4HB87R)OXs|>^D<(*a^M~1$Y=ijxi6q^D$xgK
z#DprL>z=f0ofp8pRr!i5LV?<b!P<stXHegyQftYpz_v<jIY_pIzpFmnut|*d>$KlV
z=#3dpiz4YWJ3k%19dGEhPvD*k*9Nb=5v*mwrVn$0K~a-_3O at 2x6>5z$2O2kBfj|FF
z>B at JqjXx)gc<JDf?M2;`3W4`<tJN%9Dez`a**j!{eCf0{@Kpz<@hbcX1`W?vE_fm|
zHrF-23^+*iH?WdE=gQsJCq9*i>7*Vs`ga!Vv+?<Z&xXa$M%^3}7nd>;TF7JZvs|;_
zx&w2J`<9Q|ZLe(!2Zl{qT!MPuHCtjacJX~-0r-5r at 2gxRW%Pksri`19->dq{*X(9W
z0+q~uU~ej6e^e2D3+-Bjv2N_AcXuH#asQ5<(1efwA7}3#*VL80jeDhqRBXjdHC9DH
zs??T1k+H4Q8nqo8DW!-g5o4jXQ!E9m=(N<SNw_FS3FJbA5XglDC89zIc%vw2wP0&e
zh=oYV0fDNuiV&$%$M at MMIGy>v at Ar@2?~i=W$+_;cFKe&8*0Y}VF7jSI-`^GZC8-OC
zg)@a!8N-e^(Ns*|LHzFl($CPQhZxN2q9*u~F;3J^m*P8SBR3*+W)1k2pz~pVN6d{I
ziF->1wif5vf7XM;;`1-8*`CLBrwFF at 6`nvw-^Vx*d+x^Z$*_AAI4ptda9zFiPN0vv
z9Pg+W$honPf!mWN%=;%hf8_jS#9SgDcX73!JUPeOLvVf^EhXy9(mszk8U at DC1~M+C
z3ECxr%jq!WXItNV-eDnej)9{7Zg4<hb&~Z`d|GJTmieKQEic!00q0k;B?b6I_<)mv
zt03bL^#**trWE-e4H##@>B7JJ7rRlac>R=Dq69oN+`WM!jG;>mo>@og#S1#DZyGqF
zF at K{Dux1&2jvR;Gtu)wzHT&hrs0|VHLXL*;(oWcWRpyPl7`*P8>FSqkU<LhNBDiYJ
ze~bt694BJaovU1R?|~RRr^SCtz7D=EEo8!1=v#jy at xoi86^<p<z$X+D`9^RP;CWkX
zs^)KV^lTMMcDdDu*SB5YJvVNaC4j?1Uh}HyXZZUN52<h$A<vG!?YbH~6BFMG%H`{g
zGt_!@Ia`<N&X=VsBE`1W*<znua$R&}Tc2rukTSh@?bM3- at iT!%-3Ok|9IKeL1;(tB
zznabi2eFd;@B3Z*q1#2|Kp4f1s&PX9)%y)5KWjsL?I%+)r(j$Rt{}22 at Us3ebnp{Y
zy89KMJboqKe~aY72?Cc{ojM>B{ps)0INug*KO}9K`aIh2Z~9k&#ry_sDXhPP_+Xqv
zT%#HN?yDY3^DSRCpm!+l7#)hFjI{}Yy4i|AU9kl=HTcv}Hky=;<75TJu-(V-Rd`-B
z);)$5 at Bf@daiOR5z<yvQIjK3nllBVG2^1Dxr at Ti$p!`zvNVc$~HfM|G^}JByH at V|W
zUw}Om?dF3rY~nnJvHyO^-ekfhphsVLmMY=b1nTN?19fj!{JAYgd1hPCZhyn|Vc?S*
z`3~q2QAO`UHcuz>w{|1xd({t@>Du0=7em*nZnLsZ^w~Fj;$|cErFSy}BduLMDh=>q
z=znU-L7Bq+`G5b<AZrl!XHl+CIQOt7 at rk(H4jriNFYt*dSVtt|SsI0#`#5Rb#*4_+
zrn{04Svw+sePa-FuL9PsCA2L&0Q$xR#Cnd47;{Y@@miA><&L1|p?sf!3&D(e>Z7e!
zvCSCw5 at g0GGH;<>B<mx{_`)+4tV3~WYD<$MD-?15C3DTt-{LlUlW$cgx%3LZ9du at D
zK77Zm`on at 8l(8P~c%MG!wSgAlJs-hOYywXBh0Krl{1gmc7UtMPv|A)(w(9 at u+(6#{
z<@Y2uS8$b{6_`z8g^3)LKo at gA=Bh8`i7Tcv!9{z3^NjgLqDLjaU_a?JYZefGBJ|%~
zocSRwIF=RN5|Wnu0?I6Rm6=`mANNTSzxvUN=JrjfyYw{a8#P^r1;uFdXv~q%VO{zK
z;)4HzYo?NVkaTnAOG>b|!nk%eV0#PerLn>#&uD$};D;dk>%^0KX~K(#px+;WjoU<Q
za-2&%-DTo;C=%;cicz}oD~?asdL1>ZNInsTXU$d#ba at rd@2 at ng<Q_V3^p3*)N5e!7
zL{^i&p=n=)XZJXM^hTZy%$3Lg?8{gi2w7@=hU2CxJwpfnt)qBvO=LB%@_mKXsjeD~
zrK-lopg$e*Ysl|jS>>!+st&El4vIKhmX~SVYQ%eGj&Ul&w@~Gw3(Umx3dLQV1fKY3
z1<F+nT}k0d)^25ya-1vT>8>e?5#N|}aHYAys4imZJoCbgY{hQhjcLyEt$S-}m+ZK|
z8JJ<TW8CwkA60yhXJuBJ!$fRd%qVjFy(B?C>J_m)q#v;{7otA1g(05Au9ht*B5i<k
zYw+ET1FOCEh2Gi1lVqxfo-+APr*En5vr?j0W4^J4iwex at NVnGLh;{{45~QS;2rL6j
z6}=t@`o7yRKCpb<UBQmRCYCJveZlrFBjnY2eh^|Z&#_E`{do2!wDaVKgV1GQ(=z3T
zUE at aGPh;jzAK+Pt?*E=J<e3v#+f|W1C1`c^M?p>hP4vfdA_LGCUm at Q@D86+zuK#SL
z&9uG~n0|}v at SZjQDPKP{;+p?UR`yj-`Z+!gvT`?(m6S_Xsx;q1MnX>B$@p^{u5&0Z
z!T-hhA8Y>9FZ*?P|BJ#Uo+ZKwGtf_23sCmMDEoo`F1vklpLN40v-geE-_dX>_Ze`<
zV{Tk`KUACjK61(#{7Pc9P2fxl!4`UJ(S}c$F*Xh3Z0f*Xv=@AM1N+=An&trGFv{&`
z*Ib?aEH|oh6e9~u89Tu~zpCVC>2#@LY!kluv#s#`1xy78StV>h>5P7BnsFTKp(;BC
zz3gE2``q<^55qi7VmK0}!X~JhOYGi|-*bu06~3O6f0hG&1kJGbe?2RYJd5<Nzkzp<
z8(Z<J%g#O0PKeJOZG^r(%70D14&~VxB`5Q7gAwnUL)IP1Q=tbIZFqsv<JMrmK>IcE
zi}eg^f(Sl6 at O;AoK`s0(t+3a$zz&j$`j{@!0Sm4`9gBQQhvpVrST`}p1#x)ub^J`1
zE(zWS_%K5*CIgcRUwap2WOYSV!mmK_flokAoLPpKQ&f^J%F05FP3fqVV#yLg;cVJQ
zxM*4puS?}Z5B#R#9jKQhPJ-bCF9+f;fDN*QTC&5#MZjB`ZN*_C-vqw6Wpk#+PfS08
zPqG&C>1pJeyc{sqZ+Y^H=qQ`)p^wu`vo-ig=;Ks(`l+$tfRZMBdz;kP=QW{*?C=#O
zHne~8iY6hB58#(6l~bwEf%FlVVEdP8zCc@)pgec*`yRQ|wjiFC_!JB-pMnNl9$Y>D
zTT0}mbRY&uvz7E0wBc4JcH%NOc8jF}F#y^u*oRW^{914cMWDZKh0gIB?4R1O=7=AB
z3mQvdmtQZH?_Lm?*O2LY at 6)@0B|bhWht3I8aP at 0{3w_Mn(s7{gq3UgNK1zAp7 at Q9O
zN^xi>FOmK(VA?|s{9V6zeQYm%Qnr!u0E4Xgg50x24Q}euE*)@ntRqkLG2tm<>xL9x
z>MqGC{91L*@{mKx at WKA0p1~R at 7(H?Y+WvWr?QVLS*Iu(GU%@wd?Lyp%fmOEhx;pXs
zLi)F_q}KbyXR6W_TCkSHTmszzF(#Z3=oZctteLBr_2n1%_I^$`WKia?)~yQ9Y(xDo
zZ#oE@!fMzLDi+ACyO at 5z+<uBPr{QG0awW+PSOdS8)TYkA5*Bm8#Az!txSb(-2T!p|
zM8>mYB5;*2p}&93tf^LT^&dQo-&6K)nP*MM{`jVYQn}~{FK}%nzl=Bs3f~lEKa6^r
z?gcw?@k#q?oCn7m^xs?Ds5d{SxYD at aN|8q)>aXcpW3YcLW(xL?W_3w7dww0`#4|Ig
zIL at 3V*ur$QI^9F3R5Y1kw{q1_(GLgU!<om<H5Wz8&9mZ-nfmy7STC%A?z!}xA(fP8
zjtAatvD|L#3D#`iunouGdS{5A6EZpZt?XqOvk_i-KNvlg=QJC(VXeQZyG|9THLALm
z^Hf(}nWqYzY+PlrV*SEXskClJ)lV~EL$!8E<zj)#>TVpV9~F4gy8L%QPlrz)akDLW
zzdU(*Xn%IN-}U5$BW+erbBMngYrij66ap8MPk0u)OnuS~|4_()gC{!2bi43{eST+?
zr=P1~`UGN&lE?d1?N8*!erhIl+Jv|>&2-e~tdTJ=3v~lbyXIvtwO`3PHP&6LhTuoW
zPd+rJFK)v>oU*^gyk0=^6BC<AX^>F;lni+aov_y(3VcZPDWz3q5Szlr at Wfa95f7x|
ziQXy1wty%4glxeZVN1(b)Phqp?4HvJz2D5Cxlz^8v=w+6-RYktTI7xWnL|qu$4!IZ
z$n~D69Po|*7bc+eJCdtshXuBTR%)4ZtnoOwW67NOfXPen17d$-Z-^9|Sp9uBHT(Nc
zXw-zeDER>FFJj|K5 at WVKd!o*k7V_$j(a<;F4=r9Fq4!C2I&zq`z%l5h(;PX78_NN9
zTn=9i{P>AIOTg_Dq(Tmx>y8|^2KE at 69&5_uk`lt<4w)B+cjXE!p|#0czmo0yn!p`j
z`kK>htd=GmTr9}K`%U<jhMe6IPV7LXumibrT{s&`|KYr1Jnq&&#z^?SKzD-gB{m|g
zyH!T4_on1H#YV(57)yxGW>@%CZO;|!am=7nJOh8}tFcsi+6F%r;v)<5kHS`~!L?<?
zW(&+Q)|tiwxYh)FyDo4iGq=?t2Z5L^9jT96QXh<6<Km9dL>?NyMLE*YKL>&N^K-il
zjxfaJlXd+&TEx=@F}``f6y$O3E5J9yZjr2Y*)4WVAoIYf+b+9>CYRVPlC}TSZV?!c
z@*IykdV3e*o(>1)(6>DEy4MScJs38(9k5xz27(;5R9tG2=@)6j;c;#kCEz3SSdLuu
zCHxl0dt{vmj3!f7;Uo5Om!9OvA!Q`}efu7~_i(13tgDjC`ztwLNnk589uF+-m-4TW
zzJ+y<FR at La@2DrjHlb0wY!k-gf7&MA9TXr2Z+kYeO`sqB`&%73KDVKdA^yD`JU`Ne
zX^Tl+q0TZrPvN)`wux-?pLMvd|KGL=tns<A=e at X51t<NkZ_lPzj<okK<X6#?{3_to
znFE`J>%NXZZ5G>+!-IS;`pF{FPw*ZI=_BNwz=78#AHZ0cz>WQ~wO at zt)JZpcMBuwl
zuw|jzeY41VOH=5rfL#MV at 9pqg?ih`DOetw|)b(h at tN^2j@<`cI@@_KcCf at Y~H_#tz
z8e&l9DAn7J9L#?OD1+uYzx4CKQtNG-)8i#lcZ~gFzsr7sdLs6ViA>v8-%f|^UV%07
zO~mCdAZub5m-l$x9Yu(4nmkgYP`;_-3`OXMu|8?9F&pBiNObX&nQy=xXgnSd+lb%a
zaZU)mDPhnA{kt5vBr?vQ!Th4LwV1Rk(+LiNHSS|_?PIJ}H}^}QtVLX7XWAl^rvzm!
z4ea1m#waj0b0^ZaG{hh1F at Dn1bm44_C&VYdj^78n^rvwx$w6qw*fl*__mH*1^(e?X
z#5Z=fvKnx2Ij*b3HHXNUv?|0J?3>jkgRx{SMU|w*_)$DjXJK)MO3r%o!(#QVtr-;u
zzK0)J8uwCmd@&8Xobixr-GRE#lbFCiVTzX1^Wwey(zYv6PB~AkQuD;^q|6F&7p~W;
zs-8wn)Bi3D!mq5<)fMHZdF6&3v?=UbHFC>rEOwS7kDqxfe5i?5wDn%XgGK7sdOLL*
zaKWM0JH%FudVLh1L!U!^J|J^5-gnX~*Nj*jcW~j6`!N4ElQjrrsG8Z=aK1u}Prmtp
zz+y58S{=Rd#bkXeF?ebs8h<YOpU3Tc<7HS=eH&W0{(bX-5m~!wYfEicd at +&7I3B5Y
z1b)bkdh{8&m$46H?T@~?7j+<MLM}4Whb3B1#1o^x!LIC*8QZggO?n&GWMfRCFU<3#
zTT-o!nMBTc)_{wu$|WmMzIbA1;%M3RHjNoE`Jb<6#zi*P>m`n3q|bm8w<Yyzqn6xD
z<g_%w^pyX!d|*~eUn4rV0P%}E!nm=C*C3}_DDGxCatU7p=26phhjR#aD=z$~9jwuO
z{jWX2ttb;>5Vs#Ed0Uaw&ZP&@suG<s at DcGZ8naajpF{8y?<rQWZsw0-WkA;4iUfz?
z^7D{kZNc>eYHY8GM1uVh^=*0m2byxJUd~^wH`w_sU0V{qw=g=wwxnBI>|}Went|<X
zrQKoI(cLewyYi?aHxr5T##|nc`7(~IxfRH*ZtG=ry)Nz6Mv(ZN6j};hxeRf?y2UBo
z!14?MD-KL at OO^<^n=cD$5DS#^gGNw|95f2=uh}1;%K{&l?%qPjJm`VHE>?DzAa_I}
z*1tsGj<*RZIazOzZwU+q?y(s*=F;xc%uSRuc)xusj{nlFn4l3#2M=@Zor`9FNca+I
zJJzd-?9c7-FMMWSN$$mZr!M(gxX9K)f9=vcjM=Wde#UHpC11}$u0NG!wyDQt%m}N@
z?46V|U{oonqn?=C0(S+QBb2*i{R)Eh5yh_S1XYfj=;n}9+be=ABb3fV$Ol+}Hm#4b
zWOb8V<FGj)r&oU>#=^_!_a_OLBe0LvXeSAYLEV0gLhKNZeLx*Ve&#ZgpBeo5OnhpL
zmUWe{zr7-O8)@%>%ltohz3+l2(>Z`PzCZ2ID(@9%Y)$A7RZZx(R9c`e<m`6DNpC+6
z*(jWL*slQ3KOSCh>mcntI1B5#oJbjb63zJEDN%Q)PdR`(`AuL6t~}5532_|w!s)>6
zG)=fFZ3V0vk~6riSh5 at TN?IVpday;W^xQ8&PCQmOXSH5Q?hkyK?QOG?XE=mClwd*N
z%5s8P>k?$)8T;8B+tn4LZTYY(RXN7vC*-%#sfhLX6zv*E>H%|5HfO_#F8UMlMj+QJ
z>C4~?;Q9}~`q}o1tht-zS-WChwcg_ATf2deDz!OTa>RBfE%^Xznn{pv$9d)kmHIbu
zwcE-1HGkg3jK05UZrOTR$`9=6Zz-N)l`^@6 at _5#FWM>PVUI_7<#_A-o at xHs8%2vxm
ze9;!^%zuo>?Z at h?A%C;M5ut0y=jqA%cl&X0 at imI-IoH^w{ARPh+w$B2&sx at 1+tqhk
zR6=m6#RAKw%#2?g+kIGhze*sP$BIRqLAO-#VkUbddm3WC;yfYmR0^-dkm2CB#CPLa
zHatsE7F>CzSR#tg3$AQX17lEyc${L#crwmxIjnAQz<?LRm>pOPJ`?rm46+~AR$mL-
zQ#WUo{WvooqwOcj);q>tBiJU1Bl|PKV}Sl~gu$T0CV_W~J!O)Oh at p!F9`F4>>!0WN
z6>)!VXRwC5%9H;q*U`x6jN3-~vK=vVh1TvD+UU8q^sJPyw#J^mUr at gamYmdg%)OP<
zI(t`M?(CIx^Xr(rQW at Zkg6`&Q!*~z1<xt(KyE1Ji;s}L`QAGEYc!5U^J`wP1QQbI3
z=2Qu6%cbCm7Y7FQ>jl-4F3u`eA0HeDka?(odb{eXrx6_SuC-<}FYgO*$DYQRfPCTl
zJ1H(=GWBgCtO|l1<<}D3<I`%@-HBy_Dpo09YaLkS=eQ9W#jjlb=|m1+Ir!3F%vp1T
zrN4-Ra)g^zfnJaK>+zmP4F=@Qj$Qf=GdDG^DnY$`7cR=L<SA_#JjWxvZ}Ivr^bPa_
z4ehX<rsSj^#*+9YHm~%GS~oiidd^RO(-(SoPzM8#I^GMklXvoro8`_!slV}b{Dbs7
zzEfW$P}UmUz9V}2%B-+eWrfh&xP)thAC0{Au{RK-kW{8R8Y)RXd&Vqi3Eh``7VCjC
zjvI`A&JR^5e`oE6K6bb7U$Njb#r%Q%;BM_yysgLMS*LjNN1RmgGR%7eNvDMIk+PzB
zD<cMH^<{W}SFD)Or9%E~m13d at c?93W7Pv)YeYCu>4BLhoIgpbVGsS+ymsi!L at lGdp
z2&_r=Ymgrm^5bl}-t7n2jdpA9qE9t?<swg3njZ19LtS63#=7_rxZhRCdvJ>3Ar>M3
zLRN<u{MuI{bj{6<<Ea|(ZPt<)KfTghgu1${mj at oD4Bj2k#gX^UUW)4sq&^v63D)tD
zCB#NlOJ~9-crbO2pz;$%{_Z7pU8PG-N-~0S5wC_Ex{-3RW~;_=9PzIwQV(;Z9(Xvw
z8#AyOwh81oK^s>1$=3w{pLW!g%RXhw<J at aXgKomu4&Xy5+fbFMXWF{z$m*}O<^_le
z_?E1z at r?1DzjAf`8$(`Q7r?A}4$MG%!>*xAl#zb6nd={AlH+- at C(pxtm&ML2CKy=6
zZIH4P?%+XbOe at OuPo8eTQe;#;#WtyO#+F at zOe1}!d5vC9IFq at fO{;yB)*igOAAJLS
zY^3i|0m#pD68he5j1!C(!Qa^xb_ at K2>z=%mxwjkrDScuk?h~fQTYHe3E|b)2;6I1r
zq;c04vw>xM#smDTZ4-6v@|8MOQNuE<4Ml>ekZaqUk-PK*`XyH#K*y*+- at i<i_|#(k
z7&3&pTQh)hf49#XJI!XKlq2O!Bl6nTODQK~-1x3!>f>QgxA8~(>it6$GGKuaV*?rb
z06!;L<2c{0Q}g<IRDv1Z>Cb7PC-njoFoyJ}83o`^&|ZOU#@NU%B>EAa89~OS^&#wh
z at F_C;SgT`h=m|NreL|&yW5ltEw-3N4L-fhNsMYM<ogu7DtmA at gGr*}uIDp2{X>sZs
zqNOceny4z?{jCb|`1lvZ<9bdSk>B3<`mEycE?fV~zNQLkkg9ZcYm<>heNq at Mwe>sS
zj%?+b1v=yk$$~6egRK$U2y734k5z2^5Wh{}VglEM at pVsE8NlJnT_5-X{E|xK?v!JH
zwPehunSN)tPYn5WyC-#?f0XLu=X6wG>0{}mUlki{eJoR$T-<|gUD!Bq-S>fm at tXKt
z*s8)t&wud5ml}BYF8T1x9l5-F at 8wqe^yS5}3C?@tl%cpDYBI0~)MogfKenY)+ai_V
z?1eo8{?pymSt=;$s6f=7kXRX$;B+P)HC>P>o{p_eC%TM&chb?izLkdjhhZI=w<23Y
z>rVY6^vJ1H$%~N|er1f#u>|^$CFw3t+*GgbT6In!i%GaKHu?{qs4ttR=ZUi3iiDnV
zmJ8d71 at Zby)6kL}l3PSS6kLq_d3DIoXvwcpDFkKlA@;rer~%GWLwM!c7oCUu?vMLQ
z<@8Dc$Iw6dB*z@=L}%XvUKeYli+96x?Fsbm#WM1YZqwSy6{5F3&L2`)M!S6&VmHHY
zAbO!NJ$~gb-kCPe?0UWhoDwqEd%#C2;{0qn1T0GBR#j-n`kjPtccd&;mAh05|1wE>
z7S>f+cJ#ONk;KMw7dD&l>{wM?M%3bh(25prcd1_lPcIPJft8(T>8l?1m7j2>F1i=?
zomJtLKU=_MujAEsa#w0Q9g^LC`Qhf+5O9yw^K at 5$_2}F|b>&x2Y*s0rGxBTj{3iMi
z%9X(}5BrSh?9Q-{9+P#tk3al%$&G|JB|>jIHspgbRu4IGVzCUm%>?kh)Haoo{+udX
zsXJeUH7R3PwcY{0cv<n@!C1eB$^~)7z_H|2z6e~y1;}V}|9<Ry2-L7wG!FSl6K4Gj
zdGClF`VQwnSYuONMA>G8Ns+JEio8u8#yVNR`BdGCQd{{zQL28WZm0<DQEHOsD_$Yz
zC8_ZPm2Q_!Q9k>vJ at DzB@+q|TY_tqOHXIfE<YB*NM0e=e9qV>Esbu(B*R#FyupdaC
z<4>Mb*0(zuwvQahO}oZNO4`J9h;vYn7*~w(6Z9SUIZp|q=$v>~=nu(_+}Pja;Rm$*
zyUu!G&+H-J2fnB1An;c8$h^LT&U~MphdJbQ=#dq(v2LHlJQsP9^d`jYfK%RR=ciz;
z3ho__MV|{98Fi&VpCeG{B2iBc{}59DB;E`$Ps>St5&1MICpIVe9lFT<sanK$U5l(-
zH;p>YpT@*^ee1FrH6546CE1)}!+DqArZHpEeo7BtMP2eFp*}n}-&mZ!UANdG(FBS7
zN>c7N90!*6D0BTj4}2TmH_2X(Jm9;6^NEjH<L8ta&NF$hVY^DXJ2bavz;K>$-=zFR
zuwqEC2l<ymV)e0B>5&=4m~#=c^ib~&&asrER)_y&yxS|n;;VAmw3xDZp)Ae$87hUW
z1TvIxS#&}EciEyKAD7ZwJ9}7lu)Ef+`gG-)&Z6_B(6Nn^l|LNwQH4vB*P?A(;e+CE
zqwdJn@%)(s8rb+<x?<Dr*kVJ?*DC82S011!vhIQ(No7pf8D)sa8Wizm2FyjgN0=+_
zBc{B|e+p#v`ld3RlaX`Gys#cvE;2u?r*DyCC?9g?gq*!=N59wz8NZI$2}91NSje|G
zVLb`Ve8KP>#+OjwT3h>18)|_6ryY6HqmKDW5Z^6%3-v4_d3c5C?gT5D$kCE~$K-j4
z+guT*Ya6j+rC20!sAnPSUW_p^9rLLOvcWe(PIMIH^_;vS!sdtf6Q9LmI*)S}Z6l=f
z2&RWz8 at 75xC$-n;+*<vrQmSuf0Q&@e+aSh!U;I!3Oqk{SGT568(Xc<HRO30%;oD42
zz|<HrU^9mf;RMEe&vbSM?ysmX4ZG2(or7F28_bADK5H>7H4y#nmo)HGJ|?_2q at NHT
zk>EnageaaScC52=EO_pH!bLABmCC=ou)%Wo9^Y%EtvdbWDR&7@!;q<d#MV%-pM&G(
z9Dg>&>YT^&md3pao2CJAABOXt_gUa>nF#K#FTs~;5EFjYl!_+!6fwTM3O}2vB4Y`C
z*9-iTaetkLb??t;&)@hhR-yBX;k;9C5UWa5^GKVc?Qf~9{*ZN~|D)}Y*Ikh3va_UE
z=sdJhb>NRUX8{K!Ss&-xOXsvomLX=q4ICphI0rQRZMBbHocwss%Tul0M1K-qL=Ig$
z;ezrA6^<X92TpsvE#3Xl=I0;>rMznJ at Kv^{29BtDFO_kgKG`RY8?$rmY_oYm&I2Q{
zP3<fxzs#vB|7mSPei-NJ^5*$U`jxn}-?dwdseq5B*3~YMb9Gka3lXX(8wgLhkk~=i
zLkC&|eWV6D$d6oIYa0CI3M<-w2=-;JuK5_Ya>Q%40Ed>4@%EGJntvPi!M at JzN94Vn
zjF<t%sM8n&g$)y^uGgKI^R{)DJ1MW%kt6PKgw;7OqMFPth<{gtzd}vM1(8G6ZeR=Z
zq0=v0j9hZjE%1LFrpk#7awB-b!{D_?Zmg*PIu0FtA0K$DLa)qC45q3cU_CEjw=u_(
zGQ-Z)!WRN_6`c7Ib6yC{Q}Fi|@bxp#1s*X?BD$2uI*i|u__W!THWhv at f9x(`Fds-a
zi#E8vjXV$a!5kBJ{dtV6PfVkL4J%*24EX}UExAs?6Ac$4r)p7tC2)<0!Jl}<jTI)s
zIWf2k^tSyhvn_uFkCDbY7zzIn>Nhs<eWspc10zPZYnZLB={~mA{k?qT1{PQdcN=0j
zZiMT$O&Rtsmao<=>v=dwAUoOJbd#!CI2kymX+xu(=GWeyu9U!5&XV>W)6CAdJk`AQ
z40%surOn{J%+~7u7RLW<*qo&KY2xN-dHoMPm5$f9PUq_ANY{Jmcgfb;?bZ%kV+YwM
z^=Z9*$;rA&>hC&#M+~@*dc@#d>?;s%ckR0+V1EntZ;2J|_V}sbKe`sF>sV)=<2vuL
zKYlWfbwujgZ05Omj{ZqM`g!+%^`nvFkjqWn*cm_m*EvmM)<YkR$3K$F9?W at hDmQlO
z)`qeG5?|c(K=UGUJ-7GQ)+S{Q&2h at +odhlbwgp8P{HO?FATcfH4hX7f*ylq^)<%&z
zW_LXNW8lvx^%HVvZIncm(rV~VxeAUZ<kulK8o~IGYa3c6BGlJB_ at N;)CV%GEVot*U
zhgg5!{P<_|b3WEU;FBZRw at baO3XT?amB%v2|C~J+b58}zOG^_f&TTEp`jO;;d1-Q3
z5c<TT7)96^Y at f0z!oKKKMsADg2;+7NBUjj*uqj#SFTkmRTr&~_o;w~ftH{yLykjZ;
zzm4BJ_$}wG#_=T*9p1Mu{^y7KH-^~H*?3q}W}-i5bQ_Bc24?{qUG6*O*VDLuCDvn-
zON&^tU=i|TWJc;*KNcUxy*ZFGN5zV#=0 at h@UZd+=b2 at Xb*Ym`$KjItWg2ntA-_7cq
ze$6~xJXyDv;<^lQu%w9fct$RsQ6W}%)JIzE)zq%RHDMjjUL4bi6>c{p<s;WCBX!q0
zT-Qe)16M*b+L^?X?jY-759HhOI8MH`T_Sl$Aj>A-^-EK)#|ge{wztg=8{S&I68))L
ztQhy#t$Oq)YozY7TCc#dV`9Z9UtC}2IzMVR_Dv)E_puMY#VEI}@HtAJ!uwh!wK#Sd
zb}Fr{8GgG=aP+mXVeg}5kR3`sY-Pg*0xy07?23nxBger1sJ%R5(xqI)`j*mDIV;d#
zV!``Si#kC5m5!+Xhi)BImiG at M|0h^)l78AFlZ^AmIzljS<anfcF6zX9vGYd!<j{p*
z>B)0w<SrTG5G$Tp)K{SJ!rTDfL`u)!mPM1?PVB0P_H at LkuZ==kQ^;EThfw6DIMGS+
z6sadzBo)XXB;^?+vvEEcI3-`i-}?dUSA_q*6tNfo12}q(f0X1fbeOJ~D(Wr%8sr|d
zu(5^&4v|fzk$6JN!m>N$Jkd^X$lxjE0l<CxIP!Qp9AEJ7<I~G;!5{q!v3n!8WE|0L
z)<%-?L&fdPbqID|Z#+o+5NjjLn|J#2%yvcS at d9u%_lS3Y#94uQ<AGm$iCO{K=&^GS
z))ZSHFPAVfCT^$PAwYiT@?wLBl;gd!@@jASv)~%!rc5u-1-3@#KLy`01%7<l?do6|
z`VGc#pvTBOa&_1zriEG>Q^DlJzPCBgdMj`ya!Z+h?F-%y+hn at WVQ`<-coiYnLUE%J
zd<qvlbAZ)oM!iInJY<7A5NmZIvhtQbSk1&KUkJ#9FF-o95!l&FwTf{h|L7&okKl0m
zU7%}8aF&z*IClX)u$*O+5L at zCtoJFl$1?XRhBkiRi*p!TGZV*F^X2Kw8q!(%Rf)S}
zJrnUA(L;`a$ywd}?O7R28=pI=1&?jOlJu^^H-74dU6WTikPptbT at 43;TR$)(7g(hS
z at Kc~n$mh9{<X`i>fwDXhr at t=m1}6tOPrgS2{xERO{GNz1;@I!>1AG^F{>NcWO#b8C
z1K?qeGC#!P{1_=8IN+JU+^6%8p5Bae82=Yzt_Uf8)Hbh5o1EnKu*aaSH$p~UT=4>t
zP4F|&)|;+=?Ab1`^xxlFV!a7FI$~i7hd1kc3V36Vm62V;oQcRcHH(p5575th#fq`l
z<ELZnHe>9*X at 13ZY|Nr~w(HonRP(}->ooD>Lk^{{GrtI%5aFnJD9ADgGGq38^cgww
z*d+SNk;}%FuSv<1y{mw234L-!5{c0PKlBJM at U{Py7x;Xuix-$1JMH`b&O1Zw%u|q4
zEl>qs_&n+?lTU`phXZ|SGPv7cVC(t!*k=9!rEw^DMk<Y}=X_LtzbTFSZl at gQ?vnKg
zi6 at 1PunI9U72xbWDlvw&VgFR4vF9Wc at 3{BuzR=<=4r&(@)62x~mM=<iFTaIcwun>H
zra$4+?b}@>nX!-I>8xMe-(AsWp)9M;L_BOS0$-P!CF0{fZ8`4u_~kYO!_hft4=49B
z{vfeD2=OdgOl->EAX6&1vEyySKCnr|j{lje-#pE6Yo*#?PC3KVvkUXHR^B!oO?lfe
z6d>oANnWzC3!&dy4DemhP11zc-!T5?2nfe-KIU4nd=YpcZu{4`xVCp1)bLBoLwEM5
ze<gWk!BhGwXAI(`+{>{plDq9J4Y{@)^X~Ge373JgndGopKB~d8d0L>Bt-$`%;63F8
z>Q$D|T>0|pYQBskzKSx8329>dbb_LxQLsUh+!iKIRp>$aI>@|ya0(UC;=ZEgN#Hgv
z|9Z=lxGczxP=;&yOu}T2_KF4XR%F-ProylHHcMX|#fpvjHmhf6c|%#u%<P6WRp8>A
zz+UT_j=W{+ckY*brrZyX1Q$o}Cx>jxhQSXo{+1%1{rKh_>n%ay%5k<{U at j2*yYo7`
z#wG`DID=J&|7D10tVNz!4f4X5VqEI{!TaOCedx^Q)f{~!Qx29FU!5(Axm;er7BTM|
zVhjI#A3v($@W?yd_`SoWO?O#3H`p=#w`Yi>zXncxE9A)bA^m3Xo1 at R40$*TPw}mQ;
zE{rJS{hh?5;hoUS!LP8L!~!$p_QAi$?O%Z-fR7C0mf?aXT+!(3^#luvwNS7`)VIG#
z0v`qPOM&Mm0~s_!Fc(tOMK;lNsjVDy#2x&e$8Sca7 at P}1p8td{w9eX1bfdlky_h_^
z?{_`cU6Vh@*v;!vnaF(pZ~aJ`(CIITf*cD0C*YQlv&%<=BQS-gKgO8<A`HGd#Jg<S
zOaCPvxe+lAjzcC~hi-W+eiG!w73h)k%?n(|Mj7L0x{kF+nqPDs^WetMVq}LuWXB at h
ze*&`O70xw0a}SC2LA<JJr0$fYzmPSpi{~4C+lTaR|LPOoH24?!+YK^)8RD!|giix{
zf*Sn@{n0OMXtaMdr#2G#yOxixuS}RqElnw*)Kmd=h{Uco^|H$7Jd$&7(BQuabMGQx
zQwHRVrXbeW7Z`omD-IKV8tda~7k53G--dofo<RMAXCKVtlp$x^Uy39FIkas`9^&A>
z%o4Hx&Z at V~{K3TV4}~CJwus-$Z?GSlYXyHyg2czO+P#MG*iVvXj->)wL8~796yv$4
zynE*q`kS582wzUQw<>*?vGXXn?Ja|0woKM>+fi0mSmQe)-<|hFz}UnJrZ9e|_cp6x
ziwU#d1eSdl#i0hl8<fRyXLwV<X9~`geehRim;W3__*6>E^KI4CK~;Jd@*c@!fu}l^
zpFaCw-~^m2D=$VYe&Nm=wD|i1O0?62V^_=7z+DlJBZ9x`#nyyvAGQaI4QxF)oN8C*
zs7X$e9>fD5#QoQIw(!LE+;WGiYJzd6m8ZX!I~<5}<vUwgLVm%>Ir#)*fEzFd87!Kg
zNq_pvXcz8oZjH6e$2VNsq<jo}&VVQ0p>1oYL~gCaM!wnl3p-<ETjY*B#KXq$PV3`<
z=Z34J<-?0SHw{-uk!{99tS_y<v}I8ub|G`k5V?jqx9Q0}1K03u<16r`VO#o&aG({o
zg09Unj8XW-myedzqMyAA-{*0BV>x7_TfTw~zIXYXkQdc_2e>?0R>y|H&=<bm;%?+$
zCGrhhE4FJN8o^!mw*Z;77i|M<Z!??V`20R(d`X>n=C{fm>Hy((YnsREM4T1jc<Mx*
zo}lKjPLTKDe>(CF9s{2n`Z6;o&$s1L0XY6LWa|GNYt3*$S+C>VueheyW at RB)Evpmz
zH?ckCGwj%H123enRKn%>j at V<I#C8^-e+fK{xc)e<JLYo<GI}?w-?nGa!0}z7^ZiG-
zbXZC3ZzoIKuJOHrp&pBv at 9e+;>fC~9wJ-21XD{T-sT&EfX<oP=R?sAmiC?FvE8 at Jq
zvho#mZBbki#m!G2E{mH56i at nNQ{utl61Qgf<7MDvX7WfCwy*m1qA5S;KXVD8>{jqe
z1 at IihY9?PN<#uM!pt?E}7*qI%ohVZtQ|3J=^KQ;khaUNYw6<d?_wm6e*xY);)ij(-
z;`yOVl}|VFTb9N8{XsD1Z@$gQ*nZ%GJD9pZEy&U5fF!gZx}uaK>kVr^iIKX)@C&qu
z>8{jA>aIS9egyf&><<(9H5SX(r+#wDFTDbCYayfaoP*Be%%Xw8Kn{eg(~M91d}#5S
z!_+3X%b`cs90s35hlJaAGb5kmlUQ>k#Mg<OHEV46wc~dV_~eX`SAV+#Km4AM$@g+^
zf7th$&=FJ=(bx%JAL3R{dLl-TYy}aL at +K#ByGQm{8OI0DY60)f{@Wi0DJ7e{73_Nc
zxsa0IO6c&uf{bnkTa<?XMoBIH-y(S`?tJ|3JQd;*TiN}-0~z_Qd<~(OP}X{T+BtBG
zx~>)E;2no0%RJTK8!5=hcj;sjuFKay(yzYrlmB*w<Xteu14~(PCL~m{rrj!p&1bAX
zV!hTJk;DOaR)KOCI=laReX_-oDNXpIvu}UKe&916NaF+{WIy#X^6TW5zLYA3-3BqT
z?;DV(KsMLdcTDJz#yua3`csiyCM0ho?te_~0TxOjjf-et?0adXtfbtbb!(1rW6R%n
z)qPto{S;zpV0(oPP>ehY at GFu&ky=7>-=H52abw%Q=R;S4%{Nt2y0w&yKUcmRP6KrL
zlcso*dlx#J&_4w84|2P1(e{@K%Jg|n8LU5uUVAn|@)r8fBlM+e%rEsEE1tK9;9Ag!
zMnnIu$2=&B)curbo{xDDYvQNAV{~mCyJ|4Mf;I5x at iVaoo{nqJNNNQ&=3vgX$`|oW
z<kuuN9gki-cL at 06G?c$PrV5-Tqk)w<1^(g6EXVYUlimDA?rL8S%2pm&j<`Q<u_e?!
zyMxX{tVIxVPu%1u6dRd1z30iCs$JCQp<Tkn>|(yMr4tOqP&{zJ@%~EKtfxuzz*!8;
zp9*_p71d2RzShng)-O;#AQ;JbeiZoAa2|E?KmcC at zXj(PVeXtp#+x=T)ktz5A?`A*
zzuOgiYVu0$(|0Gfn)0M^{s%}srS@`T*Ic3F3APpAS<moqHIg+azM+GxXB^{uRFf-{
zT20-^v%5ZOsr5For3#d&BlvWCWZTye`|x*pxQE22Tti&;v~ZCcKKCu73I7!0;T7%#
zd-;{C- at 0@!d^=|f;m<rvl`MSD`T#NFy)*JoYDjzw$(<1LafGfh{lo&k40 at u98*Bfa
z_zJ-zCVk|OdG8ePEF`zsDe$2C<2NtB3wXOLjisA&t>S>mcFlsx!}>+(z!vW|je#%V
zIC27<BzSo6A?yKHEWxIYNtHK&n;-Mx57vRyUyHn!s*8J9R@{gW`UL)r5GIaQk6c#y
z0;~gk|3=k&3F*^9g=d9OvDr-G%SlW*RRH{g1$n!*+}LkljFy7eS|e~$TIiM}b~GsA
zedr|nh+X2DpNP)@@oO1~V-te=Z5N441Mf?ws>)3l*&HVGMO at lNMB1!QbiT22(0OWQ
zi?A#F3{SVCu+UO_o~l({op=@BEL17Zn^c*5$$kdr{!DzoH>pqPlABifvv2cj{_tsf
zNOE_&pV(POuVo8Se)lG`i<@BLA=LHtNlXm2mgAX=Hmhn{i~4v9$NOe{O8yT$g|aVU
z;>AP$#9iYZfy7pb_SXIDWJ5J#xyHO%-DQR?zi|fezbTJ~<}w&+74pmkT89L+#GXiO
z6GYF}=AjP|{|w>asUiI)UI84Z*lZN4y^v3u8`ZxW*uk9sGHIOmEN?aO6(CM-9AdUQ
z$e1zDjfcPR17)QqK5rs$o)vo1599ObCU3;8;T;<Al9y~5-GH&-^g(>`BKX&UA7<SF
ze)xtsZqFtcCs%&;usSJlrDCAitL*m1;Hv{h&r0A=NgKZoK2$y8^2P(3tnhdV^+)oK
z)**M%q7@~utsEZ^vLS=XxFzyti<=$3BP|E|X^E!<Sk+wc4T*s(6*6O+L)zc19av5_
z^kMjPw~QvdJzXX|^DZ0wC9aqq?INrhm%G}=qk`!CepZZSGj)C8G&+ at xZ|GGc<HN<F
zuoCM)<A+TLITOG~4gWcwtIbrf5TEbz at nP)0CP<NJu-5p1Ur8_BQ0=m>*_S{LPOJ)n
zo%00b*pF@<gbM*SpU(|FPcVSq>3StI|5{zL^6D17d_-10y;bKrX8oR7TR?ugwKMbZ
zLVX_A5idc00RLxxnRBgbAuu%E_}}Xvg_sd_zjW(Wi73&6HPRjYe#4qDo#84+el_<K
zoL;o^-%$Tw61ijT2G;?&53)W-|Jpby1M!@z>nnl%Q$mJ*D178mikOo*p2gsa#Jr3+
zCvVSO*t<0LgDyNSnIjRqjP^-J-y?O5n75heAN3^8O^^~ESCSC^1?;nP+ZADxFds}?
z!w(yS?NinrVL{j~iYi6yh?2y?!4HzhI&x_Z>k#Ic?#TrbNsm}FyJwjuu5Y($8TM!3
z{cI*S<`wv?trGZ&U`NWF?QJ9XpTK(PB;f;|J=&H#n`6rXH+Tn$gT`DQgYvNn?knWt
z4vVA=IHW-DbTfyMt38bFdGSe`2o&aps7q3x#1 at KrA2%-k1y at _NfH-pG*v73ovZiC&
zVu7nIB)j4fPrB6sSxs#At<=Vts;pjqinV)5bjY|JGrBc`Xy`k6*<z;{u{h}rF8;cr
zkA+;ylM at zK!v9$Ye_vMU;(b>L=A|@9U;&5dKE&EUXW-CeZmH`|y#|aL!BbS3&16h+
zXnL+7m&9DGO(d~716TUX;N#xKnM88Yd+9uL?y-SmxgMU&#1+)_J=D|?Zj)qjNXw2P
zCawj3U*rwJJAk1=9_0SSz5|+C=t{pMZh^9uP;!D#VtmfSr6SbbF=?F7D88)HB25tO
z6yzdKArIf&L;4fRom`6N4P+Nv-ph3AOM{Th8C(na7W5J0hqM(K+ziYUOE@&aAc4<A
zd)Z9vwCnD>BOg)do&tlU3;wYaJ>oqxeWYY9X$OXp)I+$a=qU8BOGKydS%ti$u)DeD
zK(|XchdFS^crpi~ZWZo`2^@T$=xq4EP#X76jX&lnaO3!Z=YONC?=rCghd6Yth}4_n
zZN&MEM@;E7x+Mvm)+1PQ5x%hlbG)7|aD5wi2`ouB2^O!m;YGQAbG!(ccZ)|T=Ad0@
z3z-{yrVFOAkrN8 at UX(ozKCW6y;r<U`hM)%=I}E<5Xig2|)2g?fqt6FQ)OlWc5sfN>
zlO6Oc*)aqBA_0<v0n>nWl}6Mzy~{sSlESNRkPT~qQ8i%R=yvhAkh;KkS5jwRQ8HNG
zQNV4~F!4L$Kj#sW7j5nV*x3p%A~v=3B@#DC+QUDDwn`KBnMwQoXa7JfR|b*sB*tXN
zc&5FC<Qq6wS@&#O*vz$8j*>A*+Kaz$dOe?MGx}xH-b|k{od4XjkQ^T=A7X;t{>I?!
z(4XEzt~Amo2wsSa2M;X6Ljb#SjPDHK`&F(r^8er1G}xk}_RvE<1iulZZ8%1J#t+96
zECbO^G*y^C*J1u_V&>03{@?Sb%Re``>_6vD)N37ZhjrNQ!u)9zsDX_bnKP4XfNiPa
zM*Xpu_G3dfHYn^R(#=I@|GQ4Pu^Ya}IIigL;><^^+qV9$s2YhbtOILGJ;N=M!B3%C
z;Dokf4y$ix<N2%67sfO5Yai*;QS#e|5T8T2=2u}>pqBSRpMr2!@HBnOX*#DuubZau
z(VOK8eW*NC6N}?2<v<taOa0uU+i&6CBR;wIBE+H-{cxcm|DH~ehyIl}fSgU+qY%#k
zoWa6bE}eq5rsj#kf3k9{Kuz*XYK}2+S>X6{&7-A3=<6>6$FY>@3qu1Pi0L}`KdvqD
z{08&u+!b2iD9rVwp7tPC1-Ys*-eLtyX)EO5LZ1Q>OGtQofUB at Yw6_aMzm$B!p%Jq&
z1NZ;q$@wQS!KFby9g<SKZ!OAooGBND+#z3u9sv(UZQuUAp9D<ilnWGoX**^NEFiHd
z*1zJ}LlKQldr^jLMh>0=w;8@`@1}rhxbOX8 at 6Ae%uG4kTMdqGyb_<^WEyJhrNK)d1
zT#m^Ubf|p9ZcQQAO1gZ&8xH;F9&jO#m~VPaWHsVyS{%I?M~JJj-$8wsGv`SA*O(0a
z%kXolF|OuI4)~O%f3YOG3%VWT?Uji-ei}>K?zU1N*$X{pOhcKVh>St3-xZY7^O&T}
zr;@q8=6|`~B(R61;d%#r{>s3=*sD?gQ|Pw`A(Q9QiitWwE8=Y2C3 at gK#t91HKfIV!
z)^?X0`<F`6*P!#K<9wD&21##7jEtV&(pX0He1A?v*-yDRKRD!u{<4N$M85`|4e=D{
zn|aYX8{##Hjo;siId(KN$G*zUuahJtusL+W2YFqvEn76FC;JipcfX^>TrI+!{Ve8c
z31S$Y!@RwhrYXiYf%!H&5`K5apL!hjzFo{5jAQK&%mJ8#am-^uJYr<i7wVPJhse6I
zmvarzO2;#Q!n0-AUdA&?F1HQ_^IbY4SJI6bVy&PxOp3V0wC(%+<lFaMK)#01gZpL|
z-|EYboe$jYi+$h4&gU%UIa&x_pYRaX4elfHe*RA6iAbcIF~8pO&S$p22&Bvweh6Tz
zjuZY{qa-FMEDq)Ws68TVF1GX9l+b;$Bd4vc33(=cU3ieKH1tyPHSxz!bPlSQx`|kh
zEw+N$AKHk2S&H(j89fGTbkt3Agw1CsFja`<^lr7 at B)OosH;?FewV1Q_;I|vU3e+2L
z4K4AZ<;yFHFEr%h_8ah#wGobU;s>7GwG|u;(#;*&;0D6_516RU9cj{pzCz at Mf*lz6
zyugSPc5u3^xqSxt)g!{;>m(deM^@G#4 at J7z`P_bcv{U at o$Qd#wPT?i2_f`Qv0l7xz
z|5raN-GVXzZ*k4tJP+*z48}7pPcRtQdKe4_Ic8 at t800!H27}QB4B+R2l<e*eWqhse
zSA6F=wBH&0PQ!=Xu-g}UbOrS2hxonj))8__vabIg`pPiL!N9RPmO>vS{=ROaQ at i@d
z#Bq#Y9(|^B=t)1C7#RP;zxB2tT;IjH28<K>4#CsK&A_{?=tKF2u5GI^A3uXUdGdef
zZ9Nkp&lH2B?+l|y+y at 5#q_w+qJYpd%SzT`Dtpo6HrpGv8i|Z-Am6!$Wdt=rZ&Z%J^
z*fo0*1Lo~^p0 at E*9QT!{StXqKhO$(x-H at uK_PBL6@jY`*N<oz!$0ZqFz|A18<*{uG
z)f=N&v9!HLqUFr$zY%z{=~$Ab{3iTo<w;jo%9KSHj^<arV at kZ@mzL7=y)kAr<lNsc
zmL)05!SC!|3ZL+q9pz8%rMT>4^dP^|<d3rMN|Kg$O-hHY=RSSc*2+4dx;nuK4!eWE
z&Kim>{KtV;>_^eITAwufF23u`*D`Qk<C?E81BWLK7f}}?WqdiYJtE$d1FoN|;2aP5
z<p?l97OVr`#JjH`rtF^JD)`_`+$gFlYpzOWV(^+ImuOort2KyltT<tV7fG_Pwzt at -
zJr41wO2$ePqJCmmPzS*kV{yBXHD<BeabLAG^f;+ERjxnDEsLBXRF+$31D{;8Sl(@1
zsupl<369i!DJ!GtE6O66%;R<z+Yh1a=TMgP8M(ziz;$WDTX0PZl_8kID at kRrhvCw;
z>&|ageiKb-liiEI<hArkSk?S?iP2T|$8(Secq5gu`^`xCjYGltk2SM%SVsPVh_XiM
zx at NznJnasJ9T-dI9*0d!72^7*DR9rIawxrL9>3K0F>t>b;NHn4*QoWj3Myyhy4l6)
zgR%UScXaGsuw|sMo@?KaTzMk;F2{}6Ys-+p){DCCP^YS{E`h(mejusr1~3Gn$Cp&p
zs!`8hZy3yu^UTYN+b~EWHgf6r{7#dF^M|81RU{E_m;#wlNWJH&b~Je#vT=>0C}tM5
ziZcs&Kb8U8ISYMb*|7KIoE0D1a#y@%>lxOk=BbTdQkpHuqvyNTAaA|Oq!3v6+>#{g
zUAMCY+esaA>jXynd;2O5c+5Dnth>Cxi|uo at iEw*?b8cd(O^Vz%5=XmG%{%D1&y)k+
zfxaY}0C_u`!aU39`FQrWm?&(e^tMP9aM^m&N9k?A_tpYK)zx;rxLcL3l7D03bNO;s
z2EUZl8|g=neWY<KHoPJ)MvNERV$1M25-qPcsnUZ*o`r;~MVHJ at x9>!5LHISPGPes%
zd5^etS|5U=o5?STad<t|7*TdLr>=x^u(kyLCj;=8mpe7Aihqjf`QZ4&^QgD6?x9ub
zCpW1|#Ph;B)L*HPQ<$C0y3apgN6r)03Dx;qWs_B5x)w#D$X7b7RViLC3zH8T0+i}n
z&IWsL67m)9RM5XCmGQb#)vOABexca6V9?;HqX=*F5q$gnq(;YHeoA(O7s2vS*$tQ@
zyZN2E6xd?R5Q}0;6_NG>FTbeHuu}n>dJemqZ?c0oZxs3}=IbKZ5p$_RPgz9SY1o*s
z4<BlF9I#7OF>E|@|49G2Oy)1 at Abhll!KVjPFQY99w at t$RK;#ZaP7?AT at _SGcN8&1D
zhJN>%l82m-`AnSI3R`a0A-5L7 at xYDk(z#djE9(w$k||MQab9GAypWG^sO5iPUjh5~
zGXE-I$q{24Ag9%^nbyL#18k5-dFle-4hsplD*BAzq5hk(Rw1!}wu?=<#P%b|)90d(
zR9;auB2QpsSt7BezdCda<=q=o1vzVgU%l7k7~=MdlVoR)lD408DB`u#IRY`0^KQb_
zQeo{3$}=b8wR7f(tj-F at E<sBD5l$2G49Tf`z}gx(cVN5tj_P)+mMnu at pr|~L^6)kq
zd<d{3JYsR$RrGg>SrWv_);*GLE?DcSA{?@VAI;2JsjDfhEfH*kY=6Y$XKGB6Id)Bg
zjlW$|Zv^h9Y(_C;=_&e;L|O4~<hdN9WSI?HwuD?m-&JKu(2sb*8*;g;U+n(xe1eHt
zBQo^?)s*C6?V5R%rc(1(>Xb!I at CTg4_<6bxvgue4_LF2`W}Cu!eNryz at 7vG0ornB1
zI1a*}S+UvLZ$wP at Cb#n_OFwu0yZsE7?U?_1((bIvc9o<|VCBXhTVl!+77Uua3mngQ
zpTKhz-`x;I5kD~U%4{R;23g)s at 8$do4DfkL?N;4L`D`?&&5HT2wJuF~`#F<1JqtD^
zR&k=)@r-9-M0<mpwB=K!<anaFE=>ad3bvF&PDYO!yyK+j;fVJ0If6=_qF!!W<Z(=R
z+pC7@$C+dvx}6rJcD(dW?hR2;p-}Xuxx0kKl)^q{<iByB*csOeZ%?hj+|}KwKwrRn
zh3Xjx!S!Lnx?{dHA!#yV6k>(oqs96r0DaHMIVs5sJP5u0>38Z?;O>Lo_T~$@3`P+=
zdJ^zF>dwNh5l67C^9&~uLq`7!jHVs)^mH<36sLO>gv%d#lfH)f#e6;NGec=oVr^bF
zGl%4Zh&<xIh!SlE=2bKaKKMVVxR at 5M?(JP!^)IL;T$Ih=n)4Amw^ai9yyJ%rbq$&g
zRqzi^TyfeqVPFh-51w6#Z5Fm>Y^h7HQRIC`XQm;h61EloOm}RjYx!5P1^$X}#c||8
z=g+2Bd!6ztS at ALYKxxEl%|-Ah?UNwS!rX5;1H&&x%Z9;wrHDrU=rWQ&8aC{l9+l!X
z&wPG`%{0&lUyuVfZO9rHjjbtQDtv35ekI%9Zvrp!z+)FqjsotRnt<~;Og`WaJ9wgX
z8RS{Q38O9WSDom&HTT;MZB%-Gx(|~#AX<j!ms=g=Tz-#F^Goc^<u73^_eDVy?6JDa
zXeB8x{^#1usSH*@;KwKRflH9XID=I*QXb-`M|t3 at x|m;zcS$|<CxQEcE_={=lhluJ
zNoeK^$6fuN6OZSW?2dKHN<Lv{lKvb!DsYUmx98-(gk@>sUFa(>0f%HKWnM7VZk8tK
zXOewvXQSVGw1J;!MJg#1@^b7P_U0F!q{%q)|C$*$y7v9<LR)2niRcok+QyRb<u at 9F
z5f7QFDIVZ7>cKOKHN8NnhaK<JFvSghFp2H-bo_I~MvT}IZq(Mjj32}Ya`9j6PwBlr
zKajYjVIQ9}z?EB)*7D86dLLUk!O4h#vwq9R*i at dmi6susk7)l{THd{F%F6m>;4<3T
zdLu1JS>gkqSeGD$^tUXL(!r{MuB8v0NI&)wWn|bY2G`q!gR$)0H at bteqa$rq-6x{A
z6~=ge$!k8}nk`b^rz&?|FPCyIK*#m}MN|iF#-0A<%_%L0xzQ2!NM=lsvdKouc7?$u
zF5D at 1m6_l{U|Z`ZK2F5LVH{38*mptm=7e0>hng`zDkyJu4s*}fp1I8S<p9{<@NL~B
zZ&mWsG^H3~jqP+}8H7EvNL<C6F|C+`FmL=hwnv*887mH}<SQ~W{4Up~{in?KET&m_
zZy99lF)ze+V9q<1bVZ=I<u+J4b6DDZ#XAStnJnOUo51_Q$k4-T_)+~D>J9l-sbz^*
zi2U60F}W7Dk4j*Kp6E9w=;LJq#6Uw2ra9-S0MFf~oG2Oiz*JB4BIFoRkIb#j^xdyY
z?K0TW=1VspF7+xLIsOwlZte0s0o%kZ?)q;Mo7SY3LhmT9^OYz)bnKh~#5j5!^89Kd
z!H87aF4rHmjb~j)Tu`~q>TxL0-MM0<4A<8t)cIomHu<k6vhCg`RUUPm?E9~Vzi0K3
z9`PFu^CveNqpA_BqG8tCXE7GO5|%%0j8-F_y?mlEy2!4HmKE!z at x8!%KGdgbfi+Q+
zer?KIATJK)e5udF_`BgWmwXj|O}HynOF!DGG35apq7|k;T_UKk4h4?W=OxJ^bxl|+
zdLB>=FRAI?j~JIqzV&xK@;JPO_GyeHc?=)bl?2u_8fz77#O?yeSqy%SqmGws)vO!e
zv>=aO<q;a|DC(Q5B&Qx^zxjwRlGyU^Va=3G{_B;|Rb<~0yj5EVzo_e-1S2 at _TT>qT
zQG=@=O+-Fznu?hcarsBWnK_E|p^0OlJ8>aLF91(e>?J{d&e{u>Bt(}+DjG01i7_|X
z&A^Q6{8UXx)CG5ADaA9fepjaF+8)=YZK$#vkvB#YV?kf~JK}uQqz^TKFOXotCn9Gd
zz9n5EBI~`8Jcp>qkv8w7 at A7Ba54-xpfmpBNk>hQyz5q^uV%VL~PYy(~H!*tg;Uq7C
z26{1Y(@cN6!#Qt%5A$9fFf=`0d!O{Trs^lUHoIWtnRcwptgH)et;o5oKD&i{uV)eI
z9|KdpilL`GZra=l+}GsDbdpb!;D5`a3HBYfOUMm_|F$|&SVQBU)T_v~cnUG)YZzaN
z&OZwJU~&Bha4}w(@fmamas6tdgMkZqW{job1C#^0x^)-(pC}u2Sht#AM8V1AeXjQ)
z4=en>#0~`A;UpE$-!U>@PhtJy^a(gJQ|8{wH}glqcdKpVQ0Z?x>PBqQ*oR_;XX889
zgGKk{!SxU2{k+KN!Iz~8zn;#&?~}1op8tuecUsh{DdLa86+qUfKe(OYDZc_YK|k<K
zZMjr>vBmw0pOCLBd3>WJXn&EHDr2ky!8}*_^8EPk`>E6ZDHtm$;4n;q42sGUb51_+
z;rt3LL19GD&(f?eDtB-l at _g)vZ@(LJ-!E<7u}-g&Q(Parq at HlM32zRTxSe-wuFLay
zDta5~qr-aS at hpk1q2CeIAiwnl&ywhB>{npCO_*RH`}|YZAy4G*<Rt5rSa&PkP7idr
zoyIuJW8DZ>VvR&%$r_LkFX6TZYdJUmwcqua535N(_dbkwJd$)p%GKQ%D~;rsZ at qiJ
zZKzNm171324L*$gSc8OnEMkeTx~{}E-WWMSrE080J{{Jft=flr$g^Yc?N<Qv;CK;u
zZSVce_-KrjlCf%1&Q#-FmGnDN+w{s+pV?zbxwq=;O2Whq<=~vT at m><I`5TK#PI7>5
z)zy`VnQ?9Z4SnhWWTzyMeT0-T{TnOB^Qj{a>}P$W#IqlhdNL`Q?`NJV5p(p2Up>ug
zw%PT0uIEzese0FQ|8tzr(b>O+EYxnO;#mdi6{C<hz0~#wcs3N^^LT^YZ;~_jw<4eD
z1-&9kmI%3IpC(8tYvG)Cr)?^l6SfMRTdr|+3G&kb`E;7t7^DfGVIBwW!xC~a#hc=$
z!oTHx#_C{vv4s-d7Yj<|{vjqmKEWCkMr8e*?U-XL@!0l!7E9K?;=;Gs-~Q}gmbm?G
z^{dbAB02&$DnFgBw<)r=aGJnN`}WXWjt;SQYGTu6V(4CXV-b5CY-X0MIl|g8C2i@{
z^TK^IDu`Z=m>sR4!?71O)p~G$d_F^6C;GYrbE~fKM-Sx_pT2<$4)i$a7;%%Zt|QmS
zPr*C|UrY)Qc-PgT2loyi)je<ZyPm?k1g^o!aeaB~FD|xp<=E1wvSQ13C&C&L_XZA^
z83op1;_GX7qw57SmMF%}AtpTcJ5_W at ib@|P?C>yr!=nE#kV4K?6aV_;IK(Y}E$EPl
z1k(T4dn<J_q$ooa;Rcu-x3$Yma0vB+6vEk()f02?#=F5S>H^H~anQw->_gUJ=nnUQ
z6H(gIJ-(Px0(<w{$RT$OxdrcsWg*|-UdS5lh88<=53)>HKW^X%$T{~6*fE71C)v8|
z`16GXBQ^{9kKVyC{BJTqb{@3lg3JGnhLR?~tS{UyvM05_ow>|&fnN*wW8&P}ZhRbE
zsFu35I3CT&qX)cXnem=+7+dEW*88V`12fI>sI!W?H)B6Nz*a?wn(`w=oy8HNVKqx1
z1D+^176pC;#`jO;NVh7JSLVDjtu>~`aeZ1I1wKhftEzRP5jkPL>paaecPgoS62({@
zJNG>iAN*cLmL{D|nYGX>Zx8s6-_s2%Selq;_KCdm-b3ya)=x3ZE^3Q=#*%Bk5VSS`
z(**p5GV4>e(vfW2#md`|@-Eex`>siq`)*lrF0cK3?qG^vne$^@GY9+#hPE2&d4VE*
zV6hU<TE~m}L`|N@(+Q-HeG+f-nm@^<w}ln(nq!)wGos&dmZ{5Mk at K`Mxq}AiLWZQ9
zO$JiuVFks;z{`WAJ`JQk!wTp>e5K(!>g+r9w!PS%!FE@;Zci<?GHg#VYb<cB*bf#f
z_@|XlRtdIel}=s>8H4;Qh)ae~YyZrKEdLh2v%^$GJ$&=EIQA-dST+ZL4y+>DgrCw_
z!<hpA>N(6yY25V(JQ|L4W>99tt^X2dqaQJIu8h9QnLHF9y}EFc=XOag@!9dCthW)b
z|I3FPB(;<B=ybQUbUpY0e(|3|@GF?p?1)3_w7$`a{1Ke9?q*wnK+2b1D7962q=d20
zl)z6$Fdb!XEcLH5)J^b}3L=OfQSyoP4R$WJ9}#X#!3S=vi6UE?yWSR{wy<+pdT at sw
z0uLARUxJhM6k_=po`|d}$O1FQa!sUC40|OR`{-kvnh*!L2eHo%%2NjZt|YE*RZv3|
zcwb<9$?EcX6YK8T#D0cY_$iT<>-Ra@`K#5n-BT#wfPU3*4g(`_$I--@%Tn63O-GVo
z6KX69>uS#$I73|>7mJv2E_CS&{5%rRoK?^HrO60xpwXVY(bl^93dHk at 3DzboEBFk?
zSkrsHg&(M$;Pt*gZiCxdr<^;<UdFM6)%zx78p$zVFK{=0i#*P)kiEKWaPVgD;#{S6
ze^A4XJ$$)Av!+5)kMCKodd?)GfX#xw#pM1#t}|e;*1gxci)ChKv2-zOCERE^<l<WT
z2F82R5)JaL68W<hIrH?m|0k+KrOhyo$m-m+3F=hBcjB2#?vc21yANiKiD{vw!1R>)
z%;23}ri?seBb;_C2u^G?a7`+39t9j{e*$j4TvA63;o<?3$8fM0e#+T_f6!B6oQSDD
zOzI9f<AikwVLveY{6XrEJZ~TXdWDSCqxe3njM%kp(<!Z>$~q7;h3;hMhQ67)$S%eh
zR7?`lH;@Brt~h<~iIMt*oe229Kdb|R_98yv4qBDyJfs>wP3NhmMS*tICyuGcPt@>_
zQzp!RXb<F5hn^{@;mzeEUktyF8++tw)M+mHo-z0yVE3hDjMCfi%?4-pp5;s8x=Ovj
zuxrV_WD6 at 6Iadre8J$nCaXuN`*gZz7o}C|d=K3c7nV%ED^EDvT_y9LSov at 2w6Fm_4
z5+9g8DxI{`+62m*zX<p2ZK_gN4 at Q979oLIB<l9x+sYcZm_%$$YfiV_Q24a6+2>UbY
z4On~r`P)Z=Gf1Cks3dI+u8 at 1s6%Mp1DC9qM*L&rJX?-`*yM4XT-r%@r=iJ^Ll$VJ1
z!kUGNDP)adump$?`T1&{{_83E at mTBHgL2FDD(55}=LWUxdnfC8;iKoPIo)+)jM>`g
zD(Zk+4Q&@xq2H{dR{^W#0ehs*?y#Q}J_<d;|37?ve_WI0`hRLt at Ywu;X1Y3tfMnE(
zL1<Q<Y#ue5NQ8*;h)d9ZNFM44b&4o9e!52)+t?<IG4>M$hQgSbh$yI~tD`7jFdZ8R
zL}o=WDari4??HV&=ll75zklp?KYO10`E at _{ecji6UGM9Cf!hmQ-A|)_4(ba at eO6hN
z&Ts^BsT7!wdW_qnd6~4PGn3QDWW%0VpK=-3JPP{{<|VIgF&BOF1(lZ=V|0GULItoo
z#gH9m`MN7|*t at qA-J0arbID<kGXb{~ft(k0-D at sjocnw*N9CEr>U}k2T^U}*aiia_
zb^T_8P9Ptk=6mX{UUS60hMcpe*1iShHvCTrtpB1H<?ql%f2)#*+=|xSgRLBSs49nr
zM8|fX_G-ZW{W`~K3!djXbRX@=h2XhN4qy7KKBN)$WI1((GpE(m-)Hn at fp0tQZ?`H#
zW#BkidBM1{xUYin;HCY|A at Jx5D{xKtD%1W(=2O`2_jis%$5UWF{!T63k-%woSJRe}
z5_0{eMW}=8Px^#@LJo?4&K&0sjFX>KMlTbv6h7c0 at OHNvS*okSmBc?p`b^|{VsCb2
z+pRuN%Nr;+d}QA(ge{>z%gDmdo2+F#_rAtt)1~Bn;OEaq3|O7mxU`7a#BF7?3^sG*
z6TGEvEn<nkQgG_HTN7$+;2m=b30|n-)^hVIaP+P!KrV$keEZ~m1uTijPPm7bI+{KC
zNLIr}{vI%==x1HTE||Ei88HY%H%L#Zn<=non=3P}<$-^Yr8{3l{e?x7^)zJg?_(`w
zKH*zuhT40`TvFAs*|!$onW<D8G42ifj`!44HzO~EA?KHRWnX=kF6vrNF8rfH&Wz5n
z?b)JUd%I7HJsbV$Dz6fJPK#7mXPEH+5zf`!%V-79d996i6n+7zU8}xnUqUGYO88^;
zU6X6OcAj#RgtVb+1?DBJTb#G2zdbV(_yB$PGw_$}uB!EwV0&}xYn*V{-7=Xrdy&rz
zzJ;*Ae2#a{Sm#Ac$u{8-8{>ixn(JAU!7n(8YeBxx`5hYh?G|8;%Zc9?@7w3;_a~eW
z%&Bvl=Nt(fO?#=MNt$%~1|7Tn at P-;D8|#R}h{Y<7jxBo_<5d=hSm3mm(3f6xRD1f=
zi}=3+Iw|R2E5N&*Wu#b%nA<u;uw&2fV0XIYzU?mHv%DbR?$Z#yJACVsbSc$hS351f
z^&>fu7jN6oh at PERM*1<~(>Jo%nRu2L*WG64MYr73 at U<jI+psLUrB4!F=~Qz!2EDP|
zyrCxi*|e8RS8C+vj)U_E+>Kw?aH_ at GA>T4B#fF(}h at Y^;PlN2>k3omV_|C+8=6Z5#
zS-iTd`Z*c4N<q#H<YJlvUV5X?pZqW@$=pq_%v at djJ&z4<F{jQo&-Wc758M&#-5$OF
zU0<2lfU*8A+In#;nd at jV+7)^SbPu{`f-44Gf{7eM=LpA5_IbE#kXH$qg6X)2m068-
zL_$EukTF!|YJt!F`;Ze8eBMFU+fvRjvp7W-Z43}dxKR<s=QKGFELIuB9g#B-Ygtk?
zYfpf<cTZ5~J#g^!v5+5Zj|uB9wL`nI6LW1xQ^1}ey|3!%wBGdWEbc%54*V6aiToBP
zIm692qLrE at 5p7NV>4R0Wm?GTMJ=E&eJ-nn?r^<yN^V8Lx-oU#dmP<XRi|c1HV_;_w
zSPc9WHP#AV8w)>{Zi|l?HmPpUG{o0MaO?w!6Uv62MBywBN)<Ud!!s4MRMhhFCe5c2
z!$V(&f%k-#;9Uw)FK2AEU)v}!zT^Ikf~rey&w}nSI_t at zxYy&;dbxhTMF_9fX6;nf
z&vYYBxbET-${3jqKNE0m at INnsZ9)Z`VG#To22S;&7W=HRsU(idH-)^T^Km-XJIlUH
z{Z!=rr}r%sF_{`GRpc)Nj|Kc+WE=NdNqn%%e#S6()URvBhkZt+oH+yzzi(C)^%`jK
z+Fb{3CSWVpEED%Jg4<esF^39bfqU0C#e-i*F7&aikoinfPd0FJ{geW}bJ&c=rga&p
zN5zJG-K-SK(mkUkmh+TH&S~LWjUjRnYwAq)N2L!xCLPx!4 at N9}5G6s+!e*MhGn1X@
z$OvkOj3{TgyDLv2uQ;6z+m<5bg81=}G2jDFf|o>hzQH|h?k at gD=+G*nLy!BzM)(r3
zzot}<7=6p~lGX=0UgK|ckam42&rK1&yhL!zDSA2?%cRa#s4{t(dVul6IvI9F;6R?u
zA^s4;A>9`|w{r-%g=z55jz9VpaFnn)dvIzqoDc9jc&)86_$XChAMO!A2ZY~M(DdL<
z$jU0g{s#wHN6zM=-8^d`U-&dJhkhI1VXNN!s3nkawfa at pS)g;2uMfbOi3e79AL=B&
zIHO0x7_r~Px0d>bv|+!;7diZuFTS0|O at ZSNJlLtjiQ76{4!Q?(DI5CzHRdc?bI>Q4
z0JMP&9H@}zuyt)jTLn|XuGA=SkH8=FgzHSYM5A9>2A(?LmOQqq22m?`Ue0a#km1fN
zrgFFZx4Kvl?TeJO5?-r>!2P0L#N29kmw9}nX at vVS?+xm8!lN4oj9Yp?=I%mUg at 36!
z+gI$U4av3vC%flkw!o$8l2eav-o at 8_BX5l%9Gs9Jb9_H?7%_KOcy(bt03KcsC+ls|
zVtSJ(Y3akFb6yTnFDE?WS$pmBp7)TW at Ixb0gZ7`wkL4N0)mgl!XEim!&t%vp&wmnn
zz(=$OTs+8q@#2_B7pA7_Y25`YKej->^<l at 5An-xjR~o&r=Tpi+>uj&F_Q1!xlc~YH
z_$d2RkzwoH5pbb;ug2Qx1^&^_G5Nz(?URM{>jB<zv9!6jCjCbu$B3U}TMgmein=zW
z4=ofYmBmuE$Q!w9>%%9Ff`y|MkL94fbH&1mYk7R|mGBYA3292WP3|xXo}M}JzPk(b
zc0}xAPA-^(Il5bY_7Ljy#>=34pF#|Pg!nI+0`SOw|M60ACO7q!`$f()(AhH=+k2v)
z4q&PdVBCXunyTnZg<PG1b<Zh1Y<T4VOg~!LIl_m{%ClxvGdDONHC5yKCKe;kYLZY|
zuTvO{O|GkSvCBVr{;%cyVx~a4Yt<`%T+eeZ at _qyt{dsQXnj6j4oC|lf+lrd>e3AYD
zFm{Vxw?dvtA<u-s2h_WsoL0h3IJgQrM{)CY|9!y8?3y_M&X!)%rxE+pbP;8b3}cV1
zfoQ~se%@TYq1F|V@*U4PE}7H;?m~YzRG3s(KZf2t_A;46=_2?}o^URpKa4oXAAn6-
zq?fV8t|jpuRWh_g1^86-z&Yfjt>G(0uJ&ANALmW9_bvEIu$_gRlQxu-W8S9HDoh_6
zur3ETB{=aGh5Xg|6Ji<E{Hyv)dj|AZZAU5Lo?d<XZp(r;dp3S~_zCdK#4i`vtYi3n
zPB3YZj{(?j9GeQ6Dg{1q5r<cGQy at f6LCl?y(`VVx&#}6K&vf)}1dmJf5i(Z>jbiTC
zM*WO&`Qv*}M7S;vRC+<T5QQm+KVEUAk6?FKt8Vzl!asCN^)T|6%!Llz6LGY)R&+YP
z!F4zC`=+LaQu?T2SMhcgoSl)^G(#yO*IoG3f8ZF!JD~6UBP8yYHcXNC2CL9%!~N&@
z{v&P^9o<_V7uWPoipXOhO`$E#P57>`m4X8^mB>8EJMi}5{)CGg^3S$~_`Hy7B at yfT
z7v>nr8u#{E-%{ApQt?clbwX<+OYQM at UGse->au;VBa7H=7yljc(q(!?8*vk!+URQ0
z^iwkE3cFdt;nmm|`-9HalCFbJa5<)p1}8iG4+o{Yev3zbgH^CG2_eV0 at pa-Bl|g18
zwiU#y+@$9q4=wT8Zyf7;a_&UG2>F8HlJ6X8Z_(l!kQ1KRnt%AFz>nHkki|&^7P65s
zdO2WQY~%}R$@xRDVGvGoUAL6v>11QSLrZKvkWa#;uoVZsHkQP$9n*muOHRJ4-H5rZ
z$;V2*GvRFtnO_wyXnKgq{e4;W=zmgRF9-)jBly^g*eG2xem(lf3q)VAnbK!vW$ppb
z9`Sv8f%BLx!@LLnT*Q715WkMQ&-f75>lah3>QQh_+w6hf(2LM_$~s5X;iCy_C8EVl
z$o<<8Z+^PFm=`jl?CgVG*BbA>u-9!dJ`|a^#spjTN6_aQVb`&$Wd7xx_lOLtl0knp
z2NzXcLV1XP6!X}ZdKq-Rhk!3djDqo at bOXcS7{LRPeXwO3A0peZaaXK=C!vil0`9D|
z>WWtn!~N_n@#49P$nWgP?UDAp>!ZkS*Q*-qmVA|b4|1{1SfZN#40s7=*72ph0Umr5
zc?$5~q(WB!-}4RHI0x_e^yE7}VRw742G0)WZV~ixlxGyC_<4~!<X_UYzr(xFuB_ED
z!=f5N-KeXl5UcS?+e64L*oLMvI?e_X_k?XElczQ0`C4;18(gpY7T#JFDvEx-n}MHC
z2+lU-OIT;+)x~sJbY5TbmZcNBzmV6tb~dv(AYLy6PcnQfTM7nETkohkiy?RFb?E`T
z_AiPAKWunMvn*my at eT0ets>WEtH`+*4y{P-s{*dhsLGnz8(XjWA);1)W#Spo=L=mQ
zd1Ty_!>{q at VLdG&?dAGteLUI<ZKDc#@J*F-?h at k5*n4tRjofP{v~f9&^-2)*m<b$F
z=MZechfoLHW~f&$ZnbwZ3al^3z};U5o$5H5m;FWPOA5W3rNOvNeC{b?Gfb}}W6C)|
zz9G0uJ>Qrm2EKmH*Vgp!;I}M|uKOkr|JRnjxIXY~4Y|$}i8E`l&LV5~5RB3HiLL~_
z#s$n}?POm7){oe9luL+B2Qqyiu(k8syy-;t7G$xMqAZPki- at jcZqUDx{O<Rn=u-F^
zJnthCdSnUsH2&*-m^1b^@;+oNgHPY>^Fm07xK}mmiyX}lRzG%N=25KWkfRoUh)&Nl
zAOEJ((Kv5E(La9kf?P6YbyDSIPFY{?ARPa(-<FX1D8^-%5UhD=7O+{(;H&=Uqx(JA
z`s2MX<GnvwzxzxL(Zinj!MVimvH$kokU9Lv#7TG;2KrP#J%T*yk2z*Qk9;%8O>hU$
zS5Su~?R0S#+qQ)a#$C1-k!_|$yo5<mb=oQ?`_ukMB+XO!qoez`$vb=Fo9MRgVqhE#
zst%~E{`#mXJd3Tg(-l|GjdeXB5=OOG9q>A}JJAj<wVoVLf0Ty2S$P28TidgVDF^p?
zjaN^up0?T!%IA-MmVTJY?>fpHf&cmdYZVrlLC|g5M+}d5IE*TRxRSocO^Eogz-eCs
zIRdVD=&iloS2|s)L0%=1kLd5>&#v&4w<SCmA9Js#UtWC*eV?iE_zE`yXD#X+0d|O$
zBI at kpThR`DeyzPEN;h{uug>F7X=`qRo+e~>V7+%PClh{g18hQHa5iCn{|VoslRg(;
z4E at I7y1;G}3sXdqmjiZnjxYn++X7<9ID%gAUQ-i%goRy4DZI<Le at dlCURfvSr&_yY
z?<!wOl??tx<mUA;q=>|VKjatswntV4ZM2P$d=ao^39&BwmQ#mV+ur<u?b+xz>PRVU
z%CfEdXJ*;2sqgk>BmTrEEGtH?xfxpvnP7Fj;B~6j(lo#zAKirQf?(jUNw98trnDFK
zivd+`Rb}M0QS+bv$9CtAfa9IL9F`}>CNbo62frte0X|Li2-XVmC{uj5qfgDS#i%4o
zEo>23M|Zvm+1Ek((BLCgFM54d(2}kY3F5CZt5uIf_I1JD;t(w+Hua!1Y8duU=lYX2
z!}!@h^K0Kle(e at jh025+%`cF9sIDegaz5po?BF*c_r^CZR9$^=fb_q}^*rZo$X~(p
zqZJzCbMU!DNxv;BRY3;=?>DJO?3%6>zFVUgGYQd)8)Kk1J)|km**Uc(^vN}|0)k;5
zgI#bT>?t1G3$P|ZY0=XIg5oy4KH58jV{EPD%wZCJ-*Bo_3d#_a#?^Q2*68`o?wS?S
zzG&7b9$!%=_;Gbl&h>Bw>aMw4O+ at EsWxKp#r{3b#<$O#dpmZwt%<{*G{6ZY8XYIAz
zsq%em>^@q0N55403yDKN=efsnx~{u}lF|(1g2=m<RxjwK%Z5&Mbub5QMn;JEkF4|P
zzhM&O^=g5Q8Jv}LLsjraEA=yU#)I&o>gXewgMqi<G~9ul1%ADoJ{{jdg?7&%7(U=N
z4IaJdAh|d0o6J}0CD027Sfd`iW>bhSaKZ}MED3h6_(C<t;PaRV4n{Ws&vFUakqWVP
zj|utYm9UHZx{83Y&%^lwRy%CI9iDT_fCtHo6xa?TznC7nW?qki83dlHkaZl`2w-L5
z|J_UO%TjxuB^S?L$V$2(gpQMibA@&VmARrFxyr<%RpkDg=hO`b&bItqT)#Y*^O5B(
zVykDoL^TT)i?s9={LbRrO<-nP?9*W%i-j#7Z2&vekZ<Agl_!c*4ytCkRIvNavG?HE
z8DR5IiFyT#M-S%hd at u`k85Jj^RU1+b-P<Z&1--0*pK6ZwI~|b~Qxsw8DUyt*If-59
z)mPHWJBK~<njuE<wwyP37JV?I9P=9Vo{;udl22lYjwNg9uNzV<>d}RH at HfJTn)du|
zom~O at +4B>65nl<+MrV`>^JW_KqZY)I;=ER33&<(X{i2e-!knRfou`2PFp}?R_wrr^
zzDztnz75t-L21o5BB!0-*7Y#;ytF93C9>#SUDzAZ^8&WJhUgQ(%KV7)Jnsn|;URi<
zcd=#}a>K0k*k~!(CSD~N6z7YuSNsd}0I8erb&Ay0EML*l_fLDL_v%Tk5*betdJ*_$
z<dg!kvnAe2&9TeP`fc!I_HdYT_z|`CVaBw|mpOzno=D{J`ascC`3IC?@X2>;nl-#2
z&L=hliM4Jdc%FI8A!%aBFY)upnr}j;5j_w#lQA0pMOxR|OdnwK>C4bl&q9a20{+}I
zrk{1?+aJQz5e==i;#DeZqdRiCL!+_!^s0_bb4PipL;3GJlwCsVd8}Xa!!l5}KKgn<
zX~fmmTHbK-V)3hyD;;@xJA|#FiJ0Rgu0Y?tjw)%9&*7*d!b3iEFjU~!7*dVM%rfrA
zDZQ<0S;bL5cX#l{E-o%RAGvZEJn5MG(;Vn?!>^NfE*|yO7w1y?Xo6)eB=a`!U%+Z3
zh5>r<ew&tTPs$^is$7a(gM{muLS6J1touUdGOMAppQBHUdgET>>LN#N+3+vtrD&pc
zwg%)hw~~Ho)23HCj_|>2MQg?1g*3JvBDNy__2>%@NtCc#PHg$MgL^6u8&+!i5I at H<
z at e?2$Hn~(@cHI(<H9i~uCI$U91FYFtViUNF1v!sa3*=ANFgdB4kgw1vkOvtUdFpnO
zmjXPr9=j-H!v^0%xst at hliUG8^XNLm_FI{u(rDe740xPPf95HNP5opG$wwPs5B|=S
zTLnGglo4@>xrk}J1<rtN|CMtru-vWm)wz{f`1zNQ;O8&*FMq4ZIgjHDyp!tIDt3XG
z8ww1x{|$^^8CS0jSa;c8;^80q9k>)=JVqB0&gXtvnwFpHI1DUQHA at LwC~#beT_F4$
zzr#-ug}P?cojzH&oI|(_>kx0eT3qE{=j`EIChW)dY|#q~>#>eHFJ8 at 7kZ177>8}vG
z+kFjrPy1#5yumvH6=c(Ibg6T8$ZXiNyj%{fO>&UqE|p(~{yYtH$OG^%yomLejj0M*
z;#|T{CH2IIb`zUNIQS4%!0-{hN=@F?wvD`-j?HjGW=H#6kYO&J(ptlE?5?mYqje5-
z^wc&PU17+$RUX!kWB0oP*x8UjMepY;`zfP`U*tTl)hyPN_b2bns-0-RutL%f3>Vx?
zda at sU7VFtru#E*r>z^TG?-%lZ?ya8plTEZMYy%T9{w3v){^xs&t66oZBNuU4Iy|Qd
zdij(K`~R~Je0LTn%^9ICchC6h1bj}vKl*1oy5IKPhxllc`hN41-&(a>)_Xj?yjjQ@
zf?e-7PdjF#9Y0_l7zU=$0h<qWD=+b3Y-{;a2Os&c9IBAy%6~>v68qQ90f?WOf1B7+
zkk?ss1pdoQuy7*xOI#7+B7DZOg6F#CL3g&MD`2O|Byt$*2a at j+aUiq}Hg&0UHpflA
z&DgY%C9W2{+cLx>!2btKTM?<_oW0q%&O-JlWqa4so<37+;af(G at WnjOnab98KLnpq
zk<YSXEAc;wg-pFqXhs$=Hd&Y>OKz1XW%rhQ{Fx7s|BzwBkYDiC8I`bI<9T|J_lr*b
z)n6*txZ|zBQI>FZQD30%e3?}RUo!G0Lr46QVWde{UL-g#%!xmx8(bUq7+l`cqQ3>f
zuBJq6#Zk|9!24i+B+tu9$|imh*BRLMLo=>8KT5kYmb8S}^dBJk#xN&HChi^IfcuGo
z$t7b%u4!0(3u{O#e5O5k&bjDU3T83#AWgJ!9cg#Op#%R19spg)N!vl-6Lgm$2igmB
zOwj!n6MGL^20yGOD--tfgRln}daU4|ZooG#gFG3<x}x3*edHv;!Is6l(YKS)w-1T4
z(hZ&W_zmO!AMb!}fp<+ePy+iGt_>*`y$tK5hL`8SkN5 at FsBLAm>c;%ol^^yZSGC-Z
zvAqkN1y!*{S==3uicPy^`Ad_s(T1()KlfX}J%IABC`o@>3R~Gj-Uh+SnTSVeGJLFU
zKI8FgBKKRwW0UWBlK8^O`T#zN_S at 1Y<~FS)wtm=NTj>T-Cf$a1yddgjcl<HN^Mez!
z(T}FoTY$Byji18w7h5O&buvmD{{VbS2OP4VWfXFx1K)b7Rf|0E7P~?e!ae|f;5oD-
z;(Izg95TikkOv!A()q!p&rQgwKkhTp7yXJ5r&8o-PB%2G at txkMWk277Y^%XIIRg6|
z<FV<i6+gY(ck+FjCcYbN!F64*FQ-_dkJ}18zS<eEEw$3IPJa at A1N~JPGEOkB&ab4q
zGXJq#gbe6Ko%jB6rKyQ2Ox?V)nD;QRl)sEFS at T-=&&Yw?9TOX~#i`(wlNfbhU4}fb
zJRHA at B41sr^8Iq2=NJ8aSI%v%=b0X*kdF^z5wfS-NX9kF%dlNEL*{-7nfcyrZ3^;L
z1Ue_n=df?X<T;s;SA)@^-HH(jbi#XBU%b0Sff$}$?%yWMXR+^1(l-9RYdGD)$$NHt
z&exH9+COtxfcs>ltqk~<uc051Z^}kLtem_?3F7{_g6W=by>aqB&rKf7pDa)L9vk6J
z%qe3%Y*{mSt+*Q>if?Kn`}o#d<(%q2$NYqyfpUdoOujgI-S)}rl(Ne_-_;nhgxDiI
zbHqV^<bn6U+d60B+v5Gb8HS9DiF0nh%73gW0D8ptn9D_W6LrUfVOi*r8wo*r8(A}E
zN|UZXxtrL8+9%twRMf&2{&BDTKu=%w!g#PaduVrr4D*I1en!h1 at XLmv4NtS4sFI~r
zc7BWPduXpL(q8CWhv*YT7EN4p$ucqGw?wx8{wyiJoxSoU$a_AHK7Q3Pj`rQgs)4+h
zm&CxwUBfb?FNm6((r>_b*F(O~Og}s9k4wI-l0}0nN+nlSL5}?tbq#B7Wa|_>?SnX!
z+y7z#JFtZ3kjcG9;Xj*r2GXCFjEc>Ov#TO~p1%BxKE(%p=LCQX`;qHX>6tfbH_x$H
zaLrNVI0%DGB>8F=kngl|zr_-!^x!uC;>lBtc=`WT7Bv5tEU at QLKdr3mGXf8F6MPo@
z3ICr*M{4o16FWwH4q^)L_|5fjS`vPk#E`jUTs0d6^6Bu0vjvmS^P7FT&obncnw^+k
zz$NobBKS~&8(l_^M#wO4>f>j$Vm%-VSy{vmji1t637L=(un~6aSm^tc`9U%|jf2FW
z><lp~GYqza$a}E{>pEjbg;7cT^IQIDR>HR at 1dmhuc*R#0gsaO}IyM!#uFQ|6z-JZ?
zT<RCMa>Ar2zZ}ZmFNOUw9M=yAR=^6hM#X7 at x7yFnZ2{K;lLUER?P-H!eN`y$t+0^1
z(_ at QiC9(Cx&R_rRyT}im1YAkx>|zVzlYNHxh1{)2+_oDi6RbZvoR1Xj*4wSoy03t_
zysM%0&?C!33!{Z&$Za;DB6fE6<?a_;IntufqJedp>A at MifIJ+@Z)n(_IFp at j;+tpZ
z1J`;5K0>bu3%C at 7@iU`E-2(J+T}xex`_|>q1LBLj-JRopqeO at 39Ea#zoH(B;4|xtT
zhjQ5X&r-Er1s7`Ux!zjX{i>K;?~~G9D}ZqTS7!m at 0d|r+S%2ujsDFv7>pBEmqB^>+
zr#QN<TQFQ1G!J(5gFhY%E6Y31g6*K|;1=YH`0;RPp&Hm&*Ud at J)jqNg{bUpHP?&Q)
zcnGVlfpex6c4mCjwT?RI%fP_;#G}0qW|#!8tlu30J9OdB)HfX343kkwzP)S7IO2*h
zcgtO}kU8M-kQWe4hm&(w)QdQ4?xUTQwyTc#*9e}B>Bo9*AIpG!O1!5!2eGs>>+!BN
zh+PtfVNU8g(5h|LB(Eb}XNW_quq(U|v2%bO(|AklT*&)eYB8+=env>U?1zrKq;g?(
z$Zt#zI0Ma3D7<gc_^x~#>|wIQ2DUg#YHxEi@>3C?yz4pZAMwe!-=TCNFrE@|Cb1EK
zqpAwIB6{Jss3hgZ`=Gz3u@$tMcV(?aO+%L4)mS$x=|`bsloAebw9j<(s|Ikxp1tD-
zp4SRS#2oB0QE9s?87_H7V0NrbCsnqqldFq)!sV^Wp|)%<`GxSUqR$k#f|e7`+fgnV
z2b{C;ot*P7$8%N2KFj-w?~k at AF1-+2e>pd#1kaf(Zh<b(#Wl_J!!DULIX{Z?w>q;l
zSsa=)g52|a#-<_;)a*ZMtAM_74>{>S<NOVH>8mp((A&0deI3W;X#X7V-Z>KTzTUkA
zw;FPl5^gCve+c7youJ9P(r(?`yFfxXx%T$jjiQ*rWBcQ0NyV);Yy(?R&r-~^fM-$W
ziPv?ze&)k|VLR$w1bmf9y6Z7}yw#!AOs5jkb>JUcXsJw^Zplmvw+ND+#rvr6Z4pn{
zr5w^TOQ<KAWz@;AVuHKzeDf2u6zh*%?$+03t;f+0YJB%fta)m?Ixd{R|7!bD at A4H5
zy~pF~*|mr_5p;p;y6b?rm35R{HxKIw#DU~`A13FaZjIgKtz~5*?x2gS+uDt5H$*oD
z0AG*xxi9G`+H9G_6j#3p`^9?Jhs;v?CDi*1nG+rgVw3pRWD&ck6FT`hMnUv2T(8`t
zhh2yg<{x+cV^R;}23gS#Ry>oQ;o^IO=hf$RjF(D2coVyKVjUxY>K^eKkn=+zi at nJC
z2IQ13f$uYX>|DH6)EeLRtKSo|5vwwfYM^6zrgXJh8w}sCs*qh7DStJQme3~qt??jr
z8t}3bpIJ;ab(wkDXHKv$y{7%0=&9Y3XrG=sO3|hFzHMKx&QMi7VCrh4$|n150f|LG
zoQ6*~urKy=dHRbIYM3R%_G!=dZM(#~NUreF(=vh!7(Gh<lYCduLEhynq1)=%rY=3|
zf045qaXcu|KD*qN_BMQ%)86p+DYH~ArJ+kerA=$1OkI^W0j_bdTi`A4IZcUt%dl at h
z^Mk4*N>BfS>j*~+SQ?Zkm>&Wp%*7rFWi7t0xhhS5ua?BzcGcl`$dLm%@POcJpW|Jp
zsgE=rGgtX%a<`T%ao%1$gV5V#k6d7~bJ@#Ke_7W-{0?EQ-9|C7&ysuGt`GP;KS7%O
zKF>DAJBL3H{612`bIH|h8)p`~TZ8xEc|VSsMXvX2#S=2_R_&)`8*7$GI at dl#E4uw=
z4%jbYe?l|j0+=d-FX7yP-BSabcA0ZE=aFbLVqYqI1k}kmwd)3}aOP3_Ug!{s;#|Db
z39nN;U7yk!w!2K6<@x{R9qsO-<{`R{DPKB=yV3jSUyUAofYMuGUq3U~&M<*^-t;FW
z6_sc|E&5SKN*Uf2dV{Cmob=QiurshJhx?eYR>(mvB(xRU_aMfA#9QO}c53g>VZ#M>
z5P4%fvG(p6DP<lzW_7TV^pnoJfv=+<RudcbJw0 at _gh1ZdT9PAeFn@nM#{l0I1Ku6X
zGi;4(kbe~UmJVT_IhaRehla=wuXfkZ7;m31#N5`UAb5GYwrejp!Tl6juX}&)b%E#|
zo8^#+10)uaj0>_3BRQ0S=^2UK*m;-ODDxZ0{b9QyzV*x&6S+P(7LRws$J+&8ZdWPQ
z+jVHjrK)fE9JzZmaii*wZ72mD4}QL4thXZS{+p-53dNZ?uM8M^0V&}JJ`VXn=EdXR
zfWMnu)2|lqPz9aHO6FMNtNve}{onulv%?=v#)U7 at KM*J2w9EIFVSF^QVFT+DLxvut
zbX%&j$_bVpIOLB6>S<=wA>Z$iTjoE;mJU~8-j%Wo#mMP2Ol(yi&hv~;CNb?2H{tti
za}3>KR6e4q>eTG?DNz|4I?@M+1p9T2e(;;Bsr+!h^QPP^O&{Pnc|_j|ww0%qdvvH)
zIt{w`0FlLPL6`o5f#1YU_|lK~?W02NyC8=fEK`$?TBbqf{s7siC36$LPdV*?+*H$3
z?5FQwjW0%?UhgXKYkZ6CX`Z=A;axqgcv5ce{SUcmB{CLxPi<GJ?RAzEoH=`$z5XAz
z#<Nt|u4VH5BVd<Q=Ve{YrI0fUGGE~^qP>BqK>tCBc-c7U4!UpF*uW*u-D;3P9$LZu
zuLTB0O-Z_x#ZOMkE-7aV&-okd*YI6KR=R%XoPjQJz<Y{4jmUPo&Ayi!Mn9R|g>^vJ
zGHNy6?=~|)<>DQx;CBO-;P)W^DXriCwGeUd8c(e5#%-ffQ^EPjW%WRxBDpE0Xs6ql
z6Fva03(woV2V8t}!0mnj?^tH5OO_Jd0~o;)=2-Cj6W8fd+<P9;L6|`QADa6)=}i6;
zQs^EBxLavp1KFFQdz9h1lsI2?r3!Nna{gJ?u_WZam?Oif0iw@!Cl$01uIFuTvQ3UL
z5f~>M(Qm4W4(1MKZh}iiXbYz*C-^uV6&GEM(YA~sF~USAk*La-m}qc}!}hV(qnC_h
zjI}w<91_D)hUYv at bL_QvmQrd;m(&4$lKO!`-dnU!rG1&V;bG$IiY9)D--D#d#rOHX
zJ01wV>+t{e&Ucad;E#6>{%avu$IqY8X;QBJVuVg}SeneF2Ss~ynl~nNdpyG>JcF!q
zC*nD|kd2q^rQUV+RB;QZj_Ic##&=)j%AtX+rjNnqB*$E<b2?`$s&+%qkkX~VZdk=m
z=sFjI=9zoNR>r(Qjq72or*(9`h`9l|632ugzcY#cPte*eS|;0Hg0h^+##rSAg?r9<
zot$GU9F|U=^94D_GyWAmF^HFj-ry7C;UN*ayuIpOqdhs)G0xvQv+x}@AjZ2I<yKz}
zt?kk>Ipq3X$gGF!zYkf^5)Yg`trPY2xS=OI8M3Yr3HrTND?fmZyWgh<^JlA|pKTG`
z3cd%v at CsT!B4QL&C>ewN>mw at vn&H)~bEI7{ZXObU=MVpx?`3?e!V#I at TMh-Tbr{z&
z;aW$*Uvb&CH at bV=Jgh^$dcCcX(fRF!?chan-C=^mUxsTxKY8s#zDGURIm~L9y#93Y
zchaP;?Z}x_k8f|n7%rcdouA<MA#*UEU}V}c7T$zCK;aXO_+P{s_zbfSdSZG4{B}%^
z6X;Jk{&)1}bLh`&iOndW7{|7I&f7G3UR}Bl^CIf*A$p)1<LWVoHm*nyE4srR!k##W
zYXm20aBLCuFcKSFI#P>$XK>xWvramnf)9?2n}Zj<s4DDxg5=!=PKWHPO1j^2FzEs0
z5X!BRPu3$jmW`<QBw}9mdvsND)O$KfZ3*2>WZ;*$&ntW_onxz>Xn(x_QTSR-7z3T&
z)yz5SBr6BUtv2&S8+upZxDm&zCXeSz<$H@@pH%=;BiS at to$i^B>!?8*xB~c_JblWu
zM$?1sLE)|VufF1rB6A<w^S|kYkLDqtvZCi4;_aaqc6CBdPK at V5ju+9@FdlA;gz;@6
z#Mb}vIO56|+cTL&m87atHJ!3d>V<Dk>V<yl*h#(cW$1<PLob|7 at Ay+MJn7L3JO3BG
zFfVewQ}X}Q3!x8Y0yC>5It92BKbp`F$98&jj0yel{{Peusevv<&gukto?dlpz5#mX
zPedm~Oy}o+>Tvr<3*PnNZZ$Liw;l&uQRc~&7v$a={K{AdSkMo1{E2Qzf5UvWc~^u}
zRg3eK;>F-KG~!u=QaKY$&kGzKZzMWfRuJl*T&noRBu&mRkZq#hF}0L~(fT|Ly>L*P
z{OQXnO&GJK(BagsE70c-0xNtdB-Ql{`cY+yn&@wNm7FV%3Zl~i%M{D6#d9*9W8hdS
z54pbydA&UU?>z|&W{QK!p_RV|Nt4b!zO)cI_bQq4E-jVbQ%juyMs91(_B-Vts;Q%0
z3UUr)mxSnY-uM=!`bqsL7xfQ>nEuq~7*E@(z4IpYH*ob#=x=*c$~-pJ<0&VB_c%qq
zDZ^E1^GM7KnFmTD*Eg?3E(Vi*gGRd|EoJj at 8GH@$v6uftr^}zv>0tM6up6MepYbk_
z8~vsVYkpH#5s}e|Elh=9PEB$JGQD=W_d&!Pmirdq*$-3tE?x5}RSr`F9;Al#YF_yj
zWve0bIxrmd?$J4g>^?e^aH+ee+i;x3s=|IzpE5>Sx^z?)oeA4nvHH6O5?*hN@}kL>
zP3pMaq@*RCFWQSd`mQ0xWBZ~S2v!4JdOu{zXU-igk*8uCyo>iavHc;oo577-gzXQA
zE=qXy-+OSlj_^yr#~PL*Pw97%(W@{IA<m6S^lKw|BY_Y4Yomu-|Hu9 at zo1dz$bkVQ
z at iD+SchUpIA1`VFH^{PN<Prj|t*)CJF_m8iy#aihu+OEz<~)!hQ`h?<CRMsil!ZB3
z*S!tvY!SPbKBh0_Y=BMYeKMyYNA<A2*kc=ub+x0<2<^3<F0Y0_LxBqVnmw>+{D_l^
zag$j3z#HRCl#ppwe at t?yjvqnJJqzTD4)Hu`>hF+OCm?<)+CTGREilnX=(|`85MH*E
znDa3{>Fdk|O~)=DdL>u)Vw3|h(jG2{0va)leBiqH4a_M`$K$Wj%W<3!edGg at KNkDz
z36_Ti8zsh3k>95*1^iHLu8+J<&y?EXw_?nE*+#?!sSLU$AJ+h9(<jbD+*%&6mkF>H
z380U)#=8j~VEIe$JprFO{QqdXG1z8 at J?-a!uZ>&!?)u$d6@~mYVmY7Whnj3dTq_fO
zFxRWI6ESfkxA;oui=3_Ea`>XrmWxcZ0{l%mOa-xjd3ACV=nI~8Tf$@Yr2TAlm}ivi
z1LBGIAB*ZezLL35D*yi1$#)p?I_)jBd*dCjzEK$zOGqvsPM>QBd49Sb&w7+_g%PZh
z_hox<BXSvda5ig6yva&SpEj=EIY7Sk`qgBe>$l`l1#I79=&0F~ZGTVPV!!IM7IJzT
z-ow&`IE%>DU)I3))M7LEtmVveeGFdnRXBIdlV`dfacte*E%xB$wZk_{pN+ca+CEs|
zcg at pI1V{Kjt?Q2X+O$xSlNHiNzQfowc0Td<Q7v7m+}Oqf at 8S5dE3mbW7}*E#zohjb
zi})*(WlPzl+~s~QD4dj|a*{KH<TxdHPtmWl=mB#jiOmMjm>$?^y<LF#<4lZmf$JrV
z9hYAl at q0DuA#c9N_kc|peI#|cm|(q$?+`w!CR*THkbZhW6OFZ$*BRsnQj=I{@F^hP
ztP31Y!E<x6I2Xnr56OluT^Ob70scTE-`xUEryAgH49V@>gdu<6SFMfy(p at h}pDChF
zccpsYg?-JV at 6$SuzE3!B#zLOqIlm(M{wA#dQlo^xW;X+y4O=R)OECo at AuV-5a>O!$
z$C_Y!pTFAalJ4run3$VJUm)#`K01j57vJ68j#w)hu^WqPI9ok&L&#C^LEVHrdB7{_
zFW?LXPiK3iCui0z<kq^+lSiu?xwUS3`0vTSg`Rv{sCVf{O90Nrz6ah-nvZk8K~9lh
zE&kZ|Blf+WG!Oc>9C1~F9&Xk}ex;FhS9CFTv2VF%;rnd&#6fNV#%8_8&-F2KlP)G$
zU;YJftFH*JK9j?)vj>VZ!9(tbUD6ja4A1*sF0TJGat8V&Ey6v|BHw6)hl>{bX3X{Q
z(~^B=OW;I3ueXzYQ4jCXzRnUf at x1r1O`1KqkFoeo?mOps2b}v&lII<8y_p9m-T}H@
zG<g?-p(l1`aKI1i+Y(3goryo`uO{Bsw<liIcO-rZ8=BhkJJHSXti8mS4ZU5DZ}0`D
z1F~)|eEyluiF}n&3T)2lG=o^5Rv~UkGl@^8X$ypW4I6y<#-c6-^Ff-fxYDMeD&Z^s
z33^x+=Stl$%EKscqqLwLL)n0G6lEhyH_B#|cTi at bBspR7Q2v6FLHR36G0NXj%23`z
zsYKa|QibvqN)5`>DEm;t+D8qd`~u}olxI->$hpGZ`nC>w^cfEN5w^|PK1H_ce#7x`
z&K2nIUxM?0loNW-$}ldkXN3GB*Enp&iO8J^pEPMdapLBA*7tU<wSKU3l{IxI*ZT3!
zDC<W%Bdnk8<XJOzrde0-{LuRH&iAeBcJ8sRktTn>8NUQiE@!tZd$2_D8DGvI)>LGO
zccWduJ}Jc5a@$>mdy9AZ95A at j#3&hC%2Z)Z6<d%tyql%vP1ysEu^SWnbXP7o^7>V?
zHuTB;b>iIo1jLw?z?PLuE4i@;wzL+$*wa_nPtS_)llhgif$5UUr}BaKI^1XRE2m4D
z9LOA8d$~9v8FD+;Rv{SmF)dNJ76Fs|Hf{CJBm5YMRorSoPBGsDE|N1`Lvn_*q)Z~t
zO$KHyiIoAYaoU&+SgAyf`~eYc=hmklSy!hj3~xV`;kbc)a%B!xk5aA7;i=;`G1>eg
zuKvKa at n?w5V9({r@?N8!u5;}D<gKra8QSXTbpzm)kN_VcU2vVw;>O1Nz_uWD{m#lF
z?IJn|yai%ty<Z`?<_zRiRgJQc^9=GxKGfzbTW~sl7+4PF_%q3{PjT9?CJul+O?+v2
zP=F^t46)UhqJL-6v3LAAmgVNPspi6r0FuXgswpGTZOvH1(_NBa|A*#>GfX_)WeGQy
zj=zI(Ftb*f&CAC9b28qzbt=q4{oM8LCB&(^7QwD00 at vGORvGME+i8p8@4(+k#X8`C
zYdP?T2R%z?8R%OBp^1z at S~Nd{{pQ#-v_Y&UaBLc1IW`SB7^el at fczfy^pBS_D$G|n
z7hU%<`rYP?0oOC=Gi$xNL_&>xnnfAN`#D2vZc~MeOjx(Y(sLQ^`RAGX^G|~3wu{o)
zFMtEZU~d1!32cL!cVwFczIjb`hpIscn=w_TssKlV@~fPbInm$sfLDt?2h7`EXEDCj
z=St)hR~jiR{7C*-=Nwv}b+HoT`T3}#o4uh2ZnlJa`qJfpu++nP<nyUvNruZ=%Hg`;
zN5sP9A{T5SV=?fR?v*C4pB}V>aEg&O4&PTjod0;z0<`lD*Dste&6fj9%x#=UEYHAB
zMdrK=U=shcF8hDfecDqu at s-p6qwe(oQ8#R&E;kExb>N)J!1wNsw=zjm`Db5(GnR=D
z_q1~q-m}~e&O6f9D0PgB(FT at KM`?wp&DSqJ3fobI>-TuK&B$qV+2iN6!j|rHF at 7GN
zTmIa`h(R=f1OIo#4-WY6h^ia^H#1%7W)|nY8T at -#IsPA8*Ajm$E_%GNuNM1i!!+2=
zUh|rr7o{671n0?_kqV7GI2Sx8k+^Olwu`Y19)sYrFb(P)Ue{7m=UfRpjskXpg*ZNr
z<3FJMMd^O^*b>Fa4b~Xy_2OF7aP3=tM{(>P>U6A#?fn(o=dq1==HPbJFHbIk%|pIw
znZFm#`5x!Y9!iwIN%i3PH>l^2vI|@*>k-4CD?BrT+|F!iNItEzSGudQZj44=sZd71
zR9$Ic^sQD(KlL5x$TH?fzI^0MV1IN)_K`Ed&cAFgWcZOpKaODEZ~qGg+aTJs5cv{i
zR4>}x2;RhfHW~FKVvw4o@<2VVy#P2y-G*5sH*o%T)TzMnV1H(T!G0Czm*RZ2=X}H?
zAh)87dLpGPLf5QrI>d^@aRu85ECsNRs3$=^DexY+55B2^Q=gxJ|0evew4r1nz7%b6
z+kc;@e9Zp<Dc249mwHNX|H5Gto)7USu*vi at Imy6F9oWlcbDqHeTjX9jun)(*Zhsp*
zDi^rAk6Xd3Fv8V+J3}Od&fNOJJa8&p&eMWZyb67UV)d9+cn&Rj4rXWSI`T}gtybhE
zGOIbS^l2EYdtv1LQPPs at L#IOZh*!S8z(5~ZP*1BEeV79J$Mv|^qo-qE$;AIQvYj(h
z7m^<-M3m7}v+L9ybASOY|DEB&2Z!gwvn<D&Q5RUBvK4;h{o-t?{P8f~T*rFI{%pj>
zN)Y#Y#4l%j1>f3eK7WS+SBh(ZRa)SLJ*tNF#_&Pbo8ofT4(4FcZZdv&Q())Tc~Q`R
zzK*He((iifk8OU$f7^bVY=>8;s=;5Q+E(X9QQ(tTe+}KI*`7n4Xv$%luzez=D!MND
z0I}s$BK#Qq^6}e?Ujg*kEP{<&I at dEkV^oTp$U~!eO>m2K<kP<8+EX=GPVlYEKR;E2
z9CZ{h&d80si3+d3<pj_8tp^Rjt;PBtaA*a$f)1s~S}Q-(b9MA{HdDx4_#>AwM%wZ#
z@=<IV0|u}BPx=3*H|!OV_uIXP2^Z0LpS?Nnt*VZ&Vr(C`TUUhl)-i9jPv_ST?GMXw
z9K^BiP-)z2=|A*Vf&1V$O2!zTEaJvW{l^~1_!*yuTp27GU4DNU;sqt(Mp{L<jBfvi
z{S_>5WWv8}mL{%#40*-Oe9TdCmt4K<QF8BQ$oJsisjIm5mwjaW7wQnU|J|p;_Wo&y
z#EbcVjZz0phc11UMvRu>`_vM)lvV?mU&{U&|MkG_*Fd*E%(9T@>uVs-8YU+1bfwup
z3u8hH%s#jX?QJMaQC>o+ahN^NS6nrFor)v8Vs#kdmpz)MDy~c`0XLk=SZOa|%y9~1
z6~D-M5XTzQ%5bb0cAjD*a(iQ*{c7y-AU7}6p36HIqt4qNFDLxZVys0F^V$JBdTnz{
zY}~LmZNK4#wFPW{S}AUc+&5GemKj#jS!5LU6?*C8W<zIGrt<p=bM+{<k}_`8voC at 5
z8M&5goNwjn*2#cpRw5Q}{;z)0<ab{2Ma=tTe!WB%;s8C{iK`VJu2AIFlO}F$g8Xmk
zr;ZC%!_a9z<Sj!ib1!W%SLf}dgkh!4eY2%`uf(L$6(m16=LNcs?)Ww<YzMig@)1sl
z&6y&%^}_F8n$`iE^;Py%yTXvPuC3s12F9!1+Q*=;<z#4?)vXH5Ckm=4a`t&}<+=`}
zL8ictD`m;d%E|3Y{}gjkS`|IpV~1Cn=K_oF%;+=EBizDi^OSuy#9=eHsov)-eS0R_
z7WzXPaxJGJt}!dP9P8<$b0l<2H at FWOx6dZB_9S{bXBO7L2dJs`y-R_YUm9vxEJgei
zS%dPld*nZ!Tp!SPG}3gY0&(7^=dFD;s?0|H3)a5M=YQ?1eC_k^gkg&BT0+rxgHo5f
z_RUwv$IUIx8gy)Z9K0>%8Y_Dr><1>or$l0D39b}6VW|gKnn({p?tMV?8Kwa;KOUUK
zo00$XYv5IGV19Xv+A+b+ICEj&bYGp|u6L$XK4%MK_15vN<{f!E7-3jpbIUAn97bNp
zT+^{mZ%As<0_T~u5_sTHnONXo2pRh#xb*9=mf1U&B)EIuF<c{^G2$8>1(_LFqU!?6
znuV}4AX6Vx7uU`YrFW at A89CLfEE;`nc8Mchtf2S;wO3VoHDsWC_7m~e=$1}N^o90P
zo{0wUQNS0#P)c!aw~s;Ko<e-)|7L2La`Fu#@5dN at t68{kXOzxfWvsMKXY{FypgU=d
zhoB!FPAkTEfRBkjVytGu!G)|~vXS=;oUlf7N*&?U->{Lnk1`1EPRYeF<ngqA&iq8x
zu+_ljm0bW%hvcs%aiOq5T|tgwoX>bshLuXj5DGj6U3|eraxepD?KzHn9)yiW7okQh
z0PJma8A>I_3gQHCtOljYa}2&cx)#S^8zSo%5{JA*L1f_OAi~c8UHBx%M(5x!xz9g#
z05Wx|>nuN(ciJxd+JHQv&y&13o2H75{z8$EuO2xXQ(BtDFCD3KXRW*vBUS4cN`~~?
z>idk36&46pQy2r{7PI+f+^v643ar1?f8h}7U0SFBm$BmO3brH$&*-`?9%l5gFLe-J
zK>y9Q8elG(XyiX_e-(C#9Ozp{tSyw_DD<7X%U?S5YG`rb+%wz20mv6~nRrIXyvnp}
z-sQ+be77*{P4EGN+kjn6&FKP$m_9k;#g=(DbdQBSwpu;HfUlTly^5HBYu_Q2WWFv^
z?o!8hwAPXRD?aVr<n|42cE<#tr1uo`;<`fSW2S|5v{}dADK^?OeX9MxwMCG!Pb34r
zn>yE*HK(diCaofzad?K$^4>(>&EpwH<Z4~W98rs}n#d5|RD15X--W*AsQ66YI?hUD
z{w{`|87a4&@YLTgMlQ0EpX03_e6s~>Kkx>JHLX*_r*^clvM=Z1s^tA)q324KD$Wbw
zki9I*M{b7xcq{lTuhY9}cjI at ohWP=w#cS|$2vlpS+HG#$1NPif8uG1HmC4kuXzr_D
zaje(4q7FYxud!L_69jy_iC+qva9LQ>hw`xO+eO^1dMdY-l`*!-!)bqwaN3V;;+F!u
zl7(+rvZg#>CfW8p8*IB_^=nJRjOR-8R<GX;{bIq`rXa*E-?{@XNXc at +sq*vHv=wEA
z81}69R<PB}YfqKuWDOR~QU=Xq2$rlD{6If&PLTbW%S}T<$cA5}iQ8wu2Y-l@)`~np
z!FiBz*)dl2cMH1$4Y%&tZekqh?aL?~VpRq>pHQ8&95F1)++5XwNN1OfCaiy#ce-27
z7(*&cebF8jd<j*zCDl<!){KArk5 at S=@t=kNhk>82qqCSB(&Rl&gNj+onAqj#Pn83=
z3!S%ODso{Lix1LQP^T5`qr!9Qvl0h?pH&2Wass{w*2v)gv8?=>Eyc0&JpEwVETtDk
z>gDMp*~<@|(x0Y->T!)!?$+wLhzH1nKB#d8(P_j!35<U+$^XLCd{&XC|FB}hM%b*R
z2Ej#>7y=v?8~OyWEwR5Yb{s)_oLmtLJ92(6+T><Z*ijPS?HaW8`}`g9cI(l9lQsfJ
zPA=-~9ZCvu_g2Id-Av at mfDe{H&Lw}cV=x!*h}=Y{%CTliR*n(-BDwyZIL9jZnPbK0
ziERkwor&^9Pn0g`N8q%9xeSuS<|y|*0{^LX-J at np#x++~#uu)aGR~3pQF$`4fu#a#
zH+XDwZ$_#4TdxL&#OgtJ8B<K0&)u5C<LdqbTVl}C$!lJRk9s2&YFB!6yvU5hX1iyt
zdkbsbA3W=>*Kz(USdYBDLe at J*uBCMQ9K<%cZVvW)VY?dJ71(|Xr2uQ2&*@TSmsIX8
z^AE<oKF8YTTa;LTm8g^lr1F^p{~+>S*v|vEFLa`yQEb1DauD2Z at 0iPQ@2re(@oqQC
zGkp0V!G)$;!_6Hlkzeh=2nY9J<9<s}{sm<>N)Faa8S84eu{rt?Kj=`W at myJ&owrY|
zh!^Y8w?D+b<ETqvKhYJnsJ|2Sb=}n?=kdQ0$1bA$4f_|M|83p;%*b8*e-``YIOj07
z&tf|q<zm#K)*a^Rx)Mfy#Q(oxKh}D;UqYFO at _8J80drOm>hRzGWuzGQ;lDjNBA3de
zPGkM3qbtSL{Hxs9lY1G0O$YXYw3p9re+yancvtv0kbWT^kS3iyfcd;*F#p|u!d|v<
zUe`ziu9Xl_Fk&IseCN}V!-9u=sxy$EyBqic`^^#fACNCtPWj-vW75P;@vJjU6ZEx@
zk(5i1wUo}U6ukIF;%01 at d(JC%i3js at Uu1v_<y;Zp<f|ApONHDdQlg{7MzqKw^&|ZL
z3P#OW;h7Rsl32%-#jq93VI75 at ROQI@JU{tgV0L8GxbETp-?K8wxAuOCl at 0$3crCj$
z<h$~8@$%)(qVLsuulgw6l7~n?1lJ}w5OA+p at z-O!JpH)2^F?sohJ%wGaae|Y&pvQ*
z!WYmBu7sbma)jCZQRZ>4E1u&F<QeIYY_ypRe#5D-3)O&QLf@*Oz>nU3CaoGefq}d6
z;T42K3U=-lwpvaTH}<QSz#C;H{m*mW5_XwkaYTZ_KQ#_ at r-640dQ|441V=&iPw`FY
zpUo+;;_5V`*f?QxjWP#3Wt8yu8WnswaM(&?5#p|PN)u=2M;007nD at ciH8I~$tlRJo
z^~fhV*CzR7-q$ARHx^bS;%RfteVljA&J2aCIJpROFk-}V8<=bsa%2bWywIF+wc1~G
z8 at 4q(PjxrslG>FCZX at JvZPjvqf;^SESZvMVUcvsEm7FG91^I5dd9Y<Qpp6yagL`&N
zm!WPoWLyicPi=x+!1wJg=5F27tJbY76AMEjzxLcv_riXZiT?W>kr&{b7ZE=o{=bNK
z at 0TWhu?hA`bI3xYG(v3z&xUAET1DRW!2?y7T?$Hw<9vJvy+A$vSn%BCKjwEv8ew}#
zg5G!AuPIU(EEn6nYQeF6*T*oJ|Gv%(zB0%vHMqSpgXY?f6PtKOk@>O;IYuI}hBI$y
z)xs9HnD|}zUEzm=<Rp)t`4aSg;H`(t$+KlV7A@=sk3!c0GuHPJSaZM+SE_^`aWtK_
zVvYqLCuxJAqaIE?%z5xHen`G$-i`Q9=#hENix*`tnrbh?H?<n3#KF&q at 4q^&!Qf>>
zu97%ka97M at OhK{cC&7^-C;hMAV#vpj5vXTmW)z#3s_K1Ac{{@W!^Gz5jLkfKyo7$;
z at KIcB!m&O}##ZyU{d$9}Kg%E;Jh?S|ux#tI;2ZoY%OKo`XVdcC;sW&B96o$G0YR8A
z>y5o=$8q9svCGF=wz;u}P%8XB*>v+2$gp2CZYT>^p6vS`@s&SiCFb3k$jSUbZr_!>
zzs4=d`@L4~nuFL*ZsfJN*Xgug?Y2=zNxy7c1*;tUt=NA*az~`~#bKX`b<$k8ru|lK
zSbDgjpvaMnHTx^Db+$=&J^KRteb-8qvsn9(t71QFdIOLH^BhOkRJ*Q2M>1zraP?(%
zh|kfOCDNh|MTn`W$k1ZnRd;b*YSzJ+*IhF{*$KTQ4E=8!vlsn|8zCPPeiCc$Tl17U
zgui at Ep8ZG;))-hTWQPea%K0+;cj^%N5%7auCGqVMBUcCVrmes0SReardmZ76=~tcn
z9sZBSUe}dZ=*!{N|2PkRZ{#7Ls~9dv90TGT#(M43fkS{z at sl0gghQt9GihtDA|vSh
zot15fb#0nCw$6lh4t6Lb1+Ch(CP!_?n+j!y_DdsMHlz)egcpq;c2xM~gd4^WyOPw#
z;JSWUaB(F2{E>`s$gsokFV~zuxIS-9zg;t=4U-C5qOxy-hbTO|p(MP0yjqQP!ode3
zucI#V;&cm<LkYY;c;<6~-n^LZL~w37dLh@*CiBoAV=ru@!QG1Ytyq{ShTntfmC94J
ztewMB*2iOmSg&*8W3S-YhkHHtb31TCC5$$s#{7utejiiDA>Ohr60=4%CEt``zEuJH
z#vr&nPGwXV^sbcj)rmQbSv)2Cb(JKmD!HA^B at 4yuLbHm$2{9N-abiX_&bf-Xt}kL@
zV>zy;C*ryus{i6_vQFTBQ03Rr2p?mo)9;d_L~!>(3G2AIM4<l5?sYfCx+_*jpS&?F
ziv|t}aW0$rN^YEaHqR7O3M at bycjNh4tta{L&0s#jIS<XxsA}x%lj|#4A2C(1xoFYf
zH$t0CWJ?{DsP_-px&~Q=;v4W~4DvUDcX<eFyPsVP`1#IN8P%A3_BRglRqU^6AvgB;
z{IR#tmmrtM#K>_BT^2I6oe^H?XY?7@%zD*ymWg?DbR)lhXn*KY*wUx-j=(Qa>=#Fa
zE0?P~a>SO)X^QS{lZ+f<DMza5SjQ&d;#lkwmq>7H3Swk`MUJXg<mTWeERBbcMKb&b
z^r$!ZZnYE`<C`?Nd8LWTi-R`e8i^!E1N>1|suK3tI(|KPH;VHYZx at 1>J+Ceteyl35
zOU;;%|Cv9Tj}g9L*VmqWOhK@}E~JI_VRbI-5*K{M&Q1PDz`4HHc at A?(a~g8kq(<Aa
z`6IC7bwz072ACFSk<H{R;t4Y(&T|?299F at t*h9n)?2o!<rg+X<j$A<C>38~)df>>^
z+Q*&eU<dg+t<)I>4Cmucg-wY67i<bDAfpuX)0|t66O5HT05;TnG{-(9?!)n?=o5`e
zv=4XV+=P)rv7DOf+b|9c2KA&WC%DR%O9iWPcvTVmao%4L=Sa?9fRe;wKZ2Y^``ESi
zMd8&y?-dttM&Q?bEYCpJ%($*E|EjtP*YTxK;Mv%d_m~F%NPycK>3NR)1l;duU+_7h
z-s6+^^ZWCDvnKE7J9)o3llPnb$Ney-$ogC{Z2lvk3bD($M+`d%{s6u|{~$NvyCFRI
zhMgQ%>s~xpiEk5Z%_tEQO>~Z(@pa)d5)z{3bQ|%U<{@ra4s)<rQPCEcih1`{yk{fv
zJ3Ld2wYF*fZpV7JtT`FFS02$-Q?>##k|xR_*Ikj;cT80{zc(X}EwMM6mt=JEgs)2$
z2<!*U6|lFwj(e)Yz at v<7HN>Tggt*qa#~b)2de;~ibMQ{gb1tk`D!i@*7A038o;&fD
z9y};ojdk{qDqXH=@SA-fd3892>gjBqO8!ha(HBX69QJ|n3a>WsvhR=X?mFQ5Rh&ba
z`&Erf7VOjYN#Hlx;i%&Ln_p)y39nApW at U3sW80;>cFYVe>>S|3<{_2;YY)4P+^_Yh
zTi;lyGE`Oa6 at +7D_77PGf}x(cFS#eXGDX|{9#=Q=%(x%&&7=cMRymj(b0nrA at JzDa
zaTwfnRrqh1_%HTi6)vyM%FD{+Kf7G>UZS|)UL>l1M$rT>CR2iE_?mF!V$A80o4AqW
zNW=L?^6a=qg?}M=UYwte`6ZOR<Jfk5uaCVb*t at 2WornAv0XIYJ|4)Ye-uX+<Ip$7R
zC&SWM=jV5sm<PRVVr|zFCc>+OtN|fYB at BtV(z(vUUXL6PM31)YaUkX at iAVYiCmmc=
z at 4|nOoL*yB?3J(y9 at f-3h;RG3uL}Lvdiv03TG&c7=qKXwCzG#=E0)f8?cdhHo)W(k
zza57aup=UNfU9$!$2|_&OkVA<TOOjcTg>EsVjbTCT|hou;`MLx46Q`Z)1A1+9O59J
zpItkVw~cLW&MB7PJH*~gowjFzm+&QCFT2$FH+&Q1;hv8`Pv<utj)|9A4{;t9w{n`n
zIsa2k-D at s_3+}uT^eN<|1iEiiXJ5!U at TMOF-|$LT2jbZ&P8fWGMprQzYY{oF<w=Gk
zm#|K$h{$msvsE&ORYg@*5&e+EDz=&~v9tl_X2J2wh|%IY%t=S$MuB4^$8uc at aO?<h
zXO$rzVjo#+2#Z_s-w-!S<T&<8q2H=eSAhTffSE}nm~euTL#aZ!0r}!#<4$fLuA;}7
z$2sGNm7McLr-hC#|L44**<&tIJW~QWitjA$wclo}w#L-mkG49UDF4|bXD*#rrSc+j
z*wu!Y5ksItxeBEk<!Y1%5L>Vh+gxlHv-cTZVSi=#JN`$4Zy^@tdQBK&F_Yr1d)Lt$
zz<DQS5^PNBM<u(m^bt)s9>qRkh!EY~W<_shQg?IWY==pkaxT$FVgJ+FUk<DIy_DEI
z9k1K%sh{~BD9b{<fAa0jm*T6`R?c|-8c}j8Hz*eUbztIMwppnb<OmhnsML2zECkAb
z;60>xk2Rk6STj>c58~c`=LyG4(dLb*@7YwT?<2Mh+)R6`vHc;+N|dP)SQl(LfV$kg
zKJ2Tpji;ud{s%brG2SZ?Wjc93l>Z`e751FH$MJrjMP17i!7pT_cj4R(uO{$|V8c|U
zei~otdCzz7o;4Hi3ELRjwM&?z?-PisSUafi4X at BA3|q>w{H`)K@{WFGuCF%#Gk&Wf
zZ7dP;YrwA!xZ8G;@6Gjn&oFS^NEgO00*}=t^ntyu_56A8$=}0vzBo5F)p9~LINz{z
zR_B=73Jh-j{o4YwVlZckvyzx!{k*=Mxsq0lFTq?~B~7wi4xU?kf-b$IM@&pQ!G|`!
z?=7%zAbm;`mc&?|KYyI5;j5y3I$@_x2JUTq at 7SBr<Hi0GVp9?C!&-shfrOkUaI&<|
z>;=crsV-Iik~dCR2JH>r$NzpKy1R3)`(fG|aU^cQz2ss8)kr@}Wg<S}NLMNHu_-ho
zEG5BfM(E-O7X4%w4^34m8$M^{<S$9QjPo`|v?9hgv#Zkj!UE)uC|2gRT~t!XHqW-K
z=&Atrd1CzTe`}v7b`8%##^*%7i0HdBN9>K_L^}2GL8@@3%zk{GR8 at g7!aMxV3U{yR
z)8Zjhm>U0I9cl?Za`+!B6up_ioUZz8GyY3zs#i$*D)Iki)UE%FhK`#{$-2s*Bdc&7
zm00U_F-rJFeUvodE%8d#ZP{YvfxMq}EH5d}7=7V-0=X`5Z6A8~**_rn_HMQFY~_4q
zl<=Dj_w7IquP#bA`UBrOl&z|Nz^#%mH$}?be*>4kVZ|lh$Y6n^GP143AU+E&;Jdt$
ziv`XS)fddXz|XOsu6K!cSN`fx;+^QUJNgt+e!yGDXo0<-mUIVlw`M<MIhiySzQD)@
zT00lq96IshIj|8(<=cxVvB|Xrn+!bqN#-ck&6s><Ns~9uP1*|%g-Bdy2-opz7{tEi
zDHgo%{|lQeLoAL5n+(ih?gTa&Yh~acNZc)Woo<T{14G%$c@*E{Tuj|&_pf at yispM=
zfez6@<d17`g1b?$tLH3uSh2qRY*Cw_tDpMhv%d`Whcbu%y5hs$&$~MCO&%E<2+cbD
z)Qb7NwOG?4K9s3e8hF){-#<%Zyb}{*;+<O!TxCj_<8a)@JgMOB%zq)yW0gk!;H!bf
zJl#d%=s<{>_Y=L?T>y?(9r|n%c?Mu`4$V=YHFe3UPgwtlu5XWPy59d!D+)e^dCOyH
zhKQteVG at z2V;M#U6A2MfKH?P13{KHW$dgLK#zprL#>O at nW5BLl#=rqX<sx1((^ZNB
z2A_nD38ZEx1f-<P at A)3s>74KR{jtaE{kgsO`MfW$_v`(-JYNd%pwJ%UY%wSoIk{w1
zN_4JD3;WuZWd(FCn;6b#KY*O7Row`lCnzPc!eIor75<c*mb+ebG-4+8)RCpqGe&mg
zVBHKkqjxWI)dK&h0>_7E<S}|D{%17mmNKibpD&A6mZ*_;@qAZqmMJ{H#}E#jpl{Bo
zv}nuoF^HR{1$Vuc%;|K%-{ZD#{w<yC-G{%z9(G6&mwMb!ZO?Zpd`RP!PZ_du&z4cJ
z8$!3#8xw$-HYxUN9zx)vI5Aj#u_to)KJF|(ym2<UE^=W0x*(2s-=+ZQ at S9aO*hEvF
zljl4&Gavb>WlaWA6cwvf at -#x^Z$^AZxknyl at 5&CjVKrlK{~!;!WXFBTb%K)%UBwG@
z`!AlGE*%VxxeYyk?E(F!+vAI5tEfugIjFthCl9?^q-@~f3#hANW5MZ0U>R5W&3o9)
zazo^-S=OY;yU?bTJ!Em(3$A`$;8%)kp&_|6uDKr!ehT>UkOOIhE at 5=XH+b*hLzxf#
z*E9TH1C<@z>b#!v=j$SGDmE?l;RgJ-88HqG(bBBb1*ue~qBJY>uP-{PMGr8s?y17F
zX;BXwd~>bv!*Df6OGC<7bB|G!N0oZO7o#gJORLCbGC4P%yh;~7`7Et`61?)sUunf}
zOO`J9+4t*4rt<k2PpW8f&}Px$@4ldab4U4ieGkqrDY{$!T(LXub;mRAc-9?taPtRq
ztcI|#k|y_jRb!5TD)pVd<pv$k7>h?A4t-h-zVrEK!#T-RY=MxQ+3n)m$hq-m;j88t
zCG5ZJ=j8RN5XV-I`gMib(~dF1q}T$BvW+=75?jzB0xq$uj6RF_wc-#V&-Sxt?+z*(
zap{MYhhEh at CKf-9?Dp!&c0o4UrMzngwNepxIa3)Y&@D^tsd+m03nSv?S1JZBXD;6z
z+W{=na_JR{oO{iAE~#hzCQXKR)7w4McuCwOUI}E%;x7+ij#aaK at Se5A@7z^~pWau#
zz|J<$^@O}K#3ub^8yoVMA@<ED#q8xLiS3>P`DaR(%42$0(UWa#%aduW9`QH21!?Ty
zDos~6PtL~MKbV~BsbOol-)9qyk~w6pvK1;`r!sl<qCQ_KwXI7@;_zHKY!cPhm4_HS
zV3>LvM1mL@#y;kQ_ff8#MZVmw5;`yD7_+dTz6o|r*TyGu->jp}2i5NKgNHXYa2u>L
znHQpFUg++0tx#m&-^SD>#VWD|ZQTaM5AUE3Ax<V+;mFTa)RkpQJ1Jen9>J=Ji#>)&
z(8!AdM_R0#I at aPko!uRN`<s-IIpOB-&iFH~5$wkyqv7W3_xWds7+LdyMRDG=rgwKp
zW4`T4<cdT4gv_<GZ`QrN^)0kZOYO|J-!(_TpXwt~DdwTB8aO;od6l%mz&ZFNd&U75
zW)t!-lAMycphY#vv5q*RTHuB54w>3(Zq>18s49H3NqJUi at T<Oj9dkT{a}Mp3Ej)$%
zE|nez+bn|V+Y4XH{j<QA4g<R&mobDtV2k!k<1S<~g;VJkN>B2V9Ic at SW0Z*VxLkPe
zUBG)sA}8>1p)csCj4w$XI%OVXe$8~#=&$5<{w{;<vgA+e<vYw07sM4N=6PIVm5NYn
zKV|9?P$zpYQ-<g|)lKBf3+-}HClmA1GC(tc0s4vebxOi2xfgpou<tJnF$Wggz7Kx@
zwz6~L{_w7Fe%CccruRvVhZKcCnV}g){!BBQf|z^_)~J>ut>T4gZHbo`Okt1WcO1WC
zR2{3N1Z*KCW7XW+bz)xa`gpEn!}NRaiJVIYjIn3nV}CsQt=`>zMqr`jWW6)(HGi?K
z5WdAZ<ej?=ROsrz+_cm3KJ{u^wHN0yUdtY>hQH)W_^M~3tv~TroHHoXDH&|Rsfsg9
z=JG&CX>|Q)HSn@>BJu_NNby`Tn^Nn({S`8%5tp4u8C<@=*f?fB*mapY8QC5x=q)1O
zmj9Uo`8t=+DN5)%O=T=A65r>&yu|Od=<Di`^YAPx5r6FcNy$G8rDNrhqt{O<Ypt4M
zz3b%y=~-(*`sz02`_qidxG&#O)}GcZ?+(>3sJQMO_HCc#wUN=U!+UeJ%f$*rCffEY
z0x7G)n`tXNJk40xyy%U>Qjw9)4`0^1yQgubVkBqn5$@r#62Zddvjy4i``$3p1bb<1
zNbP=eXl<{IJJqM;yQ%9IFm>ym_->v5+db-+q8#f;do1coJFLuDAXDUvu0$pk5sYim
zxdAHl-WrbBFYLh(1AAw3Ua!ZzKJ1*=ZC%P~|6rRDFPcYjx+K%4v-+S|pG#QV4g(jm
z9p!dz11pQEjXCya<!Un-+uTN;Dx~|YnY*5s7n8=@4Lv=<)c~&~{Bq;W`a^{((J_=O
zb~J`u8#afe|872|SC-~$BZs(0!lgYrlr_$>Opto+aq81^a%%tA4b-)-GpWI^k)Qg4
zfx37hlWM~{Dw4zxU3GuaiMdqDo4qP_ at eMMr#!HpDrpm6*sZRvDbWK+$73#gN^CzC1
z$c>2CLmo}U$c6&@2C{=tK;$`+D-%AreB_UviFvGMlQD*Y&()O*%$6b&uayPdzO3?a
zIsC+0T#-}4%@AFPT(-p}rS3%~z({s0V`LA1<SwT*UBQqcqQ*{7$maIjF&)!5bT!s6
z4R=Ri(djf`gnla$P+H6*qhH#%SJzTtzWf58*ZBB;<hQ_F=2kN{=x6?ZZ%#00o|i(t
z`qR8k%p-k8<|LV)ym}V7bNyJ<caB^8yOiKxhfBJyh47=z_y)vYZfzO;4S9izOKOw0
zEpM-##;b>Y*V1|o{bFL%!KdmGe~6eyWd`3M%1Dn@>N6Lwk^Z~QCh%#;Rzbi288GXF
z8|U2hguWt<bB3<cCEh9ne&Te<Mt1~pqGCTacio_j;B8IOyf0m?&X-ppcL8#2Y{0m&
z5IJZl7P-sQeWkbW(7<T~9-+Fc<fl@|IBLi^AJLF;VqVDM2a9s9ZrUgGz2L at _()$iF
zG2b4f=)a9Gmd$Xx3Ouamkl&?Z(+Zm}_|(2xMWe at GUmwzWd4Q{?`9*Q=CBGP=FOC*Z
zo@=AyieiGRZt4Ah!hdAmT at o!FEq;E%PrhH at U@E^BGWxF(SM=Ot_D3WMwC=fF$O?Jx
zEwlu3g6b#Z^CfpHfCCIaWs$mIbWSF7I4Rb<=71r#<ISL6^TBe3?A6SI`=(_U%zCwL
z(?d62SXK>;@hUel=E8wiS;%m{ndipF(?4#x^<CMrTFj%8^i at hr%`xTX1dU?-YUkRv
z>66gLGuk&VBZqcGSMioc<Z77CHuV{lo<7Kv!aq-Bgpvmz4pmI8$z1pIcL%elGTJ3`
zQoRd%cWKr|^}M~MzEBICsZPiM<@AIMfcRY38sGc{n7`n2$ynb)77VeM7nrf`Pw7%V
z0bCi6wk{Rc`<4aUSUuK%-Gb at tV9yE2rJwkjLT1pgd-2HoDqY(!A3VDXsDA)U0rJ9d
zw=e at T=WNn%A at TdoZs<2_nL=gF-1J$GdQ%ru$C$AP&PF>;4`G1a1vyAC;9SFz7vQlH
z?u#F3xOWnz+#@_`i2Q=Nr&2jZBU7qdwUNg|<X6n_W!xQ7w|gL5f<4>X$RpQJ`<wBe
z%^^Ca8M29<*7V#8Ve)OxZ&E{+!8bv6X~8uezHbnE`1^7HCD9==?!3m~(+6BZZ&S}N
z_ttUxHd(`aPXGH`MF$|q5Pr9fZJFeG1^8wKz90F&7JmwUkS${s?Q=4t+Cv04%_026
z0s1z^F6P%rPGkr9#)G8=vZgD{758rJ%MLwO#1-%FOFOSbETqErP^P<z9CI)4l?o0j
zY;!UdnPqL at ZJ$QM)`$1Sdy{vDymlG=bdh`~WDy<upb6ig0Dmq?RMS5Oa~2g&@`WQk
ze`7U>{{){S{O%sFQ|iY5kP#;EUVx*uOQC^}h9(2Jey~3+bne%Y^A7S!ZIm3?hTEZk
zNrmk)b8I2}@)Xc5oB+mxaLMC$5pzuTyNJn?y9%*(=0a|>NM!Hnca_!VBE~~=4A{tQ
z8&mJZ-<1y=ofscDF42!_c=FL;=YAddD|-;z>X&{Ru^2(I9p`9Ib`x~$A;w(#Dm|Tj
zjbKk~{b{e^u9ohBz2k(fj(L%K1O8CzZZYoLM(`-!Ex~^uL4J{%Egj$WS$DXFUwE9V
zKrSZeI9)C1%Qx{}PjUXLsNAKs)gk_%9QUT;mxdo7KLJll+u8Y|(+uLg at jbwwaAGa}
zffe-ptRT(NzhGPg>zQewevrs^wm?r)x<r0^HhJ%7I-T{FNn}x#?x|=`l7C<=){A|j
zYl;p*X84Aip3Cw|ZhD`D9JB{}N-^Z|J<tIpBt8h4BnbQ2>&q074Q13}<Wp25FHf1@
ziRg8`$oJ&L$1sTy<I<yZ#*dqZ3VG7bpLyaIqt9;Q*Npy{)uM97Rhi+#lZhOX8LoAR
zrQ~v&!ACowkB`4^Gc9RVEs+klVjqhbl@=9zq2(l&j};Id4a4Wj;j>$6RO~8--(U7z
zjZ?pw4xG^attvVXzJ2i{YCL-eYvcV(=5;!Hq7WlYxta(zpr?|=^I=cQxHc}GPBnKa
z at A{xzvvelPio4z{;}*Acj%zc^ZBcbG)SK at dz3YYRb;>(ba!CDMPn0W`&UgJ5YuDeq
zRMY0M&C?#ie0zp1o3;k~%Vu`|8GXqpWR at k|lkBRVGFFLLV3}JvEp2)Z`}fV2EK{A(
zg*~vM>1p(J0<Ir}Zu^(6gYadwx(a-Ye$pZDnGQGz#}QYch2NYuJdeBV>_50_UJ=fV
z#|@%^3{AKkaZ;t at W!7Q%)zxw}H#xYL7p_?(;~s$@q)>F{1&wk at a>Ob?uDuN8RXU9E
zKg_7tx_Zo_B|qtvi>Dk>9;Qk|t`@&ytz#;bho_ZV{h4y*i&KukFS`=wYLsSj-6NgO
z2;;ZE!~OhnzT%_A8y=t0>D)7Hz9Js=H7NPhO4qt_%~w-B>giM_EyN5epjv1#DF3e3
zI+HPlv=lU29f)V}LfnEsd^2Y<hpoF9Gv2K+<yYKy$Ye$NXv*&>=a|l+d_3jnpVVQu
zxwX+8oI7y09Os(7;g5|rY4P?LuLv>WeEr?ZFb!AJ`wzu!ye}WuQqi7AJPObcA)*^h
z9+T#Bg+}gG9B&)ybGb4W>;t$uq62$+PLL)`h<E`x?4?ef(zIppKQ|J70$o}?#xHc}
zl)=eU-oTg{r4+t$x`pQ3w|b-!9C`5LM|+~+7q$vH1&+*=5B&o;HK*8WM!!`0bEza@
z)pzcNtwtWOdXO(1x-9zv=&XhW8QI9C!Fak{X7q@$zXqMlG}y+r`Serw!yXftk}<wC
z<^|K?l+T4Hl!xaSl~O7bcp-YkW at WxFq{?V9HAqXi3!{s;aTkhUM<VBP$9=osLf_?k
z7=7p9xM=)or4r at GQ7#x?0)LPy-?=Ckjz5ob?b2D}&#<Y?VU*46VWy7rCXde+a%&^R
zcNgP)Lx>n{I-R<Ln3Xa3%Aci+$9-_`5#J|JhhTge$`;rk?t(Vr{$nVQqud1g6X;RU
zpG7jnIutU$g&Y=Xl^N5j!&KvoaIG2lw>o2uQkmn-10!!E*60W=jD8Whjh^>?6!ly1
zO*a(!rH_nz!{^~JlgbEqSDTJL?ed%7^AB{|5)RTw=w{NFKbfD)`n at hq&(Wpnml#^*
zjE`(LrL#_ at e62I6r&%Fm=%3lNvR}~j8sd62gE^5GajvpIvgvi43r4vbG*r15xw*uF
za|O1*mfh8e2QCRbCb)(1n;lS}@Gj^<&>aCUBy0=*kPUFfyo9d{(IHG5H!AxdH~5wm
zwJ67g29Xl`<U7DD$Ybi21IYOT{oqnnt48tR%nFRDI^P9OKY~$FE~VnsM}#7_xVHNk
z{A8L&t9|E>*DNjMPF1SLtG2wredrtUc!koBGWaUE4|R*jYdQ7fzP=?Gd#5n=z99Nf
z_c%87XRs1i+45Z>X}tq at Z`s^t at FX(tz|%lg=4sZwt|qI8YonERt$h1$IA36K1HKgB
z%D9%h%RTmWmEb-F&MWR3;$9}-jykxYS)lvp&SR6CMlQTe<x1kG$`Sw2XjQt_F$`js
z6it7X$PzBz!(+m=<G5BKduZg5gbS!Qm98T54|A`I-PZJ*X9w)U0b}cYuE6)8rbUHV
zn5Do2Nn0`tekd7?Rw9e|2{A8xI<NKDr=`Qy^IB@)zwmIndkJhFd{z4l3ptPZc6V$m
zd<u56a;Dy?f0embdSqc;n2)w8v~Pv~8T^Vx-$6bn`FR<-7yG;9o^?La|Djv1`a`#T
zBC?j={wLkC%;rset#~7L--)>@dWzG^T%%#fbH-%LHtd320o*KWCFdgEZ4dTJhLRs(
z!(B-7()b~N1#Fj&`4-zbJby}%k@|3=gt-R)m^$7F)~Y?Cg)WypV8=urCSW36F8q_t
z5PI${S1109_@(1N^nQqO*<^q{Y>!>+GaL5TWKrMlIr>Gr9~1TQELu;*Raf%b^|s_r
zeZOCu2cOLXugSzO&6yhn?=)d|gx_>2d&_pt<-)Wf`YTsEy`0#w=Nz1{%XY%g1 at RLy
z_{f)vwC_WQaL*o_mPPEb5l8OXV>vovkBuK-#SFpJsY{f=hZXrx=ni0K%huhdJBE*2
z-Qeq}fG?xDCSMY-S>^$JId;Z*J;8-$XNXjYaaxM!raGT%CB8T7<j6}@%gQOjH?$k$
zJszbACgp;mD!LMWA5L2&!RishW-p9HJ!&?mMlO;0T!vj3<HW6uCljT^hehLQ>in75
za0R!=w!{8)n%FCek2&mV at B57kuZByrD*bka#?n&6=FDMIc*)rN#RO^iLDt$y8=Hn*
z`(;`1_x?jYQuZx}{Ba}v<YV0b`B~Y<PhnRJ9t%<q%;CrQi?sP~FuFDYqxCx3v+1Rd
zzS`xAzAE?B>(&05CE9cHq}VR}Ug~hfbQzLjA5*M8`F7G2H7otDZ`ro%)yv+UYd{YB
z<d-`8bjyG4Gn`X18uwtu>2tUjzUTtHHy`~`rTfTsiWgO)jaJ!SFN|ljbUfboBfRg8
zKfmu+Wx?0{hqgH1cfv2<{huQ3{9^9ORfvhnAE5MYnV4e<J2Ko8 at eL`&uX4hM!Xud7
z?+|;O&D%o)`$Rd$kO*!6_WwBd5zckMk1sk%^J63I<A*5?d+c;7=HdYlp=stmJ=b<g
zY<g at TaNXJv^W~J8Tf!w<pPRryz<oJ05pPA8Su2%d#zK4-eWEy=-!1SZ&ug-xzciqG
zJXGGggkUQ$ahpDb+(f9=1Mz&fwiDk-TtDi(eqc23cn<tN;4j~lG?BNbDarYa%C*%8
zzOM<Z-q*1C0ieX+r0GNacJ<>KV6i at 5Qg~+swr&gLNE2PvgjkT6ai0fZr<Vm(#UJV%
z>{m7(b-9RgPUqlYLD|4e{QvbVe7}_VF2J|q1LCue*l)z_lDRWF+_Y)FSeA$XAi3=(
zd|f8))g^q81;3Vw^FFgsr^V at G*heRu3^Db$%IIjvap)b!pm&(Td4kwv9xd<4ny>Mc
z_n16$dulxMdn!C-Jw~)&5oC-CcjW5r5)YN{R+~!T!(!q<+rVa6jcfxW4V!YVjF!@7
zTHk}17*G|7se#{RCFYF4!wl?2#A8!e at tg&+cT>s@;80{zM|XRfdZ7QQ^GnBl2k at N9
zwvLe_PH_cz76bV|T|dvg&?AjKfa?r?Lj1@)tjF&NehsD~)CqqohG0@<rTBK*E+EDQ
zI;2wp{dUIhfc<`N<!S6WXxK4(u0uXQ>v73j_rbY<Z{sai!Il=pqOHrhn&OCPT%<Aq
zuXCirx|q^A@%WTMn*OJ)>$kM03rI{D at Tu1zeydU<d;L??^F2 at 2lZHO3dS(vEKOl-*
zWi(w&%NVIhIMcMkcMisKm#8M;jHu5q0+<FJ5nr%x_q+zbygpvBZHJTQ+jh8zi?lC3
zI2M$a?Lzi7nbD#i=))dB4kVOSD#U#{a}V(s>m&Fb<q`b$(FlGgkpXT2|G`jGovenR
zb1Cd?g?eeUUUY4>hWK1D^=OkCuPTgr;;&T*dI&TFR0Nt{L)z at H(^okY=SbV8q3szO
zv6!UaaL$Z#IXFJpQ$qZkUY~+<2le9p<$5`Mf%EYnjmcV^E7Z%-_O*T=Pd>-TbIJp;
z`;DN5keQJW8226nt#dz6Q<H4K`>OH2hfs%%If^<oG3k04%Ggs<m7tlRMn+DRquwlx
ztxSv~CuTKl0^ib6(A&*LULNQpPxd0V{z-!Kg?0Ez%FNz8tqv~gG15}R-Iky~NgVRr
zj8Yepw*dQgk1xkg(#ftG)+7{2WFOQb7717dW3Q3ea*y{YK0AVU9px at uhZq)i7{`O$
z8R11JU!%lyt?Jh_i<>dc;;QFuh~W3;LUzw*wz7w*c-UL}tc^?=$_bomd^7A?e%~TK
z?Vvp{L}goT6*3hJumJHrLf&Qg!6-Uy*1L at P+!Kf+TgpJ*kN9i57<vpNF#V1;IXpWV
zPfwNoOP`NL#OFC{u|7!CYjo-!9!l%KpTx%bVm}PODN{3ip0<&)Ukbjp#{K}-G6knv
z)Z+Ioj(<gb<okWl6WIfKeA{Z^-W>DD9X?*tK}EqQWzqISw1$nVdl}E1k1lfh3|=67
z4>2dubJzpPdA|?IzIeor+ at J8z5%t4P*#sX$JNv8sOXv(NB8xyHJL2|*S0DJ^ZtyfE
z=*RZmgYrn?Pegd+>sVV6OVbn#iu`*`p?=o`)dHJ+F4|@#=8vKU_5s*Wh+J<`I{lGQ
z&mr7%i}-Y)zISna5OfFV0nlymC(1^dX|j7}4cXld$lszxJnX^YSMkn$oRzkDsH>LA
zq=ZZ%a<oqPA@=f;f$fU_Kzj-CZqR!G8wOaEUbW|SUah44ZAT%SUZoX;Z%bda4p7hI
z_bgA at Wao8@PQef0OCP_8?n@=mS(xl!Y>dbM%S1N!9khDUyU+t!A})0l+s}(K+%y~G
z&zHBz+%%lsh~XtZj(@@LiHUmgze{BKBS%4>1Fa`{JG>W<J;caIqF2cK%7QCymBROX
z{sixW{PaBhV at 2rC3h)^fzPrFF&sVv_kDtgO_=Xz1cMDyBpE9DmH*Z`WqO$vWrQ(^N
zt!2J)MJ2~N3=Br<0`Aw5V?QhSjLNmzS-zwq?NS4Nfc`rW>*s6V&AS|-StMyPkTyhY
zq#*&Zk1khHUzKeo#_Oev&^NPJ5py-MS5>necs3j7YCsQxR)dPrC&cF~2Xg{)I{yD_
z58zj`b*Q at -=fUsUG8+BpjK4HG_q_*1e5R0TMxWilI{O<7KUvJ5%$Y5Cj*RDBeatg*
z#9(}=2wn4c)M0*KjeM)W$Ydi^6FNmTp5H=We<-|<{m}j;{_ni?22&HAWBYvjAw?)`
z{i|_Ywf&JEJ?vsl5}DuMJrq43^9s<9- at -<Jh>UC4gO!NG^$R`>-$DoYjV4AZ6mY&r
zKg<B{fZb;Q9VQ6#ZXx(-22XZf3;xy at Cgf@cr=yQ^z!Sg2T$T0!FABM5;TwT=MqC`O
z9R!cf7F`2xYjL at P^$l1!^qCCpZk@<R_#O5vX8NpXfEGG=_y}@8jS~GzFUKxI{Lmoo
zsdnD;l?bSZRGqVYPGm><2+C?U8_$o6Y~bI9m;&UZJ~eF_3!PK%6sBxXwMgy7w?(*g
z7!`DL=h*Ag=(oPfau~K)hSrdrmnHpfIezz#e$JD_7TKR4wdQ-L-{;MZ at r>2)U!8rJ
z2bCcyMZwB}8W)t|D@}Z`k>9gR2pe`#RHi at tOCbj%|0Uv7I&UHW+9kFZSZ$v%8OSwe
z?jC`TH;J3KMJ(idiB<61>g+>K1?&Z8WN(bGSw}G8k+-CFJUOD)%8lq)6cW85w!Lpp
zm)s4$RIaPiWRHm93jz!px2wQ1i(;PwUR4}5*Asc+*!IrbXlr9)9k13S>b!x;rLMSK
zq}AUjI|mc%I_(1Rm-p+!YcC_tuKSuu&pS3(-96%rFH!RbOm at x&y`9MJ+<EAC5|<kn
zndMmk{~zqpqPh0RNE}apUh5#%V#rfRKXLk<{yugJekNL8O7J%H|62HIlma^gxg%O%
ziasJhj3#d?t3u4EIBPx1%UBD^<(38P|3Bi|`xB!uj#KoKq_<Ir7`cs$5o1(F*7bnq
z#NYDelDNIIqj|xPv1#7A#A#Vuqv30<OCY-Bq*yu+_uTSMPn_0igCFuskx}?B#ZVdI
zlnlu_TuaN(^=#|3MX$pDW{8Y9uOsJowulB+mv!1!Yf(0f2Anb)V*7oPi3|$7Aqk1$
z!Mbop1lw#xWqZNo at yVeaRU@St{AQz_cc(Lx>_vf_f7?SmoXH#M5#k*jSUXG}D)6ZE
zz?zQ{YxMRHJynARhH6PdeYShi<hipw2Crh#3HL&LQwL<Ebt3ITA?_tM>~rD#&s at MS
zM+5)$u>!tvh%F*G5i?cy-U%2+-8~Iysww3v2?d)Wb%)my&Tp6Xl&7g4IDGG%=drMC
zRz~8HNc>Tt=m7i~mr6TRvDPFgWP5>WQI-Jt*>R0NnpraXXdlV#Hd at yjhrAZ6Vj5tx
z)ZyKhn(e&NfbVx6Q{7!|arDs*S*Mj}A3D{0c4YIExPYpi$AH5)T2ua%C1ly}(jkN5
zMJkg{62&dw?5NuR!#MO#c~xOu_`ZOw?Z63&&fHxz!~NYljo&vt^;k~>p<mL&R`9uG
z>xSJf%|ixnHSP)CWTt@`5Ox*MO~<{~u-frMfu`M?Nz8%wXP<2#<8T(@ugVgT+t~RX
zXm>l-YrzV+!{m_(-(m*uZUpv7WnfwwgM6VUBJ-j`;Eyf4gLQqh#vSYFzpsl<;az&&
zvHmO)1)zSi&uO)}P~N(oT;zS at lDuz|<<N<8Vg$yCCE&}%780+BeVc2*w>vj=-so4h
zBCpiYfXh|*ijnhI$+ at FB(23k|xk~oX*kjA7<2+%DZkG<ckjVC`aLuJrZHZ^TNVUs2
zREPb*G5qTBYr&6?A8g;$OV&(g0KaPBK_adLbqAnLc<`q$A#H=W&62UHq#b4|u#Xe8
zst!W0gX1F7j^4>mth!U^>!275zA5=uDV at Y@U6vQI>?Y*s?&o`qX^;9M56#F6i0?=H
z9{nV0chRP&G6Eh+YzdgR^H^|4_lqV;%G)xpFc<nC$k|q?B=Yw^q9f^cM}L}WDUru!
z!mmHoKPRHlO0Lbjb=ki-IG3FjA?YUnam|zq{$b~AjVL@%u1}9B94B-JuHA_!{GF5^
zL4AiERcWRrq`v3V^iPAj-2oPMRDEt8hdlcmx$of!$*-W at mw*)=_fE|A+4)k?4clkg
zqti^Q$g`{PE;s!fA_@!0{Sm0Q%~6qN3MJQ;r<p>W6m_Sknbwl>6KVP|P`75!tPte;
zRxRtVYek$jp7o9>6p}iUP{&zEO`0i)-2Y6Po+kI}Qpynb5KaC!ft=ryrjI9dqw{=(
zJ=#gHOj4ssj5biMR at -L`7DqI5wmRFSFU5d5+U?PFft}>jevQ{L!FM;ricZsWI<FDF
zJ9+N_XRGs at zuo>2{_{a!HD_zxzXprfg>Gj9EBO16OHxYJ(=xkY`$mk5N>hG{9c3Ej
zj(hie>o%?r(CrK}L9Zwma<+yD#wWh_JDyC{xBLjOp#r(J!?OFOh-*Pc`Yf&c#Cu-j
zY|T)o4Bjg37qs?6Hhb3j-d9a>o;gI*i#Y7WZ|%|0ziL?la(UO|J at W0ZqO1naRv>wA
zj(1>1+5z&NK~a_ibq{g2PX6ETfBL at x@_(YrsCKS^Jw0Ryb0Pf^ke;~I*;a8|q6lB&
zMzML0 at 0IHws$}vgZ6xYz*y>-lwS?BOxdM!d9czFsqS;kMBZnO?h>h=g9phUjiT~$*
zv}G;g_%{Fa*PcUZkG?EoKc>{H)fC1w>Ue|U%RZ)zz&fo_rcZ;+f5+~g16^@mKvH4{
zVl(n0Lc7wOWv$9WVl-MEaZ{k<Oh7!BJiLw-gLgl~c)N6%BvHFFv|-Y;pfGt>>6#A&
zae48hzv3N8F2X~I(W!+m05DZ1css%OSnY$j%z{=;iEt!1xkHCM?^&fZWcEpH8!zzY
z at 8%XF9*}JnhQ(e#;V;P&tlC5k(?>4TME6G4W$cqq5Pt4E%ey`CB6Ms=gzA3ZR^hzd
zIt`}`V>l&Hop!)l0o~}BAR{xLzJ&2LV`6-PS8T<;zkKv`>vk%yP6OUbd_LcYpQkVW
z`z7$UZn_2QEat`BT5oCMH1BJP?%?$sFkYVLmaRhU5_{%~WmOq4+S0K0x{9Vozfg4E
zH9b_bO6FFnd(%`IUH^vWTHM#_D4dV<FLEOo7VgRDPa<a*_#+oo;85DZ%VpbT_5%F3
zKjz5sQEh8~ntr4o?{@?5b`$F>_+Q<&b#jcI!;U%!@(qVSPU6qZcKBqB#%<`?K;#dM
z<?Av5Rkpp;n&n=5n#Y<cZCcC75z=pig@)>|+1CgC6?vYKS51Cv<y?VPafCeo;I<7t
z5j at y@SXoADRJ+PQ;)se9eMNPBU4GBr?QPc5?HeFV6f#DejBDs;TF-IbrhxYqP at j0$
z1i7g765+wH(Z>2qAgAwi9LAcI?tT#Mj(u=kC*=GR=vR^7gO}H21HaX}^Z$R>M)4lt
z1E--Q?}d(hl<2PORKO*l?_Pxdthl!>hF at Z9V4vTOHEJ!%kJW1P$U~cUMr+ue6S<ur
ze^i8t?E%1usQI`!R>P`7G*^(Pkettky-gwWs37{kg~uUFT?uUcxCF7qx%PrES&t!X
z?zvLV-&Ef}A?In>1frL;Gvq(e4>fqc-0#RK{ov6<pKx9nt>>5~bPSW%%gObyrqc%O
zccEXL(BY8yPF@?Zf;yN!5_5_*_T-}Ea}9|{AP4T!1J at iFPbz(R(vuP0;}T$uo`}?R
z25ajk=7CBg*?MseVqP_pt)E`;P(gN1r+^JK>qW_S+3%hiSi^%SWvKgt)(4-&`~Eh0
zd_RtX=dqI;q4}Bc^I`Ay&tgT}pK7 at Njz93wTzafki5(Gqs{-F&gf^EhSjM&owtNg+
z=7{*L?Q6Vy){Z)6?L>^?drx%=^qd<%o?O1qQ2<O26>JvbL>Vv-^+Z33*s+I!=fJe;
ztS`D9;Z(Hf{ED%MFCjWh_#zY%ou<Kv`BjQ>2wu}<<K- at xPv_&OvS+(1$$jXjqDWwi
z1e!iB@|e<{O5)@`vN(0&k(1X{<Ql&B`dA3!IVR-BsX^=C2zP#C<<BLP_hn4p_bb{0
zHq%8iXO8oyNUrWMrL~+V9)C&_pXW*ogQ8?AQKiqE&L4UaGpCZdYrK`#5a)eHYq<L^
zw0ZpKr-%^+mgO6sN;#z?djh8n96$OR9W`7HxnX}k!NAKKt|q!BBCqXyGbrjH+JnWI
zB;^BhC&m!!+KRfW{48O$R at rEkM@f*TGY<09k)Ws_M~6_avu-}88S=|I<c+n2n^~DC
z&igXg+?y9rzjGDzmrWQyK|!&`J)moVt9*nZcnX@|=6|N<i3yH at Q`gQ6X08i;LJ_Fu
z at 3R^Qg@(aFVVMeTe+ at El-)P>^J>Yu=NxbAfl=n&!d{<!n);iB6_`c$IAbg0GjeL)5
zNx=TP9iGRQjS7w?OJvWD;oJNA$Ft-6siRvw|B*xDM?*adpcffeWu(a-H&{6%YjJKL
zuyz>eCJc){L4Jcg`1=yvGcN3a90qL~54>#Heq<TgFVQEv^_hZMA(+omsQc#8P*VR>
z=A6FEuptm^DN>*H#gSNvY>E_nE;IIg$o)4Gi)-*fal at En%zob>2MEzkaD!qSU!o0*
z;_X+NJ8lx_ZudFkCz>%fN>t4rSvG!{#)`Z$x;~=wB6t%!Lqr;{v>rA3lIVB+Nk2O0
zF=MSlf8x3o_|MM!U^jGo7WYhZ#v)6hm;WW;vz_7SFDd$4Wfvt#gETiQhH8Cgp)Y6Q
z*>LZXgkM;_k96`{)0h|dPT%PLv*JgGTL;#7ex>F`^)&F3u5<m<k)ylET9IhMUbqN*
zVu|ft&xRn)TeYI?&Uvs0Jg!YuHIt8d%tIXT7BVOCTp^?9R9cOR7VxaRK+)QHLuoEY
zCZBm5HUq?uIQLkOiqw+r`F6<XDJ~bC_!=X?*Em7&HL$m!5$od2ZI~wWCGy-Y^#8sz
znN!X^@0o?~N82vq2;uKJIzlJon+HeULAi_MD)fH9S)Q_J2JYz{@kSe6^wt2U{~X!t
z&wAN!2g#K{){%SvEBF at w88d<Hfx1J-;^rwPc>lUF<|fYjPQFvzB=6u8-U0cf*C#5X
z@~&`V&X4B|nbB|i at E!yBEyn+5;x~wWeeB}4A+laIz(4gJo)G?EN6=T?u{i9%@=#Ac
z+U15bKKo>lCi`Vk5T_Y<TNaPDZp8aZ;uZ$DoQ0mL#a02GA&F5m0Bd#!#?1{6*tiHz
z1~5XTiI($no)A1dR}ZWiYAm_LTbGfnuSnViU(+G|^C4ID&rI-f at A{;x83N!#+~^fE
zYK4qf;gK8Ix^@QmaD8|!+Xig(uVJHY7nO0=bp8k(>*tb$7f(Ae#M*;2nfkGKpZakA
zxQdAb9&R<SL4+K0lxU9>`b%q2Y|x86RV5Z*Bd!6zhWf>M-GJ*lT-%FW(Yhdw_7;3k
zj$)1+3yNJ62zne?JC&d<phTD645~J^?NuZG5!gkCs31*S<ha+UK&N6GDCTJ?;?%Ks
zUo%SbKT!<%ADlmsI2;ta>V3>#XO3k%Gx*b?Pk5H1*-A9lJah0#_M+WNe6mJQ>-zi-
zz&As`pxXO<V9VyU0iPuq*=opUt?*Gf1<duo)58qbe7r}ycY0EXNDzhg at cXPMbv|%K
zIlrI|fv%4yg>Fn?YxTPsXxhA1REn73BClHTb%Gsa#5-P at u)`%?K|FnX=OFs3jBdB@
z#TqK$G&|?N0eWt$3vis0I&7`HB(9oP*uEVs#CyYjmt+iz4NHdKKz*RP{Y`6~)82;v
zAhthe%y%rg2mHd(8c%F*lmA<f|E;C-fxANf*Ax`{z`p<dfACnujT753i5thfd||Bb
z8m%MotxSw1 at WSS`B<}5z<@4H$X7dzh2GD$R_#~9U_Wdu9nmWx)=-87wfa!p|*S%Py
z1$5m)54|%lKn>>?$iiQHk2t?a%9UJDjQ%<(B>jN*`BNKjlR=+7o5;U9hr75Ax}4>o
zAdb6_SD)eF<=TchYasK(XK&HZJqFkTOP%=JQnEkR+5g=R57*$`Y-Byhc^hd1%()?-
zS!5kYyxd5 at yd+cWd+>Q?VrJ9u4T631<yp1x!>QyY9e8>>pKInRphwBd;m1uK`f;fg
zI!sgZLF;|MjXj2W(~R|`wuF;dNA^SZh^Th#`G09i|7eHit#dBW?GAwNr at GbCw*?ti
zLKQ|EJujs8d6kyLgk>PEbG=eFr<%SzO2*bn$o-AP2co->VO-9VJjjqOn~8lxzZb`j
zy|xxU(Z&B`t=-odOAYyR!-_j*vQI$19==Z!_-^ckT#0e~xBuVIM-|YVLF`OJkbMeG
z#*|ptIt!T+ at Q%_YPkN~63fm5!`D1k at GG8Unf_wN)+NFQ75BNMV_C?I7NV9gcogdQy
z9w4;6yu}i>P#16izMsyHr#I7!+v8UU()E;%O|iDJd2UUT?ee^cl9I(CZQqqHOA~2k
z7q|TCuJmu&lz-jfFZR#gRKhr-rPwdj^{sa_ip$BqgE<M`zK57tCelrk_UMAW^N$lh
zilV;d{*I##;la}7Ne=UCJnZ>L`%JGDLYCJ%3{3yXNAAVq0?79ge+hk=g`GEA$~fFV
z?5K`<!QT{?e_ijNEAGyEhmrWp=}WAh_zaG{30;t+TOaU!Y%JrVIFr>DHlO;D4rO)G
z^%0F1-nXwneiPWZ5F=0<P!$_Hl*xl#m^T~ysg#JjM0di at B$zQC5;k-$pZ&>$-_2jp
z$2QLGV}Hl-&-l&3xf~Bkw+Oi(^rzk+`A*WZU31`9z=IrfmJ at 7$oWq5^F$KCY<k0q+
zO>1H at Oy02LZDKl@J-iOl)#Q)L?oXaU_tDQH*HS%b at LWFqb6G0WA=EG#!p7Z!`X$M{
zv4y}|vhV_!vVLQBe2HaV+^XNGKGfR>d80NaPxaXo$e9!-qkoLiw?&X|x|%7PO6LX~
z0;WXmmr;3dB6o0TnhCKFQk8}|E0j!)Bk$_&=B%>`b!MQ>{nPSjL4 at Qg@-$7<bt%e)
zvi}n at VKwB1(@SUB0u&EU%k00I9j|<`M$`Kvbt7if&S0$1jG3+afswnFK9Nf|(EWl8
z_x!tBV*BEBGZ~6hrfo|AqwURL4z1AlRYP|glyWg=3cg97l9%%U_>p>xpZ%7?kICFp
zPcTc-o`?ATE*GgXHZ%Zh8R&k{q<iz!p5u(8Xto!;pGRWm+-i^;12&q8IjgLvMkeO#
z0uC$356=0KMZnpqV{-PEFjj?Zf90+c at A~mPa=!?1o6rA`c?z4;y?J_+%u_>|Dk>?~
z<*f0FWc$z%6Zru2;PC&6*OX#@Lx#z8qc1a7dLC2load0QFP)04joHqiZgRf!8gib5
z0>h!Kn-4v8F+=#ms37Cu at q5=f-62=#0iv%2BISUvHn|dbtCPMLNs(U}f_32ek%Yg2
zZ{PF5$kV+YO|bZ!=fU?>@H?=mWHa+bE#QkgVPjqjzPQf=xEo2a<IfP=zo*=`gD1o@
zJn&d9WW at QfJ<J~ypnu7@<rCT0Zz^+*<PM>C!MC)Y3Z0t^f2?uU4>Phb21ci4 at -F8U
zfoE#i-#cxQ(4(UdjzMO<pA!yTdj)>~XYNh=k-qxhb8qYfv2g+0WR>4eA@&@?Q{YQ7
z#L<}39vx9H%(Z{iugs43O10{sSL81v*h{;In<eqZU;69 at wy|mTCFPNbzb=vwuj2%h
zIUHg at zGgH0ku_|XzJGr{Z1hJ}=^Nv%z{~<(XA<&%65s0vO1ejfyrS{NQ=Ii^Q4h%#
zAlpAmClef&h-HhE7>^vLjr1Avs-o}Qbf7l(Okf at dGv$7P1ako~JfRVVi*kj1GbO{w
zMGL;N4f;`Ca9ekCkml;|zGk)&`8$zYQ&)uXhCIHrAA$b4vFCVngX%j;!kI5Ua%GON
zt0Kfviqs^J-t2iTEkEaCjp~JuqKvD#ED&g;8a&F_-5#h5V<*+x;PeH|b*pE9Cw&hm
zfll^4!tRD_op5FV<458C4rD1ko`ar^)kjo*lPfY<bE((-JaO(r+v8+Shg}e5TyFvm
z1w96u3|a>Ikv#+Vui86cls_#cvY1MHA(!gM+E#romm>B}G2IORYt`H`_9x(y5PY5E
zL9yYg3Aqe0 at M&yo>t~Yq5)tJ1`_Qi{^s9yRtJk54epQGCh_|Kk;Rk<|Q0Fs8jggZ0
zH-en~Vnn~_(Z7TjKW=~AOW>+y$Dt1~1gpK at Ge+!H(*pK=fjUGAS*uW`-JNCJuw0JZ
zKN)3*!FL=AGt;&)-Wb8uQ!$@rUH{xazwARr8q?O*fN!ucSKUuy40Yf?uAsj^w=XAr
zjo9+M;G2*Csih64Zo21Njb19Mu3H43&D at OC6-OK@%#D79S%kXjx^5X_B2)BLb4&2O
znsa);Z}iCfNOFxvxMMyeClz%vChtrO at b0m1h`0~3H1-B#@5~g~T7iGjN8}^tw|<TH
zD8PFZ+5*U!SBMdd3_W*P9ohGdtwh}0O3ba5m|H6$53NKD+$xTz{UhXb7e@{V1zjV|
zm!bx$Htd0u<=D?1My&i7yiHg?-*!~HmlQpi_Uq%7QBoYw?o)e4L#B!f+Wf=C)3s<P
zMv;j&k>Pm at RXbgRdH(Y$19TLnyiLx18*)UEIcnpvKQb~pIpTb`0y5xRz-0#RndffE
z&u^iBK8>hcB*t2i6!5p$So^J*Z$qZg1IWQQ4oqkd`&GhIy!cMpf#B?|>dIwmSOJAS
z)5t5x0kD_Nqn_pb4eMkcrR&ZC-Ge%2hHRq;4#eUb?rU2PKWZ89|3k^M$R}_f$4VS?
z5&wB(W&tpaq}FnYY@^Qw97CV~iqp at pU_$Qqvp}!YL1cAdy4S264I>uTGOsavtg|V7
zR~}Q!L<k$hY9lnC=LD@!RxL09i&)D{VL~T(bk;t)*JClA at 6nF_bIPvxUoB#&%Xl5|
z`6=;O#A46QE))rPxr~Fe2E5}A(}umj2EJXjPFdm<l|^fUQ`r+k+GH(c?D%!BxOZV)
zO99sI_t3wXgJPdr0(?d6FUWWLO%+-di$!hLTqcy4PtS?T at F=5!ktvB^`5E+H{6YBx
z`#rLnp!b6BxP<s-IPJvoxL*%j648k|_XYR*myrp9HLUN4J#h1#^>{xQGB;>L4E+A?
z?M<M!S%tB+3gc}RjXp}dHDW+)nx+5c?0Af2^d}X_hQLQ52kTNJb&B1`1kG1rZ0x_T
z<3;t6SOGgQsL#)of0gZ?7PS83A>dc*)3jZg%=vJ!!Vvz=b?q`>?qeMxdYUlYU+na|
z(7<mY6#LvJ<b;SHO at MwS1u|<V)^rnn9M|^anyu*;Y;}FlK4RN}_k0xNKaSHpoH2n5
zMRY%+AZPz&V2|5&-Y|hRh5W9Uz?ZlJ<UkzqM=Vqp_*M$`;`$hiclu{PQ$uVh_s6%y
z+#f#`7ZoDLjNna4Sc98oV?2qiCF}mkb2E+3{hAc9i}^e$@%atz@@RyAi6El#>M_)x
zVij_h*@CIVHdm at aL~>ka<A2^HHgk4AuKTMj66u>a!aBnFmu2LAf?~5Xtp=-$o5dZm
zJoofg at Y^VbZ>GAN|796usV2G>{?Ack=Sf}!iEIh>XENoAT<HDR0Y~ptWYmUFZ1M>l
zy(yY0vN6riQXg%K&U6WW^FApC(?!t5DQdLcF%suVxx?RbR1lZJ|1W>bO3#8G9rjrU
z_*<5G=AzA&rhK%&2;Wc*dI&xqHNLa(-kGSY5tR7V5S%grs6nLJLa>&!_?eLRMBAi=
zFLW+^%jEdwqYV4cSPgO<tFcZzN*@hqPl`Z3KIroOc8ad`d+B!cGrAu*Tt>TUu+v7D
zjD at DHaJvhP*LJU#9{Ad!-YTchQNd;4tKxm~Nd3>wY0{Qt_{!YVMQWT=I>%AX{qQx$
z{W^~oblI;@B}nl;*aJUBkA>1C|3&<d&-$d8B)DJUH+4c@;0=&_v0oaGsQg at PTTkpm
zMAzc1uN*$I at prstrkiG9&wm4$oLJ*~N~7w-_~VF^NV+-}3SJgUVv<7;AJN@{vG>;b
zOrNXJF$x(4@>RFc6_B&miQ>rGQu3gi1m9h}Jjzi;OG4DY4`gkJuO%7lxzO3gF7AR|
z<{jrg_gx?C^?XK!eY7;-%h*_3fX5Z)b%kwO8|wnua4{2#v3P>Wi4%Kn8z1}NK4t^6
zhv*Lw^Id9n5kdk5KRXn({=<L;YQoR{;ANLQ0>R53fX&cK_Tlg^Zz8;m{?@)1^ZYD3
z0DY*;)DGRI#8ax5f at j1Yx;Pd at Uk=GaOlTdOaz2gltA#@o{EB=Ry({F(?*loftavx@
ztG1X7y^1_1DYU9_4!J%<%6=apa{a&gjZZRNo6fs+a9IiZ>C4p`<VDb=b6`KopV;3L
zJ$B;eGdd<?{l*oC`z-DmSbK7ZYi6o|Mfj_0B_qT6T!$KKqSMC`b9FDU+)CZ$IED>p
z{LrM1V>bM$mW-XA^rvz-{izm%Z_T&yNWa7cgfHvXGkQf{O&j!CGl8%8Y}hW<9=hm+
zLAgkvbC>gGveJ+jXtU^=azl*<>(OduW)1NxI1bE<r!YT=PnC}SiC#><uc%gf`z(eZ
z?=kel!gZ1iE#oQF?AFl at tXO12w1Ao|>9irfN6&+w5DR}yQWxskz=NHFO~<tjR3qJT
z&$kNuhvUSr$~i98kV9)`il+s#V)$0wM-e|O#F2xaJD4_?&*>?2it8YYcxUjj8)0j>
zwqJpH(VI(Y^Tk%gSu)=OdvZ1L!HVesAD&&7hjR;^xa2}c&AURkApaL~4M0b6LfDtJ
z_2I+*;vBx`c#mNVaGSc1g<nE!`jxY0kvb%a+ZG*Hq;&ZlzOYxhwjun_|MAmGB7QwV
zu^Sc!R3&Z#HaK$nxm-oxSVTYc8(Tl1<+l6w<)1YGhZcSxSpw__W5^yFzCaH2?Hb^B
z6<$uKfT?_{13Ld<I=P0-O$+DsX{Xo&yptU=MZ)|v?6XL2nqa1%H-bDV`JLA$`S|q`
z{Y&CcO`UyPEWm^pcHUh5Lk;{^M?Q?PApdHc?k@>aCjEjN?Bi{W(dTv8S+<`b`R_n$
zswU`(O3<u*7pj_+XW_qpw$QLIyXw_Nx2uk^*BGPnY=L1P^V=fMYh2qYan&n}G*v5<
zR~|F4BTV`8Gq@*}D(=b8#nfe5H8LOfS19kyGJsY+JD)mD7jWA=RNS^8G0KXOC_H0Q
z8gdO!&oh0v?}6cleGiUC?Q`MgtrY+CRLZKVK(FGe7ro=E0+c%3^Ej2qmQbhJB5t0C
z%Jvud#GYnVqo{+bAlE^wo}P|-3MSs6Q;f1=WCg23tX9JVh9!@Mi8yO%LC2mpb^aBm
zX6dY!7PK)xQFvFIFsJEl$@Y^RA3xX+{774z{dJ-(PDT>SA at L9`&`X+-C+f7F!J3MB
z;KtwkLrCo$<g<XyF*i;2 at DbP>p}(Fj`(OHNm$Qhy9SYifU2RnS4;^&nqz+oofo%z6
z#UYW!MEI;AIRuD~@~dVNleF*)tS8fqorrHU?;SwwS{mw12jzoifM$a#K~q5sK?MQ2
z4-oS#b2$Acdj at ZmMiKid;sR`n`h?2CM(8P_AD*wqx(3~J^ab)=!kWE4#{A{^eFot1
z>mxe?4+_$a`Gdughp}Hdka!vQ!cMk+l=vM%XPDtCX49*sU7r&_{T;!3E0D|feay4l
z&|`1MI<K6ordvP at dyYbuOCM~AY#cO1S_V5K8wNj*G~=1X|9l31$f at KRPyzHR9Vj;w
zUrgqX%ax#5l~UBlna7;q&B7cw5Lp{JpJ0U{_Cp;g7NiHJ39=xMO1Of^Q}(@(=_c|R
zUVY*3pZy$o;lnu6cT9`Rx5h4o>}-XH82wkI?Mf7O4s4T!U9!qXl4hCV?_3t4`G)Mj
zzWS;@G0)mS*OGpH{Q7_QD}Bkf<6ghsfX`Jw#(^`ZZ(L6SX=BXmpSR0GG)+Zy3+Ic8
zzPt&3Fsbl~C;tIH{oZMHTK_Elyu68L;olxKzlh>=E6Kk6jjcQt!ytYwZt!kt6tFqv
zBu*uv6l)3Ek-lu-i*sU}Yfsz>`8OZBwpi!8SALT at rkS`liK_-)5$$0=0ACZtqN1%3
z!$xfI`--Y=D6bS6KFY7E*w at Rog^D$0`wFUlaGn!anf9^HbMQ5W4&e+_NzR|^0RBb?
zQ-S01$zv0aYj9jWd0dC%D&(g&DYM)S=Q5C6;s|2or(h2Kju^5cCJs3~7a}KerA at Y4
z6Te<~+9p3s^dNl<@>{Hs1i#h&wExhj($!;6JcIpBZg6S$Q%?D%FGUAAr`(ha*`bIT
zpvqSp#(n78rZQgp at Zy+d!Rl at f?{UZu81wMq#Cf__<nZdl`A5g~7{7JCC4m)!tZ^eS
z!f9U>#%H1{e5gS`06hfy9%v5ePEZkO0^P=ndXA=44PPP8d)*?>5BHMiz2 at M0;;=W$
zo4n?dXNTcKvYF>~KY0%Coo{VP$OTSr$1rk`yN&u5;e7mfCF;?1A-)n+3)%!)3VIAw
z4SE#R5dBV%*{he_KYR<v8n2W1U+M5Tx!22zvV8a?xexK;PV6;VG?nT6FZfC?65x9+
z&hIUAes3Q6-bg+9UV&=jdj&-k-zzAY_+CLV`QDx)r$1FDRZeoZ;h8eX!Zn!l)sx3M
z9Gh at lHF->O(7_%|A!gNiKd~2^aeR347;#L9#m}S~CXdT;Y{7B;<Z*>xEAG#>3pU0(
z{YxqY3dG(bhgm+u#9=S{BpLU97R(>`A8cL=TOHz?z$b$sPxeXT)6`CTgpes(k_(*T
za;&)m at Bn$BT>#&nL-DXD77$(vo*>5fn`V^rlEIt)4qkLyvjKe-g_sG%?@>a~QpSZU
zWc;W;uevZzuOw2_a}siSt7uRqo2D1Y+%LIYLEXiuTNOAYklay&k5vN$;;X%C)S384
zoiV7(I9X>oD1-RrAMt$?b?X14&L3Q^ka{+69yDy`4R&tcIQTi>5M)~ioppkTPQK^*
zLHXuQ6LoIh;;a+z1^LU#4+~~utQR=tT-fpi%jiqY86w|;*T^w0NWL<X&w*U~E8;7i
zHok<?|H&)g^pwJWAQ^iTxQkeGf})Cq&VG2s*$)RqL5d9Ir-Sas$=e9lgX}-rTiuO3
zcXZxFdz*I~<;a;rLw9!Oqiq<=ap31t=&K1|&!?xbCi+Fhkfu+zFTRCgco!$zslU^P
zHKGD*L?zY;{bD)lR0L_v&pPYe_(z at ZqpqUKI!i#CnFF3 at 55!K^Dfy2&yHF?E7j=mb
z?L^M6#K5#e38>S<S!c{2b#4z-ANpXT&O`4x>tsk<^DYwqIHsSz%`BX3&t?C=bq9N+
z$^5x?hS&iU4BquvQyRa?@vi?sM)H0IfJQWS<r(dYjI+jFofG^YcK0gi;((_CKR;ln
zLT)RD{NbRJ$=Ze7qRr4N{RTgP1Rt#j?A;&85CfCP825H!9aCxTy=ky-XPm8g0(#YX
z`6A6dY-i^jDk5_T>xY`eJT~RKT)eCGJPX;|^dEKwBG=TQEi%Gghz(G*iZ?sM at sVyW
z;xvdYQ1jMDJ4mi~fgZU1S#+}zxr0J9MwPZ4d5m=AIr=tNb5`+x?0*@=FJSdYlXgC=
zN4yJvvh$G`fcP8Uo^q_|CnIY&^XxBpiYLm^N|bXa%Ig=PoQE=r<sL>^GFfg#xn#0@
z24&*UK<@EGc`~kG;}MjV6X!Q-?Jp3y4ml6hh%wXg^5BCe7a7Jgn3a-*FPgE(A(%3_
z4m%lxecJCeW%(AXDGW9)qJQLY&jbAqx+NL%0Sfhq3kr&TD;>F%B#@tEj5kjR%#!(J
z4d*nHdiKkJeV<pO0e%GR-`ER~TtoH9#ZhEh%DH9>CHvq- at D-SuW4nvIDUBpP*(23H
z*wu*qdcYk$*FZINS*SIj^-oBU&-#qEZTn|hxw~8w at zFM7|2HkndYf7YeaACCmdfoa
z<hlnwzZST at z;JVvc`0lBWet>X5A4RyYwsuByJp-wQ}l(xk_Ek3jUVpmz&@~g#Z~BA
z1`&@}aLa}|FW_9&iYqwxEArE;WUpqu{lF{B#KU#_A2|6-*C=HSekwY$-L=o)rK<6p
zege;>AqR%VaT|3%tpLs>Vp>vD9>lqK9M|^Gi;lF)9JWtOqTd27B67tF at 4nLMRn%>|
z=+=y7^0RXHvXi9?bXDK4IrVkMzV4#YC(Yrtz*hQT`E5t(^uwc_%k_ at ZIlxjy`|hVL
zr!6TaU?qs5n>z%ol_;AMaXbx?QrI32r0HI^^dZh^Y^o>r*Whncv2UIVJL%Nvuale>
zV`mY6eK*F!XzBI$*Fuldtn)NEQWkLqJz|q>%kNz6Rq=u<-Cp=MJ4}yruGwF`piBx&
z(I8$s%Jv0f&9`%2LOB{TaWU4i669i4CauIeH at R-&oN{iJ?&A>6ZZqnR{Uav**RK<j
zBA#f+cu^)jyk*|7-M^98o|@X|65Kn0y-T4!4ttk6ww<a~mbn;qugAGe%E4xFb34Ul
zTXC%+ITGhm_3xlu4||oxs;4Tg7Q}KYlOBgoG0LfbS~5J-{q>3eVR0Tf*$=~h0)Gep
zo$l`st%RMz)%gy;=V)16!#(lKEeB%J?|&or<Gyd{<kRX_#QNg+VY)S>c5DE7AXpxs
z&Occe)^)0kXGR{FBhcg3>#wC;`k&|fQTOABDX^p<HV<)YRk~PE#I4Z+;Ci2-nsu*w
z0GrBVA*-n=#v1qWL_3%ev+QcYv+<yfy-d=Y3&5%Z4Fk=_`8b at f1>Fu>4!RYzqKipd
ziTK8qps#_xw!a<tM%)@3$|)%`J%E*G>c at SDq4%h?8n9QAQAS`ZHKbXl>7vZh at W&+I
zg82Jag4Vxk(dLrxW`KLX|2kL8TISa3_QHN&OJtB<JKCn4T!-GXO84r4Sm=&_;Uzo2
z4;TxmWBCHef;jf{Fwp7+owR~6Vvj#SOC~S|_Q|5(V&B2sx at q+CQaN;9jj*jKg40-s
z at hO!a^Z0GdRp0_Hzk49oKX;gqey*8*8*@x??sLq`nz<u2-cfDQkypNR{D$M&6;~a1
zLF-m at I_`iT2E7ex27loD_ZWS6<G|U2eIeyc^g8+-hb`sxjMFP_IEwba9v#V*ISTfl
zja~;T{q*zbx9ImAxu2eN(nIWL;0xZ41E4ja>5t`~&&0SZ4-5K&*h(wHrk-mid7pTQ
zC#E}sG>%G!Ka+2gV5}L~ehRp?@T;sM@}WSBwW2jba+ANT2zJ;2l4ocL{^Z!d1c;1(
z%*l>F&B<r~G$+R==j5LMn3L<Ab27p?C*Q^V1AZfA<kXY7H#s*6Mtv;G3ee4<1izg(
zIWM>TF)vkQUh-t;hcPD}@jBsfC at f`}$nT<wy!^+UtW73!F$;4s-8mPxlevg_YIe at k
zXj~KES}M5)noSL}e6o)!+xD at T2LGhA>>>S8R!SXB&Otdxe;noG$p<i2o`pZ(-?3Mh
zQ at b#x9*LHc{CjxMmoa{x1^)ZX;B&~Ya_gTxF`m1zKlLToa=zRm#rz at nY`KnnBp6GJ
z$o;tQ1%i2$2<%*PoiQq8Ww5VN<*<2`PKR$Ougz-UwPUO!cQd&bt<pc0A_qPYnb+de
zu$5w76JI1La}({*W|dMEc&{g*gSDh&OwQvi|22<a{;zplMEKbs^Y}f?J2H>S{3Y{v
z-Q+ypf%7`d-*-Xvlk at fy9FuuZ=63=pncq7>D^l9=AIcgB=JUS&S1`9jYwRcoF~CUK
zPcY1qOouU_>ry_)eOacDF~=)Y?!&w<iqQ1tWn^X{UJ3hU0r=#jlI_>Cca@>NUZxM}
zf@^w|Qi^{rBWWG49eX#(VXkM<hDGE$Vwuq=nBUi(^Lq>I#bkbaFDPTl{C*b4>IGL=
z1yla#`JMI71Mu~6WM;jSuJNyjK1a%I<sjz-$tM<L`SPg8p&-ro|AKBwj`1JW%0xA&
zZmu}ehZue#V#wU0IL*Wk2|r$^KPj0jBIGp^Rlr7af(>9aBv0cCq2u}+^F%?68&er(
zx?b*|ZpusPM}EHn(_@@B{Y}VY+3-dYWQ^ysRz*ix!`w?naa+c6ypRZ33qSDRVxs&_
zK~m(4Ob%Yj9<Uz!`{>+-Y%akK5l-b?tm(xbK7^IHRdK$zntBDy5%80Tk<&n?6ilo3
zKIKu%zS at KJfq5u;y-KpYq;I!Gws}6*+?B8stlW>>;q5X<HGKKqJ&J3}kY at rINzmsa
z_x41NF?`R2|Fz)X^3X7_;GD8h?fzWkwM;%!?NJOpdM5nYj~1_>CBQAp?@XnmoW6XH
zlzGCw6cv{bOp<brf0GvZ2udM4?|{#@#qTT9&Q|k8JysJVb2GbKgk4(p%6Eh1#eTE|
zJ_mV2w_F;KkMb+n^#u#gq7QY5OBJMah~nU1wGP+;did=J(TJS^KdU3hDJGkq6ODdT
zK(3Qbs{qg8du;C!;G6G<e0RUk3*a$W+x&h5<-4I=EoTkFb;>Jli$Ar&ho0mGXyWEQ
zA$H~zQOCSvRr|d@;YUJn;^FV0NSW|!j$O0_vA#uig<lr=Ppd&9dv&dQq77r5kzcq2
zU3uQv{V5$zettWp-AR8)xsoARQR%p`7kV<_c}D7FbZt~T at -<b~3`EsOuUj7vUjJ5f
z<oXvJQp8nPuh2VkL91ZvKLlz5Jpft at nqHCtZ2WWAQ<v3KwQPZE^a&x6je|D-_K at kK
zN3QMEa%o?qyZly~f2t|ZZ|9^<e75OQicZwG at LyO5{!Z3`)6gsb!Ru>?e-&iob15VS
zUTrc$r<0#jg0j|Bo$?pcdrB#AsFTK at Nhvfv!?_0g90Q-S$s7aFhqtgYU^ze!09pa+
z03~)i8)yxv9kdE`Ai8m=k11pZU9L3MU`%}Jl!@MizM$Rq at C?EO&ESEsZ}E=6Zq+`)
z8=zm1E_7>YSr{<xh4O$$ag%ysU{l$`7iklHv1u at 2UXZ2$xgPs{;WMNSpW3ZIu*C0s
zj3X^_yzZbL!87^r?O75N5E3^$fd5h>NBvqM;<XdiF+^8UIu|j&<h+NT<=a at RglYs2
zC-y`=d&t8ZIB$9~b~tB*e82ByUe*RznRPlN>jFj{_?m^hA84bm60z7#(A|*OPA;er
zbT{g0_fU7GgLZ&sf?feF0qq1W25kdPZEXS1{1|rIT;QYSW9*yRPx1VI*h65W=@t{*
zHFB at D7IFSJum}DWZFtkO1AE4Qz+NM#HY8jm_b^rTG0`>1Lf1VC$hfsh at qTjn=~Q5>
zW=Lc&z2N at 7jm5s!L|25=?;4=8X?Xp>R`yJC0lxPj-ldZImDXM^OGNH#E5;m8-hw)z
zb8KWB3!k;I(NdcfeD^l?)ghDP{CvuK_)EUy_<Uc!>@>#tslDxCe2nvTi)7I8$6vp-
z>=eeiIeK06ca9%1j?1I!Z>jvhskt^e_HXRJlp(;}-sInjF`a%Z)xQ!n3$z+E6LY85
zIWHRUT(-Xs=TdJ;{EvbPa8EPYTU^gvR!imqqyFzPkNK&^z9c3^Z{IqTkNKa9eR?X9
zec&&XhU1da=U&e5s|Hpc@^Rgp7or-c3^aR4i+S<2b6%L7^FryI7d8JeFP{BlUi?4C
z-aRg=YVRK}O-iT63#ip(g+NqvP7FkxPT2)BG9n{DiXBdZWd}kkAx|O&GYsf#Wth7#
z3@}$N!+_is1QNXAWQqc&TL%V2($Yjgj-vT{uMPI}JkR&{`~LpeueE3IJ!|i^)@QBt
zxxPR3m=|OYokCf}0oIuFB<4ptnGZ}o#(>P72He|;XU?J2qCAT-A7vj(F-ix at Oq8cl
zW~2NWC9!)m*=mfpjXDD?J}vf-UY0kB#`s?HeXZRTDwAgMWKt3K(sbB<FHP~zpc&+C
z{Vf6Z6_tMlZ0M*5c4BQa)~%4)35fgGdXhSu&nG+)WXOMQY98 at lpPEOg+Xi~v`BMFg
zFlIIWThT9weq1smFVdq6_wwbcmz2?wL>`f3<F~dGap~kb<`9_|wm;`m)&HJL<o*gb
z at Bs$iQ<MSo2pAEVQ}|w#J0 at +I3)`WC6+-^_7SHx$j#c1yI(~0KnSqk%9xoBz0_CqL
zOHuxUvJB-#l;tRYC-VyDRcMD6zpvo;O8l<G`EMv2lO&k8CH*&1-`kicm*MwdA-H+u
zK2O|yL2wRpY$f`<4{Mj2^A?LWv9|d<d4|%`If4`5OYXJ9zW_O=UdQ(%T7qEW@!En6
zm)>!Z at v;47zKI#(|6#sW{U7JsC3*a<Q{?|qO6MlbImDbzyytxtIb@%+4UoMMa^YFz
zU2Bg%0UsO{*^k&fU?*tUTlp_ at EK~B_Y{VGBS3VcNCH4b|yRb-AoDW<lnv0PWn!Wck
zd{`3;5Kq`OS?tmkcBW_*sn7Wc^3BL&he5N2c_i;u6X>d0t3qxpGY>jytkJ;x0On!!
zX+p1C3HB{YI!^>lU9#@CMAhM19-i9<Tp8lCQI9yNNR+sKCc^nDbX4Esxr~)Mf`yFh
z)p&jf>{xH$d{?u6u%2thJ_9^$#C+Vj_5k|ed4fR&KeS-%?ZMC=1ZP}cRmq&8v)u~|
zMOXv-6IKiQnFQyL=&NAwI$Jq^x6R5QAbu2M2O%Fe`DT-G0k4n+Uasg*9TIH(&>=}o
zNh#X?`=E2$O)xPozR2ox*uKVk6_>pZeB;>)%Zf3qU&pQe*pK^>uciWHA at nZ=Z=5gQ
zn*C{Aq`zVAHAY7d6WcMn)-}l{LeF81N}LeF?i0%or-ASH&nr|9V)CE^`QGGQhu=TB
zCRHIOM>3DMoh=^(u3`yf1fR{rCwB?z$-a&KJMG7cG(9JSdg9`Me<9W<R%V0WTfj)8
zcL2T at e$GU0gAT<2Y)>ipI9GPvQQKrbi!{9n*h_wjr>z9%ipjv(icyNN9;QQI0=yt1
z4-(se?^$;L^mbLSeRqy0Mt`d?7P^Z@|5(KdtY=Nn7WfNEPE5p$u3l3o8Hg^(xz{)0
zq80n at 0nAZ7+Hxg&VgD|<>SgeU>^d<_u5T(P{1T_$r+{kkjQ2P6K at Y*~=>Hhkn(Z%g
zTJZk5=&|0xXAAl}KN#aQ0+V+jvW{2%kpX$+3{~n*HT?~#2jxomszFb>t==~Q_>S8r
zfy=zD5%+3PlJ%k%&x9nvuOV87`KrKt1ug>T8SHVo;Oji?icgq4v|q?GF-zb>w}9u4
zJ<$E5 at _z4QZ*dI#OYk*&5OVRC(kkySCk`Sms)bVjIrln||7ak3RFVn)!GN_xkMRlO
z{nYQxzci&wK`tOYB?&W}IZFKGstC5GNuX>2PBG^Ki5JPZz3Qz#5vLJ6Y)z7Ku8<lA
zO_I5k2~6$nD7T{2BF7wZogu#*@|-=ggPO`Qca6<;)<idudCBHEgZ+x+IXhiXlR34U
z&ZUi~#q>A8<JtqPmY9|2nu`a;Pg(K1mF2U6AvSp<DCY0`BtLNjfIF`P4SfYY+*jZQ
zzY052l*hSDZ5^q4uMTS<)BMR)E;sPvUrlsG_mFud4N6dAUXwT(CwSr<XWkl#MEvAv
z|1MuSiwU}mACJAJsH#XFPhaBY^8C=hOVQ8sDJk(IJo_{EyZ&A9<*hq*l|%UE<?y?R
zCHmR#hrko72J?7jMDFPyVKV2u3v4+{+VBw#&O>otk~R###wJef=@#gPrOr{Tv1Mr`
zcpv;CPZ!ul+{O+OH at Bk&&o$v%?P=YSdTvfTWc}GzZXWdgS+?WwFEa7><3Bqc)&)h*
zQJ%tK#k#`kgzx(FP$XAWZ*(GMqvN9M5zlgt)hoW0RswlnV3P$qQLcdvNSnNYU=lF}
zHedpBtZ9ADll%vuulxk`Mf4n at kWXXKSC2ye52b@1rL)B(|6KGDl6&s)k4>>sA>{eZ
zz*{L>ZX){LxfP~Ze_@}F*eD!fkk2FKO1EdIl&x>O31?TBzJiPxY2QWk(@b;n=X|19
zShLRr%#b$tGr!Btg}*ipoXO4PS>RrZSbdjyDi<Ho at sCaG-Kz}zm#R*%GI6#Yz6+eT
zj2)zZ;cKr2J<^aNcG_}7wK{{V!cqP|`^UT6=7WAI*VfOlq!l^uOHhJFNxbnJkkxk(
zxe;q^1{p`J9SY|#;>t~eBP^z&@JuR+)dV(a7H2QMITU>FpWg|Yk9^~oQ#yM(j{g#i
zSGV;0p0K9A&!_3aG+VObNAQ4a!}8D6!!|G!+|DZ`W8H4?%?EvC;Jm<51wXx$nsGbw
zRm`?7koDU##B<CzFJF-B90j%`cs$H;;O(S6W{Xej3lV)F!#r1DJx`yKUp=;izJb>=
zIYeY#@XU%)><@@_P}+RbVr;)?>x35UjV9~`jeoYEU_uq(Kj-iMC&=*gJj@?A!l#lx
zw_CnfK?ed~1n-4aau18W{Ci;Co%ttxX at SK8`Hb+M>A<VBrY&LlNCRTEV>~yZUNLY=
zPd6L+4CD+|GyGHLyyT-a=J{xhg+6K{G9^vib9XNBWUNdK-O<ESw*KFM)eo8`whtoP
zrs-_IYQ<a&z8h^r{a>PfdH+pdrW?*&#MmjG*atl+{7axGg>37sV!xfu1u$(p`QLSH
zMjboZu@@p|CwMEm0X_(IWUbh+fz=Zf`?wK)Y0`*wlf)31zK8wH?+dhhF=9a$LpPH`
z^b?W+_~HU{SQ^(ii_ at 6+0dStgh(XW-v#^lU at R1>8Utb>NfY(CWmuK_Znb)x13ekpO
zyE&<V#k{S63}b_S27AAAyFB(4ee^=-+sq<KBmXy+SL($6`T*?P2avz?AxfQd&zdog
zK6*EWbslS2q`fdnB`ywCUe^16Qh7?#ksL<$Cge>FV$w&Ij0L*>6LUTwe!BKWoZa$x
z2f@=7^3=S0p_dV#S-0=s_IGHD?;U3k{~wqef9CjX%ZzL!x}`x2vBi0U_f~ydC5KIF
zE%DpqKHFx_6MtX!Xby+Xd#Wv%&ZlAqKHY3qM`58}>!_T at OFjg=<6a8b=KMC~J^gCp
zE%+^FPHsi4ceixL>})y~@lMwm<Vjyp0BptwdoPiE0gM^ru#n9;9!h9oyw;~}c&lYl
z5OBHz_vDDxGMzTlwHh<WO7J}3A9#)X8NqU(p&zzi_ufB^aojW4k4XnEaQs*h_?02Z
zRds>_`1X&$-=Mgo_0eYV79y#YzkI7tY*Y32DCNa;ZGGcz-<cudj#z0&D135;t6>W~
z7GCqg%4r<tH;+^!UZacn+QFZj<X){yl21OBS~2OJS~ck at sGo`%gg%z|l^Q at _wXpL6
zLlp<jvqY!j*gUb(`^_o;KTj9vihxl;d;vWlw(BwGQnId45%@h1v{K)anc8hUnW{17
z;`*SEn`98{RuFGW?<VAGBtqc4#dzMteCS2|_NgBce>?X at Djn;+9`7te+#cGzH5;}a
z<VXSyY$thhndaVMRUl_CY+&dUXYz-S)$I7RIotSBZAkliY5xn_thp+*zrC*-cr1%(
z6KvW4K`i=r)QR5nl&b at N^?2uL>9XnEBa$Ms{sH7$0?r)Pj0pP$Z>)u9<WxJe4Zb{W
zjuLtt at 0!Kg229RcDj7OH6Imzi+kH<V2W$(ly?~E+hOBvojuPY;uH^5xo4_xmapeT}
zW44eAf$pUz%<pt&*gwx?<JrP0`CHuu_StI73FtYqHVsY0lHA0bylA5LG;BiOlaj>d
z!Iuj>_V^YymYjomSiqUjV#<Ghq!jyX+xI at iFAjN`;G at D#ZxfTXR%;Sk(w+!Wgvo5r
zXfx9-8~dxylKY^coCRv@*^N$d at iGl`=!4ipTj%nbT==(%?Us3J_*vY*wLKjc^tFt4
zRhmvI{^Q|si8I3Nkqo3d|6^Q~%W*Q65FiMyn2-O$CK$TI2l at yme%up&)aA!qIF>JJ
zu at 5!TH0s#K(}E8u2=?P;UOwoj{l)38bCe<0xl}XDUalz)0ai`+VB$$fS*myT;6`tU
zIn|VH+-O3arWk#BbdD9z?M~I>njY^{pdMMUhLILnN&X`bP4B?;7}D^Slpz-KX_uaf
z<#aV|+~|(?rfQlYf7-ZPCYHOxHtIbt4T^?MdQCUAfYDR2Opg@!-~X7$yAGTK;F&WS
z9W|*I$gN_WXG2d^EftY<#48c!SvWFYT-)uRV_5TI&L at zu8crXCJtTo+^3$EP*uUXi
z;TH0~Vop2CXUf3uo_6TLb6=shVV?es|L!`XkJ2GOl?=F;YL14*$u-j31O at aJc|!C|
zQr}D42J~UuKr1BXF at t<hHZUwYh_6C}>#J5-l+q}}`K~D9W0LK-hs=#%4%)+C+A_f7
zrcMOGuY4)6z>U!pL?6uV>&T~te3?D=k0>4d(Em=y_VsfbT at laq6c=;u(|$YuS>%rf
z=4WE9@#Mx~%(*?ty_X4ngQ5Qg at O~wIY8v=Tz at 2SEOtpcm2^=D0>=3Ao!0Y8~-#BQu
z&?sGwlYLw&)I^3nW6z-5>{*g`v5rdx-Qh-xtc$y)PhnlDW*FTUf(G7vrp+kp?B!IT
zt}FHi&hOAmK&IeS<7fciqQ-UAJT>U3Z1fDywZ0XIr+M(IMB7EbAiW>?D-m1zcAeCU
z7*#cY`9<rR at j<Jg0BfV(nXE;Q5nw0AKrY$l at f^pS(IanLi!-^XXDmj0>NyMlyAbtt
z*|dJTrFX!i9kfzN+Kf^*dVs4Lo%A^3(0fdb?$@f28-nN$akwJ>hMWt=X?LtCH$-Ck
zN9v?i>2i|O#gH6HS)jp^O6V=oAIFHV_F at U&rS}&1Ctd?Z^QxmaV{Yw6+grnH7!CSj
zw^X>%N%XVOOXf?{UDdc|z_ at 3kzifHsz>cqG%5YvmVLg-r+a~B^`Vov*%WN6--d55F
z$a%pb*!A#B+h*;{qJewqDE3f{Bfsl-E6#yOyR978w|^MFO4zq){6d~ml=WeJh=C%Q
z$`*W&rNhGRTbAkm*h}US2Xh>AOEnS1+cP0V4m2&VW<;VLr<2jg)s(4V0s7qJuS5T5
z(F*=@nf%>_pxa2A;KjsvIcASg=nKkJS#Woa^?jaTDpPu@*?JcF1!fT6Op>c;G{Ua`
z9)3W+m4tUf?6PXiG)}KCgHJ=rkYdpX<Qnm7Aa+;CFtC%@;D<choHi`Zz&>BWMO-X+
zmu;}oM-tx$*ph0PR^6>flWfPKBgpcP`;qWeGr&{LK>mQ`Q at +MFZQA9KnrNAACu>WQ
zu(p)1p~n!ymh#8Ab$uE1S|&laSOna%%FuK62D^nb%x{LxmydqydL|24<Xdr18D0<F
zlmg=feKVtno&fwc%ZGMOzaRM|2_L}nhQudk%r*cy&&aRqe+Oe%Ox}+ at enm9lvj?0{
zApT<~`3AyQ at qgnSr4%_Hkr5&LJMsz^M32KK7PisBs4#=62z|X*+7C<%AGyl!VJ>am
z2|Sgu;jM)p_N#Ot at D5&}<h>%U3^`Bk=`khAR~oW)EoN?!Gj57 at C67^k^iL#ynJR#c
z2pp-jZkvIB*!f4=Z}8i(Iq&davi-cJQt@~3x;X~_eA}9|r!W5CS9meQuR!DstNu0J
zFZY1SH5Yp(bS1EB6FlvH)UlNRHh5n6mVkFJP3r~EUue64^UAd2INxbIpC)H at BIX3b
z7n68HJNRuGY;^VZ34)sq{%{2SUkZL=7G%;&>?LLVD%t1ZjXW6>fWDsNDCWnazx^Ql
z?Ck&78*U;a){uKJ?`A?bVMcjB=Ibne3Hywm;ppmkEm9F9lT<)oo9g3s(};W(hCv!J
zt>jvqqx%h8K`d26>6tk}hJkVHcP~l?I9h_E23_6=Ek^DQ!*36Q|9lb8_`^S0h1?yQ
ziBDL*y>m*2n#TM#Fn+LQ0z+=v{_{gx4{Uczr-*+CYm5f^2W>NSIAd>t-iq+OCfG`2
zd8f&EON6|$oF$Z&Gr(}d9zA0X?}z>t=kzw0L-^i{5(7p2?^UnFWvG&C3BE+181oTW
z0n`C}pT{I{?pU9!U0ksh^W at nYmLBGV9-N>DMXxAHu at b(fEhgykUT5~vftr0UL{HJf
z)&)<c(_Z|D-t*k`FlMmtb*%E<gz??P`gi>?-6qIY&{fpi*fs$p9KIjG2$w-mQ_0fu
zN>>MD6xe at xU8GHD8?mt{un%&``s!TE)$~i4e`1`n;D6K0c?EG{IigdDZNfR#=0wgg
ze=}%ZNND}H(_!VNI+nJ9fdxz(H;m~_tfBV+&#2B(%^c(eYJQ+=rrIEViaLw<*oDqG
zmy?c?mgzb%R?9I~h`E2^iwzlctXw6a at Lqc8WNWUg2x}lPYBub)E>0ar9(I|Ra#AkJ
z(3yd22W+dgZZ(KY=H$p#KD|D`Ac34&{Hz;z^u2-7kKem#TtcssF{<(8d9XJyKX)Kb
zqLsu+45O45nK%ZmiLUgT6SxCdG6O at R*6r|5HBpPN9mF?13HtusH5WdP#20_hs!C7r
zP;9&caAG#>Ve^o*Qwy*ChWQXO9T%!cz6RX88yDINe4^HzskqSAY9I9!Ud)C)kU<th
z-?SL>a`A-oJk{E;1$Nwwp*fc_F3%<SOSh0EbpZJR3c%MInE=>AFdu&M4(Q%sw#iXv
zF2SPQuzMQsa-mI?HVE8HxBkPpr at -8r_C2Y65_=x83&Vf9)}6H3_hPNV$F0`rvl!oL
zay}BLnRJg+Pd-KMZ8jp-_8cV&GTa<>DBYC~b;gdFAOE-a5C7lZ??}Xd-uiF<Ir=~T
zW19Zv#kTG=1N4kfA{W&u<Red!q*JSbA9Q&8x6dknEGUA#$m?bJAWcB-&>b~t*J`XU
zMZ+G`$&Mp1=38^wxMdO}aVT)vH)jKne$xk^)@HQJtb6K_A}{5J-K#{5DnxWDZ)|+{
z$o6kTMZo^5ZB_99jrjgNLLcMxByJCROb4l3w5P`{tO-&0-X=2EW9P|#2qqB5>j3-A
zg3+58>sEHGGn at ZwtmXJm7LGmeRUy9rS(AE~F5*v%vCqXgM`4_!Fy_!>6aQLQ1tq-i
zlgmy&p at ZbygATrX$+9*Uo4p+8QOg=gY#n0pu(wX#8?eAG$J)49JV!}M1@`B1_FYZ=
zZAE!wF<#occt|AY2=pY~G-xx(aA1R-#VrE84!A3u2YtgPp7pLDS^)f}3(%L|L_ZRo
z_UkBj2~x23IRf@>$ZM_^oNW4A=OvQQjMf1!r2;W#_20ztx|p2X9=>5x!;1$9)*LNN
zBkk4MO3~I`Q4NSI)wWh5 at 7YoYSR$FvT&{<$=4J0jIu0?gH$<_*tf at TkF9B~e(on6^
z8WL4r2D_4H{C_*vs~Cg3YT}+W9g&F!%2~a^`&dKczkAa=5WIy7yhU?I6xvhZ9T*f-
zQB0n-{mMTa6jSLpaZiFKTSV|s5*GKbf-kEn&1{S8&$kPSe}+>cg05}LcJDx9vmto&
z&HcD%AkXmE&4xY?Iz0uyCLHo}#qNoF at a&*>pshUZtn&`u{~unB?Kt!-XSuMqkZWX3
zC3#QrU1VJy;BA0B_&IPAk<Su-OV3Qj20vnCdTgiC^v*k-O3ona6nO`N?gF8Q4jd^Z
z=LCOwLl$_d{Sx?~(696NTGvW5>6%BSbSCrzEzsphtbv at w%NeyIuT7Rb?xc(-3yPRo
z?6BZm^M;L&d?|RQ#ZgM0C;Eg0<?ZJ?=g>|3E~!wE8)O)JA9 at 1y%_o6}<o@*hJKh8v
zD^I+!Y(eHqgYj;xLobPSKrT?t4gJ%yJ0<eCvtizgMr_`T5RXQlS8XigWd%h%_$eJ*
zB<46luQz<RuB`DWAoyNK;X{r+q6a+01K_KO{b%|=uGJjKv=ysgY2e%oT-%lvRhO&%
zH2e2NeE at xY0pXkIU#QWbm<i!TEPRVT2L4bcFi4Q!h4?j*9ClB-x_;q!&pm%47JAuO
zZ<TF;iiFQe%V2HVsml_7t<AY?*I*g;@O7?5 at B#6(y}!kR?|2M+o*3V<kj0KQoTt{z
zc&Qt4m}3L7Wz_?UWnBY1s76|!(Sv*#J+o`MZC;rP%XQz(YuRU7t9-)96g*MO6jdAg
zko%XrgT43Md}+1un2BROmdPnaUY_K&s)9x2{t_MZP$z+{dAv8>UG6A%X><U80qX-|
zy@`%}cxRz~yta9BpO{nDcYss%NFC~1(YY7bzJ#2<=W(@o=Ar`l>eaV7H`}uZ^XfKP
z6MK*7BkS7B at t=wrvbi-(9_p%pqJ}Aa;u^D)=zRJ&r^<STzM)pVOFeR*$fN@=!M83t
zB`K`W)!y<bJz;>qk^RF()z-M85K&)H$hE$uwD%HC_8{>C;AzzKON(P7DJ7owml{4?
zRQt@@M{1v6&tqe?=(JN69@^_%OIlaOTJ41#OIi>3MZIk}O at Vd8)?5r8QuDWYx1M!5
z8x&LUAn;cdqc-1A`h1 at m{7((~9R5wNxrDcxsH7q%!B at ZgtdFMm!a~i+r_ix-yl=no
zMNR;CTQ|-O%xgcU$X2}NlMvT4GT0mXLl%D|v#GUDZndNtL%JXvsI(WhS<(vWZQ2W4
zEpaM(h`a}Js2RL%VdX!btTm9nh*e4r$5eE=J%GMrpG9{F>JSSNj97@}@XZHaTf%b0
zqP>OV4Mz^vK{<S>ZPe}@<XPhVjoS0X5=wE)9r5dn;7idefG+IGV6;J0V at N&SD~eS<
z(GI_d8Ps8(A2k->IaRMS40-;Nhen&f!to8-_0G5mW4dFG!n>Zlx8Uzf<WpF23Cl;!
z-0kpJA$g;M!FND5dou7x8)7+0jwuqWN9y?!$Ht-2)*RF|gO^Y0xch(LBcpB{8^Pn7
zu_w%+#%+dWn!z1u#6GZx(5Ss8G^2wSDLEuBRB{?(vo|ygjEqKS;B969V*tI`(8fbN
zHNHnPV#D_)!$xBy?eJch$l_5WuNC5fcSzmkm_sB^9Q%{EiCzvHLz!mCZU!HF1UOT*
z+(O7ndBG<r8FJ;MgCD#-w}#5@#X4q>&QQ5kVNa>gP(5bxdDsEDZ}RyB;?G8Kl{_ba
zf7E;iaUs3@%d`oxb>;la8a2+%{L4}yFib at _(uZ%BWDH*_$wK_;Ash#(h=8;A=@bP+
zbaQW1sIwsB5Bo=g$bhpi#jw{L$l-LIZw)(~nnd=iz^eCd0V6=n`2)ut937<pP~OJT
z?tT<L{*k~J+x<ul(;~f8B%VD3Iq!1ddq`ss6ykgvj;-)-|KY=hHP6OAQRCy at 1<a$e
z-b+NUO6D|+gFixW at Vm>&`OlH${9-&gKON9}33IcU%uR0<q4hs=RlzT1K9`Hw{`q3N
z2t0y>M{?i18D==Wvj)C>517Fxl=Z1-D_1cWykM^|PSx+`QV$we^a=^Rz*iQw_4!ZB
z<J;GeZ$UrCx*QLRS&)W(NRD+Ow^xXJ?|LtU&bbq`KVNDDulpn$KNN}Y8HbDneZr#&
z0oxNU2OAlA_9cxnIeJZxqj(MEa>Q=O(q42q9Z6ScM(W<%@(cKK?a4h<A#@+e`^A60
zqY*k^^XC4*s!h92+PGp{A$$@m)2zhbC|IbKLoQ3FbNKKvObU0TftG_X9(vJ)y%F^G
z)q;G)aa|p`<Td-(0lz|mqtg5p_VnxW*!e<&(GTBkBVw`kJ&_6ef1|wuv2O>9%$)0Z
z{(_&Jef}Ft9Td5*0PCK*O}K#g9Q%@dzQhI%ej#q-WkE`ZC23=uIZ?r4c_C(n)!`a^
zL+2WR2O#ub$ns_V{@Iu}p`A9Y#a};?hx6c0E520<S{5-`z3FUjDPRGj-#7Dw7^fBX
z27;N85G*xh+ at 51*>nrR<92%Lcx+{;$Fb?jp?<^#_*u+L)Cp3Z|`a=}EO+AeXQh5qF
z*x)bK=)wW7U*G#mnifaF6c4ykWv_oU3*+)gaIH3%5_*2?C<%TexR#eEzM at fvSd;47
zW_s-=xf+O#f^E}4bUhtMZL*sll}m-lV-G9^TF6x<RriI{R;qUN$u{-eH@~Q9GbN_9
zya_uIbVzg at _6vjWUWc(w&4v6)XL{UB(mQHtv#--`OR5bv at OB35#W%F`6yk5lJoF9_
z=U`4|L9bxI{5wNM<}BB!=#r?G@!@54NnwtYq~Evj1@#?ONwsY=A1dOcQ)0AFd~raV
z-MA;o*MYredM at zk8DtL6$gD9yH@^)weCbQwgROY?p0z6YI<;ntIx{)jxEa}!>1Vd$
znH)S*if63sGi~fMTj2`^*&g47^#u6L<#ZOOT%)p^qe59*K?Cl`lC{>eBLum7 at cuf|
zR~W0;Cq3G(bJr~>8f~EJ(e{m#M(QM<J2o+MelE!;;w%7e=S*+J^^j*50B6IKqJ`+M
z`&c`PeZm9lJjpA;Okn`qn;+dl^i8%Z=sZg4db-^A-x{^=va07cEw<Tktx_H*d_ECa
z(btbaZZ2f^*?~34wGm%0`4#l_A#yru)AX>HTHsG%Vsq7P$DW#*x&U!>mwVHB at V8^c
zKGlp|lpccoij3INM%GY#18{mf%5i=M=X0o(91%}U<|gc<wVFa)n~!?L*fYzivus@%
ztGlUvOpjwd=%JnPM(lSq=NyR!ezPf&_|!tynt}5;>R!`&7Td;eijJjgruh0{LyvOU
zuu^reVO(+LClYH0S@!IB$CYD at IyrKtKA_^&Ayv2Fr1N3dX1wzv`cDm>S%>q5IRAkT
zT2p5i1(yZvef2hePk3d%I?2nRfUp1RAas-Iy~uNy9BqfsF;&aSFeTzzac at 8N{{L#n
z!rqJ_?Uf_2+irF_=g{HaR<^Ge_NL!`r`N}Sd1ns$&TYYE^j7o<Y$9y^4S&{;cgCrB
z?vx&QA39o${#;6(?akn3*BYocs~7q0(r7m^S;-XkkQ%N6ZM;oy<%c?RBF0F6u9)vR
zF%h&<HNo<mM8CN#YETrXgl)3(+#Z4QfH_VDUJm)ET<U0(yM at H-6aFn=f5M8RWmEaU
z>}ImY18aue!wC;b{1FIWv7m%qt9Gz!)gCqm?~s36g)w_Q=a7G`?Gxbd9rABnC1*y8
z_}aSr$A(+O_q!h*cbPsvuth`ms6T)IkcQu<1I8P)s{88 at f4z?)n5Wq5$)3MVHrNQA
zZZ+P!`Oyr_ffYw;vG3avKX-?dhu^_R%&t24nCKiO?&988?*7-it|Ar~Ff|NxqUhr-
zu3Ewu>@NYoPyrngDXWO?%g4<D`#5wsFH9(?<W((CbwE!k#JU;^o~+`4MUXf7JeN at o
zE~_5YP0`)<UjA#&V=nn~E05OO2*$`|V5pFH^iq+IeAbS*nvUf*v1>HJ+Q!^GTI~8S
z>4r2L)?v*+v3t}i+fyBgOFt5LbkiQG1^Z51nhpF|)B&qJZu=5orf(-Qr}t4uJ@)Pr
zmwHDv_G1(FwhG|6ncSmn`M}+>a$|0TmkEme at dn}ZCtR_=xgrkI`aNZRx~=yilSIt1
z1bstq>{o|aC_mp~UiF-EO7^Ipl2y1SzoNdyjB`rgz2*PIF`fE0&da9GsZmPDX=m~Z
z?1K|elqae1yC7o#`{E45h}6G(OJ^L^JW(F?M_zgOJhNyM1s<n|4vOxc>qjXopKEh@
zD3huu{&1t^X at BeOPx~9>(R$G*?|S-Mmg|7=?-^oQuG$(yXVD_$Tok&%HxBn>JFjv~
zSOW~hhf73{D*}r)HA0T)g&gr^QrNkZ(gE-y_0-jX-x4k#)KeNq$^8j|J2urh>NF)B
zNmOC>V5q8XU+Ao`^83FSxxl3Z?`&$svkTd0>)2-->0)j+F!5psZOjCGB!IdV)h*f|
z^&gQwbe7JL<QpdZS$*n*lqF<shQCB5)`v(oH>$`r7i$=e{4RAU8#_wCD*+oEeBsWL
zbe;^?>N+g$`MAFa=X*MU_1^r6FR>@j&9=O|kORLh at SS1OAcD&s{G at XLJ`lH(>ZKJa
zy6m+ACGs#l2A<@IxeWO(D^X`o3duznVXh$cq~uGj_92?!C)~omCw;7veMdgO63;|I
zcbXn}Y*Ssp*@Vl^m}MD*rJC!sbxE#9jeTu_NBU?h_Y=@qodfy%X15IgrzCyo*XE`C
zc=%YP2k)aYj#dWivA=r3KJz7bC9HYm+;h7#CMi7I$gkWQ!~GurZzTBR&PniUGZ800
z(|a6z<VEyPkCX7um-v@)ewsbM#-8tE&u at Z<jxF-ysGqc5y&k8!7z at 43P~HXatT>&>
z93^(1VapxU<+iC3{u4s}<=XOa;6pLhe_oT|8uF>F)c0M$H}*IS at -94|6^Gnp3Fm-G
zZ>=psd#{Acodt2SmHJWg%mJLM3nOs-I(uD%Ye(_k2xq~&UeEzP2VSrq?YLZR7^-bP
z;{KIX==Dr(vCBEMWrY3ycD5~@&NG6 at S_5#rO5-#u^@m8^o!N1GEAYEM!59qN&FF*U
zz_%wjD915oCwX$zah})%FsIM6I;&WD{4oPheW2K52=qnXdoke0gffEDfIL&S-b<gT
zQ0m8Djnk3*ht&qb4V;6IBIoXj<B!KFrq1z=C4zeL{0R8aS_?T}tE$xt>Wf}r|A#V8
z1HTjE=ZQSRITukj<7mQRb}qsGpNm6=gZPmw#j%_4QdnOPLzcK5sk{i at zT4s_M~-mS
zhzz(B$jQ at T6)4$r;EMU|8Nz+<g|>n5j%NFue8OuSDVdTnkV_jpK$;otCVI_<(|lof
z;Ia3vt*T-4{a0xhPR-`E!M&7LQwW at i^ZZXcOw2*pb#gf-j-+h`_cKCQ{k^dJ>?Zf4
z;7dyG*=2MoVo$AnD`bE at h)Gj(a?sbEk<bMu{DF5xLf;uFB{?11qq_t9rrx*mMBfE!
zJ|!-HJi0ab5LFE<x^&pf3i_XcuTu_aV;~ZCXvAEY_`q>b_=C-3+(~`xC=1rpTfsAY
z;HrS#rwBG01 at l&PZQDBT+jv(B+6=!;#L!ngLi{;^|KOn|?adaU{XV4hP!O4w at R?G`
zKw}FrcOdUbI)?vKcmR4UweKOZQ=kbs$;3%Aq>Jd7hZWRXW=Fu5gmd5*S94m2LYl8g
zzoBC`oPKA0oGSP}CYu5-JJrZ!&=;wT^mFpK)Ge;LoC&5n_&QVE`U`h6UFGYP4Diea
z(NrrvMEVWB=?&U+jR8I`{q}jBEUE~4?M%o{JDdg3&%-~6&<5IlLrnJgpNK35zO|L@
z<0iI`cc71tv3>j>M>yIOg!xZ=3Ot4%m}*D#i!1&5E*!Sdd>XM(lnb>@`IX>QNLP5A
z;0-FiAUa7PIjnVEY|vcg<f~S5>Zn3G)A#WeUn17WLN$~5D>h<mvEMlh at UEW-zH!10
zM_Vv51EZ~1sN1v`+Iqw_9pg|PJg&`lq%ksj2bu2}I|~K<Dm!-nVaM(mwMMcZvR(pd
zi?{No2XuFXPb)`(qf2}U>7`G*VcdG=R6d~yyL5WzP2<ve6CP1 at So18?rOSi|+Ueol
zebeKwV<o*0G087-guuir2gGz$a2f1{XF(sioDr%n_&P;{cGrS-4}f-i>`kz_{Yu7w
zs^JAPb#y7)r)IWK<!I-RY at beoW+Fhh5un=$(5>5F=~nCn_Mecvx9>V#9_;}AHXwf^
zq2D5we&y(cYb^c3zl`mJNwyDuqy&yq&~MJ&?_=<N>o!WxqhGeL{Q{b#x<`@YiO?tA
zo~A?oxWdCF8MfJ#OQCCF`@?Oz^q8jO{~PVLfOe0vw3`Lmz5c&wHy5<qc$aq9EoEs}
z2HLg!g?5{#X*ZXp-SofEuH{eKZDDCQm!;hj(C!dRyC+DyK)YFdYyTp|a4bO|A7%Ua
zrX%bxblWlf%QW3CB5MQa_5v*d-F8vcIq7d^h4kN<Dez_D1z$4pZJ$P;2nqgPg?(~2
z{ERZO{?ztA18kXQ^!v?edOg9?>yV>9xES<G+BXT?d)&Gj*ZhiJO^3aT`z2_6-}Lz0
zWXI<yC1A(m8+I)If6%B$)iiCEPnQo&(I|8gYVg7b^2GOdrNtcH0U0qf;ZF7-_Orv#
z9kr({DM{EQFn^KqC=am%B}w*r#0u8aRhy#m+cN0^yvun$N~y?0J&FAtJiskdj_L(<
zL{B=lh{%^--;E+?-Gm3pLEx<dPp^kg;@V2#sSDD$v=u)Tj2oK|M~($36YfYmQdZa!
zw&>W{@QrC}DoWY7 at L=19l;yUhlpxy|b`z&O!;D<Dkq#mJ9?Q4nv(IkAxfS;+QI?{t
zLRkqctupriLD1vw<kd13wCy%>4Qv`s7kmKTcp3C}3*j#k3H{oUi?P6iF-1j;HXw%-
za0OYq9spen&*XKQGFoO=qCG38*XLKfiQISnPr5dY54QfHTEu~#d?M(vgn%s at Iz#-Z
zOvy3TjIn4zB=s4i{81ehA-I=`_cv`+3EG)UN6m<5GrUwAvw~nIM2G8&RWgo^PUje@
zJkd5_lzpJu#3_MY#^{|Q`kb4);tfU at a;T#o`G>p;qPg!<*^E+gJiL{z40q5Slxt8#
zLu|(f+$|gnqskO%GiYO!QfSc5LW~H$jr$CluhNdeo`;Gv&WxF~-O@@gKb;@JAU_*R
z@*3FIeeVXpY at KeQwr=jOZ0KEGI66P6l4I5$m|HxvKp<i+cb0qcqz0{OrfEuFL+lYp
z$}k=_L0yP2Jg-fttrzV|?CE{wVVP8y2z^lEIL3TTdhThrs<_aVhov;+Dd>1AqbDST
z^0-fz6WtBuCsCi1wosA5-OSdzd%Cn8vEw6Dk+cJL_>vXhM=2=f>;_8HYz#e3pZD;e
zG-k-hFkS@<lD>Al<)efheoVUTdAGwdIsh at D^Q+>t#`}vOHY4`9NODi~SWra$Ylv4>
zO?q%^Tesp}f$;mk4vfxr%@6h}I)iSY#wZJgyd~7*=*#_4az<J8bAmFYu1|yaO|tJ}
zb5d;B>v$dSXkD|!@x}Cer`osi at K#(WI;qm=#gY!R at 8op*_V&5Z<?K79cxN5^PAiSr
zF7OQ(`Jdi>mu^3Ga#ZW13^RKwNG`Khn)@~6%H)X-!JIoD8D^gn^dDJkVwvhnqbGeV
zhwaN3B|k)WqkUD=?W=2hkL^pkqEImY%LTt8<XUc|JAzB;i}JYjZ)KYibCE$8leP)a
zHqdp;f4viX&^J@>{LZbSY6}D0r2FVkphK;oy0RrcZXx$jnV@}PTc%fji%B3cDpY=)
z9_qW9)$p}1p_IsharSa4p*#P)%jNzhmrefFmo4DikFdU>*Bw_gbZ$hyauD`0p}#K7
z at Kalu;ixstaO_9N1zbz_gTI_-kM5EWFr(auMm4GZ<F<{(4&{?7!DmeTXro|kba$$^
z=p8SiG1nu<5gmFC`mPiBrc!IKS3a<P>aH53VVoG%3{D$$0{8ZiJiS<l)>-F=r;XQd
zw1ikvl_7piCS;S;srO(V96&$(o;rwk8A&`{W`86w?6sJWBsZisfUf;u96bNy6U*0V
z9FMP&IUYutgz{e)A67?#{bDnZ$XzS!$nV#@5&mS2khw`bVFSre<Gg9N0GGhb&8s!^
z0XKy!pDKwy+}DHXaVOfTWJ!N?Lt7l}NtZ(oBYr65njb={Xf?+QT-Rw{7g%yKx`dMp
zUNV*Nl32%5 at ZS`PD0-qTF1kDTAXQ{NnOc!8a_Q@^M4!ZSvGi8tz$-{9up<8%T^rU~
zbY<nP4hxYxxN0J606RK``0+~((RHEi$VDdn?(=L5ef_>Qp00&!1VtfTR2=vQ1wF+7
z_6cC8<3A&qCn|d__OgSBoh at MVp&o``xEE}pcXjl`4ii;?{c8ksXg%!7GP)N0^?!d)
z{QuW`Acyb3yT)nZoC3sv<<hk8;|^dOw%yN7B-eu?8hz}g>^sJt1!&L7DI9FtitlR2
zd|HV2mBYWk9JX`YvyUGEJ`L=DEmRFtz(F1W=xEvkD&p&JdiX4E9)yl!OddO{ANeiX
zNq!rCegDNM8C4VUuModJP2ltIU4t*PJmA5EVd|7=y`yC4<>r%ge{yKj2h?Yja at E(2
zp6vDDGl4UW9NWmPeljD~MCZ8l*_(Xt(2_jyYh8%NlSOrt{S!O^^s|DxQ9JPd&AyM*
zCVcZBd~4gM+_$YKsiF*e)#<!!zJ*{!%*lpcD5CM4T~8JD4iou7pd5t^#riwOc)o`H
zst38iREWKS&mH()_-Jx!NIvM(&@K5oiY#l|rrPm`G5am(f5p(1|H}W?sDQqt8U1#U
zsy|acOGbF>>Hhs<x_`Co7`GFC<<Bwx8}#va$N0Phc+D8&ae4?o<xc=_mB=eY1e=`6
zoQQ=@R7i=l2f;VgpzXEGjt>e6U!5ocF8Sf`$gm~;;&4?+_^|2?!?5b1no+5Tfndv`
zE}pkrTg$V=mmfU!^tCs<-IDZYawj~Xn}p9J{BM#WHxnA{qwOAY*g5yG-|`D}3v>P`
zej`qmve>iH#y at -!`^J-!-&6yogWRB|WvrYlMl1kgRX3W*H$$$-MVT)>Pv)J=DboL(
zVDwie+Vv7EANB;rtbdv0mFxTzx|pN%2wed^MFD;9whG`8beR&P!l?SeKR{0f^0*s`
zymq=2<t*O8?DyVH44VP`eeg+|hxt7n<y>I!%j3($uCd_ZQ`&@&e$HD!sZ0s5{TAC7
z(t7B2BU18Uk806;@ool%SoLGJyt<iXzOm-#=>|@^2f0 at ZdMbi1T#duVG$co+Jgjo_
z{kN}?2RthL{uq4^->T%8ly0IESEr at W#OIUfq9GeYcTDuagIUNULhPD968&%RK~LCZ
zyi<^?t%~S5h894t1dP4ed(h_Jc~Z2$8L=uuvkhrR_%jy54qV=hJcEs5!A|0P)BhQ4
zm;;*YWADQbMleMVu)a4+j-1lnz+N_|^kG?;{B+TT2Wx|Pa{|2NShKeqe8`VMcDnk)
z7oWqf_}l9e;qcRi2gVgm_rZtPjBh}EHS}cpK{1agp}SJl79!W`<6L!^-x*nskV|`+
z;;Wq;*9|B~r*;2pa6STCL?)T%nD;%-&3s at a$W{0IqTVe2D;;lPKYCOie`GV(YTNqK
z-an$;8lM<9Hf3r}l@{a-7Ve*`OLgf%J+;$y&dC{weogW;C0G>%ewO7QNqjf;-O8 at P
z3$}dFL@#oTUrA6qe?z at otox<o+9vVjXSDg{eE5T1C37Yy=HV?XikTyhFkG*CIUjVX
z8!W*$kp1zxs|>Q*e#9&2W?NKm!RKEdus6QG8Fu{%8FI3hv%kmL-`f(93+zcT>!%4?
zy1EDQqYUeOIWHGJeYrU^xtbjG?~x;@J7Zkbl!e^TaVRrU{v+0!EsFIC*dE`aNhbEC
zhrM?h)+@(a*1Of}KC|{GPv=8?DfC?u%Oo|#ExfKDYHlKPd^h305a;cIIPW_6V*SC(
zMjtnO)y1P8_kMdB(Np9-g}gxUnV<fTL9V*T7xB5o7pD#RXe(Ud*K_<a_#c6%Ui+;b
z-#-R=sa{QZZ~<#)!}UeLZh=4Z)Nkaz%!OV5lZDU2w;>{RCDy+BRVRK<8-3H`>(O`e
zREzCHlda!*WVU67D_cw+TSiM$&x;WMG5WSguJw4h5`4p_D-DNk<=M2Vhv2tv?Ft9}
zyW>}*OoVk{NZVo{zU1Dj(O7a0z1#rute%B0=pB(*{Fq1uTlVzYm#7M;*sv0D4)w;t
zji-#xja|m!jVFym$HW|9wtyE1?WiLDElDb3$G%P0k7VNimJrI?%tXX~`HWjY_vKkw
z<G#QA4rs^$8^Ik>Z04(j18Sr8vqpnUKF at GN6=;yEJ~f1?stlj1h#%SQeLil)r*fG;
z;iafrqAv%=zTcz=(VbnsAMd^cyVn6a^Q4Nz`rJ;KejYU6+{x{oy8et(+TpSDFaNpW
zP)^l#!$^3h=N|jZz5h5QckjvLM@@gJ??-OVpY^r>xB6~6D(?PAFot}VPyMC7Az;^L
z;#*ya?O_t at z{E_lrWXx8 at D4CkBi{TM`lJx!3tYcLw*r3LuyV8_sa9l6RN$I=)HF4w
zI7dv{U&fLhUwND|I<J1QJ at rC}akwDF&{Hikrn<LfZZ5Wldp)u;{nUkWW$JpPEU)qY
zuGCoIv)13=^`UF^v&hABf!|K#0P9IXmvcPzDeH0Y>E+>#)7SHA%E@(|n0uDc2BDY4
zjfU{A*Biq47WnB$5}WdxcK37HCgM*B-5u8Xk>8Mab8k{)P|P|HuezL3S^1D+&3=K_
zEO*Z{E1<v6#Xd2TVv)9`=%t2~VluvC-%qW at L??)Sf$Z}Oi4268!G-X3)LX4l)#K0)
z_d^{DJ9wm%L)NbGLCGe!ZRj`nw&8b^N6{+z;?=YlS9_p#Tp`(nYZcRY_rD=_L%ukS
z_GI&x0D}QK+=1xscH&PFOKs{DMAwIv_sG<IuFh*LrxU!F+-rZ%QP^R;fE5|V?qBoJ
zu8^eh!z=9f(T3y)!~WR=ABYrbpnl{Z<~^`Qv<7c=>>lq}^GDPK{+}NB`+Gk?pM3Ok
zN!w=+t)tX3_i at pho1wEHlgo88I_f#bl}j8Elp4G$^o`T)hyUD!6LQXSDyo_E<pn<Q
zgZR6f2L;DbS10mu<UVqaQuB_ISR~H?_~mv<gz%+)JwYuMx_8lQ at qDqb^rn%{rz->}
z@%&EsRrX4M8CR_N!+wcwKs<jV`rF+*40sPIbgX at dV+}rKGp2b-+j0Hh;G at cT3JP}a
z-eLHY62Ih99`OqSAI9<yMbefOb70>$`>+-qpoN+tx`u8TJE0j1u~Iet&yaO`!#>#H
zf%gDeH5~n%?&B5|`NIi1$Vd5OBfk at PafBz$gWvi1oC??!2UCwrjlNRwraRFtE$-zz
zn&DG2!?mD)H~hT_UPlFJ<{Wn?r~Py?^09VHMX9;)gC_VL?0=k_fJIV;7>7#4JXG+{
zBMv&>`I=UBkHtH1qJzX!XfwG)KTtgx$tj)$_5u90EsPgrAA)!06;h)u$SV(334*A2
z`*wnr2HC98zcnh7*$#W!#(=ad?*4UaHSJkL`OBIH$LAV?Vh+?jCIRnXJ95e89O%Ht
zTZ<SLcS_E?7yf4Rse(uNRIY#b+9Jp+$=UfC((pIAa;*Ew&|fCQ-#8g`o=nCdpapfe
zuh1NA{I36Gb(-F;57ze%rxl|FhCAUe-OmyG1pAy}MbX5JsN}FS?P;hdfY=he#x at k6
ztA)MVwh&mqIfucYK>o^}M{?Y)xdWdx4ZF9%pV3=seF`y<Vn%K)(bmr#3%%cA`aT!!
zH-`wDi=>9{`;D57`q9G#BLI8ZjNsz&>)0DS*x1x>$o!^bp`#uCzTYPUc{B_jKWKmt
zj5%x~_fXHeiKS_7oz}E at o#xbeqV$c&trw!|j2GZ5TlZlEa)y15n9yo6e=F9@<M-Qn
zz*b?5#P<feK(j+nd_aIf@&n=hOO2rtyK-(V<DxU<i6_h9y9pl^XFhzGClMzD{d?;q
zt7F4lS%xt>tC;G?k2FUwq?t_byVm%GF^XS9{i>=?5qa6G17l=z&V`(7z}SB5-)z(H
z)a3i|4Tyzj0>+Vx5Pnzo at R~Kv(hlhQmZTIT?_ at D#>>WOOMs8dEvV5RsUN)ZBtumbJ
z`OEW%z{f2!tGTkn?AVc9rJlcFPaVe`u at T!?Yay|XZD8$xtrytybHq-DYp?@S8v~YI
zX$c7Z{d7RuFK+}S{&Fs0$uD{RZ-f^(&wwXym at X@)%Npp_o5=YP-CC%X84Y~vNGsL6
zvYNV({T;2MCAdC-Yvt5#at*pM*eN%3L0+U=FKHDXcwUOUDeUvhDP?v!u3v%w-5Ey=
zc;6m;6Kjubg>4eKdFDLlC>pxQ58vU3Jdv2&;Fs at p7J%1{X4ijht6C6g@<?6?Kgax6
zB}Mg|zr!YI`~5VV)8spH{>vNe`5E>c`G4*{^GhCkUg&ZT{q+Zq)dBlA{77iYYyXC$
z2X>LUM%BXC;VAs`@?Tv<&KdaaVVzpf`qdwWe}$q|gFRt at ilqD)UHSVO=ak(G@}+sI
z9~=?bG%7cL1{+!tEhe at sc8x-RaN{UGBQ9T!|Jdj(=q^=35$_^v&7aSl!!zsfOh$Rs
z|EL%J<%l4A2cw!eNCzaxP!Ydf7=GIFn;_+h7)p)*C_}$Ku`oRO{dz(J!3&ssC-vZy
zp98;hOB5^m`=H!t(0&>SerN9AA4##v*Qi=r5Z^F|et+zPBngwBw!NYWJjZUI#nf_2
z&29AjSM(=vf~{j}IZd9SRJmtp at GdQF8+=9ye>17A_*o5nzeKqH9&AIMcf6i<{lohw
z32otj%0(R6A0<yK?wDP3DGQ?%EM?+bUAgZ?r!z_o9X?zzz>NuhlGiO=&b8X)^p|6+
z$sAdx-oDgd?YE9n&Gq*DJlG5IjMq)y+T=5Jl*ROKnx;Bo%h5=eZ_qj3$A6;x=8b)<
zS-{y#%aY&0nm7PEWw9W+wH$pM?D;R$5sy0ZQAgr*9bW*)o!ASf>)7xI^i4OwQ+x&8
zPUOt_j8Yl|KStP&=q${i0mcRTi?=vNW)Y{Dwc8=DtSQu9W4|YPbMOV;*Nl?4l+jRG
zo(WWm={?wyir~j+%@Rc=ixS>VbbODonzqGN#72`b>5_D?@^J<wG=1AC#2BuE{#6L<
ztV<a~vnw-(;6E}nrxZMRkb95AMC^EiF8Fevf-J4%b(y}UOA&WrLaw4p%qL>wgr0}Y
zXNicdHyiaPc2-d}gjeN34war?VIVj^_<sg;3wLvl0Ow*l&qb53r>~7yPwk_`RmHw(
zkSpPvhj(NWx_s{)$gsfdXKD11&H(=#U;*HL=h*iJ at iM7)QyOhrk`KIgg8v11%kwST
z3|(&x`+ZY3vpCRe`(z5oFu4MKiM^1S-V51pFM}R8zF!?(4>|2BsSo<l>x4%Ouw7}9
z$+hB{rMkk;+-Q}{La)5+V8m-1?QbFGY&Ay at j0p>DcNWhy$o}!;J+5V$gRgWA4o}g0
zx?|7}^!^D;?+thKHVswl%mwd9<R2?{2m5>H^lv%*Qpx>W)4!kR>e%1D)4zX*&s+uO
zc0SR=F|x6D?7&%K*8{!7Cis>%EuBsDVOVpm4zu8EU=?hHKS{D<HRAPx(%#o?c~}VE
zuaRC3{dL3UdBKMmEoa1(*j>KDFin$cX$vq`*AYw!*vMP3zO--2Ey!A|&e3sqN!*D(
zpI*T!- at I5Fw5B{KPBTjHq1DNow{!<j at U+k~gxdNePbo_O*)w3m^>4%XI6vTh6JkD;
zm%UtjFTLyCMAW?zd6iNoen76 at +o8-6Jg@T;BqOFiZ>}Gs4$+6_3BG2`f><U`XY*Nn
z`TWyvz+yc@)|MRony9T_ntN#4M{O5DR&IcuxXedm-*Y5v>^<a0S at o<^+RxSU-tzpG
zvUvU*xrVzOX8ZiR_t?2vLS$L!_P^Jv6_r|F&Ms~uU5XgRVc<py6AErV^~}86UM^>w
zkq>;*1H9yJT2I%+%jsEE?Tr$j#Vs*Dh-E2zOoI5r(NbLt&)ApAc?NmRYJ7Bvzkp4l
zG+@%|(iLI})=aENpC>;o`m at h#HqS?&@1*pgS21-KbQ%t<G08+M?5#u&jul9V9fgA&
z&6FRdqhDvdpl>-#wNqMpD|pEmPl@#-s%^YwV<r9Tls?7!Gj!oQp at Yn1Uc@@Fh+`x?
z9RCu01dt?zI!FJ+K1a8SsdMADL^=9SN&f`e8%+HzE8QzUq;WLYsMY354N}Cshkxw&
z7QER2J)V3bx{foG$)#!;-2v#u9vp_w_&lvjK8~DYM(EI>Q{z~D=koNPL!f^d^k{h~
zi7s#_i?>mV`(-TthX~g?uzwzaue=pJVdR8}9!fp|pF8L{Z+Z|O+w}Vsj}6_Ho+`AP
zK|7}je+9iATL%=TnLbMFU(i3YJT~&vL-xNGT_1Son|<_~59V=-J%@rVJOy1s)n5BM
z{IS<3`8%TUuJ)l{Tl4YUv2Pg35PS=onS;s5m6!aEW}m%=<$+hyh{c(>^Iy7IGJoh#
zsg0mjtSj=kcn at OVv8$8UkhK)+h;vH}^$;Zk4MdQbpOFjlIL}kdzD8c20>nlg?Wjk6
zt?X|lbf5O{$cXv=J#Q&P!q&68&m{(pD$x+78Zju88OF%u%WndkZB53kIeL#l_#XZM
zee`Z;5BPo^-ybsBQQmDzD>b}Kay-7FdsbV_G1%+qvXw2_Ms6H=AJ(i7!~D*wN5_Lr
z(8nm8Qsj)>1^(bB_TAWwSq~6B)8lC+wv$?w#1IPof%_>uqjC0l9G?FFKYkPA8y<k1
z1MDJNN9uX%jx-}w<)k22;Cmo%C_35%YOnLrue13uFBO>&#X?tx--l|)N4LgFuX6<O
zFRz at IJIVdHDVg&ZWdEei_=a=S-_)HkYc~0&<7s%0C&4Y0VH_E$g+IXZ4A->7UZ&{R
z;Zv+0t;D+j at jtSFFTm!MTP6Q0P`cEm2Re^&^6mD^84u0=Z41fM9Dgk`R3*(u-%+mn
zNqwX)#<T>oLG<f(#Eu+Ad at U;*JF!Q6{L&T&{771F@|wf``SWgDZrb?}L$pc<9m=(A
zt=PvJdak7<%{#9tZQT)!aes}V)=AmRfhp94TvCN2#lTuK at dtQ1$UZxOg=k<d_5X@?
zTDgUkjmj6zfIY_yYy`B8x=rPVq;FKxTSI3_E1**u^j?i?3P%L?h})uA$&A4PRq>P#
z$p2%{_&0E*;^@KQ9pf4QDUJ!@@L|h!$V_A&eM*h}TsGM_cIM at tK?{{kuctJ0HvH8i
zmLLzcJu8{P{5e5qB_D at Q_=I5GhBl2JCcL><7wpUdn1hg?0)_&mo3xWp!scyFIMBRI
z9^X_X*x7syIj4(BK5*Z#3x3c?fWNd=M%U4=Lod72RYn&tz3L#?9d#MHu_~$&^0Aoc
zSy3K<{gKtVLT1qUj36fUpsOq-H)_zK*P8F|7A%rlyuJ##N_pru6WKcaD&p~V9VA~;
zC1`zy2g!|o1bI*1ATr3UKCB<5h at CE*Cm*#zCwEIE-fH2Be8MQX5A4Ig?(omRJ0Yv%
z|5Zh*hX%az=<_5`5|Lv*lo6T!)(v(I!n*1`j=7rbGlP<29oQG}#fAga*T5Rw4~)eT
z(@_6EupXS4xf56iN?Xy)0<1^Fw3Ox1u>Nq{unv6Zvzk&~y6o4I{TZd`?{(FYy?#tZ
zEwm$kzP}eSfkTj+4pEVs{<MW0Iq>Gt=eHJMkN5)PY`v?CDKd}gU3#!Dv(Jx>koClS
z0<nZY(6P`RTac4*@3gM^Bb58m$7G%y#`!_`^wtb%n}oEOGeG>eLBobKyQcNvUroFo
zT|2F}hMtvqed2Y{%Wp$3x8{Qmfgg$aDW(PR|A!A^lhC8sZbEE6D@%HBf=+|U>Cp7Q
z5KLbmduNFm^9s>&Sl0$9iSswI=Em34w>{(})|uF at n%b!&@T>R-d<|akx5a3}Y at Ujc
z5<%YB(7U(Ue2tN5#bf6=@NJB*hc0lT-R!-I{U6aK7eY7kFM<j1SG_Rv%amR?Ifc~=
zBPPJ~4*G`G3llkqr)6>HR^WV+r(k23iH|9Je_Agl0ey<_zm!SH(o_ns8u*dbOuKV4
zWa}D2pHvTI?E{2X+4fn8|Fzez at R0?^&}rnqVk$WqOx~&*CIEC*MC5;I3+Sf~$C!6O
z;K;~7x=cjYe at a7QW!N~_%ne67*=rt^tp1L~#@1~pK4MPmIZ`qtT5|`vl?U*B27bp}
z185a?y8u&s24Y+_L59wQ1hWJ>;-r9r_<E^9a75vxk*_s{7goyri}=ulwj+PvzTTB1
z<)HuDB5_VHe<pb1BIgTKt+bLqbHs}46UbY2fj<-Ss<wHJdp)n6+0i20*o|^K4k?bU
zIA|Oa9QAB0(nlDF&k(mqkz9P63=>P?)Au39Rj7rYLr`u$PriA$6nU(AIR;N!+WyiA
zd=3=I8Lk~H9o}6sFkD)q6CmHBwoWt-yN^(yAo;B!zjo8Hlp1lto9=kX<3EfYvNo at w
z6gQ3bF}nGS21Dx7zfZ(rE_OtpqJv1DMeI+L)M^QGpS%AXdY3_xYjMb<3BG?p5!EMI
zKiO#59Bll at rq+fJhMiks|2r&jBl)|Unz<(U9QOt;+tdYHgb at 0aJm@QXrl0*C`V=<L
zS5q@=AoZagM=GIfB)PuOmqMifrP*9x at zNFhm{XwD9Fq5`sg=Z~O)Qflk1%J5__P8u
zV*vfd2qKA|eN{E^8pa-#flj)S-wUyk at fkrez5ju|5j+CEsR4B~yBuF}50j5NrEHyh
zNM6GDZG^|c|4xv+VAHY3j1;*vV>faeiqunMDcve?W8;i}rEalp+ylFd8_^B9z_%Us
z at 1Z8pKIC<b+!12gq?3A(7`gaukRknvOfi7G2@^rcOR0qpxNLZ*^@LP)zmcaHu_S6n
zniAEZs~%u;S9x_$Rvu}5EW_)C#{8D_#BVUS^Dm11^JI)xCM|ziIcNsn!40kW`TB4+
z1}m@#`Q<Xu_E%JmoB;1`$pF@*1}cK}VUNz(F`L-4GPw%Or3PSh?U-H4|4G*Z?D%2|
zGH1NhQ8}*IR!;0=|LyvArwn$AXyo(wDPw%LUJ!w}lEjHPc3vc6Zk8iXw;pyy6)%Zr
zMV?>yUBsu4R>23Ef{k!M at HOlN631@j{RO|%)C4-pnZDOQbq{rPPkOAWc3A)XPYU@@
zjtFvcCUvAa4r6;bNg@@G*MjbD!G|>d{yu_Lf;cSV!`w{96!n*2Tz7Lty;t~qy-cHJ
zb{jthcFCRS%U%7PaOe$OLFZ)bSM at pIZ_(6 at cr2NB1ewS1`PC8K4*chURfIAf at 0`Tm
zYNR4tbg-N6!aM4*C+>R2Ev($J6FOQk#x%XngxCRHstI$n$3gO*RpFT$JlmM0z_oI#
z0`~{Fg?JwJmG~XjT>KtPwcy^VHsnnI$UvSacJ-WQqRS-o*@B~aGY<RRIBe3_8;*jn
z(3`C(I`(_9mYBXvjC`b>X}}@DQHP@*M<dpd4wTg>+i at Jl@gt67&|j&h=rTMIxPmiB
zib2meMdIvlux1eqJ>=IDX7XnS>`#6d2kc^a at 7@g=BLj)uMjyKhIMyn<8OLtqBW&5E
z1y)8j!EV4adFJwz0&{6fp}8`JjU$&<P1U!3JL;=Qwn>Ll7LXk3B~Ow#*u);`KE%LU
z1>NTJc9OrSo>OW^9Q%;Sq#iPwhKFiR7g#%sX6k!C{>u4+faFzc2k(L0XabT~jpR+W
z<6MF~-2$>^n%0qiO8OY%hunWuq%>&w()MqM27R>d7^}%DXB_gq<qZw4x5*RaSBuo$
zf7 at sY6+#atI$n+aq|LwfkScq5hnQo`xIFVCercE?fnXfBip#OTZ1X5&WhN<Cj%&@~
z21d(6iSs==<TK#pd>HR#Y7_&92)b(gX0Z%gR2&kcw_PBS1|=$18Gc4SN9H(=lST#X
z7r)C at v)4q|gO7{DI=C1Zu4H^B!fRqW`y*UV at _@TDa<NE!uV0aB&L!kctHM#+iM<j>
z18~$TaM*C{!ck4^ukXMHwg&dP##=##)6uJH&g?O*?VQEYZ|dUtF~CE^w>02r#8KA?
zy(7WoVE?D-fBQq%n&)C4m8OFqu4YQ4nRv%;JO?~@;I|>h0MD1>unrC0I3kbRBZ2S1
z2XfUT7tw~-FjvZP(9o^CgJT|Ws}YaT!H`_uCw>aA3F||yI>d+$O;WE4QcSBoAfG3B
znO4i=CRfT;?<3Z*xkIiB7syp#D&(;bd?b$>3qpN+QP)#Ay5(`>UU*M6;fY}@y5{1b
zV_i-=X~gNxAu{NYVz+QfQLj at Te{Z8pZ&1vt;@)d=)d%13Q#xvV<D4nJ!Oj%$&aS+I
zzpMq|wZFI*GRfz!&o0Uz+W>pSHPBoq>f{Xl>eht(Dg?XrG1w&ZOnXq|sYo`DBzPLg
z3z at 47r+>&1`7Fw5Kdqkg!*i~{1200Xzoyqo?cJN{yMuG@>EwX>at`qLr#JcPc`B;<
z^eSgKa9^J5RL?oe*JC`2p`+`jgY2_78ePD>w_VOq_cN<`erN7!9>ltLTOJn<uSEJn
zlKQ4G=}61K#_l%#u>ekSk{Zv<YSY_i&G{R#MF{$wv*qzK{w`2A_frn%4wqiy^Rwc8
zjH^LdOy<RImZzcMGx6#&JJvn6&!+d-tX9Do{Ul;V&XPUq)nyYa;TLT4d^^CDa{zIO
zuV6nM!x)0+Uwu(JKrMoQ#U--mUEz at VNyZ{Wcc_8nywNJ>7@#|!;gu0+d+(C140ynh
z)yAJ1ZYn&Bu}m&fT|WUCjbKX|d at s#yXNm;-n4!GSRuI2Lg|yOhzIZe2nR;M+1J at b+
zN|$qhr)@J}kH4JKBTY}~Ue)6Hk-0y45$-9SWNjA0W^a_MZcM`F>W|m}GoRo91pIlu
z>wjDyBsRqaH`+**x5PZ>7G!v4u>`rZjWS>WtB+wmJf(JC09INY!Ae8D6aVA?hRusZ
z4Z!zL5vZL{7S%6G4_!y(+`#ICfx59r5j)-`!28iY*n+q5vfG5nfn;OEoU6-f2do)8
z9wK;W;5Ws^1XJ}cZ|toi`;`-zsgSe3>L}&PNp8xH4?*uw!w(63tW)Ls`4m<Pse4$x
z=$=rmy+r=`4KYvW*oD3g;w1$|B!6X(6sSg_Cz<(qXsx{(d$NV<cBXO>7b=h2_5iLw
zCLQP0EYwMnD~3MLe;0bkyLiSu&KuGp&N-LUz|M*vOLW~k7kGuC?UZV~dqD%RZ{H5o
z9}HY+I93=Wm=PfXPA`1mgQR-?;#I<f4gF!my^HQeKj;s>$ntLOz)d_JE(bR2VnQpv
zm%JmV?h#rGC;2YNfgdnDb<ZPbs!xf%26kz at 2iR)x59&WRO?&LKQWN+qHt%!)Ip9K&
z at 8Hqc1AQ-H{tE>%!rM;uy?bV0*}=e7hBG}VUnFaT?<GP06b(l_<eW#amk7=y+L=K7
zLhv54|66q8nL7BCT;+R9OK?7bHeA3t_C<0o`JC?^YB*UQZs-Cp?U9G`vT#FBC-?=$
z)b-<D;2Glf4zuH5i1%TCTK&jWj!wMmYaCJV7pQpknci102N!^UA2?54t{ETnX at hL-
z$G=eP;jVIa#VsV??(7=Q2c~f3RdrDS=h{mjNQM6SwZ=U4^Ih)ydM^#{v<&8{J-RTT
zUjBa=`}VLV&h%{$Ef%K5T2QO8RYXOl2LiRO+u8%Jb=gQM6{<3&X|cQQ%DQw{t@|sb
zl7xU})Q~`c5CY_g5CX`-6CxF?R#ICL2!*L3Ap+HwtrU<d+xp$_BzE23ckT6kf8?6U
z9N&45&*6UV$LC7cHvd1?>0_RDjg$3nZ6SUd{0i_>L$98g3?7dNZ5HmnVPCTsy1`Gi
zA?llD?T_VED|y*j>- at JtFWSTT<gqTE%zlgHynCDYsL>Di)9pf)sDG%ScA0y8>S5%V
zx=H-WJ95DHR*3aa;##|>)cl6c2i)mC6!N=Iyu?c<eqWbNnQTlPmxP{%d{aMkymr~k
zopQZ9_o2f(bxlUH{tzyMtUt~~tXgPuxRS2jvi&>pLFHZk0dTbKTiu-WuzcDBMQysh
zkDaOTaw%u}?;v_z^;7u`yAnuzFnLETmnT!JUz6)L4(&r(Rr^VfF{11JKb`|T<iQPM
zV-k7q1oRSOCt7-Sa$ienm~v!JTH>{H5m~F{Ne at R!Vg|EX=ap22Kc=NxS at DJzO}1$}
zjo6~yiH;bI<zU2_w!rpe8gC74o|Q-AIU^r_EWH*IAzfX9`?FgIvw|PhR(&KIe!$4n
zR_)Cnpp3hu4#FWlo$$u*k}^8v+v=dj8!j(-+d=>TKX2y$*Yi9))wLnusjixzQ@#CB
z1 at M3SKmB*TzD?>2$HW_y-ujRT$6-5DE*+cPcSgs+rWW*aW$l`W-IYU!(TB<c+BXM&
zZu}(r3-c$x-*B1DG1mIOi at xOjhIdnpwRGOZ^l<~>$0qOn+A=?{dgUxF;m!sV;}H_u
z0X~ZcrXFn>zZWs$<C0;-$qrjd-qW=OB*)@#6_MM~j_Auck8|8UWK6P8;&s**a{HCs
zaSe&d8TRZKaQoGsd%688ZoiPk7<r$g;r6}PbNk-wxqVzefq3%&;9D;P_k2ZP3g+dx
zOF6D^^ilDeV{Qxh;*&(C2P!t#(};C-#FKC1FaTJ~!k!@guvG_Ng(+yNb at 3XzyNc9_
zI)m4~xwFmu$(7h2`*KW+IiF6TX)!o05VJ<rvis%zuw at cFNCSI6b$tFIdHUjqZ6}j+
z?cW9MhV5Z|)0xZ3%wdMhp<z3mYKL4QC)_>;*WY9H!Tx_DJSAw8xQSNau1|CAnMW;V
z#TOL7>Pi;3*$$Fty%iY!2%a at Jc9^N~JPW#V1L44izbBpc*}DG=lQYkzcV-L3Y2^+J
z{}jP)I$tOMv8D~$6#K=ggA3nb6;9dC!G-XTIzAzJI?%U~o5Heemc|kkeYUM!o<Wro
zE)!sg7e`OMK;ld1V!mu8^9Ax%T<Eb=hrwl=-eaaJfb&11StO`Pn2q?IOu3oln)^j3
z7!oM#{i*N7Dm!ir+aij9TRj=8?5jY`Ti$4;e_^b0vKBeD>fL6MiDwDUj#X-mu}ZoZ
zc7Y*h53%3DR(DaTqHh92t%g6QK{JCnf*3p#xb!Wlo%6sM)uscdKzy^J{Cw)wHt<^7
zk(WmnFRVwt7TBv2cJOowNyw=J9_nUAMOn`|>M;BiR$Pnu(JldRa*i!e29AmS{UN(j
z%pcXvyvn9~%YPEQzU`E=M-1*=_+1lrOspf{oIis)zGi{jq{-&Nrm^eI=NjCW-yCrt
z*W?G^{eM)bu>Vxj at Kj;+MsFQlZ8P3|ANQV1c-IZWfe9H0ZA#`{pH9~htMb(mJ3|k6
zOn3?o&-NYXe=Q|_V<MQB7c1^lq?l75Mmy{xeU%Dl#WB;^**DH;XHRR9%$oKlFbAj~
z^ois0^x#XjBjDOUo>pyTk((5DIE&&d__X**2E|v;!oNg(yDJ^*(ME-|$oh3!rLT)E
z5!5;q8~S-_ at bN3qj(W7=AlFaZ{Wsv<VH4{}IXXx=Uc0v((bLc`XS5G97A`kRyiLRL
zU5|6T-9r8%+ljtx<{0UljMVou|6QxYCiNAkS*(5hdP_U>qQhZL@`|0hg;UvF1F)|s
z+f~OuNZC3vt>2^_zNc)(_m++HW5>JA3d at F&UAFxBI^-{pmq~=svslTkU_Lk!0*F81
zY-HS&^CaH0S<n4HkN<t(w~Ip#xJ<^fB9~zZCju+M9J)V7{9Il(Y~f5*ic;S4iLR(k
znf!R7=b2nQ{<a{@WxzoVB4>B)qy~I+^}rw><SBxrjsqg8KrE6XzVS4f7usrt^-gfL
zP{;Xy at dYmicrNnfgUOwvKl1X>4<5!l<*^l?XOEDz_BcPzQHgPSnx}NV?|Gkm5L{~T
z$5h`$f6W7q-~18Bb>ta`sXB05Xx;treY8lDL@)5?3tsoc1Wd0w#=iIEv2l5+|4F=K
zzpdHhkD`xk-H%)@g;+<sNu7H8dn2V_CG&>qJbOQI$6As at XvtSL9mdUj$je%ZK6-DN
zuKOH?-!gCi39d}fpiCcBVm=*S6pnBDpX>?bi;wN^g`B+f6B3&~?(-|(N8m*N_-N>9
zB1;66N;2g4Gl^^7bW36PUy9rcV$x^!4$qv%rXvT69DKU_+v>UeH6p4Ed2lLv5S~kH
z_QFeaSx-Iu;mF6<bEwsvS_N4&o5X)PQbXb`#nH0XE%2E at zq&c;|2AZ+P8s)X<i{MO
zCCw&bJT;BYu#b^Ge&;y+U at rnQs5~TtkL at t&zdSAP%vLj*qazdlG0hQ&d0D(Sn_0*4
z14}BLtjVwPqdd?3zZhJ69~;IAa`W7Ryt=c at q7Z3UfFIPLfR1AbIyZh)I8KY%X2c10
z&ZyjYB*Gn{&1w}{r*8q)P|x-<290q~g~pivC;WWyTZZ2`O?~<x3m=)L{?SZL{e5Ol
z=e$>NeHo6KHQiHvG~M?v!@dq%a$Tt=|NhLS1z3-691?%!#~7I3G8M{g)!;Tp{9z_j
z9o-XAJBnOZB5mjv_EW?|WmC135j^dZ-UInkfgJyj<mcNM7Jl8?HB=cZhE496R>KoW
z4NEOr9WTb&@?1`TIrsq3AIDZFcgk9n$%c<GS6jlyvkdv;R9)D^t}FhVelg^KI+j4N
z0sepgJ|jFdx-0%X<WnEuaz2=75ynOZvAHqf?Dj(~@o^VV1tZT=!fe^VZ%X>D@@#O$
zpFrOmMcZwwN?xNB=-vZw&l{bNO~0vKYW(zf0{(k)LEw=5nk9S>Qx5EdAvCa!#F_5d
zA at j})$A2=U_}TmY$@=xrrlu4bvDdk7MMH<usQkgNI?>;UTq|@OW!_r2^uEag_(l~Y
z8~yWQF87|mu_nUB2CnH(T)*&&TnDhW>fsmDvwgtumNb8tcGmiLjS-xP=LI>53hRi*
zc)%>G7!yPPfQ{}@o7*HaxK(;XpNNrf%A;$Ad&a9+-F}%?O1%-2OV at 7gDh|-7W;T$R
zT+Pk7;!W|6^eqdHoerC>csV9Y;1(2(pL_3=TCye(++la0+2wg=)TqR~d2IZ2(5Vtb
zRJK6hCl<7{HULkw73I!Dewn<HBmT#L$tj|MH6Xm|*vFi{m28Uz at a4reEXmjx`p*73
z*~@2342;URBc=z~IQVNj#Oh4MTt)UNkS{{CU)HB%h6Zf!>DhMK?}-gM7~a_>-HP9=
z*&`6WCwExnS=5`GYO0rS*$(!zHHzOv#a&C%<gGrjX0xDmNDj`Iqwdn6Od)dBNkaBc
z48Omr!Cfj8O16D9!Zd^5vjzHxn9hYS)aqw)!Jg{Mohc4kRrDM<%f48Dl`%zs13zH$
z{V#{C0>4m~tpd1F17b4!aV(YSB*YK-aE`obM-hpwn}|#pv)JgrG4C+X>`Ht@)SRVh
z$XvCf%VOKv$@C*8 at d)l)xZWr at vo2Cl`(19-<#kTSQTixTMt?I(L3TNY`Q8E?$(vm-
zZau>0a at QIAR8f~(2YKBze2ej80yph0YFV?o-?VXjeDLKL!PRM!v_~I6S at Q2J+Od+v
zc8_fgopaj|n&13$a53Vr^0 at K_gZml%lrg}5{ASnriQv at VeOi$+Au!P5CPQk5!Gb<X
z;v?Mfk093p?4mbs2Lmf`9T*{3pC5DN2~mrA$2VmOAs at Pct?|{ful~H~$vHnSd-CC!
zmcBh>%TnuGjVZGPH@;f@%OZcp&C=w#quS8iMrZP@(QC;HrXO|s&(Q2v3tbGH_&3aF
zPb(sYPb(*0hU^p)a?^QXWgzvptp&2uggLVFeZOUDfCn<}xHK;x_>7l(GMWDgvqpu}
zM=TOy7j<T<hI)Cc`qrWqb8Z3OL$z<!;@t{?{=9f{k$(;Y{8r;4WwOsK^^bGAlk=m_
zt~-MI&zzeZjk>j`O&XHB8<*kyt6aHG;n>TQWdTJ at 1&QmW at 7ysf-~Z{+kPoqrgsrMP
z2yQ9JrA~SrxvmH&+0T|>$fk?u=fL-~9Wn6>9Q);+RMkTG9B-Y5ta_%cj6Q<nvm8bo
zFI||8{fF)8A+v>b8dV$NUW7d?sxGIP?9bUij<eD>GvfJ|`WuCAw&ANX<a}P at b8KR<
zJl9vx%Vu;q$M-)99?dRW8J!1A$rQ(FIc#X&bF2K*g@#F$_nfbzQk^R(_nr&(S4J61
zifu;jzBzUY-Ypp_z5r}bq`qZ2 at n5*Kykd(pzHT@(JjbGo&)KYJ;n(oQ?6|bx(nMY<
zzXS7&EKcHYR;mKW34Xq}(UQYcf>$1SK{#3IHl8&ulkh8u?bGj6N)h!4t3s?~o9_|u
zTVCB<KYp|4D0OBtax(QjOIbE`Y9lVxQ09~(o|r9BUx!`49OtE}I{0co at I{<FV!#_p
zBIsh*t3Byd8NW?25Yq!W$H**>$nibK=9YZNZ(|m}9A5HlREN~vgM6IP_gyQ+Gs_~B
zf;v_oCGK<1%R)Yzd^X#Dqvun~EH`E(YK*dF8|xu+v|`=;3h`lBH&agema*BU!-#z-
z#~M`4ujZAp1rw2?C;bjU=9a>y9<EXG>ai~q)@21RQTvXtH?x8^)?Zt!=~{ha)5ArQ
z4R!Ne><!4cquw?Bu<M5R**f-ysS?k&vUz?d at oZi1LGtW?+%&{(q~+T(IPU%d<mb$!
zWaD*-`pxyeI`*dPEM!s^_cU_%96&zLeUbXU9>^rU*tRlaUI8^i_p;C><o(L`hY^#A
z_kWM)AHe<JH#577)fKzd<Xv;ee9pVrgf81Cbc3;yhNs8aQfdXh=ZsGm*5Aj;``XHp
zC(r=d{|w`#N`t{S_>ZNIN*t^A9y=7DTUJ1DRa>@4Chq8Kwt&m4BB(n{=hNNH?6var
zbh^3%KA-xOQ`H)58<5vVPakY1c|lIVXVZv20eOm7%gVWXn>HUJJlNF*DW`B<J$G+9
z)>Ajhcacz!{A2A{^Io*MNp5iDs5-}H%H+hh04&Bzo`J}pvVQ(&@UJ4jCXvmMhfhbJ
zLVtU;WYKe-{p(SG(f)r!o}~}bUZ3FHNXK5AkM9ZoUc0+bMIB)>eNQtDRAJaZT$>>C
z79&@!7`a-^(47>hpFGr06!0DIK=vvPlkQubROX_inh16Za&)be$L(utkM^htXDf~u
zIdh|$@Eyok5hjOi9`R<d|9*kFx0Q^GfSggk64U%TI$-p3exu!u{;not0quUK&xa~a
z{Zp*$7bSADmeZ2bw;d+Y=|98&N)<EpAH=NfbXeZn9V^p%&(|e8;^qBJBEf at +tPc#4
z{ynXe%0j;KC*~c-_{c^cnL5Z&YS`W!5;59P+EYUrHZ{Ojm*bQm2d_2e8yAVAMPEM)
zY!h%(3PZMkzCn>v7X!QWcqLEUY;01^1b at 0fzaz&193NFkBj;}K7TX)aFSxR|EyNhI
z0Oxfca{RwAH$E2|-lvEy>^qG5zHwQ at 9`!pJ&AX7#WcpRC3`A_$AE_g~;CJlR3a0V2
zf*D^cuwQ)J0Nf^WOaY^ONid_A<n%g&I3hB~9Q2f{&s#3!%00~5{VMs at l%iK%w>%6O
zGj1Gr?MtK=I=&FyKOc25|4ZoE?6jZpt^>$@I09K7I4X7#HHvXE$UaQnP^zXc#5f-o
zJvkG8?wPfSL)G^cpsqfPUD>CE%|^)!VLx+J;9MDW?=tq>`k*B{5JRru&1HKrSIEK7
zn at u&+oybS{3U#sP4XU$e4%N}KjOtRp|HB~Oe-Ruob=Y?1w+gDU?Z`hPuwdH--ik7=
z&d(9wpI>7j_+&*7%{T8XbCm8h?_091#6GrVyX#+E-FAEH_Gdfn0~4jleR%Ey^3z~@
z5nCO$ox(2Ya|-mwt5}o!v7hbwJh_wj2<0aJ<iw(o1~P}Ynu4#!DBCiaC9rAuk-pc5
z`6g^?Yz6uoa;wpLuD=zdzvZF7snFkYx&Bsx{>Ggr{jD#PIxOrIC^zK`P4xE9^TL`I
z9$`ytCZczs?>vmYGYfs0;rdn&`c?yD3^uzGd at kV`WL(yk=pc92$CI2@|7teMr2_r@
zq8)k-eCj)ZIU(!F(jIS{R=93p{Mr0J6DsNa&rgCQy7Vi&-?Qe-G$TJ)>CR>3*(4Sp
zIG&x}`#Ql7Va7d*&+~AP`QP`Tj_<t(zR#(nz^9(GaWTD1&Xe|FkhjUN`VoR#{fzVj
z*VnMOkI<cV5s6<CUW(Lzv&#D(J6FCo<QOA7h)KMz=6=Wp=K1ARZErz~CUrCHO?rzf
z{@8GOcv-CSYh%T>jekBX?=ewQ=6<T}f)2T3O;pAO6QyBI at SU0{JN`2`PTEzbuBR(5
zfbWC;v8i9!%nZ<vF!w7}%O4^+TbQCIBV>eS#4f}-fj!Q#r^9}h)bkltzIQ=;Ikwe%
zA8$AHG*DH0OU94+T=a1JqCbQ0`&L_Yq3tmI7-IepuuGg_+(ei5 at YH*_>X8FLCs*<G
zJY}^0^4KQ*<$y^2FAl8l4TM*py397)Z$KwO4!NR at tcn>%Y<xvu0or)z3(TES;o#*K
zx8EP7 at 5pr=TaZPL!=HbJ{71VF;r}m)fBCET|1XX*&S#xRUBa{ABb-^iKoO%?-|rxH
zsCMGhR;y+j{ENS+C{aznjyb&@ZL-xr2fmLhc;4VhIgTM+31oTjozlB84hnGm7tHq=
z*xusKe}!wlK;E3Ve>hRrBAk<wvc%}y?{}E6wh-U=C2u+G+;#u*UMC{&`1LxHlML^N
zk3Em-CjDF387W-jKpz-`et(LIMBeEpVY~f$P at zk{=+nr!rD?#skHxn1Dr4Jv5CeO7
zC3LtVdB5iD3`>7uiC%7`Oqzo;Dx-Van%6o?MkDgF(*5(ZGNZ2u`ZpIv^xIU3H_H*!
z^l7xiBIyHFn$oN)jdey1lfEm_T~SgYU&SPD?$m~h8lEygf62Xv=)9uw2gv at r3}k=0
zLOz6;R at hbvF9wqYEKwFO2mX?P*rp{)2Yi5czC?Zl>&sUOx5(z#-}-&O1-|UBhi=y{
zp*zt(&f7(>yFzzxF{yb%eV at u^<S^(9pxZ`H1P>L~F7cs+wXCA0BDx(v<gf*%kN8xe
z=W_kYKzE at Z&EBNHbix at xVnkTg6y@4WBu2y~k0=<<iYSiIZc=@I*j*^s^GdF at ge$cb
z9!_KUIRcRfF>pff<FHkybj5tJx_a!H*+nj&`9-MP27!*vag=#DyXDA{P2^cSa(=s1
zYxCTd<C3ta<SItTQ_eK7g^Bte#2nu#M$E}<g72GXB|gldebROC4X)&yi7%D-O21vr
zD<IshKSc(lIAFintAf8Zu3Crh{SLq1*))AODeL(3!0pOyH|fy8s55oN at Ig+17p^1n
z&G>X#zi?N~f+Z=)BgkkA3I2e0(6uf=(ww1 at mX$t&xVv6o<RsHTW=Ux+2ah>yvyu8c
z7ze;3y!l3AE4_J_<E8POu&00t(ZMJARLHJXl{Mq=1vb9jg7^gM(!z!K9{ck{`xNUn
zQl>_(^3 at N?6zh2f9IuFQ(M|Z}a=5vxgv?z;SLLZGea}wq;3L`EjA&J>w{1q?FF{{e
z&<0=Buw%MnRpr_vp1Gn#dOvXOHY5Cbp#cidu>s9+rVrH$K8M;+UiQDQMXdaO64OZh
znPJd at xbxtrA<yFFL56F^HXl60luZX&Nknu_<@TgRjwfrjTo*E%A-;j1c-fePRm at ME
zF9hv~zIu?Sjnp6c7+4JO5-u&U-zM+CIKM at 5k?_AHxku3EU2?=i3GC}&W7!<b2d`{w
zn=J+L(5vPB?k<Tw<`sdmyI_2SyG&BCxiePQmo%Z at a3U*{#Ci+I8JD|jI&w2<GTkO}
zUXXphC{|`mvOmB6cM=`b#aM;o-+daPoc^P6d%z9j_N-R_zidVQOT_f*A09#8JN?vr
zXI!glEOGNQjs$$0R2V-QOz&#?IT>+J?!1{5o8wTP_X)n at 7IKmk-E{5u#Q(aYJ=98z
z*MnoSv6QYIZSYq&mL~U&9$A*>#Ts2~d|#>hhh-A;lL}mzw6a+X%-Q|4vhiE!`949a
zX05hi+G0ull-tR|NPYP`6ZeM<F)uM=lvNOWJ2-h-<H*LPGI0WME=z)iBD(ORZk`&p
znmFjdy*PH?h(6iTxGFgT9LlQ3Yso%80VDB0J29^rlIKJiNM3B%l;1+E^;d|w{!$p<
zcw$pd#L;!CtZloyNgW?*9SFWPn0&cWw<5Rkf0W5To&u)5b47dO0G-pgBKZxJ>BUun
z-2WnQUL?Qp0Wd-E^)$NNQbzAirz$ps4+L%XT1f7#;N`g^{lOC0%D8>`V6YVXipk&=
zb4U7@&w-7yLZV-pJ6e{kxLqo2|B3j7mWRxm0H?ui*aB`Fl4p768Dcx$*l13E48HZ*
zn`&Qc$N$L2ik11^dew3Fei#w}Td+Iu&%$^ngCD*6V$%9mmCs}DE>SI9%pY8Bjeps-
zjoZEw6W)8}+8>1t at QD{lKP0~Ok_JD-OT(Z3cFChS_BVbDi2<DooWb|Y`0PZ|xFqoX
z*jz1em4SZ-pN|Q67k_dtY_(@BAwS2}vu`aOJ1bn>9RD(~pp)M(D;c2t*R;E9`u at o1
zS(B_XqDXW;VQ18)4THWax^n|K!L!_qRCb-?k6Oh5`;T$7?Z%&=qgQbG=CZjsRDYi<
z9()5m4u3TFO~O%D8BzO1iQvbt#>*bSdJ#bfu0EKw-n0?=;LVbTPzB_e#XOEbo+(0Z
zLy`j<u`)mYjp&U$<OGHO7AkB&u8MB_?9kyB5-tpk?PQ^z1y1w|_+TL$=-EbXCB`-8
zS1w=D0e%X>uMl4a at s|U?mPYg^=2OV1i-M%kjWD;<ad^ieRma*UcLV$gpCVVmEBqG)
zuY2NardOU3%{qQY6sl+EO)Q>NQBQ}=#y;}IK;~IYxF<aNqRh$VmlLB550E at aJU%-U
zIr{wNnQCdZfxj2uv=z3KIgpurNxnFgF&;Se_>oG2H$&{tOZ at L`C)Zy^PM>td`Alqz
z-}1BT0nHx?m&f$VR#CvoRuS(q$}r6~fHJJYK5t?g;acZ6g1_l|+i~t*iT7T<>jC~x
zgd6Fe^3UhWk2nmJ|Gr<#FDCcXdr${rt`3fR>R=!0fbfmq^X~cFyTiG6-}m3&jk)-L
zy&H8hgXGDg_#v~gKlRslw;%>lhkSUE{6?7 at xnfyfisfsObfp|R^^3@(DI4#2uX5b*
zUUmE|>E|1d2_k5zpyrNBBZ)nI{hVzTwHp26nFu9gqMJv3qcuf~A1k at OKb*AxZtmFh
zjk7-60{c}kmw)nY at CEFi_%Gip|M36%-WlBY^11Jw%6+c{Hq3Rv!X<^B`=SzlV@{99
zcM-X<rVl<htS^JWT^f4#68R0=2-wnrfkyrfGh$68G~xguySA{I at M(5BM;2%)9ovg*
zNuJ*W4ilT}C&05T*!qAA&Mee|`&t2P0`p!Ke66POWaJ|)>@P#^AI at jb_3bh6py$ev
zQ%-h{e`=<JE&~=KSKS7TN2zT-qqq4nI@?OdgnXVy61p(gpf4^BSaA%wOuj|Fj9h|S
z;P-0 at -_l?F367b>GOTlT5nBt6S@{t{9jj<H$~nKR{7=9#zXObume?19GT=8-U>t$Z
zj++CJ|B-#bDMP!wh_)89TI)N}JZ<=zu?y7^8P-K>j`f?<0>Rx;VAZc_=&vH*5s_^z
z#Xj<O5L^e5*<5R}j(w`!KKS<DuB=kXMoZ4Vbx1tEDe(P-=Qljd&J>uFRVZ@>6A8@!
zljOY#@rYYn*ldcHU>m at g7H45Q*HRFiZ&Ak=4(kw))&srv_sVVA?<RD~CER$F%UWP>
z#y5`tyk$1CAF%+Y;0u^H#;F4vsiH?7J3)QMQbo^fTzU~)57d1DM_)@a9uu4z&81DO
zpY}THCW39Drcz>XMM!uimJhkUmTF+b<Sj9|;5E36`5zeBH(w-pFr1GVNh0|;;G;jp
zJIza at 3yDn#ZE_qK9B@;u`dpU8lM%bpzQw`@%EU_04vCY&cy~R@{rL`A-LaLqlo+-q
zS?}K{eeb)r$o%yBG_1=%;~Q at IZ}jSheFDX#mgJvyhVZWg%m4GlOCe*B13ft~BYBtQ
z66hF-OJ{m>bZ)<yme63ofp-*Ykgu43oq-O`Ackv9!aU0m4y{af8RL_`R8SpOj5tsS
z^xZFj3B3e<j%Ve;{s*9=KHE`7IOc?N9W~IwrQq0~5%UdCNAt&T(k0NvVUOm{KL-6{
zwzr&T<SiseHsSHd_?K|=r;N0b;th?6F+^X1EyfS!6kyJL7C%q at 9{Dfzi(IIXxq#Uo
zuq3W at cgky{wcjm@$R;wx)GZu-M>XM2=xm0bru~B6(+1rGxwwHb<ZL*f%CGobp4dkJ
zc=x}3AbuCoGlw at Ij{7zCd(XW3y6WE8%c=S-6{BCTs?)Orlp0t?Bi7j~@VSmdUr+b$
zj}B0YEAc<m`~N$i^AVXFq;d(aEA#FH!#|Peb6%e5K9XOHeL5r#_8^HJwn*5HU;_<4
zMcN8&w0(j?yF39~ff~Mh&pG%9h4uCu!D6si*9^ZBo-coOS)SuGu`yyE9i1=d?t2>d
zU9u^-`?&UB_A~=L1%ntAYLusi{XJifI5609w@<7JiBp4<2=%C9YB46U{`%FWG_;w7
z9h+(sR6KESdXpIIFKi9qBGCftdAv9x=oIlYkTFbTWUn2%(RJgaGGIuEJuQpa>t~pQ
zvYZd5<hY7=fUBId|L4g?J0S~m``OK6U>Nl~h+Iv414{2ZfMpCL+$-c5IC}2cmvHws
z183bzY^P6)_~$FK3FjE>TeT at Uwxa}lNXwuTzh}R(V|!%WQ}4MxhhADG>~bAU$>Fv4
zrgLR^ASD04KBGBxXrw0Wx!9BK5|^Cl=TEJ7bwz1i_aPo^i|`6!G?lO!cFD~e#J7 at p
zkw4jN<d-)g_bF!=I6&`mu_+xFs^#^5`dKB`UR$Q$G2sbAJ5K?-)J?>mATKoeHpo)t
zjLNUp=TgO`kIbWGtl6*9$L6T;VrnwBY<CU`;oF5ClAbzO{;H^Hs+1X^wjhS!I#&jj
zw|uh&;>jXLikMR5btL7JUq`HUzfd7)qE*B`=lTM23+z|T8Nys(TpJA8J22methOwQ
z?-+JQNG8B{OMLmR1bUZ;KPOD>Ea%^`7VeNim!ATRM3=mRe{uqGzQjjG$}V5aE0ni#
z at l}}j;?kHPelv5`r^AA85jd|XFt!Lbs*W4?i$nf<o1Gwigv?PZ-nG at RgMQV4g^V=p
zL8i&)%190T+?cC=vGVVr3|erDp7hrBi&%qT=jMSUxwoLTj at YMqMdTZZ9hq9ZBZrLV
z$T!Dcw&d__h8)zP;iGOQ=`N1p&J~Z(gzKx)W+Sg*BwO7eEGKO>PaLI}!|sJOKAYdK
zuHZ-5Z-hxb>py&g at Qu6F$(<wC|7iQb2}$Z)#9}th%H%gzZuj`nA-DCBdiRt|Efto}
zKj3*b{0wsPeDq7MZ+YyfBUb1>u%$YT$Y&T9WFGkz_A<|$b=h at 8IGc<u<i=3_*S=dt
z>XO(<?cfbnZvUnE-(&B;-c#qfM`}gh7;~x_IudxUgUTY~D7Ck)N&iFLt*z;IG7V#!
z*4q1v*7Jr3Beb->H{))9aUiem)W)C^PoI3+ at c$Y!Or-z**puBkct)0e$R8LOyNJY<
zz~0qBeSzF`-PnGGtzFm&e8l at 5h=+|#d^$)TiSN_*=G?7U(vLCjc2$0x_Bfe8n50K?
z;0L{LL<Ya+w6x)ty0q_Gtf_OLXM+=Pr`eI8Iv4wh^$7GO?c$IVpOfai*i6Y3vgq8H
zT4VBe;_w5O_MqI at lQxAx0b6r6@r_-8t>5Dxv$AAfSbxNRBW)PlQ;<Os8y#fDGlx8N
z7Ie`0AhFreosq)nS0Rh8nlO9&p9gE!^uPLF&PX=DoOc9stud?^cAMj5Zg!<(j;IaF
za>>K)xVreik at xc>8r?xf-Z72(2%j>sjPwVtA7`Q;rxQHR+?soyft(<?E^u|pt20o>
zhLK^PqtMG$n5&1JyFM~|$LTSTe-h*5ny^6zydAUdtuD%(aNLWrlUEJ(D4288lOV%3
z*xuM{f)7knorfH(hgo2`LLX~%3bW<?U;UOT<)1_>QG?^9khdoEo^Pg<y&7*nK4<^e
z-T9j6d-S+1J*BQqO!}Z&)m_e0N7c?KYRcg3o!wLpJ%s_zU}Onw(Y1}mZ5FjE*|H<Y
z^=?=(sh=OKe(m2~%r<rvV`1+{d8B^T^zIho+m1jVNW!zOhWXf3u)Utqq(5bTS*taa
zGyu=o)h~tY^V3&(jO9Wmlan^UJ3^0IFQqMU?ZyA>G?#T2|Mz9?G`DpwwoVrD!D)+K
zd-vGkTl`U8%Kwu=4ct=!Fm>RV0T+i7Ym0K^Byg6;kP9^lvd%h`sSIT at a%GBdA-41g
ztl#O-2PO1nC!f~<UErqR*e?o21^S*CeXl<}1HP(*@TuK!6<}REDMTM6IpTY@#J);&
z$$R=3c~3XE?>gloI^M~D>jY%s9_;5htB9?yEd}#{YMvSX)5BQ1ppPQ&K_*ipY{&i@
zyA%2nxH0UKgoak7 at Ct+apyqJ-l8FCQ>yp6s+)DcT3fB1t<T||$EFJiD5U;P5JF#C0
zt{udiGNHokMmK*_CJrcw(GSe_$ilCuF;@{=5ej)&*P8+Emdz7}m4V=mY;I~odsq-V
zDGF0VPoCf0<Wmp+e>H3{eayPFE719W07ml(w1bpVr(Lto<NqGEfN~<wVf~UeiBr2{
zPhL{UtNaTf$B=sbYqK$$X-z==E`eMl at i}I>Bsw?+xlIk({2lh8w;=QWr6MwJ<zCn4
zX;#+ at UYw|v&a at V%{S)6=$kY%y0r at Nrh6pDR=XpDrvoZ8QXGOVEWFzS-a`B!Nly at pA
zFWLe4zJz+l9dw+D#P`&rE?*?NCwyRs at A`dN5p*&s^{u~_8-J$gfsr3bzF5{QtNiGP
z3U%1i-f_|48GndXND67NECSY2c7<Wq36G*3NxkP$K4|+vY#$-MaQMNm3V#HKqs#Ex
z-0T?rWTR_E*aT_oM{k4cjm$TCZar$4R+jokY~f|begk<I#`xQSi^;iL?`X?<=;wFW
zPV;}Rof8Ip<Lp>*H at My=Pr6nJXFESdT`Wd?0c5j^QaYZD>)7kxXn<ucLx0X2&7gBe
zrKpFeNuPpzX!bc1Bc3$b`_V3;h||dTIfk;$o;Zy5tL at 0PxR6)9*fTbOc~QFJfbpos
z99;vuP~1z;aDDgq-RA|=I$kI3N#=$ytWClO#5>Mr-0<fiUe2+Av at _;CQLo7Lxo{jD
zkW-qj%*%F7qbnE}^vw#o!gWyCfH_t)u^ivAoWt70$DX{PK}>zY-Swo|C{cyN2Ti`6
zE2|4U8Sq8P#6fkK&q-hV!W9=_MgNk{w5%@~E=^t5Z(g5;d{@9R2UR;P at h68x;R@;S
zTDu#0y+;(>THb-&dKSt|i|9OBq+OQw{TW at _gX3e-8teRkJnQkL0gN&Ewb3DPG9nhz
zuQ^C%P at vA9gKcvNIhG}O#&6TUx6VhsiokKEfzO~XbS{yNv`%2KbfNi?iOc6Qk-P%#
zSRvv#EX(o;R>P5vZ?EF=&%H4LE^N;lN$@pfE()r(r~4npv3=GAw!!bz$CcyHFCA at s
zN2z*zG|gJcPM4|}<lRO5uwV1iMq3%Sr<Qb_gJ0RhGwCg(%jX!!&pHKh{M+cxk%I{h
zPCoQ?0pV#`yAXbg(}-96JM?WSbs)NDeGMzHDwW&+`6j&^^Hq#ow?pY`rbo(3(oE1J
z#a3X|nUicD1FSf28mo6Y_m<Do(=U^2u>Az*Rr?##jNs>1?N_Ch@$_3WtP1Scq?KCd
zM9W+q7gWs0X{Bltj+LkBt%2TSY5d=St3m7PV2 at IVqy3!gwglEai1n)q|I5LFDFUWp
zZP>25hj0u$*;J+XzDWG9!~a_E|8 at 9ZgJ%=0 at G%@e8r+O~GshdYJ&*NKqHV&t3Y at Et
zQlM<WA%Igtzct6%gX1O~KaP7E`B(8Ruj1T3+`E6&f at 3F^itGGwUX1-F{#OG1Wd-5q
zrcU9wFOH{UU&7s&2EQ?MM*e45qctuTxR(Z-NG2E7^NuE*u$8k%eO1W0QM*ZvXT3N+
zjydRoAoW6Eu{?8g+)U;>;h21JiE0(N40z^*%<2-%fqK-lmCnVp#gH|QV|x&`p^A~i
z9$6PLZY3im52=*&X}XBW5}3<$vP!zB!ue62^HHzvB8uKf)_K^5<0b|PhcRqr9HvIt
z6`A<LVwo6yqnF^H`%Kia)T-Eu&(3{5f^Q at BS*>Z9W+rPj^Q^2kwo4mPqQY98->)V-
zMEtK at chUyNt!aa<r+3P&ooS0k>(YY8$G6O>or(3C)L})i);fD>OYI~0&$VmV6+!Lm
zo_ait;{iDCd5_fJd?ADRgYXjU9I%5Wln^_|NDVl$$bX^VCyp%6j*)9nFS0t!i>i?`
z_}E=L4v|0pc?0qpd;>px0K1#{vHYqzz~)?}u@*)p5*cm80)K`P at _gxA4HaK=bAFXq
z-l`Yme4^m$$O2wjH}om+X)=1q3Wkq`F11H~Bk@|Ougf+o`x(`c|LLwcY)|H&8G8+O
z;p58fSxLg(kmdGNT!J2~@Ya16--mlH$@kQn at C?=`Gg+T7&SG7^=YKC-jJp3bJ00%|
zU<`8b^01>!X+Vz9hgO4oLh7jC*1gkOGp?KA|2Ah^-yhB3eoAPj3$dLkc$t;P{=q~r
ziYstW-l0tT6l^)$?~EpN5u1+saKbocWFHU!&j%SMhk9{*^1bp+&EIVc&tCe)G4*#D
z5em`!8$%pb@*7m5CNESUjrr?|1Nbc$88^-q2C>@(nWHM#@99(8Fg*7&8vJ843;BPQ
z>-Qeriu#f51!u74Vij3yVe4dwo$qOBWa5)=14mPZ_fx>hmt2I8nK99wR4#PkmC%V=
zIGbD(^xCSsZRx4!7ky;?y#2%`=Q{x`-w}F5HjRJj@<vwbE5m#l_1MSMkG&snxVdDf
z=UvNV at UE3SBVFbAB(*wLfBV?dQ^z!i`qvj<ZwcSGwU$;$_7k7Ezj#E+jThy}2pKOQ
z{j;hVZAGwg-$%de9Vfd8&uz>!cKb*j>3`%~mcIyDV=m9gKFB-EKE%6^oyPeRlKgj%
z9Pp1O{7N3|8e$24q;nvzO$p7UQIAh+Aa7<etJx!rKKQ3*qguMTe11WcJ_|Z6Sv!T@
zl!Bf at 4H7=^r#F)G$>sBlqV$b8KS^*P&?}xKW1oU=Ba at m+Pl4<J+{@F$8>VU0<i4-4
zt^uRcNuGn_i^<xF{+H|eaA%p<7WA3CMbb?fh^+7NeSo8K7uOe)!hBk*J{qjb^VY!)
z;W()ST({eP1O2mwXE at aVR-nK*s&-vTvkJgBU}NCNVJ43<7;8VRCHrYl;JsN^wMe!5
zSXwpg2HDK>h(E4`T at ALjJ0f}<oNnM8LcFp2<7!-cgDRsR&<@U5xN^aL_~IL#v3`B)
z9Sey+BBU9z%Wh|tPzn32CR)a-oCi2Rmr!m34zO}>FxKw((1+ at rRRkMIY!P(Fh=Gs1
za3Qcm{A&L?evkdD5V}~gGyM_5_hP{qZE_V8+rnKtSjcRQqi at N2%p}b}PU6LRIjKX^
zbmXBmrql^*g{t*O*xOh$Z$r+h2M$NuWb8T00H1+at&FOoo^yzIP|e?a7o&r65#EJ^
z*b;n+lEdr#2pbA=gd-;BJo<<mbL(diZC at i;J7$pjiSX0|Yj+rPX7{|hW+T0G2QU|N
zb+o*>>8nBHwP?o}A^kw@>e^e0bwN>GfHk6QZxx68G75X5m9Tl|#CFRU^KZ3Qrd~yS
z($$G6{KuI^C8|()*aYO{cEla6mP>XHO-xCV*$2TVIfdli1+Jz5db at j>$;H4%pALQH
zJg)|EHdup5yv~9=M(Ur3d~RKw&V$?{Bu)o5rdx<{%8~=aX30TJAc^nFNy(89sZ|>)
z&gW51$VX0a_(kG9+n`G%CDb=ZJ|YtWgJV1GbG}Kd+~ySU?_kaS!SzDeRD4q=^e?jJ
zWuZ;K0XNb~ONYFH5znhc99V;)BScvA at dDyw659VMJOO{A3UQR at tyh7&H0<pJ1}>N5
z9W{y`^0PpHxJv)XEal%Ctqc*4D8p{pUg65!!F;Ceg0HcA>T=XmRZ1On7;O{mdzKF1
z#>6|X%J-vw-VZrO<V+?qh{(4$Y!d!9a6D?zceE}!Wd41e?GbtF!jc=^uyIv{eIrNA
zoV>;R?7!gICSkMTQtDNdU5c`=M*re)O5jyF4xOzTw!v&-8zke*W`f;*ALKE=rL7!S
zUxjcS_i6Es7&qW?`;MOD`jWH}nP-Si6MXNNmneu0mFrXR=eWQp;&+VS5BzD4+^IF;
z8;zpxg|l5>!q+Du=S12^%|SWN2Z7V8 at nG{j@<;5!5;NT)Z-q_kD&*Z7p&D{MVib|L
z!bt2f7Zk9qk~YkfXF{(%&(o3EI*(4<4t-jwn)(~$j{)Z(eS{6-^imSzrDMljtE05e
z4Y1X|z|~hV(RV3-=(}iZ!tu&zgD&5#vl&HPoz;2kOo2L^Ga(VyfwQl((e3 at 7e|hS6
zMiFeNUlM#H=7egj2jBrC<$*meANCi8w=Dd-WkI=?LSHLnkRJwmLxubY;dpdE#*4Gt
z;`$PPYsB(REK0S<p6t*d#=FMz&U>#32^>LOG0M|~_4|hHB>21JuoIeK5A(J;DL=5j
zYPn at +wM8SW-=Sxbl8TfIV<3quTdsUR>hGTK$qK*wJ^Wj+GZCA9Hgw!mhIZ()2I1GR
zAuC+8u>05VzeL)TJBNBh+^?Dc7r7JVz*vO7UQcYEfn5AoP_9dk^JN$tM&Wp@?CTuw
z{4m7z4;Oh3<P_M4oxAAW-gUy@)q9cix2J*ma(AHm`tG^DVtUXN6m`Y44970)ei+9B
ze8J6N8i;Cg4x&y<`Tv4n_J-|H&pGM>`pd=XMZf_Qyq~*+;Cq__<me;YogW7&Tynau
z(Gbjd`t;rUwJ$^)6v*W}hqy7=k9liRsuA_qWypaoXHiJrWN=Wn^Z3f#MuPpABOC{g
z#qJ#wb0!Qaz_&$Dwl!h=Y>6IiI}vsZee?j~cI3X*&An&eCTG`^<UJ$lp7-q6 at 4VWa
z(ImC#chn)jB68b=<c^4h<DT~6##`XTr)11RMty8PqH at _44jpX%M^kdN2Oy74ORF5N
zKn{=>(w-i^j_q%8-PY)>pBgnr${bCvSFrbK|Mf`rcmsT+Iu`k&!X9;=$9*f)tcP0U
z_frP=h0EdJGZ33jT#W!R9)dY^j<q+M6;7kKBX=!0<G~jLy)xqz{DV5p6w0VtMp-Z}
zhu^Aqn86o&?X89pW0;&^l&u<n1$V6;^L91KCqQ&pTx(9Nc9_XK;{S?qp#d)gc!_$M
zMi=G@*RO35%FPo6uu15Ig^m+ww`S$`p*oMvU%Cre8$*gLGI6y;Cgv5B_elSme?Mg+
z>p%GEg>zmT(eEr9J?wwLk|S4fF)CQ^BjXk>wd6G6|4!q+#JxX|`wFf?PBsSZa+rhm
z!Y2v50C)u5u-zb!1!62s)X|_?XKmV-Z53=6b#&vA^X9ZKT(o~4$sIuf=M0;{KI^Ud
zT1wA~fH_fEkMkoOI at s!s_-4ei`klgfFbeH=$ED8#%qzN}28^jV%%8hPWEd0rv|-Gx
zx$>5@@3GC755X=Ggtq=Np{sR&nici4&#EEM;%xBQG at n(Y?ZI!9W^Jv44f`;$>vs~n
z{<g2Q!rUf{zjVZ~qsU`}juK$|ePmqJhloGPq*@?@ucu2Uw(;sFvdH`me`_S>oYIgm
z_$`5lBJ)X*+6CJ;)9>+dkbXNd;+^xpA!9W_IdYKnTeb9<1><7|@!ym2&NIf;PO8w~
zW#EE?y}=`oH at cydd>2#zept+RciXr-9yuqnxpuY$l^C+g7 at NdAPu6J9T;Sq+<-kF&
z&S(ODqBP_go0z<d!;izaDI7=Le=~9*OzP?)a}QZ>__v4+yFwARj*0a81BdQ?2IdLa
z3q7&J-t+PjQ_Vcqju>>#XSiSSn50 at 6kUs(3zHHMYB&UG|zGrUkxON3tPr|WvoXEq8
z#qim!nm9KeOgKw6bkh=GIQL6T(JI99!jDJz7kY}S^Z6IhR~00FX^wI8F680-Wa1Ur
zNS@#8vZp6>+2YBwl7HYmL at S)1^ZQ*hg<Y=u at I9Qa$e*P05;TnEqi#XY-xU=)uRf>r
zd=p}Q6%|f8zC!1X8<FwPd*o*H8RGkd&*rX-=`07fTuyZD`*YD=z#AlYjnwdu-}}xH
zE<YQ85?H0_ at FDb7ZYQziqTxA&i{QDn$?kH|@ItcxxM<)p2Hftt;QJlbqTx_-tW`9;
zoNNO{1A)5WSq at cdzSPL&Z;T>76`~KI4>UNd!irs=^FMBCg1=!k*1&$qGO({&N*U>{
zO>2*We at F%H;t`7?K7Y6r^VvdT!{cnWr{K?C*-{37bpts50-)c3Lq0NY-saICQuAZ=
z=ki9syL)XgbQ7OP at ts+biMzIv>wtOAlpiN!F8CPcpM0$OUY`l(@}}Su7M(~nTNm8q
zwfUKezr|TDL~Mt0yS)wETBYo;OAwF`e;nk|use80u50F&?clvAgnm?Ux4p<3)BRzv
z!cr<y%_8-2=WdyZzd~Nzc2lhq5`Tq&Jcs!Eur(l731zxFZsh&=#&2<4=Y6gf_JTru
zV};$|Enk^KNpLTa;SZ5H;C3_d;~KI#e at TJIU*f4Bxsx?BtA(>86QBJ at bB0>=9p_JZ
z4*nGW$FUWYO89g)5xd3EWsklHZ2Wc1uY_wyXgiY9AWcVZ&h!Y#BYU$+Jn+cDFe&tx
zb{C!832eqk6Tui$g9*qV!r60(y$OA6Mgr=-iHx(E;Ma8xq3`FX{b1z<E3NaFwjh>i
zjkParh4Z>bDmHJ~Zk-1kjBna?>jKWEp9WtY{5E8KkeGNfK6Yb{7Vg2kp}1K3Nf7G%
zHdB_|soqX(P(ekoujIJC00u_wU&PteEkV^IKl&UU+2X(F?)a(D at qN5@mLtE)7k>)5
zg!w+#<^Nb7{1io_4}w!SQ8*Vq)jhCdfG<64FSk}cPoI)QPK-=6<Wpv1V+%VsV&xxi
zF6}W=AET}6`2Cc-rx@{T;(d#f8eR91SU)z`w~k*W$oa$Ha6HTTUGzqQK3NNFRuSg<
z0(F~4N?U- at I*dM9iRYvxom8LZza-3w+wQ%tSbaL`XI!s_PC@!d7Vu>8*k)oI=XCVs
zQtS9nsVl<v;Q1OH7uPY+#j2vD*q7s&ma6M1(l#OHWf}U?36#f(?P+XH*f!(-|H1Xv
zZ6~1XNY%A`- at 5%cE+Tx at +%sx?4J^S+9w9mrw-(&w=J1hC&Tr;&^LLFfugMZr;F-fU
zn8R5GY>s)DXNdpc1X)+feC*=?>Qg+mFY(v;_%))7Kwn#PQ3u_iB3K`zT(Vuh2=nku
z{*{baXeVRoWAK9zn=f=HsnaPO-xs{?gsV%_K+5P+Z##{$Db%%)F^yp#Q2K=R&RkX{
z+sVbh<;cJD$hG(Nb2?()NaarR|0+-OJ>^+Ffw|OE9{9d0f*tpi=WEiJp+laM50ZXh
zO`a*D(?{x3&!etYG?@#oZkbynM|+lOaxE5qg!=L}6X7JP$w3{PqomFa<T%ckhso8K
zQTKnqel^aSFvg8RT^_mkHJ0ejSeJ`nb1Z{QlM^Xi;17Oe`hS(X_MUQY299_-w+7ki
zqyMo6okZW1fU8XY>NA)-<<)sU$H<m)vGrAUO}D=}I?l@(P)XK}taZro at iFkItqGkj
zf36N5`Lzz-4z8~*1OG!L+8FI&E9GDE&7 at VpqUDU*OH8^4{54+)kbfa!ZFheq{2ZrP
zmEWd-L!)O)OamK*^Dw5ilK5rnOhUnDu^dKZ1bJU~6Pq)$gx_qx8hkcJ`Sw%H68|%&
zKa<~(>1Qh~1tQgqGGYtvE*f=~nCyEwyhFTW5dF(c*YkX6Ib$jT-h;^f#3xSrAI72?
zHtPFm-~ges4tnI5ti!h70!Kk~qrzCf&+~3v#W=+Mk%?PtDP2NAEA$mSv%#WKtJYa|
zRsuhyU?fCm^7!SPkA8I5PK(^Y-ad?+R74l%Fs$23GPrU8AH>be at x(twY;KTw6T|5h
z$Q|m%TQ-aw;cO^VTwUnf&+sFhJot3n!gfwpJOdk9p0^Lw5u1iuC9v!?lCf0L{)x`(
z8~j>JllWeu5A)7>^zmQixj5KQ8bWpSgOQ2+5B~jL==RTHd>b|$qjdB`+Ur4Q(0B9Y
zuzfPCY?(NB5`Ia<_3 at 9x?g9G=(LK-y8iiwqSaQv;IiC>kN<ZMy*%Q^{;I(F6guW%E
zJ4#CF1@^1=*ztzL{>0fbEx at WFCg+~I$|7}zdfV+#bFsk<w$1!gp?2C=hHpZ-7u<tS
z-8GU=)@_u%loc_*K^w0DKNRF<lt1roS;^YK%}Ga6jZylNB5p2vK3ZYhG1<<nS-AD4
zj=oIg(KCz0z)-Z^Q^wKgzi?$FwsAum at RnKcGW`+7tG++ at a)h%h|10BwE%90R`7FJ!
zl3++C4fIj?$MTRT`3UFV3MPKbzMR<F9!2cQ&vOX&$bK7`ISvO0o|J<Fjfo$+>+gqr
z<EJEX^@w9z2Oft3;+yBC!{?sDNQGDIP7dp?05%Nv7x*`U8MI3{yHG<@hSz^<fIqH!
z7Kde#1Iq$l#4Dp#&W{H at otzUjd3<=nMwC$@M;_6!_dVyWuC%!Vi9=x>N{bcbyrr-X
ze2lm*hoVxSmMbXjRY*@DpVzvGOlc3ke_cc&EipYw{49UCz9zrFf{~8TkN)PGfnckB
zs1aZSt)Xd&0?F%&d17|bx*|>J-FI4_PTT6;|H=A9S}*6Xx1;S_iJw2{2y}EGuHCak
zb4N7^vk|wH;~T`@_MOGLeWxOhl+X5$7LYmi#Udgv%H7KMFa87d at eHXCtP}OBH^yFq
zj(-s`t(DkzBBu2)wjKGO3XIrx<)5klfZV at kEp$5ML0=gN{sj1R?WRcs>Z8y5&RKZp
zRJ at aqceb<rka-{a^?g(B%517PC?)qU<a_tLi;JU0JgtrJX>~mayPR_SwRYf^YWs>*
z at 2{P(1i{bi#Qayq+4te=4Z36(q5P{!`Te!AwcSc0ql_FR$6;3h4_4F9%LBE+C8lQ*
zpPT46E<MxS6w_zF<F6bqjm{k(Op%p*>+>n$ak*{q`FtW6y8HZ)38DvqkLP>HEkuXg
zgE5&-xoDAKO0S|(=kty4-`JazI?bXN4SjQ{vc5McvrqfzIZY{ZM007anfT#?PA~(U
z4`@Dg{!IFHjVeZO+<wgpnL8Nx0w<$j76aGeL$~IC9n?*mX&Y>1Brm*3?&R<u67HJY
z95&=2=FY1q!vSoEaE%=KT@*|=cU=SS{fgWJIlK*XvrRC~p@`D2D~_s-DHhH+yS+sh
z)CfLRsox=W`pnF?kVCRp5gp!hQNqN06B7<@mheyXqel7;a3fvtvln{jz?OZ9C8laU
zjkSd?Ch@(@Km9W}89E8`75Fsl6TxahF6Q8s_}+4YOJ0%7*w6>AhX#6WO?U=4H{g at N
z+VJ=-^pC~6L-za!mgXf+$4y^)_Q1<ajWwU!YQ1@;+MKG*`s8m`Rh~+W5%;RX^fO>*
zh$vlMy>SKNQBJO^JQ76L8h=3ks+lp$UKP%z#kPH&EjJJ3{N;}Wns*Wy>7Ktc4ZDzG
zZKs_MkWW*p{&Wf4;HS3-lKckmBm{lt%!JK612TeC*wAQMIpyaS{Pu~}!Y=5fBba}0
zfMa^Ehr2XniVZnqNuP*}OZ*b`hZxIOeLPqWj6FTUQ#_)eTi7+QAB<Cv{2IHaBEJ6?
zGmgCg+j<Mj|6j3f+%sKl0Q>{d78^L`@LV3p(e(fixUb&hk%<q++Fs)@AmrRag7H8c
zU>7Nur;Kl|#oXT^2S09T7JoVP3Y at 3oU@x$3XyK7~fv#2cHJ{Tzva(gD09ZD3l#M0Y
zOk<I386#;mF^1{L+5UgkB{=rUF}8u!ePrA-542VzUs@@iZ}zzmBOYyzQC>JG4+eii
zHOJxasjE`R8jDC-kQZwq#@^!f-NWhV at 0UY*z<s2WiHEK${D=Pe;_o0cES4D4+lH<y
zk2rI?VRv42>iDfNE7!&YOO40xFlhlI1{vWa<DP$pX&PYO_lNx{?)e6rIYp)hR%lga
zEzM+*HXP9WWjo2aN6Ptp&C;>scg~$a`(I|HAKqpfCI%VP4Ig?zr2g1o>~DLJSH3nC
z-!*sS$FL*#M$O&*iNAXL-Ab<CUGc`6ttI{LWH>n%1Rmtt)G%FEgWZYeBZn?@pzevk
zqWvx7qi=pVR8aJ|Nc&KR=;sH_1EYWWBbg(Y1je at XWRvf)VJ>pX2O5($B0kRDVWbS3
zb0d^}TFTAJa<<z#88LXX;t=-%y998*lM|u$_CvHW$DtdtU}h~{VsgFGzUmad1N at TH
z!EqFjP9tuCmSMG%bs$F3bIpJy{*}$Zb+3Dzl5}6pl8{`kqJyDZP+s7rn3q-tB4@}^
zJmZ?(nF5>*cy9a8ODVbV3g*FXt0ryOgGGZ~sFw77$eX8m;BV+fZUop3PjLIl!@zMR
zk$z0#!yF!ca!DHO!avAc=sBJ~`Z~*8jZtuZhtrT{z7~#`n313A1#rWk2dC9jbO#s1
zq3b<Fa8AC!qA^J^J;15%cPTKhe9ho}_+Puk7d-vw--xA`((%4}wyETa&AH>JqwfQT
zPYwJYXM2<{2c`-BQq=#eB#*Ht9*QTKI85wv%5Czmao(EJA(Tw2&X|b3gs#AtZ*c+3
zjeFuImZOef$C4Z1vwMofb<&sNTkwS}aV_%AmNvpAd~49>JR?<Z6W95i$GJ6;aj&Oy
zSSs+&7C%MSBG|4Bgnx0Up!7vyoXwaLpLm9y9d+h>G2vT;A2V<wo8UB71deI~4lK=B
z at iWsRsizDBb+_6EG`Fq~G~T-H&YYolXUwQ at XJ+Z$(is(-$6^a at gbO;v6K_giChI%O
zl#ZMv at g(LHxG^zwHspRz&inbvCmwbU5>5d4u1I`p8~hUw6FvjX(X#@OpJBz%z;hul
z#)_XW?n}wpgc#~3qkqjsa5s+D_#asM3}P7XJ1e}F9FZv~YxTwi at rs+pa_N5ke8`bY
zCYw!7h)>?3M6BdL$n$o1pNDw}^#@(YfSi}WEZ+|HxpdnwUrp+8q#sy1W7y>;5*wYk
z<O#=d*jA7m-R~$5xH4fK<iG_E at aX{iUk4t2Zav3wJAA^h#lp51?!`WVca6Lgm;>#q
z$`w~uomz2`%l|RK at gQhyX5^zvT(SW8xdvNJY9QC%<tYuZwP%XJ(_MtPihac|5Ii37
zjrvfq(Nhx_Qf4!eb8|)y5S<J0Gg0g+<o_*+jPnVQ>49T7#x9dp^Q(vsu==YHk}jHH
zt1n}3`c;zHqw&_pZ18HCz_+H;oVQhI&L1#K&NGP`^J25QdqX*F6wW^ooIc?vy0|aV
zr;Feqhz}fjGv0TCQxLjL3jA)w&s7qc*!&WSpZYcvIQ)J5H|uopxt8<5$DB+!In*1b
zYD&Ptq;(~Vw5t%)UTpKvlIug~&U=#FyVYXT1?4$P`P(N~CU?urVD~(Tvet4O0Sdxv
z8=6J-12SjA-yfy76gjHGp0}Cf!KFJ{=cEFZp5xVo|16)_q#&DqiRWh7%E6~^0moui
z*z*#^<+s9Lb09Y46VCR_JZ5dqK>n6|*d|s8wUKYm`BO~olI^|<cF<QuXKm2aa_2MZ
z&t_&uJ#%epM8*aQPfGj+`==o;4_pyb!@-mHEBAwc(X}bz(hWIm;XD!U_i{d99h}0&
zpCHzh at T^WuL+ttW`Io^L8ZT=FC(nw6cIM?3fv$e&S0=RWsB+uMAmqkem!jhS<9#Q4
zf(j>q_2eC;i*6a{({^WIcJ$@TH#fDv(YMf!`E;aL(`<=<9x|0WM*JLn2t9V{+{T|H
z5z$L*guvhw$LNDp;5+-bPqmi3oBsv+{x0H2L|l7Kn>f|3dLrxH89fpEEPq;0ZQj)V
zPxnc1cUYNscg1BTWpzblToZ*CVlD&E=hq**4`V(XjPbeV4oAE^^qeZ_14Oq&{H?PY
zd<R!}ilxRa at vXJ|XTaf;gZ((<83#uqKZ<br;QwYK-w_-okp*HaFz-PgAo*cJExS#o
z4vkb`i8^SywA<{uRU#Wp+N~4l6Vgrj+&tceGS{`7N^2K_Q~%8AwAp9M(gJ~-oO{8@
z<*v<^NBU=5gJz|)Rr>Fku49o~z<0SMGJj-j>)JhT5 at T3}m|Mi%lJReOd%f at GO;_J{
z8&e;?_Gx$?;urE;4*gmmwZGO!`hV2NA=JkKUnS~eQ^MQsqu?X_g{zN3$TH2tnGprp
zp2D^W>&=Pb(g?1eNF5QqX+r$bX0jH|M15W}MdXqE)0XVDivG7g0<J1-<uy}yk|iJi
z-$)(0CJuiWxP&G=gXCp7HEfO`IXzBbOYjG)MruP=p*||5lC{U=vhe&7W$GI-{TkJ^
zpm3RG*_yfir`JsMA73-pe{xM{e?9z?vb8mC;IAlV?GZQOWZegBNfow- at V^4KqWy#e
z!PB0ktc)1rPb0hnj at A7B(xA^Os#4#&b}n2>>1mTt&t?NtsA6*Bb5S1Xy|j547!_QX
ze+ at jS*FKHNA1MWAHnX-J?`UB5t?kA;8kj@)Z^m~2to)JM9w}1=Y(?#?BD5!Xb-&Jr
zuM$3`ApFwcKbaH}+g9NFo;djpXXp}v?hZH4w}RII{F+Im9Y-)Pl6D35x<RO?^O=|E
zH-MAKcbKEqm}7HIN`IwxEcy!Kv!pXm?7m1%#kT?@85u|a2KXffa<iI%2g&!|Q_kI!
z<F72*wQ+}hP;+(eiCynjZekU(O64}@h5P{l=513B-iI7ce#hweULE4&j&b at sY(U@)
zt3(XK3bkr)1u(-E{5MBQ&YGW)Tk9!*tt*rdo1;grNVh{Cy-LrqUxm!jk^uYSmbu7_
zdPH{Krw4x5V&t%8>6d8-9Ypugf1_!~N#ue(%-m#tVLoKeGIN-7%qz at K{sp-14z6?I
zx*=TmbF5!G!Qu5Ir;|!!*kf`jdHW;vImyFjdc6PU-T{HQuSgrN>5`0X%(xaD;ZQ99
z?S%XKOX?!YhbHgbPhvm197WKhgwc(*lbq~yT${nmjP>gUrw$F9Tud>x<*g>ZiP^6a
zF(>F;M;7v~=>3m6HN2v4Z4pXf98NLUV8a#oAE;J}R13`_?NsyT+%hHda8-yN3bulW
zt~yBUu!z?BSws)fCef2?Fvn8g?=k)7^?Oa<iX-yo at mW>u{L4A9zwK6#eL>}S_`VA{
z4CWrpPx5(YR>k3ovu%jO-)ln54%QKylF~ol-mep_otlO3sAbL7%9w9T4AHs188q at i
zKKw_S7}&Zv<8Kj%o%4N0g!T|}PZ7-GuIG^_j|TQdO80>W*~C!F<g>dFLmnA2E}J$U
z5cubW&ZY036~bSvqWU%2!6y>N4~g at qQX?8gqaOJ#Nj%?oDJsYa9aMX7!C4n%2=Kyi
z+zk4)Qa8~_&p_Thi}({AI5x_V%jPWd*Mfr#+##P$2S<fOKP at NAEo$=L@>V=Bqj8Z!
z-mKO#QS@}PaF^_lsUhIRMqCnb=k=+`uFU3tS{L6v><rfs+*p5kw4&9rK)e1Wme{Ty
zMtd~d(>adX=Sa at MujhsAZZ%?^1a{@YN|JA at 7xVLEL8}pM;PT7^WIm`yuJ`-&@Bxu|
z`WGH>_UIGkkbi{H5}S$WQDnRVH at 6u0g~cJcR!iDru8y!Y*Dv_~+T>g&1M*y20Ez4H
zB|2%VDWxu|b|&yn;MpPkI_@;!nbL~j$IXRLDH}G8eekg>1TCA3gqLY0+Em7rp^o=G
zQY1+t80HP?%Gcq~tARZQ at u!lcG!r>CKCpWLF(q-U4xE+x*0GH9I&_AuJMGw)Q4+SA
zvqjZ&@ruafg?Z)A%55EgU<Uk3h4CBC(XhoWO>Wi$GkBQE8#AV;Y~VaW-ro+_qdYC)
zR;Jq%t~g%B_ih6}<+hM6<She#2brIQ at z?$sQ6w<0<K`y&z5oT}O>S-?>muQ^3ia?=
z-Pok>UJ9A-LsCzbi#hqStM!;x6<SN$VK(fFXot35rBp(W4d58`zVi~*6vDZ(-D~S>
z!8^B?sOCP!@q?@zIm#cDCk+)!_mr%9;7|f6Pmv3vFMeHA`{-bPvGV-|$l*z4Z;qR%
zOBeyK^9P9ARyj6;H)M~nL6Esg>lzQ)jocue;M%&g+WI at YcYgr;-QN9+tF5u?y!&qK
zzXZR3=OM|!^svz2-Azr(ZNJkKY=*E8_`dGQxM^$1vGs8tyoUT+#Hl0+yH=fb&Wq7s
z;dDswo9u$_HHO?H<;bt{UDz++8d`~d*K6}(%63~v=kAa-Yd2WPy|{0o%Qm2yn}_Sd
zciT-v!j6%HyJwlM3VUGxmr at hR_0hE3I%3#eiEAH6{mvxqLtXCKB@;tteY5tCEq6R3
zY&rJh5=Q0QG{E<3(y7u%PBZQSOW3EZV*k3um5^nVlkRZWoLO4$Tqr;u;&Cg=wS1s4
z>=#-I8M8c6KQi4`&popj*Kd<)$+N~s!<I*@a6R&jITs>V%RJ~UkW-!WNbC+18O*{T
z3b`9~a%Zim|MUXwO`WjM?&SYQs{)?DLim;>oDLNBlvcVck>i9~i at 15@40Artt at T!{
z_mCBA7NYB--)=?TM$`@ALE-HG$mznwhJ_7_A}q}r%(D-OkfXC~zD~YQGsskdi)w}3
z2XekhUOK-S-{vbgD$H-m3eLBk#Irsi?SyxRDc`qj<P{>`F~jb{H-{@#K}{&z3mRm2
zLOr|y{RVjts35{u<$PRl`Fz%@PUqu at n=e5go;f5(oo{XL&#@;vv!EkCMB- at B|Bqpv
z{X&}&0A95#T|}2z1G$gvqYsVA+`#r+qvO$UI%h6sGmtACav{H=sR?U@(Z}vgZdOq5
zrPM(mvM+t+z)Qs5I<~{pujqGr)%H6*Zt7UV`0(!{a<bM5PY5n=*alzmE|ljSxbI5f
z#~+8CYV4Zf|M2zhaZT3!|9EMUu$(EH;WR@)QaWrBnw4ea_CQ2NLMT@>lRNFkjJt&F
z)=0(};I3dWxHyf0+t at ga<6z(kQPDgs^T-rta|6L!O_P(TXnvpXYgqSv|9+3pAJ^kL
zU)TG3U+=@~@O(XAN~U=i>LLmGxD>o1i$gH0twt%9R1yw$uEOEtzLul64uon>ekKWC
z^i8*}qk&T=YG`foIRH)r38yYrHe}=G`<$C|7wurk at gQ=@;^6C2|5hNKni4AuIpZDU
zctH0if2w?P>JH3%6)u;87r+iGp^6;Kg5rWtQwGc<(9`&?blNfx#6W{@YcFuCF2`3S
z-7#{qI^v3zgb#t_VE-|m#8gipxhvKyn1B<$Q_NMqh(opN<z0L!;zGaVC0$6~)2(3q
z5(p>0wJxOoJcEe9%AqR4g at rZ&Zk2sqTPA}CS82H!X at YIG;D#Ff*gJgVv7HZ@?W^DR
z`+pg-&#izmMx+m&o3>6=Z;d<n5%?OWLmzF54G8Twr-t^ANLOem##$rz&RX8V$lAoJ
zr}eP+39ZcbVE4Urc at I4qZOHM1`%;dc`rRBV(6yCWv*^=2Daji>c@=M)P?NW~tx>^z
z&<jqJk0Dd0yT{u?aE--1$fwb<)Th+3>}ryKAliAn9GvEIlG9!6dHS|u19FlGta2^?
zs{LodE0BGUz;>X55A&!Y8=P<t{HDsa(-B*t*pU9F?|eFG!(`znD^rFa_stpc@~VTc
zk6;xJgHz;}1 at cddMzo@4U<$$s2PQdgxeI%Pm#@k$=X(%8x4e79IY;8L-Lye)W_T{_
z5JHy at cKkpt0FqPpF|~UsFz)TpJ9GV$ocvS+tHlo<Ye1faB!M6Lc!t9Tc^yK4Ig9dM
zOmYN_lX6r3vkbs$BGwaSsKmI{kGbeBSJAhTi#TN9TNA+rg`DQ#W{LtYQ=lAtOKDuy
z5sn7DOtn^Ka2DY^jvX9&{~1MUcgT~-MYPKn>YUGHNr*`ZgnsAC+MV*vEnC)QbWPvB
zN9%HNPM?*TqqgRqE!(E|fb3fa-;1R;R>8TwdUJJGh{v)-URKnAHODUVxu@&e@(<fG
z_`=|8A+{gO&FLmrb>v{E=3*mwVB*cYN|?bGA8ngS5D&ifEF3en)$^~I)q=0g4Vcd~
zB}dKG;ONto)SGKDSB`~TFcvnhv1l`6JyWnQ!a5%q+4kFt$Yx=bS_7PvVnOY<nW<Xj
zk|La^>W<CeD*VK(=F9Bc_|f)lBuCucCK5X;p9R_Z7;JKv`Rx|qgvZrU3cf~}<;+``
zaFtiz5nPRWcTM2et<YHY9_afm$u5?e0({?Y5)<9=J;4nNquTQEUk;GAfiW8G1ss1B
zD0i6lpYRh!Zwm6uLEJ#}H&c8ko2z3@;6cnhUU5mvX$h)0r~{v&gp6yNMeO(sU6kZT
zv;R{dB>jwxXTS at 6*jGrd(a!-kVZFR%(~iDE(&t at UDp&D2OHNy#f<5OPurSFUXQ;Ui
z4JUgzl`e;!yagS|r|gAz0mxU#eKufJM1N=JCEHv0%WYMZf_EDAqq%Eh&y(E4n!C03
z7J-nAjYFS`1|5E^UGpJwSF4ae4Zd~MQ#Ijy`!ODK?g0GmZO*zxKD}^a59f1)pM0|d
zc?qMxIm2uBDa}xtOOOwV*iR0688JRJtF{cC_1lXa?V~wLv8Gj;mEce7Otkd7rw%m0
zH&^YY9H=fay(qR?To)4`lZf~^`&V at BUWEK_8#@01yukwz;;wK_it`$I7ktf$)bNU~
zTkGk^6pa5I<ONK at +J!5%7brGpUMAloXhpfn_e^l=OXPcie{FP^k}`jrh;gOHn(Mj>
z@;Y=3SJ>@H%*XV7Xn$j1M*+76`X~N{b_ucHg7=^UdRi~ao^H7b{r8|;nqE06m++9X
z`}@I%xe9o>w?fRv!yvQI4asr at IPDdL3ljZ2ozh%TTCQMzQiz(s^>Y^G>qj14zeo7>
zaaDp%W^gK!JPw<BASbMYjt5`lXxlgjPR2|}67rpuaS=D;VzCThTd(YyU?9(o9D*FK
zGvl8Lqf}GO`jRKzy0{W*0VQ3a*4zu8_t0dkrq>LHr>>=G|MjE}HqGZ{1us~sLVone
zQY%|};phLp_|u at T;je~|!he|FPTC%48>PNbXt|<HoKU%<$}+rZ2W?QqJgs-J7|ttV
zW*l?@?`$V*oZv0c^iCh0o77}(s?1}#dKglEvk5V?#tVhQu&0G2m*or_o*i{}pSc40
zM2u(i&|b>PJuAAb?+~sMa6iVH(PwZ?9_b@&pXs8)!HI$K^{;yRej;*IwuzaiRk7Kj
znvn|ho0rMAeg7k#A6BJy3?l}m+r at IQjIWdb%{$aq!Pf!z_N~as3m;quY_y)TTdvT#
z<Enr)d^A=ZMy|Z+h`}a(0D3vf$E?(xg&moFCUWsXo^Tf_$T$Hxh2#YbAC^(^Rddls
z#H%-R>Q{dsC9&r4#H+U)L_R{~Q~F+>$lq1nH6!zCH2mR7+)Q!uJG;Afi1uI(X|lhP
zK)AT;fJv)2Xg8dbtQFjP;3YVN=PqJ-MC&k4uR^RqnW&j(?1<$UJ6?y(rjSc8Zwxx;
zdbH6JO4G4oWcJ)i=pV%PU*7TnTq`d^=a6`01KSnnm_k7xq#}eGm7L^&3~8C3Ef2)}
z&>;HORwdeecn7sfC|Y~VTsb3Kz8DzqGU|I=zX?9^@Zm}-jALBA#W9~hCsZ at ggj^MS
zyGzB)bB$u=C6n)rP|d%aLN&juLMyM8TKduU-{$Tm|9R$C_#(^spV=BjGUPgtfkX5M
z`|lWQgV6Va2oFZb50;zI)9xVO4QxS<i2~Qr@#gLd&6*|7f8v7J{|k^WG1vC^&VYO<
zKs{^$F5qR7_tkY3f0=!ovmN5Q)pRnS>Qf`m>PzBR at w$e3oI+xRh)gr^2DpG~z?D>g
zp-y#^N#R%o^V at 2PPXq1fn3$Q4xDm7`)pT&iT6#T`hojkf53y8K_Q9p2Z7q<D8}7?7
zrx%LgUuauF<QK>-t9eB><aon6l9d&|;zoydcEX-HVuC&HL&%ilVFLs2`#_B$D?|qV
zkvXpF&H>o^XIc7{dRmRV9tzlmsp<8&cATp5{qUc6^94uBOPI+dr|DUVRD6dzYq`v4
zz`HFA($uON7P%aDh{zmD$KpG~SRcx|*~pb(`pg!|>WU9-ABzfyqoHR<V@{3kkmCEK
zPgh_}OA^E(o_I^2iBFL_B6e9~Z$=zh^o`qOeu^9tM!oPZ$@dC8a&BLPZyb>gQ06~E
zD}RPPrSlKs_i;S#zRsug&=+m`q3lnDyzg)xbN|oVCX|iV&r+4*EybmuIM3ogU*jwn
ziWYU4^)81o- at PEu=m7_8LFR<h3GJcA3rjFB029-xuzi7csTWIKKkrC!I}T15;5FRL
zCDJ(_ZZEDd{yW1~E>55K=vbZG>=nklxt)_#snk63o`~|!an_V^sUcR?wMqOowZLRk
zlkt+sv>jU=6ERj)c7i9I)V+JAtrh=sHTNHc-&UUCo`&%p?Gg5hdW`39Kqo at nrdN%!
zUT#=;rn~ChS0h&5Pws{d%dGP(MLa+&;sJE%Cnolv!cGnTw7YoLmrK;%4^S^(wdpWN
zml4^ASwHw-QU#Im{-ezjyg1utkyj_nrY7S%Vw4c0-zNrtc8bV^ezf7R^sn(ZSiP-W
z7<I{Facs2<qmH^+z$NI0`Kzx`!3bi2_kMu6GS{ki4cxK=7&_oZAV&ov-%Fsc3fPn_
zz!*07*^X7x2H<Nv#ir-VPMSE~+^oLjlTr>V&$6<tO70+Xt>-Tu>6FU;Jc(rzG-DRi
zkv=F-x*}^H-y^vj&1-^>B;JuIn1wk`X+S<UR~>vkQUx>TYveZ34N2~PhVk+{tA2an
zjO at y+ZMxvDV_B##cW}i|U6J&l9^-ugbe9%-t!IW~KK at 0Bz!m=XxO-l}Zz(pMLti at c
zGi*onE%>4<T`Vh%7fb|yyl64T$2KZn1U-$8j%?02;GP+*9Vrq`vgTTDGFLcfS$Q*e
z;{mHlw2sOZJz<T34T}j_0!~J7782}6-;-k1vt at Z7(v`@C25$Wq{~&b*{N9`L9J-Qs
zh?P}q!DHCP%MxiRX`2q)vv{YlZ8F<&jnSPvzn$#2satMyX2C9577~3lmzy8z){(9H
zj!|>cxeC~3vw<0$fWB at -T<$HDp9xtLX)+ at gfBRypfy@>1g9_%gYzi^TsILpw+uIjU
z$%cN^Ce#$2wpDgy(U5UI=%k8-n&M69uW_)0#r2hAZ2)EoK1t-tnT#Bl`yIo0&TGJ{
z^b2OQzSJo1pV&5n{4K8?LVNJCnp{J|&j%#WSuMW_-)t;w>vdRviFG~J8xx){@yGg`
zgqgVJZ`E_L{m+Ey*j{RvPs}#>VgK8$Gi_yC$@zB;ekz?`D~@d*!f|oS)1`uDqJz7Y
z`I<syKWEB&$n`k4S==(cOmqhKET)Cqlyo%ww{bx#_-ci<47Rth+wZ%ottwSD{!=}U
zeFvLi6W0HN at AxahEz+*$h9rPD=vS5FNQrbDbSq)h&E-U1BW+u{zejsFMs$Z`q<#v>
zne$0N;~Wv*_i1R-(af1i)^q5q4Kt0_bFf$B2mClE%8`iYeUAAdO%&IndTH{(CMvu|
zNEsc8{B(>D!;Yi;l9AbHlS1&9l_FM0rC>H)<QBnKSBO|r#&LAcM1s%8cDr0H*zI@<
zvdTCjJK}$IQ-jdy-gS<L7gbn4XoDYGs5vqhd5=ka2=nF|?1zoJOtxPv!Z=Z`V!GL}
zGNQ!FUYl~>;=mZVU-8A>C9tD(sR}x4Xyz%6kJ8*Yl-<`QH*t1&B%@swjLw^8=bQ<<
z*iSBJZ3 at g;`?+-s)aRDB!8h911^ey?7$1^>Ti32~Zw9}c<$+84Bb}a<!+ZbwcFO~A
zMKj_NA(u4(&zooIBF|adF4WvOZ-X2JTM6p at _<V~))Fjkg{bqO;+SGENX}qM4ZHU?1
zgE0X)I5(P{oKhWM!S0bx=6;dUnj5<NLaJYVr`wVy<jFQ#3xIEfpPuCX==gz^t at ir{
zka-g^<xC*_A*3Ax7n6kf9ODFJq2=ItEhYMtS3Wy$!QM>x-tTGg&Dng4=<KNXmq=V3
z{AL(O1Y;Z%k<;T1k?O8iu&-}7kqy{6AcO4};0SRI;=gmeKIAm`W0L>RvNe%w1!bhH
zc=zPth7!|+%DK;tya2qF7UQK!a5 at Asfg|4c3HIF1|2=osdG03Rg^g?m_j|Z~MgbFn
z{6{Fa3FY2o$ntyskedI{RxV;_<dXDHqSzdC1D`?{t)|k6eR<Cgm-Bme_|1 at O5T~8E
z;j~;QYQH~Qup7B$GD9?%$U9aK|C`7>TQ19z==rYSL59$re1q1%^2~j&vG4`@J%c(<
z#Q)nBAopdEd#Kl8PFT7!o66IDy|KZ*n`&L5xl|-X3JF`&<f2yS!-zMY(vl1t#4K)6
zXlF->^B9k5N#?^BQgMOp1A4)3$VFLbi}zO=S6BZjzd_DMY;rr=Lmttm at lWwj6fyt8
znC=RGc716?&VuT1v#G~BR?y{JFC*8JgBC(ZGl-dSJ4bVyp5eBVxHC=`ayq?1WSdz#
zfUnQ~8P1^(p5Q-cGeMUXA%5nLbIv^QD!2qDntPpdE!svd`R~9usri&Wbz=i*lQxG4
z9B%(AYb(Qb!JfIpYoTKX_KX7_t$?NrQaPum6;xjhu^u;!&a0`wP-x)if?W>dakTX%
z#GABQb*_QH`PURA)29<`h=I((c%R?eBX8uCc_0p&lv!jGY7U*SRfr0L{Hb2>-HK_o
zQ|BC%V at zJl+AzMCR}&v0xBza(`a33%ErHz;zVSoQg;-f`5dM-}V1K}$#H$(pH at K7L
zS=->pYLW{D5A8qCb#IAMd~xO##0T_<G9BsY--a~>a{asClAP`@rviiCwZ5pXmTbTK
zt!k?%%YoPl*ckDj=R6O+E?U!Mb>ZA2V^o1BO{4xcU_O%amkKqp{m=tMEGD}Pn4?51
zI7Tq%3tbLJ8KLXccWn8&KGq1?EtlAIU^_Y2SFB*Btb<(>c#pwxo>F at V`A$zImK4}e
z+N(CWBfbK8?bZsK9a99MvZQoih0IN^A-pxvmzL6{M0Z2Z*jhYi0%at6=b-na=lJfs
zt$@CzzL080o}Y1u3nydOGZrGt6Fr|-)R*M^$KY_<kM?wfl~sjAuH;7}&%MeK?_zOG
zL9T^*E8>#8f9^B#x1c{X2sPKQk+C0k!xDKH!I{jNdVel-DOd0kp{y+}$ipBM>}@R-
zt9T?{Yqcn=RVDaDUK(5J*dWSdx68;ji90=~AU2ma at RSL|YLU3OBeS(dvEg7k_CJ|)
zNWO#5p~RiYE%*2>_(q!{mo~EB)av}E32LekoEydPFS)pWhddm>qTk+(bt1RO($7Oa
zq6<c|j!$gq=ZH*ndo!_DT|j&S#^K5fz(Zrs=tjLAMLCaHQ(S|^Qnv!wX=p~zd3Xst
z4~Q+R;N?>S^gA(CbjJ(N2w?3i7w>4f&7r$HF0tnfu=j*bPC`x#r(MgycOBLB>wt4>
zx8)!%t=m1Tulgj`R5mFOeH}8W5ZthRT%%*%#5(dV<XO(|0iNA3XEJz!M`(kn`L33m
z51lOaAb5=+cV*EA3Uf78gt%tRGqWGUkAyKz#Z1r$gs8um)z6T5bMo)(_^sp19P#Y_
zTkxF=365r5Drv)p=PmsT#=Qu6m|9k373ibg971=gJxm}ZHU(jnL1O+N%+C*$HFunr
zj7g+FQor{Zoi?)jh_?`mPQ&kyzI+?@zi8y`Aa;$0(Q%=e$lK^|-H1i1j1D97*bw}|
zn-)X1fGmJ<KAzaIFrV%uc8&=S>p3Eu<6kN94Zyk(+d_G#89LPDmF~cV;r=hU(h2oc
zVTk5Da$C8tZN)f3a$6C;4PxW?`+PkA8DR2c=#PPrnRSB4?|CYiSu>pWEVSuRTRpK2
zQSq?h!1g4{9x8?&c^p2 at kN?8>jH|-8MZNUvsD8bO%-zJ^MfaRVK0s=yT1nMs_P+B*
zccvLKF*wC5w`7ck?brVnv1cP^eV6oeIudvjEt#jtHCr>Bwr=icXoufVXrKzwu1gSO
zSbPw%dC+TO2A||+IDYUs3%g7S at cJ>sRzZ*>o|{b7S(U15p;NP)-puLNZTV&FS-j^I
zrE==Bub#r3i at Z6rb@pkbzDzZw9zO4e4ve|v at 9EG{)m%wvXM5(%(~$M*Q5Q<oMJ;r{
zZkJBPS-c9n82r?TbI at _~`btS#g{~asJp}m?{@ut%VbrtBp~o2Qu<e2et<e#PoV_8Q
z*)!GDIYX8^>S;<ov9Gq2ZtX?iD1p6cDGg2+`Z{!pwM5@>Zuj4W9Zs|HGRlkG6 at 2iH
z^D<gBVurUz%=no)Qs5JjJ{<~tSdD`5T7r45@}vuGCwAFC#@hZissp^rjf3w6c6G=K
z(TbQxXl?@)mrR`2kRFU>&BJ4f?fIF5<|;+Z&t+8nh*ogSTnk>(r1SZPnIS#khkOmT
zyas%qi_ at kK&b_g|jrY7rdz_ndT!&m!=&SIb$J?5zc#LO7oI3PB3pi(fagLod;Q+EI
zn4sUd;H6W<-1;43_}JK?(0ps5vz<&M_lL9ft;YEhoFBvb7fR?CAoKq~>s-Iv=mvXU
z{IOQx^%hV$13M8n1TP|;19 at p57R2lS1b+hTtNY=H%Y%$l;gqkz8MaT<ZmSSHhIq#8
zJG19ZPK&~QDiLCMSld>KD>%*!JMfIsjg=U$r9=klt7Xrb&_Cntr_e{0)2myNUz%$|
zo+^wd?0obL^a|L{f&=&?u%#XvXyP9OXG0_T#=G0NG#O_H{|UcS6S1cY!Z3H4>_594
zf*<KHM{GTU+|P&7qWH(?S({27FOYuypc%(bpik$4!#RN9a_#E{4_h9<9#=tPmI>!D
z<k<?sCj`#Xj|k^ZHn@^}Xa05Vw4&-t=oKXiMW_P<@+xJ*E?ADmaL>mxg?t;~pT>Q~
zW)=%PYZd!U#0JC8cN=+AUX#5bXr at y{=VkEQ%dWhXD%4z_M)F&7?xOr(!)Lu1F%j3O
zNwh1qi>F_`g~r?}h%?XUj8MfhzqV%2{LHHG at U+(9e<F`fPjg1s2Ke^R+*_$R9W`@2
zl_}IXe!)D<%r`5T1>10MJ+Drvv47z)$*SUwv5K)I65HbZO!6*w<R!EIgmE+#Yctj<
zwled4x(*BaCVw%J*&%yGdA%gppg-;qtU at eoA>_;~<IBF^La+UHxOZbE@~lji^}h0~
zFluTc{BybB0tzMl6E>-@;4f%&e%GA5JL*@Z^tib><hw9OFoL7-ooaf+AC-U4m6s<8
zHC<n!EJy5%@&6y9u1%P?ssyh<=WIaxDcExb*ohMo=JB at _%)Gy0d7LK`YOXxMH$Lw%
z#;VHbLJo;0Djvte{`cE>k5h at bt_yKDu&pR!27W_dSm#?m;xiX{UtfHNUiXT-T}9fY
zdn07JEf^ECf(~3!?WqD!sM=34P=$IM=PtfiwXyPN;7A65e;sV}6^!WS=HAu6m`QuT
zl1*aE2ituGef7Qq;J+rz_DAN*QmB7EsNq)vTarCFgvd7qk2hB$PZP0K=-e}b`HP3G
zAby4BQ2VmA)~wKt-W!)q!g_}HXTRy^rHuN4tKrWrWdH3=-Zv%ZDd=YK=V4sCf5SJP
z_<*H|^^6FmHgs*_euunC$QlV<OgJeE_UPz?l1uP&6-Y-aCT+)l>~TFX$-B)-K9}b>
z9Er+dKjfuapQ~(lhs}p at uD>iMc_oQ&XpRHEq`ibc6gKQ(*Ll`##8(&DRgvLs6{KxE
zlgP$OF6P4z5*cn at O@lA?(o&8F at kv_bFw}Jb7iOK!soSz%7#7oKR(Bv~)2bK;jP(G?
z>r&;rdE;q}r;tHM{CLSer9W<lu3QwNhVNTrtsW{`71L(qri#>*qOF>n+P6d02%AAr
zn at J^wO(Xm6dEd<gI<I_lgcr$;{i|)|#u&&ZJL#L$gWIXAVsI?kwgfyN8sM|f at RHzb
zIe}wW%<yC1JwtHEb9%t}Gzfj@!Aj%G5ZLCQoq*UHg5LwaThKoNbGl6MBEG#HJip1n
zO(Ukkn(BB6JAGJK8Dbkz7nG at w*g(!q15R{xT;J^oV?fn_r~R=GhEt2<7H%%e>{zf+
zQ$=JSx@*;>nU7QX9s+7RxD9tyPg%BRz(DIc20*;@YoD(k5xidgx)QvFN~u_%z)g!{
zk9%NjLyj+Nez4J&<xx+iVPA^<!qI&i+sWv|2H?}X%@r!(_`&pBsLY(OgO?@Wf%g_c
zcR}17H3pb+3GoA46Co4CS7!;1(wBSayPaseFRAoTX|Ciq1Jy+r`m8+K?3aV at Yi~=(
zToyG^)+QzAR26rk=+flReO4||t$&-1O_)rcm7sS#gk1C)#`IdzAmmBuf7YwzGTP7@
z#2L8E%4;#ePrrt=8LHhJPoC-bEdI^OJ&q8>DRz#B9pfo;JXZv4UplAX+RRZ{jT4fr
z`Iv*!mT7p6r&<>Icef(1&2h<E@!D=hiAMSP0_4>hU;1nI)Y381(0jJzKig2F6F-4?
zP6bozGMc-P<OB;stQ4NDv8IPs+A^7%N9U|2aBv>x7#E!-IP&fWj5)J_*NW+8#%S{x
zx+45Fl^ZaxWlCn|x)3~v!UCJL5%IKLz}=Ru$hP~F<NO+esiN1S9qdE at PvT!`>mMBh
zNRHOMCE$zjDfCcVX~c7=TU5Xe?(5KVT01P9z1E*Nkc*8KpA}%ty4S{#W8 at q;4xOPE
z{5y#oF^-L16Xp9i#F#fBXFB{yJQM6O$IyR<92p|a3Gr_WHCwL-R0B^hQ81O~ujK#O
z;bOAYY^=n%x;@Q%ZE-#F&EMYT8-{T!40>c3k%`ey&YQt8jrGV1U}4$_*L0M3FLF}+
z$d(zn<$+eNl+2fdFXZJC+#vdsoydUXyz at 9O8va@-<hLBO%a_|K(H|z0Hh}ki$3=d)
zIXC)&GaJ#uR`Xwdbauf1e;<vw`aga2#()rgwB$efXmMma`e==_kA6HPOJa3}cKEp}
z=_F4v>GQ|IAHF?Mq;UBDcOOmjft*)+Y(Bm3%G=*46SUw2znphIVb*{l`g#1LqH4lD
zY7ktmelfvj4-`C?78UJ*epidWSVeNvv;9(SEhqg at -f}FL-ivYO98dLV3<u6QudR)L
z6W1p>B%3R6uN>PyV!NCYTQjN~yd>4P=%0`?dR%oMP55D-YtbcO+_B0Wl7u6v|0Kr+
z&uNvIANN^PIJ*RmX;GUEcn*zg((s&0Y|HR|GB%j72G6*)5o<EXH)EZGbraTNtn0B(
zw0mQ0XvFi9u{NE}qv8LccPH$^xish(iC8ydEyvoJ8u;Yru!X=zL>X-F5PMN%qvd9T
zL)Jz5K6MuHFgMUf%BwBTv0!-S(shv6^W|-qGC4-4Zj)+*jEDR=Bvyy~f5 at jIc05??
zTY#J>Q}22rADfoQ3z*;M!FJZ=xgC5m9>j(y)ciIEI7G((1oU%FcjSmRwi3LL_hCx}
zwucInAujEJLczS#g#UCO^>bHnOBmKP9p4H&y}gH~`6HGA9Ph{ZTUI at 1fPak0i}JKh
zrN|S0oTFYPF_%#a;9HsKErPEww`D`-EdZw`D|_}X;=*^=6-|%o5rb~90VeU6_OHX(
zdLYtt&r89)RS*d~>~9ugTZO+QYy11=tnDF~?_HT;j;n%s`#NwHm^<xKPvqS`@hj%5
z*1j9i|JyOfYJMA6tw^|RaNia!)Z9!eT02=1vg6v56K+$UsnvOhgI@(Fzvg`IK;_ob
zP|btf0sS^@sOAd6hEI{h at 5yNrtHv1<E>|nIdK*5(yZC~~_c)v~(_?$Fe{=dyLpJ`y
zEQ$2T-61mnSrlW)#Qdzq_8E#H_->RT$6UWMA$WKhF!ihB<cXdat3Ui+S9F|z7-LK}
zZQvV)nqNF^&=tXFaY^2W|8ar)Bf%o$pUf9(eh)z%LN at Sj0k(yFX9uo-7h}2?<l-Va
z4f|2vB%i{!3tHE|jr at Kuht#|nLut-^G*oq^u-TQ!g<Yp%_fpuuo|V+!O@)Vab%u}n
zqncMJR(1_CF6}3T+!c_UzJ<K`E#Aplvcr2a{<9czTL#vN at aamb&yspb(4j8#Wd~tj
zUp^%13mUB({p&+r;JW5CN95RmAHy@=B=a+;IXh<X58rddenrL(j2A(4vYj#O?S<x~
z1ho^_435<nf)8_7$ai4;NfW#XoL3m))EKjdm+ZtX#Ae%<(`>G5q6dFDM!_tSBR;5s
zTdcY`t!RbuQmbPoB|}Uf!)d|TTkU*~tx*t4mp-z!@r`s3c)Ih%J-kwaabxdsa-&80
zOd|U0uw-K;uuiafiA>NjNtuWb{WVHWuoJNjp}UpfiX}GA*yBRY$xV-JtGM?yV6mtC
zypxs=&La9Gu9<~$-gG(K`heJfJ!>$AGc#jFrq%~!?DzV{ehUA(olEc;%<(V%a#~dw
z`+wnnFs$)35qtyw>#LBJ;8#Ffn*!Tw^?!d0_zRes8^Ku)9)lqn^e}LilU$2?^mB9W
z?syS>>$fp`dZ8n>3U<TC2%U)Z`;9U>dSU^sg*{4h)kyraoI5Cw=9>@if;*1IqHlBd
zL;UBN7z at tPfn=<>+0B-tBhqvNe#N&hV2*BbH)0;Ln^Szl+V;wG=@4FG=oyQcm0_k`
zNrP-t0NI9l;&UJ6g6j2elka~EGX3ylJjDrM4&awO1AEt}qh$+Q!uNiU=<xVQF at qDh
zYlf3BwqYDXJ@`9T1Itj07(E?gMw0%&;|}y$6PY9J=TQ%cb0PXL%Dnwh*%h}hYk-km
z1|AaFwOQM+1o;=df!87RT2CS88>Kj)#~kX-%^RrqWb7dre^5_o!~Yn;81%Ll_JbO#
zy|rZ`<l@=AHt7C?6P<O`r{RO+iTopRx-YSh+EPEK<^I6kA0^|+#8Bfc{XjZ$XVl~+
za}I!)yEaeC*)Nv9uJ)>joeH^N;A2_N;xqzC`Frg=*fB9yKg)lP;PULdowkTO at T-HL
za6}lEyvm9DW3f{kO#XQ10YMz_74fJ?V$ThM{RRB|*I|tyK9-mM2~36<He!<_n!m-?
z%D=+qg}X|=6ZKo#kwU{pb$^Tqcme7J8P92q=QPH18soVZ9GOI)AhzBX9T)NJ-VR$D
z=7bZFgS$7j+YG?j)DW9Cz5zZk`zfal_95(a#Kw$%4B5lV0MnxyR|d{c;0|CX+Yj!4
z<W>hZV34%E;fX}f!T1vZnK~Z!lPz>~IJi<pd9p;<Kv;fELCwKRmkuh)dQx7g1m6j_
z7`UKf%T1-p{h&w{On7D`){~Cy+{`^Yz>9(WpB(k-AK-s}iih<cFU(z<qrVQX at nw)R
zBzNE=-zlyNU^f&OONKQbS$4S at eq#LB4 at a>f7$*_)iZN?Wj=Yli(**lCV)*p5);#lF
zc at D?OJHa{K at x4f5-NM6h_?Lbp7#U*kZMzD)TZtmN_!6(kPYvIn-kMGLRR$Ju4bb87
zPXq^T%Ghl91A&>8L#7a?kAsZ^zAo5*Upi?^7VJOR3_EGlNUqx=CW})6-%5?x^c1kM
zm>13sbZ`@aqtFxVkIjg(fSYYx?dY|o?6oaVeL%*Txq8&~4~|TNL4tlB?K at Nz6M2p^
zkIEr7PsSQKq^d-&0)sMT0_u=5M$Vv8t$B{^Xp_jZ=(g)p9bK(r#%g at r5A-bjzFWO$
zb64u<w^fr^U(^fu!F$0+LTpG~A8^&J$%t_*<CP5TL at qOY6F7LuH)Y$Tg3tp-*yF45
z935f}%a;8{mxlamYsT}kh_8w(A!P+-s30v0yhcV`SB~o{o!1e2{~+z`3nMY8JH*$u
z>BAbY2hRi60N;3j^c#ij|3yFb2_kxC)!fKNhYRcw|01|!D{_nAIUg<gyK1-dyHg*1
zcM5pe at ZH;k1hCz#CjL$$gM{Ckjqx9It0R#21 at v#|0|a|GC)^yy_zp%~$^?!{<qGV|
z!VeS9-}6ea+<Rf`IdD}?S(*JwI%4(;4fgIqi6-Q at e}jmrTAPp~iC!6AG)bA8ZNmGj
zmAB;v`EAZcZV9K1I)q$?ndp0V`WA58Yd#H7DNCLlj9T?vMz`NHu%Sf#y9-<lZ-QU{
zY9!&pp2ivKh+8&neI7A6B(LKn%Dc0`waJ<~Qnt{vB-DB>ShGwEPVAfZg1je#C3yBd
zmqT~7bMwG!a%{wtx_D1bjtM5)Bd9a7F?@0GJjilo7z2P8FG+S+Y}8XZscV!^a_Zmr
z0mtxW$O45En$SMZTeDpQ$$cI5oVv&Wd(->pZ0e2!oQC&XM7dN9?EbC6nHCZ!eVl&v
zm1kimZ2v>O at N9RUGUrw3mQzhs-PJOsbivMr0l_=gXJl0>nW at aAde~3Gj?}X at i7>=B
zNulR|O#cS?3K+!<#Pe{*hz2c}A=8YfpvN7!G3t}q$I0o4bM3XJTDm@&Y*R;^xBY|8
z<Y)zN0-H2I?}J?pe4_HC$Y$X7VG9N>>pbFr_gjB!O%|sI=S at zx^z-W+6Gv^pQrOx*
zS+nUctR1*1fLXGC>6uIV+dv%!jHFdB)R<S1 at fzF%@#b<ehTZtU{;KmC822yQQ(Y|Z
z6{nMHMrdw3;x4B^{w)}e{%`r<i()b!^FBje=X$6qVBskE?{2;eF8%r;@RHLhko`2j
zZ-b6-5a%Fw-}JQfr%T~GOmQXlFV>&ov#<@ADCAe&0v<yynUicf{*_1hD|^2neIGdU
zXx}TcZWik{1^%%t#Jw||sn*OxEMCh$(UxpY*}j<YG{c4(vFKyubzDzmc+5MWJB|oQ
z4vJjPYus&z>!uUi&C~cMlerZ73*s5%YY;<vXc}<(=1h)W6xOGp6v4*80utZYeGK<~
zFZjw}^_onnSFaFi&iq4`MEJ56<>DQoj at 9@M1Nz?kSi`^l`mfwv*HUZCM&Kvtiub4E
zn>&K*ty!w;PAt(oZ$}QHy}!dbuzE9M!ODPnZXLLU`CTUXiu3sDt!Ss&)REGdhy&If
zO7Fb^??HU-3?=l8R*VahHlmZHVcaSub0FqVpI8#RGzGYfDJ?pp<Lo+0>$uzL3Y6tZ
zFUgVv)@~9fK5&&PrY~Pgq`{MdIcph}f at jZLbe`7vXVcs9yhc20i1;90d)0PpsKGB?
zY;q$q!3cDpMA$0^1z$M=h>vAe4Cg6prcku4&aAf{pl?5E>+2_VPZb4A+6w5S3TAc&
zY$n5$Y1y!nwc%fRkE`e0rhX#->})QnEAkwwb&poTys#ej1<`jg=2G%3 at ax_i+jO{2
zl-XhcPb%!!FT75HqhK}K#_aKEC!^a7CSh(~51;gU*bUeBsj)7{qQQ0(mU?XKv99%9
z58mH)qKmyb3o%D};KidcN0*VY5Vk3b*rdTX@$yz}Xtg)t8A5;gwSA}tW63QgGof*7
zS7-~4i*ekD<F|>fNb>4-G;va)Gmc!ca4I`~;sEdEjrn5W3)pS2z3?vbNi5!um at jjt
zYY5ThuFskvfW1`bwS3t;YccE(#y-fuPuu`DA=%Sv%TK7Twr+i?_7er;lgKMT?k>!;
zvmuwc?<Us at HRtk(+~SiB9NNB)+Z at be<KFY0SZz(HHt at E_3N=IXudfy50;dcag%aa^
zUqkL;-sr{irQrYkp6h()4ZO3NeJAuT&y%RHuwe%kPwL0}BXEvr1dksgIh#Kd+`?R8
zGOvc7dIWWcIbwFGdois;x$%rAL(v9l&rXaLortGk-n^EeBl=Zs7_M6*coUck_#|$x
zFzbo_Hl%XuVi%;<XA^V=_pR%3%;uQ?$X{`a#y<S0(2E;^XV(mVL?7hgU8D|tIc+UY
zjN+4CTsh>Bi$cw{i|~O#H@()2cPt`0I_Bt&whD3`(J$Kt=qr2sZo+pHOvax<5x(<d
z=!PE;?~iPkX(NZzJR>K{)?a#$HYyn3HuUf5`2Hi%$JA&ai?MwaZDX}~+MwPmQ>GEm
z9VA>Kn!)?XDSV9nnc7FcN-d<3kHM#kjOEw*<ib&3M9hYB_u<!_{gyS0zJGEea1oxg
z?r12TYW|uYIr%PKc`TGp at oGl<+l;=1w&4YR^!8q}l*k%*@4tEMIWkw#<*17&Um8B4
zT+T_Vgy891qR=1jkY_{h!I(n#VO<BFTA~LvkuqMlp>CYdN`Y;m>Cu0I{aZ7<#!T#X
zn(I}>28`>`_Mmfo!!0NOg!~(n<(lkZg3j?oLaC!*Ybo+TXyI$g0yq4hzLwdrsratI
zykSCl!PAT9CA;dWI$%8$hI&Q0*S90rte$;-1BpYn!^b$hn3SK`I4ptqF81Ht|B?F{
z?2DTT9 at 27iB*kqZBZgnD$?ffs1IN{#EwHr!=I4<MACn0=zQ&2Nt)`>pA<LHJSu=x-
zV^uc2s&s<J=QxhH<M>lcQpxeB$nj>#d<R{-tSv1n5%@Q$bM`AGhdIO_1KVOBu`f!T
z^08xBbRKzISWJwo(b at vtoO$Cbe4B#!;7Gq6`hdkP!1wEO5H|LDa|(SQ^G+S?VtvSe
zQLbRdM+o*ycWjr^;87sh8oJb<_#ejF^aR^BU+hRl&Z%mFx#4Bjen4!ZuVJiu4S3i%
z&Lj$Q0hLemG at sN+6D=k0yuA^2GAVS)z4T>8%!AiQ^}fUsoy3oF2OnDYa3E~HMvQ03
zQ|@q?lnGhGjxjHe+|$>GduCy*Pn!cf{aeB|qN`#I81(UtL%UMo8nmmIeTETF;Hq<;
zyM2P3yD)lg_D0~433nZ0=giV^72s!-dK!Qi++xoVH1Fx=dk|c)*%;dneozuO9?mgd
zKtH$x9T`||{PV%3ET2a!?DR5vZ9(a_isv%5z3}rr#WmO``M4jG at b73XV&?VTBu+?h
z(edF_;I}$R%<$!v#t#qEmkExZ$V;M*fL37M>R0yaVBc<NA-oIGZo}gU*3;#%hZyl+
zD*ivg_nhZQM||tYJl6L;I1#qib-Xml)?c=nSnL+_NjLB!O at ue<g4lB9zj6A`xE?-3
z^4-G56H0KQhF*Nf7=j70w!1DC#nWreJ>#mU?u5^58}RRPURTE!rz~~eh?p(>cjSj!
z<J5l_=KiVwB6kM*fDaek5gpOcbAkOtEVeN$n&9mg)PC@#<uZIirE``$bt~_F$U$wy
z_T;*1S~2v^HcH(g1=ipRtl``I<2iz#CHfD!W?VHJOQCBml{1_&_ZA1f`;+&GeTT%k
z1HXZ>`ms=~(-kp2pK()A7Ur>U&}XCGzGH^p1!LEHkK{gJcyOFw2ESW^YA>&Z-49zg
zi?tW!p)PhpuUgG30L~3q3djrn$Oi(Pm>jXm|A+@(X;4Js?_!VZ9_hsoH$sO&E?Fv^
z9y at AZxJm2_)aLGbar$#awisBXMr;aXHf&GwIvl$DKCwHz2)jelz;)os)Om;LjSK6*
z8-5rzhjzqe!RCN#r|^xP+lf7bvuhxaGC2Z)&G3MIDQTkAtRwCFwNHeafe#0y)EQFN
z%k%hGFn*f`T6meHFI;}k3z%MFzj^K1foA>{f`I}r_D)+_$YJ!2Zw4v|cFjvgxE9fd
zV%y66axJ}h?*cwYUMl!xM2%RAVHf1`=#&DNorXA<V8itgEBs0-yMpzVqi*jae#+&X
z<pznT>RioYiz|<UgXLJRTN^NA)h?$<+ at SMc^Orf|oq8eW%xwFI+<Nvu=y?i)*SHOv
zP4By0iDM%9x8%Q_{*HXt?=L#r+nb;M+1}Xp at 3=wQ0q_vT1T*7PZYzZUH<)Hzze8Oc
zsAi&%0^b3A4_8blQm3HP^B_M<U4ue8f%#?i;mhZ_X&77ndjI3xMDRo1C;F=0pXjT=
zff)%-m?|K7eTfcz`7AdVy5=_+;}#5;Bj&P-|DogPP{X3T9@)@Cst7IuoM<^tOo){k
z*SPhPxm=YC|0KgH^ie{`P=afMfv at Z~YjYj5wQR%_e&q76&Q9<IxAjD;0-T;I&S%zC
zU_sBD)g5j$VoK3}f at qzc3D$2o?O2I8(H2Tvtrff?Puh?Ly(!*Y2%n~l7Z-Le)sv7H
z2HxiGY?TuGtou&bUw``3$3K6)YD689WWGtphr9reUi`*j&s%+6y+n?<{g}BQv9QHf
z9q0DkTzR*$@u?agp32`tvq#U$zZZdX1 at 0Ai2-u>jQr70G7`6K<97hz<5ibAf_upVa
z?Cmgp4Zgc$R4eUAEhO`ATasUHOAGdO)UP-`o#q0o^Aw(01N%0fOXAiJRIa$7x<(BX
z4B5*oxM6$rp1XumuYhw0`r^Cbu<M76xt3pZmhi2pfIF_3rgGIp4(C1V^zDv}S=LK@
z+5<W0pKX|Tv{W4IEr(^ZI&x{^pF9X1>J~kp&LBF6_fEFnbW}0k at gva>m#nd#B6hWV
zhf910quh(w?O*aT>3lEMK#gx4yMGb;xy0{<d90lEzbDaM?z?CM`A at KA==oB9HP3|q
z)P*)Eb4=$+9EeRZ*Hgy6KhPcy3U<k%PZ at 40n1a-vLQXGol4+K2Ur_tWO-mA)pCG3O
z!k-vO=0n6)U>-VNi5T|%%RHUFr at 1kCS);z}mwl)7l>>XO`To~q`h at Ah1HWXsCUp)X
zHab(@b<Bh~tHTR#rmm;6{L^mm{0nbP at xOFqqQC0Kc>ng${<D>#{in)p*TsjQ%i*4l
z_>kJ!t;4n3{r80S_tn};#D{$tZY_>my6bVg%YQGnYuRfG{da}-BL-?ay?*dB(YdQP
z{4;E+u&358Jk at 0=`8=*>;Tzo**spL+wC%xompVow)I7XptEcKv*E?*8tynyUi at BBI
z*`NzO5B?CL=H6Sd;YMqJKpi07Ro>;5#jXi<)F1y-Lk(76o0yyTCRY*Mzg1N|^8Wq2
z*M06)&+9mh?@S-mDa#B7adn)Usym|>4S5hd;_kuRfhLU23jc~5`TiL<7}#q37VYY;
zUDN^{cQVE~GA{ofy4%Lug$JZ!>2s$scB>cdwmHPo=TCdlp}YSe=dMP4L^Z(nRSp}@
z^&6^rx3J&Xb<_*|VyHI*-m%?(f2i^Pfly=L(E+ts>T?I<su{=a{w7 at 0-u)2U`TnWc
zuI?UytyzWrT>q?4<JEH8ZTj=Ue~2buecAt<?KiPhkc<7#*!?}W%OyJ0>tL6Wt=HY%
zke4ujB-1TeS74nimIh^U^(z#mKQ3#a_FZk8SAy+CY>Tl@!aCoUQnH&)Sb0v~ws5$6
zA2$v1_X68aVCo{cNuf!1 at NbT}BG#FivWi<M)SP<NR)hbb;9_jJw8w_Ib;$$b6HJ_d
z at elt&)IOkR*O*(pwS))K@>WMF{sH543w+G9e+Kv{j^1eYFTPRcpADO`2AJbtE#M^@
z-{rzVT;7ozyYbzcUoMhklYSR7FBiFRR&<r-U7a;Ab;U=eIajOw>q9lyb%^mS?beH#
z7jPc&oqIwx_S49 at CXH(ZM&Sz9JFzapTA#-ZZb~m5RC8;pE5)k8@*sF~ymM^1399Pr
zN=Byf`Ox-b_$^xoT{^gxyI0!AMKq=N-)xW^2LHuv#P%xN-f+8ZpSXHvHCH8VN4*pt
zEU_UT@&%o>)OB(A;EgtJUWQP<7Q7oJxPGOr6z|)^&5g?TPQ20P|HQC{&LJ3ZV&9Y{
z1*z!8VpUuN@=`{jPUQZ at 0YCouFMml#-ZAL<ESCauTlIbMr_BHub?U58bI}*$EI7du
zqEtVab*}G!KcgTzbsfj%pGCnwY}3(C(mN6^1|JkMMed_<lqSNxI3kXKZBYh0eYX+U
z|L&h1P$dcQ*Br=etE3dFGoF|5?2{Qu+&;($ds$zOjD7B}Av<pQOz5LLDUB`gY?Jtb
zcfCB5BZAGR`pQn#5U$m^G|Q5B-@<Oc6*kx{bTYRISm+ZgH5VuP_a9_n3n^gVm2 at Bv
zzEXS}^y{y<dAEKf-xktC?g`!9R^nLgt_XeO4r~R`Emm<e at x2#OCMk}~ar{Seovk^9
z{PTwH3a9 at z@zd_ZGELroj{b!`Ht4=i*~a at 2_$`Wn-yf92ryvx?{=oW9Y_Z|6AN~%k
zOEGM*#BWmUP(==rwcRJOy>>d{iEF{t*y?`K at x>;Rt0B)K_AEr-9)!*Nu)M9rH27)9
zY1w}3f$f2cFOCMnkDCmi3veTYO73aSFml?IhQFoi7Y!2bLf0!)U(s<~7fa?3x1Y@>
z#Dr-&5{070?JOqyc8SR^vttLX{~mdx1;0a1IE(tZXaU9 at u^YvYp4};dja_4v_zaG0
zm$xlGrRs+*GwID-*DKa6_WAD+eb!kH9W4-zc)^ddW1AoHC+FDI;Q9xjKYV+JKYpUx
zvmFs)UJ at k@EvNp$`uhS2r+bg#?$ZB0hdxa7f%t)Ue5ZgTHU3z>@40}Bubhwp=iB!U
z?0c2rVdjhk1LXQ_a}wbx-~v1Ey&<@X%EdYcSnxDk6RTrIx8?Jagi#Xkkad77>sv*t
z<cdtM6AjVHL{Cd(`oJZ8cWFWHgwxP3t9`?yA5U3=G9ykHT#m_e;*KTzwg+5%DMZ#C
zY5Mcsjic{IY&YIr$iBPT`sm#XTRHv>cw&G4)IAf=+eG>d!CH`KQpS!c9Po-9C=)gE
zz!zwFD?+?X<Gqn^f{|RKZSW}$wsW<FAF!K=Y=o^cGob2~KAW196XyaUSJBoix(dFY
z23`ris}6o<6<B>$!m#Nt+gijA+$wNg4_Dl3*hu(1bF at mXm;*l(Y*gS8ofDr*cwtG-
zi7M#RRhZA#f+uq=VxQOI-WAZ{0waiQ7iS9rh9B`)LeaZv=E^Ji%wEDH2|l&$T-cqh
z`>+6)I3)4g8v#t<2;HUw9yp2IJ7Thx at gvB4{95=C;I(MZ>V|DI3FpNN^MYBN(n!7K
zEq4Wp{bqSd5%X_f!}5^I971+Y+t=XPiSM5CNggrbx~8i;lnT;r{8Grj8EH)I?rHFo
z at Z<-{d&TT~n{1`nPGq;6|F8Sa)sqM>Ta&qheOHr>JOdbOwk(O*mW*yo5DOwk*%SE@
zS#}&xS~&Em{QGqivxhY$z-2r67x0}XluKr=3 at 7zrV$0XURY*xWTi7}>{a<Cm{Y|*P
zdG!7!_Ws1t`xDvwoBpr+i7aNh*+UNqH=UCwbvI4Wcz_$<E8h^^-6*e&Xtafkr30l~
z!~7*873 at 6Kx-M33!982gX-_3UkF at T<{GdV%PaNSH=xY`{&iX!X`AyyfjtG`p0Jv=u
zLw|oMi-kyY%p8sRPsRE;xI++&2y8ap*G%%T!1szgo{+06NsO|s4#(<oof-BD!ogmL
z?fv{Y$Rpn_uc0al9|Pv_nZq(ZWM3A40spF}gbsx5W4`lQBVLqZEE`XCp}{c;I^FSQ
zHSF5#jDsF_^KAt_Hir&8%lbRUCFA*%$b0|17VpKjnY>%@(5LjJujO4EkDE(-8tyLz
z4js8kQHFOQSEUY at 6Fo}Av^*g93tVB7L;g}yR%bccKD%RdF8J2Y9MMq6`PEZRsC(GR
zx^)v!=fL=Wg*=Dtq#sd6>q)1d at 58U<n(jtg6OrQ%F7MFFwy%6jo2Br#=gJMhD^$Ra
zcMr=5FdALZB`!mkNP})PW|Nxet(@~%PGhlnl7DtX4&9$)6*YhldN5cbD#(!dBuVIy
z9K1VLF2ud!9wpjDDetuP3Sx9!IPHq)asHxo+zSrnmlCvDCCr-|*m+*XwJD#r2Rtz=
z1e`{7Jc0Fh+|wO!ZiL1n!(zhHh@}}z6P9``byym(?8c(QQi`Pviyn)5MYVS*-g6V{
z%~)T>GpAB&E3oR`eSPp<H at w7;#yHY|<1Tn-vpo#;c~T-x-%avRxq#QgdR?xGo+d9t
z*`$Jt4fD*soL{lb!s2x$_lfUtT-G!86CvTB1-~LVc%jGUfHQ3nIjv0N>g1+DjYocP
z($*rx<|F5(XBqTVlJDb-J>6V|-H3c{6l94Ew4X%Z$+a6Hi$<-qM69&dK?eWb8N&gb
z>oLjN47YBhM5FvW!MVPiIX>{$II<{5*W&|2E`RP9HTb!o>8PRGG+j5dTC+`AP#IrV
zTNSUj_58JMD93oLp<0oPk)gN8m$_=F0$o;+%9f4&y!bMltJY;<n~7K3wqq^j5-!-i
zHnsD5n}i&TFUvcPytOsXV|YdpdrxA#I`6!wptVP^&jx-g at _gLeqRZ-F=<;~A!MbdR
z<MOsjluK8l-F8g{o>tvi;5YXA6zUWtemIDck3pP!%bN?j4YB9^B_|pGq?4-DvEma?
zhOG>cCq*c&`nFVB%l(32Zc#sBoPLVtbWuwA!G*VinP8LDD|J1`zU-WCE%X@?6(91^
znLk#BM<w|8yq6RF;T7gx%@w9r^ED&EJbzsaf3e1#!$Vxuqh+(U8ryH?=&)SJvSf5k
zw#ibhO<>p8wPiU4njnVU*QfDhW at wc;k84lk+_KU0E7`SK^JdNgEDgB#n09>5uk2#Z
zsm<XIVaYRO##arGiCtNp6JJ$(c3JI!by-F2DK5clnrz6^!%2#-!gixBpK8b}z}$M)
zH-OdxKV0M0hn$AFoFCcqyLI{4R>arXpN%KD(lT8M_Os#*4rzQPd|XO0PurGIIoK{3
z=)t)}=wOGi7IVXyh7iWq9eb9ewf>}2T1z?oE8f?wvgU9G;%jj1h^`phx8uvPy<b=4
z8_-$`d8IGD3T3ZF8Jak<h`bVivnehL<tq0|&nw2-;3dv0!n(ps%D($ayeq{k-9Ft*
z!j`|>YdgC}?7`7+QFdNO>{-Wl-vGNe`#lY|uW>yMEZ!+9$8Z+c1do1qEso8O&92tO
zSGATV<mmFTy(7M6c+8Syl?KmfLwtG?@@1s&Er`{3o*EwW!<o=~7Zr#z8Ca=l|IF4Y
zJ~2%P-^LjUGd7HSIrQEka_$af_8GRL;uC)4+(`-Z^dH>Yq4%!f9O2Pyr)+;fr)+pE
z8~f+scRg>rjr~Tlf95XYZw72P#V3Nuy{EwYIEH&FwEsdTbj+Mn-9MZS?Z34X_JLj9
zHR8k5cZ(0ZOT;Ih%fYpWC5)SbyBm30imfu(HfuPh(0g5b at s7%sno~ZuM3x(9Gh*5p
z+dgNxT)*NbIm_D-U;|Exlfjc>AH4dP5R;B;%o1i?Cl_(%XGXyPc|&V}Y<KX7NLg3p
zWJ`DII@%E#-i at 3mWAEV`XDg*slSr&^_mpQfswEg_0 at EjP(;`A6nXcW+T-Xd$am^vs
ztlmNJyTFYmeyTLlN!BMgxJNd6PsS{6Zmix4yppBu2C$UfjRKSGAb8G{mlT`^YrETX
zY>Wxx((NT*nU~1~+lR6&UE&)H^xW0~DdNS_s9(XIKGc>f0JkQ4&yd at 5@O{zB+kTZK
zF2&^liA(XzUKO)4FPE`rxd3Bpkwd2_c3i+5^&R|k|8{8tr#<6R2YFH$YdT1H*mJ at 2
zJ_G(eA at WEAlPc0vQga!lYQ2f^sSNY<HENedPVgzPS8t~Zi0@@+`HU=AN9Qo|*R&5t
z#TIj#2_L)nKagAE9ieDlpIl9~I!0#H<5_uTqt!C5?pUu|+tgw^;Q(TJ>`3e;nL93|
z;+ib8nw*EOTggMb)nD<@PMa{~Um<v3h at a(^V=}r at WFb5*;B+Zs<sI;AyS~r&Ao&7;
z0n7QXbF$gG(A__mAa1h4TncUq<V1FTpPLI??H0$|@E^@5GRd)Pbmg399X;Y3)9b)p
zw0JUNNIDJX3f7+7IEqIpmG7q}f#+q>a3x~pL(G+QA}I^n_YRgn5pf3O8Q^xR<nP+k
z4W4_J=Sh?e-wpU)SDPKLi84pGdDvDsw^ue}TjkvTbdlpV&thyJUupcb1IM9b#f1_Z
z7HpDp<dXQ)@}&4vas%q{kVKkNDexudAPY7us9sWHxoIBaw2MpuRkQ2mUxbIvG?s3_
z5~J&iKc};UKejjiRH|{xXA4?GI16e+0wmfM;4Aq1??R1i`GOPgzZ!68=fi+QiyE<*
zoP2Qn7U)02gm(j&w$y`V at TJrM|An?2P%75?U@=#*d1m07qRb1_x8=@!C_UM?cN2S0
zKi83brI4v09CAI`{Xg{3{la(^PeUbP*@NX2<Nzk%XD$5M6H*~>Y;`0<e$rz6eofGz
zCBBu}XsbUdVlG`q4D_=KX7v|1Hsnd_kzQ$xJnwkMlhiNSK8bBokBCvCMA$CDHn{Vm
z+Oe&~Hu(R-)?>SHbX$jQ5_^N=E6H=n|G;xro3NdN?Gar65ZlSvcK(lNJX5i4$MLI<
zX9(w$$b`J12OLA5i8y{2JbhBfGmzK8qvm*z3PXNmVA#Ny)5uG+HLLQb&bssy{cJ?Z
z*)W%mfhyiQ$7+K05V#tOSUoWx{j|`Q&T{nqBGPo`rA4`K0XNQ~6KZb#2{CLT%Yg?}
zPod>IHW}Fe(<ZnjGJcYEyaG9U7a_L;IDz9 at _`ATtw$o;qk=vIJ`;daaOP&NjCGw>^
zdeD#De1E0aqWvz$cvGC-2>yd+`zteZLkl~zfOp(Ncr at g{P*a1t&i8UoS;3Lvo#k`x
zP at Mdi0@G8cF`j|Hd{F(Vsrni)f6dcid+eZXDPHTqQ=SFh0n@<WTr2}0yl(1NduGCJ
z3mZFEGO%=^q8nU$@+7Yr7KhhzaQ(0E+sQ4#wh*}hz^j7$I=Ej#ZZ4$LF}^1OkI(8d
zC~u6f={Ef8PZ55r_Y!WHcLX)7ZipDXH(Rb1OUD6|q0PZ{V~9?~*4;_)wdbS%j>j7O
z0)p9&w>@Rfe$MjI%^1Em%Kf0}*@=I+i|~eU&i?hSj$x}FbpzW!-{UASoNju;=Kzl3
z#CZx}MPoKfta+%b7 at xguPye1ePYfUY)2f#yO8Xifl^fiNZ-yw_nn}#Is2+W&##Ze$
zi0>wt#u!x<?+06riv=7>8+!S?wYE}xTNKM97lS&vfI4BXbA-c}6vdv?!haY8ohNGe
z8pgUn!kIxa0mywN&kzi7&RA9WPq}g-xW0;A4j%`0(M?aV=>iS7O7jL}@U6tTBi`Oi
zc2($~4m)l1oKD`CmVUH}0O*i)&>^Awk+QLvQrIUg4&X>WnGen{@_ytKTux%u<sG;m
zxfpO=4k;V(PGp-cC;3;DNv_#M{8WwF%dD@;siy`AX5+f=*<6!^HwC^wgBpI(kf1!U
zJTq}oq6T{g^tT$Peu(b`KOW{9t-yy)f*yE;VE5)5aeT^fr9c4x%?E@#&oKsiBlrWB
z974OHvA%<K+J8I)oL+Rapt<^**K>{|36}?6BJG6Fhs~aLxZuC;B4eird3Hwj$}9QH
zg<%O{BnDv#;V2Gc22f`3tii8XNc_LBH{tz#O~eKSTLX=JpN;&T at bil?{x-|NnHmZn
zm9|>`gwRTF<jW?U3%FMaT)YeV;m62Xxz at MDzJB9z$5G51Mqsp6$UB}6U7GzSf at 2jl
zAJp;Z$WzJu0bSgHdUA-`3lb?{ioIh7GEx4y$eV{8kd8^jml`XBkAu|9WO|lZ>X+=x
z5T63Q)*pEpZ5g4)L(R4dvDCW;euDIQ+0;kgpUSlh3%gq}*Uu6(!$%)049ks2|7*p1
zDfkUB4tu|W+}5UvRmlC5%uNoJ9mpEcfonjsse#z(hi6$Cx7S+`^J30(dmZ>1=yUQ{
zddk6nr{kSAC)1VYMw-Y{-J<XjuNTe)yfrHxeC+l9`elr{md>RcRu<g at H=n7C2mA7@
zc!@3oobnN2p~o+6#dm}amjf4G={ND74_iOre?k3pi{k%$)`3lURv=?;qH{Tqp0$&g
z&pvA{@>3{=FwYQs(X1fyywpJPjR{Nez0rsx(Dv-<7gB@%-ItiqYn|DtTG#+8Lzq-X
zoE{O5d9!g=5F3k#m~J|Hs9|!<v}E~O<rBa}o&~o&<a2A83OopAwK>2w40$-*xohB?
zQ}7OUMB9i>@Eb1pkFe&roB-xi0?gPGz-G3~*HW8EJ+S2l$3CZF*=31g<z9JrMBKpc
z_cx}-iyt5+nY53_8;OKdiHhiMn3jou at hx~Zk+U2;%t<`trxFo=Ne}Yk<$wdM8S&;h
z^4?=joJ80bE}w+1<NI1}cSQ1|++$}y#eZlMg}1cKoqS8z!|4|m^!laryxA}8&dSq7
zJ~UT3{|DkzqMJH-ir}&%%ss7F3hFH`HCp^&!g7(RPgl at GJMX!br<sx%EZD?=a}Rb|
z at 71&+BALDS24V;G6yt+BC-%htAGq(OO2p|CmXh2)=woY8Co_S!){=GvzKR- at 7kO<U
z&uxaSS#4i`jG at u5T>Cp8ET|v;7r21NpHW}Q^$kM#{~bFdlfX~0ALGGd^qbO+$1zuB
z+CPM>4}OzSMMtJ8?m6Uw6g<|aCmaRG+-M`=DS(f^MtoyV1>zR$(~y%x5z~(OZ>HLM
z9vn{KFGU<f?}i-5Z=xK#4S08q#|{tZ-^Bg}K4Rd3vJ4f_JInnhV?n$(iA_*!SQ+U1
z?Ei9fW9%fc_hVsuQcX}>FO7KlO{ETW7Rbw-9NjBFf5g!(J~#Y$Pj+7kzDq+7xe+X-
zVp2AE+H~>^p8{a5fn9^Gqz>a8?99aXOzddX<CG%EC at SXFca{@78YjSMPvg7+&hkk#
z@&@48JCKDZxr6@~w%>(Ryseb%<M={R9C*EbkY^){16e;Viai!jm;cYPcSINmpohMp
zh^Ec~?+2{Kz%J^0j-aywd|b(-{syyw=X`@x9Be#aq`JQFwXRY;>y1wvk)OkaoTB3i
zKOlRZfZB%o7_aJ`mg&eL*NEb=KjzQ<0Cs;obZl;cc41C;nJ621vny;}g!9VfkYjjK
z5%N5h2WgtYNQ1oECE#)?1u1$5FHbHcWkfv%EX)C>lRS6ARjq#(>{H`$E|>ErIls`<
zt#`h63Ezr&Q4zyD%ToxWim#IVCvBzNd|}j*S#6QrB9vi#u#rkqX<^qxYyfa~;E6 at v
z$l?gt{yQsx<Je+<9{VMbp)xw8oP}tEwOGG{brseDSl3|v2G$jxMkfx8<(?d(*D4u_
zJ|s&fi9Fxd^<1T;KeEpw%gSx50&YEH;kK at FWs}^5@~A^9%$ebFMHDw0`CZ1NY)8$&
z5PXojB1ffl&$czA{0H4P+8SOrbyZW}UtK=0Bv?#oRM#ivs%+EJz-jQMEettm-XJoT
z%OO&4sLyhbiPmv!y=lRHQ00sN3;a)5&Ls1f$9g$$a954)Uo*eU?j!!63OA at bz@r$R
zhq%BjVow>Gy|tudKyX}}jW&5aax&qD2NW=u!|nJ<)`s at fJhq7V<v4w-w-Eo{vVP at j
ztvbR-4ZF!(^le!ev7OLMWi=gR={g?xO0D@<4aomg<(ojMBL~1+3|U7JU3XC#FrgCL
znDaT_Rt7kWXF27gyhNELx)r^m$%r>FIgYp-qSIV11*L4QcN_^hgzu4=zaxG^B1 at Z}
zMJ(`Fz=3De@>z&i1oxH1Wj}HvqYS)4^6p^G!z9=%X>1o=tx)<b*m-O=2ev++(xi9E
z at gP0&zT-NdQcnZcD)7_eJQf4StQ0(FFYGui3-h{l1!6iy*~l64 at v!MVvV&4q)*~01
z(x%3Ls3LMK+F~Wfk}8x(x3v`II9j0fn`+Z9KL-wyJlHZMgeR29|CsA<v9kGlo at vAH
zfmiH3Px0`3zL$s(5*(mUadINtDShOCtA!d5{v*aiA34ZrwsuoLMYg9(%!!<H7)SP^
zY%L2-U1hw?!F5V0&3LbN)klK+5#^}z^T7A2?$1Ga_OX4Y1Y=bi<PVze*%;$U$M}8P
zTCdIW6%Ds_^l;vYH04zwJ}>OE*|M%>rH)D8>tqKDQj{r((+v!{_|OY7(oe7En1QmD
zb)ml*%oe<RUvTsK4CHz&Ia2x8e|sG^2(%*-cP&FdRXNM%a~0PqZDrH)2ERhvt0Fur
zyzJnzORCZTh4)~*A at W8bxYh!Ff2HPi7ElK}5jRLPZihMqH2mavZj-qZ-&eb^q)V at 4
zyiDBONB<FiQpjvR<H at _>>)1`cAK$E$OSYC;9tP!%yg=Hn;BmBB*a091A3>ju;VB3<
zftS=dFtDHCG@&EC^S<)r!PqIGU7cA)jWdtBb^#O8b at 3$D1K8gW{*va6 at DBu!g$~w+
zF*^<1HSa2-mwwB;7~H!oE4VB;%aIe3LpeIz+bWLbacZ$tVlkNWz~hr+OR{3!Qcr7J
z^t3kQ3Ds6!f$J at 6{<2|Z5!R~HWgSO21`%_iMwH|6m^I%c5#Nz%Ey7a5+kqJM9oBj_
zuU`%3Ima}@eN=xOb`Hlx^8MboFs8*5e2+6<9r8<Psc^!7%+AAoemR(@+AY0=R{&f;
z)6fpoorV>fW8se3n5VCkxU^YMlbBbJwItr_)bp at 63~~B9Vt*-R^JEZQOV0%4unoHP
zYVndj>qEc(&hblbTkmuFF>mx)`&-9|54)+oGBLLg!oEnZKZ@;vqCw^e=U&TYj+Wn2
zL at A%7>#1;$dDaOYXRJ><5+hH`4xkRxc-a^$vY<DemLYzJ?g`H+(Z3l_{3~w7#FwwE
zZ{9`yLBBYw5HZ(k;6&?zaR-0RsV|7$*VY0(tcZ4Tt8tg(|Bpw19!ujnBo at -G1aS&)
zfGZ;4|8e&2aZT3!|9EMkIGrV+<uaXsq;_Bud3Uh8 at O0~3G=WgBXbNfunUzxaol<Ob
zAY9>KV?!L{u#NLU84MIe4Ll^P6cG?6a|eOatPm!7s_*lC4gGZA-~01 at Jbu4F_PDNH
z$M^L<z7EgV^A&goJk%n5=hvflo<e!c`<DrpcxWj*H}t%v*jmQ@%4!h(3o_T|)_m?J
ztP%0RzRK`ytl^*`l2|6e7t!Qsq~Zq~u<igiZI=XElZ$BC?)UuLWzx{@?4<1u#5jEV
z;2qz5p(C8ZMD`!$0iQdV8VIbKUm at X-X4cWI9>mUd9&I>-<hp5uJTS`ftpx|I3f%1s
zcQxT;6_&Lnc at Fm6MceJNfFJD1rDLJP0W${9MY)9g4LGpRSc&ax4fw_C0>UAu5bo{V
zmNng{2*ztx1ja)ZYcp#QI?u?2bUbqic8f2eN5gJ5B^|oZ7t8ZGV+dd1gvE#v&-2<(
z&b2g%Qc<sy<z&5mRaA{~t2}P9_c8BYP2`m1O_Ll8+|Sv}{uJ@*=$Es`xno(+9RZ%y
zNWS&nL9|tFB<X*pR at mr0SMlcTf$lpYcTu`?w<0#<Gfp1X>dA<Cld%vRg}9T6RwFs?
zwVtfu1j}wMQ^c;E8`_06-dlSO*I=#nv|GkQcOx;{u_N{DeekXIPsk<xq%-qo0T-B7
z?owa_!-28>`~;1;<Q06!i<FVbA;_Uqg7-|qbH>>Iu)H)O2V>$#(w`_L;l{-LGW4K5
zk0ajYM{o!-7+dZpU^$bZbCB3f=$OcZLHcYCFtWwqSVZ0f8kn>(z=DsY5V=+?d+O&!
zmCizO+S6p+Bs_;*VwsnO%u!h~{`bTWin+T4<(oYJ3H0Sx?>vkB2{<OfcKqCFnA>U_
zZHNg!Lf at PKo-V7HV6&&?vWz|Dtz|EGqhCEUlq4D=IlsZTB?~Q`u2`YV19unEt#@7)
zp8q|UnMVqU{Dk$h4_t6|l;4wi4stx=IaSPaCf>J)B8Rw($svwB9|TuJaIS+i!8-Sp
z%2UzKx-P^uwCSv01-_5xzeRA|%yS9u9Gu1D9PFitJ$Zd3(bDJn28lcH25uJbAvpOH
zqicv#bd&ZcWtPiWv!`f9I*m%cn4=6muTjDF+{c<7r|!JQJ5FqdSNQmrs0(|-s;NwO
zj5Wa~<6WtE7vd4dyv at k<49=MKI*BVM_>$R6JAc94IXE4>l+d9D5zBBPg5W-!z&>}i
zV*G?ejXlQ9mo`y`?KR%J1p7?v1aBM%w&WnGza@~fpgX_&dMm*`w-ymjXXyO<A+t_~
zOqLA1(sWXmfQ82#JdlK5u0bw>h$tQA3Hb2Ax%}{TDVMBIT22&I=;knlt@;4C5t5}U
z&L~%+;9XLdIYNRzhb`?nGA}fjSxzGURpq&gr5>z?Z<W|5zyZ?vlgRXw<k*HiOTcw0
zflt-r$&BU#U)G2(>>h}FKwHIS-ow0aBY8c5X`Q`I1*{I4pMQ}{=>7>+s0%wVul0!Q
zPynl1>z+4hWp^Dg0Y!Apd~e$y+Yi`B$n!{yvm*AP^@usI-(Hn>ZRY{|z3mkgucrg`
zmO&Q)$0FvWf*Um1Gl|N}bG~}P(a>ED9>xofI^bP*PuUHbU!7NgJf(a52?sQ6sc(n=
zg?G1x)VX{axLiko*Z&;jN49mlt%1}jiIbR?O&dtx^tS at fK=Mi%<Sj2`k~tjhn at ig2
z&F9fp;9U=Scj=q*sz4SvVU=XwAb9VgtpSlEx`bY#@w;@Pu|;XE<kb%yW#=7}WEY+-
z7qm1rPtPEI+clZkKZxywBV%wJZZ6D*P=)0K)YXno2kC!)-!pkWfE`9|oI>D(RTGLt
z=_GDs@>GgzO93{BVtBwhScBB}ggd0YP%Gm|Xj#gXEPu1pB~3}1UVn at hv@|0(SQFMT
z#P@>Nab70jTur#m5idNu^9gcar!xyU7o7iXk-|~WrkLX-)*r`TME(|X+*wLwE3ZW4
z#TAp-sutwJ9a+3+pVNmNN7>e>77jl~V)8JrPh`Ij4Ac(DzNMY7K~K#kdg{O)b@)JM
z;6FqWbP*@-nDcQpasv9vphqF^R<$((<CNgklzE7e3cSa};1C|LXu>@SZWoCLamG*W
zNB%?L{jp{~(XCEBJ{|c|ES<o&ARb}T2I3nS%q7nt&yp6c(P`SuWrW8epx4ch+nvx-
zH)`80;;4n^FQ$y<H_(_1#C_~~ao>dM_i6`Mvx(nA#kwn3O`gqMr)B=%ldITz_LsmC
ziD8phAWkFY`Wp-6d!=l~E-;+JyZWOnC>b_7<zNnpeVDsl*z+gi?%>bISOcdkaK=4j
zkzYhjWOl;sKX?RlZ<)D&JnROeYjo5|vqv{#rD}kuxn|Gs=$^m8@(bd(f>~CDYT4^v
zd5Bs4h`+!hqlyhN{4o}pwdlQ$&_#ZqGq(I*p02ghD-ZE<0n=u?!n|YGE!eAn=TGYa
zMa(*1uk|A#oXsO4z(&Fc*HRd{BWGQfbH^I26RlW_wW0&&g1po#YqlwYt2=<TdP|E6
zYv<nxXD_y}MVr$|PKm7J=Do-jLI?idLgJyr_dS2DJV at hTD+!hAUj-j8rG!phJ5+6+
z>M7#=V6A?o!-+goA at 5#2Grzh!t{FHiEplSAWD6KQ|MwT%*V%9F)I(oXb3W;Y+=YJh
z7`Tf~q(3RPXuJbi=1MA4ju^eknTRtg5o_56zKD|%0muFNw?ptRlKFXZD*V+iLasud
zA#*i}3+di6-`E|u)MQDQksLAa-r3~&t}J>uEQlG4e}0O!lU!Trz7~3VT(VSf`Bw$G
zc7gkvC*XII;J?T{C(<z<-J^Y=7JVR9^o=D~wq;SI^APf*pkBd6-#+M^2JWYe`^-jB
zCg!2vku$0ramX&@YE%xAIH>~>kWnt~W9Cs4a{JaX{<kUkMrG$uoNSciGjOWrU>##4
zcVC7)8Sj6SiTQ$k?8Jw`25tv@&cu(-MV`q^gGFvEjnu#k7_4*e?|z8!>s^q8BZV5%
zGbw1{X;tShVG0(oNhE(^P<4Qo*fqySA|_ZTXlpLkru0-rRt`TK_;*3o1XVNS&T$QX
z99Jf%kyVMD5k`x$H5uIS6?anUB2^-*DEnqiIpWWX!9ib^eRF#`{NRT-#o8zMaUk>U
zn~%80rHK7r at lAb>?GbS8muBDmyqv8S6xPOC3$$wgDBiJQKg1Tq0RLDZQdo-?WjKpO
zIV+5pGfA#?#1GsPN|ed)gC0V at q-<b$jDvZEha>Q?Ju&Wr?RmFM%V4v}T7`MiT+HMh
ziyeNG_!hYr7_KV#IZ|yN-N<oxTA;H;OdhlVV{94TD;cX6ytH2hUrYjG#=eLD?wd~g
z<sz2DDHG>EmE-zw1>)tH<7a}5OS4>ek^iws5qEXsYh6y_&seDmWI4<)dA^DLHz8j(
zKJd9^n87t1^6o1hc=l&#f1fa8WN(mBnB}@M9sU!I>;QSrGr$<up<YP-6q4&I6~|@=
zM6eV+rL-fV_uE3O#{zSv=PIt8_&1T$;qxdZVkwc^0qgge2l&0$(Vqx5_^#!Y=W<rc
z^%D40mItL at FAGu*rn3nj!4PB|8LMCL_%}u1J1%3Bm`~YY9c)o4_kB%Rljc3}eG$K5
zhPjd%^HOsu^uX7-Ne_Hqh;8*m{o?vz*j^J at W4b@9nD=;wcIt|7Yni5QT)AL+vR!PN
zbZf=iEXBpVoaYt|Igvw0rCg*IOhJ843p?YaL$AoBa^#MD`L3e`TtlJ=@C$Jitc*2z
zKbaS(zinJs2W|myc~c$PdS`k{zQ0B;&K{oJrj-FpA(K``ga;Yl%tB7|3>tWBEArFq
zDY;xkJ0RDUGuP8@{2l6DiF!Z6Q6siG3VQly%Q0snS21wkqFO8RoUqF&<R1iYeifVK
zciaJah>3OS{Do;BjhVzIM+KB>9qe?wLR8z5FFHu{0GAixX6ybKKVbYYk6g95Ab-ZE
z+I*5=%l`s6YaM?9#nhYqwD~st{1afuId4Br9U001_U|LaW5e!{di+c}tM2S?Ea(Fx
zvE8N#r?y^j+p^u<!N9kTc<Oov3GXjtI~h3nNKUItcTOw#@!k+OO{gaGM?y~JRgElF
zC%E)vb<ZG?SKb;+%I>$4l#j at Cf}_aEdSyzE0Gv|DTS>UI!N~x<z8Jp(vQ7g79ObuD
zsJkc=>a23uuj^J6H0HKQv(;3oS8dKCKJ|$2^;uC+pWD)ut&S=6!u;2+I at tstttG%`
z>1o)$3iP=x$FgrOEcMxga>l#;Jvcu|@|Ic<r at _r7c}zW1$^V|)WS`|j_AhQ>jz7vA
zKSgW=sk1MuSmns={l>bwmV&c2ta8|~4r^Vkcj%j*4#ejcUskdl>>O6@#cX#hK>L{>
zU2hh?!P5nf)fa+ap29yjus1h1Pqnn^W$;i0DMFi7CjRl3kX)}-exbU%GF<1+DgS>y
z%gJyPRK5HqU)LgW6u+F~C=eKcb0K&V*k{+(BHrP%)KlOCnhhPGT>KpLc{Sn+_i=a^
zRj?h)gp>UCSgV<1IXITd_(j8W&%h=QUq(Q@?OCrc%2i(fw5}0P@;nON$6)yt{7C<>
z)}vg=Q8*F;ZeGZk!{C#{x64u-{@HxVQ1ef3fJZ|=ARh^NZNw?C)Qv9*9GmQfE%BXz
z;ak2UAKLy*W-4UP;fbMbsSc(NGMy!PuB8%<OBw%`Uyj$Jx19&k7uRdllglHpR=MXp
zt<I at R$-gY79sU}vo~@o-M0JEl-<7R+{8}~S<DH at B!PSuakHH^*()4*nERYg860z<v
zq03#$SC(<K<iAakt$H<y)GcE4%g@>|-iRGe0z2G=TfWq1v|Z%=JM2hktJb{!(Xy3c
zD<O8r&`a8DC>QYAuPi&0G at +RTURC&To4Y+GH0PN-+q0{sNoVU=2gHuy1HiMQZd?!N
z$tIC{fo-;CE}PVUF6uUXgq};@(*}OB*x}9atyX)S^h91;<imiU7e4J6*xV0t4`6)l
zgN?7T(N6HssB;$DHUylDSkqxY9hq>7<ZuMH{TrHvab=o0NkzOV{Qm73_7xtj1TXcB
zmihzn6(p}`gYcD}M*kBhqC#i*sbt7~9lR|-wU<4k9`Y;UYTi5aH0+s0;3p~Tks^=i
zj!Or(<uI~NC3UR49NgCF+ld^NLm$uUc-BZQL>;lnbF2vg at xoWSjqYa$|Ml63C}N&1
z9(wk{v-dO4E**V#neQUV6zM~rsE3Y- at SG{^?IR(ycv!Tk-dV>(%vg_l==P#4#Fc$v
z_lGX`7V at D08?d54)L-u8y`y)s4Z>HfCm9{(hNf$08OaS2n3;MFc|0Db`o|aaxIBw3
zS;rpXeHp6oP>t&MW&HhJ8N+EF9gIxZ$mE)l+C#v(a*#L0Z1gpwOzNSdyyBU~mQ2iT
zqxmfF%Ai9oV)6kL`0j(fNCo>}4)Th4&~2A9fT{R9up30roM?}LZm6e}*nd*^O7BH?
z-Awyy-CP*0n*%Hd^0)ocT{xjR`=!6P at pkZS<yxD*JDruk?KS%fjiI<`)Lx(!tQt;R
z6YFlzAbPZ|_A>Qp8m-Sd at NA+S;G;_Otl&k<9cS?$SmyG)j at Sv*Lc&k&+Q8Iv#7KyE
z(!?XE<A$CKW-Y<|_#z)vH|$S6E^yTAw9kVJMlI at IQ4rQ|-yrJHJMkRk{|t4U>b53{
zCyfQ?7w)YyOL<dTni$N`VcL;hCvV$%0(v<xKH?_NI>D2`V(ymzlC74uHOc7w?f7m{
zE$VcH<Pb%E&{$V at Ks@belKpL|AZJAlo!gwxJFudrk!;N?YHG-~bVW^lZgYWD<*Ccw
zy}fjbI!tF)f%_pNOm_$Ibpha+?-`k_vvdGAr)<)qFOj^4$ej%C(0z=box##WwkQ)3
zY(g$`?CP#4;DsI?U*gdXe(5d5Mj-65HbQ>ZLWd%G0mX7D at FDpW?0A+s&o{AF4_?f>
z1UuXK5+*OfV#w2Zzy~E_?A{YLv?bd|5T9R)F)ZWKgcrj0^nF<d>v%;#6vlqkND0={
z<6Fxn8!b8Ig at hY_-qUxG6GrY3jh2<1cXQ at 9*IH!b^QYt?r|j3a=SE9zKTqOzE-I`C
z*7z7}<~?n!ocAQjGdaEt{%6U&r*R(o1!B3e9s{#O@=KEW;=)bmx<S8<C!+THiXuWo
zE}Hn^<w_?_^4hKo2A{9Vd;~U<vYr%H?Hcg5tWh-Qa}r at +%?=6AHsV;`P?<%&r;L+J
zR|OX0e>QY;NwPHXbdJ}WSju3 at 6h&KNtvfD*+Zwh=I_2gh2a$bN`SHKGyx64%W~%h;
zRQlN2IrLHUOM8mJv3r=TQv{b8aF0?@+R9fgeRP?oUs9AX8CdRYew#3(@@2Y^uF~`;
z79~ssXNHnL>wHG#-z*)pQS<o2;Kjy$GX9)%8Mqg|P0hkFxEFrOKynUw*2MgA=Q1b>
zV#0^0nf##lGAe&d at Zi4`mBD}M?F_^?U!qT<pPXA44BV%ZzDC`EJe342!sVrpTdF&6
znCFbo_ezG$a+Bl)hdtUglV|yQ=EIgW&W4K_Gr1Ny=5mSk$XO58v9m9+j+);YUwn2d
z>&V%D)?u<X0ADh_M>cw2BJLC8J~i%>;=Ux#;}^4*equ=^94_PG({RuIJWuFR;h6I^
zgZqGWtE6h&STSnf$Vv at l4)XJ0LB8Ft{p^Vh8?v@~E`hAIL~dXipGXgrg6|jS$a$9w
zy4jNZ*FHwhW!yg}Qd(rki>0;D6GrdX?4Eqkef>x(Y;G&(6!sia#AX>WznPwb53`3Y
z(pi+|gGA<r-L{nXFv+*f>7^Qn*12s2;KKM6eR~nX^o at MG&PBt=l~p$C;~TPMz|Lb$
zbzuJP?N-4ik9_0M?=9fp3_-qt{D7~(vz_X?H02|V!w$2-k_f$iXz4-ApZM=H`u`68
zk6=tTkUWj7Ti_rg962tMljBkX>n8P0JMtQVA9cTd=9zi0Z<NjKq_XHM+<i?6z`z1G
zVI{msG_iqr9RSBtiThf11zieW=xC1aevUQQrRlRp)zpsWsf1I)_jMY+cM`ulQ3_pD
z=YLK2Hqo=Dr?-G>LoQ`!VBEN|0pGBXFgkdVSCXKLlTDGlFgcukm``%i=7`$~_zLy&
z72@%}0$0FS;QUA!l at Grm@}VmSHs)^2sqrP0$->C at 9#yE*ugcS at gYe@-5WNlgOu)R3
z_$B>@obm{81l-0L`UjD-q5s#y2K396T)|Pi8*((i;BuC^h*#Ko8 at 2+-#{_pluyr9(
zZ`7g8TKHnp;S>3E`AyCl$b*PCKs%qeC{I+u?&1*WNe&C-;maKaSF0nEZKVxd6XdK&
zg8kZo7(d73(Ct=ceM4)_9-b>jnG7C*(btJCM$3{Lh at 9`6ONTJeYXt6^;fuJr=hOG$
zFFKYg*;x$xQyy?D9S^<@*nk_<XdRTgYEX`#Glh_^nfe$v$BHr$d*w~&i{QSAK>Z*d
z7=8x$k5X+I&sJdXR<1MsXT9FoI{M5imwwQpIXEu=Nd?Nwv|HCawzfPS{tx)z8DGjj
zNxS-1!A6%!N6+;Z8eNINo;5fN5qBQX#PcUvca!-2tlfO^&Mx3&eIN_Xw;tWuHPdM6
zAok*s>Fh-C<0xB;37%+9nic%E*k<56fsY_-C2y$QiS at 7mv2r9&9kKTmG4<O-aL?ej
zT1&R1UB7RD&8di!=(g{0m@@x?oCDTkUZFf0xDhG7t!e^ndV*fu=a2i4tANOdyh35m
zWi{gMua70;?Y6jYa`vK+Qzg(o&-dts=esW;=CW_TSlq`i5?|+Bb?g3S!)x`98sCGq
zShhykV=h5GRWY(oG2>%U3^fEsA@=(^2d)R!*YG6{09#`4?SkH5WPE5zj9oF0w5ctY
zoD<cOedJ?-u6r>XvS>0nW<B7gA?^QQZG|loI8??zc=uPdE8=Z|&yA8tzr5O6E+~Wz
z3cTQG<G{#pYXrEIbgm)qSR%{JfUOhtw-)DG+2Eh)YxFiER|8)paa}QE3(jZg45Rj`
zKM_}PdSRuY8*&5Mcbf`1$CEnk^SndC`$+yT<a?Tjn7AHw-Zf$`84Ii<!47_V4|bbc
zI-2?%IVod;pF}>oP?Ec8l=mgd at 2!!sqk6B5aO)zrU at _0%o|*81*2(C*pOJMW^gMLC
zTumPbyhgS2V>&QC#tDp;4U};$_~%3>zV5U{uOipaBACHo#*QQ<m|p60l+TAe<32~?
z at I&yU6nJM4djW8~C=b at uu>rj{d76QxM|?bk<A+??BCg~XJZbo!G6^m;=ZoqqpJ2+h
z9CPqN;-_KCXGHm`G><|*@?e#_^}8YG|LAwLOrv_iv|UHW$!~w>%86gcy+$$PF$(_U
zDEM>hQ|(kIeM&Tq=r==8gtpNk|C=tAXL{D?|0I029sD434mjyzhss~xbz8rnG1Sr9
zvEsbBn%^dh1}>-ueJ87>lGt|pKgN8RQu9g-P1fYv;F!r|{j?IUsJfU(Yid#UnvK(I
z0-0;K|684vp^jpp at 5KaMr~p=4c-xR(aZP%9SO-22<Z;HBKFMkqpX3(!9squ!e|+iA
zVlqDw->$nqlX+yKlGAoEkMQ#he(s)+2BVoipE+3!nGW;v(DS}>7Vn}GW9Mu1 at hsXf
z1^DWV>3jUv at 2x+EcslV#HTIM0fqxn{yPxq}F~+Ei<S7$n2VaJc(@yn!+Iw8(8Ua~j
zkSCDw|CDt)c2?Lkc?S?z4VGU at jry?v^&4F;q8=(@X5zgn+OT2YLCn=d{g82Jly?LB
zAZ+NLV%|@%klfrW$y&zX7qjHWWZwSwxq9&C7w~@)elH^bLbh=PM!~m?emkcf{WE;z
z$8{!_uDhkhKo6$0()JW1ayop+ZKIb^so=bx*m<=(BNcJ3EYzXx8n`ElMXC0MZ0%rD
z;AtGovo8d;r!??m at DOxB-YEgTSSfFU{G7wi8%)aXLtMO?E+PN1C33Zv$jPwH+=gts
z1sHKjo(cI7BkV2_avoUD;n#s5Fk--vFnJJwktwhg;a5!N)8Gnj8|Lbdv3~*hXp=n=
zxi?$k53ffXhpej^EXsbAZnKC}+AY;7=l#EVvTmIYYibi&D-m0?{@gCMn)uH>lh*0(
z_-6MHls>NHBwIRXiY=3^HIxy##KfFpODEk-_PeW7RRV$SkI2kyJ=T}MnQbg5)BiN+
ze<pe{@lSFH2KM=uDzpQO#JzRDUbqkTn!hct3JKrd2kgHIw(*V>2{>FxzM*;SKfob<
z7kJPmE1Ic(#7g$F$}QldT$@gxUfX`DL6bA{4~vOaB~PXcLND=aE^D;cr(`6z2n1I6
z;3pVpEla;w#fpl2F{hQi>v$1WN88yZ`55XTJuo?iUlw`>nEUghd`g|C*YwjBtJVp7
zE~dl(&}%IdU!PDMS*yLuPDg&xjAW<a(d4nK?pc?A*?-DlKE*1<uY at gGQD&~r*-81V
zu!r>%JzYCikQwT*#JW8EtNGHiEqvWsDM##XBRPED<G{B~<~m~M1Bbk9$cM~J{%?|X
zj5^;fgN~-A`w^q2lapM!YK*Bvw3Fm`rP`?K?q+#~8M)aaFW4c+Ltd$a?_~(~2)9fY
z&lbb(p at qEhBx4_Cv9qbcZn0bkTiuNW=xjae!qiA^$6B-tllwAZhEU>X9dXbu_`6QA
z20Yt;>o?c29ND$LNsuul374e#kd+$}euW?B>&i6=KfC at oBb!jVctBniX3Bb!ceHZN
zV~8WLbgXC|>MwkUy$5Xs*@9|cAsOoD>(8D+duET;uZpe^>^B=oTRgN=o{xE<z|w}b
zUL)7Xi=ng2b|iuCE6QEA&euq8PV{|eKtyHilD#<+#JRq=plw95=qA<NEprxP-1%i+
zkhUf8&Saa5 at Xq*3g6(rAkg?F2RjP=o*nd_{&%tw(34i9_mos(pDKK{Z9JO7 at R&O;@
z;4`$e*-rznI&?XSp0gqo*fw=W8SGwqCQlM#haw8;K5A;`74ltpK5%=;@q*Y0ly3}?
zUFO7)HF$7Y!lfYn#Vi+-bBFv7?Nn~xMbpP;D#&r<ufV+aU9MF8)#bqo*w;)VlUC2G
zM2rP;=aB22yT|7 at 719!M;Zs#&*>fdy;qW_)MjXXrSwN9E?IoiolhyoHms}^7`QZFQ
z!~+P+!Bspj at QC{vOe{9|w0&}dFL6KN7a&(+q2?yb0GU4oTocuO^x!g$if*<%$|?l^
zNl}8bWv^3}nIE_nec$y$A^V`PwYx6(HSQ-tMQgHb>q0Yg*J^@U)f!;TcX at qZlAw^s
za1{P0z80)F-BQi}#-a!j=^rwegzc)#Nw_N3ztZ6VuP}VUkbxl2=&n%LlSHb8m75mT
z%<fZOzZmn9T-qo7+0fUx%dz1xf#h;dnDk=8!n9>egAK2hf{Q`*O;KOXqC0GGJzoDV
z*l_)O;!nQyWq{AZ1JO at GjzaF)MNT(&8e*o0%qG?lw!dNf+s>K#S=hgc{hQd1U^{~C
z4Qy{%WZ)2$u?AsVm%vV6oDjuPSWZ>Oas5{)fyGu>PF8F&_pyd{<#HUB)0H2Y!F{GV
zom};4moT+Q%m3|iPIAk5^&og`Ae&8b=5ybx{1wj|dEjf(w&ZhxJHwdP!|ylyvTRSo
zJa26!u!!$N)<x_J{K78QAM%@?`WadB%@6MDFc(N~vh?_GwEQ44uJdUn|MQvuXGF%e
zTIPS5sFrVBo<01mMm?=UfW9}d&p02pJLD-gKJP{9<a+08ya^=UAywi5&Rf5YbTnk!
zwD)$Hu@>gN_g;KUA@?NVE#^!A%=#%GF|)|;H11TOAN-d-p1R%w!ck^hxj-$CW+NBe
zono}}9{4O*?{zxMvUHmCaaE9m@;TX<zf!Yw372T(4U>;m#EG91?;kEg{KS;V&xJj`
zUkaNq#-kp>M|~K7!}_*gRABLGDUm0!98=PBCeBEwp_>u?3_76?Fqc at D*43wegM1zY
zE3|xBX0DWq$N2q*W4D}!Z6XI4scPh3j~ymFup_WN<fHGJfQgr^Gl4%SPI4^!;Q_+o
zFl6>%-5}phe3{}t&x*hd+gHdn2fP-G+&hHd4fuXzam>+IemyC#gY`V6UZFSlACoM(
zbbVZqQYKzh?<nBJbiVdDxbJ|WAUrWT$eV at Jvst>e;8R9lL?<{?IOW6Oibc>pDCCJl
z9!ua`7gk2UOnihyhoKF9^z|vQ^-XjiCwe?&nq16x-+)6V-Bv_6OqlZdz^CieTo5=3
z{W=TxcR+5<g0H1E)sAl#ifR`&MZc`pi-LoPUqjvWwf~$yaMd`mPx*6EU(nAapUWWj
z3&fKql=rp#taJY#jAbhjvtlCnaf~g<0Vr#9fC=-$TKK4{P`@WD_mMhDsKoy1N)7h^
z+*tuRlT*GgX8M5~VCQy!RR%nu5m+BBsecy_yafl%1Xq<rgCmx87x=Oy+&4n>x--~U
zs3u+`$Ncwe^|&AZC*8w&7vj@(muTei*)P;};&%_fpW)jY*)1&VPlo>~0&^+snq2Vn
zfb)4a_`h@)JIKCgG<;%Z_ at N!<1N#kL+>Al^$|~vvpL|=uy@$ExUQWeKHS&a;D(dB@
zS(2yoa*nHxvx>6~?XVFFhAyjI0vvbXc%teYIo?H%+uBvGrQ5vE7Wr at g_KU5<Xq)uP
z8iC$gL-=CvWU}<CjNxtU+?L{m)7oFAuLd_6a$_VUgEKUo=@a^S-X!lb$#p?uw=m`c
z%=z3*=u9d~(K8A9c|A?q?@>+`Y#=_ at ix4B8&&`sF1-;O%KOp<}b7Z-meH^(aJy_-%
z*j$XXY{xt3gQeg>D-o*#%EYSI476&;1}0Y<)(O(TNX(dzn%Fsnt(O!8zZ0pm&?B?O
z_r?_h*P%~Vv3kh4&im)M<lJ-j&*hSHBctbf?vZn^-9Ps`IoCgWt~<r;H-t<EzjsBP
zsN*O5%U>WK6zkri1gD4!7b<#`mFbJL&Iq=G=!rp%S$#Vw_NMDa3)I at m_~Ob8v1<4q
z at UJgTC;*W=`SvZ&#rU6)kgqNBT2T=Wp2`A_pi+gp^5wh<3uqFn%s1V<H9<!Ke~x;6
z${dG2T?Jgi``8|UkDp*M$GF;sikXrTU7uxenJD<!=B#0U>6Z(aw{Wx-j{r+mylcVo
zW-2dvY~&2#Z7tzU$DD(Hgn7r`Fh`8BW(xiq>s-ynJigxIDz?S97xuZ7H|t2e89DE2
zzgZ`HpLHc at fAC#gm-vr7ej?vhSR3gbd}WTf_~ZCy(huZKWPTuPH*AW{WPKL(cG?J@
zMYf4G5TsE1GWl*d(FXQb_+7z4>i0I0#Zx8opzF^O%cEai?W__M-qw2 at ar?OaK9Mbs
z2v3e-Zy1T`E5~zd>E>N66(!^LRk(KLc9rbP2^w0H)n)i<+<_AR#LnC9u at Rhu_1=l~
z{*foaRqQnE$rrs?UP9GZK1xjudH3D9$$Af9*(fr<;N6&CVxI91d3P3{4w;{cZK&L#
z5i4~spXVFjHzg+qu5wig5X%Ss0nZJRuF2vnDHk1+Kv&+QM(_<Q547<r at g0N2)+JOR
z57}|#M4iLY=A6OUGvo!cdce_Elo#xI^u5{;(SfNgkUds^sYUL=yh2v4^CX at BaE3x}
zE at qWSW(&*YABK+UPT4C}4Y0hy#g2S=Xj4<Dq`R>5D#4J<5o10`SW!$>-|_9^to|}L
zVv-{--m`t1mT$0RA<w`J&#9IyR*@y=$L0m!AeOz*T<|xm<HzjuJ4qUnx8fYD&Z5nk
z{c^a&Az#Wu3~Wm-`0kQ}Dp0n3a3}lVUIo9F%Dk4epkc@~FY}sY!BN<kTtkO^>6YCV
z#9O_fmd;*PXMM}k#wvWHVCjG*h1_#nAGS|gl&uO%S`&+VvbD|7i<4kyJM+R+#`m=A
z1$B#o+%NRW5wkz$7k`z>pJGX}jt`8pS>w)O{Y5U@?&XmGqeTXbwxxutus`|W_+=db
z631mNC8F&AIKC3cO*p>qKaMX;s_N4S6<Izzkh>}&iC`<R-Xn*s=kIaofBx@~{y(w|
zzSU*GIxGvg(6s1zZ{!8YAo*C42LO1!6CI%rzu4u88nyhoxN^8aG<<APcPm{dibvZk
zpznT?DkEd%6_c}a+t3|-g0s at cEf1vmixtBKkvo#4kx^EGw|ej>6KfkjlDIWhuA4u#
zvI6`y=c#Pul8t$<6#p^qM}*ifo~L$I&Yw#704K{3H at Tb4sdL_LDV?7Q2UYCNYhKD@
zP4hAvx!AuEuyEmlO at 5uP4eU304Wyc;cz^?8lRso=&EQAOc*GX*j>s=GGW#npcTR%@
z<Rzn|ov(3nCQB?_LCrSgTc!57>dCwc-8h8GMBFcO3jvdNm@*OHIbsXMDQ`?kujtNJ
zy<a+Zcf}LPv)z>N9BoMWP%inR0#xF0d#C&7M>bnBu?~e3x#yS!<(VWhHAzsWW1C(X
z-M)&sh8LtK`N?s9BFbooj2uGp at DAKIO{8j|r}GAF&pftQ>e2htrl8$Nw8Tb2oktGg
zj6aI;o;jG)NL=c_A|v55{$gYUvAHD>d=<Y^37IA#VT1oLcWvdg1n0RLSIgkGhcyfT
z+{DefHzsf4<xR6HRjXDGzb{hp&z~mw{dQEQXR9Wc;=Zj3MR*1koXK4qyqmjbVbdmV
zr3&>rO`JBdm}?~eg=Lr02MftD-ro at WqqR#1az8tZxfomptP)=B!qTE!3k!<wY=!KB
z{X39xfU&&Twy?VBj;j*aen;kQyes6XJm68+`q$z;@=e@@d7EYpfm>(cV9^lnx3yOd
zd~2FIu+PL9t3Z3s8it<rQ!#ipNsPijaQ{cxuE2I1xd!E#O3E~#{;U)4_<@uuNKX2N
z*%Y86`IyZIiM_)eLx*o%_n+ at ZUoI#3-ryr#-mf)5$Q2KZw{EdFM`?()uERSfMu1ae
z)2rwoB<?pJdJzw8`s%fqpq!wai&Ynj7<=O9n5)-Aw(3~;_f3A#)$3@&^#}it`50o$
z#e`E&6d_H7Eu!2tG(Q=~c85ihyeD!AufB7L^sV?R!j%awmbkt72?r3b6oEJ#t^hbW
zf{|+nhSGoc95LNO=EYa*ou#{!!mGW?ib8R(XF>exWND<<8i{pa_Kq}q%nq5MY=>%8
zU#cVek~uLzRhSB0Az15z+<$XogZw0`68~Ruo|>tXcd#m*YL3p;e%&`LU0M_mp1wu4
zLZeH0-5Q_9$mv+;PzSY5THxvHsEAv>Vwor6Glu68?3G1qts-@$Qm`t}J|2(@>*9-1
zw>OS8k+pAq67sXBA}@j!u~f00*S4kJ)^n}jp)Y?wCg4T*re?y1Yw|n~dkl1a<oggl
z$e$4v at cK3I*Z{|hd><C^$e67z*o{Lym6kevzo@==<Ms>S+Bpq;e?GR~VypM8u^68;
zT2ipB!FCUhAII at hf*oaPJy?jHO=s1RHH!nEgksAVnaEY at o`Yu+Kg)=k;5)NrGof1p
z>y7*jTvK+wK$3yja?CfmpZ$z+T~K5}ePH|v)WB9sL<Jg^{7tV6e%qa#oUN2H=Q-3(
zh}Z>uY~T1|Z>3OYPLC|GWFikeegT8G{pL>jea^bJKLX}YoxF$=cm6V8P4aNdqrI~4
z6ewbomSGMe`AL>B`GVukYv*U&F5U*-Z7#nhSw0K4!(7I;Im3&l3&8_~oY;dKz0w%{
z$(xh(ed&j-cMS6sBuDqL`BV_*(fuRKNUjsF4e-s895SB_>H|Ij?@J-(L)bZxTl(n0
ze&c*HcM?C!j5bE^?m`Z~pG0N)cFbqHclI}%(3jJuXUL$#&rjpXz?-gx53aDal;K}2
z1gE2PzH;=ua%Vp<CAH={-VS2xW8GE61mr+B%i!e72v21On{ZJUn2Q)b$O7AUm`iTq
z8ZE9#ALW8fC%T+h2GNzQ;ANVCJ~uQ6 at _A8Uq&b|FWr~{UMnqqg>IJHh at TiuN*`vC#
zB*5f<Vv!T$;7P2JS^l+)oc!v`I><GumP*Vy2cpN=)=}};PO`0YNzwNe<Qdkt{PQ7K
zGkyrI9l1J+f!Ul5y<Z}SuR`?FH$|G0^UGKDh$I%Z@*j`ok-l-gSd&?QC{4vG^xtnS
zU3E`uWTDM3rVDRhRJ0tFs%WO~hzrM;PEC)(9GP6gPH!no%c2V+vt5<oGFDuSgKRhh
zeaiLXhl{FHCF?R%k9%}4oE-g>JQ~=upG6m{XAjIXK0omEKQp280Y~?!ZXoxcS$#Fv
zJE$CBqvFjPf_sFG2Rh;Pj=r(it>7n(@(T_&Ec%7C<@GL+$vCG^dVN+j$N1d9-hXQF
z+mHXg_+1kFd+sK3)}o*ByDry?B8<M9rhz-iiT`%!j*k!i!D}|n-!#)Schi%m7gPZ(
zMc<w4NoWJ6jlzH>SH$cMhCC7CvpXdGw{y5}ny{=Lye_0)u{WTNiWq*<3^u`;6fpa0
z at Xd$+ro**YNgFc9(t#a+nzTE^DcV5dk#Vk&Ij3NUVc)>)E7?r`N5o(t_jb1mx+ZeZ
zxp_1~MDf4F&ZpY>HEb{U?J<Y{Vvo^@e1cl|s-PjWYPidJQd1V`eQoxFXd;)(L*{!2
zzcwc&_vygTq=XwGeEE_VL*x!&Puo_^h2h|1N|8oyt0`9^Z<2&}V<hIXj3t>a8OeuF
zwkhzVK^^p$kEm9A3s+(niy%Ytdg<Q4ZuoM(CVVX88v~}HoiW$V16CT`LQ8<<F6Eiw
zb1 at M+#rQ^MO$iwp7pJtX<*KOap5R75-qG?5L264u;6`f!okZ8gDJgMxXyf`=^-!uP
z1J`V7oHcq)p(q<RViiA)QrT0ud);N2o7uQAuzO@&fSQipT6POL6U*BKt*|+e=V4Bt
zpBeo1i8S&&<V?H3yo-5G&j$B%AdBqX*4nrp&)`BAJl`F2qL#5;Bmb!fxZu6AZD++Q
z|02ZnAb<9tOw?hUP3Ah}?h4}_Wo+FBcm2>!agPTdIgy53PfrZ$Gz~QBYr+)X(Z;KE
z-Goo6tAjeUqZ03<dA*IXc%R?Ep4#stVFTHC+x#oBjgb5fxMr_cHhc$PVVs?Vuc8aS
zdSDmc7h3ZId8bPPJAn5FkCpH&i971N5~#964(1rRYWq22TZX^kX>H#lQFQ-qogZ}q
zd<^z;z<P+7x_=~9;<Zy=$Q!VaAV<YQb^>q<@564Mq&-6B4$)EIoHhdYl;pWuRFD1l
z370Qy7vTH=HUU0#8wWWigmQ4kJ*fo7TMfJUW~&&!(sv%OZ<bm*#$yfrZ)F at j!b484
zKpWy+x7efLn+n1Er=u>?ctS7^D{Q}@?7qlP2O9&iF%c|{XC!h(yK|PGME_MWu at 6RG
zJ^Dn%phFQe>jp6G;M19Pm$%(a<Q3h>@9yh><&?mV|1Hr~QQmjp8*KPdI|xjT=W4oe
z!Wee0u;JHSdm^_MV-)#?xb^m{BA4wKT;Jb!?dBI`omgkGZ-$@kr09_C7it2q-5UoT
zA{XLz*P?B~u|c&`YUJsP^6!ODxzWBkPH6jOXOVp*G()T76%!s*RzGh5bqM`9 at S%~-
zklV`OYj~S?7j?F=+)hR0{UYeq+XD{)KVK|w4(uj%gSoQJeh%euzGs3y`0CB08oQ>9
zzDbvb!3Iml?3>XohIeX(ue7a4Od>O8<&v=YCfW9%Y5nJYh3De?i_gJE3EV4ud7II;
zn)1g56JYCA%M-z6m>6h7nc~55q5$t<jjfBsL3YR6v$?eW?FVhr>uwXwF&O*c?JZ<+
zsWM93vy}AVn~($Kd)#B6 at X-p!_{9c)Hz#H99y;(5_&1I%;hD<Y5#yg9mM7MSKKoPt
zf}BWUREIQCnB^!~u>-MK at w=s4x9i&@moDY`?Lxo0Adhy>O_<kL at rxGwB$qMY>K%M(
zPD)EH;oWJAp`$|!f~u*k=JG!J=Fv#46nSw`AA?o{bAB_akKCz?=O0U)0)4Ny!&(-a
z6RLPB_NV5c^iZ9bswtnX&iip|J+U21H*GgCK2OALK+g~Ijs;$%iQD1Hqw3_*Jj?Ra
z7UY+KoLkM~HP-;ccT)4PG+&cBxdIqMgLA(ee7ixFBIrEgG!Eg|nZkx2mby+CbF?a7
zjaXWNn3cl<nU$hC=w at e+RJZJrpSXL~tf&RKXG=)VTjZd_HT?9;d--LT_tICy_c*IG
zS at a>q_&G$VbJtk!*zRDKnA#3bpZ!_|%2JN96oO;sq$Y84{`4&QVussiBmDFcBPHnP
zZ$})24XPeov#Y?9+7}iPDGM^am&srKKEsn5syhsx)DKh{`ZqJl?@gV1d;kBxZzrkl
z>AuMf)*oiBb)OrjvU{KpuZG-^2TXGfa_<>=AKIP-7SkZA8G=sI=-X$BShjdAOSz^#
zND=0)pEbBXhq>Me46RS_*N1D6*Cl+c(~=qFh}5!%3?Yg}@R)!{K-kb80}M_%u%ElF
z-~QY4ivP>=j#zIqap{{dhDw07+bx#{%H)Z>5A9}BChj5Y)xSRD-Jt*b8Qex|=D%Gt
z_P<=yU`_hBYr_7^HHFrH`~G)*|I0N7jQ#f!d$kF%M#YWJd5<B^=p6VLXJ+dHWOsZ=
zeHZ6#Dv>UBYH)>YYhZ!g6cQe}#NTk}&z1w2<H94c?)K5)`xP;Xe{wR88CGOA8HkSE
zuzm1qV0CcC?s$TePrT=9+461d^i#FCHUz#l;I}A=-*bQJ6)Mgb%=K~Z>kmsCUEE$<
zQoy6cUlOM4n$dWTynnPTV{EF+5^isxP7XVJLmVkjr;Vx^yxOPvpw^>nWI;g372Tq&
zR7X%wXtO0^;hAgi-<vpaJ13m24Q=jGEj;t%;d?U%ZY!#Z??@_3#<yM8jqXpk?Y}IE
z4GYwbQ>AKc>MjYT6t;5GgOA9zf}@_^@`EBKdA>`z<y$W)jwjOP(7D3jewN1g58sa*
z65(%Gnv1rjW+PWN`F`Xx#CI^)ON3^N6#4_X{zbYF&tfyzo6JS?mEbq=3a)563taC>
zTavF at 2<$)l<t2s#vW`OTf<8 at n2<q?%!&jN;55CEhjm*9 at _{i?~p=(r7;}O)OnmHyJ
zyc%aFbz=kn{|B{kL!@3Aeplj$nn&s~&N5oJ!GXHTriK^EF>dew)F-)*)Tu`oQ-%g$
zM{Y3B{yJ3B1AgW{&9<A081W9~nB4!up+B=Xc&9Sg9`2*J-6ZWxn}(-TGZE{)pfL?)
zJG#n`Ie(ODZ~VSbv-KkB8%>iNJE(SB5_`{Rc?5yFWL4wOqiwxzl^@!|)Ud;*iqui<
zxc=9`f^leX-2XS=rmu{a at 7PO_GXgT@N$~C7Vr-ac%)2VUq5T!&-w&#iSbd`$oCK at p
zbPZjX`lK+|RPt(&-~LRfWT^gkJ+Sb7z?}Wgs~I|yXY!Rkli3M7^>rzcj~CT4*Arb`
z;^qF<ng{n9-S>*JhH~A<<V9<c_jjn~cfH4X==dfgM_-pP^_9##r&?4EoAwVRUN894
zA;=iZ+vz at VQuT9H_7=#swbZ3S9d8(Rd1R9j$;mz=?`Be$z(EXuZvt|>9r{y__0P3e
zg!mu-#~^E%g1^JFLh!6B<T*s9rKFS?YdCm|iN0C>OJr6^_^RaO*nxe at kL=)oCNc at J
z-{q-BW-8X7pVddlF5$wij{Su=r|-M-LGyfXs at gyyzjfV?C9o++qwQY>7Q7nVm(@KA
z3b+EQy2yvVLKl7hipcv9jOj;L1$fJwohQfXoE^!!amr-mzj08+_kN$>FmQv-D=yDA
z0d4dw at btBDmu;)#dhKCxGl2U_wuQ#E+rx0Y0(hg}13w3T)NX$==8VlcQ0I3pFt15F
z-&;sqWWh(8w%wW)mrY3mq?96{hH_Aa4FdoVQtW-fM-C at 6R?#Lp6`qd$bO-%I>^bmP
z9L3!Ahq)#$JNSsWchC_yWHxYBjlc9Y3iq?q2X%4X!C#Ae-FOen1^d;wwYFclTDurr
zA`($V at Fm$N_FIb`$(zrrQcJN$u0_2TFnLa^@Z8_vZ`?P;!<aV@>`{IM+`$1sH)Ztm
zv2h>=OX9NN-_oGWzXChnf%1-}u2YK88$Bv;J|tO7QTOknyb8K7^&s6t?6c#3A-EGu
z8Ojj}d2lLliOMaf!DkA)^Ok<Jo5KU+_Q)}Cm2`As4%~9neQdNWa{I0O_&VrN!2><Y
zkNV2D+~D@|54P{qUTxV;>mzzOHOQY)v*u%AnlG>wMBeo+9?IZVg9p@&a|z<AV8_&;
z4v at Q06i-L@Ik%X7!IOVz2-v!__~smf+hwT{$MYUH$65)WFt|og?kc&1_klf0Kr`}i
zl;16R1+R|aIGETZ<Nz3c74>ot`6eq4wUKWDcZj{YxKH!p9`Ze8EFZdOPvU*wS`ED5
zEsmCXPZsl at JS$>{?PgwYaLyqa+9=CfD5x<T$aP--#CWO0w`2e(o6-zk305>a%l3lS
zG{1UauirVu(|5w=1Y7 at vIj|L$iRyxD5B&yNZ<h7Q8lURs=rb;tpu4pi`@ct<g_3Rs
z>?`|(l8d>(rXn6fR6lzCui&>qJ`CpG-|nwhWNo6gm_xtj_R<MtO+g=nzDCCDU*|b`
zH|DV?xF-V(l1;V~&=D|4Z230eaWdx6wkmrz<lnV)Qv4INddJh$1^R@$PdsFU9K6RZ
zPybbBCj2*$*A0k$Rk5;oz}5vm2QCie<H7n~Nfoy?0#p6QSgHNid~f`w*>BPPtheS*
z#s1^8EY6$EF--m1AWNTwJ~$qjMH9wgP24%cbBY|6z_ik;@paIrVK2757Uvxz3Manr
zx`ltPdZD9Sq+D3JYOY*2us`RCfn2|HylVK{)0&F}T}$gM2K(*lO4wwyLoL&@hE4^B
zB44%)^6YllcQVf8`~DDx7+s?8G28>Qyp*@}PXezCj?>xmGh1r#EZAtx<qV!<1URM)
zxq;|p(1BBl4h(GeKX}#1qp2M#otH_lM@`QJcx(Fu-{Kpo@>X$^3LIwxd%&4W_)BoT
z+LJ=ez#PQ<{+-Dee--|CgiU9wK1V*#)0+QVueGKH*0)x`_EZFYbxC0To~Y>x*x at tm
zfxzEM*2JQplkY4<A0Cew_7v!{AGS8G at iI1L%ZAFLCkV@^i#CsGc?_3#yHqCronpAW
zZMylHdNrdDOA#Nhr3v<*CS?o^MQ#Znv}fvYwEsTnVcw|Ej#e7qN=?sTI7Et39tUqg
zzK2461^V39Pm!`Rx<3ThqXhjyjQ8dI^?gJ?N1d9$?@>A8OZagVu}5d2KY_asI&cJH
z;!JLtn&{Ptolb;&4O|4|#CY3uV1j|O57C`PEHufniaK1)^8_bb+WlB*#7JKTZx3>d
z(8!HS?P$^>C#8;uyy at MW<t-Z7<Z{8|eCOq?v(+fKIM8Nag0WrhttE8 at -7wvDm((SR
zfBI<6$QF_(#lHoy8DW#{;9WX+Ah)%Fw40am1Sv<<XR?tkz8>~8Qpeit;V9pOz!sp-
z5MCWc><?E1L at N&Jb6fLBeNEYY!WbATgxpEa4bKk{VeHh~x_Fm38PGT14iF7}$7|T*
z7o937 at r$+Z at z>NWBJWxgd;gg><hn$zl<iC#7|@>_q^!uNWe^=HpBm_6`)A(%VQ|%>
z%_3X}cmpF_RBfzAro36-ZS*a(r(v#Z(kh3+1K_H_z2GSEqzKOmWD*y~I?5oZv8aYC
zX6BRnXx{C8kd%?+tF?7mJUkbZI;SomCa{`rGZ&$~vMK|q9cKz6vpNSL!=g_mULbiU
zNxu^LAlL2T6`i8~!hHcExh~L#9GSs#2l{Cm=1And-C53_ at 6JJH;U<@uJ3WPC3HLX6
zy(1GC4w)*Cc54AC7y4r=b>22RK!owRnP6jyO$24!06RtnV#H9tL>}ngfMc7r-%Z!S
zR-M&)EO1`-QH~tgK9l?!uftrwO(oaHcgSV&7Y4KAyT~^d+R-+`_%_T_smaB>c5<!#
z4&Dd<fa^=9oU)yz)Az5?mFK{2mkRtu+TX$J1{(qVf}{`lzl(Xk12|6Acq4~!P>9V%
zr0;p0BR<x at +NR{QJ=$%E=^$nFzc5!Q8bf9B7l?AcD^IhrfJZ%$|5OHYLkZ=J-S>~$
zynz4b!pE}hrd5tL@&0 at Q`;L4!yIyM(=rQIsEr?~8)7;Z!UKwA at Nh3DVXL8wMb2WG)
zz|rL?1jeLdXHj0ipcnJlCiq7m(r1W{;n}zcbNxA9-C#QNJ;PCm3q?$CmbudX{a=+%
z$@;Dwd5X(PpWzmh{`;*J-+|ap`41#lY<BXvHj%3^?y?N+D*Ll^dOG|qu`UzwuYj|B
z at o3KDny`MkBYtM(wJ9`ozHQBi15A at 0mQ=wx^tmP8Nh=PP=e8nmm*+dkk$3=h7B^2%
zd8Y&Tf7r+1+t at iW27U{yPaozoGT}8wCVVZga00POKS%n2Wd^6Z_^3S5oWz<-t6BYY
z(q|1+JC#vfDCa(pT-0q6$h;YJG?DQytHxgeAJRL4evO8}Mc~WlK=#u#UJ2aP*w5RD
z{XEEoUG^~Eam**MS>kz5)199GoRZP#jEe-v%wVH4HY-He?uEJAWWO5|JTfQ1=zccu
zmpfcW#?(HLF%QP|;(4QTW#FcU%{H}J!aGjhV_!m_^8BYDqq%YGJoACTB}A^g<4c=H
zYUA>VT-i`SEwGyU=nq!nzl1^td8(2**041eIcfjr`rXX+(uM-yvpU(ij0{==nGPAF
z=u~3!z4X$cE^uSxGrVE at 5<y#Q8BcHDN9GYyzkW8NS0f*X+M2}ME>8s)I=B}wuGafQ
z#*ifft5mth>w$byf%)Wj$S;Je_b#@D;9 at NU7Oj|_j%O$!v%#0wy?*3T!gKNeLEgR_
z_<7Ae-t#rhfj`+wwx-_pb$=gZ>>AXClyU at IzB4QKTqAOrPaJ?QtLAnzRs{~(uR_jp
zauAozTgk|5$n<DKOsxGq=G*e^Nf_&^d1m`L9A6kP1M(%qD{*5 at zzocxzuBV)Zu*@Q
z-(?+!{Fe)C)+O4s<27n1BwREC8Ml-&0%Ljwdhk<}PYdD7`~y1Lp1i`-AA$2|UceE8
zkNI#@-<^nMkdOC*OZ6vkSCP5(F0d|t5c%tfaPS7L9$QN%jeR|^8r&G~3(J1!!FD5L
z6YygoK5Qzx9p!36JKR7_8F0*gH?4VG at a(RA->RY250%hK4?R!xbnNfJKAY at g{L1N@
z57B7lV(!VY)rMG^vjsW21mJM85KgqzZ^A{0Wnm{$1zq1$)m`Gj8-dXOc!wH+*;lT9
za|TNp>5%E;mk29g-6lsoJbj#+X8(@JzeiRhF2CvjZ~N6q=sMD`o9 at l?HXHlst!o08
z+?j=by&F2yXj>9}X;RBy^d+XRLSOoW=u5pGgASrA9V)P$;Psj%F6Wjr-g_81(fQYQ
zrp~+D+5f_SwDTg=r-95_Hw*!b-1m{TX8OiC`+EcZX!Gl4wD||kX!8%z=1UMS8@}dV
zaK&NxpwZ at i&^I^#rOlJk=G#0vh_7wS8O*!Mys5~~fHjGcu?KNq0%bJJC3X+{!(#2z
zb-Ze(eNl#?%>h0r53mtT`;svS-VLsj=r-^bWkP?3Kb8mH!@!TI>cSVO0>j)P=wa-6
zbkg`ttP4Bt%i+-P8NJP_!+e(Y;)ipDcetA}JO2=6K<}?xm@$0)&jOE*g$Gv61#fW>
zbnvuN{?6M{aad;CdtSM617zf<*=k`~uafwohaX}~kXvL-Q&WuEn7<+Opl;xz_QgJP
z#9OdAeZ_Dp4Zyz<dJ8ynvW~&dUGIM9#{2JVdhpJ(tLC1p7iH2Cj~|e=6miG at daXPy
zEK3?a=7W=?GCFyutCdn(%Ln%5JT2BvDxVLT%fA(Q)@nO%{XfbQe7`K~EDy@^5HK5a
zmYm at K#`n$RiF}&4pMI at 7^yyyhf~ZU|7#nCK{V1!->C)zF?s?_=z%Rz$m*Sw_ at o2PU
z9=)<ZF|^=R5=)<TcbH;t_Nd0Ojr-H&W&6{PzxPAZj;O4`;fOD$Ci}kSm%RAXsW}qF
z6c+E-P6n=2Ha03#9`f=u$0x9dND^ksqZXZX6wz09tmc0#pDkEWb(In-KNARqiWB?!
z>F?+8TNay=eM5KUc&++Qc-6dtenb>uU7b?PY7#v9>x~6!N@|E-m1<GFrL$a3lO%|K
z<Sw|(cjR>(JEhs!k{@K^E4`ANPN`~Gb>geTCCfkLE4n(4aW!2t3bszQ)@VAWIkpY{
z`lkQ-rc*(A)-dw_qfhwhZ>ss4NOjXGP3OY0Rki%|v!ybpVAYvYvGI;!ML7MiU?cnm
zJLK0z!Pb0gq3Eh5^=!dE!jW&bm)7r1W<}*Rv2=9rj;Os^tSIUo>oj7=`QLo1B3F>J
zOGRwh$t|zC9BZ&vHwS|sGImN+)4KXW9aVEnzm9P2{S*Gr{q)}0waC?1$I^k*YOnus
z*nkfQRa;a+#?!#(z=!vaNVN+2W>=SWeJ^)7lg8>ag?Z(g-SSh|FN?e&Ol^&(krOj3
z#@}<L#H^LKMAlwcE>O#q>@AAlSKSM`eO9%g`m%~_`A#pD)IZEGxy5{XN0indoJO;f
zZ;LCZuf%&kp^hB8N5%l*Zp(=nds{+1besNyuF_&(8usvQ>RoC#C8H-(Ih89DI+8v7
zzYWR~saOZ8?Bt at bI*!rs0ZU=n!aC@;WvI}SOds$EKE<$QXfUi!d(~M!S%-WZ2Puu~
zPqS>tyO!eND2r at I)Pra2mx^&b>fvQ_9c2nKI^Ewc5~+ez7Q}#QYFN6rvWfpX2s(MP
zG`m>ShCbC`j>dWSwV~kD{rMfl;QC#lc2Fka?DI#2^DZtBPUs1wS=&;nBuZ8pop6to
zn{&|bgUT37@~|i}1MkJwQiw7o55K!6mihlK{zu_I%7<%X+m^vcKa0+wjh4DpT|!^-
zX0%f^zE`|1lT~fllDsUe9{;z%FB6CVaZ<=#cwQYHWx?2Cu8m#ZZ1}9-0gkwVb>LWz
zn<j7Gno7sK;63ziTo?Mpg=4*#3*v!SlbqHCsYR+rn^Q*X;-*Q(&fToCNW`m}H&iMT
zuE<R2GY!yjmirUln6E3-6Z$EgVI}tE(0RgL2XOvyLP2F0Fw}%=<|wXxl(}|KWoCi{
z*FJ=6X<R$ibpRNYGF;PyYxvAHCi`R at D~Z^PYie=LO6X9YEX3Pk4Mn`WAsol+aC{E)
z9>OV3o>75!J&NZf<2ehN=hWby{f$>}oQvZ!(J-AqH*;uSz}qAGt!2OaQuXp5wzdAL
z_k9 at iwi3KN!-0AZ<k7e++k}K{+o6Q7 at t%E+{i6L$zOLJN54iGRw@~7ED(#HZHm-NV
zSLZY!r;m(XgxsUZg`DgZH*q54+HN6^Y3R2AuaUla(;7AcTe+UfqGfZlQpGP!#r$f3
zeev=w#2LHx{$1oOUbHkTGpHIoa7&#{Top~*ROX_%#{=~m6Dx_zKu$+-<u&+?>O~#O
zcNe!@lLX~mzY?Tu?03qfI_GXF#-KG4<EIGrxk^zmoxIdLC?ixAlp)e~7eu~@as at N~
zzzB?Q)m$}GZz{^zSRxvREWcr7Q$R*j?+f1aaa*RjC^joFUt_9#33)`S5+>r^`{XC6
zwgzCwT+6qWHO>)b;GQM&D&Rr`;B);5b}HCIldI^HwDIGo=-DFI*hEX_<nw;9d}&v<
zv at i1BOo?BtaQ~ecSy5K<@M_?EzM)>kJks%KzNTyJfyiDj8}fsu-uY105?L+O`fbMg
zn|{Za3U9gxA7&Y1oD&JpEO_4n;<_-lM6wt+7n=BJTo&KBxC7^u?pXZu_ktuXDmRzY
z>KS}vScgE;{(YGA{Po6sXRVhmE)4t|uQVFAmEk$_M*;|Dbo&KC?M~z at j=G_ at Y4<i=
zq-C;z?VW<^8DCJwH3Ry7ty~mE%l7Wueojzt{uo%etNJV2uN#MHne_SX=LI#sC6saX
z>obiOt)PArI1%3Y8v8l;22<Y{8W<U1%)S@(%A6XP)UnGDbVI1Jf2Qers%TgLaN4c`
zesg4p-7B^?$R^ASazv;q+B9AJigsP;yt`|_eLNy>oZT-r=(;dZ*7Ep2=+imKsVC8n
zZI$n46{d91l~^0dwyLw1)~}KTwYFsi-CL0r)H@?f`tkmvX*$h7aj9lRS?c!;|J>hm
z*CL1I at XVAx`oJnlPQ0 at xJKuR#l^?cjc)8!T;nN}c!#}3D=yIGdS=F2q>}=KMJ8x&?
zuL=q3U7EEreR0NGBbBRlX at 1Vi_j`4ChVyD#e&hw|GHgpU1IJ1=$<k8)ANjwH%^m(V
zjJJpT{yym=nt|nbe`u+*_4|^|+GAqBXQYp5I;Y<YdyL=gmCL`eJa at QDlPvEIt2RC-
zZsNZvYLZE}xq{N7vZVIY$n`ko!~SNhb<I at d8Pz(|G2OZg;EyPi=D(cPR34O0(>rsL
z_1km4JD4(ucD($agXCmMrH;`*h2_8>m_yZ3O+!_}_ar}w;!{s(k^=O}>uE>WF-IYA
zP*Hvj)HJ^cYh+UrODnHqX~T}4DJJ)mdofSaJi$#x9B^nn%dsn%S7rxZ0tRXKSKvsY
zPibUv<)O>4R;u_$O%Ar1m>1N1<DDEnxIpc4!7F?{C&%8AypgqElUZJl at te;J;s8_P
zEP|}DpRHaiwOpqSaa}jo!xp6#_1<`jzR5}wX)D_zFdMAZg1R7ycEmqLpXjRF5w)VX
z at R@C$g>$_&LJv4eVi|7DqCRdcf}Q`yGgIl!Jd5x=CtcWXky~qhC7oC2Wy1fL-D#Vb
z)p(HjaS{qqJ{N59hQ=zc>sEoLCs{YU2>Edm8^H-+dlj5d<enR&_tbGuj^5LUdoDCq
zv9~uCIaSE{i`-01&fje#p9ZKxZ&)HwkI%yP(%qz;>&?VUE2#L!s%NJC$z6BO^Lwfb
zcuN!WZ0HZ9JkTR#*sA6IapF$fig&0q>O15UPM at r6$=nfz=j$SC3r*s*N$UciZ>-wZ
zN}q_$7}^CtxBLCjZAah#Q9$NB!`79=zk3fc{ln3)UtTBm0^89SC_}|FQ~#Xv{9`D?
z$;p$b8kEC`a*+3H$osKP#x?_6DYofydz_q<rxD!NLB*F<UV1}pP!U<{<0Zm|-mS#{
z(pWJ!6Xj73y@>J{nELpi@@x&rx>vS!<-PLfyqPl1LYX)L(?)<5l$Q|<7=zC_mnx=&
z#3#o`-?^pd4L6n%zne$zF|DYrvCN|j^>GCCfqG!-Lp}LHeZ+Oi(WVX0dUOq at V*Q!J
zb<uvlC*+bh4UpaT2NjIsKGp=hH*#$ra*f2b59-#{p>GT~Vr?RRmD_r}BcFN4?*IM{
zuBqV}3fISZ;n{V#2Jd&?|Hh9-;sP$GN~j&A&(Q0+Cx7>SVcH*DJU5@{{vKVo5x3uH
zMEROY|BA~VRABBF+1ljIaT!72stGD0GO4(7@*1o^XwPxF$YC!X=KuZe+vqEC8Pb9T
zg{-9ov0#sFgMG2g-KT(KTONn}m=@RXvtF3mi8?r at g|1jZ`Zd$f(T;Ixqzu at mSgT0i
zW%@GuS6s^IaT6&U{)5MFPI_ZfT(_`?lVN)mc3M0a$Clz4;`aTOtTgHncwY~*ny3c8
zRHNlfFJ`!&!`k_^wvhFXrj}hq?@n<b_Q<uhePqUiG4MLZz<=t0)em&B|E~XO{-Xco
zFgZrOMD at 1{JnF3V1N*eWTT^QaqO+>?>s1SX6^sqOEBjYS_<NxX^HSEpzcWXkI9J^%
zM*qscLfzavf2v9Eafa~m`O*VLemyU!I~_!)^U~0d&~+ at yzjl>>A66&TKm0*Uh1)*^
z9~SgI-miF8fcshO#Q#nA+`DL?WbHQilcu`M2fdT|)<3wS;Dz^A&8^`^PpkG_?{nJ3
z=#i>P#{aeazgh)u{oGoIc(Uf1IS;-^O1_7kL$J}vZ!4q!Iaf_LGdk{nyeseI1l`$_
zEF*d6nUksc>wRVpfot+=cN)>Ng}PqZ|N0%->@SFa?ZeG%ss9zRORk at pOZ4N>GH~VY
zGLSr&(6imTZRZu#G4f0xZ^x#d0)jJwZFF_uT<`#VZQBcuwBIqeYodR^8gKx-#dd5<
zjep=+Hm{y=TaV1MsDur6g5}u4 at FVHEH>4&)F8x at bx?V=@aQ+0mQa$fAb06``jmZ|K
z{+=s5e?bX<ie&kDO)cyYTdXO>2ba~yKO~;?0`Ywa1#Px}VI9ih$nNK&Fqh)^{~_$#
z<C?1b`12AfdmJfR$uh+;@$!_LWMpOa%zTu_LKH$d;dmfTL9>fiPi8UhaMZEEfHB5k
zjByi?o2ZB=pe3`%8=$Zp8;E2|g=11)>i7Ph;jQ}pet(?TIXgS&d%l;?_xt@^-k;A$
z=nC7YBH|A-$wkt+9sD4JqjThQnWMAD0|(LLCI=rKNbr}<6?FX2>LvSoOYJegeeISC
zz4r>dAO2;c;6*&+JFpLNuso0({A^5Eau`3)n&FhSK<BO;)a_6%(2Y@^XRgWbhmY+_
z>o9C^!1(#U{Hw~p>x@=Y0~?ze^phpnkACP;UPkQ2UDAmYWrA_2M<>=VyF_<MV?21@
zt``GaKMTH}Bxclf60g8p=DXk|^zDPm?Bg<nU_aT*pkv%*9za}isXOd>#Qw*=<iGG&
z<c@<)FhH>1tY+c~m7pF)s7E<$b1_E5zJcz4J#eOlOl(FU#4ZxC4>H%wr4#4;3%{2#
zx}rJ_cz(;z1a~UvHy at M^JXY$+ZH8||`7iuUL*;pdA$GSGzq1|R#9mGdo-`NISBCzx
z<g=at;77v<)&Uq#60bIv=)A$>_maIpa0Hmm5 at 0q7hH;TFWZ~^WT^}9V0W5P8Yy<|e
z67et%4(z4V at s3*z4zmpSV&(8`rcC4^m6kcjdseb~E=uX8z_^w^Y_BAC4yuIi0|q3?
zy<If0S_!=Ld$K0z;GV+%1H3XYtBb5jD9?$MN3~m*x at H3(l17ILc!(=^16ahVj301S
zmkaD0s$uL^mS>^gMeI0W#E=u!lVIpIh{J;UU at Eul>5qTyBVg)~17L*q<4{NFq)E&M
zqHl1NH(Y{eNLkNgo+uv8M+}?9`^dq$dnRJY!3MGWHRMz!b{*t2*+_DK2m}7-!Spo+
zd at YF|9jyp|))n at aMvk1yyO`L~kLv~w at F*9PiG3RJ#%l>Cd at xGzmc!;bZ}z=<5FcCE
zNUQP9|1?DrTj%6tU~?UK;lK3d4g=!z>>%R;9Bmv6b{gwWK>+a0r2HrEm5I3B(_}r6
zpJX^vmmHGy at DBnvsOc?Ua-g?iNkh-!B?o&BGPcxkbFDPat!7DKZ>cnH>|V$_)jPk#
z`q5x6M;x$lNypUzuT-<1xp%~zJ7)^|w2sM(jBfx}r~wbvW{pA|$I>~D+{q`f?}NTZ
zc#9*}QLb{}cSl<#v=i$qB3sT)vo`bL<Lh+>KAa)Yiz@$VkZJ@!pwH?_4%Lghh#v)6
zLwc{1T+WEe<BN4^)s$VG6{Z&_tduVKC$UQ>xnHq{AqMzL=+(!;9`hs}&vL^)^BQd+
zwi(t3>~oz(f*1Wu?r1{t;5*IWyuJ2OXHCxmC*)4Y-FudLh8i at jMJ%c}Y-!LPH>2!5
zf=gx<d{2tFHfs`WZHKXToRwsle<V4IP_K*B_GNjdKV*o<?ZEE8x|ubp^D}CcqipC{
zCs1<JTv9HbsGQ9zp`M^wh$ZFZzRMg-J%evK4;~WiueVC%z@>Ftn+5)$i-Q)Mx&-#o
zPIHb_GxLC;(h}vSv)&T;1GkW|%wSTT#CVf+qkcC3EzHSstCU at JGTE`FnU6>{UgfAO
zauwTZ_ at Fal<KRDLu8}I;>tTneeK6k=Lj=G|q8&A^uqom>-^fXbTSj74e}s5*AIbEd
z9}N at i`ie=ZjXkoO at j7K4>na&ng>nY?TH>?J#3(EFgbgY3!f*M4BNoJQxc<BAE<&Hk
z(Sv-uk|Tr11%bq`05L~Xi4Aig5AqU&+5h@$a>hFREzygkpRYRlnG=mXko(OR*C^Xr
zM;)(ka80+F_^{(hH6q8_2fMkWZKyBC_m>*W=fJrbIGcgv&}4@>9d9v+yRlYiL0`Yv
zQttQFm-ziH`VH$BX)~2tKa>BK8TqiiDwuxrwe>&fH(-ZRwl#^^kD9=z$cng`mYuM#
zNF8&{9EyFcYBKcZGv+($6ZsVB!=;D`;IA7z0vbLXX8``F%t1dx6P%74W4Ib?5_I?R
z3>Kl^j4>hWU;Rwj!V%X;81m{xTBuAP@@B?)2f1(A3BB6_<RTg+NgW>LE*l=@x$hPi
zxuh)agm=gM!q`^BPri`TfPRj)RZ5jJbEHbIOsU45*qrWiwWJNUa&gu`4F95KJ?#HU
zxX)uSF)Cmhp0W<FiNJrWKyPyBm*lVkSDKRrm7sC!-{VA_j+1&1<nve6&t%qir8!Da
zX)Hvalq(Zhw*^N at dAyo^%bTjmJvX_gjDHb+b+9kP_hU40ZcLlm8uCp|nP41rL>jDP
z5AUO}(*duQLgqgB3SSmtIbt4O#TZB=+wlB$o_^o*=J>wSDTg9b>vK`A5NieElHKJI
zACyQ}YZAB0x)c45^~Jeh3WK+}eutfXssv+#`dH6k?x+R(K}URGD-upsLHBmg{|3G_
zz#61le{{@A<h%Ya=4gZU$2Adyt%5-CMEeKH|L*K<m@|Cn!W$8jbp4<Sak{YIGJE7K
zNxRpL^Ge{Im1p!sPu;zhiAMn6N|$I;?XoD-l;IfIal#Pq%ODscxGAhn&zbYcdPbGl
zX1m6a@%2JH2)<tMs=w|=x~*8U9dSs*Ek)d=I0IiI*=Kdfc>c=pTjYKp{Bks}rfr4(
zv2%l at ib`oMboe)z^?ak{g41y_ZVVqnumjP8CkYM#yvOdjh9zm1^{!FY(SrAxd5icM
zpvg_<JbP;B7vN`t-I;xil6P*g{KT#uY!JL}Zp0d^vq}9+ZtP-maMelVWbMZq=zec4
ztq<pS-pu2sGW-qJ4p}s4`f=>}V;Br(9q9}BRdQ}|r$M*pVI6)<BCoe%pTJykUKL5~
z1m7BO-fN#CVjzV7tAEM${Ki<qhsxsULbntLhK8MLxkG$uNIRH0O>kSaR(H&IfACF*
zev^~7H`fUkSy%2bXc|Blh&Of}G0Q<qV(_b524VlU{zw}p1Y;e}Lf-L}>|ACH$}k2M
zSeK=QFC+6_l8v>b0&DOtrY~zqyVwcVQJ{CRG;Stn&a2|ySm7H-fL&OLXJ8{NmCO2A
zWm6DS8#Mb4?4sbqu-<rs4!wut=1rl_bu9x;+^GLyZW{3``FRv<`IYef@&I4`cH{-{
zYCNpF&?UY;hT%hkke>s3a%+<3!ePWHA^Z#S7VY*dL!4V8EBHERGx at R$B!>qF`QWDn
z`$?NTE07CD<|W6vc*2I59kZjQ%7rQ1dc at 6J58BybGB_Q_e^-cqjjdVm3G%;cNK8KB
zw?_7l%SXAYCd4nH^SDxTg;S?33Uh|>PjcYx5<{>S{6g&PWW6S~cF^e$pr!5T_foRn
zy$&BBlr3kgNqGZyCbr6xmeuY`vPU_}!W_-So*=X5<GnKHT^REKSGlbMIX1cQ`}zxy
z<e=}w5a`P`2>MC6KhGH1uLjYEy&N&=GsnLDLYny#&><J=E7u*EH%~d_uBk3nYcAd5
z_R&)g0snDX at Sb-i@E{GqgLv>iub*v66Gek}EW-87k!$^q4$a-k$Vm?Wxah8BR8OZL
zh4?nu|0gsVBHQXi*>d_sWZR)!MZ_Hy>K`nr{kh63HFdHv);TOF&AbLW?2;W%-r|a#
zq5nT~tb#6Zey2ALx^*Sdt@|fm_<;BrnWF{UfGL6<ot;j6_vl=UQe=pH2X+I8zPxHD
z(E-NFbiFmSuD6yh5yCFC-3zwe&5L&Jv);~+3=xLR392u_cmzjI6NW5+KOSf>EOHuX
zXZo;|?D51FL*^bMXI!$pIufVx9Cal_?Q|w1)9DQH`&(Q{c&lH^2%TU(CbHgU>zf1@
z8+pO at GsafeY5*=Kwcf(*?y!<?Af94?F}+ldZwnFQ4lyo|A->s!JPCZwjKJ->*I0iP
zyhYY5%`OhXvegPhypx%IA2C^*a|Qh!$Ybd&L>|j`CsdKWe>jQ?#2hq`xlEnyTBK<J
zKg0NA0+WB2V5q4ow0jbGi%$s8LX(*3h}}qHS`J+UzW#U2x9BfJFkc8(%uIN2V5Hw1
zi1IpvSXwcmUo5WbNdUd>SiHTbNU?Eknk({P!G~ao1Nqpf#XNd{P(kRJzYaMF7lH4&
zLe at yq4y@%24?8rG9c{gab#nhhYYy-oKOrvFgkW|$Fg07ycD&<Qa~`zOc_!Mp2)<je
zv${7UuJs1!iSls%59UoBbUk%tB(~=vBa!QG4WuI8ZPocC|Ejij+bQYpX=LwTxTFv{
z1^)1_x|(h~v7^J`SLg5xf*(-agw<qi<Tk+{?mb|^c4MyplgjH_guQ(`__#2v^M3Ra
zMZ|AA$$m;?LdP0R_=#2q_xRE*Tb8&Q?~TVe?6pd{dW#I}jc}5ziNviK$31MTf3VK}
zy#2vCOZJ$D*IL_t;+tm5HJ3ro@)y^Wbtf^zJ=t6U-!4*CF*lv`Bieey8bxSG5&k%M
zI9n8C1fg_b0^$%%S$~ht+7b7mWfdKVXTHK3mS?)itC_o^^%~;JeU0%7sQtifMcWa(
z=<yGj at moQjCvx258?bMragqrRP+VYAB2UY%Wp$?Af6oUw=$^z07lyp_FKaw>Dq#eZ
z%Sq`#`NDv9FW>+Z8603E$#;7(*;oMnuYvG?Sc9Um_B`fU%j8JYnNBl0iUnkS1E0hD
za!X4wliTyVnFjZ$;nC2)l#huuuU+yf{Mdd*ec~R*)5 at BOtj#7oj&iKtb*FjNy*-=%
ztFaJ%x<#OeX0l%rd5r9j_xUR9%lO_f;j8YA6=GoKNj_ufS;$B16UiaM*IRdz`3HHo
zM-gdi5gctPo6OL--IZ-1^VWd@=l_axt~nk#%F4H<g051Gdh%VugCM7372neIr~UVb
zO%LeeVVXeRR<i%5Ag1^t#M4^D%!f+PMc}jE_m4Kq{gc1hgX{M+uTG00J|$%(@X`2k
zXLj|@o!Q7?IjO8Dd^>akz$rSgUpE$@zkzWi`U1=IME*y7>)c1>S4Y`rQTA^KalHfc
zZGBk;_MJGQ1K61jK2cqU9B8j#%u#lcbtn9YrP!l at C4v7z4Eaw~dG9~uZj$of6j$Aj
z_bwjlNBtRH#^7G$dE85U7@$`M?h1JP-?1NS=8!qd!=4=Pg*a&!k`OoTpug at +y6vpH
z68OD*Ycuy#d{1SYE7d$tp5@}%1my<S1*zsa at _Q!NNZCwTz#TOw^qq(8o?yRV!>52N
z*gk5DZG+$~Sq1kuqT|_gSuo^%cBmgZXxf2q(o<Bl{uAU22;U)gV4#2nJSPmuH#Z}9
zF{vZ)MEek*_at=6{W7joJMZ#=- at hqha5(V04t96sSwoHnf`>Xz{0 at Ml`WU`vEgTiW
z6E>HQVC8_Dnjek&p632!-O2rttR=Q-`0c^0B~K#G_H!~lcQ>i$mW_fTTdUx$!TsDg
z=J(V1-GtwDTn+Pk1%BVc?;5=S4e6%_KWj6C<+{!~{0M#zSgz8i?&J4><@)kVR~6&y
zaFXEnNZp{fK11 at 9+s|)2`IMH?0~0KB1bpA12R6eNgMPRH|E~qWbp--DXEPpf_|=hq
zLH{)RDQ?%uJe}H!zDM>AbTrw5Kw!8uvVOrP&>?trb^?Pv%NAS$kHg>-!6(HJ&4SMe
z=?4{Zc at X{DXp^$+N5uL3&yszZ?@Wvi_^w)42ZpSD)OYo)@~M2OvR}vl)?arnZlK6Z
zK2YElZL42GW9^?Bw8~V|gB%C*(0|OjohQ-Ss+oRfc%y+Qx!{o%5m!&6|BQ^z@%_Pl
zxIT*VN=}|-^tDxPBR)l4`@IK;`r#u};D6hcNmX5(K}BEerWE at 1RF8f;c#AvcB06q6
ze22DgrVF;MqT9C#XPsl(D`$LV<mL>- at +c;LNkNDou|$ggyd&GYuo3hz*lYl9as%=k
z>)CaKh3s1BUXurP>?Hq^Z<7Y|*}Iv2D%zycES#1?=8J1J`zv7RGMVdQg5x87tcb88
zrxD>9 at 69*ldM*I(P4e`XvCE_lb4mr<FppEA-`=&n%A_UZL-)Zi2k+m^WAtc<=}CAY
zU`ln2oIS+QNekh5+NDfCf`5I)=Vvd*kNBa6yjF at jEBs5^pj*K{uXIOz1j1u_%5QP8
zH=-W?Rm`3ZEWF^2-}0$6U>a+!&CDFTOYpVu at lo+&58UytSh`lEgMX9(`^qfA8yE}3
zNuE}ZSg^Y%)Pt8rK2Om5f_ek at Jc9uYnU`yZPv at pxk#Za2!`wO(DM#5#;#)?_wf^Xu
zj@&&tpv^m&cUkxRm28JeTQKHcVjBDIX#YbOfg8s&kaev)`_qAo)EJ8}W+w=L2Y$K*
z&(4;nu{7=}*pKamCh85+Q>?w1uTR6 at GK?-5CO$%CYa)ap^S?5elRDx4$8-U`^4|S<
z`yF+QloLFs)yOHrH{Svs5Z^WA0XT3c0kK&I_G2wEdNH#5&t4L>IhoYMbq)_0S~CZ7
zL{I+-k2CN$Q{elcz41TLwd3b-5eH at Ne&{gcK!>%U$AWD_(BdjmpSgD)rbozcH0Gtv
z8pf9SA3Byp)|8FW;D1NP!(1la?Y38N2YbPK**AZl%NW<$WM81#T1&{<b0BZzy&Hrk
zrym^YyFyZD#FH*HWs!Otiyz=Xt+&`Qpkb+bje82}g8X==z++<F=q2mN-+XTt{7Yl|
zle3?doUxR^e`+1_E<&aRtxp*)B5^Y2Pbw=BJO+DyJNT($>u%I>4#8c6e>lLOX4!-M
z+Xr!d80Q3>>ye*2p5)+_UUDv at 24T1Q2V|ftz<6RkC%zltQ{p|RH|7Duq~1X=NfoSo
zN`-TA=>gnRvE^lla87dMNCE!2-Mia&!LqZa8|bsIA%`}MR|eM*nY7gaoRXY<i1Djx
zk|`&aFn(gXVdBG~GZ9~^&DMBV_&)ueZ<5n-vX>M2-Il;@gpXLitOs-pOgHZ9iGLrl
z$)Fzs at vZlen@MwW4gbK&SaBE0xkzG5AV%k1&bdzb#Oq}wkM&R+-vxMmkyRA_7S`e~
z3D3YXP#M)iU}_n at fnbRxTJvXEPqI7%NiGhQ9S)sY%Wx6&JWJu%1YOI^h1{s~*Vx2&
zXhTyWWYaXnM1j7U#PLA<raH3{bec$X7C%+pldTg&She@<W(UC&!cT<w3lZNhT0?v+
z!kuM0<XwZV{Pt}3c*Gq&Zds1};JE_iQc^_ZO&pPP at jQG|G}TMiL@;wxO~zZILTr-w
z;W=1u0^BM|uKNkF&5(He at Y(63&o1BF(Z9R`b_(d%pGhbD72)4xF@#4WwkAg`4Acj_
zA8a*0BW~bmQYLi50ni0Ed*;w#f^E0Bt~AqrJvVvz4fS{Ca`5H;le3!%A4dFo;J+rz
z7i=WuFh0X?6S<P~$*hS)$L*ZN^hv`*eNuD3PmVm=C-s&;^@)dj{Oy at e$3ce)$bXe#
z-A&5<2sw>l2Y8$Cx1<hp(;R(6bd==(mtF^bJS!^)|5fSvtg*;cJ3d-`tku8|<3wMq
zC3Yr~tI=4Ad{i}Vam4025Mx|FVU;n0jzT=~sCzai^zl4*#0w>JpOZ*vTh?SO7+)pb
zJ-!xwv>Mo`67i*01M*X>WantcPRp^#AaAYYx5$#oS_3^$EU at CUJdv*gy!Wpo`GN{1
zDy*m9QD-4{K}J0DB*%nt*>04Af2KIy59SR=hU+-iQTT?|nc|&a6&qWtah`|Yz#_tr
zuo-#Jky{gfks<%NZq9=Y at DY47p4BK3|3*1h$5S^;p*tz=&#bxV at Yj0a11M1<XHcwl
zhD7 at yKF+u_#K1{~Uic`+ at -cHMd|VCg at au4oA9+?e>`M9q`I9TVhWrnGFPH5h at v}@y
zR=aD)VA>7?d at Hl8Zz9)P3Ussq)9RZPe7`0c=w+o_y8oeH4r|h|7F2adS!euxEFa)4
zr&`aDxHtD=_B^(niKDbn5N0KLZ6He#+mX3QauD at 8gz^w`S{vt5CzwO{0NA~^$q+l*
z`V18~LqMe&qX>U<v35^1rJ(84PIS58tmOz~G%41OeDD}Lj+`UteBWGz+&t9+f9&B6
zXnPCM{X$-E03VksD;JD~@0Y at Qg?|Ws|Gy;nP at mr72G=1*jve>4%(q5SX^6v}VfCV_
z=>qJVt%OgzNM!a_@;%Dn5iw9DsqM`^9Z#2&vVa+b{LR=@K1a@>K-e})Ts4{&=+ds5
zQfTbO&Q*`biNgK`y>#Si_#Vs5hg@}wvRif^%7yN9H2hD&2UtTGeK_=k4*A`o*A@^P
z5 at dFEGS-x_bOG8=>?nv^1|MPQui08ni(9O91J+dNxh=K_bPHc&mDLM&5c1A$&ku*A
z5eKFjd`&XOovbA{IyZNz$yzaOGtup8{xL0munzi>rPAZhM3+;<hJNV#*~YccgqkVD
z2dv{{{$J$TtPwr*`{qyizk=t6Zf2nxxBv>VhP5Ov5Xo603>g<=&U4Se8U?=DvpqRR
zQj4+p>~H)3Rnq_6r2j{e{<pleL=OJC-zs9xx5 at fHpa<r_D5;%MNvW7NzJ#^pbHSI@
z|20YJ+%O;5Srk~O{zv3Ja~1q{y%75*80UGgSG+T_mmTJOA=9y?zz&Q>%;Qw at yfIjk
zW(G!rc`o?=bDx`68q=LS&<@@Ahe5-P&8c-iu?fPChL|$j>S=>>E8-L$hK=+HM?P2%
zeQ2eG at C!Qd4!MM1*mgj0iIR8S1-=wG<%>zOBEkOFWYjxaP*^>hy?-#5n*=%~zRnD7
z6CJR*LTqcTA+$}tLB<#{6%d=%2EQome>%{(;vS7-e<Wi~@=!f8kDB%OXq#PZ`9rFi
zk;YGg&HH}eF}!m1U-%%zn+G4%NXBk#i8&g)^WncdGr}u at cREh=f#9V>**SxH)Vstz
z#VmP*22rozHZs5IHw5$PFwEzC*HnhCV=09>hs^b+{5{d6ZV%?W_r#@ZNlcTCSAfg<
zvA+m03F;A(ph1)`$<zS*#>x+D;N+XKIQbVp^l#vXKhS%P?KGF8&WI_wv4z9%`E6G0
zF;cchwwJx}UZ0Ju3pExF=8BLCvOe?idq$G);xOjMD!PQM at xK7)j+{!$;l#_7|NjuL
zWXqD at Zz{abLDsXZ4wO9Sr3_MvRy*Ppjf?6%{oix>1D|x2B93jR-|g9?J>ePP*DR~6
z0uGvMXuES4;Q=Eb=jUZ8Z$nqTJepne(6h)hOP&ppF at Cl1-vPbFnX4RpBbg7?BnHie
zn7G|5*<Uo=MgEY_pPPhuF~~=QTr}f-l<4Og^mF at 2Kfg#r_e{p!<?w?sC*{B<QjNGw
zpkYE={1(~>-S_2w=b8(Uwe%ABTRChYe_BiaLSIG&8N1W<Sf>xu1rOHgdomb!xjl$S
zb_aZxo4E|%Y?Ls*|BxSU7!j8Nbd1;;5BqtIe76)am!*GM!^wVrki-ogPyA0;N_WqQ
z#d$U2x|K}RkZ)OJh;<g?ehS~Rwbn|iy&HVzLbkfmT1I$wGOmC97W}&Kt-slWb}@8$
z at Ne4&pGDFxd@~8(tHIv$unvKd8Dxy_7DI!KeAJ%rPGS;g{a at MzOy`4kO_ttoR~BiL
z<2$oHfAl->QEPF_bjTa_n2jxNum?I(ki|1(WlUU)^9>rTwb9h4zj5!+JH@?uhc(s+
z+E7j+x+$Vx{EW~mBPSih{x;Nj7k1zu5$mA<y4WiYxs~ok%#m0kBVym$$H+-4TRmch
zRPj6OOCk}QgKuj-<eqL$#8~e}+gsh+jg67OtrEXa!5t&~pRGHIJWKQ|j`s$0+3}#c
zhkX4;XrK%j)+>CQF^|L*A#(bk=;1y1b1x<ByVo{OHKFxM@#|_y>|XE at D$H at TiK!<O
zdt_T9Vpf3GZ~VyCU~R^Ci5&em-+put4IJ*<Qo^iX%aJn~7}I-v$|JnPMY4AtBYW3n
z=#R7L+DH47_;fVhg<dZYdc9H;Bg<}1oSROtzOW@`z#a>pP;i!!*Y%K>A(wA?nred&
zaUbHpL<9d7WiBG)K<))skKF5G=2|&-mqT9=sja{4-fn4e-94DcZbTaoVXoaB?BOKV
zUq&1qhb*rmviv<A!aY5M8G6yb%CzjP`l875mKNxJbkGmyV|{<LZ&nTefVHt}c0qC!
z at _hG5`$lP(eASCMyJKpXeA%m(_Dv-8^&LCU|J<oF1HoP?{^!0kqmOL<=b8)r&+R&l
zYdiK2<@k%>Hz`g^t3i^1{9Nh4Ic4+obN!9A$SqRg&}AniK?Xn6g*bMw6>MN at an0zI
z5*pZHgcq at TlUNmkKMrfyxv-TiyUhb{9)z(-Cvw^d51LG_A6}bR&M+UkcaQI<xr4kS
z{ignJO2gqR0-at}U^iKh&86XFeZK#j_*atk`TqL5 at z3-K+2J<-+qit-O!SyvUgVo>
z$a93BBXf#iPr%Qm6B~V(7W~RN61!2B1UaNdfLMCq&lx$Klf+yf1s_uj{^V8gF_jFT
zA~%-xAIN at s8unj?=dC6(Hj%e6wwufikKi?S!)7v9e4{Ob`XxX)bX^<E(v4O#{3B#9
z2mk1pUo`e)>lN&KVT}BAiRj!NYtyn8*xuTS{I0nJ`6&^(l?(U>{-(Y$_v>3dQs0V^
z`a;J{_!$<7CkmYa^!*QEN<626AAL~AA#DvyH%fC~HcKKrF4k$wyeXKAb+k}0AAEdZ
z;{5lfR6UQr4si4}_{I0=Qir at ia8KPr$kD5PMa?n3TTVe9!@d#c3_Km<^Zh2bfZ(94
z@$OZ&=LuhpwaFcA59Qv4%)HdPf#3qT$>bSx5d6dM5FKL|nd9e>r!n1jlzV~LVw>v-
zf7rRpXyE<|o{5h+dDM0S{p!tN$BtNRz@?lO1loRJo=c&HoG6=(+k|J`ti!vNv_lSm
z%z=I5o}{cMAA(QAcYY@^PYM1rsESIn?Bx5=dgOL#fF58qbxsz`pK6OH^26LTVw1PV
za}Sfb<oqc|ZcA1~v^AkU!~Dl=dl4hzS<P|Cm){`1>Upc*nh2Ag(4C!;b(nXa=D%mO
zGVN>oEuYBbf=YtN1O5jXfi)3K?1aqlMYNvi>Bbry_&SHoX&q)Tek1t4H4(vij`}y1
z0$UeH at qkka9jwRNLBsaD5O@n;_uW=$WCz^`dH}vowujK*2)+)us}bxJa!QghA>T-d
zqw^8lVKgvdh=V)BK&deH+14xFa=P3z2>6Vk;g;Zb62F({(Gmim$|Fb#6arfKgNZ>|
zytQ2tV at f$m?3IP+pDV$&#ysTk6jRBTwa{^{rS2Rmp_1#tYr=k;PxK*(={wz;)Th4r
z1$?~os7lM)b+zKjZ4tDHo*Aoqsi9XTlhYwg{=B?K#ByR4atdHqu7 at l!SEL)xXr_a<
zWe1adb&zvw1#|vhZ-!XX6~wORnnfWd3HV>cD5biAQ`Vvl4Bud`1U>=$wK?aV8uR;8
zU~hAj2f6tZVplUJAf86mMc~~?Ox*5d%-8oM)sT^YbkoS-vpQiV^irUc;aQNC%lHRK
zEJw%^;QJi%#BZQUhdhC~rK19n<CK)OxwQiE(hH?_7rp0HVaO;S<VIR4+og!e`kwKD
z*EB{0w|fw}m}oZ=KdYt{F?6j<fx(SoV*S)`DlgXFi}wTDY7LQFv0m0d2TAz2XuMO4
zI85Z*O at qJir$RUJ8~Pwo`;)*ha-FRG2{xA31cu>R9Fog6rgfjEaza(tZ-}YdN$D;o
zTIHSb&i{ihssX>NJSJG>q;4G88<}yz8h0_qxK}b{oiAv_+T9CXV+`zI$Q$Rt{gPY*
zh_%%Vo9G4avNtc`+Ok^LCcyPMqCY|`%a1Gzkl!)vble0bj at Z+2<Lhw1uWCkgmvTn5
z=?hNPh3mjTiJ&in93fFo)4_KXv5%1ZJpeiEYJ@=^KUu$ley2(iI&?|!3;a}%<KB~w
z_-2qZt4zNmzhgSlgN*2njIC>+C-Q>6D1fY+D&@Fh&#5Gb0>%dM;V#CUtm>|1HTax7
zR*rMDOwa0hLV^6+?Wj*J^6%!5b`9sxpCSzC{@qxFd@=#uw}Mu6DSHgK4)O3A=5jKb
z{w(T7tZeYlJ=0Q<cds43iM8mz{mg&SWSqK{tmqMYd60+t|7|aa{Ck+eSkoQ-42{$>
z?>8WR*o!_%M!iJC;CkPN&A5cBA~;;={i-^wig1 at K;I`jg{vRe6c at 1I<kb6p$cOSFO
zjd#dK0iQX>4|?xL{QoB$_k_Hz-(*dG!0o~&^O{3eiX994pgXfyCp+x=csB+|l;<KN
zu`$OWhjJmoTVI4P1^TTAF~Fm!pyU{*wvGYg<IZ0o&-k%5dxW}7#CIk!6{)~!ph1SV
zDnNUUew}}%L+l}lkq4a3YGa-v^v26rNBsKZXIls@<Gy6h3qr|)D52!l|KYeM4C00g
zCAHTO%Y27-CDOfvj)!%Ky at hAVJ;>}#tPckbuhDqt-R$VN+?RUOmy`><LJ!*77894W
zu|Ivbg&L-3I-N(3p3jG8At%h+91V$a<XwETgYZo^-$omCPHjTT?4MEoQ1WOhfLGJ9
z4j2o`o*oi6J~*hMVO?7Cw_B4X9j1t at LgM2=DLQ(Cry`zooAD6%1LS^&Eo#74Yf>gx
z5T6o^Y_=kN1NH7xX6Owtx at E$E{qOH`XCs~|=3+GV=VntXD+A|0y2r3ek+=Ewnh58x
zwZJjZaY>)!-T%U`?WfjvSo-C<4h!;ilo``8SLAdZ&iiq$!MP5xRwVl);s1+sZ5(79
za;~|By at 6HZrW5T)1lVgv#KrV!D6olvdot}-mEgU4d(4#ei?^YTAw9CyX+P?`8d-W1
zvS>1~TYkoKGOEzD$NCQ%dPy0N72?!Ne5K}C)OoB*YC^()o!aB`fs5=ia%r7$Axr1E
zO|+ki7cJb8&8alSaJ-OjCQ_1Y{>rnxFW3?1QI^mDUZmTRZCOq$lYGT#1G&L%heF}c
zQ0kRemcH|fXkoCNE>(p4&*P+mUpZ;)7u1^zscege(~cY|ZQzBnPpY)ao0U65mycG*
za#BsPWogDV*1nxO=sn^s-{N||;3ZtgnM;$>=pwNa_T<{$7~C(5c+z}OvGKQ)pH&DY
zb47(J#l`{YXQe{Pk~4)G8ouI at DexmCack08-%*PC!k~bdF!*pkDN&m9BAy(~{nxAl
zcq?lbO4Pyt&B-ezpnKR{J9-hjTH<*V_R?B99B~mBQ`;psD7mDE${5KFTtT-u89RDR
z>B)=5G0k~XGi2e&9gxe}!^HQxjQCzPTWe)^w at +`3mYgk^zqQsc+GHu1(;1(9bZdLT
zAja(`;(tYNdjhtJQ&=O1lA8o|$&byOa^s(!c2<S<@kO%|HaPd1`moO}V(nFrYSb at G
z2 at 3dX${sGTl6+I!o>``pq@}25kmv8n2VVZ2TDhE+r3_-FsrSoDdE+$v#S&KC+7E|5
z^h!wx_w~5CabXhtR0n<fPgjbLHZRqr0=J>{$_ZSpf34SmYq?j-z<w{eED3UTB9$Wy
z347C)=c_jpyu at A5NQQWGVu-rK-GKN)OM{;=M|f_7KXRZo3i$#<sZW!yC_;x<1tV`Z
zSx-zn=Vho%!OVEeH23UeXT%$x<w5LOi-31o#!`|T$I at CCy|k9Cf!uWS)x2JM@%G-h
zxX^9vg_T!#dDW3}Y;m;G`74sw136TRojN*tow``Fx;|d!ZesrL7(g8Ss;-Y6xy at mV
zjG&+&hfOWk-C&lzI^4VW)!d%)#fsjdk$3TIVhCbc<2;zcPIA;$QYQ-dI+fh($$LrB
z3w;eKPj-bL;=ok#7&{ztz^_K^!8n%Ocgxy-lTvh+qY<55Ar~nkkbmV<x#S8JF+v+<
znjId<9Sz^<qojY<Javo9eG&OFQUC5mtZM85L7x9h9vzw9ajo+sx}?)eBi;<K*0mEn
zP3v9WH}!N}(Jp#^mU at 4+PCb@Yspjv{V{A*baT9yom7t>nvmUm<(b~9iv#9o~*SylN
z<}6IVTHuwwXAE1u>@ict9_ZXVtlYUH?Q5s1x_k=fU at xyS^(>odYQ!^Hh+(<f<~cI9
zS=xeq)6^Z6WNhESx9U;;2 at n4cE8@TfhzD%vC0d^}Q>Cb1k}XQz(S!VC*Xe6w-=QeX
zr4Y~0 at J<G+y+3~J*N82Amc*Z9^veH}=(-55_l{M$Bm+F^FWB!wfB6!zgGxDaI^Vqj
z*vvG)s;+jcd at J&nF!II;<VtF1d|j?1FRoS7Hx%N8$O{3RhTbFn=I)yu4O#bJh-H<y
z^?Uy~k0|Kip=<7917n^F|KwC#0>;0eEu-U{km88+IadLhANwyi at 9+8}F~q6E`X1VW
ze3ldb4P3~+?n*jeS~XPkuLar{XQ!*K5IKOShkdvMSiaD~Cp`nfGhxq14kgf|tcQ+s
z{z|gFaL(yIRy%NM8a(q)NeOA|;HylXU-HvknCjTmR#P`CsmY8zyA+tpd at 9hp;@uU%
z+(sK=pZ9BYO*I!O!b6R&TZg$*Q at ktQ6VS2TZk|4vXVi0#`!xUySjNt<UFCLq|FL6&
zxT;HO{b{uJIQ$lqKXXfUfu0e(pT=AWey11mQ^{$Z;V)AnX+Vq!wMf^UfP5*+8HmUB
z^t)8G?PtO>)f~q at Q!UF!T#)Oq-~U~mkk2@@fvHm}>V#anijCU`?WxI=IjOcnZ8A%T
z{4;rYrdknNaH;>>Qt%|sIzi{TqN&-un&3BD^`t)VWi4T+kUD|~(|{J+gt~7L*G(Ol
zx)<?y_aTpt?%TI<_#j4lXh9QGHxdJ*T85Y<uuG8m(Dr2HXuWBp{DtrST)<%3{_txw
zN+BN^c%{Y?(;4^?reS?k4Yjj%E(R*ap3RZ7`l&Q?5}wiH83UflWmn=q#n5}tkpI%n
zjS at HW!L8YjXH80T9iGj1Jj=>wtMP2c$bX2di~sUGR-amC0+v!e>{{;8Bh~?1ch|3R
zSV(A}&lX?u$O6qGR%Yh`OGt37<q40~-k1Cutrme^D9PDm+}od6IvVmhay at Ynb1ME-
z<OM9&*j;pNEl<DplYzrtsiI?l$jx~g`xqUSy67-3ZqcqxuSMCsg27p{oNX0?B7a?E
zrd8>xC1r~dLvd(*|Bu>4tfhDO5#EjOzGYYP&Xanyreds11chYWpDy5gl6nojN1j!s
zi;6kO;hVV-v0NiytNg$c(x13%Cr at oeT<;ZQ`xCW^YGsl^b#r-ff0j0JdI7;7t+>fP
zi0 at 5Z-lUGVDqR0-E>kF{eF3 at fU7WW+Ts}X-Sb}n#@0G(=S$X{jw2Am;P398#bHuD*
zsnaGJkOQicl+W08wp$i!Zru){Z;lPYT$J%6lB4;aLmvINw26WX)>OsDxBmdv>L}ub
zB2Vc<eWyg<0pG{;okC<-E;koylw+XFBk|?!Rekj<#`l%l)7>ZC&~Y=ZTB)+WLZE9d
zB4xuKt at D`d{hePU^bmK at AIFUKs`Tb!P7LPeTgFPXt5r}z`fu8C(iTnDZ6;<Zsk18G
zSnQf<E*a at _4exxDh+Sg|5$9_VM+arSW==voZ at OjsRJ!K0>Pi2hPsX!rNBa7_<q0>^
zAFnh0!B#6L&SuvMbtey5S at _=WKYwqePuU}VI{T46UCfl>f<B#nuTQ6BSVGXR(NrM%
z^~bSg$U8&&^&t1 at As*jz(c#(a9khV{`3LAMn^!hCk9&*cFu1vj+(VybxlgsVu+K7m
zR*pU^MW4N=QQltVv5L^NS;@Ttdi#vfTk8>p(oN!^HMamw^4K!Ir`1_?b89j0{CB|B
zt(ZtKwwbSpq7hFZAMphG`jfSZ>=?)op8=yAiSyg|-vhBkG$P#^xwp)(QQXj$Wp(B?
zBcC6kkwqhI=>v^8+H!<j^_R9h!L+4#@Oduu;UjH%0&U50pM)3(Z<((!^GAjGlg-SZ
zvNok-{;+kZ!z+)p$J;UXZvWK8-46LvdnPgM at f1bVq&<^H+7pE`ekSAR)`2!ZrH-RY
z)XK!!g!V}pf+hALUY2(m){D`eN`Kw$1Heq~8z`azdf{W`yq{CU`0O197EGt!1zxwU
z*8o~CVMqDvXyh%X63i9TqpW_4O$qCrPO)@d;}FXL>tk!CxkxK#=^%GveRqQ{R=6&R
zi<tP~?;j^})@90mLlbQ*=hVCCsJ!Z#-AejK_!P^$@TugtpOm9S>`f(|PVW22(4Mn1
zbkuRnyci{i$obFlr?1v^D{;@w0$JU!)NyZ%PCar at P;4#<&%pnA)%p1EMmTey$aXJm
z=A9MSa#Y4$C_6p;DSYpEHJ3lVdKUSuf!+cBJa~`XR~=BNjlV+PC*L!UlpTZl?f9OL
zPOEX$AqIIh9rvs`Y)y48uG7QQ at Za%j=Dz3DMSFQCJ6^>YY=r&;J_;_nwb2sY_exbs
zU^@KOcah(gZ1Ev+97n6om+r1F>W+1uhkf&VUe=8KF8Flg_w)CEPb0b#>rdVG3ANxc
zcKE)W{e%pd4~`tTkia1xa*&~|mhAq_(sR<d`Z{sGaUbSO6`zfLK<!t_QToNGmDaDg
zDdgJHMzsmoy;F*LrK#Ubp1GJq#%jZ1j9b9|gUofI=hXQMlk(b8uZ)6Ox7V|DuN>;l
z-QMoN{9rxzam^N2UC5?%tCTT%MQCoG=Tvbr+F5OS40~+)44ip2yt}QwWc)R8<4Wnc
zXx(ba3?FTQ%p9}gC91u{-mPTq1+L>C{fX*jIFIiyQU@<@L%7flEGJK;ILoL^bPv<i
zmiWAx{oM3 at r8{MDbvl(^R_xPwG*5iVT%ajH?hyU%h+g>oz;?WH$#74ZG>*4d8uvmu
zeh1(;^w91lk^uihmQ-_|WF_o_ at AyZb*7_%($~>+Y>~nz}4PRLzr|^I&2tqFGh6#13
zPvGJ-;D_zDB<XG!Vqf`<Tf3~%^xby~s at i(DKT93RKIor(KFXTVjhM2^eXNB319&H+
z=dz%)v_KpUjKu}elvY#5i9)R8hDj>sTUyP)nuykP0aZF6Zb}T1#<^gfCEw~b02?0)
z`3JJxicOq!V8Dy89{Cze_^(;VjmbbRPGAK*PV$B_*YVOaeR-ENeenMTk>$3=>VtP)
zayntj*Vc~t2H3j~Jamu&ppQhJJ>9t!YasIBYRNO4y_P(V&e8AqZg5cA)%=Br5TiJ>
zvedN^<*g&}@$nsC4>Ema;hY at r(>oT)bgG+Fk=pJGA0qrG`~TLV<v|@fUS(*I<ed!v
z`Xg8960-h9zOhK3`39pyYYMh|zrMp6a%HyF%+XBHndWP11h1G4!QY#6gWLVxTJt-8
z2AveElv|5ADd>k!uvc0jcV>GxzS)Vq=rzry)OK^RV25=oC#(^9>s^AF@|Vh%3ig$j
ztCUX_yDBgiITBsJQdI;So30^_We98pmc|4d!$n?8=F;QW*xmk<Ps{z?PQ@<cdr($i
z!7Ss(tym+^$borY&F~-FKp%1`?`ebdx#=YY3!k}Ewn6flS%zGKxHo1JbS^cd9*{}C
zL9X2@{g#3Fg(-1+8ElQwQHJ|6*;3HcZR%ZG1l at G0VAx-0h73}V at 6g$+k0EFCWcc^y
zNw(4J6_LEP$T<m~gS}U(j4YQbDd3P-Y;#S`o*HwLH4ER)n<Z^tBQ8dq;S_VBES=6p
zJbr^>lQeWz8OBLyO2NLrUHy1uiQs}HgNhI}3+2{SUk{-~9p0Qrk(l;vES*+4r1MxM
zI{P(pA2^-xi#~shZgI$wh!IL??-Q%9Vx#D5WyX-R;3{k)o2 at N^oy+n(UWdQ8Gk8zP
zBvQ>k^oUKj&i at H>9#_)57WG`tQDZHMOx)<I^={nZB!ho6t)C1%2I_Z4dUyOTtT*qj
zd7ch)O|d?uzRA*)Zy|o(a)G;_?o?nZtGk9(v*dg)aw}&C)88a3#)JvqO<&nu!tWS>
zPQvo#lGL8uXEMIiW8D*g57eXWg(&+9cLCG(eWdM}cM3|UYL)4Sbi7p^gOW6~@2F-+
z|HV=PWKM#Y0(K7d=m{EaN?SI{B$vIxR at jWL8)g53T@>RW$)hsRzrg&VpAC|9v at u>7
zPzfEmy?MnK6XO at PWQv9F+BLk(Yd;ZL?#e}$qjKverxP+VABWTi9g%Irpz946%q0F2
zNpCJm>a8T>elFHuM`cM6C($qZBI5O#)SCSqMcgNnc2Rya$yuzl9mKkjtJoC%Iax=c
z?|zB{Y&dw$BZw}TXG(1@(jZ=B4ERlTJPXfTX!IfC8V<cM^4>FeuZIdmp6BrJNZ4*L
z?~Faq!0wwV1mC0e*PY!ZGq7t1HhAR%bJMdraP>j2f~88)s(vOnn7g4{#*4+XF?crl
z?0?M_OWx^0zLoI}_UaYeWi_m#X-uC-&ryVj{TKbQofVrsSzr+<n&hJ1JBZ_+DMWt<
z61vjt;2W?m1rCP+N28+xQ3r{!R1uo5aD`7=^^gxRN7*x(y$oX_xJHM&rdutXvo7aM
z*{6E(+!0Q!aNX$b*3I2<Nwwlznje^agL1#!i1TkZ#?v+I!@_{#o5m<pI=z?Q)_hnI
z{@-rS9_BlT?5Xw^P89zCI3ZuM&tAUlvPSnxT2EmT`b{{+oEI1*4fEv<e7>%tCwE;b
zM?l5kTdzYm86$;HFI`7vliWrmE+S3x%Y}F>x>sK&7KF1Z9dV{JhPi6&bxRt1i~H)S
zu-;e~oj6*gqtqIMU^KILHaRu9^qABmblB3-L-g3pJNuY-*#F;mzHz)0n4uxMbo8UF
z$Sp%w$W3^#A9EAH52XFZwO9Kco~DL9H4}FH9L$Z-y;hA9d$DqKKCZJM_X8(-JAc+B
z98VCPBgWdr`g3<2y?5FfZ<*-hlNRi2!9g`wqZStVm$W8hErvc!758)T<lNFLs<@2e
z$qJVyQ;y^q*4B+!Tf>keW#y6#+46-d#B2^9K;G@%0?DW5Lf}Rk-2-HA0E0ntj*oM?
z=%O%b|GJNfgDs#HX6{VqFBsA=b5zM|(dI8ZX8O*m<fs?5Xp?Xt_BCi4_I%LJa^`wM
z|IN93mBTEh-R5^>db}*3TY;mTksnG4pV~eib3^&~I1=Lu=kH0*2rl$?+`~M*HqlrG
zz9w3dW;??0=*Z)WXBNX|PtG0CeN>TsMXN)Z8r%ylV}s9Y(dzK+(6WiBN6=2_+Hw6f
zbG;U0P<NXvQQn?8|4H6nZCSk~^2uNGHFr5!|4#fqKLdW`9k+9V-R+y7j_ZrJ^KgB`
zuJ%($UZ{7UlO|mE<oC?~SD0rnG5=p at o^3&S6^`;yRvPpF8Rpq*%>P}?v%jD$)%~*e
zGyh*^p6zD-A7q|AhO&z9msLgn at 7hG3b(WC-yCTW6&LNr}V^Q~h`aRH$N?SZO1b+US
zhP1IEye!^fZN=M_^Of4`vbfkV=J#IvVfF4kGkNEDr?h3_-SbPRn6?OCU0a}iNPTyb
zMbkMp#BTJ<p)ZUL at o*a&tLeC{Lrl(G58VtawVL5eqwURp+U|6Elkcr9y0!>W&uKZn
z)9(0&I>W`lqj}ldQc>1BPuUxIuK2G+bm-Cr`*WxF)0^Pe95sIm##9F#panRWEMY){
z9=5|nR2h{e8{~G{e!G2(E_0Rp99x=}{RA@)N^fIK%iW;+3HoXQ#<d(r1&(4IdvO%u
zD8*5Nqur+B$Z;++O9j`O^8^=+4d78qIY}(U0bHvysWiELseW1fQvXAd at t~O!@cAk+
z`p6}<YXI_PhWJQZ1Y}F2z3g<FbC=|VY<Hj9FAF)X`-uIJ_aSS50uQDw=e23e5U+Ij
z34{7dvH^4$t-k4OP=tT5(N{ULhMb^}GyI-6u}5O9TSxrJR_x%&(VmFGpU^hg49T^9
zAMStVxc;S|=-dA0dC`MshHLN)__l~)jz$=?EmU0fEp&hi<>&y<smRr>G?y&N>dlkL
z5jQuvmy)DFCzjw{Ci)Lq=g6F4nO%t<Vi_<f4qM&2kRBqZh!k|TsOOr-0@)FJ!*iNI
zpJ@!g8a=x}6HZORUU3ZfB^^DQ(rqEMJ~l)He|~jGLaw^ziKCJl`{RP|g_7MTi3|%}
zDAuLOIPorh1fele<@pS6S&{_U?xQ|c-kOdm?1PT-*2$VESFD|B(D6kKZDRJ*Kwid<
zz>b@=e&_~Mm$gBuh`r_E)Xvc0LG}LkOJ!-SJdT`To`+|V-0mK)4A0Wkqh2**L)7tO
za{CXg-KYh=PZif+;zaz?mEIL1-;QYDkFq?cqW#Yp>-g!$N>8N?va$1KiBcA$tz|_(
zx2x-P9jt<0KLS4ey7RLbei*WHVh)kR8VP^@j8TJk!Mi8 at Ak{c!_Gjka(b^}R2QR+8
zziHj)@LviE3NTeHUI{(UmPLC%e7v{N-|K3ESBB=KBJw4~S%a?99cxnL>pXjE;%tt*
zx^#7F_55&UOxSwV?Zah|4^s$Vn)|UG2jqkj#5>S`_@>N2?xByM^F+LzH0YlrhG&vJ
zTbpmxgQk$>5Ocdc&|km4#~`(DBfQ(kR5fC!S248Ki+cvdwa<kOEa>Z}mmlM3$b4)z
zpsy}@zCi0eU%>AM#5_xDEoAt0UqUzF7kq_5pMOI7v9*A?kDTq9pO_2#VpjYc$D4dN
z^cB<3j`y at l$O#$acZ92D-eJnpCNlRLQRjb?aaJftP3I_tx^vTUY((ypgNycR4|-Sr
z7RA_sp?3zqIG>lMJz&-P>VdCEj2K{`@|{eeLyPqT^@T;?;V>Tav7Q_oc(4Cf&0^SW
z2N0L93vu~=@4b<#Q*ZFrIb}^uiLrh(6Ecsk6VFRWq3%m?EXMIFj+byO#PJ%AmvPKS
z3=i^bj;sv4sxuB24mJ)K=tXyN5|R76ruhIn>vlf!yw<=z_p(AcX1qA<s(xX*HJq&&
ztYW8t*6qLy%F!=3kSm#-?_e)iLLN#f&Euq4!!ZX+$UJcHg2-{FLOZ5=yNEu5?8V3W
zoCTWQjQOLqdrYH|PqVS(2lzVDl(u6yp^pXIJ at OB2r=vk53pk4J3W)6U;nPH3rNi7Z
zPVI&)k`MVgiD`>m_8&HQRNfu%9U2?>3!(1Jwncj0UEI5CtWzi-d&ehRqg$NXV~_;N
zgzPxfw;S?8jJ-7wIox=6WucJg3c0(Qzk<)Ikk4lDeOSA4pNH>9nPY8(ToG~Svk_hf
z@@w&bBmwx&0(w^8dAkvO=yH4hie;os at ZjP6OQLiCmJbCY@8Na9T9I{yyrV}zK_-06
z`ijTo8BNq<;O&r)SJ0Up1OA4uimNDg%a%1kj=hQZS-`V^Z>8TrE{IV?CU^>Vk<4)8
zzGq??eyAj9n<`b at l^v|Q5L7am*g~{>V#Hmox$EliT$nLWbzwDZXfZnV&2k;~yT`Td
zkhka&`WjT7Q+G^r(3dad3nlO+=&N9!*x4vI7D|*e3Qgn8dd8MqH{%=AILOL5r%J&`
z>P%`n4tZ;cJ|Y-=HF!Z`K-_d=uOd9~c}^))N0p!x^%*D8tyLOp#h1P_xTVL%h%dp<
z at kLvshk~jKRt}X3I%o8l#$j9??VU*3-~%4xcNp*Xn4DVcWeF2>ZZX->bb_<4|A1zc
zrhS|)=E4}n^B=19$ill$_uq9U?=tJ2i?Oc1NHgk*1jL3yzoQ?=I-Rrrq>US+gKdb<
z at TTdo#W*?EJ!nb{-FjM}(pMBe&Gdc8Al at 0p^!-$Ct at y>J+$XBQFNUAiPfJPY6+iBi
zIu0^dX4vUGmHvDQ;=<~*_81*+mS2^JQq+7wF6!yd!2G?5em)`l#?i;tpCtS6%~3O&
z$ahf(8T36wzr%+NyVM at z@8y=_-6)C}kS>fFnZJ+BR~d2>AWLhqaNXJqvIfPbBrD!+
zgS_7X>>~24Tce3xO%y?5PB_=%zi<09)oZEhjvw&M34S_!JhQ#?Zf&;ChW_Q>PTiP?
zr)0fs4c_^Hj%9wg$a?w at sYCEyNFTkT6*0`O^cE!NtJB9t2c~HaK631_A9$Y at MSO>K
z*Lg3y`tRy#K4?$%7hoNE9LEG46LCz!+ at YrBAZ~9~L6(yVz6rHsoFw*+K6Xk_6Yv$e
zk^smA`774(O(V3)_x at S*K}Qc{ve8V=P~^9lw3|aEN~R8ICt}(`X8`&OablqjK9DJ4
zqr~rJuBq0|(2MeM2%K1!yg>Otxz}#wVUChiwJDp*!9T8=oT_Qy5I#pvbftcJCl;<#
zc{N(OkFI+pM=3uYI%!pJJ&DmOiyNz(tddlj);H;)ZG^4JuaJ31f%jwlh#j+FF>-dj
zzh at -BsnYTsVzua@8wls9$Qp=u+nWku^D1<Y179M?k%4_<7_z)q(z8_hE%)I4oZVCo
zgT*OwYD;cHpS`5am~aT=v7DE`EVnZr`m=V{UMKVs`tLh+?(>+tmb^LXqEu=U__iF)
z7Yr|PTa?lv at 3>BQ4t~0lyQFK`%C4QVrRx1L<+9jyH({^7Eqim!9Ob`R4ZQiwqPqMB
zk)MbzmYfypx;=dI5^{|2VPxjbi`1{S9&JIhju*a6-nE)8(8f*3#kak=xi`ivO!156
zDeY6HHQbO=+n0NrvVptN!Pb~UD_t{eZ$+k44OGsJMAvlW;mW6rO!MgCSp^LZ)Dew(
zYb(C>6XGoAh(>=T7iHX$-{7I#F#;!B3G$&<b&~nx&C*agOLbkp^J><1`&V at U&)Rjv
zr!pZ2e!v#!j^%rz*)s11JG_8H)pppVZbOE3wdM+Lf at tA48Q4o2u$OER8U9EcdQa^n
zD+M3A_NCh1H_2QfHuj(l*aagKLtv+ at -2=Z*K`R~IpRE2j+WrG43o__ODckw!IqQ5r
zgx_E`);`4#acXPbLF_#u?(4A0lXfaj>FGS=P~9f+q9U;Fy#P!?k}N-A106E|$(}rI
zAM0I8%eh45*d}dB)|k|Cx{|d0;zrUoQR-Ln8^vh%E10jq=a7EtxXz5Bi?=+h(>9*F
zqerhTu#^5zF?|Z(v05?mD<mN1UhKQ-K9}77=yjh1vvrrM^==S-WI?>d at x`S6nDb81
zY5)6Qt<YIcApH!Vr_i`}wj_hcf9y7QURq-Ve!uNl3yid5tZX+OV`Wn@<EegVJQWsG
z(6+dI-z}Cj_&XPwoath2H^%a?V=ON|M%rT)a0M7Qw)y9+$ym!iV(KxB`B7pzM5A6Y
zQTXN)<eSuX^s$0Gld|RQO{(SSQz6EuC0GeM%6jO#8jFd}gFjfBgiA$O(j4`KJ!_~r
zZ~l{(G|Z9Fgm!^<siCylk?`vZMQ)QgwVdVX=kFc;{Ds_RM?b$N_C<fR4ptFbzgSNG
zvt7mg*VzZ?f|0%`fZpNX|7z0y<g*VvWG&f8n at im^;&M(pu?5-FI2my<<h#(F*Cni{
zLl&m{Rhc3o>*WkqiNBX!fxp9EQwjQqMqjX2r|wXi6Sz`bJDX!h=GADYbLPXET41)p
z%P&5k7_tyLwE?BESYrRx-H3O|zD4p!pC4_$Hy2+fW%ggh+TCsg-shJ$vF02maUtfV
zBW`(4VhDK7#h#xLJqqF*4#Hoo-8=8MwB#603$q{Z$DXR|f?u{er+KeTiJS!cjD at g8
zmH5P(^KdQ_XUX1h&5$jX)IiTSx5K8X9U}F6Hz-5Y1lgu>hnFa$UX$`qk1+)IqY78I
zsSN51Pa4GQN7n3@?8`{5>rC&fdaslqe^W%S0a)i&kHnGxUk85d+;Er-zMPZOEgvH8
zM+0zZli5Tk_#yoBpi7k00P7P;e~bJg9Rzb?Qo`oo0@}Yl+=Klg;OQvXX5=oZ!D&9J
zoSdV3CuI)o5v=Jcgub at Krv>eRUQp~Ndt(yX5nP+x3;E?)U{3$8E$Oc~+EQpDZP6zg
zd<(3C5q^Qq`<UeYUh&xC)ZW5`4Xh9^IpUSx9ZIBZ_u3*{=j at AE|B<oRUcJ=Y=-|f_
z-tJwPuTzH-etgW{_Uh;MH7AI3fvqUv^UQh;u~VjtOH9b0F6I$mrJK2=jcC_P%0kvr
z;5>SWpSYm$YJPBCa<f;L_*}hGbZ&XZsjJIkV7nuI8*Z$6XdH`F%HCp5He;v2IBLpV
z(`8E`54~}J4BIh=7aU_~e0U7K(B`pa2KA`)2jlmOC_M=I&;Qi!y=ZskgLZfHY3;0c
z;p-x#R$)$K{HQ<R`#OGDi2V?>chc^OF*GWdSDRA(q5;sWR;OCGl5t^Y`bFO!xlfV%
z+01>6o8~#mXUCwgYiNKzeeAp`{skWKGR(20XPsKa$RUIE4s at utL*`8^9s34n=mnnu
z*bh*Tk at 1?a^~XQ*89C`;+RFj$#nG?{F?-o~r*mYyZs(IaZ~YN<?ie0J_Hf9$>B#%G
zH*-4HqwQ8XFg_o-RzXHxz^nQ2pI7s}<Ro`{?$dT#?$d%n<cfFfzXHlezDev1Uyg>1
z5JvEX3)Rq*rw^91GpyHuM>vG{keh;$bD#E{LgY+g(DJc}=Np>w;&fHes?L7P3ky@^
zC8~6nvz}9jp8r<?WPM^&ZTCL*(^lSCtrT{FQuxCZBu8U?S_V5$9Q4WOIH`-qYBMA{
z>I3*p5Zz$LY8 at p9UL)cc;DYDx=Ez~sNy~P{bqdz4W2SZ+{H5t%pc^uboD12pi(YV)
zfw;)XeLeGptfAp1tCu|E>w*7LG^yb2d!eft!4Svf3tl1hk~QEN*xK=3#h>&TAw-V>
z-tA-PJGSqMd8x5C8 at ShA*WGj}<j9PzwaANH2wU4kUXAo|^zA|LT&W35v6kkMGO<?_
zEUq;lf&YhwLpMf?O|1v*)&2`R<5+P%ZC9hbq`X*ds`lC|bqPzo(ih=flvRZ?6x#e(
zYI_UO=diu_74V<1USbEGItV%J96ufMd at Y_$2agzr{;GjbfQI}g{WbU&@#BCTS;CG%
zKTS7R&P!X=rcIaS at pYCw^v68#aENU?_^Bir?M=;g?d$a`@bw^V#9Bb~MIm$xu`giU
z!Zo`gODL1`1%)$o!QdnB|IT;(hTc3HIYEHcUa=ep<ir*KhV87x?T9f$p>*jcW6a59
z>~;9xFE56P3jjaV$7JE`eG=*F!jt9XKGttir#XzC;zP*8(d3<np8r9%ft`u{gwRI1
zB~KD!<pXOL;(i&tb|7>%pTM@%){3Yy;KMF}?msp{CkDO1#}Cue;IHVHDt5Kx?CQc(
z6(~O!-(8FEf=40GqQ7d*waho})8AkZ-sxehM!ub4$;0ni0wdGcDf|f|>t}#H5PR7&
zqGLxaj3ut}VI6l8cw+D|?>S?hz~13>jPSYFa^3A at o)O*7-OEHT2w5}4!>CDBDJ3P)
zr at alCuO`zD+kXM<9g|QmJK at P!G>LEFxBtlR)D=xmtb6}GbpdN!6Hk5rciY3i`{U<L
z1XiW^*2|D5aLvCqa-B18B4mv`avx*&JF|8GYk_B6nCD+|Tr<y;>zsKm%=5U$^S7Ai
zza#fwLtZ}byq~rb*~5P!u8Z~UxSzhQhuBrHFZlLn)hzLx3fv)^tQiDH;?fgb=AsC$
z5Epo?AJX$ys}}n7ZLyfrwqU+pJwf at 4n%|dwSH<@g9Wx0N!k0*TawYGIQbn*K2ndZn
zPjrjWeG#2h#LyT0Sy_-tyer<)pl*=$u>bE0Bsh|KBENW-k^B9bS*7T+!<l!XuQ-%I
z at GZNYSR}VQxlhWu`v+u7lwkxvGV~=5A4wW?lp2m6d3{TKl0pB-O$PlmV#tV!nRhmQ
zxCV7-0%m^`;zn*<*B+Cv4IY{$TgD0r{)65~eVv>btnw3 at 2A7YeifPC}mb-50E|X2!
z%bqYDns9;2I91%akItW_ at Hrb^DLT74JUbY?;~Sm7(1p`;CL~bulLe}qUh(RiW41vr
zluHF&6{(%-4#?oowK#QtAr&JM^zXS=E*k~D4Z78q^yFE_C+HgbC at Wv)O^2{o(zI+f
zD+D&1b-C^Y?@aGuu9u7CZ^+S)b401cRxLP&eKLQ=MtkbpGPT}Vq8>_wj@;Q(ZE!XS
z7`h$vj9OoB0KX&jY`?dD%EDHsSuX{jmn~iVWiNa!EWIedfN5inFzDsA46oPAZ*4Uw
zLfd7*?LOZ$rzI@)^+X$Y9?#R>Lae$z=(jh0Xd2O%JPVyiAHllWOa14mFJCKBgjU=k
z^JBpe_~u6<xnvR<Kg1LK(Y_tAgUxDv%n6*kalV4{_v+Y~c(q+_P^Uw;uXOGN)(m=g
z{}-S;3y>~qE at h|K8aW>j|0P?!s|vcYea3YX&G0Nd^D;+{XL!wd?)dG_=-F)r at MA6H
zW=on(Sp?JTzd)>(ZQ+ozUQ`);r`q)R- at sL98rV6w_bg%pr=p)*RLHA<btwycBXo<<
z7vg)UM`)^ugSeF=*J4g4`2MfFEA{Qh!o{^ch4*A=#ApAL?whn><7<SzMLwErhVH^Q
zKE;$1zELo8e${iTWpQ9y2j(Tt8RQIJpifo6Jg;OegN;qk!@LA`u#T}Sgoi$jIiV5P
zH$&ck8}am<q4O06?0W-a5+3>i at r%M*2A%@n^=me06h<5WOIbE>{H90m!B%sf%xhrA
z9ki0zZ<zZ%k=HfHx9Onc9plj}hVIx at wK%1xK%;zGH%3P5XO&}aA^rp_POM8-nkv|F
zqP%MwRXJ=k*^*>Bnt~otvFYQf(7gv7jwO7AFrccP^bOX_b;GluNBA$v at xlEsaM{;a
zSH0Vte+Ag7``4u1%%1+VFyO#vu>D62%~phO@`i141Fqjd+gzP$neqZ;(~T7<?{inV
zxPa4Q5t)>%d6HV}uc^fLK>A<OPS%D8{eU)4NBygeMLSwVI-5oUS!zp_L}~B)qy_85
z$o*d2SK~hCk^9z(GNm)HGs!yMxqKUNZNRRT+SJMgB{Jm%+)w(`{a0|GgZt_S_f;;{
zU7aG`&nUkh<-daRPscj{gmGyU`85>+BWR0>lM)PFjDub_slbcK;0FoZvikGMDOiJB
zR#*8eS%_%{n|8YO4%*qH)?b7EPij!Nu?*BUtPj8skTJFA`-KqM2>E|yZ<UC3^Ocr9
zUW_qWHpCL5Pp^}?b8rms<FE&*Yh4Y5uGF!wl=w(RI^Zg+%#V3Dyj9|@75N<niWzm&
zOLe9+dOv6m^e{=si^dp#4=jkU|H~H>(9dr-6MTCV at +0=g#Km6!<g84`l at dPV?PPX>
z|I1ym508b6_?GOKWGvF>G!WX|ER`tz&t1&&@9K(`0dtzw-yc7huTd at p#$C8BUna|S
z at KtZqp!;N3<XC#EWD9boV4o;?q+G<gVC}~<w5wv|nW^L%f<X}mB;Ga_{fTDgkJtu4
zFKh1pg<fVjXf5#@Bk<yn(Ar!Fjjieb%RAFX-YI+ZolYgIk9kMwdIIO at KJ|)Li9j|_
z@|!H&XlMO^<1!8lj%?#`)>RyRIIK7{#&*_EIDW)&1xJsufb}zuYdHFG^lFqYVSV*>
z#ByPEeiDm(l!!+-dwqVTBvmHNfuCx&@)cc3TYhn$+OBA=WtHO_CEF(HXQAv09HraN
z=zCG_-p$^+54UW47Fhmgqp1u|k4dZ7Z_D5)5C=zL$|+dC{T*U&$*+U$AuMQ5eyv3D
zY_&<Q+xGEVypy8a{7KgEXr^8JWCIunvhHYb^cZVdy*OKNSaDpz?|z&w<LJZjBYt1Q
z`3D?Var}heKjVBI2Px+U4jYbNa13H at SVnLKj7<$Xh&tB>VURc%c!M-sjG&WR_`MQx
z)&}a__g3EC=82j!uVAgVt6g7F!55xj0^A3L>o)AVo%;>^4d$mOgrAnvM|^q91s-36
z#|za|V(!#Ek?B~MR{DdEQf0lwuNVAhoo5j2XHnjbZ>7S17DRYyVTfS*DZ~Usp4V>p
z7RIwm#Xa!bLrx~oMNNiDnOpNsA0DghZAVP^c9OGLvvBcnFXhDY>P24So^DM7Y!X+S
zy*88eST?J7h@<O0uGV?<dfhN;61cv#S5J6_V=cv=w79LON?njp+FLkICp%6TsP)>t
zVxMpGmIr7K1=VPNWUogVwM-tw>r|jEGD*qWFK(ChNVc`^SEr9Lf7vccH7P`vAa!>9
zQwothNM#oX))a(^Fa00NzC13fs{cPVahV)S#3eF?VIs8!L>^Kz6EnqeB1A;F;jq|-
zsZT2TJQ at WvBFYs8W?_I~U{;oaQMM5`L?KHgQ+8!?*c?dB6k#Ma?e{(xtiIpZ at At>=
zkNZ03-m{;3me2knJcYm{*<SFK)4{uv`V`Zy;$IxvPHJp4HI>No2>uvYxFvnKZq9@|
z&{;c4&W_Kvq~mPA1=_Fj5yz56n>g{EpIa`_M=THNGIvRUBwTI}_HqZzeF0~aJ9PKj
z=~Co7>b0y>w;>w7?)I at BQ;CBH=tL5lvJ+ at bm0rj<Pd4OgE26gHKKPXm9#c-qOpE+0
z;a4@#yJXns at u*<Cl-k1A`snG8$lRgN3&ldg<<^^mbvSqGsckk3#m3z13HVWUQ)$M$
zRf at Dk4iEnGiuvuZb(+Z&wq<*lG|5$FWjgCHH_Kbyq at p$PCeC{Vrl;TH>gk2BN0D|x
zL*&uzG&NZcyIx-PXs_ZS2lw(}o08h&6(qjla1HJA;p5QS+KF%5FmHPVEn?7->|x|x
zP}#W{^L1)zJY;L(>(AW*&-?+yyeSWL;0ymD*|J~;(joUaKTu#66L>ZUyxC at Y1@}5l
zp&y|GW{h`Ru0f-9mv9H^4fe2q&a1tL+GW>KyX{TXm&o_k at cg3Od##U|{42@)18#Ka
za$?}{1>!1?1>~Mw2Y8swp9!>|>Eyf(b0hW%0UJo7HkIS<Sqndu2?HMwhAj^5)?-Z>
zfJ<y+gC-HL8nX`RLI0QZ?N8I=AMer#HfB#gc%RsuS+rW9QcboPpnq$oOR*0$2u;Dz
z3l1^WhS&z4kHFa|f<8<Z{M<mk^`VZ6smbe0Iy93l_FG50`2P9P-1@>bt{015Qa#j7
zOc1L%l3L?Dnbq)eu2{{;rm4k{xt at nR<j_ovPYC(@mobkOxyK-vzR<hzn!>m4;g`TY
z&9z3p2Ds+IaxH9M3ZtCyt);dIbdW;q^Xe!$aP*dPH{iy3P6_^+rX1jEU;1m>NVt<J
zlNaUO`8sT-J<3dXL77#bi_?>|PTBsNOC-;`B+o=`lymmiQ?mWf*5*J~at%|?80G92
z_Al6V=R-!2JAk>D!8U+%khZnd6Y{8ZRcF>Ep(Om&_$`pf`C<+YI{E3>x5(&Ngrk9f
z!k?!2))rY8aNw>?&!4+|1&Yp<p1RIsO#atSs!{fH?8}fZR-MFoc6#9!g<r_Fx3FKs
zPtPPi8=saZ`M0ej`A>gI@^Ab1(CpX{6DNSjlLqyh+_-)wSEXLKKlTNlbnOc!55(V(
zb>c|_8%$iKKHkA%W*L>TxV){PGk842dFdQfw*ENX(<uwcqmnR|Qq%kxXDSx9^mLta
ze9Iu;3~qENeS(r94*MGTz8`sJQqccn^5l%<Swu at l@)V5ZSps})I8QdobK>7I&Ys#?
zX|!P^oll(|nMV^-_aRR9iA5?o<mBZJy-eNZ$X{yG#;6X2C56&IL9g9Sl(7F^r~FbL
zb&%9)x*5|#=KIujDg*O3L?1@{XXxdIeBnqJAU*}YdqcihNq8Bj)=)~nkSN%YmV}q@
zqmnRxR{99$@*I_k_*A+O at g-C);%`6~JN$GEkq6oK30*7+uY$g-U&vPY;)0&kd`>ET
z8sQtE;ElL95An$vF8CSuj0tBM;QP~|;F;_}8u5`+DTY6arbCRJ9^?xe8Ue$}N2LYG
zvfbW`$lgHO*h-WBRi!{4aSb2;eya)ci2qgLKUZbr+aBgyBfbfkZ~c%<aD6WXWrLY<
z#gaO{_z%(}N%|=YW!8~0UqnBxr`(8dE6KO0c))MrnStnMi2oMQBEvI4N1xOU7!GIH
z&_SX*L}YrzzXN{FEh<u7o~MN#i*aW*;P%YWNb9IFwd$N>H}pLuk<$<#paD12hncvI
zJsEKgd~K?s?-<6dEt?&=A9R+R(6_Xdd2O#7ktK8S7Zs_ho@~GIRNl`1w#qOek~@)n
z3rJ~>w!bZ^*rMH9SN$Y2VW6n0;@L=11*@C9S5>f7i05prE7c%=4e^^1Q%QW6R#Xw7
zjhI at ZQJokt5k3ibxxaLbs>C%s-Tno42SV`9!e1!K^ZYzW`hvXVmGCtCF76%@^6z!{
z*uTis4;Yc2?<ok9QiUZR;i;XQMEY~u at aIeNxy$W*5~|K_(Q+v!uE#tyGI`re+{2|L
z?-^~lQ;D9*i%@k2_yo!8RANBh9ZcRcCERcc$=j|CpIl;K@*-579mzYn#Hc#QmN0oQ
zm&^@Uk-R@^!)KNlnY;*9XCDpM3q=#;tzq)km&^;#CV3mQ;V+dGF?mTy*@N+3z$q$u
zH9U8qCwx{(0n)-qsOsEH>LKw$m2FZPQ_uG$bHZ~-J-=zgUoI(R@*)IVZ8-1CC5Kfu
zb~lr^uH=pIOp>=r8$P4tFq0Rds*{JjgG)Z1QF26OXZtaE`wxVLPcJz_=6*4J29Y at O
z2a`~Bw}{kD;>9Zaq~W at 2OI{0ClDd1e;Vvb`OkRYl0oHI{ml6|nLDw>M*Oa^-o;463
z{$h!V$wxvmt`|#&$8 at e_es}_@>j!Q4*pf2t^1;WSkdPXz`gCkbIa7xPeR>vg^lv=r
zAL3k=-8tgf(sFJsfBzP_-5&XD*-_w>YoViiFLG4bQG|y_LQUi-z+z_HW%ue2OQJT$
zl5^nT>yQ^J3XQN%s?On`z&<eAO<ND*+vVyUuSEjwb>Nkofmd!VgshiiwN;fgWKx;O
zuZ8a0A4=H-H8-p3bd(7C%+Xu5-{F3<%F7o-iTIKRIdG{Y+;^#X7xQnqkoRc3-z<L%
z at An#F?8PGaE^U-!=`rYGn!Kv*?%au`Z$*gtR~E|$%n^>I$8%e<wb(yl*guOR*rmt0
zF7~k`RJDxi<~ohUI~Hp_xAWo};|_!&?R0L7;%S-D5fe&JGi6BVWRD3)s5-*Za)hPt
zL>vf^?38a6p-&>q($b|72kft*eT3+{jp+-CXVCJ_4ay2(<%Vda(E*aLpO*11eLI3?
z%8<~VyQuW-aJuulGH-unIIE-z^08qeJ^ftx#LB8%gF)-A#D7HGT{?K~lZmBOxh*B6
z-|=hXN|!{K`S&h!2TCG*N`*{+N$6ysMBY_Doz!wfrK2M%_)mc25BK*CjCDb&i0d+F
z{uCkPhiaJlK%C6QS~3?4O5;Z6ZgYfhX&kpUKsb}E4-$7mIp4B4Rm-#8%7h}LGBKqx
z(zncvb1 at 9-Wpd<b5<jGc-A--f=u&fT(sMW`gUZIp%X}h*_F`4SGl1#J5$BuMMRy(G
zD*0t6A<G&yy4<XaqqPC4pi$2*_lc?wINgqQ(N6w*N%{DwYVyy6v{6e-p?gcKn14RM
zbbQ3=ts>+RSuCX!B2HsY{Ynt>B|k!b4*z6A#PNVMSB#zHY5%O09dVqQcZ7V&)fOfX
zJL1?#9g<SVh-3CaQ9`0N@~tv4>05g+`u0|NausAH0hb+#T14UtaEH5SqZXAV=c*Qj
zah2thB2VzO&CbY+Zz?6>S(35h%*!gD<l$rLei3?CvD5fv4VcH+DP6ae2|~yYuir~x
z-Po23M*#26X6B~G#PRx>SGE at Pko^K8kM(!i#{XG%#xR@=Uoi4Oqm|e;d;YfGI|uj@
ziT_c54EO+%r at Fw|54vs+bWAe>wdc|Y4zJYX-hO?+$b{<$@|ci9nLd*gaO1Oh#>VCY
zW?W)QL!1>0xHMxao_9<Nyt89<h`(i$BmNwoNuGb=o!jMzIDF5t3J^Yz=LN(G96A*t
zcr>e~0T(?2xzU&LUd&GeO^5I%UiGblPW%@xkmE<5mq2&-_R6;s9qHjX_(asR*8Q<+
zz{c at bVXR&SUfZgfkm-Wl^Sx59E1<=XGd++06UG%H?>K95th?z$FRIQcQ1BpM37g#D
zKe5wi2}5N8T90k;&kH#t*trGY#H1zmPvoCY{0aQ(E27A_MZ<obzl4mQQoBN4sQprY
zTpJ;;)6P_!)sB;2RL at lW{Vb6$)JbK*x|xcDx&YbV--q*@)J4hak=CK}V$vS#>J&3j
zeyKWM at j1c>Jjws4FG0OUQLc{F`>i|q^1#Q0hs3=N{RYt1*(rcy<YN{RS|s=OfD3Fl
zs{zAko30PMfc)B~B?FU~@STAPOz1o?mI>b)7!|9BymTt$TGNS~<^zAuPs~5w7OS_$
z#p+F$y(%C-wo27IIZZ5r?Cw#|r8PxFM;ZL0S-?w6h;FuLWewzdSG`4Oj`DQYF3kUD
zg!h-Rkq<d at gc}Af#^#%vye at UU8QWzy#rAgn3EKG<PQNKN_IlUvUeisj+$>Xr*Ll#s
zS_d8t=jA~M*VpvXE=D$Oer%qpRVh!>@@4q8d%%_}AKC=G;HD%zF5KxH*5*Whl11*Q
zYnMYWJliDoT7+}qP}fq(>}xp&GA8?C&T%GO#9?T7Ti#&CPR1P-7Q&(bcV94XhXzVx
z^{_(<`%URl14m- at 7|R!?RPd>`#pWR%WlG0bgRzI6jP$1m{kZ~JqKA-KErZNOSyYap
z8{g)!E&scIG7hm3Hqq9lF7JmN2f~$BIcbCYj5Uo3M_H3&vF9KYTecw$c9LGP+sL^9
znfi5c8?7RyKWnVjn8V**gw2er&Rv1TcE(j_+_j2X2u)H+^i4B6lL_y!RVFF;tNH*L
zS at U$kaGyKX44p6fKKOz-gJjT$J$^gi8)w1Q<l7q9dndjpGa=^{mMfn)8MIODwJPZJ
z!B=imb)eDxq&Sbr6tcC1&&A{s651!`DAZMDO&Tu8+QW`|n$DWa{`jx>eD=40#eZUd
z`B(fVba_VVW7YgsUjkWA;4OZEeOfuZPd!=|e6gW$n0LCN&hMkaMM&F7(yV<p>47I+
zX0stsn)8bPhZjweQqTkY?Y*!iA{YD6VUcqCVWr&3>~+(s2`x{$j``RoF!$e)gvT#}
z at 8HBPyVL$iY1j2g8EhV^5T+x{M5sWR&~=?or;kR;yRO&&i#}2BK%ew{(M3aviH$89
zGMz~~5uQd}bHH!98CpR{3e0qs7oXt4 at C6|^rPWWQb*rlAFobH%@nNrHzSZkl(0fTm
z-SAT_uv-s7&Yyl?Lpy|Q6ho$n)-B2CR=W<hY<%AAdt^P!U#nC3n%1*m_v5ii2wPX#
zv1Zu7YGdNpLk7pFEi%;}eE$W$8M8V*7T2)TPI6p_tm-XO;%&n=tqdC_QS*X4!idcT
zUSnl8kx$5mr at z5_OW;e0;n#2ArG1k2m#&2=-Zrr$-ZtUHltX;2Ue4>cC at k<XG;o+L
z4Qy=B4s5)d^Brs(`)RFxL!%Lfy<IsRE?F})+JQBq3sA+#{U;6cPO<N^Ti^aGjRubu
zGR;rlGu|cdt9JkOzKnVQ>aTZ-dH>?C_fY12E8dSn*M8xOHrQ&-X3noSap!>t{^w%C
zGXve^O-b|<@XiQ5Nvwmut6H*U(lcZq01t1+eV!sPfL7ZKdyhqdWn0L-$>QHDmJeQ6
zB}~vN&ei*P*ugKn%@gj0-x^gqPpdSKuH06sc!QHz{Vx0ng>sbDXF%(A<K#|=vdAeR
zHG3f6GKHn3&9GgtohKx)<yCjQC(sW;x8&nn*<Ka-j{7gp_fMYxJlI@!+(F5&7*q)_
zfZt at l2>+u!ob;8E7WgKgcavW>2pF2kqA$@Ay3tBEO2rpS<YFxsHdU8EcjDofD<_k0
zvZvoFan{^iIU42HrT)e*JM*->2)vz$l{-k at -luspK~KKS%cIg&`QROhc|3mEFC%I1
zY(ZMn;HPUo`w at 47GFFxFmK*wKhyD8?&ll}-KJ=sJ9VIlU>oYxK$Q<*H^=Yu1u?lkC
z%|(5g3H8REm;J&PNMMWZ(|W)=f_?0C;NI2bF1j8;#<XBH6MvV9Z)W1_@$ZDTqQFG~
zGrR|a<W2cDW#FP9MeExk6 at e#OBN at Ae!oKs$|4dEg+rfjn8z>h?DFI__c%B_cC9q4V
zgRqDk&xX~v!3aU{YWfGo>Juv!tBpS>c$SrlmyyTp{Zk at +`s490BcIuK^Ca`)7gJZ$
zmNb%9XUIyX^GN!oA-a0HWVI3Bk#E)+D(+G~*Lc7q3i&;JU?*jvxJM~t9qy?}R&#~k
zy0Bc#ft_~ypZu}gugr&zqt`UhJ6{WsT)W-c&DQ!{&ppN~;}P2w3%!MP3dcq&LABi7
zZx+I*d1>w at b8ENlQQ)FYgGsky4ZM6RlUIf at RCY*x#hVw^Xuv-!jMdi{#pW3<^F{Uf
zdp{9t_qw;n6Iq{-6 at iOdclci0ylBV|`~$Jg61YfU25gvqrWo^jw at KclXXdrVRN}x&
z6vZby1Ty{z<>ErlHrOmxg61<QE`(2LSI+04WBrEvc9||sATvnG{((O9YS?2f7F0kE
zznQM3rVQ|~r>=s=*u67Ptc%eTnl0d$cbU3$gcl2*fsnI&q^`aHsEg?EE at JX)IIsTI
zHso>8_B`ajjkaC>kzX+|o at v`GRttvPo-neXpZ!PM`JB-sb*0ih)S#HdnKV*Y&_C*u
z4!kl_mwsd%9wT-A=kL1EzcqNiW%`)Mc`{OOvpA0$q-S#;jEw2yf7GiQcsNq8k<=@g
zGVo|*ezbqrD=y-|zbiA>*&}^y8m_B7;qSUYd*6#^6*KRWfs~PYdjt~9`?LY^NWH>;
z)LXzg^j9AXm_CX}>NWg7>II#h+k`S%`0rW6eF3lF&Pd(o|E?SJpun>q`M*I}hR1~G
zA)a15OYtnj!zXj)^J515fVl4vcjwB-3+vKZwV-jf15aE_-iK{>!X9NHvE6BpB=QE_
z;1I3lG|qRaJpz2*f<0n>)jXqOw$~EiSHV1OL!13OZkFyClXpFnFI+`<<v%2<1K{Jc
zIe2T?I^b+O6NxO5J)Foman}+4IMMkm`ZsLws8t7npMeH}da(9~bl~4{wlo8F=!UFv
z#1ENHIh`e#??_K?^!+{Xgov#T9{RSvHqTXw_$!EqjKtR=z7BCRCmRE_?Gqs5pDyk}
zJ!bHZH1L;mOrFNli)HjRj42ZQrhL!DuCF|0U18u$>A{n#`4ant(QjK%cvH~XnKIN3
z_!)jy25Vrys#hc*Jr}SSSpyStB_-Dc!31Up{r)BN`5bgqvXslgvl&h16LG)cIZpVO
zLzB20 at atUi9p5rV35VY4%g8xR?4 at qNKbzYtR&S~RoIA&7LB>2hucFSmux$hXd&JJt
zrVG%kRY0zi=+~wqlp>T6eZ&BxZ6M$%IkW$DRP1LPSoK!lP31S}!$$;mMtqqoaFq<U
z?=|SPUE}RQ-9C60;PDj`{4mruX4N`8!Ky6KGUa16==Vxn&ngOKH=>>z2EI%nu%P%b
z;v4Wi3~lQ0XwlwhHt$v2 at NBm!rw}-DEkYy0Ake0q39kitzQD5;&*vz+zVElW?<4*d
zp51tM;fcYs2hUzSByA<0_wcMh8%1~u at D%3CecV7h)*zk?nwPfS4Z5N^{W{F&DN(|K
z0xyq#$O16&*AUkX#}7XA^1xg%y736(Ab&*Wl4f*SL5KcxCS=8aho12!Nz{!d$f&yD
z`JT+D5A5zrqHT9Ppx?<|2m8dZA)zu88O~LdKwhI3z%MwX+Z#>R_o{hLr8tYBtC#T-
z_`ap$BZ7*1XZjB0oVF<sWO?QJee|OVHdQ8czOKAK&$#9ll~$R at g3T93{<ogL1~Qxe
z!!``a*-z?osUFfvKC`=Sk+t4Je>S;IA#l{HdGlngy at Cv}&@B)6(pB8=<M25AKkL5m
zkGeU-_X@^#31@<tj_mtI`K_mt;jf<OZyxT0ct0!eMJae*X|V6X;J17sgIhX6p2FX*
z!2M=;k?<QPGcqD<$Ul6;RTJ5m`XVvlGC>6?M+>n>E&zA^Oq at PZJ2|($Qrw%QeJPQl
zEqo at BSo58rQ=1_WR}q{8<JvY7ZU=l at Cy5FzAiBbm@Iwds9xA^XwlmgxpXi?~R`k~n
z>nwK`gD-qO*D%q{$R~jgsr;UWHSm^pV$+Sp`4xO^gM8&Z%aj}W^K<#yt0ev#&R!CB
z4~<sIpVzXE^R<KI{Rv-t7NK$mZ&+?AdhoJ`55G)?Z`6;d3*~!BzIGz}gzzVnPY4BE
zO4lpS0dIorlj0oj5+C%OIY+_2%g3IEP5#CI9U2W at DP(Ar- at y0g7|7D}_2q2hF+7?q
ze~lt1dzy>X_u}d%-;2D}*8IMQNPnn=ykcJvk(KlPw(EDL{rNny9)15y^icYOl&!41
zr~eFNKQS!JgErCj;^5(M?zrL5a|9o7tr;54w5fVJzPlJ7)@Zr4Y*<$uysD at T?|As|
z&O&Z$o1i4{LVLP+zaYbJ(`)fWr at a1%N<Ip(V%Kcw8i#q!ATl)m+LJ145$+}Oy_v`f
zWy-e{F*syamWtewkgWs`&~<^taaSVmOp+J#HC7vv0DFq^m&yA>oa^hv2Yjmosv+n0
z>WFPQf*T}^W%$lsjpPm^?V)Yp2t;not6<1&Nm`E)ur6#=KnFj%D}5NhApG{O&EU7+
zB>eTic<{ma*1>$6if_L#eEEg=2Dt#pzdRZKM)n0&V at ZZx1atpA_%ZkuxMvpD;vO%H
zSiiHVzX-VIK4Qn6DkJj}u=c7vB$!&#1Di7pKk*6tVV6oGUWLp&bZ`2>ua8(bTL6CC
zH4_uREFiY$`~BA6=qB=M{0qzGINrPJOr34rb1e?%ZH@}^UYFztIj*^U$aT4B12aiJ
zNA1;V<h|1yX|spr_pk at wA!)N}t~xVy_rli{X%BZi>w8HAw*!8dhwF%kd>iEV+?xp9
zv)#0?1hRX;t0v}xH!Fw!N5XXNM4V>_<c%iMz9k_ZehViSKyP2X*@G6Mz9FK=Pwr^g
zcMo&_z_)tyZ0KKCK(`vQw4jHb;s)}CfK5fsN4$j_bBPSVXn}`$7}jag`I<JnBYq=D
z`}1PNJ@}1?Hw114T<pfLLAkTdRlXNDy8`csm`}T?(61Yi16)`o+_6qOTOcR$L-tP`
zSOj+^Pkp(E+{lqcaFQu=eF6Lv3N5`=x}Dj&S9iSZx4s{C2^?6!MU#iLzzJ7V(*h(G
zzJGUHFa3RP3rm)n;L^|`qtk#3ruXcdq?SZngDeANyfGG!7N0}hSon&o#GTIfue9{~
zWXE~Yy1gBA_y?5qG3>w;gdV++-yvtEqui9BuN_ONoC~1wu=Y?*{)v`eN1a9Ow|>&w
zLy@`XSXr6!+=lnhQe~ENx_Ot*u`1{U)<gO`R at si9;g{Pm>z*YUX?DcpwYTv79`YPR
zo(qUKB2T$xEYi**-$79=eU8<*^AC|L(%UZ?Sf_SmE8Y(oJ4<3QqmFB7aXVkq6*#b}
zg&hW#ap7RMX4#?ExA#tw9t$LVc<dSXh}MT5&eh$}=Qi$L2m3W?($Zj@@hkSl>lUU%
zE}M+se!6?lx+G!Xw>OrB4$={nLUdq0E=<o$uvd^O)^5!n@(U7JjZ|aj?}2MY2I at 3@
z-Sbk_7T8y=LAjp5T{qqj9ZHI)0_k|AjH8_|p?gVLDns-cJBPLfuI>CC`h`bV%1JpQ
z^AFkYnA(!<&Bebce~8;8-ZwrhXaTQ$AX{}YXhG(~HQg%b39zR`<hvbMwbdRi;_pM@
zhlN^KRIvBzKsg0pjks%;!yZ`4_CLf%|36jyC3kxY_vRP1(xr4B(iXv2X(V&^1rOEW
zpX_mO at cEG&D^YZ`v5Xyktn&EV<I at l?ioZ5K+4W2R#+9W>-9ht3&vs0si$m|z#?Wc7
z6%{@B!@`_yVZ3Cpsw19dgq^a&pq;c4_Fu}V2lO1Ib0{;j&Jx>7`|~nO>4u;ttOX_R
zXBA|=V#EeKYRpqN^n>=ezks|Z+C8%+vB9<&YqVc<9=hHqri*Al*EIhcsy8W4nd+qV
zoQwZ<wDyQH&PfZeOl6dY_-`ES;L9;41s>T at q|=$9?!MnEUJAXOBwDGV<EU18ndhZy
zef$!3ex`gk?ED5!>`3+3=4V&wx0mxx^RfuP2YWWQO0OJyq`M=YE>w+ucC9i#S*<*(
zGjg*6s;)$<ytzudxk^4hY^&67{ar(5!S-^2_DVE(i_%90AzxPcZFl0IXpR=d!A_U%
z{O7#Xfoxvfp9-F^;h>7Il04D|wRTNZnx9c~2Y9-Uv?@K(DRcU6sB6hxdYO0Y?Ks%j
z?CkrcBAkrhx}PqOOCF!w(MuQMe<-1!niX2 at KYwMfV=I;XW9rq1^y#guVK=_;F(>-@
z$Fr$jNkYuSD^xa}(08ojrB~sH%smly(~=TbDLbci at BKAVwDVV-Qz4E*YG0u6N?L!h
z$9mW{%!Yi|=fvL9{UF#pGJ32R>+u-ys6EzWEw1k`c3|N=;e)Oa>n~~QH9qL5ppChP
zP2W9}N{K9H-2ht}ASs at Cx$x3HR=HCyx!VZ5bAJobj}l0S^{kzakhXpQ-27^QHf5mc
zs45MXd*q|9Z<XnaREmjiw0u(1&Ro!`U<1TG({L1Lkr4H2i)S`fBi at ZWMoVS#)$Pud
zwkfU(xRI`4?=0}wWV%<GFl{7EAYo_l&RJ*|Z7-?p>4q(pJ=}QGf9aw<uw9oj&``>W
zqkD1o;XG0{a1KeoLf?xy2aH8K4;2;c5YN(C_F3a{&0o(QRngx|Is119^&SX&dVWz2
zqOPEH$1+O_d|WiMvUU#Qym5BaTId5|dq1LjET*cwy}7z&JK=)_`xH9sL%QqKhs1vO
zA;H0#Ly%F5l0;}HM9Ej^EfUC5Mri*dIAD#NC-Yms<6Xb?Pp;BJLDGd|I78ic=5{vk
z%&Cgn at e*K?h}Ytrl#o at 5(7uVX21{CkF3OoHKOMGq)B>8=^Z=f$7)WJs^0#aC+hyW$
z@>JNU^Mb94OrKxl9{Y=^QtvZOiWbPZet03Mg#}-(^+rloG=TfdEo3k-%la|y{bt<D
zd~z;y-VIq%)byh15oc2sgv%;mS5X4_J%U$`u^w8oyITWY?gQ|#E!^uqPzL(7fyk*X
zQKWRwms(HGlNB{_GE#bwF52r3+&q`|bIN_B+j~7|oQ2e}c*Q7pKWpr8neGk5SGU_3
z>$=&XLwl?P4$&fh!&d*{g-pH6{+^*kwZhIbGX1u at lvB`W0DU>h`bp<3$S%DBoAb9N
z5mRzKoL6WpT|+f}=PPDW!2x9{1JKWz)A*<D)`t$tUid?S?KeTiz+?NE!NYXgVAv8x
zw+6Zieztk`)uByP1f_D!r;_V4_7;1W)hceMdZ%Mw#2lCtl|l*KKd$PII*8{$m2i9J
zaQghsNTWy6l8|Pu5=I at U9*y$aT7|{v`6^`AW(1U7zU#OC++Nget{#oD|1<3mq{UGA
zpqpzKW>eEBQ{pF^n!8`dJ?xj8 at b%o$pZokA=f!KFf*m!mPesn(2KJ|9ZQ+hmJap|l
zP!SG0qp(dnz8rUQ5&SG4*_tE<?gn|^ij%I?RPi|M$<I8dVQ)_>(l48KLp?v?l1bU@
z;<K<H_d|BPtN#@5?u)ra1wAb at 0YhN_z-9vYYIPoi+-Kc0sYHGB?M}4w^89q15xaa|
zLVxBjSMfgm7BY}j4CQWtjf&0dc$MFx&AqvsA}rC~+OrDYvL=<!*WB3JguU71z5ZB-
zj-}f^^MQ^k6xn+8<?5a`Z#CeVP~e(tgJNi6+bE1%vRWSndhaC_tB_4&Et&`%;ve79
zi at lj_t&Gna{F>C)qX;y)ui^C-$tXRQK-=I?Y4jR1{W9j~b(f7+cE~!FWMOXiROm!}
z;*xg5F#lh;dv-B<QcKPS`1~$Ly_%+8N1;VU=`7}=s16yceDXfnsojUOQHn4dK9bVU
z6#y4IfCs+X22$9`;zZ~(3FA%h&!ie(44-&eS94%zR61}14}8TA91|S1YT!d2HjW0w
z1fFs_Hl*#lQV~wKv4nefIi9g(*A$YmzS2wR%Y(l$<My(ihV4W{ykY#wc+-T#Y-M1L
zb<a5i;(B6RYBp^>416TZng*DooRqtt1|44=fd_{1irO-=?sLtXz8gjG(zWo%K+ZAZ
zXJjVPD<d|3 at c*C_5icK~zvB7Zo!&VFrptM4Ijgulv^B8%id3xe2qu1ZOgrLD?8B-?
z=ry#B(}M1GSEN6v4eZx_Ma95A%oj-_xs+A(bbU8o_FMn`Epct1v0{4P&59ZDW%_ci
zeA9Q(k()*C?!8ls`hqH<HyB*x?w9L(d-FQPLyFaX?G+IloR1#vyHN4cry2M@*H^Xq
zKP5)gvnD(n at jXSK(00~|>DfinWsYfO3)2BJ2lkY((~%bVQ`xL6zyW5lW+!CHq4PLV
zAg6^KJ?0}A;|vz(fe)r#BI(iFYd>_bi#{AT8uR7hyi!f2t<<_m#ki{muVPN1XU8i$
ziTm(sN!KK&${`)(KG(<c$vE$*iEeRUmWm>0^w;3sf^Qn;-cftxAN$TYvhM(6-9Ll>
zJxpIP2Q;|IeX at UW7Qc~|AkKHER>K}e^(cjc&YL2(7VP=)C&Bg)d1rGKb!zv~Ri93Y
zKkcf#=%{`<)A;D+TwZ9CqWaVMX}q&ig;ni7x$4v4DcQo1$3NgqV0|wjaL5N at 5$rjw
z%grRX&g{?7E at OwqLq<nJKihaEmv6A7QiL9tl52hh8~%aD*2Ix-XZ!cVwgJ}UhAzP$
zt^50qZBS9thdSUk9Kw$!{P_-?0fbk!8FU at scUlj~juSZr+-X|ifmbL(pR56GzXUv%
zY`}KTVv{7|@N=G14{)NCU5nvc`8BdG`Rl~m+yqC+u1|P|a%OC~X+5VxMk0)Vp*|b7
z4v5|CFxbI1J8DCxL9QwddbrcN-Udxb1iyKVTnlU;x=F%id0w1Z8jCY<xMY_i$Yr=y
z0X6_%nY;_3(>vR%o|Nr$McOC8xrr at s;7X9;hTOO-`~*1sL~v%%kCIruf(wSCm|R0)
zOs3)W7?qD+qQQTC_i5PxBPokA+Tk+X1k2^Xr1n(tZ?-bl^}einR$o&6KCe5F_m{Km
zRC6owVGA3qz9yH2=k!nKAj(B-0{zVj`5nwR at Zt)GNJ+%B(E`x4F;}I6EWh>Nm at XE^
zKPG<aUYg5R^^?Ay6PSrlmzUmvZe|f}o}k at YSsmx~NfqqX!Lm&@>}OBmn$e#Vuser;
zQKaVF7{*B<$8E4Q5xM(uMv44|tAY$4yjzJ~+A#ORbDC=Typ^#U*yocO((MvfA9%n8
z0wu}Qxr~twUx~F#@|F{L!pGE6>RavdHr|&(zXCp_Z9<m*o0b4clT2`TUG(LAyhFF0
ztPgS2d*9vq)LSXN9vc>z)vhWoT9XubvnlPIft|tF&;C#lY&F_zScXXwACpBDf8C)C
zKETs_<Q6HdvE5 at CpbIE=S?W{OaaODq8(4YIr#VX8qcuB2WQqIZRXal&ULNc^yDY_8
zn}RyLn7feC83IkkC@=>IubH~+bUG_#r-nHbg}LVOe#9p?{N30wW{E%r+J3HByK6JT
zOz2W2i<9B6%II2+cO`UEG7#njl-ZoIwr}e{-1UimeSI&hXlLgPjYZYvi22F`yk#If
zUC0g<!?voXp2!qsIqt`Qo7H!qzM?OwZUN@@j!iP^KE`{`-pKm3FXdo`UCa8-R^ymz
zFJleZ8XYCbbK9nMJY*|#OtVQGr7r1WHL=eNy3r}TCxez?=rEb2Xj3o9HKe*`8`41k
zyYTggETJWHMS~@1wXQaMjj-wbTKe)0KEfbT!{@7Mr86D7(Y#ux^f`EL)8V__n}$rT
zi+97%&08jSOE4=h-VB{cXZm~Sqjyt7w|?_J#k&~<{a;IlcUMEMzmz9W>|uxVl6Z2K
z$dYl^(Bm+pAY{s|H|9rLkH&{N=J)(KL(NY2epsi7?~|9YjJ#&=_&Ssel3N3Mj?O56
zd_{N2AZv$3LeJhL7xljPBRw~%nJ!+G*<<SYYL0sGqaM9-ySHJ!G?BwjTe;jNJ#qGW
znKei`#YMX)qenyCwXRe+)#tr;iM}Inre;I0<&(uzd&+w9W~djXcjt8j|6)txe^`2*
zr|1)VOZ;<D&mNj1uqTee_za7$cIQzG#BS_UthJW3TNk~zkDG0gQS0?vK%Y|f=-10;
z&DKX_jG5l9EsB-1U9u^TMRxPBciODy at x3!-(E4p`;4N40%tGE$TTgz-;H*^Gx9AC(
zV)}S-Yj<GCE^_Bk(5v4+5kATKJ!1PoAHV;mM{Gh5{PX1hcb#Sndt2+<{Ab0r3tPL3
z|0Ap7h at 0uWS?OXA{9jH`KlrRIsy*yaA!p~zzlZ;JckSn4B1 at KcYLMK-QMM!&aL0Sc
z1<4aN!P8dQEZJiu7Fhyk_?tEKYq{8{OrV?PTKL~mjM4Z@>ea3pJYmz(91(wPwlH|m
z8c2aR?eUoQgFkY;O~SfG_IhX=3p5OtD at F8|l<*DkmP;Omv#=gIUUWaLL5TH7Z&4mC
zstH+_*hf`;Af)8UXM!sN&F-g*txB%axZ-QxU4dP6=7T?04pB+Qj9_1p$Hq*tcHNW@
z4er^qODqYiPEhIag&?;EE3$cc#0I6nd36yl^QN13I{wo(ryloc>$}0%th+%^JR)dG
zs#$!kr}XPWTDWYNs0L#yY%<Vl%elcYWqzVtZ65sGL}2b!)__>}mboIWhkYy7J$5SK
z!i!e5=Np|KZW$OyI<2B4_eu|@vDAC+tS+lp^*0L4Des0&p*HKI13z{@bFgmXwWOKr
z)_s`Zeq|zP`l0odENMs5543vYf2bA6v%+0F?gk~pe4k_;)JMPis(Uog5R at r8k>%`i
zSeePvg|x+guau8Df<Ee%@^Oc`jn)%fM_zYRhW(tf<yO%y1Fzd9TQ802<#q4P<{fLw
zOc24lo)C&4sj%UEI3zH%&LRu_ol;n%V+)0Ap(kVvO5p8sY2n?a%+?oz+^yr`D at yX{
z5Kp)``%Zfdx10D#EmxZBi<a69PV>_f!`Zoz`^dg?A;tq~>#drQKtosHM^&GB#137d
zf|JgKHlNf%M(sB*%WvQB`LrANKT8`gR~X{udHDj+j6II9fM<}i5BJ1ntb;5=njnju
zcZO7fD!(yCBNn>m8k%D|4f5DdQ#x?y{8+c#PZke#8-puBM^u?w0#a|m-ijFX?4i>3
zqpZC4Jop>>XpAvav~oY%(<x^s8tJjL(CgUEdc3Q>y1Vnj<ac31h?KcY%{KHWu}=uu
z>!;lG@~-CXX;abO0-syY)0MkIy~BCxwp?$8MJ`ZVB(Rm6#?w(sUg~zasw!x}MMq`u
zq;0t>pMw>wJp7BpTc&u6+T at 9^aD^v1J+g7ekOkInLQE_VOZrJ&a20Tg?^e25B!O-(
z!{;U1o<T`Z_F}KXx4KW&RoCS1u&M-|%PH`}o$2`amN6T*G|bofE1nloGVy4cf^~c`
zx97y7KN82xf6UuIOXr=~B;Qy at NqFTQO4V=5s#!W^g6Qzoiovk;6?S{wzQHhdEY|o3
ziQ6Hk(7C0-yKJN4#8Krw@!{YK?~<#z-lZ1#iT#jaJlvBwp&&#SXl&XeuDO1K)w}V2
zz!FLxFj^lSs at rH=T^eE*dd3?b9TK#hJlc~mN-Y<%L_Mm}<x2TdBMq2GDR->c((m0J
zsGzh(a{o at tW9m$k{Kh9#i6~i_zPO0^>&cYA3BChI*P{{^vD4>gt<6sCiLV;7H^gTB
z!ecw}r&XnzGsRDPu?zP)?k}nt_iUo0etFm|5tVD*;Q3Xx3jVFaxXbztI74js-%?`R
z182!i+e20_?!Xkp^)8iwjU+x*mfVdZ%Ml7bA6q+d#~BXFSa)$BP6%!m=^ffg9^YJ-
zcNBMnj^gfS^0s!8JI*4tmXUn8w at -vrlDl<$5s8y;z|)itZ3GTM{dJ&46$2LW8gjE?
z&Mf;_PgZ8DOprBuB51;yD0l2sRyf9SCyRC5Cc9mkaMCD(T}^HlflqudF>uVk4HAEq
zL5lv3u_aBqpSYQ&T$$ff5Zu<<i8h7!)=1LW>7*^vKkSvmfEi_-Red=Jk}yvxbi#zB
zEuj6s^4%jHzR~u3fTJEyOvIW39EJXE>epeuu1n-E&&2%L;#ISX2)z6koCw(bp+sCr
z^0;PO)vl1~eng{eqt7|ZH3sfVwlsiVItlnEdxFS9_U#9#ckYnew{pl6L{r-0XkrTi
z_O>LBr)?9-znEyYcaL{grYW=*`S?b>ixD49%g48K9 at Hm<>=J8~>GV2fzd{TDJ;tjv
zx8;hPIAUcnudG%CUz*UF-(UkgnaIndeBj&n_P~HkrXmBjge#Q&v=+Wz8;KnT;8eh^
zum*&zXZkYgdGX1<g?-1)E8?pr!q<2ITEeR&{)*jQLH`5Z3mZw*E?;vKuDo`;YkmgT
zfHu#DfX;#Qv&E(z?;PChgEZfz)740O4La~AZ)<EfS-sxZ at cw%LJ at lCwgV%AKR~_7Q
zS6;6#R;EjtZ-BS1z|OW$$3eii3cyMSv920KdO<~ERDHtu#x-1w`98~RlZ=0noq~F?
zX1x!Rdc`VbI*X~p^;{Q($Hu=Xs1!wp$lx>CrqT+I^0XaVAM=&hNuOX>N;2LBWA3)!
z8}Gu*_2cn!yU_786@&T8;F_<v_5aEdV$EYbA%i^Ka-9`CqX~)R-PMv<t8A9aI1;ia
zklx0V*6QFV)rTtEa2qtlbo!L*6{Ja!1{-d*A|K2VX*WSV+%9mc=zEXRKJ=*RDBv99
z<8MzXz`A-SUgca!VSl>2!oF{CVEdyqpC7-U*`G)Dsz4Fg_#Nyc4a1VGn={jWFS@*g
zIc$QReiiuTcL?rA_c(w at i+}kG{^hF4z$IMIfu3pZN*U%KV$b{+ct(@&5tnZQPc)>8
z4+7r5j{Mi-lb<;;g4e*;;=Rj|%L#Uo_M1rCu31*t&m`-)zl^bojr|JQaYIWT!M#TC
zsFFbKfF#g(uL8QX#Y1j;bAUH}Q*;=3)dzdC5&yQR0C8Td3iWiL- at bvybC7xA5}BvB
z$y$J4-{`@~z_|e15B$)Vk@=ggXjzJ&Wre|Vk}vE?2P|x&pP{CDs+XpDs;f&q)#K!z
z>O?bDYPlwMqbt5Dvni*3;y3iFI&?y6?_KyefA9ls>an?$XI{+RpLuawgP*^0QpmI!
z{Zwh-%}4*id7#N1z`fJH{7|lUP<iL?HhLNGYSvoV7SM>~qq00N at wI4I`|~x-;l}~O
zs~`J?bb}7umzDV&vDwmhUiA^qjy1sN8dV0A(eInDYC+ic%zTFua>hL3z&?ZvY+Dse
z3en!joxhWDg+Tt?|0?ck5x!SJZuJcKhrfWX=!$sF(>5_LD<B7hvzdLs*Zk)wehvC^
z_UCK7(hlH7?H4Hx=}%7pReBYDvwZARoOT at iCn@Fw?^iA&Z6kxHmjO>7OWA$z_+Mq@
zezbO}U%Jaa%=tB(8w7XrLR(GNLY&hDwk(zd{(}SXxQiAq$k#qvM(%{0 at p8xGSX1Mv
za?(~;ir14acNh3m2kf>M{^Q;h<dCznzld3 at SR0mW@UI9ywuijmNWNhn4!Aub?>P4x
zKr46-^%R0<!G?V-3)+WoWvr!P7$yl}Q=qmbJ5YN8G>$f*Ul`|KuzwSM{|R)|u?_>Z
zKO*fB(k^A=EcGF2gI{?#-^;-IsSyP8-&xbfZ^V2xd^k4gJJF~EYd6XGk$B(SJho7I
z at O@U8Q~E4d_h at hZS;dMx$gqa|dI@}v&ySa9`s at ZSg7+Vo_o7hzPxolNcfi&Q^4<BC
zrbA)B{e1ok(Cm{gg;pm<#s9&Ip>l@&=yMaabjyUb0YAexZ;NXx1$&8*dHruttCaUZ
zZx73a)zYAJm1f*0(Ako)DiS_sMb1wRUfZte0S^%S7d#}$$EV>QsKI!a(sEX}axAO7
zkNxJqs8jz~7aMrr3slKkrEPbC$_MMs^SPV0d44(9i>7{(>%1#0Hx%~slR4TRb$xl(
zp?Y0Ui?qDwRDJpHRkSIy#pMEb!s?Uxxjbop?y3{K(p4uf^>$v*Y+GKh)W=nNZWlQP
zO}jBW=&tCZvNEJdS>dpMkz!3*NBY_mA6;8;==;EK{o<=V`rH#V>?#Hb_0juh*O`;r
z<5csaUCjaA`sjei6nxZtEB8)XyU+d#@7k@|^QE`?yrluj6nr7WKX{nZBo>BL%n*g%
z4m_dzuUMF4K%Xbl+AQ!Al~qpK2Mbv3J*OPYmFnFE+(7^Cfj|7ycJ_)!DfM{&(qDS1
z*T1vr4<6kin*$t6G%B-X%zl#Q*~F867{`lil;7wj{r9ioiCRl<zKiy6{j>d$${9)R
z9|xXz^bzmGa`<fuO~6`&uX?Nx?d5Cu*YNj=cv+z7?|n6VCOmf&{OPrzK|GX%zg;az
zW!8BZ_u`PB>Y_{0rAj*Tl7f!9lt_nP%BMfR)J8{lDCh{-rBhRoBLuzUM13~aeh_5t
zb7~EsX?-dN4-&Fp4 at TgLK|*&Lp at l_w5xu1KupyLHw-_>p#W^kTeX~(4ig6Zq?`$=2
zV%orVZ8f|S(`az_Y<Ma^Fx2zv6rQBXoN#90RM7Hw_n6-GQAUNV<9T(c=v$%9oxd-e
z_eiIVds7?mtW_QGZ0GOb%`jzxhRZ}TWfuISObaQ)%l}jUQ1_2AI7dFX?y?{9G8c)z
z1nh_SJ9+a{iOr)!Pe9K-^3j=A$dJESLF|J|H1)*Zj(ymc5qDosQ{63l`3K$cRfE at Y
zwg8`DAHez3&93TC1;63}Lr)AG at xd1e+;$`E=Clwwu at 9~jdv&Y7_o>LajBm~2K3n+*
zy at F<+eL2 at a^Gg>0VpIB^_OjrPQdmp3%ZlIVJCI%EP=S7aPtH5v>NT+6>QG at tf3gh@
zW`;gff`8CY?jA2geImyhGOCpm8ZD*STc^;zN7m%F3itN<H0OXmcU6jZo1rh2Q&Vn9
zXWa+Pe3<A_<uv1I1KbB)rJN?Bm+--LW`6czJhIjYn3J1m3wmWAbi)^p)^be+8g$(v
zwj`hmW2?w%LAlG2yTP4dANZgr{_zAM%J(^m2b3<!#NJ|{u`ku<yPP&_al9%pPmpfa
zgNBv|e;jJa!VI_DMr6=F=!0w<?1xS)0j>AXkJ^Zhs^4{>(<a(QA6%FWx$cizeXD0Y
z2VWWRACl8lPvhMEE~h#0!qp_aU#>kaiFQu?|85iVG#|Cn!Vy`TZmcs`@V7t*rr#yH
z at 1VU#kI+lExypU3`O!)7l8703kVS%AOj?Vp+;9D|3H+P&*;L$><Z87zZhRQw&vP5A
z;<i`vP419G1Ao3)4BoBMHnn%_?rO-`vcgn(gIdVhUWZ-P*-DK#Z|hKXobvuoqbiLB
znAE9+=)OY-7&c#F!#11h*&wg#-C3bKv-fCM>dvENPcGQn(9f-qBy;uOPrf1amSCR&
ze*zqk<7L5oJgz-zqd#bkl9T(YD<um3uoRZNG4~&n7jz5g9ye!_`>Q?~I)g at nN5!h3
z*M##7 at S4dco$Ah}1C7%d{lls5_(vDmqClfV9Qj|v at 4%b%IoGjg8v4I*Fq63?{@oLz
z94gOk$dwNX1ZJXR^>mN>m>MQQE;(z|8$@?=vdX8b;jwSk3?HB5h8tG!3nw18C5^fa
zy5%#r6Qf><Z8i+Vwi)hD2CoCWC1LE!8}Z)Tq)}g|6z%M378 at BmI#K=VVL6l`E#p(W
zPN2OigH9CS at P_H=r)1P?sPi?fEe*mq1eXo-1kHw5LvYtO%pkN`rf$?fq_aI5TuW at c
zP*QQPLz}4~HXk^)Om$Nd{rfw>H#PGh?>X;<M;>)qbpDofI?Cballflesw%s5Fo+MG
zFv6?2Qepi~C1K?={EXuP!g*xg&xy}Cl;RAn20!8&cc1$wT{8YCyE!V1#LI62mecV^
zb;-EG^5}W#t-bSP)vBu}=z=YQ)NS0|AN|xw=2ZNvS4+KcyIg!IrbV0*(~R at 9O&lN7
zD$b2*5DQ~2PpG0&^*B#6qy4M&-1-Do(cHAe0<R`gw(F6{)JGbJh9OrE1G7fjw<x-P
zRVjA*(Q=2{dDHm$@n;{o((>2doHv=T)_wVCt}4rItxCA!J(5nF54}0>C93TGJpN%z
z#)DVpI`I?SBdM~cK1$S at _wZF(9{50Y=upO-=O4XJo8up#tYFT|kdf%)Ck^o_>E%SK
z%rh~uXWm$!;w7aI-kj_5`x}tqeh6E!%}ee)&<S$jAEKrH`1at7C+!l4D_D#9UJ;DH
zPuTUnZFTrg)jdasv+tTUA9Rz>IWpkGq|A?2jca;mOkaBPD8QzLVgDMMOl;xwWt^9Q
zhOP7T;~HAe)*c6ae9$Hww at pytTQ%JP8>Vk`)p>!gi*wY6oTGx4VS6YW+MtIq4Ys2s
z4)_1&(Ex61sLyvjM0j-f-s?M-4Id_AoEOmBf5g-S8{ixGHs$U8 at W&p<?5{MOy`#w;
z;&>B%krRJ47}p?hL{n>RYahOc|IN?wt)6axU&7=Gde{QLCy_t5zwhCBqDKPXF0DOw
zp at Zc`_&&q;tsYZIUYzBr at Z~0d&gZXpC6RYwX)U!~?y%{MH4Qlp`Kb4X*EZMCwgWJG
zIe1TUhXz9DXxo8#xr1*ht#|gm!1z%!WmY&9@~@mNNc{L<lQ;YzPM?@4>PtGmgq;?$
zc4J>p=-x)hGD~(*9)pj`e2+}eCwC|Ar7ZXzpEAU;3&*|BX(xEYxM1)nwXF}pzfp9?
z5IPO!xp2f5V3;dlX`JV{WBk&c(mQGFUGR;&*5mAf at 1d?b&(rngds}Nvun~A4G7)+3
zL#tyeQkEx6Xz)uD@*Q9kmDmmSV*EEjPc;Pf2_4#BEbkn*q_R7n at Ej#uQqtj*#@x0W
zIyR};pTcp=!PnOQ>~?$4yeZjByrsZfoP)I2wh|xML`HPdo*wgL-FD+6o!9Xp4)iAs
zt+(s-gxA=v8~|U3oVWD}=vNu(SKop2>7bdNxRNS9z|92CUu{1eAXA}#_&2aOHeCZ=
zeNJGRbwA!Sa0iy>>i9T+U{`KmZo*)gLJl5LW at ikcOMn)$7XMo70-X`}(BZOIr6`+*
zI?^&x4*rdQ?aoKOcKEG>JsKtO1<Ywd_9)=Y%sljEolggxWoU(+NSv)x1#Jd5L91A}
z^9Au4L34iJ?gm3=OmlwcZm5gxd|tPC=j2(CGa&fjdC+crHJj}98ps^x^`)o$=}+!t
z+P83%o!FR7sdY(D(6Q5yr!JG>2leHo)H44|&d$R>J7$-Rng$wA1?XC+r#25T%iDli
zG at I%X&&Ynu!Q45B8;r!?A#30tWh+s33d%xm6!|YO`4^J>u%Ud|h3uj6twJ*Qb|KnG
zo>=8sD-c at J>&*Oy3k7}qQ~sC?eG5WY06a3)fd%`ZD&PK1^{DH7lLl}`AmFGV+$Bh>
z2|^o3)=X*@qCMcIqlkS^$j$m5-&DsnG;nH-=-*-oq63zOdx1l~k^O-(KCMEuTV~0;
zQ0iHEL63GH<37@`GgPprkM=I0y*ji9zng!-G_<d2#%#cA^M~beEr1(l%uWz3Dea*N
zoCJOPpGA at JtG$+XU2 at 3sIM$K>P>27vr|)RW6NffZALjqU5C><?IP#sGD}agc?Ges$
ztA at xiku<_1cVJ~|0SB4eHi`?qmZP0lhHYwM&2JOrcJ1mrQ1`+ at S(t&so`F8-V3nK&
zeUkGJne-ec-D#n$JI}MWE0w+PAN6?L5YA8Q9P~P3)ngs};Uq!)Ic9B`reFN4F3?Fv
z>KbnAX<dJ?6PdaSm_9wNYn;`9x*j{Jn0_1{{&(jg|2oujoeF-1+Vz0r&<tN`PdX1m
zkG$P38TX!z=4|uy at BHOk8E^izG~cV6&X?;P%=kaEasCjU)Ip5dmCP;piWlG;^j1)C
zNJH0n<;Rt<tN-6$I}VDwKatZ#wxnmaQTOQC4kcLkIVpdzueClB3>LjIS0*l0R)`LJ
zo~$q5ZoXg=v>eq^(|k;qH`3=EO1eH1<NzLMY>n^xE#(h~A5(hvz5uzi9A08mX6GUB
zdK0%hU)oP)`&1$SFVsD2xx<g*+L1h>py52FsJBGW0v{u2{}Xv at qL)BiI9Ep79FD?Y
zQZ{(Pjo=9rncH=l+P?kC(*k~0&2!4ZxxLfp)WF8hZ#+AW=)A_)Le2_nvIsB~ALqnH
zK^c{Lp(NnDg#CW9#JC{yoVynJ90?^C{UGq=NdtQF{T}4A)Vsq*^5$L;s)U2k?GnWW
zyd?j3kbO=M1)GM}Z25hZ9iZfMx>2?}=y~xo%C=bxzDg!_%@OH8lOBWr@`~NC at l5Vk
z@^4(qSY?*8@~I&u%sF+UNm8V7N(<3hu*PuTNd<Ps7Y_9M;R{DT4)5?eBfb5bcdi)z
zz2R2|-&|68IzjpfZ5H*yrXXaY#_#XTOTKWmm9^iYWrD_1%J?WyvvJQ{NyQx at XB!0R
zBWq9t+I!ZxNI|7bnZ*!L)*d~h%z`_5XCre~7vP+>$IHhU07qzXmcsuFa32L^bHWqq
z2wwNS6FJ|pzf*_L7zU1QLK~_H_>Qv}@`prTgN&D)_wmVW_)eHmW-0eETNV(!1~|0u
zkQ?l(-L)l+i at ao}_w6M%vCGgt^wXy=^$UsloYcoY#W_g(!QV5^?z|VNVEn^u+Q2z3
z)^IA|)3eeFyXym|@l+#yA~~NRJ6SErv7W;F1d_i4_RYS6|8tbna}rPvGT$7j^$6~?
zkgq(+m<*)uS4mlf^8^yiQJimKZ`Me-4}B>ox)BKb#fH9|f0^)<!)CFmEtuR9Vj*mk
z?t?AQc)*R&CSoNb9*6jT%mHlr`yL6SAtNI at y>HLvRw3jvLe~2MCW#&zhr2$^{b$I6
zsK6r#3s74WL1jESX!mJB4UB*FuqyqI%|lV7?e$}EZdA~Ied)8l+iIl4U!78m^I+CF
zC!F<RbgS^CL!H0iy^eFbTIE&4#DC(H{1v~%N%|}PBj*r_Up(#E;j6iHZ=htZtjo^C
z9}gV<EB?oT{;&9-T}y!*t=|y+Q0G-MGzPls7u&Gsh^$8Ye;r at 2q&beV++lfHGFc6l
z*NBV;Uy*VKd$Wa-ZaOmy>9dgTf^-+8W6bbj;W2b#c2~Ni(CbOk8Nicza$eczk6X!3
zGo at Po#nQY#HBl|Lu{1PzkK(aRs9W=*AkvcVbFS?xpO&^=khM%#fmS{4UEAn!?~}C#
z-rzPuo6Lkg55CN2&A`S-9M2A3%Ma!wO4!2K(UHb8)S3 at -yq*lc?&U<UaS}0Wtcc3+
zIhBC15L}OafWI>347I{~hCV`_e1P%Ndg`P#PMk{TyHqgy2zU4Rl7E(A;BDC3w9&!C
zIOK8bVO89wAu59^+jM5Q4uP43zGp8D?BB0+ID&EW8n&1xxKgPTzM^DZ?o>?eVdZ_E
zQ7M(?QDr1AFRvCF9qdB_!0q)X$XVWZbk=vu1fB5Pj0xXUGM-4OvYXvUi-mLW|Csiq
zPum-M7ryTNhJBS0xG+iRQXbgYp7WzV{`Q1Iz{uCx*}fO2H{gDHc)pLFzFqt1L!5OD
zz!T1}j#59+ZUH~TZ+xb2?)1ji$038hs_BiOFGF6DzXtSVBA*1fp71Y%X at -ZTb+e*;
zZLQkBB2ff<!4LNm#@Km~!1PYUr?8xLM`?>H65Gdrv?et31V0P^a3|pDe`CLEGox^)
zuI)RTY{5B|5&y?vg~C>UR58daVHXVlqrTtI%bivI<o=bjQ^olt#JT?-!4Z}u_ap-@
zxF(7`p!IsOOW}~^^y|6mg{gAOieLYJmi(&J4Lo6V0H2<NT5Bob4!y!wu?@b})vnT!
z^AY}k*%I`tmB<X9 at 51@k()O`$UD&TfqltZ=r{e<8OpY~_*l~`&qfG2668~`EBYu14
z7`ql at X~kH~?7sLP2ahQB)fbM-w#o%QXY&OTU(<9gcp4>S+_y`;^|*I$1_f`J)AhRY
zW8%+d*1aFj;kG;HjfYC=IY*`3B4_G3<_tbEa_`I8apGe3_I@>6>SIRV9)$f$bVmt1
zhj|&kOS%ZpVR|dUX;zkRUN_`Md~#!-EeG$8?3<_IGJJb?<lDO;!+Q$*3ABFj`r5uq
z)Zt&@K1KY?L^TutH=zxTTS4r;PuGGMr6zNN{HY9VVQhz7Lffv9a!<pr at NM_Vx7~>v
zrk*bu9I$)@4hEh#ZrMmb-b4KT5CzlEm4xrqwquz8)V71%Q3FR|*E`G|_zP&}J_M!*
zeNAGy()yU_PF*Q!wK2F_EO<=|VILxTFah=<!nm*F9w6m*0Y~YnHQ1%|j>CT~@VR<D
z(|_dQWDU9DE*QSYmJi=!<c at +bp?#JFIuUkRU|S1kwygS$Drrzf%lCyT_t9#b5qV^E
zysCv2sZ>np<YuwTsZz*6X6F6^TfDHjTLoGR^tXoV5}~d*NqE#<(s%Ta=wJt;-V>--
zM`&ln)+lJgy6v*A3=+4Ojaz0b0zB8j69t)%cza&6zrJ%SH=*rI=G~Y3qV5&sSq^wi
z`0cYuo8o&1R&Ep8b_d?9OC87u>{}4rta_bEf5vX#*>)gIP+{mspEO&@J at j7xi7n00
z_uLOU2k3fhq+*mIzIEYSKBlWKv;we8wxiIJ#S{IR9#U(OeU}e8qe#In&>~}C_j5~(
z-bISJ?5@{<4p}*6f9stM&SgiSldq1P4wyUXydvt5Dgo<eFF7x-lK-$_D029YBxe*I
ziTm)Qyzu(&nbHYoE#-+3 at Cl=leExU`&PJJM2N?@lS3cPT8zE0(KBB{!PUgZ_Io1)n
z$MDCIiS at 3w!`M+s7S+_10vp2WzAM?qoDA5zpx38RO>~jhai3F(Ci=Qfxjx0~IDA6D
zUh|a_=!O_H8sxnJKPfniKsTr&yxQS@!A|H$d2iRBnkgCS*HM-RW4})J(%&$4*V2Gz
zeNOE^-jxDc_G7?fiKsJgq|VV8r;g5|)s&G+1|23!68=TD=S9$+(uo}_gwXlCnndfo
z&JS^%Kx4!h%R0<Qiio^#yXvp^BLoif?C4qw+x*6QIcUlaKFMvtxoUqAudFGXCuz%0
zEv(zey6Z0!#n&~n`VqfhCxgBt{NW7u^$3T+5Q23)(bY8H(y-aNxA>69oPLofS*|#L
zRGHv(IJi{0Go(^l{vd&+eNaJbgDS<Hkdcw?zBs3xQsj5DE5+|}Z(R_Lz{I+Mb+ThY
z)8>>|<lg1&+43hrm2=d9r|$tK?h5kZ-CfDat9c-&QP(a(5NxOYAj&t|?u~r{TPF;R
z{_XRCLk9kLe*_XL?R;rKbHe`R?<K at 7-!}*JgE=D987F9ieQaHR_X8QN+no#<z4{9u
zdB}64-V=*vKS*S0d-hE%T2Uv8W7_<Ir4 at vTMk{}iPWj3%>iTCtYS9m at Z^+PKE#^Ps
zz;7w!La`o>s)F8>5kJz9<1iE0ty-Tc|JJxwIxNpD_%>mAeD`317oopYFlmKOk>3Gt
z2F=C?vb=!Tf?n at R+%Tp5h*xC!n*#WQmV|F5wjcfj`HGd`X~uxpo=^6^{oy!2`90Q&
z;C0#0+wP6?b52BGVhH?1?*lEhht{VI0j|ONMx8EVH96l&IdTWNq#HS84}ym04L^$2
z(+}f3uI>CrVP_TL+kA$uH&&eI>4&@iuy0q`v#_&X;d>+O+0H6O3lBaan01;2ykS1^
zuZ6lZ`*M=!<MBotqAticlXH=Zh924pUrm?;>l&q~H=*uV$T_XBu?i6PWZD at g&iC}g
zS+LIcYS;^C%VDG~2c|9XC78An(3U6DR!;IOXvY(e7uIwXbj`+iRCt*{Z>^(N)9*4c
zVHse;8o-39 at Vlpg{q%JBSCpHiAxBlW73O*axgW;B?+!bw+5p>rn(Y#tl at j!G6z=Vu
z<bMgIgieGt{tW1GDapRDlO0Fk1%Vl|)$$oQf45DJp7v<=+^Jrg4syrNr2V!`8HvB~
zBm624Ju^?%^~XHs+XKMt{m+v5Z~{Jrb8Izy&};kdCttxF__$=C-QN;*BXhrinUgVM
z1LnRi>^IEE=#lvt?b{!Ar?ZNczOq}H2>LnvPhUOdn-(^P*h>H%_70xk at QlGTn$QZ+
z|L1(qhTTB at zg#$sd4Jl*BBqT=Vk6VWFKFYrkv5(~8#n$}8`WrI(nuROQ1>r*CgFLG
zX+smnt}pKUKKW;i<ywf$Vnp~BQ@^9Q2=!~i;F~GzCPFqdw+qP{M4qKCO0?yS?^6<W
zEEU2DO!_;5T!yynhW~)`CV44S*Z7gPCNgc!#&_3|w%%saS>i&bt!Zd$D(afZ)U|}P
zh5f?C{t+>E2kck5H~59U at j`tWzBPh&XtcuK6kri;9ptRspTpyU2fkQ5>`67S)fGwh
z_#4kBVUB<81dY0Ne)g}u^RojdTBU(C^Q8S+&<8>DcFd<ztNmUgu&g#AaY=s9%}o`M
z^T`Z|qf_m#y^tHAvn1GyowS1gQ{Ht)MR~0K0E)s2*ocKhgMi$GcvXrU^?D62HrRdH
ztB7rbt01C_y at VKIp;<tM1%{=#z`hGuP!Nz}j}k>C#DcV4m9jy~Vh2$X{eJH*#CXql
zzjN*%_nhyX`^WE0eP^C|ro1!H%si7DNO+e;kq?p}OEeTFqpw2FA#|!JXw)~X#68tu
zo$Pu*hDi1R>xJQGELr^;kZlcTBK1wfP&OxR+4LdXuCl<}M9}euv-D0*mGu#Qz!w88
zKO7_cOl4ZXWu}q{U-T1i^b-ngqTb6Ad>@NC{UWTG=Fe8(E=(ToGasKob&i=VX*gjO
zR{z#VSl13+Wb7RF4bmK{P1EW@!DOd~lX#1nS at dZh-oC7#&=ZdxTiAH!+IVAH4D1iG
zV_0EZN(P5XNoe=7$>W90m3G)H7v{C$UdWmW#U41 at i87U;Jma+G8EI?YvfF+?``yX5
ziH^8CD-~o}i#yKQ49;2OqpFYZ$qPDFw0T)*^ZHsV`yl9(;kL2toDh4lQIIbfL%uNd
ztX0G at tii&e{|0)vi$>yKDJ7XS^a|OUU|eJWp|M8Li-$3S)u;1Nr&q_;nU(M10gCUj
zhADevMK8IQfb(sHeXDb6NBC}$XR*BFx!$Lc8@?SOi8%5V_C=bGTzf<B;|47)Ej{ky
z|KfyJo>+Ql2;MQ5e>>zst|+l?t7)Qa&G2~1cS%tOjPRV~n?+)L2N|D-C-*w!r}(x@
z;rt{d0^@R{VO6IO<WmQ+*N!<9H*$Dcct|AldRb(#awwcTOXcP)ZIARG9A|UowxtMf
zjNB+_$~f4~$}&CTLVg$K2Gwh6xbX)KC$%($%KkPYkt>1xG-&Dd5c%Blh_JbpS~|M5
zbg**O_Ts~=Jej?J)A&a3N6_OdN{I|+)5d<$1!3MrMkh11In{MA^2o?2?9r_1GXU=?
zb_JOj=Oe6p#BR`couxHsmq%`8ovmm66VxkvwkXsuNw$-HqZsog?;zrEEQl0mLS}SC
z1X&m4?PBfOmbF at YB3lnjAa|_V9O0vzgK%%(e37k4YBbMidUx<W<j0?UIkYmkXC3em
za at S8iPd(c0P>r>bxre8a?v+Wp?5~Z0UZQJ<4202Ix#2I^bK0Yo at 0LCw!aPofu-NIq
zt;H`2SUIIi645Tqd#$jF5678M$S|Yvz6suvG>vEDMTFv9tmtlHWW$nt$SI>EkQVnn
z-!a19 at Z^I$cATk(tm#i{db|${nMQei2ip&I;aKn3pv?`1+}kES34POtU1LGM+=ty0
zw<VA at S!qp$m95kHDo-Ou7`aDrokSF2ObeDhvQS_Sk-C0fWyt#Igzc{3voEKuxq|lw
z+uhiCM6~!-4%WrrTg2Z;wTfil;Jy~sb64q&?yl116YM(ak2z>m{d86i5D|8;)3U4{
z`t+VtNNc at r{A?c%_hz^QShsc at W$&0TXV*KXSR*|b>EgX?f!*A&dhZzTcvc^1?s)G+
ztqFa69s7}=+Yt6{(N>JNsl||QALyg)!wwh&?6qS+U(^TY;izvu)@}4NIXmY^+KRO}
z<5fkoYm53w;ju_LD}x7*Qmt?<Sj(GzTHah>>3|-%vyidr{3Epf(Cf&q{je{U(Bq%4
z_1Ermu<1mL-&(Wls~QrqYhmmNM#$Dd?D_N1PwQ<rRJ+zpWA_`^hqHI&a2NA5_Ucn1
zr^)Y~XLUbk=WdGxEL~X3Tq at 0IOf-CHcuThqut=x8#(j$YLGe37cC7hpC2$R}XZ^a5
zVxA_~t|KL^yL~0%RRXn`H|%5Aqm^}l8hE6gYxNW1F6HoaxEt8F1 at _`U7dZ{*s~S|X
zbhjNzv6{?nI3 at V5MbCaW?|E(9%$F)z$Fvd2THS!qQ}%?hkCP}2Ig(?#J^Y9aL(cV+
z`_eeUM8Qe75k!t*?<<(fuqKGdd^rJk91=RZg?NX(w~gTb$st+6H<E}`{Uvi_v3`*9
z6spn?$Pv2cMTCW(NFtoSv%0EF!*E_Iwj;|Gb8Qtd$SjxXXWo$+9J?da$2n!}oqmL=
z9ZIPM(ABP#+QH-i8rW4pDZs|J==sJNCgj1y6fgk>00zKkKtI3`7zfw_e*-1~So1)4
zkBWQ(^ac6=EFI$kOTY$j044yAz!auc3pU^W$--fgFm3j?cluRbs9#Z*-EDoFdAPHr
z;LQ4x({*bO9BKQZyYS7L?%b}OB}ZR~FI~8??q=@URrqEqFgdC<ZE8|$8k^Qn#V4Qc
zxYKo2poz`rKaW=0{hIY^V(`0Xw!wLC*W3twy`rK%|F2g&^VgRYwr}dre!H at y{^WXm
z7xvPX^n2q<^g3NhK)WmPf96W`@m8@(no`>Tq>`+9aQyM>>!<!PRdMb@$JPz%OJ59b
ze%5u!H{<(lQ>2DRJ<o~e<V}-(y?A=Rzpwc5$JSkDzONPxaeQDl;G{61E^Kw3zGY|R
zz+Z!$7AKgD9pl_SXwhcX4|Yq%zb#+wd))bP$PyL3aowCJ%>&(qHLb$r8Pk^NC5=p&
zu3lC+RPU69*I#B|&APU2zEeu@&A#bJ*1x~}(BCT7^~=4y&uP9-P{rF@?wY9j6e{ig
z_3Il0Iup6m+uFo!uXYEJzxlO~-?^@Ot1L(P?(DEW>pj#vv%|j~{g2Usht|Dtk&jCf
zOZR_$z~?Hbb%{%;cc7<U)Vc3|y3+Z=ZI8jc_){|yy4|L}Og#H?SqMi_BQePBs)#uK
z2y>U3xbcU(8HdbgS+*%1$5_6PU~Z6UFuAxBvxvD$Rw!ObeH10q<Edlgdcy}oSJr6e
z3fje0vWZzkHZ$vqhS?iytWfr#I<CL`K@`W~o2CJd)9d<9o7AE|W#Z#u<E^^}{>AF;
z2+OZJMvWc!+=25+t>b`x)zkW#-kzdwR5^awXT^URXz`2Xh{0uJN15LUbeSXlX@($b
zD?KY=lbdt0pJ;x>vPB;ISI=D%wr+t}uuI^E>={1=9HF=Fkh^W#mLc+6lecJ@|EamF
zz0WUL=X*v|Ufr+lZtW+H_bZJWl($VgZ~kKO^jh&}uP at y&e|NQPaJi;#`rWpsZ|*lf
zo~UeSnRK)Bt<|-sUDlUgKOcAXUB_2RiX#Ds(y}*@6B*m0kI8rJxp>NdS5e-YeK}`*
z4;GyFRwP9U(hf=IoFK{0$D$KvUEH(Zqi9#e{G5HkUIhokmVmzmdqvv*I|MwPqUEa!
zdaQK)h!1lnizm_t&YGAz*3o6bQ}!3{qR-wentZVNfA?puopx7T${4XPMLIC<#>F}E
zl2nU`1j(ndch9>WzQXhkONtqqSefUT-gUg+o<`YM at waj&WxmeR!$ri4BmF#Y`kOo7
zc2N=6mtFV23yv;X5}eoWd$sWCHqgP=@4td-qZ<)???#LQ+z5B6KpU^i$Bh`Qa3fZ}
zZp0QS1pd|cz5WrK+(<3Zx!H}B&eNsChUvjQ71$0eq;>vgh(`kpft^5a8vn}7|J03a
z9PUQ?4s#>s!1AGPM7Bymd<z8xH at HYrzJO$&5s<z`y7ar at pWfqdbyh%D_xSI7DInP$
z0wRYQ^j1LL!({VxUgt(Gu683OFrT>y$meTxG}&diliR>tVBb-9vi`8UHvV=I@&k?n
zJ_>j81SXq~5mO4C?B#@$@iD*Ky{yIUUOGQ^?6wGF at q$<}p=ACa?g*UQ(z#>eRb=+X
zN3q}Hem6T#>*9ZKKk4WVzev7C_|z&k&ZAf^qjTG}>D;~F_lAGVB$Ba+|KWR`TbF(l
z=xNgaBRJ55H;8$rg(Xu at miGJpH{}l~Uq&f;DY6!8>nXJsWmS=H8l$WJTyK-%p7KwA
z`w{QYacbvBA9Ls)HK}>f;Ci8~boPeJ*0s^*NjpxAq{<44nikm&uAcqc$@jG9!A15B
z!X01#zQ8T?@Pe`KC35BczS3EntH#W}w{Gu*SF56&znc5>x9i(4B`*vWXmWO5 at SHiy
z&S;deqDIP*S7ThOjvF;yf4SrG{^x%mUPUX4Eia!sw7~zCSL)zidQ8)MX{*Kmv}#X3
z_Pos>^j1qPPS!#;hJS2s736ws*d3`p^avU;52U84tXV_)Gu1$i)CgnjNaz+ccnJP~
zr6NPtl`dlc%N(ZkHopDLh*8FwrrwtfNK+BxR8`!8Znx;KcP!|0-(xrVqM&NY?;FB8
z+t2J+J}Nl#P|U+O4jyGQ7IfT;KUXtm=7f=ZtbRB<Jz?BHzm+6bHT{dY5gP|?S+(>{
zuII#)|7m`%uDtkeb!8!N=AG%0yFr7`y*h7t_(7BwD4$U(`(LPzW9Jw~so(>PKl%5E
z9dn15D at qh^f2h3BwW_53t#9RprnSXIPp!L)-fSyD*su9FR+U|NH2+e;E1OIIUi|qt
zi{7r?Uqlww#pnAJ=Rfl+IZA|&<MZ7v6+QJU&VIA)Ph%m~>S9i*H~UiR{UbQ?nk`f-
zWlE_J{s{C#*fIFq!|yqz-n)vbt172jDweY{V?l0>4CM>OHvyD-tB51VJ>uM28O{O7
z5LY9>y<5bSLSJsInOqer$nBC*tz(Y~@^FVuz4r;Pu1q4xEr<PN7mrzjGq*KcEaWwQ
zNN)x9F9_9ehvvvta<r2Wszntj#9cS4u1f-XhCzQl;wzJ=X3sK8z3(*Q$RR_BrPK#@
zqb!?v^P1Q<d17tSy3X+!VGMNTgd$vu at 1i{zC9ydi=t-$VE>Ly1vMJ4NZ>nzPDsFb5
zG16X#G)JIZyCy<zPPOdW#tFh58Af%OrNQj5DimdsfIcauew&Z8Y3XK{RlATs!;vVH
zxY;uX337!pPEJh#_S4rQJp-Iul2Mu)6c4&BD0T30<awEg^AMm1W!YP2mZJ(qx#E$(
z6Zgc7q2Na)N4|KAtD^QH!Y%M$4aPa)iV at KBi*?Ups-?q#H_wky&GXHv=E{Z0yPT&`
zO2E4nlsdACo4p}i5Ns_*{yr#g6ln0LT1ppjQ}!)2W2*0%We7uU(iYnxKSz<hN{lmw
zp;Ys|GC?lrYni(Rd6t4FCn-&<9 at T1_jkx!qXJ1TdRwZ(Blz4-Eu^ryVkWiY?2#0hb
z&Tq^ZIvVd1pgb~O%q$7$JcN7?QELB2FVq3@;h-+!1c%Y@<theYg**o5h%R~+g0EsA
zU4Xd*_e7u*>fVo&TN6N|ju0<~`#z8(%$+aBJH at LU@<sSwD5qMK!;sD)k-kdIW4dJE
z-F{x(Z{Vf>bMW9tr*mFjl%`La0RJAU<!&L{Ub&I`wo>YDHPYNgX^xsv>H%D;Riegy
z&NQmUnF|^!knWdwCoLBB9pJ#={%x*GOsP-p)TW_X83q2i@#>TkUW~g0`*!So3<=9u
zoLxvqn}E)c;ukh)#m{+lNiyV<2p)DLZ!yjTR8Y<38<0m8<bt6z=;Gx)khtcSKSbVA
zw9yE({Q&5c2nIc`Tr{d6)WK)yGx?PI!c?^L0h|obC0~-ntHXYmdanoMhxn(07n;A@
zpnk_sU at Y=c_T`{oiuJVIrFr!e^v8Jc9dAV_!z^$v*_A0zM!O22S~k`qt}mrY?}Cgg
z+Cp9(#H*`Dx>l9YWxEOIM+h&(=MbgIR6|x44L&F+O`1$7uMwavKBMYZJV#v_3h=Hd
z&LA;JTY`FFkd{PHph6puj7OhKpfrOx-0Y3xQ7^ZtR?7+C3H<U}h4Sh!=-_up8tnq6
z7VYOdch@}CL-Z4*qq<AgT|-;M_=10eAU7=mGJ{y$!HhxJe$++wi1WfjoM4POn#ytL
z*9nw*eL47#cDCUNukMP(A$<uu-kd>x$yAHQ=g0$Pu4$$;iQfts+{bDi&qd!iv?;_G
zP*?SffLVs|@B3o(gIzXh8`E)?NhW}<5nfE73~d_w8y0MR%D6c<U(mVuzQwr_{$acr
zH}ru)@2O^$#X{(xbG=;4>W;#j34zAQzX<hE=7jVhQ<S2tj%a^+NSi_ZZAE?iA&q?S
zFBSE_7k%V6O7pXblcSQO4Rlkjj*V1{2gZ+(OkUk33GV63QGS`(9n~(3yXXfs%i+e@
zx8)E^kJIsRv_<)9O5;A1YMweD^}CX0x^Q;33;$Zw6L`U^b7lE^0A&f{1S<_uM|;4x
z7^)?JMw~Lx9*Q<CGb<2=3bpM`brO9-ANMduqC97v(w4M>p2rpkpaV2liF=MJ<UM!@
z>bM?diKEmxF`%1|Hj+iPEXo3%zaw6{D^r||K5zx?mDr at E6oI!mi|OixF>(vW&l8l!
zdk&>u74FJ-Jft*!Ih^|HAjlHWf#xVmGu>hW-n0OZ^3Xn{;H?wr+>fybcd?bbp#LX?
zMqfZ2v?IYqjQwX&#x(S$EHg%xg1*y-YH9l!Z8Vw}L*aj;N{79WJ$sCJxrmcUsS6D#
zO@;&V2&XiUrBt(966PhH90}@TF8WDJ;aKj8a|vr>gsq?nZFq8!0QpfZYFF at NHvSz8
zQ4a9B27c*osKXqav?a~Fm?fwaTLW&kdpE*<M|oFxY1^_eALD|zP1?-0;8O#one_yE
z<0Yt<5FzRq|A<7`Q_y##1xy6Ncq;Y4IuzqGp)@Bkt{lBMLBZNT6;Lf%<>>oFn4_FY
zwLGfl#R+#i9slKkYi?mO#v60!MU+ylUxlN-^>`r|E7if+eYD2E!+R*og7JQEr)k<f
znSR>s<bK%|$?Q7Wj2&Bg)^i3q72@`sJK{c=ubX&PVa|R}Y{<^tbF5?W-y)dD<DL!X
zI7dd#;AB-2&XHS$bD}oNB>fId$RQw);2gV?sCV>Md_VR)prR(Re at 1o8fWy_W-%adu
z;$I-OI+3LX>xL)}bR!}SqIa~4ZOeG$OqIm00kpIpz8`Insii&9BJcX{(fP&ULkr8a
zVWwG?NhT<pN#>mxlZ;x4Sw?NjCu#R}Y2f=oz(_V7fXhI}Bv+C_EWJ9vz=%6%%Up^u
zF9koiUP`IjE{UkWOd>lY^PdJ*W_7KLENJ)s_2sLbq(L#Iq@`$bbSpFVNhD(*+j?Wx
z%eLcxiweCpxjXJI)fRepktY7e;zw~e7OUfK%zBh?Z+25?<(#%w#n>p#;mI+r(0<dJ
z?hxJ5oA>`)a{+h**$2*sR~_w_TqWa*tFEy8GFDiNjVsX}U^hy=PYee8h|4D>VLjv#
zYXlfGc0-H+V<xcB2ry=fYmES7#=qSNz#CZzQ|GfVVy0pZVF&r0KXfshg&8wX;NQgJ
z)Q5PP at K*qv0e at gLpi4tL&t^)HcPGFD{DI!|v(1f}lnPyXUGT5H{c)IWhY|C>L+4*x
z$;JhpJ at H>4ekt4L#q9jO-K#4J{UE44%Q`{th;{z-EbDmIKJ{cv!sINLCoGg$2PqL(
zg|%c0<cSG{k3Jp6)I#5+E}e)&DrgWmEA@}INjJ&Wq>s*xxZ;0VMf`I$VI2*cFq5>>
zu&J<*E at 0)S5n=w9&vt0n&n({o9{!UdV|4P+gs%l;h`ny at U4?u(@(0m+*`>Qj<zGH%
z9`Zid@?b~$<hZu%Ne%J0_?jpcn~rg+GS&j+!aoT#@uEypt15(JYCY-8vJT5sB{}6~
z9arMzD0cL+4S#*Y!QatyzIYh^+hR{^@s>o at vUYEFEpHvHVaJ7(Kl;xfZMXz9HnL*`
zqgloBVKj3#hNI|09|aHw#ImMc56m2u(#R=*K47ernwbFu0du%VDy0gkQo7S#DSh#|
zI}!N0lZ~U?i3D~BV5Yx2vGj2#=e^y@>E-T(x6+;51jfNV4)G?Ab|)h~b0<NtD at M4J
za+q7;t_L`aRD`Vy6VPGyh$aVssn2O5OreSB5KT at 4t7SB~2)qEcH_&8|nkHU=8uraF
z&jU{YP904?2l~|`9M}VUBj5wO>LE=Wnh-}<c4G27O#*@I%{1XXMmSLZgeGn7U->*`
z9;EasfDHRsO|YRtDb>$Z#+szwIWR=7jMdMqjx&|l#Qr6<CPzQFR$|J|uY1z`XOl$J
zWO58m#_ywv1m<!HP5Q>sWH!(liTq#CBmiN8D4Lu_*jkviaPNVCZ(0?NG--l=4Zg8`
zN|S8h1?)GaG?DH{yuBadZhuCT(MZP*X^)Ggi2=&ykVun-N#Gxllz_4(e~90k$A8M~
zk2x(nF4$q6Vf<W4uA^_V`vQ2ikEC;G;$lRTeNHq<a0LJ1_rIZPCQbYeXrg!TL-@{M
z5wQaP9RG!wCRM9w!hOsq^?+v!pOn_~Nq+MOl(Y8FXyW at hc+|!x20++6nizS|L;?I?
zd|>k`zXSeT(c}bZ=Ye)hADV1khCJb)pU5Xw$$TP;=acaS=_c at rvxHB&qhPP&lYR|+
zGDOBFc5!@?dHX|I*mQTUK^hxA_WN_$N<nXcH`+b&`x20DL%aQfCT4?Z;tKdy)1;6~
z6DL>r0}0=teLyF7)3-Dkf_MS=Mgh1Y-X7#X9%1X@?#+YV0s7(Qpe&7`Spu9mCnCch
z@}WBp at mu+1J1`UcoA`wPfAZ<iJT!jZ6=#n*6o;KBGTl;kj>F2K%$Z-cb`I8ibD1`+
zo!wK~%v8k~gzLtni%eyVL9(`Qh50Btd+qtdQXj?`D0O3SCdS&ps?)E%FP(h4sWe|L
z{w?>}x=TfkJAN*FyQ;^{j at 5Zbb@6XzBE2RZB1ZJsE0jcQZ%~m;M%BCp at v%N2nTiL|
zrmP+Ef{)7dPj0mDkHYbf`pAvB?niE<`H>sr-bd~M|KtY0J_^TP*+*{7$v$#pZ|x&D
z_Srsivt?0yuB*e43Kfy}*g+>b+hb?To!(<-=N5;1{c(@4D*<ydfOFwNOD|sn5l1Iq
z)bTmTk55>rw`1=RVAE#PWXA&b8}|R#Yp&hSCqY0LFrMO*CYX&tJz(p?CkgNy_AQ^J
z!+srp#efI=O1CZ5{)d<Lq}fZ$e}nnoSZ3p6-xH1>+kTF}I=}OiSLg12@~U#^Ck-oy
z8oIAEKjFS|=UVrlZmykk>*gBut(%5cw<-#(Dz_Dk*}koiOylv1r7NFsfyDp;eBiea
z=yvB5Da>-fz>81x=AaECJc)53NpSnaT>|`D?aC1QHe)`ldH$_$(Vny4j`AAwbK2z+
zdBaijH9s`@Pae6?FMM{ef#ufggDWbcb}?%LY|L($m=ruMe3QJ9_V?o?FB*S5`%J_7
zl%Tm|LYj*f2>oZTUK1K)lq~sc{kdf>P4C?DzMdE+bZV^mdF+(oTw8%-;V+pcd)sF;
zT6*0ZJSD4M at zcCxFKx3|*Jn*_{d(8)k>@M7$m951mwtJgd3>X at C1<ehj!}_M#($Y1
z7nfb=qa0^ZBat=zwjyWgjQm@^CHdda|0SvK$~K8S<(lP&r at 8sO*qUi}q0Wof1%5OC
z>f*E07yP~du7$t$tLmB^E|P at 3SUu;nA14~*%}QG~VWQW=wA*4%tXt&zj$L~W@`|^<
z5xLL&$9zxsnIcLs&spT+Dxy4H`7=cGoo9<&-De3zUrhUA%eZyE8 at 6m+=R0og^406c
zt=+<%JZYk@{W$vx6S?E)`K(LC8eDtPOnVXS?CLIZ_HcC(%@fd~dCs(m7ErGInIab#
l_lcA6k-h!Ii4!IR-%PMKUf{cF^Xm2MruaD7uXLPX|373~Fk%1z

-- 
2.18.0



From chris.lu at mediatek.com  Thu Dec 29 01:30:40 2022
From: chris.lu at mediatek.com (chris.lu at mediatek.com)
Date: Thu, 29 Dec 2022 17:30:40 +0800
Subject: [PATCH] linux-firmware: update firmware for mediatek bluetooth chip (MT7922)
Message-ID: <20221229093041.25434-1-chris.lu@mediatek.com>

From: "Chris.Lu" <chris.lu at mediatek.com>

*** BLURB HERE ***

Chris.Lu (1):
  linux-firmware: update firmware for mediatek bluetooth chip (MT7922)

 WHENCE                                  |   2 +-
 mediatek/BT_RAM_CODE_MT7922_1_1_hdr.bin | Bin 505558 -> 506710 bytes
 2 files changed, 1 insertion(+), 1 deletion(-)
 mode change 100755 => 100644 mediatek/BT_RAM_CODE_MT7922_1_1_hdr.bin

-- 
2.18.0



From chris.lu at mediatek.com  Thu Dec 29 01:30:41 2022
From: chris.lu at mediatek.com (chris.lu at mediatek.com)
Date: Thu, 29 Dec 2022 17:30:41 +0800
Subject: [PATCH 1/1] linux-firmware: update firmware for mediatek bluetooth chip (MT7922)
In-Reply-To: <20221229093041.25434-1-chris.lu@mediatek.com>
References: <20221229093041.25434-1-chris.lu@mediatek.com>
Message-ID: <20221229093041.25434-2-chris.lu@mediatek.com>

From: "Chris.Lu" <chris.lu at mediatek.com>

Update binary firmware for MT7922 BT devices.

File: mediatek/BT_RAM_CODE_MT7922_1_1_hdr.bin
Version: 20221227123429

Signed-off-by: Chris Lu <chris.lu at mediatek.com>
---
 WHENCE                                  |   2 +-
 mediatek/BT_RAM_CODE_MT7922_1_1_hdr.bin | Bin 505558 -> 506710 bytes
 2 files changed, 1 insertion(+), 1 deletion(-)
 mode change 100755 => 100644 mediatek/BT_RAM_CODE_MT7922_1_1_hdr.bin

diff --git a/WHENCE b/WHENCE
index f31fa30..7deca2a 100644
--- a/WHENCE
+++ b/WHENCE
@@ -5550,7 +5550,7 @@ Licence: Redistributable. See LICENCE.mediatek for details.
 Driver: mt7922 - MediaTek MT7922 bluetooth chipset
 
 File: mediatek/BT_RAM_CODE_MT7922_1_1_hdr.bin
-Version: 20220908211234
+Version: 20221227123429
 
 Licence: Redistributable. See LICENCE.mediatek for details.
 
diff --git a/mediatek/BT_RAM_CODE_MT7922_1_1_hdr.bin b/mediatek/BT_RAM_CODE_MT7922_1_1_hdr.bin
old mode 100755
new mode 100644
index 5309fe0997a2fb28c2b9d7e5f2c30c5708d49335..285801e1cb54cec3060fe8b4d4731f777785d0ec
GIT binary patch
literal 506710
zcmbTcQ;aT57q;0?+qP}n?%lR++qP}nwr#t2yLa2R^}k<c4rdN#u4L7{s<Kv6CzVuH
zZe~ViW+rB44kl(6R%R|BAR!qA<tU&ipx^%h`VTcRCFTF=A2A^nkpCtB9{~me01*O!
zfC4!G8-No2Z~braKY;%Wz<=4xclQ6L|BnCzfdCb70e}Pp!GVAV68|s#ukC-u0sqDS
z`cE!+|6jNEzrwvP2q3rr^#2c9NKC@%$PN20f`{@8_lggFWHr{U7jt+7B8tAo<~{zL
z5$SO|KV|+K13<~o`C=W*jAXhHkXieqJ>(Q=S=%?csHNdKUeY>wi0Z89(J`&1rF;zw
z_jT?~K-h}LCEpxrcKS@{6^aE4BsyIu>#PKPj1|w%EOaGr^z??*Jiu-K7q`HeAuhw(
z3OIM|uh2?TtBX5H4iPqE#q?kHj`Y0D#Hdts373x0yIlXi*GhRZTB3*S4b}t>pD6rh
z$CC0b*`aa7B^)4qd`ChY$}U;5)Ez}n at SQD_QX}j6f8c`HgYw?*As|nD#^Y^RU~inE
zvqiDvkIAlNQPpT~R`bT)aeZ3&RIgG%niT0P+r#GQ)X*6%Mf<PY)ep{SIYaC_fd<Hv
z3nR?R;AMZC(|4a#u?{mO+;8IlrOTjL#+VOM<92}9UM`i~>dB(Eq&rAnOV8rET+ci(
zu=g*-Zp`hb)(3A6?1(RTs)NxJPo;uS1b!gi{a`Q3ZaSVIDrfIrs|k1+^ytZ6CwOxV
zU(^Mg&@i_PEAcEr7+5ap54#_aq-y)~tsUeCH*8KwhcOp_ue*IAMvVTzl~^88#>#D#
zgn|P9I`SI+D4ObdGz=-xrXDMo$OYH#W`LXIz3#`PT+U{yiA>T~iViioRVic~v8zZg
z%X<eIq2Q4d#JDdZW3GJ#y8!1vzV7#+@<u{va>D!c>!$3NKD7=nvmw5CgHXSm{o-8p
zA*`+c>_XSVP=nT9=&RtJrHszVo5C*ifwev}gD-2Cy<zqM3!{iZTg88w at VDb_#5_61
zYLSKCG+E<R^*eg_M9MZz#=CRz`$!j4a&g+?V&)BeHQC1*Gtfz;fzKx7^(H={`DeZS
zO~Zb6DFTmM!gRpD at kPa?Q7s*C$Wz2qJOl~#@x#ad8+%ZQ6s}4XgiUAiFefJ03!;=|
zN0w?^m+TpzmJWWYgwZFpgCikx3^BPxh>bm6uiL*sISukUK){Us-PTb89($Oz<0rRm
zW1)kr*t%7R5(Dx8lnE{4pY8ElOZtA`Wiyo#e->D)VX~{wYk)uf`5YX9BNPD!hFlUn
zC&s-JU^8<6Dd+9A99o4eT6btlaukGY>#$X~nf3$)hR8Bo{CZ3C4LImF{K~QvZ*kO?
z+XySEXwPM<Xn6^EY~F%}QyKM=RHM?5HvM$O(E>}%(<+T^NG&Su5KgjrANQ-E08v-N
z3ud(3W%8DLY6h!teW{%mIGo6Oi|yWcZU8rAf)6B8cvK|7=Vk0!7Rv!r1#gk8->4kk
zxhT7IAyugNn8D{;gl{ES#~3NLzO$=p?bCw=!7e894#xACpns8StlvebqEPV<&`ois
z<}kIZ4XK*kkSBW|VUf^B?i at K+7ZPK`K<sW+3|*sB<BJ{_#?vJ>l4`||+9hnCfeebF
zyR%!G+z?&+^ksnC`;dyx+o6?{9(jNDjQ^8JHsAV#*kNzI{U)-_kuWRn^I_A;h<f59
zYgb+B96M9#I)Ls=-PW$#7C7ZDl)uW3QY(;_*wv$cXhqT}Cr6Y+2a?^2NnS6zu^R8O
zE80X&8B!82&7UiLE9U5Lqt;smmJ&vo7n)Ne3oi!eY}-6Dqs){S-?7fb^OFeK^A$Lm
z2uf#CHWmLBu{Z=p+q)YQ(DJCYACg=HE^E})2S1Cudm^*Vu=N!?*m&FIf+9Z+v<jc(
zVtXmNY_pq#-CgF7zteVn$8)6i;4zUcC+RC)y<*5<9W`Co%kHtph>R~^<(Ic{;HIFL
zq{he|;_b#>lEW#t!rGvL+GMP%KJQsh+1ovN0I3T80Jic1mk~~YN?)xirjsjd7Oz$E
zo8K%GSA5O%Wk^ENDH3Li<S$6su-_rcN~m{v$d}8V!T7B|ymypua=U2ztW>-$X|^_N
z_g<kz#9mc?RLth7<3XPk1m{9k4)9#QuaKS=uh1t%jO&Q4d9gI0Ob+u7C;AoEdzdV_
z$8MO2`95id{)<8<n}Ty9q9fS{VtgmwIHad%{IM0%-gp8Z6HNAMEju*OyScfuP8cD9
z57pCnH8zh2q3euRntvxvI{g=lTMO*EYc0uP^IVX1;!LY*0=EJT-hS<i*!^UZLYR}6
zH~~W?%i3^#*V+b|B~vgcfNyiHmxm2GYHZusMW~-g3_k-sUX^(_b$`Sre$$qe()B3V
zS)EI=`&np=-lO|@1U;p6vV?5=s0vfUDwl+2-2C%TVCTSyMMTV!+NE~6sgz6PIUKt2
zQ8>rJtP^370GZ%amMonZogoX?z^a9l{B5E#WhxSJ(nKYBcv8rePn&^ra=(1|xAPgx
zuV~c7P`O);Y=pC_JPm0w{GHV9WgHN3D29 at w#667t*V(mDpu=UhJ<Jcsz7A!$$V^rS
zExu^OxSHvm6&-Ul{$D8uR10-E_8C7X%+LzSu0xO8c at k8fDy5LzD(F#X63NGX6xd>8
z7aj>KCae<qrxUgnIMWgD!;D^&)p*@bs}!==tP2?eip at 0<mF7be&V+I!nqWmqa;y!6
zIet($zJFb+mZPm>o8$x3O_FOBx`gcn7AW|q5Zd*uU${GB6sst#?{uD=3s-x3Lh#~X
zno`mBW<GnF{V*vz^kPv7B;M>)uNLc0GHoXvH>N3|SNQrjQlc_)P?Smm7Z0L{fa6$9
zcL0s-o}%`jFS|Hzr4{0~MZ)t<1c>C<-)YXB<mYYI+!K at Tw;jkTK7IwtdIADvZ5V{X
z0V}Sh^or|Uu@~*WyB^EN)er%mk8~d+-Z;D)N;abTKK!k2TAqO-$r7=qq2~Sx3SL)c
zpx<p1BhHfJ`8S6`ZCep$z(YefE!l}l&XexM7E62n4lpXmIR7X`!XR^&NeVj(gq+85
zw<)y6JmU`7{$7Ac?q9hAKi~G78Cz*RuOiJEQWFN_)9KM|f^Z6 at uxeR0rGn@IoF%jc
zB$yM3W#KNI<rlZEkGL at 1y^kQx8JeH2AUyx>6yCM7rkvE0n%Bs?`QwW=V>i}v7M#wg
z4c70D!G9rbUWoyrZNKo6k42hG{?{wuV}hEV at 7)PJ=dCL73Z^#sAGm0%#7Y=1ZuD*}
z8j}AVH7$?z!cMD0^9~F0$IVGGY6Cp#Jd{J~$0HcX=fk~8O%fqi(c8&zZ&}d!4H%uB
zT3_cn%OqWBfGb9nf at IC7?CC>Q#9_OVNQ~Zch;4(F+!V$w)68fT)H at oap%0ywYIkIN
zIx*OzJk_QH(lyY4IF$OWYun<}4NX<O2SpPDtQqEJ)KE(m|DbM=(4-Yb5Xy-+wXx6b
zHFS395ZF+;1G9(Hsmkg5*N4Qro^dIP2DwJjt{HKT#NP`a$KEm)^om*4h3LkhZVMWf
zzX3u%o|`I|B{O!8lrjc;jgcOrFq{N_{Clw8GRAV*I7(#X+mD8pRla`kQWu!k?-hdj
z5R*+C at _+6O2Y01dZ?}C*aric+Za5-9s8vVLQL|V<XA#wI-t!i)D_~C0?h+eDXYyZP
z2+E-jS%4NNJ<js5ktk&gDc-`6ja=SxiwpTG?Bji)-!f&lXV9r|F*tx*AbVH=X1bP=
z{c~_9)2C`8inPw5*W=H!Ys%ZC!(QBY(glL*MheqUvvJQFcaUn{vgl&s+iw&FjD5^2
z`_EmSh-j?MW|<m(_t|!+)%epK+K3|zm$o?J)boduD(bz2Gk}9~i@!A1jIld|HbN_(
zwJ)Yxxu=aoN$wDuQFL`{vnw#<5e~~439=pZ&uiJ4aBk9M_?c^|A{u(F>A2DtLt9kA
z&~Ddud=Rv&-I8<6+luu7Pyb)3=6_VQU0v at IoD_);L$6Ihg(qR30TNP|L%gH8 at rp%b
z4g-w at uKoka2f`nOe^nb1v&{uk4edgHrI~r+l at C;;r`yy4A6fVaD4Xl0 at tv)1%pls2
ze#r*UMN{d=7`3 at Ve#rogE~#%aKPDjnD;Jor)2NQlju&nX{9kf&5POzM8V$Sn!#r+>
za#I-g*4dgdSZs0RZ0d<PN0j)WcdH{Y&|)*rVfP)_&MU2xIT^U{Qda^rBUBS?ITZJk
z&lm{gn}It at 6Skax_U2;<_ew>udJ7<%_-ckl;te<hs`EW_NXx65J*APz^mtz0A7&wV
zsa at fF(&m3?JE`N79pgNiH7x{GE5 at RM`oPp{BE*RUy*mxVZQNftPNZ8Bc}Olg=YGUT
z@(xb)ao#FIm$A#SWNWW)gORckv0}epShS>6J)V77RdjJhc^S!rYO%#>SwmLl)Bx+^
z$m$YU{|3>sKW at h2(~S|RQ%V?quqV!8%QjE_XvhB{L<iX`tVRaRutvFnmgch*#<_aD
zEwrG3EN{=hy!!xs89h^BqZDfN3|R3uXNghL)}{yyL?Smrf!7n(;m7k9Hbdv}1>#sU
z=|(QH0yJn7!&~~W$WIaGR(n*EH0t66Eag{L1W%-q=sLxpSmO9VbE18jEmPx!OesC4
zGfR!)d5vYZu`OKUfk$99Ml=bRis_yY{OoS`>P=VqZQzT~J<!A$C}PJT$eVcD4SPd)
zDNEOIL at t}slKKW5>Qp!F6?yI^H9!+mq8Bh7C7EsAn^QGXrz_G;(_X83RUxWCHYoYO
z6rBvzx_^)vjPIm?gh=_#vuT5eZ#mqYd2wR~h~o=-`B~%<Cl2e~q)~czpo8Hgch$Eb
zmpgiJO9;{z$aWXSuDjiZ;wNoO4~EX3j~kV8LQpwuKs|wIUYo`K-3P-^PDlA0%T{00
zfN42k5WOnh%*RRMKSzLAF3(eL$%C^*T33cAV(pJIuPxt85-kS!tZL~B_keGp$ZP>J
zDjIX2UT)DKh2Z172h-qa?Nj at xpe26RjAD?Tke*o_{`fWQDrfH?dV2$zzO(Uc6yxG)
z|5QT663r~ozN~n}20Ir{VotAt;c9H^3-#rnNg>1CWY`HD8#t;c<7NJ_org=mZ=T&}
zS}WyfM=IOeapan0-SSqV&8Dyj*nnpNO+PvAnP~}KW2OoEv+rdY9kklUr80h?1lG|Y
z$-_#`zvmui#>qA)8++>e#?EV<g_ew1jD6~Gz)vpp)t&}%_F~?!cSKSGN4_Rkh;#6(
z+R$$!#n^t7TL++#-uI;t&b{~>Q>I;NZ!EC at lW{5nn;Z@;cF$OHDM7vvYNt6zrF@(Z
z+_ac$NPmm*!-w4I8;;lWWtENKWx-HnGIIw<_WYpvk-?c53<zr8UI!KUl&MaA_nJL>
zpkbeN`?65e!;u8658ea^f$c4730Kh-?0g}Vw`b|@`QAW|l#n)($%q at L*s<ITQMor9
zhIfK{0A3)$2_Yx$X&@5tIHyw$;g5fvb#aEHCNAJf24j$u^38a~FvoL>LSc(^w?;Zq
z-WqxK8E at h#*0U>Qqx+>6q)-+I(oIBi!WDa;YD{Ifwgeh_9Eq?MH=*Mdj|8Q8iWa#U
zzxT<+%1*oH)%Gh4l~uSDPsJ>xw4Mlb&pT)y{VCL}{h<iwjb|Bq=`LaDs2!xM#6+p*
zcJM~fT#$n>`@pf%*h5MuRWZ?a#(*Zhl>#5QOcAj at YD<J_B$eaP`en3JeQO7#sJs&`
zwN^+4#?f;6!-?vee1ZPK(uo))E4ttO?AxM<$pDE=i4J1BmGD%KV{a6Dr)ig^L1O?1
zh%T(*yo70-=;j$6%6=2;U`U<rn<%?3%A~&fBZ{9XKq_EA=ZBxZEVq+_)hq~-z(gz)
zx>nvT{>puEAsSu^YC7%%l at fJ!Ne-X2{Z#lM>Wc9FU>7x?vXK-S(@^$}OV`yEWvyk|
zQ6EVrht4z?`WK`bzq!3#Qdfk195p$C at pf_1t7+TR_ywIteUFl9ic_*qtAseTUM_|p
zwLpm2ENI-uKi8KxOZz_Vd;7ncoQnm39WZMprc}Ofj9c_5hT+55Up){;W-!Z6Wqk%U
zW<R&MVM_t=3zLW4h!5zQvE$`+_F2~}9_8&*$<nVrvo`g&44$wj!CqKIHO|%9zX`?}
zynG9)rEY&qcB3 at 0wcD>unc+tM>0N6$)!r0XqjxrO%R=m%jYMI{ME_ETA|}3mRnTFR
zteXLO_T;{ra3`oDs7E7{Bm^#7-p5ak=hd~#opV)@lL34UXXQh%w>O5iPR?+yG^O&x
z>dWNa$Hj0R4Ww~jkXx?6UaTY({aaZ at y6c2J^#{&M1SURCtMXFmKn7KhM*VYG+ at u(f
zR^b{Me(isT*pyapIT8u`6XJ9U={Uq%tUyG`6<1eCb~vJQDNHAdyzX8AiBNLN^CDRR
z83}KD3hWPG#KfKM9+^+z|4&S8_I@@0tsXdGQ%tji4<*N0jQb{M>u(&>dhM(0$Qc`i
z)5*_(K0x%-P2uP2lH at 3I5o;|g$zizYQW>s0>bVjn-`$oKB*<bH!)U9xq+8}hXE%>^
zn?9C!ulTlknI|&j&t{abVZq~mNK4nXJeAK645U|06QNGnTX<^})KY=U#T-k2nAya=
z*>7#>FaVC9cjnuuVSx=<Hnl<_yI^>2-gqKyv{MqAO+=R at 9v5B1pjW#g5uQ0^seY-h
z0jo2P^iGPMo*C_Qm$t%cmWX|iG!U&f(aR@^R)|ZwFc#cIl8{Nh?jFjPi!Zrh(T_Pq
z)tgBP8r+tgda}rJ`FW3lD2CkKjp?XKpL(zp_wGc=ba}uHwZBLd9zhtfNwo9)UwE!E
z>VvrW`^LaHDLwij{@nc at D<6B`-D*xMj-jpYONn=$KP=RqjAWpoWn8jyk$AcnqvodK
z-0dlU$&H~1o2xDajU8oGJ5Iw9#tM(cFQi9o{=MwuMya`(4nFWos8tO!-u7dmT0xSg
z;%K!c&ad>AVZcFAhuWGJ#YD at CWVGfO>nkMz at Qhb#3_Ne2nZ+9%Xt7s6YK0CnOysMr
zC+F|BPTi^U2H9L!;Ug}~O6U~r?n=Kj*$23Z8109$f0fLVB;@`txl`st;O0r`TG7UK
z+lSeOU?^Oi?TkN_TwJbct*n at WEz;%J8(+2^b{GSh>1NLEo0#WWk}3tL^;UaT+ou3e
zYjXbSKdpJBjlHDn783*)Z6rN=TNE^<RS9qa!6P<MaDEdK*un563O~gAPg#@XmsK)n
zxX2pmm!Guo$3 at Ny4V>uFf}1UdVU79g`%VlV*~fv8#%_8!<J>S;8TfeDcIKaAMsJgL
zEQvY+PwYz<8E&pZw`|t|Kl#6wiJw8r0O%5it1pdiQ-{?lXB38|GqD!th0vfw#ZO|p
zmX%R_n~7?)(l>qmpni&2twe|7VQqV1=<;N8SYgYhsI8MZ2W=Ta at l5(gPV at stlt8~=
zrVrTp1Q~TtUx~^VFrdIq?uV#OW#an^Zr%VgAG|3!L33{$GWt7Vy-qrEST6?ug}N6C
zN2mL~Ti at YAfw$v at ZJo*e%c9<zL8(+?X?6sjvO|z2*CJi!_rJA4;fu9HjGTtTzMBoI
zb1yGG@{+K&dkKWxL7)#w{E9xxHBF9T$C7xZh6&$)#i$pS<OvO~rOqM%Y&MXA5CabJ
z at Ev}wQq5Me4PygJ$;nvp$*ww;Ww#@m*;B=Lac;8Au(MkJ0SCa1*id!qk(~m-rnO=#
zq at 198agi^m-xEM5!w-V6Y9YMI!_^C!3VV9(x~AGnAY`H{545IR-<%FZT4OGSLgXMB
z(@kkXb(yBD79`>$D--E^C~Q49yZ5gLy-LL4Iu>GkC!*H!m4r-}1*19@@<5u*Vt1Kn
zh@(o5EA)p~S6gW+ at Q@@u3Ivf|xRGoV)G)p{9xC(0q?-}oQpjV-nqqko#)K at aP%fo=
z;}M3xsb;w*lfZ5qPIdY%Z{+>dA4ML~g9(@1-<%0SC2b1^4RXkpzb>jPZwLt4G)#xg
z3B%<O{GT>8Q~r-TC)0uvtg?+oXRy?7<EyKInhCH0aB>w2jY5V+&bd!M6LGVB-=FSv
zrMN}(3`8A$?DlSd5PIWxf7!4%chXG<g`pEoce2=INDf3ZrHA-Dc>A3@;-WwIabFKu
zS!ujDwv)Wp5jr?^a?G95_9N9PcZ#2y>#JjrLCZ+X1`)M`UpP_alOiCXJ}=*}y$OP%
z8PX-)^tga at U}?1xE$o*p9jab+UNtoccoH<bbEA%^U3IF1TmjjEw=;qG0bQqF6Zvns
zn`}+Vox-Wrr)d3cOwM4?v&q6Za^Ne at AjT(=CwH740=QiXhfS9lAiNI;%zFvvnoFMC
zzTypUXPbPhgY8CvW)oCIh;0#ke}Us<)Zeexx=dXrW%(=z#Qd0t;gXohkr_(?yx9Ay
zdY_7B8wxBN0*!e9Zgr#xL)x0_su+9kD}&pKMp~3Q6 at vG3fitMW6xQl~GEWm+=oat1
z$U5^2<x65iy`6mhsurmYpD4gw!jEBwwegTAja=>x6ilN0`Fu|<C)yiE*tRl{&vQl~
zvY3$q{>+r>u<n<Z0_ol%?PC%TWA2TB(Mq~(L#)VZbvNHIUaZ8;4Y%%8v@^$oL`uOF
z<phR1?<gT#SLs{g`~}Zb#pSqzxbs%KsywfnBz1PzhU7iPo_qyJCxe6cBDN7 at z4Z+I
zJyk~rhc-IdQGoEc_EtU|fIGk0|F?Bsxo%OR5|y=ddzfxo)^C-x!l*u&{db^JYPn&j
zfdjyUAOxl*g6;H6NQf7+#Yk;YJ*t<At6rb%kMYP-2PPh)EgprGdf)l6YIydR<+?ry
zbB7YE_TQ(@#8?1xix8q3EoieRUo9c2-w6WZgq6N7`T<R|DsS<>4sfL^bX{;;j^hA7
z+aRw{-8rYl<?^KWlg%@f6h%dhcdOqI1NmPOa;lC427K>n`RHA|WAl@)4(0UEseta#
z#^|p~blI2;emHO!>f3Vtle0Yw&?@C{n0PfXL|?)_`j2bs^#=Q#L7SqWp)Y4l)}O=W
zj4JHRzL%*K6g6Z@<4)kbHzs}efXVFcBL4WYQOIG;&CY2*9C_J?sXy#$XV<#e;`w*r
z2Ak3#R4y?W!j|T3j)3Gni?)Nih_kmdYz^-o%*sgbBk7c|afoH7e4;v(GL${_oA4>h
zt=RVro75O|bx#x#!oQVD-H8 at tAH4F=iWoe;;mIM!!79to0cu)K>`dYc=5neUGIYxu
zMb#-EQW}xsHXQfdAgUBokzy(5889L<g!S%sU9V2wJbo0L75Il~JMyE`1n<|gW-FMU
zF=^spNf?qEC(QOz`kXtZg?h=cf5KV{u!pTPpb?JztrxuIvt`{h>EA!b-ai~x4*8*~
zENPMA67x9Re}5{7OgLLr>Eo(&+&#{2_gG&0=Uw<T#(kwK_A9FX at ZdT>aSctHdZv6T
zw~TzUcKMP|0c$n9nqrA**)=@RB|+Z`C}`D=JS#kU$`XVZ(K=8KUvOJy?lnDc at 3ghR
z_OTV1QK_91dL6Jouz)?+As?wJ)B<6vTlpW>A6cM+h^Ve-YTcws)~h}F-TOLF#n&)y
zCi#3|9o%XLc5F7rgv~N`PR^WjL at M@NvWBw>a6*h;mXENI#6Uf7v2v;3y43;FYAFxu
z=}IKO0Oo$fNqONwS{c<8>(FphA0nA1z-eT9!VGW8e3`|3YkwGxxh(rmXjHC%H_TW3
zb}gk5MJWXLr=|Wu`YmKc%9<(2DP at a&ylg`Mpt`i@@v(IXz#fy*X`Sqnuw=~<G-08v
zt&hPDe$b^3q6xWd=`^+jss+zW<djV<fJbKveq{RI*W4G-N9-<FkWL$cTgeoyqmnW<
zAF8|yB32illB^#X9qs%ys2J0a<LKFE1L=a{LZ9`J2JUKRbd=A786-;yzG!426A-;N
z7*7vW9+R0L1U$;h&MH0Dwc)9_QUhFGC5ulD#QJ3SqYe6&RS+sR#w_mVqv2iCv|)II
zB6YA_5;RK5YWUy)t^<9iVqstY>;+}or(+;=Fvh^`cT`KR0^F2gH|(rG3E^SWEP{3}
z6HP;Z3jzCqeP|ma|3ogzrh-Qf+0U78Zf|^LF#Fr8r-W+;%wfg5-^>}I7pT9X-;l_l
z+&X&Ng_G!nl_ at 7HjBJBe@dRV*(WPU~H`zjNWyZ3$|Fzm|TLW`aE!W7Mk>E_J%p&rQ
zom25abjp0>(bX|n+DfcuaDawuK!fgKxzkewBL!H3f)dGrJPmEtKqe%_?D>YAK7vLX
zLk>SieZfZV++fBq^ln;T!k at 1~C}8M%KKouvFPVsZ`TS*#mU$gvc#Xx1*WE;FYN|ax
zNk at gsezK+E&`Eo>7Sk at 1p}@tJ5I4 at c*)yoa%~zhWEq=E1fD6!DF0CJDm6+Wge*t3d
z?BUFRAlR3ViwL{I!Tq_{T?w=}1S<MNuA6cSFYZBA66g;FbWadz`z}6(8~J#NcLn)`
zos&+0rd<$!a5G5&489PgO3JNc1!lv}U^~6 at 6kQb!a`C)BApzTb-aYn-Iu#-E^~mL`
zS&<@Z!(7?i<|^R at Dq?YTcH?!4y-!R$$$tFPde=f_UdFOWs|6yU6rbYTsnb1lOSKYs
zf5DD1C56z?3m?~FffmyQ`P_1#4mduu#<nY9Ex1ub^{YpDV7W*!jc=Y;hK318ybi<A
zcaYPca~rcAna- at P5}AfxL_Q>g at -J9eH_|-qU9ekh1!A1{ipwV0&7oI2`uBr}{Yh>C
z7nX5<xE*4Ip!=fx$HOQWy~HyTnuV#~M+68H%eUJZ-%@JDhFe7h=Yj=OL;+*ADZ}~e
z(V?}vLQ9%`Y-uim{wvyx at LgX}LkQ90S-64_T6T27GwW)tqb{5gDu-{sct7J(Jm0q0
z=L^k3az36rOf&G&A%}6%TwR=A;Tqyj_4t-*Bd0;;?Jo%N9}hpwsaR|DG|mMPJmtis
zEd%lPh9Sf8(GBQ}f(7&mPcU4Hz{kn+7Pwtb5m>MjjMQRwX$K(lRNxO&FCyCoq3rFa
zG2l2ev+{}JvJSD9yxrK5lZ$cy8)$;jrg@~GH)5`0XO!QeoYoW+8$432 at 2)>W<O?Jk
z at xVwi<g2NS<?I^T=lFDXqHfDbMXN|Hkk6evJ7o2nvE3cQU(P3QbV3Y%RT8d!^+%&q
zlJA8JAI(LiIxU==yK1q5Kvh>O=6)r`gc~Sa)mVfW?d`9T;`V>V(!f!PeI|*yKgD26
zgEZWvK80;*H*Vl;^x!Qnr6Pxa at tzg1TYf9)5!f+I-g_{7cK%NCuA|sYu(M&s{rNW;
zNvf+zJ?Z56Fn#}YERfWbU&bzxml}B-+|iT<(y8%AtBG^Do!4X6D)om!x!7e7JF^$*
z_MMp4K_PLYo8aPBXR(6ZddncG)qNv3AM=}K-qW!}osdS~?{5@(?0~NWt;p7$;R=8<
z1buy2seN4}Rhe`V@^m!SLcDQ<WU#}zLF{ffs0Gygpp-M_>CiSQc}ye;*&>snO<}hE
zT$|ORfb+wH6LBtY%7V<WZCu|rrYqOWFXVOrbF at hWhN>l~Jw!1KI@<Qx7gW(S7$~#1
zHdgngzFUvaU at QNWtEB^g#Cb9=6Tr>P3PX@)MUAInlINIG)U at rvcyQp0FFf%}1&rGT
zck<T-;WEjQ5Ir at 90g2m|D&MpyTQ;=8Y_WUwXDwIbc$^cjw*NN=AbUw8sMnLr(P{~g
z7Oj*z1d)RdA;7KOkISe50UtP2LmDJ&b*M_Y9&D;(7puRQ!iyA6Jm!Phs|$M&kgls%
zDXc at Z{-RT8hH&xkuidncL6*7+6Y0J>KLH%KY`g#V9dS)dUDqJR?fXu#AoFZLm#JWN
z$B5(b79WHe<1zUtE+a9YE%qMr#1oJ}01>J*g2!+Zf{%lt_4i&^r)9?&PKpDjYo<V@
z_8jUX24JeMh3*cemz1$-eQK(DSvnD7n~woQN`8D=gMQ~Ta^vXFpL;2DI~ePLKd`mc
zqqP63jy5m*fHa$2ciq5d9^1mF<SZ at _C00hWolu{b`Dc+f^aGqS{2})yz}mO1oY*TB
zGw?h%L^VW1#uss4mwVr2L<{gM?r5$zs(c#2s at n=wbv}N|KI!^9C(#g9yf4D%gI=sS
zsI*qqX|p%>fxug2X60*0j0}(ZlbF}RwHmEIRX;8@@6)FSdIc at B1Z|<b+BrZCmPLAo
zHLCpp{&9!M$JEbPA-2Hg2z^o+&VPt_AAv at C1o8TCanlPH7dhL|oHYWak7hOvPb~r-
zL-xqm-wypyP92)QLlU_c3>=^*%u+)F{wcf`q$4gx2eiTwFb7RftYZj|kz}2Pw+<{R
z<zTHBA29l%bztHW7tMm{0ZBselOj*EWP%o}W}*<Y-aFHy2lcY0*rL-4e6ce27k1L>
zW(fAKIK)bM!8T)nnzOd?<^|;;RUWutxuF_n-3X=oBQ|-D7gqUmrv8O~;*Sf0ega1Y
z?BWBq+1;Q>`YD4e+lp86DWWIQd!NHeU$__6%Ud_(9#~f<vFR?AC9etYkT4}ayswgQ
zYXZ+5q1y{t(;w30MO>{Yp+GSI=?B$Rse3Yl1+$sHNcWcR-YeT{$V#OfbZGH8GC*Ij
zTaN0A(2sKuK2BQEM$#iT_{G<6z7b>NZD3yS;8-y5ClY~TZ6EHj|D)G!fz^Tf9^R=I
zGy_^$2BV#(|A*Zsi8Sm1bI;5*U@@WDE0tV7K3(rg at w5M}&k82~hKJXAfbwFWc@#XH
zG__8G>7V7&AOS=i;y>QHwHSd<RH=dyDXn>F3}bh7Wc25^w;P90>Q+lPMarOPA6kyu
z{U!(@ARP|^L#|t at gsG=Rn$&a`%PFulXJY~M^)?WKmVW|8qVxoPwRXf8*T%3rM8+)q
zTVnn!A7)b3 at aC+mu*JKI_XSw{z^NR$zjIkYg;pmDE&7eDqOmWK(893=XT6oXRYDCE
zA7j$6%Q3tPf+ar5b at WD3sUwh#79dhy`P^N~*?)0gGEd_-+J?O$pB35H<`(_JU+Ym9
zaYMRdqwwsl_WQB$@N4&!M%<jjJY{_bW~J8xQvUlX)=h2TwM7==ha-VbMme0^z2ofQ
zSh5V9_cJ1;^Cp3!PSC<R^G^kXcRVH9pTbfaWj!enXRYc53<BD#O3WHM9M}|)?yD+U
zN6khO)+<b=4fYT)j|EJ;GRd__KEa5jD<G3lMm=hS9<QaAtlZENaKEZ@>KTec54Z)w
z<wBNfpk?9}W!Mb>Kk4BqNT<I&w0q5YmAiVxFz~=A&Y?ZPH$`~e7(+$+N?z<@3Bi+=
ze-XJANBS{X<{~y*B&iigJ(zZe1_cba1YR1Fa{&{KkyV%xoCgiy9c1b2SrqzVR8n3>
zW-Yv3BWo4=HK!d}?(58_-2XFaxlW0gvOXwrp)8n|eYMTo3Jy3DqI}{?o+5#4++Gt6
zG+~e;rd)U~qebLUqr4D1A3R#gerpau{Q9|O6t70ImiRRCTBkud_8wtmmU&#^ULBqp
zwAzkMK4`NP;0W9Dh^dUjPsl$Ik&Xn^=V^TBx{^!ZUA>NwFPL-tEgW)y5Wz4OT0tat
zaw?V4fkvd~bYdCYJ6MBauN8}nxHc(I=#iJ3jhoN0-3KE-;(9g7-%+NQw8g5%NNF0|
zEI}#OlOUe9a`z0CgOs2JAu1tjD at tH-yTL=vX7wL*ZdDChMMO+yd3rP(tKa#bW9eo0
zA8)BML3n)>ZOn57c*=D93RH@>1gras14Ns!+B`hC{8fTRqZ$_bhI_rt)bQ>U=T7*l
zO*LROHw&>^zH8%&n}%QHqvJPzTQ^`pj(KKZ2GP|T8T6qa;exg at mTzwlgc|=zjMFI|
zA;lzG;=AwqPf{Fl1VP_bvc~Xgv1U4MY>fCRH0>9Kq+sty*;Z(61O_1ja3fp5`L`K3
z8+kA-<}jYqDgAKK>JmtB$t at +9vU-c7W**V52)CMy*<hPOUo<ttz;2QhjMN|2upLu4
ze*1A}Tg2dRAf(V1TI<=Ya)5Mpq_ZvY2EY1n{xdbIQ6lVPMM4Zb1jqyX>%!TP<Y*^C
z?7{Mb6oO?Mr}K_|)qs=6zZobxI_-H7IrXe{0NMWfV&kj5;*Qyp<%hEiBr4T+MiByt
zJRgEPbrk`jjwejI2<@mJP`hIg&JP?SvV&A4c|_(1h4T&b8}>$x)3m`6RXBV&_i>^n
zNC>=aIe?z|d4t0O`fuG(mRi<GN-_&?itLLsNl=%HRCQdiH~r0gU+g3=pueP_v?BT0
z6#T(e(GuQ%;`&bGZuIS`><PM`kb`#%yrBQ&8ue`%4(vl><C_w4VVZz{0q4H}3b=DA
zg{IZtSpRo1Z@~NTzW0-3E1fm{Q!JT%CfYMy1?6<GJM+lV<`+T3G&(#Gg7ZpdZ>x{M
zNRczNF|~@T;$)%@6`BQGy*xY&l6Iexj<%(YE+N-NZIB%P`kq_ic4)JvMc1&Y%nK1E
zug at Mqj~%ZA_aHYk&^6GF*oxUO!x_uPwpw`;#zl>_2|#Wn&s^WUlU2oxX^Td9x~OG0
zy(tXdxVsv|Og2VwBMw>Gt%)kv4pf}X2z)Wl_IlNT+i1LIT1`fp*9{PR{do+^_b{cs
z`pbu68-8#82K~&^YmbHW^Ii)dxC at g@=pfwH15WXYA*H-)6fe583v<ijupGhVg|WV`
zo(<$hfq8%InfSqLE0U3FX)$XL2zH2j>RqK1%jnp<-CT480>{V)MY@^sXxtP%ISQ3P
zka{T!P$Am8GM=Y>zeeC<T~mt$$U~^F-F*)Na#)2LHLn;UIpD3-p>OmOL*M$g)%uSr
zY0R<wm4I)SWv7uX at 75){K!sy~BH2KTm#1bxeth_3Pv)^;%3zAu|9dKJ3J8C;I6pnI
zUGqdWf%dO(U4XrC|IVaXe!qkZ3?IQE#68AoF}3$|6- at 2Lk`VZ|KCv(DDrT-`(b4P`
z#+jpWE1B_fGLSK1Q4DSg60&h!W1UiAlZ at kakF&?ki98qFzj~ymF;Z76q7(yyy-val
zCh5Yerye?ez|UTZE3h;De3%Copb+Q#P?GjBc5JS)6u34x*50G57f)1(zdLBybUR*o
z95N@!^k6e>RJAsTN_3fIv^!$pWB9#-j06a3by$X=AYhb|M1Kx5saX?wB4!ig+CQ41
zicX~}uj~xN8zpPs{@Qlp9w3{p<u!6G#d%_3eJ}m_h(rPt6itBO^FsZRQN|~Igh`Aq
zQ16U6;Of^+cI7EW4~uSMGHs74<LTfVs!4evQ<bBxX!OduHsPt5^Rra$4t~>SBCZ?>
zS4qgJH$vDfChw!HFiCd9*O;QCV6xLG)gU?@Vj#tyWpCxyU&+;87SGM~D!dfl$?bRz
zNh*_=vD%PeW0IGOJstJJ)pzLoR6!`Zo1B?dU|PR5P9%83xElrI5skO^VZODncJPY;
zpUPP_yBku%$9UkLKMSLJ()*4f^Saw87h9r3h*|e66p9(%EPnl-5s^PFQGVG+kz=o*
zogL|^x0qu(3PXAaGsXdOF_ArLzlQTc;s&n`68YMm?h?_q at ky{{`u?5IrC=Xz<Dhen
zJ=n>xk<}dAOura`+FsC!_!n>Xy5N^Yo7*YZG06Ll&h%%iE67mkg*4X*ykZlc(XVFM
z$RK+{Whjo-Jkl5(dPyg{TQ}cSAUc?8EI8V^>&E-$?VXlg6@=ma-L`ZrB5*ziwYcfB
z3fp1D;Duj^Vx7Ypx{E=eOecy?MuU5!*LSYzZeOIt_#rV&33^t+*@+tlAjC`wJ;LG@
z%inB)Xl__(d}Wa8pghGk6?mO6a$?LPvTv2>AIJOW77TVQi(bGU(<bZJhGoyO+<%_2
zuRM4(Qn-zfwsM2nz+0^n+!j^Q+8wmd(sSoq4B4EXOsSJ(L%@ESL;f<U>7g~<=k|e}
z;n))5wR5oPaujuH&hV$&U7 at 0Sw2b)eDz}`Vn+U9CU*tPdj8f8j at 6T(~0NlUcZLQ0J
zgEI8}V1$P_v(n5PQ>a_7A(rgpXzM5FMB^Z-P9?t>u&_ at QT;3 at C6#KVB5#qOI=?bP6
z=$R!Z5*R`AM!x{aSi<rCJq=)Mv^KM4K~}~R_)R*w4v!}986GJ<B*l43a6uSt&!PH=
zu)=}5RFPhw4!hA!Ov>cv%yysfEk%_Yi33A+qOVe?C38*Zk2h+Tq0vd)(_^5X_dDXT
zN at VbAI>?gs)(7XX%Uq!ycl?5Yk+FTop_erFD?3cnjkNqrk#t&7Z-6^xiilf?TaHVO
ztw7CLTK1*!K%&;4mtZ)6sogFd)WUvYx3vK667{CL43SlPtP5Oi1m)f-xe>3W4tQ5;
z#O7e8zb6jWc0Z*go8tyr_C#kkHL%d?9Z*`^d69ENm)%=JxV}<6-ew;u0eIR1C51JH
zZX=$%j_=szvHWH(P4jw|u6_~s2_%g4wmE!UPZ<Z)K|%H6X2RrG*w-Wdfue<EyqeCV
zN*&um3kBPtPI9$?ASzUAqAK$p6jCpujV1^E0 at Q!5A9q(9CV6U)I2 at z&uUtVpzM_t@
z>?Uu2uuIDT*Nntkf6^fq$N}@9d48~90`J3j3I4$g&%9&H<WJ^C47U4kOd|}QY#)(e
z(b)ZH!MPWByJV<+h&IW+oVr^Tw7sAnh9%nH^^G|e4mHtnmZ5ucDMnjuVv*8{DPhFM
zo>60Mtrnc26kL at n|MY+bNawqq?>Ch&oynWdZaG#`=ZJbbbY^gr>LiNsvV3Yx0Eb;G
zXW(uDdSujT-g^q-0a0qQ^SeRPxVyE?%D|&6d+sVQ(=RfLGt`%uaU>7EyyF*PqmJsG
z`Rams_G~o|l!yS9GPj|PY)rhcMPi2MQ+)1P)`)y5myV&t)MY?|Za3Ea4chL`xt<}!
zY|V*fiT5#&Y$Z*Xn at n}-k5M&hIy^fn@{tk{6*o_7)jHi+q at i|ngQiy`y7<mb+*1G=
zFVViq#)LQUp!Hxil5H+P@%du-NhdVBK_q2r;`L at 4ZCwQNZNG@67#_XL{cZxWkIvDa
zPUBsBr0h?Zf*s|ol1S_p+K+X>`^!$eMybVgwGv%4yg*+;gFt6k|3<k2vvfCchC$x}
zEn?{2S5=+BP*4=Lhf at HXlDcMI)z at VJr>Le{Qlk at g7Gg}<?C?Xdx2f!sLe1_o0Wk?W
z$&hgCdUT;U-A|#2;{Nkk+UXlWp^{CmmT~|SSPbF2pP%CD*ASH_REu7A?72g7#}<XT
z7Y}^eO};IP at tLlvf;_}gMy_vFYY|{B-_8+sWlv-!q0qL@?8G+)_(uBgA2JnpGba^Z
zGqk at E7-l0Nws4?ivTN}^)KSlERrzFBpTD{A94#Te#Qhk!rbWYo1NE^&&B`_%+)7Q*
zYA8pU2M#ld6(8o8E1^MI{kFRxc4VVz-84##%kpO(VMl)UtGy7hV=q)iSKG?BG6Sxt
zE|gPjz#WPwP6s_<mil0Q-3i>)=wPpLFtJi8g at cpSuHE4X#9`O6fo)b!Q at nT_1IpJ0
z at 9RZ>YVcZ_$ShG2HyvEryqFMPZQ^0n at Smn?oHE<9)zUs<YSN%hn at g)xV%8kjXvJw_
z7lgm;K}nHRaa`5*i<yO;=*LNtUg7Bu)?Sgo;m;CLJnea4qs&&zGp;meI!dEXl$=bR
z#3edOELg}t3MM8AJ7_ at EZemq@k^JFaj&NLRLtBf;mD7&>;-YAtFY7vj%^#t<RuTn!
zEiE)s%N3L>Wu~S*V^o*mvtVgh2}4CQk0wzm-%fr1FgiB5ZJC&C87A(YbP#%Bqz63t
z<boi{dtlDT2ZQ6wHv3>mUdE=p=4_j$$&$SI?0*>JGq(AF0%C}C<6bw;`Ff&g;%VAt
zRmcV;fDd-1jaBvE&cEi3B$?%vW_*RGpj~(lHL1cfOC|P68e`B+A_<H?Z`b#7gB4e=
z?5CK{{*ndIo=;}?E<-|MvY at fcS??v{CF)0!YZTC^sEWYQYGU`whxk;HGXG*S<jj}K
z%sf0bas(bg>1>kmMT!}x at Cynb15|iAX^nXQyLNh2{k{w0V`{^ncfG}YsuKdJ^}I%I
z+d{=pf?MVwN08IPSs#+TPOSa0&VYJVVUolysQ(QGk23U%6TVV&QpQ8sgIBbYP}z|E
z4zc122<Bs at 4AH9M2gxEzgi3`fDzDouk!?G-V{`Mmr`xkj-ddRY`qMl%bjsj^PY9QO
znrr6=S4)Km4j2Uf&8V56c+0r32rBO)P042*kaQWh8^g0>n`EFhI)AW6?k;GRp1pD1
zw}MZa8dDMTWkAdT(?uIpgMJbN+ni?lR(GTbIG#A_x!&JT#~a~r_8?Y#pm5V7_~y(c
zB$IUEH?eu>Qx at jRdHa`P20D7;#N4JTFnkfabbBtk_^EXq`((=v;Ch8FHeWnY1z)H+
z$MHmz{uPIo<?}v}&TW)3r=Fw5`zK{IeoU}Ip3b4aZpYx5xw!9?=_MajJ0e#kZquX;
zy|=vs5{8Dga*>=)Hxaq$N9~u~j<~&%J<H_*+n=iZT7`UAA5W4TqeB5Q{M|WQ7tVf>
z65Eb0LHz_}blh at SQdB7$11=1)!`Cz{#zR920*?p1w{BSq4Fh2#rU$lZ$R{Abol#1V
zfAuJr4Opy7<dI0X$M}0qq%6ID`2i7l-c}5uL+1MUt;o0zG^7TD+7MaX_R(JIO1JE9
z>4(ElmyQs>$=m3~e)Y_ob!xsv33fOzm~ChH0!=E_F`5ULWQlH0G)-O(Zw#x{k=#$>
z_Zq4RR9r2*U5_5JcrW`K?2LE?h1<vkGHH-|XS!z6VoS`@3oY3`XkDr5qsBW7JprjE
z?M7&Yoyqqn^Eo7RoWLzn?M4x0>~C{sDlX`fA6&^s_D_|>X%w11=Xx5QhaF+n$~-Ok
z`Q3MTH=lurLc{{lMw<OgsJC_22a&24OK!to7r4RkyH{7GE;7Jo25#A#GAhRbdvCwF
zs38pKLSx_<m{#NI6m#*OYk9-*{CU*KMpqjb$hH^$1qY$GuA#9)F7l@|tb4ZCMAd~C
zO_cclF%8RN)>ep$nUpQC3i!E`+Q-T5wu>M}Hj3}qsXH-T;SU at Fmt#fd2fT{7c&q-9
z at E+Kw<wDD%Nn?KRN9GWhhSC)R$l~C+Df=l&S6~ULtg$|h71N5qR!I+~;vGes&>+NN
z)uh5LT3R+0Wf)dow(s(18F)1Oo_pvlO~!iX?H)#{rpYI}XSg>17H?lI at u5mO;_4V{
zD*N<(lFeesYWU5~W_oUVLv%19k5hDb+s^3&+(<orv7n{~*qn7Ey0sS$mEk%<iAR}I
zo#W^lLaR%L%Ow at w2w%%r&fJDw4qg1giRJNm=rgj`cZ>8(c7|@wN@`enb?f&r!tgDr
zdUAr!tVQzeMo7$6XSDKpOvGg6_L^#3%OQbDzF&FrpUvy^zXx+t8)aReDjPG7jHUK}
z>S%VSE~Z+C&so1;Hd`e_(ZJp`KF)o`3;z7of6*5VV)06<B2m#^K4(arBRyxY_cl=p
zdwvoc%3n9aFveewrvzX?L(V^y>B*W-A0AZL-67xfj$zj0a)O|TAxWU{iMcmax?)Rt
zzB!%egCC;OuD$)NN04k`GRFV?T_W2R-5 at xA<2m;H9!{oT{p$|8iC@?Z{Gk^%82j^T
zxMoZcQ#5G(-1!YuzD}q>5S at jKLS|;<>&^}Qff5IqTQ|1rm<B&YO}P;joiZaXZKk+~
z>y+gdb$TGhv59i0wf&>*^o=bk-vwE`%QUlFG0_zGQX7^b?KcoJC?{An-zu-c|3cBW
z*QUm;x{sg{(sfqqMs&VkS~z_Lu~7Uo1m33%2ZUwecOE>Q8I&@$tB=H8e^I$f at Ctn3
zARC$LVuNvxt2Ic!LfTUg-J-T&;rgjPC?wsb at bP=IKAnjCSA760RBOp;^uCR2$Rozp
zO9-;D(KZX+VSMk~^NJbKD9MarK2kDZOkG5%S$k at 5=J;@_-Z;k&k^f)o6eW at W>2sA>
zdo#b1AuCQUc7+X&&60%ql)lTe;iy)z5;5WQZN^qY!=ZTY>^q at -n62i%cSqF$7N_CU
zvG^OCn`$?{AOnc*XVakGmLt)-gR%b-*aMjQ(t4-9ExS@!?~yK_w;62-CA<vD8me7^
z5O`i_@=f}X8ITZdEQW=)Vn3 at 6^?@@Tg7&#1pq~^&DQLr<OwUuPI77TgNx-i$@PWp|
zb`+5cbMNhB)8 at BJAV7L4n554Um2%VR+()TZVuNu?Y8>vBhV at pr?wzgMenYrZ`prM9
zzDco<6?*ZMn6!>OP)$4r<TS-$iL^S3Ca^AN0qAT^sv at OYEC}_nNB+azT3Fjt<Rq;z
zY#y2LT{t1J!sm4e=pA`Et|UPhn4zhZ{$rlAX~61ZyMEaTrsW_rjShMoT6<C{4g(lH
zkZo=xC*VvycI<|nBq(+38HSEx2~}a`$;%Ga*AtipZ7+~ZK52i%Ek^V>;$n3bhnVpy
z*L;QYCGuh<;t{v%53Hbai*N&4HZ=wt*WEc(uxaYI^9|k9=@ZE;1yfzPVqzPK;FX92
zb%%&rS)DirR{IB}et;Ee!`d@(Y at 4n%1Ae+JKk*v0N8<iKn23(proD3&qI`weT3cnX
zT*bNhI6rsjzbArU;YjEh$6A~)nYJPv5={4A5mM}w at BODuF`%?`d6V$XnaF=Lo_pyo
zeM%4WFVIy%^ciD<B}fv3n&RZL1^W at HRXve(=!srO!s_-<M18mW<C8Yh%|s0(C}3H{
z(5opD)Y8;K>QgGpuCe1rlk>iTuKYkV7n&M2R-MY?cWd)UK^T6bSg#@gX3fvEo{e!_
z?<ulzp%_0Y-}yEg6ZAWjE{;5axa at xU&0pVAx+pwr$YIvKTa&y!YT%awyH}5A4XM_Y
zM1l~86M_P;Xpds(;fMB)XU1D8m at fKl^NJqUk->9Rb24DdGJ-LD9N-fjzWY!Q%=WVo
zBpg7uXJCU at 0w*G#6z8cV(aig_7zM|Vem!)^@d0vt;aRTV+4LdDMuNNM-FWj09eGl+
zUg7O&rqf3UmtT&r3YG&)_Rr at Lh0777K%}>U^b2F?+jgo4N>PXq<S(l02Zv(~2x4<X
zNnGtI-s$;618GoRB*ZbJDJ3b?Ky2|A(+W|*J-`iSW6lw;Jk-X&vDB8tT&Ep6FC^Fv
z$<$E9Nacdq-o7F2Kj$Jd5r8IwD?XxtusV3V+@!=eUbBmfSC}R#Feo+>&vL})Yi&;U
z1!S2^+Bfi72(EVLRJm&g2?aj=^szlWjE-@~P6=vmzZlS8967%8BqSj}Z9#V)L<)1r
zc&B#nEgGBl{K7Hez9{ff^#l~3yi}2i1&w5tZvN&6wePZzkalitt_PI=Gc)M3C#$kR
z6q}M5iiNahGXn3nt<zH#jhr(gRkka|=-9q0ZHk-w?53mGY#4trRW`7ZC(M+0LSOl_
z^L!r6pWmB`a0u2!9y$Y!?^dsbv!?a{lNNa`7|v&|2q`5WiWHbah>;Wl<nrmKb&+$J
z?%Qp;iIu#l_HBlO`ISLUWq<FLV<&$(SuknPfum+c6nPJ$h1<)fS<S_v2ku>t9pRqN
zw(C5yJO8Strc+KytV2#Eb}&Wf!fW;571uQVT9mH!g6p7yRwimc#q&OOI%v4sEBT*A
z3<qar(lydLQjy5d>0 at s|r^Aw)>TPXhOD|Uun&u;jz<B;`zl;)+Zu8bV_iwfo&S#_3
z*3 at +zs)?gQY=|VZfyafkn8bPyfNeaVdhIvb$FfjbyxcYse|!+%R6pgO%s+Uy{Rai=
z{{SgK*1y(Sqt~_W at X>Xnm&b8m$;reb=ZlEvoY!Ds2`cnJJV)^vu)c6oZjXEwd`3>~
zwKnz4L6aB0M-wZGf<6L at 3Bnd{(>CVc`rn4z;JX#3g}^CrN9iTIh^gKeG>-_H0M%79
zWZ4}5w0v<Yb>^SC5IH&{Ryp at m|4>|^&d^Ziy%3yh%!96g=$s?#4I~A=HE7dPyx=>h
zwjZ9rrG^qzvvkcc{Ex6;p3ft9&8+L$4Q+;X90%+EUc$DJ at zrZ<h-~C^umGc;U9I1W
z at Mi_DL5=J+w##|XxfBe4^MHvaZaqBppf`B3<;NWf-k6+Q*cvSP-mqRaM`hfnZ{IzW
z$u=*)(T}VjR3>_XTB5^1=s9#yA4a!kzJMXI%(o-^jOjEWAZ-&7WvR7yt{ktebB1>^
z4 at 1=2mTDel%ypkptb^iAYXsSM at uOEwneprkMT=<k`$KLe$u2NRCC8)h=v+%8g5Zb+
zsVMjaIRqay0LS(ar*Uz<wLxU2ac+k$ro^A9k#mt`w6KBaH(OVFPKh{PS=5S7O{_Q0
zbmZ~6tEQUVYv2nxVky1&akdxBb)$2L6Uujk&!>@ambN0?TeVCzm#p(yd%h$UCG<2X
zZnikHrMYYN`55Z2PSP_{)7xW|X(etOytd_|?6+%zy at rb}O5N*P#&naY1x`~4=S;yT
z+8epv<_Oi>Ql+bdxMzbR?U*T3K8$>J(<c*6mJjJ^!{Jmy6|TN+y%m}^S_8?iQd at Tl
z7V~Sh(8ddqAM4 at 4F;<-v?K?;*XvL at 3f+c{)IdHf6iD#EkMZwF#(!Q-&*5_o`Klk^V
z63Z2A+a@}I4^^ply~{Ju(HGeUZ$m65sFD#nM~MrBtvXkRPJ2~g3a0(h9@)RGN2UHI
zBq|Vm`wcN<%Xn at oXOspUvo0Q9Hj(eNSyF<o at 8&sXzFx!z0AaYY@=06N&StKnP5)!y
zQ1JhvZQ|B2zI~df1Y6}ONEJk5656Mcz-pO`E(o3EO(IQlYzA`)csFQMxER8xR98*)
z`>h{dahRDepJGyMgjC-%xo8tP?WS!_JX)^;ZH;C~omiKCDX2)1p9^gr*X;`Q7iZh-
zhMuRCsR;|J04!W_l}I14AYV>q)poNihuHI8XLW#a+qZndQiYR-r4n!K$2#BnY<M&m
zMX+0rY&2k-O%!g7o4=m)L4W9;eUZ at 6YOeP?m0Pm(pL)2z$x|-zQpY=F5(NOh)a0&3
z4^_{woD}#KrE{a#L at JW6RaN2R4Da%S?9yE<DekNk at yadeP>ExV2GfnFi^{SdKxcx<
zvJP at Df@QLQZSB_jD`xEmEeB3<fE?Ik;$Wg=noD3ng+P)ko5K`Nek-ZBg#s_|YU8$h
zZM(?JIS+;c0Aba?1hQkg{f5-Qj?cH_9+KZq*r?jxEUxnenKH<GJ=a?LJIkNcy-#A_
za+sVv_LTw#{>Tqh<X7XTxfnt)`aS9uFN6H(sCTFHmtL~_dQ6EBb6*d9rEE(wN;Q})
z2$`C#qFl)9pj;N5K-Ue0Td>28gn_-*&r$7?>d^OpjaUHcxJJm~GCR>0VOjy*5%VQL
zbA?k<w-~7=Xs4YeG6KLOKSe<wD8?JvWvsTrhzj1Kz`I~fix$3!xn=MhVI<JCtDl0e
zDZ{)i`bL5-qK>6o%rl~7<bl&W3tegRmtXm}v`rctHq&>ADoR at o*#wRp%dqFwm_S8&
zEJtPq(t9qe9Gtzp8Y#E@$e;_FJHZx->|9~EhtH?LPP{rYS;;Cga{R-q=^2}28H;~#
zwna(Qh~Rbaaa&%auB99vi`<TvR{U at O%{H*^Z072o>4T*(`I%A8gJJmQP<COnCk3R`
zclQGMAL4z^GbmTHo+zKQtF7|d3xWU4kmAuznsfPkaO~I4bSs5b%~z`LLVFJGf<5Lu
zYCw;yCD?w2p!kR0WT at l4?<3>srAc$pb1F^m-&(^5D4~7eHUWz-ILlfU004p&OkH-k
z`hRdQV^mToF|K|c(5HFl5Vn{M&cIGuZ*;$~Z?z+#lu-Vi8TBvy)ku%P9`;5%5HaIN
z&Ocll0){O<?uuje1Yg*{(d6dX*n=w_9FOAl&m&=)7lfo*dRp<5a_c;D6etNzBXLsT
z?O9-*QOc8J;u`pFFbx?D295cJNMX6S;Uv&RaW-{yd6mYNK|>fnAM14yk{&qG$_h~;
zLX at FW0IX1o*h at 2$U~?kFewgeNYx1V#>s(rG>nQ6vP53YU at R!|dj7?`GyNMaE>oDk=
zA%zm9Ih%Vs4$hOjOHb)V;QdiJ+HO(}KU2(0BL!Gs+ib2&;O8VinKIpRs7=r#2Sr#M
z%=2Wqw+LZQ7 at s!+?N<;+lH4V~rF=<15JC(nHl?&fN0*Z14=UX~>Hn-)WaXsMXL}($
zH$=C*E{lS7(gEqFu|kjc?V~d|qpV&k`FC%9R;h^#0vdWN1xP}0*%)eEDvQb>P?1<x
zoA658Elxl^dVT1NBI!ugaBKig&r_x at a|HsOZw&}+$0ChKmtnMFIG39uq_*%#89$hL
zp~`kDY+11ro#qSk&N%TQWk;2A$i3+ at O;j+e9As(^`<IzWZp5d+3Z~Cy{&_D2Nlr=I
zIz?;VQf_n at DWloAmaqD=gO=#W!F)&#0`2LnHdKqP_uznWEfV9RGq@$8qY;XArwasP
zyuBIn&GYSYO1U8BFMZAPkN7F{=oqSZFxa0IE7-4^%^alqxylS00Oa=K8wHc0Hfc(s
ztw|g{yr!X0Nfi*o88(wvqeSEK_HgEw+wSyoA&#&40;)0nnOyRh at Ms#~@y(k8U#2LG
zP>2D>E*o5AW*vz+v!gSy)!28nfzC#(g4>D}Wr;l=mKG^`*Na*oEjDG$_lUwu*g4>o
zN!?p(UrUJUs!FI?f$9yViYvUwnY6Cec`_tZ=if{v`+h8Ia^2v&@!9}+zqB2P(U`Pv
zeeY)%tZAtBrHHk4!qO=$5Hn&mW}hc_&TJp^K)zC*mdBAf2eU_;-%t^sr|A3Xati2g
zDi*o25uhmpzS4b4XMiha$ueu;ParxGCxMl8qB2I>!8G;P>B&JUmdKe9^a!)iSV0d&
zjYK_)s6~sxb4p;P%kKBJu*T|blj%&a%SV{Dq7L5BFzP&RSfD>kur=b&JJMgaJPbbs
zT_MJ5D(Un*_g!50G9|JC35ulc&N1LasHAl=B at S<G5zMv)uF1YyDn2A~7L9F2@&YNV
zjP;48ze at ymnrbcx)njNJp+9_3U>(Fvt^0XR!Wm}7a__|Fn at kgD6Wlj6U|zW1U6~ri
z)={OE#oxhS%W3z3Zh~RMEPfzmWJ9Gk+KZWwb>!B?Q_}_fNCeX7)9dyj{GcsL9asv`
zTzd$Pq3{q*>cRrH^{|M|VAFGo*(4;Yef=M^4Art;LO!bMPL9dba1_r@(`1OPy5wiJ
zra!U$1ow-#wIX*%W!#<B(}~<bc1%btQd>L;A&Bs9cQn^_(`g_}zofoKMa^Kf^ad`6
z<)^$GtQk}%AgOtP7W0Sj#A)qJH488aa(Tm~H$FD~Xb(Z!9=zV8UX28y0&RERD!*At
zgvX9+CW9+adJIa;Wk9mevLb<l)enh~(9$Y&ws>Q~h<pm}s&391CSp5RCNdV}@8jRC
zfyq^@ZX}2+k$Kx)23{%ANjxrtmwV(Kgki at x5}=PyZi9XBdOqgveE#!AB`he1uiZD$
z9uBx|fj$_7YdkdkRFGIZ!^@-nCyDw73Rk!V?D83XM4GkeIbcl(57qmd5h*YoiS<C=
z95hhUdou1uWV3 at _byQ&E6)evptWpOcd2f-QUEKja3K+So;6||B9TGThx&oisZmO)4
zt(9wRD<*452^ln>Wee&nm?u|7 at pq)|ok2^nPKx<p6$WC|Ffo|kDm;=WuGtPRFQZpR
zM#R7PPlHEz;Ki1S*-$SZYsP&U^pLIo8AzEw_v&?)2uw0Fn$&<AG9ueV2r@%?t}O0V
zrZFs^pc-_zi-G at 8*E5Ueyl-@&YeYz1S^G*OqcLy#!40tu_HTcvEEqC*V=bv%zGAL6
zBt>7z0#6p9ln~RJ)RPLPiz4dTN-q#9awJF7v&b8=g=$kU>^cDk%HCdXcjf+f$=k8V
z8SaA1sVuK&4T+Jx2wq0=<v~5UMtd9FSa)^^KBhqGjf^M?aH+#RoX^qsWu9x3!d;;L
zgKsOZO1O&dt78B~)`xcO322?)>6;7btT1fw;9vD;o|ZgT=WukZI`)fA3CC!?URSg_
zUnU at Dvoa(C9%3C^Il!jw&}@vFx%kO+8e)iWDRaBT)?)>WLJ-DNCkbTv;PC&XV#6nX
zSN5snP-UIf57AkvR%`XGtoSZkDgG75LJ`xr(_VY+;K@#IzR}V$xLJ>2r|(|iXeEW8
ztT~JP6cXEI0Y`o at Pu?vVY=aL02F9@)`$ao8`B*SEt>_TQ<BUa9?2CNwTb`;Wp(41~
z4uM at u>Rzc{Vv4T5ZCN at 1?@--a9Wka=CHm~zRVdX&Z?POjNxYCvh0tCp*Q=wMA_C7I
zSirqsib~R(tZ$f-+2187 at iz@KD}cfz6g;^yH9Af#<fn|;J5tbNcJRK<s?aPa#fiK|
z at TF$*z5<`3&6=1-+r1&v@$fyQ(a!Q|2V=^F+f&hc)TD}4zE)uN+~Ki!{kE!9JpubL
z?n}szs^<+59}Eu1lmusbg93P>a}jm9xwsJjVh*kWv<FC<{ho8t7TOt<IPwlhL$0)3
z`IXfgd&J-fR@`DfBM%5uJ6ipoil-Pq>N6>9Ut?Du$(*bu(}kx)6_&gdp#q}`>yTtQ
z&_$}E$hb*DX;}GXl=Yvv>~@M#@G&R@(4p>*y`dj22ks&6&+5}o9`r)*<8=03tZ|0+
z_lgHjUsmEyy*8u;0<)3r5sqXA>BS*|^q><0ac#xUUg#$eQfTV;O4GRS8clw=du4g)
zClnYoO-T_=f8Ii}KpvnBiM0!Mjnrmc3<cEF8u&taRB>#)e_ai!?90FiF1VGV6Na>U
zsZ$|)k}$4)RXohz$#m7?A}uLIGYg!oYdz3)QSO`hNznQt+>MrB?RF<2<KJC~KOf}2
zsa`_Gc5=ps$4gp4g*^ASAtXu0ymcH(2p=AYp!X8I061aM at O8YC?5`!$*kl&o`ocwE
z;VI!@_nX}(;<E`2a~Hqqg)AR?ulecbDfXN{j6tP{u=Q%=&NloH(EvSEd at Se`)v)ns
zdJ(n`lEmA2^H)y|;nG-gZ1j~+L!CN_u;L9s!8>OaU}tYH{NVpjd~zYvD#N<3zOFS9
zbq2<Hm8InG{V at q%&Grd=(+v3SbZH16xzA at jemD(fv0lDP976lUa{-Ze-*qt2*HDOH
zLWc}VDQoQ}R>H0e;wfvc_D=t=`@Ke9(a&>&sZVWaL+?!3*J$OX at Ez9-SPS{Cn at O-{
z$=_PinO6h;nT+KgixU}RPxl5c3PWzoh|_n=3|Y_<ME3>&MbITvp2FR{A4ODAKeon+
zwn%Gv;kh-Bcv;$U*)U;X?UL9gp<eNEbv9cSf at ItfHJEbqGg_t!sa6=7T_^AoGk(h_
ze@;bfkX+`5a&SLEgNO=Jh-QItB%EH9ISusc5=jEb;`x{4?r{02j=S{siZ9*_PGnM2
zrgM#kdKrjUD}}J!{zC%w@!Kna{Z0c#;)1N6jv4C)3#%IG+t!;8pfN<0c at mvKFG~zQ
z-%OcahG;lG1rI_<$DMTE5r>GvZ*d|e>2k%edkpzQkz-I?us4$qRRALuRBsQYYx{M#
zHr)rFA%p5#bFtQYUc|cX_wCk;*lk)*i52?TxSY_1vMX!`B#Z at CX8(6a<EB3;7NHQi
z&(Xbc$81- at 69N}m-Sp*iZY+T3y5P-*_4sAab at t)>4h42X`Y)dk7z0AU30Z07{{a at 2
zx7580;6TdrPqM8o65BFrw?QaS*6Q1&7L2Q0Azk<zF`LnJsSBA%Q?oF|3|8KqH-QO3
za6$FzJQ$a^I49p9!wI<UI*K6Zow%W9m83wOvWPc{v0m0Zw{vR`kJ$hfkw$lkuL&~n
zE}?Pb5$@PfP3DkQ`+<uHLP{OrTtJ;dd0F4UK#Q&441=QS5;Y8Dv~w3t`vv<Mn(U6-
zb1D9u0u>XZ<cZM)W!w;)BlW1U_h^85BrvfPLXeAM+2``6XQ!8_kZ(}URX##Y9uwvQ
zE$=t*T#@jJALmiRw!=R at z@hQG4Ns-wcT#6wHwe|GllrWVk&ElRf3<O2F8WOjc)xDj
zhex3-5+aF{!cy}^-dZv&CH>+jcVW=idIVL4M<9z9+r2q^O#ZaWG1eJ#ish{Rb-Q>B
zh!j@=sLi&ZLB0E9xsW|?oajnzR!X&_G2`7LSnl37EILDdi)}FAUpl<z|8T_b6Q%Zl
zU_7amCCfkPU+OS+Q%NqB7$An*xBS5|^-eI4R_)0_Qiw>veBD^y(N%pY$<>KWRQVm?
zfDFZw`<Ab^dA^0VBk5Bqc7E21=nuJt`y91N|EsbU-W<|W!=D4?;~Q2QJCuHMKij5D
zZ=XpLLLeY*kbZd$Onc-6FUo!uHA0Oy+h6NPg#@{^hh_dRn~)Btdxl&4m78q77q?<P
zHH|6<jv7<s=N$Ok&hYwook<DRWf~Se-a#5KmCEacO9y>@-=k=YQ&rgq3V80TY}Ec_
z>w-PGL7h<TEG4qra*)=%R4AE+_}F?y4h at YFPX7fxO4-X?dIO*M$H9>zPt5$JgURuQ
zn<m#(S|7pO&dr#gOBnD)7R!cVdU%J^0<FS)hixFhr|%@e^1m$|JldhgEg-(R%IC?J
zj(@pJp7477BDxYB^;{goQjRp&_+6cwEBCbL^0X7|&3!?!boWRgSO`lvx&%<^i}VUZ
zMA?j-BtGPY;~@Q(%X2j%$hP4{`!N7!-Hns}?=UhbKCjqpL-(4#63*b+V3*|kSJvdb
zA(KfZXgy1*3-k%ue8tmejp%H-3Q2abFnf8e6}=tmrS#Ln7vKg7TJV5tIT~sBS_t32
z{VyPdL?-fP##-%Qi(nqo%vqu*1AjvbQl^=OAC}wqSBPuK+QN|)?ZQ4$Uds1C#(tcJ
z#n#h8<LMdM{%5(vJ`+3O`1!IX(PY&oAU(7Ifq=RY=&iK2FuHcelDHfWU|?=1AvACn
zt>J=kLhC(&8vdhr1D7PHQPoNCs#HR!P~E-}uhNGOVbhQAdRJ4+nFmXwOJVru%sgH^
z|0=78FpUzZ31%_uVs>f;$7LFi#=19TqE&TGzDnpj>NA{gNMwCN%n{-Lm-8TB$p4CG
z+N8uh301<ORAQGalQJ$*uz1%uD`diqHx`9faxsTa*%*wCjOA+??|=HX;}i!qi4BEF
ztS}nO#SvzE$h0VHs!x`cDhZxPPl!rkp<4t->lPAx=EWJ&Z0b2guE-gi3ow!6#08$*
zvT-8g{Y1sc=s1MqX5HpfXTL2KN_0TxjgAN^iiWiA{l&#~{w1WELg*b*XJ-#&+}<|%
z#8HiIyk({T-t>-;nm8ss8wL=B5G)Oi5^7P*rG;pWL;6`2#e;%4^ZQt7gQcD)DRGTn
z`vJFJlmmAfa7lzSDm=9r<cf{auQKS3w*U{XW~eM)I1lkCDEK)p2pFR(x#y0R6dUCj
zb<t9=O{qrluapW>SmO3$ubP4BE$=eE%|*X}`CW+Z46zgtkO3X4@}p=q9Ed1>xCQ#M
zxkyS1e-;wu=;<9a_b<&I7;FvbRkmqSDZ`oX4{4Ya at QcXF8;{$kEY$qpv+NQa$mm+Z
zifVR+6T2HGteCok<0_jvArxTfifAk9BB$Wu84BX at vFM~k&@nyvUa9$TyYb2kFkZ87
zTZ_vUL_ZHCe=Fb)^uJI+y=O^^s-umUv?9GGkvSB8(9w54k;NIH9#t!@e at H3gv5>$;
zc#Rm9%V!UrwDXQH`RV`hIDE;3n4Z{fb3wCTUt*JsA>mDhyxlz|;xWBM3%FRjtPo$V
z){L%IZdLgbEW(5p{Wu!JO>!c at Ta3Yna+lH1LkL)j78SecW at qJ*-~KS<UO4=1lY)d%
zt5kZVsKG+p=AJt6rKsA*!5Sht&LOgqYIYAW&LQvareXcAFr9*^sqTy7J1G at Tke6Ku
zn8?n{ev24l_gX9=&4W-iFf^(v;kQ-U^vl%X!$y^ykaeVjm{3Jg(N;z at dc~rch1oZr
z#-Xw1Y&$Y+QsX3u*YVf?B>;={@631Zda%}0o+Y6ok2o^~Uy at Sh7<JA<jd;$N-;@@q
zSFzLsiXXzZfzNV9nBwD^sv(|QAO1)^k<SLh(-O`+e=XoDr4fs{{0(LYa_H4K<ivN(
zm${t#_nj`PJ8oaFl@)b$1n7Z6-M>o3F7q$wYLr`SNlLbRyW{CBpt=lg;oUq-KA-?1
zIhxti3!~gica|cjpJis&e&tIO*-f2}Y;8pJ=s<*3xvc=l%Be9a*34g&O*;mGf=1sn
z`*#OrD&HZY;`_el`W at siO%fW}W-HywMpcKPE*X0gZomdJu4aWTq}yj!R3iu+%+O^z
z`QhWi=&;=Ts`^A9%_yXBzXB`uZf%M;7KdVzJ$qN)9szEH5n_6rZQ3zF2{ea(k^qN&
z+WLKgWwcDVR#H<5Xn;?qfew?Yf!Ns^*_>o=t at 4reU)gXg?defH(J|Ary_May`&bR6
zsNfi%9UN;HCYWn=DX^dfOQ14pDHA<ft4|#G<z at bNv(p2nC;>DjAZlidnTN$0x-xl2
zk?jUR5UsiQQ|f?xw6}T4ijN#I)A6GQg3MxM1Eb>*LYHm);Ppp5Jv%_1;9>=9meJw=
zGULw;rz2wDKKDQ)HB_MZM?kr@^6m|IFVes9bPwoh=z^^x7+tvmuwEl09bH=~xwx1X
ze&T4vz>)gp*#N`iqNfJVJJt$94QAKO-5Q9cgs07;tA(x|6EOz&fN#zH1L2sK8p7eJ
z)vj0d%>XyIreZ`<LL%pMmf!6U;(kCBfxd?)zYmAqVu_Wx39oB#S>y^@@+?^i2FjXz
zH&5h_b&R7Y2Lrr1R7DM<GcVo>^Xk)EzG;e(3G5e>&C#(b8ZP_`J4^wL4G=Rg!;4yd
zdk%+_o~xwZkeIB*<Wy(BcB8t%O|2vx5q+9n)0Gqs7q@@!&a|V)=Bz=+m~6mU5DNvi
zP_HcWgQTSBG>bU3Q`o+lB`|w=BCn_X2K5_>+URW52r?3S|Ip7&2BC_|xK>boWZ`4g
zWspRd_(cDyMVjx{Lykv1(CbK7!v2)V|5GzCva;#i$Rn}OSAgTur=^~W6*aNp8a_Xb
z<*RWr2t>EHS4!p&2I8WK&1=~OtWi|fpG+R^K;9R3pD)_QjVodASB)>$*Jo&V!i!nn
zPTS~_2?C(th0W)NEXpBSpwMK?{8=s+LG7Dt<jbsLRECAj?`HnQbbl<SCy_^8UX=6V
z-DzGEXk;NOMYIN`TDXKRO2TwnB);uPXXt^d!?s$~*D(Jq5Ty%({u7{I-3h_3G8dmf
z6v$Od-NL5psKMx-n(*|(^s^!m2ogj1G6FX`V-8l+QFXQ;3hF=gZq0Qo4U`?0u2mer
zXyQy7_Pb3kB=1u*R)rY)(?Z$Zu)}yo>wJ@;JKd~i%p-sc<&(IyRG;VbCAjZ0*#w1G
zq(W7m&DmcBenSw%?T}^{6xYk<u~eDSdG~IjUA0T!$AYa8bex)<rS=T^d<TS}dcOtW
z2eYMSbF#j1`UCV?6+HIu4HID?R_KKv`W9^=v`N`3O}-hJMTRIFS5k$g(NmGVY4}k{
z3 at xmo9%8zPd6pvTUw-@=N`PS at P?CA<*UZY;Z_}gmxwv`X8d#MFlA~S6Fe+Od_x$n-
zHtB`@)=BP~d#xsnIy<S~p@!EPSp=&AG*h{q7HHROw<j7EmoTmj6n2+lh^V3~Y at _gK
z&4ib73Cqtbpb2ww(mrp^-7`AO_m#P(;#paT80IY|Hm98rg(-V=Y{IBn=C^V(;ryJ_
z{UeWgmmvnYz-V&h4G8E(IP%o6RgMBjAp({k3GQ;%ObF(2Kmf3J4y7b{?nUwh8(MnM
z9eN`9rUX at oY9iC3HByfYhL*bO4ENGT5|ek<5I)Xej7MSqeYmpie0clx7~RAZVsirg
zR8+S|8ENRXn}GW4=!^A&UK5<Qrbc1D=^VFox)5sn!Z`uG{jJ$Qi-ioy6{eX1g@*q(
zuCI&hC(kTv3lJtc=NXG5YPg{Q_*YJCv|>FKso(6d>qZAkh6JL$OL0IX1{El#0j5q*
z53p^fp?G^2&G74wUUh`UZb%SK_W=5pzupvlm7OfqD&)9CL8)scb887~b})#f&4>kP
ziGr^FM^8`)eHfN+URC*<?dYmelni+xTpnksWmf<D<b(e|^XL>OSFGLWNGE34y?SuQ
ztNsuCRVm!E@&0Ic91MaE5;*IiS<ROE6PMfd67A}wV)Cjy4nsQ^9_n9j#}Pe6Y35P^
zza626K4FKwb$jDe8V0&PNdVPkSm->7sQb#24iC0e-`o5hd)?OgQ~WFLuCGK{h@%p0
zh!s)x;Srv514LJ5wzd&Tj0>oVzpB9U&IBTZH63E7gr@;I)|d8<SUj&fbQj+gT at _#L
z<>AfE>Aj8=7C|k^^=UkGU_SG{H at 3T>h-Ig_+W01?>h$$G;<}l14x_!2kPXd&wYvG5
z%sM%)6W*-!Bu?1msMPPdJS%?JzWlZ}a0FPnUAQSM<%SK!>E792;VTcd3!xvD2&t?=
zk+nSEFa~$^vSA?GmXLtaaUVb#=k`6g$JiDYk2lf8XZ3Eg!rvpu|J`g&Q!P$&p_|uq
zzXu{p=fz&ul-u*=7(WtLIVTN_y5A&z2r!tM?_pLf<9-**GZD^mp**m5cIIQZ!8{t5
z0e>i?m>tTXG62<s(Y*qdiO0C=7rQTa5DuhALPY*7I6PY>)frjn7_)lZM>r9XUdk82
z_DlC<SDO-#$<YgYY)wFee01H33uck>Lc{&giMdvGqKp0}JV|9S7}fiPFr<x0mS}H(
zHITkiPC+M0&{`hf+X3B;YbY34OZr7sWC9>gc>#(#r?e`M2~y=?5Qvy<aqpDP49!#4
zrnmqO;!5<+kwt4s4foRPH>a^MU-#TX((RqZy%I9DM$u#jt``*DBTjw=XBKnU)yrvW
ztd1WR0#9svQ+v6WwF;c<j`iB$S};{Ri5?J){iu)Gd9q{AHl{3~N8$i|U&WVu1I$%t
zLvry&dGu9mT<<~GIymjuNX}r}0mXVo+Jgy at V%u8<-`k-!qeQn_{{oEkjZ(3?R-{~4
z<4x9+t_m)EvkrOAea=qaO_PR_39B6N&A|CMr#xUe1e`sJJ5NTWiY|eV1b<#$Qs=68
zlJZC;<Y1Go6 at IJKKek@qBDP?rnicGwr8`+nPd2P&kMXB|N$(NyVG3C`I9s)*&o*jl
zI7Y2rnzwaIy}7Y&m~l!>S8>o*U0eb4<q{S{!5j)tSYt`m!WzoZ>V^8>{W(o#I=IZk
zT?Fa7B6s9mO^I^nf at kNM6D}cV{ouB3SFJHFw=Yjpg*l{$sxH6xL)cbj5h8rB*-Rxl
zM^n6AEcLuzymMsu{BgZa(S)Fe&AH6x`FnD($3e?1Hg~dThI?MRq7d1rCK^RnL!nu2
zEVMy!$orDzB2(^L=C;c8qJfX2n!l*ovR-^v0<xU60`$Ut7h#dYP at bnF%xfQG*VjnD
zv`MHb#i4mi3_LFPsP|aeTEvPGIF3N;Tn%^B2 at 1ubyH@Zhw-O?D2l;IwxPb9o2DJH=
zFcD)#HIYXdS4;yG_meTpG-zVhsBr#_jj9m^<&o4FtX4f!=D*XJpmso3C%VV_xNPu$
zg#tvA?)Nen4cCqS<kHzNz-SHz$M5mMPtg^M5%7M~r};EU6on%z**lkM2H>j}`_%Mt
z^Sqv|qNf1R>QGSF$FcL~?f32otOG0`5th`lwW<q6<Pd<EFNj*1Jp%eR`>H{2d|7hx
z;RU=DYJQ61>m(7pnpICAKHKnR<(&h}w_O6bOXny1 at jrs!*o*^U1f`dq6)|5@>vDGl
z%X?TLclx1kUw~(Yb$H(?W_;;}jCMJ9dD<Ko%d)rBsNwn|8$+Kez>g|-2V#Rhn7MTS
zf~$5|T9UN7<U8QPFdj?teOCXY3q9)Y2Hj;k`iSt6J^|F^4&pxGm^jeRL`Gzv;IXuu
z#|g=iDW4>P=KUIm!bPVjl8kO}Ag4ign(N^^TYb0?prKQ+r0AK1>rPJ|jq=n~_6&Yh
zsL560BUT<J@|Z6<D}wnt(oX+f)IK8iqpoA7WQ9o)@+}}(+}!CY$Z=bvK${y4lJjA!
z2j#w5%LlDvO0ry%!7}wdBF`?o-?sIut%Y`<=rYl3Z;n2<+8!&m--?$~#+>A~yj?D2
zi{6k{nPg%EnCMNb=$k%FWq^u2i>5deL%EM at 1j^DrSg(rVs(2nUEm)j<cO`z#_s29b
z&(<FfEq2>Bw_ysWpj+$pJJ5W4tzP&Sa0zV9x;LMIdtBeS3DH(#qu_!$k~9CWl_B&p
zl3}sKgd#B%x;FSZ|8{YmW7>xp*KS}FG9?im1s-2H^3yM~dYtIi7AlRT>)&FAp(2y6
zZM0J(^rL4JD|du36(@~~Txw8 at c|&~8IM$l<u~?)pBjWv!uJA%y^96CEAF3T7k40Tt
zSC~ceX_}X1fo6Gbh`T*7Xsz7fS_oE<hlJFZJ<*!5Dwy^<>VL%|>z^$>3?<Fla)JRe
z#iGN1JltqrmH%z5LD>+ev_20K22jq2bfi`}YAUygI<$IUyo}xUQFNF=Mb=RDI;uDW
zh&VR=Mg!EX(4gcR at zE@mO1?Wjf)NpXEqBt at zG<$W-kR$$4d+!aSVZj=an6r)!>JjE
zxMA2QhuB-7N#iY{P>3s})=esI1h}l}FLg!J7WLzvkK^*zEv5JO#ASC(7pXMxM`IPg
zqjgKW(QV}VuGHX4We-1dP}Rm}$1(&caF8%ZkpTGBNl!vc)3d9mQ~@>y2x8`Zuh%vY
zO&&!wB#f95pUe3!xK?#BNB=V07G`Qas#f~?eHI>e;A@>%?C|IXavh!LUcEu2C0T#Y
z7*hWVidZn!-J_)s*{Fzq^*$ShvR7xf`#u*T^c;~-Be;<R%Y-8E(v`G2wL8`jRGp#{
zGGHC3<Nd9QQw-m1Vb-|7vBDEPD9<%ad_ZfcL&B}bWXxToxi4OpWs@)icq~U=7UaZ-
z6+GsOAZM}z=25rzd-Et9Jx!D9%yR=DXgAfx9z{-vuhHpT<zedz$kK}WfLAd>B1r!_
z7qw1I-jwU|4b0Yi2&iWfY1T}_31o9DG*Vv6b!Ia|ovyOP*91*Vru?)nj|fjq^qKd+
zrY3OMg~#M9 at jlO0Mld4i3RwSorBmRkeobzjY#GW#w(l7X+}hzj|6C9hAg|3Y4OO6?
zTT`y4up<L7ivsUiE*QX-9Namg#w~NIx?s&_8k at i`jMf|zPC>zgB5J%w_d)mC{o9cR
zyh|801m2Xa;P_!yPW^BdOF36GodD+{7du?iZR15}Nm~v-<~v$}pr#_dChx<2#rg1o
zx2v{U4~y!9*N1q#H+Q_I(INTkOU19sL8(sax`eC(7u)-FDdrMnv;f)bD*KJ>4dVLp
zdwV7rb0WRdR3O>r%&bG8d)K`JQ|;Z?KqshhnKpj!K}kUx5>Bs2(ji|OVFzW at 9kr1Y
zc5K{NLv?9`t=9`S<2qlf1>$$vTy%PXwh-wP?b%d=dOH=|4-9_PjZ)D49z~wnX5UNa
z(#wMyP=Mw94Z2ToH6)yPt7y!e8&AjnHAn(UVrKf<0#3b8H6Rce7iiqJvbUp}&y^Q7
zX-c4bOgDJ~+S<sKyf(#urA$*)u&ICw`3op0si7sM(Jwur1q;-NJeV<sWoFQ~W^apV
z)k1v87jy4}2zX-SAEGxtuS!;Gp4A78m&K at _2IDGyv5|oDXDH*yudO64i>Juf&YHJ8
zIWCHmzk;b!08;5-ACeUP4KGfr$2^}Cvp(H(NA(yTt#<%GQMRwcJpuK69>DFvmw}~6
z`}7+exXseJO-zfdr0(!ZN+0(TtB}yiwt$97*+Cu7B>XMO at m1Ori0;RJHcXpDTs^L4
zXeU;C94DgWjWElhKst<5MS%RHMPKoM&YW_QfMqw0rFI`Gso?lU0a$}hbDlin=yM08
z8F4d!@pu+dlpr*HfN%j}Y;=$cRnuV3F!iJJ%&1oC{E_hOS-ydCadq>eO-7(Hfr)Hh
zS&Mf)8`u^q1t3N$8j=vt- at K1gm@Wc3Muzf4)v`o-q+_%aL at 3wVYwDvl>#x{G$VU>d
zvFFM9XXrp`4??eqiy)71)AVBxa0B%`O)6FB%&QD09hc1id5^x?-}SDDsetK&pf-1L
zO$6q%z;m%Bboz5pYiQo<8Zu|f*8zKM-0{BEoKk}J3(;Cykvtz{?>z`LQv|AzB0L)F
ze|aZ-m8fb>o9#5-?{fjSfE#L(8<@_RN*PVsP_ZG%J5V2~dJlps<oOyfKG~Wl5?N<m
z1o?Brj!`&&hlX0!w-#(rO5W<#rGgf3M6|&fU(`dXjYUSFA^+vb=}jl;%t;dQQb|Tn
zC)=8+pnTB?Tjqv(DBE~|0$LN8K%3x`67x#I+IOGRy^Qj6)!1hm6%g)ay&jgl%uMS>
zv6r2{SL*~JKDB(1jL at -quuelqW?_ at 1{u*~+KOT!<Rca?^lNag5d&$l*r^jAZWtsco
zj}tx<3D22}79cwvo8P%6g|3=0LjtX<bNj2e+&zF3MZ^J#R#Lj$`k?Wk7zYI-?F$t<
zoavOahLD_n{XKts9DU`|iacU at _+XsMOTVhCRVwhR%mB#4f6iu@#Wbx25iT!EFLwC)
zLGPT_OBh(6K-S#%umK}-SeV6x8^E$}+ZRo%P(AqshfT#XJ7SXIOujD`rLJPy00}vW
zod0)!h>XffMW?!&X<UjADAKTA?8~twhRh#1{uU<4CZ=MH3b~`{uer0NXsyDm)1MVS
zi1C&kMPf&*gph+~$`+A{6O0B)u+B(HWV!OiD+6=3T-*Zx>K at Dh&A8^Lp!F+knX1uW
z>Zy21IvO{OjY!K#(g-SNi7VRTL>qcmS;=MA(<`LXXV#SG#or<j1g8+E=b!jbdMu!0
zOq3ih at _g4NCnvt+*OdX$V{@pbbrWOPVhJr+Z_4p-<Nom)PIXe2>B=*t)J?>Myv|u6
zCu@%=Dz>ouMPdLx-Nx2$o(;PET(Q<)2)VH-d{H&Nka0g%npi6sPyiqolNZb5KvPEm
z!PzIvtzF_NedNUS8uMUWz#kLhFWpf+R+v4rH!_jaTPzhPIT!S12A71V2Q78h at 0wFQ
z=Ge~;EIndkB+c+B at PCE97G2iPWLe$B at Xl+Z^fS`DR6EkP-S%|eIoYk7;csS^e7SH9
z7&LA^A}jvy4*8EUAXT at rB0bV<(zR9s at u^u%J(v_OB+L=x;4ISx5|>hIr*k*dgl2Jo
zY(pnN%Zl`n{X(54wGIn4mq|-TD{Uq=qR!f)IV>bt(SOhMJ3h(KID`G5nan72PaW_d
zirGkAuv5%4mCZFt9~#VgE(V%X->q^9hR6?vYv)j?!C`g`-)#&?Xkzs+mD$JZeI2_3
zK^ud|F`DT;Uud-6S!ntuYCh6|mCvpVD8Qod0v+_F%Vwoe at QD9fh8YtL8^*U9O?GW{
zfrl6V{;=846y$n;>siXViT8ErXgH~sdXYF2^p%Bbh(74#C*O}_sVC^3Kdlz{7*#1x
zuckN1k<NGvgqQ+^_1fix<u7i{U5Q0mnI_Y~M)H_^rZ>t>d=*2HF1)@3c!oEpwaAgY
zdV_&WV<!@+j^ag^NZ5_CgQim!MWuYNl%Zla%_J3_6|d(^;t+)F!|_l^UTxpw&H=$D
zLtk)yVa;pFTSgvnXeVn8pB8X!B+oPa%hwip&ClwLrEGZ}z*<1up4sLX>gy}WdjCa8
z%?=MQq>AytM({VXs6o2cZgi)z8>NmN;vO1ye9FWa^M<Q`#bMy`=-rbJlfohFs~qct
zD?C(Q3Kp77*TCUANYuArWhAlar(&gj6C0)%<mCj}akD8^rb)Wx`eV*3-C(G|Rn8G+
z$<Uz1hq|Sb&R_Ql?)8J%qs0g9NGPLbAEp-9XkLMcUoV1fQxju9QJ<;8jakVk>eIHS
z1~EnKMc+FVCCK{p&>yi!gTd7oKxM#N7>oA4BrwxrV_}vyQeX3?dMdA#M{1672?SVf
zD$mx_WM?dKR|zoY`S%FB<vS+T{F-A;5DcNlnf4V^g=`1VD+`wQuc<XB;xGZuJ at pYt
zwX>H^IrUUk!l(geKB6NV4Dsn#^H_btC+BAkJ at AW83*+7eyPvt6_3m3cpexVWA6U5n
z8k>cgYPNEH1A1;Q+d2`Zxv_V{@N*43F6j`VK31Mc?INSmIZ#nq-L_jM5MAw@#We3N
zOgV+9&~O3E{Bc;*LT+{V$tCmAfW5-pc|dqzr%ZHO1Rhe<-X9+3>aRtjS+v?Hs$+eY
z^;g<Vs=Ieu$V#Qu7K!s^i{t(yfRPTj(xP*}ok!B{a?qSBuZq6 at L)$44W*kr?4>NHz
zwT>(W#H<B;IPme;3bX`Q(mJn>{h&MRqIr$1D%nJi+nXySF0f0M4dNsiQpCm4!vA`m
z17c1BP=_TnRkC~A(0AegI|if5cyDOw6AGf)6%4Yg?N>)W1L(!*D54Dxb<9k3$R(M~
zJc=+RltIQvBP0^!pg=QiE+~BSCuH5Ran!d9e;Bb!!we=kx*Jx9b;lqI2on9e>e_-S
zn7Gm(ADLWOt~IAuC61TUm+`*3&zq0>0l?IpWs;dD4LOQV&<;SjBk4kh_>|PPBx>n<
z-sEQMSZfETmHg$zaFn(8k8x{tn|~nh)Wqh%{`z6hqr3_&dN;pjSHWII>+O%Y;6Qz;
z#9rf|@|v*8<e0K7W;QjZCc5`4+ZJey$aw$E7}6Wm8xgFfEeG&S_ytxwXr7dYyR>uX
zmDxo~Hc48$WOdE`%7qY-K`VlI9B}w1#r`?%ExM+-c at wIdC4K-HX0u?%JhutsSkqQq
zMQ<fTaBpc_ at Z<IPo4TI>byFsaD4$MM>Osh7CrUYuai3%XcY-Is5tJV>n*^&q)Mt2P
z1+T~?ajtSW485%XvR)0XmkZV)T=95O2l?3=)%Shs1SY?=L00M{7l~zfP6A10GLC<;
z;)&1Z6qfW?KU?(+qM^-eE(RFr*^3k%w&p=l*z2=Igr^4MdQiUNb}_cw2ClCfd^a;>
zwH-J9bFh6=8us6)P?vudJY40mVA)X4 at 0cCPe*523q)q3!QODbQ at fl5CKCph3xa5n{
z#FcP<U6WPAqi73)edK8a5twIZHm>!}+AP*<p{nj0hpC|a=Vl!{XJ~eee8dD+YV{wq
z8s_v1@|Cg12;W$W4$1*f-mKo$4UyY1WPbkP04Ps at tX{}4r0KpJxzU=CLD=_PADN1O
zrmPNnvB~}GdW*8JE&n+9FzE&B+aZ-qE2Z3x>6l)>Y2HQ>x$--HG{IR?64GVtM|u>I
zUT1edm3HZoF<W00XZ{ONxN;yJOh1D*3N0)xltRyXb`%3&H=4)?6qJLIwd+^UKD^Fr
zPVe;suj4cngF{lVo}q-}%m|pzB#NZm0~B-qcx7$5zVFwK-Spc92yvb&LWPPaXKV!$
z!!4t|MPzpEwy2gVyV{HIlNe;_(lh2i+jEJIy5!uSnfdRAe|AfHPPy13v3Fk1(G<k4
zB<GzfR^5hOElH_T;C0R(K4*Sm%&vVGq#$;H+QF{RIU@&j5tBdtszWufSG{l<&DQ3z
z8AP!T7S9d2sMoqK3yMBZzHd*AF~`Z-PT!5u%DUy<)kbcPqsjEH6`D+u?@y^ZtCRNC
zFt|2~30+T`fgyV;cP}D-G>Rs~d>BF at i0z}Xu5fc6pm)0~F)4(%p?|Dnc>SBopWjdX
zczI9ayVhM;e`FsKzmKUv`spf_Yc>mcOI{(P!=a2BlxfpETi{A*s;y^fNqi{_rGpcA
zT}i3U8%uw(;3ArDK;KupFHJVQM<>N5_0!$)$q47u5#y2=96+&jeyg6k5#%2b^>BA}
zmbPhy1McH0BhGA at h8N&!NeZ4v0|&oIuxt&IGU8`h{yr?RDZq9@*^(Q~Nz9SdtupcO
zH<vA1uLWZuKoddt1-=K at 25G#VcXUK(aQ^J>ZK6lutQ387i!?(U`MKu}p{@GDEDyx=
z6K_M(#>UQCF!duiCc9DC&x~@F-~Qgpkbn&zMaDgmq<K8%)Na1euVB|<wwX&?dby!I
zY at 51ne|&=;vmsx2#jl)3PljAtt+pqzzeP8f$Dcy|mL$X!A=wum2WbG>V1%5$_f=zl
zw1Earsm_%a*$(+#<cJyUY1a_9_}e#vR_K6akZJ&@#hm#e(|S1>?k<joaOJJ$X-u`U
zlac{&nK49cJWysHjt|{~AK4G;Cp{TW0noF4n2c}$sSi`YyZu2e+JjFi<|39<P&@0D
z%p<d<i42F-zgvJ6AGQG4OO`$IOv)`Q|C&rsdb%l#HEAbvZMi`}v1gf`=foC-3Qt)x
zb$w-Kf4e>pcyA!I;cv=gFDqf~O+LlY0GUqp>Z@=6#&3&G_9u^{#bN<R(fm8Z))xrq
zp|05gHY2PZq%VmFmg|fC0?0mdekBj7u_sH2ccH_uoE1Yf67*+D_oxVdMTTAQheE$X
zpO+Ayo|loO-a;!ByF`_vURe`Zu|vw0#!d;@y&&4lh<{BGNj3?@^9uEQG_6l-DlLPS
zu&c%_l}!*;f<ECTFwOJnav-yktiKN<9^^f<gl6lYg+=hT-IIeFgx6a0b1+%@UEUzW
zmpFZYP9nszK*Y?S8jdJ9xgVIi;bi+ywE1x93hx*F7p%=PMY&9p8B~Z~Tp|M&ccncF
zg%K`wJ*cm9V(i$Hvl_%8{kXu8_zi+f!sg8xxl_VrH%*Wk%o;mdJL3#@W!`rCW<hWu
z1C|ze1sXcddm)lUW)?CXJg^NA{TY~;Zdd6>jrvQ=79_!H#HMh<OTt_sV9<;^U8JzU
zN|;!BUnlB|29-Sy9n#<v#q<;K)+`8uk*OZ-km;TPOBMYaLhISA$|ImO_~U6TRgW~f
z%rA$Wz3v}NaG1S>6w|iGqBSG{1f99TY8!H%Rq9ytTU5p##-B34uLgDfGI``A$x6zS
z>ukqr>0(w$;WKdXD at T4fJeOOx>#2b2okitu<#KnV{lp+pZxoiF!E=13=>&M2>8NmX
zGrAZnnW6c8l`jrncJ$O0U6{vQnO{_Qxa5pS%racSXR+834|^CRtOw at 5mkE8UD3%N8
zQ?+HQo!B1;FjPrW(?dpn7;`w;eCXfeElUbf;#pr<W{To%<9xyAk$TUFhvuxy5}mRw
zMfS_4T-1QabfelP(5lyLkeOZ5y3F0_d`gUl`*M}}6pd5SHg6<XPk4HBH~6GHi=gpk
z_A-i-0y-?IC1bU_K~5bxQV<~~sR^2;{5tQ>T9UH#-WBjkFoMkx8QmMDV8dfYN!6Gf
z#dWY2cDiGy)Nxz-OD~JKnYf-`bsNp+NlglOSR)|KCU@>$I)MG}W at s#)zYHIy!5I~a
zNW7!dxF$}Ou=!kfgk#F+-_KE_(^*4plo at ZQ@s6+NetY%XSQlQJcKUsD08G}PYlay&
zn+%dAs=>IXKUm#G9Gu`$Rb_oXJK>tXZ at ZcRJyHXSq$5;dcV{ndtL-5daZ{_AecTs$
zV=L6*@Hzf+5e&EJa*^#7D3TzpQ^K0P3m)r;KdQ#vjM)^bxD5$zPst$*f)b#`rec&i
z#Kf-K5E+p$o;nTvMd(=57LM?HN;Gqts(a0S7EE8*M371sRc6!g_gRR4K7Q!<GT?9T
zhbc92$xBQROoNDLa93hrQRDD?Z;m8)-flM0GYeOyO&d2$rrl|${7iTK_n)yhG3h6=
zlSJ4}?fE^p2r|~t5n`HzafRB4#+zchE~fXVgyVGG2>OADgoJ8dgAP~d&xVr=WtAfV
zu(T;Q!l8GFuZDy`%xUw))ZZh(&3t*e*x>$r|ANWb?HP75PVO57KN&9vECCk88nb<A
zO5DZ3#UZn&fl?pdlEnXqTPUY)_KY(!wG0*fZrt6J at DwZ9nr$K9?rjAsI1d`~>ulG)
zSgSNV6+<)evEO^uCa4uqBPjuOf?|$ueQ0WU1rg(bpEB at t(YyfZQ9Y0S!@7+Vm!~*1
zh=(`@xH3`io%{gXN||;XsCN34`nYbb0!zEsh4)xt<U}UJwd$*hS}xCg{znBJsBv~C
z#XbVt%XUTVt`kVzO)mT1H-diaoM06mZ}U=e7?Lk6gReYzJWMXtPiBc4j}9s&!+kxT
z7LWYhb(oRgbMe~cLbCmAK{dIx0d<8pjP3-Cys6pGyjc*%0?`oD8t1mxu-Y$csh=&n
z26D}6stQtLp>=;IJiO?pey}C3y7fVrTvekWNWps2pEjbKkzlA|EE_nPrAT2OT=hLK
z`t at PCP!#Gq?-r`BeYz(@A)e|og!OudtobZlA+HE<H&1_o!+nTRZ)AWKZZ at m#(?E`*
zyujqENF84!sAmJlYE?Vidv$VlU6pf9?o<nlCLW&)oF~1y<s)O4gk}4tfDOQD*NDKG
z<{<L%TYXH at mB5OxyD4R2J&y9Va%_}}<koN+NP8H>kfQRvho9>NuhI8+-FV$0%nXr$
zLdmy`LO3&<LDM`_wrv6+1KZoui42?0fI1H at Qf`fe15V6xLM5B}6<}oq^+T3g!>Y5p
z)T(#cV(yTq3Yn?jg&D<?=c6XeFocxkvzmCSp+cOPg<u`M-=0laM5*xT(^bwLDK>_l
zccRC_Grr|UPweGYzwa2ZVIz0_KOe1Q_SS-Q!&km0<#cMoYaH0`rTV>B%l|Y1RcIAM
z2uQMzT-0$biIaj$qlGN?fg#s>*R5{dK{y)0{kN-1Vi-%mQD2iD!phRgg=W`*<ZxT|
z1CZ_kX9#f+d%<5Y7kLZ>F03j%w>8#6=*G#~t!`v?Os)biTSaH5$*=))P$1?4Vt~vQ
zrIf^P0l2 at 4-UjeyHC_W1eixLIpMJE$_bj*dK%8NN5<M|zSyS9dT+}I<B6uy56DLrO
z3k^`a+lEQk_&_uFrls)tUGQB)!qnU;7HG*0j<={?DJG!!NONa0ztBkk1+>Ph59lSR
zEhR_UZN9*h86*F3J|W^a1!4`_DY>IVC4@)Bl$l>w#I2?>`xYzNsLxOV3Hf#`!Q93t
zy&k7n^pc6Ic(be#D&6zge1nOI2lE!Q05g|Kn+UwSBa4$XmP>{pt6}StB;v^k4h*6m
zZ`hEcItU}mD at W_=g7?tnO_O^qSVV at P8rWFjRuHX`6X3srRWr^aJgfQtTZD18#`9IP
z7iPwf0Ur6dgJtWqk&)M?j=Hp3>N$Z!=3|D)%@Tti*wD#_q<da+`Sx=o=iLasLMW7?
z8){+fqD}wsYcq(m0bQ$Ct$i{D9~;SJ-v=%X8_H6q$-3e!(M_~Co<;g&go0;ZDUi$O
z_pkDm4hkYw6aCY{;WuNkgJQII1!nMa%S6<L7<}HImxYGaL+$pceEGW}V9<s()Q2AT
zr$Wi?=7;lOFH2)%rTO=vTi78JO at q_i_{$(2>CsX{oQ>%EWe_ at gn?%KK!sePM`at2Z
zErqqPd?ZJhb|!<rRs;0((&wr~QBegaf;DbZ7 at 6nSn^ZaQzGAA}f)wn4g4G1Aoz=_$
zQ$Vc0m7$B&l;=O>+D3A^uhYCxZR^Nc?W!;S1Y at eVMp}LtH$T_RYduCEu+-jFd((Xa
zDuXmVT^$))XMPzG{2mP-54%zE%O5xKaX^@4CXFIT0|GPu?4T;HCxM?p=_EsVrwW`c
zN?3t1__le669gy!#?4vuV2-e{>{FogOE8vOGouCy|J8lF`A*EJHqI#0g?AhO#@2`a
zN$z9{;zx}~%Kj7e|IoU?F;_qc4Beg)sJ{7nlS}1P*6$NO(etY}3Kfwb at zhbO=R=T-
zdVio<;}uHo!H3p0=w8QVN`~_g$KD89pe2NOqdCjGl_Fi14ofY=ES}Rohvjs>*c5r*
zIK+094XT(*ksxh~wg;LX%Hjfe)N!RF at D<#_0SA?bf%FwnY<)8&($!C9ii>HJmh~Cx
zMqDp=CihTw^LHDFvq_by$}K7N&x(n+ia at 0nV(jAT?#8-}v@}xg=Y6OO<YVmY`IAy4
zb5OhnB-07r`kZwPlNOqZ&9GNg+3no2*C_J)^85!rf|X9TBM*h!1KC%ZKX%P+-16gO
zgKZ?YaWP^&$A<cJ$C&yr?~u*H(5889dwrj_kfOp<JPiQ;<*1u#ZE1hc!GhZ{hf-<r
zLSVl1Sl^RE9rhv^e5$^?$&DB-_6Buhd>Km}55$I^K>sc5X*+iBg+<_2+1NL at x$L`P
zs9YYFnyvjJK#ch&E`n`SX0*O5mW&?yzNMXV1J={oJRx=f$-%D0#Xqp3g)npK>%e}r
z6SF=&BxtU-`AFRvC>HC7da6%e<aa~NdFNtRycYQlab!TL6e at lNFe#WL=era^IXV97
zq&PZ02KF%YUk!$q&E(ATtJD-~ASc$EuN6h_<~XpblF1^s at 9D$o6j=#nEk_1>*aJM1
zAoSGC0&Q1M+481av#&BThYJ@>iMCwwsiA07?l`#IPPOOjQpO<bF*!%6uK?yEz(gtH
zkI3ujl^Ow_J94Ln;U{Lmi0Qat_>Pc%+|;FX2^}uLha%CQ4<YfH9gjYeH!taYS=|5A
z&P5~}a}E(E!{^Js9nd0P?gtDMMR({*0ux3u4Q>?-s!`}AdQ%I`fPR$Sw$nSx#D(lK
zH=Wqmd0Gk|!r>oAU7v9CvzXkBVVzX- at HHyJya<@=_$(@F{(5+V#((`A{Uo&VwjFCa
zG;g(grXgu-X`FQhxhHr1RfEzs$`jTlKV2DfV&%<SSXaAPKci3NOC&#A({lF{3NqM@
z=@~eBo*zyUwt+Ab+<^GRKK^+A<mUBBRGS_ at D`H{u%7YdRh4-ehvS1l^{!YFOMC{++
zWv&ph*D{@6&5;bNxZW#NVaa+~Vx*KyXJ-Da^!8`A1PVfn6;DtQx*WQ<X?@LP&VssE
z=ILo2NT}0~_9AK`q=-B?D<VYC1&>0(@<NTfaRprQ;5tf at Q&V;5#~N-e^v8Wg)l4Be
z*$zL%?ZFM#di}#^t80I%0~Ml(9`M1#51C{4BmWHiA%r))?^c#P<+nH8il7M#kM at RI
z!YGIv!};pU?8t;4tdr8QvwMuVlm4N-Jf{4V5%pzJ at crWjA-DKQJrSw)`F*8<*M at 1C
zq;8u at TB|kAiH}p)(G--Ghu#ztL~R1!2P~OTI6?Rg9r`pcx5?t3K~W_^D3EWkH8Dol
z`jp69uspPrS8Y;F3Hz(j83Mcxna^jj0s*RhIki05=+F758WQ>vSjg=GX^<2?MnWIr
zAU{c=+|d=T8OSK)r7qefAECor`|PgeB!5OTetMj(Ub*8G4W$wQEtX-uhwbFRTueTk
zB!e&64b}1xZTz}$V5_Tm+&<rQ2zF7V=l<*5&%#ncH~Cxi4NlZ!!<(AM|Ne+rrhPCb
zkh$jf!xiweO=skI%J7(J!N)wX4S=+29l_}?`m4FNw>iW^PXb=8g0$Ra)XGC)iiI_q
zW|r%4Jd|Fa{|eP)m3RQCkCM|cs~$-nmdVK}xpKUUP2}64q-p(7 at zV&lFyw?e)HdA~
z$ZlM{cw1uTHFZmaPMOiXbn=X27s!X*d!<wF(X1!y9=<sWY|xP*?<=i83n-)o{b1qo
zs~9YKaTYU|%15j<4n_R=L~sCHcE_ew4PxtlB5IIefQUdGz6DgVkW9!)LZCL at YiRoT
zgF)G<Q%r)yiXVXS&CLfQUKBzKlQ1{iQ!PXi2QXUbAhOyA$Akt$w)dtBS?+Ug9#pVB
z5${(2X65}6_4uXR8tgNZ)21JhR-|>6-l7CCw#(+m`G<(q$RD#dz-tU~U}8UjV$60o
zIqeNk;%65b%IUGOMJ;6XFM$7_294w>w4H5=o50;`ZEi^1zHc*0v7YPb`=Z>-7xCt`
z at JVPa{<#iWS*x*+%GBCHc^2hR`926#y(fhYA>U#Xs8=xW<?kHWS4pT{Ey<>T5WjN3
zaBmHVGH!+iTeT3Z7-9#P(S$<snswzUrE at a16JXn)-&X%h^?sH{&Yjj3AL5`?J@}=1
zgT&-A5izh1Z?3C6P#X%NT=TNV5+n0CsEe_hW*)|lu}BK$Ju#;_AxooWAAN)giAzbR
zEUtDiT5>+7Lz at o(8=B?mR#tY--iO`Ps{0`8>u(F3tfYP%CX(8a35GmnQ8=g?=V&{z
z5K!S6asyy%^H at W8b7b&=Aa|?^LtEB^JUat^t!D7{Dtj<(g+B)BX=UQ4VN2i5KmD*&
z1M`vy_>J<7ZM8;XVr`0Utz~MQyTyGjxPG*$_#8}@?0WXdBz;##sC()r1SC+2Ek;9J
z;mBuE`+|L%c{IGP*9<+7d=v!U2o8v>?XxDrk6Tw<E|xccH!BJ)*R_`<G?1Ku0%-75
zd3-6(ktJf~s#SU5v%IDkoVJ)Zl?y)FdsRT=vo&Tp4xS{hz~x=Qa+QmJ5UKWH0^vaP
zKb}%qtaTE7LW(*@=bz*LU8+LhWun*~avqe&ubk=200uvN{Fd9oIY<k!%R)@Mw2WF<
z^Bod2CEeWe`E3f)FtDZc!R_?ku#6}vknWOWGbg<Is6II%j4fu#-95x~!G1qWsPSwE
z;(&(+8{CffGC&B_)!FBHgeyt{0kWP?u;{YD71Vk0!2nF<y%L{a+lVpK9tYg(V(6~y
z<M4Q;nGI@~PouraKr=dF8FRs{#hQ<Qx3p{ZW23g`@W&o<9 at cbhT+t1kJ<S0yGR=Y&
z{w+-x%vwg`Z7jOktDhk}8Z|Hioj$l98zy$%aSsx#0Pk^?f&13W<E%EwhIh20<}ssK
zvfT;`Gmr8?0sb@=jhGt42C`28&wlnc{rbj`i2thDv#G~Bp5P<AioU`IXMNa?#wJLg
zX>GRbQG)FsS<@&6#hFwlLcC15|MjwY9>;Qz at 69IO%4qGbKbfBFnAB9L!G(LoL3TUs
zlS5+U7>lh+vJ89{Wv at jy(rzd^6}K~Opx7Ud<8I5rGW4Kg7VL{tb*GKS>(Y43^jBLg
zu*PQZ*}y)-ULWLt356Ke at V58I`OzTbSLujo36Z-u at x%k;JYzyGHzEva<m<=}kxyvV
zBvCo=>|+80Zn#%Xpo8RMl-Jpgo~yKx+smWQ6a3x2?afuSEUIRM$L&Z=?NYUVr0O))
z=(_4;;3<^$LTgkJ%`77 at +(?raEC+%wx+SLl`#&23+=OLx;1}0zSM!<RS|IuC*n($u
z$>jNSl4`JuF*^a!yRDNcPS26Sw+q}uPB at Y`NUk$V{u$b at A>5m)qV!W(faFAmCB!TY
zWZBl8ju%69D>e69Kfj_%sizMHh$LlN1+1AY0C_a?hb$&N2!Yq)#JT`*sI*aBSi<z2
z$h;hz=|}QwI?RYxKGWHJW at 7MBaZAZY{TA|UDO9a9G(Aeoe)Adh_+sL^w*Qn%DIDP;
zj9TKGbARQi2x`+N5S`FZ$pqGCn(>`1#!2fm1z>|H3=EYNkmoB%wddX9 at 4KEikj$)}
z4()+ at c3}<#Rt=v|jWA8isdF|D_Kxp3Qp)O*114esHpC`h5y%uyCZ{o83y0|et%9P%
z-2g&UJH`XbG4g9*D=Y^dVN%Qp=utE&E}gu#;|J&NGo=@%eHPxc0d0BsuZSe_<cHRi
zwiK}42TJWT8lJ59 at BN6wu4}rZI;#>OF{rf&mEsz#p8z-h;#W+=<)C0YClL@$*fafQ
zXb|m?B`9#8){&~3zc7bjm{$~Y`KA$Psx`3 at WcJB{vh0Tn?oum{*xGfU*k4{sQX&I^
z(9gM7Q8)=Gh`*#*4NXZlO)vAz*IBDB{i5N`Ve^i)&|2Vy%Ar#ta#waN>NEH%LJhDa
z>beZ<?uR?={cZHGMA&o36Q5R96B_qi+mCNws0m7Nn at sCF_AIMbYxcipwz1L(lM^V@
zz(;(T>|JM%P at WckOla~s0cIVNMeXa1nVSyfxFxf(zKJ{jCw^>77QD{_y|7~5RNQ2@
z2*>~Lh5e##NX0Q3at=pJ*vp~QO+kP}&&yezK4=Q6{&7yR^ZtHQK0 at vmcm}S0*;xzp
zA&>ZDzDmM#Cx5*35LQIWPd&DC^WkQ2pAasU?g3ka{PVS(Qvma*;7VLo2LF!)1=V8~
zJGzuLyjMJ+;tViPfN)a=O)htc6o8qjKVPVY8fH+6WQa5ctOg%8hKC=(H%8YSHiG|V
zy-~u_k`1cIF(HYyx7XnJXvrsu>$oQuR8k|*&<tSTe8u^B*5xLB=u0xsL4P=8>U?G{
zE at rQxwKL$0^_#o{1c6RIQ?BGIWb&d at W$4ly at jRP1*>ju%*<li;P$dQ&481`raB6W0
zTXHIiP%Xsei53D}7~+P~`J{nXoVd^S-eu{H)%na($cI-Zms-{?=FW4}sG@)GG0=u&
z;96zc&2(&?+3XTTTNvf=Pn>4uw6G8r0Z<0Y{AsExDhEM&niy=&Asj!4R^9L_*FE~-
zPH6lD at aLFZN-xL4ND*;SP+TLva`}8tiqj2gEu1+3e}wptCrO!$?F4ss?P-g{(LDRS
za-)|2jmaK&WP+CZv9L2XeY`=VMg)Mq5}w5Q(`V_9 at zJdp;mH>u9&l!Oy+8~|!HgG-
zk6MHi9#Cj(5smY{h{DfQ<{Y-q&KEIpg_R3N&U7-ni}Kw8NmDIF9&O#A6Wj>^F>^o&
zfK2KG{F_4+LkF$sL-ZhKnv~tCuGlxJ5lRxdrs~%ooEjvvRl$8X_%@uFwy3xjsvu^|
z9g}W%;5^CesiweQ5R_7peETOGI=j&F>X1A)byHa6#sCOE+EBLQ-e%=$)A{JS!a|)P
zIpz{|AjZq2WaIzbsqYB$EqHMi@|0xCd+(f8wcdPw-Ls&Kx0|2QSjw#6QrT`47S{3o
zd$=s;gNf0S at pv`uPf>4PeeFX&TuO&tX!o&%<?)wF$fVx?>TTH=K`|)5-L073P@;71
zR=anHORBI2Ag!j0Kcm>}lF?B63~D$728Mt4KvF at IsSqk2h>EcQQi+8giFveSnn#u`
zC7M84ieQ8#?7<?5{VSgwV0ZPy)2r-oUlHD^1Afdf-us{8eKVhyUFaKkMrZuX!!end
z18{;5__U(8;Uyfv6SCo>1q|9#i46P52Jtwd+Iq<=^#PJvzP2Dp+(fy+kp%bwmpU%c
z$o=+TncK#=tLIEw&la2{>BoW4LRC#ee-AEAVUA98)&8)6QS93|L8o2?H(<t)V*`FF
zpLo9<GaLTXb^b|VQpKgd48u&DsdNxHblMgRM{ma7QcqgQAzp&)y^c$UAo4tGagvEm
z4W4uDOW<P9W|=1X%p#K3AD2qCn&=IJtxFFkcB<y+#d|%ESE30W;O<B!OpzE=Z!k<9
z7uZn?uym>>?P6KGJY0KxZdqU0IWW!@`!}AA`aYnCvs-NZsXV~qFAA3j9lKjXq*hiH
z4b-G&Ooh&a at tmo3H%vdb-kzgr++ at JH<I5XDOA?U?9<$;u{D0t7yixD9Q0!=KOO+bm
z at RvFo?{bxeQd9yj-UKErV^^W9_)+lBB86KPwoV+}Sb+uJl~$jL$H&qHyP0~-WbU`7
zN8Ih4tZGFOiUunM{G={W?X+3%FWGU2f=}xy==b<d%o4E`IgwrwjKllzQsW<XmLwx#
zaEuKKXwn?1W|Q!ps?8F_9t_5pma at b$WI>x#60P`4y4wMqK1+PPg*0l6Nsw4(*i5Jc
zp~bmf(MUq2cX8;_GSxJzb at W@bPR*F at cb4A6pk2>RTwoJ2CJp~oZhc#cC$HNd9f>){
z^6cBKGtX)*xsfp}CRghmDLtadr=9boB+!c+hl0A<>E`CKYj~WykAUf1^_U}k4s*Qm
zUCkf^R-rJ;edH`fb}X`NkLE)(sV5<jAK|SG#ITiIVMl5IHI(gL69=j<jW<orzi;P<
z<F3mhCFt0TAfb5RO*v=Xa>}F5^W(?x5|^|;DhBQIiEUXVP^P%0-`DPKvG$6QvLiiu
z2GMIL<;+aDW~uk;UZgQI(*`Z{BzrLXj8RU*2cr|T6#)!8EXm- at 8`+W5Mzx^sY4}c|
z<ZFjhq-o|3a+5V`b^c;dIPsnFB9PsV#Go1&&Rl%s`l_kifRjj;iVF~m`LMpHl;c!Q
zBL&V}u%@a1;jQ{aWG3k&@}%TdJ;AfH4RnNyR{5!D_UFRvgNJy0-cc4R`Aw4q)`6oN
zfmSgPu^INes?E->>dcTqKSIH4*obOOr<teExdo8eW{-VyM)2Oq1%n|@VO)6>;w~ri
z;SsEUNqRL64OEhdu at o6kHp{BEN{XukJ_8{TA_r^qv2(YCZ^vVYsRX(nNrkN*UsF7O
zJ-nJ1^R!xDqGt=990?X}drNGVNVl6#ct2Lpl47s&)Pzp3rUhxiSK2q2qZTetRWbHH
ztyu*p4URe|V(vp;Fj2LC=dQpOvu-Iu1k?4!7%i|vTXAR~v+{N`=fBw|ELoU{hb8FL
zS_VVgv}Q^OqQCaXu|MMudmwJOZSUe3jEA4~bKV=ZweBIV5jzLpkX>9F0Gi}c*^NP0
z27AR(D59Z_M~yUnnwlcQK<a>MV?xf_i(Tl0w0pA`kpVmc2zAqcQymMnO55d=!^_e*
z*J(dm|5rS-A4;PYslG4_y09SxA_nOS5RpMOGnkRL=9l#N(2l=4l9kZxXyPS~9{5=f
zDi41u*VGYv_G$|lgeCu?UfC>xw@^k)!StI^rykV#K7@$j)$=MIS52TAmazXtv{pb=
zuO)x|MHU0ciw?MI at F~-p2R{u`-DuRbJVAGw4YlbFhJH|@8vdWsgniFGI^-Gw$nKew
zGJW1WsluP)L(o!U=B6eJ7D|<unxL2?q-s#YL`OvKSo2rbG5+1$z0~|o9V^DubwhAM
zQG?)J at I=4CT}slpyraM@#+5~&uJ%FR=F~*=nbq>tI{V^N!uH`CH0c<AmNMo||AC`t
z4A(CC5&Rp7Hk<@lJjSnw_>aLSyW^wJ{s=(e%8!m1NTw%1e9M{(d}!`iNYUd5l~7NY
z(kh6lg{(!TU!+^_^^`c#VPZGfVb?@~FLrax|2sOPww-Z_{N8&M_{@Vbm0gP#5}hS>
zd|+9c=YZHbAn9d2u)d;2QVXSN7EqPUFR`>5;NtaS@*IB4Z4(eXh(-i8?wPybk~sqe
zLQ4#^Q2Untm2mFSNSk^JYRaXv-}>1cE`Zrb- at 7e#v!$D+X&WuT>9_0wJ3m6W-#l&*
z7GapkK~_acG$Rv3*>)SQ{2rYN_Q9jtFL7|T&=$DU|G at J<!%%D&SMYr2EymTn`bQ`y
za&_`3c9mOdLvY5Ulzck{Ozh})5|EwiK-={h)d=p$Z)<A=PG{ChsRw>1slOf6+$Hl-
zmc+h?-^2vnrZ{GS`UP|?x)C*6h?i^RqLM{-`dAw(ZZ#xo-1lI?AUdS%9l7$@!D(ja
z at 6N2CV|RL1#hclf@;Kocx*i;a)>f?l?)9`FHRk+7D4!=LIhzpGq+ts|q=#xbU&8Qu
zDePp+A<pq;l0X#*_#<{q9W)iauocdu0x{QZEMvCcL&qB*EE?~ReHPXi!45e+l?J at K
z#C==%1e_wRvUO5-`;LyfsxUz|!CXQOuS~>?18#ucs^yXfKszU8#fboD`s$7kUreNX
z)O_psx)&v+BWh2qi0J8WIgBYd6pY^T9xai($N*sFFCNGL>THH?fdR|FH^`^_{!Orw
z&a(62H}@pNyod#crE=Ppb<Q;t0DW81U!bdO!F2Y at S+gu@#3Ukz2_K6XVfhSwnCCw^
z)?v0(LB~(&`uqr==(+ at FC0)6Q$=Thx%@r8sEVvwy+4FkR$0|mlfG|mx14Zm+bz-^V
zOjKfYDce^2Ozs;(ittkY<2QM}d!1AuxWAP{d9n0ZHZ*Xf{$xxUpp)e>J)Z0odnhlZ
zQnqM%%*$W}MOtH)-jzhI*)G_KA2Bv;G?hW38se<?pU_jEI7CLW6Y8+E5 at -$*KI+aU
z5aAy(Wh^3Kz7rCTaINA41($k`0-0-WTjVQhvrpZ~;<FvDmlU-ut9M5fQfj{>j#x~z
zt$KS6#!!oK at vlhcKEEMU!GNMbn#pk?p066z2_R}^=NGsEdzAV22l>5o;PBDQ at Q7x4
z4jOVL`TKmeirT*^HL^Cx6%9*XXBdZ4_FXuWdHk>7L~Lk}RX~*WUp;#m6~eld2Knal
zr}&meZ_1U)vZ at Ua5k{b9(4Fgi>#U7ojL99e_<xt2af3tR^S}L34K8G#O(%-%$uPEK
zojY>~3SBm=dI=xMMvo2%i>c at QJI7kU!lHpH4x!68N7c7Oa0MexE at Jn(Td^qI4r)|~
zjXM^fyRDlW)p0I{K-s&3C#i*CPL(ck-0MM_rwrxt2N5Y$g-7;88)xRK%sNKnRY<O8
zvk&K^wmtNDYD}PvOA)&v3U>9PLAnu?AFug_2-5j!y#BKRZr`{#ma8}Cu9H>EaFb=y
zQ5bT#n^aPYz<S|`jWuc`;O;<Rr(iiarl2pC#13Ex$i)`8c2~uTGBNqsQ@%=@Zv#w<
z?zk-OE7glPOv(lnoAc6}RK41?d8Bhf79pnG4_x6+#-)N|$P$sWrwqxP^TYTPF$*li
zIQ=SZA7xkIyq?D40LBpUXv%UK*pUSNZ|uXE!`?uq+Ck0|6o>O_oQ`mJ+Wj at NDQYkL
zGLnq%(!-cLgJd&vnQv3HaY=FEZMw%`<QR#Nb8BZOeHVciehbwbnCjaF5d^}>EUG|z
zp`Xmr6|`E4I%LoEbHnfFlw#KQ0vaN>Sd_4up%a979`d>sL_-94U>1flFk|wJ2*<4l
zmD<5=S<Md2^NlrW;fAxT`6UvHv(z8yD<jMz<;zI9)#h>4Vq%jmukJ08C{Nl}<g1TE
zu#3qhO7}HBaJ)aVf)SfVTOxAUdSp~S+3sFDPW<%BzxMjzu9v7pXxILSB7mO;q??89
zWiP<fKUR6}<>>m>coyCD-l_3x^_-r{qHNeZ0aYNb&wPQ%dqFEvW|2u7o1kf3&oEUi
zkbhdF6~93p+F^0Fs?*lB<aR;@5k=lGX%Q4Yu5AQ`4)f%?^^p+3D$5d4VTsjB_x8P7
zn1-Jc{l16V+m5Q6sXKjOP|WmBK31RI9v%lCNBP#c>FBWtRfJ2a5v{_~B6p&${?&(o
zNgf?Pbq!*`HmuTvFW+DbO!8>Q`er67>w%(_`uHeXSJuxN=K~}H4U!UYUS*_tI%_xk
zSf_dEjgfO9@`t^CXt{*g0a7=i2F*$ph$LlhsQN;t<K1cgw!Wbzx2|XMWV1wz6kgO)
zSZLPxkU!%Z+PPqVYmu-{gX(;*lZ1(yI`Z0wP|km<!?9sxGG?1q4rGW|#0cs5rJ>mz
zZ5-MXBHVPOve{AOK95ZEUPoA~nLt|25r%8vcbTYH)(IEn)yQMw4+UVY4Qpl0O~fkX
zD{mIbRWRo8+%k^tm)E17-c>iU#40hHO}6~l__2Ti)=nW_lxzTHaO4g!n52{akZ~HU
zu<0~5<M)vvW%WXVIG6`X0^*V#*Wc7j&dzA%==5}4m?J^uUUdUw7rzASIq$wMFM($s
z0olSB#ihTi$$3P(AfB<V+pgXbHu+*k`nwU)@~b0B;$NemQg9S at bE8Sk-Odz00dJ3M
zJmRr=R~tI>-kt~R)BP|O_ohLK-+CkSjapq*Xn8~6wRe|m=ABgu_?&>i+icgG!M;Hm
z at kdVH!Mr$EfS-^pq9>5UgmlB=kOu<-&fk15wcl&5yBHPgJM(4{{<uj>a;*iV6QdV5
zKjDLQwQEbKj?)NI8)S*9zR>@Bh+TFGJCGu*Ub3g4_)L`N8$Pxqt$I+YR)~1VP>8Cx
zjPej3GFeF^(>|W0Q8NI~+h}xYHE(1lpTuOG`-oT}3px>Kt&l-;J%Hl)hJ)+&@MqB>
zI6;?8I-Xe!GLSODY7l(>C0 at vOUy@t)wMQVxJwPq?NZ3jyQtriE1k~IZcfWORp~_O8
zrr<1f_qc3tvPQgViAuN>Cu--N2WKYGSuY{X!jKwGUw6V7LuSE?SJ1v}%A4`$pSd at +
zIUOgkcV}`Z^!Y}KLLtbxu#GIOHJhW_!*ZMEBJY$#VB9 at oR4G8WC#1qj!Km$VK$9J#
z0bApV^#D^EO6W7}sWpjI!*TEaI|Olnn_}n1ipDkVAHCvnrM0TB;CmN(uYxbd6s3}w
z<|FtBj;V~arKa0jlTCzLJtAG!P+T{tB!MGEoF!}O05z8<d0?oiZBRsZ%W34;hX;)`
zf^^<2S4OXp?bZhZ`V7!TUUlXZamIet0{}w8<7QnXplCDY{$SN8%JE_i{(ATw08wje
z)M$gKSZw0Y>aU2ZoExgFN(iq at MI-+aZz7=&t$(YiuN1l-PA7XJxn at K?e)_4Hsf9_+
zgr4PH(V=mMC<|v at M1}1+3Wd9*9-C-={3y5n+hk$4+#Ik{Ywl{;wDO#A9S8B&s7<ZU
zXNt?}Eh51`PuwUuXn|nP=%2B at R&oj=M+pX!Xdh1BJk<`9N)0TJQuY6w;7b=c1>@2v
zA^ypAty<>75(=qcfye+xRAMl;B(S at i!u at yOXswi-IJ0)kk^i3hazF+Afn#|jyOf#z
zH6lPwLgfW0 at v+@S^~Zcrkx>n|wq{!E;oFGt;;(5(T3sgcO(pINV*OJ?Ii$LONFKe<
z00L-WbcDIHvn at --J6@P<>wD74Zlhng%7EsAm!{*PwrIAS;X+=^XbDlx2U8X+xoT2-
z?;#cy83T~b05E^LJ_|{PV`n&wT_B{V^>JD??@^(ug@%c17g+O26U+F-ZM&iD9nJ`=
zhF!vYKW`X`T05*j|8*mG4Ye>e;C!Ub5h0Q7YSkdrC8^I6LI(qE&O{=#3sr?ATp8g<
zP&)>9Ho?``ft~WL6W}Dg60ILogzaJlKqr<sM(5u|7dz{D1IbjOBrY{+%D)&0tik4}
z8nG{H15v#2!~S1qIsb}Z-zzm3PrmTbbo{Qi1g)>@BP|f2%&R-l)-1iS(TA~aM*(L4
z>iUOdP1oP8<j$SvmX{NQNce8|&dpDniLXWF8Dr1m*;dD|BOjdx!5~qkJ*zn4`1D<z
z1K=X?S(42*-$aRtm`m6%&xkX^W=aL#B;p>ywXA*Upj=j&KYu7Y(_DWPKt0U}W at fip
z92GS3MGay$`r?0MZFE8Yd|A5MD^VQ#l;G;4nBA`9TsF0fikW7DCC*>j3T>cihZk|+
z9*jP=qEqWkE-XfSpg%mpxg2N~;Z=&KzHSprWNlI@=gM}}?xxv4IT*V8tGz(VP#P?$
z$>y96<#<z0&K6x?3VKABmE}e1F`RM_uwlTL*ozE89CV7&K)bv)#!q$y5cr9Ell<&S
zxIHWhH(Y3V%#A+oAeP#g7E)T21H=(3JD>IR|9M9_(^VUk&Dtd0dD)4JrFw%C`&wO(
zcU3jGYab~SCeo;=ZQMq2Vg1HqKwjjD_kehG8yc{n_VC at 86q&Bg%WPRkyy*aHg0k?%
zw3;URqzDd)E!1HK=hF%gY3-codl%uFLwG3bs5W)n=;f`_TTug#ToqnF|JJn)((3n?
zol0624|Rr4ICaF|+lIeq8{L>BTYHgnq{stJbn<30<mDHj_yX`;Y7?d(?!3myX6c68
z5ZLalYS2!@I8_z!<N}RBNd1gCw{8^hX)L~8_NqTUE at 0>A=dau~j5LKl9NxVZ*Jt~K
zjW}Dik15^?x%u=ZR+ArY6n4!|Q_HjX`@Mydlx5Aaf49{|&cy5pcpbDi>TWiQ)u;xY
zvF$uB_vbUe5AvO<>AZnk?|t5)lp^&xyw_pLNGU!R{IU*t0Px%clsEZ1A=}@P at Y>*Z
zt6q8^KlCdrBdC~u^U1>$#d*gU&8JRzqs>ju192wtCmRZZcJJ_2qx59iv#(nPy+URq
zF}1$uX1gS2rIna&djdGPxCss01L{Oa*d`L0NUUgCUYDMFTfey<pzd>)5cosyy2&SP
zW%_z+b`$^VQLR)+&Thd_<1Ys_S*&<mH1O!&ulNunJ+jO#MLP5;upFn*y at W}Q))$nS
z^d9*<8wke2H0QfW98h|3`UM9$(lOoWKHGx(@7HBZ77<JsViXa}G`5eYPLi=?U{(EO
z-FZlFWreRkODGm?$*K74vI9G;pRhi_zCpqZFa1YRBv4-(+4A#!6N>#1*(IygU>1wU
zTTg{7vWH04;<~|;uGS%@t}Qrmuv$M_ZXnG}8F at 4B*f*cLblT;VGHQ9<A{v{a?BbI%
zb#EzcuoqR+*y&6)ppXzW%h0peaSR$02o@(=prbNK^>i0u>2<LV5BN=>-x-=(EWj8}
z4?7)uT8`T&a at o9|E%FUpxDs%R8wqIS&nKkJRz60=r7LcSR^}Jhy6B`Q<#<gMS7w7T
z+MDhUe%Y#aksvc^<ipojpyq<r at Z3npBveAUf2zYDQ;qGiN0W3yA@{|WVS%h3Q?vc_
z_&@B>XoGfN>ymR_Jsx$DG~i!kY*z4;U~E-aq9k!C`#tEn3DM_l8<Mn2YPvc|iffh^
zyfUc*D%Qo%`lP(00~-udoB1sZ{QpX}D2V;geBHTv0TdC at jVKX=L`OM<uJ(8GgeQa*
zC&_#LrQ(TK7av>hv|IO~vU%CcGb^GyG^wy_9*6q$K1ze6kG16PQm>h{k%8EbMDJnI
zYG_jp7wS&U7))FT+(QqZngGqPoi70=0gwm!osa~;pFE-j(lH|j7UV!<_iy`rEE5 at L
z(yDDMplf6;XL_o~Tv7hf#t0L^RHWR_V>mj<y!H6DL+Y8sPq$p^41ay<ss8ZA4#z at S
z_6lLfpU<#+C-j{BEgnRuGCTI`kSqT~znuQ_%a_n{?*_=ZAaEC5oYy#Swe;8$v__0p
zEDgbEg#Q(vr<Jyn-XFziaypdoa4xT5bHbIV-#cQldf*~jmgXi;^#K<Oto!35Yewd7
zZIFY{JA=QBZhcjm)0`s-X=NJXtbG3<o8>M~sxLpI@>jEq+(zl~e+%oj-*RWdW`f_S
zNvUE48bS at Q@D9|BF<cT|N4Na@*2li;<<dUableScx4ngJY9IMf9<@*GX!gkFl{$#E
zqCosvss#l3f3F5rDd-UzBWl$An{KuSd30QruQ*aJQ!^odUbN>~a%QK;b-iqRhyaE3
zpIJ{BS)a8o68S;?5iU(^ryi?UTXr*vYyB^L#Q8HQCTM{x!f*d7&Ad)nY3-&naU at WU
zIhBw)b)@uLML8v(mamcwq!{K+wePrMazzL_?esicGz)o8)B}d2B&zr}{c1FIq+1+I
zcE`CU5$uKq8WNYEq-BXP`Tc9X(;d*eJr@;nFs+p*`^*Uq=a!PA(?=BAXy{s^z5*mG
zlNb!nwH8ycbFWORgn*h5{A!x1%nV*&&bw?NN4dC at -z();u>;JN?trmnlM7lx-^d)|
z-IV4*q#F|VDr?T at k7n;vCH&Q)Kz+S(-gk;>9RH{y8+WR6!5I)Tyf`B6cTa7O*PJDN
z<xbSrcP@}F;3wNwV`Ah26t%Afhb$kJ6 at nA3{;OvO>Nqcl#r9fg2`;I5LcCZf3%iW?
z2p&fvGXXx>W?2}j<Ppr}yP)QOeZbyPI0tWyh+?r8_1T}(dK)~TW52iC7qh=O;~ol4
z7U8KD!({5)p>%TX#lN|U!=2cby+9U|?`0o?bS=a|;BOeKi?8%2gH%@xzWo~aX=$$4
z#~D5KxWE33h|2?}4<}fU<$d6a0~Bk^em3Yb2MAe?F_;!$P?i{F2kly!mWfuSCnK;u
z1&F!u1lA|v at 1j8Xiug>G09M#70g3g0KU``qp#o4!<gowfjIB{j)-rFx)5GDSUAguT
zg-C}_u;kgmp_c^hy~<es%gh%HuVTe|cB}4L_9N_zAzgbO#NwvNg=kxv^uIHnc}6H0
zW7ZXQOH0J<@T9<5);`4c;s}d8gY!5p4XtJ8M!?Q3W`09-bkJ4;KQ=G=^61Y>ls=$s
zkHXmQklpiv!ULMoiRtaW==v-Fgu&*Ng#CN(HJa}Z*?oV~J0efryf-|^h|r})#cqJ&
zD!3 at Wp)@FqJXQZf_>7HB$Ecc5Ifu)P_gNCZ4J(t(vRWO=h`ZDv=^8$mi_MNK5Ip3+
zdMM_;(2QdgMHkS{^OU8^3_w6C&pr0VE>7#LLe!dM*Bck at 0<+IYu>~MA>Om at VP)NyZ
zb(K!X1z<DL7+Nugpwg3>pi2^$>t<hEDYfBf$CbjDz2&doXw)9{k4-%_#9VcMB|xy#
z4M8#tmaCLtL&9UZ3GHc7r*nLs^diXCE(rNgBM|G0XRi~C{Pd>e%;JPB$avxjMcmiy
z`2zCY>=AlOEY53`6HJyGTn$TD;^W|{RtjC^?eh&75ksdBL$S9I7~yW#6^B0!5OQ52
z4(_)RQp%P1Nh3lTsr85Sz}}r+i8Y_(D6Sp+u?u at LX*PMR>*Uw2jqJbCrrNlJ2tHc#
zEr{cir8+2;-f(ZrpPO`V=Xvd<q<8$EHB}I4-3e%u08vdzDQ**%@jL&<XX*uhToS9Y
zmhgueUjL+gc-G%S;;yli6Wvf at f3h?hW#3dR^1EB|+#uAVmsE}7nr+5N+?qclHc!wQ
z*U9kx#P1!EHq$lTt(~GkXE;VToiMg}3}^dmy71hrN^@~oSX>F`()O5&9$v$}QxO4p
zQF4xDNV(uX_XVbPj;D8G3<LB2qmdgqV6#(n!9*n<JZVc66()E689{2Ws|sp?$UGto
z(CV}?&jyw(PVS+IHRZG2MMg&Rke7UZZi at a?U9E1X^hq>hUl2r2iBq{Ssgm@>?C(}J
z<z9|8p}0~cew;~XNP_rPtNEn#L38P9X~2|rfOgb>4ib|892+|)j+=0op8_QjZz`32
zbhhzRAGO<`@xgafa5>wahVF#g`JF`fPs1?v+&U740+>6m)(^>7J`H<@F~9G!nmA|&
zMs7=d|70s<3H(gl+~iu9sbu`#6GK8b-^v@@9F$p!B&~Ae1NC`9c}~ebgwSF0U(-Pg
z6}6#%3r5QSfPBL3ai`KQ!c1WDYAS**5mgh^o!3fP1ni=OPPA%@c4mV?QZhCDzw)Ge
zLRi6Bl)#+N9*h>JIS_KhEh$%{4;%X}h>s<Xo^6glr!fVdf}wx7$Ko44^m+$=5<w#a
z6Q+YkZ3{Ent16O=4qhX(w^e0#8G^RO=A@;u^kZ$s at YRfD#4XlHnW|gT-D&zKSWYsF
zr-lSdWEpyq#P5yXb(^mK9$UuYG85DQ&=T_^a_Q#HS*K%cUSj#)?<Q at NYRDDLTmR?A
z37v18;a#5h(TBsg<`E-MC5J#npA!j$$LQknoR1n{(S4;sO*@6AiC!u=wB3rdQ1?c?
zO3PkZ{MR at r{Zg#=uUuKJJ6~gF+(H`czal|Ne0o$e*FyX_kj^b{$wp6YGlvOQByM{u
zB1F<U{i0NhEJhNr3-vv1Gmzs5?ZSP- at 8?wx(68h_=7IF3uVM$y-h7S_00o3an**r;
z)5IjnI}wDX74F{dVwIeit<yBP?~^;IVD;NZA~?r2Dh<mUAS*mHs6okP)O(@P7Cd+s
z%ora4?*OAU5{3Ons0PaNVjzJ6|HLUCvJ*RKDSb>AEAAvs5e9w>oI>XsA at yS|XK0(-
zK1rJ9vGq?2Q8EZP!T(e3+83J3)^NKF5e9JqU5Io`;OI1_R1hed8z<;9>$Y@)D_JCR
zFQJV>fZcjI7q@&J+oSYcg2eXc at M{zX58I-dNha4-mML5^K2$9`{-Ew&VlX@(N)jfz
zfnX?p{e3#Tqs)NTvtPwUBcs^4`hYlJtQht_hZH|3E;L|a&^i-e0Vf40a at lj-d{Xr+
zFFBu{HW*d0OoOlhZmhUDu#p9j-TTr%Cn`gekN^cW!*>CwJAapuBl#redrZw_YM}x_
zGjI_y*3Sg(hu?`<q{UK>ltU|ZMmeAgWWzSQ-F0L~kcEugWF1|NPFMBxB8$fst*xM+
z at CUa}dzqY0NW-HdE80!2s~`evbHysV4`6i<qK?4jd>a at gU<z3UII$1#cTox~Lgj)8
zI%7q%^Zsfy`PQbUC+tUXJMq|s2kS#&k=vEv!<-TN`H$U!^&Ou}Q-jjCm;8~f_d`pB
zF?zTYA|yI&K1RkjaLF&1DLSTuJOWuC%W#py)(0gULpbHKNyMUVE_mnC$~vMsK7a!>
zAgd+MfP2d_NWs2cU>vYTt!7Gpv7eY**k$_yS}!tu*SbETQ}m$wXesUW1F527*RE!i
zQDl%A%m>mMji1V%Pz6RG&~C!ELCdeZa+kO3uk_U!{*LLFXul{rRIn4lj(jH9<=T6k
zubCb4_P{V_qxnq@!`JC0Uk!xx+P~BYC0!{vGpo at 5p9U7d{cR>P1BTLl+`)j~Nh*ZR
zGaLc)v)$UEA2-ddoW*Xz5SSyK>4wb<FrqjMiCO4uLL8NKua(}lXK#YUv6kGB at +Our
z;oQ3skMWnjFJ`e36_PMlSh?Lc)f#BY7{yZt-cMQ1Fqk(MdTz+ePQql(iFEhl+D|Gl
z5kmpQ&hwPr<u7M^m`CK<$-Eud|2d%w;2L7q71Xl#K8V%hgt>K)X!#{TS+H^8<~x$a
zYYy{<p|>;`J?XwQjCd7!^ismMGJ(K?ELlNQlhW#<vQk|E$6f2ZoJy*z*&R2;PUtvy
zxt>~*X?EW`FCoQAXy7<!alQX19?1mk at KuKr0D%;(fv2|H=+{+WqC+%*gB0_p9_6>w
zk0pB8P at TsRng{MxB3+MT>ZVCKuhD at Q|HdVYUaoTlGn*1lYP4#g;Ig5Ja6fKoe86~<
zi5fCl{iUjniGioz?M=K^n)68R+GNzYDL1U&*{8-K<kQ95-iZ+Qv|f3SOB*(SQ!8Rh
zbS9|{nvK>lDr)Pv1Q&|?wk7jYJPhaPpN#RM*Q2OId4Tl+h05_Cf!$iO7!0=P?<6Q-
zY?zAW#R`T|OuIl;UAOWikaLRSBSp*n{m)8V(7W6$CD8!5$jKM?amR4 at sQx<eRW at f#
zTA1HsXTw7XkUKp=j2WrOj|WR~CdYyeR!WV$rL9flhVQ5MgOpNn3K$Xh>E*=|C1l3G
zoX%pZrQKG48GY;&pcStNZ4h{HRWASPgl{KYFB^sV8*f-*V5COF*1=lL@&)|U=S%*`
zmFzHa<bJp)i(+E^&OUU97#2nH;j+=EYi-@#f;Uw|W(8 at 2Snv*VS_zi#v at 7&OWz%K`
zr?_(+*Lw2H<swsI09mO=(KKGN+mz3f1IjF%K;sKHZ_J`RDHjGPDb6Uc1u+OSf=bPA
z!6&nf=a(b7kT||O^>jsI;iu%+c=T3>g*?;&>I$`%dth5rV at i>g-tXCIi(Z-X1DbxA
zt-zSh!J?nSc+N3XPUqdORJhM^&bezySsy}U+}s$?rENtV!Q*NYCgGmU7J1mOr2&LU
zkeF7z;e8*J8`lb1OvT2k*X7%vLaEQ;4|CW5>g_(S&_&wQyU*wx;mBydKlB+23wQ_2
zxnU4!-fBv%r0jDCG$f at fjCVde{YvuQ6uDN?Ndu+x-zoJspuO-<_7I7%Z`j#>x`WSv
zh#h at nZ+U$>10MSI^ULa<HU>K-XOKZ=EfS*Hsao*?=u2(Tn at Q@rk*bHCqh4u$Qf-Bu
zxgC9~r<qEa5UB4?K6sUMmZ>8`M*;Y#hx>dR0q1pB8TfK*3|Fk2Lema8qnmO12}pyF
z)l50F#~}|YCo3inF&Oxc%$sX;RGP$!zuNVoR2w*#ieW!#yIMsNO?{ny4}dXZtq*m!
z40BqtGGJpU%gNcvRGo|Ks>a^+v6LE*l9n7nxtXr6$|fI2%m-KAsP#b~oIo<*xi|>?
zUECvaBMZb<!CJz*(Ro8VL%i!iC=X|mu_p4nsEg=XdE&WB=>5?Z;a^bQik+-a*Xn at p
znl-t(w}_)Xa~aKCffn*HB*nFFTZAoXSLLp?XI6iAGbfz<V#)kfxQ48e33-AlKsvrN
z3W88@(bwEAOML85M~r4YT6dH@|8*Fz&2JfXe4hNER^^ia<rw6a=`wmR#cWY6{$ZKL
z?&^b}7C?aVyfpr7=SPd{H-v_IZ)$62sO5H?*W;iHVzUoKEnryAE2wp(7aZkR+poT(
zT?#1W7kudoS${t at B==4sszo#O%o^|e3CilWS=9nAn~YaLK?L^&0SakaArP~?@5=uA
z5q;^JbztlqR6CTz=QZ`@>#|_bj<w6W<oNSMmg=w$;VM#}mTj8)a9YMZH-&fh%z1==
z5+55_ha1jSlVPovydUgx_}xaEk=%2!f4WD;I2K+b1rfd1Uj_V{EgEV|LUH at JKb&Jh
zvBA at FGG^a|m_enJAnjcc+(pg=ceGRqH?JCjEUK3;Lc$faY at RqlcS|zbE1CO?_2{ZX
zFIoFeQn2$1xLp|Tl6y*yu}+}cbJ>>D?)LJxG+fzf(UeL$T6GBSIRQP(r>hGl8<05D
z5I6A%e`ai4xcr^Z4Ukgh(l=Lw5zcQQkG%i~bj3yp+gkktOOikMq^-Ek8`<&}0;Nt6
zS-l}u?ZOCEy(^MC#X1AN6i!i}DA<75SZY?F1XK4Z?HLearJaidH-Q at 2#g1x4JAS>P
z(dipwzoc6WtaiWd2#Vde#AZC!ia&kRaMj^^wqHb~;3+n7Z=T?Z>77gkB}SmoEj1Dr
zk32H$!H<)Qa<z$n&>@53(j4q*P}E#xFEVKwIGZct^ZJFwhYitU at PTPe0j~{cisr_m
z<3f+YO$8z>2Hz??wYxaCI3B~P4|?sQp#{J(+SCfXW`HNCrtT-OB=h*v*(;K5z|UA!
zDY#6#Yo0i7G>5(jCRvkY_#Q%v4&Y0_qiSMFx&YI9s2cn)M3Fnx+#o2Agso)Lc+}Ui
zx8d&ippSj{r-xazU3+;}_e at _u3i*yd`W_wfxiya%&MCdd14-sYaL4LCHk+kTDsktu
zIAddJ0YHhj7Rz|^WbJJB5OfSQneDD4dC;IgIb_uiKdOn!rGTiGU)uqPC?mp(s<R<?
zdVvA6BrG!L3D%y&x=$~OvNh<!m`9Nl5+ at 8zDIB7}HN|S~C$j)($(v)WC}Ux;^%@9r
zx6*xxQm-3$4<4RuTySK~$X4fD2#&XC<U+PvGpcE1u7Lo0uvrNt2ROR1$+4_D83Wfy
z{m-%RMe#xJ<pF2H$e%Oj-Aw+;*er?6=@@W?IEUv39w~1~z#DGwgD(qaOm=55vpNz_
z7lq1g5|<&Ln2TCB+9nN}p4hsrmEvt>T<vi9AtsbUs&pcbr at b<p;buEdTktQgjRaS;
zzyz(5*wNL~Elr1cA at YP5dqW2N4OK_Rp*=r&q6%5xs1I0ED=U1qwkTua0Y!LiydR|+
z?oh9tm~)m<o$?{2QLZDVY&Oaor{dZQwqf&KpQ|Epq<Yg2<vOoiGVToaWmQZIA4x6R
z1=E~S4oy4hp#O!rqUJ~VX9&T#t1Q322r?KwSX{tzNIW^R{XsKkUs@`f9=1)N>UZWz
z5YlgvzC0m6ZUSOK at S50-bP6DwxEEB+rD8Uyl|d9g)6(36*5q3ky2Gy81@?q>>PW}x
z#6>3K(cm^@rwet%xMN%I=ICnqow!s1g3*|^kj}O8>U6J6!tYe^ujzmZJNU_yAgJy6
z*ppap(vc1ET;x!qVAvEq3`0n{C-+T6fO*Ew5jnYV88tve|FpsC%v2!klb-7NiD8yO
z2DpLo>MtUc`K&4MraP`x9p^T5rPQZXCRMotG>SjPtJC)A3(fw8)SVs|fPkYY)=r>S
z at mKY)qtd>$0&`|u at S5po;<pnHZuW)(`wvd5xw8H%c~rTw%2lR^n(Hv8TnxpgVyVF^
zRDbaxA9~#HhFrt`dbjW}*4&&tfqVPFbw1DlG>b8$3{&YnuQOGs8UC-Z<C1p7!>vwr
zt&1g|PWR39Mef0Lp$c(FE)bB5-uI_{#)#_zY>vgk0o at ZjtxuQN?>N8Xq at PKNr^p1l
z>Z#A^kX93+ at q|zw8fs-U>Gcw6aerc^OlWXF%b7|kaFtcm&-#KBpNTJ&vz*-0QDwFU
zFzO4vHO?zzi83oz-m~Z8rDNTIzmedi=j`Qd^R(?icV`a(_IRg at nwZ&f2n<h9R+)TF
zcCW at Y5JlWVH0>{OG at JsV?=B3w6=1E<D*@x`-UeJ<#=9n>sow>(=)yzEfc9ztpmK>-
zbZ_niE_UCW-Z;dPz6*RI9$RGrYGSnU1^=%hAqX>F48%<{cE+!$0T`mZK%3qra(p-<
zcdk{dy;<s-j_!t at +q4PZ?}%(fzVCewEFd{lPvK=L_aXUfv^XiqKT7Qg3SmzB7kTWW
zKG)*L?lUU-hBJ07ujku)L^SxV6V19X)sa`lfAI4mhd<L0FO2n7jv-}=HGx at Xra%u0
zVn~Z<4h=xIRy5->ypi>+!J?!?HZMkyASEjkV$?Mn;1?_C^<CaF6b=E5eK&f^h at Fbz
zZ*n3Ru9$ibBk&u$&Zk<-iv at N9+uzlUH6qX(h4RSj{8QGC{`0sHv?~j{Cx|y~2csIF
zlqO=d55|6qhJd!~;Oa`?U<11G^c#ki7ga+xFx at Jl33=KQAo5YzssM+YGs}3EQFt8P
zaHEdjS5QN*O7s-g$yiIhyz#%73&t=1;A`5yYX4AC3FtC6;{W*K*{*dK<V6n8om(QC
zWl6Sfqy(55a~xk0O`<e#-o~&IkqvQilI7XhfQ`_I)KI9HtwLmN!f;>s<YMYI%wGhQ
zY^<tPuw6w1!UpUB0MmG9GQ+ZfH|%&4 at yl)k=V#NvKWu<E=R1Q_|B_lc3=lHn-p9jC
zJ7*a?D@?GPD50W;F^Q|cB^)K5eCQu#CSivJU93%j+xQv^Wdnt<W+1p{g<e9?we?>Y
zXxGcJqr%M)6;q%-c&~ZiFgbzX_=DWw`$3#~xLmS3La?~UehCp?>O3gMKEO8DQTHUU
zkXKR%fgXs_zp9`1Oq!R!=0!`Stdi2ENA{vr3=HueC at 7io1c0l2VlHJ(5BX7qfizK`
zfVpOL>q9CB at n{)I)JO$NWX;`A1P^6nks~mbNvHpg)Z1<I+Y(a7NK}7=?xDq=ij+D?
zkB_kKu>LXTIYN|;KWR8|rXUUdU)gdO=?NTFsrsCaYi!gGT(!a-hv31uu9RRRLdq3*
zbfmH6pwLk3aI~PSDkjp>EUV^TklOs*di(tRCZR!k|2g2}CbPaJ{B$<egk_xgmi?WF
z^svo*4Qo9Q$H3(JppIeQR97(XMbC!p>;dAeZYn-F%x4`|5zpKbh*9W$lgqcfHr$zE
zg-5lN2PE{<8ZuzkO#*&-(xl)mmePeeI;TSFvG7Sp$jXI%x0V0NrMe4>PJ$aaT~!bW
zj1l))*xA_o(s6568j;D!5Ozz>$bB48jCd*iN at Zl~@55xOv4c<mJ3z$0yeX33*gl at P
z%fsjv7V*2-8~^sj2jFy?^=#s-+6N`TwjY4>wv{UAk(G1oR9?svLFmqVN#i=hV at CW4
zSawk0Bo)4TC-^cgAFpan75P`qb3tz&B#ae8qIO}ly_B*GC{c{&6C8sEq+iU;5RQG*
zzoGTY<po0*W?1`3fw88u%uw%;hZ%MeRPSBC*ieQBUyCX1euiE2Py?>iqui6o6Kvv6
zM56tR_|#@jWg*w&KG(1SsQq{Trp{m%J;Plkg#*9=Z*m&q7t`tAz{J>LDzYiKG9GTg
z<;|NV<2ulAjGM9^1{sU3vPSY!vU!S%hT7cWX(3{?VT6fHV{w!sEtKEmBB_4yC~<dd
zo=L3z&stbV9- at UH{$!#lc8?0sT<W{9nts^Yi<XULQeX#cD}9$s8+)CIhONG3;Rr*C
z9kQVNl7|8 at a*jNtS~%Pr98KezG63e#==0Sk;sXPO2Bs^}5vyAJbuW_tKG_<F&76gp
zfQV$ktM)AnyfFLPlU?Y!YTE#CM+hd48M+Pmgjfxs(^QPH)+X>QBN+HdCnI5OFK>f$
z2fW4drzFoZjnIQ-bz17y;@v(zBot%+WyWK5-R1q5sIcRF%V*G^c}%dAbBT=E=wwyI
zuQ7bsY77*sYB~;f`z2ucTHf*}t*>arEK*@u0Y2+hK`5v2V-8I~u$5dup-8y%LSw>N
zf<-fww-AkOevF<+FK6jc)8lo*!#-Bz&vZ5^I>0{is{Q(OF;n^qzC(EomPUHp0gdcA
z+d4Y>s+rxGp8`t><!v>qqJKz at fr1|=z<Fh0^Vp$Bfz@(2-&E1>VN4sNmJXSwq)>S&
z3SC?*pKrMUE=Wi14_*(z1~vuCm>^3{bz~X<K5>0%*JN at Mz|cYRa|Tx_#D*zXM$qC#
zZ%(Q6)`UXR@?cx);t=*J;mjo>#)Mw~<(oMfZlKdvn884NT{l`+^7941btQzhw>oXB
zrf4&oajtsu;BXP*WE#!ToGt4}UPM)vQU;okKYYCH=u6xiAw#=G>^T)7ZMX>;`HKrS
z+7P;D{_c(sbMA>?nAj&jPrPbNP4^`EQ?4|9T^NOqm-a|rTWAb(R6&&_C{{&h+v>n%
zs8*0$X>^&qIrfhf#kCR(!&+z$O{OWFUWlONUaVpN?)RhK(_E9vxC+VDH-+|F_Ki9A
z5Nzx?;gHGVk;-OIcE)%x(-E3gb7~obYREA;|Dk11ZT?XV>3lzgb!*&;=O%D~u6+mw
zG4P1yt2GebIT(XQVYJbTpZJjCY+zjN3oqVLxOh?!rtKta=Dhw2h^DXFB~>xRu_*r2
zrv#OYKZkD{)x+qEpCKYp at y^pxSYOl|;Ao|WU;kEvF;?FLZ;=e|3-aV!rP;C>oY-eL
z?3^beBXY9Yv}OQ5puq=tgHD|YhP)Ocb at Vr{{opW(l_1Xk#}50pljMH41Cwfy==KEJ
zwXutL2wSLDjO8wb(K~M?Z37?0Z6tKN7Vv>;w^KsJUiTkim*|$ZaGN^W*z6kwd{6x|
zzF}pP0<V++lG$fIeJyg_0O^}StgDH$LCVJCOE$0^C7G;f$9kJ$;*2>B1isRejh=o`
zR>k(}K>$_86w+c&)?`1zDg(X#)K0661G~U4^&S-0c+P*8t$XtkXTYI=uHU(1<`H(n
zk7|@ZDW02EeJj_YmxeAD<+jgzPF;5T72!$@T2&+2?5QyKXzp$%BqXZIhs^T<ezl4v
zOE(`jIlTAQwk-W^h$e>dKuSit?s9<TT2!kX#&edX8RfkendC<XuHeT?(~{xR%!eC^
zZ>0Onvd3 at 1<(Y7dYayle-QbxsbEmKf0AH)igQBm~JS%{RCj|@>+KwXSg at VMicf*QM
zF!qNgh*Vk04Gk&}w*%zNu4Mk6|5kiOeXu9azWnP(*f)<0;W@`uvQ0dUKZtiFm`T)X
zal#F1_u#&GkE8Kv+tZG&EsK<~1QWT#jI$-XN~;kIwBe--RT%#`FB`j$wU#9&i4$oU
z+Yx88P6YlS_bII>XT94xg8_B513tu#%G}XNticU8_jy9Zk7Uj<<Ax0*``QJ<w`${N
z8k#th(UqVc*P<=K*}Z=?(?ah2==15|K#&pPpar(;{5URhE&&E+WJFEBtzHVRy;W;?
zFP6wYGn(Z=tn-3lF(JW3HB at qLdKUgM?<q_RQ2!~Bj5=$%VjGY5TwO9<0a$LSCb7I{
z$DMbc`r;D*`%kB5t_)aUB$w9Xd!vb?5d+_QEq+?UdWajgC2nSROc#W$1dcTmMdZ3I
z)&r9im$A)12fpg6m>8T#ry)?GMKtt_ga6r)J=k=G;we`mX}It*<?Y*X2CNF+E3G!J
z_Y9A=lYr^tSVpPz7S5+B1F2cxQwZPEsi~TLLL$`Q`bfujn9{Q$*&~PJx at iuhBg|Uo
zE at fc75RAS8J?wkYBf?Ey>^!qyHwQ^2%P+>YH!YxR#2zYid;<!bi73%&G0VNulZL at j
zS_V&yd>`V+lfxuOG!~1w|Cy|c<U?tEmQ-D&WQwk1$AR_T8E0KRoWfqAuJ!eyw@(Z+
z$=eEO>+!o7(g+4Ejjsc_nBj1u<J#;#nxp;=L9zf3KSG=29bl>k>Z(1g$)z#~IrjZ<
z!F9-{pVz?^<#F0A-sD(AoQh6GaTz(&n(;(U)It848_0NN2NCq>{AO$gx=CXa0DswW
ztKTR8?kW3lH)5*>3_R!K?0aos7)`uA>t?J*x(H86?_{^E(UaMtda_<=>E-f);-y$j
zD{aRMPacLf;xN2Xi5l(@<kA>fJiJov(?nuQfytH>NOBqX1a&EO#j8Z_Kc at a85-pj6
zcIaYtL&XOW0_ at JI$Pjk}v*F|i(4wHVZA)u(La*%0#L11nIw at GOoa;ZKW>K71mQq#5
zx44P*_GT$1nE7BwOO$;Nia58F6qm|5TX&%h?+4xIdV%c;eUtn3TgS)$xeI3eC`fc`
zUc(@uI#EJR`51YR4~zDBE}97YPqxv(Bik^!IXkQme}ej?Fcu<xQ7GbmjGB=pJG!!c
zmsTkVN2L#R<NdF}xAlwSM_Hs2$5YX5aBv>?!yE6bq9gYhsM+rcbDREto~N2%;9eJy
zQ#kFP0$O0;Fw5=V?K6u+$Z_FZyT#e><Ulah`-|J(g?(pF1M2K-y78I%3{XL)DgkBZ
zt&Sz(?_kLL7?L94mqfI~r!ZD)YJ3Wq<zqh*->ntT3ZD%S at 0O@}2V&wdfdV?PMs4I7
zIYG3`NL4x!vwhPVQ4uvQXoA<uLP{u43MI`bjL&?C{(cKLHV_U`<B28IWk`@~D)CB#
zX+3E$J6CcE3<20iG$Ga4k7LF2*A>4E!Sc$^`w7YjsX$=?<97!<rVm*NozPL!WnSMH
z{s;e)#$H6URxWBo8oSmW?zYXAvW_qRj63Fy-B at 7eO<(I at a%I~ABdG;{oMQRVyPiIk
zljI_q5PPW4a at zkM`2gxcZDa=RsS3!#ZHSQy?eZf!MqHd${V+qYlIsbkUb}i%S$rQe
zlP#jo>|IX#rr)$Nrf)eq_5g7|rxUvX{zlp9WHDt^;jXxT`b2VZsP{dF#*!R3zMe)?
zZ5^xfFYhDNQVX}Q0YEyn8pY6?DRwFdF3b at 9(U&VL!~pf2*Eet-OM)flW}!QuFe3pB
zYAEa?oR?aSDw at Ui4xT#=bf)RO+s(mx;60Ql23il0!5*&1js9ye;W8E7g-hVI%ax~5
z?e at Oudev2;w%#@FZ%=LImS5q_JWpOqpvNmTQ=9%Ig%i at CrX$a^0UQ!6-(X_#ZOoDB
z0RIQP at Cu=rwQInmyRzA+^BhAGxN4K!Kn>`@?RnW+_oL5I26tC8Kwo-TEJ19TmbEE>
zvy*d$YH5{{rK{9cpJG<_)yQhZ3~++yTej%r#cLDOiMJw*1P^b3Lj<aB{`ga#%t~f}
zPi$m(os4sbTZ`8ri&g-<T?U#x at rU>5ZkmGUxbj|-qe>PSdL^s!t7ol+hT+(d`0gQR
zPnW3pKfbqKY5ke!6J8Gm47OJL+L_oTJqG<MlNlR~Q)U~_*T95|ea7)PXc4!wMD&J<
zF~)KD4yt~d)}V$o0908Kmc$Izr=+x~7H9OkG4(-VTnOFgPBOt`aeRG_(I89t at _94N
ze4iuLky^|Q*uja;&P?RUN_ at feNMJ6h>khabG_BNj*Lx$FSxaWlKLEM@;WLM`;>jBf
z6xfyEz2D0=QO$z_E8<+vMl48 at o#cgXv4x=a!4-?sMlb5!!)C_mu+P7XU=1}#1S9bw
zxrPv@|HC{_Q&Ij**E2QJ06~2Ha?JaHMQ=--YOwhjA8jeUBS4^ECY04;ohHr5+HL4f
zVKXSpa8Av9T`*b_QI==v5y|_r1mJs;d6$oDk6MBov|3F*&jfa%9jhIM)03hRq<U=Z
zZp?UU;uZiv6~|Ttsk5cAC5>1}lKEC|vb4>7r0IB|n#4dXA%=r}qk?l^he6s^wcAR{
zPv0C{dwsjc2Q$aTm%Q{5Du#iyx`jLKTnXPv0hz{>L<bPk#zz=C4j`Xc&~u&&4xSEu
zZL!QuuS^dtz`Ua(`(w>apxj?x+Lr6QQm;zx0bYd;=VjZ>kM1A7A$P#D`7;{u6Z$BL
zF#-bLYuj$&)Fa=mI9xbUvvJesq3p5!^Viv?KPOYiwi_JX$=I&Cr7ffB_(#-#KF&W$
z@<eg5Rj8RFI?A}kplE#1JvN4cz<vxrhm8aF=B^nLBJ(*_&>~gP=_dCe5f7z&<+=rZ
zL+%4 at EI8-a+)r6DRYa5DDJ?qrzxcpf?c=n9=uWT^Tzl#UwN1r19)%Nhrq}XFxi!R?
zyQze%>m?HxA65-toxtlhNYQQ`(J<E@@E%}$Qd5s6?*?2%Vmpxj_D&pIf)XZa){9o;
zlEOehMd2K)W7taFmF9$hxBCvDCcsoDo_=wpj7wwH&&dt{Rc_YyU8(zVdr at MJC~hz-
zQSf5&(%Qb#fYJGyQ))j*HXV?-Ezqsn;xbnK+jR*Dwe=2p(Kvl~VOxlM1S;%EXuhhG
zDZX<*r?(_Ms?YXTFLbbj+no6f?a_N9NJr$zY<n51uX+&vog`KcL9`scHBnY0DOPD&
z9#2#HX}1%+Yn(8nQ78NjkLH<apfq&F|EuPMN~oo3mX;w29dw){5isFJPTMuYx#TzM
zSR=@69D^+uK6RIbAUoKGU_`ehw%eJxDK6Nuh%VHKSUjS9Gh!qn8f&Lp8q4N#epqvH
zD`Ys>`nVxgDaSll4)P)<;U$A7o~9*2 at f0h6ZZwnCh(>CB6qw?LZuKcSdU!)R=-;&M
z9u<clpdQR>Fcm^G)ITeE*4}uU83myQwdeRzhfAhL(BR?Lh@~!v!`|5>8 at Aj+F5d9@
zu-IwN$h08+aCHkmGbDf%s}nw(Z=g%}VMCrw=%YbUQ{wlaak7o4K*AVK7 at enCNhSbs
zNWJjwX|Zl``541Ezys|lv{l6KZtAz+EGz$%%pB2?ByYAy)Eo2tty~dnMKPj+7b3gT
z9-qy3*z%JumOIp<cq-G73l7}<43BIY|FzK3z>|2@!Lh8}DJM0kFwx27XI}{1OK*AT
za^wgvQhp!JSSbGV`c(5}Bf3g2avk*+Y2!FxZl_pU!mg3irS1Yp+-DR`o{BUZUrjKW
zeqpjaIIJ{R4QkD*;5JYwmj$bOR!V<R2irrxg+#TiODA{o|6!<tEo~LO0&eGY+f#e9
z6+EQe{+b^41T*)j93u{XUS=*pE<|w9Xem|t+QTu5&AnG^hMa|S>}HFoB`RHdzV^gI
zS<2S*TK`1;aQGTL84jz<d&W#4HI`0^)!3{A1SZ|t7EP>TYTNm9<K#$DnXJj}g@(N`
zUh*cT35OS#$aq~dj?|va#VZK?)!YlZPMJImqA)ggEjxI^k`AX$$19p;X~eGd6BP<5
z%37nFn(yM$l1NEChcQ;*bHiAwG`~krLBv1ySqmstokiC;@|c)RNJ|}@u~G@;_wEPP
z*GedQ`Fm&+jGl6(!MiCS5q1%Z(v^Gq%oz8DvkDjNv8Sj7B>`!t371c-GE87tdXCea
z)3TU`Luu)$bpgR5{EXSsnjJ|t>Ajv+=)tzptNci0#PXGxx at i+U#2tR0_-%Mh at 4U8_
zCmr1ZW7*3 at 1@@`2zV3wkefOC;>^+pgZE2*sSAV(Iz^xQ4lvh*P-Lf#)#~(wg0QI{K
zB0@;jc3(cZam2#IV{p)Z6>tgjAN%<5IcBZWLVpyig0=;}U5M`0ts^S_^=vz1{h&$)
zaHntJ?-mmXW{mx20S!EYjPW at r=@vP_*K;D;-%)A+yOI`vhMpK7!(2NH4^!d4qc0%>
z1GKPEd9{iRQ+lMCPS6-0nOA-#Y5rmuRXrNzTw>m2t<Y?s>AJ4!mvVLZ9bkka@~stz
zxVZhkqijGe8LfHR#JygX7 at E0nUXg74dhuslouEx*<vDQcv1={}t1pTKn9<t(ErVOb
z<*Hoxt}HEaUkH?2kx7emIAGfkIA9YOc(Ei1lEeWm$H5RV<BSI1U-ri0z5Nc)cbi&n
z%wB+W{9 at 6^=IV<;k?#Fx4Yq*3x^=iTrHiJ{(`1vT7UB|^KREP+Jl?A5)=Nk;o{hD{
zR1VKLk%?AQXXAl{E-B(wg}v>gX_dkN8(pFg`h4vPVZ6vvi7Te9kfq_N$e at cbZ8$S;
z0bLQD#~2{tfZgMZ1}ljVZaZg(qP+D^6c~j=u%hKR=A#YxwyQv92d;ViI~xP$W~tTJ
zpI8TurzS&F>|@k^?3<WbJ&b|{{&BBQVL$*$S at rHBu{~yWU*f-iz>A98VJ`2uS4i+%
z`ws0q7LM%Q(3Zh(_BA1xZg0?r6Pl79FXjdxeaTn+6tdlGxL%MrxRIPa_9QV%`Ns?Y
zwb&JBwvZJ2YkYp&9*cv(Q}^O#+D%2_%Df(~)@OJ4=3po|(RVMWjyA7ozO^9W^trb<
z18y40>p6pKV~s7WLb)kV&f0JJVj(d-<W;3G034mAyl2CQHK&v+tiXm>@pA9(#}HpN
zd*8s35Z-pVsbS@^m#5&SOY17}PMj7Ni=_P<FGf^XZers~!2(hN`m>HOx{*+?=Kua|
zYva61HJ!7S2K<)C*Zh5hqi-&ivv81=kIlG+YT|wL(vu2Ku-?~IZsO3Ff4c_H=wram
zHkqL3@^zdybuTlrWIr_VnY;Jxgp&_tYxME~nyUVlw0c^w<WPe$7n+j?KnuX2B8PDv
zbvB}J#>5wim4xke`=RUYV$PTxjNvoc{4g73>;d_Y8OH~cC%K at O24T2xGl)kv6;5};
z_3bpCJ9V802ITB^8AkOvx;?X5Fxj%Tpv1(@wN|kvtq_0_G1#t!F=DBxP`qB>6JxY`
zWthBfL~fk`mY9fvz6~1|H~Ct^yJA7iMlWkh?`SKu!mj_0@>S=crdlSRg?nMi9!-_F
zAV2Iheu2l5;tFxrs(#718Mm0K*Au|1rh0kd2|$p=XZ|_;dSo+$3l+=O3&Jn4ynuYC
zt4m`Of-Ky0<2^KkadXqqPQ!7(qpw3k196jPxmC at 44W6T8R-Nl<I4nx0gatNQb9Gns
z8#Tsiew(Qp;33csMhLp_IkF+Oc~b<U2dO#w*)=?7Asj2**b at em=)6dMTTuIXc|qL%
z>6EW$AXus2hmhr^i&7Bl^inP@#?}Q=0?C`8u8kJ at Q=p~RSQt|@sHCYX<DR`ky$-ic
zjSy+^*y6n3J6H?1s~GHGUdK2$QrEODo0Ak7qQI1T7j<AYU!*(NE}$$|b?o=!6G*8=
zDrDlIY*lYO)H)yj-lH3_PUDg;i%?_x{EoH~j0%u^{OZdTLu2qVOopy|YPgR|L!^TV
zQSx2BWtf8qVds+_AtxX%(4;A=;8iMwn_#^%x_{m#B1CwEvP1WYd7Tdn;%K}ctAVD+
zKdWt|`DB*q5E`X^*B-%mh4|TP;cd~XkV;XGsW~ontx^TZf>Q<63C~~K1Z&tr3wIJO
zFuyWv2dni7N4~g<8;vG6IgU?ilw*|&3ju5i2g#dS>yUG;z8|wY485mth-18G^k_x2
zQnZ4I3th$5+~Sqcc}YA?nsUMtZDyIBkw5i7Yw|<{6}qXU9zD1-ttgM8Qc56G)ykYu
zr${}Dc0}@Grmd)i_mennSDiSCfVn<a`i6j|Oa({NVSPScx4v?IETZ at z%I9_;x*mxn
zp~y$~e+gV3 at U*r%+%R)pld`qWmBye_M$*rT8%N#fv1e0n=i(Yr4L{Swwq)HRzXeZ?
zlMjou4QqW>?XadHGuTE=x!qAshGCE=s at 2UrK*HmR<h&qJ^1|q*bCWrnv^HC}_0HXT
zsS}U_M at P$@HX$1wG(KW@$DgL=ZPG0hOO8`T_DqppSKjWA8LUr|&gwtrzCKL*UvA<b
z@^A(a^^>{u8-t-M>$##qsJfCnFH_7QrE#je574KN`84Q*4dJ$T3G(&YcrIzRqzPqo
z8yX%AA~*|p;9T9V35#%C;lXPt57JaH5aWI9PmJCckDE>*3LgW=(FxukBAgs2J^*^e
z_JyIc9uIK3n}<Hb5ol!yUmbF`)9Gl=`qnM^PGICuAW3KK6vlGOAjJEg<?Dzxo!h=e
ze~T3+hl@`WzB3^5pbB$6%mAeVR-&wg>Bi+5Bl8^2jb_iJUYr?BqW|_bKq2o<;xe_c
z>|_- at F`)5rNJgBWNpy62 at 0cNhb|QPIq%bh8#sn0dT?o@~Pqvk9+bX9 at lg%%%O`Oh-
zC$6!M{Py3Z3Y(;ODh at tnuXnA0<s!-bWz+CV(oahsPZ^~361Xd``0Z4deyDS>iL%K7
z*17hYgUoLtgv2VI$zQ2eq_7gplq@&spz_hg#FF7x--(LT;F<m?T1`)25Xeoz&dTcL
zO>e+X&&UZ+?WK$(`rcx`D at yEvv1Q>CqCcL|GevV*2b)f+Z&RltisS at sl~J_3XH2{>
z`428=TQ+X$01-)+xs%#Dhr)}BPJK0{)b!K^MFPtS*Zi=@kxbUO26!ivyEOK<&lei~
z7%g+&Ud=g2cV0#`@{)|wxR$MJTU<JfmY4XL!n at P;fA~ZVVp!1h+z1}m4Wtey%w+UX
zZ16YTfcO6B`l;XHel^{j1rqitR=il)|MAvK`x`dLtw<kyK6C!b_B}vJdn;6T=Yo}?
zoAAmcOpc|GLB*q=y<kzfnKj<M{p!%_X!^jJpU~ca=h!4B(|IP(!Yz<>TvHjKv>ggL
zM&MIAAmW$6SCq?3ImP58fUoRYNN at gRjg<3%%G2T=X6StRn&)vCpM<@cL^+C#Ht%p%
zQIS!Pw-SEXetb5sW4hk^?@61e3F;5K1;RsAvXS-VpA7$8bVFIFG};Lti>dgq=rZbI
z3|d)$7qJ6}*MKn0Uh0v6pG2~(xSdCM+9}u>mC<tE6)%^&r;0!`5C`!pdV=sB;*9WI
zhl<Qt8;UZf_N82k%zCHLcO60hN_J#1d__D|%3K+N0S&7~1!7r}<m*)FA^>Pk8an`=
zws}9syS=a&pV(1=fwLUYiX?3{NIh7IoA4v{av+B&US08B-5gMBtQA6m?sw4~<6_~U
zrpgXn_Z)qX#_T0Irl*sfyGY`qdR6yNT2#&zA)yo&dp*%h#GyM0_X03DmhLlhABRKI
z4}L)zE@!nN-!6+=^i-e<2qb^sCn|9$x3Zqn899p4!Y1$^+uINMXhT%1%(707{q#Uk
z++#Xa<<v>vKAu(%wGJaLqsj|J8sfGejuXksNoBmTgh=oDyH8=X4!5!t#rJO2mhu(o
z at 5e_cMRcINd?h*?<C_|S&W|z46)f~n)v*{J)@4(C!6C8V7D(L^1O*jq3rSE<sc~^R
zmg%2InaEyvGM}*cgKfX;8_zy>UP}6v+q1|yc|`XAD-%P?zZIk{23V at P7#M&6=!I^s
zTb(fz!sNY!8WR at t4`kY!`kgoXak{iiV#F at G%P at z%LZ9aR<toujnQBb3?aj}y!6037
zUcSlfU8J%iO@~wagoMc=>4fhLA3<h`9U_ZRh{&>7N#vWWrnWR$6NluK)Wz;R=ghNm
z*LJW;J*W$_0Td#}i(^egTm%h1rZ0VQ*%OO4akO-KMs$TXr1?0g7;a|3OB^H>67dK-
z4xB+(F*{?-CT&maciUKIp-+xCa}1dTnP+wEwxxSK3~~a1J2 at uuNL&re)_+WZKZ|X;
z27eGi)#c92ICGC3w2qT+%a*quO|$)Ni=DU)ZHGJg)ys)wz)i%?4%_T9%1yGjP#P(Y
zLIAutd at +WpEF_YYGIZlM-hDt5bg(N77sMBbT^=z{mPA1cyxEi14TBc1Vdi$CzQNEp
zu7woSjmcd_2C)|@fwzN0iq+}w=nGxJ1J=x7OTgjR#*!@kb{|mp(|miLwNIR_(boiU
zg^5GrkD)_pEG?Fi{sOhwU8h;mfp-fzRX813M11G(4TALOvVis97pp(!3$Y1$wq|;u
zqS!jFhA9*Oj!5t2-o?Q%@tXwX;E1E`IZS25^w|3}1(e1W0Ebxrb0K)SGyku>jgsE1
z<do>6KfQg_UEG~zzS2PLRdS3!tZ&$`V*F+ at R><g7WPfJKk6IJvOrvJd1=!>YB{P9V
zTf8kg^L;aMa>hv^hp6ch(D{g~sDAuQ at 8D}vX}=@fo at CCWdd>}J%aALT)fLr02iwzY
z5_z2BnPZw2!n|%XwX~Pl&T`FP>!aJR1`=PB6elFA{j#Pmv5UR5Hcc>FU(dndxYMSo
z*m=48qeYxdA+#MZM9rqP+248 at i&r=5e`s75s?U8DpD1s`4Q7-=0g2}BEU)e$Mk$1x
z5R?2L8Y!XqHWntt5m{|1Rbw;+%Z>~C9VDo755LF#Hl&M9M3=zs at SO!gnI?<}{FE{o
zoWOTlP(EG69w(=@xO4a+gm-sD!9~@->&V@)E279&^a9Xg0M5!<%(|HP<cx20p((|b
zJuUW at uE7+t2Jq=p1QPcz6G?<pI#L%EIKs~=S(b4(J3_FK0}U at So^S00=Co<X*V1Cz
zgLN0cXT9f-cNru at wk+T69_bv@Zn2>4fW9Ce$V=m}^d;|{0x`)NmmWGPDILA2?(OEM
z-0c8o4rLmo>C3GZPBnHE(ulXmIU=5MsD004GSn`jbQguxHTZc*Bw>h880}LLOcFME
z49ME~q7OSzb!W2W*f^V)QHAhJq^?d&+tGN5MOs(PW$j2T7cAf2?XUz*nRWvb(YbV-
z?)M)J;BTSEjbGt&`{xIqfe4dbh+)vt@;VydcwE`tQt|n;6O~Z*i&#{R&d28bRbe{$
z6pfNn+|~e4yZUj%q^x=?Y#Jk&?BYGwJ6CBuzxZhF(eI)2lPfLuOS;iUIN2A5c|ovf
znwinF*;V=WF2yKK;}m6T#8_sNv=!9nyOqRAcM?NLVr4mbbOw&8hv at UP#q^K?EyP3V
zfHfyqdMW>GJ6qfSj3AXASvXTfNDv+$gS;Y3je5OHiD(OWjvEVVlkjaV$qHa8!-#Y6
z3l}9Mj$^|p3e&sz)cj#%w+LAk(AxSPirye9Y7Tp7+Z&N-AiJZ&zMpOn0C<_%mZ3R`
zHiiunKjB0T$0zSatb&`!mHqjOsfWc8js$i`;~T=^EZpgi`Y8(n at +ZMYPXJHHBbW7V
zfHmcTo-b0>E|jyuFDN^Izy{B`3iY+8d{cI|4vmOws%Ih$=Q|cGof_O2hiE;w##VDg
z3M at c)jWy#9Ylqz(GBOr%xMsCauJUQ+!|+GujvxYLq(z1~WMdHk`$PJt<Ezd2Q!VSD
zUAzV+)0p6AdJz3D^_=`;&ATOijG8tlIm1r`J}U|b+ZQ02?tB!n<|~&T3uOlR0;`Cb
zCbtbG<n0=CRD6!*)>`0+>h+god@~4npQMH#bE?bFe+Hw>oEXelMIK`mH1>#3rr^tx
z6d$5dau{>-=0DFDlCNiV!v3kE)1tzdM*;6qxiaOCthgcXe at zKrfU@A(bIdU&eudp6
zIIE#61=dF2sqyvqiDeQIuut||uPT`&dTu<V&Q0scG3c^pxDB131L3RTDwk{)mMUfN
zt(EY4JAM&pDR%>RrtQ=iG)8;9(*E8k*CBy~?HCstE(lr}%m^<Hr>&&{iSWd2s^GS>
zr#{q^Ti!;`IdJ4%sXm!CFmvw{%vZ#+rML!yA49q*<Q>6urMpH*!%*WB_vOyqSyXn1
zZ?E~K8 at b9a47ZTcUySvZ!uSxSJ$v94itCOEY!zggUi=AA)%6{1iPZ&3yt<0BQGy1W
zk-J!6a70sY6?1np<nSzX^~bfkhg~<=2^K&%BzwEJk|a at Jd9h2dUD7RcB3+M|#fW*~
zJ`LHq_0}i#spu^%GzOyFVPmjOmGc;#it^UxTK{i0VJCAp(8xK2WDIuy<$yUvg?WWK
z&1 at RrWxqOATP@l>Cr*gF0~hgJ^d$NvMKjB%2X~*2?P9g&O=ty+UugOBajGk<KXADY
zmHJl at a|*hS_DIZ$?ApmR<w&D8VWAw&M1Jz+ at qu|hmGlgt+>H%v6M;6(b8A~VDY-W-
znlq7+UKq8PvArB0L+cDa@`X1`01Q2aT}}NhqS?75ALe!HVh4YF^gDaSH2G5}>B7Zr
zGn&m}M6{+H_tUQBl(xL=wXo59nIrCraZrn0tQH*Q`Y<Zjyl?a2D}5H2 at RNo5$pzVH
zUhF|;=0H7=*qJ!oXN3ZKeXqFkZX0R|20S+%Vz$GHh!EBtqeI9IcS6;I{Vsm?$CJ6C
z=3oXft>1utno{n{x&h?ZsZ-_NkcecPQoJC0ZF++vY*?xH5vG%ap2|h7#2>iLjMvMq
zQUiZFq(47|w4P|@P|E8c<!n<6AdtSMs|uQ1l%TALP-OM#>3dQchenmiH~|WMeM5B9
z at JcNU8i@Du{|I6h1TC=FxDD(9N{2B-C<C05rZy~1PD<;Ik={n8MkPu$?fsn(nO7cw
zBRqkWV`gZmDM{zq at tBMr>;{3?N;SHx6vxPAFRJihTb)iC<)R@^P@;RGvdKfn5HoLl
zz^9okQ;Z^EH(Q3gdHX^Az?q8K)d3jGd|p{MUH>XpeO8`W@`?{PKc<Z?>!RNy at _fDx
z{RAHBma?yBr%EsBIj#I?ZIO-U!0({=%))}WCRy!3*XZ0j2Qq#}b5g_Kl7Oq&Nqxs_
zVp#MbE=~23fOmbRL{o%v3AU1U3h?bnADV~dX{WeI#H{dV&n+P7o_q^L<KRMdb9yOq
z<GLtpfecnK{<vqPYFt9)*720`&*B*JOu<#+v_BW=U1n~{tsPvr8XTL}OCEwEoIyQ&
zu~P6sY=!shUlVbaT+6vGP(wvf4Jav(-nky!y}0|gU at u`&wCtZR)lA`_#s{Vo{NLfb
zxFHQPhmxAlH{oFaq at wJH;GS7jB%Nie(3;^TQ*ec?j_xNka(#l)fYvj(&IeQYT<PX_
zQ$DEKwlEU6%T?uS4B at TUkr^%|5ew7Ny^5GSl@)+U7eCN1bl*G}Id6vth$q8ZrP&vd
zh+l>aeU)jyo>A<1lGb(g-LJK&ENn>MC)R&{g6Cn(@_?so7z!U+#Gjh2YFZ8txVV2~
zE9<o>WbU$X@}>)Vm~@Ba<aNqvGR^93vnChp7`LSp-bWQ?%@M+Hse&4CDR4(l%gR}-
z@>uxMO{VByIYOdoyTilM+mhljRi<tZh^mz<Geaq?ui*c^_NF>%T?4819#tEZ2>c$$
zI8`KNhppQELe6LNci!bqpfS-Em}mEImmZF_Mg_69E-{Q!B{%Eln&TyGQhp-f>Haj5
zqRw6DwTHmb%Q|Vyg$Yi0hM;YGpKRVRApJ7PLQ74IX#lPOuaP`Bj|1gabTH>8#81Dz
znWr1y?V>zFBVXolGZjz3RjR|Mb_Z^a8VUqnXz|fDJ)!BtW_B>H5({lGhQe1pVWO=H
zM<D(@rBQgzqk<*`G9Qy;wXdMvcIWwqYN!TVE5jaA<zq||D!SE=v<=7%&biD{h!kaP
zr*&b5)RmOnGr}5}=De8Hst>rTvsOkY2FmFPG8YN6HJkw38@&B$&L{n at M-z{02WWxL
zOyGEj4*y6MQE;yS>hF1h)vSdJ(1DND*}SSE(lC<hMZ|t+M2B)cCx-?`L#a8#aQcN@
z)iuBap at 2e@f at tha;vYT77(RgoO=>}Jp-*bLRx^Zx>KXy6K9;q9p}GG$Q8rLy?B7Ec
zU%CBl2|4|^pYzoF<SE^SXvYL0koN00J2eMIZ;SMN_&ycs63~i~XL2j`4K9Yd-Y5|S
zbRy(|kt_&(K223GCwlcPU%W_}udSU5C4qVsA$E44$wu>OpszWag!I3Xylha%!o8ZB
zMtqWp-|dNGb<Q!et*I6W#(kSd0LgnUF!Rn8W1x+)@~Ja06}xa16QA|e%vF`D{><5H
zoY6iub+7!xZ|D|^ezKP!F%bnIKxB+s?OYltBqHp$v>Pl2#@gze*m!^T3I&NxPN68<
zPYL$79P3LDC_k#Swf>HT^IYoQdF2Y{7uRLHOdon$CP?b-)7&Eo$lLV2^>A7*<%X*6
z9s7|K7To9klQDkW3l0;=tYtFzv<xk98-YWvZ34a+t|0|oHhA~R_0<Zyjdkp^jvQ!P
z#I#jO0Y93On<}GLcUypV2{Lo2e-7|<6y$pHF-xKM*m7kHul;V7_;b4ksWZSNHSdQ}
zICfo-a&L$!3Z#v>t<27AjjB|V96t8-RJcxjI~E}FMI2bUe>5bnG|E|yF<BR5DXuAp
zwpIxk>nYeGaGe5R)j2t6!#r6t-KC$bOIq&y=#TDHa-)AbF-PCCNv~0VN2c8f1DXIx
z8`qS<dH&Z8jPQqspjcqIG at Sx}X)$NSh+}kJ`Ng&$3@;6vmWIK-JKhD~W6oTi_15;$
zXn=wBEO=#feQk8o6f5}r2LvFDlESXL)Dy)KJU)e`H`e}7!o{@?67Dfw1(`L5kJKVd
z{1bYkGS)z*4pWp(3()Fz-xSreAc^~)s`?k*=&LdLu;uVSI?{NXQe*6&>GS$NLp at mX
zm9^inBUhS)+R+)$ANZC_<Khd7C^DL-aptBhD<}aC%NGUaxhSkV7Ne~@1qhYKU^;(e
z33WD2D%2kT(b{IV&~j!ds2YW7PYQ7b5t=yvNZXfYA?FeH8=kA-sJTC%P6Fdd9L>%y
z(BuMyrH=>%*|mVlBG-+|Fit7Qz}eJh0N{>5X-;J2x4>1*`r%70hlUEKD%)VpIxYY@
z?`Va$AX)+b0Q}MsWP4N;vpc%c1ow|lya0{@v&X8#n(nHf>J>U##4if==^{NVI|?lS
zqI(BzR~h5f3?Qn>lPKq>1ZvsTLD^1am->?8*Zy*I<Dp;b2M?I at tS(V1;|<+Ki)lCi
zEg_bq6|T8(y7>{Y)j%aW(6JHWZ%3}oyP{)a7sJf*K(abMG^<CL at y<t;H{gm at MGkuf
z-IQj&1 at 5J?a)qx&^KDmfDMwL2N)<)OdLrEqdqz_FEE<aH4R}#!F<`Nh=h<bH`^b}X
z9=9d36d^{pKMeDS49$2A6ul`o441)5ya}9D=zrh!W6tD!Uq4jFilM-72ag)cFgY1n
z^+`52=O3&&Zi3q_78AwWwuoEY#M()LiG7s$gHXLr%{tt}?BXmqArL%NM7s4F*~jOs
z<+|Ok_g50)0B8PB#0^8B1k*qhb9H4F&pq^hKBq<{TDmj5Q|-8zYGhAt52=aS;rQ3h
zOA7k1I=hn)#j^wweYZ|8GZc3!U>VRaB5s27<3V3nqAy=eXa5uWnkfA8fm2JnceY~k
zak5oLrVTb at U?9Wijay7+WTopivw6!@0Myh~3*!7Ab}F1R)kCujv|R~`n((>e${{p}
zN_vRbl~_68sNb>eH=uOOzje21Y1%E(Ybe8*rL7$SGdb1 at mzdwpY@7mJ4Rm>6^co0{
zYj~&C+0q?G`_;48nq(+E!ifzfy(+{Mu6iKK5l~eR`Z)lVe-H9{zHw^i{&=IoN|Gi*
zK>064bZvHEo~VnYrpca9Lj7?~&GOz-+6-c|R_oGVa`&ASGoM-J%_M$V(wqRIGFJHt
z1DAaQVol>c^_Y%FCyK4oIg}-|=O#)$iC*)b+_8die+C#Gt9=S$eMQ(z>9DM}V|lI*
zhD#FhbxI+w;ka!)JX+y at 7S;Z+XYxmiHwp<${ZgUPV+`4GJ_$8dLK2J1NX9z{O-36%
z8d8Jp$Nxe&>B~wk-Qt)TYT<!gWc74z%s4zS`<l;))Lj?spgT%{Pmr&Xn5f3-sV}gk
z at u1u)>7kt4uEurl?VpRh(2dVv?hsgl$5bR(Nny!7Ayv`-{l`Gpc<)Eun8h0~KyB;_
z<w(ooug$PZ6~}?Bo{ws7h+qD|SQMXsBwe~KeoSUX^uhD;IYT^D`Ei)yP1E#gTY1 at 5
zJOd`BU(q#)&&P_x_QZiN9cUy8Xf;!{HHH}ip*$)GxCTyE=chpAYQ(t|5l+0026ppN
zmEW at bnwsM(y>lnL2+S!7gc0tzG`vo`&)&2lc8N)Kt!ozJ!NTrs14NvRZfQkwcvH;x
z8_Z!+n4w>^aZC~wnkJZG)K~f?%D+lp6Eks6x9`>TO;<~D9&k_W)q)JN8I4;B9&Y;1
zye@!SZ1iOu4)AV7x93QBP!H>~+`y7(*+lWes%GY$d*%SDP9Itve0F?6e3>At46uPh
z*2i%6D;eg3I7wPb#hLng=S+MvUCF;bwFw*u;Lygny}X556%j?=(=dnr;n5LScb6qW
z)C>g9(hjMXRx!Yi>+yorM5RGA=!K4W%eqZz!LGJaPmRpEal=H1w`QBbkM!)IPMaf_
zLOvXbiNFu_dom;ogb8lLiusf(R`4HPMoVoq<}hn7CV%dCDN`iu$jL<eLq`5WW&vP<
zOZk(4ALLpG&gRwD8%J3G&g|&+$m%(TMGcP>sful&)a*iBv5Syi)2WL<rBp2A?WP{f
zypoq#!^-<`xl@&sbx5=u^#A#S!|&9=%VWi|g<9xP%k6E^!c?7oKfVFLvH!T82{RF>
zV at ze=BPdHG0L>ml=>u at y0nJ^+0UKFexqwIW_MLH at T$qiW2TOm>wG6lBmA-k~PGW1>
zfZ<bfhvKgxrK75hnT~Nbev2_K+c6=Xi}3Hf%6dbkL+v_JPZYNP%sUQz_FW!K1P|;=
z&Y9_lXkTXrX>HtWHk{uh+T|u-uzB%KK*0WIucSVy_bGaG99fk)TFJur^n1o23CxZ4
zN>ErWe<>jKc3?P&KoX=f1y2KCuEiI;SxUv>k#S$=!*iH5%myyv$33wP|FVe5(wchk
z*nX>s%%mGKZOyaScnePE$MZGWJ!MiTDFO$E1loyBk(~@Gn?Dd)GvVXkm4d%GeE-*+
zcnUxOUHVP`$v|1!LZTZR(HVP*4hTWs3%j#$ASM0-%rgkz?m3dzwt}L7f;JT500`LR
zfpkFtV9#>11-ROaj<2wda~?hB5d;imQ57Y4SeVVMEXpTDD-JyEI;8JzVO{tBT*rK!
zv1#y0+u5Yxk7*#xR_g>E))cDsi0wL;L+ygx;*oUEc9?eK7*&uLNcoBKiG5Gr_uu+U
zMlYLXHo0qc6pK6TGp;y^P9q_j0u at yx<cO16-SMy)6AGkoQ~LqbKr_cp3Ru<AA-5Ee
z=`WcD(80S&s<dw&m`>|Qf-y2PVQZOQS5rJ<`Cbv}o}Dly^=$L`($>C#cCVKd$sXQM
zNa{_qH;!TH|69woBzC5(@WoftvuUH#(@ULIRK1~n%;!Q|o^<Ikif?wyreo1j;y_X{
z5~zjIUu-xUj8=f@?(|S>c+y-Z`fjYm6r0FC7vG6?pShSZ{&X7tXSzMmi=q4If?}38
zAi>s{#4Qes|7IWYEV?%2rY6UeG1diZO8ME<VxNDedRiQwb5xb2oS<08SI|Na>i%@<
zQXrT=hhuK@))eD8qjk)STR{}fM=>z#yHVkjXleTbIL+Xmfn4S-9-`Y!Lg!#Bs(zlW
z&efu#d$W>%(6egD78C8Krk(P(KO1W2K<H84)e_MD{ObLZ5~dPy6cptVC%_j<lCrMl
z0cAM+5O at f2QSU~}aceF)ouDZw{Dh2zfVpt?{8vcID%v|V|CcfkSg&bI{ga#eov|fm
zob0?rc}?Q82SPh#Cx>{T)~<A5Tt~=OST!P2o$tx`Ni}9 at hYCMN?}z30T}$6AM!_9h
zLneKg)gNDB%mpzfyMEIn;)cBOmE)Fbhkfk7cZ-3#>vE$v<{j!9UqqRfv<@R@)~^en
zaV^>R{8fuoBFfBT<IV>MNV(48swEGw{%ZDBOCm2|QL;Hy)!n{~`2ZK?T%@o74r76!
z=+ at Qpl>eE0#XrVe1~{sx_tmo~RBfa+N8%G1zG5_!z5QbVqAdO;>c#v|{Ma_WBXU8f
z0&VZ<=}{ISS$Foqqu#-~g0~OF3SvC09z$7E`Xu;~jg6$VMUIG=a%<I-xqtjbudo0B
z#$<1<-By}T%3XE#_flJW!#2!+l_1&9F4_*r*$RQ(VwUQXzzk#jFG26Z{NN8GQTd18
zOuJMze$@}DoIb243C<@Gk0{-#JIJ(+3kCTCpX#TdUCnvBoub4*PG`w=Qao)L-^YX1
zkPS?yx-60IDhyXa+V~;kmT-Cm9YmYYUy&-UbnqUA0ss=mDWd4y?LE;`35*cCaIRW+
zHq2q&ITgrSoGj_jA=+ApKrrMInsb`#sAImmKSq8embE+q?ND|^z-xDhJ~{99F2297
zPhwH<NpA*g8_J}JdAG)Un2;SBax7hz{JzT-akPP{Us8a(iQj{qvIXftelwXDnE#K^
zoYe0u<q-uu>{R|<Jbqigxl7|^gx#0E0(Za9&GIkoQ*R_hgf`b5+H#WHvB1^``=_)V
zO|-B(>039HJAZD<dgA6h&(#8f1r6*4jM3t(^g%w?h>w#p*dE<X0Jyb3*bw_t{A@*?
zs1UdkmFoXAHVh#n`Qf-kt5tq*Qqgkm)2!;n%rHRbQ?=o=GoqRk*&VE40lHt>ofGU<
ztSDuD?{VAj at z~WONA<X>y8H}mJNmKM5~>9uV|9KHF0({tFywyi8axOmT8eG`NG78i
z2m`S(x+j#23+rM|*#+oD;qXuiG(DFxUl+#v9h;nGw>pVr0gTYR4nXx9Lc_>jpkTP#
zp48%Z5hIkkvRGCXvWrbUA|;Y8+40IhWbK(*0U^CYpW3(Q7C6T+CRI-tcfiBw`wTbN
zFHmWa0V)%WfrGA%Fip>OMtTTKccF?cm05ny2g8jGY9n<=dD(e!!Ny(AF0x;ZtCH3`
zC!FcZdy-J!M9!+cP}SRyp=6=(Brs)^y8ON8dN-u0m2TT?C=V*69))Qpw5}|XdY>ic
ze<~JTYM-um!}gn#zo($LXF>)6eRnUB3Gc0bBvHMDd=kou{(YsU3)QHz at K)86+2pAk
zuwf?iguhpVL`SI$1hbcArdFV$#Vu<5nSk%c4wBrH7bl&9 at lElkk72zMTiAe?4=0gT
zJ^eE)Pu`di4;v+h>?_~7hCcY-2xa=$0VYZ;qLhgODJ+*$Tzg^uGGi^uKg4+JW?V+V
zi<=m3%EV*QF{L<CM1+Qf45aw?q_i}{C at M}9f{q??Lx*6BBC(eYe=)5nWuuHKcQzUp
ziN*B!enX0EMhw#CT?_D%N5BKBAC at ORuJ8+FwjzkJkP;N+Es~+hWf(8ncpCXhRXg4B
zQSC-9(HB8g;#(vGV!usEh6JJ-UG>kZPW7(6XZJ|EbwSoSwLkPWTbhw7;#o*SjSb1N
z2cP#_<hilrw2`LBU>)gyYZ2UmWX)VZQQ8UcM&hz}U<gQDrNE?1S6N`nUoUxF at EW5K
z=cVXmwBZZYEn<fa>!>Iz;E(cN!^IQTX(a*vDS3ZrhY!QS|3B|N$+7z{rxqXvyqtIW
zs95{8V0se!4>?Qf<x=!JV$;^>oBdnlCFSW(W1q&EgI`0){a_$17<z*&t6w_c$<uZv
z6_WpLnc~}wA;nM8V@@@SG1t?7{2sA;{HOV#-k_r+Z*!%X&_ar|k8c_%iH<^<s(9Lm
zN1^wMsu=B&^KryNsoJv#kMnMA4&V^{ce at m8-=%w2<5Qrovo-i44>(G(y=Hdrn$Z2K
zUH88{ed at +Mj#zXa039`Ye1StACmoK<{ig@~2r9C2U!e51k{0QN?t9Z03!h~baem35
zKp1J~Y#LXRd4P4T?xKC-ae|lk)*hJKn}7h0Az@;xqU2fJ4D<;pM1)=Ra8)KjZ)?4R
zSo)lojDlhglPqU43vvbvj$3YPA~I at -JZ$!_X|BrHrG8l)@&XoA-zlrn*oY}6i~8f(
zD&^cWGXf>~&mALIc&7x+??9$>OL(Yc5d76e^>7W?Q<YFg6{z>W2+Ic)8&_fOe=YYW
zemi!*+MiV7m_iHO?12uD`p?XF>I19cb$D#b<Qs0QdIKl}6)P&AQPq+7_L{vW_K;Zh
zhwcj6Vta4>VEFDHIPYTVuN`ribGOtqt_l0uYVDLP5a({8P%>U~A=$9Euf!j&9;f4|
z_u at s*-Pn&=@;QTUGd-kUl18yNrZyKAmlgM)$0MY-xF~q6a~=mQ9Y*@WVv+xB%+C4F
zXVYyy94=^RccW_Rrn~cc!(VzA{kecW26xc7#84k{mQfZ$mn-}!${D|JI7*Y)@<zR?
z>oKT1>T!@XXU?$6AoO{?A~`njsqqJ`mb_PN!jqT4;A`M4ZK5UA$1p4vcLUrXR;~Dm
zZ%fDXM#$11``BhG>#OO?9yj?Y at I1^#gE8^Jx|7uKwve!akUC&~lAbRHDun##=e4tQ
z&R6)&6c at tf^idKQB1t*0YKP3~6B6;NV}j)pjfmNqBlNOY+V%d;p5ee1&Uj&*bgpD=
zbfK!8&bN?WNq%*h%opaGvuNiO)63UX{Hip42cb8L9OlZv-y$El<+S0A`!}ZeWkwJT
zD(+wP8R)z?p47A%yH#C`y2{gGh*N(*s(VuU5<~b#7D|lj8>9RaM0sEANN+G#XToqw
z#H1%VS*C3if*e_)?l24IN-S*LeK5-NUy%bBFR3&P;^-Hk&y$Wj-%rHY_1v2>?|eC&
z%)CQbEhR026c||>Y*o>>%X#=f#6w{Vm5ry~D98N3uj$>1nEWn2A*qIXXF2JyfEq%M
z-x{#IpznF*scs(ara5<XyUwgW*oqMBQNVNV%QuZ-FB7(pa@|fHT=u at nu;Vxh-rhkt
ze-181<wbxd)ONr`yHBQCq&xFiPp9 at GpVwMGC#HTwAmL>;K`75`<V67)FMGI8EW9Gt
z0c(XeE{N3e<*&zYy}XT329l#*3K(p`=Q3yXj>vA!VMck+-%QH;=w<{`y#Y1O@={+f
z93YCJc4?ZLv<=pdMAXc_>?;z+TOO)y7Bfw^dpq&!rf2@|$~Bd($6PTeZ?(AkgPRjJ
z^C^3}%5O;1Y25F{u><mOTZxJG##QteUnk8znYu!G>;G?zt1b>sT4L%G{HM_OEUKtk
zG>6X-ls}W%MWG+(wsj3aNID3Ddt$s70Zp|J?;|1$N3Ty~^+2RELV8+oW|5-N=|D#I
z>JSw=aaH$;kHu{OJFFVsmFe-rry1HRnov(@^mf<3S0rfAn2*7CoT#!=6lxGL6yOS_
zc9g(>QXIrEy1M-I$<D{nc8}+Wb;qQ?kDBonqLn#^55?AeI|RYJlSS<Y0&4CgGV1r1
zt`3_W2BiiFsf1c8%_nZfsIDWlCp70qS||9|pvjb)`KnOb(ec#@M2P2D^5J~?FJMP<
zA_BGmLqNR0f!9GxjUfZAd%v<^A}pqO{{`9YZ<!=)ObE8I2}<Ljrcuj0oh&AqSNG*{
z?|RWp`83{4fyG*QGOPK2fQ85zt2IzF!7Bd+jXNU9Cq-JXcauiu!Q!ED<{Y~=0{sj(
z#g;>wznm9lL{cw}5_!fP1VHg5e)2V0GQZfXt0Rk|ACH3v(fB%`_TYRVuh-nRUz(f6
z^!jHtL!n`1T*#jF{E%u(KWN9IG0OYIcU5_uT3TKKG8oqMYBW?G2rmcQZb+nI_=QK-
z(t2f86&B$wQE)6Stn~AuANr&*_1U{h^y=nRd%$0p&mRP?*ErYB-ww)2Y_k~Ix8>s_
zr4CGeT?;`R{avPqNVIessPU at 7=Jkvb9;tO(5MM;e5LE`<$&pdKcx5J+>W%v9hj7Bf
zMp<q@?k*pU`OV8;lhQRb!9ApqNb|}?Jejhe#9u16M_w&X+7UOhV_F<r>cm)Z!Ai<2
z;SY(os52t<(T?bS<V?GeDY6s(=X8%YYRYsXd3xjCl|_sf$G(2LURP;pL2jQP)Uia(
zMZ`vhci5gRY)VQVT9HbsMX)JLT?-{yXn>FHwZGT*kTby2?+^Sv3?FW1G<Fk){Y9;i
zWngk>yp<rrHb*4jPG081S_t|D;qtxy=tIDhav&Xpxc9LIf)OTg_@@&eNgX=)Kpk+R
z>#M-46A$SKVu%$x-(r>v#n0hoLu+v)>+kws;>WmKLSE+|FVk#~hliPYDgu=>ul^@`
z$HX}sAd+egGV$gJIJ1Pj+wfa;^$&@$mpK*OuFDDkcqzNO-jT{;naN?q2KbZV_+OHr
zRxWPl?Y{6b)v{}scidrb;v3ZzyPXE1x2%dEwd1jq_qc>kFl-R>gvI&*W-*!ZcBRs7
zRqgwaMCgN?ZRXpgTmc`%e#WITHU}snc0hn1gHtqsAL4>ZOx){KzI>jN(PQKGtN&}}
zZvUM1)`ByEk`VSYAdE~lk{mg9iNG0XRTO<`{@&JT_)#gd>@Rk`;X`9+Yse(AB)UYj
z2p7u)yF(v2uo}2wR|C^M6Z#HeRi?}Q3~)8mAc!8c5=fI_94p?M>B at Wjtggpr^Ffyl
zGj)Xt%k$&AX`xbCsCV&9hIIglHq(f+JlG1msx`--*r$;c$ddu=`fKfb+Bn5jqk-BG
zXH_A4!OrBLYC>%+_VHjU`f=`_{6NrfRa&)#;=*@~cXkI^YzsxK>hH(InM5n0>oIeq
z^Nhee>3MfvhMGxbCBkU%k=j|0 at hF%MZ=cQnX~g_<iAbuPfb^@A3Ir-bIlrrA15k&S
z<TU-+o65O?F_%^qqHw-xY#J%`=X92YfQ+YbU0Z$mAijxQfb at Bx0EtMCy&QJ!lXTGT
z?Jm1AXPkZm^#spt60h?=QK`o_bE?sM{6uyTO#K4G=GGLj#2ZyEy(7~YrdQ3|RtB=-
z#k(@7>W2;ZrH?-2+S(w<pH|YzSO-y&?aX=>*hIkz&OCQyK-bTcuo5k^G$5C3 at vWpd
zczRX;<Ntj7tXFY=Sz$I;9Y&MojT5XDCnrFyvE6*Mkk0ZKa7se>`g=z9)ML$)r%R=P
zmuw#l$>qjAZs4p4o6^P(t4!|^e!n at 2F*zit4#uo%hH#5RR6>(U5Os}$gk2bRIy5CJ
z?iK1&t*rbl$_gp=@Z=~Vk6kBE0L`N<YF1=z9LBo73q(M0B`0Wj^H$gjTy!Hf{~>;3
zo5fOFOj_BXL^?Qrk-qB@`e%iu^F{QWA*)=`JO at F`;A)n%8Ej)@)SVacvKxx+7(_9r
zAvXGv$JK92oFBf9QQ4Re at SBH9w)Bkbh&PiOj9z&K^@&@;WFKZcau{b{zNEg~c40-|
zltg%@vgsuQt8yUnS^MU8D)xPMfFZ5|Q1W|b5n|_)W0l$q+@*%u-?($8BSQB54dH6#
zx-5FBVX;L>m5TV0zK={)2DsS%baU9FFc;d4>(G**bx(WwI2yCGfsG(ca=eTvYs$AD
z$a+Z$V)r>nNC$ekCVj7ln$^=7ZS?Gw<Kox5kT@*Ak2(^_3L-PjPJR_FlkNXQ;pi7F
zf$#%4k7&vBx^!-FNP7cX+nYK78RJLC2Y{y5OZ`kW8=LepXm4|zS}vV{7VLq at RViqO
zhVE~r;UfUe(fQS+ at _j5h%lc516Bw;2^RmYkiRGwuQWQa4zr?G|zyw`|;q89*0bcD}
zU$pA at I(L#_J7P-N<}g~U&hqKx+$Pr*bP#-*dC&pyv}zfR$Gr4(_8K^UzKx^T<m1&$
zL{b;+drQW{zDxrMI;Ogll%DYH4h3eO4;mpM>Mm=yGRSZB3i;z3y|%J7sgL$Vrivb3
zoM@>G;geQ)e~#9yO=l at C61BCHNP^y5&Uw$0vd(~E^RBK$a6PjhA30h?9fFP<y5=$2
zx5O;xfzp_nP(p({i?1HrHtufpn}Y4^MWGQS at qRDjs5p9GKajiWS7iazk^9?WTHK52
z7KR%FqZP8^T{^@3qyATEx_i8cZgR|Y-{Wc5%aya34}L%c+%Hi*se0}2+P9$#+Rj at F
znb0*sVe+t<jB%IHeEMFQSd}LdMsngxCKk>AI}=T1_v~)E)j3-euYaa(_&iC-3DO}x
z^N)=IjhCza!#e6I9PG6jVI0c50<5mU0K1g9hie4V8B9>0pE at HxqV~S>Bwyl!2~>5N
zf`Larm&SY at +h4MRQUB~>;>SKdQo5iBRA)eXsMU_w_yWgmXTZ*8WXIv-=Y%<?&0j5p
zRv+ikb>vsI25J+V=PxZ#hC(?ch;VQ?;4Xt{{^hy3jO9o~S(hajn;9To9ctx(qU^uU
zW(wfz7<f99$La&>fE<&$6eFYajhMZvaZNLjyiB3%)~^nf!`-B~ioQAaSYsLF;CP!h
zfW>nv7aC at DL1Q)3T^`^&AqxYd4OKMZx{N^qz6U3QfWbQ{u^|4XaaZX}L6O;f2q=08
zI3Q^R65M`{|I~(<C1VtWskT3pCI=ZpM8gbh5LIAayBfAxY%wMZjY~is?=MnEGumPv
zcf``$Qpk~6)pr#erMuC%%z7H>L~F@@d#$~=Td&1T46QvyqIbHHP#0Ax#3s)$Wo>^P
z4b|(9vmlwo98}&>0es^)*tPOu;o*9sENwn%Te71Dk|ix?C+P$E`7I5C$9#m!3k`9r
zt$~DK%1;DINH}g$5L~g- at Xjm28*ZRyoK~pnNQFyUob*to`&R=e$ej7q{v~nJPp#vU
zm*h<N`Qo=$^*AYByx)dxy-`zO(`z2u=GpDTBXP27k)a(LtBdv?WKZfYH<(0LG?-+9
z=$5Tl!~oSLaGU7{8nH#6DFG5BURo?Ei=a+Lz1*Y{M0g<f=c^xZgFM5Q2oh0!axrLx
zpmRhBtfBu{eoNwRps8ekP&k1yTxd1Gib}gLCnB)R*bz<NCVr~o<P#S+;bcqZBZa5<
z6<^NOVOHQ_UZegy7ySkji)N<CR#qjq2ZeEH`%Xy}MG#h&{l+c%f$~L~NgLgQNwV&o
z?&6M}((5`Z>Ua}3Afa`dpJ>^dx&)7HpmzD895UT0X&>4S#>u(yvbisv)~nYD)}`4%
z%k#fhcVhekIApR&F30m?lJb~6qX9CC!?--YZ1wj(JBN9Jx{pp~1W-|ZPf{7xsi+v_
z239%s_2&`y(TXp`Q)ywjq0YukpRqoxy{K+P)hrDXV3r|cS#3v~81G^3IL%7NS7iQq
zPiPN at FmcX{n;%$qvLwq;9W9p5ueLi@$1N6IN_#`e$F30Ps^&b at Sk~ax<eF54DR`SG
zHZ&~mp|J%rp-r|)_h2Am3 at g;{ZqG^E at x1BnY~Z>5ZQ;jXU4vS2)%#~7=Xa+oro3oh
zgvZNnZh2!K)IE(#51)g*SDrSi-2>i33>Zq~V^}_XLNoq-Z=4C1UB{<hTg=9t_nPlm
zFkka9hG3OMMU*HJV_iz19t3!4sxPBa<EOYQ4!b;VS~vGFBJNJY at Z|c`%}m1#Y#NxE
za#5o_Q=YhQuViD at U=cSIht5O5x=;d}n67;e=}wzu1&e)dO%%JxcY8B%M};<&z8DGP
z^%U_vtZDw#7k^}+R_?^1KwJ9p1znDird<&`=2nxXAYq&<tYQuk6z)=g at 5)y<xNfo|
z#1-T_wp|dbfQkpM_Yv!!Jf*@F=Q(|1HS!8`KmM4zPBq5L8 at g-<mT*mM^OXYHrUg!x
z1A+z7-_#|?f!9%cLl)U%@vZJ0xc#S&Mz`oDF*WYq&R=s|+`#QIoQo-9$lUADTC-;p
z%b`tQD?MCnuKI1&^9uIy<GaY7Sn;{agex1ttU!T?=EXf70}Bt{;U+p%P6#@7<6!du
ztGGsEn+Lfw$JcS8 at +T^9wi at N%!{$a@#=|TVt0dtddppq=ix_J1tr-c^W&o4FbJ(3g
zoJ5adW}5BHI&sw0A)_zvu{20E`dIi;#;T3%p~54~ks*P?Nee&FKNwc9^lDMncakW{
zv`eK6{?b$+tE7V^Ne$j2=OxQZRLO3V6L9*7B!eiE31Nh+yf2Gg5xcwzpEu*~N%(io
z=5#$+cIv-zux)Aq^^2CFt=|WZ*_*bhT at esk&DoFE9h0A~&;r_26AvF<hG~C%&$m^T
zHz+*jD}7^H=BTZ at EHXZNZopT7@7g0#eGX*M#Lo$1M+4e0tRAHH7#|)2s9fV(_w->b
zdYGZtZZ(F`4{H=>@>$^(gk&>$^ilnVHZagCPmiE;jbXL at uq_S=Kis~$rP2*cpfK-Q
z`3x$It9t#dmW^?FB=VC25iPF==*$pE$;CO#;bBG`PeG(Y`{I`J{;xi8?le%rq;5=y
zumBlp>8w6^4i5%rBQlI-p^dhh^35KlA*A at B5eqvodJ1Cv$g2{L-A#B_{q;q~gXz(U
z0_h0H&e5Bi2efftRA@{oA$XcSM&D$8?@Y{|rk3_0rkOHn9qi<o`8%<R)^3gNZK`RV
zAkCE2JCSZytZz;5>+7|$j3=yeixISpJTP;D43**UE&LG~=n`>ti$b|AClJb4#mB3)
zHs;%U>c14%n(+W;d7qI&U!0C|>mJR#A*a%(W~}dU*>AYT|5667zYFI}8)2b9Ike!R
zH{IbHg?5KSnR?1R&}Vukx`kSK*%(+H`I{A$Lpw{@1ry9neJ5jg28!9ejTW+9E|}&Z
z4xycwkn8yaRw5d*8TG9_Av&Z$eL<+gdX6Wcl2EEB|4U%zC>31>+y-I{J3CEAshl>{
zxdDMvMa2-(jx89JEQAV%QTWTVrIEi!bX`%YujSr!Kbn?$^shtmw+6v*OyPZm3sI5-
z8)hQN)?WxG6sJ8RJKz)@4m5x~XfZwqY!JIvu0Y&`8IK?)In~8;11eNOFPdMa{aHMX
zQLH9T1!R_qIZ1;nt0eVrC=*)o<G6Iv<8i9t8xAf~4Hb7n+Hsj{KCe3Mt9XpF$MMXZ
z_YeSygiJdsJTvSMlK3faRQrm#RMLW(*^pP*FOX!o^u{-zp&!^+|Eq)P-=Cr|e`z#7
zHb)$sXD3b#Qu4C~$o4Y6TD+|OKPGo-c=dh57^aBUOsS^GACtRKmtRO15&Y!BWY?AA
z%sQ%FCEZ$!;UaUln|)9UM85vx6ZZ!RGs-_+v(@{A@#cuUmZi~;Zr(O6oR3IV02K6z
z(Oud@(BlQr2-O*qlCSxf at OI_5U$ntU)hpfrg>w=AYs-mZPu4slH<NOQ`DSWkuAMrY
zC{yniI0MEF4hgio=EtI4km0ZlvIdEQB=#6piUIWDPpmP#wot29g2Rv&Qc!9`)jgcB
z%ZMD#q{_DD#dAX!EqG(@M!YcoB4$~G-}2xEUuyv97I%J`ZEnx%@5#CtfU$!3tiQuM
z#ssz}*HBhlEX}2@`5)YXh+aXF+SpgQ{Xx*oPEvRLU7sYsy`1ZU%Vr5t2p|2s(a^KB
zeMmRgUSCS;o;tXNVqiG|!pKn0N)jAz3{-1l9txxe$)ISb?j*l3^bYPfU`X!GpE9*_
z&16)6G=lAU#N7^oi8k>HgOHOfvETtx>c55k6c^ntZoh;BU^Wlq;PU4?A(w#A at 7!@c
zzDE at AYj!7b<jqL2bLEKb`cXv9=8;zf`3nb9bE<d$AKJ_LRl48oBd+nQX;c;v2O7mi
zfYHRh7D0AwdiWZn(>r<S5B&G!I&+7rcQ6#5i7p+`o9$p1Kgkeb23886+y_ZsdY@;s
zAl{1=(7(7MRAI6!tzDw2q#{Q@$}){V8`4Gze=<G{l5fM6xF3F|#y29bJqZK0Wn0YS
z9$P3rC|76b3HmFQH-`58)6bZ;#tA4eb>-IG%0<iuJ1-cMm09=YgBR8hS{eh>@ey8w
z9wWFe9uQa<lLs6v09QQvM1QD)cqyxiBuPqH?nHav<Lh7!Df2PDV*}hv|JQx_?j-t`
zjmPr@<q2)&Oh7JwnDKOu at MbEek9)YWF<ZJ%&&8Y5gzdczG0n1cxh|%h8M%eo{zW79
zBMt8aIg=dc=molRH?PUED~=yAvrjCvxLAA)w*N+L`Mr$yM`~9H&q4mB>@9A`#mA)W
zW6c7~g#MP(Z9dGK4H8H}KM2>w!wym$>rTSN7_h`~=E;#!X at dh)kq2tBp}d1WhwXT~
z&=w<Fw=A_DjsVxhyT+FC-e4(0y<%-!Cyc;SdV^{q0v{c`vso>7wzysbKgiGr3C$aQ
z86)`u&fkiD&LzU~0%0|vl+%cq5<G$rhe8nbXuq+iPM7Q+$YOKinTXs7Hw)IaH}XA_
zY4&(j80uz10AJk*4U-!AwwU{pQNe2a&q at egYpcpkS03UTfY~q{O%fv}^CKh1?&!c`
zHC~pI_QksHBl>2eSvEtI)FUI&_61!vT9=-Jhce~3X_X-!2vKFO`}e1|CsamQ3+*7#
zafp4&<usTsgT0@}LU$WL4obqx_qTP`7mG>Te%m63J0jKhBpVyKfOyT1(@1#H+Gshl
z8A4J0X5Rc7De#mlq*wz;aC7sKRzoNZtD}2rQqJgb-q=g+-tepj(7sAtdG&w*4kjM{
z?N7)47A5MS9eu#IjwfRc at TMgPcP5-R8wk>xEHsD9s6P-_pg>}*A@&ae(YQWA2@~^Y
zNCo3|=y!yp4%r5obOlVeJ9;@H^{J8Kt^IK0`eBD4Shhy%%fXyd*`(GskE3~utGq(7
zg&(tsOLr)%42QdOLxy6JkcStwXItn60Al1Fy<>j`6{D^!cH3T9P7U$(FT at +>-WQ8v
z4+OK4qe;M{+5ym(E=+BmWf4Qk<VPK7hwti8MTr3hMV!)sR?)?4s6KImc6gHK_|XM#
z0*4MlLo!I?BJnN;l-CTOpQho-?J33c6MeNxFfQxw4vydg;V|6-RUC^=KKzLSl9nNc
z;PnpcXO$14%xNQ-0_T}dzxoVv%sSh;fz!@I7|**^h>xL|S~(~#J;@n#nzJ_RrRWc^
z9qCi|++2(X87`}p?0P)bc69|ph=^jBc$_6tM#Bf2Z_2!c6$_x*9SAtNTDc+ae%Ktz
zpq`P}V;_QJ*!q56o)5LMtqBu8skPz1P*SUxCheVo(nwsNdV;b)jDE$RpQ7c at L0%oo
z(P7#^W81+3xUZ5#?qs4~Yze_gEt3YC2NosUnOOsCQ1{g;C!FHr(x)BlF$<%HbGUiI
z5IqRzH`~`Ht{_?}5jPnh<H4+dH*4maR`y`<Eak1fi4c3{SxShI(7j`F8qTcmynCdK
z$(|T<)?-t2Z9d9jo?JKtV;V{+;T*$UZyoVy at _$Yy^BFuP9=o5lB1<+r3Gv|<@Pu~3
zDf+n<^ou1HXM-c1y>%#W5Ino8JB>Y6&;@6~?2=015PmR&SP&bVU&!9&Ipqr>R-Hx=
z4S6%4r322H;e at GNX<_*sgUNwvF#Vy56y($F#d8A`f}6u*FcNWR;hGoy`<NkY0(_~0
zxtD+CF(IutKr8)L%l8Vt#~!-FQXVzUESpm$A(FD9O%D|T?SsI#%)9AYO?~>@IAZ2a
z@<;()F?B(tK#Uq>`<gKXn00vRpG at j`h}iUX9al~BDo*HbY&UiqmZSIa%P(}C{quNx
zxDa`UgHD%1lk82<!$Sj}ZRK<}yYSGcZjgwy&L{vEI(Td$iaQlzS0*On*kQwjq>qJN
z;!*%=8tcreGmuCmvt)^Y3L9wI$8w&5o0Fi+iEAa at X|CiS9Z0c|2vFmq6&gF7jNo++
zeWgv#pss$Z(A9$2q_;PPYNmqfLQBWARGxoyGm*}pV?3YR$Xx6R2THG2ZhiHhX0RSu
z$W?U>i5Bl1GuuypQZ|fAn}|VuH9VLMPq2u;83`h=f$;BrRnK_={}NhXgusw3G0GWy
zAOF$Xk|5xwSJv5`^)s8mR1t(Ur8ePTk!@(BeE<94u+|F=evUqP>X`ASNnfs$M3t2s
zUN>)Rud=GB$@Z6S>u1$Kd^4bC;z at 0zss2OWztL1_*d3+dC!je*)=K~0(x+fdl}n+M
ztjNpIHE`dzMfLbD7#9aJXZVSf8UZ5j>6XScz&!|M(V+C!Ft7c7ds668XGCJ^d9*Vy
z- at c(Tg2aWzpkx4I6m^N6L<2j^Y{Z2pMK$J!p(5>G?z|KNARLzi{dQTmhXiLB2{Zz3
zbo0CzJZOTxi6R#w0Xl?-(WH*y>-OwGZtrH^p3M7H!5{hO<Kw_`IqhX_3~yi at vuMQ@
zU;kdEeVjx5(d^F-*ZM0TA(pbFs()~gu`50Ko`Qw*fFfnzTNsn?FZPl%B4V$d1P}3%
zhN5U;1 at W?o1U;woKQM}9`%HE}v7HHMqfUP(@2X*p)=rd|`z~JY>o2pb at 7Bu<0`mcg
zfmGcYmAQ~n2~8)ajp7UI7&|@Vd#qDSzMl`_7J4fCXTlP+_9#^#Z5d_|6-X)BStMBz
z(GH%5)HIvA_cAyA4)(lNh*1XWW|6*4h?KH`q6nyRGx<s?tl|oyiL^sl^sjXT&s1uU
z)IQm~*Zqh=rvf0fOEFSaPXi1CK~&<?_&+k^S+qGJ$u{B67Q~39SPr8bNhF&lVIV}4
zPtw=N5WNEV=KX2lVnex}uwz at W{R2o@*0AZJsGIn#^YeAq9;VmoXP8j-DnELk#mI=1
z8c{)d#i4p at 9=?vSyL*Q4iYK at JPj_%E>5y&WOV3<Js;`5CtoCkht{z9;?WTxR2}n-S
zWD at 3?+Uk|9Zy(oTi54RlQ at o3EJ3eMX_uK9e=DiYg6zf6DZCOn+%^0|+Abu8fPOKT*
zCU=1<znDpk_svc0 at YhyK_H!F{rB&wZa%e>$-maV%vDPLQ8aDfY3JyJAPlbB%37BpZ
zq at 56FbV{ug$jX7>q`trp8`SM_UF7<L-WOD2j|;blegFRIfe1-Oc_bU|u{KjM;w<3}
zx at 8xd%@uB(U@}`y0heWs9Of*&*SH-U1s47ug*W7s_HbDg#?oD<>7knGC&fS{fwGdv
z?9d~*X}O#`;U5y1$Cug)sMRPh$`_nH>u2ojvlHL^<J3Q(PZq^;^ta4 at o^dzM|JlDq
zS>jM$%2?^@4eup@%9C2&s3(%Ul+*Hgr5~b}@9Ae9Plr&>5P2BqN-EgD__CkQ>14a@
zEOru_Tbq=kHJk<(aHoMLT@;YKK$w&l%?bQ=Cqsz9QWWIFD#Gtl3kg#TL&3S+%G%}A
zuVy_u9!3PZC)!@n#XtuT{}-D^E7=5?*DpJm?dVrYPhJlXu0+E+?zx%%FC=Rv4WIKi
z5Zd?jy7q1HlkK4dIff$j@*_ytf1pqBMv~R{EXId72h!VXN8<7Hap&uEOWt?|8S#dd
zm(!gymD`l4LT7HeAC2*jP=lV(9@(oRTN at iq2|k4Qk{*5UUCKoH|GV9?>+q)l)$q-x
zx;@Cjd+fQHONhin>NMHa;00Ric;jpu4~;^nQh#cjSK}EAAz;mLP&m2P?eE}>bG1YZ
z8qMKXZsD8K#}mLGjgjIT7&o^I-fsas7ME?c>-mEJWNZ_<LmVeL!M;CeK*A$`UVL~K
z;-z}Bf7YYFEq`V0p$;K4N=zPFRWQh&2c0?S#tbcce0GX+c|qS;lu>43zTgF1i&#hB
zYar5v47H{cc1cJ7#f-p+cb;xL`9qy0-L6HejNcrDiH0VQV^hC5%{O6<>DICjfr{ju
z7JknB*&m@&GIIAywD%t+7X at zsriXu6q!i{X6?y;a>|O;vdY;-Ick95h2#Aa7hz~jQ
zZ9ow_<Rys5Z(LWdZMllssj8LCgmbII;Aa)p4Vdilo3A_9`TcH0U1CoWXDP<8s$J<R
zQ`Et=cMXq!bp^I+0TiYT&2d3-><3F?%mJk&$x597w_cpt!Xo?#7i9VLv`}YY>KG<#
zPLMtznh*Y3A<Ttj0-_>uu}-E?9->qd-a*A|q2la7$()CGB*1}t4aaY%KoFWF00j9q
zsF*Hm5Hp+JEnNk!MzXGv2DI{Wlj%`_+HXN=*czc<Pjg}8N{&^}CVn!%(=vS5I2<6$
zy-XV3)|lN8dHPe4Pas4fW64$fG{ip5kMnx4OAtDG|Nhv799xrt`R4jZmOR1NAyF?_
zlwo%6TG$p3MV at 9N_7%uF00#SJ{9*mU;dG%1jdeBc2m0(>wqjNwFrD=JMoOp|{JDD6
zs01R-s08_&ILc}Na;<b8mGo(Y_sC+I4K at yl%n(pmVKE*9${}H-SpxIc0PZ{9!$(gq
zulV66{fa60_Ba$t$hy)h%q|FnwizQ0Cvj at 7_kP$cQQV8L+JH9qeeVCIb(M(^qm2{U
zMA#S62_&Y+TG=46O2Qcs6CcnNfXLW<Nz0b;j(<t!9{OHE%)-PeqoglOi1=PZLyG&n
z>Rm-gN<FcJ+mvho<qRknzWd&#w&Vo3;9u+d9+7^QVE|p`ehigelFbm=P)uXKL`+&?
z6)>HOPvI=?{1Y;|BTrInHWDaEYjx_Ew3E9AJC>&te774%N!t!JrB8n>y>tHiT#7oy
zj43>%LE695r%@ERg|d5%-Y8oD%68<J<1KBQc9_}}nhZOao{Br?Yn$PzFgJNFBQHvb
z7C<B9EW2aqjOQ_t(8cb{!Y1>N=H>V#p=(gxbX*>Fknx>s`=x|;Jfd2nQ;4^P2KY56
zWAm%XH(OzPH{C0Z1hBOV<GpQ98<;usiw>aeX)Ea5U)Dg<MKD^yP2>q>%w~X)x|Po4
zpoQlJywvK)>;gh^(~;*t>M;jIq{lg|)^9RcfG=C1$U)sFSNl)mpX{8YCWE2c<Te~-
z!wiE%5Ruzv at I?m$p!Z}Voz1ns2O?uyi3Fag1T9Gi2b9-JSE^K(|JNQ`3?IvXhZQqn
z|LLa5J8!vndK4&FAT<(G2~%ht2?xO0p<4J*B}J8cdu{P`KRe;w@>?qetAv<N^KniD
z6ww`c0w#F6*GHC$_Jx~}cYbJQSdCu8l$B9H;D1zX&x-#7AfBN-mCDz0xzfT=Xw~il
zKd at O}hfrGxsT5vDMpIkS{5=xY^qBPESOwDGm+mKK&;r7e3Qa at XyS}ZieW?cB%=h}<
zdAx)Wdas3N%iltg%@VVyj=>_(eRyudUE^lkQ5N&gSPHlN#bPnxed8Em!iVjjh<9lM
z!6+sr?go`kgT9!wqDwU6>7m()*`MXcY|ymcDs{)P4S9V;7os!?eU#?)TJbVNSGv*m
zCEI4MAHf$nVKjveq02StyD%`Ib43fju4 at M6jp@ZeiRbNg*XH0u^Xb<7rY3#0d3Yd2
zN1)Xj{O)Sl{Ws#&?_&^H)7=Bf_QNq462$iN)ZyA}u!Ed=EduHAf{tCe+N&mSEOv*5
zaPrxCly`u_P8H?w!GdUfzaS;)3+Sj9MIYpUot)*xWmUaxLl2uh;T$n1sMXOd{aixA
zXoxKM6dgu;amd4%!RR8tb&|4fTSO`tm4r$MRe9_Xq}jk54>W9t;X0iMnt=k$UGyDG
zC?>`-fK%T%f$;>5sxE{?aO#^z|8P7usg|Be;R at mWYOy|IQ{@9&ZHc<lgOT{QInSh0
zxlaq{FfBCWQ}DcB*$~)i&vFcx-$sxjFfqk~wy?~?ia4UBP@=r-=Drj9ZEGM1bSlmj
zLz1Zlj?J;ePiq=J=x;!}Zd{3b`ipa90_`g*I7%TQ77mTf-Nw&V+jaEx;L6<aWhF+0
zJAa6J6=jxT4mP!}vlUs*g7>dz0amo!RYi2THzFy#c&1Fo-Flr=AvZgJ6&5QKwRz=_
zk|gQ*Xy0m`RQK#0a5!X<i>=l)GQJZ50$o$m&r62=C=cn->OMu8606ys{^Jx(I7o~q
z8MUAv!4bTLi}7pu at VKIs8NO3^ZPY{Z at Gi(oMKVgjli5gZEoH1BlM0`TtB>DX2E?Xe
ztD0|#8?*-Tgl?d8m-r3YJTndIcb24_4`k%yKyY$248{hg+TNsH57kXf0`~jZQ}M2j
zp44|_7tLsliW$22v{W=~5Pu^p;|~qJNh%}4?c!X!vS0dmwL)$71pn1iRBeyCiR+p@
zXKO_ZgU5yBONgtTUT}hZa91!(syuK*ZS>BE_Eu{a_O1vLlR-;Q{X)jEIM)a=34PKM
zU~M@=(CPO9p at n~{ehs!Tu&mJk2af(}hb186R4C!=;h+zzbUvOI=9EVcQk%Kp61ib3
z1sT<@)0ib1CSyRDX;*p{-p|9|j5(4>0b!%ivOS!0%6Gq+^NJfu>t&!vgJ=SH&0G1w
z!=d}_%kly;KWCJ_(nnt}K2LrfsVns!w%~*ndw>w60bW$HDsL|E5`mg({5KcObO8g>
zwN at wTCknJ<=xP*tKTS(2*%fO*xv&`aURDV-7l{4~h58v7BE9zbB%39=;ZvRo;)=j%
zR^fQl+L?zhtIl2VY(?_fUdI-g%Jt<>N%^T9%a+MyPGn@)#9(CKOWWpS%jUD<<wC4+
zSu{JRo0eBvWGgOZ*heDFG|$Lir%E{NtUv(qipH%L(ql8Rs4vp#DDR;|epM%ug`1En
zBm`P)mNGL at 7@Tfb?lo7wv=*EgoTwqu>v)J-o4J`P^GYRJ()rrP$FEUwSVaCqXmt4L
z+>F=JM4|w$*We9(NPf?hb=(E?Cb(>xht at +kuCzJQ<rf>Vnd#m0h9w{e&5+RlQvaSg
zU5^Z!zYco!u}5tz+HyGCMg+5eD9u%Fw-wIzPQ4^J?MciS)`qA9DAX&%phg>3-+_RG
z8xHa?%NoN!N;w#pOra3wOxO~Myj at C8S|OO|`vRqaGP4~LkG3CR$A at ati%vQ|`p)T+
zQ|v_uE4+dY1{r5$q;Q@|$c)A}`l|mn>c at XV_2{!Rcq9^okkdSa5%rL2Rf}CIE140U
zxFQhLb(kKxH4pIK3NqccS{#Z+t5(>a4dhPC7GVS&-JCkC)bI^m6a<Uswqk;n8ho#E
zXLF6$zVuueypj!BTcu;Ad1N6Qx*oHD&Wr>`^<I|vH=#IkKE&?pwlR6nA9%?y&T~pg
z)jE}!ZJXr;%?cSPawGPuj%2!A at u&>!h+)v=DCb7*P?5(;0eLi3U4c9ScruPN5BL#<
zWx0fhy#?pjxL%WCUa+DyoPgN&WYo!~OOKH4jA4^C-r?JL+YbH6H;?nDW5DqAP+kWB
z0F=*TtOXU(ux?5y{|XSsF{I2Z=qFaFs$#7>2i2w?_{BIjE?vbIFyHhpILyfuCo-`*
z*L2N-*Wy&N(SuWKxZ&48h?Qgsot#z4TD<#nf?Z%(LyhbV+tbir+z)AeZ?l1g#PrJd
zbZL>(!B)FR7I>>aDN_PgY1g{Nw~z`yQ<EfJdX7_}i)yvG+G}wSw<gvRO*8JCi8S!b
zCG~LEv<tL*-9#aLT<brgAF1CKLig$Tyf!V;yB2{D`_+%s^&db;(Q6 at cmPG1#!eGKy
zR;_94Z2}o1IMc5~a`uvp+vSTWjI;&TkK=m^^LN?9_fMvnLB=}nI=OsVVd535cIYS8
zpqx{(+0_NEGw;c3EG6xdh3lvG^OmG at o^IyC4mf@!;bB9l at LfS3E!w*Aa_3w`Nz>au
zxFDa0Hi at v<z*|C814C+$+jt<&9rtHQpER5DnWmNdqBFqFo at K2nI-`<B>Je?^d)R`U
zR^-hNkYygDB1%@DwWRL9G^!=)Z3jEMD%L71h|CCyu7F>SJ&n9AF^<(JvyZijR|Ei9
z+<jE!xwUCAL)XvdBRIvuXwtXxurHZ8Jdd=9*B_=KlqhecOL>~9yiVRl0?@`>nj>Av
zJWG0sT9dlonak+w`Mm!#=+t=~6tN1%JUf{dMKJTSs~^t?s1?^nAOl2cgh~x!9~}GW
zJGaCu+7CM0M@*-_{IkU3{EIAHPEX_^2E}u`00nP4FMrc?1ADMS%|v5rXgcp>u1=8#
zJw1-fqXEKebxxkIkmQT_%op*xla$#$Il-)<HZw)5##&|}%wp=o^3g`GlCy#xo$$AQ
zBb{3#bDd}7QAS#Dq}t>~t?-zD{NEkb-<eE-FMu9tR~Z{e!9hA%>k;=woNx1|$qycD
z8IX6 at v=J;0{H@`X(kks|a$zbOBCbV6_;E8D&fc>lx9t%80UQFIuGTXPnIep at H+cO?
z^QNeb^MAW}s3fkU6;$rNhp-U$=m&zHa9(qBvLDd!!GQ^1jEkX{h#Tjlt0Hz#qP?(X
zvhMeXgpH=m$RZs)9@>49EF{kvZtS`+ at O=GK2z{~jTG@<6Ptm0kyij$uEV9(M;D=U_
z_I}M|Ff%j%%}zkyVtw}MB1=f`6cG%01ZF^6x4r{VzvRn-<1atK!+AXDS$}m_WtU2q
zup_=|K`3MQ5CM4uEQ>ESc_ti)q)ASUu~Wz(O%;Lh?ld(od7+7GC~S`lG*a&Sdp`W5
zNL=`B$e5iNa6>of21CeF#~U$d!L<<Z@{1i{a&$n#zQVv?$b*YMB$lOtXobWYWC_q+
zFX7`jAu2)b!F6WZMV>MPBNIdTHJU_c_Fq|byMTwMmL)@pBy2ts-BKT4(R_s=-O$s_
z6gM7-DJ(J!C7KfbcC?~ZJocXhO?W9=JAku6ZfF+?I0^&pN^9EC_SXQLPh(Zv(pO+I
zE~B|j-*>Bg<C@{=;KiDjaO?ILA4xMq?k*!XqX$L`Sc>Ezg^>}ogZ;Xuk^F{0Fifd}
z!J=|Z@;xH4Y5OMNcnG<@*y%ADy at KIzD^r-;D9RPkAzVrX&>Ak~I(eRSdz&9t%T`o(
zRPUK*G%hNRD$pXPXzR_t$!HZZSUF-{{AwcWSR~;q33sxaUNQ+vh+i#ADjZ&hCCR6M
zqgzOoVtOw_EU^@;JR~o25x7rP%uX`baMKC3T?q#_bW#3JaNlwI+wojzr^sseUchV4
zv}y~<bP>Lm!V07x4tdAkVCALQ-Pd2EIP5)uPipEj77VaIbbz+EjQ-dhTD-l42KjkG
zKe>Pk*LpQ>oKC$*&^L3i(xZ_&pL*p#Ie4WIq2RmrhaHrX|AA(KSDhe49`q{tqgLdn
zZ-Mek{An(P5v(xL#t?oOu0McZrZpGC7$lUd=Hq5)AuDhs_0woU=Prp;dIyH-c)k}c
zK!b3!@Q0jRK9EY$>Md`MRy535$55TT7qk2m`@iSh44!*tTa at Kt0}zR?D>OT)G02n#
zdV2zBOqVd7&v at we;0}Jg4Tum;asiMjxsWmI4tw15!?CCK0 at IVDKyUan7l?Yb#IfoY
zsuFhV9UE_FfEdIOqCJn#y{*3$^0Xr-Nijvfy{ni at 6pQSNE4jA9Q-Ce2!=+22i7-uV
zL6lddN}X#Q=Y{-IaLMiCPvo;yNM%PGx=+Csyg{h;*57ZHkM?YuZ8rIlGAL384}a})
zlg7g!V%V5u0C0<DyDth!lt=Qac`-~Xag>nX6eS%jwG(fu{^4EWr(SXt{Z=wLr9ZP^
zK09b=lnE2&{o^onVhmnQre$|UW8KfWrhQq`1)mepm{;bsQPP94Blo7 at g*DKo72D3U
zpCXcrA)e)lG5ZlBtw?HXVl*xjEA{9ZBT;kgFwPF_V=dmd57wTQ%b_qJS1}zITyl8|
zCj#y|0*RNcac|Jt7!V#N=$8(;2gg~Q4irT)x8u!dsjd7J_i|)|)WCDFwpRTt(W(H(
z$~<stK*14nh&HW5ve{oy0wwv-SHMTat(NiuEn;7WzdXg$)U^6#CM at _KFJRVr6zM4>
z)PqccLOd}Sd*x{%*G?j&LAwnpGWK6qjY-fz<$m3bI~w8u at lxMm<-|dvTKrB>^`t|f
zN%T*IZ14ZoVbcIcvyNII(f6Q&?fyV1O22fmAb|M;k&As!qmNtmV3Zq&Q`-azyq0fg
zt)N+Wj?s3q`AE%o_DllgtLuJ=wTeeK1x;(4<kaDgFdHPU$v*j?BygkwfF=WW-r(It
z)paoSyHfzr^f#J>NH?7Wm*^s>J_69v8x%^$aw=e<vg*yMSS-0fiM!A>1WDoVZ!oC+
zhxBROD9^(#6h5QL>m}nzv3k$Q@|z)OCn+i)c28G>2=1NXd?Yf=i at L_#JVm|UPXxJV
zbM7D{K!Zz)%|eI<T0NOeApC5N!@>>1NT?GJZCVY;>!5c7t-~_A-?@B3K<vOJ4KKvX
zUb>>NE^J+)uf1TJ+qX`c!P1GE(hL(NX?8=?yul{2#sv&ewRQ<V=INoh*Lx-`Pm=V?
zVWw8H^tGYqS0-bZeWr|_ea&3SZDA$s4CzZ8{QOl3CPf9V3j2hazPg#IBp>*Q&*p0!
z>6NJ~(_W>kuO~FC+fkQ%)L0w>TGnyfoJ+FYGJVpsV?X?8CB;FP{4i{`aID(oJOWO}
z;gIjgb-`mCzZXK!GO&wsS=LWu#N+e4ohr8hndGQqLXPFmg};1v{Nht}>*W<!pZeLn
z%I{n5d>{{8ThTA)2*Y{on`_g!c2%pVi`FAqT6yDZrIprmfo2OxqKV6{_jhAg4z+`9
zZS)Q<rW0~vCMGxnAoXb&fdaE_9JUEnOM*?K at 1g{OAKh_UAjg5CXiWJc{qPi!C`RFP
z8)ak+QX#vAGwN>T5=;~nDZR=&X|~ZJW9}CDhi=@MwpE3*q`mNtozekvtfAO-k28NZ
zyWx(2FCoNcPsw7mis-;tLRo%vMk99Ok@~<A_F at vyM=ArK>LvY6xK}CRd^D4je_&-z
zk|S^ZXuiB0mog`SXXXG2PSd9Q2#A2nTrD}2%mWd~3Gnv=YhGTr62Ir)1YF5kWtB;F
zk1c?QF-|bl1}K9<*;^Rn#OOOH&pr36bvSW?LfV at 2I{bhxKS at h8<(|s6hA1I*Ru7Cj
zmNxB9M#-eejUDqP31LVNH(BW38TA-PCuunmUh}Y?5Ijf$X+yM*NeBpFrRcf9(!|q}
zlC5(CRC~4kcvu7wtJIc7Nkgki*kb5*swsDFTHoAR1vfOz77nD1NkOnXwTTyp9%MEn
zM{4mR=qg>m#wM4`FW3#a+nWQ}HSg+>>3m!{tEd{D|FPcL at 2kk&NzZJLc}Oe at 6%Ixw
z6RV^5G6oy_qim659}Ml?uOSJp#0wXu$~=<0>9_C?UQRY{ftO5jW6tmF=SOS0saOg6
z2_ONR((8W68pI1=6Cd`mZcU0CdE6pJvPktEyic}mTo`UBo*pHBs9G#+DeF}d;D~|>
z7IVZSfZkH0p>Ms-XuE>&+gAc>YdUm#E-LJc<s-+)WNs0el|ZR>l>_R*YO9^FAjg0P
zQvJ8&+j&OB6dyiqv~^eD4U2l?YcyZCogANbNWsrGOO^z_#2`jyEZ9;mg_iY2>ED at 9
z at Jw2oVUt-E<l at 5sW+_(eJBtEAQQC|x4 at p+&rs at foEMrdeQt*P4F=(NFtRgciOHbG4
zaq_RFo5(dUEZt6<2)oA4lzS$bJhJ?ik6hSn*kn;lBdw=<eoA_xZfSat2(e+vSZa==
z@&>J at qkN^A9k=@_q#qcm%|kh>Xb+-dFVTqk{nHSN3-H<p8ma%=Bz(H2zg0X}O2;wL
zIsTLO<Y{Xc$X`Il+bv|JrN0v2#^kq}xbfo3SXnwW!O(c7DmF*%H&HrLpx87x>~HB<
zZVkgjO2`<c5zc_BMpi{0?<X?{P}^jt$xd%0M7%7jn18Vb4BW$A(SI7UxWXMQ+S;W!
z7u0r`N5DRU8!ZI!j&K3l917rG<TNcYTT4HTXS~EWQ at C*?dXjj8+o0Q-Y3gFSs`p^%
z!ro%2JE_!ED{_6U8t4W50ojKaK#pXo{oo4F${>{pG0H!;i16_egw~2t)P&TQ<|b5O
z+F=^G1$R{QNP4$8x=&(t#7*t%J~S!f^2o-V>gmmF_EaR)S=HGRC7GQnJFZ$0O&I}|
z!=W9Yq84I|4Yg0vU#MY34udg1CYk`ivB*J?YI8C15x87U>neFoyIjPw3Jd?Q`jl4g
zhnwWmu1&AYj(R<&#T*SkH(kz4lto at o;^}mZnXXBlf$q3#b!L^w*Fg*Gmftu2a>Yfx
zg)GyedY at 61zwD|Dam{I>yc$h4K2uCnaax<O&rbf2UzrK|XC%B=P{phK#MMpOSVh;^
zc;gn$dhfJNTp)1MKB#dWth>GWH~bAd%amfH8T-|`d&-)jiT$$#!r~LVbE$HQ^to)*
zW4kcrdY>9x5NuEvmzeT4-=Jx(-$B?#=%4!0<)90z*7FI8fV$VcS2TYSO6`w;T#ub<
z!$-j65p;q^5TSH?@p_a>l)-zYRz at EvhxKU9QfJp!c;m7uv<SVtI%~J1y!;9ly*8_`
zz!p-oHak`@uYooyg{AZy$QpI2GgQ9zF4HCCp-!+Zv5D4&%5LCY_{tW9Sr{<*JV=xS
zWw^8#bER at 6<}^ms|E~UPgk0C>_w|nIptP%+T5mwt)$gD1A7Zzu02Hd}8BwL03lU8j
zfmoEj-0a`X!>l?XtUNH(Y_?{%=VNi+-IaD$I8TceG at IZ2qwt9FuCYawpo1SS!6Nzw
z7!SVi3crPrtyi?dpU7z5LiM9}kaA+Jin2qF2`!SCdK>taVtS-*(<B%z0micAc#h7f
zaT7bS`70y9(K6)r%ovdk&7lg3*-Q(N6PjEx9wa|7U+j+qZhWWTd30Lf|7?2>Qa)pr
zoqGN=qD=tS+47h;qJ<V+K5VYoKatd<(b at f-sRDNPB=(HIz>91&az1$8a88roPM`2y
zcAe^K5{_$4v(>D=xyE|3Zh~={Es8k%{49|kzSqyfBh<-PX8cXN3v*KM at nBRW{rYCE
zG3%#RkRJT%&G449M3-U;1c0x!!;`MDjXrSgZE!WDI5|^!xnpaVKlC?ffGw8ef946~
zG_{7ku6BSOa)LXB1zyM^`%hClf!)9b0cO;0Ai1{wz$9#y;_L=GYE}r>{JddlBebTN
z+{g4$TWDU&9P?JB608pkIn;syY|9oBE2g;MTXF#Zh>U2lsFEO(9e%`>r`d%x`=lmq
zNbi`Mk`*p{XAR=EG%GG}+tk+>PAF<Jrb0BbDVJ<Vb9#o)rhf4x11^rl%Fqoq>+2>+
zim^UVF1!g{|0aCvidjE`L|jUeGXs7(@-8mDp7_qNE-EI<E$Nm!i2uv(_uIq>xrB}m
zg6-3Qz~a;0n{@mvqf3v{G^oO=OQK|E)+sJp$@1wX|J6!CDYJ6yldDWvYO$EIif|}V
zo_^4rehX9dIt|#M3I5QhdCd;eCxr=88fbD#{L-UZy=)c=81j2X){KgvO&03_fPWnI
zKwDwBZcQff*SmF?l|M>v(!$nOKv_`B=Vr`#_oJHVc{ssk;|bi^$mxA4HhQzy!sKY0
zty!D_wm?QxLNZAGgwvx*pK$wH%x}8vX-6%7&>3gVRVFJ^6XF1tZMT=ow=~RP2-EBG
zLXRsf%q6i)nH!ulPoNt4<B}oI!eeD{g-*>5fw2PFkUx1$8qSV2ouLZ~Bgp`pJ1_fb
zE;+9Wrq0LBi88PHRxu&5tfg5A`&lOPam_9nq}o}-iL=0zpsEGe at rB26k(bMpbPLT@
zCc&j8-4g9E=ndi|CY$C6)^EU5 at 5G5&x$4V0o!Z2=GLP@&5LlM<R)a{nq~9i)Zoasj
zAJ`y!4_rh9?(-f(<_XkFr&>19<&|NOkiWT&lHn`-uWsyn8Rqf*`*pHx*dQO+JBfBA
zZg*fRZL?uh>KwxXlH_L+9Npr*Ca{SMK>xsWcgevA|B=2zfP|NK<)H9tMDPWUm&h^t
zfz4 at _AzwC>jn1vFcFy!Lj4z2iXK0_w^sI7UkV3vfgk3riG+;rPq%nN^r4{-?;+eiu
z->hVrTJd<^ojmLSaC?Ff9+i)>d<JuQ+dxVrzL#d?AwmCKj7g2uL66!A)-hKECX+Ck
z1TQ?uJMVwPjDN}DIv4fiJ8y2xax)c2c}w&BngoFv*xOttT5<^&OiPZO!ELOSS_3F9
z<5oB(i1b|c#xrH0YSwTrUM4rL1?#m`5PRd!k)T>qMO0KJG3X{hj`l}x$2g7bA;&}J
z8OEC%@sv7gYJkgs*`th%fJD3%`sD|**_zOM!-fL(;{?Cv3fFFLy2ZUyjQU*w?J6L#
zB_gB_$mcOdWXBwl+W84gCC=cE#+LVsN>1kV98dZ*fH_2MqRkBif4{AwTLAXcem|d+
zpVd|`k6?AkfF11bl?H9hCOSwn;6rxaiDPbOD4l%fMno(g>>G)1eulgxj$Pt9v7l)V
zCI=bwYLX%r%%BrSATR%7;Y;!V7H(+ixOw9R?AVF79n0v at j(YDe!s#}90GX!ptu-2y
z`Xx~S|2wU`2YT9*05U(NF!^dIj+2->m3cPusO#e;2f-beMW<qWvh$C)=z5i`$L*6?
z1oRQe7*ugP>G}`cJzSS{<Yt%U3;5OM4o$cVD#(j=Z{rXlD-*tu1Y6n=w<;2_P=rwR
zKlncN)p3iTVB*k(Rfg#sDy`?rf6>M^+u$<yF^EVW$DBM#?HR~1%A}&GA6xO=8oHy-
z&-no5Tbj~OTqS&;M3Hd*21)>cOCnvs7Va6<2rflGY0i^JKce}ahH>+wah at Se;|3X|
zRG=tqZ(edXv at k-xiiaYip@OQyw&>{*B|qlT5tf@?-HutgeYg)938k=cV<rV4W*53R
zlLtkp%G?+V)i4Jw6h#WrwY-_Q?=N#Emrfpmlh0BWVDcDmEEE;xD@=N#B5 at 4&i;O9r
zA}W|0F+uo&d4$PXFTlCF#wC|g6w}u4R7dCU6WerTB{TsdTNzGV1me#f+7J4R|06$`
z!ZFRUZ*ob5e~|wCUikoGVWi9W8hEO#MZh`MJjKhf7(HVf0LfTe{#^2|*_kPHH&gh+
z0T?N6t2MA-?>xC8z<>^A at m5`6Z{8?g9;`Y1nVNbq3~J^XU(B0(2zJZ-k#!soO-hv~
zi<rVpj{pgLHUMht at K^_eWU7wAgEMX5Y;NrAH18dGhywS at RB)8<U|OxE(9bL2!o9oN
zV*QdAJ<LlWBNA-Lj*0Ai;oY4Oj=gV*a|awR5`DXs!<c3oqD at Z9Y7fLCDpx|)xZJ%k
zea{@qW;@6M_da+GwAK#ryPQxg%Y6S~*r^Vh7fH9<Am)#HImz;B&LH1CHY3 at V*Uw&3
zTCE~G<2)$=BpEXOE1$>fQ}PiNDNbGnm}{5_(J|>@1SXtQu-k?sKb9Hhv!DHuD&QQq
z?ogQ?A5Z{p(XFtYHWOC>S1rN1VhApSQcobeJzXvS=0JM?#1ZprZtU~!qKIN44i>-J
zOEnuI?u6&xT=!%2tSlL9(LsuJGVxN3D+4a55jGdU^*vO0K!x*wb=b|5l|=+e;NoXG
zIa0fQzo)P<_*i;k&xlkkM8FS7*`f3I**oq*`)hPBF3adF7DKDv_B`bvN{#ufrlYe=
z7{!8wZLSw^*u9)b++kS3(~byDp3lj^R70%*HbBY0unx=o<WQx1h4pypJrpTqt;4DZ
z{_;=XErf1^2CbE(G|*;cvJWTgW at v!p*1LdWJT7b8FlweYYZ{aq&M{8t{)%cobJYl5
z(RDOE+&pB$E)j-RKl26Ptl#;Zib9?B$42~0Mw4%ux6+b#`xNHpm)y_^9}}`{5OvSD
z{?>!y#X1XH=hH5o;rF>e at mzZqMictIK9$Ml6i at 6Sa`cD)XHkwHT)}JJ;syW1h7whp
zO&SFIgstbIMk05#YdY8AvM>87WOt_N;2H28VRporhTB?-%hh&~E<}PDLP;Yk4phZV
zDe$xC0CgtAW#)Q>9-Fe5cb}cH7NzN2G2g1E=}K*?J@!@O>t$m|Uz~76ga!Y#<0=)c
z6Dogeo=ENh$BtP~(ODk+?&Zq>bFa!gvImnd4&gI`kotCK=Uu#kky|w2jU1LrE(Ty>
z2Dm%;miq(xvBspF=eJDW-2vjeA<4JI29GNbA-zJx;3$cU3`u*1hDtUQw}rOKtx(x{
zKkFf<^YpD-h{eLIT30VZ3rF02)@e^D+%*tDj~M!R&1OC^>#D=jA(MjYdSK&g9>j3T
z*-&}!!8>3F(*{K|AyX$cA~Xx7Hg1A6DB>0}84_m~IDMI#kRE=ko|oOk!>5$*M at PJM
z3sA8!tZGs9{BW1bq4=&Z6S<Ozc?8!_Ha7Jr0w`%g0^h5tjCc9iPMrfZYF(i5vUb}~
zP5s%3d(~DOg1~pCsLpGBXJiQM<Y*qHv}Y9xD4H)|ngL7Dvu4=BTt%)(X5LByz7k-8
z3z(yhICU$dHVK~kXX{FXoIbu6kGgR?@wK_S&BMW)wAVXLz4|3&ebG5ta&!#0-CJ0D
z$Y7)5A5CdQp{lyLikJuwkciVu7!Ka(zypebEk5!HBk=r5D3gzR20|6ePb-#;N&V)N
z!2xW2-b)@Bisl*gppFeGuRrC#%0t|)tmAlC%F0X~r at rpETjivYVBW4MWxK#<>nSHz
zc!3UvS=AjeeC1e at eAb=14OqgW4N!Zbel!%HQhM3Cl^70BZ>U|spAeL05B>|86Yq7A
zcDNG-pP?717WZyt)X9G&1E`IS1MTvg;D7*zEe*a|*z)1<63nV1&CWR7Y1n5`<y&;!
z!%JZf#2CTq*~^pYY(Pe~VS74x^wVpjPs$h3&J3QCR8^gHeF8RJw0hO|sBD~J^pk(l
zv?LV$_|)O)$OXAD9;Qs)0mfYLtuwvQ*#;3~=qg~=Je~cjujzrXZEl2ZUS^epQxEpo
ziJyE at fjV?bS#BlK_%ZuNzHk*2%rVbi6>UW$tI4k-ws0bm_NLJW$iANA!f3F7hj(=i
z7g$jo0F$C}winIJ!|B3FWl?Uz>yh5yNTLU<?|onetAH5ja%|X#60OJ~ej7;&YC~KK
zK0DC|j-Ef|Oy^-`DW)D&d<7u6A1K0u7xM at 5*1zC3N^D<P{~S>xW0p0>%^H4rsYHjc
zSMC(`n*JWN5bvshUJ?Q;vuT2tet_w}wy8*y`IMq&fOT0WZ2sZqmrfTW=o`G42L*v4
zB%=Yy^)_+vZ-`_!`y2>MJpD3<A?+l;xOg7D;D9fe-`3M`FB0C!@66{b`*2}8f^<-l
z8P8jz+BQx>=-^2F#$u@*4#+b&9QpiiPu5Hd1XC~gH8UNoKIqgH|8#qBU2epYahDwq
zQJ-X`Q*C1o;^;UAw6%C!vhoB)Y<Yk#SuALxm+rkmB5f(EGVF-(D|`8YR)bptduVyx
zDmNt`EP_yiX~fc0RGlf>{N_Co;{JVhhz^eJXlK-q|NG5<@(DhJDEUeL;qQBu%Q2F(
zDV^^#G2?)egc0eNIX0(1Sk69G1W~%}*G_kAxu3L{AtIbG6B~R+9tsI=d-RHOXLzHS
z<%D};2n3uj8*L at zX*K~g;KJUTwhm-yB0n^E<|QqHN1?1Z>hBw5Bw{jbs_e8USo!ad
z?NKdk^0q&g?IhoqxTfHEUDkSK&Sc_(!Yt_X)bRj*Fx07+B7^-oa5?9g at NL?e_pv at b
zq1E_=?z=bDY47UX+1%ccFHx+_2bjIs_q%$(O~BGByRZisku3UKli_eQ$RN*PE{=F{
z*pH}^EWMXw_KO$OM=$&ju~i&0#@a7V807acIUTZ5(9)K*fORbgs1EfybJk!5$%A^X
zs=Nx5{)8`?N5)*2nYr;1F#7yADdHHh_BbiJIsA at A>-l8pnGDhH5eio5<tJCAQAntg
z&e7hibi>a2AQO-tlI07pXO!YA*VN8xX-vJK>J;Ew(EP|IBk4Qj5eh6IQS?Z72|;zP
zhn7oudhmU&CQlW1M<s2ua%V-jDO4f}(Cq7p#3C(Ujv^AZf?GSw*2ko6q|X>VfkZR0
z#dnYESRuWou37Ypt7u>;t~CH6sy;ZZFoZ!Ne1=xIVyn<V2nxQTuOax~iw2^S-~a>x
z?90Q>p49>?Y_eGeN~b(<8S|eBmY1>hqdw#%{H9O&`i&}HV7S4$9JK~2F0Q4qODPr=
z3{;^`-b1n?c!)TEAnyzk-*3kr1_`_Vnq-R}w1CX4zqqp+8b?uW#K@*?C8jSV^lW{G
zA}WZoLubx5zLcbVm9s0Zk^{cf+p@$(qK^y=nWSXR1zVwFW2G1`?bx95N)JbF<EhC)
zU0&vrjbCSt8-7F{!TE)q@<$ssRQ6cEx|r)xJVRUAFs60Lw at W#KInyfCbR}Qb>ohGz
z15;h(Y(ZfA4~QTzu1WRQ`=>)b1I<PeuwHx7b)N}e+W9>#sltPy4po*VQ3N1toWtCx
zJ3VnB_iI1Hq42j4YH{k8`swyBVSy&+x~HI}K_2-(`h|yoHZan7xFeX_(XDGL1gT>m
z`@KW2{>9|%3rmgJlh*I1<T}1i`1YKs|Mu1`urgK<A4XMNN9wPldw9NyNZWEvysq?L
ze}goc?r)?brA^2!*;wLR6v&5f<}FrlMstjTDLuHIof)DN+rJ(R-W~Tb((@rIp%^V9
zcK3PJBify7c7zutLFr?Gkm-Iw2Y})>c at yp|&SNpenzgq89Z*YW?Xs1&cDSLS7e}&5
z)R4uh$^#65*y-gkDpYtMCOiT-bG~(q?~rrrj*zF)h;h?w3Zs|%{TeF+&-cBSckEv~
z0FoYw{8mIW7m7O<UtoMpwZ7xEnXTf*NH{?4i};d+T9mJ_0U>?T00KD>cxf7)i`Xx=
z-U(@b at Bo!wETsx#S4|2%Mdp1S{Tq0`by=HTS&A-(+SKWIx8EBrz##&d82F4o>n&w<
zpCo5UejF42QR#zT_)PjP<JSs at H3d^rJ{y3SZypjkQ{G3 at 0x=_CLq|iAEEYQQ0Xu+O
z=etU@?4YM>M#8VyDr2_qyWb@&{XO|)1ilZ`t+A$coIsA*8&VY<RM{oxFKvx9gF+^R
zL=_nOB4^qUZL_IU2tK*BWJdEc>5kEoSL{i|5mEua=S>+$XR+`~9YztrI>q=}QOQv1
z?t--f6nbWR-^kF;g$F7DHZ5vHw95FsOMD<WA}t&ow)iktE+>_urK>KAQv^(&R)V|i
zBhH>y8%BbNdX9Ec4&9HnboEvygGiS~1Dgp_uRQA4QM8^7P29L>UYq&&8ln1HvNG$Z
zy{pc`IOE6&HS=g&&_PSis$Vj>-t8P*m`AoF&P`yb2(4Po5>n7kol?5hV=*tpxcZhI
zAQTpTje`JW4WPEfHN`ux;6mA<otTdlzhUP#5U@(rJm)4=Y8BoT+)`>hekT?X+2xz6
zpqtH~G2eIjdqPjhV~MJwwGriCSkjQEXbR23ge+ at 5?$$(9eavUhkCMj<X35!QI9Xdl
z1hN8qo;iZJ5bc8{KrFFhvQEg{5kmy#BO0;=94lcXX^ab&6^H-B19uS;Ka$eG08hjK
z_tR9+qxoonxmG8WjN^DW=@(u$*a~2k4=g9*l~Dr|$>S#nn2`J<F60jbGqXQl+iHlK
zetRD*JJxz!TtBq?Ndunq2*uHf-*7!luK&!GhLtw+UL9C&`NxxM!e2VI4>lL`^GBd0
zA&>sDjoUCtbNWpzpQPci>xv6dxo$YEwE_a|WH`X_6J`|Gj4Wv{O=l1yF;ZtcJDd-*
zicNiZYMLdJ6MDDrspyC?I+i{}p~B4u9k2mGDN%qwHRja!V`&Cw!O!<6TDo&g&p at FX
zMX+{%^Per%S<+bQZxwx1{rqUjl-&3-Flk_Meml(uF!oIc1>#l!- at lN}XhkN>NCny+
zN%c~0re%dgA*5yz at gle%sTeAe$!~|jA6)_Kh7RZ7!LN`SGdc9Za>@f&XSwy?j61ua
zr<i`G&nnHQZ243V1hsln%h_W%G?Qu!RNUf_!qR)+oi4P|yUMj(^Zz_K0(D~4nPJp>
zAs2DA@`F7qeYEiCs+Lr?lY2$kQ7ns~YsJV*@LQ6H9<rQ5spF4)7D>#u=>$Muo_+xS
z*9Ey4U;Jy}tLLEW3 at xNh+VYk-jlKjV4Ad=OD#4{Dqw1cq$eA`%JmLw{ajk<v=;zQP
zM9B74`<G>|U|yG0l<N-|+P(crYF-lUt&|y|<FX+}zNDT*{Tu-GsEIhwd2->aJZPvn
zcM$HGE3M&JFTXOJ*IGy08##o9oDC1>6#7#^Lw{-OVQeu{@U;5MRju$6<$+)Pw3^2y
z6@;q}Om-QwnmA2)57lSN-5UR*Q%a^H%gQzml13eoVxbWykS4MM92?GF6+T_Mh^4C2
zG&{kq#hl at eXFfW5rIx$dhOM%m2yW4;7R#@wZBgJm9ZO6W<13Lni>CnxVRtLo$G;yO
zSGJOI>;McRsCzQ9Lr){W0Uk-Bd{^34(f6^#_Fgi4FP!DUD)Q7zWr26F at jk4R2e8HU
zOFNV=*2wCo5!@<1d6)ngT7g8`{(!yl4!RTL;p(GjhSBp5^KP;nEZ^~xpDVOhC|8qv
zM)HCei!rMzj^V1M+Y9?R3qQ5`H&<h<&rtE?^YDx$i?Vz_fqZ(MzvXi}fk5Bv*ty{?
z81yiP$}y!5qty-$V4gq}s8VE_Dbw>n;vjELF>>dViAlqXod;{b?~MTx3x_j at lO*o0
zdKjjp13mUjIfYk{Zsn4Jelw4PK?v)n{1T0k24KSH at 7U7M)!B^d3$8AKTTH!PTOZ!2
zxw)w9aqF~6)Bt9Gdw66mi)g5xGHb|WeJAEH51V$fj?W5p%$|yVwWga4gNvW%xtIte
zdUu|>?<4KcWofJyv<Q at u<SclnhXY%uFP?$BHl8lNHn!uhw7|>GhS`7cInO>RkVCR1
zh})J>1jlE8PKqf)XwUV*F+|O*{Uz3a{*B1K=r at fiS8mOJ-;q8w at NsDQ<<LxYlS$?H
zbkONJQq0Gs_IE!ng!YDU@&JMqqJ at Rw=_D)vyj0{0QBTw${0LoeC*i{dyg61oJf|DE
zM0u7FFnr}1aD^<4zAVdYv8*{|_E&JlBFd>gn%os-*q}*xPvtl3L_}b4iwRn0jOmpD
zmZFNn&fqf_)V_sh at GUTxP9&-7g8qjKeFdw-MIckzNUzv`eX!ULpj~j3r$aSmUWrM{
zq`#NuDT}p<*9(dUpej)5yIZ>LR%b9qnfD<?|G^t>l6HI2I&VnF`paDUIAqE3{bBm@
zc!?wvgNWb2NS^-EM4IkPA7%ovp4wEPe8jnUMDEFQ at w6n&WQ}U4DpU8rc;sK<hPPht
zo7AkQ`LirO&kKlK at HUP;_oA!vJP58Naq#h`sv{LkcYXnDfca&q)&w at 7Qs#xO+DtK5
z)cgi*mGNV|u!3LLst(ZN1ll{Y9ji&r<OnuiR+x0B7SCy$GCLj5!g`^hn9O-BxKb~9
z<S|zwb!tOn<8rG0g&Vj}JxJ1df%KXp6|H}<wcNj>8bJk!aKKZ8N4s~27q3?}duRgQ
zkxGt3`v*oq9Dlnhh~YZvVMx?-LiDZUSm_y>NLKNWSz!qZLk&T-u at 44hta88)^qgp$
z?e?sWLnr%tMS*{CeEA4bJMddnHUPPR?$_eYjVa(q0<)=f7i$<0rSa=N&`w7L4@~&f
z6Dc39p8P`v(EpOfp1<oBkJ6{ur%y12Ksz5RbhM#}r0#QhXNfKiWgXfocgn6CCxvg}
zlfYRZf#&TqxCxV&iQwyb0nka4!x9(r+F7M9)TCl!TXnf}N?>a0AOQSW(Cd7S%ww56
z8z at -HXVOcZ_8({pHzrX*Tkbyx*<4!c?DE^qACz|_6qom_kW>GfLAnZoj}t28c3j}=
z&V$n*vTA<H4opDG^$;=?BR?kyf`?He_2vP49$gH at eiH<}N>a{EGJNMONY+3CJGO%t
zpdqHX(gwOQQ5$c}16~Y`OqWbj-FjaAqJQme2vM1H!iZvMXIT=a)V*YMH)~%=K?@f~
zWi|BUOoH9%GG%orx*daK`+5G3diw2UI4Nt{&sa*VF&HWbM~qIeQ-oR5F_*Mw9%Hb-
zF~rS?1bJ_<mK(-edvacwRgu8y4jp^T$Vq*{wI}g>Zm6IK$a`qAhWFW#<Esc$0c97T
zw0-vcl#Y>AzX7j?YK*X{6IJQ{+qFUF<d2d4cTW~9g<rHL#bqtI6inja$McvSAG9l=
zlqErfUyIr_kgtv_-i5E8Tb99tTjFs%J5A=aUdTnwE+mb0j;!$T$L2MFuJF9M^D>R$
zV#UuPuvjgrMUp{Y<B at P$_Z(1?1wVSv|3p({scz*or}cP<^*kpUGEs|4Wm;nr*RO&9
z4;Ny%*g`kG(9X%>xy{_mzJc|5{2Ff*8|7NB%xw&2mqnM(yY2yuxdO125C9>BXJU48
z`&+mnsFIYzNluv{n0Q_KR>`DUldrly8XC&k0srM=Bh~5gTxX4Sp!1R_G0h?0i#c^Q
z{0|P+*Kj!VCraz3p4xxSp#X|0f%aw1HIx00xiCsKKpD93{3^qkpy#851$U&O275kq
zUugY`9-z>Y-3~_)eAcU5PO3>Vb&cyFc!jPwYBiKYzEK%r#&{x6ZDL(x$sEv#7SHNv
z?zXf}4Q1xDuO;-wH=AF}j#jPy0=~tiX`F3djLqTK!3-bGN+{->NEXLq0y5j`ODXyR
zL9-cY91*uNm=XT*J9~s#;e+onE{bNBhoA%Uj1&`$lxzZQyi>AoLnyeRo?^#p<@>uQ
zZ_8%ESEuVu0n#FW3*S&rd}-}>#SQ<GPxRBRZ3o0L-&2(ovH4q6hHW!)&^ykUgyMMR
zWfXVRSkKZWvti%Pd2r&P at ESg8=ap|G$=8!mgy0^|eF(c322kiwrCtpf%nx852BlQ;
z73QAZ?#mhZgH0W=(L4qImDiElWCOfLF?ww1!%?m5!tlDUw<78mnYPSeo`ivUpSQ|!
zgp=oNEvNUtq3ZcXV12g6hcpX!wAWUxU1vLw&J{W8a**n$4&7l;jp#W%WYyN49>L8g
ztqmq{9jD!_+?Yo2!UZ%RHGPCCH3C at lGEb~pOx6}QN?ZV#4T!FHnH-g at K$&9*qJva?
zi%34rhWt^v$b~BhQ+*5--j1-_kyd-3^zp_bP_O4n9=14)j^q-OZS+H^9jH`?!<sHO
z+nIPF976{<{xYU?8U`A+t3Qs!2BOLt6MAf+I#>SlzTt)W+U&o~s(*Ys&w<|icpP}p
z_mwUt$e0!j-{_m<5wO=`P1+#^0A;&Is9Td7H$+E9+s}nQggvUTr4ZC}Qaet^+J=cr
z*Bb$E3Q2bdy$NT$EPGL_0gBqcaHB{QMCp8stPDP$zY-uyj-49p6k4$gi!)rJ?urE6
zC;2A-uL&gM6sA_P%1)8i#U)Gm!HY}uqz=V|s?v82 at bn}s)-kvP7vFzYUmN=J0q0VP
zLb$ZgU;mIHOy<7ygXlbZCc3s00$tmAgYZjZTM$}rjl;JWlecYA{!~6E>NZDJi2iYG
z&XC>s7 at I=2UMT6<i175w at j_R>EQ)C7J<Uf+K{K2c(c8hf7|et%lYGdtz2t|(cXs>E
zkx*ToTwU_;sz#1#&Va^7v**g6#5J1-pw<R at Q06&mGOpsss<6l)MZXiDD`AHGUMmf7
z_8Fegt~YX`k?=4aRKlxZ=Ro^2!BX-%1R^E)3yY3N;Eb9m<?CV;<M{3dMv#m at 9i!Yt
z07p-5(h~zx6()#OP*v=wTklBqgpWE-8Tvgzt^%H##j+bFotwq?B2o7#z2wOz7#tR-
zHk(5B at 5p*4mFmOvW(Od0aaCGtOk=3D0r6AWE#E^CX={;-4S3Y%`ROStnPZLEK&LQ`
zynas!TSt!``8G_>^nNy$G=!|)?WFscsmX}*u*8<Li{^h=F6%PJSepc at f)a2rvGult
zoC>kHGqKb33w(4X+5f#cinS~0DB`9T3RZWV__w`Go^w8{1)E*gobIQaR_XGc<4A)T
zcS-UEB3ODTuoW9=5_&r4F&Kel^gBTaYF at pW^~DlZyPYsqs89Pbu3Xtu`2`|B94P@%
zJT72^?&iYu(v<w&^VQaX*5!O7{p=Mw5~Tn<qt2dJjkpnnR=C(mwxtM<z8AcukGjE@
zR{K~$5DM>AGwoP}NDvTo9|*ryy*Aatdjf)d3loxy(7M^X;4}|m9TLP7|CYQ7I4++^
zU-O&~8q5M|3pQQTn1;bO<#n(8P$w_A#-Tf at v$HDOfN8)|77jIkL8P3Yltyiu_k&)E
zbXix8eYp%&Oc2&1AF+|4X%AFs9m@^!1$}0iiUX0Srp35M4MtJ_N%#wffK^S2-g|}l
zrS)KQ1a$_OzoMA}TANk8q3i3qB#n>Pe#hQB`kwiyj2LDUgQ_3Iv+UqTDD|NR!v7(X
z)QM5xlpD0~zlBPLJnk<cd1sNcc!N(^Y0rMWcEf{1n*hX;Zs?#7a~JYZhc!Ro-|kk(
z56qb}>;igemf(7)qpFcNQ|^)Ug6RRIL^O2UC|zdUD<5h-N5CZ+<G_Y5y8TNv=^t)u
zERz-+nkQ at _tpAs{uC6)h1<9o%@Y%@)6OO@|qWZFY#RwqkOIUO^pb~3tCkU^4;S{YM
zrAf_oZpQU%%SgDAsuR6Xc6o9M3bt<D+AW%xiub<T-iv?buerif4%>j<HDI*Gzz$xl
z#m7~ImS{8M6Y2YEKyrrmYr$EK`jd`s)Qz4*c984W(gUMWEH`x~cqstSHic1b=X10p
zMJqjhhex0xpTPgui5VT|+}KLotn_xaM%2G%MzvCmt|2~t at 5tO`9JW13<$CuLlm#9n
zdiM={lVt=1B{;-NIc4{qZ-z^<goAB`jik#mbh7{zhh)`Up1<()Bt1aWHITeRGwyXc
z!2XxbwnVqWa^%efC%;h8uk5)4b-5@~GB~_3pe-wY(K4Z`^FJw0>@L929%<5_#v8o!
zr1)qq<;*bN1F`Bn5#VXqGI;n=Jn*uSWg~x#dqo$4T7mhXcO1#y*2dMNh&0x~YL<OL
z;1Pm{$)(?8<}BVQ7%LFrO3 at i7SUvzK^lo?{<53<q=2xRAt41IWWeO)~<)!A?%z?3p
zP9Pih6WA>L?R<?q#sG1^ZT~jHxHIvP_NY{wmiD{vd^c;9;3*?{KD3D=aKgTFr<2F*
zzigI>T<FsZnc?}A%9iJ7KB$&hwPYTsq73R}&LtNQJ)|1*{eRLSZ&bq<$1jkYX=*sY
zulfxB&G&h^gyn)ZZ}8taNCYR|Bi7T%Z+$cwLt8Se5xJ=Gg9D3o`t`2^;uJbxENPFC
zI5xAe7e<kk9WraZqzv>ToYwhQ_=8#h<EwcY#=+NDMTIUo4#8I^%$SlD8`^^$kus$p
zcvFxw{L#b#WyW1H*nk-lH8bD at iW0S_6mrNDOJBi~B3)5moaPV!0vrROY{B=m|5y1C
zQjvaG$x8)u-bZefU&RB$sVjU#Ncmp}1H7_F%n!IjJ0a9P6`Rbr6iXvpcOz68_3M<c
zRcwF|1-s2ZVpW)wHMuCmq}Y+=?j|f>Xn>enoo<QO_k8l~$GItxg*L{P<C<EmkYYor
zvzC+S7@{ZyaS!}CYG4{Old({YieX(!uFo&$8LWgG_SKKkx-GI1U!0g05`zloUp9BO
zmffs>8%TV1r)pU0-BJn2%U)Ubtx=B-AF7c>3&*a{qalh#u#H{h7RaeER4Ei3PHE#`
z;yj3H(ruUOz{ez?2qF-;n<nfDdx-8=Kq)%$yM%gYIL?k6TAJh)OpxjkPMGg2;j(dO
z(z~u<O+?mo?C&PvxFOR$<l;_`VmRbYwE}=SYPR9lEg9_%PWT#o*kj~ft;m$AyLxZ_
z9ARoZv!SdHC*V;Zf at mgtnpQ5rzMVGxVYwpBr1dXAa!mD1U<K_JOv$&IOhk7jp*bS>
zuM1~>O4d*wtkczG`XBTE1BVA1%52-{9*Pz$(~?+2NcF}>({Mo(K~B)EEt=zYMpw=3
z*P+&qQ+#AggePweTXPhAGe9CI??_4+9Ut+&g1_Qh?NjbP)GMRG=qnCWLA>g}LLkD?
zes9ywnpQkD?UfX7(JQr>D<e&s#OOV?t^3!ZlePI1TDClW6UWj2+Gu4K#7XggR4#)a
z2AT3uT$<JDV(tW{@3Nu_fNK79 at jJ4RC+W=|t^9f-PHp-y&KQpE+Ghgh^?k)PaKuSX
zT;HErq;$RIpXiI$_5kZ(BKsg!^L;rrJBGOzBEu$d6**0P|JAo%>E7%|?-1z}rZ8g~
zf_oo6^UERdTBROhMmDvOv_NidUqM+Zh8e6JY`?KpFb#j8&Ug=wm#Id1`Q=NDHrl^a
z$7ybZ?^GDcz+0J)8E${rCqsHeNU-BLg*!dOWkW|n<v}RhhC-_lLF3Y0HGrdfOun&a
ze5d~T#eYg)>@FmA=?*KTkM;8&o&)EeBm)waR&(eM&r#H;Rh5Oh)GX9_g#Ajj7yU%4
z0~-iMgi`atVSvl at D8tVV=%s_dwRi9c at yYI9#-vJt<Jj_;lY~3Ue-IS#R`gGX97X*&
zipuoA=2W=;$eK}2utL2_6mEm6A2s{has_-A8Pj=!6q?RnBO>mhtOxo|`T`>p41a}Z
zZ-)Y6EFQZ|ZKP!jh+6Sui4E7=f;4J}FB<a-_>6{?PO(bw1XINS_s45(O#bNh3oH_6
zcL86ZA;<lc>`q%G>NY+D)h2ev@#gu|LEK?jhM`?4GOlME>Ra`NK49 at Hf-zBfhC}@d
zUNm-qHQqme1uU{;BPVG0sER`+j*p?X$-z_|n>e=x?M1a{ahGb_xq*d-f~m}j<Pki7
zA%JkHI~m>V{m3XEVP0G~jC;P`8p+)b7hBmp6iD7{zgWS#&EfLHxFB&rJGOn{EtH2*
zU#9rA`UyATWH}EiWa7F`VsxWMX~5BV|2l0jt}A!249L6=8fe#XReS*MPjKm3<&NHS
z0JmbpbAx`|x6EOEr=t1bQE8Dq at SP_61%aZd>r+1<aoKYyiIj$og9WZ8M3+Tb1&7}+
z5!P1BNorC$<B~f;QTzegV<T-Vk$r$*tuqclBLK}Ipd1=1q`LUY7R#_)4o@{;y}A{?
zFCq^T)H;J+fkBy!bw^>9%Ym at lR-Soml8TGKRu1}<zp07 at Cxp3Na`$xkB2M(^tX|a*
zEtN<eDX&Hv8>D~jn>- at QYn9sKECye>9|mE$EbvAld&O%7pl~q+H7F-XZq|M$){-qG
zLU$~8W>>ngpwq8J1{3Fp$XOhR-EbT{RWK!olqBV{_C=#pg_dEr9>kGS1_|fft>yeP
zkkg#M+b2U@=s>WVpYX3ySQwa=v|mkVt<*u0s1XM%&lxfnU6*KY&_($$tgVmkh!S^S
zOLXYu&lq`0SaMDX`a3KytadU8nD=)9U<q1qudv+DhzOyU{pnS1&(Kh{_Iwwr6*_=~
z;Yt0Tg~9X-)p*gw*60wZ1aFOG+0A#KzGoI_4WzZyA)*76lFgOnjulaCF4&*y at ST~d
z=*d8S at wBZ)RkkPl&3O-6pvaNEn)h1aWZr=sv9 at 2_%PgB_+iA!bi@**$GQ{#fPw`9R
zN!aPtji6KU(iiMx3b1wq=(#*o*l=x#gVO~8hVz1vo#>jHEtU{5(aov3BgxO&vmA``
zGRSThrxtG)2ALo?oiAuhRK!Jqec*M_C0DFg2BqabAnibS$pD)<+|4ZUFEP8gLV88@
zd8eh3JnVl|XpH&zk3WR=*E1#g_(gxw=vkWjkcf3gbw20mBqQq9Bd6Lm;6ozg5Ib*?
z-+kH5Fb#KepJ6_CV~*$=P+sy(%rxi4SA|$1b(WDz4d@>ac8x!gk#)o%7_{mksHUQu
zN$*L`1+*wUk0$^8R5t9{3}@b-%Z<|k*UfUDwXFuRaQ^^4NJvrbpv)={CSR}oSiR*!
zW2&_!_oksR`_fk#b;>CwHv`>y+bNqH)Cel`+%i1sjQ9t?6wjTi5B_BUqVuTrH4-H(
z0L5;8!6FZ<6-SSKG+z3-aP9TVq at g%;w49x&HCr1%GUU=o4H$;a9wz1YY*#MueN?cZ
zfF8g^5cNCJYtk&WG*;iRQk at LiZw5C;O}iTn$orLNREZ1Y0XsFwqKaXBgF8%C(qdlF
z+F*QqNyiT*-)wj`Vi at rQlU_yuhggJY<#s--Kcs2a5Rpt>vKMsZE=bb4-REdtXE(z7
zA>TgsgrOPD0v^v*Q!+sb!EtZ?JG<wuVLkD<8dvpidvkSnl;apg at z^0c3H}V5De)iw
zF5Q_l{p+R5lV#gCYPTn2x_UQU;EvgLrvb7S;;v%eeb<0(`=b>A*5Ok4YVy`^0}4o`
zjUc!n`c9Z59_^JZn9B)S&+^K=tHM}OymmgsrAs}uQgleF5y12EP;W*&@tAf#6Fm)<
zwG{c+v+KzrvX6K8qv=tW*D%7HNew0tm{JXMIFmB##M0nkL`+SCrXk%WoMx~NFn7PG
zXu!7J+v#45;2bja8gtF$vXNJvugu0s#i5b=`rJU3JdDW2KG!?D7d)w8<O*>wROl}f
z5|$th?#Z7+=&l&!o|+TQm|0a(EC4YXtQKL0w*?Ya$R;~deDx*NEW&@-7F<_<G3X2e
zkGP%m*7Hj+?45koUl9fYK;{q5EN*cWgVIlpT=Y??SHwzZlBG$rQJ{)M0D2|+68E!7
zSfA~*`z)q`K?%W$)v`>Mav(@7dldcTdx-h5ldYv$PE%@)s3c(mbd5JWH(=RR!z8C|
zigN^6{IAQhmdX2yMYu#1CRHgI1t`M at KCH|q(`x5cI<}|`c%LBV**^8B7k2nxioMPA
z7W^pI-oZ{1IOJNNHNsu(#NZ&mS^Drw8k%fOEs=bY!ki;+**r|qCsSh|;oz=LDkcKc
z*xU at Yhy1w4rfI13aFIw?4HwR)&WqM){aOaoHc#XwXTEbST?{%xG_qZW1r*P=FZ}M2
zw?rgG+qtlVYWou^6+6}Pt0j<^Ixwkj=ER?1S!|&IL|DM7V7%pJhW&9u86Cg@`52Kp
zJxB0z{jcONEwq!4LbmdbMbdU^G}8UfNR6xOjEBp8oQi+EYP??^3^p?{?rJQNYYTY)
z9tBLFet-Q0*4pWvfuMhQ`7p;UHG4+tJT&a~2OcCURxD&DE8kdWP$3-W+wYCl9gg55
zdh#oU-Fb)L`n<A?Cn>y2IY;~PZ1vOr6Dj*7DK8w;@<+^e<%>%3t32u`tB&RAoQs!l
zzeliuyI{M9r)qDDS5>p5jfgG5dND&aI0!znt-;GG0Z6tgLEz at pZ<1MtKCgsWmniA{
ztrG%Ra&po#s6b7P5u19P{|7`^<%A#uZUYCjOEVF9(m*_>@-RKSb?o8g^OXCkHSWkK
z3og8VsxEnjsc3q(G<B<(X!+ccqtS1*rrjSu6v2~_YtYP&>;Mf^ryBo+z8wm<BMyTY
zaACX<sift$w#S&(muBh+>hzNzW|9{zcqL+vdZsY%#rfxu14WC<b?emc5L08pHhYNG
z73%IpR$rj^oXI2`x?;C^i5|cTfXWJGZalL9pG_MGzDm3)V2xt802JRA+TyXeAc=Vx
zb#oIRC<0O=ol|Q7vg>be&Ip*0^?J%8sm>LW^3{Z>o+3%%)v(f&k-eBj99LR#`;OMh
zkNO*|ZMX1JByvFX*Sbcf2_ODTQmsLMqCw$1dlF&eOf}Jbv=7gLnD3e&9|w=mk>3=n
zp}qY=Xb>?<(L`;Tx0jp*-snXF>tvySoc}b`>1)eT5e?<gBk;oRzL-_|^xSx}HCYzC
zQ}7hqV$(hci`dlSwrrSOlYtmWa?ez1njlW&ElT_F`c=Vk5~l~i2erRaXsOb3pphXa
z>Ou<wUrQR$b7^~R<2-A)4)njvw!u7s6`hdLzSuRGf0cb+idEd<n0D+j)y at iTxe3r`
z7yeYl%%Z9E9J8C79Z#ks+lczCnwduw2UyK1{E};}#%5`lmTM=VCWS;}bp$Uyc!v&3
zf-wliAY~vC>mod_lqzRLCnd5NMBhbVlM>jE4fHx}5U5_Y3O2aW)0lk3NDasI<Ko+3
zw!Hh>ufmrO8~qQd0QTQ=8&<{ii-xbql%2*yn4aeKzbRn8k4o$q*8sb{`@cR>f-Wx*
zER9daM8`zwzZD|dvh|1C^KB at y?RPR(SIWlZ)BM-tT%LU<l%5^TaH)wq31qnl6!12K
zzHn%uK}k-1Cc)Wvv*;yrJeaw(us$UINXC>|!FWw&lkR!{FKw?4-R)HWLqVwiy^b9=
z7+qSFqfSdD->sO8#ax+qNJiZtQz2sq3T0ijq-5-=WAPtm{G&Te#$f&o%HSg_q{Zi4
zahFu<^5AIpw}WEvZk;2Hglt}QQZE at RM_Jyk7ZRjPw!O!Wt_?k-!j>6Qjrm-kix3!E
zqJg<MJya{TO#4GpXfbkM2)xtq>z#K(9uL?qFg4~)xw|(WDYl|C!rWaKbzhR_l%@dM
z{W}Z at u(nxnMlkyU|6R>EO^b7DFcZr9$;K~Z(+TbD5v0_ua~}^Y7jBI-rY(Itbj@<B
zUs?8dr>Vr4yGSKBKb-s2wMi$HK0hh*u at Hmy8l~Ork7u!^AV$Y3%9a$oDU#abS}M$m
zquF at 6>aHJ#dGT`HB=%t|w5qxICZ)HsJ^f85Emb#iO5p{6TM>cukib_80P9)buD@~*
zZ$zWEi>6)83%e?s|Jr~!>Cly4=$l<Q@;0{ExO`UuBf8cspe at CpXB#=Lil0sQ75Vi^
zCHvvoIP#Y)+5DK-h**wFX!`7E7tnh4&+xRig;HoHB@%efbJoeYcgl13v7cJ;>3{T+
z^K%i|zL7F1uPq__ectv~lw_+KEgyi~41p?Ft-&A+l&`#5Cp3 at OTQuqyECgmx6*@X*
zqVslnAlHR|*oCm^#$GhQjD1fZ8u-#5)~X!hlGnyCvBQLZFvN;})`_2(#tHHIIyRH#
z;o>#Ia?7>|x$Hg`65Np8cy8sJm1<u at inrxN&&^-!Rrh<}Sv?>JOlD`S<oH>w8TzJP
zS)CwENe3Yx at ak*U_dd@^<M6|RYgif`v~cttm5MB*5glEicfSXSgF8yXLpF`Tf$UqT
zs+5Kr;~$xAr2f|5HGH)<-a1t7uzl{j5T0IkX+q(`BQH<-*a!cuDwguTD)*DzO++{u
z&|o?cmGL}PV!L-WP7W<F#ib>fZDTHBQ at Z(UmQqwyCm>EH8HSK_lSufEE&Xo{RA8>9
zj&2^_tZmsq)XL!Uu^KxSYVMnxg_81K7ChU7i|5$kvJ^RwVO_UOCYjlW<MIJm+H%>)
z+(<gF(RqBJ at -5}-!W3HOWH7m~jP2HwrRG8?R!q6$Ul+VU;$mRgmDRtX<7w5TL0hL9
z(2JDjYU={lb#>|*i#8V-2k+ojY~n&}Kku;|CGC!T?ZvB)d7p>ZN)I at 6X={W-{C$#%
zT^~T;2Zi0O($f9j+S`GBItFj9WFH3tCCes&yiEX})-_ErlAl05H0d$vK8~Q?vbe(d
z9KA%c73N%Gr&?{U{cHlT_eIG)#hwULXrcA&!67W3!B=;gd`R{MUW_GvtOrZy2_2O1
zbe#2r|0y<D|Jaw?j>_i6;|!(Un!L3B_Mb*Uxq#yEg!de6Z6=p(i$jO9YBidqdw*0n
zH)}oop-ImS(qzgv{(CY6Y*=P9rrHa9KkR|2kw%+o*~+Kv+>r$CfitP=_3uiP;)A;{
zdJrZ*U at bCEsYK=um%?x2$A&m<$JSK;isoj<&h7|Z|1##O7*cdn8yF$z6fVOO7~;<0
zX!7i5=+SjZ>{c)mnamCm5YAHsh-eHbdOya>L6Nvap)`}{nw&{L0LMH9%A!AE$S-a>
zS-(~q07P+|M%Q49N}5P27zRx%k!>s%=)O9~tn>F{5;Y{(a~(XXh9aD3E@>pt#eoM@
zEpvvd{y$4m?X#K&>tg$evh=rr-)|~MLLn7e0$Zs at k)P?-1cKp$zm at F@pp)ppyw-Hp
zS^&ekc(!iM)DaZI{7tQ#t5jN%1VH8UM=g)dHwrIiWY^-|-OM=(ZJYsAS4*S7p6Q?+
zf3t&=X!x}L&lBxLf`&ss53%Nay39GR11%d3esGPD at bOkzo=w+)IYDF5%yB0*v}VUW
z%$d9>XhIoTg{I=!HL at Ab>L{wA1l*u!pI0)`qje%xr}rZGW4*i at sb3AQuDJ?5S#ef!
zP~u}Xp-Iz}jcB|sah3N)E(FMT)(8oSi_su#e^HF{Q at nZ$BP5kbku6DIQ(H+PHYvkO
znw|%5(eS)v_E*n3fom|no*X)R3-1*1 at fZ$dQ)x#r^!v~GzB!4U<M%@0Cn)yF*j1ln
zP<`L9#H(B8KVZVny?I<^R*_;x)-0BTVK*ouLS`;1kqdP;btzDLOQB?TU>wVu1T=Q1
zhlZ7$U7SaTOThko)lT$-9u~t~H+z+ at Ww)7nZnXHn-Tg~Xd=2FPV)eTG0BgKa#u>M&
zcg0=>B1lkAtbe+ZIj4%>X3tDh$`MITRs54cz at 4bPT*DQE`s00gw3O#-Vv=KjH<YgS
zM7yFqjeefEh_dC?TpTvejw7q|nf6*H)=v+7=q+MfD6~ZwvAYk`tHmk!5x8EsklC}M
za5E(m(Duxl>w%^JK8iiLf(~O<`o=$-f!@%tnONh8uSnj#bju*ho|=VNZjz4%e+l3{
z3`}=Ua1ds&iabuwe@@@VJ{arJmT5niTdxw8LTg(Tr5;5Ebp%^UZYE2bi6+JyWyR0T
z at F!l1Fz9jUD{x84n^H#Zs*{<eGpgDw?_WS01~DK}LMG)ru^2xysPk4m3vQliu3X#J
z6{g|TjOQ<^zwFBta*fAXiU{hl9y at aH!!HoU^wUR*!@gd(=yyd=2LjCX at Q67_;~lA1
z1qZILF|@HWRgw(EH+u6qe<+waW$;Oo)9sk#0`kmrxgi&GYKI&Ljz4f9;KX^_!-g11
zVm96nOPzmMH!_&#6 at cswY0p9Xt%O0%Y+3DyCy{G|qGiM5dVLBee_3O!3)LqRubYWL
z${8xY)$K@)sj8BvE_WEFqNTbE(Xz{~^mgz$UpEfPJ9#aG>@hfQ@{fnLgEFXwymM at +
zK7g1oEgKNquN_|HOp1KO75}aMh_X3LkQ=fG<rPe6)rpd{b5}H50+<3YNyG+lAayS4
zlahUJZ=66w&_3C(ZjUPW!wf9j>WIfQ^ob=v{@=4_PWmkmH0ymKG at VKg5Ip|jy?#zQ
zw!@Y)x$?h0{T4!#t3<-IOL+z0N2f#0o!u_UrG4N_`@_P#L)>b4!Cv+k2S!^^P{F0r
zTU~&hKsJqqaN;a({|(F5Wy`T=UpG>&XLyB~XnMl)J-)7JZ35Pu2!m!TVf$BFx=-x4
z>9O-SF{V|EvAsUnvVNI1=kEF$sBg&TUUgdQ`4bKb_Hl#CWS$#}<IOw*7INCF+L9f?
zwqayRQSRhP7PugGPZ3Al_>pCr?0O>0R%MEx{1LF2ZPWK~3<lg?_$-vv81C#e2G`60
z1yLV1eHJpaTa{<wi=eiX*KQD~HAW2hpU+q)h~dpcPE;P!YNwdda|W}iEa@(pim%G;
zq(pPOYo`)R4DpSmT2*!)0h at x_?(|!^QQNwcZ at CIvLa+3NO6=Id`~{PEW4vU^^TUnR
zK*7}#2sp-<*#9GcYQJ8Qa$?uD41S64yNe`{^@<O*w3{__bOh^^YCm)f)$S7P%0>9u
ziVP_ at 9eKnZbk#;$P~uJVdG%zvJT^R=Q7jArvqp{;VZ_ZX at l<*zMYl1 at QkOO44OkAN
z8*{1Ig|D#o(bj`JQc%riuSn|$MZVj3jnY7sPQ3MYm&ICuOBC-t`gQ0>=N>aM3MLib
z6FCmYO4#7DZl6t`i at Q8(?a2Dm>Hv~v$>AEdxe^B$N;%kAbbbBNTyj?3KWxkN&)uMj
zZXI%<=@d@^pd=e5A#)M9yH*T_iyjV$wClsL+_9u1fck%a6JR$EU%=@ci={CcN7`Y!
zcF!~iUEm5mhD-lVVH7QKnf;xxK9bI<DW!~K5M4|mY`pq$4vNwf8zx0{Dx_!cURT~i
z3uOHKxx at S_Sx@3jo89ZfgN~@GD0_L~OE99w(w0X(jA5oNU5~63I|TbUd>|&sBh8Om
z at yu30=-lUD?L73h*iE?aZYxva>2 at UIWUPL~ameGxjYy9JiZ at 7kSsvlS9LD<_XB;vQ
z=?W8Xeu at 6D;Z8y`g^pM%&x&1Pz9Lb>Z2v4V99ozxUzP+Fs;Y++-C$`;B5pnx^{PQL
z<H`BBzBgRkBbMoMBgO47zXmas#vkC`Az*BDf=*kR55Uhr%I3mvhS+tTK)@evsF99l
zi3x`!LQ|rDSH@;IZk7ziR$6?F(5SS$agjp+{NeIyw68G?AMqRNVcY}IVfP3W+m$w$
zu<5!Cos_Eu0z?=4rne+;NXEgCYBg9{W=TNlzaIO@)9ucTupO-8;5Kmp`vOg7@&-<_
zkf-W^Q6;Ss^+`3mdP5}C7#F7=Pz~A0k9UB_4eoL0O=P5=Jy4SR^N>Ip(6Rb9o0;c<
zWLZzA=J}Q4L(2D0&!5y9E=nvkUEZSlGJs;+0BaxpY5O`F2y_Q!kbFPz%<C5%1tUA%
zJP$1GwF^Hy-<u<3WN(8HlCa^Ko4aU*Z(dYL<PaE4lBpTw)qL1g=u&WST=0jr*2{}y
zpu#O)Olimj&^+d87NU6$i}Aj9-Yu^6#VDZAo1<k8t$5LRf<d&-N|2=y4QdE8w!NZm
zW!!YTu*S^e5WI=49_&pMX?<k3B**-<iVLvA5O(SJ8~UBemvZ~_gm*}MQ_rU~F{Lq!
zpV;@cO=T9fA~K7=uBLsZPbY>6OsO>*_at~BiJ-aM`jx at MtM_Q<*y`Ty-#A7dOk)OU
zMQ&iYr7vw)f#LkmduItV6{Ks%PfoG`Nuq|vun0wtZ7 at ojY{rdlwNhx(`qH_WX#J6i
zqd!k5ppyc3Tkr5c_8Gq`=3 at 97EU<N%S&y0PE0CRj{Vd7qRC}R_rt4RQy;p>sfv?c*
zWgY=*1y40CS{J?_R}iUTDYet@`J+RJkEDnzLdbo5A-zEz92Vu1ek($Rw at x-OG+x0_
zSGve>UYIn?j*7O!)7i0(3-SO7$!BOT-I7SwawMumYXyU;1X$}l_TJv4$;kdc9qVe!
zFL>E15rgPy5+tyH7JqNqV0<6juycWoZDxBm+0tVZ36yX_3()3j;0avTk1+b+nxqrd
zK>h{)?euj5xU|iZFs}Da48-gUj0 at 6?k}f2D-+8K?0_aim6P>!l9|kdD9fVI~hX3RQ
zAUF|%;^?jK>D{Mq(N;0#RDSAx4{`i<VJ_rx$f$Mp)IE!ro>O67mNt^GN56B7-7tu|
zwMNVj<RcNI1tR at ctrp%Kh()dy%BRz at xZz*!FHbuCHaN8PNbBllHO#c<fg8RDQvbqC
z=x4i+?)9%fGNDVd<~R at 8VV+5~5#DHdkEnUzq(;_CRF{tZi6YcdV(o73LhTC92(-1s
z$=%mS<H}I|^!zB4$O<lY?`)M+lvgmxriA<*hF;M4$9l`U<sGh6=DfngKipOYka1-K
zaOm01OTxYm5+QE9f>*_oTglP<%O~njr%&FOGZmJynikr>V|_dl6$sS6uFHR_#N%90
zw>y8KB<&)f0d8gu&F3F*iIZ8{e$O;T!5d(DLbKBLH7X!2K&~(SpMis^=9)5t9}$d*
zD4B;-h4CmKlwk)oO-Pf9n`ZVO#B$3UwLGVf#HUhvJT at Me60a#Bmh8!e*y|3e4j1t(
zv+PT1FVVF_36kwuZAI97sCKAtZG~}SIxRMgQ2v0M;&88^HCrJw>U>Fl{MIJ&9id9u
zaIKDy%0NH>i}BL<_ntMHCF`jJ)n3 at jZN9U^#>{~~ji6kjVy=5j7EOv`6!V!00Dq18
z3MK`lwdkqe3}2$``_r_)GTSlrH=!*vDA#98W?z!K{k52lO6#~{*JFKV;r#`X*c0Oh
zhiDb^hDnAWz!BLYOLMklvlr#9zv2&_jB1Oq9>E53;6(mzll;X6^P;%p;58{jrdSJV
zZGP}d%Mo^dzvH{!(C2*%0E2cXJX;2e;)W{G!GEz{pAab7mZGW$Up>>Gns%bZCk(w&
z_F^nkkW=TUsv5+4?dvP0sm(UNsD*0}+6ASA4m{KB7y4>vU!~1ow>@uOBy(1_vFDF4
zz{(S{v_J#BNmvB)AXpeBcygLKBZh%UY-$jJn_>}f1!fnme+Irp6x at D+gc)y!o;_7%
zUsnpR#@m3Z at 32=9Ii3B0cEj;V_Q-Twu)9)7?fx{3<SSRJze~kGQ!QE`)rtrsRh`m_
z?&Vsz;n)|m)vka5-`#oLy!w!3B<`G%sDmYOgVZ;b<VVxzc^I5viRP|BQ`tp+H<)(X
znTl?3kz#)P)(0=zJOncXsC{)uM}nh1qRA at W4V+NQM=%BRMvZJCh9tX+r6=$u8>Idm
zCYioat&axl-T}i{LP$SF!Zl=OF;u39Ir>t3jSd|e$b5B+=;el#7B?YRDlc4EdeD7&
zR%OT;k`#jmH1t6W$sCVu>3o5F>!m9-838|M;fqoR;=m(t^$$WvQny`ji`EQ}HwBXi
zmaY&SRk1XaB-7l^qdL||IUJ8+GjoT4w3Y0o;4KDJc%fpO`zN^jE7ERb?<VLZsj+TG
z{0<9m+L1Nw!&0d`6<Q|mTS9HlOH(=Wj0tC?Sf61pzG%I~_oHKybQKA$F8km+(bGUA
zwG?knO7NB*8zyVR9m;?OWtNByc|;4XEXP~_A4LMgqpmj8GO>}1i6;awgNVT=!y+(g
zjDvNcSuV{WNrY)fOIBt1ilaQPtB#ARH>x-4vaC+}WJ?c)5ZdLGwMGnbE%6<!vq8G)
zT*XmFGC1bIi$oa~1*^?^123l_df~|2vg=qn!MZa_eo1|%R!eoyWA~17rmS`{VNe2y
z&1Brgkj at z_L<|5r*s3h_g;k3JFDkGH@?v%I!(-<2rTqjAsP7DPv at Dph*|=a>7UR5j
zu?JVQyQOi0F*}^cpjs(ZL>aR|jc9X<qhxU9l|Y8lfsPtm-y}QzMrGEmGL+Ev(j{TU
z-8*`3#hmluggr|7f*~|?TguVx&EBEQ=IKw599wgEI-dz<c7=?`Hu@<JBb?yF?S(2q
z0b*CvXRr^smj+KrRm-}Dga9B0Ct9(X$HB|}R>Yfp=_D95dYLQ{QuYxrrVS<lcSP7a
z+2UnX5AJF5NirEnwety({l`lEy*ntefsyi?)eeV#v8;@N{QHuGo6-oUNpZ8Ad?0XF
zkB+`w{T#h=_RWLVM}>|T)#)#;R5-@?GNYmj;p;T6;QyW6hKOT?@t?pL3RS*fw1-s+
z at k{u>U!@sUC36qD`?kV>I{`BzOf55rpF^>_`9-U at cL&EuP>ujcK)Ap3e!@k34?4sE
z_2U4}G3KVtLf<f|MiZzMc*cw5H)!+QF-F+#F*uNL(vo}kfIy!Mu_l`mGQM56-8LKH
z&d&f1*}oMtY$T!-%i}r-{G($^zvo0i?L`T4W?*V<!rZJ*Pta#D1J2$G*qIVO74PuS
zX$x-rp5+{*B?;p3BeP>LZg|b`iTHGg(*+yy$do=k5VtIOyjF)gho>QZwRvP5yB3MY
zX)(>Shl?9rENt0J09|KV-)fLqj1hz+3tuZfg=r>l!}J;$&Y@`wT!Q)mA?yuKPdAXs
zt!&K`tJcyIHK~O4Db2uTPY at 6LE5I)Y9h#%Q6Y*$vB#ebz6oI*5_`X^wQn6zo%yMj%
z9&L<%$yl{P3)7)eh(`m(d%>oQ#^t+F-~{g37V?&?M6<`oq^rG!NEJ`j%d7m~%OzOc
z|CweeCh^quZA<5suV>RY+cZ1dWe1=;3gU7<I0gRDF5cF=n4pU5!EDP$pjLD?Ll*Ig
z=@`e7m)^+3DP4WlC_8?&6SO;?z|!kj0*WngMCtSTdgwAQ``F-Xrh-9P6min|4Mdxi
z+@^!+>F0LzFQDc*+SE+NqA|O3;gX-BaX1sPbc_3<#0!4=9Ww4<={H at SD0WhaN`a{M
z4gqj$v%+JNrVm9F3p6E~cRZ59Y!+g{I~fii3F;c0(PXw~DGkZp9441EF{EuKV!``C
z+7`$cG-^#1U&T48rf|0{lgF<U_dDAcuyS_cM{aI`lCr^$%}QU*%($3qk%LrBXZ>`;
zbe{OF!VA?F?*HhZJ(W9lm6OkK-(CYO9hCinwl)c(1I*dq1}<l#7HTYmX%LCNSax|f
zE3XRCwXAJ7_6w-ObHw2xsb&JVMaZZo(AEslZ*}E}2^(cSZ^u<RM_Kgqq at gOzYOYOR
zqdcWKCqb9P*Gt3Rl@?rYzKE<Q5UTD|=~jX&ov)4uZD6+IJgs`Jysrl7trk7<-rB&O
zqJ34H=h2ILnuLlcvO0JQfCMU5%s}7oAi2c8WcH($+Q_{AGZ<x*2SN<V$TJG*d61%?
z*ytvzeJPA}4H at xo@$6G{83nUFJ_w4{A00=#DEbjH*!9BONZBMeiFw%h*3fHx at 5B?f
zCF8A at +W~oSmEPFIm0R^bo?UH1GG{Wa-4HpkO1?FlyFs!NCDRv5g`H8BsjDYpBs?mw
z(ei8;?G~Fvkam!-g$;c>lgx5{VbAW1{~*E!*U)2x0b&=mr?oC5;AX6{(#wiIOC(VN
ziHeeFnLHuipajpU#<<aM!*p8+y)pVE)Q%j~>g^x&KyN!@Xof2t)$G)ushidBFoiHK
zAF*0c@;Qt`6zz{{l;!5uykX*^GS&fthdl%lg?m_bRj#|ITMK}iHk>>wYX3W3L`w<I
zI at H=z9Y9pg at k>4~Ifnu=D8NBcQ7d#U#t3gbFb0;x#v)G%sF44=@N!ucGu7Fq`+xkp
zMkdNd9ix1_q~y0`!u8A0hSZpt{{Oh&)s6_S{_45x=+77a{>oEXsgWf%Ht<!9E-Nsv
zW^+24auB8v?|luAv_WRufM2AR8^mD=PpVpAYMQHVdG!P$4Z3*(2MdgP66^Zsmh}4}
zv#l#HLc0%izfNn&KKUKD<}Oo;$)kO~=6P$RN4?k}`q0f-dWjJktF?sL*Y8BwCaqQa
z_KA$@r$W159%blAeui!Su{HUQtHG2G{4s;J3585?iM|~B6;!c+J?C=dR#HuW$sN~~
zYo7_s at dJXsmJ)Q)E(vRUJmXQkhGAfV*p at X-zrOGu9RWe?vNm|I3<U9jjQ{>GZ)bM*
zVeqUt2mLU+1fiSj5Z{#QQak-^%u&z-di`xb<(FS;ADUwqvvIwhg-C94=Ww>vdf+8X
zbz|qo3e7gG*C(>lB(%~Bx~R4oxx~m+nSc+9K)@**EuIp!Ag?UurcxPikM)zL(}12v
zYw6v!=jZ&4%|$kM4gi at F&^p3`hNiiVKAQXxX>XY>jLc3ICVzhBW5klZ=`7=n_WVf?
z^|`s?cp$H{w{Di2Ml>!7Rr6i9KS!&)<7##oXGL#n=Z^wKnm^sC0!E`zCGBH0t?jnO
zp7W9ESqm!WiB_9Y)=@c5I-o{%btxfvCAiIE`lBJLyn`@F{2m%oJGD4tIO&sx(}!V&
zz&8-FH$pS6_P>?Gl7w)5xdE>;+)Ls#GN=cLV?jOj{fLT`R05G(m7F+EOqV#b%Vfnu
zQwD&o>{xXUMuh7%@^a(gXJus^djK$=W&q!U4D+>iE;nOw!3RIfbKrGe1Wj4bYP|?E
zV^}7lUW*8=p^&@eh<H2ED7C6=s5el{269CYBnMpvAZcafkA~-arjIxmpLB^4VR-nv
z<uW+8_W|#A)Hg!~nZRy^|94MeG5S*_$=)oxRR%)9LFeRWfJ%V<Va)*YEz+(y>KnS!
zNVMz!ayYJ_jfoHKW9ob_tyw)*xf~C=pY&I`ac5RCN=gjWe%Eb;0 at N);nS;0GmZgN@
ztH-Q?CUkECkc<X!7`<6zi1NIhm|cc{#CEOJ?oHdB#Q840BVQl-gv?EY&nLFKsMTKv
zl;NwBwU5992%H9{t52Qer{1ysXKpw!)p*7B+D9i|Cn?{84Br>2PdI|?H)HdZOJ314
zUYfZn^sjwTBV9}U3b4yAd%zt}$yUf-Hb(wI5R%HCD<anP$7wnJ&-tXE1>uL1?sYt|
z%aTS)9?K(&Z)u^aYfZ-}TZ$R0vJSt8rM`P9%7HYBG at ZK1j3hIxF&hd$6+?=KMy3NH
zpIMwv7(+|8Yl_u2M?RChQDRaza2RC$Y?Nu0xnJXZuJ5OjVzj6&RRFGf5zsh1FQ~Lp
z4<>i67HL|;D~6n`LTdCQynk*mU_l{Whk~{#RMR;LOgI1~24=2Nbe;gVs>O{BUR^eC
z&2WVV><}95&97-BBvX00z*?7TPO@(KamXVu;rMGWBfVPrKq?QKf=D1(Q7Zj7(?aFE
z?`4Ke#45nLLr_Wu7`e+4Ags}s{Mx4P&Y7vW=o--wk at zbXe6y5Uv2T)i|IqX#nf49f
z4H9HC2hgebs~1 at 7FW0PnE{=^|F1nr=5sG7$&u9~uC9v`~N2KK<k3ip{yym3skQqLr
zO?835la6WeA{$VF6H%$P&~wkW=X8t{y6?;Jv{?V at N1mJrG!1htJe}6rF-wXzs0>s%
z{(MG&GbDyjh2*6fan09lkAg+{jHkmFJ%yGsrrH5XHfSWEnA5hZy6u}2Rh*!3$WM=Q
z)hA&KWJ-|OmSVv99|9)czYw%_vT)0m!}L-}4(`{`Ksj92P<+I{I#2y;Y#@*nSU?T~
zk(?R(SelD!qgz3=S$1~^?fjYxME*kVQ+kUM8i~)P4Nk@{ynloCK&;RVUc<CSv6V6L
z=K(KJUojAnE+yn2<0+a8s9rUv*2~(bqF+Od_;gd+h^1>1)@g1X4gV9%2qX4W{EK;Z
zsKO?^yfs5+Q<l5Zk<p=mBub>4psr_=*AC2T4VD1V|2-wv<|QL_E?sW_s*lT{a6fIc
z6(nS^2CAMm$>;We$eb5vN33$^*Cog4F~Xw_9ky5bNn5jzXi3fy!QQ at 4PA*S{v=3DD
zs at g?ZMRUN&FiMm)cf{hSAPcP5mDJn9tgUBZ7F%&8{Z878+5;P-D()0J%{t8>p6aP(
z7D_(NBmUSZow;tlf}aU_dC(~AuMPvR3_RsT`O`e=RP7hmhdHsgS`Wd&W)`k=PTzn+
zt8hD-vG^SxyIue)h^utcy4(k}_WL&m>hrIZXrSTc&+x}5&s}ESZmzbpWfLN$4fC+%
zHIW?xSd1$VSCM-fdb_AAg+iqPR>5k8Q~Ep{5Y5<ja8+!4MW%1qRe2Q__vKY7wQq*s
zU)~WPvbffYS}<6u@$PsLU+Iw;AuWM<96uWuhj&xZiiyc?<dpH1LG}nSjRw#ZCyl6#
zm9z7L>z2OogWch;tT1X}0Bg}fCgv69_{CPWunj{*38pqF5Z!=(+Ud1KoYawF;3_m6
zwGSx6_NXfZ3DVi^$SNm4>!qhzS+v9k-AI>)F~vrdEyPB{Za{qC=T8PE4sVoqEVS(u
zYL~gqsPkBPov?VLovKje&tqWdNB?H}6(`8W`7EbAUpc5$;oXB%E0w}1CZa3TR7xT?
zEIe2)o_*;3H2ind`uQFnhBt~-O;t|9>WjS^DkyH#D_-|R;15`IUgXfBf7S+F9n}gW
zQnjweP97@$KlWI4by{5!@oj}FH%n>Q@~$svo`&YvW<-RY*g5t!3e34D%joP6m_SuS
z>elu)8O27+3If^}3ZE}uYOrc0SHgl*X`-Sm<R!mxyl|%~nt)rHWyx_+C!dAEhPAvH
zCBgm5$!aT(HEJ6)KLmg|iGIavvX&&&=Pp9;-oqQb646^3q(tf?lszc_v3)qm`0S$a
zuLt0ulxMUuUnt&`Z^Z~Fk9XI(@g6|aKCA*M)Sl2*q2UBu${um~VqtSy^Qa at Yq>5;*
z!uOrMk=|b(jZ%p<;c}iBhV<0~_4d2BPw at mss}Hc><_gFv7y24YHKjC2k{v`@*RG2S
z=YFAUsqbPhpJ?0e53=?{t)Y-sfAcM|Ee6^MdTQa38pmjA)|aDMg18>e%?Ib_*iL2S
z6z2}bd?g6s54Fiu_ukUWV21iw4Iwf)hx*S>ZpV7KuR{CHHCtMwzupEI1|jtgq+<D9
z+I=D4&y(Mh+?cUviA_8 at zmQ{&=X(aV%$7HFbvfH`C);IbzE?Au((m$)SD`+{KeTNK
z;*+d_IaRl93wyZ`?HYIj=@V`AIP at IryU7QwYvaOLN=sV}C>{=@gX6t(D;pN1DtGa&
zc9qyL&LO#STxVh}k(}4wmtdFm6NvB!cO at Yp={;BD1O}FK+jA!tDyNVhVk!=+XA$Ic
zgROi&6#6^2b&N>KL<(@zk`Fk7dIj2(shK<#5!G!E^7z=k7buGLcAd$Aqiq5*Sz_Rc
zcyoRFZ9}^tR=L6&pM7uy&RV$#^AbWR;?Hr*mL!Mi=9`ay<2qm3K5 at dGNeYyuhfd=A
zyHSQ9><7*~vCk#ZOLDeo4T^OX!ujODu5NrRCzg6hE34?3P|?gJLGSvkH4giTj46=C
z^Rj?!oY0}MrK6dOBLSN^9GC;Oj?IZ630-c-t_MR=fAc*+W%?RH_X4D^fw;8m|Et((
z6L{)5yIO`14wYZdD^Z#uE}FM(V+)qr+b!BRlCE%B4?x@}z(fa87Y3#8);UJEpo?@3
zxC=`r&bTp~2#fPJfhA$rh0bDIaU6u9F;tpny7q$VCoLB`=;k7cnIIUu%wD6eo;f-m
z{>Y+f-+XqdPZuwbp?;S9!0=Q6>{jbVL6F0AqEk=lXah`hp;|MaAkni|-EE;O&Iln>
z-J({VHXwWf!gLX#;6HQ5$7)N5y8sPd3Wy0x8N2|wQq4E``U*$7u+Q3NDU{^e!JQ1S
zH2436Nkl3=jSgNqTpwP2=I97ffLDCKK19+g44*cu7oH|mt4hOarfXa;O%g3J-YNcW
zBmDQL8^C`)cpzd93Qvf~m5`%2mvpIuBOySxJenkS=F6q4dM)ashof_$r=m^l=e6tS
zp0>@5*?uaRol(tQF2J__hY=MsU+K8LG0P at XLHsHYK>3#r_I^tZxUd1aIHHuIeUr;-
z3QuP&aD)KUXqj^>fR#0Mc{+c+9LO$`oyhXd1K_g>zf}$T^FcW at i(<!b96cClBF#;n
z*w+2o5ITY_N0cdl=(@g<rDpIA12WXl)R}9J<D0#)@D^jgZL1}*>kvMN)F}u>o}sXr
z(`URX3z%V9={U$a<&X#xuMq)A%S^My$Q8rI(_6kv2nxe)C7LX~KJH7K?sbP(_hzFy
zFp`ZpcO`;!8a29LG+fNi0Lz#cOeOEko^0{<ppG3}w8MlS<`UV=c8XWMHB`_a`ye(m
zsAsZHwlKq=J?`P_v{<75*-E1<*1a$)5Mr78CJzuDd6g7936D00^(EHkO}CEm+ZKO_
zwA$H(_j1Z at W{TgXVHuheSG_cMD%pBwV#z)#@(Ov$RyP(Faz?uX=DnZnCyS2t;n;^_
zIv&ToUD)(6o%5CsaV!XrL7q?}eI;{%c8*kj1rgS;4Rsf|t1$N8$3bV#TIM{WIz~Q4
zsus%c*!qr5tymFxT_NFg1&sZH$>F=kaJ>>cb~y5IapG0p1n<P1#+$C^(X=UJzKGw1
zA6*8L!pZ_B&mK=TEu5U1r2A21!l8qIA0ZCY&rKnNZ+dnzfLRt<W~P?TH{2X|@Q2e}
z*6kDtkU`@>NBkVKnSJRL#(Xas)_-V;jgr`gO(2u=MWoKavimQJu%P)v;-7V~F_ORi
zk$xN1;~lJwX%4QkLd{adUPC4A)2?%*@Tpy#q~eEx6<FP-%1o513>X9J9`N74rfwFt
z5ut5{k`>uraqtmEns2vT2STd#sw_`cO*)j36Gl??pydvQG=0Px5SZoI at yE7?%X)Eb
zN01ky(Kxeb=rFfObxnH2j8jBd7zL8WHw$!B!P8DE5U#mu+>tz>Av$QQC`FbZe;f8I
ze}|2^rx&L*_35*zv;T*l*$ph1Ic55Ejw?M#4Lir1>DJ~8UsR38fnSr~7{@YfrizNO
zd;U-L8bWy3>Y3U!*J_Qw at c2>khI#%q!=P&pmRI#~>}pZ<7eVT1jdnFM4{tRLMnB@%
zAqRnGM8xv$(0u#DoNNwi%YA8o_BJR{4>Obki-s-%24>|<xF;fAL at sJV+<zxb40&Xx
zahC{D-v*?M1|$cAX)zcd*J?1eNcKqrQ#~1RFj~(bd+aHonhMq5REW}GPyrB$xrw3?
zs{&WrwNuls-ZnPDM&vr5;{my_*KNnVmRO=nmo5S=aeo&!Ax4kADXD%jBVjvckb{89
zv8o=U<uJrP)O5af66T#f`P<Ly_ at vi~f`(R9;#>O8kZ3a%i)(gN3+|`QjAT&4y at qv$
zTw7soJn1cWhy&=wGN?M+xH#h0b>_FOx(v5d_i93EJql~|psNNT%G5)Z_$x|O4Z^ZI
zwq0I#<IUvaNm3Fp+6Y`EuJ(4ZLdW2v#xV-sTH`26KSsO;q!`aYQqTkkpFuKer0SsR
z;jn_+<uiTD at _`3#2nlaQWSCL&btTHiutt1zZapAGY#~hDJ!Z{8nezMm1cQaAMSr?~
zvf>G$zsgS(3fdbsSD-Me1;Xa0E=oQ`8)p`hYzX*Xb^ukA_s!*Cqy{<k(vg+jQwHrm
z`ogW+m`CW3{Q6tS%Lx3*<C3cYi5UAa!PV!@&#EpDKqq$0uAnpy!NI?EMM-5k+-od(
z=n&Gr7i%zuN>ve|OS08n#*g&MQ^d7ly(&E8lPJ)hT$j4)?Q!PX at Ft%LGNoRLfbN93
z4YGl?q)?6shnxzHnZ==LTyQ!Y_N5)=xSH8GQ6oOO3X$xTG%zSb19KSgZFcW3WF<){
z0c*$t!v-5Ld2`AwZnS(ltYeGCo2Yk5#GEZMD5yI5H7x;-2r`W(Zm=s6-CsY;)VQ?B
z?0wYr)b<|F at cMh4T8!ZN4nzJYS4&|wB~vMJ6S=&qDvO~F_<W7YUjV5Sf!Ut)9>mbZ
zfUaX8gj~<%3uYRL5j&g@&1f-9B4a)1Tw3z=Oc?rQl;3?XRi#Nwr3sUil!6NZc(zI~
z2C#_Y$j|`RwV(uKaacmG!f>B6V2FmbJajYF*^#m%n+5hQz;F~@8K=n{Vec8($nE6H
zVWz<<tJ64_i1w8t0-0XnLBwR=Kv#!?uF7clzf+xRSB;}xDgjo+T?_^6FfU_!>s2mI
zYxntXL7Ur&$cWDaP-OC0ze`VIAQld7W8?B_DH~ri&lK%9I)38vy7wH$N1}k at D?$*K
zBzQYQ_m2Av=0SmEsOMN-D-NrZ{60mpGE4&08XVUW@)YkTg5SYQ&lAcYX;0CHJ1Q|L
zoNJn6VWz<Thx+Qm+*F*xret8IG~^pKi=_YBiP2W{I5|1O=WJpXQ<K*i92{xVCrF4;
zq?$E;+>ttB`*_RoPMT+#FdfFL2#|U#y}SvZ45}XCWu<vRmH*L|Hjd#}dJHwQ#Bwlc
z9(zdjJzJIE+7%M=v^fLckOOn<_*|tXTHYP09F+g9xcYbL`6Z`-M|O1p_V~3NWzlH|
z;C!xl55pV&FHSM1HD$I(&n(aUD!+w=9caD4Mnq-$hyH?D=J~vump#_hF=+moJdt*{
zZOiR|45Pcfib>+9j+S_W2TjlwAn$AZ*lY4bza|TZH~y99A%k4FsXmlVu?p+jRT{W1
zm^nmY^+=hH=~dIq#9m6}{X=+SPO7d1Lla+-IsQhy4u_xpn4f_)&?JL=&0vbQxt(5Z
z-$IB4C at 2^mKmUA6u%4#a3>dMEC;0jz822g<#{?Ba0!91;Y#qPQ`}<i1xLX0 at p?eiO
zG~yF^$MrVA2PR$$9jOX!wH at VV_eR-C&ZeLmG+w0ch>}+Q!;gq+dy;%Ryp&YKt4e`Y
z<6K;I-^#4lU^IuKPO0H_S&fb9l~@qoQzR5dO3%Zcgs5fKNiQ*?Uf>e4J>{4Z)p(gx
zVWfZjD+$$LH59BO at BL8*#ZFizwAiqXR_jR!EQFw9*C&R)+c8tcGRVzJ8`XI#0%@4h
zCo;=@mZ;A{L#Gu!`#((|c;PkydmIpEY?yZgja{m#v3UAtTwpApe_}0pdS<6Z=fm57
zCJV6=<rKDH^Q(TcvOKUde4B=-zRwX?KJWSijfVZH;V(otl-3n<whfwFt0k$M=em0w
zHsUK5t>U$q4u2)T_WRMqaDY-Bx|%OLBcb=dgZUL`wBJSPoZ16W$Pe^!Yr(E_b2b=x
zByZ~i$kEG}wMMyR{!XOrR<9Kxl5Ui4f>^~0jqBPWC19Hk3qhboiNm0S<r(L4|8Vn^
zW9|_Wzdkw|YSXQiOZxqIE0r_TMT^N=QX;_Zhq}hD93yB7;J>gDFkMI{+y3U7T$0Hi
zm(Ya^ru#NlY*M#;E;>F|lV!a*#--<d(BlhJ7b;LM{+hiciu at XmyQMa!Gy^GNNN?pN
zyH-uaKGMfg-Xe{~q&J at o;K}^6QlMfELU9x!C$^L(;UYF*jg550{EDbPCj!gFZvq5C
z-u(X<@k|Z-m at gZlJWTiq`<9!R!t9pMJV(K*lH03W+~g=k$s2;O!|8sFt|m^8k?Mic
z=&O0C7U&OT#qsHC)m}vlZr~HeD%&eq2c}g%q})e&5LEVt^GxhX)^b!`Far}TY!=Nh
zz;vdH+_3ZYx8>SeGsuKe`KSLP;@408 at S|DX`iqk`1x_-C^UVlCP_$4N!9QUc at Ok<%
zMr@#&>)3M^7NoQBJFxUL4L&!rJ}!1 at Jq&TdukxG%F5=yA&Kix{%a!WxriOq~<jDOb
zY)g5Lf?NS*pCwR~H`qJzfz4fGZ)V}K*8y-sC3DNY#a@$a?o%`p$6U=hVkA%MbK(W+
z$5*<K83)NV4=cy*O|WD)fs)9Z(pwM56l~@0(hK!f5cnpr*ip?ZI0_)6GdkbaQx%*&
zr?=4 at Iy8G{WebHPo%2N45+L*Gc?3h5jOjohk7YHDYK}x4|8v7T+o{glCJ!`~9;FQx
z<#GwC0(}8RgO>Ij`2xhr4_zi4_{+Bk(SwvYhnGUY{Ccc4Rfa`v0 at k_Pj7UWbE)@W?
zJvkW7N6a%f+J_z^$wry`io`)%F_Ag%pQ!frB4XXHZTp(ZV+`HI?v-iD0f<7|R4#C%
zU+%#hby74k%HsvX;e)i^vOUGREzl2qMSJd%93tnPjX2NQClo-ZaMy8 at Im5AFXPUk+
zkpKUReN;X>FRv5D at Cwr{xCv7l+ua<P>CHAUDO+*?q_Xc|sKM at Xbgq#%N#@*xSS;pZ
zm=UoJiW8=~V at Hx2u&slaE!9+`PcVA^?N_xa`CQN6!0SGzy?}3Nho{o##~(me9eQ8O
zORjzb`{CgB`9OJ{o##i+uDbcu^^CyWK9HgMyLzp#ErPn~;#s<R9H~PWix+rJeC(S9
zTwyLIj#cvc2g|O_>aLy%FxEANK&D0391k_9 at 5an5%&8+*GU+GKY}EZ32Ek}3c5hpu
zvhVO<uSyo7<DIpAO&{B`gy*m%wTRjG#woc&iV!l=5az+xN|%gyfu5&CJ8VSk!QjKA
z#I`<{0qElXve9<>W}CL{i`0dHD4m&lrIT?EgzXk5xvMX#lF=(3I+fBkG&Gtj;6YP~
zSiVtt4pLceE#Sga-&BXgo?s?)Cp>m3guzG-mX%rI_%+eh1i;OrKTtkAx!){9#}Syn
z>?;sQOqiD+4}uL*hD$a at f5NV0sHkon&VMz<=O)8)6#w;cr)Q_|`fQb5%N5Z)%6DSs
z-?BP)+ZyQ}G7j{Sdcv-Si+DdRxQ264VlWm7Ei2shtR+qeL#yi)tqfP6u#!xy1qacq
zRd?UF&`K69umZ15qh(GIRX$Ag=TfjP0U^$T$_Lw`Vg at aO2rwi|lEY009JNPx9;ODJ
zH7V`REflz~%qSVzg=Wp~-R0w}$R!^zQbU)m7{Toi=-sW*M~{dK3A$$FNSM?eUu06t
zTik~T$c`#hgX(K_!+$CC!DwB|qH1H}JIQaEGlPz%rTrcSL8>D}4%dGJpSqSuPXsQ9
zv^$ZI=8JE)RpHxvQyxT+nzT75akuqSZHu>XTDT-~l(mDeoZy+BQ*k}-9hyGWzHl0<
z=98VU%_Rm7_`ICc=mYL=u4?wnf3Of@`K>L~A28MH9W~THhdsTW@^oONUCp8pa($HG
ze|Q|)eI(x{Dh<L)EWhbvJZfug`;Y at QHj#)snNQLf(?wN6Tju{Dh1ko45QV#0-5nMF
zu3#6(!Fngd!xQLhQWhp~GPgFW28@{FP~YB9v~}`?Ndjd1osKD?9D^JVRg~5K_XTUL
zpuT)~i`~2%%`WmeFHOp~3JNlxF(hxo`qQh_pLOGe0|BY!EsB6MG(F7K0S=MVg9Su0
zW}@<dV4>~dxFz)=aK9V)4(hIi*A!6#WC78yTkMVDwU2Z~NT}louo`|?k)f~28Gg8C
z8^V^N+3P}H#-iRmda?ILM_bpX!XR7?(qGvv^NrixAv}jJ?nExA3;%O$v&xPO|E&qc
zkHdvFGY1{j=p7QW&==#LV#XL^FcpaW+KF^s=Q-j1O<r02>=>z~)OHHEWtB4!LVRvt
zSU$rbTN%e$J0RbKms*5;HNH$K93t&-OZFGglsckSp`%5uW;%?}p&u9tM`Q-#4((h{
z%d_IJ$hTnVEFV#+nXAuk%%c$vSberQfeBAh&<xiGU)R1cN(g%2nU)_B9OD?uQNWZ!
zHHd^oc*~J#BL<+H!>q4#WxL^jX1Y?wc}H}w0L-Qe)L+#SzO4&TY%najNgI<q at xfUx
zPAiP_1soy5o^oqzA7kRK%SPjKU80>e#tk~V!)+>}`Z8l!HvR1W{{jAK8GaWM@*#Vv
zTEo#{GTgOKQ?4W>oy6*%-nCUG(V*CXJ<uk=&BM*iB{1Hb5s~*alTwt4ENJl2FuxXE
z*gV~cvp>9lv^-h!`=?$06)gzkOt7W{>?jUTC4=p-(ut(9^XJ!OS=fTEEsDflkx at fH
z&Mu at pn#(MK^F8}}pAUGwilvFh>-pj?a7ut}4A*S7Uw=TTb at 3u8d`=G}=m=kwK`b=|
z#{v6>8C^_76ieBC|4%|6eysJJwrt*C4=Ol=u(C9C*T3)DBr7|EUwh$X+#yN~-n;tj
z-7JCNNnq9xazzjKw`(WSG9<_IJnLCW7|=idV`p*-&Xgvq5Aoe(-e3szl_0*U2M$M|
ziXx?vyCx2p-9f5Y<VaA${TuH?ZfQWM#^X0IRTzZ5OjY`~3>Py<bOdy3F at E=BdCrtp
zcBc(kQ;?1%>P*bcND`s`oD5PDeYWn^ZgiR8t)GB5Rr5Sf?dO4sMjSP3%*<2Aknjt5
zBrTUp%jBS5eDb`&57k7LQ9~8-LnbkjqkX3tHoM+Vpa8dyG~_GX@=5O`?%?;CxuhNK
zH+AUMbgy-;iQ0ZNfX9-yKUTSJ)5BmeAij2tcZ>Qto_qMg-iJigk<XRZSYeBA2%8PU
z)rE~S1f=7ngkJVxQ$6d_z4%DrwGRV{Lw|HnGXhv;r%ZU4fHTyX%_r~l*cwP2ntyOe
znR1coI9s@!eK>jt7kw5_r at +F`*Si|#rYG4+rc9g6Tztm7x0W{gxa2#&!|5$RbsfzJ
zCH|r-pXSjv at M~n{w5}f^h3`XNse{EqgOVYb!7LVQ`gT)<=O0cQyeP_DNsf}>6YHiw
z2Mr1<MhB^o3Oq`nFH%V>UWDUm)__b0JrSv~y|V1$K9W<M4Tz%9pX<ie6+)H7j{_W%
zF!Mi#k<k0%*d+}d04zTymv75E9y4EWn`r9U%MSMHFJ4tgVO6{qrqO?lR!!tjJ7OJU
zt9W-y&Jh$Dj}*z`m2$7JO_&Sxk9;isHB)!#Hc+_B{$hq7Sth;g(xV07RhOrUI^4}<
zD!|gUO^;4v44p0 at y6`7Y^NYT?HNL5Y5%5yci_c}~|KPr~#mw4XZwNgZP>o2pZE^5P
zwGva?4zI%3<xsgIx^qwtjgNi)s#p&QQ>)1_^1p4M^2^U#RZ+?dO~wi6K{q(LO<GKT
zcP%ZRwISw<f4ERG0XhAodH2A`s9l><l^g#2jD>_k(c1BFlqY6MLAh$Yq0(+j!_C;h
z_k%m&j#dxT3${@rrSn at 6e-eP|$P;M^URLE>)pG)4)C=u5W6c at npsNOoDv*KI5ufh}
z5KqIzl?rW$tX`va?&P4FxD3ratDhuB<_J{#<!P<rk-*ab4yRG<0NM7ITTBLPr0$JG
zfiH<cJ3do)xUSpu_Q821VRi-BehO;wA{a6`a_;_N;`dt|k#`ray>mCli$hm=MqfPc
z%}WE;LWpQ46{sd|PZy0ci7%P3Bxvlzt(YaOD%F$V`rp6qL>%9I>gY}OM;4>p$HPh;
zfR?wal=CR|r)q^>g~JBqGQStwe*YfDzSPijG1=pLxgY4}KgL6_)w%Up`?8;Le($!F
zoHJKc$Thf;;z;Cfj35<E#uRzI`xMrM$1u^tL5#mA_HA%=J9qhg+Z8D<i7D at -;`^$x
zu}Oj6x?>^QBNU&H1W(1(M23GX=jr<APkF3KToOR{q?@(#?p();^SI6KCt;Da%Y~Mo
z>IWQQFF%!WQOP6t<`hBGO_#W`>>2J;7v{|{X%-_!1*s^(wMpC^aIkWoP`R=l|0tp`
zUfahq4GQ3Ud&3_xMRQEM$p9!KA8BQ?h82tuR!sGIB9Xb}N?O6>RVkU1y-xs4lma7Z
z!!9+PV+Rk4mqqf28t<;YQS%T8GI1wPL}R_cgbf;zSegVx2EyI%y?m>>$ck->DZkix
z7fAP$1j8JYFZ}lU1zIvQcmg6Ix8p^$2W9rnej~IYFW8rvgb$I#K&XnFcfl|O-rMAh
z#gEU%Oq at urYt5YTJ?ycm-Lo+e4jt?Tas-%WYe8 at d@GKS-_-u;SsZY%p^MsUdRyvO2
z`*>5eYzJIq1w-qbPneEAqmWuz)yqhD6fMOunZRA*7rYBd<m??JG}!i=)Z*Vvp<-9W
z`!tKoed}{8p at 2_RO|RBQ?xI>^DL7=JTG;=1&1nL#0C#{+fOy=GIw@)IuE#0oyC&`K
z*lqvgY98}Wm|RvBe(efjB%Si3N)Idn<-Vu3&i22eSgcd)pyC5*I<1^OoOHnCa6!`W
zK4s%c9UEb|m^nzW(gHAr3D<$W0qR6UvMg$zWD#Vxdb1n()7>nQw7^AvDCI?t6Fs5=
zpc+Nkr8RU;lsoqEbQf0;HE_1F$a-4=baV0GZI%J6d92-Gb3Ipr;@@P^e8ll9OU`PE
zQGF!u-<}E7sK at yu<clq;SL{UTNF2vhr^jh1(Y{B$r~6Xs(-3HqEl2WQx>g`Pj|LCV
zOy59gB<=$E;hy3fwQ(YI>7#idrlS$WknI~2U{$2u>$qbaeNufKd|or?X0&mwhPnGx
zbi-~=|7u~wQF8CTf$=5KuX5-v3gZm<&9l>Vp$JSb2Ssng)~^zRQoy3O%*Pv)?msOo
z<&Bh-SMk9#>b8s8<IWI+E`4hs4G2Sa2H(1~=6+e|l9+&Hn=b6V#RIEL(a$(?)f`iw
z(}!^$xcr%;kCG*K12F%*_*|Rm`!S<sd8S)vYuX!{z?ekP at 0NJ;^*?cs0;G1q&sB5%
zx%W;Lv=lK%>g^T)qvKcEEC_l^)9LlE1!T*xNpGvVG!4YdL4{gBrsH4H=9vlD@`^OF
z6XV2do)ak`-+lJtMCmAyyW)o1RgkWc=l)kt`QWMMD{|r96-M%X^d*p`R#E&lkhlu^
zvLtgMZJ?W}ptdDy@)ps8a%=)6enFWLy5N)U333Z(D~?a$5wgasMjncx0OY>B5?=61
zc8bvW=B-5*ma#RM`ET6y*i7)pDcK_x9t8yLM6p5ePw^>>(I;~-#r>rlP;tmxYIV4a
z!vGy3LrIURV(Q4>obKFL+A4Rcdx0%AWk(^6%`$hk0b%RG2)oKpPID&9iO4E-KV&NK
zyPA!Z<lc at g2@}JRiqNMa6=(zpb~M4sWtSM{Umv$Ps at IH`HYDBjpsU!_4m^ezSMxv3
zDxkuGCvA2|rv{M^MgdXp-lsCJfF{opDH2^EFKMKcwh(Y0xxvn_su!V_V}+us-q04;
zkrhYqXCXNI=3;SBDZ1-`BsxW=O^d7hQ{!|<Mzj(oYyGmTmMg*YG-^1sI0iQ>@-~)q
zg-lL at uSH-S+_utirD#}&&<3ZDl+(*wZiKwoIjaQFBKaqjWWApcaQxKwyM+58^1r?d
z<eS{3h(i~$XU&5LJ%A^K(Y117U;_tm6gI*8jZ+VeZ{R&s0<6W$Hb%S3_3cJg<E`bZ
zot49I!E#4)&;cQAgYHXHI$eQ at oCrOg8t4)TCK}P&UFOq`v8pk4q%M3;z!)l|UZRw&
z?gdTTv7pS~*h7<0!}4JyQ%a?{Mq^7!dN4PQ at MC^c3QgE=)$8iDi@)Zn(JlT>COnMF
z=V_LOP;6)3iM)Dd9F}QB)Q#4__x<H7pr^TM(m#4%(iNY!4?oP_KN at Rq#;mLX)G?XL
z<qj}YphF-aPl_-y_`|pp2e^tcXv(82oyG-%&4HPt&d{?b^(8p}VgQeyUYHJ-7O-&A
z*r-r_JdNoDAWi8cwbJSu>Wlx4w%e!-IWe`_%?Dp(+n?S+P(HxxU}Pj&KqQFfDo*;f
zpKvRu*CMIsS<GR4`<@FV?Nx76lq6 at R9Jg`gl0VS1;Yk_(MIxq~q?15G^Q)x%TM&XI
zS~!pfjD#dFQ8FtHk>WKa21k?y;Mtacdb1ZUpNTy%eVWzPsV!@bz}!K%9-(t@#eX2B
zmwwoqh}q-1fjP*%jU{De#`+<JxCg8p=X%Oq at hhIkYP~7pTL!avJpSeV%hY5k^Lj&0
zKq`PCHnyb~V+5~SBie+a%&e9ls)l|=1|dNuP3lR)A*Rf<VQyT&Y^J_SN6lI?2Nhw<
z=R|tUX`-dUpA5K>rcn&{W&;*ciUy0WU$Rl?{xNrgEBZ){^TDM^$wR)oD=#lJn^YDF
zAkFUvO_?L?28ql=AQhqZv!&8mwE44b_z&H8T at CXmPZiq<v*9L~S=`__(0bEkAk^dU
ziU at B_QNiIBmDRs7&2UUt|Ku%H)#rXut>2E`9?HzI+G5~%#60ll?xLeTU;Ef}yeL!&
zxHh}`RX}yw1>NdDoV9ri{9v?*aixXMu|0#Z{GRuw7(>)DfIzb7yA=fNbz=*d+^x-(
zygb}KdXqV(I3`^1n)Fp^^tx4soX$2Lu=`YwL at hq!(#pS*|C<YBT74Mz;nUJxf7aQt
z6S}53_=+0idKH(~`olfvi~ZwUcV at yL4BF0-WH5ve(=Vl=r0qshYPUBu4RAy_WHKbo
zP(r>hU_)jyl*Sf;6Me=s)F}`T*TS};VDOW6zpKdJ5wk8+*%W=uAW%I439T-uVPl at r
zj5v!plXoXwW-~6s!H`C|QI8=qzVw*m2Z`g^Yur=)bU&bL-U1?VcxshKmS14j=JA?Q
z4GtlrE#?}Lu?Qg5 at BR5{T%Qdhh2myH(j4qs;8qwKqz^u;3kq6jO^xHxBWrN)^|$Ht
zS=J__^N^n1&Kf!?#arz%jaKnG0H at B3+3ueb<`m=GA*xd;WF&<>VmNg@`;86O?mgYz
z4zOw02jAn)T)&F%MZw1PR0w5$yuS1D6iyWH&n{+nn;)vbM=Ba&k#%5o7h>})ad&Lk
za(9gr7CF5?Vc^&sB#77lJGvZew#ILgS$)H>GstS(V3mKaTZFhJWqkEBat$mnyd@}A
zPUrJMJbMzoszXR?pvP7Pl3j2*CIV*F*-sQ~HYYoqOAYO3><mcPG{12x4_OLuL&VhJ
zW7yEou^KPxjX{egZsCYGT|nELr}OCN^i4^T#8YADWtR*cFgjM0_MbMAM at 4Te#IZ at C
zuZj;M?YEB>ANMbTJ+Zj~^;z~`X>9<hk|HzD`!l;_S|i*5CfTP`8?hDz(e&X$E)7SK
z*YbrbO}1mRjvy2IGvciuX8k5Hque6`h7M|;a_^~_gy8q;6O+3oy{I!5PDZMQpOQ(s
zS#m<EvJ=Z-J~F?AKcX8qen{TniisuvOx7jJ(gEHUDY5ZBLdjD#&c!Gu-vQx8+0>oO
z#aecucT?gKf`<0rKZ*IEo<k{kB^4Zo25BaA>7ND(s(t;uhu`0L0YXJLS1&#X%vgG}
zhQ$6J3HG;VR6myc!-b{nTE5s_ at MdHBl1KM6D=*Td)Q$NAwp=BHnKmX(CFWNLw*`Ws
z at Nw2{rmb4+T)V|c)Az{G6%}hs5R3amRdhP{ky{?(eAC#@z5osT<dYVKbQXB|u{rHJ
zSbRi8GkVCnyxFRP>t3vKgF$hdrt#z^myoW(dg5iou>Z1lVVaV4j$wPE=i8!)(LrQB
zSbT1cYirO>B7&dll*31;E|<U*s~MS@*%hlR-DW5F-Lt&ZEGIoCIhl=msqwM<V8GM*
z%W{A=mC`_w&=7y(sCIL))_nq^1FQ9nxpjoO{JL- at 7v2G>a|E6PGNBO%J<lU9zXd2Z
zxwVv{^5NX at NZ^JuY=UG1%OU>Mt_c|sH(M5%!IA0oJ`(Gk20P|lM!R<QoP>GOnb>9@
z06fy{v5r9n-JW>bv<0i7b-e_BUYDlH!rE?duwC+BE*&jCY&&s|;m#mPB92b^dDo{`
zW6*Pvhv91o^T<ucQllnF-o&J3GPzkB2sc;k5i6g|Gof$86GKmON$6c!@YmOto{2Es
z7rR~m0P4CcvS%`2zgv7<<Djeu!$y7!N3nUGZc>0)R7~M-2Du*`!-uc#2s+X39Y863
z*^IfpGT`ygQ_NRisjIySWE;(2?~kBfA7DoI-$MpEQ<EC1mLu0u^v$=@&XH_30p>gH
z<YdW*wrI at EJm{$W^$);$lUyy05Ub}x^1X>MU;8V!qUQ+}Jd~8wB;C(9<5c#z?u#by
z1*j!xEnK(s8qni$Oq36?PBNJY at K}J?m}P-hdrdUqqja>gKaE3P&+DQVAC|&(IAsN<
zg|k;p4{`c69BC9RJz at tE>B<UH`;<k>iLC&8R|tzkmZfa|2^|hKgXJzes|XTiDAK}S
zg>@OG&cPjUq-ljuy~(Xw2$kOaTi92_9pjU0ouvC}Jd-lrw7z7}{Kov&fS?DPyFN7~
z+oM$Dlyg^*)?S+}^{5tlhxc&W+ex~Wr8W^wR9$B6b(2;+zu6$hpkjXH@>(Kv7V+Rm
ziR~3v1T7MrT;SqZS`g71ao4M<S2Ad^Y*0DIS5I4IPA(@cn9sI<9s;c&As&W=DU!od
zRgVsFF%D;LfhLEn?CkXj5pffkNG at 9lJ`=!+z!yR^1J}Yy=pQH_1d8(Ai&d!hc1>>Z
zqd<+9gFA9Yw at JJL2o`W|#eJ%Tg}BbxLEeOujTY(Hcxj6~#!Yd8*Tpq$N(BLJ;@Nhm
zdj7T at ptO+Dsf&4mMP(6}Xdu{QVK{6(2vX^PJ2mqQLxh58h(YsIS`U>S>ogIDW6$`M
z0*W#EJog35tZ>&lDnsSuN1v#*EL&UveMtZyIEGODnXCP8r$-Xhz7{OhnLWS5YC4-1
zxM9~`@{pRBgOrrf_*Zfz)e>R*6&_iWx*BVf^3{>y#t<>eD6&pZxcr=w$R!pPB&*rK
zk*nJ%$0Wqtl&A&j7Hdu36?S)c&EYv4T9nUn2C at 3@cQi*^Xq_jboGu0gS!M2Z2HJ$)
z83?4mnO`v9*e;xb43?1%b)THZ>`&tCSn6(DVg}>-HX<zURvL-sO;>-lp+DF%YnJCi
z+r2h`&s^Gco2D064%_+V6$_egEC>7tF%mdE(N~8ZD0uGZZaH8KVqOu4(q-IK9LZl<
zj#7;-owbeNW5>q5Nwqw1#X6t`2+7OUlO-rwt8?w<H=*gC)FSZvV6?4duQ&ij!e0gq
zurt>*!#|DDS*VZ=r$YkM>mV;>sugud(yki)l;fL*4o^ja`@}F`@H3tcLK at V>r=9>c
zwYswBa!6{(a#7ljXtB!h%;|wk7E3x(R at BeNc^17(#GHH<W9~P?3N*7CDUGko!!X5}
zil-2l!0ZAM9I=IPZJo_(^}B}EnU&H%LDBJK_(fP{QsSD5{@5x!CZ-p3xpVq%*Mi9P
zL^?`}DC067QKj=GO*AbC_NN@?_sd$b69Rk!=F8=rEj^qO?`?}MWu>Ot8rQWF(xJPl
z#)1ib)fZw@$)?=OJmPBw!DV6Z?HcYN;#dKeX}FywNiA`uE)O{(bfn!79{064be|U%
z<+&TXMeevCUKy0lx4NjOAB`iij!IUtkOD#X4m0|Hdl`I~SZ5Ln(fxdby3ogktF3_$
z0wjxFu7+KMs9fnay@`BtbG3o(i-?Y&djq|T;n%Tlb at t5(k|HaTwa<5NDS!GE;J%tD
zdy<r}1HnM at s(X;Q8aNz%Zv&gf$iffWda?y$1<>XTJ)%MO11(-v$?}n65?Lp0Nb>!%
zawK_;cGlFtsX71ln6E3V6&b<*x7Yrx at i40&FE%>LbvMGyQfrO+^2Tufp787vT=OqU
z>iyvwLJ>#+7xCEA3V&d-TFM!l%OkC#)62#4J2`HKGZr4{^>CZyh-)3_Hh_%*@m!Fd
zUNqM}=0~JKut41!^ZjwD3{TOzB|C^{H6G9cl=IEu*F8hxw|Mh;=~VZ8b5wBNTDlMA
zCCGu9*P&~b%ZTQIp8XRXioV<b{?2ejTxABV){xubK0JRNZP<#Y-!AME2!QV;eB5LF
zbE9+-w88K7VqNa>S5OxLDhZ at Us~EWVy*|!_;vA9Y)%>(3TXqX!+U}`d>4Z*RuI5VG
zvPet2XxpJ6TUIq2?`A at peVBTbOmWm7gA~$WH+Bi~|BJkrOOx(PmAuJ|?%{@Dg6!7I
zS8uMc<1B*qhh)ZCX5Mhk0cW?V7EY?MBQNcSCP;*P4ddi;yx5fuMAS55Hm2>2LV<z(
zR(UzfxQndyoq(czIkq0RV-v_zu@&O-xL)xfBt*lJ(~$E7pIRtRdUvwbgLV>$QM<~?
z&XJK0tn6u6XZ@%ov_4skDkFnt+6EU(8%@TZh~D;XeorPx^Tc#)yl5v$u>A}(8~>=7
zm6<tBZH1y^yZcZqWjl8hN-=zb8^Z^{EW5?Brs_-Lm8hm+++`G&YZkW#Jr<{%h)F5j
zi08%)v>t`ywWl&*6F<{?acy@?>p*0nD|6nfOrn>1CSOD{U at lW&jmGH{YeS^4 at cq_E
zPk_Z#9hq6Si~F9w)w4{^V5|-s1xCxU4DGLRoP?ZDr^Q}uGT2ZUEq*M=pGiiDzw?D%
z<nGCT_bN(=`j~6-AxnWX83pABgoD5t{`7U;XCp88@|7pT;kOz67NL_0y7I^lg3!@0
z^8VTL>8MpR)AE5E%;6U^XwR~1*`hM7@)fkH_Vs&;gD^)2T<x8$?a(*H7}Di!=J3U2
zx}?^no;Nu2Hx at U(r=GedMj~r{!N1;;rP-wWlTSBnUo0&#6Z^X~oz)*#tsZw9C83Lp
zyt_ED#Zi4 at 7m#v^t>Oi^FA&~&_M|=PH=bLKZ~L<h)Zlwp!vqA(<JC_C-nx%rxv3mw
zCCq_8dl%5rHX+~--SX4alU at Cb#EV)8{!Eo(!rBWbfH8nzO^SN7YnpFMHW(mTMBw&x
zLi}5Mw+GL)PJo{r3GdQ^N6yR-n6j0=rUtAZ?=xR|D|z>UL}X^Xc89*m^r9%{)_xx;
zdGff6-Bd3uU69ijL6c at L{cOve1G5o~<(n&Wa6(rr^~I+-eI4)ttKpqQydaQCO!8e)
zxA_!tAPhDAai}dgW%IOB#_a50W7I#X0 at MS;xnnFn+-7~7&t0?HfiZ%+$08QlkAuzm
zpdgE2 at rS<JECTjVF(SVxO3Nl!>bCUTwsz&!%c*pL(x}OgReoSV=-*U}y6i-8+?3_e
zh0PRF2L%K~kRn5=<HH8qz`$UOwQ<;TaK5OJ`z+*Ui*whln&7ycGud3|DM2Emh3zyc
zFoF{bPe!24RAWarfib!)zZqu~fFWE;AH{>MJhpU{Un-etw+o4CNB!!RzLW2%x55P>
z-}Unw368>wA|IK>%-T+fYv4=9GqJ;SEr~FPB)K2fN`pzo at 5N!dN>9s}C0+a)Z%uZ}
zHfT0p8 at ncTTLhO|W}p>q<<vQ`5I_F9oePYT4KgTBR51heH78X_{k*4Og6rZRJlAO)
zPEV#uUR7gHxA|(pq|+-dTdTg~dDbcL9L1&30ccTK+1R0B^7OG2ewk=Fvp5(8oNXk}
zQ{w8q?gN9xq^kCSCw?XqbNq9uK`Q5X#-C+ThP$aX0*k;y%bvO{&%8u2NyV5R(j=6V
zc;V?E{vknIV(|?su1J+V;k1zbrqada-<>QwQ#a;^F3j-`eFS3)lQin at pPIaeX?*IL
z4zgjvT;y at c9D+~fKs}i=>*?}PdHpyCk6>nUAnY4Kt{B6liDzF178rs at 3<><;F$Z+w
zwB~#|i<|z?FtC(1Q4-M0c0}_r%m6`2AU&}^A?-C-ayOlc<pTlsW0}e2k$F`Ss_ySB
zBe6YX$lsa_l0XdtSE??hgL2}NnaGzQfu~15p+1vE+rJ!lb7^HZ5FiwQG13*g8NGoU
zpTPu^VL`YnCsNZnt%bn&TZ%-5`_-<M*6v(D^GQO5-}r70o#mtF#W&J_|4Z@<4-yKw
z5V at ZDmZ66C_<_ at p9Z{7P*JcWg-zR5S0$qnC+mv;%ukhuWKjtKz$sx2(!$@`L3ydVn
z1((FhF^_-wJM>m$lov5B9QZ)bOX=k>*KiuC!U}IzsQ*?gG|eW}Xfx9+>5P<q6-5-_
zOaj_%x5{CBSNkz=--IXrNy)gN6^_i~K*BA%1VGMXs+px8n98p2gMu>h#IS$4mZu$^
z;lMm|1m2ku3dn5y32_Z9{Au|mp|J>srWRt{6`#2S^b{XN7$<GH>5#P;GRb%-4NYjh
z0qgXCoHbP at _@gS#h+BhBwEg_9F}cK$6`B`Cod;HE3Ipo&-?=J7nimzncqttbmG?Qv
zmK^3GhY-zW(J2WZ(PPgq&m8?-o&Z*3Pqx{!f*|&MMe3%JV#R~Ifuiz^z3MDNmO{xl
zm$GXxgxm#%X*PPbix|=yQ35+c1|Hy&u;D6jfT{CI=q6zX@!EmHrbA(e_a`w-rLBFN
zwEO}6B?29=qCAeBP9&jdt3$?*9*xj18Lue=us*l`FYtZrz=VZu1m5@#pX*0y{#Z_h
zOqjsK6a<5D9RzF-zK8%rK)k<O0TLQnp$yWD3E_Exhm`!>3>QNhZM95e_=8l96-Inz
zbKVg0Gt-qaDXB?!!))3k8Ph(t%xq)3r)$R=g9#+wl!4B>95f1n{vF;gN{!UflpzNW
z!(d at nhOdz3SKLrLlfBw`gA}xVQHWBM#$wugGbB<945B*YD`1A?a)A+()dEN%%hL8d
zP&1sy7kjwFB;u9UH=+6WkVxtQj4|U^ApSt{qJ8F?!?(;M;vBqAR<(SrnZt>vHq`Uh
z4wBS}KKQK<FaEv&m+C=kD4&J)_SlO8poB-X at pLbNa0E+l?2 at U=sl}l<b4mWNIXWw4
z0w^BE(i=^EN$oTX8H;H^9ve6vNKG^1K?&{cos6MxnAvipnNjFf5O=^25Qq|8at;yi
zT-&cg)zmGUrA^GN&M6}DE;Z4hs;FH3iwHN8<U;tW37|Pv7xUa+?(O`M=_WwZiGrLB
z!U&E|k!F)mxZ&qkncBdbd|5P+7NW%N?!R0U4;dCr%M%^%s0xow<>9J`)FpuoWdTk7
z6v#h%pR>gcv+}RHeJv$E+&*ATyACv+<k%OWvsg~<jb92p`^2GV&Ie-#qK>pz;awUQ
zqqx4dPi6G<q1sy?H`{AIs?3jUyyNx#RK`_VE|&n%ETvq{_3(rE)BX*scSrlMK1d;;
zx<|mSHGs<B*fW!mxNm>40@)0&00s_;HjAE<kq`|><u03AskB2lD?9}qaD|6xa%GBt
zk&FGPNo&d#w2-P{YMhOG4pzV^U~pAz1IAVs*3>JCe0i^Z;F#Ki(B`6s4-TIaSc|cU
zLfgCe{vIa=rv3eF{24{NEOE;JO;lK`bs!Fi7AGTYyPIR4A>HYHX=HKu;(rgPPETZe
zSK4V%m(R3+D^tpRu|0k2bJ7qf&tbCGx5H at 2FHzvSWS^uTTbD!Vd#cE$Q(LW4(t!XK
zBi`a{_{Kj7M|_T7qRbwLSr-3--pqg7iA>P3CEU;rw*@?JySd(Ct^&Vf;RjoBB?6BU
z+}`nTzb@|3bhOWIXQu_HU{4s|6m`$$ME2p&1S||}pfU0H#M~(cjcx-Sds#aV at Hb9Y
z0y4uF)5}NN(cNxeD1RO at D`GjW)a%jsX;JWEbGt6BvO*oM?w<S_OjoLh4FItXCg(K`
z#;Ca>U9c6+7$gWkg{xO9piXuIv}9eUX45Pcmm#-i2II|FgaYYNIt+~1RACP}C;kRR
z=+{NwPU3$6)J6XES0chk{@tF$vC`VLQB+eJQIk$dJcMyY#`?pAgtnqev(o-Hfro*E
z^A~dI_~;d%hMI6gTb`|Gwtttr;|sZHc;D}taodagmRxR5fkeh3!oGa2U~Ilwc|hB;
zR<yn0x2tFm6m%$-jbL$kwm`54Er?7wto+EbByJi&wfbw1V_`xFZ`pUJxqse3-Q+jp
z&iOf$Thq0`BuO%B9u?zZt$ci}41E>iBe~&Tzwnwm5gEn20tz^p73Mrv&PMhrR~l}#
z{dw%axV;r5$3Gl<>4tv&xBfGL$XEtjp)3WXUEtn_A!sbslwupe&LpeXa3QS<i2a<V
zzusBmp)$$4ZuHyY2#ty~sPE%R5JgQ7Q&+H>I3MJ$qf5=Lj#9UaZ^lAi>FOL}w0Mw8
z!exVfpnFFn7^E5K_`QgC;6p`M9)vx54lQakP)!Z;y<yy{()|*lU8{<xRjlTK;S^v}
z^vhOIdH7_4M`;%gFF-|bfe|Y^=r27QN3AR8>6ZQfnWc4v#;nwdix55oM3>brS#E}Z
z-<#?h1?@CC7l0V~nD at NT;CB(0c=q5C&f{#L9VE at enAAIVcMPiRE0hOBY&!!Ry=NHh
zUF#>05%7T+=9VK_*XE{?@2&upRYP`kf at kmjmDqowrQv1c3B9XbA*6oh^0cuv7sqYO
zQt{$JL2EmtOr}S&_FE2!i}J5!6Dh#&0haU?Mk#4B)XXN^fT?x^W4F at ayg$PyEj<**
zm_b-6d|F9KqDN{-HWi0n$p;J=Z8E&jdkUs7Qx>2C))(nfB<1Vyt$LU1FKk6{D5>1S
z*TXr7xdn+j&8m$+Fo1#Htuo7FUiM}!Ug}IoI#f*;>^W|@`Ied2uc5DMz%hH00iv=d
zVtbBl58ur!Z|c5FTc~|i`9G~xn`R@%j!U5P+<llP(-ECgQWk at M@N4bAd9G&wWK`{;
z<Eu`Y$%Mm7Lojh>mNKtoB#q_ at c)_WOS^>KBgpm-p$k&_$%z_*)^rgKuawW+TUdI!u
zq@)d4iP;zSe3nIR)Tt-r9REr8 at aQz5T!7IMcFp at 1+yz(KF5C1}5O|jLXWJUCkulN+
z-|(cMZ(Y?AkM1f<p?RFrj!Oi at aj~1vL_7FfQAtGsF`EOg%|6EwkIwR%3`jfzb@~Pr
zKIhKIA at I>cOIxVB`K&*<*q1L)QjKd<$}7tL-RaDWO4@}m#0!Ex9LsUa&E-u{I_tP_
zP0;Hbf!W~fINb<53Br)B*)#bo%Yhk!rN)HKT(dIAAQyvcav at -uA0mnwQ!R3CElY8o
zA-&1+mh5=yA9W;I#tZE4|7)QI?2tU>4~MlO<=S^{QL_EcCe3Ka+7|M^1YWLBxn+ck
zt~DXhs*H%A&$|TsaF9pghjl5GdsVU`c9ljCNq?2=;;kYR+i39NAOEoK-S0itAl+qY
z6tU-TWdcj@@>8kmNkwVPe35xlsChI1f;{g#0KLru#)!YO&!a9ipb_$6ToMV2&z9h#
zi;iJ}(v&d&05 at xr5I}v>V#?-9ko3p~$B#BROpo?3)Egu6#w3sfjNF^}J*V!c#Fq at m
zqE;#M0i%9ZqP=hG2A0gWi8lqiAl^8^NIgl-1DN_>WF9+gFkn~f&iE9+2z*3?0>oPW
zsg at fNA++~ubrv-kEMbf)txk*ugb>w3&VrXi=3QCCv}tPFv4rWcpEMoDiS7R7JLozD
z`9%6ls#FN|nFvG%o}#ioiJ%afu~9UzGju0A7Mr6RtT_RBN5uslTBO%rPaFIc8?Q>N
zFjaMtIKQ^MZ at Wd9{=55f(a+4-{BMc!LaX#c%6jWv8Rsmk5g+OHucTQ61NAVhDcgrD
z1b%MQe{r})7%916XVWvdP9mr31A-TKP>E at W^$A5vBsY&6=6_Etr3igjJE?RHtEAD`
zUf)j|?`%8{xIQT>4#6j1+S7Bd8X%uXi)JfaMo>MpQvSc%f%}fsP`?ANlH1aBsgol6
z6XLk(Cf at Nq+5>oLPPGl6yx(FS$D-MumA}GV%PlL~eAg^E%(kV8C4_}m7hHTHC_k%4
z3s-14JL)X&93x2ulzIKc)I(>~Rpgr8M at -Z2$a}Rx at ufO)H8#NemtVuo&S0_Z$msO_
zqu=~rukN?Yn^Gz<t=qGfG2TiQHfe*(ci>hJti4v$$-4kG2^HF_7=X70v8P086~Va<
zzzqQ&keBtiuW-s*@9Eu18=LoDc=)D%(=|!e({z)gxNveF<PXDWO0l>4B$V*76c+5T
zI=3*U_$y|dIh~$6wuhc_F|@U at eXA*KU$D0a#e1_qLTJju5D?Mgx4j5^X`<Lx!hRdF
zBM+RW+b)SCl+4%!k18HJOGDu;+A!#$FczQ1BQ3t&z38)qS}86G_A;K5)(v`d67waU
z+D6 at 47+CUO=CUT$aHXJi$0q!SOhRO0KO7wDWS)LpJ`P_xJqwk(>iorRZ(<YcEg?Sd
zWO|WR8(0p{J<-bZ1(72VdCE^g9*M^i3 at UYynf^M&<Hn84EA(mxPu3K+<Oq-w-?<|E
zoIf90p*Ud)PCF+BM}3(4kcYKqqH73nMHc=C!^`En5*%xj0?|3Y^!e|?uDhQ7ja3-y
z%>Ioae(}4B_(%>bCwr+plz)~a=|x}5!Ga}{Sbyz+TuK|QPG+TDJ1>lka#N+yP1g*5
z8nY;(+j#Amk|JbB$Np>xk{=hE=VQF>A3($AZZ?VXtGvDk-N%#y)285|&j&5QJmOA8
zbs5 at vXdUX5=W8d=Q`V&|3ZMDa=>bh-JjrrzS&NXP5)B>SO&I*10xv at J1NWf7tAogX
zZ=HWjVByQl&rlLH%Z{R>(C>mD-;vY#<STi4!_?&rl_U!(`a8=K-O<NsYMn1`4((44
zvmdV(*+BUwx@}Fl%f5qvc|_jMnqc!veZX at XQ*Uz}$P=ln=Z7>$UJ at j6*gWZNb+H+V
z_ws~7*>@8TM69$e>X$96P=S#gJ4o5i9N`Bda4`=UHu#$)-F-$*I<`06PLQ_3noSQU
zdA?^oE6V_{{rM|ukN{?lu@*~Z%f$<qQP!3<ECRLdjG5jPD%Tt83jM#eam2SM&z at Al
zyr77wV*_aa<Q}=Kz1#$P at A;%!aKVUHza{DwhHYXYRLHAM#ps}V!bd at _8aTlR_$AJ>
zUCi=T-{!lSD$$focU8|2t)*JI<bhIs>%Ywb0U{P&dB-$oK=BuItK+7*GW()CpK=Yw
zX4Wjr3{c-CtT>UiY&a?-&D2;ItCvtC-%bOZW`TY{CnUxw^=1)(x5|$$*Fi)Y1?&>s
zVdVkQ-=CI|hC}}8v&?}cOE=|}%#EJ+Y;X>WzA(yPrf#iwhL%b~*x(sB#e7t^eagTz
z6&t6HfB=08^<gg=R#7meFc!Z at m+8O#a-;Xg{1V|2P!a*78UN<R*@BE{X?aV4rLVEE
z7Y5{|KpKmOW>G-)5NHC5?JR}ea^ALOzvYOVF7-;lge{&CelQ+0m+NAl*sPm1E1#?=
zN?G8LNE31g_mX$f8l^4{#*AMpgA{@xD#TNpF2opp3Ak9zj$ddu`!G6HrX1m*iuMr!
zUR%N%Fqf8);c(bYFWa-D8Uwa83j$$oZAL1o1MbA-$>1-~YqaPUmPz!GXpu$7fg3ou
zU9SN<{HN~+&HK8MnaP~o;sm#izT3q%!O(WJqF7&e1bUSeh~<TOX0bi1nf|giBJFVw
z>DUz%_G<tO615a|DYSTPJtfCwDaee!4F{oH)>hV=C+6X(6K8B!YD&J2;YhEf6LrKY
z#WpkHr0837T`wl)N?ooR+u=(11!C<{fwuR!ir#p^6ZIYQeK|LicbMk7;3&*95SifB
zvGMuSc{oT5wL7ef>slFW)w*k!1*o59EFGS*nLNQC%Sz48y`9QSt~xy&mIz-uMn;{4
zhp79QfcD0Pt?8&rB$xWt+p-dsi&DRkOOrjAq!(>YW at 3QFM_kO%P6|)aSR6Ribe94>
z5j|jvu*^uUCnLB{74CHpu`F~`<UtbqODwV~3r8~5_CXp~YVs{GwAM6{v9?6N`uKl&
zXlf~??K(fl-_Zl7svpUX?#AhARs^TV2VFZL=07a at P4TzR9?zdcb!;r-UgSKjfdbXK
zoB-ke#BV)M`}C1u{M_JDiA-L{-i_iU*-eRIoD2N1M8s>J8M=nzgWT}q?DJqSi{q&u
zNjm#G6n-_gK8tY&3Yxbt+d7Lz_-fB43}cQcILE2<J34Y(!>OpoLu?n=00>pH(ru8v
zy|btAb*JR*oVFi*2_WA{#kOOeMrO)D2>oDFRSZFTUGAa$<^~=A+y3mM^z))viq05h
zPz&sr#}s-cFI`DBT8|N%z1m}w?DeNS)}HN|JxJhq07^lUj7h%Qx&Rw**^Mv-mHoT4
zV at biYO*8QU71KxyD6%#V#L3q+0)*wW0fzyoc-}FR;iYGVUfODP{XXNSHOb?HR(ECq
zHHJJ?VKl71l5`|79z}}f=qXzpS=LFTt at 9Ofc>NenzBu|ppAjgyaY2uUsV6C*?kAAB
zkUVm^EHrmTmS|t>mz86C!L5qw*U^0$<pKT_eRQovH6=$(=cabJ_H5iA<pM*Y69Fe&
zBHbuAojsv_7l#|b`E4kArteLkK)r<iedQ-_kSjhAr;$K?sndaaWnb5XFui^|JCeS=
zkf)E;=P?p5{d{9}37 at xTj`>a~>bovT8%AzKUFin@(8K6qtFN&<D`wK1k9d9XRqYi0
zSCa%)69}&shHTG&zSQZ|L%W^p?O!`iq<qh{@xXq|24k%cyY-V-ZDMcpO!Y|ajY$Fw
zE2hFH)fl`~j&Ni0-HNK~qFo^>hD|IC*L(TPON%}4ifD|Pvfq6s;Y~>?J~HZ41_sn+
z6EjzvyD=8*KjUI>5A27~Kj?O>EV;gH><Srkyrh0$T!K?i`3 at agd-Rr?s2anycM&HZ
z<wfi`(mmSm8B;f0?2(H6gT_eHuxqFx8h-%zeYDkZCPRh0;I0tw>iisWj)CGToHw+A
zpdRQ$NTaY~?AcQ{2JlZuXi`z&IlsfKV?wVjKiC}I*_5RWD2z8`v?+HJ0Z_*f+={7V
zS|>xz-gWCVV;7yBr}%hxTU$N!O#uN&F?&39H4>T=l8TzD0rhXECoPw+4=Pl(m~Qti
zt}CV1<f+}xz}8947=mk}`!ESZBuR at Rfq->nXwXwp)CwyPMLbi!LBU$WjJ)jjDdS?w
zd>z`^$~BCiu?S+SmyEef-<N=8R9`6yt*85J3Rrkt!s$kG4~k35BtGvuBe{;|_AAS&
zHPq{(zCYc at 4Of)>S3!WoY6y=D5SIz=hVzP6ASe66K*uoo-Gv at Cfb?Gmp3zDgE}^5!
zQV8wO12wryk+*9&^(jBr#YNwk=(aZJyo*?-QCU>Y13P%PMGf;il(ON;JkcNozxw|#
z(8`4vfd(;Vb*g21a|I*UYq;oA$z_u-=3!6p7Jp5XB`OLL1T2r@;17&~JgU@`qf*!*
z3kEh$|I|{C#j2X>q;}@j8RO7X%EoD^w>cn8A at pp;R)o!a?m*9&S?%b-NEZiFqU3#v
zokpSIdpxfV`V)B0aQIl3QxbrxN#S;GXkd7!wsfzUsZ$FB=aTm92ud`I`qn*<eF8zr
z878DL$(;4Fw5sw{oyJo^PYtze11HmjiH%GPOR<{}6D4-v5JNc6RY4Olf4m56I3^S+
zGtV3$hokxq77JQ~Ady`w55wQIyLUGoUSD<Op3C!Qwfaqwn`@vRy=B2_F&Xe05F0t)
z*jMJh6Mi4~;LS8B@@Ii|eM-gh(mFQ-+|zmDup&IMgFi?~@c=&q&<^)EGOT4pHDJ2S
z3Qa+?-8cLFeOFr(VRG;RcRTWd=m;}!%{0Fr>*q|B**_;y#Y>#SqV!rW8o at I+=dh8q
zYaaSP2zewjynne0lzs-!QB>T1oqpBEtNhp3()#*Pj~IjMcU(^)^jI$0T<P#-Hz+D(
z+-?3%2Hwivg>$0Ii+0Brrr6l<Fb!P!-q#B{Gw}GJ>21x=)I5xKDovkMD)pPXj_jlY
z<c$xgV)EW at Tj^v_HHtF{JHab?&>P<FehRr59`u1Oi6B8~$_IJB*KCOMK1~3#(X1%v
zA`}RMUaUhyTXTPJ!7km0OPMC7R6C9nZFn;DRKP`AsX4nzn9S&({Wjjc0O%&{`7XL$
z20_3{oz+dB>wPwjac&PezM-vlJBHyF^F`8b)n5r3#n7cC_Wycm9IEG>X~VT_Y53)&
zRs^ANfz?-!fNsrno9^4x8}B4%8*qqg%d at DPEJ+EE(cGq)v77iPOdp?QOG)Laz0g?w
zAjMxVD-&a at s#59I>mVCB6{LCT=z6U9ocDH$ddzI}A~CZX0EX}x;XkH(_lNI;k)T<a
z?T>H?hG3Rg`w@%-`+vwGS<HVr<%&E>iqZ<)u4t(jWnYf>uAia!6JW8YyvPH{?eX9)
zj6fE5#FAD)athm$O<KNdBB<C<M5uw;1K%y@%&VGmXPog{or}8pTO#Cu(QP^YOI7%U
z0zRz41R*4Wg`&0Ac-seV8Wg4zzO^DE8x~n?m6+p+FsN%7)@Pb at y?Cs^q^L*WdFQ{z
z0WuL%u3o$)T9y#!7Ny8 at S(OCuYBoo0yP^$Th5cj?s0;o48+OuwN#uvyu{*?-UbPU>
zDAwTx{9?I-4SHP0Fw_CEn*ZOtzJZ9th*+uZ?6ik;MS89AUw^BkGid|2?Suwk^cV?r
z6YaWNaGy4uGfc!PsqfX0g|LT}XN%6a4`M?^*u)Z8uTFGZBW2+%o{Nwu7uoOkM(E?c
zCV~J)GLj_L!D(lWFVVSiIsyZ6Bt|soKjcu6niAs(5ZJoy69&+~raI|%O+sr_clA8p
zNN$rHL)T(Y)(8upAStuUVqoZoWQ2bz4?<M4TGgEFv4Yb;ndq$9c#5QF`|Umc0Ze0y
zP at EL#g~S1 at y<aNIa#`!8I?S%ec*}DZ153p#gVN+}to0PZAI?phZJRG?F!NRgPB5f?
zdJj0FEtixfLbT>{Lwqn}lnc%oMgHS18=6-1giqpMlvKuK9uv%h(qB=ADE at 0n=U>;+
zgj|6PEG{#=&Vx at AHe6L=-nkf!kem$d`aAATMVY)H_cB8C8l_#KiT*j0lbK72^q`AE
zyH=lk5>Ex_ck8+wCH-cA<R?<0LU!8!d9 at apH@2B}cC~qde8ZqaV6wt`7Jz^!LYwH6
zcQ_EZU^cDtNrgzKVK}r0X*Z+a_Ej}Yd=koTS)TC*y6*3_sRt&|h^yOWR^^k=hpW6L
zccuuqitCjm5VvG**SYDZy`Q$um}$S)Pik6GQ2 at vzgZV+T*NlibqP^H-ymnByt>4_9
z9x$O=a=?-iQcX{-%`Y0{uAs^(D&*m}c{Hamk(_FCt5IYaQXGG(UIB{%qRVxWD?HpL
z3U8vRet?KjSR`%bth|XA8QYHy1b~$|XTKEE^B*<lXxk{avm$w15YNx&tefEhg=M=K
zO>uXf`zZPRAK_ZPiqve;lz99=&vZaU6849a=P2o|Su#0Pli~|bG}EWzlDl65$TviY
z_p1A=Z}RGV?#3e$1(uo-ZN*5kj?h{*r?3YTHF0pG`j6xK8Cm`A2x|^Kp%V*%cw`h!
zwdg|?>R)dI!J2wCW&}c9@{<v*J}mv|%oVZdtefaZ&aqJOwG&Cg5m5mQ1K*pG(Qd3G
zR9=V1a>)KYrw#+8rO-RR+WG1kukSzlr4C&vb{743o8nV|%26b8eNq?^yUX<^QDyxM
zL=mITgKEs654L7>b|59RH$%=}iLaFOt3L-GUr2_%`L-EKLFp9Ei|3%|9L$8UxCC_8
zjM8cb`!rJAPs;;M+`y|QtA2*+xCpPeEbVu4#B()vh2Wz)u{*uj^UnokSCwXEO<aVN
zjViBMvUi`2duvMWRN+BcV8TNU(X=U(_=cmacfEw2uw3q#5b03VkE*7a9GwG<Pwr)f
z(lD#q(`M6f-d0CS7nVgKwES)N?=u92vZ|R|_f(wgz`8pxpTV*nszPm6!Huqbekh@!
zZ`6-#e>}y2 at xL%<%PA$w6G7ga+As~?2dM*EE^h5nH+r}VTNOjyn3~<{1 at _Al;Nu_k
zwYo$6&MR at G`jj$DJ{pK1)3(4f{wd6JMYKesbH5{Ej at A{U$aW$$Ghxu-5bYOV;Q5Jv
z6YJJyv8!=bp&%m6IcteHg4X`A>z+}b*G`-sM^YDiCU5me5hDsdBy`ZDj+ at SX&mZIF
z|EC+uAfiZ}$0NdLeCr=93tuVWk=4EujuxgeyMN1oDwQBMFwXwK$lLEDI&Rd at 4ffl3
zn6L_r8ZS|2(cXJ>e7sS%z?x&9iZj@{6Z{`i(~>HK3Y(+C%@h^?`x)Zv_S%s*q(+zx
zt$xE{yJ^yr&V}OmKgSyJ+Yq>xq0M+&xC8Yl?}d at m+6p1vKccfPQl26*C_}S0x=ks-
zX(nJYfaxin6R1 at k&oypNM4SrMiO&|KJ6S84M(spMu5v~tS(S<yUnGWU*3Jh$&hA-v
zEuW475_f2#lG0ID@*VWpKFE7*XNL3_?t-TeO(V(Z|AhuUouLyXBI{Ik^FobL`PDke
z&#N5oeG>Ti=wJELr&KmO>%q^Zfh0ISong*X at L&U0y35K_2w0je*0Z2q$iH<&rgcpB
z at K?-}phG9(b1T47=#{NB1S7%ag5KA}f%5{NhHMe4XKK~S;^4yPuNiK~isvQYQX)c;
z<H3$AqtJ`u3>SW{81Q=V5Hd;y_Sr8+V`Aqz at g)9Jw!*)2Ubw+*wI<q^t at h1v_&22O
z(X}FwA&UKXUb=FLL1Do^z$!0O{0#@BryCuS$`46_u6pu-l=WnYH<gnN^i)J|_+HJL
zHJVvC<1Ve*O4OloDC)qjo)Ai~vt<r${{IO at auC4tBPOM{w7S(c#niP8Y|LVB1DQ_d
znm><&AY at MNrW*H-d{4+)SDqPPeonvjC*7R$y!LUOV8w>`?fN4DM~X1Ghm6vNTN_9F
zy_>o)7Hon?s=!N-^~Amk<|jrtl;#|$5I^=jAvYI0d($9JHo>}T`guz7NnW5F{qM|#
zG_*%B#xz!>#FJ=9F-?E|Q4>Lrv6_`IH||K}0)Nr%(>+TZA-F at G$Ge8 at g7lZc86e$S
zIdo0S+vY4rgeg5~65?mN%84)e|D17<sM*=x7Rv!agwWw}`4Vv2jt&qWd+){U1Dqr+
zaQ$z1adwv)N0*wp?I0FNHo^dR3DdPjnhpJskVk7UINBRwE?C{HF1cBV`T?1JR=4xC
zS4wZoUdaVC0rK<dU``0rX74<=uPS_m-26x{Kr{5~>TQeP;N6&k{D{G>nJgF<eJKFq
zy?q10(~OV2RwJ9_bJxNCz^DY5>W$p}1^SJr at nN(YxnermMagg~2AectS^u!8y<W8M
zM#4^WSVSpC+ko%;lZ7X`3p`Hy3oJt}pv9i@={}j8C;zECL4d3$LOIdeOX?BBY}d+5
zC-x^#`u*)lQ4LtPUJLcJlcc;)RLkqjBT;br9o2W?g@;xBCIF^EwYRgb3BA_I%7;aS
zqF^FUYaLFIW=H;0?Qcye)MvPpXIX;x7i`JBb(`b4LYiIk$=>Y{o0$YD2?P?82_h|C
zB8%p0Aia#GBXTg;`<D{~BV0^|DrXFanV1+yw>JYf3NOMEk5`3MgMcvMULFZK0siCO
z&Fl0SzGDffF52`Q#TU=rB?f|zz|@OiUeclz&1SC#Su%D7;hO#a?{+jl&N}_$o%v|$
zS~yxh_f$Wu@{+kQBd^<RRat^%8gDnt7t*y(d4P1uHK9aqK#(*RhEVV0yGvbl!3vi;
zlH|nTWiq2wD+`}X??$%6#nG at zOC92?l3YrSO&)yX17<KXM+QbUxIp|ncbrAo2%fkm
zZ`^7rW)&-!J<cHegY3A7 at IGP3#BUDJQ}n at EHH&_8LHpIK;)7EI*y|y0OQ at YeV3r&F
zonsc0$*hCk<OgrR*Y5DTYkTk;A%}<GBUbS)CCgGI5yr?uSitOfC<WX530|`{NRCfV
z#&h1|broLP2+|v?g~?`DQi8%^2ZLrIfRU(|+DU}xXfty;?N_v<pdQLL_IOMi?@i4;
zGC$kZ*|Xi_?E=~rM&s12EOo|7PbmAP`V+(g>{~?c;B~Ruh2AYEbn&^p^h+4}TyYcM
z;3&xU6)0GU^eokmXj~NO`55Jhu8-qHQ*sF{toKXh5CMkSyl_$nC+IW))W4a*n8iM)
z^PlPWin_`PhQcQ)1c%(-L#>wVh#LX8*sMQU1PtSO-PPl~=5n{(#Pv=Mz&_+t0^`jf
zQKJjYTg8d;tzlVAR${&#M1l_(BP*0?Zv at ssf9TK>w?F)`0iU9uPx}7luygo+iXV!V
z*)M#?+aKvLOg^-kmw-sDnWo@}dYB<JUp<%mc@}L8>hJ+~8}Z~B_DNCi#&$^3;pFEC
zY9Moyb0F4tK;0w=S^tf3z_^&VUd(zwh25P7w|SWRY}LB=6u-{VEuXdFzeT at JR25_v
z<Xk&wG^EVj=H>}mPS})I%?!PkH&q%)0refWltMU`f10Y&E7zaXy7DB8k&L5ChH3&F
zw!hN%$Sx}OP!rYx%?HoskE|2%G$W0^LLn`2zBWQ&eb!70i=yF~)k+iaVU_4aO~O>9
zIPjrf_4VF5F}e`+@)<`P9*&$gnTK^|hY)4C&QyoYOX`7~97H#Hcj~GCZ*po4VGQ8g
zEZDSWYI7DgOS>P#9Pd9tlMGQn6=5=0hDh-0|GvAcvrvB+t0ks_>xZ?aL?LiUJzX{6
zRb9xJDQnNBJpyi!?-KPNQ#l1PJ_AK}DcVVdKFp!<1DB$YmGQioNIO3b6Sa&s at m!LS
za9^RWT54GuqY<j(JgdNnAHFI2in!GPA=;m(?1fttEhxYAs?)YX0v=vxag0{>pD*^%
zVZ>8iyLBua*Q)H@=(g1Z59n{_zCiVDOx!VBbA7 at ws+!DlpwA{@cQatxzp}w+ZlDZ#
zP>e!3c2znTM9Hh#TXd1K>5MeD*+oQuF+I5?J6(i+c)oWB$_{^mCkOOXi54$Cwxx}~
zHXPW(FJf)J<%*9`wvur8(Qubm0s-oDlVId^1TC|<*r+bw<H-&6r1nuwwk35V%cF1f
zQf<iA#>VPUEJ$iTWB`2&2G2qO5U%TrvJKocbC0mz=yOTp?Bhau+Y`Z}ahJPd0Ot0K
zL#8S^u~9BO9o7-1n%PjKZ-Sx9Xya{Cy;sp0p?z?IzT<wX9M0Pl={bVjg-?21fNltC
zji>Ywb0n=tLXx{4h1xzjA{}zl;OUNJ6f2HzV|C=WTC|2<)5iV{sYYJrwf)2w9?u&5
z{Jw$<@2ZIHO#~I)c}^k+hy#&G{(lq}#Rj%Iy>7||8A2rZ|Anq01G-9jd(yj*^ZPXv
ziZXzuEAq|kg+h#$K{@{>jJ-Y?GKR)#tE at BT^-=FFG$I2m-sw5Sarjp+Kcl$Pt~DI}
zy!zE&hVR&$-{3K2TZq}3p||Aa2fC9wTSTW99j)(hd>m3t)(s)hd$il0gO4;7v-aAD
zCo`Rd)c2?}&jY_KQh9JCxI`)g$mv at bkPpeD#@~L at A$7CI_Uz)e^}k?`EYkd4f at q_q
z;{1NaiM!qQVaG4LbTvws#|w`;Jm(F*<X*dbZ)>a1w9Qt+77_m#Xwph3SUS at jn!G=}
zJwkrWV<s at G2<QI)8~S%-9`;Rf^Tj!&eUB;L>_q<iX{Psi;-1`VV-q37Br^DJKgBk9
zT{k{wfwkT>VW}koMlXn=wb^J$LF|@HXHD+-Y+M7;Ics`FyI%=*19g#b>!u-2y6$>6
zQ$BVEwfi^1?VF3*y2fEo(`~}3?FV#VE07?mQUuZB8I-|}UPlWXBD?sVDy@~yfX!hz
z4%Vuv18tPCbY597MKO1vJoN5iri)JJZ25!#-uZy^MR^IcVjjviEtcs`AN`QPNhCzP
zyW|+d*7&<6E6M at Aa{88*whxe3f(7c(@+xkvLY#opS5ugv5m!})`iHwXZM#)gaM<n0
z8UV>tG}0$e4kR#?$_;W23xgjCm|>o5cf7|duvqRJlEWJuL@)yt*O<Kks;&N;D5_M`
zw^Hca5PU;0!#-_6(S0Z99}b~eGbQydz|v^Xbjx$V4v^JkCGykV&!Q4cs-4IsW!Yc0
zb|y=TBVGJVAC=fbVE{}WHRoZH<?Gwc%p<G#NS$`uhRX$TT(5fb?L0fkZYm;}hwV3D
z`rI}+R&_JtoBG>cw_AFCy3O-rg2a?6Nbl%C-gMHpjqCvW>9rK9_X=rW(`1wwX4EVw
zmrVgw!%{@#{>(&E`k=nY7gGvPmS*Q4&u!cvP20vFOiQrl*O3pj-pW6|_t7kAJ+Dl9
z<uZ5jZUxZ$-`72^@8k|~nN0(LoS?D?AtsBXKpM$qI}Gq_<<`@reV<}J at Q_4DQY;^~
zLQWKd&0XrS8C{8!uk8UgSZ^#AflhOIs-sTf_LEnWHIc;|`K<49!69#vYuHiEN<L%%
zo(wII3PkbGn(P4udjv51X*u9F0s!?z%)8mYtQk>*86x>s%ucUT3-ngcMB!Fhhs|3$
zh8vnE46%TrXZBflS6 at 1k5dV>P$lTlMczIxP1d{IiWk`$2vd*qbRFg#cBIAQyQbbEP
zcM#Xt0!T)p4PWQdc+O=CLqc@#ViG$`xe>$Ua8HG^BMen5Qx?_mDlY&onBTA^SL2B(
z;=`+m&tqG{gwZE$w_siGVh%a_T{ScgMIgE8N%&>AO(Am_>)<%c<fit03s5IV{okCE
z6IV2tJ<C<lXMI{=`KU2y)Pf;3AI#3H8I$By8NHM+nkT4QL~;m5nxg^Oteaa8*z^$<
z6+?!QIs;ox$@VIxz4J0?k4l#O80_HfSa?6BCZ%yOHDQAxIq4v+2u{9>r?!Q584|!=
z#g%<={rsf?JlM=;0dQ`e{%(CR3cWIBXXa_?zxl+lhgP$^IA<j17Rjn)lk9Y5(O=KI
z`49_<GxDx$D>)d!D_NsTpyxS*3tf2}jYx4q3aHuf+PYLm_Y9|ySxJ(VRxGw?sk*|n
zw_r at 3^5(8ObjwrSrSijFY;ZhDYTWaC?+XHA*NEv7<S&^GKzDWH4K8Oyd#@Io;k5)-
z;#J~7SvHDN{S)R8#3tf{t~QRuq9I&S2ywT3r}!>*w_44$J!Vs?*IT0 at kw_Fu=Z!!$
zh>kt;?jK&<O7E7D)|U(p(Q#PJuLl)7VQw@!D}C^`EWq{J`w8G#j<iqB%?Xc?u;_9A
zwq%OZW8+3tG$hf1<kgK8j4&28;%a<ATL?6?!6+lHdYxVSsmH_Z;{+HBAFrTy1kfAP
z5-}MyCY at x*1{<6v(1$HQ+sHI0L--ehMNX at aycO|yC4Sd&av|BzTcuOWs5Do7ndWQ9
zh?OZfcZ{k3=8Y@<R~Y|pZ=81+m4xbu-2AC(N&I~Nwl-LH0l!>*f0)}rtf++jyK}OO
zFSM>8d+o)tbvo`)45l418i!?TBO8$|r9MxGX}^G-7~TSMPu0%THH;0F>C%x8&t^@z
z=W|zi5%YFmdv- at R7I%BftS=AsPsO;VQ5e|rjq$R)MGq2ki(t6oUFJ&AV??!seTIch
zp4OG2;CssHNjM)#@!{PzWjUY)y)x{nM?|?;NWu5 at W~Sq}V6%-b?|<^Mfr=aZ!#YD~
z?dt+Bf3|vjBhL&LGFbxbWCo%U{)vo%hpm{ZVQiJ3k5IX1t%abxrFS>6m)S%CSeyZT
z*d<q3_OKT76^@4qW`_}+er&S71gq96l at _+K4C63N?W2?b{ih-RH7?ypl_?#uLoZ|u
zLeXM$;2e#XgY0zoNVI=lJmO)~d{&(?kpXVkC!j<D#@Sg&*R<N{%BgzBA^cyz=^$vk
zrAXr%>ILU6<WYU}j5fJFgyM={Ycy}qU*Wtsxoix?$3;tJ4rV_#eOHaF79QmAtQ8}O
zg+&0_GMm0EcKAN3{G3YGPzV|c>Rws{!z_2 at vqJ85&c6Xjz?!Kw+2j$nZI6-(g*=gX
zoof=R0Gv0QBhTO!RrEZ!8A|$XsS0-L<=SlG6u`rVVVUzX>VuCQg9jVpczgYha~g0k
zR9lLy)T(sIf;CFRod`gQs3-%Zwh6L=d^oS;oN^L4cy>V}MCWcDe$H4nj^klg04XMx
zdd+^E3CS&J7$oGzquQB2y3u_n^)Q$u_>s~DU-Z~HaVFSuB%TzRuXq=Uf)4eG^CISB
z(E at puo~Q9IjT0ht<t%7SiEBz2v0s~fXAmR#SfvZN5}x+Nbi*6dOk?iv90&QCsn#5p
zHz at ush2u7lNO_g$z&cUCW(A?de6QI~g46ljGJf;p-DL<B>K9!*<7i=e#mM9RY<AlD
z{xeND<k5 at l1w#7L56=?P*6*bVy*<KL7nrn#uOQfRz7Rs`3yQD%WdVx1m9B>}OI^M6
zD964-Y%~s}fpJB@!#8!kmW0A0s)r^ZA=_ at f7<+)u(Y6-;YPvh7wO1Lc%`VHl&2DN~
zE4Db*QcpP4jR&bdE1cW<dnav`HUKr4`hR?P?9`|c65#M$3F?&LV+zAYJu>?61&2w2
zlHj{9(xo4z9aGs2I8iL~x?0+Msn=dE51~0T<XOdZ5m7BRn at s#m>UDz`uQnbdVE_{s
zmB?sLA-!NIO2D09%?cMG9#SWSX(tX!$dM1l|Et at Rz=LsnC&Gu2F^#@JLroZl;(Xt{
z{SH3+yi1J?80nC&r2m?gtIoJ%0ufvGX9jFAeI<vu7fnIbChk}(AYm<T#B{?;xdg^Q
zp~ZvGwIK4z6pu;E1h3cTRtEM1R-NJ5Rbv~v(k_y)QvwHa|3KL@&k3{6wItjEGPOZ@
zf-P13&Z%S;NDFSGS$(^-wz;*#sf()~uD21}z%rXL8E9|j#aW!*`W{DM@=R%|y8aN2
zfcX^R#8{&g+?4Xu{OVR37s!;x51nvSQYED<Xmr@<Aoo-e=R@(vGgGNO)RK!zo_N{v
zzIPeC+p#r_2<4VXXbfZuF;=jy3i!Q%(t6ybb6w2OX=U=cQ!t&)&L1rsysS?||4Fu;
z1*tQxD(^}7lq!!VyCue#QQND6Fam?GFuLD at v95%P`Ge~B2jg{gw!emuXq&em9lH0&
zrQj!03qaa9+CL)aVZZ^Jf+NNJp&)JR>R3C&qme4NQyjsDuf#&4{cWhNV7zXNV&!&9
zTVCA>s3CwYHRXHi0_^)~Gjbl{QDhwy{vcIwiMumlgX2&H%<953qv-t<VyV|@c3+s<
z*W5X)VQRZQdD03O-{x%*ii8Md!rN?@VP+ZD)XZMUQ^u?t8I9W8>pL~m9zLC at MXMH`
zAZWQ$jtFzcx2)pU!yut at UGJ7fm;;nN@@)u}6(G)w=;Y-^{|jt5#}4AHFw;(Ca+5Gd
zIRa7cdD*WiIk0d$k%Rt#i3AL=>TZIQ+}Y6Dg#~*6l}AZOH+?}Zy<1lL5i&U>{CpDz
zko;k0+v{2UGU|BPL_UJ)=PEP)PWq52>!wi|!T)q%&BAXqWolFqvYYFeln+Y2zVRZ|
z at ZJUV(78}Kav6GXp~hM;K{(#rZ76QN?iYWxCTBXx4aJhoP&tobk_p)?RfTWx-VMx<
z-MXcOM#vjU+xmjYOd6ymF~Uwqoqo><=02AQzW=@vRHBLJlSfQsA2)z(JR4NgC>EmJ
zh{YdzB{bO90E>Mg&OH;8GNo{tB~^K-<{yjSKKTpx|KMW_$qmTEcY#4a<Os%!>dQDg
z0Ww$+kEB%eRU}0-D4 at ZF23G~h7n$DPavBDaMEhR1tF401ZIY-aRaTofmVjb^Cf#My
zBW<NAzt3)T0N;C<E at 4b8qF<!z0k90fq~C*Lh;+=#|JrsiS at o;Dfq{=%{h+TM#zF*-
zl at -~<aq;e5I7d1}I%xVZK|z3V1wo%xMmF&4A%TaC2#oY3gG$BWeu82USOnYb$NoH@
z(Owj<+HX2sB*WM$<L@>zAKRtso8fj{%D+xetHLg`(p?UgKOkmWc;N|0V;g{4En4~p
zL8WtTwU4_KO<c4amjLPHCg5Z;Wmzk}Us3?at7WZ?-ME>a;8 at cH^}4g`Z}e at WN<VU9
z1?IjmV{QhZyF=mK6l}}!F3ecHh|ABtNb9VB_^93y5r>pu&YpjErUs3QQW5z~&bP&G
z!B<)x-Z2SZMMR at OJX=^`)U10OgDiH^;7324+DMKF{PgfMR%Dc4n8f_ocJ at Cgge9{K
zTJK}1h8~id#-0ce2*EM6AvU~<SyeMp>fn?otx*w<kJp~(Sc+o1p?Bfx2vRSUa%6KV
zT9bWDXLp8FPLOBuO3GL#zpQsxh_?=9EU9$FfJ0jc%)44kDc5-H+0kd$LF&2ZgoL3D
z_4Hyj4`_os3+mN|uhow3X{uNp95L&D6ZMuFtXot|P{R6=$+yg+3zFS}pM^zYoMydY
zQ$N65V+?w^#hpW(rGQQ>O=nU&4QsYXM-zUjcqX*j*NIiTTZU6*UIG*8Bm23;emIE%
z+#gNLF&im!I<U;N4TYtWX9c*sLXC%rWX%eOj&Dzu at -{Jgk)eIA4a1mw(r539U$Js$
z$&U<gWmR$h6PE{5MJSaj7+#9A3@&nH-}d=(PkLa}#41Ra at l?;ho1Rv=*ruf7SYvrv
zN*S$64CsSA8EH;@BdQZ#2(&?~Kh`O2HtYIhMCh_8^c=Km&MVWmgw7BL&ETARuv*S~
zTHW{+cX%M0>@JMtUZhF5RWtxlqy{eMz>qM~g|~{ELyicv5J{=q^}#x}A)n|$ZS;v5
zmQGN9x>+Z|009^mAnZz)01V;HkWHspV?a at Q5MxXcIR?e#eEbozmG6@*+!RCfou%#-
z-2CwMu+PGYlhq|JZ5_igQk>87;*|VSGyOYaPGHJC1!;sG*uxt@|Itm5gDja`-Xfr>
zhBTc8Sa3z~9R7B;XdSkKN>!PM3KSG;uYs9{ru3qLJ95o5?NnB>m27l93sHXS;E+lO
zyl(psJ5{&pjs1VBmsB-g$wU5`E*MqYSGH4Zvd15i+U>1#3nRVZSQNG-*iQ@<$QJjE
zj}h6r7I5Mv-z_#w35ZujLfV(=6vV0qbr*ETm0>pc at bA|mLdyyInrdYJ5|z?$Ow*e^
zm=ZqYHvH~}c>6(4?JXDpo-B^t9&IBD2=hC1?{h9iL(KSE7qaJQ+`qC8v})68I;c8j
z-tTINk2UwaB55}ln<?i&^l#;AJFYuqs;fvXV=fFJdOp=f1lq`*M7r*xC1=2;4MhQd
zM<?3uzTmx==;d7NFm+HuLaT>1Gi{pln^KGAVk*7D;+1EEtnSh$RsQR2?AP(0yL8u?
z)0Ni`p}D6;ELY8gRIj at wd+(A(LN%Nk=i*H at 2a>@7pl$@{g+8<dnuLz#9(B|O3DBTq
zx_<^Gg2I3AQ8ILHJ|S<M1u3Yjuw8I-M-<V9?ghaO4m)3Ge)iV?54bWYW%|TpB!tz*
zXYg(gW%8_{PJ1HL3RF2nZX&_-=R*VUs&E>a&>giB0~9A=qX5AxE585yudecVs|nfG
z9&F(pdho&R)~Ttl_h%aIV5KkRn&yvSrw<gBNO(ItC<0yBaiNS(qi<Aec&hWP0_$DM
zo{r-!)Jk{>(W6?!5rkm${w}tG%2235#}PQ4aH4&%Y>*=Po)RxEOAT0jmAtK9vulQX
z at 5_zc#u5NTixtl!ARPr-40O6a2S+qrwQxF$pPVbY-BPu!xJ^Nr4%oO^8E!vlBc^VI
z&+btMeChrTm{U7ztmkn-iV_Gq2Hri#02x>{5@=UI4h!7{zJgqz2ZTkP?QB{5vcf&s
zFFYkc)M=n#k69`d$CGuW#;t!;INz^*T#1Pu+LCsnlqXRjLr<eVrAnPbT_4%Kx`=#+
ztGOq?C(F(l#+?`s5i&*8_i)FY at GFJ|zRRCX7zsOn9nKX<#vm#u4y5h$J`=cO$Qb(J
z7E|RmB0-QZa~v$u&fiQ$Xo}ak+A}ycvaZu6_Io)3G*q4gAjFFo2naUD)_QU6!>fU^
zp)=Cvti at r)+~}Jf3NHHGk<SV+nfqzDQ{3 at ptZxr0kN{EDoJmqV$3Vo+N3c>~?CGz-
zT**k)X=V!W at mecbr`LZ#+p?VGajv{9iQO|Y!dg;&M}cs(eL|4YV{xSE^lyoQM}s}A
zToMUf=y*>y;OyK}9j7kAr>8$e%Ez`kI37l}lHz6l-;pW%^fq)M*Kf=po&jo?IjqXG
zd!B)lz)@_-YY-!Z#n&smlMMU1<JYWTy;aA6-8gwqH_tMn<HMEew0n0q$zYHEnH^Lo
z09=|*PTvoMf#yM}Wd1hyGBtt!ov}gx({S4P6sOAm53Xjfd+Nko0V#KS^5SvK#IdZ;
zzO;0TQF%+>l_nTQssn+*%jchcI~S)k;5HmBHcpCUYlJH2Qv5sJoT6(9-(lQSK1>ZC
zPvaK>rReJ7emc5-<i29m%~P#P1Y+_q22WRlt9AMe&hm_YrPZ4qsX;RvQ`5D4WGV;=
z at G9K-ki3mJZ2-9kvH4*KyJ?-N)f23zF(5I17P1 at Oc1D41*IH*GCSFEa`J*u=Ec)dk
z>8m2FbpGY&UVp#A#Vg{NzZW2A9UpkXx_wogCOYk6-yRzUA0+FMF4z^qPOaJ3GqEX`
zmB#ZSq;mEeL<Xott`Ynp45ZXo;nP{MDP*3p at U?LPY$D;I)|${^IV)~0A_a9g<BiRE
zO$^3SjOS^%?h7gM&;uk&hSG30{acBH(Bvhs?K%bIZF?wR0U+-&xu{@7P{fwTM=V53
z(kQ;^S(*MonO4Ga(5xdyVVXN%ylOA59Xk=FHqiEPZQK39I8B`*{(v=bi^!z7QtKrW
zLQI1y>pB^GcZqXTSk%wXAbk`OWA%~<(^f1&B|%WmO01;+xpj&Fq()$%_L-YWxG4q!
z)9Nt~3_mqQU%w#erh71}34AJovBn*hB|YMOzdEDcn2;uooZP?>)n;Sa_h=@29G(qo
zphaD*l098v?1*+%3oW}+Yu%yCu)}Xs1J{{4KqlZ~ZP-Jp>pR1b=>d-PGa-+|ocz`|
zf0<_i208*swue~4a(VBSGwJ}@-(SGv{Mfa=;I^;qYBC6b(9>6CX-ily9vEt+Is7y7
z#dox+BPjxmb>xDA%jxUwA|fI0v(gO&^_!ECy3SdaI4tT#`wTnWu9xg}^V9 at 9o;eb2
z8ER!LOkX?0TiHn~GTXX!U4w&1t}8Y1R9U}qGzZx8!<Fcf7ETH1{uUre3lhT|^IZzy
zE?Vc=9PimR*HT6p2LWlfqW0z3llbjH;*c+5*~`xd?CC2Q4&p9#MJL1KNLgbCC4Xw-
zz|Js^Bn67@)HxTZXOBkxu3s+Cfalj40J8$FVz2%-;I{&Wg#SElBpkj#w<l=X7#X4i
zmucH9TB+&ObpQ^2<jq2S57;vG=AVCbgm(u!nJ*z;j5u-14zWJsD$juHx^q8y-l_cg
zwc6U6uH#T#PQG5I7s%!1SSj{g$b14JCRH3Ut=@89%G|gVBdDTGUc6(L?3`hx%XG=A
z>&cl~mmvYqq}j at wGK+}FF4z~!1&?ga&tTNB2v;O{3wQp at 52wx;H#LMfsx5!FTJ5D;
z>vFR<n=LI3*nJx6KT#d%Shcr$bO+$-Bk^mkeAu4d4&*@#4e-E9xC%{Vag`Dis=1jG
zr(7fQW?=4I_B>1#o9T9ViIBIlR&&(qGUjhGs{U17e2mFwffRLo#RX8407L5>P(p&H
zZIcyrm<DDZL|c+?i~>p1vB2vKCIk}6>KN1u2+{9>o{RxTl<^nS$XAnn3rgT^l<^}>
zUb&EfjzsG#W1q(p2%%C3OX$%ulq=hOzxH;Z8bBkQL at ZdvFT*+D_ge*r4>#YjWQ08@
zNF`Rifv){ZKb9XM=le!p<)dYnOz_?3FoR9SF}FKKt at Z`V^<`tA8-WP}{D0ZCx)r6s
zy}Tv*KMx{%G+;_8x=|ypC+}}5E<O%hj%UD0WG`%$HO at +he;>=-^s#Z%<tKLU+PKBd
zV9aYMn#hG&F*!JbfW^pQ>EtUbtcYl5esm%c=2CV{X?30SZ&zfP%LFl4V7h_~?NR;>
zE*(n|IGeOPmzm96Iarq at _&x3ZMRo*WSiMRctFgf2M6>6uM(dB`_q($2s&mC#?kIo0
z)z|nh82X64v#DA&)fcqSWu^_h+|05e0Mt+iR-7Mplc9 at d9W#;CdCv3a??bcRZf+H5
za?AuPkJZg=kG*%SE)oZ5WETBnh75RZAwAZVfNashik=;k>CX!+#15R-`Me3e3{5!;
z0nDGUkUmrn|Jskp-n#h=(5Lr%#6=wnf5Ra_R at X?w&0#5w#Ay$2${*tDJX}r&gKoC>
zzb%7hF(v+%XTdX&aOv_8t`&PRm at XwTAd$Votj3Df>48AEOPQf>YKNf&Vj9C*1#STX
z3<pkoYtI(`!s4nuw~7C(W}IHEG9Tq<6E|6TV5rVKkd;A`7C$T13=nqpTlX?toPlD&
zKVB)m{pEZ|TL-!;hACPx`egIu;!iR%qw6rmqN5CP`UiRMlnMYhK*+zd!DN|dPhStP
z^%PZADTcX4&56wV)W6F1F-8*4k#N^hz>B!u-1T{zEUD}hWn&pxH--f{nn45{oEt{S
zbl9Yh7^@e77T$4YN27`_@*%R${nuyE>|@u%%o`ZS&*?Gz*162%D?+I6oymH3V~W=x
zoDH?_(KfY}xC5jh=mIay#4Z7R+8Rw*F6iyXKUJvP1E?RP?oilX at c7`SW8k<&aYxWm
z+D72A!`b+~+(@SiuRCuI@=ykBjb4yGD at +l8VQp`6Ud;I#zVNoox8 at O1%VKC{2 at CGo
zt^?iCKDIC(h1q-Z4ceGqNv2L1sS4@!U>-aU0eHtC;?^OOOk(0GH8$B#d`6&#Q3tr`
z%#7z9ptlr7i))fSHX=wNBL6_3Mr7T<{?9+w9$7~jhs`UWBi%?>sjB)RQG-E^SEtVB
z7vO|37(csSVLgyx^-caTm~?_-*QB^ny5Q at GVqkvB>Dq|gS%O-0y+d?`<_}C_|0Fl|
zl52Ew0)t(8i2-4YCo*r9Pw+8#6Yj;hJzs34su=wXC#aW{fg6OX9AKF<%nC8-)G at iX
zgubD^U<H}ksw^5g(m7c>{!?IZmGb}7cP(SZ-yT$oCI!v%)V}>f3C^5Jtbrl<!?H+<
zaucr5<4)4!9`XWq^XnR*-gn*pN)vxp$7x>H8v3gF-m1#XosP~%)k71|+zWy8htLKU
ze8I~<7Jvi@@L|IUCyj}5dJyAMC0qz=xAs(#^wf8kDQdtBhoYlL4ltAG%jMRQNFUfs
z!V9+SW-#kc=WFnA<hD*JVMB_&E&?vDx-M{^&0Q~&=TzD4B?QSOx;Yez=|>u<LSZ=X
ziUX%<Pxq@}gEXF*cTP;op;ui_2EyyUBn%_TIRTxo#E`h<JRm1L^;6CYX=m&E#PYM?
zPhTpFj{D9xxV5vE+=<jU(PdhDl5WH6X0sUZE0r;x0 at QfcJX9)3H)F+Cmw{O1H>n1;
z!Xl^~ALk1A`AN;|F|P?V=PWtaB7a?c`x5FLv+gd1M;cnEG6`A_Gq>dm9}>i2hyu?%
z>d3RLvFK>A05`gpFx at -tp@yD1Q5MEtP#Fw9YY1mg(2$jc#9Tzn$z-BkU$JGX#!r)S
zqEPF(=jMu(Fd-ON-{(mrJY+s%qK&n17(5z+Ot4Cg!~c!8AOb at J!}DE~d+}s}?ZoO-
zT!69-KPfkdjWZt-$2hdk^$QK7gN=KDXirVy?!55G84i4%*VXD<-5ssG(Y|sL9?I5&
z2>ct0(I(>b-vqe9hyXcjtNyJ$Xx$fUwK|WSGA8;hdQ9$tH;Mf&`eu`D+702A!Z4X_
zH+^ye3gtC%+ at O6jbik+uGR#r1Jee)~77^V(sHf7)CI`jLTg at 8iX5pv<ZKbupc<T9t
zxF=CT<&r5)O=Ze^l1m|;6_1vW4 at 1W8x_q?W3E$mx*<cP8kD|;7sIicM%*1!m)$dHw
z!dVn7Wj`C4aENm?!*D?I0JOE4`W6hTw|8iQHS`G{=~$d8asWn2+dDN*96e~UUz^)i
zQWmf9j><QZ(&M0vaLJrx^{L#V84E3ZlD$Ul at OjN@AfNiw7MB>M;_!=~>-(OB&;^xI
zLmuMHxxnxMx*GpJyGng|laO4jDktH(aRO~cZr{P9$rgqt<Tj}6w=?l#*kO+YyOf`k
z2|^ZmSE0V0?bm{>_K@~hTNc%i at l9X}fFg&n{`>@o7rdiZniLG@`Cga+3Wqv*6-CO)
zlHXLBxLlfJH(H(Ew<QJqH9hc9BR(G%8k~>_8^N=@I|}M%5Xs9=nKztZRsxVlhr|sA
zrmZH#kuD98-Sus=hjFYInts+_ZM~+qVBw{A#mt#zQ^(*3B7=+()g&<g^AA%%{ze^Y
zg5DYi04y?OaI+jeGAvhPDWlhPh2<Q#rGs5w_J>fa1HFDgOhKIPc=Lh?rN+IUs0P=;
zX6?O0x$TH9zr1JSJvVAYNF%WZ#$Jh9RWFPDol{276%~(T2lFT0 at +`N=;J2Zl><<EK
zHG^pqd397*5 at pxYtOOjeYAl=^<1!G!0z*A;zfq-VaQ(snJ*b#eg9l$E**HS>dvTNM
zjnW(3XQ5m1rs|)Ujoj;aHV`1O{(2^dscOdbJAAkz-<WO#&k!}V;15--B=B>%c<v}R
zwk$q^YmE~!#jp=mDY_L*B{M$_7?HnOX68I7R{2VmMcva+Qz>^HsvQ7l5i_8Cj*10k
zUo3<+8aYIJ_g8~Ni&gw$&w+f}vRKTMU;RYR5fk^sl6V~&OXSA&{*3dlh$1W_BFYii
zuR|J}FJpS>-fY@!JQ+6lUAC*QAIy at l6=6RjDKjWqRj%5wY^HCHYU-sULy3avzpHsM
z at nb_EB~U9xYSf9FN~h6NTME2XOEuv5a5m<%*xmuH4tk6dhSvCsP;-b>e<2r-x}3vW
zn04&uS{z8rKS}tG1dh`jLpl#72n{APvn6``IGJDbU$<aRv!ItnI0Ky98&M$O<>p&(
z;I?fIB*dF*(@*pA*eeDjvC2AdN1PGDEsW3ds{VMbBCSVO{Sg(j!`h&*hbs{=MVPrP
zIMF3M;)a_6Frr647fuqf;xFDeF6^>nu817{oDx7=GJvUYR<GNn5D;;<x74RVAk1nX
zJtA5ux|T%B!5PZ9Em>}a25?8k`P4M;%R*way)zI&A)!P7-B at viyRk4a?yz45{`sTS
z<oQ+KP&Nn_uH>e~oap5m8fe>3ao%%ZLl^ShR;;WtZf^rvW#lXIB at ICjTM~|f16x>D
zPh5 at M;=W?cP<Gs?HSqkVdghWj*UlCY51wFzZu==p9yz}T!eXA_Ez;kN*9mB7_ta=9
z(1<$Rj<(}_78xj`qhnVMRM*K?u2CWV_GS1GgJ9M5kKBq3>xW*<B#AV(SeO0yG;^xY
z{vU at VR=_188Bk2o^8_KLp%sKFt7#&4jF>fwsyTzC2(n&XNB at 8EF}rI<b%3?5t=U3P
z$D;>AB?0ogVSL`Jmd?g`?c=TD>lo({%d<bP_~4 at XHW`Ma{fA^%vtc>;aEfZN&sN#!
zL#us~Ls(tWiYPA*{<62#CFVtXtH?|$?IXy*LQ_JeCz+GlD*`tfFtsTN_e1KWV$iRK
zXLF8CyRANPHHpRzx;_7P_~7bv_4e2dNnRwD7@)OLjFNoUrs~GnSklqMPL%?WZ-txG
zlE?{f-aFl8w=?Q6gJUmM-|8mfvpIvz6SuLVCk*g+*ho0TjZvAlOB$(v8}Y+Xlb#B6
z9Bi#-8iGPiSw=vbB~wpMh+iSdsd03Hj{N4r1GdaL_dt!T-^^CGxT6f&2rVy8ht<N0
zRHfaPG3CxmA{_tc+B;KMg3of-yMAd%5r9RYF?+NUw`?v^u)=GgLw-W{yZLwv^|V{o
zIH3Fr%_M-k4#A~uz;Jw$4hOdfooY_H3Um5aX)|-eZ8Q9+$suWE at +D%Ay!|k4)qguS
zHbDR+?7k%Mkn0qbrFZSqikb1-!vkCR+3$-z9TgH|=~{(!Q#fDMl~p!Bdj}~t-y=j#
zq+xGRB}WUC=ZGuWYSGCXEsFli2ezi@<@7?m7;3#tY_=GaY9a1lOw9X1^@HRoP?hQR
z6!OWQoV7hTZR1{e)|D9dNYr<ohzfswPE(0~I5ap#L-F}VMh)myT>uO5Aj}I5a-j13
zP3=z^#k$S8tAx{PVur~~-PsgvMIcu3p`<OJVy;)BKKL4mY60Kth_NpDe5)5BPl6w6
zsmT7opv2NUp&!K<Pmh^a+;H_!xyo|@;FVbRm?Oho$VPLN1Y$HUJhgt at 9P8l{^ssl%
zRm~bpFit;XS5o~c8$X>wJ@$f-ZldjgN5TPYIL at gzrNID79}5ggKIe-KXUCBQAb(fZ
zxk;LRa|^Ep-$49=*QWztKn{M%!e7)F2X*TUSpjZcLr8G1@*cQ{c01FotI)jPaRq|E
zo*cFjFHx0K&%Ni4#t_Z<pqYpA$RaMeqCi=Vyv at ip6KaoTsB)~L30_iYSGv+;nD)7F
zSJJt>VIzv~l#9_JlmIttyr**b#Aj%SH^C_fUh=OT_wK&zE~3LltHUNwDQM54jGZeL
z4Y}!uVxDXrAecPcI_NORRjMM2#_>Tg(^q5Xka#`Z?_-EbFiGZ=On_WcC?~0)S5A~>
zZ}Lm}^iIen;97B at Fy-&3pCXtFgzdkrF at ZEK!bK;Zp&@?uTu9Nv at CbPa%X$C_Ig?@4
zl%&#eqOXt2`9J$sADrt9O?O#EKNxD>45B<qMT}DUfl94>&Bc-6XT~Q5AJ5L%Y=T14
zc~F9lTxtGs*brgL$C)vqUDe-+0KLN*!z94GK&O$CLC{rLHDC{11-F~i+jYPg5a5_J
zAj1Uw8|q8&_J}Htp1cKM03DM`oN|UQr+6JZQD4C@@?Hy&(A%e-uDB#%$Zu=cqu%+-
zR|F5tuh6t|P0bvLjdtV%*vAOBAnNcE%~;06DJYy_ukatLa($O9Vah_a4Z6g?r4~|)
ziC(9&|7gZ^SHkA{_mGR}Gewd at YuTB3jP-?bF<Wx5*dehH)@m`qF7IdYScRm81(IRK
z at b#eBjLipOA10&j-(Akb%y|axfYqgIH8w26{gve^s^}vS?%!W at Q1md4#NT59o}6gj
z*2*{|pBHfQmuGAtDLgvTWp=1hT6hu|Zy_u3Qzjj2wcCw%0IZt&>oNSi?pLFQ;5as}
zRWY!ao<BHeM?vnzDl^iZ8tJ(G5$0@==E!){xr3z)yN~H10>$Yw-TYl+*tkq=C3zI7
zT at f?&83-_tPOo9)hc(WzQZ&oPskEBFbbi{?Q;7ipK-3id3X$#a&KWu7Ap~^pQQ`GF
z6krtZq#P2EN54aKuC=jvJH-6JyLcMxz=acP0NI~8l7`_Pukg!Nbik;Uyz?hvp^5_g
zPjmyM1;#fq7=iOFkH0djg)e=bq#;FI(h_BaSsE3=^7|~l_>};COws6io1IrGq9xq}
z=gdF!H+^8G=x40OX>AO|#=2}rQBd6ZkmT;wC~}OgWCx<gXHfp%FI3*C`$BR-bFgLu
z(adp24<l%;^ulT;UsW`oyK$_ANPnffBepGWQ7U1Lgz;cYHjs?b->0k*9 at 89C{QH&Q
z3|2t^XL+wkbzkUVe<qlA>iF487)OJd0NB&zcfAO-4^KzzcZ<CBl|IpM7fw!tuj1VM
zF17ODt;uSu++Tggz)d7yg|YpstD3*}sCaz1QK;r5pH^(F&C>#8pPW3-i_SNpVFV@#
zn4x}4>VY<V9*b{wlbj7T(#qwB|Dor<1gmoTs4rh-*@YmSAo-D>vZ&x<s4wf+H12U>
zjRaPPXTS0LWfb=s{&mL<F>foKK8G-iZJ-s at X|qXERUTxFaK+4|TD at gm&XH<%?d7^W
zzN@~`BEzB}H8(7D_R>rdB`#|+=--4EI{uSzj(_fb8WDP+F=u?-hU#hXj2QAMzCLc_
zoi;O7xDwc(CEAl6FW2kJE#k at Oem1kn`i)j at W}Tc(BOj^Y=G}lUV~{8|@_%p$7N8Ff
zQKrll;DRlrpW;((R8rfBzs!^mB9`ka6|gvpgyqH|9ax(#?c$%LHMZJD6hR{ztbT3n
zQtx)z_A+QME1H;W*2nmEB_?9I@&&o)d0TpT^pEi?oSI%5hpFmk5%}i`)MvlYD-mVw
zkx9;b%s;cdIit>{h@^AdChEb?6<eFT*0v$-*YGd1lRQ=gN0Vk8>I38sz;mX$QdT*S
zJv(ib1(huuZrw9Wjc{QN$5-#n at 9C$w&2<0<a;Hy=8y!lUlt%AuT6 at 7^j?M7?A3Dy@
zM}-zjVnRQPm9n`hkwvZN3CE3i%0#4xdZ&KzapJF2K05PFV>zdeq=yM_w0f(ORtdy(
zY2%5 at izF9Q_N$w<a{HuelXiK<ZffBwof(F?KkD0gib~1FG at m7-%XSPi&bXlQI{^+W
z-YV#SS}5)It;#D^#%Pfq)}y6xo=Y^_^??v#Xc|HHgMS{a`{W_Z at 562wBmXBcep49$
zK<7Gw&#t5@*(Q$Hv*!_ at O&$RS{{5ULit%nv!{~-X%{Zk}LtPhxqc!&Si~nF63q;nh
z+w3)?hYQpbCqrIf(_fl1$R9Gd?<f5e_g0r}U^vkLJ+{XH>+M!f;R$B(z}R{LCeN)!
zLsWwcrk-Ko4Q2hclq}Wi3Xr^#dJ&KZ0Si+#ahMCMJ-*!TC+)LR*%%S!%u=KvWD38k
z8EiKjGb>~b{J(S6Je!|M-$}OcP(-)z1%sYbd|$oV57*f_iA8&j*O%z|VWhI?x95Pc
zY0G^bFc!*HEat1`RIMAYNb?<Soc<<n%yU9;R|`682#72X@=)!~qEJl;3U9 at cu4&pg
zw+dgSEkLf_Q&-{QZjAR>Y`uv(yy(|BFVTqg%{Z%Je%1bOd)WGNGwJh4?g`2`K;u8x
zo%MIB+0+`b-bCzn8tc4=_Np`dCtr)8;`7UHlNeCi76`!R2w1?6L)r<Ug*>jr%In6B
zNkBkmIrULYuwx!Wu-VD*k_NJq-|V`ZB<{)@35%NbEHTFXsf*<pEGtR at my*9OIg0d$
zB}9Rbf>`6r82tHmXz8Ov&2Qv!2$gYe#?{}<O3A&FDwcw($Ujbdsl6laNkQ~Mq+em*
zdcWK%N-3&uI-%t#bU`7S_&=Dte>NZAdC at _{@U9a8zhDgA!Nz#0wVywI^*PrN($Aer
z#(!w%dPegMg^ItfyC7u^i<J<;#@vgO_bOTw*C>lNt>fw=ZSmpzQyTC6Lc02<;F7G&
z^DGyQ7UE at h`+P<P11TMy=6pmMtn(+!Ok=3LPpPQBl~cQaJ4nCmd~ekY^_d)ZV4==o
zs5LEZZ}XwIi1uTB8XJ698$1^us$*>hFZsiravLa_TKkyYZddW06fF7^G?}VPMg_hS
zM*a0ud>u++_r+!Up2y0#_gdUDHeO>#w6hIYGX|XbxPaE6mH0}AG56Avanw3hlj(Fp
zrpLpYz6xHf at trzmzSSz#PBH0&BEA}EM9HW=3XjQ;Fd7u;&;c>#KP2Mu5}qH=Q%{M_
zeW5uSk{`m3$@6Gzx0R#H%}LGp|HdO8CvD}eT%Cg8WPhLjCK;pH9&s;eDf*i&)%&!i
zTqZ3?Nfs`WDzX~E+r13y99*8)Xn`YH6<7nX?VNr{TJ0w-Go+=iAMwlfu9#uuBk4Ah
zDa3g=teTaLJWq^ZQ}xsJD;A)5ayLkIDkm&fYxXHA4m;K$*Nu$?$i+I4cIw8QMFt~R
zW{dUwEoT9qQGP_~vIX^@y1j>p$27!{8UO+O&K4he&$2Ib(NPre`S))}<~`sIxr(0B
z$L*9v*jrk=7Ejy6#h`E<wt+{?kP$<76Kz<Ik4>JUUkaN0@@BHyQ^3X5dkpIRPrQO^
z#>BlS6C(i~q<|-Tj=<CjT5rb3^ci?c#mrVQsbtT74hbIYXCItJo-`C^Ih=_^+qAJG
z=(lV=5(yBy=a@^-5$njxxRULo#4K~ad4(zo-OIW{yW^*WpTj=H_n{x_#tdliYW#hC
zYjwj{o;0J`e6t*eH|{M1-;n^=%NSAsJ)jW?I_y7+UUxvpD=aDe(U1Q*K9cP!7ZO;D
zHQ*FNay4QwFb6O0i?fz+u*<F}%iWKXF8H9*q-4|+<SX!`+o9 at Wp$C8=g}ox^J#tNv
zDoNMl9;Y3}K^y3`BGIr7?8)mga`&`$n;2%DG3r+gY*G|rZ-F_^e?=z^Xh1R;N|~Xh
zUJ^Q2&YMwoU1lYjJRZ92r&}C7dd?<1vNgy;(8`SJO8q{+V~=;V6rRQ~PROPLF(ay|
zjfj_4X+UcKtOh*$)enA81<Uv2qWwZ8dX5XT>xa1%YY6$6HU0r8epFJynzdaT`0wD7
z98q3T)Q_m4xymscEN__*i)JIxqTPY6DC4eQHn2Bu8v)8pZVqsv8DR!y2n6}$s+vA$
zNNYsEQByb{%!={%iB3BXBuKRHR09<k4WbE+EZK=thiq)ppUNZPVpvrqzM&dJFMHgz
zgj9#vDmU at uizsBRoNpHA+FnwALeC*5fe0><&>VujF&_o4Ep(VMJn)+oCqJ>6ky0Nh
zc-?C6GeOvo3+;=VAEd1qPcZOEDmay8?S@|(!GfQ5|7|((L=yFfi?g^_rF3-2!Mw)%
z%x>*%=R_X%5z!DoR0{$9+R#ldMDuLTYVu~7h$wH>McG62*LdaLeq`940M~SBl%daI
znS+u788kB&`v=zWxxqp=?A(-Lm!vGaI)qtVeC5tcDxl2}n&#$XXwXcFNcz_D5mn}q
z0j&XQ8!Wu at xeW9dPMKt$EL<Emyd~vfjX75{^Aavn4G3Q}=2GQo*eOmG;~G_zJPr)`
z2n`jvf5eY0qo6E}by$zS5eM(|Nj?f&9%aW=3<3L)qh{Uygl&sU-Wb(LYwd#b(6i4q
z8N9pjR@}(qlsIy&G_Zl<{_GLgfwY at czqsL{a-3&qWqx5T5=cETT86H!b9}5l#oM0_
z>s`En6+7hmDEmC+xxxwT2e<F&>(`2+df2S^;<p?8HskRbL3|M$-cQ$ilgC9$AKaZB
zHs{+fcBc;4V%IVE^f++01tRSk!|x0<3*8Q5-;=0a&Np^lE%#)kDdVf<h<h^Obz`99
z#rdGbSEP>2lbW9JGEb-iHyV0u4M$Pdr1;vPzR>wgpMN0J_G>1`6_6l2(AQ{GVwxQ9
zB9WP+MxgTs&XEDq0u0>*!&1AS7W4`ZOMdCq8m1yioMMDc|G6`gk-u#u(HT7b*wXs$
zHgy at GuG)tVPr&2bxP!*Ufpai)hiU4={<3}EHx4FHofiKHCs39fBvxemQn?^&pxx`#
z;`La32?L*hD9qG_%gj3#lyQg;WkrLMSRWxiT~$olg(6 at 9sP(_C`9u(S^}xy**NqiP
zXcuA?V_Ya at z~r0ng(jgIomVWEFn at -BUk~!dJSkxqA(6|C*IzeFmOA8HlL!{Ya7Ny{
zR{j`36$F4~tRp_t&8bY%(Q*B)ou!}w-E^<l8e#L})+^luJ!~Xi{TD5(#rGtoQ+J>r
zVwnXsaY2&QqgIjfM#i})hbYEWMXN2ako+3X^{l9Ws^v$KA*ug|Z58cumBIhU?eH>-
zT^fTK`^N4mnfAuXKON#KS?Jw}tR9~?bb~~vgW<2dn;50sm|Z&zl+7nJcXk)Ga`^0Y
z8UZLi%R6f%HnK!bktM$=DrS1 at NMdJtcG;SqR3H$~J)Cw%a~b-~Q5uNdor|uX*YsP%
zG1=}^-nQWMSH_g&wl+_nL^90z&89(vi;OG6<2{veb0FVAID?JE*JW<(`FF(aE34bJ
zIfteb;X)B at rS$M?6Pzox<ViG?%LuEwY7MwixVdL+<nV5OC?;r+yxsXwy7Rr56bq*!
z9wdc4GJ$}K5BOHSVbQ}5(p4gqp2#sBe_%uyv3`AY-0WSZYo}s)hj#))8G$g)LmG_@
zDB|RwpyzFiKzAbW)hj{dTyGQVy#y*;p-V}hG`NG^e^ytony%Xp1WjHwqCe6uX{<uN
zp4Vl+Mi+w_S#^kWEydQigp_9ljwZ<dn|K&2d)eKDG|BJLqkyiI8}Wl^Od>;80wp-R
zk+I_hPxb!m{fTe at ScU~~)RpQlyPiw8T8y21VhDutUL`4V6#1vYNP2hiQ?*QhV%0ft
za(Ox`{Av0}wJ(J0**FZShBUq2`sK54$&=SE>!_+#qvqxLXi93aTl{4SvWSbhA{Hfg
zCJR4^F;E;0p)G9%JAiNhiN_grwCt-tch4(R!$H57Aa(sE9C2JK&5Tu~zGi1~fW~Tt
z1TsnlV=^ri_LS1$WgRUArn4eFp|qNeTgs**+ByD_A;$FE19X;e(82oDQ{07#Qvsv|
zFH1v3==o*6$2F>!tIZc^X>EE*s>hfJNU-$Xpg{XBdU5d at _`Z>jwM^V$^)hJjbvLLr
zIdrzU_Rg{%<f0CEX_nmTjUt`VMrQ=c#@1$R39+Z}(bY at f6fnobjrzJ=iANlptPdd5
z(=W5Nz>P_Ul93izt)A68tP5V{f45nce#M$8J~5hasG+mdSTtIKpRc*umtd_>+WRe7
zMbBxTqvc<XTJ9s`__yEgQ36T7EODZURN=)=={*h1J-8ISSi0>-kWPAJ?`}(IN4HIz
zK6v5aBxUc~0ebS~9<v#m=Pfu^5#56veH-J}HO+w5<pxlm9#t3!l^d#aG)g-k8>39Q
zhJT*op&tk1N*o{O_UcK|#*!7%#U(qj<1g-Naj6Oz><!#HWYyMF4S=WUOxljF>JSsp
z-1Mtcf=6rwA*AW?xs3PojQnDo33unzh4)DT<&u?#97>!z1;~ZQZMV&d6Y80yh+yzK
z(XKY^e?WIbX~<!8a0oebmD9QLS at o2i7=F|F(xT&f<y5^jZQ?lPW-g6-AXaDnR)DFP
z`_Dd=!Ya~)aM=V#L^N%9zDu&)qmvvv#C1yuD4}?w>wN`QV0#VkMY8_ZJ7i at QYfZB4
zN9h^PJygYeMMhb(ec3ycxE^?Nosu)%e}whG3^bilidG~~2y;pg!kg2U;A+-kGgtSr
zS7OKUVD7Q%n?lW7_+;W*+T~1EF~psh-gclM6ZI_`VCrKqcZZh-Cw#4PhcxTEUHvPK
zALQh=O}u=U)dQS at 7<Nj|4}km29kcj<2fWoW at e8;v0fFRe$-`dZfoDoqKi7!{I+F2{
z>K4tC<4heBRjV6+$H#wtF$IHQq-y?2!aa%}NwW_R^r>t~IXBmL(mJA6Oqq{D at gJ0t
z^Bk1MVCc>DjP)!~S(a8`E!rg!2Cw_Zl}1B=II172P6^7OiAPA%p$(En+A(Q_{TNp3
z$?h7DEe6F>CS3?XU>*$x%-`8yboFW(P4g5HHg4f>XflCF-GdiV at 2$w95~xgQU3P9b
zxoerXXw3lgKdC}1 at P((4zcr7w*Vf4YrVh2CCR@|y9P!a5ia3pdLTN~0-N!g~wM?jQ
z6JE~mG>bK!V~A>H at DqwSyZsn=n`Jvj6mSPuaU01j(^#wp85H^Pt@$Rnm?yaN at i0sk
z8#-=mu-Piz(w``{6`08zTkxa1Fx2$QZK9o-M_58wV{LpLGuJh>ktSoTM<|}W%5wZ(
zuW+NRb$sTxn>q~dC1sd9BwjNaCOZ;FgYaVXZSxogJ3MD|J$EOVs0l~hLitemqT&!(
zhiupEq}Etk!1zDb#!q$ImS`%1j&Vat>?GN<fRja3#>edmsXP#m(iw+6F!1~;)Ur3~
zRI3HNNjlzi2KI^?7*(+IduAB(O1k9)e!P1y-Bodmtyou`{a*b-d~>$mIJH4(TAV=+
z at 0A>RITlfg^fFw*^g!xF&IcFR;mZzze_ANw;bl}SP;z;9C+A9O;&;<UV>n5_Xh)kV
z7GmJnQO+TKeVi~Iu8q!J|3TWzeKoxqi9d>rxiy6(SDuaYgy)lr{jbCsop-zXr&|G3
zPD4;0v)$P|3{1JdY)~)if7Y5}CZ)e at pTf>J02B1(cVRxZ?ow@*D)|oY%~iA5s6cZ#
zTQqT5P^|&%07xcqjMasvs<#^J-4}DfV$Yq{_vEt&<!u~z)I3EL9y|xRqdC2w!-g_V
zYma4?1ygQeME4nT-eehp1+E+P8gl=Zel3)^&6C-^#rTLR(gjxJJN{Kys`4kokVS_j
zH>K~y!oOXw_$xplS)pNcIFW2YnY68feGfL9%O`8!1o##aiHDs5V$E|eEDe5<8N$KT
zxf$fd6=7_rXjU_ at BUt2E31JG@KI0DQSlY%gwa%FJFRpbdbj)ssa)xg-PF5etifJmc
zEG5E*iq6{jL^d#YzJa^Q!Bk|_w7jMrW5TtgFVN*|AB-D^wqT%boGh;H&T04&G9zH3
zwW$(o{GF+2UwldGeY^k%Ci1;z(^En|ddj^NGu&&)k75;6YFWIH5ZDMmM1zLx>9EhE
zZC)MT27?O|kLDx>%ZzV~J||mEIpy{TQzOH^h2QHO31XHvYCEz&<SR>qa$5^T&Ky#6
z5D*qLet^|`JVcQSWW$caaukb;YqfOqiRXMOU`25wyH`u}M0^ijb5(Nf62m2YH6e7k
z|4bXb#E>@@6t+blQVR=dvEh)PR=GdgD0Ia5+MRKPoRui~Y=BzV*-yt%HuQg06NxlZ
zG`Z(<*g at 2A;#A8U)K*Z!dx9(F83j3viD#MwBT`m(gMI_bWr+^%fHexBCeygZqwZ(&
z^LF;yiFQHjQYlt~@87pmg<pj3HUntTIv{ziF|tVj?z=nu!1X(0_DAu?0m?kW3Uxsn
zaYuutnj_VaomT6}gy&-ZE!9tRpT!{P1g5~ud}6_sK-f-5god*@0xE&uTbp5m_vSY3
zN$s-xnd(w%^QT~28Z#E(sJoWbNn%nZ3kU%`sU_|-dh1jVSx|<;HdVMAb1kRYGMEGD
z2=YHq9kqlEmpa(9%XsB-)Ph+H8f+GtWML_m)bobg0V+z4f;~VG{hZ%9qlXT$gO_g+
z&Vh8uRk^1ZFK7(OS1oX3cm$c9+cCVTwI8yejA!1h{Nb|*Sbm$wkw_hcCW*>}HQ`9}
z;~Wfn18}8zkjcjKq<ysuRsn%0?)i)wxMS{jE(dI0!JxJmlb87yZnxs1642bkwamKx
z2f77K$XD^h#GUiLEqKDv*TafFZfjdi+g{q-9wF^JUtcJ9zR%_7P>o_)=o;a>Z-IRz
zcGNS7nyt_ho_n5aA0^}mSf!_T4~c_L-uweSyFVhJppd&wg?<Zwrr@*qkM6~}I3QgZ
znK1>VVyy}L=$nt~h%<d#qQfgb3lk4j!Dx&wOVNv%*=WH8h>_ at _KMNz$o`&#er^OQr
z>5w<18T2RU at Xr<1`LfomG^j+v%!5FLdo4bS at LMR5S2ck7-JV0u)Rx+uxT;Tmm4i&b
zV1ohufzG!`Tm3WXl^i@!>QeAlw#cowXIJl7^-;KH-}!-q{s(pwR+$be;IIBa5n-RE
zVZ<k5n(W<ApJ7bn&(d<>hxhgsv8cUHvE;M%n}zsA&*jEA{zSKJ2f?8_^5<hO at gu%>
zOiDSvCoYtreb=E(g>78R=d|QGzUFuutH$I}+P^JDdJbsUl<l79?~etDiDEbB32Xpv
zGyU*-Z`=Z25I_#@4`<X{*Of6D at v+qVaKl&q at G$0$TI}=}6<B$Qztj_zWv2-lV_Mi0
zit}vTw29Jpv`SYTM*Z2F$qen?S~t~PnR69K8EUV+B>aO&y-O7RxP4tdn_8s?6a|)&
z(;Z}jar at 3(qUOE;+>X9AW=9D_b_mQ at Fr14MA%YHARnYn8($ov&gs0JvEnQATg~1j4
zF)ob;u;nE4iv_q^>a4BSTdEW-lxwcEG`#3MOS!7Fz{KsioriScwjn0^r2hODUIEp9
zCFSfr?g}&9zoP2pq>57AlCgt)smyHm-y2ag+A7lH$?}X7%dR*IC6XI6Br#LZ`?nc*
z_`&?%viagwcmydpyC9Y7xM^fFl{0)TGdLv{dwZcI>fNG#VL61sQiszmcMCt*`kbJ<
zi;8tf+2jP;LBf77x6UXSWO4d`pgb3>+fDQwRP;r-Y43MmSJgK1_#rcmF+)YZjyVjx
zrNm`!f{y6U-C&(or748zQ<T-zrWfoL&KU^N;Ixhs4*!c<-0^s&s^*%%L00W2gQ8T2
zS9%!|F&e6=*{>TR#@<0!#oQ`v!d at qwvB(O9$kWS3k}%nQQ9cM9aQ%x*m at Cjf=X<@^
zs`U3Bnp!sd68dV+j2KC+E9>qX%7jR-{^U7^XFo13Rt1#!Llr5WJ|&<|glSIPM5XKV
z!pH2!oITMU*A{tXakg4s{^<WsjH7>@&XEZSG3?u28t_L+2$mh at Cug*yt4*mzMbT>4
z<2QXt`~x8pUHnnBaNs2LXhaGs<T2P|%)6LUW;*$K_NSaPFItPp$$Z5n_hg_ at 6W-18
z?UwdMns9?tNLL#E#bPu<)o!zP6b);7+T6ry<D+ykbDljY*?a?uyU_|?-^VpM|EBpO
z<^y2$BDRq&Yg8&*^-refJ{`)>yE|4_@%FB<OS2vVM{07!7n|5Kz&1_#8tVS<k0m_!
zEQ|ZiUY!)nONec10Nysvf;Npm?CtV~Li;tV at D1qzSVH@G8wUPp288RapBWc_{8Eq1
zUe+>0aQ4>GH;m_+WkI5xG5ZMscQ_vF7J4kddLa10giZm*`83VTL$4=?KjK>8Zn#WU
zh%;UZZOKt at fm_!K7$@#62bg);g6)jBKofQqCO^l8l-?js7WFl#cW$)i2SFIo%33Tr
zXT)g(*CaD7hi at fV`>`NMVn7yg3LPfg&~{#6&t0Jm90HkPD<I#v^VhEAMN?rX2N_-6
z5cwA)j{VH)6Yxs*syqZhoLLPUf>}P?`RRn6&<j$?p9a at lQ<O){1K<m;*OLl^YPGD+
ziQnNgg}AO&_SvJU9Sv;u7+Brxx{<TV%PfCto)T7;tF^^oG^GjdMh>YAI_BOq^4A>l
zfVW$(^4{cLaX`}-13xPA-4t*XJdtNFs~lPTqqm3x8T9~x*0aWQ8uz`aNrvi`HjG7!
z!2CCnIqZw5^;8J?ZE9gDu#%Jb#B}$MXqV*3M;k&1R$EG at 6G{rd9U-$@yY&m<F}T~2
z*>Md|wVPE=Rxkle{QO!~+~GdCR96PYsytY^hgXjTMP!dd2aS~11DK$2^!=Qza&Pvu
z0RU<4>=~>Ld`h$N-I$Y@%eFK0COTnFU(kfz47;#Ywc^i}nRFB<Bf7{#PR}uW6R3`H
z15TOZJodh$Ut+SVZB_rkLB_H$6zJOfSI at BPL!x3v5DfLe?0Utgw!!@CjLuT}xz7c*
zlC^iPSknUml-G0H>x>6+Q*E3k at bc6h_zqfb<_#(TlRv>Pb3+Jyt=2iZL6C#==XrX;
zVnZ0&!<03u{g|Vz-7p75VA^Q2kWlUvS?JGIm!q|jAs&(kun`gJmK<=Tz#H6WFx at oB
zTgL;6G|%KEdFH!H(XHu1BD8e9q!Wij4PH4Tgm38m08DQdDB6dMY8?f>va>UnSBlX{
zGZ3Df3eNQ~^;!_PFpZqxG~mc(NeC&NGllG~9kj#_v}<5u!)aDwmN%3+VBv<yRU9iK
zz-2<13kj2XfYSZ_oiJ24mJ5ct0*Y}V1g)@5BHmWpdSVjN8v;N!{(|BRzM#y++g*dk
z9*itS_h}XPNC5FDbJUA6I<vwYU7Ha6NI3lr2jA7|T14Lru@%#Qrb=?By2poXVYRRp
z%%RFPF~R7Z=F8w$*ymS#k=?V+FZ0cdiu&y~#YmL>rMJN+lT~Eh>$X!x3*~`P5{@V<
zYIB at UWX}w;5ZIp3KM$5W1klBE6{~~^(ktrAU7SSO%Te!3F;aUsN~J=|E(FDn<D^e=
znX`3sgisAyKvW9jQroZRePcd?6u`n`Xr8$w#3X%^wDl`GUpA`l!Y}}{23&Iy5ZfqK
z1aN(vmjC(geA!uZ;qg<if}$hZMBt6)lv&Yd#PsZ-Z;8|PR42L*?R#{lc0p4;#w3tF
zmNhZ2^nRun{R8$TG#oGm{OT;+V*-Y^@ddXM_b!Z<^Um_a#|MU>+5KVYdyLayCZ1|x
zD%OZ6-1G~J?21L;FZ*IFudv#??%U^gv>Kp`Sa=yRlTYkXRCrl(Zg8#)VP&VWaiUD{
z4&UMWd;bci#hqzM^4OzX{>Co;m_qrRxCsfA1ePg-z~D>S5-Bh_MZcbV(aG7BvW?xZ
z(O2BP06YLtcc>ebK)Coqh$5Ze28eql{KxQ5QJ*&wc{k3`IBd=->tX>v!2K`h6YwV3
z!EeXBu$B?v#$(Y<6pG|phX9QNg8ei$3p}1hHLK0fZDA2cOI-k<`h<M4JEQFN!9$Pz
zFTZTmv!b?1p`?C`IlXet+N<sU24GM(1FtMUuJGr1nnY&%SA)-)i<c-uY+wYf6Y?_G
zl15V22^@&m|B${$30iBRg~z~7v0?AKgQY{UcsjL;46<)UxWaTIm$T|$aK}0=2Mw;3
z5C94FgfwwrT6uRqD0+J6!eRP`l_s$xOha6cioIfUJD0 at 6{&Nlm`(6vTi|;iX;*7l&
zV6B(Z%_bR}FEEc6%xLI%a;o;mVV}eN&DN^q*L`3<suSLCxW at aD8X1QJUBs-rtzZEh
z7L72d_SsX$>3}g|C?`%C1CpGbKVPUW{#F at F?y+!baCYDNYOp1!x4FxI!?UC}N<V0(
zM)mZdh>hV>7DToI?tW=wtt~>VjwJCIO>56%cmj#n5PM3`bb)NB*PyU14!SiVb^vf&
zT<>)Z`;d3VV+1yrFo)p+>DTD7>-*?!p+5E7<^-}*l1K1>YLRElhir5QFRFu^L3o8L
zU$34KEsTjXZE#w|<Yg_(BSsXTpO|2$)~kJmXk~-ynpu<y`S2ufxe{6{r51IZZq6d>
zzGQC`cP${pBOyt>SS>er;t at x#NBf=9YMIKPuD4E8Lx at 3Q9UEC;`ggf*$n}BlnfStx
z4l!*ltk|b>Us$OVQt(#p6}MKiQUL->+gF?`8IM<di-fDtihG-LIK>2=j1Iy3^1Z2p
z5#4tSODSQ;^;FRZOF0czeX31?zh9L|taO}KN5-Um^ko~XEeN{vb7GZ!7s}OA?~X40
zODP-?1e8TumN!P-KirjeUl;)aZDmKHj-u$mkr%yA*hBGKz<YY)23pN(5<PJ2t|Oil
zQH7rB6;-5$#eUgdAdE64#c-^fmdWpE<u=FNs6RxhQKv?we}I&=EkPlgWc}EwbNq2>
z+3$}Qa3}%-Hz(oUW@|M{YKAi&z1Kq#pepdqqjnUOXukxJ^hu3s32O^59_SPAKSrgP
z+$jP>d0+lv^9%OSNbAo$k_jU at YltPl`@$1NcVN{rl8?Vnm0tgYhsIgBOrmXN+aWNV
zVFpGoR}HA^=}0T at zz~JVd%jqTKCf`ca&fr4+*Ks?@=O})(^IrA<7*eu`l-Y>b3edX
zZ<N$kt^Z86{GGy>YndG at Um3WWV~cr3smdl}Mx<4-B!efS#q1MioD{MM^*Yo>&eW1>
zyRMO&<o1QX+eswI$w7q=ppUFj0nY?#yH`3VPpccBP3?KqwwR9*9!`CL1W8T=v=f!*
z85!nl(oR*Jf0x9{P=&FOHmYU8NpO0)IzrCUiRO;8iXy)90sl~BG7g~xdnWG0^8#v?
zTp4hZI^Cz57LjjI$mEX0C%JVd&9rkd5Oa;_(5o2h1Kl)f>mI7!v|Wbm!DMp<77@@;
zv;MHv4Pjw3?_s2R{R^IE-)h2IhhCI=()Q$365^-o&19$ym5?0CLRzIJdPfolXXQjA
z at 7rnBUAG>A9Z)u=&Q|CcJJVOEg82IFNBs}V#XN($c!jK|t7lmF(;DaCkNEB0Y?WyR
zg+GXI>%z`xN2Eg-_x{RnH~4pa4G;G}tDwhTFZ6Cw9Sw<mWthFnbG6w%k<sO86)eb#
zzVBs_RQBwgG1b at Q<``P6d=8IzwbuU+9V~p;)9u*9(M5iOSKW7!g`C-{HF50fL_u_{
z7#w8BQ|i&SI7 at AFZKy(U^3-p?R1h0+4$7`<?z!yZWp+aR(f at qduc<2K*zS$1xw&rc
z^GyZzOp1jgqm{>ila-ka4xbe=z&J4OhEhNsA<fu|LeEEojij at s9^V~hHf(v+{T4j{
zJiP*Yo|ZoyJXVkoozz&;{PamX-)z2hZ%R5ufe}&E=UyHmtfp!+_3`ARreqUMd2g2m
zdq&2rrl`Rn&Mig)+ni$SkLbTKmdNaK`i`u99&0RWDX*Bzbxzozb>;hye8$o${K8e~
z=jzLZqUkG(ap>dYnQ8bbsIpWyvK=?>K$v1G_LnBzf%;i9sLCG*4BEPKC=v+ChVkxz
zbf0z=14lOSKv`70#Sq`}1>8)F(bd>SXzoh(qWspxK*H8clYx1eT2jlC(69<I at A612
zW_B;k_S3->YR;>yRoEx~!%ExABr&gqhu_-oufGpL3au4B|J1qxV?9b)?U}F at OO>k-
z(vYlihWiX8SWaX|zELLN6}nQjP at 4r^1cE$#qu0iM*G=HMYgm1$lPr!V3z}v<7ur_E
zyS0^1%{dQwVn9B=9|*6CG8m~GQ~Sa2JMCHK^*;jhi6qH9C`aWt5(iFOqgTgjQlw%;
za0)Kpc`a&92=XT3fSg)rTEGM&m^W3G-|@bSyQ-q6X~fO%gn-$Wn>l^u!LWn<!@J<7
z>|FfeB0UF5yXs~Jrsm~w%-8ssZl2J!<B)zfLVm<@=dxJbLEC!ZS^u at ei~9b)Skezt
zoD88T7yl2xW^`!apNO|vOgkRapxvBO_MeFUWT{fK816<dCSd8O*v|}w+e$o6{L4<W
zD6Jg_OgceKh at DW}PEXl0-Wsm6$?akkyy at p!=qsH%G)}Cx`e6SawjR2-=z>)UF4KIC
zlgJb*#@*G-!y3LJzO8$gg^y@)3Q6Ci<iG8<K3PN0lL!~i0py#;H?LSH=%iX(RGfp&
zD1HlK-lU2t^MBDFp|KTdIam}gS(rYnfch^XYujqu?{edn^uc}-J#iKRmS|jfz{GGd
zoe1fiW at RXkTb!KF9HH2J{~Sl6!kFfCH-b~zMFuJc>3Hu(YocW5N|mgia{bncZ$PBs
zCm8sjr<eV-`wdcWB6iteZqm3>nN9Z#8dr+H+uTl_-!S-uWc0eQ6$6?VVAn=tIK4My
z8zFm<we-7#yP5G5&^}~rbr#Z+M*u_`bG%&}(9C0AdtvODJh42VgQ|cQxabo at g-bR2
zG=a^%$s4*}7;-X|ApZSse%OcpKq9wH8CGX at A#VJ=YefS4;6)}&3j1t at TP$+w9DlI~
z-pHYFAW^*+AM|q1C#GP=0MOQTyFC5sg~e%L(ca6G>*L0 at MPYM(Vg>SAor*x-GO~m_
zNd_OyJxc8Z-L=)k1ZWExt$<da^6?7S-M3Bx00W_o-nwuP)ZfK+4%Hgn at 5FJh)Npoz
z*FFsno=Oc&%(9$k?t%QYp&Yz;(4_NzmtDSd=XDrlDQjpcb}l>O0I(_a#Ar;3pfhpf
zd<g<7QpDw6M|wCWyQ!sBegO${0ehxYK-(vjTWd7*7#y)jL6UP~?mGOJjC8 at w@`N&&
ze2-mR#ZbHJT41LRPDllJdEXY?QXH>q8|HLJJ(-?rVHyT$0Hnu}_zu8g)9oozObXC5
znnq(QYhfGFJAaPh0%FvcIY+7n1y5%|L9BFtpNAkezNWNO=hSY%U+&yRtJKYx{1Y5W
zqJ$!k)1P@}`#I}1Q?B&mcnz)K9%oaBrA2%%!Wuu6&*NOu>1qq{mLZy)JGQOa>risv
zxKvU)iH$!YOLXlw-)8a}BPN^;dSH=lQ7rSfdFgv(vD_Fy%4{j?7I8|HmhtS8rCA*^
zzZI3y&U-Vd=GuqI2Yt1!j2T0*`Bp;&WGx0kcan75HfLSJ9o&u|TmzS1EBn5OD>7Wd
zK+Cg;rg+miKcQ}C<*mLtKG|JJ+f}?4J})9vW<RBuN;4R0tIh(|x9`@$SgYRogIS=+
z0r1Ba+w~riKCbvVA3LpN5uN at tmz$)7%zS%#eKJeHo`GaE?hL+<CtD2_QUM~l6wOlh
zWY^7eEY_bj&3Xs-6EDof(ncEU;u;1D2-yOT$da12hL4hE#c>2UMegaFX76FNQiz3V
zO at gvdXr5&!z4vgFXaxz>Ot%W1F7mV+M+h{(twd;tXYjMHkRa0E7Eq4maFLsxWORM8
zqPx95^zl^u=`AEEPR%7rYmS7(3DpKLndGp0avRKgyH%TxnK^Mzqs+dHGhHfpgn$PS
zb(*Z(Z%64_#@-_!_FRWKi`~||9*SMWgAN)e5b}GQ8}yE5OTN+iZ7-=rmUjY4(a>hK
zs6qa$-cI0sh^Q{krVlgrFWvRR)phrA$qp&TJkHj0^&RH)$P}Dj>DoVI=Gc`$U{=&T
zxxZj}H&|*S>a#F?${siFme$@4Tf>2G`Dv$P7G2epoVPO0b=MM#e%0`|LCg9S2O)b{
zu at MAzKob^Y2-e7`4Xh2DymE`Y3a|syAX2ZTR11gf at wT%Z+8fyt%ds|0rDuL}^#zL1
zX1xu~VN?1lO^W}|`4b9KQ%gc->LeI5pn#TzYedbLz&$Nk7_X~b%a4((MtUb3eec0=
zdMo7D7omn>%hD6@%y2pb5icouJ0gYqBO;J_BIn``kYllP6;6E_lhpxmXd at W?QAi$)
z?K#G|e4*rX7{VZO`?Dc{XH`=RhzhOMtj8}1p(V3YFD%aWGDv>q)NT=*^&W|lr7?D!
zrqL^UnD~yL>E8WX8qZGcY~!XaGh}||-T_J{gQXBR`a4tx!iXI5&D)Oq2$L9tVJV*m
zI}+2n8u&K71<{R-V2Zi)U+szVWW7Gig>>}~{J};lo~P<uhVuC7v=lxBnkMALGPdQ@
zJi!pa$5pmK>OXY61-|c{8jRpSQ?KyIFR)|)vM*2V1*4pI8LP=#BFsr9zoprj7zK1Y
z8>n|{ziVAe6R3#XKB1}VNJ~_*4#^NpN8GD-;8$iH`EI*e7@<71!;j2DEhmu_<d-KJ
zGiD??9*Ja`&lSrx5Bv9z3e<nCZ^=#I!8%NHd`H9cNcA93M+B3>3udai>C;e`24v#r
z_a(!;tG<7Z5XuqU2ld{wApj;t&zfxJN{0{$$P#uJJO`|ypK{q52mF(Ed>y;{Ztvml
zen6Ad<jL;iV;HHtFaXP#|MWzMZr6}11$3nbw)67hJvX*PkDGq at J{|9S85r^?SJAe^
zkHRhjK)051lB<?sC>UF#7H`?$p`KSE7=ZyBs1ujQ7Es7fV+cM0C)4ji;Z`Z+W(*7P
zB-(3eSK^m*R1^6B0Vib0{%W3xihaWL5tY at fXZ5AsU*M~85V(J|CiS+2yr(k-+ZGRA
zp(!lED#m4*yP8MBWn!R;KjhCFwqdjHgR!Rb#9(mz$?)2!3v?Jg`!VMm56mEXRc)d#
zMA7n>JbO{j-&K<1><rw8tNfVHOBj8Xrt1S!X1#T;yw~Xp61c64<F|W}C%EChm at k3{
zr?$$SrB|Htfl|%2IS&H{o>fREUb*;dG<OkVaQZBD#etw#u>H$aJGiS|QXeQOdS^)}
zP#LBh;Q*_n9Sy4>WW{(LbtoBvyqEL%Oz;YX9DZPVZw0a*6Z at 3DF>}6Cl@$76R#$eL
zO*e*O1kM6w{&p#nfT&<1{0`Bh`L^`?*Lf#Vefqh{g>tgfK-HULbkRuhkmUf(7qmj?
zE6~{I^PAvP?&ZT*pE(s~sPYIEhQSCxqrGzv=(lNk6kWb{G%rBp<sE<G(6B1pXHnmA
z8b%E<t0EO0OJE}<>h at M>W%6&CRUL6A*&iz%5d<$%%>rMUf2ZA^^^IP)C9 at Nz6w**H
zsf2G~qT2X4LK!|rpFyN0LnC54M5c+dvp({<^+0Y9`TOA9r>A=;D9AGm1SD`5p!{QU
zpADCbR|U=eg>rD!#-jWCYf;bM-jv)(M6I)bkWO!1hMNQb<6#^jU}7-K_;6$0 at C4jU
z2=nnheU7qTM&7}5P)78g<eU`lFf^78v5=#f^^5U-3vb15xP}r_B4R_a+}|$403=rG
z^}w at RWKWJbVWxi%`A+`ia5__9fmsOm?I!mFUj~<9)kwrbc%xq|B}GSitJDnQHZ>>t
z>oP?8gj&ygneud}3-}|(^0}4@@qzcR>AX3RG(${86>AenCfGd0i~jd50i$B}<Jc_c
zSvRPYpy8TpNT&8S;N6nN8YM2*if+6`pt<3Ftv+$Ka)#V6b{=RI&=-$@xQO_LS2F-B
zK-9mkcByEOT?W|1rXJ`Gg^<K5vT;#eK16c?x6k;p9o!Au!c!rWpP<P6_d=Tq?~RuT
zUp!5X+S%T!s71g8xQo+Om>ohX>?<}Gt4}54qz%)q9;(NqR9-rBTa3z2y;B!I=uFbV
zlAXEpd#*yq-$r!v2~R}#<$ARIZGt2XBp9203BW~xA<Iuu`)?NGwXv73Xk&E6Ho1CA
ziX^-&5h2nLYiaM;Kvl__E)~wktiX%MSk>OXs*}pN!VJ+BsNylaCIsbO#$**f at Nl3K
zjghvj7Od|)pA8JN=bDQ^tn!Ez2zK(GUHQNbPdZoB`xaLaFl(W^43G!^gs4KE#UkFI
z`&$cl)ORrjJ(WK^BQ0X;SZE<S1TV*(zNJ-jxaz;gM~@wwen8BQHN5ZOZ1w}jwAUa?
zMsbf9=M1*2TMBamVA^>~2ZDIK2Nj~m{#6*M--U*~{3-ZE1d-h9#Ra0`3YLN-HdIF^
zBF3L5<qO=wv?3tsDwCNzKEr0}>`~^gGEbBJ;m7?aKnOln$<O>yiYv=lfws|J_zi|`
z<Cyo328~e*_-r2onm=MXCUgvjv)b?y7!)SeN*Enusu|v^5RlAxBUPIBO{)V7|2uj>
zh+TIgO at G4!a1n)@7#Z%Q0emE|J((?-iYrhDtDVM|@aBh$f at M4bqd6I8qprV+?%$+~
z9!49-sRs?jgIu|XpmR4QScjF~gsFH{fLeecjt95(V}a4LBQkTuHFdr$B%!d9LC;O$
z6zH`*<SEK~SN|o=$^Y89e$6hc%}3=7)?>GQk=A}?t2%g9Fufz!0snQ#<oK>ROS+Uv
z1Bb%UJDU at pEil2DtE9f~=()y)w+K4v#77JWn1Rzs6`|WTd{&A}QU)|zUVQp8HmAMs
zR>o|MB{11<W^S;=M566iXl3hxUUfZ!SD at 79U2r7wwSJB#W at neSC7Vg72x#6XU6_{5
zzWucmGQ0OaU$2H&$wO72&+&2dr+rFl(yNuFQEKXkGYRNQ)4T{!s@*r9I9Bw}C4y^E
zQuoj5$U(qq at cal=A3?Ct9Yq~m{Qd?71#wMXH}UG9o9&P4NnkuirezaniF*+a3e}yc
zkrK5iWUWwoUMBl38_BMq;d8=AQaayRU6X{6;adG#9?t at D$M%NZR;9s9A}rvj at Zm<|
z46mH{5TFiWT8(n53oO8|y at -Pq?$$U#n%_cm0Z_8Ln|;AIZQPAn$|_+L!of!D+Yx`j
zS#kv2x8I2TS~%^k-nt&rJ<SLm>vT)N3TonhS(GDGrHW^VaxP?s>u+>0a_V4Me<;#J
zBh4mo5|=Zyn<v>?QQ=6E at rq}F&!^y%hCSB(Q&eIk8HcPC97YHuFkB|Jsn*t!zbrv2
zpDKo^FV%eK{(pi6%TR2&8B@}}WaF5}mUadpe|kR&Gj<YH((nfuir$`8$&Nc2O7Lho
znE{)&bV?pL6{yG+1av<G at LUkg#dWUyK)GOoAhYe1`1!|Al<Lp6>66mcw)q7I@#X?H
zVfAnuA=o3c+B$|Clv`%p%4&u?);q|tY7Cv=lU5y#)s{qM at D(nAQ<Hqh^gDeMK>(ji
z*e0K at sSTbuMZ|%+JJkJe`N;_Y`JXbEIz_g;d9<s0GqL;qM->vTl(&0?v&E(YBbg!c
zPC_&{O(2lnf|xG&nG0eS;opVN_nLfoRm~?B>?0m_mIPSJ_zYYu^-u^tG-_)w{uX*+
zxEl3}*<(abJAo9dV69D-Ab4t0M^P)h)_YG9`JlS82tGVCyDI;?Argqj_`ERN;%rnh
z2JEgakuxQtcK%cHkChVjnC3Z<KK6LVWXEIGAdm{>pf8b04Cy?UnRAGo+u_S&L<xtn
zDU$edV26|->Q)(M7!_gSe(M%yZm%<V7dM_MMo|SlDfz$%W(@*#;Lb*lA-(*teo!Rj
z+i!Nzjth6!@>9nS9d6_ECYu+<j at Z`1#W?mScfQK=T&?;@BeF1CV<=MSGuqe??4*l@
z at yDen(G{w*erLJhdyC`3*kt3F+k0 at oMO6q#iT?r8Ni_0)9 at Q8kAdsqtG%r-cmz=TA
zbT{YgDT5nDtzQX!y^LLQ;<6z7r)s-hnfJkscgZ$pC=r78%r!J2ao2zuESWHmB4)#J
zuQRi!Hb(@CygDo1R&+cyEn&ToB(NCTIUmUK4maSQID5yU-3^qqzxLIDqC-4JZ6J_w
z#f>6 at ONVG*gDBfWFilzBc~z|5udJa4lv+^u;|QSG)DQ0WI3HArcDbDRr^;U=Tn(|7
zgFB2yKgyfIlSiV~a{}E09X{ogr?92yxlXG9sqLx^t9He!9^J5lUSi~SB72V!=oxq#
z+iMc$mDCc~ap4kxZT;MKp;F4*s!ey;PWeBz44BjnnK-7i-3CFFR4&#ywRp=43mHai
zuUL5~BF80(72XLBpb1D#gY{P|+al;BoNU|Fc%1{@;2@*aNYB+K73GO-f_0SiTV>0j
zRa at oSpbAzfQXR^w-*o#T8zUB%Q_d7YVh2>9kdxLeK8cI1v9r`MvO?ChH}%m`lt(LQ
zPFo<XPkjkIR4Xmion*C76rw?XY2|<y?n)0RJ7iScBffPZ*hh2GV!({>0hTfW?zUyj
zxMN76P8)kPe428Q9|u|pnAmyksGIV at Zmq`GP?d5qLzkKCkbHrsPz}0lsPLcLc8Ap;
zDvSd}`gqtyJPC at 1jp|GKqHl#En+F3S3$~5pXU`7>qtbLc>rCbZB|QiwT{0m{9=twf
z at J1}F at AiBu5Ub9wsS-mYcA2|H>>@c1n*~|1jmP1vDQe#S74TH}yv1EV?gG0-3#$<3
zf?=_(21n3XRd_}E-v|xBaN8J;0eTALs*XAHv&NLFM{cEU1TDPVt8n6$_O``m<Kv9U
zA1*d2ink|&Cb)`6(6UA1b0FD1g|WfE-24v}=o5SRFvI`x7ylogzKcQT>XLsLDf2%0
zNrzUbwBhHvh!?%QT*YfrVb}y08WD6<*~V8Uror%_N@%(nDV$=F3vDRV1zOZrsRBX5
z`~jHv9^!|_p-*m*mY6nW6mMadU%%RcdzCKD-Btp5CQ%Va2%jR|ehD*hT207GKHAv|
zgr>Al$S#2ZjvK0ze3Dg1S8^Rs*bqpZ&)zy$boz<IV8Bdp`+*e9KQ-I4dL2enkzqj3
zpONyhxCL(^Rr*T_UGH;_D!ny%L#UUeIkKMYy=gox$9-jB`sre~$UbS!(R*}=juHc}
zh=C;;15GpYj_W;|8>>w{5Lk>bx4EqKP;&Nd2B**-&$vJtELdch;L*R;T{C%$9eg2^
zHOpS)ZRD-Tt{L2AlG%~%Ei{egDVeUz%g6v19C&JX*mPt*({NTr69QD5Tr+Tw<j{Un
zl~U078N$m=b+7U{(x1_--_N!oAw8lu-n6C at 8M{l^lHrUBhqpnYri}_tW*Xh at n1A>v
z@`##znX?GIMXxX%b=YAtk78|yn{n>YiC7gmS$042JNteoW`4{GbFP(_Xa?>@e>$%u
z54QAD<j=Z9(7=ayf$&lDwJS6K@}u+AiHvs16r9ViJ}@H#rdXrj;8i0+g(WphbcugR
zIy6 at fD}<8JWH#D#EW(8{$a(>{4Y_ at I+B)F7(8=|E{2Gjs=vNiavD2IIMgG#7#3)&f
z)SOsVIo_V-!SIJ~)eOhh)c%a_<wZ{rbY>X>_FP4i at o4w6h1^h&_ at 4<&*d>$S7LM{e
zUorsr_oV4wxtJNGJ?S**5^I+Xa%LnH(|AAoowO1rmxkLAWB`9)r@=np+_2_-`y<Gm
zF#cjGKZN6gCdKhM;#3s^FfMl$Lu3ac$wer~&oo=N?NB9$)cD`Fg2iX%pLej?LG2{T
zt1bF0_G at p}yB={>>dJ*(Fo8csZ;P9V5VM1Rr4zEX=Z%#d5Da_Hpx<`r88zz7-I2g4
zrngzN|I)eE^((*C;9Ii5`e%iBt`B&n2*d&c=9t*YzvpUuC5DN*WP?yBad2&vI6NLI
z1ZMJxBQ)0PQ%C1u#{dN at QZ3A9yhE8!yeIfa3FX>nZR#&sv>jlNzmt#QVn92`p+IQ_
zFR<92+TB?vN{hN+{_&au!Y&+1k{Z}>w_z!_iaZAASwX*7=&3I01}=lSg$)Carz%+U
zEDHKNC6T7gO(p6`-WgE^M7ODY>|ZOwzwtmm`?wS4kDb2?@t2=om+wZLj)|?f`*az=
zxu!!?c8b3lvcd6)Lx9*u$p{~_`#6Ig2UA85%6tj`pq0KoAY at QG9&#C8wQG}_s#@o4
zx(@tm*KJ`D_J{`1yfTHXewGX?r7Y$S-+!YrJlcfivLQlQvsv4urT4pk(~f93b>;2@
zsXkbb8^aWaG8ys=Juz at 4#DX))_HW*LObogNK%}F{H2mmmOXQGvZdV at E`Sn1y*FV&B
z3y~@t6SX0#G0+&s_bx!x4KR(d`TW|;h(@oRdD=&)I)t>ynTgA@`o-`oP-f_a9a5^{
z|4{H@!AhNxGN&s0?V}ZXp5oT>Z)X~QMpoClGA7c1BkWLxAw=dD5O%KV!I-#q#j>?`
zY_U-lm8pXM1+!jB&sNi%EH>m`AKwzEB8-$5jqMF3&oSW$W+urbTNi*HF31QJ#}982
z-6cbhnZ`>5KXu0d2wpiC!hOR(zqU!FMv8oT+44evp7q?2kd%u1LZSy93cmQn{kOuK
zi4hOiR{Fjsd)B#Z;D+o<9ExYpUaGZneXm9z!KX8)aa7Re#-iPODXR;)xZ(Y|)viSn
zTjRSG{dGA(ZRk>Zb|LGY8He^xE*J6w6P#7xYJ(8|zRioy88O#le4(CTPnpsHj}zfu
z5Mf)p6+X;x17iahg6$cAdz9SGiFXj9A_FLuU~f53YsoQwG9vR2mdraN;=J#?7tq;v
zq_f at hzqTcDo^Jl- at uZpJsIbJC@|T25BDSFY9AfHa_$V5i`+>Lr_PxPadm*^D#j$s&
z8Fo&#E<2}Y(911=E at VTXmFX0b2wQK-B3fZg#rUj?CM3uT&jbT|=M}cH&z)CkLV2$>
zDJilvp*AOfs at jSw_jx&;XRNdMQ$&mqqYiZD*4_h}V5Brls(krcujVl-;0#MjTz)6s
z=mME|>1`DTNr#W5MC2(-B&qu<UiMSUvDm}14SS?^P$F(6$Qg;b8)yjkE1(h;K_w)z
z9ERA%IIo6CgO;|RFUAzGitFoio&(zUtmX~5(dOFe5HsdMZ_sbDiUXh7lUBOY7I5ZK
z%_ySB?pJn7UXmK~>4~~#jEpPgLaQB|Tw33i{U5W|<b_yj5b8pryXnayor1o~b!;q8
z-_k(_#Lyqnl(sNvS^&+EavQzq9NxY?rG8fEzaSxn92-8zr@|qBvq-sK`o??4*0d#T
z!1Fk#l={R>Ysr at fzAffd&V(kHm!eRL`QHoDrNLuTf3j78Jt4}sWd!a>3>e8^JIgCD
zyf4d at t&NS3VK-gX!eulwL=YrkvU6~6<h){lFqf=MQ#?5(L`}y94;;f8_ry3pS-MPQ
z?+=-78Nj1^ErH+}w3BS2 at yw}ForOxn4hD6t2kpChR;pp8d=tbI?gsN@?e#_I<}Y at V
ziXlQ5 at o!vJ7|IM^?e}ZI6zn*{Rwgyho40GFaShiy;42oIG=EA;aB{G1!$Nw17M at ZO
z(D_7&-4=!w-SSdi4N55*d~>+=W~>OyPW!D4jOd(BUYuu*9gcea0PeLiGt!1vKR`Z5
zbWHQUEgqEea!fzhiK9CtalT`t+^U_{D~|uWwfg at tz<`yIvgPwKpn00T5tRYRJ2nil
zNua9|bY|{;h<^83>ygH(DpUCQz~V+3=A`NpI)c(Ey%GqK_0SFZo7mmm-HJy3pbgU0
zbJCg0V4n<BieQOe9N`~CLa at 9O{-xfzxu<VplYAO<eQQsuY0kiZ39O;Gt^ozccc?AC
z>`6rBPznFmYDYI1V{$yZBP^+A8 at MqjPw0+>)nRqqlpjsIn6v$|H1NH?a%TIDYXI?c
z8b1YkAF5x}`^{RpH-^qFnB9uKG~BbTO7=#g-b<X3Jsw1y(?=iBe=}KP8X06E`ob;w
zU;Q+AJ>qdDPN*E2Ka1{|1H-n at j%>&PKeKm=)>m6e(*rc*n at VByOC^*s&CaNJ;@-p%
z at G@Vmn50)qs$W at 0sHkaKL>az5On@#~R%E|u$u=+$=2xM9 at S8vJ`Otrr)YPlb+zYwf
zIU_4pBlsL35x at V7$tkc=cUg at 6K3Z&NRAcxtM<a%IR~S$;!V;mpraIm(HX=J$0AmWb
zY_vB2Q2v&<1^iTJfS}oI*P<i<F`>%O?D+rH1P4MJX+xH6W)jE~P2D@(cjMb({p6)z
zLwsMNJUlZnF%IHi2;4u8!bpe7es6SwjEy75376=t$TtY1L>XH-eC41IQq=bVQJW9U
zS*_go1o;zHz^yNXm566q6-%u;I2gYlf`ft)Jd{gZnRRR@%x8%W!NwX8JEgSl;a}sT
zcz#@id0NLy_uaS^?TPQfih4M_cw!N7wcI&({bXbB`d21?;fdVMU16SBe|wWQ%O3Pf
z>nlI(IfaC!CT8xMQ|<X>fy8KM7Fa?PZVYRblO5!6fBM;lbmw74g_2HcVhG~pi<mM^
z4Nt`Ik*-8<P+ at 3|te_&&_g+~+9rwLzGVOvhP`S)*@M5sjrzm%weL;w_`|<c>g_@}y
z-})NgGz79uauu%i`giD_G#&#GTg+MTTFV+Hc-zC(LP(XaD`QYf1btRn2n68IIVTy1
z?-!EEUn<#L$5Ye-q5hvuVm_DmZUQ-W2Ue}zXa?`6z9>nZvDT+QxYVU=EsSHO8I+I=
zPXP5eh#fYAE{7Og4iHOib3gsF4Fe?z_ud>H;Twr(=0rH#3bXt at e};_qJ?aN{{8g}L
zUtsbZ0tlg?xbVw-Iu5M1F^?unG{pxZi_>Fm9+DXVPcAbc98sjNWNz;wzjB{$Sw9_B
zQ!BE8x?FXf;Pq0-et%Pk at fKy@7Jh*2vy!=vgqw;Ydg6#}H*jm*%kQ_YhWp-Fwzz~}
z`zBv$HvLgl0vpav?pcEH<SZs7^m|-Uax+2bt0$(}LT($C%<k5Xi-#S;B7;SeJidE;
zMw*U*Z4)fGy_7-IC1l-hTuG8}tYcu0FH&Mls3EN?g#r)tRaAz4Ak3Q9v+SvvrVni`
z4^qjA*EW_YvkqE<&kk)|jl6f{U(Qn-9E#U5^_GCD(odUACv!>jB!f75zZEKGf-mo3
zu!>)}9F(trpkScdi$vlzf#JXrW<JF%F8xf)@<60u7*JOnC_y>gxf<W`4KpMBWoO!t
z8$21cz3ynxp at h}y475(h-nU`kGMRv*O|;t|8gkQqf{5h6iBOuispGEkv6?>a$m!ux
z#M%^ytYzlroi6I@^gIjuMQlev>i6 at O$)jE`kFqH8Q>D-F#lSXC{npRtp6k)VCarE%
z4a$T+R1AtbsFkX#*U4){Hjf*X&Kv2Ax^d_V>gka9lsR at KXnc@IkaIk*XGw at GRiOzD
z{(1U~whEZ6 at Tt>-Ei+#T+oGY at i6Rgl*;Ww=PfH9_aLufZi_o_xlc})wkoCLQ9{uX9
z{w$J^I#JAzlD{1SK?=V>J{eCA_Y#`kj^?sH?h9~E9b5CsV1D#EZMIO^B7{GAOA&NO
zZ7?R#OG^**K`8k}YUi5(U0$5aMlwPR<g?~RtFm0cf+Vi{_`WUTL+I}HM)6Zuwf6T3
z{x3+N|3uAYpwaE}YXe~5?WojaP6gg5Me#$jI+|i7DB^$rh{L_7pt&9F2K%!558BnD
zIO4XcJ`shQ0H22E_k>2FlX)8EEAHV+z%T$+#;;1c<HpRAugWL(F at N9hrMvRO2ex}9
zK1Bcvpr%<VR8lFP(T;aZ;wEKlD?UQgJ`Nof`<9)8`|;&=tN6+<@wS_U*=PBJbz`{Q
zPn3Z$OR)#+wR9Q2n%Baz)eZ%;FWWeHa6N|;09Ay-f#H_EDZyGD?M}{-K-ajIn`HVw
zFvGxVLeey1<|E9#_QYV>;+HA!Tv&*ke95*A6 at oaY3O}28<Xi2mJg#v6Rpr`;0wF?5
zXZ$j3u40d3oEE;kFL<&+(gQ-VX?{5PdYicf{C8^PlYz4oe2 at oeITd|0*#HJgZhly>
zI7m)feAgmd<x0GZxUvnPstlg^jgxT?ed&`qkALWd_OAlgGu^DVs0-~3Z*y7tX&HKB
ze4+}P0g^9pcgA{Mvx}yj^+qrS3nPqecolt&0AH&~wGIHRiH|8>+a_KrCi9;0cA!`x
z`Y)Vi1ai|{kw7&@BJ{d*yuIE5Ra0&THw`{PGA5Z~skFqoHxj)a{xbM~`52nBAAsPF
z-Ytl&)|z7DKqb?N>#Tr(Y640Xz5$a2d7<R5A%<5$A{;fLN?*{XAO>+gUOhTvYfURF
zINHc-dr#qz&?+fNrLqHLA38vEOxSou!4oZSN~~Ot+TPO at 221^OxfFGoq%hL(?QjE)
zSbQ^*!>-98)Z!j2RAKuodMRZi#-yoVxUn?8iBl(~Wa#{47Cb#~y3gCmS;$eXw&9`&
zIk1BXj4PO(YIO}bAcrd`fHs&cy>C_b{}{?TQ#YAPxSOsz)TbUcy at mIk{?<cbz8eTO
zJb-Sajs*PKKL*<F2~v++FbZ%?@I#gDQ&o at 0fm6`~M}0Hme<6`W=a*^Y`Pf^qwXR3T
zQ%hjFq at uh643%aM6cU!=wT2v6zx&a+Aq(&y4*{xc#NPVMwA{P<79lwJ=q*t^b7k)d
zPoRzXN+ll-k+Vll72=t3HRc$1J@$^DVr#<x$BEJcrk6=&H5IceNRiHFBdn(gz~H0D
z)r6DfQ<yg_t3D?=+Yy7kX>k1#80;p&YCB5alppDW?5}p-9o2)V<-+Z|;>T_a5gBFy
zR00e%{sBr<Hi(#NHfRhn^uFQ09eeAZ^nEg-mWun5#$U*5!&baoxUrD>g-O0?Z?6Ao
z+mNiqT{1w#Tr@>388h9z#3UkCi60)1tBjX1z;$FGg5Sd%1PA$p^HD#Sf-lcENSR at B
zanH-n=4$+(*cuFXV8R`3(gf5amFc8m|0IPPzCMmB at aH48#-Y^UDea8BOaVPDWoi}n
zpD<3cGef;MQZ%BfuZp9v_tHzVbIyARPD0DE5I{`^7abeSXGgJVLGGJsgmW=$|I66W
z5EVz(Kbdz}>#S#-=y`(*&6gIsQsksHLLzMMI_dgjTwf}Z%L`=_HFoW{e>ZKvZopG-
zHm2uxYJ1`bt$Ih$P3SZ0zooN9)*pmO4s^jafF4gsgSC3R3JVL#yfW-d at 33$1>{}af
zC{mX|o9Zup!=BP$?`lH0QZ{H?)>;0e0F+4ad7=d~-F`sn_h>*p4JjQze{T`xu(2_+
zn7{O2ly>`+{l|p{1#sK(nn-DyNDlw at JB`f!)7thXc|G$}lLIJfm|o19<3qD*KQz~E
z2AzvO=-acp)cJJsJBGP1qrHntYyGUSj6xzKFo$lSacKhhud;%-PRgW>(B1~Ol(s=4
zFlau|7MMdK?E9CP7}U+`u57?{aJmboFR$bCB6I?ZI;|i`rasG^g+toV42nWInDR-4
zc1C$p>SuM2S=_(S=QL+2K6L_e{QyNm;h`vwt?F=G&5)m|I2|vrCW3^jp`2_|MW3K7
zL4U!`Ec_D#*9GUbv+=@KKWuPc_6ouPO#3u50y0XffU%%bt?xg;t=lUeJ^Y5-<3vI3
z(YFe319O6b&LTP7b3 at t{oL?4lfH)5db)Ew8<T_frvs9`xJdCkpfcY}2iN{wk?<vFh
zepWzQJz?H9_}e)Xs)|Yzw*}5u2DcA{Qg5&)-APks(jPIJX|#6MEsaEGRS at brd0y6#
zp)~3_8ik0BHKd(z+4X>!U|7o<lwvn1e^CdE%z~m$-b<30SXSx0BxKm_`4lhg{%rhN
zRK~>`bpb!q*ykdPr_V#Y*t|-A0E|mn`Z466<Mm!nMmE*- at fdgt1F1;v(5JOalI>x4
z?B+ENOKgR;-b0ZfOe5s_pik&=Pl#%C4b69(Ntp74)ma9b>JLSu46?zZ(*%2b>FLHo
zdkP6@!ZwTF|7IZ1>5=*HOlRYwnMR|vwg;BG`1GeVEH at qqG_d(YZai8Ij{WC=Jmd1s
zD}BPrTfVnm%<1{oR9!BsN;f2oIxHMdoNJUBj>55m5DX$ESm7`j=|URD&q at BZ5s>j4
zhTD)oC;A<dw+*_p4)}6XgaM3)+?f}#X4C6Ax+q5W<rPE#Q6d+HF>%wV3*>c+ at rIpo
zaXaj*<@z}5il4}YYJd~yLYXCypv~=dBoL&FANL5e$QIxj`$yDhy%#=+gixJ^rWjoa
z{~qw5n>{>!?2$R#NW)rK{vz}g`)RbKEG2tSL{Bo;zRVJP&ba^vwA9|=SU34+fODge
z*F9h|aOq+V#4FV)0f5;rxVcJ37yHtuqy*l0 at rsQ3(mY0138gvAvHz;J;U3|<VT|57
zE-%cW9)`?@(Ff57qWfr0^3(In%;5W_9odN+tXoTB0gq at WRcTyst5GBYJ{%3V;$x%%
z7(4<ReL0RDdOU!RA(&Es_$YMHuWcWN{U8}X;>;-`&d0EISRv913bDITpjD+1?h$S?
zwaWZ@@e_L4aHm<+!yxZE)El0sX-*h`Gc-f(pz at 9o0IyK%ea#F|_s_*_Lh(nD&~9Hb
ze<^;@w%TU)?e5Cd>Vc##I3>^+L7w~iN_oaf0?`M!{)ICu7_4+KU*$UAg*$2 at nqO4k
zx7Wd4LMV8|ri_kIkHe5j1u%rmc#ak*C7m^hhKGA}KZ^zS{h6THpbO<h^WKywQ1HpV
zeGPpj+WNy at cmP`Gl)4ZAu9}$9ObC~(w9Hg)#VvkbdMV!YEWuTVq5$V_pJ#2DXE;5v
z3J}B&&+t7ZUD)EFfvC>}nnWbl=#wwzg#gu8;smp4`6Xh*7j+Y^*WB5xutotR`@3rp
z{9hbl<u_fO;n<M4#$KaTXpmVb6O9>(>0~QItaLF)GFUAx at RGp#8kY*)Yk1^M<xe3E
zw|>zSv4pV at rEX#j;xXj{#gLxQ)!DMNM(?0YlgsCNbx95FPqDmKKX{~K&#D>M_}5}G
z2cj2Pyy>(;X~X+o{5J2=_F?F)te{wvptIDFL_uBV>NRC9W==n|MZEEMJYf^H=#_r7
z at HG`8{k_NyY)qfrX5!=fG)27HVfx!Pa>(it8u;vBd2Xp4z3lT`FE-1zA_N#BOvskZ
zQSfe+AlSPXjI{R{vOB;%NqDbN$K3<jnqJ$l-`cyX_E9T}eaK=Q(pJ&u)QN2$mnwhY
zz%Dv9BhI;Cc*{V0E4_X&Ssnf#!fjry2&-yUf!sAAfZoMFeeNdrx{Uto=Sw*)!u~7X
z?_b9B(HE*VQMzJ5BIr_)l&YE=80${iJJi5mWjRII$0^$=2>Xf_SGI+Uxr}LQm_0(#
zVW<xmLUnMK<x^t>CJW13?n2H6^C_u^0ev>dWSd7^g>1WuoE-lhaygPvPo9RMmT23l
z1};IAkuw)4VZb*ij~EJcCN&m&c{+kAvI)a-glG`bGSf5DOuoC!m%Un=sFS4EFvjR0
z88gkI9D{L#CSpP#8;c;3UN<6&OIqN{ayF*s9f{eHhQ1elFlg~}moSNTR&&DPk8eEF
z)jQCBg6pw6J73jI4Ki}#Hz#fV!SdLl5s2*Flza2=an3n)h7I_I`QZIjX_`;ejUy(e
zbelg9^byZn{=J%ne8buX$eJE(@Z!G^ag0i|hCw;&Rl&@Jbp4(|rfZEY3TT_ at lg7#M
z7fHvph-rO+dEh~^3ngQMf4unR#itx!x$<IO30rf#3N1MocREd;(WjBaegeC?2}7D`
z&tE;ej|79^i{oYFI2 at uczl*nc(g<yA5h?qg5N47+m-S^)U8zES at MXZ+v;QU<6u0TC
zJY55Gg&i0LfU!!hw~&8ewrQ}{pB_K#$n`OT?K?;-#wYLSJ~Z!yd##njc6wY?+eySi
zl{c%pfI&0$oKSaBsv;+%)B?(VOlMU`2EL$GI^ID9ZtH&-Q?jZ^XP)ql!Zdt_Bq^^M
zwR-QAnro5;{a5)~1mak;razDS=IAi5&Dtet|7nKs*W{P<iwFBS#5V at 0mYNHYj5YZW
zZ>7ET#v`*LxdcFU7Y($t(-w4eH#}5_Xn?)9OTmF+FbyZ|QxJOafgVnhs0y$txex5F
z2Z>_)h{d5bD4;AjDiy--CF`DX!LLwnqiWK>hVE#DdJe)J66R|=#k4bj<uCSpJHU}E
z6;`fK<*9gw!cREK_tSoIpOpc|ulu0NlmH8BqY=}K>vf7^x^P4UgNR}hk8g1`Bf!FM
z8C7SGh4Ocm=Qg>Nc~aK1k?e?OMPOdBVJSv`BoGhhif|0mf|u$%EoM36Q}@`hJ$())
zTVi@^*)jmzp}ZG|tTln&HJ>eXjIjI at lxy!}W-{pm%r<abyW~WrR5kgrSg`G_Er#^R
zgGi30ouYB;#pSE3H;E?duP%GrB_)+qW>I$|k^zg`UmZ^8)TF0}4w+g`Og+qJGGQ`R
zu#EVsdxQf&q#`U1nR-8LZ5!gSU7&HOk*{IT#jEa%wAh^>`%u3Ye4ytSQY;(Z&dUC;
zj)4F?gFKCP0#m4aeF&yAl}Qw5&<>+tI}xtaC=QG8*1rvZW#lrogDmTC0Ylkd$gplc
zw7zV}9s^cakJq1^Zf9iU;Y{{aWT99ExNH6uW5dFeNPce^qzJG1AG_sgztg4n$Ud|u
z9$AQK(v5{=m`aGPzM&H_w>FN+w*PB2dJMIROD><V1dnj!hFI`Ncfa|(M$q{y6N_<M
z0882#WkMAXxOE?}s&V(et>0}WBYKtAh53L(sERTIcn`<%?n~}di>+vE_UA%EOz#)b
zQD{DryzV9{TN-cS&7$|M1<2{^oQ;Yi{l=sc`lWg&TAWPKC8|ZAksd(F6R-VFzWi`i
zXc~}#dc-B&{_W1^KNT)}Jakz5>>TKFiNd#|7yMO0olJidZd~!IQb>W`2Ab>tK+SO7
zO>i9rfT<By7mTNRW1BXrP0&TG_WNPqrtlk at 0;w{!J8uSYe;EqUe>b<&=961Ko_S1$
zFrqCnb=qDGfx7CPjufi>YC3=}dKIk^5DFqEX}d*v?z-x$oj?kqwQv!^#3uPB@!c~g
z>+g*)OuG*z7gECn)le7(dr_o0siwY~u4K19*W<aLD?VOpxIElMqHTmeRUXp^x@)L)
z{ia`SfrGLGf*AKr?Iak(b?OF|@ceTa at TF{<O!KDKXEFOg at v5Kc-}XOZ6OG&+mGNXC
zm}ZAq(_I0EI|oFQ*ZOe&c^o$p5S}XsZRwKUb;1a*<)~sBWah)4v4i<%#TpKsY>_N(
zb6*N~<K!onOb*lJ!IVH%av)}az$q`*IZ_&1Z`oTn%ou=Lnh5!!;9L~$0NrIi8Z`zQ
z#XV`KGGm*3Ka;V_*b$`o{xE;H!bmdEEpKZ$I3H}%jC>WsmdYglGT{)Yv(yvFi-q0?
zcY~cA&%~sL)%H;YeE}*WvgaayZ_`wAwyBI)X_Pf9;K*yFpG8IPo$^2Q_(dQAQkiWi
z^6wXV*|h0#-dx#GzF_s;H}Ejc3{(M#ZxmUG2QR2kCAorj0hO=mA)PLDAAGeopk(-K
z+j0kfI90B8<F97|SIDm*cHw~3XFyQsQ!mpzYHOs2 at u1uAN;d}=6M{d7U|r6`r;|HM
z$Xlom6Un{TrQ~_6Ups}i%>vE`fV9{@@#;SxevAoggj`h%p@>7R6XZ?bKPN`E2ia@>
zKG?)8m|t`0|0SlZbSWF%oW}&ePWUQ at c{Q5ZIRe?{sDxQTW=gtM$v8K5_;9tlwx<LP
zwB@}ZtmQ*V+1i?sS0%@#NBB``KmdiYd&geV$1&v!&4r%sw?${VKi;pyeAn9T5R2q@
z^h0&0+ajZtyCURUn^|6t9_z~R^ZdIm7FiV3^%0ARV1cEY56}A*9vI;|`C1>NA6(h*
z;(`+3FC_V5_xgfY?YM0R!Y8>j^R4o2ViU4t{o52o={QDxMtM3mT;ch9W=)lGw^znl
z-CCdh?wg9{&Y14x=wk2wt&a^n5n<QA`Gehy<ml8dWHtDge&=U!A*e-o@(sHr6H{l&
z1DUH}BmTzlvS at DrBb-0s2c1$sG1M0Nr7=Vm?H=IXJcO>ICD$<_0&4ypYV0Up!?D)F
z4-S{~vHoN0$ZN|ZYTBIeSGh;i0~g`D?`K12STL-c(12zT)WnbGgIZF37diOEe|Cd)
zC$alED^sPY6(sv$Ax%i`P;YkyJjpv`5O+<X8T1wR8}2mwdjCDuu8w7FnsghBATO_E
z2%Lv^wv?^r?^@~c&dsSZxS;On%IO}GLbsWNE7sWAS+^dd)Sup>ZMeey6d!517Kye+
zR2(En-hn4X=-EZkvwt>Goh*Uc3)9Ri(Iyfs|K=TaX6j_L=%&yJhSCLbXPZ7GkbJP<
zsCVyO&Qs0^nHeBZT`(lGUulrrN4ib7(RKTuXzxN{;m9kez!YP}BCh{P*q2%J|Hus%
z!UWWC7MV`zo;`ohT#j5CpE0^eq0LAl+ at aNeLO^rsk{NLBd}FXm(s at G5q|?JqQ=Wly
zV$6v#@J{T-Lh-;3f`$>#qCu=i7v)b(VDnFXaSP#<mfBT$QS_-sNIBdDTJMI!E7xV`
z;CAN53}Ck)ds(Vnz01}7cl at +&=WN<(*@*k+Qeh-#zj^0{U=eYf>$OGMaBheXq|R`W
zpC4{Bah1IaXB!E+lb|*8GbR`SkWtS*W5M}Ic3F-m5 at C#m?a$0wkpI2vz;$DwQW`lB
z+yoc`W>;iRb2U2)NwB`*%2#ovCM8K{n6wZ%mF~3E-QmLtCza$@o{7!G-kSpsCe;pG
zlgXOtE$7Wr$@Q>#I$-;lC9S8+51SkbbFJ}k7cVi>MjVeU%+-&+YPeKO>In^|9}@(F
z*%&52i030YIn4x*vTofo`m$$o!pr`s2k7C*mjpk>L!UwZCGzsi<VRDd-2YAuDAY)<
zHv%eZSVzwfwxU~~!A{+3U!PoG_iZF{S<ZO{QaTD380Or+S4t5$lxe8SpCuGhPeWWQ
z&s~wAaVle{4>&ou#_5Nh61MN6fV7PDKS;ep8-BQDmZx|2CWj~yJb`ElwXJ at e^#_rE
z$v#;0RKC-5JJRM3?f=<lO#T%w50BSsuS1DU_A-G_w`+<{K$Je at Jf+asGWp{B<1vYO
zj;Y3mqHSkw9wsNT8Eopvf*6Upmc~x-Wi6FQh~J4;p~-hfUoBMr5xp%CDHM-C6b$ji
zfUDwMLY at t#cQ#T7RP at 1@5GV1Y!9Fp7eF-On1{p}0y9|_qBi|AhSwAkZ$(h<?>_N{C
zwz(bfhJd*D$))`z%7qsrEo~re{KYB3#uVeWa<8Z+F~5pmR1{}_u-?-`@=+3L+ernx
z(u?)*bKgt1T!;j~8XCatW|(ZOhr~q+(eQDaqMNQt;Ifnj7>d0W)2bCz+-J(jZTD}C
z(AssHr at f5KT9r-F&Ia}$U59_rk}xCLF- at nK|Bua<^0xZrNvmS?spx+Pg)$Cg?~XS1
z89kAs)ZX{YVSW%!J{WAPcn+!^1bd2MDhJ-nVKp&Juerl8-kLeFRWjc;7teD1ZEw1D
zSG>Jy6|5^mSS?U7Jy5~=0NTi^e0cq{LQWNOmm<QIL=oS=zL#pzLfw!?6q!P^A1Jnc
z;22kRSVl`Ewf~*DT-Y84u}r1B?3YOcIguvG^5$R2O2(LWUysvgf6tlqB5mmAt792t
zrCB!{X-m^xP)V|9rd8|rQz)K6KL=%vYiJ1Q-_Zp=69E*jt07gk`+zY=&uBRF4M3|*
z8Rvm##ZO<Y7()C)X4z+XEAj(1xjAmqq{`DByrv6?`Fo}VVMST at XStXZ?S`yd0|i{@
zxJW((RIr?ASf|ub%s1_eQHTBHXCd!I)<j)$DafHjff|swr~8CW^B&9#ul0h|9B`_`
zg|11$-#bU-Lfl>u^bNiYw)Kp)BO at 1t_J*o#dFVU=A_&V~J8Jdw^Ex1a*5eRUI=pQE
zpGI+d`tt;kGmhfbefdKjY7lhvH^Wsg;+JMW*{{D*mN_zPiqjGSV}!^WgK*t8l7Rq<
zZiyct&`xGyLguzONj(63Fl7Y=GT)E^3Eu<2#{bGuw+TtmJ5ZpD?jbW;za&8`r>GC2
zUbuaDS+2 at 1{P)S`5tF(ZXtn~8g@<ARN7HT0-98oM3H#B(i2K~vI<7912)0aQkt*8m
zNGXFTF2 at me)ktbai0tA+w&ra at Oi_4o6((B5*;=tLa8X!Etxb5gTw~Ufpw+g%Ne{7N
zb4rKXA0H>P@;l+gx`K7tl-8q?CvaMIKfD1|;cS0A<`7T>AiaH>lD;kLSQ%d@^1_u4
zr_gkHU+HPBK(fw at F8VRi4}ta+RL+0R*R(rr8YWk8j;`>b(dYQ!GlPUoTq`=w4^e1c
zOeiPwi7)>aLFkmU{mxqRu$tsf7W?E>M}zGr)6)+2xHN>sk`)S%U1YlWD@>Oxzk1Lz
zoEaF6Q%Fit8{IYAr#1-vrUmlOIu5OFl9R&7=bi#&Z{28yL$@fDex5XcMNBj?fG!D9
zBC}1>|6M(L`0?nVO4ZI?J{%Q)E1ln}I7mg}Msq_9dppw(M<tu^R+0A{Jc=*uM^|ac
z&q{#_U4Y9^>x9rI_Y5rjbr|7%Bvo!xFY!2UGL<x}t+8co^@fPGg2hJYF#1+dF5YYp
z>5CBr6ouv12jI=)+~j$E!LGE|L+53z>eX_K_6uAKFwAFJ9xjdXtvf at ZV4itq2+vzH
z?DjweQU<I|a>+F9^)XrWOACp%Dq=pqT?G(nUtL;6_hE8$Z|jGL{DT6t%eAGn?IvVl
zB1ug`ZAQ`|Jwc&ycv7uDstNEP7^=tlzc{boTFCfaQK@@#Q3Jp;9hozj#o%@sqpykp
z102(dzc->oD%}<OHpJk1=K1Vs?}qH(fkXaScpIr~$o-`o5|t6U{mw&&-%j2f)!60R
z(_KJi^ye<e`wBIwEU0&PI>QitR)<+)F~&A at w5{UI4B!YTqE2Ew8Or6G9J8so6_kT~
zuc)aGjifsZvtsSTEOVLQ)82YMbre{rmPvL|GMh4qw)C2w`rO`ArGrZp>vIr-PRrW~
zDXiDx&KCuTAj<CXz%?EUaIzUY_bShcw$n~C4ogw-&P8=i5O*<bPl}-}1LYGI3oxtw
zchGt_^L7sp!s`+as(<?I*rLZH#PTkYz|S{BM(u_F at 6aEUAt}5fW~znY6p(@9hi9?_
zyM=%!tE<$MC*TQ=CBDrxuGswS7jQsqTys~{i)9}81Iqi~Uir1fcEkou>uwQb2t}5F
z28yu&5Ly0hu!$2p9&U at ZD_In;cxztKcalJ$aa_!C1SUzmi)dZr^CD_zYTJK5;dNk$
zEC>kQ=P@!ShjD&pGv1_sMJ-&8MOv6;YK3hzBH+1~El`hFE8hd+u470B6u&oSR1L4X
zawX*m%?Y6<;66Xt8slleI*4x)T<EG%P^RGU*W>Kag6;oC^HG0)lORT3%f-1rA~FO+
zVmtzo-#u41CSUJ_?$Ai9kMd&V5I1Rdw^ctHc1i6A41E^rm&q4}laP)Y3I>-&gP()=
zKDZ`d^l9@|Q4A8fv at kWtjm%8TQ8H`C5!K$@!A$HVO_DPi$*1atge3(orCPA^RG|&7
zIE=MDs%B1nh(1PX+s}Xo3zbk9m5J_{A)cniywqL+ at soR1QGyQWa3dv3Woj;ozigQL
z(F?hg^>HnQ3lz^^QeW+p1=G~MbbivhkMXG`{hUW&ojayfb}(AZ7#_#fn^h>mq}@S5
z({3)*()aU&{?A;7sr at Dm<Y0t|Yv at 4Du1EOdO{su^$6-M9>2^Bo^b%s&^5ii&u!VVJ
zU6_+yz$S)M-mf)H9MMRvs;5<`pQU%Y)3I<qAuPKhxE_d at 0?X1h8izyJ0>qL1+3A^G
zX_5hRE+g<?FcwW2BZWy^p4nm0pAX^g?Da=oXli6EWIJ9PFyJLNGI#!D??ofP*(zAc
zIo|$xx)#byV;%W($%1M^;&b6KDpK=86+6ARgo3TxhdOZ?X8N(dnc~GF@(KXHX}<RC
zOR<!lpU)Zeyvz8`EH+kRyPEp*;00#aAi5Fr*m4S*h#d>`h2`0fZuvOOChWj^Q&hG?
zbbk<x%vlVEvRrHjdz;{5gyAYueEe_4CB-Vb<{qotI6fUF5g&Wr*5zO$3fcFO>zj_y
zZ at n9RkE_UduQM6lp5U~vzz?N%q5_T}h<w==Z+f(wgrpfa(xX94+wp7Wf@^NB-20f5
zS#JFq&3>syRIs6mcOY3Wt|C85IoMHPf#9vRw3;{Cy!qZ>uX4YDLire{w|WsmE!~R9
zBRC*Ld5&s32a`cuqRy1OswrHoX9x<lMdOhhqWl~4+ojP^($>`Fqthy%Dk9m!<~svc
z$}Qji4UrigrGV||(CB}9Gvh)8hHH<?c{2Jw?M&`s{p at a2V<rZ9obZCWwY at Zg^Os3S
zixR;S=~$QGA^@^FX{r+SG{?ZK&@qI68+6Rv2vsT{`lS)gX|pA6u_k*`q3iC~_wmIC
z5nx}}3TMT>%6^xV1->Pvp3 at kn3ef$T-t_sA$s`4sgJpKBHSQVay^Q7k4WVAsk8?la
z^by)+S7XYJ>o)R<X3Y$@nPMPAs6RfWwK2N3k-VSGtZ-r1eMcfK19w1=!Uh+1+l1&%
zuDPt3F_FR*1q>rEniCl+vbLskT7a>$UX_j+)I$Sk-g=zo%f02lWgweU$^`0~VjJnJ
z+vUG+%Zd>9XIJ18)p at Rc+We;$0$8DxCCh>TjO0WG2_>_IETpjr+{yB#gf);!_K~6i
zzmP1HqrNQlY(ZLm&_^Njz%VoJtMLxrBiz+H@!gkb0qeyaCjOV6L5?z<gvFTcSRP9G
z$5PJ at P(7~wlnd2};C}LwX6pkd*xL8))A;G!DF_xCD1*PcS&sDl84H;?Aa?#NmUbz<
zOS<alGL~B;?_G<-q5K8+ZaewxFjM&g)m3zYqoyMQS%0#1bUYp+wmb(wSRYdgm3(+N
z=Ld%!<53tz-&T%c=b)KnZL^hdbkA=*7&7i={cIqzLsRST9;U<D@&;tdpr4xkhTu=8
zRzHWg7L(J9;~xl`Q3{Yef?7z=>BkM0M3T|Y+7!Vcqn7MZN`c|}%u>A?TKGfjV`dl+
zTzmmP;z984E2P2{V(<2^Zdp?PK2hB7tZEnjsu at Zt^V6)+itX>|ugIL;g}I=oF?$w3
zhxx#vzPP;3X)DJEznP=c8tdJ4Sl`9qbom?NxxIOGItU^dTJ2csNr&ty6%M~FvwWNG
zx|)R4y(H{1FxDI72Lv1-_vQ64riHx~1cwBWG$@=AI9T#?|4femrdrP{)G7ze^uj%}
zAUM)JkfEaSV%6Y%V8HpqjYrdaV9?4<v9zmaU2yvuj3j&fLzD9F1jp*%?Y*Y*iUDzK
zZ{CgNP=)tvaj)qQp1icUhC|m;?dDz)&~HqF|3Z_^V+J`9VgS_xiUBw46_2_$v_ye+
zA|3|~lI-zMi`UMIab3TM;)J<UpOmKyi^=50X at SQ!t{>EbCg$mAU_!QgWS;D{nmly6
z3`l7_JhAnxAGUe&y(ZOmOr75;6ky$@qx|)V1Jij3F*-fm(k}l=dunn+DBy-UHGeMJ
zvL$ws*y+kfy_+qk+R;BBlw~P*irxSpt%(7^lInSL-h>2+(~G at d@nmu6<(nFk&M~Gl
z==VP=s*i&8g?#B0TFT7t(_FD5 at O2{t=Ip1>5Cu85qCp<I>tQ<74kx>yObiJ~g>5{|
z3zNv!a~HnhUvxE!nCd%+mrRQO?NlG=)z$(|vP8kE0w#ZUwO5%3{0H5iM>}h#BzbmO
z=$zu-BaRMi7VNG)=&$t?4?h?D#KLaye;=Z$O>m7lp!=LyENkzKJFy)vIXN&#2Dp)6
zHr=iIF?2wwDo-)Qyvh-sz`%r<z=%ejwuE}8U*^ZV;e(il7hZomE%17u3l(f$GZC#i
z05J at hjCWQbi}g4c#7SeD#l{s at G{4cu&c1xfum|gL5DsE~fy%0p?j#`Z4Bg3KxnEhm
zgMP-l(Vo`}cG)QW33ScNQB})a#q#fk&4$4y<8`GUvc>DDUwn`lmUv=o6F<LtZC{<R
zlG8C>Vv0t!A><mrsQb|bA6NnCEA_etB8={X8?{9tCHSg5Qd$9#zM7w*zzslntpDpd
z9)&UL*I@;S+Sigjyrh>4W&FiHfX=l_847Z at DSOexKd|1}tTjBoCvbCi7%4C9DSutJ
z<lh-cyerN{fVJ-`uWGu5B3x`3nSgPFUCZ^>BhlaCnyGIZJT1Q^TcSqvTU$r7>fN5O
zP_AZ9qh>q#{OCiMs{U!>7Q~YWkH1bDt1qLgHH5>QgEvZZL0dzHhqq=9J(qI+$}m^^
zw4uA7f{HZApJ$ouVn6R%4 at pvrssrgFOCS-#V;qeOSuJ3UV<2 at 619L-1V;}zC`jreO
zRJpn6zoW~U)ubY<_wG8umCq8vNlopc!}Sj_OU+`qb0VkB#9<=3A#m87)3yEwFzd_6
zu8R%Gt%~x-ZWlw#wtoEWfN_8;&324;x-o%FaNaayVKr>%^x%P;(FIQ!Ji+#_`!|$Z
z&m0vZGz`lQLq^3+nNndp7ETzlrJ};woVxy;NWeP=;a4EtXYrlxGr6 at B)krB8Z=tmO
zGsJ1^|F4lV#7(b%X4voiRYhgMm+48-lL^tFWdX{tK4K86CypnnCZ^i#)<h3ytqoN1
zEy3A#KSVPB28MIaqkryJ1&R1v8E4<}xz4KSMKcE0=nD^`F_x=2bzLvGkzQocZ4_WZ
z;Qv>T`ET{fASVB_?HFJG$IylVptn6oEynScYgh^;U*+?j$~MPbu{f_1iRe}#JTuXA
z`Ux9wY?)23Y@{X<NFed>^1 at 9UJz%3a+<=oz@?ebS{I*2F at iOx7tG7?z9m)``QLq|P
z%oXo8<ep24{frrb9-lSxOT6=*##T0CL;wu54l%XDVw!T-L}`}DI3{q}4!)LYDeH17
z!5=v$DX4xk#a$5>F1tIB4o)?P8 at Up#NrC)GU}4=OUMnH3S?padaki`LEk?^Q>;2&D
z6Oo~4I&(R4zN*S8N~P at jzks(F1<@dNQkxmURRIo!zG~SpC#?g5tzzkJGY88jYEiPa
zwy<caU at tX>DfX^=tE22h0>%}4)4{z&VwX<8R}gZW;mQYdY1O4%{PQ?zcj<MoCW at b_
ztYuNOX-x at I3mCo4XU9KP-$NqSVzgm)3OmWK;OIsyhN`my?fm?MEt7bxf$=AIxoiIV
zh;4ltmk8qv9eb)0d^T^n9bh0*&FVrGYiN(*J?~kE07&3;-s)I-1BmQ$oKl;roR#H)
zM at 4&jszfewDZu5X;|G^a?yY3|N45dY9+Y5*r8Fm7!Q|4}bK3UlZrucMJv3W8=zkxv
z6=rYu&S`9%$0Nc{P2Z3ngHbYava<fZur_leK?3-HU$eUf$$Ee_rkVv_2SD4(Au-=Z
z{J#%O>V}!TmS-lGzG~t_nTWUIupp!Q^a*FXlr5;DNXX9k_45r7 at Ih_j-yIAFkb}1>
zrl3wZ1=xnfy7#t^pSOMUyZ3s!vhX~6;}{75Y-RRiTutR?<amOpKb8VkveIot%Rph+
zyDW}?$Q0B05o!3Sl>L5+<LQm_hP2&~0%$2UZ;TL!!Dcd2Rh82?Wo<!`#$VusC&~al
zK*GQDrSs+AE3d?70etbmFl`28|K#V=cE|c3H+CpU==NK5LtHoSp5y*2=obA)O#R8}
zS*xIM+^B-DoIT_5NvE)JV-w&5 at bQu#O5C8WG7p>yW<fxN*bkj2GJABB5>liJM)N`T
zoiD3yDDr%YmaycMC}UZkMElP;;Q#n at G|+~G;aeAo6NQ-<^y`M`;`!mvrp6(50>i%2
zYt$N9NX359aI=piot(#yoQ+w#Ys?bkgbdd5EyKO7IRSbacIjv}Tq$8~xd+Os)Ew=l
zaavKDjt2}LDCYzrn>4sg7IZ{Hy5Wt+4)<h4Z<CN=PLrxo1)1K+<D;7^I+rF+p3Wz@
zow&?Ui2+21Xx(>ZT0D+>$t#j^zQu*?JqiG4*p4n&XF(-ENGUTRcNH5wwNT)FN{7K2
z?Pba#p|>Umnu4r0zl3O9rjN-+_vlZ$+wHcjN&J3Ka+vx>g4!=7Q8cDU*%?!F=*{H=
zvm at uJ+jF^Yk6NkF_d}p<=Wkm{Q-aH%6K=uq5T2u!7ev~CCU!Av$%*{W0Cp2rqW%s`
z<We^sYbeIUiV*C at qjRcDNw2O4(+O?EL*DQhVF$16s~|)>^-h at kyGrL~p<gw_;7&p|
zy`Sf+uRgCJ?~s=H*V=S}e)y817VZEnfR|eRIs?RYm>HR6UfidIcF%rxnvpJ^C(>w{
z+Zsfc$yd|Yz&<!=w2J?+L35-<@bY&=d_VXIW-K8MKXHL##&y7EYwm~5qYDbBk_+tP
zUN&6Ft$@NurQh)x*3XLy6s68LHxDSv^0I9SYw7goUc_FVM^FD;j|P+EpR>_SFY8!@
z#`xreS8ms&E@>a|$<?ehtn at _|L8u{blTfqZ5Wn4OxUpyS*9+imfK^NR8f(&Y)YZ+h
znPz!RuMVsqBCYy7V#e}idTZn^xX*XcM$q(UOsn+edWOiiAk6)HtvB}MmZ8TawR#~W
z*_zv2O(<Hx-nJH>0#qw~30Dj*N|$dL6i15*r(cXr;N%2nqsg}`s_h`ldF_NtwQbeC
zb at l9Vnmv)9=qc+txNl2>y?e9WI00l+gPfnWw8MNrO2Y=O$*>?1Y{UI#^hFVlxeq{s
zBDW6cQf_s%J70fJW!kB)rzuvLo&c)5P?3{?Aag*o=G6^P at uM9-iF01^BXmjhWtb*p
z&CM&E2}F*Il(@wFHCj_7W#t(70+mtnAN??O=}k{Yu!7sJVhe?wbj9yYX&V6EkAkkI
z+mHzd`qc7X#JX?3GiE~H|77rB^TR&{&v(q<_suj#n>1KB+$uYrB5*cZl*{h at rFEDt
zy=%i9)6Q=yPk210=Bjk3l$0L<4#fLnu(~f8MD!Q<qPIHYV~{RD0ulgm57lhQea<@3
z%vc2xKKsqO(xJ<MUDo~euAfzgrrznFmE>?znnFD&X<xG;ZREdu`5RJ`ADGgef&11{
z^@p6lbf|KqE4!H3GU!M7W|ySl^KvRUijTR_K*+&1IR!Y(Yh<@T|NmI*J%Q6uL|iVa
z1MmhWlZHDaNLoh6E&0rAI at j%?jT<{|LU0zlrHRLM>4Ee|Ctsokwt{OO3ww at -zo~1m
z^;`X=o=~&7MYi8i`xFG9=9c3${z(A<v7dU29=(~Z8dh6O2!WedCTlNK>GGbcX0aIe
zfBYc$;O=r(dVk?Tfe$t~&*9^K$5Y!3GA0Bbwgq*mQ>5s<0=7U6T<YH_ROPf)C{D;Y
za30=MdvOL7yGZ6Z2>i0zDJwG(yuLtHRpvU7DU^-!B_hU<FgEPLJgJd#uXNy3f73@?
z(Sq4GqzSTAm|UH;(gt<EW|gh)yvgtfvcJm7!my}~@!5ga1xYg&Bg#S=hQ+(DIwnq^
zp2=_DzG1!e9W7X*T0&-en at 1Q?q;#J`<42aFAeSBuz^#=R>13GWWo2^C06NLLxB_pj
zx$YQpk{<Yc4-p+b+9~$AD7dtM0(^maFdVjmDityD4E~9L+hSPq)Dd!OoOuOpjQ)?6
zj+tLM^Y~Ec(^%0-m9^6$Ucp$?aX1z(>W_F&`g!m|j++c9{%A=b#2W&)NbxCxp6i at M
zZ97c@`S}co$f1VZIl4P<u?!_Dv6p+^p1`-s(RU&BD~<p7)IXmfC1#w9?_~A+#x^wQ
zel*?Jx7#bncje{!8~_AGxpIkO{=KKuR}P}$aaEP|F|ghMk9&g<Tg at c7aZ4xzw-AQa
zOy at vJ_3e2w*Sd+ct|DQqE<aJ0H4u$CB1ai|<k<Oh`@(9N#$||0XuM+58;~|jaCw4*
z^N0=m)y~ro at Gm>S-OUF(G~6hw2vtQQ%QIW=4%ziQZs^|P%>zI?M;e2^Sq;}DsN?|p
zuh-<t4fi%|p8}CAomLs~ku*)PS2w_5CLI{T*jnjYY(B6<D&%v8oBwxB&9`1;fmsHf
z1-9G=<cRx%n;5q(p(c0{vNUTqaz{90D4S4 at u%lC}rf1)0U;gzZh|Sjh5K+7zRP9vX
zv&d1BwItP;KqtV}j<_|jyoD3n3MdB{$%x`P%Pes2aQ3yGw at R{hi?4dcz!A$?l!S^f
z9P at AB8evFYI)MbjUuw3OT8iW#gq>(*{@|L|3$Bie3T9UHn+ at C!Df<m3g(Wtbm at Z0%
z4Wo1 at F|~Y&3yAcX)jwykIo~Qdpoe<tP{>OmRH_85vPO~cyZ7`=a9>F!C at 9S-$(wSG
zsf`+9dv-0D46qT{qq1mJ`5SmDwJ?iq6g^W1N at 4K0^ddG#`k15lCd5qG0ux|Dz80)1
zK8%ZYz}t=T&;b8Li2`S at n?Oe$j>Gd{hGH}!_JJtORaHr1lntz^;7UCUVE<T3`Wxm3
zHwcuRZKF@#fbN4Y(A5)x2kT=v$S-1wM=!~Um7tS at p9S`KTm at FNfFbD#MyBVpxf8_H
z|G%tM)CsIwi$78>{e$l-*e5|4g`-q-Ie?eAk7qx!U=b9aXdT&NYk^U1^l9MtDBvT=
z{zNB&JASzbSf5zhVV#EcF?|T?nK$pnL7`0~Irq7jsji{rC at hj3Blx3)V3C4MG_IH6
zYcLl&==Ur;mQ*&}Rw2)S<o1+|gx^5cG_x3X6R#!I#54%v>rGhUWnx1Nq?tUn$R8Tu
zoUau{d85yW(rMMl{o(x);u>TAp4mUo`D+T3^A~)I{qC!S1z^$t((xGKvRg>|D+;`U
z#m9Ii8CsBRcJBQ6kT_tz^HHYmaZR-LT!Yy;8h_-gik!)`)_-cMn+bz~A4_ at 4Lzv61
z<#8fSBCNe;AqQFmt;x*1l&Yd9X?Z_k8&agwXg52 at 6BT&gdX-4!Ey7ws_~PbM&;0<8
zh3`_U2eTB|AW_<q6=sV{YG{l4``yB5*6bK|iQd~6glPQ?QO9D$h#ewRpuKlh!FB&;
z0;ks%3~E?7f(?77LsmTc^1~*YO45=uX{a#>yIN^;{*!J&FY}SKp95|J?9AcvQ_1z)
zxNzp-XPMR%tLjRoT!JikNRO;~%$E?5E6D9-zk<c^?}<iIdz%*x2l(^$NbieqeaMK#
z%xl^`Jyg(sA5V=G>Q9tFqn);Hf^0u%us_Gi*}bl^AJ6CLDP4Ny!~Xixo#cexE*5`6
zHkD7gkQ~b_RV~SFPiL8W1YN4wDh2O!C{jcp`bQk3|EoRl*F{b5tJ?C1YcWN-S``e;
zcwFtEpDf8-u-JCEAyWn&rqyg-33e8!7>Hb*`byD75`QUYN<@#k>&4B<wmvC9z0nyF
zf|Jy{%AIl0lv@}OsRCkX at eZi2qFiJ9YQQ*3?ztgNzTOF*`;;un+SA at aS9Z<AG7l{o
zq0$<j`eUSMWC7 at bFE|##&3qtNk(_dT at C0#9AvwU15LrtGDrQI_6ZPfDE3V143<cDD
zA;jX&E<$Y)Z*k5B*~%GYb~10u#2J&5FP}70BV-izl5JAWMZnuu&AH2<d$k{I#I*&~
zg&Qkjty2dhL|ZSZA>rS|u6{dr$3B1Is4yOx>}PxfPoP`5WHUCKX4#Ue#DxwPg;H~f
zzMtzpGQ;t8>uPS7ZKeB2UR4NlXiZ_0x}T+K8Ol~l41nHyVP`@I==H+?qtWbf6+qep
z%ygi at nTl-DQjc-%gf|o{so$c_jmA=E7eXDr^K5QTRVMOmwt|rVWvts%`G-1*G%N-N
zQ7$tnwpCHb`cIU7w|UOYZ3)qI<osk}dX9!;+SY&xqmJzg1?jb#bo^)Ss5!aL12|+}
z$=`DAHdk=SQlfSEQo at xdNcyc?FHY0B8AJGrjf#uQX(u&v7a{#r{{l|46TLp8Q4deH
zO)hr_tNkaJYr;WKf!AEd>d?E6;ncV*co~+tCMz&=U{Zf1^p4P)oV>*<Ye-j2ML=Jr
z@*|O6TosIz!07sl$D!oU&sGI|jOb{?BT(iK>7n8PQ}$11Mr=BJge$KrjlL-9F7oXL
z3}GhacyYmZy++SG{hPT`4FPPhL{B4DHo$fWgk=p9x~+-;+VsXkzj=V$D at Mlo=w^zP
z|A{2+btEn^Zu&`O&~p{ibTkJ__t2@&3XN6Tqt7?Fig-yD++`x5Pe~{=*Jy!nFkp=R
zu9hPo)P!mtoz^a0v at Bcl|H;r)JhyQHz8$m=mJdYj`4$KcP5 at Z<ujdnu0TbqL5ejJs
z6_lp94>7N2-3x+Cz?iE$c|F}x5JlL`F1R1(5FFbD==k;xqjkYQ<`d^!dc-pYU&ER(
zr|{z903Em>EF1r0+=hVsuq0cjRQr!aZk8(bvJr8*c+sqAO=<LFfvK<if{zarB1Cl1
zX&uqNeYo8;m at QSYoMRR^clv(4=<f|9N{cjUo(gVS=rCtXkIUOzDUYc6X-FEdZrwn;
zW{*Q3<l?qo6FhfPFm>8A^`6A}pex+nluB)BcRX?i|HP>_5ksjojs4K>g+?CMkJfLU
z&XOH5)nOY9&wRtNTDJ$XRSMfZW-?3d+=&FG+V=f+?Y)pkMDYWAA4#^XXY9t;88L7E
zv?lhdcD<wo at zA3bPwxH*9DT*+^(|_Dk<0Ha(?C+pKaRnEE1Kgfq9F=nMk*#*wnh=&
zM<2Hl at wj0oS*uLZD5^b;CKSdM<Z-m+H*@G7&www2H490!%EIA7#)2(dDlB#PF0{p8
zt=hmm)SDMIj(x?43!$tAW%ey5B?h>(@38b^!4G_TYh3CsFJ8RGUjw6 at IAHV${ablb
z4IF0(AmGOWhf?ue)tD!L{s*LMMdljX4Ybvy=Ly7n6BjsSO&(R&G@#ILhy;CNayP{b
z{|r`*zr#OfKh4*FEQ-IFfnyFtYQ;XcqVi$Zp&00Pu4wq-1+~_FMgs}u$oUd3*A;&$
zdo(N!(m!eZXg{U&_(@&4%m4sl*dYkWWF?VzgB9#_b7iRpV3@#zgO4UQ5|DR7QAuD>
z>;lO&^!t262!1H9;^{oqZf^&7YRLv<imv`zG(dL5U&4<sk<$pUow?NBOBXi~Odo0W
z({V~YbC5mAh0r(?DxBU>>5Gg)WL>Uvy>u5FEkpXdaI+(fG*V3FR#ShJzbR#8U^EJV
zOX#e+&V`7Lzu(h0`c2S(=h9e95!M+>4N|8XnFU%bzowl0)HA%aO=ej}R^L=mO0%oS
z6KNo$u-)jkKj2{&3KHwhN{e8=TbDewnxEo;G049yFn9N=514}tV>8C0M`@w?j#Gr9
zxY;TGbGu@^)FA8xO3YMt&)XXGT<FV6t~8VJ%;FiP6tgTeRJ#*ITx8urowQA=PQ^OS
zjzV)pD9(PL(aTxKxlBKr0P%3uMAc~Tce<PW<=bo}^TBC-YNpfVSBa<Y at IN3FE#m2F
zzG4qCaU*}hkX5F}o0xHye21C5*m-RA8OZh%Ag-g8WJ2iZ&JOQ<`R2gySN~20>g;B>
zD$h1C5mdEY8QQ$lxu}_dj4>lUQ{nBSz$(UzWJa7)7o0#<kk49w-!V=Ao>PFO8-^V1
z7VY%~|8TqDDXXhct57iBNPt`Axw)1m;3u^hU1C&6Tv<si+S}y3Kn)1cO$F33UE at jM
z*4u#qWD1_S?I!ulRTrWM6#aM?o=9~^q9(1*qcC4mn5IO)ir at 1I%3*EC5|KaybK&6e
z^_hdrB(}CF9vU188VkBUCf^L)AKTmvENxWi8IjOc98eo!7F47K120ulKax5G=|CAT
zw<!FGOLWN&AB8~oonv6rQDQAd%7b2qRiME*N;c4re4(EwnRyq={OgwAi!Dgw3xNYv
z64xWN&9H!q)M-dD2?5C at q~|tX8yf<x#qFa)t=3);-Jpc6OGf at Wr9ow*hW&^Q$mpxx
zvR<eMs|Q>C7|bz>_vrh^wQ^i2tdbDjgK@)OVR`z{M6&um<`vgu+6vV`E4`I+1dtn;
z;V?SakC~9eSK?pt<KpQ?whxF%SYqM!(X+EdNXPER$p7iGHt)1etGB<HdUNRQtv%1D
zX2eU$Tvo`08&Ust3d(S~c(sgVe<{^-lJ;a~60CLRMdQ1LR2aA<x-q?<h^u`kn}lTn
zH at BAUm5+8s7e3mMEZ!`CHx-bh1qEBO8>ZCeUp~?a8Xf9XO3tn+<6jJIlJ;x>pxMJy
zoQU{HE_?hNjAhV7SX3CBpKgKgo%5jgGC1P)q&zAIASx1J1pgG5?VT8~6xP)gvn@~$
zigBi^1o4CSYxowuod4{*V`r!NU%-T(IG8D_7=EkcNL1?Sf!x=R#6t~|x;uakG?><3
zQ(<!G65t2is`zTDJDQ~O4Xr5kA1;anY$on~#YR6+p<YE7%${5e0T|*6y!2&$6KlXL
z^0Oy6q1KUboZN-}7$&t|?!j7-!RU!Qwlo!v^4WkFmdeoBw5r<~1>xJf-HA5bgQ|bz
z6v{iRng0iH$tXB!;ywYs8U5nE{3T%Mp97fSkkyLxp8<zyn1bpkjz<fRVGWR!s`Li^
zK|V!oSjKsP|G at Z^>gjA8Up%UpN;~+RYbgGYxYgf7RZNFTJeO-R at f3LUzu&Sq%e_Ee
zizoZmq_<u^r4S at Zg;6c;|CUWhf~h%u)*by^_k#bZ#Y+u6A at n=CESIwW;`8I7YcQkd
zrAr)HBHvL|+e-{uj$`~BgHK|uadzDToVF2v3{-Txvz9 at GNh|?)^fVh%L$h%Wja!%!
zVw14bN6c{k)_||gr~GBZM?phi@{U6s6&&o}&TUiMX8DMrt}5IagIxAL{YADy-@)4l
zrmqi)qYlTXr?^vw(!ZTcVt+R?TF?O5^8qzB)7;`1TPVO=Fe#d5TN5dpZpwEwt->=<
z5)TNgz71wP#5(Yl4&{qR90^;Y(>8PXe2U+z=e$|eK97kSepX=GF1%N-wt)oyIpUw{
zG`9u!e;jsSMgrOVG-Bu?iost9dz=FuFHj8N*R)0%VAUg!fa$f;KEYsqDegJ;Oz14b
zUN&R^ljEh?p at bH4?(Jb&Iw`Y(N4wCqBPIKlY=&cNDe={41;gqcv$F{r4TWY5*7=SL
zp=C=<%-J1qXn`K9H)A@{iypkwjSSfs(*m2s%HQ*&!KM2}gb1>*cp at fe{xXY|hLe-)
zSFHhlRJ)wmu`bO4&P5Y@$6ioI3sFMSsn)~sF62Yq&@&zPQB0hY(6B&HIH2$Un~W+T
z9xieOKf+~ue~8M^@!C|Wo5aP#ZX0jNMhbLs`BHYByGKF>q#b-ANjMxUiz~9|#Bvd1
zv&I0R++1uGcT-nVTs<pkln;Dpaq*T7A)mAX6Yq2r-b>?nF)b4|txh!gf1ISf=Xpb&
zl#S7`0u=6ypockgQV0 at UI+UP*GX9gpcr~_XjmX3DxHIL&UVKE1x$@!}y&!PrX_xdX
z%oR9MQG*j at ->A<x%RXWiN}BUIvnQ~P)FZaTwnNj>)Rbq~0IzWZY;&>dHt{^TNUm_n
zMgrf!FgVu at k3Ur^GlpNm$fX;^x<GUJ*<@JxcE6 at hy_v|@fXFy&*FCl2I>Lw$-;hXZ
zi_#;`9tjnJ^CovAY~_^tM213SeOX at NghMI7b<3DN9s}S~`eTT?dV)>!+cM5N`uX!=
zJA*9`W5+z94hN?O#-71#Kqz)hkGqZ*#ku4+>1E%2H$}*QwRT)4t3H33lu5VOq^M(o
zB4WO)M)`<t%#Vao-CnUBqm4<`f;ql%VBE}!mH%9fJ26^zE)*D>(5-3#ft5GVuMT<c
zpg3vQYVA!X*t_TzL8*5&oI at 5?;stYmp}X%AZ&juw5J}L5Ycbwx)XR6F at qbRWe5&6&
zJuL*?G^)qC;}Mn+(G<flKU>Z^<q*=e;eikMh486$2~(Aj1VP(C+%Y9ugN7%Vy>rG1
znXC at 8Ikh1yCE559*L=%F@;3R+Y9Pv$leo6Rm>R>?gySMKJCGW5ti35L04u48YN3AS
z{i%o9F_FN8_-!YgS<-xY11Tvj^RPZpmjyktN at J)aUe;NyfqoQ=iKT6Fs-8R4TQ+kL
zh^{frq&_oDYdVWX2S2^luheXrMX%w`xML{s#cB$)w!5q5Bq!We>R2`yk?Vzz at EQ4K
zryJUR#1&pc?dfw49YPz#i<|G at Le1EHu$qh83QR0P%PgoU2Tz;%sJ4(G6!2gk$rq%H
zc599e)QC2+MIf}~3b;F#n-Hyty;p_7HwfFD#-Z*2Y}v?+G0>wIc(4cfGgNM3$RIaU
zhGcH!3y~xRH}QAX{lqN`g5C>y0HRayG?h_xHODRF4K)+&I}-4TAef+55`~c+y8Gv?
z(q5iZDVOT at lHl2dn*QSsph9#NWVs%ac>5YQU^Xtk=Q#t9jxuP?)-+tUAlKo+Npdi9
zOSxo3v;dTK;=)>P>bucgbaC%cxQURL=JSel5;UFf$`&NEq0r+CBmI?yDmo>_bb<E5
zu|?XW?pPp%p at 1h?k4rKk{M`rX+-Mp5F21ZO2xC+!S!2e?==!@IgQhTOBS(E=I^-Cq
z8S`*PWO-0|*$q2NF$TpXr>n<ngkDJqLAYoZeIftUkWPp{YR()lAH3U6Uut_gz$<!6
zMSN2DeV!qrR@&CI#egO<f#i<W2G!#i!f*T2hBUWR>y6-yN8uP!59eWoMN(L>J85GL
zoD3npnrqgp_46rq%iKN$e6h4Zxj_^Xv0}b=$kda2>_(s!{@7xE!&O=>bC`H|PP71$
zT9GA46GzKmz5tg$m&@u{bNhk?Pq|=@ND at +1NLGqc1v8dT)M7l%alrAO&{-HEwhq|W
ze(M}gd1NN9t(!Q<R0zIOQ6P+A(HrQRjlnxwx*){@j3`caWtY<Kmgg&3`bngfh=m>&
z(bWW0X$v79ygTE)7NT844Jr;g?Z1lpXkQP>GO6H63SG{+bM2+>nhGk`$ivh#+Z^_y
zDE1u4JH{}pZW_dFCMx*Th??qb(-%`>!_HcyXBC`pi*;M^hLjZ<{c>LU01PtdF0&${
z)UkH%cOZRHKGuk$2d`XN%gm3h{T86I4j~w-Io?Ej2RQ9|F%tf}?=FCv`#USME+NEH
z!FBo0=4VAx8G&!@kb?5rbSIt53Vn9Lr3K<MJ#=zXO0SX7NIeBL_}_g(R(7k|oQv<x
zkZKIC?H5Pbt0T5*GE&IQa3#U;SDT!aYgs)>^^exz98H7@?RU5S`1lC at oqJX1#IHzr
z>#h*yrmzVg2_aySz0aOhZjMkN2BjNFb7D9j3X=4}3G&~p=g0^%I|t<2)=2!9eOz<<
zVQTNuftbRMy{|yoZ#&KZ0>Fh`nku#H6iWE=TCWH at 4}#K%)l}j16Bw{iEH5Gn09r*P
zT(Uz6RyVxe9c;ZjkR85fN7%uFm60>^v_4j0R3=`8^s_?`=txr`Vy88QV-%ju8Lf88
z<n{3?cYSJLS%MyOKYDgVA at y6IqQ9Q~<r>h*dRS^1{V<ZE+&&05X|pSUy)1u~C`aoC
zbes&$3Ob{qr&ktAKtw0r{YL#k-V1i>rU)}-1YH4O at i7!t8)IxLGF>e}^wViVYX`TH
z0%KAES=7UvVQ3O=P%x0s@?L_qT9j>$g7DIPVnrp*EJg?({#vN{QgV^_vHQq^k>Mo_
zn>}?cwGy)e6SuAubhq3Rk9EGoOWauDVQXwTSVupKf)qLI<BV}a?acw&lrMVFG<01i
zhb>N|?`)ygp$kc_TT?YugGbvfc6u$rN$ko7#I$c)eaN#)w~Y3yv9wo=#-{+GvV1L`
zFd3LQ3`dLHCqm8t()-bv7z)BUyKZXo6X5rkPdmd7cJ?nlY1jv&;3uelraYhLO;MYz
z7AQdG{`M8tj+WvD+dCMor*E(w(u2UDgEI+)7Sm~Wo&+*zr2+jQPS1R$F~B+zlYh|s
z0|S#2R?Spz-SGPVxy63*>wt!j!rr(;Vxyi=-Fz6?=Icg+ at 9L|nX!(dnt5}~r5i|#b
z+`4_7{;RGTme6EvBU)KFeP{{2L$ucDJ-^JtB1yKVZ{G-2W5sIEipn+~|2ST0NyAq)
zIr{$JXPcN{bDi&34G3#O1+>AhNHMrj6X)3g^}=_rjhzBVz%TW35G4p9f+!M1;lCL0
z|5VB&{V|%-xOD`0ypQ2}afCxFIe~1;i+x0jfmWQvE at T_rodq&7IY;!f71?rf%J1)O
zKiV8Z%;1lUTZE=|di2$}thQ+MuurSZPpvwk1Iq1M9a`~1(s*}w4=qbx`vwP*qafy7
zOpknetl5J3+=oK~q)wW%*+1dMcXa4#UMgVZ8_ at 5it>1i$nKCWSz-U=hyFIlDqlg)z
zyf5_ij)ULR2tS}+E1W=sDX=RcKB_R7R?Pv|w7Y|@-F^+{W&;l(v@;+^Ehf#CpH?oF
zGA9}a@(UGOWMW7c38N>wz}g1%^EFK>!8>Z#7PYfDU7^dDPomyfV)<(aN&@%ox9J=^
zWkB~}kQE;b-ogP;{$DPvOYjNbB|KiqDuu~yu$2$yMCy38CfgwdCA8qsC at QgGzN}@$
zP*J|U0o_6Ab(xZI#PGqT0#9`(p-$*a1T!K;Bu}^sU%G%IM9 at 3s_lmuQ5kJV;Y$<x$
zf?qC`go>2sS6ez(k2kaE0*IAYsgeWV!)r0B{Vw|iFo at HcnpRaG?Xe>!C%cPha=Qo;
zq9tFk8s1hEYq`KzB#Q3Y)js*WRA1|DFavVL|FAABzX8`xw8ON)A_oM4uPP1l_s`=-
z?DRl16{NI=ON at _4%$ogM%SYXu at Eltvr&?DbFpt at J*Lm0DeTY0f71*Zduw1H9Ryw`2
zFp+YftXswYLq>Rk6UvyC27=RC at NM)n)i?(>Uv>p$PSAkT#`{@7>~_(>i&TFy&Z&?&
zE|RyL;wo1f*%Hy^cIIudu^D!|J3tj_35(LJ)a09ri{W*<5`(+~FreYk@&KzA;>x5W
z77uwA*~;7zUbAyWrCS1m^m!-<+y;UM=MlJdjc3MqQ=Ru=^Ee)fCsWaPp>)uD$@@G3
z`4Ix`k%|_wR5Z8k9t%<b>nrrHReUVCQ7*lNS`!k2uyKr4&hYR}8o>$hSzb;(z!?O;
zI^h!7gJ+Q?IKni at k@nOPRkzg0AY=A-^Is0G{~9cR_A`!%WljpIH6nz^lSsDp?&Po1
z@@+)9xrJ*gUb^9lc0A>iwQc`~bOz48x8y>D`ZU}fQ)^|D5&h4sZU<t<g;1Ygu4CE>
z3%T$I8~;R);2iiS39|`4STYr at MX@+FWz|~*Zc-trh9L_Uk+crI{?YxGdl(UHRhwsC
z#;h<Ab}TZL4J>~w%W$WEPQWAAk%!LM$t^Zp^m^dC)W4wmwa1huL&XSS#eX2HXJ?+L
zz^Hk4 at k;NWZkCQvSfl#FJQ>_qfP0TJWWouJ76x3SimW!{m%ED*_;yA>6}Qjf4CS#)
zho+0(P}3&R%?jkoJ<@he|4_+=4#z3W&97>iQ7P^X8(CrfK_x&p%m>#`m_7kbYQuo0
zva0r!r~JG%=G&z|D2%a>N;8CUc#gmUQ-vuj`Z&<-`&bLbhGEc{02h=!oSU06ks>uM
zbsiEI2r|AfR+MXH$)2puAQCP$PZIfC>k%VFPNSw4KhE#`=SUwixS#H2Jc-sd0{`U%
zehe*V5A8sv7kJ3eMRNC%uN%)&8f8wjN*RV#1}FR=>sWCY8XN4|LqALb1r0idyqXxY
z7b=nFL?L8dOvbpElRdDnMk<2~nc~2NRSYUZqH6&HkRnar-Z;7eQ~CMpqRwsFT at 3r`
z?;J|`rpNoW$e!cVDTe{e(WFN!rU_3D2Zo}+ld>aHjcq at o!_80kAqeTc?m`r9BXi+t
zT|axj>}(zx?(X!H9-%GljQaAhRMv{q&Zt+w^-U=O+X`bKI6W~;Ah=ZjFr3Z98Q5}H
z*R4*l02C=@5pVbvZf`tGpDK<7(@aRw0^kpKKg6M(sRt31TA83bUB!4{0M<u1B2HG3
z-WH=cv1`bN7STDLu|8Jl;07VBNLL)&D8$*fVBaL-xaMqIsvm6d$4FnBVAbBEYr#f(
zvc+`kpp49I8kFW|o^iXLie%IbfCxZncE542Yl?9T*7p}1C}<>T6j^)gay)zN<SIVq
zXb8ye>Ayxt;1H%`mi%>)c)vfj_a8#<2Lfni*<nJ*jQHrOXiRg^SLiG(GXgv9N}*h2
zG(;@r_(dV|N^bqt)vCtVSq2R*=To{)U!u)tNxiz57AV&v)7^Bs8^<zsjr(#e*`PIm
z)DgPHOx`CTCf*?_s#N7rWK?s3T^|tYNp~VZd)r>C988 at iJ^<if2WsQ~B`Y|tno!KK
z3j`?6?)zm2Hz4ZP^iB-ZfF-W6FH^_4X~T at fwc7D!bW#1_7ps<vbVOk&+?~GLtC<l_
zshW`uw0;z1{?W)|E;NQKHnAjB!`xW>P&^9JAI$ZUCO|MUA6NJgzvU8Bw*_^Is8Xk|
z&~9QP*M+$D_%#}*DL_>R#a-tgmmQHW0n_>}ar%k_0+UI4O^9S4r%3 at -JA+h$p|*VH
z{*Vwh=3sD;XKeyf{|1^(iDG8bDn_w9w0$WLAHWS+6Fv))shKXRgl5ypPZ at u)gewiU
zz_f%2W|;X{q?n!a&r5uG?wwj&UG8@!q4)>{dunEKL#^Tc`>9EjS2A)D-%D%ax<!JA
zwAS5%(keLDQ59<;B=5_w%@s9xCyCq2)=R9M3CfxdVF`#GhyC_;?6bPBF1VBJ%wd4I
z{j6~JkuE*(Gq|xxK(`5QsL0vsw1 at zL0fj|HHfK$e*!9M4`FXNPnd*B|$nolLB7RCq
ztl#PjyIDXAlE(4o!mk;k>-MZciWWr~+W&;gaC|(#Ja=9n9R8bl%Tk?gz=PP<CpTpe
zR{nkrKBb;v%AiT3Hf225W7<*%jf1YV`DIAU^o691p0`_^*;O<L`?HkRKE*_7I-3ig
zqkpqb!U~fD{IINGGwy*1s>m9D%$rc$Ttn_U4J+8@&AA&|!lUIb&cvTL;%;WT*A;oH
zdf(f|8JdWYvH5#QMoy%@agssnK(xY};_nhVOFcshW^Z1{F4Cb at 7-_G}WfL;xGh3vh
zb)pG!*WT&8&xtV+n-Tq7Z~co8T$cp5w{-NDYFdXO$R|Vh8R2vY>tSEk(mJw092uQn
zpMh*x!gIHVCQ<QQytLhd&p`QH4yEby5+N>uyq(7Hb6QgIk?YpJ3=W9~2(+aMkdk{G
zYUDEw$6jpBNRZVP0-(C1Nk%s?4k=)b%*WI6DT%?wzQBZ!%|*wj2R?W}p=iD-rX()W
zQ?gi>N_NGU#s6EC^`+CfKs;@MT-M!MW)umF=w`WXycMdXWH(7T&BTDk<uN)qS8dJ%
zX*sArcJ6Js6<)vetBXD&G*}Las>_LyHAphLi(ztr?TAlZwG)O_h1nVd8JvgapcfLN
zV>`|>`Lg!$wI!!zc(?VXW?ya`fZHYB8Si9h?jGG;44uZ|nT2}{>d2QCQ`!y#&80NI
zoIHS*wHqhea++PV9ph at d$8t4cB_hGtvn at -qITm=qLBE0UBtnc?e{h-wpq2WP_dp7B
z?`?BhG#tHJ;ioh3g=1Yk(H`t^66S)nX^Eiq&dX6*q{XB=6=c#SpF9xB;sOk|T)t9R
z=McF7Yxt>!wN8uzcyrag*2R_b(HOe&P4`r~inoM<ywBu7RZ(W;RnW>?2tObQHRxLG
zOyVx6l4?>sIZ+V+8xMr7J#LshC)=vDDj-V#qGt!d>Z$lD|F9Cnp)fKDiJ&g|g_Eoi
z))}nVhh?KhZ(DNYpnYIkS0S-mFyd>Nd)D%X#j%(6J4$m-JIv!<;P9Z`K`%>&DKIm&
zI{xkj1LtxCR<c}wfL5PiV+t{%VP-T9z<!vp6!nB^r?>X^ncl|TS><Ktt}%-O^|wg;
z%=YaFyj=l$B=&f*b!+E^+?C=<PqR#yoe(ZYNsNlu>1ueT;*1xdQ0ca<TXi5(38dST
z-ptP*TYT9J<dcWMtp+2a5>faK);CISzBP4wEpK!<Nu^q_$pK2$v1x9cG-+x8C#QDi
zI3ON3v5xN|AnO5lnaPBf45+FN!aYQ-;tT4v2eUK89INiHe^l(r_+Km1goLZQeI*df
zy1)*ElCy!|#xCMp{R}oG)1aQ*M<Z+ at m6aTW-2={j;AW%<4&)%NR8yM$A&j8;JUHeY
z5kD*n;`#e?+OWXuO;L&X0IEX~$bq7KK at 8KuD&wB;p4?8BU#w>Nh2}wXh;~H><)wr`
z#BIX8o>v~yjP6Kmb-6!oijbOY36jyd7G#F7zDj;>=w2O|bXic9v<AfmRJm#Lp1nhp
zKoy#V{~!6K>h(eNd<%|E(_ULw%P`1-gUE}DP#*79fiB&|0ovTj5Fd)_49Lco)8&zM
zH_>%RQS@^RL-cHO<@5izK^?8*G(1k+pi0-k7HbmD!1Pjvj-o12IS4=lcbjfq^hSqE
zgCGSBu>Evv3E_XML&$imFgZ8Zzsij^AO&o5fKaLh*bvl7c{I#1hq%nJLl$jWd%-(2
zb=iIWTZ%E7>BxTy{{AonrG|7vc)S_(ze^)RO6Jl#&@Pf^jrPzPar57i<uKw<arp?w
zgt)8ti?k0AzHkoBHyt0z-x8IiA0?;T<CDRqNF;$0uO|sM^f!X|NrUbPjHCUl_yv8S
zc-B;bOebp{KdoI9k-$4tdJ_ET0H`h`i(*#38_yUfUOfQHdovev+9k)T8JKs>#<E<^
z=hOXA{T^SvA4d_Qj~m=^){-<eiE4Chv&X8gF*RTz=M3~rcg4~f19Jd-j9&x}eFJg0
zvTFHfVv>j~Q#CU<`jm0X_~6+PYl==m*`wjNNwxo5Q>^&rs!&JU=Xgp2Ye<R}zGe4+
zqDLt<Qu;*TmGY4QTVU+S9w{lHxtZn6y&x1_u|o^M-}V`;n-3#;0*`1?|1#$Bblj_G
z_n}Vo>9?1cv3uPy;5AH-57gtj_uhew2-je*-6m6Y<md?%lBeo6r at Mk^8o+#{Fvi#?
z;T5%EJ&4lLH*g at 7d&!JD%bBPL*A)_8Kbx+$<|~K4Mq7rs9?u=A7iBk+9Oku*V%>J_
zm0*RwW~m7HWGaM?mdbe&C&Z>_+MI_q-e0~W<a?4T0wdJ|hXPy?50I^9L6H~&J8ps1
zL2%+<IPNZ*Cfde**#a)EAseta at sjlP+SU9P)1tif$`bcDC<H_JO;5>lc<)t~4`L0_
z%kpGXdNHAu!-~o_CK~&6raD|3(<{^P;fPYkhr_>C4q4Lvm*q2>6R3&POC{jRR0Xs>
z{&N|}C%df0Y<MYNr>j>4%n&!jeYi68D(%GIp{_Wmg6-`saJ!I+!^k)w7LMq<AA6`L
z#tD^enCiUDzRr!8<1J-f_2lUogQye9&a1y}<%ARvM3mWwFkZi)WgiDZy(X)am85G`
zpV1x}N9=wX{U{%IJ4~)|6LALcxQ%}8p+cM3uM`3s2M5#~MLP_EFxD2_R6fqTh$UNB
z?T8kq(%w*SqlYMS%lyKJ>*WwGkqmibaaPlAn- at Kw1&Zkn68g*yBd?1F;Nrqz<74|E
zEJh@|PQC%G{mUgr`CFL|a8W4+8ioeQ9KSIxZKRA4htt@=x6%7reYw(km+CAs_)fC+
zP*c+ at NrCv=n}cj*%@CMz&Hmg<4KzxeoT6(%45=8k9_pTzq89(_PRvPZHPsnk0dZE2
z!Q~>Gd3AfPkWLp(#lQO2r}6TBWL)#r-M>Gg{x&9NwUxh-*SKkc#%O9ZK(Y^>$-R&*
zv-xVCov%MYk0^>pNSb2m&~eTYS{#9oL+y at whm)T03b;BP2e>aY2#GAErSPd?b)(89
zfUP<wc9XC&LvkJ9CI^eN3jBh^5+iRoEWGh#KgP$(l(%}0baHr7ViGw-{V$0(14T(&
z#fRsK-Dj*+eXI(WMzHKz^d;bcHPf08vz+aSV?fqQNs_h$T|9 at Ajtfwy79Bh|=`;&?
zi>7Rq-@#hx(kO;v7Vx#m&zK*xxB*Q9r+n(*yT0*C3_D8uZtj)Rq#%<cqf`~Qk>B17
zk*)#~IKL#y$K*8?*TaEsHa{kCx5Hj%OUU*+iR-k(ri?1jR}$B81Y0514Q>pKBd at r}
z39Tq|$l<_uD!%}Zrb~7siu>67^pA57gNnd|5X5 at NmuoigSh#?HrUjHYT%)Nqrwv3s
zQKQ6}A})Cyh|U+T1}Es45k$hVL}S;LStm#H8kcw<E^5YX@`=GEKvMH*fRE~s(7H^1
zBZy at -I=xTkkB}MJ>?PFgdJ7_Nhq6n}c#UY?Dw;$hoP at Coieki(BNKEv at 1)LY`2e at y
zZGsYpbGl%FK&sgrA#KXBw1Wdf7Q1{o5zZREjS{kYe+aF3m)`PX9EcIXbEcG*pLIMq
z;pI&+S~}&Yj2=t!Bc{CABvP?><c33z-jMOxnj5>y4`)(%2nfa_bFc<XGR4Hlm<J%4
zaZ$BIh77}o6oVOKBE9Vu%e><}jI at Zc8es-Y^>b1zDwjCKs6GHSd=I~cY(e^P$8mx&
zI at aUtPbz?qxJkPg-wr$Qk$D|Uo{^12>3BF)WWsyYMRT6{qj5^3vi3_lWEqsW=MT=Y
zL4No`dm`*&XE at peAqx}hL-e4P{QKheOlR_*6eh at r6S+J%Vo;e`dnmazT~km+ijAq<
z!%^92W!%_gwZueN3dciO2 at 3rOrPYJQ3R+wRudnMnAntcpL)6}Ic&DfXeG{b^)=m4-
zJ+%9U^?IR5#Yd$z=W2Yn#gly-(R$5J#lUIv)w@}Nxbz4$?u(wNw8TBQT9u1`Cv}#m
zeqNPI{2ev>WS^YhkF1JdF<qBvUggrV1ZF=I_}S4&7Y0l^+m$M;x8lmziN|b_h$(6`
z<{vzT0THJ3`@EdAWe$>i1rGEXP9uVqz@@lo<v0C-n+7rdsl8q at 4k#yPR<5051bm at U
z+ILWg>&0p)txp&TL$)zs at 0cCd@f&1OE+Gmz69gy^-vXJ|7^@qjRPA)x78W8$4Y7g^
zvj?Nw-?vuQxp at wQT8z@nqqZUgqs74w{b%vE*{qlcn0(m9X>CgnaJl9#m)x(*N}^d3
z96dlxpkCYp24e70-?#_sS^KhS5r$6m+glK)00~pQn~YZ6CbITK1~|dp*4- at U*386$
ziIfu%S;TWOdoXne9Qq}8D5-Q978AIsVDKRy31M<_maAQun>YLBnnBuc0HvWbWP)~}
zhe at p>lnYmgCjGhZ`$>qMYo46S&Yj#d-ZimTe&DVY1d1yE*h;|HdOR?_V~W|S at 7TA_
z1%_Fg-XRtq^4MSI5^uDbw9lDx`(mY#IvDgB+Vp(Tt?XEo0HFuIVmy*qKT>_&StaU}
z&UIb$^Yyv53QA5lm|;NFA;uN21MQEe1IHbc6aM=Z$tD)6>NG}#*%_Xn?jg9aj at l(r
z9t9tvjRYma=}^eh6`8hv8)u*$KC1z3){}fP(F>Jz8V(P->7E`O!TNiriCK_4%U7ry
zQm8Wet5n-iw$T;QYk at uis%3C<*27<WI2e8H^Oi71f(o^2%GJ_Vl0vK>jQoze_`Ymd
zMe&?G^1cx3TAA26%%>9vjO{&(yBhP6oKC+z9W7_<=9t&1fzJ4w3&Qu2cG^nGGUN42
z7McFh%<A2G3;V4M9ES;N`}kn{a7O#kbm&?vjkCh5Su>+V073JE8hm((vQ=Wc)khhy
zkBP}wRqST1KWR at MMps){+6SKqdk0;?64CBR-j?LfG(1FGkLN_Cuync)D{0u|ZycS@
ztYUecDgEF7Bo?VplQDx~0cW5!Q1S<deMV|m8;#%TO8rpcw3f;-%bxVlW2G!HIjUsB
z<d83RGJuV$Dst)(_%$=YFm1kf64fYrWzMC8u2)`H4O%qPdnOom(&LN8PhkBD01H at v
z>ZOjam=_~b|LI_i%*^xUeltMw(#QmxRe!h8A3*J|xUHd7D=Q_1)L%vWTguQ9!D&H|
zR#~v3oewOkcYctWpKPR4Pv3;@9ILViwPR_5VJOlJ!KTNe84JU3n&>qj{YPt4+yh0A
zB6DSq!zA1?@UWX7I~)Gz7z6U%`a*p->x?@i=jMbTuc7*(P}P7J_&+UXcJCYqyg<%y
z8hyF6R!Jmh at a?e~T)@?IPGglLDwcml_oiUq`P3+x<pI4Ao;eNTwcUfV<1fkk__YET
zK4GMQTc&f0%Zq|j<1I|c3j$0$t&fZ26 at x?MQY4g*K+z8GhCbYL;DeK1pR;paJN#*x
zgiPXp8;N8wE}@^MQGW&0MX~YeIUZf&Jp*K3$L|g at Y`Pw3f2Bla&e7CLI{`kr4)Cye
z?Bm0!!e at 3FJ5`gNADVDw`dML?3>`3k*269FAK_n0aRW#vvyAM<(yw7(N?BI~^X_ at l
z^dGU<?1z8YSqERi(zKRz at cg=R3<I6sz^*yLzB!F=rlEos(@x^`K@){ERAx@|y57j*
zyY=<z4mJJ+E_1CRznw816_ at -!3Pb=G2 at KwvPUWde;73516=QDwIs}85xGh)t2Hr<U
zS#RGjzf`Z-bgvoJDN3cr>IQB4d;On1`^!zUwzl_P>G`Vx@!zp~+&QuRgj21O_$J<Q
zz at pizP4Oj1;U(Bh>#mb6#mY>xkDJ*&^jadrGf@$nE25NN-mw}7C{YbRS~4}62CQRV
zlPIM at q2Mug<3Tf$PLk#I9zuQBd<Ps;d_naaG`bG^xI6;XA$qmlnq~pKsp-=jwPq_|
zzQ#G58S>5?Tv>_22gL`9c at c94Ns4rz&cf6;(2svhsfbvRVBZjdQm??87q|HK<u`dd
z at N)^fCZDYZzWx(OIWVPnkD2CpD^(Z6K{(<b4_9(dDLL1%`hIy_*@hE&;LiE`e1>yi
zFFXAJvH*}^+9$Nt`4wYR52C2j>fn at VPveDmD-Ix5{g(s;ZP<TFW-qXb`z{vZRYc^F
z?J}L+io6R=KT+wFQvJFr_NWUdDeir72bBL<5_JJMWB$5mupuPrx- at xkU^32v4SYq>
z>&MIf@$w6_q+I^n5$*N+GQ*r%L={C?L?W2a-j3#Ao9AE5mo6eMUK%%P!t`ucTCQ5{
zz?)QW=opy)M&;ThZKbxDAr|(3&WSqWS@$|V4Xv0jU*{ZiQ<xUJDc0bWw9$j?WK8(x
zEkGsygEp~Sk#}0ln4A~l4b7j?Znd-wTogJ_582?CX0v{z&nKa$2~%5ARSw1hT?Op5
zsWj!*TpNf6(%Xmuy~V<CZCZ-G^1neaiB31oPc+KXivDTmW!2x4d3fom{y at 0Xf<2=J
z+{dI}Ij#k-G99zm;&(VcdH#}&?$pQUtWkZJolQHhHQ`Cq#f;@J=Kn`Z>UrV&VSWj^
z?ZAjFYqRFWPAwbzLOHNX38^JFkpyM1A;p9`MSUqo3FPjmAIa6$b836%<WLTg^!p0L
zgFJ6o%k at S?AoN;7;#VLVHFnyu*2Vs&NmkTGKme49QUXn*>y*-D4%hM|IPL2vq}B}T
zM_suD<TVvaIsK9ph+RA=nBPNlHAYV3Ie-DRAld&X6YP}&+gk9Sao<|&Ws%kA=<e!9
zax)7b1oXH-Z<z!#nFdasMEMLVRj5cbT_x#H5h=8Y*5ypXvGNAaIavBHY at i_4P8e&<
z5f+^ZGfiemKZtQZFK^;_|Fp$mMz`-h;bq-?x~1UzkKrtI;C8`)&gZqw7wc{PA&sv^
zXJx>$(SoXjJnIV;kyr at aZY5@l=35xir!vmgrFNvbLS2rS^`|XDsjrJ&Q<_y;m7F2U
zna?2lJoOA$jI4G_Zzy_WG*5}bhPsyI!=r at Z%Bdpy(lQ?&LR4tQov$O)A*w2!;SrFN
z544B6_x{{={Of=iEb5}nQ~=CNL8<^^*|2Jdr#xr%x2UF|k(TJ&@kkd|Vb^LgOw6UX
zdlk3RT at dV-z-%lD=Q5QiURT6`hJ5=nY<K(Y#{tq6qMrJCamQ_s8gOLOn?e`J?d~Ju
z5L%L<9h23!fR=;W^zr4?(u5{mG4TbF43nqz3eZ`LToe2{uaX5J9R`g~vkPZCST<Fr
zVc#%hRK2M-;)Pv>vGG#O16C%ut|5O2IU;Dk<>KfB102u74#Wn%Tm97m+4iOad9RQ$
zZ*Y&MvJt72mI5R0zbAR at zC1=_zxQNv%QVC`fF$6Q_jh}7K^ZSH$<xw3Np?bRd>~{X
zd(7$$I#*RA5_Axw;#}1%<EA%7<{uBXKYnWeFl(~?B6|>`xNIL>tOoYpALBE5;vqS0
zO7v4KCI>5~#)4YTw*?IQKVgWwCf<ABiimLbN*;8wEcGTXj>Ovt&%m;Vcw~hysREV>
zoT at Z3tHjp9(nO`Cvg at E^)J5EOFvH<v^kJV>nDGoctElCeTbVZfEJT$&-Q@>i at 8(0=
zEl&Hv!j)Pgss14QYyXhQ?rm*LOL)XZV>%EVTz#<{l$!%N51LPf^*!VDio>=lzuq=s
zhZy131Sz)TUi at IY6SxBvd^~dG%R(Nk9L7%*aQWWfSYHgc+teR#e~Tjs;+$dNF;@FV
zDl1`P$ke at goa$tZ+``Nz1yK{j;fMlvRdorv7B`+N&pRPJ6{xolO{%We*L^#zmT at h^
z%|zp*oi1ycgBrWksH=}-7`f)a9IeL^-L+M7JL4>4_*r9!!KN`v*!&ZJ at HRE~);f>h
zY}*E1v+_tQzoz_2REy*VF8;|QZx_T{1D=FfTX3@$&?@Piz(UXsE95Kn<v|^Nk9qrm
zU81e9&E=F@%gaB|+o$Rb<wg=pd?iJih&iz3Q#mn%lmfCcfVkFQtCetK)`;m%JwO6E
zH5dfLasvKjm~42j7Kqp6w}XISJhGI+AIlfCVU{oD!rrhJOZNu<75HSRmSXW{Geo^l
z8s at B@4`nn~+Ge$0Fcz7?posWjyIoR~e%eFAnEN~C*+q-kssTd#ktXX*x=dnGAHRgz
zb6wiwTVdxKJZ`ONdA9Y!CggBVL(&Kju7o at fdKSav#50qH;_cP(2`$LI;_MpBwzXD?
z{X?Xno!36Bl-Z8T>;GTGiyBj!*q{L~x<W<?-I^o>vi&TfbQt1|)A70F9X3zj>fGP}
z41yS&^dRldso8v-m!V{2vca(+BBXEy3o;8UMZ!G-4vCa_?Ce})$)x`~37#z6YI<)?
z>6oTo18!q#PrZ%{kns6o_H;HW+8k7#>Hx8%JRwn{lL`0G{9gf-`;eN5GPJf`#g2U6
zZ~1>l5rfo|e=lPlrX=ts)Vt^wmHDBByQw8Vx at _IyI3_&nUYLJ{H<kE>yxMa%44nxB
zgsHsZyDM30m3UWHaH%@?E!NTAR03gguz#Y4<f>H4Q-LB~HZinvX9n{%n`lE2H~hPw
z&q5KRrq<m-z_}u$V8&8up0Y}bVwujDa9O`R11e4XDN)!-reC!PMq22vN0l=6XAtjd
z0__V(W`$wDm<{#lM{#@o07F2$zf4E at EKzC6U1V^|188^?0$Fu9S9x6CNh{Oi+sVa~
zXrsNpWoe?dAjooYvWd$BWo)U%=(&|<EXs3y)Fs`D)`7W1qx`&Ru^?tn9dUZCldbmS
zGad12Brw_pQYID(jId~sC&gE+NBx#as{(BaH2y^p#I?g_w#QCz$7aijW4QwyW!*cJ
z_iP+7g81+Hrf}=-h8G)N&!tFKzA*=Wd%@DF!nF8Y0R(^>r{>Qn8<eu_$75UO4({d%
zWhLDDdq?aDr?U~<<-Y`YJ*(#MQSS0Zc9b8OGoVe}7xC?NvcWq|)+f4HFJQ0HA2LZ$
z#IbaSo+HbBUuqA;E?Du-6T6J-E}%w*h`8)>S#{`Qj%wS;FaX*Lz<AHJL0~UR+24Oy
zi{lhyyE3kN`kopgAybXRl|oAuCLk*iCCe?lE(zFCWkVBotJb%5JU|)Fkem-GQPU7r
z6{8$JUBnOQt&Vi(6OVB5$_P4+%hqMYEg@#!R59M(nBS|Alj?-IW;xQvid`zcg0ks2
zyM%Jm7953xV>WAC at 4)3BQ(;or1#m89Rr5_AU<tK?98!I5S?Bd*7M^De&-p6s7ltUk
zEE at Up-)4W&FW}8T0KZ&o$;jMVly^~l0zBDLQ3Xvfo_nw8#Mo~P3->J at ciRHLPFu8l
znhgrOJnxx`Zfa_HCgaD|=SKW4jtWXM;2i#;c$$(gX*~R+4H7Fwt4IVM<ltA&VIE_~
z7S}dQa;XoEEEqFlFS-g*+#-;93&`@nNn^siM)?wj8^Pl1Oma3K`Gjs`#UEE>zf&gZ
zaXOSW*SRQQ$<ce43W8!D-N!4`mL-Kcc$%{2rz~J8&G#_#bps_@`wUaw2{5iF?T at 6T
zM_bN5z(2fKlek7G!MQBxMx5RITf#%LmyN$!WaC=IOZBRG0N?fP6f=<xF+?=#&V>x^
z={j8CgwR-%gGWd=zysazo;d{uZ&Ta{>ZA6UZ7}p2QhSy5%?kGOav-b_53y#;3}P?b
z1kGH{;&CPn_0oED)AyNx)|BvbW?i0nezUD;g6xSW*lmXiUEFW;+a6YGdrxT^fIa<O
zVPYLyKHl3%r$Xq1WS0nsh-I*SWJ_ZW{ER`*%%-XDs~JT|pwitx$|tvCoDUt6w8V~V
zB-On%DVY%C{P=Bxrb;hx5fv%v`h<$|N<i%4Yvt4Xza>QslwBN&<&W;;o5bpXdhJ8U
z1gR6W=F?Jn^FW8~*qL}|tzAJ3Q7B7Z at qsb&-Wugyvwi%q*}j#awG4 at h^Jt}G$L=qL
z-NR%o73fWF*58uk=gpM}oRaW~v2)0`uzA5g%HEcP7(Z@*0-xHNnG2>DX0YUZ-d2+I
z{>Axl3$QfZYqE)guoU*Hpc>-7Ra3Zgs~dfJbzCXeJA<wSKD=Cyn5e2Y7?AKEKOLyX
zEGg4M$RtisUQAhjJ$kT38b(e-LEd?l!kAhb-mv}rq9E$r$ZY4NKQEK5o3$iV$#qJs
zDaZC;wHWc>MuBZP$QibT at PPvD_$U!6&DKAB8=nGJOvASoB<*DogY?z+>SmTNG8UoR
zXS3j5<SP_ybDiq590LSm#wsJebC`BabC|v+vwj{rWOWRgHmBj$L^Nl+(}6iXTM*~X
zHJi^>l at heP#x_3|ETqixuI45h4X9ve=+*w=ZOYBEy}4*}mRh>&lFqSJir_HmLz&>d
zhLlW|r{ZY>K_M*}cnIQeY+q>jb^p^~D!Y7zOPzV-lvuiNoyX=PjD4&_7{ICk>F4PD
z)*{M-XBio!3ZynWeRr`>;JM?rbXNnd>=rPx9G0eLm5mSH0bXn{SL at rqjSVh<nAf4N
zq5Y*mg)lMaQOKIrZ!Zzyl}BN`%2&2`*m*EH`%N(%KQD9oJk`m>u_W_Vi-dwC0=P3Q
zk^PScUSd>-9s6xl{1`La(nN-?MKZn_8b-v1|Hohb8w+XVhBDuJH+0jQM?<j6?%OQu
zTH3MiDhMPlCjS9w0E?guVXa_yKRR}7Ih)&v;o&+mj-Q4JoNjJt%}t<eQXb6X1Vd%%
zHs&ggv(gZ3`I(WbXoqKHkUZE~JU=~ZfL{E-F0}kGBkY>=T;0K?eb1rYOCvrS8f`j`
z>%vf{-Y2hQhMaalu|CZwqitoUluG66(S}%T4tU?K=Bu*~zps0m|LO1+eJE$+3|F=!
zm3WR{*Ixbij&ktL1*QW+Cra~5=H^+hMFF3%CmXKAyUwbEbk_>FeyyN1RN$JzU55|3
z4 at HB3udK27Kz90t=ENGd7w*Uw&?kvu_+_yF9ZW=v+_{lJU$@*o#4C3QRsb-b#v{|C
z))&gLfc-V$t$6sLN~vj+X|7uiZWt#DnW at MB(?u5fF9fpR0I(W845Z=CoaWAk0A;Nf
zTE^OwHsNjm<~6?d+cEC{OE$qqF3+lP{4ZXxF2EGGqY2w8o-ht}N})@GpYvaws(%4{
zI0#a3_uTcP8?x9Rto at f=-Sbu6_8tcVz at PiPqN*qfF^KaM7hX~;#M^pjO*#~PZrARG
zsAuwLQbjr$j^-t%0duam)5U0V&2}`zk at Yp`^M7O2+kO!jGfDc=Cne7D+D(B?muf;+
zf+IG`={ax%dIvM7=(cmw9*=xOaGowP{j_bbaxLo8x35T~pW4XLknvZNjYz~3g2JYh
zTGqXdvNP}Z&`WPn`#k<Q7DPwcRDwl`=^8~y;u&20;H_}VjTC>owfWtn=*kD2z at ClS
zh}<B#RXmJnXyE5gNliaw at -B9xsKO-+7Kx}f*2=KWQ%C`6c-!J>kSu)%(ew9)cDqzg
zfLCf9i%w0~{8Z$HNW+Fdc3(&g>_BhGq3j$`6ZXG3BZai77V31-%?7AxQ`S<sDZ}{}
zdoh(0NN1aSJuv9{B-S$++R(s^-<gS_Ehgy2S)%{{b5!q^Fs_ssbntr3IPg3C^lDz+
zosd&t#dKq8X*eaIfay9^JFg42eggX!k#}<<CB^yj78 at ZvmeNIM`1f8WhLMGRna%W_
zq6htUSd-s;p7;!KWS=SPud<MnyX{Ber5SIqFCN(F7I0r*$Nf3xua&mS2unwY8E+7M
zh7df4;Enlhw0I<34o6V5OhtU#d3U}aBY0G;D@|lWsImpR<xrFt3cN`%H9PC~p_e1d
zN@`XTz+sCNmKR}%V9H7pQLZQ#;>w0RhC(_zTgCrmA=74>ac8bp!;k#@aZCt7l at zNE
zf!eSJ#X?z3?+#+n-J$DDeA%HhH^reb%_Bq;8&lkV_C9 at a(j&YEzQ at p%Y;b<Y>8RV;
zAX1>E?VtG6&ZLyFPU*qQb)EnV&=1fvdY>bGxVz3rdm{UZdJ}Z=Ng_|)HszKJD<PCN
zv6Fl5o~<8Tcf5`rG6~7i{7x|={4nxznlcS9-<_dXBTsiwj?flMoXkqBl1 at ctn)0gP
zWA|<BrnT|9UwQ4~p8)PXivW!o-rTu0j-z7Ph8A<$H51%MjURN4{Z3o$S`aZ2?kb~L
zeYqs0nmn*(_L)}^g%3W(`RkD_aL#$e^Gt?hfvc>PCrapk%J~G=ENVzIm>U(quKEA8
zf^Y^Q;sr1XeFv~1iS&;Xb!jp}s}bR8oO=JLMj;S2h$*s`)hwQb?&e6Uhst;QJ5HSK
zH!E(7YaeifHF^y%&xnm`G__`=-Da{ogHv|+`=MJ3I`rVP->)AP6pu{NrQbS8A<4FW
zrt_});fgzPZu19DQWNP4N&VL2_?0XFgUm9d4JRGxCu(mkG6bqHN65BI**10{2H>Zj
zX4>a*RL)}M9d-%im9D3qqUT+ez*7EysMYHhk;Zk6$HC4qG55tTz_rdfPYA+T*>I6c
zll0|sXI-V9b;HsYv~Ed2R^6Qh?14J20tcxD;F`Y|BY%~F*A7NKfV^bgmxI13sVg=f
zBiuiH_Y%CGYG_ASDKQgxlvmyXlq7>iJkLvL42TiHbc8VQW|*71bAs(*n?hR(M`D?(
zxTMwQAIc4tOG3!*z78ac*Ba at J-Z64AZ3;Zr=-Wx7Ipj4gAB<51k62N9C{6Me+;4aj
z$}Yp-$?i3lg4gIwxm?Jl>|Jj9J;5Vnbrs%%OzNL2!wl$WuV;7gX|M0OlNjIpCeRY}
zOGIP$V90 at gP_ZD?AL>bIuVskpH<L7LZC|{aVmf1sTYBVzb3l2VbVt){l*hGmZ|?G|
z0h~Ch9uQ-cH=clofI+(%?PUCQ=YdeOmAVArf45%Jw6s|p>aVAPjl8$YETl7}mS6NV
zYedpJ{9>MU$SAIjB^k at QKOgtlJAXZX>`{+6Hpe^JcQa6MDQEQP|8ilr5UzqUwv2SH
za|jOAN2QrO%NwC^C*`b$lkCt7P`tlC<&berYpny}ob4Tjn59EnZb^r`uCENYdup-p
z`yb}jguO(y9C*i1xaTfNaSygz+lCS%@MFv|8Z2cV<!%;>Q4K*yI*F`QFPdAQO`{&9
z$p7y3Pg9XK!{pRa+9l0hOzK4wKVDr`hGo2B6`H{!A||@q3tU#D3<N^2^D$O#=94U;
z=NHQFe=m$g=Q|YR{`X`$ZCmZuX)7$&5;mf9&#b8QyjbWONk*&r&#nHc22hVgqwPXF
zhp%jVU`hr3#sF*h)tG_FF8=_4HcncPd;jgPytLQrL05vlXKp&mTI9M8ZR}ybYETKA
z21pR!`_DNHzQMyb?4}pMvbi82J+_Cxjb)^Y>hy-#+(+`0&|#2G!}psi#X`pjN8_cg
z_k&LjC1L(!2~RWP#YTO5nt>FW*VK6)onvvO?9*|#JoLAxS?DOrC};-19q)(#(aOh?
zs+VdCZa{<$mDFIq5k)i;ewa6U8fLsV49(Srn;YJ#unSsIr|GTcA^*VI)Ml5FiZU}}
zddeCS`qG?S8HKvvftPw>!<g%z#=Si`-nPsRwLqW8L`ZQ#$m;eJj9G<-G_!gZr|nKr
zFr2uj;OCfvzA3 at A<mNI@*KFkO*P%ibMMa9?cK<12_wE1CLM-LAER5 at yO8k?OQbT{D
zY~I?jYSIKWb7dnThJQRkSmb_`k1epv#ZAEPYhc_|WpQzCG at Da;sj=ttg_yhko1DQ<
zqPyyHrr0{4I}0GlmIYv;eN}5TyDEdW(dnIbY*E&(LY<+3!BJ<jPOlV)r<Y0U4(A5D
zcT|3srOj%r{0(C#%#y~RIbumy65;A{@nrq7t$gMg0m9l;%F97*y|Zn4zS)RIOaK48
z8N2vqXSS7F8*7{;Nmv0cbc%#ooZw-n^oK|GIB|V}Od$Pbfe7l{&K8wbG at pj(Oh)>5
z9Z4meA}&9X2~ydj3TcbQ9=burSe;$=>Q5C?%T+&*;fa#sfv}ezp<8O5{4H}rbc8B{
zINi2K!;cK9&aw*bAb-4IA_%GMjTkz+k$L}_u7M{ZPd at 6SR<Ull<P~JUhqk0y*uIw}
zuH|w!!Sv(sh*$O>d5z_lO7&3C(#@LX8vq!;^Cc(mpBxi|)S8pJy0=aBFLD69Z67~N
z3avRk)^p^O1FrbIJ_}|9NGsjSOA#6dowf*=bc_~Xzjt7}6373pReJ)V{W`qb^JNZk
zfmafff9po6 at M0$|a=_`Bm}m<nw?rKKMj2jUd|laC`_cKXN366c2j-q_B8D+2WO_+$
zJm)8-qyl9Y<+QpGlb?n?R2x%Z_xC9coH<jdgd#T?S3UyGF3YlRmM6U?l}5~f(XZtY
z6$w>`P9OOjJ71Yt_?kYv`cfaQn^%VHm(rRO+!c7BATs26rn4g29{FBd+)mQOI}X6{
z^46#_<y<?XsZ>Q<=n~h9eC4c580yDpp_e1TcyM76wIP<55SPD at pNp#~TGQfC$#(?<
zmqbnvammho_x%?NQVT_x#~l5mInSqi$a#uOjKaC80d@?l?_9A?)CUDi(^7>(!(}|U
zE;z-<59(va;$KXK%V-Y;q3JcFOYgHPg)GP at U|NDOpWh_MRGFc{xIF*@t~Ky>?UL;o
zcjge}RLuGsmr*s1&X--`1w8Uo^VmB`KtJWrrD&y!4_{@{k2<)-5VW|~a&|F>FiVdr
z-$F{80MQnB&<B>FI-90+br;WzZ^|@Zf?elOkZIG|`|{;-+=i8IjKmaf9arY+$4gt|
z=?YA>cGnhm_nbzN{r0VsdhP-y486U?86(PZa;<MTtN2JuW5EG1L-=nXtf1XEMJJG?
z7F4RzdpF#L{I)FyTW(@Ic9NL6@;yRpC}-8;*(L;3H82{y4Jf((_3>vhPiNVxKYzN5
zDWJz+z0b__G+m6GP%v;Z)tCM?BJS_FGKK-uo`iSw>ek@>YZdLE_wr`#X5dnyaa=KV
z=OV?jY1{Aa1n2F4QW39jtr=?pqDS~S7uS%x^W3M>O00g4r|sjoIfv8gSph$K)yEKL
zCfUoAz;4^F)V_Y9Aq#V|#%rZ-%dsZK-lBfKm$>?G2N6w>EWxz=^2hZaIQYjC)sy`F
z`Al-WwV;PnLYst}Js1w>ccAxpOq2SR_2XuuIm6{vhOc!E8YeCc9E0*p;Yyzb`Bn-%
zngT<U*xbt(PpT5ldq->@%x?9B{sz6jE&~*+BE<KezoJF;t>lv<6cYEAWm_o=2KJ);
z4cg2^2(IRXMrvvBX7>(TGyGK3O)GDrRDnkCR=z48&i`}VCQ1`FM2Qe^<UyEQ#-K{&
zu7VCEUtVmlcB#HX=D$1EtGpt^QN-XG6ABl1(lsonF>fY3Wcn<I at XT{En2XSa!BmOR
zKHZIFxDkACm=)jBnWm)x^NN@|EW?~oBU~=1dgsyM@@ng0cf&l&a7C^hf>xlK+cP}+
z#CmlDk7B?D3TOrg3_gcb=%o>L)D%V9{dkr`LVUSt^p-Vc>vt^5{&B}yw!9IBU1rLs
z4v?)GL`&l&&{R%3XrAyg@?sSvC at YNHlNta%b)+`vx2ds2SWBg1ahouFhEA|ANoQBX
z&xm_Xp`&OFxhboj>nM$ZWJPBBy`)1L)w)Gxk*m)a_U(%if}fJNV$iqY2aHN<pUZD(
z-)DK82LLy0eZ=W(E+u8Jb?7=^h)qpy<^qkkkVvZl^<G;nnua(eLKzB7Xb{M&v-pTy
z)!)6qSp)G=oFdA<xrO&>Bw)RJoRhx(94y+Kj%MH{lUOkI;n$W(J*}4thhXmrxv_F@
zLB51|sT|*<xbUY%`8s^qja=l9ykGo4B^~jQjbDU)3?zxMF9fZ2saJhbQ>#zG at 8<@d
zT at qU1h^t|P)7B#yq&tXMNb6K+i)xX~O{RJ at W*$=HN#jQ;y at f>%4ilisAKTgrCrNA$
zhh@&CXO-?McaN4`pH at eZWOGH+tcYLR`4bsX_r@)s!Y*=IO|squy{G&;xoBSMJq1G-
z!-FwPN?&0UgEa{wgQj|{Ol93<YmPh`yHz=)^Eawm)xQZWWz_I8(kr(z1tds3sKHZA
z5stV|F<_ZzKF$iEidnmzFb5N#@P^DVoqI45J(5kbOt)i=Q5cOJ#&lRAeR&!TLNqQc
z>(Vss4x+>9Q~!5ymEZLXoLhHBN9HFdQl0j5fU$3yjlcy5xk+70w#L7Ga-MwLmL;eA
zM^!j6d>#K|H(9oKReL$KL)eJljw-%`{5mgqm|DDEyeOmA3}CUyWXQa+C3~J_7YA;F
z>YWF;sr+?5t?n|rJe8_L4$<QFUKp7>e`ulN4y6*tv+ukjG$avLR%ES)`w4dod$x-*
z4!rsm^#=m%?bFtfhw#A4I4nu1>M?#fo)4EB%}uokHBdQ<=pmDsg3KRiq5H+)xq;Ai
zUs0a}&CE=R`M*GU&8N at WRyB9hXgTd1V8t8^%wpih at 6=hIGjEgLo&ldDMVrOt`e|{a
z-}m!HHP{dpiFV5E7&+K*Cb(t{Ma21N5P?N3vN)DX5&h9*h-Q5SdYzyNeIQV#4jssa
z{FqgPYi<S*d{UF_Ezka_IV`5ZZ(n3FJE*y$Uc2*@Wt=CVW$7^03lDW&0wKf_g6JeL
ze{(f<K719Fm&U|0H}}FWOI2-P at jq`=d-VZZ+4~4v7ATv(5>-#;soU_!3eNjniPkSi
zFEPctUfGFJ5KR+iZ)i9pBi*w$A(}BcRhfgn7r9AW`7G++#;>Y4Zuil2Fzd_<^7lD`
zY*A!N{WD|a5#K?2uX1Dkp%V<M+e=9!pGDeDgK_t{0#K*i&)BzMhHcp*kckp7KG#dz
zm-CYo#w at VE(!Ykoe~GxOT)T+wHlsVUWc#B(7v&P%pGX2*M*NqiK^a4Bc6Z)k;GI-3
zs+Uc%W~st5I#6F;uL-U7fKZ{2w#mnMJTd6JQ!%O*orjeXdHvA_e5v7ETL*h77KkgR
zZPi?fIlA=*3zot>4QBe2avtGJMxM&_nGjI8%#TeHqZ!ArSa^bWbM-Ato&>9KrN_ky
zpWLUff5_Uho1B^n&d@=Ri-sW)YEb at 47{*IL4Ym9 at tLcWI;=hInLDG<d$<YWF-!7y>
z*c2GWs>p#EDc$8F at cJ0m5?rLPO%M^$6sRcpiY!Ud`mAydpMY)4IoEKMU)VDJdTPYS
zjq>g&KRT21Ep@?bG<vARydU}A{^RK&6zj+H&9DAsMHrFofVk=mv at Q~H86 at wx8H%ql
z{fT0K9v7K7CRuz-8kQwbfu>b?dhvR^6KYDn_!)TtZ>yl6EF5y2se<af at qI}P1hvEq
zDMi~k9 at B=o&Nns7+Xc~xi;^4>iWylDG6zwX9;pZs at NUoF-^tytQ4O*q|M!wCV|>_B
zVji-9jw_V9AXqsYbzuSW_Rf(pC#dp#oy6XCUFMLz_l%(0LP28=Su4YNXp)$8?bz{i
zjNK_ToE=*BXMGJt4_+D2C)B>Vm;`znbPUm<Z%<PbG%+N)5wV<^r)5crd<1lQdnA$2
zsc*0jin(1n&W68MsrQ at BNTFZUlp5dq!q|K#23*m=&lI0w`zG_buC2Pm<w(BxrwCWk
zcdMb)ihIgjTy6HqcfHOrktw6Z#@MQQkj9ReIvrl3?)*5N$RFehPrt97`C~(f_E*1<
z(W*kV!HwBz#35YvM3IY7#-txltY}(apOy^o$ks1StPv8a2*cJl9w(U;em)f0DqG*$
z$5>C#Y97_!MSFe!U*ABu!eDsjy`sGpr=XkABF+xS$1iQzJG}-#clWd)GBE>{V&7L|
zyy&gR8NRORyo^;5>W6H3Z%)E9CQB#5&r99e_3!7c6!+F%@p|(1XO+D;M9H(t at mk!A
zG{6%Dq#mN`4ElCc#m}u^*;IGtIoT9q)ukSlonJm%M1MDRB7L~1hWYiQq;F3gYvqzu
zFa=1OXQuUhQ=QRO50YpmpcA_eV52++vJ|%gOpQ(XFddD$IVYuV^@Jg(Q!1|FT6Q3A
zX>j}CkCvckQ**#|PhSpu4#G_ent$kc7{0-|E=-`%pAQ%SHPbPUQ!nI_0XtfyUd|8O
z+dF3-T50;RM}fEVY0R=ByWdP2AO`xVfxpcXBF at Vct#~;02=B4RbO}8}t2=)Q3XH}=
z??-97zf{`@)F>b(9i!S_eD3_l#d5X;2oPvKvyjZ3XG9bUN~t#9Yi6pDxog;W>9Fpl
zplU?($sM2=0)`O52_Gq0$tD-Ob=`_E6Y(9R9|FcB=a}r_+AAczfcapCnuYlLgFUxX
zQIkzyxx7%qRZo&?P{)QLN#0u!TryIy=1+iiAw%E;SLJSu;G-70d+I(9>!o(GVB$pg
zTD?ur0Og|lLYLP`y>z#aB6vWIL0=sx)+!zPD!vBx`M%JWShf(4DK-V05m1TChQbn?
zb6E#k%%Y31Am1K3A1)J&NdV>R?4Ap&zS_!N$<T-ul&(1tx`{SD{&ZK|etglI8)v0x
zM`IfN=gjYl`sMCt?!kF32tLxD246<O<U_j}Ie?MuHVBgWxh>0V0;wEKxml)@CP(dn
z;e5TY2g%ZKGZvwss}71iS at -N2m~=YL(Ee`bK|*f!)@d^z=tVUyB7>5=WY5ESOIk{!
zUxH3Lm;ILl0V88>n&N<U6G)J at G<}ZRL9Pwn5Zt<R^ihP6e{D#g4Qi9?VE@#H;ZV%{
zH at F`h30qOF<s9vgwnar7Cg1}y@>8v#(YF1V$<H$)otDbcVE(O|*ieCL1^E%#y#<)Q
zx{;6n7vncu5iE;PejI9Ub*)~vo~HCBJXW6t4Ci@*;o9}TIpQnMV8dYS=uqV)b at 4Mw
zc?&uVdApl5VTa2b46fC`<7{gERszT(_KwrkXG14^FSF{bkK!KWTzVrlLYMDhkoNWr
zKcv(&UtvUo4Nz!`X-oUmNO#&TT^eV7gql!oPL=9NY%Z}m5T_P~%GFYUA{~2;?8~Cw
zOILX{^6>Eb79g9i)bGAoTVjW0nIuDfpZWQqCBYN>{M4)@=FxH1*=I9riDby{!7PE3
zpthY|Ks9{gm}SBa^^4~d-ZPVy)f4}FFdcIFZuM=vARv_jT0FL^8$5ZKcsJ}N<n7q@
z<*f$q5snbQ^6^s9jyR9HICIQBY4uF&B5#wCh~dIY=S?+sUX69n3}|K<jZvHk{emFX
z)N676rid39;-ar0Q1ejJlz6%r3y1?_Np{~#2f(cIzoX|VBJCqyS3+q&Q<r9+uoZ<7
zId8Eb{hmA`fm%tY^CY!ww at aEHCj~s!P-H<mNd41#=dr at kB7hvWO}Ad==q at 7b7?5yb
zHP_ZO?ojM_Pdl_7(r;blqDiqUQ<@9Ows17ZZFySYq&sD1YfkkCj9?BK;MW`7X5qan
z^tK8L`;9t970om^xXV7Yx6wULYqW5Qi#^&O=_e!(%l<0_6#A2|+SBFCp^bgWDPE^Y
zt?@;wC=nlAZ_yu_1~@ledtC#|&T5Ta#%ld at JH$H>zp=1 at wVXK6kADS6l~BMXovLSA
z&eU0UfOA&6J3CL*JC*f at wl5N}GfUh|Ae)GISJYDtI6)4vMa^v}M(tG~62{;QDZ_4Z
zXc;c0LA8w^bIVL-2=H+;?MgyT1$4ql+^+;aA2f_$-KU_*_duBo(bG--GHZAqcd at u#
z$#=D|7Mw1VT#F94xA)_D#=;p1oX at qAw23+-WkRu}2Dg=62W6c7Ra4>Nbw<JOAuuxv
zg-3qo5Jx;BGQ<O`D2Hcu^x(<^+Y?mWpC52GuG82S4)#4KOpPuD$Iz2?D%jU88re;{
ze&SF`5{Sx{<~8Hv3qrsp4KHesmn?;5*+h=OX^`q>y(1l;-JY67Gn?C~hrrrpz#T5U
zcY2?Cy7{|(gQNcNznXWXdL_8GgS~|m*?rXGKM49J_oZKZ^KO%BJCWg)hNlg}BpYNp
zB0WH_ at mLOw_>R*pCc at j$#)P{*JLBJAoG>Oe*BS?vE at 5Itjp3Sf5F}SF^C3f at 5F)<E
z@~Yf=I~?HtFxuOWJV(Hiyw^!>v at GpyQ~u!5jW1)yq%%{!F`p#X_`h at Y`56vi+o1H9
zCt2jRKn3I%7O%=0>u9d1oH;n7a94(S5;UV~pqJAnX{7oWK`lkC{HJBAe@{($SI4Sf
z*+SUGeQ(@hpxkR!zzy`154pg^%Irm4eHkx|Wjhw at Ijr0!BCTM63?#sQo}M+lqmiH?
z$bx!K5(yG&u8mA3#r>iZg6XNh6sxD?gfO7hH|PNRzb2pe%c_*cEDyil5QcY*m`;fI
zwqnW-LLMrll!95`vHm`7*zf_&sX01Hc!wM}{U*|3=W$YC0uXiGi}f7)^hp5rb4645
zsnq3FXVJ9_pGr4MM?>Flt(X0sk))9Iv=8R*&W1xk8q^5I_qzj~Pc*0JBbUDx3bIkG
z$+eEk_S8PvE)^={rx}MN!Et(NkQt30ao?xiHx*8i7AcYPyOcQ7y9i<E-PM6V3!30B
zMyVO&#4=!#M66F6mYRUeYVP;>PGAPuBRpJ#CVEuXDU5N%a2>T_v167EHr^&A=?7T>
z=TIhZA~A~NteW4&la+j~43dJ6v1=Nzi5loc at _B<NL5N92CS){d=RUp<xi5qi>Rwg)
z^I`k?|FUgpm-CpbF_s5Ooe2J!Y#gCxa4&a6gAWz8vsyo&!XA2r2rgvCs)`vrihbEo
zU8%|hb*g4kqpU{R&)U?x?=p1o0!U5JgNi~yn!hKrR at ofBjYFvb5bzuHtvg9(_oCwL
z=J5vEnA_r;nd1PJWdS%qnXZc8r=m`-qTz at 6Z=TS*Kkyc`o{y+;sG1}hWl(V at 4o(N7
zEN_*Dh}N;Nt+!=hCcx-G`Qedp<$W(u<l at p=+QcKCi;0CGJWanFrdOn?<NpW}{`>aA
zP^3*idoBD(PA$9%8AE<L7DalHyJOHXzu@<`G(faqeFXW5f%GP1xOq1c#FinwE+dOd
zc{88cfeW$sj}{C3Y#KDovhaj~7X>1H3dapkd+iN|4`$1je2f6~^}nTQTY?`%!8|LB
z6WtXYB-jbrTdWP>Zz9Qb0Ya&+`)ZhEU%CJEhqa_NF at bMDR-8!Hw>S*6Zg&)Ky49&t
znbw8Lg2u0jl2dZHotPA+8UrA;%HHuasAbAI#8hlwD)Ut_!Td5C)q>3=r(smuH^1I@
zyS<_b=S?;+Q95z>EmPuAWsA-kRr?10+jur>doGJv(^RO-wIU^(?7VDpVZgAm1Eq*N
z;G<`Qfn?6F6Xphp>Rmf>A*l2G#lh}Ly3WO{I~>{)7Atm0A_jd}m+Na7WLabT*dwc!
zhnB*LpxW4j#_D#~cioz*DP2VEOL2WtW4Yi3d=Qe6;1KR+pMM|5uQ+#pev3H=PAJ)g
z?1AlC7jp;EfrVeYQ~+MYK8Z4R5j~^tq>J!&7+X)2*6s$QGPTwrxHMma@}i_Y7R6p3
zAj!;)uYTc%JXHCglw_pWtI6rQ<le<&DIu9QV8v<-LmIWko at tFK86wkNYDaW)f6UU$
zEb;h313b(UZ(wot;Junb at Z=d^n90iYft~HRl>a$l3tlk;Cp#k6lV9z;d%6nr)N*Xp
z76>8<3JV5!lxG_dE|Q4EO}=vUu|aAhQgYSv!TcIq>T}U4<O`E8*^p7^a`w_Ha_w~F
zazy>nCAf&sU(ki>(IN?Q1jTorO!}81VHg;ciSYyE1HzN*$zDkY{e>a;>Tf{iqO;0q
z6s&(}zx{VS?AWCeF-q4d^T?POR<znqA*Hu+4_6x)$-4<Kc0e{<=`>Aj7iJbK<_ZO0
z*bPL>SjDrEsLE_OR7 at Hns_M42K2;$KlY4?N3CFfJ5HyW>G<UhAZf{I-_FHuA18z!@
zVh1{B`4tV}122|T+Nae*jlA&P1U=M4)@0s2SlMOZ4|IPQGx)qc^{WHo#v1LY4PlFk
z{fygQxGTi>4Z+1)RtJec(3@;mInPRil at wn!AC}N16(d$?$I?6YkqGrQHLg-GM(aT@
zj*eoB)FmmZ->!w)PXS%mLiGNn9-APw3xj|Ni at 3fSbAGB!aPIzKx{5-cK2>Z1bLp%F
z^Ag+EU~8xsv1Dca^WG#Q1c4KkG^1S(a^&^e$D)gBj5S{$x_r=92a}4ibCtok#cm19
z$q`Dr6ijp+xO~waxqe6VWUhM#moy&Fzo0+o)^+oa)9U*TBkD7_j&Q0VyTlXGVx62C
zZN6JDOn{~;P!{eu*(!y$J7KIXxAi=zCX~I}{oOYFG5|2^ZAoLahSMcBq7rl at lUSlV
zK(BXlA)MUck9iVUg+^A*pE{=}EK<G%G%yxA9Bj{b6TS{G7B3DA%{ALb3FEjPn*wD|
zn+ at Yy<N|0;lsFgheH1`9^_m{i$q<;xeS^!Z)(V!xT1hYp^|4gP5#sxE?Wm5U-=y~_
z++n5zDn9hVrMWpF>4p)5+|mxGQOVP>bG5VY>If*90B{&w3%MP^-uKwJ1L}YDzlG7>
z;yjb4rCj+Z2Rams8EP+E%`4kLUxXkDJZRcCpCL<fvTMj65o4Qh_%q9Er{o|})oQM7
z2xYD~F~uzUdXMLm!LJO`E=TtHJQ6VxA#vedZd$P$$s11+nRGqNm<(*_kbgaE-%L*E
z{{s_rt{<d4SuFuR5l=Jdwt7H9CgP>@Ci47TNpJA5DI%Ei(A5vw`pU|dZ0OXv35U?y
ze%9fcsa%brz|JMA-y<6`*xrujO;7Pd$?<)&d{K6QBXUzjtBA4Ul)&Sb>K-gP|3lK*
z=1gL_ at gP`S)67DK>Lcui&q=D{l&VK#zMTvyR(ojE8FvSVo0QXQ$Qh<06WH76;4b}Z
zb?UfBXAq{DEIIEw%%*<m*3?Zi34v#QE{8aWikc+t|HZ_G4nTjx_dHpmoN0i8<l{cA
z+1m9+F`9^(0vg0_d^Hn{g=KVa+xwtYjkIEsswa9_L+h!1l<rI6%=Y1rzi)fH3C at 3q
zAH8MmlrR}i7Manw38PJZjpT$p!t5z+M*zj?CPdZAtRu?CT}|6b;NTPPwJ)D`8H>le
zlhMS at a+sAi3l@ofN3Ul+ssfHynV^=FnN~XYX+yn->WE_j&Nnrq)z*lM$GW9Qe7~8s
z8UOu7U(S?{K`fA-b4T~JnDyq at 6#vOisQCdNI{<JRt at qIcg}x-WLIZTCp2WLB$Q92Z
z&)yY~uwF+^@wdYV5;G(-SX!|9nR&RsZH~w0(xEvk*LI3bJf-L&3m?=XFSa<F{{N&+
z=fLaG9FU{02F3Zspx>Dz2iux0{!*=&<lMw-Qi1=!q)QSlKQxS$C%infk6%)qczp%@
zl)IZ1aCzVP8{3N{6!aylL`co)8D8MHX~O!TJ51y%yX7g7y+0QO-AeGJT&BvRjmGSQ
z3jon>{Y<;quPCi+#89u8LwNV8sD2FympiUM%soqA+TFeFw?SLS7iD at 1u$1%F=zJF@
zM;3J219G%W^-EOF&>-;8*?;ZvxtL?>qwT?puM*8_mk$8>Ju~|iv`Wo_f#)=#S at Q?Q
zv-GA#C%L+%?JD49vx8cg^_8p9sPwcRIftSsrI2jiXiHOCKBMAx#VU5iK5j3LUkMpr
z3*)*gw_f|@T%yFOXs}!OPUr?RBi3J`{|zJ$`wU;8xnQfhrALylL$&leH9jgTx(UuJ
z!LR1}SwFz<d&%wl{d>D#231B)r<5n392F8hmn7K9hp2Y6CQc`)&?6rHMO41L41xY&
zTPA1D=7T?R4iU6OiNY4`?FjM(AyK1!OFjRFL88TAXO(xL?Ft^7&ke;OQD?A6FncF=
zDZk)>- at xxcU%iKCN?_(S1o0B)aVBKsJij`JeQV2)wth>z)ZY{JZ!6#V>+B60<7Umv
z8v|7=%TPdYGr#N5)NsWjBs`aw=5`(3u=>-#6>cVUg`cxaqc5PwdjYGI`fuLHPb;uk
zpS<0P%w7|>xzC5GH7|UF?VfUe7Y<OK{?i0E-#L*D9zC~Khv+C22Zmaor<9TautgF(
zAUCaD*3AQ@#?Anqnb!ILbtw%*48=IS7y6`v6(y~8cD>3c*Lb*(gqqMDH(GL=nd+`_
zLor$4M%>i&y*y)pvC^aHwLI=EkZk$Xg=y||4Zp3^cId@?{?~iN=DlLm*`sI{1nc99
zlz{#)X-=zKwf68(@kdfOQRhB77I8v-!Q~>*q#1U%N5OQ at bp4Yd?>)%t%W06VB)t9z
zVw-}!OiQCv)f%i~dAS>PA5<U#612=hz;PXF3Pi*>uce at RBm7jfN@FuZ;9GEqrayOC
z>HD*%+}8#KYYxmEAEK8qAthNf0vrWffF-+LfER%x5mcEYsP50rnm@!h4IVWf(HT+J
z5o%p*iw)P$&>*QqRB27S0E|ITcq at YikYuKgxfo&smSI{Y5b+74qmH2}k+zFaklY3X
zjcXt`;yL8%A+CK^Szx5^+T!Kz=pHNS3to;z*k*FZX+6+)<AZ-Z>;^?sWrqs{5;5R-
zsy!uLbnSJmQe6g+dtvW^gY4OXnxLc+E<Y1Em at R9}XBBx(%T=O0Z*$jdN!c?8Q9b`Y
z at HR}H-Lr;kS8{*ht#(Xf{LU`!zC+HO%KLm&fcDm{Z%ztyzpXyx?Y3}zC)Ah?WKtiD
z<+Fs^Yj~Eav12;e96e^`luyMDxfo82*@gjLYG61k6YC>Ok|XK77>*_#cPdRVB^kNX
zJ_8?DAA({X2tLzHY5nC7va07x90{7%FQunTZz_PS&`cwZys7<<n%dn__buDQ`8qW}
zneC2pnM2&6P<4RAy?rh>8QB%y1qM4zA~nwzcJC}e!pl)l;VO8g8`wnS4Zg1QYmuTp
z+pt?tT-Dj6+;*w}pDlWJI at VJ{=b)@~Nk8O`A~$0%qH)@>1!wPi-=jDeu<TM`%n8b3
z=4bPq+)y<|oBV_n%wR@<?#wfF;TaW(m|4l;0bMlACiW3$Ve7q~Aw2o_t*3AkJFJYB
z<e7}0Pm?XKz3BVD at 0iHU_Z77~b^y`c(%wRBZq;ZZWPH2qC1X-3;C6kj-hA4RY&lk7
zTw8~gZ8%DS|EpS6<1F(8vJ3<WrydXilz}H50R%xuXmUYhp6fy at 5LjK$>sZHXhsa#u
zMxQ`#RtUK+Tf{(G-xq#aBjS~LlE;g*+J#tyis~G}k at Ct6hY+_>-2jhQT%$BRzM|4^
zXx2f2_Jw=$y-mj>`V%&MQx(IDrZR%x9c~kVFzMe>EBPfQPZolPJl7C*{XnK`;;A~A
z7~Pzt#3HH+cb;|%nUoI!=qDpvJJa!@is`FC2GuE$^TH-VUGx|z>4Vb^#(^Nm$SUv{
z;^OPBPZk+|Zk;LS#`fP)XlYmzvBHiMH7^ec9beN~L0JGpxW&eD3@<s}16xg;=jh&4
z*k{OG2^OTq^T#?PkdSupl1xINIK%Y|Xgm}3mMv%~fC;0GS!Po9LCx}WzI{s5TW5fa
zEQ}=~+tX}wTLrJ-z<qVyfE|=-Rg;a#!qe7d1jNwEXTz=6#I4T`cU_fNf{f=S5A<!0
zK7+gWh;xs1EUd<>3SufYr7rY8-sSU5Cl8+rw6(G83em03xrg!x^SIt&m^5MwI at aVw
zAlSC;2nv>m^uw?z&7K at Rbt4iE{Jsmki<=pHoSK7{{=NPW9+OEgC`YWQ&j1mb5QPGG
zR9 at YEjEJJWHKFpOUQvk@TIkUqute<vMoFA%w=sGEQpH!2bJh2k-+vMwYIOD1YUB{K
zOf=3xo+lOwruaKUvIhzy={yKRsY`1}LaXQnt1aiVj>`<&^gSvE!53XbHJ5bRh-X4)
zcKJ|UT1h-Gb5Pk>j<(D|Yz7H(Hh#+>P5M-o)Xl($(^VhNvId{HWi}Fq%Mks&_Ncr~
zvxzrJ)Z=X4oS>TvOlP`{69EAn at hhQxoIj6`&-Bhsc!H!+RpVB5L$m3*bMR;#0_wp>
z`O1w3t5<eWe8<@T#u2h2kpUam2J(SfrlbdjRM|N+u|7~_Z>m_rrz6<CXaf$E%sEoT
zN+bMJKuAhAo{rICyl0rYn1q4%lH6N8hkbg_aW@=_<pAxcrzyjoG_}?6BDO0#xbk(b
z88qm+_1Y};^?pM28U at IL<HwcfUs{mx1#^c;@wjO<EH)P at Mjnw^d at FkE(YQ~it+siG
zNtOYy{o(*ZR&4C1N>hOM=3&HQ&4$n^$(h%*A?(-{BMl6hZzrC+L>3m2Twb&%5!DYn
zd$K<`D;7p5iEQ*xV*2jv4z4B<%JKXt;WgL;qF73zk?K&VFm;_vd;P&Z=e`Ry3sY+H
zgW6_D>iqM==E-^uB#sK-l?_shhP0d!0+wog7(d_J9b+5ed{YN|ih1iKuy at KxlAEpI
z+8eHtaF at i#8aWbo9?=dh12zs(>?2jvBqYy882Gr~49<J07FlcRpBmI&35%#o1U6MG
zmb-8{esC5OyO+<*r(%B>I-RkUnZ)e~n?IWkxcjy<SfOHdfGc!k4fTZr*- at KHq%xkr
zRQ?ST)^1|qhs1fBid)v#r^uO*pY-EiZbX<-E&x<L<5pCw67{y#fw_~&i5<`M$N at NM
zwvKQYuF>M5gr?*?gsR@=4#~U;U-4{yV94c1&`ySO#OCmdFN9wRGPCE9=zf*Iv4)y0
z2)S%h;L4BYouaGHKJ_J{9cND+Oouc%cjE{L(<MNsVK!Q!@6_Wt?i)=4(Qla{?9&2`
zGJj5#8yR4QnXD0o<7B^~y!W66$noZgDJE-xCn#G=u;uJTrGJAmQu^0or(k|?irj{N
z+Xs>R#7`-O&-dW-E7j~lXG%nHe2cr0TVY5q^G29N at G21V_Q8TtpnMtOuAC4uQiD$t
zVi#1V{s~boSy|QjgzJ`_y-{`MaHVA)w~l0;Bn1P^Y7Tjlf21AWoyzhIJPY}l`mK8D
z*Lz^60XrKZVs{t6=z3fcG=a at aam)}oB1*GVMsGt}G0#N{G0I$zx_bW`CsXX=qT*p9
z@%BLtI(_pt>G&bGh#G5or5~@}w4<8Q){Q2qYFbJ;EI(&tMoev-I=5uvw$?BujgY3F
zcpMGMrWNIU#PMOxjr&|r%$pk|83X$L8<1!sx!()dzM|j3uPoUC_EzpGIrfPz->Em8
z40Chpl{2OJ(_9;yPQa^|{D?3-{c&c86$=Bod2Yn%D3-Pp*T3WIC8q2rqq=DA+)!~l
z=#cX6%W)34Xj)^)z93>v2K%-j*d6r|BTE}S=g%+9m`Xz03k7w^+ at 8BkX7u!Ygt9(D
zCjiYoM>_j(|EFMie- at +Ja~8FpU`$>j;m=!u*Odc(lj5B6#{QKs6>z2CX2aMStM8 at 5
zwdCpM=we=Bo9FJlM?xe{(M^|^Y+>&Re>%S92if9zZ17&YC3LEEeS{u9(ad04b=65&
zn1L|59>KJCO at vYy#~?t_!kCw&w^OAE8bgbz%le$0w3R1ATFT`^weO*J9c~!-d8efR
z<j)>NjM?OsqIyJx_%*#7>w{j+%HKG{4K5K!=QS}%94yk}q$hSghorY+9zsHML=Qgl
zXS7cU@^H8#%SUjB4YYljr~+)t-&Im5B&E1m?R5O<g;$PBw_M1oy<c<`4%fe(nm6)P
zQi!wMf5lkKnWmvv92Alt=&ld_@?^;))iL(NkaG<3Qq at Fh6(rcdX{fXb02TrC&oYX+
zC`dsn7lfyO6|2Zhl+sftQZ2F*3{?X+N(nC|Cem#gTAZqIId`y}CvSOd;A8jbc1vE~
zF4I(V6St0{C4q|u%d1@#w&)}XS-Ea~HZz1D2C=Otu|QCaCeEwq;Q=EFO)#4>24s+I
zC!ZG8?kxgf8Ue5W<gllSnImC&scaivO*FLya*5ifYmNDcl0R-_3q-0;9JmBUyJxzV
z(=0w_Ep|6HF)mCETN|2viP<9>)wE7Xr|syQH8yQSm=6BBm~VsN6LVfYm}VHfIJd5D
zHlF{_Q{D>Hw{6)nPWg<*7+U`nboP~|tbKmHQcPOMj9m%FlBntO6^l;(J4|X>zgg{Q
zdV}Z(Ti{(D03&(w$AaMa4k+&x<>|xvx6Eph(=xhfxK*ueum^$ng_XDpdR80E at i3Wb
z<)4^c?vvB&0UmF|9TGB&8~LxDtKT@@U3AgPAESg)oBMA9QIn^h0SB+^Z+xE>)hzL(
zYE`43KOA*FUcmoCxYjW1E6U&;lqIfXaqf|NLy%uIO8Drnh;Myujpkq)<BN})s0ztV
z9tT at NxSj_gx;ej1)O(J_r7mW~ylq`Pw0<|V?gHTtv{HJd%TLvxoTGUa46;t3d~ZEZ
zn!pn!$b>bKz-`k_(UJoDh|PZx7xE5d;}i(wz<}g*=Xdzd)C at r*8#J&TN{}W52nj?t
zT$GSZ6!r-g-1v@@PxFn2J6MY2>498~GnA7PHVTU80)u-lJmT?R{KyUS&;G7)V|I8}
zvN8LVnkz%BBUgfOJootXHAkOp(iMC!GoY&`1P2xyzU=J|=FqS;kc=+F!I}}JQ%Dh&
zxgOP1kytWF(MmUAWZi!hB3)~8+t(j%5<%||wU<KhUMG|ADLfsOp5pzNH?A9hmXFQ=
zFsUkR896!Eo5)RAIf$4x0<qm%{Tc3f6~lU51K0p!^2 at Z^3>FUtgQ-G`fM8wG7GcRd
zz9oTXD2a*9_2x*FL1V>C+Ut#%+L7Dax|98Y at 87MV>xNuvm$6VW$<^~k#Sr3!Vz(In
z1)mnwRX}mpMooSzY}^QM16Yf0_r(PmO7<9ig5NmhDH1+=x#M;8m}y49p=gh?^Xqg5
z7FueWw+nOX5E*gDg#&WWbpJN&%~rJ0aqzPzl at d(VMRNrFOwyviq+8xa<qyq}OkJb|
zGvS^amHk%Y-Y1HRDGZ%7xVrdwvi*;U;BR)J3~PlFwZM5|$vRw}5WrFaKafhUZI_5)
z3DgJmK$Ki$X*8XZ>DiSCkFV~=196_<Y%5(!hR!YZxlGhp0Jv7%;zS<~gk{Hp#^7~n
zm_$Kh^$aIb7Y%k!<{27qC_<9yc`C5W0v~POV?R0&P~O_|8bExp7hxAk*w`27o#F(^
ztaYzO39%gd1`|y$>ZfaK1x4vNxMln%SrBhGj(%`7N%oKP&PPuh9HAp5wY@#X*vrx1
z#UK4Ie8J*1fG at n3Z5Qe8=CtCPuY2ezpFy!O7k*zcA>nN?NeKi&fwyoH(yj!Vmd=~s
zdXQzt83FvrY&WgZADM}7{W5hwW?f|JGcG|TiL+$47&7c{F_(M#1Zdg9fm{znS<)@w
zTY=>uvt^_0CGb(XEqy~}V`wm_A&lP`*onAj2%ryN2^raAkckaOP(1vQLrNCyqFn2e
z`W>*Y(BvRY#DLgfH74$Y(K4b*=q|Lb%S(6{<q|^+V)E$aVLLf`-ogci=95y(<#e$W
z$S6c;q1kUFs*x_!vxW5C)|vt1DdT-1Qq*hX>VhXvy9<H1s}j$KXnCN<cUOFEhb|!K
zgMbJQUapMgRuX(SJe$9_iWR*L*TE?bdQ%hp(^=e8oXhZqC>_LPgO-Utv4DfdH=|vE
zA;!7)xyxvbg!OWqec_N*-$nApB;q9Ouzmpu7oI}0-w*><iQ|<yl6Gn_Bgm(Rjs`%%
z7Tf%bv=TilK?XO-f#dBqNu3mat!%~a#}KG)@}w{h1Wy-8>rwVQ$B76JfB2A~EXbP5
zlpYgB&7=mbToQ04aGX}7rW&L3jj?jBh7Zm6eU`=tAyxH);MJ9r=>bb3`IG$ML(T at f
z=9!#F#z}3uBt&yukD6&$iDzMPb^27vJfG`=g5Z11)+|jXCS<sCEhFXZ at Ndz1GKjiD
zC>A(+V_E_=mXnmDfuALKc5Dir!p3DMdtqdQVO~)Rd>E+kG=xl5hYcjJuhpf<`4kOw
z>PB at QrbkA5(vICA$!r_F?edTZ>DnOMrar_%WKlsZlsCW)4dddfyg;Si5XE4qRYHgP
zkUvwFVQ(4V6ezqx)Q}Ee$v5SKatj%4^lQ)xfE>P<Jk{c#wl-SifBdYhV{q7t#=0Hx
z{iYkTR!~i04A%kyobt>iS9?GA+O-V<t5HNO5|E33i?rjl4}R2l1Tub=vl3w5nX5?u
zdS^G9-6DE;RZG^el)Hj#UjEbBubnU~v=kc7eNcJOhN82`dR9`q^HM(!h|k#=fva&)
zB1iuzx~(UR?&(t_H*R at qD%w$Mr;F}N9jo{&3Y8&(d4*L$^_G(_k$DA|(5}^>N{w{$
zP3Wy&rnFTSEi-2fK0GxiX5}0P_CWsioN2^FrF*eT4qKbsCjc_&F|TMuQc9oy5Kf{O
zK2GYXY<}2XMkN8fdzDCxH;Y)kdF(B at e{pSfGWyjd03Nn?UO`QP+30;mKFC-Fwx(Ag
zw%WL%TJ&X<bQH-Cd<k6kIt28^4(*o#(@<IZXGouTmUuB)nlh^nn+C(R!%{9>T=By6
zSfVOY+ud-%5c~YWwlaoY7eKIqMpV*cmKOAlMoZWY`PLw)_!L+j06{>$zme;Y=`(E6
zONJF*>C9wz at 4D~c+)z|;oE0%)r8)TF`Yeb=mUveRb!CT05{5(}aC>x{pa(~MKKlV(
zZB?H>v(rH30erWk$lbZCx&%<ivo<Pwdf}mn-(1A=L)%42)?TAb;8zsMy at 2p1maF18
z^mf(7+!<U$y7)&65<3C>)SAQSka-nh7AMK$Qz>p(pYCXxU<FO0g4GPN4hNYw<M(Z<
zV!yJ)RVK5W%6p#f3kfhKX(DVtq{X$~b+m5OaUwg;rf%_a;X4-O#n3P0e^76h7tlaA
z)egE9$sE{&j+Iat27y_(><ne+dc!^*3cCi4iFyehUXL^o3vs`>y?wUEDe5qz<cCQG
z9F3<h4Al^2ASqp^iWcjynr6YmI7z~S2sBuB&<jwB+BT;wG(_GjrX{cZOm>C^ytno|
zRFWK9ldGVS2>v(Ii|4_rJ^L${=ibUzCDHw?3-`D97`?oZ_o*2h(N_`tU*gMi#-3^A
z at ABeyL2-q&sfvt at 0%Gr at qG0j{lIc(3*(}BzUD{we-nb40xwHf8>XIw6w~a0SxwEli
z*{&_uP3Y}di^AU=57NvU;phJzVs#t$NSJkjrGf-xXQ at x4(9za#Ls7CL!sKWW at -U>*
zk1g(3PMREh at +ZJuvz5?kykOF~bzR-^EN}1nLO04tH!g~m1#|)kw1T<?9oYmi<@M#G
zjbCr=xB^rWf_Bp-Va4g`?`Up(g?}GzJ+lp_DfvRR6~rmeQC9H4r_=pAxqA`tFn!-O
z|1)03tYo~xrNgvFbJ49kj%FW85usN?B-Dp&KUAgm1w(|z2kM8m?q!|ca$<Z>@Qfsy
zPW6<JHP{%hr+bNeFU9+XhYzpXU14|JphyysFU(sbAw84#GVl3w*PXuvQPqBTNBY}2
zQ at W7#h2UPBThdm6mrOniV?OS|I*)?T-bP%Cj~F&t441J8eSLoikWDFK^P1rj>@5ML
zJ!X45tu1)pjAIfR5~HBJMS?7};aeATv&)F{MG7#nN%&WO1XvDmr*Hxu_TWs!N*78u
z=KL$QjbMuL@{d)MA*bZdW&wj_oAeS)Hbs@?pN$K+vcpSg%0cM%<vb{r+Wy_PBFv%W
zwu-m`+#{_=8MC|!iw?F?!;c%?Jn&3FM$2MjqMqJ1!dxSKJtFcVH2<>P+8*szfj*YA
zF|XCaU-lQr>Rz);wOASBK1=hPtLH1R^<M6TMXqB1y)xh89<H&u_zrvJ2kP4Wvqeda
z+jfDGu_i8Z<<-B%0 at Q59r!V6_!#YcyV!)d9ehh>&H->C>?83w^5I`7=3N{oL5QprN
zD7lKn$&Tt!`a3a`x5$i>NWXyFJ;xItM>#Y$HCt`<1d~eGRGqBZ@~jM#)Ru^A&kTq~
z=5KWvpRb{NU<D2Uoma#x48Q96kquvUp0B=~9d}iE>t&TEf!I`&+n4<)kO!@?E;D*$
zcoKQ1Ga-wg$}!t_-t0+I$UiLpX%APH+B9$|2`!lbrR$df at rl?A<?|cS76uFtdaOeJ
zZHa|n7D#^Jo}vl3{?mjLeVF4eLl~cT>4&6d!UnqrO<Q&7mOqy{nnhe7Hn%C+jk$`E
z07N}U2$PUoV_o(Y*vVZ*Q|7~1a9;53zdOKH*P;qtZ=FI~d5Eafpx;9HyC+W&qw0WJ
z)Uie_1KZsXF?`=Gu$u(qqNA4i`3qt_Vc6F|KliYrT_2;l#FD!@Yg_nQ-B!Ps=3}QT
zgG^5eeP-TksZR>U&>oUtdofbNC-!24LU&lOtkn+TXpgOY6Q!-?q!vGxRL|h3`Ykg6
zTV=qF?E=^h=i`#P;bC1da%SY9V`xlJUp?9W-vgW_+26<1s`W7zXRI_cZ?3oZnk|S4
z<!$cPP^njT5nstT>>^p3%*j82OGaO<sX at g^7xJU*;-{GMH$W?ajzhF{rKhDp7v0-v
zS4tR#QxkQSNACb<&g2O-rtKDTSqx^j`Soz$$rAfHp17f7vp+}RPaU#48D0TC7oiHz
z*+=d^-h$P6271Y-ww70394%Zeq~D5>@ia_;CHYu}tr@@f$z_!e=?jD-f}7Bf7kiqT
z5HGrpfacZB4niBxXX0HrVYVaGl79VY!f}1oVKtZeYqy&fi7O=h`2)8$x)e*$VVysy
z2EEYE9#rH18tJMB_ViyCw3Bq2ng2linsUKvX(jk0V!9v!H8g?Tkb_8-M!(hMPG3Yl
zZXKID=ajRvs>+=De3_0Yk5NYJJe9LHtS7JdvVM=(lqBF$MA+NB?AlJCP62F_ at +5%z
zKUJl|<?$mp4$u{A3F%N=jSy6^%nl&?sN^;p?s$&3!Q8fi#u!|S5&D#DA9mI4#LdRq
z4 at FoS88l|_fOs&)fYj%SaS5}Sf?oeYiVtKsCxB!x_>sE(-v{Ef&4)cE+VfRX*(+@%
zS09<%7Z3)DnsZ<g<=Xkz%n+Vw${M}=EAm+YB2`B$-ak)>n{P`J-s3JYF3U7A^p0uy
z=gRp7cwFjsR=ZS1X95uPi+8p12{ran15Q{J+p-`yL)BChf04>w)*58ZNX|}A!1vt%
zAiHf{JZFpQ6jYe!-VasL`bnW_%iwxfx0%|S5&`1MzrWVq18mwM(LKD05Z6H(b^NT+
zsKl!v00)%kyc$t}IK^Je?OrF$U$~CpYOD$aCeKMr at Sg|tU~#FE%dFAY at y>9qW4LFj
zFIs|*lijO28|$;k<NJ?!fx_G<F$w~KuApzD?qqKCnb4a^zE@&hyJGZi^RR)}GWvQS
zj`gE60T9maVHmeHw{V>oOD2=kNQ>XWGh|Vdl~jo~-bUV{6G!y_)nSbbY{^Ogp_&8R
z9l8umMezTWHY)Rf at Ew)i$b;s)eoW`|E_NWpl&($Mg;bOF9QlDG>NUV3eQ^H=uE(lv
zY4p_ at t?t$!E=YY=Q8vj#ugPOJoz3viizLCp49Gn7IV2NaoX+_qAknHcsgp%+8g7%n
zNnFT|9frwq^iG<3hBfBKj-Nak at isx3>Ocj}-w7vFNA?IMx at rP>u5X%&h+Q+O7Z{$}
z1Y0e=yJBt9hpR>5_H{wv{$y8y#{HVOeD~%)JMlye<Jh-CLu`iIabQVXCd at zo8e_jB
zR`$pNL|Di<0yw4Zp2>V3Pv=}zDT4MR*S1E&&yV at oLl#nV4Snt<>~hCcVb5YljXe5z
zY)8zT=3mi0)UP2eHyzcewHoSmMMn?IE+rALvghH%n@;q(1(X3I>|#e$goI!e?J*PA
zdI5yC`h?r_6XOGQbh<6weK5e?3bpqkJH^lhMXVeQ2>15LMI#{(suVe-uXp157sp}w
zvB6-Trp+i~#L}7EYzOOU2u-iXw!KyYi4V;35Ijj`$v7F^L(@A2>#YnS%i&OsdA#f9
zs9XnKa5!=}X7)j;H<yw=8lit at 6Y9@i{3Z{xA_$hu!$-8F>%em=N-^#01${xZehAP{
ztc^x?w-%D_#m1n&kiF!SB>Yt6k01%UVzVDo;yszOc$SxuJFAw$5P1F4Dd_$uJXkXY
z0yd3LME2x1XyUdF=cJi+{gd{*-9M*IJ&<#6^XeCQ*Id(VC`Ha^8)A+TV%ku%ZR~fv
zyn%lKm>vxdq<{lHfLK0)zg+D85WfowRz?P48^i2EWS=)wrz8XjvCX9hhv3;?KG}&(
zLRFm&P=*Hk6s5ABi%<~*4n05r-`;RJ#zy!Ywh%581kLsit4mdyxBg22Cx1LH5^AO1
z at xPSP(=ll5l?ks at 9NQ6tw;d+434`pHyS5coBy9r)R0!qT5h6**m#x5C`DSP-W!NF7
zw at 0$Bd>GX4fg}<L<hm=&pKACa6Y|f%qQfT!Nw8swaLiAEE+fw_#5N;1-LpnVDitDS
z=Q+OmznpP7dA=a;ny3}kW<`x#HWGmQ<!$_o=}@ena8iyCztpJVT<(ra&is!VSvy)C
z@$2R!fOK<z)sl=le#`j0J1%8*QJQ4|`#ypAg`923BmZQ;{ZGCVb9EzTGU)i{uJy-a
zp}QCXEmEcH3!JN0>*N6D9GB7C?h}pMI@$mcPCY at KE++CTf~ur=S|+<!T3}9Aft87B
zQEIzCHPUrn0AN*h`5UML_%0q at 1TQRCC$E2wKX3Vt&trIRSDg$sqlAE&Q9Gf}Nu4(2
zTa~6ROu2N4l&;{O#BvOLWV<2-(1r-jrL-WJXTv?%JEu1%mmlDcr<*f;w-E_#ESeQ7
z2d>;L#xfhR2CU&aopDp;;d$Q?=({T0mb<;Rv9<0Iz1VA+Ih#~*==5|CFg$Xq3Fq~<
z4o#!wie`cS at hy&8gMv48LK4%v?8!W$K at aAM-};V=aYV|XsoQZ5>{t{0QPS?pXho&G
zLdY8Pt5CAnrf-uwL?gl<m@^IvZi>eZx}v4R#cLC}4B!j!YW4VfJcP$y;P at kMZFZFk
zkKRmim--I6Ag2CW;KtNA?Zr4Y%_gKYteBwYqv3dH^m--Z*AHDnGz{wdA-5}kq7n1f
zU7|sBh^1ni)Y~7Xp|I5<!U{k}rd-=u)>wb7p?!41-&XCU+~G|0S2}uGEY&wn2brc|
zv~qP5BE06Ch7?Dd9kdLR_CgrwEs!M6|9(*Ea`gr9C|RGGiOh}R*^lq=)3<g8WpXy5
zU)+R+h};t>FFjTeE{=D7Syn5bnN;<lX6{M}Ji{P{;qWilfR at Zy;Bn4jDsy|c$bxzN
z7ktdiArpv2_cC!>5)vfL!+1q@`PtWLM&rt<*6k8KSvk~vC=Qtb)`5TYgUbFA at ut=`
z?!(3O%^+avVHZT9{MoavWpZ=nSLi*}yd~|1>6A_NCqzFXgK_V}PR5LQas)~Bn1;P~
zKfCc}VZXB>_jz?bzPg_e%M1Re0iqg0wI)PdzH8+M+9CM!?hUYY+fm5*8^HIMwcto^
zkrT790}CTjpDT0`lJ-L`8kWQSphtpF3`vlt_*9ir%*~{rGomeGOo>oS#9Am4S{3G4
zxy?%)4>*P859(-ZD0d)dwz!8Fctv$e;9kBS)k+Nw5}H*$jlU$>d4O3;(Pa`eMzwjJ
zR`CmQ>rd25bB%zZms2V*oY4t(lf2a6!fEy4-t|`ZY_-e7#1e-_2yCxyYJr3D;a2wQ
z{~of04sf;KQQv!fMt-sQTHLmENMN1U8uF7CD&L2^QO}g<r)&%0yzYCWwffh+=~|w}
zT at JO@121zM2HMgRsR2E+qhjM77p3+JM^Z%;)d4!H+{gAEWXGDejQvJDGm2&6f5}0i
z!a*8Gmn}Va80iWE=5!Su{y&dCNsqo9p^;e-(TOORz at LM2v0fe}(o}@`k+Fu*i2psu
z?b`T<Qw~Jqon|Ine?s=QIOgIuwEWbd30Tc1B^OzPc?3D)S&f$hH2k0I8oX1Kg@^~G
z(YqOp4^K=YyhVVc^dLF`ds_vb<};ec{V$X5&5HS<NLLiA)7E)~oWkE%eVDK(=M at lW
z&f*i(X2KgP1;KNa$G#A17<FN`j?nDl at 0&8GbcN4U56N5CRt4GatLeicxh^KP at 0F+*
zw+uwSYyG^nm_^{Ewi-&~+AjMTzp1S$n2^R)2B}d&WU5%W${*}ndvA{K%$LTgr>5r~
zHh^kY%K}~VfCG$N3*e6Agv6IPfgdH{Gy<+yRUe!0aMDe=L2l+dy5X+=-c<pkK=e&^
znGhyCq1!bE*Eh#<(xiOAM#yoBwSr_fniK40|1n*S%io6FI3|Xm%^w>!%p@(b>wVA7
zAQ4N<d{($d)Ug5hb at 0ILR3&8OnPlpuC-SF`;O+78lz_xaja;+TG75+?_SfL=;9i<_
z3N+Erus-U+0Yt9>lJ;y+`POH*rk&Z7z0vgN9#SpqWa_L1&KSER;1q}U>|)sry=u|<
z3*-s6aucpSbU|p!Ol@`*{e!iA0<81Lqa<Z$RuQ5mquwdP%yiM>*i`gbE%SLT9WaIk
z#mj at 7f+&Dgej;`eW(M_ZWcPaw7LW$t^WDqjD6fgu^1f5|d*Ve^_)bcKQsQKx3^R|U
z^d2*OhnU9ZAzUJV{ku7u#ggML1QN>j=LqKf*V{USuCb2f+ at qkL^?%KI<kuHHqb6hT
zO$eO0|Kn9ciE}og1-z>Hm=GTL-S8b#sySH|Wz`*0dUPf!CR#o5s8Xg|(V|`~ULV{q
z@{av{;sJ#(P}jYvP0u|agD~RPr^SacY3N-&%p^jO7Cu5!d^mTJ%q~Zq#I_Q>4t&v4
zfYDK7-a;N~x+Y{1Lek9_uj_}NpJ+Af4B^PqAp&(WxQ%giywO+$uJq-yVH#4p4xZnX
zS at kQdAb{~{H{;2zLNZ&+;1s>Y`PVE%rv3&22zKlr+DK-qJ)??aY5#Q&Wh{1EXb|e^
zQcQ!!YWz8n$KohS{ziUwZq7D0)GMn9Y6=<H%pEpzGt6Pj#49L&2d9Gi{v5esS7q`{
zAm27nK!|y^_W0DAOt9(PZW(E!B+yK9`U)XJpD+|k>Y$EBO(Dp|HTRs1U+vUapFDnp
zyso6VQ%0JYpU2uUr()E;rp;ayRGeKq2J at mATP40F@G(iXz+-T>ECDu=eKUjP=64yB
z(4c$viF~}-Qe;H9u<@UFusbkG7+alS%CdS#ke=dSFWaFYID}*x-L=4TJ*ui&>P|z3
zse4K$?6f~~84FxWGiokx;?z+uIu2EbmN&l at +jxkH2_mv$429ZuhwUPs&<~_E<eMir
zHp6vHMq!egn~cP-tgv8Eo&F>$F#|g5qb>BYg$EOZ7}=uc0$sY2>dMWJ7u$MYcQ*hK
z&3H;YYo~k$DT5hp*--=MKD$OsDqlb}9kcglFhdu>n{9Aj%K at RpMk#<AxQ9a;y#3cw
zYBCHGF^YmF>e7!5nbBY=j)9K&6rwF|a616!>HE_<a at LVetQFABy+#8NJsZNUw6UY_
z{~Wvx465E)eUu4(bN}xod(Y7^k+8)1M&bn%#NdHQCf0 at c(Apkf`BW|274>|PFC`Vc
zK)eYWPjH-*qN`X%e<BeW9VXa^@Cp;2$XI#!ZhzQ&R|jDK-tHzgp^_yAXpO;-W7qc2
z$at=vq4`+YZ##B at QNa{s9l_JxbA86hWN_$j9u0IBFHP9g4OzxTAi{u5rT&<xWXmNo
zmOJO0Um at Uig<apX+uH&gU$%k^{S~08%aHJN7+6f0Y{)efzwdhpCk4WKd<sUwe3B7A
zu}SoCkiZsy(mY1Dk<Nwxnsj&~IMoV4sy*cV?2vREM|&#`nT*DjF*Kuofy%SmOQ^p$
zITBqeILf0&vcX+i#`JnIddoGQ at L@KZqS0*ZbcLMexWrbjnZ<JeJ;Zb_hF5<LaZsi_
z8VW_pE*X45mErOrsf|OJ1SkHi(CS`WtW5?1d?<+*Pz0Aea%4iVactMA)EPbl0exd|
zEsSGr*k98FTnu7GaYP84nt;dL%xf!&l)H3UQ#)=Y at j~v?P}2a$uNM&G7ksE8o%~BO
z=hy%RE!*P|iktsnvynfz?kRL-t=q$QclC!RWit5HzUGq>;@EnolYT2H8VJbf#G3TL
z=C>z at U{ts;Ew>l}fo`nu>~wT3k#)61_JA2ktC^Ivl(0#I*mB#p*HaABJfQbNO!gXj
z5#@7EQsEwY=b)n*FgG3MwaQyQ)0<<y-yLBS7~``4Z*-c9|Hp&802CRaru+w#%x3wZ
zl^|xGXrWLwAJg^4R;sryvsp at Quk4VXR=^Q0SeMF#O`w98rg-Umgf(P;hjRA7O3oO+
z=jo{`F5Vr?War- at k?)Snoi)X7U}1eD`rR^^$k2)|qc<@|8IhbnNakW)vN at 0&;Xczu
zU5i7H$O0OX-vOmCm(Ymd8=JkBI8R|3RuFNI6Z#01M#L+*@qNUpBT}kL8~8E|qy&H1
z{<p6QB%B(h@~BXLvdez;wf)AkmD$zG1hnTr%G9gArhBWi#NbS|lPv(B!hQ^DK)|-O
z?<OH0GeC}R?9{=4%2=Wo`^k0XhDuXn&`DH|tcqtvkIjfD_R~QG<EW_o5%z^}aT!W>
z$m-lR+bk_2#H%PzdJe<I-ZWhMph%JE`BQ+Y!yhn7(hJwg=9mEHTgWRiF2S5PG#Q{}
ze`ok9RG{X4fbS5LZER{uk;Cfk&H79QVP2gNMoY(;-;j>$QA&yjUn!U&z-FtsY=R2K
zfaq?XFH><O8j(a~({Af;wU%uwOC%i<1qCtvlQ&tJ?R+!{LukHh4kGOmQ2U?rrdt91
zZ$fYNuL!s|hDebSxvDvVxs_y-<~?0Uz#50+k6p25VgDxwAq|od{wR-$+M?E0+d)+c
z#EZKGKg5H5rhG2KDbG}y>%GYPBtXdTfJ2%3?N7sIG#Zs&*bLzQMV5mrnWOw(?Z7a~
zvz1T?s3%rXUt7 at i88j&cPE&BW>LINhQhJdL$M;n{MPS-iU9Fvh;Dpi|w{;?q`iO>V
zBiwpX8E|HxU5@~3kZ}z@<Aq8X#9F~LH=<kC9Om>(^@ALWhH=z)9&*0kFmatQaZzYy
za>t#{@@*<224=&?-8 at P7aA5%;AamO@@%Y1wShkWLIM_Bnx}pJ+;SyVlQd~!(odrkE
zOAa}s^j6tYX}gPghHGWFNi{t1n#ic^1|Y>#uEB4g*-uK{-24n;4`V1~a3v4N;RJw`
z`epRPQ~tm;HfjXpMI=PSjD at O4XjU#G|07?Qz19#UwKwLG=cac4BrFbQtvzc|I>{)8
z{bN~gNh&JCWIAb%KmB+dv7{qxl*ww5$DkVH`b=QLM{FFBibu&5KEIrYp!DXXND20}
zN+OA$eyx-%agr#hA%kN5mh-KLtzN|35VXy at uP#(5z|aXAAg*%s`F}|}%fqfse2f`r
zxxq(BopUX}qqVv=pU{t~_!&HK2git?E2_ZQm1$rW8DUN<vr$fsx;D#M-}Et*8~_oD
zEby(y=Jju?!xxDCE!KX}UX+qLjuAuthxzK-O(=PN?JtJA;q%fa;*5a72AJRp!Wn-G
zA!Y9<PHWNYE^Rere*Bh-7Y8BfTC>IDcu}YY4-~UUB?<IHLivm-l_m*W?~Ej{kc!N&
zOV<E#tw2rTLIo|5Wg*>Pxb8Mul3&zD&ven>w9vo&9{LAwVFFdysz2dsZU&$Z@)F{j
zpp&%Lb4tDTSt{xRER^)AGwKI<dbMC<f^1zLTzWO(t<%^sg52CgNv9xHDUi-4(*WG7
zvMet$f7Fn;AzZW9YtXYyo`J_{0uKJhQJpU|#x(67lM$)vnZIb1-jy<W-NKii0gw{P
zLA%pWQ>1CbVjYuScpoLyz;KJ$<a-nEdz9YkQwJa8UFdcqv8MLg)@(TaX%5z{F4{JX
z4LXMEsB=P>4`@0}S~k5{_|4}lS|C9+PTTq{M~#!@Z6F;Fce$SPrpnR?5fA9p6A_wh
z`K0a!2LT9noa`ve*P0|eEg5_;ARqSs)AEyxbv?#uc=_GQG2t)GY*XPKHNV1eD*+CD
z^>XBL2rJp1H<|V&aY{Bum&NaqgIvF)`feyhof&RmPz-Ov%PD_aUv`$VlazL|w)C_~
zvp%CM?>6vzLb*C!nIjr%J43?n7u(So^xE2!6Wd;iuK2xd-xy|ci`ya6D%9YF)kGXq
zFGHf+a65}FYR2$5X4Vu$x5cxr>|U?7A!gBjo1Q#msoB^VmGY(9Y2{Y&$S5kv*4gAO
zvgOQb+xTym)P>Np^YdL*1>4^a6W|d4DDV#`bpEXDojuX}z!F<)DmYJi;$YhMmE<#g
zPY0LL35j{~wbwR?%bbL`y0tO;gj&sy7!t6B8Jh})B3s=>ug<=4E9V#U&ADO4XCVS9
zbU?vQvD!dk`9WgamX2rq(*7^uMmq7P7hAH-G)T%n`&l_mBzp^5PTs4 at h@YAnis}(R
zr!2!Hr=J3q{1$1>k<h2U3rv;->4478<MH0wpcc(O at mL_~$DooXYPfhd%{1#pSWlmg
zj8jrkA at d_p0Zg>HVf0z~#tpNo1b4R0y|&mbTmWo~p&Rw!PP?`D6!D5K#l(jjnzI<6
z0!a1W(XflImWN9A7vQ3?_|b~$3#EMNhnn%j-v_0G)UevOT_#WK!l20oGp(28b1*4v
z+$F at ey+$(Ng9zN$NC?D1`Tq~KG7F6083^w|jgy7vq?4I3tprI{UpVve!G)=Tqy_m?
z24kk$itm}Iqziv*if0Au{p?*<YI{J=OS?<t2=V4VA(X1?w_sUAl&RbD98zqH3iH$*
ze$i87W^h?$9jYkfuz7H)$=k$b$3hSsh@*hdHC)S?QsWkc(e$n_bcO+}ePby?a=WZr
zf%xRo%{vaPpHQ7!I-|DFh1mSDwmw3>Hp^D8aWx!QAjBE&z7(#Syhvs at Tm|GUvE0bj
zh*V(*7<i6GZe!G(Yq28M^ynWD2VX at vCnL$Vdk(E^4L+^O?qqxKn++5Rf?a4RR14;n
z^F<4mLu#FxeF|A?<Y_4+6X8Yobv=WoK51cNU9a-*R!f0)Xt={k?eCt~!1#{u>+?92
z_TZT%yzqX-V0UllCd^a5-AB>Nu)PCp#8P+X?omb0-Z&wQ=(bkoT<xv((=Kuk15em#
z5-~qgq(0Zb8^nURsc0-VpQsPS^SD`b*R&bw at e$^Z2kFu;!vBK6QJm!oV1Uh}QYP-h
zI*%u=6E62tUk^i$g>=~D5%iOA4t5g(vPnQMR{f`X|J?#HENrh%aPhX8G_|Jgh%<%v
zLSnH9#3cx>p+L`CRv>JBC=X6{UyM at X#&Ok-uE}5wPKnmi*F^r7tmb(;E|VEO^iaiW
zS&S`JKak=`A_20eIo_^|dqUxp?5A!^p(Z~&9XW<%nNUBwWqYH}^d*Yt!KUKw>6Ik!
zv0VxxtaG#2U(%lIVF2`q4uhghT>)^UX-2H=v5mv>gbQGBH!0v3*)#^w?DK%`D~+41
z{`r`DzNUeMEAKNl?Q8Hpz(1iz9x?~i6ms=+ at MuAxo_|M2d48AlnHC&kmY5)sEkfXm
z%YSQ&$&NaWkCuo1uYGURqP%h&u>OQd^?NhvMb%Z4Dp4pq;UuhIK<2Y;b6iD}u3Lk>
z)DE3VM+VF1ex%9}3 at H~12LX_l=7x0Qg|rw%@kT}(dD2GdXNOS7=~Yj<6VA?|#ic$b
z{Q^^Ea+`16aIMewCx44oI`Ll$H*3N*2EFE5tPC3&U5F|gH^FlAGaB)vS?+PpWk|Yc
zTFu1HX~8tpD`~>mb1ZX0VoF=gU^H4xrYp07q27Yia)u0Y^Bx`>#lBnGdnGq|NBSe^
z8T|sQ1-P0hU!8~Jhy&DghDJ=RJ4I>#^UG(h-E1UT_b8;V;ppwYx!**jV}IaGrEV3@
zGV@>6YSnwrb!kD*N%{Qj=b(gLjOp8zSjL(7{ng5gZ*JQ(8TpR3ECN$j&xZe}#n2o_
zUeMfoSq|i9whsRZ&;(hM8hNXERTtV`z9tw*m)vHyz~FVX3a5R3bM)L!S_9CC;$|v&
z)>@|{*6y3ou~J(wGnFc%Xi#9F7wn|j5f;v_%<eVOa413F<h09ujF*D3I2;GWx<IZ)
zA#F+m#JuzAnsy{PlBM|%j|xP&!W*GDrd3fbCPo`6aj<EeX08gs*ZQt+vl<fK=vo#!
z6}sGs?d|Ky4~_P4d at lpGQ!a;4 at R9p2mL%_sa!`V3zARJLj_H?3t4`%f?SCJ#M8c-X
zHp2VGL?ElKFBrbvPz0i}C_rp at X5K~ASA^u%FbKF9W7Bayl%8?_f^_nAf-1&X(e7q+
zSTWt5v|!O)Vd%-X#&BjjW?cvKd6 at u$QVLB`L4xIV3&+GT+uNn at 3%LNA7n}roHtMB0
z|AobNcEp3}IlgAgRbD8gni5mDF2zb}iN#rqk_nbXlgpTY{iBGM2pmFArVf>`K0PdR
z!dra8F=(Tjo8HJw#ZVP0)=tuI$cJ%cJ0~9>23mX~0ph7FN)n|cUf;_zVRqj-g&a&n
zgA^|QF;dWk3KCAB9JNG3dR*f;#N*Ser{cs#tS1mC5j7P!(%RAvx=J|=6+)D)?qv;;
zbv#cUEiG9DZ?zyAk+?9~(ppJwJa1soL821d()`4A$)LAi*fnQ|C^kVX5msXfZ5fP6
z-{9W)O#Ez~D~y|}(t7JA*o7+KFHC)e86!_8mt7q=-t`OcX{3%wh+?LH6Z5Z-65D=5
zvA&P`BOQqiUN8XaaU_ckY0IUzTe2oe6?V$&%LM5cBRwcK+T~HC&q!%6W5$RU<#Tw5
zK`5gyN=B at gtF9agk9gQY%q^mx;56_%2%iVSC)BDqo*OLD`~y8CyFTEy)N34by-bH+
zxh8N&Dr%sE`qt4kSt|xNs}}_&6kdi4N2xKAFAyygedeDVcoZpcbcctvGfUiumde~K
zse?x@$ZOAHTrt!(^v2 at O<{SAuvDKvFl}f}MzpJK_WUSE~KBUK{(AFG5`Ot at H#`zLb
zsoWwK>*dedMt$IAos3*dXJ>WNbf)^IQgca5^iLJbG=iBcYL)a1k}-|T(?ezv*jwp_
z>$~6|G#S57BLpvw0UHF)u^Xh;nV{PUJUcOtDG%xcub?$DKYAP04?}EcvH)*PO-XD<
z2a%;33z}~oG<Qyf|M-%@N<D{jg;`5D{DaKxA^f&{(W~Xt3WsJFB7g?mkh|_yR2{46
z3f@?M at dKhCLDaN4GS#^#cQXJgd2pj{j(qfXm+zMXB2R2wk{dwMub0ee&b4Q<jzqD?
z>>7A7keGR`O4|N+T at dx~@Y4dJ2K;or5W*SGnZ95nno$hXS!443?ibZ;%p%3ht;1=_
z?XP0TFAuf2)eW9|{FQoS;Bqt-LY%Cw;QcGR5Bg=;41!oaLM(G%%P<m5cxl}g_PL(K
zk69?XHk{7|@xuSBL40OW<ibzB;tn`&S}QxykYvQB1 at b;dfm9c9F!M4rV+L8(noE|=
z{KYx#xR6I26K~ZqAT$ztRKfQhKwv!D=!?+L%B5=MGx$dJQzI#mzwR+*_3Kj6oabtO
zP{6d7*b&|4p3t`fmf_N+_%e2*I+K8-?F8lm<pzt=(tmb6Pjjdxi-KM-c)DG=7G3Hv
zrM*~WG(_<XPAJ;LvvOMt!mk!>#{Yl^BrAe1{blO-9~-NDYgfb=0l~6g7sH68gHGBg
zY;M9e&8O-f&*+^_VWFVbn!;O2*KN(T5uVRQ(8El>_O6XxdhMP>A4Lt%E~eB-IP{(=
zn1w7cC5m_>BxNYdGQPn~+N7g}*6F=_Fc^f2+-66xTM}#wsrkk)K(Q at tf5BFvBdxa>
z)9!B3aaT{52KFtCU-g(*o4eYkbYuk;#J@@6e1b6(aEm1NIm$lZhexr5(j6-%j4LVd
z!13lTRF$&pI!>6<X#iD9?{a_OgMGX!I at hHoC(>^V1TwWk$RuGhlk8~6{w>(niu|hg
zaEkCnCv1VJuW at 0Iud(NGHvFn1#e)4O4 at LQNFf0G$AeeDkck1GeG)RRV2i!Cn9WKwz
z*bFRulQ1wy5jlWa!(}-V1%94sg9?4`VlmW+Q|+;qwjE_IEQx1bh_?{<+ujdEd7$!j
z&;*$)cACGh{){<pKHyUhr#0k*roN^wY4xVtBdd-CwBDuu1I3m)7;2-`Mf%+ywM+HG
zPwhR}mj`Brx3~~%`0tq1cPoO%FmUC*ZO%=Lvwu||TaD*G-kLQ@;Inld*(ZjIgnsp#
zDwi<s<Tq>%_HTG_71~TL`<DH{RhAE6Ajx|bx~)WA at Ig?%q~#zr`$3|tYKzU!9Y8Of
z3x}hN)|6>`AQo45sV_4MXlSfUCtYDm;{eO{tCMx(*WsK+0gs;>==k2F4GgatqJo>#
zFdUC+z}onLVtfNqxBpQ4ULivse71np1gq)oiqFUjPZC2}kYTC-i{>sVy3K3RG!ha_
zwaBa1Zx=b&xt9dG_?H at l{)w2nbA=4hQt-%pRKj-q&R(h(t&5K4CxS&78Z^eF0tBgz
zz6+;b9Pwq|3^^>-${*WvmzdvvsEZs`G0gd`fw-FZ-#&HEt`w=*bz{+4ObRk3#yL@)
zMGlE)K7Pqf1pI;YOAa?d4yGR^uG=Fd+1_qbz7Rj|NrCzg0syVUBlFZI0d-!=R`_to
z;oLlf5?=Q(t%f_a74doE!h5D)?r5_ZC9!u}{`iXbK#88+r&*!GBZ^Kds|MQxJ{R0k
z9A-UVVnT#3N6I<)8rg?433F>OAcmM>pdK4PtvWB7t;eFuq;m+$MDs9eo8l4Xsqsv$
zJ$jgu2}V=bs@!n<E$Sn>Km}QX0d)CLv)zEKo!z)75GB}=&uoQ5h!aLDre0)ztm{<S
zsP$L2#yCO>RJ|p<RSN-GkOm<a&b<#g=?O1y6Tm^y?eO;VT&C;A$w99Tb1Hcn9RiD6
zo;C&f%*6gtZ>4-X6FXRnd_Kq6r6AU%ohug?cWPs1I1 at _c{eCRurbiQn&;YCbfg$Ny
z%d;*jIEz;9Q%t(jz?r|DT+<;{ir&3fFkrR+|677d$dqXUW^dSnB^lv;kY*kwJM9|j
z8*l~_d|m*j0NHI9`iXITt5ZV=*J!0Hf`rd`TV~fw|F`1GlHk>(;Dyw^yam7_SMHMB
zNV*!X6$*Dp3cU#}wO-UUtglg!{`}!GUXTJ~AZwyrXL2Hhh(RPEc=OOSNGxeYfI%c5
z?w;@)l{zR6NFY^Ucd`K-8 at 1x-%#Bb_cT!vyK#7@~M`W}kC#aHnM_($nIZc!ScoAil
zt6j}be&3JCVDoFa#?mK(YopBg at R#GKP#l$K1p}DZ{jlXMn+Z&{wq4xTZTfu6IM$HA
zAxcz94Cmz<`IcU~hL8ILv1<MdOg_)#%vIB~G%AZaVR>&dO*T2Ug0YTK%l7)CwCF+&
z;yAx38Q~47*=gtWoUAUml`{WnUUKJQQ{QbL>yIJ{WQgqm(W!E3LeeG2d9u_VM}`&?
z1g*)_fzTQu_3`QtD>RS58vl&3t<&yH^j}XTR~#8GPFg2HxElk`cU!daoifhF6<&_l
z4>MT?v<e(&{KI}eN6vSlAb|e at D-P9*Qam)W)eaIP+z?g&6f8QGU#VRYLw1akyFp46
z$FCl1Lu)?g`+{b$@!hW~()!dqrQB^eg>?HO>xCs_hhZ9+zQQ%8M&mX+;;9qe{NJ7{
z<b^hNWJ))4^V*>v^Vg at g=WMFs-T|C5#oS8%2 at q$eg*LA at LI^PF-+`_r1Si_Ld5k5X
zlpdTgh`2dAbizDWVrYI>q*YT#nAELal=Qy8M3?)lRH{uxwmLcYp73aTZod0T%1~QX
zRVL7NB`cN1Xw@%m!XQp+60jy>OiGHlmD#oHFwk3z1j5!|?yN3(7x(I{f+JnpVJAaB
zl(@Ftb^iyiFLIqG2;_Hry8GrY at IdM-Zi!TBaHR`93qW*Jx#PE5OdwW>;*V9nQ~tUi
zwK9w&0rzmODhp8YBNrbFc(0Mpua7eJyEiNjq#jo=%=nGmtDEPTSQWbL?_xV&+aP9B
zqVLSO2q|8fKpJC^c*$!kr}#B`tr!p?`pzwC{j}Bfoc|AcHF5qiFa`5mdT$tqPNYdd
zHmq-3!P4zX$_wN^qmt&5pA}f;j^+%pj|-*{RscdjumWq!QY?afyBcNxjRfK|v3!VQ
z?Z(=b2h9t{{zK`A^_l7 at L88Nz6-Jl`85ksm1im1PUA*zn=wp>%-|rwu-L!3_8mFoo
z))QoFG*L;)0{1U at jFDe6^YH@~k7_n&%|?yn>1d>2((A?E2CnLY<3NY}a3ogMs9<Ip
zkUYm(bL4ryJQ;w8-BP2GC at nA|eW4~(%$B6Hn0mxZrRzei$8m4)R7|%FR|Vv?RV90@
zA&3RWhjuEwP#le>!s4*CFyMg&IW+nBX}Z%mqBN<fgp9;C5Tx at zo*C3n4<$zNPxIVf
z*m*Jm?2`oK3U>vv!fs_CIg%iR@#ZBM>1K{KMtmsik%Io#eN@@MP5G)C#vr}#E=wl_
z)*q{*2%nOR#O*F<9r%M|iVt1|LGm94?z1uJ=+JLu#IeMJbNLert&T^<ewloa$CFIP
zjt0E_arX4c98|sf$1YM*{*EKgnH`AyZ!~-z*u7#Q3ZQYGf0Ikz4_aj{Y)f^)Sv*8;
zcrbBI!aNwSF%stm_O;xE9m^v02>)w?OAAb(=ld{oH$vCtGx#+-sa_!Z#;Vyi`CQ&|
zQbk=V(-ZJ-HV&`As0(gejOmuW3nIW;%P|qE#C*#B-d&*@C%vF=$|OQ=P&7Uhx*Lg+
z-^`E+!Ruc+ at 01c35zCyayRzMvuH&IB4kh(`#Lgn959nXK@}g5b3AMW0FdTGo$%Eu|
zEcc!kBLAP()tuAi>PS+8b=bB1>H4wHvEBJ0q6-imYHZYeImvSNV9aS2_ZS2TOeE5G
zZ+FsTK&F0- at 9V2Aht5&~L7;|SAysEK<8`5#P|~p?_WlT36qj9S<u&`M8&d7Rb(OIT
zxS=%ki360((<lI+X%S03L?+ikphz19cxM7NR3&2n<oo2YOAua1!wsZ}Xt<(lHkzK3
zQ7%)h_dxP;!h&|71*uMIazOC5$(?i9*twEf*#t}uWB>TWjd|NgkBjWmLk}D)gbwQ=
z#VE(R!^E2a2SCxL<#{1zLtt!FkLb$m?R7RBqn^BWTIV^Iwql)|<o6JpOmx&gug(iZ
zsaqg5V-*khvmajgM>~)7c%o<$Ke$`<bWd~%kp9Rw&j9HUYDgoNA5)Ty%PS1}pn3Y^
zm>%K835hiH8<Ql(y11Ja6s%_8=28mvZy1my<laziD^K0u77O-#(ioyuaD9CSeNayL
z2vh`6#dor)Ii*dHhS^N(ATktH`TK!%iu6tAB9OwYX?Em(piP-6pQ23=bhV|Xvk?)v
z>R-6-)7v<UL2Ic%8Gf}~+WrxjIkp3SU2TyCz#@BA7O#Gy3bz8UUgNn|Tt>49zn|RI
zzz at BjSKWA_kh}e~BEsMf94AjF-u&T6Pe^*tNyrDxiZmNl?;L!~4^b?<439<v5YLKk
za$h>RF^FXDQF|)N|22gAXN<B0-#Ob0V;GEGkTo?d9=Isia1=9QR|1-C{HrMKPEgiX
zE-vH~PLQ6cD^Cor2#&e5oyy(&$NT~c9_$G~gSk74xvC9x#xy3MF`}WhD%z$1PGt$E
z$%VuS;D8V5mMTEG%Z?@NY>5y=e+Y?%VI=YfAwmi_HHflWrTB^r6u)nVakZ9!Y0`zB
z*N|wM3kuiOv?n8R`mZA<WW73o=ltLPBDois3*t0=uQ^2f(0>487FgL at et9eHkD68_
zMy4iThzWxK1sF~c7pp{wx7|_DsXw8w6CzD%0K|GE^L81C=W{TwCl5r|xd*9Av3qxY
zKg;87%<l{jg!Qj<2VCr1N$U;7xqrW|yjc1sLnn=rRMFDRJU=vzHJD(W1?;fALtpCT
zOLpKlJ_Rnmu<IeWoXyy&&f^276PnVbe6Y0&@nL3VYnL8;@jt~M$kkQmWLTyv28oI`
zqnSnc?3^-DZPU9Z%#vq~ciQRbL+SHTI+i610eM=Sw?`lUsSB3nZ0$;?v9azD&YDP7
zj!XXht?zVDp0&P#W!XYc_?8#s`#>&-v!<*JvUWJ<yg1x-E&vv5Go|O9#*YEcAU*iD
z`&#nmo#&py^-$9HPH4$*2i^wi)aNlI7>p(_rn#0EmTtdPBiwYx>^VTOgRI<Fz;M%l
zc9>p?YRofCY8UfgN*jF_sViKS3af6u2y47v at g<Qk$e26NMmj*%yNz-%+NY2y+9saN
z2s*Pth}PzNT)w$@B?s(O6$*AtZC%t%NA!%LH at -yaPZJ2l<cWxd!8}b&djA4xNNQ>$
ze)TYG5W~PflJ^uoI)DRca?l|Xl at vx2cm0L>1zh|}Li~oUzM*H@=Kpr*>bk-Nrcm14
zv0u)(f>ZCv at _e<U90V&94y_X^2Fwmdg`_}uQX&~1I9j$9;8UvFAa;ezDO2Qxb%}-)
z=}kmAO=VZP+ZyOFOu5{nv7)?Ioi at j+@+r<k{Oj=biLa8Kikb`%?Sli0jjHW_XY3h2
zx^%ffN=@g%jqN<s8+^|?lDZ=B*LBv5(~Y;rA_357gX(|bf3*jAbYWCdMy-vs3tgW^
zU1c at G1kx`s9rDh`J}=-vRAxbOJ633OX2<V7!O8<0&*0S3%`r2->cwkNpdnr=H28JX
zwm{h!J?=-sw%HiE!nUsvSR28D at 3&V!oMOB&oC$+VNQL0St%|0?7Lq2lZ*&mmB}pX8
z_IL5eRkL<?cf at Wo1pqBN^^nwc)Cr-p3Px>Dn at WLfvTm^9cwPZH0gxn)ScB94Y@|;E
zPpNoxKQ at eJY<Tcy$y`p8v2$*Eruxe^*N*YOnZNi-;J3v at uZrLV>S(UWFSywrGK!5}
zC(TMOTap)?5ZaJ|-uo?gXOFn|2%`}-qlWB6Ilio~*w6i7*5v0(Lc1aYw28*O_rn`C
zv01OiQ?&+NQVwDhnJU%;fc!xwB}y2P-Y)<Fmm=hGh3PBRg#mLs4sN-*Tp{1TB^QXX
zAprILpha!Ae9Y8?dJb+xomvulF^aYEDd@$9w+y&3of6}gx$!3DY}!X567J;t?cA?U
zWH-k6j~SOR$HVVZ<5Wf*r3jr at B*8Y0 at gq~Vx#QmkaX!S{6*`xCWVWGh$pfT4S)M&Y
z8O#f&k>f%{{fjTofIGD7o2vf7VTheXYu0gqeo*BtaNeJMSl~&VBlG!JZUL8=r5SZi
z-F)B3R%XX=JwJmOw&Rdr5XI8I8In)YY-<LCSOuNINhHim1e76KQk>PjhgDzro1^C1
z`3M9l*6-jVc=24^0>w?mPzKa*m+M7P{M_t*6f&GWUi{SRnSUl=>hQPgE;a+JG$IKM
zmIyyvdlEr_uOYzs(=%SEW)7O?03OM7D6Nl-Tr-}Kl8C`{vZc9H*uBF#WmN~=K|9!X
z*XBm6yCUE>O<%+TKA7|M5d0nSWr=X|7~KOW&`f at RwU1}>qF|M)B#(kleNRvs17N7%
z`&xU_zA*}uN>@QwVid>|VtqFLsJcQu);IXXbztx;3Mh^_W(xJ$w=uFKX#%3YYGXJi
z(0EgnkJ4uohg{JN1Ith^>e6pyQM7PoeA4p1^~Yw at CI2MJEr(Irg3WMDMFrAs_eT?0
z$Hkn+u7X+>hX}OKR#viKV)H}4TU`Svg}U(IJAt8e<k*dQ=tq?Efa4ZklLC6n<^{HN
zE3e3gt)2UHq9vfdoROFjIVdeu0h);f9)k9QugOhFAH$#@aM1?hqX#D+?8r7RssCGL
zDO6`bL9s()w0=qT|F_YgZM!Fizp%Dx<yjia1TYx(qSFHj`v1T970H|ct(r~(cSb5&
zV`?m*BzBz at MhuN8nS0badM*-^d#DX{ZG8*qeM*#tknLHt$(8sm00`F|IPGN(58>*d
z-3u=T2v?dEW2{^PYzP;+_<(w>TcotNjmGGfioB7YR57vXO at Xik3TlmLvW;6 at meVeB
z>tGu{y?xqe4Y2IuI+Sl{1L?)KG%(I=3*@sUe{l5zmK5G?_LfZIPHX0v)G**pjH!<S
zC&rVXkK{jOJmCJr at c~eS!QXQ$R0Dk3L9{sC$8;rtoEMPvjNe*o0g%r^GsG45>%9te
zf}M7gDT2~TMz6}z66AMiN^pEEY+-uO?2`a*>JcZLN7b1RB{N^4tpy^278u24-~<%R
zm=eh;gHSiIEZ1`yN(xhk^4RYuG^5GD0gfI{kd*T*Oa=^sP?)ydS=+~IIO$miHqh-t
zB#2CB&vyxO!-ACGfGE%l>nUg`eV&8J!FE13N$VNaE>SZ4?e}0&=~~!v7b>xroln#@
z0I^Ep91mhk78uf5X0%mbW}|z7%1k+a`V&MyZyG9gDVqoc2B0c%m<E5$5Ik<%dfZkU
zks$RQP}eZwXs~CtEZ-IddGh8O9ZLELbgL=Z7`Xdzah+&B_-6nFJd{xgW1v44ZCK1A
zSsYX}yqDW0^I)9TY_;LbeA`T7JfFPr at 577;$zDy4&^S+%I8F08K4CLCovFGV0m)G^
zR<s*1l``_gYwu0*95z#+H1Gps^NPDXsG7_V0Z?op)#yKi1YZEK8`qQ>9&8ZBN`yPi
zFE*iLO6zwV27{neM&CKu^Hnj3%apN=XNHF at u>g89>Hfz40WB-As!baQwo{me^o**+
zKrOfSNpOz45R~H&JG&LStcL}GamfR at nQKre&F}Y(i6&#c%Pa4(QR&}ZcC>j#BMy`y
z^ghS%J?ewHQ<61A#W;0(4Uhcma_-_+ny~RANZ27<f4zPf*?rOtwWa$OfO`KsB~8d*
zT-=0KXVC60zQ3M_v$F}MT_{IN*sK5k*7YhR$`KK?KU5VKW+YJ(p$b;wXcZ-?snpF=
z at zPB;(6rHmnS`2`SukV~*z_tfeOIjFMV*|?R~7G#4>bu|I&D(a>b?umjPR&8DeegA
z_IcT)1Gy|)Nr#R1=lr)t3}4N;X&SH*hv!TB$G1QVlsE$AiDxkf3GL~}I5qh5Zx|Sc
zHSa%=q6tOT@*UaV43LZH-*mtq3`D&^G7pnrMxVRxkfqOq+i3c!Xu~F1r at I@k5)gj~
z%43-4QMSK)^IpU+w*)^7T(uH%XRdr>KiL!EntTESF#ke_hm%SV+f6m>r*ye{#QWE5
zrPlCb{weRPdl5#I?oJ)nOh}I4)<Bck%;Dx;fljR4rlTAVp%S)<gd;rJu4I~GN|iFP
z9-Pt4G^(RaVmDp-O*4`zt3rT2vTn}<qr>#AX}yU(5#}sHL0Gmc0yoh=8$f7;2{)g^
zha9kC5(?33L6G0`zC;xOML*7p;~wWIV<FUrrNg}(xWpKhJT9GRg|BJGu(1Rn68T2y
zgg<7%(>~B`2pf5f$~Jd=X#<lt2^py1>O%ryR~+tBsnoA3wPYq;;ap at QuW#8M_hTo{
z0|v#RrVVvFjZ?evs05g$@ftA2YNY0YC1u4=^lP|zhqP(3T((bbNXi47GC;l47E{Nv
ze%t!JgFdZ**}#Q(U#sdVp*|gvC1e`h_(JZN|8~olmT9Hal$toUDbI4k(U|WiPe25j
zgX#ZqZ0jqWy3@$S+!&So#+dXMUeh2?89QG_xNNIo|NNr}GO#+HtO3hQjbtW45ZLte
z|J6_|#i5e{KTK2qZ$vW?*ZSBTUNCif>5YbkCZk3z+E!{Wj(!?ylgPA07g?&MZq{Jb
zVb_^Kg0iIL0#XKkNN%BqJCsXCPg%Yk&sF4np1qVsu+STrWgkOdnyFn7LGpkU7So9)
zI<#Uc%eqhk)IQ8n$Xyxr+F_}C@#&mlt*COtB|8_((@*K)z#}VSterO^TJa0*QRHub
zRYD>iHG-J{IU2C?>knzI^ZJuxtSiEcbsX80OdoE%GbknETjenQw6VA<jYth3SI|6{
zj5XNvP<Q(-T5TqVO#N`bc6Nr}L8R1)7cr_6KK}19lOZ)l=pu00o*o*REo>4yWK&uB
zshJ5Oh)6m0C%oGI at Qhvz*vz%r?J1Nd=Ye*{Khkcd<*hMW$mj6h9N2Owk7nb(eeUc~
zYh!o~;Bp+o)-=T?yVQfxjM;5bM$i_Z3#e901eR`HH<%zK(VUpFGhs9*172MfPPktB
z62Ik9);AHse&a?647`nApS)#b3#W;zR~$s%+#v*vuz0J~eN|H|VBl0b=X{D2xxp2}
z51$>kjPfY_sCyyAsjL7gj3J#O+SxAqlwZNJ<`Uayt?z*-L>nS!aLu-1gE5h)nFaZ-
zY4DUMeMU<%p{eXM=x`)BeE(=ueH|<RD$)+Xc%g5Vv+y6KgnI>uW^dI}XBmlK;{1Hk
zBx^1byH`DvVu}DMK-RxY4mf2k>$a4(VkEnx&~$wAb`+UICIj|?$r{`Jz&GZ?C01D*
zppOx{S!kD#Z3=*Fhk9(y%&&&@2=f!-|8YsLEURt!W^HHR+1l`aHkT(#ur?#ETX<d<
zX~Dm4*X;9>fdsR+Rwa?V#spA7`hLDH`BV*g6Bj7rW?Iw)O#J-Eag5ph4t!0M{WnaI
z*W<^RPP at pc8K!Bz(poDRYZ7cJ)8Bh%OD4#&2M6o^n<?U0K)A$r?HkrpIfLUzIJ=Qt
zOqEI+_5{_nO>5?fT>(Ia`4)MU*13hmt<I7>Urc at VA6mg1cggYEn3udT?mOi&r&`_v
z-}A)grheB|rH-j&;qw^AbA(WdjMbZLK<RQleFo;fbr<!ab*T*z9 at J;2>VD`ulV|1l
zywCH`^JmA at p-?l>J~h!!dku*F)lA(h4CEJJC|jcwwEFH-o;ZpGcc{}2M3 at KX3647d
zl)_2D+AosgU;>R$uPc<3SRCb5s1d>cZ~~~TRK4ZFtZG at m!)oLZ&(@lz(tME}fk&Y?
z^<yFS#s}37)NUJSyh=AtuEjV?r{}j3R5wn-jBM=n7M^Lr-aeSl!li{R5>35{Q~E07
z at r+fm56_%jt-uWv&qk2X at iONUnwsc|(>U*!oE- at VZ&#>^JDzs?xaXQSR<gk&Q-`oh
zuw8)|Tzn>C^xt$`rp8Te_fp(cL5*%?=O~0~f at G3w&%qGb^BEo)WYD5i{HW6~&0`k9
zVS+qhSS8s8>is#p+rxDlZuQ|nw2Zz?POSk-bSGMcWcA5Rh1=PV4 at Mx<lt{Oo{;)U8
z8#mTA{(Dk-XfIQv=nvw4wTLI7LIVLkBCs6R{p{;<>KSwm_yRS;HPJd&D06{X5vB{m
zSz)OIOHRgbC3v6ZDpKhdqDQ>i0BKc9wP1=bduU?y at S1c{RO(hd5}=KXc8x*3fL0Oi
z*8c>6Zfue$oGCWY;>}s3aHu{HM2lrBq3;#d_(6C3;D at PQP6V+Ocr#ieK&D#-W=NXl
z_y&lBQJ-9iu4JRE>N{cCFjJYZl;wFd$7te57FrV9U)DjiHt?8GStw(hkt<rtekZj&
zgSeTM#-pumOo`fB83&h&+WS(Br9DEeM}I$15CD22sIH&8>Z+gf!XH+r4tN~@@!rDl
z-PxeR2<+F;a9boCWSwK`AO7a4iMgCnX%rB7E?>YvF;sL*1ovp3ul~DXP3Xh)B+W()
zmiid&TgBD08gXw{8Ix$Ei=3TcnA6E22zIFrCi4$-6a4#iD9Gpo*iTMD9}fKozho8*
z4KIRQ4HVG$t&^2#1<w5)|Fn6HU;+L<@QwgPxw}s}oWv8E+g|Y><h~y9dPGo-(YM9$
znvjv(b?TJisVxBDHvY$@_x7y5Fl~NJyUsWkK;jHj?0>8loG4OdVm_m_Ceee&hgWv?
zSl&IX>tgid{g>c{28cn0GDMx=6jIKp<X>M|^&g>h4asXi4P#l{ka2%Q`m(+3j^~a!
z_y_g0N at d5IV_!*Qxoe#GO!gj-JgRu$^wmFG|9%zn3uB{KD907JYC(ze!48)I66%t+
z&AFT`i1?T-T?SfqMQx^fo;F@`Pbhv(cd^x^L?Eb=6PSQV&S{f0v!B-Zi9-U=6KdKG
zOqVMPwi>zsdmGf$rPPqO>7DJ6vXjU7tU#YB%6%_1YreO_U~{ApOF8AVa0bfQMI;U$
zTbNLsw#lSbo1op0VomaOk$Z41^CPA~D+z77k<@8pimeo44T(+-uFi2YHm_0*;|!)h
zM#x<_Twg3RUAUh#+6tQaGdIK&hB<^e9k<gZ-=Bj9AL$p^L)TJB0f*23Zh!Ou=q!|f
z<QtyYCnHKsi7jL%S>7R$wG7(G!_>22Cj4$l_=?*|$vyYP2XP?io{FT-idhAo>n_}B
zUL?~Sx28jT8E6^5eD>$h7f*Ax57+AmD7d+Ljo`i$+;S1+__lUx2?ur7;DwxP6&V~g
ziY($?<CW5&>CCLrWh!<IUsN+mH!@zU7Q^3DMJFE+Ue#6*p6RCWT+g}Q@~*vG7l(uj
z1+azIm~7%7^_8~?YZU{F1#PFD5<HlZ?VHr;FaUd6oCx12=oPA5o^>-x)oZodXj$o~
z$Yw9hyo|`Aix^tKeR5B at qF6`w2P&Vz`#avxoFp+&bWCl;RWE05F)v`b{`{`X$$gey
zai4Wpb+F09!U&mduRn=gfc)7zB8aU=YsaToz4 at K<kD9{BZEb1Gk8~fsBT0)4kO at K6
zN-w`<veuRP!F&ykQTU214PjdO6eUE<K4i+lAniw`3ocG6Qi^8xE*XWmTZAWkaYd+I
z8)6DKG?O2!r1{9NmT^dWTw~lFuxcT|C{i9=7cwXYQsEyE*mqenJD=)!p_+udCgbP&
zF=mQ^nm&M?V(sbW%Y0m~(bLtt`-cX3V8wM-P`g82&OxmRs|Aa_g7#QU74Rfo`OsO$
z|K;1ipgxTndO_IIuh01CHmm;$`+58H>UHzmbr0J8vDSi4oKjA5Z4R=Y=~47I_0c&9
z+QmPzr1KTNkHKH;E}kv)4f=TMWk?$b&aoo5*aE}4ud(19N$T80-ob at bF(YqFhn4Z`
zF})NG(zD}|B=w!HD5%~elhdL at A2Q@CMAR#QLKGJaq$Tuh2;``sRhat|t`;~;XQsRy
z_-XjIcZosE!?cFUqVRW$Ev*dDR^*2|YZ?<(@B)7a+YR5f`nf>GjUGoXEm6Fhby51Z
z#E`bl8pBhWvah-H2xWN9^8-?bi#&GUCSYHgADUxoCW?5{sN- at GO4p96Anw=i788L~
zZPhKJVb at 0cq8y4PN@vhesOfqS_(W6tNyAVIpzNLsk}C7*-gfSCdAQPb{3m`vp$E at T
zcd5Q~!h=~m>^GmTEi&hSmr#Crl-NtE|Llz#04_ay+l@@mvN9=j8cXt&_F*9nBBe%K
z-HzA)<4oS%(q&PPElnV`FBmYmN$D38Y5-hLb4?2agw%P`ievOzHtME;M|TRDvTiYG
zaarVShK%A8MNH;>H^@fbB)<QK_bRx$oO(<HfrS6#gLAj7OR%JXnCMY;pO0R8WppM0
zU+QFg)V5&v0*)_>9&e}K5)h6kLqOyptj{s+oje*?|CJ7-RyKN&5RZA-a7o&{v7W!}
zrEa1$Tqs3OecH`cJ?<Y(Wj%;G#zf>EMgz04x%uvL^Cbj6rv7-QQy!5?_r<bJj0^9M
zfS at CROTy^y#y;iY7voo()V#Zh&;r}yBJ#S{<)N4G+p}%p=;%zBHs({U=?i)Xs}#U>
zWyMFNYbY!AR|Oba58Bgq9mOli?6zV=JaT4zcd7n!#Lz^3Px at oHx_uz_``CM1Q{lC3
zKNAafiR&}b8p9c0$QvNKnB<Uy!Y|im5H$uVQeZ^>)-E<}1A`Qu+1xDKnnn3b3cI(n
zojGZ*?1GQL8GSS}4XLkcuOb+`B|O+ at U)ra1Jsyzp{uW<pHJmC~WD-r4Uh#Cax>G(A
z=vY{T(<%pNXRIFF(MO*0Trrd`QlgLRB#2Y3Ha*m#)U+MX<I2K?S-F#tU>1Q{nmt0s
zrG>iO{N2Gg8nu49E9AGd at 9zq>k#}t&&crw&fv1Yj8#lY|ie-Hm?kz at 9WlY#B4X0e;
z5VyisJWwy2HM{sFhC3SuQ&aPCFs4r>^nga?--wLF#j-gm4Op)vEYWO#D1W%*{!-%F
z?NI64GEIgYBa!narl79JOEL&a4~7r;z72oX_iPH-g73(8Hmlv+Eis};fXLC;Ti0wd
zxj$V&Acn&}eOJ!!t2%2l1mM&<8=nsJ1Z&wUK?mszgFoM(W5oTy>jm~)9g#n><I24_
z4cSqL`J1@!Ca47WllB6&qUJBP<h!-8iWWcdD8#h?cXi5)>m8R{+m`7`KFRtCK}uyR
zafvm%jteIXo~JS10&Cd*_^|s-Yj=fVljbcOpyw?yg$2+Ie(B3FU|6Cy7E0(NH1LOY
zoAUIW%`a$VWF*G(t&1 at QhTEkPY&I(BweBz#eqlE-)1=Z??K!t&U&BlOBC_jXN&+4+
zu5hiQK+7=!Y-?_gD~X;4BGcd1qNAO+U_WMKWXu?ob)SIO2IYW6C<kZ9xI$Ehi5 at 6I
zLMQOsUh(Z}sv7L5NuEA&2x%S}mSyw9zk9LB4$GIsI})^?eaJIu1hdap9Y1Updj(p$
zYIb#Va{JfP<5;-&ga069kvlH~9_&lbgI7qXA=eDG(p+Gb1jSlqeSx at tt6$PWSAGy)
zTojwrv5saH)OF6%VmTklMo<<)Eb;GbM;Od#)w71w0zmZR5e&N6l=@;8=k4P6j79T}
zB}>rt<Z+56Tl4%!xq2hS*Nb_LNnxI0B8jx?m^RmtTIl9U^uft)l;y~{No{PvIfsmH
zZ;kj>*X%vy*QgU1YYG?Z3k)hhFoy~1Lfx)zPY)kyeY_)8y6Z-Z^_!)Omdkgn<P0N%
zbqCdxqc3fd#Ef1mYFE&$=;}kw<to@@_w_Bk!UqI5!ft2vEgTHvi!mxXpsOsizdu6X
z(<6X>XM{Og4r01N^d~+9b2?RC2Aa2EO&Ht at vCLs%#1pI!PsadN++ZnQMlv5}NpoY1
z3fh0kn`%sv<0S<&gd^kfiFzVfB*0CZMZ0_FZOvcpzR05_oIpM#Q^lTgOPvB-AI17I
zcin;}o~Ii}1ut3m at _gvcU=_nFpGT<q1ehg=%v2U-l8<E37KZ7o<7=cm1U*Vu7!-J<
zu2c*+jq&k04`Dwibai^PAn;Si(k3$B7&Y4+V1LZW!|%`B=Ob^_YShE{(@1hnew?T7
z&r{vkUR4ug3}cm!Z-(zEgzP$Xa6qc9ft(Q<AW{VuY49g;F*-u=7rFI70uRagO~AV@
zO1DW~1>M#$|MjuYlKw?f^3n?xNQjBJ#^9NGE+)*zXa9%2<@P&COQI6D$(@bS-Z3hd
z2`ZMDoA4Zzv|-3JAg)qOfbB(7)pFl*`pEX at xL9SMuIQBk5q*X>Kx5Ij+huU at zcC91
zhIzAVEpN?5wpOZiMUw)*ma|i^6j6nCFT7{v0Mazzg4Q`z-5rwI1*6Pc6XX}gr91{B
z{b=4gEfXLWxt&mcc5a4cyoR-S&`oXIAE%ab4^#bj=ic#Hw4g2Ya*CA*Q`c%8HF0ry
z1Zr`8VwJ0v=<f)Ks61U2Xq)nQNZ3BKEL`0WR<;ccya`Z~?IJMo99g2}d_Vgu{yD4A
z8W+ss4ZaTTL?bNUiJf4a;&;sNg4W`x)sIX7zn9i`Wxjd)dCk~9K0pggH-!Kw!z96*
zb*@41!1<>g at MqO%euX@)@z+}Jry!!x=Vyz6Ib6XA@<cuD5xa~Qn&v$^JY|SJ)dS9|
z7Cg<sDODni;JeLv4`w!0#|xLJ4}HI>h-m;M2AKT~NezY(TUqQRl|d~f317dScF+z}
z8fsPJ69Px<?e|WT1){gsk!|NAr+{^NNzjhCqGR!WZMTG5iQ>MqSiK-08Pf7H$OC>6
z4d~-bQzK3hdr~tsO8Q0vk<<(o+QeeA_MWB4ooq6SoMpDM8UXf{)6!vgZ3jty_n!En
zv2Ce`77A$rNT0~KP2xmOc(rFTC|D^+^kzxsKom%`@jAmw-U=4M`xscMQ42&eEkM*^
zH2t6g6vo~b#Q>6q%B1M9Iwpfg26Qdpm at gV3@uSxbz#c)(51JjN<Ty7k0oc-+9+2q>
zJg3=ht)2#OA!3Ue&`k_=ZK04;K-9kh_GZRq5SL+qQ_=v1&o5nrU0(J#tjOH8m)>7G
zY`9fBa(2{hx3PpB5oyT20bU?H;$9bDL;NK54?Np-S!vCPqRu6hEkq5=HVAOg73Wx#
zkC$6xZU{daKp at G8^7G}vX-a07&B|ABVUWVi=X0c}3sPP0H)K0XpWxgN(hm$3W)9M4
z3&IQ=c1!(&ias#X-f7ri8*4>l!b3%-ZaozQuVxk+X%l1DzUx47XomJw=wOid|Cn+M
zy9+TjHhtWnW9<dxJiUc0ft`FYBRv<_*dtBGtmO}nhXLXgeNv@)Kuo}VP)j614Oy6n
z?6g|K|4B#x&s+J1-opR at vSj)bNSGrpjER`r*||-fL(PW4%(snt83^*G#kINVOI9uL
z;Tr>#Y+Kov8~-Sd62LGN;rEJ!B`5bd$I!1l at Bgz%19>|GJ>f<S5+Nk}OZ#m=TW9^L
zzF8-3!%z(09vx*)R0!7#vXD69*Ej4P5eZ_illWfa_VT^*zhhIKu<>a`!k-SFC>m)l
ze3p!eh;{xRWHbJ410y&zj9UlS&X(${Jv-RjI18^3{{$H-z76B<$Gon at P0KWMm;Sn|
z_T%pe&^QT$1TVoWTGjXG_XfGu&p24C!~}kPf~3=+xK~R#iqc(L+;bcmyhpT`o33!0
z%%%_Ja1LsSx4sv~-9vbYh4r5#SPsJQAG%svZ)zj6sU^@7NqIDt^(bL8QlYIh at 8uS&
zRFM7doEmWqEWaVc#Aw+L-WQh^A%ryM{ZuG%ax;-zt3<fd+_s&6 at gZw&L#y1YzK<*v
z%Cu9wneK-!V}eJp)AAzDK6Fb|H!gJr9J6lmGwKmbgvph8Uzm%%TfWQBY7+1Bz?^|5
ze=xjpZ%Dxch(A96F{1E9jHm at gb43!&(%yN1L%}BC0R^!uV>Ri|17YUnX$)@rW?B|x
z!*3tY#_-CXGU4n}A;}<eu{bcij16v=zdZnsfq|^$hkVXnY4n5HC2zd7B-hOwPviNQ
z8lO_uHxp|swnP*W=B(Mi>vAlhJ+4H`a`!Vn4xaV&3^e3y(LT?>N2jAkw_$euX8{Vo
z7LO<MS$&?3*jKwXyjFTa^76%I!EyfisU%&R^|lvhGXCiA7p3<Vaw_jB`8?RekO_Y9
zqTP!Wq>23z2oKbd?n4orFWHy?_vaB{8DYRq%b(?ps%j3opyd(*8?i8A-E7<{vS2}0
zbbP7m)3^vwCDKFrvja5!2u^G at v8!ZM)p$$mj7&K+U6!RJgEl$B{)2J70r(Ui((O^>
zoGS9EwP|paNsJghq10W0J#Hjum04V26cQV_Ixch5#tUP=QdGUUXOA%S67ep+ctDFx
zU({=|&FevC`(@3hFcBLEeNa<6;RD_A;HIU{f45g-FylHZ*>}ccY6Hy5iV6!oYs}?h
z1j^Nfqg@<7A>ea5WN48eEyM1&=KXL1QN7!+d_`<aDHm{sh5TJ=3i$z&$Tox{g#Mqf
zW1tpWX+>gaR;Gn*$3W~EI&J{mIG$#cs8hwT{%Y~CQ3aP15?~^l+Q4Fb47_nNxG%D3
zrW#}`o;(s_Thq|Bxs;=kI}6cwroM{BdLUDW``+~kzc$XcJ(D<YS>wXU(h~wgQxvCy
zWGW0Xftf*+%1Ojk3_RW at aaf#)n|Q=)J6rDtS;zDSxwELPE<oeS5{#YP1R{bpj%^3w
z4V`*UWjV0B>zQWDl+YofM!tTgM1$?S`EfqbB@=+zgtD`+UR7 at hBby5P<u^RT&a*#X
zUXNq>@66|xhXrg$f6xWZTT!Rdy<$VrkVe`AGkpVURs&oNj?mdPOWLekV2&O{+nXYf
z7F$P({VtdJt`QhPvz~0AyyaNzdW03etzXsV$y{QqS|@_7%tfH*BM#d9E)aUs$ZyNw
zn`aWvXlw(Df;6IZnZ%_de2GoJG;tkCEaZim<!*LykG!A7Mb>`k3fgR3W7n__$>AMl
zSefkha(!=53QL2 at cU(3nE%+emB{UAfts>>l^E26;_j}){1oLKRB!UDK4%S)uj!v1+
zbmEwe&;+Q%>U8WLPid6_Hvc6b7V5Q?N at R!v+aXV_ at X=?cctn0JfcX~^HH99*5<UK8
zcy3FC6)VZxb$L)8w~KF)y!w+P21%1p$I9!Lhduz+M*!aiBl57hb)+Oy*6Hl5WJJKJ
zm(|&w2e~EKFf7I7RxEKrE*Sx+-Cq>y1#B*@I%*UNBl8&ofDC at 6^GJl0=qnHaB0L~O
zn%RwkNp$|PtSlYK;bR^SMVm<l`&lhB<4LH*xG0;$9$E=5W3o$Gqb%Q05su8@^@JUx
z_;G5Ys8 at 3v5Zf4;s$kabnru}w*n1!Pu`2}PvAC%^8{BS5dxBjMA+O`j90(c*I_p9+
zR_ZPFf2<&6sFW?w;y#3!a&SxCMpw2wsq(vU&I;8!f8FID`N-H;i~Cl**r5IU{LMfH
zcVRzgD5a%S5<cA#SXC at 6r56GU9>q6Qa%yo(p8lc0Wv#2k+ke8 at CJH{OaKet?%zlx~
z6Y!jguL=L?>>(LOAZuy|1-jc~?D_G&jr(a2e~;F)enBijW+O_QZOmQgWN*}%Aq&LC
zw<H=XZ|M1?WNPRVww=|J)aYtD%)oo?g~nyu*HFIm3)plN->|KJ!Bwemr(I$e)=EX6
zSbkwbfL6v)l1iPO at 5R~;XCt)pYaK4md1FWZv#pN4-k|>exoA=qW&;|Z<atX!(|6&h
z7);%!PZ9X^h^1Www2?T%F~z=7!7Z;cJ^5?unXx^{q#f=1ysy-&C5ONZ|M0N^ycmwt
z2kj22oYXCBnfmITV2RA0$soCFMXvI%@k*Wi&TCg{J`<&cc1|Vl>cs~L7ixwW&U;nG
z+HJBiPUMJkP at xP0-zDQ7XrwFPXsCC`$nV><>9hFPbODy*4pau>-Q;hz6IKoo7e+%R
zBC}M^41`drYd*XrPo=ol>&(@S07~dnuC3UJZr&a2RXXv3riW-q+${*yWb$Wvja^ZY
z%Y#fK2E~^tuTiE-{Zc#^r0}{ym+RJXw?ue<#e~K%!dewF+MrK#j2&h*zZ+vH>HiG8
z#|JN^Ks?q$>{8#pO`#n(^!Wfq*$WcV6*aX)1nz5IwniN-U4A%^)RckiIOZvX-ewI?
zfW>)0*O~D&|3*$y>=0E9;dnsv-dXS<92iKZ#ApE1=8y?0^=8~qc_?6c89q=ge|eZA
z5^-*~V-0arfQ^kByNf4-TXf^Q3o^H at w)`SH21#cK3=87%kpteSF6APx_~1#*f`2^w
z*Ghd{DMDuX!7sTw6{t<(&t;;wh9LmEy0HDEBT6_iew?@D4|QeD;`7xeT%@N{J!y<T
zula5v-tN3$EHx?gA#mBkKs#W;!vB8{?UAVW%r{>DCWZ>y%UK70ii{9tnW11HKoB*~
z#g~<=q##KiMmSJB(S=$HvL8Z;>c*`7fv{<@AwscLBjRij!|krD*O=LB_A at X8gF`R@
z7ERsHTTbX0`yMUe1!9gkixrV#gafqn>QSfEJ#E6dk;cUIDKltmAV)#C(K|y#_- at v&
zL)_3*SZhZIrgL!T8vv_yag3^|CV4RI-PX$%21<r1d4al)Q7AD9KuPuy2J8V669&)W
z`X5r0Kojt2Z=cKrvZOqFr<BQ$X$TQem<ze5!H2$rkxyEJPR1ltGh2yh8*V6gGn|pE
zREuJ|<j0!Ro}ca&QJzqcTM_8{dnu4Y4#@dT36aoiH6ypb5&o&Ff9;}a+~pV-9gv!d
zQ{R26p;3sB1gq#a%Yg3 at AIG~c`;i4e&L(7BAD&!)j`%fZsQ1o=hHFv|V!3XR&EU3l
z$O_}pdqS7KDV*8hfJFB_wz+86kGa_0Vrdj8U7 at z6Z%)6Rx7^x8n-qL_e6)r%b1k+f
zaD7({C(NPpzk{*C@=*Xgju<<SxA0TFn3J)(-dQ9?b at sZr=3SJ9$vJP%^^lquEO7ZD
zHXGhfD!aJPx at RNXSUzKJJ*^iB?S6)AEDmVK4Oh9tUsrWwY|@5=H0B85L4K<J`DU}9
zAu7X{<gmUPONkbn at rT#-LRU;GZFOQ78l;3fCLiLB%WnN7YU4v~wPRiQ2tryh3?{uC
z;j~?PdUe9^fT#V70b(-34`>y{4J*WRKIc<1e#)PE|3ERLBoMinO2TqBnjd9r-r?;<
zQm!G0p}HFxI at iWU4IJuT`mUX=RwUicubEZ!G&Yg50K#rsXOUNkbR!fc9(nW<p(8|&
zYS9Guq<=!5QB)xEIze=X+~8<`y+F(m_ebeXKioK~DZGfZ7zuiPuXqDI<KOGfpq?sX
z%Lqah#HwzM<0+a|X#|0M##$zPTEYaon?}!S<t_M0;x$DjY%9hOLsTAujRo<)b#g54
zn&NT*S4gk2;LUQ^gavBbe6R}Tf6zLV#Y_S9FtxXRsc4&MxzxNHPD8<g$ET=CkDU!q
znRL)b$Ho^r45}DZu51ACjpK1ZSxV?sWeY+jwt3g51C{kx(iDabanX!qQU<UGx+S>n
zgJHX5lYEEFcu}pO!syGsJ?3fs9ui}A(ulZ+DSY&NDviYvCJ?-LEx>TFc3jA6Njt1p
z14P4Ty?SLe%IT3FtxyAO`lZcwZJPK6oj2Dp_t>8fk@=VYsw;}t3cA=$f9Fpw7l~$%
zuxDw-8Um=bQvqDr(36zK`&VC6%=Uzk$Rg$19r1#4-<tPFeCFw%8cXOJ<?>AcXhjzJ
z|7O}k4Pt>k^XQa1F$nIsl3))d<yeyaM?5*`;8B>>*j3Lq&1_k>>6I96IzFJsF<}-j
zu}vC~4t43ep*ev&Ia~LBiPK?XkgB3;K%-xAyq+LDzTvfJ+AulBX(y1 at lqDFS!*g5K
zc^Mf<o}F;W)U`k$0I8G8VV4-J28NffT$VEQ<}TcFGJVQM3y%mgaUJ;Ett92$mo9VA
zFv_Y(efNmB$kOR_lR~bb=v{GPiT%(2kgn5e>3zm!71Btvc!4*aZcGw2#S-M56i;U^
z3Y;mZ^aI4UrRwX{R?30+o3!%d*!uw+kP&lXV8?y!lNu}G)q^-1)neB8fFpl`nSf86
zs10lIO7<#$N18n-c{)67p7Yw)LEw#+c&<aZ0i;|3#~ef}f?Qg at 0N)$$l>iiX<+8e9
z6Qo3A2Z3md-yPG at l&Qxz#yE`lZH5&#!SKpH#AH&{0Dd?sOQz1a{3HI!dJG at E^P0dG
zb)b=sFs?)yZJ^(@a54P=!So}bf$|+t4vqwO-0A1ky9ZkfAO)6Rnj3B~*L20Y-ec1S
zlUV~-EcAvB53*MaoV?55w=54;)FMu-c)gG3%qJB&M(8hj!F>~2vczT_O7PK>ay9~@
zNy_mn{UtS7p<FE#FR&WA+i(ppRgj5eCZ+?!`vC?SqTNy*8#X^H0Fo!QP&`30-DNw-
z`QxRF0Z7IgSk+II=5id*yt}}s4H*yq;7Bb57X$-{Yqb_FG|HOFn#ue<$#=rK at lvZ+
ze<E+>Yc%6A`p@^IquI7}Gdi>83dD{i<}}FJ6l#T_R{k5VQKCNtoB66qwERwf)33|$
zi2bE3Q+m7^?0YkHse3h+inqvN&Q@<MY~gTRmoP|k#aB$LMl{n%PLinVLw>{rjO9km
z6A-f=Qi$pDbC1L;B}3zZu0$AxTz8IDseEy>Xai5+N$LTL-R=}Ez!!`kLn;9DKY5zu
zi~8La=-u&?L#&QT_hb+4?NZ){m!w`y;|3D`(%6J9h7_nb&8sabhFInlW(%&qz9&Zw
z$>f1-bvjvUT)m;P21P=i3`*FRKPv78Nftgfo6Vsrb7sPf#(yo}<hU3M%94xH9obx_
zG5N>w_3c4nbVK%mVdl7zo9oDEp2q^V0ej!Fh;>axJM?=@-Z&5yuJ#!>=*g8GxRB4K
zR0oP5?ifWzllkPbI#j<>lIM2O34al0aCz)$Hq=kT82a7p6o)f_Dl>J_QBUtS{H<y3
zRj|gE0y<OAjgN1VYs3Gq2BD5r!{~a&d^$=VO%YuE+n7a*$<>`W3cdOaBG}t&rDHa_
zxQ2r0nW6C+H0-_wkiZQ!5z5NLzw#??{jaDOY|ju7fwGCGy~DYQIa?NokyPi7Eiy7}
zBb4f@%Ru!(rln}r at z8H1?snH5CA(jJ+38ofRNOP>eC`s|GBUb{4D;7Ab$diRmI>)b
zw)53AHygP>Bk<W~Ur0WMxSeLW7@{@viamC`wh*EW|90E{V<0i=D<SPwR(<7FQ}8kl
zTe@>GbG2W^>F;K+=kJ>dPk6KY at MwkXJV>6U8Z<Nv4#<PskyB_0m5NoFRREKRL}LQi
z%lT>Slhn4SQ(H%Vqj~5j$GC}ZuDW!_Gf>H~AGPcD$J01$^Y`WlprZ=YGRl0{^iR7A
zjc+M5LjFAQ=rJ#Db$3gWTZ7N?St^zw7aEZsQU}jD)X%VcWcTjJHYatLb=w#r&f~S$
z_3phCi4Wq<`dleju)A5K7p~3^r#`_f8XTMGa+2t9cLsh}aucq1;TP{fLb;{qeY$*+
zFPXw&Yp~xUxYk<DOvGu2TOfDTi1mq$lO#MvxIGj3D{ntOSm(y96y=p>NIec!pC~X=
zz?k at To>bCLSJ0{fr%2kw0^is&2^?H?lR}bO$DGf7@*B=j)23&CYQ>5(HX)~tC|A`z
zf;6{Ae>o|bLG7F|NjmC#edUkXMoUjMXGHmUOdPnqk=t4bPhGX~zrSgt{h+GEQ>aKt
zbtLK+do*W1=0%phopb!F-E<uR5q`&^1=imG4Vjsd`6*&_Q~ev$K at B}cL at qA~4KQyx
zWk(s7(At~dDK`Cr+461w5(f6PJssr7QA#&J+riAJ<^vqak|U;qAjvRFnRsG<EaXt2
z?ms(^(nss|LlJJ*8k@^RGt)Bl>1^-p^6a3MzM{sfJBgu36ORDwk>NP=B$U?bYNFZJ
zwJWWU_kO;d=$KgmW^wDSl7N_WDI@&z+V#vGhZqj6kgPN87ktRXD^K?DUYM}bL{vt)
z{dMeA^@0HOiCZ|b5}&xa0__O*)kbvGwe??=5#nda<4j^*DZSjm?Uhq#(K`22Q<M+E
zTlwC91s?G;pNJ$LSkyyMY+ZubM7t}c?F=&^Pm>n{!C{o)N}s^6q4iv!&!|{K!ZPUB
z^P%u?`WNh6kLXELVC?Ezu-bysG*kxYEtA?<=rSG0!12)7v3QJU1vw|15Z`)_np(fH
zCCiyH&FTkXo~ORJDv*(E)_95a#r^0FT6OlH&<g6BAUHQaU~2Y);`p>{-M~xWI>!?a
z5+}r+o6WS1Kl^qSZ;z7AyRNA5VL!}14U7t=J3x*+e=LKe>lilQQp4ziMzshA2hXx`
zjGXq15kX-qjiKL6WQ at KRnHA}eYwmBOlL}*gd~}i$jw1qxWaeG%F{uV4xLLx;&~3%+
zi806`i(7`KY!mxBaM)pBr;}Zlr{fqR$)VL@!Eshh(n0=bMIQt}u4TF&S7C?KHqUmN
zmsx|*LAF+lI^8s}L!0l<QK*{3%(8bsbS_0y33jBlh#dYTqDL%(xdm%UGQ)<3zwjkb
zf1ij|Vs~nOzIdTx{rsV$dB`Z6m~Ysz*MXg-r<guQpH})_ub*6p>1<D1fonaGn$`4{
ztA|q;xZyVx4LA(`>b8VY2FtR=n0THT5^cgJ`(*~+LXMaB?3 at 8?CKZ~!pfI+Fy}y0q
z7Y7ul at ejX|&Ha-8)Dm(XcRcL+nIIWg1-E9Bu)oFg(5gxNt{amwxm{MLigu-Y+S{*H
z&+mYB=U?za_lY|H5|A!Z1e<AORm{}a?Cd2JGbO!%U5UpQ`g*hAOZ#?EEGwAP-o|Ld
zoh)nw!qqT6Ih|1&rOCwC-w!>&T=icNW%ef3C4s_|-6q{%1>RD~claK~wv`WpK`0L=
z6cWH7ZAj=YF)KS&Nf5b;X$2)M0Iapv3lzCO%!GY2U_LpxM#uJ&kGnnOhe5%B-tQ#*
zjMA5L2Zk0j#%}s0t;azznP-(d!I_v)YviBrM*15*%z74t$1!NJ?3?RH)^kZw_Z4YG
zO5E^s at rdcuh!ZZ#&=60m{zibP)Th1<#*F3W3`ZBM*mvtCc!PnV at 2>>ZNUkL}!)XKk
zok?o`SxM^34a}47?^Jt12}IqWg~L#UP1E?@I^dE_yTF85Ms6DnMyu9|`$w}>i~8aW
zx{R-3+y%^1;)!s1%M<}Qj?<M?f)qeO(^tfnTZ;FG7 at 0kL=lO<$UQ+=2gv86_NVy9$
z(Id+6rRWZjG}<gX<0zKVOEOEATv>DLCgfNtzr^NTFuuKmqel-}iMSgp0ZfKa_YrqQ
z>P(FnsO&vdG(uB`i9*xouV}sIY+ZWC7%^7g=XqswB~+1;h2 at i*Wtr7##i)iidN&b;
zBk{tlvnLinz_*=-jPc&LRnNu;HYz0fN<N*>fThnMa+d#`F*=Y}Zn63(@%paW%PR7u
zrsKpZ5x56Jbv3*etL6rASXV>2jb7)?a(=_Cwn-WK_RWASqqPsf&gIcsTDB931PSv2
zk#mTI%A-(HywWU!;<KW~W8YT!yh3LbQ82#d^oIGrYRvYmFBShEej#2-I^A%P4ECGe
zm+Hl-Hoa1Vj0j*%8`1^ZC-Cc<z;tqdh|ruiEEFaCi-nMdqS%;;eao=ijZR$A6eS#8
zA=oKML(jR&Y=`Xh<)S!=Hk<semMKY at +L5a4p*-u0s;9!6S=2~(CZ9vHJ^Uamwzs-h
zAo-bAXEvzV1`}#yTXf8G1J_&*2*4PC`<GBvGcW2`h%%OX{uWLSF*K4<Rgv2dgCliu
zWN4lvX4x{qh9sO~wEP?#S)8oaWN+W<cz;2e4avnet1S7wnAtV+q0b8n_bjs`GhPC=
zt!dB|z(I<_;?=pE{k+zk9OO$b26Skir*UI}x&o&u$p=na*pm^5zL2ygEQqw;jkQW^
zi<2IbiKrntY!WJo>dHbYudySBQeuE10CRNmmSmfKVzntLPzL$x at YMpHhB{oI7B%5R
z>%=-A$GQ_%DS(bpk at xU4%2bC2OA>Q`T3+ICBqQq0-m#MNKV-7Z*v}!sRru>QEi|_n
zliqwKE%=j at 4U>>)5+>Qr0H|IPq8bpNR!Gxw`s4#1*Ews%vWS)EPth4kg}1BO0HFyl
zX3;jRX+Z`sVNfe!&*Akxk at 3z;d|0urfu`{4$f-lwDrQ2&R&f5mu at nC5*pCyyDZ9^a
zK`soMs27b(79`7J2-xlqzs)_YNza*gAedIA8DrNLJCmfxfZJ&FqC|emrH<;V)JBW!
z^nO&!WK&JmGDLpJ^spe;q7(_$A3xLefkgRJTssqil882~?;g~gL730jxD{W at -W(CW
zFDG1=!2NzX2OG04RGNQBN2Y{3l|lWd8FgwC1c*1Qg(x2^**3h5`ypmAS_E$SRi2bC
zTaklQAfk_%^>wfcCFmAudu4PeT?;w(U#a8P3LhQNW@`s5G9~#a2p$LF7;eVL7?Ct0
z at X_W6LUir6k1NV@bOnTk_5y(@Hpms2L_EfR5buw?=<Qq0wRpP54=!`PO96L+8b*$Q
z<38$(BsOjSUj at Z(OF#lJ8Qbe^PN#1Rg4JTrpjsWz=-nm?ikQcNIz{N)*`V%Nd;fss
z7mO806Ea>1V|Jb$t9r$07R&jXFb(}xkub0Y+hKYzuJBT1rShbw`H4f28xO_H!6vWq
z5(<V;>%&{stY=-L_^e!*u(<QL#PW!?633;!T4_fhsbSVKr-2shfzp?2(*mBr73DQe
zU+ZG%5ifh}XFpB8LkRQ(KuTd($_DuDsBxh?t;Y?6!n|5-#5*l&L&h at AwQ4Qho5Zw!
zXib|n^pvXuHQG4!`LMe(8rs9Z_-QVxS3d92Oqn8~f at cm_=0Z(9RzD-8cB(sk)t{VJ
zuC<@^?+ee$hn~VlA%Zcm7{l|cbt6uZo$^MG%p3g83>+`+12gj>yQWh1K28&~B$Pg<
zJusUuOxar^FY->c8VXzu-7BdfBK&ByKVm>-=%<NfYDwKQ!GW=sW;mJIeH37{e^+)L
z9W6(kDAXXJo3yo6rv8g*z{^0sOX{woQ#-H2Z;y`WYYE?6%eTqmQ~)43KkU<&i~$F*
zG<i1)8|Wx}qRa9&@GVwwx<zJhNL?POS6Ms5xgr(cLGL-Ad%TTqjK=7o#=$g25G_L(
zw6%RNBYXE%E6%<)f=|!Rk52b2xCHJXl*ybf8FuhWdWr#32hj8Qjek~L06;#;JL&jR
zd2L>9?k_gNtvjd#1Zn6F#gQA}hq3{C)avb{;<!%^u5z<17{WmI)>Bl`X6!|seUxne
zUBR3WOrPXBSY)9k2S{-4`ZAYvhsS(_WJ=g)FEv#_>?%i2K+!<aR<BJ9ZTnabk210+
z5r;wxgzPHkLOo3d&u)VGLUgl2bxG|K4zmphYJDfk=Enqo>NoRlwf&;qC!0(5t?GSp
z3kAUbJ)!}CU`G}z-awM6lOZ#LzQ{wOcMWQ}hCrU$QSQ#DtSr5M(C?}A<nqSK^pbjn
z&$kePj1fiT(2%%y>FBtQ#JF)ME-O=A-d8q0pueZHwbPLeMeZG=i9+p5j#qqZ`?t5H
zpRJh(HUm+_ITAAC4VyJJb2R!igr{!|n?<;`C4-^<K|vLD?GJlLIg$Us1a^)(CsZWm
zcd3VU`uh}@k38eKZnIPyJk{q%Q?>4IXhBI5GQ(XEw01`nRgi8A<wuP(MXC{32Zh#)
z$r*R?^cxL$a!$#BPJ2_W!Z)&uno^pCvL^IdbJK3f9qR~xDXZzBNb~xA72J;vGx{8M
z^!TP#C=*ZIFZ*{E;ZXd*c%~pB^_y=!AC*!01>CVV%Q<n2l9r#wTLJOmMizONPFBzT
zl4WR)wL6=m!2EbeNNA(XsVmoY$eXa_rV2{YGyohGpVA5;gGwZBdjP91!n=F1PvcC2
zPsd1|Iat1Q$~E?W5H^+DnWKyXDdXwsuzxikIEPY!WlD0kW2Tsx83ayW|FW)uXBWC<
zFHrZNuLioHXkblIMJ0usTh7&Q|Fa7V($C>~k36RgVyM5+>8*h*D%%(Ni+j5%se__2
z+5wPk6%QjQsvk)K;ii$|RkBj)-p$j5w at E<EpdrJZyw;^6>^kRZBP60p1TWG+Vknly
z7(l9?Mk3r~CG>*`PDsHc;AUg`z`_X at diMsWPAuj$mmXzEdpad*?sb#vEnR2TXQUv)
z<vJAW^E700hc<B*lhoOn*MOA{0F@&{S_TbSsA138FK!zZ5^;t1iU;L->Vne;YMcoR
z3sBVvf=~}*fGG+8zLE7~jZXE+Nn6wZgz^*<IT}Zd5E?Ty348HO5wHUTy_`G)7Sa=@
z7&FPLpH(+qeBelS%*2^7a%u_iqrlE=TY at 3vXA`p|mMDMs>@}Hh*r87XoKEb*|C8|$
ztJ5UIU}g?xmpa}$_QFiORxc+vOc=HpB>UC>9mz!J|FvDs&Z9S_mP(%H<jyoCE*Jpk
zI^yK=5wXWnF2y>h$YZ8 at MH=sRv$`2dbhXh`Emd`J2?xd=(znD_{lj>r3G(B@@ON*u
z<LDgzNA&PYpXNm at Xi^FXi)^O3;!``qaqYP*J=7L$8{6A8L#!9YVk#oYqV3*T4NyiL
z;MERVgLR^9WCYC!l)2*y66N2;+iifQ&`b_E!+Q?smzn2^uP&z6P+eM83*hblJt{x}
zDc`}Vh~tI2#)h8_F0wtl9AolH7wJ7AbmwG2f<y-pdXDkiQQf;nooPsi`vcd8qCt<Z
zzk#WEA8j{WevGjnvp&HU!{|nxHziJx!nEPjvS||LZ6W8{Yl&(hcy9wroV2leE at Xjd
z!VwV*trLUyp+l!80b@@uvRj;BlmXfXa=U=9hnnl|0D3%<$)QSOI4*dpjQ-?Vn90QN
z!Lrd}_epx2;FxE+`ss6+j#sp&$ev-j%>8;on`VKoJB<oNwGt#9a7$Mo$~qOJy0YF0
z+;o7*`;~d=mj}(yyYssCmh1FJ$h-~<h8{w{qECXoFS3bOHSouKtZ=L#UuQP_)wtWZ
ztCix;*$<+8d$SOr!q0D<^<7925iqxH^&=G6>06WDD{=YDG#AhHww++bxf1d6j5;$2
z+n#AQx|Ohu5f-IjYA<pBO2xQepFnTTGwOW2o5eClhfOutDf0cEQY`VFTOK;N=mL=^
z?h0{S`X#`qaZ$MM(nCR#L?ByWQ5(8PGAjRL>jEciv^mz#hl_Xgy8^rV>@`NOqL5K$
z@%&XgG{B7!5RB7^LVm3bOUyo7N at D7pQP%kiowqtuPN!(amxp~{s>8IW8#o{YU}SE_
z=xYljY-+{nK9wd1S+v}hBqr!HM9W~<`Ze`_u@<E`J-lDuN1_a1VfSJ%<<$m03o}1b
zM|Zx7)5Eak4hd#)3*Y`<A20y~=JxOEY$1P&!fUNDS&<5)W$SOw>`3Yd_bIX8)zqA`
zpT^Qebz4{9qG=d%9r at aqz%S3BL01jqyCQYU>Lg;`>3R~5XDuWn^xaC|z*KaSj{%li
z-#A`eh at eKO09%^P;u<;?g9GG$qIB<2Wpnu$1ZeaGaLAXdA-}{R;{J!R<aH!yboV^V
z5WrQX$zNxFZ~*zD_a#HG<q{~lOgrr$(-2~QJuiUNYKMfbYI{POyLYo37b2OxrSIVk
zSC|sk?oDSTG(?6T3>D<h1fixD5-_4#Mi<JKN_zqYyFH%N7Noegl;cB3FQ{m3k_6b^
zY?|Xl(X#TYJ7f7QY21l$Yyr#?vsxjP^IbgKeHv0=Cl>h2(L>q|E9%~o7yvU*A=oRE
zH}11H$>3H&y1-ewM;L$63qX7(D89v?wP*Bx!6{IM%VLs5j9x9lejb%-p^$?_pIo!N
z7<)-HQ5L|FB$^tTi{C%zVI;#R_>tp=3%W*3qI!v<{WQSs%<fJZe6$d+Df=~)4HK9U
znE<g@@h;4ldfa&s01Oj)lKwEaWX9YciOqt7Z}|e90Cjf>6{!^3;|bVs at vGm#p`|;1
z;fbNpM(?19aFbx~-}S>F&k_<rKDmHuPDEvk&ApN2NICO at x^K2mo7HvXZFM-eW!-&$
zFg&sYi`f)^6yR0c6>T6egFa#GaZ?d2k_O1~;A^>&75p3=n5PsT$)<N(eo@!@h$}|w
z=8hID<4{mK7;F(9%uOrNeyV>GzNBd`&d;4BhR%mCo?p-j;4~1{NKmFGBjoxyX`@gH
z;qG5_m|>rFrc58yqr0YYiWpEn&tEVH78C}dZ?lY&47=;oT6d&JSa|%tDR?0*>@!<2
z4BvKAcFAyouB0gjRQgd~%E01C{0LxQsuZZt&hEsR@)5W(iUgyrp3sh^H)Cm>)L9uv
z<Lza)XRr>1rF#kYhH^7*b=}`XxuH--!vTY;XcXQT^#>w{CA%58es+#rd~IKwa=?|}
z6v&9nbuOHT%`M6!V{*yS0?2g--e9g=Pi73%KY!G==xS=f?+RWgjNd^e)h;_e82Yo@
zc3fTphuP&KNllacii}8`b4yNoLhz5G at AL$GaIulB6cOqg1+WN>9e0Fg9(YA%rfk(?
zM$nQ{n}wqe3iV`7)+Mo9Ia*7JjM(7SB=e#`cW$;D!%A#q`qfS|{T`#V&d-U==|ERL
ztPbiqTx?@`O5^4Mg8*BQzzB7>B^>RHxr_Krx(iWl at vXSAlh=2rQuBlEZP^%l0aLrv
zbC;=h-Vh>^>Fg(azoT$c<;x#pg<@y;uxCjrK4b34Y<K#70AmAuGNyxbM7obm=A2Ma
zK$B;PCNA;}Tu>g6ugxOb-^A1B&1SDy&=N;d#Af{hE@>L-UvMtwh!jco at l3GBLiJkz
zOC*#QL47(Ip!Jgp3VjCWXGYSDE3 at 0(A3<fQc2dubU#i_e6olK{iqRQ2aA=W{o15e7
z+fN8y!IfGK!zjkOr{Iq_GbP@%cIrNQ`ZX{}8O_lvI9KfT*iHGEdi7?Jdc6JQ$U{p2
zpON_LXi1*!PoWT65mWEQZ<ss$5`ha<T1jLue*KG#>&m{+D2^z&T3Dj9d#R-K8wHm>
zk-WM`2j;xIlD?dL$Dv9UaYT;{Aa<ZDLN<8ozw6MnH8Js)BjQQx$efnFTm^BKh^o>F
z55IKOlbj1o7__Lscg^>C&;yh2br7`oB>?+yUMAOgNWquBxMY|T=T>U^Z)MOx)s&`w
zk7@)K^`W?umM?+tAsFe9oT)9#d~s|gRNSUs?s at g~+8$?;${QRyQ=3j?V9}A(_*_!0
z8jWEPu_4KpTN0FhKVVMQpkCUYj+5ys;xHOF!?ap43A{~}XfQxdWoNaZsZShl^D#?x
zqo;e9N5=&_j|}Xd^wSe52(fKvD&)PMG$tte7<Z#(f*woykN%<A&#}Kb<*5?`3A?QF
zqCQ^Oz!%H|rv8<Y6G!PzjI@<ijo;93N(;W(J#oURaeX+z2$<~`@MaFdb-{_$#!M!(
zx(01r1~tpcbP01e!2f=sG~HVzej!5ITE0|#qJ{KrEzvcjamz!Cnz%)@JNcG=;l96s
z6VNx!!1fWxb_MW=7uBRuZQ=W7Cis<yc16WA>kvo;P-pm4JbZ^ji_>JC;&VB==bGQo
z&1>fcEt)Kow1n)ZE%|f1XQLX45l+&UamMRwPV_<Nl{{=Gr(yEag9bF4p0dC%kR0Pm
zt-()_m#>tMi}*}u9A8o~N$2-i28n;j&wDCsVbh34j^~yUTi8xy60rwxA>f`R7W8ZA
z{B$IrqI4Pk!ogWF#g=VS4|3<M9^~;ib6rv~^)r&^@=>Qt%}IbM)OO4uLROHEAHZMf
zf4rRk90I#dX$B$R<USXC9DY78gCVozCMjt{s+Njx^wQ6`<vpBjs=SZsy4%eZ!W#fy
zu~`h7MfNL}*XUIA1&)aI;KjkxHG8men{4~kL=XlDS9Qfc2N2;pWgV6MMcY|xFF@$R
z4kGv)(T()fskI9gKLHTLQ4&B>8^nLN$^d|!Bo_<@2$YdpE$5LNk#%u0e at L`Q7bKef
zg}fs%_NtbDyLj}9>W&v8Vt6Z=NgVa~V0dMV6vP64)JbHY%<w$<<f=!N9K=BZxCGi*
z-F%yH)}&6+bL=-wLYP(<U(eWdb?nrIr;%V~4j+XDvm(J+d8EXNAjPoexh!B8=auhI
zo8Xt&pA_wf6AEp(CQm(%E%8y9J9XVKkP1RQ`NT|G`OqChm!Svbj(pl}Ud8X`>yIu*
zC+j>{Z+WYdbIj^#k`Ow at 2)=dRyI6>c<}Uqk%#tyxT8GjBLsNf9)NFf)O9%ESzU9y)
ze|DWwT0nXpy#3AWl~>=Xk*NiG9s5 at ki-RDh<F-imSkYw=Cm(7M$dT~@P0m0h)p*!R
zyS3pwL4oBU$Ip8>!O$(<oB=Vc5I*)zZO|y**yPcRuFY75i<rq1IA?522nV9`eroDN
zH{cmKp}ZFq$rpko(9auvOME{sjZX`XX7-l|OfP1J+!HCT!+WXKtE)V*$e?}2SH9%>
z!BuQP<-;p=HnJzlDZ7hE3+_Cvk+~#sEe at a!*B1PcQnT_$==$)ew2tGG-itWVuy+!I
zyDn>lbtNHhhW}X^EhD6b85%dE*4araSV{#l?3#C}@<i9)-|^+-AjOZ^LEgO44j+|1
z$->I=V6_6fya<ilV6Gu;VSeKwOPSBC$?l%B;l0rFh<n!>o`t_Rg}8sNcjkd;(WYi|
z5|7Gd<5Pn*v6_gBCBg>bUVf2V at 31aaa3&Gv|7Y*d{$<53Gg-ERQ;NKdVQo^UEo7U3
z<N_=xF`sZD&@6r%Ihy*lq1>%DiGgEhy9Op4WvN)$c8IJTB7O8zJ-Z~-A~>g?AhTsi
zSlS@!KDXI_d4V2Ebp5H>o;;>Y*`IoWtq4M>y<jjvqY>xSK}zUpuE_W~_bsfpslXSE
zVR4aG%IN4(N-9Y3?{h5F^kfkstgNmDt9s1+PX#qQ`Hj~7j9~~ugk_%lrDOIf!0`5V
zf&rY)|Ki9EG1TW9_sCln>a|0)`B#}^?<k2ObtbS>*Hn=ndkv_z2)v}wwjR~lB%VEP
z=(~E=yenh`05d?$zxA+o&o$auV8~RN3#YTB>5;Baon^%QZcXC{>_+4~>pU43x;t at X
zEaZfgv!mGk&3Ik6=gU`Me7K;Vo}%Jd=SEyZR4hibxZ3RXVq)XO9vF|q{J+jAq%i~^
z!y)EpkLLiu5!49=m_lCk^K%RUj2O2^8kJrr=y^ZqP=|`_P(sA%uZ&R%fW0W>5aedl
zC8jWqlk%-ML&y!V3Q5mB`{o;#97&StBbF80&@!XuIfDKbI7^|C7iLa{k&?T*1yDk)
z_RZo}&72zQ{$TYuq!*rrS~O7C!=v8I>o!YcB?{T81;}Z=+tZgGyiRKLok3s^2#7cp
zI;gLcopoZxUsoK&xRcLfJMP=5?0j)Iq6v5|BC{RFr4+qQfz~AukDxA)o66jP!?J8g
z>aH0~9Ls5DUITN7zN at NNPJUXrU@ho`!Y6LJr<5Rd at 2Z_K0!3re;H-<KwFtqlk65a9
z{ZmYVOJG)}=cxOrbuS}DEZ~wz=W_SpWTO(<<=J6QfC3&=tL6yB7p*uIfA0qn?YxVx
zM&zx8kfVB(Ckl<kL0}|nXb+XZyeZqK=qJ36!=eh{uHbIp)KUATlxf2=kj&Q5$ITi&
zfKN-SJ&qudP!zr)^+dK(-6u?3Mr0poJ&I}}y6i2oJuD at Q)NxVGa$oPdQR4e2qsw=|
zmeA|qk`B>P$B at DEKfa`Axp?q^JY_I&5U=Zu!Vwn5$VF<zj!0Sb>5*aoK4?h5A(ukE
zkY{6Uz#>)K5}Nh4Erk~P(Eq~BUn$T4%j7<5z6>OQCGwPuv^TR|^01bh>}-SQ-YBd-
zg(4=*YLXAqPy=Si{ZlG&;vlFF4^(I`q(Ft_w55~reHXSJhV?`uFmDKAPXAj?e$?_v
z<*iw$;LZ<+Njt2QRiZ#`THyuIaqHeZ;53jJV3!7ZYhc(6P>$7=Ff;r@%VNkdr;NAf
zROZH!2E`xcAPDIC6R at k4Ms6fBp1G;=$F>L;3bcBMs}vk{rgRSE5woC`mdgxYtJs@{
z?wg-)&y1%9>U%{Y#v?^c8zIc}O;A*3<cloY>9)&KQ8qlOqwG!kg%e>*uVo$pm$U!c
zpps!xaw at o-7?R{}`tke(;+M>W+2gK;=JRSt7DgO&;q{e_b?7w(EbNj(;njr6LNa<>
zP!#beGz3BrdaGTAy+}R5R#oEK;<=dOX!jO?Rqu{jU)(beOhQ7Plw1(}=~03zX34qN
zqbI_Y<J~wm!zjruh})p$KtOzKXao;I375cDFMS at hQ+s%k?&DF_RWWCIK=FSi at fJV{
z at f(u79?0{64Hj37c#i}Y!m4`y35G-9<{X?+hD3YJZo?0lbyxHLqGq>JB!kh70F&A?
zV`Hw$wj|~<7<|5z7!>+d22l!WXUAyH_m?A2KJGplx!1%V#~YwAMErel;^f*))j-B-
zcwAUwXN4jGA*ACnW`k2$on@%Rvt~*qxv3lM^i at 7%tk_|6<j%VgXf)1F|C-`N7QgV6
z5&U*0EE1yfAe-`W?}rl44Bg8#+kY}Ppu23T<R$g8C{%p!;AQ8F+Y;_Xf(=rsL=y&k
znZk885JC<SwQ^B-6~(Z3<J~*wr<|@`C?zi6JYRLJUhcZbi=vxua5^#nQ(x`8m_rGU
zm|@5UkljLGaqI9*S5Bi4WX%c2+`Yc0M`9^0kNvXz*7>4$can}}RCEris2Eto)-dtc
zdZTfEhIbf86stVf8DyA|#gM+XjU#TF+4khfgC^l`jcSejPQKYYIGMR_Mdfu$eU(*-
zqLu1jb53dF>g_sOrMkT_(#4q)JbKSd>~#dHsm at OwlVp~70aoCIZ25sw^rb`4d)Y(P
zS!>fs=|`d!6C&R)-|T!v!g1qY!QXfw9{}aZ)kFV7$evio=JtSDN>6Yz=Q at 22!xqq%
z1WC)bOIa<s9stw9?3&i1lb)RA{cghYh0y}A7&V8B0;x-cx({qB>a)XI4`Bn_7gRYw
ze|&URv2KQND#tj`TsGTS-OS0}13MQd?VR=k)ntQ?a<H)Lqc6q+rr~KiF4vOIM&2kk
zZ{`;%OPOAX(`sANUKz9Pb-)?Zx)}iAgJgxmnd_DdUT^5%`vKj4+av<CK0Sg7_Fy3b
zv-oIpl2-oBCt$-(ydUq#oT<kezpr`R`^C;#^P?f_D_-0E#TbquJy8yQ=^W34nKmJn
z%M=8rfA)c>K~ZEQD8KtQ6TH)lc~IZns!=N+IM^KMxp}|?u3$JJ!PzfNSF`we^daaJ
zJy80fs4)&+$$j+?+bsyr3jo7mOAp-8uBxnBF^B<lIGB8?GgxJ1Y`mXcb?rEt?2yf#
ziJEalcKn?%QnQwn9`GZoMeQ*2zV{SVfX%6gGnFQlHTbQqe*VomrF4o)aC)t5o51Q6
zGyHAgaSTaXe5NWMLe*x46G=9E{FGIX%5ltsRD|>H)p-Z-bT505o{wr`P)8Nt=q9~0
zQUwEASceDCV=oUOsYvvm18MpIF78nYig3sVIr8Y5hX}6$nd4XVO4F4IOMuZTg4HKM
zwh_{P7tP8a<5$*N)CxUbgW#o-bNyc3Il+Z&HPQ2LE_nfvKgMMA6`H<F!OuJP4I>+U
z`a3Ax*0*R*D at 3JCj*6&BOj>MOZy<a4OE9yu9a54 at -6#rCI&y4Os-GTz6KrzF+%V^x
z%mj>uLuo3klXY#v(E;gryC9%kWzH|6T$gs#LIA#UHOni)OBt&rILQ}uPdWd#0@>Kh
zdBO`Xtrv|@O|^sZr1c&edw(S{7pwJS6;xfwC^E{t2U9pL-M^7=K%a0HEETo!jDTO<
z7;bW at 8Xuk{;0VyD0%hUB&nX(?I&Km77|Ya(xBvzy^Lo4I(gGEO$JQhZ8|ud at X9u`)
zCE2h^%^U(GRzmonugl8T5R?`TsYq6yTlc&wNr832VIw5 at 8~b2P38%o`MrPzzB}bkg
zM8Y8 at Dq*Z{do%7x?)48z<<B~sPIs03UNaKtDYfQ-zcw>Ge?sQ_^M~1^zlHi|r7hV?
zyGy;fh;B$T`b1h~m`A5AWF&1lft(iVgKF4{P;{9FbM()bX4Oly at EYiLBY?#Srxs at n
zLSMBkw(~Jaq2eUs-`=Ds;YC~nd5|K4>Wq<j5gu6 at AOi_PhJDHDU5X+p^_#P);*n^I
zE*g6rf{F=0z;Qm{%<Dt=e!q~f$pr`03-dvfk{Wv&M?_Pl(E(QwxKiS6RMuK(y|kzq
zbu3CJ;gsu%M+!kb&FkI_wk08ei|1;J0s(UWf^OkG4kRXe{L<KF)-(z1p%}kMINHl3
zn!Xwa;aqy5p2~Q8Il6+;rlw}%%^kz8dXIV{0{T9rl3x-Q8zaY;FaeevLhR%sileT5
zY;07EtyuUgcUE25$3YRS_C}>ebN~IrvIdchSVX;H>;#sBD^xYUr2IeVse_y20jFRZ
zpg?7!=l642(T0(=I8zxe>jv$|cE9%W&dKvgxa+e=4Orx%!4f#=S)w9qzbtXK-{v}$
zCMF*g2yo_%mYu?vC2_FRr&YhTKwN=ForCx-sPnQGo6nd{lR()bv_aT79*=dqv5sog
z;5$e0r1x|zVevKfQm3(VSysZz_0EYX=!G|YaJx1r>R*?~w_5ERe3<PzYm*++UYPut
z)cW(v73Mav at f_X@46pTWDi?=-c51|13nGVYSqUA(`7)YqOE7m(X?hZI=!2Kr>p~sU
zpre*0tP=Lg*|y;y6-oOHK*^7W-zGyI@!O5>bxMw|z`n`Tqq+Wo-k&CVcVP$>$AGnY
zv!vDBJho|URMsZ)oekwBd<S^<iO|1>405dH5w*5?*uVw~cQTR7Uqxo>v;P?^pY{Qc
zL}khygNn$%casHUHw<`<NQ`DT1e9y=0q)BMO#gJ~w)pfHXqtSiLBIK?Ay^Hxu#+~z
zsGi&y_1Qa|6czQLl?AvPc*Grh>yfY-+A3o4IP4TXclff-;!g0I_yWf8JP>1=z%6Yp
z01PI*Mc&dssl#-(arGo@<-LE&M at -`;I;h{}D4^@#3v()!1o1Y!u0U>kk56hs#p58Y
zJG?Ky at -90{%EXeMOB<6&+FVu0=OpJsNI>l(>$Y6gCuF&jRIMECi2ID{R$W^gp<d`8
zBXS#|j*el8X8QEN*6+=~kp9v;It~e$R-|%Vvkk*BYxgokKEetpio&%$qe3;}upadl
z5~|n8<Z_1lI4GbEj at mh-V;C>mx1QuIFtTjTwgB1&D|ELl;q2Dkc^d8}lJjspV9O15
zT`eo}5XEP2fm^$2g4JE2IL&l=_R=^H&ufr95ZQC^v_i5eWCt4XzOmYLu0A}O$V{8M
z^YCY?D2tbp0>oG$F0O<(Hwi8N^MyTWl-mi!7^rTyE8=MDM)mP`IhwHitAf=wkpCi7
z+jzMf>)w^%vJmad#y5Fc=Ao7 at AjWF15&Az_5r%i_Lmnf^`f^S+YeK at +9wg&Yz3cRL
z$v&0^&PGMfjV=qgBQTe#@g$grlch|R+MO at n>BtVq>p7lku!8Po6a9Decv=Tml&7uR
z(OK8PKXj4assoe4qdhi?ZTM>KY at RAL^HiaM`4Y|4J^X%?$#8!ki}OzSX*EFt^cSQx
zS1%w0pt5HV5#gxWn<;P)Gmo~vxeIo>(tjqfqJlSP;Q!sKNH{-S|DsKBI}&m3WOL?b
z-M}f+D*Ps)P|m7?#*Jf2&;I-P<1xhnRrB5chR8m8EM+2@>mvm0|0WYVgPk6k-dmU_
zdp|?&ud*x}n7J`nPhFzvIsEbEZH)iCe6jG8 at KyPC$U>>EgyaELdK3<OBV_6XOk|dU
zP56Nb*w(Ku5`2QhbCiNH4>rW`aq+b`D)B!dy6wLTkF}(bp%^F#&JU^IHNqJwZNVGk
z$?r)N(n^Xo^`&KCfAWZcr&g1><Z9oaN`fh80GIKS=3n{`SxN1M$2rPUU6$wH35}We
zXhx=7e3j4n$Si_qGM%o3tUOHe$umU!qn)<d@(!^mvw&g|G%wx6+V7toKzC*0Xh&gT
zB&SDW7tQOBfr5-<C*+Wj6xqW;;qls8KjuMr&jMmq1#M(gP}SD4VB-?p4i+QujL)2|
zHON-86enW2(rd}woj0X8XS=0&AGh}`P=qq(9W&Igd;aX8L24O_{hJnU;7amnjyU~?
zLv366dY;FE;&wjJ_0Lz#F>|GH9kJ`OlHhXF(SlxkCxkx!zD;yz#8lp%X65Tw0rk46
z-s`?)p_LW6taC)H4V0*vOTYlziS%I#pEt5fSPov at WEQAjr>v6FZ!C#Lb*X1!5=3mV
zNwsTOA3vVa5_!pFM<t;Svp?Ptc0&|N3*bXU_I4qd3y_;U<r51>N)BHJl4e&6`DHCu
z=~x2USPc|W;VFIRfBqcsSL3(OxR)_N=8?(%vvo&_3kQG{B(PVUe0*TZqA?2#u|~lr
zr309!?j?0n9f9Gh9jf~Wm|T(x8LEyUsf~2rLXIo!NBm|F`%i!x2fk2QNA{&w!%i1~
zJuYm81*%TCRE!iGofSSL1Z*x$2|sSz1TD2#P?hW@?ulCtQ<}eD9m)?mQlIs7M*IE}
zN%kbR<<-WTKrjUN`}*V+SV*G~fNI at D*mS3W*6X4bAt$M%kqyF8WPw=U^SsTHiv0Sh
zYijMt!QaXCnru%XH at ++Et$Rz1pO{pG^R&^%#(~Bp!VTD%ke<f9hD4mX!>^m#Rl#0;
zpAg#?FG|*B84uhRme#Y33%|A)6s}dh at qQ|09Tyv|KC+!%FWQ;?x60^&J^l&%4eM`4
zue0<tycO!O{)DNPTIExhn4VYb3J}fj{%_74aZE8bQbheUqSU-s;n7WNZ?I>Ys<9;x
z>2$;9ST6Z~pT7eEzsr}#QIW)~JegTANmVI6(=KFKMD$e77`k#FFyC{6Q})uRC1{tc
zPh>qS>}v-8l7bOnI)^6}c|UbB$kd`U7-1Qg2^OSO`@0!(sWvghGxkrFd(a-bZ#DG{
zh^@#M@<Ew2d$;s}fJ_jm)22=HcN`DJ^5+hcTT-VGR3eLi6PIuUHKBd4tDeQ@{v^JP
zG5h0=o^Z_;95tj)D9^49=}wt$O&r|0*YDaIxVrTvBk`g42Pbu$v!M{)z~54szOJ&O
zp@;?AO=iLB&c`Q2Y at ZM6A_EJK^IrO$sAcl3-)a(}fFHDhTO`O7h<=ccwG?E;Z-Lq4
z`;6O=$?gk6V1$l&Y0cI~`>^E{T}#*uhgaH*v=uN?Ma)L2AU)s<2PFfwW*kicln6kx
zS%(<@uis3QKcQ}T8cBw=$sY`V`@XhGAB1;)m83+`a2U?2B(2`no~n92XVsG!7i4_8
z1<tD at O?0BM#O(>rA`PgJt4v(K6*$Eo72BG7iExMayfRwZrsx?SUH1C~1^8BE4O^<P
zqKW;OxYk9GX;kp4vbxY)bQyhbd}m{mY7cpz5rjNJ^BbeCT#a9_f=R<_Bz(1YRMg%u
zI_85qs at yKdDYR25IP+2WabAFf5`oLJK?t#ca%dO-MTU_oyK0WK^y}pf+<@Qt<b2J)
z*Y>l{+|TL`wTmt}pOJKx3!2fbX*tYP;wb2Xh8!CZ&X<>q8NIvZ;YXdE`%ff?u!8^=
zhWT4s`8T75MfN42nxu{P2N&ZK=f at J4Gr&*uMB4R+o3wDM!DqJt5WjIe2|}bE&3ZD;
z=VtP8kpJCj5g+AWvkGvII!trJD6U_=-Q{h>L~v(w_Q-(ybs2{_?tgUDTOW=K{~y2e
z6cWXcxJzKKb+-f&`OqsTL;seI!j_;Ur2;qT{3od at LU?!1y6#^g5y&?$)GY8MF;^wX
zTGnPtbkB3)PolXj6EI at ZL*KR#VV=ko<g*2)uYwtrm08c84 at jb%M_PRs$Ll>Kp6 at du
z9p5c?9vMq$bg?F7OqHNG3f`SLwFER(oK4<TvdD_>(1~!jQD#^t=>Jr5Y=N<*uNu$q
z(nw{z0oe>lJ}N*7#-6{cG*d(g(o?Ke-Qbd$vqn+kmjDCKDMvzWfg$+640J5binH1X
zhQ+O9+$vYWGvd~sYal)ZQ0g7qt7^Vi7swBbe=;T^1|t`d7Cku9MZI4p{BPWz4Cq0^
zm(=3iPV3%hT*lb&+7B19{d|LeHH%HHW*_L!UmvbgMI1-ooLQo1?~?}KT`9?=;dfLO
zi;9^whLdhb9Z*VMqh%6FPVdZJys{sqjxe=#xH#8c9(r8H1~R$TjwnSava?gEE{-~q
zMEM;S+|~3sg5)2jd^($F16iLds5Mrb-oII+DeNKmD~U1LGT4F+6rSscgSFizp^sB3
zAbobG<Lr(C`YJ6cI<%Y&uKLG?JDA6uk9Vb{sGJvSt4n!nsieHYON;q>kqlXjd*Gc5
zwpI9<i=?Jv5NfCC{lW=&%MHhsLFqM$^?7t^(8Y|O at 7lxmxdTO>XRPomxG<%vevH_q
zyqR(M5%he=LU^*kq6bN4DG8plkSj1mG~br7dIct6uSua5qA_)@V#3f5u#qaLZ>YvK
zcdEH`u^VzdY;G(vvpRLs<xFjXbz)5=16^I+d9!7biDorF-^D>69oXqP5G$Lji4 at A-
z*7YA%&1Xw2+`Q>JQ)~q_5!IVrsGkEe9>Q=hY)t$>``FXM98;R_q*joaqVxMp7PoG|
z?c3hegQtE?+|q|W<?Tr at u?NqRd9T*518{9GzvDxUJ<?(wI9e`|Olk)aaiJQ~iZY-*
zd$U8EU;~)pgNp^=F=@6yg>}XOn&T=1scwdDC45QZ76SK?`7jLNZURI)E`@M(+|B|_
zeA>mge)H=04yW==yWa}21PNPD&V6UIH0T at RSH8DbnMdn0O_k+S9QF5|qkL50MOr?w
ze0rIdZQ9R{1|G?ZrW$LSd|_Q7B~8NvVC>v7HhMT=ws6e>aGw_pO?k45j;D%%MbNB$
z-1{c)LIp5f2J>$_K-dTT8ZIvBVv)Nko9#y3)~zY2nuK5t1T?oTHL{9fjSZIe_)|Ps
zOq+E6ika_JqYOw7UeR5j;NzgE_;{!L^8ZkJ)_SRU0DC4Q_lB&S at rf|=N2?_nuP9FA
zA{vcIm?MBW?fA3NsRRG2g;9&Kyis+z_8*dRoHFW>Pr7m=_m{JOv`kIAxV{^vv^npM
z4nWxuOi_hc#urR{UJ_drrT*@bF`XO;z&33P0>tU<uw at niO?WC5q at bGgjW1C!o929)
zc7WS{#8%zQ6B{3!i0=5pe5uUI^#1<k$H3sKU)x8;q1Pf3mI=lAnF~~zW^?MpY^JXq
zenll4AHm<pNB$D#F at kDI6JPO?LQl0NMCW4hOK_J(WqWP{qNZDhM_Am}#XQOmS+|jj
zVZq2<<*`e5|I^l6$pT(@n%8E_p&Re=`Bx;#OJby6fgC~Qh at J8MvzGXQr>gWhxX?BC
zw<Op(`hFH$#Ta|wDA7*qG4QyYmq=axD|VL>zNF$~ep}8iqckODG(s;Q&-WMtWxA7-
z#@-%%h?3bl_9!+e_Gy}#47_BA>zy{vrWvcyVH)b4zCp6b(nQ+eIk0D%*{TJtb?$MG
zghqw;g<{%cnQ04cGe%+;VV!b9KG58h<n%^9M~Rs`7MWphMICw at sHSG~q2O#`7l>AG
zO=YN%=^3bwS?-9yuw2sbNeACZ1<vW?{#cr5xNC1oj`5}?`{qPu&Pih0*mtGauXAzW
zz^Bbl&Ubd4GC;YzJzq|in<4bc5m^4$9CoG(vfHZPm~5o4FAYhWX at Z$DxYBDCF`%DC
zv`+n;`NL2L{$j-TmTunC5=FRO%*>B>)b*|q6};WU^B5q6p^nF7;P&q at LjfO8dG^So
zMr{2&uY(V%bj57atwH<^UHPId=qz->fT15%o$QnDARX};Bz`3Z;B;opHWSux8Cql2
z41d?uV5~8j#Wa5S74ho**qncSYu|`RhJbkM0Ys}5O)^rU^$appqq6&ydgeB at A%?t2
z6G5H5&=*3?Qu7L2-lYp|rLNanV^%-_xWxlq$If+Mk)QZq&SgcZ;KY?dwffpMKKp*+
z<Xe7>7||EjZXFhEDArLDLPzySO)7|l)()l0wxUYQ#a~c5gO!v{6be`>*j1vtsC8=W
zmfxVt6-3BXqdtuSp%B20A^I#eAg<$+IQK7Zx%u-c9Oom&*;jnMoAk9%n^#rMcfet)
zL(_t0L}yI~j=))|GKtW{*Sy3~kh^fS^c%>o%Dvi~Fr4ToUl6``@W`qOEw<2LP`j!5
zsDgy(j*vsCQc4D#OAcOEtF$F(T?>g3{TKU=?BXcu;A$zynT8v)m`AN~949LHK-QTw
zfHP}D<+vZBm4JDIv`#saItwGi at WnsJTNhs~`N0UO7b#VyB{HE<EF7&N<rj`k)71(q
zS3vM8x(=HbSssDM;BX#AEzp8PKjANwA!9w^Wq1v`vxF7P^4&3wU~p4d+wvnI?`tlp
zUsd!L7r!n7&H$M}IaEW-Z^JZ^i$jm-(zv2FW4Y~);n~FP{acZ&Kkh?0P9zROs?ycp
z(!j5PL$IjIN>0yY`GTZC8YT;Q0N~UJFf#)Wn3Ev0Z5}VLv*&&?gv46Wm*!ON*$d;5
zz#XQ#$~Teveq>+XNJZF`-g6HNo~<+F)v&+vN(}``UTXwN;l#uAQ5c^nY`=AXzHRFA
zANJUd6EN*BPE?q!PN!Fz!-;(gnvvwjbq|ozI|AvOFY)RbEu2 at v(N at +@Zj3ev*7)5O
z-oyj3Ne!?{N&^py-AJZTKgRY2dFO0ln!s0YxCpfUV2}pKlo0%0P*q(v&0xp0fj0gt
zX%>=86^EKENO2)x3u%P0#Xf%r96s8A at PV&gOHS$a84B(=U4Zjc;C3+aI|#Heck2GQ
zT)^)cNj@|e>DYOu7Zr16I<YFoRR;9{$fI29u_(NM>aPYC`ubim;zl)rvK>{xGQPpZ
z*q3)>Tde9K7hKICXy4{Vi8|!L*J7ExhL)kcj2e(^0r%QM1I!?8-EuaZ*b{bW2l~QS
zNU#sVLT%73s%nf@>7ktM&1pGN>t@*M;(1n0t|dMLhHOW`>^(BI!<stGML_q_=*buV
z5a&fs6x$cnxTCX}1=Wo}jCq5r{+tC8uMxVbt0=c{_h2M)Yg`IG^$%FKdn9&kwrW{H
zPEWyeF)PzkBx^5c7TVsQP!4bfiM5QS++-(hG!bO7Rn<2?K?r9izn{N(j6~8x9badD
z^YMn*=+2Xt;QCFkc~#(OBF)ewsfcRbDsp|~jD6B<!dE}Ra$l-t8c=-UEX1T|b5o)p
zSx$0*xqr$l5TE>IKBVY`nKxxO9qMVFM%8Z}XMYVG*9Zjq5F%jt1-u-MBV_zSD>N$-
z_*X4TtY%qU#ITV}Me8GIA_o5mqC|52l#50&YM(pO4u?poAB*|TRpm<7YX)!8VfU$U
z&~&@aSH2o<zKV at u1_pJE!j2Yy51xKbYHId?{+D+bJ~^4Cy8rbke3>d3Ygow_y^>4+
zf==$^5*cHAVn&7A!4F3Hi%Bn4*`BfwF at isi?O|MJSl}AtOuh2Fst~LZYHR3V<wIrR
z4>&d1kvHH-*iS1cIg6%{w%Cm*ItjXnY>W^I3H!Rhd~tBNkJgS6R9fW{Vbz2ufF$9V
zv%hv2y7Q<oK<-IPk at S<l$@?83n4~;cZ+2!(!<jM;-!xP@*);_aAs^h+(=ALz=;8X2
z{4Ha>x|Qdq*ySo^3sU7#gLO(76V*8G<ZIjazZ6usYvbj4 at S<S?>UVvEbe|OLGR<-Z
zJPa71liPXjg(tdJT;IovO<_DO`}~0?R~?xlvb#V)OZHK_YTa*kDy44xPazoDmyPf=
z=bCCQdlf3ndizcxwU-is2 at ox^A!SAok?ulVyC0H at tIHHF>h77 at p0Y183p{lqnwdd-
zDAK-Adf3y#Ol^vHycqb9GaAMJy2!gT-)nyzfuzwy9X((2q+>es;FEoIj2y!c#p7+b
z+#S8kAMvETP|{A({;#P>BTNu>W~J2#%(j8I&c@@5H80^$8wOBD`cki}PVuw-yDwUc
zMh{cf4}pP?Yvyiv_0g8HZumEBYm1h2;|W^_bz_ul+$mx~oW4`S6}rJ0Ca7CU7}`${
zI(+U`T;PvbRodn{r6-%^Okb(4$^!<*l!L*j9c2#4&#GR|c*NQnU-u`6oCNLDrho};
zDz6kloM2D_Iin8c2 at 227AyD*BM7`0mGs3sxd1rK%>1F;!`1Fr^-_b_0y_h-I5rj4d
zj<s?wL`flhRasVHV;+d^o8ze9AGrTsl4N?@-m?dK#ID($<zCB;z^+m3pcJofUBy-a
z{;ZIb$>5I4tW_mro8Rph<uTI|9iEBK<I;w=Y at iVj-V`&A<%5vc*%5c1sICf+QJXpD
z`Y>ypZ~mCK;sOBUjv*H<{(>lR0e1rG89i2SHQh||B10KPfVidl*bL-6U{P3~?rlGX
zY^OgbS}qM?=d71|kxUyL(-{cR8SRM0V<52sLG$H{&U%}ZzNys^_jXIlj{Jo)>4acR
z?I>fF2PUEwFh|)txm<@uvR6<a=oJ^9-$Jp#Z+nBxuODJ1qL$6G=+U|xSftoLl>5l>
zw)6!|x at NUu;C&E;eQiRUq at tZG0QRy^5%jj#Qa9!66p0TmA;eXQj#v3_5w|W>q2zQ&
zWrX;A-Ys{hfpP`PAwgt3)<%>rFK(hLDaCh766_g_`^!jVb_3|%nlRdikQM1|Mr)eZ
z{Fpy^eAO#as?oYpqo2r|=z7NRUs=(YkzhZOUixD70xdw4JxM=7E2xq_g17VnTI%&5
zOW!CvUaMEM^*P at ZR{R5!^^u6MZUDPn&d{A}7K#AuPkm4`Fj|OChVz at 165$n at Hu#!D
zy`^-VpUCrQdILFXczthp+0Aj+kX*OsqT4*?zE!*9;ru3v3=2}wmg;-4){|;1&<Zwa
zK1=D=a(ar+j at Osj7dt8~y&~yBe4Gf6#4K6Kxr>r at UrXar%qdI6gOE(t7nItc1$LXW
zdqh{MStO}S{MhX+2GlRvpJPRS(SWf#bDcBch7vD~#)s!CQ~%ndI!sJPzq28oZE5&m
zx~i5kr((l>2S>ZCvYS~=hpqyfFHS>8bFi{&W^FY~WGS+TnlsWnQ`56Lj8oqEiiHB8
zN4usnR;Xl%@{i_&TA2qM7N=sZVKf={h3iZ>O)Vs**f?K{J|o>;3WBOe8{BcE)yvxf
zVnytaHa`Oy9<(&GP_V!0-C=e_wVbdD<xUQlVv~y@#ndyx3r&^%C|pbqnhh}@N?!_L
zABz+ at QcCh_vfqR{XpDF(fYoRDOES-m+Rb<bN`+*LQ$NOp(LO**E2bW>)u<dy%=^EN
zc*bXCU(MAMQE`=~QhEICa)!tMV)ee4%pz1uG;8G3o?we{u3)&0z)-v{n&KtQADp<*
zIWRV7aoNR$4*78DQ?<M0d}RrD8SSix5;tjav<w!~vXk4a`NVmAYwSAe)g?C!b-$8T
zLt5msnV*1b$V7<R_+Na*w|tzDuoyWhqNNWJkrOVEp?1JSWX0DEaWX7MWx at m};3rDu
zx+{!n>S0zT+JDlioYf23A$PDojEzt0t?7`5 at gqJuse*PW2FRRkmm8RAWHI9NU5qrh
zFOT at zVDOb-+gyhuxgwT@=m*{mt$8?cbSnisr0Kg>O7226nFW{&o6Ks7WIHEowsSZQ
z7X<JxVh{`O1$G#5&>+oWWaXcOm||@|mfSb|g6-79?nh<jGwQVTTaGY^Gs1G09MPiZ
zKcU1tmq>X*?>qP2NXiCxJ$~;-4=7#3FRN^_9;5vt4EJ9-ww86hX{#!aRw)h#sDV1f
zgO`w7K)VSIG=tE|O7ib*O*>E!Wx)}8sJF%SzEyCb{Yi#|uBIbmj;smA at Z_tgegUO*
zf6$-2d<xEztP$16hT*)yi;cGQgM?R->o2g=y9d?`#W6RuqhJ<;pH13*iGZ*cB=yKf
z!#<(w9inwnsNthhNJNy|kT9{76iWy&=KQ-e<i8O2U~?Y8Obx<y?E?m^tlt%o&Jpxw
zd?0dqcS&&;OyrviGu?&al8W0l+Ve at V0{KgPl0X_Spq(TYWo%*7LS=D?5nvB71SL9X
ze_dn_Pr4}E%ni>k-;imYt>jW5?O7I*(g1+L521SNldna9X-;nVNTIlEBYy;?F=V~r
zy2I|%Y<X3&N#&Qgq;e;Z#&%>ap=)lqmAxtz-%hC=LzW(eD+5fn{jUO(i)68|l at mr`
zNh3R@)V649syAh|2(1NG9Tg26W8e(F0^+-l*AQ!(z_#qesyCKcdZZp}>ER)<aLL}J
zyIM}X at _ciZaR=8JWdFosV^#`NC631cMhOxANBQICiEL>JDJqkOq+u=91qpDm(K6Z3
zJ at b9{A!*%FlRB7~-XO_~b~!oTb&g0ajmYgD-%W1EG`C{<WXCBBS2*WR^G%Hh6v)c9
zl+uBPXQiBEg9h#;2hQoW_|agCA+{ZSM%z7Ok at wR+R%U|*`@&~k9%ds4^6q8)!LwnX
zsWOKrkeE1RzDaamuqHHX;D5^sKu(s<)Z4q8!hm-{DkS_&NbF}veq7AD80>ID-<U%)
zWn-j=G at H{<@C}C;3n~|rPaIHi#u!RyogczQ)}yFT49M5G>TvFQy@=Xr<9B3KF9__;
zsa1^wdWCygga?7VXXEoNY&L{dO9~@uzGX20me)uPwlMgvRhY4N-ud<#2Di17-xQ4(
z1iL>W0=45bO3eiW*c*HsoJYs=qH1VaLkb9Y!D!xVSNixWZ_rD)X>PkjUt4D%#5!Oe
z%#;|b->?rBECdk|jUsr91{}l16<m)6 at 19|Q+ at j_?ZLo0AUFpm7MB4iJgArGaWR!PA
zVi?b<!BPFib<M6*atqO{Q?k?uf at yXiU^O_qK(S8Lk`o*#%{SRl_a!9dJYXArE>?@8
z-8lk>@joy8c5<ez%}Csib~-}nSIr=2We9dR-~1;&)6v1dWdR;&5^$!O)AtoG4#!M(
zefx+#>WV$Eq;Q=E>1*WgNdtKmO%oVLw3yX_dV@$qNnrpdM*EkK2uz&4!b~@Yg()Lw
zlxAWtAyxn6Zty!KU46UKozok#GfQlv9x6gz!MVHg=8%Ez_*niODb!H6fcv6(6>+%6
zIqlzj<MH}&0CItNmkx89gS0RhrP#|8bsKW{@V28nA$Chytr5{pLRlt8$Pxs at 2a99m
z5MiOEIw}YYdz~+weSqXDHbB0%Rb|loUvrA=lven4*}H0f;c+CAO;$hxWo$@B-Q{>b
z=tqhebURB1yN0+=V3m0xMM7Tp)?K*Z^p3|MM<6V+IcUNFl`mu at LuJr_=hLybL1&e{
z>M)s8KMXQ*XD$nIjb%S9KaruY5mZMzC<JDa($Se`M~xlay_CYaDn~)yGsojvI8wCt
zC_0IqlZxOGeDap+R1Ti|<9~n1V~kPiItw>D#GXHyKJ}2 at d#d*^qDb8KJ`bM<YdFhq
zQz6Z$u^$65qh-MAQ_h~?sOf2&MA}_2x;bQiIgam5DM?i_qy56Xu)}bGcr^+G?{55;
z9({BIJX(TA$nG(*$7>2Z^U5Y{fO2i|Q*Ozsk8&1xVoz>k>wIBJGw;Jz8>iZfP{lAI
zN<VZRq-G)h2U-_mK`$Xv9&YH|pa6jvW)+4|zBOy{EH0C<I-et{nYT7kSIBp9PwB)`
zrIY?Q0VAMC?dyFn=Yo6>K6Jb6R+4C)L#c03`6+(I at BlueH(2QL1wGim?6ZGe=Oa~W
znEFH6 at Wx9DFJkecP)Mjyy>3fzn(%h1hhgn8Pvvfsv5h?^WpV8uy#&MCW9>(yjf6~m
zebb%DN=cHgO^3sN=28m_?)FV6c3uRae0Fw=zpLI|-{qY;DYB at 5N-jnb8Ix?+AAyB&
zABi3DtpAEEW+SkAlg#$0E>Wp2Fjl+qBtvmr3-?&xXmXPb4EI;HPfnC!=Y>s at P9ml*
zTvjhwbv0T&D7|=3Cl)A!TIHUXOg}^vsk1N3Ko~fEgZUF4-tw~s`dRMKjgJcwI<;Fq
zhV}$qRS9pBNu7Lg-VA-Zxb9tXA)9u!nnQ{w6APzce)6zNxX^?EaLaT~no_ at H_#ea$
zoCr2GIy0pS1qnT|{ZcFm=TV8rEzpl<#CM#-&X{kb?!mf4=RFX9;Jah|UeGV=_Jw0z
z@=7WAWJ4(pbM6^wn%oR!xW!B<Q}X2=*4w`PjTQ6wYl}FqGX#(@{pz^c!Y%htV=h^u
zf>iRWxD?EUF9^g>x3dlY9YEyB37Bj_x2;aqJF9JS>>|T#%rdDFDZhXKEv=Y%&8CdN
zpOO=t-H(LgjvO{!6#kF4R+Xy^EM;qnghnFiG|>p}`~o)?7vvS>J3(*B57H=x;v|%Y
z$Uxzv^+cfY&eo_uok39!T5Ze7Jaa6sS at S6UE92bzh@ui%!n0*mT-78wG~A)qE^DNG
zTp-~Kn;t!;XfxsmgfsALkn(%$kR4iSM-Kh#8QFyltryow?43FYfw_t>NnpbnxW(>4
z&=5vh>zPr<F8;l&>6UU~&4k4RH;&SoQVfx%roEPdqpg|9>7KZ7Xk_ME+};Jp%eEgh
z%TExZt{|^tkP4`d#af&*2aoyg$ykRHyYKaw9`qkxQGg3-Z3qjU!ntDH>v0!+1J$ks
z=4!+T=<Qees6pOJTc5)Mw8%&@L__YmCr`~tZ-;N~I1(0o#W3z8H1er|L==p4q`fX@
zF#Q`;evME42_hr>(gd))OB at j3^P6&?LgE16>ZGr~_?#?6s!<@}_5{WPdH&L|1SBJV
zxO13vMD#t^W6LB`ZA3(r2rokcxPTyLWOZ>cl!(IjTwjE7&TnEE;o9X|MC#8xWOpkh
z2QbMoNWr%RQEozEaWkHP0SH+RTp!jrx*d#?m|CGHlX9x;qt`2+jO7 at -h~`#!esbIq
z=;H)#F7prulFb>z6i-0PtDyUiNt|lLs2<GOu~DB{Owq=^j0L;lQ||6L(p`mn>h)PH
zm$3Jij$v5&a#k0ST(~h@|JOC?bi1q<6*P}H&eYRp1-`T=PcWaR3AIj+sdGV^@^9t7
zvCn$v1u{?hKJMKY)h6lwcu{~KQD-c5U<8#j$`npLt|cf at 7gnrpBm<CsoTK(d7Bgbs
z<E~nbOn)kmwSP^>jQ=@+$fQ%<JR=eVvB<s2EmGxU|IYnt-J_1oBc2G&e`J4FtDzb4
zB{2$8ed_r%W6nV*(n9dO>tRFs$2*(!WHHER@;)TfJ(C(eWO<B^$I6fP>vnDO;=;;3
zOi$xs{<17+l~t)S`;I5{zbPFlC%jZ;yf-}a)z5VD(nIJV at +@N;kbESA{~2$dj$PIJ
zK)g2kPaOJ#OX41~Mw=v23iJ-3Q~R$ur?Sth3z+@>aKm~!W8f at l8*U#SxHnR_N=-&B
zr#NwSYCHk$+)LFuh_!zbammYseM(Au0(ySc<hRUe&S^P3QI&^Si*l^TJ=7Tq1mC(P
zPsqVSU(fp7B(ByR7cRK{R}o)XYX(2kHYcY4s*G&0tjjXeCbn%v;rAZcb$NY&$}rY4
z{xCaUH^#t6vAEhfT{rdu?E1?IM(m7kMy`ftX?=nZ{f6rGK4bi3zyNPbLY~+k3j?fV
z`(KE9`fieJ9Oa*oj{|v1Rl3JA+uS3w&MI(S$0hX^>CkZr?<E&hM$}1ovJ$(V8PhPl
z;$wpC$=X*oC<qTfHAZiM9hSaR0t}uXF79rhGplojO2FcRrfMRd2(=c=Stkne0DR2G
z8fH$2{w>V#xsOR_3k}Q%1f4ihy&5P^MtY8+sT)Y2V>E!T#*yd at Ki#WNO*CT|vg%bl
z1|lrXQN0A4 at b~+!_r880^fOX^@5bY)_x~#DZDA#LE2jqxY+f4A3Q}6Ov_05qNqDhB
z$A8rdN$<Lt29Xd>k(Cy;A2v|03}tDyoEwTl0$j%-Dm(*r;_|Dt9RrC-M+9SM%qWNx
zYd>iutujKt!htc1Mf7GBBpNXyE2j|Uf^U?CHJ5%;JCo+7Z-CB?C7Bv>N250qqazT|
z#uz#Zo^kW+Z?CAVee{8)bFPFt`}!@+>w&XzdOa>W7_LR9or6WDLX|95O6 at Y%%+IeF
zT7_(I<H!ONP!cOWh6PE?(cN+Cq-UB8WBrE15;nPRPM^LR&P~a4yeNTM+)bJpHPuG=
zs1n$GdrYxfAM4`np(bSf(r%)D3we+^`m^9BseGi=Ni{fs=uyVU<*o>Cm(x9KSn-es
zmn`iYiP<lCOJZ_yhpXrPF);JA6;RG^i+fNpi0<zJ3kvn!diw2rcrF^u&*|zUBhw68
z5A-n`6mK;7)@TeYH-JlF*bH$9y^mF?i_xTJU>>GDN9%j}_o})0FG1+gQkA^Q`hzX&
zR%KR$p0+<a3{ur_+VKc}eG!_3j at HD&C4l0oMp|{ycjsS&CZ)s{Xc~T$wuBsaFrrJZ
zxEQ&8VxoEV^FXc}ege)<&^laukI(W_li at lfUvH283RcC$vrD3%!(nr~$9qMVyja%5
zE8eIzIMY3R=;x5>?5D9tu_YHU_Z6O%jH`Xe?STpol at caqm<iZ=!RF)`>%Ff>u1u8_
zU(Mg%Fk7$81z%-#2-RdC$I%=EK$3)auL7b9zG^KU1~nRIY_F#JUiD?xcMUA7$Hx;G
z+nM_{oA~J1mGXFvLb9tcebC-b?kCT)2KOCeuF5$qc^kLqb=g$U?WOVHUq&-WlPs9$
z{BfLd)qQv*K1I$I#b(S-_PQiA at HU)%^zQeQ!S2IXWC;k16ycK=7?Bq)G}5gR<8Ne-
zD)cK#bRIJs<^bX&tAEHJ%Y-?7Bpz+Gp70jsFlp%IX+~$#B_q$13^#4XH`BF%eUPLY
zD?p@*JP1k%QE+CicJs~}FokK%k1SB<M!P&o&rWe7Qn$}=x%%j{B(w{o06~J at jvo?c
zf=9G^O_}JiTtt=TcumI)@TPP$U6B>9ToqXpbQqxpB*>8Hf0s2KOG>Wk&cDfRR?`6g
z{v=^5+0AOu4M5oPi9ht}{|GqgJa|xG{k0wiE)Sa$8qd!jqkP{umF$^?cD-*by=;2;
zr7>yR%x0I?1uoia<#C)=<i6`Et3Ab#(?N)ME(?fyB!<qPp;;GITN!pV04S2_S|v3-
zNs;p59}K9mwz@%{SaOu0YE;G_3%*d<vfS(p6GYDT%x=Dc4sjX!v773X4pE9xsa#Cp
zl(CP!^>oFbAw at 0S2Y>AFQ)}Z5zdtTSi<1x-9#zs at 2ip8uK%OsuS=}?rF*^<Rj#&#h
z at C^2$;ReQkF|}g>ZHq46W&20x32-XK+b>@OO+bv`QoQ){O3cD4)_vB%Xq&;<!yic3
z6kkUNf%66h<~ecL!sAxjR}%4((}I-g&)wu~QA0Y23n{JdxDi|~t=b;47fqRko`xHu
zHHGrQuz%>tCM-&fDgbWbVwNNtbf3`jRU=ROE%hF)- at qj@`x$Je=LrlzM0&#39eUvf
zg;rlfoV8=-VXDhHOj;fkzkLl9oG^As2g~-m%g%y)h at t_je#K5LZ-1N!5*~Ws$T2#}
zrZ0<Pzi|RF$S$FRrCrDCxsZE2VC;terB$65f@}!AuA_b(9boJ}+VdVF1+rY?Cww6n
z#8F1sQZN``WGO!jp98)-)&!qPr#IK(RB~N^sQSxLM<PxTYVVC2 at 4@4nU-!vS!%_Y=
z&mERRF<olH0ZQy4IfDa!FbEH=OX#P?u(2ek%I3yGe|J$t at tw<WBaW~<bheP-h{{Wm
z>`0s8-0%tX at umFJ)Yy>xO_M{r*>`FAIGkxyOuB&(@C@=eN(bNs?G-!Bk3GT=wmX)z
z*<Oqs at IdE-P9i>Lj8^vbQzzfma~)C}@xBfP(fT`qDx at 5f*%##|7%`Xy`7re-G|4 at X
zf^ilGgn#~B at FB!$cUGQ at l1O8$bKQRwzpd7dj at V(LIS2Y<(muB=m&!LcDjI at +01It_
z(r*7PWWxRNAQ6*K5E|X&cPiUyy#(n{DvcXd;dQRUh&s>uzErsfRV%6QGA9d|Xy^PV
zLG2DDAi#*Tv+<v9_#{(22`^f>>6|1&R9ws`Zj)iK5e(yRpj68i|6Pmx`T;im$Xje*
zmihh&<$Xa#XBu?%kK#kL+3cD$X(IBUVRRc}=z55z5y%KQaI4)vp$L>J=l}iS^<C2)
z`SIZym~{Ri_Yia;Hh?(Ww3<N3tsVvH=|+!K(d82V0E>9VZRIL{_L{Ce9z)hafMdik
z<G;A9Gn<LGbeQVe3zi4W-icZ4h4HJ>a6itfER at LmFwyBcHQ>9a=8Ou{g`+Nev#x{-
z-lQFbqhRP{swtv42lD-eObKD*P(wvuXzGHo3IW&0$?m0m3+)MUBblOfhFA+FWd`TZ
zGyJYcC)n=a!lCuFjuJO*xF~_6Oz=HYYFzNFjv$+nGnw&{6VJ}J=5ytm3`0XCotjA~
zoDq@;A-IgeZ;?~M&OvZKYz<CV-rGz76xQXs`H8}1L6$h?cT;h$xkOpTy=FSw$V}3z
zSY!sknUaNIbbowBy3QB`e-Fc}vEVVd79kj&0C^MkRx&N;L~@qg{4kVsa1+qlp!&Po
zW&nN3ig)xHGonfi#3{jN%H|irH7I{BznS$BJljfJeMj(!Rn=^dM9Od)F`%n}HE at kg
zRr-4bC!*gP{`g<T(7aBRM6&aJR!11i>WOPpWA0UN2h?Q&Lk;ywR2~w|Nm(Va0JD6j
zLYlPM0V3ZXp1%tA6j%9ZJUadq+GdEDv7!HK*rr`(53cXpYziUC$56-5VUHYxmWi|b
zIx;3)`5pn_ at d`^(jw(YzfI~d=`><<fMqKj4lV5BeM|6)1j;jQDg6{~=Vm5=NanXe!
zQ)yFzsrB0>%-F!IzcJQwa}cXAM(uxP0L2+elRF)5YCibk?YAoZZNhfUr5OF<*QN+o
zkyB>SDYi{$1B*8LX at 3az2n=^9NnBn7`%ex__NfH>mr3qSw=Q~X9V>_m_*JFcP4GD)
zq2U2v257s((!1>52&U!^q6|gT3`*?@Mq^zpU^!kiF57g!!btw%oF|LC*0FHao;9bt
zFA;kSq>DpFpMRO#5O^2VqtHKDBhU{rCS_4;#nxJ^f4}q)FioE*U`*iOLNs{w@;*qk
zb#=G%8XcMIWy at R0CyAi!{#nhv5B}B_!WX;4qLRT at eKRgFL&sM?7$tze5eIpWbTyP)
zDvP&-foNbHKcc2%ja=~&x#U-}oan9Z68yr_7?{w|VK<tM=srtdl!nZ^kTI&;tnna{
zir$ARIM7g~N+UJwL7A1CYdJazg2;3N-E`}`-bv0<U{`oLHzes{Ap_aZlRP?pT@`Ko
z+azbI2Sb?i^CP$uf=9{aFvZNunpzo20es_PYO=-+`tLdb6%q8bo`&!6*R<Pg@`<ez
zN;VxM_D>1=;SfQ{m#nH{8A{vIg6l6Qm^~Cbz`i;oLeab_A6tv+#{Wb#a|#D?V7OK=
zrv+M655!xd8a5kKZ2oy)W6DHeoL1$cvOef|K!j?<<)LFay2O3(YX7v*U<B0mtqwr>
ziS#0UN&gsqDn&;3DdsPV{qzSqm5f$f+U5FZp}?l_G+BUsVVI_(VBnwaH0<fxWK<PS
z0}b^}-NGQuKG|#nL at W0{HKM$oCvWOrOctKEa-3E~vBHF5*>jY&&47u2$#`{UmItK4
z)aO>_A$DK>v;hf$W1fH;nq1&!3*n8e%g>a#ItfMzGJ63M&Yb?R?D;iW8Z at l@Z~b5}
z1iMZ5<D_Oshnh|FK?;|$?Y{z6-EQJGK?%%>03GbG*(Gsds_*NEen6mpWwv7L0s~WV
z*NmHb_U%Ze%DSjK`vaXd5)OA98$DjbO2gCI_b+rj4VU{wIk1ZBP%3B4|F;df7PYIK
zRy75IEaQ#;LW|*!?jR3qwATS4+)D44rVgV=on^G5s2l}22&Cq-jNjEWzs(LW)dYaF
z6tltKAEY|T7qU@=$$&{2COnYm(%8b+<=vf<QV6jw3*TqEpYfc)_z{qvPXU_&rDKZ9
zd9L{JeaJ at sG!6+GEC00<dSxaFjgRY#n6T$7UH9+pIR5PmfLFI4T0oeF5&wn#T2mul
z^rVgJ_q%TJId4{k+^uqS9|)l0r{rB0B*2IsaVX(HuVE>J*K7g|)n#WnUkg1B2NRFe
zK(W&{jqftA1e-xU!sANGoXLByw2nHy5WSjj8ZK{Grybo{=Zz00U?{Ag3n}JQ^>P at M
zq-IYqb#G>xUhdp(zmjea)fQvH1;!F$t4D}H(`L{(em3F+B|xv3#2PNMRqcUDgRdG-
zB-?w2N}LSwJC-e!vg5yj5*f)3_|ZWH?_P^SARq-T>{vrBM1=HU^LP|*DFSyr{#3fz
z`yWxyI-ZkvUC5fY#KdsG=U8TCHf9L&zBdX-U}&|%;qux3>VZ<xnzv?ZmbpB=Hsm$?
z1Y0og<kQ4%u8!#hi*imWci1slHZ)y`Vo7r;?+R<5`9p9DIFbufXU){VqIPh)b4e<E
zaZMl(3ey2RpeL*3<j>X9!}y&1$RQq?y9 at ezV{SpaaFMa0bu`;U=D&-PJ7Ud`VUHgd
zSB7zr!=_hw!X59~L$if1$s}gFEIWY~>c)n-x;TQBCl;)djK}GhCg!Se=5|lXqT4d%
z9FQ^tJm~QK^qCHOdV4(YthRQywN2?d`$1mF*%8VMu4C%ubeiiqv2hU4$Qj?)w-*`O
z>@Itn37#V<WtDg2g}?JpYX_iXP2_=4fIBD2kc$bHU`M;zd|mAkzDtaW2AxU6ni&=D
z!ZA4WPKC3)ip`bHY{{gG06jp$zteay_ZMD>Xx9CCtGRrq+(sOFgyfY39`O-mRYz{F
znK at 1oOI_&*`T)Th=Lq~JdBQow=J5|vWLM#<6bh&?Z2U5Z6#U~X9#aBI{%P at y3XUEb
z$7^i!BI1DU<yj>)+hyOJ3P6(oz|3q+Fi$x}1x!yH{WjiAsgG0?0AiE^aM_+vs8_q&
zW`oD{O2paUndf-F)rpMmlDwuCJp7;$pi*agE;ziH+4<H at V+%VT)I34qurdoTLEoNO
z&Vu3=QWFgD>Fjt%!4J9Y)AY^@hNE872sp*Fth2phP_$M0ulAdbEwIWSubPR;m!s&B
z+dPa#4r+16+bJ|%$HzWUoGZZG%Mt!(hCIenx?NzAN}@kEZ;R7}wUf2%D#1(GC`Evd
z7e4;Xv-~;)RdbwXTUG6ND!|-VJaq%Tz&c`azn-eTzMS_(V8mkloU#T#HMF0{vrYMT
z9(Go)S1e-^Un;MV6{NLn8=CN!l;nQvFWt9F{xj(K&5cxO89E$%R>hw at UKoaQcJM1o
zNMMQM;0jm3Ag33z{yRKlt+6Ru5>HCsea&#Ek3Z8JS0C#&gAp+tbwMvtxNsz`Zndsp
zNxgW_iLw4Q=imsjL4=^Q6tSVin7yDu<g2D;$M0q;LGcEd*KO=v5RmzQD~np(J))$C
z2>et{FW?${^=Wzhy0(!VkpBe{)q&6&y6jeaJmFjq44qc`%UdLx<UtBx-Pa0e%PN_V
zgjjc#CLkQd)t9gcL9?ScwchB_*DGkz$_)J+#>3!60KEG(T$r3LINle at -YOPG4Ch+)
zayO(-6_)JW3Br9lEXuYFnD326di~g7m&<;&&NTBU<FYU2UAHIrSPo9_A1HgcFx>hp
zrkrz`prRUbKD*eJpRAPpSZ?nYX2D at 7h>ArC8E~YNRLAlvpTs%h<8e=`4svJp;c at Cp
zBn2{noLR1EAmO$-X5`X+=4hf*kyo)i7OuH!0DS4^d6~i%Y;<O3H}|kI$Y60l>c}j3
zm7y7>oBu;yDERaAK3y+qLgH}^ADrL`Qz|FstE;XLHux&#%mX}#i4NnLh|G&NL;}p&
z(C~!mT6l*e<I;>$CAA8bH49v(9vIQ+KPRyox9t_sdwMlmJ)GXCDjx3pV2qYOHWxdc
zjq-YeG*r(gmsJ~i8!V~`h!Ij{qR|BZmTJC(50s}ZoCkh<4mR&h+oJ;2(C`7nw-e#K
zKJcY)?K{C;344WwYa1i|EJn<olKg#2t=aKXWMyt;4i#LsNF^G847)Np-WPCs5*^@N
zX at to;&%fb7Y<rU$vu1H0Q-I~PQgdPg*hMp at PCt3Foi;EK%^Gcp=iUOBC{G1Ob&~AY
z{}+mbvNvT{4|}1b!6_5jM6o{|5>U=cg_Mxgs6OSe$6|Wn%$(TK4??$LgyirWuO;nZ
zzSo*a9q5XuX-8Ej=~Ov<+7iZnT@<q$%T6ZvVX)4w?8-EuqKoBGj35aLDW;HGAJ2mE
zC$-KrM0G<H_m*Zos|>*{C*r=lBK0^PIuGpq^kxXQ1$W*4fdeO&QwCZIL21VNSXg?f
zyV7uqyW at -05maC=Fq#CH7d|n=I6*N}a^FU7Ms8elu*1dzA0Bkh)lVx9h6co>8EMIQ
z#g<Rl9(~f)d{W|6?fZI8J at lP<-7WjGbKG$??MjL-oo;Xi8jR~ci9cUWei3__OswKl
z{PLY5mX*<#m%YF>Rh&7ASQElHqRbg--Wrx>Q!oC<$mSTI2&-&+5&)zgK*ugtL%a8a
zslSf~3NmT}ect7lq^GCS6RYIYzB}9;YZeK-CdL|W4^^l0%^WdGE~iZ5y1vW6(!g1y
z{_MnkV;ze#v=xKATVw2kuWIe3t#;wz>pDLF#bB&U!4<X&yBn7|aYdn5Bs1UW^6M~1
zp+^wWB24MtLE{8opGP)y^Fr8eHRP?ws^ShA*`l}B!{;H(G;;n8IHC`S_W}Y7wpWzH
z(jVPmWw<|>X`X=$Ev=($7t0 at ECdmWd^l>g_YKdX`@~?5 at ozJ>f62W}wjjLs(!_x;7
z44)&nQ>5+Y28<0KNkRSZrww54%ATHCnC_G8M+wJ-E|{U{XHaX+1`Gp;O(Q9Qqdk%j
zfB!Wc<V_Ex6pMe!$etpx$holawneq4Q<yg>>9)o!OCXA8Whgjh!+(-B>B5}g(uT6_
zQwe;^OcPZ68U-0>o%lkR9(pT{X!Bi~+(H4rlZPjsThVsP6MW9E+~`Xzz&OYLF6<v-
zKf~x-lJz(t*DZa5P_c0BiD#v3cUYx5M{^7N(W at -PL>rkz$Qrd=MnwjHhB0<cYiVg5
zqe;BQb5#Jh9muc`{y8bmNSLY`JA!|Bh&VDy?(ItN>GHFGH9%;mjh522BS`vxCYz09
zW??%iiuNugqyZg`YmtQ_K0Nx3>JVx_9v;>rFd^GTfoS{HrH1s2t$CxvXcATm5}<sa
zk2q>~yJMGJ{k(q1oOzcyxpRz>Nve2PvI>deb2gbzf~ZaRsbaCsCzq%;9TV^-Vo?D1
znpa3Fpi69SFU0Fr6=d^}YWB6Q^R-MzhbpyFWRBb0WE<&_Z{(X8b7-$4M#H#?IbkW>
z=SLQR3FP?63+BTeA(qPF)e--I3u-%uS!Yc5inOf7`GthayoqA?#4R(aPSFSQNW}Nx
zXp%N>V6tbw#XU2Sut-^xVw`I{N3ZxqWU8Y%m at E1ew1gy;c6CfR`pc>iF2#J{x}s3p
z(HMNyQZAlvxtQa_sXF81C}YH|h`znk@%pO-JVPHfXBh<4(+k?=+SmNzQ}1lqCf+{u
zJ8auSQnt`&k;{2?;vw(-bPYWquZU`G?}uvA+K at fLtzs9DTnD_62jHC&=eL2`hV)qE
zVz42HFa|S!z at TgX0Q?>0_IkW9tA`pG>6TJIX1hU>nm04EZ*YYZ;z!0UNh9>~^0+ct
zJ4SrqDk7swZ;ui4Y*j$N7oy9b at tfUPj~y6*#>o-AZNS*Xl6!9QPsB($1h3nJyvbHV
zFc;>_?NHH2%yD!V^oj~-+zh<>WSuUpdH#M|QQi3D^Q2wBF!oV-M7~mU`%(l!=bvAg
zP}qW>CW4{@y%xEQ#SZ!ez|ijA3SYTkV}6JZmywV<?j><SgEQNjHNd$>l&NJ69v<yk
zQc&X)VV#J72S9dF)1PTbA|0h_n3Ndni6u8%yoS#hcF<v<)A6%<*C47~v$rTBrD%Iu
za9}g&J>tv)-mcu^^mPd at D+{24d5m~k26`eY3oZl{5WjA#-a8TME2+o<bdoFY at g6`!
zr)BxNG-uHDeBlW0RzKuR>)|HCY{;xvMK1Q@=i5d}<RE@{jdang%}YFjYQQcj?F~-w
zee_mej#S68tW!YaaaNnWFfYP`x at yQQr8*E8S&SHFC5SKh79y<0NEk5e-~N3reVl16
zXB6uF47?F)TDH{yAh-Ba^WEANx_9-~v&DKx1yL67+SiLe#kQjypoaT&9`M>wm{dOU
zhrdU%9`kU6GN>**`Y9K at +5vajIuN&mJOYO&D)YD^t4(GRqODq(+R-|^mQy2mz;CuQ
z5?f1}xH(tH&dWHw=_- at i!(7M_=^Qu(6x5Kql}8ldc)9NP4E$=1Aa(}<NLC545?v>5
zu0KlAOB4#lYoKQ$FE&?`_6bZbJP>Ro;L+V%$Y4~GPd}R;1HCLD-nY}SMu>yO=P4Y!
zQHVB;@9?1n$xwJr)!ZuC|HU@`$k*;coqx?P*JZCBfJU=ebQE}iK)J1Q(J!uL_G07-
z<Lj<|ifnse;@_v$)x_)ENsS0)M`R498={uf6#NClu?4PRp({U?9wOR^UD-ww`!mc#
z8AOQ!9OOhKk|{FJfM&T-Uly2JH)qnh=sJj4yW?bcz|OgLnqb)(Oy4APum3=q-664(
z*Eh5`7Eo9Hq#f?hyI#}~$sWj0%wf}n=o~JJgcv9H*Ewg?nLFk;u9*ek%TzydMk4e2
zUcHr-e%gcShrt^;S at FX&YFkD4p}}=}yb8DdpepOMUw`Da**yk#-juQ!Mbh%A8KP`?
zwM at do3#V2}$+)B{J?re^LHDK_jEjHH1x$|8W62{=(e~s~Vh%@GOb(9(j<A?A>mdEt
z6^*b7)|~<SCKM$EG6x*9v~?-T;{N+sQfVs-Z+IhqgXZDw`p)@S`ceQi9J=>*anh0a
zEHf)#Pcv0Jii*S8z_fnR!wulIbFh_{Xc;ZA!h}sIPq9SLf?6LA0T@^Y&jK`D?;pER
z$}tEPAg|o#Xzx=F&liaBYe^$Yg#Gc`00ny{*^JPjWEtu}N9)}BWQZ{i^nnGKbP at BP
zB<p}C$Alj at tMj3bTpaz_Y2aY8fW?<d$W%+{BR>eQ(2(YZngW+DhfdqUSQwuI(+Bp7
zNF@~h+9p*MP#tIUbh at s(5Psr%#e4>CGj%*$<76AxV=x*VA6zBU1V&7p3%jU+sxJ4X
z9Ax`0DGRm%@0hVuRMnB<2tqaJod5P<6IW9tlOmrN7TS_I at LxqPT_P?)+S at Q!CDXr=
z`WT<1)c5k8jjj-4#|7d<)U*~fri-ztV*=f9=CiT-zlem~BznOB;HjA<b_ at 3msr08k
z*%%9dogKJoZ>a^Vhc4U$Vx@`I;KkZSFw5i%loRHUtK?dn#E;GsM38OcShl at 427fcm
zPQ(}{=%mErgV#X)-P1ApKzhz(TY*6)%3#ajU-?M(`D$0BGM`5I+&S`5x;jlLp`K?j
zk=NB=21zHXdhRWr1xnqHb6Tz$3B<lO2&=Kso{V4Hm$Pf0uAM?Bvki*C_yD||0lP#$
zv6LZJZap##cQf at ob&_;BIbfm~5=iQ0Uh2!2N0vDfEg1e7xGaYnofPCx5%n~s^)WS)
z+D<%ik%6Ni;<n;!B-B}`u4q7_c at a<fk%z?lhK#p0D;kH^XR7N>tVxi?*yQ=`nz at gF
z5G+7hh;1xzzpQ-VcQEp)5E?H!=I0XwW?8=Fq!+flEqACE``@7HtgrmCSyt0%{E(em
zC9Io5hLo=L#8&S)9fG0o+eXG{R1HW=HQU3#fmGf}V&xd^x3<*yGPVg3-HbbV5fH+k
zz{ampFtc5Ix%_bX6cMc+E=}#i&4&SB+`UXBEN}Yx(u)c8D#>8fnI+u(;>`qxV-dBN
zZ`&TyDr<ZMRa5k`_0Tbp2`^bSyd3jsT?x at k4GjT#&$S%hlFG2^7*3Miblc0>C4nzh
zz5<*HYMW!?(-5G at Xi7!9Bl$9bQWK~tj$c)L-`cp at m@9H5+6TSJDR6D1bFdryp~vl;
zJI_L+<;qnq)dACotv`kGQl?MNair(EW_xum at u(%)oe<NpIw(lj$edph4LnSwXLI%n
z|98pyvYdADRW$=!elf-8YbgC0)zrsTUxN()j+PEDCpGcQBF?F(_b3e}27aQLw%;Qm
zS9dcfx&hdrA1Cujnbtwg(ED&56#d%&Q at tKWOEysZa@iO;=f$k8MzQH!<`XK+bEgc<
ztp1lg&2HcM_W5Se#2M`Rl_A`;p)WKFGC*S&#b$_4m7=)hK;|Mme_D+5J3$p}XM%*3
zhIMIcCx2|<o3;5%kt5Os2_OV!x{IzbO|b2)j3$^-7bB=%(M&2Ijxn&0=&`%JRTVZ+
zg$r%5_x5@=Ogd7F$i4^<YH4VtrK8a_b%J^5aL00dO)uQ>c4>t&MHR+z6K{7hx+-Uw
zG#5M0HJ_z31=(tkJ%ioic=Mr|c2W(&9Zy8GFURn~B65FAb}f<S=h%B=WB8nbJLHyb
zzP|!W?f9lTy`x}2m!{!+>i%;1-S{CIDMS<gAOLeFy(4BdR-$Srrb<8u<%QK<nJGJj
zY>c<~h@@wM<gCR$;%wE2)zs)bpZBW3_IaTD7^sE~w)#=02Yl5j*X603B#T#fJWOvC
zpG<C+0lyUF!jcj{{~y%@bZK5|^DaCYPWq9Kg^gP-)i_j#=<TEutXUWs&_Gdt2RwIu
zM;%GZy~G7u+~10<b#4so_lm^3pN}b&xHuB>*rkDaep%gOZt7N<;;cOH{oZrC#GXru
zJJnK8?9Yn5Je37+Nb-UbSQ};#N6c%;rK}>!Pn)U|{I|f{!ocA0w^r3TR^|2ir}&3N
z^rQ|BfH|QnNHa7|E7MB>dpvXR!MjztEkNoJp;IG*co;riCSB{f%kq at NY5OSK1rD<&
z?|5l<%uX-ql-;3l(v2oo^#B3-Y&Z at TV(Z-3zU2O=P|(qZMJ&#3ht^o8#gd6KU70*j
z)Q*ti^2;3$E56q%``oAm+5^Z{3dpV4{U7S^`H0F2h-E4kRaJ5C%a4)46KM{97N_MR
zr$_S*z{Oqo-C_L!MJc#rH`g%N;P~6L&d%tuEwbTg at R|0TLi88_sSe4u{cllDuRupO
z<v*0)ht^W~d==31uSg5#uT&Xv?C1w<yhIsnmM at w{e*<qDqmlDkQYCv~lt7DQMW7v<
z5LH;vfvEcdz$7vb)w0vJV-#FQ+TGnzC`vS|84d?f7825&*$J2i^5+bRAcsJE5l158
z{DZ(_61hzGGBCf~29!)e$YP=g#=+S(0n74l7y${8UlH>bI(eT)F8~?^p;;^<#q<+_
zfyQTDIit$3c5heNCJ8g}T at qb!d#2rg+N1d$wVHVrU1!=3n(M>`!kUuw;I9b#GXa-|
z!@6`IJn$;r5SUvT{u3m6Whq$pii_)KR}T2UJ^)%Zkq8od(Q%GeV!evCiDe4O0*~QO
zSrdi*mzVsvv?yD|4&zQ82bAsNOjLck*{0Rn+qDX((58vQ&+iASH3*U>gm{cmllIaR
z@!I$YqL;9HH(g&}vXC?ht0$pjkTQ>tqUBS*_NlP;xwbDKV+*Ujd-_4;P68A2P=tvv
z(uOfbr_L6GR?Z2H55KqWeL^2qZRFYYF-Kqq at i_T>-aHr0wh*RN4V=+9HVH*}lfqdV
z-3QDPaS6&gp^<{;A8Des1NV5ySzfHp=ysn`+hl89I(5;AmOeL%5AXD&Ao(&p*VoF8
zIc4rRZ++ik at mngF;P0Z%l$#qDMzUz@`0JJZbcKt2S^!S=u5h4#0iO^bd!>yf#491L
zJ4uknFj!C{vnpTEMwv2}`?b)#5<?QENye)<5Br4mq+<w=TXW#jZhyIbN+jF(yTIiX
zuW<3H<o`h7Xs8cUmY-OZmz2?>48c#P&2&1?B5mlGZ9hn*VFp at uEY+YGT`t~}j{{h4
zM+H1G&8$fhgaFJKjq+db%d^S-jrz&m1WxM8iH?qi(OTfA?`)m_E)CwHf0gSr5OGzB
z-dLW}Ve}bVO7pV=S0xW^oTJ$!6C4@)9r&_&i=Y`fFrOS^17yz6Zwh^+dEs{4Sy%}7
zh*O?ig>0o9hSK#g at rZ*xOlMXb+TeJ0rK83%Wzl9lG8>Jl6H#KJHCxF at Ks8yxv$!Se
zC~$K|PewLojSZ~(@9yD&Y1b9xmhoC!IDZi*zZIymW^NIbj?>v*QXr+b?{+F3fX`by
zCC=Kz1$NkSD(S at c2g2<9I|iv@$ewv$jsPS`CT3g=)?=}X1bcVr2@*4<A&iJxKzQAd
zJbnNKX*$8Ij6{xQ)&%#SW7ei&wyWqiLVQ;Z@>|J>i at vM>(>@*aU$1<u9C>|&yHmN9
z%YU?iqJ`Bf0Cy~MOR!Ca#i{&O)PeW}DN#fCzdf=+9<6R12Lmf_)$hq>-cBrCJ8Ig|
zx=NxWzI<cQSOZ3u7dfg?3onXCs4oDgu?>rHlNYw|I!#0Ler6!prI-su&?nwbfa1cJ
zLV^&}6Y&+k-~xEep!HB!!oEmv0ySB#%8gtA?0GZn2SdY~p(IRE(dYJJx?kVIt#zH5
zr1Rv{*~4-03md~$nm7d9n*uLMblfTfN at 3qYpJadH<goQY?)LXEZ=_dE4O{H5$Zfu*
zLiY7dBM_ufNbW)Gqx2DyBR#{=;wOJ8>OW3yYcbw4TZ25wLWbDsLCFzwz%j}1jOcq?
zFyAFyji3dD3W~B}H8a~vJ-t)-zd58_T)H^uEpRJ`AH0dl;TitSviTjhb&;2hc%6U}
zCAt*ssEz{<1_$Wx&|0vFiG6A&<?Dc#*76SI*c!+DZ-@$cC_+_&i!VHw8ENaYe;#ax
zq<6)F6_U!@Ev5daC!2$jRkky)UM>^HE$FdDloTxJ)<JC$9c<Y_gM##Iy%{xl at o&4B
zt#~u3#5Da<uTisD&!z#~?=rA9>yG?jAK}B$s{kTavMV}KzhM*48f0sAWxt*`$+D*q
zlfUQ0DY+=?!>)Vs6VQqkBq{cxWQOsxW&kN8WxPPxWxj`-%6tD<L6|*wRYDbOz8c`V
zF>vxWV at JU`Om_U$iY?2`bc)WM;7WpmaiwG_2P7fjZZTIPWFb}P3`bb?JoUu<F}#ju
zyba|X5lgNmB5vMQ(~iVgLVPb at OU5q^-ZyOC<aq%E at C&`syuI=z2^$4N_srv<dEnkX
zf-g at 09J_7Nh<L|3aAjL~S2<l!yUO#n*sw<sRLpmmmEhn3U7B5+k;Eu0P#!EFEe?y=
zOiKmGNca7jkFSqKb!y!bvQ%J!NGM0_j_#1zm%ejHPG@)&parAPmQrG2!e8-_Dy2pl
zoY0_aKmjtw_E{bl_TcM{$Y+C`4jLqPGaCNSPvhho-M0Gg-;zbO54z>XAu at g^P}Gdv
zK#k-8fJ%H<>1}*#P(LMNTU<495d)WF8-8IsUXzOa7Nsb>8vi9rN8Z at C@<P?RY5V5Y
zH~M#_FK#5eayqD|?s2v?PZQwnqeuSp=-OHXpi1hH7aI&%FMFl(sxE9y7#?*cV!eT7
zyM~MBp9U00k;rl%>c0T?<y!0uJAbCvB|uji9>Tz>WzkDJ>rQ{j0B1L*0^<|(FtWAV
zG4v7 at 6kdf~k9QAHzYZwe_$`8K at y43U#mAgLQ+qm8m>R_PBX%MC66lp=y5!GSibv{b
zk;vlwula9U5*-sQSD=&qqLE+$AcVM6d=~*0v}bj#)Md}SWlgIk*NbQ(X}QQQL24Jr
zNPCb`C&As>b`W<(7y!w3ABTA&`pZ~}eUL};xHoN5P<;UJ#BXnFyCI*g9{6V=kyHfH
zQ;vko0YhO8nzJ?&%&<o;_TH1EKEUh?{+h>f2z=^W+oAWUEu+rZ!IDY%Xc2O2NB*#B
z`+-u<r1djvK322?@7KhG%Uz-eLOsM+M76~`h}IH#q+pBLLdW^d2G0$DOd|kd8;y4U
zvul4>RSUFr_hxNfpMaWf(?4bUQjQVopN{fmC}KA|Y)OK;N}hg6s0dMzF*x7;+s<gV
zzv-KfB6GNz at p)MW*NfdSYlTn%t at Gk@30I_NatJMZWqSZm-{IH|o$|vqK|D%zpEx~{
zr!MLr`=3>7T+ at 1qA0j*ajOw9LC4D!*qv<UD1Q-#esPk7PefNTKJ)=sIctss&^z`F{
z&=Nui_skSu+lM~|IlM1$Wg^pQ^e3<Z3<Z8umU=B~u$f-Ed{$dx@~1<=@ZIdHh9Fq2
z3u?U9#-xrm1w)<_un+=4gKfka=O)8L`8ceZ`Cnw!3`;m-HX^R<@fYePvL$$O3Q=Ai
zW-v&}AkMshLFGd=#O0)LmmfI|-bx_hwrx;h2ZkWNiODAG3G!0G3IJO%OL0PaCSWMY
zRF|>h1|Bem;IQ#Kmt8 at VeQG_`70qB_x_3Ee$pQCBV(DgCs{HRm$u7<YitRD)<T?V9
zuv09<cJ1CRh}nJW*CHQEkT03jrN<=>jwQh-z4(TnPC&jfo%)}NDX(B|NOzN_p at R;S
z2>kF%a{*D|KA5+f4*A)3+<NF?miXRLHyPm!TsYr(l;7YDc+Y1O9~su08Yy at UE&gPq
zr8iKTprC`a)~~X-m>eFYt{c>Qk}%68unb4}ZTx{~c0EPq$*Mf8_h-cMhD}xi5t$=U
zaS??p2>R1TaE>h8D_I2l{<Gl3cAQ at 9i;fyq<-~wz%MBR*d+a~?G=1{conQt!{Yv6s
z%_TRMFe??U+mZI7)FHQzV9{X!Iq}!@VgWe?<Ai_tVyb3VAG!R8Svet_*1%>@Is|g%
z45F2URyR^*ETzk}0?dsC<!w6Raa{b$L7Z9vNDk^*qP_b(N3^EQnQuu#^`PO=sLL4x
zxJTO#Y*l3V$deYsoCTipRAsj(y^jCv$Duu_YyG>mpltimnr;hW>(Tg%LcO}Sn>5l?
zk$qg_B|H#<7TSBkgSNXpw6D`*T}2Jf;T#JMr;3d*XOQ8&Yv`ZwxlCNKm%8cdw=5-<
z at bL}I!VY9FVK76&n~)0qc^r8-Qnut#-cbj{CDDTS6_Ufr-e?NJN|B1%8^F<bvvm`+
z4(^7LTw+aTnz<zuj0$%dL1?ZWcA!kr+3mKC3+Nqs_Dp~#Qa{<_W~gl$={!PfwR`Te
zJ(Sh5;JA}&9WhF%(2VQUF|s`vfYD2I<suq&-%0rtKx-&y0N?#j%J6VRi2QCbOtf+b
zf0k|>N!vZMlMbb}UZ#M3+NhQllc9#vqp{v?cp$g0;=oJQ=XO$!2N(v?GRQNf1KqM>
z at p!4LnO*xcPO#*=Bn_p=MUEF&x$ArjVjRORLF4z+659ehp~(_$!#t0sGNzI(gEY_Y
zxcTi%K&b<(F&5TGF1}uvcp-_`nT|PF%H$*s`aI~Y+3kpcY&UMP;&M9b3T}W8<#vA)
zb<uTxf(Paz?;bG3rijWfX at e@)DonS4Mt?0}b<|L<^@FsYz at xm)RCV0=3s-?Tc0I_b
zRr=?o0fAIyV_#zq9PCxW3gd8-3V&wv2IP!Y{|diz%%<MhIXbjK4cVLJf|Ysd4Y9?C
ze&cq|?d32!U7AD`jRMyF$X7-8*C6}2oUr!PneQRS%ZV+O+J!J6mf{JQ+VQFI+FV9I
zeG{*V0QryXE%w4<{JpBpV!tq(XjlnA%pB;9<y%X+5{7YTJ{NjB#qcFKRxYdB5bSLc
zQubxIaKIsrhJh}53isU!RbfTjQaMHt!_6VNx2 at g$>6>vpdb>aVjz*YZu#V4E6^>K~
zD+;Gkz|bQwBU?y;e3;*#iB@}|qjdFme(!Fc3*cO+K{04I$Dikv>pL=~(|B4KgG*MS
z*f-8uX5OWgYq6Rs^Iic3I+82*<#q3??$QNVn at hjSgIMTbv*j4KL&1WzRcq->rF)s$
zZ+kMO#ApRxnGP?g*=W|Wc8stpaV56h4ZBuM>H`TYVf`zg=lg!YkzByo=D<8RvDXy@
z;D;E9<&)y-dj09r!rT9>)T*ql4SJ7<C#iO_!bKS<4_$~4%2XqkOdFZzrLKO at Qdx|m
zcggJK5ef#v7|NnI_TUBvm86LiEftH>fR{ICgLS1}g$kwa34h)~KLs!FD|bPtelanO
zExWP6v!$byDS{lmraJ}a#H`&b1=0X59VGY&F$8UGZ`rs^E8twpJ}}Hk1!8(8W%BEB
z^cx`MM(7^HOAjam(zCUOw_!9$om6Ux^O*0#p{r4~TJvq+hIy%7WW}wCp;j+%)xqd@
zMphw&tgzADz0%%(qVGvHw|=oB=-zMDhZ)=d*m&cr<kEEtast~yHK9ng+M|p_qkfCQ
zxE~$a3le&t$q-7Xen+H8b)l59PdqNr6}@~uxG~d#7B9&n6P9_{ZmbR5Q@)6uFSiN#
zgU1~<mWuB;VKt+nHaj>J8<fp>p!R5pnLhK${VWHkT1gyttpADr!%}0lsEg`OdQFT-
z80xsA;!<_8=UJsCLOWl5yahiGHf8TbrEi?&o9JV)K4szO0qqAEm>d9Tgl%~&<#&_n
zsP%$BP%67yw;R6c^8yUcGeIq6jir1IZk7^aV6Qmpi4%$JC!FQ)mnE^>%&?~h52K1$
z<$tC at HkHAde0a~vV4D@^Z`Q~{<^1mpvlfkb`@eSmT*mF2fR$IJ`!n<2PQ{4}7j6YW
zB$xO-<F4gviQ at t_shJ<jw^tqXo4i at WJS&%PwLg?%DK)!Dn^0qNhPp>6wF<V{1dhb}
z<FwS$`sSZQo9HjR6?Wa>Ey__jsv*u+_^Ee-rzxB5N|sE#Mk}fCf{0_Y){*Zn1~gUO
zQhrn{!U*OI;j{;>i6y?UcY3ULEj2S@(gCOkx%j$2>8pG;5A%3?Ei>}sm!=v~aTZ8O
z{(P>4%FrPvL(DKvlg9WF>{9y|@PWCoE6&tW=$=mv`(GRJh(jyTwF~zVvBl~`o;|?s
z>I&4C{Ub#eQmG||s>D%=*3H)dWwHHpNM9=(pOXu at 2_Xg~pGyj{R@=m>OUb6u;FCm8
zY+isMz4Pj1xugr!*yVQpdPl{bw~?@Ld#secjm at 1A8lIqGC4F*m<YP&C?QK3BijhNN
z5#3<m`6$%JQj=}15WmYp)6`%ah3COl;R;Gjs at iJU>EX9N_*B6&Vt;NkL-$L~lxa>)
zXNTug<<Q6!Tzo#AY4O$Ble#jv`orLhz((sAdPc_R6~SS5WBgfEu$E9|4}$t8E2@$B
z67*0WxT6R;06O^G`j!C`Rk{1(-r*c8hV;&_Jh5oD%;kO2F#w3$vm~cmi2a(ApvoLR
zk&_)d^K_w?mftrR#CT>JL5;P4*wt_ejR)fAgZ#hBgy8#nU(0s#0S*UzLY1x+;fZg?
zP(-q|d^9tCqD!-1zh;@EY!)mfhoHvsmR)<aLNy4Wx3kdMFs=0S9y`TaUGIoSDmHpb
zp0XI;AaUtK=2LDsvAMJmT4wO6@#J=>sWf`R$(&Y2xRI}2ER6repkT`^MD!<`B0(M$
zLY+THdRDzvFah3;D=gc&2zC+IoO-xJ{4XCN&PNZhcwS$PF}!!Rfbn4$8Lm+6`&}_r
z4bysFv1{I73E4Jl21h#--Eum`(Ji>8&-k4DEPDdC?q6I)6Y+e|&mEQh($YwZ){aY+
z3GggarfdWs=b={*Zd{eP&uvXOMC=zSp$dKCT3Y+96>J#WD+w%P2hX97<c}p2t?YqZ
z2^!}1bL2&*>50BXv9D~`woyt?q2f+A_h4O>FYxyx>a8^PSz_hzrGWT~=tNDm6=fw*
z#0FZ_M&+rz&bDH^#o*vd72 at Bo7;wG2v-V0|(H1Jqg2?b(utv^jf9$T&f$Uf-Pyu>T
zIt%YoHY#H=)8y>5gwgPo5k!vN2*^)2##vG3-VijDUH5>%OL}x1Q4L%{ZG01+(%&Es
zv1S>5u(u2D31OuApqr>{#|_%$sUHZtLIH&>lYe0hWyZ^Lhvi>$;zb at NiBs<-w(;&J
z!>mo<8NKFuQ21A_q25KS2f$4d947*F{+<U10S6t6#U|CTWU4~0inLn58E@{UH!y42
zzORw%h42g=#<zTSe1DSx9>C*HF66i%a1Gy7itou#IzZ#0baIx$4f2|T+p(6e4D(@r
z&z#_{1PR`<;2s8V#<resjTh|Aq~b1zH!Hsj7MDRw_FChA4t)^mvmZF{B|2k4eJ%zV
zqZ8%<BcBeu)1v$976d)pkd5ea+PPi+qm%QTbaqsGZ9GH3M|j6HP6dp(%F<iob_RpQ
zB-R!3N88wm?;4i!jdyhrV{u}x^W(5bt(8kG0d!~tXbBkR&J5f59*f%chgW;!1<lwH
z7y?gC`~i=05dt2}KY#?Gh_jZ^oC{G*T=<NA>Xm{CW%J4A=XObnF`ahfLD%Yt+Z;^9
zx6TEG(>K;pkWQ7ZUAiOQv~3k-^U_pgxf!l_N2M{+ at rSZ6AYs}dM635#cYVqDEiXKw
zkf2Sb*&7Xi_1uKRQxM;GWc*aaa{EB-(ptAePAfuIpwBqv?r}K<02EMn8_j>qwu9{?
z9ddt3t2}ry2<JsWb*^>W8s0gonXq&!uxxmtnbe7KG8#LAZc>_9r>13DN@}W}xG^CB
znD==X=yW1W0A(CMxd#5($m9TNy}j@{66P)0veVIZcU?Z$+D6o}_wWnO665bPAS?$c
zsFfUZVj6E<$7ipiKnq9_YPtAW=>zp_o!vYL%4`J7F%kdf!c&vv2lA9mI(|rDxscim
zdhEB=p#y<IPalex)yS!oS?uXvJRuiI(-CwQ)Hwr1n`lhX9n5DE1{(HF{~H;3j+`|#
zx92e@`3fxlXmS_Qq_6=Y<E!y at scb=3`>X`smDole0>;fYnduBF<x49h2<E(hIG73o
z&ct-6BpVT at L*JlAtriF&^xO5<UYMf{XBrcfdQ46<Y;<Ja6IG at +NEMN2jKQXElb{HI
zRlT&2c4x8Tl1Nwt6GrpDW}?pL7V|J#?4CX}8|GeB^Sy?c`_If(E=`!!D)qj5a^z~2
zBZttH_DFo0)*Mm+%iD9>{hl`d?ChLHGn;m%bV<1`<7|NTWls4o<F2iv*}G8i(3gln
z4XT`baM6#RYMZ`YZw|0qCWM=pMxpdqBG&(OWEvaI(FtTi<juR0i_Ao~?|+^cLUx3s
z`Mbg6j9YvKyx8;hlqyXK(K_~xc*hpYN2O23ldWkAzrx>$>anyLCUkJiE&CfKzV6$1
z16dC?+lBF$bR){<*G(PEZtYl&*f1Jg4Ry2W!XeiLLj~DRa01Ea5gLkhCq%F>gaV<)
z#F@&Z_A{!7Ix!_t6B_;38SOvGLDS`QO}4jd+Acr?WdT!p<xJ;VgShKj>*FNK3m40i
zFjyO2+bMP~waP|wE3DbhWTs)RmoqN0^LcfHV7fqmX(u8+7f>y}A6E&R;g at M%{F*fr
zl|m1dAixhZWc(TQ&z_LfeZOEKk;+VmGG0CtFNJ7trOf;DR-6C?bBS5L#D5spmXQ92
z!XeMWlXN at L#e<JBDFqCrIY+$ykDsP-CZ<m*oDDW-tK_4}N=8VLb#l_ODN0TF!2 at f;
z=YHP(3p#m?269cWFNx!?`yBM~|4CcPdO+++WH$!@9#TiBV at tGNcPoVFeH_qrn_}DJ
z+a<=O_=wZCkq at z-$&y~C`qQbW?ocdR5#F31qHtci>tG6 at lw`o}itzSsFg%1x+zeMF
zp^--hhDO5AqpfpP64<iD at C{8ou}*E>5xA5q;~8=U%RmRTQd*81A3L!$!3|~ZrUl?Y
zCx~`lEl^dW)%q#clK_(h)TX=EVzMOb^PYdKZ~AWB+MVi2n^!X5wOf=&`C3%T6g;d3
zPFF9=8i^6>d+LAEfY{+ at K^o7~=dsfH%SSJS4i;S+)5t6p^eZKCK_b7rW+Namv}X`m
z(wmPtbI?`XC}xw)<~PnVxsc?O#;d7aaynpvN+q?IqADtC{B7Q`9Yl&H{S8dzW4A{q
zuVBuEB7(#23G;J2psQH0Gw&mIXcTmasQEuH^E>f~0nF;H at fN%Sn6D#3j3|Yff7Zyd
z{L7gEW)GR$$|<4rI<jbgfJ0ES;8Jae;Uo~=LvS5*qIFN(2Okz<2VgLC#T6r at L!?U)
zOQA6#dR8qUwg%=ThsfN~-|$nVT5*Og;nL?vJ?<_(9hQjx1Tvxg2>)npY!_HMq__dm
z2M at pQA+QKxJg%);_UOQ*=z at 3Mha0Y|0B`E^Xt~}%E(?*{*k5(vFWySY9Wq;|e6IZz
zq|oUbGZXB}i^^!lD*03nk&W1FZTJQWO7P>U<f->-Mmy&<SRk9*YG{_$>X*0=C$yD=
zrJ+|(?8Bfq;mH(-XmK<_6E#12q%}&<t(nHxE{%n!`wW-Yj4S%)bBA&yDw}S%*R^x2
zB5~ZD3_FQYzfV|-b`uk93(A(F)GCbHdL8M(Dqt7Tx^Mn~=Q2gks1x@%uFKVAIBT5W
zD6+DQ9brFaC7VXP;tZ~;xV(kmjriWRTW(LtkWol<Ehj5#xiR=0c^;G)fbCf`HkUO<
z#NLAuCwT(8wY@%GtrZ~koN|mdnq<L{e2p=Tgil`55IVG$TZO9D^U7&GD)a!X(2Yb+
zI$3d!c}F|}p4fKkHg}i@&4<38=3O~W1oE-FZe$%CN3V2F4H|mtq62LcIst%6EdW at 2
zK5&g2NP=`Pf`;rDaL-}xP9krQte7<HGcbZH`rKhJNXLExIsWtS;?mRMB=CG1$7kcG
z60`oj?5w=XMp*%Os0-XihwT=KcQ<h#)F?{5-plHLT));mSz7s%YD!2BluJe=_RvK(
zMN$AfFN+E!a48vrJmWTOYVrV|h=(%f(!bbw?Jz}-Ak<}#7WlFgg;k^JPbD_E*e3SC
z*&#bUro$>Wz@!!cS?R@@m!PClop1emry9&@o^&*b=x%0a*!5j~3L-F|P2lTY<Dy}f
zZrQEK;RAJ$t{RWANbY|uCyR&dw2tQ at +z<%ih#8Mw(ab_Vt%I&F3dg-ZSXIM>Fz<>T
zVl#DkVD_3?-Mx2;<^&+R)FiR~awgHf{If-3Hxv3Hrs`e7`d5}76O-{mmEXyrB;xdm
z9Fx2~A%byOI`!NYG{orVyVqaIhG$({-Q}Z`>Ca;SFt+$CwVV2Sb$a1n&_zHVYHA{~
z5Ek?|d(bIsChf!=VaE^{g3KPv$lpBdC<S0SurXIwC7T^b85V4$iRcbg6ON8lX7ZAn
zjDWXxpm)(}g?(~pAL^6{<Zw<<DE?76hw~J1;oh1F5+)Gu6lD(8OU8N&0(m_p`4uo$
z<2FVV8W;V$S;HjFm#KxdPn)BPy)eb0dpXK3LEShE)X?W3mz``Gh&70az0SMhwAnaJ
z3W4MOQE)@uoJ$hawGm-wNrV=GyYi)4+Stz7kXv&A%?=waEi7s>o;?QmA1YPXS2K2R
zUoAZUm(NG8X*buPK)_Y4RybjLw_3pk&KI=)BV^Mmjrh!)7vnrg!!s0DtdvRUxfC$X
z6%^AxWMSwZT5vhpn~p2O1cCbfT7_qbf1;SD2ZUQjr*YbcyCfpXp at 9`j{yOlH+t}*e
z at QyWtiGOd$;m*(s=bqHZ at +2W2Mx#x1O>0}gmJ at e2X$cz=GS!yHwM3H%Mo`;)b<jgV
zFV#?qeo*P{;A!SYyq|SLV~#eP{Zveh4E)#e!={$!CUpeS!F>i>I}c7wEmM;)M%x@@
z+`X>qV+pGg#gLd4dyRoQ3IyDHr-4)KFSswH=L2uq3H}vQK3YX406PN at MdR&tuL<^D
zZ$3ESRZ-v!V8kI3jinnQtkQ<`KmqD?hK76AB^L3;lP_JY*z?S<WF`A^ELDq_3fZJv
z;NS7V)z6G{)%}>A;T0kwzh|AJec|1tZaFcS8ea%MVLIh<KCOeh2}P~_zxeP at D8L{^
zoYFVLcy=HWCsh#H5jGRkM;;Tz3e_$`;8--d+eQh6tb^61=%1RS at rU;|-=jQL8=>7s
zTgR3=FlLq&GjT7%AfB{#D4a2$Q00kSfhf8NMp>xR+zQOV_1#%4G9N8#8Uz_mV`j4s
zySbLsu=JBCAQ+P~bpE+^UzohvG0aM7<9E&x7VEv<$O4o0)4B0!T=r$YA43Cik`XKm
zG}VQ1*+wvCSB<&WBuA+V@^pqz+%?8lKtaM^t;BH%1Z=E8kty{`S@|@U<)r&&ENGAk
z8Z at X=v^=WyXR04AoIOQE)2k!b9TO->f+nu_?L7XLY^*;1Ohs{kSgLZMfQ at Gc%DTFI
zO77L!KUX>=?AU6(J>pQUePaZ_F4?n at RjsIB%+3c&JE_XHn7{TQd><9 at 10y!TM3{}e
zO{Sexs(fG;6V>R>vXv$xa{#@syWw%aTD0=WLsJc0q8@)yWO!ljDfP6Sxt$Ifu+?_8
zXf7BnuTX=w2vdR11zmdg-fcKYgkoA1<{(V9@(4*F_sHFGxgv`)+?IiiPE_-mX at -{_
z8yCx&RaiB)XMf-6p@#tU at R$fclmPz>((MDIi%Bz0;kJC*kY?Uq6De6+76<qeA%a-h
zgs&948cQNCwBgYyKyp{@V|PgKBr6U#5%A56nKV4cWON<q_a%9TqtBKY4DHXq&jO{e
z^r7wG!eh3BQLl|Q#V^INk0`-J!tV`_G|Vw+R7%p$C`blwk%uq at eiogIl9NIS@VPry
zDeLZ&k)>aF%pj@@zK;=BCsz~2+`8&-S3eP%yNmym`_67Y``l9(_wo~&C4{K at juz+4
zAMn%2plDdX8cpt=gw)X6<E47c>Pg-x;79(bE;N9f at T6`MxWYbupkeMG3#tn|CvBf;
zqvqVhKcJj}G$q6bbl&IyD5@}ckN=j`Fl^MjQnL?n8*WIxIARjMv=`!iNQ1ZQltDz>
z;XaYPkcR4dVNW1kuAtk#5}t0N7R7+!opq9f_{Sv;U9+EtB7rnVej{sN&w(V3M9JQM
z0-%Esq$KIMVUd?0NA$cTpBbC1YkoUeRdbQv>f*y0G7kW~-H8<fE;s~7z(Xh>V(c}6
z>U4gb%5O4oWkE`29Mac?^D^6M<`P>UC)}LIdV^32reQal3@&2~!&}gj7QR1Xt{l99
zx1qJlR^M`uT`l|CmhjEOJ~f~wg=Ibg3eU{#xu#7MQoPAZ!Cv6VA-g+(;p+P|rvKQV
zSCTamfH04*9KwZoF_}9jy*<dx!1`jb*L0o-&IG_F`eTSlvMg}}ZGGl!LUKJMQfwfA
z1ulGd8ci at x#Z_5)tQji|KO({qoldguMqLIY;CwrRnUrK6b+7{poJC7qfSs3wB!kbf
zS)I)jvIh7^{rsYS?%+cFPD!=<D at 2<0moR6TMm{h}S=b|C<OK`J*C6YJDDZg1xxvtN
zy7lE|&6C;j8hhCksi)S25WHW;6RBJCZ>(jd*%T&GQPnX6rm_>j*3U7RnmQxag9}c1
zLkpA7v-lUZ$}0N56|51>>(UR`7I+Ixex~R2r_=-m+ErU5^FwMoIt;4#MOTACeB+%$
z at j#&Mobib`YwBd+y)ll^3e_gnyXQm)$v^sw*6DOr%moj96 at pg%P-T&h+l3nm+DmF0
zZ|O36Y;Eh>)q5Yk at xh1An5jGy2wXiPmA~8FU%~o*H}MrFcMvP$)OKdO;^O@{;O_xj
zHVzfp?I-q1$Qc;04`6_GV%y~DFGMRA&l^cVc4*d30pDkZ)xY^vz1VN-wJSnvkE$WG
zt-Ug2fMRcmG>FWrSsi^V`j?Nc;;Q#4^3OdqK0vO*Nm<U`>krh|_EDt$_~@a4RZaH1
z+$-B=P3|mPIK{7(Wn<7U*)z0>)kR8OS6<EmexVdLZHnlF7v5L!T8fF9=fiDSwU1MW
zU_u*#T|(Bde at 9*>9QDj5A*Wz`X&}OOaGc_vZ6_9q0uhdsl+RAJGK*BF28IyLITgp?
z{Ye0jV1JH5wuMUH>M$u<a|F#0O=9md2wraUm7ohn^j?Z!$D<gc)c(x*X52AV5|`%R
zXePpjF)+*sHq;>1=t`HrYmpV&672E;VQT}}+FCB5)(j(aV#TdlBI(8Q$vjKFVu6Oj
za~vEZN5BCkqLWLrC^^wE5K7e8ciZ3WY)_B$<CE)6fKdyY+>fn}-c!L&8?~2=>O}P{
z-un-e$CmbXswD0f(NMT<h~$P=Wa#vofWrX&J21?~KY4dv(3w5t;2mJ8VCbPVX#*ey
zW_UYMbPncl%B{Rb_8n|Y_uZ{Od%T=|o`elhTe*z$u$w-!7J8h#F`DgqsUY+q2jJfl
zIbF6CDlUL;YFG;PD^EqrjgUn}Al1b*!381r+XKXA_(Q-}bmM*-#dcz!CNwh!cec6O
z0_|yEdK{0>of8Ky2x8_*QN2~+fe}m^nklGzqfimprpA*q_oNBAwiTY}gIj-A|L+pr
zOp^4+gErz0C+3I2$0+{{P;1BN{JMLmjNc at lr0D{+SGXUia<uE9v#(a%x7`1yz)fHr
z?Um61u>zF-iqJC{3kA*z!-e0pXE1uTs$Ak*86&-}hhNLR&~3%LC>~EEebs6alU$Zj
zGrAq_`b*Btv}_6m5eP1l3ba;5-c4p}x^XiEd0dYOCZ49T*kqAqMaihg3~SAMS%TWX
znv_4k_|tn4wBY27%58m&UGeFqzaz&`@sv~Wa<DDrV}27wirrC`7~UWbgqE8|^Kl)_
zb*sUq_{o?6^^~?D_fo~TfS;iHEbCfrZ6^E!9Hyahb@?1n965$S3zCjVu5nUHhfili
zXQ!6j!sP2_sXi`}b^<jD6V5PaM}`;W=BgIO&6LI>gqphbeArggC5+y(yG2j<+GwD-
z6}dfE5}gI)%O88RazQz}^bEhJ({VOFNl!9SL#=aWCg(W*NBZLDIh>Way8#Ux8VfI2
zl_w_bnqA>9E_`FpOx8;3P%Z#6EHkfM<ozz<w1`^z3qygmgbmybDe^{3iR|HWlNrT&
zLDnMK<q$T_iEqYFiq&or`^OML`3N;TXM$s at iX^#&ei0l3PybvA<p+-4bc-tEuUwpM
zm>Zz86L&uW?>KEuz8Z-#hgMAf<)nlX%3lS4wIQ5UzDE2wu-&nCCA16oBWyOos1A}v
zNb1oW at VC)Dmbb-as6wZbMq8~&Wx6{<*g_n*pT=nBvsyC_(R}mI9YVc at tf`NMplua0
zySd`k#Cpv%J2W?yI&=L!kM)Mr91e0Sh1oy$@^zNYH!?=BZ&^jPzgRogFc*r>7nEY$
zz=;itEn|=DZwBGtbG{7168?v<#DC^ngc at jImrY-P>sA>f_k`=04NcT7pCja9+#Shf
zQzh5fenc@!uc-1%#QS!_3dL^u5JLSZrjsQ}P&xOI8T6V!oTjHl#xw!5r0o=>^WtFt
zCQPmmBlQP*XmUo1tPl2~G<(u_<Rm3#JKyC?f=#c!BMW{p1wiJ1A8{&^@uw*811W?K
zU9;7_>+5i at 5gm{jJ0KHj>T at g+r8;+wSebfJW7cqwC25PcyTxP%1K%1e;`h|IiywNP
z>p%J$E3?wtv(#bd@=u>`z1>Pf0P}dHUc%7yp}7j~6(}khc;m$>`|1Dgju>k*rS?`3
zdrdJ<Ru5{l(D-iQx5SHfG76CjrO-3x{8|B^C-^G|YWiEs<{U&mNZTIlNlhu^XLU6f
zF5sST88jxb8SGXE>ZT0tnlGOpT08*#g{r(Yg9;stelk2Kr=9>3o$b|&TsG8^BxGpO
zoQC!9J#FnPYnyDi%uhrI=q=>T7QBszgi=$Hc&S&<3FcMgooiimQ{}Ywg6pSp%{pS4
z;djOtOqn0R<gQ=^1Ao`4Xf*{DjegGStAN&u(?9op<Fz73q+=TO)s_e2neC6-;p0IS
zXx*t1+masgMyuQ=!T9=cM&K??18kXmz_5_+Hi%P+JGvMmt|$p6fsU_3^s2&oNQ8oD
z!ZS5x`=kHbrS-bl!LIne08AK&i~6O=hd(FUzQ!HGIV04ITQf5bOVQrQ=Fmq9@^C+o
z;F02kVl8V679Z#2$bfD)Qy%C7F at 9m}2l9{gmfu(9D|YdD?6EFbS|kTFDOj<8l+j-L
zRT9qtB%n3$S0~@3M at 0&$-l+L at VWvt!Qx_PecbRy!uZAE_H(`_Yuut>>tShnHEaKno
z^btd7hDXH|w3wLQsaB2WJ`|9tJxP(|GDNswD~J?u&psLGxQzZV)ekL9-VsK3si)&h
z&l7-aM3inIJj&mKgN<RBLYNS&rxH^i%g1kz{#eSTxP$UZmJ*-^erys;2Us$P2 at Am8
z`PBKmd`aXdxtFn`J4{9CLu{?%KmOUrzb&VS(*#U^*hO}=!O9~QR at hU)i?xhq_fyYH
zt2?|UDI6g(gM0Tg>~=i17`dzF+T2ijH({(g!)`6c#>}sZrV;@OtlVf1KMY>vY*E+~
zi?~nNm%o}cojIeZWYpfBt^L;M+m<!X1LUrT%VZth{9pXydo5r at Snry+=i`aD^|kL`
zJuSBX7!#=dp7tJk<@BD%BbPcTsibhJB2|?puur^a!u`!kt#_wcJg+AZgTKjtpV9oA
zRHKTp;%cwJ$+1*dE<*=Nb{5C0qzyM6>P6(6k)3~NK7Rl`K*GO%WsRkE*e01bkk1^t
zlvCG(xoeWlJNo!CmUy+xPubKNP^KnB`@z+}*;?bl;ZC}he0*R*9nKYM__<6Eg6Fh*
zq<;eJCNh`>3QM%hyTk-1s6W!<=w at P^n<{D6WA3)4iq!TQhyuY3q~p_SimK at SVQpsc
zm;)x~trY3NY#xPu at X=gRc`k!-HA_-eZ8x at zt;gR}KY!`^cNMVrVICyY0q~I2-KVs)
zu-<Jv0r*tf*Pva3O!J*T1-BYQeA#}oJu$$*;jPJ4wR<_~0{Y_zySU-|tE~3e)7><1
z?O?4K;I>iwO+h^=bVyE3tkrxRV9^p9Ev^=c;yu<o8aF}CmvtF#+r^pkpM=;>_a51t
z&EOHI+9Iq$eL8*Y-GggOj|Re3nhvgjWi%=x)}t)9C}ulzyE9Im#X^dtVU1ABrGZgu
zDE%OUfsq_;gh7)1A9SABP$)i+wD{3;CTp{z>gI5TvJfVj+?GPrH{}e+`P1Q~L8Swl
zQ~noXnfnxa<CCo>;GPBX!6jP$)dZg3P*+rJ$0CY+K|PE;5*nC|g7ccA8?~tbF6bHs
z%E+)Us;5QQ<_kGz&Y-ifNTVa80Fn?_NE}^BB`~c at tj2`EzsONG4YAo8xeD_9r_epu
z7e2<(`~fl1xK=23=N+FmdlEP>%Re8g_ntlW67$!Q3O1!{0H$l`F+N+N^3GA-pJr*S
zj6WEc9xP);_=#{;L^=`B6gn_Gl+>>}uM`){<SiQD28(lP`rtX$ZB*4q$)!<dhOrKP
zi3<O_p_?jP14zh1O#*+#8Uo0GW>|(IDb=~OzUN5H`}jCwuZN)&iwb*YGZzhuc at ay0
zn@(;f)Bn1-L$o}nAianTIvaot)8{COcRdaF2XRxeid|x4C}4po<<T?T#uE01A%C+=
z9vQFY=}4!Uh8}AfP-K7xH&K9yNyJ%bf3?H7x<Suf{+*N<#AR|R<RtyL*=xh}T^gb)
zqQ~)J(ZkuC;&PZ;p{HllNKTL!V6zM4Jczq!3?Yu84J^+CyCkT!eKf(nDQv(aMAyoE
z!ZJL{K~|#5rElyON^#2zgACOKG>tmyb#=`i at NIwuttY+%I5M7eWIH^HI{lk-aCX@%
zOv&@6AvBy39?)O8BS#2Ar at K!mkGe|WjbiO1%qzmqV{gjY`or`C&<0%m*kGu%8Hnw0
zTCbFzQXwyn2j8=L7K9;eAC_l-+C>(yI;J-Ilz+QN7p@=QMRQ$qCbEBs^o_XoPw1v2
z=Wn6tgBXspor55_Dog_pz>p77tG&-?+^_f8j*QmpFAkLin{J?Fe?E|SB!9{<HBuVE
z at 9dnq&1F at G+ZPVUDcy`SS at U!h+D(^2X_Cbj^W5+rUAxhn(ZNf1eg`kf;`R18#G6mh
zp!R~YZblw#kqlPUf_=RTj8H5`y|;nOO)j#;1ya*=!CJ2pu5Ub+;3m(R!QUxH9T$CR
zx6YO%r1ttp8^}*~jlv%fFNYj~XC8t(kk0?|CN+z19<QwWu29S-C_1R#Fm?n$D|M|0
zAk*eJQik}U2%_`kZeW~=`iFR$6!>U&Hm at KuyaxnXgEixKDC8vvKpbWr3~6HIQ<%Yc
zyg{ZnOLeyE*vuOgG0syGgmvVc7J$vP!Y?UgEOA-IIlC=rFA3B!DP?)h4=9MTtK7>j
zb?GKJ at JqZc_2%qyica(;8HE~lDnuaVTDX1?DT*B~$65{8Ci-G<AKnB_p|cX}v@{gg
zbXZIA9hf98z_;PT?Uz)ouH>C;W7FF>v{#Y9addU-PK{n24$zb0!WnUp`~QIgOxXPx
zYDBCf4+6JE%-eyx3Vdb(zT;gEm+>sJ4Jgg<QpRTNj-lC3jD{fSU2A)^TH4r$jfyd=
z5T}tsR4Dpxy-4%Sx>o^R`4UGo<k<>$qJ~?Hgq?~_Ce<_LPx^1NE!ai`^JY!&TB5r8
zLbdxOkfNi`7Et?yq*J{yOzZ%57X*O#f;5aF!`WGXeemTtN1H5}JxEDc(ipHNZ{~@~
znE at vg@Cdu9c($tdWVC1O+16Y8Q0E6iU3Q?-cJt)YsTgaemPf`u`iL+!LWN966)qgH
zD0<p(pxl4%mTrg*)v_P(&PhBRLw1olvh+G=edeoPeIoHeR?TVIYnEv{nQ`Cdl)rP2
ztpU9(zKs)=Z<W+KC2goNr5zy*^s)jz;^Y?A(sN*FyyX8Sa6OAAgD<4v6vL(Uu081L
zi6&P6my at Da6mDQKs?T&;NCZ!91mpqo8?%Z|0n}*r*h)Ga%~V*F7^@+)`9jdrkk5a$
zCADjVegRfP)W~_4GyZ$jG3led`cX|(&uMVU+0OtDvVV3KB`a=z_L`|9g3`1imk1dJ
zRHs4hD;MSN_+2n-8-*!p<y#gny$?HITPm7)@dY_e)7lz$?s_C at JR3G|$w8%EK5F9|
zpH)Bjzc{luUqB8441bQKaJeFmF+M_lKDy>4+m(1INGUIXR`iDuP64z~Oz)}VJ|ej{
zxtSSG*+AZJU$a!e_oN&x2f}Vk{W0E3vQ{%lL&_L%NumHzdT4Q5s{#DwoFKD{!|8Sz
zRA at LxpJH|%Ja5-1_qSP(-z})^D<ukEGFK9U3f$6=(Cb&uJ-}pNsM~aXOdl~ETtqTY
z-q`my{m_YJvgHiq8S at p|pQpjCcjgwmY}W&8uXt-JQ#(+;UesvUz7FJ|7Fy%**956b
zz1L#f*I)V_HB>zI>^rA!D61=mM{E7$+;xiJ)wmPb)O8Mg;kQ at zGu$HKo2dW0 at s7wM
z#qF>%vc~M!*@|A}K7x^p*EQ2*`j;3S!Mg{$I1Fg-7!S-6#HD4d5kAdmK#e2`6w?S=
z><X=T&w8U1>E^og_JL5L-_*ibx{q^Cac-;M4$}P=?E^wrJKxavJEDudr%%oEIyl`z
z1PC>*J+zv{Ka3)Iq#*kG>Rxu9JqGpk<j;P^vciE4kbNTJYF~d0PYcb2*r0H)_!||w
zt9&|!1;hjS3g5*DUZfor at Q9U3)#$C at 5>N7U63i!dv&|8l24bBfk{!z!_zse+{?Amk
zmFgh?bM+^QOY~#qk4?ikqT6LZ1W%;D at 6Ri)2l974wFt1 at Q==Rhm=#_5{&lA3+;#f;
zqmOFWk|ALi$p^ajIlArr<OFWsi at MyY`<wA(!m00 at 1Q6Dk;e<~Gu~{h5>zaGl at LbU0
z5uFyQq4j#((29B|HS-6Gl|pm*>nGH7^s!0vf{vr&O?vhciPV$~0nHS{oB_DF9Uu|`
ztoNgG|2>3XXL=&J_L!CxDW9<B2S2&GN1$Y&muf|`JcBJ1Ga{yqLQ1Jhud!)#fY-ia
z(v+hb-#ry^%*(U=`?!W?P~<vbUOithJIp5AwQNQ3BO5pnocw{2IfGdoL(%6{OEJ^H
z8<S785X?U`VclP)O0G?Z=VQ0d6fEy=<K^BIhT3&tY-rF4png8?XU4!z<d>1!E$Y}T
zXtGFcGXtz)?RmU+Q7){3^u_;`eHBfV!Z%-lHTyDb`gQ)nCefZ~x+p<m29?JJNrLy4
zb+2EwPlZJYS0nIlOOqp|Mk}6jgDO`bRTvjg1dKIjck>X?(b(oUcbZ2xgGGoL at zXUb
z_f+Beqzn}o9PkW39rx73b*KE@;QSk?Ddj<?Zf$UO>*m1g%mTf&3~8O~#zhrqwOMzF
zhi(=a_hB#=#Ck!TxJn5n0-V7znB!vjGZ?e{A2?wczlsTv7uOyOvxsCLVISE76AW>J
zlSE)iZpx)NCw>S~3C=xOnF4}Yuxo(J<zfH>yh185MTOB1QGFMM5I4-Oo!szGj5v+Q
zpE{_FJ&4hiH`yQq7chXx22T}PJ0?>HLzGIjPZ!s*Gpe-eb0lZOO^+(;ljCq4iT?)P
zz3kg#cGk-Z1|2|X3kx>!0I5fn)3<v?oJ*IJvo?FwNZ+XVH=gXeDr-jb(H4*+Y{)c}
zMtG#OEZS5n?bmO_1^&oaJ_NxCXIpXchwe$gNdOCeZ~Zd0?p_n|ze{kr6M71331~Y8
zC_nTpR;7y!4F&Hp{tmBA(fz`pKK_Kl5ltd0 at 4R#bT=QsEN`F)b<}5GdQ6CdOMSk=5
z#(hT8_r9)g1k0G{_p2vr<CC3HTE&Z>2~n{7SWaMZ)BJg`%=K&7v5LuldFeK{Vv2d^
zpdQf@&%sW58F>LGZKrryFqFre4W#ThZe^fvU`z&L9lz{fUU#7zVJeMEW|cx8hcHH-
z0c!O~;4KoJ^~=mVkxLsK^<JVY=!hj%9PF-fO(+GBv)FYQNHH%rOvrqU#k&`HtZYbN
zEAcgyM^%_JH_omc4mj-a=CLfVBcLsnm!zlN=Qs}wS9x&t*xZ0^DSOoCM;{(k)`t>W
zB_xiy{MHtUSO|Zl`a|9kRdhv(aFj+oZOVD-^Wwt{xRr=FH7spxdEeKOFw!zcQUIl-
zP3>gT3 at Lb?TT-iz45kh(t6imCe@|n1nRM?whtm&gi}WhLxD&yku3Utcx_Vmm8z%3*
z7=s~}+6`PE1C$hrHDr`&xQRMR>WPVT8j)d3xQ>@8>$n%@71mVV<Dzv+YbKM*oY=Fu
zWbr~|0S3Z#zkFJh*mgB*!v0ct8c(Mp)n*+QTY%y%GG>ffN%T_1J({q#Q3Mq36#lwH
z__ZA*hz?hXqo=QEV_5~+5{NCD3sW3M=~Edv4S2;TUYiNNg1m99<F!@r54Qq0SH7?l
z>6l$OG}22fr<=*p*ZVV9B0FRaet4cn^sPFAASP)4yorhUH at l7^<09F!Aw;Xj;76Hv
zsxq8FN5cC)IN4uq)B*7pH(2&~sclSv$wV>4TTWNP*|Y6lK4u2=$&L8|?ERxy9)q&%
zqio$;Ga#{f at cnF-K&b&M&N?}{`cLXwFH@!dz=t<fnd`N6TN{?!PAiX!a|QZdZ2)*g
zscc<waS610-z){JJ=pY^<pfvrC at sRdB?rQ>tv$ZfQ3pSuMWn+gJ@;L7j9^OVxk|lj
z?g1|k^@2xRlG8%xldc(Az at s(Uj$*n>UqN@?2Kn{r at A9)W|M29W2Z$he0LMW*nfumd
z#z)YvZ0jD8F~B6NsR?|7eX70~{m$jl at T__cj`y%<pZ|QD_FL)r{s8W{3YWoXnM+vF
zK&d-OPVZ-&VHEhYU;zUfgruy{v14XiyI|7WC=Cr61doi(R2Y%6g6?>_T;bVUWrset
z<?-p-{X1R5bY6_|k|>_KQ!y+C>qvCoD>@=iqYrbz%6EVNrV$TntXDYgo7-dpBE*mm
z|IM`Ju*zG#|3xcARMN9WcW<Rf6eE}L#C#!k;M-|4o<n$!0vX5R+q#md>Auz~ml^zg
z4@^dk%0Y#oAHSPWEwd00q|71Mi4=uli;|{mpxq5{z at juR1ASx)a%Ed>b3DP4F;ec{
zA^N|-R|-ILlL<1C%!_DEOu6zYbeUcH4b&7z2{Gut3x9|q0&A5I2}SGd{!EanE`%-Z
zn7?{Dzh?BBxFM`7dt?Jdg0Q2jkUGl8SO?uOYaIBv($oxg0ilb()hxdlhOl8(u(3}N
zjL|=roA*TCXQw*!LkT82=Wbx58B`ot*BJX;n=`q50KbB**A|#~8DY0On0<b`p(#X!
z9+k)r=P*+rDbu_6L5$gJRai4zXx~|2Q*1$HKswl&{0#V~(yE#x_IogqJ|9THl?1<y
zZ_G$aGV9V|$r$aVNg8J{l*s;dlLq`^2h7(W$0ftfK9G0jGe)R&p+MSOUD{3(VhW84
z>u&0kk&aF}+f*y%OLVy}Jvy0yKRoRHAq7wMrjuY!0Opno$6IQmo7!b!br0O87a47}
zJc_LfQMSBvt+qS_-X771hYIW~g6<`DWh!|fl}ShtG^5#Fcy%28HzNDSEsmE8y*p!0
zfMZ$c8EE#3f?F!l$6#)))%M--APtV5%$v+Ui0pGhX|G0Gp0+-A_ZwmiFXJjFKF<u&
zfj=#<aUrXwn_Bth&1xWLMT~jXWcsyGeEikO;5h!`dR;>z^i*$$KT&`O*k7~)YY;f=
zUg<Xdl{*53F`qNr<}tvFY(9Mb;=t~(x!RDMO;mh<BoE%878zR<nPD(*<kJGc at CoR8
z2tn9jO8`cA`G>Kxj+xt1z_gq<^CU at Ez^pYk|C0918uFMz8Loeg9YV+`HKShY1CuhL
zsclT#)pBvXi`O3|SSiM}&V$~F#T4b?)j`uD2 at lwo4R@@63WnYrv||o0M?zCXabHCc
zRO%Pyhvzvxx+bJ|$1JbX6gmQK+BH<nw4HW^*kgui`w5S at _)#Lgn+?ZYK8Iw1a=;Ly
zd%53p+b2tkq-UqoTTJSr60gnH3&EBO1i7=fGLH)~yU)Lmcqm^IW*t7BRuJ8LCO-kp
ze-GzFrEiGXdTP++C5s-#MNsFK#)}SievwJ4xw^G#P{1Qc-%eA)KUyE+h;blv=KKGN
zJ|^%@Vk-0D!qaC=SsLliv3bf#Fg`AEE-~#i4rw?9=j+!Pbg2?kM%%5&TErsVB}759
z6`(bh$k&3@@UuefJH`%Lug7v^2>gF<<T}#tEWl+FJ_EWA-?{smOL9*-(OSEmaQoWb
zrkMHw*_$83zzV at 2YH=6|w5|D{#<ju$s&e5B4%SDd?;Dbx$Y}5O9yDzl_1j(V9^@?g
zEK*soJ3{>MpYm;4(4FTAVfJIc`qY)SgTr!teUi_47 at +8I8MNE}-8{$_gK&RF?`<^E
zQJ5oJTUCzn9rkPjnt`>4Lx2;OzR>GHTdk4t8ctvPoc;ADO*BA@#iQ!+V#C7CpLc*Q
z=rp?O#dzFbcGr~(hj;fBnA<mn**JuBzV3R at e4*jV>eclVPcscTlz;JC-D(@l>XDlK
z?=<rKwcM+dIBNqT*Nz77NA+ya at Q4`r4m`haD;;WO1;oySvYZEDOMFUnKtmB*2K1l6
z)=yF{H6y<EY*(G&)q_ltLC19bGi>!P>LS9iG7zhG#jqY_O=rw+xf3L|(2LUzZWEdb
z=Q-Jn+kfN2k*!vTLHH;FmKS8Qpy;(;(L!YjxLQQV3gqc&LHez(<j%WvPsG6zQ$?RP
zM-ZI_Dw-+`Cey`BP+K0Ta3Q<dM9{Zqc|4s+S-4Ny*&alawRbPG<YsQVkpt^FJ>x(>
z at cvmIzYMPvUMVBl7xJRSf_q@KRC9#9JyD7X?A5ZN8cRn<x?+j%PblRz?9w|eD87|b
znE=T_9DjsSY4mW`?;~=<D1_Zms_(w+V?Eo+3ITZ_7SfPus4C~11jSX9*BK<S39*>Y
zWuVhVOe*~!Fp>+roAddM5%!CM@<-1-sm248Va=7HLe&u$%xmfpO2q_T5wr2V!xPro
zw&M8|T13<UC7B<4e-kabkw<Lt<fWO=%lXw|Z`EZ4>q(%^v1EO#m72I3bCFE0ck+a<
z-OrN2#>GXU{(r#7%+kv|p+~4Qin=tpdmMxTRBI~)nz`QifBsn7i0V!e+VZtNNS8|l
z``;gw*+;WAJ4lD4IT(u^-nbRr<Q!|%*-`Gl2ux$6+XSwoX;lT4PaC+DsG43G3njpC
z_y|D2LdZECM-fXihnL$>sdBgre+YE_R2bRX+4+?RcNunRKYs?Wy*hWY=y6zeclCTn
z(T{;8PY{>==eC>!vEgA#zI9W=x<Q=0h9l3=JN~pqwiDXO`Hpafgm*$f+jLl6Q*6P<
z;#7Q<{0Nv<-PR%)*<T5L620oit9Vuy)IL4xIKALbn$19m7`9C{!tFAM at flahA48H*
zh^(*4aT=E|k7_I&Qw%WQMMrYg>Bpzen|AT?wnkDq;fT3}m7kaSX8}QgIJgm38VAcB
zx>YO8mwvXg4~!4tZX>=9+jJM?- at 6}gxIi>G0!^47MKjU|rVX?+V&W9(&3SCz^&6EI
zdxpLe|1n5E*GK85Qbaf&T>9;AxUcYandL?3ar34LM9FAQJ;u#*AU>Ob2lr&|Q^-IF
zB|Te8o?vM*kcB|QN<+o*Hk1d>ib7Gv^eyprJ&F98UR3A|@hJWNS|R~FNei)!>VMwU
zhBNPA!+eV~IB+#V*>wBAFE7|*XU{p1KC5^tKj}rR3cosHz|>TaX30+1{0HAsa?yK?
z<6t)uksv{BP?Dkij)p-_bI at bW_+&hlVN|)}eCt_dkLMc0LmcqF0~hE=RjjR)&|-(m
zsSxCEX8d<XE3f3brK9KV)H)0$a9^t8a`(|Zw}h|8Tp_d9&-Qm830edBOG~Yl4{Bg_
zOj|L^`z;mGM9eidVT81Goef32O4GOVKU|}Oa0ATj$f-UNNAnDoRx at gvvw@_|z7k7~
zYbz_q-hE@#h^F3DNpJrd&{P{CDueq*;4%C0-f#1??J%iAT-0;F0Q5r1=)ENV_vnuF
z2H4R;vVK=(R1CHrpvcLA=(k)*OG6%KS9Br%r#dzW0cLGBU$&lEm_Z%e=X|T%KH%}v
zgul!_E}<KRSFOoVH-gZ8zNSmM9-ux7RvQthpwwA)1bMtqARd=`^dvTdO$a|fPfZnU
z=(a?4<9MUE!>!G{jOlsZ(nhP at zajI?-18P8mOt at sO{HlPkA=)oDY`A1?C|VRD&L at K
zZdv at e7tV7qA^$FJXGe~tb-|)h3W%XX(ofoQ&88fd*b9?I38KH`Tf@`K^e_+Yk1^*c
zK0*GXDE<7L^V?w at -#jyuwwG|@6E$VV4MXnsD7Z}&&8*$y$@jzog8nf|(c&^Acf|>_
z&%ebvLE$ALy!j4mSaVWoT9EE9BZWB1C6155u<nqYGycvvuxAx<N1f`V at TpvW-}(PN
zVs;cDl#U-DY!fkPG&i2U{EfI~t;l9*q`%BTu-f>u%uBj^7$q_!KFNfFPA@#YtBz~R
z{QpowPxA>RNkZ<56tj-GCz{ZIxhomFNmRUZ3_iav5miB-`2S})RG?8?OY!Q%9h*>L
z!eD>!&7n<I$UM`L|L}>U(;l`>eZ at KnvKPEUhLEUx=@XXY at pyFkEO0*OYA<|OEAO`2
zs`oDJ6|fIKMMG)T!^34~lM at 4eNX_GOwdjgl$Rk8;;>>}*D2u%a%sr6jU~JeMmUX_W
zCTPUcCrnNZW-Od;BEDex%`&uqq><VMdn)Qt7b2n40hpp-nO&;^GRtD55CYooq--U^
zI?VXJI5s~-A4M at iOFkrRq`<InMNnO at Ky0*qg<(Lq3mX<R>{WB43Pz1XdtF75(X(TR
z0A$<7kLJ9&- at L{9vM=$Th~xlsHGDf%Y3QqpDib at 97QIfxGLtu&B<@}I($k9765M{H
zW!4-r$*@QEJPPwHT0-5cQfWdPvLpJ+Uyr%ontJwD^k+7orLK1VnV81gZ^&N6S^Bq{
zGrZ+z+vtga0kcJ1K0rK)6O0`wTvS_XK6DasPE?sA5mI;nfvfw#E*!kLl%33xCSC7L
z<lmgsuT%RU#Rf}9|Dab;C5me*YqNXfCtGoV=}|QlxPQ6Nwh1)PBDR)vNA!j at b((qt
zkReKpD}L!%_!|5(eyusN40<ebfONXItHQRxbw%2Hb&MzRpnVOyWD8~G_B58~L#i_k
zKN`1ZaJ}1ETEL=2jCB}QH8D^r4LhTrbInVhB+9)fYv>p%cs&r_eB#d4n}PyUqp#5D
z*W)e5-z$&IeW8?zj;!J%eArtQWs1I2MaH-e%>{ODl-$GP8{Wtva`cs0%yolz=HnpH
zk76a6FZn*k>qBntU5fYmRcWl_!~LQ%w!QEu*I-(Y{FMT_;sGtfS2{)N29T)5=(^Ms
z(?|vP8b=%ba>$7)G1un}q!ZFcs#*$_b;+ at pOXTZ)Rnm*JLBTDolEt_9uW*6J!e|(h
zNE{#fpT}EGQ=73f{*q6`_K_MjxsBF8w%tRP6JG8uqhrV at b~nKgsh3;xldYi6;+VkT
z#{<F?XH8N~cVF=W7^Om6=v!4^0VzQnGGfPaj8iXg#T>J><VSS>zm2&!p&TclM0Gcg
z!fXrxRy|8EStPn~SQS~FN^8fjE(3!V at Aci75uYbaK$RXT-vZkoh|3qObt+jedT)Q%
zyu2}*7FD1{DOu?UC>&jmH|Y+DFBo|mIJNvEm(-Qws8EORlsPc`a)D_BC|$}6VQ*(X
z`XRJD`2|BZHQU53nG4d>Cyesm!E9vIIUN{{B`YEB2h}U$ez%;`9At({lpOV6=d}*6
zD1gN&YOu{Un<!Y6|MLrU%8e349f`I)^6H1j-Ps~@jf7Y}^~BNvd;jcTv|)`$j6z7o
zdkAOK3PpDS79=J1(wzE-W=Gp==DQvYfl7HZMQnjhigbJSd%B_lGZIuAS_avwGE4H_
zOWl_1Emya9vjF+|1REEhQ6{6Qam~+YWQJ9WP5!Z0CF=!9J%I-yStvL?i+~yE8EvxF
zt>!-nM at GPygxR^(AgI at QtT=zYpJjcgka`ZBEyKD+CsOAQY7g&a5(_V1+w{1xmGqqz
z3TN#L!>*F5tV06dTA7R1f{q0neHbWAUL^TNUo8&M6j?}VNXrck_g3IuJn_SSH{pLx
zc6txu`+g=^nF?BAum*i}BxCxk_baT?tcjO8FM5I~%dG`?GzOM=X6Q<zVvJ at a{p^+F
zz?OyplS}?qb(iSlsow+F7n2$|UE_u3gSJAbr-+J=q|A at IpeJ^*)sZG$cLX>EeOn{w
znjRJ53j9iLYzRqGQi-VK3CtpmGV|2yF`gbL^3-Qw`PH^w8u3p0wSrF%kL%NK=_ZG>
z(7s-Hh9v)?N9$cu{#pDFBkM$0$&P{-&8ZN!I`WI>IbYu%XD1Zo3wDDHv^C63))7qa
zvJ at 9^4Amu*;x5!$R;1StqEv3?pt@^+IH<6l2oXOuSKe-z(adc0PLDR{cELHbo-c0>
zJdEqYN<&8 at viRA`l1uYCxB+x}_)i~xETo7_Bi7a#<aS{gFjSNrDQKd^yMyiJm6M*O
z;}dtN#3^UcUrYg~ILdv|O=d+)SmSph8pmk|>%07HFTM5Ca~YC|?w;KGiRXRaw%#}9
zD>ttS at Qwu>3KIA4#7VOrI&xu(fp54_8tA%z$o!Laaf6 at gBL@_u07Oyd9{|jIa+O#a
zYYz03<ul!56Ms^zEyF!KA8jWt7y6|MY^IfeOwV3-(NYPC+%1_*1JG$4j6s$J#zWQN
zi#>e-;VY at +#j!RMnR#6GO2=NQ?KwyAC3FyjeWa1?-}^g4+DI~-AQ{j%lLP^Tp%z(o
zmp{8#q9Ast7k5p3wTZ}>hoe at MW3AA&_A6K#$m+GZA6ENw?^j0VoTF5xzRK@>8z|<#
zHe(s>7>GZy3hfZ at KuMQvo3+yNS2nE6&LPt(Dky5v!Jv(z<+RcM3jP%<7E60IksxV!
zRl}$4{neRaF_n-Sg9 at j&Iwd)9bzX&*y({ZJ<GUctSFjNXLlW38VyVGzvRzkmGatT7
z-3!?RZ+7<^KZhP*ne~QOERK^mj!aA^vY|v~p6;_cNpnNpLpmn*n^X-14M=j=8O<;q
zaMX#dbi10%{y`cBdf%oN*VDmwQ*VO(`v&2`q}~~?;pWU^Px{CUTxfJaRH329>JU&#
z2*19Q5O1AX at aHw?cY<|_SSnRH<wlSv472%`w<*Q{Py)g&fVku^;C(|us;K~v$J&IQ
zn%p*F%qqnBU37|T>^}ihwa%V{@mN=e9o-LzEyPdV+47=LA9)$YzQu)uZZUG-dt?8E
zoY}S&dXdx$pe9mWw_zdX-)(c(Q-opkl41B9oC*%D8>n9E5#G9u6Hp7cRNJlP^t#<3
zJYbJ>-N}LDFLOG=wu-u~yu=CDW9Db7>P_ks8o<~T*wkzvyD(^(oReLH_`k_9qRQsA
z>W+O|MUlu-0-m!z6yJN4EK2$#iQoCCv>QVd%6NJF)EUVP?<|M3DbVhj6ylx)<rBmm
zS41{p$e1XgANUB|K%xTyv;I-?JhS<eS}AG!81NRz>3`5iKf<rOtiDcqlDeM~-8CQs
zsJRbKqqy at rU?3Nl7%%vRSmr_?ltU)Iu^l^DJD;SRqYJkH>YHDe$DVz+C_e{7@`PN~
z#j=PFFcE2;f6TKlnBcUw?9{&5UH%5`9$2|b#88X^>){Qp3hxtE*b*^F_PDJ}JoIu;
zRyDp^=_6O~0z at 7-5Zc;HZi#%n*QNl0j`o?4ERxru6LXN<861=c!UGfQTH*8$;zl`b
z7}qyMC!^%~1fPL;a=_=ss4_O?+$+hbX&ctAY~azswzu<g6P<zngK{l|m`@#L{R3$3
zf5Ewxow6(o5AT=^!*%i=;>Is!yFVr?&8m>&+9-mf(2;*DI;+Oc++$n5;PIv`Lkl3>
z!1iqe9%@|aLe>0h40p+xIP=ClM(`oS<TC6&YJrZQ6;QTr{-(O(1awkNdkoGS>>(hq
zoUmE!k<#HokC_v+dsrud9)lE-a#<n0TS(qJ(N>Pn*r0d6e?}-ZT^N6i<|FXoNICBm
zF47 at T_un1%D-7{k&0{o%RaY*W%IT-_8mXv^K5Hm{i9GmT7Y0CD)B9ij-P%0WpF09g
zg~5w^>v-}%CQbJbPo&qiBbXe8R%C2Escbtk`s$7&{%(_5-X3x$A;2K?mGdEizX*aQ
zqt2leuM{n$ho)#3<Ahp7RJi9V#=VMUeI!o9ZobQ*2NkgVJAPZ^WTrtS8rlQ7ud0JF
z%2ju_fC{8CTy$l}{N^L;e{f!1lTC(0z2=U)7CpZwg>o*$*>@KX_Umr_GNV$}^jXbA
zF6hofZ%glg#T`OnZaGtG-!+I~7UVq2d3<$K$sw2+_<*^4anfGh+yPog<r9^|P#p{|
z0K`5hpZ32S5W!`*1iexl=gr2l|61lKXfi7PpHXMnoMLlBLYc(&-lqoeG~S=yQrJHX
z35<-SAB^lh9Af4KSu6h|ZeFS#(S_(pt&z>+AiI9|Iw(;50<zkc6>zfmV*OY6f;7Bu
z*`YU2h?}^7GEKROEoOfbPcqFCpx{I9T;lHw?bPhZIYRS0*(QMyc-)3$erqoh<hdh9
zB?$WkOMyWlf46hO79vJXW$9+Pi8Cq!-Ffp5bAm#*?G*QJ=;M0}&(q`0|8ZO84`XH`
zCVUu^?8lDXVX!>W6Ad-`Y+J)#MVJS|xxtcB0r*_B2iKN6MOZGe?@;ST#y4Wq%|c`d
zTGckXN;U`SSQK<~YCl+_wFY-c5*Kp9_#r`&Zz>Q~4=i`|v-=zlZ(3x**m5<E(H at V_
zSBD!cDQIp!aArfs$box95Vq)Fcpgv(>Kn(1dA>laNHz9tH;P--?-+9WbY<zTOCtOt
z_`1qE+b|6(J}k9gf({2jwvKG{&Vw8=C8Vy at Fwiu3)=<2=k1`z at 4f070t>%m4WVBHC
zR&d*e|I at m#g0u>7`nNg1P!_&XF$ngJu^@k*$|5QcPmGu8`hQ6Cd0%4=`0Pn|C!=M~
zki6w>UAdR37dF)}=#~fQi`e4|nkAp%D1^9|rFdnohcRs4aUNd?JO~B;SL(%X(VXc_
z{%yC<c|Q}SB`x_Ner`dL0Z#3dOy(?`p%v?__&!7ij&LL`SWo*a=}1;M#9*~F?>5OK
zf{2A{LKv<3(S}&!yE{Q#1VRIOZvs7Ge)DjC%yy8q4`289BQ+geq-R1T=zC~|m(6Lx
zgIq-ko=00&dREYRO5=FxI*$YOIH!Hw>ghlh1s?OK<KFmM^^OjTV%MgJ)@ruhOq(&;
zd>r8~3G*B~!580hf<2quk}bn!L!Jm9o`U0xa3Q73nrOsze%s*b&+N}{W08i}2<I8<
z3y4j%pPc+6aZD2BJ&M9)uaH}4K^aj#DLe+*DPdzGbcq<~)_UhhXyvjq;qQOrDnGU8
zB06qzDE4R34zPuGLSnb0*4CVK4P*&X+tMP9afLY_C at uXtFdt8r)0?{IxDdB$U{3dm
zei at 3h((($!KX7Ku=D?Y+Zb=_fD37B7cB*m8w$rFU0pM1~?&$6>h0wsVi^4|D;fduX
zhka#FWR(SynB+*m(#ImMD$2s72&tD9<TlQX3SBl|N(S7H^W)S|eCiL_^Ukh!50n#G
zBR>~2l)jvgqOgu052m!D{d0dKq=vm3Vpy1vz2KkS!~S!1C#;pKio*i`TC?nJlxJ*C
zQ)j}-0x*6_onV3#?D6RJ-}+92;B-h8U(ZF*lmH`;k3o0w8WibToz*oLgK3ciNjysU
zw%`>LxwBJ9*;17N5z+Zag+rR{Bv8111!TM!7^wODDw%=)rS$UtGZCQHD2&%uXOyuj
zifv)oeBvO85OtWqIi`wcv0M?XslOh1#i)Eyc$w&x=P&6uZSFpAnPk^*PX1nxP at +yy
zg((!B98m^Bd&A0!2_h6Mo!x(An$d}L2I1PCU|DRzTSMJ;cgm*L-3OCdqhfTaF*2j)
zV+Yz4+AY2660SokUAQ6I_nKz|00 at SgJ<a<F0T)3W)DXCzT}3MYEKZj{KrQ at _pe<!>
zjs&Q&thjA#<7*3CaXaM(-FU4y!2FXwxorWg;NSpZ6f0PhPvv9es#C&3bxA|k6t{Ka
z at tI||>r5|Z59;-zS at ag9w!@L=wPMx{k(uC+f25 at DSs;f|4cc4_3udTwF+AwSgy55@
zASUYfVXVd5{>+WcjDm6;wFITE<x!P70Wg4W;Bmy$OQ^{ransCOKGSQtAu;$#nO@}A
zTTK{zcQpGQznB7gWyU5E9jKVaU~yOqdL2EEEO_K)L|o|>YmyU^aUoP+<ubxSv27{x
z+9_M*G$a!6WE07QVFC&BH3LDq0YUk5BKTB9Wjq@^5E>gpz-sA>Upy23J=JS&X6dry
zH{(tuD%7XSionV`6fbV^mPXMH>1!=XN#tpK?N2 at Cx0t#@j)fQ&72Jvt^W}lxsc<Fb
zKFRT+1Yy-0n!afNg|u_1+l+9ox-7Nuyk7Z|UO~FhEN`7*uFNd(3pzb(Ed2k$PA0pS
z&%lgE_Rpq=RTG(9Qvza+OA7bF3LY80|6<8E5XF-I2%tx*(YKAqu<|q)dF*TU2V;l{
z;$kFxk#Y?PTwmF3M{(h{N7}O_(qH{xi0<p_hzSF4Y&?1)r&$S|t;!;_yi?sDUIadj
zp>>gNtvj%i-Bx+r(K25*D=gX-7mTvt42>pq2P6)%$By0g&X`d?aVjX_;kD6z>H8kp
zI#r%nL<K?M?yP2!NZ#1t<5Uf};>;A$gs~`(l$2vy3QkWFA~r07?!X&`OXwOE;dupe
zWp71biMh{b#oaSg;ZkIhH=i`)F7-F4_;R<nH;#ek{xm05!{K)AJzr`g!sMv0@|=mP
zsmfIO;Z at x)6<_a!&q99qYCKxkVCIPfQdm?xd{Nspk{YLhPQ=4y5z8ion94V%e=UZI
zd{|se3G;-z?8w|nymc2lsqglG-#=xBe}+EoFP?^A(nkvJ^)vo47yow7p6$4Z%CSr`
z%)5fI2Vy9P6`ntJ8Bao6(`U#fHt~R2Y(~?hi6~HqKp4TBbkbia16ZpHr!nERP)A`Q
zIAmui;N#62w~DSh;_Yia3k5ZA<`@ko3pLn=9~@Zyib-KqroJqppV(#E<%cV&nyZ0F
z0}*x$OQx%skcZ!{`XCP<Ois4~yuVrR9SL)$P)1{w;#QOtunk&gHc-0M(Yn<JJ)LQ6
z-TcN48iTo(fum-!7dQ#Uv^axO|H;E$GTEKwhzGB?Y?;qhv}rvAfTvfpcfpE;{_Xli
zZ~QYSK0cu7s~Vh3uJ>BkxQlhlu+x77k56YEOwwF+x2SC-2;GDw<R68I-ii>TVl{ds
zcBm-d7mI=i)$hM4%s!i(#)Z-DXaaX^S1bZZj#9<Nr4c=+XGy7{2FRP?XRiQ%@)prj
zO}s|<wqGaDf8EPb*~u}?OOVfMO?2=o4<D=>R+SGzGM?WUq|=o`g(;E=h;w*EE5Tp;
z4lp_{sDN0*uq{W$=p!XI6Q-}x9=q~OsBQcwqPJq_nc?~Oj#{CnLJF at b!o&XnY(-<4
zTWgC)#~6h#XKZXcE&MY9Q8PZ`3{~RE{p2f7-6RR1*+AuS^Hh(~D&bSFQ7dxba@}yD
zO(%)=TSV=7Il`{1IypBEZs)GY;%P4&W}dN?%s_Nl#V)MkyNs3n0PY6=5*H~RyEi|s
z!&6)*J1`^2!AOYJNjr|Xa!~K!TAd#Aq5q+cH`4z1zBfE5z5F0&P-iB*0$^lj*0#*=
zOnC!F<UQyL)@!2AbQjH<tj}|B&scw at g2K0Z<STb|Yu{>bxkX%cFvu$+jku9`qf3YM
z4L~(`whcy!Gc!ONa=N)1Ww4ji2+qYF1%wkjNn+kWWx9^<q526O!{qmz9WoLV at 85Xm
z$iT~5CIonUp)eactLCMEci+WGePl{Xa>^l?)97=%Hd8UcXiW|v0T5Uq9?DL5`DJe{
z*w^R?iGRdYa^=wM`YbM|c3Gzxx4?+)mCZE*lwtCR>M{$cXiE(Iz)J;BSb)diO!+6i
zX=T=?(%fu%XJUI}ocOb{mf=0-UN1X13zej9?g~c-2v;Ia+wbLwL5DJT6V0W?9hp99
zcTX~wVg!m8BcpE1wH!zdPSQqWifWJLrfe<;{^eB7>4-D_KKKBS0%I0!xx<X$yH3^=
zbL;_^cdIA@*00XrbuC<pNAj at y4JedJ{HXo;JYN*NuX{B(79e(Odqwv#5oag>CLk at G
z0NLuS4h1e;Q5+f=PsuMYm$K+y81>wS!T#u9sgBUSs+MamB*Id3QAX6%6U11H6-)F^
zxi*``+7@)r(254%x>3aoWr~m+jy~Mvn)#4j1(-!15RbwWBSWxhUgDOrE0^FOJp>?G
zYz&e-oOL(aG8kVOE3Rw$oGhUv3VG2m6G`FCu!dBQ`Le-rVio%u+RNxSi1OiTR>2r%
z8ipVn7RR=qK-ng#W_s5$7N8N6J#^pqV_PCSn;FZ&b87nkk=}#sb7wo;rl?7q<i0I6
zq8zlYKDc8O=(XIS at DI;e_HMFOULs};4Lc$G$}425K){hfj6S#K8IO2*T;NkmlHLVk
z5diec2nlnQ#)l^%Gi5g3`dQ~^OsPf=*RfSFqR);hM7kxzFJhhe9l5?tBkWiEii6#F
zf^>cvu at z3`zX4tlWCTT=bs}?MBtB3}qv}{EOQTl)3-k0zw|#?u9kSu$rGGa1%VSdq
zh8UwA={MEkAv at odHhBhcC}CI(ec|3YlXA-X*TvIp|2bMltidcm)oA|XN&;E9KD~%V
z_#!oQtm)!i1|5aYf9h?s2${Pk7r$0Wy}3a7x4P^-t<zRFu75;WI0knT(f2yWSK<vK
zUb&)y<D>rQhFSq#?07#L2x}R4f~4Q1fd!rJ<jQ|1*C}JP64L#>#ALu6{xxblb>kdK
zpjdi2fj;t at 7(Y<zCG!FG^dW=iycFE?N`pdtT!V!s_<NG{2F#~2M^)U|#Y)SKJf)fy
z5rjB&5jH`c0o2%X$-Fli0Ao(sQ$@0>!3y7?V>bEb25xuKiT=02JEiA9h80!i4y_G>
zu9d1o8iEtf*0a=?A?OtZsg@^@9TS0(B&=r!!1}?#dfu$1G;PUIMSfWA+%4{3N5!1g
z6hy~+)LmhV9t;(6h%wehg<GyI^LE)W*Uc8O_0j>+WlBYCjwZ|1Cljq8k(ct=xo8t)
zmJp}w`Hhgkrp@%=uEq0<1b|jISJSV~-Piu19&I(V%sIYjh(?RqiW*NMnU8cx;h94V
zQDQ%NQuFt$tDU)$aB%T)1HHVM+0S}BgXr`-dhe=Uf>#0nI5t{CQIrS5(vX~q4By@<
zwcnD>@fsTl3~s}@BETy1KP!47pw6T6L!eGXJ6NYvR*qE%Id~mTAt2r15%5HgS$lTg
z0QAB8-Q;ln{MNC{lfgIAxF#?kz|3_|w5niT{)Eq+5?}(82gRBoStWeNILRZ*4LN3+
z+Ra#;us9qT<#QdF!n4jIyJ at 7<+JxFlW_GcPR(zDD?|kbGF>EBcZ<P2e_n8zbLa at d-
zyn^(?8OXO_0SV<0-kHjfy#{r725T`K?4RAtTCZ_4Brj7^HziO=xWvVos^;AROP-)1
z$(soy%`cq_xX!&^DOQ)myL;TG0Vbdo&IF|T+yMrTWCD&VFc6#q_|446*c=E$j$>29
zx$8?F;FwpEhl;L_M2*ePHM&2de;f>TC2Y)g&3?du=37rt3!k5&x;@-~?~?U=>!#UL
zv}{64SFX2I%g_cBC{X|_HulnYweci=(nNP$8*he`uT??NSE;_Yt%=g<u=4I7O#oDF
z&Bq{?te(Q-dJt67jx6arzziBxQz<jJ3(s$Y*hu<#^LpR-OAfa>)p0wA{UKK;Beo>j
zG{_Dk=Zaq?qYs(Um#q}Wjpdwy1a|^vHj9cOBf3Fg{V0;moS>ks1KXPCnm5!M$}sj0
z|G&2SfQIC0S|;zQI%4=WRlSvCCD&b->a|3^8V^>*J~=4SS$OGWoiH*J=V%qqYVVU4
zjYc``C?|9m``aOekuXnpZ3WO~Kx;%REG8!H!F#cZ7sDwpluBh<q at AE)Tc98q`D91s
zq6?i3 at b%N&2bb4v?L>hOC4j93bZtYbO@~gfE at Ru&+n?2-`V#+R8bGa|6K03GogXLo
zyRo*Her*&w3SP_jiYQbZ<l+J%0FGVr7OX;uK`W{X#``I;7$f29C60Sof4YRLV78eV
zr8sI$`WrN-sI!jYzJ4KZ?)u#adh2zlXv(cAknTXfu19b at ifAvtZafG3LASqwIZNoc
z04gM`iIe&C4?#Lu;eoj3R1T1XPyVF51$0`1F}wG&K4JO`3hi-~=?g6y6hD&tsngNz
z7Jzc9FlVL`POitM7&r3YCa`**84r*YWa<)|fVX2E1-RZrVBcSggm$#hZ^!P$<rcv6
zA8pfbCB;U=og384s}M2((D{=`2Ud~@XR(zjFiHV^IFX}`eCJI1zr0{v$vvfVkf{M*
z<@M5vp{?*gqV5&o%+r?qJUWz=4o6z_Ozjf<fLo0^c|>-k6i7>U5vXH^`<?R{YXufQ
zm~GCbN(!06-BiF{`m^C|hc9!tVnOg%l1Yg;`T8Ibdw!D(=y&AcpBtQecj#~1cP3WR
zXVUsG#bjt94q}F+872^Ek1)}KAsXsNcC%r@{5ucHGZ9XhS80ZfQd=F6sjbVI9+-ff
zc>fM0NdrtW+ at e5T^Q%p;>bF at D7wErT{{SD02W{YoopT2Hh<9S-{FyD*%fV+gGHBSE
z>*#5kB!KM`9NNkW{~UJU`_@!xxGR%1&+O0s+I#_{)bNJ8+rpvz_99km#eEAN9YMZe
zbIffu?ze)e2Mwz_47<iPwDb4Pv;6LKpi}z$V$Jo_<U1t%OetHvC||c0`7q}xHMr7q
z!`&KgFtsld%pZ-0x?|0?r3d@(6<ggo(J5Y#VZ83pXl0Pgrzf3fmf?p9&9~i7rDkg3
zXi=o4G;FKrA1qyu^7&y8G!vQbViv|&m>i5(KmNxN!m~jd?Q2<%?2+ejGZ0A=FI#%e
zrtHh(I_?0rnm~edZ!4tz+yM<Iz}l0Me%fQ(n_J=$gOpE?cy;WD0GgpVeabDEo5FiA
z5%pEuG+`X at sNS~&`5aBfccXKSfJVYh>=VZ`*m{w&<F*|5g`ac61xlgBLqzJaiWewe
zwc|Nn&ivdL2WuT(C>n=V&i{7P0U*UwB6}A0B=doSI6wpziXsQU2$P=}$MdJNopRDR
z^!bnho3b;mfF1r%%Py0LQQHL%t!&2NqB0;H!^uMIykFx1M9NcA)M)G1LoVMRe=CyI
zUnV1#`_U<@Hwokyp_9oLQWhZU5Bz=5#IX}_v`NG at Q?hhPI0!n`s<uu8svu&ivOOCV
z7WZ-eK<jddg4MUXCb^_Pf=So@>+)JE8Q8O}gRAy7IbrB%dEsvsk+t-6<D)nHV{A9o
zozxL3Y|6`N at 6Yc8mR|v^!p*)4&eR1KHs8V`ffHR<eiv2>05py!N)BHNC!ND_uZH-~
z7+H)-HyY1K+*Q at FkCBr>QDPwD;9yUl!r{4${dDvxz(YmUz0x6Z7y-2I&|x~MnR5eE
zA=64y`GLQ5GbyEu4IZ at V<T at 1`QQTSL8k+eYa|R2n9m_Gxg794 at wn03|v^tw1b3l_k
z{U4jpkTV{Mend at cgXS)>6=;79hvY5|%y!!$#P|TO1;GOL3~H*T0^ShhOSK9qTs3{~
zPQ(oY*9tWwKnK>?T$Wz9MUBK+ZwJuoqbCCam`b}Abnohwag2;cc}C6)3!P0HR}~lv
z)`tI>=@>1?=pAvGXlQ|3c846zl3UKlTM*Y=-}v at g4D~^dg$<4RQ2J%e4H-!aG{>+x
zJ`8k3KF+XDJpk(jhSnyxk}9vUK76poZY}mOY<jV8_b0}LORWm*%A<a*N(GW%SPJ$6
zO0|b3T=fu&vo)A-^5OsM9~M``{vHtR-e#C~Y?L$guz(OnA0_C;rMj6|SLE7c6eBJ&
z$Tt6vWVIDqr!@2bBNbZ%Cf)-ip)jrL;RJUwg`hW&1iX(I9KTjOGUytFy at 9?$si_T#
z(Gli%P;tNWK^#o`ypltPm8t?aD1vg-&zI8Dt6W5PUcD8Ot~l}B428u)GE6o6G)i+^
zdKRC4cDkfn`gg>agTuvMNUMS(DEicd3E3f4QxsXFh0!N*^~<4S+7v~(Yw_eUkN90H
zHJqGM%&Pe+tzub;PCDwZ+<e-OxiO4A9)4NMT>b515*I>N#ElwysRC;$sf0o$VcNqQ
zxqTGM)9D;mv;M_K0cVRJ-X9^>Rb=M3{{+j;zQn>KZgvUeHtPKZcjd&(Vci9iB##N%
zgX8yKbBU~Rp!7l7fx&tXN^0ra?Tk?~Uzl5x01(+2+D2wt^Tk?FMI!~vPGYZhY8`0m
z&b4)I_py3gnqwovMAlcZ+{Ai9Rd~Gep<;-UA6mU5I~Bk{t;hsAoth-cLfbb>ZiY7c
z*ltw%5{m?%&Wuub at T-JXSb&>d>M&d1V`R(%t<k*dpPQIHUGiOh3*WU(MbQ(0_2BL;
zS;J=h%-FR<4Em?;ud$2x#tSjc;w#CC$B1zh`>mza*tr`GyhHd!1jH?-*1srJ8U>3{
zor)p*7|jk@@<|q{a+rk;l>i|?6V*)tJnPzTL+DiZGW+-Nb3k>Mn*%Qvui~7e74c^~
z?&iD`j5jp|$j^f*B?GoR_3UO!OLg2jdbz919PK=c0?$%9YRwtrFSLC)i<|!b0SApp
z-$lR`dGDmJMOvTeaI06G{87tL7lu9A_loyu(ph^WYTHNsra|{;Gxki=gS)3 at -v>=T
zi2l}4y|P;S6eR{(hokhyEKYU!Bv-gWzRxTDtO{YPl=p7GyY~tLff9#^?y2Cyk5q{f
z9U-E4HO&d&AG at Uh2gQ);IkJy#APc7z at P}N2d!VRLm&Nx(tK4Rm_OTeW!9&+Cd4A^L
z0{{Y67V9_-bX-X^92`5Rz$xL0_K9_0cL5b)zVa>kjEe^LC@?xn?hTOJH05ZX!w4s_
zFAS;;X!v^^OT76BF@)pk(k(OupfIWdaI|hxL|UA->l_ILga1A7R;G5U+qXJ7iqEUO
z6zMcnmFd}2zz1Qi>*hq>g<sO&7V0*f>{ruRuAqWuH<^K9SpWpdz#1XyrNDq?KRM0I
zTZBmTkT^qO*;FZSYJTas6;xsBYR%JPR}z0RW8prR;%oWLaA$|k0Wpxly7?ryK<)nS
z`*>VZ160{$6cx(3AFj4YPB1Y1gU$L^yCB^(SP2d-CskK#6iC1HsG%G;!gdWHPrOUn
z9l6@=p>@fF<^3 at Ol|4YeA9M$&blUBe;Fw7*_Wf{qPGOb!*%iO<*oWlj<=bP|{V at b>
z07*c$zq`tAxz15<Dm!x8?Ls~Vu&#a<5?P0dc`Lt at d)kGRX9j6CrwtUNRYAyMTOrBI
z%f3rDj;1Ci=FlsAmnrLMPNuG+gE&6U^-Qp8`{B_+!NCCRzB#H}u#zqv5 at ldlw~W|Y
z`=V$3w~I(#{nTDhim!g+<t#3)&k7?$O~>J%_%5aIl?wHnWPDsO+~=QgdP1_IR|}O5
zG^@i+oQJD(9nURV%%FKcgXVLqSZK at WT0s8*5cJ7w!48p#Hgp-oTb%6C)u;#j?W;G-
z0KF<SKs5<sI5e)9g*-h0_gogC;P4OfT$j${VD_6N_>%7up334pmy+;ci7GohROIZ~
z(sn0sUqUM^Wgoy!9=D65pj9F6XF0}(%&8oCJK<k96`t_e4`ZiXLtat7#1d{vXi8No
zImDV>x2KsYgya{bI2qpqd%>fyFhAJ@*7^#|W+J?FnRG!`4nGmB4spTjd77mjw^wUk
z*$dXx8TK02qMFY#(8f6~MO4j!!Zm$b^rw`$ec_&FF7;nMjVm$g)wo809pSqFMHT*~
z&<F`=<BxnvG#p_R-+JeU)rRLNoM2}O3s98~&CnuV4wjp?)xZ}tH?&Gq*&u{`JSW2;
z^g;99)(opKPN|GKQf{CU9psLK+HZaI16^0Ifs>ghVbl#&r0WjHH at z!QTZVvaU|v7X
z<mo3?Zq840S7|A|WNCFH4Ti$uJ at ik7?jEZR15&2GRU6Hzlru16`S85jhz?!PT~FsW
z=s at 9m%;jPSn7(S{CW$ygxTzBfsiC>__L#KW*%Qd0_2qq>&tGwkCK_mK;9rpys_oDL
zK~o4AuuGePice?BDUHnkI`dtXf)p{B(#3`;ko~NIUxDL1fyVbMnETSm&HOqKc+PdZ
z1V3e-OEivr^RpL+Nb*R$#e=(eCo~dQVn+k&!w`ji4W?jk0@?P;FF at WYY%m!&KI^TX
z-WpO0PnQ(Mz2FT)Q3Y=HfTymgW2K1r=iwi424jb<Zn%z|=9{z&6N>U*=ohyH0U90A
zh4sSDjSX}sRydSz#1;Ar&yO%vyxPGslW{60PK(=?m96+C#?uh*l-jmTRiWN%ura at v
zhzRB)o}d9)+!U?K_G5wr6sLE$r6Zy1KBlrF6C`Mvfh|X+{HUOpWJmlaz3RCm`bCtp
zjEiM7JNxS*Rxi(sI4ddXLxqfcB2X_eXK3pMTz}5anBX!+ufiZ`_8mo)Bl-F98;5WK
z^Mfgvyy1T7`)W)pmj}726p`if5_mEgF?X!=HpF9V1z^-G)OZ{3*EdF$z2I)jmawHg
zYu6U$gTzbn&Wx*J5 at BC5Y;L(l^Rz9=5^Z+=;$fALg4CybfQ;c&S2#akt^xey5!!$&
z{=j=!JDd7#D)R)?n)-0<+fZP6e*Z$=D6I$m8u>c*^xBAoQH_Vy{w*yYSKf0uvBVEl
z&D1~?RoTCZjXk0}2pDq6a2t?Z+vb8dSsodXSIc7l(OAK`0c at 8sCa{x?AD86$bx>J#
zQXJ8B7RcbwhKxsgiedr2RuP(qrfz%X3Pxn#wRtk;BYl$2fr<Pa_?e|K6`>p(U#>Ju
zV+oku8=No`S7%{-npIaOjUnfQDSu(eZe{>rOjSU2A23!1NP(&0@;TNS?I>~rMqxz*
zbbM#O^yG#N4{^$)7QWpP1FZxWWhI at KOCbQ~c at 2F&mo+>WlA!PwFHx5Y_qOvz{ig5~
z(Mb_ at h!kL*Arf!3q`&ER#%H^yaCbRbT!~{eVk$Nq9Sp=mE;-gTnV;Xn*XXfXuX29W
z<^dsrE3>W<%LN*MCrkd)z~Vw*jga7dy-Sa954b*4#YtH-20EWjTq+K^uh;CPaNH0&
zYVbxEFjb|jMh8kiqB7}46DX>my+hh}Jo?o<*v{!qU|U=R<`G~DZN)|bB$j<0IJWMm
zhyytkTSWtiofaRktj*Bm0?1h7ez&AYkM at FR{f7Zc)z+3^Jv<MYt*mUoQlDCkeziy&
zT+NmG{cqi)ryZTubr9BZYBi*!xqlO%H?Zi;mbUV`7L2xy+EmF4x{xM7Hj)ys at 5dn@
zJt2V{BXf8UF at 3s=MhT3v9FZLiZomPRku at 2155rh@gha%|D<ch8?5>IX6=EA(__e%>
zgo;cj5d(IoNM?VW<>b`O1>Bv?$`xKdp>sl>R;nc>Ea=fNYisQ&QE(pDxM0SF3hvqD
zK|^ve#V<#oGiw_K>3Ta$QomK6OgU?dvHCxS_QeDbJCO1K1K6M`295e)4=@rGroM^z
z4F6Z1({G|CRFCXdeF4%&{o?jQdh*9*MHy6ss!V2WEks{h-}kKc>fXVN_ESw%Fg!>T
za9tHULcDr<%FLRnvD7UrII}jYu_SUJ&{kpK+JWf2P4x6_*=E^BD!%F78jBLS%)@J7
zivw)k5{FQQrUia|#SdXV7sWR1m5WW9i5rCxOG7%W_~Tf8f;d=SE5R*7<u*|bvmRgP
zHfjhdwY_39<33I<c_y6v=M4M-%nhOwOMHSQyG+gtNIrw`KuGti=wNeI<a`n0*5uEN
z(^vQ7SnwSln{oA2;AwOVTh-FW%uBC?cLeX5{hfgN>y=VDrzo|(@PJ<~4hr1OGNVw6
zyPeEwt at MA8!@Ku(Ct8wur0o^$-o6x~p1p;L_rA?Cm?y~ByK(Yq_Kz4_eTPraWK{cq
zlY14Xj0&O$gq=f7)PBue4Tt#H`Had~mUr at j%`fm+C94iRuuho4j;M#1dw=i_wbaJ(
zp<U}AY*)Zfl^(%B6z~`s;<-MjqE`U+wcr&z-GE+9v^o~LEHt>{g6t|BqB`&LFS(Qf
zbAvSDKiN87xF$!J2w)J7ym5`hiCV<Z!d(7jq^|@4MiX_{VS8ziv1T_n5J#8Z!nDvw
zvZOQT1`_y-LEpAKkh7A`X<9Wq+><&?O+*^=<W#1(?bBhh_WQy?3|J^K*#=B#jy2})
z07jVbbv>Wjyz?eP<))!K4KHg_NO)F5D}&!JZZs2g^XFvAv(zI+Q*Cphx+bxzz6UNL
z%TC^@t$??<JNLKoA#lSqeP$-m8Z?G)VU*Wh>!OS<WoT#xh9P!uDe at DF+#)mXLRMN?
z9#J{hO!7v=FjnBM!k=+MZVDjcva?SwJgaDqR4%=<ZJQ-=Nb^Az3XMVv8#$Uu^vX5E
zDRFI8UdHvAsiJXDrx;n>n2lGA)73Ej6uE#=l{5>m=WDgwyAIujVcm-l35%wov-|OM
zTyYFpmpV&TQvOQ7Q-~#wTeb|iu#4O|n_Gu<c&ct;^`8~RKUr>izOW_n0==Dt;6~?v
zUNBwQ3e|OsBNyA6K01A|LAqn;MS&G9ETtZKY6`)l>b6V4xSsu<D6IH{k2S#A{}aYf
zp~R#pvCS41%v=YR)vkyE6tpmJH1b4-u{G`x%fPom1?)7;s%1~JqMz at p@81*OS{+ce
zErr+d!yZj`7e;k!7}G+BB0;*N3qRLuZInPZJ- at EW<CrSNMm|`p$T`S*1|IYOYwDV)
z3~2sQnjtcO75WSJ%g?8K2k$Sm>Ao|85x=sM#C%%UARPJo5vuHb^$L?cIPSy|=I{+C
zsm>+7$h&>gjSHROEjt7KkXp-M4xb)t1|Hl$^8^xV(Dcf(Re0b$8v^)hP}&_#Ht3oz
zxK^i$V9zB0dy>EWh+MbP<7}N$Q<Vx8DJc!RxhObHr<}3bK$0atnfw)$8H*py at nmFY
zCl-lTYk2p}P+yS*w1k%Ij7D&XAD5jY=51a0+Yr$y(YnU3SNpx~AGqOca&Z7}R1~5r
z?7Bt7^yQ*W6SOu{G`lX;J3fxUBG|Ru8Y*<9g2Is8{5NQWbK-NV4?ShJ0O;I#zOo<g
z9dm9y%QDENtdG#wV4OKGAY>bT)%Z7izCC?M*^BF3sV1(6`g#ZeD;3IJ<rN13yk+N-
z)S)YZ7s|Ml;RRE<-W at dXJAUx6Q%jahOI)TWLg?fpRw9PmheO*Q#;WKxkD{wE{v#${
znX?F~=oZn at w1-=~Cx5>$b;6ejCbI&^DRuy0|0S at T1GdXhluNCx%pAibC$EElRPa!a
z{YYz~dLVz$FxbMK2lRvu<`%O!O_Ab&$CO+cfZ3fX&wKmcZRaeU at 5ow0H{(Uj6f7JE
zbE at t3pVfA)=Q5&RyC362%X!we+2tvFW!qa02D#^eR0<Ye;Yz#h=tqHL07wtCuY&y1
zwp<5CU>8h0tj*ar5wEqV(z$w)s=9phsbdcBDx_`IN!#h#G7PLhWt(gN6-VzeAk^k0
zL4#BxM!Gp33rd?sva|l7VC}W4XB!vRj<#Zh1h61L?ZkaM9||GvBo92K0$J6sbIP~1
zy at hb_uL3M|^sRO^OUCe~=`mg>;duq^L{lo7$`THTurJYG(-Gq`NRaJQs&~5xwbz+-
zj;a at cax>1k8bh_|m%jw~gwv-x)`s|&F}R8^1Mt?x0J6<8(N=o2s|^{V^F?qc<mN?i
z_on~V7p(w}WfKA`i~}(Ys^s;vt*Qgkz};sFhKP>RkMei>Woe{ttt5z$5p{N)4_9jX
zJ-N-VT%$xS*uz%<J()mN5k|xj$ZyQa`Xm4fN3eAjm^?#Z^ROh1wFX?OAB<82!OV+%
zROGr3Q+C#y%T#{gNJ;SYH?>_-eZ7F>LqOOx0(ztvDJf$K00>FY$%dJNygv<7Ip>qf
zr-Ikws;eUL$tx}kqo*&Q)&G2hzUb at cVi-PDZsClXi^W6cE{;!Q9wqz9QdRA$33uP+
z3a+Th#?OHK1<sXJ#@vp%%k6mT9n&CgJC at xbo~&HEr-apu$wkmA%YJ>JL1!F`9Q?O*
z8xJXsPE8%X*>RTF)V5*H=?5L9qA*&Qydp@=4CwVYV`#SL$yiq!JsHBm+S6cTIvKpk
z^q^wj5U71<FVOOpFE}WLTms|mkUBk_TjWag6wxiPPg6Vb>n`PH4->cz7l1{>LWh76
zD*#1KawVsQzBzK2l>yAT=Y~IRCxg3u9vJuQ`={P6bOQtyNvVn7;UEhnC96=h*%Q{Q
zfUiyPwoAfo62u7Bztb)5Gpa0;r`1Z33xO)+f`BgYRLU6&TV#RE{b{4&8B;XuG*u|P
z#?;Iu-nPE-?7>!hdm12Tip8GtWiRp2(6}FeLO)uLsVUu3$>Fs3#P3}&&(yzTyx18o
zJw89hxG&(HRUidNVA0KtTIPtL2V8*4Z@)CtxUo at aq=4`U(n)fhjF1YuSU|>JV>#H<
zHHy=j?`Rg3cyHrj<~@_VpDwvYgl6{Ru}d%;c#0~?CQ}O0QAm3McKO^&a^}9FxbCqd
zXvMHb|A7Q~S9t5sUFswOm+7yUqwedH!$Lf^t(eli>{|3dm%32j at Kx_7q+7KLW>%+(
zeL1d6u<0qVZlHdXPbGhOIQ_K0zbgiNg at RHSe&cwWr`F+g3o|l0t4FmT0HdSE3F=dF
zJ#0(#Ql)G-Ri%o6Hy_i!z>&iFl(L7f^5OBHLn*^XhFT|a+JjbwIeGi0k(6zmFS!9@
z6xJ9CK}|pRUpKS)cC!iV?sVhVn5C3>f}bo}{X5Cy0-zVOF`a22B}Ji0s6Ol~s at OP3
z54~aoCz#4s(^kT9k9pg$=+fuatA>8p3R?L|EQ3HA15}jt6ru<qo2n2d@!z_iM|G)N
z%CmoC!s>*klggOg$lHHNK6P58%uBqVd*qk|ma>54kZI^wv%Ihjh5Erj5SV_Ob`cq<
z3;+gHY0T;D2i at M$N6P{_nzJLH1^KL1{BDH!OGHfCALg#lnU!6J5VL#T#onX~jEhzD
z*~4aZe5+49fk-9z?;J<Kf&-tF8qU$Q%O<x=J=25d*2YB`m|m<bQL%w-Gf7O&;ro`L
zhgseF=RucP(7zaGWsR*?RG!G|*9=hv2xR9xYJx#kMF+7cnEno86Y9YCR_J8%5keCR
z6{SdyrpP4g&nqmsh`1BvsfuCR0Ofx?Q583PtNIlrT3=B6qcv#`vHCywVhSR;rRf6A
z^&!9*tjze4bsu!zoUUZGj4u|DH<hL;MZn=IPBw9g=<4LCnQ5zCcq}XLExAm80o)9*
z^Y(8KK1tNU at 5vhZ9nmbfgv*&nswr=X&ZK%Yi<gq8>uSqf?0l|*VAYCvHP-n~{1gV^
zv;*gsAgb?>LfYQDdp9FGpW+dg)_q(`1ai%r>UUojPWr+T0qL}E`Cj=AJmUZPe`*qb
z6-DaI=-nTl(-Wf6Q7BlbSY at rz96ox5>4+l&^qGggK?lbUd&c1U1^QK)7QIalS9%|g
zFVg=4H!NMFqvl+{Vab&78d7(Y+s;c!YuKuhK810F5fFQg`?@yS4m#zmlBM%I^0P3L
zFgr3TfN6P=x2v&!#P5vmzxo-F;(H-rptC at Y0~2=~1?{?B26)pXO<D9G<xToQlSYmc
z?D;;f&T|Tzi{_YWnuj-A>k_folO>0=x!qP5M+VY=@!m%I`c=m3i@~&hceVK+)JXg_
zaajM2A(EY5f@<lePlFd$Eqf1RMkpC>++XV);e`Kad=AlqK3#zwqe%ONq6z~nRdF;O
zQ?~V_Gt5l#CT-Aej9NLK`~9gg(P{FO3VaGojOVfzC!%MiLZLX~`9m%=C_Urj2C*Qq
z&%=XET*BY_L!P^}6461$MV<_=+K)NQi6i<l*?YrU8HKd*lJ8dp at wUxNJub^-Deh#2
zAG!$WK`wRh^_q_}f9^Pr4XV27q^_XR at Pj8|j&QK>T#pz;D77#VO&fCD0d$Arv!c71
zcq|d>dUmOqg0_&q_pH#l8i=CF_gRJhpNmftPZw!&9Ev$As$ZZj$q}~Qd*c!i1C$7=
z;WJiE|G)>HxON)6X)j+deVi(DPhoKxBwrkOHq+L|ChbLdSGg$H&^zJL+~zN3!ApPi
zAu`H0f-(v5C$j;SaWzc<uCiZ<=qBLw#D*qFp(SHCudy+Z?XKY-kLREMuT+L3UYB|t
zRfpsOM~7#}itT~eBu{(92t;M_6Y<hd^;V5;Zcs0(b3A23;2g-DUDtfOSd5qR%lWn+
z%sF3Y0&iK%glm@$KAP)~r-G}+`aP+ObO>ZkxHIj4S7tLecQmN4V~s<0J=g>1l{>yA
zODX+FnUj<K#wR4arm0}Q-Z|iYgK@;|ae>s1hp&vA>v8Ajw}?NBs{%ugP3&^d-Q4to
zsoe|q(i4FyK#w*D+B!XHb`hyBC`F(Gnili+?H)efXRFLzcDj&{@xL4_-XAvI$iMm3
zb<Aam^?#u!g_10*p`i9&hbF>-5)V(`1&nJ4i`MV0Sz9!fQH#+qZ8Y|l0O(4#FDjuL
z(smMu;_PW-gCAgc9Dk+Ot)b%1I!dWVMd|uia6%T2wagtOnl?o3O(>6cXhUXYp%~6K
zvzj}AEAvky&<p-Qtf2a=zMIM0<%rlh@)|!rMiWiwOLYjno#-oDOd>lpX)-5EafJ+x
z+s=O at gRmO?eq~C1$a$9dHGJ||#RT}HyR~$^vp(gGW1q9oyqG at vP?&01WgANIYkDPA
z_3Ts0Uhjy$Reyro!8=VX^sd_Hx`uRu=i4>y1>Cu#FKC>WLeSPRP`D8H-)@1Qal}0#
z3s?;E-Ipp?#x-oM$;M{SUd at 3V;2<7LtFb{o22YRgi7ufIq*L^k at ZIP@Ozs+34i8<X
zW2muDDkHPlZov&Y-%#8i=#vxn)@W~SS)XOo1#wE5(f|hoO8n$5UUkS1ei{rXPSS0y
zeO$2YQfQ4Kmul5YFisYEVnZ~!5_f05igjHPd-)GD2U>tDbG5zTT!7qA&o&Bmj|sYi
z*Fj%37+2t6TB+Z$y17vh<Fz9WdQF8{>H(L{uRH$^dXEaO_j}lRV2X)RdZ5}=D9Emc
zr79CK)ic=CJU$noheur$aVWs$Xi^6udbWyT`q#tw_vJcnbEgc`_tE2D-KwEf at F99l
z(Kwg$VrX7^m6J3n+4|n#D#Z|il4G%V{6qXm1}urFQVjaRH{QrkQPS#FgH%>>xjEL`
z(y&fhG^DKiq?zqH2x~iA7;aM<L49$>ZR*$gFqPas at 4M5BPQ%rmkBm>Y<5Z#2`uQNF
z&N0BA2JJwI&P!8omX`(dI~~&}pNM$u;{6%dFx>%Zu3N0hZ-<$KfQ`-ArIVMKzy|wU
zy-FXgLs~0oB`Zlc-Dvm|z*fc|)*o^|UdEk&g^XZ~$jG)iq$l!jdmWOzPwI{(c*m at q
zq7?LE(fC6_BCI7LvRdHOPQg^<!%w9PLot24W3hUG?(Y&B6&Wkv$(tHN<bxn&xOO_S
zFjAL at m0aTd1jQobZ~nS`p}Q&4>$>*!w{V#P2zUAy@{{W9W^goXm`kxni=@ml&xwJ|
zaz0V5ZEq@~X$K<?oYWKJ=5z0YdwbKjvQW3x#E1W;G`FnKvCBfGVs=gOKhRxlzFVHv
zEYMC#j8!T=bf+E!&ss-d<fvJ6rT}MFGzunGtD`}wQ}J~efc~Lic8uvDqyA)Aw!RCL
zZq23RRb*>`Fm{w<elA?FzjN{gWPkaXQYtbr at uYTW&x)`*8?- at wnx(v<1AJReuB+V^
zO1jP{QyKXW`P*PeYM_NYNgn$2o;L^{!ckN3eh4KndOqcT4+v>ePtfx_m(OZNIxRr6
zW;L4XJ<uSxZrH}e?Pwt at TWHf=SZ3&AQ3TNfCGNDb>a7Q+mp*(8##=hxhywnaKzd&*
zcWE%|fFWC;hV at 32rFrQFpqyCvj^D0g_x(JW_l+TqjRRaMI9NPvb*ABtj*V`t*^z4Y
z(1Iot5lF+#TDSGIU_ZeCP89|fS7}Wz3(1JJ<(~aSVHw2UV5=LCU7l!K#wQ(=Ac=)n
zrCZZV-z=WqNPXe)4o(I5O03r|DNXNNxgPPS0D~duuEuhFp~D$}N{4773IN;x*=938
z^m77Kn>TMlRS1a!*5CZ9b0*e)-Fe^^<B0NXHG;C*-K0>?6tKi$D574kOA>Y)SWO)?
z6DSVir8r?AuFBa^>s)&|W-^8hA*2~eu%dj+K7z9MEhg)`YU(+aqtB2%Cuw}47r$cM
z*N&wV?wrMb)a2$+!%ymBqf8>D%B|pvUN2@^N<Q-yn>^PJ1_ny^*%C6uXe_TxR4I%a
zl|`%v(M8Y^@M`{SIDEe3lns;TUJB=cDLO#4F$IXB&;8yKJHU{{8siCO(r8<BL)K2n
z-BKdBu(j)&G7kG0y*1^SIXJ-ib(X=dU0FoXEk^65I2N7|8*xQNf5+92SjU at Wv|x%q
zV6u+nN&)pspYf at U>N<c#aM^xfzPZl7AS0Toc+cR3*-fZ{my5YI>8x5R=GU1A|NN<v
zPjAr`xIBs;`#Mk1OQTVKEEaKxntt&D{=$~Lcj<LDjE~uJ$FG;ERx+NN!3}LvrjvDs
z7`sA+l=33TXshqi0r0udsCmy=EZ{FU`N>8&IoOedlVD8;P%e;`LnF%#Y~^l)c8VeE
zt&4<l1GuxndW4fL4Q<tU9!u=MCEQk*j>oW5*;0|f#PpM~g9UQ3EqF{E_S&WF8Jk^Z
z;N*(E#k9^q%eY9ICe36rE08BzIQSndzG8j_4`cSQZ8WttAHG*<Oe_yqmlPT#@jk7s
z^cX*(KR5>L7pe9rlMo%-83~1&I>|!H=OjoPJLjHRlp{j+h7Zb`kFLh3<a*Mjp7APC
z at w~1~?XU2}qvk`tc?QFYy(HrARgO3n{M|tJK&eSpg`UIm@|GE=Q3`qPI?sf*VhZh@
zWE*S)pPs(BB{u-}@`rI^0{ullV!6?aa at Ezl3GG$)bp%?oA2Yu)6(VWXkjN(GUvfIS
z1(S(gu!dAahXGdCwQd7_Z|{{b%6UaNH0DHI?(xYs8jVaTGDN*YLl5>Vt7^+hd9U$R
zSQWE8zwF{FhEZ#y)2?kmOK=WZh>w%8uEfz5)WHmWB!G*rS0Yu}6fpPs7I=(Vwau+`
zkdNs=CO$KUv3f>sYqO;tKM^KAJncf=a~=ACIat;x$FwP$P;cHFk4I=3bQ?#9qa2V9
zcB3Nqi&OsHTN&uS-5`dtuG#BRKw**{8H=1kthkZ7Ga+rWmRZ35nb-iyKx}=_(N)6V
z)x^o7IrTFg&32xSPJ;?Qt1pTyMqWHWx%%ASKZ&fhzRwvt at v=a1#}k}pbPdF!^$q9^
zKg>Lh1j?R_Vx4)Q7y^IgD`Rbx#q&UGZJ1+dzHM|gv(J_atSkAPPdyFaCl~}8dFq_l
z`fQ`SD;_#~CRNm-bq20T0q=%YaWXPe)Y%AykyEkszb)o}xX(J)PzY at 1T3X9H4oBv1
zeD6!(PNXsOyRKSfa6be;fXnmkhcsi?0jZV8H9bZo^sLU#4jPg}QZS;oyAy82uoif&
zE+`DSO%x9#z4(sbL%3twGgK7lB|Rg==HMYyy*0yz^5TQ1YvyNucP at oB(uXm@=zZ<j
zC!c-OWEZQIFG#HLg}!+ESXgpX%8Gp(0yOwUV0`AZk9905(=Gl2ZfO$ltJ2RCKE)8B
zI0KVaIAn!HctNq`k>NB0>-&{&&vVpzT7i3TV at 9d`GYV03y{K5PhcPN<s2n3?Xl<DE
znsw!NH at _bK3VTKj2u}FVMeL!*)4k$~u2gMpCcO^~AIgyy)~*wOTYz1^>NNqQdJ`65
zr`FT9PEG)d at u2>eX-?AJ#ebej8WM$cfSL7olT~j4CY0I>NP4P-iQOhLfkr5p2;xy(
z^dQg-v_aG8SP*8J&406FGzIlNw>u=xs@{8h7J$tqjz7SQeb4uy@;T)QTubms6S`!+
zN#DJcd-b>SXJTmLccx!4<!%(NACPl{z=hrB&R9vKqWV+ at 9N%L5>hFHWlo={rkGME8
z^MG at houL06ZTs=U8W5w`o#EEX{{IS*f0Fb3WlW))MAS831hKEm(hu;l0e=mfhOwma
zgl1Zkgb8R;HlbenJPAQv2%^5@`JF1XQ-EWNLSc0K%|b~L^_idd<*-LJ7S_^S#E?yj
zBA3=OK$B9ltWFdWA$s47zxR3m*RkSkWZ)K5J*NWDrl6_5yrMv6*u+ThVEDcDzDYNT
z`v~dh&JNtF&mR(A5wl5~d1!7@?jRF&wQm{849<W1`CCuSKxcy at WE|a?kh^GgH5W7J
z$o@!a&^w|>LP6?#6~3iB5DCeIgSwyqKiWSlRDntDs&W>#X}<OB_%9k`i#pX48Gc<4
zKrtgWV6MibK!@8j?s^1*ys(N1xK{nl+c#Tbl+ at M2tYh-+_g$+~aX~0KiUcNKXxlXf
z at OL3+HXsoFoSJdEm^UNqDk)0I=@4;WrmYKc?2OVt0*{uE!q=Hdg|HBh7>ZqGuY5cS
zN_>}O%1^*rkx>6`r9kowq&81IPeM^g5IgQsA at A{V37<1|QJHf~6E^+`<Fx`^S8ZD*
zEP2{Z8*u`4r%YNo?u0A*xDWwQtHrbWJ1g32T{g`Va(&!t`5vGV=p98)qzCN-QcEAU
zdaKSvi5!#uUBfJB*_>D$sE*QzogY`|@V!?uUc1^+;82oNR_i8J!EU0h-2&Y2 at 5;&X
z<(6&W^$Px*zrSr`nal;dztWH@(Is&P at 8ghfWwtH)6))wQ;F$?fDX<N!Us5)7#5t9y
z at W&pZ^<t>7nX1)ab^Dp;5J!(IAWIC)K-kBUQJS=gy;k*fszG*0q at oh;rIZkT6yLup
zt}MMQLqnDHqAt5^kC<}uP7`xkB^wl-=N$3Tf4?jA3}+%vbT0%C^e?P|y*f;YE#z6o
zz6&X`Tj2D_%#*12MMn?hhT at TKsi+)%4kbWizh`moWTTdHDiqky!>z__sx@!ovV$5?
zj7*SDZX at -BJEXb~<fD;ry?V@>RP~6jtv76|o85F4ilsfSTj)hCjnO2}nwm at xzlaWm
znqG7nl-UJ}NgU9 at En5tiT|?%<Ng=R6C3TqL7>;R_EV;z!5Ot5(6Z>YydgJbsQt=es
zYuv1UfYOIR at P+9`j+eP4yCzpo2*`RSA#`x$pe$%alDWx6BN0P$!tFvN`4Q$>W)+&?
zWv+PNKU$_C3AzGaVR+m`FU0Ap)3~~-fo=Jjs;ccn!JXSYMOJe`B$K2o<EBdksu%*8
zrJM9iOlxyVZLH=f(d)t|#y90#7p{E`5pS8epd!R2d(yU<ck_nezMiwiO(&a<ITstt
ztItXU;yhx4crcG^oT(44`1B|X at L!Zi##lsB(<L!w^Q((r_rdxnW19%OX5|HD20X5U
z2=#K2Q(Pd*N7TGMO4SliJ#_awI(()q@^@{D$>ud;vC$z;IL$*k^Px$l_hmO+x=`t~
z#30%|O)O|XEZ%|EX`dGPI~&qCQ_JO20qB$@U1;7KcFOuf#?Z{Oe at _!;q8RFXXVL~H
z=>O0 at g(4?(==;l?i+LTp4Be$DnCJ-9oZfnVugPke>&Yni{!HaV0}+1d8B0-mct>b0
zIA^YD59!q at Z-DwhYV@RgnVcd&)*kZLW^T92khpYCAZP#eaBbyv;8%L_`|7k|&6uwy
z4eiH9yo at ct+}zac%x>mkU0>SFt(*%<|MU9Ob~hGaam{PmJsgn=18~)t%_UlS{jmHU
zxex!E{<sk649y2`Z6*Bm&mAwxo~XPSC1tOAi6hXN<4Ye$BG+IOoe0!}T$ycL<1VUy
zgKWH}A<c4Vyt=I<@lR>_h_T|GEtY$wW^8rm0 at w!Jkc=A6QOOB-Rfie-T{XXq#=*l?
zhzgaiw<VjQ4=_^&3|*SH`mf4eu^St}@S#dx63ENrJ at Q0g>k9xxcFm%pkA68cET(rr
zqm+#ZI}*;W=*u8 at Lt;%(V`@9 at 58o1w*fW~y!_`x{!%B<R^&3&Lc2%0ejv~PKC^0^4
zbUSz>T2p*3Uj)-u8_5xV-eGFnn-?2jR?#Ro9X#)~6XaO;0Ox+IMXQeZYu()joHSO;
zG!BCQcwd&)KN;#8Kr!Ad^808A+18I64i-_3wZ at JrMJ^^&{OIqof0=WOL at L`9(udjH
z;$fM!v>x|f)2JFe<t3_Q&m1>0rX{DgjP^U45z`^rF`n at qJqK<lV$y9_ at UrrZ#D8Wp
zT^VbA_k~K_*Z?qVK_MMqoInfLUFDM{cg;$Npn#}qW|tqfo9bOQPW80ML#-|HYnA5g
zd{tKSM+>`o5?=4qB7KSAa~wUWVc+R~KwiW at RyUiOL*3IrgcKF1jjn)hVy1=KD|m5J
zTlBewOVEc;g)r9jrUObQM`DL2RWx=Eas8p7w`AZp4G*1&Fk at 5-eq`(qs)ABzdp6!s
z`>gUgM!E>1o8=mL8 at cWZ0czI2P)DiHmz(<3K{aL~G^`+FQ<uT4J(kfnVN)^EuzgDm
z!UNt6pmuWo1T|ne(twjUpYp!yHEDH)r6#^s at 9N}@&ZoZ4SRRvBH{^MLT9=OGG4Pk1
zc?MB?SmAqA0y_)dTBQ__8dFQj<|o8VcmTSFnbEuzJ`h>c4HgEJI8>s#C#4S9grX8l
zgC^oZ5Mu{wz_{Be=%;Drb5Zp=uzBAbpDKX&L#o9{ISv5qe}whyxI7W!w$*+5O-KN0
zslB;;qt-@^a1H1uZEtF0mh)2&Z+E<UspU1|(-sS&wL#u+i&N-mzVE68bH1pVe}y(N
z6PKP}G~W8pj$^(ScuL_iXg5I9TP=)T0YfKMlmAc`M2S<&ZxfSGjWRGaao4JAc3K)?
z<T+<uNhO61p#bxyM4YGAzB#gPNT>dbfD2&i21hK41N(qvK>L|DzRxaFBNn9oCM(Q^
zIm-TlNLsNln1b{X)GA>1VT_hfqr<md6Zua$nc^m_7zVPet8mvfL8>2id{Holy9zXg
z1X)tg%z~6ImV_atw9;Wc1RljBlM4PgNey9id82YH|H8<s`MjP>iK2wl>D(3j(&_R!
z<|3l5w91UfjjjJ+Va}b3<41_S6Hbj(g;S+YnnZjXMMCDXL1U`YS<=_Tk8gc~p{n}_
zB(P>QWT)=eu at 9jH>LWi$Q~|sD*EoSNJhp9OJEkOIgNK5ymQ@?i-x(vzSf%xu=KTkI
zKK5XPU~v7GScFe;Ck1xY_5BjMh(FW{GxIfyhkjjs{r~c!dfHyEG2_E_S$!Q2O76;u
zg5`}MF?s1-42}!r3XTU!1IYc1whioK{FMozXK|`EsqPE!j=b;(c<6%$pE{NVE at rr+
zoMgPrHG_$#rMwlnF|w_y)x$F1rzw7fNa3#vaT7Cfrbzs?zr(8qlDCnoQ<u^UTrDe=
zRPr-=!A0#Q5G1c(TaL5#9DDu9xN9>kmrbTfsH)gT-2TnvWZ^yR=C1_3xWxf~X0ahi
zG)3zU$;y=pCXq`tI_8`srG3l7ME4FIUdi*-u!sW=UO4{fq~)Zt91&ue$yd4_hOCV2
zC`Vp-74Jz#7gm&pmg7<IiM3JZld~!7L3uOKNS>zWNNYVW&MzLMT~#_H4lBym&;ct7
z_L at _Y%_rArg>2Q4!Q(}v68nmQa at e|2uRJjzEHjp?@3TopRXy at 6Aw`-+5!+LDT_tf<
zvg~*|)U8l7NV3gpV0 at zdQ<=h<Ai-Iiwfmn<pO8T14yS5zUK!Z)R#D`pkS-_)>ZxXH
zdEAjmv-U5R6Bi0=d2^<8FHjH&Mv*{ekvi-wRO-hRSOB2`c>Vz_f_QEcf&J&~;jI}9
zL0-QqsmXE|bn5$-UVl5*<<hDM)Dfdo&|*+0B2k at Rb6|+B2v^ClenSz%hB-B|MM;Kr
zH_m&I>bSW?`DhBufc)ZCT6OfILwpIof=RAMY^6dGT>L72z4dX1UFU{cJE4$UP!%z4
z<jhEPfKH7TC2B%axrNmweTBj6j-HwIKdnncg~hK}+aFCRIs4Z$CdW6DKB%@+@?wKN
zc~Hk^<5%4CzD$p!GUzw3uBYy=%SEbg7drBmB9g=*+0+D9n|(rn?&Txtck5mo1w&8Y
zdtkqYOYudRukjO%%V4-i#tLK0wvp^(%+XPb?;OH7Ds5)@=UfgD-gKoD-_x0STl3*;
z;bQC0OoT1)*|789ze^PS$Q-|AxF6|9kvsK|)gZv?)SGR15x<FEXC)Bq^_W at r@tD2I
z$hs8~iY{snOX at A1@V95_13<_0`fyq`0x>awtWBDINgL5#dbFQ<H3y=RF9@@va8Ng!
zdv^k9(tk%6kG+K%Z;gvPdLuRJFAn93SbJF9@^nm;N2V~OER#Q;ExjEu7$u|nn*krU
zxJ%m9Tu>Wt1b&Bndyc1VRiX%WPhJK8xvMn!uJ7aOloQkvn`9{#v_Z`;pY;B!t%SKT
zLp|+)UQ1*-qX{W+c%7`!NRB&v*9*5*!>|QHre&}rfCo%rU at NCu_PA7^rE+KVdsT{>
zUBZbA7!5T3B85jxom`#T+c;YB6*%XK5e^}Rg9J(s(1T~#s~WKX_hQ|Zq0{Je6o-Pr
zh+Q{f>po30tFx^btp3{-lduO#;yfh5T^sLnt?>nn*>>s-5nki?#-`(xJjJp}QxZ3L
zY*Yxt=tKr20*GKQJ1bje`k6s=DC-PiZiAv at W)2YSh4V6h03wBaMO%47Y at +NISDPxo
z&An?HjLuddFzaAdqOL_+z-45MwylQLSE4W&i_>An;|-lF%i=5PmbKuF&M#*5H3*^`
z91(GMuETs!rLk$jmBs%0WDZ-myGDn2<p9dUC&k^`0%Sw~%kbt-E`<BPnwKp9a-OGl
zP`bqqo7TMCq06?Q4iDD=4FhKT)lGBY^cye`N&1d>h_ogAews-;#0g;4V}H0VnxGBf
zzN8Bxhj at PLQ4oy~T`%0Y#42UwlD at _eBK}H0|IP5dG>`A#)v$5uZ_d?lB#G;rc*BGV
zr{%VMe38aXewUqrJ4a~)SB!VRsZvnnM<C3Q|9u8KYE8 at fRa?hiIJ;fL{*BtVbyGTb
zIRC=+Owf68?SHJINr?fB#7Abe9UP at Qye9nXIbTfIZbw4{^;_x|#2ui&g<+;e6g!oN
z%)N+t7wB>_K4&3FjTwuRyyr5ENN7g+4UR$^>?9xmDL|mw`X`IZMhq<IQ_DeG0gxBd
zD)6sW=#eb{Nl0T~@ed+-4U`*?OgVm(zJ>p10f%gN?c`6N1WI^omvgUjcEljPxBG4(
z9jOR|(QA57CuX|wNd5Q=sNa#B^`NjU>70}+o<~TaJ13sUH)2d4782;B`EoKVd+5l~
ztJZqwL`P-SUn6a>B*O-kk}(l?t8fmV^4y3^1cbsn8=rG_q0PUi1dm|Gh$YEqp8igq
zh_n6;)u<z(g(NZY at SQQ5A4SMSnKCmLRu+5}E2BQ<y7Yiglw at 5b#)P_odFePQwPo{N
zShNTn>nzH|O&!X$2<SBqwN*=egWDs=gT=zfPxd3w<>8BHM524c&|YLXU3l;jQ(M$j
zfTq(>sg&M)&C>Tuv at 0VcE{zd=OGb^DDLSrdu#4{A{*FLqs5SaOrSY5LKdM*nRKhr>
z*bacl at s4;sIy9ZpveoUV9d*(27LQ at TDtb4oh)fs at KXOBkR~H{2b#Ot-pwT9U|0$!I
zcYeR2$@#0Xf(b_KuL^OtNjfUs44j%p;?$t(*FVTz^it?WB^G=pxtVHm7Zm at 3GP)9M
zYI_L6i*gs<LB^=0F(1NL!bG*a02&PYx6jGWiVORYiSuVIwjDIR at 02*&x~K2h_JJs>
zmLq at 5FWFm#cGNR_0olUTgjYg6(W5scc4$8s^C(>$v8}7y^fS0eD(hLwNbx4_0QSpS
zj$80$zG=P-wm;?bn_S{f^|{2*<>!`|*3BYB%C+urQGzt2GzB>fB!Fl<l3}~A9Jda6
zM<r0?yN_F@>hmREi*$#psWjSo9wP|=Bl_OctMYG<{L>zVtjY-y**MC~*04VXPdg9u
zs!jObhfioW_{`*HOC=S8a5OHrXTw=*?f-a=nQyM0>z}J$DaP8v{4=35!FRm*47cAS
zrVP|4u1D*guZ0)#({k_P5>R|ow(^RE=oyAQB9jXDH6G#1Vgk^+$PUQ-&@sSFJsOu8
zzIS{qF<lD~Dk2z*x!%p-Xngw_OY#KCnV%@Mgfl^0L1!N@{_HGjQefHQxo^8YIIk-Z
z`ynlqc~v+~hP=+bgen;h!{QC|P%J=|`-^4CTgM{zOI4=Z-T)1+tVAaBOwbWoo3N^G
z<Jxt?Ts)7gi0AdeTYz%WRhU(88TWNFCfC=a#PET1j)eHXkPkz&5YWI&&Xruow%q7o
zP1xrkVz_~3x0i1>64O{C+?$JY<{Z9HYiOyY%clkFYO$+YTZI8_!3FTF=*~B1zIr|q
zP$CRnPCkmk`{c$3hBYGg9BqIp98n~11>%QJ=p;wt-}MPlL&tNL<Zw6zgfRAC2)i*1
zwuskVS!;LeR<P`TwrCd$c+{v7_VM8G!O7N}xxWn5a(ovl6NRs`N%|PnORPaSKVV`a
z5K$vbm&#dKr~FYsYLVtZ(c7bp#y&$teH;KFDtO3wD{d{njenR%y~<X at ZNvug`^7nd
z$UyfYUO>>krb~vixy`(>xg}AqgTE{hrfkn at iENB;wuFy94nv<**y;&p547om&snTw
zkcm#=tCH!-81q5bj$+n>lx4Ua&Zvpd5kV0Pka0pAgx0S5#Z2_Eu^18}H7|&8pPM{@
zM}q-mD03s<J=y^tDKEvH(`KNk7X+E>2^?ll(|!|f?n3Vsde10@*hG*tfGX^^e|9wj
zQSKAub#%YxcX=a at jZN0cY6jU-{GbKOCzEgsIV`AdP-VdTLkX+(f&lt3hkg*ZYTAn5
zpB*L3{mRCZiYppsC*@^dO}G at v+t|y=O#%(xHXhC(Ho&Cny9WOrQDp611VnX#^W<sg
z{l6rD-UIPxz@#ysyAUNpw{=5MAQ%KGj52EiRNWBoHG{?wb$%48;vo%vRGR*^`7>>v
zZbP^uLT#Be@^6^XDmK}FasRKSi}Eq)T{ZH5AL&@5OPdN-R?kt~k3dYZ=J3Y!Um`>)
z+5Q_xJ2az%5ae^3BzP;d?bLe3qWHW;;1jO?!50lzI_8x4Ccj^un*(Nfd0RQ at m;9Ph
zsvTe*vG!pz at uv|}pSB~VL>b8gGmvp}Mjm%}dVWRCY4_Gl{LJ&incY(L{yfal*3j at G
z4T-T58lhh0LG(ocjMsv=;Q69b`R|##a0~Bv_A*dkj{IY`X5|?8inmpHT33pXszjXy
zUzFit`s&E~)WWHru6n{4TLta_-0)cfw;HcC$0R6Q6HSbyW}8rlWLm&{(d3-YHa3Hy
zOSdgVS3Yx}H1wra<{iPCT*Een_*ec>JhR^p=Oh#$KYgT(P6Bj1Gj0yG_wjBPJ84aB
z&}d%4&^A4|!+hsMvgn-gSO*g(YC{aD+ys3m(&H-NkAq{hJQ)RrN7#EzH*0KS!IGMj
zQi}*e|JFoUQ!i3=I&vu85g$aAQn5v}dUzN>g?ZUt^bZt#$^`5;WIbN<rFTmJmbSvh
za(dX(@%(LEQYmnLzChE)9n>ij`*I49K$we7j7Vp9^%yayslBur{VIrm11ywA80hq(
zj-IkySHx>v07l-*y8bj9)nsOOrxG%fcQytG8#VnnCl672qDY%|%Z at OJX8h^5Pw5{$
zo{NQBbs9fJ`wV<NWl38#YA$JF5H3x_tfO;4l_Mx at DjC7jm1ris3$ZjEdZui}ZmvBT
zTcJK at gsx3|DcMJTiz-cmxt>XE9U*^$Pf|{0TZR8kweMuWdXnzs)7dwA$gmgki%x%}
z2I;0hCo+T<tcx<{^tj8;JDPYOwY at LmI&+U&oY4;4so2lb<s;avT{`VUiH7QtC5Yfm
zb&d8o)_mb`GMuS&3?=2zqb^0GJrM?`P4yb`RuqP%%W7WW%FtX7A3l*4I7+5PQ$6%4
z at UT@e?qJ}&8;k=FAs`_q#NdB`*V_9+mo1I%9GMLP7LLPGP(KT)*F6lx&ZQbJt=V_@
ztM?P_)m)KP&Wbx$@x)L_f0FqYE%iMDl6YfL(oZ)4s9>&46KHl;xQ)89oDBWa6Shka
zw~l=ODVCC$0KpG_64KIyl3ykjNhAR(M7Bz{ICDLwllrPi^d6#v-9~$S>$XiCC1=Ew
zccqzcU6uedshlD4-!&$zQ_}Zzuq~N~>$Z}h?h3*kcZF+5&4AWH?7##)XV*1XRQoLZ
z-jL#Af}I>l{gRbB=;kzGGXX<0G|9&ZjuPq6*TzDw_Md7{@F6C=-Gk0oAk8d9AsiR8
zA=w8W2U}^bNAJ)fH3i+ at N=GMzVlWD1w)ZA85Ez}ToxpVU4+j~J(27=KKu;+Wy=T2P
z%gFb2ReAt?6tO7BGU1iZpuwO2+8a(@JgO!!ksP=CS;=wAs^5KH7lIS(8&Y7iD^w|f
zqKZ!9;7H*jOVb!br?F5=?}&1}>hc|@c`z7e`m42*_eE=$+LQxwPj7 at N+U{1nF-|1!
zVWFoOj_ztXW58*Ay2QIUvlkJ4fAj)^85;5N=(%&;5=a{B6Wb6j>6of!896f>KuHKw
z29}O9{lr9G16+6~{qSXe>B53OGi#zwHEL{ya0t<uf(j^4YuztDh*?fVQ2Y{&tgGFz
zk at 0hmMvQ<8e at Or6#KyMzGt%=iaB0A&P1WCJi>sE%S*~3vxwpWVv=afQ>9I@{q$2b@
zhMBHb57yieR at RS(K6}=&?T}xdfZp32r52VuhT5lSBFgN!Rt6JDN?LwtjOlx>-ZZ})
z8(xJ{#EsyoCmIA#_K at l@+c>%^*}!mZyVhTrtDoga$!0Bp{lHH+dG(%8W7bBmq|8$r
zXD>KwSTwp2m~9W-Sy at J1@Nt*Ub>lUxi9?o0<ZL&)qHvv7`VZmR+EyOTyVxd=u2ZBO
z<LA9=?jFclywFb38>>}JaVd!D4Cx~|h)he5bMoO|S}K|xlOlZAmVaM4U#&F(#FZG;
zo&VnQoqYEk5qwf2D0QO}G`i3tp8tMT1Kd#rDm0u=tkM~8AS&nDF~Tpz4OyI((|GWk
zYqLGUa76JzV0JMld67ZVsa#vclMqXanXO&)!nIxNR?efj)2dyI&E at k{E?k3Hn7~kS
zZ5t_Jh6#S|UzBMZDg3y>)cN82%Op^;DG#nGB|fe&KeGAf#3_ZS{-LK(BOu-BcTVeN
zS2vS?WE6TeE!rJNvIFv_j&NK5*_3q%nRu^c;-`qr!A`;aFa%@yHasPI^cWN;XMuHO
zT%_52WDX8i=1G~MJnAJ3Y{a}s1-{V;$s*G*&4$PfarHIlmiWP(RiCZn=(0gh6rPkY
zRrM`zT^K4id$s at TPcAm;ibI7D^)QJ9P7PF-V7-`fLY{Tn08VWr>?TJ(%C+P}y3u%Y
z`;hqrIL7_WQwybpgtkaKg6a!3m7xjJ%gY{G*~Nvp+cZi~-(}Bv$5i0?`8mavS_jtI
z<JzOX=Ps1Eh^mh)CpHK!T>@>^;l5a3?EeAWpZtaKnoG_bl(OFiE8>>7Wpc7 at eeXR1
zGor`XSZkl at QnERjfNYC4RZT5-mqQ7c<VFQk at Yzr<Aj)qBvQWH$#1)wubs!EtcX<|k
z7!kp$fkA9M=PpQXs)Q_L>3(zCb!A4Fayzj7{ZfS!wWbml2 at 9{kf!B&TSKy%VnamnR
zJ0{cB(%%Fc(TXyp4(d{F)YX*@uW#8|>WC`+<^m1QE3ba(CkiVOd_e+CL`#@za+S at M
zi=!yHkPCoHG;qro7JiR^=EbHlq0b_^3w^)hYuEOVtnAA~Mrg+eKNEncIcn-gtW=^d
z$d<5zGw$n(I~j9idr$$xFu+HFLBM266tA<x!A240wn!JGrtn9Y`~`PJZQ$<A5mX*&
zkdogc72ZfLT)!fBv9I(UTF7}oh77B(yoy#u;rF#&Y@;Y^9R|R=xl8N#klnikF&9Dv
zShZXx5a2!m{2mtZ>3<{(Vfmcx4)FHS#HHs5f2|%!$91k)<jbPD4{(>v&JazFEC01s
z7=euR+X9huh0TCQ?3b~|he?YcPQG+~rd~Nkg;kQ?IOijqOq*YuETK>pZ at MBdeucb~
zp+OWSf^a^TuKu$MZj&WEqLeQyQ>-9NI;7UNeuSd$+rvW+Y%)@<I~p>igni$sUgQ?3
zXr;ID!N>NLbIcbe%iXG?&~xYsg1U at M-@O9OT6J)Q%2Y$-*R2nbJb5gnd9VBNo-xV<
z-&|`1$fa!a_Kfg(r$#FDHIOr^OJb-ye1=%?a7`zT?S($RRPI`n<2MIrUY@~sobJ3X
zfvud!i`s8o5TpPBgFQ)esFa}DSx$=B9Gq{R+l%ZDd)GgkH};McM__*pN5t^9kMv9G
zq&!msP-($2p!PoRIQ4F+E`(a0d3F__(>#T+*!vOe?%B{J`}G3W4 at n54DUI6bieL!7
zt}M7ds6Q^#@ZVQ+SYTt%{*mLa3V}Lz2wljs62@)l6!SbGQby&^A`UO1KcR8J$&4-&
zfSKp#p?0?$Ns8^pM)>lVampD}R2(WAA?6G_y>30-PS>;b!kNbPm!Ag^fYqJaFZv?d
zy^jmUM!%hsg`G-mx?HR<bPOSxTSO>Lb6D7RG%&(xFObSpytFXN)f?*Ai)t*9n&15j
ztZIHC*2$=|ex5#l)g#%`w&-l|=~UM#LfvbHsk|+5jt0?dy(c>20s|pB4)rj_wH3C=
zyWh_k9KklC4`oD*t*ZQw0P#EW%yUZKJc5kp^*qz-`(q|u#~cY|a?OOW2!ll**~VZ6
z>yI;)DGP*7(YbdcTrX?jyPP&+PYkcL^+1iuGln-YB}HlSB|lUlmcyfCgRk-_TCU`9
zc0K1$bW)XZ<{xN2X<d|hG>@&OY<`Ie{#=LJ5ZA?MS4R(TEk!VkkaI+1jW1FX5J+`(
zJ>OOW-=K4nYtu!MGi8TqB&moIY>k1y8<M$fJmmm6K*qmVyC4y7lI)v-QL<}dx$(P`
zyEBvyF><bgC(@e%6}Kb#t=F1{#xq!GN1l5(aV3PT!H)>?zq%iG3^rD)qHgEslJb?6
z!dFal8O at fa<Rb&AYz-A0=({v0%TXL|Af`j!)LE;L^%wyO6!JX6J34hzsgw!;8)R=)
z1A;w2T+vAD at G6#SP}1VUVz<*~3pGA*7i?vaZ*vKlPoIK^)X7icjTbPO?3!~!HP~@P
z3{bI?(6feni6k=@66-ljl!@oj=^meENR|Z8`om`DGnW96#h#f&oBoscFdM-Dlt^v|
zOUoIVnKpXsI)<$3ha+h`y>b)c`}L_`YFrJQ+!tX4wAsheHI_EM92*RMw~FSa0xHyt
zneq6(u`HL{036sX1Ckc*Cz`HH(t2b(<*@=TzQfQVO82XRBEP2O(CxHiWVl1sXyzG6
zeGzRelVNZ3c|LE4vB<Tga}5%#x=Ub3%A|4;c=3o;eQku{yG34*#pZH+*S5lz;o}8k
zeiBLeljkfZpUNH at QBxYLY*g#|Q2;|34=S2vy?=G3c9C-H8q~H1Ju`@=6LA&>i+=Hm
z!u1e+!9a+>0L*ncQLKwBFrNg}4V_W*%BAMkD2h&?#<4{{;U<+-tERq~5Jsi at 4I^)|
zNE3ItW2Kw at M2TiYTmPPPIxl(Qj#7<%Fam$BO}{1*L^DluIzr%;wB~B~lFg2&bi$3P
zqA%_9;&n3o3FVn*R2Tq$BMg3EiH<5?&+`~y{oW<M-iB-+FC$q`7 at qGpL!n?#y=>cX
z!u?8pw3*u0>975;eXt`WBHi35&%zft#)%ad+K*gcP(crSguUS9ZUKU+2+!Z*?Qt at n
zx|YqY3($Im`AAX*=Xc#*Gt$TMSy at kO>#?`iCZup$?Ne$55}$|5@(V{MY4-SlGTEy{
zn~2sbr+g0lF%lsZAEVhBP^Kc$=`-dE`Cw+RHx}=!0CO^#&%>tL=ISzC339Ix-GZZk
z=hY$;0!(jFD=%OMePLwAiA?P!Gx2>I{E21wM<#R_u4BN3FKFJF0vrv at -?8kXqW<}5
zE)#p229)46Z_RU?*;%C>Xj>?4pvnUtaA?u0h479DU2HD7akOWo+fW-~Xrg9pQ9LNV
z%F1V&))c3e!P9t~9=-<0Bq at 4Nx(HM0W^&n@`m&HL-R6CZX+GAu{m1+g5nmPHS^-p!
zR26dZ!t&vi)5H;67Nz4$itgn61xz at rF8dCeL1TK1Bg9txhe0D5@&SVv6zql)vW7B5
z(2njlS_813Bpad1jUetrFMlOi#kC7dK)wAYh$`uk^(eBIj&%oCeAKD$UUfv^e7f~F
z#zCvlZXN2AhmflHw>n+B?oz~ap?9>dFEiSe2mo8>^|pa{H5ccTbHx&81mIeJnB81g
z;_Xo%U&91yJKusXA at T-+Aw=-T1bL at HlU=Z^0-%Y>rXinP_p;Q4i0O67=Euw$o~zd%
z*3B12CBtbmzPsgtN2fa9Wa4O<E_|NDGtCWTW_yTIc}ys$h4;<xGz@=5_({}M{-Lci
zW0o^8aodLqi;RHTXND&ho`Dbd1n~dEFlCRJ?PqkWHWg#nv at 4$Cl<HjDDHq(|*Tv2)
zbB`0k4<>Scpt*rY;iv*;%Wbxo{nmeKPw`^Lx}r)I`}vuCL=rCY4*d$>cQt!ND1w5S
zgxJN9?n5XFJ2yX4`G&IGy{K&IJ?xeAbC;Xy&-(<Mgo)`e%_aZ*r1rtUItGnxHBhAn
ziB~}Vmr_{OZVq={As!Lo?EXek8}$EHUNlz;F|;9UcSmkL<GS}?)K3i>9A8kI7Q1t=
z{!8`)w`!cr+(|U9MtcVgR?pjsI@`c63cK)?%|$a*ts;NXc2^HAHrH0YYn4Ofv4&_+
zb9AEIjC<p0YMzx|a7HwG2h+;2yvuHxS}M565CUf!W9k(+$vW*D+r+46Q&&(cFOFPH
zlZc=v0f)x#;$PO+1)(U2-u-B`47-<0H9RcLKO9_ov$yqzlg*xS`m6-Nn(*nv^2j*q
zq2^9)p8?ON2nh32>V&GuF#aTd%CaWQ?s>%CLN8ZEJ&dQ2U?Tjnd`X;mr(%}P?%Yu6
ztRQr6PO&`uVC{AhWP(od{2%wvs3z%s;XJEW3_FIf8)GxN)&r>H_u@~xFWq5GOs`bR
zU_oR+Mpvy-vE&D~(`+Vx#^r0r_t+TVZh-U`=R`)6R%KkawQG`o^H40hJOc0L8$Ran
z?Ih?r;ln&*#F*b;LC^Ps1zALJ0H;J{X!g{6;EAH`wYoJmd<$SZJqW9k(3KMXtR;Lz
z at 6bFai%BCBsBn5<&vU`ITVVd*fL?&S9Ov0ud&^q}!(T&`vS23v0 at ISy=y+GHR}f^c
z(hVeK4k0d9t;&8-c9BMPKmOt{ql&STo#*bH6h6LxG&UFv<Mm%^eZZq2Z&a}YH!s^1
z=dUYqzwczpHqQ?J>gP-0Y>N99pn|8TAs}O4bDxmLpXxt8qIRc_)i{6Jo|~gpFS#qI
zT72IAY3zWk(`;PZ#^zvHHpaXUC-cs8p%~TIEO842tAPDnL>NedzwsDWIeCC%KxNsC
zj^kEWcv(amc!V=!u6I^tj-LG70SzHSXzeQi=ftOoG!VqbAW<{8 at QfOac6D6d)^?cN
ziMTXzUq5*6IeVo$znd$T?hJOqZ$bgxQI7r;rNosVW`y2VHJ=;1f(zULab?%tJ?#EZ
zZAzZ=uQD=<-0fg_s{>N}Ka4cKxyb5YjzNF}#dqIB!nnEdC*PApEic`J6?kT<oc at s}
zF992Qs|K+_qVs!SaBVSniuf{zw8I{o54<$DwaxGT4i7_?pJi$wKnI*5MRV(h-^qW`
zVgS&!@xw}^+8vd5)NbT8ZNaWRVq5KU{o#}{MR9j3To1=VOdpvzd`LpR^3<ymelKt_
zXDt5I`D|?W%`)l0K%xT%z#&!Hr_oXLZoOKm{>8{O3D=Oj?!Rz4pBkP8UgE*&G{;0c
zAkG1TES at 52k#J=F&TEd9B~TM4 at RPnL_NnWMc8KV1>Rc;@e)e9$J3zlK8ALr6t~!Y)
zJ8LXwGD%@+)!CO!MCTm_2Dqd+7o5j#@~srs0N-omE~Q}Ztnf_iA1R+}=lYoLc>TKs
zj6$CFh5bs1lrnEyC<%>clf at TtH9g!JDu(aE^oAkxmEgDZMobErgTJSk5g@{C!B(1X
zJza5KUb(i7$BxGS&?_oN8$ZK+;Cp2v`YTZBXE(PiRZK$)01i5x97#lfWPL$jH}~6~
z(O9bymcx>3KljHI?6L=7(?AY2#2J^3Xn1wFS9?o%_1tqoTUN(FMF#x7sNN#G at _4p#
zn9se?b7eJT&pbl{?}i1bfgD(p+tF8;vrA7f>{;pwG<c~d!%R=wNm?0?o=@8Q-YYkU
zjPZgnH3hu8YUoY);AX3vk)i&&Ii>5zaIz^bP=Nj~bi{1mBqFY6Ku5;~A(A%gb at uDx
zof>$mdG8~xn-MSOdAP^v&Q}QVwSbc$6bu$pPV>SRoin3WVaKb at bY>TOdrWMwM8DiE
z87eZQVNe~_Mog{y4s7+=&ywbTtsKf|6 at Uc4h#k2d<ARMJC37xSXjIiD4?qYgnPm_h
z>pw)HxrD7&_KbQQqwNGwBKK#XlY-%6XyR=ol9Z72{mp{0dDlqfGgERP(c>)8nCC{G
zWP)qDe4$&6P5`ZKd-Dx at 96_2iL&7;ZvN;ElDnASMtMOH~fxK at zKlWp(3~VH(!@Ww#
zev`3{2)+Zf(z$#R1qa5i6%)+1$$=4$MhybNrDEKUxW;C)ueDVah_XyA&@RF~)}Mi}
z4BbV{#;4f0fX at kPR*ZU_ih}yPn9>%~vvWAFqIJ1ivVeyy=dp8MgJ^`0Gqz=eg7#|U
zE;QlDK7tX at fR=pfq+^{H5|0#2h-*b(rE&7 at D6Ot~*3~`u-)hSWwn@=X$N41P-9!?a
z*4O7~3n0!*2GT at r?0yzF=^G~{Nyc<Wg^hmNkeaIm9WF0TN3`?dmngxSG^(gaIqXym
zt=ybJD6lvz0Wh2nM}V{J2^>8CWES+70kcbBi&&oM8U$WMa5 at ihA6ZqHr9T1lAD>S+
z-4D%e#^mB#a+vVVJR^W+J^z5ddOK~{m|SuA;SPIS-%l;t%U$Y2*y}(TTn2-1Vx9B1
z2EH?;e$T%ld6UVu7fK0Zd_0e!6YQKj>j at -(6-H_aM@!?1lP<MmOjmtc9MJp8xSf`w
zQ??P~LgdQ`K8bucqxU-$=u_evGCumYrvTeINAQ*dtz{;WcCQlu&O-Y=ieZ at iiD@P`
zoO4NhN*azsdXPy95-*N|5>oM`|G*}c^nfi+>;ppdE>(#H5{?|qRwN at 2`4o!fR&VzG
zY&S?y-veuV&o2=|d^&<zYKQlR2gzPlcAZR>heMz22&L-av^1o-z`Yi1a^1O}EpG9)
z@(wxN<QvW1noBdu?4FG^4_etfP8XpI8tQ?|J;L__Eg8;jE#-tL@%fFU`zI3vb{rLG
zIrZhE5~a5RpKW@*tMyW=gEu`_;NI_u^a8(scoTnN_?*A_)*CXIJ>r0U&C^F};@$h|
z>jC+k1Knwt-_YAR&d at o|#%2Kz+5Z|_9~RbwU>fe3!qL_`L)i%kMa?~T&J2e^4 at U8)
zdcAZYa&#sG4PsNyI_3ruwOKb!{KKUJ9lGX=4v&5u5|s+lkZ~|uBY&d5peNDwj;>Z7
zS-Iah#6c?vO0^cyNvUo1Bdw^S2S=}~K{E at km_Qgp?=XcQU8almqJ5j`--4k5XZm*)
zm&>?xnV?PB>K;*D=qDzfD`RTitDpO}@rPIg at N<H}UX~?IywB3*4&kDryq(;62{Q37
z3CNU%7^Z at h%ljfn#K6)pu*12k{c!2k;I?#_;s0|GwG$DaCMZo<l`(v<a~Y|pa7vmE
zmX;IuT*T9$6}~y at YU3BRXn=Ps0tx%xeptzPjFjQpVa8KL8!Rh(5<|iJcW6)BXLoBW
zurfaGy at Ds593kT>zt#Mi6ys-l>twly>3_v5=aY9j7;(f+{WPRu<5FLU7m0J;%5qrQ
z;v<q<=wxXf`?D!oE%+s-tmWpI!-|XwEzuf at qe50NcD>)y2Wu=fFwx-FZgeU19XEr%
zL|bEgmjevjT at HzOPf=Ou@?$GrIFWEY7}f^GuY4aS_tIw=v>DySKuNj>Cud&*Jz5=Y
z?u2}oB$-9abu3V#pm;0#e1+osuv-qo4};CevyQKIOO(0hWD$F9hiRq6a5FB<_0~R*
zy at G2@!X)4J%d8OeWY1VUoWTJ7;!sxoXzR;v3%r)*QwSdaes`1c9)3Hf>4iSifqUpH
zuhTm$`_be9z9NjW7Q80!UPNxN78M)igMcmD0*(!Jrz$CG_<PiaAOW&}36)XN&x?9f
zXwy;?_CrsBl39FtfQ$x5HN{&c>MDN|BU)p~PhtdhUSU{zm#0Z?kZ{UZ3!-MH3?_AE
z%sGU$WQ3kQT=n}!)5w$OVRP_EkJrbsJII)gwyIt>Yn;)+g^MjTw6fK)Tc!XV6My=3
zsBP~obv1XKNUT20Zm4>vCvASbz61z<jEdv=%ya3{a)P2ZgWa!W3cu2^okdyBGxXEV
zvd%fYUeRD{Lp>tAD5jx8d9gI1G+7}ey9SF%O}HAkkC~hGohL$oHgu1_Eh_>ToZ}h?
zoxkR5*Ds#$zex^(BHmHf0T!m6J=6IBYh~TC*1ID2PF*JL%+X9p`eFvFWJJ1o2%{C&
zHxvJl^=18otyK6c&V(6~wun)~R1w~egyBYF5OCK%h$VG`BK<ZKEDmzJDvf47tI^~}
z%?1A9hc&zpLuH*}@`5yY)4C^Gk5FLJA{%&Y$GAisv8b0BV^MBs at OhfBTHUjzYX$>v
zjWyhAWK^<JIVZ(GTEe^snd;UUrBh2qd{_Do2`o%}6zdQWv?hyJkAjl%OC{7}Z(dP+
z)UV3l^s^frn9+QDJjr~OcOs`ffJw|7Ra?hJegD$;G<kX%v0jD<IVTCNeUJx5yuUM3
zmy!|I-$!FN3aR_N|6H1kL+eN+Tn*!QZ{bs4 at Z}l6n|oY(f#;`;Z6`Y__43?5!^W30
zNV?}MOHGiF&KH{SZrcX4H#BuvF2h(YW<pIW=~-3zqsX;-cpKJm!u-q+N=G2(>t2wO
zif7>UGZZ#ve)JU1LCzJ390x~KQu*`rjt^R5y$aZYvU?;|L5cbII}T)GR}w%(Z?~J1
zR5|i5Py+E)!$}&DGvA<&)-voec=|jpbctxgZ<_S&`8E(K)$9?9U1>v^5`7Qln<&_-
zIt-mw<$mCS>X#=k(S?8mcG;Uwx_85X&TMYd%&A&=H;{xy$F(?G$?m?M<OX3y8pToo
zZ(7NN8bFReWu`)otR7E;U;EmM*G&&|Z`viom(f~iWsmNwt9SpDKST8s34~ZriDXiz
z*_Ihdh}s5d+|Q`-QHl at 0?`9_iS2JhG53<=@o|()X4_(lRZ*w{=`U-`nUX|8N=(yDM
zt9f-T(S)B2cA(JQMc=7sa$|$I3f_iCM^~g5 at HYLl1@bi&dm8Du{>`1-h~dt!h!A;-
z3UC6A&M*v)py(=7gU<6?5_`@iqpf#M2c+a_t@(l0Q&?K<Bjoa_f;00nrOnmN3Rgc&
z3l&_iqjx at uTm#?pzd$1ENZE9;XaUNRf)(F&*R%whr*Sh8#MdF~p!3q1$Svzy{0F^o
zh1WnAtI%OUmx+U+9$^W%TmHu_ at LP<=8>FVJ^1^h;w~W~BL?n^NfERg>sy8Gw)rAcj
z4^xlTnetj^eoaaul1uT?>s2sOX(;?V1Uxfd8^c0I!+i<sUVvv_q+c~M7neY;7SH-0
zDrr~oy(4WLerX0^<T$wMO)uX#fNw2{hNzsq$)3|^^!T;7?Qsjt7uHf)dm>!u+f9Qe
zhP<4!Y}>v^1niTCGhhYTN7bzF_jIf^tAMB0V%868k{wy<aWzg|C9B<=p_rg}>$O^F
z0u0&yW{+)_h#tW(y-%;Zep1vqcn=bro3iJ8SRHbqwuV*=J1`UGubyV&eYJL{SUa|z
zA;hkoud|n{PZ)bN^h=mUUt`XGCu8`U|H3Is*`nFIH7my-Q68MTH~Dr`9`CL1i?dId
zY-;{<qBUkGG#)&XSgh^DpGqV>WLqyLBKWF<USdxidH4QecM*myZJ9VWF18v*OIRpn
zSN%0^wa9!kCMT--p_E(araSQX)T!uCQy%TL0dxkeN{=;mOEHAuQsRgQgGEksq=oYt
zDpiI`XTxM$;f4M7p3xX#nVQH>TjErJ!fgY9->VBVC~C{{PuWk-=8%8Bmy`do#Ilgr
zoThFiYe$BVx2|Zi`#JG|9lkFQQNr)dXItf`ku%mJh2lGU!~rSdcc|CUX$>7mdZI~q
zw$x%aCm#rK;BPqagyIgnhD9webtt}XG;SaV8=@*+68x?`9<!3Asq?-`jB4!c?y|$9
zjK)pxplfpL;khm|z!#Icfd+fLf<B>8ll=J|-W8PM-&kYyP`XUagc{zLf;r!4g+F1S
zyk>qXI7&z%@Dk4Ott53YvdEuBdFN)=E&9fHufUXYOuF*b10xjxgA{80HaG`Lm(RNn
z*$mOP>rVX+4(-^`{l9g8dS8V7d%XQNsA6026-8n;AX@?Yl66OD7;hE>J5(5~s?*P=
za{DLbvn3o3w*TbTmro&6>3tc7GmtT+zb1mUH0gktd$`}orc?RrhUe{At6f`ug-E at d
zvwdAJ(|D+5OzQGm$|0O~(c`n!+z{wRb>h*XX6T^Ju}hkX2H)IvoXsbHBA0!`|ER^?
z!GR at sLo3Q=-k>iuw*=PIN%UkV*}-8R#o5Nud$4uWDtW0HJc+%Tf!v0L4c3Djdo7_U
zX(laVEeW57+1Bk)qlpXC?C~7b#caPU50x!C!sit^hml~cVrjN$r*=24fcFBjOzA8U
z<!sNu5>1Ft6bZp&`<pedS_%rnS(4yI^d<n*H>Ak_NSYCOr7^TSSXol=x0xQJCaKE{
zEz4rL1YlJ<oP_-`<I3Vz5KZPH-kI{vOlOzp!w*bgN*m^K%FTDEWSm<)?BW|Xi(GZF
z2%vPsloCTYeulJd*!V~F-vUn!WrO|A_Eo0i8=V)f#7^`+ZwZ2>|8zHP`rJHX>s(}P
z+;&L9lj-&>`7!*;tlleQf-vz-z<i5YVYM^Q*q at EqvmV9>t8uLI`y5x<T at 3wy2c)xT
zx!NM~+G5p(Dr*qtH^oe!o_t)?NqLTEaUPX0XSGqtl_D0B73#Wa1okHrnyr>cpcGtG
zG5QhtiJ^0F<w}nAcXR_&4d%IM!G(?5xbR0sJ>=iYPr)g6p3oit_yX&`C=#vB(V(S;
zk<>n at S+Vn@W|^XnYnoE9$4R?5JWK{HEG0(=-sEdY%^Le=0*w=}MW-IHd_9a<>~=vb
zkU1FoJ%jEEx2^HAQQ`IRV<c(!Z40<%G7cwga%;0y#dE~rgN|K@%nw^VBa)RUB<ur1
z8LWTabd3|H&Cy&{m%wC_|6Z<ZZz1w5(>LXh`^i}OIAm(rbPa#L!xPO=jJ|igDqdnD
z)U%GjbfFuxWzNATv}?lqMgs+TOGnWa0>wV&Q<g%4omiM6AIjK~PZ<hnkn@>u*1y08
z6>OZ8{+PaW(h}|NU>o*LEKd}=yev9JPC9}dSRXx7>TlEcp7HjvHeW>Q+w-l%EI1Z9
z3 at e-w8u>WN<<BX;W9CR(=b3fZ)QVT=01l?>4Pw13C-2M)XVl5XT-t?2;1SM((TnMz
z!9e>C8&cRqPfFy_ at g?m-OMTB6AtPj1y~9XzS^Fq7Qz1B$V!c}U8CDk)AiBr>&;VH~
zg(BboMD}iolY2-NB+WN@%X^~88GcW7?CXAjVUv41^tFbcO$h86%HeKelQ(&Pkl_Te
zmrHq~NA%qzQl$Rx&w_WJ^56PMnokY5iepu&9xT8WWIu)|gNxnf2W3`1wfs*n4B^__
z1Lg!ff+aHI`ETim=hUKr{`CP(GA1Wb*cCAPC$ayX=$<bX{s$J8K<+8mh(zKpUUlEA
zW71pgnqw)i=ELymKf17cNn03lZo at DsVj+`pRDxJ;Zg!DM+Yxans(Fy&?Yy{i#mayw
zdwV*FB1L`!kN()sp~EjNlLG!8nex1NwH{TD*4UQib_;#j+Wi&N#)S-f;+&#@Q3<^q
zyNAI%hwYj9tQtH`yE3$=govaIGXvS{hIPB;TRJCFI!x;CwQxub+88^=Dlp+~E|}N@
z%~T7~CF=1m4gbyl(l)CEIR0#J9il`?Xmhg1*22|XNPf$QWEh5K|MhgU#}^;<@#}n(
z%)5F)(2=AU+n&RbZE8n#X0cSBr$j{l1ZS?WwR-?9B!qVdfOZ>}KYPhJEhV=qSZ?oe
zpqwv(ykdFV*s`bq6OOWzpHSf_p1{LI$1!O=3=CQ6*=I4%z`^wk<;vuJZUMowZ8J<~
z=uH^djnFfUnQ-k|W4A9B at Q0ujCs3%YfxG|CvI+)Ay;5R?ioKPJx+7E2e*{qe^g`Xe
zqa8)M;Kw9_(%;BB=wU)iepij6;tyYy|3Wsmu^458G_PcHfwpN17f4+y@>kwU+*E9_
zz5ln*ds<K||1xWE at N)ymO8O)gfJ<5xW`jI;dPSuKs0_dbc|}FOdq-bcfe!j7{N~E(
zy4(^$tiuXUYn?F~swX?g$ejpyT-;3f7M>>JEcIRV<|7ptk4?_6L5 at f+Yr^>_7*^zW
zJ&sCFJ~7gu=;1(GAa?{H-pGdby#2aQ$w#59Rk#Cpm%f|ou!aRbvGj&An&QWUJ8b7}
z;~9D}aCFH2=#$?+iwc3g^KYU)uZ<IPf2T(7dYK at Gdc2*Tg7UWdj=sJCtwGquv0Itk
zB$lU~03w`>fIF&X>{5N2It{$#&QUusGf96AS;|TdZmM~bWMHq$0?qh_?W?DpU*w77
zv|gY$s`BKi2S6-KnrKXxD}slO8Ph_)Fku5kGY#{PR~nVYC5+7lFTMLj2Xw*O4)U?I
z(M*e1+7$m6=F4)w=0jeAo-9 at G1%^78tFa0Ra#*@Kh){Ao2LU+D!HS0Iq0U$TDOndb
zXl4O?4fi*}>UNi{kr}9lvn29&OQ?gqX$Cg+-M`92fOf9QK#&y`$m6N<1%U=nhPOz<
zWN6K5u)lA)sOoYp;x(a^R_2F(oXsIk_&^0H1HWUmaS_n0Z2<oF7v25kiYq_}c at tL8
zawmb+C->eeEP1y?ZbN&`<Pj!{(N#4A3};qBZGO++cT<_%`Q=V193oHcK%GX`o15}3
zd{ani6$3zoRglY2&?Q2Qt^;QVqV^^}5LOK@*q=6A;k*ZikO$M6LJJ3kim`!{jv7*&
z>{SYr8As#Y#=1 at ycRZBItfXQj;}|5=gI%cREoMN=<1A~MKGz<veAL#gd4t?yjDj2^
zJZ|-ybDtLKx2;lb3FY*R{GT<EqAXTcL5#-!0JmrZK3|yx>O0-L at 4B6;ft at 6oO5Y)1
zD_>LEy)GQCyiwByE;u(1U_o)h5nJ;W>4%{K4bPFJkHb-X>WV at p_`QQ(TxQT~%;A*u
z*N$u-BMGNR$lO{9VOSGiQQ+;sgE%IJK0N+*);5}Zt25>N^o0uC?z9++3M$&INo=wo
z<{gM7w5RHof?L>jfuoYKoScEC=d4)W=#kIPBM%THiILb{B!zwECw=fw)~4-p&*k!3
z2B?Q|{d*@AQp{YCnzd5JdeMS92OaU+{PF2G)5MMP6~WN(l4YXrFm^N#L|g^irm<D}
zI7b!IwX+u&t}<#eT#(+PrgtdVv`Hg*(cVja(+eSGV$3^*p+g1BNq03PA=R9LHv@=;
zqMWg(b7SabSgY#BV!N(kDlvJ^+4>Rz)Wq5oGH<?^r7;5bAW+_$ag4<P<eE3KeiB;r
zhOw|&<GFnW<7X-?tc`AS%dZiPYhFIM|JBMioxlN|*xJPH9jm5p;f2j*bFMxLsJUTf
z+L4uYMe!TAR<S__R21=Lw(8yEF%l~5+1=2qPC90H&<8%*KvTT=Bi76Cgsh3XnI1I{
z<CJEYvp`y9zt563q$Rg3Hr<)B375Ro{pS51CE8e&)I_*LzIUFmFfbE&>4nK>DX;&f
z6cQIP^7BipPTWOm{XI41S(L!xyzq=R#1N6UUU&8FR2QLKb<iK8183v%Htz(7oe6BW
zle(zV*@c{0Edg`G;0c)c%qa at EYvmD>f`G3X3X7;I&H)m6n_ieGP73frJB+EdzJ7v%
zwJKTHf=ttT*#Ew_zGXh5WpWB;Vdn9=vuERW1`FO~64(<G@>nkUFx^A|{uY--UYnWo
zM6pc;U0(0k)k1gX_<C}Ll69<Y&<*evm_sHW!8dUvl3{+_Ig&}H%7AG?(7M$2v^(*@
zjhX7kPl3uiO>NdJEfIc>duFN{{!xy#A>Cd)nyjCbDAWW^Yz|_|cv0n>;9-9O(j7Pl
z(gd`+)xz*p2L%5rFxrM9qsvI at 1@u$40xgx&42OdwecVAtATU18o`>;Jo?u?r2tTNG
zF)oU=Pu7MRK<kC-#u9CdOHQtAA>5-(HM9p0hHS2(m7WaC6bWeA6M%sb3UWhl5;NMt
zY$ls>0xe?M!^d^K3?*B|3jRQa>E8WLNtP;1)eo7>$J2i>88%-h23t+mmA2aBzWhfJ
zDwz%NQQ2SlIwH&xssNUYx2s?yZJAdAk_J;^n|Be|`%fC%sl=${%fBv0db<giD6w57
zu_8$F!}p8Vooq?m;Hw_jZiGjRDjsLCEK{qBRy62ufr59a%Sg~HjzQuA7&4RiBzBxp
zJ)y%{t3vd2omU0GOI_a_#z#tsm2*%=r*bz0MgcgrTjv=qHh?$fdYbEREEcO;X+klK
zaT2Ll%;vJIOfh3p#yN*9G#eJv_M?$n$l*k4EB>t7nd|D%+jJ6*Lp?v^v$yfes`sir
z%IP$Vx1_7BKX6O|uY}LXtUy%4?a@|bvw<*!^NorIYD0&mcZi`M9(;K>Z9!gl279wC
zu0rBw?s5TLa#Y_%V}f@;_X)8ElEB>LP$JmtoK~VFB4*g(*vxvi?XoETksdr61kNnN
z6)L>^+?qAh0y at VLv-wfi?EUu>VXG_Lx*2#4Ln);A37J&ezXxb9YudBZx!QBd2|16Z
zyLJ-0H!jRlvRT>3=7OhNe!E)OVuONC*Jej`=MD<9d0CqBB{z8Ad#?v!8n#n-b;_ji
zvKI%4#r7kB)=gkd$S8sP<;zW?hc`9cVEfK}>}|F_R=3CFZ-#ps)<)^-usOK)YVv0Y
zhTI=x1mefYAioj5Y~EMiqUACOS3aJ-hXhZ+S42T2PWJE8PL$g5$oZa^T@@^aRZ&D1
z6!cXDQ0|wq>y(RX*_9j(#+R{EOdO`?F1_kl|J!<DrG35^rY#mcxbfDnyRD+kI!R0A
zY?3sJkV6s}gM+7*eau`AKaCHN+Y`|m(O3grx6D{kVF_ywm9roNQFTF{iI<>KmTWe_
zFn;nad$7&w{C77poX=%Nm9d97Iff at P7K*5wl7h2ZwLlD>Jdc*EB6+~0{aGNewRz>h
z<dLdz<z?1MpCeb07LBZH&N$^COXPT5iFaRT?3ziZ-)|ZHvz#=LeXrF}pVdR8wXIs?
zC}<Ucs2<O(YoFi&`taN^jcmlV{hDcAOtiEw!C9&5)=tPTfpTErV1v<^HwK;o at jk?T
zAF<Z!#@_=5fU?+Dd?E5Ws+- at Mzr1G0kb`fM+1op2`oVlC>&Dz=--+%q at 0~AKu%fy<
z$G0D)h(p`ubb_Zi4JTR^fem7vb6B9)DJ_gY8!s?N>>9-c|4bFx(0{CFWG^br+P4A(
zc66`mmSF8yc?6umhepw4!c at 5Cc#()@IBlwdd7nC&2U^yO4^FAeH}^c*UG1y-`ddv9
zaI<ZJ2aIgl8ANr?8UZr=_=;G{+%G~VQsaCZeCt4IFt(bTe|Mg<M2!UifO`ObjSHt_
z?rAKLPGU1&oLQTPnsXLR(T=PargP`3I^<Gk+WeX_$s>;ealP&zbLAkXV3H at _#5`J#
zhpd+F#BdyZorcxo8XGexn)5(?0DM?yX5qk8Ue`MSV|X>s1d<32QKm?)Lp453o<ss~
zVb=G*ea+&b=*ewJ<F+#VuViN&oEpRiZ*a0G+dYG2KvX!uj9PhBJK|dOTT1c1-`?IM
z;A#{$i8Ac5m)e>m5x4$+CD^6uSdzuq&5yo5<BpUJwH2N9mHMIjOs^IOX*-tsU?$d%
z(%v#{l;7C}&SILCL)Jt`^S0DK8I=*$L;^%KP`o5p9Ws9#A%4+Tq-Iux23dN)x2z2j
z7s4tJKcff at UWHLs#deX&V(QwF`EUR*I+|Hq`Fy>R(67kwq7*$iwz?r|gV%*f1CI?B
zPc?31G`WQA)!TLP^M=<pM`8V;gc*<D5+v+)J{jDtXq^}5;3CRrQ`ARt(oflY?jDJB
z$TtFY$Q9W(OcT)w1c$FMw&NLsOz9hpvK{#A3!Gxt?9-Soi{4K>k$sLQa*vD~Kun0;
z2HsZCwoZWTEk5}3ftIMnqP8_D-|O7Ay(g<}9S1N`8qeOl0NkizNJwXnRIA};t&Cr~
z-}|%GX(l@(FPx4EZq!ra1~C``4`0udP=g at 9P-8<>I~z`lDlFK4*SfYpT^>6iZ+7Vs
zL6#{<il#K~5vjuEH9-#F`(Eh6Suu?9xvma`SEL~%p`S(EeaZdPB1t<wbYkK<M at 02_
zH%+R>A70e~eH{0~%*D?6M95?iUdi}^-ZWizy|jWCIW2ROumw|u;t2-{<eUH-IhjXC
z(WI&<7b`i>0z9SH_u*Fa1RGp0=-FYuUIaVrIsJi!=Rf<)Xl3SAZjGSTjbTh$>nO|T
z&o_LC=vHm#K~xA?%K{Zu;e!|7>v3*P<^CHUma-USgPMWzV=qiEn-%<JPJKZ7?~NnX
zQpy6+t5UCB)%vhKML=On8BmPwlgKnGc4CUkpql at J7OP}JW0j{9=n_nL*3IxRrPoNe
zO$UTst>L<#9}=QoO|g)I0?T&nww7ul1|-?cS!e=-*Azq>Ex?*=L at d;uf*Chf&F0tX
z^h%LB2dhqkUF`-LLvd%r_Q0pItHzMep)eehivylj at PtcN%*~M216>HQ+f4Uk=K=d^
z*+^(itgTN6Xp?w1JqRY-{pn+Vaiv#`_%bM0aI|bN`_J6LPx5=56%VLLiYk3#?SqCR
ziSlH6Ah`k2*HrW&%Wuf6_z%Nl+U0!X>UHW0(LsRAdlNs7$5L{h+dR$dn~<abo^@a5
zJ7}mv at C_OmB%(*rb&Tv5C|&6Ix8V`M&P}zY>!12UcFM6;Tl|~rP#=u`B-if9w<L&E
zJd4CP&9S2&SsHa?`~^)b8Aw>W_hJrz at rMo4xt}XRE2ST<xzQ_{6i;6WoHmsu=uN}X
zmkxyKblRN=1%Wi$nx1V+R(wH&X3JGFvn^}>jV$`?P*Scjx~%fH6g466ksKBNOB!Th
zX`-$R#9b(N?TgE)M3jO<NXbp1;uQZo#&Qx31_lTmO1x+(EUXd@{8yP>iyuT8)^t6`
z;?ht at SKD@-17e8nN<t`j6~YV%Xs7#5iD}=};5ZI;P(P`r1%pWrL_*g!_)8_?(3t at H
zXtju<|Ab>k4l!bY{3uoVEnIkO?=cup)9C5@&@oP3O1wWLeT0Y(7Kdb3YWIrDgK(O_
z9)M9!ymC_?>rv&@sOH2y7 at X|{NF;Vi+dCpEcHJ2iK4SR$e+sd)081x*{WyN0_&9;G
zQPL3SDOQjo3->uK;=)H5P0h0CY8yXQF*y1(`pKNHR!>zF*V=_#(!rE_h4tUn-^tN!
zDpE~IBd+gLnGoUh2S=<CHpPAg7h7OHFlv$n(6!bpe{cM8hq=cN+97GL`CyxtX=@FP
zkD8Q*t-}lO1`FeqxeqX$!9d!erqr^5rm<1kJN0FUp>Cu+o_zN5`wEFVWl?egtj|8l
zBj?4xorgSlXW0EJ%Izi#%1;@kqX1V?k0Llo)>tNDumPmX%tWDjidx~&FBv)c{^8^z
za9f?WW!Xosrg1}O7mE1&@hs~K*Ajr9{V`cSG{4?cUH)=fIq5^WfH?1|`DZWPhr=$+
zj<s7n{O2G{-xZ42Z)B9d#V%xA)Pu$dQDDO*Hmjp^#?2EgI0M`DBXI~w9jrRb;7#5)
z%88gQL0U2#+<M}be{p4bQxXLvD{xask0|;dQeTOIV67L|=1p3~#Hoe3O at Ia7TVJwg
z<IX;abjvyblj8OkkV!R1;Y#zF-jMf?xs?X@#Jvn3IYt?k^c5ZaZrsviy{RxxOK{fu
z8_B4lYN>fMg@*R)?)}J+vlEXijDc6bi_)YC^#xW2MSjz)TIAdzJt?f=uN60tadT!s
zYrV}T-73b=$iO;zNlGhy0KBw<NrKIL487LYhKO&bsoDF`co>hjU_qFl7`upY4~u{b
zxMR6K+QbFl@%{ok&KF1(+`&$gk21i)#}*xW9Mi~&0+{X`*-q9-1kH!2II3?;yK~oF
z7aERW+GEqJq+wp*WQjhT8^1?}G0yy%l;c^osTP^oSGs6Ys2ygWd*ky|q{`)o7UM_)
z-5XLk3kX|=84$F)GuProGbNu&sO=Mo8PI+|bba=^?H&yjs^q{jVV9J}%gPx6Jj@|V
z|4w!5r5tWIEU9SnJ>Y^<FiWhvcwD%8bVV{Q-GvVPVd{88pImgb=IEd}<k5!PwhWck
z-X^?8%Yv;yN7PWe(jOtkX!)+h%RGI8qP^i<p+Mz0Y%BgfLZT07A)?V*yUo^XK_p|}
z$^7ny0NlfDXI4{}YsN$bxII1!$GijdzP|qt$2+T-A))lB6JRBz_hmOUZ736U$;KX#
zGs*sbhLJ4&QB51Oj;+V|tDHQsR3|cuo+0f+<x3F+TO_3*Q0dR(tLSS(WTOq&Hs26K
zS^5{-Et#`+npA37+QtA#<QjtX08l=JBF$E#NPilU;;iPG;A!L!sDlhuv<`0do>rrs
zr7%oZO_X<~LGy3F1BNHb-uf{<gsR>;(HcsiRT(Q%Z=3QF%G~Qn;D at yJmTb4;UXBE&
zGq)r6GwnNKTKp7*a>9fj=9~HWj9IJgA_JSNo=XOxti!mqy{jD{k#r;wD|(7G7-Js(
z>wq<g=FQarx5e%m3-Iw!jU=?coFt_bi<~;x0#b%sS~|eu1>>9y(0(34_T49yoBJvZ
zkcDQ;{Ys12C24SszR)Z4c+m>SrxR8`p7q3FD7aQT_T9P4Q|GMk1zN7E|892P;3$S|
zv4$5Q%7qB0w6ta9!9c-6-{MbYg>yft?h=foBgbH|YXloI24-jOn{;&vUeEG3IcIU+
zb3-<!p{z`97=~^xDXVIFz$%Ve&Aay(K~DpAmJSJ>a6?ut)clJv+LYGka6l#(k`4X>
zs;WvD`^g#V6B<i)0?#qx@@)T&jTK}Ic#nr%_=}j`yx~0s|Bf!a8djh5JYw4w*8tjU
z1-+W--CIJ=TRoQZduO|Thx(lz#XgqayOO4#9u-cXJc#mCvt{<2UUbYAg~}?b*?Lih
zhUBlVCEBzfNIkzy!q(YCgM%aSt(NSE at S98Tz7drXNDfwrswY=IIhI%E-SrZ4RQm50
z*MmN{{;YuR(J#t+WX!OJUs|6^Jd%&c^=c+-Rf_p;6Xt1`kzbmoCCr9mctIi0n5~#Q
zz!}t3LnfLSK2%Rh5SuG*dibQko^TJ-eHGsHdq4PT9!?0}H9chekQ{0SDL^>v^46IV
zIze2FyBuu)cf3KnZ855oV>Q&7-=1pbuYk#)moV)1y8q};crK^;RQz3-f5!vb*)RAz
z%Z2u^V;=YDNpG9%XGpExB<5EPELjG;Qng?`;@e)*1V$i#pON7*nx1d(cJg<0OI&Fy
z7QZ%#(kGZ1=K)>2+lWLX^e&P~z<PWZky*?*FO`~Shkij_%C}JiTb`ymUj+EI&R6tB
zQ$!S-5Iu&HeHd-d*A^|j>8}{Vfk6 at xTuw<pSn;b$YV5T2UY>qkx~`rSd|@{LG;TqO
zK~=kZ{{&t|O02wrRb{+4eg_2AxH%d;HlH|uChb9IsiGY{?JqZ_n!vYRHOEVm?o^+B
zYGq32MY2J4YcX(FWjLf2mAGC+cfa>@G34r(cC at 5Xh{=)C3*1_vy6{jV`86f`|N0^(
zMCp|X3Fp?4jZOc0(bF*hwy^8fa!c50&;?U+$PPsmNsudc%|LWt*|~>vd}efk63h`l
zddz1q>FG at Tl?S|Cv1%aN><9z8mRvH!riF6)3{GT2xnsITF5U%fXKx+7Q%0|NixfDq
zzWG04yiHgM$4E#$j1Pa!uyyp7THFVMHdP4y5M{tgq^Yv;97Na1*n?VDxZ!9=a;)lA
zRySCrohy<6#UXYUtI7>J{oyjxbT>Wq4w;{y-#a^=B`rL}WBfUxXQ1+RG at YDHJFmRU
zulu?u=g3t3;l at xB`<`-LH7~C#aF$dLI<9e6ir62FHpvLM9%iPXh3 at DH1z3F8I*~$)
z$ftv91sF`=OzxErMfqHDzZT|s3xzlyYpmiOvS-Nb1OWJf)CC*s!g`JD#h45_c at b_?
zaPz+-j at YpTQxReC8eOwKih2+x9~RqsgqB&<nz at aB;bYjpHfvAE9E#T^ga+(1b|nYF
z%J at TJb)^ow{a{VfBEAB3Q!vocCV!gk(FX020TB#aoE08hb#c#d^nQjcU}P!axCiSX
z0z$|&Hn-*#X`s|;^VB=iP;Q{$hP)4&^*5CA5Vw}()^`i40C!^JG8>#vj%Oi)^En-)
zAvK!d<q3>`Gdz^<oZ=LH1AN$S<WUW?v|VxG at Uzt@!&Av^b`3|8?!zHl#zlL6F&bQ#
zb~C}?C^<_Uc8|22umQ#~5!EIjXbhV#QYTSAZ>GbEa9vi%ArND+R|rMDM32 at Dgv6ZY
z$NeZos?RHnBrD0d$y3ZSl)s*l+6!K7n|tPQIVGhxm02g7ZXVpTLljm7^rlufedd~Y
zEfJikj0V)dflRfOtvjt_C^{D3+sKo*9B?s)(Bf53hRmT>29Txjb}b!}MFF=6J!j?T
zJA2RHruqfu=VWdg#QMTBtk;|)gy^Q8G^z|J$pqLyb{Uj8f^)EG2p=MF8%2L!eO2i4
z27}R3v0f*SgMZFEs`$OxNAY^ff?Gu(hi_l6-GjiXy#DsA!|5v!HFrgL1^UQ|;*UZN
z79rrjV$4(_X4iEl{o^E$L9^tQ>!goP;l_stYlJh~@Kjx;BjK0PT=Oebqy9B2w(m<7
zK63L=VYm%WP59;@Z*2wdU+=!^Ryl};?0!+p(@K%*jNex=624)7=w1wPy^}=&5iJzt
z03aM=U6-#co$Z97Q1;yHIm82nw6{e-1qL6*6CxZ*u6-KsF={j$=y;h3;rfUCpZpkZ
zf`~uQrmDci(4C*8<0`e|T4dLZHwSyXf&;2vdJy0MaD$>g5&raJUvvQi0{?T&2q#ol
znT=_Wvlw(7zsp}6nU<~`R^e*-yp#kF>bmu0-?}c5yoognTv$vIc2lEZ_smG5->HC0
z8iD%hOqfaK{l&}QRC%~g at OR~{uA{h~3t4At)QsAiHj4-s28Ts at UBCt#y%UuISD*q7
zJYQkH%EMS2S&l7hY<9C<*L_k|kLm|co?c_&sZ^GiTqwrF3WOp5ts3^g0Xe%#r(BEn
zR;;wy(>t78_!!N7P<et%G%9ocV@;$4mxEdY))KMoLV84?&r>6zUNmFXrZbd at rnz0l
z`SPy;79IteCwA}70v7uX{jMsa8QYRyH+q|o68`|(vL$+=d<&qHr^icremqOf-28)-
z;1|PEFGuQV3sa6!I{a|H2?UcUeTgk1nDJh`@!Z{h1 at b8F>EU__yvw#76#2TnL=Lk0
zt2UhyS~>x<v(Q!G$QQE=2QG~=sXIn6hbdz(%8`Zaq>qF3p44e4bKN>ds5cZyv9ab>
zKQY?Jg597$PNpdX1heq>cSqAPAI97u7CSdv|2fz8>YqBJ2E%3zb~6turOWcuF^za8
z*5__gK-+9=5V{FyrZ}BWE27vs+bQvlC5N at gcdyL$FM}T#>Nw~AWA&PD1e8TJMa5P!
zuBQP-+*uLpP9aD0x-UV&vN6ZuVv%2>v3#3Bh$%#1>J0qX{r%)}bpa0|Ub&c+eMrce
z53zrx>3H6^|NlXE94%e6wEelGl8bh0)DumxS7gYzJQkx*n+Vu5;<Ub;ftana@`88|
zYYA`W^D~4H>z=(;Ba%3oZLSD0rX)PD5CR~g<M<rW+iElo6eEjPVIt7uMuPGM?$~V?
z8NIBG5JY|)-I^6bCZyk`HMt&O9$eOj$1f_$X_`P4h))G<R87sj{uPRSkXIgjxefsU
z@!$qr^v(E*s<AKOq73ErWCx&+3Z4QgPd<r?LT62sDzlO#QBPuua4`16p&q;gXp`y|
z7C)cuHmOKcL%aMCm#vtAmk@)oLVpDmx4#WMpnzZ-KGxE3C*v2rr09SLbRqxy%39m!
zuzj0!VGHhn{N9U3PUo{y`wiHfXGrP?3P0fZd6)R-H9Wr$3Q1MYd9(WPTr*0eznKQ2
z%=DlLB#21ZuuL_;0O at d<c9v|=p>-zvsfE$P4x#%~V8C*kp>v_`R0>Cm62iO~U at ydT
zv(t-GV7&xeUT?ICB&(~3PZ8kegf3?k_R(Wqx-;`nzVg}d)Vxe at K=N;q(q}qDn@)yb
zT&2j8N62&Cudi{u9OC{{5$}m&Adz~0W!8CR-IAueS5Z_Dk_ZZ1v5m(}6h(o*F{;j1
zN`RUs6<bvBcX&`CAuTn1YNM#?9h17d4TE#|g~0^no at NuM=)TI_e;4rrYJn$SNJ4$~
z=b=j=p#K2ndT*1ge5=1%Kl)Y(N-@#W2X5_pgJypcp)x{x|0{wi&|C<({ilILt=RdP
z`MW#?5MD7`h#vcT=BbPLF*Ev+OvvyRf)S%b`|#T at GI{j~E|mLOca(Q9M~E*2&d1T+
z8C$)&j7S5F`ElBHzj!w&U6E1zM>Ska>tt;*D_DGCVp4;9L1dDrzk at kW&QG_Uy8kqF
zr+#b0ddG(Avhk)khNb@|K}RM^SrG!9JAzDt|J4LF^wc`9MxP=JgXW0B8nWs+UP3MU
zm5viN0U|)+(CPx(NpcEQ(+xg5?|r(yH`tJd?Y&tsCWHc|Sl~Da1Uvo}J09ztMeo>M
zIM!*Sod(Ob(4 at e4=lfs5L^_~{JAV4giy0taB at chGf_M*eVq(NIeW+q~MP-j?XR;Y<
z$tOX!{OWVlQ}f}(+E}sM1?zEM;JO>)MgAUrBMq*fg#lPv)D06#kPOfulz$-9kJIP7
zJ^2{g$_l~&vX>1TO;PZ_=L)1yk7J|XoUg|rf1S^)Ry^GNFw)3Rt#xY4{J&mZ0_2MI
z;?03~R61i^4=d`_5bzzloiz;8 at jad^@QPTJA*xo!^?`h)8svmcmk!JNeG^^ZI1C_D
z;rRS?q`^+ek5kNEnUoDrZbT+FY%L$h*1Y*uX9%vgi65D3O|ilS<LVQI(_;GI8MRSN
zh!E at sslrU<u1M<$#G5Y}auAC03t_jsxF(fC(WQTep>c#q73kSUfAu!Gd6D?II~Os;
z#M)jml1&}TG&QGtDqv=kFNp^k3h(E4FIL%c>z=<zPkSVj*V1J*HHRl7jk#dSKVJ9_
zKC#|9>xtA%Thjg1B~r?Ju$w#-6_t~Qo}oNTqNORrra^fUMuM+kXzy at ckVvq)GZM_9
zCzbDR1$#2Ip4N at 0pE7o$9h{F+1YD$$wq0zfFn9O4C4IjgtTNyHS(@Ht4>ef_8_p#V
z->*)x4t;vE-8ge61fqU8MI78F?#X^O|E+Blde?=weQfH*_o>aH37~CRMoU^}AnRG7
zO<|i%R16|4qnd9>6amsFNM~=Et0L_53n8vpnz1~SalKW337B7mQ*ty>c<9mk<iua0
zBzNMD*Jn(CRn+#4E+nn0*9+e}ZWn}<mCAHDpl2C-c6Z5H<ie~ZbM-T8WaO*xMHCYs
ziwG6Nv|*wSp}eF-yLxWDd`ao^N`-7C(j1&Mn)jQ1RkoBODo>Wo2&%N#B~ib^e)|h)
z)Rgp*sO9oBA#0Uo>{q!&-`uj&s~*q<yFIsuW;82P)x7~S*rmKS-I-i;%n~Zt&dc=l
zQut2}UQ(ZR$3uP?I~M#^OV90K)>Ie#1q0ecpcW$3uD4m1t*FHFK63*5Un-S5k_;fm
zriN at 6NsfFZ6`vV(XZvPyJ;MxgZr-{1mHQqQWN=pXX8)O1I;XTQiH<Ujbt(}C2Hfg2
zZ)i;ym{qS-($$^Qk$V!uuC~<$?;tU#+5fW#0K at Z46~x%bN{&k at t_fU~o*BUbbOsdD
z<7)*k;NzL?P-_q`PXs@<TzE+X(01X5FL*hb`XQRBSQopo+2x{fEYxbqgeUB_{XmM8
zS#n1YY~4}*!N{cdUIBN!0w%OLAn_jhR~P(V7E#HaZ_$LDrX at tn^dMB8mjkV8D-$QH
z0};Rs-miu9T=%3_PnSRiVpIQqO>0TH^&#_OB!@Jz`o{uptk>ZYEoTZz0-|h>{v<Jv
zznZuZ*LOTC*psqdnN*uNVIR8Lc&Ae>mvc(X=1nH!FqGUj(Ry?p9uxz|TEjvb at x`uu
zQxlF+0z$X}a3BN^-4-u42)nJ_Zc|4>m}Q7%Fklwg$u$2#Njlxi=1O*)h3bZ~Roc+E
zB?a6z33_AZx5mx={0ok)G>){(gb4&i%#oNc&gh5&MfOYWD=8>D{(2+708c=$zn$KT
z8X74i`xAecrw+hy*THJSQYj>B&<D|BO)Xd*Ew8S>ZWL#1po*EB$>4q=3I#a9cd`Lt
zKtCWXkd|9mCuudYMUu2l^GpX5q#x3aC`G?}Mc*FhyWUh%ypNI;^Pkr4Y^Ozi(9b3_
z$C`mwSO<$-iJ1R;lBfM(#x6+WklGzpac<mLYCj3X%)Vvtvv`}Pee~?df&p^mg;(1|
zW6=jsED^?J29qCwbaN1=X;FQVv9#7>lTs3GQPw;7wyGE~79-_D%rU&}M0Nr7Bj|yW
zB2EY*FvfBiv#tbF><kzr40(AGC4rH(kxyuuC&wkI%s5I5sAz?_&+f==$}}?Zg^Ea=
zpg_hP>4J79pvBCn3}66WOoi7vO95dV6K>83M!s&M at teA$CnRV at 9j%D#JnY!}-=r4@
zy9x%qJVXmWS|S?|dw!KT%c}#G67Mqm_n1<MHPy5jo2_?=3}#W`M?Z#(AvKD7=b{PR
zI>r$Daw(aNWv!{H&Jl%<6GlRjSHvAH3gO?<4aE-UQ;?ZEk_Z`i(ujG89|KO=nl~ff
z6!csV9+-+|kLQ6-Bmw8ZZ=Q9j2yFygnwVna=h^F1KSr_p<f%1h=`)OLMn9%?KtzR*
zW$Tz%zt at -%PvD4OSsNwZunZP-q$#)Qi3zExJcUXujbQHRm1u878>c<2%I8l4t>{$&
zV@;yfyyNRO<ROv3!`o%`P4&MFK%shw-PqnzLDz`IB^-RNce3VG%zO2e;=Ple8=*$(
zO<PZx6CWKy&YVG9S3Q4B8j6?V2R|d2p<YcI#%<?_+wfk%dc2#gMR-;#K{<9;=k$0%
z2B?PlmzP7XVPhP$r;nXQsYkjCQV>^FlPC(OEfi*g^10HPF4orVTRBc9tZbk4SBeTe
zIntg3c>-EIM{yYM?2v9yH$$m at qa+nxnfsgR=ISs9l0575q%%}g=R>Hi+i7n4K1gkX
zoN{Nmc9nrUEBfMgYePhi2q>16=TrFMJ^pMY>|8!TczUDg*F*=j_UONr&Bk{EAII^F
zDdBolQLv);9k?*i3+qGdU6V<mGG^lEWe+>=0BG=r9t7x?D*~x}qaFEAprwTTm#k4s
z{fmpknmjz6LZKV5B5&b!VSmdKz;UMzDoqIgLM>t{&JNVmbC=@K#J6QFVrO_R0iPQe
z2ajKwp^6s#k;B_Wj$lc*_|f(p6<l{EsFcy8T;}X2V`H>2Ql`4+P+5t@?d{@0ewJCH
z<7ow-q)g!`tx3vN<1Dfz(NXDh>ex+}6`rJ9M)rZ=IxWhlVegdk?KaxDZyLC_DsizU
z#+x=mH^`EX1=Kf~jrfG03%tMv8*s-v-W|iJU at +PEUH%-=48I*2cW!Sx_UCXjN&esX
zK;vZ3iJocX8!;V^%y3=nsAf1Om<a-GMDz;*Y{{je`hop__IVPO`_TH}GgSc`aGBZi
z?^Ji0 at 3&aNd(fR(a=APoRPn9V6b{fvJ;l$3qS=si`MoZb4f-Y0kQPHX3i3{;k~lOI
zy?ABf-ENf!gD9-cUa#S->OJV*+aMKz*G$WwfVz5Mgs#IjD?4L7 at 0GsZLjc}&KrVS{
zbRV=cY!R~&iFOV9_JkUH>PGPkjb}!0V&kp=A=;FcPOaWKFT39c;Zt|#&zwzAbLFSa
zBrG77WeasDQ#2xe{79ru!<Jr<n;temDK#ET2o5rQhlPd46IdzcMC{8k-1;+SAHv>a
znZ~SNV<t!AbJhTP=tpDx(iEZi&~F-#$fh at eM&bA!pn3XFp-W#1iY;eCD`$qrzU@=k
z_sW(rh708>`%Ro}I2t%#C&iS>p#TiOh8E0#@t<Vgq1r(MH|Ck1SO^asjt(X$Y);+a
zA7K#VMc`P+H~A-~a~RxOo3EMN8BWHt8;F3`VHxx!*dY^L+52kweplCCd^&EFdG~U0
z1(}PswsOTYOQw|KFG7|WFQ?S8r6-Ad#hK7V&6?4(f*F|31E%z+XY)#$f2P}N`2L*h
zsZAPn;m1{?85-ZR`15gB?676P$tCgxYF`MzDHskNg}_0*!<^BH=Mmi$+ugEY5w+(q
zB=EP#X`^o*%k0IVfsXCA4a3;-!<iJcz5|@qIDW_?l3)U37z;trPrpxTEE8Eh at g93L
zb!laNPHKJ9_yk{eA`;(I-^qpl##(?i_WUJWW2HgyhE$VQGAEcpcQ%VHxt|1M!H-15
z;d<^FdkMizlmhEdU?l#tTHzdT0~Ic3z!Rwf_rvJm+1<(+M^%V5Y5 at C(o!bnpizhTH
z{-8*Gk(W)z;&XqerY~jZM|^c)tk^*xFZVizq+i(<q$d<5&-k85*WIe1zQtcxrXNat
z*mqOl6dzL|RfIoCs{=y3x-}Bvg6%r7-iwdiq=anK9XY3_4aL6nzcx)JWXT4Gye7bu
zclQPaL1N8vx#~qt#r?vM)*pP{%ice=vW%9zBrU~EH&A;ztvWd$VY&f4DlmlVEczbh
zs^rpj{;50+3ySqjm^S4OA|Upmdj|vRTuk{r$tUe^uM7C at 3^I_-EHNeT6AJb4VlfAV
z#Npb}jI=&)=zHeLPXCtmKJHYNO$kA4R&{~<Nu2g`$>yqwWkZ@$+-5S(w8q5C at iv(9
zP07GG!kam9X+1c;H+9|kQ%Gi?Iunn1K>W{z`&*d=bc?)|14BT5>LQM_cY9!JU`-hg
z6<96%*}SSp<|%*kYe+c4EmlT_er^mJsnY;McvQ%Zv0^T at T4g$a;n2o+EYoX1QE&?$
zzQUz~uK0IYIzy{nUuRk@!p|kAzkeqXnjL~Uh56}rfVuC0qTze+Qh|Y^FH698)u1?!
z>I5{QtmC%)s9f%8;7qQ4_<NXOvf<d$3aA2Kck$rwi!?uCMY8XDs5&-?Mi#|8wsg(2
zkavFoLm<X*+L|zl$SWE>>E;Q3(N(C>KUr7tT<_<g2#jMo`I(M0uCI$S{O`d#%S$co
zFy(bO2gopGhL&mgYuQ at 8G$7=f+EG3FCi(#nZa?Ozu53;gEn(dJ5C=zcb6 at DWnR;U;
zJWY$(pbgK)UBpFWVuz*O*Z|j{q(rbwzW`H_<@FCuH%5$+<#zIM(q}UJ+m37n6&i0f
zUa=yYL at O;=GLU?C`BB21SYxn%_{8QI_k-X%fQlXttEbHbvzm9KC#k)p2b4oYRpZTj
z)xJ&{*$ENSsXK*DN7_4%@rspe9ryuxhg9;^0BV&=%t+W9a!URw5;~J73+`1e09rgi
zESHr)7`_Y3b`s>f0`gImLI&cNMTi8mpq}9T<H{a0u3@^f=z%{omxfx<u<ht)v6kV0
zP)7sYYMP(92LP#Zp}z2Wunf=Bp0Twv0oONRuEx#Jg{Sg|S*g*^xGxwHs!!^)XOx2K
zP559wv5ar;xjl5pc3?&M{^d1>Oz7vmyRO_h at sx$kXlMZI4$<K=OKuMgIng;kTKq at D
zM5YafYs0%gu6(NVG2+0DiEzlfFLpvA>F_T<j8;g$h$6oPHaIS_xG`t}(;&)OF&<s1
zr9NemF>C|&WK7R?Sx9<j%+^qfG5gi;z1G;*08(sO9x8but4_Ke@)k?5nPU}YpgGWc
z#X}vMjq{ot?x3jm#sG?pY;d<X9wT~-4?RLh92;Id)HY+{s5by?Zzx)=JQHMpACobt
zdw6a#+k8GOv9XiN4{Jr4pQ*w|RtJCzN;7!a=no5IOM|YF4fM>aD-Lkj_I6IJy7gA~
zfi20tPJ#>Io=K2P>XtHnBS8F7x|hHHsPa*dIHY6y%ZpM?PP2)CB}b<G06wjBuIWZe
z=S4ay7Uz6<%?aSbE4`F|1FiSVlJz9ZXelE;mWBd030<OGCwH^wPy7&Lj-v&Y<XV+B
zwwSW at watmCTU$Ur1N7gso`ZhR)#pexxzkHKwfyv0Se<<`TtwGvHMylOCFq-=v2uK9
zv7a!v&mOxZQRPctdf&hr+|zz+CVH4*1G^f?q~`e|z=0J_VU?X|GEvf^pq1boQ_#{$
zWMvEHwJ&1tU+c~BvmRbrpuNt;XK7#{A{8BOlCioC<XOwJ8dmLcSz5uvxRH4WVd(Yp
zacL!ZFA&$zPQ!;pqRg|^mCTt&;Pd{!A at a$`T_B59mhKFpMW+^ST83&$l$d=>v|iad
z3ky{8wo2%OE_?AZq|EWKN_;IW($D42m_5S*FB*AWACmTN at Ho%;1bAoN(R}VKd_jvd
z;p|~d?iY5$M8x$U2gX&nh58z&v#fygp-4Uaoqe|%<T~Cc>JLxzxa1UH(-~)p{cJS3
z4PbY(1{M2QO3Ezu;_&%z86%YRyayFHmfhRTyfKEw at o4Vu6E!BEx!nsvT=AXD{eKS2
zl%Gqf84&WmMLb-J_ at Rae!x`N6$S7-dp^(}z8Qf^io7k{UH5j3Yi`WjOO=a!^pvY3T
zuD5Q+xKkNdIm3>9M83|F!Ii at OW5_~@53bQgmqwI2<n8(~%lv)1Nn1qU>)V?l$#A&2
zs>wW8PXt6xO>nlH;7E51bq<{OFM(gHV`SRNi!*M9T#WVg%+^xNYF at Hy&Dj%TuwU=c
z5rD$ICTfOv%_MN8)I=q;ZB-T;;3ZuWv|129*2_bVrQdp`%Lb`}3;J%4(iAhJTE6Q*
z_Ak$UP5QntXzSD&iRHz<5IJzra{+1u6!i{BO><`*D#?#2^AUW8qgU<>r*kSFbBK3%
zRGCkaM9x5sa|$x65_I?X{FjgCdr<L>9t{RIuN2EA4hTz&>aX*fZ!$&<a>N_YtsKF&
zc>%}_M*3OsUz3ey_xWyUn271!^&BOL&}6$x5#)Wr{+oUFxZ0rwKvX`Tp)7zXB8<1{
zm~t&2(vI^rS|4h@<QTES#`in0GQ$X8^P($VK8JV at m--{14$7!Rjhmdn9>f1a4zunM
zDMtj=>KU49Uf~3;;rmOU8fJeGpH)#TVP>aNRu#yhk#B>fJFziiY|*&G0@)nI7%;6~
z4oLrJ=1);r&EPsvf(g7UN0`HO8QDjq^JgFd);>6UnOK%7DoTTjaSYwvL=s#!4{92h
zEx~8 at uH8mg9ZAfy3jUv8?HjUuc!Reh8*LfG`2ot{Nn&YAUB~5aW?=NMMA5reQ=a0a
z41-g!`x~lqq~2+V6ycc+&6yJ#cqHax&zJ>ggpTy}2+)bfE^_E-9ltV`P30A;r0PMs
zF at y9ZO@eVl<yZSvwZ61oA428dL3(-Gkl_ddpf~JuIb&SWQ59_`FpA(S8#Oq}Z&X0*
z1xz}VF;CL2>%FuHz!cHk<r%Su499$y074y85S=ALOTVvHc}6ri*}Z1}IQCY*|6uDY
zuDvy}bHsNV{_jzS@%9{DvV@$C?uwv4kJzp^YHTqz*z0`g4|X3IOXpR<B*|s5kssK}
z#!zF9_0Gu~IY!yL4<<P- at OVC`M~t>B3e0^1jQqb&t^ZXI5r=TJ<ZTJqF-~f=MVPxn
z%Iuj8b<AM)ePZ%I+YNTg4%U#|xKUxtSNe6$Ms+Ujg_&GpTv&pAz?6{1qab>3_L?>9
z0R0}-?|K-G<JZb(n%>TB;1AnWBRfWbqeH*l0A$y-Y;b_3;7?xaLvHl!0 at YwFS+My*
zb1*vdBj+A0WF#iLxScnJW|?VoOam`q3WnNW3B$F8<z>_GAyJ0buTQu)r#(N=9;?U7
zEdyw*rq at N;KWVGDFQQW)USw9R)MF(92`NgaTAR=i>)Ps4_;Hx$3&x{qtCI*)lPw_E
zIj%eydP;ob5W-1*9L&h2N}atNu@}UzhjDKqXKHIMG;O&Qivpl`QO=kVnpbD4+dlxB
zAQ+y7J}$5OS&$cfi=2V3dE^l{o`ie+t1yQ{-MMEkkFLiqKv4)j*7FZkdXlZ_mthF-
zxrmH$M`|KccQ>whBkK_ytM$OhN0Md$W9OjeV{LPXdpb7puHc5sbLSIls3fSGT3+Bw
z4^S|lxlbI?Lh1ot?(bY~h?_mTx-pWj_Js4h#+a^0#HM+|aC7>b<$Fw7=f+mqKd&6u
z1ke(F;_~{9daqy_ZyfjjWZQrGN{Ou8f-5DyR)1dpI&zS8_LCaW*VI!9Z{ss2Hoc2j
z^02I)*1q_0EOhYhLha^8muy%6J4SbY_6=s!K_iPzMDc8u{VAM)e0(Xaxm0n_xib7_
zpM-p5#+G3>toH=zFdg}tihx=`IQU>NFGauItlN9VMx}W8i at D#gT~tA{q}4i)J-cg~
z`iTdZ=jN(?r$^yvD~<$8T_&_DjB at Vj65n-m?~!XM4o_gY?05CGR>`_3!}(TxB%br@
zs*YjsIZdlw1lzl>G?QxpjGi<aFy+Vkn?$y|>_7)9 at r?>kNYPM^96v2solY23{Z0wP
zGrjoX#hqWXq at gVIe6`CbyQy$bz{$Jy>_kmz7M6(`3^%H0x=;{4CXKmwt*rf=imq*r
z4I|X%YF)DgrB~;F?Hb^Bq>VLLUc(Kl0(H(FapCr at cLnHIipx3e8ww{CTLUvyR+&x4
zUeSLZgwi><7D2w2cB*cGD$7fT0MrW1t)fQX!4WonPrI7>iJJ<nBtIz<07-Ofjzc_e
zsL&WpFmolAk_8!fJ7*w>hIzrtmE;T(7$S<eE3Imj)LvFh3A$d;NE0oh$FW%nyK!C=
z0Ny<F<*UQ_n<0yE8t&ZvzE=gXxH+2nvd+wIHv9v?c%X?fShNzw>6~$LoeDh2i)Hw~
ze1B5U`fa3)@X`+)O1ET_5PGDgv*tMn2^~eqH-p<gfO(CbdCKzudB^V7`Yn*BJET6p
zPTZ*_ZIDB2x_+dOW?O?Zne5r$?5LYGhU}?eX(rm4xUEM3YOF*Iun~mJHIfrz(AR*b
zGMydVsny9R&)5<jX^NQ at gFIN6$E4oBly8Z5MFuG-PeNiG2m+wOHk`WPeumPa3g-L=
zITfux$=GwPy92 at kQs8Wr$HTm`qnzu{-WLQFo3Px!QQrV0)Zm@}fbl*BnUUrsCqUUj
zgtyI8V_VB4r4mR(PL+xfx~;%^a$30knx1>7>I>aeIkg<fYe2@(J;`qhy+}(nrLCJ)
ziYFYVl(c&P;>}2u!NVW~*oGzmn+r7E|9u*R&}q=Z4sLHajwENoRFJ5ta)80dEyZ!q
zhtEed^7E})<;~Z)e_GL~t^+zJy6M66w_q4!|KjN+g+^tsI7c+2>NQNBr1=zh#+10K
z;_o<`U<FZBDdVyx>G%p7OflN|a%{gS2SjhmgUTa;!T_)QQJ2)Bppsg at -VJ&!Q*w=B
zhJsy)@w83hL?VB0erI!oMs_>W45bkMo>y9BYh|9<7L8X$cs6N}*M3G3suaKzqsB>e
zAp<0R8#g{y)%FVN<y6)|-o@)0LmBP8q5j3^q^u;~!c^{S`T|`zt*TwN1YZHKsj(f#
z%l at eE6DM*cXhwt{2YoH>RB!R)-dbRCy8f{aUGkJ{f<M=1alN|LT~P=bOHVO5OeLfv
z5{uFyH6R5ejCbXtAmxq2<ybcq<0X3*Bo9}{{Ox+HR%`ti7 at S=K?r)Ia7#d{CZU{C^
zPcLxDCvLWBy9|T8l(BDbbL2=H24`h`$V62><2#-y366&L<+w(R^FCg3OW0n(6B}>-
z1Q9^R1rTqYjuS=AzkL(4ZRcfUr}G^@{{x`jVDeTFk>iS3jda}$({Qc9DQuU_jQg{M
z7(Ed7)hF_ at tyqF@wMC{U(#&G^#v-~G8To9!s*o(p!hllbywBd(*SQ9vr+0nuN^t#;
z|J{%+auA^b25z<)QGEI<!H6)lh2iZn1<(jU-5ZS|$RbP4n#3ZMq{3o at 0@TzBbNV{O
z5n1Sm1I{KcQ%q>t97IW`UmeyaT?dbnIhx7y-L6Y!qEX>uy9;Gg);HyliWQ30^O;e>
zbYvb6qqN31w8v5dvm~n^8!(nl9oJjBqr__y+?YlU9U)lIX59VSzd50aPhDtt7lp)E
z#Mb-Q<2_C%$86OWl3FmG?IFtL4EFA69lhv$^AAL!0a-w*Fdh_j0)3;}>hg7A|IxaY
z1vZU{Atc4hdh;Foh5H#O;;L$3PN_5BUMZ3L!N0U#tloywQ(<MRn!{o?^t<6M^zx_p
zDcv at M;ntd{tu0{fZ+EO4f at 6%NG)xC6EJ~51G{OlN08(!nA=eI?_v+HpDkbK}oY{mj
z$cbV at rDd2z7mMtT#E^~x!rh$qPDhRff|HD7_Gt8?_iR59mam&;AsKOP|F!C+v%e at _
zL!bNCN*Rlu0a6 at aE^)i+4?6)>sIm{$&<)8H<)$9;6A4M*TCZ0IPZzNH^b86uOwR{z
z6JV)|leUz_#fP8RGW`?w+3R)sm=een`LYeNn3?R9WC`V}SYUAFQdmKmKl%DuK{9DW
zBtQ^XB_2#Ag8WTQnON%wG_j;ZC`BIpF@(P6GO<XzsG8wusSj1ekLbx_1d$PWcbFeP
z)7$=>Sd#(!`igC9?7WKN<G9dSvW|YB5Bm#pQ#vXGeu^7|e)lg!_na&oR4fmCVy(QL
zl6Tu at -CmC<$XOr%UzJ7wPhs$ZVwXZq{G<V&OzEb?e#KC#t<%Cb|DHWg<NV$(SRk=0
zTEA;YS|;@5l at BS^U8?h)Cq at q7viV>_e}6GwY-e>p at yl*!sJbw5e{oy!az4AuW(UJl
zH~NkTBKmb7GGH0N?R}bU#;W(GuZ~x%jNyKz>KW at 9qtk4$-qwu}!A}<%N=`oU`m`J;
zi+f~ctbzX&93e<;cdu_p*Tq at K^sfQ_mT|%#F49eNjozCIdn0~EO&LspkR92cE|=s(
zU;j4q at kvr--gu8R@k0 at zEi+IZQ4>bpJ}IPd+*>m$N^#Rw92=$}dXB0Ytpq at Z`_T+(
zszDOh+WK(kv<t&!1VRWNG`0(yo^+l1`Z5QmCUJgM<BVWy*bF&7_v0Q%o?_6vgZ9F<
z9ZbvHj+r^t#jcc_CF#u#wO{dD6nd1A;2>fyRpm-FV<#UoJzJ1MOZC|A*;XLXDKWQD
zJ#RfM at Z<w(A=BLq{4A5N;`O|_82s(lK at nxHc>8AZ*WXln9UA5Vu_pqw+G*<@60Lg%
zK<xkV-|SsJ2{9!rj4UGqGqiAq8K;O(pKf*)M$v!@Nuv?@Xp`)u_oY&QHHZ|zlj>aW
zN|}?#{O0cDN at lIt@S;Fh!A8C4kd)NMs{K?WAXP4nIb~diFrWTbB^Bqik*KUaT+D#{
z+n3gC0Ya~3PdpZ=_i-8ZQ}>@TAmxR;O$p;wRj$VAv;F|Pm=I-T-x5W02pRc^#5NV%
zGT;duI$oqQd9VVu0kQ?hM_;km54leV=97PtK<byk2xM>({EcU|dHdc4^L~uB3u|~g
zXik)!Yd)wsr at hLU$oFX}+)I(bL$J=oAjj_+RoYbN3?%?AMI!+zItF{>YE$zeS at w)v
z_=m`2eMS2vmdwop9(m at Hb-wDxlsV0LhB%pSzwt7>qDEQVRs>MR20!Y!Rl-6E3ch9_
zr{%<U7#9p#S!Bfa*ykwC2GqZqq#LB0ka(e)Xa=Y6ZTr9Pv$v5kQB{HYH89)my*QxB
zFC$9nXt at 9yx5$AeB(q|!_9wb!*^!%-i3{DWc7ni&*Jrd*yhJ(&B;<zY2;c1+ip6US
zZ)SakFDwuOmdA(lQAf#kzt=fmH~^gyS=R{I#{hi7!cxe^N5r&OAgWjOIk_(&EMYI3
zse1Sp4R-0iJ|zrxP$#Mvp%=WUD8;@=+D*#XXXUYJMH|-5y-(wDyQ9%3*(Mb5-}gbe
zT@)3cBpD3(xs*V6^vLqu7oQRMC`B}RuIp2MqgV%<DPjJtcE8Y}>MS)zSl_cPt4mC%
zP_UNhw0Ldh2FOUf{2W^KX;s}Iu7gy18_<eqg4Hmfxb+tbd_Ci&7R77LRCf!PP6J9B
zA4FWZX!ZN4y{dS at 7JJ$h0BYSN93tCBoR5#l8ZLpQhfgF675^fDsS`gjh*@gRNvHs_
zawP)d$ge$U%cASRkH{alU!jsy<`E87fF%_mVx097L2_)&p}ze)2ZeHX&p1DN$PvuT
zZz#w}Up=vNi at wKG4N@hGNUX7U8c|JL7mN-a#t6iV_eNKL2aao1J-jEhZ3twrNm7QP
zzBKcrz~#1!?Hv>K9gZNlc7B*0ZbWSwZY}~sBT5!{br4H%{E+xJR1e;U=Bk2~5M&mq
zoAOQK;}no#be(t`=S{z47QKRmS8zMufAgzjAxH!Gm%B&T-&qdf?+{aif>4(JqQ~M`
z1?B1vF$MHM17bD6_&*ERY~wJmdV8#K@<Rr1%FCb&inY-UhrKG7IRF`BGsDxSUra4D
z&+akT#b`}bUTvojq2dT^!aJZAw?X~7e!~9FXJEP3!$(Tv$|K}z-2rcN=y at gnefZ#<
z&ChG?<>^z=UQLdc*i&`^8`v~B^I6}~N)-{7=PVng(Q-U47y{6Wo$4MWj|e4RN-exS
z^Hu~@;KkrsEqjY<7j4DdpKouh4h*p3PQJ&YR3~6Je1G^DtB*3>r88fnv%A#?V8NJc
zdD{mstf(dj3b%@5m0P8m*pdkU{H3qj`Y$`uCuH=07lRw%**S6Qz9&k|NT!2KdYpij
zDjm2Wy_-noc at 6kG&UJT-;n4mgj6GvIeWe}7>9>?+dYQFaJAwz%%wCG&2%uiJa<|0m
zzl5&%oWp;p0m8)lcEaz^lQUet4yYe;A&IPd8-5rhq{F&1R<fN6hqkspM$aWV<65jd
z;-iNt$C!nor9zIqjUcJEFVV6tU>Fp{(IMpw=1Q%rYtHo6VWv$?m<!3yvr- at LtUBqY
zQ$l6MtH0>%AeufEP16?Y)hmIYHig=429=0kRb=p?vCY?AtZ;g49%klUn!xA-KgvU_
zK%kSs^s`_kJ-*i7B8Q_E-LJ?Y4aS=&sUfC)FE^i at 0#?jq#DZH%80-=^&{kJ)b`;zZ
zfOmja{H1CbL^7s$=1|GcRynJxzXm|?hMs)+QY975aYOoPFZb<6Q$x>dWUisPniB~_
z>^QT8VZ~FKtbI9$>8&|QWhtwiVVr#CP-VTu=3}+;&}Guatm)9YN{s(NX%CTM%_=Ik
z-hO*)<wV94BiJ82Z?70(YgWHJ%d(kQD)q|1<8tae#X8j+*rFvY3>_%|DnmW%*D01T
zB2S5vlzrfgzM3QfJ!dZj&vE4v;F*h(;L|e&DO{QR()^XMG|odL#ZY^U=edCjfVrCI
z at y35vHTzf&09Q|oo`Xy~jwi?XxPjv9eNFow9cVgQb#4-r>xgSSE;`8%%rr(*6n^E?
zH9aR%fJd6<txVt(>rZ5Gw&^Wc^w5BxxAF0tU;;@L%BMG9MHfQVv0s~KsOpa_c!B3o
zG<g3!tyMM)fk$jIk at _;zD()&{Di|{Zhm15o#7$Hck5T|!dWMCY6+eu6S^Erf6b|78
z)I+JA5>EXq&vd}L7B{d~R|2LdyOvb*vO10}6bd2{SvKf^ZLLHPEUHh;Eqp=kPZ*D?
zE_642DR!$&vd}<g_95Q~Vr&v!8PO<SX}bAo?r#}_#IiP(xcI>H8Q0A^^4_)x&!ShW
zUutbMxOouZy at Ms-MMnd1mzxUF<b|F*3b10(ypK_{s1|mW1pF5k#3Uw&Tbul~jLOpE
zFL>8<L9;dQ9hjaD=kUHR0(a-pFNEPVZN2oH-rO73S8 at N|vLQ+Z1gU5#PJe7Qk6lV{
zkLCzKvPA}YCu?^|<X6-vUgQIxnON2w!PxDPqlAWt7NNhKU_6;iZC)os&DId*H%p&o
z2k1X20(Q>O-46n*2*N~C^zkN~0XWRdr0P;}y5vrHJNq^>iv^ZJBM96E3>_mU<T3k^
zJgeUfTJSmq39gZ;OD?DvlZV}Ch4xh=US=;82<V&eYCTN!*>z}ydi>45$=K_KZ~l{v
zA%Z+k&>@D3C2!JJ$L>@^jP+iZ+1^Orp*yVzAK#GZm^x5Ni+>IOORu`SvaIua*4`!X
zxP}!GpOPy?MFP!5Dw^oPsEQ1o7_ZK?l(wlU=y^~@q{<1zc%q%<SignSw`YXK5XS?#
z6qz at s=}=M70Gj0!j)+Nd&-Svma@~7vsch$<nXjE*ha4)<yv@||y8a)j0df>(h1d8i
z{@NE0q+Q<J%wN!w+C6V<O5Ay_n4VI1Gt90)5`(jIWf0sc6A$0z;8T$kOS9+HtW}Gh
zQFES{vxy^KVvs_wjZ|bO<v`P<rqBNA!^}!P2_N~SoE}l~dMXPhF=!R2VlptePM<Qs
zNs5#n*ri_zoYWpu-v#sF at Hwfq$V7SY<U-?7r+4dS$$AX}SngVx@@7F_%dLY^L$N1-
z3Kx}A*NlOxmdw}p4r`RtvFq8Y=>3;?{}BAQvb)&{urE`7enWPDclj85{0j&f;x_}@
zQrq4#@0!{^iFXRKLLhf>2)y72`&L;sgVDm{55olkpF4^!Y)X_P;zx{r5UiTU`r`8`
zj9 at +#P5 at Sd*qFenFm7|0F$YzRR38R*xB96#H+l-B*n7y}1De`xbT?SylXd`0(yp;G
zhKqV_c at 1>*O@!4*WFfitk^jtn96|2X1ec+lXg&0+fO48PN;h2&frqkO)A%8iG{zU1
zzRmiRMJ at prj&^%}olZCoeQ5y)iC2*_-BbWTW`~uRuUTlp;&;(@n{kn05glSK+Hh5z
z<n~C+jk$bV^Bbtri~gPVdvgX10Kd3Y3*xmgd`KjmM$Z)h4>uLPX+Xj^CO at SQaL{PZ
z5quuc4q3Oe6*}p_Y?aoK>BN}w8H<X*Wu1}&cRh>kxM<<6DzEB#Z5|<x?V*VDghRw%
z!<gbaI{lf2i4En0vVFro((<`+x^yx4^dCBC_r$0RJPRq2ATlbrlQ*KaPfVCJiOFpy
z=A69{Azq%uo}s$qjp~aV*q<85_TB!WD_V%PQU#7dbMDVjQ0~;<zDZn-ARyka$AwWS
z{<~_Guz}m1=}*%>dg4~nS7{XVN3x+B-crhjf28?7yu(c;fmA{s3FH!A@>(P-;De at 9
zQ5b3+W1)D4itT!yyPUmt`rxiDW_ at a_sjMnZ3W0~Cl64UHQZ_eRNnKoUXxEMc8YP{^
z6IB|Zq^*AcZ`UDSw@>lg=7 at 2JSW_38`J6xxj;lVS9c&9+`UMt#aE$B(ew2kFC%o#M
zE47h-FRH2<8-EgU3#+H%OEtT`?G=jE8WBCO@@nR)m}Wb$Sq+?loojHZAuR>5lzJGj
zIK#$c;r5y(+`QI8X;>&e4eN6xV~1kOG1n=TKH at nXgA!qi#iFjUd;2rIC+V;hc8+DO
z$_m0!5W~l8shHHNADHbp_tYq9l72oXvCAMn!!qzC1T(L`u!HI3=xwCm?Ux-#77hZE
zicQB2f10!f%&islfL?8g5y2$gv8V&E1xuqv#ID58Y)T>?crwqYl6-If+4%-XblBvd
z$M}9|nI*xyNm+R#N*yb at L{#-^o)x#hQ74Q(C&A0H*R9*5H<LDO{0%JGPtMeam at -Cs
zpkh72jbQ<0!g^7GO_b$Z(6}WA3-&s>yv9vPt$1-k*Yr73w`lfuSJXptt_(g{6SoNt
zf8orNuKjvpLtaP?4lWTK4H2NB#E3^UHbgROK04CC<|M7F4e-=zXJo8(5WbcsS|0F>
zrFgo>Sd at 1nflFg5D!zz1N)T{3;R~e4l;%dHQt8t=TCoy=^Nr^F#;NQBcY&@zulYU?
z1RNBa2yjM>=4~!|tsa3dfsfM$;+Zu=pWR6s;<Uu~M91N-7Jb?2nSgFANYH9xbCSeP
zm$HleP`kQ`fxjxG2X>cmpyZW#Vv4V2`E#l=kP*d;%yKwd!8?3VJ*5f_^k{5vPx~1H
zmp?|A2Nm~}2e*qN at M_ao9F-jE^LD?`ILD_8Fw$k6C6iwQkAL0#RdBW1qj97FzU5eU
zfsVfqbHKVRi#heb;zYVe at j*Dd8ISxaHp*+u<!Ci7WZ4uT#FK>LUG3)g-IE(Zy7<7f
zrp7ULvM#Akibvk1IkPPWFL*rrN**W*{sL9jjan>ArvaJS-&3v~-Oo`UfXD%ly97Zn
zxS}QLQf={S5H;hd+&$U>-98_O+_*9!Jq<jjAyEN$_C2c~jQgFpj9ar^Spg{YQuEP~
z?P_Hh9uiV>>tb7naRimc8+5_NGboVQ<f!x2+y5+p0x|4U5YusNVh>c-=6_F<TS at g@
z{cX3NUszv*Di*3(4x>HvjyWTTj~&m}>LN7%sy at IAiN-erWu{F%Z00elyhputA~3|X
zJuwBjN}*&7*EAI at 3ImU;b6tF%M-lkfMrRWydbjx4rihUTKc68VzXGAtsJEtl+$WQ4
zByxWUy-BPO=>6&Z?gIgty|_P7uPf+yjO{ue3QBYAF<G0blkq?e8SQ<OtZavr7AD#t
z at G2ja-O~;qyCv#LRZpdM#-_}O{6L=Z1)g5*qZZJHZ=E1KqKrF%#U%58AsWUfkU+hq
zvzOf!+V?_Q$B^Rhod{_~OAY^oVJAG$kb^v*59rK_ at k3CEN$i5VZv=D^+q|&k{*2{c
zw3f^u{RWi${bk>Tddb2jvIK?;POx{W<VZK3ia;1YiZV<HOJdNugBFrIP+^#bW)wK<
zC7^n#+Nxn+%85|K{_VoM8xXo`xlSzu44|tIp~XJRM7;;5sWzFBv2j9=RA3q)-2VcO
ztmE#=tCJ%_vq%K%%=K~xpat`=>&C;ZGgGUelFdf3M42Rx$?U1m`*K^AE$tZE%_kwU
zDl<g`xKHC!9`#NQ5865QGut*SxC`}5DcaeEXT2}C!2f!MggE1766v5mZ(PLMNUU#D
zvOjmn+)mMjKo9Q(A2*y}n|K|`t4&R6y)(>+F(TR1p<H#)YSya!2{GTx<kwjWB2QGf
z)S?rt=9~l8$ZYaleIow1USl>(PHan$*ppB~ro3fx<o`)<_^?D49OVYI8 at PC>_Adus
z7Wre4Yf=p>;QFR73w&%U+4rYkbFn)o8cn%MeAAjTZH7yP7lMv4ZjXQ#evcRq>7|rS
zrb0(WiulLscAzK(5H`l}pm*}5>}3#t{`ne0N;sChgvpSVa_8!<a|rz~(){t!LZ$J`
zNknyo2W^80Qnr;b)myqpu~c;I2`l7mo1R>drfE2%()rl^6OjbLkvNCFv2-hqOqedX
zQ5Kwq`qx;>pl2N#z(wsx4v$yI-LW`%kG^GX4Ziwk^6ls~O=}GVC;Uu8&@no4reIrP
zW66r=2n|UDtG1Tk6CYh8^7FIXf1mW8NbiY^mbw8iqt(z24I5z at I3U@55wl?BwMSio
z(`G>$<=F+mf7D{qj|E>D*taj?h%k}BLIeWyil-oiZ_$j at X4ioPX;yqKcZZYW=??DR
z>c!Z!!KILiN(V%H*_DaPgtm4xuLbybdBKo6i>z;&F at j{IH}mFJybcwv$hxLpD0HSt
z|IW03ZeTprHk at f5`Ay6uML+433=2YLbbLqM<(zS3zfdT&JmEcJF+^S&AnC-F_r*Z&
z!L!{OH&C)8gZmJ;^7id{!dZG$16U0HU|7yYf(Kk5G!4pC3NM6>b- at +y{;DarBr^w`
zR+K8_my{72KvK$(6;~5m)-Vg;G<>O)94aZ7#Q2z$1?|C^AG1%>#+}0gd!h#@cbmI2
zQPYNRBPnZ;(q$5_e#7zU0dh@`k4w at 8Iz8LM#Wvz91nM3qgikC(=ihTf)>dpE- at NSQ
z*MU-mzYI!UC#rI7rFHw9HV{GND$anCgK7sJMBG<1v)|OSZMYJ|9zN=~D!YxWnu6Bw
zv!rL+e&C!lvLinBjc)am5v+)ih5KGSzgv&Fg}Du#ir0wk_ at LUDpjS)k+JBo+6}IhQ
zcvGE;7Dy2)V>|1p+%;Fr1Mb+xr^!^+mRrCR*f7LV5W)o^u2F+Y+$#qevVF8e)dQMr
z#%%BAafE7Jhw;p{=yg|-Un88|gyab?40FiUI`=f>cyXnmqWodpr1iZ>Zn_?PuAo`z
zFG+yne$K$|O!tix(X7$n2g>VtaS0DF5oBg<0aE(hMy0e5FVas5aWdGjDKR~!wg_O%
zky-+2U82HLK>7?|NGIqtYelJjZ~BBXFiA^h*Z=Aq(T^oiw&*AK_PuL_$E>@$WgS*t
zmf5nuJsc4=WOo!r>P1TkHCG#N%eoIMh6%>J(yaC%E@&<c>o at z7@-pELCRh)#?QK at m
zjO#!JtK09Cczp3$-}tt`pi~xr8bBNpuN>erihLSl_LRuCwC}Cs=4lnfBz6YUR5*Px
zEip33pv<)rwn$-xttw9wrCTsxG2BmD_RxQbKa(LwGa+~W<QW$_DYmxe31m^%^z1}^
zGV9Q3#4jphkOze{Ie3vmpW;ML&R(EQ?4xiO=B}CV&!EJbqx at os5TzoEuuruorDL{^
z4H_-XH&#RHZGLVC>W$sO4<l#8KgEyTl36|xXmS9VA1742p{jI%jgb>n>TAX$6a0ai
zOUlQ>w%cPE1R)@X&tST;ohh51A|v|rnM-Ic%^?2RK8*=xT={@m9qdx(tNYy>ad``d
zA!UMzR at U`OYkqOCNm2?-UC;!DbazGld9n9b_NJ9w3te3v!Kw<hyAP`SZ99L8#Dc`c
zK8tNitjSSd=l>P*TLu$rr42&WCQpS(*K#*Qk6!s_zEPvH>D(lc!}ZM*S%~->?oRg&
z`9%i78>MjcfW8Ar=hkEQ9}={3HP7nz|HUllzUDRB6~iDr-k(0pe0DwIMW~ByIOvjh
zF#Iev9uq*mOr_bMKUqZ-+=}>ZHjTVNicgf83V8Ywo)YAHPH9NoH!FvW5ii_rM!59q
z8Of$bC~r5NquMrM1w@}O6D at b%dsudLn^JSR4XhigJ at TiqA7L}WZp8R=p4<5gbkjCc
z9R7-)lFE?1j0l7FI9ybu`<(q0-(;^XC%Re9@<Yz-sGk*Qw~;4Cz^tdJo6o8 at w+8Ib
zz9}U#KWPad*m1*;Loa^^KfgM51VtkB8Aun({o5#U3kG;sCUxr3c1gL*)`YTC9vsga
zG?g6vcvG&%q~YR6aY-L%Xx({({<<SrQ9Cc at hAKXxghu_)$w|c&*@K}E%p2i;BBLRg
z1;_|ZnDVP&N=7&p3Pgo)8fLG|*ZP6h6+hP)vMy3HwigUagzs7JzY)qToOMis8tuL{
z*&5AWam+A*Sbk(x0OzxpsT#z>Anz&_^n#}I#C+^{i}5e5t6!M0xLU><zyVZJVPY8~
zDZ$TEP5<%8kyS6l=~!YM-Zdo<eC0>J;)>Z}#oWrD3sd|a|B(AxrP^Jy!nOR7=1Hm(
z-5{c><ECLS1_{eetXTF`irr~1QX-|6Y8JR`H908pty#L`l|lh2Ug8z^B*!F%$C>FC
z-?SE>VYYA;Tm!)Cc7tT9B1dgfy$C1i#_94K^t4n37pw`5xW?hsi^rTk-4D9=oBq38
z9~+Z-`|Ha*;l?8}K;exocaR$xp`Vy5?*q!5r>|A1I}vKSN=CD9_BX{WsNY1Xt}EHW
z&>a3dJ6Vz*^^S5;u2?asxXdX{cEz%BL0W5Eq8hQp4N`Wq&Fwsza at I^jqB5i#K;E`d
z3vfls#?!UFS+4jbKiCqI(i4OWumOeA%4YH6@&w)J1I%S)LK&>5=PKo~y{$iVTmMt*
zYE606EEL3-JhUAlm$O&)JdS<z-p)Xc<1!=W*CcLmdZ7pXzeaK`=`Su4;FJj?*kEec
zI%-`;=ihn%#2uqZ at uh_8cH0a`F5%MAt}A90n_N)dPg=qT%l#14yXCGNHcd1z)HBW-
z<(iugj*sx#F(m&coM3q1`JZ1hY$Z%%7%?GCV(~{AGUtvoJT)6Fa6s3a?mfodGBrG~
zBi$t<1H8Fca}}@QGjF3fH%spU{B`3}U@(EdKq)Gdi)85cr?K}v69Xz&`Cs_!UW18M
z`E<Nb&iJ2Sx|<DS$|h|@H!9P7A18$YOfyt(kFrvVHru6K`JkNpkb-(5$t7`scQmgg
zF_pBxX4allMA;b00<gfTTDSV(nXCsp!lh80T#}*w<e7_Y(=1>s%|~N%Z99AJ$Ma(&
zFy{RA31pg9K{NdJ%9t;iqUC;G-Lx>y>V~iKe2e*rV>j+f|6GyIJ1nG^JM=;LgBvby
z&=W5G^b<(U)Sgi&UywBsdMBSvaE3V|!8qJw6HzEDQ)JcVL9RY#Twp at E92g#L1_FD?
zN4Up$C7cc1P$}XmtDN5}d_n(_?+_BYTh;^epcR@(&_cTG#RW>w_`n1EKM@@vSXVsm
zXh at ukyH=keSy<KQIrrj%i4*%Bkk^pwJ%Q|g5j~Fqt;37H)y_hX7XEae0|P`iv18=m
z-~E2)XY`68iM at wC9RS0x1QkGot0U`-sxl at m-^$F|N?+WDTzD%&vM?hr7q4KN3psL+
z$Ri^L@`HTgU<+dS|Kp`=671yu)!-3p)pVJ0 at mQ-v4dE8HDb(rp7ai%6Nh_FsI16P1
z=c!X!o4e^SVWAwYn`2ed7K|ZXa}0P<*16Y1qVcB?c{F{))vJ{Cm)IW9xYmZ!KvV=e
z%_Y*6pgq4HS$?BA5;hR%mtONz!w~*es8$q2dUh4*sr+|8B+0Jqkd!KtRoP|ITcPNL
z!3vPK0OGi1>;2qr83)j95Pj#$ka9_x{%#t?{b&FuW|!)H(SIlh1Q<`pa750*A{9z)
zKMM-RdJr(@f*C3d<F-GJQNw$0<TXWr^V-Hs8~>Qt!U at 9%bm&#CHzzD=BNQq0D>$VK
zb@=-Zj|0{#j}&F~lY>?_FZGjbDM9K7<IN6rD;3L at KBRRZz#hxe)w~D_n~e93?NE7G
z4Q_Izt(<BO34ds1jBIu3LhsN@&S2kW9dBWBIyWJna`V8;ur1L-)cs_^+C9f5i*3rP
z-!3%chM at pT1o?v=+K&**9Q}F}L(x(8mFF)4E at rJa;vwFK?&tx|U`xj}(6mkuB)N|j
z$>OQ~bwdL9EJT2bQK3<kwMQTXF5{%DHwhvu>=^Ggx0mG51dFZ at FL)zql^3 at KBb6?b
z at Zlmn5&4a*OcdIuM~=T6L#VsQl9r&pIl|+ at uG(@@?TOC7uU`hP3}L(Vcqds&3Jf#6
z<1d*XSAFYG+-A4$FTROxN=yOlQD?3o>UkvgGzZgEsqh=RZO<CRl8ArajsnIrWu5dw
zff*w?YuM+iyIfT}aH=2VZseHSH>t}aGDjA~NiA=Le-E&Xfjl~a#OjpFqqDYP;O#mI
z&L2WP=t=GRf<pApHw#L<$iylhi64cc5mcBnxh9O-4_$T5vJ}$^y~7IgpLW&`Wnq<t
ztS8VTfkMy_Mw};coF!!34UADi?U#M^Z at VH~g}Rkb<0zJXCo^3Z(v<>b6}p4R;L&#D
zV{2D5iCRJwNghVzwIwrO{5uK&-*YLug@$N`_MVn~^^$3)kbBRn*Y9(XE4$$g-rK=n
z#@uRrPS_i~|8=}K^473^sfF at T3RXY#=%>Qp-~n^cNFDLx*l3uh+r|l16~d24okz|l
zVI|qh@*YO=fT at Io0<>#K``LaB7vY9iJ3R2_P3UW_Zd=nqG;3SHVi-EvCS91u&$E51
zmPeEsS^PdPaCUYS5Cf3k%l_!Fq>(i<g0FdVv*yZ_V}B2<jp~H6FmKebi)Y-PB!FN)
z33Ax&d}_<nsgU#qkSOrV<=5xJ-hwKStNeV}Ht?yLbXm~|{U$-#m82cb{!i7KgPSh9
zoP1B{Bh|JPA%gDTu(g$pJTSt!P~F9is5VNX<#{y{2bB*FWHOLNg7;^$@^J1<bz(OU
z{y|5Snb+|ExhEBzjKJGD)ocw-eyaQIo^dEMPs^8?8INyG)1fT)G7XaD%B}(Cymo(G
zJP1Qc$8 at _7GWgKrDBnraPYK;xV;xVRWguzPk&KhGtb8eB+vQc^AUW^4fnzJmwc2}Q
z4)BBU<i6VB^#)~q1Ejun at Mf2dV-q`_MkOsid=`!E%-0hW-&_ba-ZrNeRpt`@%P-N#
z&tbD^bnKM*<cV*LrcQe2k_|9nMe at F6LZt*o(4v-US-bHvG`rE=QU^IeX8F3~|1+6}
z@)|uP;dzV4RI~|aL;&~X8DcVXciw{omn)jYRv5{yB$UN+F2&PdB}#dt6tcFY=?^hA
zVTOdbxZH=~4%CJ><?*y=RCdZL#rN*~pOheHlHDMk&7|0 at pO2p&<lQg#KJdo#JE=Da
z%%6|{0+)HQHCza7Ka`iU%Zth;1(2p+qkkZ|8Unh8N7*Z5AbB9yVW|(&5gLCGsUD91
z70&>(?Z>C%q|y8PKC-Sf8A;kj^bIuLu%;8)UbXvRd36kGxr>w__1*r<9JRVHCWO&9
zhiRc^V~+vnDSiBmSkUQgz292kne+XZiHemULG1pCyNj<9nK3aF at 0+P>AO8Y^Q7zzY
zxJF?F9EzD%;s~aFs6vHH7Zm<?>K!IOV)EWDnjts{wzhprfgjSaS>tx&Y<bKNQ?fbx
z{yBD%^pKgK12Jx9miUb$2_EUlSI+=`uil><1u#tcI!Yv$QIxMcDP3pZZ!EvNg}_yk
zvI0}=LF at YuIwaUNF~HeY#xH}s-1Bi=&ClHsco*64<U%nD-y;+?G&yfverYIQXxEH9
zq!oI}Y1=5wYAFwGw|^#H(0lp8-WK{g?w+(w*lP~-JUAyk7L#@4n_%%C;41-$nfPv7
ztf-1rssunvmH)h%)iN39j8vEq0G at 6u?ep~9UOqE|3$Fj0)^V32GZlxMFq{(oDA~Bq
ztk1HBbQW-vY{CY1kSqntOCBuWjlma?;iE$SR)i4YcgJd at Vj650d)8Hl3R|kwADuBP
zfz3`Oi_&ks(WsX|-mlZj;7KhokNQ~9_}9LGKYGTrLeqxMcl1fv11@>;CU&!)AC)$~
zS(N%LuN`Y5V3dlgj6<%8&7d1Hy~^zvq-5Dr(&r>QXk<xzX5x!5p at Bh87?h>zMDVn-
ztyyRhms`Nb7W7|U!v~ZPNqyRf=$!x#)|n<bPW13G_NZiGOo+ebd2_q_n_=S=3E~kA
zptdDz<$feI8ppq-29fGn!)*J40ctk9hX$(wf+cDPm!&H7@;uDALIOE4q42dF5m!ak
z;i^gbxhJD8MC&=;;{HSoW(w8uU%drAK-_-tn{#QP-=tqj=V32hCm01ZR*5jOB-stg
zTv=xZ7x)bME>p9TR^`Z1B8L~e_UIp1axI1%r7D`~j=f=%zi@!Jc*PaD{^(UPKw{82
z-{L*0iLr^J4~D9#6N6*Z^EA`m(M)5mos-4(iB{a at 1&v*EU!iGK%{y at OjoyTW9J{nn
zm-BJ;+!TM?f05CE*>2o0#!|3^u#+pq|KoF!c|D;^Udc5t5Ax#EX&ty!y~}%MKk-7Q
zg>{dCZK)NYMnQnrTg~qxOnOgUlW83PH}5 at 9`Y{If=2&i8|G*$VWQ1~RN%b;}83f8p
z22%=FaSIomIDetYC(oSq4*>=bA6f{+Ps5j&x{f9uf|{E93x_k6I1F^_ibkt=2gyI2
z(j5_|2hM{+%~X7*MCdyYYe!v%MeUSB-Wo?Yfk$q`)U5=NpwRL5=`E3tM^!a;<A(6x
zkX@(|6o7Z>NQcro9D_+1i74O?c*Tu>7?ouq7QVApej~QszdZ?WaP9r-w;lr1q;7>R
zVMEK96q<0J1m|i%kaiTt4v#3FKZ*_EXSnZ at lk`kzdh8G!rQ<Cd?BNhbnkcLC=j~R^
zRNs6;_zGVQX?%f2z4r3i$MIAYv7XY$H8D$=CN)WlP`jU><F&PhyzyyGCA$cpSVw&L
z=-h#?frD*>;fQ)ZV!(qdb}Jj14 at onp?8+$BAS`prlU}AJRbeJRxs&#|4%Pv3GdDXQ
zTPSf~-w9Z+{q{K~=|lNs at OCke#<E0W<c4b}09in$zvl_h`McEV0S~JKdSojVrG3 at J
zvS|5)UEs#{Aqbf>UZO{{#c8_p4xR~16RolUk6dWb{rNM%{MLAEc9G>l#`-_8J4k&3
zytNb#HTfvEo!eM!E^rF*iL2{-I*7ZXNRw^bo4_<|!?xM!okbcc4F at c$$3rt|SlW2y
z%G4-WCiwgR-=jcjF+C&)w}LQi0Cjty^j1%3TIIXMTwziXo%E!9C<{dVlRxQIqNwxl
zuok1Y7{Mz>Yi>Brc8BUUTCn;So0(u^bzk6fkm8(<ln}apo0+y7^Z2(W?$<`Tl>F8o
z;uZ1RP>(VBJ;Z^%Hgilizt8>T%`!&jo;T(0hJq9^^gr*P>?<JF`yP1VCwunHtJi6&
zr~}^Hc6GG)#W3;-7vg)>>JJYEHzPO>^`*LaS)B;jd~O*?H-eh8WyKB5bz97A4cBY;
z_%ZA1kP6)Amp(^RgtN$YgwK?jFWX#~jvsH+XymXtU$5RGdfZ=!^M8=b9OA5mV>#kB
zj^qdc^E=2)>dn#(^ZyRb at 7UGK<{alAh}Ftm7+&e{3Cs#68+jq}!D00*(FCuX`aFc8
zOql(~Vz-~+W`#=$+fF=`b>SF&ikd)!<o2K_^z%H^)72Q)iA&$nvTEroIH0A!Q%2Ns
z`yV>8ix)Q8Osb%YF-@(7aJdiso$P>FNjd&0#Oq6t!(N54R`Cqms<)_rvJ9F&qxN{7
z9vRzZTO#_o{Zdp}KyUi}AB~1)rLu&-_e9*RugKZWjSq-+koKV-(u3lIOwXC(J7<w(
zj06kDLAfQRN^p#3L`Q7bSTwM>bcw#KzYFh?LPe1ApLPq?kcGnEYBpuA`&M=k8LLa#
zFhwTX88EKogp;P30xcPRoF0iuLo2}#y_WuK;W at s*E6x^VCBN-=zaFIDZ#vPN05*#C
zsNZv+ZTobZ5(0`W6;z<BZ`@*zey3WPF1By;CMVGdu+)8*@IHF4*CRqe1Z6N6%B*1_
zG+*VwP3|^rCQBkt28{sw$+!17O1=7*lJ5$$S#BBx*Ipi>g=rIWOBO7JSEQX%Qv{_Z
zQtgG;tDHU-4=E*{%4LC8_E|q6 at ho3aUvd$xcotjwyHvrKTIha7c%v*vLsTkm2;bdJ
z9#@k5Y$M$fQDE?sQzFa at i4%5D>i<Ak+)6JDMvB<fa39#}Jr<B=hjv*vA}Wg}LLgPG
zxo%N5bRLs at 4(&$Nvxt_}<)do?EM0#mjfE*`iZSS_!<Xx@{6vGt7Ilrx6*rk&agcQ%
zjR+GyM{D8Ld8EXt%>PXJVXf&12-BT;GPWgIzkAH)ecFx9f*5wbd+G^ID}+dT7=I*8
zeRRaqOt at f<L}kqKRg0+QPtM1N!qLM`51i#2&wb!?xYY6MT#T<@Ji1N)nI8Z-%;(~~
zdD*suF7TuloTHB-s at ehy3119(aEuNxI4*2cdf<gu&RUC;qfuH{5RW5P(lexL at pZNV
ze*i0Rqb5*=VBaMn-yG at d2qy%UB)&9GN}LIyv#n~k|D~7Ni?YBE+X?%E1Ycz|JT)C}
zppms?_Z8l{WMwtr&TI<s1p`VSMwynl%EKb*aoG{&i=+p+VLMsH9e#`whuD;|j(X+=
zKNvW?T8LR}q92|F6U`YJR(?IO#D2Dp=OiEhX=myN*3-E+lCzdk at wb9EbYGqcHG>#U
zcm#=osITSj_yXXU1P<6=6qk}Ww?n<JQ2+jU4oj+=@1^L%0-V=rl6rkx>6&9fpD5eB
zRA^*zPWy3XuWN0rE(#G)aWXIJS)p3DfU)N^IU{CoYBRwbyIRebr5`>yAQ*O*!~(_M
zT$a1m^{Abln?cvK`wsz!wx4$Jt}tAWa{m3kP#_mj^~@=UJj!vZ$Q&G^?w)R=#5dp%
zGMFflC|!FI9K0;;Yih|#@H(v19$r2<wy7f5GhidTxK|4>F+0qKjXO@>$H(;Sl2&Jr
z6pea7PG}WY_|Tgg;PFKfRjp*UkD_Fn4qum-uBfbgO4?0>rT(+ib^FQ0Zr9+Dqt|=9
zCe**45AyKB8utBxY~Da^0m+YJMutjMj!Vx$)C<p_vPEvhlNO4WB>Wn{8pALiw3Foy
zm&MyV&i}%=Q(UwRMiln%@mOemDlI$mpl~ytafOn_tn<($ek)ev{bBTp at K)1m^&<J5
zVSrjN3CBeTiJ1iIVX5E8tTM!!;3bh%9fB_`I`tQ5tfTl~n3dG=Ym08q#k<Tb8$!E<
zdj7r<COpfqI3H7&(^2fcWo9?RPTMn%^fa4v at v=om$}DfnAZj!4p1riy+5wr{|0d*I
zH*1+- at oTWuNZJ1}5DS7Fn_UnrODz#Jclg<GOlK(FZFDg0+H^ZP2h(do>l_Y)OVlJC
zgw9XunSp3I6d|E at 8@>GI#3M58ga*HrHhsZQCY1Y8e=r$p)j3ICC>rAnYUXTCTgH{r
zXEX)y#*KM5Q5Q}On89rk7&*`@s5{u0m_YquZx102TqL?s`#xfJyWlRT!i()<vo_$2
ztB-4{J`cICnIQX<96E_&rmL|MYyQZd85lA?A&atVenR0pq><`5?Mk}>m#O)f*SwPT
z at q=gpq@!cgODX#QwfJq8&%9y00d6nWdtlcw5XR1<4!CBQUx@}vjE at w;>JPXWZAD|f
zE@^s&hh)9TX(M-ACCb~$9`ajk9e at DY(`_I020}0O4z2Yd)`9G-S`p4$t{Xqhh@=Xx
znF3f!5zF8Klr4wTrh-QeU)*#8eVwU9qLmEfXtqzfih3C8P)qzOi<_pm%IR$=h<J-$
z1TUG>X~3oXg%K~jEpu8(BH8^80|rfB%~X?OuzkgFlxNuyvpp^G4C_TP4_A)lARfaz
zx<&V}UQcIQwg$bi*os-*<_!e)Y-vAsvjRg_<19R*O-w<tt=L1O2M1Sk=<iM8lU9~R
z&f9tcJ_Vpmw^|7iA3|WdOIxS?ua*efs<Z;?F>DB+HYwf!I6Xlq?{ftIFfOri_8!Xn
zfO*VL<#|)?ziMTjX)gu=^&`||YmZGC4wCypY?Jt$kMuS;Man+g at YM+QQSs^Fbf)U}
zehfl(tzN3;gzaik+}TgR|LOQuEsMsXp{#3CEbSj5mh^}?8*eFo#DBC0{`~1vI`C5b
z^%q=%Deyfy2+EBM#gh^2?>(e$*kn<;JtAX1GE at u)cEPn;j!77LJXxcz!qm5*{<WVG
z=@g{3(QgNU%N(hN;v!^D8Oja at d#grgKsh|&tgb~Y%j58gnQh1^&WhcemuFF*$7~rm
z2N*NMW05gm9RWcnJvfa=@e at YmlcOG@3^A~2%CQ!crB|ca-vEtE;e6fnyFn1)P{ps8
zDG5VT2Qo{m+y3npe&gPa27*ziQy*u31wI2BM4Ax{PS;9eVTBl<9>HH5w35IO#MZoV
zD0iKILIB-`PK{>bX;sQ8e4RKa{D at U!9ZQ`wjc5KEYUZl*0OG&9iTZSwyAx`h_%I*}
zv(CEjW#Oe+It%V-k2Qn at cI@~r!E0X;64ZcbUes7HA~{o_HzS at sq7z1#yr%&-B6hbA
zw9@<o$<j6msvW+IR$YgTocq34- at o5Y2$*LgoX2L{ir%BV)~tV&fCL!Jf#7;~cVc<>
zK7S^J2d8|aobY-<y?t)Z8*3G;$q`~-0gD&YaE$MLe<WfmRv0poCia5s9-6fei(U&t
zpd8pKG^cV5-iJC|l(Y!f<2v{I{E1@`_w{U*M-H?#H5k=HsF_GQE(DE|s&5}iSr8YU
zCG;0YiXSU0#n&UeMF!><w47~$i?-u1xX1B}C$9l#3KL}nR;zC`6f<Tje;Ig1*IfsM
zE&U&3(Og$WH#Htr><dhsUpuVSh7?_TG78v+E>k!olO>e%n?U@@5Bl(D^=*S5yKA)(
zol;9~C$>@e_Mc}RZ+<5vSHxP8XO1AKksp!({WAxl(l|}3Iev!xy-BinqO|fs5%E`x
z03K at vse%8XV6~ZJ4JwfPKW%KWMV~+YRm4B#`?m^_I49%jeTZ%t<^=zFnQVxiP5md6
z7U<Pv=f(nYkuj!&XyTGqhIL#<E3texk&hE|u0-wFk9wu5U}^59P}qre8vCoxVSHWu
z3gnmI&;p8b5Bmi&*|8>Ne&PbwlQ;T7yjj%mcu?yQC&CYY;c<7zRPSLLZdU=zH4a|K
zMP8*8g~Gvd+b7S6^#ODrIJ&I+vHL4F=O`JLnHsLv9$rC78v_^@@Lf&#X)FIejup<f
z>YW5O1CA=?;K((!rllp7r#Gme6!N14OF|tn2b8)gbRwU_lu#DE|6fhfDJQ`nq$OeI
z2myHN90#y^ty(bigMFpei$TGUutL>K%zI+1{9<RABN(MSj_c6B2_T at jdQvV6_bC%p
z{8&GQ`+W at +EkGu0V2yyCLGf0IKqzd;?f?>N+7Z<kYz6l^Ncbm&lY7nK(k>%-fop9h
zFRee8GDwT{lrbCZY955wYJ*qhTDNcqq19FEd=a?w5TB~|WPl*3wPJK|yTUZcmVU4S
z=J3Qh!WWLf0<E%NvSFZA_4ZtF#d3V{zFk-hMz7HG+JZzF;e8b~#RmXNG;1gbH_ekf
zb-I#qB~8E$W^i*k+@`^e19J$a0r7lFl_q<fsYJw>;(GE3ZGK72RE-_nt@%8P=gtr0
z`$CCmO3={%`xIN}N{Z;#W=arX)G&CE-h7Wvcsp(RXu_}a+)J$9Dt%d3Jb&i=%&^Np
zV7Pskz_}uIA)$y+M^t)c1tivTa at iturp^b^6$DLDSNt0bbf_5!llwPR3DOCXL<m9|
z;JcR?0l+mvdu~z}1DNtK+><3C7FEoGS1#yCq4^U&n7$6s{p+ at lcLu$YFU>aR(Plpf
zQLdHZY>%uDL45LBB$JjA<5s=b!bJKAWruo7%v}0u-%QcGukw^r^1yVrnhoGgcnRlm
zL?NlR-_(ECWe$zBv3-hP{5m&Iri>ep;#pr+9P?ZfNBqDPK&u${E$t21rH2Q!6+)Y^
zcKJ)~ES9jQeflPab`Q(Ga7>F#VhZ%b&<DM9($x(&(@<oq at Af|gI|u!L2A&79FR<3q
z|K~p|=Acg%_1!d^@A&OEXOaK|H+-!RR%S!R0Lq&#x4IJ~NXU2d*Yk at dB^@x}0r`7{
zR4wxcnz~2>zBka at yWgqm>*8G!K3Nr)&fpJKYzAZ~A#9i)HbXo>^jwevSI<`MGtpNs
z_jCs5R!jK(_&}X{a`2qV_31<Ud<6fzy!b5wOY?yuFNf+`v^0&zLTe)9&JMre1VW`Z
zOGF=W+hX;Gl#!KKM(OgsQnXY$w}9qI8TMFp4_90_kz%O*KkzXob#%qnScVfCm&>u+
zYJrnc()M9f5VS*2Nl_ppF=298e%lZ{lw?>oZS(yfP0~mlfe+Y6mO=q5aP`~X&k310
zs{Dr_2YWzIQy_U+d7b+DnK~2rRr)<w!4;pepyv1hSVeM#Lt7#rqnFDvh^+M;ArBeG
zQE$e7=upisdWn{x0CA9cGym|8AiE))2K4^GpRgL~=a1f)O&;oa%lP-`Wu+yY%J?=O
zzzIN-I6AIoLu)n1Z{iK#c at S<6#NDTistdS`j6N*MuuCuj4c(?*=PI+ThT}y6lvFIH
z#V{Dw_({YaJFP$p2F%hnO;UqXO(C?UlCjVY&mHoTK7dBwY;T4fyR3;LedLy7#_+|Z
zM=DjiYd_)qL at V=>JVqyn$FG8TyGg5sGM61iHgDX-9}^d8n>ZCL{df{lQRN(bsDeh{
zzpfEUb70Lh2E at -`xuqlbNN->D_eqiBy=01ggNt*T<o7vhPix at 6^q=54AD#%`<?JC7
zQtRsw3*BJ=fA^AD(6{X{4P&=(mRONoqx2(&X->4aVk7!r<C7(Tka!hErKVC=_Plvo
zc5eH=_yBI6!DIu8vng#nAnhm^V?m<uy89MM^;_VrwhiE%KSpO<CDoxp!DMbVVqgm}
zt$fws<_UqPy<#<V)4icQ?dzDl&VuDV;uV)!t+S|=PU_alizyxm5WGW!{7;L8N}opS
zXOjad{eIMw2-W(-NakbWhqN!)FR0?ochJZ*PR-=ex&f0I at PR!<1)+jgkTpe+KX!uC
zMe-8>_EI{u$ow%i%Z1!58R0J<YQ4V4*EGl!m|kS+-mzL8YFmjB$r6ZN*hG?%N1o4`
z(L<I=8nBWIVpLSV+n5fxFwua=2>8_KrbzG!zoWjLkb4ru<kN4qVaHkJ?JYg6@%g2t
zb}T1K1`I}@MGGRU>vh#TG4UU5Jg_4EmPL>T5|0^iVJIsak`3-67kw=kS?}@<8WG3S
z!d%k&x>QQ%q9y5Y*Q5tv2Q=xLKI`8v660p|nE&Hs%Hp`7hS&L;mh)Gep{<xRQ)Zu&
z1;m(!Kzb31ci}c!z-hQ2iriu_pFqdbT-kyzCv{A<d2D3(qDw<*o|-xMyaPJeG*y3y
z^$B<j(<O8mnPc2dlx at cjsJYE~y+shJ+GQ@#hYW7>IndBUFu2x0o4*m(2C8SzIwn4u
z<tD|D`LswQb%tb~vQbyNbQuvtdQ9SQGUo;kRyOf@*&-!xnr1$m%wjQzl1(LK%9Dwm
z2hbjDVM~|HgGfqt6w!Kt<n%fTHZ8g3bWJ7yMJG(EmLfw9FH;<T{kn{x%LZuZ-02ul
zJEA?GGxW_81f=_V-6FA5hB2t3efY?m82cBHTyt#e$9 at zkb|W=X?>TJ8mk?|Qz^}b<
zH23_vC$ps+10xJCX6T@`Kq-!%LCnsV)?4_Rco?A-D7dWL0Qs=t^L1<}_7wP(1-qyn
zY8bBz9X0%<e2R3qbY{B)AH1dc^cJ9*Fc1Yjl at +CvHH<*hi at E=Iaok26ndb_0-_svd
zLvcWE9kevpya|iT)6Ouv{g*qTelCQl++h2x<tHm?)SLpn6`{^PE^E_u`2|ig%@Q2#
z8|52Dh8#~NtNnOMNI+};8i-6HdS(sRMu7SMYL^-9mS;zilRQ)2{B+u^i|e8%Q*cBG
z{f)DF>)zDnyjt}B$RGD5$*8#b`k at S(g6+9PrD^B*`%uB6C~|VhG4FP%wS;qnhprz`
z_M#6ZVVtVk_O6Q}_q=7?TpKyJ<x&j`Y(^v+iz<kzUVd6TO6ar*hXJK`Dv6U!!Dc$O
z9o&zrXN-RvRqk(C<_=b`-7#y-sW(|E!c6$D+lfh*3MYSHU$V%Au#tkAt>1H0!lpTf
zW64HHe~VN&ztO%mrHcci)m=yGQ{l7li^)YNq0)5)U&$`HbBIxsoG5NzwntX=L{5XK
zR020VWiXy1P0!lM*yzP61`bJdi}VF8;%-r2eyYFdfRRjoQ};E(q_k(Ep*s)`Xddg_
zSGr8XO~oL`TmA##^|qtYSu#w)40!&^VmR)KQ=YYGlULLy^1e)*z(s#Lw>3h`4Sr(?
zy@~c1iiFutC^XA(v-vxYpEktb4itz0%Cgz#W2^Am5C+{WD3Q5B*G+L`jf!ctlVxkf
zV7NENAxJPE8k>r1 at bZEv%9&Cx6GJty@@0fT0=6MXw)~wyOyY<vB~ObYN<*C_CKfIi
zF1C8^E(|w1viQv0{{ImRZBgs+- at IP_w<WvtJhm+De>+`XG)?(=NPdcaaLSIl{k5do
zo(sJV1#&MrVMb~4kj_9cachl8PqjT71D(U{*GWM2D0u^Z0;^+p2lEi{bFUqBlSe51
zE$dq~^5E-enPGkRYYnjpw)tIi-A0WCa!S)}=3YD<zLI3-oat_uAeGo}J42jeyoRgr
zO at 7>m26Yu_T>e%nlo%1i%h>RHC|)a~xLr`<Ncq3I2N+=0V8hi6Eb%r>V`4<sn=g21
z#<cFePFK<?9E9D)LGX+E^i+ror~_rlPRjonKXz29=%+NJ%0Ple%nhK+(j^b<Gr(N?
z;aqIW at mc{8mn!ixgZK26PD*fx9%Yx+Y7c|-nolRZIP;s((*|xtT*GnJjl3U$99nIK
zaNB=xOQd$86*PB4Z!8`igcWc)ZHGB2_n=OQ&KLG-t6*s=RARS#9RMBT4pn at L+yG^8
zuL%3DU^alZPzkiQdc4D83%dUvd%-*^t3_dUW*<lzo<ybJ{NMyp=1z;6u1QUf)A#BI
zi(qU?Kq`9 at aJ}PDd5-sOJgI%2nE(vj4iFZP#B{(14GI;%WD*_RSrIV;$2HQ=U at QF#
zB0J=-ppd{gpMVK_f>m!I;3rsF0x83(<i0|ccg*lo+ElHrgAuzB1XfgQ%TzVHssUXI
zR}hl{>9eQ=1IkAa`g;7QXY!_8y9l(e!<m=?mM>@&1QmAy;!55sNvU*Qqt$2mre?!{
z`9BJPHJ?gRE at l|P(eA4l{xfYRkGd?;7;m7CyG<6S$13%4{Fu<INCaW1uS5sdfF})w
zcjomxI^Jlhkx-!qp|Ng=#*T!XWnF>c#MHin(w$tf6eV1$+j(Q1pvmU;6kCm|m(%j+
z)sNRRcoxdrwL;lhs$2e&m>JandWJMjbt~_1aN-6m`%)@I+x#vBq6PARZ at cxc0S#ox
zAtA5^KZ{%J{8!g6qBX}QygZ6=L{bpRUR+fe?#~U^;R;1j`bE+B2NkM-??~o at I{SnJ
zsBr7e3ARK(#;XiG8uSkyAVFmzSjd}drc=Q}kg*2(iV(U4c?Sai%XefG5G+`eARr{t
ztmGzu^z2?2%w62gZ5_*g%{ZvLx5&4LMecs|BC=(an=4R+C=Vqv%tA*f;)e7`Xs;9J
z;S+<GnF}Q4A#iB*cx=PxuyX+0naJ9=WoJBSGxC4KPEHTrQ$uq)@6%wI7kwN0hCy#3
zeGr^VbBeAl6vxP32H^hw>%)tS1Mw2xFpQe)|2DFFbG>vUD!ta^Sa9s=chFFBw-8^Z
zD at WSd=o4kjmjvvk%nDz at hLR!&!pPwSMH#e5RRxPjUO;xM`9kN(<s_+BZDT<N)EQR1
z4#6SRhly16Q2eNyOsok%&~DKKW24^df|G&0T6O<m3;g=mT2wz_ek$j^Sn?3TcYU+m
zsxRZhVnw(g{?hL~#^DG;X%bO|pdn^s-l(Ofa^MCJsMeatUprB)U=Y?7pg;B<pHb|h
z55D_8-V}v78rQCdK;efJ at w8w?yQf>P<W>$=jV%Jx+)?c)2^)u1lL8*O%eYBrA=@eI
ziiCPa4wjq%d9FTQGLi>0Y2=GK0+hu2sPU4|!-52CK%)gaV*!W(!fc96g1`V9ONp7=
zZ&^osN1j`a?F%EkowAqP(>d1Ir}(N_p`}aKFp|B_+-A5VM%WDbZ&1+g+Ven-)1bri
zyDq}Ax`nB(bBb6afw@;30i|IKgchj2wTt^(H{!VsfUY%|k;RINZBv<>{KM&$CHMj$
z`FYp5pBR0&7N}Vr`^Y=pGVM`lr`Bt%m^}kgHGLGE+)wf+g=$$eKW1*%BN)AJQCgU~
z?KT8pGyb+V2K#uw=&FYYmw29MaFtgk?wqj3_guH}5F!R<reEGN2ou=hXLDf!OM{~1
ze9Mf!fd)<LoS_-|2E at if<<Y<s$HXihY3bv5(xY_P*#d%MUO at u<CmN<}W>|=^khyjn
zqdGmlJe28?j?z1+fDZ8DjAXRfmLTe7pv&!oaI7LUw_9~sj!{gyi}N*HI0~dnisY at 9
z%V^m`tX#5&E8bWP5sohZ#}4)e`jYzxZxmo>QFvNM&;+Q|EB;f`7-CYTpsrZk!MbW&
z%A3gcbiO2xdc^%2t`I0rLUkx1LU498+O4ynq9TR1^I1U`Eu2gHw&A%x{V}wLeHaGU
zO4*W+t`k5b|McOILj2y^_7_SA5({WpT{_0XMznDv6kbI)yen9;B?pPdv_3!UVwk3a
zoU8I5kn^OUUL;+`?K%exoW=DImk>FeKDXMW!azg4%tIma!0;C at Z~du*ZU}YVtuSb#
z$7SX$gm)734?uUn62w56sR5d+C>sfkqurVVV*q=5h~H)_?<y88_DFL at 2M8^95$;Iz
z4yT0eq}tT{*c>B;1f9DrVxa-$xQ1V?Lmf7eYX73kEhTZye7>RNk6~gn?uCxdl){st
zTZ9F^)rAI-U}3|pJbO!1?5Oa`)Rur4a2<1e2hZf at Ffd0dU;_0Jrf~9YPgSjtYDJwT
zElIC&NSs^@mb6}i3AgXse?CTJ9E|pWR~9#yxt}b&A=$8NU<@pgmZj~dN at kG^@C>s1
zwVA;dL>kW8?ZQ!Tc1FZkhvk<1>i7XfhYLR9!SLy!X69G{+CgF490h`x^lIw)_|}t_
zJ3mgl*w2P<s~VDV2o86yt^$T7Fn&!G|Bl!*Z}iQa>%UH^$a9b>v<m1q_K55o|G918
zPEd~luz at +|WY}L#djxnq at _dQ{$m2KkR2DTeaf?4?=e0T&gduBweUwKU;6&DJ1b^)@
zZD6L0sx&zx(7jq>!MQUs`?N(i+{b(OOXErz=jC>?C~IlwO$$-o at G^pix{W1a at 08pz
zptp>p8033l2Z{{8$WK85O~wZ#M2}?<+?-kWm%Er;T6p4o*N}Zs#Ie_%LOQI0Dg4D!
zva74LWCyNF9)*T$N0cW;r}P)PWTjt-#h?gVL-tDX%wnJvVY%91CQg;<vL=`N*ipd?
z?&glT5Xc;Y?4P}s1Cv+m=k-H-n<`gn#;B0Jy|=+6=Y&{xb(3pEbz|NJZVNKo^Gg#?
zIzw()5PfxZw#1&8h~qWf7KH{7!6Jjk-Fhvr61T6UId02HnA7vT3vl8Xh*Hx$*i;On
zIWtur_z3f9_8>@+UcgND+=P40wq8tCce`RBHWFI|wG9a0wBpx#X#z#QL?vD`ga*z#
z&2++k)&lXQC~`|0V2So7vE<SOhr5Ll8uFo2?6j%JNQaM7WP+Fpc$M8UN7_wA5|;zw
zniw~huE-IH`v?yO1jYxq*+x_h6L<zw at L%~SF*QmjN4<$OIW>nQx0h4OwNV7ewN;>v
z^}|4KfC)fP64jC0dYab=v^}r?q#N0)u-V-!F}dwfuz^q*4ieMjn;|1s<I`ZO<RP)r
z$n*#hp%Zo+0@{POZHonM%@=OV0}cHP*^bRw3s^yR<xID;Wv;`7_EFoQmlG8ivl(gT
zUxc~<>~>fft3Pg^EQwGK0$lUB)_GsAusv+`9KX>@$<1OGHgmh5GcH at 0osjO-U5x-J
zMbe?nB^iv(DVDK0iKdsM#IUZzzf>vt_tL7(g3r!>{i2<Ta&*gkF6Sp`LoVmv4X)~H
zv5Ge;xAsU~gQBjzUM7Y3B+=Z%=pb at FzPf|FHtncm1=IAQrYOp8c3n)>+z~DgDV-^$
z at 6AOXk&lH%o_vIW);BO5YDaf8F<5Gvlc4H{*@B5#RX2O>5C{K9XO{k7fx8rgdp0sB
z9Lh+`jzI^JYACp6m6GIFH+^o9+Jjt-p3BC%shPt+!V-A_XAfj9-EY>`rFH#OHV6t;
z;id|^jKLY}!ksD{u*QbkCIrsV*Zc$wzW1<plYVt*yl4RoA4EDOsP6r?*aHO#4jFl1
zTt;Cxr}yB^T~k--%TVB}NqM!2Xe{&E3{p>hAPedswbSe=a_=2s9*-0}sAYW{Bb8#J
z*E8U?SdL)v%6&6gLAm$#i4pOfS<Yg8PJ0D+F#hZ~0By;Ysr;>svi)o{citNgEIr^y
zEMXe+_L-ZW)U%ur3Bx>{H{s(y&^wIvYBqT0h^~!%(>4Z2HqHT`m&Ro8Q3^mki-4~j
zQSwfT9H3f}$W&)lItUDu&N?DVANPVRQG2oOcvpgMIEAO}%~r+ZCA1FU!@a~bT#`JL
z4LRs(L?1BKiNrcmL?hF&({IJNZq5r*vZ`!UpT$G1DC|UuX?W7RgdfY_Cn6(SOHv<P
zz9D)3_EK#tI_JIYUMI%!xbb&FPP;&S_HJlbZqrN3iN5Jp=d0>Ci=oBPd at -h#k(mYe
zB3Pi6?LOdyqV}ABK{QpKcQm9608$F#ycmeZkS|kT=f*p;L{StqQyyaXZM7W!`Ud;c
z<>66N+>O(_Po|`Hayl5}Tv6p%j_B``E$0#LTh=hF at T>wt#HkK%Nk8rw^AxxC#f5cO
zWHe6+MRL<;A?hD^0%FFCH at s}7{NI3UnQP`(Vz1SQ?;0VsB*4ZfHN6~;Je6VqYS6CB
z$;7NHD&ETRSee~U{?RBD=kW`FiJoOlASmEVVqH1FJfhO6nc8{w at JXl(n>5tEc!Eu@
zemtz?thVsLDl3pTV_=0imf^p{56}zgee;yFZ*k7 at 0g+`)@z|svLLC1;Fwvrg3~7V{
zlYI|&{c+Z2Amqx&YgoKXE_ at w3jrK86h>Hhd=GzO;q&%Vf=0S9F|Fjw#_}F~t_$Ncy
zXvZx^=h%mBi;hDcy7H&@WuXE!N7n2`A8%!|2Or~1W9sWcqzIZ4uLy8(dT-b at Mn<iX
zlBlxalkhTPa{K1Gl^U22)KT$UB%<{m^-I^%j08`@3hIuHMs!7Or*75b!hicc>8I6z
zN%m~6M};nj;CWgo2j#QDT-zWCK5`=)?kTIB<D}@pbfNXzTu`m+VPezIf&x@}u2l)H
zx(}`6K6u;~iHz4wjEGBH`j<u_T)FT!B at RP@Ur^v_0&C;evOc&I$7(7jGp&kgj>V at k
zmUx!JH;kED7mvx6(|&MdiJmmDf0gNQRY7%!9PSY at aYZiB_d;$r{a^a0Nv`be at j>m|
zYS=OKLalXNao78oD|k&x!&ui+4fqAyqmi!@+VhGiRBX84DP_b2e_V`F)!=4Z>YmyA
zKzWH;V%g at Kd-za|Peq>VaLg*&x6lP(q7u#BoQ3SqL%5*%qBT#h2KPagx<~D<;5GyP
za$Q9LLKwH>E<_l`C(YO#nR9Il-&N!CdyX@}_VBw>MSS8m(Y7rFSo4Qz0SLC7mEh0w
zAoCNCg-nYMd`S*Vk1WyxTT6!=KF7dKs>HC0N1v<6- at -DEEMD+O&hMq6^Xbysi}w<T
z{+FyUn7N=zDW~M%c*60!J*Sb!UEhKcG11ROV0x at 3B6I?!_tYF6ta=jvvE!=6TqI5n
zVam><rL%rXZHnT0>NQNEH$!MRuOxX}%iny&Nh-I^?E4U#GM6M~{e0vJijWuPjyJoc
zHZGCY*0LcwzZudprc)%0zx9e0bT}nS0s?tJBO+;{VH-W%>iL7_2TOgj7oRbgTG at ob
z_h9n2Ns_~O(>-qDNyVlxP^tN!b|f}rYaM2H3L=b361Mh<Ln5O~1?AP0I&X9X^uTXR
zpPC%QCe*qv*KFP6*s4w0^9|B5@<L7Ixe(3lLKEd26w>n9j;TK9)T4f8jeGHu6OVnn
zp(Nbn`1v7FQ|^qRF8U^)41q^<4t-!a+D`{)wfEG1x1WJ`isvxKQ8w{{?v%3hjay*7
zo9nRGgzl`ebnEy at U|qdos%rpKi<==1ThW1^W~!67-6~5M;;d__r6CpYc$>4WzXK`M
zj~`BHm0)$;NJQ|vB<{1imA~y#<yI at v>=V$*9R_ijL7grjBOckCOhJ`>uV%(B=Nq_T
z8-X($Kwe5Rg<VJGXH_&xYg~>DHdz$)w3`ihGN;TT=$&!O;<1Wgf8XKbE#Si+)oF$i
z3ys3FpOWzXXrHz7eWrlhgYGc%Fs+x)>~S6PoUP|ok!3fsy-%PeX2Yv!Q8q0-^F)Dl
zd<kNjRvYx70DSPEAryVN%*LTf#k5r=e+B^D$wj)&w>A*8=cML0PsW;As}X!5YLFrd
zH|5{L%5+!nr at R)Iwx*h0T?Tb7na8h)q|I9M`PmMU%ck>tpUCLSNZoq&ro;X!nCY>m
z?3-kLbcFO?X+x%w=SAv=P#`{F0e>JQbK)-|#ltVjRv$V8`;N{o%(mC(9mPED#p|Mn
zUMu;tvbc*Fu`cxYQOoc@%^UyLVfm>g5F8XvnB)qVn6xY+kp}eKbd}lm at +E6t%=qv!
zfMNm9cwvs8obNW=kg&acoxxWL^g{1Gm|88`Ahqv=ss<Zlre&WXtn0am>Xv6+R#;4t
zaU<(*Ue*RYQzmgf?}sLesBm*oz<G$(GWLHmPum>#`T2H5kND;AheEcWoj&|r+FAJZ
zNLE_GCg|mF!&4M}X#WU6OuyDcb)*0UPdmAGeZ#1fs`crDw4D+z<w0xVh3C4zLd{-|
z=s=|u!n*Hg`CvH|S_Rsrg*p|Bi4;LM$B<v;a299RUsG5fU!*R$b?}31olj>|iFblm
zc*BBc9KbO(bl at oH9QTm#ysqi0^ii=49H<axQmY2qdmy$iuUnDbG-shcblSfp_w`Dn
zJ050&n_qYh0EV1V2&|)C&~HgoSG0g?_Mok{UvwDE0kEO;w)(g>nU5Jkc7wKP5W~w<
zH)58ZNOG^mvxjWZx(r4Cf&!F~@{LWNVrZjqMrj3@`1lJYoXiUkAa<Bt!%7;aWK-p9
z5{{zJ0d1`+^Zs?Xm%zPgQM{YwNNtTI)+P!CtSmz45L~61LPCWncedU`T{IJE0MFsD
z*&ww<VzX+Yob|X68(ImM$i6JVbX~ZJrr>>n8X0!c1LE at I&;LJ$^pNDf3A={(i=IuF
zMtaI;bUYJiX<V~*(gTQ;XUp_ECv0MxsOM5PzG#2XWL;ncMbvNenKWvJ-mGa<1+-Me
zh8Dz!XBSf|*xo9)mi26cl%W5ZKl}7NSN5fV!7FGg2hVD8=;Rr-@}k?fkeHQJi_U!+
z<2I6W5x;pD9HVWQ1 at KY1esx%_Yrejx;$?QU^P)~+!B$KPp=dJd88y@}yeUdi)#vm5
z&%SjWAJTVLL?RD0r2zjas}tj at KhL9|pR9yM)eeUw@(*EoNWBY400HUMSynjBE at tnD
z?D_w%4>*L`%sv0(KmIb%Zi!(Onv~mpfBf3ZpG@<qH9}jF{FxDQ(MgC_UfSU2GM+G=
zR8&sk-QhQ>4nTewyo0&04jnDM&k%bc;u{#Sj at oKgyoZ(E76xwqD7 at +|I7+FIp!)Z0
z?pU=9@%uzYP4{sEf`8IDsJcYkT#}1(;fjQTwZ5iMta_%;Ne8r99n7)63Tj2)wd6Y^
z873%4=^W14={KLdqhC>(NctaY(?+d?JED;CVN-;+I7lrrB&0FSQYGZ-1)3XP`NXiz
zpxxd1tMZ65*zV5XcypH|Fk=Z^CnOUgnG8g%j{jxbxpRz#7GgggsufEKuI|fmQ%;hD
zFr3aMIpRJ?#oU;S$<&vX6&DBQa4tF9E|^j6JmOY6$~g(l_S>xuhW$b(ZX8}zmxzp}
zn37pQ0su;tI|;J`4zmz}9GB*0L^utol>R%m(ebksI7?q*h1An*lIEMXEHb at LXhPH-
zMEY9?U0b$v-^EVLxThgaVjy6<Ywe-h`_`cCVo}FlNCKKr22I=#Y@`%tcb(jvX`E83
zE-VHt?Cf-2lhu7H-ssHr3~d04%#SWPV;01K(;fajzjQZel}wJF2ybL4SZD$osB>J5
zM_ymWEGE>;Cx2gkDJ5;{;7+US+<dVND8M?pONf-;&F<jzz%_sCaA-QEQy8n&>Nzym
z)T48%w-Nz`Xcya4`L^z)E6uMxoJ)_E&}o!wGnUq>n$R?cYHXT-Sd_Zx3?tyA)s?M=
zC<$E6^QooJh!aADO6dB%m{Mf6Z*Mk5QF;?op#wEHI)4pomfq*Rj_!dtpn*D14(78?
z%xOUkE-VMsE%G~!{+;Gmn*t!`&<T`bahdnEy$M1^?dguF?<lWsAzNU*yijzap`d?C
zLv at FC{1w$wezpC)$Q9eaRI?a7w at He>L`@@zkl!W?5SerPh+D|?K*ohK08ewLMCu6n
z9<8h!^1l~oeDD<Cr-|TJfk~8iGbfmfj)MSed$apoHmMBp$ihV-gkQ4f*_G8wquyt?
zu7v(@!y7J+#{&Jlm0<m36N>g7j#a9}`u-kzwwgk8*X~j#81ONFak)z9&hJa>xIM9<
zPkei0{g-tZ!nvvWgrK;07$18IR(R#g5xYEaB>771gB3kh*`hB(@Z^jp7?_@=F+G+)
zrsBnj^7uqkk1(Sv$iqH2YMoIasiX at 3v5P^tce3_i>ZhSpYU50=Dg}yzqi0JYJj)<W
z!ZgQ%yMO-DWH>>ktfeGq)_)(3FoT{>ahGmX({XMmU-CSrK(4)yi;HYn7O5sP91IZr
zCkAbqSDA6Uhq8HYLIe10&z|o5c?OMC5{WXf at 13Wp%B+zSzU`qxcUaH at bQS`tGOkJ*
zH>o3^YOPWsUr9+JwjGhuhV(+UA>k^HjPiMs)R|GHcV~jZL6+D`LCbH3Bu?vZppc|L
zC&y9jQUgHMI$4Bv!;C)28z1JPUt;H|sfPt#%Gm-$c;Seyt2>ydml|UxQ0ftHRZbP@
zi1P3-0F2heK2Kz1WLx+;3GQM5X_0(5WT=I(HelgGV=b5eeC}eRY5$^Zrla-H^aRzd
z-V2CUi(3|#Fp7^o&HR+)X;)y~Ic_!9&?kR}8(a!iw#^q=ku8g;X>}t1$xzATo|>uv
z&zxVm&JaP&W%ccv at d9{}dg7wtvGR3c+A6r#cit9Dy;pP}rSM0k7rLg5W&<uw!dufo
z_jFbUn-yUF%qe3{c6SizTU6oYi5Qy=RCTmrqQFh6qemFFl<6Z2JMdr)Tl=WGsy^l|
z`eTYKY`BBS0Efo}vG*7=^8l+q(98GAuY%9SUt}imqG;C>$Ks;X&f%WuCxzoL1rPh}
zKw?$G1O>i86l{Idcssfxnyh!z(A5_H0&l>U!x<W81StRlAgVm`RAz?CQ&?)&_-E*L
z6BlG8F^L_o&oeaSLdw?4LTpC at 5MI;p(vOg+v7;a-5XN;AH83abbCZv_-^L{-A81 at y
zihH*P{|%L;4#^Kv#eW#DmlY>*VH3>iOuwJd3T`c;UZ2cmt5s+2VY{-XP8}u;L(sFK
zIgW`qu|uGo2_z91wcAeDbcY#M49z+Vtx6U4xM&*kaeF_lEP$Z}U=vNqtM)#2l;*R2
zNnx>n0@^D?8O>D6lNs8?pM#2v^x^6V5tQ;VL_Ik;rRfJ(v)Q*%3@!g&wovrUTT_b>
z>Hv#6IVemNLm=wg8N3bm7Hz^)=M}p7e$^!%yNQWpSyjF<FIG1vS-+#!CxZrzyS^aO
zT|0GU$y9=sF;^=AWHTx#a`a6Tgv5p1Yo1C^l3&K!j|AMPh=g}_pHNU~fM at 12WOX~4
z7ySDYV6}!_xdQTgCT*2`yc!<yHa;ah-=VdYS_$~ZJ2 at onqx|%ZvFbW6oV52xWeC=B
zPY}4wh*tzH_u9jAdyOy=Apt-a%6camv!S$T6F&??+V)6mtwylQZ;!-X(_|cCtvgZX
z2hK`UXB%M*(gv0yIBz9O)@g`h$TQgjRtwRZ;W<WB^L(ug-$y%d=s8((tqEskI!Vbs
zT8Ss!OfA-&n9aV|yFOKVa012I)W({W56?BPVW_av4W^GZ6cy*eBEqhqLU1MbnmSOE
zKJHU59b)K6IB9*py&50;{cE!USuZ(O?(NHdCx<`jW)CgFs`zwn>8G6KFs8BCB=S^b
z5pLNdqBwmD4C5tRgMHm283}9i?QA!mfHy8Z^oa7Rs(S5*wvLo4!?IUJ_oMuExo)cC
zqzOA?R{0f%tPVS^60pp7?9Qpe+x4>)oyo at yS>XMpSCLpfV={-O<H;b-a at AL>iWLpH
z<P|ZzHOZmlon&q`n}B9{r4sBO6x}&*%ar*&*w$8DGVayf3dXEn<@ygF=yS_8&<ti^
z1Z+#U%!*HD(?BY2hn4>^qUd*ET*E0iL9J(MBNC-4h9%XPB4^R`S#&vX^K3}Qc(^{z
z3B|yDaC&U8H$6?T at b{{W^+t$!G`nP_7EHR_zg{LYSmRHAb_f=+>Jw7R<l`}F73C1x
zVab}9`OVQ3rkD+uNM0N+iTvuXgM7Gh9b$Yc5x*(}kjx(Q?&Jw2$l!HmIS5n54P4yE
z at o*%jB?aNTenDvpf3KY$<$n^Ue!>}Re>R>=fLszcXHV5jODJ00gqAH&a&nE$K{kmQ
zfV^$LEA4~yM=DTMM#NC#iMF(01uwf at pl%LpKLjDNPs%n|gYYvGJIdtXW3P#LFMb#X
z30WTvey2EVQA?z|L+puRr!DL}lwjh1ijFDWsGVw#y(@HPPdX4Fi`1JPF(|&ar~GG4
z?c7G)5w+aED!ThCykD79bh2Qq`D7UzYsrVeSG>)!$^qe at E5v7)A^`LC$OoZBO~nGu
zWxQse(IfFBcZI_J at 6bD~?~nqd^?IFD;rx~wY+-LGT-+3IX3Pr=B+^AdD{S=YBPdsG
zDdQ4Orq^4wwg)9zKz27(7U^JPbqU`SP$gfme#FiEC+H&**gbza0dt!$6}(o%ZK5~;
z(LK<C-}NJ0o2s*$1i%LKt!fA#J at 6X(bb^O~_ttkvH0k=+EOx=i^-!$k6^R{;`Dgu(
z7Fz%mW(;lTyZyK*O26+b)v*OM4ZdzD6DxzAv<tWmQ$0xY at 21JltPFr&%MbTxd;CG+
z6ukJ#?hgflG{t^$#{54UT9`PUzj8|EJ%7U02C_`1IYTy&#mvX8T^%5W)ExGTjml0C
zfYm;2%24<>Z^2j2(sY79g4|$ofc24qt}K@;<(AbTjsL&AZ8x|X^sX at uD`?tp>Lo&A
zll|C4{@|6{_fDy{WhaN%?f82PDpt%jx-<nDnbIIHahc+9o;R|+YZHFMPZwK}hy$|s
z`#%$qAxq+-Jq)zob+E5D#Za>68zWLYm@`D#LA`*dG(0hqPle$M=aKdpg=f<QgYsoH
zq at AnwJxjcoL6{9?aH*9_Rs=EU3Z~a*%&jES!VQP_`Gh=N{Ku4W<@ZL80`H<0o_f%!
zoSu??`}ghe%UO8uEDYdX7}rX9VJ`S~Pe!}5p_aTJe=Ot3<s at 2_YxmzgB*aL{sZftE
z$GD^M1?qSxg4G>As9lZvsyYQaomVIUdJph7^nSDXtg6e7Ypq!U$tH<a at Oex4P)>}0
zgwK>M(b+C9g``D4n|H`|@RK8WpQa3vk00Ewxf_d88BtN1 at Fg?W%2v-hO;x-n^<b~*
z>H$W=oz?s_JGNUL|I?jOW41~Y80X*2tc~VTHSEz4hoLx0aDB$egtg31w^othS*FmC
zsX$Y^EoOL!SZ5?6{r+bo!6<(kexDkO(l_Ju!i%ET+z?t8nbyD at pk}+*5n=-hEPJU5
zgYGdUA`)JCXnkX`YyD9x*pWDQ at 7O2>t{}W7lkKyySYJ(Xi-FO>-+AcmYJcgpQlx%P
zD3lqRSACIj4Wu7*F5Z|hbLno@?e1fl9 at Ml*a7Z)*I5Bl5Odc$SwLEYNK~PYyuWxqC
z^c7J3F{I7*^BMpAELuMV*&Fs(9V+cQHnUf0TR7I at uJ~XLFSf&McKH at xI6gS+OpAy9
zIVg4JdfJXkr8sf*AcF*d74r4a at LcSZ7;rcYuF$CVLp80ev_hR0zahFkpEhf(`Aizg
zf}daM3DLe9A4%F{69Pr{>6tqe*U<3UPL#lOI~61t*i7jK_r=sNHihJZK}Tfz(32`F
zWQ%<l)`*sAk6-~jIKN3o8^EouBJ$j=s>V+rUXO=5z-3|;`IqRrT+<npoN_>1QQl;?
zbJ;ujqzUFahr5zcvk2yqLZg6VGIjekr1)_l*lU4nAaTt>b*8)#|NhKN7uRfc>61xh
zd;sy*<%eCOiNHyX2`O^WXhk?G2vLwCo4nM0SCW6pZ*Q(T88N5FVz%-NXXP>qlT5|-
z>>XR2%GAkxxC7sLR`X{BOsv=hv_`C(b3b5p9;W`^)!70^`~-FpXEhF{bWe at Ia0}ks
za}79E2&P?*9Y%5zO!M55bx4&93$bZ~QtH37(LTkby#|1nB=wi}i}Bt02>F(n_lUF#
zlS&;1qODzQGNQD<--zkZmD{5;D~!X3MCgN3E&BxWG3T7Yzko09qL54nk)=hQLkQqd
zb at A(t^O5MP1snXKb*1|Q{-A9lxEAPFsbJ?)XR8&Et*{m+L*%7ePbxmjqxQ6{p(ItS
znm}cz3gWp0>rkyXK9Sbri(XU7M=i0oGmZ&FIX+;%%F^eor~1`jf1tW5T;b*L>GPcG
z_g>FrkZJCAw7K}vLX?l-^ow?YFE!-32M7&qxd6oN2tjrUm|zOuVX{8;!dgxo5MyLs
zBdN at eKT_SWYW^gAL)vE8+7!r8C(MjMZW&}R94+TWjCtn$W~dpBymF`~IEw`S3>CKd
ztiy at ff@2b2T|?i71}hahWrnF+1QcF6a*XKgf%7nnvtpWlm|PjLExjUzPjay_)u!{%
zGw>y+1G$=zfJP_4aPeH_g_?Ml at Y`k>^bK>ghUmOnv3wm)Mln(~oY~E`DbJ9%<*s`m
zm?(xl)8FVYC6t`w!`&H1lR*ZODSe<Ds|*{@ysv8kRhoFN#(Yo+N;~q{1_)K#j;@9|
zR*YnUf>zfM-$iLGVuN}`R|XPpp<|GZ+}V3L&KdkDu?~T%s~InB=Hj<D<%qP(&)R9^
zb|oaqoH-xFKN(1F7)PzNtYah4d$aq$qa>op>rx81>>EW`{w7zPW82+?wH$t~#y>b=
z2AIh*t#+3rJCgXM at ov?7O$>KI;jhmXK?S^k3 at OZ*9*TDi!IYiotE^NcMk2$0!m24~
zsrO)M`o=)<+P|Zas-3-Vz?YK6>V~q)Am3XW>9?i^=bEiYWgYNeL9Ab_#f>o=223nk
zHJZ8(*(9byp2mZ(YAWtX5K*E;%ZtFoR)_X#3Q~&YR!w^Z5g{W!UX?re_<yrPo5bjK
ztM#wTDd<DOkP*oQhEso|<|a7++WcMoI%6M^dT<zCs`Q+v`{Su_0V(5me<jW)H{3jR
zfgqP{M7v+SPEE(R()2`Fq?=qydyHRDehN%#8x@==H at d<B&$_cO^Q#Gt#i8vF=>q1V
z_z1qbk-{wexGX<=w5icIb&q{AIrO@^<h^*Hn{^kz0CwRS2}#y)Z+p}BYkZD`ZkAe{
z%_ZI7HU?oT{yjpbBwSlX(KRCTX!YL8sU at hab-~XplQG?P%0%<oD4#rDgz!lNBuu?z
zn6&foV9e?~CE2^{!|cjnm;CA`?s{C9G5!cwt?e|Qu;#6|Xp0d#z5lqtYS_!=ba0Zz
zx2+zY;0K!ty0lq|JMz)BlCfNLbX9TfLHO`LJZP<<8}j&Ek`ic$L5+lh!<d1&`d=g=
z94*N7^ysR=z<JC>gjDZW4Lg*1;?6;@k(N0KV!sFO0Gi*Qdb`H6<Pb5+e)Tj*Og@#$
zm}$pd?9|`v^ac*9k>{voOA^>?ZhzjP*S+6Kw>8EE2fCLdi7QQKjzEXzcs{Ni%CfR8
z(4Z?K=o)vmv;?I6c at mzV3e2!tW$&jd+^QKaw|(+=l9tU`;tMW)@LP at F1)b->f<4Q)
zGe#N<hj*ZjM>UjXNOnRg=-73sU`#wBm7!ITX5kGyvrFc&Dn=z67gE=g3BclsSN=XH
z?Q)fB?lFcA7swPw0xijeHx)?*jOp$Yye7qy_7)xm@${WDz4EP3=@y7V4FVa|pIV|@
zlXuCpv;o=2Rv(75VAU<wPolt;m0FZh8hd^D at saPO9iV%8(PtuC$|RiB5{OFF*n=!m
z$ltFAYta6Lsvm8~D$RP`^0|)BIg5c>sqbAJdCO$MIQh at DH4zp+AHRb0LN11NZQrrb
zX0+b at B1n-T3)1?AEY3B*jyzXwn&#N|Utx<^qJmw~^HGH?Eg)rRLDm~OF%>nzSUm>-
zITN2FwCv8p{3l=s;qa~fa;%SA%{l6Pp|7<y9nm-On6+lV&D_VI_LP-l(d^m at z=RVl
zG#h`DPJqL()`HbHO$#ljAmx59^vo+_R5kW(YDmas!K~efWf at +G)x?mIjshjqPC*6D
z?BSv4*;5=N;nZ23TLTa5v{@uxJ1_u8K)Anxm5eS_cz{8e>1Wn((6x%Lgj|64uqVK-
zd6ubyCA-Ge+&#27L%a++>Ogwdf5jt9(veZ^VG>&!(DcLBcMiKi&!a{<g3pMGC#k=m
zSlw#QefK_=Kd5n-=h9omDuwwRr&x|>DD9WNkVO&Yx=wb!*nPxWeq at 0J5PLEKY|zhX
zJ2gcKO at GXg1~h#a%#blvX}mdV;51}%&eoIS&#U~l9R-$lA=Uzd77L%&3*$knWbZ=Y
zJOS9ksuDYB1`$%fSJ%h##kRPM{l&9P$p=;#+ZtN^Un*>Z)EU<DplRL|nv*0z(IX=}
z>koXBeT=d at EH(WiTY+TYDnGqyxJ1VTg+Hz8bgnQS_$^C_LmWN|+pVhx8VNuCQY5Yg
z9le^b;hXQQf?vD0scyR-Yx|lI;^u at J%`0+X=%hrdiWZX at ir5Qfwb|aYd*r;Q#Q at UF
z*nW*8K=t2JAPV at GeEP?Apw8?&HPyb`cjBb64jt89LF*~(W<)YXC~tCk20 at 1IwiF55
zpZKp8t-`5~#)bc3&lVnAM#3Qf%%-3zYcAr=Vn{tn at JQjhTsOo6{$?V93t35|Mri_V
ziVJ8F@~jR!GA<}RcKY<~ez4_-3=K}?aqnUf&=Zj77^u7|3LNA6vKV9K*&3*>5hnmv
zmI2zT53zQ&s~AZVTLuG+b?&4u8DwySef9ng>V$3oWf3K9Iz-&FGqMe8teySPQ7CxL
zjhk^|XGf-$9hQ<&%4-t`F&SrB>T$aknIC2u&@O#-XK<6&;;ihSWw!3{hpxx4JPNpu
zy{yHw>v|=vBx)nV7dKFsqPd81^?)jU$JOQum>ZfAzgjfxM-J at T^o3P4IqTqsF|Sxr
z!bj{(eyQ^InSO$>Py0a43}_n%T&i6YCMVI*0fVleP8Frywu7dTWX0)Pfp0%<S2<!s
z97PK!t3<@K+y@(|LM)x4eAKl!r($uPp7cneA;jho$7)mFu$e*XlyKjss7A2dgi(9f
ziR3v5J9~!b18EQ23Acjun%<d at a?aALJ#rvx-6D7bd^!4(jo^=zV*uAE at V;ZUBXfB~
zIx*rnyj`*!ZYG7L$0~JY8cb5vhCt4Hs(?vCx{vBD8>Bv4g6G2tm~BqM$61 at hm3_2J
zg&P%v at u48$bt&B6*y;RNE=b9fo7Aia at lDD|^JsI(rHPJi;=-mJ%H<>s6HnWVGqZ at X
zMpORA&ZdT}ff?*!DyZT+lCX$m<YfP&j$2rGkWu6-jS~&!;)-jO6+_%$Mi*kW)gYBv
zECj;~He=xSd<d4<WTt)s<@x~q?~fOWPP*zO1I~sS>O<Gx$+FR9zK&pKVmP90Qn_?+
z16Zy^SzLf#>00j=c_Wi!+uMK9*p*v-d})cP?tor(sgq0t)`xMCoe5DO-J4Xza@&_}
z5FS~nMwfay0^?!w2;)x5|5!_h>^V#f8vGsb-c`_Ozvl|swilkmo4;<)D|-py&aXGN
z%NOOJZX{7A={!pHMQ%^Cgz7=^^X{inWrzW5kk=_DkTW3_K+v7%L>VbDck<)hi4DQV
zS3J+o1vcj1`?lE$ACesRc<;jU#){$_oemA(ac8UaLKns?0J?o&!4}Qc9`WTMZ1h$J
zG;7n&JPJO8ojJ4RN7veMJ3c|!Fw1!KEHivk>7-yZV-<kC at n`PztMx{NrJEkKpQvmc
zlIu7CIc<Iv?{%SuFv0`xh^ASPK$)H}9YkQsuQVNF2d}<s0LqM-V6VqB5Tk8a${axp
z5t3!Pcz_94yKKM*u2Vp*+9~tfnHr(EKmu`9M+-^h2IY)andFyE7O5D<(PjJ*wLKUE
z{B5p~B$C*dv*&g~6$87-4tvU8o%TIq{fVwfs$|*Ftm}27N>h0zG^6So&V9UA_>k^?
z-W6AI#%Wy_HGooS1cQ~2oUDpHZ?zM-ksD;LuqmR?h~D4C0@?}Lj^}HC!;Krh7eKc!
z%TB!50(<_Sda#JBf20rrPmzJ<^Yp?j33^WfEmThf(#mxtZa8fyabcSn<Oq6r-oM)2
zFoHCv^)B^J!Df<fo&*j+v9zcfVTpYU{WAv=sXZ4BFTlpwds`0NDzu9cI*0?*+c)qU
zkG0A6py`1_{d>~xL2^BB{vbQcw#JT|r-UvssstonKQsR at CXg4xfk#W#a at c!T4id$*
ziyYcX@}I9T at lv|T^9(v|Mh^i0vwcHDj_uQ#aM^{pEk%KoK&}A;JCCK>uk%MCRUNZ`
z^Hum at Tgqv{wbOBlPg7P3oWBa}lArjiE#ze=jNEmsq$d9RbNlr<*W2`o-Aoqpr+ at 4_
z<MI%cCtt6A{;uhrs6j*g9_aK)WL%z7aa96ZQeIF^cc*%||DJ{wP&z0dV6|<GSECya
zc~8rfGSPqdnDOkuBwPIi=PQ|nPC4Z(tTCDx3e<<3nzW$f4*^xLIG2t6r*(Kt<Bq(t
z_kn43<k<;%9j{rItAF~U^UU<MI at O9#Q|g9``(w{tQPYRm>ou6*kNr?+2oZV;mL2a=
zQiD*r+UUH=yP50W6rKI(84}PNZ{E0(DeRdRHU{XWyno{(r{BICHmzfftw$4BCv_i_
z6l&S&ftkg5KY!3!^4>tP-K%6uFmV}AE96!lAw_E4ZJ0X&EiA);=czIqQad=0gt(t{
zUDhrl>w(RS^iO;w_Vx}VSEbxTa)fS#0}8>O!a`DvfMouQm5S0%CoR*Ab!zY>&{9Jk
z_B&<>>TAwZ*E%d1U#~6g1%`J<qR<cO4ibLNKF9eN`<~)vZpx>EaCT|3Vex)8i&@LV
z{NBU3Uc5&qqrH{CmnG!O at NAkQ1HH^ynKhRVI|o+dIrjbJRWGITwJT|M!Y^I;lXr_P
za1sQ(AP~4&Fq*|G{{)B|e*n(E(al=Hb%gS_Rb{=H#Q>7k0?lgF0@`o-l|G%BUt7xC
z^IL7 at _2I*jJyiuRf))Hq1gG1j2_QUw=0tgLq2S%uJI8n6c~UyI<?1RcmGpiRwG4mL
zNb{B$SZfdsKdWx!g$H|GIw7zkrpu7tky;a;bZRe!Zyj)+M|T-Scs2pL3S*g-(j1M_
zr`rz-*^(4Xc|u2qB5fc?p#TOqhH)j)?QkF!O($bb(ZcY{Cuh+_n2AE9>%L&VzbKOx
zxv7OfoZQ_Cxs2O`vrjB2_xbm>j6!q&E*I at Dv!@HoXSXaHfiF#s!<Wy7jC#0WIg=ZP
zXLD(g3Xh*1M(b9=FWPy2$h5fUXX1P?_T<56tMDj at 5D%{Grz?9c^$}IKmM|TMx>#>_
zj_4Qm1`4bGY<BXR?fA^6)meLQ&I>B1Wa~Lp6F?oNof(<qsIhk0ZsKgT%gU*Ljt`u~
z%KKZiS?;vSf3a0p%UWJ*wgSM{;?!q;l20PSESct8tFKy>?QDT`7=!*nOqO%Av|rm{
z<S>U6pmTbvq?A4&!X{gSt}uR_p|&(X`(KaFSgTwa`9(1utp-(gvC0BgaLI*i#lPqw
zh~H;8hbA=Db~YdgmRNh?f1CI^NXWJ36QKHLUm|QXN at UY;yjDBd1gmYAq%qOI{2A>_
zj6A=iSJ<uWnciFoH<720>7eL%Cq!}h0v*%RDR(4R-psPRW8#w;K+XF&yX!uxK{o1W
zId5}W#MUQ2>KfxDfhK8pq at cBWUsnu9<xy{IZ!`gBVp)m<pq7M9@!M1SL1X6DXc95@
z!FR(>O?%%p`Et1~U8{8 at MBjWMj7Gm!*(at?s!zffWcmgey|?}&j*E;yB_SPjn-(S~
z*EdxpO&yqb?=;F(MO}F%d2!tY6}CI4 at bZ%aB0?yx at 5!Z--87qC&N4?5OY1}98wwF{
zsYjFu%a>{u&WI|ogt<W(Y+OBpelAT;xr*eJ<}#ItRp~*s{zlrInvF9%gd#k0H0A`A
zro7+0h~IbMm1b!UiBXW$%tGjkL&zN!O>xD9=z^+pgpbN((M#Iw=E>_|CCk?x at e22u
zW}7#^Z?Kq2Yy=4TT)t)-!4{*NURj5D0&hNelv_8Y>kz;f74Rz;UypqIbnnvi5*~xv
ztq^yrXC!)gtT~|jl_VD;^Pfn{)d`n}AT&c}6g~Hyq##zfna at 8Rs@O!ShjR5`631S&
z-%v%2>u_`htv0V%{S5*%Xd}5s7IDbpQ5H&IU=NgOMt^}IzM)?|86z1!_c-?%SI+-c
zFFfkwg$~qt=F(Jf6?MHH3_^QkUC%r*pRw876pp`MFLMT2{@3_d4EukV*U^c;y!0M!
zAHuFDrhzuNA2xeY0`KozO`2NF^DVDZ3KXJ=3J71do7ZWJc(&YE=O}adr%+llo6ys2
z<w7cSj^1eV5Jt{B0Ba~87KGb!C4t#d?l&|NFF{h%kyM!T@~Tx0)6D81MH4s4eU7zB
zr32NACfyh<7ffFNNo=XRx at zjEGJyXc*mC<o`1@;`Uvd4ts<Dj>zJf}d^7y9mm*0DR
zwcg+p?J0kGlYwfvcJH&TrFz^b-s)|JIUR*GBjL3x6zSY4a;q^IA;ty|3J-(Oy?{aa
zCFX~KmxO*qoWdXTEYD)7i2_lvlR}}g9i%jp8j2M<`zc~JP<hxQl53#9Ox$a>6{QMG
zPEpGl7QDVqB=2-3-=oC|0OB(v1aD-sM}n$nP6+x!)OqTK)DG?XHm*y_%Xxbjb&|n_
zoCo<%tp^=dQSDJ?q^)|W?SemfW5jgBXDeu7E2VEl9|8GP;~)uq4tRi`_4?dPYuL1!
zcW;Zs_zu*9VEdfIzD~-Q2bmr<--H_(6dk3hPo<X~ZiKCo+hi9D%y>x0NMkuW#222~
zNq0|1<uhVvCB at 6i8(xhH{M-2UM%l~oI33RT6xOj8MxfgAw5tm~pp(7L7&;Yn{Rwkt
zlWz$3kuY-PpeZb(ODm?6z<*l|))>R|UW_hhWIrX29D-oxoO^(pu4X8^;%~sTA_#Pv
zK|fwWmmFiovG~M6=f6jL19G=nS{B#k^A}8SuePe7G*eMb7~vG}j7K-!7ckbKfTSBk
z)$ETq<7i~9JL^r90hL{om}^mZ#>9ZBmQ(K9Oz`zXI+xF1^LF5|_R)KI>Ood4pz*hn
z_KSGuvq4<UAZH1L`9IcPQP_O9R5)e_$C?cwjMv?mBqU48qp%0g4L;iwPeqDBEm$Zr
zVOA^(RtGg5aj3y!OO~JBNo#HFYgro?GM9N>8$-^K>Gg=C)dJ8Uki0=N;6O^G%E7mr
zN2Fjpdt at nY$y8}Nn+zP2dfJPk3A+DKpk+h#9Kr?xLzpT2!o@!vu=q0T{*fi8ukT!c
z>{34+<M&xMa`w^0?uW5Htc9;0s$Ls at FTSexN{s5nlMA7oh};mRhIzSbS}U;@Hpr<I
zxwLNgjY|0<To&%KmMjyk-dbuD*T?+%sgT{F{L|h05fEV9hYpc55}|G72Q*lGD at zv~
z?wmD2XNep~E0S1EaLc at Qm=^hrK195`P&qG+T|s64OtX!{wDk1$3KV<e(~0nxEq&^=
z7RswFf at U+SW>%5vaSdVPC<eL6;M*Q>FJ^(Hl9_)i%t1Qj*p#5}=XAID02w4qF&Icd
z>U)omJaX^K;&|1-5CD>K<pZery6|6>jIJ~*DRs};*-oO4KZ1L<|3jWTD}-ZT$Um at U
zP8--rzN=y(imhdHf6Jii8gM{tiu$#gemsN;{=b)Mw0wvX;Tz4q%j{*}wBnEySC|Mt
zA74LCdH1V`eM<@C6bnnmwXH20XDOkbC~w|bs^63xYFht4ZrdjGTm&3#RHbjA at Ma$6
zUP>cQHCw>RSM$ix8+}Z)#jx$)%<1|0*P1WyLuG{(l{zaafH|2TRerbBp;H=06h8*^
zdE{f;H$=<ya#~1CD94wvdtHC(xz0<5Ilc#xOjU6cMl|Q%o1Vs*`qOLdgV(r#N$bSP
zFHfg&jt?m*oOT-R2tsRX?1FuRVER1T)6Z-}vn;r6+PK*slHyR)+oAh>fQn4YuCp_v
zs9W{FL2P9!`FK9t+!#-&TDkkNoK2KjoO~$hrn8%6e&NDwEV8!2(UZA&?FwL)X7zz=
zF0MMK_HQLFL^f5sTp1|sD#rt=+Gi%8Ql%HYslF^Pev#G7pX{OGyHIC3FH0#0-Jl)E
z!+<nMlLWT}Zj4`iNY?M$<WMk|74N?o>A8-%#dxV?w5z38AdmK^j at z5dYi}96QxLt_
z9k2oC9Av!PA%SB12#$l$&k}7kNuU_1Ysisxu%hLWG4`Fn79T-WWE;r~P=&JnQ!0!b
zG at e2^7GK*bq2Q29Kdn4ARVkC|qQz&%`Fa@#7<;`9;`%PG5}6#z-#cIOz0IVwt#}if
zw-GS8sHRrn`#^O!r5N^(tW;RLPkI(Ka;l0LC$C_MCm!0*Lf-SPECt&pN?ogbmn2WG
z+DqW}$@Fbl0)#KI=qPb=C~1Tp|AmU{F+c)uEcIZLWbZhZ#A<Nfw92s5cpzGe at W(F@
zgbIQC1Y)=X&A#-|ysG?da*X4&Y^tvGu8FYJ9R-g!Fn}FC-z?`FN+JZ}LLZAVm~I07
zv7GUj0EHe=9=D&^@80-r9<jrli6`;jB{rUEP$qX;IO~Q_(U&)NBtfki9SIV3trEXj
zt5*0^1>aZC6D5`SbhsG!-_=1<lrHIO_>}lxt|B<Yxwt3Y$boIJ?f{dMt6-SyIzVLW
zq@(7(EwM0M^Qk$kDPl<_LqE}tc=CDg^8S$xqNNo;n*P at q$e=cQ`q+fAxm^B{_t|iw
zTQyJ*#4FrK-8-?^5P%5pQEXi)$y->>jb(j-K79|8PG)HeAIsRVYJi1MIfcXk3{q$n
zEe)P~#LM$EIX83;1}?+2-V at t@a*<p<c^MjD7l)mz?gPEcOtc at rcUsJf14tOC(`%Cw
z^T<|6taIKCBsCLhyv~H}D at W(<;!PeKOG+)Lek;!xF|*nsBK|Fm_+jQKm{B0Q^=Sro
z`ViA(e^pS1HCf5FSh~G2UAjS)&k at vChtuE)MjUK?pLN*YcW8jXuhbKSB9TfaoM3{H
zXemr&6}fUjxPt!m=-w at D0rur)p*c2JnA-cP9a!+XeDCpx00N%`Cnw-Y)w?5cNKxX7
zLIpETv!hwJr3A~NSJHt&ES0tS*xXP?4O}I;Myl at -8V-@JIN at +2&#H<-?Y=4yM*Dqg
zj;9Nqn;b1VkriPLT1EQ!UKVE(^TIcpMvNASGF6Xmo$Wlqa2!0<i2>-CU#Td(KSclR
z{7)f`Eq07w2g#%Y`)niCOIhgDe7U~&t+S=tG-GV$RXvK);M>fzU^&_?_iO)EcE=U(
z*mc9 at rg33-ATtLfaE&ew3e>s+Rc;{tGjXdI#dx6{qRU!OoPjwfsKhJF(@6^|2Ywk$
zm36z>FTqGVV6zbX^Zr&2%_dT=i8CPPy_h`wTKyG`hy;S1dWU3$s_TK*QD4JLLuR4c
z1Jb0jxGYQ+mbiiJ_MhtP#XM6RpMM}So4rNcqUgMxD at 8OAMF61H)MVfMq7W)w7|awm
zswxz|?somp?1n-ktVH18iu|JLF=z>6qye7gOGbsPDJmq7<;*q!9dNV^#oYfF_!f7#
zv2fkqLe*6kho`n1d1tBvpt2Uw%<RfR|2nY0 at I^SVe8rh$&Yw6i0(lYk(y^E%Fz4JV
zC9Z~&ZZUsNXWu;FM|Ly5Z~gAc_DD`4L<>vEZGm<tY=lruOoWCZBf?|IXdiF!!9Dgk
z9Q-57eoJiahn{-a34V)jW7lu2Ngk?-;>~9dIwZduZvgW}tx<gwDP)SD`5RX&tZOm~
z*Nq;|IST?LcCs1|qXH=0aHkHaXa=@(NnRU9$Hn;}?)2F66zd{HE}8A(zn-K*KPVj8
zuiwYmQMArL_T?mxGQT$Nd7!*g7Y8ITfop6br!X1eM#qbY!!6|X29&){imKhoxaEPl
z=Py(c(|NDKf$z&>UGFFv0zf~vFUAg=gjJKofy2-xTlr<bFeWGN=db7MPw3w{cptfe
z(Ulwqx}ODTaFkLcZ+0&cWZBFrDbao|70%*s<lhNKdw!F^_gbL%pxXuED>O+iiUFz>
z#vrE#lpCY=8`z4vT!a=7uzTC$j76|etj;z_e}SWGCt8x-&vYa+WDJC|mR1yts0zO)
z$cO!CS(5_)LiIF#Nm}(gEUf;|R=cExMi_XT{usZg(i7_WIMGAA7DS|CRSGyih|{We
zerGj8`j3wJF0jJUo~Cn#G5Q(B{7{jHj~mnP8i$#E1Rb4e(*1Ec6O3N}w{e8KM&TnS
zLy0CH_Et3|$)mf#5>X|`NlDhAx1lh`k^AA0#eA8!bzD{Fea}xJ;8Rf<4X+49t7l21
zBAw82PHgPN=tHYF;G1OYTqL4&Y5aW{{%6UI at 97p<06krkdcq<85av_Us_Cd70UaB3
zs|%(r&<SV|7F8623@@fq at _m#GPilQdzty*sZAB^s_%(|&*|;*lXJ0i8K!fd6Jkcgy
z8OlTN(mHT$eHknHhKBw2PI4uSr#*3q+;>KZIF%0GC)fu>3ZXP}crQzVkPNF~XtS=<
zYFSVq|BuVz08d0nJWXGqcn7MCJMAIe->%??qVcM=MJYkmA9{cS8DL8(@g-rG<rYno
z(jy+oLiEa3{$u6wgG-g}XD{9=yVb)pqq=4eqa?7DS<wa=Z~sk->3h1D0`Mg?9v(7a
z)JOoL=xM{O59kG#8sq at iBp#HbR#D$MjD+CQq*Tynu=z`aJ!c6dmt$r3$D*~+N^W7L
zrZt5LRb!~WH^(4oSjnOtt~A3BGsjYmVPw{8J)=Rt)?+?XBSfBRrK8zII&$z(sd&*L
zHYm!YI7bLZg{98nm~m<Qi-j-FN28EvGu!|gEE-82r}=?9b8p!VTLGf`3I1j)$Q+ZS
z314FvNiZNM at _%UfI{&{wSWi6}n@|;U-Farbd}^Ey<!oF%L^On=sU^@7Ce+}+V~`#_
zP5BB&5FG>U??CKU&J3R%Bf8Z+V;`J52)I=~nh}g!M|eKh%~s*5rzq$ZU}|TP8=fF;
z7nr-<0AKv<<kc^rBlf{!x^nRDY=G&Oz}Tx>s3O>-fWTijBgV9yNy%cGgO-Xl{y7R-
zOb}Y+nA0orR#b!eO<jQtov<_9ZwfxmmB86*1e^^LYxbe4Jwu_Qw65VXGk+1TQO5<L
zWx3){2gkVT#y+=MXdHG}+M7dQf)H(`S3~{ih1n^9%v9sFH-SLt*_zX8D8ULOwX$Qm
z^T<0H^&mj`Jy<rAQop at IcrF=tZtaih90A)fhu4oX)i^H;Az5qEA^gvU0=g`(=w`L2
zLMP!3fWENpr<e>N8_+ at 4E^09uKds!J00rAn^S9|)Sd~EFFF<wN!S^_`fsR*{Sy9}h
zSCU;`L^gW1i?2>G at d!nAQs2mgaGvNb2l|o#7zCGqKKVF^&qTue=K3!+XG(gDMhCe4
z#OV<{i;R7$j-S{KXMM-T3Rz^#m<+$$leLt^h_ATVX`9`j3r~fnT8>gBib=;0XLnWO
zr4+cjAB%|%>2(PY5U$ZRRcT2V6}<j at c0IbtYT>c*CmHo_)VNuCY8Ir5;laC$t{LHM
ze0toD)mhEoaIQtXvIB#t-3Oo2iby?*>S{#ogR))9T{AWe%;X~5 at fD_yxJ)3WK_NEf
zr%3QeY*lIl`adpb&=UFACmy;6?PDwA9Rpe|nFDcKjIunVI{Z>RWQ+oZPDf^3<CQCF
z_cWPB-|ZmTmbCa5rds7CuxXW^f(|Y at f8{4>X*BV$Jz(JY`8eN(lar;tc>0Ufy&1j%
zb|n4|EsB!BMrb_8_{y=>^F+%3F6J$@-F3QHi1z5e&2NL3sjU&+^*3wH+cA$!xF2jC
zvqssm->51+p4(uA>ncooa*x7~1fHhMOQ9iulHlKG5nNz#Jr}h&>M1|<wM2TO!=Bft
zKlUh1HTCMQApSSKwu6;gC?Q~Xwtn|41=|L1p(@n>)uXmGj8fko2ALKa7feAm5Cr=u
za(CWY at 3Hz_>RG at 8P|)(R>I#!79R;@8b|)pO`2~xc`?fdHA@*=fBZPcl8<AHy-1D}A
z+HEJRx-WiJKmw-qQ4nA9oQ$c)h@}QoAWi~ij0kCfecht(Bn8mC8IOz?^1MKD(rJ8M
zCY8Bku=Gl-u!`)K*IL}j+|K$<s%;#Yjt~Yp?g6hrK51dh{2vKNe|RF0t0P+NDZyM%
zp6YmYcZr5zw!JkcT`>*#)fAw6&leS6$pJ50F~(vHDM&h}9PB79U%y6N3+JG5JV6u;
z&}VflFEDP>DExZ0MFCH&A%9=-bcepD?oPFi)g`VBpGOEzv-LI_mmhlP8Ih;@P3osQ
zaS3n1P+Y|%_J7u at a(80Ci}b83pb)D~Ol$PPQ08 at sEcl_rkksTS1x33O4$#WT<v!Hz
zZ|!B5x9l7GCm#XTPi3y)<F;O^2DJ0|9Zg;TrlNBS#@>;vGxy0n;VEtM%w>0D1-NhX
z9mu^W=Du at izf>%w%l7Xcl-J0v6j0tg#mnZ;b at sRzE87#-2$*bAC>3MTg7<bD;(ARy
zSw?2E)p?pCvQPaL62wmyL$luyE32IYaPklV!Z*k&mpf;MhP3iD)Snj{@<aClgFcOL
zW3;yui^Y;B%iSQ%Oa0Tm*rc`}C~SBII96eCvc7fUnT>4~Olt~-+Nkr?+!1)N+y>tG
zTUqaaY=Nio{x~#X-gqAYbn1<!4liM`>N={-PVTT-gBH)fwE8GbERZS(?bfu#=Lw at C
z$_gH{6xEA#2T7^Gn$sJPA6eEhgIQ~143QXGzTZ0i%=;3lRMU3RqX%O{l{!m)5Lvgf
zPA{@4sx&9_V at plA3Qp+ir~Nrt8rJ2;&t3+$kwn}`rSOLV&vV1TM<D{F`2r}7Ie10I
zSz4dFJ?TNIpCII?bw5d|ynIlVZ)~kOoMjooWChA2zq`O4Xb&)7@{Y5R`Y^;zz+VhA
zP0z&B%6T6>W(bSjJ16!!<UQGR3x8Z45O_(cvyTQCZBKE~u(aFFs`UFh{Dq2v#EFMJ
zG3C#bF1!jm)buYQJez4A_*4$5uU}wxT4M6dLpPHFJycqW-p+pP8F`_?XvaJhDmQ3e
z-B%AiY7*w;2-6 at EO;=THdaG1-mu85Kj;wjO;j$I_S7_BCl;+YjTt-IlFCu#N$A~fv
zIJn;ym3<Lo9(kc<hGxG$MQ9QvX+5ye;>JC7UFi4PrDfCe;s_LaU>P9`q`MQ^e{s;`
znl~^Olm=5T3SnTHlR9wS)hsm{M6Nm$KW?5g&(o`rW~DjAnRHjg(D#V$1>u-9)8F?{
zNp70)WvRk5?j#2cR8Sr4zkKdEN9h?H>%<4jekDl=5k>TQXeLEw`+#ekkL6*OZlum}
zv!17`%HqfA!mLObG<5Krp4x&LHJL7sy#_$N&6wZc{-f|GQdYopJE(trPN9My>nk$C
zV+afAlQr35y<QcYCFtTUr78UJR>eR`ym3JJK)1aNu(*4FKZMr>tJ*R0YD;+Nfqx0Q
zkq|<_I9JzCbv17Jvh#Pdi8PuRMvak<E@#fKdw!s)Mc2r9{p3O$whJMAvS=|Eye4Pb
z)Q6S;V41v`pN!AtX{P|K4z>HVA<rIc<0eTN9Vfr|&$EG1j<ws-?xtpm{~|UOyh|ON
z+G6cgh`#k<6 at rnShQ6WL6Kv~^+wQ*L($3CWg%@P)U#zG at oKGRVD))0ql)gO<Wg4(5
zl_dN_6XERxvGz7ma}pJZLo(q=ycI-5>6L}Kc0hhH<M8T->H}s<#&2t^0elfQC)rA@
zn1j9%><hyGMM5`;k^%S+TK!gFk&Ad%<J``c7fB49u8GS)maVN<8d6wPPUvlV!zSbp
z1Vt!^BcNk=)q{lRfe|D0_M(T@?^Y>gZ*5{}%Q2nC#KPXxp>ew~qyxv`kl@)p=zfJc
zi?&TyrBmixGZs3T6t<x|w;=BhLihM@@MYE^1dRt6FqF%qp*fSn_A#+^aMHaVN42~G
zL$^+av})1S?Bn4Xi`btLEipB2xryLfF5jHMK-V9^@rS;e%^~4;z|n1|^$!_G2%BzM
zWBSrUA(o2(N at FTS0^|?_>HaFqHYxo{0jN(#L!k!e^VuMjy{@zPCel3dJ!I-E8)A&E
zp`%UdEepR>aRukG{hm-j!KvaRGQY*P3q$*3#)r*5ry at J>lYJ5`d4td*JBNHBB9%A>
zdeTF3fT+^qEtwf{l;&5sIDtU2{oSWiMN|Sx?UMmKU?zw~h at 12QzT2H%s>_M%Bg81$
zi>(pl(`w`agmW~-Glo_KYGHDQ2o?jDGU#C!&N&vCr^Hv0W2ac|nZpryNf|Nlam_I!
z at 0wg-x4*9O`Lk%bEYYlEs?T5t&s+7^!6{2bvB;+K{{9Ye76rph0{C*mfQQ~0YSK8r
z2u#CNl7II;9?z~g2enL&$$~zMGn)ZY!y;h96%DKpmZD*zO5P(IOZN#fe)t7H4-tj`
zFbT~v2P0XkjBM~vasH>uGx+0`Nd!?5BfH8VeR*KSYY5~9i3U1;hrBw=JAvXsi=hD2
z(eG>n$GOBd{6W|Q#+SI%dw<x(g2-}J^lNZN-F-p+5BHreg(e7s=v4M~kq*9dJ>7a9
z{^0wVJ+&k{+IPCmHhxeqAqA_-&#5eCLN>G7R0Srt`?x~LQF15xY#lXbt*qX~-tW-)
zpnk4bZ-^SI3r`s3_a<`3G)C<J0)F_7EwfsMoFa=9uZ(6?9G5XNan-8J+O9D8I-k26
zCqnJ+Cm<&1J~(4G)5HA-{?S-)mBJ^^n<~?bgzW!-LXi&%m_EByF`u`%<)5y{&=wYh
zt2$*@Yi$V>Q;I<PuR|8`+Qo=kJODQ3PNfD9$PzRs3a?8;DamrRo!zsa+sGo_Y|(RX
z$CnG`o34`1aB_p1>pj~DjrD$uDv1$zJgx?peea4$H(3yHVZRJaWt}QmmrSVZl4Jrb
z$<9(=N7|XO$WP4pOB5rBGzA!$t{9#Azv0jq2s!-G##`0~fBV&*&l&5(6P%<Jck>E1
z=4&+U{s?cC#mp!U8~LgxGFApj6Sv<@gfU^$4hj+UiE;Wu<F2<pl+F;W+g72m8_fR5
zR5DJO*$`jUQ`jV?fRGZz=0?PX?B3hILR2b%FDaY3$SL$soZr>;XVW1EmKF$LTp!RA
z%6PzyN}PrB1as<Qwl$LksZs0A;`0!U19Sz8pZCGjzqRvVMJ_vbE}{BOP~%E;Ww*Gj
z*Ds%zp}PQh;>nMXHr)80T?@_yE|GiWN*@@dl*m>0%JY7$aCn1TBR~wXOns8(gdBOi
zn{wP?5sI(Mb8ef7Y!V79XORf2yyQo_5;DqxzPS)u!<cX#GRgE)npvIo_sc0p?j&sP
zJui?axm4ME-6dr(kG>ilbW2S=Hk*nN$z_ZiyMY|5RS#<v6O1h|CiJOyk9^wNn&OxX
zOSCh|?h#Ma(-uFINTPf+n;SU)`rzR)(y|=?bZc%o1M9T&Hq!H1M+2})hB+XXii{0b
z)Uw3kdivR#FeU-n8E|jxYM-)SP-%>tD9jNvaBQhC7Aozha<hxCw#Yy6#A}C&tleLj
zJ|S^^FUi@&>0qffwV6nPJJ}9r%M+To_C|a)%b?#1uC-LnEsaS%Z#W~nO!qhTM=?!f
zKVPVJ5;r-M(x(LqcqS;rQ92~T;RBy-DL-rHj@{>@3a+O%&(G&WY9FruVKQCr_?%_e
z`o{aAZMhLnX!&j?K5@`^uS9nLFGAyTpn}ML578Omv^;YE=bBmpW(Wo|yEI#iw4K at J
zXty?LKgfvM08TL8x|vxI9+`w9R;<-|wW#XkY+;tmmdR<~`8WY|xStHCS_~`ftc+^J
zurXgkBn=kMxk0U9R@<M?tXmzKXuX;e2#ud>{_~C92wy%%Xj8Z(MMI>I?(ZKjovwor
z$2H+eCrj2BLnJ68$}HGj`QS#n7XKt2--&w80}NKd<Jm3({FD56wy=PWn(lL_kKN?$
zm^&P%fPAPx37*CRdS07Huqbmx4miKkua<>&cl{78W}zkC8hp*3TLe~vzzG6?OBXEi
z=@=0T49Q-3cc3+a3WN}ad~lZ{cF5V{^lPw{Cr-axyN*+Yum8i*8-d|fj<6^Vy}VZy
ze16JqZxJO<=0Tq!a1mb|J~-1H4I5VP*C-B0_!5*eHb5ImaNWS3k$5E)N66^YFgIt*
zh+RP>-fJE$4Sxu4)s!DPMfvpAMhctd-+qXg<L{@NAu0VWA+zHE?6t}r0_jwLx0B{7
z(X_TWcgXtvjlx-l5`WG-UNHdP*O)twZy6E at 9?hPxyd$;=mN(3DlN2^=0vWxRI-L7I
z_u$W!c~Dq1ek<j{^j8Rp;dCR;(orq&`j=Q0$D6zT)#mtf>5Ty5?U524Rt4Mkfg at FT
zIpff_y#PYU8$8Ix+eT~qtNF`=aNW4|s+}-5JLRL4QStBjeiG>Pr`LXzNn03oGyO2e
zqm82Kt<KT|j-!0r<^%h$zy1?HYW}^c;Zy}{y9<`67059C?`Rbm8sb)9g8yZ2K1{;h
z=#7!WpbX at em8D5terFK#tL5tEnY>w|`mlw%>hq+-aA-7PY~%l%ZWL}{dQ=$y;)hE}
z9Ry`ovEBjVo)gkOjq4LhS at b9_u0UiX*U-jZf9Wfqh4|0304!DUAwKYxs`f>mmrCz&
zjEYHF>5j1qijdQs$u3s6MKdfIPjO}pRGR%>uj9kmUVA}w4$V64sDl#MbsKU#`!}Uu
zJ^W5pr}0$XjoK+IdLUf-3xf}+7 at 9ZldtcO%<eG`v%rD9 at u45sTqfk}`MD`BgUz<!@
zmtSS7*>QTTHq~EPLF(Y#2|*R931%y|MKYGaMzNsVo0zKiGYP{hogHTloV)`Cd(!35
zA}Qbgia}|2 at r~myVV>?R#d<4E{<^8~r2B*xUhPV{Hr>6EpA-4 at SiSdfZMV~3T<AT*
zLS!^&$AM6KIh^e0?(RXLjG5lP<!m&YUhlIHA3k(EFqY^jk;Hz|52m^bM7voxrvdwF
zN0JXog|JRXkl?I~S*%5&9b@}sTU{QrYv9I2nzpVUo|nQv7ziv62 at u`X6st$OJ|J#$
zvvy=uYM<Up^;vrN%k%s6{VH}6Qn4=CeH5!_C&GG(-pbnAn5zzA1VC0nSo3AY>1zqV
zGA_^YwUPMUawUd4kR12T`2kmR2r}2nO<Co=dAB{FOykW%W-NN8o-U)w!Ve>7Gy771
z;E(%i*c9&%wSV|@;&VuHw_c!8*M$rclDH{K^d(<w*AO*+5$gvl=i`4=6Sz&l%S!X`
zN~I!keQRfH{}9}L4HY}I=q;Zs<9d9hND*WZlm1LV362EoJtJMcU%s*Nai8X`N(J^R
zkc?%Yg#NS#CI?;xOq>gV9;edTPVUoU0qd4iQ|@eY^s!3G(orHkoOf#3`Nw0nOnvAS
z at Hqk-4xUBH{N>w!B<5){yB;#$iU{pR;c_S=VT0k~D at ar+x+_ft@(1&l9YV<aiOK|0
z2DQGn{qhCnIOA7tX1k#6m;!OOE)rh}d&YAg3S!4e`TowZ8V3LeC{6W<rh#OF;e9qk
z^Mm5c?p<!0g`;pJ=5pC#(}PQ+RBt*x%G?Obe%cMIa1DOptKHHyv>w}8{gzIExxjIl
znbuLE4C&}3m|$V<MyC7{X`Qrnig94aXSu*uf|_?^*0d|Vk4zWU&P^|BZaUD_ at 496p
z2oTM@@_CD^dWCPMpQHxAQ4Or at 3<0Dt3+Z{dYA>fjHj at W({PW4Ci0EKRKQTF<`)Ee=
zis|nwQXmjGB7ko4u*=w98nnt3mcej*o}FHGWb?|&W8HC&3tGpT9LA=KQ$cc5JsbDz
z7e1<Zl<aNF-SNj^)i5^Qn(`ku9I^L8o*r}9+SURJ7r$kJv^wiphA405Zg|pW<vbn<
z?aNK_d3bO(G|p$B`u9S4M%z$9wHw~=kH{k4<xMWs5c6GkH-9OP&b=01GP at 18R=6=e
z<<B4RH=J<*00&}Ru%BqMil}=-c?p**Y2>V$Q|lTRQo7bWz7A6+^1vM2gv{;V6(R;i
zmhkch5i^K-|BwRhn&XWwSp-pgGY6MU&4Uo6GNe_A;r(Ix7Yte?Dz7;nO>Px2GDWv#
z9bkIag}=QUA0$2MdVCrr^(UiWPl{#g`gzt7{<_D&qDP|Jw(u;C=YZF+GT{t*_8;*U
zTUOR!h*BvC#zD)rtdV|J`Yin?V9Z?JF$l#IRJgyK^_(u+4{MKX-B&S16Z5o<NdLH@
zAyCp_+Pg3V>Fd2iYZkb0y6pp~jO>3RbRdnH4I`oK(9FM7)?C`|miGHEgvG at N?#aI#
z6~HcOmcAH65()Jhd1h4YO?b|?RDw>8y;a$HAhqks at Gv{{bZs&fv|#y4)^DZ-z3k<J
z*`*&mB*fu5^}K#kzC!n=e<WXH+%@M68F#El=s8~ht5|Lz`pEJQ$fEk>RhYb7k|f>p
z<P{|>t|Qc<peKQqB+j7zp%&HMvBkF{kc82|OlP1<9%%htw?+tt*Y({I@^DMS+=Cu*
ziG%v2jN9ZiyD3(Y+vq%#I>tJ>Vi$fE>>{o?yr;+ooFZ$20OUheT3984MYqu~d at 7I*
zMXWur-+VT#LacFb_eE=z478dvYAs<+?9#k$C<G0kehRk935gfg>y)Ym8Y*f-!peQ!
zd=IjZ!;_Q8H<_4X+Y(&}4N3nJ^0_*}xX2v5z=0 at ZG2)dS?}VcEH&uI*H=Xz>x0$J&
zVKZa|YMmivdU_Y^h+SNIx27KFn=*}sMkf@~#=-4gQ9H0{e1`tsuV?~Cr|UZ;?D`Hm
zxfs(~xlZr|5M4K(s-D(9FUMtej-`uM@&c)+;59zYhN=z+p2kJ|O&1Uh4ndO$nisn|
z9iQYP$81YQEUAf!h=58kkMNKdYtyi)Dap*UZho_j{5&+z9nWEc2wIt{nwOj!_i?|9
z8LSp&eA=jhr45;DL;o6#v4fAL`aeZMH;#g_X@;i(T^DjJ!xba8Ttz(Gw#5&^T`O at 7
zr_TjFhf5I$`%cfE1gMuoXotW>1D8pNvCFYltMv#Fj>nCKa!11yb)zH16ANEfn%S}0
z%E{gkd7 at kL-I~|<VA-5A{>mcoZ{C$N-d0!tB?5?A6eL%k4MEFL&Di|R?CC3Z$H!c2
zERag1af3B#=WA(S+<O2k9p_N!u^6`OSY{TCr(v1IHHV^inU@|v5=uIckzaJKRvtKv
z`eeG*$Z$uS^i3yU{D-vL$#v7uJLauj$bVKWrKsr!yba-GUmdSb$j89!sZ*qt?O{&n
z=Uc_Y(j*WbE{@7^TRG8}Bh_N|_z?G7EkO3KUo=V<_4~rZDfz7%c>fo{p!`5YmMH-G
z5Wbe`>srlD2mfCOy*&vCvQ`IZhti)(mkM5R!PY<>0q4!m7;B7JKGPF$QiNV?QSV)>
z+iXsvN}bg0pKjyOSG?Xs0uBw&9^E7u)VR3Y*%TzH%Tu#MlhtcEVbTg}0x9wO46Fe6
z>o}S2b^_pVwt>z?;NdE)r;ikm<gdd^1dFn?9PfhtP+(Tc+5LV~0983eP_|w)FeP$(
zr^$ky#UyvfuwK at 1uV)hFc*$d+S2sE_9?yfaGj!)Fr|`LzUZ#G}7^k8)qE%xq at mPLE
zAqfH>6nM!TP`V37eScui>o0HQd={n`^@O3xb7MZ-6%RP?kguR$?I8oT_cM%7hd!AA
zs;pTu-$|xdVSp)gBlM`Ql7X1`-23Z)o>Pf*L*^HDz+-HaLi)Y09TQEM<+7gcVAPAc
zhy5_U$IQGR2F}9RFPw>dO)J`9GsB%#=02q at nRP*ub?iua;#7kzY>LkSkELak!asYJ
z8qZn+`q2j%HFCJ^f=A$nORoi(5+v!L1}Oh!jO15mWTz`e4D2($q^PcB?gr`C at i7+X
zLJ_(;oo*XCi`iL*zHl at Xk+>)s)5cj;MTz1RH`Cg2X9R++GG at x)kZ at 1|ILsz at -mv6b
zb`g<_f;mOyEY<G at P|-q-W8~+Qu26KFq8S7Xl;Wv<XB7_CGNo*>&C~>=94(tLAfvPH
z;Byui3hUg`W*F{$!|ch626~s-6O!$s=f(XveGOU^MJ7ZwHU^o6X)vn6?kyB{Z){JK
zL}l*fKG?L)ePU5RpYNPRZKDa}XX7Uit<WVweCNKOQE^)QEz+7e-XZAYikll`ct;r&
z at GQx4Vc-dF_9XTJcLQE7u}J1HqrssolV8HB`{yA8vz|f`v9Ydh`&ru$UtxdDL{)-m
zk}g}(g<~3#eQa|pSSO||V}zk&XBE)eKP!GYRydHTiK2J`p=I^IHlSN{CYA|n&tLly
z?Qa_B?At}^Fh3apRnU9``KX{jl!Yi_+O07Y-gq^ch^*%x+s4|eqZUN3;Top@^S4$k
z^<Um;10d?&9Q+d?Jl1J5>v!67ZSCqZir0S`p*TkSw15Q=*5yGu=1H8cyoAZ}q0O*^
zls7;acY*cPsm=@~$rW=&MW at oCMMZv$)h4bRT*`;0zfwj)M)+u-;MgWTq>}(&mhtP|
zJhtxc=I+T7vh at S)xx8VoDW>#F at WMSpl|cI`qLJKBFyG<K;5enSIQI>WuVGqptj)aO
zQXBxG%^{Ec1Cpzxr62F?YibSp595GU+8I)8HYndo(w8H{o1aTnQ}k0BmC;L1hzq!4
zCgqgOZ0losjG{&~56;AAqXizt3P$ORD>JDe)@)d>v|n8Q1F><!WvPp!7*ZOC2ntmj
z4WT^b1UQ*t)v#S>(k4Mv-T&@~s4W)Sh3YWeUS>iS)=$QFzr>j_Cmxyb6<dO-C>){U
zozre7bqYd^AG$g-QESr2dyDYdZm8LHgoX)B7h(28c&}8o2*a)Mt_ at dxWwviQeQLDt
znyFSwbUDbiiMh{&eWIiPr;mP$o+;D1-`8>gh;$N_ at fp;iwe@{R;Qqea^cWn7a2^kN
zZ-Wc(4o6)}{_m at Zo6)yYo7Y{x__l at sjWP);Ks2Xb)N%M8K%{EZictQ;9KdWh{OcW@
zjTa*%rOM4c`ILtPdsT+phEyqt=U!PByyiKDYWMW$`R*;h_hFKkrYvY}FX*2|vebHr
z!MJO_wrXVI8wZymh<U*X9*JS|B2bL7PJxLWK_ih4Hn~{1b*T3{e1{<6CoT at 6pGqAG
z(Xw4npGJr9VSc8tgKrkYH+2y4!{K}ce5Vzpzz=>A`@qliwsM9?K~O~AO}aHV!h~HV
z#29wsbBT(lfKFCLiOr4r<j7+U=0H94 at 9%PPHJ7RJHQpW0;G77>c#>L(H27jQv!F#%
z73D{nF|_5+FUt%gUMxaYUbfXfdIE+gSQ^Cy7_cp0aYQhjjRDS at rVsd>O9_)(bDk4P
zt{BH<vvcAKhtsZ;g;@OptukgNnk3QEo8fIMI{#~w$+&b(n1eN!Jr|Mxzk~2cA<_gQ
z*+Xd%ptcWdeC*8bty$Bu$BfEP;Prkd$DQ0C(7KMu416JJaO|lDx#db=AZig%@;>gK
zIfe}cevkkLqVM3&gE$cjXStwVC6C&D)GHX at gHOIf*vMHdiVZvw{ZhZH;BG!A{Xrh+
zB9c=h4rd!B_OlzK0H_%znpj+j=!LWPrexp}PcyP<_cHM<5$j5RR$&yDXq*_QN}vYO
zD=5C9zc);m_laar>kn}uFl?}T08>a<+TafvXn!N-AEBe=`Nek{_CWwdkKw5?QA#%h
zPqbQ;T`k%{NfV$Tit#&j4$uK?BB(#5W~M>|d(~2%RHyUECHEsVc;$qQFKQ`weR<n#
zA*TCsmk3*=PBT2$Yr46jHZx;&mJ|1x%8pqovm#Iwz{bf-!3bu(TRyPl;JdjM8IMUK
zs&&S at s%Y)zhqtv<HoPlX@)!2)u%Cv$`ZEU%yv%spgTN1G01RZp$L#o&5XsZx5 at WoD
zW;NRS6Cppgdlu<2i>8GWO-nc7 at _}77(u#}PCyCHwxq=^Ari`tUHJFffYdW`+?mIBV
zYproZ>PQtDl>Ta!*FMMzODAx7H#~4m)9|9ut77SI!3YGXTkH=gQ~=TwT6qA(znte7
z=mcD2M~3-3Q}nxC;4eBr!Xp)s6?poWa7IVy&u?~I1<-bohUXqH{3<7awQxr}N?=TQ
zW)=*JA$pIFt73C5K(}SgNhKkNgn<DWaQ~5f6O+Q1$5tlz^^b5L2eKWj&PxOH={-z|
z<EF|72p8%(Oye5I;S0*4Z|6%+S5ar*`eN9^OHljh)f7zhJM!P<eigPk<yBhnw`-E`
zrnF!-#&3lq=fYzK at kS!w>q%i6RN+*}(ii6W)8i};A*8D_WcJWK>dd4c-<=a_GJVvI
zTs^AuPz_bQT&ls`UDh`}E|Ml^ZKP#tF5Y>vC4BD>!~nq-xZigPvc>8u&a*Xmo&;H-
zdSvZBT at 0+T8xTH-RK9cY{Iz+A?F(KVBmQgLe9#&r`6LA4M;hh}YL93 at Tg$1XsEv$%
z%Tofcc=kyW1Kh&9Pq$2JW&(#b3Nh;3591<gdBq81ly=eF^-!Dumr@)xwmHkk1^t`G
zk9S_1eiAhA>b|IP-<eLSuk)(+apyeo<}8K;Xk1rTA|lfh2<17(v{x#|VTuLe=pcK{
z{6cNae-7j~W4Qlo7S at e4YQ!I0illfaOgz>EO(n+v#v6TjC78hC?Y3QE({og^kqrDP
zD+d3N8m)9rcaf8+w7*l4@*oU~2fC1t10J(9fKK3mNUA5uL82!@2X`#7){}|_M^VG-
zX7)lX0s=I^$}w_Vug+2*$9+|ZEL`0Mny9dDW!VDPv#HSo_8nu}@=70r66wdB3R6N#
zt2KCWJTI(6>1XO8q{`5q(<Udd;zSy?Gw^S32p5LSVIk?O?4MrPTNrKm9F?XWqok)~
z1kFq1(i$(x?TNepDhF>=JRwwkm#90eMyPB_VLvI1VLy`U7UlJ)b>#v8NYl at 37Sr|g
zg|P1pez=)HcExoY8EP6A&5brR>zD2%J{ztF5e at _9(=JrmNjlE}dG$oBUIrP+aZma9
zTJ?5Z*1{pI3)Os=d)8rlhtr9r>|RpW8MAS2VhR!p8bEnVpMPX4_psnL7kew5w+yLu
zXFzTc&__(5PIFl<9N=@U2&oM#Vzm%Wf^`GfaWpRjywgS^UPY1C3lh)3q)ER(nQ0{G
z1+4)1;c!->B!C75L$f5%RUT=`?n^4DA#u8<ubvH96hIR*eCW476pOWl=@7EO5q(n4
z>mymu-o-vXL-QmEK5|i$vB`Be`SjmZBLD3LMTW2r3h0vMDeBrve+`7F`YPZz99hc=
z^*;PPhm8qRHE12Kyhm2p2E*6YW#PUjj^IR;^Tpt+8l!xN-``uv%f at zl&$G7C-9L%N
zFXm`>5y3;T$m#7=wJfVuUIU!m1mf2y$I%0P at dp=vl&F37>)WK3MIXu8OIXO;MjPId
zi!w%W^7t*nkOo1}%R&sE4#sb&an^NAE015g%Pf6*iw0>5D54}EgX57`Y3-r(DYa>m
zi~9%ga+YZHvmO3sfsNUZ)@TTuFby|e3Hu<0D2r7dzkA6?EwSs%B_kT<nP6#c`Ww`*
zcT&e?GI>1so8{76e~xE#-H9e8oYtFJ9qwh<-R=!(s2rX%ca^XscWw{1Tm5Ge>P at GB
zQSV7m(*W_O#}Sm-4RHw7!_oodH{=YUD at 2;tN1OQ}8fGw<-kM~*S_2tYt9}grOrvml
z0<^$B|CBac&7(Ob<2vitfL2K|v`+hWRlv8xvU0#lPjf8Yht~7A$)dAAE}P4dMQ^Td
zIE(sn^aThrhaYtls`-`+iA4fyXm=Sy!+UO5ky|Q6|2X1p_8#zK-%VBTe+ZCFwBG<T
zK+M00I~Z2CLE at 1Ek`a8qa3ySq;C#B$hv!_CU>``nWl#ekHSAY=)#ZdnyFPk0nF_RQ
z#9C#)O(D(k`z9{M#+R>D+sq;0R at MYfwXaPK&VYG2>8EyWTFf8uQLLXI)eZIe#q#~5
zR(MSBj#WJc;p(kxVjR1)Dnu2C8r^3;4%1Ck{qDuCp&MN$%r2FWu+8f#m<qRTgvsP(
zkG>SYAK!xxF!)+Xe0rZI^3IX|q90#$fDmI#SM_S3C1QNm6u$&(@I4}2Y<hKVE__%y
z42eq>)L|Yb4ha%l^d{UV<MD#}G!*AFv)MsIw8GG_IFd=b*T!zWi|F?&M`jv1x!Sb_
z$fHu1dr5M09>j@@b4wy`_E)gH3B at ELin|W#JqP0s-j5|t22)jG4aqR0syO_$l{oyz
zCAMBw6-vNjxS8 at eDB!OW8^p6tB`j-|cTzsvy%?;A|5AP650JnbS4=C`ypz7I#$KFE
zZjVnnT7EJazN)oBkpj8_&bh|2j{=!1^A;BdC=o*_ISK4h($!2@!oPs?o7R;Ozx4g<
z-_ at lgL$#rr)zqPc?WveuO_gZ#K at TA`aZYwupWWvAoKEOQav;B%*fDOdNW+wgM+?Ec
zDNcagQA??vg&AA($&+^2JVO$8UX|~a%fpxNT%trYH6AGLMf*W34ELJH%F*^(Q^yiW
z7i8OB)`?GvRMc8 at qVaK1bGS0pCjYjE%{;^JBSr{uubae~`3~!84nRoolZ&yik$^To
zB%T3oJ7gG+G;kw^TpE7S+Sy3r0TMO?JaeO*iy(Oiv8>t+_13B38M!a6-trLZe{Aa(
zSqs|0I!Fg2OkkvK{EvTc{u~WDH1JoE`yo_8DV~0U0i=*mP<D5Qk?cmmc5pj)x!va%
z<AcWNW8LMER#_`@=6Bg>Mi1=n-J7-V1qf&A+OG8by8^`~yB~G5iB*WeE+V)!K|d|<
z#g*7a*dz!b`Ki3q at 4z%IT8iSaU_ppPp+uaBC|egiGzmE{)Az}Y?f2I0I@=#dkWSPZ
zL$_!P0wk}TN!@<@=BQh~waGo<Kiy0rrlvm)?Ye;bARslYGP;sJ0;W&8ghG*O9b#Ux
z+K%HW9=2L3XBvgwQ at clBWdr30B(m_;baeHxq46goCAdJ0GOzkpPy*m40sOd{t6|Ro
z{60={T`DtyuV-}#d!VGv>umNZpZEMwFFwjdYcv at xY1W>VS#%FsNRM-|1C1AC8o-6Z
z^2d^@PTtp!g3hf*i7Azo4SG(ktwy80l2sM!J2sxtRV1YRN*569XFzj?LcOTFbD3EC
zdC!X)$$Qo>knWN0gcnS+HM9W98ssMZJsd{(i*WLADw=hmtaAcjcGRB_RLDbx8elIN
zBaI2-uwv1ZQJi?IuvPu_qp&U8f2?0eA;e!Y_E<O7#lpYOw;Amnaz`e*?pz%Tdn0Au
zL>MJ*&BGvfsV3YY^FPS2YzpzG;G%|h2!Zn$Y86-*EV-l5g=H5uI4WFeIo)mc97`w7
zjzx(#U at f$M;a#0N^b&Y{F@}D|j%9@(=e$)Bi^-i0t=hn{DV#Z$A3RAsKg9vk^%fde
z)`FdTV<!=|e)4~d+&8=rJzN%dJ&vP3$c4z>ddHl8x}w)05h37`#(7ierldzOteZ80
zV!qfB>th|`3~bPc8WZ4Vp(5;(8Y3mGlbc_?UXQ+pSSaNO1rAug>K<P);G at dmKPy^w
z;SS_abfX&n&Q0vOzVDU6O|__)w2x%vb0tQbzi!)X=ok=^5jK+pWe?8trQL$jRIOs?
z!u^<+`nQstHwfYtZ`K&`!j{R|i2vZ+B`TMKS4=T4k0}IH&>XO*K~f7U9?kBEDE-m)
zO=r%EemfE?um at 8jeQEY;n7a`?z+XMy51$PD4F5<SSg1|_VlRFbaQ!@A{U>f$EH|Xw
zq1b!OW-BY-Gp2uK{u4u#T<?OK@>ZDWYyK-p#+8GdpxRXvXi&i9tnynifukgc`+TAA
zs3I*y!~5<P*LE0#kyErkDG1H+!|twd$WoE)CI&Go at I2X+pves(5R~Muji*W?vWxR{
z=NC`~0THGK1^g}f>l3f$^dVNkbxsf;9TTH^C{lk_D+Y*y>B<{Ei#REdi!KNj(48tY
zaOfk)95=v6 at K)%E($bq};MyN^%D?b3{pEpS30!hs2i(MEfpA#L`BD4mxO<uxEUa|5
zwB?Amu$*Q at WW5vIEq8~*b7V?!=ZCu303cNj!AKkqp}3wR at FSRv;8j<Zqdl^kwOzSM
zNeOm13~7>$oV-;j%$Bfp-3vQo17|2>?W?mbA}P(D%-s>j!eB69#zZ){gqSz2GRL0b
z(uq(PV+&5_sqP;yq{Neh#rp%x9^VrdU)U&QhZ{;4)=+V6cmhLH$e#anWs(AT3zsQW
zsKk;j%w_`&u#MNbr5J9eM(}`VrgE%sX=;MW8AHqqKsoO3zgGgkPYxjq<J{GkVLRB2
z(OTd27Zmq|Rs4oJr}(0jKH9!-sQa88 at PY(*`iBQn%|6<3l4pfkW{I1m|4oN>yM+WL
z0(qxRkLe=B0AyWuVYfK{o8PE;j6jEOF`ny><kkN&l6nj+ZI|4R^h~f6?F+ec9B#?d
zAr$e`gg>L&Lye&QFG8Z$2_V=$H>g-?0HJA+Na-()O?r12FhTcVe5hv%W<QJ~MeAqq
zR&s|jZ_!Oh>vj_+qsRpDM0N7g7%8U7+_?v!m(^|}Zp&~3rjE!&QFJ3yj8XB9lw-<L
zKPab?N)qqI8Rr>T5g&|11NaFRUnT(509}d<mO}hO7U`Oq)MpLEc$I}`j;c*~OQ$Z|
zKxBrlPwWydLCqh^*>v)423!e^029FTWkr2TkPNgFe-#XZE6Ro&yi#n;H=eE>Ws8D&
zwoeU=04Yj<g`ZyQO}dx0zzb<Yl}(~}yi})f+2jPS`&Zqo;>ZR{u)*Yrop6fd3jKo?
z^~2Jc(N1^=;NKIAxCKC;<~>9Uiiw7eGtyN~9f1$jXTN*zGQ+O42v^rwHVUgcKLOqJ
zVYq%sBJ|eDQ0Da=D%&r3B2#O-#!Sw$vqvbOviI<mm)Tp)WTRa3FD6CtSTo~Qpg~2~
zE4ZX~N^}W9zca)U%U8^w%rL2*jeqj<XC=AqV5_9@*<tc110R!QT5;_ccJC#wVYK>d
z<Y>q18duptJ-Piu);?!8jB#cIgZ$>RJf`Gqr#9Zv4CKqv#~N|RN>KOe)GMXccy)rO
zM+j_tBfapa|6mqPt)VcC?jq|PDLmm`x#$mp0hgkcy<#(7d7?2!F%^#<m+K)5Kr$+N
zw-8hL at aF<_m9}*!q2-aAa^wr<!R5OAQFx;Sf|OiJ#an-)zGd6QstM(>>0e6Hj at s!$
z_Dzfa=Lv~7mH9rkHh4-W;y&DH_(G&NM^|n1e1<R}4D*LK(l{;1K5SuEhOR=9H#R(!
zkaY$tV=7wArYk>Z8s0$V>3N|6t6_)^oN6f7g<urB*i1?oAFXafWvd<u>u}``;-6c;
zl8 at 9RGVn;=+&la-8`gI-qGMAotuMdQB9Cg6$4lg04#2hDuSHdi9mC2K)uAEHe7noW
zSR=pubMSl3&m1Bd!?iu*1z``+SZ7?jx4|IQ15!Df9X-FX9n#xUZ{T{)@*lacP;S|k
zzF^bP;cACp-$LFYvfL%I;hph3L_*{s$vzQ39s1S_ at RPQs&iTw;&0K!){1zY3kiM*w
zoe-A!=@k3;9)8&sCm{%eW3vcv3d(@XY;(wgMO|s9wOaJ-vrr-Q^&)4DQ~$MnWduBt
z3{!{WnB;J2rP&2IR{qndAhxCO1=7BpSB%k_u#5OoCgLEu{wTey*EGi!Ck>^4GZliy
zlF7Er-LjbIVxt?pGL>oua8HxDp4|Vo-5EWO at Xx1YQUncXPN69MV(#b at NpkER23yjU
z!wmv`O48v6{yyb_Vlb%drSJv_xhn5PZwhBn^i3mMrC_9sn%{>vTI;EZNGdYe8<$29
zK{q2Rwi9-I3NY7;>5cqGD|yWZxwv??Cy}pk{FB62EE^-KVjwp4ZQ7wA1BFSKSWk74
zc+%LVRhqPZS$Dr-?-CQ6MH*rZ)s71irkSs<@5%322e!NPy|&Qz$E~E-e6*m&JzMgH
zhYYH*{-TEkB|zzPVd>0G-=ba{3XW~Pz_-M8b?td7XJ|;4<rvs8=;5}367tv@`-pyu
z_~yO1iRCik&92vJ at R2d=Bba;eIVI*w36Vf}L2YBta>PGeQFFpmxb`?fjbxFm*aaK%
zEeoG%#A*ePtj at iXcdLe+Xszje3TQjA8>$hN at Mh4x+Qj68_H~NRn5`__8afv~;pcL|
zP7J59@~RpZ-}IG38uGKx_~A&p-UBb$ZsVLkrOP`}1|kd){sX-#B<lxZ^x!tf;UBJ>
ztx4p$2mmiv40L|Hd7|`?gZIRRGm1AwYg~J7F54|%VoF)Dif5qg*mN3g3{EfON;q7P
zuQ)YjpGj-|S=$XAwDeC5ebVIsAz^pFOi)De%J!@rY&GZrjub>>N-pD~;<;^r>A-(7
zsUUeE at ki4T$F?TZ0D<UeY36ATre3vbhV(wbSx4 at xJnB0*YR9p$uTE=Y!(iPu1@|WD
z3FFIb>#2~epd)nrfCZ6=r;8H*fbm|ca`C_5<Zr&ED=u}Suk at tN+EPQ_n~tRKavTU-
zkM>6x$xD!M>Lb?ao1BK0AS5Q}#-fz*JFWg*=J-Q}EUBKbsk~cBsYEvCehWO)H3tDT
ziUhsO^}5M)ByyvvHl860g(0jxh`MI=060prZ~*=<Pgi?XWznmb7%FHsUa9OoeyGlL
zX8|t(94B-F?sx`8<GM|+dMZGwLqZm2@%5mOxYycdD{d4EgHD}g-`9d4LL8erXue!D
zt=1p;G<|4o0?XqniK*^N$*s=jiU(-6 at f>G^Y#)+I|2R$(9m+!>S6g2 at bKp*?R;&x0
zZMlDK5t59N9&_8H`fgCrXpW=sz1{Sw4I(;G51GVHxC3hQxcM~QJI-sUS+-5IR==8)
z{#zV2tfCFEzCohTpWIY!`JyV-<Hk(u*Lkz*$Dw##lL)o?L?XLed|9>$Kk%Ac#)SSr
z at t#^Mw|P&xladI0`69cSMn;cM;)WUWk+$TSB(+L~K~e%K3?T&d0S3L`cZczV9}$FJ
zcaNy2U3QEmyvrRp<dvhs25%>O$0_KE#P}0FMWM~fLKpA!=(9y6owDct2}46Ks<8y!
zEq`#_jYJ6AdZ0fDC_X%Rn=ibE{9Ymk0Qj*DzQ7|{F76My4cFT(E1kx4No5*^Ylf}!
zj3~%2fM<jy7Atbd_eF{NqfYu_2UMnSpeoE{*{^MJ0DdKZA8D5_ydfWfGv)Hr<ru6;
z_V-x(CE4mcfv38KL0=9x(Lf7qPfNRBAN}oJoq<(p6cvu&k);+Jnwz}cZ8a_HCAg`X
zO$T9qfDbGhkE5*Hp3>W5m!(L}7zyMc8mZJ*u52o+b5i`{m(XN`;*O!(kca?#{@g)*
zZgPracpMcoaHbx`JD&1jsQnrQj+L3m0-M+;siD6vSC`ZTd~>ib9cthB23LYuRiHHC
z?wsrarm<ChxEe#m9!?GcUZgtb*^8qy#+lE7W{g?fMWgd(JB){N$9}T2!2BYx)&}Ok
z+SV*G4#&Tx&&78Xm%$;C8C at dY`p7nFlVlT at U^&1zjY~6^H2@`0o~UqO<x(`%XkkJY
z(;*ES@=jFvodYW0y)uk%%^D{@?3ny(=G_IzSpM0{TW!Qvsb|9OeU`>vhFZX3lT+4o
zR;w?YV7=;WJJ8r>!Bbnq9nYlDCC|hB+LlaYG)`r&)sKI4!g-ffQ(Gn7Kf=lFh8|-8
z&uv!O=+hr3RYb$q^0-Gkw7Dbb6D&9~WGZsao<(ta*MivpfN5Z1X^a85`Bv{kq^`v1
zjeJE3Ib9p>>HFE)5`83~>Z}eET%z<j&mOqZWIb`xFCIZA!8dH??V`uc0#!#-tO5s>
zwJ3nxZ!2{XXz7BUZ{Cge+LRVPQWZx-2s+l*n9j6$7aUei1YtX_fPs{bkDBd83<LP8
zj0o2T?HFJLEgj-kZ(B+=-o0wKCV*DhwNjq6ZGZQE;>^n(DzsW8?c_n`Jpum82CcY8
z-VF~6`VQqp{INq2?Iqf~yYpc2NsV__5ze#l_~Z+so6;Q1%VIdEhb{mg9UBZ$9X#_s
z($r=;1?pDsXrELJpO3f*>u=JOX4nbPwMns%z)#pLK&VBPz9K}VTvOqIdn6<c_6Xh#
zSU-llPvFgD at _~>nx!d-2P>B4SL?8Y3vE&ILqg_OcEnm%Ii_bv>SUiy<f>+|BC%;}k
zx{5ai&(+9pU$8g*54r2f1n{}(jSTDgl-XJW(AA*!4r0v{o!hheN?PDPg2a(1 at m;+S
zI)eS+miRiXw8~W?L!}R_Mzpr<Y&hJvN<bfuuO`bha68~qVES>=v_LYui=S8LRT}=9
z(C;x;FyaF#vwE`QPXOPcP5^~|*Tt9^QGBb7o(Pr%j}+V at 55%k!rDHu{QIjraOLRXt
zXTN^bxNR~6ekEMCoCuX^N)0g=&A&~X<^{4VUOZibj>5e4N{m=AaO7kPdH2jT5w0s?
z`~{X%dc34cpXX&K3>_SXB at 4SYr|M2T=pzF+61B!nntKD!6v;tEB}JoG1VJqwhL7yF
zO2Aeto+m at ZN~ZC+^X94h`VHbvW}ZHt)=s3~y&UWu-Mw<&M?KRVWpz=^Oi670n+9s5
zOtW7X9-4M{-|*3JmAVt;rwm#?wCKz~-<7ytOxT4Fda6%0JMwUF9H82K?oP12Z|g6>
zZeT=#^+|hq;?F>-Y^T{zntH|Hh3(uke*0(MCADMTB3BzFc(bb7+KQK-S~Yj0C|3*c
zUzEwDSKWh%5X7R`e$rnkvrWX|7xT(;dMZnYYhJB+^A*#k06bsAw^_i-Z2hRycvpzL
zx!oR?qkP-_8{Mdo<g+A}*?v_qBq%$my9uZ}29|iuS_BbDoLIGJUTyH2r(Ggv<-ehS
zt}s?Wy@~NhT>#Ojz^f#r3@`KZ@<Zxs^>Xw|ZeZbuluvEW*!jsj6-9F6$*oJu9eg|9
z3T1+tkfjE~fCZ+VOmD1;v%Lf<gD1Q2`F2sXg}ex*+femS2V2wT*A{djiUEBA$6c?*
zXI($iaw;r!n62UFFAVGOrwyzh#TZEePMmh31k1GcCfI2mW~2`v)b_c&^Qk4cUk%ge
zfK$slkhMiTqs^k#^qFb?$1NM}cbgzBiz(w`s~7C}jh5)b!CJod5iXRpYzfGnC}5&3
z9&#!c5tP7%7!;?o;!8kVe7{(kHt2Ezx8_<0cXXs39L>1^EOJw4mW3`tF`@Xm8FI|Y
z$;MJehU<15W)CaCf`5qCMZzX}LE#7c(eMQ~aKypX{yByTiDHVoOw>Z3$R3vm8(vj6
zWzq5pcI;l(DP0LK^Az7+QT`r>r8j&EOX*_Be`4t%T-mWP!zqrk>xNJ9 at t!TKxgyee
z3y-@{Wt#7f?fe&^YYF at 7>*(UH?cJzCUv~{OtntBVXXv~_gk?fCoO<n%Iu=uS2D*7K
z8w8Syfi^=9QbJUzeD+_99UKdntm=WV9U`bscyfx%MZ_Z?#a6Ejs||P0O0z_qhJnQa
zD$)uI4*o~i7UN2qbbVDfb5Ls<4wx;IUYta?Icxm|FMmmna^Aq5K_ddOkaHVtNz~?!
zA=+TC at IY|h*%ZpKyHgl4J+~)QdHy^(%ZV>=?5~iA4SajCe}PE?WBAkTJpjkL6sKx>
zk6;e%w>;pwi$7II{U-F`K29ggco^<6v>$1mJJ*<nJ%KtMWE0urnR}SiOOSmF=i)G=
z;CHGf*j?)YWnMgSY4|~v<7yX}63(`{#<TyHPq at bh>=3=L|K)=TL)V<k?r~Xh8J?N2
zVrakA6v9MwLAfk}Pi|7q(t|oM-y%78aa6t6Bi?S6yV|}%vQ&qtISkZW+MVGn?zvt}
zHp`i@;GYK=UcFbTy+3DKm6dRyMr1z!d7~g~l;i%JM6!kEnBh+-Zea4V&VbWR+g;sV
zN=70M?57U$Er^`lk06gyZgV|yB!wV5CxxJMnN>?qi+O|m6z`x>p)S1E;9gFBE<{EO
zh(`t1E?(JdnsAgs2Ebw+>i~K>U*tNOs%AYk1RNy{L3%6vDPfd8k~DPQ&)lz#Gq_Q{
zci+1kTtkn*YUri2x(Izj;@)*$-GE7)2qWl!x*Yc7cPnj>n#SBtYJS&Kb`P?%z7K(}
zKp}9qFZ9sN^q)ZH=OdayAbea+x5rs;)t*Oup%_ at E1UN7POLK$0zeXy0WATnQK_vI&
z2 at Fi&mvCIY*5d(5ZilLp(_d}weccmZeY!H6b#)LuIM+LpP}A-Zs#|mYt%ul`a-x9V
zp^wLpjR&F<Nf5N3?aQr^X8`l~PSaHco3mb2JJW at bV@s(R*9(lMXEFySIE6oXv at 18e
zYY2R?ES?dP+X&;$pDk$Aa5t+G5y;{FMXAZDmnlzR&kU)c=ddT^8ZN^2@|{y;k2g2w
zGruTBBs#u#wsf$bi%Oh>LiT03wmCDt?QL(QPa(X<WQG|8SlyfsU4P at V-Q@fuX`Pw!
zcxz0r9bB|%#2L0Pl&9El1n$(U5bKuMZbN&_r}Q?nC>h6G=2;zl#JBLo*~lfYf+!Go
z{15J?+YUiE_>_BB89Kzd53L^QCR~A9`FV<~_)>|S6&5*Xw0>c=#fUL(Q)7 at z^Cg3P
zZu-g}{#GzgM at N0y+Zp)K9}*b*92(Kzjn9*M3AL1}Pi)M+3du9{a~WwMp1GdvLV+j>
zAnw(d?PjG?_{fKXIqK|Z3*Wp$``1$)m9%TK-pmCf7N$Ux<o03T at Q>UkaB1Re7+4Jd
zByOVsbn}npOB)3IS9D$mv^86~%YsqMOzx3Cze>vZaNVHGjN54gARb-hrQZp{`18B7
z_G<=NT$$34mJql(y*QCcjy|6uTkuBZLSYK$omnT|3IIZvH=Kb(Jp?lA`~RO4X|uG0
z>sMU0)@y_0A;?BSGZYIc7o=IqzDpv9$HY05?=r9uMu$)#Zt at p=PIwvX21%TL%x#lj
zQ_~<*^r>)vJNG(}`nRNQDy8;fOkQ7Jp*@mmZtJ!IcvpnP-Z<4lr;suPzX(vnFlKey
z$)%{s$&Izpi^U+}tBBKtR%W4mZWJa-R&~*GgxID`(ogv#2?wfbYO}i>`HBAu<+*{V
za{z{;-;b)^R;W(xs-{nBmYi852=Xyk(A`wo9Rf6fxLl&Dq9T1|3Les~jp2+}G=6sa
zv3L+~yQWJ9X;rnT<Fnjo*GgXa^W=GjAIje}_FDEC?}+eX;wm>;p)bye{Cg7Q)XU8R
z3Cgu3wn at XB2I;V%vJUQjQ%$|11=1(a;+%h!GDF(qHfGh#>`?2(9Gk_d4|qG-{(iJA
z!}!x}X4*Y_>H?UyOOLg=ZiX+pXNXaIUTJp{!m~hI@|s|i5Yvtb=h%(nQ{ijCd)Yk!
z9&Aug%qQ at CgzR(u2QlJ8=s>sF36yfQ(-klN>ZY3 at 5j!NZgd4sX3B^Oc<`(_w9~r+P
zGjMoejV|vHa}wOE{cXlt4(@F~Ud4OHIS?e2PBW(U2OLi&7v8AT3lRBho*b3)W2}6S
z=R*+BXQ?D6Pc~|7bZK`53+usDUBliMd3GcnJ{<l6F#-}`KEzVgf>PWsGj7YdEO`eW
zGT^7O_E~<8ZQLq($NyB`$1Xt%{H6M3sX2jN=$VsfQAJJ^<X?7F)$f$pcT`t^Fydz*
zIhWtUK`+uVitfJN<bqHj#Pj?1i81oR*Vx#zxUcI5GD=EZCp-F`qrwzWQ6vf_2g<`v
zRqA~-`B2T_+{InSN7Fd7xq{1L8QrF+S`49ff?<mWmj|L at J*Psu>QMNdC^k<Y=?HcP
zS-L9ZW$19+YIXdqfhLr~h0R*F at MFikgr(dIey2njaWHl?0!mRdS3GW%8N$#RI&~HB
zQ#uDQ+40dtoD}&7)0<iB<Q;-4(H>e*_}*9%1H7X2&Xiqrb}cXe7cN=g75=S4mYOUN
z0K2q#)rfx`QE`kvzm9ZBn4q$=K8L$s?|G(}Rh9nrPqrOj(N>VCdz9e(_Sc4TrE*8%
zEA_-}+n-pdxxFO7m2Y)?-fEP4R&Lws#9LFDd|a5CE?YbY{BL|_DNBIT%lk)1e_Z>R
z?4ceUb3!av2P6{`5lieoV1?lg1m-G)gNJyL>SRwy2vG?$<6O&~VNWjW$v(|MO*xUt
zf#1xWw&X+k^vSwcmr%<kjpEe$Dl;fE$;c~Z3l%HFMcUZ3;yoyQ?SY2MA^hE#R^)E?
zgL5Q`2G_eL<hrVE^lTIC7eA~P)1Q(>NHGfban-g#wsFG(2~krpPdTEa5{fU<g--4!
z9}Xxk=y1$R6M6 at -+)5KgPGtfe_iapgzmC^Bwq^9UVd-|XV6N{<hrH1-K+Us;aSY!M
zveocYdox<Qk_Opvbzf=4D&=Kk#H<UJpLO|=@4<YV_y>t(-)$s^`OdY;MvfB<@={D-
znnDuP57?SVIAsBMGR(gFWpz?>fa4vu?siTM{s2<d<G^Yo*&Ln1LQNC^{C^aAz=`Ih
z_VwC29sDDvqO0xxfwbKzs;BCc#DlvZu2(;xA>Fy{4G!^fg16Z|V8i3S3?hk%pt;J<
za3V%d@}IvVca?Gv?3!qnP)Rqsiqw?o;rMsu{;PK0V!wc}{A>wo at F2~K0H#MS4>ZPM
zBR-I_B8R!+TW>Yqsi$m$P#B`+lD)guVq5H0ryaBig~)cpt|S|pvog8Wi6~DaPZ!2c
zw&-kEF}EG)vpFFrFi+Fog}mI|t0<vGt}X;_mhz$IUXjqj+w at 789r~5*gY~XJHW|92
z*1Ne&q%AeTRYjJ_OnZ%VI at YQGg1Hn(w5zN4{{o!1o}Zpsq?C`6KP at NlRi|Z%cAvAx
zSv1*=J6_EhQ(KCc(cXvHIAe5NkblN#Z$+6!iXCihI7a>s5JIXHm6_-S9z`5)9pm9z
zc|m~BYDo>o)+|#lx)$zGL|LGJmBpwcJlAFsfBK}^3Z>NDlW_<)#;LJ1fc$6`@r1;O
zy8|2p3<N^j=2BT}A`9Qb%`cYC*nnNfn!j2!Wp?X%T^X$q5={Pi+Ryo6?vm|<6U2qF
z61O`3QHG5?pL*W|<-i51y<LwgdN3UhFR}!JRGQIzHuK_eQq6ykz@%^1nQKQ<KdV4N
z94u)gDfkV8G<;tnxFy7<FsNZczn4I|N2qfd^E-&Lz%#Q?BlVE{t9!ahUldPp;Am@>
zyR2}K&o+}alpS7={?HRNG=d!AvU?#<N48iS{w<QJK4r%mtDyFobq2MwB?xG=3T1Va
zY(j%(srU6HZc4Gf#HNRmzLYp~^PTJI1=iGy%!{1Vu#qi91>9te`d%!%NQQ95g`d)g
zZL%~8hND<hjCj;qQf~ro+8hl9nG=1+^<7u(gacIW2;lJE2)A_<tJ(s#pHuD$m4g}!
z)%-uO;)L1U=<+zc?_fAfe{=>GklZzd9Oq3LEaG=xfE-<bL|?iDtk at k7DoPok-KHch
z+p%x?a>l~Fdo6<g9(w1FSE#*(>eC6p){v?CIxQRvNx+XS9^CkS$C;%^M4&0HhSXZw
z&<{l?;5x at nVKe@io>#l3(@2<~=YTQACHdUeF!YM)*VPmAw)Pq(y9kPE0?$uLfsX@{
ze$<Ga)<LVUNc0azZ>TI>ZO}O-%PT*l{sU3FKj8H$oz>Um4xVa#7w3!P?W at sKeytXk
z*Ru5leSuqlXW#z~;5{TW_g$`wtA!|~<Tc7;)}dp(B63gYrUa0#MAM>uI%QKWV`^z}
zIlM_T^<f%|jy&lNKG~ugj=H393Zm?_xHf%O_IMSvVmX|2`VGnTqqQ_ffW~&4uW}rl
zYFn%rUiZVc5{9HLv)m-eDZcPM6F`O>k_Tlk_@&TNdVT~~v{~|7nMSq1V8zAIlD&Xt
zuqqr>g7U6_qSp7$Bbg95l|Ccg6sl*>7e|Lx&uKY!<_`r==)R(lkOWWmn%LcjRZ)z!
zzp6zEYvg>~Ofs%xn<kUUW!WcmH?e7Ml>h5))mm7LP at og!3ElvQ`{RT_4Q!KnA#-A&
z^G59?2Lp=}aRuRQ%lH(RrngD9%bVOs738=j%-XD95b-IiRR|Z+&x at D(FJU9R;jR`O
zY~1eC+${H$ZCL#dcUgBk+99Cth`t&f at c`Uk+f0BG6IVl=YftEnTb=i<_k*XQLKsMO
z7jyS3IBt?%OX1)lo*wQG1FV1<exarbc`h;TGn?d(RzZw+mAoylCZ?O at AwF4{si8Iq
zKE83WnVJ6rU-gLpK6uWh&eXt!oNMz)O3GORu}vqDgaKX5V2c4+btFc|GV6)sMUcZr
zdL7j*)+$;~@W*7ZP+EcSFeuuGemY$3XQB`h_S%e!81R=_FNe&MU<}#5_<QBdp8Wva
zVar3pygrqDcfw15PK+Ltxv-bLkO at hM5|a;d#LndDraHu?eR|<i&>wl580DLjf~tKx
zBp$8+TN<$GF6kwo<@O6+3x{jJ_?4o<2EoJG3%_~J!+#*%xe{EQQo4XG at s=g+K$4=H
zwVaKI*8+wLzp5k-WqA&Gfevh2!vY&9_8vQ-D7;rAtYW`c)mLY4Pdp)w`x<TUohvZG
z4D!@w(&xkIo&VpQ1w9`6;yb!=nEO^63!_&WTnbT};^4B)0OIZ_WtsGK^>%F3w1~s@
zCpIIht0ym at UP<VMuiqwSW~U!Nnp+q;(_Rzt!gul+P8ze?^I8me?VO6S0)LFt2s<eN
zYD5{=Zy|@BTEPc!pYp2P<~U6!gKgs$K`|Y`=}OuC473yC(Ra`xEprYwYbd*{{3MjQ
za{T2Z?4nbmhL(4xZ5?eEyd$oo`K<bUeYzBlDl2q1oftku=z>F<n-8hzxtVGle#7Sx
z5B6V-Yp8!1B-gKXpSw at I?|If2khBjB{Fv2+v&Fd at BGEQm$!}M$FJov<0u2kNT#;y=
z?(GyBgiy))GrGNr;=ZxrU%{Sw`^RHjw2Mt?#Yk<Hp8V8id+n@@CR09-1G08K;BiEt
zE9Q9uY00AEH=pUWiGvIV`;i_(JCVsvl1dZupf)7oLn2$zpVw|%&hnICH2GrT?-t$<
z7Fd7^Cwmh{(oHB)4#-i%3R<Bu0}s_U_?6vC7u;~xL;PzMq;WlZwa?9H$062MT0A5L
zywAbh`1v`MUXx&vj*@P$rI5ucB94ncYMyajUc(4Xv;Yz`*yn4@#&OHsO^N at S4YskZ
zJ74^pkyaj7DLlM|_xOUhqUb_tWR$0tlVh5)JD_zj;zlo?sq?Pewd6ljFpDV?OgrR}
zUeRfx?~8+1uSZB(|2cwG=qI({Bk~R6xw_xbF4Nul?~8~-ZQRG4shf3~J4i1Byk&Ck
zk}RiP7X`fmRYz_JBh&|>E%W%DN*;(_o)8`Eoa!WtX>4;y8WF31MX-pCgmQZ!zZkS#
zef8IfBVkE3u;v^GHz$>nhP+_cL`qVpCeB|EK;ZHu_=QGxy)^KIied~f{&+=MajJ#?
zPQ;SutB2-3l)5o4YuSJ8+)XR#^eYU_?>&<aW3x=oy14A&>6Jd-6$ijo*=sZQxcK!k
z7ISM`I(TN>3!eq|ic-SOiOptBB9BU9)&CQFS;;THg{pl3M?YZn(dZnQ!ucjyiNO0P
zT-AnE`-hTGV~pg6(hcZ#3esEV=c=GDa>=i^to|9|QSD+i=h)1LURYEUREjoIW_2oV
zwfTL{bnpxLcz#8{+F;N^=4_#Ctms6~BXYU$_;5lZ9)YuUoWFgbDLgvFM$NxK9W}V<
zkY_$BCCAP~0(|2d0X#|^3g&+TeDYR{+hV!RYrFMOXh0ULcZ~aU`7=fws^kdBZ2f6r
zK-_kmhapB|=OWw&53qGvvv1Ew8Q at O2&6emELkZ~fIUOcbk3``I{8Z^Gv<f_5k;5tM
zf89UifFs6_$a%u6+@<Znx$^uO>eav{$e#i`i_9g;v4xH$mE!oc$UBnQ)w^~K&4a{I
zV?3UU<86fJWnSc!u7db5QqO;m#o-(C at pzedCO7B0FV!pqr{Ze8^joH#pL2nuKI@~@
zxjAHLp<ro*cTDkISs5wPqz>bn6JO&HN`h=yMH4i~MjJv7fnxkfJwAXP>2CiW`Hi at _
z;?Kk5tN-VhF7OZSyHc3#f%oG#w<T!`(}byx<DfnzCeOo`p}o|Wh9 at c0f9{!=x?uig
zv~5F~5(nV!$<HOl0ms8V-w7 at 33>~xQYa3kVCQJr)JyMaEdZ!WVg?{nQ+75s`C+|o(
zNs>o$*Q^2RwoIpenLeom{8=sxW3Hvzc~CB*4{43oE1hZ`&vyzen#(U$K2IXJqJIE&
zG0KZ6Pr2VOEE!C7Qbqp^mw4%$KEY7_H>M6G-bF8?%+{F4;T||UbG&pX6(2S$Bjkuc
z=`d`SBoS}$ygBkf&Mjc1?w+|2B4Q|0FU-sQI~Mmg!7O;gg-~w>{M$2fQEIhU^nkVL
z8F-ssti>k$b{>u%Frz=X2Fu|>$Q1$zTO`v2Wlxmt!-<n=g!5l4$ZH1H1Hbxp)X$e}
z*b24QFrj%DH<UL|rDmlVOEVa>+EPT%lTm5tNLVm5xC%59MsaSh_=m!nZq33^NV%oW
zzFtBejT!W?wCDNatD-6V95`@=fzC(bq;&5A*XIKC!-RGr$5aoyWutN1mJJliW8QU4
zLnUX80++J9RMAQ+4-)SLc=nyD)H(sdsF9i(=+$D+2P$Q*WyDb=`TI?dLw2gpME(mK
zcJv<8na3cV!-aKN!}%_0l|4O?d;!lWJ!-<JYM04pSfhm%5Ds#uXft4%$@RNn_2<L=
z5EuYSl!2stBni^}1VFd*XVRO9-9&l6?82!%c!=VE<Y=9PH0eE)BFw-!%>7MStt$Di
zSKf4S;ImYRBQ?fk=9m(4aJpb}^qJu13Xi*8k`#9JNDvYTPn?SN^r!(I{^8J)QC;ga
z_pnGWoCK(CV$Hj8ULb$qV3X%#nGMhzRS58uFnQmOK;uiM1-wEMApl9|YkduK$$wZb
z{QO at c?v-kcm|oF7LA~DJIdxq>!hr)aJ`_WKzk+4us5Ga9-d8)$%QB)^MHb-&xbRPS
zLv?TE1v!Il*Td!TB!s{k6{xiI>78&}+^OJD5(K=4+sI%m!;JFP<$cdb9-dr0mu^iD
ziTYlzL}}Y6%tjF at F00jVz%*tr+QaZQH9pcsc3&R@=hLZUl#ur at 40(Qr(-vR7aTe0;
zo9mRb+SI+GZR)kQPE{UgdU#uN*01M;{Hf(@I6fov8D2JH2wb}3z8vyfXYVPkc~_}T
zulaS^5LkvrZ{XmNrBQbwDa1M77ppxAWSgP*KG#QzE*6&Z8Rp2kn|OWgOOGHmbVslY
z{V09hGdL#b802p4^;QHWOtRCPltHbgjsii at x?94aErj at h6=c0i9f)ZKrmdfaix}!W
zFf5;p{o}efWu}2iT;CydC*P$&BOb$OT=&o;>E9soP<K<C0vEqwH5?dj()zsWmvL41
z*?n51E9Ht)<f+C67Nf+e|6Sq3poP|p2%E&&vdK25cZp8x0FP;gvxVo=J+K9GDCPK4
zPqi-LS5DTnFF;0}ed&R?UStt#Cu0j7C*?S}Y*OJZsOXQEcJc$%k_q8XB9lg{2r^1!
zE7<nj;@f{X&2e8Nt0So2oeYM}V%@du5MLj|rNpa)pza=)2I$fG;Rug$!oo57w9MVF
zNka;r%6n>~qcq at RKaj4fAV_CkhPi4x;qQddmfox{<-km403tK>4XvH$=$hs(gU7P9
zuOT?^HT)W#>YKgUnCn*n_AwX1-y?bM+WRms=^%64tLQA!9AOaeE|a)Uph71<2!qZ<
z;k3A4P4o!)PxAVhYXp1BZu4A*!Y&6`z=h|Kl}69-(-AYcHk#vov4!Eg6^jM$CFOpO
zyIFLk92IRA5X?@cL$69;*lSt{9(aO=xu#ls?XzLqU+aV_NL>2MaPwfR0vfG5=a99#
zp2`6k#i4a$O<F?y3fYV=T%$QiOMNQk$!zd~u&o3zn|G%X>`DhYE_fC)1s%<mu|b1l
z5Pu2;HZn&SE#C;s;|k6h%oBI6654av^P=g7NBrb#$uMA#>1d}R9?WH=8fOy2$3-1=
zOj*S5Ub~fD$I$8H`L8}`xiEpt($ttFt&^-LHHZrH78 at c6{_G55{kLq>Ct^h&4Z7HU
z<UHJH%Dxy;EXx4<P!odYu$!7T^ih1?Q0DU{`DZdT6_m}I;JqL*wGYW0x*~{g@&KR~
zOz1X0)Al=NpVuC8-V=v|q=hfooz5)Sip7HWCRp3Q!oPIB`RjBK|EUEDik|!0l&<5`
zb?F5DV7xW4d>p>C2{5xejiAhqI$Ude?)&sRYav2H3(bPz9p(XFbXMNf&>?lEfRwo>
zop#Ol>kg9k|MKR~DWLPay+|EcXbLPNr;au at xbL@rO2jGgP<?u8mGw>aB51Ub>Qq8L
z7Ycr1r^6l)c{&B40mXZ)Om at h3f+NRL`w!O3$r`~$*QK=-19^Xg9(#JNcZ at 1*0i&m^
z)yD#nrOzD0M@;r4n6L6nEMt>_kEO1ZgWOygSqRW4QZO3(Jaw2IgE=B4z{#9truzHk
zV3QJYIr{O<L74$j+(ssQqGftTff#p6OG^N;uBZ3{98<Hzk at JNKt5VnoSJqe{abG3}
z4?B><lq4UoC^0uC^MAC39WhdJL^G<~Q}&*Mha at _fD*=bFWeCWI1z(Jma{_qw!J1{=
zm+CROs0?$apr=R|=oJGxcpv<rW!Iwp$jTh9XI<JD{|bqX`#a3h+Zcm1+TI_zHf$?k
zKgJd7E+zYDJ3v|2|DS%JC5y!4klE#6z&8&mQ0QW!J4cVN;E2UF%+fK0KCP`P7AIV2
zvE_?cCYlvQ1KyX7G9%RxNlR{t;)WJfLS*|=LPxI4uO7vKn6Zcs5zJLOP#OMQ0LPTU
z=bnNuxDJjb(e-p+x<6h$8&is>U`^zg!<zwGU>NI5@%57rMApbK*iywUfCN>x=|#qI
zPK0+x*3$6+bKoMtU5M&dJ=`zC<SiDFZ9yuRB9b}D$IZ~Uy`LlY_}RZ7U_wkAsLg<B
z6Dxk2a990-tcpC7lf<Sh+An~Mr52o5 at IZzAi*yMXlX+8=b5nvp%n+M}TgphKj-N+c
zF{>L7TSu#J>mEss-L0{2wyn|nuup1ud at sv&?QsxNw~3*7d(Ish?;^igJmmGAqLJIG
z4JU-1>H9E)oBOIZ==W~+N(hl0<STe6TiU(q+2ac;Twq=QG_8JPO<sDV4BorcSh at F6
zmJf5aIj!T}OWHzZab$d&Ei{URYJD5>`6I2lECT++Pedg(!0^p=&&`PRQ*}C4r`j3}
zKz7Tgx2on+OPwvhR94gLxh|c_T9c2ztJ*o^r-d3 at m3#4J>P(9q$)wK_R%>BUBhsB>
zyarCqBJ;t8ORT5U4Ns+%eq3R!Q?Ia`-|b<eEBWf~to8>2w2(xC_q-%_uFc~z-6fCh
za2C2Ep4(2XIWIgfE&SPKcaAvq%=rYY4(BMK5Y&obo1);E6Jr)0ef%D!$aw0)*b?^8
zEnJBEd}pb50&MMkG)@dK at RAL#>5GsLLa5u$-p9H7UjbUMJ`caNxO(oxS;#}N-;A0F
z6`0(byKpTufF6lcx`{(xW`el10b(@z%-f1bYwFMazM|-bE}*R1U~W^%fJ5$E3g2n3
ztW|HtLAKCbWc at 6XjFYxVggD48d6P2CFHpRjJ+~}F+M$~nf}rbdRpFOF+PccdsYMHg
z<yOBge>U}tw0C(_pePTuu!&w*M&oh=U;!#*_3ADE+$FiYr})G=M6<L5uB*;s5HfTC
z%OBs5P8v-QQJvJv8+F*evwN>``7@*e0lWER0P(v49kI`*(74t*eR>SaDt+GW!oAOw
zkhL^_QH-D%PwPP<Q^F4HVQP$Op-8uV1 at u@_852okl|l3%82dnz)v)b(U~KbFCo%Dc
z*^2+I?rX*T8 at 3A&q%=cWJW#?%0I>NEXRSZ<Je3vKPF*i0Nb3~Rl9fRZXoTE^(>4T|
zEq-9aD+NjLu%Z2a6Txix=?0sS@}vmq{NPYc+2I?aWJq5>4%9DIBn5;f7B`+>s|YBL
zV5=QTPq3rk6w0lDRocoZnrDRYOT$}JRx6XlOYNb9<(0o{I8EW$rPnki!M`geL^)Fs
zUz1!d5F(4G&P?-ZOZYq<DKx-?jFQ;7;9PT_m&z2Y%Ri{#1aOe07#a3$H%2Zz6p;Bg
z0u{K6vsw#dTl<SxmhR~exsE|=D9kUT_lW6$hA7p;B~!R3UO!wNTZU`|Fh>OZ1^)C;
zeeB_P=79rk=?Q-EMFf0Dn_U~A099}wr!I;A?}-z#LK4h=kLh~@9P1*8MQSZWeGHzM
zGf^)fcQk0Ra5xig7e!)^vPQ81U);`FYlSY~T9swjF`i=pdi1rfmatWnwn<v0-t7qA
zlWaP?V?VU&A^o`oPYbUECStTbT`7PwSdh9nEIy&HrJ3JXO=eo(bKaZK)4Rirc_Xbf
z=0Ae9RT&pWO at A`m9m?8slr!3#(FEiR=%cy<KH8kwVHx?!EN7CjGVE&Hlj2VQQmTV~
z?6ku;y-WNg`HASAmz~tq6m5;mHIlge@~L!XcpdK=N^vu<o>{bu1WVXQt>2vLntZ;a
zEqZgt5fpK17++7K(u^{bXX%f%tGKrJxEyj7%Lo9$wKCFrQx*&Y{tjwZN8>52iuFP+
z&Pr3#e?ey97 at pf!0O}l4NWB%_fquq at izX?MhETgrrA+s?G_`lYQYP!UM8JW)r!z at M
zSw(arayI at Wga%0vFz4n2k^%Kh)Ww>yPpkmJ5<LLvAdyr?r)6FGw01)Y@~vWZWCdJK
zz*-Zy8E4gJg>nA&#&JH_rM_|{#LK at Nv@HwX(~5r3KTXQIbw0SboeZYRoUntW*$32P
zaqmk!iICA~2P*HzXZgY7?OMpm8QDKLKV$C|DT?78B-yuoepyl1qDRIupwhiNf0K;Z
zJf&ZM+wQIX?{DgLUxKV$CCX!rex=<F-L<@3wSGx*9zTi+c9h(MG1T~smy at A1lY&nb
z5cB#0bod}NuON)|VQXJgu(Qx19l3Wrt-y|;rm_sz^^!zkDC(3EiBnea911Pmrr$Vt
z2ku6h#hL+Na*`CBitkpN8hZ_1{MrW}vWo*DV*-O8`Zvc6C-N|VbC&5ku)}ck at F*r|
zop*}Un-BTgn!78z0YTAB2l&(FW)-Q?hvO`u&uHEzTH{0uQK&9zltCH|c0L<P<>xw}
zFS5+=tI*fZYQ7VB#)lSj+C`mU4`W~5Uz>SmzwDl}20%7m at +O%VB~e at Hxsp^IkSI|m
zm!A}aJ;o52v}bU%y8^Ih6d4;)o?8`|>r-hN{Rx at qice9H#`2P0loQw4ylHkp<Zt5$
zF4m!0MfEw2zQ*23V3VJi1Bt`t{bKBmSDMlYPY~)22$E4MiE7~TwVfnZBGUZ0nBQ>y
zZp{`b5(F}9X{S~`YtH6Q<l1RtgF~WtXGa4J<h$+W@?g!ds;^%7w?+065{)4SH+j?v
zqzIjKd}>?&4h@%8l3R|FNR?>}K2j4mc0Z#vCx!B)(N$vOu)JAp>4VPtdLqt!fM~JJ
zLTO4+E$4Xbg)MK}>oZwNtYfz({fFztA_|NZ$bP$fL=QTEV;~^Zr)C-=ho*dhL;~2#
zLJK+iMOPD8rbcCaPcZo!j!uyLW0&WlbYG=L*5l_F3Y$gB at nD)b>o59H_ohs2%XQ at H
zl~#alO!;$7kF^T&chF?!VCxj|aJXNEQ9s)sBBu!{A3n@*>?qCr{;7|0P%2Y3!yug|
zi<0+ at hlg|wnE)4EPc}CCtk3khe;>4s45WQ2_nDzIiAwY2UGgd2jts1wGhQ-bm^`fK
z;bv!nG9b2~c86fbSstM<0u~m)RI8=UNIn2RW30V(IqnpaD at gX@FdQD3(b+Afc&T at M
z&{eV1T>p%|(G*00>>$wjmjap{Gp-8!7`o^aohp#bVLwdi*BR}kddpaxj4GJArwjou
z-+q!HharpQ&B}Xu6l)%(yFKWqD$&GVusFthVgv!wukK_)Ke~h|W3FosWdcFbrvK&i
zAvYlaKNgR<e52GAB7Cn21<N`QzL=cq>3Q_s>*YCACNHgAp_K69 at QgAcl?`Q>hg-pZ
zN2J$OE09v_B~#*39_9^2iZ-m$lA1YZ7`%@f{h{j}7EwyzVQ|vmo{o$Z_Fa+GS#+;$
zklr22v)r}4z6*daUuun&T4S{*Z(q^9nKp)$(n78&LAX9(7e7S;z|wO%oeD!Ol&c1Y
z09|2{k0JQX=iv#zk#A2mbi^>;8F_oA-aSSm2MT1TFi-ZL at gBHUC}i;l^RnDC(TdTn
z3A+=z8$j}KyYQ<B!Y|)mhEy_b+RI$SVA^m!{F+_a;CqfoPJ!?Bsp(Ue=XenGrlN-}
z$M%hz7QYkdF^LwTSC+pi><$QdsT=R*tf55gm_T_#{*Rgh(mZ*A5&hhyvP8x=?m~N1
zn7KpDGH7&sU9?(JUhR}}S9*&_OUJo76pGUULi1%=7b?=NDNxBrV6S<knh40|X{3#q
zVR=kAo=w;5_Xf3`Tuda95Y>?0neF9Q*ZOapFn~grt~|1q+#0~-ro>-E&=(a~h at CTs
zY>2PhJXF=0TXL-d<rgc(uL<~E8lQ*k;s<`HhJbEEla4iB>MCoB3ob}1{`Aj&SFpe{
z!pDS3-bhud)~ckmEzODzis08k8#N8(zu!h(H+2f*g;B34X<6b|{w*nT%HYG`;^z;B
zdKH2u;e;ag&%bL!sM|L~kz!OLMK3XrdJPisYLmU+$JBECzjtrkEHkeiRQfcN-;kAD
z#E926_Rj--b_F15C}mM5$Gkgx(mBt1njo~BK2$~Oyf)BNF?3EvblBu<j}yI@=@Qvv
z;|yq=0%kC-n%CU=9-pCM_J3KXYo#m?EkTTD9PA(DnNwf`C4*?WYvSNSAdzUx;A6`c
z{Q&5mQPp$6`;cJl9)iM0e5+=vz at KQPlf=tnxjWBF2`S(hO>M%VjZ0PX%v9#x-w-IX
zfVqiJ^mhqsi|HVZJYl_Jj-vvE!0m!!(Hp7u#;^xybQj6 at kCi4xfQ=M2l*dSd&)2(+
zdoKM>SiD{ErI1B6XayA#!9{7O#4Bf%Zdc>jK at e}-onL42E)2<ln+GYE)CD%v_-J^H
zCG||4wBNi at ALSd*aIK;{C}%_b9Z75vGl+G##)-o3q{FeYrp`&xlcGyjch{Vk;QwtR
zm0Cv9k8`Yy8R4Zo=pI1$Tu3tJ+W^VRh$k(}6>I00O_P?ikgb<D|9j?r`}3$JZ4>X7
z<6w|3+P=c^@hGt_&TUyA^*7a;Ja9ws{Br2}Mn-i<-^=`KZCxjbcVo at Gs@Mk>rN;q(
z80ha5-1Dq0gS0fZIKjvtEhXS_(T((b!gCK()NurHDzFpm6*z>Ccua4rA2jfxi!D5l
z%G at _@)o!2EaRX0Tbe=fZXV-fp<Kr1o8mZ>GwFNRP4x19=Hnh9!WQuOL9OeKu%py6d
zpK$5igHltp)`y)258vJF(rfA26qT5bGzPXx20(EbCCa%TR(|ZPA*i-*|9{xjvc7G&
z#$-}<Kjhg`1c(a>_y?)8;1^N4Hqn}(xSz0x(b7?EFMMyXC4yfO=v1agDcyK!ux>KU
z&wjlDV95YgK&rpm53}PR{o9?_m6RU7JG(&W^M0sfT3mshh7EiB7)}i6<+)W{8Sidf
z(M)pK3h?zK1o+NvZR%1=oZ`gTC=9*C>@B&&QaqRw_aGB(d>L182q~cg-1hmSPSSQq
zFW6vGG44K81=fdC&yAn94d_B`T=|^RKVn^>x3lEb7h|@X^^6y_aRuCPuC#+_ZeoAe
zOsZfq``GrH3B0mu7SB;gK`r7|)1O->3#yphsPEk1%Pq?;E2o1EyPzs5G$YWmYxakL
z4CygW16k)XQ_mTID{y7)djnp|@xWbB(s|C?y&P2ego|cz<T)pTEWdj*5dc-pj%l(b
zo+R3DvuzwG7V9moON`V^68RBLWJiuBrgiu|(JtCg_}@WAQ|Zs8VKz-L6zpt~@s5p5
zfL;HO$v6vNJ4<hfp!4~hE+h^Awws&~2%%$CA1H*NF^+~0hd#`k?-+juE9~yQLX)7;
z`=osuBhn`oAGw7vHO(hm=dktOos=zFVnlF1lM4*-!4U&w$-Le0S65pTc^~*Kj6-s1
zREDnf-LZq88B+*}Z(RFRPx9hfG%4*#v)0lLixkjlB=Ch3TZb>Ld+MC9;^ElpH<Sm$
zQdvizGDzR$*aEXWoB+=)EJDyCsR3D;PJ4L9+su6xrQRa86HS3q6t9(@sTnx#Lj_Le
z%^XU-e~9ncP7mBys4|<DBP^0Du9I_nNC%cgy}T+l?yLnV+9d+fvGct63<)lomhHQY
zP67W0jpEVTLBruNeCQ2xH#>dtoF8`5El5eFHzOw0rtI$(LCc7aaNnvLJGJ6<Pyri{
z42?+?Ub|p+v`~q&Ds9JNY*u$0CFLf7Adc6dd7x8cRJiL9rhWlF1zAxY@*euhHWr<`
zBB9K}2?8BS^<38c-KJ&VPN*(#SAmeC5b}>XqSRwy%(oj-XflT-BGhvW?g5>07QHu6
zqEfP!!<Nu?(xs$9`gceqq8GAL*HWVJb1=1n(HpdtyYfj*0JeZUSX||In;-Y3##INR
zU!57FOh-gfrxg(W6X)XzfC8(u)WN)wrP<L1<PK?Hv~eiPw|*YzSCSpe8x>6%D;+$)
z2}?Zp;sUq2?CQ#Y7~ubK80OCY6OG8M8x2gyKGL=*q2S65eMbMtgUB at 1SIJRnu<8&d
zWxKQ+rC5<Sf;*~mj{67t;QLFXRDk2(Roo_YV)>mv{8K~8i at Xk15owlSMXl(fio0tF
z?5wH-{X;$`ETq~lCQ+8IsZK~%!aIr+`mA#kSlq4rRhP-&B=IXeSrT4_SKZ>=O+i8w
zIBmGZ?(;OFzQp{dPEiMCY&JW>b~}+t6ZJtVM{p*#4Q&-GJW-YcOY%L at ojk?%_<mP9
zlv^VeUVe7vTrX9p8*$BOk;b`_Gpxfz!}3nEJNr<~F1a~_{uvia5b~|8$hQ5<!hjG@
zPKoqQ-2jAFX6nGSfbiI)MFn95BrMTfL%KC9Xx at K*p=hn^*e*@6fo?A`G2|XAvq!=B
zl!rjb2$)7{XI$CY)$%eL3Cq3#MTo4$1JKVa3l^Oi^x4tgc>7~Ehe1ZuQBKPTg<ew<
zOei{T&!1E-qs<c{$G(gp51@<2TG<<Y(Q1b(ge0QE&G^Uhnmi&L8j6u}+`akNy_*73
zI+>p5k+w}X<)#7AX>f|wFw(AGSObCt%eE83Z0PuTv3q>sR?LdNF~?NrpqWT^tQvQn
z?<aA$YGcuUeutV)(#SE(Z#;Y^o3ZX*HySfBO%<8JFX#*-i|>-4Ydn?>fq)a$b;eq>
z+?&C5zIi-~f&we$CQnMkm;pfdvyaRtkTYL$R+eX|HAp4cPP1`v3mU+9-7a+wIMurd
zfB23$<jAL1U+u3`$UiLZH)x#rb at 4?Rz6V;ihN{5rlxp;+GA7C!(`sG6S!O5D9Bn=P
zix;_NTj}0+qFc4 at _cLfDbrCYJrShWhB`Jno2;V>wz2%{;djHsM{+^~DAU_Dv;Vg0K
zRBKYt1+YcxV`UF~GwN5i*|R~unDKscp>5aLD1XI#RCI%0KaE6EJ52ICz*AW0=>`lu
zm?&a?!Z=eP0}A*K?d{}SFkC!16oh$~G{JYWx*y`qrx*^dUH8Z>PZ)+|b|zycd#j48
zjy5I}Q2~PeYGro4BSF>Df#d|TQ-fIRhFq0NqxOLf$teGa_iNI;7RxsXrXt}%@J&M(
z1E<9V*`~;YmQVcdKxF~MGY}!KpHSG}kyQk863iZVXi+)71P?SKdsk}44|5+eNnTmt
zs~uARajP80wOO|2Tq}A_)#Jf!YD2A_?OmPdWV=L=0QsK_rY-eT+02rdnuto}E at 4X0
z>Atn5O;nd0ong=uM$}CmGaJ;3lnRl~KfyQw^>Ana=DSSc7A&Qp{<7{U&byQYB;j)1
zNGPbfz}1P9>UsLSXpm8h at alA2-ALPuH;LD3J|P^Ul_rv^9Wben`nT(G)IPN(s%JF~
zSNq4bxfD5V at y8lSigeror*UX%cTG+HES`S&c!^<sEPpv%h3sMJI(Lbd<+1O#vqore
zi(4jV$*@2iH6wRTNEt%7UY%bu(~=?IDy>k&Cb%u4Y9$0v+`Yjvwq2!e=)G`AyT at W^
zZYFvqPxpK!{`6B*jM&`YLiu+Nt%s>C3pv<e0czTH{BZ$%`M}Z at buB2zxniz1DfqLg
z)9~(D<P at 0FRx_c`u(~Ds9D}v%*+(|;EHl4-x3|vXV+cIYPM)h*S#&FpO)Rl?q6))h
z at K#90D>mCvc2U at iJ;X8z*bAtPU`j6G&C!wP1?NqnAb-j>J`jadP6?`>J9wAAl;Ivu
z!Nro~tP7nJ;EchO<aIiqO?3|u(?!IRMj at w~5K>4kB_VkjV!b9K;fb7L6}b5XG9Pr1
z<Vbs#cX1MO258OIf9lqD0d^Eg8>~9|IiZI%NHD?yJWJ+L&+-mzq-(B#AV$x~v>4UQ
z&Qd at 9QJ~V+32BCqKC#v{&=45IN^qH9lm3T6>0_d((TKbKI|0I5YYSAPKj=7M``f*u
z003xKMGqEDN!CZq-$WL$ykwndOD~Y?IhErY9305JP}-o3Aqt*JTf%3h%+VneBdC$5
zESxV&zB_g&noz~Gr>pZ-lzQ*U3iD}e)SM5$@COvJ7{L5YaB(C_Wij6#Y;u&OWmt&z
z0nSK>GD<_I{yoLk)Jq(rRAJf4g8k at +knm5INQ}z|-aW<_l?J_JhOB^^n93ZLGuOA+
zt}rN&cfGmsMVF^-8kOsg5+;@a9#-Lb5v1=5d8zi24$1_|i+6cZSTxipdyk6c4Qrb3
z*lX4G-)}RDO^XKlu^g2T+Nara5W1kwYHj^1ihK7nNx%zBjz=fKbv7B27ZV#6VNeua
z5c~-H&SZA%^hT;X^`HVN=Z|<bjbZT<E^L+LP;ojsNaL-W>BrF!n!uem8?r5(aSnZp
zK%#XuhfhWthHYBJ+XYZv0MzKgvKq}*#lcBHk(<3B!K`)$%fzl<nXg}PVhjM<RG2yz
zjL?xo4lwlnK$CmAXc=go5OT5|$+7-6x2XwkttZ8Juk_8 at c=SEd8L{8Mju#ZqC5hVT
ztoD&wj{MV~k{Xv9@&?|j7F7R;bIkFQW66B$4_dlDxI(130q at jrIu97tT*)AgSL5kW
zs7;^O#ZW5FC;6<b>(U#o=W)7q_<w}F54WZ|h=6gYq;$W8B&MjeMFY at nBlYYPU|KJk
zS+giPkoz4rY7Tz-@~aPuY$lHr8t!wDJF*zaRl}X6)i(l;uc^VUk`);el~&~K-@@hB
zJrr0?kkqI648=vB;o!>>+mK`kY95hz6PiDZaRy}xIh^9h43XX4^f05EQ$82s2Es$L
zqvNr6<xrf##_Xx8(3g>kU0aSb*PCyLMEw`cXD$CUN{rc5?V%h3m6iKx;tUCnWL1F-
zTXgOR=SMRlr&&i_e|Zs6-Di}X>~d7kGrHh`Awh(>1?U>SkJ`Hl^~Pe{pSIBO6{zj4
z3hVEwLFvdzSC}rs7g8v7zD<koBe)GL6pobMoKKC1Ut~@Q6fzrWY9P1WF`mk8ZqHBo
zvmKa}-(+;8t8Dkhpa){CXch|982A}Q7&TvpLfzFU&U+L3vT&>}Bw8fb_>boXoXFxr
zR)2K%&f(}3FHdOHpU2)SBBn$6lbht6UeZI-3l?=1zhRoy$Fccy1K$m1%bTLd;r4IV
z;U;RcuTLs42!s0mzVI_|ZvM$3TFk}y#N?e;GetpW3j^!cCz0$?AuHH#`&BlqL+bZm
zR*N<|(vXw>WG}?3c>&1vI(r$2YZ)o=ntE`Fec?l3gFW8KZ#OnYs?_!9XIl|?EQj(8
z8XJQ&QzT4}Qc_L*KXt={oI3)OjHr(W(dmiX&82PW=(fTJ5T(z8IeKGA7$|IP;{Nxg
z#)eYAiELYnC<O=^>MsK|3oAPh at vzx_-god@<8!R{TduUlcW>g8{T;uP0g&^-3Yfyi
zt~+yyQNQ%)jas?r%-UsM-z21`#tXyx3g<q<rGA~`z>q;_>d7wI_WNjJ_rKJ1!AMKI
zF&}T3a~~uYC^UL^cG)AjfEc<#bGM4~#kcl;kZBd4%=~<`l(7|hA~SJ>F*;|JesR_v
zI at udE!nMQ+4^O7A$W2F57+9vbTBnqc`z6D^pO0*Vdq_qP*X|qg>wo(X4wy&8GXAHJ
zL8dkHtd!lS+7IjhWa4juq!hp8eK(gmyT%PITl+pTa50XY%t2%Lo^N8ld-5Zw``dEv
zBjd`|BO!lxh(*sGnkkcJq*m1W*54Glj-Gmml^~mdHcU?){gIG+2b at xD5qBr|uRO%*
z9P4V4qG#<sfDj5gU=P--t!b5kX7#3=8+rIQRFwG{Umr at kc7}igL=HS4WAzH^+f|lT
z6 at _2XTelnJ_n$q56%5;g7*?UnJ!8x~8|#f8)90UD);fF^D<?3vJeE|00_$Av_TSoM
z at G2lrQ8Nsp@LnD-b at Prpc?xt^@oK at emxx<7)%Dl0+ZWOo5wCb6Ix7SqKyy#aPk<--
zoG1QKe)6|Do$N9~7?nPaq^xKry*X#7gs%PXoEYa|JzbnIt^Y~+sGgxZ<qZSRQ-X8j
z>7hxjk#*^&C$yDAHPOfhzyeOIdOWNfDr(GC@%DwtcRRXi&QOws at SV?d%#L`kvMv)o
zs{JW2B$p0OnFw8+5S>Z0NPNyP=Do7MEZ2Ln22+}<E8}`_tMX at Ybq2ueg{xo5dn`Q#
zQD^@v=31b$+39U|=GpF@<j&rez1m*Zg>?Iv$paJ619edmqj&6m!?NJioQUBbZ3hH$
z-Y;wV(&r<zD39%84J;x^&6Ad#bQ-$Shw=bScPkp1Y+lglAk!7^)E$l=$sO?ZBNRed
zfqqKrec;a-%tL`4jsJBmHE-vsWQEL+suev>1sKrX4W4kb-cY`)(He7p`ij_!L#Y!}
zVT|BF^ol<13AmyVnaALgj~sox>@ae^zkAL#{^4NB&Q92a3U7L$fnbp`J~RaB;93dJ
zvt`>T5~slHRe|9@&xg-pRaS1uH2)1UCXSD?A^okh(h0V&Xo5kj<MOnL;o{fuXvA%{
zJM=#)g|)HG^F3A?8Hj=PJ;l~q9a{EVgbU;GjMPcWTF4{iAlM}Sbeer$puDT4PXNE*
zV<A6}XM9u3x_EOMVnpD{-`*ac28z|YS%;9t8QsW6L^u5aKv-t;5ddlbpigvgG}f8R
z&zp;{mx81mD!}D?Aa_aJ6SO{;0w4ggJ(ynxUN}OB?3#QLr|0)g!+*)vkSH65|HjQ&
zVCPQ=LUFG#39Mk0X#omK-0v4+c_~QRE%OLItSFypGFIFN-uIJC*ZstK2O{WwA|D8=
zDiG5O3bSbkmPlv?BU67e<VA4;UW5+Jmo@{#0?=rtqq!GW>1j!bv3oQhMK at nZS^6oR
zht{7Ek#6{u!^;KtQX6S{!%4r<x0PO at zi1vZ7kmblq{fa+h#nsjjGzQY!yDw$mt>*0
zgTkTL$Y-kwh`#w at j>jau-!-#feBvy>#6~wHQUC-PwCwEe6H(&`!E(8HdUre*ocX5N
zH#K|;C{}{0gM}GsJcbsjFb$p(4Sb;KCN(I!zNwFStpY#TE9B<iBS0DB+Ft!@A$ft6
zN|tU9N<4LER8yniAIReTfuyr8vH8M21C at 2wQG;5`6I(S^IT87#3#M4~1>>4KMeJYc
zc{>nyOsLI+;7Fek)n$ZNO0SJWsK|PHbc>rjuor(b!`ma^AIF0W0)%&f3#W9`g5y(8
zIY>2y%-#=mfRU~!4Q!-1Oxc&gQ!rMJ+y0@(P4tuswJnFqW}%boR+3hMXc+YEWRq33
z*1a&#Ozsw!bnA)FoV48SMgW3tlGlBW7aFjT%V+i&dYHvQ&>dV8cJqN%I$3DSbK{^J
zxlss$rFos_hcJKvztJhzeo$#taE_3jhOFczaFhbnvu0~vlm0f_bk=q;U%%Zw9$H;(
z;VJ;rUuTnUsqrbC2eba0D4=RlFWY0d4=+4{4cQ^<ICf{Q^+|$p{_%!!kuHhck75%~
z^F$VIuMRb3RO5G1ko|)j*#$Ma)iaCl$t@@Z{Cdra^M`pfI*AhR{U(|VKz4hr_N6*7
zb=gEEv_mM-9lk0c<Yv(5LhN2Ff$`mKBzKV2F41yi`PQqac*N&shBA+)Ft%%BM;37e
z&ZFqsBsX0aDaMxZMM4}iA97ZuF0p`*qbWnzOB1(QW;<u`6~5rEPI at E_M6!I8&qm4j
zo_nqTla45rQAG&Q!(SA-2E}4ZRN3b|E&-%QFRu-aba#HRN%ZOoy;FdN>s00{yhPDF
zT%aP=;%N5#ff`vRTak85wXmh+wu5ThT>;Y+BY1g{mC;?+0u1i#i#JP&wp`LTGb?M2
zP~H@#S->!Y=r=sZPhk&;R&{3f4ZH|;1pXyF+ltWJ7fi|<Qk^J(h&ADxiX<S4UYn(}
z-Hn<kXLB{xsAR@>W=xU^=&(<FS+o9rq7l2S+o(|FFM#-K??v*%iR8;2IVfjqaGvvX
z=^6sQi`-N1i1aQ86cmoOOd60)_}U?!5cr2vASoK;;{jNMt7;>poyC>WGK~;FBCeQZ
zDZgnvCk|0g!h&K_Rh%)^mN40c5#@lY8}c~<_i|qdw?KJOW#%_I>N>2X`e`TpKh-SZ
z1U;c`Ku%bS{unMxzkLT4$)dp;qRq|$_(-Q5+XHeLO_OG<_oy&cC$iL<sr(8iIDvkc
zjiI?gFcf|cz!oqM9FEf1z0TDC_sGY7 at JSVrF4W%viV-owbr^0>(upyIdP6Lmc7su_
zmL(y-gb>A=cSU^2Ih?8M7o)R%{h&QE^YVj6>1_=Fe?wNR*$J&}f217))Oqe0N2;zQ
zLVq$TB+Ct28?KIH^z{yy)zh_?j5V~~V%jX)60^lmfDWP~1~BV>rmKVBh6Nml<~`oV
z$U;Afs1@!$jfieyhj|H6+E_`7iA;OiU$sie>j7&1lM9`ePJEPSRoX6`LNmb$w88xL
z8TacdUt8_TVWAFge&4QmLSK`rjeUF)<<Y0^0>vOBv^`Nr^aJ?ymOlCI*ynn#V;CZ3
zd7VD!lo}A{#>w=b!ZLSuDn{8WuPWZhnnD!{Rcj+_R<0Zq!rl$mMm at 843a+UwRy2Y1
z2K at SwZCO8yk}|ye5&8LQDYUq_hjqcP#cX-TW%$TgN=X-;2hBvxe0-7{VmbylSkS{U
z{1 at Wmu^+il12Us2fF_=e^$HPcA*2CBJS<<&H;IFmzvOh(3?H^}x~2(@?bk+Z&}k8}
zQTR77Mo{nZ&*o*pVByN;;GV4@@?Rs<z#|jU<0tbm&wcNRfVD*TX@~Za2{-loo{|fN
zHxa!-vpG}#`RI}W@=C60ddi`lno~~-JqbA?3|}Ji?s9EYtiC}t;E8QvrLZ0c1%vsr
zkUkYz>TSgM+uqnK{ay_Mv~!#)4;KNkl<kvQ!yE3FfnVSa!B>#-LqKh0f~=wlzo{QV
z*FXAW7~#4jv^unPHY*BU1F^`@CxaV1^v)5IwQ#Uj=+3ONE_^)7Wj>x^N`pz<#+*E&
z=U?Ud3p}(KPoZ$>p{roxZ|DEG{|ymEY~#ETHJUz+mOAYQL#Q9C^~BfuU<GXE{L|}*
zqmN4Us&q0!_1kcJgvX!>6fmouD{uGkQ@?<K6_PTHHiLU3S79c3 at iwm+0|1ErIaSPo
z-M6{B2teb-h)hj%np}Y+nPlMuBAxsyrPVxRi=QwM;nua+MqK@#mW2rc7 at ei>RE at H^
z9juYwUlqDRB|2<8EDjiC*<2C6O;YAT`J|(el%73}3~+HdxAUx^6i?sM%T_|6P{lbh
zH#zvL!~=D7amQr^COL)V>ZDTX<|hYVlSq)U5_hN#K^-Z4!NL=Jnj-20vD^n?qHD>q
z;#*pqjsJ_1mNTuoo4|Q8mPx6yPy;ekBC-plHDBh-zeA*^BuBzEMd)wxP3yLc+h3oV
zgdeBimTj;KTr8Fe74UaxFY?z*2R|EDBNdR2oQF9#V?E|S=$v(LQ}H%@@-O{%_-MLH
z+|7cOW%d=#4ak}1o5@>IK7Zl!fmzWYK11%uN2CY}+FNPXFj~k223(JOXKQfX)*m!t
zCz<Sd=z6(M(TqZIW%q12(<u_EQ4YfUghMdVsRb*9x7HOV)B*^Ueg1u>cs3U|mWsu^
zf7C`i=-HT7XuD*Ws<CPHtWOtCm!b|*%UWNP(+PT=qk!PZ2oMRe*n^iy-IUq^_w|R>
z#-SF<pt;`BARCVV5v0oQc1QZiH)nM`!*g{iJ~ym7B<N%PQ<-jn9(iDP)bE_26AS;O
zW?%x~#Eqk|k~ZKUThN~fZT0145@*Qf+-ag9n;LuSN(}DfCl at goB$#Z at I`iIHIZ#oe
z?|@FdzH95eAz$_=`(ph~-vjDGsc=F?Kt8d(n;XE;txHV7gr4~}K}}*mdhsL<@rbU{
zOV#8(>}Ej*a*FvH?B_a1S{oTZp_R`^fd;vuD#6>y_u(pBc=g2;-#vZ}E1Z?kAReV!
z$2FeeIgC{0qeN=%C(Tb<@9wsD(s*7(3y(q2O0AxTb7M*GY*NH<p~-JlW at 3|BW3F2t
zf9`|?T_-3(g!+r5g4h8WG5rzCjvJEAS%WGvi&cYQDt<}Z at 5K=Q(<hXys+4m-$VCZK
zm(y>!pVu08TA0bq*rrCU_^06Wy_VDV*BGaXJ4uF306UG-T*eXripz}m{9i{s2c+ZA
zGXRsI;j`JZ at Fo$o1;rY$Qil!T8ec9jHv1*{rC#i=a<EI_AN!Er at XpJ8kcfXeRbHuV
z&V61!oen^YCpY48y;tBym_oG$$jbVUB%IF()vT!cC!%9BxbDvR|0N>5wuC%#VgnGj
z;oK#!TTY`gJDF^-0!0M?^=&lm;M|yI13S?<w~g^w1Y~O+(LKB<H2nin$T&Dq=14Re
z4_>FTFb?Y#D7lxhbtVD>%lI9lF*hGgU%Za#+;PQLH$Fbr`v&BuVqGti^Nsn49YkJu
z{G&)s65v33?sNKCP>^}(TyxE(W7cq92n1*{GAxtU at yzr9Co81OOs@JNn)ZmdX*{oj
zl?1pIybfwd3t|3h#<ZXxFm{2cmSEs4VIGf``K1Slk7H&RgsAyBoA3x$Y87vA`6}$A
ziyT>!6fgL_A&l$&N#Q(WsR_a?+RqUYDd-8#Xz=9}QT5tVCVbE2S%i#nY_40+g&la0
z%G(Fv$t>%zYP`oNRg>2sCECeB-~h at 4e(WMVE}L^t7ohSy;G<zl<51>qT#p<~_z{6)
zVdcnQ+LTEo))<Q~IHh7QR53V}SU<QEfv_ai-)M!e;zuVQ1xls&JPJ`jGIR+l-t4Ub
zPwfH=M?97K*K5sd$YV92d^mE)ib)19V8GQI4}w(0o}trE%{!>K*`>dNdcih!C1M8=
zt81UzE&9VQXGF8HoeaY4N9p`D)8*3nwMEs7mFbbQ3*b0uz$M1~)>|<r#+;5na9T?F
z{(>V3&GL?NvY7W0$0k26l$-gjZetkLWpDKE84ch at xQ0ydxkiF$6vTb{w?rq4xZ3Dy
zVU?w_z$xP@?58{rOCq|~mju?|gJv{)>wZNp0501MbIISDiNE;faXCd3FIvhkl1iXc
zEohEQ<+au_O6Xit3bE(ywOY9W$#k=5S9xQ}`HlX-a1Nxcb%{kViY=TGo48NG2rk5h
z<}x*&kB?@%f?b&l7mn@?CE%joR``fDCC=$i2uJmW9xb0R<SmC<3+>?0*G5U0o4-A0
zE5dzO8E7jZPc+m=QxIr2ad&%>-3z at u_~8wF$O*|PwH_WPbLA#<-dv^1vJe0+{bd8e
z<KxY3k3dSuBKwp$wZO*Xv^bYgx`98``o8q_Q6;3PQp((%r!u|-(~awP+kDB)ZJP7@
zNGFrXMIWWkM^lp2bqTIZ8t#*{8f;T#IVyMhQDxrI%H6Z57rgpO<WLuc^LO;IfuCB&
z(T__1G}dO7a%1f*DL6T28nY(sL5`BWHF9j*Fh{Jrj#8E#;NA1Xk|0ggwm2<B0Y#)f
z)B<3YKF*!3{h|{6dbnr>Y{68_xMBw{Nm*Vs#EfXEKwNmJn41Odfl=eZ&&Hd;mO!6l
zSC>62MJ<2 at dq^wq<-Ix{<)g4vFwjdBGhg|KY*IQ;Z_WpF$3het%!`}=2 at ew~Rw>7#
z<XkHyI^Wum%FZWz9}Vu!I*aOFqh72|CcB;)k5&w}2W`COKM$r_H=G*3d8nDzT;3H8
zWmg^iaLyTDnbV!nBXByP&mu4JIPi#NOiDrSQ at CqEJRMj~%lTD>J$6i4qetCh4{()I
z?$ERTzhHoL_D;ITV7nK~FSbYg93LvJIfm#sxmVGC+mpk^hGAS0QK%8R at Xjjryt#B_
z{0hVq5URbITwhUaHs__<zcbznkt*`%_H+;Pv`#SEaQ-Ch3+tEA<a3Jj*f4A9tHs~{
zKGqOzDbc0`y%<%k0$N_|D7QOCAzpg5jPiS;7ZDfO%TT99p;9+g8FM3gu16OEL+X}q
z@;#gp7J;<$p9E1KpvSb(Q>b*A`l;I`(G6ChI#V~y^j872=8|1Ob1B}ukJ8tnLGpg{
zxd-&|D%4Bb#7>@OV;$jkG!b2u$#Q_JkdjuAjhG+6*2%GT3Uu0Hr;(#S(JQKdv50Mu
z3Yu6iXJAJ~87F-TGd;l2B9wvqQfx}wn8w~|YuR(sHP{N$QlI%e!?Gn1wU24ODxd?_
zCinVkG08G!u at -X#Hiog8tDFbdcj(k03<TN>hLN<jt)DJ)<L2s;U8O*i6&`sAK0eNL
zr$9#nWK?!fE-#Vk=mPHPHEF76#SFZ_*nha at jE9dkYh<qUQ4=Jl=+}SNl1OB?Hnz@@
z23H<0>E{X*Z1He$Va7QcVSwA)?3&M|tujO6oi~$3(l=o6^Z2NNSZp~kOwZHrq#QMW
z)w^Nn3?T*$10C8E*f(u7co<ez+x$V7a|ga*XQ;y at z*9P_rfUTi7Fc~JR;Y9Rc4sQU
z#w1h8#c+Q?oHF5-hfVT$(;fqFK^k=Xwu9e5B@;(?*b39zGrm3hhWD;Bb9hFKkC!IP
zh~cy#D-z==b=3SGydH?C1zgxM3Ulw496C0br$_R1wr82T#R<&lK!_s+R}@8V(P~0T
zpRbD3)S8ir{z5zUaSVfF552fjJNwP<HZh8Nk|rvV1&qC+7tTO5Qw={DsEaIIYP(r0
zGKjZ&@G#Y2bU`-j&@*J2?>a{=<kSvH)93M=B*Rw&pyNh6`(i~`CdtTqV!oPLTEN$1
zV+Xkzciw3L!lPzonHXgv;6 at XbiS>j1wHGaJ3h~ea29DAiIl$ZxJkjE}3GpsI`?%?*
zg!B&<SS93A+gJ?WmPw(fn~4YOHgkvn at Q0OW{SiFzbghw1ahz*%L~E at 3`O?{h6)JYp
zKO4o-A~xNPd3JbwN-i)jrSa|t$jc&mi&7HUp^SW}7(aZd<H}mw{ySE(2e;=W2jRzT
zEVui^s;8IK2`bBF>(@p;3yWq;<e!%}$Qr-2Y4ilW>MK=$FikuwWZ#9NZo&yg?vXdp
z+ZI at LDvfp8;M3j%EtTczu0r8o;-QQdP`_gx`F0<A(Fd9pFhaty^bJx`mZ0L3(jCU>
zZ$cQ+<qf}Bp|sgPz!P9A-m`FGr7`(Pt_%gMLQ?I>W~%z{?X1v7jEqD)SeCKA44$Mf
zzoAn4h)yuRDJN564s8fu9Iu1=!7v at C`%*%ecYEI=FwKay?3HTI`r=8YhvoDZ6{bj7
z0JjsVkt<4w&O^_mtTC+NIHoX14CGv&8<ML`4D@;v0zcJX&z#`5j_XJ5=eVAD0jR{+
zatyTKlP5r05tO@=xC1yEGqF+Qo}}F0Wo;4DUp2}1onswYeZRo2o+?~Vo_u?Lu4Y<(
zBv44ke$zUbB>N}^$-4Z8J!%Kb<;w at Lj1HtBH(ts20Nx=U!`Kuz^rmo+9CY^ZsHQW;
zN9k(qR4JH`)CV||vS+%MIlx+8|Bg821(Slq4xIO$X0}lfsQGM#S3m__pW2?xv*(in
z=&L~@vpEWOOHCAb{&IVB<b4;KsrZ|uxYpu(9emXqd3*C#;2wt-?pUN`IQBQR^A7dn
zDrDLU$6W?qK{%h!@wKyjuf;aD!jSE#pOHizbEtVB;Wrs at l;Vn4(MO~jFXR{K#~zBO
zV*ioO%~gFKn%za`PTH4I9~ZtwMH2VIl`d(JIy47Nu(e;@uIzHLcgy=T5qP;^8S&^q
ze#c8!N36qqkd^MEAS<AEcJRxrqUJKwTDwlu_3vET=k+hm#jc at i85D2XgB(1gmayWM
zc<O9NbZ$+zhVA7ky=)VqWg^R-p+lLGIo{)Svd+g7oG<OEu;g~7in&(8q%Y8c-_LUb
zV9cJr)wu(_Dfll+9JcHB=VyfmT>FRQekF-t#WBY2js}jeXpwWtTVy^vbVVwuj?r~8
zJ)ywWtrVxd1D42 at zd6fZ<7=&7NC4rZzfzy0Qy%?Mz?^|SCgrY%7ErP&K1cONQfy;=
zR`i<bRnr3N#&-kSJkxXmri>~6;n2Gi%&G~k$tS)2LS5z?Bc!*cJc{&Ig(JLAE6B69
zr5SCH)xjDGQrXG8YNDO_dQvWgL3b_uG-z)#v}!n6 at YoE(GB$LZ0?OQ;on4T(!>8#o
zwJLib(h){bD)@Y+pB^SLM7}@xv`|nO*hJfm1NLs3DV;rgQ8_+ at LC`7gBC)&jOp|0x
zq3}N^eQ5_I9~B>X at u!j$ypYUUY%BKar|F-01ebyyzdHO-5+kBnb#gn#?RZDqgs|;2
z9XR)ZjEAPaCA2q^waedtfsukAg()M(^COTdVn86|E)cze11^TB;YRm+oS#Su4_qD5
z0Bs+Qie*@8)frP`;G|8PGNy^1KQ*4P#LHq;vWc|;NP|KV*ZXC2-FD!?xZBvU8^!2!
zmB`EM{InINNiubAf?w7tuhDeVu!gwG5X{xxn~_p{&Qo(}IyF~nB|u1d?1){4SEuLZ
zS2Z(n8v52!g0E(xxZy<~277R0o*u4hHRjy8xl4~FIpxCTX70`QS-s*%DLcpDN(A!i
z$y394zPpeaPE*X$<t!1Roy9rM0x^nuj0ISvRL8n=R`6P=wu%nZ0OS)Dl|cmzJs&(6
zYbV at Cb6fTF!!yrS9?W8hDW9D1z at J6tPreK4tyVT~FW0ob8Dab0^$bTO_AYtu5R};x
z8y2W?!B7Vo1>_L4xZbQN;)dZNEPi`cx&<ZRQA#LdyOKtEa8&<DrN)OjCEota+u6<R
z{CL$d05;{Hw{g&Od`JALa;ylHX@;vO*1Q#bT}O(R=_S%h`;b*aZO&E at e-cj(QxaZf
zk<7TgqlbByH^DN#F3Q(3<#sFnO5JGYxz1PyG*5z$ZLLHx^$<DWIHei<3%K)cv5tNq
zhU?E5dd+wnHxh5_JH%{;R#w;K#*^HB0_4QKg4Oa?BCLS>B(>tNBBA>j$GBoZG%;W|
z6CYp11?d=u- at sc`qA(7RKBdyN+(9UCb7>C19E7|#R`|V;CD%%qpNY+PhlkivQ`RXD
zBrqk-+sW!A=rT%*Ho-|KiS7*rf~t!*iooHTwJiYWW6 at nHG<t_f{vc=Y`HwOnsurF}
zG3v`*nO at aV;POvyuKz`x==BB`w1aF2JqDO66w>G%Bi$p4;i(zc`9zUL#6vvcqr4p{
zaJ~aFsVTijJ~!+m3Y}tX*#9K|Ib(`SJ1=x%ly0k?m$?Ahx?d!B(ecgxQPXq>SiO-C
zK{WiS3<lvW at a)3D^D|V`?exkg at +GI~KaWyfD2~1MCfst9R)@Lv|NQgxZ=-}@m*^Ak
z%?wvqP3lv1vO1gbj-|(z8z~q>@TbBC12!ho633G;mWH8FX1&k(kr8}Fw`x%2GoGI5
z)_1#WFzHZ0CrP7)*5^x8srq&rFELZKEUw{1(pqAv+VdfZ30+@^wcA9fpy`8z9G|7C
z3QghEZYnP83OAiY@;2i^3#Fls0)4Ly>WA_6^232Bw&bbzAeJFvARBVzj92COv3PF8
zVGGj4)s4sZw6fw`<b#0t>(Y*@)2aKoCe`kbSkRy<VQV-_q=HB{mGpAjhJRZAH at 7=D
zQoT7uXU5xcYT|Khe>OedmqK%anXCE^!37E-^RD~HX^5$J3Ib-ABrU5^jJ2yC+bGCA
zOQZeE;6 at D_+94H0S)uJ&Bo(e%RT6Ba&xdWeKgCbB6lQaLG^{q#{%o!&hz?EuV7)z8
znZovfy<r^1uV+eqU`vuIqh&cmTZ%y6#$o_|{iMRV?{)L`LHd&c0#|QZ?bfesvcOxX
zm?l|31;33 at nX&M5m`n?9OUP1++qJTT1eGaY3wi-S4k^-ff4A93JEdJiP9c$r1K})R
zhDhQ3$p#7FAAO*7uMx^*O+EuFZazQ|*Pq9_iF3@~6NVi<$RM||y+aP+<!h8S8L;|1
zP2@`V{1?5*GBxf1<wtGd>AN0F1RTa2boBsw8kudQD^CRn>IJ>ov1Pz!cCjM%t7boH
z^I*o>NB`?zMx?*TR8t|8Hg+-DPNg#Q66gm0rawlhRCiOaExBns2NC!IR at PAR9Hyrk
z!XEERzqP&JCk5iE{JTEJT!)0QsJypnTy2d%XdApS{V*tyS&!yYAjwwPNf^Oz-sEpn
zp#lYH`ms1pFHJkg7QJy^Xl*kJ5ASK6?CQ>~%_#wBttb=1nn65VE-7`%Qad^jJM_LQ
zaxT3{C2n|>K18JjcEwvdKPO?|{7Zjzg%A`$Ej}3Ml608-;|I#Gkt2xKKVx}OQ>?!|
zCu%~iff-S8L_}Oe^ruNrB8aWs++Y--IrcYXKysEkG`Nd4_a8GO&0lUnKF{E)kxm{+
zFV!DnoUSN*d~)4#bc3n_#wTam`@14uX;XbbIKeJwuu++l73Hh&Wp!sNe`jkUXHRAk
z!cx6c-91Q}4Zi`E4PZPf{EZ1R<;@e}#BB=aDM^a15Z1;#flqqfb_zYG))D>CnlMEz
zlGkEr`u*NQ`a_u<J4m7*PrntWdhu<oTdpWzDEssfwNhS{E9v(>IpZr${<=3-Au8B;
ztJJxw`N|DoO(k3JK;d*i;Rw_Wx?2QX`Q>EE7ESr;QN(5c;%dP1DPB(Z<wy-6zwvg6
zj9Ki0wgKsN@;}Pl=k^EAP>KFZw9&N5af8}SxrgD$>lXA8NRjj5i<+XXDG(<51j(fy
zBY)iWPgvLO2_-(Rwf-VNqU&II=&d#XST=V+g%AY at 9UesQ;p7@)<hF@*Q)>EiSg@%<
zG0lC4DdzB_?}gMSZ)XBQ5xBC!vpfF^{tb_Xs2*JDliwcF#K#bC7%6Py@?FbSl_4+Z
z at UGkgmQQgRDtBb2u_Il16poe+)P*#WZmIgxM~8ULXTh-Oi1gmmDf&V)q;Tkpy$lfm
zp33`abI>0-olY>y{cs9(>;EktD_<)uC(>jcv)JHro2{M3$D~44;|aVuzmmYwPYivn
z)Z=N4uua40`rv(XvbrfY$`BTVBy{tPyl^N_B->~~snnTG&j#K$zTt%C$soCd?JORU
z2Lo4n-NmW{oCi=OKKpk?pNWULTe=RN at fG4RCd${%mKN=86pJXFm{Y>mW+C&Ch$jN5
z51pN9)=NLu%B9|0W;PeC##{fv&nBMx*FKh1*%Nk|a{crxu(?HAAfR$VtrF1EDi8(h
z?_{U2^4PymY`^VBG#>U%;bj8B52Sd-8PJt#5zT*F#_q3L#5f0bq$S4Eo$f@=T6(G>
z=||ChxXN{jrup1+GRKG&oI5`f6hfWPyuS%F5)~5OP&d!SbhW9OQY|0~buhkZ<JvSa
zDl^!No!0Hpc<>BX;q~L*q9DY!#X`)Vadl*Bbj`?p(Wf;T>xzEKV-ZPli&iJLjq`wK
zG&%7^#yq?LdJ{#0z5+`TD87C=moALFMxzLp`rc12w4{X;?3Qg#2ytNa_LCoK*jlF6
zgsK+4q$9koPn0g0d(9fsUf%7f6o>W8zpFpU`20U0)C|sRF^O`PvLeeL!I84q>3b+m
zmL0BTxfC5JoHVAclLwfj%Hrrp&xN)Am?60<Rk5O;1aUkXg+*WHOPEULI{Eo7qqkx}
zHFJZzwBvh;e2Tp!|8jevAjSpKyD~$|wwTfjg<^u=%LS4zYQd{$lgSr%w><nGy^^$l
zllU9xIt)jgNM)!#_o1H#H&wg?_^S#e)zi!74CaMTl`WO$Ot=66(@(yg{%FOD%{E-b
z3-77S6LJ0C<iUHYxUOtWcBXhXNi5)G;(A+fhw2gnu_?!?P5o*>^7iR00pQ^=cwu)k
z*2n_1J?_I<5T3ydynlfhxv|F~x-~B3wSKfzGmao-&>Lj&g+y=YRhy|yv`HHP*vog>
z*d;H(Vb5ULQ1l^8q at mgW(1{ti*wAo`G=cPQ_+>~}qh&BQGRhmX=(!TY0mBjB_!$!)
zDw76XPZ=RB6W1s+cwiB!S9W~^1k595u&~n4u}ytlF8&v7rpja-B2 at 1|QcArrKw!%y
zP}utlPPJ*v`4;90TDl{dnWj>hZIGB`hl1wSenX^e*?jb>pv_?S>e)`xnTtkH)2l9T
zfNf%E*j3X1=Oy~R(od9P2d?eYB3H!rFs3<Rx$m3d9|u?4yvo(>8f6x;=r%MiL7&~(
zs7lPCT@$y9NKA at u7#?=6Sj*(x_5)&*po<N6Xm#~6F%G`kr2d at 0wP_Q8q63{GlO}W?
zE6GgGlCYbEg^$B>%rBK`ZD6t;ehjB<SU!Xk^@wa!1;dAq at yJbp9vc9Zk2pwfW><sa
zSx;Qv44B$~lc?cMX(LS$Rr3OG%J~rSfgzzE;ux#MgDggIU;*!SIVdTVCKw_I<QUE*
zEx8#qFk`0KfZ&xp!ju)5+rNx!gp<@PK~+*WMCV8jL|6eI)-yQYl<knJ+O+KDzE>Ch
z1;nNx*~>xe1bD8rN3W$DYn|Jg85mY_5|azJ-wZUiLIr*6S{gOj=F2wPwW9|jC_PV4
zI+E at rVYbLeSlV?hcNSm@(DS^@fZ<S1r3E?k9aUD~VmqDUC~h at HzHXU}98RLoUoe0s
zhuuvi^G()gnRYr_+}C!^Y%iQ<(}b7VVIw#HSB>{}+JGXqj6#>cD~u+7wAIUGKoLTV
zXRc(o6A~|ooqMPIlf43pH~_k+K*R)!7KOOJ+d?UrEMFqbN{=t7G!5w)mkET2$FA7X
zG};mCzcJ!_K82X{1-lZJ<$I=~AF2SbNNdlFm`hmYxtP}FEM at Ka6>Rk;`hh~|KKAIq
zrF3?$`zqFq100X%TWOG1EA9+`3YqMux~*R)WmHhno?mQv>8}0itw?`vVK=W*+JMgM
zBOQ3DUMZ$jq7E0+4!E>?+(yJW;jGSAT%n+l&7Ksf5chyRO|mc at j#a4tuZhT$P=hYk
z2%sowDUJ#H29z at Z?TO78RhspqFFV1HTgi2GEnr;=&}rMK3tCc?*_G{b_zOrzNQfEQ
zP29zMCGU%p>=jAqEKxBHwMB;`YaKt;dbRtc4VFE0r#ow%3MsMUCf}Rc$KunFr`~<X
zajC3eeeiI<jjc^xTxNY`vw?b`BG&Jnsz|Qc`uvWH`g+3LoI1puPzI_Jg9wM55OZaR
z%y(o_o&Ish(RMmO(G`{7Wj^LJMTB+Zv~ZA6MlM&I5H#AilqkUKY^8pstH0wF at EJ5k
z6{h{)bTP at wWN+zi^_=_zj__`8v#ALWDH{QHa0 at 3ezRUL*38Q)$U;^f+((ifW1V$Uu
zJ~w7DwZI(^30b{?^zJZ&tiJ!)bW4wRHv(8hb|z|r<Dutwe|_?JrES6eTQ>L8$YB)|
z=!LPa at xfs&KJ|B>Qcf^btTt5@$rH7V0qf5z@#~O`Th5_xW0?0uBVM4USe3O)_VPmy
z46RcQG!YXjUCvmx=38H&0wgd=DtOSv5Se4t)L5F8UKTEX`Rc7N{=ISldZ~!RhlK6K
zT at yFJj>#D|3Eb~N#B>nTN at kfD02p>N<#fdA9ytEH+nohbZF8W2ocux@<9<>Wm~E^m
zHB0EP`9nwmm93q=^}UzR(w$`z?e@#w`3t61&j_;Fo)IgzYPdDTz$6&NkV#Bc at aQZo
z*`f~&39ez!UyyLUiU2Qvj$)|#8ioN6%R7KioJa4WzD!dq7lW at DOikRaRYAXttlf?=
zu1mNKIXD6SunEPS>&x)YmNg-%U>4-0$BE0ypdULFSy{4itxgPSVDJ)JWnAuQWo*Tr
z-92SVA(4+9p<%;YNs|C>MT1eW^AX!bW;t9xFt8x-cLPde#*x*!;yYS&D;-XQUUjaG
z-4-f6v5ZJh;ygqLI5ib2h$E;26h~m2A6H$cSzR$%R57Pf0p;61w(!&HYWlJ`epsiq
z#47oEam^3a*uyU-Ak!7$uv*v8&IIDKt{L`q+kA`U`L23=lmNk#U`jo+rfGxTUd8 at Q
z_(DRTp at 9zDMQgI;0MB0-E3#dT{+iW>f*n)7AN(^Vrki8nvnY(?7sf`_pvmuA=(TPo
zrBBC0Qt+Z%(M+zJAF&IhI;i=LITpyJUB|3 at wjd_=qWZ&zgb9xeC#S+s$s#BJuf%^C
z*K27o&eUy^{pX+0;kQYW$zK3EYlJTNGlw0m;=A}}A<^RYY7Ss(-+QT6uwA1zLh at M7
zML^&D<rmbd7f-4W{z7aR*@ilt6yGS%L&&pHD|f3>_FT at qvl+J=I`eQyF=vzEnY*}N
zy($K=@0N243og71 at x>O2r7_@*5Sx at nfR{RtJfS>8qjrdf0E46cF4?t}I at aRIt);m)
zGoyPs(X%pt=sG7wsRcm_6%06~AjEDZ(|>DH9rn(TOxX9bA)4U{@vipPLl0*-#jyp5
z<cgoTZ_`uPT}z4f!+%Lya)981 at Yx?C46PVAIz5GVBf51z%~td-Naz4)g1iiE%h&h&
zyJ=y@(I6?0*#!!Dl`TLJ&NduQufi!0LhjKNmQ`Y5L~c~K{cZcj_&|<L1-|p!Z+1!6
z-blBAQMhB1_XpNr<g#Y{R;u|fw{9qvvQUn4#RH&ZIsN~?MUr<xq&Ete_eTI4Y-n_R
zB(_n<x)3x+<@#fc_arMgUoYhd$6~I^E{XkRC^RpY=ip6K<ofse*GoKk(}}I4Ux$xA
z9~pgtsz9uHtxSkeBUyL{4?GUEH*As0O_3<3%i#i*rRwT{<b3w$wSSfJb|unGp7Wna
z7p)){PKQ`qUBbSQd%`skH1G$sY;Qu$Cjm>JB)mhEtyvP0^!)Vvz*cES)YUl~RxB{8
z{ii#WaY(!fck_;oo(k_>@C_EEkpH at Mj1>VQm at L)(X=kfDhKj|zo=<6fIMOXf6}X-j
zOL2=pKCf~9j{LCo$;-5zrU_uX-oRM_?*!78JxejH)>%ocdWAG{#^HDK9e12`$TE;I
zPSkk?c~u96rrH{;vAcg7U6Y3OLjMk>f2nc|91=5CJwa{zP44K{PhSpRy>~&HdALdd
zK2gMDwpUgSHWv(&e}`v~v!a>RkB6IS4<u|c*3_03<7XKYN%ztO<x8O=ZZ_mPrEw`G
zr-XfJ@|4emc;M=#-B%j=c(yc7oRTuDUE76e^DCg=NPb4JQ~yl3GD#`Z2GdO_%1nU4
zjS7vRZyNwt-M*_g>EBdV^+$~0PQ6!!80P{C^}NJ=;BQK6Mw%kP;C>oMcLLr9oFe_(
zx$5|cd&QbawLS?<rT88mdi;jHff_9=M;k>c->a1%aM0&>;&wQcULU?Nd4kj#&U=TL
ztn&gi{+Bu at EH1q}bSFG{86<jEI#lG623Quy27J1kljJOQaeWdw|EseP0qQR?&oU&r
zF<BYHcIAFB{x#fQSo_$T at WGM6f6A4PvoP{wU5_eMns|!*#k+8ve>s5W9NDN0#BDU@
z^!Zs|YdS|MZYu at zJIwMtcf=Hc3$y*_jXXld<PcC~y~uR;RlFPSG6c5uXMC@*Cp!EA
zn^wU0r|w++0G*SrQGTI<>;hkj5WfvUM5A{7qenj5g;-Pusx)@Jj6JK^0loL_Ll>D|
zC#oMQVPWDdRoeccOx85{ZB9iE)M~?1ea`H?ylGb8m%EBamYeS~rtD?ZNEp8ynan|O
z?ulW<b3_k{)P*6yRdE{NqS=ef&d<Qq6IZ^gs8QeZzZK_d*7#wfDuy)rLY7r|^UC#f
zq6)5!Gwu1cMxa-9PjnJ*RNzybS(|wk#9gS%Nd{pM1kOgYHOhmh92xFBf(Eo1?!2LD
z?H-M!_PP76m%3sm2Selleo+kY03+6V##r}q;FWDj$ItpiByh;_&6meZuippQlwIty
zD2X9NvG~P0LPouf#D_$y*9>};5nF09t7WZ!8T(jy-+57|GgE(#=gL2~I~t?WI031T
z9=2DrekK4o=tBk-y?Vb4MZN$3wDU9*gf-7xA5?TefInRQh{~LkSYp{_pu;5rqhtUn
zJ(N4QhHcyt4?L^j-MKhn()I-7=`qZi)-YSv4ivfV_U7XtU;x+y1!6TFb;{H>r$=Ax
zgFD`pS#RS{e~B+-!mtUVh(>*8xDbJ7H5w&48!;(OMd(R+nx<7U7}RTHPtp=^2ZE~}
zRENquPwXg;AvWKSzxFCfP3X*S=l~2|Zx(!)s0RM;JDMii%;RVZISfq6zsYbkXHJIP
z=+xP+r5S{3uy&Sqpqn=&eP$Pu?_pZ2_NOx=luZ3Jmd|Id#RhnM9%x+c$dOn1QY+?B
z2#E at W{oxyA%4Xd at +lecGxOR&m*+N7sjKG~rR(5o^HZ_U2bv8f9Wlhwm`YnUVkBRXC
zzGzfJdYs~13#s&SgmJLqK-%Ivnc3=8bcot^Fm$@n?eVVyiIPqwZt;}RCSTCWX1fN2
zJH22BkKyHYi=z9pBV~Gdm5Wxn5jV9vBQ;XnxE47)B3HcE4Ft)BlD#_?ApdZVoHt9w
zY-D$^Unb>8v25e_qwSDWg!FHadz6!puU_1{MC7PHw*ngba<H)N4Ncaib#$A22W{Fn
z$m>lu5_e2%{lx?r+TuNm+3_(&kwHrmVUFD6&(mzIv_8J_iVW?HgyDdT;bzOfmC4}L
z0*OSx<O at l$s~=U}NI-3$3kObr-lByf4X$Erv4)-g#XAyGlzTSqfJsf<u6!2EW%*1?
zo!kK2hgR{1#GKb;wtM_c<&<JQy!s;Nr1K&jyHLv>&e%VOGV}jc<E5?9z}Y!}71g2l
z;~%p4pC76I8QP6tC$z<ow|4Qu43~hlaCx5wV`@nMdpJr)(t3gc0=sx&gM~$@SPYNb
z#_f*?)EJraTR4>?T&C#j8<A&9oWvR_8Cdlx-~=QNQF8<F+#SiqO7qv-thA8)07^i$
zzf%phGblW6yb$rV9Xo~?rJL{aq>FKX5uraPqtW10srPS-uc#HdmkeDcvBrK;u(HEY
z;BZ{o;edW0{g!kZ4}r?Fi=8U~9RK$w>z{K#&<l0h%mR%q$%je5&@@slShG3!KK;lR
zWun_-_;h`m!47hTl2D68NMtwGkx3Gq34P1vk(Mj;y0*WN*XkoTmS|Z5+6M;dl&Op0
zHL5#hTk>OFl|NezMk<p70=U5Nv`r3_rMn5k at F7kE{90S&P8!;hy4uE^Tbc#M+x3BR
z?3kvgaO-cUQ44<p0yt$3(Rqdo0OLwqfa3veoqMIRR!TpETEpr-nJ!s$uEr>;0dPB+
z*ySdIoYWW`N1%>ly`=WOtO(r>)#~0^1f~Jls`h97chK56=9f$)l0Aqebm)%plzL3Q
zF at sk8WJhDNjT8W@>>x!#s3bR8ejrJWo$GGCoTL4KUo{&{KI=s at 5|OH{J|0YoNQ;J4
zD=mY!)5 at WgnAz<6|7)zxQyGy<aiP9d*$Ff(E^<o^SIA)OQMn&NMaE|%TL9Ha3-l#q
z(h%h==5Xl_O`2M$E;de>!Sqe8V4uu4_2{e9%=;xU>dG*D;62sjin52k4nazP%S~I(
ziZ(TEEI>9gtscg09E3WGF|HC0@&*nBlsp+l>nc8`0YqLlhCSuIMoX~(-3#@UcTgF}
z--jbqh1Y2VGlH{8mLtHJ^QN!6FTLnq#TMr at gx8-^ooDeJ5MMiG0Q86 at r=6QT$OlUe
zb0KI!Q8u(J2c$~bt8)cg<}vrv&^JlphH*z<H&a%cl$7<<!-Y1#scWFw6HLdlI=U=S
zGZSNVM_h*VDv&{li4hJ}165fn>l2ub5GPAnrFpM;TXo<N_pJB4lYY7)6OY*KTa0m6
zFNz;S(?n$|5kpR;zrDyb)ixu5v4Z=VNC8^)0K6Y{SjP3C3Pp67HqoMm0_YvTPjAmY
zAuw&|7<9!XgH4q~C)DNbIG|^|X^%<K_7F|87=_fU3BrSXh9y+Xv#~1c6fbchdJe}}
zL+KG at VraLQ5EiHXG7$y%DWn#fF)F^HrbC?6BKM%`P<h+fp at p{hQEsMf<&$>F2QpQ>
z)o=)5 at 4l3sfj3xO$WH|N at uE;+(5ToL&|^WIBfH0mpy6A~(%cD1N)1Hn5m5T%{#*_O
zrXr at m<ka-ji+YzT%H*1h?937WBR8nKo at ds@q>sN!(?Zz}CwY2(66wtD)#h*WZB2LZ
z^^X at eil9=BYm5??Cn4?L&ZOu(n5IIMvyRI|^tT-0@@f=ghT>?sk5 at BrEHb@B{e3PB
zaCM5h#UXH-ZT&R7J2?Z}yQ9;&=$p7CPlcwsBScwhn#{D~-;-$XBeyq8+JH;wWhnGG
zL+#G2`=Dk=Gb4TyzE<5`M%;~*$m*+&`i32`e6EVUBs at MrrAK~K_{ZRn7nNm^jk5Q$
z-X8DUqBG`cNcr5g!id*7j^Zrb6}6QiQYMC`gLfkDp_Vpa#=a-#OF6z#75L6;Nh0^g
zLT*V=R$)~@5Yp+o)N-+2?Vwvuh8YsIfH5CC7XwN!k-91ysHHWxOy)ubc$C`NFi{7`
zLE!ng{$*zfeB}6)MEHKkJ&qXZ6aLb1tta%Bes{T)b?OxcH9qC#8pykF-=X*aypKJb
z$cDxX`X1Qq_A{4XZq7x3#qb8z=3ApjuH}nLtE!7Kms!VLsg|e6%KIYQ|Kdoe8<60i
zSrdo>Fn6~ModfP^PApuaJ8rPN)EVip&182{7k5V2g$b)S#%n=iwTVo#E+LBNBhz9t
z3fr1^3?;uw#7)N`)i$z!K-~yWbq32hMyCLItNXi{K|M9)HDu}rL>aC+ at z<+J=Lm|J
z$*@3koz}O42cGDB%*ubL`fcU3DxiDx9_RNJ!y?7va8wHdhA1z;lIQ#Ch+zAdOE^}8
z{+|_b7A4N`K{l~Ireta8aG#Z8&+d5Tti>M*wdatm!D&cf9mYHTSq{7wem=j`l~(5`
zi<L^viw!5o_)R1%?u2 at jPl^;<Ms;@CHQ2B&n=e$ocAG1ZK}B=CexA($11p!SXOg5H
zn*SA<l-1(q-qZkU^SH!i5U=+piiS&RQt|)=1xe@^z|C at +)wA!&+yVDJ<$|=aZ9aXp
zCDLyK at VtYZRW@}AUzI1xWYqe;DuY3yE+W*XT+@<Hl;(JynH86Yiin_9E3SNW0kXi}
zO?v(2fA$%kedyq-^zy at G7Srp6E&&MyMJEI5wE%n-jds at TH(t#P280^a{A-s#KR3DP
z_TwCss?=eT(cb)=r~npM__6H4K^kieQjz;<+Xd&kpz&$IyK9fm_}A*MUKx%bYK|V1
z$HV%q!aO<bNd+F;(Z;|(ufeL8Awp##1tG&u|5%23gCI-vX187~1}A9T2KDom8Q6n3
zHZ2lE4_Z at E&Y2M8ltpmo<cS>$qs^a2RFL8DlVW;3AVnQP?VsQ^4TaI}m~h%rV_0Wa
z?W~q<<OHGp?Kwi$i#4Gtf3`UE=G?;<KJyC;tnjF(O1%DcN*)-V1INXPW4mU+j$qw|
zcYpyl(n9WANAyTSMb|*Q=cLjrK}z%24aZHD_!gbAStSQl4J-B at RH}=N_p<&I%oJsA
z<e*^sa3VCV)jT-mB;Je<g({@c)N^@@Od`aG_h)(ty;b8WYHjN%)~fbQGKcKnAx5Dx
zI3g!VxJfM8aH7p;KeRoR_P{66Pl^X`7EMlDy%D6~Zx>t#8tHu?kM6A-j)Cq!w`WGq
z3%LHuc21uw1JSoBV)mqQJ2440&6Ey2$CdoS($_-%UqQJ6(An{U6FOMtqQL%Ojr)0-
zR~EY<OJRb4GsO at D?m9_lyPSH5$F)wt``F$-PW_iAZg3&X3LpW$v?4m9d$oQ4WaX>*
zx3fU=fhgD*V5jiPhX-^@(R0zOV_gd^F6e at LXL-%rB`Q)J;k7%?<g?t8nqT>c$pXNM
zSm$w16xeegRw{{tAIjN4j~N;Hr3Jwk(TMCO%Wn{;05HZ|xnh2aLmjLxw%;|<O?rFY
zGV+L6jqQOlhxL&1N5TcIlV`z~Ao6bxgY|tXp4?uRCv^k(f*CiL>}Ua5So>bV<~InU
zs#!;~G_j%#mJFQb;V;pd<5=A7WH^5_w9Jrh;mQnqW$vZ$W888~GVXQqSUclB6 at w5Q
zJr$PSeZ5T2AVZLpQ}Fdi)1EwYA1NoWtj!U<N_^=xSqT?yM~j*oC>`ll*x2W_ at 0SAM
zU#0}15VD*$YqW<y_$%b#F0j8kri~Zkeaw8 at V>++#=|Cn}n3P{-<n at K^Fsiph>>7>l
zh1r!DAJ=N*BM2rJT?w^gCYBPoyduY{EuRGquseX-m)g+f;g4_VQ;D)7{o8iLklZ_D
zdrgfltaY`Nd0w1Bg#E@`h9P?Tcd(nztvY at 5*z^NL^MC!Zu=Iz0q(|lEc#kNmk|%-M
zD4gM`zRJC3vJyzzFXO}iK_4Wc4?n#AmY;-mh at Y3lYgD*QiX?ngV^=Vx4+l)29{8!M
z_L~9FcVaZN@||w7juUnHW(>tmhcG-$!eavSYp;Wt16Cx}=V^RN)^;4O%B0pE!Bzrc
zr~G6;eTvEjyc9iNo64|}ze28FPcw^AO+#W8lQ27sr+WNp6)l=ALkZeO{6xQtU3App
z+uU2R)~9Nk2SoI$BMQmItN(u_jNR(-)pN1+brTu*!0JSjAzBRB$~y+Mh|XBJ^z}oN
z{0$77-~?&A;<Y}}A2#F1y{SBue5W9yGk6XYdR4`gCpTpyfh#t8SyEk|9Pxrnwnn9u
zb8>X~o&HrW(bOYjWZr>oi#xp7&oaJ3B;NiIRGl$fa4cq%`TurNW4+lVvFtk)zC=g%
zP^BBM!37cd7=HwMtB{sZe0ccdwHRU>zQ-=3D*XH7u1Li&JMy!8^n at n{8+RSV&G+s#
zrFp*?gb);NC#9LG94eJ)ITQR<`L~P~*J+Dyf|72P0Y)fwTewL<P4$BCoN2FuAD~s^
zE7|Fx&2H6%mh^JzrL2nw2 at tdCDO$QnPnC0K*CUEe<7#19#Z;E7dJLKhiyWk01B4CH
zK6Va+E<)oY%sVo51 at 2LQiR2ntk>jj)hTMMqHyI0$sJ!jiNWhiwrXzCq@=%w!m`R at q
zG=Rv-&-eS;sOpGcdzhosgKN7Oo;z}`xjPtD8o42tr^(NcMN7-m;R^6cP$ghrPf|V;
zhZYHM)fZalmXX~FI8G&pyq8j!0T&Gnl%gSa_!>dp7tTJJ-f&`3!+cU*wee(2H2aNC
zxA^{=GJenFlM7j_3ys4Jr*-Cutys~3bOXb+dRPrryM$&C|H%Tbis4_NK`a!y3u at O7
zo-zCz!!ttu at 7`KP)#CVvWicJvMo92$aUcgImT1HTMsnTHG_6C7v!`idw}!M-v%{j1
z;b|f5?=32cMxbI0<|3c}c);AwI`cWy7mX^{lT<`v%S}n>2j|g%Pg at z75MRSq6om6b
z(0yCNouS&_+@;m3agukn29HIVA5MPpTQ19j#xr4=!cQL*T!6Jdjd>I67d1&rLurv}
zb|IG43Iz(brlNX?Lo7ameG{X1fveI$fa+3Y;3b8L^*EYjy0iTlG%z%x+z`19>yvV+
z)R?O;!p>V7bIa=vV<HMs^??D_)I)<YG*AwtunqrmN_NZa7%Oy_E5rjFjGsBquBULP
zGUEaR0}eWLLc-7RwG0#KdDK%e8x0t5$2tD7y62pt?F_tul^$&jBs3Vwi3m2ZBKqei
zG=4QM2y^)FJ1eWtuL;$=jBfJmacN at Tm<1N#)D_<Ry`Kkdsi`Kdx?_Wh+Pt3Uo$=cD
zlUA*T0k}-t{9i|H0n^7SSv<Z;eA!_h!e^TYpIrD0JtEHn0Im*k0aV>e4eNi$@MLxV
zB-&$UM8=2W9_4<9n<twQEg=4kWnmPldS|ZC53rz1!As}J*rA_&Bdf|RdDARYsK<{5
zYBZCUp^i7-f)kSm-8-k7CeOY_x1OS%?xCveJ$;}Q<db`RKIDdmjgHr;X~6gVr$~=J
z+?Xm9FNCMsfP`+&D8=G6Pka1HA}>2-<h?STI|(TZ(GR!cS;s^E`oCLp5dcYng>l at 4
z%>30oat-Zyh;5I3nx}?fYpU>+0;-rHWrLk?Z#sy7Zz__mZW>DG3N at l-pJV_YKeNF(
zoTyTcej?|NgMb9zZBI&=Q8Ubu^65sfXBt9ix7r{6uh5beIQ&JS3lp|Eb#g9wZ?|am
z%iX(TEkN2+)>OUY2fk<c5B=D}q(X#RY{Ap9w)-SyEPhtJLHpX8xf~00y~W}JTX3ND
z5*)g?0p?ju#1na1b(#C$fk{6iq#s_B4q}WfhiCvG5*}4nc|(vy6Jb+hc|7wK at 9r|G
z4V1)f?E1;%+<Rkx{$(Z$arfquO~nW+W7O at ASPI4MY<&Xadw3LsnyqhkC*<XKy|X9Y
z)Lr!K2<$uCo}8mU+^(c7*})p${SvFEF;to9e9^vdb>kQ~7GfaEPt2Xjg#`Fs=s`HD
z4WHm0%<`5gomv1<dn?M(9j(!TTNXvVF2zV~le0aVd)fq>gj{b4W-S-#(Q1FZ$DU4v
z{9fAB`4P|u9LyJlyu)V~ls+SkvC24gz9yYJVSi1Xzp<FDTi(+XZ4{k?@?i%58)*85
zC1QH8Z?c93V=0l_D;ws2hJx!W1PJ6Cr`PJ~C_64OD!m3u0LJlOWz=FWdFo2Nd0Rl`
z+7AJvM-Tb+NeidLap$)3#G*>goHZvN{(Xrs8S-u*-4!bXNApSCv<8=R1vvq7c(?;X
zAQ at E}Hy?$KFzdbkgQR!aX at Wg2zp$A95qQMwON9iq at _s1z!xI!S<AS7#JgFYpp($N#
z0r&D4>gy!XnAc`Kt%`4pF0reM^STT}ymnwCP2<O^pRRmZ4t^lycN<(XowQB7RuHF~
zku~RZulz>~c-KJA))8p4<7UyjQzM{`VYA&R>|OjhCn`l<OE{lQ#?uI?oysQo2Fup7
zz*dT6U<GX{FzI${RGiAS=aM8qS~5MKj)#Yupa=BY=Ax-ua|wQXUh?Xo(()C*SRM&H
zzsM!@xjWv2X}8 at cco$W|jW|GY1fNqI<AWWn%VYZDYV1t=u8Bu~ob3zp at zfg6Qa3w1
ze6@>7i_D?%TX6w|vR6XFr!w~|nms#KIsv^B6}yHa&*cXm)eFN`(0T0LqtySIE|Ks-
zs_{==+1yN2G=1a|X3G3)O!8~zhdAmpP_(iv at 2wJ#-G3Gq0rYSozj=-Lu8MZ>;IT-8
zkHL2dr>mGGHp$UMYDQyAyt^fQJhpX*0Qw_(JlC7u0QBx1Ld>w!w+Y{Nuooc*?wkbB
z6JNDOc4~r74CYw<RZ3MCxLM+Pu3Ti at NsJAU2ceQML^HV at RFoL>z0XdV7n1{VN%iGo
zfDmj>lC-NfG>9Q-+a1Z`D-g1B3YE^3`Zo8)MO9cRZ28Ktc!@w+P{#>y=Q7xy1*Ew2
zg6P0B at HlTcwX#?Z61P7YqstFO*?D}F5K<3?kZs(pC!Q1)SJFYVG^0LtuRq5I3mH*c
zu^(_c!JYjtio%n^@~K;lc~O at D9Y(h1G2ml9YTyxVYxwj<Yjc7h61z+|J}ckJr+!N7
z!#mV;o9y&g%Oq^U|I_7ZU;lhb+A_Iyxw4IREl<+-?UL&Hr5ustNz2=JWzc2ze&_xu
zjme}k{zb8#vMpcbCNqJGwYMvzDMuz6u0wgAqZ^J at xUQg_rRO(sgT}x-({aPKue3&i
zn92`8R-t at 3ITpxMc2>Xpg^siBzhn8jQLEBYbuSyNq5n*oBY5UXK~gR+-uFklW?yC~
zff(%FrEiD;pKzlVWu02_eAYRo-JM(5>lkv79x339#!!ZW&C63at#}7_{#0W&3jLwu
z)q*j{-`-s74w9U6LNd*JCzDNsk^96DVB%NUm%MJ)(ddkY4v1$SvU#3|r;(*RyGX>1
zAvgKIzx8(|9qw%1Ax%PD_S0!to6+d4p~PLvkmTDo*4(AM3>Xpn5HGSmt015WCb%pV
z@~K)pop;|F?I7O_+Ro!@=Kl<d8!~<W;BHVx*)THj+Ji2Zf8X_CG;7`EjX!;a^9sFm
zC-F!x4~##VCP`aM8F_ce)}?;TvATnU!D&@&cZ2q8i_Y49pV*BiV_Vxrx2`lnLE!DJ
zUa!oz0cpc7%modfv+Y0=#jw)PcR{M5n!lmIum{qWkzzP&XK+DZKBD9X<RJnfl9?cF
z2p&lj{lpYs2d-2dkQ;ie=L!M|_9itF&!wAV!9yJY_Ssv<guX>$@~_3y=F1=Bjba0|
z+dIL7iQUgEjEdk@^`lA?J`n)FVsEzJ{C2z=gFQHfnw=mvG<=nfmLRX|*+zzjrKIz=
z_PVcwyDB`5BXdeqagw2+M)y9|TaZ;D{s9ziRVFwK1uh}-r2y_uqjenyE~Gc+Ay#tC
zZSxuKiz?bg(n&^*rtaKHI1|u-a10|<3F!PAw3=sm|5Mutb(+C>Gy#^*&ntdCG1j2W
zCYuu at Z1RxHYm8t0(=q*CvgU2Lbg~(sCVc)UYri4Z7E#|W4(xFdi at 0_PcOxlEaF^cj
z{sc#UPWoqyEi?~-Xgu}Q7W3J_qcKIRc-SlfAc@}(wlhq_W!XkrAx<wsf|DKB{fuj1
zjk6g-stIcI-y3e2+mOh31Umh~$!mRcy6e!CzJ&V1_RtBr4QbhSrG3xNeWsKrl<HwZ
zZS<l*l}mfE3HU3>bqcvx@^_H3(S#A=So{r68wDwO0pDY;oY&qtKKt3KHq2Mp)~UPo
z361LcaiL0~^?uf?g3azHBa)zVp(5|q?Z1p=;gXP-YYEXJ9cSJmP|%iL_sqo}FUHEP
zo1)Zgqpx!J4{<#7_or>?bBazBDwe$hSo$VT=*%l=$E96l=pEbPO2q&<vQPZ&vQ$~H
z9FNeBT+hC7tB at C1lV>}`V%ygDo3AIQ;?j-Oc#9m-2w|?<Q_Hayh-KWTFKAGP$!|u%
zKoFaTPaYI3nIb9&9-QERY^o~`OKnEL3al at wDo3O=U;YqDY at jH`_nkTzc5oIIfHxT?
zMJH?Ky&<(5+QM|i%UT^wB5gkPMj7}{97K`EPQQgIDM%OBxViRAE?bPQ+=Fgd^Dw$6
zqN at 7Riw$-Q-e>Ibf1^a6i3R1pewHKzH)EFy(INz;Fg#-P0=b0m!RZ0I1af&qHY#MU
zGq!7#JnF`1hG|^&c7HQxjEc!4r=>W_`}7OtmoZuv(ERzVvIO9eD!b+Y`RY(DX;+kl
zO{##-rh9E>+3it_M}-@=uy>#zTJsTGl{|t{m4V2Q_edi{D><K?N_u<MZ)3|5S2ujS
z59jE7ZkaqF`^4Y%oKlN--{LRZF<SnN`k1<qmsy1N`0I0JJs&3YPgD|kqZUvS%5boH
zEfc4ILB at IihlfJh>4|*ax&QS%e0|$um5SU?P%~#6!ka)2v!Db+Gfp>^Qobk;iBkVu
zZm?)XNC+^Mc%L#A4}%Rr;TaOAWR)iR?(pfd*P=?$C>~38bdLqS_q?-kcAc~*?OZI(
zKP0*l=#Om>VJRgi_k at yK0ek5aEt%w;gPc}x>g+n?XXK^(g at 3ban`Mx`Vr?K`hdK{p
z^EyI4vx_JPsj`Edju_N{q8)SaNz*OGkMi5>V+YHTKh#sMe at aPY_dT&UBa^V0&ELay
zU%$E0hdEzH(8t`z_oUf)N%AMW1^}2OH<gI9 at CoZdC3g($lh<aOcAn3LO4d704DaH;
z0DNj0zh8(VZz8-3$ZQ1m(*Y<liKVnhJP6C4K(Mv9lYDL;h4;UBWM>FUUEkKsyr)NL
zh(Ge{O&}{teM6Ppo2g<ozK68qs%08~Zdc3<;IvJy=c4^9FUy=EN#CCh$TnREWvLw!
zrko#mPIL>a)F5qA at Faqa>UMk#@NvVSeGJ at C#*8smiB4K;V`*0TFuynN>Jdq>UXh^1
zceKPU{0h<j!L)3MTSn~8a{AgdHr`i<w<n6P%hW)k62kS3*_fiI9^mhDT?{wB5!xYz
zDePK7tUqEQC>{A!!3*sQ-Pf2{M0Nb~ky5hP#yFuoK(K0Y2}B7sqYXs5$9Le;=tW~6
zOdk%}Wb(#~-3HOTj^`-U3NT=1hc7UYW-KYcIuh65wd2cnv3xv?Ls}1<=Gbn75({Me
zYSS9ZXey14RuiRK6H=B`*%bl@<OrbxQNoZR@}6c8ibS_v15C}icLBV5fY6nCNJSG!
zk}zdau<s=8hy?#Kv&q6hq?`agTe-J8`mBv1H|*7ZB?4i=vEN2WD((F9)+wHN!U8FB
z9;v2HeCmtP at mJ$c^Q?r-WAi8EejIkJ6o+}aRs(U1Z*VH1qHT2nc-jtI^QYxqGssly
zH8YyIVA~CIi;lesx{<fE!Uj8L$%QnTH`8o&WaVz~*S3oot!Y(MnjXxZcM@#%z_}4O
zU~NNTIQJa!0BI}5co%z>#HQH2O)O7<T3DZ#&tvkixD1I7-ULZt0)^nu3aD^wIOxwj
zER<w-D5cV1n>H+PhGvf#=i98xuKyTFP1K%!f|l2MQWFl@#d<(RRcnVa%3h?Mv!+W)
z2{=g&FXB<T_v~|&F>lhaV)w#etpBwck>0uX3kQeMvhL~Usixb!_9C{(x38^Gh=V6@
z?OIH-I=P;e(A?S>P<TMl#Iu{vDuhNWt$=<8)MX_jw$Ki41|zYzsHVx~b#&|?TOnuf
zjQ8!7I-`hm-Q)BIXdijsU6(w(#oEHcgXr(qKNB%v{$CFe!5+&<VUdUe3)T at RM+nt-
zo!t;MG36Xo_%&dHpjysl+3f$J{MTfVw3_~~X`a=RB?5v#y-)r#nppacd6 at IS9f+Yl
zyyzm7<GsTCvf- at ZF;M1XN6~Y;r+JkshRPspHj?h|h{RB at h@6|I^(G<Ov at d`mXHlWY
z8HjAyD0}HVp?E1Zu*7~^S=o&v`ZsV`<^o(-Y(3t&1*j76<N#JWlc7H<^*ZvG=fcyo
zDnDwN$QFQ=4n at 8oPb)puXm47Qf2v>tXEU7VBj}?dxcqMD<}iz7(Y1u$-9Gi}YDk=$
zoew8dzi%)78JQsN5{J;LhuW;iLv_`GnvR-)Qg+kzG%{n7 at 7K7smD#(Fatuu!a|%jx
zLkX-VEfBjo5n at k0fKCl^+*;>yhuYj!0f>7=5xkSyPkj2n(@}nMu9x=`4C<avd;!V~
zKi|=<jujB<WE5r{Llr7OaD|huqM`z2N-lue3}4~0xyUw@<Ag4{-3%KS1QT2s&5b;0
zi-io9 at ULl#e(hL|52&2md_Mg@;|?loFLI57MVX5fU24rySZAqQancuhmQXB2$IM1D
zTy}N5^+X&r7-^b4p^aG=GJ^wr-7_B0#12IE5(kRL%$NkP*;~eiakE-S%j4OypI|R;
zTZ9DIs#&>&>qGiT^$bmB3kODpMaDXRW>*be>M>bc7sKE^RFFUDACznpuzc(LCms&v
zR<~|nqqNw%&hdvD54EdGnm8_9zr=`&uPT_E6mZ-~3TTgKoXBjcnHGh?_7UC6jEL)f
z{`I+rstsa44{8o-y^pvpb)%fEiph-nPWsx+PF$Isnj~<5*_@)MEs+x1rI&VD&d`aZ
z^rJfxZi2M2NvhK&+kqbgb!2QM4<&6#jMpD5&K~!d_b@>54%ZY1y&+a12J21OQVn{q
zNgm6Gdx3~eLQQ at cSGvUT9d=f<mk=?G&<2HzUz*a$B)-c4QU*s&-^tieG*7Ui7S&E`
zH$c`U+1BQGwqy4dtH8%ilJyJT8m%@=|LRPDO?~G>Le8Fi3xmb}hSap3ubIWa)4Li}
zYA-PI-*l4bI~_iWT^9}Gb#kp#hd}rhbhje)F)0xtv!Gom0b1t4K=zvxWpu4G0t7^x
zZ(c)UM4Sg?lCIC6^_agw$h)qr{!JL~**pTX9~KJ!2Q5yE``-7}M(Dy<`~>_|92p#k
zz5o>`57jxD#?Tr><|U2$gu67M=`qus?HqXFe at Hos?0iZUKo`8Cv9U~#G#~I1o&noC
zJI~Gs9hg8 at VM5Pv!6a?^ozF=8Z<3 at hIbo+=FR0biupP5Gcr&5YyGP?{kQ|az%va4M
zM#RdwT7h^1Uam919$-f`QN~{OQhgl}7#dYv3I+ at R1M$ioiVqM#{kQ;<d{#;ZfmOP%
zrzuJ`p$SV$-8VP7wM?&WOWMjlnHJCS+vLam^q9YFT+P-=1EZ6i6jNZoVlAywUYKnK
zR0k2U`7*Qsl<WU%$($2|YQ5e56 at q(a)_rn*nVBksZNen^jn==cj%T1&{M*vltGoCW
zrM at nx=~pTP?4O;|V}K%Ol5^2HPmT|*HL1EfW#;_VF%(^>!+RGiWTbn;;S=fwIIBdb
zjc0>8CjqciAR%a`#~;M4QLzOC at -a`cg!Im<w6wDmv$M19O;n3 at Un^GWEOYB9jG!&r
zRmlEV=Ryd6%&4AFAX#7 at 7TySy&jrYEtpwgOo)PSJKocn^6xTJjZ6PJ2znEnOu+O0>
zh4ywF&r2F_MB-UnXw*X>t8h$;DsZcAipY1diT8Tqtp{4*C42|5{G`wj+5g{opCb94
zpxN5GO~?r?tyDSC+ssc2vr!s`AnaCY<8_G#^s=|I+7)3Pt)f`w_s1vqz|V=JSo_!=
z$^O at _c7{$oj?x{fh-YX)&E&A<N8(}B&^;I>CKJY4E6t|YlK*5LgS$cq)Y&OtxB7Vf
z=OLws6lrh%*+et`BhD5UM!sPfPT5^REl4kol;SS$Wj at m#s-nCSq46E*6w_h_q)vXe
zPQ$rg_J`JI``V<(xdCKcyt1(nr1VHE at xhCd0h&Oo?=J61dx9^66$R}6LZ<Wf4~Z--
ziXE|>=$=SpJPm#9oxaf>%pW{jA@^Foh&9$X!p58&&<XWcGrl5w2lu}dk<Otp&cO)n
z@)f{f>iL~>Dp37p&*mf)ioCxm{EgL2z$Gk&1I$r5>!d<*a}Pb}-^wr6LAGSNsWUJ!
z%G>%@=L;c8aG!}1+^a5}l|BK+q$SYZZ%ay+gjx%VGH!aiKz>dL#RmMMWgrHiN?t#v
zfat7VkIEeOu8~@^j^4=~Sm$a&5_A4YS=1C<R1fSoLQcGVvQ==+uCHk<Uj9UADFJ!#
zQl=gKS;uoi6BGnjXikAwy!Kr0$g(7CPQ?C#=JY-Z$8(@(p}LWn2?dredq7t?b{w*$
zei^&bvDk1;p|j;`0&e1xncl-=>&??7Vzfs;{+b*lgY~Zlq$E5T)hBB>@SrEH9)6mk
zY!;e=^2$6Fa{hWdn`DcyKYUfxCk{Zg#X-aX>&#798O-ihwZ(h$CP<U5oD~kIzr-%I
z{ttcj;BpM6CQJimKeq8o9XIjM?;io>l$CyEasY`B)8{kWvBUG6Fs`R=)CWOF*&@C?
z*$*3<tFUvvK26y%FErST)KqFz+4OGa_x=4#)SkVqA>{c*S)2d@?~;Xz`~sBB$HRdi
zH5UfX)dG*S4hcdfEnk6Dzl*u2%7j~?Tzuu;L;b|Ov1ba at Ol6=eP9Uxak^@Vgx8_&?
zW0H`%S|F3%JvxpMZlz-^czxkOjH!w~>}()h_r~oJc%v}?(muW12Q5j6^`B|1cIOV9
z?#0poey+3R5N2<ZC4!Va{vN(j$WdcKC(c9L02DFDB;SeTLL$>rb{f)ddkY4r+~AJS
zPC at EC=Vvy7%82~v+dK1W at RS1%qj5u*#T%4*Dz}27^x~+pGUTD3+9ITSx(tcDz9}rW
zShRO=$q^JSZZ**h8QI;`GlKP8#$6Vw?M#DIIw>R==H!2>+;w?8iFWif7bf<R7NJLS
z+-I*HTTGOt1|{Rl at S@LDbO#s!x at b?$WKI^%uUzU7Inlip at xBJEGp0h;8$I$)`qmUD
z$V*O-2B=-Nc`LJ;5A%=xrp}gy_xTZ7<KC=+B3b{PK+I_^lmZMI4#<dlB;0XtW at 2Ny
z7M&F*&H3G|nWO-+^>P<9Uy%9uhaD(`gq3G)bO1Q27(xN+*-l9iQTG~4daVN$#p^Z*
zfo|UUCMrgkPhr$=Y>AOv%Ny(uXV_L_a5tWO{CfZI^c3LL>&!sg>iC~HOc#Dm-_}t7
z>$rfJA!GzyBQswq13y>lUik&<MM3ofjLE(&1&o}}P|w1zXc*_Oib|- at sB`g1&oa4}
zdTE;Xih_gix}#`)AS>}UI;KuVWb(oxBugq)fFsuipl~-8GfK at qjBzE{a8LQQjN_fD
zK1WYv1;9y1z1t{M0mK=MB3{`hKdMri(qoWZ1i1Z2{)OUI2pSmwmJzSTU8;5t%sD)%
zfh35qiUE-!O-xkUTU`d##fGLgjnXYJ6G~d^-L~dCVWV%76Tr?eO!|ZCM1+UoWGh$I
zk_k+LK2FV>>n_D at r!qXolh8_3kA4}|Lj0pKW~?oFrnq1gqpRV#$TKHTuaCsT%S6O0
z-5)&9nzGsUxI-kl4UPPe0?=2~9=BYf6l+^_ at _U()Uuiu>y at G>A2y<az-=Janer=)9
z(*er89CirRk6uHVYM$jiXLE at h00J-(ICfibr%5i_QKsvK4z~z-;*(k)bT<JdJh5^i
z1;acD!~)s%OE}@|9r7~>=Mha at 1Ph6_RXK&ya*1aoKAWw}X|wz4PPf`^b;bCw)9a3N
zp6<5=$?tc4KI-szh1)3c9Y=U4rDgEvmb7pZQ_IQoqnl?(-)>2x?~8Xl)l8_ox-8E)
zoedn81o5|@W=(_)(4}|da>?a0Gglda5W1tO*OV5^dU#DzOgz#UaQA|d?`*vF#k+(l
z+ZKvzDM!?mMY)LP0B?5MG+dc!yrqjy(%CUNvAg&dqSuU_M^lB at mBYB~I24Br9QKi$
z8YH08oya(uX#6h>s&^L_w;hQX-A2t)nx4Hdv9x836 at z6*SsHQ_W3vXT3m9KfFvc#y
zOX6_OVdZKO1M4PO?L4AF6yuUOMG>vCk%-DHYa0p!H|uEmsR|S5t`Q_NzQP1D{H!QT
z6MD>t($U5N=bZ#{qD}2*=DxGxnbLV~_@#>K3=Nc>T0K7KRw?+X5o|g~$L)HWNgDPZ
zB$W5|(B>Mm)C;1`_LSs;V&y>5Kdor1t0kgD+p)J|sN at XA(VA>4Wm)mBK;KBIghUsd
ztp0H9Q_jgj-hb at ghA2m9o?k<kM5$BM9kR|NZt1Ew6cBFp+{SDtB at 3|PyX6tWzObWy
z&6o0!(#~f|tWMe(p{9%A5B`H~Ts|_JwdbKgm))KYS(uv>Np`mTqa(n;twbF;VWJy8
zgHu*33)KEX5Gz0J9#P_nZ=QD7zWU`^0UIUdLyV6DDzrV>oN9zgM2`Ss8gK_1T=^;F
zfpW!RO~1YB<apFxB%FeXiM-;EX{xB8Ec)CH)NQsDU>Mfh1m%4&!t0ydh`$XPx9xH=
zqIQzL)bgweIxd6u;ix*#Xh?u=R?ZfVdF`k)Gb%2ZbqE)-w)ksu?E(!npojxpm}4Xc
zEqyVrwyQ%j3 at v<eZ~d)Riuc3(r(Nusx at _Rd$D2u$5w~G2>+dZZvZ#@%zXv*&cge1v
zns{|Hpk-BY1!xtg0I80AKIs&gE6tj=%u;^qL}8ufQ?tr^vQ==q7H6q8KbLC+1`m5I
z;jY7?*1lks(utJ_W`~Xd^pwNW*Vu4LbF23FYPC1o=(~1JM=h#*=*=N3-GOVI58cqN
zT6oqdhRvFKij3>vE}9Rl>dt!zMWf)4GWi8ys%0iG;a~z!p`r1846&TU5LTN=-O`No
ziRAS5N}#@a$D45?1z~qg;=0r8aWBz4HdODY!|ZV3Sn$!6V3$@p4b~%6SO&#`fLgc<
ziWcFlpr&HOsQs1IgU<G}9ptzmB4aG5ziGm6nWSWS`t9r at YUzIf5vsjOzNHnxJ9YLV
z60f_`E=a`P@~&bp$~Qy29(00X##F2y{-SFoiHimduid|bb1LQ->B%iwZ<^9wDv=d^
z^2Gr&%~7<jgFPFkEhMx^9TS)?(4*I*bIk27RTp0HKWcnvd*4Ha@*5kU5#H9Q3Q`T7
z6W+U3J2OVCz<4Yxme;8A;5$tGW_vlKCESY+jwn8}9L!ReI2CYv-i(+!u*C<24j{$!
zK!LtyoLEbD!9{*KVH7_oBxUhZ?&Kdy3&4T1^R*&)SdDQ4L!dXV4bxq*Ba+{SN(|Wn
zo0>v;{YoxU>_&B&DI>J_EMZU==GTYMIQEW6wZ5C#Fp;W9 at fo>8z~b=((RYB7<BG&E
zO|M8*@R4^#E<)!!tq9|b^!q0GwF|M%etBVAM?y_yG^{yvFIqzK^YHLiG|*|E&Ykny
zX>aO-5u56y_`%mimi0y;NF1p2G@;IDVenM$tt!U>sD+SQ2TI4K(@tIla95^J<xx{p
zeQKC533S<m?FzA2_!&SDP{hJFARO60emkkOEErifk1a^o^mz0i$@89K9$6_ at PSiR%
z)9BELcgMgrYvI(Wf^M?e2j)k-BVppxl_XLLiqrrzvdT?Mx%F?Hb@;HgXdEtZJ7Hxg
z%A&w_h=lJmWrvN1rgCuo001DdOE(e4n;jtBJ-%KaY;CA~g~g38!(*v6Axv16)sL7u
z%u_+72PiF`n0Q?oF2iY0_;JO)=MA);6c2ciB(6Rt*Z at L}^g<+&FsGyPl8-`#53e*!
zV7(FpV=3*MJETlyE1XanO3xoRzXuk2X(l55@*2GMy!`t>`MdLf)tvR)F#g*Oo~x#j
z6J%3Kshu-K`>z{XTVPwOGE_6`KTBbL6ph)*qz)&0m%rB)n7pMZ)YS3ref4*-H{6NO
z%BSEuPnichB#fxpj?V>>Z+G_}7RT>HVa?Z|)e1%iCES6}gVF#kV1zabs5okJmEut$
zSfZWqMwx#`Sv&Es>CR`wy>_Vsov)^a&ETI|834fEn-h--_t1h}dgdda{Xv=~LlY*1
zH-jrayzu%Ib-4Z7q7(N{XZ}$hK$LOg;`Rm!OBAb~kmaI~0h!XTcp?xWZzcfly3ksO
z*yw--gN7o9)eM`I7jkYTAM&u`P#Fl!dfGZ;>><Li6|K8sw2ahWnd5W8<;D}`aYC>w
zlzfK9)8bRU!Rqv!MS6MHfl4uJ5tO`ekj+96ujI&?Bg}S>48TRRnBVVYPKt{Hd4PaX
zp`4!K>eXdfUeFbqo8;Ll7JljngT^U`t>hh0iJVc;)@^tZpZVOn#fc|p&fJJw(b#3U
z9q8FvQ2l-7HpgLBCdsXFcCld#8bcAeoDCnHpkXwUpu~}RP*^kjyEhfdR(Z5}{i0Fb
z)*<^t`bCA;`U6jBTAf(gdL@&z0Wzt;gIbOB*oagw9C}Ow`x>8{!<<*qI~hYWYw{Zo
zPUbVt$U5s@$hF%&>X=2%Q$Ha|aOoUuLJNskB^=N>8(M;)v*cY~prY9fo-xfTNP?Bs
zMi*6j*&Pet5vW?!Nb3u2B^fZZmd<$c)BGH3w2p;!7m8ce={|h$4U<iTi$RFvXb=1D
z<|^XbRiFW46ewU<oE^BXau_y6_0R!q14c?d3zyVssrkzMAEqtH7f%Q^F=z3IaGRM^
z1OE+<M0M%7FE1!`T!&aih~zO%Hf`tbEb(&pGJDo<y|iFr2qH>agNb$71xjrWN(Y^`
zo{5}pz#eJQ{rCWF4%uKXs4R4C(ekEot9w&H;0$VUGZI-=0ysAstNKp%WJuPDqav?W
z%$WFT at RcjZ5dAaYur7I>@&bi>l0$p#H5;}663MN>qMoV+l(AJrYfbX6m6z=m`b*B9
z4{9$HjQdgUz5^a4_DVY^+d$+)ax~+kfx%m_e%N|E2-=H)MmdFMqt<u{E((XIqCO;`
zJ|q}cTg9sgpLTo9r$14XysvcT=%fQPT24W$<pkt0vfD$*&b*C)1O6>Sx7_=&q?RXY
zmux6MT$Yp;k4vh{h-0<9*o+BMeMcc2xABTxsbk?H!Orz<YzPjq>GGBjRWLnjgRV9T
zpn#6}eH<6Kc%;3EBa6lTKRSsw-<N>s_rmlb&JiHCDw5gjOkI9?+-&Bd>Oa^o98Bq7
z#|_T0nv6TO$x_jKf0vE4!k^QSUrmF&SGMi<)Gj7%?qRG6P<jE-m4_9Diy|v#JYH}E
z6Kg^23cItCv1&t0Jhzl4Qmi$`!NyHLuRw4yobsu;Y%XEE%E^OO?*I?B{|mSPBQcEI
z+zHiWmYe8Y|C9*3nYQ9Ev<{RsYG}45WadG8r;J;3#uXG)sZB}48RA6W`Gq&wva($<
zw$6%?whnkORz{<;m+1&0{Okoe=Gm2(lkYYYSts{5KkO$Y9cUH9BjL}_M~P@*2<$w0
zt&M*hR5{N3s;gwjaU$<!e0C79;<=&Vt36g|Pk9`!8O+(vg`PE<iX-#R<Q6HAM0hNX
z6<0X8$81zX+19YaV;P}f>)IKl0Ldr$8;`{Ke;vEi5&dIfV<(HLizj9ssc16v+{H>7
z-dWI0|D)N%1R8UI#Z^hH9&X;v0HSieZd#*dkvDsy7(gc9 at qz!f7?(XcY^u5AL#Nx<
zuv$-0Xy|j>a6PA1>ywqvY!E at RsA$)D7F-3vQ9seLlACoee;<wv#`Yzd&H6b?8ozv}
znc6ftFkMiJ`@syKvAs<c)4CgIyEt|e06`HUPuuJ at Z=>l6#%A)`k=7BF<aAL9yFw<!
z0svR_KzP<%<E^_yR_5YV;M|-ImH at xh%tK88VCE>iNgy at 4KCCn9I|IvY36V|qCsMzn
zYJZ|S`F*3!n4X8ydla=rVh+TY=X5L<tED%Z5Q7~F=5XQCRye}azkwr7#AsIbKWBg|
zTv%IO#rBx$43Hsa&&*k`dhT!L`!O-&+D%FK85SxZk6P at h<979&Ow|XW8dQLlaaN3X
zrGrD|bbnzY<Q?O8lP)p~r9|8O)^r+AZ_4KhZXO(_%f!NczVnT~-YO-*;!=lAUCus`
zq5AkRC`ul878v0vqD~MQg*t?HCv5<j;SmQ9DpH<?a0FpQzWefIZ@~W1Tsx7V>-6GH
z&uY^NA#3;(Q!Yz}`-ryU#K{(@Y$AH2vOtHHVG)Uzz9kL!^%gsw_-Ruuzl*_;$tk<0
z_uQT&TFvH2%~#~lH)@hl#%gFWF^fMevu=YDpH2QEFpQ3w9uj)UUO7$vE{`~&id{(G
zHg1(K*K-6Ej&Exo{)KVTE?wa?=ph3g27kwSrlI&Mub$Rk5fJ<tf1%?f`Wb-*O)S&J
z(6IKPs1c>ueLYxLz>y&BK7Nek9jor5;Dm|D!$6;b5LBYtrS^&?NNcGO^}`CJ^{a*2
z20Ad2Hwp+ON%&dYD$@pR)eGIlYkdYbeb}5omj(R~zo(fGS@;_ED?{S(yQ3j#TVekT
z_B~>ntZ@{p;|@0TJL86 at DV~ig`%jBFq4}7QBy?EGJ>!2fI<#K!f>ik(%X?So`;miW
z$l7>;x3*}Ug0}NZU+!Wf>ozyk6k5$MV=I#yA5-|s6bl3J0=Z;KI)p3d=ITvQa*CgB
zt_RBiE2W-qnIz>dRrH_z2|6$!(s|-Z;lVj+DWBAgb>jq!Gv>4p6O#|tnFIh at czs8g
zU{miEI?FnE&ZJI+jl8Gv`we3Rtw at +>x)~C1`6Ss$b!1e;hH0FK{qEZD07oEM-D$D#
z_X*g~h)f&o7Uv)F4n3nA$fIj3t$SUt>UipqqH=sW8&f~I?ubO at 4O7{B9T1Z>#}TK)
z`vJ`7zj!8%Cc_?E>NMBr4{4=EEwsy9eGA)Y+nD+5P_DJKv6M+=z4}7-MiFy%z>4>{
zK+arXJ`e&2GJ#b6;Nk=>SQNjYS)eY?-ctkeHe8~CYXg{pzo at _LUv@PnG^E1KoV!4>
z@*v45DWtE%XOO5`4cgkHsT)w)XBq0qpcR%Y27>+<tqHJAuKCy(XNK_|K1N!l7g=wU
zYF^vgU2W;Jd}&MMeATlz=WvgS!1{c%Go1%LEjb5}v};Ko5bWI-cw~x1<4uAMoOwum
zUa#ZLz at xkvYh==xvL}pFheJD8y_Psys|E%(Sq72K5}5m3{pJ;P0lm*kFWf%ec+zL$
zbyR`_tVDxO3~Vpn_bm19VVN%c8>@?81rYMIvk2`Kf8y3LAyHTrEBQQD6iZh%#Um$G
zf>W+E++jLU^yhJ}0z|E%$_#%f7EgVWVUzC%ncVq-xO$Vv$kIfuzY`tge9Ryi!dQuS
zR>l}hU4g?|*do;gX4Tk`&19G>Hvq4-JsuIOx=zioh-jPbhi at D6h2{(K6a;cEj0hxc
zGAj7Gn3r0wu3R#^K1T#H45X$(d7bwU;hWNwuSlVr`i`bImFt#Cs6D)IYD}QDCz}Ya
z7|?Jv?DHm#_)v#gcUEGMVp+aV5tm?j(4AEr%}meIf4;%9A5T^NJZcU!r!HfxyMPd;
zQET~oalE55PFKTkKtn=23~~GY$3}q|Zyz6vo8^5~pv5vM(Q~g`6O5R^eCSBdK*10e
z=su8A_T?S9l!q5s4z92&^m2NS$zIc#O0O?LptzRX{=Ga;pI)Fx+_QxSu=l6nF<ZuG
z8 at zuNIm;MfpMtwAMo+x6Gin8|0AjE6zN467!s$N3CHA9T4s*5<v-A}iZ;}^I7CMqF
z?KE|+&mPl{O$0}?eSEm$I>^`dcpfOw+DtmM>3=hc`jDtj7FY)(x<&{GxUJU98OB%Q
zEAGm#SJA3%EmWKg`07T~jW<D>Rms5Ae?vHuS;Si1blg5`$w{SDX?hmWV>4;=&kg*w
zg{PyWq(?o9=wx5<6T5n#I8(wYrMgCS9oB)_a$FZDbIa_-iNi{wg}1s6jN8Sv at g7CL
zJl>lR9woSFhU#y{L|Z^>R(AME%J(ovO6NP!x`#ht$6$9K!Qsk33{LJxxU;cZ7iv&6
zyO45Buqy1vSGVGH7P3aMNTb`KVih=0chBi-`mo=1Q{ag2UG!^`SSpuAJJU-0ohZZv
zVv^CdjuX5G3&SV^g%eNRxrFOcmozYtqk{+9JCx>t(`U)l0q2_Fa;?_8#7c<cqG?gq
zcP)jUJAoX9`BETIJGg#_qq7N)0dC(Pz)Gl1Z~GC-D&x!dlczgYhY at VMCNKiYfRZK)
zLxzuAq82y9meZ$spSy|3(R)^BrT4SqF(<T}gJKyV_BrwRpoJY}1AdPD?<ebXDQ|u2
za_L9C=(6i*91)nD1koQl&)l4v;N9ix1KzNU3p^<@4-mF7o7*C5n)sn+1&XG)JCKFM
z8$VGw?_j%aS1ETXVo{=p{G+kByi3e<DLLobd*3whyg*LR>pCmOIc&!bvF&6|>yf1p
z4G3E8JL!Y!-)3HcJH_x%=%U^0uOo&Mt9=p@^(n09^)n4X`^wEg^BKq&JdbR%xJ+Ch
z#f)@aKL_MHsRH?h!y14TKTa}NX|H>jL{*{`{kpT?R<*S9zZao<JHPwZ0YQ-OGVV9Z
zjK9vV(>U7+Y}qt}FO*v6fL-MIid+h`415q=u(Dc8uGvESF$Ard%>kuM#GVv0W75s!
z_xeEZ2My77q$#VULF10NM<g(0TLCM)G(g9WEDmC_jwGIRdCYRzHu1UU4AIdaLq9b}
zkV%GgARh_4?JGQ8-i(Y_$)G)3Ll-%eiXd)YDg|Ei4eAi6*u1zl?SuM^hnf5;g^XDb
zBZKA=gQm1s9Xwd7RH8k_MAayCg at zGckh#aNNgO7{t>U}rpmQrAX21cPA5^6 at eQhNy
z`p5CnxAC#|(gW`LThYAtO5?`>9;XMX?BS3Ste`_RlXZkLMjU`g3}`fT6`F$Z)**4B
z(@T;oS|yM0z4j9ifAPn~vNnX|EDpAP1P7kmU1v3Ysw5kcFm(LVsFwiz@=vH)tsnb{
z-9wg?Re$dbX*hiK2bM9mY>uxb*;sG_Sj<Wj#p)O+R)DMF4I$&l7EUkj`vi<SM~s}^
z-!et$-b*krthx0D>_=CLg|%j8SlP1a3yzb@#C(%B%uT`u+p`Gg&rCv?F`p?+sKO$n
z{`mx29&H8i=T~!NNIf2+YxEwYX at u9+9qtoqX%eDsF1#}Tr4!z$S`VaeQ at qylTk<~K
zqT+3p$g2JjfbL6^rN)wMHi{4`e#<&t<G$EQjVoKzQfJeqaY)t4qR^1b<D0evo=_cS
zKz`eCiQ+G;;+s;X*d8&*`i7WYQaRf|p&nOBS^WI{y0gOfrtHk{8-KSa80iGYRI?lx
z6iN?yQ&y1CtnHW1@`6p~u`}F%tC~wO)Jk*$aSKc|7)~qf>Afn<!s`djR>uyUXKP)X
zZ*G4Z5CGv^MhdW;o*PpFsa<xoLG{RGbzj-(U7Z>89AQ3tfFbnv;r@|E*#fvbsB(XK
z&nehWjv4(LIDL2_sq1Lc-4E}9K*=$`|D_cf7UIs5H&+BBFp^9HtQpk2(r5(3>(qEm
zk(jL#O<9iEKmd8&3)jeYi?(rp!X8}GIPEi1BqZz at JmIXN?a+n8_&*-_ at bKLW7mzfi
z7S7QE<s38Hee4NpV>9P-G6X8}I&u$@fO=E}S?9eq)IO;aKV0Ut^#4euEWob1h&cbU
zlJu8WH at 6UznXpr;@Xdz0=NfGk*P7=TMlGk at Ag-ZDSDhAaPAU(Q=W3{-f7zcbssvwN
z0~j%I;d1n8u;>w=ZaQdm-oU**%%7uYF$!xA&FJwdL}KPFQWhczZc|#)j=ya3{=`t(
zC&G4vJFj`w{G0~bDSmjmpW6`^UmaJdj+Xxzr_&rAuhgT|yyH{;#D*1oe3*YM&Yab*
zLP6y+N&Rt<QN`L2TSLXq%H+R^z!k3L=&vNOj}{Ky*=cj~eHAc3Vd{*HeHkO$Ax5q5
zLjb8AO-Oh>tjTz18frdLNhTnbEikw@%J~EUIY7q0l?#-q9?(IrlgZjj1=Bgf)Qrz-
zkU8$j{3)D-2<;=IPsuqWke<jcN{bg0-&&B&h&?8_mxGkpZun`QPj1f-uacuunL93l
zLnORqLcq$H8vX7<%5bH5fsK#$`9tA|cT!YbrO8qO*6K~u+KlR{HTYoPF#8yMN1QI5
zo!G$|viPmh>tM!Qa#BC2V!~jH_svyb#~=T47}T?qmzn!COStzQR%<xzwYUoqMhY#8
zkKKF1-3aLp)oUYUpByQ<<P&cnV at I@&hph(dmJ~R?BuveYC8-*I`$JYf6Pg@(3NXK}
z!B-pHqY2tLQGm5#+u2gNX_~w)xc|}=KY{;gg%1MdpIw;W)6SDx8+fh?Ox-09Ym#X@
zk28|0n(gTo)9~7-vxSy}oaLgrsIZz~-Ou%*7A7fuKvN~YL)BER5)Ba~8E>O0Hgt^q
zN#V<#yqL_ at FyBSycbd0vtTYme^+ at jX-fr@!I*-GL9zF4ih_`I!PFC)ev$)ER?MJ0<
z`7a`5KHEyPRg;aHzqU?;XM1cO^dGJWGvk2WpS{}ez4ezE6NZHm+ at qFn=A(SRBowV$
z-d`T#^n9PZ7wh=a+IF?9`+=_(#33Ni(VGzNj7N)sx0~#6q|v_HkQB_-yM<^f{Emx=
zy$2-<9FPd;N at 4^%WqtG8B{|4?=yQ7zAe<iR44PL at E8~l@`SjL01{a_NTI_jQ_aJ3q
zs#>ca>f^*2)|t3Z7izAMfce|PvJ!Xkv)`Dcc(5*W=ylhH9S&i|@~3~ynFX7}%f=`$
zI5d;E2SICLo^YHHCp?KyoFx316Gkzw25DDffeb^npFPFX+Uj$vlZ1ju3#M`o at E}%`
zf;sftImEA=k;KxM*m#udNZ8N`V%uy~=&WzTDzrx6<9GpxsVRl5juC&(Xwn`dV2f5!
z5zNn)ls`L4a3_-Ne}M1|$^=Q6!n$G}5RZ+g%MKPRKatLvbK=#@zHUZR>@ET)CKSUH
zWV=5g-D)pundI9-6Ncg2>Xak9+E2yW)8Y6CaiickNdraRmtv6EyWH6!^W&6X at k7=-
zU35 at o{WwqQ&P&5l#hF;)mA9?~&cPogFW!6M3WS$PE5}N-VJvzr4HLA30q&P94xVUU
zk#a!%oL&X;o&?h<#X7q<KQ#hv3fL>HBs;xPfv(pDtajib=L)H5b^J~F5u!FH{2{d6
zcU{Wb9lH*W>fk|=iC1it-$r at 9m++gC6Z0;kA8%S7I<5o{^kV{4ZZ^j~O|3os?aR1Z
z*|wMR<9Ot^%h8&6q1V|c<${C^K4P%%1B0CRgX=Oc>YX?!6OCVwT5l`yvkwK6U-He7
zk5!ACmq3waT=ez3TZm^^FLJd1-iLJ+O7Dph=s7fV2el^<UGk2G`k!!INu|~6auM+e
zz#sraZBM8jZ>{g~C>qWsuW{hFlhgv*6Cw at V2|j`m?qhNLS<(%4lGO!sdFRLi`RMNA
zjAgzYslwDt@!M{(<jI>l_bbY0Ig!zT>HT!_w6swDE2I_PO5Qx047P0!SX{P7izt|&
zRX-ugY0rHj?qxp?9f&dagFS0?JCR>T)TNf=p2q!WEqj8D at 7R&H&@rp^-Ge{dpSgZo
zpCxPgKX$d?paBZsS^FMi#8ref0W-=IhSG|MZ;9^#S!1uSehQd4m$ovR&9ou?%S6EW
zsqZ?4(u?8AcrK7NHg%PzSqn?mJBm^ioVmKs?fezm?GsXRt!>v8>5ZmdW(D*|dK3n{
zt6Oj+)JCLw at yhol#q=1z65{(OyEcc}#x<JX%uMWV$h5<jgivL^gcyhMqzwt^J8ani
z^rVwPQL$3mNG+-Q#95KaM+p|@DtvRpQISsyHhIpjPo1Xjg1?c0XvN`wEq~|KvLj=u
zo{r6===`(L&ypU#sLT-RM!-GK|F^nQ+kGZ~4JY-shD%q}8NU-ApxGv4lIYAx?;GPw
zd!U!J!{p6iiT9a8Zv&8+C{xJdQoPqp4GNV3s1b4Pw*3;i`DS_G>zj*JM)8}=qY}+b
z(8=%_f&MvN%I!#-qf5N)XKg-TG8i})O297=T0wOJ5adS_#5m^u&mh_NR{cPsRnNFp
zOx-L)+vZ?b<w at GB<lg(yw3!mja!N}TztREcpyNyCb2G}y&Z#8P8xha&C!BUEA?JK&
z`Q6Ft2=BwZZNW^`^)oTJWj5_kw#Rdxo~OZOh+<Np`rTQvqK^RxR0uF9wC9BA98~n2
zQOr|c-?pu?3viyS8pVKx(;a!Vxc!GNRiyzwU^9nob3Je~^M%Di1WGzy)Jmj0!=khs
zb_$&1(th%PU+`M9b-f-xixJ-O{zec_&_wPB+}Ks_w37GC6NUjLBnW_Z18)DQ_ at zdf
zhG{lJf&w#ufl}DwSFj7uGxes;d<>S!o?F#UVm)X_Cwv_?rq^Fy)q`TK3Fn2k;p7C(
zEk;yenp>+k*2rVrjkjD`k4FhghaV*yg-cj1=LFSk at tJU9Q?9E5KI=Zu^W;Z3D at chD
z at JrgL)B?GJ{gQuHE)2Ttzcq(oPSD)n!2P+7ed#}jHtZMm=$)i3Mqw(S*b{;fxTn^*
z29*6ge;i6vPmU&%;yP|O8;ETr&w|7Q5!5ksQmamj*enFO(%c|dRm)gsa9a!El-W{w
zu~^a>gm(;TT!o;`0JogqFhQ;+dt#v^1f#Jbuaq9-g;y7#2iJrWfRr7sfm~Fi{j!Hv
zLt^6gHJyi{lz%g=s?CciA;}+{p&M;f!5Lk%CzZ$a3{^!&0zU0c)D7afvWP`X+q2bJ
zy8ya*EUH3~Qs5zZ_=MY~qLxlLgbvZ&Bs4&(u^fRC-H at Q<t-!0_tS;bJYT@*}(1vy7
zE|OsIRFzhCY%%ZO%r(H#A0%&3cyUS;ZroCeS!wXYsRZxy{Nv(!?6Cbvn$nFJ)^S+N
zV5XmgjBo8P%1iToWTwa~(*V*D1>?dFh at mW$wR>SY!|-6L^1T<t!Xmff<%vKI at 7NwD
z&9hR-HUzcn4aGzMDX%>1o-yvDLUKfoi^JKnot}8u$8*75AjBD2_{L07ib|0{r)kpt
zBgudG)F%2Mp3qnDX8T6B=T0!6ZN#^d?!sN!@ro_^zwl#-#On^`2#i}dvF+Y|yA*Bf
zS>i=pA9q64cstOcLfCxOJ>A^*Z>BED$(QFCN+Wps3mKQK9FbmOwrbUl61E75&<buL
zXuy>80+0MAjXg(~-2!HhXGf*$gx^PCaVL1UYC0G;;cb!ns0$q*(+2sFrFd&$9pG3B
zOX#xO2}J-KU!&}FA||M6^;2Z*#E~}OGkFugk;9#1(FWH2%Zh~b?iA|4n6I0e*WIg~
z0R^uw7LN+X|M72}amz<9d-(JaEz&Emgn2vzX at z&TU0^=AGXi1u&A&5NyK$ChbP&gu
zAyC^vW=CTmUda8J#mL>W!naDjpa>;1h6I+C#jdt!xXQWv?TxMsGZqFOFE^jb7WVWG
zWG6#eB~2FtWtqTm<eYZ!b|H75uvOxVczZ%U_m8GTl_sSkC3VvQ0+eseJVjjs#_v+?
z=c*pqDMbC0v%o+D;WYib#ihGf6!zGZVWQn&XLM=mbYHPNQpX+h1fvGYN1Afq9#-wQ
z&;{H_DMDlAyk_I|D%;mL7GzIkWQm)t1U<Fu_{DI6a~@*}tCS5j at TtBI6;u~3uy-2=
z>MN_tQLR24Y8v>3Su&2`ECA^bD|~#HYnA~y3MwQn_*v6T9YUs!k)kFpd+p^Y7v#4j
z@>7ntktIdE-Xb=TU4>+`f*5nA%g?K9XUXyg0JCbqi|0$rn7T0A8`MXcu9XsN#j3Y2
zlDU=F_ImX09o_lykH-Z2?Jztw!!^8FKPjb at iA_Tura|+7M|I;CLG^)6v#ctFbdl2q
z^6D~zVEj?qUf%D^4My!%T=6A_55ZSLf&$vb4ucAue4g`{VY1*GoV;Qe-!pvq!&0c_
zChC3gU%64*b#T;^iocpdP5_d{-Le|btc5HOHchh-^V;Ws?aSjd1S906U;zud6l(~B
z$<>xZsI_y2drAGT at s%&`hE%U$xCNU4ZqCAwZoMJ~uLn^7$PWKu52($ov7v|Ahkk}r
z+irX=$+5q-;MHCg;FNQy!uClgX#1 at 3@&s!h!f^(&hfiJxy#B!fogS1djVn=eRw;!$
zdwD&VBA`C!LGi0BSEa2{e|Vo)bf9)X^i84|o)g1{H*rY|=ql%|=@N=l_Y0sCA4V=m
zuBc|(KquAzNNJBcFQ at wq?*m&sfe?n*b8Z=Au$e8~fBZUx at +7#bXsCfs>uS=qpx2U1
zyOhi0+QzyyhTZ^qG*05MF9JpZH!FpET2d}B9!WA!Ar&f0yS#2PC~vGhh0hGFclmq_
zGBBS=*?LbSS9gf+mg(HY0SbY_lYq+ruPjP-i~C0>OlY#00RBme0x&QI`j51EN2~B=
zy~&wt*Q*qRboWiv+jgv%cwJt)HUK0}Ij)d7h{SSIY?+0TbxzqnW}3+Gq5r0rB#NH#
zXD347C*7yFG0cUMsO}oIXHZD=<cfqmFf_y_(-wWzT2GWY!TLetT*DEKa_qQ7#nq6N
z2B`?i0gz#1CT4A6E#|;F9n;wonQzEv*>f=Bqx~8J$&4q96a_$B2R#W4!(*JTJ4fxv
zWx;*-^cfx{4s&?3zb{W2h(g|)<CdP&Tx-%lL5BMG_U02 at YIjYMM#>lb9$^7hgYPY+
z4RZJ?bz(g-7>f|tip8VtFas6C at M?Oe{Cynwre;<o(hI%YwoRYz&&Y)oE!cf&Q!XU`
z8Yj;?i^+vfa~gib6%gBjD%KP48S!S2jS!7YdQKs|x`%Uw1G-r65BCTg+B9XR);IVt
z4R~;U3f3dP5Y&8PS0NA3OB<W*_d2b)VqkFPXpkwySs4D(3?+ha`V&2>Fm7|T6L5L_
z5M!}LR;{3xWp^5<N=ht4PR=ky4je1 at cZq{fI(SzIfDJH%a=Sam6X34m;Zft{c;{pS
zGad$(3p+l#4v(Nd6o_Ug0PO*>pfwG=3jVHpN58!J=dxb8h^<oA)Cu%(hra;dNiu9Q
zKrjudIp0#gjUBq?SHjDl`~!2Cy$o>M2tfF8APC^XdaqXp6HJ^)K=i|WS?I_@`ood=
zFs?*4SWsD7L>T7G<Hn-es!$O1NKx_4JTV}O#~d2J5qe)b7b3Bw7ve3G^y at _1!C+h;
zywWAOqYGl29@(Oy>Ya=^Q>g02LS~-zHSCt)Ld{mhZ0UN`8KzXIZnzCs?W%9ld|4vm
zGJODL_4b=%+Tc`U at 8bGI93}P(=7G$)h at +pVBt)ZL#*HMaHf%=zeN8uV&uF~M0fUV3
z42Lonb)UXq?qY%iFp#QjOGosE`ZLT4Mco%^1K;&vgp8cZfZ?mkJd`!u*WYYiFu8vH
z`~$0ORaUZp){t1>JE?B};+=m?2c02_^CeF5eA2-P-Emu0?<`+48nYF;I7oHKJT4Id
zDXpiAd*8hP{DX7OiD+^>#&QtEjvqclKO%~_z|#s55fT`MHXhq30F_hB$#V57T~gS9
zhQhLT8A1H626=K6GBIQI31U{~numdyTZ5sBzA7TaK^;S+X;m>yBaCxLsV(OxJ}q<J
z`DOb$C at ESTQe422sh3|Z*^cGMd?jUNLv_Yt5QL_7 at +&<;w_6Kxym64>M~@j48sf)i
zIx|ypc9B}Ytarn5JF`o1_=RD1QFFWVI0}#36xr6d!7cV#(ZQD)$An)hwM9sUL7DC2
zAeih=H{|3x2biejG2&R4_LJR!TCHIhZ}}KKI7Sme3LEA7m)q5j9)T=f{Q#AJQbf((
zTv^><8MR0^)|cD&15)@KEjk2#b&plUwcZ3k5b6ISfI*By4gigw17=1wTUS=CCZpFV
z0_FhBR14mvW2G441NqS at vv$)r7kUr!OKuSHrV?FkpiBh{XbRnb%RD)fI#TQrn5<^x
z`aumsm298CVJh;+#h^`ex|)_7HxbpEV5LCJ*lBgM at y$4(1TWbg@=R*o7ta+G&%!LF
z((k(nc3RDm6Y)qR)RL)lLjz;}AII`Vaw3H6;~BK7flYVG<#Y*Od9%3VuN5o>(+YcQ
zPs?p1u?qQd`{}}`8pzRdCv-FFm-EViIoZ#Arqa|0KAw8o9ns5rt{-jUyk5>SX_y`F
z85FPh8`zud@`e`E)m(wTyk!22()!MOuwIW-fhYaUA``>?D?m1T6-%Q+NEbI?`gV|d
zo%JBXA-=kYvp5>{6Q$FyVv?9SwxzU81l&){QPE@@t)!OkT?6P^kJk0^=cnpULs+9u
z&>_G8P-mFr%2^ye;RL(NVlSJJR-8Z6(9D0Q%Cc-RZEz<V3Y!{>wY8y5W&`|SN$-SR
zBge?Mhd>!S%AHMQd|PU6mCLN~b$3t5Z)Kxlz*Pn0?>&o~pUX}kPj^#k>9#9<kHlJ^
zcqh(^1L}vaW7>LfsC3<-vsmxa2c{f(#q>8!xskustvrArP!Kw~;gxrbEjV$S=L>&M
zihd%VJjbz698M6)bILNDZep^p=)u58+7O3L19~5Ob4g<fZ}n+nP+KJmRHY`qs>Cc9
zPmD;2s~BYJ0>LY#1sRq4U3vmQ(h|efRXt!X1h&nlu{3W{3VEEz)yXpx97L)vJn?bP
zrr%S_ZzXS=qZaF^#^$jW!6sCwmq(qV+}4A!9k?d#@&AZU4TE^Cw2+*+`h1@`j&05-
z_M(mqRI)#|kg7t3#W-&AFZ5Xbys6>N;|Ao@#c|SzC9=ta at dUjXEu3N3*4O}jUULtj
zhf<J};MOMw2&hddVjAv at Y4ZbJ5~3y=K|-snX at y$CXiNX&2t7Qo52z#(mdlknV#|J+
zvS`*$am~8?x2- at m8}FT@`g>z=p{2;mowJ4dc?_A?ar$x6kzGM#$_5uordar!2=s&m
z8pCETj`4UcPM|pVU$)3Bj6%Dt`Zl(Nd}n3wY8G6<)Jno&V^YY0+?b9x<Tj!%^Z1YD
zfO=NoD6txY4Pp%Y^Ad2mR;54Q at -EH44c$t;{Gc2q<x`b!pIzqH#DN2B;@mk_tOtB-
z{+3N9+-HQ|kWdV#(eu5O3DI}YwZsMkh0igcbY{sre~zo#S at HnG!jp_7fv830v(JI=
zQVMp_Zrc$%&u at UQzEypt>wu3J at iAM>r=^1oi>PR7^eXW at PNZ5L!!d{f%4AIPuhX>h
zA?>TC&6TD~j6ht$+Eg0{V8$rUD4m&)4*4I`gFt(X%b`BzE&&WbXhVWcC#p7nKrH4@
z9s36zmuz?ju%*nSN)%dJM*Q{Ehwg~{+w&e98o&syxIZQl4vi!ya9k#6>_5V-W)+a_
zZ54|To+7aw8bgxi6jmidwAin?8&@%ME#ZFj7ZltUIoR$^0I27d^8uYTW{NQ7biif~
zpb~^iaR3mB at 0J9l(P*k5ss7~XB}~YU0qNOcTglaT at 6vb7t|X4iiFfl%gT00jH+&54
zi8k|RUO;g+g-PXLFGp06TOnUf*y5LwP6V%v!;9@~h%v>WjcLY35s$_0QUoGWY5*9$
zfOaPc&VFfqPvX7VBp7yv#7F9MAGcTXuY%=~#6rn=VEUR~<i!V2y)RTIY~)$Iu-Ge5
z?XN}rYV|puEiusTE`2^zHt)YK=H(AF0G1XNwVFN%eA7 at Rh^VntRB-0yL4u?LDDiox
zvqe#PLRfUU at +9<dmR!*e#t7cws}xpg{ue!&f<7ohDhiBp)Y?p+ZgVx-*l&>T%-v at S
z-#_#KF$>N_u8-$bbYdK6=0+L9o1!f>--dq}_PwpTY5A59=b!b6cfjN4+4$^wG(5gt
zl)Vd?f@|U#jqk|+dTxulzcp{y_=S|?O&vj#|5PvmKHjCO)WSy%zk%7Hq-wSbC6^nF
zSX4>W;WAiXb({F(+dR$4RFAk3!8azgx|w)FBcCUi(G8Ayk3)0oSL8jS=z)^`_t1Gi
zjt$rLz(Ee?V~l4r2Ch^T@`WvkfnR at 2Is>le at cemdx~QH{P6nZkUGBD3apgJ!wE4Pi
zbK;C00B=}1pan$G7by)d<#U)MX4DIV&X=N3UNkmDIVGb?D13nfP%G;-?I#<;!~~_Y
zzQY>C=O)ws#!Sd=#RyfV=<MS&&6hui*|7K$)7{<Smtp_vFE_=HM;h-Pf(EOte;d8r
zZJVBD4O3%{M;&3i`+GCBBevmf@`UN9px#T3oDWQ(HPx5Nzc!z_q8)ZH5BX6NlHjfy
zs^D?E)_(K_zwvRFy?^^17Q_U=GSV(ydg{(TXnyn>ke><u{wOOCcr?)D+XAji&OHx#
zzXM2Hwfk*B=kTzpwO_Tz0tZimyYU+?IEkdMo(e3LvwxJF?E_XuD#}j%7aFBid_w2m
z<6W9Z`tJ=AkCPpsOB~a+?~9VN;=csI+4bi&e+HmSr7#{DQn;^Jx)@$(0U!RBoZ;%7
zKbIa_Fe=Ti-Yz>m^t!i04N&&o7x;cQ=0vPvD$8Aib!9y>a9HzUKAKkGOy+-~AF;~n
z7vJ1r20A^lYzz}GA$sr?SOoxD-?hzQBAvX_>g2KCktnb>gS8=z#0k?B)98e0Xp;n6
zN)2x$9mq{vw%RRvXjw;@X__`XtI$N0ommNs=jbbHy<CBLB|SsEPGUkHzrt-2mE}N~
zqjq9Tm*W-9%rXx39PupE4+63W7lRw{T+~htcvX5(RE%*e2Zm+UDo^DKbaL~=v9pLU
zC-Dw;@#V~L8>JVSC&{n3k6i0q)}%-oq7gD^&853u<?^sjYEC=<a+#8T!#SY-15${0
zKaT5qLT{;P%x0(P+{@n2_fF0~CAZ6RRRk;@e-%Bv9)+26o2dFjv`JBPX53CL#|FBM
zrndwW!3hDRWaa30zQHP%xLW^Vc{3GS;#SSz&~6f>ZSv=AIP5^E&Fw#jHtA0qnOaCa
zwxs8l2i+0ytI37nb*Grkq4vqWPZRHC8#e04ULG<n#-Cg25Gp8RaHtA at CO;xl6+&sM
z#P0V8V|X-VLINH=gc#NED*|`+L5USEs-?<E=-_fV=@;T at N8miVs(iGVMu<$oekDqc
z>i%NcV+7ouEYprEJ&Ac}ubE^HIP+46gaONCRixo at bakXLcy6wckX81jJ8slKSRLyT
z)yf)xI(9A?`h$%PT$7cO3Wgz_wf@=xuQ6*E$B8BP))w^sZSar2x?N+Iz;@Yysn;-!
zMj#z4X=e?%b^_<5>1=eup8E0ln7RH^2O;EG>t7Guny%@BJ^SIX^Nt>j5Mf)-ijDi7
z^A#iC^Y|WE4M=oI?Z1cneQ#b)Ca2jp7Sykx^Rz6R#I0T;m~?z7&5wjdLsfcWH#kIO
z1v4w$QP*X#ZASP90mG#JG^I%cH-p+oW`19Tn1txT1NZ@)@`+m?C+E*ie6tnvlKt5^
zo$?Y^S4$`q7V|aF-ZCysvK{uEgLkxo;j^3~fn|(Ux=-<YC$f6?@imdPItz&&i5BLz
z at YyINHK(1xmalE!>!i9o2fJf3)IgC!W%lx7w=oc at D?K{_BPcCB>)nq`e_Tko8VpyN
zi!QLNy+RF2oARXWrhOa8R!WoUpu)1eVJe_s)iS)Sw4Hua7HuvT?Wg()6f8q)NdA8q
zbDC&fneFV^7p#;a<1Zv)c_V=}ALrCG<Tx|W%k?1}_Drz5j8$1+>wYFKTAq-DB_qW0
zJ0m~H?=!;mhxarJZI$%bi^;YoAI}Ap(g4)Mhwuvq>NC9CObG(}^;9H(I2i3a{?h{h
z#q^40BAkG%jBjc(gp91OCqT1&+)!*28VfSl8~oW?uU}|y^jBOQ)-1nU25BixCY!f7
zJi{W2Dbo^0GWikslFjF!?j)zUY!}LMfTXnMlCob_1z0U%HQ!+ai%Sm4<q5Uyu!juZ
zdC2wj95+H1asb&6iC{6WsCnsH13;98V6<8QK~cvp^;`x>A~N!Z6pC*d?27OxwtGZs
zceEN*njz*oofS(#mdj2Ld-$rOszm((#Q?Dkb~h;7(*?GZcdV7-Ny$kPc412u%N2nb
zmk@|;&67=}&HU#@iUU%DU&vIQ(j?8-0-Z3DE>Q{z3^3 at 50IPt7UKzOAt?Hlw(gQV_
zCAGm%W3-mZ>R*#l_LfRWuk5UGMe1xUj4ONj`ysXf3oeIDT94WI^=u>@1|uurU05Jm
z$Lvu`3mH}bYy8g5jW*e2^3 at U7hw{I`Q1Hwg=|<fP{V|704(T7YLKzzZDMjAE<Q%sK
zHp(x{z#}u>9{wLpM!m#>39g<%*{2HCa^vDkN3&zx at EL^_;X+D4O0@$RiQM?uLhynt
zE&HkNWRyRi0rLRGNl!GGv9VdX!o^upY1GcUXQXN+bD)4dd$BIHGX69bo%Hgs)NI6$
z-h~&P_F}5Q?|<gklDnl8ongqbQ6JZnz94jkv)@vKXuUi-vvd;2;-ilw8ORo$R(Cek
zu8fGoqc>DcPfw({cE*|k|G16lk0>L3jm5FZRpkfS4X*$ZRnpxUl$<pFtQ90m+dI!;
z86{?BOyqNL+jG4t$3^VMaD1NuNvfRlfR8}67bP?sUpoid``~+KNJ-%Cb)=ESLC1xy
z%jq;5x3lOCk@}-(76mGGcYTEveFs27Qj-?!jeZf4D&>LBI!nrk5}rxvL}Q~be^V{)
zujEGkacZCv4YhL0Hg777S7Ld&)xGdI1Pnz+B>SekCl;2KXhbzxndc)=i}CyC^Fr+x
z`q7XCiR)@l^ob!mqGD5J2VB|0nJlIIZeo^<*%tCYlA9oWvo`2w&2_y8pYfT3r?sg?
z6m3!W>^R+I#YJ^f!zR+?>4`Kd=mi$hu9`3M$C1%Ev7cZ5EQ^M3CAqp}kK=RwapJ?@
z_sv5ea^D^ajGu~+t2hA~=uD<FkJhZoniRk)P~fIm>qb^HzTzTqUpA31S|O3a6A?1Z
zgmGbW{b(jeuo(wdBlaMrzVo+GHZF=<C;Hu7{+{qf?V5dCndmGspsFd88kfU0L6fNY
z#5H#n#ffFEY&2}^zOVyPd0X%<DrWkv%?kP6`VqqGAsIgs>2v7y269n0bbQG@$FM?6
zo5VQ<e0-cFFVFx^KtLLRpXkNdvOoM#D at OIIGo@uf*?j|h_a8>)vSG_K6YgnKDT!=k
zQ|Q9NCEklcbdvr2lvVD?;+Nnuo1G`(q!kr#eS#)#UmW!E1UCPzF=1#l5-gSuG23{E
zngnt?%!X0u4dcncB0>1QE!7B4S^0sza#oxgKWD=WQ}nut1~3e0jCD?}VdA%Fb;s$Y
z=1FXF$vUvKd2}OnBdQRcdgdTR(F(f=6njQ*%VD_R=l}E-&xC+gY$iP#eSBiMaMQII
z8n)OX0qC>MufZ89edB`aVZ*hmsdLF$QoMDwN!qnO>OuUI%D9=Dh6qW&e<y?X4Pisj
zt*6T<`(SY%7(T!#-R_%u+t_{4jS6j2RLd;#7mM=KzDDgxs;D`{vLB*^yu#8ds)H at y
zmm6Sloca0YXLhWdvPAJHdloU9Uu-V2c3(v3EV0M_1 at m6D<2!VKmk0TLS2s3g at Dfja
z+OG-;iLrf9yPkQdch}}oq0PG#M=AxV1b~4IA0x3olD0vKuHqoUCr^ahoaRGCl|wLB
z8Z-Vw;3xv#=I#?Hp7z(-54TIes%>pUZFql at IU~!9{Ph_ocvV#2ZgU0;%i^H52SrRh
z(W?CCPs$}V0f#$->t!MC-Fe};u~2g1=B#T%p*KCx>*}L%EU+VH`Cx96=o(b$v!r|Y
z+o6gtvll(_XwuZ-BP3=*(RQD|2)P2xrfKPs-a^H3+8gOE<SQO(@^<8u3Au31&2R3F
zozX7<>R71bj+)@(h2e;#gC-{tnkHSlaoZlD)6oJ9_MB^oFgLh}|K7*_dLE8XIO<rq
znPD1|t1zG$y;*EaV|wEwbG7L&FRBXcC(Iz>QAIB4<^X8mKA1JW*T?g`6B_C2tP+yQ
zbyJ~u-i`m#sWzKyH*a;LyRtG|E95Hr*wN}<p|(x0uGjL<B^7i6;KW4$L3cgp3srxr
z?1HN0Z))F+rI_5>%k-THFI2LL$Z*D(CJO_LWZ4TD?F4pbS<t<NPq&v0EW%PCvDJ)K
zLcb|WU2Cv>I088-6O&qpzK2Pd0Bm4u&~ng at j2<uN&;u<&o9 at OeGeKZ*2x4D^sXSUu
zvZTR<B0 at I?6*OE7r?lkNz^_9GS$Jm+DqD*scBm}-E35Am0NHCYywehN4yGm`(QQSC
zG?vWGB6r<18DSl%@OY`igUP at 0TJ8T^qUf0O``rO2_SG7^=|S5`ZH6|i=%>}0M_`3=
zA<yQJYb2A$mB{#ywk=1Ffer>2KWv5TYGk<g1NVL|vLFcd`~EZT`|M{IqN>S43OiSS
zF#>C?)zC~<zlJ2op8Zl1IM#x*mD*aAEUUQ%U15*$4RPze|MHB&`u$Uoiu3AzuE?Eo
zAMvmrsg^{U_j&8$zqZ59S7Yl(V;ROg7sZs9_%Oic?(!YPe6(?%i;O_Qm?K*|Y{a8A
z$Ntsh3)PFdGb2*W#hC>Q(hkWq;s=h7uT8gpsR<h}2Fky65 at e<a1KdF2gqu5=1`ttM
z*4IVL7btRNzV2pXsGAJM<B}I^u2=m;cA%KH?@(_v>)sJYIqk&|YL1KKkQxU21&L4r
z4cQMMW3pW18oYv`WeS?A!7kC914()QN$(7Oe|`i!Pdu$kx3wRkIpNb_o2Z5BEFo8d
z3%1iq^K3I1{KyN-XCgi`1fBxTAb4eW#JL<>xUX1FAsijg;%m=~nlTD2vz_fn*ItJR
zW^0l+ML#+j7CKQ|0jSUT)td@<=EtG7l!R#Mu)EADY)v2Kgc at z5IC40o-G6)4*)VY@
zpF^aoTBRinN9@<-TaBl}f4ohT-Ew_;97Ib;#ldaYSqM7N099dMLuc|<-oYQvm@$%I
zt)C)Zw>X)<N!6&YP~H)Gh!}`UB>f{CJ#T>afbI3h`mD7iU|w^gYOhS<<UkDPK%;=m
z3FZ0x>3%A?Tsr at iB#-!tO$19f>rj4lT}Z}1s?TB1%4;zZ{9?OATZ0=iCzibo?9Gs*
zyDT<E{g6Nb7fpD#f&@o99c1lj=yC_Xetqp&j&B;)A?RF5O4#4-!Ws6x@$~vD{E0iU
zB72#j>jWe^vP=6H{mxX3doSXS#4m9 at C~8AXMM2)Nn4af&WUs9ON~r(5!u!UsudrUE
zDI9`|IBL9j%H7X=-)}=C5s%fbGGZz17EU#u>m=7qyDP!~no#VcCWJl=@%x0(+wxK+
zd;_;BB{GflCgv`C6;BLWWQ31`nCz6n!<2~sZ2wQwje{~j>>_thvb-uJhK$TCChrAG
zQi*YS!Cu(?wYB-}D_<kn)wH_RgebR>)HMcgQ%Uc=hnRq$OcSMjWU=r?_gaS6 at 0r{{
zjQalu@*b|TJ0QPm>GfU9VF1M(^5p?LLLg-S2w1j?e_3D4 at ie3CD^5*=?Tr!W>EwQe
zjZ&2ON#^L<%bh*)I29R`3H*5ze$&t;_WYA>fQRz^0 at SK>`8m5hpVj*B6Gjnqjmyh2
zmCL-lrNyK|kTp}al^mGg$;bL6!cR9tVfHgtRq&ab%Y`Ku3TnO=zNWmmYJaM-MF?j@
zQ?ky7V9I)8I%Pfn|B3fnj~?o?l8JG5_K7g?l<!%Ap*#z_oDxJb+nn*zW7$wB{}Xt4
z+e~_V6$e*OaEpA<%fOImW3 at xD^)b7t3VNPGCtfOllH at uOpFXQ=#iSpKymhAI!GIKI
zQ7Kzu6HtzU<FFL^)-Ck at qn_nqfw)%tahK_Ez^U<BZv)<G#`LQr9z$G-FJ3caLQG%H
z%XSyLdL(IJM==6oL;nmN4~(BLd#SkFuo2z=l^(JS_~1twuo`QTMX5V%RFrqdKIj1R
zfEM~B?(e)GN{N%K28te-H$Y4Y<)IiV2{UNQJOSXyPSrek(U$$_ at G!Qcyoth<&JSNq
zvtpV^C|hXEqGB8a`1SGUB>{~QrI0dc2o*w*_nwDqO45OSG;U;vmWB<G<^Y_|sL-yW
z3Xyd`YUBTNR=3oR^EV=kk)!{vebGCK1ZAnn_L!#a>Fqa;P7MfXzVH~&go|zS_1ZD^
zh at qFQrM;J at 04b@zRXkE}n6p*(fjplvEyDyEtNo~~bsWvz_q(G3Vz1FZNkmp~54;Q{
z^M$Q<!AeQ{-2CV)cA>N>$@UsCuXdf3z(KnlQ|Fd+fiMUO<4!jK_JVxtrJyIaOzVqu
z#zpECkN@}%74j}LiAT#iTCq<^BU(;ocksAP!uR21Z+)p5j&j8U_f$*^4O#aFRk`R7
z578bm9SLjfjmv^ha!<_du4$9sFhopVz>y?8mT|z|xD^`>;It#u4_Ur|-Za^saD}4C
zhM=wrE&X at eUm=2Be=wV<Q9I+_z?(kOkI=FwKQ~mt0(>$bw_<f7pZQ{(Lytuj9H2<#
zNx+kp>B;Nd`+T&QZI`}T%_NbM?*0~<O24X#$HejCyVn{gSSrC{Hd4dj7$#+C<7jv3
zZdpddV^CsA@{qx^w6eP2B$lN8cv?=mm`l(F6tY>0f1OjEIWQ at 8g@rOsZ9a~^w?w~s
z%$c?AgR6+Jf}x4+x8oWEV<l*N!mLRPdMCaM>#v}&4Bfq9O3wC`2FC~1Poo4J+&9Dl
zQuQBn#d(WxaHN$R{T1;+i~=?yntpyi7MoqCE6mh9A3}&8aapmfzm=Kz1=)FzRfCAM
z_ at Z2pJLDeh3PL4qEERdM**Y4}LY`HbJTU6#xPc+iiS9?oK at _W+Rg{$`ROSo at 4N;U@
zl!FdYF3+m*?@$d}+N|~ly1gKLo+VkTzl$*vpxNY7!40w8)60&Ke1tx}*MV0o$73lR
z{E=Xo;1X}w$KfI{A}uP}RX~R&8X(kjYwC8x at Mu)kAZZI2<4$7xH4*j^-d4yqIG(OX
zLD#@)(1k)Ex}(?0*xoC<nRYXykjCwIMyyYo4`Ok!<Nb6yI+Cu6%5)RB^t&mTR%fle
z$`GDl0IaeRMh>!%D)FLR2}8iSZ;tf)#)xe0Ej2t4s{-jx7(;_8o&T|cx0J~48IFeJ
zI7giZ;LV9`Mdv5`-90TuMVvGL4~Lv%yt38sv?YO>GZ+=K`tI%(FzA at 0>TQ+j+Y%as
zfSLxgouM6YDvNzTdmRdd-g|(gsdg*C+~*@{^um13e;{cR_$k>Pkf$Pex#L5j94c98
z-VJTY7AMehtE3Lu?D&M<ms0tcN9aFBU2O~`i-foUw_Ye|HJ`k17Izq1X^+A4?N1Tp
zkGGZ&r|F((dv;{Oo0*2P8yWXzCTnc;6FtYR8-v=7fW$Dbtx1v#a3JeFWm*2kY%E?e
z=aqHVMiD?v4Gszl*@(FiV;b;Vg6%rnzzefsQMzLm-VPdv<2oeOiWBK-XKFdb4-2wT
zTUa^OT5stn`gu>DO)!$zkpc&A-9iqUlL3#m4Ck=f3MyOe;8|34?%DuZ>*=`^><a|I
z)l%b7a203{<b#tgawR-QH5mp=B#y5Zzl^#<XF0A-B4y355sl`viOO1e;Ir}fZxs9P
z4?UGfUxt8G=A}|rSp|9ym!F{4#n#M#KAS)eKm}{+q=y_chBL4+g*GIk4u)RY5U5;f
zjM3C?E39w{5WR?sA1NVNa`%3wTbCat36w2}qq5HO?^}OWv!Ml&kQ_2NJCROTVJ?4(
z+$zHr%&d#4)4{$WEfnaZtC~A<iv1z?Ri?%)7+!(HT&;esv8c_Q at pj{BePA+O1JnL<
z1(~60Y>3G~1MITMcueD*M5MN3Gop&!T1S>!>wMF$vNM=?0dldiF{g(%3M0wmVx`RO
zc6%X_lZwuKFf??d^RxFeoz%7D?_(=+?$w~SyxSdHq;P3R+wcJ83xDJZSz>?t275u~
zhaOW8&?*OiYp8w{c`J`)py)+sMh;1Qg}7EwW<jXu|1$s1K#^{fZ<^&vYj~057vi<d
zAqBa!fB62SOJNDvQa+ZKvR9AEG0VU&dVNx>`=I*cOUe!H at U1+YXt8WJ-%J_8n5J46
zVbR$=d|;T`CRKgdfCQ^BJK;>1T7DfAhs)bApNUQHZbcg4)?=#=qx2j~q=S!NzKY%g
z9~wJXVq2BQw3u#eTGMjxts{*Vej`<CBz2QX6JD4(=z7AK$(ulIW$fwL=2xRqVd-~r
zOxUlTukMPgvE7>ap0 at AKTr1xVh<ZTCD6 at 80W=>{Es at QX^Z!a+ddMxb3`If(Fb0xzY
zoM-#{buu$V_vi1wMc;Ff)}re~wF>d<FEtb{`UH#^eeR!J$3IW5J^N1GV2+Ly69$5G
zSJsC$!lY>Dzb4l6BZiFPz}#}gEjxodRY_dhPgzj95pLrX2iIA*T;p|TV!98$cK45x
z)!=eP`vuz~==%3utxduv!Z5*j?j$d5e9_&LsG8MVD=N|Jv`I@!<1vup{_)yPVXhwp
z?08jE_ZqYo2|p#&Do4%j2m$ELZg8}<QyZlDz0r2C23crT!JZ-M9WD>qFD_I?If2}<
zh|cD$rT1L;!#DJB98awDIztO9L;JPgiz~l$uMYRe#r7&_db*!!V<TpVSeMMI(I=!^
z(z#&`f!Y2z*{bRzS$bExsfks$!?+TPiGx1bWFTRHpN-f~Id(3QEi(~Vq_adVsLIS*
zRScp}=0rq_D&MH3zbTdqU8_XuVCW5TZ^`^0on%go5~!BSDjJN7d)RSBe?ZNwvfRhp
zg4KWm=T_d%`o1~YUL8(fx}dxxofoK<R11+4xAmo=K{wl7)3XLsm1IG)fng+ObUxLi
zM3zU~YCc2Sc_G)=gMi#!!E%IzaOO+}3}IgC-=J)kyWfv%XR_m_M)5r~1f?+L$f-0y
zF3Oewg$7uFvV-Thp#Uz3W0-PpkspJjl{EU&3CT{kL0IT_cYvC2{mb!hwnP%LFTZe5
zj#3JnuDFu1*+-9s`Y;TT-M=-oHLW?=4>h@<6&WCWTxcsw(KrU*VD9%@Zhein3d4F~
z=9;X5tu!75z}xgl#FD=^AQv<YKO#ibcQ@{~L_RGEhQIBXploYcs}>N>)cUa7Rmu}e
zTnD})D^-ZvPVvF3**iWxCPbbeg{O-1zZ+KHGbU)bN)<ud#5!#xif`1QNk^q&DfqEb
z*FdqKV|G2Ay4s<4FxJ?&889ev%CzSWN5RK^GX^WU=C1 at rNc4XO9e>WHOun2$*T<((
zs&WkJud}V!(G*|9TTt#_j8C3Fu<9k-6(5P at 3rQkj1`VX!X2cR-T1ZEtW|1)ZZpfI!
z_q6yLinlbmzHU at WgVva&k9fJe<Kv3KzC|-GhnuRO795d^37BzRgb_3HAKU88tq^Y(
z7m6Kr!xH`0jZ~_O-^)l9Ni9(3Q{8MiN(Qr6Rj!8IMA;p2ZRgv+issm|KOX|ZbP(&$
z^wG8_d}v3k&^;X6$c8RQ2vrqjG}t+{X&&Za$<Iebut_C>K*P+NAh}icoq}Bvo7IP9
zY?iQQ%fxTw5Xz`dnK}yqvj1x;HXd%48NHQYkY|f~L&rH9q>N1~#RqqWb{Np at ukP{j
z6CLf4H)30H;7#w2(jT^E99#(8e9g9Ah{pu|^4A!!l+9o4`u2XJWMSO4yn=go1<e5#
zdxxILB-W$Oc`KAm0j9%<>7o&g%ai+6rbFf?r*$8Y<#<{=(Nyx-{7h^gnca<%cBTnZ
z^=9AYgUl8h?5G{V#`a at YWh6$rJFBeV%0h+q at El2ap+8P3<&#b5S@!%eX5c26>6d;d
z(RZ)<?>WEN`)Sp+9233OBrdFH119<WL`O3L<t(aIo|a&qb_wmEfnpF`8u`E5- at mI=
zH!w72p0z24<SDb3Ccf=76Td;MhDywE<3SpAyO8TBUv6`CgT;=9F3Sp5<cW*LB?_h=
zeFR#`JRg=a#35<Ws_l5F-ei9(X6%rW{omD8PAb at Uj;>w94z^xZQ_NJs<UcpHz61pu
z&g-6eM3J*AE&pd|;R&CPUjCGHVx%wM=VMag>=UYRIuirH!NE8Ot20aXvDh}ntU*v?
z*oynV>h|DUs|k at u6!MRD*%oss8x9V~J<*`EJAetXq{AhwT~d+xiEOvhs{HV%y<3;W
z8>O?KZw`{kQg7ao{c)l>`h5J)9cj+(JfdjbfDf%cbIdT#U3cG9ME7X8G9YZs+!*C{
z-%6(rHdr&z(l+;*6Pi2(D2q0gEqJ&YmNu%Q6FcbvV|Ux1dE8wFC#J7IiXJ*SC^^2@
zZN(8F-Y7_mytM}4L>OEU|Bn=6C5r$?|CM(|d<qaz1ozB3^*V2lXMFfV(m^9B)aJgU
z4$SEO(D|6^_9bda0FBVjL(y!*Nrd at pe!6dM(C`inxY~jVT~+ngMH{qcrn#LEH&*o3
zl9*E6<AK$NOgYL5N2BZTK`&!ZUGM%_<s7?Gh*a;o!FH)fiQcPEN$BE<q&9g6$aP8N
z(wid!>g+s*^p<cB6CQCx at KD@KlMK at rHBhU;o at J%)+ at 6dNz2&;IF#(zz^z~wV%UjXC
zzth5{r<0*`0Sm!y at h#I2UyJpm&>yh at _4&X3c*q at u8A~<5dn7gi17k{h5d{EZCiunU
zb~^z3GL#bqaKBmh^u_p at wzJo1P(LdDLw+gy-%FSe0Q}6zE6zBVqRkP7*yBg;NjwX)
zo8=%{Py`K3B~e*QNXd_|eM;12U*k#v&bsRc0bEGUr4>O|q|sp+0B%V;u+h5=mFKD5
zR;oU&8Iz{3V+%4fFQao)p#L$E_?RC1;^^j}ivElEW*X1OzHG#VOF+No`4Yi019O`!
zZHg=pz4X{qRMZaYwd_}&z9@)c^ujA3!UBrp#DR(Vhx%MKELZVJ?N~*(7So(&nm7Mh
zs4SQzB_^V<+wsU_!Q_sZ6(tcL4z47&voHi%fFYDR?_EhlmK+*;$8{&#s+U2Dj(A%{
z-1}P;+7ab(fC6Iqkl+J+q<g at J?w5 at hGtG4Dg|U94nlQxa{kdxCNYLNDsG_Wj;__0d
zA56E|5&jzEydaMMh(tpBWZ%82b5<?8j!&9T=^>OH4hIN3vk1_)coh9%YRIPuBurG~
zt-$lhU)jvlD_0A>$*Vh$R8R0=lEAu+DfEuC5P#RO7$X^biSS3|a?Un@;zrnE0Std6
zQqX6~8<X*m3HXdZ*p(fdlGwlXFk40TXsR{};<sw;{CoWD*)BKmo0b1ub-4O<fdK(R
zC=i~Z<ui;t>yE1-1Ycyi2IS!cV>oea+R{FI7Q)i8AnYp8E$2D3iR at Weo3gKPicQ`J
zHPtY)ExxZbReR?<7YSe@>7jCrF~o^B)e3rIcAUF9N<)u_TV-R9<b=Po<}S8H at 82ka
zVLRgXe<5L0c|B8lgYClmi7d5BUhk>X$co><pF!LG9vpUKZ6`g(KS-ywr|A4;<TD`L
z_gpTm2Nf(`CY;t4cl7dq>S#m!yGCF#I^Q(zX_99*37s_$Ex>-E*dpkH2cO(!O!LE&
zX%Y*fRm(f8NzW$4oaJ*iF=AXe$m>+i3Hl-W6nn;=pE=iBd^WZcQ4}9b`!*z4yr<|H
z3 at nEuJ;HI#5gj#jyb3^pca`5jWEKSN$508_m_H>49}hO0i5#B at Y@k*evQ!@r3901S
zlr|fvi at 56Kpxi}Kfk64ztnlZPS-ML2Z_B6TX3KW1ymqMw#|1BkL+8o>co(MWHy+?)
zbEHd=oWz|ekKN!NE>9tlaON==9ycPi{6`(U$@FO_-T$n<Nd&7h^t at r<j>$NLXxsF_
zrs~e{3gD?woXkwo>0>A>Dd&BlK75VvP*L>>5%<f5=_8Rafw6WzIr9ho1#2rc>BQ;V
zjg|N{pF$JTySNAVDqmd);^klbu4tZ;b7lK43fw^-MAfHd;|cAWGj`YPo>p?c@^TWt
z%)U|UhAbpaIbu3?VV|PM!HE>r3h4Zqz&&Zh2EMB}5Zzv0(+Ln%keTb`+E at dFCcd7m
zIugX<MQp4GZ{gTm+LJJXAw0f<-BLak`p+yG%CmPPM)-1FJ(PcB{a-?DLwVjFvdD|;
zNF1*UjW`tVG7H*7Ts0N@)>>IERX at ar8gSUcS<=>d(@0!29{^2_T=vgLAwB7e(~H*!
z{cm#m5I<aUvJ#Lh`zqAGz>dbyEW-BZX}jf4WZHs97df}xoPE89<?_-gW}$-^q_ZRl
z$Gazkp3pk(9xz(8om+NE`mB9bCsxd)`)U*?vGH|cmR;#~m-{RJ=l`>FuphbML!3cx
znpIih_4`X#ygl-5nFyZIDF4mp-*KMh$~AEEsDXr)m}Xs63KsDx-g*N>Fv=nOK{xU2
z#nC{&{-!WLHKc3NbCgx;|A2G|v^{VCdLGou7;mJJ+WKrms~EobXQq(VcQq4F*VJ04
z at CWx9W2|rx_o9Iv!&UNCWVwA`(r8!jN#35COPx^;hDJI8r0J&1F(e)~#RMA=Bc`;Z
zj7pmf5l+_$_<U(I$Y-_)Dr%;Gx|%$cfDhfqn+kK$Q<kP%g7C{#0%Rs2Pqk|$WNhY>
zFB;J6L&3!HBx0_k!~Uw1tPT1rzrgQ&q^>ng1ji*gFNa5)UO1^_62_aQynfdJdOL8a
z3Q)_*MpS-Jd`Q+29e`w|xhI+MFr$)I!ZIZ^XPc82`&2Dj at 6{y$M6*?riT^FMs+#S+
z9FFwMZR&b(`Q9A{3gN{9PurBhF4$Vxz#ZP|tEeC09>r=(IGA(RNE5i?s=LB|J5hrJ
zRu~7JIl9p5ux~!Uke=Hko61*%35or(2~<^(+Wd`>edn<vH1)cGQ|`-+P?Q<H2-+}{
z1Cw)-B+irSzHG4TSC?XRjXOuBcWKruV1z_Nu28t~=ZaNnP*w$vjmq|RGI+I+?xz~~
zdGNoKwy&n4XZEN-6dl>(wdpcnX={rjSkucj-S%0CYgAG%iy}bv|8?Qnv|G&=?bqe(
z-*bv6Mb3QgbVd4s>tIYJ0jcGi_RY7a-`QPCVnP0o at nW!=Kf%}V+k17pys%463_Xr?
z0~^O424#UEY at J&!RhqBd+bBMj{;XVLe2rN-xjugj*=U<07D^e=3^vH4RHr2JiQygk
zM&VsA;GR}kF{xyuk0(u4pc^|ftNB*@t!;~1b}QY|xr-N`zw*A|0u!opMyBm8UMJke
z{HUBXMr3?N(>)ZbdN0byAF4vU=Oy<fK+sB3(1E*D93EMRB9`^dg?K+PhlQ_Nxp at 4J
zoojoVeskva8ye?oEL9q+k=Ua7wGl%v=m8e?*HDfogEeuQxI?8K-EgoF{FJ7|=3j8b
zd;+UY`}$OA%v=Bn)k6 at C3L{Kg<Ig^$2tYV%k*NcDCo17v;ANZ+gqGjtiVHtj^hhPn
z(>o4iLb;G*##&UiG9nD>F~n`Cf6SJKDIjdnY8}0A8mYM9#rozpc$!#M6GlbtQ>u3`
zK<i)@X(P%coVEyHl43-#1bpB)&NK+69L*h~s9?E|@?Vthio|tGG3o3bG03hDD=;%V
zzYRoO-RdauP}k8={s^=2!swd3UbaPB^^bdL2k$s6iaf04+je-=KqqlD5$$YTm7ouf
z0TT%#1)@;}d*PmQ at O{n)@`Y2YD6kNv`wg+&2nR`stoSY*O030So#K|^7}|*?Id at n*
zD%BS1TdIHh#$xjIY~b2&BB<3s{}1(PKN-*pBwhX2^(*cSSE3iewCE<YCg*%F1KYH4
z9Yl+1xChI9gAu>ajBL;9DH=$UNGRv*OOA%Qthi4EDaN%d at Eu;L{R})UIMB5Bg{FvP
zTSBa5_zFhH37hD4ZgFt5leO+I#jd7}A9!{2Z{40}Rlf&XhUZ$?@&G?Tz`xmrH+*>Q
zNbb at Q^sUifjh<|hE*XX~{YEOmUI|>mPj^)EdI7PCu0S04z)4*mb8<rKZXQZk*Y0n9
zs=x99Hs$61b=N3Cmnn*VgcDCdHpwJt*`0fO at Kfjk`5Px1*8X?488I5DEj##PM`NQc
zA(2Ti?gDrDZ-#6M- at flt1m~tGjonc_Lfd^i)7F}z`0Y)|!jc|bGz at 28uq<a>s{;>Z
z;0Tf`JXa4(e%{SmRIvKvVIJ^vP=TQjFgHyM4zzEBXJSz5oOAz-JN$a-wdLql=>Mw^
z$EQ9!mM?!<_y*qbjs8S3I at Q>PytC`*jTmmnT-V<xO|A!x_(xUXf~^;AS516m-B6XU
z2>m(y6C_vY1e7ve&N!x|z<CVPBCwAE>4R-G!ct>mf#RHEvW-6t8MarKcGU8^&O6Z2
zfn;hkhcK2^4cUw%2Q8kWAtx2_#)uO*a;Y8(^UBg6$$4XNsf?*1KXHk91jYj&prCNo
zh;@oSwBxnmWiQM>;w9QjV1N|56BMSkIy4bscjrLFfie at 6_iMj3?1ErP{n1>vc2~P=
zDiL(iI{}IwF<8<@_Ka$zQb)qB6NlMjzmqVgnnJQPmL!V4%$Zz=fFb4?KQ`BFu9B%9
z>r;|AX^7Yo4R0lnSZdMItC)51%k$@ns4`D28LA!(G0y-e6n508{f&g}=$o2Ewst#Z
z`B2;>wI-k>@)R?}Qz~n|hdHrYOjN6UH$jjHXQ-gO^iH*baZ at IIgA-!=6d+`>ES@|+
z1J&WO1%(vVna1<4k0b at Y(tD|JI+AmYyA=@S8PzI-e2`GI?9c-rxfw;HzeJ at sC6u@_
z*}x?IG`G-MxtC3eug~y&<T?k#4}4m2&nK4K<G&c|d589hkG-i at t+?Ys`MV>?qUs<a
z3D#^HyxyICS?23UN?p!f7X{o_<QS+FQUWCyzYPqaSHJj};|%iM at n159E8>Qym>=2@
z8ol|LeHz}wYEHN>{-c*;7lEDF#21h^aC=_%&OCIJPx8_!$48 at apw%RpXZ`*x8bi|t
z*_>jvahlpPb8a?4Me+e1sTC*v8N_)*z0MTi^(uu9JeDw2tqe9dEQX~J8^TA|f}ahp
z*T<Uvu4(jWT?U?Gik3jmjL+btW0;GD3?#2!=jtmY0|a&7Vcq}6`|x$l-1&~GX?Xd|
z&8fN->L1#7BpEv(<K_G?SHGWV3xxGJN9sh0GrTi&ulPnqyn|Y4S<A;eA~wrnl<&68
zpn>G7N%DQZ_7v*ui-*3^wAcDj(Vi5)y(dqdP#$tI(`8QCLqBVQ5tyr?YAD-#v)n2x
zq;<bX?IDTT9tm#9$G8^6;BxrDalU4gs(Ro%lK+|UWpgLmd8Rauht1udh`-no at fRmM
z<gawaz)x*`M;tk)ZvM at D5mHw#CJ$gQw<?(7Q0hZDrNadl^;_(Ade6NoyF6c%7%urt
zV$o82Rc9<gnOnTeZJ-zZt@`vx1rg3OB7gFCekm at y2ntK(kOud701HxiL83G!xsQ&s
z4mh1IzCEhi1 at TF}1!2<my8nPDc*>*iDGQs*o=CSqif!}kZ at 1WZ53x<=fZt5&)Ag*f
z^Zv$a*?OekPN%Sn##&LtPfS)VZ$e5!mX1C1UZ5lk0T;j!p8;!0Ud#oTmbV?b2GQW-
zc)IE~?wLZ|0z=wz`O3OI0+k5G7VUjGZTNq#CLDN=lFzq0a!4)qQoD=ZD2rc27S;)u
znMmwBU!>nl7st%#*vPIGr$_j`%WIB}E6S?yg|uP at Y6CC@_AHA1%d8ZcWm>?|yaJ_3
ze90SDq<OfAFfPT=-2@)V9PWO6a-4PRp7Isw6|qY)LJ9aoNEG<^nTy49xP=zBjBCp8
zWZZOaH^X-rn^h%NIq8knA`2c}@OM(PN#Z}Y2#de^u!b2rp7KN1%Y!I4jLeKE#Sie0
zt3~Uu_flzC(^HhG&L{SgzEWHZwZA7{`c?^<ndTzrKf5klYQ2V at zb#266_B_LR;C(>
z3ejknr1n4Xpc(bQKnL)-UZwNCZDm2H`nOPagRejjTrnI at N1KRgH~cERrB$Q_HJgSU
zY6j6SA4N@=A#rg~CbG+g&$zxp`#R0LM2iETcwSU{^TLDfEFVi;(Cl2+Es430TY}p%
z72wJ+foWCK#r9{lTlbW^X5BUEcF}_2vjNkT at 0GbelokjYpL|EpDgY1bWjg>Id_ID#
z1qVDQfbo`nN!YN>U9%+L`K5J|{W!r}R-J)3B%;g<dW>wbV&g66kh`&+1H($^Ars73
zJM-2DOO81 at l&V3C)Xz)|f?|-w2fB_YGt at 1hjY*=%!kuq3r)sLttCSh7!sn^;=TLWx
zo8<ir?NGK4%FwdNx;t)%>8;dx$;;4%nQOf8iM&hkh-1(~N5~&(nwsBNTXukIO}ZY`
zomaEIO)P_pbs6~&cKw>f4hx)89fl_LCBT$vIY8;6<tz$_WpDDylht*2w^3zSz at JIK
z!1~?6uqni}OQoqze|YWT%kQUa7hs9l(6JF)omqy!LA2RL2Ej9BcU_^VrjUz{qbaK(
zOCpsYT1K!Ff9`N;qjm at jveWDLN3S!*myVd$QBAcGhi|A(WO1gs4nhm9c-l2|&8B)A
zE*OF)LfP2=lQ%6{5CzjosBS<<m+LtRe-;hD5E>Rw=YJk7>G(K$y6+`y1H=^nnK4S(
zgqsNsY$WIqdlo#7&mT8X`uro}bg5uFB=$L#p0px8Wfd$>UvsH7_m2|kRE*8rgfpk#
za3Q9KCE{GRm_EBtN?f_=DfDTz0Hhgt^AIo*A5C+XSVofcwZuAdtdmJyfHcozmI_S=
zZ6N6^OlYo|OLR<Dpe0A>w(C!(TOT_|x7>lSym5Bh{Y=XV?=@-rfqS`G7`^nmrc^?x
zM!NpZVpenm-v(`@>s=>OIl`VHSCw2?CFpoiql at 6tI(LF)L{+^#)gGn=mdl6x0oR=7
z_a24RXFALrU<>2?M=0`!`b;Z*b4lw;d_ox)VIz64WoWx%hK at UCNMLV(V3uWY{!X|1
zs2Wb}uya;d67iHLyLlmm5vZ!MEhyz at O%q?4!ZOwV==hsvyN0{E&)6~O{3FKKu>z*r
zRp@}!M+OsVCyl+il(L#tCSnj-`<w~YB#Hk>UTDX7Yle^0aV>Yn(-lCs)tQ+De3I~K
z at 25`b`vHpr+tvN5orDWTq1`CzO8RXXt at U1RJ2WrpX);1JbdxwIg!Afq5tuEeji>PW
zKBa10$<8Jgx;3x8kA(wF4{@V#{>v=gr+?V!h0)lsxioO#JZD*cq_IU@;nfJ=leWbo
zHG-R{N{1dINV<d_#1o+VWNtmlMYr02Zo*7H*KpOr8vrchZq4XbuH-sl0ElDu4CA_j
z)yT69i^_ at Z>q(y5QzqhQNJf0`?{+^-O!Iv=8?IiQ+rtk$19To2sMU)YvQ{@O1r^~b
z2Lf|lS*>17br&lVil>@<%JAaT3N)yBB+ORxv|~>{5R*2ID%63o?kq|#pwms#eb$v8
zFn4ZFqBl;GbT-YmtQ24X?+K-!zjfd_5KaI~A!h48K}mRANSH;d85?^l<%!*uBq~Jd
zaOjpyPaOeohr at JFlTq(82e^o#Pbs6na|~KY$6 at Uql-uK7Zf)7rLj#cJ)<cwI%dGf|
zN6KbQao6j3_(?=%<UQK%Dx5Vs>=aOigED>W9UI`*KKR~y(vVydb*e(#(u5$@m_a6G
z3ySIgMXRLB+~KOMHbKk-slK|jUKas9{uE?8JrWOz&g4(0#&zOU3)DyU60Zkfs*2UU
zZ at i9liIG?>YNBK<k2sYG=I#{G6b~vA62_mg!Vvt^pVl10k_R2uUT4cWs+VXqRzIM=
zxJHNx`Dgaqhv1N3N~>AvRr7ELQGW2&^>v03z-)3-T1l9WOU|JK^d9dFB&Hd6N?Iy-
zcbkE-%<t${C^W at h<$Ob4-6*KZ2JYc0^AAN;3Uy-mF-+_4mAo8#;Z)pMnfHO~e$9Q>
z?{KS!76>qZtwKUK4Coggu_kG_Z0Tp{^;PpHZP>pRsN5`T<16I59=Ck!T1sy$Skj}z
zfN(KxpvwH1T^%Rv0m~CleKE6(l$fh8{#zzDzR}b~_PdASyk3?Ei>JY1G+G2J<Pp at x
zo8V-{C2QR*A{v}a2+!0qa!E9zYcj<tuiVAf7m*n-oZ?!2=YmVGJ0l!&Up>|=q&f?t
zPPQPld)HffKnD^gsZb}xipJ7Ad3zq_Lc+wJS at ugv`!2IclB0106-pnbOFA?Vd7cD8
z>xYM5*uUj-P7RuMA!=t2KtCY|^Ti2XFY5QXN3!k6oM#JkOed`5hh0n5TT<h&cAEf;
zp6Mkqx9pwvk!Vd&d7{#%j8CadKM{Uqq2g|?#`y(^tCm*6KkAAv(wmx%23B)`e2q|b
zoe?hb&(t`M|3m at kR0~g3^p9CO at P!vfmygz1%G4w+uy;uewh10ysUX at HG-2$yFbtCm
zrn97d at df6{$UP at f?vi4Qq0^)c>YM{v?Qy!jq4rWcQgw~-Vt!tR25CZqhS48Btx^nf
zLWj78NG{o>-$hi|lX2*3-`R0wOXOIh6TR%ezwgGHb<2FJP>8A3f(ES28bO*v_JG$f
zXRwj72%rtIA@|#>#5 at gBO2MRJL62T|NfGy7OC?}{rYXC}aexY_V_h;{E_W-yrU`?m
zwn>d*+1a3Dem1f3eckweQGGk*p)UKV7wbvoJiO{_fYr;oA}vW?!cE$*rWJ0 at KFTYg
ziE1Q$x#SCsBPLx$3(hr)a<~6eNnTqK_3Xrf(yV3><U^mZ6tfG*+jiMtdoA;)UWeU=
zHytc1`_Vf>O?7adR$odEV$s6i^cZSVRpt(=(Ybu`dz>MCA|Ny04STbR4b+@{SD1~5
zuR?*k!7yeqN-1R0Ciz$Dfy`=W=4n^|K)(dS{YWx=v%zlbnLrZCADUvj3cV@^O#unN
z0EOLLPBUftkSTZM5q%lc>8$ak2SDVpxlVChLz6PZK`OKgP at X4q7H8I|)3|a2|1BYD
zI+xakNnsg&=VkX^9F@~$T}mpVj?7)-{&8g*Kj{}$r7wlHBY>?`qd0=lAJ_l{q7!-(
zp}-!$t{DSWhb-W**t}z0M*&DIfJ;~K<MZ)<DR#476E`I-mcP~M?Ka+n+tvNsfE4&}
zlaH|K- at 2$V@)oL`h*GBI4ywi^<K0s<meFvlaeqI4pvvkRvZt_#hn+4 at T0UkY>!!CV
z6p-Yd#Fh=ejL9ca)gFA(M_}q!<a_$!jSZUr=Vv7jGjox|5>6!lrJKm!vDiSb>@OtW
zH^7$S#1cN!VZFWyl_r*0?o=>3l9rxPz`cqcC?|kel2+M!=?!ZpMmWRVtOJt>y!RzR
zhiW>WT;;Tj)Cwq5m>W9zS4evXYsLvwOe_lm1wS_v)lQ^|Jrn_d!vc3*L+g;CFeBPV
zV2dEfdxIV-dpMVBBSFKjt?G>SJwuIAI at J8hp_+FpQv6epI->*{_}V%x#7kW&+@{GQ
zM-`-nY at z>EM!QI_9|cA$<UFI7KC*)!%TTtvalPb&NuXAc0jy(0qB4h2H>8eM4YUDK
z#5S at 398(Y%S+Sw!cUtye7e4ImH at ZHdch2~tk{I(uq&l3%4~y>WupDm`conL{m4rFy
zkh1qNN3x<F8><8<YFxq_QpTt+T8Tgk>B&KAIqU_|xYfe+I<f6n#9@&d>q{)+POwol
z-4Mb-%#&-DjTb1O20E7lwa0}|0%{ufO-Y7(19ZyCY??HU&u=_qgqkG|Gf at G${US-~
z%_f67blDbGtj10CnGsCcEn8YgHmEmkT(TuLDjLzOa5OT(*$OAI at A!c$7|Zh@;J3O_
zdKYs|=&(irIvFV*Z~R;ar!9YBwk5GE_npcieHcMUkVL6F)(QB7xGnC_)}7FZh22fY
zB at 0V?Xjs^vak*JWk<hz6_QI&mYT{ayEv)6h&G(tl3D;oCT2FuuZq9HSIsO<|oHuy?
zK6wkImAn5cnH-DyCSX>^d_yw!0pe>}$k=#Jw at ZSwHEP0s;FoKf_r&k{PXguebD?o8
zz^X&?w|{uS4{-Ax8xYnt5Q0{J98k^&H#R=I&FRSgBYFhV>pmJU;AyU4>TsX$J0wV%
zBb^;*gbp<gP<Hq6-T`0Zz$j1_tzwqIwUs$DwhAeMlInboj%=^t;LKEb9m4Z9?vTE1
z(LKN%J=0D(m at Hc7&_V`GX=%vd at w%0HBekYo*jSYIGgsjo3Y^o}ReC<D+svJDIVSl=
zCe%CMJxwXBh0L^jNkq>N3J{rlSB9=IA{mu*L}ojpAt-4c3;ex-b1C*!>@c*|-1&!1
z=PwUh(t|rNMtJXrRbF3vC!o6fYPa{aU!0w!InO-6Lj!a!6<m7hD7dB8Zt75 at F3PM<
z{PoZAW=Elp{yKHa_$LCSG=0mXYQt6Xu^E}0O{$vp5DE4^OvOZQYMw{;eP7=h56Gl1
zX7nkE{?vLeWj`I3O9e}tVZ|i`t1Dblb?OV&wh4hUPaKwXvnHZ?7sEE!glAkboX>N?
zr8R<LGan3vM-m85CkH>FXQvpG_6_Ai!M;=%0(K}Wd`drzHdq|)JuT>Um1}(?X-*me
zQI{JCgLI>i6|a+rdIC{Pe+xV10lI^mLa`3|eVnT at G$D=R#IaA^!})EiyC&3hbwG~6
zUowG99F^5xoPr9>K(Hy~ps{bwLp|G*gkv9OKz=z}0+I+f+X)$|iL2l(*h=rxCyWX{
zms*a&N4Yw|QOkby8%NNl*n3iEhW?mC_e7}BFxbe-$U6G_^!zbIvEy@}z$9$b0rGzJ
zm?A11V}B?NrN!QG3aw_XT+!t(1OQi6N$0fwK28!G??|<Aw84}>iGU6NQCRorR-Y=z
z^_WmU4M)xckwAQ#h8Li+jI^(Md4m at OsF(FrfM9&-kT0xV1B&)wc%)x8g{1OHfc(<w
zd4SIdTOAB>6})yE9>R+KEwi-fDI71QE)XS=niKZ at Xet)KPMxDMH}{%53vIFJ{<LbZ
zy>M{rY=1KSOYFJ_m4skr|8>%xXO-&lW6YKR82uhPdh*ICww4yB0t06*3JRd!<g?XM
z4sqGPQ?-?U{38JP97w%&!l^*IkJAr5g at 5_#&~#?AcQ|K?tfB=v{+8hk;YsTc(CFJD
zw&l%(hn69N%~^#H=kc}k^X>HpW!I2J)7!PdGNjt1qciadLI#i?M9o<(^we#0$8oV%
z52se?kxXq93^-el)CuDe&l>@y#=(PjOq)etJPJn|hR9~9;m36W0MkPjAwO!MDbCL4
zXaArr?L2Y>+^ZW+y9Mg+%@Xry+jd&RTLBf(#WMG7qk+cSZz56_m}N@~hZ(3%7T2J(
z*xNPibcy>uSABg-X6?)YEpqSOmPUje^pqY4jY1g!HC8fi9lCZxlEL+lf{)OZFyS=9
z@<w&g5iNa~yCn)eU1)CKOq1wVNK^K6M&i;1?FYrR=RJtWy=;_$XKHZw{K;2l<}z#h
z!mq<DwK*H{POyULU%XX at ORgKqUal=PU`F9rK*#}&{rx(dBLMwQeVYNSFsP%&3^Iq#
zd}hj3jLpGdSCC0!w36~`C%Pb8nj1GZSOfX0Aqw*kIORSWP=wYZU)r~AiuUI?Nn7W9
zA7Z#`s%RJ>cMjW*CBwRZN?}M$BWB7bf~NE$U%TI939MIsY{N8N2zIt{h(dPc4`eq&
zm`zdn<cLf$={EBs)uo!xjZ at SURLu|BYs<DVM>g+Y(i^H`-=4(yhvXxRy&KNcjdPHF
zjpp-#XjNcSL_5^vf^lRs=UQq at A+G#x>uSl<e^1+4gMXHq)T`9Gb&7Y2tct2Sz)CXz
z<De=E=MMh`5O1Y==_Ch8c?~ln-6uGJ_vLk0MWS;&+@{l+Co+iCKlAKZzf2j!ZY at 4U
zP3-RGr8wq|b->Io>XLvoy>bHg361|p=SFD>8v1KyPv+hFb8J;OSXKXx!;@-kVNPk-
zeg?FB_}S~UJmhVpP*f!)BhscXi_L9!2 at YO%;xzZN*4U^?D}9{u2<)y15aF9jxh3>^
z)rAtyfB`7Y?!U at D5=*A3fpL+c3VsHiRMUC!U;vC)vytA)rb?B!B_4w--U`s478lL<
z`J9T4f8Ok*fqd(PQe&zafqC6Vdvb(BX5|?xU7^uYYB6X?I;`E(dX?#qbIu`Qd~s8e
zoX8~lcb%(TEnSP1jd()>VyNv^Hqx1wM64#fXEQ=cxaC_n-sO^;;Jj2<WVJ9XKe<Y4
zFg0y}uQ6C{;J2<sARBu7I5MorbW$SF9%N*{McKjBCNvdo$c*u at MnF*GMo)h)gKs`B
z{aOb5uDy2U!58R at njRca&lcjA1I=*?3ocY4nQr*GB6xVLDat4uP8U0rn4GFWlOfiJ
z!bDG`6T;gb-qrW^g!6^@bfwY}yeL43F0&50lE{ViZTSv6AYQL|5 at w5w2Eu#5+T?*B
zcx=G?r~Fpp&K#G~1|~3myGj*{mu7}*Uivm|E+l9HNm${3*G2do3>^Eh*OK#+iMP{@
z4BTW45(D!YtFG?|zGn&6pg&SGZ7J4Y4E4o_OMkX!Qp1%`=-x0kNM3vn at YB@MNk{2g
zPs~2!@qGO at dcxmqwLQjM2~d(6w|*OMz92Mn6xU?ht*ZUdFEuN-;)zsgQ~gZCU||Nr
z+x8TBd+SeP;DcCCO=F)1vbYdfY-MK#W=)%wh?ek5$Q|bI%CAmKsd<$W4F+YTG-hmT
zfoJ<P2Lx81sl&PUT%Wt^6NDZT=vQVC_&~rg8j{S|JlvRgU*+Vx?e at u=l%Qg?+}NM-
zVsj>{T$&5CoY?ud4k`WAppSwJroD#?pf0P?0`7|^dP>m}+cs4Kf@$Nl=z1f0;|W(s
z_!nwSJvf{b=g6Oyf@&^|O4u@}aJ2Z2zw-l51YtmVu6x&icMktr>2(`UJQ-<Jvkr#M
z{&u>0e?df8sD at Q`?&L?`MuZK?`9kLq-9T*yo!ua${cx-aMbMb*fpMX(3_be^4Yoq&
z5VZad2asFGkS4FvGo?0cQxrCUm&+I+-2}iTZU7AG5m%)Z*-6+V7$&kS+P3;eW3Vf1
zSm&)k#vAkgj|%5nEG*Tz$Q~Xu!!y*fJ`2gGd$y5E9thtS?(u1DuMU{IpwM#8%@cTS
z^wx82QcUpm?X==Y^MXSmf#9gPpukQqFH*s)yY$y92S{2sYYkPjINfC4ux+{<JA)<I
zPB}UYwabl?KZjIyzrF5WC;6VNzf={&)?Xmi(+jXJJBY`o%b=+!*{r_pKqG$|u9=}8
zc=RD)D2;5ouIpT)&iR2F^$<=6Y$YSepWIm_oOwu%cf4vO?h7{Ok=)sj$iAw=Uo8O#
zg}uWluuv}aJ<;_E%(I8d|9 at Bw;D49in!HQ4 at o2RQFaE@eeGSs=2RKdM^6`jzkbi^2
zSlfoSbXQtTNmd-iRB5gQ4eOoyM*PQL_B)B_I6a5TprN9>;$3y5Utf`lYWrHJ0^{SN
zLV0O?24c;&PLZX1z}t`;^*mkpVte+rN^;ZC!cvcnF=gZFZCEY~3NXgI#2=R7+>rG2
z&C=W at jZL$QDu;G at e@-WD!Y7PA<1(z<9d8Oa4AEdI$hyMb898c7sv0^E4f?o2n9}wb
z0&G+yl8wCcF=M+18A+H!UPWo_%LL<#{OJGTkh=2!TPdx7Uho1XEy;gK(PNs)IZBK0
zv6Wj-Id{#8h|s&iaE3w)lWh*2-!Sny<4*m#I96#LJa&A>e!)!KQ^|Q;dLnD#&|>lN
zUHu5kMPa&3wM+FHri|Pr^u)b*1Biey{v%H#ZhS)o`eu at N8WTuWsHU{|XTW5<HM&Nb
z$RO;*SNjZ*WJDqg!n*KghRBWlFKS at _&45vw_<r(;)Gb54b|hYxJ3H!#i!RjaG0 at c7
zHbJq}TQ3sw1a2CmB6NwEN2q+m{VYdJFa)Mu_ at vFzG%z~}^yCcjJRz(xnzP5_D>N;2
zZRiw3P^-AS3=OEdt_In3XVdnDq|LeyuCOz_=>bL#&Pvz=#A<;nnpAm}D-%|jFM5X1
zxv(5!&ZSdId&Qzi{Yjj+nogVVIvrUA*l#ZEPvImYY^S|Xk*X*_ZfxR at HS#x??U20}
zQ4w?Ix3;}shi;A^*-t!|DP416e~trDFhFfhk`u#Mm?6G~B1>(6h`#?l2BqrGVl>GT
zOvRC;%xMrxpt23rZ#p}Jl#M&QcDw{;D+&OD#5|HG>-ib<2Ao-9i0^(xnTp7JSlkFN
zdlHZ9vgd4R1f%Lj<a#|DH$nN?Bm)#Pwe%nhjuOdfljUfRtAo00E4Y#K4My$jy9&{8
zR;NjDC7CfxqU9~7i$Pm5_ at 0!B|BF~?exUFk|C2yr;zlK_44%J*FYhVSa)3Vo*OED}
z{L|{Nqec}NU|L$fWbg;;lG8r;FZP?h-0r2!^d5MF2x=oj2+sY=_T9{=b)4Fq7)e(c
z4fR^89*7<Fgmfk=fzZb)w;Ki$Qsu+WDg}grUEM(c{MW$6<4dqW27i|C(@P7zG6LDW
z3(V5~v&mOHti8=sG8P=`<|amue#cgKpzvexUmr;ne008&(5r=1*hIt2(?q{vOuO|3
z(M0`a6!tT`;&3z{L)ah2lk3ZLoiV|}_gA1 at N@GUPgMI8 at g_lRyJeW<|O~zk~3Hpbh
zMA0(Z{^cxA^|N`TjA9D)$fr>%>1zwlP$k;tfgVRb-`Otjb~@CqyU<!lQnknB&(69W
zf}ntwsx}YzH)wM&@08N*dh}m~O-=_Wbm;G~Q`9kJSiZe_n<S1SsaaDBeya4-D2JC=
z?ME{nWw{F1eNpa<2?e`*ODB#vfT~5#{6JtPL at +CPJ#hy=*uTEHzy)ygYiEmUvlHRE
zi&+Pv07E^^FAC`5RRN_Zl6S^sn3!H*sNz$7jgG}L9#J;~Y?S}3+cu_`O<R1u`%KNa
z*!WcO9SRwGTKyrdwu{zdPgjkm*p<fvj0uG2wt$-2Ta2~36DB6uLp1`1M_aQ(Z)yC@
z46Y9$L|*2tEOonTzX{^1fx#0u*0HKQPVnE58u5`t0*h`yGxx2+kzFFjI0A7}^Mf|(
z_h|ywcdBvoC%O4rvSwph8J}yQv{f^O at d;AuFcEHY7!|UzXxg0kZ;Wg~)IE?2s+>Rb
z)h}vZ7w_weP90`V^1{dQEYc~nD*2%}bnqD8Jt%F2-L%aZjYE%D1h56y5*<PPjx-mT
zW7H?7Zk=`<S*XN;+z77JJlpTRCkd@%IGE+?EVt&gBF)uuRW9UH=8kDmS>T;zgQ|mm
z^9s`dw97P7_Nt6z{lE2K at 82r}4gqmyfdlN&B2ufZpoLyMCS2k}1P#$-W3RzavU8uD
z?{V>@_b5d~t4WV!A{FKJzczHvs(U985(njIQM}2EzKHAQhkGE29tbb-onYP4()oEA
zpc67w<R_|<8wKEc-VINH;LWsU2{`@ga*NvUjKV=J-+#Sr&w4Ot0?b2`N{UW(`R7B$
z_vyKBzLIHjkKS0jGIp)vb;eD){c93~a&!nC8^%zDHgW?X2rgE at f6FP9i_9#-xOqm+
zFY&U(88zdN?==Tx>YDa06B~mI at C<sMnJqs|OO_;61QMf<t0d;lO*30TD~Cq{R*)ba
z&QGCbP++Q^ft?=p$CWUh=A2(sN2+T7*4WnyT8&K55c4~<`X^t7UTP<#_0ic9cn-a&
z2qOM=+S|bV6OB(lg9E9}2>btF;4W~>dEoV8d3q9tfamJMarD7WSyVHeO;Tll2R0jA
zM4ym8WT^RD2NbHYY%|XIF7aON1ir7psco4r at VEe=v$NUEQhU_>E6<QBcFz&->Xwpl
zOB~wsWMDR;P&68Rp6wp}A31jw`hdQsv{@!?>|J&>*dr81(^Si*jw&jshyePJse)y9
z?x%thX;Lwj;qn at 3J}exf$?0$~=T)1MI+j7OVdK*juoHJ0)J;o}7nhyB6d_y8 at WLin
zGfj?sEd2-s`%Oww14^GNdsM at b`h8u<a7sguM;=U*8Lf`$IG#MAP=NC<1{g;PC6EHO
z-Dxb?vC3+jyY{O*l#Et80IIJq7qpfGZ1O at fdv|Pccf}jLlBTht@#}JQ`Fn&T%$N9^
zR=8XA%b_rwB5!j=1xM(#Kw`on963`imWqVBRAx!rPoz4GnjC{^^Z4?o7uE+JA at 3bB
z?z-y^1){T|)x4*|#~*`$<#|uE%F(=-XZaA-ZYboO>M_9f`OY&j!SO4!-*_TnLhE$y
zvJ_4=D}JW0gK5a|yzRnfA2_6Ae8>UT8TAPQlT$rF<?Px6jJn4cGhOF7Ql$;AUxq_z
z9`24zxN0fmS<DUo26q-+{AwToEzObeDWU)m?ohJcjsr3zQd(nwkvOSSkDG)pzW}C2
z5cl1|08&oKM#OO?e`OPpxa<$t$#(I1tC{HkJl96pXksnFtU<>YN at A-$1GU9L+dZb=
zFSh?-4#Q)qEPf;62+ at mALa!{#KVVi($`tWAIzXQV1I>uQXL`MHrZ@%G6R&0!p87 at o
zHkOAPv0z)BKSVF`$St^rp!puoq-Le-5&O=Xx at 366``ztvPUDRzdz8f3_8pJwOE6Gj
zR`DJGVb_n235PesVslSVs+mL7SHypG1Q`{jeAsvHl3^@!?s&fpazn6Z5PmO>)?ZD<
zeL0T>dtvYYX<n3f(U67IbqPz49T1 at S$2e4KQA*}rK-`Iafg_QI7(q2In0!jr)Ewmh
znX#rZm#-eD3GG#ZUWQimKMNCj`>?GSTFIChpCFdssppTd-vx9KM$YR=#N)cO>A(4)
z`ih8n3U7Z)MGI51`YkBtk(IhYOlr^{>}F*(DFR6k4@}!l_hbcyrIo>0!Wh%%Lr_b{
z?s_K;<lT#gz)50#t*3bfCa9c9=>RLmKU`JM>)6S!@3IVj)y{g*2VQ56(D3^t8&|E>
z=Yu$I91lSwcg$EAP}lER!n7)^Y%(raWhIXA^qH8+R4q^VJeb)!!`E{!0^uYVGT`Ll
zi!Jx3p>xNoo%$t+v~fAQslX`%8wcV6QnQ39#cYJ<gRf%$VbY^M0+5tgDQvL5TPrq`
zv4?9d>#f^Mu;l|+N;w!*n<Y7kq+gUL8<&fIMk%Kr#=c&z`N^}-D;*TDhzZhxfYX^b
z?F5(c;pp=Q`nA_d5HW8-9KQi+C)Y|?Jj1Q!u}cB6s=*aZ1Ku|KYzk^RxyLL%1;Z=y
zM4@${`h%9 at lbIJ{4#weDkFovZ0HaosIE*{<1l<CYX6f>@uz7cuh$`}fGt0miQ?R)A
z%pDz9Q2TawRXQM~rhC$f;?xU)T>aO86^Z**)dB=sR;)?N5!yn|q#&ct9)LTOr~rv!
zAa!L<bkC|6nS at C08i0C<Amu!D%v#W7N|x!q;v?YLNf<nm4EGanmuhF3+B?rAYDuN5
zJLBFnC6Av<LnmC%)rqYI6NLA_K8AT6{T4DbHXL#<$GDb~Y<GwF)X1y<*;I_;TJTGh
zy`a_o+~IkrwNlu=Ok47QH{OkismP<p{wkHU4s?Lc_T6*W$R?vdtC`8pc(_-1L2SRC
z<<)j>pHAb&9N5^i{&{60RY*IL;Cnf#G@}6`;=<+unu_<ZmNR(yq7;h55`?kV@$iHg
zTo2(Yz7ao#YVMVs?{K&xsDtpCnASEb(>qj^Z5`5OIw}7leFv`3Wyn34WpbxIU)VTO
zv!+6ljQOv;;fcjNao3iGniQ0by~t}fa0I|?5`#iL<N)3~L?>RX8>6y^Q{Z#@7R4JW
z$xW{<c1L3>cwEHjW)27eZA+c_IS-!6XqPO#{@BkAr2o0a>fg-|rRiZ$6eot1+Wp8C
zZUivN at MOm&|Lg^=-s*CkrC7|lwOhSzlDSzEyf at nPR<q~8+$t4A#JtQEU}gn5g>fsr
z6~fNYT`E`c*5qS+zVMZklq*~jK^L^ZMxd#eBorNaeJh5Jj7FL=4v}gv9+ccwHvR_h
zBmZ&GdZTh1gYirRMhSXM-ZTzZj?F0CXflbiCeynvmJ=ydqeSCgsJ74{XyAREPo`Ev
zLVHjS)^JirqaIqLA>71puwIf}*OmKj{o6nZ;y(P;t*C(@a-C!#i*ey*YcikqD#39V
z9VNmCtp(Vwm33TY5$G0*Hw at T<$w4_^yX%+oQQbE3(ACh}Z=hJW-~wV-?;KF{o^_?{
zHA*t9Mf1v9cDszLV1sBYd>t`eVhzIS0N{-~L$zP0E?AzJa-*T-gIpgavp5SJ>Xm_o
z!RB}i0egm`c-2CoQZ9~WI?EXdo3|?0LWs)I<jY8&u{k8jh&dh|0=sE}nXbS^1ws`C
zZu=y}aN1z<7q-FE_;T`k%s!;Oyfh<M6W5<Bs-3D#4zV6bNq>ci5ZAgJk6TU|(==^Q
zM;}VdNh>X_NV_osZI;Jv5%DuWb~5p*Ov^c&kNivns#;J&aZwn5tW|PW7WH9U+hbGy
z!^`Dzl)-EfU>w4IwA<RN;_kmkmxv#Yhu<mKWmI=fB)cV~(3A$}v^#Vt#UJ_qed1zq
z*MgFQpC6~MJK??gV5XycZTZ1QZGIUyk(;%SQuM^vjQ>YCwYDaP1L=Uahsp$+oy#B_
z_0N(32oP^faCdWZf at 4-AW7-K}iU=duA0FyT2z={d|14!1jmZQml$Ar;QgOSkO)nz?
z$vG7DbGOH?!6hQf_GaCW8Zy+T_s$Dn^LbF=BS%P~fSu0{R5{3DOB~brov-6bT?EOO
zTu1}r5zOC(uuB at f!4;&FRx|*pII$w3P{qO)Az3ZtZVY5;)(mq19yl#KMobN`&z#sM
zt4QCuG><chHg3EnqTn6AkEN6aL?P~-H3je!m5{ilY2jEwo`lx6<I#jG8+(zL3M^y7
ziS#`mLPq$Jp(<4H%*m{Sax&hJqDQ^QkOb1#AOL{gTx1<<8PAq|H2x=|Ap3 at G)Nms{
z;aNd|Yj}U&50?G7`@UO~mUY0CXD&f2e!hWY(=4ZTJXC$QVk4fWvpFPr(5<;cWD6_T
zD!ZWTT$dL(?^pC<@IHl)#G#gaB0i?^3Z8FPF84RV3&K}t4!X~yw&1d<^!VXuvF0(C
zI?c``&H0ezHL%yoq5Dc3Pnjy=yxG++1?x6#Coi?rI<Fyw(c10J83nuztDc2!0=GrJ
z^9RH>>*h)3xhj+aI93l15_{EK-8T at QGd<ewL%SvI_}jUIp2l(Y9fkAJCfK$*(F9-}
z(@e(}jvQixc0iN=L6=u+sN>{SJ{#hEUM_td^dW|#$0;X8MKB~PkzC3i(q?_RSq4_E
z)?qh>k)y|V>Nz8_B_pfjDWaC{E>lN(D at h`gJ}}C~ClE26PXzn7&cKjWW|28FPF8-j
zxOp0v?kE-gB0tVt!}rV_IbIM>r)VG81oW@;m`guY0DFttV)_h5cCac^&Lzn0Z>0p+
zSo+kHoHD1qBIl{+9gjv&=s*&4{2*m6nQ=?l{zMD4=esaS0o8<c%NIS(&^E5 at _E7Ow
z+;VJM_lzbd!osld{H}h$098Rgoc7bk^kqeKAW`eZXkt at 05enEr5p}Jn^}_qGFhxfG
zppi7<{a-#CsV3+w_yQh_C;O!0-%q_A&{1DeA1vRf&xjG`C7OBN at cGw?+oZ}?`o<&h
z)($G*0&j&Z8O(7V$8va*RApfBBK$;yKw at k!*54j4YRX{}co@*^CW&}^xKH`{0<wY%
znxeHD`;XhUco8?_jC%4K?CF2O_F2Yyt%~Ok0D7S1HErX-v9&lW0^`k at M>!f*!k$_J
ze$biw%{;jod)?|`ZZfE4s;hIcoFfudAGD(ep$ncV3F6$>T|fa(Ph;y2+t{5OALwt9
zHwE3C2246tIWvvQD~r{GjU{sr9g;PO*Qcz&@Nevv;2mq!pzJL;lLC*%Tkyq15NQL&
zwn5$Z3<L2Vea|-E%RCcX9ga0^MglW*t_DCIq3&KI<g{BMh8;7C!x-`x*Yv_vlw3b3
zdgT1od($7WH795cCvw>8MaM%w%P- at f&owqi-UA<YD`GnhXXN9<+^sJ(jEZNIE<qH@
ztST9{eUQzM>^<gk612!yQ4#NSbrPz_CfMaM#U|Y`VKe_{gPkh`gCYqvSai-82apq6
zym83JL=^gs!wA;w?Fou9Op!?^5G8w6kcZ=;$la`sJ$fcOsf`VA21RqGJCSGSr0?86
zN#b342v-~~8eNt^xmic%tFjXONbedsz^ztWKO-I)(h)Ay5b)-sK!rl%YLm<&7XS9E
zq5hlKq%3UoKZ$mZ+?c!X6#{jc-J|F(psxU`*i8H(KX_2s0i5u=>)saVXJqH7y<ISk
z-z_ifW~MFtj}-+uRHqo2GgVyA$jvjD<x$<J=1l5mhj0n_epRVqqwLL&#alLBSVU7}
zacI!d3Mw{%KU~hvYB6{}5Afx2yFu?)%qZ7oJM`%6Ri=dc+Rr0gI&P^+X`~k>^V)KY
zQ_?yw;Dg3<ttLAP7J#z at kbt{FnnIQgh)K>sa!^`xIac2`JXw*rGNKmx=*c2vUZjml
zp5`w4JUf>zXAVHoPuc->L8)(zi}NIm2%>3dX_ggT*LSt-8 at jfscgqYo(Ob7!p2rxO
zE(+n9neIE*3DBn!Q|!>tBvO|+VYS!)+Lmz-+|=ly at rI<qx-y3k^Se=@4Ri=k#Bm+}
zt)Vms$$Cv6T<{qugv+|0!&eGIO#bmm5WRE1&Z59d{)#T;0N0b;xO;rH;P3$)q|2o@
zO5Nys-y^cv!A8FZ5j1KKQ<=C+R?;Y<g=^2!m;64Hk=e_lBu^=EZ{A+UMbSQ#Vl#hc
zl1F`V-Zk#TASn0(cKTW{B+>#?r$94Y+$Fx+j#5R`+J~h*GDm<T=9MbTvOC5)8=WSC
z_i0UeV>xx+zxE%9asednOH&GQ4|7d)%cP-VmxHwXxPs{N_B_LyO-J4YUPC>mK?WNx
zG)%kPKAq$!wn$C_Dg9oVOUHX~1uvV_o1u5%@D0?Y-Yj9$)P}7o-UwG^Zu1wzkZ*n^
z#5h=_4W2+dQFw8RYWQe|tCD#d+WCN=CH2_mlSCLiunLF>S?x9`sMH>PrAZMg$m1+o
zO at Mc2nBXj2SlL=zSgX+u9iPQyKg~rvI;J^Ku|8`g!al>($a-lGVIYlB$5Hy%3npR0
z-?Ns>y;<|sPyKP~*Y7?57#mhUTDH$w;S`2KKc)H5q(WY!K<rB#T>-Gw`=um_cMgN<
zmW-!U)HtflnHKNOkM9bpA!vRq)NZgAD86WT4t!5<%S%f}@|811bD at G&!LZqTehl&!
z!=*R#{#*7*VlD5t>0QcmlF6)C?wNVbrdZ4weRvY!VFanwwp%mEx1AjHv&PuOY<+v#
zfKTPQSb^u8flosKDK*}U+SXLvg6^-bIP1O5IS|Z!_3%20`d0o;Kc(eIliw4Mu$Q^Z
z4k6^RWHlBp+GF40t2k{<3gfwjPnC6 at 7jVPb8sx@R;Zb+X5k@)9EOS-Az0a`bqkyLx
z6+vu%AA2g2xD{av+Z?LS!)m}pY=>@KSg$T`xdz<af|Zrx9Y~EFfdUdw-tG@?3rLc4
zjt*I%xC3z8QX4_YBS;Dc$NqS>{mkx=&K*!In*hj8Fls;~CH}*EIiv|X%h1PT*7Wtz
z3>=f)YYm5)`P*^D)??0cA?thpJo3A9$cbn&>#KeSn5()h3YRDeespE_qX~OO%<*65
z&WZ0_>bn0u^<VM-S<ZTcf&9<%Eu_H9MyhX<XBOJi(l`BH4My6%5dX6Wy9Lc}uPF94
zS<O9j_|!%#=_u~m?~cwDQ%fYw^pzTz(<~H$L}UuxHbeJC4)fW+STpi6$wKkn2QAZ;
z>o}|a`>}w1vxT^k9wmjOXk)Su at SRcGBfbR0l@VQ+04ch<{P!$C9y5F)uSC3-${Tt%
zM5{+RYND;$^TjA at F#UxX(+-tBP;EHL4?g))Mw4(p>a$Jg4~h>?g?-5a?o8gdjqbTc
zE=shfljFjD)j9#AE?>rq@|M#2%^U*}Jf>(~#Bx}(2&t#nJnGeVKd_*t9ep`}H*NaK
z7M*b+d4e35Z$VYS$kCxn(;@!bjfDyo<6y$^lIAN>VHY*(_*=&&IA_2Pocga|6<Kj&
z)H&l9suo*lu)HZ!v9(OJP(^~J#DVuV(6bypJyX=o2|Z_*<bV9`IF-1*HLDdF^fNLJ
z><iqFw~SQE)>6$yl|q}*Ue#hv{N08DOgXxdj}Si<U0kYTm<77WMOlk{6|R>IMWJuD
zrDU#d#~#RL&Tcn$C8SZq|CWxoB<Z($YpP4w1+<hFwZ}i{Kl(E$c at T0y2TZBIXlwVq
zAOf)r={(wR?+<ve)kh7EXT+Cyg61-&tWz=};G~)kB$k&`1d4Rqja2L_i-9sSayf)C
zD7f>Q7F>LdcZ-4VF~o0NB$RkX?Et>Jfk5L8!QTApFWoej`wmY6j+hB%w=fPvhq)O}
z&aE}Ue?GfyLcvPgfsfF*z$aAlLEz5hSfscIihU**T-GW(zyisH;bSjq6%Z6bfMcSZ
z)ju}OA?uPO<GM_cS|uuBW^>l`p_Pyrpi|wt(l;$=GJVA8xA84?ju2w^mYQ(&)<Rgh
z*RUUwv#k?A#xRn9hqex?unwW}cm+dA5|#_)Xa-CQTrTB<NUeD+)k~xu^$U~!M>8Lo
zz6K13nX#9`)%Qg}<k&Jn<k0*SB}R!Gg5IePf*;D18td(zIr-T95SFtNpN8<qH3S at 0
zCF`*~*CNOajzOlP-2Y=gz$Tx;D0`&zv%UFlYU=;3YcG~}B-)}uAu0avsEnm6->3kk
z>6EzYEPQ0%eDut)&AjcB!Vq!d9H8uzj=&)^$vX>XV)wQ5=bZPz>Qy_^Un at B!`bx5s
zv;oh(me&Kd5U2V4&f!h+^$%2di|(kIL$Agql*8kX7CI-J{CC&4%J!r&CJR*YsDnsi
zC=(4~?hL`{^qZor&}MXauJnQnD&jp}N>zGu0JD<PTWDc%1I3f7p)Wf9x at W1~Qq#_A
z-oLLjrW<PCBN==2?FtV@>uIoxg<~+r=$^XC&k6H6ve(0kKE-_K*sHmnDNR3S?>ekJ
z?vrA)z+st}v__-5M8JIZMrnTvsRi4SfLH!*L4SCslz~28{MoA-`YsPBl{XpqwSRvk
zlNRymC>R~p7b<N%>s5CTOp}U2!FQil6QT}IW?_qFCDSD|#n9jEe?gy5)oJmJig?o-
zdD>!9ZQ2iJ{5ZB8vE9Y01-%t_#Xdw1a=e`6c62;BOZ1&M6YU1tg{7*z*+046bp<KP
zyf}nz0|`&y>F4TrznOx9-ArGcQlQn1g)wQbRKd+bv*eE{A+XCX+SgjfPp%XbsM@~h
zK4Bq#+$ziFaw4_Aw+SEo{v0s*;EUkjyY2Oh*;LaMP+P8SysZ5uUdegf9K@;YCqD0`
zNB|8+CVe0$&t62)E&t;Y5RnkKxRhuKTT?{d8 at Hc&kgFu>TRZF3)7YncT2 at J!9;;u}
zsCn;*GkvAt<UDl;O4q|STC6T#d8Dg;AJ>fsno<z6)9{6?MG=Fo<3umK;M2p8FJGW(
zs3_hyDNG8El&E55(tdUBWEX7xb*o03NrbRwskXB#KHmHYnY5V-tkxgaT?b`K79V5|
z_s-iKzbL>8Dt+pP<~5LuaB)(};&U|$rC at KXSY#zmHUQF9*UO`3Z}0104LAJ?%W1|`
z5Sf at A_{SoXf*HK&uh_Lo911Ap&e~76vi%d~uyxN8?;S=cVW at yE<X!nMvK^E(;L?M7
z8C>@+1atl7(pl9~Nz$rRggC9dJF&F>Ftf6C!jf|VJBt4Dty$5r*mY*!a<zDO3vax}
z1*>CpmZ!zbl(hjfUm6O(1liTj?scUAGfd55<g`ULDFRy(THjZv<Mk at 1RgG$nWKUc9
z4S*FwEQ1fl^~SKx?N61zbU8}{gp63rXm6OZeQIU$@`9sfB+=bEYH{9xQ<Z;X$z%~O
z6Z19y6d{;?lzlwiL3q?g$<of|j6cPW-6fu+#Od?<-Vw>G>?EB1449L2TqoWiq6&sg
zbDQ4?SZY?pyX{2F-4R{?7V2C9fc7zlvtR#w!47z-u=1ys#;<&LtEVqQQ+S^_D+Q^-
zTFA{4J(i?&AiK+bmqGvO&`ta`FH-J4Dz1QE=ItCqHD#(WO)ahjDoA9H at 73vmS#g)O
z3RDvXNh}chS<^9nce at BZ0_`4f>`M8gn5iR2W~;H84|=NoYZCJe`?-#vD3YwEnWBUN
z&4&G`C-XgDhGOUkr`CIJ<R0F$Rk7>HX3knld|D;KL_uR*0g#l_FCApv$afTC27TY#
zv{oWK_^lq!`xG-9lH_|)3d0AL3!Lm>jhp~K{(P(|*LNTsfy0}lY~FZbCD#O^NE1a2
z;*k7I8Oc9pi1A7w_560hD*~Y>u&Gh?*CiQF4VtOfmX;Z;Nz$CnV)RWOf7{`D7?9CO
z&1f=s#f#S)|3dnEv}~g=j#q=w{P$anbNptN+gzOgqhqy%@+R<|-=sQA at PemQw|X^N
zV-M_i9XYaMQ~^=vohkfxC!Nm~BmP>H=R`uMy0D-z9*on9R!FQ3mMn5sJUf5Z_svgj
zP=zz>WApNAic87NAlr}PPfl&=wxJ~krVC5>P2|9uf<zQcMa&AJrPN9@&TqzXv}!u4
zF9(-CxFT1Vd6e$rBR6nA5iJ?CA+{S2{fi?s!k;0qoje&1KYZPma|8HH*|dT<A8Gxi
zGb{>&EBtEe9+&7ts!gS;U+q$kgsn-Ga!{&q|E9UrMJ{{{MCsP;n>r<i7L(9>nUVP}
z&m8e)|HBT1N*hqo$+33ODd92FHPr3YKO;!cCg3;8$_tk}Soa9IFoV+BqjQfIcQm>o
zX^8_Ize}GQ1hUcVlw|AYroc5&<oY*<_NS=Br*#RVmj3}b=0H^LA1O&_V{}N?+3e3<
zjwf;*H?b*X?Uk*yQ>FEYc+0@)WO)`?=8T|&=dElF5cetf;K~T+<U?sFZn0StpA*F)
zCPrANzf)e0NO4<|a*mXM3?ILd+k{opnDnLjJ6t1q6cGQWO;KEn=z1W<+9;}zlK6J(
zlxAlr3Ca!jLn?0iEy^aPR$hE9E&S>XJdh0xI6hENx%K^b!X+U)q6OZ&Z2OHEYm|NA
zI_<4G%v-Tvdr&T0|H=N<vCC?f1Eka**HbUws@$gImfK8!4#t3A0H&Z7r9$$7>y4XL
zX~Y)7)%MeAzYzG*jz3jaU at AY2nyBiKU#J%@o*!agEe%Z}i&johJM&Elvf`OtNkY|{
zVX2TR$JvfM9aXjA7PJm2jq;UMEr|ohFr9w6o`L7BA|-eJC>QxHAO#ZuGnvY*;aKqe
z>-YL7mXZq#Nsc^zo)cm3-;j~`e79!=?CGbG;zlI2mX)r+NDVy>-;uXL0G+Z_CWF_>
za~r-~iirN|UFdqqBa&R}C at O)Q7NhybCK`JU)RJei?Q&%wMgYxyw;Zr}&vggEh>fn8
zmo}BegCnTbyJ?DQT7b at HsOUs7%ZLXnB*>(Fj(wgkUlUu2Jjv at TkPk1n`XL&Whoi6H
zWs&3pYM1w)m3K7+bA7XP$6CJTZ%0VAaEDC+bM^4dDz;e0|MC8WKYJI0u9cV<2q<(|
zrQ<hAh`t*mLDCC+uP3u?G~ruumV`i|y{<clJ+%(2CoIjbQ|u=T#GbTx#-irMkUH(9
z?=~7f;SNw|dYJ}_Xe6t`ah7l3^ftEsRL}o$YUWE4N;`$nY3fMVjU|;UkIALIAyUdN
z<dOidOhC%yxBxyt!M`(Pfq8GyXs(BAx|jov71t(8T?|HqAkT|DGP>U%0=64=Dwnf@
zi(LNMxk9XqM>bF=zm4dvcTyEco>W=opDrEV$M|X2D+%(=5-h*Q2`*wXL`qgWhp=nn
z23dZgs>n`WX<gxdhRbRrGx#H6l~%m0ED0pkY#=pHUu}F2gM9UN)49E8Aixy_q|Ne_
zYmf84Dsd3Tjnj&c*$;<o6N^}*Q-YEQm$PL|wRZJ+y~6%wRa_KbYeR?t6Wf)fa&!G1
z&}7%0ru*7XRN3O-)F;I$X|h07_k|g at TNLzM!VOCqAC3Cla^}RYN#MAOp76F^S_e<P
zu~k30vEV|F0f&@8=k$3NfaS4-&raX}mT$Ee at XA*2N$7m)oh*r;aP6YA=cAszUdUW(
zd&j)&Q5+mP5KzwS|2kb8M=2o<z?!N_iG%hINhP52wNLr_#$&6s5m4x0)B~yYIPd%d
zg$)`zF^Wz5;FPQyU4MQf+Kao0BIg0Z<9Jkm_QM*Dwn#<Wmti!4I?>%;YLZ9$hqz*_
z>qwhM|MVawS%11=0XlBrL2lse*>#c9^uK;jNc)bY-&^6Z>adegu>m}%3_Ykwwp-CU
z<08QyIY5z-(x*;q8(H9vW1hFxz;f!i8tz<{ffqFr!CH6?2$191mPgSDyul{wjybX2
zG1hwLqNCovq%k*-jhc7YD=2v9mMhahDTL5iP+xt!AgwMCw`EwQUW2XOSG=c1M7&TX
z&c9U;n=ybJ*lJ<26ugO=lLH*Wz!^BBAOkuo<2~SByN7y+ at Sc1QYx_5C)O0#>b(wL*
zdLN9TyJ>%i?P~G0=rN at -(x6fxb(41-LXztV8)DM(XRFsaszci=p#b#lKfaAL1~Na*
z&o#u{RRXM1SF6B(;{9k^tvwWF1eHpe)h)8wDY^ez-F_6f*kiOEN9+4U?50a at EH$_f
z!<<*`5r++K3L)bE)!pm~lP77C<ZU&4tKG6$UPtOH0`&Uo%v}*IZ7QAxO`Wt_lD9S#
zD8lhd459{4!}VW7BxhXZn<ool3TfJ)2sdI&rou-^RcZ{QxvWS|K46cy);p6baE`A(
ze{&JTBX-cAt6??k*9-8G;F`I=(|o2YQxER&=F?!7DkggE&=Z4FjP{f~dWEq}@}v-8
zrJ_$2C_SIt(%W2Zr(ttD;ponlw0<JY=#t+!#Xb2zDR_Hg+EP*f#TFP3+;yg8;)LO?
zf=pt>zX~9AOa5iD#=OjFE>Y08owm%7M6Yk;0&|_4)!Li+GyTe$bOGt_7i$8-J~($t
zAg8XWj9-w~sNnU#3x@!a6z8hXpGYp?bC(zzf4nQ9B`zraKX~r$iB`Kd(j$ZvtOl`d
zys<JEQFIpkQ!6WKL8l(){u|^246xVuYk^=LrE0P+n+Rh)n!%Tdn=7lNJkv0*fNqX^
z$lifZ8|wl})JnH;QO+GxvAAsVK>&I?ZREDhbiFBly*vLqQ^vEZFTgKTlJ9q<<tjfJ
z^^&kpzvuffb><@vKvTaP)h06ONjenRMGyw`)EjK{sTLVNH9jEMw5wM-m*qs5CM=C{
zwXIGU4_Kj-T`14I5e29tn-39Y!G~L at kMJqOSnd`B at iDG#{O`crXY|#pWfEUR1h)F)
za+IX4C~ko!+(;<IRda>@V!)_DrSvhc<^-v#q`4LVT<5gP0AS)lI_1+t%f at hV7@=<4
z-fZZDJJ2^|cuo*Z4?|c5DymhMb?W`)RlY_+8T5wV2B!yf0WlKiP1S=5c~-boAJf7#
zcLP!Ho&z0(t74ixQNKP_>IvEN#`UI%j6UeR^>j7 at iL^Uw8+4rD_;G+MdDUT~^OAxY
zcUYW<Z}+)vPr$eIH!7r;`fP1eo*V$@cdsePzIi at Z#@|g&>QqLZI&0lAy^RQBcs?hm
z5u2s)B`nEi-K)`-?$fTbvI?p73+L52 at S)IG4-^q%3|U{()r|7#KJ4_JLtczG`jQ2Z
zXhhyMhd1k}?PYR{bv|B3UiKPVNv!1$)=MsMG`ZzSXoOJ{Fm=+rr6le-#t{vP&9B;<
zU3H-1Co?PgX)<!<7gzSG^Op at Kw=6V?##olW#JE48KN)%c at 3#nn;-E$=th^6^S}JlA
zCq~t_UdP^)*^Nv#BiIo{jvRf#uP2+2El=}cd<_=DYg=rQV9NYx4Rn8STQ_*@Vi$4X
zW9MoB3P{o9UbB&E-R;K|?cTf$ksmeu5cbt<k(Hi30XB(!AaCc at F2`@07G&>AE2~Z!
zZ-JD-Q9z4YXH~=z1}cl{Nt}rs)y#>aR+58xk%K<UiA=1Ntn{?QINcgZN)&xA9`RmO
zMjxyHvFhkAA=am7#w9FnK_a7)F0pyu(i9&kvp2%kDVjO*E(Vk6eI${@N$+;7r*mHd
z_d{u}U2MU(k$m8|mA?Ly`TwbnOTCBC>B0Ck^hncliSS|4ZQ51SWhzoo4ydoxc?NIv
zksy|Y7;v;+zy&Lv;yog3hL8fOXc02t7#-koV|a&1eA<7=M*lz?pv)n&;iWxP<d&!K
ztvut8Qq3$;@N4ZQP*`Fy(*xBK#NDNAL??SxV1tm`;>D7!18P$*7J7{G7iSrc(0mi1
z0b%G*^}LS0%+?!rT@#$X=#=%JMBf>jxeZ&eH=raX^D#!tBQKS0RBPb-CO*6=GApYC
z9)Wl;TC3-}NrJUgkJmG~t_j_Snw+TtHgdzJ*dEkU<(ejJSCSr*5pl9xrb>tR0f3ZJ
zJv9Z5D2DJ7hCy~-<4)TIY7DA7rU8$j=j2N0^N9*Adr&JIv*0J at Zp5Lokah0{f3*;w
zTD(H~{b}J37d3}`8hhTT&+@%9UfsdqeWKgS*RXL2s*`a@>`e<(x(vl~E9(%~Xn{;5
z?8Bg_j{lz6=h=V*q*<PWNDZ^&%PRVYVC at t!5Yq(|)AUt#74?dX=~GWNsB1+BP@|JW
z at flwg{lG*>iWc);M&aezDKHTxp#ZDe-k}PY+4*5=yUfSaPv+7TL4SDdHD&J1NO7Ky
zgWC`Z{Xw=k_12M&tU=%;>0VK~U{aKTTuI`a-k08CKHmu+J(P%2QJ{z at 2Bgg(l#d(B
zqi!bRFvuoEgyw+;j7>ig2zGj*FMc at Y&H~}(e;bvG2Mq=+0DuW8<4$R~>w*3u(hIVd
z1UMCx5(ZA0c=9Vo0PO-p@!852fwxq0vdqD7^*qXFZ%2gFKjrVCxnL~dfht`|a61Zd
zXwR>u*DQyQhWMHU3i5QvaB`--ge(fmV>S;JkC^9}z2`2g-kx4DZfDS^HZ+UVp at doR
z|3)|57x9PAha=Iva$#iX?hXVfMWTvBAM1;dNbe}nx%2M(=YxP<p>!nj!OxVZ&D!Hc
zmI%hO{%B)>m=s>8!ksuQ1|9Oj$3RFz-Q?Kv2TVBPZ{O6WGd`aE9$AC3STG;cErZ)K
z5&2PaTvIM%4%K-cRoN+0F at vWW#x6R<paM(QZ<%J_UKL^asEkxLpfLNg2q+_Mhuu$s
z5<nQvYfG<;Bqezd9Np at K3$&E)tgypALA~_N<6bbtAy58QYV0~B`tJ^wsX9O(s8V^6
zUkHk9tu8SPae+A)#HG&T8m5d5of1SaibpV3q9<Ym);xB;wW<6mY1JJSgRn!dtl{M9
z_=7A#^V$5w3i*A!D<R2kR((G^I- at N4hK}UCvC0NLSYZFiqHd2s?3v&s`(m%$AH5+-
zGS{6L`S}e010OwZ=f_<7i#)spm)rx at Tt}q-n)+u>CLFNo*$UbFF~sA2Q46UJH6nY9
zkh1IEMoYSj7N?wuhfm8lNzEw~VXuFUQ}b&52%iVyv5M-}^C29r?=RJo(!!@y$J?;i
zwN-Q at 1<y`tPw2dDr#StPMJ?97;(l!pBta;@p+qK&H*l_?<-rZ>{<2NOskRI8P at fua
z at C_;A>$1epN&Z{tFf<lzmb*n5BP;x_S&bYlbQy5B(pk^QOk_xGG;OiH^EeneqadEA
zan+c9^guw16doA~)u<5A#;V6Gi34wz4aCK&c)_4cSj`A~RCAj$S|@UK!KONn8`-0n
z8M&u_XD*sZ at GG)eCkksq6ayMaFhq=jQcE?KWFLlV43}&k501OeR9l%JWE4ti1;jlT
z^sqQQs>I)h-<CDx<k0E>^=AU9^vE9<RtZkzPyquf?}75e4N><$lWU$&8=m)Mydejj
z*)T?T>Np at p8Bbo@7t!BmYoA-tw9Mre*nExfr`2c~&uxu9xd>j?vqllN&qxEDZy at 9P
z9*r=JAvsy{rJ0GQ7@=(G`ig=d)-Mhm4|%NX9U(KRDbC8i)c0>vf~Hn>g?8lwpG6n{
zi3 at Jl&bFsn0At}i5Z+kL&0p)m1?D2^2Ocl^UP at sYM|;@_o`FN-*wkr2$|%Az$MsxF
zHQe?Bz=Ss!(!Uw#X{ku;*PUR841Osp8X;-1&66VL>%pDzjAlCbm&*8;e*1qKWZjso
z0 at ZHXbAT-0DBPWMan+ojhu~tB0jpT|E at vCtp)~b~TE#y=Hi3j0uyr9MJDx5j#z)FB
zGqkK?XJz)tMsX)yj{`jCW%*_U(K}liu<NgDdtJh&SdZFHc4G@~v^Yw2IFF-CoO|rG
zEjqdAzJZaPypqphQDc&k*-0=8x9hs(gJ_36PHV=;MgNegM{!QfEIsMGG5Hc1u7FN9
zT^i^7fa73=-qDzBtZNiOg!u}b#2nh0W(L%Tk at QQU_KP&+q>z7u50e**ozqh=Vqkg$
z_qa~G`BtO{Yd?}yv-?%{ntr!d+D2Y3X61&34~j``n2+C1SyDHfU?33V4$av_nQU8v
zOvb({8jOo3<qIeEver`qUmt#Dg^ON$aGuKQ&F4g07pdVvfQ&1L49t0D=QJO%7kl8}
zLVuX<O(?ePKtV-_L$9{=kqyW84RepaO+srs2ok1ULmuw>+J-!P27~NtcuV|<>~*~R
zl$RLAo|-QwPCd2QZDhLSQXI&Dml4v1$R?p^UbFn+oikXaz30wwT=oS4PbN>QGHCrC
z3*WO<YxoWrS^6IT7xpuaRusyLlv(ix<_5d|<l#OvwY at K|XdzPIJ1g5nE1e!sWY7q;
z3T52Zm4aDINMhwNqT=vS5<)o-guPIDkw6KA$<*UCxO`cDzbEUi+%pBEELR9c**OZI
z_kb$nmhc>3v(VpuiZNTzgKcca{F^gF@(7nVU{-K-C<w&YNlq)&z0%=hTGIpupn~fw
z<I0I~byR<x-T3vJ{l8(;#Cxsiuu`9sIAnZ`w76xy#@PRw;NL8aG?KL*(V+iKNwrbm
zw?X#a{h8*;<Rg`t1X-CDLv|b<s4!IJwr$yj-v`;o>Opl6*B75eIp;ab$DYsI2TNka
z2}H*XujC~w{U&2xZ<b&;s7a%E5N;3B*C{8wv+%Oy?wNwOU_ZqtUfdm6_ at BWDYJ);D
zOB$ssih+9ypOYo^+NK$ao(Z?&N+^KMsI`WrjJ2T05u;=Uay0JB;?7}p+0wvp7eCei
zSkCgtuOKjOY77Zy|6(MyI+B>U*F&EpL_~T3jF#cX0t=$!{2ETb#Ari(0joz{@){Tz
z!c=Q#&;AD#Kvi0C at RahBanAm~=}^{+P)fj8JS|~i3G<xT+0fSc{Is-n<6Pp?<_oG{
z3iAxAPe4wF!pD(0$dQx#ZVW at I1<J;th-+8Z-sp- at _c>QCPu?<1l{^pLn|}c-R*+LE
znjJokkxlgWFnv<5b)Q*1;w;5HN5_hu1NO>r3^rjRc577b!8@{p;Ry3<#8c>))JQTb
zIXU_IC8*Rn&Wk8TX(SLJf%Z%BeY#gso{msk#@flq at SLyV2^g^bASuJnv*Yi!@X6fJ
zURi&xZuE|^LtZY3*VoKg#6*amh- at FOYXL2haKQ~&nai)QdJI>8Go)Ihw%?-MKUC^*
z$_qxT5;%;mI8QgI2xG4lla^hgeW$L(NA|P&_(O!o;>W5kJ>3{Ju~!S}z#{o#-Jsb0
z(KRpMtUc&0g>N78p9ZPq<LVXKl<<5dX4iDdjqo-G;)kny+Kq+SU6|7V(=-o)9F^~X
z?Ac<IYS;ICe<Ff`$I$fmPLQ;VeRnYBO$aVu6%NK=I}WJ at 6N>uS|Ac-_?_51$&S<Mn
zr64UAqbte2Ey)6*1FfS;Tw^9wb98(X1)+&VhCap(Q}eXF*zr=8(AnyxtIyK-x-?`|
zC=zb8N`n=oAdK_Z;K7Nyh^yt2Qxt*~s%V4e8Qy&}kV42T<y1zfXkJoMPm?{h#9g0;
zTm#c{7oXyFte5pTj+dSV{l%(;OlluzUL^U=SQJPGWZHrfffOd922<h-j_DoFdGa+j
zv8ON&2UBlsgyVxuq`5xZi}g`=qMZ-wq2zuZE|882RkLQO-r;n_U^8-2Fukra%$G1A
z>HFns1{(|*0nR!nPP>i;`)MUWzXw-cgvfH=TT<IKyuE#0&pij}twxy;w?~1wE_V(u
zvQjERS+H)^$(5xPI$4zf;h;%AhznJkOvw!7U%cWGQfhQEDOFXeHz`mRMziAtH_DP1
z&{Hi}ZobrH6;c0Fq8w&c(a|K-S8ina(o5#;dl3hBrH at WyPNJNuK(C_>Jx-nze7)F?
znwQKsT;f3FjG@(Z?<|xU(OF&(=|~U{qZ;P`@c-{wGdFUjNF2pcP<wYw?)L5ow+;rA
zGdBs|6+hCC*)9c7wf5ajR`XwuX4pI|;+A1jW$-<fK)tWo((XkaxjhScr%8JcOk(YB
z#0$<4{;xFy;<on>VIuvD$1bhs{?aJ!c<_B7{@h89l04~o5Y_m*gJ`)Z9YZbO$pL%$
zUXRR4o<!O2;6t#!6)Vt6)w`gNr3C;lpO2-<x<SmAXv@)GW5P6ipj6IVrApIr4 at +My
z3H!JId9c4{=S<=g37bJfKvDk`X%EER?<c1|L+*RHrr at w%oC782vZpTo%4x0P=&jT5
z#~bfz$`Zbb$L9H-69IBs7R%X&_|B1zA2Zh=(#!yKOv at wb84I?MX`6tuARl2;0_JtR
z8Nh}p)&esbLx*u{j4oTnde!j6ZV<-eWo&O$-PH=i+IV1$CRE1~Fs at 59I}*3^j at 41E
z;p<N)m0;}w8r=1IBj~NYz=#G*SwGIkki$09^w)<4Q%0dJ{SL_aO>Bx45Ifa#;5xku
zi>0Rl-K*7Juz9=)glB_uvKI}99|gS>5=;euF$EEP{N0wN$a3Bc=P>)!_*S~?S=_#Z
z39)zX)X&4cz|Xjaj7vmn7y*njQ^L|xSDt;Ti#q(}xE0B}b4FQSn<0IPoC;+_S=C?P
zy?f!;cyI-^j&=4AemY#AzZWC;vy>K_iWym1E>@EI`~2nr&N8V+Z-sl?ls+2X at iu4x
zc2iJAJ`#3ds~8`aK?6R^xxW2mT->9NW9{+?9<?iL-l_J6Z&fD`Sk7|4aEag(arJgm
z2Y{5d4TsFrgzI|pVz?RRz=_a`L6E8!e|hB085a~-2E}g+mung0z{*sg>y}r6LiF*4
za at U`QkCSg2=%*VO@!7=AokZP9uDQ;z)aNc~tb-xqjq`vXi at KdE)OL35fjGbYK3F}C
z6#)?{3mTbDi6Sh38NL7+YWp|FeeuWX3p+UzdjDw<*qY4;0{!Q2FKVkh>o>h%+l4mJ
z*pU!-S`wYljs?`8(H_vHaQi?8z`$kb$re~B_{pfgpwK-%WMHh}cDbcY5a1(Dm|UA1
zxw(zp?<?_H$*z(M`h^|gEn-8>$JL?M0coePq84!*m_2iz`ha=*V18+!oybs3*#t;r
z46T1_jK+7zJT at xE^$KJ;y^2%3jJM7Q{l+7{-B1apUJ`QfwyFPG85qYNBonO8$G(7Y
zD{+Mt3Q)-eN<Xrzp=yQRx45v=?6M?JZh=2IwIY7T^FQWAE%gZ448c+3R>Vf;3))9W
zvo)71`#TBN0uZU^{*T3-#qhb}xYzWh2~y2!JC}pIU7+1_;8ose41XUe_%VqL#r&Mb
zk_?~^C0Zr(%^Lgz6q|KKy)vKzfjE2b0oB(AEy10MD{V2!(kaJf#O4nK-Tgy5zxDeg
z%;vi`?fFJC=hKBxpfIN86Q2vlRlcO}QqiYr1ibmJ|Cx$xR<~)0i+bBnxZ17+yjgt>
z&Hsht<E&m-kwIES+P|Y^#NFWN6RT8&cfHH`X6g-5XJT-4CPS&kT1|Jma)3|So6<?{
zFqM3>a~0ypVgZ^oG=ssYrf2POsT?v$79<<}<i~jz8**c1(CsrM!?mCXsSRc-h4n{$
z0DjT=z<@b+S@&$5Z(DK^%DmUh=`E?JY2i2jx_hht|NHW?K~xNuZA~jE%Y>J+E2LG&
zW1BDfFZX6DXV}<+R)y#a9B>T9#68vO;~NunWHy0EsL33Dv0pMU;Nx;I)WhX$*B5HX
zqx2V^SMKBR3lBUC2$;C~F0q%ksFk2{_t%;i=>~QwRDoX2MPE>ou(%<)Qw10wQCw4W
zOWac&;%-d&fks(C8<bY1;Dx3KreI0<g!6&9&oK~XfFdSvmlBq0F!~%SBqj|-|D-EK
z(wX<&yVkfdIOR8HZ!z~<h?u*0)GFKa=1?8cULwW6WHY^bt#rWH^j^7#=%U4r2C}0Y
z^twoh4;#2~gVO!Gs(RH9?R at 7R=>?CdAE0oacOYPI4*Z>8`&)!xSc#sRL&Vw<^NsQy
z%E9>8zP~Z+21*K?6?N2Ix=WQd-2q(pjP0FziixS=#KcxIekXt<Gy*<<CRuOk8ph+k
z^k{8)!b<|>7K`Awvao&|JvYeM*nOR#oSnFqH5XtgKi7i<{cWflkYU!iV73iewL8^l
zhxO6(KGjEl(8E&O9*2m^rlGZDcV}b${=ovI7TbTZ_9=GsIdy1_Ss4pzoHm at mO5LhK
z52(^4G5Z7H=l7=crO8;$^93#sOAAHH{MHsI&0ablEM=ySZO*wkUS-|xPX$5bC5a-y
zrsVh3Q`WXSs5$7&sdQJNziB^-Okcu$Frg=BA8F+R3#zIge+n0*O}K^PF#8T#ZitAU
zDU0U^N~O_DsD=}Gj at +UfE&r#f>NWTJe5V-Vym_iUNu;Tf1Ze6bub=x`^Z7G at BAnD5
zV-5FBPqc1^&5ya)m8M=Oqmx48H2w<fUV+l3YJ4E{$1#G0_VBeKQLML3N)nKEnDPnt
zQ;~cQ8#>Tp$@Bj&n&6$~VeLT87#z%7h*{OzahZHF&R=^dt;MEWrJ^G3hS#VqT6Vv&
zaBW%6nW5-lKqA;EQWsDyx-b>w5_Ui95J~#hcF?Dp{MZ9Z4xU41G`q+Nx|h>>hP956
zc)%53D477B;U223zP!wvb#|iK!L02ZqNYBW!>9Ut)l+dNZGzqaJX~L_LVbC(-k)1g
zUEh*eB6#9~L&3h_86o+EtlF|5cDnAopcL_>IzS(7PJ0WlR}$1$VIQ6A#!|m~u`i^u
zYNAIcrb3#7k}aO+4$5tw&}JP}m|LGv6)|V=kC(GeIDt!l!5n$2U$Q+yKJy*>jCOw8
zLb&T#=C4iC!vCvr90o;m6&XVaX2Mu_$u$+1 at N7ZErOD2pu+%tKgEN0xMWEV$H&k at N
z()>N}ZXBG`uNKz2`-F7B-`jIQJESkp;KA?yfT+mBjib~KD`-loZVU3`CuaXK++c85
zYryPOIBW}GBvF<K7$9 at F!y{M2XJ2w7->0B&(wfuYBc-N?h%nF?lj05PmNL#VAL+pV
zf}2KsnFIeJrvq8ItCWgMf+`;#3#fNyXZ4EB`|wJtJ)wXL6rGq*&J`sQ0V02N&>&OJ
zS3M<Vl~N>dC~qCes8o at nOzq#Jz^Gf0?M}UWvAdt2B)y7bHpnp1i?4jYd{8(*53(g+
zosa2lI?DX6aP`uTHc=?h(BTo*;uA4du%U+R8g5WZz7Sd?k(2<>v$zx)#i_Vd*oPUn
z%sz{R)j&*uPbiB`;)V|g0FQ%8u7!N;pmm!cl=Ex=y1<NUHcQmi)froAJBHH!f2Ki^
zM1q~*azUEC#J0$~^q9x(BGE^x+!ze*ALghdg_o{>U`JdmhkJEA16yGWA3cXu?f4r_
z#7;)0gL?9X^ydy7nX=b0s2o?pCJ-^x$3w=B*vvz;;IFU}AM-ez2X6)KuWK_)?%83L
ztT`jzw(Bl$M-~3yQgrcSbkCY??+Rf6<Rx5gvWZ<SI&6eF@}Tjom2Fq+!CCLb;cf!9
zZ5+HLTob3i2v;`vf?E;%<2hTgUE<~IUe)dB99?S{!e_QrIIP-0%@6=VlzYpi3FnBF
znqB>M1!CkeHFU-A#KqZNej8%|)R6+UJGAo(<D&Eq(@C at +O1bT-w0<378fhy(+-y05
zSzYWBz0IXv1i_tpgWyh>#uTriGNEdB!kv39*Rt1xRLq^4YHK=)%jH<gc at OmF6bR}S
zU!*R at YVWM#9OUxE%FXOh1p60}x9n5^Nu}3ry^NfwnNj#N9eSTgD}~V<<E$eOvjZr3
z^!xlQGjsQ(0p-gUq1uC&t~p&cJG;LH>k-fWvKOk+_UKVT5GJj?$=*&zhAHWnX7y>}
zf{h6&-;lawO-MrBOQwLVhDsRN)xKQGO!vbsjIJm8L#(LG0md{)T&w?usIFI7*~h|t
z3i2aFm;_`w#s-&_11rUA0t5M{z+At9-HEVZybc&`I5{vL0-N5V=HIc#4zx)eL#8k&
zBhO|>6^KXGmnP%nda%p25;^VsD?o}xlVb~cJ-TlIgUfC7MJbcjZvnQ=CKj7W>22zg
z{0)SH#DQYd*0xGiXIsmyxLztp{LdJd%uCQ~C<g#GO0mHDd at i9(7-YGxA}rLikB at r-
z$6gEc8KsegeWM5n*>wlKxg`lSUP#`Q>pZUk0MCCU%9E`iBSW8-YT;!hltq`1M-w6@
z!j^FVyAPw?vcF}?w=8TtY-xghd^ePGNKV&#B?T?Z;1PaS7w1Hk at Chzo5plyKrPvM9
zV>>r;C{}dXJxdK-_la}09r8D~m&m3rumavHp}JFsa8tWx;<M#J?P{h{z|JF;4j^<)
zFIDr8d(b>#+aZqShO||8YkclrJ$w5M(k`7wYusi^x66GjR%vmq0qmDqj92gp+wdEx
z$_-)!7Q^;q;+b!B%S0RlPXzv~v6~(Gx{Gd(!EEtyUlWA#B7yGEiP%ZZ(25+#!TXU?
zN(NUoqnXiNv>jBN%?fd=z%6WY=wt5K0)Gaq$D1P0&Cl~b1gI)LJ`}z;*1mr-9PQ)$
zX+Z1&8Q*z30m~;==Rc=`@TU++Wiqu7!*+Z7#-5PRGv)%@W$7yB$9?c&=YFP)L}^x}
zQj52+kX%1m+43OgwuK1axQ{!sWm<8};KW$7Y$X^NXN3n!Gm)4y|Mrw68!BM3 at 1eV|
zZO8ksC6osC-2GOE)OJ!*paqOT at 1Z<oDoQ2pZLSFWOD+N!$2I_cKadZQ>foDaE5bph
z_LEPXz}Dx4`}M*j6+ciz#3AH-X&k6^2eUNpI(Lr^)G3 at WNX*)OXf40!h(cV%d^RV%
zU2gCLGAjisc6o6W8Ms=vkwI$RXG(k|>}xdxA79bPlpz0w-Ytt;Y%5G<9Y=S-4o3zE
zwo<{0Xc2Kf4oJ{1j52i?S&!pKv>vOI?9}^PR&%}BSiVN+%eH!~3HUf3w+<y(rE?Gy
z+?6WXSNB2K((wRUJhs*48RIqGXK0qu?T)y91W at -y*t!M>?Rx3SL9Vm!ZF^-9r40W<
zIxjldxx-ZycyY{MxE3uS1X9<0fWG7Gt%mcOYVC$sat{ax`iXKSk2Kwc#D*EI0eZ@#
z;FDW~h%e*y_eSEKFR+OZAZqA*1Mwj|cA+_srWwOgqh!NH=+8P26s~{)Z%F<whm#)T
zq9(Qg>1FMqIIdQTxP=szjv_sSQN|_V4ZhH^IEP`ES*`?oRuCJ3UYJt(s=mO5KR#0C
z%bjo^+j0XwQbDPo03{#YoU}n2y@|L?em2uM&~EPA_1-9RP)XjovMgsoRV;?%hB*l?
zuuspTrA^!ZFbUh188_zy6?Z%aM7SZHS=EcX$tPgI3>lMX-!Zg^5qg|);q%KAtQR#F
z0h$FomQ#}@DVt!jy==f#p7(1xTgoU!$1ge_-uw=hBuS&-baYJPi^zV}g}z<X(Y<uA
z<@3;)GN+iGdI|zx1QE~zkM1DYHK3cUGS*cYo?<W9DX>iD-k3Cj?R?HSvOu(VfjQ-0
z4SkHfc%H!`9u=u;AJzQUZ-r~8pJl%x at a}W(_Vgtssg`In7n$FU94XY;mZ<Ev^i7+*
zx*IPFyvqre{@p>$d;e=20wuZ@`AM7w+=Rg{d-~&hmCwz&Bf*wYMwcn7D+XksM6FH8
zFliH}j{oN|eIJC at FQ7D0z)9O7d+?*T^3#>|(9Wab+oCGmUUj?7c{?7kAT@(sYCypL
z^9cWLt%(XsnmMBAjmHYbdD?=-*3_~Q at gEuK@u~;znT?4-w7Y`5WJ=&WQD0#s|3(c3
z+pOCWlxTwor&NiFTZgQQraUE8F79Zoyx>Q##yDew=wGcCqd?BDy=Yvtp#SZw8$dCW
zLz5ApOV{8!#fmcK!@7P at Bhort7Fc7@Tt<HRPwfiKG+yPhPBfVS>D=8}mrmC^&2{)6
zNbd(Omh|-QkIng74iu$-wL6PZ<ssGEwdPV&JCHvQWNfs at AUw=kH#zLH;svA46N+2Y
zEWK&xb;5@!Xe$S$9!8?MeH6wUXSPRFOVddXtZ;w__4np3HRLoFVibP$_-l#Z;c!|j
z-#%kcO2fu;4fQ3Vns=f1Qr$Akh`A?MQkfmeb`-T-?H#fB*<>^)>2G4G1>qq9?x9nj
z8`+*!xj9<d^vzX2vwG8%A39XPU;weo^~3;EU*sC~v2>_GadIYDLZh8P+rKtJ2=+PC
zUn6d1m1)AbzTSznCakw=zfpimt!ygG5=(Vtl98oklYK4v2|NxRdda at PK<W9I<f|lR
z#NzS-&%;%s-48!-J3)4XCrA-yQgT0`_`RI(M at pJECVEx2-yh^r%w05YhISsAfWf_)
zYoZ}#)1Z=JV?-;&P@|^x;=MYC$wzUsUlouf{+&j6j4Jl80}#V3g6XUcx(~?<*Zi9~
zIhZ at 3xl5^lqKw*YCRuS0Mm)Q^otBf9VVsE-dPn6dAxL{BVZ2bq^6Oh7#lVrWWhzvt
zV{_eb>1Be#Ka||=0t)gocUuUNMTb_pV5o|;R}F`7xEKjJ6)bjZT$>CVubrbA!$wyZ
zqa+bl3CUhxy4a}0fb=0p%0UL!5x~@JKK=#b;?bMR+QrWsR&S2`GO9YAvxv>2%+%uF
z(y9wz at nS3@QJudkVF!xk4F4a&1qG#k46Rm#mGp;}5>b;c$=1rpkArCOtmfwJTBgol
zG7f|SXtUJCzkoc;k&kvY8}E`X<<ZyO*Wby*mLfXk;j*+3L=I%)@uc+aiH%jpl1;O<
zr`%h{wFO+_Hq&!`E&Pg0jZ_gdxoMMU8noat=>{2l0VuPN#Cr1&GpDa|lN5B;E%u1O
zyfrR+H62Fp|EvAty&V|Txgc}FCrd#*Dfy50iMg3A&h28j$?R)v*u6QWNdokHrm!45
z)+;~?s4D9ST>E=thjM-NoR_4a`;jS360_*{)l4)VQbf3nr-lbQ!iX&VsufdR7aMjm
zqALRxERr`D&7K!VcBA(Wx7J6&Vpl#g=ue*oHtjSoY-TL8zaQL20=QbEe5qV`c^Dj7
z{J6n%YT|j-5_v17`L4LQYnBm9eBvh6zxE%U4P<wvx=4%&3KIC#m#8%<Z72j#u`{kL
zUob5J4c1ar&ks(;QwS<Kz8HXiN!m63kF>kh`7O!19oN>FFWo0%7bmKmI#aK$sj}@g
zRjzMGWGQl#u?ugi&*_R*(w{9UTfb-wk%G~%B0MR+nQH9`J9e<eMsIU*dej#;DVYF{
zibn?F-7(<jCK%6seZ65Kul%5X)LQ7w@)Wf*hv_ev2M?{Y8L%QEUuIj$A2pLpft*k{
z(uuqS;rsc9mjV4*sa#knT{Lmb7;)(KE{2_n5jT!V2_3Kfn`dYwXo|B^_z*#cwR^zg
znlfRN%40Wr3b!o!I7G=5AWBk?`S?{N#t$D;fConhY%6xBrShnHfZKg`9^q;h7`*o}
zZVZ1C6$sA;U-h<xK?R}k&%HD56;0UOM6&-ol<O at P{Np2Qa4=`NQONgZDlxGhayo*g
z;38)bFXH9C;9z-sn=o6FF0iOpI5JFAHTg<GSe&vn$p!!zSYrPm^*|fsDx<z{84AWk
zO(&khu)#d_{QVyQx5_hGuGH5<52t3!6E8y$X<TqHRO;d2yuiiZN#W&`+~pN3;B3ez
zkUR&sq`OK<FJ?Ylg!X_utVW>~iLi*V0<;~g7+lX<EOtH8fUXW7|7KcFQ)e1ifXfSw
zo{8b=U=}3bxiINWMvRG^*|a8`*8`aS(U(Hlt}Y<HiEFw!dVzQVKwW-Ar;!%vh0uY0
zd);_vRer3q6PzoAgJ}9&T2c-lktv29Y1X_DXva1{jN5}D`Z9B+?7{9<05PjKKJW4*
zE~v~cKUhA!-fFtpOpT|gq1li*{B3FvA(FM!d8d(Wg)e)<Dj`OxpItU{FVA%ub+qK2
z-uNnj;zz!^o<sPXo*RVDQTDT|I24W>q9z||Fn}xn*v4na0!~s(BXQ2=)a^}ILqI9h
z9I at XKUz)GwFRjpvS3dxSL|1|ygd&i4Un5;UL1DAmV<(`miX8#>v3Aw0EelG(GAm);
zSF9K<1O at n>_>J|nFwXncgvAa-o-7dw;jUGEuph+Kae`&MT1<eqz{ibw1%u8ue|=l)
z?#8Oz at kDO*+O0{L9!p)TIQ2?_0i16=5PG?cP7shV-TXjnIl!}QJK-T!z{G*_b9mdR
zC07{RvoU~d at e567`4f5+=||=oZwXNFD%BNZuWDy1d<YY=5{TI}Hr~UcZ~GCL79m%?
zwP;<tpcK`Ek30yKFFKrvp<l2^A|x0=R-M}4{clPxrVe-9QvX-xXtKm)a^?wH`GZPy
zxej{DS4f$UU_Vo7a+kZ+^M-b&!#zejq06{>{_Jyez-DsBd1~Q6$appcSJRg<><DuF
zJG at hw?gOh5HKn}h2?L$217S;U4bzBmg?KTe!oqoWr*|WZ%*2*4FeG=?`SS1TeRmy1
z+^csc)Y$onI}*%on*Uw;mCPD1U`2Q^5By&NV%QsaBY1&KC<^lY)%$jPQ1y~zeMQ`T
zNBSppu}BpR1}r`&>5}FGNak*qtwQTV*2T-ZSM_K0Ao4PYJ#YeoKp>1Us4)iS#TfN!
zoozCAx)7r4&%3nIj0FxRko$<cM1KxKWHnlQ6^+P96Ybud#ln>(MlToRVd2b?1Mt1^
z&tpV`bG388S;j*+iemkfWmKj7uuA%v!UFx8$mv@`7?D-43N|h9;}*oY!G@?7#B!#J
zVge7)`dexh2SR8+lmSCu00*Ge0i|u*HNT4LZ`=s234mVw__Hv0_K=WrG8?D+E?=Bz
z^jT6n)rxxokqQ*)sucX5Iy5`Km$3zT9j~i&1jG?^1V>iPht0Fl{Mx}EKrYPsf4)>5
zzRyR0juW|LJ#2g)5(gax<>&IyIHpNF3kP+;hU$qSPYdd~iB%e-*63am>Z_k+ny{y#
zNrK%wI9N!O%;QwEGxp(`K|+;}F0h~?k&a02w}&a7yz9I<vmI-(kJWqyLk!cCd9_D;
zv4J~M)#YIT=-*i{G?2#4uNrdR%SNSlNM3OoGZBPDH0)gwB?nj%Kis<Zwr=Br)r^Gt
zRYHKt!wU^pM~|a*b$Xt06bogYq;;$UzWJg_%=qh`J+GHm?4pc7l9r-(|0nv}KsMY2
z^E0w-<_9}cQ$8aw<}1d5DIbN-Q3P|dKYqcw;hJgYH(2L3p}tL!A7{mJ|ABMa3_}0$
zfyF1c-Do31aCOOwbh at b&95(+#!S$UbTN%)&lgr3&_!WU?sMOh7H^+5 at 92{7J547M_
zprY+dZoVTAuS-QZiM!>ix+PiUw-Tb*V{2phH-|*{%nlJ$-YB-|uEysvPcSr+!&h?&
z#;QfPQ<Ey{h^2sL&%6n2&mRxh0q)rJUOQE6IUf6j;6s3O6Q0o3ePkLIm}~Dj0a4*I
zxJ_sO88l-YSAPN)KFZPN&hWxoSZ#|<D&@W{N_^lZC)(w_ZagGXxM*>0G0#*%nEhDb
z94D+h3DBk4oHaM3Pl#ZiuU+qU at 4i*;ByGLYdQVu0>cyb%l+YGLtncwiI1Gyn>9VlQ
zZou#EJ5hI}s{gm>$I3 at cMRdUtmWdE62O-gu><S!b)fY85zSNox3|JLeO$!W7kFe|J
zEyMZ*6bkg^=96r=LzO(1oxXdh63dgf53p!&)19c}y3x8x5$^|gnKCC2MRs`=RH*3G
z_H+#|-Sq!03f?{bGlsp9?gNPg(Sc=<kX+FEB6eZ{(4NL93fxM9Skm*X_QVa2?9tLZ
zXvTq?Zz1wjC at mEj4c|h7a0e89sruZzk7F}exXLzj;5Z0HMFTNfm_<lZ7!C3=!uk}Y
z1u5irAM3d;PrbQqZwP)|`+n-$`<2V+7<K-6j`K^IO)UE=k$P~xIlks at +RQCzG2?ab
zg<;%kR)N5I401dn3%rM4&AUdhGjDb`>AMwJEP<={hDPq}JWyLJG+(KkKeSV)*>gi5
zIM+n<h*UcyR;)aADc%;_OlGF1EuGPQ51Yy;(k<N%eBl}pY=gxHq%A@!Go*Vc$FFFZ
zD#<K{6rvH)fs8%u?HtFX-zr6CaTX?Sxh3iV6^I$|!fQgddD~BchX(iZ93G`QOlyq-
zf?3*Ps~+tuhMv4vrCt4BXl=7jau_}^`zBc;?RPsi5(}RIU8GdRtb+$U7A^J&fuix-
zETLwuu)UE+C7b%f?<^yQroyE-S at I%1M6|#_5Wz17!U9tVy(Ae5<GPRhd%T{?F{tq0
zLLnDTLl}F~BTH*|wn0b|U>yGOlEGok-tmdwi7+H at lDh!m_oY5+NZ4b5N#A)&0<5w)
z66GE>$p4D`(enk;&c9*F^o=rt#QI;Lqf;6Jk?$+{o at fMu$?M+y4 at 9CKDbapiirPG?
z`65MUZ)pk5J?N`7o*4=aWRHiJB&`P4jt=nKK6A?(HF2Q{)4LcLKN=*_0#2yyTWKzi
z- at FB%fOxI?jS3Ix22zI`JH1}n5v4{;3lio3wj7PTK0VsW;ow}TR6eM<F+n1Qvqf61
z2~(WY9Gb~z at Mg-@R)Os{B`2xl&wdI?bH4?D@&MlVE at +!y)C~^Dg{93|Ab#`G&7MC0
zdKMi!VdBFNq|7wGXFAe2q2oVKaWy}FG?vq6jqZtD?3oCCqgSCzD($H)oqp6-;IbE4
z`yf1MJdhkF)Gwom4!g{A+lXPjXIa(u`ohw at ZgJoCXGy!M2KjQnf|q{D80*y>gZGkC
zY!d;w at Mf5(?Sjq{&npc1fH)Nc!XcMnf}}arW$~V9<wLUOREXm?kGv7~z_)<ePNqIT
zY_>a2Q35+X5Ng%{-v%3&2_X4Y5Q+7D$rM$4HK_0i_S<XGNojq`TFK-aUp<ZTvLaH$
zGaCl`gj|$4WyK at h4BDx~B`k`_duX}6A*^RibwnOWB<8Ux2}z1M#J9kIj$(&z^CDX;
zUH`l3V6$Rjw3k>+6EeL<#t7PU)axi&-FSkap%ZPE>E&s7ym=V-5dZYGL5<PLZcyh(
z?~cD&k9sK-yQ?w0v+qXzYO<m}ZtKT$9;QNCMwfch=6C+)O4qFBY!Hat$?E(+vq+ at r
zMyc6fzGN3|HO?pCvB0RnN)Y<AM)xz&UHM}nCa8c7CYsN)Eg00v6md<PJDKDaPam!!
zKgUuP25zt)Ui!B7{9uHJJ%1CT%!eK^Fzya^>9t?8Y$KU|CG;~Q582;0UdBod&U6ej
znQLW3cIad2uC^fxuZygN_|iJ6%n`5y-)!*r)lp8G$agS0E>YHIR)$4y0Q9yq4;;5}
zYW-Z~-L~W7UP-wBegT`bS$?B>?U|XTZ$_&m;<Cc_G=Pzvdr#LIC$u7c$5n-B;pP{4
zQ=y%!z+`tpqxzM&iocNLljE~*f?hM8k%$ND4&{0<y6u=_k3gKGBye%Z><*86X(tDH
zfCHQl>+#MNNgeQkj(YA+Y)r0{kqnJh?%f)>jLqY09`^C=C(6sn^gy`dYL1gG%^lAo
zp;Hm)_?pJnNyeGF4j<+5m5{@Efx#`9ftp4YZFUpZG())SEN-YT;WMGmgB_!3mQA+l
zgWb<5?QJEoACe<k@?hHv!*h5MJL+^J(*^J}G>2vpx&)GkBUpWe6T?Ghs@=F#XXgx=
zps-{g4&RmyC~*!pdp*v3H00~EZzjN19t4;ddSMxwwq~B3c=P70xdJ!vXA-l(Z4nNP
zSXRlMr4NFn0XfY)9ODY=jQee;Og`H&ZTOjje5fX>+iK*>!cKi3y{rGJ?TTFo#pA1r
zJv2yv_yBC9oWibL9<ELANTWRx8 at 2+Pg1JQYf#ktzc^4)yIiDR18{Q~B29Hg~<;a_t
z4{#dQZtFGM)Efh(Y$|rI0vIPJ7go8h+);W*N|*QIkoeJ<pg29uGqUZ`OBKjP-i=Rp
z8w!EZQdjH|)rCzp{JCN61fnIi>9Q?$?-G%h{uHY?8vy0st}M#(@(BlYO>d{cPdFHE
zbY<&S6anCRe!H^BC{n0#pMm#l$hiYRF#0u5n09nXNLP)&Qn0d;eF~qo1LGs+vxC<V
zFt+uSINYos7~_l*%pemUpbZ5>4ySXpb+=d#<EWy2-Dzq8QcgT~wn>oP`ZCNSsQOjM
zhWvZvHDU{pxt$^68NObR7*oGv)U5I;K3^9+v7g^L2Cf`lD15^072m$7s~nDZfZzCI
z(_yc({g6)>AB4B#1&*&`g)$%x<$WpakG*!>L~m1nCxg*(q(xwDDXx+dG#>#HB2YJ1
zP#Jp@*v`r2vQeUk?8=`zq%x0Kq*Yao*sH&lX9tY2ai^7tB$G8p%ZE0-cQ+isJhmW4
z;*u1O8 at UFLIYuh{G)o%Q{W$YbcIgvLHc@;GKXUQWNTXjMj!-qB=M#{0XA>w$Eld%6
zbRkH-23K=!vqG!weM_7wsd-Pr57i>K^^=Pu`l4J~vACr<Tsl1%PUU0cFn{JG+;a-2
zyI}=*hJnBID}-2Cfw}$_P|^*@fPO7b#lwTw-zie_CX}d4ZrvTAYy<iOQG#=R_h1Qy
ze$HVRKApV|iQc?DSM-Xg!4n%+<K%YBKBhLo at L)NY)pmwK<-JzPEx6XaOSWPM&5sgu
z{ZGO{``eqLQF=`6{!UwczKCM^s_d#K-GL`oWT|1P6~^YHF@|gQXa_ev8*F at 9iHoPo
zLs2AAd)_t=xT$jc!1W-+L^Z_%i6l-N4}^Ub@>6Y4w=`$aFDcJgE9r<pM~NK6a`5Oe
z51lfcn675Tc#xp0<8S{A!!l3?)KQdO>l?2DV2<os`4AB&h%Y|3tfyRw0&P%!UVKCL
z{7F?_Q?Ksg{P<ljc(uR%x1S(~)>a8fMLUmpBi)~4B7+;0N#{H$P-Zm!Ui9##nB$hy
zEV*j}g#fNX7KH?6S`GgPAYp%aOZX1~Lm6-5(c6^InIwFSIA&E|A*E5wBZ2vT6fuYq
za#wHoT+5On-$S`43?0XJxG>jeRFkAnK0LLHwYR{;K3^WRT_UD|>&G2+Wr1+bJo;_H
zheP6L<}F__k|1iJFasfe9-e at +RTl))cywN1G`dqMmO*d*MtImnWawD$gF$NUM_P52
zjMsz3TAMQb>4+|AOnFimA_j(jrZS85L7X^3UeOF17CW=x{G#GSvm*3o3SGv3Pwu$c
z+gB<jD!BFN-^yDRr at 6dE?N3(v?%d{<9yGYSmWHoLDd96#!vG!f2hi$;6r(E^_8)U{
zoW~9c8Dt#MIm_<sqMY1 at DUsYyFp5kof?-1J2BftZI-AtuY-`ruUtS8K=MfNAn|!43
z#TGqE!><gU$`H2oEH%VL^;G#<3O}|u5V0ANhf6!ZpwBP2EQWEvYRDkKcc`HCZnXi@
zw#?P)sjtk?i+G>qU%&Njg|^g$*FnHXs1tnmSAdlfz5qUk&u}Rak$5 at dli68(GeA$S
zn$- at gnONyuY<(-c!E-arxLBC(&_8r?nLe at TX`mcB7N`V7AsyU37+(6ih8IlyX2(-L
zs%Ga;_1>7Wk at q{FWK?9mlJSsRkbHItX$*_M@^J_)V<`M=o at xIz_GD%0N}5!>;G^xe
zJ+$0k|Jw2v<6|03Rnd^lFzcuP<M3<8Tq1RBLkVCr8V8sXcEDFzX#?kRFia4VvpH?E
zXUowvCoP}rL+W9NQ6tUzLKem2Ao;55*3vXmCcLRHk9<?RX>m$3pLFi06eu{$akc+9
z_`|eprz5$vx>mm}XbSSDaoS4RhC3{XBjH_2A~-RVHkKUMEp=j{5SPnu1P at Dgsb-R9
zuDbC&V|*37+WezWhHewXFztct at lZW6qzx6T_Yq2jlH4f0D(CCS1=u8=-z&@%Grz6V
zCwd_-8hZ0Z#6<{c>rlvrXOJaCL_+L+hbQl(dh-EWaFH!w$~a1Juah?8WDiWbaA%{e
z=gh^*l>~|03QCYLMOtj{bpY=7@~MtkTwDW(&%}}iSR^~_2+OkLBiwNpWiE|obYT<y
zP6fQ<1{<A3)dV<*0@@xb&xB0=H0z4~-miLBCZKeiO{iYm??I}8_`md<;4Q0}pW)*m
zp~(zVra at EuGY3zj!!IRmWXt4?xmcH;t5!u(nn9m_r2<piJti~QL0nlB-a7-86#A&z
z=f|5dOgvFes&D2io_`;d)e0p>_yupc{jKV1^SMY}@GW|rC>r81-9rR<u5&gb_u||G
zB!*{50CwOg-}b+r;DImfQGI0L?g8#_J-IX(QJ96>Q@^hv=+q??aZRyJ!Aq2p_OH(v
zih at B?yW1Ygqf)&o?vdvR`B0v8PUWZnlr;+4&a#!ZEfR0-5TV(-;x0!0r4#1hEV;8t
z6=Ny><35X9n^ZbNa<sIcQ^fjvSAerqfrx8Is}A9i-}$M5$hO44C$(~6)x4=QA6R&}
zQKWe~IjXc9Tc1#}%RE(q{9Tqc`VzBRb(D^WPP~$1NxZzgP|EzfKa0A#RvgIA#0210
zZSS}XuZy0L*M}JMNOEN5Ua=DKD-~5FhZbCsEgDow$^_41gB%1NyD4YNn;DBP&faCz
zmK3Tlt-D4jTddnp99AfbQ#l$feiq}m=OO97g!UDT=<(9%>2a%NC9|nHG8tJ&Vntl0
z%dyw^s?wLbM2zWj88N<6w;qT+rU4+AY}<#xbmE(Gb7{<%KE5dmX at q0?bwKDeFZ;Ek
zu708S8Go<e^w}#O><0xzOJA<;R`dgT(JG5#?a$wCEDda_Rt%>y*}a<L|F0pOtW7)4
zA%rc3EB<H)tRY&{0)c at 0P3oBrF!bwHX%lF1Rbv~rl^Cz at l+!{67(KDKCA5Jbbk8A#
zH!qDO5b*9{x0yI?Q;TWPQ5FrBffMForMQbw$2Pjv!)cj(9i&rB7Y6`lD964!AP@$@
zuBKGkpD at 0KS@~t=l5K!&xi5dpOZPwLI*?Bv)$|vi6WSd at ZNb)9TQd~6XV`dmgv+e|
zQm?6j9m5ajSxJ!6F>in_{W8s?IM*N!i6RBL7QIR?-Cn<Fa&+o#{rEb?8S&uJ(rAX`
zpZL_|<0C_xLEz*3xaN*6w@!T8Cw2QUBxM~<9P}z2 at 1kWEFrN_;BfyFyrn;ZVw#-u9
zGi%;3cESybTgHk(x`WRJz}3`3b{WREJlrtB06##$zv3bkWzE+dY~Onxfv}Kafu(c%
z9nysJb-YSO>MLdkuL(S<(yMYho@#%sIH}`<aiU1zM62>ed(dok_s75t5{?D1UZzEa
zRj)Ub!q1Gj4X)=|$|i{lP15m~caRewe)@*DCR+XJSkA;77cj5Co8^DPK2{Ftza$9n
zD}ta<Yvm#KrZkD~4y4im5BENq=<&hJhJGf!s+%Zo0d{;BT-g?|ISI%u?)_xLB|JB;
zVAG99v;DHr<VQ+Y*oat>c6wSI34Yhstacl0A at mo+r*#70iMkOfx$?kqbQ|xcpM`aZ
z=$jK|DRykHeuM&<flV_>ik3p`$iKY$$&yur{rY>a-$d%=O^Yod^i`3aYCDKs(VX3^
z5B9#ZxO?BjpF+-?LY+J&ss7JHt?p<0f$w9z*&L;adEsVfv=66?-=jYQ6`E<13^xeD
zonkvUKI&Hld@=ok!<YLJptuvzE9LBw_?9-%*hD%eM~NVA3ME-nx)VSaJUvcS{}yz>
zE3UBNjN*tOLH4+oA)?3kJG_$Ozoo3!Ux?N!mtVB}cw8ChL*zLwUdZDN3jg3$53^eO
zF5>VW>%*34X#45wnS807l&AZO)7XZxj?qYrdl_BQr~ab~VO=<7ZP4*P?idBub1k0#
zGBms;Xk$m?TFdKxXkJUFORCe=+`&>#9ye at AGT47wt}#uZSCZh?T;5ipPKCXuV@}MY
zDf&{fUJ2Z|ZE4li971<huUt at J=51!}GN^@|c-xPk!N4B63A%bu6 at tllGL8ohE-aQQ
z`w6$O2{90GncE;g>CU at JA)sZehvU-)Hi)p;sgBf_`amBJyH4zxKd7akFX6B at Z<2Wk
zy&=qA9R(8a{_1Vk_yDAzl4S73ffqs{CW1PP<r6~_B3#_&EiRmmZa<)wfLb-e=0o<3
zf at cNGwW4Q!{b0b!^vQ85F5#h#?S;0>ABT_#?PdiRXv)us!W`1l%2XiL(fa=Lg07#!
zuBx^)^{l*j6^&wemuu&eDv?PlW2ijsl0L}Jjmk%-GLDt$C~r6oT7U#kikIcGdk|oa
z?=-bWN%AhE49r8o6m~cSV}^k`0H_xL6lF68Rz@(%GV;P`;?N^QEGUR at H?Q#aj`9}2
zKxmRz(LFaIMOzJuUah9tHrokul_8g|&u8`x6`P8C%8O7t8DDePPKl}0v!ZjuWd$aV
z>o*P~*V<I3zoZVKN|&Hju<tip&YrYP6Rd~=64#n1r86<lm}|)~i+ at I9oZG+$(SHV9
zhT?mn&Y)8kw!Hxld`g-1VZn8oO=Hk}!C9=jcKNI(d|wU*I+hH^58M{?1^|6hO(x0?
zs%-U_tRYBWcuPT=G<nht-}rep-rNrbDuqwzsO6fPSo^~<3znrM at VxY(x;VJqh$f6d
z>A_c$A27q}J^3eDq9=f7RzN1?D?b;rPk?sp{h^Adu>4Mi(VE$}wtptZFkYA&qH`e4
zZi`z1vl+qJkEdIll%sq6N}C~`sv81}4tzRp0%<3(iu*&YkeY1`ur!%ZDqSh9j6mt9
zUB+^&W8qIJHNp^S3W{=|C_6|-!ZY=Xx#tr{x+UV7B&C-eEms86tqUsi5?97~@gDgY
ztPn?w_ml<1+I6vhabM6iI5~#Xb(~6;?wZ0H)ms#lbVfIYoxT_cPsvZlUh0)&$`pHm
z{Rlu{>&W^#zyvt(Ew+AeSZim~I-;8NSG*0gEE5oPA9(YIryBpszNkfvmLF@!Scc)<
zwkq){bBhA2ax?))(E_pu-CC-gHu at Hp5ysNL0pBcp7B)KZH%oGR`07coUXl0Xk)K at j
z-=rQL6@%}_!k2yq`g2V3bKD%&`}ut_tng=(;Z$R7{~x+V)3!9Lmqt9JftTakUS(M5
zEn~8qY~4d8h^^80hvo-kgH6*arVWFSb+ge;ad~9BIftl!dp$b#NlnB0hLN(bcV~A^
z#>Y)lNvbEv1YHy75j~c5(Om9hL;f(qk&)zi4eFEk6uM0?0FZiUkRUllmwi@@6H`Bi
zaiw3;(++ri6t*Ak`)4RS6YU_?s4v5gaaj57E$|&c?g!-GD9=P%ghBLLDjVK4mR&1-
z`s9zhVU;;f;Ya1d?x#S;poM$nbb{SMH~!=H$mjf-W$wsbsZEc<e0a^7j~fzaWhc{~
z2-EAQt6SE|xN3-M5xo)^^HYc#y~StTnM(XMbB^0kV%POIq7{dWd_dnQSS~0{3UK!X
zq-ot}>rz)rac-N0t7O+mEPm at I3LJERbpNIRPp`a1N|OIdovCe+;gXZ&oq_KJ&xF}<
zgF-$Xz0D7r*f~C^uKFh&tllf2wZS>BvsBnv)`<k7?d?|!yNAG~h5{%?IG+GiRs%57
z6qZ2F<v!)l)IQPHzz$^c(@`xAbDytUA;gmgB1rQg8OJJ!BMcU--8Fn685xJ#3R6B$
zWMIbQ(H4k+#Fn;SmW1y%5*g600!EU|jj1i9={~jf5M=#aa#}0v8{n7PApn&{h`BJT
z6gzFZiZXlNANii<N8Yr at LREy>4STx at x@oF5I0<?j5hZPm4)=zBRyAPS#vFCBCH?6`
zOkj~x;vXF4R4?vz7E4w&E}U)(@qYNo`KK6ee6cPv^XE<@8rkfZjFdyNGNsI1DqULS
zGP`<6*tkrK4&Ro8YYIOHX-RxO9Hyh&2lHQ at 4v%ZH=_OaTtfZlYuAhX4{(8b~u5xcn
z;%%+dNGR$p4#8~Hi!^Hp=loTGa9;=q`u`~nBQn_PaGJt|10VkEer;43B_eaVCGMu{
z7hzN!tZB+DX?OHzglWaCjS?)0WRGm3p+p8Tz=87dE~wY1ge&=1a+>;1!}Ft{b8Cnw
zrZ&Kefa^}E?%wAXW24c4K=TOQN%wcs_f0}&5&B>Up)UckvJKW~^Tloxo5)S`9i_96
z3>Avz%&-+?SrqMCZSQcsR50Qck5_pslpxR~CE*vE5wR)MD0o1e52WLT7zY86JTJF_
zf@*Qz&)G6af`AP#QC&d=+3eVDNvn<<xPK-d?u%%fA<?Q(IA4jy4O{u?-}aeVv1MmX
z>vjE4yS`o5TRx)b5wlO>e%mDvaN%1A(Jmoq((H^o+8;ovMP-jbP3PtX-Lh+xKF4lP
z-BZ`mO0~MpES6lN21g+VKZ3(LO~{&MYZI{>ldb3e2~p3b>U}W~il9J0>;`EWox%d_
z9hVy&JtN^l?wLUEjU8x8fUdA5x~j(Mt9{JuookQgoa5Mh(4Rm4V2V$XiB3)<(mGNy
z0}!#tfk_i=(rHp=-$g>P<jlX`AvI(lxAx*bGxpuX$+O5sXT?!n%2&=bp^er%jZxeC
z47f1{%d~F8H()|w68VS5f9ZEQ4W`q<wroa*3bCIbNigv4lSp at RRl#bxT<MB;_S(Ra
z7Fe=4L<7g1lc%TCG|c!2s_PWOa7gZUFmBfVX0X<Xja!8m<wKyq5vjitc}U~&h8}mM
zU%*`w+JR$4LN=kaS25IXgQc=z{|4o$#2aviTxtxSz3xI09nA3N{SHa46_``)_2Wmi
zBF2(>@_#TDED8xtN$qzs?1JV<9tsWB=E}Ng=S4P(oS$|RqT(Arf>+hqA0oFb at 8}W9
z7jrl;jdeQL<U8`G!=e}SV*=qZuBO*JxRbG7w$_Cp$T7-9ECa_<XFWg-HK#;w8W;yZ
z+mxdgn at sKBo9t9vo=W~=IC`ICijlHNzmGc~MwXG_qA~X=U#$n{nJd6!h6`fUsodN@
zc~yZL(NklM0xkPv!P_k(%}ozPgKD`YAo)5Kp6e+f2ihv325qhFKzPKcTfIcd0lXwU
z)O#7Rq`zl0DxkrZ4*TB}nscwIoa;oVgOzIfa0rKx&fc8DAg#O7z}D8?m4Efhm*YBa
z<H08M$}}x~$iIj at Ro6_Sg;_=k!$MJn%F+YgKk_JU*vHPK<M2b}_4Zr#m?+XRgQ=z1
z#1H*#Yj95&kSIC%l%0R2^*GUZw^Uy!MU_XLvWV94zw1SWZw&xI$%-p6z8sf%;h#%X
zQWBNUPb!t&ri9 at wMlDBh4x&+*CO{T5gv+x{h?ttbJ6hE5CG4KUir}6+(}~>@WYBIG
zd}hg+gAx;#iYGpqjzcNPR|{4-jFE{6?M%s{g}PZx>ZjOwzrVPMfRQgX_?eo~kQrHx
z^EGC;F`M-(81sj9wy!8(7Yb<2F-oi35JDAPH)wE<`osy5CtFREv4TWyb%`*O172HO
zL59zmq0wglCF-Q<zs5 at D@jD~>qoe;krx`Et8?BhX3+TUNl+o+DQNZNnp{aaAT2P7&
z_YN-~@0)_x;8LowaGbLKC3DsAGgd@|jrmvOyKU_^0xdK0Y5aa`wUonsgWQ1#tePth
z!!I~ROiyB7^FSPMNl@%y1!06of4Tm}3pm=?kVzf-)YqeZXl9ADNxU at +HGa!<;EB*!
zN~3qbbEJ^tx8$5&eMMv#pijHqq7wpS!;szJSp8ILEIwNE!FfbUp#TXg4oOwrL^JIx
z&lBIVa?@(2_RkN4+ohw~^TXpltNm;K;l6A|z9~G5y7#Xb3S#%OQ8Bvr?#e(GKe5sm
zBEh<W;r!%;dz6+<=|L`9n;X at Q=7RpG-v1t%{r2?<*88^Ym1H{g_Z3`itnDQkU0`li
ziKYbakQ|g1eq{Z?FhNZOJh?_~wa4~Hz`a%~EDA?WzV4RXI?vyBjE2LlvOZ67Eu;Uv
zmFY9`nIa`9-#U^lBT`AOn2%7IJ;U!iM~-Z(!J-g|-^pLex-I;#+3No0g$FROnPn7+
z at Y`h_O+}mabb+9vW;Rd?hN3HgYZzuBQu-Fqb#Ok`@Ud}3d+K`mqhwzrr9byGv7S>=
zyIKK*`Ra?14`YJIPS9s>M(OeS0zav;&>cH1&OTrV(G?qf<79uneew%@<I;6R_zkH8
zhRetGBUf0qtebVXbC=+K)9|zsK^)8=6?a<p3~DC#&wSJygY<nr|E&Cq7WX!C39fW3
z(Au~gt&y at BKE(qZU-*raeS}Yx<n{!qo>?6v#s-Crkx-Vi&zX;@_n2^CXsN9y$-JZ)
zaqcRq0MZCoELJ~`@xo%&^l#tEs&7>t>pSlg^AAK7BN;)!tm?t`Hp<x%^H85e=|A|s
zS_?xFaNR`G9hTg>Q0J*>u1E~D$$kMkC4Zl~RfQ;7USMZxB8ZRUd8Iqv?x;s&9E<Vl
z^R0r;=oFm(ou4d-@(-tcFiP1_X>jU%V9=ErS&fBB7G{<QgR+PVV8a}_O~kc++bZUd
z-FmfOzNQt<7R>A7Ix at T5febexgyJ{|@XF?^7jB-5V&poWxaII`M|56iq1MzgQ`tR?
zANbR*Q^D&t+hHRnY$jXy_hGgKEZJ}pXEPQmEFNa7V&eV3bp>TTj5-AB5XzKxI(&h4
zS}8EMJvEAv- at m0oF=>cxv8;7#n|X9c>VG7R4M7brTj`C<)~J5NvsF4<HFb}zpti%W
z(*fL}q4Jzc^>usJ?rP62=%pHmbfq3jP}8GqN$S<n{IM%s)<HadCA8&qIUHUC`H<%_
z-BP2D at hS4JjviUUYpmHh)JT9$52&@a>a0+E>}#Sm^~!W)dqtJ4#y4BYbN?MU-4Am$
zNsn+62j?rLAY}bZBvDEX^bwd$r`2;v)bb%{qavlCY>?B&=qug+)t-80r6>DcEbq2L
zM`HypZy8B_CyIW(Jfhynyz^7n;Y&#KY|;*-{J#GSd!@O)v?f8KVo>xn`&PqZ;1t&`
z6IOCj at -d;)Nu?RASG~5?^b7=VAa%vztr8juQ82+Y7-#IA{Mo)90#-C=WJteVI&K`p
z%<^}-?+%ts7O5{$s~bQ0TKL7-slqe>(4Q*TC31=My1SY`n>m-o;ij)hiJ*%@9d$pK
zcW_hlWB$Xs=Q9%c?0}v|%=lkF#HiGkwxZz__ at Uq-Bhg}aV!QDvKYDauV-Xb>tP+au
zfu9Fv)&jh%w(!~Z^MR#@)^;Ig&I1A+c)e^ygQ)}BEh7B6KJO!IWXXq;(-1M}^IfuC
zjqf%luS_|HPWsMReBHT~l@~PrHH=jlS$~S8OTB}0TAwg=j2X}@)2vh<#O8h;54V&9
z=qoYfPDPG?_)(Mp=y_=SS~8)x33M%qsVzC1Iv~`VPAyT^%X=gV4-W3g5fU>@(DVVJ
zBESdQjKb*Z{Rk#SUY)(*OY<$|^;jCS(0qT;43u1=)a+gKTLmDa^#EF2;2>QETp4tQ
z`IWh!Gbchk;?@#Pp!lP%+i?cdd`HVY at f;I8Z)GVn8jIdD-=eUr=6M+dOcbf&VX?f^
z=cC~jG&MI at N|1<|GmjUIh|7sT;b=~k;cQo}=a#%s^j=KF>M!0glwesOypkN|H1&?0
z)I-`xey3p8%KMJBL4}tT47eLgm;8$nj9S8cwcb-lN<k4X6g?TF3P$*{P|tzB{$n=#
zRY)d-GxV_KeSOB~xwQm`vF8XjPU<B7LiR~|wETs#Z!~09xxvzOvpBKOpa4tXW7EFb
z%_z~&Vh#v2esareUWW%6mADpI&K<BDwYX)|W3Xg0a`{miP<Vy5Q^<#Qnx5r-g^J50
zC_))Yf&!3VU?z?`9OQmNNB`HuW&guhv?#)%=w8bS*e}X=-9ZXF5^m#F;73=C>6{$b
zmoor{2ARxOkFqKO94*7+Mh1y7mAdakUEqB1750>^(WM>o!=C2a(;{~xV%VNzE#zBf
zQc at l~5+sWA5ZUcvLHVVRcs#=YB^cnHjR~+KwZX~;goNESHP(4(BHafzbsB~tx`2Qi
z{2<cgF~_=fiVt$?vzA(JicPdUcPLB4bS?jvsZo-+-h(740Fsa;iT?vj&)_DkWqFQ}
zbU-Vn)F71a;JI|de{O^8GiYT-sNSo5YzC4cWem(FYdy%n<D_(+osPYxJ?ueca^;0m
zzpUUIkTI5_tDE-qFpd|Y!Lv_5WoaVI&<%#JDMs#IId^(v2~H1!UU0U=+0<6;C!BD6
zxwlsIlE11ZvrYV<J@`{NGU)XskmI)x at LZ>x3W!zW|N79t)RZesoi!#Lr_-l at BT_?&
zt)qVGvf-CmjLwM=Vc*(CmVh at j?qnyW11RpbROHBH(;kxr;<$68t~99K)j*EJNbs;k
zJ)^h&_?f&9 at a)&`eV>46H at SqUZ;QcA7(II-Umh(^p>=53C&8B#66Z#gO^c3 at vJtSG
z9PH-$?wYmGXN{pOVkjE%+{8#dM|=Hm0E1{s987wvP7jbxOTEV9$JrfK4=t8o16ua1
z;l<E?dBqonIc0?0K7)}H>}1{PVpWUX23R+K(qomxRh?Nk_}<*C>Uy?ZufvjoYoaBC
zYqz_#IelR&V(por^?8S~gb_%7hQY;<46ENAMa%TA$NF6`lSzC^M_i&fe$@{kAk=36
z-uR5%Xa&9{98sDf5IzB-ZiM`K8l~j2gICe68MFBZ(}7e7se^q1ax$<Db4-b@>-B(w
zVt46Z;sZkak2AzhXk6 at etZI}E?PPsQe|_z_&eDks5fpKvR%$?zBe at Q53pAy<ZuY-c
z8V*$&qLA`K2e=eiq$HX1J8-ah?WSL%U~s3>E~vt21n_Lj0807^nTtr#89 at sd3>Hft
z4{!yOc!XPgTSt4?6tfw%SU-V_Vl=<Ang`UPceQE)W?r(Mp1Z)*rMFoNHd);JKc$!~
zb8Y+)Vf}$@OF=+%dXb*;Je<cmln49jN9LUfakmc&H|RKNI_cFztT-%j=aHO%$JsQa
z_o5!!aI4IjnG2YKy2p0k{%zc;ml+McHKy=K-CV?$Vf&8Q9f3R-AJ=U$0$xVhV$W#U
zy?FF&j~4~H4xDCrZ`a>yLxz7PaB!N|E)@=LtpsK|SYH2upQ;&I at 0nqhgZCAFE5l}B
z%a;lcWe0pOvT4)>A`dniTJKZ*!<j-OF^%NPWQtNBcNt51WJT9a4X)a#fBiG?EaGP@
z-%E=Wv8<vymuRMw<}!|i4D%r-5MJRE3EMY-ZnuH3=Iunm#XMlENJs&A#po6D^fnB$
z-|<a+Yh`4g{=kdo9{u3Y((%e}6VJ-eoZ=cZTYPGqLd?QDqvrd$d;&qCFF_??Z=m5K
z=UvS{uGuv=)gOB(ToS@=ML<id!5cfwuJzxxxqok6T-MM}ae~}Ri8z|8r<#nDARO-j
zYjeV*VqQ0i@!ms|TOF4Lp=xcR^-}RFj)O6wJ;@HYpPh-M7J@>hpyud5gFQ2*J5~cJ
z5h09rLk(27h-zvfj^+r*UDeXwF1<dmpU%0JeL<@_u6y{G7a)mNt8>V{!b}4&4m#>5
zN$6 at tfC@3Mj9DK9U=etQtsAeie&18oELcmw_ at M?dhP1j9zer3{v|4$yHNvZE{1tf=
ztIf?(IXRD984$rg5oM6q+G>pV8UekA`=|R#^Kuz<-^82U_h}nWKiF~Ad>EE3>8qMh
zdFY$JJ3KyjW%&r)xMQYLc54V8z)|)M>*5&#-SaZlIJ8Fgm}tmr{?ncju+<wC_R<;8
zdXc0NUhLk^vX&xzT<xZdS~~oh*?w(rIoV05DAf<0k at E8!8%Ucp+ukz+_L7Z7<{Rfk
zJ~#1G1o%ZqFqx|sG0Fg`O$B6eo0o;+FOOf<&%|6o(e$c5wgKiy(q<%1ZFoV*+C=gb
zS+6#A<O%u0v$9r+h#%La47uMS8YRz|W?kZqy-!274i>9=VL29Yije=ORDQV5^>-AL
zhX^Puh1ti0qs2e(`6W3_oACafcmaK;e*ZV(UDg4GfantcpqA<Srz3I%<SOqVvSxkf
z^Ha4dDJAR*cYm|*X!Fm)=63WHaPj&mar{^10+JK2X%t*e>0}T~D`l-0k-{TUYLy+2
z0;Jb<v6fd=g$Wa2=>8uimSr}t>ux3N6&lAKy+g~qQ_p8Lrr~=Cr}g1J+&<@Jl9x|8
zdR<E0*9Acn`YqpxVC7~?T!@}<N-f27Ab&t{HqlvvCbJ1uXK^dumIrLbwc;`7wVQeF
z%j at N9XkWX=L&^=%A8RGm7e at W}HhDV-3$l*QPP{fn=2{)+xlt87;of)md%n)ayYeFf
z_&4Cja}Wl%*KhU&?TRpzNXE4^y{}rdVvo<;qo^<58glox4YeaES8rH{)>j+5)!G|+
zw1C0YbdkpxCEu>00X(LyLYVF%N#NNn4${4>%g#qh>;T=xWPClH)2hjqYB{^J(8ref
zc=PSuyS~ZKx3EvP!voKgs=4B(z6eZn3ib#7F4N0rD^eFhcIH2CchiTsqHTAECkz<C
zc&gt`+ON-7TZmaQPFf4(l|wl&5eFwhI)DHsmux?#?SI>m*ED1xhc$p3zac+qNcEYa
z)`EbLac#IY=F#Ux``ml>>HaC$;P*T6yNbPS?cH18LS1a}qkmiKQcm;(T0wlW((tRU
zOU~k*qA>Ia8|yk;E5do>%I*^D+kr6zsb4IPHJ)mfkaR1G6MY#N#Z{0Lxw;Q_rmUzr
zo at 2ht<Xio$kI)?QBuJ$wtf3-bp>wBfMf7-Z=V4blZq7_N3Mi4^s at W<ms77(pQ^R73
z*{bnlxsDRmnsEmm;n1}?(}bpR(<7&>3DjgmsVWWb0Lq6D=X)kwQ;&u)$^ti<&%naU
z7tA#yV7ep6br%-0Jo|T<EUfvWG`J^y2gF2q=3o+yAOxndoTXG1=!|h<Tib)6?U~+2
ztpm!s<Rn`;e#whtL#<apX|9GXY_SC|q9k%Yxxemz#{@n|_!h0s0lA44&+nrCo$J`t
zYjsI?<33>|GEd?`fA_J3d{fRT>_BjQOES;?bta(jKgxtnn%K36jIthQP8&vRY8G_y
z1T?U8$cq<2C+J<dB2~bTg at V`t{US!Jo#W at 97^uf-XR~t8oZ)UNU>Kr<Z2N;3Kgc^e
z#Qb<_ at q)|WjbQL at vVA_sx$9)vE+T7yrsNsv0vrb1s|X8HyeND@@q)d|G6$f!h*g{K
z^z%$aWbjTXRo+C53K~=6^D}CMXmbO&A`d~)I={V=PgxA@*Ron6dsw7D-H1!$l{?x(
zFb&JbGDKrW3HUBTZ=g&>wu_uJpA*CiO^>KyF3bQbI5J$&(B31#9oZ>IISjwsi`cyX
zUiy4Rt+undEhAbxqqJT<d{fdX5c*QuG at nk#FCI69jM+^L--f2XB(&v#!wG3-LayY}
z^$%=3FcF5Ygcy!%iROz1<4$M2fTo)(xeJcbBAF5$tLv5ms|_=I{fhIdS*8S!FSqp(
zmR9tX__8uT^U+g{4J$)_l9`)jBc#^@@@afvuMydwKUn7dFG}!Q_b16!_(PXa2rM3h
zOh_U0Cla4gj*a^q$z3YTFxSnNzw;#6q+nzs*a->svf#d at 8(tY6Nmp%Om>O(04Ml>A
zle&MpfW8IrmU?!=fcFb-I8bVugd&z{tWIRzyo)7~V1lR=Temfub1L)fcnWj%%mu8>
z6$OCR*=hk_8ZN5ulx<XOH2Bpw2Fp>+>&Dqc7ao%xr~q|`FaLXA2xQ$LIA(}8{u;_F
z|4u;z(w<qH>w4E#YucB|PBAlggDBfQ#vg5G=4Dvyms#Kj;xE&=0Z7m|6;47iL(U3S
zhL@>m!e$mWcCPLbKg-{Mu8y;EU_KBI%{uPYizVH_B6e`F;W1B-H`9srPVIlP`)y47
zok at +he00v=(Eu;lTl4SD99FWgA}H`Xq$J9|&EIoV#ACu|WAu2-Jj-gplpcUK?>-v!
zag}TFGanmeVd#VNrbfxhD09X<p3QGnD6bT-_Kx#}lqXooV at t*X7x>Z%E9~6Uu;>X*
zR1Hquy_X6saH{78HBl4C4InQ>p6AG_N1Q~_2-tT<EDV&-QZFf6e at BSV=$OOva2!f|
z5H81eZVm1VUHafnb#;-lE>OKNM+j-6$VEQ{7CUFKq=DrUA1t}7)PAvHbEkV6eb@>N
z!t;^n2H|ngcNa7=VLNQ at pM8F#f at N>%`JvfsLl?hA6opKLGpH~6=%_sOH6k)9$UeN+
z1QSx(|35UY%pyF0w{aj+QA4c6L={p^S`??kyFWQUqoE5&0q!_hHJ>|R6J48?K2{%2
zJ;WGttpel_#0XisS7+kj-VWf1Bi9exxbs0t*@MXQtdEUcY^c$*l2BoH+ogDLONH3@
zl!$p(hYoJCewum!74bBv{2{(m#%N6%`^PmbE`BTa83=*#sX+L!g-N!2{itnTP}1|A
z_5Av3p7_RL-j)1aEioN`V at 8D38bvdkp6s3HfGLe+u@lAb`ascxoasQ+MKuQMFUewo
zP{4iE3Q&0Gc~>gPBqKg!1>7taR-|SSD9tuu`Bo2dv(DqG7k&T=1z$q+)Bs3_L8>l{
z-<mO-$i+|qOZd!hD%q9uQ+3Kc0~L-)n6<N1u;+b^pl5lipiWTzT>gWV(rd4;jI4<_
zQCAY-R{8TWj}EjLU#&_Rw$4iuHp~AUXt(h2o)LGM^1QSAFZ|)PtkYjE_mh;e at Pa}z
zv$;lP4=p9 at x}uqnE6D}8u?v<%A>4(2pG;)@L_E82dTY1yRioWw*?-^?G?8UJv8NDr
z#!=$RX8<4Zs}1<#vzf at gKsh{9d|s9cN>1$8aS>BdV2=ZGxCr1>RewI<%tZZ*J5W0$
z??5a?l at Exc<E=<90r~?a?)7~E<;)4W>bmSIacuw)JO*#0=4H^g^+~p?ItgI6^+&>-
zb(_$1a at Wz5Oj613WYTBN_-E~{rr at -CxNKT4K)Yy`P3`W<-JTex?T5#KAC`u}%nL at H
z-WEVF>39f*{DE*#UiQ0FvA^Y|OB?uUt5dqpCH>Cw{d8D==GZ{Z;QspFXkroF>MAm*
z_U3`cdI@|-+uA-Mz1><}HR30D=GvgM>?t4$G_03wZXNu_$Ndvzs^y?oE#sniq~NUP
zqI4PmI0H9aId;=L@`=FD3vqWdn$5q%Lgmt0056Li<ifgcAd{S at LHvPaK&@Z9wK!ZE
z#?U&*JS*m7ik&@n*p-G5*I3N4ThDxl?9 at BYJil_M4dd1*Fqq;>9-wT`Bn^;3S|ZKO
z-e<SraJj76DSIJN0p&L>xyxYmP}rk at rAdr=tXdrfD*2o%8y?yf{P@@H!c=!bSL?m@
zwA&FJ`*N#Pi&808Oh=mL8(84Ud&v1TNz0uCYqdCRiWsJMpsKnWYGS9l8lNZ>+g6~D
z&lI6n6F3Ll_|wzqB}9r$vW=btZuA8qm<tnM*tYc6#dRv=m at sUa%x9Vhjk(mMk+zQ(
z%*k#%geff|nL&DJqeT+}Dg{Ps9nty+CEmef)H~Ek60YD;oHL{%ybbl->iZFo+mE5M
z0hmM&TLW=B*96 at E0j(O$#yBw9Rd)AzQx^x7szJNT=2dnRWYxn>Z#g0NEWdy6Dpgii
zLx+EzC)*5>6z08?sg#CVQB^?fh{d`n1&Pk(T(gf*UHP63PR<u$R;lgf&c=&n#I)z4
zfI~Q-mO02>`t(?NiSg67nj4xs at hFG(J0|O_zWEgGgK(;N<AvsbxCr7;uEQWPepd&9
zGe;}#Q0N?N)H_3F at ZK#XU=OhpRi`<Ac~=v>X-VSK*^tX;G0lP~v}#Ytck`g at 3g#!}
zdlbWVMqLvqONfNpZ-%_{pKyaQh#q_QTR0>OJ@}zF7{6G*q<1;qNO<kg=3Ny2ch3rU
z+QCsP at WKq8c#2?u%6R_%_mi~u#CxscAgdGkmp9{0p_}^fG$c&O3ztQfme=_j<X)T8
zTy>t3zQ`L~NWI+*>DI?!cZ%#L(b5j|4!lJB{NIGqo)l4WzA2I+I8UyKN*4DF?O at U=
z%>n07W;yoh4*!##i at 3h@{wl=ae}jY22r|R5??bEqVOV&h%gEL(`Jv3#^hCA<6b1B5
z^V|(h^Wg{4w}%S98G9LWu>$$`s*~ll*&z66MoGp^;!=ucE;`o#1+hzI!vU3WHe<=+
zT1w{8%KAfLDO5;rXU^5%9|X@|+JT}0l)^Wbp5yqS49^bWMcb3LX9p^Ssnd1!1f at S|
zUx3wD-enpee8m*Zh8E4k+Cmnw)cRMXTRTu1oHPBTen*ZSY!{nrAL|UjRNp!vLf#M|
zJG#Zie3DF^F?J^cG!1^RCZ&j)>BX?Kpqbm{pI2(Z_Dt>)H5c05|M!!fStKLr-<fg3
zqVrslIOe?gf#ZbaZ$P#rnw=G=aT=nAS{x~(H8w-c8DeIktmdB~eq~X;W%|~nB2C=_
z<^@fO1;**!j;;Tf+dtc`fIW>@#7$=_?WqnzWt+Xp)2l9JkCtQeMgrvLPO52c0fDeO
zzY~mv!H^aoF{KLB?k(cFQN-gCwxfr*oJ-z;^4?r at 53hZcqm(Pk)+Fh|Ts|Bg)qTm*
z6pD1nB803|_#KT=2Idrqr&4w7i6;|@Bzd%u1&)`GYP?&4LUq>M_Xpxj&mhx4u#upu
z_}+zR?l|05M<#GY?&=m^1NVVdM1{76V-qoXa*p6Mh4Q;W8FGjs855bL6f-xzw3IZg
zHtsRCAm?9mk2=_<6?9{)8*5NP-cb5d40_VQ4EtzK(AB6+iHxqrmUW3H0VsQNVJT5j
zr3+2dWCMjZL!5nPsk6|?cOhfI4iv{$+Q``42BV at 37Gorbq>?|gg>LZ`^+EU<;^M6D
zT4<0#1VM+Jgo6V-FcxMIwig?=_bXwJ{*9L8p+>#W^EWrRa}AYzJ`O~U;#$Hl`g9W*
zyb`%^r2#X3Ip0m_fCYLN8w?_%1J00unZ)1sK$2qz at o5120z0H%0lr{uw?Annd6MI%
zLL<+;RN2>K=_>9HFpGGy<Btc%<xd`47d>MIwQR at 29jL74b!6MJtDaz!s_T1$CE2NL
zasyn*n8t;P at K&?bEQvbC1$hnf{wi at sS%c(u5j)f;fF=AMfc)49F|8A5$N7~3*Yl7j
z!deBw(>w`IGnOaU=NY&OiS%_=jp!Sd0U^8CX?*tX6HAQlsxvy$EoU-Y1?>7bCh|<L
z^QLEET at U~dU4U5YGZa00A6k;sxJZ4K;$fB}>b|*f^(_ste&Nj5n%LgjwyxLF#5Lrq
z<+{v+-FA%zL^We8F`KFr8tNq7h<GeJ7$+M^1G{Nd+ at I=^w}8)uH!{^===gz9g_sNZ
zZ4~e$YDlm+;<ibdna;GtD>EY|3kH+}0$6l`bJ3oZQEPrd9T=!O5>Yyd9h+cM+P3 at s
zK1#M>&t#^=l%F}ZhWuyQ3g-Z;4m-Dq)W1MaABlUn&>3dLfmJ95)-x9c_oiL<u#A#A
zv^DTUdD?LKtk2hBPhuv*2&Tt<Bv{V@#Ihkac6cShtNh6iw2qV3WS%f8N#tE<9qTCT
z3g?MgAq4x|6Nc0U!Zg82fhx;YRCW;}`q=ApGDgc!Xe1^8gX88fbB+JVAgSqKoX>RM
z>Xa`6(_griENvv&P|)iQT80a;X?ikMg1n at dAFONaOpq9xy+;XDDa;l0ZTGpK&?Gis
zz*FYPttKtZI0BOGEZtXMO}7|XKU0d7&>4r*NZDec4#gA-cOLUqa at pxZJL8G`I=Fke
zdn1Mn^pS&6%(9wGsy=TJ_^PU83W+oBTM5N!ak0h+L at qRoI@-@~1r at DFdC6?yV|K%A
z)!f|4==yQs5edn!DKUmCu41NUIv;s-xiK=sn?>Zr708q_04&1<B^L{2wou`@HS&Bz
zh`eI<GlqIi<N7-f2L*7XKR7D?h)QGy_`fi3gV!NC2YXsL(;xbd3iEgQb6Vwm^kkfJ
zs%8ZN){)X4*?z=~gVoXEo<ktQP4Ul2^>^pez3gD4r=F7no9VkxpaP1pZd2*%P6OxG
z4WFkV*Z2tb_Q1pzH*TyGCp(nvC)m9y=IyPXS|ir_CA`>1V`RL%cH_n^{uIfs*p%zO
zQ;KYYcS8gDf?u)=1`Sco2$pSWV#1&<A9bu<^fLN75Xq}opk_BcaHlM~9~%Dt#FLuU
zW{pC(N>H!zg<#-M>d`H#Q!CIj^3C$}HNKS>m7!K>2mJ+N$$S!*XjMBrq3?r2$GwLw
zviTJQ at M9u>zbamI7%}$1YUP%v`gu^BR4n at P@^x<zE at r&m?7(}=KH<XPsg7BOvl(AI
z=lD7wU}nCKaJ!eJ=eNjLrpzBxFe%lAZv$lCLr|Cp6<0T8)J<6V^i0~eLQ9*>jR9e@
zWfWPD6O`oHQ98|#dXQv1*}y<DnS%-2SE(trS7wyW4aT19^j<fLbwZ@{fU at DCnDN)i
z5Af7;4u^OD4l}6}5 at 8+{+?3W8YgDe&8%WxuXB!!C{zxx9HzxP<1B1XAYd8D=k}F1+
z&iflli~2|Z#s;UQkdUwslNV1u=Y8)X&X*{(R;dT3l{f=tR?ly$RQ-j34~oTSyM=$x
z_-lSo2xqGgg{55QiX!LsLE5<NN^JQ#8*UTXTe;kFBxxISRjmaQO4zivH3;UM0SS7E
zn@(W$j}mtE^&-i6kpc2mgV8!eQ>)~tbyZ$dP65gLNyM_A$mIDZe;f&JEE2o3RVJL2
zFN#VUe?A*xohDDaE_8e-?LYMRW{+!^lbJ#6lT;mFrLQPoIV~v~qg4&12sk*<q;AkY
zfgy0gTrgHLRUqF+&J^B^4onfeX!c_1K`JmE)6HeaWY3TA98WM(dQj6~5hk91*iapW
zTqIxX3F03)OQD#9#|lvZ9}`uM-HI_zI|w(8A{1>mroo!WffW;~7p>nsP%E3lQMkuy
z73CiaSHYZgGFyYKXjGc)pnrzvFh%!7q5bDShqWc_fK6^Cy_Rs4s(S)SHTq8i$>c(x
zOdRYRDw&MB?^>DHQE=U&mZus~4uXoey{b7Y&Mo8LG%tPU;~jV~r%--Smh{u=<SOhb
z23O>(%<z%)1ZPO>bH1s1RsqfeSj&XAAEJqAp{^SdO{Nt5U0u##*0j*esSpVN3Zm8<
zwzVPy&Nu%<+KVA>2mqmn#e=^Inh2yOr3NZdK(RBIF5oH(iBHnj``|QRDmI%v3b4rV
z%WI-`j*|YRydg-}j#97VAE at b(G#`|3=@ZBHK(py5Z8e0~kcbSZE02Y~9=!Kw9u!)s
zS{%|6wks9fie}hiRtQC~7QC89m$SkE1I0>khNAc`;U&x;kVRqR>qiL;YSgO8F)%N(
zkWGgniVR at L$TGzAXDZ at ejfE?1^12oconXTrs1XW6Ij{()sW+LF55Yd0RPZOk)<qEJ
zc44BLKm7P#-u(>d<B>I0Y9$55Wt+_k=)D5enlffElZydVlM=%~Hl1ldwWp&w+cE8l
zb at hVt11Hxcia+Bt^i)Z%9ihf)hL=J2b9#&^vSQ(33pcBb=Tl(o8lM>=a60H+2SZ!$
za^R?l11M7-{SVqAwiE?pbuDb}TNWOwa}}OPLpW~2nv1ST!xq-`XdBm1zm8O;JR7Co
zT7fobLhXy1E%d5JQc=@L787xXx+ZL;obWP6Nssjji0`5;5se!=Jmink8s+)%c}{S~
z??-OH4~p4^w17$1=Gb14?!U18EN*%6b!GNeg>HK<U_Av2G?oNXE=h!7KSx0+cZ}8o
znh8kb5JzPZKiroJeig?X4 at 8cQhA%EaHOA2J_c!CN`BCwHgND;|t9s5AYJ$~1R*WpC
zFc7^ykBa<%Y0HD!uXzJOVByBw?2R6+P}1<je|CUm_~zHMly=WbEp5I&yERc=u<0qd
z;_<N=I0Gd{BRN-C3*KK46PO8=*!|NdLB<b6-B-{`BQ!qT+M$|i{RC^UMh~lxF(X%n
z{*L*?ZOXx57=nrn<;w)F=>~kAFXmoWDLY_9i_Kg=?ORw3ohrMI!Mes(dS%`lU7Tvo
zm|0Kxtc+HqeNx|H;w{>j)OIiOE+4+(3mawbA}Yh-lK_o+*3w5E-596LFsT#Bd+~L{
zVY<i-X^ACJ_h^%38)Sz>Q-Th%_zrppBvmYr<W2GDh*;VeJ<JQ2G<6kcg`x}_n(Q{_
zR<gWANjR%ju?n$b*g)Uc2=}sIDLS%iA-2D)5s3H-TAc$n4&mXj5ll^?oEe3|9?r})
z8oWJO2SuTXFXq7 at RdCr8sgBwZk>D*plRhB4^Fvc7^{kWG$4u%>6>7b#DZtkeBvD!M
zvL4!vD(dEAcI{_UGaDR3Kk;0Ofm*zR+Vli!>RyiVxm at XocfJ+~yROLYTN<BS#k=G1
zhoy|qb_Rv3ThkMDjACDzoS_%>Y8glGXzD_rt3g~)(*IZE_6o#Zrh$LzQZP|SQ9*j1
z`MY;PT*%&>L&z|JrQwz@)@K4N#<-2yee6T?{#`VFQ55q13W|*;!dWa+biU`V1>t}1
z(r=Cr*M%hw=B*~!n!Y=SX%em+SQzKB)w8r+8_C~@|Fdw2?K)A>3q#mX3|%UxX?VRK
zP~K5AhulMK1JZr!15;4`GD~G>4hb+i&?jU(_1aF<V!6tpmcG7g<v593t{mei(X!T|
zGU{;Rv2HQ_d>O77xphfb at j-=HiO02iMY1}<X=TmN>~%Y8e7x`1YS9z^Sd;;M9(RTS
zl~kH5H{vUJ-IJ$T>m=qIz`uxq45m9thDf|R&Xe&eGpF1#lxHWWACUraG{>7GqrKpd
znn;tXo{q(IW*o9D0p>CybK!(g8Ag$@GS6}h!h>Ullg6Pp%gZ2808QD#Sp7Q`nV;na
zdeR7)IE~0Lbh?6Yd^}t-SghOziyCX{goLAIZHs?&?Xr56sf@#SNM-qP9EKZnSzvCW
z)D->K?Wk!eNX3V=$zT3{0TtPA#Dly5gIcvrZFXGyWfE}wk5yBB4bx_4kM!h5&Ou at +
z(o8`uh)ex89{u&uzEA=dCCup8T6h%<DR(BM>WxeeRtB|oq?tM{*Ol+kq}%w&<dvkY
zNw)-Xf~l<;Fe=#-&{tng!kbJ<3z?DKx_wW<#Q!*1c_2{83Q9S1e~zW-<YtAT%GE7I
z#|5rhVBPS>xD$95 at 9dP5Gp1jp_151T2NIV<gE5|FLj6n59jlWkuqh+Z@{eKiQ*Jn|
zkTXGPO<rPO+N!%zag)L{QIX4QxOIG*3US~ylK2UpH>q|lGhDoXguqkU_-HoR^aHs=
z<3kp_6y7Yz3##+bAqz5oD|i%dxZSJ^;oVG@$T<O_S>Z=MZRX+s9z4}3Z&f4Sc(2+Q
zz?$#F#&0a!vbqg0uhaZ)Tmby;=>u+9XrH$kuTpXnEI>kQH2Kr<l<LiQmU%j8MhH+Y
zFrXmX74Uw%%}T!rpo)j at W{QFGSE}Kwb>t)p=17luRewzBokQnQmyS4GSU>-^YIGtI
zKO7^F{hb(v;uI<VcD!cmpw2$o?)&+(v1!D;eoL1&m|jwH<M4sTZF-_iNnh3~7I7NF
z0d^FGFQ0*+ at xPH^W*gTC|13U$Q5LF2BbF7xTv*uYdMqL&&q$V`OX-ob0tH0#)TA`#
z7UXubY8o)U2VXl1F7_&G at GCrnTlM3<o?s{4Ck175za<r$*odQ!gDdP7Vh!SNxb at BW
z0|~%6D6bQ_=>02lg#NmC#l at y9Q@&vQbLyn!`SxbVVcH+B#&{*Ei=GAG;GW?lMKY=7
zDSXH<o+n7$;9BNWsx3_jv9CowLBLu|x5`+r9Gp&=y2*F_om&(9N|^Nc5gq3 at n?$d%
za&ISwCXsivf=O_tYbX7eVG0iB9D6Y_DxoS;UVf1`3ac>El<_D6&*V<2Sil(XfcO at 2
zg|OQmUrt~*eUne^l*K+6abL1QF$hOhXS4G>NBAhBw`vxWEpWe|JxPIp_3ESrFlw=J
zK;PmBSU7?2e2!LdSBT_0-7~62U_Q$tTS?!XOGVXST=^8&s~Ms$o}e|wXRIa+UADc~
zi^?;CcKRyH#UpD at ik(ChC7wi=byGsU)^;tTM8$jMJ>@Q$9u*fv(0Z#{v7;lP6!PQj
zfPUm7epl=DPcH4?!;7Z0QSM@!Sh8CmNo%W$l?;PAxA4I0{&J`;8}wiN39py;QB)EK
zje2YkB}-UigFtpsqi3(AXl-as*ElIvA-^M75=iz?eqL9mRB$>Tl0}}F)IDecOUy<2
zr(@TNnUYc;&Nr`ZHTuUp3Zf*^e`=@Z(YWt>%6W8^(-dE|e!v5;p{^*Z&IfIgmby3?
zTZ<PccZcx<Y+TNTUG)jVYn<lv4F6>S&k5_Vq|=qy_P=)<9ve14!0wfUG`>s~!SiQ~
ztufZ`nk0;FeBsTg1Y)8F2#BfSg(H2%D8WB#@o&A4+#`c#A8+uZ?IW*UCe9w|l#X&M
z{-bs0^9GC95j}h08KnHWga3gmjB|pNLAJ*idg}A|uK5mQISc!8bW()?_-C>&e5tiO
zyI=@#y7Gc#BB?O%-%nZQOP`QOq>)Cygv=_eZkd`lKH)))015o&dPO49-Js(U2Uq9i
z$E>(q1?$x&I3 at kt3G=T?&E<%7xo%NXwn%e!<A^;mb%=f|uK5Fg=AbKS-IQ!!rJ{~?
zAr>Vh$E#fcevPrfD&r-XxMhTa+KOxmn8tR~*FyOLU2A4A{guKZ%}f~pJ$$0zyiv?#
zl0^QO#dj$t0xa9E7=Y00*;L|H+;u+VxvR^C+A{Ed)UXM|Ir1OdD~4?0mPgcP^ay>}
zW#}AV(-Y8%b4!{~m`wsbujZrSoQZEU23c~dD;UZQPR}#(99iko{CSGngf!r3w>TI{
zcSN^5oG>RqK$w&Y7 at L})%Ck}`4tuy+SKtpG`+bFaKI7;X(<z4vR^7!lN0chp#75nd
z*1Yt4+qwrj=46Kp{(wI1$o at 9i40=u28&SH~m4h#U{Y8_TZX8jeQNv9KcsRu2KB0G=
z(@q8b7<Z7yk_36bXX~y?K+z{ch_jWuve$savfx8NKjp$}XqeboN!&o$aJynCo1=?P
zMzAd~O_>@`J)1=OLG5%oGc at z*L1}tzu_SAlJ%Xs1uQEx^;ECuZ52|BM5}rktKsxQ{
zW{CuQ(OT)jz951FyO<(pN9kJh2W%eHtv$7K)FWMuXp<~Dhnp32fZE}L5{rsXsrc9f
zpLx~nn)zx|-E9yGmF at ZylTAXAL%eLck?Fmz2dT+UBLaP-g_L^lBS}_W$1+PfKqM^l
z$W4*MtAes$jH)Q|ey!4*H)v?sn{=w#KmIl{6e9LqhM#;h>b*&FnQTRN;-}-KOeTdt
zdTWZX)w<4e!>Ba%i3$zlV6K>d!Co(e2_9hjk?<!k^EPaee#_m&A}xkTLQHK7h0n$u
zWXbnS^mhm5p$70%4d^Uyz+|)XM{(MEj^j(9k7Zb>wB=KffeJ!UwE$wWi)WiU<Qy2O
z_<j0;QocGg-G*ClEyO<;dE3bg-xzDgV|4oxvJ~Zs>4V}gn8I_DosR9UT^VS@?d!^+
z9~yY~Z9lH+<qg59k3Q#%mDErwFwwjVY%rEj4N-4So at 8bHZB08Hbl}0(enlQL)V3L!
zGy{-RHeV76atm~Q{d>GZ0<|R at l}?y3`oPifKXjVdO_AR;vKoBfXZ<mWkF*P=dnj`u
z)iE5);hS_&7w8tf;o=77p+b~|`JrWvk$jyG3y-u^yi2~|H0)7G09Iyp*V`g2De#bC
zin>deMA;He+D at dG@Y$xzDCB10Cn0NPO?nbhD!2>BA1d_&9X8vJI<6t3Fz(pH`=Z#o
z-VTBHv26K9g-nvwz%o2ec>#LV_2wwHucpB)s-`<-h7MPoe=*D32Q0`vh>EXO(kplS
zju!pNFkgoyQOC6)Tg2#Jrd?7&UKOspW#TZ@^);;E-j)pdP%w4g2v@}3z;&cvqRF%V
zET%^;=lVL|$1Oj3qf<Fyd7rVy at djpFBIfT9BwL-jn3wznOkw;jRNm1dvl59zO)5+>
z&s4ENsEwWwm0nXEWA;CW^rUUU1DMNWb&fr`;kw$*RrJreYGJknJIe%k@$2iof2l+)
zxWp7eRs5BMx*kgsQf4Hfd%bNlJ~<x;;z|5B+!;lGmBdNfZ;Pmg9}gkeihu{h+C&Fj
z&#B&n;1 at gXB`H*uV)wAQ91_McDq`_5SmAuJqZ6OXFmXwhWOm%asHwDqj3*(QCyh=K
z=Y;SA&39{D@(XrQIK|&@e?n1#we3i(%j)23b7g?K_>6JnV5NGS!GD+-2mC5XF>bh`
z>xa;tc+{_J;l=jl!@WaX>CsmT4?>B9`&0pBq)~BFhi7QXbbdCAsdNz2)T+!v!+m=3
zUjA=?UkVyvGbBH<f#w}2LGua7$}U>W|M?Y8I*NB<4#Lvr@$*1hQQFvUmdThZw*oT5
z44o+!xXTbCPQHAPL!fvu9WpUmqFxlGz>BwUW)RP9<dE=MNK-OYVw&#_4D<+{#SOU1
z!e-dWSX!2`2jdb2M9C`Q at RPP@jCINLuH_;x&uL!N4_ecB|3vJYBC5 at Ve!!r3($SM=
zS`1EcP={kIGr5It){8cJJlbG_*RC7=SOs%<7iD2)@e6XJ22_?~omboBXnslY^`Y?Y
z4%lDqJKr27P7hbmAsKfT0{k4byAfPSh)Ife0y*KV_;IFBSfLC03=18lzX<g$TorAZ
za+n<%HyR^TybonG7mH9Gpv8l~JW6LZgX|gKyja<1At+VPG#63_Q`(lW7fy&p$k+q%
zai!h}%88HrDEx4t3=i9FN7RvK?LM-IN9B1gboY}81Mk~RK>D?mC6rtRTE1!9m#lvX
zw!sqgb=>Z(N4PQK8LL1VVS5;Wy~(^iVj+T`E(er2hZu7g(T*_JPc{|oVt^f&!|5o6
zJ&0S57#geG=mvyEJX}GR$#}aVnob<Zl}2!pheGU8M#@YT{Q+E*;S9N at 9T<GON*rLa
zq`Nac?Pyt%(Rw<WRV$OFH(AG at k#aMsm3fkPu(lDzcajUYz2<nAkE}6B_y~%607^i$
zzl!HX<_CbUK-xbej8LG%Rc~j?7vMZ?hqR-V+Dis2&!8~F=qPmfygIQv<8K1FmH%A_
z;8xJt?hrFM+)csh;t^tw^;dxlPg5`nriLRRR-WSt=?iBKo6i+~P-wjc>ZN}h*!1Ls
zck_lhTq!eR-{%0SA`t8v40|cN9iC#BG#tXSTj~i;iq7F?2TyK-3Pn4x+Qx9jIsk^g
zMNN#%D%}ul|AP}-4}uLlMXE?H-*kRIXhd-8R)TuCJy3#UDZEVMxEO0#;G4ksmaoP)
zzAS9J(L^Pm3hxB at x3!jEoB73VFlF!6mMVxNF<u7CQ0K+!Jo6i|Ptf2^oHu7ZP at 864
z-tzM!uY4aNj4q}Do!QtNUWwL=!&5E`ofh5GSr?t*l6S9}sZ{|36`C5L*XZ1{BVevV
zgFe(FIthXb7+ZM6Yx{#Ug`z{C!|tTH^?dNCox#^AX*Y>bHZ^ajFKas;Sh}IhCgC=m
z*Cv!*W$GOR%4LX<DKF~4UYO!R2{sP``_J-tNmk{kx)mV9Sp;GNC1?F1?4V{tlG+ at U
zp7D$X;W!INTg=aDHotLVyS;KqRo$I9I*P8Hox%Gzi3_?TxhX&y#?gpT5aB+kU+n1m
z<k?WXWL2m~9#0#Zi%i9!u=igUW+_UEoG-4dpfiqJ_J^6Dsw4m0{<lIPJWMKO)fHRe
z64yN<wY(GN-1Jt^B2);*I+Ced&1vE$T>Mv*{BT0glmXqbyR(ks5+ft at u8vM6S=fD*
z!6<G28QRVGW#YX4C&iX&QFE~MSO%_N5qa<Oey2YH0&3^g#sGd8{{c+%da9F<`txm0
zy2olY=VLN2QugGWgr3H1cL6O%1#XrB#@*_7hW=32z{S--mkIf0rX>;@JG@^SPa>CC
z^Y7*=t_!k`jMU8fcK$qxper#?)Mlm$oH8mbbascB>Ikw^#fv1uux~v_xGM_z&rS4k
z!F+M{obxvYG8;E5Pa>H*oq>3HRLxjDDQ0{~Gwhsp*&$oL>zE^I+Uc$%D}tQ~X5L|C
z8L0hr{U9&V4;xIDqLP<0LIbBBe8MASF*7kgqfofD2Ocb at 8u+e2bz^Ye5Vv$N8^a-d
zzwb#jMT*{&jF;5lp at vOP)G#GrGr}zb^z3Q1)e)XOmp7#U_45ai+Z_=r*kXZ6&$!_6
zL;|o8tZ^D^hPg%vP9?NcE4mRCsb>ax9*|-d<W7=9{vG9SulO5vIfS{04HMkV62#2+
z(j?dOUq)QFQ|YcsTA?c$yN&MMc%lk0uftN+>_yCoVU1r8a^p};k*Cz_KROW at gz7Q_
zhC_*d&Uq?jqCwIU!0)PzKrw<+hP_EtKC3_R22=RhFBTZtZK?T9)JR{wQMb?XqmMu5
z8r7TyUIwUL@;=+2XZC)-TN^AKc*Ixt<Ed$g^7YuDq`v#5sfz^(Ut^|T#Mn7!sO`N)
z`sx(*({EH;K%0W~?aewH6iL at R0ZKsLKiqfeOSx;Sc+j_xObJUj`r%-LccS^E$7)EN
z?ORCkgzzB7r<Eb^Mv2xHg<;6t=|f(r503>eGH{`5Fn`nm+2vMsy4wl`NYk1M5Zn$V
zo|tp-%8GJ*2L7>n_Vj>tWA9#%Z*Zy9nb~5d6<7BGu?c1 at y1Dq4H=CefyCxk)8B_Fa
zEw!t{U7i)4TvI?o>0hm{XK@*q`VXq-ujif}h6veH`fXAU0B{{#vFy|{hK&*<G<7U@
zTj0lf9$q!O08KjC#2Dle5zSkW0!me at TZ&S`c&)BO{jud!omE#Q#ii1-UIyX_O_8p$
zgj{eLH__ew^jWM5fygjDbFkMTYGYF{c0EtaJ6h}TO)Y!mEP>IOP^xd1Z_680kb2PU
zCmU~9$Co|~QAO`gb837_W(7OP2UGra)n+Nc%Vvw8w_X4Pl_mA_W&p1$zf#gUwjuxo
zZi1RR7bvD~mC&LD=fU-`NE_mN+X3=YG6J2NZw9$&bB;- at pB{6KGR&31ty4D*;anl=
zZ%f|VY2{Y{>Aoq^-!Cy6q}zZDD5~*da#UI24=UjV+l#0RR at Ew1SwFr>kUtlavb!dw
zTNFvq`2oC^Xbth8 at uUeZWnjL;!|B{Xnm39 at NbYi4JC64zz~1a^+`mR$4|$kOgF3WU
z%qr{TJ>tug&@1g{8gn)yq2Wk^<^W=Z3M9<;q_V)*71Kxe$_MiRZN3E>j%e-krb-42
z at 33$*o|3qst2_nX*qV1`0q2+DFAg}f(8mvJ*Nd->giUSKzD^`p`n;ZBTG=y)!`QS%
z;7SYcuJ7TXUm3AaKiucT;(B+a<Z5r7hXymxQu77ggy46x at gILuKA8<w*9<o2^H6N>
zWRT(AM(SbJtSjmM675kBsxSumJeu?1{Ei6<K4AwVNOg#wAp6)%7E-*wG?*~D`{_&3
zKQTl}eeTy<@KRBK-lq)CS%_dQ)G9En9M1E5S`Zq=MdO?z@?emnY5o{9qlTp!-eA@$
zOM<Oqn5<u1#)=!#<~3llGWi`ghKl+0^gOMS_4?`qYDYv5W&UrDakhTjb6tE_9;;NC
z*kkWqI`fO1sRXK0{ZAug at WnZsKqQp;n~4}G{RZq-Sf=^5etOGz&s*x-$J2kj$GFSs
zK1!Nz5K+aB0}eY9tB>EZzM?4FO#(u at B^$#xLy+_5k-&wASsUBM$Ls0LH3FoA{*m+O
zH=DA;%HDk<3!aD>2 at 8LRiW)U>5$@i)0|rDH8uruxORv30M_+L0#>Hnd at NS3XfMRv`
zl at ozHX6Ve29-r>Do$H`?&~?SRFoqeYrW<k<_H{ecqE#4t;xuc at tjFRGtONse99x&`
z<=pS4 at o}%x3{+WD9Y_x#i^tKKEe+bQV3YR<@{I5B(>}e<WPsLxb+`v at -FE|OigTZd
z#~@OTEon<6 at XPinsf-2OaZj#99FNdc#xqRlP4Uv*+3VumuufjYKfOwpdZ)tX34)|8
z;fr?$UwMJ>;6+gAk}x2!rv5m8zH?l-2m%DwH}&yq$azg9c7{X&wl`hRY+F+-&b%sz
zW}0>(wij})Ddw2j9qdS`I+IQgx#GYGIj)Qv-H5j<c(>F&eH8GIh`yheO$z;TyL_j%
z%iow#aXj=!nk%(PANxVH=sKN{t8Fi<PYRzdWc$0o1ffYh-h$bCETSCpR#{i+_xbg!
zf-Q{*k{ZUB^%dO4)JFTA2?}$C{(Q&nb+iD0&8MMLfq;LnfHh!RHbC+!$S$qqdrgn3
zDr3Mji;cS`tHF|tX3!ze49o&-4gUicP`r#5n3{!Gl6^raa)v14`#z=qUxIjbtg-JU
zq_qspX^>Yw-o8*}o#wPuZ<pEa#RG%Cn4kNr$t1!B(EXrCGP1lT^q#D`OP4exz0sKL
zW9)xk?>lPA7-X{sgD*wR)ME2m(D&vN<+i8b^l$Er<J3CkaUE)nSxq!bF!UchxUeZ#
zs>>GPDl?9G>}5|B&UBE9++p6ETN%;7kBpmKpM!2XN(v5AJZxTLv_EmW!n?AjqMvR^
ztIX~)Q at 7GWp<L8Gtx~IwwAV=j#P at oCK{eY{kV*??l0$d??*>)uO(z*9*gFoIFoDKx
z5e`YIUpx%YS*21fQZ6d>*sKMmcyf6+o2!_{?UVx at mdS_={j61O$B;+>e%o8PG$q=K
zjMQQ`@=Yw0`92-*)7p;TowP)9#LUS&XTH|loRq;$Mr8l3EiC>~sxfRkrAivpH&|L9
zo!@IxHGGZ>b^;v4$&D1(C^_hEEt}@+O~Ln at sk3Uh)w8!VDDLU1xEOo at 6R8ana@7uZ
zQLadr_u=<-oJ1<0XX;(ep{bn;b=}zorD at 0JZllHDc1~6*GL-n^dHFo4o>>saYSUD_
zu4s>5MHb;*AyNOwf-QKTv7*iSdGmn;=23~ios0&*m~no&=&j2S{5F89Ha4M<s17tI
zojp<UodQUw2TL6D8p4zP9uEegT|xs$bB0W79oi}@l>#Xaix^8<8f1q4E{&ZRVnH}N
zgLGIo3G2)D^wb6n`glCD<r2a-0{k}S<KdIRu=M*limYKvSk+M94l18+N7dZn41{BF
zMvp<wH%I_LwhvD{$vpzoKAKfUe at AG5jt)nY4#EW>wTDi~`trcBc*Rk#&K}rII32P6
zqv;9d2*K_qBVs>;4>EP1i>GBCCxogPy4nh3>|3^K_i8A4m2p}Mx=fM*9jr=%mV2Iq
z&>c!r$4Cgb#Iz0w9_ at Vn6HkDkac62kvMVepCT@nh9F$5inS$?@PSTfXn`GN|*D+IG
zxzpG${0Sc(?)%A;Hje>5&ij68HhPGCqdd!aDV`^iF5RpgTX5#<VlW*##+}wa<L at W~
zkc_kdY5PmN!c`}c^yh^`2J^0XuM+v&?<RiG31RVvuY^N}ldMlGmO-iU+`2b8{_aXH
zYaU6X5sBqT0kSS6=iuw{c&2~40Tbd7#<0w+yZ9o3yKAxM&7b#_H{?)xEyqX+%Ku4#
zKi)REwJ^$&w}VK28jF9id91`mo|IA3xgn*%M5|E*4bo^PX|nOQZhyNwSGlfj8V0vo
z`kEPw7JSs^Ov>{jp=VsmHb3}cycsP}yT at BB-o^9Kij35YdUpZWtBcxx(IsK5Joo=Q
zS0@$?YU5RD7bbW>*K_y_lI|LfKg);J*vjTBcorkj4*k at 2%^?TzG?iD!<D?O+7hx+;
z(!UQIKu?J4_ at o`TTS{BHQ??7ApBMxq4?NF<)1{;M%o&Ui(ZnD9+X*Dq4i|T~U22rq
z%<>@Wrw+g&qg^84UgD}*sD~;K6!z at wbR8DZS2fNt`|CfOkjHU5%Xda3j%=W*^`o7V
z9?qqqWin^caW~NX2f~-$_DH6f{T5pkLIqAlHm6#^d)P`c9SCOLnQ at +ogxbbdIVy_p
z6<DE<t%JJ5Zj=dSB<@UeQjjM(42C_nE_=e59FMua#{bGE6FH%dv0|4t+iYP=ypHqb
z7NM+gHbT;p9^~^cYx8xd)~~6kys|GGn-6Z2_~3T;u at p=bX;bdGj3Sb<=F~k+29JW{
zx(zGi at S6!+9g9Q3w4m{u-D*|pVrSVgh?63Jk7`sthAXK(eouzrY*r at Ta1ePd(_Mw`
zTk1WR;s<bXGnLg6M}EnPD$(Yudat;19jTh=XlZuT8|Kqv!_M>wQQ?~%+IFRY**~y^
zg0>;L1)JvMM-EwK0kS+JtthS-#pgd2B+;5@&dewy at B$pvDoFJ&F&AcyiL8!<j#G$&
zYYCKhbs*;ID*31QhYW7&o~U*<4`390Q#zxV at hluKJTH5taO~B}d`0$lzo|y;1exKU
zUg#!{G>Moy`aDD1N?kI~wX`M+V2vZPQm-Q-FSM%pI^US6LPbtg9FxD4r*CU)g^fWL
z at M5`^V-{<h7oEW*4(obC%dlm)o<A*LfhzS>b2_rVG;rQn)P{iaZV04dGA&UYaHUo&
zcq;PiBr_6WzYKVq8TMGvkW4D%zgV>2;Lp9hok;XzLMi?NDOR1z(M*)dBq=q(^WVc4
zJ^i32e-Yh839(S!vR57LY>f&7Z at 35~(%W@*+`XXI-~U5r(H(Xf<!{Nu)u at CZN)rrh
znCv$g2_EXvHT!c$f2tq}?G&(<L1+<-<wS!lHDtEXa}l3j4`u{ixL^U_$LFrrkklX1
zi#%XgI at wdzQcM;v4NMBa4YR?dmpSO)E8Y*3E6`=hUW~eOh^q)?W>_ci|4ZE?@|jRR
zjA~S=u?5Fx)5 at h#(9b~5F-v?qqNy~?a4g%E$N>LnM0WQnJ1zQkK3=+YH{Q7GDc?<6
zAz%+d<YR;)E)22WG-hNYPgu4wWdy}?Q4&mF at vl!@;(%%S_cX&tpn2QnrtYF}3Py1p
zUytaMp>Z{hzi81&7&%;1ZqK91b-3K)1oMpPfVD~=hky#dWH3j3hC2Py*0P42hIJ7+
z@}SUw+7NzgIgFi=rZ!Cb<iK{y$cJWSz-7cKn41?C3@?An=E<++Y;9p;3MOeQTk`?G
zNqm{#lZ0Wdg=Sma`rR|}lRBCVW0e^!gC?r;gzWg+P1ZxfdNE=a;lxW0w_)VE8I5zz
z<X2atJ1L8%+hig745buy98~6a+fW*R{&*D&MpVLDV3Gl`C2DBXuGTu{+StG?=swOJ
zZYzxLV!Q>#bZVRj7e~F)%!%EJdkV(D>0$5%S3e at +Dx)4QoQ13=4-1P at e4^y&j%6oq
zF at _mcK!Vj{YojrSO52A*Wu?I2<Fyb9WHbK%iYzx=NP{}Up%&;6fV&>HO_?n(#MZRf
zB|mSS7#Z%{O;7nCZz^GUGy>8vM0M-8;&^l&L-rU!ZY8+i3XQdwuq2z%`7`?T?b<vs
zF3BiSFYnflmK?aNNgFODzc#Fje0^+=)(A*V{SJKJ^gK5#5ao)08I|W}TQQ_-1!I;i
zuWSmqB+=>EimwwLZBcobDhx1^nF;3b`&=nWwkEFW&&t@;X-?rhhxBA5{>BS)(IjC0
z{?|D(0xi%_Vx0l`08%l&R at IwS)}7a7i3TfdL!W@^hMu=Q2=}Slg5ua+w?|4_oiX=g
z;U{om`V!X8urI*A#tMQUvx`$!!trY~i9L)8vaV8%w&H>@EFRdIP1i?=V^LdIT{k|w
zZ|Kb7jz#_M?{EMwBsFhaB_q>G at _~reQBv&R0T<RE17An_$awLYlt4K_j16_huzU=t
z>B+iG+-c_xtRrP1M{|B1lb_Mtr0AtkfY>-A12yq#Lv4Bw1Gwh|0tkVqB)$QkxvV?i
zQ!Te3!MSM;aFq-Xruk(E34ZF3Tg9|pnyeZ5(09AQ%76VfApi=bA>x4gh`cRi6k6!k
zCH)e}9pny}!fP<C{mH`7Xr+CS*Ewg{FUZ?oC*9bRS9Osz3eS^Yr&*t*dPY)g=#}bm
zxmk at 5EqK^mX8X0YpxYpu!)$UXStkbsP0*yAT+!T?>(TG~*VO^sJ|W_vWuU6SO}(<V
zftBf7t){3*<WsS^^ZbgfPZ6vADu>q6qeb8Sv;ErAi@<J59jkA%b(AILdefk-Qm$B!
ziqwOe4Ubk1R7914OPRvd=K}oBHD7itW@?uTw7DYT3QxJoeR0q=I~`7bjzZ9-_ASx6
z4=iRA5CQ59O9*PP)rjL6{RKV+RZcX(pOu{jc5t*3+tQ(fLdvFczwb8(k4O>F0T%6+
z3h at wPdQdoG^3FT6cTBMw+=vMdzq*X)VSL(YzI`EB4H%m%_x0QDNj`qTi}ye#ShYPm
z?Q^OIWRpLUjl^z7K|Z>p%WGE4BHC-jPe;tiz&;AJ#!@My>E72Uw8S|ey7kx`6RX<B
z<<8rYdhXjVu88Lb0QM=`g?+u?RC>v^wyOGJymG-P9eCibI8QXTdpH`rvy- at 3l4`#x
z$WZf;An(+d&3sa at 86lEd>C>>ev9u}KCTe{T)g6oy(6CC9g!KcJ<m&g}sS;zz)QeW)
z5RV91B-<Z|dCM1+3H#h%V1A9U=ic$T4`H35<kH+0-zXI6*28w0 at Aab&%BFV$6474o
zBfpsX(m|ywmnW=ke3ELN-iy;<KwYL7hJ at bi;`H^JX%6)PC+wD^6Zd^)^);%?g10j-
z4P|S)L+RVp-h@<`oqHhOK4c4CL$pfF?+8T4Px~fhHi2BjvM%?Z^uBiYA#N}l{t_fR
zZ$pEnW!wV{n({|FSQJpY7k<e<a*pOjOHBB&acq0(p(UhwiD=^r4tCAg&CGx at bm6d*
zXs91#oHD3B=6Z55;NS?ofC;%s^z7oRy<S>MlZuE>{_I)_auTJc==%>mw3zq_4HqlI
z{zl|G5z^L^M;dt5IdSaV^+>^qzBP7uUpPI>GwJFK<t5c1Lp<KYGtdFK!^X5AHf-ym
z0w^nmIdYB*eF_ia&n&WsNxaw9{1_)(6O~&h@)y^f?HL=1WiXzGEpz0Q{in`X?WMAr
z+%!_~g8JKIoFwNO#6#c0RS~deSjaaCB7|Q&H5$fvUf}KJTH*amL7e|4K41Zgi_gO@
zLw0VqRph#_XojJ{>JqEjwzq0(21)7 at IF`W~vv(638C~%)3syqkj+rYXhk8~4ESszs
zQf{b#iQqLDGzDZi1%)d1r?L;YmiYxpJ#G)%i)P?;o|8x}5&eA=m<8Ev6M#P<uXbnZ
z&_hkU-gz-`>kUgqg1`&&>%xrAL;>#AU#dH{)?kYH<9C;LL)Iz|pbb?PJuPyWqk0}t
zRy*(%M?Wn?^<>amVT`Z_n4P--!PK2`gZLs(LoEx2IV2T023q%)_G{WjEeMGRSaFWs
zBMNpAT~ji>t{ra^KJ7D7jTrjrR{_$QmfYN4|IEh60`6<w=_YDi)!=x;3ptlaMOci_
z3XzgRwxS;VYU(FR=ry5bA|@{nIr)BL6NRi2h1XnA*HF^E0)=TfL<!!gP_1JozYBQX
zeAK?osMoB{GSR2(j1EcyntiDwhb|mUdsVD`uZV`5E$y`P#U6YIrq7;`k(wwP>jQ7*
ztBt6?oEF#`lC(m-#=Nt#2qkjKKAVY;SMyNyZ(mZM!&QO^ze^JZQMUqS7mWr9 at A+6G
zD|=s25><cZkKqhl?{7qzq3GCqHr4KkVj$$>s;2g?k{hk+fqroM5R6Lxg+?qYG71^-
z7C3NbUd7r}*wv-WD5Ps><QUTEo7_eoSUtw2NzSv*`lrT3(AW;&2&-d7=O`EiBB|jK
zikzDPVR*Jh_Vf&t|Iu!%1=D2Z&G90B-`enRS);HJ2FAN#lP!S#Fd&#j)+wu|O_g7n
zv*B`knqLBS7{$I8z+D|1F)_!N{@E1}84?Frqc_F8m&*a{2b<;L+w#7uu0P2Cf#%#e
zY0zM&O7cH|ZKcwzVv+3TEDDPtXYBDmCUY;8U43U3o+n&JFhmt`?0I%#MC!%U!6Pm)
zlhKO3E_BLtU{7pc{6+X8Pbkp1n}ngHp>7HVLV#t=scd9UUedPH{DXhiMP(3MeNXh5
zkHxGg%3!ga=3+thmlg!VH=w$JlYqWqSvx3GDyPIS-`~0s-8KT<#qhUS)n#skF|5*@
z8<(QMJtXMddhN8A01mWe%F}6jpy{;7KzK6P$waObct)TT6txa{rs at rH{atr-PJagv
z;VfouvOR_3D2-vp^wH0oP_yQ~$$o5ie)4SttEvqc)P4e*atY+}uVbovn)&xRo>k2_
zcED(~UTT-vcFt%7Hk8c6-tUuvQY4Lx!<w>f+zWzK4<qu&d|LN)o~7vl4rHgpbwub)
z){%rNY>}c*0secNZky-<Lx^!g5$*(G2p+s~rZRvm$s$x9fYfm_(XETh?0#htu_Go;
z0y}MzJ^m=G=e{Jle1ao>b at d-42f{<w;c?m9gfNWc7i`12JMM8{2t&qp3o9Rbb|?0y
z<(N#B&%q>WQ7rF<g6A&}0mQ=Y(iUc6yX^w(TLj+$vg<t2u7Dm{cQcdf)9ZNGto!8t
z{G%?;hXS>6UuuGZGQxCh7HU9a+eh8>ed3w*7|bQ*!E8caJSqoJcCgw)Yt9}}*(5m&
z8%wg0yPT+=AU^!d at E%?qD4%Isp33;*;&lwk$ha=KmG2vy>wpv{f>Z-x8HoChQc at cN
z;VI4Vw4|v<bat#mbo=ufp1 at 7=ZMBzvkH<i~<=pM}z8ROWfRF!^^ebKPp+y^@tJLB<
zkg8R)(9Ob&NS%Z$a$1wyH0zo0V=yy1erG7(uis>R7x)j#8OOhAf%d9DHIj_x&*X~%
zAc4JsRhrAEZlE53REaIgGz1mv6z;+p)dd|W&&2mi+X-WRxH`y9@!*eCJh`Az7^4-&
zzfBUTXA+c168`&mzpWCYS^%sje#=d`yzwGzIEUG<G_0N-O_r&d;c+8)wP+pw8$=Bu
zn`Fo2pm&!gHsjXg>I!i&8){C>{K!=D{UNFad)B-Fci5E&qfCX|rA_5zxcf*5pe#ha
zJg=S2?|_ at 9jH4;f72~nhfJIYiRBGE at s?6DUSHH}@&z-k#$dsNF=>hj(+^$8dYqm!u
zFE|<YRR9a<+%(qYu>-*4x})Gbll_N?pk-2Tx3B$szL6(sp%fdZYeL8f^+o|h$bq at O
z74Y16vWF3e6Qr^BK<k9XUu9o(?-B2l{Pr-s^vC8Pm?ZX?uCcyPiVJ45eS2G!*<)<w
zG8^4z?@vXnW at ri}V_ at OiNierhdP=}gKZD_{L%;Ic?~f#Ododqefar?sm902 at RXXDg
zt#N0Uu9`G8<9hui>@&HQ6F#Qp>wFuT%h8v5{CblwMvC at RPS4v*dD~fGwi7f7EBf}%
zJmq}BdM3@#hic3k{|h_8e_A^OJ<S(w2(FD1-KP!4G+F(`6;6UV^uWh%uBt_P_Z(?q
z=38&6PZR8f+lpI*pa(bu;^}iXYZyy<<J=YB;lS?$#-Dw~OcKE0e6ct1!T!tW?XA at g
zJJo&Su7)bB at 64pQ22p65I?d6b%u;pqz8pp#Dh~UHnwAj+v!@v9ggzyJeT#WaVZi&D
zl!1lCblZ-J6a+UjL^MC61RuM)C#jORC)Xff13gSq1!LOoM;7G*Zqn>u6N at nDc)w>Q
z8Qd$hsJhv2q-G9uZ!EVT=zeqkURQJ*1WxsitrK3g{(U3PP<2hWkPMc<*^uH;YL=VE
z(;9}5viF6_pn@^kCExe76L!oE>`ae6SeDovP1Xf)C+zK!8{{d at D)rH|vr_klJ^d`K
zF<c7GLRukx;#?L2`B)>}<KnMDIDQ~^+`cqq6!qH7 at +7Y0Y*Ig6Xg+q4uKKPPZ7&l9
zGfU!DqdvjxYWKkwdfxC8DOn=bKcd!-$|~NnX^fwO2;*xwZMwc5Y|)3hkQ+vnbc2*1
z9AMHvC+LQYe=h8aQJq1v_*$gYVwF^I{n1-T0qjXH{$ow4)9YstAEPPjGl4c!<@6G^
z{g+GG;INVo=t8+EnUZYiWgcG8VcZiGTwrsejei|p`A%S3{mLw9I#HSTTD1_S83!*{
z8qK`0-Mn6m)X*GG01bQMiRAr|2tgiQ$Bk^Qy~3o2g1NH_>^#PX{sWl)!C;|NGm2m+
z?jpdniOtRGAjzYtdRws}n1M_F5+fnXGb9q}V49K}JUsXNmIt(g4?ETAXk~^Zil)pG
z;urpsk>g%2iy-~-9t`b&UpN~p78=P%sV#vI{M}v9+=GtO5~|fTpVhL8SxZpDDjlRs
zgZzgE_7Vb);#IKYC;hJJCHka at CH+s3dZGTYi3ycPMp}OG7~U|tqLiQA{X=@qaEF&R
z2v5^U`iW(bR<69xb_l`{&^?EDc~J>}&b6X+Q9j4PmXcU at O(cvhlzG_kUnE5BvddjL
zL^!VZ6|&mO(+#DnuVV=vsUG90;ZLhk+;b>G%3LlkWVIF;)~3I$a8^Y_;O~xJ{H5o<
zG8uJO-?IIa=PibQEl}R_H-JNMuwdhi(}OgZwi*VA^X1~Q(m4$kQf|~-bPWa8vp5x|
z3ySNQ=J_IKwF4C}f03Xb&c|!NgG~QIYS*W?ImQ)X;^QG8j$^)sF|aIR$+G-}L0wEf
zXYV{bGtA4i4_pNpDh0TB7L>yz$Oy05a;e_`p>_d1lmAro`Q<W-2x94DrhijDOrF)Y
znR7BQ<M0Z)d?2f3fRob?&G;ispmWf%U*Zi!lA?XnMPCsds_HhBnc|SfYQ^1Te$1+*
zwoaZSK7*sA=+8Q!PwiuroM%2ACDF!%SreQ&KRzP<Q-y;TKUfy%vvmWek1*`d=DRR3
zy6Wf#1#GbQkh0=Puy;>^l;#?I!A5DYMni*hYxvB#Q0snXdd2%o$QW}5>EpPHSg+i-
zW`7^gGcYV6)$u{VATn`sLCWWB{LhXGCq7Z%I9&a>Hx{|`C7E3pYNcA_D6wn>p9}6Z
zvD}Xn4kPkGmm$f9{|rdMa3)Uva}Nz+$1^goVU7)VpPyl~qGp9!Dm+0IAdVKDdwaL%
zg$T3{j;IYK6+orwx+|jeau<`sfy1`>b8m6rRQ(aEfR{uIF9&LXy1sOlWP_i%yz*8F
zNA&BTJtIUcm;wx<f#w)0A=8IIw3;jaOog#KYD)13BUHgh0)9`Wc3{L-9UwDz=|+7;
z<p_uKDEaS;D-<2ERIO#A$x(|mqQ*NjB#H;#hu{x3d4T46y04?eBRqN9homZ~n<l{u
zQWEefS}(?8G-F-Y#sl;en6~>0TJV9IOiabopI1MT2iQ$%-*YNl6s>H8C at rb04!AoN
zsn%J$D%T#)c;94o at 2aA=(`BvSxkCybUY7hxY)nDK0{ldA&E_=8WS<GLIIj<9 at tf3V
z0|jDUxot8TM at VL+^1INebF584^5F&2W5gQ;@*?JaL!-{(tT08L&r at 7^r}?P1Oh7>p
zgL+Hw^|Vmk*%hSSy^cmZ;z+5zA+PY!VyJ$<woXLL)dZ}ue~v2=^E+Hj$gK|r;1pcF
zXjr;|Q7je3&kk6QJ1yO+kCsVglakLv-Aj?3y;n)&3sXV$e}1AWjT&f6F+1e-47f}g
z(-Rn0 at 15Ht<@g~k!%Z>dKLwnXo;u;DJ8j4O%7U+wd7oRWkDd at Mmz(kQoE2g}fjGX_
z9R=Fk{I10de!5Y91*~{ydXv-4$5RG#ft0);LtH<WO_k3{3WXK|{E|_TRb*CD-`vzR
zlvy8twsDrK`(>^h^s*pSuUM&^RP{&;5$4qVs>%x at W6&wKe#TA}<s(}#9;2_Qp5?O`
zD%z)jI5&Loy7IxC2T>Ibn=z7Hrs`Yb%obeomYkn<sCIZV7)(3>g?Kt7n5mOzEJZy9
z0xV#qm(3BrwD4n;WoqhIdy71zFjNh**ilOXj0mfpyD>Bo!`w`QqgRn=gv5)EId1cE
zKKZ3z6>=O`wrzRu)(1tlngE3WqstX*6FCE%A?t--dc1f-aQt~TW{h!-X_wwe{M4(b
z2^z?tiDmHPGzVO3e;9(-FKFaj1l*QQIY!;i0=14;@6E@>%NM$H<3E4#QiAu%o8fIt
z55t|sfUcyhr#O|-sM=hYpJJrE$>(K@=thQt#UkBi7KouXq~IMUXVuT|br&OfyJY{0
zX340<bcJdAkTl3XpDliQtf7w{<N`g06~3*ihJCq|A#Ux!&<(7kPG{xy1!{iE-vMsE
zH%BW(*6v5wXy(Kzie{eJVGbr^Pd-}Y)MIpR5KC8zZ#RXAx?RC5 at mRjEdfN;inX%^T
zq#J7*^}{1$2<)gcpyS`ltwku`m4Yk7KpiB|rC_=21)!3Lhx`D{jOWEIX#)97Ac!@+
zL+ji!9QDIC$CSF8#xCpc44X5;I~%WhU|-Y;<q8DTdAQP<^|T;cMbxDbl(b3Q&sVHT
zp$hY3qxM=sX43x_(2gl2mvUjQ!*ve08~i}7zgSENo4Pj_`a;~W+$u5OIEXpa*vG)p
zdQc}gUzKD at Vuqz@`Nr{99~v$3*rK6aiHNCr?bpqQ&h(X>+dA(X1jK%l-BrV%HM&UY
z^y&~r at rI+ZNv~$kpUXu#XL?*bt)O05a>!s#tRBEJ5I8VxF7EJmc*{atisxg%mRMbE
z8KkJSK6&2A^nKVHJm|<J9t|py<LFgH at Lt+-$%6-R9>sdQIE*7SWZ1qk$tkrP6hW6F
z>B2(xed01pmj|L>%>;@zU>)KBCW`eE-3jZH2L^1MbC-h}^t+RYU%M#amj)b*2{ZrL
zm)VlIy=Oy(K(!y43g~;I?Hz5eG8lVkE>XCL7z!*n$oap^>$&NF;0w?my1e1<kku(|
z?qay?y`I6&Zi`nFG4Nt-lzk&x9}zL*+Wr-9?6<z^%u{RFH?MZ$^yJWJZ<Ow at lBmmp
zkAJTxo1~#6Ku7}043-bNvsqcCZG2bQfcId?G4Ya1XyZH21%lArc&rl31cZKKOC=Z5
zKY$=me_9w7J^>IVB^BgZ8f6$&=t9N{z at T$YlIm!`ASoC5R-rf4Thfr8ka2%C-0-Ut
zqjHJeztSn+4TdqxH|(V?&2h1BXUau8pCN(+W#IUy_EU;j6#*cha&H0<76`UAN$uVx
zb1j2WC2F065^&E9-BdPoqIns<cxK-6_s*NRLtp?GU55LwXL!#^W57LM*}j(g)^Z?V
zl!P~(TI>pi27SX<{>hd-zu|zMN{o^3!r6IZ<t)2L=8k+u{oW at 3f8v4BdT=-5L5j(_
z7Hc(PZQv|s7HiN`k`c8UorPBM)TY62pz{e|##*2J^($)=7lj*5;s#uylVSmldF)#e
zX#%>UaR~uoh at 9EwZ;86_{vugvDt at Fa62~Y>tU^h+bxll4m;AEkmGHO52~mZAPNcyC
zi4Z;<Swol~yZ_PSG4zu3{WXojS-X*Z<E9=m-X%a#?3)Sq!G6eN*2cHQaJrH}ZX{04
znjQ>b$SQX5#m0(nt~>rkI3sZewW90(7QM$=Pdb<3<V%?v#QZv at yWcmMkDg4axq94q
z*>clEPK0cBGDoOg!6e|JKY*GaW^|XCw+ib9T)p?rEV%OBvue=`9B3h&xb+T#T16rg
z6$>R!!A*|{SF3zJp<=Ca1=a{1Sd1`(WTGhgSXQ?fPo=ts1)dkjDPfm9a9u$ocs}vE
zafl`_7jymOh!xGp>SGR(Yh6)c4_X7d+~~vpXGmCBl~E3}J8}bZ{^Z?Q{L1BXgYOWd
z$?P^`ow=l1QoysqkOxC>rW9 at J<5deqH{sOTHGM|JUZ$w`;B#%W-8OKHkYxF`P5Bu}
z1R8TyU7!jBe1^<tX^t=aVtc1Ghztg{YPp{Nw!g$O*?^GgkpCL^dE;n7_ej=s at A79C
z8oQC<tHyr#&HmNUfCjgtJU%)?H5o?`CC|_4>)wT{|0JHFl-e79TqrsE#<w12kkxEj
zp+uu5-7j;-RJ3bfwW6j^P)g|3cA^=ohClrACB0wW5q7sEXar?IDmb^+tKjjq&)hg<
z&GqdXTo>f5+`@LKy_*dxjTEevTpUqz%Y;|VrvZ3dHBvpo+tN=|UCnaXZLe?QVbk<*
z2P|hCb)SVPqduev2+Zi2;($0ln3%a3*%p<&U)ImmNzIKUiPhUtE!(O9=2K){Vepjp
zfYjsaoNPe at RXd_(Jq(Jvr8bgAA;Qd9<z{9>MlDYhQ*nR6TZIj7P}tb&ZNh2wOASbp
zKdN>R at _mZvKO^PWR{T6l+!0wuZ=?a$Gtx9oJC||<@n1>fjZVoM3(j>iitS&YU6EGk
z)Kkt7)!C7d($}D9PaUGs8t0)A)3U>Oo(7PP`VzP%130d(9-w+Nj379rj6#p-9F{w?
zopGiYsLlAv;(FaztlmV*rDOq7U&pc#onhZyGkk|AXHh|U$F}2`PtT=*a>q^~weq2!
zl*+3 at 8OR_*uOKusA*cggkL7kte$CMnPYgquBjebj=6b#0DVeI at AHiit;p*j1BVJ48
zJAloQdWuw)T(kfnL+ysj!Reens3w|YUUYXG-Ld_ca_=KtZfdveN`Q@!a17H7<`;?)
z1LM~BLs4OyV0x7ej0enikN|WFC&xR0^Ku=0hd at caYufFa;p+J7LB6x5g0YXi-no%5
z-NKE%NVC1uaBQE#qT74mLlt>>j}<#$eH|fXpfS>24sRD|o0Wiw^-Bdm7hM=fFU||L
zE|dZE%ihrP+>Jt!t6HkStRDJ at mjOYspbWlqqkN+WvSu`Nl22>v)SqVgVpN#A*OhLs
zX#i){Y6O%5lR-p|&@_mYJ7)3->Kp4bv;fdX6F8ogH8`buUPI+GB+nP)l!UJtkIA68
zS94?JFcyqWI3Dpz7z~?_PZzsD`ay3qr!cRQ4-#X>=n*g8%UkWYuXml}hEo}O#<pQP
zpV;<_C}>FCh71csQ7%BVRDb<sn~+rWcx{KV`lGugJu8;QFN60xBfZL`5xj(+3Q7 at W
zrI&v9V-sg{9OI;&4^!m{DIvxju0k&QMvoa_7uxQq=3I)kxbKf&>@fr&05|gEQ<~*z
z>J`Z}ThDO0cLA5Z3+YN0!9Fd_^VFx_C(-$V*q1zH5_j$_vtl$fC}1(qJ<smLI*<WM
zUoY=1<gQg*)Ie}A*&tw126H^so|=6pys9rr*F3S20)hhh%8p%RwV><ug(*t?U!#K|
zl?cP;ZA}$<F7G4T8N4&u2^pJ<E=qImv|Q<&ZSNHaUMVI**1BOm44$miX9@(!mo@<*
zHnE#rZ0cL*HAi#hyvis9s=(pJiwP-&T$p$f4EYGq7191Y-6Y5e5OVMScBx-j`At#s
z0*K?OX1=*d#bqMC1Q|8HEm{G!JhRiX3mlZFxxB7j(Mfv8m$K?K)UH6;x4G7V(qUV7
zq8=iKV}IY#bI#57Koiqm_v$t1L)-BQP9#Jl$=c6=AXAr`*f=lYrI!>Fd$Ja<%C#ZK
zzVgQLK5Qe=jZNZeZK9(-FU~qUN7#s&RoIm&$yjAkvMftya at BPM%vFUrNbZ8FA0Dz(
z5fpR-gJaiWr+kkw^G8fT^Zp+xcJsD9(yIz`sb}UQ3wUSmC&hVdu%GR#Qg+yS?rF*y
zq*$i8^%9#nK5wj at JlwL;nKikusTKPH>#xba&T at rs-%Hepd=RPQxVG)}G#{fn79Img
zG8{pbmue~Krz}v02QaI-&)aUJaCuKLkD(4#Mt2P<bOYbeG77#kk>S-0SQUfG^2GY-
zuSzK`wFVbnfC+nzMxN2{?pPwm9R)#SV$!G4 at qu*}mIrzs(_v&G*_cLd=p%=NCPnl8
zL{s)oD+W8epn*sngQ4mDm#Mi`h0?bZa)kDI+pH*aQ6ASB!m&=IN|KGK-OV5H9-^}I
z812xmny{h_c9`uX_QokuPV$C%GykFfNr{Hx+S~LL at 7Jzn<T{KO&Ldac`6D=hICxrD
zb$D&L=?VhZ7`r3$ZMTC{VYw0kEy4GDp5)bI2?rnh#J)_X9rDWY?no<bkVWSy7I0+q
z?*CrQjv4oRUQkD)qJUT#hu4xab;m$CTvw$)5cSS6j~4o_HuC(&)q$|)a1u?Vg^g9N
zwPpo>#2D2fmc^E-4R+qcjx5q`&EG8_uS?6flGatl)}x|M`KpnYP~vE~S`Zw0S^|Vh
z?ak!KLgfn2fcs^*@F75v$+#aJuv4!sG|b&GB*7l8<P+r$iXM at Ts#ot^NnkthsNuz!
z`7N6i`|Zg|{j@<nyO;p(Fk%Z+CW at r@q3kwKI4TS3{10rcW2iAjwE)x>ZyFXLQh8J?
zTvPu(ox1iyfnpfK?~$!&q|=xEs=~=8r+S8nBu%;YbcQl}m-tP8tb3q5_nrj9b2?#w
z@~|fVu5r071Hf(06V}QIUkjd1wJt6oYJFC=nmYPO;#@EhaO-+=V1THxeAK7PaxYJX
ztgD&lD#+3!_(IvqerGde;HjEY(6vSH_jun$Zhx_fsGvQpq-n>{_CfIQ7lf(e_&Osj
ztSC<>R!vs(Z?AI6xSK|c+m?fElR_h5Ki$v=bKdAi6w$tV`bFehBx5Bwm?tuq8Z$+V
z at M(F~w~@6xCgDau_$0I<cvY*be6*%~SQi(>IYJfP7RTG7=lSgY+-Q%UfpL&m*}qtv
z!t#KD!h~)8WVSAHKMz`;aD53=gN432Gb_YdX-;?&^-Jt|8hI%Cm*vU+8X6XF&+ at cA
zqVX0-AL5K#`<JPeDKsuoC|eWT;ke>l5myXcM~l^(QenhNl-vWv6?P3RV!l<WCFbdj
zj;TjH4J}1ATAoibY3y=m&g)l!Ml#4xv9aYVXUGqJTD1?3V$ra&qP4S0+Re|GU=|cg
z*HEa1>3cmnvMIdh3Euc9US}?`k(P<YbDk+G at UbK4kyLImj~?!-i{(&z;R?18v$q@~
zSS=or&mI^Z0Meh{h?Wx5N_ug*f5ARX`lYQl<Y>_^60)c|z)^-<SSz1C>S89$FZ)8p
z9<4(4r)W0B|GWg9m^@8gJ~v9e_uTQF26byXuxjQjoWrH&4h#ve2&{NQnj*`D?M#>R
ztm!AxH>S`@)CSG{mTF+B{E7-sa$~NbNM4THK+=;2R#!rYWX2vFXz42_IY2-nR2VZ6
z64}m7RL&a$-_;mK@~o~6>%s~2{6F_hX at Eo%abvRo21w|#m7JBz>OHrC;){^%srQId
z9fcz+!eWG+`fB*etL67rVz%bD`%2s)rO(zPxxpkW!c4Qe!6A@>NzOc$Wdezg#+Fc4
z1`XIk5?nyHAdcTOptF&zJFQ|m4gXt}y-c9|+0M!9VHuD6Cf4)C#tohoYx&fBGoSyW
z?A45k<o=YRP+zhJggPS_f+(f620tE98)cXKbDGfT^{K{T;WB-!j3vq--Tz)nz8Mf`
zvQu5W!XPw%Lz|+`p!8zC7^P$+0n&d13v)C&Q>Ks-1b839|82ci`SqyQnO^kyASkau
z;}J+Ip2ycVN{Ei1Gqc1O at YK{ZkG=2xZN3Dk<61-Ml!@<$mIwiq)epX9Lylb>c~*Rt
zSUq!@{2At(qLE^;-RIa at nZGdnX7Fi`CR-HeJ{Sr|#5GI5&BuPVKqSWWhCI9X^SWbh
zPsUDs{fM>mj8zs!{#-1sW(ADl3Z!DL00+IhEJW*8`5Osn#X-l&B(KB~^4vL4ORM+_
z>uWon!Z(X(b)9a(-_jR0)QaJJjs|XS at vlF-V-;M6En=YD7IcJ9(b{3`%-GJ<pLNa^
z{{H?ZVfigO9DO&<+PNTXYBkBwMr-MTMvc=KNZbdGy7(}*B2PaBm}GUEu{t@%4WNU>
z^ZDcf%)KV9VQc4fUVyF$8|29vk44zI2cg%#U6(BFa<+ at m<OsBWQS#jBG3^D8?!M*}
zP{9;Zk%N}-&2e#%0%<v90G_v(O1>~fc<hLFPKaC)*^wSNTH<|C`-n@;9;2R~uT$fe
zQZ%tG%bIs8mu=V{Nd3dpT|dzAlal;%?0TId-C?P0ejXMl&4_kFhTtjsi10uLHE5Pa
z!EQ*?2V<ZO`#i8;^>UKCP-DDG7*9o*76fp^Vqdg{ZBD$d#j$=xv?7TCS!;5)%S}q-
zg2B*I>2TjEo%w<MbnbdV8z>(2&iAc%TlIEb5FP<iNn+fyoy_uJ4P~jqj=5gow=d!h
z_!izB>phXfy#65moj{2J!?ifp&rZZ9_E7(yc5rwvXE8K1{hJ`jw6AUpqG%o(FBu+v
z853O0b1wMq+TAgOS(=`8Scw&9N9TsPi%iclLQUwWF?s?T{cPnw9p2Y9uHHZ6uHxL-
zJIJ%R2b?1QtMMh#BLG8UbG2 at W4E^uo*pI&ud7l$y0IAF0%nBT$Kti!2Z)V*YZ+8O{
z<=2)7^igMZhqrBE?9&Y*WmCIxg>$8adNIGlmW)r6Os`{<6k&j8{5#rq>i^XbiyAt3
zk%;om%ZqME{XD}JRw>VEvj{RCOv~u6%PcttS61_T5iC*@!5sHQC`o&=?L(tJ6iasM
zzAn?--^79Y*Q|p+e0ZjCv$8SG7LFCnRUF%QUJo3=9a3M(^J?aLp(;JRJ`@E+Wt#ev
zgY!V@=UE1O=5XZHMOW at C%-GdJY7v?;?0-<L_fv_BIvDe5&92}2llAmU7E;vvj)~hI
zHfAG6b$M0J<|Adlsi+-%YJ$u!?A|cGxWGSXq0%u{rf6&tp}pQfS~V=3fz*lkZmJq8
z!UcTbW3m~56pY_MZ?FNw<byOAr#TtFSnGLXzb3UElCcWld2|kp9df?b2q%mkBq*F^
z^<Cp04}k0%EW8;eYyov~YmVaMl3*PUg|94HL`gYYZsjDs9L*k6(#lpB_AUafnwf7U
zR1YLPTl>$aVUJ*5s at xb8x6&z#UwE|HloC(_gNCp5U7j!ye{{K+Av0D*rwb at mzBB%+
zU99r{3q$TsUT<bu0lrLpKO2L_SUM-DyC<=Td6f=$WtX{hCzRxi5isG7lRtUYu%nrJ
z2tIft8jlNJ3Sf&gGA}BOFHn?ypRDbsGk<g6ht#0 at gQJlGCoj2i$`6Gwyo}$eg2XP-
z=rN{(M+TY_P2cg^c-Om0;yCe#A1O%s;GwUL<_!2z00xX2zBfxZ^Bnz}ax|^hODLYl
zj^BLYj&A5|%1F^JgT<)raCqulfg at ZHuM{9+D2y2BXp-08UQo1licEtn4_6c+ibzDl
zd0|4J1fW;CO at K|pJ|n=>Oy8{*{&O-0{enxRjr~-#NzPM?aI%r)`=pdf!qLP|*oxfH
zz=<}HjKV9fIm0e at U7Hf#6>ZJA>Q at IR_lImrS`soN$h9v}hWb7E;_P)KA5zc~9LtXq
zdA9RWrW!2y2YT#7Gq~76ny6ouVYzXq>>FTt9(h>0M0_N!@j~IjcFs)cD5TmNcfqnT
z`)2xpFxx)pc$sF!+0$#ys7i?=nhvR(vp*74_zb0Xt<MF at AW1snn~&ZFhz6lFTHH7}
zAt3_oRE6fss&Te&e;P8FPGzbgNzf^ts!#B%H`FyUoa+comtO>vZ-gv=!CN-9s5^r+
zpVGf6cC}+6uwMg*^4=k0f#Tz2 at qdmk7u??e*o6jG9+iwWwe7BX0~UDy;Dbu23-Udf
zv+J6$0gf;U*R^zt>f`B3n4I&8_t~>p;Ze+xaye+6dCTH+OXwu5{lF>tGPwSNqjbJ%
zc2)<M^xK>mcyJP2O2U>sJOlePKAh5mbU3H at 5_uYUNRFf-TzQ`v{~NqC=xXl3t!+O5
z0LBY-fLHP#RejdkU9;)P`NkS^v`kdNP4pjEi~m at pw;6w;zcCJGl0*|8@;Vb)V?cBM
z>@^}rD^WF4u+(k|7B{AU)F5KIY7s^#J)wt~yO=f-h#z`Co at PPh(b0OR$3l<?C91~u
z&kA_jA7`<yiK0qW#nk?z&tSYgXP6Jb^Mlyz2!F~>^sfng6c8|e-Rrg8F)X0aQe4*M
zfwU7!Hr=6SSbIaX|D#6b7zbP9%u!g80zMGD>(Di`zgt{s<zAC>^xa_Dhcw at 4d|eZR
zWNPAGjUC{beVz`E1ebcXtHxm?2v*J!BdP_}(nN<$NJJ at b3E-*D3dM)26y at fDxvwtV
zkTu*Gx;gq#38O at j#}pZBUG{A%TL*>gBh5rI<MbV?l+?nurwggx2V(0ul#finW^bmG
z#ugai^7~E6lzF_5+$I=mna5%5lCtC652U5Yitwzq;N_D}yVTebNMO&ww2YDuc_Sc1
z>tjrj)KQMwaflNWr9^@!+$ag)kYnEF?`7vWA&5>~=>2yaS5w;lE0_u1^g8LZY;kCZ
z8ow)y1mf(`0$m(-1Un?weLk0|0(*vf6<)~<l@?2 at 9N}MOUydG4xS9x-6J<4#GS1Kf
zY~ehFoI|Y9)(0^|k3P}t>`%#ERibJqBs)xSw<^1Ro^GDeukwu-JsQqyN4=}^KW&5k
z41V+vsZOD~Beq7%54OM}lbOvQX^!{=i40gey8FCg;~AIoM|*{~gP&(@w&lag;xwM)
zNda3Zr^nh_ at Rm@C%zat at VDB`o*QvQDCy$=Xggk>bhw1#izD1L%sk5y>w*60BPKll-
zBHA?9-+wnQcJ?^_e$qDb1NmRS^I}9M)=%cWn{~&uhUqKCxRs~{`~yPR{zr$c%q#;H
zmjlZ0Hw8iME4bRy{Q7 at w;8A37IZcBwdy;M!lp2Q2B{Hvx_R43y$@|pOgh4jlc|LsS
zB$K!4=6;!ia43qjT-NY|%2{6*t-3f5iJI6*5+}TVP%L<#&szPDVanWGY`sB)v4z`<
zZp^BG^m$7>TQ2 at O$et-)1egJ>Trr>?cZ5+mKw}Al3T1A}_rMX=0J~~5m_HY<4Q#2^
z@`(et_hgc49N~B|>#=Tj5A7{14Iyzm;p}$?62%jbWvV_C+_!C2n)*J5D(sp;L#OOg
zcMh2&)0Koe;It?{(Z6VUs~RBZ`)Fg#DI`DvQZud0f-lU7T>4r59KEsiX?NQ(Z>nkf
z#k!1gVNYSi+KKUdbs8-M05x7}p&+YF#U(4bj;wAg+H&k{Z%<OfL*7jsF-thGS6Zj8
zL05g^SM?GQ9 at 5`b{VSFx8V%wws;^J8(M65-c!v<^{)k3 at dQTQVd*4pv<aKzs6O_3+
zoqdk-o at qupbGH%QL#Uen$4>BUXk^U#uAz4*59e512)7j#c|u{ACPgyt8qR4iPmHV&
z*=`B5>-)Vv-7>+SvxoOjMMKy!o>;MyH*AAsHK(+*K(w05zEX`){X?E)-{3?OHE91P
zR0Z{58ohUWFtps7NaATpg3UAE<@*bI3zIOsk_LLEL=Y+JBUs)4U9krEI(gsL(!i|S
z!>-y2svO1s$e1#YMD}G at 9e&OVjfcTgWPq~B;=mEOaPa!U8YPhDFSmw}D at x!wTv(@y
zCe2)yO(^3<_h3T~Kw9(W)X$?X6Qxg27@~Ni2S3QC#sUzi>iR2Xnt-HVsB|#VpgZ6_
zZVN~7xfEGPiLuO^*^tR0hJ$CCS|qksO(}LMrp&3>&{BSY&XR-Sp&LK?_^YHBw6#=Y
z7brPl$?07BI;0jzL%vc=cj{%aUM?E_I-29ORgdqU=k+c@<Rv at t?UaWA#qB}u%7}ff
zrrjnF5g1V;t1f?Ji(k*ICV}c)h85dW^c1Py7*E3<^?xf*g<KAfT87;0WB;FJJ%pcW
zwp)fZG0=aJlo!MI5RYk7_O*$vxX%I@(2N$GuJ;wR>ZqZ-7bUKpG%mELr*&;N^eDZa
zNhWb|x_R+|xL&_gR!|HHbPm+;L>K+3qFQ5f6a3idSe?nd+~@v|bYJ?Rht&ITY0ldX
ze&V4kz>4p0>PX+;c18JvBgC8DMd(NfFtxPp9B4&$@_vtscLF^;w7PaAevFa>AK>G6
z7Zqeb0+`Own4SAyUSQx$P&oW9oF)3|Xbi?4$IQa#gG at zfc7~o`M%UGNDr(0!HbJ>(
zEx{<S`6pAMQxN>oDhVR0z59)el~wJHEKPzbR>ke}vqmtecc%!rJEe|OCJ1{RSLFeg
zLXf}xFvS3?mQ7QPV*9g{x|*^meX!CohaNC1 at 8X<ct=hH1=QVQhe<HIuFfqBb$<@O<
z*>-Z&aP~<Np at mss#Ic(VzSy<%e#QCs^t0LB0yXpnE2l?IW#PcB-T&uy{>7aVP(<6{
zSYVmVO(FKEyI7{vNlyYk$iHSHv1fLj2{dfBylMz{(a~XMLrK-D{v at FL7@cc`b9ISN
z6mfv4!DJX+SWHf*25p>#Cuy}23sN+ka-d!~m$?Nqtq|}HJeMU5SR+&x?v0KNxb5^&
zLV%v24IhAtzcnXDG at 5C7BLc=eK8b~$t7a!DtwXroF)3AXSHj}-5D+L`g?Gc+syAEZ
zA~mO<eOh?zBo&qUp%aP+bCJCMyQ}TEqRirEzb2{(P&n^u&Jb`G!<o_b8TB^5q`O9V
z7Njy)7!^8bx9?z-457PieDf#no*z~kQHr)2T_u1_z!D$sXBQzN(oT-mgPCDYLT|E?
z3H`eF(D$6yRkZu>Lrxtlhb9BQ)fv^yjm-jiQhySR6d;n5%q++VA)~-k(LH at xYoPR@
zD*d|&Gs5z!fr>GevBX<>?x`u at L$+VKM at LIVK||=zuoNRm+FM0q`G5nAA*{Kt(w`|1
z6lt at U8`>iPu{fiX(?MLxIa(l8F$B^yfAvwywOvcrX?_TAwEI}9wM3BN*T@?BWhK#9
z98a@!&TAElkz8v4a2GQ*a-I5L-q+X1r~7 at -dG8Srw}Y3t5`Wa~#1b8Rna=wWk+vUM
zz0|!yL!T8U;e%G?I~xyk;UQ_d(@&_h$DnV;<}ER7D=P*@_)=pLOAb#vwo>+7e#nKY
zSbi(C3KhiFWz|NAPu<rkoa@}Am^@WpT><ZLE`SWPJZsbREl}a1rsm08hjC>MSG4$c
znDyo0bgK`!{hoL;&YoY at 57j19i%<zndS4%Na!7b-svJ@`CkYnJ%2j%(ZS{0}ZIAt5
zRSqOQjT0B#Dv=7G{zF(S*&=1(x`^tHp13U6jGwrX#=xz)#-+X-r<0OYKubvSUu|=a
z`!)(4RLbLRd*~%rshZ&TAYb_yDV-$vOKwlXIHcn${`((vpTupl#CamXrBfZ~)k1p?
z2fNvM(UkiM8(DrOz6i*GnQ>~cc5xJv4uV5GF?n`;5_E&lHp$#X-XlJfmf0V*PLl)+
zou3!9^Zf*u^s6%iYB|1~ct&Ddm>#p7TqZLOU<gkx2+ekx$YR75G8-j(>)7UIu3DIy
z;sk at iYF`btv_Y%}u#x}Z9%VFddl~^?MrZd{vKQo8meB_McVDv^V$3!+L1NiRL}_bT
zO()0#%HMy$>ixt1t1&z7^ADeJ&@r93EVk+kH6G&Vr<PhNl`ghRk~#$p!Q*BBU|cO5
zt5{tZe&$_|RcwUTxX}4GM*`(b*Dms_|FsbEr&uEQ2hJNp(iN+jphSyzCP>-z^fKxj
zwnlYIp?7(>bcM})Zu}bVamMlE%(*#B#h3nWiF#=)=n>#HAnE`3-^<7je&71Pe$E at t
zg&Ma{S!<+&;Q*anoHrCL1*`67uZX$=tDo<s8)ikghELQzd(TQWD{4c~WD*p8>xNIy
zJxVoKvdF7A82XlOO`koyqRB^@uiBydoFEvcvx-HKA~hapi>0=m(SIbWrMnx<4B_Q2
zXH{h*1Gbx>sx6uYtDXXW$oM=Sd+oBw=OM{5dB?STP$rs9od)At$tXrDXKCEnb%6K5
zBoBYsnv+d1U<>g+aVj8rh{aCRI-7)zJiaMrxn(xh{I at W#Lq2%t$b;CJtM_Wi9-98f
znalgplqYcM({ePgr4f+HJ2{hlrNxnK!Qx2jH at 3|}%I^~@X;CYcnHy)J?*3K|Es233
z#y)x*WUUMOYPNRMB4-^>SYR-)|Ml2DC at 9c+ITX(oW8FK7USIlCA^W=<`D5jzZP`D-
z3|fNQg;EsE!V-Ru>8(Yl^}ivOT*oDChsQ(K;H#nmvI55H!`F~8zkHE02LqsespN$C
z*_1Z?2|ETg!ud*B%bhZek*Q-8s}FfoD<THSwmz(V(vPz4VXXq^*{-}LQc=B|9-IV~
zc)a@#_Eg4l;)R at fJ>0)}n~S)H(mwK2zw8$JETrVu@?qQkr0~Y+@)PT#kB0AitI1oN
zYJT~Vh6PkVUhFPSu7Vo}J?6qaU)-y?|JNz3<x^yg_VlJlJdlDD;<Y(sRoB7IIawcE
zBn;kz!E(#II3lmy#SovA$&xi*IAvzCRY)k`>CoHs2}|&Q*v?|RvZ52>rAg_(OzJwP
zhSvdWerVo<N3{q|HTRv{S}7lPR##W&nZOu*0 at TMgYuUm9d!#j`+O{%JBwOm)`4aH8
zw6P2ei0_<_-&)14MWbR241dT38~*+KmpW_`2Vke;Zjl9{azi9<i0m$2!J@{;;w|Fx
zPLqu6By|y$F11GBSc+kIpUgFHqqD&l6SC2|kdrz;b893>SnZ>I9Dy=&6{z;1Bfb5k
zns?j}Q4hT9V&Iu}d<qR`^9g0Vcl7LwhO>11gSS3}?P%C|$T7S7966?UwZNt1<{8#+
z4y;EIl_|CN=%rN(+N{H(+~&PW&e=dQofd^n_j;I)qhr!qJO<h{>V4fOvF)bJC4b7C
z)=7qFST7=S2KHj9C5rK4r=j=_{~+yNF;et4wcSQ-oph*Jr_jeB at yF{E^53scgJFD~
zRn<+xDG{%S at a@~34H0cQOK7Yl1VZXjO{n7i=mazU-Yi*BZ5T_*&tH9%hw;l;KHJTD
z<n4Y1H0u4emAA`*OcvnBZGk_DqQgIM<2q*gS>R6K<isUM5IVXpsp+nB!mS`1;`RcG
z``xWepgPy}4CaSZN at 2GyFKb(Xd)Y^k#Is6S_NLH<ycqhYS3 at 58wlYLQ4c2V#k-b`A
zIktrWMYVH;kV}D`gv2qmTrqJ*It!*Am<frQ^^C=S^uXJg{`cRF;jB at N<V6Yz3l|h~
zV*R?CcwNKWU{diqeA5_rA`O6p at srFVM8ywQe}4n at 7yLa+T1d#uyks_j%MPudsgozp
zlQV4TQO(0fKp1nR_fL`Ozy{{GKX}AV!Hu}HLd+l*5leoyDrh3U!02%&5jHCpV70%q
z3Q13YKMep7>&d`z)$jdE9E6&sWQ<2XAw6e at p$L>!nh*S=Tl`!1V^gsBBFhLe9Mvx)
z>n8>kxwB6FO<RGy$<MDTdyOJor9+P~LzQ9&^YL5iuQ0E`doY9Lr<BxnHxsJ_I|yX{
zl-It7y`|O}26I;&NI)nHP{|AmoiAlZ>+e1fta-x|p-UM;Myj5muKY>_s^H{R#07>4
z2!{IXztvk6Y1$n;udSyTmrjO){Zj~R9HGI<Z%JZ+{ORJ<I?*6f>QQ>lTOwCgoStKS
zOdtjnf2wiCInO%~yko>zW&F0<W-K4eb{7-Rg~97ZKX!}^y?i-atY4zPHuVVoHgdQy
z{BO%6L;W`;mxbTu<w>`^=aSP<X8kq9)YJDe6>z!W9W7;j6scibk^-)VsXcjYxQn%4
zU9LFCk4sk8<EKgJIrJ36rfT?;0q;G(j4T6K{I2_ at ydVU@Cg(ml8=<IXl^-oqDIfRI
z6hyX}ugT;_&!CAPh9F5xEUD;}i!`uZ9v0DFJUzoocuuS7we#U|O403agqSqRt5+=y
zgssv8T>A*v150pVg5U^L$0y(PsQbxZq9?2Ph^WU>ra8E3%&UAamj%F#Fpg8Czpa}r
z_a*i(@yq4a4$(r+%T#un`bH(|fLnb>-5^k<^K;nnTnLl1yxO>7X}E8O<UmbZXWZrl
z0{O}jbZUF0aZz>_%k(yzDU8G8|6WF9`GI8gS~Ruy6cfGS?ZALiK%N_K6MDRx7pz53
zjc1|2I5}u(^C=swr0enW#@x=blx0=rIyxjr(U(BIz_u-q%aGG6JSRWtZK8sG;8yLd
zeY)%?cd)Hn)+_+gc*jSmec9PVVq|d at TAn*Uxy5vrZl`T}PLFY}%^-iS6*HQE*d4J~
zGtKeSdrhf6#INnWnVTEQxfrCU*32dTYRQk at 4{>soS5CRJoM~au^Ipaps?;3l%ulRb
zG?m|}tM4o~$FScezUbkzjcb?Ef~!LHAIzFw<kFSF2=@wi%|jB`E2I_`QvNFD;J at H2
zF~NFGpVuaiwk=T&UG0HPXCRSvM{NyD{xoc}+NLl8y-c>A)L`;BUg^Z=4|{0>RNLcm
z?5sbDVY5`7DFE1MMSn(x+`b*kSJAgW{gBx;rxVr;M;Qluyn at sdu51a0p`hpxc&K`2
z7EbC^q|l-w)%l^|Mptw5x#*US!)si3IeS<K5a0=pqa)<<CbdaDK!YaK14>wcCIW<i
z@$XKcprEhQo>=ZTsl{Lcp(F|IMJ+*BTMeV##vMru6qYrWlBW-IcMyK)m`*a=sj>-u
zi)jubX94<mo%{x2N3 at mVu;aLMZc=Yf#?6Xq90vru(<PXtxM$4nymP%&MIHESu at J$2
z%}dxzx4nbi^E;u0$UH&I)Xs5$rb*j<6UxLqwq$oZifcO_RNA7y7bv6-p<1h3!OVFw
z>?^o)P3>`Ne^lWg*&IZ2za4IKQ&U>{ndH&gc&V&!DBkqG-IB8n)OJlX!q2^T*Z&z-
z`k<)>+oTUq0Vf&gvhh2N?29V6UY(e&8(|T6^|YR(VWN-^=Y&5Nb4!8TlPQ7xI!8-D
zw4d{aK=a34SaN5OHj|qtaMabWTGj+%30l&qT%#e8fxzUbC$k@@)ic4uBl^wpRyM$P
z`KHji@|`}CE#6`t#mEW{snvAj=ynz6Mc3WC4W=F<`4Sb%Wu{(J2%ZKaX^4-pK1AQ8
z3eYX1cGljSh$}D^lSy7*4Kq<4wi&se3~{pPFq7y45j}Q1IOUp;lPFiSMkq7#UaNZj
z>x}-u^R~sLo<he4GAX`3;J&(RW;!!%Bz+TCYyc|<^VIt~;dy|k9}2h_#>z77REsz}
zcd~SHOY<neX05dkck)S+Eqkpddh7sC-MzlTH^~;7In05u8F at 8Ef9?vdf;$PW%&5w)
z5lU5E6q_M$ds-d=8DP*}*kbQus)bujP{t0IIE69nz0S)LuQb3F?{~{Q<-x$vPWGmI
zw1v=f at iiE>Ea1G%{UdF?-SiM8N;gSgGdff5Z7hq)7x14e?gN3fW*Y()J_X^Y6OK%%
zPm!4+PSpRK6-Bthtwq(veMfT5Qbq~hy0okksYNC0zb+n<6jpx%O&_tA->8nHLa|7H
zK_EL`ym;8lMfiWnH+ZVbkjR9#Bi6gl87fRH<o(#)Cp at sZ&Op#I#}nP=!auDf=74rU
zLF1x3s)1>PWaRU8OL%0VX7G|HXw~7n3i^!uMffKQB7S`qm%-e_Y#xiHyY&V&+b!;3
zn>e{R&`5WSbBPdIK`@<tN<8BYjUzJ<8(9!@E`-{o07S+Az9 at lS3XMTf%Da`r)R3jS
z<6sW3{g&;Agion$6y9$3egfI}9B!9lzE5*Mo{T2!U!sRVOCjjdpy(k&*XmVyq5CxR
zl+(X_I6+l1*@|k;>gX3hTvktY1B7=+#JDc}I>n>jqHZlTqDz2wLouS1?f~N at QBCO`
zsXV6h^g|MsYclAl8xSdiY#kBqf1p|`{NoGs1NdG}Thj-B*z=rul#BB6EVK!7I{=42
zQCd&-0H|KB?udn(>x}yLtL5<49d^~_zNVYa)9=q`j>>?-867SM66v74sBYe>mNBPz
zlX{To>T&E1v4!VCcyuj;cMxvGlzlw@!Nt4q6Dl%fPDKbr8+9TLC)Hn1n6FeJb9CoM
z0sDW$PXR-pNe>mUM$20f#bEJ2#_vx|rf@|qOYGrm{f8bB8a(E&KnFW*<Ku(E^h5T@
zjtKu6HzD6JG;Er*2WtIyTmIxmXG0=eslrBx#PEGIJ6L+jr#+HpdEf@#6*AWHWT7E)
zq-OMs=Tj8pA&8aV_<tsvbQ-bo;4BYVnY{j`>O|%vsE9ISpu)6(0UyAhL~@zvyusko
z6VkiF&A=7CZ76M*Ea&U`k&oXRj3E7EZ@;-EDf10{4XRiMjDEp|Z1A;bCf7|sB+<2p
zT at QSP2kD?I%0l(ZO`8Ei&9Ot*h2Y?+TCn0p1R+H=jGU!5J+as!|C&xxT!~NBy9+?1
z*AmwPx}K*xMWBW3zZSOv3HueG&B63iI#+&)t<V#Ha4{X<0@{Jn4mlhF$&O7E)o>QV
z503Jbtd!vwZD-*4P6BrdVr_t%f<VM5Ub^kWMLudd3e`xOtf!I?&+wzqWPB+ at 1!?~d
zUXVbL9lt9iZUfKVa?58D?i(%J%2>}@n5U<cLh=B<)EUR4-PF-cNyR%|nB%k=ltg2S
zVGw9z0Pp=1rvRuh8aZN#G>K?_9n<!GLC`!+j3@#QBqVbK!!&ZiBREWxEz9gRf|`WE
zy|qeGZhBsosd_Lo?|Dn0CD7N|vc=zQTGCQlA9y4=C1r_hosekAj(TovL5>LOCo7v-
z(S|rQJy_Mo>^K|kkPrp5mwmfuzVMKbv1E%pS+=*^8yxKP>y=>KgHWEX%~|u=L7(J^
zd3LZa4n%g$;u6v0S!H+88Mbdnf9jqV<(PerJVEJfq~=L6K+UCI*d-`alFq}U!ZaUd
zF>ZDPMi<Wy*vub?gN{VX`HHLPaqrWo^8pA|c*ofv4<t{!=4Qe7tUU at v)Q%PvkiiX6
zv$Y_vL^(wbMKJbA=yf~jH73#a?|;<^X427qY&!oyJozo0OU|m!?rdc<PcCCF at 4wET
zGmLkR-^J~e?{S at l{+RmFwaATOFTqq;{P_HX=2ia?H1jpvtXwlT(Q&0VL-ckOo4E1c
zb76v-@>>bQQxG3nf^rCen?diQ&f)&5Kv~^Zjccc+&!vQKCh86z at _CBW!1E4h9OlwL
z9v5x{y-5nz{7&1^D6u>Yfv3#xriM4UXLX&;K?-?DzAHM)-Zm!nN@^GbQPwA*`bJTc
zViHJH>u;rd7RVnjalkA?OAA>KVxqdgHeZi-n*zpoa4(m`Zcj7z5YFnWsJ0q&)Zs;i
z)xb*E#c3BK_cU4m(*|6VrPvgRGYk3+iNbE*E_vxsELmr=ybCow?+zyiGwNj4%0ahx
zz~w9KbhOcJ&tS%|Vp1p at gy>0kPzdT0iK$M9d-K}2Qjgug3?2S66iKmwg3RKCl{yh>
z1xEr^!TfcsY#*)Xg5g|tgyTV|+|A9d<!!!7el)Hat8z>F+t8>XLN+e?yw<=0&#F<!
z(h5*ji?~vaE>9!RA|9W*){<ZSId%@+P1E)OV$jA<*BGpoeoTy8c$?Xd6zerK68$-S
zHnG$m+r-D-fiqi|*ZGa>?u{ose;i|!4bKA}ms8J$A=Omm`yVAXXFooM9fi&1tGD-a
z^?Q;=fYJ?3ScpIw+)L;zF-XfB7>yqI at SvC?(aVU|2UrBYYRsLv*FKV7g$??~r6%bR
z_3B3w+>Db|&>zF>8X64yLa;-?G?4${zJ`4Zd-yOdw<2tJLP!j#mJDQ$jvGwg;JGhw
zqZMj at Hf1r0cR!I&u-x-gx}5wC+b-m##NX_GfDTKsaroh1ySq=V<Dq9+pW9+Tfpzq?
z(8pvjqIsUQhU-@=gjh5bTW6eASNFT3!k3133pGjCRQpmxZOkbnu+=<BEx?=0pIx;7
zKfgWEbZ*41Yo&7hcyou>U!9!PM{BGpNAt*La(b=^>erA|bXp_h2$vX{MOyXxf at O7;
z(yq5yNrVw1i`g>@#}3~}_mhjwe4i9cKFMSWu&B-tGvC^|ZuF|Ilu)zL{{Y2{v0nJD
zH0CT+iJVB+l*e1$sNJp{6QWbjE~cF1_|n?YR$iX&;*4dTD6QlT7}!=tE7Z^e4t5Rm
zb<d11GH>m0<5g)kE57RqTz|8$gILgi$fI9<TRszo&XCQg_!zpXf<J*L)CuS861j{b
z0p{HAW{Icl(ro2hTROr$;_%W*?r$E*fMiWT;qKFM5$sMXGshD5ql`IlLzeIec^U?A
z`Z3~fLJeU63~(G}t{V|WcHF*J8?4b!&#{K&>Ar>>g=pUR>~^IJ%GzQTospcGCYdw{
z5Wy<8ztwVqA<($(;w*>5E4&wXewv64TJoL;KN43pzZ6&}(y~M0$98Yh5LZf%h$IL#
zv>~s72vL_NR)O1|X6D2IA`rA;Vy_thaq~kbrN6j at 3|yVVBd^L2TihOQ7zEl|yhshS
ztK)ldoY&;@-^XU#HpAUj#iBWx$m(IHDnQfS3i6zMLT^&AIXPO-TI<76htha%_OA8{
zqTp<Z9(eDpWG-7X<czVszyi4E2W at OL#c>&t1_o#BimSTWu*nT!@_F^+iVt+5`2uTk
z-}TcUlCRQm0qrgkG at Z~F^>yiG+ at d~(Y~pL$1B{;nBL;1(&(~Q{F3|72UP9&WURPq-
zLCix%gv09_;}G3GRHqM>P-5vtg`|(#)xE7mdUKZrBDv?*Ww?4bwV|*NI#~r~)2XG!
zA-vS~Zj)ds$YD<k at 4FmKO1QM5si?ZWR$jI`ZAVj%VLwNkA^b3AeeW5=HXKYw`Q?wu
z>wG|$p7`bv*HMm4$Q%K6Mxzg$a$~!_BkmGn&+u5uBIG6xdB&JWoHUTZoR)yI2>tD<
z<2t^;?exBf?<|LcQ4oqTjDTyM9u5<nIu4(ctA!K*{8+!EJp*ZbWmi?)@5^Ky5!)Nz
z_%_+#Lh17NlqBsRTnvJsM&8e?i_=V|6HUJL4UKyxZwZ9x4VwkmLLwj=9RL0VA_0BU
zWU=m~I_R`vofN}4j%@5&1c2De&`vB;_wd^P`B#w7&(chC&`{T})cqdtg!boSg{rHE
z*mT$|rSAuV$k>3h63x+0p~;y$es>by8J`Ej9(i at 0@%&*I+j>BlM1$!v$`(1E)1;l(
zrGWh41TrN;HORU0U32hv(JyvC)tPyX2jxadIK6Kl at _Nc@-5<Kv<dasg;lST at DA4cJ
z^WHekI4b!@Toyyqv{cxm^l_Fq&93!DAElz)t$mi4DzWEd&vUS+JA;dp1KxjfMBP#>
zYlQztkX4Y;r`_YYHI at dKc0wm+vj6Q2Gc;yi2(WP=hIr7cB>6(}C_=_TiVw_3p3h)Y
z48ydocVtMz&x2h_lRs}na=Z$0#a^$=r~GSC0Yv)#Z2Y?j5}fS+(E32=BC+sSa&3Ma
zd$?>oz<S`s-cy0Y`a@!kHe5ziNxoj4gmQ<ir`&wS=d4CWl<x&2B#Q5wm}mg}=lp}z
zo|V7wn-2WIl_Kj#Y9(WCr;hocvJw)0X4{YI!`h{nfxDZ=N%J0kZRnQKP6)|Jklt^A
zf=-g#*%v at _SX1Grm=N+tMGcU`eFmF2C2V?#pmej$LVqc`FsiYe+m#<TsgUP^h~;Ok
z-C?-drKK<3cW>uW|D3_-J$7&1GFDX--qQ#}WrP$cQiCV=wYF?m3tRR7#Cq$rsCy#V
zjk|B|I385iQEep5d?m}f<7vtVf@|~rzUxK;)b}$}G9m-l&<5<3^7!DV!n}A|>)2l-
zS~M#z_Ib)#OP2)fm1Grz-q;K{iKzfQ1dSUKaV>qySNWEPCe0uE&PO$7%f0q8J?*QK
zM|WM)TM%qg039hpHt7l at hm%P{Ji8p%d at Shp-j)7M{pTm(a$gea*fPZ8rM=xItQC?v
zB4A8`@759?nLh+mWlYcKR-LjW4;|;e#E|nXISv?nq&Q~g?Mjte`+vKCB;q}vWc at y_
z9o?Hc>rn`dXe6}DLg3*gYA!bBl=NBMPy)^dAqyyOoJ5xSCdOPCf;=${N)Zw at Cg`wm
z7T4PF69Ro`_n#`ib(Ro8Tu{HKkLm$w<NJ!K4z|wIrxOE{6u0|oaIKaBs+CVB4E|MG
zvhgAwy3n1?S}<!Sux`glkdDmn`v5xD9+g#FI+$eV?}et&489{S7Y0-k_E_0sC6h at 1
zwNIYkfMP(#FIRw%h05 at agj*R2x7;n!#8+n&({N$hgziyr2@|bRnpRpag29mFY}@v&
zmG8z1h077P4;{eZ`=e)G?21t$B9s`TYBw2K=pjU)OR}CuM&d{3q|7!Cz7+duWj<SK
zTlp5~lGi<o*ZOEbt2Tg{7>yqEhp&i;Uz~NIJhxc{xvbJslop3ky;#-yU!;4#g-oeE
zQmS1tf at PUBxMhv)bJQfAli||yLeB+f1WKp~OF80S$NwR#uW>#ec_vj=Uk!;lc0O-y
z6^Jx;qY}$5caCIN^dakNFk-@%TJh7+lo at iRbjtZOD$T^KOrrqCv80WG`aA{wg*$Pk
zrV}!t9-9V-UguA%*$;po?SXMt&BZj4R)9$FpKhTj+|t%$sybb~%{p8UO;X}pIfT7-
z|GO{MI+YY%TgtN<2!JWKXy at Nu<&MDo3{QFmd52b<lEA|mxqjiJD6^S8sh}CxDt~})
zh}<O9LgiIL?fIop-+Qj3!AoKxa|IDnj`9lYpEl)BWV?9E-fnfM<zC(SQI{OC2C;dr
z&(aVXNpMS)Trp3&9dL9BG3z8~6^aRBvyX~p+`I5}#22_&%8OMN5OlF_eVqiq>r&&^
zFXpr#bl-rtg9C_S`P8{l{eU_+ZrHQmqt*L}8ZlD_io(3U2f<6Va`nH(keeuMBT=58
zcciU5 at BO3bEilQO%RQq~37yIJsAN$5>yf;P)QD#6C35Q)UcQe!UimfZ3SN~jYJ#$M
zB(?c8T&z*94mf)wRE#*rt<bhoulUn8oJmp)qgB4xt8jlM5OF%p>#~sUv92=Q{}Ly_
zB*T&_WN9uD<*{0t2!mh5zCsT|dkO%kSp?oG<@Wi}Y8&zKt=0GI4u}Viw|w#5-na=6
z4~u1I?P1|w27D4dqepbbJBPXJWP2p0Ovf`ec<ySN=~Y59=!LD9xgapXwj0?20#EFF
z9)Jf}{7yzaAI9tFOFPCK4#Gs<T16QrG`}|rqTA|!sGi7>=I2}YZl=;k(Dw$<=M>(q
zvI$z-zJd#Rm}eaF;MsCeZzTYh0_*p+!Md>N006va0*$>+h>xJP>cZE;6|rJ-5Gw_T
z=j6fewg<>F^k#i8LDynJHhg8KG_^J}!>~*S_Naty?D=rfz;-Y0`|facQMe*a{Rmpe
zoa2DY28)KPm^mJ99xT%=*`++|%M9vlk}OfR8ZNs_7DO=l-sb)jNulcPFXf~Jbu|yF
zPsCl(4D+RT6MEr$uK1FT&RrmXYA#|VoaXF&!f&=4<_u!8Nq=^I-YDmJI3{>_nhruu
zp0f8M`J7)rCdJ&r5#CVsW;NtjW%1-G=T at T$wHDY%R3$&y|BEfyX^@dy79eLS2l~?*
zTG#+`rm8WQ+x7L|?Y}s8F=`B0)&HN3YM~Dab6{&0H92O`7$h7DC3NiSP at 5@2xHAz!
z?LXVk<JShsYzf?w at F<{)x_1A at yblZ#_3v8+#J2sb8aGAlSjK6<9Sa&M5KA_BSS<Rs
z19Hy1w`Sh`_on`vQQ}n5chUj at JPIp3@R1z+buGYB at eoSoAe;-9XcTIE3Q;11?bGhD
zU206qNs-KlNw^)e_!@yM1&?3Z$yIJ9*Sm_1rUt at v=WHoi`4bxgIqLih(T=J<{+~cl
z40vbY3j33mEp*JPnZ7fZ2I1}afMJC~J5c_(MOn~K?hblP365Ub;oKSw!Mq9j=BCE+
zRV)eT$#_s=6+JBA<f;n!+V`xBVmbm`){|WTwP at 2VC1VV3ccL)^buNa_Ivf5MzYxxO
zfBPbL;)bgeBrRfjZ&yNEhFY+$-kr1;9T<d}HuPN?4*m>Iist?#dhdozfS9_<lc6Y^
zU at 7P#M4Ukv=^DP_I$)dFPQ^}gz98DGb};ejCJ_xoDg>%4hsB<0-Aok~SFz_Zy!X6q
zliMYAAP9_KNf=@Cgkj~JII%QEPr;<9Aqs2thuxqW23ZI`VCJqODd)EueMF<zonlDR
z`zY}$KLMw&n$FM&y{{$(Skt!oYSDBC^~Zeo*g4(qw{Kt{%oBs=N#30)+Oy44cl`Cc
zrkYy7(AETzMocE;uri`&MWEbSJ$>8FZ6B&YDSuJ*^(lJ1P&cEowHwZ|7P=Q^r;Os>
zM;vmY?YhWy978k8;lkGoD#Y+2Q^+VW@$RJnmIVDea<FMs-eU>1oY=QQ!&n)<gYGHL
zu2Vjeyen6OLm}c+VgUKa at Zt~u(^P5KDoDCwaWpC|ccQYUO#st_18q}=o?_DBvGPu;
z%-?f}s$`}bV<1g^+Qg>#aOW!=8kP6aMwNEhcA70K(SJMjLw#o&K5M#EkfwG;%<JgV
zQ at UQRG`q^fOUfM6dEZ%x`7YusbhfrR=-l&ze)}rl$KUDh=CZpb*$n$5?~)4yZH$Y;
zvMZCPQ1d=hRWr#I6AI4FokCjnPU;%qaV)i+@#cglD;+>o8(a5T^e71|m{ShNG_3Mw
z;{5F6+;)OkGHoI at b<m6 at Q^47E%)6mOSmCTnFz0-KUfM$(V;uC-Ra{~V4jgLzV2Atp
zO(1ph*PVSQ7_ztaclbyfvll at J`sM%Lk!j<!$h60MvHp3hy#i=HD8uAYQqaE2&dXHC
zjJ4G+LNE#JJ2a(36jlzRVjFyCtryZIn9V_s<|NucUDf-lY at QO%*}s<*zv_jPW;X+7
z%-1v(HJAS&n&+<!EW5-)E%Ihwz|ypKBr1nU?y_ZvL2t8u%n4IKXwAkLKkVexM$RXp
zfPz)VbduXD349&D{$RM8`$#I8BbTc7SY6Jr+A(|UgZasmlFrgGVBt~i-Q+O=!7|Z7
z44czm at kw&vJrjC77_6v8`wD at _$X=0#xZ^+$7JdY9qRA(5i6=v at Q_fq*LENyfW1Q_U
zg*slEIFAh{aiDtThR^9>3(o#)lUl~Id1{!pI!d6>`TpE>dGW#yo5W#`3IWnx0YglL
zpxE1+bkh6yIXOVLt*ssaova%KhRLRHHdC5V&J)cf?m7>?oj-d60oY~?aDIvO?abDM
z_|QF}v!4f(j0hE~jRZ-r3&(aY>X!SbX0TttQMWFFBuayzsVkwDJ<gQb71OjNhfks;
zVU-b(?QK{)$hT4}^uXg~FjJ at Z8&J$B&08%4k1%loSWI|MkLCDk9#~kKqRu`ut7rgB
z4y`-+0&Wkp&N!cOc(A2<B2onVdzmS*`m^Dte9UotS-mlhFIgJpDtaurhP^nj)%))M
zq0r%Xx}t>_Yt<Xhpq35d66xR&P9box-Pd8fh)ZSl2(Nt~K~x<4S!-Du&=j%-WMC5Z
z at r;+a$yO&z3kl$I^pEe7qFtaN`t82gp_#|az4QypZr6|Z&H at hYVWhnY#Q)9d)`2`k
z9~5ziE*BQw5f-64i$|j(terWWk+ldP!4nT5s0f8fFwWxx^l$l<S4z at 4;FA)IT7CH4
zyi(C#1e-S~RZiDP2`Yxa?p#33(>lh)q8zo{Y7w;kzLrF$1~#esYeLA~Vm)`~`&f#*
zT6sdyrwfqI^3i!}tzyP`5o`-veY8yEQrXs8ss2b+b}cH($85g{4YPq_MoW21M}tfx
z2=)%+X)m<S_jUZo-w<vpNE*Us6p}deGw}e}YK0$B)m{_<<f*`P{dvLZCVfGcScNow
z#^^LEFw}oP*qv3rq3R}SG)T3Ky=Oi?X#MjNmvr_|D5#%Ld^M#YIb<QdxuxkW-`7*+
zVF8(BE_{I0Lzn*UsZ6_uuGxcp0uY{~Rw2HF#z#qy6y3%@rV~iel6E79yjR}6t at pJV
z{d4ko&ZI3<ec~Y9f9$45U>uc<7l6-ISs`?}?`KZh!ocR-D8DkS-^I?6WPN=-UJXZ~
zVxPBuPLYlFiEDNpMxECu1DtpRvLIxlk5Ej{-a2>@h$PsSGv&Bo*DIES at WRq;Dbb;s
zH(*hmH;VJ&PmhEic<Tl^3z2_~@}g}kb_bb5W~k`LzJ{~AsY>HA2k|A#cTBsJ=(zYk
zkCnM-i42lhW)BH#W^ah4-gHmcIf&NG`78YiW8 at nD=&`4&DooK%Guzp&pj&iNc1Bq(
z#>=X-nQ`>=!wPAs*~O#ZpXhsoG3tD%+Njq*4%eTV#BGlxvbuvSg+$|SQPJB6E;N6=
zR{D at LWW8uB+I`C#xv9j0T*7KrnASMRuzIM*O#vn#4i_jloCyO>duT3ueb7#^bE=QR
zy>$6*lNJIBLUD~(TF%wDa8E%BSavkl`iLgOkwW at m48nHyMQ`Pg0x+`8WJ|nIf(5+b
z!&Bv&wc+xdG8E9Wuhs}brr#?1CHL<;pg<gq#HcUF3_1PRK^A(k-&y(#=+3wA7olMV
z`?40|((Hjwk#aV8p!P~<JK_K$Da*^qzA&#BGs6$dr-x#DI!sy-msPx7n_DNWt$+_^
z>V2QlcySWs2IQ`E&Tm9lNz`Pm at L_;$yCwD}#1$|zlWB(<##2KGNA{e`2~1b0jj}V*
zq{vb;Ea*Me#5}0xa}0I%CYs>}volu&!kvHW&&&zfSf2SNh=i at hib(!4+g?`J0{(%T
z0$MtpEcX}mAj%brB^fanu5tns%MV$g1{JQI2<hb70S!NI!>bkX!u$D@)hFGjat-Q~
zaZY5bXZ5mQv-+I?m6SZbA-Wmc4_y_(R79;ggy)Li2L%$F?-5%n$V8EtyC|);DP1XL
zO7Mpp9Py8%^<c2 at PGWKq0swka1Q$tdwfJ|n=$w>#w&&q0(t(A!gZ|{VoRNZCIqya-
z$Nw9*(LkwX7xggS<vvZ0AGlA8e4If29ZW3}8<&0hdGLkx;HKHKGBi9V2AiTVpMLX9
zl!+S8)xe`Av+1%CXPJL3XDyEFGsR&v-j{0MDHyMtx2 at R7e0uXS$P&MjTOMVPpZsdl
zIx?!qp^@g1inn?Szngbk0E%g|^PQqPo)7zLX_LmkWEljTVwErEuI9wMg{g7e(PI|Q
zY%jr39{G3i=@RsT1C!~k at hs$KA^#tiI4p!k`G-M8-ZNUs|Er?C7JY-!WMFf{DC}AF
zR=HkjKh2ww${wqgyzR1{U)qmdn|+pr3?%`>DJ0Qcu~L!cV{J$B&Tdj}AvIj!K}^g^
z%LHaO0vTG?yRzsFjrXmw&|`9+Ske$9?N^PqC2f%zBoBe<1#m}am7a4H4ViqaqW0bT
zgBkS4jd^@@vSGz?%l};DjPHK52T$F5jJ5_8gDF>0_y7*C@*5XCXo^hNo_lB~!d5ey
zZ?;57Rc90qJnXLLV_IY^eC>ShocdBVn)Sw)?g9xEuhTA?IyfEOaiSf#8|~VAh0vv3
zp&=m^S&k<1N+qK+4a8Uk2+;0YbI!uOUt4}jW_Y4+MjpLH4 at g@o^AO5m8$2V=+~o{a
zE&-Qz4 at Ml?)IiXKQYgAR5GNnUc3S|?&lqa3m<-O2c#czbLAhfS*UMaMiAsK<dvju)
zAThdsryG)CwQu;hJ;snT-W%-WoCM|_;j|Y4iX;yTdHzFQ*QKg`k+3{@5S$kUGv8#U
zeN$^qvz*TAdq{%jJK<cbf^7Eq6uvIinwHl6BzoJZ_om*q-^$t6 at mUrHt7{ZioJIB;
zFSfkBKboB3da!9jZW;I4xu8hlq{-fng9*%;JqU(0L3wZ+`i+W=PfH^9j3bGHJJi#<
zmzcp7+>0DF at NLQKu_}c(32pYgSET|rFN}>eS6$NM4s at 0LY;%4YJ;oWSCK%v4M}Clv
z4vHm<aH}d}73v at wZh_cF7^FQ2m4@&9O`?Wheq96 at rV1hdI@q`h$pWG+1V&CL9a^ff
zYps~wA5j|2oWypXG*Q5_A=+d11g1oY-XmtqGe^sYH|NpanMQfTnKZ>aK#6jvn1F*5
z4IkPN2e~sCVpBgeP6f at cAZ45)JB(y>BJO&5?uRa_fbJ)2K8U#^Ik~CiHdJiJ14aV^
zw=3ij2kTng5kY%Z=NL?TVEYsQFw?bkgoUzm0MdDoN-N#`ZEl~eLT9)t8Qf9M9wt*2
z!idmizfXO?E^!zg*t6)RWpm<`x3ov0`{!K&luY;51WvBibYOhJ?wB#Ka!=yj#fCFb
zC1Sl0B$!V_=YwqPrTrT}mY7urQ<vODWQfE5;Er%GAbd;K*IQS|!WIw}8E$Peq(ABd
zL=1d`DHjx8X0COa$@qvF5$FT5Xa1vFp)2f}t}Ib>X=)h#fdQ#`jXDMu>=-)NV{!~L
zn4<B^_XVkz-$r`cVfdInPg~IDXW_kz`Fq&cQ?*M};*BQCbL1K5=JYO6o$Wj)=yQQu
zUrt3(R8>wzUqVk(L0>~jUqV$$OhjK)K}TOnPDW2(AUz;-EpBCSbaifJEp2cuZFDy|
zGBRZ`Eiy1MGA&J1H#ssgUqvxrO+iUcUqMqzLtj!)O<z($O<zq<LP<<TUqeGqF*YqS
RFfuYRGBP(YGBYtSG76lYTsZ&$

literal 505558
zcmbTdQ>-vb6ScW*>)p0(+qP}nwr$(CZQHhO<3C?!E at v)go}_wJcUC2R*GZ+Ck)Dx}
zo`as9k)DZ}kre<yKw4fY5+D-b?>_+kLsdjk>3=FJBA^WXzvTZTKmdRM_<#Ta{OtcN
z0P+8~{&)BvK>r2cf0+nH*8jHuj{pGx1L$-7XYv690O(Knzx2Pd|C#;&i~rTHv2y*t
zUhRKI{Z?=Q*Z=hY51NP!f at w(g2hRLQa`O)gkG&+-RxOvaICw$|K1OEUe(d3CvAe&e
zejEJ&NiTUK?aTBeI^YnQ2P562WT}}uw>c;!VcDKi+PMg7%xF>3EhQy9_45z4ZjAt#
z3P#00Y^k<-3~1#F`SL{Cou})}cs%swFE30q#qYGV29#Vtt$vqxK<L5FLt64!_ib-b
ziju1fyNUMU)}uwV-*yhP+>C at M6g2Ty4p4g>+dpe1T<OhGgLe9Bd`Hh at zB8kVc^0ft
zSYqP#5Z*q+!S<zBOqps9!l$@S7Ktelb-cf at fvkbK9}nOVr`}_6)=V(BPEc9Gm~kg0
z*D@%o)VHg-V{X{q%{(gC$-s>Yv=wckvk*zvV**9w-G)TP2KSn&fAub7*kuZlqggJ+
zSmxLPQA}k{cKtU&tb)Wt!-mG3srr^5T_V8g_T{u}1m-8ZO-!pqmi<HORRre}1lE#d
z^m#g5B{{A2ii+9~?8E}{Xoo%iSe=dD3+|h46*_4I@#nj{r2?JX8Bgl_>kn>uaQ3Op
zDB|9<L|O_N4NByFVVjHzUlA=-*g1XMiG_Y~5UhA5;G6|3Yd>pW>I9CW=1SH3`Vl9C
zd-qan+Hh#zQ4 at TM@wum<>Vj9+N}se&vY%WO9Lg>UNF-z;c9!DWL951-IGRDjGhLPv
zD4|l63R__N|Mo?7F5zu-2?##hyoNJ#kGyOrO%WJf`O0eLXM)!R_H<-S3V3bGR at yI^
z{y=9;yY at AJrU3AGfziDD0dL;S;sWGiwI?(-QQd at mXi(S<-GQFiP*P0IneHb?QovVi
z(vo6mOm3|~I$Cv^3z&gIG+JB>%$=~|D4z74B`Dj!JKW4Ag~l~AC-#0?T(=clMyk(q
z_+fsH(Oy_ToK^CNX!PYt>5Uvx%WjA$^~q0lW&LpLeM6-hGy=@0x-g5c<eHH;#kqq;
zkZ*h3O_FV;ecm#dTHDe~;pMt!>95${14vUGsdt|S<k38jqQdoI7<XYHk_1(Ux9ELD
zO?@b3pdahi<}+Rue^pG^F@<0|R237KNsp`1Gyv#M1L7Oyr#rB3e+K|#%rF`#tEULh
ztgYmAd&REXQY_p4G=0xt9F!32qsxxlNJFW%@6ezpG8cj`sdyt_g5d-9ZVdDac=W4b
zx6<DI7<1 at k4#+fdgOP6KNPM?`3yKM;fRnwbg#UfC1ys2q{E at vLban(RhL4KB$&oX(
ztFhn84WLg`@HPJ4qwB_e<SCYK>XOnk-qFWFz6w`fopcBnW<Mf65EB(J7r*=AnE<?y
zjY8=a9_kfImXGD<&~Mj>b6_MZKJ0?Tqg4=mGXDk~@}qxlxmwbYg5P0Di^F#t`t)Xb
zKz!zs4|ufajk;oRpW-jjBO|*F;tCFA0t9<5RrX1g&j)+x%iIx?bwL=h$iDDStq<)G
z`_viqX{?(Y!W!wRj6<tqXMAux&$}o|Lu`qOLlj+T=*C(^Cga6j>UIQ&F7u___BTR>
z$~mE3xiWDfG#9LP!&ew0@{b8}?SHT9JCn1ejbj&9Cdba0F~C22uQRYek4Y at RF}Bz0
zW*ku at joM+qmi*G#=Q0vj)7Alfwt+`oUUBZ-k=38rXpFOL1nljApT1bqqV9w1=_t&<
zK!dDk%%M<zf*sOSV-d(ttHa6U3|{Fe4)#tfLOR-)TWX$mX+P+~^l;bJ-f-yIapv1V
z+<SUu4KAosgO;W(J&*A)+=(53b5lQl>!a5W-f0sM0DUT;TZ^MhW)ONEI-<S#HtG!;
zVKTjY;BNSXsP5*i6$s3@(^j2yKKCIL7 at i);`x5v%saDA9M9Xd7(j;L@$O(YyS67Em
zPyr$8fL+x9mV!Z6W?N<%^&};&ecDgSN(?%0PH)LK9YeZOiOxewwC8Q*)#oWc!c^;l
zV9_lqJ*vBw`|hp|CAz+3tz-6!-nnBzyp0y~N9>p_ at 45@@ttkIy>4JZ1jSC`0Hjb7Z
zSAmdsgRrJ0Nl3oP at npUh6FZ|ctCA86C9l|ib9aD&hG7L;vUY0Q!SsrG-DnQvRqJ->
zI<7_3&ZZ&fH};LW)XRHOgfkEBMXZF19IPn5$8#lMdyqUM44R>UI=pFKsU0PXK+Y2W
zD2C3in3Vy{_dWXvSNkQD9Cc}E3sV^}9C=v4AUHruY~0>3UaZ!DUAos4Kc4QP+6z>L
zK&7r=u>L_^Jy+0>B1(=a(xR9`)(+vpMGsMDzSJo%x23h>SogLgO9t<U3YYg08X33)
zW60*CF_vtxIw_}l at h)ssINMyiMSGly4!(FcqlFw$1i8?Uv_a!mIAB>`|8CPtgKL3Q
z6oDB2!WNW&P}B<F8*<v at gjT(a$CS&G#)0UnQ3;&e^6D3=B>w1y8JVVQltf;OhlAR7
z at ihgyHi8wPHdMGf1R8+fi-dtlfVaAkSr;p<$C<T+Z4it6N!PA(C2JTw{%I<2$$7tQ
zw_`nmGrlQFJBhD`w`B$xzii>}Z#MT>bEMuR838GLqOtvDa_m|4^bY-SJMz)A5h$&b
zEpS490#1p<TH)pE!x?)@$@<k5pa?-bYQ_?-&W*NeB9-+!psQ~#a`Cs9be}_O`ALDy
za7F^_A(!pwRBJQF=oiZ)7r_e&TH+O@*(|q;EL~ZrBFJt9&W>hj{>x2QNpHQw%MhLR
zNRy=(&Y|~E-p<1o>J at k3t5C?0zR0I^-7 at 1WU&CxKxRxP at qry{<*!EF1zOt=>`KZ*-
z at k_I>7>O+>SQ|&Zb6KtmJi$3#$rOmWW0BW$-I-#8<+t4?+d<+}7O1R1EIHv@&v(?N
z5e9=q+infMlRd<M!3Eza8 at F%y!<K6YS`Q>pz4_hl#v%6?WOkf-aM`h3agpAS7&QEs
zf?VSt<r5G^Zb49x0u#<T?z7uS6t*%!2*ifmF1-ybJ4U`WEO5l+kLeZRmfA<Sy5iU5
zky8hF>L*mAVKK>#`CUL?!T_G at 6<k&b>-sCMhj=E3oZD^mF6*^;%UfS^V}4Ff*r7dM
z0W3v<<8XO+69_x~Ugw0}E4a7DHLO9I at E$(>J1CYyWZel55}2T7nB&<uAp5>&Fsjw1
z2P+`EraXUNSCb&G0hkj#2zsa`478XXEgyigy%k?j-B5fz$WwI;F7j`S!>b`&z0bEa
zpVsN_Z9i^rG{(g}SCBJ1Wg at KF1!V)_zK2SmSR#rzf1f!hWvM>t3ZKK%XNoxBIme`4
z|Kpx5HmuHsGF&k$@l3zYr4Z-5i!*}dMH)K|POGPZ$)EG at j$I)_3Gau*_=0B4?{KQ>
zZ4yqNb7Ph-!5(TTq<ovJL`+Nycfd&E<LKw3x0A@;y}&t&)^?;I|H0dDDRU;W64uP4
z@?)n;8+<ytejSccDs2&aUdu3z{v7SYodcV7-Q4`|9`@QRzc?#b;DGSDMGV>F&a~k~
zpLs!RQk%@_O`I1EaI_9v=9DC0N<i5Fi2!nc_s;}qV8Gv|$J2kg-ahR|7Vt#?Ucg^O
zzyExj#jj3RrT#I6cs?|vU|b`<ZHOlhPZnjK at Iyj0@TDitfA9z~2Nk%$XXXOTEUH3N
zmyGmf8hU2yM3$0gptiqYR72UAjL%Odr<F7r9?nXjt>m7VbxUOA9Sz~OPKZ_vbO<4A
z@&+W8$O_~LG0d&M#e at pT)HbAfV%pamkROnkWsv<A at +Sic@4>_MbAaanqFO$$b6bv4
zW!0y at lknDc`xrTZy}*QVk$}RfoNNmuOJe}ssvLqvLH1K=wrD<;);SyF4z at hoR=>Ch
zqS~$Au;^}PmVkl~o;^k$o`lic?+W``q0$|Y;Ge>5wbU)34PFX!0Oe_=-F>=4C=+~f
z(Z6YDs^v9HdzNs{fz*jiEzW at f^vXuta%q{>$8%P&*i1?|_P-4p3hfg>0Sqx0rDL{L
z8Xisa{-zQ#1t-`@)jI=3o35{8^?{?P;EkEnA`8OmH)EcvEZtl8UH at Fe1Sa@$m_jEu
zVsGJmq|s;!0B{0m+ZNVF^vwk8@(0mH`!3ic{>N8Y(lSr@?5JthV{W~Ha;874@%Eme
zmxyBIi($*Rv1;A`@TDZ-A66={xeW32DA4k=g!*Vu<QQ1{iEEk`_WrD{9;6^PH=T($
zEHk!^YEp{@f*HWyf#eL}WalxoHe!NH$Uz;`ym3D82&U=yg+{3x)!|CCO65~=mdUp(
zb<ZUJ-*tN1)umJ7;E^<w+J=PP<=|AGC;f%T>%Q6g>tlLMBk96P)3dCAiSOrJppK4R
zpaU@`)CwW1LCGimCykZn>;hUWvw`Y2x|kJusW5o>QhT`?4E~!}Nhe2xA<O-JqW%rs
zzWi;73Sz~hIDFyN$@L=bcxc?D$pYJ2J*nAdQcV-_mw!mYZ@>{7Ub$H>%+OMllZ2nM
zG?7UEnEv6Y5+)yTfKFk#qq$_b?DqguBg5)<5dZdC7aIEogru at lf(ayN2FVux1baQ3
zGl?43t$aYvm=W(qCc!WZs~8uOQ^(fp%RKS&>gghU*u=CVcACUdvc0a6w-2QvXs$kx
zjGZxwrR+oD2c9ac4Gs9B`$!oWmXq)LDxmOH1Ixr=;`voqY2+<lTgK>QMY9?Mgd;()
z2dK(@4~@-R<9vj<%XKi+wS<|T9csw?Itk^vZ$cu*vG6B{MT9?0vN)^^U%##rGK6ge
zBuuf){v$<%N?qHO5$hn at 7t<5xd+E0|q#)#LpGI!k$dpGLFaU&@6q at J>&4Ta)9kFCm
zn(QceZzRgI8ow2SDrF7h@}v(K<VCZp$>MGYbhfSe+CU{JM2Fg`I%*k64PsG?*?Won
zT}6b+Ep49`R2CxV$2I}r*fs5<0S1Th6D*+BPH+8+h}JZZ{0vp*8qfRv90{=ILy`wt
z1Dj%`|Ep=hjYJlvS3%YiJA4Ey*W;TIA2y9YCvUidqL^I2n#|>(GhA+4;dB$)%vXlS
z`?-aSqFai0Ih)DrMZiEpfxXFzov_M!M}>A!GKqeoQ?xPEy?F-&sp4cl=MA-?(22`E
z;9w}{QA1Z=P}w~xexkoZd0;N&9;yos473Zn-DL6RVRQIM9pNZL-Ab#mLftt}cM_tM
z_YxeuXXq9 at 5y*$J|4~^r-HbweJ^ROrXcu(}vO02`QU*^ei8D2LFs<R16{yZm5tgMq
zjsvzRaYbIm?&W+S)kkER^E9HJ5zHX93Z?RmzXRnm<b7C}4mJdF`b&NPc%q5{ujrId
zHZPKkjg<GJ^8mLkMCo$&K<rsl%*H#z%2W!xbjR59_uX`t6Bjmu=-d- at XyHL&C2vX>
z7=RQw`va7zTMq at RoG0AgRYS<MO02&iJn_B^xb at fumMkAvn~a>p at 0**EmSnx)!kQ1Q
z=BZ>AFS>>k`AWUL1T-<2%I2a5&Slql at ip}c4>&SmUn}UJg|ba#D5am?5S<p*x-61$
zCo(-+`!R&m>+c5|aNUi6D3HP$%G?v(Ws1%1X0Oaxug@#5A1oy4AH$G!oeE2;E6p$8
zj}IAZlwGIl*FOgA+pcq!H%G0x&6XO)3Xy|3eUH4Itrq=py at 76|2EuIl+l;U~c5*|r
zrHf^QeAaSiP3KtbOoTGN8$0G(X1RXCOdPXfRvjAll!1lpO{6M%u2;txRU<3k-(G6v
zUp>Q at GKZBzh0Ga5BCGH=O%xD8v!}5VhKpEsxeFv`wy9*Cn6Bqva%%@S>!$#Qe~Iko
z?Fw5&(FNC%H*j<MJ!j}vlg>9HA at Xmc1{+=w at M%~P8*C3DV45srm?=}ekv4gemlYCc
z96*0l4D at D0yfZJ;U at yOMHk<-MfL~5e`SrV|<LSoQh-a{H`{vts<beuV<B5hYN7v)9
z1DtlzWjivR;k>H7Hpq}?NVi2rZPAHTQWR67f_IwP-XgH at Y`2V3q2^jiQrO(7^kRJ9
zop($GIB)*dr*1(g<y(eX>9tN+(9o1z-03kkZ`@EuQgu+Ced8~8!xU~QMjEdk?EbMy
z;MCc$9R6Zu4yBFXTimNx1gGs8TRLFk!t*r8kC5D4e<x;9TKd3}ECMC>*~(WbGN5p<
z{m-6tThVbU*<u(^E*!65Xu=~8OfqEAr||7l&0hm1SQD~f at M80?OB)JOX$T;;^(Osh
zy0OW8g&iN+EybzTBpmDf;>3m*O at Fhj9V$K*bxo1J4N;!^Dz0L#DgBj&KcS?M9jp>u
z8FYg|T)Eet*?Z0l8osvyEMOcn at 2<zoEzb{<HLZKd8bB;*laZI5V%qI?i(EYZ33SM>
z*w<}#qgSqet~Wq5OxMA1AqF+OpNpEyBLr>$g_w?z|2E`;UVgF=N^aEjWhDX=N0rVY
zF>>(KAHMS95bmxm)f<tn at K5Az%SoL>(liAQ7EmUgC&J?b5|Z at p?TbMFwsCFV{Ck9X
z!dcz{Oih6aKA@}HZIVBK<{x<r{gM+)<lr0=6uGSVj<G}H2Ad_x7DMCeSm5;d3=iZK
z^u^SVX`*@U?uNgo`dX-riOfO$w56t?<ngiUr#+DRwSuIYn_OKgY^ciD#QK at 4<YKe1
zcT;x=j+-E+RxRp-94fQjVhv?pI_ZF+yZ;OwZ5%o?wr=*s9Z>yF at Tg+KAPI(xUYM29
zGhN9?e|<m$a8bc{`uBbSOw(k}E9?f;Hg_x%OzH9FXpw{D_8mx79t-cYOYP!6;Z<fL
zP at 9w^_SS{9#v#Y#>wGhAOZ<UQPmk;OU?SGb$U_eKA){>*g&}7l7yUgKNgOPvIYU#R
z>^Vl<tB`!|#S9BzVw54t)&&ln(^e1~K~;FmPai~D4EmP&9SbGyDLn!^@Q&r}pigQ9
z=K4BJbsVepf6aa0N+=I*vEyEq?#|^GUbGS0!8S}OR<mg`0Sy at s<tKjJ;@kR(Pogiz
zj=~%Q<TB7UEHOic{ihr<_KZbB+NDWUpp9%B`pWZx%L_WWpkiK1Pw%p;mbCyXH%VoC
z$SE7?x*A<0Ad>X)*bdhoQKYvZ8D*r9)ROhm9)%5|spRISmPidq-Gu`a_!bWWX@=3=
z1OA+2=;BBh+k_3=?nmAjr>ZymqGJ%Ogt2JSSo1ap{i}bOpnlHWw>5v|(>Fd%u{}*5
zvE}r|h^MYiTuTM!2rzp`Q;)0XsRkIF7l9UA0<T?^eY=|b0s;^bvO=Y8*>OSA87=&`
zDby(@gcGeyC!cGOuFrLGr)^ZSVbJp3f-RDNOaB7(J6u%S9I_K<82pNjEO(~S1Rw_J
zJZ45sh{NFID>Q%8t)=h#3=$)XkNO=h4_J<yubNEH_s*raHTyUNu{BOcOp-ee{7$k!
z_K8hZ%URl*U%R#Hr7j=}Gm9GfM;mT5h97w=y0K at 1zl*@cOQP1*ZPMY_W!2-i1IPlt
zly}0^Ufv{5sLy08bG*DQ)FAOQjaXu6i4$EPMWJo7Le{ouAkT7vh*|^XbM-w9TGXPY
zG7J&ZOl6h_d7pXBJrhC2N%C)`0qGE8=`p3 at s}VAa41vj{D;r46#DXGaZME)<fA`pS
zV3-dj-Bl`EEi9 at TkdM+rYN%C`W!jGKgEdBZ(?1RvfAY)c)>LI?Kg|1R0}V44x?7rp
z=X_LyvbVkJq7Aa%VvYof%wkQ{EC_-c#ep3<nxK+MOpgE<_aaNVHJ9W$bX2wKv|6We
zB>vD-^)IhceT(~+y5-Duqykw`hx8~?hbAFJ#tfS~Ky|+5wg6>l&15Rr)^5DdRA-nG
zO8_`^Tn&`&3;95Bs$!d3FunV<)xbC+&l`97)TfcWR^uW{hTx6lk^w>bgV;j at aM3y^
zE-`MvK1~X=2Z~i2GwdE%$*}vS!gi85vy^_%C5&A_jZC=N_I>LqmQ|SShn*Z)9xYD@
z%m!3EgF5<v4WP^=_Ln^1FB%@*1iJ!O=AWz at ph#g4*|iOO8>l11e~26=0GYG3*u$G4
ztFCu0Q&6I3ax`FY%W&Ef<uHm|G$ZuQMm3V%dUG<<obk0jSs|W(ut(FRS?Pl!`#TXW
z@#NdpVdHXG?+YaR89=}&T%?sVFD{};1ykMFbZ2`^t=P}{IlIeVc!xoMbJY1S(^<^w
zhXJ8WB7`^P{JOyr4yIwHwv5$1PVm#N^OElDyLo`A6r`)Xux<J$C@{L!j~#!@v}m+R
zoljeh`>#!X3Z8(%Qe?8{h>%Vgfq()RX7H2|SrK!gQvY@@G)F-2P-k3 at IGPr~qIC(V
zZr++6oO=mPxQz)jGMe_OoJx-;MyWwd`VTLUSJL6Q!WhwxM-sEl%CXYh*r2>UCNIr7
zV7nKZ<vU at N^)K9HEjU%BFEZAHI_++1eQ=XL4G=32xBmQ*bYr3Y#)?k1C-0X>Z(Lp{
ztj|^J%dg?fbwe+?ix&&^iStvmHnDa@<uECACOK>!!^(2`{ymcB+PM_Ea9)Fp5qV|F
zVn((4h#}Kgfyv^63DP2Do05hUCCcwQG;hN|mF$+|J3A<*gKG+qj!NTz(fb_O!mBPU
zGbLM6kn#626w9#mWY{qsn1Q3}W^van#>!XiJ_`SC)p0$1NB0Ov8{m at F?l4RTSb at 9#
ztZz~G7_Fv`-5gu&x;@%ccnk&cf;6%dtL|$|Rkn_4B1!nl1jRa>$r>Tj&jBVM4~}0y
zU1m8<DkEy#CE`;sMF|^9fn<&EUb3-v-$sWuxZrAFeLSZx+>s+>#z_I!gXsy3hRH&q
z(X-)vzexitn~`QXrLYRob7KR<$&2+GBiX-4NqL%t%cLr7rLeXH;4sh^$s>XrEC_=|
z&B}Hp?-uXbax*IY>#*)YRg*(VIGbLS8S?|qaOc5!gz9<srZWO5knBF;#3yj98cM4{
z6(Y#3BC_dTW0GYDXF$C>I0#8843u{X#UgqVOo5ADQi=R>@8SqiRW>omaHtN|WCba6
z5#Kd{8GVeJwYRQf>R3yLeJegl!nTPCtvv^d%mX7;O9i)hB=+;jAajZ!hp9T_@%ye_
z_lfgjmx8W;_=}tA>&&`+g*AsU1^?}T&u7YM?0_@*r-653%pbHUpF!QViUtu at B&tzf
zdUXcwtg{Az9-RwoXcV5C3+y9))0tr=zF`?~oAcV0)y at Gm(MbaRdB?9Fo2!?b{n4>S
zDLRuBl1KSSYtD&}m66-ajnin{(emMg*q(ep`NFH8NwDxZ-Ma at 60aZT5w=+$So7W;c
z6Rin$agH{=9-+iwLQ%3jp2KJr{|ts~y&ck9hQo1F?%;Rh+P&f#g}6`wtEIgQW{k@@
zsm4t-m`2`)pb#7(cfYHyp%5__IbJ21NKLeN)bci5nUxV8)|Pc_bc0!d%rhId6?~w#
zgn0gzs0M5fazYM3>Rb6iH?M4f?Z^+}hFLF=zt6BlqWx#dtL1!GA1D5`nH1GsCd$(%
zybc+%>Fxym*rw;43(v1t at THZ0G+WRU4w9&~(Fx+-5}KSlx#GvHbd-EL<Z1SUUhf&$
zr%#u*owc=~3G{?hU1FJI=@&aT3+wwdaI;?Zo!sU?Aj)_X2?{`BMB!$w2u&9jT~wta
zA&kqKU$LsWGJMEU`r!RYX%=IdECDM#eFn?|%Z?tXI>(ZEjqeL`- at z5*zA>DxH;jP@
z2kw%(1W=3xiI*>}9htkUnR2LM$(bSuN4&KuehURBF;Fhx(rKV7-e8`3Tg*Mu^jXEj
zhsyaI`VlXLpz_|ssTd!}vgoI3_y)uQD*$%Jx)wS5E!Qq6l-#l-z_kyGS!CM at Zkhzy
z at hP1JZxlk&R7x;*e`{(ibsA|4b6W>ClhX6(X%2RF7{B~y{R^4^7NCdAD`hKAs0k?X
zY_EkP!N%cCT};v)=SSuev*u0U3G27%?jp%gTg1!3(w^>7X%pt!R%(Zfl8=qVhFJT8
zZ_q7>l at 4zBOJE%(|8=yQb~S~S?gGC9M3(7LfhU#bR3rvNRXnTV&tB(i%Jag`xaxG=
z^p!9yy{CMo`kayEx_3gWlWfA(vS7TZK;Dc00WPmhTh>h}BxN<sJP#_jgwcZAAtY8M
zMB3DS5))E&u6mlCEC!UWcjcpG`n(EUp13nS!cFdPSM!L{rdkTxI*UVjng!$g-YXYv
zuq`OXb at N)s*uc;3HJh+pWHs-hA*Yq%9}`NxS&FA5Yvldv>&NRKLln-W!RXdijLQDI
zXx7`iWqGmtz8&9*3&I8|>#KaK^-n!)pyl>uDzHR~id^-*^fAW at i`2S3Zi1))Riga1
zTeW$HVPp%nB at 1CI4ah`xnMBs=p-A?u?SSG0(pW^f>u^m7pvxyOLAU^@fyFk7Ezz&+
zPAmsP0NT<wymd_tYkBS`c+vws@?axuPL+lDemek)I<OjC)X$NpQS;?UM8ymg(eUeG
zSsC4LzHFci`1Xz)rt5yOV#wszt6dglGPO!GH?+c6ofe`OOy at Ege6ckaO5(_TXShvh
zT(ZribKv<}>#n|6@&sDtp<|9#{Ui_MwGFnTen$GCH8I3Dj`7!G{--&a2-S}2^%>P;
zDLdBUkK#}#5DZ6HLD`x{&0&B)fx~$lp!WhXFikvLC2HFWTmZ)6gKD)jM_Pw+wPXBD
zI}PR)5q}qY-`|yNh{K^EN#%=I{+47$uvnHby`J5ig>ggPev?iUM6gxbqhGQaUxpH!
z6DH1+q;D@!wg at m#zo3!l)%TM*IP4DGzMu0t>%S*G7b~h?o5I}wc-K5H8f{_t22ZDy
zxX|W_XZ4m!gN4uqhe`$jkCXnHjxp2rPH|ynqn2f9uFW}>GklnXp at jOH%SyeJD3wle
z?ERF&Kvy%Ow)25h1a at y)+nn2qc<6er)38g&eqkt@<{klSeo(-lgXK~eo at f)MBOS{F
z5z`8y at cL+<KkJ at e-|WkXWP>Zjl-cf<mz%-;Hn{O_`?+#SRXA<W3GP7s=J_3u=zg7r
z;sU89yIuVIo><1QEAV=ED;4?$Cx?PF)HED at Pf#kFJ^<txROIYgqLz&#<i_oE6Op8B
zQ(O$@0>cK)af894mfT+Y at BKO95LfeMYV6;x((Xrnn_KX%dg3vn2Q<gODTS_p0!P3f
z6)FV6K11%VHNwWc+sDn+&{%H5;6&{qO8fQt{4rt%V`^ggGx#bH8$;K1vvuHQnYXr9
z9qC<F5*Y}Pkxvnes%yYjlYMfm<rH+kE%(qc(>NL`#rk-+%&Z;OqU1udVOU%uW1_89
zRi<c!)2>GQcgo!-s>7){wD(pZE3g&V*tYL9Y<l at j`^GOB=3{7+EhADNfr7hYUDc*p
zTE!TXlarIN5ca?|EAvDewLQh(Zyvc1uwX>-g}g!dYZ}`(wK*D}V#r}Ef5=952IPYG
z7v88az3BpjEL6I(NVfQ53~|&t?H#UJO^Vqc^QBAHgh8H#9sVPkB4;XX&z2~ejtk3K
z9GJF-QO9$VPRZd=vh1tMsD5-~V*Asu;hA7o>qp132k6Gb#GKy8-INQ3urXMb43o}c
z3(58X;)rU4i9<;ek1zrb>KUt+NGsj`4Tolkdx16K)@0MpJb*IgL7?nJLOYnG at b6e|
zy}Jf8<@h=GN2OyfeRsfluy=3cc9pX-I5zLF$1nuv&oYhsiXP3d%+HCTi!A09RDC(5
z#>grMNi-&goAm&_%{UT1(vWf<ptzmi`=NQ6X_z>K!I1_`fX6>dfoK(Ht}^ntj=AL!
zc$W~UpF_hKsBVh=C0$CJp{w<OquXGXsQu&k*;zyWjK;-5YaPz)Ych#BVQNrw?jVXc
zN$I*OOy8;7fto_sFr8;(9 at 13|F(}7hUBXg3h?KMM_;lT1fd#?Zx(?ljx6;bW6VpwB
zsaJcKzs~ab<%<=wj;<8dyx7~dDGup0j&^0B3~vRv*h-W3bgIMzlNo)Abx;<2ZP;~P
zhi^OeX0d_Ld9_}3-Va3IOixua&96gT0v($~GK^DWh<psm{LfI(^R;|dx7`P~*AQD!
z!fG>xa9|7s048p1RuCe&I at 5H;(@jV3(BKKEeig51(62t&%w%>Ao~+QJ1emkB*~}kC
z_PyHnPo9J)Ype|P2r`2ZIehid>R=-t5_LxSSTK{6AGBzTgh;0C7<W5&Wzf{XfA`bB
zSIFpUpwF5Q at nY`otsE?w)>1dn(j<@%yXF?;`%2z#Gpuf at o8DO!zKx$}jJj;bB*EjY
zWpCP#qVuik|89YpWWs)<Lvrb8rwL12!Yi4~oChWr7ZYj~^uZUY)?3_5xas5q`tKi<
zWtntf+`+Qeu}2yEKP2NqV;(|g{0hU_9YnL%!|R<0tT3%w%^j&6y_LgQxEYIX($Rs@
zXwm<WY~b#?+0TUlb%4)+TP4gQcRgI<*&D=*19#7*oSSZDOnG$~YLkU9z9~b!l6us8
zp)uc^B6hJ`sP1)zi`TSsjnG1-xm)DhZfWEKy at WXPu3M6IqlF}EfH|>R`HPU}wdsAj
zV=g#yC7$oOjzg|?ZuGA>>nTl9935`3riV*Uh{e*N73ZO_nugUe&Fca-gv}3x3v&o)
zM^QnX#u2Y|yRH~XteDX6zyP`=1#@<|NLH81*WlFyfT928 at +4k>f~0>bQ!X_ch6>be
zWnpSM3R1^k)7NRuE$fLvG=1$Ox($=bXZT9$gQK6W at F6pnh)y_0nkBi7iMwhm<?8)v
zSiq03CFeR%ZM*O)jz<KiL!q)9nrUvk#H0Y+j=<3d*>l%;)!l+b`==lL%%>Dd>fqi&
zq=R|oCpG}`8hBbFHZ?K|^yCQi?h)SuOJ$NgV|F(!_y_Jk_R;TZ$~R*ajLpZ9`Nsj^
zXBN%w81ZAviw$h)<A at YXR492tId2EkhQgPGmoc*=y=Bb08Vwu0wh~k`Mg%iP73kgY
zcd7)oNX;)@b+HRvD=U$pp^FWLd<Y#2rOBWK!VA84oIwBtMvfaeJ at WR`|J$pyLkHxn
zDs0liw5G&u>Z3-d#Wl*EXcHJ)DzAaH=7~%SWs)~Dd<Ku?ki?A2mf#waaH;-HQzNIX
zD8k6DS1NjQzi`<M=3o>-8mU6HDNR5V7)F8-fT%?EbubtVXC`#sSyVZRt`aBKGi4rw
zXp&Zjzcsw;<v}7XSufdWHwyJ86Fu$@SSpzo5Y_mv75&_iA_&obUnY(Gg>p!HH3b>2
z?X;tI_=`J=;19-5h(vEMcgdquJAY;RQt|PI{|eZWWaEr(g%*4rRu-?Oz7Wu2Y2_6+
zY>P5rtEIW6Hp0ALWHH*=jyQ_UZ{<oUaS|-5XeGPv9Sr8+RdRm<>sMN5Gm$_jdK+M|
zT?X{1cc0JSKOwaw at H*<^Etx~#wV%P$J(R7X+d}$^a!AD*1JTle1j=@<KMgmn%eqPK
z2wk5uID*w~QlX64jXJzbnG8QHeSFsHPIP}bDuS?-2Z;#Oyx)^-t`_HaT#Jr_FZa37
zfXcMAB=awgrBTB&C0$8qaPLu7FRIbp55RVWTmf%MCk+pzBh9Bs{J>ZhEz8q45+axq
ziJ0NV93iz;rv$~-P=lsRgp}j`4Rbs+_vjwt%c8 at M-9{R<GVtN%@aI)gydK)vY7+o}
zhkM06-Js$H&kt5jt3jAtvBnmgE5oU|wv$nJZ!MCMYAD0UBdr`NuKH9m_QPO#R3Iw5
zzV~2hsCiXW5n#&{UIo5qwE(_-f1eDTV{xAC&Wj(d=iE(>C&XhZH&a#=67O at GzHX-P
z9+F>=#3v!HIJ=U;uUm)Y$&e|y{X(z~Rml#FM?(&38g8f#$lMJ>(_hpI*ZnXX*>z=Y
zz8oAzqA!WOB~MdRZh;b`N)@=k*Vq0k#PM?>&)+%EWXppW<wYEDj8_U)71wnO&74>+
zvO<(O8VpTU?%)_f9uo;#Do5Ik2Gtja!Qkm*VdpqC@?X}oS_83!lUb>bdU-OL1}F{}
zY at 6;<mNVggzbS^JaTolg^}A~SUOHp?rQfNFk~xa9qXigYW*^(K*4r=4YhBUj4B<V+
z=Q<|)3WjEm_ZJ?**E>sXuoCh$sfIa1B#OL3OS;gov=)J1qt$MZp`5{h%?rr5H92;H
z7AYHD+J}7VhdcGCAe|7-x at A|RU-G3&9Kn&HxG&`aKQn-buVt~9uL{lNZ>$7D(e-o{
z5dzYrBbJxd<MM}DY at AUxQq?1v4iC2B?-*7+l5!Qy#N1ja7^C%uuM2E$@Ye3qI+D7Y
z46ptXW}B1gnTv&6cXl!3M?{_)gwW3Y=Ap2iTKzt9SwfjRJ|5E0<C-cXCzbginJ&Mo
zZ9WuygVFus%PlollPBSt5*gK3xgiiP(eYY^<}C8M%f?l*JegN=i)@Te7X*D#K(Gxq
z at RP_L@#)xvx_1<yKTq6s0Rf at qlKl#K?_mn#zX9EUH<m}$h%x3HJSMJ_Rk>D;X3`nW
zdJO8uNzDXkIjj_oT9lFe!8fy~^Jza-c|I)7o48%UZu*vvd!klDPKL+i#C6e25h;`S
z-FiTKe51Q3*9;i!yF4cP8ZEk%=NJBlzAJBCd70Q&9EwS`O%9otmF-WLvfeP<E6d0S
ze&8z01};Ck1j!N%i!pdD%^F^xkf%a%eautzp?taJhoz*wz{Hq>dt|x=SO-k=u^CL=
z%^0F6A{507|Ek%WNE&-4YUcvoP*+~$60Rge1z#=OE#w_h?lc3?6p83|P`V8e$gl}i
z7V(O*s at 1ekR<Mi2nwx8sAj%`($=G1qjQKU1o{GZzsNshFsF6zC974Zzq}m8r87fJd
z0TK?YQN;F&3#!#LbQ9ridZG6O;crqrLfSr_TOlnu;Y~1Sh>Nw&HMfW5gWXo`7N6Q_
zPP_`_hA*#pjz_ZXY*ZzjaWFU&l+9wWJbyTW at aJYKW*o80NU$=vSmB)Q)*fG9%=@TI
zdiLb}tB2uvEe~5N>s)@Lo`qo%1mW=xdJ$>7I7QsoDn1d$*B-EKS*OAvsQH1b<*8Jl
z9LE`>zrNLhlqD1^Bk&d*7k at 1mtc@FQ{MNOwzGmk=2=2oWraKbZk|EdwSE at Ol7g3-V
z%F{jl&*9o080;i2ps&ZFY2Uw|hWCxEcG#I at Ks2#*yZN(3h+wf==iwK8shqvqp>gv#
zO>Q(XQy{?8NJpIPw^_(5(B0w(2jbKi;JifZkwB&$kKQKNv6|WhSbh|)@ZKX5EMTD>
z01gV=TKM-w-8<xSb#cIFKIFXqRWmr0dl1SFWWegnbvTA at y6U|e!r;BWU%M+7$HMb(
z)+5Rd^$he<KT^&6r2)sXV|ITy#cgpgG!e}ViBMj!v at YkCmSSYc+o;+PvcP$B1Sax^
zid86 at N5R`&?e?tF=-~k-k$Qd;u_z+J=5s!^gm^n8B?1QuhlF3hyD}fQKgfc)?T3Aw
z0vN0|Xq4JpTbidwP<S96f_ at PKL<KYY%Gd*0rtR-;JoBXN&o8rr`JgAs6xje283^VQ
zPn{ToV&u&6Hy`DC<uxf2ckKouc~3om6rK;<6^BHkdNcbYRRv!v<sgnn29bJy9=q>4
zTI})pHn1)k6iG=k$aGuRyXoZ3)B)o(?q?1Gw at TJ+P<=A=))cni9Ff$U;)nbTiTT5+
zCOe6u8Zpb!0zGlDT2p>u(+cbNKhP!N72rooh2-oNrM%TM4oPAuVO0|WGb!Yuwww_&
z585KpGcMM7;+TyBMm4=aNsy&D71wD+LTZ%Oy>B><#;u+r<Htu?+Iat!>IKZgQ9Q9h
zMFkRhED0uBU`KMKqnZoHFuG>HEnSh|Kg7>jExRqP%#YLtCi}atB>e=cMbvwRfxksp
ztmX&5Z4azJCx_{i=%#p}AQ&1#>GNi9dK&sf+fcQg%XNCz|EwWjld?wt9h;O!nY~5L
zxh=m`e)N*N2-9EY6oY1EQ7&%<iynSpm^E)1JA>d(P)(@7k=iu+E2E8RJH7aeEDyS4
zq56?5&NJ+?4^NOga6OERe)T-z4_m^;<HdpVy-c3?0ysykX(g}@Q<`#Otq#JJ`l;+C
ze#2PmW(L40YL~)Af|0q`f`Xy~bORS^4iVSUy-nY<^bx$eh_}#)lGH2jiz`KMLW#_&
zoKA&yzz8R>IAhKgE`vE;dy2hH%a1F6Uikid4-Bn06mSb)=$HN at YRqv8+#XwVF7jYa
zeiDx=ISt2;LCQz~OoL-X$^L)?fkIV?qDGipJXsC-6+`k#vygb|J2-!xJTDlf)k-VI
zmMpE42iRj4%pzl{Dkea2T+cw#V0+C7g^jxfW^PM^K#o~~hut|XJu!P{!3JSPC>u$4
z?)UB-Zv<gEvTlt<ktr{!lFYAt1aLasgOqy*3tl0OQg%yGlLXL6%o6Q!T&(cZHYI7B
zs$s>wN8%S5bUKU8d&KO*-oi^f&4!9ayLT*^GC&s+#Qyqra at Hv_gs&6`$sbS~v!CaM
zz;kdB^{tR`p$kz5h6B<hLQV^-?kTsUMjTa^FJDu;P0i;r(2iQGSAQTw2Bw6Rd)C+*
z8`zX_w}s`Jtlf*q6RHuV5In~%NyBgc{y}Eh2MA%x#$D9bc>l6`U(5sq^nSd9j=jr!
z_roeeh^?w)AZrOJ(x|9RhyZDJWgElhzCEy;%<>zhsMSYRNurRX<`Zg1sS`YuuvK#(
zM#A?}hC<njKsZ!QZhxeQKYI(xs*np8c>$Fl<yciKsy=)sLo)l}8DP?$d3cu{?u8Fc
zrDum0V?}_(`5VaNU=nXYuE`b1Dw;tIwm=}tBEQe%$X0?0%%BZ5m3Fc)G(sVWb8`ZF
z(V;Is;052l^q&DPvs>^W`X+`N(agMc+cfbAM?<=u9>OQsX4%l-&Y$HiAc;(c(%jUn
zXOj9OHQhM6 at Lwj=kp3pmsS;3yWhETf8~|p9R>?`1j2gN_?7ox3U_Ah(XKqN7m`4-M
zjNre)`^<Qn#u<F+N1b=wIk~wmfU1z`Y!-9XMvbj}(Ikg(C&bO4=?C`yDn3woa}|~R
zMj0_pRbxNoAI3(dZ!7&NHu$C*4?Kz|Nk7I~E!iT^Kqij9UWaVILS<8HdHIp_2Vadw
z%2e~FgHMU8EnWLzlG#r?P)#?vbf^%bk4<!<e%BJ_L{8<{*^5I8 at 29{Y+o0r2pq#S_
zF(Tv7Ms*G=bu0Fe?=|2JYjReEBA<UBqdk=ylSw2#bR43-3$)F#O2DdOeA)4eM>5tR
zo!eup-wF2+0T3(LY`F_mOi4yNbIA7pl>H=H#l5qEdfxcs#a)SqK<BG=GqDfnZ9*X5
z8}`?~x7tpjHlItBIU`>%9G*&!Bx;x%#huKSrz+QqjUwIE*APw=m*MAP&!r|HZl^Xp
zUS$*KKt{7YX!O6EL~!{|)Y~wXBm?&*Un+r6s+G>$Ugo43wBB`_n12s={6R(X&f&m4
z6gh=No8aC|=ZZq(@TOJ<{c`k2S9MpDMfzJVZFrI~4e#mLs@<z*;mibe3&318k at 8&S
zv|&N#keh5{KtSx=7$M;heq)gnoZUCw6B at 8WClaCzvG5HBSo+dIVN%6=KhOTjR2WDw
zLyA9Rt-$(OEFYA^&Yb?%l}7AUT-df;K)Y_!1%0XQuJRzvr~7Gl&WnbOY49AL6dov&
zHYd<)R!g{6k#9o)=h+c_dg?rAef_?4C-8$R{gq}va9=6g^&uUBTaj{p|63r#k2Kyz
zNSSw=V*|C~NX~SaH$kSsLBS~crh6T|Bs*f=M6Ecv at T0m@T-I~$hU0p8)!xPQ1}{j3
zEw47Qn**4mRXWxb-}}1Qt7Qk1JLT05vuNK>lA4Hx)3$KK6bt{S+DnM at GUAo1J+HQH
zl8uE*Ou1$krboUx3%#t*DM}Z(mPPiv=FOSv1Op`588w8-Gv_KhI7(o<w)1Z>hRRvW
zk$0{J_tA5(5B768tvWsi=XdR&+vM>TFS+R(u8<r{z8(8WQN5Wb!W}kT^|smxQ-8x^
zOOHx;V&kZ&3mRSrzekuS6G`Vvw7b61<pB-}dVpt5HNp578DRADTsbV{&qI=(7R+|R
z1Euk3wig45H6O&qtgM~I*Trd>BGUB-rf(XpAMCIHqXVWSJhopSRU+28*%E!zFTq<@
z%X)~uW!>FCwxh<ON1mfC_wK=8!C~h^3*@Fo)-TUX#3HNHp=%X_viBkI%vc`T(fmkf
z!-x;nf&>{na>C&HD}!~sx74oGC6|kv8C(<n8nKko^!2?kxp(X0olf3xR}p_KwY1Y-
zYMdOmH_&vXSTgtwKI`qi;eog{Zgx)nF6$DdQCkBwq#%zz>dCd)RUDhB1q at C_R$0bn
zk6vf}AWC1r-?)`teFKAy9wizp!hD;*8G++hk`~8tlhxUzu-V|wqH9rPZ^k9naHu(d
z%+W~{nLrPH1<J~L at Vfj_mFHUnXs5CcTSQ?N<A)SjmKz7;&dGR#xF=tzxWD3lHHi9(
zbZGvz-$6;iQss?DOtn at s^miI+V=_FuJXF+5+D8Us2-kHZs;yOk73o~t0 at Z^}p1G_a
zq%##@V8JG1i)Wy84EH;)#Eun~Kj{_Em at bJJglgj-v6Y>j>zF{APUS(~;UtDBi)qmg
zms5(KbNcN}_PBzu&7 at 377DWl{IoqUBPA<FynsF89eG~D+gqE1YAtQ$I<-rU7rVqVO
zP``O*72%Yp!jhJ8IgukK+z}4#SPB~bP7%A&*J%1^6Nuo?(=D7stGto0pPaot3li9u
zGXqb(?UZgieB?Mbg+b{i%Rmx%*lM7xopsvK0~|)dh-f)IHMG<#p=!L()eldLz4GVh
zEBK{j#qVH^oPM$L at P>Ddi_GF{izYFAO;B?Kh1Y*`lf(ohQC<WDpr?za$>i6|9UP84
zn{6>;(<0K4kK3ongs7%EM1n<Nu4i*^j^Z?`LR9uH4Yk*7FsJfyc%VTgye=zzA4y#%
zXXJsxZsT_2UMy>+`CX$4cFZXsjU323$iF1v)~#!WrN<rgfQ*Hd at 5U!>CpPpbKH5R(
zbN|?6=@%Z<h`yw({B{$|ELoV+6*UWLlLj-`_l(1L;cWd{AwD!DEKdi~p?)GCYUVDk
zQQuv9+WNbeixW3tdJ1OK7`KxwhB<P}$1X at GNsB2@7!1v--_K<4n1dJy{rI0u4)Z!c
zLPAP!b&tYaW4B$~_!VCQnskD|o6rOY3C`0bA!^5PR86~n6e-wY=XuIf_cVI}zf}q7
zWZY&*5D6k7#e*#PoiF=+UHjTqtZ=%jO|JXLCq+TGM#}q_(=q!#pnFBczKIZ@^~ca7
zZW}@J_GwH3)11c_w*aS}N*G7%!o|nq59R0zQ^vW?y7a#*tI)3h>^b<}K5&V^jE1m&
ze4S_76MedoDBTH0nQmua8^PIi>@VBWR{2DkrQ1~qWl-VcUrT|I0c`n?Ghva|HU?I{
zZxSml;W^7-M{vd)lfF7sgcPOsnK7bubvnR&iq5$$CqsT{uE96pEs*r$Hh}P%Rcy3R
zNN%9Dex4vHb?OTY0M0Y;r8<>tkgYKqBd at P5sG79cnm!F at s_ssQ^k(Gf4QFcfcN=2G
z;U)C5;zBG?TGrv7|N9S6R<=%tyUif=p!Px`kzd at i@G$3Ao_?rF&{iR=q#WmMtHA4*
zHt*!hlYTYWJWz4`)^2^(23dVPQtkYrn>zZ>OD$}QO6&t?ukGi{5x(fwKMP;jl`gBU
z8IcpU9hyNG5=MG)yU at P)TRCcfFo&&y@&(wBH%UY){3sHbg!J##k*hRT6`n_2il9_v
zsmAJ1oGcIRn(KZUj&|HxP)u-TCR3jOSzV=>T>dh$uU__oJ;dRdML)-(O}|C^q6XzW
z-)K#S10{A<J=u`=UT73so-Z6;VDh=kbW8CvrFCoiCgX)_=HzP;LuqzmXn6GX=Wc%!
zjQvq=AI_d}%@ToZIuT;}Gd+HTU<>&vrh at 4Tzl6)3N(~#prnjHm3N?>4+FZ~VSuSoe
z2klO~Y#-pb_O($Y?^>*GWt36f at aFCBpT3~KzSLuqCn#Y?ObRo{TeN#NNNxM_Pb|}y
zq77Q6RJ1f-!i<S3?i7~y#`BO1`GD+7eYcr*SJ_u4Fz19W5I~8A6b<S{jT{+zd3PSp
zWjD^aup`DsvxB}-6%?^Q at qQAIj|{*Q=x)x`G=jbU1DHYKuo6pDlaEO~ft|mnD6heD
z1RWO#b@~=llw*xu33|5kbiagIXb-<#oB6_)3^693XUl!wcYA8DsDJtXLQ2dI3SWeT
z>o at U~#I;m*-t<G;D=h>+%@qr$;?9Owdc(E+MSj0v8o<aTwjk*hdqwV(h1=3POdX=w
z!aZR!i-)Pf`t{_;J*@%)5#dSO((P0P at Ceq+j?&TKU_<$ZV1*(}{t>K#?0g1$kYIAp
zoVMIe75vJ%MYE_)7;*qW)guQ_=oM;Kge1s;l_+Ip#1KG%PDXY{-wPJo=*?>7(AD;E
zv+1 at cTfa(%iZCx;e(LMCMH08YUOp|3=4i?Q3G*bS^-{vKJ`y581h$a5m!0*SbKRrw
zZIjR&DF4*sUWA;0t&oJpW*G8&@t*3_>CQ%UWl-)NAkNt3fgj2rB%rWClRN^IAyMt-
zRnamkW+3z at 2fhG0!;ND0_>(uFg6 at h{l&HY>Ieq|<V4610eXOGBF}Y+n`0w(*o5FZ>
z2=x-_OXDrzNT9r{{=0|pQAke{u?8xrZ5`L=<fBp7d4jk$+=2XNzH9{F4v19DXp|kc
zbw7QtK1r at oy}V$!XKGnM;%gfefvg5Li^leQ|34i^90Q}+O_AYHC_zM;v6QNyH2S;C
zd3_MgL6CnSLI|?~FR6V>P#m-FCWWH4kq?T<ib@#s;ReT#7UyDd*pF_bzLSG(z+vXv
zm+`G9N!clD{jdT{R(AtO`TQKEf51wRNzmT-TS!_aS?lvo++yKSOH~%=UIP1+eAD$m
ziXQ at 8h<u{ev*3nHqi4{y7^Yh|*w|ooI8 at 5j-Eg<1)Wz#fIRCgY;QXyos6bPjEOwCS
z1`sp#lXpFw!0h?FqJ6){+P<)Op2T-eDDX at X{N3sM_}@TT4|gVVF$c7h{fZmwyaT$L
z^%VH9p2&pWxgvAVf+-StvVDBrYHMY=0MD(M!Sp>R3Rq5+W><EKWZcU3&yX196RFl>
zW~QaRCAjccpM4F;BJtIAi?U3zxgMN8rbg0~4|{TL?F36Kf)~;b(x8nudz6G_(oW;!
zNeG46d!nr=2?wXOTna$fFzlVXN9=gmvWdPVPRx}@R0*Vv-ohz3(}*+Pv6P&3jZg5=
zsuEX(wnAAs=FndAGvMJ at pZZ1G!3)Rut!u#sF7MwZlqV*OAh at H}NP8`;04`%Gg;HY!
zs!VIt7ox)^3?}eCNj-s?0N$yADh;nt5xu00W%a{=s(kW5&KI=$Cn<sbA;~r7eT+W_
z;UE}C8OTJ~qA0!`+)Tg4g!P>lf=zW6SBDtMyk*dyc$&9F1s;Q>so5j=F at lA9;Ka8G
zD|TkT=niaZ`bofVD?7-o13x1gTX$kgQUEXBzk}?QA%azmGg{xN#m4}Nv0c@?upX$k
zYyO<UK+#~$xKrD)T9RZn!*i~@k{XWi7h#T@;@%F}bAs*Xh(QBjBkr`8vZdBDL=zGP
zKe$*hXukSDynC&HlUuXkW||MgoPF0|?>2cE6;WNez4jDcVR;79-okVcaBj>XV$W=B
z{0y%KldE%s3TmXF^n|`HPq9tHYIBh<pVq*8n!)1UY`4Tlm<0Y003|@$zm=nX1lP=#
zQA+n6BwVQAx83Thp$Iu2=G6 at M))ZvW<bV87fT7PKYw2dG%Bs$Xx$$q#{k8T&V#=Fy
zxnbueO;^{vtUe5e%I=MGPbPLQGd-MXOk;G at dXNx7OK<l2Hvl(*6mCT*JMazP73?wM
zAEdr76Mr)eG5*sRX^@IvD9u7E1DS60_M9EmNOKQihgpv1 at 4t$|bkaYGG>KoAth!Bb
z-fdLug&7^ll{>0*eXeaL+~03)v{G?rv}BO~g%7zoQ({11n^EAix~q?)3n!S>rJ*Un
zvAOOB**V<8NkJbFe0jNtk<BY<2*rC3X*<{qI#ka~CLm?lHxF5}^dD{htrHEYD;)Ib
za5KM#%*^e)v}w7$O9O^??0Vojd(7gttQ`@Q=+Ogv5~ZToS0^g9gtu`;;90H`^K&pf
z{4Ar0nRG37WDce%`@?OLF9LK2XkPn$UCqw at 8siiF-12*X%k?@QbEGwvwpal|Y$5&C
z`EUS;!#=N1D(dFolG~@RH&jSlF?ZDnYrZ1cqXag<<FU7`K4^c$K?))t%=QX6_rZ<_
z*r74TZctcJ^jD%`D1lza8|$lN%gN`)&7yE;{3ywhzM?uptic2o5nA at 2%RN257|<Vg
z>7v`P_*FpQctcuiHjTQ?Q+5Hv1oPve-?$@+Q1Y3tJ^M0=+>?RX7&nA=`gWLZa&D}N
zcn at U(VeF)x_4|T_eGFUf!WE0u8lIeuz98ds67y;~rWlY9KdwWo4Xxa<J^~sQ$i?x$
z^?!!qoVpYK1cGE#gW=6|{H%>GTZo$^YcsE*1Fk6nDYvtZ!sqVJ(<3RL$F{*h^WjVS
zd3*yW6KwzF%NC>F{}T<rwNY_)5%KmA(w-x10TIkDwrK?H!N4Fd8<iwyV+HP#CoI;~
zRTd->Cul4tfoZ`a^5A61DV)SUUxxdSaz?5Q(4B5*al+Z3!EVr2Q-7_7;Ep(9VzQ}L
z8}dE2{LUV_+hy8$k4VwSp%=bz9F$07Q4)>lx%5 at jKYQV6JW$Gm@*0j#-i#AY<c(g;
zsF#xHRDP+es6(^)Q{jt!D*K`Ue7oM<p4~XSye23g4c!d`L-|if2|Oggae><&>MH;G
z5e2?1Oav&q$y(GG(}c2=JW{8&=^G*wHE6fLqKx9t{ejD$RV+v`njaHZuU&R5fp|1k
zchbnju0+sf3 at fG<Yu!r($7}{!_8~9sx+HirxzrPNV+D8xl)@m>yo_iMBH;BN)}qCU
z2~<|mET!8BI~9?ejIcuPWS?rC{Su8qdvz3&3t|V#nc51M_<*&$JCDDL at jzd0A{;gE
z5nq6)%IM at np!umd<4m$mgQ@>|NZRh@$qD7@#RZKaOn{fS?n%JQoI7%fiS$FOTcFZA
z^b`76JO?Evc!El><?ify$|JqONNk~pto~g+zEEG at bOP{9hTg3o`>wvQ7nR$*o$Qu!
z&=)K9$V(;a5Q$UO+R%nB)7*CH0v5spJE;#?ej*MUHszWI&MwFY1U_io0?*g-0G86b
zjEvy6G{yI9oJ at gMj@=W)H>zjv<CJ at mQxC{8IK}d8gCQ;EW^G*J%O4)H1x;Hdv{+_I
z;L_|5n`x6jR?8VRjN|}?ok$Dm$xz`?ff2JZo(ES-G=5vj$cc+%7HjiMHsbUekzt#&
zq+7PS<=jb|s4=;F$AW&)?XrR5fz<Vl;ZPC8gHdsXoG?e&_%Tk&5zxYYK^4c<2m1h@
zF+)Sa#6Cc*ZW#pmD%2K#@yjGQ+(~Y~2^JUV^cS2Wl6S8DESDh7ePokyOhH!nq(sqs
zTi5u~-ijNBn9pt}iQ}{(FmP=gw7_>yOsh#y&euFnkFx5ov?`u`0c%&E^k~Dt$|NP!
z%FRhMS`(PsNX?lpn~NKAS<G2&W|d=PGgvoXu?)ENu)H?nF<CEvb7{g;e70?jQ2l4a
zxa1>T^`QQ at f@&zk5H}n%wF?xBqkP<jVy1kJWV6j;hy>%ro4tiR|2*Fc*r=7)Eer_)
zOTH-KLIeU&4g1Ep)U9kY%7^!Ni5y{yK_hK7vAqA-G5Q!I5;S79RLB^~^549Cjg9W9
zm+pLhAI2;(m4jEORg=716_|*b=h^6MR%SD!xi!1^lEF$lq3JT?NWzdN1QmFE_;?;7
zu62zj>|xSQdl&ji{s2XN-XC5*ElaCzc3sNuPNI=%JLBq$EnV*;=o@=(Y>k2gnuV@#
z+Ol=1(A at 6-@yj+61uyg_mXshMolg=nnHtXGHD}|Ou{PBH2Y5a9WB6OTUL&-(1=bRk
zavvjcV6JIL2zX;{8+qriFsK{l*IOyLt12#CqRJN2Sy>adNtMIQ-}V|AF+oc={;tNz
zo at V=JDXd0uGz=)r)5fnLSJ-COCJ2oT>UW&uKut7)uLFMk^ra()5gaPt;?YXd0c`0C
z#>HPFdBZu7x)NX6-C$fPCoCdTqX}AxLuWCt<!WCST}=<`A4v|Maa=~>JgbxuTP4I6
z at 01|gSNP2_FnW at W+#9HUA*Ev1)g at e+>XXbzcvgN06IER@!=V{+EOR9e-q9IxNG}au
z1j1_v)<Kzt{rYb8LA3I7&Pta4QePsSr0C;v2VsGPGU1tb*83KS&#1cdPGi|2YfI5s
z>L_E@{G4 at tlB?$RC#$>ps(xQi`3kPju{i<zLu5AlE}VMscIMlme|Xst-jaWEdgwPB
z5~z_|(IqQ2(N_d|L$eM#cNLpajPY8PwU5aLT168_^g411L1g?3$d~yLw7Ay^u$Ahu
zr^0kilT$<IE_?vBM>*$*_hs?()zpufgG(Hpq9|q&gPqy8X#ML?vVCr_y1Y8NuW`hE
zrnZ)fx0sTO1Ij=^eNgi-K;o<0vcBj}%;R1ktq+<jrdUH`$DZOpKxrlKS5pbUs-#L~
zJo1Q2v7=vsH$_F90R7M{8$XH at cU$DsR<(%TDVmyDC>j-8>ii|(;Lsi8gntU^+NB1T
zX>1YA3J#BnL0jSLjq1x-u%fOjOp)HgX(s)fwzLjGgJRlf7|gPKG`zU}VpD=EQ>N=F
zygGlzh_*htW_3c2Y}G_w6V_0+&G=XnB>ej-;jq4vX<7 at 5q`r&qA8U$qV+4t=T51K#
z4=Y<txT)KWDMgmp22&6^HU4^}JdU4KlbNX-{|`N*f!{JWWH7=6&(pyo?9u(vzn2xB
z>p5v)S<v~_Vn3UFvHDILWux(kdxwBCK~vTPg>=1jW8IKF-&|Iqm-xa~5CeZ~Vg>f<
zU_BOI(}cn;@wI2SR7db@`ZML=*F$OQQ(l#G*o!o?3{x;(9NmXCSuC2O@;RxJxzdc)
zX>S>_*R*fY$A{wFBMCdt7fC8 at Mmh=v<GZRpnoIJK5*vE&8g^eSwl7lvTmOwp(ia?&
z2-aD&ESS?x++5IJa!|-EA--it6LL|c_m!11I4`VvGrzDLT{M at Tb1dX`TLZ02oMwW_
ziGo9K(K;AkP++XmZefIhpr^$FJEh?2qUo2j(gwMSSD<}SU?JTT3EgDMr`{A3c=7+6
zGn?!rr8hXzl>B95fMfh$2&wSEVQJMQl9{_OPZIn1u~du9yTto7#!c)1n*inIwWhmj
z;E9MVXb{t#^s3<Bvh%)==XtkWje_GK3JE5X+OOn_&*qd8D0KOBRf){JR`ndDVvDI=
zbzo9N?)iJ}JSmAJpGqe-%L%I4v9ES1chU9SZjt%#m8yO`?7lbKpf*VsA*aFW<<rU6
ztfop6^{Y7|TS8c)4&uNAq&@TOuicR@)C8$1?AeKt+O#ZoxYEDFi=~9kx{(oln8^6T
zmfX|oqI=GeGN>p3+C$<xD8x!pO2aKW^9kY|F_Eq_+j|uZ<`wp<70k6XMD3sQNH+_Y
zzKAxY-)o;Zph0rL*ZYe^c7&$pl1mL4U|^jozcso^(6NXa>e;~0NF?mS#iVSY0tu^@
z{Za}yLMsf`w8^)-_7ZCtqk4vr3$-)CGg~w){4avD>`ibOEEtN)Gsn!Y?fi-Dz+-8%
zH%BrwXeNPUC&|UH0w%3zv=d$yI$22LBU_EIoh~ClsA7GIRH#qAJC?ixIi=+!j#ME2
zeF at s*A%i-{{J6Td=q_A at Kszk*E|c!soNQL>R-nD&uSEuQF7UHVl^nH#Ou(7yf!}yr
zuTD4+qeZ3?muVC=CMY|D?tiBLjp0pzWWX>k^*}sxKSSG7!DTe*pPv2CJ3~*Lddh-3
zvnbMRzGR^@XUldx6zo*uC#HDK_RWSDotSGfqrLJ#;&;rFgzUF>DvyofB3wr#LHBOO
z!NiTRCfaSzRL?#vu-nwmLv2y0FIs7bWgbWY{l)g!BcQ-U8{WGm8t$%m6&50?w at iM|
zH)^MXF52IL0g8)+!UWZ8p^oJeBsL^Y&VA(=b$5r?ZyK7jsd?dupJ`on(Wa{gY#<4X
z(?Gv!6RcGEh~G3tqLaFq76#5=JDYb4so4rVFAjMt9D`{QO{rHe)r54xkVRzOk_#H*
zFTXls#JLLP2<8b+*|0Au)1hH_T?GJnSQ*@+#fQ+t5t9OpuaMSq`Zl7qPg<<x0VhVg
zwZPB^7fZNKg!BBOS87_OcCsQ<di6E9F2Vxe*12(>e}x8#RRjx&4N)M-1M>!-CD|wB
z6mW`Xz11HR51qVnB*U)YgFKW4=)!9Clhy*e{-W(r${Q6|7&}XI$pr|I-pC^F8@(Oe
z&&}fW8Eqe^xQnz2-l?pS+CjH2OjB%!@j43zGcW)zmc6Or47&|uOkY*AEGw_43=7Nn
zldkRZb7}CL9Mik;9jmP5r&0RH9gq~5Mvd&yod5Dls6~&*F3x at h)V=ICr&6i>!(>i}
z>#bEWId8ZD=a44BRY+S~9W_+!BOh3!wQ6_^R9zf&&R?`)ELdJO(MUm&`pcla8Ro#;
z&=-r3A9a!UR at KXTZO$7<kY(x}cI-Y7rRCutb|EAF*H>0Vz4+9tXF|`0>-Wo%qjf%=
zT2NGQhr2Mm?2u74ib!i-#WpU~2(<4<@IRf-7&!zz9JRPGa8BQftCF+fycg5iZ+H at t
z>B?5LHYSu5ZB&f>`sT}r;#`K$1jV!#Hx}kVpVzMe>t)QbF!J0lf?w3ZECTW+p>O=w
zrAU_GIr*~qnGV~SAl at li5plNU;r9%lQ{ar_bQpO!`6RA4T+Qlf9RGv+VDep>_*ogu
z*57fL%kXRso>HJvNtJQfQ4tJ^t`Jc=oeF%QjyqwO0Z4oy{L{_y(l(O9kqu~bRB)je
z{8WNGWB%M8#DL7v)UvaP=+ZI(tCAd$92P2zTm2zP=j8_<QKYo_Ljpr6is}hbFO^03
zqHGmgJF&wLNo<<@Io(nh!p&i3IjCl!(<#(zufz#|<`J*ZnC=B`B2fRm!3gLK{AYLY
z4E_w=S_P1t=9^&b5bdY(@mF#!uIY%f0^^d7jl#Mfkzt}VQDJ`mOrPH$dNviN>rdic
zSr)1*J=069+WhjhT;^Hm%<Uo3SVU(MB;Gd$HWL;?E<#lQIkXYb2JhFL%4`7SI&c>j
zM;oMkZMp$RyJ&f&us`7qVEx#6)l|a~pUm;@rpKtLfUDkEvRzz43o$CHLfP8|Kd*82
zZ`Hd)m6hJTRu4d!n7ckfMDZ7D{S+i&tPZ at jiWZJlR=yx#@J3O~=+WnO at YjCBn>-xN
zDOmv{Yk|bZO{uEq3$)gf=d=YEVO43r at D`ZBw|00^lN2Ir1O<BFv~i$^aCR2pYgMk^
z$j^PC`*4t`M8moTk2@%1N1C|}gAwA)`Nb&!vhxf35p at OfbCf)mFZ{{H!Jp-M{qC$N
zu5$7iwj(!iN+lW0<;j&?JtAZmru&{oLJ;ez7QUmE?KM>hX(t-KtDLY>9K=Le#t%Rn
z2iQ}arzFEmg&>T=G*i1{%h)u|<4Foj_>Wbwldk<}Tly0Vr1o6E>#ub^3nC$ToZXqg
zMy;7#_`u5Fi7_!m(s#o5b|v?!G0x+ZEC7a=96pryy4glJvrL{Ofuw%RLwuyG#b|a*
za^p(^%3!GK&@*9AjoKlV#7;%q1e&K}rJn9I3o)AUQcWSe<`q9iD6+^Ek#N6|^a_Q7
zR9_(Yt=`p~<AbQAwL?7iz`Gp_w1lK*@_Bd_cG;IMm7Iq3EA<7!XLCx7qiSWY2|ujG
zO}i*?EgZ`Bb{YpYAVgZztxt2=w9Q<P83II~M#J|*?%9z2gLl8}%;8)=x<#n}DrqFG
z<U7fD661@<oRj4*Ht}aZpKd?4Bih+BoXVqVp5Hv=914yf6IeacBGh?%KelvLNj((`
zy6M36CRQItc^9uFJk+6}RkG!W$EySL<v3mV--{d(AIDszan2*MaaP3k;KLCpHUpJ&
zISS(A`_O$kzt-GfN0d at YT=KIop^Ei<x{FjbP_aKM&(cOwPD&t|#2kx}NeL^Ky at M5{
z at K)}us#$3#1yY#W_%wrYKst};$?#X at 5_Korj}fg21tzH+ZAbDyksM1Iv{%sP_Ab}l
za>}aAdGWXzqi>jEH`O<To)FFQff7TKHJwnE8Y9WY)3?eaF=|~d&S3IJlUz2XICkLJ
zGNAB+kKqHb;9T*;vPxfJMK7oKsmUa`o68eWs^^s3#@@I&KCmKgt({A4>*BfW8+QrR
zN)5!&3kgiC$Zluv3?k1D`ap;r_?x0=j=4=YT2*zxMp%jmqW!OS$AdtubSkcE0{tzf
zk_Q4rf)tL_7aA__{dlBy at -8cQH4});YQ&P>EmBnA3K(2COQQM-(o1NZCqsCyHc*S<
z2X7KQr0GRTao-?J);n=$C3Lb{oC6Smd$67VrNxvnhGA7;hTDJ%yDKj0b9eLnWoG^$
zYq8#4{W{()fqPZ)vqw}cH5q7HsEQQsVrs#i;C|piEsb&o2uoxXX~>&QX8(0+#kvoS
z+!^(rXHz5UJk{rS6%3suSsm8iRnKd!(xgMqz>T13XNb4#JwjMFxv>=#O)F=%$VvIO
zSDsVtm8s0}E|J0HCce=sGP#CRPDUY+i=xWNx|(K{;`cb5M|t~J(^O5)gBb{~ELA$y
zo%*XF9tXoj49Fj>C%vXeT0awL;HADWS7iz8r*e|geSFf#aZUJb9NQ->y{4N^x*DW9
z(B!Fee1$A}Wp~pEnd0{)jRqh<JkFpHy*h3<XowFIB2FZ~Ercl^?w+`t0<tJ6yxv2n
z at bVpkV*&l79?!Z3Z>bf!G(G4cl!(kyPn1!iWn{<flGljcW`Iph0L&73J%?G at Eu-Oh
zqBV))@$&IO2%b2J%VyVA=>P&SsgL(Ij6Ajnu6V1>%tS4xHl-t8T~<Gsa~T|8Fg)g(
zu^jpyCpbKnxS5MT(ZCr4{Hc4$RH0=`ANnH5lBgj-3eV%0uyoyL at 5{KD&=M|u at w`nn
z+%vkchU1 at wV)+jSacRP`oqcdXeDTBq-$+-14hix{!UfR#j!@-Di&M<0c+OTBBy9sh
z%=-B&Q$VhTw{V0<e&#Ch+UUsy1J~3LI;$;)rm^3V9%6+05+7!AcwQ(H9ZwHWS5;P!
zk#$QZslTZUS=SI^X%9>{{Cn_Zh?TwMw5QOo#&zUzHN)P+KS^ZIRE_lhq9O}LsUAc`
zGU~C707g!{K>VLcrT96)yBgwNO at IWwqI%=7qGB5KTsaA~C1^$z1UlGqJpfF1?xWI4
z09a7oj!*|lbv>d8%cGEo^}2ZY@~znkzOW?7Cj)CEA+OFUh{zb;CUa114AeJtkFjU|
z at 9aD!N)RY5_!N_nB+P?Ll9~?v&N<Rb9jNdBDh at r^SbKL-km24s at m_U^Dy_s>+$m^k
zq0f~WpfRZgSuSvUTIZIFjGzMc+QKY9g%8|A_o31iaUR0w9cLrd&J<hUQf+cJ7a(M8
zS42yUe<hW7G!9<%q*rjUClX`Dt$O~h4nE%sKaGM>3AQ!IA at dL(`U;y83I3!M)T{q-
zHO}MVgK%;U?x+#@*7j3hd}l6*oRzs(88!IxR4g<3HJAqA$xRTsf`TS`_eWbRpLUd)
z){zGr52vd(bZU*iCyR=$GcZwoDi~E~QQOM8O&*1XtA3Bi^4c`?BPm`Jp(=Z_W#GgV
z>Vtexr*^xnmP-8HBd-Oj9=x*XGz6roj*A2PjY%D2#qh?*s|Eo=9Pn1hO?@*dOr-4P
zbe*Q%X&;}x_Wv2j;K0CP#I(h5V1N#|qE at UbjFjMpD9HCBD*%f}0|`eSKwg3pCK4f&
zy6)UPAgY68J~k|0=xYSfD4J`Py7<758n@^L%{3?Z(?9~#wz%8w2w0DtG6Ki#Q}RT{
zu2P_(MNCSxD^*A at Orm?&GqxHuu4Op8n>V(Xj0vtt1)PALTZri$gEaw=03H at vVZjT-
zRswQL;SY}EYZ?zN)7Yotrn2X4o;kfjMw7GMLMe4t1FEUL=%y{*qcj+NV-X6HqGo at R
zAD5rTQq}nf)^fcCbL7ugA%JI{!@MQVqxDzsW=ngMIZ!6JWJO8?$yyVSJuM1Xr}IG?
zDJb^9u<PC-SdtbMjonUN9G4Mq6W=7Lq0iP*e;2Po*nO<92RH9)(Wr%)G$3WA4Fx;#
zBBTyO5s;$}Y{&d_fYfqB7ITJsT}f~{tN-XNlp7}y3$68*T{aTnKk4A|S at VX1PocRi
zxHZvGKz|eNddRrXx#w{O-EiBn<eg#ERJhtXZ>$2%%u6z9L8pA7u+zQr0c34HkDeDd
z=Bb9c&>wx(<k8S{Nvd5j-q%5w#n}^hJy!B3V62YDzbUYxVXy4gNsr5E0%tcJysZGm
zYj$J3$Oa<z<5g#=x}nzy-SYhlZG={dSgqUq3`F*y_PjTq at 357XyjW3skv>TTrsjmK
z0W(5D4AB3LmV1RMxV#bj1=gi`V)oG&ou(LV(GNI;OX>t58|J}Huq|tjNJz|7dqxME
z^F>CGu||PR2wragV04V=4vN`fKrmo3qV*)gI5zkUun0(KEB&@dg=I2^7(qjfTMUY|
z(BAWCia!7Zmh!yJei9uIi+J53jtX*!ZJx~+kPev{pE!hBn3d9IqUUabnpke9Uew65
z8&F at co~jzfY<U6A7m`3%Z6O?Xp66&?oVcLa!ZwEau{AM%4_#w{^$Rf>(MleWIY{4b
z7nBPFaYG at HTL8g%kED(~9Ao?Sq at st3@8xAgi9*|MT(k=jsnTe73+YdAakYEtp+&?@
zkS|Vd(%LHvulvse at Ns~28w9yw9ellknBT at Fz*lVw1GoK~Va at w_^L?6;T%|9l3tzRa
z;H5X9V^%Ma^;}&IztE at DhVW<(@^nNolamI{gg$uZBD(6eTZoKBk at vp|;|z`)R!Rgd
zds7!s=TA=GP=#=m(n5RQfL$=zXwS^R$AXhd1wt)ktj#kCw2&Ou-#n3eU{AxGbO8bj
z{dK?lZ|!_Dg7<pAIxqX%U}m=iebQB`4zSlh`$R!_{<r0X$ljAVpXkd>B7$u~t at Mkt
z6%6j}%qSiEbyS4Z9Wl&+(Bk!PO-|LgvFB8j^8LWxDLTpDR|?3}AeDzt(sY}pZ6Te-
z&xs`Xh3f9 at L%5dcp@%#<MMp{^S-80!>U`EQMfh+d4I2`MxfCJ3AX8Fr;O(hzC{d4|
zPQCjEX@!#b;|m{?H3Z4;%$_(?RdQ083{y+HY|kq(Davc>awKvAUepNUd9Gwvd$aYy
zAGfdJU1*lukpBef(i3nvKHJMw+m2CWSeV$G<c)u5P at MKv;?@r<8tFPmr=RQZ`AbZT
zEHxOG4WW)Al%k1NwR)|{;j-BE9pwr4jRZ`<Al5LKLC(Ct;Yl<+Un<=1o959buK))4
zl2w6!$?IU$tNi;zyy)T3K0 at o*4_CNhF+-I7a5~5>qipVMWN(K$R#8&ZXVq4ak=s5c
zWgY;Vv&9Os0%1x5i5NQi*>lfH%aDzWjC<<e<9kZya+l_iYHSIysPmc&7V-?yYpkRH
z!4xF&rFG*7nShmwtsjk74ZWL2KO!>Y;A<p~qh-QzsW7`ru4}sBB4NXtN59V8a%F8v
ztmwLjDy3%OFNt&o>0p)qg+nGnpn3{3IYNNP7?FjA*S<5mIh(>6Fx-Q{5&;!-^1xmw
zmw?9GGe_?R-OINMe9Wlr711www_3CeBFyey!WpE+My{B3+_r)MiE#?2$-cL=Wal;O
zG_xAOweymm&2#Lgu}=>CeakS9p1ORd3Yxtfbm6qmaERfGc=9bsoeMW|wExpy$O`4<
zGQ%>^{=hvZ!xf<wGK=#EmkyFH{WO3^B!0iECu-={SbQ2UMnu=#8_HP)5+`a%Es%mk
z6$CpH%#SJ%eRxfTYb+qQhrlEYFos|9npa-)FXK?YQ)-tsgxlOkhRAf%S2PkdZZ)ky
zQUyQ^!XxPjBQrs|vdE7J9`7(<KTb;IPzWQpxY<@#uZ?{8Z^)~7Ga&!q^Q2ps{4UwW
z!{yeLDR(UrV!(^6 at k?1I{TJD)*G(*3k6N2NDxzYHl2wZXft`AZ4PP$5H_mzYFJg-0
zyc=otK?Qbj%`vV+G|(t0Q@)gUmuGF@`4V0D<yW(z5`~=@lu at p!awiFuT0C+0gxkc-
zFb?g(B-;X31XcL%H?-(%G at tm!|Bpi6%&2Yngw}KJb_8yg>2-{BMQH{(<<tAE at txCg
z{1TKZ=2L|`3T9XsNN2Un at X6PCnv8j};O?8Ym at Xt_eOZDrEMLgqmsK4;vXqbvtAgb%
z8z(zYGd8aq>+Zi$la}k{iT{^}0PH3ZT_TM7^bgYyp3eD)-q|=LIdD>?FPDdRzllo(
zE&jmNz2b;d*mXdi^yKCeXAiAI9=PG${dE6!Seu2y_A#d{)?oNm?fJ`$Qu8rdJ|yEV
z$`m$nKuW4B0DelYf^};s=>bs@%#0i1-=jS*b|V6Dj1O)IE0+TUa<|rkH+A{D_xwqA
zHqvs at 5~)6OLQ<E~tKfGpQUf;rvQiZ?%Q~ISb+F-|)3tG3w#R`MoPJkz^2ss|icCda
zSx%1D`fZrpIjgI5WYFV6TEqwKb>@kzE6vp<LffdI1Uq^kSc0LP at kcxbFS)eUEjZ<o
z?^uy{&Y(Zr3~|PM5r at sOJA2>nr6$W*lX~t(N-w7namBjXzsI>G1RLFM!Ctg4V2mum
z9Z_i3@}UqeEbM^3@#A<jLzvTuS~)=|@HP>3fqW*2ZLs`Skl><s&$#@*lO1i}LPiWb
zn7VpQB(MnA$H-9^*FN2Td$mo1ZBQQDgtYIE?Dit_$?dN>cVsFaE>vvKe&e><_D?Ed
zZ#=GW%%6hXFWgYSsrvcf`a8B0UO%t`t(Zjtcu^V$>p(wB?QH!W>t3zAUu;mxR63({
zaZcAxcM$P at ja-4NWRQmR_^eAP``?NT0cjx*A?hWR*(MlxIy}q at Pr-q!=con?5#p+o
zB8k1WsX|!c^>9>(Bcv{TdVngmjH(_zvgc=-h9ZOj{s~*tHAZ#&FFy|#Gzx=A-)eJz
zJ2GhI1YYV?&6i6%V^o-<!%4wv_{|c6d=~@Q*KLm~{b}+Cyh$Z5I>1_a5IeAF850cw
zB at i^>_3m{UAr5om>c5cF6T&@6lcS@{%lCWq{Siz!{3XZ1UoCmlb#Ss>57$_rKyW{P
zFJ%V*XuA))*d$~}%x4bv=g2t{Zb!tGpw+U(wmI-1vK}|CGaU;iMzBnYVF&6&dt+z1
zH<A33=1N03E{%6s(g~YJrUbYtC<5;V)NSaILa7SUKA-&voyl241$F at oKvQs^)4=_a
z2FcXcV}A2FSv1csuTNduf5BX`9S_0xr`Un|tMU+%5|Sxf1XcD-pxV~54rxHCaF#0+
zLi1%&{^7#8u>&iH0 at t9r3)CRq<DSu2;rAKFgqvnf)<COCbMNz)0Dl5Hs&?he*>YQg
z1uPr>j5<Q&!P%@Py3G`Lj=`UDn_U&kz2h`RU&1<{0^CEzO6{1F`ZX_K@~QR&q7l#X
zvLHT)DE!Z4zZnV%TcE)BSfi)dL})WE%Qj2QC=}bpQ*3o7dLkY-y{xDg0z4@)=Jaqk
zRD3bdIFrqIksOqmu~xUmk3kmtbwcJ(9r}Mi)D<rWK#h at bHRF**ksZ+m7&5DQnx0}Q
z=M8HUGXF5OJ`V1ngfrILpyNQ;&AC%9Ss6hoph|eh79V=yuJsH}B8muEkU*tHU-0wh
zHp$AC_29n%^O$iX1)I1;NN1Q1%BO4RhImNm80-|*69x}`x<5Ga;L9l)hjPpEW2(Cf
zad;^vg;^0^<Y-}#C)YyfA{EBnP^wv9ZQP0W(-JBAe^MW_jWLF`cWs$*g9nuz*@C{X
z*8}x?y!dwB{E5SBMKm3m5CYvyVZ#MkI9%8Iu(m&K1wf{tAIO6$H)P?D4SbWakFc!o
zGT&;X!i~yqnzmkWw`*bXP3gN*Jf~Vnr-Vl!K(WR)jL at _jJdZpMP%spv3U~+SZ9%J{
z-xf}G8aUDB10CvV)Q<-!zATIid8BoKN+ZyNk1NM*Qs7udojV%T!`Gp{4(jla5p-Md
z at J>$3%;?)V5(XQCJtkvOYrdf3bTpe3DuaUvY|ZBsE_(MgXWt3?TwT5AckwA(YcPLe
zeqr4V#`-ZZoYPax2<ArN{Ly<1tP68WxYKVzxv+g-6gje=QleVNe-E;x8A%z;sBs)Y
zVJZ3f>cAP}7WK%)iqF$-g1-0?8VMNx^TPKbUq=Fg1`msVS6CXGz7kys<CV2IWNX3Z
zQkMERU%KZFhXD3pSii0J(I-IFG~<f$X6sK<G!f0jhFjG7034K!GV-)H!}7+t2|1-X
z&0 at zfirahf9;I{2F*+pfkXrVO8y+!<TyGRH(L=|y5I9p9(#X*>1LN<9N;*6*SvXfZ
zkqiM3Tf$uX`F}JGbu_>=ajYuYqc+Mahu!BonyhO%SR<yH(&UHEb?f&&n`ab~b7k_$
zi5>ybX+*1GtGvjBvjJ9uw$l%Pww2l}KRbp%n~_2C<x&$j$pCkI_z^V$ngg=u;HB6l
zXV!GUQt0bA$?v&K{6V%Xn_h40`RI+F1dcJl2V5%ej>?rEMm>eUAmve07zG{{gWjb#
z6_IbVopaAHF#j-*s!kwZoNHg`Zl($#f*gH at rcLNDrfX3Ge}6NPf?*-k>|#i9+o>->
z`}ij!8-9TX+X11(9X-p34ZtA3tJUw7x}GqO`#x_lV3pm{&ypQsj<bwnS%+@~Z-<_q
z`?-2Ld2d-HdZ@*Ka+hPW!LZeLaGJ<Kl)_4priHgg7)%=kHTw_TkwaW-H&jy{=dlX|
zg3y+%LQ7^PVjmHx8aA;-Jt^6p+X7V<fK6a8?xg^bI_CNkU=n)-pjqxe-%d}m(HG1E
z5=%Lq;Gj0adV at +YMMo@g-VxMql$h?ioi0uq#O)=T^v@{pya-p=C$;hJHJ$&h*}$x}
z)F(!`0mt3ww70x_dBtUTfFKMTHgamFHaw<OdsD-ZzV2`L9lA+d#h9#zOvCUUX!|ey
z=1B8e-O4-Egj49)@Z7NUDmKZ_BnO6A0uN=cItvy1vcBDU4zu|t4kk>a^_ota%Bm{l
zO0$-Tv1n7r6zK8px1?;Q_k4<6BR2&`q5n#{jzCPIONXZTot}~YPW|`TfOlQksZID5
zLm54oTcGVK6my}U3nBwuL~w`fDW#Iym91#1&BH4fQ8-`t4F^K~xf^0F at vqm#LO_&T
z%KhnvJ6-8|>dv&hg#2RidL$IasibtGH2|V9xL&N(Rbs_zSlUvS@%DKKFdd3DNZcFG
zdp&^ivFL at g`Q$G$JnI<ygd{_WsC^ba1$XL*n>?ajpaZVIQ8?$wFVn-*?9^X{27z9x
zw9TBg>)T}2b5juQthcf3!|)rKgl?to#ag7hUXDj!7R|w+pIb at OHZYKrMtc}W4GGDk
zS^iZLV5;`er#+HQU`!Pl(uDm54fm!^p!1i>txyltB1$;{+CIAZUk*1HCnJ=p`EB%e
zN3@`N96pdu+GDC*F(KYmrzOf5KFYqvfBkVj`b8i-xY5(+rVZo)>nrVe<OE<Ef5iyy
z0>O?IcsDRIX9n~@Rmn;eI*btu4Iw5}#nf$&pqFZlf!21D*ay$n)^ju0a_V#fHSp))
z91Bk#mu%SOv%N*A7%50z*M_AHy4(}h_mZPp0TLi_D{gI!qhH5rh--1x)f+4C?>|_^
zipXIUBldBM0$JlR&N8y0VzZAn;X`7HBK;dmRi~N<=9kV~D&i!hyN#OBYoH}^4cH9X
zuW50UY;d7Lhs?p at Ok0*%H}3V>O2j&9L)BW}dWMnQt&oE-hNs^izozMQ&r0a=Z1ltK
z!aO%<K`x*{V3tc5h%D0Om-|vbQEMnWDHA at e%vzgB)g1U5F5*?O%18nK+9Ue+I^;<b
zIU~cP4js at vO;uJyC&x(Xx>xINc_k+;n0bhmr~_*2mWZ}?qeevNE+hr}5==N#m7v(p
z{a-EBjQb-9e*2X?JXU{wR4X1LkO}ZP=|;roa2-F8G=;mn{;fE$rPQO<RU$y+`$rXq
z+igi9tUs+Io;Uu>Y`<n{-b-cso)ysSrS)T^bGp`vdxzPPiiD*ZN|XMPn7fa;j7<Lv
zh7QaOi;wHiM>JSc(Ho?D7z$o9&!WP;=io*2p9sG4ARfb-OF@%R7|#S}Yq_X#J5^k|
zQ_VOTjQi4c2jjpHvfL7~<W<_E`|D{lr_0{o?b19c+rySJ7BzpG8ejk8mpv%r+<1Jj
zx~UhRiaLa+OMdIEMrUF8pfd`HFLIm+&;?DjVSszdVkJbYz*l0yK%FW815`ed+Z-)l
z0 at 2`t7D;rC8^i-NL_AS?WYqwUHl<g-<adZtGZ|R%b{SigBUtakDQ`^JFSPCgRS>bt
z9XKsDGRxEp$zx(pT%9s#nLFU;o%XS&beRs<l;Vu}^)D$qTTaMNM7Pii+y%?`Jqq=C
z->r0wTKUO|-CBh9;~y0!U?;r(KwY~6j)=0I-X3^E{wpU*CILX$(_)xJItTQ4_RE()
zM}LdToPCa!Mm>8~B^d-it`34=2~(-ao&qH<mH!#M8KFQ*2Yj#-owWaryTAiA3J#Lv
z&~mA8BV%7}V?y7W at +~X}fZ3_-NYy9Pf<i%b4ygg5f_(srE5+KZDjUMCLBcXb0&efS
zu#!3)pLMoZ`N|Ok*OC>BA*-B{mC(D7+rkO^mB!3ltp>S5@^dphE`n0T1gJO^Q`r27
zXLgSVr^h7j$7F5h!~!R9K;Qj8u*`}4D{dG=UH{4DC%4%@f}1-VK#jur83B%T-jZtw
zBSFIYj_+fN at prKU(Wtjb#nf>kozdTDa8Eb#q|HOKzn{1iBN;YgW6PMYmxsCyvC`)U
zh6wr^- at N(EXkHS}_0|Jv*VLuE$G>-l^bMZf&T|}U$3#@fWphGU$mUh3bL3n+<E~aV
zE538JK$VZXmUfCa1oT87 at R%eks}*mDDnRwB1FCUxmk}b^vfRk(Xg;)o_bjpNsA&VV
zEPvXYjC{Hw)%{EL&<2qU8za;7k?FH8WdT>-FMuImhwO1dmr{Ce#?R5N7?UZRoq;Me
z5{=eSF&7ix)EdSyXtXcAjoe&SkGNP2k6G3D4we2T!|1}CU5l|@hFolkQy@*NXad7R
zN1B9$*73^>lc-ue`GD1vAKaOaOLB^>?OA-Cw;BMY2|U(id=IitDKT|f&zIRl&J-5N
zu%Nl#;|J?DvEYaAA at 4q_nEdq)1R7<LfX5^(m9~Wd&jcgfy$Yz`6#;u1#`L@~%dCoT
z)<4~Q45!~zjQLaA4uLI??EKV{4U7hup96Z^n>MR}t8T>}XPF8n&@gt8WKV!$qbyBt
zbh4B{l<h#8aa*wML*EM;!>8Vu27<Lq!~3*x=>)(Z66zE#mpY+2up4EGATcFeZaP6_
zAn0&>Hh<O`aXyPg8LYbJMqsO02Q7ckCW%$@A>it{pvZDC+P~NU-y0F|HF8y4jR19c
z{Tb+GRs|%Dwnc#;^(B*=cD`Y=j8Ns+2%CKU!@+%<!;#g~t|H9rlTW+Gm}iB(bJ|K-
zB}5G%lguk8QSjI^5R$&EQ6^ml at Hh=RWvX5=_std5IP8q1qRxDQGu9HLa;Gp*?ISS`
zK`#F*(T)%i{+Y7{j*_0fn&?jUaa)4zlfJ9NfjPiEokJKryzs`H`o<%{uir7${ab*#
zRqx|jM!NSCT8Gqh;jgtYV5CG#QT788Zfa#`99R^(5ua*}BU3B7VLn~{*2F=ax6gDt
zCFiK`)s|)DDT at LByp8tSp**yy1CU$vXHGkF;wZaxN4)O{z)d0!B6$FBwOiG5$c?1`
z_?t$>`4t8%1PSSc$V#ok#-L&N|Hk^OT@~<-8{skgK2Lxx<tqS+!GQ3G!B+a2W|852
zY!`28o0NQm{#-s(rLhe4j at H^5u+V7f4;_i35#NgeK(|ReCEc}S!$TSMcmC;k6}JTI
zo7vq3wGBLoHug{nzg&ZIJ;p%9-n*K~$(4fYX&lXUeE at vD>-j;-jZ6r2Oin4?q|iL)
z<#!Etl7-rKd^ei~DAml1eNVetIolZ*CrAljgj-}`MFC4Tn9`Twyt#Ha!Txp%h$*LD
z8A8HrqntGt6^ofo96;4 at wUS@XPewL-ins!6f|qbe{}n3w%YK|j$pK?jIQM0Z|D~yl
z?uGo_kKHjId*AuIWK896XU|ZT%+HzNq{jcc_F?|%!gt4Kr!r^JvrrREG3v}yw1=_f
ze?uwdW`1pKg*~K#XZD6n5&$<pgR2a9@<K`-i(6Cz3s@?wyEkbQ at 1Bj9*nM+>FsIJg
z(G~y`$6avh$T)hcsIlnlPvK++F*qQ*^O_2)^|^tp1<mXQAkZs)yRRz&LQ=iD&1IZO
z+=S1#!dzNuR(V5<%E&d#PyUYWdogofR+N8Q#a5@>d-O=K;}EY=F^DMLf|SSWb;d?T
zb-ln;$R(w!Y91|LidVX>pEe?>S~<94jJ913+X#Y>f%G?cy>}OFzz;3Sc|bB446byx
zqLM)YI$WI(A+*dh6-}%)pzaqsM8n^sL2~H1 at q8Vl{J)+a%8~<@|NTE$GH>c}I?36)
zAF|;5suY#j$8|8yC%!>`^|?$^t2!+hqA9RN6S5!k6MIWdyAsd*xK+7G0pY%mv6(4W
zn`u4;p#PB9Q1zQ*aYyfZ*Krv@;>66Qt&Q?N!ApcfM;*HuRHta;L3$+zxMXk^_`qtP
z?|``t8-z*nrs99jrU)MdFl8yAOS?&utQ&PKOON)+COIRsHf*CiiZ`$eX<LG=4DrPN
znbCX7b=i}~-F`rU5Zg?-m}B#t=|g}nwAAaZwFoxz^)k?PD&eCrt*kUI*B at 7cZuC<^
zU;<M#i`)$~OIse!?zR3cycCg2A=C_eoBPKOT>}fANjhFD*>wAI)mZlQjLD1ml`45%
zZ{H|Geo2wAlK{7Wh;YEzF>6gY0YxHoyjB&wXiMh&MYXgzL4~SE{?I7jGsD3bBBNbu
zp#AeW?3cd>mP8K^TZiQlXJMqB?iW8%yj0ISzw}K?)z?MT14pTdApST?$+E!>wX_=5
zS!aHuucV0qZxbsVT=yI0l<=XDIo&>Y87OX4Anx8mr=KO3k{mt<3^a;7g+m1y3y`+c
z^hD7hJo-n2ZaZqEDWLUEj{M$CZHp<dXi?H2?kD!kzvr>n)x<M0{ZC?!#e%|>k+;Md
zLnFl4EXrq|tdeFXapNDJ32^AMl1ACy<}Fa)hiMU~`_b80tn}zA-G&fy7MxGJB5V+U
z5kj+>$|>P$b7eU#boXN!&K{(Uq>LjkeZ5e&d`*TSFef>D6_)F352eq3>TeqIyT(P<
zAQa71>J!b+OiGNz8##|#rvK at P35gi&t9q at ULq)b^^OX(|2`N)g3yJkM2(Pr?iXd>a
z7R(B_k5KW%+gWh`ImW=Q{3k8*Dz#NS5G!yQPe$A^bZ}K*egjsLbVEax)_)j$2P`!L
z<Bd~aBf+lQw>!=vF&8Q>e(OcJ;%r)rvcvdtigYbV{%h()jN=HuluX0PD8IU%wj-Fi
zj&QK)RTlL3PIwvNN!5wxSws^BrZ2D|#O$;o6+~|KFcq8b9bd6rF!^Hx(E8UibuRii
zDuP4l?86;EA-4(eWyym at umB!(;K#%ew2g(L0}dkTO9&b0SS2I^Z|Nbvr;Y6G%WuOC
zeD`^j1=wlY$1x@$rfyN!O<u0d)R889X?>Nm*SMynpU%O&uJ<Q77gJxlvOcXW?N@%Z
zxX_nje|;hqQ~Y~SU9#>ylkmn at 5mL$~6`90C_Qg{G at w==83nA)%87n!8wk5>OB0^cS
z4$^*+^SnQH7jNWQFvXa5dL(yaV|nrL`dfq*N(v*;6J8VIp~WP8K8-JsBPK)tL0Qw5
zC;a-UNNQ7?=fa`*l%{ShKLJYFn6^Zn@@9%N<mMkK=cwQZIR!JresXTYwst9>5D-z_
z)NRMPOjocW*Ai9@^_HG4xycPRyCys;wLOk&oZrDc1(;P$x2zD2FE8n1t>@|zim)=S
z?+ZnY^1!~IQSFH(4U|7*?UCA18aK<8*QtpVXT<9k>Q!)kBNM0$DyX^YM2+xtB_<pa
z2gdB#bY;fF!py?z)$K3ECurTu=A%~fDCXc3((Iy`pD>H(LXmd*9S8tT5{pGtcH|l-
z^^wgc!e<J~+H-Z2u065?3+lBV&JEBb#J*1CCJo~^QQ=+l+T}WtIA~uHhe!xXxP;$^
zaO;-I3TP}|*i}}o!^O<F#R+7qCm7D1IeWrd!yPPNwd<eZ1t_MO;NuC=@=17FzcyI-
z5;g$J4U32t8{F;_c>4GEAD5cC&dXUK+K9>iLX-J)JqZ*J^|dK8r&_hlA207&P7DeA
zWJN2!MI+uUjYd<@yW71?&C~x{StBYDg-R$pa{=c at aNB8{A&iEE$0jD}w;)dH0!ek&
zh0g1r9}@2jxWuV`IH%JD_M*E#d29h2L@{62)yMUnbMoL{xXAU-gLi@?jVy-Oei;-P
zhA1BGu|~ES2?m}S15bXy1F5iHc#=|)7y^&JiT$Z*JO at e6#=1d_q8jGlKJnXp9<%U>
zXzLUJfx-AEukSB~-z^LsRZ@&HDobDau*T;r+R|3>*f7_8dHr0=z=Hs`Jc|Ss=(NP^
zAm?(ZtRr3b=aQPo(Fp3&Ma)4|0E&J;oLoFbmZu(&15h?E5Wpg!saM8MjKaMh)Tn!L
z52yZ+JyWoh#pD$>%b<tmk7Vv7fvA;nNG$N433O{U!vGNWLv=P at DXzJc(>c*>US)lU
z>dQomzp#umllhna(09|$#+hBES~?qr(&@qU)dY&}C3g*D+67ImCy at dR)nLj!4wr54
zxbxevOj>JDqb^$$K5qUjWFJcp9&=ZSTj)6=$$FS2sY-%HRMwVG6NvIm#2`4ad^!-_
zWqu)l at x}Wlh`jD-6DE52quoVi-veXZRu+}2asdL!ZQ*rE<kLIYBO4>p>5oGwKe31x
z5)ko=R_bIqh*lYK7wzcHrJjW>$M!NU9%2ef?`+zqq?6RGU5=Izu!qPYvW#t0ldqZN
z?{1D7X1I0o5d{s|cNu~_U_2rL0>KrB5NKjZIEi7Hw|(}weCOP2jXqmqRCtRJcmE0t
z_iOMS_U?X&$j!zY&QD&fY2Y`F9Tay_K6pWh3s3*NeZ3pNABE|F>e`n(Ut>bM*wCJC
z6~`H0VX{Zv!H6>M*>-|~RKv-Y?~#<|sZC>3W-KL?7wpZ5SX#2d-$s^*5oYvL>lA8U
z5Y^E9>5?TR<;DNX(5m)gO~S8GWOYXY2OBy*t0vSKGR|_wEpudM#oflI7b8ZAF>Wpm
zsrQ39h!>HroNB1M%)i0Puczv}otVw?7b=urYeb#FANGuFEY}ToBKmbLW^n#55}!!h
zdn4}^v7Yn>GJ?o!T&(^Z*n%!#<e<IGMq6%AOaEyv$-dG#bhn%~fOmAK{joR{NIdrE
z`=@`Kzf5BQc5H7nYVDbCNM*43DXeh9rHkk)o!>6yt at f+suNSIj)Dd-#?T=CiQC at yB
zl!401;454KBhsu4kYS_K%g;-gi3<*~+M~L_ at 9AAk3FC*GSgXm)?5A?k&7n$^CP{}=
z7`8=OayiJ7C7VN#-MSr0{0xg`y*D(eHKWcVgM}$f#;G-J1kpDp`QL4ZHTQ{JJ3hmE
zRe=9`8 at jlc-&<=&lJ1PJfDSh^mI8i*=z{DH1>T}UXMq)r%4E65!8lZHaya`rJcT;~
z0J&4aj***`{h?n$IQCyMvxt32#rUq!r=?(AJox1=%ADW(NeAA1(&Kmi>acC?(Hel+
zh>e-`2c5FM;`=4zc66VFH;o=!Le19mG&am}-Md@({=<_r7q>A^G*tyVlFli{$R}yg
z%D*|3f6q5tY&apJsxcV49qW&FXQBo`qQvOAg9%3~hQnx)FU{;<v#H%W1iMJZ6B-=9
zd1*N22jG{G$;uB1Sxb>l488k*K~mCdXhh~r+y=gHvqD2pRS3<W^@lO1x)`mSI(?xy
zzt8A7FV`v$Z%>NX6cD3OwicNY<nyFh!drx+XmtnLEaIxPX~hkZ?edDI!h>fUirm?C
z=m5C(2=9w5wZuWy(m!R_6)LcQ3JGwi2#kfzIhfg+h0Q~%=)8Yk`37q;2s%cQ+Q)Tc
z5Gv%&Y=z9%{BFx0$$+0Bc$)5VZ~Svr)9y1UN4CTvMVN+}=r at 5lA~=%lhjoe;GYLd?
zIuP6v{d-6>n1UH$hfB;=U_n+)XU7%qvzBe4hh7uCQLe+gg0*M#s){--w}SxHADJ@;
zwoucJme$$+I93dh_71up)urW$J&pMnX|8p0G8bBvB@>in&|>r!{Dk%wK0ItJFQOJ=
z*|YecQ>{-x!#gAf{n^m_z>nq?H{ttgf_4<KU!bOat~9bl**ueT**KE*Eym<2M8~1o
zsq|swHW{V`6xk*LN6YrOgeT%(xlk0#ph=V;#F*xzQ>hOfSp8+3FwXabV?!bVrkiML
zQ)H~cABx=DC8{HJ&xdubgFA#?F9pA8rIEiHzQz|(ayQ;J0Z|@p;i&cPyz88AVQOsO
z+bUaHOhgsU;MT at ct3TqJ?53kTgX)J20<qMGSPJ4j|9~G~db`bF!wYhpS#WS_av5Hc
zIxIqBbiE-n2WasyxsO0WAUox}jdf*V(Xa{^JFFs2YD&rmM3&5((Jy4^tSil<c}N{u
zPR_I0l0K5{l&2c!$-*L90PNlX+>{8M$Hb6RvuQ%hDv4pC>j90_FxT$rux;;?98|9#
zMLHY3*3i=}=Q8 at bu6%cq6(8s;Ny5?^f81495Fr^3sE3mr{w_sf(@AxjH{x4WcQvNw
zOU9-Wb;C?netracVwMdBAKvK}(Lb=tJa9I&ID`uN$^}75F`Sejc8){86|Ar*zbQB|
zqhGgj3zC7qdan3Cj|`ksp{1!qSc)CAg(uXdJuns?1X0A+3bkBEuhhwKhT;z8EOWMX
ze_8C482|?9G$fW^x=sspz$vpL-N}JKwPtl|J8#beQajb767^C-O_*{k7g^*0ILdYZ
z48mDvfUxD4_;)n}QO3Ja$N1sp44mKHj=Qw+X=tCL1CB`s$*2cG?d0i|-k$sboAmGD
zL}jl{cU)0czitE5V_Q2$&a^u$!3F9ZzR#Z%NgrSC>eLl~KwEoTvY;nBG~6w9^4D_p
zwL*9*x1Mrr4sy#h3uY3b6U3lmc5!nID%K29Gz*cjoAYF%EaCfLP!l%I{~&Cj_3$D0
z#~N!nypqw}V@%*OF<UU5DZm9C6)mFcZbv8agdB4-z4ZV$K*+!Pf_uSAR$j at Y&2Mxj
zQj@&jhMvn<)~6QYQON_-pH1@*gOj3}wy at o9KdwKV4dR#l713hY(!gmG*T2+M{UbA#
zBU%ay4)GH*k|rzieY=A#BL|Qv&_&>vesF(LS*O-~4D>0bZgEv4a5D4OSz`>+Y~k at P
zK+8$gcq$y>adjr?hei}G$a;J=@;mCiWzY5&nHg0Iziys?b{ON6N21ojezA@*CptE9
zDL_Pyv$C8qA?lS-WJZfWj~SaHYxz3CB~)ZqDlBU)>y_COqr1 at xXTtEVKVo*>UXgf&
z2(kS#%QuCGUE0j)Eo5iZwacXSNTz7v#}R8H2CuSvNEf_IgFd8YZ-<Qe=_+}jebo3t
z3VDA)xr_ttBZr^>6-q?E4&HmmYmcjcmu^2z%+THAH|sgZ^NC;PVf$ZQ8#~Z$tDa&-
zt#2398H8Z&Czcs}EvpBO^OQ2_ZiUt&6r#%||7i&>O}vALEU?S9brS`fM$%ckJlAMZ
z#s%b4jkqG~1(5;cq7PEnmKKP#sQ~_~PBZNfbs{TA>cgTrvF3>AU5ySN+L)FYrA*-}
z-Y`6asH)vo)S*+*ke8a{FKTXsKKUow`ln0R$kC1;XEDU~F%Os=cQHX=pnofij1c+f
zKcC^Oz`S(Cl`f4<19NUd*8W{yt0}mraQ8p<=|5Vv!jZWzNwmq!M-SdD1o*DmFc>O-
zle7&f_&nRoSQCxn4jABB!{X^}va|cUMNSrf-gmnuQj&%t$j`2h05I!;>J<&Ok-y6!
z4R4Ax(h6qGiv1}p`RW{fzI^nR3V4n0KvkZFOK%g0eanZbB(nQ)uj(%R4{|FI8{wKJ
ztuHE}dQc4BLMNDs*)$7IvW?Ak8!7~@x`_!g(UmbJC&uq_<`^)K&K^#%mY7Yr{m}9v
zjZ2k3h=i{<pTj=SoF_!9=!&okI4vZw0&QgY>gV9PN#zgHphC-9a1HMu%KNsB(m^fz
z87s!EMtpMKB(?*i>0Iiby3g>Uv$Zl-HmcJ(jRLjZhZExgnnaTi8G%Qj{$Z%+24N0&
zFUZ8(E>On2oIC>Zjg{dIu5Su4KDV)MGJShSj=?FieOCRGe(F7Ntd2N{lIX at qa{qUW
zC6PbQWNd=DyGJIP$l66K+zMv}Oj5?w(<-ug0u7SQ7t)I+&P+jzTMD#4gOQ2z6I<+#
zKf*+5Ofta2<xxvfL!3o=aV2B~m>tk?UUuM at en+pBJnRw@fePlfvpi;#U2V44&@Cw`
zE17X|lAS}w<A*nZhe+AA;rA)>(wgA~WD&BYCWl>lvrsoF*%u3vuVOb;Kda+Ak()(O
zWJzX<S8_zK5zJMaU7Cdj2v*NQw5V;3w3&@A>aKY&x6{$NcMk7g#pA|j)rrz>nDf!K
zq+*i7_&@>*Gev?`9B>k3Olj-tYb9ri=0J}gZrVi2``q7 at 4$;?)#A5Jkk=+p6xK*Uv
zW<)W8)^u7?e7<JvxTa~4Jfe3UP#h0)vfH0ZShj226(|o?`e;*ot+D)MER`;7K4}eQ
zCgT0A&S=c&4g at l=&6-WLp*uEp113f!BHb_XboYS`B|q=|Zh1-(SC|MV(8-OnRYOEK
z0oZaeO)vj}s9RNK3o;hIUoT at iEq^}KNNk&9Yl$em?hed|hK4}pwi`A3sYw;0c!!E4
z_44bQEQx~3XQpvv`0W80++dQrYbRLj(nxx&$nuWy&WG)98~p~7<1a9981zQX^MsCA
zomA}@IB|c}gwt_E>SbLo9pqC}dHs|R|8@@UvGX4Gomg<;)VHc?Ss-gw73%~_=fH}o
z^;23s7Bv(LKT9M_8Pvu4VCCxIAV6kWfXqd!&!?$E6N?+Rj^LpZ?!e|;b{DFP{{ZxY
z5-A}}J+-ng<Z{@W@<;~(WtH~Cao><BQ2*ub)Abo=qrd at JNB}jq8evP~s0ca4#B$ge
zY&-w%vv}AxNG|lfwwwqUm;k4gSN~jMtza-{QYMVQyxmxJkEb>`0X0kHngwa6)Y-xh
zl(3Psfex_`N)??1mYnCkfVt0d2;-13ZBmh2NrI`tqO79YL2IoQ-2=;o9SLIra&u;d
zFaZP(Xn<#Vckz&*fw9V=oM&?z#<-wB^EQSglf{v%Mwqw at AENg95bs&?c>&oyRc{G-
zjdkXAUCBAF$}#rl{aYpT4V&yKOLuz<KY<<*J|8>@+n*P#8lp at wJTRV~`X#?2%V)Lz
zlb=4_I2nK-Mv_2%F_j;mXQ0F|gzEOX6x{w_uZ5W7un^S*a3yYwG!SAGf>)<m4fGvm
zYjfCl6r~QU6EuHt+MZvevbz at _3$a+Gx%O0q>*|MhIX0r(di_qT#O-f#Ocw!z5F|*~
z3tJH(UaFdN1|lzyuCXBkU25a)jVc;Vr3IGi>6bdQOfXpQERE`mzTKTIuqd5zL`S|L
zi)0LteqQ0JLvzuZXt<0lGV4&roE>zhDDEvW&PGSTGU_z21RUN8 at S+fiHg((MDD(^#
z_T_gq<jW&WYn+4sfiejiEVN8)qKYAw=n1TT866&_mveU&v^+0x1*}@>)cNCO53m8&
z3T$Ni267rx9H|?a{#3?Q62cCR+?S2-Lr`5ZqRkqQm}_^5Ome+%)-?X5kS2ksq$4wS
zgr^&iGo10Y!9Y)cgQn~Agb)f!4Ml_Ya>#aWWp>1h`=Y1CRf<!m6+Ntyt6l<`)}C$9
z&)qN%{G<nEDr=s|D7eraiFVM+KJsg{i>y1D+CqfLqSLzJyxV{dGlSUiGObgIWjsGC
z<JGJPkz_X>yRbj6hpj4D0E&$&)|eS{Rm@#;gQ5>Sm#BppSP&b4ZtmgTX7q0ot_DKJ
zosw2;OM*TcHvLk6v~wyqva-}>AjoKa_C5D(q^s*4_D3?krursFI`>8(zRm`8+S6<>
zW}@bsFvQd^!6U;n at mFHzL*bzZ;+NChk+F>L85jKU9d~n839d>Fm*a0{YP~e_+Xke;
z=(GCachi#ha?4kl5rHz3Ooi(`(fF3!nh+f_(&<txqHtx?kF7zt9QdWtmr(ZV)v6-<
z`y(zfuL7q(E%VRJe3r2PNb7f>xzsf(j0`X2M;v at aon7h7^N#%JsAJk&3f739$>o7@
zhl|Yu+ok-h+C^Yi(XUro3<(~u_GxJvN=ogs%aAY%K|fa0`mwsSS_WU^Pra0U_<r77
zJn7le%BZY#OfL0#mzX73ZgzSWYPnfwTN(L`qN+&Q7oj+DYfL`yN7i$%+{I5Hvb(cz
z7zq+yR33FeD#9x4?=xZX<e{a=dr#8BDin)J*YmyiofknZjHERkOwT9^+C<*tdRVKi
zPVi13kQ|5jQMm&GPw=PyG9es03qNO^yhjDluOJQ%EX~u6mW`#YZh>G?1rf*fisthc
zZn;r~)l0QZkqkDR(*y~ct>wE#U+9$NXKtZwnY0s&OHH_cVao~WJx+e8!GM<4MBrlM
zQ9wUMY^REzA(;-*hgJA}F*S2KK6X**5=PUcMmjrsheZGUQJV2-Y=m>Itei;3k at k9&
zLk-D!wDW!OTS2Bdb?WT?dLN#^oFP8|Mz1kONKEvOHg?0=xkJ(h#_h_aAj<X1G|Q8T
zgiJj at F&p%)z5~47FmwnY`603mPFC7AW$PxHA+D?*R50iSCqR)PmQLFPb-MvYqIJIP
zoQuJSz(RP2HjLT35DB|JEhUO}Pg7+1<bPG%4L2WJo%uJ@)>Vi{B)#6N at p`e`i3DdR
zjSi0jW_ku-5+)5`;}a at WcBf~y`_(mgW^R6DLk>l>P=WO)cBjbB-rajbEjoB*MI}XH
zaxtn@%|-}6OIj!RN(vxF6em3Az5UgxE5mf=j;_>q#D%C)e^espjmv8gjyQ%;5cA$l
z=5oWKn)FZ;|8H^a!Lb}nPPx}U&0h}1Tp?lczVW%MJ<<QkR4u^cLqOFcvpa<{r9rfF
z7c?pB-HCdND|Ay#4Ql7v!Aeit94E70mREi$L{QEX0KN?|D6wz6t+iY4<~Un~WB#`r
zk{oNT+i>$M4;|jcfTYB>g6i~UA+b0r7=jVZcr22VQ1|yN8sM^NI+M0myN+*8s}Mg`
zU4G{b=(iu#hdyrW`_zO|a1q*1!V3Uji*DsV(>s_or>nWHxWh3pf${7Z7Q8`Y8nk7%
z$|J+=Jl7zV>sTSR+gAt<vtS>0#2$BnV2 at J+noKJwY=G!_y*G*OKTl^_jI(Q$4i&Vn
z$(E7-6oUBUg`CAKg9&`3&rLr+#S{fi>y;<=g6I%pAKXAs>)SDFasBzXNg7|vw at 1o4
z7#<eN>*OA;gNWQ}p%ItwBJF=;NEHkcD(nl&A|-Pe>;9o_#bIvm3ipCkf&ocRg6_qT
zQ#w6k*wl6*568BO4q7#|J6+{1dSgL(Mi-r>mch>4CA&i6>!ntL7y(LrML;tZ`tmT~
zA?tE^dHzc%a53iNt!VN}tBiviD;NUYSyoF+h*-(2PZ)g#tzALxQtBu`Hvav^(by71
zXMxrWWK95nFGAusTy-|J>OUhW>-AIVTA?@gYcY~cKuWZ}^<gHgmoNTexznJ)<ovs%
z*mPirx;k`^*mXpqX^RGcS0XtzI|^!=VqM26wlQda>jE2n6*&9B0 at o5#%rHATzpz?=
zWjr>9IkztIt!Bt)SUNEwLMfyXN`yFN&(O}5$S7;>U~PZ4 at U9~4RgM1 at 0lJqR=DYKz
z;jUf$TI?UYPCDsrlb66f=q|%eX$09fG2RFz=pj_Z3wwBwt`3}F)Mrl3;`b0t%1rIu
z41q)4raVJ}!F9;Ks7FV$$MKiIC*BV at z|fwNHJ4-h^8O4Fv&JWFrPRP#0fOY(mcfP0
zb=iT}e6GBSK-oKm)%JOez7N_>@2LAGY7xG;vj>57b!kI~&{k5rQ~2 at bgQeqHbkf0{
z$!RM9N*W055ER^J$ag47-~CZGDQ=My{^fFPGivmuvkc62J7-ocUH%;jM<!`Pv~sZ(
z4lG8Nq7?@RaF#iE=X}67Au7c+8cYn(F=Avde`!WOmeU~zEsgDywOxx?tiYeU-ZVbL
zWt?2Sjj5oLoP!V#RU?aMr at iTadU$<u>O<n)!g5!en?+pEY&+~+Qj1=Nr$%K8!+)jB
zs37hJ0u;dY;)S^uP9r*q-8bSG1Ed{13oG6-NdBOQiqzLiV57_*f)YjP?)c<SY!$3c
z{6>nWA*>Ibi at bP@BbVrI#+=)(0cgHNDW&s=<waafc*$Sc$s^Uye>nx{_bsBXzh3_M
z9;Q;ceBMYTB53&A8IGY7P5lwuhPP{DAqb#Yr)Q at u#O5Do4(zn4!;1A<zQ)@hRO|@k
z9M)&WV4%7Z&@U7?xQQi*l8GN5{%Y0nrHzL$5y|q;-a?G7^#V(!>>y1}xSfuAvY;d0
z;1KjYO1 at RAVMCSC-LCT`zg1t`lR22QGm+g>$Me_57-n_K4#S}^adGGn=*v+l>2Cl&
z5 at nMuG)eaXkITOuFFHT-VyGu5Z5YkpleCq&fT6;~v{l6$6&#69>E#aS{Sn1ExmHxv
zV5I at Bn(hrrXmtlZYY5WIc;7yyeh*jjU$3;1manrkB-PBfu91rv%C9#wp!w0*>0x<a
zp-dtPrQUg9iA#%!V6yM6+Ronzk`jRYGa)19|7(V&q`lnQUAbI%F7z8oLix5y>9u_K
z5df9<hbVH3+_7GN&bj`m7}e1~>f7|IQ<o2};-S(g-ew4K=$Ckb6$NfFhiCNP>IaLb
zNA;Qzdll1FKN{*(SVH#gJHLZq1E_%D<I{=H+G)SZazUB6gym<)AF(0#`azgc)1-CN
zIJ){X=i{+K#Z6x2c+^}nB;ihIW__rVGrr0Ygt|ST><fB at 7%9eu%VQ5IeDiscX<DK9
z$JwIHN*<B;H}$FNLM`R^o6hbqC&M87_6*nKm!R4$+mx<9P!b5-9@><rf3H)I=eu&P
z9*a3sQ&l{Mn`Uu(*+4~w)eiAIMtzDMC*wE$)bX5)QWwR5<ljHhL<4ss8`&_rA4kd^
z;S#C_-&>-sp70(;d-P6LinGx>j=iZh|DV8{`n1=<?`u;-<KIVSe;Zu~*FGd-<kloZ
zY3zPA;=e?MS{TL#X1Cn&LdVXkS|&En_+QPpsrC}^?(81#nCvv=&wrp$l;NO at fJjf%
z-=YpeLr$X4kPPu`X5}^ns98tL>W$y(=|1!#VPo$tN2zi?TVykuabW4Hg1bYQQrCnR
zXky{X`KghYCd%#Cy1B~Da;Y?Qoye9)!3(w*BMPBnE0MLRP~N5ewA9^8Q}T*^Fnha{
zK`)#{=YpMSuV#x^di-&a0c|=^K$}FPv$HIgR at WsSuTj5hnI%~~WFXOA1rf3+ib-tz
zLNy at SqSW#6RnX%^kk722G|E~S8Hc#ZeujTO>(gf%%8KMGkqh4?DQNN2G7E(>tbBln
zPK!GQlW?V*Rz|!AyZyd<RXiGuSi#Pm^yIVGI0Wf*o^8z${AqI|d*;pUA^&^EuR%9o
zzA^^+AV<)N|3tSVaGh2HR!o3$9p39y+9FQB9lm!#eCIxx0rg4XGQR-Q8L3XeBPww^
zlEbHP%*&0nMIwcAIdE9N3(}vVhpt*0l=M(u1(pfLT?%=k^x5t3Xj;&!*q<-}Kim<@
z at F}s$1n56wY_JRDi=pOES5`^IL7}M(Uc=OH54v&n<zP}mO9YlUub_p8k=LylWPyrY
zbb%x9l5<)tcr5E^g0>_N=gJycqB$^~Fj2}!kStS#Xcla*rlALSD-5felHz_S<Cfyy
z9ED#8Aw>V&5qz!!VCSk at R##wNC_6U(Bd9YsMgU{ce9M>Sb2X6c1E9)wIk@@-CmNzE
z?=cx&ItB;YAmT?)>9fXqjv6;knOoOLQSt|-oIWoLm~~VdPsC$W*ag>+I)>hE<t`*S
z;0mvU!p{@^ERy{pgs*js+6jx{;tw|w&xR~5Lbvhq#daNiHCy(!EjgLR<egu$M{yU$
z20#BmaS3_?k8m^*SmIP*?@llD;7~0i at M@AZ_1tEkh0+RuZraSlJTj6+319B7vD2EX
zP9`crQpt5Ld^j_OHXyZfQbeY`jeU!|abe$lW&Q4#hRZki at 676MYp$$NNXc*|&vT*8
z&;bXVfR29!i4rsfrfTNq*xL~Z)bUxX61shBAMl+SwKflrki at J;=ULmr^zcI;#Iyi*
z(|rzFgBGcrgQ*Y8I1eEcn-^ERfBpeLMNstJfYJ4hXq<84ufJjgG1=e_D@}8V>U>_{
ze}JML1e`v)njUwezJJM<e$~;+av!*mmUU<3HWZXLzaZU&Wp%IbcPHea<FZCRYWPWa
zF2(EI&+?Jyz0N>HuN91~2rck62Yx9vu>`DEX#<QdxeX*q-6nHZ7zG0lu1&JfVkU)^
zo=6k8r*^nAVa`>pG9TEY96Vog^167$8gp-QiA9YSfq?2Y5#puJ_v1Vm&;S-;Bh5G2
zFB3Z)6x8}CMwKuq*qP~9j~KY3KuxCrkCX4q2C9KXx7OvkU<0cU8$MV}w*uGe-^j?o
zj)wrDzyFI!v>#vmLGmK}ea%IHv$)hmS`(9}a0S=QYk9JKrW8Vg at UB2+Pa<I^yGbB&
zlDvM9$X#`$So#c@%}XKL#w+sVQYub(@v1EoUS at qln-O9Z%gf)EpxB#rV2I}jOuQ4J
zbCHiPZ%*YeDPCA>k@)O{{9p7PU*(L!gRU5^axM#$^5vn1c>e~#wB(ft|9^b#UhB=5
z08(6%4|;L3yugb>y$y%XK7xnLkz5qp(9?l$w+SVD^hG4PgrQ^1XT?F}2^M_l>V^2=
zbwSV<9D266A%SZ$*<nwC))0%&js at e_9H^JY+<XuUY=5#WeIuo9{rdt!64&aAxv6L_
z+b9}@h6rF8!`^0f55z=a!nhgX63aNF(V374V&sHsZ?RXJHZiQ8Mp#<v+fA at I4k)_T
zK45hXY{{Pl80k!ktW3te-;}aLt#XD&K^*#O+3!6MycuSZx|u;uiu*<!D*yo4X}~B~
z|LZ()DCoH{!IJ$!PTcRE6H)A^As_3)O4K3XN|4pzpF;ih)j?uLF+BxkTW;()?sWIG
zB_2dU?-d_hgu$j3*&LC1eCQz#<@QjGjB3D-8ev95T}1p~6>_s-<O$X%WYS{es+KE$
zA!`i$P%lKa5tUnLug6||!k~mzOQ at -OG{diXXb<L>FeA8{S)oFvnnGvV$Qr8Xh$ygv
zd+kwlFF4^0TU~u4j;4|iY)R;bC3FT_6%-*&$~@mqmO2X#JVMtT!-tA4J7}vDI5(qp
zsXKSv at Nh@ChE1l0M-oE^6(0M{puTeWRRXOvDdT0j1JUa6hO)b}D(hDR%Z+iZP0jku
zRbGMOtdj*o4SshJU<^^Ir$~IukKJx0Y}qA`?_O-WXSVIA*yoEX?cNlzz!)eh%4jzE
z7lS0&)Q&;X-NVk at KWqe!m2oF7_it?YqqPC!x;WU6tIpf#Hl*AEre+k`_hU$>XJhG=
zP*NtCgAR$bz%f&*JND)@3}dre`C_Ck+XYinftj!Ie6Cu*$Ao4%u3EMJ6H*OTdtVY&
zgFA6HMo<qKCGj=+U?etMcJgO?;!gD=_Q^@~tsUXD^c4#JMFuzbEJ8_r)-NK88zWx%
z&Na;~t*#kziOrYwH88vo1p{%UfQsYAkU8t~LmtR~Oy;A?=RgpFTq)^A>)dPOemRRR
zR4h`NI}Z at PYOEzek$L{-2<pz104<PzoQm;t&f3jliD~OE`2saYl#O8HqA7EjV}-9j
zXbJI)jtkErOvCmw-gj09?U;K|MqFe_zUd@?znTQEJKRgyRbNiJ>y2Z48RF!gK|<xC
z45}a}IfOJ9`SO#!f~%RKa<=g!d8$gx=QVC*MyzwJYH^Jax}1Q$vi$0)hzB6Uh%o)O
zNs8}f5X$7wUAW at bS34l8&GB}K#jB&2eH;!b2=%#5`WM2#pLx19Kk9-wEIR}|vQ82y
z&}((7Jq)vsDr_P+{yH&wa~ZD?f;`k4s7}cHOvag8<tMC8SzJVjn5Z5EC>Q4s2s$X*
z^I5YJ1UhaU^iC!Xvk#+T2Nyt6<m045ra_vWXJY4$?lN8Q&m6 at e#A=~Yuz|Z2wtTtR
z%z}75xW?ENc at vwBQ!3aRxUhR|=^Uw0c1RsQ9+Raj`s;*!&gZ5e{AadCrA~6Dtpq5M
z61+nP;3u{%W=a)<?Wm+X%}~l~9wv5w3dN+0grT&Vd0Vo8*}7LwXx<TnmCl#EYqZ_c
zNKHb^8|%IaGh1eWSswo at uQAlDE&8R;3NLnRxdEx;N)|l>=QvkLZ<`;N$wzWtmTr<L
zmWjE%U1Z1 at tXwBsgz_@uKy at rtd}VVGy0Lt7T|zz_Kr|m8bu5CCxpR57Ql5xbskdck
zL#Mptqa3b^^&}VBCdpF!f27y32<lLH?_{(ln#IPx?E>3e7D#;aq!R>~$!gDcKp#Zw
z?rvO>IT5CSWBy5z+O}!VkVV)@OAc;2C6V%fhCy_*IBZ0ZFWg9A9Y;N0-OGAw(DVN`
zYMqIcv*jbhF{znbw}iuWCEqSni#AZeXmY|hYQz7g#)=8PeuhvF7*<bqXQe(jH;oLL
zXf$#dZi>d046St0{C)+0`aF1}l)^<H?JuI46IL*>QSj6vA-#2sr{?*~eIYI&FMO^_
zBOmVpxIXWOJVj+qjf#q~dWL_kp#bmFht~$`vRTGj$Tq{M!J)7oa2R+izv)mVyVMkp
zx<he{v7ZTza>LKn2d{q7YH1n`65rbYz)Dn&`C<OUqZyP~4tB3};&<137Xns7_2;KE
zn%E(mLX6L?Uj*XN{Iq#1sr<ngS&=*QXQsK9W{{^DgLf%SHuGCEl77vTKA!t+?Ds}r
z4j#8H^ZVr<gp)vK-519+Y`D5I9QP0s?g>(Xp^Q&vU}r_rx(slWVdDFrPg*FM4Z9*S
zOrrfp at Y)pG-)D?oG^ldM243qIV8&RT7J1`ea|Tk9+9nC=hVlK=PB019t;#{t5GCIK
zykY(CCOD5bcoH1k(GYMI;=yjM{JVoBKb;FPGJn_{H_HfHsloo1yaUM}&%!JNZMgfp
zgxj3pknW=RR=AbXbA1~NFS+VEJ_Jk%P5DT7uZ_rVh$6*c;fs3F-||-pk(jdBp-z-&
z at -oMu{Gbq+K3<r=CY&#q1 at mo^h`k#uDMR^LlD3~n>b>>ygSF%lH1m!2lLVyTlja;3
z_u3A{>Oz9Yzk(DG2C?0_+WsN2mgOUq@}I-NV<2GTQTg{1IA8M(1 at 0Z7gg>uPK6$K=
zg8t-5^fqDPyKQ)cOH1}H7u>g(#W~xj!qjO}lr@~L43l#swD1FtUum0Xq2RZL`{3wb
z`+c5`=6Eqty8xM!58q&J>n^P~0Zv%No;L|?Wgu$dxy1jT*X_lxe7%sJvT-;M<f=xw
zH=w<a)owfvDgm#dx0oo1$S!Sg3yITt*TH@%$V1oH6M!Tot#yEDQP(m#m+h0zof_YK
zWAyM at M9X<FkyPCKGkVet&ymD>Ks)S{oBwplM5;Sn<SG<J3NkslRFD&AQ5uSHOVt)|
zMn)n`wbY-8?&JtG&X{$ZldpV6+&#W37ze>I^nQ*Ngp>l~0qwDV3P3Q*{(L5TxAK1g
zSH}G4u7&^iTNC(Nmtuwj>vO{emiWz=olH}dNxmngof#^r7X)d4;XzD;M-UF9??Qc8
zlA?N$!NaH`YvWEtSLvTOq6u!L&WPwWgYiLCgc|guSd<#uC*Yb?Uj#VNfsi*YgW7I>
z{p*Z{qG7)JMUy2_nWh(f%nGY_oEX5o@{_Hjhzql-0)QUO?Lix=NGQs|f#ugNF>+b$
zEj>ayEH at 9PVeL@VksRlG_log-Y}ZehQw#rG9!5lQ5)HpEprz88PJ<C#PS9Z+tg#ae
zY6TJ$Ey&E(hz(V(gs9MqpI1lWC1=<(XmY6?_UTcK8IpLxj}Bd6=y?5+WDrry><S4{
zFY9wV{ltYo&Z9Xy8wa;$HZS}PP+r<~dzjD6KVidu5A|DK0X_vpilRjt%bgSWven0v
zT_bU!uMJMFfib$b`8kiu0^sc!s=d=kqAh<du2Iy^vLgPj^9&*jS*hks+Mk2S!0P_L
zwOGzOy@)zkT<|$|ibt4BW1FWiJ0U|t`3YvNS6D|HL<KdnQuZIK`bGW2`__CgA<7je
zYtpJ^yDgnHnpB+$JoA}&gD{201W^ks<QZKAmHA+Wqh19u-z}a%_^8J)-Ewq4l)*1`
zz~PVaEcek1Fun4K7p0+Ano3q~Q<=}U;-;zZb&VoR>h*tSbd;K`N}>geS<Y4l?ke`K
zgmt{9TE6^*LUC<5o at MTwH!Pd&75W)!sDHF}xPfUbpXx&iQ<>3kI;|q<Xe&%UvWyDo
zwM(HLN5-+F)ot1dT^rFxJ;ku*Cb8z#?8e-O#!Tc8#11U2hhNP<Oym?kbZo4!9?GY*
zzXTME?`Eea<VV^l{nz|8ty707E@>>Jv~NEByjq#IdW`POkMQvQUHVQ?ohw?Op!h2<
z`^Y$*7f3q`)7n!SJl1$3eo*ivlwPgwMLvp&b#j_I>zJEOLviIHx#7;eIx}4|C2;As
z0m+dBnzr^;d9E4vsE7tyFKmOlK76r3>gFBgU{cZMnv9-3APjtJ^p-zR2nxEM*7_2^
z_DgzH8m$)qSx(;}VJSLictK4EF;Zar>Pu61wUE2whe(~9A#u6fW1Y&nEyJ>_8k;dp
zh0R+-hcJ*Qaf}6$05RfJ<*p5>cygxg5^N$oNxZzX#S4eyZu`iuQA_Q5^OMfh at UFIU
zmcOBn&bQ(OmSSq|`I41!Dj}I<BZy)231$cX6C~g4+QU=t0GU0FQ*)3pcmTvFUp(;;
z#*{=pXP#SbF`@5aCHz)Gc=WbeR~WhA<AXa@=#dh3^x!T_M;NnL7bLnc5xKFG{yGzL
z{SvMl`F-QO<HSdKM6*#-Z`V`gF?F)I<9H4)MplX2F1HsTU};7MADB`kRPlUdhLj9N
z`aHH%vwCcP9M`ym8X19f5K%CYZx3OAO*mXa_>(MeVSnLuIMzHt>J~Jk<jU=i#Ai2*
z)?*K=={wyAP at K1{mOo23FTZwmfe#t=zgOQ+c8OtFfGSgo0?mxIy^D`}s)d`}Ojihc
z$)Oh2UKO1aqf{X()Oe^--Sl4Y2CnZr<fE|`7>!g>Gj<U_t4L@(5YNCNncwUS9aLkp
zu^>V#3f^pMo-W`Re+M5mAm{4;;#KeJqgC%ox^xDvV9&Pb^tv2l-2qAS?ut02j=2N_
zJ9F{t3;_DGIT+3I6(iyB0tBgl&2`iib^_1#&*pBgnd<YzT{t0AHFs6J4hM~WTrI%1
zj1Lc59|#c5vOW>U*wFY`C;bUpg#@62W1xde7tm<hgCsU+Cbt+8>pIv`DcYiO)5RBd
z^6UOsNF_~37Rj+*MKs=|xRz7`zyVWILh%T+A$DzRvqK;N<xXhNT2<RWN@}Ms&xHb7
znHB$eI8Z^6z)|p^JRegp659&fhUfaUv*@VrRR3yx6{@4T9ZNEDV;*Ko^GP$$Qx?P%
z at YAerB3_IIJnljkK9Vlp)gNZ5aRQ&oRQmPW!1S6iEd#<bvnL5(zti>2Ho>l$Wm=|$
z{}N&Ui%$T1RE^QX>MuT;foxZurIgJ0(GIvgTM^9slu9M;kO}VVgcPjcr at VMzm79M?
z@;vVK>;)pd?W2s|MTOHtxK&;sWi)`~SSgb?YLEpOEG at K<=VvSotj?|)wSk4qqGE_%
zPUmux6jFwHE9y5pJ-}SE{^}$x{3e%E5Z9gB3u%+|;@~6buN&G-Lj9xfQZU28mu==T
znsRiT=(S|LMYm3q+jCAF at aq<Fr#IZZG9E2Yu6}!UsXAlHT53yqSVUZggBARXe1H89
z92jB&-Iv8OPH{M+y at zw!5A7~*Qc`Re%C!6`DcKPF^Q#d3GkKSR2X>{1>e=2BQ^*Lj
za~!S^b$@1uoh at Ct5mrIBV)N}#$$3RQwo7WI-rhmffd!7SFOQ{bEh8p^V6|>X1aC+2
zb=X(DM7;jP4r#gPwZ+GM#vp*$kU%twY~+5g-zExRNSxB6wkiOVw?&I<KK}C{NtyoC
z<a_0$3Ei>k=k#AGkc&#V225T)YEzgjLKP*dKG3}tE(30V?qByjnVR+HwpLna2P2Ct
zunK#a1GlnKg!}J|T;`vesY^|6ZX(-n4cb*@*O%I-T?UrI6i)+;a~pk=gz5T7!IQLw
z*Yr!#=DTmmE8P9~H at c4>iyxlXu~dRMEgUW809H4yIP#nt>eHrg%g~o&_gz>zL1dz?
z7}~9uU(^*a=$=>TmU)1kI1OLle7&mYDy!DT-Ea6dmj=3^)}|Yfr=3>++U;D4Pk=5L
zYx^R8E$y9t;n)AwSo{SI-{BfBswncx?RIw=YVkX}9s8!9jw`yu>-<1#^^z?=x7PN^
zNZB4dp+c!^&xv(dk|PgN&)8p6h5qw5MnLprTEt6Dzw)$dv~0%#t)iKFL4pmzdgR}j
zWC%rQAbW1qTN9IRKO$oj5IDg~F~%<1`~|`udVPp+bsdprk~4S}7;jUZ)2tI9O7Znt
zNXHr#N;gA6K{9uw+=Cf0^_{u+F~s at y4u)wv%$(m~R&y9vm#YqeJgj0j%58%YfIl4(
z7sfQ52houeL$JTN*LVhDqKa77F$)Vl5rBy7X?dA%TQ{jPk0<y};8>CIpy8i4XxhW*
zb#YnlZtid{n=HX~SdW4`uc{d9?j7*|vT^}r=5s$Z7}EH7I5~&btKJvt6mv3I5S(|y
zbhW$_C(7{DWU+@;($FRs9);L}HM<YR*Mh@^C at AvxZ5Xyahc9AatygV|2hYdTQDHBa
zZu}0Q$aIO$!(yxFJ_9=n$bdSv<AgH<j5`^Ht5?6EkCFd>Oz<ZITz9btF93HI=`RCd
zHnTsqN5uTP?_NUCb+DH7=J+tDYR$pMLWb{?XfFVd+?WvaW(UvcvsrJwFUyF){uzQ;
z-fp<xN1*2Ct$rq%(<Vpyc3!ym$^>Hay=X1U9@|o5Po at CxcQRz0c3jG&m at V$_F_8GW
z3R9HaAkq}6 at JsDjt&;?=OIW84?o(&Dob6QH+WqvDKe99A|0n8D8b9cMTPt(rJL&v(
zIjw*yaeql&*jaWV-4$3=#*zDA;#KY_`||Eqgqhr_P5^s+B<UzDqVU?PF at Yest=yq?
zmJl}Sr7U<WTT40%91I;bAt1k#l|4j<bRL`i295D4**plPYj3-H<V;_NJ-iGOCG19A
z at w97i3jVI%%3(n<-bamk at WdPGP|BP(D#-hKhTS`Cm&SC=dh*2fJk(<5MVu-%Irhib
zPMEQ6EOaj0C^5!JhGdGBtJo)iqIO5CkHZ2qsYkmDYp6XZg{;af<r=<mhYOOu^bcFH
z&(%*v?1;<76=QDv&mLt2+ at I@0WYeaNH#rgs2}k#KY)4=Rh<h#8f~<D&(YFIkwKN{N
z6=9Wi?k%b3$k9m4pt}smwJ?mIslPYGG3)ur_w|@So(r%qCF2kfS55itWNrnoQI!mw
z0Pe+<LtFxkzVJC{qgwN0HgtzG7N$HW*jY466V0Zk*Edts`!lW?#^t6IND6?F8uipT
z)WfjuP`?WK&AtxbiBC)q#&e&<bEGevMJ+^)ag}5jDckaWI+vj~0bk(+c-+uUNw5r}
zQ2ngB;+Q}VF-K at 0m)fcT)P)mUPdRan at Fw-Q-wG?}GQ6<WQC?SH*qEj%Uw)io$plnH
z*tF_xl~meaX(KW4th45FhtjRwNZNk>KkpTmM(kmlgpg_)dD=1*dgmb=b?bRTg$)l;
zpvm}1IFN8ZH8s3zyGVU}yQd}uK*vcdin2DZ3F{>RJU@?2&t>3F{%E$y+#Y;4Ie>n&
zRMmu7p~A|eqa&ZwqQj1>;UBsg#EGT4^N+1nw+l;c@!noMR`*D>x{eaw{PS#}Bp+Mn
zE97-g3o+M7 at p<emiK{NML7yEWafyb24jC4d!40qvK5^Pu6<HWA>UnXO%=~q at mwoo(
zak7nLOnZJFgNuh%G9>7xyiSm>tfid8bF<o_^<ght+?4Dr at zahG2mH&{_z;?+T9*0{
zaRu at 4C}~~b0p?>?cJ4<FSF=soUqM#>b|2{cw_cW=X_*w26bvm;N95=BQaYl)wU!d2
zqN*2V?KqN9-Fi>GK97EPJ-+dh%z;ZCJ2Y+v%NISnN~NS+ at Os=rZ6Qj<nH#ujNtm1T
zm2%~Pu(m at AWbS2dEz&5e>0wW|tS`*aBJ;@EzXx^e#H=<8{|sPatZBT`d|i`HLJg{P
z at KLpYc6-P8=A(N9YJbR>c at nW!b+IQ-<uF`~_cLDz at sK(d$?2YOIe{&W0adGO4Xt}f
zv4y3a`mYP;W&4;wxd3wp0!yNftZ_T$zS33y4{8C#jnC^|>3p1->LRC;8FaCwh%Dcp
z0XY4-ilZ&f?>7RFFMo)ajaHo=k9sZQMZPD5fj=%RHc4oxt4p+Occ7cu39CE~%8NT!
zLoO66XsgBuR%?u?{(Ll4tN|330u|*R6F^X0QLWW-eF)2N>QQ>>M>yGZT^w`OPPv!x
z25VVk+^xyh&rmG|tZaNDr$ULS^zx9cV at h*rs1}(CmY^;5iPlPQm0+BrU0zc9Ai+$L
z`{eAoxh}6sdZ$)kJ>zjhS#I8yWS*!uMyZwOdqc%h7f{)aY^7R)grK941R=E6n at uiu
zZIEmKhvpAjNvzqI^4{~|8dqdjUyIE@*Oq0F1N4zsvSitmy9Z^XcEA+n{Df=mE|FmW
zL1X=PGgk at lYZ6Y82i{gd;1Olh#IJz^M`W8v!4%%Y8Q#OBbvAe#Y#RKrh6wE(5XOb8
zb<d at uVLR79C#$(w$Up&i=rp;n&%SmrEVsabz8%0OU*1MBtSfd)w3=#nZwLtF)6nha
zlu4c}l91O<gicSDh9X)#1)q|gC3&FJEKuVUbeht^E at 5QxBZo|*jut76DiQh7=a9<k
zMaq>j)>RS8>+fQ9iauopI+0g4$S@&Z<~=qw%w?>!K_D6`A`d~I5WY>*Q$NU~HPB}^
z-KEx%4)IwT>h}puaTErlh&dbZ&+<XL>9py4DnTHrx*mTYjAU!1Wq&(~+(w2n9BHUM
z5aO&(=?3fM2pao?o_>J8Is<%t&z_*~v0?n9^fcOz`0+Kqj0sXJ_OKb}H;azfboxI>
zItn2j_jxBpb5TF4<Or(sg--E9U9BoUA<t6lU*6+x>h=?5r`D5M%)qLw$^lQ(@ZepH
ztMcqH4oH at bq?^UlPU6I^>79wbjZ)!@E2^gYUyw;t<rC^$RiXM~wV4SHofOQ)rAB5`
zvEIMmCF};(SNx|MZ3o3s)O8G=)MGd;^UEdXQa<!O$h>#y#unZE*Kh*{#+7o|TM>0+
zDGQ-5dSfYq9n;1W|1kjyFIl?3T3%Fpb}7 at pm|P()QwS%mYLn09!bBcWw+7$~jyye-
z8drAK(*ZMdq325U61;MZ%*W+tu)eL#%4S3Y{(E`uX#R*Z57{cHq7q$z^S*Oo%Jc|N
z!Q_v97U1jFoQ}}vA5Z@`Dnw^q=XeJ-FY908y#ch88I>KV%uv8=1kci>I*F>5Y&Ety
z6}+lk=Xl{d4yEpMi~K<H0QKEH*!VcQC;M60kw2AJ?+bbqP!#i>WOkWBfRpGr_gUjf
zKiSR5sLTDgUKfi*=0j*ZEFe>}hf)Tl&Y-aJW$U3|C|&UiZ<@B?9*sn3OT3?(8jham
z%vnr6j=&m~k2+Ywp>v;~(h3_B+AnBu%&dII<MHJPIV>y1 at mAlqOww6_I9rJGsf}=X
zHMxv~t(Ht+J;eQ*REhRmQ`6xbVN_cb{nEcu+QZG+St$oPCQQe|**b_NIC}j%3i<mM
zD&gG+G#WeP74V%FRcP=LcgRmQLc7L(q=%KW)^<k*_-k4VCZC3dJj4jsAzo0}uH3FA
zPydJJqdIi(sp%^1>U$8{ZYpg)<7V#R7i89lvJiu(uM04k&4?uVg4d<yn$=^)uit3T
zHUf+}785t%&{~_0h>7ooCzErxN(GxZ`W{jC*ibFN+K5-aYInN<w(yhcqb(Z<cZ`EE
zftL7Zh!-QKbRZrAwk1%G9}m?S?MO+iDByP+w|J!%5<&IV2Pwp4=WN3`W*baV%;d%T
zhU!o~7R%GB6kxqZ5nAZk1`Hg30rk-vM;fzZs3cn^K6uHan8iV=8?a>*X_GS&#eCRp
zDnFGP-~mS90Co!_YQP^;iVwpj8b~Yfyks2fM6_H938xk~A4CsyK=pZakz2xaemfw{
z_Y5y_a>m%#m~Z+618U4MybqW0Gsy!D*$_)vMm2M=e=(X71u!6AUld;VuZG4w3iP$#
z)c<dB&~N`)eERmGCP at QdW>c)<U<WI at v~a#@JnH-5Me9QDNSqnooB#V!vnD<Bift)H
z5s>4dBjE6;&V6CbFnPmWa5Wu4T$FCr{b~j`{NH;{`tB17dsOsVpj$wTDhsCpzJX~$
zyc09^Lw!+rtI1(vr8_$yeFE5*7oM=3r@!PeO-(CKvL3pI^zCBs_uw0Mu8GAD;Ir|_
z)EE(Y at H^M810Mq{l9D at TG@+cKmd*k2T5J?j(cBQG9I`_AOG~O=PoB90tmR`r{(e)b
zdYt}CI@$HMs<l&<pkVSo;T)LjsCI2YZY**MBb7A~eyc3hYeesy0Jf9><tgDgyS7?o
zo;9R7b9r3iFDlb-5xXK4W8A;@9YRN))M$-c at uE655J{u@*4PX&+jD1aS2jhR)n!05
zuAy9IWFX351b4#cw{6^S1?5j*jouR4o;Du2i+`{eP?k>w3zF+v;N at 4g7!kKVcp7;=
zTLR`CiO-WPJ{%h%KNM<IFoiiyyLynDr~>0S$u`J5JBBO*_MHV9M$k&H`SC6^?$SRR
zxUBdB+D~~KoQP@|CK?KHVJ`k(wp%nuAVbPgkPEIwzHjdoa%A*4piR#8lC!9kn at d@k
zP-r5qKI>~ab8&soJhlwAy}d=LlJu at dLb_W1!YBJPzv&HKf%vz&PCWKc?hQfvax=wd
zf9*L#k_ft;EcTat!6z1IfyAC}iZ4$+WTQ{WLQ3eKn2yx(71RY;Zby10zf`Y at gX94`
zR^HnQhuOpR77Yoqf{sQ*h}tF4os`!d(YC_?PTFoAe4m(ULSmqQ(q5YhW7<ark8SCY
z=Y?O9j{`3QDHu33NdT;V7YjT|soNwJI_S6Qhp$kgYkeq}YwLS^AtHEIJX1{fV~Y+l
zv~>?7tO1Co2+9KYH`j(xB^0wez*DwMMYmix%(Lz+es;5Z0;4blW2=61VC5|T%1aLB
zJD&-yp?dY at Njvm>t7&<T*XemeEVPE+ at lGbb&26qkGUE0OcI@`^RmKqlDTnSWuT`!d
zur^4l%C29jFRBc+W^9Y(){qH;1xBLK@%468L}w-sC~{R6`~ZPfD&30ldAd9Y?Y6hp
zQx1Mbx9TZ!eia`>jOz>!Q0N#|m)9Z8?u#>V!wp78?~fALZLT}fUb`^SFf5Z2h5pLJ
z(DdMC%O0mNC)N}}0*m4=QmnefZyFdTpD5dTN~?zjD6M}>Gtb2|gk~Xf68~Y~M1<^~
zjjhuawypq@`IBD=i<8Z>jP~Nz%vm@`ozXiG!v#`9ECeAQxRLq1H3!#s<G#U-_vnCX
z5HF(nL)>uejQ`xE5`dV%H~~FhAY|>+`gdE)^Gx4+2A)8cFL<fml8-}Gj+~0^cpZ|R
zheAwYJqe{)P|ZSI;H&UqP79K1=64+$H2=5z{3W=8R$(I$e}>19Tfns%bh>Ucs0m$B
zum;2VTcO2Ne)0wW{*$SF(5?U at E&o`^sdTk;%>jjVfci<%dVNn}`l4Y84XEtmLEc^v
z7ay(@?g=@xJ|JBxbz!GT<>XgBHLWXOc^XL|Xk7>fF+XbbZ8ueYconJ(KNE_<QhC<~
zb0c1eogTENpU+#+8oOpyb%_f_6VrsP$wWVbvKMD)OQl(=BzKWk=scwWeKxWQp1|AB
zoI^d at 2oOASOZuc4UGMWy2`%lU_sKZ&g?<DzbYoiA-KUJeeLC5wB#BV?IQvyMt+j at W
zdKKtLIV<b1%+zw%(4|dNs*2IhNxm`q(o2*NdpQq2sa5p?HHjX^9a`!d5D4LnT(26X
zC53WlzFF>DR&=j7_5<#Y;Di3)W7^k-^DH??mS+AFcw+V24&G7CZsxJIIsZk2jm0Vh
zXsq!~E_4U!p*=avONtgQF(`Nbn>;oeQ%&-p8^f9aJBbSqdLGcrXp-3r#>W9Z)$k%+
zrdA2ZiEDV3TtkxFh`cU*lrjqQQEPnlJ}V=-J5z{ELye7B&o<dv8_K6Q2O}#nv^(nR
zdk}gSgxdaOH(g_Kt5<8TszNf&{P4ROF}G1zHiU%p8-4&TKB;)?=+VRpgX~IKrin8I
zjfyY+riz9j8{Y#UUJa|014jrWbxed?+yxpBN(U#96Sx at 87dQ-Ax~V3hcG!oTf(&)R
znh!`;^V&fp2CZG;sk=aFN&O{-Wh|3hq;q7jXi-y>FZuaVuM5gYDV(dU|5FWdP*+jE
z;K#MOl!hIBQtipFgcesjBkjkBm3swOa at bmL=j2SIK#cjR&wTkAq9GI;Ji!}vCsLkZ
z1!O>6u7IeV?N|t0Fp~OY#~I~CrWH^PAh1ui5d{g14fRm6G4~>a;mwR`t3&RSu;x{N
z6tGrK6L*CwSS;3(`Zj6isB$U<Ue~coRHa*Yo at 70MCk4|LTzAJH*^TH=XpXJE!TAW_
zB$3DvCVU#<k2s-`U3KJQn`^~gwR&pcf`pJNFO!XVBu6314(nR^ho1IIKfCG)$zB)A
zW%@PuljhKf3fd*{tM6H))*#TzR_o~C-w_*CmD<w?5$HP`veL4AMl6PKJ*U-+Rf_0@
zzbKntEwt{UQm7>FtCXDG%6RpxXInGIoN(>9#W)okAzH5Aq9VZ2t%m}PHCWQPIQSL7
z7Wz&5CNnuj0+j;`TFXk;SRG*)3VqgY0J@#x4H^g7402BF&M<0m7OG^hM7=;yw}V=9
zT9!H`J2uPHZNi|Z!iSyNCTQ7EEt5n{k1o6#?HiTamkJ4AmBwx%k>(6Cz4 at l$R6~Zq
z`Y>6+|2T(;_9oH~)Ep%?8urFnnGUho1B;P)8hPBy;}v^^0)>}`BIPA=8xCl*e&yw;
zbu1^>;CN!)jiv;ZANpzg`O+McAAIs#9~z~a_ at bz4&jLeNo1jm9`(l_!03!t%+g=u9
zWEiZCPP}t}h(idH$}T>7Mge$elDbZTEQg&J+pJRtcj4WW2s at BcM62lBrYPYo@}Z!K
zw8x?sH>BT!g084dPoofAe|;7~X0WayAh+H~ts~VGl^$vu$b<UO#~H+>hzHBp33#U5
z!~+Z5lG%2O$%#`&BvV<zU^PBr);ABkd$++!KXpT6qpn7qOj1!-H=Kqxg+$CSMxLB@
zYC-T&gq-PQXYdQdzm(6Zqz1lNG2V#y7c*zmf<o6ebKHgl1;d!dGW0U{R>oL(wwX!G
zMQ8G~dJ$`m9pl2g9ZD)<HqcV54~9D228D<Z37L&>B(H;XL1D8Caed(Ij`vFP&5vc9
z{>e#7mT^jtp{zgN;mrLUG&!g3o^`^t7wFAJJVx-o!H*8rtCnzsbLk?^`&dYFmbmTP
zyc2B%wql at 5MMtka5x~#lQfOMb at i2*@?d$YfN<Hpi7Tf{L<QU%Db&I8B{beS%q|xEk
zCf9mI%`8%U2qZ-OzyzcAT^)R029)n>#j!Rlz$*);UE5BtYc4K*{nA}C|7I%Sk0~}8
zq_wcrX=YK(wVGiT^UZR at r7^!{m_^CGH|Qk4Cx+dM^>Kqi3 at n^v!u+H%P|=$O2FxS@
zr~4ok13=3Mfe^$@`y}h`?vT%JG*`rW%bTXrC at iq}bzb2{?>%YEfFd_m2{Hxkws!aE
zypZt2tAkB4H;>8H$`Y$1GFRoB|3{|z4WDE+=>2x<<hI>nLFwzDeo0l*=XfAlD#19e
z1Z!Z^QPl0*N@&C$%B42uX$!9i6eqR at iMCf@Ql1qW4&`_~kzxoymD||zF7Yszj9URU
zIpFXK%nQ6N&VHnI>x$U1z2YR7ad#(wB$fFdAFb9=4suX8j_Vsn{#H^2hQjT3&xFpt
z+qZ&oLN3e_IXT9HSO4pmb-z=Glo(u-eidl4on)o at XZI_TT7~LwAe>u(e-}{wxJtx>
zCC~hoJVX2Nf9i^oE$UP!3oknbm?@c^Rn(so)&C2gn~qpTLk&}VG8!TwT8txVgsV9M
z_WREDkRaQj(JF6SSilK`K*t=T1?Jh!OwtHjcH|s=Bn$NAeRx{sy41MkX+fbO{Sps=
zS)=xXHg{Hq#ksFGM at pxeW8qaqJHY=IKT$RKUXtredN at nj$2DFdFtm2)tF_)*6WsRW
zNO;+UQ51eUx!9u2vh$OqKjc%tt<BP<24wvvR@@x8C^|zrr4fehDRHVe+eRM6xt6s<
zfPvCIpX!w>t=&c1;ChG&G?-7uJ!<$8>o-jiowYqZt!J9u58>VhgFS=Xlywg*y~Qm=
zV?=H45V at Y!+;8T|@bBuMZ7 at 9F(vtl%NVlfUvwm9pXQj{v-T%RMv3jGvD$ILF_uI+j
z!E?56LO=)hG=>h0n?U;Oq(w4oTt61qc?r64S#l2Md>Y;BL$`S#g7Sj&JJJVi_&zGd
zc#Z$8;+3SE*?#HEhOq6LAahI$c);SMG*;r<r&fr3Kh!1Fpm>5T>ExyQzY+jZK(4>1
zyCzH<7Po@%Y}zx*^?{TF2>T2>PmvhF1?i|U!VqJ+n?WQ(o!4(Tb(6QR-do9?127Lp
zkaICn!4v%7p#1$qnQ&i_6lfw=Z at W+sMTR}UQF|#Jrs$q?E-+4n#2toFcsbMzCmI$W
z+OJT(?CKZFy%+j*96b7wP1EzYSNJYYQp<_3duWh_ySO<oG2;>fxB~<C9giQl4N!Cv
zXQf?qBQXP-w$Wu!<ns>i$|DhlTiNNF{wk0Ad6VLPUGhD3-sdF_M~-cs!R$x7s<pD(
z at u$ARbSH at VpZh++uiF2U;jjcc+Kg+y=L|+5vOCHffz&uAs(|2+n)sRX2NILJmj$$m
z@)tpDoHmE)c(Kp)kU%p)jB?mrXzo2h06ypV`+ae|D*Ke7=)A$Qz%)OQvTtqKOu2$q
z!?MddesVpfQr<uNFdF^N<@Z9 at 43hdh?i_y2%%=-z0d_9C&lGGSz&iPzkPoR~*$_{Q
zzMf*h;{f%DOF2>dC@}3Za&pIpLxX&Z_|u at TsAil&jHcErpCEVj4dxZvQ1SSmFa}L`
z16BpJ3!HUud&9{%o10#+?)c)+WO?;Aw)r^|FR;2)DsZ?)bxG-nyGPp|bJ=0B)2Wa>
zH(hLmiVZ#+rUcW@`5(4<qnzy4Q535Yiniu6ffQw$3ja}3Dq;~6+H|RAxAZF;46Hiy
zl<!KxWVLfp!CrV4xYo(nol2H?+0Ynj71%K;-86Iu at +24oLzTJ8z98%S%BmFG*^?{K
z4%-Y5ykD+Y#DDO_a16Zpyp6(nYC*<(d&u5Wc$`HCo3GK&NN5sidgkp89AU{fL_QDj
z+8i~f|D$?JwTwNz$dR~_47`kKEnN^FQd5E at pzn6U0rKPr+C&K}=O2~>b#!>n`b;->
z2jo!EUV{}(CM4mKKC#M!zzl3w_l4oa<56o3Zw*8WX65#a-p?=d=yrHv#me8!7O@^Q
z;>vklMbU$n&~~C);Aytq*})od_#{pMRxTxAYNdxincg7l$<hTP)j2yVz5qP5R?OWW
ze&UOpY+u5p^YXxN6WW;74SB#z>n)He4Z=FBFA<yZXI}qq<7xk_pY;%K^L#4%Aw|Dw
zxz^P}%pvAH_&a`)1sYDW9+F3tt(DociRcZh2Y3~%izJBqu~uCr_6Y#-(Uyk`FKfOR
zJ|%4U5QnswAn?3mIXRbLLVs>9*Q|sItSn7JlABeS6bTAEbiKlUqE7-3sL$LXo{XhV
zHN$*~FR?vAo at DNkd2Tw>IvG3LO0wmSJ_O03^z=&R{+l1LC%mO};iZ}gT##sD-`xJe
zq3rP1<$P(^f;=MvvC}qGFWBAYmX%)uQ`}Aa<dNOKW03RmQLm+1A|MFl2Kw{QsU#$I
z;kig{%lNksU#3T5yWwi83J5So{t`-T+p6TitZL`DhedrwyGde=!U?F3wpc1}lpt7g
zS7Oz0{Qo?~UwL{vk6Qzd2Zg1n(_gU)=1Yp4wJu2K%dobIw0a|+I#mZU2;t*R&^U2@
zCfb<TST{V*H*<S*ME^<c?AZY<bmC`lMir?4+C*O=Y@@mXi85>agD=nYv=T+AqSFQa
zh{~y3*SGk^?o|1#35&$*+GCssj&l3j)(AWw|94p(cm?Tf=3c8;Wm`5ZUmg#aJ8g;=
zMw`$hU5)5hs^0~X3=-(`ZNYFkstYWJ19z9V=x5nxhBMb`nw at xhlHG|PO+QC)EDwT^
z8>6=HNSHoq^*NcZ2xaQ<NrO}FGK7MKm1B5IX-XpqN$vp&u*15lP#nem()3w3qMZG7
zVy*C{AQNlR at 6Y!`SYN1-V4R6WU)b202+KT?)h4+&WY8gb$dy^JK=p$+fjdO&yW%R&
zK~b`dhQq`%_hF^NR;E(_u`UT4Ppf>xi-q>r1&h*Tmoo}|dL%DpLWOe6)22wot{})?
zZj&OY5gS-JMv8QAq@;)*4HoIrG9hVeCOpwtWPyB+f#AhaxRT$IEch0Q)NtZufUr_G
z&67KWRyk(nQh7EGCB+;9Q0gCU4{f~v6bU&`33`|l0I8X7O%(_D6A>Y!8HBu8ITN at T
z>vD^HOu at X+p6}}?#Br2jPy}VN9P$D^Y)7@!8nb-ICJ`B9NoNw at g6Up!#o at nOkN#$f
z8BgF#wZvQ2k`=f1BkWJ2P5a*9EHy-j2RnAe{NWrgl<FG=-o8|6fAW7yzcC-D-VpMK
zi;bik`mECjqx*gC)q;6dEx1V8O?w at vmpC)lyyH{7iS}3?l%sBkHBwV7|3KEIQZ#|T
z&S5-?(#-mq^Q4|~c$0oBBxHkU%W_M_`7(HXxJ8~(lDIu)oChs)h|$ZU*cYKJ;z-Dr
zE%!Trye6i>9wLl7duc5L>FZD&!epAFAMySG5E_=d0D!02b at R|w?dlf<hj!|*TamH(
z!?K&s4KOKti)G+XnBX6<r0@;DSQDBh4z?fYoTj%=aAERHGS}$FaDf^{k=WhQjR3&T
zG4Nc|-CeOnRZl|)Xg*^)+^>N9X?g2T3qM*LIM%>?)E5S$FRN~W4GE&FKtLUtXv{8-
zHV-Y_X&K35stGs<kKJURJ1f!(`TT1(!N%0GGh!Li1|8lL5>H!UE%M&wLLCG~EXYB|
zJ;;(k5yYo=QDkLdxV6UeJkQKos&bH}Y}keF1`9O}TwW>zZ=_BQiuS9E5)>}ydj<TU
zv~MuYkR6ns3RFt8Rt3is8q$#<u9Wc=;x>oi*17(VL}3>+rFuClWPxO7QsN%0>pO^3
z;bQg&a*fue>8|pWYfwpIkbHhQyt=0uZiuDEh*sfi!)gMPPC*WJC|8qu<jLk$zxoys
z7&MM5-w9=^hZ-z<{}65K;}yq at ZhYsiPqf)=;Vm%|kro23`Xu7_ at r@}9!0ytKLs7Ip
zE?&63`D?MH^v!>MLDtuf7JI^7xn^_;YdFB~uaNuk&?OER0DN<VOu<J)`ABqiHn#CX
zcr#F2k!gt6F&}|e_(($u>3SD^?zRRm2&P5KN&k5Rq%Z0cAW7oU_F8aT>%4!O1`nb}
zQydPEHP?#Ag~ulYg73Yaep!`I^bvEn`bTPjc)T|j8q$!}<LTx4<&b(h$k%+C3yklK
zL&{~aE*tquseJ4L(#Z+;#TdZ|DUL_Ofg>R;7i<&06HD5P&3Jzq*K}v&D$hBj6Zy(4
zkY5mhZD;i>=q}!{*)QPa44_>Gl0#24Ue8!JZ38q_Gpq4q_U%$RA3}qg)k+rMt+BrP
z#ltpWu)Z3i7!WaV6gsNt3PnNRK`lB<AsRCmuc?e<LI#f~e4{6{iOz at r$k?*r#$*-v
zYs5-M!0Cq}>z`9Of>LQ%SL4LDx;d;1P;*>7;Azb;qt_XM90UG3BU4<-b|5~C;?1?+
z+gHxC!bwN?p0k+MTq$&Vp&tH<(Xx|%!yMH2ORGh`HrJZV^nA7AnT`sitbzucc4s5L
z36At84uADz>9|#b*Z>yk7&`Za8AC}Lh6_CL54xz#)_q=kFw0AwzBP*7CB<(@#6#*8
zIQBCu`swH3tNSns2MlMS;EMyc{~ci=JqHZyGPil#V4%<C@<ztGe at s)d$lR}RKX4db
zIQAa at O|Yf=LtQs9IXYMK!DfaMMGEtv8ws$A at 7U{bOkp1U6pSs4I at ID#sfs?ilI%Ya
znp|H2o2UbOR|_K8d#c+0Q}TM#{HP0J&S~H at Mf0fhieH15hB_=t^xr6z=pz(fcRUhI
zdI4h5`68Ljn>RiG(mQd%Q@`=QT{^OzmJAG`G|#Q&n7DOT-er+j-ITJ2fYx^S at O-0o
z1f^O-ezIdnB~jLeffx^Az}Jr;xnD17KJHPyj(XvPA?L0kMd-tvk{YY$tQcnczKzL@
z_1Z>a#Z8rB)fdRw*N- at o(qGfS-e70qwcjzmfvOiT<&8b4j-;Mh3Vsl-uxt?%_8jv~
zMgzhR=WQ7|)g%6uE=2ppTdejQ{D+1=;t-sbmzUn+gz<mELSFZV5W5#Qf<_M_082ge
zg-%(ZpK`CiJ+~kprEeR#pxGsm+LP})EtRn6)Sbodo$nBjhKinU)(7BBx+Zd`NUIj?
zSzq0cIY-IHeUx;D`CAv-@?&s#*dT4Q-4LYc@;vwVX%)87RbP<MKD=f7XvxNNC$k<2
zRyXwzTfM5ZQrhZzjO~aVPA68&=47u_1k*GS{P6*acR+OGOJeStCdN08;1i;jzYPrL
zm?mMUBIT!8LwEzGXG+AD0Kb-3&2X-b;K5CSFtf}<f601kspxMJ&cQhD*_8$dr7d05
zyd>(PH?b?lS~xDKlY1_hy=EKPIa*dR+>=MM)Ir65cGTwEIvuS`kYG&n`U*;r9A}6X
z-R<q!$F<V)qT*JX&4C~ZLZXu8HJ;i#&z!UG>MyFZiJ)orLKS9Eo}H5uZ=lzM;mMWz
z%0lcpoZ~WB(#w24$mJQfeua!UbnAJl5qemOlW289Uo5RO%+f%+8?0$ju#^Uklkbc1
zhw9eX8SEbm_p^YW43lCU34n2j>K%{PO*#OM<`K%SFGQxsU5nH^=}6^QkGA4ZtoOFT
zYS_h^Bh at Nj7<dt;ZExI&H%TC&__v?X1pp|jlEf|zPfPFG#@fsHu;^U9WzT`=i<-4t
z3zWI8sHzmCUqL-YT*|7Szd;z{NmiXRn_0mTMy+t_+H(fn)6!T2nj3?-KeV-jvjp$v
zY3Mi$B2X&F<l;;RX*j~<0fWyE#KY6eD;j}3O#tiu+*C;uq;r#E^`g`LrVs{&RE`ev
zi^(qhQT6oJF9Dv&Ovkdnl58NKc%MM>KK>E<hQOqQtd#SUvV*s(IH1pl{6XmWc}%9J
zXvF<Xc+Uo at m&!r&u(~J%7#Rt;k(YSAiI~+RGGjmWVqPW(T1<$#{r>#XBu6}B$bN0L
zyVUY-TQWMot$EiDk4$wy#aTh%W8FCy=w-p1fc6^#{dIz0 at lFOoFTEpqgJ#!Xxe~It
zK>w(O5bWY(9GW>R-oR7${toS){_Fn)S_Jnh$CT)vz$WWw*$<ZIXH8Q#=mH%iS>a=B
zg6@@-{=vg8{Kzb3JUn;8K*Ex`XDNCRRoorbRNJenL?Y*$l-mf?S^XR_5`>0SjtJ$;
z3LfY;jY+zIxKT*a*R9a8H8;8AJ#FV73#Z``lUf<60^8z3)}xTmn0yq{+sH4*u68u*
zZ at Jx$6fh2Dsx5X@`ZXl-fBKn$K_H49Q5<z%s+x3evo4+MpTQ?Wm1Pze8JAa~Ql}F_
zuyqJp at e~Vp^vgzWWQ&UW-?n)@gR!9t4)fJPC8S2MRTgiHOgdQ})I8zHSQHMgKUmzM
zMd9{YSot%Q!3fmEi?PaleoPIqxzmRFmqt7E|5Sq8>YnQeS)I)F=yXl!R0-5s0W6+0
zyMPHl_#i^`;M4sk?Vky5pnGd#?MshN6Wdw61(s(PM+F4$9cmHuPgU&2Bpb at n?-^=9
zXw3gCU(kum0Y%oQTR?4pl%HEiaKzm7lW#@zw;0iRnA3|(GtvOl-88gc=xDRisHM~s
z-dq0jjoLMt at fY)(sS<YlG3p<(tcQMJH%Gl+55rH=9sv^7>PXLJ9z|shADJOAx6ULr
z8~r;|H#^f4-Yj|~a3;M+y51Me^uk&>)@&g`6MK97-v!H}LtG=0v5;){=FK_2&4SrK
z2+;SEd0g?{*RF+nTMfAajvsFDbnfQ>ei+SxHM at nMz<g8R2%qLF!2nQ{XIY7FN04l~
zfQkJmIaK{qM2VJ-);+fKDk734!8$mkE&5la-k9SJg{H-_B!f#M+hOUJd850$LOUeM
zNg<1;elJUT|4CI~a>Pp$J~~3G2#jj$%4AKf!Y*#2O-FGg+yV5eVKtSn(`Eg0&(hKt
zzV)1;Tat at tjBQ>MhxCFE%_~}UVFy}=%Wht(l+HmR-U1ff2QbR(6KLeRv<UdqImXU$
z-8)bkMie7 at TC195IU{Q-^r<i>6(Ks&1r^}>*?br_oWLZN1URk~F}D659J+Xp!mG98
z>pXhVHdHAxET`Xo at r5IdJ&j-8O2%~W$HMQ#p&9kI&P8u&FL7<^=;14iHJnH}Z>f{k
zCX6x>`Go#D%=1B|`hsSbTiGw=Z?jbLXRiYJYG6YiVXv&7+0wl9q}!R5x$X_^5ej|N
z<YJphiVp`+`s{P=)i_=?Z1DlC97LA#?ZW_=+aqn?iSXc=tMU}`gxgs2pv_ENnE-X~
zUjlzOKuvhJ1^s&y$)kImB?V4O<1pc}a3^y6Y>m3TY8J3Eft8#!CPX6P4Qh_33W&&s
zS1H*p90K<ORpOQgEuOf*1E=CdFtLq2<TDiZ13#z>*SR!0afdWc;apz1UnjaA(T{7o
zyRpYVmR2J&NSRj(hG<p!E{wyJxk!!a_*O>5f6Uy&F*e$DN8f9KHXX6CdCeGZw?L%H
zrwtP5Ycu~T>AQEivA{2NPPi1R!y}2%d+E<oK=}_f@``soLKxA1?IIJJz1Min(}}>*
zXJKck{SPT>)bx1A?Ph~f2=yBzKx88*;AU`bFpQuvRDeMxdj~jjT6%mUC5!qn5)Ymw
z<=d%lhHJU2_;<I#b|8`pmt|J^B%t9sH+ at +qC+)8D6R<1*c|Eg(R>`s=sH|NZEm_uB
zKxg3tT=q2Cg$1v)3U%+#Q&UZ`1MVc`#$$)w_!4$lgCFv09K6(!Z3Id<VTA`7iUN|q
zTG77VGMaKjLt(Ca%HO5@^ijkuO0LPNa;$r5ik*#6E_|S+%ofSDPFLnx-guEsi6Cn(
z=w+$#fbIUzv-G?`a7<1R34$1RAXiSU>~|>ISvzzs(SKfywZqdd>T&-#bU>xxx?~~i
zh&RP}3SiYLt)-C#-xnqbgiGuKNSLop8k8qbCagrt^BkP#ybh-ESl*?I=3aWEe*%eg
z3hh6rdkv2na}P!~IXcc9L>zrV^4v?UU7Dl%P7kWL);ZqYr-C-1n=TM7 at eY{7u=Yc1
zkW4~{F|_=JW8$;*d*n<gwyAk!7&GVd$%47|t`-j}HCSN1f+6u3n(v+#b%iPnIjC}8
zTHE2h_1SNAzI+6{#9A0QwInW}%~GGDS<yCEC(;AX-3A9V9S$v)@&4#`NL4R--wSyt
z;U7FR#2)UDN_jN8SC)#q|CnXq)LD+eP$-QBE7`S1&}|)k^mz-2DOM{Zb+=`~_NJ9s
z66W=??f|T+g45IqGW=}C>=5un)Y=@CzL)NSPkbgHUJyVmvh at iEbXo&Uwq+W at V^US!
z#vWNOaDOas-QYRt>dg+S`1;nb*}YoG-_R3YGNUd0Vb#~!o&+~MuIv!sL(zq$E at Fs3
z;bxi%U%yy|7NQWV2ui2$yG$cxw#j)LY9DuIp9BYn_Tn3^{3fM67&LU<!GQZ(nBSM9
z*6!83)aXUDYPDug*pQfX^|QV!sY!#Ny$5vp56POe0aYho3~)12Lb$tCXjz#ZY(7SR
ztWV(%jq593pgk;Wu5dXzpr&Zh2G*+bX$9`q=>r4EHu1#46cb2Auz>cOU3I at Pg<fAa
zF}j$`66gB at s3RHa***{V_hNB~SP{vI|CE)MriA#JJUBnuQZzXzFG9TGyGt*#QsAg)
zK>nYYP4KqwD5&WJlacPO*!=#DnkRO16D$PjeeG`b58ZOf9Rbro@!kahP1S>#xEUK~
z0sERV$(DxcN1CGQuj!AEdG)_jGb>HJgGKS|>^5kr&RvS(i}S?g(YXF7>jaZ;zMLVn
zoSqjgQw-I=snu*8GR2Sxc7=kz;e_Q{q?bd_8OgrmkjFez(4C3&+J_&XG-w3}VqI9&
zdWf;3gXOEf<X{NO8%JasO;fuSE5mo=t?3nRr4xH<`s?Qyplb7vOwTXV9Cq3bmlsec
z;j^6hp$uCkjh46CW>80AWhbSnX!vfLgqm3WFFn*Uh5{hg<>@B2;rVVB?y8pZqD%{8
zpbCcghrAdSVL!HwAqA-OTtjXH<{ww8O0f!QMQu7$vJl(IM&)H64Y(t93=IoxsMZ;K
z{?qBEbvmLE)buyAq!F{K0G(->q&+Yr?!O{d=^Jz^;~H8H9A<9+_lyv$2P>jE!fc;P
zFP7S|#rxzySGku_!_j3r2le?b?wdzv{w$HP_`)g7Z2cI1B5yu#U*my$BhWI^w2?&*
z`A-s`D|LRx<Z_^}?y6`&F+ykjX-tcyNs_Xtyi<hLZ<tj*<^+^GY~vQG_0M(iGpA$>
zdLzU$U72Wza%x$=Vd^2WHqR5n1f>e8M(mXZj2}~Y+Fz_(f6oa?<?8`6`;AxUGI>{g
z0)2xyN++L+l}orXYHzObyMEqY%AS7dgM)RFXmqmEtgx~B`YMulaYMUdqudN+XM|Se
z(mZwcB_(2m4IkWyBq3mT>U*Kh5JW_3yM95p?0Hi6_{CI3C;aq&HpRoHfIX=z+AxB@
z8~-3XOP|<-8)sbR%3_Cm#@eY52$5wBqS@&KYv-y9`Rr7j|CKS(Jg|E>TcuZoz^AzE
zdlg1WMQ!8024~+GyE6o%^I0HHEcW^D*YNxh^crUiiMN*!rkg-1(^CNXT>^Nce5o*4
zm?4^LJ-66oj?VRx5($Pwu;lIK0R|i^e%_JCe;ke&=G7(KXzac)^f`P_D40~AW2#t*
zDpKxL>(03fs(>a2(vBpiierY at D%=32){=`{O0JN at D->eyl`e_>Yl*ya>9Fjor8Fz=
z3HwHjbMlau5hc$JSLtn9DD}+IAGa5?FVR)fBZsL>#Hi^iKrAa>F<I4aF)J at 69L$lN
z5EVskSM%La{ns}*hkW+Cpelwl_${6|c+qE6d|XTqMGz-rh)HABlg^cMTVq#Q{hZRn
z at b)vs<G;eN++g3ZFwAU1z|hWjfZ3mi67u($xD%!ORaKZ!s;KSCni6d&+o)cT;dk?A
zs)pWoh%^wTjkm`g<uAEd-y8?~n52e4J{C4j22=WlJd^S46hR at m5%u`p?~;9xM|aXF
zgKlQ%x^_tR6>P#Y?=C7qkq=^&;(jvTT)hg!#Chi_4Q-ChUH*trlV%Pujd`gq{6kbY
z>HX0Mo}JAfP}ZBfu}Z}Yq}P9_E>Mx7`s6P)A`%H&MKGbI!NTsv5sGH${zXdfRtM*6
zg~f`OIN~(x6nuUFLjN;Y0!67P1UMR}A(E*!2RHXLtzld8;Jomx9b3oWcBsvLpczu?
ze{>1)tuQ at fE973&4BDJq=(N4&$xc%guJ#XGLPNW$<h_bu_$k)oq<I at N^hqbxeBQm3
zs2Q=zCliNC-E!ydWVj~!q0=M-SN94;73^N5<v>>8J>E&yusog<D2Z^uR<YAS*Ayx;
zV1HVMIPPm&BUgnYO5 at 7YMo+rk_^tv-%o1Z-u at W7*6PYy#SX2wXEb5aFxq9d`r=5B0
zMkJfDkClCUc|i{8R}KHsqKw29PsFr}y`Th4o1!zc+=}-Q6q@==rdtz!h`=I}X#yPx
zOnQ9-qzUMWhnm5AFV}hM{SuMmVF*Pn=(c=WCa_z4J%@Kc+BT7_w&Pac_NbCUpuzUk
zh67F|al#B#z_lwT?5eRX$8EyZNUsBf3yQNazRA0%nRmR2Av~yVkLfHnnhP~pDh=rU
z<OhyQ;wHcbLh3vPGyMP=f8S_|&4r95Cj+Fk6>fKaY|k_Nlrg_%loSVC$rKX4QK+(n
zu7P3HI=BEkc*wOlIe?c2%c+ZYfbyoiBE?J#XNH3|b8Nb5wdJDtB$sw7Fivw#I0pz-
zPFy$0lryq4x#S>;v)Z|$;p3`S<i(O~Cp+*7867BhP>wxe`#OAPclzPs9E*yC1FG73
z3<|M_-oY^uPk-kxccOJGEsSD%=w#chSS77`MrTuU_1VK>rBq%+;T~w1-uso2WF`nR
zDQOQygY%F-o}&m}g~gJ^aZlvL0g4lt*9y-Ao&dV5S3zai(Nd8&z at ew_*o1~@Y+`%;
z-HosJy2*uiN3aeHoG$e6I9u*wlLa8l62L$+e0qz at yTo&6uv11*%RWI}qs^v+OQ$*V
zdj~kmvbt&cse7Kes%qvFbnwpmTj5V$CnQ4RH`#E!u-xBEaV;qydzR0?iGQtvZD?b&
zXaT*Vb2O!sIU$AST12 at 2)oYh!Fop#|2OVvSS{UNlb|=eVpf?M+e$}Aaw?29bg_A9(
z`q?+No%3Mz%-od)Dk!FL8o4XVdkmkRg{SlW+L1W;)xMrOKw;S|%M;&k&I^475-3Ib
z6<l_k_A8Djp?@0n$0Ju?o~C_qI}#ph at M~o>HZG9on5MQV$GSi9{Pl|A^1-c}i;s(9
z`pwDF!TFL<!K+LbEK<$TLYT?OPI$iAm)s=Vlg^~U63aMQTL}xe3hykuWq>V<+&<Ub
zw9%Ana}N<|b-!vDuI~3b`V?n`dzyV4!)AxfWHl&$=A2cMkRuQJrqmhipuU4vi1K^~
zm@~vXn*`@JgVHq<mX@<O6>p_m(W<$xTg0W>y%EhGYTJ<K080Kma2u{X&kn4efq4Lk
zT%n0!#wEe@%!!e>v#S|b=+dZ|J8|~C>xs9y*9 at mI&?0HaESx&|AnQ?(l$iaotyf5$
zKl%zv05c=)#9N3D$QQrTWWi0+t0!vW1rLGUag=EUphGUTaEKCaSRL;GsV??wQvjG4
z%Z|Zq^n}p%7p*TTT5)>lsSAJEjck)WJs?c<ETje8b<)@7^HsRe<uVRCa2wU1V37KL
zX~^ky=F8#E|9q?$)10uF3o!aSNMzt9Tm-`#gdw*#e_E(rb!20!ZtF|lzM)ha-4Tt{
zjK8HvEMjr|5tmI=l0I@(S?RlwV~u-(GkZj$lZX8!*vy5%XO74|8*j{7wmjGKWA>^M
zf0X4uW0Q+_5PW`7T at phTkSh>prtfHI$<UAEWKqE;+Wr&&n3*uyk0TrH&YJ4X%nnT)
zz+ivBS0e2H1qtQY3R!O^L^D%EB+#%{gu79dl2QiT&JEP2-))E}PYv<4?yPQl$Sji&
ze`DU@$4ovK2x$1AMfA8SGFEp*{UvjNie^v7roRF6W#9;<Ttn#XbDU{t*R%@$8Tab?
z71Aq31<C at EW8<yaZg_N-f)RxVL!HL*LhI?5y_r8Y`-fzW3nLl|1NHj(foQ~6B*E4F
z&W at a+c^IS7`dqoSyBCCPEYh4O2x)am{YB}cSe$!~a?e>kh5<JR6&aF=Mec$8C^8F6
z!d#XLO^vY0{?pZvX62L6z&hxV42zVVO23{~*w$3$k{RaI7Gc)A{6y#0D;h>F(EPjD
zl at erI9JKBt&9nlDr871`fRd3wvx at P3F5V<avKYK2(6|9{WUHH5gpz5 at A1?ky<}2mh
zKtA>vhAh>YeM!k)#u+;(HJ9#`X*9OBim!~4W6|ZsaR?cie^cMuMBb_2seAZEfIlrl
zb)_MHej%+PgOM;lx?DY!zG9oe`pC{PR4Wd~khs^&pFc81TMT30So-QCK0M5H-=ILc
zh7A_X@=}o#{Rvp`-#!y!T!eQKf5X%ayaDf}dnmtBiU>b+(bP1nEirCCfzk}JSY!OM
z7D15Ae}i=>-<0Hx_r~pP3qIM_5$t=8xoW@>{C+WQ<c?(7``wlX{J{#~HB!H}-!zWx
zjw^YxNDuWYjs at HQ*K0opmoy#uh9TiXtz>C^YA16$C)$So;=T#ui{uR!A7(@UZ($hT
zuq9fetl|XGPOGoMwCs+q2zp4fGHtO!Z)M4~nT*7gC98*EuV^w|dE#m>fq<im&_+Cj
z=U)hdjI1;GOiF;2K9wDcE5{30!qrrE=My015=<kv(^IH(J$x7-<DZs_JUU5%Se{-P
zZuIVs6_BR&odH0 at Kpt97la*9g*Th|xi`J^w3gmg1f+U at G1yk%adohONg>MHA2&$o^
zNs)@Lx3~NMmrqWQFid$ylx{grmj+-4Yy!#>jNVDB3>jCbUk6*M1sHK^jPU7M4Wi66
z_rw^2F=^c8Kc3C^v>#Z{Zp4}&&{UCQj7>oN;K-`54)Yclm(!15*3LI_&Z;698!bE}
zsQ{+^#!6YSc>xj???zNLk_`*Y at Y*)t`cbhD_YweGvFH0r5d4e8(aG7`g#O#UwQ2a2
zN+#o(5$NMQpb!mdO{?pXfwa`5E|w}Dt}?Xmz=Av!nAVMo9KjCr4P|Z__GxZKj^8Aa
z4_f!3)9Zg+?tEi at YSVW@wG51$#<5Z#L1;75$6ZTUl6kC+opF3!)Jn=tzI!);iY9H(
zjol;;Jkvj7G+U-)L}Jmf7TNM0o5qZn$#*{w^%6cGTcuEly`&~ZADQ+vnVsw9x|M7&
z(SwUF5F-aUc((VNb0+}7V90%5w>|~oWW{_-^)Y81<?nIkD|V~0kjc6$lujjHb~y|S
zO&-wsy(p6s3&6%H+&K4^6Nt9`dpX)bvF<Q7JC(KLk_ at fKZ|Ack6Mg61ITEDi1vM(g
zWQOQY^6tVHPS%^4jBd6F#-zI8uCWxV(P+55_WfMK!SEC^{#B?_M2Dpc_p5|4eY`?g
zIyytn1R-OlT at Ym@SiKz#Oz0XF#B}FL-BXC=qw?t8 at QCTksy$Zses+pz{`f$TGxiPr
zetSW#-r&yY8*RA8p3F+b#OI~M2EFwEvBSz&GuDu$5?H^rm=SAyMDUYV=Zh)PK$6u&
zxU30!Z+hDB+Kr?U-P2C`M$gKRLWehtV7PF*{?<qz6gnOoAZ*Z)+`qHf!?;-iA)Z;}
z`B1PuR!t*7$`Aa1 at I>kj>Xuf&uhx;gjRYM-#cMc2Z`@8l35)OHU!&^172Glf;l>}*
zk!9$waOs)YXgct^mZ{TPqv_C*e!P<xrQHLGmV1u1P-PeDTz6kG*S#8iKV~&TS|>*_
z?I?4OEXM9gvC{~dnc<A%evoVsJoB8_a>%wGGW^L$Lxn at +#u2wgHnd{1xc7$MG4xOB
zk`^6pxK@@SZmdi1)V>J3hqpcM_r`+bBY=QUi$8pL0#_{ljFs&J>;)OBfD at NU68DtQ
z^ee~{T5)RHDPQjwVsG&tf{LKxqf3R^6T=C(;&URwa1?MZdg~Hw>nxfgnR?Avfy{w}
zWd|hg7nN7N_tFXcFddesP&@padlHD1HwbYeE?I0<Yxh?V%0sMW;yN?N<7z28mQX7#
zgQQ=A8USj;EK9E%{ChR+g16E!b|!dQ#(acqbATxXXbzn4UV!SQ<NlS3&IoCy74S=*
z!2pn26Fx6aNymUCr%gWoRwE4s{x4`rAjW^b5KNO{Mlq|}An#k)YZqLuomwA<&?Z8H
z16LUJ%y<y{p9rEIcX*U(d<(nsbq70{{O(8mwM)MZ2BdC~ysiQrfV`iS374>i&(hs4
zelqIFfMz2u+{?W<^UjJk)0_G$?@cL%szpZm`I-140EP{k;v+cwRZP0K*=zg^m7V`D
z<|O)JpUVyUQu_|Hg=Qg!U*ZqQE2afKL@{#CDQ4f#{2G#rW8ZztC^qYpu?KRw=lng~
zOz%xY6Jr&{_R|}qaQv8|JQH at GGN?12E at fCxbEPxDW}}jeE3&ULQ^^Oj;yz#&w(4p3
zrD(`A{qSw>-Q8%@HcbXflzNA72yEW at SMu!^(I$<0#~L5o|APsrq37e}HKlZ>$um>D
zCJ$t$K0%QC>nFM+mtobbI*(8Uwr}OH0JVhCIDb-{P!@*v5Vc&|^!+q}R*-E10FoRj
zPzf?Qc2{Z&*sjbp>t&kn>6w_<7i+(E>VTERJ?BKJJ at vLVT}G$pEWIuumd^BLd1Vc@
zAO*qXV;H*Gg9y!$O1Lo0Xyi;K&Fi==m*BP1M`2ss_l*1K{dwqLQRW#2)r`7od%grM
z937-ibL#MwP at gPrX703#wn=UJz9o67nw_!7-8ukRah-#K(Py at IiJi>Roh*(*6Ei$u
zb_YO+l|mF{<s|y8!~#GYJ(15T(D4CW#0Q^kt|VyXhB$Gy&a~i}VB6kRYBcp@;X9sR
zE5<R~UsaLjE)*MtqmOH}$IxTWGb!NOPWxh89gHOwm~Qv}+~^H2hcgNFbs1*@(m>Kq
zk%XW~)oK3{Z6cBli2aD8qkKI$N3<P)v$Rfc)z#;5Q^3$^i$g9D=-bpWokYRy3mIlj
z9f?`WujI4#kPFRD29paP-B at 2@T?^>I!HntN9}o+C(0OSEJh&dG)G%OUx|(vtkwla-
znAGoQouv}RMx9&DCGyCW(GAF$+VsYL?_ln3faO*I)NqgnC|48k=RrskH}swH^mHFb
zvSgxgCqr|+n|hByC#VQpbw(<syYpZ=-APzp_O3QG^OLI?&3(}>5UznAc7HAW=BSR#
zF`OO!ohJT2BXMN at K-KB^4;$$6dQ{Ac5~dxR^5>P~Ct<vpf>+ at l{#?siFje*`78IW_
zmU#MpzqEjPIh0-+hP&Eeb||RQ{nTzbe?9>aoUsG^2}o^})NTOQ)Hh^9R>UqnCEnkc
z$Uu3-u{12OnYic1m6X!*GXl=%X4GaDfT<A!m_ at dIT9o<}puVb&H5;W9BhVPjO~7WX
zJ`haU_>Q<tqk*?Oh*x~VBQxTGI)PorL;RUrtk>3o7e!Yv(V4rcHj6hLv#(89ix55o
z_0UW(i3np}P7c41q=kcOw*0yh-{p5mchO8qsZzX{pEW?XtZwcgoWrg34{6~s14=qz
zh*2Hu?(A1=P`~WZBCBF11o?QVY;OFEV_8R?SM|yr;h%N9_D3_}*)!6z4UKX0_j+x^
z7dcin5NJ at m7N8+<B5O!W4HaAL!&_%FlP0TJGI>XmWQBYT+GIashmcy;Ed;M4X^A0Y
zzfP^U5ppT^T70~Y!=?iRr?u}W&F*GH3AE{dmVm{ksWZRvinTy2p|KCZPaW*e>elSU
z7W6bg6a%R4l-<AQ5!l%GFdsdrkRC6+SmH&;LOZ{O8|RsJE~;mbDv(8*YH8}Sk~Tk8
z1VAi-XZL{|<r|}nSsDHNYVTG?2P)j4-Y}6 at zGy8n#oPBq<Q(zPf;zT&y at W94tB=jz
z?gIZ{H!Nn7QmTFfM~kS9$j6Uh_6M0;!!hX6g6P{Cr!8meATO)Q&zv+}qQZ?bG$_*p
zuVOA|be47OX+vdJvB1o1MZ#V&&Pkh1iuQ4*rlbJ;=UIEl8cdg;16)grvKYh=i{<O@
z6G&=vmB85?bEh%3#2QwQvAE#u;78cYgY3JlZR4_*$_`%sVXXkR1TSR`o=T*w5oFs&
zu!yS=$H%#c_X+?4t11QU)2QcDxcuqW-e;iys{d)%$@NyB<_%d(TLKUd5NX$c)meQO
z3Q32s0mflZ9l3EC4(l`)5ig}OfU2eZ5zob!2nV4`g_iw?O-KKJSW>OcCeS5HxjF%@
z^^L9g-!3Zo*aEjlFF69MDyI${Uo4T6)Ko~{jn$rq?^@XzGEEDi-R4J>{^J7Ocb1B!
z&Iksvq{~dFn32j(WJ_ppv}O6EPDNhHj<}0~ZcZDuY^f5kpXFCZjmoE;m=Gq9eY`jg
zc3yq+=K_X0e8E7>65IP<%9p9gHxny|X_2<LVz%T<+iZ<`26Xsb2Rt!}YMkAJG}#E8
zk8tZ7dVTp=Zk4Rk@#UQd*2M+RmFBis8ru&i!Zd-1q1lx)bICI0^{$?FfkDBddiEeh
zDE7^ypV0+b)T%u1u=nyA%qL1L7<j#886f>6FY<sSLa26MGAI*_1P%_pHkbB`Ik(T*
z%*lHtq7#pCWwiE!yNS=$4>gvdnH8!VmNkebJh>!@#K*!}0t)2z+yXNwL{1dXUZxhS
zL+ at O$IRN?Ms#VN$hfbBM$JH}bft#*}7GZ#?J%MHokuMYrMKZe+>N9X#C2Jz)z;U*K
zwhovB@^Jmrj{}QvX>%#nSKs*c9KkX0Q{5I_6&B<Z2ZIf*wKH9;(6VliQo!iJzs0Y<
z?A`!79N`mUYqFe5Y17E(*$?mcF1l}yK4Ar<TA^6*m_5!@6KUFZbMB48dBuhldXn)Y
zQ5q!Ml$%6pN{t7DPXIZl_XBB*#Q5Zb+PU+b*!8jcmW+U4J*$0Sp+I7&6EgD_uE}r}
zx|UDeO!)ie-yrkVc(%MgQMnkZI5*s@@Gc5{$0N5fL?I)ry*0xvTLLZ5*159)yF<L7
zzUqVQ8G`x3ws1jkIH<_pO6r?~6jMl-cY?Tlx7WI8qxN$T at uL<{NcE+WaG5&Sn;sD&
zCwMZ?X{yP8rZrpyLs>L=r}`F;C;G)7(g%teYxDXr<=hzT;Ya at 7?=WBX#N at Pu3exnd
zP5&(fzXxB;c!L>;e0bKzE^P-d^cpz`V7!t5pP1Jg$GG6M8xcAca*i<zh7zMQ?cW<`
z>%$_QI!1;Fr}KPAMfJi3KIY;L>P8)Hs!lJ^v#px^nBBK=N1;cY--hYwBR-gyo4?lS
z>)s+!u@@kuPlA54D@?ZHVi{Is=qdSOE|x;(QN!kcVcX%;XbxN>l;_0dN+4CRQD at pp
za{C<bK|wc7Pi0r8TVt%fDLWZ2wK<h`_ncFl`YfrqnemD2{7|GU--GLOh=BW<NW0EZ
zA6ZgisXl#@Y_3jFEof4vEGFmrR`IzqrYy(#n-+qZ(g>y#FQ->6Q)Qvy)RPLu`Ez4Y
zza;>g*0dc=-|i)Agu?GO6`=(Wd}%qFxfn9FdwXjnP-NLB%iSGRKPDCHp)rF1v=eFb
zs_vO-;XSiU$QjwY{(S00;+>XE10V at amFDFVNfW7?EKu4=eyIxrp~3Z#*(m>iB{OA9
zi<=JdZ%RYVnXQRKL1_`cO~a9L>yJ!&hRc;|1e_TVbe+78<fw*+McC^|DspR;U-q#y
zilRoLjEaiRShj-SojWbe+F>nr9dzwyrPwaEhjm-sA<32km->&KN|5BRTxM`hZ0aTL
zPrp?b1XaihDj?${zlUg?8sm8{{Uo>>6;L at bonH@BkGmT_37=Q*C98agdr<-h&sk at B
zMJ-iLQsnaZFToUm`?pR-04x|Cpa&QCM(fyfZ>={E$7k`WP*FN&tV5*9dL#8O1d;!>
zb?ncCg)P#M`+M2N!Wq{y=;#grF#3Cq!ga)@pz0)`@mX9p;#WQp-ED&Ili2H)^Xsm_
zoei_)Y!8#uBYYhd;!#>#23NxIq at re7$;Axp=Sj|06pg!DLBLWbaJVd2*j93qD(0!G
z=$Mh<=xHAlkV2`G${_}${xb8<&jIV(v7pwU9YBmF?@VadHC8xs0M`;PNu%yr=@Ov9
zCzcnbaXM2fshXV>4Lg|l%Dj>pPp#)M{FKJHia95jBc-E)3PfBIHi4aEz6p2T?SeMb
zbNI9aop?Ijn<N$bT5J&&`Es+y0O65+6;QPYVoapyjl6Lw1LUS+q4l7M{f%1>_rU*Q
zbye}i?cpF)#MbHw63aXdVmCJG{F#)+crX?wSz~V+5{F!mKk#eP&A7Eq%QRdU at cA*~
zNVHbG>Zi3>qj!#no+GtM-O;VS{z+LrU1kEe9 at xaBO)^)pulTw)sSX!4Wuxov04Rq5
zh!gWc_r0IVpQqFWgy^F_UM7N$ZZsiw^!3xhndl&p2}k58H+?(z^W1IC#Hu5h$q?Af
z+3p}v3zWOFc}~NHpV^ON at Sy9!mk~|Hv+}}MkeeKoV_n08)W9jc$K~UJXXJ)0pg*hJ
zjflk)mW}3L=R<AHGFO?`&vQK4FL0m+A?mbxBm2hvu3C at MmEj;~Zk@~L1fp?Qd<4oe
z;fF$#>taQSpw9NGVW13IUvdg(<MEEI_JHkFoLt#t&>z&Ts#mXH1B^d94Go2i at m+)%
z_sGJ;>ST)2vB2gJU=Jxhc(pxw^Exl`6$2tz>RXr%Jl!7O$V&}~QLLCEkAU8u$UQjX
zl{W44)mD?5`W2_C3l#1#zb_|;R?S`h10leWnPS+sWg at _<{%-EVU5rDh)6$j9BrsuI
zySqVSkexwQOJGi7s|t9kE!n_3UC5wn^;}mV at 0CQ#%A}nC7^41XR9ZG0T0=p>CJ18!
z`tT9%`}-$2#Ba9yk?LHH<YW7A;j^;)`K**#E%B;V3`7NsED~RQhzW<}KJFIC<wL_C
zRgE<-uzO9{5cwdLqxE)Lty3Ni^WR9T2J8tBMU`P8b&3gKprsHSR8P|ZHxnuJ`Hz^G
zzZ8W0c_uFK7w(QsXtSc=D?g17k)6O!^~Q-YQnIERS<BbO1MJ_u2EKV2d=i!2(KIRB
zq`ui9$S)I6J&FEFs2&?{5!anh7d76ls)sr_d;d&T?Hct|#m5EAX8y)evR)_hD+X6j
z6V!7csv)?+q#v-p;mPZi!JJ*J5k!Orfh1sojV<izrqRi370(|hwj_R`<(g;{+WS%}
zz96KZtyCgnI*|pRx at MatQ_I?BhDk{|3j8XgCaroeA>%I>fd^)(9Vca5zstkeGAMlk
z4Qps^@Y)KO!JzJANUxySQgf_AXdJvl7#k$BjUmM-al+}}q1;8Ol9-k6RY?bO>htGC
z?EftX0VkLL1qFYH2Sd|>%EBhTju9^WXzLG2uhY8Nec?D$1ZjkB6NU2QP4gNnM_upG
zWw+gvhXsaRVV*Dug#ST$JyA#7s`e~`9^4&KwcUdHUfUOkq#5 at YHG3S!ZrZG>HE#Dl
z8Pz8JOo7;yZAwmk*`dFUWA%YqeOn at Z;*Ca<U1gWN=-LBf_8tfd=hJ+o?P%idD3OZE
zu_Pb}`|+*NL}8*l9(*g3-pORVjS$~o1PnET*RuOa_gBwVX7tB7fO{%^|3^UBK2>8o
zobHz-M?VtM;(wh%@L2wj4rAi=qjpAxd-xd2N!3U}!7FeVo-ijb0kAbC1Mz3Y0k!Hh
zYGF>`%mGtmUPE%mOH7(rZSBd)86McgS$Z~AOdf(KTHCi*pIzRYsC?nQCT0qpNrD!X
z;jc)~{2Crh-<B_!m*Qsw#RHwT4dRhEcX9wn;zur+CzbL=hCGgcMjev<opR*K?LoDj
zWXc2fnG4 at _#j)}do at 3Rc{^(tNLPS!*WX#Lh^wJHTiSv!TiMOM%@p<oAn&%$chxb1e
zl+P*jv<atWA<GeW)a}9B0=#Ut)3<ynFmOc!sp;B<zSS_k?yQAmG>1a7+~t*n7wz+O
zN3^E at A6D3N`%lOZTsFPU;ilv9Dm8x&Bof?4at#KKRrxD`MhRF5$WN%vA8Pc0WM7O(
z0rfAUy>H6PqJ6erk{E55_O-lAapOcL(02LriK0|swsU-q<<?CfchON^5Y>DP#NS^T
zCe*)HiiCR4T|RadzW5kv6St+63E#Q_K at ZLAEzu5U8_%p!&RN)~`q?i{`vN9-J(#ey
zxTQ75YkY=WU(?-^1 at T-*LBiKT at SkRgLVgb6p&e){0qJXLg#AIV4~rdlxh14IlS}xE
z8Pxl1CfC(_^6zAP*2FA!1%80Shm@!p%@mJ{A|_QIt4&6?V4WySVJ-6cW+bS;*)4%v
zo^im5p*BNNZ-Bo_<1AQ>S(+&0nCTHEF<Z;@oCAp63<ZIwimx1wiZp*8B10mgXLD>B
zkpsl)utJZG`Hn;7>B3rsSzIw0;&|eSexMfuNu|il{&n&}z*v08B3#~5O-c|HGNo@&
zucv0*V$EkVwhg8%c@$?wIVbp{EjuI@>U7}1Q}_Ml%Ag0Wj&9!ZXLHmPNUL$}8_89Q
zmY{^1mR%D>#PeV&&5OVB?m1gwhU#(KQ2=x%0H#dP8$n+DOAYnV><@Ih2xDoGU|V;o
zH at R*sMoLpuFn!aZxFZW%l6E{`#(KdLRHm0^Hk-E?wcu$)$aqip6MTev*x(-1>VPZZ
zwUGr7$LUy32;E*|><4J)2C;ald<KBW!|4?Tx3OD**np0IE_n>`n}XYyH$)5`o?6%<
z_H1FkrVyWYs;$G-e#f#f+>r;7xXH2P*WDw=ZeQbWyiVl&oG^8JD?GH(a0_;!w`aUb
z%>S!>(nrv7&iO4pN>@48W_vR>XVZdEk{5MFEz at jgylyAa#m}Sxvi at z$ZuKS9h8$Ui
zZh$0K=i~KfW8l>y)tl)A`AxO5;tl-hrhgY|F5`banYOm$A&i*?MVP+jYZ2ewtPKUc
zN&f3Hi!P&C1d*_&I=wHVZOLp7&K+FP at PO>A<EB{mhDq2I3Z?yAsZ?Xn`{2E$diP1f
zljxn|YRSl&ez7-JvhZBa%Xw7rHC-2$4=RrN-@?**Lh2>lA?VF=BiGWHO0&gWh^NCc
zDz(iOJF-F8)6s~OIlaqC%DnA2+$U?x at z|f%4K_t`()#VAOT8Y63`M+ at 1vO@pp`X_p
zfz~mU;C$V|;xCM2Fe-vn6~Aw&1r(KIj>)*B8Mr<*m5>eH>`xk_uEsFoiHc@{2ELp3
zE*+Gayxr1dRiGc|O}^XIE{Co&7HuT{D*vn|L${AF?VNA$PUX<7M9Qhv4fV}fIGcz(
zzckyZ(i=a~il*>Y1kz at S3v2pvjS(98(){np?|;kpx^|Y}VC2_}adTgNO1bNBbg7($
zcZWhgv-;WQ+;HBN%Ev5Dzk)KPq}{1QS+C$RHXpsb%`t*>I9gq at BE__C*Rb^o=Qi7J
z`5(|<l6E?_ld_ZF5FcHTYWuQ2=zww8GTc&Y!lJ*BN$Bu=;qXu6#FrG%$@4!F$~Zv;
zo>z<9f<GwD$(_47aymey5Y_XVsr8&s at vgdjOuJi6Z~g&9ZhuI&UA-E|(K%9F%)z>>
zhBs+-typ}mB@<N7WFJKw%Nu1Bp$pFsaKkuL$$WkXNy(VzYg2+VFJ}-Q4B1!J*LUTP
z)x<FF3Y!iyQ(?RdEd@>-6pLIsCn1X%PX?FY_VTcu at jdYqNxhEf6SOs!$3xw at cBw!r
zT-J3DaDV1WGL7LY1har15!y{Drih8Bloi)|Q*Ei>D1zuVP8M0B%-yiriH^BU4)tWT
z;;Yrb-NmC`ngD{xNNM;am67o+{3Jvp#}O!5hgI4GD7kstM)hq(&#WP5&dQ6qxv8As
zX495^#7Q)vHc)vY&tzX?*2LX3_q>jItCTv7HH!pxg~hczN6E~xYWaV1c;#%3x|I~U
z=7Lx;`TNwA#7Vo~MRNWW6=E(GHn$ol?+^A{y at 8y~^&cKelpPm(MfD@#LY(eUn~i)}
z3VHlzsLt&%Cw`5su>28W|ETnRH(N-EC*;64fy#~aqvLULKd&Z`zE~lh+nfcyT3eCA
zDROU<`;CqHi_ISf%Cx9x3KK`a7`As28WC%iK*;{>l1B7n>=nz6;U7?8s&921Nie at 1
zUgtJ58^nGd53{AX6B;ZIj3KXE4+d!1#7s4s__)Y0sdfqqXs%A%lg|&ydlGT6AbTy(
zz*)Fc_TU%FkwXtj8{l%HV=Ta#N1eY4rxO<R88sKuXjUSK?FXTmCZ`s03u8SKqE7w=
zRB<PHZ#M#_6Cy}g8)cn&vFL4a6>+Um5%sPxD`8EglRJEZvFwtMK&9|gS_5R_=8|;b
z<)tO?So%~8#h|h3CFFceu57tY*d9qyea+EKw5TzqoZT+)-c48lPKOp9TxE4(Uy942
zj2gbEUi*xKFz1MHer9nNKzHLxP+n at h?)M---~(N>9?xk+SP4ak^|gQ%IxKazA`sxL
z?@{Lx5X57I7lxvB*)5x7DwLCmo<(3D80?~$-<I1V;l_f>(k=!kOUzdVn_KOtA^m2U
zJ~-pQYOsSBwVGG;{R|K+w1*^wE4`X;XyT)CgTk(K#{Zu0m&?frT~dQ#HPmwh?wuwT
zR8%fd&JOoF2)_wG|Hl}$uA-!O<lx_ua-ueQ2 at R%*PP83n`9un#f at 1@-aq~GD18m+o
zV3NE`<1aHqx<~#m0!$gxuinIK6h{>V$5$z1VON44UWB=MRFQ-+0o_=KuNy}pX|d;d
zaHEdPvdL~yUfwZis-YQvFl(S3JHVjY>x7>gS1VZz06##$ztP_wP5L8+1=a;W8ciKX
z#?pT!wVTgkx9m%rMBtfCBT^pm9me{91+22%WR{>|TAi*5dZ5%}!WLph7hDIN<_OzO
zBtS?SUlho71sTOk<;H+*R0enVL6(P*N~c!ncts@?WTETF$78)-Vg=yiPaYO+W#uI6
zg#%d_A>FGRNUnvMn=fb4U9SF03 at JU`M^qNctTUAdHDN at qL7WQJp*x8RG7)R5w?1>H
zL$n)7yGqor4vYr at 2B~J(5Y`=Jki*)af20&iQP%w`eWsqkWQzxWX_H-6kE|v0k=6g;
z(N(%Q$gA%hGT$4aaXzob*$Z3AzStSleZkKwL9R61!3tx-c`M!37lT2gK6*hRjOC*T
z1by%Q18aeMT`LdvgJuj43Cvm=Rl&h3l;;}n<|gcXYxZHtnHMJ>k(jR#!o$t*3s+>~
zp<*4lCsX~16ay{`{k+RGco4!pjX4vX#JN`NQQwnRxgOXg8cnd5V4b(hd3BO&^%d2z
zq<GT<U($|XkVI(vAOtM68lMIgQyTA)QiHXD`t at pEA;6Mvfq}@%Z$s$WeEB<^+*;nW
zG}U}YAX99~li>zN>fk}AzDqZK?Kw?nUw at q!Eu;80Vl$a!Mcq|-jW+RX>Rx78@|cu~
z at ncJI;_C6S1NNF0MTHEoZcAG-C|mZ9O(vhK0pd95k4r+e=mW(SRfXp~%BN;TthSyE
zO_B?TN^-VCRR^kR+A1WK=q14M<fbK~X*q=M3V|GP$;KddG-AI)1ohKlUQre4f9h!U
zcA*;g9HHtnc&^!qY-1 at +W^O1rS$JgMfh46_ev(o=#@r3cGfG@@<M3NdV37?QK6Xmt
z2=ex_NKc95^^{l!$B^47gVCj1lP*=$agL>R_eV|eV<Czw+{eF=<c8H};Son?VnP0R
zw+2~cDHFhl{H`-MC<Nz#Vk$$&rR8789&Z6m>|cEbM*vXTB3UF~`unIHtF;C?I217d
zi{|+hs6xKH at 9~^ptc#4&+%+C>>*jO0eH%H<gKm>`UXDidUp*w%YR{7SHge!cJo*M>
z+ at FxN6#uH@;MG>6=i{f!k?2_3IilH}d%9BAd_Q{-YCc1)cV}vYphX5N!Wdv;&I<dX
z%Gp{+H^LwGXE^AZUkeLNIWcimzKmIqE?|1I9LOg4D+FfTQmKO!evEfIt-oulAbt};
z^{ENqvn#8}>=rWJau*8<`rsAz{)!IFjeaehI at hIn@>+KgVjIJ~9~#8VbFsnxgxa^%
zBvQPvRfaR3)J&XuJTDcR8H=?49G+jYfScts^4BT~^SarY9r3rlHyg*u6~6TN{c{gl
zXvKbLWOAwd-anu?Erroinf7+7fi~T8hiI{%&xd#|GI6{DOm0EDXnbeAv&hrF?t38A
z=on*_nbb>2R8c3C1W~Al^hBK&N`h8Wn$lU{wiG9Dgo9%qa^LZK5yvW+C0M6yliwgn
zgc4s0u;MYMuCxZ6>Y(_68$h~(wifLXdmvZ1GMsTTVMp`9nxXdfHYoNe)dV|Jh(QsQ
zqK^GeU4LASB!UVX!Wb<^|Bs3)yY>4moy?~M-%QBJ*&o)6Lbrb-Bs;HO&~2kcpIRO6
zGP3yhgxTm3l#HGHJW*%T)M*;}K@(8i-x?<@!^A}56pNarSR%B#pYMEy1h at 1HGkkK=
z&X+KpO=J8Bv@)FMl<S at q8VQIJbp$F%cs%$L-Tmyw>q at z)+)WmcG%6ekz<0d_j(j7<
zMU;UvoCl*T)8?bgND-cKqm5>EQ9ofn$EJIzlw;r7Xdc#{@rmFCB!V+|r8x*H2c5&#
zgaq6n!0s|L?Od{F3Gkkzkrx1}(NR^Ro0T at FyxP=>{rkSPF`DfSuB8<)PceKst73zP
zCdE2^l!xqQmJ}B<oB{ECP?m|N*+~*f!#nrQO_;k}`FS>LICImtQJau^AH6j&{Ag~Q
zlSI9pRP@{&gD>LV0il0Bo;SG~h$E?tGDwp?;!9X4M#My2>%OS~%e+N=5v`bI3KDvz
zFj$J2mV{(oh$`u(%atVri^@_GEjiVy<IEr#_ode#xqvx(`XV at f@lEyx6(fJz+d`#w
zfNd@@=hdt_!T*hinELZ5{TFRYk3PgwO7C&yjY4A}f2wG-#DOON8kUna)SHj(X~mB`
zs{4Ci27K%U?^+-(vBr+Gv)UMyHDcfn-f*ruQ(udD9-VUZKLlkSr%C|pNF+mL=y8vG
z$=L^J!OR at QxE`JO*uNpe5MY4@&-u~{@i2n3g<1{e#$Q?M!`*3qr^CE7#cz*tWs!ka
zefN(*VEv+ZgLd<4zZxYz0}u6{>ZKj`*>-AC*Y&lFUBR<Xq$!N$t-~2obf}{)avD58
zcS{u}2xUX+vt0!2t6-H;+e$9ZEc?SoNzFPVDS9|WwBl6c(ib`Avg`2i$xHi&UJb*G
zs-Y%G&C}-5`SVkS11sO}piVJT49S=q&iXVKqN_%~37uE8)H0q#A52#2Fs=ArY|uhB
zy#}(3haKd751_Unh6v!`H?UHeF8<Q_C&<U8D at i{BSBPkpR;-#DT%JYfx+q*{?1bsy
zU0tnRY(*d|A=%is=>b9kj5OhCL68zlqW3|`be~J-wfMbv$(*lg*ytZ6|Na8}uy`##
z13iKWwVJ;u4m-?tIzvnoK;d3CdN1W+$wrNU^4p1U at lwc6Aj&s=rAfW1f?x+{^_iaC
z#s9goaI=}y?Eb;#YP-3VmYHmyw+MIF3$Dzs!83^0ZJ25zbaHPf#5NJ%pGP^MwZTSS
z<5pG{sxM;xKgdtp9BgXKm8fITFYnrfSBVNT#%w+;P2fR>tNR|5P-6#Q^CXmtWn at fK
zlXlxuGnUa==g}*1YsLrnZ-8j5ZV7snMjYA!LawP7vB-GNeeyR8-1V3X948kA%z30Z
zl=DGRu?_JlF^H+mIV`HZF_5z%T}*ZapY~P+gw3CmA>`VO8JwNHh=qI`N#}w~CyAHR
zn)W at kSa<DrVH1ao(+5yIb^hHS9WTTtTs-aJ39K#YzYn|}r-svj?b3H6A|{I4y0wqm
zrW-NVty3D$?nhpk;?Eu(LT3(6_-v6Nlhsk8#*DDK#%Mz at 962P5FxcJC(cSfh8Kz%*
z6=pk8-fgbSnfI at 1mOyY=o0%P6%&KxWeu4E5rUSK;DP}%OwjQ_*+fRMMDLUOF;pDzx
zRwER{S5uZ(DNq4SrRHLU8;58zmsCIWjDbaKRFu2*lXaB15zXs7;MXK$QDKoY?b^9i
zAbn=)|2qdOBGI>8i0O1~I#S!{VF)C9ZkH{3n$H#h;Wx4%L^K|Q1)Q^-4V39kCgMwR
zTKk+31I1RFcZd7x%(OS)hm0eDcIz&K#YKdO;BAx~nE{kyvUT at pW2N>#FAiXlgh4e`
z+Lpe59)*<x>05=<Ra=ouOs5<FE7Q at I(xGXXPH>~LpzG%-JpgmewaFang>n6B0^Pu?
zh}U-O6e}i8P at W8=3TNkQZ6XWuv$uY<tI>o+ixHE(WRdb)`uN8b(c14{Xx`hz2phIW
zx3KME9#vsdDBnGOJ>(V`61uac2=xnWHvwrSh<*B7I)eR=RSYMJ@}{ER|7_4tqDTv1
znk5LVTs#O+Cla5!O})lU$@P`7V`J6~J*}J#J0u(Mlk=Eq%Gg!rORiFsi$z`eAd!*z
z4)(;OxYSC5*hV2%#O<<xW-FDJHq+9Meky*;_k*AM$vQCYTCZvu=ApsKM%VB3av90j
z&fnY5zNV)PHmk5quyn}^WDp#fn;2<YV*A1QqHytV00?WSiQG(tW{O9}%;^clEU~5v
zjsk?Y!;ZZGI0r&;l9V_kPV0_uGmUK6{xFh$$wMlpNc}5Y at LW}RGaZHB*rw1uv^=<<
zIe2g(B7DbqL_*{o9mLzNse%viZ$&Eu-x$8@$F|UElp(mBb2nCM at XIx;jeZ0 at Z1=1j
zIp|U<VT94;C`9e!FHD?SygSl-DiJi3gtr0CUJ*Hq9=sK+-OXk`E6|EjzPIj7ZxSZN
zJ^y_)YVHPDGt>Jfa{st<I8tZC$tvG^A$+72JcmV3UpKz_bo!fjZSaL!L#D;-Q{_Db
z{8CJ~)m11bb1A2Q=tRo2KILimSSP$ICkZA8W*Nvk2XTimHFFC?^h|<B&G#r}q(o#4
zvWF}L at gu>nkH+5ri5g-!ZjcKnNRVaA)k at Jx@m{Gd6B<c<M)@Zvamc+57ZjbIXfzWq
zG;xqsRE=oeLvCJi{Zn?o5Hj9}pF$ve<{Kfy#c5JHDayd$Bhk=a`9rpz77<eFPXd5U
zTRpB_yWCjXh%3?~sNlKaRgXRnw0|dx28aEZe2-lcs4_Cm&SkINb&alu)^nz<dGkt;
z0?Apiz-|aM^8U4|j;4GenF8N<5g3~cc;L7K#^A1~vLUtyqwO<M3)z&nM$#*O`T(;5
z)-`>$)vw!?1Zx~EB=WT|#4Ol|Bt-81w27UoRKgn}n#dLo$VH1C?eYyH*M^1i2EC;W
zTHi2{&qs~+c1Uf-+8qB;k1}uC-qyJXGS*aVe8DdYkGG$jb3>=$n+tOBk)q|;wD?cy
zU*?=8fi30^E&lT0*$4NfdaFnTb7tp%{IMPa)k${yy&(V(3B12yR=t5YxwP4AQ7Hf2
zE|a=ya1dg)DLn)3qgzufbEqDg*W5K%2I4!(L3OG6CC{DCd{1+!&eDE!Iup|FN+0pK
z;5sKW7M5!y(_hSp0 at qRQB8oWMDmO&Hv`P5S4<()_+Hk*03+z2Psa+TO{SW at nurbwr
zbQUdW)<Ch?VBPHHs0NiUvP2MX>=w)V$nWEhMd&Tm;2%HIp~{iTP1SdgtGQcOA|xRE
ztsSp%oZKs%II#IM1*X6rjJ!l=+_h3_^!1IA5m{chtA3o>ENlJoB-j!MMMY1j?X(j3
zws&r_4fAdPXBP4uQUN>mbkJlVMQjy7@!R$KhFgtBF at E<lUs6C`2Kg#YxvWNE5Eo(7
zc=O5>So5OuaLA4DAKLvu!+65C`gSFbSz=$%yLTX3Dsk8U<9NfJ4UfUgFNE*egUiAv
zl*HSs>^YiHqV_*|`L$*k14Ey|0P7hXY7$Hp`-TGx<Vj{Yi5`Ut>JSXRPRqc9+KhX}
zvWHFxrfyZL+)*UXPAmEXzDAA1wZ-7lw_u#QM(&$@%nvqT`w*S+UdPz~eBba4XYX at Y
zliLO at gEwT)QdOmGXC-{JYZACFSDw`tb_-scytrCl;C$4Z*qANxVO~$!beY$+usa;{
zLOQp`B=u`Rs02MC&0<S*X}Ww*IV-jCi{Gds_>t1i8o2atOvG31jW#<g7(f0kdQU-g
zY361qBS8J5$&U;u);j+!uJefPxRKVayml>D+X7>WJ>?SJ54!J4W at MVbO`KV6(*m+U
zzWJj*KETRCw>sfvE%2g7R~}|5gDxi(8(|a3bzib~=ulG+74*vuZF0unvDNi6;b5=`
zw){%yx#ogc2`mqUO;d%>wTn50qfMuuT))CS@}lLVU4ZQFyoWReyyih7*C}bX$H8+-
zj^HyON!p<7q}xKHa45HtfA{f5F3&>!HJzle4IpsmjDPi at M6tHdXFjG?T at z}k;V001
zwVfd+rBl1?9UvZ)*6 at EkQT~Qh5t5~){xKyXWWUbagl|Y4-=^-YJUP0qwkUa-ybIdN
zxI*zI9E=)8pFK%&dB37Zg(V?)=Elxv9AU)iS?1<!maEM`d+L*UO{}-r`cSSrgv~GH
zMj2JbYq6l!N0Aj@()>I0(zM8upk5}_o6>%8-?S+yAj!%aH-}cb5o!DAh{l7<Vq;#Y
z<17|o=3nnl@(ca%DYv$=8})&*6t60(`=4U&1 at WkYw4EpMkt1=f6lxWJVCA2Rq<{)a
z8i)Fl>2H8H8s at PJ%{hVUjQ8aYk`w#hUqwUwBX~b_8N-`3yg6sJYw%rCyJh`k5{<Fg
znjl7lm74zk=BtE0qF}1R;@D@;Bgj0=6z>ysczw>N5!(gNV&c!~x7;^8Ml31q)!5O%
zl8mjw8LIl$+7i&nA$c5Rr4PEkNPX)OF=!jD$@ta{KSiF0w{lyaCI@`PCe3jZJ>nfW
z7W*+0!z{Xj_YexDE-&NnG&pIvaHj%1gdQxGrcv?#NIII6L1Rae_AuRxmh1Ku;7W^+
zSSSYguO5~f$@<KiMQS)VEN^~%Nz>p7#jVCQI84nSG;D?9WS&<)gHGoE@|_#si0mJA
zCx?o|sf2vrs~$ih?6N(F)=-`i_$kJW0J|f2O0zQMMw4&VCQUvf;Hn%7A@!m2kT6V;
zYE`-d_>7Nga75jZa%3}~p#HkzL4v>535mZ<KV^mWq%9In0g+SNDXGPTmg3bK&zW?|
zNz2%v`|Gors*j(vs=wJVpjtzx9>q{ItPax6X$rPO3m$s88UgUI)?Wt}Vy{FP{mIAO
zKd}78-De9BMXgl2y~j17JaYsg41o?wYy~9l@{i7Lq;xxy^pSud0++ at g7|25Y(<opK
z)nS_Y^PP<LV=0NpK&o$G<YZvv86lSs8noJ7Fx!_6GtTs)+B7gAHntyZg>U98<AcsG
zT!whhy&Du{`;2XmD*u$m9dJRTG$q&E3+Z#FNTUDa70!cdH&&Xpl_EqTUFRwCXG3d6
za=F%_b?cPB_obvS6sHPAggAjK{2O at B2?W&bl(VF844B5G=7?V&KFFnzm4X6g%)FMe
z7ron#mk$aI`YDjt+}LW~iVB5UiY*mA$*I?RE0DkA at h>pfh)sSZog^6=^3|khI~{El
z>VWp&)`FH?_P~gq4yTnc+tCP$^*2?z?rft?;wVdKEWn>`MSnyXilyAz4ehe)S$+%B
z!Pj#qV)+ at zJ-xtjVL4uHlUHQ*X}0<#iTApncPd4UvMk(W(9)i*mT)DH%yEQURqISN
z-5V9oDqx|A?t at wh#S^EM*BE|+&*F>-2<^1goD38~2>G7TdZ+mfdcVDWxXRQcpgF=~
zhBYB&{sa%`Un~#sG2kO|#xF*SIj{;gu?#|Co`)iEuMbV(DSsbX`u7m at hHVm0X8WzD
z={Gz0sFS`sjek<rxAs4w{H6yA)J{EcdZ2{4u2YRCb5K at mcgU~T!5{#WfeAsCeqVn2
z2ZZ-rLAaC1lKgwe$^9xF2NF5}OGjz{0+tK_AYM`7gaqtt2t>ULW~U3?-rIWKkFLqh
zxTym^hRa$ZU$dsFSnPX0?f1dA4tmTIrIV6yOELB-FB+T><OTw=KoOHP#Nn_kacH>T
zwROik!sYkUZOSHpwB61|72=x;BT6pqzpB)*po;KX43L6J1xS8wtcnx<#>xs^8 at Iym
z7nK_mB>I&l*NKoqWD4q)=S at sU--)sIH6s_MF?I((Tu-<t^HB-&EKwQZ7V?v>S~hgA
zEuC<YXAC;cmMnrg#2L1d^pbuIAHHukJrcRz&5-aueiSoi;3Sg%T$S|j7Qo|jwdab~
z1S7v4FK)n<mqjDlZgce9&%i;Ns9l=9jGVCOnkFogxz!C1FD-UUcvANRUqwA{;*^$K
zqY$AhhKQuTurZTBAPmE8M?a}X+&REEY;Txnaj-tM;pN3KDcNX^kW~0JV06R$VOgxj
z*}ZWrLY<L13+wKB3A|CcCMxgP9eDYbphumQqS@@G=jOa{mGPHv#YB|N(nhLEAcoi<
zl!xQ7GcsVC?8-+B`dt`}$^HY?*xEK*n+06AK%#aeEZc^e#(3$SEh`cJl!`E(0*!ot
zggaS-wpC;3Td#J4tIv$Vwh(6sT#_ at T@S;@h&GE!&SyBLi>7HdvpqLa(b5>52ns+p<
zG~E>(1({#h8g0buE|5KS5IWb}1u2i;`_Q2|_H)=8^X)>1;z^14K5d26`8KqJe6&Lh
z9Fqg<MyY2Pj5Hk-pJIpvMWJ!7W{Q5Y`+I*D;K3~xtF;RLj at jeu60F5P@&a=H1`(9j
zVrv#)<>hd(zGHqA=Bfy#!v}-HS}qgDm1k0LV7#XF3W4H}PR5W+uZ%^^+o&J~hI8B+
zc(oyt(4yvl8M0WNV1DzcIVGfj^S>>`+d-|8*g!oISOpL`q5DNm4vF4+0x`Mb5Cr>~
z=R&=FH7RlsNu?56whB(s71(=>0)#bA(sax~OlM&xlAu<C<r#QzWK`%?1CdCBA2QSu
z$pvv*`NUWTw~MQdY4CK2Z@}#M2TM0an<XT6fmwq1;XIoVjLH7$SWiR6eIugj8Mx_A
za`wu>Ja3iL^K#kf?o>sXT1}EWxNOX<Ya1w at B4P$YCPN^qKyaB*RnDZj{fp%BruVOS
z+_lMWUr{6&`rBy0<Bt#+-HU6x>-qAbSP(F;C>GV!w<m9M31oJ^|Ftq0#w1D0l4n;}
zyd9YFqQ1fpWG1OXrC?fC$1<pIz^U`6dZ at OPi%hF>Fuxjo1|EqLcIMfwYMZKeU?eDt
zjxeGFKl at LcWCPMGc5R@S$0}@|X*)uZ)I29p<-Qaq!%uKRoQ_;0$%2bg#n$cG_}iu#
zJIoUbe{<*;>U8RyTud}tnKh;$e>@oZ{2H`G6}ic?Xoc&|7XUru$}_HvU<Mj!5u~)v
zZ6!=(OllnXUICaJIg|~9DacaPhHc;BwcLf!KL%IJW#tKyB>hdpSmF57_2b#19m8k2
z$Spdm$%aWwr%d!p`Hz3C#~@sNvOs#(br2qoIL<?ysphSP5f_ckUa<Nb5=U}@IdrZX
zK-|ek?Tz!GrelNIQaYp6dH2OXtCM{fh5*GinRvb-6#iPBTl1;93m#K5z+ at A=xqoYN
ztCR6|@n!!F_>304P;xi_8-Mn(R~x;W!@Uu*lxy)QpCe0GW6ig06a;2<CzoCC@^285
zv><Gzf%wL7O9GXA?(d2)XP>VRS?>^Vg>$<R2TJmSRu3n^$1nHHwN`${T?qF`g8NS_
z*+}KXl9|ThA%MD^BC>%p$;z=@-0NtPezfOc{yrm1$x5!+O`2Ur!4|zi)qZn(Ri6vM
zBB!Ge{Uqu9#RiY<mBZ1gY!q$f at rm0f1k_*@?&=1 at gC4IYSy|bsESB~wPpW^FXsLB9
zvo|lDWD%%+%Sj^><X!q%VXM5n7X|6Se4rwy`Mx)OBTUaufNa?SylYn1F{(Tw7j>e<
zF64=c23h at y6LiL{57KwM{yRRrm-KL^PxSevA$oXuNZULDKGt>$y4C?Y1U$(lpn=49
z)I0~KKv{~lV|k9p(nGF`;3J-rqJkwn$U1PM319;PY@`gJHVV)4bBPto#zKkFICjn}
znsb2&VU|u+T1~tA>C3D^f+lKC%_Y@<vz*`AiBgwZh^+Jb$TpPd at n?<DU)t0R2KeP&
z>)MyKO}x!L1J*4on}HN0B-+&$@_p#&8$U^%R(}kz=LiHh#(opF{&?dX@~qDF)pn6c
zVH1P~78VDr?<+19vWg+<c_5fJ7Qk3Rnqj&&r8A8~>5v1*Ue2a0V%bElrOuOaStE at 6
zNgB4H{c!Ih_9;v-v$6gXUTAg<@cKTSET5sCXIOIEG~)me`hF6d0>T_a7<*I|9q+_S
zX1KAMHDP?dGr5n)<dLCLvYy<0Ar<;9l at G&8m2cC@?blWg0&ZGKZlA79foNhwDaum(
z;&F7{(6JxZE0&roz-GiTJz6w@{W7WUSykdp1w1^~RJsm8)&AZA8b&q46O!w+(1&*v
z!=ICmNxKbb%+_Fn-((1#;J6x$a}w>|C(?Ev{lHk00DT}=_Z7@``+?BdJW(~1VIVk`
zd$4tg!=@F1h%G@(>@O7j%`Ame+hSZ>0$5p2aY*#3P1Vrf%Y9@<NhR-R!p0J7jTTN^
z1|~(YI}mm<wGe^$2jJbOS0y<~_S&lh65sziPhLQP(o)FXJF5NV3ZP7RLpe-=S{=U9
zRn>=2L)`hvxG98`9^rp^Iq%Z%oV_O!6C07-a-3b|Gs%9S3K=fxGxx)h#Iw(h1qedS
zK<3ROa-aCc!VJp6kh4po`Lus=3fqZ}uiKYIV;q()5n;d9_AUy=!R at P3#l93;A~CB4
zeIz0w2l_Ex{CyR&H(i#0eihnZ8LfYfeY~t|e`^|PU1go?#tpF!tlv{|3Ru4=6VS2(
zv|V28gSwhkQ4RPyKX_lWbLDbNkWiSm^OCArr<=kCyzGSW`g~x5JrPRXK39Ubc#!w2
zjKi`!Pg5=7QVC+461sM_3kFrz%_N#)e{p?e%qZswew2o^qIvl{^)ec0UB>t>1Hku~
z;EYxhB?A6X_FR0S+9;El<Es`La+!J=Y-IqRyEy+C)7)RS>Dy3F0V_~R{)}EtK$N9<
zwcq1UOTY4NnPzwMQR&}%QW!;DH`h<t!O);$!<I+a$zFrO|3;P%hQ!LHela0UEOTu_
zn?^3`mWCk19Z<ZJm+DR}@sI4G4z8U{4}ktZ4FcE>=OXp}x22kxA6jDsa(O3l+L00B
zmYDkjnr+%)f{R>- at 66q`fMQ%>@0n+}E0k%u&@A2H=p0Y63*8EWB)VJM12Cc2;-QXX
z?bn9lsHZgs0kzjcOCC6eHTIBF1_4+~BcxeGx_P8l@#MpL`Qh-Dcdk%?{0K}9OgqyG
zU%qnb`P<l`RheG52-<+S>=&r;vm)dPH@#Kig|g>A#n*k%JMiVIHKCNhBJDR=qs(~E
z7${WGa_Yk{ed at y5_;st$4^(6aq*7={Q0JP*H<Hs@^?FRJ7BCPHBLR~d;(pgFnqwnk
z;47eteeXjKxY$o`P!_On$b;wNLYHcg`=i%)!c@<*`&lTz0teav$E%c}lhSR&eRosj
zF at G9xff%FHQ55&9INfXG!H(j8WKPE)N|LWGv?XD}VGcY2!p=J2>4QWs!X?-Ij<r`d
z^enNTa~45>_Fxt61p~Lro`B0_Hz5);OyQlQqLuB06dE9cU$*VO^^(335c_ZP<alUv
zVH)|HLX?*;-CaZNiL}chAMo!qA?+^hn|x{v#~dn{*;(#2R4P#QCqE&7=3j@*=c$4i
zVumR|!M`AV#vy#XeVoMVpa8X_ucd=MD#764;m>@TICXrQRIW#{sm!`aV{9E~xnZy@
zcwQzA%=ICTxr4 at l0e8gzvL6g80I~Uyz*5>C_iFp|!J?@Lg3|F-u-Vp+L`K{UN%htl
zS_<dbsiW+$+JC+VD5#BSD*MN6LiDFCny$i at H8ps#QY at F#yP#C%Av<3G<(1H7%<Nq#
z%7sIz*DI^ZGwsi2w0nkaEa2D9X<0Y`91{tf9Rtt+nd at 7{fI3H!<?hk2bTQj1uzsrU
zaD$>-d4f1E$tzKxjX at Cqgd8TS^eb9L#`2a;ndEx&z4vF(E)rQ<?cFrVQ3o!Z3_V1M
zObj at y=_?m(Z1KAK9{8&UKqS1XvR9xO^M)p<T39}iyFC_mMsT~dlU54 at 9m0_Un^zfN
zXn$2MMW6lv(WUtLt4zN|DPM!EQ#^JXbmY<|FD4<#B4bA3Yh&m8eF~ct36?9G24qoX
zfY~7hgkm`EhC&E-TumJ+UY*BCt at 0f!%c(3`+sPV(JKt5*ZIfB5udsQRtX(;-v{OKN
zXpaLn%asU|1NT at xr6?RD-zK3se<lLk;c~Eg`Dds&tFgA^_!amN5gc1p+AlPwCoOtL
zbne?R1AZ3fl_rc#K~iU1#ySIUxl*i0UVC9Y at mu0P`tr&6>d=S}Bb$^~tu4(X#s`_2
zqSD=ZL=j^RjNz$@%a=aV)QV1iO?MU&*GRvN3)#4RJ9A^*j)E(idR;*##oHt+ at e3!6
zcBseME=L7oZs0C3ZqcYznx~O6q>}uKjwh{!VOP?Id9Gec$Q`%1BxeX-N^SJTPiACh
z0in8F`LcnqnnV#m at xe6nZN)p}^}*0Q149azU~l{*m8ZljipV}CS&UYjF=O;p8l9aT
zH)sAQCYZk64zWucV~n=xdcr6}2uR}d)8Mn~Ps3aY8(pmfg%Br)ynE)<hmL<Ri!qML
zK)F6J at tri@l!Tf{`<<JE4~5QJ(DMJaA<hO4lB<pKLecBR1;t at -+q*c4oHZyNFf>Ce
zp5smJBj(8|`0i`46W;JiYT<WOv_c;sCpG~fVXstrxy#yxu0b->TFFp at Bkx(f3lX)H
zLBd at Dx%vOt3Bk9Kui9rD0N>)(7drq>LchBCxao{nCXeLhZ1WHg4{jo8ccF0s|D>&>
z!(EU;0yzZ_$CvHs7af*~V}4QI(vA}|ZZG{#?C%3iRZqyPhxx`~VdM~9!Y-Hfc6VNG
zv}I3wh3FF4&t~m)dtwmj%guDt#mMKZfuaP^Cs}0n&;_#YwCGY6T27D_#rkFpJ|4HU
zavp4d<+vZ|$~B<H#j-DteqVr at x~v}MlNJ?vcr9}<Sd>Y{+55Hg`dC at ADvm6pP9;Ue
zPJ at J~ek7+<Lh#fP#k1+q=5u<h45jAKbP{JXg(mhloW%BdAw3<EFtGgS64x1bS`yIE
zlWStI={S|J7QwQ_noLjU2}$S<`~T+GwErCde+Mg9<xL3qg&0Z+WB6biaDR07QP<|>
z;<l>y=tKIDY;({VSo2{)-S|n{-n&YeXH<L?<nRL42aFwT0LaCivlO{VSN8K4o}p`J
z+jM!RcVwheqBB}GjIs7W5K#;SRYJCUR9lmoPg`nh2~sf$4ksv`=1J-cnX@{#7T`lq
zWh%M>;452%NP36~I-s0z`!1!^PLjQYnfo*AJ-0gE0~gYH;GU}QxvPuf)f|W(^eaL9
zeLL)rPWAkF{W74~OG1W)n`x$w6)JamaX}WB`pR^ft8`iuQP at jnVNl@(gvn?j;|Vmh
zvGxYdhQa8R5DL3tnMdBDM0heVzQfx+5jvD%?f!^{209zp6o-)Q;qxC9@@}dx0HZx_
zDZ2V~&+lSV{a8tM{ih$^*+IH*9?kA8lnyMcq#%mBE-<%iXZ3O#EA98XfA9K9k;j&2
zW@)oJc5IKx!!I~~PU$&T9XqxE4|Bga3_JycA^G}LlO;Y47mdc-Y~nmT-^a_TV0h_^
z(Ujtf*D4GvWfu{$#L+qgt3X#d>j}pkaxpI2cs}8>YBw#j?wUH7^SF=2d8lc#C{EDW
z)YY{DT7v1~x~W;nlp1!B+UrZ at 2U9ZRVieWJSG<2D`=nCzrD_T0s2UdRhC5&I{e<$_
zX=ED^Li)f>CU9F#=W{I0DcXYMlpXABJ*qL!8zPBPUHvEo#viY?BrY{{966SJ3*9<a
zW<k_*<+6AJzL`a971An+bSW;)+4eYr=J&PTt_EWqX@;}@g3CwoQ`Z%ff$^%V7<k0M
ziA8MReEM%7EOWsbXXZI(>;aKD`thH}^m$;d<~&hl`CYc9+=K%!PH#kz&0jolij3Y&
z9b?@bNT^1Kc!IBw at 5cEzF$Zz}wpJYAD1wTZa36I8caT_82BX%}{gq8PHQ;$2l;CXP
zTp?<V8U$s3{Oh-#Nf8Cf at b|MoI7GDKtZzc3uN!ty2^`;`+u5lGy`RA>5HU{n`J at qW
zj3o(7kmLp%rKGI-c3yQ&u<yB{$ui#7>()s0^s1Jv-9miqN^A>__Mr%8vi6$!Q;X}Y
z_m~VD=zaoU9URe7ct8c~^YGV#7N>@Jheua}egsls`!5>jjO^YrPAV<n(KR_r%H at jJ
zb&_LWi7JCBC{&l4WmZpMkZHh^L9ca#pW2Q#HnN%%D4{z!*qfVo1MqtAD$<=`JqfgF
zk#O#?Nq&8^=SL~m`Z_p7Xa<ijaQO>^)|mNVYP?69av4-Ly78oJnF^;tD1m%B<|k(;
z0E(eIqy%l1{PP0d9>UpMNHaMGCV*sCnvXhUpEP(;$Lr%arH-Mc&wo>W6&Yb_7d4K*
zdXb)8Aw5ep#@p;0<=hpj9<`iGOgRaIG1Nt{Y~~O5yAwJUxp^>|s+QVrs*!xdTKW|G
zMrDN_v?bJ=Y6MEPf*n5;CQgBr($pt3`q;N at 9l~zryacyT))nx0U1Fy|^jT9l?UM|Z
z5(l8T=Q$A<%Ae9R4ppGTprFnU3TyRk!CV*f1YOii9+esWH~*Z{o5qG^zTu)b!(v>r
znAm({Ej~1k>$<6RLqsm7Ge$^XuqF~uK<U-u=c)^UxcgovHnyJ+Z5=?BS8Ce*jCQJq
zuYtZyr}q=Cb+4M~+KD_I{uDWjJk%jbH)Wabh<nR^7arfvk+D!)_$83BS?3hHw43A?
zQH!o(5XjF7B}H*<F^eO at yi%(WfO=awW|=4|Mgz0QM{o<JYDi4`)p_mpnO4XKd<Pj_
z)-0(=XAl8Rkmg?Gzj*V=nIv@`8IJM~v{t~uevc~Ld4bWt7sl$}BYi~T660_DoU2Po
zJqrE=Q~V$hoLUp2 at MoX~F3V+xTZ at Mhggt0tH0EpGY{dXh`(;IOzVl}tjy-<F>JZZq
zo2|+o=DnRXu6SAX^zzgR2mX)sGVCI0Ub0vSdGt!f&Kgla^~STaG1$Zzq&Gn40BeLA
zxL4->(D6YDFf<p2^-D=N6GEG7hcm$vC6J*UM|MmY6t#HqxdoJoVzTNCczV4+(alBN
z36i<qD=kzo9!b9$c9PbzU08g<49am(o@~JpVi6Eq>X)wX{LqT&$}z=4ox17e{dz4u
zWN59APrP9!Wp)KB8$DGNXEYSAM2uru-Cx!5RcOT7+|Qe;D7FPZtu{onGQWnwB-v%t
z{;iPvX05UAwsmJ626a<cb0@>*bTTex(S`gk$?KvD)5<@q>-`>u_tt6LHthS8<*YG&
z6}vZ|9nVtUKJ$gDX7u8QY?Sd?0s&DulFMn)?T5>p!^?M|WV^cbx-)Bx7 at sq~6s$&a
zTg#?WNaI!nbfU1)(}x(D2Dd&O at PZ?r_5WJ$(EHw|6p%7PZL`i9$(QS5vP!pEB)&{3
zlX8tH%+Ap4s?H}Rk61!Kud{jimjLa}GQ6|;c}*4P%o4v8;F~~6x+0OEO=QAl<nH&>
z=rtOAfq}?Z-X@`S-3@~Z8Hc>GZxPW8S=xatF)p3#b2e&HT0Yp*imcc%5qTz{(lw5N
zi6waUEbe^Q%nB3CGD3nbMj3&%NB`wvzN6Ah;5(N4nR at Cz^i?NYcD8{c-KyeDtbhD-
zY4S+{Z@!lBt at T;RxSKzyYE&N?+f_I;&eohgf?HOTl*X!f3QC%s=YWZwCnyvUwuU(6
zxX*=}4X^DEQhV6sPla^U+}&lk2uwIxpE7?|=iL}<BMCI|K9WIkCI|Bd2K>kHX9<<R
zE)uC_;(7sYKTog~Syy0}y|7^CIfwuq9Gd6QOZ2_s5j#*yl=#aI7Ya=pz#quCK}iLs
zIu`Lctf)Akbvmb|JDY{6xmdK`XubBi_O{J1NuMPDO5J&P{5Qd>02g=C-Gc#uyXws|
zB5pPao$ka4iL3Ot4|EPwZzDqo^XP_D%q`X-9AK16Rez5!8|7kst8s^mgHm_U(ZVwo
zNEh%u)t;U=I-u&`>Jr;%DJQYZtNnPI$#zA%u3fvE2|528bshPT39tULVEU3=%WBj;
z3Ic*%x9fN8nqZJ`96>~X`~7lKy2hzju-Eo5I9I- at b*>5hoU>&xBte}siuk#+kTd3W
zgl%T<h)Rb%I?3aCvq_}6(~p!On6r(_j=exBid?bjIeKu;V-3ymIF!S-nT1Q9F4<%h
zQTHXiXMSl!qbvjr69&R+(yWRA{{iKYy4i7DlDLXmHF2A2cA`kB{~-6E2JBxvUTB#|
z{e7w1uCDZMZ at DPD1$Ty}aw at 6vG}x%oCXFYYejhef4)HXFgzx<a1PpeTIOWF&aLw+M
z*mN?kfk&+r(~gMdvG11^{y7=ce?Q~lKmPI=0<25k7MeM+r>GYsa6<t<T2 at ztE8o5F
zQ_!gy&$f40YDT|(32{z0ZPX0f)z9~LZRKFnQEh<4Q|)99FAiqp<RDh0d{modclGvG
zAMX+e*(+)fSr5U7z_6(U!vPo6V^(s at q48n{Iu2s5cDCubU|<5Qc;zh!q%^^8Vs*T(
z&_5&`g3Tm52LN&3^W|>(3WV at lr`Ce^?Jk+seY at +-zYmgFio=T=Obt=bAra1aQUXo0
zC4&F8?5i`C;eR1%63pPPEQNByaiW+)_x20VZ+=Ta8)5+1vq!tJM8)bJPU_O=fQ#zK
zq1r1nc}3W(*oY6V(rS?~+f(p+>7b1B#3VE^JH+?GEAAdBZ<uPA6$~FGZf{ySyZ>|S
zm>3l})++1r!dJ`XIJ{TWRJ)7aG0CNy-Vr96bNn_Xe=Z_XnPfi9<)dHdny-C~an(U?
zY*Mn7hVMsBBP|&b;We>-q++>Vc{^1}y6b3-;2FZswq7HnfPB^geC9df&_>wV!Zb+d
z)aY@?M{d_fqQok at QVs>>?Q at Lgwkg|0B++~-Z6-%CZoo!&xvKDSj`4TQ(<MMo$B{~!
z7**hECj>E*9h0f}-h0Njc!j?)tf_Ctrrz3Ya6ZC5$w98kkm*?ms;zzVpDTKTKNj+X
zkSNz-%fda%S0Jw`O6yw~Hg at g$Dc~J~eOz5jyRt_$8er=~33ZbVhN(-$SnrQpQ<&>(
zAfoDPEy(Ll2b|UE+{?yV+$JEof|4Hs*bS0YJs>SpZbh`otlY%$Jn?_3uaawKHl<B;
z5&w=Gdx)I>Qot#_y!istog)E9g{WO}0_)UJn7jhZ_=r`1bV4{QKVTkwf$N}5FbXCF
z+=fatlVi1|HYPmCH?e6+mL6VDWQRu%S}m0J#TM(^HpH^(>iz-7=m|l$Y at dmM5lX=i
z*5U^Y3GMu%2t%bBGh7!|+$*^o)$XXjniAlGrg%!CRM)jV?;Qosx1H>0411+c(@W22
zU!+kFtH_bW;>3-O3!>9kK0-FO0$_)=nDL)o3B}EvandEA7Gz{?yh>k12sm;v+;rpc
zqfMM8dLKl;;{098p*Y2VJGPS`khsWT)Dv4rY!nb1zSCBDrTEK9dCMAf?>cdknvc$6
zDCGD2b}D0QyqiLxK_nb<Wp1}|)^uBvk>th{_u36n6%J)0$gPBbs5*5ez&|!lk>sr;
z_yk_Z8W1Q8%=<yi&i?&tq;p1`6ahpu`kRhKNnnQ$`A1v{{-;JW`O{Y@%jW)+k+Bj-
zPD^0xFvB#ypr29^m3_!>9wpwmyMu%KG47I%)2%jxS2GG7dlEI^SH7M7j_#Mj(Y{Ra
zDSjYS&cJ$$6RgZDA0yy;JmB3TG0^XhbLESt<{Qt9VQDg7C|N|AA_Mi)t1~p7!o7ve
zKPI;)6x6(0lZ at G+WN?kF<p2u^lwSt&Z#3lz;F=Q>CW3jL=u!}>f+d7|6d=H~;f(uW
zF10+^zT1h=4R<Fw`IK(44z$K3^B>3DnDDl2uDWWvO6$w|Yq}YiogURTJtxpML;kap
z{UNPZoY37`LKbAeC$9*f+H!NOHX)T7)bn{R*Rw>~A;W==)7t6^o7a}W+Fj3HV<(1T
z2@!#9-19?hei?Sc9d8qF;oHrGxgg6X9pBF=7324I at mJujV9P)i6eY{cH&h at aWd!u5
zK|ozOgj!G!sA;m#u-YXhonM#k2i#fP|KACVbXyuUuHEMtW4y*y7d%Fjsa6~9><d<5
zkz>>$3fJ0AXs1P2m}FeHwHbUkr72r0r7SV|x2n+x^rKn#p5~i-`InqV6}g+9!nkyB
zx69 at bRPK1PjWI6%@eF&)b92~_9-$=%4(vX9$ygND2YC9SG3Ma?8<|>c at AzbInkJmq
zLTsg}dHh68bU!vb`%Y4}+7#T#yg7W21~DirI=6SnvYO^X^!b{-!~F5!umS8JlnC7<
zz8S3j8zXmO0?5KmkVb~sVr((mNO8b0D#`;Zr$Y<>%XQ|1rsW{DQ{VN|UHc?!W?NWI
zcCar8QEtLomu+z+Fb(X?u|s(5_{P2yEiLUA(<YSG)z6b^`>DYpqN<-0jAk#7<$0q|
zDBeV2+HqBw0=B=Z2$2{yI#^(8B4B?;qurze`P-d)<bZvO^9p$p{Ydthssmo{ZyuE9
zvTBz5_Th=&O7?xlEQHB)AfZF)k-VG~8K2bft9?26B+5N!W4==;SXVv8!i*r3JeDDA
z;S6DfOY;aDZzhI7nU&FP*G+tMh%4nmv~#biM at +YeO~?<}PqvqRu?F;_g*|fh-m7Q?
zA{pRjXQ`;rvK;uCc5v1n=ia}c!A?8A4+j4K78Q;hWQ0S59-56khGy{=IAGkVftmJL
zLQ?0paJ-LjH$3E<K8)YIge{rdmBCdO#LCrS6^pgt1t*P=8!~GajKm^=-!4Ma(NMyO
z#fFvas{M=#(Oe;Z{ZndK3P at I5Ct>hL11<@<vV2fGBT#CRK#CG2JcX+Wt3%6D?PewQ
zeVzBEH!4x?EjkS-FS>FDn7I`SpUsnV7U0FB<`H!Y5#)&WYS&eyGA`htbnXb+o6?tB
z2RMib3Nj9uNV>%j#wq69;pf}rs;0kmSWq2A<8wC<0w#f$+8|;N<Slf&p(U-u-;_5F
zR4RWVdUt~1?qM6&;C5L`JHNB;6`08KaO}&ME%dXC8nl3!CXN}uv~5Q-TeU>Rn==xE
z at 53@z5t<ruQ0JMQ+<G7k76GHgKsSLEvBGArD>>Oz8h$!+ap1abmxSP0WFjzr*Wu%@
z2}QAWt|0Qhg8|mxAW__)RdWMvj~v8U$}G+V#M<^-C___p?ILqY%l<o#^F$!#P>s_Q
z#F5p6EwcBGi&u3>aZTs<sTj9BeRLHGzGtESP|}Mns>UJg!kk~FBEB)$4QO>`)@mwf
zGyfzo at BW|c;;G(K%SiTUkVjIrnj#i{hHOOO>}sgQzc~ZBXr3x%EO&dT9&i at HA2ijj
z-#CW;RU_jh at aLsYwy~H!E(Oj)X(dsEnt$)TI+QceiDsMwYPQOUK0Bddk*g*5k>_38
zDybnCeAzS54D$O&+-MjM<$!XKP}9NRGxKI%<S;pBC`jyS=Tu&k8>^TApHUmu7HCgP
z7=gnHVDhl8_Rq=IGSP8Ur;;ey4f_HiHIII|_y$?eLDZ6LK1JTI2}a=)=N}ih3-$9t
zv_VnJ>r?uD)RbG)tiYeMcFRG^NpZ>qOr2szBeRUPtKHUN*<sT#YkEVzF`uo(r#&O{
zp|^s_=g(IBO>r5qgp}>!3>*x;BqhZVd(V0P%&5$V<=YPny{wdNr(<&e|L1@(BX!0t
zkWvA!=F;;m0dZufc}Kvae%PapF(UxA^w|xjh1IT7Act&P9<WGf(tMjul_!Vgj;hyz
zHEAQJ&MV82N#ckc*lIDU($zv#HR>dY>&4!6jw}oMLEAJ~3)lesWj-;c at vx^rZ=eC8
zc=2xqZu&(%g7u+s8^Gd(c!z`1SSEY;&@7qJq(EK7j(1Y&%~Q8!=65fOIDVH-4EjUi
zGSJ5Er-UkiM+MtYQLoC490|>J%bz{^M-ueDz1}hRaFxXp=pGl;Q$*h~&l%6!pKJ(@
zIoG|fspBm4BfQd=ras0J(7sIRRwpLN7hRZ4WuNOsZWfxYI9lady5)lZH4e>PZ_}Ro
zf_M43T-oLlQ at NseK{o*&ysLO3gI<qYNmd$tusrH@|4sT$K>^Li+iqP<yGGR6>RnMD
z8vhAKzYM7QTzgY1SaB_Ob4&XL)zyEwhhMfmNkzd(s3Vdy92PkXEV}He!6mhVb=X;!
zbW^tKMfA4Dca$$-#EdG8J0nt;3!g9!mz)rofH7qSM0LZ{?k*q4y_aaM&x74JvBUY2
z?8Y_Mh<Q7soC at iTT6=k<`y+L$YFvQ(btaH>@B}0<<3l_|MX|epLIbg?1WwpfUCF-&
zDMsW;H3RwXjM}7Kx%dYFz3?S{ILNj!0-6LLd!VcnS^+AMlD3I;9Gv9xeGWjT{p<r`
z+3BP0xyk|pF8uf3&YYGC5*6|E#Bwzgl$JGgu=4;W4l8JQ*H6Lx=HiGUx at 3?ED;Qq#
z<|8lCLMcpC6iX)zdnR7leG2Pi$5 at +8<px=zBJ^h*X||+V{{FXrNYLp%@!oANo&-ou
zDgHh_=gspsWl3BT0*rOy%>8*GW;l(5HYW(reb#%90i|Lf#&|{w_v+lFTZ=0Kn%=6&
zCV0`)IAnNOgz;y#l$7}AE09pJ$R|b81tMnMh>&pRYvJmH&w4GX%drn=f#M?!jBTY_
zn(vfo`nIbeIO*wQ5K)uhpy^3+@`Fg8ZKzk$=b5-UGV^LCl97Ho_rNw}u?=3dAz$Tv
z1!B-Y&$19zeEM)yAA>2*RHMO*{)FcQ+j_`$;)i^V{U$Z*0D_=XbdV$|8TSh65<bI^
zz|9|K>H&LmaA|jgw9%oF<fRGkI9$^wW?Rjvv=xfg-%eGvvsZb|t&QobJJ9F*(-?(a
z20%aLpZ2!E6UI at obE~c+Y=u~z8NFn*kySKHW_bL2%r17H={aFcG>WA||9VS*kT_W}
zUhxd0bHzp*fXrH1 at 5_5hAJJ6dyf6EFQ@G!PBqNE8#0={<<sV!w!<`+^U;S}98xs;j
z1 at ge|rJ5#Gd#d9%E4K?S=~D_;h8$o#49!eG-g%(mW}@!Xd-k4d+RpSI3$#>)xOmzO
zo7IGokG&qgS9gwtzyy})`9TIXD5XXK9%%%(X3_p`DUd+!U2qh>x%I%i%Oee=cH6mg
zcjYAFL{1Tb1I`oKDfph$;G6nc#$*2FLn1mL8o<<aP<Q52UVLoq0m17JsV*50Si`rm
z^o;ZPp1o~cBq+bRsH%@4i1FF;9!iZEtfXgTqKCH1MxtTSIJlpird7DmLPc4m5r2X<
zj(5TXIxaXv-W@#xWr=%z1c at LLsoHZ8^hNnjB2+=d70?&jHm>y5Ma at uU#fDqNee)iD
z7KG_xqvw9<CoWO`>i(RP8)eH6ivb^C4Mrugx21ELouDC&?Ip7uq#Q1COp|t#9psj(
za0qxxj}f8Z&i^_wjuXGf&<3KGbK|>- at _YOiciek63FXqF)?A^|@>_*iK|%+3o4X;h
zuTAK0RMK^z`@_8Lwo-FJ01^w+ZHoG;#U=a+m<gX6p at qsv&^VJn>)Dj(Q2N{M7GoNd
zx^Rqy`9i=4CJ-LdDK8X>B|h$-Q1F41UD4q#fq=Gp%n)=QV(tFMy=4S`KNNV@<;Rnx
zXftbd0AYoAnXkV;=@$z$nlvoX<rx^4Ar?gCLSV8sk*Lsv5_y;*lztCOx$|{RwTo6K
zlI|j~KnEDg#)lCV`N_-2@@+W5#CIgz5uU}QnOT%>Nux?Vka&}Svmi#bTqk5Lnw4(6
z!2}70r&OSv{_@^!dsR{ZIJa at t3if!)i+d9PAyUMz8M#7gop>kSyGMlV9W&?V3xnJ&
zH=5vZiLNEtfQ=C#?8H59pAbHTZqwO)lq1dvD7Cl$yUqPsY@}g8q2T8|_<EL(iXAv!
z^9tScH{CaJ?|)u>uFsxQZm>w?)!O%9!2QiNCE at 1=I{a_~x+af3LC2~cGKpUn2?y)}
zfT_7R|1uu(iWkOO+p1kab0pTr_SeP&cf60+qotpzF9N0jTy2O;+2<!BAd%hL0kIf!
z9x6+Q+2T-u#rbUtKilv0`gpS3uTYOjEs%l1jYS=5%bIUu58#-;GyslEGCvhf;QyG)
z<d;RUyqfVMm%`TwJVA}q!^_x|uo(1h&yAGPACidMf+&KReA?iUK`n3TUzg{?*Cnwn
zZDQwc`Fg`2Z2h{dE&9fA073o$Fj=408K;{?<>8j6pSzcZT2#<3Wa6-l$9_D`dRk2>
zhvjBR?%?RUus_gFtHVY~vUiXBoaic!<JRYJCNjRPY?2KnjrQA38(gN&^*<$k%JOZY
zdrM{NzwkM$qm9HMSIL&bX?p$5jL9w8PVpra+HwJlYj|T_Vf}?_Jz$W8DffoW>7^>D
z08K!$zm4TbF3;a}>1Rsa6v0w~Gz%*VP5qcaW$YJUWEcB<0zTNSDHk;+wUdq4YjX4m
zV66gVE2xH82_CLY^5YNi4`I$7((H%gKyXUmu^q_Qzj4DM3Lthr7SpBPWz~Kn$5giK
zUkNQ>FZH+~cKi?Ek+nb%2iFlco94cl!VZ at 8uTf&ShcEa?oSRds4UEGV8*d4=`=yT;
z7LgZ8uE^ZQk|P>!>nMM_+3HbFyVV16RDTbf10S%K{M-L9cSE=xHt|{R^GHE_7U3$Q
zQs4}B=Qk6BWWMZ<npqm|bD$iC9*@Pq40NFn&($fiPgq&`{#(HG%WN;q3e)Qe>Y}Q|
z{r?jdz9RY*IU{<IB<Kpl__Y30ctw7X9r~Dj*7M$7lIrOOaP{5#C#LvksiI=p_N-r8
z_ut}}OP0x?;Z(9Nli{8ibv4Z7qHMHQ63R;TY3EiBZ1D+Mehq7wJQJ$HdK$t at _Ih#)
zj`i=ii_b@;hM7T!>No3pjDhx at WkD+rF?;)UZBxn6(Jx*~0jDfmeX9Yy*bL#|ZcT)k
zoqJSJunO)4yhTt}_*oa?hN(1G<b)wE60{$a4;3zz(7{Y_YEc-HlN=7QO&NEF$NC+%
zY9E+OB2(*?kNi_k&<$W$Rn~QLC_>2MU|MFJ#0~^#@wWg0+_Lkss!o5ppAk65c2lX|
za=1`XF0UvY?Zq``>qeZeQlExPU}xWdBYx0rP{QIuX5}x%?d(nDy=_Yhp_bWM(*2tq
zFu?N&AzBGSPX!Zd<~Fn%^*aV$9LF}?uk at V*E at GaZkZyc{KaJ>1u!((bVVnSK<`wrT
z^R&AfyHuINI+Z0sw-^*R_%$x%BJTWDr?(IL<l2(TeArsOW{!Kgp?{r0sDJ_Mpra$M
zaRFr$L?xfhGw;>zK4tHhPB at z*+`_lhlV0>1zd5p-Ke5|37S-ijZ at Uly$QZViUEp?~
zkX~Ngxl~9#uLEJ6tWM9N+88 at RGS(u`ODY4d(|B|<@5jv$7g=nSU^?KR>dC~uuSvv!
zV_q!2nLr=e`56tt9WV3wo!daaJqA$!nV<E+kU}Y-p+R_zOkr$4xe|1;(y(rYtXxnQ
zD02A;mI$>P#3Wd6v(timf8+7Z{l`bp?(M$)WQRnX;U#wC7s*8Zqz>8z=`CQOJa<Qh
zs%p2peW}yc1hBlVUYZ3JGvAaDn=P~A46taD76%gYg0PLQWZ_%uJd`lSK6%WzmsqZ@
zTXzcFvv~$kaxUhi+8Wm`ZsYtNCke!kpkDv(g^}oK8l6jc7VJkTXHW#jkeGEsul(D!
zxB()9HXTG=c3A)O(~Cno;MFG(A&YwZY}eNiwLEgU27<i+p~Ie#GvI+XZ<v}6b7m&$
zhfSMidw7rjqS?Vp$Xp+bpA{x*JJp!G4zU<-hWMXd0em<a3_I=xcdsO1o at NDgvRT?B
z?z(z{*zN at VCO{N(P~8havRN$TIf4=h81BjCXX~WREO}-C29!;A%D at L^4AQ3nT*}fY
z#Lv_FU0IdV*=?kzzR?#hf9VZ=+tEOz5-o<<C>Ld`U`{oykuE-FrzWP}op*3 at QxSO3
zwG%Im{*%sK5o#tXmQyWsIOkc!q>0o6A6z95PVYE-J#`yfnNcY4S0PPrUF$I at J0eaP
zU9LBbhq2o*P+C{ucgP}$eAYl=kR)<Plq6Oo3HmY6iTX{ah|i#6?nJ|Nvd^KCZIVOv
z=zmN_bX at J1LR~DuU6$;1i}$q?lv<fwFPJn9eh_;2+}pqvYXWhJTBy{r&!M2m624i#
z-J4H<^A9cmM^klW<#YBMGO-3!UC$yAdkh6w4gq;#&dw)2kp%*u;Z=>~w5)-|-V#Ou
zOhMQ|*PgCMuidvX;c=`uj)SOW-fm2PW?Y_yTiRYJ{-~T!2Ch{2RbyJQQ~As9^YRi@
z4(|PYwj|5!c}<Mg!>rp8gF_qQ_ at J7mRAP+y?K41yk)hLL+O1JkS-spArWvoZS}o=q
zGH{qOd?Fo5SMliNQMtL<(*Y^qG~{%STM;~3dZ`8 at FamVBstx~xl7P9iFNSG}?qdr7
zmj?k6yCFdSi$`w>`{i=L=A_X40V{MNMjTTJI`M49s4@&@_&)G*)Py<{{AVS=aXh&q
z&BoIfFMvb>Hm4ohiChi&d>If%ILkA0<B!>OIHtJ_R=xnsg;^!ke8&=mia~bkYXX5g
zX!gxbu>?9gESxX`5hoA0^&y~v2TQN%R8CrJIzE0ihO)n32bJI8{}MShVG<UZ3w!Em
zm}2OJM)PVODJ^J{2FMQd0mg%O2ZNUN^W9%gBOLw(VGb*(`0lcEDP5;L*TAzanHhq#
z8Tjl+{K1ktwQ?tK-*zRuS8)If)sw^i4KaK at 3~J;oH$q at DzWONmx<fol at Fg1NGufrS
z+)Zzx^-|1*6SaqRS`V|3Yigfp35{IPuetfqC4M#wRk_A-?B-$mQ`8a<@tag~0_9k+
z_8yao{>H+ImF)|^3#yqfUzO_{OY!s;z?U8Bt2~%+!6GYvi&O`#VT<;F=8a?Gct%LY
zH4n`c1mRDsHwiEw7{*6E!l1jTx<017xJMZ|3Dz>^0BtPcBg^j(&;ogxQiaSmJC&W&
z&b8!^;h8E8hDa=QcdzIRKVmo?EEXt4#A|qK0mJjuJdwu723#^dw?$H)PoXHngtL%2
zOfn$(kizJKe1a$O<EqIvZ%6C|_Y#PR+J6*|8r at aiQNR)}sMch7M9V<ZNDV<v+%^1a
z?Um8aXx0S#T=;dDfd&=zM(_NCJSuZv9(O6Y9GQA(*9(i0U`p!8TxhWBep<&&16X7O
z{Zaf at MFuYqjpmTY+_HnL+5CIXd;lgqx*uE#4%ZX;THciplT|c?IaggOoGQjVe^9=F
zYv^Zn04}yLSBAQD;N@;7hccd=WS-60rO9Q&vp>VUr-nT2W)Ue>g1H at eo4W7dJCLmZ
z6~`W2dglPmBt)b?37Rd)66PGc9NzE_5>zX-r5mGv|7kELt<`s+r89_lD%nC)d8562
z%ip2ufDL8D;r^d1eoR>X6jtvROU*H#&Sz*Hnn|j}987lj)pScJlheXvjC$;h=$@4z
z6VhBDp|Liwyr at +v9tC*UUxQKO24?9?Oc>?e^>Ln#vU)UhT;TD(3ad-lYz71i@<r}_
zr-oj>O-C9nzI)sYSE`-(<8Qx at A~X`LQ+yw5hcFMkx&2E(Vhs@*mTJI5N|MB-iHXF)
z(p9|{IZ=Lo$KhpCQQUq|z*^R_rDq!tJ`;8ZNP=;*O)v$P<_AW at gcXeR&*`E2?D-46
zd)})uB~{uT^}BF~T-{02hJY`EL#|@lym4m|%oyG&@QDRhPFLU7tP4Z1I$-NPG_Tj(
zuF5g2lcS1e+v?-RdB0S?ua3?K&I|gL!rbIsPouWY+1I^XiN0)+t at BNSmZ>R&^W9u&
zsFpp>Z17k>24$_GRU!xeXn?R_*A$%tq8gww;kBB{?Sr*xTM$U*dr>oa{Hh~p86cZR
zCkahWN(#f~??G$_g%B!&T22KOiu-$DbY>0W&Xmj<oQ+Z8C`b$oAdISmZcU!W@#CR+
zL;b3t4XmK2W&szR`<|39v@<*IFt|VD5V at V9*l{Jq_~|va*qYW>gY;1qyVf7BE>{Y`
zvIfXNDdhGjf4t7+XJ$OSkU##dn79LM0Mqn^^Vw$<tcK~sQ#|SSzG<dc$vnD3`{m}V
z_8<V^82*t8f+Q@)78N#|tUSsEJRM1=V|x~RtD_Wrbm)T`3SCYjU$kjCHaE+%X?e=9
zPWY8pHzoQ_tU-_lL-)pB3nG`KC5E{BJy_1tI)F|ZB*iV`Jt2)di&*45=H;p-Zr$bO
zib(&(M<TIa9_gYg$i2EFgt8)EU_|yqI9EzEF&4N{;Lvg{*#U4CZUOb at ZUbm4o122%
zk<*L<-ZFGo4zRvjjy-!}zu9U0pu$72REV<&s$p~3U+?H?&h3}YYE)nj3gfy{I)l&Y
z8jMda?UZV9Bj`My(}e6`#;qIxUYpxEu9Pz<Fmekyr^zr_k3sg at 844>a at _N^ttw+c6
zz}WRF)q9u%r(@)1rEdjc8w;Sn=3r<)CtLwQ3Vrqcg`>MOC=tgXzkbDk-2HTV#S%&<
zs#wwnB+%(?QTH}dSOE4htbfaWwE^G;<+_nPpxHb1Mej&^Myn+9Q*cFLg*6l=>o;0m
zwIou6h4#Y!3rX3s8R*t~4Soj0Zd`|fYVgys%V(BK7AJMKDb3D- at p32A8l})IbPV(_
zGlvreL=beXwNsh$yv11p{I>{^9&{_jGO&z;mWbE+nb1i=M6d&GWte8`Ok3coLg)*K
zBYcpn5AzEA*7wf9SWg}mcHMK~ST))r(%%bbKLLGsq9R%;i at TM2f2?V<H+t+3ZzjOP
z!_}sdnrU2;T;7lkAg|ynj#NP$GCX2b5{K=K%6F(SkgeL+3<rwmT3%Jb>5`EcQtEL8
zVlKcBil0RNoU5C=7qlt~6&oCh6blQ3&~bLN1MX*=0<uaWnNe8VWt9Aj0$XLYes5Y^
zGdIBHohVfwy=U~*fsX12Z^Q_%>20>HLzSuQ%PA8XG^qJ6=D$9(T0EUp==zr#zBMEi
zmgiZ<P at M!SVtrW6ll--gv(c;e_S2$njXrt*EDK_fwo<|L#05vdIr)VIz+Pj&k5dq0
zS~F?)zCYkib8{6q&fWHG`*h-J at 352*-mq!A<RkQp_86HhZ+?u?zo6kkH0XW*rO7Wb
z3gyWn!P2jEV#e|qSo0AW9xugmB_wQ<^1<dKBL0l^--=2xZ!AfG3s)4BXzgoER7+#r
zho;ZNYG@^a!3~|ANfA~4_D(9;(J`Cv_qBJpLzBItDN;pNJ`W>@I>}GC#AH$%Vc at 0O
z=HU98%fF~2wj=h`hU}bE{<j at eP1(MsO7*~847}eD9?B{D<L#N_bqK=pwUw%YB!ITE
zG!B|+3m~xW+I%8lfc<(H{nCo{tSe$hSD{~eFn<Abjps at w)z;~~V3*#arTY|$ZPdk+
z*J05zF`JIf{b)PW_eFbiPt~*I!+!^+=$qWh_Qp1~1h)*WhGfu}r(?{S#II-%W>~RQ
zD05vvLsTi5*9R7x(xfRO9~>r}g;FTMbqW|wZm-R%ZbG8~27J1r_FG4MOlG%BJ_L62
zcTv;L87?mQGJZ#y>#-NPuvbG=Pf8+~aLn?qf4+>n!bv{|?^7>L0S9ZvL$TF|Ni66g
zbcw7Q4RI>rmi`N&R~|$vw(XL=9J@(UG|0K+?-C0e^+(;c$rZ7I-7*S<@oBb?V$H|4
zd-t?PwxP9L at G`um8zqXaf`GF5p9}BZfBTg5u#F+7(T>sziOr|b2|EiaI}k9bX6Y<#
zDJ`RzwVRqxI8t6H0x<btQ_I-M>)-K!P|yzOZc%wNiOxcxDnmPOs;82tWIP{aMP-fg
zN`RoM2BCd-YeDpYhp$+wsLVSN at dV+nj>GbiDMGTvwcM(!nEqdq7tC?G?t&{w)#i_|
zWKS`MDfJU11oY07)|C<#{S&~A=l_)TwrhPb65LIZWeuN2m&=q0LK=&|Cj8S0{BbJR
z@(=%HX5_d&M!kNKsN)A5?%a+AD2 at Y)nf93jW{MaF_IV~d5)&Enb#e!@w4I&mEc6NZ
z-fr`Q7sWlbb0<AVgE-SxG;qVEK7!H}(djFj<w~)_NUK<q3q_HZu-C?%@0>bu;9eM{
z$RFzb1ixTL=R&k7n%$9)Mb?aub$STU8pFM=-~Lz~sH2#52<cLVN(*V#NJwKn`8U!e
zj0r82;6*gjv;2K at FU^S<S%X_Ef+YL|54Fp5TH5DT+c|}Je3)2_7u@>rp@>(Ts9yWx
z7w8!2Tfe-{Iq1ef&Pwd03hf+|mi*TGh`<5)D!gUMM at dS+H><jfK3{ui5>e%Djf^LS
z>z_AaPDNd=8N<c#<#oe-u(*qlC3ljjz(5zX9wdtg$x1}$&~`3N@!iu0UjSlkt@^dj
zw(Bj|PQ}$=ym2T{0^91#x^_uT7iOzUyL($lf^;cu2P1s$0BD|NwW{>p*zUBf#eOMN
z5U_%l(`L~s=LH&DMbNUs=GH7-nvdAI8fCyW?;)-OoodGj{R8$RER&mX&=tbW=c$WG
z6$2a>R(@o4ZoYUw9g~WT;=Gt<(EhiYcO&TWEh6&+{RHuq2l-)hxYGRCTh(|zc#G-X
z{pk~zw?a?)q9c7+-76scKzxP|2raLvPT18rNtBOg`fxqgT?1r{_YN{+a?&_tw!v)n
zeENEuHUKY-ikP-DrhrKTN`;Dgl`c560OV}k#gL%yLJ^Vn at GAbI!oa=`ysfiooa1FQ
zo|~3|UAglyTeW&_ltC;KYH;lbwj8sw<Oa}D;PU~B)uh`=i8X>UNiNjyc5*{n#HOVT
z;!<=Y?Q2{!#>D0_;0)BS*9KFzAi?4rs~3O>C-dHHp+sH0s+1h*pQQ?AoR6Y+8$}>P
z#oBb=U;BdFV)eU>FUHrCXS3X&AKJ(U@`=i+6{?wOXoL{iOqB-DFiB#LzF0T6;OeOz
zFz454&=}(vb?6jKHZ(XugBC9ex?p=!HA5l&jVz;lYfsY3WA|J;yjVj=7yY-CIPs>|
znA>0Bd<Lg|?+bdONd3RWNZ3jhSew){7(<{bK>QaIB0mjrkKTnz+Iwg~^c+4=H6FWh
zz8PK at i!LAse4uXFt90O7K>Y~1ZEud1Dhz;ikX?_8#Hkd>pAX3vE^YZ`?M+4-?;e+h
zOv4r29-- at d@u&c~<`&5Gk3#3 at RMC(<^bsbI<eRFB^DwnCQ0s)U8gx=ozY|SWDV!Fl
z<~~Gm85O=o;F*oa2ZT|-e+8%ZbZ4Ovi~ZhT_d5w=A&36Z*?@YsUz3H8EG^q8rbu#k
z=!Ww8lWniD6#S=gl9N7`RI(^Nsll9*c6a`x>pqMPqJ*t_ at gcQz$_e^Y6&$MVF(Ocu
zNqY5Y{q4pHkaEt3m9u_Y(iryGBsOL0+q!Z3sLO6mTs>@v{z{Ekb9X{2plN-F5E(o-
zLJZ@$engQf)|xgphiv<|vzJ;Wg~3ty@~J~N!9}#%4;?>GgLn=e4OOvwq+@|;2xUNx
z_v2#5$Mkx`JWOQP+Gq6-y#l^|OHkvg!2SczsY-s at JnlWH*5=Lcy{ro5TyhlKE6tU<
z&L}U9r>C!A1P}|30*+XF2*&auN?{?2<&BwYx5X1l>i3+9NqZ1wyjMJ^2wKb+Hz=L)
z at bW+)kfzijY?u-LaB8jJC}^Ea9Ve9B(sxPcH=(FyiyGIgd at Nuixhk*|<tu>FQtY`0
zPVs1%S<mCK0H!mWYYrbPT{R#f3<aP>h*9t_T}pD+qqM1gPA}Y37`ajXLylawGHf#h
zhsJnP3TW_3x{YERliV0OjH^my!ijcQiy`CB)FXl*l4VlmazD`NcN}Gyidg8y(`UgV
zDq_ctsG<@UHdPuDlYu&<VO!lC7fcdmVxMmYi5(H=U`6D0RIAtGX%cD;(9M2Ob4Efr
zEqqtvyQgAlg?p~yvh7ySQ>^8-`o~v<69q;qw>G%%=&QqaCX4r9E{L}p;+n0<g}8`K
z>>0dkjbk>oSI3gmG}d-`ZsMczkFNosTyk!Wxnau5BzRMD^p at L}P&q at q32Qv3Spi7S
z&*Vn$OJjqKTn8+Yy-uFOo8!?*up8X)QP(Yr_>7yCiBmaTe+%TPv}Ku;Od6LDQy^T^
z0aLq0Jq5w>&0%@TT^jHPde0z(&tytOI7sqBdlQz<dhM~#IuR`6wtnAPs>=E=X;$R%
zhw%>iD|?G*u|mHT5t?@+I8ycWcPcCfpL21+jBn3&5l%aQq{5dC2TsWf^pY&;)2kK9
zN96hDcQjqcx;1~_Enf3kCUTZeOHyL_hVN>TPXR%PcqId7wM#w9(|6AbfgbgLoh2z*
zv2dpfTD}O>_klW at gY*bb at Pj0gj;EPi&yz at rmy5Z}`>y8W#elq3jxKK&?;}JZ){diI
z$u8?@hj1!YG92(pA*L^&%fi2Xl9cS&82H%p5y&j0|Gw%J at TSqnPcOGooKLjQj(H?{
zBpvB=rm?w5Z9^w|y{>u68MU&7upoEtp*c8+>zVc&+#s3 at S%dBM)7#VxY-WQy#8VpH
zNKQmX5H9IP4Y$y-ww~L<JmIx}MXERHbk-KIcmC?Ug(8V{N=-gqcBY*xUDdhFisHPE
z=V40i)4>hPtKbOz*ij<vaF%9TlSG`EuN;hDhY}fSo*J%*ruYjD9fkcQV9GS$=plCp
ztv9umV;^Z_;sJHip4m4T=!xsN71WA?pYe9)twOM>fsuGpI*u1&2*OFU7;WD#M+kR?
zoc^!kt;ZnY%Q%8=BI0JzGFy!ed8*D}!QiWJDFRp4mc}$xqS1 at WkNG#=^XWL&N2?-e
zC=^+g{k0nuze(5(Bry(<)G-dH0!Fv@$#Bli&KH5W4Uzj4L)KV#B`)4RV0$dk*qrc<
z3SS;KD#G$VScq5j1^hJrgRT5i_{D+8<FK#$4qM~9^hRcE)j`*gPjnHNrwAo!FmK)(
zfa;}EY54egcPsfqCUD~k2Eqp{1Is?X&1Y$b)8^6~xWfKZb`-K-N{d0M`IS`>#s^$y
zo62^Gr1d*oo9PsKOatAo3LKTM@=s%b3pRvj1lQ~anOM}U(A?ki=^jg%9<fXdWM(`m
z at NrvL6idr2^#`aw_a?_pUtX66PpHAJE^BPtKes6N_o<S*ud$Dy^^O+6<MqMNsW(w;
zjlUcK=^h$96~E{w=rn1kXj_8;0%BM9iEe>tGRL!W{V<vp-heI@%KPUk5N=?$h9`$d
zFn#|Y=1TFPuncnj*P*IU6c7Cmts6*uO&TR2wZ$&dh2$W+7SBq$-hD!C<^<K#qSHlG
zjk!+&0k6DU-GLjsS8>V<XoB*hE?p at p4U@hAkWIS03Bd%j5v}XjVLSdK&gN2i7%SS%
zhRxti`zi4=%T|~Rr1|M}f%sK<&&lQQnWNL}Q9xe$)F$S7ns)7lbi}iLEEM3k-L*nN
zu=Dge8&+^1U+~KuWTmx7Us$IvEkhP9(;5xPd>IKP at cad4TckijSV@;!g>arYic+9-
z5ok;KfHCI%kqJ2RY1ei)U5LlzVgnAAnKTjni1f4x_4~hXq{1XPm%GncbiUV-zx^S`
zne|EEn;H6E;&OLa;@;&=BL8Z911yVIn?vm(55Pe$b2;nskP`m?Iyv6Zx7y2$ou*HC
zC;~A-hT;|v8f})F!%>t%F{uDn0WShp?n5CgB4--S*~}^7cVPCb=)b!GGEdOF2j)EW
ztNtrIK4!x&!#LHrntO*58Hf`Te`rB^nrVF~u4Tg>Qg00jSi;~g at uGwGi<)?9-|hVg
z*I|T^F~5<W2$EPn(Z^2&sbcr3kca=>yZ|0T1Y4kUB80zZVTc14yW4i*O}5wi^4wGJ
zuK)v<x}T?;4+jOoQX=g-P4NU>rvWD6DZE0B4*Ec0O9~4^(oE4$v%7^M#fmhYZy5*3
z_|LmTSSt)r*iZzq)h7tzB2PS7qe12UAwdSrjy8Qa`~0-}C^lNn5DV8jTNGt at 5is>5
ziElp}?IqNV2Zzu~D>xbvv&ub@^QmDmqoCs2u(z+Jxcq!Njuop-viszC8p-wvPRl&6
zv1_?G9zPC-_t*zvZjFf8$-OH6EaeY+-=nVMZBxV>_!xQ>%pVu#QMPaM!y%9q3!W1S
zBBk8ManJ=){+Cjj+?SJ*AG7u@>h3i(#qUfS4OmE)bqP3_tvbG52zZi5c9mkr*2fWD
zCXLrLlv1G1nJ{YIL8>~wlUE8b))5f9yoHtKafE^s(uaL?4jdaHHJFlT{%ebAnHHqv
zZSRFBY>HpBS`fa7YVyk!)Ip2L-2G$Rkk#PJqZ!E3S80nN4u`e^y`=lD%rQ6lsKzG?
z{yAsI&bQR9S-86l(BAnPBtIAS+Nrc0 at fA<Aze<miy&s?<ADG07pP#$}0hFUE%#+Vq
zWEI=4*e{CMl42!H*T&3+84vAUo`9^HCi}%e_KW%_<-gn!l1)uv{xcsWgYR+XbVl<z
zS6V>sZ~Bm(U#QBG{Q~UKq#MYwmea at axrBjCSmUzO6U7xH6Pd<Ig*0rezb^ZRyj$Vi
zQ<3u*TPmjf1I^J(53k{3fo^4Uko3E&3&)z?-`-NSy@%p6kXF^)qZ&^gs)@A%;cODB
z!2OfqpV at A27dLmsvk}d*#WU|O{>410rhtL)Zjvq`no`0=Jy`-3FdSg*{3nJ$)=fDe
z*XFSjM!Y$sBfFtN%~=S6cPNLMw;=-IHvvnW_tP}qesg5KL#%vm9D%4j^7rIW+<ffh
zVgDkCM3_<*?{7mIG#>SZ6xhoW&;-JzO)q5 at i*L$*W2otllteBx^kanhXI06JEQ^b<
z&>3T&7NSqSjlRlD8Qs^6h(IauH)D4^5`e#Ar>^}#%F1dbp#+1Kz)YL<_jx|mUK)ME
zDmd-`I3{?14|al7pGdiSWlE;#zkC<C3v?*`vw`Las(NvX)m9cr&TCc$L`KQ$STN#P
z%@deLy&sG3$Q9Hc<yR6}LG!YWrmDYbU<24D4;I^grnaw{Uh-OB8b-?@pqP!!H9Y#v
zaNM!GHmOC*59NX9q1y5(h#_q<IE7w_G08yG6FIx}iM93MGo+uJPt=`9Mo==!wa7K(
zevZLz!1s9;-43C2I^?zCDPg)-)mN8LW at B4w-uz$3M_StllU2*R1{&f&2Ye)b;BmGy
z?-gXb&V<IVK85YEC2tLSzavj96zPUo<pAN|8HA57pO;U|G$1_os=qRmMYOT~7YQ{?
z2k!;oP`+AB4auVL1%XqhrJ!%Y3c-IRH6_$SFH}a~Zr_DXx_sR1N1pDzKMB{79|l+F
zX4 at n4;Man<eKN)ATKb{~=uhd~nN>?01SKNuwZ>^N>0=ofy*Y>=%>iDDzO!$q9phop
z-wR-f^Uimt`Bs6Cm?s*#QLA!Rf6O6rn#G88+u%;XJT!XbdcC at leooCq$y5C4Gs&ou
zf)mGhjnT=uf#u+oIIyv&xZ{mCmnDx3q&1h_b5{YjTX?kvMo~2WxLCQFf1*mPv|l at t
zTjMslaXtS*%+MPLQ3y)sF+4xfEI0b2mha#wX#SM`U;rnI1;l!qIiV<^ZWv}^fD3gX
z|Gr0y%%Z#nrgs-2w1+4l?-JO5i=!`wRHuW?=v&#W51hlu`FD#Or&#jlC^AE&Nbq}_
zwwIYE{}*`EKuo#4BK at r$zNv;w)HB`HxxYYyueR9L{MXbHbu+8C*uegHRob~lJ8oRm
zo`d3rq at -kF%)(Pn$E(qDTvRcUJd>WR0#SQK`t#qx$?iQbI(RdusK#PXo=wA)S;nSQ
zxn0kFc8HR8hJ^R42lJ8246OoUfyU0kHL~?AX=Zj0h3OJ4edb3LhIvVozhSO at 56xrX
z&*yfCZRJjHP4wUBD at G>Yr3;lsx_dttWb1TbYN+P!vUq6I`P38V5>`ItwXW;hp at rF4
z<YM&eM}Nen0GCTGSiS5Au6^EHwfa9PS#A5~KB1X;$fC-OTesm!z{96_KKS at -ekbn1
z%bHpdk4y;u6N1nz-6XzdyrKsTjW>zVHSX%wgKczVEdRw&b%10*d6!gFgFq>hf|V^@
z{GNB`xaMLT!-J(`nxqHZ6Sx|O6bl?+0r=Pjn30vd)&J9R)nY2ftxPSEcST=K*M$-V
z-u{JdQg5F@`VmroArRF}m~n<q(UU-r9z3UiFW1VG|Az&FH*QwnchC`c2x7V=dDNPz
z-ObjH`)%%_k*z_3vQwW`m7k^mhSE*cL!a~1ic&X_=@|G`U_rdUz<mLo%%GGZ7xsXm
zU_X#8heiAe7y0t2Klu2<HqpBVQMl}$HFS}2?!HUa+sDAHQ85GC7L`!or~WEwHIpFo
zgqAme3KIcNg48!5SQQ#~Qu9?6{N+^JM)nr=C=^s^sHBTYsQ$>rQ*Df at UcX97yX7xR
zG8!iR*Hkuq;*1?EFfj5UgUNKe)l_xULN}x7FpqoXLZV!Z9i3wDkhT(r3S=AC0I07a
zK^x}p15d(J`6mjhDjViEs2Alv?!-N<y^<_mBSG%?Ob*MHN!tR7-(bf)EyZ*TRgsrj
z*Ek at ANATn7jB%>emftw`k9QnpE_&)jEv1PMXW|Ey+y>iY7mM)xXa1cypYhGB4c;_9
z5m4HeXUU7bYgYq=^z8!DdYGeB?jofR+r_*v-5s<+t8F at 8V@OK43~zAb;_xX at lbvF?
zp^Z#gd=xH+05`1as6ocil2wwK4F<d?vrNxh9%2I)VD{6W;)?(4U7TdmVvM%<hoe}L
zs~&Shco(f0Ka^A8gdsr(Fh-NCQId(6v9XvkCRfoi1+#_9)4SOi(YysDiLSH)yGaJu
zlLy2K+ERf|@&Ozq(R%<q=;E|qvA6QR5kl#2gxFWS%%Hz^hHtLo;8ZTGOdfs!;_?73
znQoMJDEzO&)$vqlQ4wqe3i;^@A3I9xYIIc7aR?pAw+b{Cw~m~MAlO~Cn{p^wpXJeE
z1(;b>j&Cld8*rN?XeLrLtIDbDS$bvA1-ifZy6b%KbC at CiHKzS58WYW^S}GXEHP!!%
zs3sz$grGRo9j@)y4m+XmX7`XK%PQTk!6+GV at V<8R{&i)F`^ZZ~BF{GZ9>V%4S)S7O
zPjtd5WVc45#DR+TpNx6XvI<@(9eg2}8nU5UMdmq~pEwLa;o2`&4B6dNm%TYuM~<;%
zB&l77VZ!!RUXGr;Ap&rLUIX5v at OV_#SYlM=7cA^h45C}?S*Illi}Y3{4(m>UQg2{N
zbuuiO=oEl}qL|y^n~s{OW_PKCJd6 at KWE)ASfB4MSyVA$XQ8cCP23=lsw<70oY;Wyr
zjaN53Khe9WrR-xk*Qoj9z<6Fh=11^Kg6pcMUch*Q7pG963dQEhaMkB4^`uy|nFd}%
z6<LKK&Kk?_Ckj1}IVc{BYDD}-PxTD1z?2=s_^9vrLDzv$xI1VCoy%4~U0LyIUji7p
zm*~(7Y|&A|e#}W#mc4?`KWPjrxHuP&QMcl+I-mu*vQ5+qMDp&i%I3$A;4>gvo(2^_
zWIKgtyzGc=l(^OvJ~C;DT+akhk|*x$Q>s*f6<zR7Fdi46g8ZV+rrJO*l~_~>pBi}Z
zRsUwm&}awbE<W$m=ULjfQUa;CEluLDq|X_*n?y~sy0nfvJWixnH&kzlebx>EKZnma
z3zLq5*)FEJhE8$H{r at Vr+3*D at faJ4a10m(>kA={q!fu*Nbhi at ZRjE*!5Pd>KZJuzG
zpgLRf39Rj3snRHvrdB(;f5Z&u5&TAqxUv2I;h=0h at f|`~RjiFU>aY3+Y$`4zpSpUL
zy5jHwV90i|yzKy{iPLk`1;DklQmx6}N-^aZ*2Dib3>2jwzRZbLrJpm+D6LB#;(?M8
zL?Ju)#8&n2kj-Z0^hR$MNW?zhhna7~`wEl_qvbbU=AESfQyIXJx8(mNwLHqc;$Ku7
z%vva<#w}ZzD*-4PO^MEyR~-&`1;AZK_V)Z+XAd*IarT$Tn929`p7xDyJX^EhcBJ3S
zo<&aun1WOZw*d=vWf%9*iK7_+?U4*iTQ|cX{^6{Z at 0tXD-}O0Sh*za<D-CNULnyo2
zkzhy|!33)@9p?8t>7h+b&clH(4-y&CODc4qH_F{uwjpD09 at +?!IH%m!dj{E|3$&_>
z)_<|qH$M8 at VBr)s8Q>g1JgM)|F at i~Nurmb3bGM0!)+G4JP?pcHLuV*Vo=4N6XRBA-
zQp0XoqIy%>19c}<!@Ib?Y+hIk1;hC at VKg>J1ax4AZ`Ultl3fmOOf;!lAa>!Hk8-<i
zbZ|D9ZqlAu4}&{qSa4SEJj)H{VY}pj*j~?pcA=kvE!Sz3TRD8nChM at 5FA7cs!Rw(0
z1dZOKC|Z{IJQu|)8PG|IE8SuIHn-}zeM|-p?pW&imw}zvg at n^8b{wWB7)0bVEaeAb
z`L(3)z}U8VsS=#0a`{6u1dYBtmQwIyXbF5(#;VwAH0 at Zf*LJ7VFz&B8&%lUWY6OFw
zG4$06L~3|oXz15Yd(N34_aZaYAj|A)ZpM-FKFhcCb<fwZ?91b*AAge|#Ko24=#g|e
z`$^CXGGT}4gMJu)|G=lxj3&aPqNC8B_D8aLHN2lY+Ju=>m8R9B;v7h>5%-o2+t#!v
zX*;8iMB*&qKI1JZXi+K_%;_KeprQDHyD?1rr5&W-2*g9`;(`>?<X%*@zu%0#?!%F=
zHfdDcskJTGG+*KPig(Gnl4lEzA81((hKo28Kk)wC&WiIR`Ui^cR~NW5<m+<j3DGH|
zVhYzZw+<wUkF*@EPu5Yn#Xs4Zv_joA=$Cxv5|iajGllLxD9`jix at IWI7X3e<aV1|p
ziq1^4AFBu?Ed2?C-vB-QZS{a%H9<NPRP1=8*Ulzl-Pgk|r at TpIQfHnP^NzzAY}T77
zs~#09^gi&psN7!bSW~jVUGlb$`(-ozm<i23Z<XZasXLtzKgNL5e=Z|zq-j4MIa<LI
zIEU_re5qHoeb=ZC_ at q&=$g$7g)df^(_*QI`sGyxjS=0cB+D^u<PYJ?(F2^wcWvZ^Y
zSY=`fl`z(orJv5kiFPy=8xV!oCydiCAo-2Qsq|IrVn!qvEYJ_-<lr~1MSrkTI~}Bb
zTrf#s0f1Q#P-`F6;5K`Xr@&wu#8ldzO~YdO{K`m6vaNSDy0U}I3q01nsHXX{re*<o
zrE9$U=tOJN5~YU#4Z48}@|Txe(o0VorOToF=uS)B3|-Z at WXfV+%P(n*O)Y@{3g|Xn
zZl>z3Kou8Tv?I5jC>cUz!r5OX{R~X+XZe#XzuUd#uS4=O*mq)PcJO%qgY68U>As-u
zFebNHT{)~?Y$m>MaS7$jnr9t-8F$9UTeLR$o%O0~s+C^wygi=vML>P$y{f at ndu@qw
zsFO!YG>JOq9f}OMPdM1Z at CW30J3JyJofdc4ieW_VHF_V6J_NjnRrs!+Nl7Fz;7*A(
zZ9J~t=Bv1YuV6Wfwfq#``x73&j3RBorv$-Ojs`6)%(D7!D#M9#YaxG-x8Txg8nc^9
zKuXXI-X)%EGXQ1?7~NgwHvp?S6}>uXMxwalR{NWS9{;K}W^$S9gD46fL7J3XeVryX
zlY at 68Ko-0m>Xekuec&JR0HH}-5czZTBb}3*M?O0ci|$=t%VyKXOR&Bk<te;ApslV+
z4!v3_YJ at LA(YZfo4-;>vWBR@*sz5g}K&9D{H6m#q0n>yUeo-qC(emQ*VFV4g-=5-!
zggQM6tb}Y}Xj|}!nMzs<P!!w`W(t4mk9WV-;;u`4YnhD+Y-8*l?*>+^F`ffg0wT49
zI at SjzmE%fCwpn1BJj1nS`1sOX>*2{Cw{Cf){nmM!Uj8a#tjUNZM(c^aj_)}&W}U?z
zGo!d`804Lmt1ueyGfghGy=}tiakq$2;U*2v#C&2~&R8am5e*Zq?3EVV%uZLnX<Qyj
zff-ftHtXAy;tw}k5>c<$OL#Miq!$8B;k;cK)v=&H|4)>85oCKx$#23Gk%Vb2n}5t(
zcr?17 at gLMKjK>IhB6vW(kNMM3VpyJ^W;<)HH=x9x!(?RG)yG;<<p4$inDzOkKM7X@
zorAB_R`e&=QU^7r1u+IeUKp}MulfD}wY;GqDAY%_ETw);0Xgc8_{?|s!r`}DMp{EM
zk&7l&!mc+jR%HNY5gA2P8<k0sE=%RcdvM6Bk;M{uZ%O3ydXY6`Yiy#2*F{PS&SIg$
zV_3#VGf1D&@O^lr*RZJ(Pz8|eSyu{yN6nteU+sw<%nn;?8Wa@>`ujsBjtR>N1gFqN
zU7ce1u7ARz3`bJ;%pvUDIc`6W+NI1&Yy%hGCsGFYL>tig_$B`GjmqQo74c9UFEpoB
z&MGj@{eE8EE}Lgu(hr*ntsYU4ej|TeGzzzs)q!%2e)Mb$=D>46AY~CwNZw_Ee?>V_
z+5s8(2zVcby={9OlDRGM<_K4zSovAEBDF9qr|q&@BX!wzXUsRh))Lp!t$)!TLKS-l
zkm(*6bO66 at n07p=Kq#6BaoY#v6gOs;NQ+Eb&Frp<G`Su_Q#?G)ua+w7&6Gy4*D*><
znJ~kgyez2JH`LfRv6ATI8wde)`N(3TXCl7?Pm;W7D16XuM`~SivJTg(3y)b@?r0|d
z*yc`rV6M(GkjM_YAtR}ooWr}SonJn<!huL}!W|Kn{Vd>G#<unbur7b7^aUMQT at Ft4
z4z4WwePt+TBB#rDWYq?J8)9|e9&#K8^mx@(YT=s%vi090`F-1Ngj<VhQ1xzeV=sIr
zoXI5dZzs27g^Q$>vDWgPSOZs~-<A_;!KI_WRWkR_RJmPXlplkKqT)P<C7=%jbM~93
zFiQ7QfESqI9l1fp<ntMosBaI*#!nju4bB^FA!hMY#UA9VpLa|<<{r!K=YvKa+rG24
zF|B0UmI}}@%AP}YFUSKc-DwVt`Bbo0+5K|32p1Wm at h`}psvee_2yHtU!cyD at F+9L$
zp%SP17w_FRt2}o%X{fG<`vON3G=qSL%R8a<jBL6YEhn~XCf=wXzCO6jlABF%EzkFK
z8yqJQ5&p`ONW`N^H68O=40SGOC=gTpAl|o?mBYywG?-M<>(X`9miP%85JH-|zz|KM
zTdDX<ii|`eVn33G)+mTl?1^Xe3kII9xIT4_6Fz<)Y5-s`vFEKtEv67P;TiF>cVYI~
zLL7-<%c0w&R&TVjOHIU?a*TjmAtD>EXW_Q88NAQjb at Ri6D#SAN at nt?2I7Pm_7~Mrb
z4`FBErse+nt#9|aT4V&Za$)gh2mwbHA*g2(s(#aNA%TClUJOTqFK+t{;J$fYY86Fg
z2RSUhxt*1!{m$67 at A2!VPTdi at WGp4z@&-lQHJ2`u<$P7I94I)<U2VSlU1jquj+4Af
zY=t8`!t^W+hPdme+f2xYN?(F};OoG at M|cxtMwW_xx~&m-I>EY<<-%Ru3fPmT*J4)O
zU7B|9GpVuq^upWCstQn4m{j6T1Wi>>eW{2y1uy(wyQHmCnKJq+ZC1)-ECgK3+2DnH
z at LsS?0of at 8ltxIZ(-MTKQ;|fdJ+H$R<cNySK?Z}$!8H_Cy$Lj|z{$yMvsM*hIL}V}
zBX+XS#~&W1DN1r{#QUjL7)llQXP?8>CIJ0c*g)kT^i-n~5Y_~=!`TRRsn27QPxM)p
z=R!iLUjV`Q;fPopN=u|v&8+~nhWx=oP7}jEyIw4v5=#29w=Q0wcCOoQ1G;E2g_tU$
zA6BFAP%3RNi$elWM+Y*)4iWxwv{nRMo7I*aTS>pdhvD<9?cUOcwM6IkvUrA1t4L;s
z`GgiQ_iPmw!NjO`+y<_wLy->UX$m&C;iG|BnZ1sYQ<1_td&ZotfDo^c3p!N&lfs_e
zx6Gu9l%U%E^|@Hd7lEE~c^%<;&5_ge^9J)ZMcv{(9Shp>Nr<*8um!pKgld3x at Et$p
znLZ3DP65?s4~=qyPz<}tDHyLB9Wg_ewY)q5hp81#?E?CvCMZXyhWc3%BswE{<^Pdl
z9N)p2Od){CTL(Hi(>XDa8Qj~Lo6z=0KAi3N*;9h%zCOtN*5l#@8GGRx>261>$@0Q`
zm6}xliH`p1cg&-ASV034;u%_vHlK7&DJdiFx^YS>aKtGF9S>d_JMk53d`k~Kd}n&>
z6#&+byYY at _RU^$dqybnWRQRsDD}IGIO<P?oRZ7vm8ddo at paiKMq#fX86M8tFk-^Ii
zUtBy~nzK$_TeVV9a{OQxq6Le^Qh3s$U&Twwj&cY#TPr_J7WCh=V)*PWyT`(o62ml?
zy-6jTfsUKN55oO-op401x|PnF0kU5Xg75v#N7t2`gr%ml?j~iwM!gC&xQ<}P0)&ZC
zvRvezvf#!^2Jeqb4paxRHRlH7_H>f@)_rWHbSm1Lx=@y$R<x!`;=l8c5*LbYv8hZe
z5TYKfx?T~lik)OYnB`h1vJsCaj!$O1{$4_(4{cKIdDJ;P at RX*#IMOd+cQl<d1)|sK
zIJe7BU94IHANQp_vn#Uez^tk?Z0UOV{04QF>+3rt^i|up2`>vkvd|zNBgwc&FQe$s
z7H$5%8xVv9rIRQiM#vqox^#42EJxpIr- at GaTzq%DcDeIM)9SFs1S8>KFVh}L){}2=
zhFM*i(Bc#=IO&Hhk^HpG^1%(v at gbCwD*^_nJ4K&x-I1v5cGnczGgOJ`s)+no3eu37
z*~z&K>N4Z_8E-SYR-m6smnR*<Xw%g;-6)dBt0X7nlK}u(&sW&q4BaoLi-Q#H4an(M
zX1K%e0n4lxGK6~CK(79RZfd2*fJOE1=43bDnd}DuIBZmsVT42Fo+2IMD5A6+hmGgv
z7qkDiBXoRg7fPuhYsRHKg@{l|877n>5S}X(f}+K-Mvgxbj=3Hq#L&oOoiep3x0hWE
zb;Uc3u}3UWCG_9|pPwl3?8#KFOqme?hR2rM$xI<R%4r2tnA#9?lhZ=zrBb?B24<Dw
zmKxaQLvP+$^jQQa+^Nc=`@`o!HD$@8#AkSm3~RWowD;w3021rr!$Il3_db`fV67i2
zgkwn7H!9OHc!`%jpOHBJs4VO=PBc`Mz(KVAwF6CM^5Egm at ja&;Tw)BJa`;3>+6yv~
zPDX at AWwqGbXZYW*=xBqANY^+n1d3jso?FfdhuE1nMY at 7s6m>b12?lL~x!XVFf3Q7N
z*upVn&YIl04EVx~fLU at wJ4HVh{J*w2s``fM>74k`GbmckMr>TrmL&6e0zw^f7S?*t
zggO&hM%5~C?U&@@5{pcr%nA$DJtKcQwUQod&e?Z>LA at Scn7XGzDGKR`=<dVJCf`&N
zOC?|Hx7trI)0`pZ>S8{>_|H}W2e^;@T~F-IA_j at Q6F5#MTr9LH0kcu+Q09#b)%@vz
zdY`N%@NkQ1K&o!*5czr at H@KE(J^jEN7RO?+r+d@$z02|OAs?m}Z0lcU-t9`qBg;g}
zYla<WzcaJDg;>nEAD-`LHCVU#bhQ0dG?4lfsV2rVR+`3++#8P=ZJCm#wcRI%(P-ay
z1eYxJMI6LD3n}U=jkjLsAQ=gY#LY8^2lXkS?=$*F00}$z#e`ysO)Ju`)e at n<oFu9k
z22bG8v{#$2tms#DO9&27AB7oyb*co}G>Bg&Rf$Q6Y0If)yopVNE(|vldu(uh!Wnk=
zdt&D7fa)nMuCyn9AEM0=anMx0Gn`GTf&Q`HIq~^E9JQX-E4zfMO3>hW!o2CL)$|n%
zQQoCX)qZI at WmVG{O&rR*Yv|<7EIO{<-H;TS;b}|1u}BEbj_b`G<QpWY`(lJtI<K-{
zK{GXXoNvIOIN2ah at Z6Q7VWb*Jh$YF^*ShpOy8_}_19;0Dr{ddILWdykV-`b^;QSSG
zAbL18te)2wrV8jiycPBqS8QN8Poq)EW`7yKfelGQ8!Sid))pBU12Cfd!)==trNG56
z0Slt_{cIFqWn^C`TZ=|tL`WO+NzDY4`3Bs7)Y_NJlaY_v7;8^Dxml9V;jwU)15WO&
z7Ct61OWH<64WJ{o(A|b-aKu*^yV~Uq&XeuNPt5T`)8C2F3`F;{UAeqQO66y!hX_dW
z=M2-U7-Oe#kQ#P1mA?fm)E)z1S}S;JiX(QD<jOAvtUM_qDrL~1P8L>sIb|l=9(I0)
zTErDLkLJi$Zs#`z<0wch0&=n7xt-CFJ&;X~VC(q$OQT%yOf{9ei9<%?c7gkd>W#!*
zD>9g^w?d`Tjr5=@jteFCW*FzM{3FT)Gr9!E_T=Ny3Xd!p<k<GkJ4(Eix`NYgAun~e
z4feK;ZwjVSo{9k=nN4-ZYP{A|RJJ|+Kd1n1y_tfSPi)J95rE&<lD(M5t&W at E&iHWf
zO1q+~>-!k<vZy3)=&hnuEi%??ho=290Y~1b9y4G0MaW5UP<P9BT@!0$p3!MQNASN!
zXxqsBc(DkM@`!?Yg$;k?POVbgRb249dkv+1x-=vGbvWk<Z}soRHOls1Ptd`59yFIh
z!}_4!n*AuOlM%~1m8g1j&SY>Sx9`-+BNX`#2iwQ)*x}Z7?QL2fos3g9*#fpo^u2_F
z{ouztU%quPr<S{y6$y at 1ZzjJi$d8lyigWx2T${eNXnYDZ#?pX_cFU!wLc-t at K#5kJ
zJB&K6WChOTHFycr<eH@&qtTp3nG9$<Ejncr^aA{;G`b097UK^Aq}xg*^FmE#H;dZp
z;oNQD^}*YA<rxBnn&T;n&k}c7JUWmJmU65yjZb3hHmnY!vrh|Z_m3z7nL-#eq3o%U
zUx2)SWVE>tMXm=NeULM;FkvbNoG8}rL%*Sx9e<8e at T|cwC5q9ck<~7z3|qw`g0f0m
z$?-Vr&_e at UD5fNa+M|4Qv$}T?0Y33vs0gykBg*8LI{f#5czdf7(72)rhy+uRVI(Si
zXZV)IFuS>=sq%HmbnFYUhlW7UxgK=(8D}7~Ep<3NFtULe&U+A${it;f^#g5UC|G^U
zz~^-9F8-SeB4?IOTpNi}V}M>*%kq5OJIW)1Sx*oAi+3#_Ey_ggYncdDw~|}$GMZS6
zCQ{&3D%VAyLX5}^bH*Q(m)+k}Y0kpSf`_lbaOkMsou4jsFNo;NUh|O&DqA|D#%fBc
zSXN at s6f^FIgAL^qN+gzGl at h&3g@;(M3)-_s$~(@io(usti-ym~PA)K<)MuJz8-xEl
z`Z+3MwX%mJS3nbT>DS<k8vDN5DNdN;Gk*-Fb&e~!6uul|x3zC%VRuDY8q76%L`_ at S
z!Q`bQ&%rNaGK;-mYE}tpjgDz3<cl_bZOPU2W2yAf{I`RaZ^;)mt@$xiK7iOj at 2vJ^
zYE3Z5ARn&JS!&jyK~>$~$)gip8A>Zw%#}D~?hDjyc<Bl0uStUAS{dOo2wvlh%|B{B
z6494Xl-A;J#{tjz;Fa3s9%%!C{?u(17)W?=C0{|?Jkrlw8uMs4qD48Bg=_JGuIPDl
z36+iB-qGf~acy_`lu!KSyf__~IhiaKEdiRbTk1q-BQu+H@*r=`2S!KC-aI8>AxPO3
z01qZUTDG%<jbb#YpE7owNs*gMg!%lITl_sS*R+6h#qG(Y=M!44Cc(2^ksGsG3#>fO
zIPPNm9G_Uw+YnF<u+stlhP480xA=H7h5n22P7b**!_%p7KZgfQY3g)ZMmO(US=A6>
zvtRsS{EKI0efQ-uF=T8qL-ckShT%uK%oCsrO~5JsZN`fbw=i?C+1ady%Iv8`=3)Xv
zBecb!Mdm$pn<pkha1;G8{gRO|*jI#+dj*RWU%1vj)*QxaKy at AY-b_MLXzz>F#G3zL
zq3m19HY}FyA>##G3fw_ss?N~2MBAJ9*T%NGz)4G2d?pL{&r2<i88BW+O+ak;MJHF0
z^ey=H8xRhFY`O2Jefl&<7zx8zw(=I~BfC?M_L9dxMdx}SHBo2B?)7vTjWnMCnvry#
zhy>_8Jlhv at X?aUgpQ#5M at 9^8d50o$U(PU11cJ at igFCIX|5MtH-KeB3Zx;%=@;JMz$
z;2htMZ1)2EF1=BgF-Hg*2yFR(=7F{oOcFajlSeJ?OVB?+oPT)$>{FlR>78hZz9 at +c
zQUBQO;Q7>QVq74<k3v7tK3jH5d&M)kxYooLkfzhqt+-8ZE--VjN8x1mbo;pYR=i&c
z#X2Y at tq&;{TgpCSK;SMVVQ6cU&POLWY_Mg#+l4MKvzcEGqgr~>meX<xFJPYm at o^53
zn{Uwzy!^YSU$Q!bLgi&%zejh-YrP=-<3p48Cy6()---Y?K*+zd<<r3KX)XM=SXKuh
zERMntL%U!DpE`hS<w;|aW#t#e_=2`loa}KpkRuMo%2Ow0<A?sXt#EHTc05?)X!W!l
zd2p)lt- at UWdMHrb<!PeIdWJ)ZU{xu?=H>sy<CjSyu1meK(0E}}h#56r9D5#BjiCOj
z{H6^T4U^qS(3KaH=9@&AXi<1e`3U|&A}Zo~-bd(g8YzU!C{>X285^qif=wlvb4%6C
zyzYyEa at trx=5*<x+6!hc%30}W4CuBxBQ%gZZ0r1h_cthTPE~6?q6OtK;w8}cmCr-{
zYoXOJGDjQk7Ur at vPd{_m-0Rep2DUk*WwX{z{Qa%&{6S`CSeUvT=VxH9QrX1o>qe!P
zUh%m+%U6F8)#TY2n-sy5IwvSTZE|sh=wN;S&W4Nn*W|WLILH^WHR?J&7;eOmn&Qse
zq;L`D>g6<D9!=*(v40sGXlRC}0v4>Z$aC`3+|$oEa6J?4t~NlZC6I|6l$t!M1iuq*
zAj_5)me^QmC~Of-O)1?gt>Kn*ggOX|lr_W{a7H8dZC6WgmIA@@-<4>mgFB(}Wf}&p
z8tGKh8aD_F1H7V`w at ML^={qMnG5D4>E>($Ef<w^^(HFNs{4aX72HR?;@^||(=jf6@
z-e|4KC+;+8%a5?Af<sC`(2XP6!!mwm8xp2H*5KWB1_O2*fE+SJ&v#}fG<zaRXaLOx
zCcV!%Vt5tpin|v86rQk(Zu*>AH85XDb%?sD;{Plb+Aim#x?<Oz>mvjE2Y-&s{JAVt
zs5wBqxhR%}Kw!_nICl2Qwh!=S*_QeHXGIBnjd-*S9_~^j__2H}RRk1YgZ4)_?UK|f
zh1qTCN=($uc_Ld=)C}Le(O)BkdQTy$U=&_&j1;0=WV(F%vAoiSM7PADaj+_H#<+kW
z;m!qVJP4RZEDcy3pff%1aZvgKw4|nYYx~N9Z;0ax11)Bmw2MPH22V~>0A0cXopLv@
zD!+Myl{NFo?T0pi<X}T;m$%EaejC7MOe={LOOc9i#&D(R=5v7TrrPySUO8U$I7f9M
zS!3VflSDX4e<}Y9LmAN}QZ|9Ou$U-)K44hF*bm`viPpEDig0f6Lk?4>yJr#Ki&@qZ
z?i#(3?ftEot;ai$k_DZfE6Ac{e9P%VM6LWH_ZYBy|EZT%BorQB>M_b%Ms9$lT;t<X
z9V?+PP#hvbwE<ra9ISIa2~F=$+NIXHo3|MiYu&q%rt=|2chr4=>@m|z%@$NLG*sro
zp at sdN+3YBPYAY$1&}vLUHE`(DPLqrrCY_=DvXEg`#l{qfn8$Z?6R09s`~Dp!Pg3WK
zw8;n+plBFSyQhsOFDFT*t?u2$Noa2qG`129z_n;<DP;urB)JZ~t7|lr^zB?@wiK7n
zA=b=-`)9e|%wOu#V_&wPfN4SyoWSe;(;kObhsEd$;9a4_yj4BO(lMXEM!X!34I~)t
z->Lk-U?@1m(WadtkA#)z&+?!mKF&WMUCdkHsD4|fs>syO$gQBXgPzvl=~GqQUN8id
z83+urKjz}#cHzJElerh1G&3ht(L2c(Izn+KN3(Uhpd<wbKxfN&AV3o9-sL)nS!Xg<
z=udfVixcmk5JH8*=5jG@=!kF?cv%2N@%oLnl1R!~TmAZ9B?=P*-Z2x{Oz06V8J2eY
z`Rse9Te*Qs(iue$ih2B=+U_#7@(X`MyW}Ys<_J7w2gC_^fM}_nD?P6ZJ_bT!O2>Da
z?*ILU-a{Bv_n?~pq77*b3Db|zWFSOE;U)ga*B18*- at Z@HU3<xEhqVS<hsB?~)w+e^
zvQtOFcOTjPe1)4BMk4m_O$4nd-Z+$rk?%Q&;k)4~Uhi;ymObBmz!`AnAVhu4WU=>U
zkX23%`L{ZFK3&_M`^#!c-UZ)v^FM9Lc5_|>NoR?UsPN`(Br8(|(}`FFu)(O51EK at D
z;=Ll9ep?}`G<HdNx+9$m!dgFd{?vowwjkeA?_=fiPfXtJ%7T~6%De at s`m at tC9j86U
zo%ZKDEAvLWILTd+ANQas`D&0ory at RD#%WhPWzKdd*yb7`g=*~9*PsRJU^>3U{W2?&
zOyv&-<rgMm6;<>$j)FZ6{M*6Ej4)tG`7Yn0bUrw8ae!O_QEue2&x}wuNcR at i3ri0B
zV)IcWVF0&oN;guF%A?$3E481>e(*;sQsB#rkvgnTDK=W8!W|SUPjLF9{eyAAw at 0t9
zsI4qR0Z1lKj<QZv8OOL^!niL;p!|`B;=SCD9wb2~Lm^QmHX1LK2Y&XnnE0I>nji|w
z4aU{8_JHVk3>kNai~b7_x_j}S6>UJb(AGsYopP||RYhk09Knf)NcVAIcSZf-_RHz}
z%1}9BgL`o2kY=KI9|zRcW|MHmVl_{1RT#?d2=F-6y3Bjww={AVC-$GvJV|=DtGA*=
zy~x3thGUCk&THtx{}TWX(}I*5wR{rn2JaaOSsMtBgK`(<nGR<a28=zZ{GA~P32q?2
zag|eBie1CR1^LCEG|;J&XD_+cbK&HGPIigw1RNRkqsMp`3W%YuvFxM^TT at 20?I)Aa
z8j3Ngg&9dhTrA^j5$7<aEd4R|^BQJTfznQo9{m+9ZU`pd!R_h*<TA7d&^CFPN4y*E
zZ(?u^CmBjFwqhTR#bI~&ic0cu?!LJzH%N7pB&la1)(SptwGW8Y`}o}NOi at o)b9yGz
zK8!wJfBHtFM4%SO<+=T^ea+6=QDUyRE(blGbD(cqiSvo)A746Yz2TOqEuXrHJTjs$
zKDF*AYdBljc4*~9Nw?(-*1k=RdKkiA$=3R!t}+~3+3l#*-jz9x6<|rw at U}KGgmj6y
zsE;nul<zWSsP7_3ko&~9-#S!SF`~!>F5cvujq(W6NT9Lcf8V at 9Xp|HMbi at hTA-(15
zQqYD*bg0JOSWpGnni%z1GWj8IWWhG_r9m;Gu7n46cs<)scwZ+P0gzy0hCNA4fm at K}
zi=oFCK0$-HSy+X83g}iLK{9Yj-`>{4e7WJ5u at ZkXVFcS{4J~1B#b#xU#!?vXy6yqy
z at d=2Hhj`Zs6EX?a^Dvti`8~6f9+N*ed$c9yzgJw1W`4pu!^tOCvgt2fLz*n<D(6~O
zy$`RuPOXGC;WA#&oZxzil~7xRpw0WsnzNj8W}BFacc>KA_i0#cIJssT+i);c_<@%w
zT*hpc#Y)MiuXKDa_-DylV8JKG*eKz}O4`Vv!Ve?)VR)}acgw$$K7hPA$u~*cS_vrQ
zrSN1{R$hu9&8vxS$i)P0Su*^x5||j!;1)nPZLwya4AFAAgEs1W)jrbkCSd|zPH{p2
zgFRDPA7w+?DK at B}AfcNsfHZCZsk4w*0gK8$2<6z#>!jI;O2|S+$@9AH`rvBFP#<{`
zQh~zvJ1p$QM8b>WK7^=4uvl^oN5mqlscn~4nZix6xqpF?5_kI5yEOn0iv(et3iNG3
z=Ha6{cG-b$v3gXSr3+Gcc^CsU;q?r7{z6Et|KmM^RDnD{y2nf8I8ES6>oho?<X}WF
zVS8vna9^^JQo_ at 0%hJ&iv8Eehe^4Dv=SPf-ci;;U4Jcr1AC~{5)KuGeSQK*|+h#Ut
zi9K1{(3I?c_rGVfYYLAe{k0S;#B>ENlVlwQCeB^hz%s%eg{D<}L=Cgc=-w at Z>+VXy
zK<lk!UY0;60EfD29yQbSzwC<WQLtPb5Odg(>~d;gNz2D$KP}RQ#lj&E-L!i9bSt@$
zZ4Ex>Fa;`oYDF%|{H{1pE*>uYV-dN`S%=ukGyMaO$th%&-h<oLG8cR6hI%nP*c+M8
zy-Z_*Yb-*>`4<g`z$quGVWcQ`$|r>;lW=Na>w^w%Z*;m1xkLi}lVFp*VDP|T=4#<%
zPFLZO<ct);b1^qZt$m}Y?+_x)-#l3vWp1U7;Ua%*J4;58h9tR=2yF|qY(W(&0DlUC
z(EW75IZjnt)-INO`1u>&#$Z){HvL<3q#V2?&G*@B)k~_#GBt<Y*XVu#HHA<XQ73Eg
z9W*KP-bf(b2+3!;e(Y82rw^)3 at d-0S)G4O#u7wYdA)cz>1o#AKTzufrYsO56+guo3
zh_edz(sCXl`Bdh{$AK;>qjfkRZ<JwoO>lKt=nUvNstvCY%10cE4Ipd;z>`Lw3F9?F
z_B7|tYcLo;#G-}UA_#%jZWajJ#HL4$f{U`a$)Ha~S|pieIXA@>?0!2CUA9M)iI!`w
zpSFw3egrEp#i+~t&dx1~p8vxp&*yMI-~{oP%~QgR0^#Vc-kCWq94}PCWYjZKYy1Bi
zqS-xEo_Fy!Y>N<(>=N_H+P3o<u{hlAY9a(_qqN`CRvWDDiJOhT`;O%rz5=mpbUaOk
z8MZLmo#4Z?BP?<F`?073Kd!~<B&hGN?Y+dwZuis+ at MhelU{EIK?2d9UgPJ*+mzApr
z9P>#hmdTnkKFrpXFsn-L=_OOJPEUQ3{pU;8OV_(rX at N$!);?QHnm at U+<o!y6x;#?7
zNp)UfkqXzFWBUc;ymeY?NzkYCnJKn|J=#DtYc`>sN=vC?f6$!$3rIBG#e)i=jo77b
zj`S0}QFMR%fGO<Bbl#HM<SP-o^(NKyw0(u)N=Vc!(ynuTi3a849i?6&pK)J#6He0&
zz7^cH6jg~*RH=Fw9rob0(-{(rOFrL~I!i1QQzmPqtriB3*yeoenlGAv1m@#)M+hY5
zQ+XMd(*ItvUH_~DxdJVtut;DO2u`mB?D0!Wz))WER7>=Npp at ypDmFh2A)G3=Je`xz
z_uU%KLrH2h{X`HIIY|qCO$dn94SH9LIPHV{dkTy>a0D8Zt{SwxfPx2wR5X|nzuHx{
z{8vCz+Rbs|p9c*Uk8spB+jd20Oj6Tu<!6{p5b_S-KQ~p$j>Rf>!Ee0bgX%y3&p)93
zx7bVN1{DL4Z#N2j3W8F^FNbM&tVgazM@?y1$UurNdVEDQlsoR8TZJ&?)Gf4G@}SWr
zJQc`Q#oR at fAjg}vJrzX`=*~Q-RL)|-h0+X9-og>u8_$!;*QtNiflaUiANO`J6##LW
zH3GaNtZ3`!?vUD!RNu)m>N$g=tRLPzMfy+~Pv>-*!=Jb{xRAm_uc5El#m#m{bBNJ+
z-6 at Y3Vk9?pgU-rZr}nD32kCvXCF_Ntk-?g2I`zW)wm%g at Su&4Q4}t$XdJs;JwsabL
z2wvEs8CRhmkQXhIe}~_6S&!GmI#XszymT+<77X6^NYi$n#`)`oXU8_WF}Kfg00;&j
zIBz~eRyql|<cLhh^f-247KLrVIANB?S>&kVr_`(F!tY7HCvD~GsFkG=IKMl(fwELg
ztgtUU<2RKgFMsoin?UlP0WxczR~bTDK`z?J$m$1|Jv!N48kvY^mRnj6NKVJLHg(~b
zLxE14!)P@>{nHX$sT9KQ#&iQ(<x6G_tP1#Pxc-uKK=)DLsi(Uh01n_n^7}{~b_1_Y
zOw)Q&vO&}5%|(ONGV)m-N00(>VZNV>9pexmFx+MO#w85>X~gaIKnmdN>I;X*{k>R-
zJSA?dBU%RzzixN0vF<Z91Owd}^Si>Lq$j+&VWED=GxWZ-*`?mOnT~#0!?o#8CN|Zw
z{8Ew4!$p~cD*9sP^#?uP>$o+G at K6v25W$orhaJV03nJhMTop#aVL;VsGsWO`LS0uw
zEY0gRc-lE^<TL`3G3$L{*i(4f%41+^!iy9C{;ys>EfVB0o+EM(W~h6H|J(tB)5d)m
zj$5NYxR(e;V;(BH>}x=CjMcrq-={SC!ABQ5JlZFJltg|4XSSeaI>6>-Qp>MpY!~C~
zVxRpUX+#J(@#n9ExRxUJ=C1FrdkAR^P`R5%Tve(`nCXpSp2tm*#y2|hXqK)R0hSgh
z7KRByH_I*>4npnzi0wxKRhms~!UE at T51FhH?L;o-dsMac3C4d?DUG!QS3U1vF$bhp
zKuHm*71eXJZn8WGg at J9b>t1({qw!g4=vZr;#~=baoC7UD6rCG1^D5C#jm>zhX#E<s
zYd_2&6d)p*^U`#WW+E<!wK&`iqO?(nb5d?i&8AnVEv=#JD+P9C;VySx5rU-dOC7Ub
zcwdBn!`51D?AUVr9!e-zt*14PC^QX>q;y|+A`fn72&s+v5ZrC^wNM%ax=Ti!nlCnU
zrsl*Bu at m~q(Fx23u9s3;+P5>}*_H-H40ve^RCl*Mpq}r3SzE=j(tcH5auLKA{>gPo
z`(Bihe_0(UdBAlxIMT4_6$r6w-Bz0yKqFD~TDr}7Q9oZC*fQ(GzqoL<nkakvVE>V$
z!P_vCgQIblbGO#ZdGJl7nCjM}0wE88xo3HwxGnPt6ac(03;$d_keZ30x<()Nu57R8
z4SH$W9aSQWhmuU$ZuN)snlGEUGrz=V^7w4%hPA|$`Rjv#zl-#b98FvNOfzNcUmzUR
zoba>yinQ+dWLuHK%?ovQ8^^CA{>*z2fWTYZES9a;7yuMdKk at I*x)!Czm1y4L+6^!|
zzh|EAt~3?0>+UWs0+rIh8r}I9PodI|1#|<rDjuD<tO at Is%yE*Fjr_EW9y=yL8nmK)
zuoLn_HxG8^oo=k`>su*lxPjw9DSBs2JzXJU?6m at zG1LfL;V<icHOqwW`x93XoV0~Q
zsbHQlUCvo9Kg|ZS`2aZ-LTh+R+!})IhkEL-!uQR=(zVLJet7G5=0uN&Trv;c+wQwl
z)V|q*Wo#J2|I}ln-O_&>qw;yJMwMWeLAGS=GQ#dP^SeUbz<k){oae?+LL<O5I!SY9
z>Wcy*1Q1ulYJ=Po5ibg4oK9*xewDj#DmU23cJ(85b{Y(lY{%;X=H33xiqj9w;4n}n
zJ53g`bHKr at _k>%V!m^t(+M3hS<!V8qhs3MTc`ILd*HDTE3PO83o6NBx7>qmse$H#8
z`L1@)8bo3rLj4}j?|4I_-FyKHc-)5TF^H-qrRZORS`XY3TlQi^g+@$<hPxIWlG&Jq
zcsH4+J|iGk#Gm2rQQw#GGEIX*sTL9G0ihJjT+r1lz6_4*zzSwv4&f+LFfw1Zbj{aa
zQcGtHNSWoni`;IcBS<heuKhBNd3KnQT91BHdA6|k-mEdr<{TtC=+M$>OW>9?Z_bPc
z>i at Iu24Jn9LTXfa#tFnKI8gW<gmzP2?HO1!c2`u8WO>!ze3Gz);=VM{YPbk|XdeCG
z2AfO42(yh_d^u~Hk5n!_=<Jd5kzMq=;m|qU2rc<Lwi|nIf?p++V#h{zdp~l5Rxk4t
zBm>X{Ep1g9CNA40uS6hG?*g{A+R?mV=Q>9)e*#C<?KggTp at v@8^v^DgQ}6CF3_|o3
zlu*%{w_UeX9eq9{vpi^6NZnhMkR6n;DOI-^E=IQgVtp~<ADecCtOU7<+)-zCP}5X{
z!ePbyt#RvgOnb<yi??2K{1)C_vxraj8t$s0Fk6K6*^P~elp=>d2Dhd<dx5!_i9z;a
z{z*y%UO;c>88jr0-ZSdC5snK at N1(O}WyIXEi*Kl|BwunR;&C2-n$JkEe%8<VlPyrX
z&Suv6=f2ri&JmX}%C_5cGp$d5nJF26*(P`<Ay+zZxVdqg06(P0#8s6)eS!u%a^QIK
zV at jY?Bm_WHNvxO`yj$Z_6-f~^5mRtI`Yu032~g)B^t%qT8h1<KrjO*C!e{L|nXL=s
zhlvh_pQt(jwxvE%s(kJ|xW;_D at -l)MI#(#c9`^X$W at hxX2I)QTSKt(xSqX42s^cjl
z5mOqQIS^~Ke>v>DJez2_m{VNL?n5i){(YX5)dF-y*!R^|Slk=gp9<SxrXxjn!nWKv
zhHe<h3frSyTo++7t8A$NKXnqZuh-l<S^YY=lT5qv<Up%}_*gfPlc8HN*J7$n at 87-A
z(1^_RXj!pj3BG_=8|k6w;D~|dA)Gw`KN>AmK2jmd at 5F?wL^DUaRwckA&Tw#RcuioP
ziu4NxK+eK*Yqk65E)*uW!t37=eY~cluEjLLnfq>tGQY@|uV+zD*3jm2sAQ-(n!zu|
zk!^%Dd at 9kR#P7?Hi)j$-Sv>6_5opqJeZVZg?hC1Ebb97HlVgYO&IkASynJ(Yo=ysG
zU(^LcQB5x9^Yb@*;IA6+Gpcwsw+rb6 at +c7lMUs987aR}i9}u3w(QYDUpY0Sj74T`D
z5Rxnv|2;ew3puA_5{;i>M5)9 at d{e!#Y&%*SfAZdLZM>H(c-KZ;)E%bbR<lWyHh0?y
zq(MqC+!V!jmTyk(j=7Vtqv<FUziT`!^Fa*fcMKTD##6(Vrqe5@!f^vYqRQ at ukS0D7
z9j`(3>GP%+a0-#8&3RjcGohy}*es7q0bs_%ZO6zp^v&b?LhmWXyEj<B^KPA+o|_0q
zxXexPT+z1 at qvho=A0q@`N_OK9q%ePH!6!v@@unS at CM0v?ev$0>u9roznn@{pd$jjl
z%<)Wgpb)NFlV)Rvh*6_r{p`J4ou^V)(W8CFUJt;oe`n5X?2r}P!Zr2&@zbj$@6O{~
zR8{q}aOujE=||^={c-5t|9RQ?wo<VKccS*ywQ3m+i6;J>;gyHU71nWor2u>r5dtWU
zQQNWJ?@YP0UG>VApt5h}w0FUMnHl;y*ptxLi+{BtVRs?imXHqe;1|Lxhy3ZHD0Rq4
znIkMCod*bzUA&jo-neUK4T*d#O<D>dszL#@p;|sQ6%C;sbNxy^6%JH_r7bd4%Cs2X
zR4~<MP$sEslAX_6>PW<B-5|Z=am$Q;gCx5G<9j%QS at 3b$)I-R2bR~;cpO#r5<%2BF
zy#CloHNLpP63%n~4j=jeb$3&U|D*8~TRH7NwuQTH$u!JV71N2{u(Riyewoi%*@Yk3
zc=C8+<u9Q6X7F|QJx8cWmxBl2nG}VRBOwe$7kzDC#@MDBL<Pjp+7AXQMNtVS4u$O~
z|GeF at Tn)J^;1>u?q+og$G;;9%3!I(dN~FRay!GpJ_|^C;`=a0w5|W|MFGjWFt|CJt
zX_d6x5>Y at w*549y!X4Jgw<6L@!_c9n)6j*l2Z*mV99AwL#7y{&mVHtezc~0r^uh*_
z(3rT9=ekknQS=(!a?+B?BaDkLGZmn#)7vW}LVE8Gi*-(7mnf^LniDyz7$w*;%C#=;
zz)q_|ov1#c2(A<16L1evQJm}8X1-kw$x*f%XXU7gDAgbyu%zWJA`5(eK&;ddQxxP&
zs+he2(9BL>?B%HTt?R&lwVjXsymzMD<bf39Y5yQXl$dm(Dh^}YlEzGel0X-331)O%
zarX_?S)-Acijnk<m`R*JoMfn4Td0vPwpMA{XA20H{*;sdg)RY#$+E2nF7<=jJ9CT9
zWWS&wN}6JwuR$STkZtJy4Lv&p2O$C)2>{$~R{O9wfwr%JT;dgqqdC0uX|d5998*LY
zd<jjfU&t~MNnISXH6RGO45iML#T2NlUXpY13Y-_CM;N<AL+Z=Q5^*o}7D#^x_?ChJ
zH_1HOuVvfCs4yrHC6$oGZ@{9?O+yY2;7;9G4oboT;PL8|TrQk^O at QyUp{EyAOSOl}
zNmEB^w|$=`IxMA&o8G*y?8g>Jv)KatkzP``W0>QxVO*p(oB%Dp*!kJ#so9cEFVI%4
zw+qx4hS-LEZULTl41KZE<2O}Z??L~89U{iOd{HUPAH;@h`~ot0B{BwPdoN at X)Qg44
z9#|t4OatDWGDj;Q7)ryqU=6j9)FJOk?@Cd%u2uUMT^=s1wtdao6oS}{O3T`7O%=A-
zN`Q)x;WNc!tR*LK5-W+pw7Qm%a5*TUY}+dFGRL>e`0yz3{g9xKQue*2a|%w7W9z at T
z`;%G7HJl(hTZ>&Acv`%^6nlgvtv&X6$xri279Wjbd4V1VqDy*Zf^Fn_H+Y)zv)_NM
z6Oa?H<VMz6mz`D2*7n|BkA}UazCt7ylPD2?@NmMKJDQ+)?jq&*svusfup-Htx|KXg
z#q)5QM_iT58sdE*Q;~a;e|vvKbF)D&j|Im3WXd!w!{0BWj`pNnTZ;d^OoHhMgOXRH
z8Ny|?@z%}^6QeoVg-nJP>p at ILp5gb^wYWX$4dDa(e;P at G@z1aRp)Oys)*v4QMy{T1
z^Jw3!&CA&~ubCK{YQ{Nd)i`DAoW}yc1Cxyusp3sw#ei)p_e*AUrdm<sY!l9Kx(st@
zu;7h&_{LSYZ)X&co>7l+<@Sz8hXw+Wz2Qo(^c6KcxsxAyyeP8nmR+X(%h(vvTe_Cv
zZg7S6p;^4|Y&e+K9+9ysYXZ00q7Vb~4>l<`3jvXkM4TbTjH=StKXjt9g)FIXF60&I
z=9Y6}>ubdM3(uNx=F4hynx#)rXVR*-*E-383CGoxGJ4P~u at Z;~!MkI;=BTHGgA_@<
zIZwTb9SV0VR0Fw}HbTuQAQ^taC|#ho$vXCiSaSJ5r6I!V_aXP^pJWB8oDBHUWoe2X
z;=RI4AYCjQC3ZU|qJ3SxBAxa0!sDFN(L+$6mP}rD5>Kdm>+Yf%lVMf#M1xSp6Oee#
zfU`MLz)lPd%4FUV1)P_3Ms7TQyC{z_M<fy=G7^nkfrfu(S$?|)7kFhZVtp at L`)dr#
z$Rb4ZW$0o$mfADh`L^dw8+m`^QddW0hn8c~8vPf!eG*iWN(J#;W0=KHQRPc$a4Vh`
zOF5g)<jNYbk-e*^u$5_jn}>E6z?`XB8Cz{!!ma8_##N#eKzo#lQ at bsYdywmdmf}ed
zEJ`EbfgJJU*-#K0XuBER=;%k$#{Z_v#H!N6FCs{uTq;-^0C^^dx_2+nPNM7O0BB31
zF6kLjAeo$kB6HzOOFfm}p0o}2Xa2zpk<(|`n3<phTitQqON3h6aYbPm$zW{x+WjB*
zQXL~nv3<?S1GL=Lwdr1D4<g)Cq-bX!=SittbR<+Wj;(?d+ZpOrV9PYu;cyat#((Zj
z%S)uRSTi)MosT7A6gS^#>wks9aBBW3s1fH$jwJS<AU+zh3M3QFrC#n|)ywL5VPmx7
zU+)6XTLqVFt9kL8_3(OJ*SpLuE6MCq;ZMVvzmQPi=xzc)i_Nw=TN$5=>~&dtw0q74
zlJ at zDv#h*-5cj}HditC7La(>guzdMLMy3M20!W7`Dyrl^biBF5{LoV#`Rh8_6f4ql
z#x2lFeqSDwB`DNRw5P|#%MN1<qM$a6M!r5w5xinlV7u@>*71UjXDOFRGkyNu2{)CA
z)3>?alwYzca at taq2c(KO(@6D`*TymZ=Y&zJ6$^N`bL at LBS+T%7pK1IH>gS9xn>N(;
z!GhjdU5-0 at Td@05?~0V>6X*$Yw>E!3z7GumUt{rgaV~M3Um+23tnt`XO>~XabXLhG
z(F>KPcA{_HLBoeq$~|5%$^-{#RfQ*4h`9mLSMAacHGZX!dPMC+odT~#RGdl8MtY>k
z^iqj?A8cA9ZG!JEXUN`OhZ%=x`Kr8tQy+Fl)%np$SB>$^*LTnyiX~Buh!NIOAdAA0
zOUjZ(@kao%5zbGcg&C?K35?w|KT3L560>%{R*DAp!W3dl&Po&#-VEV*(b;bjdH2`G
zn0cWaCqlHmd5Q=)kpo7;Zm)U2^DUp7s6?3C)HT#nwG?FH05Wl6XCy^ETE!>aOM!^i
zsYHw!cKcE<A^|Q;RW%cB{ykpoqFXuYp=C(|L_e(oowaUgq0W6l*@=;Kpx`$Y1xiEb
z_2}pjY`nVdoK5+X+j)H79|M4 at R@Xm)yF_<X=b)BP-gwF^emd~{|J7Gr!Q~u=l}D&5
zViF_)Fnd%i6N3T!AFt19c2vf-rYG~XTL_XsYTh%((l&5o__+rCZwkQM2q#V|+T at vy
ztqLOm8V~|51gApgh(y#R>U=LmPTMs-D>Nqrt~=TnYJ}C71A}pl;--kCm>u-)78xNm
z!xW(rep=*>!?ibgIQ8s;3|5W{tIMMXOrz5t9hSsU6IFeYR}q26ly{ic9rNYYyuckn
zQ0^;W5#L`RS7#%H0+HH&RtL?DcpRi~*nMkoqTUpVEP>0nD5-UZ&E+mWnGz6F`$;)X
z9eCG=f^CLr_j_csnX)Lqk-H42ASqqfWg!SMeF|m*vYR)UETfYstgw8N|Bu>O1!i}1
zVnbg`X^P+$(&uS!0AL{=Bvy+zkF9wszEJo%hx>sA9W7?nnTEIgm|bZgSx_?*&Kc6J
zpCs}Z%|7y%61Yx;gGqHjks5J079HnydF>1rvRZ%XFw%){>rI_?4g`ODgZq)*<_$b<
z7p2fMgn!I)aFHy59u(?66W^DfihqG7h~vevuvDI1WZkg<Yy7=MlQP&;H at kz7O2foc
z17z{y<)&GkrJw2Ki{D^fElE)iKQoVdsI^q2wO~;wJ_D4h?)LBq<USlux$Yw+C)iz1
z^CX5+JD-+F4=$!jXVQ|KmEYdUx6$~Yi0|H8$fw#7DygYP5~Is%CwYo==#S=s`b^FX
zm();r(fu#sU6t=LCl+XyT*lHW5&`#$Fus$rtbn<{MIvpl5aC9~Uf~F3Dw}uC=fGoE
zEpG!oc0~9*$Ab-r)9YcDO}3Tm{tUF%Pv#crEa6b9sh+nh?q<M0b3(dmM(L>JUf8KF
zQ-4{%tOoOZ&YsBpq)$YZ+TBF*gL34P0=or0qJzW-F at WOe!rNv*+J+^~Q^xaTuPp4#
zFLKz9dK=gp8yUrxCn!9^Sr^FH9rU*i(Y=<8(Rf|flo)%jL3~F9&m<J?e3SM1b))Z-
z6N28;Ny0JC559w?&|6bjW7~86aj*{XqWENJ57S7=rETD|2ggQU-5RvAp=Hx1;Sb+T
z2jubYY#3}pnj9~sSc`=WsL0YLo=*kupp8iO31soN9Z;oI0%B1P*oOw1PWj?}AsMij
zu9a at G-<20Q7F at 5zK|b`PW;!WHLTF-#OFPjf4HY5DmXoj4S1L#!8jjM7+oZBVziKFy
zHqL}QFt(*J1J?CIE!@4Hf7EL~vGH}zJRPFAa=31kow~gIM8F=}l&L^IOX{)E{THf^
z2Y?BKNf_Smv#)TsHJT^dlb66!n?xcgLXZ|IHYeY%<>Py($A2D{&Q}-%lc#=GbdLCZ
zEeFaJv!ExI>(BaeilP2O5EHV+!)v~24UQ!zU~u)miMKN_8zUUJ$8+uyZC%))n+^&e
zksm#w%%nc;S|$MhklhOI$eR{VIp}k4v$a3y-4Vq~TB0(}WhZgWeJa*fR4PGHFs#eC
zIae^i*9iiCH$@D_gt%K}3T%dK><4|fq*E{Z&LIz8g&S+74urOZ3G#d){AHm55k<Yo
z?+84+m}X6m+Pu@<pA2p3%ZOf5?nhbZhq$z6CU4E7YoLgPgZ=_Sd*1v-Z^H~qE);L|
zpp$h>>$p2$0lmzv;tsFxo8+MWt>4DWX4f^kO3 at yxH5>s^#lq6hW at rA8KSC4oc1PFm
zI?pilTc$o>Sm2y*(3>&JBup>F=lD9kHmG~mFkvs1Wj^yRi+^92jS3}7U5MfssM=TO
z6_2F-ipF{|O#ze(J<Nl?Jbs}9_D06+5q*{-yS8_P{vt{@>A&r1*^^?Vk2ee4iQ}0e
zT`1^c+v&_h-93o1DW+LQSTr at kJBsCMg@gjsSh*VPd{BdHN0}uT(C7=hjLt(J;NVmv
z_EvQm2?qSoWXkLD4+lJSRvf8tdH3XjAO=GhFN2(dgN+M;RJVexxH(hU&OAiSi8AYD
zAgY3(w5WA_thbB55Dv`7QgqZEfMR`X?W|dWKY#Fsf2NpE`sp<y*JfSXxLul9 at Q7%(
zcP0uJQ|j2E4F{ficlT7UqasC at Gj7pNlT|kJX;=F5)0CeY_wb at Kf|H;PfJ~!enP<;N
zf1pA+c^!h7aw;K5xxiu!>Ha at n7PT089YNy*XJvR at Ckz*?e`-#@jldpwpqg6<Ra=*U
z<U~L_Z65=zZaNj;BDxwxLPiuZ&jE^T4fCc#>{BHc3rig6z~5v$B%(ZA%f}6Ln${Z9
zh!pv&s!kC?AM1&$)!vKq4U30_Ygm&{w1PVfRaVD*Wq&;a==`BYptvt2qNrm;6CNz!
z=q(=eq|a%vKq;RxYgh6BdTxjfIhz^CeC_ZeTi)mBm&R7~S#g>>c{FSc1E2ZFPLIwn
z_#kcZpPf+&?l2Xg`JTj?+_o%2k;o*kjg26}EPKi at 0hF|zt^q^dl*Y85=zvtmOG6>h
z at -c|TzG3!4?5MQcSxQ at dMg0{%NcH7C+T88$Cw~H?v(*qDYI_sA at XfVjb85vcYBfAh
z*>e_?{Z{b}`TH-3tTk<T8Lm3K#h8t at n#xzA48<#S5|6Qg+Mv2B^$%bE+Wn~qW$&u6
z&Sc@@9|dFPLpn^YP4T2dj&UUy!-YV$+u4o{Uy~t@`HQ?#q*=cTj!EdvakH_f;g at 8t
zngS+ at zbai^xWamS1Ger`{0brV6Ef8ybt;?WB8bP~zjma-4x)}Axhxet_s~j}$`_-F
zwHV5?RDSuK4!<-?kj110L{T6tM!iFT;NehO%&fdQn52SnBEPG8ux0^Sm(t~STjSq-
z0$n%=HM9^de+=(CnrY)cZcPS4HPe{>0;bMTT86u<G6YY$5gGHW{`H<90FvO`ji at -)
z*`UN-{ogZUGrX8pkKv!mES92eqSGO>$YSGXJ?bG((SDe`&l82?#0_9b%P(cB<>?IU
zCEz!-L3W*jevT0?9pSx7RjM4XvT;-4k5DMYy@<sErRY=&uAxzz-olkATk8aMH;maL
zmx{PzF$ztupj?JF_bpom&cS$N`krp485V4+St7pc6qO#h9*v4L(dG0rYPEvVosjk3
zJ6?58+O88Z`zbT+fLGH!RjXsUY{|?#E-~ei838zgoIe<S-R6T`ouCJi_ATrNX9#Le
z*gB~JVDPZRg47s%f0{i7KbfPTZ9_J=5l+ZvM+A$=)MQ8Fbb6M)(Eh4NVB4ZEwD0qY
ze+;~=W!g-hQ;z(o8cTLq%z*MZL_{I;DV93+;k5a;b?5ash&!;|XwcLw*O}~UWZ_e!
zE#&#>hcwi#hoq9f!dhs4)*mKKscX~Ab7hx`psl!p8Z%L_3#Vr{U*HX6N!EH0*xV?e
z3dC-Jmp09^Hh(auXZQ0&f0={%>VV at 2AXtDe91ZGnaZ<5ct7+_DL*zuOO~JUj4Z&;0
z&AV;?^Pp!+4-o}FGa>`N5+HJ^%e4UiOOV}FB8KNg*NH@;9 at Ab)Y;>n_Ducm at Wj!ST
zk_Qf#-&q`Jytq<FzQ)~5yuCA<97>a3cG=FKL>t8y`bxAIu#CNCZAR&)27tC4$g&g7
zvX%2?E+UTE#B~DMzuT23Ec1*(oyZG(BCeWWsQhHny!Ds|=`n`B5Xm2^Hhi%9H_Ynl
zB#c_)Ik6?>P1E=g!kDA<C^c}AZ>z%>kq0xVHfQXOjRVQooV5y~w_>5u*PkBWy2uSb
z2bG+CSJtI-MVy0xu(WW}7>?fr{irl$%v3veZHGd=X&(j*Uc8$`CDved1RA)j)lC)}
zCJ!`(M-pEqT*5z7s%5>|3~_sub7>d;NCh7?!aYwZ@&@V1u!TRuC*?|-X>W%VIJqTO
zen+@%x9+lTp)3bCl{i?T=8?p!JpdcOG&wbT28y!iA}(p=eX_nBko7T>VKC>oC%r)2
zBJ}Hfwost>c4M<ne7=S#gxrwGV$RAj?~}m=r?8MHsPmZ&t|nWFd|Q|Cy|XSDssR@~
zfh9%f_Pkf+K9gq4FWHQAdvuGU*rv4`A`|f;$puL!U%1}Y5BH^cJ`ZbtTRBhAYElSN
zFBw<N!=?VT9#sxQN0V+%Ng<ll%_5Ta5W>O-OWs66y2VLcM!Fs|nMPX3K;YCVI3QS^
zkrFNNZEi?&V>gFqP_&n`jSsV!!7lziPU_D0)==ddcx;5riJhkffzTDZWLN8dvoiHL
z#WQO`b>DC!S>o<6IToa=e9ARUg_nM7Zn=y7VOFnaNT<%}`UWCYp1fYAO81nuOP-^q
zQ`b|};n8)lR${y|2rL06t6olMd&0t(O`oT2-t2#x7!cT8aGIxwI{pTGv{|DL(J33y
z3+1{wE9Cn%w2K={T(_U!#`aJQS{QaVBsS|a`LBxiM;xFJ*C7t$(T?#Wd+BO4QBi`9
zV319T2V5!@b~}-!w=1{v;$y{jwa>pc<tn6Y?rzd8C;Wo59oH$`D}FDWqvvx?>ul<F
z3A(j5s2Gy>468h4<?Gra&%FSt at _u~*civvy=Dr>g{~&y;D50<vb7+AU?UV`KhcZ^-
z at B=#=AZ~^Z<P{j!ZsqUP2H>zdwYVgu4bzhp#sb-Ca}Bxj%4=w at PX>-U(y|Sq8_->9
zqZJ_Z_S78Tj;&b at f@OEwKcp5R=g17_gzlF6`Ndvi&)QjFID(b-hDz at q;Nt=sX`ZQF
zXPL6?62CT~(o2_LENv}{xZ}!qPAZ>eQ&u%ym`1TP%Jd`kLDn(V5Z6RmuF*n9E4p!c
z5^TJBWp3^{@%T66=5Lr4{v2cj<JhhS at vtj8TdVLF%~@Ngc?sQwkHPcAc5giFdKEL2
z3(0br70UKV|H`D;#Gk|YD_|i=X^k({_N820UHf=1K>*Fwm-Z5Fl2*u{^nAJM2--H1
zs8;H@>mOyw at +UKU({FbL3dwVR`Q89R`i)Dh`hN0_(x|#KO_B&as at ddf940QeR@@Y-
zAJN`&0d2!kIH|pZH0i)B+eJu*b{b<tu%bVJFT9t?Z2riM-GrsY29VFtt=B6KUB>m9
z*xQ*I<mO03v0z4(T7MM^0{;*p*E9bD;3#B+RFN<2t;BJ|OwzTPA0_lLLhC?q<BL8p
z3p=<G87Nv+ugHYRs51)1&7fiVym%d;d^{IA=SDDLJ!}KaitfVCLA<htBKb5BKU+L7
zQ1O5D9GjZgDrs4|T&MtM<(`oWM=p&KN9ZDysq?hg1k^MQS0PcBkkdvRx at xXkY=2X&
zQxJKvNu#)=Hsr_Se^YM{zxZI$r&aiRpmT6}lQO<f`s-t&u>UR3*xXP%Xje!Yg6?JW
zEWuVX^c->jxp_hk- at 3%Lbj#eCMXH$mF1S$?@itaXCS%xNDn$ZSooh`?5wVX0-Vw-X
zNjOaAn7XA`+h-|r86J;fEvW5iG(b+jf7_0ZTk-Y<GgA=YX!wiiZ`K<j4RfnEVPRLp
ziG^Rf)eQ=+{iqljc5%aK_&1Z?m*|8$g+|nCf=u)&E%lJ|;<5&BG|G)t?@fHH+ZjJg
zfz4hH2H?AQ2N)u;9bKn4GurfuMW&+0fLeD3@)jSjeo$OAEguR5;4}W;nCz>|_Z>;Y
z+SZ+gbKjQkNK%T4Qq-(J7_v?;8t(0x`m{q*1*WQxy^Cl9seO|Rv}#KyMd&wp^tSn7
zYx&aClk5+u<x<v~qJp$9N6B?s3vnwevr#4eGeyoD%peokrQN7Z;7+d<G3y2fU?8&#
zgHd3F<}vU6&&a%Y<mRJN<96<Sm?#JO#h_^b91Mhkn|PC#1TvvvV}aK^a)gWDZr2Yk
z3TAM32SjD7n2QVXryBqJiJcJWO@;hzJ?saAq-~m56UY!MFQ(~?pd?{|Q~xyMw8O+L
zsS~_G-+k3S{Ml5?hN|C9;o<zx;@beLz*z^Ah;kGBH7 at q^#kRyBtSCz~D&uR%@7i}j
z3fTJj);vI116B4KVWn~WpWl5BY5A#_8ky8#mSg5Wg at 3M;;8;Gs8oM5R4|Q at WoYveY
z%Jr~5FG+t;CVlfh at ztEhF|~sY7_`t|f8i-JWcIq=a6ybQ$`Tyd at ucf5<Opx0 at R0zo
zQdAp0*#XJV(al?I%(%{s1Chw$m80H1KddBg#NvsdAfO&m#*deatx0(H3cpNIlJ9W*
znSZ-y!nQ3RL9(x+y~vkc3B{1u1*zmt5v#ma{<%;DT&;lGoRW}gCwGb>#+`M(OnZ%O
z{_pY{YKZ8gs#ww`te at bwP$e~I1XK_#BE1`fb9R6SF9O%V!3BEOI0A9S%D~w21hJ=l
z>UYqh>rKjpF0Vo&5dQ8#0&ew6>qkmnv|go<w(nYytJ}nxC=afcx&Mgxxz)!AvlW>Y
zTODrTMH|5ekCAUna;fKWEa3x6B7^=CbJdWExq8+k$sUT~_qMZc__tLGGK;Sia*td(
z;G4ov2bhuk4$m}2xj05e{vdY*J*8L<K7wjs&zVyp{+Wp^`$+jd>I|cN4|$Z?W{NUk
z5f7d)f_OGO1*_Vs8i#3*qi790Q=cXtV+llwzX&q?*>OKDdjKlu{%`3EHP1-^O-(QM
zP~u=-|G)xW>8>G_t(-(<inO;w^a68#3|yPS*En%XT<QS{6 at 4?b-8`>RuD)?|j6aIB
zc at dc1p0AtJ@chw*peWP;HAwmou`&?&kV*v<*oBMIMQ+9KA$vBVP95W&Yg#eKc4%|^
zp at 1&|1yXK&hbt@;jz%?oK5h6RVrLJ}N+izg-m?i2H`P^k(N<=BFgGsUI!7XuXJy{q
zv=?A?>J;vZ@@(TexM>5{-baGNl5W~>DL8&dqAXnRAkkr8{H0jB^Cyoxq%_0o35v^G
zxblwiI4<(O8?FDOke<GpaCpGzUP|VxK|aCzO)8oC2K`VCZtpLY$qJ*R_2Ia`X?q<r
z_6SX%l_8TnN0{N+2M=}->PCEfsYv<1Ensid%O+ at P%*&DCFul;>4EI2MaH0LTHWn&y
z|BYr$=7gYzCL_bq_#Ea<apXIEZo+~XsN+~Ysk)Kdq0nO5;9}#CV`HIde7b<dTg<<{
zdP!d<4njjtrqRE#2oCp|AULrYT#e*i%5>-N<Oo|j{hKi&Oj&jG<31Ep82;+!qSt8O
z4nt4{w+IG`-z_XaahemKrXD#P at zK7(rZ1pmM3oKq4r at Dv)lb?xxPqQWRdJg^w4PsU
zi&1{X5hcMd8^_^W;#W#K+-QG(E&Gmy+Sfz0+?}tf6?6Rid9rHxY(0Tp*$fZsDK)UL
zhs3#iW1jhFOo1;gEY#nuvk!F|%y^XEyd23q+>?}+2)5lE(hs^vDfAtSX_*axL#lk7
z*$857a%*^DDPp2jVr6#n$C2bKG*YQJ^KN=+++}F;JCY84Ef49A>{llwGg>gb307hu
zlxyt9Cozq?;|4>lzxcDBA5fn`$ybA63M3f9W9Ifjl%Aa3m6MHTDDJ1=+t-4gly5yw
zB(pH7ig51>4Jo&{4r{HpESy~rl#4!!jY_?sme at eM8*FKT7Q>Ugk396saP>j0Rf5)Q
zu}H2!7^FyyHDT#WcS1l1aC%$+ at Vg%ntaG{vrSR&N))_}#!;&Pn&=o5O8-#R95yU54
zaL5L|?mMItRd`>0ScuW*e*k2o!5Nc`)frSUWWQ%*B=<1rGMX%`G$?p^k?-fXO?Z9U
zBUZ+&fJ~8qLjpNSvUuPB9`p|AFB=X>P@)R?H7;LN%D1NjXX?G|7MGgSIgI at Jq!$kD
zQ$^?@!qu1|(GJ+N2Hvz9wm0*$kccsR11N0 at 3*|Z%T(1vc4J6Y?2ifX-*92&{H at Ie;
zB)jV1;I6<e(B1Jx1-a(9&sHQ1d<^4QG1NNuLr0F3tep(`q%xa9tS+;L>?K-KWC2#`
z9Ow>oN^#Mzgw|zY%*B|A;pf>+MARW2v8&oREZg#39Kz^7$0MgA@`01vRh-DTwceD*
zj3x3!m{$QsR=N5CTA6k9a at 3yjo_Cz%a2h7D^?M6g7O+_85h*3JbF2=<xg`l)mVUZ>
z?$U%n6|hH(?hvsC_5s3puX>?rT|K08a}&l;A2?G6W>{AE=8TV~3s`-eiCaLb9SW>0
z7ra#Fl8ky9nn}a at L;48hb!CFj464<Tr@?3$AkX-BC$(sRh+eTF2Q_fenQsvLVraWA
zh81Pva;-1X9&9<rfW;K)KC;$*|F8o8#+C{mGzJ_%OwM$JSuYeTxTFfD%aQip%;U!i
zS!c%;Tq8;il5!0Fx=3pEkO<7^MQ`l_Z`!SmdKum*EtFJ;(N-txcT_=fLn6v}6M at M0
zF>g?M#SJs;-(0+I-9Zfud=Ij%@L!@Wc)bdEViUErSzIcLg1*k^dX(s&P=^>J8^n#V
zJ+n at zW>mrTS+e^-A6BFH1`M?BwMw2LHNx>PZ5QG2VXzak+zCjAb92a{M&Yf$ATA+5
z10#m!!8=p1QznB>cS*v5PF4JC|BdRaTWCZm9!zCQ)%8A^rf(*vGiI_@&k3J10nWOr
z6YXB=V=AVq;?;L}>gZ4M2n<0*2-fFIN-o=lJo^!<P?5{jz(b at t_@?Cn(Oe|KRUYih
z5mR3wK_a?M`Zo#bc*x^iSO`U@=AT0(en=Wf!ZT5=BVh+L$6{??y7=&O%{dMhopT&Q
zkHN1w at hTYxH>(D}D$;4|bvt339aQE6z8H>-2RnYLn&d`mIb+|gs=;EM%YEO6 at wyKt
zcDd$P1_w!)f)-WQ_>H9ODOL=~KQn~2og)6b({-&LZ5!coA1(0#U!Felrc&QeEjLE*
zklGl5+DGMGjBf66XIj>ZfK at IKxj{d)ru0a+4T at 3GBa1d+fnsUKjC5FypGK?~yCuCK
z+<zS5pxlSB`=G;?^gLjiWtTJ;8TS^5<~`zeI`Z4ufS|3riO=u`{z&_fH@|<0wQF(4
z5ox(@8gaU#DwB)@D#si4g*>;SJTzSEcdAlXwJ+?{!rzJDlaK1EQ7nGnJ5T(w&|m;i
ztrtAJDPm1rZ(}xsgTZYUv`Y2ck69Y!C!Y2p)Re?LOARJbw)ih-&H!g#4rlj8cVQzm
z{*dlyT7mko)X*Cy70 at KEWhW<fu-SG6v$oJll;Qh(SXnnQQDTz>Yx{g^poyf=yrdxr
zk2!XNi;KM?&zWU5iStFMG%1>9=A*YfwiqWYI$b>c(VUe7lv*A7D`{R5%gMhU-tm%g
zG!PNH?hwJ`hnAGo&}HrfSWSyD=KZo!h}4xs6H at KoF5Mz;9k7r3HG)%2a3Lh$o8x*R
zuZu~RfSp^ej}qF&#LU)xwK_U(M%sXjF3YmlJ~*M`!duf3r%dg_cS at fsOb+S{K%U<T
z{7_zN@@Pp!wsM@}3B|;_6wUP*jQ#ozCy!gz<xHR{Xc>~5No|18V!nOO at QJsq_;XZh
zvNO5JaxJvOvfH_MgMT&N`-AhP%h_eD=ozC8^8|*9o&Ox$S+^o-+CPhlJA7aG8w3xx
z6c_oYJV1?amtM{NrI1!q4NjWye>(`U=^Aj`;cTGA2U at BAY{2>xasX|*dZDqkQJJ-U
zgl3XCmf;}1yhJROTAfU_^?@H>&G<pA7S at RVUed`0q8K%~7*DgMZ4oT5QNUFv{hC1C
zWUOm3G8e<`2f%N4ZiZODgL at -PXVomSzL_LYu2Z4NGv?B7iK#$6sdGZ<18Tm0-L$T}
zU2Z_ at 7I^I@{D}B;umSYSaat#N>aU!?=3}I%d@{h=iS2LnePbE#vriX3jFoA5qw1 at 8
zD%Zp)O`?~Fp$?KgLB~a_pQ1rNQ$r6 at LqzBR&bR%iduu~X5Xwhpmtj$AMyET#8ie5z
z&7lS8?}`o at oK=gv=->Mh`i3;K7BdDK5OsGL89wQ~GC3tmZL!%~$m7JaN-IRqlYSad
zmqHy(a|vlRqq3LVafz1I5e@^Vb@~jAw?QUrIyYzs2XLwUO&ly(GWWb0-i~-vI{v{U
zGtI~n<CDc!yh<|4qYXTu|13ji`W;GNgHoY;O5lNxfuRXO*E<nrtGM>(y;-OHH9+cB
zY<sPEtY8-j{g|d4zq(La$C^$>%+c^f?L$g-{h?z%hTHCu9 at TT4`pEYOIc$dpPX9AE
z1hK2SZ+>II4ml;NCm}%c58JP;j&4rV1cqp_E$Dc(=U%!Kv4j=Bp`DG2n$Q3}K*GPh
zr1IX`j3k34ERoDo)b20V5oXpmjQ15QoyF#vtjng02QYg#cWIL`TwHoj2dw@&!O}QT
z3?cQ{Cpm79Ct(z5 at qz<Hzs&^f_TN%?`scEve~q+st0zlPDZ+{DAHg8+hHlIb4AH~m
z+oWixtNwYnC4sE%MP%Uh77S2plag=kVv=vGjhu7F!q~yN>mR7DW3-3IIM=0=Z2k%_
zsP at 6PDywH|oaT)9$hI-xnuoF+qZ&=!4)AA#s533s=nBKIsn(0)Q4do}=W0|`GvUOC
zs6bVJ<x3qZhF1@<6zEDou`fQ=^*h_*c38P+nUb at wiEl0;=w|#eW}Dn!))@NdAzR#V
zQhG at TBpc31CUCa-Cno4^pO!MWss;5^7pHpD-q{K^*j1sJDr^F&*X1c0C;4e)&Z`%=
zaK3dd%#%ebU4-Brum1yhg6}Ye3*`jliGsa7Oa!jJ9Xs5_U|Jn<-UOk7!so<DE!G?6
zNB-C3CXDic`~A41*hYnw*nnCg))^K2j!d*|IA0ub-L>mpXQCTzFA33EOTAvAz_~g*
zH}t`_$ghNE0^`UD9W)J4#La1j$oIF(!`BX++%|=%xqNfVq5kBGKotN*nKK6poo;FX
zB0w)xqfTA<@d>T4uQ(2U6?fbWQn;xzXHyXC$NQ^^lh2x6`Q$c$IFsV>^@ncC4UDq;
z`^mzh#$*RmsRip~Sxx-*tFz at Ei{;^h+8%>h%aE;IIM{FopINfXCF}Qe;NVNV)7Qvr
zCVcC=Zz*&0HT<aqHEC6bqNPcV2LAT(q~xBP(CL2b9eq~V3>(454wX=5n+J4xV$ksC
z<_Yod*?BlAU>$BaOfDY)n%V&nn~<u<0JUJsg%>C9A-tPRNuR$?jsi-0p$nIs+FaFF
z)u4kRWf96^sWA%o4YpeoLFAaUv%x5Z>p{7LdyPr at ZFKuLRT5JDn$06lyCa8wX4glc
zgFk_O>ZVypeW~^s=<)?93#T*b`75$fPiVuyczqnrew;#}TP8a?HN0lpQ^DbNkX{h~
z$utDHHVrz69A`#y#5_&T(C?bzlRu#rYS^jxT@^6B3$%9wY?O5aJb at CjCU*A6{oV||
z+Od!ja~Xu9U!c4QrBEP!RlKLlk|O6 at ZIEgM^d;&TO0w`|n&3O&(lFOt<|Hiic~{UJ
z+G}~F#jA%~Am;?$Y6(=y|4e<%<i+kig)&4lfb~-k&K=;&q;;F6owAr`5nWaUClMh_
zd;c*|8A#=WcPX(o at Pyt^La{Wgt%Y)1Zrb?V?6?Q at Pu?m}sf}mps`5n}s*nS5^LjCK
zt-zTTUsrU!hWIn0t)P~c&o1h0kQGrdKwglpedC-yPzuU`H2lyk7Tn5SZTErE5<$sk
zp7Swf|F*}I6 at I}Q#ZV!|=Ux9O!MG!}IJvL1{8bH$;}`JKP^<FNTfH{T!%$P>#~X^i
z6vFR|MO!hSM@<e)r6KPV2iXYxgSIsU2U32wyj^;1z*v$BEjIsl$`)MFN|X{udEA9W
zEaEaezvMX1lCh$RwrtEmr7(kmnJ)Y6FVbOgXm7!Myz5US*KX@<3o(*r&vcHq32`M&
z=EGQBmwBPMQGl-6cYi>Uh(ALg-_tv5KTKrxY`69AO-%YwXjG7dCxNYk0n9LjrPDZB
zLTanciFxFdk7ED482LdfAIY&PF74t;gvTEa4!zNelYkiIIH>GH(K6utDKznT)oGH5
z5D$Yzsi2gqrkgVNjJBvy(*qj3bKC<U?wLFyD9pwa-Fdd_f8U*aK-7>8PjE6nA^nHf
zTWap4Q~{PL*bXNHnC8N-jtKmGYFig*Fcmg+1HU1!N!d7f^<euhyWn~-xW&N>{c7mR
zo0&m#HP=~VpT%f7>Dg2xunaeEVtGHFE2rLJsagTYWwpp|wQiE6Q<79?!)*<C-rHmQ
zwB~LKQ$zW4cA0VXb+Lb2P7dU!2h|>XXmFR6NaX at JVsP0@fFHTWmqZM3Ku%hiwk3v)
z34$*-lbiJ-56nZ at vAPHx9p&NcdLqe|XpzmFt>5I*&C5CeBshg7{(Ep&X=-=Pe67P`
zL)=9rPCv;ftH^^7KcGbQcR8}7u~CVq39^NQd??laeMb36 at ebG3QlxKjasJ$(coUND
zR;a-BNE4JT at -1RSv5J{ba;PmrM$Z>x{_$FPH{7YTmBi&h<6{=<FOieVogHvA*d+>m
zeu-_k5r5THEEEQFe5Z>eV9Im%JvCgRcNTTtrVk*#3`+UpW at e>fgDM6an{?I at H9}&2
z*xoomg=Egh=7H(6&`6)LDK;*!6!1MCscTS`Me}A;K%_=O5*c47S(cyaQ8sahZE$q?
z<rWdu&L{PEcO7cN!#SU8gM~#@8`asjS(}x_xBjLrw7m!&UY8bWzZ%-*T3<J_)L8lJ
z3FiscyQK~WyJUC(A<tvMHSc_d8&?#ox41Jc*WGGaZX7;8VvyJ~Sc3bKJ}><#ox#hM
zh2X!i-v?0GhgyV_+oP@){ifO38tCtl#+bn6g6)!}>6t9 at E?qS?+3D^O^R82Aw*nT~
z*vy5qkkaKn{mj)?2xQktJ^Xs9)^D)!9prswbrZzFfsXICL7bAp+2_qt8-~hvr|99`
zWQPa_c{c-2>pE?N!(S0KAx$E^tS}fc!SfyyZLniMdk&IC`;mv64Ph!vJCa8o;^&oT
zl=!#${cAr9$-&E(6Y)_7{nraL`s348%QbrKzZ_)<CzRszzWGs=TAjr*hdX?6Fu$pP
zd7Xf^fNx~|65jJwo2t8Ss~<7WQx;1P%9kx4+!k~C^Gk4db*J4~MtePCuwdda)!dlT
z at mzMjl0Ql7(Xv;9d0|wBm5-zf)+*1rYvcC0jyQa`LQ?$%(JnR_UxMp;)e|S1Hx1iA
z#eo)4*zZYfFvRg!$$^48n1G&s(S=GwDjoHk!SdcAAith$WZEyh-gt4lQv(Zr>$GJ>
zA!>QuLEglM5AD)|+vfdks3$iBkDTK%9{E7?Nt5{8bW0aOLgi|kM{lGx;!)lr1^Auw
zi}>~rh4 at Gwg^a?gKC3cK^J{fQ!~*)e(1e?gFV|?Q<M3mo(<O69K#5(x&hYo2*vcHF
zlHG2Gu{GJ71Pn%NI}Sw)lo9w05B4}2Y^WaP^<i%ICGNKp*Nj5Dn9|@Ro7wEtL-eLr
zUvjg*)KIruda3~hrBUw~0oSnJ7pxL2VYNwMOH at bFy@FC`0Rm at mDAh!z(~hdg0}CT`
zLyobHx9^q*kDrVCQ165%?8{n=I~+S!7*q->UXW<eUtYP|VPO*n;MC5F=DgyHq5DG1
zbxWp1Dxjwpuh=Z4j0{<5cq!Y(X}k$KCUC*4m}YdWJdRw6*<Y)JR`<J=ih at _Ye@zn;
zmtzLxsL`kJqj@(mDJLKY<npB!RAn_w?lmaa+m at sziL#0a8qtB+3I}DPGxUA#I`%n!
zJ)|O<DSXMgB9~7~I~>wyWNuq|;jpyz_)x9k_;4(1?~$M2JoDWQtRRCow+XK|y7wrg
zrhv<-g(<kg5AoOiP&Y2JGbdM2d0|IHC|L<N;V^=_v?r<_Kmc>q+wC7qZBbP)US0BW
zW<`UL5NOu63sJmQ4De)Ds7T=RDjDymD)`cRb5P{y`wLMJxqZP8-$Lxu-#tr;o6CUQ
z$XZRK7#W1#)BlT!mrE38G!S#et26N at -^MN^E at QULCK&-wH#`h*rm33w#o0^zXA*OY
zPWZZb6q(1 at 4upz<VJTYg3Sv^t%SG?@M?ftWS;)aosTg*0P-Slq4 at z)YBq!onabGT3
zOnXl at t?o at md4`JwU>Q}Fqv0&G=U}dlh|n?NsJi-3s#$Q at CgC3Za-(HJOd$D>5tzQ`
zF5|6T>j^dy{`qvP=KOw|*{ruu_;QPRd>nx>l#ScB<w$pve{1TdK<6u!kn+I|!|2KP
z7OYo+&z4K>-3u}dlhNP8g8vq-K#NJv%sfh{+E@}il!E&v0 at a_aV_8rw*<OJTzOtcB
zRQHz_gm`Eoa8OWAN$$2;YWWT9x~ooFSrCIVDS}iYaM6Q9`CMy2TJczkj~z|7u6K8a
z`tRoE=2?-IfK`1g>l>Px!V6I#GvAVlWg6?y(@*TturuMw)2M$PKwu25$I3^c!BMw_
zaw24e$^$b+%3hR;F@^RLb2*+zPh<E!1Nz6ppG=k at OBJb(s{VasssJsGf~5bbBJ^eH
zmFY^rD<0UMmHsf1;^sV9&aRe|e6H5&ZMpJ1S-F`{Fzk7}V%=WWXC=^bPAz;7eJ9Ew
zSo07Jww5$7l<bqMz#F3fPxP?Spg7c*ouqftej?8!tWkXI93+P|ojf08l_F|%MZeLQ
zO4VN(lb&&}hqN$%L`3*4BJ&Mn*L}sXNcdL|*5uBe%E+FT)m>El2}U$@TmvSz{fV%w
z7}t-D;VU~vX8K>$jV(ISAnwQCvPVUp6w-wTl4_%zSgay#aA<>`S0Iz0y+gA_UN558
zxqI3L6!I>8*BC`BJ;UQ_jyZmVJPiX}L=g2e#>9h8{>|2)ZilfbJhnu at o=D%GPo0Xd
z+~4G at M%46p%oMMt#+50r^kk!+Thf8De9wS#_~M8uykdAv>1)%c`EF_v%@PcB`|1tR
zp%o^3r47>cej{h<7(SjdINY}zvjFCx9I=0z+fu4d3dzs%jEYD`)!-JEuPixJuuIoY
z&+>r4x|lcQ`i$IRWBld*#Q*-EJXhU#;1@*1fID2^#0K5KtF`OM+;=n^3Mpaf%DS_|
z=jOVJtzM|@U$2TjXG46nw9ebp&r)82^a_(tgR at D2&`l^h at v>?|tC2(xb>JbwV$4Ab
zF2u?Q9Zaq4^|URROr*@RCPs+Xo!c11d-#xyAL7jW*JcVpthI0ggOvY-f~*?_>|a>g
z_tK<^S61Vs9mEM~#q=WqXqd1A1dvl0g>`czTE-h^_n*+15Bt}O%`}2de=qkk1KcfO
z8fIgm65A|o>5|FV4vra|!!c8e59WZ7@<>O)9wq~l^9(Tixa;cwGM6X)3}`HY^ZIWA
z(pQ5R7e5-AM`5?WmTxa at H$P<9qv3KeDMJCj$FE7zu-?xtVW!QK6!KtS;)bT_LENf6
zVNL^TPAbx(VP$@DZ!(g&pmrC8hR-A+RfW#}R at n-U9;arTT+CiBt&@-F)3Pgv5<Bc3
zhY$2oFY$%&mz<N``5&4WN*l|lNL!7-x?dBxn#1_%rY&xTdnQ&$48(fxeU<c9N<QPn
zHJy{5X!DNDf%YP^N#=&Z5EM}{BlK3_urQ>2h)?T4*%TL$Y%R+Q;y`e|DVV^bmr5`z
z#|c|z-!CjR!)+)fqV)`FD?%Y%0GcYslshOmfS06>fcUK?X~oXgA5P6ermp;wqCQ$*
z%(SCP3D>`Woo_uP6cVmfo85EMS39A at o!p4pj}kz90#lm|nj3{#8RR<$fYb_G=+|$i
zD)>lj5LrgtudT$ExvzjEiZnJkf$)mok-(N8cb%zLq;jI&xSH at 5<?UF*k~T>*7VxqV
zjS{ohR3uCmX&v*Y`Ae18zw at _hQ8-$K1Xx%LHK&Onc}-Npk(RL)S&?*;`2SEScysn5
z++&}dq at ui-^Z{EIxJL1|2r#+xPSZIB!My~TqM_z*+`+Br5wEJ-7|uEN7MJVUDRHn=
z+=lJNhr)_Lv?S3s8J#jCuu42A$Ea>^dNwL`I)@@bc3g}0W^5j9XaPgI$OfqSpATD=
z=Y?iU1qea-O3(Ow at 6k1JZI9N9jTs5c(8ZA-hSPZK?^3QdXFDf?Kf>C>OetB0rwkQw
zNR1U~($DgqU?3wjwGZ_qB3Vt8ZERgONi51G04TB2jxe4^msdoqjM?O-r~%XbS3>n3
z5{-wW=4rD*ZZv_VWV=*46oGiUK=!q3NK7^=Wq3^m2;Z at FlrAISO`?jy$A5lKPpKB!
zK-|9_{Gi5$U0#XF%1(2MpaX6Gl&*~=kD)4hhlLaK at u>t4ifr)nP#spFS7kC!_7(I-
z6!S$<bbIOv7w)K!YO8QqBjYp$LTlf^@J at VrPNtJa#q>~}tJN*P{-%tGT)T8cq<-P7
zq&{oPz0ZeSfvGRe;g1ah_BO68S=ziqCt~`WMEux&(%(Tpi~WqN_3(f5sW&N>B~_Ut
zXgkeVfAqpQe2L3Q{vw}p%(-W at LuhNLbDDbLi(V&gn_l+Ix{o-Q%P1HZgalR{4U?Wv
zbf2?SA<%t6u at XSBt6~Wi(M=O}Q5 at +{cqf_avEO!@3JqEC__>)#Qw<mqugoYK6>^Ab
z949?QMQXe%CQLR}v{+<b at Q9K*Hq~jK0rmMA-ftDkrj5$#9n~XC at d!5=@)=VMK1-^>
zPAktfvJ45Ez*VvMxjib+sQ%_3&6lmA4wF}r;5&vk2c54*)%2uxAT9mDLD?ljKwoC4
zTl=jmjE(#*Nce~w)Bd at V=K6HeXfKr30-d>Je6M6su{j+x9(bWoRxnxe#r5o%8=717
z7!`Ufc$9c7yUn{>uCt1EQlxc`y~<IHbT1RWs*dAqpW1{P6eG~b4dEGQ^0D9;AGj5z
z9S*g-LSJ2z7oslPpKfJrexJWNGm_s5JQ<(wxdowsEB54>w?Cnb8fVcjJGB60ALAC}
zydc)#4T|!jbNet*m8Qn6qv|+C?gt*?X9QK#ZjMBLfJ+ at o0C;ob0w;%{ogM3mXJX|H
zX{U!{@vy$;rBIi<s+=2l92S>6r&rtyVyiL)2QBAK$C^PM)=*df^0d(5VoL+rFyJsT
zHuP0b=i(rarYemS8EB{c<DlCXWyqt?7Dv1<doj=#6APANTx;0SZ}SXakQjD&DCfxo
z4<?!jzSZ00%3)+l at k1+Sz0vN5!%HJcuj)-{3(MNMY}qP#1h?ajL2z6{yhG%MwkuMK
z#(~x9h@|H_a?l>DbHhDxgUfrI++ at N1olo=YMDuEON$iraVj;mYz_|HFJFLkG+!SSc
zV5HXGb#$*whCw%%2_N6+zx-3bqDewZT0TX`7o|{QbC^P47?J0!ySWJ{RAjlqhAzHx
z8QVp7^{h0P5z0(;;{T2wZPo0Q&=#IQW&iOEu<cTn$yJrPQ?vCNB-q|86l9X5>0{`(
zu%SfRHRr2BbwXw_BqqL&>_eN1uju4HyPtgPzRmMI#60SSFqyT(C8(=0_aS&d-dyHF
zb1ZQHTwB&y`apCCyAOgmC(ab)aONr?EiQ_3e;hx)N#h8{1k!7ruJ-gOOiVK%c$oKo
z5ax~W&M~0wp+!#({hyP{q>FrBk!^BLlv3UXdH&qt{&3Q+gn$}PUz}XcK<fvx_lhi6
z4|zX{H_fiEz9dc|i|3)J0KSZ<wR@)n*#?XD)vIN|?0BaNt+VCk3nutGL}<*-k_T!?
zka{@^bSMnE^E+?5p%d}S$HBrU2P(`mI<mzcn49?|(pK7F;bp4`y@$YkFBLyYbNf3W
zDBuuer6r~|Or3Vp^=6 at JFu&~qQ4n;OvqxZDp*cH(-tzsS7!mgvn#@LfaQeG7dp7 at 3
zcu?uZ)MIAHr20f$GX0?CGlc;>m%BqNlW7j9FF6<~KBuTk%Zq at Xa<hHsM}YW&2({TI
z&*>0EZgkpX48JakoFwk)qa(`>qxB*CF5v{)*B_A%SdbVWhBu^xDf(Q}6rBs*C+EtL
ztyXC)IcTQBtj?r|2KMIkA)D$tu)v?NR9Q|VCoRBhPw^ChlRdIfGs=SY%bbJcV*2H6
z3b0BY4_fM^F|uj)n+P<nT=-zCe(`s&%iM65vl%nK=CKk-fEeaB+8>*=xDpWPyW8qy
z$g69y=rXKzlnm}MsjJa;*4O4VEYJhQgTIQZRRJ)$0Kt>%T_^m9nuuu(z77?+F^M?^
z>H_qH`@;yuOI5uit!Ceg6a@$%p|`y$iu{~7yS)S+f*y-#j%#4I`nC#qo<{yBmXzgu
zaRL0Vo5y&%7SU+AQ-u!qE9;b^X+ at GFuL=_F(z`WUQL;W1#_K}k7O_!BwX)1R$Zc6E
zAkX~UoH_-6a2LQY>7U*Fvd&l#jJe16npcpq%`QU{|Lz-qKhiR7Tgo-AkSpD_k!zut
zvD<$xal$bURq4C$V7<ubd0V_2-U~oag|%_{<-bh$tTx0%xOjR{MUpUl3?HWWbl{Nv
zHnO(P9NOO6MkJ`(L;wGm at F`y5+~`s|D6{G|kl5kmvRc)EK`F{@7*Zv;GCXeshT^cj
zEQ3pBmXx16X{3&hY1L8s!6>Teh~}BoSqq`?s?5}nVX>YvN~GJst`UdHBc!hub5eN#
ze58EM>Ijxk5)d|fJ67$KPgHzrJ at KRx<1L_4&q1|RO3Fn;z;n4*DXCm9P`^A&N7i{D
z5Y+-IQkr at +TiV(vR5wgk-cj)^4~NrFgO1eB4jz$|imEo{Q&Gu9N|yeP2H%&nBi{#`
zPmE^={*jsZ7_Mk`b)0PYexv?Hj#22evSOGZaF>^#08V#lyZa9gY+<C?@vTtkc94`&
zu(*#pg3P#A$7dCR)JoK<%*H)RZ&(?4z`q2C7>xJAQQI~>lNf7-robnrVfVfZB2eh7
z9MTN at Ff9<>?+Xy??DYb{ddM7(Dshh<M_L at 1Ms1CzW+U*cFj(pljO}(hCo){z*5R~)
zO3BaaOK)du2w<ubmYpojC6mP`8{`oA6%NO~ee?Qvam$B;286?6&ua|1?#|@PdDJvT
zn2|dsF#&0L{&Zk}6BdP@>aqdA3H)L2*Ce3KbEb_*hL}2ERIU1=1NN1KOttEOS|6M`
zRwUTmk4P#8+Ux9yAd_81)M4Bik<xpE=3tyFPJ`S#{3!mO5i0#IhLCmGx>6oa;&6l#
zncVBj7~gnxexN`Io*^u34`h*{|F8Ihrh1cUr!_kr&LujwLY0^s48cwD08XvcS#~Ip
zE7B|PEz|C5C=WrxuhW>oF);%bLG99>?fC?_=2ixY#qTTKP8+8SzQt-85$D?D+){@@
zs9sBw@%=o+>L=Y#89vbE!&D at 1Clos)4G at ua09h4ZJ(jfwCfOvqvt&!ZFMrybw&WBU
zN3L>*mCF%;B*LOVvF}3pH=nWDSEL+$=Xs8m|Hj0tT0Cj at qkeOA&;?&wKMF|OT%{T1
zbE^1lry=|o5VcW%jLUaK8iV}e8l*WzTx?p&SWSm<U8mw-()CBSFOMIlf at JS7#Jn3J
zVMUJl_8Ac!C&LGFLD^X(OjQrKPJfGTi at 6X`(wMnSya*$>v6qWL6 at 4c~Xz5O4E^fGz
z9;**`L09+a)~|gV8N5wgFbVmi0Nb{75+v9o5{eac5dL7r#h~?M5d{Z>Ashc*x;z!k
zbnvK$n)k7*0}xPk{dVAx*NQ0e0k1X;B}~W?UE^ZxqqUoAytlo3=d@>rtnwR86B~s2
zXA*vP at Tr|z%|FhVy>2wi*H#zJOfjzBy#-(<BH(T0a?utsbJE^eTSTY=nmy{QK{-RR
zaH;0g%~Y^H_=wAhB#w=&tqDG2MfN#ZOVZ9?HOd_vH4(rRfVXokc1BbaT~_+XhbYRM
zwi_3Oo-wv at -75kzp;m-Z5f<~gY6i!_a^GaGM&_6jG?^hJ>m at zNhO+$3SEvOstBL9J
zKt<q3sgf$iD3<cN^(d+g%4XxcO%6lOd+Xb%6D7im@!`<%B!SSTLB(7S`)Wacxvm@@
z8hgj*0OMqL$>k;Y*q4kGuZkzJIp9P4;dwWYk<<H3{<qHy?5*1LUPOHpuxYVBR$qn-
z3@(b2u6DZF^?bCJ;$((8djY&fqDh!MW4EfWB&vZCoZvg^7B?!DqoGlDe6I`-J8ur@
zHEcl=Yo1iTuM&1sGYSUU#CqO1F_2rM)Z&McxFW5}f|d~VVotX at rGlpSBoUlo%5!up
z6>~~s_td2~=E@`0k4wp|cp=++MVGG?)#?#=+<F&^&#hipEguVJXi%BMS_wjcry$Wq
zk}EN&B6Uch!!)(VZbmrXAsn at fn}ALRAK$?U0vMufLsv3pS!X>8kX=-wSl|S<Z8B?c
zswN1inDL+j+F90GfI#MF$of4GyCjIWUa;fV$19$l>TUWBc(LuU*j>_kc+Eh3tq7 at P
zH;1o{)uKn(f%bjv_K7VtTy76z at 7l0|#98zHT3gZ<e3%sqOKinRIS!dG$rBH(Luw<u
z>G%-Lr(bXtR~H6osZBL4w+I4v-+x*#5pFRX4yjEcC5U9%Ulve>Nj_YdCAX;z1Lq|`
zOmby+$kuG>=^lzVBnJCusD+z|P7kW3lw*fmmmU{UQas!&iP!m-KN%q2$(}L1YJSc)
zcfBlnG^rO0yAfaAylX7KNt^&Rc4DoL#1&O!oduuH(x!}L=<{@u at Xj-5j?+mkri}M@
z=2WU!q;DNiW&Y_)Jd_O7-VVH#$9 at dvcQ_L3$iIE((x9&ek)qX+gUoJ`gMW&|fR&+_
zQ*qj_Q8nhU!$~M^{+j$qB4PvuTAm+Q3@(*czm^Uj8YU1I*X-l;>_uy+8iOflC>%sa
z#sYAbII`+Uh(Ca$L?}{*`;sA%B at oSu3WIM=Hwu+HB%Oz<UydGhCJKxKQT`d!cj7jJ
z8cEi|zBo+eviXvu!DN7LHl>Cj_g_54yq;+R`LyozA72 at 3;7BEPNtL`+>^*@9x#a0x
zhse=H>5MosYoj^Z<u8JGT|^-A&*biY+-bC at _AV72W;FMT%uS~<-xa&vnBfBi+RhP<
z9L(rq%ZcHwoAf1N@>35OBlz;Ss~eY{kbIo7(M=;gte={ixe{lH4>;Ak79|S1vYPmv
zpU%Ns&s?R122O<S>tnx&gn<Edu-r7ktAksnQe8}y@>=K;;x?}3e%O1mw}x0<1A;V(
zqHcXsL4_nOD$+B`i51Xu#xg^IVYvk^4yS@^C(U at 7ruwv0JMsCjdtKGIsbGvxA)~G-
zS<3{Zrcmle*4m1QPmU!Zdm<O1L6s~zFg3;Qi37Wun`?;?5ArwE=<le-lu+N4Wlm@!
zz at wjQ{^{h@*r9=aygTubxi3W5`gCi6Dz8XSj&4#)^kOXis`+HjF9<ZfY!ScxB&iw+
z*{s#=WPsiqLtPXOm{poywAE_aMEMf+?O!$OP{1f5!*s+SM;diE=i_9-{uyCc9DNJI
zhq5>9$x#x}5?2y~S-0_C5Q#+IeV>9wk^o^5%B at dBGi!8TcbF-j_)&yb{aqy}eXN9v
zlLB>dwx*?XJ2|LcU_48$$)UH$Oh5|U1$jP>fXBClvf;M!t`>|}c4-A5QnH5k!<pfw
zXW38Vt*j{s(T)fEDQWof?|x1~6Z~NWY||2UKHNeo-G^91mdg at p;m2vM)z9kil}@}e
zRVtrTB-MtN{&BR?{Uf=T0alDk!y;#Ifyh9v at 3CAgJcCH(aJ}a>y6(q=K&)H7pVCex
zFPzqwqgTIiIH*azIVV6Snbp(7acCMg=ZD%UxGhl#ynY;K%JEAJaCcFsaR6}ueav|L
z6M4AqJ$m%$)Ix;GwSqOIkx>@e{n>LC-S!*sg@!J<BVTrfVC6?F at p9>lMEgGP!)sj0
zFlG!bX#-F_cFp|x9NTK?X_XZdfAU;S7p%ofw7N97LQtsKEe7ERr$G*tced#Whzc|E
zZl()T00`fdHSkx5No6RIjK8Gw6}mcRYom`q$bJ}6WVI-1)fw(FJFZA`f%~Sv8#s16
zxCFQF1G9HO!~wyruHlm^f|H2*&Vf&Y1rK7_>-xLaLPV?|(hGm7a}rH1Gm=klzg_3R
zF%oIt at C612TVtjpCD`~D-K3`HKpv9lD+75+_xq~1CZabPaFdZkERbCc&d--4A`YD|
z=W|eKG%g1;u#tyZY^gcRb^#Tu9%CNjIGG{fRPBOv5}J5IG1jW*m2x9c(L7dfcM_~8
zw!#=cd5g4JPDFRR;=T%}abm)&fO4<KW9oS*t9;bzT(>YVJT5ce*;m;{lifype3=~Y
zJc?j#|CKvG)TG2Mxui}+D at a3k05HqQH(}jI8j{y)JwAd-2hVv`tnW+U0418NV9s*F
zy=?4LYml!1qpkUMBQ&qs(hZkYqNU9+ANp%Z at C*GOKEx}wNQlSd){`CPlaMYx5aV3@
z%`3e}5hLXT6BcmtIAnVWn+M0)lw9H+JcMA7UMWx*MIQ;R>9BeP+^$?LhW`+Nc<`iI
zN4hdF0Ym_E&deHgNKenN!8OqboS;VBgBuJ<!;9CS5JEZ7yR3c`d?lf{Wpac6oSzZq
zj`%z{v0KgN0?c(5^wP2~4ou+GiU&)LBV^reAjT3eOsS88M|G`)Xi)?-jV#|v5~=5?
zk{g5)6V)p1a8$nuaS?Xmtjf0ZL!Jc&m2gBm!?4+>>sA%Ei+J6qb1c5ZA|uRheZ0bT
zXQV}UavESR*r!Tm#--EL!m%{@mpX4>W2M)x{F90qWnzC{_+sBYj_SV_yh_5*#w3vv
z?8+W~))@2g(n=wpZ<yDM9z5h~A+_7{)Gk#(w7CT|TLZ~KXbVR$HJZ_(k*Ksp$0Q%F
zf)SvbLb``$V~1I<pW6}II*98IvCF|`aPO~JuAB~*GO21=Fvv@%v;PiBnI}7IfqToH
zV)wQ%yPvKNu9EX|VI<DNiY`^2`^9)Z-IUBI3*Au56 at AoRt*ijvezCdqvMrAT>Q#iq
zYGIYj#*FSbO8;LKPk3-3%_LM<jx)q(O8UddTL<ahSoso96^p*!qxUMRI#yJ`VH;r@
zQ<Rx8OMZ8H(pT2i(J#DYUc2S7iq&$F=Z at o$&k`xrQ^^Bgtz`wTNo%}#cLm0=?JP-l
zTx!GJ#j^Gbt{RxtIaGye9!83k0K1$`9WT4dbqBvnr9h4KJdb{e=l+(<xT!1%J^#HV
z=MQEY1LQ3-?)ycb*X0KOF<LvIIqv1+mbpv>FlglAC8r{&Qe@;mB~bfA&NvtSb(i6X
zM|wYXGK=WYqP6mC at 1=~aO05K?`~;B@;{dmtqT{q-nmg~k#H|p#0F<9K at SHiVqN?rF
zk<_H4B$j`@EPCb<?@QF=PD6xdrw`T)`$;SWx_zXW<cbY8Ni3^AEOb>I#Lo{hnpDNs
zqubFAXf}{5C+zB4am_FJvBF9cDpm$Rm;M0A;S&x^hiyjy)8dhCJXZZ|`p%{Bb`#dF
z%vw6D#Qv^$egoTi`tRN$-6zC0{=MA|Po;9iRqU!AuqEmg7@!TbDf0aoQVn~;%i^iP
zCOzg75uRy{nBye-)olnQsywAk@#v&xWxCaVjYAw^y6$nZZKB#!-2wHXd`-ze6x>ll
zn2-_ZtL)t%m11>FF=b0}O2<b#90~mm7|V~tPDLItYU^+R%o{eYTe!zU5<8@$r7r8f
zm(P0Y=pjxh(mHY%M3&>N#X&a*a-}~Dis!;`#9;<o{z+AExrNar<-x`qHr3RG<-8pO
z$AF-hXgtQ4oFI%pB2q}6HL>{+#P+^L_Hpy1QED-hh?i9^y95Zt at g`6Jzbi+_!?HKz
z?C@(4<N3eie*%(Dpz=Gin_`ei{3pavwgev~bZ+H at Iu!v!+dhQqM<cIPlCDx>Wg%mH
zG6lw=5B3lD#&uiHDWuN(GN|=U9)+RO(tlZH$HP2!H*H6oc}5Ve=qa3 at 7ta)y=3>F=
z-$;?~8KSq321negF{OiX`ubcY*`;Kam{eB-Mv1{;YK6V`P)>oL<f(F-7XX&w$NV<!
zUwM}wD at 7I?sswWL4c;>&)?^AEUl)-;1bQktNhEUqkt8|Djui4n$sS*+<&+E*^Ld;u
zj_XJS%Cx=Gd<p?_;YPw$Uf at uXPZVT75JTJ>j?{h-?oTm)l<>>W-g-AF%7+&qdcJ3-
zmFN0FY1(lpkz(b4rv4W5ZXqE3NarPPh=9OXAhw at fMa~NR`<I?%PFrET$GG>MO*CtJ
z)|agti8-qzo&p_dMlGum#9 at ASN!|bJ63I0$Jd$(%Q2qobeFX1~_A$R~fF-?dIt<mA
zL&L)>zDse(H3zZrBK0Qu#cmqXHQXpMMk0&(1F=@=6hI_veSq at I8;qF_F;^H4l?(Su
zADpW#l73-~376y4i~Iyvadrf_nqpJuZ~)|^7|&9-Qb+s+k-8dB&F;iR@@`MG{RJqB
z!7fN$)J4zSEL&#bJppJbTJO$PM-?Gw8G6k#jbVoO3?1W{8SIJOJ=8S=|9Y)=4xqz>
zr#>Mm^`Fj90~C2M-3)&e=G)sL>;hv(yBW6uoHv_Dzkn^!7G<ulV%mAg!${kC<da~0
z>iTl)EM;7 at BBG2s?ox0IJc8PE%JpL186XG}$@ccZiZVg!LdOftx{i6gV<Xc*4qLI@
zZ~`J^u4G#1OTzt&8>4*L9Ge9=f|C*AX)Q1{v(4o{QG`?`D?XailCrWPX-62gTvv|E
z%Y81MlMXp=&`mjiqkO<rV{Sko;|b}e)2YQiC5chWz1{!}#jxv!C67T(Hf=;nyyYGv
z|G>R(tL{PO5qXRR)8Q1N-xRcUw+uz3?Z8t6?2;4A|NgBVBB?3q%e7lfS(t~gzZFPw
z-q<?2`4ycvmH|JXo(-S}FQf)r<4 at V_J6jL(1<DDjimap|%4;32!Q3O>7GI#1 at 32}h
zuW$#I)$UZMS8VP0y{E%A<T1bS`%F!xguU8gXdgvZIY)OAsbehzuErq!T0^2to{z?y
z3`W?vdpGbA=H)+mtyEE!lv<jH^8O3C#fDN!pA~iV$2uYHuub=+c{>it3{Iziu!Kc0
z$wtO-RY9_{LyQ{&8T4CudfZOHY3C+Z=vrI%D7tBg3ei^BV!c>!`Lpadb?JX%+QS`Z
zC+S1`G7*xk^3gsK??el|&luOej!T1=HMC0vOTaWHm&k~wy*cOK8{C%_s6tf(?+TT#
z%0~q30HHe%0Q?I;nO+M{1blPF1}$NtM;2sLCh=Yn0;~Vs$PsK}=iXIo3>uLGH-58Z
ztZsI?o#+PUwOIxc?WD#uhPp)<*!o`!Cn0QhT_B4X=hQuX;)3+z|7Ijh2$?_*Lcm at G
zF{>@jm*JQT{T!p74QD>3!eab%@H3ZrAI$Xj)VzhlRn6Gbn!hlk_ooq0=B}I%zMyX5
z at MHiD!z24F{Ss_aorWF^<>5o3j%sP?r2tQm>PR3^(0 at HMU}PM6dQ68hE(x^#m^l}o
zB%~Mdx)en)z^CBsq>#~k?|~r>a{a<(8r>A(lxSBC570)=^IETpXJ<gYr-$bsi>aX3
zB}*Xl|F9*L)5=;VoCk1*hnB4GNk`Bo=@T^OP7hT`lhqI3Fp73^=^65IU~26n1n=-5
z&5)%xyhw1_u1|;Gl2>)o#S0Le=`wAyU+HS*AFq!BUXKQRhkrIPI^gLgQpL>9!dB>o
zTghOS2nYdS%rg)+rzZVc?EO6A2Jj7E$7ix888XsVJEu01UWy2e-_tTmpbisP4?yw|
zdl%DI%{~{vW|Q#~@#6WvpNkJPvzK!7+#BeZp^%O7k$%<KNU}1Zb~;u%(>11QJiid1
zRVBFOQnQ;~$b?}eeCtZNy<veb=Oagd*FZeN+5BjynbONo#GYaNBwc_fD@(P;F;9w`
z^O!Duu&b|NCy15x3y*1`sd>QJ1o`$i32O2Y>KTs0EfJ|wjc10+Fd-<f1H|eM7#}ip
zUdI<S=(hgJrpc*o=#9mT&zJ;f+u at Jdzqt_3{0kE?EiKa0xiVM34qEpVDB+9SA~-dF
zv1!T1#-Zl$96b<7sy!Q^X7rT7dH0w~x~6*1JYap1{5{52m-lqQ`J51WfMo9-fAmoc
z(WBqY0YK04=p=}<G^WT}HX6{*(Js&qY;+4P$dgDpQ^lMTxIp0g?UWRA72pdUqU6!O
zBT6qJ8)SL{Jy#IPVn2{18m^H=N35+%8GLQp5qE}UcZ=h$Fs85<m&R^i3!TPkT~%kU
z9QC>_32MWwRg-(lJGMwl&0YC+WlC0qF72W#>();1?qK6LCWI8q(YXRmit$F`449wE
zLlR%wHm|qcEEMe>pwi%1XWvX}LPFr2A}odPa#7^ly|PkloQ8t(n(3!g{I3NCo?iFa
z8Rj~T*VbH%2$$GBdD^~ETyn|L6sm4t*1s#K_VF8$+8N^9uj_{3-tP%%vPHE1Q8Lgq
zdx?Ib+23zF{{AdSAO at E4UgjFF354)DiRbVQD-<#s#7^AW)d3!yMUDPh3bbTbr;Wa<
zxt?6Dm4L6It%_?&lF|;?v at +cE@_S*T8u8 at ewhFIk%8*5aj-m7;u?`3`(Qr|Yas=QQ
zHkGnQS^=UxWzEZEubO4lQWfWO0ZJJDsaau_L!_}kIvr9<@jubH=rmFe&p?3Gs>MOm
zUUVKp%*+I05fr4E?z%$u-H2uG+|jEkeQT at 1t!*X0ajAmZnZ>yFk#if`-eDXOhHjRk
zMwxTSfBZP$*#H3~5)SgfZk{cS0f>Ic>lJFydVLe;M&VxGaX;K*cD<shh3#|iIAQ?X
zna()zDAgCXRUhk$y5|QDF}B}?b!sFhVN{3 at XLlbx?9<}`bxe!L;zvTIYW~-;4WGVN
zn8nbYLXE7yMfB(N1|bVX=~A(`5WNks%TH;Mb<Ja7?*sjS^#a)#TX`q?Jh`4Oo{>C`
z#Grcps?SQ+y&E)>yz?8Nrg)2Yg2 at oDW*sSz3Ta19)I96}E$ebSQ(OjPK#5Wl_8F<7
zelK)rfjQPB4Kjxf-DzrGu6MUibS5&jr);<ysS!>43sKz5Q1DISc#V>V1gG?=AMcg{
zB`^nvBrKsvCR?{ifv6=^)MO%tjVCofG;AV!qMqzyO$dv6iBKI8flq8#!1}YEspW`S
zeABR5eR7J}nW+LZGjz9sLPwkpCKNpL**zM}JQe>6E#aBD+ln!$SN%{Gs~gdRJIYZh
zUa+t)XYRb>3l|w4k!pn4^`ai_eJ7vVyjajVy=Kf8&JuTiEKJvUkRhYqY9dl2caXOK
zmG{XniWiSlz90XGKsztnl|z<JYPGOipfQqXLw=&Lz^aqYq_co(_=>-E3~f%=jgspr
zRf>@_jNC)Ff$PaurJG=}Fqx3iLR;9eCee8&R_wz7>Tx<XF#0hGoF?Mw7ZdC0Cz<-H
zR-~2WLUje`bKHpmOZQU}UyXMRNg_?vsw<&7 at YF}+ftH^4N(^781H6!U$TDxHvW&TA
z>Lz6a1bIQ!p+M>B at S+BY#Z6+527b-?wd~?f?7+*ve9%*iUo%TIMGv^~{oxj#L;{QG
z5XYQ|mT2E|YmIi))sJV4yvA~=c<maIVDK-rs5l$&6x77!*18lZ*jM at I-L%&iNe5X}
z%|xw0(ezDR7XpM^aAHKQM+N;PTQXt^U5S`OQ+qwr;?6F{(iQ;oQ}j>AQ`v33<gBlz
zdafQf{UfPtaTybOY`IIzGm~Te&)Ss1W{P8t6T0VbgWY at 765a8}fgh at x3>T at NUUqS^
z8e2AkXPQrxDD|H{dy_g>J#B<1^}EtGHY+*ugBFg^DJXdvg_{UX=VORC%#}30H0)48
zuO at I}C}nssl_lRRf1uTBr at p6=N?)7F;VqD^5*lDFp%cZe9lteT6L6iPFz^_P-K_R6
zU>1h-XIE87u$W;|s^PB`ah%mrY}$Z51E~*5X`gq>YJ6Qk26KD0!w<=DbxoWObU*7s
zwFNdbZORMTMB`-sX_!z+u8>>?+e};CPH?6HHS5jmT)QMSbaABRo2W<%^+7!t3&U`C
zr8?4e0_c8bm+p{h;>gqLuU?WmBi(#2=z}yB-goG77TCh=@kQpeaiuK8P;#ctn{>-b
ztJJ;eO-1OoXxfnKakO$Gr`#~Fv#T}Rb at Nu3BYuW^XET(|#;`CP7tF?Tf3+Oq#aAma
z9z701LmDibaU>Pff8iOg<0v6bJVxXYd*l<&08ukzm|edwID;$3^)IJTTX at w@zbZCw
zt4|`-vMgZ~%lyF+ZLY4uv_3lhU1zBFv8UN%*c#Mx?A$@_)KD#~D&snjUcw8ulFft(
z&x~PnM%nsi at h`&sPvNrONHHOm5+S0IZ2 at YSg~zfDesf at C#BuLW2<fk2bwDgb&|l1K
z8t+xCE2Sb}$vSVB9d_AgdoCRPWdLC9N&QDmv_k`EMv6==jU9Z=IJ3YKh-Mdyi?K+m
z?*@+F%`Kf={m%Mqd}0zQ8eK<M+ooo|3NZN2|Ef!iJMsw7VZ^sBSih}HdT!jm$tN;i
zQOke}wDctfo8CtuTKce66Z;=s2xP%ef>E|g10GH_E5+2SK>#I47H4dICukB2GYdHh
z9W~sUdMupJ7Uz)32}o+j&KVt<nF1L7u5B->S-c+#`?9Y_?QlUwyG>#!v?=ssUo5)g
zf6V6W%7FAe(R;KY=M5m%Jx|x1Y>oI^RPDo+X#%8o17g;3|3C&c!v^GjuusI|Up)Dh
z8YaS47krzbxOAQ3vaA=?EU at Na-5hQU^eGDQh0fJohlS~MRRNqUhN(wm-&<*gNIprm
zbE!;ase(spVVz!V!r;ue at O|k%dmPg5W6@=z>6IBpgi3E$D}`VDfobUoijIcL$Ktpj
zr9c;*kcR$s3MJ<<tip1rA_2{aub!8+2#^sVn_$hTLED4JWvrjZ`N)BmpcoveTrF at T
zb~{1>3|lpjI;l#_;L~661-*r%2bYySQC8bTod8NH4V-`- at t?65{=Do;8>osOSX8{f
z5%i}<STiiv?h+X~Ouv-P)O at iVSi!11`ROcxV<joGpEO<^t_kjIz1BynJlx#GJ+;P;
z^>L6boG7Q91GK28<A^w~xe1Gmn`>DQ at j2Lm_6$N*ggoQ`|5EV1rxHm#STnN5ygYi6
z;?>_M<&T`FM8*JD>NhZ=M<_i9`5MHhDeRhOOvROm_>yq2(`|@UpetLlNOsh<RlAht
zTNDyPN9Br)TIM=rFO+r_rxcp<e(;^i(#9L at 2X~5oTLG!-^S^Ab!b1rN>`^s8#Lh&G
z(EKX}dej6^0V-3+z{zSMh0k|1j#(Pe)5=ks_$_INj^BNcsK6{aWq|U^FpMeGw^;Xx
zQ1PP5!jujG<4|j44{6 at 1X8{GLGQ#FoS7+un#V-a at 3y?p{;aBCtYRlKla$#2gRB<$M
zFA3gUse}tsLL1`dK>ntW|91t4>e%F|0yva{Gs}H^Akey$zCkm{h&fN-uI}gzpqUsJ
zf$AtL!yB$2-w^SWqYd>MN~G^oVVGOYHXQQ(WU=)sTZL#M1WkEfEBx~}`dL+f2&LMD
zGtv{JNr#9dYK)>S!kp~Cso7?tjyobAyy<Qe#ec*Z^efXZBMAu$S$>z1)KsGZ*Q{5N
z5VCvLsM}Ov$x8glat4Sz<Ge%$TDyErgW22%@a-wIaV!;p*s{=fUm5~;W``EHBEJ(o
z1N4MX{*2iz8KQk1WngUcOxJ#PxzlTYv#as*mHPKq>DwZo#Q at b$DqQgIjH(OiX;un0
zGf^Ue0$!r$+nBp@%j*PftK!sG@{K3vohtd^=c@***7B?}m=A?aUINU~Fus@*aeW3z
zBpG#@%|dVZWaRx`A(4h8ub}?lt>Ze&hffwPwA{)&Q}MGgcEfGO8`qkjSu at WL)VA^e
zMPpyD at M3g9I8}lmmG%ekdCXR!6EfOk)#6*Qh9Dii>NT2SiL?POYibh53Xmf(v>4w8
zlJG)#RT-?0x#?7sUJv*K5a2_OTw3PkZKEprID2$qrc3{Y0E?pv?AO;m2;B1%?umCm
zpNZ4wuN;R|SH#t=vHNR<Ag!PszxP4)y_i(6mQqO&i*FOZ!sWv_BIzT(dwe=9tazFj
zE>1KX0WZ(!J)PX0K8}Cc%fL!p$!Bi8&JrN~dRtDdY!#~iOE6OIsnu*TO=3tKn&Wk0
zh*)4|3{gb46{VHU8uT$_85M*lW<Ry<*gup-2E5QQ2<q0427dBj=L<1ot&nf~fB3Ez
z7`uaiH{3O4b-5U%DFH5cP!y at Uc#>nVA9d%}vd@||brGn-^I%MiuVX-BKP}Svq(>kC
z6Xf+*`b at 9p-8GnRVH#>SK*X0co>b#meDIQG>WAJ_>mC%*5fee8ZkNx^tlx4kNIgAJ
zq~VbJ6i&E2erGK=o&#rjsKR^9Waa%iOtUI_w(i^EE#};br^E<yp<&RhsQ9sGDsIDs
zj>G$v(H||pra44cC1xhe`obi&`b}Epi#0d#t_ at ZwRVeFP9BxkKTL9%1)&kn0u^n)m
zDq+0JxPS+p`j%&CxV)$B{0$g8yK{RaK at Y1M^SY3-&%p2jed%K~E$9t6ph=$FAm^54
z#UTq^d4fGpO?#wsWlxTd-H!gI^Ozl)GS)8nNdqZ+rka6owMZY8i3aEIjWaj_oaJ#e
zm+_Xh;rw6%3F8J=&LfX>_`cG(WWT`=XBU7a0u%0SAEhrTxq-O>8kvRo%xvp5ex(ED
zh6`wTP%Nto_j&pr;g{RgFiGjB;G80hhGM)0l{=SRO{e&ot^5&pR~Z1tnYuzbhKUp?
z0ZYxjkIyye=9+IJh^sMdRKgA^R{qhEwahtja_wRv+b^Pl0(<DQ at athVc6v7jDG_FI
z0+_b_3JrGk{NC-!E53K;<E2x3IHlhz=9~sdH;UJ($Z6ykT>#wC>Hk-N?JTAXJkZ=E
zLDLZ2ZS`xDuKFiQo&(QQ;NS~;RW%*&=~4P`U&H!TpS~$3!=g4-RCvo>>5Bvo6wUp-
zW at 8mYV;7oIT2~s9karS%0OaD22R=SP8xkB3E?vgvBt>c4atuyR1`?-cjU((D(67m!
z<lc44Ew6+4TdLGfz;EV>gcOpR<o at gB7^M4Ewfoi;()$ygH;Oaiyhw{2^k9xYoSnmx
z4fcQ~bri(xf{e4Sx?5?jcQVo#hK>^zYIEUAcJ_tDO!U&%P>u=E9&A1<sduVjZg`ct
zg4^kJ2=HgIwDFQ;+~RXAw}Z=(?3*h{)s^~OX>K;gOhZ_YD6S3CIfCZMft6~fM5z`&
zBeKc*ibKoCB7{;igC2Cu at iajNIqcyM-!YGo#wQJ=PVu+^YFO#S9i|UG5f`(~$DX*}
zoImQ<r8leaA4Dd{!_(S%&XmbYCm-8?3H+qu$7{Pr)Lz6wwXTMf!<!zkGX8U6bVdCd
zfS{2schIlU4C;u6iOc-#I(`(zZdHB9h?8e>Q?6!|DDpSxJUUuIM{cis_o~-XI)Z;~
zb*sp&DW`dRk%WKWS%MSJJzJ`Jb)@K(m~lE9gqu0jX+1!RSjftDr9>x<acLCME67CP
zbMBFp-j(FM13g3_Ti&Yr=|`rD$uN+fX>vYyG*78$+6_J!4JND|>qb6vmT0IpbT?5G
zW-~FqQDZ_aB?<NBy9!C+#02s9=PW2F6NMm9IwfW)7NTb?GnUPzo$C*MvfJzQ9K4Dl
z#Azow^Bi$~Ed>hGyNg8?HsQ4hf+G=Y^Rd4|Xe^(u8HTlbP03(W4gN<iL-`=tMWDkk
z`B#LPzBK_G0_A8Dx?!S~h1TUbjBuSO#^%W-Dpp8ls?!LjZ6G5&BZ)P)s~^xAHugN}
z&kV~utx4)x5c*||F{dga$9+9^`L6Qs>F$qF;iS={2l_$w^4)=Ei{zT0&kXYk^0V)!
zx1(45Zc6t-a%&iGjIQuaY$rf6@%R at T%txMG;{W7l<zH3%&lu6Gru7Jg1e{flxz+l#
z+`)>yylZdg`9kO<ah~d&nbHsjuDNdC;0j}S1R*$GBZdQ()nO#Fkeg7;<(vBsj%65q
zo+FW at It|2DfMzcDvnXctMDfNH#KXaSnalSA>t?lt$CeG5n%zsle)X=c4iAT3cQB+h
z`X()U9boPY(HzN7Ka2sYwxxO9D_CEjXq2}Fg_}Y at rS8%*T5V4y(OUQd^``$VLBM81
zj$8Hife*&Q`l>PO06jp$zb+01*~YuHLWDL>DL5HaOcYG4jM77$S2`9ivD}w_m#F2z
zvR5EX7j1pOTg-C^(nsvm>08A4Z<wYh!=EA_sE670qxSPp^i#39$Lxo at 3E;+({(hVI
zMie7Nk at td4knc830#3XF?ftb`<wzm59GgRieyS2$QYu?79$>J38Wx`xMP|EkU$3xh
zSgNPhg#<Hg(<6nODl`Zi(+KH}o@|L!XLMtw&;~5dc6fJ<p{>f-u6ioTWTbRiuH0=^
zunmCSX(-{gVix`L-(>cs<-bRz-8BL at N<qqSJW3pF;Hxzodrh3pFw<v7=lU0|jw7<4
zq#B`(7OgD%>n9ws{-kn6u0BlAH9>a*$Na`&`s+_)gaXg%;F7W&HitlAaueKRiEy}r
zFs)%~Cw%)i^+=b at a|3OkDGqKo{Tu+4qIJ>C1*XQWQwOi)u|N%rMtusn7`VmX-eoCp
zv{bFI^AVBKgth~-sd5}644iOYL6sQ^>Ymjfo|AmGmg4=57f)e^+;f2Nbi7KF>H|Ev
z0`!gP_tXLRwtdZcqWI2Hj=D(hCY|JbsF*?2$rUqaN$Q;LMGi;Sk2*L#TnjYf^%x(B
z#+Kvdm`HBQ*b at KdNkDz4RsY;EHP7v0=EmSwsa7zGdR;<)kzhNCSoa!u%mXE&5+ at 0v
z<JX%*TExwxE|pwunBn^fE=$H_f9LG!zfWx1jrqEkdA*BMks3`1>Ne(7GGnzj^W{q;
zFq+pEK7jD`iUIARst-)dz#;`zmVXgY?gMU$M}m|+C8r2AT#6T8R&ykG4i<wklAB+>
zipzCS<Zw0RY0M{4urW)`UFF$^NURN+mTv!Of(~cB^6ww}*kn0?rH9^G?W^Zza@=KI
zH#L=&UVdv98Uz*NCuV%WHcI1mWMV7`MD9C))Ju>RuKpo%mmR?uQz(QqlUjilHdeMh
z+ at 8U@`^QU}JNv=i6m~;et}N+jU3jAh=zC0ghM_tdU3<aULymovG;%#R;lWRLxB2b+
zMr!Yhkk~zvVKv)Uf<a8#Q-NfAPAU5iB&S8;T at 4rC86%Qe)3Uh;4l%vb7Wegu+AG)&
zE1Ig|>axV%S22(2Y$x)d0}MSrXZGO3Ix6Qs;<s)TrQB%gH?kW%WkcP- at Gx8aD6kcD
zU5esNjNv;0*QtOPc(JFKj%0a~D at d<R^z)^<rhEsV7VY-JJa6B*6RL-4AiJ`0$MfeZ
zrj#2tj#nhBpI<HpRAYV%*m$N*pFfn}cd52n$dCcfxYL7-x>Hwdmb1Z$R@%D1_WeYP
zzbRg(_np`xZJn&p4c4}%$!EJ6KvT77 at lp7cPTAp>CJly^5^B=*dQB6ne5L$9kR@(j
z9fp#K0OJ7sYY-Sb`}&OYG&hX2V13j~XDCVV4Vs1F5bwpM_{U|)Z@$BGYqd_X$svlF
z<#Bz{*_>g`)i~5<ep7dQO!R0OnFz)FB8;kA8LeO-Hgm<_C8QNWJ1(n>5raNMd%_`w
zG%W6+<+yxa)5Ea~{P-=@)E0PwbvSK>_$i|7r*0Xkk?P?W`b-QvhFi_+#V`a)yQmSu
z`YuX7nT<snswrimyn>eNT79;lXd_^f!DL&D2-meQX%TITwwa?(V77f at Xpt3dukA8;
zfP{?1Sn4|wjkQkqYF!~HO}Y;%cBv}AC}%`GksiFin^|hSZ2Te4VBd(7{L(R6siUBS
z&@$z8J0<>JC_>mI3JrEA1PvH at qq|Ff<XM(NSx&gV)XpUc9dQS~p%m-+aUlYYCSzBn
z4f9rZg^Dxt_-Sj7`(g}3vV`n9D{o7~ePO0*N3^nW_j+p^QnE3A=nv&NRS^wzuRs;V
z>Q8|4eNr_%=R-h<x+oYpC=!^e4SL%>8^8{(1cH4N%fgCw^$8t_(NHj+%f4dSm&7_@
zl%LzBM|W`aeO}owGdg83CckA`O;>|$xbao_kkrqt^ElM_3 at Jmq0mX#vtMWh1Kq+<m
zz5m6d614dX#(5J&6z+d)anr|KP#rO=o&UHXB1{X*4TtwC)W#4#t+a1_!Aj2Ph?FAN
zYJs4^&f1A#=3uQ9{$qt6CwRoCNe)~ah0Q{Aigk5>-UHBN1 at VV+8DZ}(;-Tqpgzc at c
zk{3^yu+hg$@NscLY51se`67HZPkATWRs8v`;qB9&T)Ai#qW7_Uv43W_&sf=~OLh1x
zxRQ&L+nHw4a^{J)ZT<Y|_B*`N&IYz8er;ELo})Z=YN1oB&UU6>y;+jPDm#&BZ at XLZ
zX04C?a`X`Kk;1MgK9ozas6TW at Tmi8ZDKIbpZK4%MyPN2C%(!elCyeEBX at Z|h1On;-
zz(zh5-iWNSe-D_W>;sVC1#jsdW!O{cdsu0FXkFu0i}>zjO>&V@>h-it#K&Rz<q7<9
zttr0zDOzzib<29cp0-3xm2_;x5FF(F{TliM8*(*D^QFTil>Fh^MP<B9xXLzcNaXrB
zccSjoENy!)lv5SDj_FNe0-3ZfhlFO)S{srQ<u<YBnCO7vbc2kAGdu={yovxvO#-2a
z_6HbfIoleZq6&^&@b=?pzu+^Yikw{ilPSUzX_5}D<ux*vf=Fiodk76bx{6tWBYwg^
z1V*XmjM$yBZiSQH1xeC_$hEnjSlj`?#jWd?4Nq0rk&S^GLBbGQC_UA~uR~}zkdjf1
z4^gNNMi^o3<2@>qU$>S>!DLr{UVm7pC{tEXBO7#R*$n&GLQ?lGvJcFg&upiI_GPic
z=MG+a9Gq|&zjMi`oD#7RO2zGL`9UU(_84N`2VM%(3yH at i<cxJIrA(~(53v05F(y9l
zO6&4^+jT{?3>JMV^KhsuqZdYT4+FHzXq4Pa1RY?fqX#kq&U|5Q){!?i at 2{6jQ5+;8
z8K at t0oVL3(h7HDemw5mhS13goTdyzZtBUE46Syi<{$_!_4<QWsG8UcXD5-B}KP7}(
z)f~_*J|Sei8}!Kr{M<~U`TQ|AM6Q$!!#D#7JDF^02C$3Ii9CqU#ltoHpgDS at 3NC(S
z++beQkU>7qik`V3p)>Mnj*W>|aoDNH%G at H3q#$%x1C|cABhIsCdt6~m<SgwJ*TY}8
zfD)m`<EV}Zs1+g+H&O~*8xJ8LNrA)llN%f@^)>>@2>O8g;-Pf$fMY5!_E+0{SQeF>
z at md@KqA{qm{`CqhxAk|`2k|2hI>x!7Li%#DG40nT`Ewh at MtCA%`rn3ggR7xj)ZHO;
z8!mT`B!K|Pc0w-BuayTD&SX(ZH31 at OPvX5|@0#{zo;W8w%DfzV3=~Le at hFV8psuo+
zOyC45IvZkw#J*Bn;`DB2c=&V0ODl<~+4?){aaQOWyfF$$lUlM<&Gb2xrwd55H&kB0
z%#mssZPtHQcT=r{mbOq#-K at dRyC(^tbToC2?A!n?(_N}b#_zASnq1}f7V*ULv%OzX
zqZ4U}6De-qo#a^nf{}c$bC+7E^=`CtM={wRKC-fuOnm61>C9}%leMt+RAcOr*}WVw
zkGHwTx1p~Kj<j%`A>>aHu0lRhQhx$?czPX-=v5j-gCv0i%NGuCJSN9c^Lo+>7H6Qw
zeDs`EF*m$Po+Y_V1=U_kg8UKzeS@>Hsqw|BSMOM%1-Y!F^IV$IV66A<2XbSIdNvt7
zmWwFz$BYcbD*pP)u{;6S;*oQTeiFE5Z8N!4C$CZ<gI(afD1`EiI;qc`ci(d0AM>qx
zJe(rt;X5kc>v14kZ>|UG=C5<WCN3 at 6)Uw<>{1B=qJF&4bqL&Nn1G@#zAbOLhNY)ow
zB_7Vp`&0FiI}81<0-N{cG|V7B1+j-)Qp;cg3J>q%nrCrGR6Z(FXdVY=AdCsd;7d9m
zeDEZ5m!v3 at H@`U)rKp&joa);jA=6az5aJ{3r!?dPiz|7o5>urAmdVOSEqus&g)VmS
zbqWT|SiXus;l(^gLDAS-5*ZYN%rtHlJ<+EQ(OySBqaaL<=kIgm<OAOKyqw&z)73|@
zb>nPLqkO5B8o?Qge!y<o`(Uty#%%?*odSNXy`L8#{h!<GBvSG>9!Fe6d_~^6Hb^B3
z<!>LINWv}4#%`&yHYC5|e4Z&&ckP&JT0 at C(MSn!gbjLNX1_1$;A04@)`9oV$QRXvi
zal;w)YfdsROkQA8TFJ6z5NPK2Qg6TBUu_up<5i+S3gvce!ip1rl)`)OuO4pFSas41
zW!xp0hGlk!PwHG1*P0tJpXxwUi%Q at Z(kM1*`Jl6H)-Ba30<jf-NW(fv)z5ze+<vL}
zkp9t>GHAiqF(aG_ at U>G%>2+6rcl-iaCr|MlRM^F84v%CKAch-&HlqcT!D{hn$EtEQ
z<>;F(nMXiXSJ}k!z*Z{b8g*@Ksqsj-0Yaj~QrmfAM3K8j%(uvo-xU3H^<yq7SLDdg
zK(DpM?xc)=rgQ1N29Pe}SU9-DjGZpIIKv0Y8`q%p`p at U(=~}GvZRI)!^?Yb{XEtz&
zC(R%c=H$2il+_%4lJ!D0=vA=Aps50AAoxN|fsXzO5T9VIhiIwjZ*OQjW7mjMbrf(<
z0mN7;g3_ZPOCKR<E|Hm%;IYMU%Op|Cv;ho4#9**(A~>HIg0{30Yz_MNp!*;1+=wuF
zLXE#>L at Jg_5mbZL{%<Gx+ZA+bg4zV0#mr|}TzQ4$yFVTEJd~U2yyjnjJbo_?r$>`d
z<+%2;1BGzylg0cNs{BkEwg<Je;7_$nItP?{^=epqA0fHa?^c$3(Jio52-eLK1Ra+D
zTQY(YIxayly!LtJCk|OIcu|aOp0vNTCSvWq#(80yp|dJ*K;SA4pSQBVj#{*h-1bPy
zEBE2C5 at e+heG^+bfO+x*5A9OZdSVN&s*y)$=E49m)v{nun;BW(##fMdc*OO9;4`jP
zFO3fAcp+Qym$*uD?JHvzT6-{9VieSqOkp5GP*M%YpeL0Z(gvE;X-`$(w1CUUDV+m;
z(VHdOWisRHB7*@_?36j`a7>O$Z#6RGnAnY17c}esYt)OMyV at aU?tzE7{e-4rcg4J{
z*r1Ej<idYI1Y&%q!1Z<EUgTK4_50^_s-MW^q~_qSLXKbYguHC|Z1MdzxNvKu%gF(T
zu^HYhvTT?@<GW}Mk|YhAkj+}H4L~}opAOEFVPLYBR2#pTI7*R+j+C)c;=92GUr1Jx
z-(Tth2fRl2;=93_B7gWFz#4EMbZ*bmEX%%i>s>L!;Bvj6p(3?088D8-*9lB6#Xq%B
z at _2OMMztzc=Bu63ZVQ-{-7QQY#ewo-hFZ2480l&Dh9vHZ*D&@a%&=@h2!NqJaD?hQ
z-~wf@#sq38GdK~C_!ph4y;R at IqYX_*vcAZbpvHyRX8285{p`mk at o+O9@3=9o0a@$b
z;u{ad8&TFin;E+%Gn at Xytm&AXAV@~!zb`FL&jVCCgVb6B$scCeaN3|9(`W<#Zi^XJ
zfi at m+mlg~efDx$RipDmpfyrWnMnEJFY|nv;U&3OsVs)r?a(pJ|)7=e9?@+>Uf&lvW
ztm2;KL5#puIxKWTK9|B3XMnxX&*VDBJS_qvjoH&Rg(r9Q3R#p<AyspFeUHr#8qSwx
zlDXQ|6ExtfcUgn7Q(0NF^mp*xR(V3LX2eW3U+3!zW7zD#U$n$HCD%lg{II|;y=l-<
zG~wV!Z%3imJvUv2k9E+~?{Dnk$w(HzIS?3 at 1@<ABb&Vj`frCdB#>`LXRdP7NXy+gG
z{OB{evByhkI`}N{F_4uE*5h6e*=PN9vS9w;Z%|F at EG5X%d0p0?k}zOV=hYrx)z)8_
zh`FOlW=@YI^R9Ys6?<tLHS9xH=xSU?f)imD1^Pq5WSc0{p(G5F@}tru0(H+Btm^Kg
z^r1Bl5K-d=^YB?5;`KLn`|JnSDsW7UR)z%KZn0ZOrEzrMSiX*B^#8tc$Mny7k2)n7
z)wr%YnbMH6)E at P4JrwEwjR^ndAsfAXz=wK<WD@}l at Y}VwXa#=Lv5j-*VANUq0$cI3
z<801T;WwH-WvahhTPAX;cK|gdB;Ln9S>25ZiPpQ*D3^9mH0wa4kqiw369aXx=05Dz
zoPetA7T?6NHSgc$4qPK+<N;mc3?h at NNm78*`6wNy{{j<gdaAc0uwxHm(~qHb2<xuV
zQGVJiW-{Y9!RRHn at rMM~vQ^vNwIpEJSdmwmh4AySE?8ZywDRTywjx32-ka-{yG?|T
zC7KN0y}-KO{*r{pP at ZxQE#V6&foRONkS85z7&lc9Iu8Irih<fF|10>(b~E51 at BeBf
z;BB at s1jeL#WdegfMmrFGmJ8yJ$tAsq9Yn8~PqCF(c?9DUht-4CR`D|;b&=_ReyV7<
zhOu3)kz7JHFwgspS{jWNEM9cV%BuTsyagRLTynCEW{#}cbUXo2%QYO{Fq(J~F3EAM
z<qbrlL3}S?(9Oh;q(%I<iTq1<?56h}@NQ4sig&^`9mYsTX-va{LG2_^;!7$EnGuV+
zgWr}0sOfE8v|B^)f_$H7o36IK;Qw?AhY at R31v5m((W8YNyNK8v6$5ooDP~S25Z_yV
z at AarVD=|#(OkA*tVULZgb!$n^Ft>Q?Y!CuW0h;4eH4&~Ku#q*j0aog{jega|53Lm>
zh-WpvruN+uF+yI3*h}isyzVVJ#Wb%9yd`KIU+3`s$er&3rvw&cw at F_R6)GsZ=DrDw
z?6%@&-ABDs9hwYRgQ^%<Ri$TY87;-jti)D6SSBU#)0`+mqauP$Oqxo`OK-D6=Ow5b
z)N82=t2gyy#2+(r8gDM*x7)HX2&p<izqd*kmTC)ff$pP#J2Hj?MWPhuxqvk+fHgd6
zAeh-_J{|>$07wL at S8ADxs@A6l1_*R5a_d5-Wc<3vc&=7Pz}llw=f!tsbS1AE_*;M9
z?D&)jRoeMQi(I)a(e%7qj^)Ochls$gMAaMCy6$WBu0#anrt<hjCEC_4T<eB0%8xs=
z!FCt%SR@$pRQZ7xzOvzP5{KzXNN|%f&+K4MT{uE9|2wELs at q2;{V|mD5(Aysq9BD_
zMR&mZ=k%}gcSs;uiWN%`k==NYl at P@Z0;-&L9mC`i|6RV&z~Z>dm_*x#nZ=Gc0s68W
zN}}oM76EdEv|MGZ2*w!24<_LWozcu&j*fb~mb0*#@AL+Xca?9;*`jZ87NvAg%}5o+
zs*;mIwac9Y5;vn=MlqWnR#&2~F>1CyhY<vf20T9&FRYZN$fls~0p&#yIZu8k36+T9
zdOJrl?fDCdRi<K3L$G`{f9E=}%Tr%)%N?*PL(bw5nId%v4fv!1rsc#rDO)Mg)U<&~
zK>|pK6L4 at ytsxpaI`iyxpkQ*ZQjUpxUEs3|Jjkw-o at Ili(&8F(!#|<ccs;?#Dge7q
z(vj8_^ynu1C_G3y!)Gn+_l*3lf2F|>q{hUOq0b>y5NWj!b!U~*{YAL8d2Ua)Gexy_
z6S7)*G4aUl7QB`*klRKJH#?20FY}iO8M9HV7^`TA573{Alup(wBFcqr at kBI<&CF>S
z0C~V8LQbMl1fFBZ2c6>lDT)Sf<{=- at A6vjM(UBJB&tBZQD6hOdCK7qOb_5WKdJiG^
zH#j&8!CRvx-!3+xp6%-do2hYII0csTF-B$nl!)}sX=$XiQT&i_BegPL9d#Tc*HIjD
z7--{KTV{oprgLQrcy}3dM>dM;MSVGNCKR(^hhx4#=GG0EbncDoRf-Jt2V*3MYQv2H
z?Upy~Bxo&Jr3u^s1%<Yzjnk;wXqk?h!EPr8i-j|34HU;73K1ZE^~EVy3a>-)!wDMp
zQ&xsYiRVXjqj#|TMOY%`lsml$cMq1YU0cnr5b$N_9Z4R;pNcooS`5?M at ORMLNkSr8
zhMrZ)HqpVj=6bT(G at pNdqp-mR;j{d`NY$+CR1VN at V&^8<Ck!axxD!^){R_wI$s#Kk
zLN}Yq{EK)Pu%B^u9$4%JDPI|9H`&uF8~X5gE6t0yvM$t_$PMT$+oSnK@=k2%K(#qy
zy<0GMTvFV;uH6l8Y;!zvLfi-N5OVv$w;&)?@`HU>n5GXln=C$u&vWgA)DaPDdZ3$@
zc18S|N04^Z*jq2gnnWO)f=bT8>x`c6s_lw78u%Slb)b6LRIHV|%<tWpzc9>RZHF#{
z(>1j2i9PxC4iHe^{ntn_%Z1hMVheH}7pBUUE!^(>FCm2OtUq5q>h?h5nSLqYwPtzy
z7E#>mRU3L&?2>AmSYl6jGwA7Io;}}Xq3~&b2UDynHr;yXFcu;zv&S9#b%7&nTi&fd
z`G24h`f#qP_v+!Gi~xguR<IsxZKC_0Fy^$Sa+03S7E~{9v(qJE1_cw4G)Z^`bGgnd
z%M8_|tuNQj<*R=Q8=ON{<``8`j;<0b8wGbr2_H=NpI#|$r^N23-Bh`KN7H1EuF<tn
z4#gs1P3FS&uB at oWoPscoyW}2&sb?IypTyr$=H$@)2D18{EmQ`jCgEIuLR4~!^nGaf
z6jJ$o5_^_vq7@*&CegI<7Jl+s$jjXsKd3>A!6Ro{;X;ndi-~|+O|hWoWGof68Bt8_
z-i_`9Z0v428OPP9Ah;zm?!IZr9C6u3fRiv*RJ=~zx4_>#M*a+ua)7ZT$4*)!Yu8DY
zymo0z{l)AThz(j?31vkrP-X0Fk%(|i<<^lHxb6+--sdN+DHs$>|3U{{0~v>xK~vT~
z at bgeRZIXKq^;!0YvShih4hBh7iQ1}{$xr~M9cUoG2zu=V*cQ`B!G8Vn!zYb48mSIR
zZPvDd=u~(v9H+ at 1>g(-2e`SaPKhgy^(JA(2wH2cJ&0HJV<w_Hx(iO+~87;2H->n|v
zOQVGZr~)1h3f-M2VHmaCml`2#>P1ue1B}6ph}p){E4X4M`l2LC|Il6&js6&O!N1e8
z%b<Hd0e$&=iD^&<?3K=SLg+CE#GPI!m`>+=F}^=5zSl<mAbH5fpEBtYHlj at z5#q#g
z6(p-uX7P?4&NfV826=^NQ|yau5JI6N)^`QSy*WHU7h_kI`_2xT_xD~@`7Gi7UveIa
zAoJ%<J!^1$YMN~ex056Azvy-Tj_^VOsoO&-fr0e)O!x8l-IVI*EQg0dv&@rmaY-f1
zeaxHA=8#Hrhnj1T1iA*ZCb8BxKn!c=eJ7b~n$ZowkIrXc9i{}PO?QXvk&TFEskTgt
z(LbjpU1g<fYzNbx^)6%ZD)3~2A}u7AVO6Q1F_hV$m+JQ&x8t+ZQv!onAayd!Z`U0Z
z+ihEm(45%m>ULtRB7j|g*JtC?OAc>k=zTuW7A{5fE*FAs_qJs1lIS=?6_x3+m543P
z3^1KbwfD-Kl9D6t;y4~~$`>V443hv&nipp1q at U1wDejKyVN_~HVS>^s(*8Bfn|E|t
zR)dhkCW!CO?$IXkb#mFL;_&I0Gv*R>MZsA?8Q%{f#wzV#hcbqTD4`<f?}XnW?T)eE
zW1tT~oDHUjRikHX_i{`Cq0EW0l4q{lY2Av~-LY*rDY3^7ZJPrMLuGt9k7%!sV!b&b
zqD-JllO9G0P#L52vu-3KgP=C&*8#dwJ3M?5c1ASqbKGad0F<IA*(Y}nUjq(S{^OWS
zgGpbHUBQvx_qhA;jHEe@^c>G|1%&+%rp#y&t<pPzuM3%3KcsM+wPkt{fyU!jqDtEg
z{?w?@7nFAuJayhw at MTbIA>;Ie6CE@;UAqs!u3H})dMNdZbmz+cd%N2M)FLPrend8F
z*h_b`?Z})*+QD;*Iq~}rY;f+iF_Km#4a!_$#0)Qv?`kb at bsb(lOWV>pje2Gc>j-25
znGPv?**!;P18rK?a3@{Vz&-cwH4pWm#0%pRDKf7Vw>8N27_oZ81DT=CnLv+^_?xhT
zY%c2Zt{2%gaUA!~a#IYlDQFHV2x4y>2c2N4_~ZzMWyk&?gCMU#>4>#IgbNaKK1{~z
zgf=5rtTCd_AgG7{$jLaERA4U3P<Ru)ng;pwxLg{S!UyJURBfK%1bWoo$N7h<N1nE@
z0T{9><@vemqVQT`;DB!ZA~0@%%8p<7Nb;UrlsOBQzbvxqMjhf5KmljN_Qk$8=n{I1
z>0RWbZ?T2OoN=%Zl_0rQ=?)Y{DoU8c^KV?(4ts~kHJG8J&R?W=qk*54zA!c#e}H(D
z`AU%vGHBnXjG}FI6W|%NCkTNEj2s9i2 at TvIgm&Gq+H^7dw+gw6O;S(G5W&8|o4wCR
zdWUAi#tF#f3oQW<yAdp2gPb}LG37_bK3R#}Y4(gk(7Vfsy}eNkblRhhL)O^JG;IHS
z?=gbVFSTcU1?$wSbvWW~TB1b3>syVPVNHXQDJ$~HN*0Qt+U at e*nyVYiQ|;C;gwG5R
zCxqszHq=ejR9^8sYwb&PSPz#zVC?M{fkCGL?~+o5cX89ZCNK|XZex_Z1DXRdn;a at s
zp}r8l&k&5$swVcP+QSo!I`kSKwptcFrlMOqW{KQf)9SS>QMQi{Z&%w7zsm|8%29MK
zX5Xl^C^$Pe4Y3(3SE+y(iPpYhpSmbchp1|0lyhPr_tWM`2(H`1il}4|OU!y>(K3Vo
z|AVE~$;UB)qZvP?j}0_UAXhs%IK2s1d99CVDmhJqoeKe0!(Giv81F|>Vre8)s_hbo
z8N at f?IYW{4eqZ<Y#I!mtg6lbk8%ERwBss58V5IiFg?XUrF-!426#QsWRK~NT01$<6
z`&5I<fQ(x;&Bsk8EC!0)n!R-?2|kH9ZoBR8Or9d+LsDO%qA4T?lW^%EK%XjMOm60w
zVH%VoXYF<(*eT62e>T<%sub~iuBGWi^>25pH at KGaheu756MJJsUp_*^`dus(i^8BL
z%}sac|MMJprrnAQT_A{(JgYtBD2wE$N<4&MH5?~)N?auC at y)t at +m<)_3m4Q}9{koz
zgSRz4LEh52ZUeDRDSu at hN10TG;^!uV($ZTwEzCbWOkQG<oAc7KQ|<zVdFMz7ygQif
zL#|8>xd;xW&dc(EXjt8myo+o8U&>v8dTHE7m^d-#4UZsOc1Iueb?^&$f}9#4$c)x^
z%(mq-Hga#eIN)_uQYmWsWetB5 at 9T8PL$qX9poO$UZa)-xrXTEur)cn?N|!i|`@%H?
z_j)SCJ6e9CW*P!OdmHB{%OTA5wB`AdT3!zUN++JKW*PnRW$rw$FW-`9z|h!i+z1y@
z-9eAZGuM8_#O;zVs6m<G%25&ANE=Tz%@De7fuYxDw+Gn*K~-1}yR6lI+Blz at U$EYC
z(3#BX$%x at _JH5`8;W}@;^c-(F#zCBxEBzDYho`y+goRg8q2=#Gir}I#r|p&oV2Eyg
zqK%YD(-IBFJw~- at zSvce=+*wK7>_%a^G-aycs_o$=Ow%G2bDvOIx93&!@+7sX`dP~
zQ%=`$R313(ybEWz at cI=6gEc%pIF}$t4O|Djaoe8`7deX<!!{OD1MO;p+Mo(P)qI%z
zAtSr(Ox+ya`tJzMFUSUg*fETGZ9N5DPrv~d^t}||A3d;IYAv43s+pRo+hrBqn$HsH
z1PP-mTykd&tv~_YE}0edH8_kbV>G3_QpdGbi;*hk-)6Fj!DF8*#ae at xNNu@EG!i1x
z3LlA;mJ8RcarLNGaqiM+e;U_#%@bSsxMSIXMYYoa2eG18IE_rcz4LKxoi!qG93vE-
z7PP4!8*Ks}yCrt{U1{n9oSpwQyD!~BAz33HRD^<V;IWKr?d0rm-y+i>sFrvxw%!9I
zId7Tdp&LL`$A>e!)s%SGOCUV-%fRubN2ef3N71|KWNqZN=he<Cr!z~XtM7blfCIX;
zd at 2L?ZWTV%RMMM75 at Y-h)wBoF;bMmUJ7~v9Z+<~F(p|-c`{K(j<T0FE0*72WtWPap
zE*Vv@@lF#x?C6?_0`u7w at H-&Zab at v)r-M*%VDa0zeKn98(i2x|eo)W7G-|N&rh~F(
z{QcP*K*HlFTcN8K*|VZM)e+RPZE at gSH6oV35{G{JpeRnFc?jE*euo^+G^Pg&f~-?Q
zh!2UF<s_$yx!<rWv4c^j*DSNXS1?g#4OJ2t>BDLZT^ISwGjnIX?!QpWED5k#(#Q at 1
z40;Pz^NB2BBNT{g&H1FmpaRIaX>mq!mqo2KUBH{tM22Oi0r^mXSj3_IwpmRLoDBNF
z-7f+Qdo;x&&pC#%<=QI8f>VJ&zT{$w^&?!kUVK3U2n_%xsO9{-Im1gnv|1_1&2Sb?
z%z$5<=k1AKhPxP-aXQXMVXuUK*Gl`As=*-RSV|J{P$$B2fJ<);H;}CKZ$yrj0Wm<p
ziBv^hjj;{#;X-@^Gff8^L&@Cn7Rzjt+;4A?w7q}4$>Q7lo_T=V9!q%76TmP_6kDj*
zNYP{fIgcRvV8_%5{Y|cX?sH`k!84!NDS-#fYbTq#4*juEqmMN8453T;m~~kr^-cz`
zB#o4_Kx@}`26Hfs{-3<m2ABRWK^`65Vmz4DP<7LjX7`12{qsA{Z<N(Q=V?WD-&i=Y
zozz+cc-~lXI`BT8Br}JC{jqktYD&wAB$K!w8q*Zgg-LUu2U2j72{^HGu;-tOKE|jv
z^eoK<6X=ge0FKEhHZf+_Efn%No<4D;*y)U#lb@%nz(fltaS#**lhHSh!qcmX=(>K5
z?9F21Zwp~E|J#7tENiU3gbOI3oz&)brncy8?WoWFxr8$O`Xn}fPPTZC(p=B4zh8SO
z&c+f!dK38RRmqnIP>Ib$$D#U(cfIE`o_Hc>%Th at Zom?2`vB-PzDu$K#eJnwI+pUmA
zg>2P2o9m}qS=Cd9=hbr%A3`cqGcvjpLYa$_-O2brYNUIo;>n_eD6KYC{0{Nc`9M}_
z|LY8h;=M}5BM4)lt+OGlkOlBDgI>T`V&>d2=T>>l1Rfk>WVW$jWNJbSOP;dayOf}s
z=_m4(aeHpTVlaGNt=#^@CJTzE-huQEZG3H*0ZI<!0Mu%#5s<Q9fM4L-Zt4)l_P?gw
zi$a<$ri_RuyVCp#^N%$6|9GV2c??N=4!^>qKrE$P1Oc<Gldy&N@)w3q(~yh4^vnQ6
zecFXb#tE{Mh9FEUsUJZEO#2O!cufHai_MghsTHw$sd*A+4GeHd at U1(OU~><bQyb=l
zaoUuAU;<~)TTL1i$Q1$c5Rh1aZsUn<=c_jbkZQBw;|DN>aaDv!hqRx&566va?wlcP
zVrD-I(<%|!7>@5 at zYjeAp{QEueGhB>h|iiGqtdR3EC!GuybA$;J>|4DdAG2voCM$z
z8S5$x6TfbVmu=9hk4Iyb&Lxls>fk^;H|j(veX^AtQLv31zNf&$qTwB|vs1q+q5CSC
z<{G>z-^w$^&suucTwz89*$(B6Ad^tJegL01YdC^#lN}rIshd|Ujp~?<pZ%%zIXYA<
zk&S%F?%)jB4xm~VF3M<d71ksIS?DgJb|^wqk<YLKu3x|Y@#!Q}@^$@ILT%UyQD3Vp
zhqzAaE^kq#cCgFaR)o3F)|a2v;avvn97HmrC`-BP3#1Z=3xN&*dEaFv*cRUi{B~qZ
zdK?{q#bgdYM%n%mzOKriG`^MM9j at 0tU0Q7h{4k<gjcZb8Vo#cTc3e3AeyL08_)vIM
zk+T8Bp@&j>GhD3yB&;9fL>duF8Diwbfvo6zft%TJ%$OI`dOB4#pIHK2x8AI$UsgOv
zPKvzl at WO-76p;o1Cv#RrCI3T&VnCXhIk#6Sj$u7}*Bol at A#UnW`u2~Za3*(FbQMl{
z)+RZs<QFF#$Qgh1Uwc$Z97*_Bhp(^8H|kjAduq`WN8=t9zumuo%GW)YH+n!9>npA8
zh5Ix_&bvW-;i|piL-FX*0O$Pc8 at h^$_aE+&fHu~bAUUisM`Y^knN~hIc|8kXfN@%*
zq=}${GT2~hmir-Nq^^ix%o?09|CM+`hkQY)=s?gqw1}7iZIj<>?CI|}CH0(nK7`z|
zuvNv$j0LN8n8_)fovaedmC9<M?6dR<hi`fWpqcQbaF^AcRnkv=QE;!Q$EC at 77bH`T
zPCQZ38x&W8y`1{T#JD)p+O2*kIHeXa1DmmEF-F!ZoI7c4W4PN4r@`54aaCJ18ce>t
z8-+MXAdDiI<GId*gu?_2`l>;Lj+~DkNMkbfU7D@&1b-1%;a~)p&aX?~DymIW)Cp}p
zG<&&FXjBpwg+Dv6ov#%2hsZDw35iQKX%$DJZEZ<SK$eI3w}H^((AXFo#Bf<~|C#0`
zMOPCBJ_kT1 at Zh$^3g#>wzD7`HQ<8tb`}++4$cwa3sxuCNeLEm6P`5a2 at GF|oM{e4+
zu(X>uNY8jRh~DDrscF06Rfc9c(FCdi%5)i0Vv)36f3?;98inuQx5Lk=9Bwj6!m==b
zw2z6${WOMC##bR}%osa<5OPIcf83!wVwtLjMpkSGRF=aoRF<5I3CB$j9f^fV_>|^c
z0#=g}jqyp5XePHIsNnI6`nm7VFlAh+(fM^w_U_s<U&PU*yj#ezu3&+KYe9Y}+Y-Vd
z_N4HV^#BB^mwPcrLfWXi)(WJIMHAA9Sfn?Zu=sgO)0m475Bv1#qIRV4?M%SL&zV9w
zAiPF`D58_Wg?}-gK!3=d*hnK|BRb2+Tb$9*COHx(W&e1&SfU+>rQZq%#{UkGR4C}N
zat_?s$|!lQI;3gJAXn?^!G)Y=lXn8Mj1*oFCCXM?kdAMi<rj=%C&et6ez{Wnx>%zS
z)@8Y8=0|}Pk(}e*9va0rX2t|Ojc*r9!ZS7}*i=J6P>IR>F#}F^9UYVRx#&{v2wrv^
zGw-VklQt=clEftYg_ at RX?-j0YJFv!sPhU-wquyacasmxqrWs5bu7V)qGXShFH{#U@
zD^GVLxGOpqUU*9 at bEIhoD;`N!OO>@2ol1JE<C;nESmG8Igj1zJZGGgYc<<x$+sT2s
z^x&L!eJ4QmG)_SdY~VcjmRw4*D~7s&)HZs$NY84@)x!inB3b?WJDfT?+XwY7X|Dkc
ziLw%Z;#iZ- at _F&<vdPE%rct!1-V)6gN?NeJadV`5qi2^u;LNElpc|tT91Kf#<MuF1
zPi^UTUM1$lL&~Rt`5{~b0Hmr?ObV1NMJN7QYstY5!0Up4^NF28vJuJ_P%Fa>89anV
z5H1HJH(J(|$O#~|-Hcx2^#0E~zSo0EfJSvhl at Q`>9CeBVZAZnQI$A|&vT at taW4qex
z0u5?K7g!FAOu?E2?Q2SqWr)jdt`yJ(q7dehv72(eVSQFavdOStOfkz$K44q_iK-4Q
z7NNy>N00(+2gclo5Cgrm_lpkganSzNxo3^SgpxNjr>|dZ87Prkv7&@A7ylqOm4%eS
zFG<UfP68M4fef;=nCjyezPbZ+dfBjHKa+xe*{p-N8DpQ>2;DMV>byssu4ZaYd`3<=
zOFVx>G`C$NZaBXv6i>PzLsgVj3xL3r?!k%IDo>QYOtZ{{0f0Y1hrx#sX$dgsq^zM1
z57CLSM*SBeI+8|`)lb7-LdMCg56aiHBp}etbVZ&Tbn#LG#_&PxN=VlFNb)Uz$UM${
zKtz_H55Wy_+ul(m_({*`8`*+Ca85z*h1>ZF7|mX->z(5T;T`8GIvFmZ8<7ji0l>Un
zp2zd><x3T;PVzP<VdhJ$afAO%1=dH;{ct;}Q=$kks|U+zhNA%SErc>H9GzS*X)6k1
zP<;C82I9Wdx;mp26%G~#!lj!C*__WGm{xJ-V8PfbucUDn^BM|N-DTD9_C)0MrK2C|
zP0J4Pc?{cOD}OL!|0TEXAase(|BIg^Xx7}mi^MsKOgCtmK6-#r1s2!YH5>m}NJqi$
z%0z(;vbIV4BgZaQ{itXiWvR(W9_jJT64m>Cya8a`m^G~kTBb{GU6J^|Zn7j<<*md#
zjjoIe{<f99?!dx6(>TUmAmjl at Df@jmwRvNyU8)^J%Zy-}Q~+0$>J3nO at sFiL$nd!u
zwmVG_A!qA}<j`PwI9C0Am*D at y0}jHQtbdgp*+0Vs!+>pFa5GyosqjSO;F4}MMnC3y
zo+0Y~xc00A)#0CWx+_TCEStK0Da$6 at x^b>o;Qfh}xi7wD=XbD)*lc~ouq)^0%ZJw$
ztl9p#0{Jr5O&puu#anLuD9_Y6Q=bD at 9+W@<S}fIAp)owtXHg%`e7Grn88Hb8GT+oK
zSiP4qIJC|YI--Cak2*P#BOE$hjd;&*_+P*xia9tfUMSz5<WP-OVS^<GN^94Oj^Kgi
zw{R>knJivqS#vQ-2ejp2uv_lP<GKc5H`dr3ga_aHnakvjaVGKAh5aLBB~gaZrH7H`
zVf;AoasSi7-yOa>-I9?5LX#HiU^a^tS6Isg(kT1CQ1)E~HS*K3Jg}HNLbjXvt9>lw
z=0zG;w;;>Sh&Dg- at 6f}++SQZj!3a_fO2VIrs(Y!+*NFYuB&Rl|-*<<m7AOrP0AYUO
z;VV~rG2Hw-K_D07-=7ED|J`dUM$@>~P!s!?w=0h7I*vWlHqKkE(Ab*()zndb2{r^Q
zg_59i1A0iiuH&(xPFFH(a>Bba{j=_338JBL&c39Ur(_XQr!7qAAc0`=_?i((&uRv*
z)$!<-vFDL<!1rl}tw~Jh6psq=kYtI|1DoC5+Xx->Ti-f4W>#Y>#7_PO16yZmd(r;K
z6)dyQLF3x)dgPrV$f1x0io?<JK*Ki=pERs09vv_d at lqpgy{ikCwnwP at 8#^U|H9uIH
z{JqXKN(C9mXBzsrQ%Rtqxb*xp)2s`#R<MS4mA=S%G#?w`A|E+6Tm4&7r`9Kck(k><
z?s8Dpjg at a!#LTJGbD8dWVpb}rmXG(<jw653KhRBLa-LZ{-}IUug`G5buLC9&&dS6F
z^nyen at 1g#SS$f}06q63>tKy>ab(JJNAj9xcmI}UP*4=?Y0r-_CQc at iaQoh&Z at t?@~
zOSrO at f~6w$N<4FSs!M1<?7GNvoL;8jl)p4H0k1pN+ysKH$stg!NH&0SbBvaNHf<{(
zr-E4&Toi<?w0X9}M^Pq#8*)z?->sp6R&^jV55`r1y1wiTwmq!CwZ5uTwNbR7{TDLM
z+#~_Tks9*&@hueS7-13xB-+s!Y;xg|Yp41$*X|*>ecVU`U&BO3YAjCfnbhxDQ>{ps
zr#e%=zYmG<m}F~Q?y(Xf_R`B;jr}$4YnEvu%KrGF|3!4dGId8hPS`6y)r-CJ6YJ0^
zS!lc-8EmZ|FoI?C+k+=eO7Tjm1!~+%T%Ix^RpBkF(VX~RqGAyUdjRRv=eT~Q|9{x2
zL at r+KsICADomOc4e;;$ZR2qRv>KxlJ9Ap7#?0ax-?GUhnvPAw0=>Q9RX_+eVQLjsN
zj&SpX8?T4OUi9ZeBI at NZw?f%hhI1~NTzY9FF5^`|;om>gz4C!J2)+>cm8&%UBXX}C
z!&b?{1S}vc!vTs1HC3}vZ^FaI(d!bwv~q^o at 0cNPAgVIqA(7 at eQIDSlt{(kkU{LT1
zqSj_ZvQj1thjp5fLm!Q=@_o#QTsCP>$<Xq*PuKiECzw{YR1cASTqVWCYim-oQ_<>m
ziiSUiigEG7Krp!>Gg?M|?<b2U4%(t2J`*xB^Z?Yfw(aqs3!}_ye at Vg8=sghFK<XVv
zGJm}1;d3vQiaBW6#oK!FQn&W4v2hQ*XM3tlL*r2#zue3e)NW|>;D^%yZMU1uR$vxi
z&Uka=tr?!eugJtRg+NXUmz+f at Wtdv%-xRq}HV&Fm*BD_Iu(J{X17rkqjb5zqXC+3`
z^^8!10{hv9|Aj~hQ}TZZ0mPbb3i&Ks*8VlTUltuTVBkWh(t~SFRbJD3+gybN$SC@}
zXcee$F0-)SegoJO%D<6+`sZn`^Wtg<QxQVKk=KewsKSDAuL`2hP1uME>m(rzjze%4
zvOY%B)3SR7F6On9@{sxH%aP8_CVbA!8G}tR*2w?a9GR;G$!J+4c7RJPR2`mr?2-jH
z8T}Mt-Gy!@-It7EvYXccO#fd;X~NP&^`qgx%v;_N1BCp*PIWw?AU(1Sy`508Ns$PN
zl{R!r^Vb3+j19qPg;aHjuxk2{^R-+(g7`1wMZ+(C#5|gD;%p0Bs}8eU9n_ci^7DVM
zB|2wYE5V*%Stpl}#WFx{B&-KqOPJrbzkgQ!%-$>2oi=TReGK`%$7yLq_~UAjWa;x$
z0|PNnwFrrCw}}or&+H7WO0%&nD;?B6$H at kS)p^A#Q<D*cemsNICazcV!fFV_xlcQz
z_?lT6Msn}vzOE+)@Y0+{n at a%}uSQfV(a!w|CqB~md+OSe%9|X4I>b^Q;cN81sx?cp
zYVA{~_C5I(NibR7fO7!xG}Rs-ri at mn5-cYFlJO@0 at bbw&D6XlBw&_8cr#u|#Z4bq8
zL*phsZ0Suk!;$KKditKOHVbbjHxzvtbMgh5^}o=v{to1~UeG*cic2u-UZCeLC#u&Q
zK$4gUJ?qWxZFOCyGv2Z;Nzlg1Kh(CkJCN%)86KR3n`dEMjwGnt4adH~k1cm&Mi<F~
zAbr^>XIpHFMRguUc>#C7NN$Nqv_dPl;N?x?H<6>ed7jo{6Bg7)&zYyijt1?(esz4L
z*id7Qx^8q;3y)3S_zv5>|0A~Ej7|))+6(t(KI?G}r$y~*m(b|=g-tHoWkwW9NHQPt
zgR_Y4!nfpEgFI58T~NJEFI`rT!^<z!#$hkbanF}?%MdNEY8H)C;UXbXV^@xE^rI=K
zS)=Ixb at KpDa}g&aRo)kMN;~XWXCkV$D5TmvG$WuRCu at foIj~Bz?bbO*(kB5 at -{yW`
zVM-i5-$489wt>n%v6mj at tTHL*thz6G0*0#cC+}T>d{5rk?B-F?rexcDBEK0vrxwc=
z_*}^~M*6Q!HNcE#xRTSuw-^V~%p4MY)7xt+f at d_jUyKTbv+6c3^PlUL7;<ZVq<)0p
zx=44PeEo<c at cBCOVAl&21^$tE&97!DW)GkdK%>~y$P%Fow|rr*&+L6vZ7)ls5kKwR
zA?soso83E?h0fWTp3uZ+uQyx@^$;H)4*9a))^&yB{o4z}T<juYGfv_gi4ee}UOAvb
zYvVlmj=t`czCw2#f7s6kvY3(y7wNH_-Pa?BWZ_KCIB0PyScr3Q*=y^P6 at pkJX0-<$
zLUiJCX5V$Z-4sXP-TkFuaABTMHE31dZ)iHnadZfQA*OBZr01m61WDBxiuI^g0`p_N
zA*F(})-GW~uanJgKj7L;i~^qu-~*XkA?8B(<Td-QT8}^Lil&p at sbVN9u(3IzR&UFD
zBI>}kYJFD6sy|yqRMcpvU}7*hDWw!@hW7LzEfDi-pZ+Hm9y*GlQQ>d7-sMrNWFIul
zQ+xPZ1khS{aagg{Jm`wdSnE8lKoTL1oFX92Tlfv6g((k{y at cm<HPhBD*B_|ItTB`q
z$!^~d$iclKGA-D};o|49a098MXxfq6tIH?Lg65O2 at qxa;vNp>T;LW7md7a<c1B_a|
zx}G+*VSM-=b`r!$zqVZZ(=^oNt>&IvNcpomUCR1G_?q(U%t1#t{vxOfd*(@c6QgwO
z(PVEWhEv^e(4KQ;LzDLw7#q);x_Pr|LAOEb9#J3PgO_(}UVPcBE2*TG!Bd$iaenbD
zF~3Q%pfuY!?9FXqVN7EnP#&^ScHN#>6}4YDMC=(P0Lv(!T~j;- at 9AQEOB-P9_50oE
zmK4C#31bp;Zkv)i0#By1V2?(zC^)>G&8tmiU9NEjWl-s!CcY)~dG119<?`#MhL<Qu
zRy{+bC+y*RXY?#ifw>Z^dXwFN+65Jb at A$Q9X7 at cwh#*I|taPaN0+y!yaNeZ#&W%=0
zzVIMOFM7fpr0KiR^0%4k1rfZ1U3+d2{5Q_amGm&)UhAHKF7}PtW1^7Rbi8G#1f$^l
zj|5q;ji>zoA>!w`j5j&J-qgQSM1D^^oVa0UUVMy~zrKIfcu}Cd^RjlommlQDUgl}S
zUG#FGwMC}oGi6u8pq}#R1dr|({Q3}?*Vbd{?feQnO~#sH33KIfS}4EBh*v8TY?X(8
z>Raf|Zs1pTn}-LqTQcR1i|Z>8eNzS;+J8lvc;P!Zp1wEJ=Uo1w59!AF>)drb+F3W)
z+j%eGof^mq+h!?TsRH$H<}0Tp9K#R(LgSJ+)oRf2%u#FVKB2Por98U)Sm_)>fbbYS
z2v?GhHIB;BJ_qbukyR#*XiWM8<EmI&xhVRV2 at X*$+cn7TLeWWjV>s`sk06B5>ne}7
zhb<o6x1_LO{18HCILiRKidyf4)~J}y!d2~Ule)e(%bg+Gqmo`=i)D*4wLIHG{2b&N
zEQVWFrqo)H(qDK*PptlfPNJX-YhKeN`LIYJoHpJSSRb3Exlm{oID!kEvt9$JTRPza
z^S1wx-5=+wU?wur>0oYVp#vO}%$9AmsTFzhqmRHTm~`u`MU;y?$Ka<ukspe-<0u9K
z0D^L1ib&jREMK}h>E9xx03u8Mw8q28yP}EjA`u93?u at hT`9l2S!bvDG%dz4_aBAGd
z9s!OG2w!>4hDZ_?^!?H245N8IsOn>JoTwz*7UrYbftGf|d})%hL9Tz2PT}hRK_2lM
zbj~vre4n_|4pK~RUGHEaU2RPq5cxButdvSDeL%uVogcE;GRuzadP~wLQQbEBV{+Zv
z*;@4%QK&wvOZ#(x-?B}~#2o7svv3phKJy&)wfis4rlZ^CVWWc(5<PI|5eRz|gfB;I
zSg>I+g3Rf(S9<e0iEC*n(dbT=T_FSR!0iYr^G5XPGb3 at 98=(P at -7E!>l{r~_^q^CB
zES;2X`87Tmx#%?J<LvSNJ4mrtIqn{`hOuGyyDtm4=z-epC6h@@*5yrb06z^BqUeia
z04$(u0QUpty(#E at 4@nVF5*t?)s2P^jyk*UNNSvN+{4SF^I&M)T at _%E{yC^#)vR;(Q
z1u`E)X4JgYxv}c{YiHN4JMAwTn7U)UXr9zY;Py}b3Sp8%5F2crP#B9(>KxXa*LmFJ
z`k|T%xaIYLo!cH>2_O0vaj3QdD?Nf^j<Y&*&&tUc%kk10b`oR|as)IADlHA7fg4il
z*APZn|4Y_rhPeQXG$0?KL}EdyY1+%fzKORN;xiuH9j_h3Z8^q_3$bvxSG*d^q0C9*
zB~m at dGNH$mbzgMEW+-?{p&G;Tpv!|NsdX;aB5OO5kpSGpWkt~F8 at 9gv81xe;KgXB<
zj)NKHIpR<QC$T$(>(*2;=G9j(vhttZo6z+ibvQC+2F`{N5hahCi&M1&aXh-PIOp6%
zvoIlA1e<it^<<)=gXn|FrANIn>auHSPIf<;s*>sA_a?6W!<(q-QaW9bBH)o1W;Gv?
z?IA&F)L5mAR;IpCLv<bHJdy!A;7A#HvdNtO;9IHt9G=y_LBchVan5JBC)vbLtjC;H
zE4+MihA~RGlb>r__T=zAWf+3!PgfsiQKS*Iw*3J`G4WHZNYMR at V$&04#`!(7+P&fu
zFo#cBi;I_^>Zt+^$!jHV#9g?)fnj;7ZzGa^2P-#uU6w8$YQK8Zk-L3>Q}s=4au{()
znv_ZT%BL)DW`2J1>eIPaK8LOmq<BX}N1ZwYgoTOJ3zl1C(e33Kg0}*yP*R$0(M*{f
zURnqp=0srzm8G$d9>ZnYuB{lhu;WTV^+=+zfV??6EmizQm}Skq at x5L+g0sR$;=y97
zotPu;Y$+`9uKQ#3;;Ct8+ptIL)0(DwU5zW^yrVTK(aJ$jgw7vIQb0st&tNY04~fHC
z>tL9_M-8rfe#l}c|5P!k%J at phJs9~ay#9Kty0dULTWCXoTD#K%!^kL!1H9>(pMys3
zeT1f1cviJiM<vwrd##EYwX*~6%FbH`E(7~}`1SxvK(@cv2-J8$1HsHPc6KXCX7?Kv
zee?CurJ#=L+Ty9S(H+%gnuWLw-_rm6^YT5KVyOUg$x29M-R2IjQD(SXad6pc<JBV_
zTChH5c6r1vwK%z*CD`Sy>%9uDU1sxlgGz9JFW&95NI9=s&oImkA!3ovz=H%>ri at x`
z1$k#_<y)vyHSII_F2*QU)3R<`*I2Ek?8w?PTWtOVTMD3;E#WFL?EP1*MBHe95<*@c
zXzyG;nno{Yb!NZ_gFZU=+fuV){-Jjt4pXNN77@(zwVY$*xh)$TpH0euY!`SPg~b8+
z^bAmm7SbF$Z?N6#=;xPpo{bi{ukV^kwf`lu!>}t>GA*!L=<EblWeMdU=M<6{#gS4d
z?YV%vm4WW4oE|U%vYj$)QwE<CItmY4v`k)y9me!Rw2{ttp-v+9O}FbtC7zq2+DV+~
zD03NWiJX7I8~nCK<rmg@#bMXVOaM7^HL{TTV%#3`qwKD~8l8JSwg+l6jT!kKJKWS)
z6&FE*4oW+Dwvw(4p*6T$0u-dfN3c<oRb<!5=YZ^UIW{ddffntpOLv8V?BykGo5OF`
ztobTA$4 at U4fv@Az=qp0~RByd9*pqykRd!6ua76E11btO!e$RjIY({4FuHa#fJ&joo
z`SI^)=)1M75Y{xtUWzclBMogh5Uv^=6!3jA#5T|p^)alWBIFUBPhf_^K2Ta(%N!e9
z+~%o at UV_B^P^8hE&#F3*GTK(2($_$?TyISYEZh|xP$>gDP_zKM;Y-Zdi{i6)GN!?R
zBIQV?GDINI6c(ek#aXR3!<ANLz!l@*FzYXs4d+p>1yELwWPA1a+WZmUyQ!b&qTK;u
zVu^JGrwbRlub at QW5^K?MFB47)9JoBjU5<gsdGQrEia6>(*KAw{Sek&@3*)&TI<9Fb
zbf9(<;pUItiV1a^+E)~8keZysi|W^N#<yT`axAUEgn%Js7O3p)VuOjujZ=9nWb~CF
zV6%Ii1N at y$$ok at 7hzvjJ1OS2JQ1<p~b_gi at yzMP3VR#ko1LT$){1{zxc~cW7!|chF
ziXadRQ~ooIRA~ZDalf7tBFoE(aXvK;&%v$Xl87Mci6oo-d$UWK^ZIOKDzELtBq-}-
zDv3%tZO;AIeG%L+IwxlCSJ|$LPsak3>EH*7JXR)78|C=|Du_wTZ};f@!+9f<L4G%L
zODr3Uo17NJt<ezC+^_<*jyz)Ls7T#itrjsej&n~Z+%Ih0lhZ>FD>;Eur0_4J2O9S8
zLt_BC_UVfrZik+;9EP4g1|u3S(}I7CiRGAD`>aLkm at dtPN)4S4koZ{lV7vsP)#3bG
zdEqd at Z1VxkJIy-nBakahJ2v&jU7~C#NSOJ9&0ww#{CWL}L$)M6L at Nj!PFoS!iLQrz
z|NRBsdS>B${~>5lH2|8PcQ>Rnf$>pn391gxZ>2RtXqr7VmL_-E>)v<IEDbjs4B|SN
zW+J{?Utl#4+1&cFrSiK(^(B_j68L{G6Jbw<$H}t3yD0Jkj~5hskO3w>LP^0=ws^_1
z2bY1{WM_|=LmvM)OIECRWuWrH1E*dJ`q)hdiCFt{LKD!(48BgJSQ6PDdge2h7V$4U
z7!<tcs<Hjtdnc+*1hMft>d!eG1i(qqsQRuIkIQ#DU)>g=8=h8dMaepn&chP#fMk0o
zaG3N!?Q*wVEpy*)rpohZsF9mgh>sazq=8qHGRO7BG(Q98`VHz!zT*L0eP0S>gHanC
zF((4==G}5rhU3BUB<B1gEo#s!;Np=BN~mLOO6Ty0?<j+R+KQ?##pj(E&rf3w{hx-T
z-O6VUqi)^R?Fy*n#)L7FRS*P9PuE>jQihw*Mnzm5?Ob1LCOqH~znRjMJYrD=&+ELc
zOl7r12~0tCcT at A_<-RJ`5hDe7>4zbh4rwbsoT*Ad#09kRh<D*C>(s3BN5^<xk*GB&
zE#E(*u{o<<d_|s~n<7R0aqCQGIUFfAkXRbC1HKp59ltsIMWmALE0O0(TjGZ)Occ+5
zy{GV2!XPWjx}~K7T>ArBTZT$agTYUHp%OC|D2UCSt5QGvBBek+@{h#;f7ow|Y~=kv
z6r=OY01<oO-P>tWJ^;~LnCp+s>`OjQQu|Q(w??|Y3Dc|CFBP-xeSMf{`!(k6en-C)
zMB)>NAJId^BN#PNcDX{eV~&)#(isrCRjy27q7?tO8R>eX6Jn`?(bi;>oW#t5Y}x|T
zYx_wBTu3DK;8yN5H7qPGH6;9}Jn0WnzvSnoaHH($G`59_z0JWR=BUC78kwc@@R3dU
zpHn_Y%Z#9(m!Cq0C6ODrZ#I6OeT-F_1+N{JnYgPoO<~8h${b*9BSXSl^VE{bp*=Pu
zf%IWw(|hxVq3L5bB4}(rha-Tl<6NB|<^!ah{l-ZdC!qVho-+D3cW&?nl9$iesF+O&
zF(J65EINV at HydlCbz+)KO|K_G&xdf*pn<|bZG+qf)}-fwnv at T2k^-80a;Tyh>wNQS
zZ<T^tk}reEyJxJcy{tl^IUB4v+wwF=2SQdf;q%z1<zp{OvqZIU#5&10$Z@?nNlY}1
z4}lu}2*glu318!*4cNH!*rh&XPzmbI4u<yA=aq|m at eu+$9a3z}mv9CCav|`K&((2F
z`@T;g?~#NU1p%3dzB8L%m#^l+qYLsNzf=b!@Tt0`EHahe0Y=u37e}@kITlXQHY?I^
z{xZR+`n{`B#;ftu?d{DDoP#(pMat^Hu5S-MqKD?JcfyX=3f>deY<oO>|LTLK#5$tN
z5%jjw2%z_b3vRQn{Q!wiLHPd5W~cif%?hB}fMFvh*<o{|e8k0($ktui4g4U$CD*y6
zq^dv_V>BILjl1rBZaa}Mhx&vH&6Vp?CtQXdU!_V~5~oY=E>?Ws)2W*Jv5Q1l<L(%2
zHr8n^gKTlSmt=(=zKuXyUFL at CdcP_=w1={b#)K7yX;97xUPgyT#dc-g7#fNifQSMe
z2LZnxpM47iEIw|DDMq5US96DX`6`@4nD(y at -Rw|otyA9??c4&~adv?|#J>^a|KdPZ
z-BjNB>#kUf^P~)Nf#WspHR=i1=(K+ at eeU1THRh2q+gdnj7&m_&Gfkhy<v-oo%=EJ6
z*m%`9b@|V>o8P&nPkh6SiVB7NI~9C{c(sQ+lfG22u?}nGCSCd?p<tzMI&@*|q53;<
zWJ?vErtr~Kejnpl#;AJONLjC3a&(6zM|AzU+aF?u%&Y!!1*wvsltH#2NOFry&!~gG
z8rQ>&)h at 5X?bABKk%kZG^QI6o*`81!X<xet1pyYQ&$9G09WJdOkEr>hm$qM(^3pqj
z=_a`2HPk{vP`I!Qd;7rany-{_=5hLehbsL}2eUPV+u*Q}YeCe~-ckbAea`uf<$__+
zQT?)}!;ALD{Aeg809|Q0vOEZkErcCZYS$CnR8jFm7bf#=J0ry at TYDv;lr at WEFAc8M
z_5OJ|u%uF{Q<+u*1(V at J^G}jEXxZ<)=YQoB5_ml2L{y(TtxQ?Z0g&fe1^o4?m#a9T
zt6!+&?A8->GPaVl^d&sbC^Y>C)#X$!ccT2t16PKjpjmx6a{Vs3k$~e309GYf?eI8D
zdo^D3kh>%e!#Y8dAAoOLwwrw#$^;nwZXB8wD^as30)jdMMf-JTsp98R!I8lbXXnOX
zOx!v(C^{D=<5(7Kc#vQ<5n-=jSf?IZW$-74RkCjynb6EF=|N$mP#k6uYVy7W1YcoD
zf_AqRsts8qYBv}nv6Fynv^PuYN*m<Ev*NJ6cM;W7kI5Aso5C-J_oZs&m%j+Px5Mov
zJCQa<_pyE;AXHDBfm8Vp at sH0I&aRhv3kH_EB*n>O0D4qHs5|v&`Hv_X;aaQDWf;mm
zlL2jS2vZr9TYZr`vm)K%ib*8TQ?25-r=z}MPxBJx49sFToM&Y24B{4^g2uzXkY=$D
zQ-+9gI19Pa4!+u36T)+5%yFXSYtp#rnK7Gw*?Z^o)%3M{PRN);#!;sh`da%I&|?&-
zI=VU^53-2=q!KbMlS@=Ms=b+8W6(mrDEFZCy1 at MEG4VxpeWo+@`)FR^94a$eK~ymt
zK(aGpLMq;z0`%PJ7KExf`e7o!wn<gyDq>=&$m*;pTV;`P`lG(4jKV<N&>Q!mWO at n?
zpTrvf>~m>$<MO8#4oG<B*)pbRwM!6T9f_f73<Je5`{>AaRx#x5PY at ot=S34e5g%j=
zfc`s~GlBV5bpc}yneSD}x`vl0z?=C~Zc55Ps9ghgpD;WkLhrzsQvIR{!<7UjWwf70
z3+i*9|D%zBhpw~q#F2OiU4*0H+tYV;kV}ymtyyixtUpiA%DYPsrUyB-iS6~@u0j5p
zn8ZTdB<{O9%pxnWPt<sAIIkRwlH?E;K37JV`gnap8CW39 at 1bBX&fZ%baX9VX1V at ul
zfST!r>o at J&fy`XS{FyJv&P3?7u!Ap-P+)D&i_RDvX3};+$+(nfsWuxbGogBKx!izW
z4%zd5q(s-0PqiLtW7{H(AW?YFhhw`7oy_mT?s`!s;9mWXy$i4~z3{0eQg>sEE?hyV
znq9woRZ=ZJ- at zL8@YlhLHi~XFV+w;j3U_^5%OS<EPbZsSc|+HQbf;*G`V3opG<_Ox
zXv5xTyg56rB46{6a+H@;pWi7-n{-Y%tibTm5l)lwTObXeil&R(^9bFFPXGrpy<~n`
zNaq2Cb$|=jF4kvY9tZa8*6Op>xiQ1O{0kQNusB2W$2A!PHxbUqz$1wULVp%UH~yhX
zn(`I~pzSTQoZr7XtsnZ_6;DF)8QMY0ne-`k at mXEQ`Q&hqyIho>C=*?*m7#L()Bkec
zz$PC)>IES5<$I at B7mN_Fs56R%>jHs5C;G%=q?0R3P+e!#)EjoMzPo&U at saiGIJP_j
zF$)p~9Vj{g=)0<5k#(E5gxC<VRj0p4Qw=KHv5T<2r_#HF5GzciSf0o9AXc9<xG^^l
zc+X7e4aSpvo~ZP*r-EiOaOJDS?%+rU-2AoxN?v3xO4F01 at 68<%CyatiMGnthOik)%
zNH{%(mlpQjG)(t<)#tMHlh=3rLCJaE=2Ax^Ufo$6c<3eY4yoU_)hpRgpn5{UG)jQ9
zOEzb0MrPgmlQ!W>Mj0dUntF*?eJg~rdE=fT4BzZOSY#?3$K}l^i+@*b-i2v&2Irqr
z_jN<SG=Wzse_$vl4Mb*WwWj&}&dFwfilG~m-J^HJ at g&TG=U~ca+bY=r`7K#jw=GF)
zXRN7x`^xL_g>tnxA8g#w{tpOx+`=AXm>S$TA3*v%mE=O(eEk>Ej{~xHEIv-tJEl2y
z|HU!2=|5gP+!IWbMFK$ZwwLE}1|zywh*g!(LBg8a6O at F;>ao}41K=u&X^<QHHH`2h
zzs`g;uiBVzdY{rjy|N!XI)=Cy;JkkC(z2_N8Rqr5Pp8E<%JhH3$RJS|nlm?qMgvzN
z&C%6jPS+2OUDF~ijo4)gvg#zW{5HvgiKJ-X%_AowX|4NWlgbx`1spEa>Cqf~XUe!L
zLl?d^CWt88f2%Ds+Ho at N#pl8j36<55(c!aHOz+)Gx}<L?<r0S9P}pls>Fo at cMOLXA
z9k3wiip}G88^E$EfJbvK;@+XHAP6cNk#UJ`u&)?I7#2;VC2?RjI1j4cDU_v*sS<%d
ziwp%G+iZA#228v~unr}(L~&{Gm4M8G=3)~?TQ99GA!9O0OL5j~q?sQHC?n<Vjk3*#
zC7fDf!`XDL^M0S+<%ON4a+99ND at 4|DT~XN`Zka2E+3=w-yHr(dj^{38d=aUflwE0}
z?<F3~W!gtC!t`y{5&xO{^~<EwSBSTm9Ganjd{NTK{<K80#6A5Gd-b(1`G!mvq$C^7
ze+HQ(v&_WG#%>b#CLJsX0{EB+6o!vDYfr0m0Bv5El>N2LWtpQX{f8z3+x0e)CK$WB
zUwFkX5TMbVNFfJtP59yhs7sj?@G&1)x}UOiv89#AGA5VGj%2>2Z<9Rv+FF$NujfXj
zLIUK^UYLhQj>$IinCsqRMq+t$v^c`#12m*pY1%hq{6L5znetPrw4*jobLh|%Fz=)5
z+sj#EWPvchf$M=_!eNBxB`f;fo)5HJR%LE4%B(LvllxC0v4&Rv@&k9lkBt4YI8Fi+
z`NW0 at 0<$B&?zE=3F*%_l at iTH^k#&HVjb<LDHsRF(g;p`30ksYt^H3EQ%hAdZU%)Q{
zG6s8%2C}_usgU%x-T~`2-bQDXWE>3B|LcPxe2W{=fV4s0>@`+|ib#phpxCeFq4M2o
z03osSGl(V8e5paP$L|j&8eMY)FDX{Hw(n}kw7r9NSR*&Xc93(BJ+AaBwBym$M<(Y^
z_7YiSkkBQUzhOo0zO9 at m;yL{SjIV#eUrWpw|K+romk|?79v%F3l==j`-a-v(J~pN|
z&(>$%86zyRxTf)cHoS{}sfO5{iom)IV at fHn-WFtT0##bp9etQHML*;&@HZve;^$mL
ziG!DxO8GC9sAt~+I9}?%?m%`UbvDUCP~oe)0mMs^pz4trXYkmZwgNGte7zYsn&T!L
ze|UIV#hj6ii#tb%7Y<Ig#du-!K%TN{VO3wc*>*`_ir6M_Sq1*8dq$y)d`7k$MHt}p
z11TPcE=4Gbk43!LHEw6qN8^B(%S-dm9UFoXvStJW_32N~HhdmG%nt-abx$%^1+59{
z`G5Gdhq|J+jp`JW7ZGXt_Gr&?`1azOcmZmlSNa|wCrLHNtsx_yL)v!xEHBaf>j)gy
z<~`RVHPI{bL{1P7zpW14y#CV&6bL-T(B=X;hq6v6C9-PvrVlA(CDXa_Pa#$$MW+2}
z5z54Q!;(8iwfI~MOKi4_Unp0Jpv+!|tM2-e=n)4y^^yXGGj&Tdi)S<Oz}NML_t$kG
z>YbMu($3zVHuYNoonGW=X&MI3%Iqgq1f9X+X1SK2KTr+%5_-g>KZxMJ at cTwPiBso#
z3JDF*;6}qxBNCVp8ngIgeN*(eV}GXoRhaZ#Vc at tVQH>(@j3QE?@W*Q216Z6VgO*QW
zkC|polVzm678Cs-OcBT(D$G_0)>5;85)_$%rGhTH61u$07+wsfqCk^MqFtOJO*=CQ
z>AA&-M;u?v at Y~RLZV<xb4QA&+^)!-?2wT<3wiNrxg2?^dT{7r7J@;ACi~0MfeSVsf
zToz=Xx0Ka;Ra+tjb9k#<5tLgr4`386*7IM*>{qVdFk!SwpG!feb;;1SR)JH&_PXvr
ziCm*g2jG#zCaTu<bcy%ZlrNT7ND9~em745+yaB;t-SfhdWQ>4Z#SVLgAYWAop2%C5
zsRWtwV<GfN1E7qg*X$Bw4QBn6Zo)erapQUE9nGteN3N%7%+>{JeRjP;*x_l{0tmfh
z1~mUx`g?@x7ea}iN7ACoK}`<$#Yna%*JuZ at yGvg2r?zmO**^yru5nP{v@@3SZqf5r
zh=c&t6yeGQpR-E7*MntF_KgKk^1v=0jg%mP+J8w>QkC}k5-Ea#OT8z)Zx7(7rRY+t
zLqWa!dZC8;8KWd)WXY)TI=*+RYOJEeA7h(~MEjzcq?jU3rY&v){;l+q2=DcHT^QV*
zazv!{;Tj-F;~rU-aQSBXT(*Xk6#kl|=S|98p#2MO_x@|}tWB1*&2X;9I>JWOr!l|I
z;Neg{E#5*7#`LXDAA5PfyV8ozWjEa=5H=-=p#JFovX)X$Okq-Zu~K1`1TF>3^-6Z3
z at db!4v8&KxI*QK*An;g*zsfJ5=&Sb+%m;Yv*W=C~oY6_hs~!f&ijz`K at 25QWZ)BZF
zyhLNKza|+VEy`TTWB8fQeOz)cW-|y`F7?}#+G5-d)|^>^hu`EI^Z{=pM2zTLfQA{t
zCRH)jnL2&z(ycDDiTio%BUvAz95M`c at uyurO};O~QRWx7z_$(Y2_WFW-s%Hk3HW=r
zx(|L=JP&G49nQ?HQ?pvX4grXsa7y6nR?RHCF>8G4E1vN}BOPp+tJU4|SFueg$~Dy!
z2)P at W!?ZJ at M!l+P;cU)>ezR*JDk#-xWJLM>9}57vk1v}%bz0mYWF!KaI;-|_oHgiG
z%7ukvf^B&jTtFk8Za&jExz!0yHkx_6WeV~PW<eCtrUTWTe0oYtnRh_GyD;;Z9*Dr>
zw}eW*z-UcGjEK|8Jw4G%CS9{OJZxtYO6*8)=5aSFa?$S=j~M-0U*R^@+MwNrtrma!
zqhG8VO177X+P9~zz9Oa+kkj7PECT3bMsqFIKr0x{Y>&+#@oui|CbNy~Ma8Nq*K)vc
z6rgW8VwmL}t3;S954wMPY!$DF9kuodjuQ=tl6=UNrhUxQtd%YM@=_|FO>>B4S{k8Z
zbPq&2kC3BLL(XvtO$6x3=={G<X=Oa3u`T_8tv4t}hE`kCqj7Fwdn*uOt^x~~vJpQ_
zcCZQ`tt!tCCbSb-(;B`0{?$Vvjh|?Z-%K5F2_8_Sgmo>8Ndq=lZth474czFwFF`_U
zUZ_Y;ji6c0ucIDPFi3Z71TZMgC3~i{cq;(W^cE&S;5$g*CsnEE6tiae$Oe6L&fK4P
zoJdw{YjT6BjYX_GV0)UZzYl_meqs4H7-S(|9&nZtZP|g~*-tdTegF4z(b=I0HxVWC
z4LbtXn at CQ#eMeYZIFt&{4erwR2^TKS9Y)Yk!4}l2{6d9sf~$_VYU<j~51COH9#pC0
zGzUyN*${V)Xh at 8}DXCEa#wdC&7WvhGHs~R;nBR@=G%jZ1!Mx8trCYY4(m9la_(goi
z3R9vM at jOR9Wb`$$Y_(H#4oa?QzUZQWeg#$lj9=7LeDr}>o6a=CKV_CSC}<KD$F_}#
z{ER!YASw4WkxO-xWd{Eyc%cSoPNisGpGfIPjk2mQ$^$TCkc0LO7#VlM9V;`J`LTyg
z;+e3ypj96&- at xdz{;n3E at k=P@<X&LDoaLk2to(#k#EDgAfFy7mYZo)W%}@767;0V7
zF_6PlV*Zm6BBId?+80rzBX`S6dZUPP at X?dnXO;dd3VK^ev2ASV>afM12N2)n-^Y~F
znMfHtUG87x+;Y0lhV8KO`C^beLFWOxpY4Qez5pRy;btvB5Mm%qp=7^2Ca@<7F#+O~
zhe)JqQpdcdyRxrCDKStPbs`SGPhp4_N!z)A-G64_eN8mQ at YH728>EO&Zm4Ol;bsx6
zdrl1A>sXYAMkX-+{_rF3se>aQu?&m;Aju0UpXEV<j1UG^%**vC)2fY4N#ex-W}XEv
zS0qjH4k%3wVRgQKMSS_jMb~Ycm5Gh)*Fj8Y>-ZVO`*Wl39s{RO)t<*dF~(YW<-8J~
z4D&}*V2=#cU$iLGi+cBDFmY=DHonm0jGTpy8p|v$G>%E>W at t#gdaN~i6TbAHkf1X|
z{)&K|y07)h3^@ECh_G>377LxIn`A$Jbv7>p<_37hq)dQzWw2DHSZW&=TEl1(Ap7&h
z6G0R^o|_3!!a-E_v%)_(>Uu(+w50uuZp6Y;$G9ZL2Zsey2|bNM!kRl3nh~FuX&F6b
zEL)J(Se<3L+q`(~AYG5X!q6qXPRRb{+RVkOpVA`F+5B_FFio9|db=1aCzLu>+;f89
z8wxLxF^^PqaM<kGw85V#7Dcadg>q>2_+(C}Q7?MFM4EoK(AiZ#)Kz5GCJV>vOGR74
zeU!Occ`m_jPc$hK_&PZUfP%5X2(GU&_TfukrFI<;(tiUu2hF{@NMbHp5`v*T?9-Nz
zdJJ;Fe~X`^awB*=?^oBfRMkH!0Be=B=#7lkylUJp$6KyXQp&QXQDMhElfB0YXNFm(
z$jyN|1LDyhBbEOSo7_>yo$dK38#22^XU>3yz=ChQN;@hoO$`3Xu0vZyWoHV7*b7y!
zQ<cSCAX3FBQU9elC^lt73W7RJwtmJ<$knv!Y*+E8jO??^W%q=X);F;nAc+(Kyk_GT
zVG|%EYovq`=mlzLZ=D0mZu}u+C43AM3A%1*7;iCdo~In1(5KrGR>InkQVTv`hil6S
z)K*0yV<`{Ikys~8gVocE>rF=Ra)A-s#=4V^a|?M^NqmugF06SFE7lJ%&z?}hMFcsA
z0_A#X$Rm#KY7g}G$xL)5mOg#7OcCEK-}C^z5hih&Z_<q^V0j0;+A}9JYx9&{gm^or
zb-JuJ3|>l71jobOC at rpO@sfJ?p4S9}E$?OH69T!s1R0QsVSxDO5>Ta;Do{@US~#=q
zF`TtEfsSo3RjbYULH{Pw;&;Ce%X`3DXC1($XF)0)*1Y1^ff{qLT!1upu9<h7I~yki
za|<IfT_Msa^ENZ~4Jt0{3PXXKT*Z}}{ryDoR@$1WKkL)3seE>@*T{4ChcYap3`>6~
zafry9HnHTz0XU`)K-gZA)FrP%6}rSTG;Q;tsHFw}sNdVf0$UW#`H9!+Dmd)Jg&Z+I
zq;|>j8{^KZ at LFbM<Pm!|j{#}rdV6itRw&#N?}ACQP~@o#LTZCZ_s6O=Ky;03w(ffL
zD)xEph6)0tF{`uN7Uw?CEmKa(_@@5kjV#c4{qMg*`*ZxG&mO(qnLX<lzA}-fye)OT
zrdI6HqaEG#1G&>{OW-QyT*^VwP`>u=T8r^C4BrWxl at 87Z_3T-%zHuQZ2vPsK)-}BU
zLaA+lgw(Uk23GiZ8n?agr**!1 at M}WR!)?7?ykVsPZSEFaj4Igk+ at ZXI4+!wBi}Ix+
zx`ZvR)yWFHQENpHsBZ6F$+Y+eY5sBy4ZXo at GN9?j8*&x<)M|sh0#Cp`M=ga-P?zfM
zF+mgjz3$dexngxy2SwjK>nV6vODi-)l~mpIrkZC9bE7(O(}HZUrFl5b at 9ff}Wv)%<
z>HFp9)(F at Jt7IRp5w)?UMS*!Axs=Mf%Z_Q1Rlc{h2Ww}!4U&mfMeY}YUl_kxK06)j
zRdYJxoR)Ym!xD()8FWRJ48a)ni>?&p?(1k9&+FW3g;80y(+Y%gZDD1*6xYE{JVT1)
zhMpb|A069IhYse1Xd!CAquXO+oS8_hUn%K02J1O8+X@<4aR7TdmBD%26B7mL0js%W
zm3d#Qa-i3DU-Vpps|)-z2?EwW at WYwxN#P2D$!!YyK#wo;I!uP6hlb?KSu;ci+R(30
z{tG9QQ7HjR%JR5ede^k3s%6Z(#qPs;e4DDC@@czxhWTEZOLu%t9iwTzg55 at L52J#}
z!4UE4u5X%(;o^s($roJX4t&j2tLr=5f;0lCi&Qmgyi>17d2g*PNYUI_eP at AXXClj&
zeY2Sa^*cYF7>YNwsbv33W9Lx3w?|p3#-8rZxm-Xfb^jjtSX9KsG#?nxPlP(&I$BhY
z-+rZ1-wimb-zR+FdSc5$`j77 at c5why@`Plk!0u{xYfpCW%F>9q1V-a{FZFWrD1F-0
z4<PPkZ6`Z)6stZoUfN@`ee!ovcaYqAUYAFZMq}`gPsM9YS$<V<zZ&DG3nD^4eN~W!
z>qdXJpw`aU{8tv1s*bEoGXxR*yeo?k<p1CI<;fq8l>l76Yw8GC^XR7NE#Xx)winGV
z_n&+p6K*s)t9wN+B_}>G1ze4TOZrBaz_w0YXM;GBN&^c`QMT?fsTry+pTDCRpNey6
z9W^7Un<df#loT4A_{&ptnJ9pGjlGjde&<4=o3Nkc9LHYhHU$KzC}M*QE;ByZlYtBg
z3 at FR}%U<ag!u8o~g2Q`EhDu+ud?TgwG}k4O)!{dfa_Mk$rGO5w-K+-|P~Wvi*88o%
zfx!trn4)Y0$VJ)eEkKJAmgZzc^V~rz$KK&LsW}Y|Qg*1}PCpl!s&2A)Mfl4aBpYct
zw#BS7Oa6{_5X;YOQD3-LEC_ at Q9%*L%%_LcB2xeq%zo!4L-_4`D8gQ;3vm0Q!BghSo
zu4I^$XpVW~_ESgIa(|7W4f|v6mfCC14Oip-AfIK2yV}+IQ$7_nUoN_<0>@r|HTY$K
zvP&2H-eFPg=XPg}q;Kf6I)XN+%R+;{Xb3xy3*Zm2p<!Z&zWGw)PD>8#_y1atU?B~B
z6n5fotq8aa5~8yU+me#PkbZLRUq-qyO-)i3Sc$A5Kf{?<0Vbo+Fu`YtYYXT^2iYt;
zxD`-$oiOxSqx!ODf->bo|BTtk+zy_~&=P0M%e)xz^w2^PyUNI#mRwW(chg}picXw|
ziPpXEM&L&wLS10b_Tekz6J<bUEJ(aCl%F4)L+7U4 at oPNrp^vLd{OAvNerO4C_VA<l
zA{8|0 at 4RSIB0=BpU7Nk^h2_$3>XgAZBugV;we+?i-M%G$^&I2T)~%?ZbysRxkR12U
z3uo^JgpdN9rfSyc>jx(tuWNYoz<iroyw6Ncl&PN7+gRMOM at Z?hsAK%AFBJi(h&szf
zqMeq+<$EjE*SBF?{`*(MnkIup<kH-C!94|C=&e!(#gx)f;pMBm4u(rEhyW5Ms308z
znMT*`Bwcr|Tiqp3x)$oE{U}}+&Nx74W`B0Hx56ETW}3TJxn``xw_6bv?a3|610%gy
zU7V=4(X at CH%_&RmrCz-Q2wF219_&OA_rq+`6F)V68!_su{i%kzTf at SMNxL>-6hah9
zfB^7cKOL16VSbE>Z4 at n_^4yp<x+D7hv+H1^h!pDQ2?f&1L?)k~&$eqm{Ub%f-kB-H
z(q?izzsxpLMZ?Cq=6#gX{^3uHj{w%}gGecM7n*g3O8#P+|L}=Ffgb31VM#l*hAE6d
zE$NvAl=RN>QDYS*El=G7tx4tLS at 1x`pf_9yHz>Zl8*dZ_w+Hu2+>&xdT+WB_q}~TC
zEP^U#>+?#X=EmJ^zS=_ at FWm1sSkdYznAS$6IO;UHAB_gaQmHUhRElIl(c$kUu(FyK
zUX*>O3}5h=>Y%7+7+%pkD_!#^4we<d;gIai)^v=KYKdzr6P);_3sDJ*<lBB-1Tp8A
z!%DF&<1%m_wWSWqY*Tv(!UsEU2xRgDQhzp;=<t+z8lT(!Pe-LgRgMeQ=~gTszS*V&
zG;_g$UC;{FUmpi)3(wvxo4eY>IKj(iRzH at dfu=_8LX6X0OQL;PzT67<a5}~g#k$!U
zu&<#mBG`1mQpo<KDxAkYdG=2^%aKG~fZ-SyzC|AJ_&s>G-qC5k*4I>;+&!}<H#^OB
zbw|WVKt&h9<uXgPo_v?5;Zka~c1Y*Mr%D*K6D-i*Z(AxiO3AO|q(>XcA_qJFW_3Ll
zwxjfxl2fQUdy^u!=+whc%)INI&>qr{CRDW}WHo%YN%N(DFL46>%m(x2LSq3W*lv at o
zuHD50$b?=}(9C!g7^!L%#!G7%PAP&VGPsS8dT}py?-I%)$|d4}Uag0+SdKsJ|48 at N
z5y at HH&vM+pH^1XSP)wKHrQ!qUqZsJX_SuoZwV4~_(>$fmrqN-FPQ<>O$pZ?lEyKO@
zI{w<!Q~bX#s-0PjN;?Irf?gD#rmP?mKvw_YD1 at BsZpK+Uyz}n<*tYbSau_C|*t9 at q
zr>>8(99v+kyXIwF)`-CH6iQ*j@|9p?Rx3xAA;cB9qi__|;4)Zy0}0>|C^&ImYPT|k
z4^EQSC?ZcXnq=m|%VEuDjJj8zFOyrI_pxRxQSwiYrt^QMN)WyZj at lEnj(@Ms7+)-?
zMU}@l9y-jQqbG%N%8eJ+Cc+E2o)~INN1B>wxus?Nnx%E#-BhQ00-vb95;OHHHIKF{
zC|qadnt=SJHL6jl5}F~IL%vh^mIYSHz0!8qp)th9#3*wYutld|cq1%jofCQ^-Q<iI
zNc351tS;}ezVdM`>k6>}OrV$^x61p2nm6qX{&aTThsEf=B_y%`0fwr+_H(pXtDMen
zbh0KnS21of0*;HPbx0A(Ryd$25Rk14lW(6EH_KsUDa3BNmv@#Q&&=hVN4?xJaBfeB
z=Q~6IT(Vc9FKapC!FiWF^v&*HuHZ2~>xbLIElKtv`hY`(_WAg8 at y<lQ>D8rZ6^3&X
zt&(#Vk_gufL8+=2aa>oY2O3f>!6;kH)mnH~IV39WajE?H#g(P^Z0Ic_zls7;@x^8J
zcby^t2uyI1;7iXBW(??J(MNlK>}%w(B6GK`mx7ZS1w{8Ba{1g;gyV at Mn+lDOS;^$<
zbcd_A7;{Kn;?4CF$MF*z_Md096~L9re%HGh>HV2<gC<$5?rm}8Z38l34 at QCMJHmIM
z#LHZWo=@BJ;YDYJOLJPVPk+qh<6sMzr;{Vhqvwi%=$&AS#P%tr&9#fzS{^4s88^Nu
zy{Ebe;<=MpLwbtg+Ze^6`W!Pyu3TS5F0`QH<b)?`{P^4ATSOM0x5WIS7^yY#$5U$r
zNA=BF_@}{$7C|z|(~Se at Pl9l$_aCsm0nLzE6!d)_K&q34a1Z<Kh at y#o6ZUGr>BZ_)
zf7t{nZ_Oh&_Pt{gcRW9b4chJhS;5{CAMzlMoBHFhg5pc<st>Rk)4$;7xN81&^H1Wd
zPcvI<EDZSljQ?>(O99D^u;u44AJRoMCA^S2xxcRTR^Lo(H<9o at BQ_G$f)-l#RFe_>
znie|-iOKcKj{As>b+hJm**B?P9VCC#e(fyqhXeVmzgluw>`hC+|3bmtj+dV)a-Rb5
zCp78KzMBLIgEqX(7e*&zUV}>PMU0c2h^YpRxS{W-qufiqYav|rdGxY)eX?n9@(sV4
zw?M at I{>xzRe3nk?Lh}h-^?g`JpzCD0-th8g0<v>WTuYMqNOrvr^}}@`_?8;W!SaG_
zyb3 at 5?ja=~A#vF+6mB`?-Ctk%edyP{VUoRzH8YLaav8#^+^E<At4O?z+y)=vy9VH%
zG$vmrUZr;u<crRK9=RgKS&UvsyD>tkoZqVNV#q*)*_sMNjBb{4FeO5rfV4P_lUmPp
zZv1yd%vq!rVg65cBNyv}aXpcFmh*D_m14jI008Nq4Jln<`EzEpkf6$M9VB{_<sIOG
zxUy}7r45{rc@%)VPV{Tn<<yU at d(B&+FTQrJ&_33Jg`Pb)L+u)i2a50yvbz5JCC4w~
zWCVzs$})PQk2{GiQUFLZ4?cJk+zfG4$k2E<@|N8PMDWnotvwuDQI5qp`c<Z at QtQ!e
zFmb6V*>vXrYaxI&qMf>9AoiREi#Ri$nS{?yCZ at Kzk*k)BBAy_>CFC^b5Rh<M`L0nP
z$P~(FA1dlk{f4^?j;0>S-f0aE&+quWEFsJ70VJrF24T>>Z}r at Xm*PGOwSf%o`S07h
zeuN at -MiL@3$Tty*X0<%|0`!0^)3y4uBTthk_h&Ug4Z(V2UG)BD<<#qk1x-;q@@*c_
zfh7jMzOnH`&~T7rAs{9)so#6ZKv!3L+S%svGVwG3jhmNZJJG6rRR!XJ1iy*AC%6Jr
zBOvGd5s0N(gWyr%4f!ZTC<Nku(!0b#P at KI#67Jc<Uwui<Jy(W__e&VQ#3wQfs~oH2
zLV1xOh}zKJYO=H{1hS?(Yjrx66LA?+l!b%)D5+niBy{18k7h|2*;|+~w_Cjzq@*0Y
zZeHr$gdktDYsqQJYBZ at tKhHEAm;UiYlGGNvfz(3Ca~jB%<&u)D{W!!1&yP)b6Q4;y
zfdOp9?#aYW%2t>Yk`YTs#87wsM39x+25+Lf3PQQ7w4q3kL}+n;O`}^aceXHJ3mHU9
zJaXN(4^ffU=Q5N`$?P|7n1M1EMw^j&{GG$V2$%JOfbde^W>Q2cQ3s1HY24VoXL at Lc
zk8BYYUFZbHQe7CSjygs7<0<}E49299aU-yUL3udpDQvr2&&4(9HT=*3r&Tsb9R>P#
zNh#;XYp|zWi!?_mc(wJjVypbDl;13_oE*T<Zb*WK&98xe5rIJB4~lZj8JlraM`_eC
z at ua*3XGlU<7sC{L4<pAxn%s;3AhW;Cva>>8lsr71AAdbr@`Vxf>pXsmnqEGU(A7SM
zBH<wt$L0sG6GqVD`YgFb#*S-|jFisGG>Yu{7Lhr_cFYM>uB%>CGm^;#P|I=0`RQ#i
zRPB&$xC at PA1abTzptW>Hws_wH)T*Xm)1QqH{X)b%P;tlIS{Rri*FLf4{ikh~KMOYA
z%WHgVMtXyugzF!0YXP^o4aXFcT(lrilc8<eOwv;lbRCLg``cXoMvyrjC0^EnvT|8l
zKYB;vHDk-`hdvzfnNnqv+CbFAQH$%!@SXJe=1A4-s(GXjq=)E9&uWv+^9d>dLH%a^
zDiWvswRQ<ik}YA}7h{CZtsZ#KCKor_8lLjdBjuuO&1)PTHr;_5!y4?FjAw`hj;FXa
zq}dBJ`75kJAa5MaH83wN89^zMkX)yB$}U3pU^l=mRC{>Bz{pecwJ6Kn<~<hGr`eDX
zQ8w&Tyj{bzXnqM_x>(n%QELy3H at 34j@8Fw8Z$shQ-I(#X=B@$tMRJ+ppeI6bT0SQC
z(pOr=S<&R<Zu*uq5FyKm0LPf)Q=~!^v{~8yvSzjZmHut1=)&FB(W~%=%$3Mz(dfXZ
zHz`imWd`8+pQ<%ot?rq+g_J$OeP at JSaEM$=Au2lkpHy4g`>ftvafkQ#rco94FU=T!
z#JuC#YY|KKNPZ<Hujp5eu;p=P34~MsIH}<;@j)Dr!lG_CZRr5{cK02bMX&U?SFs&I
z`a^UO=ZF(0eZo^y2r;E}eIRXGJ)wu$324<%6iw`jm8Ww(8g-`@?PJG=OFe~0;7SDA
zjkQU)#aQQJxa!leqt1+r6XBE)vgZel{D*M4NRR&svJo|j4h|k1hwqdm+wFBfq_1*D
zb=WpR&Kq9G!KNECGvl|Whdj$=LLGG+aQw#n#TKGh;t0wc+l>Ig^{pLzcSrjt)pI=N
z-;WUmun~$sMeUV*33#F)g_(8M2{7KfG#v|XM;Vx!tUv-q13cv)D$}F&{Zm&!X<)?p
zc`Pl8k+>>QdFtP8XEd2^_6cO{#D1<t8~1XGa9Xz at g=q!%Fg#nz)_~CH;{PH|N$gIx
zj8==vvn at _xs0L+I)I0YE2-qA{vO9Vk;iJie4#Pilipk<%fJQ!SG`-DVdZ$FPI=pco
zMP`#hz__`!zp9T%7PD$>KJxyn1JwTKF=k7K;G}7dCDZg{{@nA!hI#D82G~<1*N##q
z24NLf`yYAgpc?n;O7NarlO|VPaj)i+nCdSfbaK3;>KF#JQdRk<_+R5hpTn7gZ51Y7
z8_5i8WOs1PBQb&Z{F8sW@#cQ1f&<o0egIjlj1o#+!#|^A=2(xACREq_ZEVw<SRonY
z?6O*6EWii!;StKGq&HYc$QGg|DeN&<Ny0_6sMX>s>NHh35<osr=ZN%pHs3bmi;bVu
z;0a9Fc{o&a5I=Kb04G2z^YLB?bcjv@|FWl;?9o=2vVHcG+KEaA=~&}XD)~BA8yiq$
zXnJFflwwScLIT&h``T$aX8y^yZJFSFqGeDO9jshL|K$Uwq}tTuDz1vn^bJ<2^_U+}
z`Xmr6sbqERNXwM*$Wb2ejWVPv!2^78=%EQoFt$@cr3}>7bTa}zpNV5f+Ny|<Su&Uu
zN!#)=8VBI-(Z&F}ed$~W+psv%O<`PW*jGrETvWs9Oz$YQmwvm4g8H0mk;?eeN98sp
z4D|<dbP9@=eKch&={NGTL>%j7HPzlLble0 at f|EfheNnLbFm684A)B?@C1>_x0D`2U
zjz7{kug{#;dt)OSQWiQxuV<FM;fq at -Pl>_D7Qm3wwznD^V at Hvb*Hsiw`Em_<j?++~
zmh$A5Lcaas**%OLgQ$l}-=0{Y<8pjLN>y$9)h?8|&((E|O^HXkd5+GxMrg at UwGFj?
zYxwB|iCA6SU^B`zwz=tk_8c93=Jo;gLaN(%UOMcZEQnvUp4&8F-95~5WuXfMtJojF
z_bMv(-UF7nzdI8 at E8m>pT6nPTQ?~ND{|-&+koU)|T<LUsx(0ZQ*!L^Z4087+R!2W`
z`G`qDw8}Iai44;G-fqJCy+n*2qRm7R0vP3a8Pp%qbu+neFdfYRGl9=mIoFu1y4F#2
z??plmqOo@^ybK3FWoY>)^WvECl`PxgO;9MsR0-6;{R!(7wkURwgNJ)YMx)0OIDoMM
zPEyo?kxL+WY$T$z0w^VxQ&NWhIk~qixh%e?v%nlX$Jm|QqrC8-+dEO^v0!P4;C5r%
zkEfHySaQxH!!K#f+8h*uegTF63)SsnN9Sf|gZWRBC==!CmENTzyRc&eLN84b7VT5m
z at XePWc@coy8u-^zj*2g_RMd+<mI4qDxl|P6{2;zAJ70T7<)LRa|IR2)NO7RVa5$l3
zh)TFeeNAElc`IQIr~!wByDWd*MV_Gs<{MQ2m at jRK9f=RC2!S<FdmR^_Z<0f%Rf*4;
z;Mxi0(cNE6iu03R+%&`KsMQZjx79I1nvml^NE$fqu>)7Bkx9cc<v|s6MaGvPEyg<N
zwEYkOgCpX==JYjdYiX9RE;qrwvwGJuDjfwmoD4Vv+HJm>M{~a%&v at e+uGVPvU2@l9
zNneE6QXMIpSA_TU&#GoV&scWXrg?ffL{aZfhd%x}0i!%8CowYl+(k at LesTv%QNAPU
z#y3-}VrAqcN~y at D4OfhqYgaF)cn+has(`kf)0y4c6Lp$l1!YPq%~ULA^GRzy#s2Ms
zui)RJmk!11L&r_=-m7iFsAYCdt>(z1zT<wQ_lqz+SAbQG#Nn<TG|OO_>{3{hV3i;0
z$UGRm?zmv^E1lqxASGS>wi5S%7#ooyBK08fTFOKN%)=WSN9u)g{)!9Dr$fKj$Jb>h
zmh6ki!sAH7;%9hv!~3U6prKeT$=)vpSV7rsGCjVwV3-iih8H4uL~w}EuwHC;8H3#A
zKseG<M7JWZBFnG{syjm<m)`DL8wisTi9^^i?@i(Pc5ODMO3EC5W|HxXOu3pd+ZIal
zVan80Y&ibB1r{ACt2|$9`unWSUmhuZ!s+n{bM(Je3k+IUY!fwdF}J%MJsa<$`BVGN
zWAFTdWSw`UWNvJ-Q@{rUuiALQt at oI!>w|G#PpLFg#u~fx5>p5jH{rjCwZvxJziPJ6
zK!htFpCz5SW!}^k$yc<^x;Lp;Vo+&P*S}uq0fBgv-C+9RwJ`@FBfvhlb_t^y2m$X&
z;)jhmHlfNLTeVr->_*j~nfN%fFoQ8a2+AXdEtFk`gg=@Uv*H{g9F#7o?1#O9Bw#m~
zMFk^y?9uo_xxuaT?D`&x>M9+I7jO`2x4JP73(==*B+IpR_uT at NrWP-F^y3tQnycaD
zUkwjjb at Qja1jTdpCwI<;6Zt;6zmd~{lDb`>DDCaUYlZ8ES_eEhq9RB<l<S$j-%<mQ
zg;#X at SZZTJHR69*8sU9ohtBO}9ZQOi7C9~23s4_vCb0|^M`@3=Y$-}Ggo*hXXRS<>
z;1$;h5yH)lve$nntH&)A1O9)|_S|K3IMTXg1ck%D4G06^2d+?=k+#w934F$CBU=i$
zk-&+D?ZIJEiRrCL@(l&eo%uM7A9c)p_BQ3- at 0*g?RVc$)?y-)6?fbT$0yp*QfT at l6
z)5CcBTfTubPPTmF)x*J&yc|K=Oyo45Wfpa at Cx(`B&nMG|;2(t)SwwzFVk2qpm1Q0s
z_l at xPOQ@CN1>PuZ&0~nm-d(*|`VxN*5 at RM}^~z#KM?3o#G~+4o{?PT=*BPZ_H2GN4
zu>@zc50)d%_D*g}hA?LU3sV5W7czT;P(sM4{9KNB6dxr{zC>~yJ=;Arp5YVo)u>?s
zEj?uObBNObT!NN5RD)=noG4RW*Q(6JM1I)Q(4gJiEQZwX1(z{Y9NSd6k#XIZ2BTd5
z%F}WfH~<!g!@^#P5@~)c--ITgb#tHhC$q8XLH9#h{IcO*jAnRB02sQ%+fc=vTW~4A
z8cc$kM}m<#+UqDLg&9%~nUSdLg|aRD4j{8zo(ztgS~_tAOz%f at O}nz~_{1hn*aTV*
z*(d5OX at sM6zZ9_%n1j?G5wZazkFW4rk&-#(OU-v++28%{=7e}S$Nds?PCtVDwZSJ;
z!B0(&bk_#hthC`9C_IFN9vx;<@t3Vt{S5lAK_|TKplgvr`FWknrp-f!&Fa~SkkuhA
z8+Ou)8=S$~lA8azkFtn(Ji2LU)9AWg9FC7Dqt1G0lE2}tBf|Mp(XYo|J9gGbd)?Q^
z&8uG((Qes9<QWfyP3`A}<Msb;IgQ=OW>)^OYw|eHr9ckvK33bM36{^82iI`?a5VFK
z7VA#PkSqdWHFZr0Wd;DUNUU!7*1wLcFlN{ULWh#igyje38V;6dcboiQqk!)xcyOTc
zV9+n)i9505OTvBBZ3a^4cgz$wkv&A%41B?AvVHtananamI!$hpp__74CYWSCIijZ8
zp~%x!I`Os#S~r^?Tf1m7bKl81?Rn=uZng;7n!IlMJ^XEp2icyU)we^D2r+{$3`7Y%
z9W<o!I$e*hUW`##@mi}3t2?YI>`fS8Yd<t=a>6x^`ChZ418TyTuPoB at WJKiOy%m{}
ze2rF`wO>(!WrX)%JqlB`WLvsM_u2xRBh8s8q`<K&Xsg-H%{^#?<NX!a8rZDN7ZsoS
zIfCIHX*xdb+G%P5?FBgFcb&IE1DAhGOv8dCM7gg_CC71CRH9MLl7?9tr{br~A(vm1
z$j#D%t<`+dPAwCl;Z{uSo%XO0liEnx?s>Qg3iY3pk6b^{8Pc;EY=_lM4?K^5%nUD}
zDBzqF9P@{t!l^52#~w}Oy9fe)Mbu_P(2yDl1++<@W76pKqMac2DfU+>B-S2^Qw1(#
zlDf9T3arG?rZ>ED-9cyhW%S1dJd(Za%fJFwITR_Au98(DVfqFWThu*oo&mDs7 at 7L(
z-mZ1kF(~F1gg0aa$n1els5DOjoEAa?Ri>Sa!vHdW`NPrCknolXp3TrH&F;O at a~$%k
z5)Bv75hk1FW&x?C;4*W3<0zss(HJ_{x5 at KxBE>IX+&@N<?N2PBt<A!XALX>VU)EPi
znk~(pX>+xHjWk+@<fFsxPQ1u~ZAjN`CLc>P5e{;ASPEyQFgENLWpj->-Em{;G+Pl9
zPi5#k^pp$!&4srzEnrN6tOln~9VH?rDIK)%?HW6OuxN5-8Jg2I#Ap29awS<OiFHoY
z=Oh9cr)N=X7J|ILor?tt3dL7He{zVE=gJ1vzXQ3PN!lKW{oM$e--t6$nT?NTOl3w0
z_EV#J%;(Rajxgxs&YoN9E^R!7X$ZRDvYCCs5d!H`V<|z+b$}^zw|4muKtOMCkBoC<
zyx1kP`_mO1eexmBVE?48Iy)@#apx-d8zNx>Kg-soogp>;q+NaKTY8>Vlesd=Cxx$O
z&Ikea`*2##G14RpP<UZ5V&PCE-zM~*PM>k3d_I%BF<0T)><Bu at 7Gf;yv5vccK^Q&D
zmiq)d6B!21kJoV2>}shZVebdD?#64DBz^HUkA!O*#uX5g?h|nAJ1*TKxk<R7_8KNV
z%)DgRZ6{(Jjr#cl0k9Pa`x9zCbhZIvY<8u`n-Dj+`;;A at cN!N8+}lJq<!Uk$4Eng-
z)XQ&Qqq`tH$`MSytjrpFk=ovpy|PJ!NNa|YP~(lfpCTF_zuDB;6X<=lFEh^7UGF2=
z!o4HB%T}sdM_K4$uIBZ?v&i(l#HXbBKSFQ}XAMdMTD+Vk)u#>e6HYw6-)6+GLK!$N
zL%jWKT=;`i%%?efl2aUMR*5Lm$U!Ufi{~%)dUMuQy_?rRIGqyl9M56zU)VE6EG?)P
zn~#Gy4>jRiy$5XsUaqKUs2_Q#CVi&feeqJw at zo(r&Z#%buQfxGR1oYy38rW27eLoD
zJ5x|>2+IP-!9hnpiSdjf$76bKTCn{wJ9b=h!4NHh^=%A`i+yUvHT6iWk?6Y3p{i$y
z&F9@&>U`fc05w3$zc>BA;2H$^KgADGnZEi-b^s90NgF?k2mXy8($expkLWJ*SO{Ed
z8+SA~qBqB6|G?hwlGb-jEXO`jQpEq_;fHV2hf9kt`ou<dfQ at V@H){{-)7;FtB>i~y
zR$c0 at uuhSq<!YU1*aYBB-0C$65{zY7zAWix;P7AZS(*L6`PGp9T8B!5lyr|DlOwSe
z4&;V*dgpuNsF(%rlVxxU?EjO3u5ZnPam$X#I at mX-;J-`GgBUJrXLQ at nukUq>TW3Fi
zsXM%l!nZR=SN=t!PE>SIG2i#+3~}7fRK5GvQ%w)#QY6_JClWUIVNR<91vRE>p!JIl
zQnGXBa2MObT??5%ZsJxse`K7B<=v{lqZcE!41yrTS%#59Om*l)d{5n)MZ=3zV=`6x
zb<+O_<pj8n#qhQxLBcs!n)`2+NHCW4oQ~6v!AFN-(q}^5wP`sc7Oz%4L^&?tIK>*~
z9)c^_{Pc0K>q7!5;!&a}0fXsxz#<qQyQRnm8#JkDnRXIbxK1Lh_rm4EQFp}l{pE;V
zQ)>L|^2AN^H3Jvm%k%Tt!JL{yCcYEp=QB5Om$n0SBrB~r=g?^j5c)v3YDMk`E<wp!
zk`-<r)KOH!+reIFce`toNJ^m2>zS7gUh+}Nl;cA|1t3(7&JrcueQ8yIr!|TNsv7eZ
z5MV)OBB*rN#Dn_5SlACH`ehfc8fmK=az4r9`YBsLV;5S33lfTR<5<_dPI_tnuEB(U
z4_HR=V6iS(6_w3uthmap%I91Px~_IUCsGA at ejBcm60KNmh)QdJG9KWufEyR|j?}LN
zL)DS#Hzg9I6#%kFm3}S;KXFQ5BTTbrTND at X8@MDGtdiZa)mgI22 at Tp=l{zmDHzEpC
zhQtQ%!-&hwUZ~BIPnvt at 79{0Sq4Apt1jn&OqS3BNQ6$qz=D&E(<`Wko%uEWLVG$Ol
zyT|=mDC|vJq_VW at g$qi%n#cYgRh*>*k8E)h)RuxlcMWvTKtYBb_$Uy<M>Y1Cx_N`i
zA0m^vCAg%zo~or0;ZpgW;}sJW^}S at g*W=WC)=3w_#|Yjv$u2Dl%KR2&T3YXqcC0r$
zy!`wTX91G7u%Tg-i7h0N58-a15U0yBy(tn{eI3LC<i_6RL&K=CsTbvQ{$p<qq9Gt|
zUf3lbHY+zcY+vrL?iZ>gj(-J&R5#UECX0p6FfyG#TWwS~1y$bH)=X{cLh2Dj`D(DY
z)6Fu{wle3<VAPVfhYOaUCy7Qtr(*h{RE@!hJnmWkK0+do9uX}PSB~j at 6YM92vIR|O
zE6rKN&nVytShY`FrD$8kylGRvF&u6g2 at 3x7YwW+A^Sh-&Ye$^<r(F|Tt35PQPxQkA
z>tb3 at WR=Z6bDr5Z4k)cZ(CABNDCW!nEr_M|JbTM$G&t0z^F)CTM$x8)kZxSNGOeYu
zByv9CQ?ieDBoCzD%KXYABu$9fl)o32lQ(QrGo);n#~-X?onA{O&OFgW1C^sMmKd3a
zZkPrh5EjVMSUO|E%u+Xk at Cc5)oO#bSz)}*5pvxD$5$_kJrAcWy-my~rr0Q;f!@^J$
zu|C#4ZGxBRMAnJFVwjGOk}!wB17gQA8K5&s%>tQmtfeF at 5;hchGNI#3P$t`xgAil<
zK(&aiE?rA)*DLP^yX0wIY!A7-igB)umy<>Ayns;xJ|B~gC~tiCb5;p{O8^ZF^!!GC
z>m)4PwfEv|KIv)SGTrGL9ilUrCs>3oYW at NuEFGHrE&dWQ%F`pTZ6C~vH|{S(V*e7m
zPbQS5%8>(vWW*Sv9;m^&NZr~kbz3I7HM!>YpH+uFNFE9*Oj6R)ec{}Ma<)G9=$u`8
z0G0wE$%fRPTH}o1*+F(a1bIR<MCUqh<pJ3bab&j<@wmAk at ZG2R_tlvX(yjcugSY*P
z0dPI)<6GOB5GfY4eSpp at 6DnBwo^KLB0U|tJM={iGrg{p8Xc^``b9<!gz$z};cVcfm
zg;qX>O-?%%*I*39>-(%o!pSTR<8+gAOtS4m>P;vzanD(xd%vAF4uwJI{!@Pbo0SGl
zG+v at wB+Ws1_6RKOAqu|bFdkj_=biIYMk?xXj+<Y87gk!M=ojQ(F4YblC)EduW!HQH
zV47e2i*XW^S?%z<bLD0X>P^c|BI=P%RoXucG%EU+cvtXB4~Ld{kk|>pow^UXt#ixY
zlmdt(RX{_)O%X%y+PNBHU(8XstuqD!<Rg!pLzq$- at y9`f4tZz7;jnIz at Dl-I*0Xr!
zpkyDpcW^nm at sH-4A$uoSfG&nM`1X(he7!Zbnnu$zR8v{LekX^0zzPx}|K}-N>*<_B
zc8tl8UecA<keAR|-q;**2Xz=7<ttKLLbqEgi5n-9ciM-(pKWm+kzj>jiZko3ET0qN
zR}hjWImH+I;FzcCUOirqZe;<Jwm47yv(uE=+bMr9>FLsPeVSR0;wiz%wG|g#1Oy2{
zyrrJ39UvODyHZSe)U<^E%us;_e#)nwYWJv)Beka7A`P#ppTNh5_ELPb_DlqX3WW8Y
zXIxclY6GRk)OpGXAe+NJk&(*h98YX3ODsQQG2E?ASkt$JOgI4CrU=r--_OeH)zy!~
z at 3ck@>E4J-+`OoiC at 0Zz2_btHjQE7kN_gTj--)!RgZt(7(ud- at _v4xu<(y}?Atz4&
z_e_3Z;q<h%O|S&%w7|II$-y(_Qfg!I5({V~-)=<cCW|YpJT}cauQAPB<>Ko6=S)O;
z*!P4BRrJvSZ(X(3s$@@!4O-AMFEFuXhXDT_&oD>>+)qIA(Om`mUq=-uyX;_*Y$C4t
zantYR7Ic`c|K0M~H0QHUv|xe?kl^jngI2u=vSGxD_BZ?usuf7&WnXsF{8s}G-jOFD
z<N5jF!o2iV<!<hV*v%;~hp`7Nt-y4zB7QN*o2T1rv10_8?a;P}c>7x at 9;fK}m8ddL
zAi`VFoacAU!4)K(->>$fD549wynR9{dZEZ&@Wn`>Z^L=qvA~k(Nn=&t2=rW-(;u`1
z6 at 1{RvA^`gI7o515*$G^uM0+N1+{4uzvf?N{KYa8^%IXYd?M};Ng>#n)j*ZX;0 at Xe
z)M at a^=PD~7aXoRv>H@%$ri2&+O!$15yIuS?nuu<0=5I))=xT51#Ynwgk=9nWlnPt%
z#xtr|cKeGE1q#h!QjaM*Fit<vEDx(>fVln7 at Ew)#%l40`$yLqnr5ty-(Y%k;uoH{O
zajnJD;d8fBB+6U|&u*!ELIw0 at WVGseIB>ENFysozf&v`hOhyzs at o*fU2u~-9q7E}y
z{={!!?ILP=ll;HB-&X$S0BE7mPEPlRQyx;>V`1<^)uIfp9UlGRtcmQB6V|Pwg}MUZ
zGz=+oT9Dk*b?~WH6|9Gp(r?0l__^PFk4KO!jyt68s?kZ9@$wVA=q(f6IQ7#ufp0~E
za<jYK<EFJ`9I5wJyn3x04YlR-7oVU>0Ftgju8Ei+{Gpy7Ecqtd`h8dhw7$x^v43)4
ziMe-~B|#*L#ei<M5>>+=T0lMj^>Izhs2>O?u8C2#H4sW`nf8r5r#;86i|bZvaB%p!
zE^q4b!GhG1^P>Vzna at 3Nf7pVb8bB=`$^Vv&|9gZizU4X3s?e!}GQsRQV>@~L<KnHM
zJjP*lSwZ2?*uKL8pV-<hN-T~bi8mzh3^~ZOKiNoTxU7PQ!~l*nagyJU8y16_Mt);}
znLb_*lspu_n at j`)*%km at 2F13kz0#^Z6+zSU&I+V}5~=r$pIV$NC=<<Ie;_i)WXwlg
z0M-Ll2{cPj8v_I@?V at +!m|Zh0v@}g)*+;XL-jcd>CHEn>q+7a^uQg=J-tObf1j|gd
zmXsB4Zb2vTT{WGlV!fQ;{y at mv1^!`En&47RpCKX5k9)rah|yM(_*`i!Ci}*k*=ELg
z7c)uelWt6_A2?^_U0cbhGGp!gyiOrHu_FsD4e`ycUbb;Jsga)-v*n93NQPC2obP;i
zUpjPKsuyml623z%=69N1J|x8BGsL8GDf${tkC;y9i`5k6#XH?2bsDF`=lU(9ozZ+t
z at u|aw{wN^xS at y`JNznVtFliti_h7Va(o<<Fiiig(!`Vrb&t$_>_N?|wVkQeQrJ~%=
zS2<A=IFtF7GU4mavs-8u)x&@S5=A>9FZu{hC&&0rb96)?^YbKsCR<tG?xpy=r!RZg
z10u7-8(saAuCZH42GwLHM~jWcyJck(zAKK^G`N$4F=8DkOCh%@RB2lT+qRt*CkG_F
z_Y at g+QODOllCg#Wq87nbN-OJdL-=7N0j7Ml=5Zsmw!4^*x}3+Y>c|m3pi`g^CLyOn
zbVgYUA$%@0+~#xF{EOJZN-PITZE2N)+yJRK^YwHmdWGH|_3Zen5*8Xq)WyFhF|bSf
zgD}ZKu^N7$FSn4yF5|?SwXit52q-glrow}f31Ee!PdXiXdjNIGUfsCX>3=8gSn2N{
zdt|MS=Ajgq<>2lo{$arm>>StUBsgS%T6yn#xr)4r+2h&H<%<;EV$!*0=;(I6#f=y5
z6&jWj5A!>_&JGj85ZjNXgkzGLj`!4f0Ty?Ozo|!8Ecl<({OB<V&V8$P3};GHk3sS>
z^kfq!u0ffIW=J-N%5miDd8)Tfc+zo^P!Bi8t at Mr6?!82O!VTO?uwIs1JCHv9|3i<>
z at Rn4zQGG1k5>5;}$65H81`CmCTIDWhl$>gZ5YiEMH=(2BkL|Yz=wPTD7IlT`F9niR
zQywW|L%^8KxHV*y<!2J%{KN|<V`SI$<~W4Qe<glA5N3{D;E<E1N8R7TKYfwH=YxPt
zE{ba77q`t5?+|`tG`H~2sUfkQx=;JYI%-CNGfGY>Q%@Ye32cc4(0tP*hhN-PafhdD
z1{G(zM4x|lzGrU~Z$s`aB~B(>DsG^o+fxcHSLQiY>~lDxasyRznqiX-ug}sLmnk%I
zI{9wZ2v%%c^2q$F!{p7EIT&*+wQVfo=3`RWqKW0N)pk>auP=d?SlsQ_3bu>(PTolE
zK4mp9QG^Lj$_5_{x9<Z%l{nd9{aZtVKNf0$hCTW^RHYz<ivYSv<nNLp{i}$<S=c6t
zyWfUQ5qAaFtV~PV|2=u;FRmu$)!}oK&B(C=v)9G6T?UHH$lBzCMdoTCTTkOTM3MQ_
z$A)$O8<V5!k}xcHZY!U`K0}~?YR4lA#y9DJ6-3pXy%?F58o)=L{E#{Sd|hVt<V<Uy
z;8)xY*)&a3*^jz2Q!E`6j(V2#NDuMfN=CTU=nVFd(Gq!XmWu?<BIU at hcG1Yy8MITz
zbqxAjN!{nMDT8ODUmI0crn2f{zhZ2UGZjOLA at 92RV3-gQxAiQh5wOZoxjNb~|D~_4
z`-)Dgc&^5MpU}k)M5rF<6OMkkJG4~rmQsQGZ59L4lb)^#ubQ9X1iRP2rW1u<b~^wL
zk9?$DpOtKN4byT!6r-zMkjJ**(6UNIEoW8w948e$PGpY6jZv`aFG8rembVhEx&i*B
zut>#h at 3$7n(@|A;{k+Z^bqj*pXB<BSL$F?zk4rf0yQ&7qFRq*wSE>DtCoK!a+-2J+
zbr!DN8peV-#ut&NW!^`P;Jnlfi<gX93|F0EIsC;1vGqlSX8)=a(&1p<1*B=Fzf$Wd
z(E)Pe7BR3u7t;$0n*{xM_g8TgN;Vd9q+Fb^?}z!~LxEgOBLsMtQ3TC$K>TLwlyOpa
zr_TrLXgplGM8vCmGJ(PJV8B7M1>-AV_yt$k_;O6xUP%;gt07f2iaI}j=cP{xp2GA(
zxXiPAgS5AyYM%dOQ(_|Jk*<=IG0>jL_RRdz;~y3x-H16A&z`Gog)qmA<Bh&w7mi*w
z<tsb0LDL|89!sQW7KtzeP@}Q2`WJYKs8Ir~+3q7|NJ$mxQOMbLG}-mUs`NQD>Wv__
z!FgBV1qFqI%d)KeaB2;F@}AhbWx+4wn*HJYT}v4%Q-*eA{s7#R-<YUI`P<hP%DVuE
zz5Ww*lmwAeh>ukpTo!<-woAlLWhT2A%I_swWc#2<0$>ogVOi+GTiGq0^_j;=#4ni~
z)4m)JLVw6!l-U9v#KG{K$`Dmn1K#`hmD>of&n&n6?Av6N%^=mL>jUDVKP`xWmv5>r
z{Nw**Zrf}BDHak%5VxK!BDSh#+;IILdKHMg=T7rZD}$QY>qlgfs+zZ(F0#biqU{NM
zx~Xkf)YPIYG;O;0B5sO+O1Bh>d|>a30!aSeqzqOFduT=ct6%zHW(?tWXJjPaBMpIf
zA#>;wBP~I*$>d9ylpy>$SJJ{S0>`E2{8xr{QU^JZ>ffV|&YfBeK8Y=Mj^}ktb`~Qv
zHwCCuT5_H9TN=`wI6<1kyi|~_fFO$%THA1HJ6LyC{>ty>P(xjf6{)rJjplh$8{K2A
znb%L|GyJN_U7)jGQ}z`P_>Bdb<NkgNlk5s*{i5;~D5qR?BUqi^Y3bopK=I`XF&~C+
zNZaM=-B&$?VCQ2{<kCr?6hbkYa3BTBv&9Q-;l7hK4?-M|ck<l4Fy43<A9pMda$7$r
zU&`J6W at JOypfag2;=6HvI+jf}Rr at SoGTZy=rvTj($ftx&tWH$?^4$Bm1uYq;s5)|1
zqNI5wG-nE!{w_zpx7U^s&=7XG*^^$b=*zE~YDW2~>3M#W%)m1R=_=*d2)AmiF)p0Z
zB9dA5=M`(URS9d1YJTJ=6c$IJ_myg4#qxIgjeqnu9nUjo>`~r*LebE8V_E%m*HV~Y
zyyrJP3yHiQYOYK830<!jK=e|gD%a`B6n<1p^evRcVGd&<$TKi{ajMq@;|LAJaCWn6
zEXCd|4SL4fEuOWdpE;a!m23#yn46#g+K+n4{yy=Nj*VPRIq&@GF`e&YO5%zV9YmNm
zpOFnjevz_#yc8-GBSNk<o&MapNjphQVa|Ts86Lres86h7GY6Wshlq@}zt1LVq9l`H
zHV`JP4GCZC5v+ol8A>XkhLkU1W5tX_ at Iak><K5T^aC*q*Qib_Lg at l%8jVqP_x`si$
zKBEu)r52CQLyIiUBPkE4Z?Bt`=3Tok1S4Wds%q`=<k5hjSy-j74*2Ptu#~uXufFFU
z&#F2=k<i90NK0Y?L#W7mL|Pj at Jq2aZR*1t9IuU2REyG?V!ISfN^h&aGMe^4u=p~la
zYSS at N<7Kw9eMTH%NUXV)P`2>+vvvJ*iodq{WsrB$J#AUPF}6_~5_<w+VJ(|7|B_zl
z4Q7Oeewnh$i{>BZW=0X;TC!rR_h1R;rZqwhZo$Z$PN2lQOhbZOfqzck#`9i~^H<}c
zRk%%AHyEoQgV<gs2j$4?(1Tc_g5MU|5r)E#T%{%5U0`ed?ZYuSs@)GGDX1yFH at 3Fh
zta|$yv6_AY9624YS<Q}SwsJP|mEmuFYFGUPG#aP(sR(x;>&FwbN~&zTmJ)ZFxd$;I
z1vk_6<tFg~@j;<;EXM=Qtk~(m5qO6JEzQ}~o_Y;VE^9ek(r6|X{bEPX&=;CWfS!?T
z%<oRTL|dwFKREh{{zSxU#>SndLX2PajQt2h;2!gyrDiEq)<83#Uz46 at eEeu3xV*VE
z7*D`cJwwwl{ey{_rf_k;h*3th!0{?haTv*|S7S#Mv&{&^PGdZ8IMg7F#rp at 2x1qhA
zo>LGT6~5P|78h`gMfPTg>^Wb{YT^^I>Jb)rWgJZTOyHS)e5-y`GfmJCqCUxj4M#YP
zL-QuF+;qa<m*>cNjU*BOdM}We5rc=rfv&mX&Udw%SmM;;CzFzA>0Y82fr$A|jPL>&
zke^~O^Ednd)N!T>>597NQA7Jn*o7zPP*|7|tY1`63uI!^8_6}c at 1+&Y+a1h)k?C#~
z_kbZE5StWK7w!Tp_?ozvQrK~!fuSxNfLPRk$3CQ>A6&|jsD<*XrC>KgZ%pwx?;O2}
zt{i00Ref*!Mb4`s%>iu6p-1tC{~UT-?0DsSk+*n2d<Y`Kh}c?@0<C8`x#EZu-Zf^a
zZ=#v0&Q#pP at Uf$7M+pvo?b{!m*%ylsqQal>tUGl{a!&g5Vtks?+)kc<vqrl`b!dgV
z!7_n?DF|>8(S9b&OWN_`qdi0wif3;@p%7PSgK639e7?Sw7(1?r0VnD_za3R{k9X!y
zR3zLCfZJd!D@=$AF3BdI`A*C2xbL0DKQl*=pE?ur|MXHmDdDyCMvcU;=ygnK6>m`j
z(uE&l%)K=p%z>Y6F3 at sv(Fb7dJpCleG`n(3{YzfrgPIi3Dg#0gWPQ13R`!#fecH8W
zw>vrLCIClpMne7E*~%D|1AAzCo^{O);sP#V!7=cYQo=rG$#%wOm5c0=c{IvWkRy at N
z$&m`sOBX8j_VTf&Q*WJIdG&1$J_WR`vSy_8q$nH#A!{zineN_xe|qq>ms|)JFz&A9
z`3EYXeZ(6oqKm1iDEzW1p0ki7J5l8aLEz at O!QkC~Asda}7jB#vVe&T=rM~?e&{%!2
zHZd{+PuX at U>y5KPrq2t;{PZWDOWvkuK0w|DmP+d6>?^V9h&=?hi0=rBOPa+iZd?Zs
z2`gXfQ3#GP9KVwBH<4W;=o8SURkNWDN9i})U^lwnC#Iq(oT`&NXSIp*om5mn7ir-v
z`NX|rSU~gB>@4XP!ChN7I8hZ^#x822^dV}eEvv4Gn3$DhtO_#+^sM}V6%qYG!AlQN
zD#z!|GyQM{PF>i1U<P%J6k^;tP2Jrl_>4+%-M3B49n4d4kNkYU at D)`*u#A$$&LGF9
zJ&Nj{X*($3{0&Wm-*2%RpOj!LECU22E^SqW0dIUk1PI>WDPM;kW|L)9lELBi4?o)%
z&G|Xv8>;PkcQHxBdmKx+Du4|bkf&2l6O|0op3&Lc<&!k*6_!ffXY}2HyTf{MZu4x$
zCd3Rr^zs=bmyGiz{S-id4ex{U2-Ukgf=X9EI5%W0V=yz`;Fo5A;@Mf^JLShVz at u75
zeT0z0H0PTZ3hb0*^!akgs6bwqF~!7yyATm8^>=I{A!c071SUx&iY_MX`z`Yd7e#wE
zJb&Kq;Ii?<5th0k4{f00QlmN at vIqvXX!>5ptE08a3pmHU?*ijJRH}4)PUrJpoZ3-D
zw%=da$4|^?s{u+Yb5LoPJ_0?Lyl+UJB|?>+@@t62G!T7Os7rc|?sfDgF<*OgIxQOW
z1y7bWUg68Ir|hh+sih*))?JS<SsSx1+Tba6{Se!Mo!o at mPiV3gMP2T>ZZfO}3J`j`
zc%aiOUpz^i*Ipn*$=(f6(=R`$yZ#U(N}4^??iQ5ldLG{`fjF1>+f^A3pP<)Z$WPm?
z3caZ}DGSn)+sWrVxhug+azSEhV6CO5-svXT+m5 at +cH%)3^o)Qsded>VB7lFZ{?Xzb
z;@>K{p*1v`azKlVOymzgZCbxO{rJ$wjm~`<rxp>Y=x7sSK#{%@50pc1-56_JmMbJt
z at j^Mk%71uPy|5G5l$+wJfwnWpJyoB;Pi2K!bxpg(Cj_EF_q1Ma3S$9aP_LRo*>eZE
zf0ZUM?bS=ZIk8>4gz~P8=nW?G%hZj$sD+fx6vzn=a?_|wv;d`VFPpU@$4NgzHs|$6
zh!nXh^6fUeP4K#BZwk+?yMkC4tM%n_S59aKdk694Cxkw}157m_%rAys)rqit)K6_)
z`IJn*g|PU9i at Py^LvnDVf}v|fSP1lXVd+155#X_hD|zqEGo=svBXXB)w&MS(1Ov at D
zbg~mW5C6?IgwPHg-orweX$`Xxyl)N%-AYG75$TWZ&)EDFyDnfr#;wW~5fLIqYlZE;
zeynth?Uc>EkSkR~7D_FwhfHA(q*v^pAjU0LFsDv<2Z61~?R|ap7BJdddQ{{J&<77_
z1DBEoU6v2}y!Cx=zH at Jucbi4<LELicV at suEE|2i2Zl*F005y!&rh%bNMmFGk at eIl=
zGXz#&iXIiUtLKKQPT+OD`r{Pb=%HtnpH=kC#@`=dfL-u?E0u^PwEM86!h;qLKvV4q
zY`|zvu}!1kXueDEE+3_ff%UOD at J7FRojI>ezi*A;ZsXvlK*LzYa&*(!+L)sCK0Fo{
z_5{Kxvt!|QX~s>1CtdzW3s0WXu5)~uZhj%qI;$GKjs30eClH=p_p1bSkGE?8n?>Ws
znfOhaiA1|ifFsrn&!t-!_44Q&zsfCPh7O-6Z<(^ul;Q|- at KFg8sb<s^C%!?lgHPOP
zmehkLwjRjd_4S`00cdp%nr)-%XCof++tP3F4;BD1H5XO=M-gutcNc;SvIe|YhkO4`
zS|147?}@ec6uyk}!FJ8PFo at U2=PwzSoRp39MtMu*u-LL*zI267<l>Ag$<bNu1;XGf
z<>X0b(N3ofanyTr&_BgE{+YRR?Om%10Cs4 at ZG$}Qn9(z7MT4Y%Y?gj<0jGO-v+$qf
znp4HgO$76#!Xr(=D<-oDk2(hE)cZ}xr8p~!+m7 at qyE(ZcdS7DqzjM|{6Lno!t5$|<
zB5^-JP6;`&%)sSf11l(-(aHo(3xKZ+^fx9<Jc0m5?$##o%xHFL_e3Xu?!2i75km}^
z$Jfm at cM#yhiP|37UChFArNE-o2itpP26+dg1C1GJv_Kd at B#xWvb_&cC1W`$!^nPIK
z0EGqTtf;bcxhoINgfB~#a6i5MlHsAr>g8aHLJ>Ieq>Ufomt(YEm!jpTnssSXLl)R$
zz)WnsagIOqQCEN;>@=Vwb*DVa0jwRlU?)}i*Afb*gJ*|2wp31QPxnNR6>Te2`-QJZ
zyl~7_cPo|01b`P+hHIs;eRZ3~)q^eyVKB@})>Af?vb_QS{a5*gd>VGRXY-f!uSO(v
zvLN)hUh$%u&l3bN2SB~Hnjh*0-CHx at yX3JHCx^?e!qq{Ie*+)W5Jhg5!FKR~zBZxM
zTc`V<zJ|nx|Kw;=`gB{!OvA0Wz@;AWJ(X*DU(T1#?Q|buB){4V80avpIHA`lt=|$>
zr&yp1xHZ+V$=?^bKhW?GWyqF658=%dK@&r2A~dPBoB at O;Zwk2YboS{)SRA|?uQPHp
z$!~T01Px;575F2?B<T6;JDpX>N6fp&Pih^GeEngrjC6^T#vy+piJDlu|K==*S&(uX
zzMSVXy9=Aa-zL!=a$DKl<Gqk|;<rTtoAwV|EDG2KLD)opLXd=f)3b%<SY8j|_RSN@
zB`*xqyAQ!25yx#BZkg^C6(pku2;07`&(6K<$hKkp?M!V9>!{c|Yk<Of1V#XLkbSBt
z+IKYt=QhC(b2 at IiY1aH!(yeu4BQFaTPw9tA`W_2ANoq!}kX4>3XET?IFTvpbKCW?H
zP7&1Yd at p8cnV02086t~d<Crwvkj%jB`CCHh at _Nh6v*s`jikjmoM4<?tZM+Huk*x5B
zXw6F2x!Hz~CxB3R8GJExE{`b+e_cZONFluC!owTDW|B9uzccI)BCnSrB~nH7Do8t#
zL0Av>r?$?dP23De@=}jRGHRFm;9=aboA(cuIlY3<{Q=jBB#Whgw$B9k&*s<Py4z`)
zC?JmOCTtJraUj-wY;FmUmZjUc;7%loaIhDP$aQ#_J6QqW*If5*`g84L^T}D at t6rnY
zmRFVk$Hp>^_P|$_BU5DF%PV>ZHZ!)ldmY3NHU+)Up13o-2Q%^p4Nl4T2=jR_)czWk
zFSpC#hFvx}`S)m$Bdq at H^D{?QQiq}iBLwLnRg#onPme($@t(;Nw9+l{0tjln7MV2c
z5c`eHuM$sto;8Et75CMkAI84$YqA*}wx;vZjA8erXU_k=iB1sTUk1w9+rOW?J=etr
z at Bidtjzx=K+dP0ZAI2 at iW9dSdf#r2D62~d!@u8wHhB5&SH-t;;Rlk851U+;1h?_Br
z^Q&u&V*)`8t`d?y{-OU_`9%6Qc7NCqh)nKP2Tn0ZChi40NRC9E0Hk!e;K!WuY+PSz
zN`%P at fnlFmVWM<CEbJwbxGsLZ_4?uw)%ae77Rd(=2xKl&HFXWt7%d{}i<#P>Nauf~
zw^Fbej)|dK)@b1$*ZGtFOKB|}C95CEJPN3qGEzP5cqWg-b3F>wTRsb3zMB5cHzY$X
zTWG!Jh&+gQAM)4`KizYy2tL@{EIx=&YL}Ex7i9wq{xk9*t2<0!G&?c0he=AT)*^b6
zvYwmhf0C%rsMflH92O8{`m$rJx~Uw0Gzg8XEaAStG;RNS6sQyyazd$t!zE<tUNZNQ
zy7x?nQVpr6X{GyM`*`C)jGYOae3kyx(kdDjy&2IRH`tICECsoASW?_Ote&#9Qi6gj
zE6!(sy9YgcjF_5G4mmE^|G;w<G78M at nA<Tc9}~AN8yANp<s!z*z!sc{K7a#|uh&lw
zGM6BIF7-j5HgE2^1 at mj2Y4LZItQ(H8a;&uUUUr{nmy*D>|Ag|vIDe1}<M+wjsmO_L
zjQog|>GGc%9`0%bnf3H*0fykV+=>M3+hrsjvyL`oV$Fk``vKZ(&Rg_jna?ighPCnm
zkN}NJZ_e}4RRZkzNwT at Lexcz}{4sS1VQy!Ul*-V|1h^XztfqKQX}A2*l;#ePw at Utj
z$Mnuj<vIy5987e!YX|+FG}y3?DJQIhZXf}NSYbIgw3v3owOt-$s8IzZHej<&_=r(x
zTKa;n^LkALwT{TDc~BKc`G!iv$oh3hlR84;tUP%&iKJV!2P|tV5jSAQ^NQKb1dB$8
zqCJV2f1Hd?dXx<j61#IyMlB(-1Z*f$Id`+V=P3aTJ2?y at j!63?+e9=0@|WZsx8(xU
zgR at MBoe+G0r>OwAa~$?<>o%cFH1Z_n!=481bb#1~_r<jwomzi;n4A(XqH{>~c-Pd?
z!`F1l9s}Y-ydt$Ev<?Y0sXf+2m_Chz&Kr!6(1<7mH6a@=HPz*Meh4e^X25pg28QSj
z!8UCJSYZ5Wx5uFP(Uxcev1s|HRHpZoZL7uZTUQjR?7o;sE8G0)sbJ6^NMkvTjq5y_
zbvAj~rX1~6<+*)EhZjB7 at k|ripN9P$5OB&reEDG5Rx!$QtTDyqbu-X;Z98_m<fDBL
zCJ>XLJ1Z!6p4nkRbyjj^tc_{FE7KzKMc_3XNC5x8%6#rY82}RK6zE1<+q1F at V1_;&
z?#I#aq6?!b0cnt<ufchOwfc=P5}Y&<2#QOLG4Hf`d+cF--;|CRMW#r|`e^Ui`OTAR
zbu8J`DWjxRC!mpIEwZg-1O?{@!C_9U14|r5xgpRwdfy^SPD-_0IM4rI-j<OR&k5Yh
z8w0gs#gYSc4OpZsjhWT>Ton^nr+XNca~jz@{LPR#VJNhjVoZ at 12FB9Knz(iV77a>(
zK?03Dlb;{)bWyKJCke3%&766W=Q;!C988sHb9%UGYmnu?`s=#iy<#AWh4m8axC^o4
z^a<O1*z8RLSVH!6R|~rx#!|$UD(P0D($;RH1QXq=90M)Iti%OlkutCGiDTJi+z|V@
zA54nTtpslF4F(recald2gXMS%5M;WOkqN0MF9;Y at guzu`l&>}|SM3?O@$3<ZY_Q_5
zAo)4SVnK^4MHXz~AflD&OVCbhbUVG|G2Juw(jy|ZQ()R<q^pm?ZqP9xRVa2CjSi$Z
zMA=aoPJ)Pv|1e(IW!Vn>Q84<Kp>$S<T`7v(FhZO=dWv3?-!?K at 7pT@I?LKw1clnH?
z*5tnDK3C@(Y0(Pv9ArbTb*w~bga3hLwY!T);Y?XaEKMfmm0RHpo at +`USN=PRZJbst
z3uQGbCu+&zRcCW^7b(FG6 at Xq?9MJP(=4<uPU!ebo{TpBmrlYVPMv at zyK2ZfdGbQth
zp(7$<iPYyRE8tt!p}km$u{~-K10qUun6(B-z4k-4DL at X1Jh&g~a_q^dax>wC6*g<t
zp^&`;T$inEP%YzRFbep3xcno-V$}|(^JkQ*8?BuJWp3c at Hv>80KC&Fwj8_Gm-xvCG
z(~Qpw%Xl9-SC0bSrc2;tAS$>TrfXkOy=x}M9)!x5_i4ug&{bnmRz~QUEK8kHLL0 at p
z*2vFo{h5QR1Op>pQmtZpi4F5UDxmrwgC>0--lDq{dVWhEx9sO>@9rcpSRZ>~jcOaV
z-tbDFV=E23mqmVTr+f5s*e1AKs&7V<{0@{)1H=n9sv^uiVarQ17p|hHMT|c={XL19
zlm(Pxa;LL8hdMaKR4}t=XH(V?%1<98a7am0qR7lIZ*#o6z+<RkR!dsbd8XiKz9lk&
z4|%&^0B3xJw!bQ(bCMm|u`8Mh$lbrswGeDdLPcQl>ab|6A&#OnoQ0mt$w#Nq=-5iz
z77&MYdy$3$Ncmm>(d5!gC|TsL2MU$P-T at 7SIN$y9W_DM~`lx62$OvP-`fK~xAVfiy
zb&jB?Bowzst+m0UI9GT!v%?~EIqwehlS4R6b>3prOrY}Fw<M;U{H0B*;n{U@<pXU!
zBaL=+B&qB0r5UtpN2Sxaw8FmmBFQo9oOeD_k`kkTijVfaJNrYEI~!^mEG5nkn<$??
znYCp&5hlGkSS&gU5$IutBLzc(Ly#vo(1;WGAyFlLyaw0IQsnV{dk~M}x+v0AM<$2I
zoo6=uK3>Y)C5mIkzDbyn%X$XcSRJG1o0j`30<*qpe~4U_p$>q=^qCv5>#{v2x+tFS
zpyX673Rn^I2H6TlKjywXaYm(@vUDU-f$c{l0aL2buOSZHXb8pcEh<uEiF%CO2 at 6SD
zG at kH4s6O~q8Va;R at 2RF5&N|u-(qlrpHJuNjk at A@O)yF#l*_cAtPs8m<HR~i%C2rCR
zFxqU7V54c!jIz7&+k=Ds(dp9G`PFuDYsd3BWLujr at _N9+wjYLX?|@@g_V<}jSd%b*
z#is*EalC!S-mZZp{`rHJZIDsV={xQyi)s=_q+`6f*X_^d{5yT*MY=e>zEX^^Yo|s%
zVz~P-?R5u_5cUq#+_c~Cn+}w&DV*7+$29^{s&&K8${}pm$V$2apqBhBpNAh$?La?f
z7596luEf`7uE)w^%g&Q_Y(~$*Rg4FsI7iU4ZE24RRy&=+Ay*n-jJk8sj%`!C!`VBO
z;g1DBUUkg?JxO1iyh_X~Du}c(re$mKma?5Dd9QCrie|;~75?*aH)-u7D{1y;$BW77
z0o%n{Or$V0Y+VM+;mrJTiZ!%vfh33Dd~V2OklxdK4eE3nL<sG9iF9XjWMww;N%k#Q
zIH0GcV?X-iKCxWMEkfkM(O4^sajOkxZ({(t at N&Oj at xDvani5r4vyxkpBPd>0M(Ctl
zRfzhP`<hQc=uG!#h#Q@$e_Xe=fhi-Xq$XYnBY0zQ%&6cur5z8kjxy4xq~`lG9(5E|
z97w>n=>*Do at eGk$MQ!Jcj#PWkN8OL86$<^=ty^fAhCh9VgFR~J!PZtjU(cTbA?c)K
z_vC&621(LXqJ3L}jXl&yP`9BD|GqkF#VPf$T0^s{2}#{7bj(rN8A2oY6o=z`m+dY1
zC08w*l>;i;ZZL6;3Z-h2lspLr6%_{LP*XK<OxJi{|A+qji)JA}&*Bpwxq%xpP?~g8
zWswuGI>l4B3|DVLp?=!2d1)Pt#hISQKr}(XlU?K{`W|bx3Ds*~MB8xGT;S5W2SD+O
z?9zpXx_Sm1pVuz_=#nz-)&h2p6Ky<oT)`QPJb=1eFlT&ulY|fW#rSBuH%S at M%5||j
z#TKLG&`M@|S?4ZAskl4qpmh@#Adbf=LfLa5PXSDsoXa||u{QIil9`q86k5=$@i%#k
z_PTf;s1u<;aeLKQJ^1z)**m!Cv2af!ZJ?s|xGnhdnnK%mAKl#Q3W94P{t7^|wlhs?
zsH2p5);#clv at ejTpD*kS?Q<ZC-?L>lWo`Vuyg>$1jKn&=KezK?X1cK+4^9VAEs-7^
z<_F^c25BbgytZ7CxQ%RQ<osS0kV~G^&nNmD8Z|PnjsnqMpJM2<G&UyIJk8;glgih`
z=-hNw;B}bjUq^jpl6=7qKO2NGUMLf(N>AZ4%J^=W49~#J<?%f at w7;rR<RZ{<>e4cf
zY9K4x at oa#A3~4 at -p-@P}i{u5dVS9TM#gHYkKQTxxDJ&fUh<tHp#st8%JjL#x;tM$g
z+Z<bBT*Lvda#+OBzW*}t$_JGWL8bxB-7=P*wI`TWkH!FskVC=A#||*(T~+mHhEyft
z`a8}AmjuvI6W57bH7_Lu3c`g!^y2kjH6^9Aw=&8?MN^wL{pa&|z-9IzpZ!*SOZD-h
z{+eGFqCdna;5vkLPa*l>MjB&w1WpV*rIkMCeXk>9A0%C4rG?gk)XG=ByS(Ho$EqIH
zTU`<KXF<p(oQS*KPcCTMGw7_r8gOlEcFy6GV-+p-Pp^nR0WAzOqMTadrb(`!qqBr-
z7WL2c<lX6H^W^i23v<a1(AjvvMMFi|jq$Ps)r at RQ#K$Al&6oPU&anS1?xhFg*x+v9
zik?@dUgl8m=F at KC<fq%&E%W!Z!TOj|Dv2aa2hri<R#baMSaI}{b!EbAcZ&`QpouFJ
zS6~*P9EgX%EAby&jk9WB&hUiCY3izwK0=XqG44QwIb$q9vWkT#F at N2sH(h61;SB5I
zrBigtmXHZRFyA9^br~W+$r_`Wti+!|^q$DkO()#+1u`zWtgZ~2`eqvj`CmprDM%p<
zf)uj$d!4Z1q{+?J>O~Q~m#G=<ws(|-Td{gcOny5##m9d)PQ-BGL}#GA!XZYQy$aPQ
z25lafeJ;BY#E`f)KUyZ&O63HmK6!w{mNeSB+7A-`q00 at xt4bio@d(YJ#6-59!$vgO
zE4{C256<TtW|*fx2my_-6yi^^8}ycY-68_&Pt=jDoLMHO>uw7$KrENKBIfez+)h}&
zdr_kwG#Gm$&ZTG9s~N at q%_9(w!_8UC5rwRt5wzR4IzK2X8ni?-qGlKU7g(d|{~cqW
zz|@m8zWbqs!66plE^@u_rh3CS2{H~=gmxW&Z)KQM0){vRJ1%$(*wg$W$df7uYwUa;
z9S8rUsIL0Md!>680Sr?AtXqAQn{PykY0w6L%-CKmKRhnnU(nZ}??GX7Nry{+nvLL%
z@!`1^ZO+FR$UeLKscFclU==(a(Zs!mg?aNIo9UTSp6#Kk-i%{;zsuo&9s*{Fl7jOB
z>a>sXQ~Cr2Od!4EVx%*GuMJKxk`_axZbdlvtKSOMA(&6oDp(3eHu0yh0OO*@6}#`S
z1gFGPaz!B7m1&z%8{;{zli?--t3v>D>Kx3!WOQ29L7%*?R{GqW?5YrZGpT}s-`}|q
zYU0#QB&M(u4LY_*EnZ791KnM$^NhdS#WRujg(b&<Pt5D^h*1HH;2u+o5bv}G0C)}L
zRR_O8Y>e9G{m-WlKM^w+9pi$Hb0TKd2Cy&aE|eptn#R>32wi001LENtdEl;Af5?A}
zWKpqyl;{>VGBo*iH~#PJ2oBFlWjV}13hNr&C?#6pimzQHsT`%xYFg>CQQ?8Wn=LeO
zKp1f45^-}y2md(W%}rJZPoJX~J&YZwn|LeHlV{obn__Gq{=?-SADkB!Cq|xm%(=s&
z=anL7ATog`xu%Vd7biz>44#~b^X8h*WO03%m!%AdTJPNNiIms12St<VQcUk#(SM?~
zFrf)%04=J|eil&v&uQ at xm5cDKwKKQwN0OL8{)w_L$>qG+*l%<moY|8N7q!j)@_Aha
zwrPAT=k<(`{o>bv*oM_ at 8}arBLG!CFRif?me+=b;W9I_o3R3M*U)RTZw>%{8_I97P
zyhlT4N35-)p%3ET4bFa~9GR~1-xQ=+PeZp8%cN~vjcqc!d1qKA<vyD5;ci7I7H)>a
z?AXD8sK<w+YNI<#4g?)V`N|BzY2(}l@;)2Y(-<UqJu0BlLZVIh`L8o at Z+)f$U>Nw4
zu}Z{@f6j=!Q8HOv0i0<)!JeI*o~TsRI2(n!<-aUD5>=?-0VJJTX5s9x%5vvbxVL$w
z3%)o{pXs%f8qcX_?cv<(7FSlY8^eu at UDURc`5V;Wd_2wuxp<D?qK$$w at v`RCMk&>+
zU=)#epZh_{OKR7XkTl!hW@|D2 at R9HeinIIrr3z6>v6A>T6%2xkM|YjMw~uyC&6YoB
zS)g%;6;VEjGf{v(Nn!{faurV4ivIc1fk)o*r?rJytVEmgpluzt-Wo>;qgRt`!T^zZ
z<W*nz66vff*;H*59G;B<)kd$??@oJ?%=wd0bSRX#d&En}#Jh*mnR^D7{#8OG0O;d*
zx-f$_#E(mfgQU~c5%-txa at ybp>k<&Uz!{#n_e=!a_*0y6toRN>fI*-Wp)IpvKt~DC
zw(ranG?@#t7b-d+_rZOb==>eeCJzb;rElWX)&59x;a?Dqov!K%f786V*J$MehquLJ
zeyb|lhp%Pi5zm^$%hz7UW(JLD^+2CemNc2>;MheHcE$24nKp8bTcD^p^e{$!urqLp
z2(@wX1 at zfG&lttOc+(EPniqcpoh4xdGzh~IJwBnxPA+h|vk)JTa>>p2sHPy_`I)b$
zf+e4#tED4nZR>NeN`Fh>lXV;--g*z4%yQ&~MEft?hqgoD`R6U9HKtOgQtmtFJaAIM
zxQlgn8dR%lOot0SgXkmjO<>%vE1AGcaFJl<LYY6}I<lrH9z$K%d6u#;o+X=Hf{j4|
zZl&@TrXelnr;MhdC_X!FU(gPjfJlUlP%v4KBjM|we{-!pI0C6hK+!q0esIZ>z~4g$
zT_cwc5Jl*#Cco<KNSh5Gv1 at XBNb+6pT#>8Nx{@%6JPCAM;W(^0m at BG9tl~jNSUrfW
zumr78{Z7VREV~6|fhqDz`;k+TTzNCrC}9aRwk;1fM at 7QOH>nLEZOMo?V>mwqWnx<M
z8VQrGVP&u0!+w$Q31lesTEHlRy}{(D!YSi>@^=8i`yB`)26%lGay~XFY7jx#i+N95
zbL13r at JyX2AsRjFggvPS!LaT83f?^E_rupZNk!xOQ9)KvV$5_mFyRm}Om}Y~n4?86
z6h2dS$ppBw5Z7Ee4`#E at cr-**eBmP0EY<yhs?>SP)KW7K7sls&R^ic*gPHMxCvb^x
zIF{Cu>g|-cBGIl2lGhmd4uB9(oV*M1aBgXrN)!Vu<$x0pNqwp~#8Y2(3SPl+wXJ1G
zb&9F)!nwz)LvtD)zpmmL1>|yalLt9L(Zij=^3VGGf<XRf#M%~Jdk$BH=LCJ+ at X(;2
z<o0fJdB1&F;awv%T?$eYCU5`zJ7Sie$M~#b!uyiv0o@#Ag7=l{b6)f*%yb~UnuNA2
z=&Cx56oJ?7QX<;8AznHgyFwl55(6j$<*iYW-3ay*6_zFTM at EJVL-fXrrFnKkqfRl7
z$L=@N_v;tv5rdtkhiFolmxnQKZUIol at F}BlT|<+x^cV}5(ME^1OmQWN%t!|{LS1dE
znHP9>R2()jVhMBPEx#m~s=?J62e=km&K_C>#{a?1tut08HcBAo`X`>cLQ?u*4_-Bf
z$@k97_k;H?q6o5MF8hV8>Jv{DbER~$E$`QPwF=r*S_;dPDvfyV(w>EJAt`3dJcM(l
z-3z#+3lS+p40?rYOGN35`<(uut at 1#85u)o4yngBtN9BuRDXe^f%?UV7kYN+80d_QP
z6nh;Ycbj|rjmmH)?nr`I*D)^&aHoaFI|qI`W04EEC}dxBL-4`Hp~3L%j_e^THByb3
z&+IT1i26$38+CyAeT;F*BVW!wfeI;fCR__;^AUKF`eMkLCe6?k$utoEmYsBQ!Bd>`
zn%3k at y<);FM%27e);r7{(>WQg!#Z&dRv(tcO%CX9Ix5sfK{EPQmrbC&XBoo~+R80J
zxKzi#0qWG<LRkzd?QMN*D$PhvO6^BC!1j2WLIjpw&L4*l4g3A#?ev20-Ulu}t`C%4
zSXtdTD7*6y8Wd&sVo#@bW)N9}>?S`&Xe#|2CJ`|PSdYWk47N{Z`*CNUuhXP8>?+;7
zJ<y+igrr>_)~q?!TELF>*@YHP?{G3Qni*hm9#NY?nx90OMw#Et3fapb<90LB)POcY
z)M+?6@}CP5Z<vY!f-HW_ZNxuEb}$M{j{ITJ=oWjfMtiWT!bO%qmm3Lr<2fJC(3qE7
zng0O<T}g(@iBPTi&{rj!iO9V?4w0zGt725xnr47Pwwdbx%H{+*qQl9wXj<FxxNF7s
z=Qh%9ITm+JSJ(eS6$;;`Vv+w at C8SY^2cQX$36nxS@=;Z{JRy0I;-9hiR-2EJDRip)
zcOe4DkITD@{bJ+Yla~&meRuBI8I}Xh;q~eQRVm(K9FA<(3|F)cVqLymz@(-us`b-X
zVYpb45mFg|=$oDOAgH*DLF%wfd69_&0Ml-kQ^h#+Hi6wt4D7@~!?IyU&ZE_{0?P7|
zCj{gl7T))T$TWNNFhN*Yo5gH}vQvac;M8BXq)fdB*x-v#H`{barg~7Mv`2R3jsb-C
z*vvHsHBpl??9 at tpTMyAYWspFe+drxA&_q|UM3S(Ge6xXqbi0q{P^j55V=u$E7acv6
zPJEkzvKjXy)qB=El17hmlHp^X-cA&$rFOZQ4Bq~&kZzXN|E1Na`lUPoJIe$x!VZ8s
zKF@=(onk&I%D=98GyRw$Fn`~RFWMDzgdeB5rk?H0r>wPGSp7E;S8ojNk&kz-+17kW
z-xqy0Xqdx2Y93P?_afG3wMg&MF)0if&U&*mUw{H;?th{Ljl;apbHG<@JwfEsKg5^+
zZ0O(ss?`1Bz2`S3poAItw$P)N)6KgdMO^^#nAMe?u^nvn+FSvqlbgGQC2bVxyB!Y?
zhtQ(Hzj{@K^FQ}|44p`TMka-Vb|QEYnc|~JRT)<vyWlb4a|IP6yJ|1!HDRH0Hi-UY
z123^J6RCPcnt*W;u|=5VNY^vdtTd$I8qycDh$wwqVE$FJxrQC8>FELtLk3rFV;Yac
zVB{Vr;TrYsbT6(2YW#fs`Uug5BEO|=>IAH`bSroH@$CUfjZf2gP2$sLJTyE-AA$O6
zNRrvg6c8`BM^w_wxUL#ii7Dvsxj$D)lDs`q4&#ynY2?UtKwFVs%Ot|vH-r3jI=Olx
z#dICI44lqJb`xi7r0_Zu54P|7ijHM)R1{4K%Xk8SW`V$TLDikKLnnz^WfuOW<3x8p
z{4K`gQg!%Q?h?KC`_P at U7x|HzSA3`|MSmv)0}O?jPP%9vUG#|Loz&Kzb?d*)X0AV4
zBB4j+NO&ByP at L<xJu^!Xl56xAY5v3N3*wBv?cDc5RTP7_W9JRH45%BXrz34672Dst
zWm@<g-gRtmSLI}xUO@||1uIN0*nidgPkJ>)s at kMLLll7U?v}_DgFPN#0mYhQl|+Xr
z`TeVuN1VY_&{78L59294s&e~XlV4Me$|?c(2L>EEN&}sJ!+P7WVIG2&;GBFA=}1d+
zzf95>;Z|S*iK((SpwXk at XjkqEWXgk(%~-)X7cD9LlH&MuSKr2E#N#_bMD2b`{h=vD
zu&zP{Tl&T at r<?%$ToIt~H2OO^;6MXu9E^1OJnRH@@N=}w5Y8e(c}%f-aS4e-&`HL?
z;d7hGxN2 at G%1!vyB%J&CrkkJcKI*9mBBDf7xUnG|P}X73b4^5P9qs$?L#Vw0GJx79
zJSQgWTW!aeeP1Iyzdee?jByc`fKF0fYMMrT6#pILqVniiMT%QA1Ep(nU^`0ZgwTQS
z;s_Qwoek5c&{;K633%%qJS*oRdI`>;_S>?IDuNHuPM+yFxT5}c3{N<pXru0}ijDIx
zleU%6W>is#6IC?$1&<p!)q%Caz>TB^?MWl(m-IGJWyO%{2?NMoxO*3>G%#UBm at oD0
z0K2lc=Uk3SxaM1z6qTlh7&8DhK+3;J;9mtUXQbwr)V}`DWO<a~Wu2379_`g`SQ?!g
z?oMT`fHJipOQvsUre3`H&)fg}-a|ckH|ifFRME01mCUE4hoCq46ShS~O<T8FL#88?
zJhV&w8x2&E+<5q`K(FP~UD&lvatdn&=JuxchRW=nFBmYVwriTeVd!9dDIc{O at cC8L
zeQ7{Lh7dmA!c;zMfOme&Dl%%0_%bn0Rb_L$i at NMkep_Ael53<Xp&8 at k8_a#RS&K>z
zhVgOy%(VH-?&_0i+JG7k-qAp~)`|Qr&hjl6*^&CLNV~%`6)*$L*@ZT-!7Ay2vtU%c
z!?Fwc$J@}XXlW-n+u2(og!cFeA%&||nLkskxq?U0lR?TO(P@!Jb0E%jO`7P8%6o&6
zT806Fsx}TeO|#U)W(Or9I=I;QwT9?p)oRA93@<FEL~p64?|Kx7#&AK)H_<heMTxA2
z^FT+HGVDnSgaq!(90_I)X3PXxG$8AAM}|{HEbq=6sv0UVvz(|v8g-v91nWHH1(lcD
zN}_VMX<fDK{8mP8z4b?o065*nNn$vr53Mw&Jine0BRNNrlA*^QQEKmybvA!)tYv-Z
zCdU94@#QhDappvdWAsk&OYF>tLH?JEhI)`$HtH2u_rL*!=`d=Hi#jlOh@!-=10N)>
z8rjVe6_P{>lG(!nTd=MGA;r+xfM{-;;|U+NnL&)T^`-dHsQ$DZQL+MTPT)FuqpV5?
z;Wl!Pm at t%u?|soR`6u<AMvC@?FN&31G%s$tLbQ3|mW-mZm5SC99!K=z4JmGfYkdcJ
zITgP8UDH}*cQ4cqHOr<2f+%%)jdn$97q0M?D(r!95VbYR!F#yuK$d9?YZvr#JI+cL
z^e2-MCpc<}zQ~p)bUe`(IWCTPl^arN(>5pVD;2}KW8aCf{ch2PRbJ5|A`ix5%8r6I
z>xm}ceaPB=2!PvIsOZy_89#L+e$it{7+#9faMTXkxXYEp0xGCSbAxVd1bjPkYrdQ%
z>2rbUl0hPj^ZLr9vSN-?{)KT+Ol$fUFl6rQsAppBK`dtn!KM-j>IH6W9gsxz)hGM@
zS7UmUj2(RyxCxnjNqz*)in$n|PF9&{wNm~VH=(qQpC1`tw at wjca!dlQ!}AespWj{x
zDC-C6i^A97%|6#Oe^sqZtdzZI at fUMlOSnb#e*fsa7tO$yx76Eq?N9zn4O0{PqGRuw
zqn3C?BP0&R?dd=y=Z;C$WuAPYJkxQH at HU9g$kucFhl!q_3^l$|V{Wr{!Ote8_VR8F
z^zWE<mg2y-UpB}y8&}OdzqNVup at CsMt!{bGeIzfEt*#Gyceh&gVx;x3&lkrISEM0V
zR3xS7CA5D1s<MWoAt<foktPDJIM~Szdr^qL4N71*;3f4Og#WCJr;=+#<v#sG!_)pJ
z&k)R-eA2C|#zA~m4^f=gM2ghY=I#<gC~XJinar(T)*6z&1~*NU0B2ybL)9o-#y8m=
zlZB$q*@>1fl3Pt%<WeyB#7ezk9v=NC`$q}8?(Ti+VJz}#sCn|Q&Q$I^b;tq3d>r?f
zcP`-UtYAAGMISt>r)$F*p7z3{R?NXXR+f1p#F9T!q#}n=Qmb}={SWdytE5S9Vno22
zE8F&m-yB0m$Y>f5_f}8=@5nZZuT|`gCjxXj<_txekBP_qvRJRcsy$QC&g6)wH&9<m
z8C)|%4Xd1#!E>>z_3A|z)#lyhyvh3wL^~2iSdV-(yTr7{L%`n6(Ej4?TUgya0bYar
zS{n9C3G`VAnsiZP9URRBsMeqRgrlu)Hb5>#T&L+^?lwIrO~j3A+nbI?C+(YE&WegQ
zn(`X2S1f|>;DSv|;}8dTPW#-bwr8=gnwuqtc#*^}DtR`$D5w8Yrt};10M{97U%kYa
z?pmz%dfK2P2MzblawW at 4=&HYq76PhkY&-8xXo1dnA2g{J-4;R4Y{0^`n?(p?Vm_ye
zOPiDKX9>ukF%MKd;Cp9Xt*=U}kKW8fABnS{9H;meNv;egS_igv>Q_50MH-qe;?s$u
zoc^z=z04AtjVQeX6tscRQ796$SW%4REFoL>1h-Drk&$TfQ4zfv2RyVLLhC`eVpx4i
z7zAm|SQP6NN(p}(9ptM8vbd<le=PDY;qK>jN$E$p)<ou~{ws<K6VbN(?Lz_Gr at 7)f
zp>zFhYU4k7-hY?vQoFAOi8V(xq at -+lv|i7}dzDnbg==o3)m at Y}YCvO>gGKl+`~(_x
zhN|bIddk3l?ncvjYu4}?sr2pau9=Nbxy%{jXfjI(AK%V;78}VAhaL1jQ4$Zaj;YkP
z9LR(6R(zqj7oRL}?Nho0zIH%Q;rhV)BE-Ki=LYu`(6Xh3$8R7Vj_e!EJdRUP;y0K^
zLHE`|91hV7=uflM1YxF-EN}7flAGRy&b0pm-brR{O3xMO8yvK43+bX<Qb+us{-K4A
z2jypKZ>bH2z!xToUo+Wcw31o%|G(K4{FNymwH;5&gxkdGxp7PCbc+1SLHq9Q;6Pg=
z&cdYRlH<i5Bfvjwp~Er|@%4TV3ooN_6Z)b*!0GvkMQz$+3z%;`p;O;y=jViZ2g5($
zc3S%6tA{|grt at ABsxiAQuOheLCf1Z<^qcV=ak(Y6LFt#imB_&xhld1#C&Z0cqAlyA
zp$|k{N;t~x|9U5XI(PLE<WHaMJ)DCo?CZr50_}S$;_9V{JLCYFZi>V{seL at TxD5r;
z;>Igg)Xd+4y2=HsrF0!MeW+DB+OP5;Ok`2kPTfa(5wUNNZS)8Kw_1r-&{fI45}fmi
zI|V{n!p(zMR$mb&Lw0L!T`XD$8#LUcDGK1|(+wNxuQ!*8{cEoR$meSlF3fHbJL}Vu
zIZGtZ*<W5kXc at _HwQzM(+Qu-Q@`%>jMRh$888y<Y&|g&J&2H%*3R<0R{AANosfNgy
zk56W{EvneeN(;xHPH=a7bw at 5g9<fip4hZu*FX;Y2qD~g-7ky?{e#$}eg8Jidk-!g<
zJIJ(XIlz#881k>?%S#tqQ3ik$dy2V-8eNnwIlI%&kmzU+`t}A)x~R(U^_3DPV?yB|
znqpda43Nm^v#elH-C!o`=tR!vO*aBzz|JJWXE2kn6^reb$8>m-IlqC5$vb}soFUEf
zhIb>9U+K?>djvI7%VQx5HO*kID+0|HIwD_f(OW6kZT9j4-w2D=mc|4LO!sHhd|1W3
zxg at a2eR2KDcYP)}w1k1R<m_v87dzK3Vh}i4 at O|bwz093Gjz)%?ns at hN36+6l^$$np
zA&cYmTftu+<ViXSvjuNwmqSA*xQLdi{uVI_Y-9lHIHQ$S|FrC}*!32^ey-Dralm6V
zFaEyft}h_Nk at w^@z|Z%i5ytcc#6|sfZ4BQkn}mRwX0tQg3%9Md50v6QVw*of9sbG%
z?RE?{Z9cx(t+Qs9z3l>;2(jb|<2rQpl6I(^L(i$UnO$mcCq=gZo`Sy^!Uf at Cv0{p-
zt0sAJ at 3-c5M1bp_E(Qlog<3E%O6Vaw8V1A4<k(a5YUEnp3Q3I|t6q#G1A^5-N0Vin
z3<XDhim|k{UnmwP0ba1+kr%+IWx>;cZnC+^k;V$93`phSYv2^^rWbd&ZMnBz;8y=p
zi#%0vlP`UFsaL9<WzWbgB*~rgBQbahK5j2IqMDJLpOb7oox8u^5{N|OiS|aj?(kHO
zcmz`wzWTaF5z8z-sI!v<)r>VbgmFg-L8}iiSC-Ljalb&L8yE!=;Y^-_7UHX)Xy^};
zyb4Z+TX`C3UmL~h_2Y_-9!p;r&qBwM(N$02g9!9+1CYhXF9JeQ;Pg+Lf#}nKcjFyp
z)I3zO1if|6@#T@%nO12@!GO^{1kSe^{jthZ)f4)EO60q``s=Rw8;*<Nok>Z;p0)1d
zI~dM@!6U}_uQ(U%WTE8F0#&suGr7z^Z&VE-XFJTA7i|Q2RCa%gx at E1OYuLNFj4kZ-
zBtN`QVAwynRK+%tm_SRkh0V$uR(o_EmfvsX(9ftFLa|{MGEE6N46N*R^W+0;`~zW(
z#JvSTgM{9R>$IC-pKi^S70({(aB=(7#3U$dt+bF8o?L`G`VhWJdpFF;oT`X{+YR$@
zFcWBorOTl*9fZ!w8b$qC9S>9nwWVj1PIZ{=^<W0+KP!jvug+rhKq2<4 at T4xq|He1V
zT(lb&2Cr}Y_^wmo#2`(F>#&}}7CeQJ0^?A%%C`f~kw$A3=e3;{um^xJb6R}`nR9N;
zW^l?HBg at 6n2)<m0$cqX$qrRn%pJ@!TTd9h*zFIwR_ at 7WUiHqa#RAd0#WLNVpgnxQ1
z8M6T=z`;qWAZ(b~KV9e17bm}chCLuS6#2KulD6DAl16Vov}Mz4z$1{?ppdp`kDt3J
zvIM2V-gJXJe+a1oV7<}m(L7cn`uNC$7Sab%_3G)JKtw(P_xH+>b#J>Dp%V__&2A{C
zF28{mdML$2n9{?4!{9>!61n^h6n(YIGeipP<Dhz*iv4Jmm}S1tHJ;t#bD at Fsi$D*V
z#*De#J&n9#tdY0;(&oRa5SyD&w!@8nSoC#Su>3`d^u#uiPH5-Jgy5_!5vZd~tYVHT
z<Hm2%qmRnJU**6D%4BgbniE?fKIxf*skz5hmq66z;QH#<%8NQmhI>#vgQhp!$?1>M
z^Q48IRchvW at HXh#o`%AiKs;pSfa5AG%pfxfq$S~}xZyr!8F-`cjfdi_Iz+4ua1J$0
zG#G2yCvu;-EzeFRL_hxfa861*U0kl8)-#nA4#ydK(%fgsj2NH-DC-VmZtK^z<4!Wo
z2dNA6&+UTCaqIgLH7k)5^TchCXK-Vnsq_V+t`gYpY8ok{5M{q!e-qj!;fjO&G4b}H
zl;8rgX56bBKoVa_>{Y8|GL-4BIxL_Bjwq;7z6vy1FDS`V#Kxt~q6-(;8A7X%RrIsb
zStB`XS;I0rk`bjl&c3$6km`8-%|ljV%WNnG at ap?MP6M?k<qvcm>3 at 6~rCx$NHnWH$
zt-uq8mznr$kJUlK4^_ccq31`(%QQf+B8(rUga|>pH_{l=l9L`V`*o$+eku;;LJBmU
zSLx#BR#P0jr{Wp7tvWQ~m8LhV!BiT3<}GvsLz`z^+sq^ymi}h2bvYchGkE`0g;O`u
zm6GcSLPJ0EwF<@H{-ASjP^~Pu%;}#>z^Y&F!Neh)i1YJhRPJTKG+W!+IH|UlN~#?v
z6m_`rWe+WEj5)FxL0s)hDM3oXZK&K<Si#_pntoSgYqY=?0G=&16+(1hjAifZqa^Y<
z+9!lRWZ`<W?58xfq<K8mGD^4T)BZABccvMGwe2D7?|lfWfV3i!&nj%?q>3=UtiA#*
z2(!E<+o~dq9rn{%7BPVQx-i(=+SVSRyKO2V%V at ll_UENVg<X!&{v^-&&}}h(Rmzc$
zUn?#HD~50L*3BwIv$*hW01u>S>19@@0XRxB#Ylv0kq}!@n)oKC<uT$_uli(16 at F2L
zs04ZeIUKVtO8+P#v{nhppJ{?DSzWj?^20FTbIsE2Orl(#zE0~j(_N1UHO4AB;L$qo
z!T2gHglvZb5_?*Y;-QCkGP-1yOGlXAku+4`Xela_q<0+3EKEWL-o_SzMISE#r?}Am
zCU~-1tN338F?A6M-tUSb4I&32{l_C8JLp~;v{dcYqf|1^S?tpISU#Tv!+WyJ#_OuO
z5FwL+r4)>Z8zJM_p+SjQRw#+l=9BuzISF324@(_|6X$tRRCMNaLhENxK7}VzTF|XC
z$PWZ`){4|P;6~N&6f=aJn^!|0yk=zV?!V<q0UXS at w(Vmuc%)_N4vu`>H7fEbP>IE|
zo*Vg#ER3H7P{xf1{Y}7$Uiyw!$hnO?TeAa#TgjRivWE-Uvr*e9n}$WP&*l1Q-Fq+3
zez(42lca*p6LFUDa~Po~k!rbkH_l5Qh}RoMIHStu0n${gimmcjVks}-k!kek{$V~r
zJIKHj_kYsw2*-k!rLO`T-9dPeJ^R at h(vD2qXn=!MN at DL8f4fD)W%NZ+*ZDFDWiqGX
zf0<RTu81-@%k9w<pQw~2uf7R8Q~+!<$H%kBe;?Lp2t2VA;q-%{!en?s4P_veu^#Q%
z^DhSiH>X4E?43WPpjM5|MdlrNMgYwfq&*jRdU@{V9AHnz6XNi?dEQ9b{G8JNp~vnd
z<87_4O`k-sV15ChY09JsQ`R*_D4Lmh_!BO=30O-Z{rAL3RuPHTZmBLdPXs^1U)7*1
z;{`+r0J0^V6|JOD<|G5KsDlSz8|n%}aV1lkFQg9Yxf at WhccB420cRWD_oH;DA-i`Z
zg+gLIWI8+Ug~*5YuAQGn1L*4dW#KUwtYo`%hzz$vDAl{Ed{!fqyuIX*MXq6mfS$yV
z%1v4k&IC9Qk^|y$TGp)<8%!jVsFB7aOD!zn(MO0-7*%)u!f=}>$NCKUHX8#&bRj?3
zA#62VY1LHX=lb=wGD$&I5XP}Gnvv>5zlg-F8h(*YSi~mo6y`-Mtxt|ea~ve(wH8wa
zulaEvdvB>apBii>52a<9a-{ILK~!kFpRT<lM*`6fNsSjLAq2g$jE_Wt at m`&uG;EIn
z)20dw at 0Dg;Ha&$jUPe7s`H}BgVF>`oCtk^D1M{_!>I24*E}yfy{W*-||Am006J1J8
zscxNkmd{u at v7+&fQz*)zT*No=9$@MXp{ONi6s`YHNrih#hRpW)Ku*Xmvc<Dr+EdaW
zW`!03*=4hCT;f~c8O)Ga&7WRF!U2QfO)=^)GJFtNhxERTVqu}kXF*&6cnvnG3O4d%
zVkqv!7e|=TcE+%Q=6-%Q89nzuc-{nnz4Zk!i1$^<7LlaCGJ(+$b`7(nrs<c=IYW`%
zTq9lYwHP$J60R!vCeHU-lEBSkMleyXXvF0BFoS<=7Rwg&RLa_Gtcj149ngYAca`Fg
zNDdE~^dq;tymEs*vpa%@%z`O`jQn!Y6e5KyN3~-X6uRKNLgNTWTHY7@?<14hIW8-C
zf)k5`C_h~6gq1`{&iwGsq<BD_Z{8m!^MZdJCv8YY%h4v#dZ0X+k*aJh9i}Q8?BY;?
zgjVZOMaWNrJ_peI&k~X7xx5P!wx2@^je8SU&|D-dX&VWJADFX`F56n at 6WShhVjND0
zoJ}Na_4oCVaZn9PJ<7hYFg&SnD5U-?B6(nMvE)VFVfhR#_AAMuvz!AEp`o<Nv8S-M
zv6^?1Hosu^&(tX|1wv62Gi!<L7wXqt at X4-lQ2_dvJ!}zdl(cwRD&}C99Un=tjlgUe
zs6?39c{*`vG`Mrj$ARrU*f&#fYEVTnxWc9%E+S9S1QZc>D|!1mx(^!xcG_v$2}TqD
z?R-((9y2qX9wJ!O7H5_7I0VuT%QdA|L^dZbSWq+}j$RUMqLVn<A&`|>HN{ou&Jpj}
z{gW1Ta6H!}45{fCvj{r&vIN?5Gp_p5+)?};eT;L&8*F|&07}X4{_n$1H9-TVTUhhM
zipY31-#=n32PdL0U2J1WM at hdE>z!FZ=Wo7sIf+2Pq3T|CAkgYLFy}IKPeT}n5 at m#k
zJ;3b_8-I*uYtph21!8EEh2_i<wWrD9w<lizS$&lNfE*WOJVayFacXYY(G_2HD!&?N
zHb3IMBjMy-xL9)s6O`V`z0k@|KUS6+=+RZP?Kukk2DL+glF4yyN32}PL+><>p|Pwh
z5N?||DO-n9rm<N__tEc)v<V?^<g&!vDH<EL6W^ur5BEN%AH1(>j_7E}aWy+!WFm)(
zz9T&j>_**}JJqD6a!BI8k486Eb{)a#5VsbaP!jaq34fn40IX|mYZ{b}`*81Kr2PQ@
zXZFT*-!LT1f<+I?#bPvG$Mvp!QKzvqc|IU8Qms#HdXE8`#I4ah^^DV5Ap-JszbyDA
z4 at 6{MP(4v+;OKr8I+j|G<1M#|Y<*ZX1k?)Mz22#4e$L5*jAt+%vr$>Gu=J&sSj_mC
z8d+m<jc90nY9Y;ja9^SxUnb%$c-UKZp06RHmakV9AhVTbIP-Jt^zSft`SdD0A~zDQ
z8$I^iPSJsRMQl^lj(ailg*06^iEpH!Q}w>042a8L#;AIr&HDQVuFS-VJSm#0KZN0r
zVWkE=(ePbqt2$+9tE?^%pErP2$5D)M0ECv3K%%rF`es=^k7haHR$`Z$L{d?A6AM)-
zkKp>8UeSRRmq9p^QYP9nH)xFfMiVwvPaqAvQbfJGZ at WxC#u6AT+`i&1o9i}+>{eQ7
z7cWL at mg64u2U~IXnqCd6yuOjhGzfb%8iUK{ZVw;7mJ)-NtG}Unj_!xz$ELr1EtkZx
zH#CmrdnhSrlH2SmP|+E<X`MB6p~$X|lx1Dl%<iqCAY`iK;v<HD*UbH*0Hgb}3H1ZU
z1E*D(vUfy2l_ag8GxA<z#J?@h^VErs3~s-<J74x9{V<InnmHwteogiG1mUu-2%rQh
zhgh^OE8(szDN&8hERU3X1c5-jSLn0hja at UWMzgfy{MahYSNPz at 5^!Tg14M(~>d5h#
z at CE##|1EhLttuQI1)1B~c?6BdI)9(svmm0o$4}}vZluhX=*fMs%UC6G2NJd&d-IW6
z8|Os8KG-ZK4#A=4wksntmvw%k at wNvKW=W&Z#3|IT4DPq__5!2p?ubQurX;aB&$Do9
z?&0P0t~w}2@@_SmTenO({7RjM2>aLPfP=zGtwjgd05wNnID^WVgUu>@XN`vc3{1vq
zwn~<=p53yBq`QyUu#Qi at edSoyKv@zy2R~!BT4)0)fs?BhU^x0_N{F*RBeAZdJzQtZ
zc0za%0T at 6P%C;&O!c*Nr{BXkT1Z#ng7Tv^d`nY{$kXSr<`UX#|_lg5h{YAXsNQnKD
z-dMK`D%#tXr6hD=o#Iz0c4(^zsu)NC-4qgd`O+GP%*T~nq+B(~XR2z#$^i%OpkcN3
z1j%!YVqz@~WA7%bmwxCwC!k at FA&qp%_$qHy`<kZXldS|!%|~(~&1Xma_^s6LZ|h<$
zwNC#Pl6d4%(L$rvn1F1P_<am>oS8HwDBgSG!K+Qw)i$j;<q%9!&9xdz3u^j4{~nx0
zHf>vVyZq>xR0q){x^h#Oh0!187~h31$H3oz+NJuT^yWwXSf4&8kVx8nZAVnVMs+WE
zu$Vl5cp0eBc7^pp9kRBiOBbqU^cgl5FL at T`RQq-qYG0E{BEoZEJ3>>u4Y%2kwWYlU
z12f9+k9i^sf9nxOtZbP<V3yDpoK-KydqODsp<VM}+zZLx#WoKis2mDDMPZ<Q-8Dyp
z>!O4F6!*r$DM- at RYg8*bF83^K09~-U0I{@l2-qQ`i)6(77>Th+QRjK+9R}kyg8s}Z
zZsCI&VXNZ at L&3POIP+Z(QEAtg$G5#yhau|BqUY6Z^KwYVa+u%@ZgEV4TJ9HfBwx7^
z+q>WLJ<AtE?+c1e&fd5iwKr9*MFRAy%8=6~i14B5!-vWR7IYsm`8r at 4l&a4wxqrBb
zI2fi%VNI0uNp at nGM?3{rgg;rK<1bM;KZbDPIQ(rkaRsLrKZ6v2MWn)vlS*!KaZp3|
zX_kL?madDm%H<D|E<CU)3;h%2%RtD1;;yTGAVLtUv#9z60UcwJi9JEi$z{bbCY%Z=
zP{_3piAMeB#}#FEIZqf6u}8(BDp*@kIi29MIRM-t)s=7O8NPdZe=X?0nk3j70=J2p
znzDPzd+4_rG7ik!ffoEXfBU%#iIbU7sos;SBNi(^0Ma}OJ~<hJTBP*C)#m#{T6;?%
zpPM_FKRoc&@{iN$100%rY5(s at LS#j{f&2XKJ!)$$lGmmRj=f5?x9a=Q>6nK$#t`Fw
zi?T%7$>lhj{$d4m6B`?z(`|&wJz0HpXSQ9!U{|Rr(-ikKU)C+CJhgvhA%r6gpn~N?
z?WRwZch(wCHV?~G-|yQ?YZw%$w8S?nGAsxdG at R+5LlzN{xya8pC3j-0SUxa at x)?U5
zt~e<hj-z5zb^_mDtQ`iUE0OLlE47z1Zj1=@BiZ?zuL%R8G*F}`)um(wwU|$zMv~@v
zORs;lGXebaeb(2qrM6y&qef;Lb+!W at Qw4WHK~^gvzz>N7tZm(y&5$tsSr;e0Mp2o4
zri*?_{d($d{7m~LV2fqhccVg45g+F#;Hye_^u^$u8QZA)Q0Uu>0Zu1hN`qhEmf9!F
zH?`mcre`YFDM?HlDv+a8R%-G%Dy;7NR$1C3Qr>AI?HeAx*ZrU at VF6-SgiZ#4B0}1v
z`OIQ|GPx9$LK at LN;k}8eho at E;*$N^q;@xmU8FE0suErZZb=G6niOw1&3MC3v65dZb
zh;I)e#g=)k=Kd^2DZ>nrfAg|^AC`;T?F(d{|LaIyWEeXjbkB<jn0s3x$ja`(XM{t4
zu|}l)R;)3+$!T0I_uWrwS`nSYpeRWk&-Wq2i;Bvb*2`PrVWV$DIb3ZQqvS5L^%09m
zSdgaA^!+1?^4U=K;KqjA6DKJ?wacw>uuto335Uq^e1o6<QRZhc?qX6<2{yj0CoeWo
zK00u?TM&_nFjXpi!;ZwbWYRtx)E*~m&=bc!+_S>XEI!%s!$^R}E%9zf_M1RFGJjB%
z*Wo7BF-id#^=ve7!YK+y;xGu3w?JBMsOt%i!zc06(%3IeIJlt*NuYbRibj7)X8N3`
za0?Nyhh~GUzoL;j`+`MP1Jh$IhQk1oN$#XmW;*j(x4|{nQ1>W*&kY6*@22sg|Kqg^
z9j#M>tdMcM-fAiy?EdF_cI$BYm4A_X=2@|{d#o}?8c{AiyC4xyXpD-5*Dv$*8K54Z
z==U}s7x;WH%8&Y7EV$aHmvr-U-wB)tA-NLHUuu`YGvA!~_{3rR!E_JBcvvzGTa`4u
zX%I!}Ey~f8fD*+TW;m0z#BFWIP;Wd|Pize{kwe+19|^*pzMrdnk_#sF`_z>%=mel?
zmv67y`9?fb=j}c2AZmh<nZz2WCaKm6+5Ahmrkj?G6DSrhvjEE}ZiavG$>&^ORUwUX
z!rPz)x34}4_}E&~L3h2Yfdih_f_JfOl;bE&`_5b%dU8Up&5kIB+2g+VYbW{e=^&`b
zl5Gf4x9c+S2fAOF?KQ1N^e`LB7(bP9S=jC{nOLOSwj=kZ2@#{258L;RD|p4G_VJRZ
z6a{ThT{3E{w0k at SKJ)kRk7p7<$4L*}1_q$o)ZbY(gx_`}AefK{eDK}KA(q^^4#|$~
z1F#A;8`F%u{J#V`x<bCT?*8NuilAu~VV_wp27MHB>4zQniQdA}CpM}tC08lekM$o2
z%xk2%e~uzd?!eQB;_i!a>=C$!hh7_ at KzRl8wCL=bC|kN at Q1Ou5>-qV2Ngq(RY4Ym(
zV_C2*6mTh`aL(ynnJu9G<<_iIm6+&gi&I%``0tQ24B?J|tX@$hM<<}%L!7ftlO9V7
z^p=tA`SyQHo3<?E`E3-rLvoI>uC660 at QSN{1R-`SV|WZ~O9*C3*f?vlpf0ZOw6#NR
z#xtxV+6HWLdLhP%#&WKX at X_`}s<O+ypKqT|4#dhCRumA4FQ5QqPMB<d7|TD039LZa
zOtst(L-_*KBFN?Nzw(@ypHOh`{*!hZQ_D8F#8h2LKE1Twi(#|+({!~SqzbeZfin#A
zjQY*?K{8U5VNx%tvs**LA_f_3_8C at 9C5D%stnqtiXNEi+j2)atK4?JT0*-}vVbegO
z0O#4T%&keIF2Y!5IwOkR1{Ar4W;}6u(XPct{=2~eoCd5MCUc(^<!G2K1#uTL!a=$G
zv-5$7*G%&<r5?;tJA3Xe7;g5>P_M#ojWRU&ViJwx>RM>A_M+2$s0P?X!DjakTXfle
zmw^Vn<aFW^x0l9g4zG_1Rd<Rp+;(ipVY$3C;;QW%YMD5><}zB53!%BFQnK^$2=PgA
z2zf8c14lp&f3e^9$;h%AR*=%FteLt`W+MN7O$udn-$)#sR*DQ)c<4Eo1(~ep at FKGX
z>8Z5i6vo!JkUBRKcXZ>nz!*Jhn7TN~hQ^HkTE>Kh6oRd{eV!r^)=TQ&Y>Fp#OV%;L
zlew;55@{BkqDZ_YgulxJJiPb)$~J~5dNcZMSdd0Dnj<7FFfMqHwapWvoMS~NsLA2x
zma8G)wxH4WOSmpab{G|#Ze at Q!)_QpT(VWCaV67{+exOG{xds5|Fyc+ZcU*Oix@@4*
zJTAXSt6cs4ruQA<S&8FlR2yN07?EWMoEQ;OMa#ol#?00#@(pbkJ0U)SMzr4A*WzRB
z>!hz*&T4;!S#QO1howZN>?v514Mg~~$^{E(4lwxJ<MIBM%T`yH{H$uPmb~@`DxZ33
zgF%CNqq3GXbPv|5K0w<+G&W$Y%P0$Viuj~NN5r&PVj=xRCI at s>sTunqm-VU9)4hs?
zv2C at Gt^}@T!TnXWMV>67cIio*XO;+=H8R1<$5*<zM4$~J)a4lN_njC#Gluy>VuBo&
zLWl-MnA5fwkh=TIkFRcC5t0;D)wc|3Tr2$ooJ4Psx1Oq~yn at ee=L};ROMU`Rv7F?5
z-#cfaZ+HY%Wy}`%<0a<>-7waGF-(ZyM-0xSZloB|H8 at Vkn;<-ucQaO2`cy<<BU*FC
z66d`n1su=SG};(rEH`3L$T346FG;@!-98)Z<=cctBoUAkI!&<^wK$;3Ytevc?>;p>
zZEmZz5(!uka9KB;;bGQj-d-ntNEaxawHB)>8aIGCZ5jpQfHO1e=||1OLr^iQ$jXgd
zoBQfg^dVJ(82O2WzsSkVYK0t&-ynAmCZq4W-95bFQ&g*ch!XS<!0&L=n~1`QViog&
zXZmdEr$%@*+ at 3CxD-X`Xd^u_ExU1Np&bF(E&csAty at v8zrd_noaq^gaa)4w;XH)KF
z`Jr}Dgajdj$rimL3$_s+J;fVFSz?QWvC$WHn5U{KAnI``+IBS8B2^K$3-lLDsMv>h
z_-KCIM#UF7elPV*KME+<B3pf-6sNG{-N=Fq?MxH1WP!bYLfx5Rg9!J_q01sf+YE5*
zVJ=CltJf?DW6&zZ6ru>B6S$;(s7Ewg<f{DAb`k2D)83^*U#tkXwMK-NTb-;WHuZAd
z)hbcE6am5Ew^t}@z%xxKUs+#P`A{ve*h#^=yj)zU6jtkr8lR82Gvrkhtg9)1!!<&$
zKU`o3<TGa>);+pQ+c<_Y?6hJo;4&f^I9w7L*ojb?|1EUPU<Z2Ju$jvCkMk+M{Qh>_
ziWG`H;uN4vIwptn;kw*=G9V+^O~I`mJiasJ;ixK*t0Hqs0kb$HzTos*Vc*diV~tg4
z%NMV}##H$caIKJi*7BU)Z59r%z(N=)W$ap at pmxfEV`q2km>8wGsNf6e-^4f!%0}33
z??|3(IC|hMRBlodU%RrfzF+?m7exC{QqHDuoYf{`@WhR+^H|AIWWe5;1nnrf55maj
zEbq8rbz297W#rQmN^jnO|FE$hFgI!is~C|9$cAi9)7nj1JhAMd06?M;3|t=TikdXZ
zJ*1zW1T39xkMmsOwBg&tPf5BVF^Z+!73NIAG2V)|7^Fa1z(u=BsIK<!Ske5j at noL>
z&}s34WKYR|heU;H%0Oz_8Vbr4EV~hb?*Lsd4U7qTaS5McxPM$ZbreW9yZ>#GrStKY
z`zwPEvzbzE at 8N(EP at fR|F6Env^oN*dQ{6dl0D<!Nhb9zo!R%R!raNq(g*#0>xBh+<
zu12QNH9+X<5Y=yhWQjm~&|c6>7Ut#R9wwn7YB-3COAcU|a^|6J<B<3V_-`FI3 at HGq
z at t8RVnX6Ts-Z(2$s>NJ?529x$Ju~&X&wpY-)@fHfSw&V=6j)+LqQPr- at 2X;8=O~)Z
z1uz)36gp}c0j2-C!bS&O3KPD(JqKm=mk0gTP^z8*!v7pfDXZE<Kg*--ru~7A@$9dt
zYM1?Y&IiRi at XZ^U9N;@xTvK&lT!0b0W%pH51-(^|%_<K4*LCn4Cx(z2A=4TZ7!M9V
zga2$Zh at y+|j{K%uDB5wA?F2sV8aQ_%`fm}c<AvI8Y8NAplF!QtOO+w-n%x%z)WN&a
zckz=wl&dK9ySclWdfg1i8VGYX5q8t}<O8fVmtcR$MQ at nT1`-pHxF`L`KdvicZDqcd
z<zb&ax>BJz4uKKuv8F5O4-C#UkRr1a8z43MXQDIBTDQ|oO at z_#hg2RY;Ac#iA)sA4
zvW>srwHjreP>omE0gf>?KFubXLC)ApRY=8gAX;<N0Z9z$4EIJ#J_<xB7z4TFiqO}&
zw)4Ua$VywYg*qa&ox#o}1_u*~D7poV2#3@>_?SX_cg?Z@@gEdo5JY)1p-dHTxd}5D
z75$E;&;}<NwL9q~C#x*{W}V%>jH&zUWIGjlh@)rZgDBLVJY^wackRCrU*v(Puv)`q
zIe~Kc3>nWyJ-~j6Zl(s=@_M3v{$HY!8I?9A9SW7fLcbjHUW_^o{BuU5REGe-d=><#
zgyF12TUq5lzG|f(Q37RrsMg#AtJ~$x5?I>{w(kl0I4ibM9>2^9axy`XKE3*x%fOe;
zz}2qmsZ+#~C0azQWelKSL<I#D_dhve?O%lowvxo`nUrpQX2ghj5lC~Dymz-$E!%W7
zl|UpM1VFzDUn{5c%voe}-C2y_^xWH9q{R(AVIKik+Z?pUcnz1XX`USLQl;<KS7bo#
zPYbmZShf2J3d8$iTG+S*g(L?m^sg>N&Un1X;n%>LgO1x%n%xJV`~9~-K%|<eivVF;
z-60MPYkHhMEk3r5ZoWn_`cF94=0-`Y!9D?h%|Fz%&*DqX*XxGFlcbR4{n6xRW*t0O
zNjD-@;h1B4!XN^b=B^V=75lbxSF9TTZ4MZZoM1>e2Y(||5%+!eAE?^pH&+%71gJe=
zr+X_3rvvnYN-w-lb*?SFn>Q$*ShPw|Zc|BOQ}rCf*wXvmvH-goR`Xc5CZpuFci at uR
zAo187o4L~_!uOGHQ56^5pNL&qm)l47H?()FY5LviK(+h at aA^d_fEm7SZO6$@dN2qt
z(mI<2k!lCyOafZ*Z{1|DU5!eKw8kq{<9BWaw(rHIJhEKEA4&>vSSpVZhmZh3QsIqL
zXd!+ at w|-)b`Eb!mndm|^a`J2`Gc+VFjUpB~3eq}VwvV6Mj7{7MRy~9lA##PqJ{D(S
zClx*ZtZj4(*Nc&)kb8dPEcqYWRSjnrfw|31?`5i)jdxm1V68OV{w6qZz;b9cDk_!1
zzGzyN^zb^!%h#qY=hl0GXS38hufijbm~(^zZqA}HJ^rmcLE}#3aNvw%=iq*oIHYl1
zuiNu(|GT$}ng2?g74GWi%2rse at yIOHViNZFzeIZioSab2dxA>V9?lO6(#(jjLYLd3
zQYnnARXof%I&M0;481r$v(ngHJPZC8{v6=M1ziKV)~$?J_DA at 4vu|esxsB>Cp>eEx
zSxNK+^pvn2EM8P(kJJc?_W^rgLq-ZQs`QH3 at HeJCV&FcIy1&HeTCDH?iC4E+pLtQ+
zP#1+eHu&+8WU-jM#Jt_s9J1>e;Eg#z)9{w$jZLDPiEFh%%(k~YDxYj!n_sp=V6on*
ziKp;}E&YuGPs-FKK)r4u(8*@*;gx3$u4)E)e%Sb1<YY08d8kqpLaVZbc=6R&sh;*l
z3DbxAfT4aX-~s$4bq at OvB031X9McTOo>mo8<P=o9oL{}hQL6%1?YxAV38<l-QRDaH
zBpp$qy?8-efd-;d570BubgkeD{%7!rI5o*elEZ1qhJ95<sW^THjJEN!p=5oA at y7lT
z7O?jvMqVl1S}nQHl^4W`+ppOsV%!o4wvRp?P7v^$$abn^huV{YgTFv8bb7da5DPXf
zY$Uj at z2{6QMwQzl`bX#0`n5(oFW=I&#J?>{hEK#$-&~9}MF{4ERHh4?%#;ywO}Is*
z7{Rsi-$CX7fjVl3JDV*Rk978*3M<J7yIO*lUE14|JeyHtM@?(P6{!uszTlM$!5c8q
z`<-!4AydPk;^1YRoil~<0oV%j)Mw#ub6%|3q at CB895O=3;!Re=aj5CURVsbn3%L#=
zu;n^*;)k=lW)|Hek7}Jf-y9&~QANlIjzpuv6ydfOKd{AcNJqfE{biC97JB65)w17J
zazLrY`WTBiA-w<lA%q@<I!D6tm53lHOqunXqRbWd%?OJ6F53A3UPq$0PPBe#BnfV}
zzR=jL`+x<d%=5?c`|L=MC;r#W_m_Zk!W$t3wTR?n=eWPmI at Ygj%;5fI-zxBU`HQC<
z3eq1OnrpGrTjlkxTxC+7)uu9ciR3IxmOMn6Ub$=!e>}Pk-gx22oQ)8JLgM;vpo;qT
zwP5a9Fsgb-hBH#vIBgNcx(!{WWIXLSRNA#kNkW?udW||esVJV!H2c!%__$2TP}4%(
zO?t3{95Hp<@bO_R$z2Ztx^h~$*SCP3W`6~$0lUwgiq`y4w;lJKlV)t!*d%>n&NDS@
z*L7r81{$b!ymDEV(t+KUWg0HZ%zV5KDU?l<;t0xI5aI973q~Qp$2GPO{}5fL at 6%pK
zaHUl*tdHD8ZZ~ZiC0SN}BYLULUFK$ulwX41h1t6FSn|2T_4xN#Y`pRhCcldzkTHS_
zKc7yIfWzR}tBjY10N*6k6pAQkxCQWn#ntLBut*pF!K5Z%*>bMjU~dfk$mk5>oR*lt
z70^0x;Ehx=KVtG$cJWmt&W~O-O;5oy=dg&8g9H**9(yLeD>dk=rn?B>F)Q!tR|=A7
z-!!65)opHEI{PmbDhQB3OQ+okY;=Cv7pk*9Lj&mbWF+)Za87|s#~p&?>m~oCi<*sb
z(Z>nRRjt5RS(%(^@O#Ojx@>`j7+Vtn={W$Z5!<>i9GG3EeqVS=bSW^n$W+3t9d+XQ
zh_$pCYRvVkU;D&4);5cIy~-vd_<)6>b{2{VOt>Rdk&T&Y1Y_}8$Aj|`!V@!EQqdFf
z)aKFbLzm3t6PA=A@)B-+owi at N`>Xm?m08*!`39}0L%zt!;fo-Z8t#ZXCK5u3BeEF|
zK#8f-)W!twi1W60jhQe_b6-GfcP_ih(7MzZDdsT*7w}qg+e+0W>A6Ndy4f!n!daHq
zv{f at t;X{DY!<yT?1a%X1z6^FRrbrt?xTPGh6645j*Zoe0T&tIqav#zy<RU-1o5HQr
z0&vCMcnUFMe*5jQYeE_T&kP at aK8$?cCz6yx<pa at 4E_igGl9Xv*vKgElTGipSG0>}A
zWbBy_`te!aIw|$Vo^K+2)U7_deTmxhNqOnev5HR%uQ)3Dl)Y~J-*_0-WPaD2?FxC$
zWJ`^#>OakmuGccxOESlLeu!5mqZtlu=7<Yj#<|XRxFjHkZSz at +Lxo?0h at YlM@c$n8
zw_6doGN3XNwjpnh{=IXL?4UB-`Il%*lMT$5EsWY9p&!b#DFw_u-YtANU_08C82!l`
zi{<LFEw&#G>o}~}Ct5Fs7?XLVH%f$LJU6#{USURpQ*ND5JiXdG#Z?LaK=Gs5fB|q{
z7kTbbKx=cl(V_FB^hr~k6LeaEYDb)3wHk9G>8)#V-^wY1$eoAfdp$SoODwB!ks(Gp
z!J8m17%sC{DevsYWTT8FGg;ZB_f?wFI>+&~ZZI5owIHGZ%V?@Q1qQ|LkP>eA_#o!{
zI^_&|DaOzqMJ)qB#9W1I=H-E+RA^*BAx7O;Fx@|SJuw{}X04y4nC$)sre_%(CN{N-
z7Z<1YjMYeac}(cDgjVwr;nLS?WWENiFWH>9V}lxF#>a^IHYC)`vZDEoq2rYH>h%+4
zZHQi_65#BkP)|~p=hrDy$p at t)?sa&LEy~MT91baq_#y`TgXDkKjoZ$}Zg=U5u{ax5
zdBAgO#33o)^-*Zi?9C^$u at I#rvMyAno%dbTyZEsfl<lZ``kATOeM}?FLhS2V+T^y$
zX^PeiI9Ba(ci5*G21BYSKUeT9SCBXV&>Skf3sF>T#Fj<8<RQ=-v{lAuSI3pMp8wI`
zWb~XeX_3wP2Bv^IM^T5Ar68SG6VDkzv0SWs`(aCKOZt`<;!_Gj9Q9{D#^v>foS2F}
z)6j+Vc)Iq{F($M4ZE!=8Ujbv@&36&h{QN}ZZ7k6X9bY1kQGMwMxz}AbDfj4KHf1JY
zSE#O0_bGZS-$7KpZO1PpnQ?g5k1W-Iqu~4t$5r|8h^6!5smMdAp1g6!SHR^`#0MmL
z&sjCodPKWf#4iQ|u6)bwRO=tKaO<{T6G>vAu=7hHcY9=PISIp4k1|!HaO4ZXgKe6@
zbJ8T(C~Vu8JfClrrZ5$hkv9{qM?ADeOTHae__&fx>=gv*)H`UI)_TC*a6k*z_m~vl
z8q}EQPr-eVb-X at aoL2@eks3J>A-npy`a6$Q`FYIfc8D0PKIr!r2V0L-Fz%4vKH$0Y
zfYH4hLa>?juuQ=g+quqRh+4S;G{?L8R^|`ZxL7ce#DsR9B)O-|X|piM8Ubku`E8RN
zGpsUB#aB8-SJLa~yyEIYtx@>EvJ|?-Pk83w;0g&z2BEk(P+Ea|<GcrkFRj!yv-{w`
zg$s1bCTsrj6pjA*bH9{VOE`2#8)3et4488%r*}sDyV6&np69!LLz|f(+USkk{;A=B
zQO>oB_;=bf^zAF~P*IF2LB=~4`?H1uw;YWCYz6qyw8K=0!4=8w<F~J$b!E?kA|MQs
zb59;-VoJ_*kq-lPiB?-7<f5BBf~06VfP{^OTuh|Ms=xJl&ow_}<ONn<R>qyGD6NFJ
zNJgnrbm3+j43Y{y2Md%!*U|8Rn5FPJFqNBU)}&`dTB_jAA?d3I4XJLq25IE7QJ{7J
zlL$GKzDrSfsJ|-vg;Z9TKE8!z`I>4X+h^*BSi^PrV9VA_a@;$aP2Pf7FX2^&N8p8Y
zec*=*Es&2L?yQV6o5NFXk&2-qLA-3$jaT$QY8RT6Ii|ki=|J?k--vuP6lmzd2dn8T
zi7Jun+E3-4)`Kz2fK~i0;^2S$Lt50jO)la7gZrfhA;^s!^JAcM$O8`3<$xD!FjEG8
zpV&HLb5>%+<W1A^8mMf3BC9IYQr at qBi>UQ8Idj- at C^5C9K>(0o)>ZwbJ+-Og%-oGj
z64kPOH0!ubmQ?_;m^Vi$mrqI}o{uxsGMElS;?SNiX?9O6l{e>C1o1U$0uvL at B2kn&
ztl=2R&ONb=AlXy`_&1vv4k3rJf4E&Emf;B=WCuZnH+*TceJ52Py at M7<3OLn1y-~F)
z2$3Red|bc=cA4UCvFUw1{5xgoj%cn=%I8P~5;J+})4YD@{jfmX+s=W~$eFA9yLP at l
zAVngV3Cr$%se|*G<`X`}+wicMpzCB5kK1PsqGtr~P)Rxvne?(=05ihFHNJmAo-REB
z|Kqr2kNgrh4hM(Qx%Mvz at QQ=|&2h!Z;EJ~WElw>`Fp%_Fv=GoLvq-X;67wUWmFfH*
z5x1Uq-nXi=4{?|2-w=^g==x789g+BOHF)SsKRcIkaeIf98eCleu|BB^;DAl69GFzC
zX%GPsG?9-sjsDULoLW;{r;uPV4(bj|_an5i=q!I)VNrCVwAc;T%d at R!><I|=zE2B|
z-{la6AC={s#`eEr%mB=#_jzBLZ`L!L2N+r&>&Xn4qjFcY!6PFqD!-*KX4xdid_!%Q
zamD<J%x)f at 2qzq=_Scp5-!TJkA2%}PU~23$ze+L+^9?K}I9Ph5rD5}#;|raYGAjTV
z|1N#8IF$7)<8)0_9Drkq2CrNMOSA!KZsfo$1cc7H#j<>d6R-96uv$R`C1K4{w?SKR
zU<xe<`I$*-<b<jn$C-e$JsD?H8Lz95;ySzT8!by)u>31(Ze?nQf2DKe<fYJr?a(Vf
z*MNM1HPR^Z&?Ty_Gr~7hGR9PmDmu!gMD5T~qs#9_y at BX^im#qf?WCdLo1%MoYk>Nt
z4xG_^ofE&5$QYuXK1zNqw9S^Kcj6V)8(8KIv>=Lf5}Aa+HHC}4cXI{EG07AltZNy2
zXrpX`_PMHZ7k};>{6e`ZE7Qq#)VU$<K=%RElb~B#!-&sb6ma6&Z&(9Ws|2+&b!Wz{
zq4^DIdZ3(Bik!iP0T$~$wL&@>ENzTEG34-L{-VQ2Z>_?U*65XZ8BpdBbn?V9Tpp9}
z at Z#sVwbE-_wywSYPp7YOd9=bxJM$K+KWdFLq<G=-oZsgYNsk#kkdK9b`aG6qe>#JZ
zy at bTyQ?dEALr#=f)Sf0V9%`9Q0=&f1=?R#ZR%+G<qK%G at t<$*%?c}$VjPfQ-9P}($
zd!B-$Hj&JgzZIhd8<$rt5BNc_$ltqGG=MDQPZIafOyi3O8lQ)^V|XuIw;Sz%_EKza
zMaHq9uCVdlw0JubwAO6(f1A}b#n%-bEp}od#|nHA1TZ?B5P0knBc2J<tcHob>{8cp
zh&I|ob)59liNE04Bq#^^jdAP%4bx8K-0)fRny at E$^_c|K9q$0<pi=$^p1p3eWdKdy
zMJRQ>;1mWm+j}-CFEgM6<1=yA_ukL7dxwERk*>6Of4=e?m!97dHCxq&&0qL-n4u~Q
zRJpGHm^ariR2*ItD=K>)7t+nD*B8p96bY`QeQjw!!@qC~OYHpstUCPLWO_OVhIl at Q
z`#ba5KoC!*Zg#c9^xsBd_=G=MY<HA?!D|h+F9zoBnuG1OF(BmIt<cX68*O(W4~NV8
z8J?rrJw=OC|I{;M6}{7~NzD?p74kanAn>HN)xtycY#8r`dT0iXXs{ah8Y(m)Bb!F?
zgoME=pvzBs(-E}dF+O)PHHf_HG8g}d**(L~zEZv)oo*HFJ$r)+_Yil3pv9w`#rhSh
zO5ryX54UG*VC_9FMuf=y*}pZI>s%i_+wb2c-6=!Vy=#<($giY1l2SPmu3MU|xmlkj
zK68mO9NoM(d%;xD__i9^zJ}!hLpHb*@7s;lsndRUH_f_4$-L?79xvAcD#t)!hiQ`U
z>*(5ZzKWJZfErwZy}bLDp|@NhtHMw!ovqBD6dOk;($Uc!Docb-@%U{2=H&YM<|)e`
zNoUj(CGmk3Ok4MaRG?5Z#RE;k-=!G6CIt8y7}%rd4?$7V97aTbi05kZVm8K>ptPZY
zjrkOq{Hijm0SrXau_c5U_^+u@!Tx~_@*9%)eUQsmI<XZ6(y62(TR<~k$Wi?@Z$&A)
zA9 at 0M*B6jT=-1 at ck`HU3$)O at xm?L8VH~|oHYdHh~N at bwOZ)>*4@~KS+=<j^ORkAT0
z=EERb>Z*j21$wl93TFlmBzt}}@1X}{tQ9IP0O^douF1mu2krzCC9pXWxs-t<O4&0%
zwiG*j%oT1(9+;EU;hiqYcA=c-CQ`IV(J%HA{Xt$4ezH5YS)QGT{OQjSX#;$rsE9sA
zoxC||0B8bMZ+wz`u`j%|T#}U+&91}U at _f8jf%D=VgI{oI)=<I-2$%-#Y;CLX@;WPS
zKX+<DS1R6QoU;aVI?Gq3H+w>I?XaULlgkU%DjD#oB*QOXz)$3r#^%PCWRb4`Uf1cA
zv_|G+f92axX?3S>_YYFWospdzHcB0v=1mun-JC;s)O)6FXrgsXGbOLmRx7G1memJ>
zB?#1hv$vEa@{V*#Woxvm`m)FD{vYRw=snokzC6}Z;lSOr*1}=1c6{l??<XBpmQvE`
zFH`634cr(wuV2o%1WDBsznY>Bb?N^0lT3Kl1Bden&d<7hv91^-Yv+<Gduq62Cwh at S
zdTM;Pb6}0`r at 0(t#@>c+4Gr#PYHkR3FxWT0sKGKSz_I3>S-sRO(SpHWpW}h#7i=D*
zqk_K-<#UOZWRPsI7+^dEpdhwt!xN6*ZY-`d03$%$zft1)zLD93cF^zc+|7>MFuj(`
zUbG?ev%`-}e)!Vsf{C!%Cq5!vPEPJ~JHap(cMfQKTZ%9q-s}VJ$s<6ed<;hupB#z!
zJ}LREpyWgJ?E8u8AEE<PEk!LZZaP_Hrn@^KZ+M~cJ%6%L+n%yJ<e^!doOH8b>RlK+
zN3d?{_|yNY?N!Q3zvta`oWNzJo@@L6y{q_3GGUPbObY~m7+q*u`}|qe9_ at k43Zi&D
z8ito>j=ty?d5Q$ed#?jS))9nW$?ztYy8&RBxm{q4S>GC)EwM<(x|>D%E8d&I2d}FK
zWf{Z+&3=-2OAiSK6bZe3WzjB|IC1qEYu|ZFhiQ;WwTvmGMe$XiSg{n>z((&qD5*>K
zyhZsC9}g*44~BgEn%Dcg at F>3f9Cbvt(8~`}+lED#OgiIYEcl$l4SJ0ox);;IQ@$1-
zs!z6{^`^1GTGEmd?XZ*1Otkgh3^nIUoHh{o=qKS!eiL*9*o_^Qp9|DuHxlvucPkRo
za!a;dgx6hhNnz#8Zv_O#GWXda{Ng>$9SN-cer>)!>Je|D0tEZnd9Pnkvg67+kn<5k
za%<lh at ogeTEZc5cs|j8P at INs94_|!9 at 6FNSM88f^4Br<F*`7=Gd$^rA<%gYV(K8mr
zCG^5NHk**!h~~u6fO*KBBKGEzZ|=_djx%aMvi&hVn<CgC&X9dO)RO<P$_`u}<^Fi`
z%wKseibrP^4E;mYf~(g4gns6o`V`IZLJV{&Z|$ZurCabN?zuUfGV)49TT`EWZg4i2
zIJ!mhL!6_nwVRNvsr*|~)xGYwI=>tCF8<mjO&<$tv`w9>nXG$@wh%PJT at SWXiymni
zQ~D!<Wm_gekBagpF#nvrE_JLyty3&#X#SRB$f9Q*W-r*sX$pLLtB0_tgyjfWW9gcj
z3bvi#(7t-;g9t2BNV9nBgid?P&8{S;s-EN^**RUiZIy#FJEXo>0XLCgw{n8FtX%WT
zl<rJOi(+GCo8L0!JdL6IbLN7WiVhAqStHx`>T)dU8chAEqRe&q-)aO}s!a~Qm1f-?
z?s@^d;?b}tz;7?za_%=Ee*8DOYy(oIdRA3#)~Bg5bx}S?Yx90y!-%3~pq>_q>1I14
zJ3>)95(5~&VnMNp;cO&_glnSLSk|u#`7ztr^RKXCDR-9(PRziyxd3Q`^w#-<>=J+t
z89^l73YL+B6 at xlcxxyDJx=gAYlXu!X`E)duRY#il*q*%Vb0*%p^qsi&hCw$@<PYSY
zVyHdY^898NoOY@}T%h`)RDrymF%W&!<#+`yzh32NxKIp}cwb09iE7mS#qC?Q{J8j?
zy!^Zp;rudhmaqEJ_J(%*Rm#-PJ?t{MeN_SAD at AEunA`Wtmimm%<u0;h&wg}fbukI6
zw0nf4rH#2o+Biaw0;H{jISQ|(Y!<_hvJZFWI8gjNbe=cpmbqx2y~7PN at 7|xEKECy5
zE)UPdhp0?(&|Dd%hzL50>~aYPdL_~2<uv?i?A^&}@c-Q--Oy&OtJY5)OJQtx9dv@;
z>-AIAXJ~=qAXuTGsOlY{4L9(5S{z&{7gnM@>tE%)(l at ipp$0U{CE*Ax=F#a#cy`4v
zY7VlmenD#wI91c73eNf$_86)@3aQ(1`m|0?J_}AT+&WAI(z{Ns_6&D-u2_mCEY<Vw
zCg{uKM;bolI7C3SYIvz#BE;by at 9x8i{$DX{Z0Q<oWRWu?LsK7DkZy<P&HmGh%#CSO
zpMG}t*bAJ=KrzV!3aeWH3<*w?YGX($C0F!ebf6}1;PzWtl(<zcsmq<1*Nn8QD4q^q
zA*S_jtF}vFdCAkAxR<4PyVj?e`A~*l>o at m>mr^tcvBKNU-}O8u2Y{U~Hj(4fpDYIC
z{G1193JK!72815NX8~rIj^#@FOS_f at uzqkb=NT#{nYe-119%3Yd;j!)1De9GfqbiJ
z4GHZocMq}fhasB3--*a!KJG`mFd=MZnd+n*18?55oGd1y5IHDz(b`+~+zoNg4ButJ
zP7^d}29Lb)v-8jx%|r27kW4o2)AgF|P2SahD==!PI#^e(8hY@(2%b^%)3x&Z-Tn at 4
z_Y4Q}s;!I;NoH~iY21ORknn&;8ys%1%L=C|YV(26oIL4z{Y$>o0 at U`2Z}Sa=T}xcO
za6w5d<{CpqF_@$LuEALD_}fa4AT0)$;)HxnS}>GX5SQs~e|FsZ&u3%ZEMiWb2{dK9
zhB$C%2(MP%AwiY8^%TULTG9#UX!cgK@<U%AY%?4f&9Y`t)>DTz$#&hwjPS=`GlD0w
zeOpQHNSK|4c at BDiz<ZyF({aY(6shB~`a+f%Q at G!bz|f!+6F|MZ4;nzpb4`h{<gdh8
zs0(P~0889zrDd2}Gov>tCKyho#jHH4m~k;v_sgi%q6K}Qfigi6&`Mg<Ip=uUY{t|a
z0K=@;-7ec={r5ieD4!gjIVY+NWL7XBfiI`w6Uc}~9$wk%1k6S~Pd}s!@i3Ao<xkCO
zx#DsZI!W<7|4_j8JOW~CrT6i_m*Vt~H at KpnoUgDSVs^q2*`%t at qdcG^gwg1vzHMkm
zNmSPofIN_}0q}fM8UZ%GJCllix{SkLHSwNa%0*!IZ4Y#5cu}?z2R?-}`li46Hchh5
zL=wcc at WsCWB!R%sU(~|90nWm{_?KzE+ZV3{eyrc1NKF>4{H4e4?)OPmO$bj{tlFfA
zjON8hEd~?B4DGpe91Ejz-=15;&eLm9aOPbN8#gM{-^Vv%3T8<Akyrh5d7KYY6q3}s
z+;zc3z)`2`?us)=L<>dY7P66#UNbA`@tBcF(9McelA@{(9l%moZw5n30(}UXv&4O^
zdy^b33h?B+u^CT at 6YmEU<b`x)U&=T=b}SsE`XvuR(D_Eq<)&h8#p#&7r;Zow7S!W?
zzTfkU;N|@4tCz;ePn^FuiKHS-NqvDSW6R<%9>YNnU;ql7Ct!()H)t6J`6a>)(pBAW
z{|1+(#g*DwRcq~oQDM#r$cr}pR<cu)>L2AlXFidgBf~EK<k2g$Smj8xz&^LjpW4|_
z7s>)t{veHk#rC3GMP4O-l#KzH&K=o9%YM;{FhG+;D+^NCb?J}80sV&x`duT<4+;+Z
zzql^ZQi{lFGhSo90^|c(`izf*Lz;?7#dNA at q-(Rj;5a(lf(B#vRX!Ca at 8`i@!l#7Z
z+>5^S8GQDf-VGf&GV$wneUH@;(R{Unw8^m&AKl^h+k{Q!PVv$%%ktomyUJ2$(du(B
zkITN1P>A9}KOkh!Bx#WFW<#PXssgSvRqmRE{aITr*m|dA{*qDcE?59e&e`W4u)LY6
zp>|3eDa7C~_%n}@3bQnQNvC;XK*?3b#=K0^k|V`3il-vZG(YVNz!370*AS0MQO;{)
z0hn|Z4^lnbq2|Ke50zacOyL&9l&&7Or9rD_;S(qIdS`zG_{SCCn}S at p4=nk{qsqtb
zb}v8)-aqrEx<-&-+!ms-Y?1!jT*hMM9T#I_3pI*_n&T5gK6((MBy=*-p6;a~Tises
zW75W$k+Q3)Q6LUt)M5~_%ie8NrKpr2YI>+UF0mTZDg6PK)}Y_9Uvd2BA}eEJSEF`U
z2y<v{&T at T`0cD^??#(@1RBJ`W7fyG6Xg9)e{5HHlgM$FQ<w{phjvfougPH<~LgbHI
zuD(<w&6 at y&Ww5P27SD<H2|k^!*QlWwKh^IW3>5E1j0jH`3}wjfsd;k859H5}@VVzv
zYCL-n&t~^=>(!gios?M;6Ef_8#sa<T2!$L%`uYErd?9 at 0TES9KBM#u>POA68n&pX!
zWeXxQ%&5E3D)rNGJ0TLC^pHd at hVBOU)JP~^gUWiOA%jOMAj~r<-c`KNZ1NLOi+Fvm
z;2NQXF6gd(kSqer{+OpAJ$PSBM~5Y^blaJ+2*OztMk(X^U#qLh#Yaz1F=i(7U+WOt
zHprsTuQlcb`8SD;!7mzgsL^CQDw#|NNt1^Zu7CBnQxf7IgUPyt^(cvjhSKMp*Nu`v
z!K6p$jb9XVl}Z=se%DrV&9n at LLq$I&riqso at d}cZcw}^Ob{uDslORQF at 3VGN>f7eO
zLjQ9bGo4})TuPOCo((1$9~pmm0+hnLi5s!HIs0y!E3JbUoroMnCwz_$gJlTiw=qfw
zDE}Ilt19B5?n0}A`KbhBY`jQo&XsRII;9lDJ}S7*h54xg{X8XM=O|(E-YC6DT--KK
zwekB|2iwRO&VyJe6=G|ybZPe<<esz*JrNzrE;c|4L(NTQUji6M3$%1r`d{DeO^g5K
zbuWq`9{0+{lyswzWnsR#R3_QSw+dS$GlN?ZNgnde5MHo0tAX+t9g$Cxox&p+?lMRU
zMN0vbfH696zD~$#hI5O1+*~a)M_TX1?F at +L<-(W*;=*0Mtr_st%1|P8`=r-UkVGGT
zFs5*3%PQ<G0eqDmlxJ~n$UZr&!nLljt2=U|b!a03`bO9wvNYiwN1EcB8n;+vQHTna
zH=lnHiuu6qwB=(_!Ip4^od&l^**>2 at Gjq;{c at y98Dg4>Pokh3KLFo7(fj*ZvfOsx%
z+yw127t36P4x%iMtr0si#@n<Se|Hxn5f6#hp|1a9Ye<VS{juY=HEF+!e9Pd0NIP3q
z4<kghIW at p9BTSha%91LDvkxjiM(~>=o3sFK(}nf)4qqxF)9|JP8w%+_6~hD7kVdIW
zx^g}?jUyI~vD-Cm1q%FTV0;aDGYtp+Q$M(nEM|oYA-RfpUVlAKqq=hE*YUaoZD98?
z;tP4bx+o9nrju82BBh~KMd+3>Z|8h-(Wh6|lgaUGWY;ss9D&T%ZABs8aL^PWiEi7~
zcqO6Eqh;iQwJ%77uulQ(1^d_}EL+6yW-C9sZR#YdRd*O^fRTC9tK*k=Az~Bn9}4gh
zvxS1az-7St at 4V3G!rNu}uB^N7DGxzq9olQ0(*UL+Hm^L3XW3R>aT5yQm#HCL{^#sF
zJ}lKVUl(AI2``9pp<o=~LSQW<R at fH-G9?B4Fk?v*_RuQS8*&r0oJ0P%vPoHs-}yz`
zwem|0HG>ycML~72AqgxFw_lX*vX8KP&yz(n<Am4UutZibdHaFlAt`L-<k1ceo3q+1
z5Rate94Ow40xT}VTs$TTCo at 50qP&?6HO6P(mo8+vnOh7EaAkm=&WGZ!*77zfzANv;
zz-px4M+AgoQnK(3dhyd+ac&9p&e2J~Y&>7`&Zb&HL<Z8{{PpSA>g_<|v-65chRBdp
z0_0GIFdU0$sEx0Mc_-O9j`bL>O at 8e(54%~URvDnJr%a6X8I~;~vO=EP#MSyR#`P5x
z#5N&bRI>h%RUq!nDK3HATxduc#+n>ZnVsg6b~;m at -JQh(?7!oju?AZ#`5Vl)WwN0p
zNI-lb+kB4W8HFzo+aax2XLv``DX;|;-*vtD=-TK1<I at a&gG%tzgxYoFJz4=vTu)eU
z4BZG+>s3 at z5?8Cd(9`Omh_AKk`%MvZMm6=UTU_eD|2KN at -z@%1=ld<SQeh!!uLohW
z-1D;KEw at W99J9xWgOst|N>|BW@$0HYk3eVh+_ at aPeCwEC3PbjR<q~w(Izu4n!rj)^
z8*0!Mxm6=?qgph-geWONS96C9a47?R9so<R6JBE<bc6xBn&4wTuWckagceFf|J#>c
zK%e0l&hcdBP$G?J9OkK}F%P727lt$Svn{YRA3P$&-Lc8qfg%r`&&$p_UeC`)&!U>}
z=pC=%gs8s8_#B}Rl^)iFQIk1rcmLB`V-WRY4L?v0n)r8X>Ptr148pahX>jUTdhAxO
z%wF3#@aGH4#e)_tt%?c#@!tv0af{rn^N=(%UT at zl1YZ0S&M9C<16T<Gq*)`#KUiLm
zm0qNoNc#rJ%8b}J%{)t_P at pqvjD)~uel<bshG&ecu;FMAM%&lboD#dozRsSzq{S>b
z<%6C^MwoW;z{#Eg1&X6?DwbH3?M7#FEb}kR1jQ}F0hec1HtUQWy*NQjbdwf_m8^Ff
z7WLigD3OmhE!?F#b+J%{S|!v-`Jy}TJ|n!gV at qKTxZ~2Uf|^k4Mv5SRo^qEd+gij&
zS_S)*faIekhBp8S7#t at Nkl3toHO$iATOmCK7+<J0rGjoj6rIe#SIW1&i*Pqk^SvDz
zQ+(i9e2D`+WL*@f6r#2wbBl^wC@%RIqSsAm5UfIW!uvt4w%cJRkzU1Q_*INJ7TVw^
zVOmWc$<r3Pn?lUT%*+^Dy%PTFKt3E~THR$YRlQ1FH_*=;32o^jE{F%LXr{wKL&hG5
zJn5l_b?RN{6of0R{*-c9O at T9^Sml=CHLV<XWJlHSaon2PPooWXmyKRUE-hpFu_FQ^
z73PhLlI<40GU1X;Z6o+GA8NX=GtW`y-nN9EQuyu)(}9ZYflX;K#8fG^&zZB{ZbDA}
z#tYE-Cs%OdH{Ndu4Mq#M%?EcT!>uM1cOQ9+>jXxZb~c1lt>I5WPxOx!2t4pWK!8GZ
z%{RngLm}&o`dB_!;wG;o7+<{(7M`Ep{YgIe6x_bSeqd*Ep9+e}eWR=Ok;&YR!8c|9
zNY8`@?)ub`E?s}>#=kzzpz>uMzt>ot-?lST_MjdEvOFnO0GGN?;jR{W>d9 at L5v<;+
zFaA%o19SQ~%`LPO73*SaCe6m!8!V8$Y<_Q2{9bpJ8MJQyW3&ChtKG$AZ%`gGjid8g
zOP1ht>6*F?Js_ at O_NH~S9as!8uAVoM at t0qk<OI0CRU`hV3 at 2Dai1sZ9y1$yt&|l0O
zNP$g?|6`8SdC$t`<#bp4!77<Z56TrUeR9a;(%)ZPd1Sh`4WQ;6zdGS+-3B;~M8W^G
z*pL}#Sr$l5W+LbW65DX(e<plAQiR%>!-KdShgs$4D~$B3N8h{ad;IJM)x`dvSFrWh
zS?cKWb<}C1za*sA;TaMme|BByi0IR%$H^X*AT(#un3g<P+TKdt?!o<gNlzI(Kks%I
zhQ4p0a&56TZZ%=7)p6XjvRwq^pxsc6F_4E?UnM#yJXT&$-C?1GPrj&EI7&5|boQ~m
z`LD3}ZtVo4!s2Rj+Hq6b;KsHd3;#f5$|munk0C}v0);p0rwn=371Sfd;3wApAa%hQ
zf`0+wP9Oi-tJ7~~NNvT(#<9m8>d}t*nUI%A->*%$)J{7CB33#U8Tw~SVH%Nr1(5f~
zaQ~!5W8hVwe``-YglWUxhIHo^4(@E*_2Mz^d?5ed0Gs|R^J6JtyZ1?2aOHNW1;J2C
z*4s}BBdtDfmN?Q)^`12_njV{Ym0)FU6}VVs;+X{W=%`VpFjIJ`g at _@E=3vvT0<IC0
zuJ&zU+_8{T<xE^Ed%tl_aq>*la at sBwrm#M419TDG;}SxSW+d`{_1im-sl+7%J2JEh
z|IYmIT*k180l0nY`gUOyI-YCo3j$J#xu%=bBl3LG%1;*P&rJIm>D;WYBky>qG|Q!0
zZ~<Qni==3D at pl8PveCtvzY0|AEn7zM at sW)X3UzfGktyuq1ABNZC-z0pd7$ariUyq#
ztxG$#W>ur$VY-$+s{EYzwT}aNI!o++?hqd^$NrmWfQa*;2J=Z)Cx0HjfRE>RPf-6a
z2$kE=?=_D?KP^vuL}xOPPr)buDUX{aexa~{21t18V=@W7JbUuiX6%Pt+1gK at Y_jr&
zJwY_D?pVGKkJ^H#?IhJZ>hXdV9P0;_Adk&!O{5^H87(@IKn?H at hWQA#ACY0<kzZ>I
znUkmsDWpE<_MYNxW{H#10<23rD^?TRB3AWY<UHh+%)FZT;>#wISGU at acT;^(bw<~<
z|2LmN^=dD$0ex1QoFk)41to4^xq2ezZ4g_x4}6v0J_H7~+ at jn3(*C8>*!2}d6yXLV
zFNSkxC~K-z?4LmYCa1JwH651;W)dHmSuca)c%Rp2ucAq6x02Ke1OycW{v at 6kkD@fw
z`uvgZfm?=iPZG9XBGnx9#U?8-R+Cs*5x)79Uy_B=hD5}r)$AyjVml(H%Ud-NMk#3i
zK8^85$UT+2Ii16{twfy+7b`u869PqyiF-#;q?~%|m(<^5lOnn6yn0IpCX5U2<5q+p
zBYU<W7G)U4Q{#;L at tfC%UfS$B6wJ^ic@=UMKI)hOy#5!%>=AL9ILYEHCDS*^P{avg
z^nC+hsIh7yRoU!N)k8Nk at 4lz{d*BwKhWA=rTJJfN%DWzB+g2|6QXS!Qdizk<dQV$X
ztw*0rB;dnlW?Ae=@xrtA%nS*4X6Vz7;OsmR9Tn}~|JInD6|eOe)X*?y73fa2wfIj~
z`{Zyo_JSnsooQ3QZ=6wb--2MYw>j`zZHLKVi?KbAeK!;agkIj;ogH<a#6C)e+dp_p
znvH-~vRXBBkP}_l*QG>0si(9j)WXRzEt}voTE?n1dw4hxnK(P?pu$9rq0|@IiCS~o
z^oq6GkiM7{Hw)2;Bw4C)VQr~l4#C0w`#E`IN<@mYx0INmnazI52BO&@-EyG<Qx=S>
zUYyVmCA?rMCZCNm3v8M`G&r5PdCZZGjHd?jM#{*Kpl&IKtU+99rN9i(hLShIZ{BpL
zRs2NN$WiDsyK2ZAj0JS&y5~e4(>=GR8pN(i%(O!YYT{An*E;aDx*TmZg-36W>=LVu
zc8*bhxyjef7U^xBU<=!6pet!ky2IA<^lW=;ExK*sA~qKjisVc1(Ld=j;{yv|z)37T
zN926mhIa%JgX4uvjaIg&Tc>$z(_tj`w36N`EUD*_RN+$dJ`mQvTdG563Ct`t4r&dr
zmCAF{YQ*ETz(io?f%v5<bNXn(6p+6bnp&5XY+;O+hSYVyof#QfldyUfe)_ugZKUgZ
zon%#>Z2{$9hg)aJ;<_vD4nSTj*bY-iDpCFUl7+3}NDwQw>)1zMyj+7 at g8)KejWnlZ
zO?a;jnx)_ICctCUE8EgX8K>tBH>$-1RiXWY7sPiTH!Evoi8*XTa};pbsauzfCFe*=
zU~bSt1}M4=xjiYibYh%j&AX|poVaXW95i6cw6&~JE`cKc12P9bcAt1;u79K}8k~v0
zosg_<0WAB?S@{ASF0$p3KDk&4Jo at 3l;`HtGS2FoM;#{V<m^vMifS5R|fvC`KaU2&P
zx+*&2{4S!hH4 at 7(I~mEfXGjZ at XU03$egP1<@L6_faqedpoaqr_(l6Y3;&u8~F<5Pk
zB4Vte6ps!1(^O4d8k6n}SwmXtJaBG}hR!!FPQ?SImO{X6NUX*vZB9=2dQ)wG_;IxE
z;NXeSd)IZ}tSECPFD>V<^H`_D{b<y_NouLR at 0*$}nHl}*o(D at 9LYsa?s)Zml|Fv<v
z84Cd8Y-wbg at J;{CQC*vm5lws6{K#Wi8ghh23O#=#sZjL;islgG at rIKBBV0J6pKHmw
z$PE at O&PjSr2dZUgGS(F- at 8j=nRT3{{trEH)eju^X`coEyNt5**smM8BAf`qfTf^tn
z^n+jAR96iQqD;ev>;5!WS8*#&S7|xs*2&RukHdh;A}SX9naa;M0oYY6QJF1kvk`6K
zJntN29VGCh;mBo0B=;PzIN8G<Hb~?gEZRc}ZAEm&dChMOE{0N(?HnvAd#Wyz78-M(
z at 4-A7V`8}Duh!U^M{KoRIQCZduc!Cu;`G9wSUsiF_Qvxma`d~Q+dX6Mxm-||cCM=p
zv)@86pEO*^0k5 at O!islC%ep~g3OMz%7H0?_W0j{Y=_=qAn8TrSqc#0F$x+V-$+_<U
zxl;gPD}#)B5%@VOd=H7j&8%+pIwF8;gWK=WY*oaJ{wQM|r;mP^4OtEl(_1*UF2 at C(
zH6IU at T0<(fMXz)NF{wqRe41>+2#rNm8$?10*%9p5_v_=j4AZ}yNT=@N at 1129E?N5n
zAG4EnB1B4i!;DaY&r8=#dD`Dl12-Rm!eIPkX at yPuJudmivx?UD8YL|tJusI^`kJg#
z?!ZSUjhoqf2PVJdQ#$5489!88w3eKZ*Tp)6zj2pn`5D{0;wa`t#?hqMV_)#ZM^xM)
z{@`F~4-8HCF0sLxW{ysUBVwO;kC|9#!&toSFS)c79{nMiSR|qOk+29x4i%W?{>S0=
z75+y}<AN}l4jaX`RHlehq=?-roZt{_pG;3AZJNBQ9*=+?BuT+QN{eVcem;Q|jNAm6
zQE=pz{B5`59266TiNwbJ#~QN1HFm9l{ehQ$*rL{2eo%%fOj8l$`c2dTC{?JCHd2Wk
z)r`ITQ3F!353N7-Di2P5yb at 0rn1o!7PkM8~MRFC3JAC~V1?$6Gid?(IDoNEn-IMuq
z64os8oWJL)&86#ulkMjfQTDk=H62{7s~Jy#icpEEhHu&ONdqon(4mPe)60`rT~KsX
z#x6sA&q**RqM_bk;|<?i>@<)<%Q1SSuySPJiIuT-Vf^`uB{m4hi$|k`>Jqz)a<+SK
zhAf~{t0V|iUJO^RMKlJ|>V{%*mN}>-G`(;7B$>wRnCvt at VtNSqT|q6ziL7G|<C8uY
zZ7(%w?$oT7qG2|Vn%mr0BHS{Y?vONvc at lsX$Tr-rmPK_tQgrfKo0~ZnRKt&o at 7o;q
z$xtmJ+@=u{%yc{xZaSx at d*Yha=piIjNA%LMgkC&y*%=_u-`rK#vV~f<3KZfrvQm^z
z%#=*VqHT_ELr557TP2j$o(Fr6_C%n+QFjU9HLjx5hpn69Q6No&;ilu*J*TQ>;m+!>
zTvui6>D`a at NL*{n$C6M-!ucb7G*a)pBgQ-(J1)pNQwlkej<(<)YJ4L1c?S>m5K<KG
z92R5ucjARLLo#gb6n*-<5B{@K-kS{wEKv^tPVD17BMkQpWw)xb+?fN^vohL`q@}9q
zDEU+tso)GDkWA$KY9`^lKbUA^d=)Z(*&@jMolRSvY3rL(yKym$*@|1hzXSNH=MU$q
zDXd3Sg3%Z2vo_X-;^@iOeqv%!&)gE^;2{fS at hD87uJ)u4JOe`qZ*K$Fccc1$+I2QJ
z$V$Hxj$AZH0gAT;WwbG^1FI%Z))F-|7oL=mcN@$rxCnfoVy5 at DC)1Um_q*rpr1Vyp
zo9CNktQzvdU;>cj9u__h9Kty<E~PL#(VMqx(Wr`thq*jlTTz7vH?xO$_5ekkug}Gw
zJ^=lFCZUj^)+0WnnvGLmN++8d2+HJ~&(w|HF-DQ>TP`ZLU$<*nw_nfo&QoS?-3I1p
zFzl``{KF-KmYxP>7;kevo^KtV+g6NMs)dzZ*I9bk>o&@`Jv#SM3Yn!06KRO^s{_Cu
z at dV?&NJF!E`C3QuGgW+LVps&ZqdDqQ@*0kTr+i1uTzrbj|7>cZNfTcfC9x`4*Rk$m
zh$O8SdIJo#983I%%GIZ!qvU|Td31b^1c;hZ9k&y6Z;Ewb1|(Hz9IfanRel+&DH$x=
z4c1^o+STBO=y1C9Frrx^9+03{ZY0NRPr3YCZ$l%D at L!)VAk356&f at 2b&#c-$T{#`T
z*M87GR>uOwXr0~*jZ`WK(Cg608bdfm5MV*{cFVUHDpk;+3KKqWb(700Y&l9TW|^My
z_fqzpp~E&c&9nd_8XkKZJ3U!tD{N8&BXZbnn$w=`cd1*m6Zob8R;RfU^@9EA8 at zK~
zAFE|-A at k4peRJ%kq&9ahffKoACHGL*Q+Gta5$_l8Sor`ewKrH~UW6Iq<Al9gmrB9T
z)xFs3@;E9saQNT43;Euc$eDLS<Xs%B*$1N%_69Eu$NlO=&Iz$jP-FsgH=IK{K2e}+
z<hA}TGD0=D@)~JfgVQtV9Y`L+)jgA{A6bS{^p|4Y)SBi1H;Ekj8;>e6y!8#j!eW;y
z-Kfht6px~DivjTzmvFM84FD9q`gn}hIPcs8GzwPsvSEahO8%kB7O<@^lX|ZMw-}}p
z4tS=BqB*)Dc~s8ke9U<LfefiZR{HT&-n9|bpgl+j1=$BM<1jO6O%Sgw8y$Mzegoi-
zoc2F~hd2_WDPgfo6wQ7YwUQOx0M2U1H>VHQ6!QIfuC84;>inS-enMx69C}JF2kMA;
z#b0Q^0ag8j(D$k~tp+_S_-CxFCS3~k)FO=-J-;PlXSgI76+x6ieP%X7$Gj`BzgoFB
z7Xd6&%O^kjJDY^SMG)zH3m~j}4yU)C=A$y~Y;$dU^1NCv0>VqkF?%_G<#<9zyOhe<
zLs%zTxG at kjUStFuF6O@UTx8$j0cE0R1S64aM+nl|O&C}__e4v&rL<9jR-6|@*wo$m
zr;A%?2*TvETi|9=t?0n?mp?ICzoggtUt=Ur at l$U}bV>R948xgx at tyW`#n)x)Hl at _K
z_<VF(<=o=ZsUY%R-E{NZDU-M79<90S<1oszou=fstCh&hn(-Wg0z7>Wmi~-+6 at weF
ziJS2^CEkh^g$O at 7QUrOFtWm|E`jQvQaJ`a>8_8oo<c(3%LBy}?rq3!kF at IqyL2}&0
zR(=n0V#zhytKiZlhc}TZ?QaP~{KSnaems*!eR0-4jn&isRaI_01NV4oU9u_8htWm;
zE6X69lm9OjO-i^<pbpSoM=L)3yy?zrAUbUa`L2 at b8r9jOSKdP=@QdWxDCoBruLmYp
z5d*q5REdK<3Q~Q$xIs1J;3iK&0pNs!0KqG*lsB^o^5Kv1#2>kc`N%$Zz8>aF2VlUq
z<GV;CCz&^}{>vi;1lrO^-lBwJSI!n81P`7AAW2RG(~h5r`=ATya}Rb<SMXFTp)??s
zx+ZCJwz^l8e56`JV+j_s;6v%VjhESJk^;48nh$Aem3`q1L9u=967`IqGN<CZj<kVN
zoSBmc00HzLTlTmKz|OOw??@Ae>q=n`zED5x<L8*SpRw??hIXWq(v+MRprWS2H%O*u
z8TZ7g6Z95$#b;0>z29*5T&5nF{I1JzcQK?)vr5g{Vy$SKfY>SI@>k`93m73;n=Ang
zoyAqSF_k=PK;N?R7BV0HH|$i^;BNY~c?1ETdd4A^ZL&y#G8on5{;!dZH at 8y(+d at X>
zv|x2Uo+lW|!6rszP$}(V92v#{Tg6?xRvG(uLA&=*r5EuFGJ85^y=h;K3Ih;;3%a7z
zzwaXg{L)@TZSIKYH@~Ku<e5r^-fZN{%Vd#JpXp$w%OalWI6*FNjr|r)Q4AD&P;&qz
z at ZNx@V#gsFDt*vkU5*^VC+ohT-SWSr23$p?!)SWYu5U$Fs+U*XL;%L4rcaX<4y4~d
z+uLPX3tbEp%gLPM3jwezS=b4qs?&1Fn49zxV=7+>OorXjSg5Q|=G8X!V00le_tGU?
z?{yB*O;BbcN6YAG6e+;V(Mp$|*I$T;{D<&1UPVxHQk((e*EZ2QpKor)(gj`G-4MkR
zH?BViUdD(sR9`aRHAfvj>2=B!XzCoLA~NyYC$EQx9}u2X(8V&A>HCFk*bbD1-hU(9
zXhA7+Y6r=|5_e$;l^ZA45U+i=-z12xfO_&IG9{*h4s3jv$Vrn~B8hI=Fz^ANLMJHP
zzmlHt;klIGcC|fzm=Y!+yF+1VR<2rGT-R$V9bxRqbtZR$U=r_|E+ at j8sV=V%m(i at B
z0q-8Gw|lz at x@pjQhvd}N0Ol=S#6t7uPOB3*%Id_#)3?->X<~2hn;;h<F8 at iuZXv1U
zjOvPx at qw#>3b7}hb{);L)7mxCG8V9a5ke8J-Fwl%!EX0_R2&VgB-9R#hl7xw*4IX@
z3iUX*(@}N655US3CEB&ZFuY|rJTudG`^IKQp2(yo at mm*cs+E6%Fdpku?GsqIk~h;Q
zW1z(jSv}`k9&4f9Y$8(6;)iPFvSQh7o&pssZSH}!L`W4zXlL}5vk8b1yL1+6vT!x<
zm&6l<KhsalgryuO)-d6aVyNv=V{fpNifP&xp_MGqrOUq8rVwr9RKxfOM(EBzO?iZw
z0k_F9Ay0sKy_#1?7xx>;HCVzjQ0><waseiK;b<IvUhNlGLh>%958NLuaUveuX3nth
zXC(;o!fy9pQ45kL{KL*{n!4BIisM?SwpI+-FJo;ZaN$;vC}kd78X3G_K7STtNd`Oq
zl_{sM at hvX2i}=2J;YxJ&<2_PQTX at Q3dP|!XM>Q|T`!Qy*O2&aMdt|YThAN>`kGd4*
zh+wY)N5{0y%H7+W_!7OWz1DYi0t*IbQlYJ7Me2 at IPc;AIyq-jIz!zXZGgBULm_Tes
z at oMjp&<Nr8PJX+(?TiDS{GCE+Z;rEh4P=7bx-ed#vVm4XJym0Qb6~@HX95Ilq4>b1
z!bG++Dg^pPK`z8jiZs}%>|QVd$~gg&@U at N&oWb0f0|U9oM%==JkX_X&v6(Rn(X`Dp
z1bwN<ai#TU?nBXr%nT2gu>^nL^az*Cq;<j9{}bAA7a*Kz8V%roYXo1fg$dlt*x=j6
zHA&o~OBfmuF1ammONr%2i#;K_OVqD6(rTrJ&+p?4AJD(>N$Yedem!LkHuUJ*antW%
zGzeu7dCnVSxKIA(6I*<;Ts8E(fMO%qMnNl|ZI~Y}*(Dqz*-68uAh<0Fk3Xh_y-akY
zOJkh5ddY$i4o3~fIbN5lhk<s128;|-^6wR-*pdn`ql3GkgZ}dJKFJllkD0WN&Y+o;
z1MBOc8O6R$z^MS!kqjVDuKnqP at kVi@Oj91PvKNCXRYBsd5bR;EoQ2uu(-r}9j%m^|
z;dDlYPBecffb-IOc)G^(x>vR+^`&jkFMT^cf)=S at V~Bi{`_G4801C%JF=-?)9toHT
zG})3%z7e~2!z29`lPt=^NQ~056DcGqialm2?`^Ti*G|)KeQr#_CKUb(Do?$drO9KE
zS{tK$q>UAxtCA!cnTK9%_+(B!tlLWI{e=C$UhJb0vWKMBr^}W+CLb^7iU{QO!&nsm
zaFM`%(Dv^qhPXi!(8Xzs3fn}EOHscxA~tPWtR~Q=%q#{l{{koUCx?lQRAhyC&BRv(
zjBe6m0=HSbc_9{QQPwQ2#&PrWv-yI73Fu-{Ww4^rW?7a+p*u{_xRq653$;4VwDS^4
zGv)&)aU*U&dG{ce=7jk!Dr7e_JE-{72*mYXcW4^?OpkNZ+ePeUWE6P0+xbkb$WRzW
z9^nQ4RvUJ`A at 1vp$;40%#Vg?!`%-xNM+}ZkQst3#<1t(LSMOqcCh?y}0*p|%x($|$
znHEVA{G)3ModAdfhPY!+PKAt;rZ8xzrzB9-Ehi#8c;jEjXaq;^A+<A)f)UZE_H^QS
zaa|YI7lb8&NJbPnlDaBt$@cD at VZN;DWFcLM=SD?WAv7QVlmgM$yB~=~%pG1F(ZYrO
z@`h4O<JwyQ|2(KN^tdPY*I;e&%Xn11`iv_ksvD{L;i*gpvU^jgoz*MkCuEOq-c|H|
z5TBqJC~MY-&X27X`M7E^JRd1Zim$&xkOS7rar(TF-iSE`)CMxmP`tT7(b!jZS{&H}
zx?;eHOB3<JJ`D-Z1$^P6k<NjJKzJ#|AK0PVKzP_?OV>hS$aK<x`6d3Y6o33Ll6as-
zUz3bZWS+=u-QZmT at L-3Y<y(}2OoF3mZmghC-3?uwX=7EZibQwh+DCb^nNQYIgYqh(
z9&4KdyWI8LWzcwQXuU#&0_-8ipZ^W_SIFWfyIa;4aN(;r3?rT<2yX?iU3o5A)I0Ow
z3Q>*EfujC(IW!w!1;?XiUg*^e_L at NFbSc~ZKflDWD&QHsPYR#2%tP3w=J&4MY2!p(
z<nMWMYAlss4}}om-lW2ku>GM)y4=>@)MQpp;c=wy^QSLd`s_Xr<J-a}i!Xq23v0G_
zhXTu(XP%kUu#6t0H#}X`=yKsBc<{s}Fu4yaC}5ob?rQI{Q1uh`u3Ui}#4}eAw)qPO
zs0sUR(N!0(k_XHoQ!}M>2*gZAcK{3W_urqLaMA-7FG*2$)P*02yusPnPqW3=Jv<t<
zf{wU_7#FL&M@?>__ at fx_l}u>a%|Hn*z$2tc4|j3_e{t)qgonszQWMbU1R-{RtAk&R
z<itX4mgMS9A;bmKv1C4ztUV$&qVS%2^AE3deM9S2X(Wj9hIof{mw at WI1>MHi;EyA?
zfuk8{?#Ixkcx6|a)#ko4^f6>{V at 8$&WFIgRQzC^yZSZ#6F^Qvf+;ecuIat!kc-x=~
zqvcR{1f&}{Hw5CU?RaCfeBCx=VI~e01i>jH=~ek#eD39$d79DDTi^e=)ly at O(7MlY
zi1gX%kbNkD;clk9DhCs>Hj)*u&7jymHxUQ=1HGPdr0|j{n=cP(U5N!uwIa9-tdC$q
zjfvJ}fQLFJ8xwhcfz(I$y~$$y<`iej-dSnHE8q<z?9q1iSjKWXMW~l_rX)DAh at Hm=
zZO6Pv*>H1E*W97F$S$1ubwV?Q-0 at QUR^3#HZ8GK7_sU8u3EDibN_0z6-k2F3?lF4B
zcRwKcs(;aX5UF|iIZZp6ZY;ZDdYmZkD)<&`dZI_Y at gG??FU?`$zIxh*PMd_92SxO}
z!Uk_R&I0vP#x+gd9tpBbzc{%+y|Vi2<SwJDkL0_vA~ICd?vYY9glZV5#0ZN+sW97;
z8b}}Opitw@&h|vBYnhR&8bBMvgoF9i{{q#}QB+>_rztG at sOy7i9;<W#ycj1FBIn_V
z6{zl8vvsjXD}8DTdc(QzaK0o*N(;QQ^gx{c!VWPPAPw@*MX~?KyZ~i@=dCzoOq-KR
zJ*~0<h{{;kLfUNA1~4sg8BGV2HtZqsYLVw&biVhdhRLKP(1;8Eb9VK+<QA>d at gALP
zXxlZQ+$)6p=X&@voe&E!#~p75p^tt-5XJdm%wSFP3x)G_B)X1v&enD%1uKlDhbG?E
zO#N1f2i-<qEo&X+RBq93M0gAJWpgoQxdIJN!8pY~`iF5=)xlB&((l>p{rnSzL(WOi
zVq&O@@3!CG1pTSLXbLbH0}#eJEcue{g<--pPlZ9u2ybD0W at qEf%i!pN<<u%PW)w1^
zWFwhx6SRnJ7#zaX6YM5JZ;0z6uul*h>%1|OWGVbqx)qSxulL+UNe-Ag?Svpd@|(S_
z0ArMWdlb)A%h(5r1C2!yAgbG?4uIjXC{umdbW8v@<wxZuea$!ELU#$Z=%~<Y0TCjl
zL!X16zJv5=x&gA0*0cvboKUJr1iB^4q>I}k|IVu|M;cuMX4V~T+Z)L4LvL?A!zG&$
zd at j>g6VtT4xvwH#aj==$PuaYm2bW78x{kx at h$~Pj1N3fXWJv2bGcQ^2F)}fRF5~ak
z+h|Wd&LB*N8a;f at nrIBJi$<WiD{Zg%tO$p0Pr=JpmVHjR0!XXVxo`<_R0j38hkEvL
zbT14vv!@^u|DqH(9GUiQb~G?b0G(NdEjQDr1`)(d at X!9b- at i4*u1^8p&*+97MYs?C
z><Y%Dt8dD=rBxLAOz at aJJ^QXeuGqozKsb}=Y(J6Dqr3!=VM%K{T?71*BT7Z1e24!(
zBgC81MJf1dX1_oW_=djrIvn`+8QaJ8ZX{SqFxkYJTM`&FTq3&6WQjZ4 at iON`ggjTC
zcJdS3x2`(eli6Ua-v7jhdkvj5`<_R9aAk!yPfa|vzZp{FF{M!3SbAJ!n9{kVPAJmx
z_|)=v9)UYQA at Pk5;P3)NDeo~22*SvyBy{Dgy|o{J`rFGW&t3LvkCOWOERfOt^*xNq
zuE|~@nPOGvHw1=ns1KwL at ZQkgk`t#5`f~+j at BKP!v7|{K*WZD--K$2fltL7$jR(}L
z0?0vQ2;EwZNV)AQKOVJ~ed1_c<rA9NW1X2_uUUuHHl77l_I1xeR!v!i;woW~PI_VN
znN~muBU^B`sj&{&lNgd{X-YfAa_R0|Q4s>>Nrg=KJ}jtLZcrfIfvoeD&|mBs>Vj+|
z at m0)Hl&*Frh=eg94%-aTSAq87XiXv`$rBZn4(j+hYvt~I#Kk`4Rfd&cZL5PZd*>MU
zBXyJlBblN)XNzo+81|-Z<k>wt*-*gwMs+YdTOVHs5cQ{FYo|Hc8V+ir)V(t+n${+J
z3+_+Mfd4 at kd#BZ|8moI`WIP*qW4Wd!;q{Az>;I-IFMEKCw}e${TAFm)taVLdE-X(o
zxq-4WR;>sRxeff(6bMD~*}~UG$fB_ItzEI4R1--SEG3L^%xXP2^Z&i056e%9tqB4S
zGae=oV2)=kWbCo<w-lceFj*oDwG}l7;$14^<jT`eJh&N+Ir052_gtI)et7n>u{mYu
za(mAqsv1r9iwg%z6sFrcgDQIFeW$T&EI6+H_iy>I*XeGZwouTb)*Vt<FxweJOd65K
z=UFWcn#h2m?7_i3vZ=I})jrx`yNeSao&Co`AZw(8s-^a!qvEb&^j;~xeg#)YQ^id}
z3g!z_Nj{uX86Uu3Zeph6j at Kt!VRU<ValL;8osuh|@eiT@=r}b%xyIRvan5Tc1)}(8
z-V$M1`aC9#EiYStKJmFy7O!gGrQKatQ~CXUL%yM!Qf#mQM^_mO?1 at biH)45&Gb&?D
z0uQHx!lqTde~4j1{Ty=IfQ1H3G+ZjDzhJO6d!bmFl_HhlGq9kg190jwaM$9Em>4UU
z+8u>Ms2X^>&F(C3%>KhWQwt|zU6%~&1KwrJNFEGWe4Fy2bedT_RO2xM+==ENjzn|k
zZ8ig`3&SWQ`Vfx*W%gW?0hIOv?l^|D^6UP;R;01%qv2L- at YaMEp?Jqc1S3IH_tf^j
zcrr2B<0vBc`W_$YD4^uJs>AP@$!!yl(+cmISFAqz%KUlfA#eLMX66)o8eG=$d=PWI
zSZXRuRLEv7EvRS=b7O$;))vbnf)X|-c2B>fUi5 at 7Dlccc@qA@|G$d+<l5+lJ<v2n6
zeU%3U#q!*5fXPI$RX~Sq|8`dAC+uPG#bf at dWKf%!j%Vlk*4v15|E?wZgc?K6iMuxO
zw=t55Cx{qJxYZ3DA7HMey=gQBSQQC5t_oyp^=%)QROn0(csl460`=*Gg+RJ`Zo$xD
zv0?B!0cM*|4|WcD)oy^HJaloxm$0;uYsGxIT67?l>345uBonm;=!74kBK6Be;<^>P
zCL;{4kD3OSVuD$QYS0w_yg`74`pb=!^}K(x=d?WX)PFA1v%fv%Brg}}qx)!E!}~##
z at uaN9bAi}2QYF8XXAZu(wf>r%A5zx$<C!ZBgq*PvA|KcIV!kPam}5+1`mV{MCnp_?
z=XZJ!d?zRR_tEwKxvVKs4;P}gI4P%#@k17o=!F}oIlh80<M`K0Ht{~xGuo~KWB`mm
zoyGQ(|9bT-Y&&`~mXVlqqGdcBxg;JOM<!yyw*+#={m at E(3MrW~7G at c}8OsR=$YH8}
zLRAyI6X3F!unt-umT#s%g2PDa at F2Rr@E9MFej9dnq&@yaly|jBLBLJhFIOx}f3J&)
zETWT6S2lt5i;+ck5u at GC*gUr?;1ngD;Pk9)TT4j3n{l>%E+=p>O3J#j3zJQAgphPK
zji$1wa5_lwQ(DKw`^j<h?K(=b!-_r+-^Z_|b^ICz5_8Qki16kx9<2Xg2K31}T=X_E
zGO2~PH>_ZfjV2x^-?p@`*S5lIB9WI5RluklpdX4N^U#jCh{5%(uahizE*y0e>39EX
z&PFIUy~=LC*s-T(7#;nI^N8&e4_W0hD<c at 3GBRP7ueb>n<H2u?m!jUyjU|M5`nXmi
z=P58?ol=?fc0sOc5kKq|sM+m?tlNZcZLlkhGQb1mD#@Q9xOq6RK<bPqZ6LF75&3~o
zV28Lk2UEp$%;3?BW%sNItBHo76klD`0H?0)@yYz)JTYF$WaU~&78=<AzJe^#FrbCj
z7x$?w!F^N3PG7wE3oO at jVUQw_v0rePea1e)Nl|t}CqY*L(Y&kO$ZfWJ+V}Cy|3YW_
zbr!E9!?CIn&igGDkbYqrngj<2!(ahfRDJ#$nNy)SQwXS>2LAnwT|h0mFpL*vhxz6z
z!nA9X&RBp7O{V at j#KhE1T0dBHQwr{6Rg-3aBp#Td6rMb#6Yf)~lkKz%1nl^BH-6wC
zAFp5+L6h|<^rQQk`(!tDV3fo<g`XH|$7vAFYu|pTLW0$xrWtr3YOHg(nOF!zF?2Sb
z1gVyE5B9F|CCqn>>)GG;>L7PSRFqeWUdd@~=rIu7dfi?yeV*D#zF}{HBxopn8v80T
z>+Es3teQN9a5+~_v-Cp^x_QRt9e(X>bTt>O^M+fd>;Z<+B|0Hl)`(O-VB;t48%E=M
zW*q1e25bZpu2iCVL&7uUN%XZ6&BP}#;nt!Ry?TzQmbY$gZ0O99A~-Y8T)4CLYgPkW
zdH+BZVDwC*KQwcaGZO8!^T=x;d0*Eq!_g>sGk=B-_{ou3T~)Y`7FQ>G*SP+0MT}TR
zBdt|s8Wz8?bQr at h-4CUnZQW<u!FmlS$_MVd%T1c!JZ|HCB>+*__D8U=TGkrU3kB4B
zE&NA--J(Dl+19 at 6|2))g1Jbvfp!}GGxcYb;nje5(K?+-Y+5;6ph~a4LGWtyUs_4d!
z{228eQ`i`)W5J at Xy>2!rHZf8jSsV>Hl9#L`SH9mznK)2-O*|7XDq9rCH^tys#lpP7
z=efn^0<WS at 4&7T`?8y$%>>1MM8vMI%!?- at 8Qr>qxrzYz!JI-m=epscoN>P|}*rWSZ
zX&T_*3*q52U>NZo`_o9-znA|0vror07B0tcR_<Sch1ez?@r82Kz*r`XMT;zQGJ-C6
z7Q+V`w7W*V`mFk^rNpy-BLg!+JR{+?`XB9^Q+)I5r}E8uW at vF+@SfX3X2^RIK8XLz
zzhz*rTD;B)bv#hAfQ*(wAaA^lnTd-svDH1|K~9f3#D?WgJQM&pgvvBx!{<(uDGDGv
zE3$S)LfREnGp+=ui$br3tQR5??q at 6UCl~6?9mS5S<bwgPfmsz#&k~KduO at Cm(YPQ<
z#^bHGNmf5S;NYPX$7m}BUcx>G{ri4XDpt0h)@+Xe0;_ at Ra+)9vB?-dg(i-~JM=6HM
zYK5vh5ekW6cG at 5iHAt%~8D2Qv4wGLjXpMP%`PNrhasb!@Cy(YN7(!Nkx*s2Ua4Cxj
z0}WsNA%&jS3Y at 5ZbEs<VOl*As?J7V2#Y5}sBxs~!gdY+*wl~L4>sLQTgW51;_a>q)
z^S9%q9Tb7c|CijKb)S at 2NZGti){OZIE3^9<?_q#)73*(B?NzlBBL&q?iRGP#v2fQt
zIF;3XrP=uqYMa)1on4y1i4H7L`xKFC;L<{feZzBcLtt{YsofA~PfYSNdy&U3Qr5G@
zv1gvgHRuM4!H#(qkBr^vS-Y{tG=;)X3N=D|e%3DV2+Esb;6;iBP}y^w<_zG^d6^}^
z^V5hy3$Su#{^WL<JGUf=vGK(sTR+<7343AiZp=CGi)FRsATsg5K~`=;Bn}v28g8 at 1
zQA!eu46AdSJ)f1ZeK=*T?y_wmr}t&2S%xcW+g?)hrqFwuoD3G+>Zl5y7uQVgdgP-P
z$7s5gMNT?DPG?IH%Rw`?x^=e~|C|OIADe1_cX&SyoRT|9Qg#lEEyA0rjUGDBYEW%K
zgpW*Wc45v$mL at 3E_@g=@x)LxF at qds?8avgunVQ)`uD>G!7TH>#T0>N)yP`jkb<iR$
zl4^!xN#1`(7aPCz)YIPGmp0m+HTYZ68WETgm%tW59qT=F4rXN;#;_u$lj5s3 at nchu
z1UZMAxv*82kfU*(r&)zKNt`GM^$hqSR*{_41I9boJ~V#y5M1<;lrJZpqA(Sp*Mz<K
zQ<?ej5}-}1zU5{%8Z&E28|&n at 8J-YGCh_?9Il+Aq&i?~CD%{jsE{!k?uS;qtS(Uuw
zrtod?=`e^pD|Wa#bZhd)Mg1J%08>D$zW}oA^9{Nn>)D&of<>K}{tzLwb*pEWMI0Vq
zS}X|Rubr6yAmO4L$`6-HF at cB}*?iUTCPHK|;KpB?#!9)sz0N<Nl1Sul<AIxt=4|EY
z=<B8v4Zsp)?8o6AnH>p~R1P&CWl#}SIi}34VZHZkC2AQN;sP4rOI5-AYR#RT)ZBGG
zLPe3Xm#}cUji_y2Y(qTpd;xtd9Srfo at k@k3{#J8rz}Vx4A_OtX3p5;waQVJrh19zy
zOgw>?ugo><Zx1BzrXe`YH9H-fn at Oj&<+>`-1Yva=lO)*sk;T`>Ob~{i{$agWATg5t
zEZC}wI1A%M8}hxT5(Z}=2EatTN{9eX4{OWn&aJG{^Vj6dC<p*VMFG5R_u&Tiw(K8m
za_4#mBvfw9+Q^-x7GB7OiQp*Go1c8=9 at HtT1@6Id0=QUIezd_ZZ&=O)Bsk!{Ul5aQ
zmrfZEg93K|I<Ifq@^57%w2YSY0B#wS*axr_&wm&uUT}+BZzi_*U*`q^6ejtFFqB8h
zSr!jHBR^&XR!Ve=Nw66vH-Z2O$5EI4S&NYInvQX6d8fX_YKAmwk3w5hqy$~jM0Sl&
zKun~^0PL9(9bDv1J3QH%d{f)EFnG<69E^9WmTUT19Q1R>Bt$!5No~Z+(<!|Y3-saz
zU=|-x2>#AJV6PVx#??}YI8?)4Rz8Pm5*@HpG3?_w5DvK}jyPfhqtixI6U@$^f8UHv
zeXtfJf9RtChj=gD7xD)l9K1Wd%brQpwU;|mey41gG*b$$|0MD2sL?a9`8CiaTBYS=
zUWB8*IETp}<HyOYs+t7|MGu1m>PW8J?<_!syYKF$KuVv<X#yCgZq+Md4R1{2&K?c`
zLIJUlHw+Fkp#Sb%x-wOL%_m)Zc-7$y-5Tg7kFC8-bJs>5OJhk_Ut3C_eGtgR99aD6
zj^@JDf&KLYp|7UsUaaH7>Ml`S^jd}t(VBKc`9i*H!>aug*6%52rrEgQ>`gB&!R8`d
zxcyJ~YhAyxQ^=SRGl8&+$UZ7B%-{3HzqvL>aSx0XV(VF9T*ClgySJywEU#8wz$nIS
zmyU6!4K0OCZd<;&v1ZcDJG=YkHc`FG+J>mpopbpMh+jF;@S_j}twMxU1mG~1F(g>w
z^V^bpnWrU7+)rltHDQLe()$sAQpwZ6csuj25PE1M)2+!XlQ-(^AN=E$84!(wkhka%
z_WTPBs0%7^$Kd<-o=JBR#yp<T at V2$P8;nCuxZ-s?Gmh-6mM}(nmk!7>2+>^mv6%Oa
zXz1ZPLcX$x0*nn&&Bx*$uKgnfK2S^pM2Cgi9|HNOojHz1JXRztEH5RLRl{$Jjt}t-
z6zZQh9UR_cj3nXc2P+GZzDbV&aK5F~5ZE>pQbK527+&<8UPCws9tX9RbZHQYW1q at h
ziSV%U*}9Ms{FTnyL!6f&3Pdq#YGZ81J9i4=sv`j)MYmmqY$Oy*hj;ou8k<!w#zj)*
z40^a^h5t_pWPf9}B{d0SR1rM<!z=OfoGbQaN;xaJMC*cIsZ7%C%mJ?r2fD!0D`A>d
z;;v%f2A`C+WMb{~l?2K^VXm95l_wfn|8)rx*r>=LlD_IJZ;-Nhw(bKL{FdFnZv86k
z=|K{#n94RneS6`Tux6?KBcY%2xCie7o73oBH>h;rxD4bi46vf_TIOA%W4WHjKHit!
z2(eSV-fc3#1CtR-y>_s0zG8cQP-wjF8_=X==wETFZ+49N-buT;mG8gj`^-AxIs_G5
z4?Gd1F>2Eaw;Nv<01MHYC>*lu->pq#MGfZYRYlFdb*Xb63_z8^{lrH`IqZOsPhju)
zTc^dbb_`+24g8H0;r at 2PQ3|q879k at tL8&eYI%y~1Mo>H`D;Vv|3#2SNhPVn}6KS!g
zJi~z|zv_9a+RaJ>H^*$%38YT{y{Ue{44(*)q1Zo at +Kuq+ZIXXGRM{B)ExX%0yB)>)
z#z$HN;P;t3IKc|`u`WAbJFAv$sY1V%KUpn9BtPlztUiYt8o{lxlN=;Z-EfvNuzm6o
zV2juC=fq*cf^V_~Tv8*XCX8seu{Tmf>48XTF9t83E)2$)s{B>BOq4o;S;p0dkVmc>
zrwaXkW&VSXuqtOs{6EvK31?7arn``<c+FBOuQ~6%D#I{SGVb(LsLK?0sqvF~1$$!T
z50t~H00u;D_MdGvhtd;O4oCshUadj=`@SN^!)S_!Rif|V9eH6R#%V%PG1DWAZ?1}?
zI^(J$E42gk$aWfY4Urm*<B~Uz&ab?kvwvxpk_6gH>-7k%#=0$_1wG3^wWa&A*cNgQ
zVaM2mt-`yAT#!(Fm?CyPJ7%BS(!}_wjkH=D$%1@<;HzKW#+?hjo>DVgS--{auR}9f
zp#6iaI(Vk<YEW5(>Fn?6Fr~hvUHG$mGF)uFgDC_DAK$q)&Gh~nsI=8her6)N=~f{3
zGfE+-vQ<q$&)32ivGRRYC3G_3K#rmz5iv5jl$dq^6pN6X%7A7&ErCk8&EEi#DZ2=6
znT+V~u(n3Gh+<EP!<Dy=OQ`~D!_G4N9vBF&`6DIpZV&mGF4Wfk*gO1 at XzlsFBQ*e&
zfk4}2Xp;rjbuZr0rVOqKxjg_n4{<~%A6E>s!C;SQm`$kMH82m(Z=-yVq|fcLC5NIl
zeo7-^sXauuW<-z|8RFZUQaV-c=FMhLnyXn)K?Ih>_^%y%KJz{-A7`@2R~5JKfaN*M
z6cE|)_3i3w`YvB=O*`b=Gw2-vqg*~-VcY0S(yf%yrCpU%xXETKC38Fb4C_)#-?}gG
zY5rDQ`zUw8Ljmh$ltX1phyq)Q0#G>eKl;@d1Q`K$!jhKpa9h1630FObPYboh&lHJH
z;Yeh<YrKWU_ylla_F-C?SD?lucEXIYf8+w42m?uY%UOGs)bbheb^C<Gc<S^M+AH*Y
zI3?B36a at BUc^@qLKxB)BNk5w)UnC2!k#S!0Ok6~4q}&aEPxyZqpCA&jtXj|&4(WK0
zGCzjimJ1U<w8(e at Xe3^9Dnh#5=w-i3M$<2+<X|D=sg3-_QbNm*hKdnS#!HDbJf38S
zG4yamH!T<F2Ct=Gd&J1?@gHFgIl;#2_|bf^QXeRW>jlbbdZBbbInK?IlY#ga11I+$
zK-11IfBgoS95m8vAiHN~E{)lZ&0H<}Or5_u9})}$=qkVS at jH~r at t67zwE03}=d|(0
z1}49d(xW_wx+{=aGajt0adE;qhhfk7R|qjtvg=fMW%o8 at 53(@?y;r5yyg>%p*nlaB
zw^RGPKjv08ZK17D<K?cTzSjc$m8O6b=3Awm#x6XqAOPb&M>xl at 8{Hq{2$RIl;wc7f
zys at O%`?@Mp`)Mx74B1ga+_!eFcj$|RWGFr at byS$(RBq%-esLr>z09o51ht5u(U22M
z06i#(SRPL1vZU+RBRzr*IEz*T#OsmcqITB7!&TUFpwQ_ccS1G^1z1xyVB at E*?CAlQ
zb2qFe{^z%j4{?WavY))0RizK3EDzx5YZ#_JHzyA$v-gf<Y?(e~6~0jEkf^@mT%4G=
zYCDKk!5bu`_{NX;-hYeiQZT)mmBhynAl4%OzkJ`T#N|Y&@Zos7*4HJ?@88+Key(XR
zWeOa<nMvpZ#9V}x(QEuN6QK#iO_XiaIFuru8H`Po5rtdEOtk!X#}=cg<^Vc~6vFPn
zp2Kvo-g~G^a-9fI93YZGKH&meXosCevLxSGwFpOWI_6oF)|Xh%>WxkcLsYipHH)^P
zhB1U5-|BJHVPmFc at E)h(C6!MytcruBMAobcP{k2m#dd_cw~Zm3R7fG~@q?4(F_rst
z-N5s42cADM`h3K7=b(JcO*b9bFdP`lN3Sd#;|QA at EXbwd+qIWG>H0$_=Ztiu&2-Ba
zbsAk+0Rd3q*3P35>Y;8#Z{z1WMg>f*cMgsVb(LeZzUXx4cxHH|=;L!X>&)-1U2LYv
zOj+1{bR?QD`IKYETGglW9`km*Dw9)N^LlL$dJMccuNW_rVS31Uxu;-b1+2H?$xtIx
za_p>41+ijPC#?aLF^T!5Qjci|6Qx!)OO(4`pKu5CRBX`j9yHXiMXiUgShod6$E56|
zP<QlH5qfm=3_ssQQ)i3X)hO?ar&n}yH=0|g8EzUki_o?OJV}{R`xp|xn^FS at xomt!
z5Or)1Fv(?;- at 8>B!OvX*D!Uzlp8xcBptSK^SO-F^*G)6#=s5L6j`IzQ6_i~sf|;xK
z<#v^5f|=;Fm6k)|_dA$>HS(|);?a?o1%;{%e<YKNGK;{vW(=X46k5!F&I^3siXDTe
znl}U=`5gd#B$x9)Vhq%buKw?MHGfwOKhu(D8x7ZNg<6G=$sLa?Zab|CT~LCi*-KsS
zGO9K=ycmy<{)$qMw|*c6J&4^d7;&>}0N!+mT{Z=^i;mX}!L}uv=SuUgs06^;rbp=q
zHMx=f=`0$pLs$??aMiXg(ET98euc}GnE<3pe^s)vlUA##5l<rE97?`Z2o0;G{F){h
zV~No|UQhnyveKf5>|BH!r6yLF3I}v8a<afL!DFt#3KX9pZaffTz56Nyt6VmVPSeoL
zylmU^&s`cN`7D+umkFs5N!Bx`n#b!nu at B#Yia^X~3+uq_yGN79mhD5n047odfo8!F
za*R9B6p%gDE_m5`^f*k}iH;SyA>duW3ze;T#+VCee=KfRG83~NO7i=0-dH0Le1d at 5
zQ<QhuLx;0qVi;kjM<K4a#WYY3XxeTHK4kb;(Da5>L7nfG>H9JCKYj?z1|YnHvO%kn
z<NZuL%-a8Z`BMg%J>}N#5hH~p2w6ee54b^N^=<plRcH)>$iUxB(=E=%`4B93XF+mz
z$CKP<%^8jjb{Z$Agy9wStY7R!kWV?4By>p<q^ww-1SJP1-reLm6Cz$;>x1W&Xg at mB
zf)Eavivl$K+KPxz79sVO7y(F!08qH{ak3wt%9pBH&00`YihN2)G~7#(KKa5Ls=^Cx
zD3)Rr&_d{%NA5Ua=|>FXBVN8=RIYH+`a*^$iZvSp5nu{;O%1y>o<E$xSM+KzO=0ZZ
zCh5abA_Sl~ljxBA+J{Lj3!7v$zE!estAl-;^;kcqRz|1w*R~~<URD at -GJDrphi|0V
z8mN=p?x<rMkr#iO)*N!(iroH at QakCjFHm7nYqBJ-Pdl%$rTk~^M2;%aZErkvlKS at s
z8_^)A#bn<sVcEqqP>2 at m$1yh7%S<`YS&=_YWeN+d(Mw+^KH>2}>euDRM3T0t^3*xA
zHk!3a65E|wXeI(|d?lFpf3tWn6ip#wU!>WKduQ+-j2{3FyscSM;<72&o7CYLo}-~X
zKWb1irryb at iQ)b#@FkvkVT}2ZUozwY at Jba_gGdeSN+HyaVAz678e&m?fB<r!BE)3X
z3M<P~sFU74#VnV5X`<M`Z50CNd|Y}x>te7wX7zrnR<y(SdB(O3MuI4Y__Xq!XD%#P
zq?MH7K!(|K6??wxWsF<|CsCU`8C0=QZ|*$XE{6tdqG~QN(YOU?^$9M=`}UwetXBUr
zb{pS3lQ<GWj~_cNWbyO!yE?H0r&37>D*&F-AZ+={e7;IyvI`BnFA|fw2EP6GmW9#(
zy2P}nM9Zj~4`1P0Z9!*@1)cj#5|t?q5FTPfYER5zLQ at 5uurgXHAHAVPI7Bq8B^yg#
zL2 at OyOrsD9J+}FuvdmB<cD<Z#O$Hj13KZw)r!Q_{l%D&SUwW4Ur{P{Hnr~l<Y~35P
z7oTg6ghWPZ``-pW60WUtF&VDu;nfm;-7q|pLw%dbpeu3rb{x at g`6e-tC-XO<bk`T^
zfXqHRHgQ}puBl%VVkDGVB2}NiOhU1}3Yc2**zaR=5Cpj34q*UEHhHH`0XZO033ANZ
zy(EBCZKLawYg*nsrCG$-nNV=&h>Mfyvse&?b686SG^@QsXr<0D3q3KN- at Fnm4BZG9
zM|}n8qxV6gl0=t_!42#VB(rOL@=m%+embtjQHc$Zb|Fg`yNKVKD?fl|Z83~@0$@CR
z{-s2OF-y;D`i$gQQvS2=b8bP(u$K7ok$}LOX at w)F9>PX~w=p!!^mv8L5^YpCBvzyT
zGrh!&_{;AbNWKw}InRw4VY)8KZ#m{Tc$@1iWMay`x6^c~vyw#<A$S{K-l`b--hNe=
zTG}VOK#>iANo(HF9i>%d^ha<_6y<}F3yKF$;IivA)>?!(`t-*al+{&Y(0`$>Pi&lm
zW`x(IN&tI1w`XJdy{Rx7-a07F!hq(0qR(mSyM at mrllgkgP6}2+iY?<?lgmxJ-qH7k
zDWu{ypS$Kk+*cb at i1P$6Kl}~4-$e!a30+!boL>WjIlLLNIgWiuIC+)CE{DynlnH*j
zCI%hHfiW^AMj+RpqvcXe#7C2Y^tg>xxTWR9o&yU-Sg_8`BmBd{aHNYbFT7Jke1^Ok
zi;TmktMGvRZZC$K7K;Cn47773)j$*jW#LzorF$Pcz|poNF;D`l0bAQiMBWyaiFr)!
zMBjqO7Wj;<v8MRu)zXeBKtcJ}XA#w95fY#A>wd16?LmWcvT*EYKIWng4F&GHFS6cC
z5Hhs?KLv(1fxZbnNTgCal&_n at H9%@W4y)J?I^fa<8RnI|3J(o!`k4{GHI`k(cwP at U
zjIx6Db{Ifd>Q&k2vaVe~PUI!MrQ#%cfBskz5wXvhDG4*bYW>`}nblf@%UlWuBUY1j
z(drYX*tDah&snD^DLuySLT$m4aYK`wlGn%3L=q$d3#|Z+D+I1v at E^&Q@(a(YjFX+R
zZCE(+j;B9uBc_)im8@{QNT;7S?_2;*4T#x<SMtEH={T*7O&ukD?a|vYHod4pr@$N7
z at zqFZQ)~wXviuFfrlygZje-yge{uOm7>iktXk^7MQE-9QB*y0<nz%TyLc2r0xoxEQ
zL_vhdrxwqPD5k`Wxz0FbR<B>0SblL%$+^d3X^kKkBC<&14gA0gh^@(Yan*!0cOqd#
zXXL**Vlj>Lir}2 at Ymd3Q+8aBdfCeLoyihM>YM&c(06Y>i5ESjTj%(p2YxLF}FW4tn
zyS?jlLuD+v93V#6$aUJ<0<GUIe_T|gPNEJ4Mdaf1ZdGVdP*AW)0lgk9-gnmDQpMKA
z8KIwyZUM!Tc)Kp@*x&La7zACb|B!V at rptIm$3Q6X%raOBN7Le6y_|GI>rqhN&xAi6
zqYkuTiMYeR{=wmbz~gaVunKBy|8_i9mO`<DQSuAQy}qvZp{c3(LT17 at 6g<2-$h)L9
zBI+$L_L51&S>WHid&oZedUcfz#pOfWY+n)1>~!mjGb1GpBOI>648<qOqR931oyewu
z5N6`u%lMMsxw8^@*k82>vMPY>pIhNpaI*eNr0#?`?x2 at wyONSQZ|PU4C8Frdh2_~h
zWSuhZe;!{78g$APhHf9Y0{OAW!%Kbu2-4&=PPfDp^mz?jFi~D*7y}J%`MB!DMOJLf
z=atS7oj97nbLme(*IYD#*zXY%MEbNL!&lHg%u)^l5GAy?M~ra0i?s_h2+V(v1Uk?0
zg+WZ&7G&zusAu~m8I7a*j^n`Bjo3sO?X&(^RsHwx0l%F_D%~igd^ik|5ZGM2zXSfZ
z2qM%re!>Al_1&q=kG2iOG-gu=$aO%s01KgAy*uQ(KSP|Jmhom;JWt7nxIUbJTU%Ru
zj_FPoKQlRMH<+uWtvAZY1&K|QB~)F6JHwXAy?>_UGY(WNbd-qLDs$4gfl!^c+*uLj
zc04_8!ttUA;ld+QZ>zOGuuF!d*Dl|t at LYT0t)iR`iAitMQft=6*IADTC_SwnK&T2m
z|I3&@D%e4wqvF06B3a0f>$eRJ_+gC$<4E9hU5rM;#2?Yz^4Y5<i6}X&D(3_QOdr`v
z{2|#u?_e4HLM1s_0UmQvn-MCwt!kyQmuv1{bI1=%LDz8EN9Ixx7(@!ujg9kyGJzmn
z_4-}0pPix{$nqoyvi*jpTCe^BqqxoHjo8%zXG$TLWbKWov>H62L6riCr|0MwzZ0Ot
zeQfGDf+?P71v^egd{jfcVsHb&eaXCgr>9Qx#{-ow#dLIMt$3 at s&SixMzJ`iTfwZ!{
z`NH0LxRZ at h1;;VgHwaiNDf8U%4#J#yp_^up1sQvt$LWE10sUX&ON=HAM`<mRq?U1v
zGt4<_K==n30kykPs^$}UBS$r0%^F at 8W3O#UpC*+Zswl8Z(KY$r+p<8j1}&h(IOmF?
zq}n^UH~^!C at hg|N1)J6LTWYOK3Te~c_zSUv9<(Y}yoB!qF$D94R(!uxlR&k^lC#)>
zv_%eX(nZ*30vCy+ZV!bVf5&iX@>LduG_#T+5`D at 4xr>~SoSU`hABKL4eSKP!rex|G
z_ex1)@sI#qHiWr<b8^!@hXqL1kMz9$RrCaVjU?gQHI_OKv?&I~%);*33u=liw1 at F@
z22E}tFH&fz3BOgWn}WC3rr@)tZ*3$EfX_v0QW~XKqn(x>g@;*PpyW$dkuMuS6ZdI(
zfc{!Cov;tE-H(Eeiox|e*o>#&zREu*>U_~g&Rj9gwa~<G6TM1+1n(oe&^#?emtEAX
zc2yHi>_HLFEQt!Twz_75{CBTLK(x8iRjNeCmf63meI&I?IM8TXahNpfFc at wU+d8+C
zxeq1I!u- at V+ZQgv%zqiwL9!m+Jbe_Q;Cd9&zJupB#NiR8J&sDwU`85 at TuR%H==$?$
z<uLMJje{-MPC6SVKG3`}h~YVs`0 at 8WjKarSJD`P<umqWS&B#kYYI36vr1 at U=V1 at NR
zGkZ>qXfz}6;km&4MmJm&IR);lsmk4z>1cr|1$vdu$>7eh8CD-X4K6nN*6B`Q$*n$q
zPDqSGMowRNL#gpU0)F)P)Msrs%fV87)TFNp>@k!nRkyortuJVJSkO2Go>V#VrO1w7
zuR3tK at NJJNB>{kanr{4^!8GTZj?S(0+TOU3DEUYXz9nE|YVZl27$YMYn(Kq7nD)_=
zy-)l%<=xW<S=XhHy%TlX5;WO|cb#LrI^KHj#PG{4?{g6q{2P(GZPuu6ea;-QLGicR
zXQG=zjjegCM%Q at CSvy#nNn1T(c>YyzS$J8{6DL{gQl at eu;F<CbuE3JxAsI!M6Klw!
zz}ghH4M2zUnl#XZ##)+#4W9bQ?j_D|#A{^dRnrV!+9J{=_){N>qVOo+8Fn=yY4wc%
zSq3(xsvaE8L^;4fBiQ?KQ2X(eu69izVP~zSEv~;zr8<!(rH^txQEy)Iv7GAUJq6vl
zYVlDNL#5W|vlEU%!Q~rhewNgCG(}Gk$(2JN{St~@Lpjr2zeU8$_TRtBOwRG=Ji?N8
z(&y(wi-~UX=7K$R-z$zeip(y^?!<PXB1yU%`iRQea9d3W<t1&I?)Pr^FrH?}lHE>g
z at W;(WJUSqj(B0>+oOjWXMgKb&rZn%kBfO07agybip!e=d1vzI6A=PxIH?OI0hrj6P
zD;ZHz`V3Z@?HxsE^ovRfS;)KWH_FKRtP9Nu{#&!Ts%9}JiRfI6`9r0>I#@pm4QUsy
zEkfS60g at S8^R{<=m^9GNs%t>o!`l=tG0vrmC1&?x5E^G|i`eyy at sYx=|L!+6rOs#t
zgO#EE#9x^ls@!jZ--l`dQ88lc<{_T#gXC*`IL4{^rBT<2hePhPpdTePTt1~Wn|%3Y
zf$}5HZ4I7TyH5hStAV)^EG&p7y7WNOC*gPy&NB2#fK7d%!9<*J)=?ueOPrF~&2PXB
z*GcsaKf0L8^u)kiJa?}m4ynm!fbDjLY){vibD~x0tvW~!>wyZQD4D1(_%gCKq?*H}
z=K2tc9(=@4^D1#(`riN?;}Ey)vm0Q7Ctr<PYExgD&Xa8!wmUc<NC2EI|A&tv$Ju-g
zV$i4n#^c6qwb0UX*Q$L%;w~*+#O9K?)ptrom~2S5vuNZ=Ys=>AxsRZ6J%AHp>cfiP
z2(+?drQnz`566H`eqahk{Sjl7vkkP!*SgDkjiU8rVZ3BDD$2seT{@hat%jT-4%aF)
z9(0{^b7>L$7iUOQP^TR^8tg;cQalOpOD+8yerCA0fzYH&WZ5;|4h?(D#gB?9orW6|
z(mXU!a at 19?=L28VY^lGZXl}&Oe2l6sRkp5WTaYsy$FvuJ_dCRUOv^H(#EOxuJ3~^1
zpbFYWtU at b4u4ZaL9>zz9=~bU9u-50lgIuRj|9o$w|0aUQ@>=-t6FRf+#!b(OQ*dLb
zKi8WVyhQ$LO}Gr!@YlM=hWzhxm5P36_P8G!ZCZYG*FOtvL8H!=2E*(wajjMC0i8pB
zG9b|wNEDO&QC;aUE1gwte_^<*stWs&9Pp+Qq+W4cGjqFIyvhqMbtaidKPvkf6y^fo
z%`zvg13w2gSr%*r#)MPmQ{4Fw9q<%5V1iCYRmX&;YFPNts&YV6E_5jSJI7v)HJ`MF
zyQSsR6>*J)wVyoaS>@|@Enz(#N1>JoWs7`mr$TckL3YY~0RVAqz8Wnj?iX~^@l(ws
zY%U7+x3p_DqX_kDQTp0QvG_Ui7EY_<k`;c@<v+TAEp%F*-^Mldt`810ysfR3pp8pC
zd5aY}rWPD at 4>gx!1XnVS4GFFuFp4<{*88EZdGq-G@!BMNcL#JaO?)|%F%xx2_4YPq
z?rkdBKGA|4l403i?$*ee{Nr^M0Vx81UI>qhCTu4(^OQ=s)8hBg3WGao{Qp&gvaHY<
zbPQ%sd6z~Z-gPchn_l&lB5yk6v&E*Hco?}f$-g%Yua&VCpp7ELiZAUsiS0y?R90sj
z|Eoz_p(=vC*38*LWrbDz9w9~*7%Z%%D94B&-V+_ixP8Z$>r4%f;;9>2*F$O`<^3O)
zNZOOKRUBqdW#F at W(Zvfc%f&3<p!BWl9=)mYX{Lr(-^*k1%^anjOC)^3pExK*XW9!-
z0&m=qqum3u3{AosVa}P6EMejkbTzjJP_<1ht(h_+xe^I)RzNjhOTf`9*Gqv!jKns_
zj~2FlDrp+iMiTrgW=88Eak6C#X|ugJLZJu3fhhOsHN_r@(7%!Ct(0JM7xwmK4P<>I
zv=%C<h|(sNqda;_PHTO|bigx&R%7LbGn#<&xtaJcq$3&mA-tC+2lp_<IK(P7aj=s;
z2-H>ze%F;&VVJfuy at lnWa)iagpVL>7FIp|9TWP`OS^=>F%Rr~bfocMZ1AE;sB#3RB
zBkEAUu>+)#6Mx;bZ9hNBOc=br$NHk2498IX27QVoPdvEyvsqQTJW~?n7j>F6GXp?b
z_4M1nL*rUE^ST;m2--1-4us043XxF4Z}Yjk%ltcJ>Jb#UvA30}zjxBo-<(A6r*#6S
zHT4!iN>VM*bS`x|CTPwmYQMV=NG|P%VFRwDbbZ<MX$fef+)V3RKX6jlJg<G58iJ9k
ze82K at m{OIArCp(Oo!{4CynC}tQ;shnSde8ZFdj;Gl^k>vs)_1WhxN^^O3*DQ=z8v?
zsDWCCQ;Gj5-#(OPLGZMJvpQy){5WO`H!Z%=Qn0AwK6YHkrTZ5hZ4<GKZFT1I&nSK=
zsSKJZ`OKjoP&Kv=R+Be+BRnJ}d2J$WR>iwW%FfPRxft}Q0cfrZj0hfYnMbU{u9j(!
zd^ulz3O%nuwl)*KBrGz?$oo5N9a2koflr@>3hpr^Hw{j1=GHk!ne}Y8?o>cAP9ijS
zADL=qwNHH6@<Ob%6q9cYx?fkTkrZ_*Ai||MciJN<zTBE2S<Wc_mKP?q4t2fl1vxOK
zH;mA973q)SWlapk)gQ|^N(1Loxu93yi26H5Vba_mCe2#m62Gs8h4)lpNsnke+_*Hd
zyOp(bP*E;*H*;C56C_58I(^B!>+Alb2a<)KPv+P?CqiaU3~@rhS=ug|Skq;wsSe9J
z7{#LE<6xQcS&oaUS-%2|6u{NO?J7vqx^#+Ynuy%8|G3rZGhf6+dKCS;b?gsu at G$54
zhlYY|x<(_1*~-p!nvP7ghvz%Q_iG at 1L-wR4KUnc!CWbh&>$k0!nw$+!x?WJ(S-j%)
zz{=Mx76(+Ou4#T<a}v35N_QI9TQHD2=@^3#xR>@1UbKeEyEmyh*AY%ks9KM at -3zso
z34QZmVlzeIWIp#Da|KnNz9px7U at hgBO@!>nc=z%2QkQ%n+;~>_Y_rWpqy at I1#VD#8
z5O?^Lbr>`qZv*1N8^otMtnuL^DC1YYGJpkc+yC0m1}~}K$`Kbm8aJ_m3Ugc2X|P#r
z0wjKQ1t(0|W-OdPi8kczyb$xXRRtn?7$nwsV6<T+ukoawejysj&o{E~R*e)P6PbPG
z{^AEjEh*xa{vddzyfm^GxMbpu=sDH}lS?F7**!xq(z$b~Ac7t=!Q<mq2MA6cP;jh(
zA5fE_qqsM2 at 3zj2aMifSM`;F@;A&+$mNEgX+r7w=;x#t)&ih{pskKU&Fn-qI;6v)9
zxrnTIW4d>*<~Dgo&R8apBsqI%okom~?JCukYrvC%?1<9VILPG`;LMRuc3xr#X<wfH
zY59jX)OZ)K=w2Teof0v+;ncVL<80IolCmuArA?N9X1*e;Y?39MxIzNAME*Bf8qt9B
z`iSLf(~Kvm8&MQ=>n+Jbcs6~`v~LJ2$_LP`1tw3orCA%ag-W7RGdK|pmZzMuuuHe&
z6rWvLZAD?e-qnCBov61)vtXitxGGbNyH!%Cg?wy!;lOA(iTw%mz*k3i9czE$*mDhC
z1??y3BmNTivsg<+hbk at p@-2>7pH!z at Ne~zmg96|$lv7+3G)PRS--GvL0zskn6(vo*
zlVuoNyx?C$39&9f;P?YMm^!UWXkP8T-0*X?mr$XOw^_s>!=1Neh_k>IKem%o%6jI?
z1(<FDj9jL#`_`*P5}6rAY}5+eOT|OtdGBag<J;MOb_zNT5w8Is#d7AMmmaDNWklV$
zg2WM^tT<V-4N>-6gY`}amU&yS9J&!?j}so)y;*jSGZB^Y!w3?IG{{_s<+;*)5Wlw0
z!5h!WAwU1t2lc0Oo*fVoCL~P9|7r+5xViI{k$;WO?a6#2_=YHMn$bIOcDSFVL0XLg
zmON`?9UJc56QHmji`bUym#AHGQpegveIi;_XmTtrfX5c4+-edz${Wew_`A$=o^+{G
zY|)<4FJq?+1%tmsH#71W*TXh|w|N(2PU_;VT1)aTRj#Tqzj3yu0`VFn5=+a{-`ph3
z`s*1<W=DBE?A|~LsP4gh@|UoFP+V`Pgu4vbGS(_8f^_YtEo^+m5mkFIPC=cqxV>9H
zJ9POeBrKe#GFut0Phq~W2}P);b6xO2Y41iiJc#F3oN#?=#5gAe8-R&GA5*l(D3X{i
ze-_I0314uR$cg-$Xc#t-Lcc1O@*08!GD=v|0%H{sZ at nZ7$Bbpy3?gS#=h at mUmar2&
z04RaN;om;g!wM+tA9l76C*rA_{X73`C(Ql=$A#tZ?>IsBVWreVf|HZmFNy377YLzn
z7amW!!tZ6xf>YqVDo2!=mW*;yPt5DY7lpEnaYefLurb0}7htEaXp4;h@~w}bSH^r=
zsWjS at Fd7K9qdj`tZ_&HB#Vmr2Lz!_sT0do)j*%j+vlY0%)meT}ahB^W_}pKaRb9tm
z%BNp!*Dt-6Sr|%rlkrSlrzpVU`<Sp41juFBHK6#ulKer!AAU)v6(Y{*U+<#I)O4=J
zx_{QFNr2KwgzT^1iTjms>UqY^gDu_3Y+5>=yAFRwhTo`ba^C`D&Phj8ARL8<pF_HI
zPrOh^FT`EK;<|JlQJ$}v)HB+3wP2R2ZV-HV=I^VMc8EV)y?wE{b#lUgq2_k%j62o$
zc!}L?Jz{uH(#YH?KKVzjwF$sKAtclYxc(OMmkjW92oF&8!x-+d&F@<Uhai^EPNGA<
zV$zBSD1$u at hZhdhb}=g(B$Fryju&_WunwS;@^TSG at p@6zzvqa7jLm at 8(ganfM4?nU
z(`W_5bJ<$eE=UxV?GEOxR0(qBOaM|y*-(<rcc)Hh_-_59^w<?M1~V$0zy=h!egm`G
zoh~d8pl-KVs|W)mT1dx at 7wp!hi5do5kvBomadHP;_9o_IJJY=q5<cgB<hVvelBl;~
z-p at Bh3qzd|N$bdz;C!|rnn;BMBSXZ80>1*(8hx9yli6R-TB2HbG7|{3^G?wv;g9|~
zqYlmP at 9z`aZbU5mZFA#36yiC*rSp$y*&bo!6UgxXNVlWIt)aIA+Ci-v5H}Y(A$2#I
zuGzB<ecupBk29ONWXN}zskK}$ek0AZ&?GF^yN9D;Y(4lmnWprs0;w&98-$r1mb)ds
zjN?OPhtt!<Y!Cukeqf$Ql(+Om{wC8$KlSWk-kK4fE%7a3(4fgJ=|B2D6zKEM(87I1
zCS%#fe^mY9^qz`ia<eJx#Fd2zA6VXvQc4j8(`}D*lGo)~P5aN%@_)1tM{ItS=>G*g
z8*HsZEG!JxbC!i5Z~litGgi+1_pIk%^%VCe2~@U_bN2lH>~2yZ;;aVWbn3&~C18+J
zc0g<;6+DkxMKm3e|05lwm9eulOX=4}zr8r)mWjliJ<rUep^y%RQ;Z7E2E={QUI>j8
z!hW*trxt at uV%<}&Sd!7eSQ6UHD#P4n^MiNp=L|pbc_heAZ~#NdHopIP8Blm0PZKxh
zL;U|$_K*W*AtU*g!>x$nf(SsrE2WTakIA_OgtmL=QPE0(Hx`Tf<=63Z14c#kG~wK0
zkzD+-tR<S6 at 2&g9W8HH>FYYOnY|?@Xb+hEn;V%Kww5ooT=;7KBSss;O0P1U`W1UC@
zRWb|EWE5UHKeOvw50{IHW&LxqUtc32PkPy72#;V_kwyiy8X-L>RuabdH2qWG?#F=M
zuq?#(v%*GlJV6i__h|;ro16Jr{FC4fw}Of>qbAE;{r7v4%l9%B(%)ED>eN+QF2QqS
zZtM_6nFCk}E?koWWP>)53?7ViX57ds1 at N<0Ab;Dw+j7k<ioh$SFwl9e9_)){N^Kpc
zM*6>llUOev9zE1IM<pB*B!uL1^%1SdV_QUC-DV-6D8Xk8ZJcPdZlwpv-C6L_VIDwl
z=`9t?oRE}uab}SsUXH<~gA->cpg1e&Y6OAIe0;pJDR}V)5lAxJXuBDKDyK*L#@W|=
zQq9o at eTBEv1+V<^7v+u<Q06{^YGcodQ^1Q(Imn*TUetwtgQ%b+W+A(<`ON{9+yqQD
zJ;)~%kU?L#ODjrJkg^)M1dIhNzW&`vEk5J<XV>|TK6eysGjFVt88N_~APB9UghCT2
zit?Rh3BuRuz53{oWnLjK7(&3c0gRIwyQ5~os+gakV42pWyV#La6<@ur+D_;9O~1BI
zL+5RwHo}ved{Sx!oykr>aX&uT4zia}t{@x=Wz#8COF#ukFIC2pl67g5q91e4^T&!+
zfPgPyxu`0$yoRc+9Lncddu at zo?<B_vMrghDKKcEkR?7+}OGS?ti`FlwpEn(bT9JMu
zLnegvZfBW6d4^S}VOqKSg8#JU7lv!SNzN5Rhj?ibqd0PT2Rmb<bT-CZq#ApW<7XH`
zni>3kzI)8ntYpTkuTCx$0CQPr?c)Q$Qa%cWd$2Iypo6PYw~fdDThG`@a4l#p3|+wg
zi&7%f*0Bgp0S;dlna|-HU+o3A at 4>r7g8Hms7=Yd{eEvK|O*a7wQJLa1#PYK|gC^Wc
zwN5i$&CET$!JrxHuYXh9a1=~g&}1Yk*F1v19i|6OdfQjPNH;%)NjZ at xQDpJ8tH|6p
zVZ0T%QG__Hd(<5LBP`*%o>p6~o(N#A?upZeJie}a0$j2z$)2%Ss>T3{G=m=Hxil;b
zo7w$)Q^m0OLW%!T7H1FCGq0#MA1q^hqPFmc19#TB(zP=LQyoXz!@H`4!pPCJ;6icr
z)LBAO9&@Rov6UJEY%%(|p|T%vC^xkD=LAeH`_t{o)`C3|4rM>8jRzH90NHT+fR9J_
z3A)&?(hH>{Zuie~yn6&Zl!p7)s+TyB_-Mf;Oj?2gGAyVgpWVABSoTEJ+?{w+Y-MOq
zUW%56-bO2zS}mC=V4kUdC?iCk5s!Jo{-+EI(cyr4GtpY#J2j#9jrcP};)*rb=G<>5
z{DokY;O5n+2?0J4=%i;d6PYrX6G6igiqXcPhyE~Rfy-1-?tx4OxEiTOq>Djk*}nY_
zW~-}OozSDr?8Cs<yc8OE`>p?7K7O^sKF9c|5fceaUE#xMeCfz~gPBY6N=U`v^-#9#
zld7}4UQC4%QlL|U(Te}?Se2DL`)2dbMjhMRu0zDa)RLJVO)A_F4|^Mu*F#jJV{Oa#
ztj752jFOkdCUktd_zLQD;Dw?Tj$e>UxY~r;V#5zJ`#2rr*aB+ZkFR3S!69`XC at A+u
zJV*_)k!OwRXk2^JCVP8anSvqjfcWe6Yozv0P8glG152Solqid)Jl)+#-5RhO7BLG<
zg5rdI;CJ(fWgZ-j{6~Y71 at r6e1jW9w)c&CzBP#ZBWXHh%1F63Quxu2~V+lAy=jH0)
zB<=O`_{NqObYF_z{o-+!1d^GRP{y9V4ICIim{)o%Pf6Sv_MyEVpu8x3@{w3i1j03b
zgUJdLu(F0v7p|7pxdAtDYlh)y$)GrY<lTfK<pK)5#2|w>037!7vWlUrWxlRa?Bx85
z@)J~HEv_D at 9ule)c=6nzXn{YA!_3>>Uu#I-`ZE+X;7>K at iqfXp@2rB$3*%}$F$i~i
z3m}5z>*8QPCf at l^{zW=)db5 at GYrr(l?uzwCqsOybzG3sl*Lw&!J$pj{gQ>BQb}bDf
z6RA8Yu9R?6bJeiN28RU`MI7l=<zo^Jw{#*)<L?(V at tP)oJsV%Y!=}s++1C82z-P7=
z3`i-S!b^TdOzV{=**Zl at m5y?-?I+XtL2r)S^La!h<WZrrp<FE~wO;8oM7f!hCF9$u
zH at WRlS=qnTDpR!KS-wvKo&OW at iO_HLDy(6?_vmLvei>**fgVCOi0*k}Y>U<VEF6;u
zZS&<;3c!HA1Sp#etXYHUE*%&&gNBGnivo|43D|bJw&;aM?=i-VD-APLhH3eM6SQSs
z$0HBfdvkAA{D{5oBLsdY7()`Uu6CyV&Y<Gci1?U<x3m|d`gd&&InB}RqLjx8s|GGm
ztrGE(5Kv1SlA2wM=AuEd7Hh=X^&6NbRzN)0^Md=}nfFsm7H;w0*$4bhtn2<2O7#aZ
zY%)_5elm&SO=z9TVD%nNfY>%v8aqhuwq)mCFky3j(KeM^EHV(eyjtu2+EX#)NpU?B
zKoe+xd$nN$)MmYHhx{D?%}$o|(k1i`=JNJf$k+&AwdE}cGdnm-*wvf?^jihKICD)I
z!y3hiItR_7lc=$~n1&(gW`glZde6`=H|J}GMT|IzsDF`-JVpNDEyMnYc6kMK$3<sA
zmFBGn3B_?@ev8OvcWo^#1qk~JAN1SSd-gRO))&oc{d<f92z7zrK^~0+Z@<hK?X>sM
z_VswmsL+A|Pno7|V73i<P4)fNsTwwZq~-D!3t9k~F!VMGAGUBcDF0~>Ma0))B3T_b
zP%e-p9}1xH-VpXRZucw4AJ6GLSFhhxDbvoO>3{o>@W9Bt8Mh>ZcP2@;!8^@iA0X!Q
z*sgq^tQFQ?p6Qt!ZqKYUZPQBshBm%@j~285MyoGth$`QBL#C#v5rJCuV|q#ba>`zP
z7vD-Y!Jz%7CU>>r?MuPeSBs&9^KCDjfr>p3moFxU2N{6C;~OwElsAk!^p+LAfi5<^
z at v|O3=fFZ?A=uRkW&(|UW~&r)<@WT{I(DhROxOyYHa(#K<wt%U19$=@$SRrXK^_nX
zW^?Yj?l&+rgJcrlutQT|#Jkysx|OBo0s6#y6%lP2!?jqQM(S2WRVwTl&W~(kK_YPk
z*3ZxwNmB=<A1mEkvhrE`g9Z+OczuTjdyOZXv9}naMvCo0exNCBs!U9qF1dnQov>mZ
zRTub!R<iV%CEKAXZo~Q_jOK=ay}^b;bEx>O><+C)-^Ojl5=ok$C%xVVm^Hfg=q^j~
z%y<CqudrlnFUu^*E^3<Y;S*8`GV0}SF*D6-MY9HUeqP4Hm at -DRy0M~?5)mLUt3HLm
z?IF~_1Y69Uwl7<sS~%0pCTpC&$*Mr#YoaEUi#vF>^Y_GxtIL9Ne&crsX7^Yn1W%8y
zVIsH}F76(;QQs1~M**ZUF0dEk(me2Ev{cl2>W+9kOK4M^vXW;YP)B(4cml08^Jx`5
zweI#}zKtKEuym(4o5mU6oP)`w_?umrzT=dW%Cu(WgA9Nx=VO{hq1;fZph$qNqlYln
z=Y!`rZS=P}z1hU4qH^RP0JOFYGe(@#+Ce>VI%NVx+z^ds94VzdrVOqhC-zzM(fbf&
z|KW+CX|ObvP9Iz)!8H at V2A5!n6!yHo8N<4Rw3jWh`a7GWBCxno_6h4Ce2NL#g^%z5
zv+*(cEqCYZOl~5Yu~n$4=H#Mho2JE3juJ~`-Rm$Lkl8`yu$S?bn5$SVltH#BC#<4Q
zY~C*DUHRSJ;2*rYu4oZFFpg*ic88(uC~|X{-W~H7n4Z6Su=gi}qfRrZx85I(p3juY
zdCam)OafsD)^(*f_rsE;69Q;H`Q=3%;wql at a(8Efq*Uz at ilrTO%N?4?KwO?;rKJbc
zH{wO?SZlD8kAD&*5`>4TpZz$qN@?EtUzlwFf2oMtMwb^T%seMQ=2~Vv1aFRPiD}u3
z-sx!@^;YZP$kcrOuB&t5h|!o#IHRhXeqgfg-gHv3t?3z)XC~RAD#pt&<t`w6K(~zx
z*|??Jt;qdMA1};)naxEj>qF6 at n9hL0%N38CCXkU3_KhSAXc8?FiB&Z>v at m~3%+(X$
zsUSvZ at 2WumTA4p&iC}Z_R<zyKHVy#>gYY3X*wDd3t)Y_k6FR0Wh@(5V%B;MFni<jk
zNClG<u?Jey=y;xbokZNY$Wp!@X5n7yh^VcJSV=cn!X6D{q!ad#H=H-V{@1jZc43P+
zFr3VCz-Mc=jY3&2&(z0wu-I)lQrcLijHK0C`rind?ezu`csLOKoCc$NLHFl6Mz;xC
zAvC`b?~~?T6dP--OWjL)yG;S5nN0i#5ZNE$SZd!U8L$eD`e#8yyQ at Kc3EJZ)8eQ<L
ztgS9}wbJ^s%arZ7zfie_2On%ernh=g{kp{Y3S-I7BEl>*u13vsmHdXy?QI&cX7N%k
zftcdUp%sdEdO|PpGmhScD^^LJ#n8-kqM!L>ohhiM1dN%o5%ecR@(7Rs&jC!9*r7zc
z;KxVVJZxO#2F=cL;0b5DGIe83m4O&}go_H6XZ;E;M0l(}n3is#8v8Wbw^*PE5Wp-@
z*&!Grw21YSdW6hCAd*ynoY8mLygZP+-L}6mKDG(PF=-$p39&;$4G8_z-8P$p6jQ$6
z{AwLjlGY}Rrt|6}39ahL_qsPSx<4gwhWWilR0!--tEa+BirwTkSdz#9VzKYaEYdfe
z7<)(hFOR^1qe^Z_<Mn+Y6RR%@O~AsH%*spl;%jH at z_~hc;0 at OailB<2JbYQ#JIgV|
z`ElvXeDe7lt1VR}*h`{Ry%{>h+oxI*rkEOidr-!b)<70YA1x`cPKg8Roa18GTn7s7
zC7?J=zX>!=se5VQA`TjC5ck~ACw?qRb(2rw4ktCQH+hNLoZOA6J|bx$dGBuy!K*Bu
z)pnwI^g^~^;9f*t0R$r_Y+&ach~7xMEU8X{W`q~2U_RE?n((QTJdx;|#!H<+S1#hW
z<uQytpmcQ2OD>2!1d8DuJAJ+OpVIXOxZnYKG!1PG+e_55vVE0;3MRENd7G`wDtxw%
zH*i!}v*(7~-#ziHqJ9QqyM|M at plt=?o3h;kL~27kQu^ML$-3W3_IqALP2>Ih+ at rv2
z>xpgzBUO)0AlQlbK?YJcCi9nMVp?1ngpR2c(xsB#vs_J*cpz^}moRnQUHr?#<js+I
zjS^ppv8xJ;)CA#(oR+vy5Pp at RPUsPiXTmAV-<U=%fn_N=Ar2nd)nfC|TKrA-W{_m<
zGA~)-LzM6;)eFIwP=z)e?w=~(+lGkV2P2N9hM4lxth2X+nGE=j5Bxrero^W`f{d8N
zYq|4;CtZCOR{!JXh7_<$n|@krr-wF#lFCW1HV_r$BY^&12??vH&idC0T-bN=RZ`;Z
zd+>734pBvYsD<(19O0Ga at IJ`({<22?A=SiMZ67w*zRCzDbFl%+bJ*+Y`DZUdC+()7
zBw(O&u2vC0dOmkt*I{2dghWuo2b*=67Ge^tv`NZeVhnTg7aL>&F|L}c31OT4!Fg!}
zGgaM~m;)4Ys94MTg-=@(6H(z4DIHMviAd-*i;<OQ!jVIB5EQ1U^%vReImo*O6KS!|
zK_}YsgUf!s_|-;e<bO_TbCB(rt)@x3j9LfF%rG7Cpblw at B#I9jYYywmYd2qGcBhID
z-FR?pT5Y6G7qD{@dD1 at 5>~P(F*+I`x#u9+sOAx-4PJ<ZJr3B6%`zP<YsU$5E(%;*;
zz8ByK<R1>8E<NclPF=p(e|YUiB`)U<tC7~&w%NlH^af(K_&V5piXEvy*+MnD7XRG8
zq?`g2-P9{|nEgPKGvdq22x^*T5&Ux*D!o?ypVK;~tS1VfgpnVgZr$;<9emo8hrnvx
zKD~0;@{bwDM{h~UvC(CL|F5dD)<cpdAz8>Y$IKh4Z;v3tM|w)dIaG484f*l-%k+SO
zW!$x&7&kXiUk8HcWg5N9x4d}iA}k0^1v`S at +`m}itjCVF)o0uAE{Atg_EbP~0_0Dv
z+;4XIiQSkL6k?0WO%VcI)jidisq(+MGHvvZWJ+D+!^*Bgcu|1oh6_|8=U}~IL!RH-
z+6((>e99g-NQ-rx!3wE$9;V}?JA>2EfEHp at Y$FZFCNk{iMiBJF?<?PW2CV5TQ9SX|
zI+tzlSFuF!G`6 at QT*=nj^aB4i8I+P!zKJPzR=+TwpEAVq9fsMvyq(&oCbHN2Cp3SG
zxq0E13_jEu5J14}1s3P%w3XXztP7!SMD!7x- at Mql{Oqy?DFFVDVYytE;cavaMMnA%
z$1Li4hcX-*gUu>jZhbVQkULEDFp3OJDuKgg at qR18UUN}C*k?nCofIuUzz=-~bD5*h
zq+4)UJNEy`vI~vnrwEyqWx`|L)$A(`kNA{6ytQMh!ivd$a}PlPv)30;%&248e2=gk
zN)azK;Kr-VnGqOuZci$CKT8SPdc_&|O02hnFk&*~pL~QPNfky+LNMdjY=$XhBqY7_
zt-&umq37zyK+ogPf>`qdu172sZH`JSvIV$ElJszRv~|OL>E&Xp!b#7lirB~!9M3xB
z)UPQz1zF{*WyqrPIX56~f#xrplD?1T2mXq$;gdwgR*96qbmsi}=v@$l2pH5su*r8A
ziiwSqu*o+S<h^~VW{2y2LZWPmQiZ7r#eEgvxB8UDS$?4)k$h%%LqB3ZZY1V)7lcOz
zgb2lG=H(861fAVDuo<w|?uM~zGqF{(%WD}fVoL1vXVR&12!*L#+7_8#ImR#}c%eZi
zV|QVs*WZT3*{j)miV(DB0WG9Yoggan1y{`rk-1fG)Z-Tc;duBCOF#<PSnnOum!AQu
zTB*_CrP8W^tPx`cVR*QLYL#c*N2WO`46elecY<r6Rcr<>#@A`Lc=fQPezW{rt-%K*
z!^GvDT at yhY=j-`*!Z#f at e6oL?)+oQU1mcmc*xaQo at UZNnmbz_LK-<hlL+Zbt6ryUk
zXi*NBAVrk2gKDvSs`3H~)9lEQvxm&sr5;_5y>-#|>y%xVMpDj^4-?CeS6MP=xoBm)
ze$le at dErP@05?F$zkOxtb<whL0g1WBG^(aCMuc<v)Pdt;gC^f5NU3+p0d5T3(ge3`
z2<B^56Er_sUxd^cuE}*c4-6Og?$u$gM0Lep)4HNr0Zpq93I37)hT6RcSfF{-tc>&j
z9%Y!72D=aoMng5`b7=dF!PuI?226$fA=I(tD1njbL$PXnzFJCbYw$?)P62KCwjD&I
zx7_^@9x?to2d2IL+JWUKt9lJTsx8<Ev&m{Aepqg#)_Jm&z;kj4g3_l&|4?SG`LdLs
zkldZFf8_$tZP_d{wpBF>t-OxR<M+A#eiAE9s;kz+8A-93;vb%Hf-x at IB}h|SQd){2
zlQ<qt2T14YgZ?BcOl1k6sGyr*K47Vfv%uf`_3SDgE51I^uDA2IgeFbOfZlFI7&$ZI
za9(BtVx$kp*}QC?uU4Oa6nvU1F3l!e3}mE9q<$<6c6e>9?Hi*V%$Zucda5TRKC2{?
zo_wg^TEi>tGN%yuczQzj`EidiuS_O4)RH5;GinA@(ein2*}rDzR=iphApAU1-Dz3E
zenuJ->|HTLSBdDSd))wK0=g}KMpBWGxfsY*!CHv>oa5W#Blm<qHnZR?Rzf$xKF?^V
ztS4|t3?Xg>D}JKpBUsCiHoERETh*eW)K5#aE}`*pcWS9bs-wfXc(DLtvo`4cID<VJ
z?Y?Wo&CL(a9n;u64qd#~r`cE&);bDH>`u1{8^`H4Xi;H0#3!pTq-Bz5d)q5wPw;si
zLB+;>5biUCD~9hjEw@)L!(1mNks{!rki+FXcofeA{Qij*K$jBk&7jf^VV3WC at S^3~
zi5&Fx{-yJ?+$q({LwE*+T7}r2q+{b4Gx2wHQ;8iu9Tya%YV-M`DwM7dpQE7rcUQ3)
zegemNa8=yhHOMPf&1aur$ul0x`jAHyTnze7Go9XHc*oCi>Q;al(H(>=dk7_ZXokSp
zA6STYifaFIjZ;PkM3A{st6LR}RUT%DJG}t`_RP+T7{a~ut0_cXA0Tt(vE=Rk%|#L$
zmEa`LD-ob{?&M;*5gZ$3{-A&%d5U&0fT`-lvc3WlRaM$7o6DuJA!)JpO$r{Lm~9ex
zCKhQ|sX`N_G-TE?7Rj1FfciJJ+hq27mQ<DKU_&@Q-G+gKY&rMM?hYlI4wo5E4K~G_
zzc2h7nDpkIsttf1;4YUHogd$F;HT4XNhx-~BYY$+hn<ZQ&Qbb}AT`QY7`YDGn~es_
z at e&X<(?i+seUmu)U}BrOqt7x|258<Tu##KgUpO!uvg75Nt7<BjqdHXmJ)BbLnk;?~
za^-$DvsSfah~DKzRFe3ofSh3>>q6x at 80hdVDDNkv5g?f7T##ErKZ^2=j9Warj+kRE
zba{fGEas~5Vc6}ivxE0{ldgN?EYU{zOzg|3XYL#*7ba1|g%6_ydMMK~KX9oDer9I?
zgNe-v(BTC*NXX^H<a*=A({qNky)U$*f~-zKxyd@$7aYU>yF5^&4wq6RBx;&Wj#^%u
zc18}Nn-%6qOtn<NF;xy)JSf35e{Ypd>jQ_D@*-N=hU;+BANy=ds9I?RXkMMJK+Oa%
z_m7jDP+p_6CY{i<#fN7!FApb4onA;O(D`XRsP0#aRKY}3WmHk#jNJmaa)@^rI1#+-
z%`C0+1y(pjjtEr&DOL;S1AJ;`<Ide~1y_88&t^qK-G84H-L}@6vQ;S?fTH>6$;0Rj
zT1O%Ffg$Oe!bMg)l(x&LBGLb62tp6Jj7+9xbRG_5G~q(7${#CJ_&2vBM}hTXMEYDb
z&_H@|7cR=~`MEgGa#si?hIyIaqjuK|lBpPp{k736%aS<guajc6Z~QKi^Ppf~fG0EK
z)S`R8^34fLaNPjJu~ZozI^8-I(8jm&$Q;;T)762d<1&S4-QDVY=KNF8XF#j#iMLSE
zE~DkYg85l at LM%X=uv3=GhOmd~=4|p0aG6mWZ(e!s6!N*!RNg_X!n4ICw)*~mr`>rA
z-hTL at 7@};<%1Y|=$JQ<TD9*P0)Nve9&{+cN(cexLV9QcKz7ZJvb5|8+7&H!gQJx4`
zAawaqqb!(pe?b(Z{c%{-7QqZ;h43|g`*9#J at i@aUp!dq1h9&(;87M~iF at -)%HR=+O
zXu<t*n=Z)<!Lt^?Z^R!jBZ{=T`KKDB8zEQf7m$&?p7P*C|G6zZ)855oD$OCNiiWw}
zUGhd?<9%4Lryb=(MlX|xC#bJ4g0PAl(;{UsoX)cK>!t4C_;?d0PQ1_WA+Gv-Y<)i+
zK<m>r!yImp0wy)b(BIFut3^{lf952OoaFO^O1b_?P7R at niPwg#*RpH9dDJE#10Oq)
z4_%(x4^>)h{HcD5ptJT))Gq&+N!D{Wa=Voa`dOAv-J9-n<<j>J9Q|+ZE3-}EP6rLE
z+O9v at 2=+-mDZQ=J<?>~Rw<^6iye!7QrSJ+OO3}C7&-r1Z*!kRudV7O*P13v0lsvzq
zSrW~I#wD(m*2+F0Jo;$nUnI5IdD#_!H7)<KbU?(Ev93qM4`S+U1Az?0-n##~R$-85
z!=+W*_50V3oUVFrp2McNObW6!b!skEdRMyPY(Un=bB5Ip1-}QLaeIZeRfQ7(6KE8G
zdrd7%i_6c_=?mXM+uvI6XZdI?Wp}k>cF*#l{yX&vtvXyP2b1yjw+5a%mDauH&|Bpa
zH)ObsUee<L|J0<`@}eQQL$H3Ud85mh{)Xd8hICEs0_6?F>kSJ%kU+DnaKes`X|)$4
z_CwkGM<CS~P9oeFnUb%b5dA?aw>t&52LTSLT_#iYOZ_KRkD)q2oNzTfHd*~NktCp}
zBb;u<Ap4*g-9r_EO9{zm(}kjN%Q&To?>NV?nkJvYJEl<v<^S9NTTd)=n`Bv)wt4B-
zT*!GjbE at Wv`Xx8F&{V=uPwr~zy6RHb#qvS*e&VRMgGFyPU?%LciARB0Shl)G!zGPZ
z#C~sgF!t$q^p*Z0n%eYZS at +lwM1N$ylr*Htte!t~I!Nh-r_(XnD?RJ9tflILNlI}5
zq`}(o>~NL?v~j1z%|*{Kh(5-F7&?BxllNH|(HwR8tz~+Tizy;J3_T{;n)E(L&ov5O
zpaZz)wWK~5j}@;}LQC9|d*#??0hEn#u_JY&tItVQLibXTD}U1wjoee(!duNe<^;bd
z26e_+!YfA4HHtG77U^f3pC_XdcQ$;>Y0|9I0jRwHr!jF!VOWpWO%0=q_bbNx)E4B5
zeE$!39yEwJOA{)&K1FE09Qs3P_H$ta=6iy_=>Qo<=YHirZggrk?93d-A#v8qV7`c-
zPZ2*6h;Pzae4na*`%TI#8WY1UAWRzj2mgENca$YZ6(r$joxz}xv|K~>hf!E6 at 1?s=
z%aVp#jP&&?5%kkGEr8AKGW^f+(sP at _KAibb9>6e3kLtqoki|fNL;QG|Lsb&~28e6(
zVuhb2Q~19-$R)!wwXlvMarFp^tq=sv|G1mCP|W|n{(L}#BEM2rtCoL^ehZ$<yR7mx
zF{_N6Wnwe0xH33W50FSm{UAWaXt<F~Hc^V<cEaaOWyPip5Q;mT`Gux3v$vZL5o$Y(
z$><cQ+>eiRRpCTstU?N71GzAX(9psa$}ol at V56xC2qbDZ{x{#Rh6v*{ke?Z^`)#-t
z_wxApq5al-{lE4NQHCSUQ76;DHtoM42eD*CA!vKIIx-%Y<f`MY8D6X!MLLW7MQd-*
z5d{q2{DN;#aL<cO1U)nliFPZB;<SIKSo=7rF^k;uOoQV9m2rIpLtHP#V@@YK3#Rzt
zrf!|}L3!Znz|s3)H%JKYt$@SslWa${u%JQTv+(~pOA{0rdbkv(t&Nl?7gO|GVP$G5
zXNK3ZO%TugA)>vSJ!20mfz2DW4AR6S5uXZ~8B0R6%lNWRG61%CBAyX8F&Y{GERV)+
z-GQJQ&V)qc80TRib1GlP%?Wr7*DXX;i5(b(YzB!{qt^#?DFr&aU=7qDjyyaxgQ at K2
z37IRD?4Lq<i<$4k9bswrYpvs)0kva?tqjDCdv{g$K$!~R+bZ$iMHy<`%7GLNlPTIy
z1#~H2W@%=Z)cB at D8jKob-AI28Ln!O3)maEv=^>UHnk08t2#WeWYv5%V{SjP~z=d;k
zbof%#?)+x1@`gIj|Jb0lY37SXQi^=sBW$1u^C>1(l2T(GVfyPpGOJ!N*Wh0D+roU?
z)P%M_ZdEaBfy#2y-6M!JvwvL`iPqUkEHc#Qlfyn`RpJc7XY)4|dGHU?iF8aEkboqs
zSxrW6!>yE0B{{^1f7K6Z0+AYvuM3VN=ERCzwi#fJt>dpYprIrRC?KE5$^Xbx9KD;R
zpSs=x#f7izJ$7-+`X(D5z^rPginxZZZ;07`qj^eZ)MpqzFjty*N15j+MCDY)D5FZP
zcezg at 185e9>U=fX&Q^r at e6<|Z5%W<6#qifG^U{Xu0ie)zWbawZJ$0rM+=Arj8eC52
zGeR~+2&WcLQT&~eEQu}Ic=7-}qdg1Y>-wy-g58%qi|+c~Ik at 4?jtfdc$oD|TV{4A2
zU<}Q>t!uev5lMymz4!@@Anx)=&((wo?K~+>6`_2Wcq%%d{6{bKN<>&cG?x)Tf6*ql
zR6B43nw*p!HV3T*>tzO!{~u?SY02+m8OzY*(X+_SL5FbTJuQ$l2%t94g$^E&RM5ML
zsrYkI6z?^4riCu8MnZ}=m5s&)PKhb<92+-=76wgs*;3K?m4geApoq<)a6WX3+&Q`a
zzvvfpHyr)0HfANf*cYsb8m%^bdD{O{_GilEM84NH<x?7uBbxzB{RU1X51(2f?q1%5
z;9MDYCp?RnPxp&#1f5d9DQL&3(xH0!g6D+vS$SFM!e>}|VKQjhe%p5ivXty^xt-zt
zHJOt(Dvi1!`p^?Ug}Rqk87o21K4YoblAX4WW3l2eid%$9$`GgE|GKiPMd^|0GJ*Sb
zn=4F-QUFD|UEIE=WFG;YrkzzOQ}2rSE>Z2EfnBF(lHNs2zFIJ8txSrGi~2AMr9uYr
zFkl15y?er~--M%H?ZQ7L^GDZEN4du6-W-Pp?Sy!_Ke*Kf3RkQb*OU?sCw=oPuN;_N
zk><?Z^EZ3-Xp#KbW~*mCwKRzEQ4s6yP&=hxi=ODGiGb;l;2Mn<uTkusNj#jKX7PD^
zuP!IF#p&Bgkt^ET5uoF<ApkGzE3PIslBf5gn@*%!WR`BNqh)HnoLfw3MvpLcbQB=u
z3M5T?dfQ=OSow(YXJ-DYQ*iTgGs$!DFA?jLONtI2 at H~>gBoEvYyOu>tX6!wT{^Mqc
z{TmjH^|I3|rQ{k7{qwtMgS^R}LW@!?X#~1^`qU!=UVKYQS->n?yE}NNje8NMsOXCJ
zXvvyuo@{R5CL`bron1lcsVQ?jB?i{@VsO}G4)5x%!kLKXR$Lq at Qy*#6 at pw9A0|=Ik
zvI8+AWL at OUOgWa9w!6g`hOk3O&;WglTd9Ic>J|N(yzK1IN$q>1W-vM at 764=FWQQ$i
z2PTm*iy&5Se4JFH4W?KA;ALwTx}_000{FtgyXwutxBwE|q|zzMa+&<_LlpNA&c%FN
zvq8Vc%!2hmNAAFfpH5qv9sjk8+k>Ph(vG=*gy3{IunCc&5Yo(Pd~3A^fP0eOk1mO*
zc7VHRUOalYr at a;jvmEGJDeK<(z|O}zn-|;%gCg7{nFcFd?9gn$#=DQrHDK48tWrRk
zvy771wN0*y!1{mR1)8R;+RQLjKI!%cYF*nQmS09F9wNB8P$XLeVkvBz`!PH51(uv2
zlPqsaSH_19)m^F(@0 at w_S;ml<r5iOkHiEC#7ffw)J>lgfgtx;NUp}$nTod%Pm%9vj
ziwLCbs4Gg-MrHb?BPLy!9hj}5Ft2>OC#p2DJ!}^ej}a8c5FZof)MGEA|FlpAIY2Sh
zF2)w#xS(~q!tXaq%zI3T&DaK3cM?|sJi~u6(JCd1toh&8z#oEnFL+A^r%!}wORL?W
zWX5`=N(udbl9Cr|AdendFomn=qPGs=n@?k5C$fVR`StFH<xMRF?+uU8O#b)sS-nw_
zCwCpe+D#I)Yc20IDYR0pQLyPL>d?13Cc<4-zX*Jj(l6OPFrO5_QJ4wGC%TgI?PVfW
zfRO?(N6pTUnUt1Uz5pHaDla=P^xSuR+IvQmD at SbL<uc~b30p>!Q(EDw&*+uj%HS6E
zL2Q}>b#WRxKGZ5+yKrX&?9XoENFuw?Mt~Y`@wCX-OBCTG!xc=ZI^v5e8=XaZB6#Ip
zFD2&hgu^qnqRy2|XC*uC#W+onZ_0OYab8<avBXl&HwahVIUN)uyo(rJ5y4OCZ2lks
zyLMkKItk$2gMX_ZbEHAc!ut5M#05jd7n<snKhRE`seqYFgHa7wKSVZU4h#X at 5r%d+
z0kbndp4gae at Tt+#6FE(t<&|&}Rn=A`(kc=w^VvgYR;g8WzQr|ECwD$z>O}tnm at Hc<
zo6}W7NCME{l)H?ow?+JZxHs<an2>WeQHZC9d2JmUdKSh2Rs7`TEwxW9 at fTHe-Q<l1
z!|U0!sLP$hKtX!0G+!(js~zLc5c#_)nF&{t>u at Qst1elKEnuar`!JW));CpNk(YJB
zUrC1TmW;SIytDlCyuLYc``>axa^tlKq*u=udrp<z5+wllRerw%4?6Gwr1cRZ at 2r4b
zCQhQC^o at F|C+Rssy!TJ!YfB3JDlic;PBx5wmfUR3$&*Q%xic<6t--$bI8ne)XMf7E
zKy*#nwW7mmqZ&^v_~;4zuJI4SKUsJVe`0(_l_De08+CFLw3Iqw&j(}*L;u#3TZqZy
z3v{rrqJ&^N at i$1J;k-n5C?4>wk%PKC5T*0LkS?8rV((~<%XsgU&Gqs%zd$Y-G8%pW
z`dLgO0;P^hf_cnu14 at 0Tf^VsiZfP0uhwHQl1g`3 at En=%{)L{QuX21AKIS=BI at LJUO
z<~FN^{ql2Du*WwT4N(=G-AQNgcVB`$G>{o+hfAspSamT`b)zsas5UZV+-Oe_p<qqI
z61Yt*8KjJ&w54DCh!s|a8=7&N$=n57GRE3ff3>_<rKp-BZrZ6Ar)aIi6*B^V&?JQC
zAIoP+JSHpH$ma6f4d?BpQ1!dOH6iJ7_M3{c08MwT5fG06+7h=CB|LpkrHh+PfV4Gp
ztU!&<J2^Gx+YT^mALLC#%6?8{`tcmwpN>#N8}>7J(*Vpnj<{ir?R2?;NCap&x2ZR1
z6mG at RsgR=4<qdB=IkYgoq?ifTD&Y0u`aEPf#Fkfc38|c6+rC+-0R-^AH^POQGl40S
z)U<sisFD<($Nb#(0*Km*`~rWQ*ukP$Y2eo8g~y?K$g!N*zqX*=lyM=$UEY1 at 35_*K
zLz?EsUYkNK`c;DK;@xgI@(naPYG)YoUppSxuFWsu6-T_(9lHL~l>R$@kl>UvD$)4z
ztaTO5>C}fj!6ufLQ$x+-_LISln~s5MdjwY2JL-SH5s`09qoUc|%_bisp}zm+(Qnm_
zd4GcwLTow$#sy?z@>d&vdGqX54JE`!eOl%#|JIk(w1T#5bAyo_gF{o==LIM`yKNP)
zKe4u$#(ZB+er$RG`T)6x@|~pinjq^WH?F!>?sEcoPn$_zhh#{5JqI}=&(v1 at 3B9Rs
za!fxdR4+?wnjvHcyFt~_G1_33O69XS!FOiUG(0Ypq3uI*S!3#Y0D=891eMjJhm}B`
zW(EG|8oGL?U5++!?gy7+-(YDt$qi;njFZ0`miwL)I7Po0LjJ at -UsY-NOXIZUdLuq0
z<q at Y&v<=EV9?t3cqVFAP|4xWTJE{-zy at pXevW00RWe|Yv2Aav|;%Em708lW|g)%ux
zd-75rXkhN2WTWho at yfw-!`}0|3GO at QAmV<^5H4km*U;aL=ddp~x2NcG3p=QvX2WV^
ziM|-ZI)u^Hj0Bnj@)BPHTP{UW_nDtU&i9vGFdao~Q*{0%`hO^kD4P~!XQq}9j5x1!
zQPaZ~8$y5_jYcaLqn=24!ps+C$!I)WIU>v5BO+|-M(X}b7U7e8vmPQh0U;bV69pSU
zY+Bsp#ZogoOqyMPH3M5E{_p|x7b^bI^R^<&uOGWfcioI<-UPd}rU<Gi_Cxg5;FGEd
zvMN|%`;4h-4EE|R+V6*E19nS_N2`D)M at je<JuhJqnldEx3i&?&g^9FK9Zv{3Gg0Az
zN-084JtX~E%#H^oZJ)shAlQXY?4-e8#*yh?(M-5sqE*(PTWL#pw;6o9LvOSxQG6jb
zF#H&TBKEGGwe_EoW*!qwKKzsUVho<BJ33<BIZRbyy=ILpVttX7QqIZZH?ny<7^;Ho
zj<4wS&sF!2>O8}ZptxV8JkaqXQ^w9WNbHfPT*~<*dA&}P?4v0O#eGfNyH}M>f+Y0`
z_&n-8nayhETjvYAtE1E at LP(tGkaLjJHH)1KZF?iQAad!wBxckenjf^lxq+PO5_?T0
zz0QLP)BRTOq{T6G^9o*TDTWTS)hukrjc&ZWzgmH7f-N1;;ZPZSU6t*a<X;WO at zM<j
z^kw{wrdJ+|=Yr=n9(l4H7FnKFW4%@Um0LFR5Xo}ET)s1%IuSY7Pq%4)u$t=B$ZwFH
zD80nFdfjg(zppVHI2X06vE~Ne@^^WTyYoOlH(<pvvrOzbHDeW}MLuLpIullMHse{F
zMp{WaDitPI82?@|t-psPx;uH*wXNl~OCp<q_+d6i{%u|_?rPZ at Yi=^?{<)ui*sqsw
zdz~u2J!P%>0Ifi}Q`}3K-juXQ=E{J|O!g(cGzQ&;9~X?~(qwFY_`uy@`&_gXjxDwM
z3`--(S at oUBUoeVeQRO&<^FhU4P4P2QzqGCjxCu|{@MsX^`(4^qQcu0}@*%PjP`RU@
z9+le+B<S0Vg+C?JPDtStsFW?ywkp=95!CdB0m)VW;LaQEG}Nype)w3324}TVtk<L_
zUa)QB{b`kVg9~wpKMcqBj&oBAIx0RyqN?*5eS7Yw at 0r7Q9@y9j!_A;MZAgFDM1z8Z
zM>m!pRK1y0vJGAWjZ%b5n!IlH#I&X}dOeFS$pD2hx!yjsKgw*5efNuelV*j1czs%f
z^KQw5=b;*DvN)oTcZGq-%L#$?PBh*_i95y at vk<74%RV9jaNu%d2|?CXe65fW2B-nf
zwCXNzC7r<6Y&``wA5venE`Dtr&pV_;+-g_Eut0rp4e5ikooHJpt+516deihixr68B
z<J-GW{^1;%8@@k9S{zix*Lzc^FM!p!Z+qU!f+-e-+zIP!lp5S0e!ZdH$MRz|0qK+d
zPasCpM}Opl1EsxHoF at MlFC)1X^>I1R-%z5;2$0*{n)Ya%)bKy|HTt^mGVmuW>?Iic
zWVE5%n=Z<bcZKVm6 at QkDq%?rP-nQ at K*a$PseaOE)p#1lfh_L~6O_k>i at GJo?7J{}Z
z+PrD at daiq_jLwuwAc?;qvO!Qxk7+#U6ShV3wYabyYuY3!w2enLs%(qaq&VyAOtgj|
z(n`VOs*xbI0w{>>PUbP!)vez-<P at P}r3XrNHE%2}Yv;mZHjp7IAahyo?k>`)WsQ}l
zd~s(Hy{t1F{_V5{6AtWtSCUy}Zln-Aq%Fa(f7ReVXm)%qa=WH4W4hch<P<%)KA+rq
zQ~K_=$TYrQ*7hf0T-2rX at G`NLgY}eu>$)y7I6Sl)P)ybEQOX#fQ$fA6gYD9nWIF+h
zcaWW7+|sL+;+7PQ!3%8_y(WSy^6Dr#y^<>1a{v2pAjIjN#?3c-crl_22Fes1$f{$m
z at By-eoO7|%K!|!c6kx%siVA<EcWgNjYmNxTa{Fwn?mDDsra6R6r95;xH!TneKOL9F
z1sjvnm~Nxz14Uiy=h;%erqwk<#4CA75EiC<$e2LYyPB*d7uJCWBnj4I8uQ(7kd==}
zYjRd;5RZ*-rl&^5ylx6Xe+DyS`vmVMvvq)N!m4QZ8kG(sFtlPm)wm&ZKUNEBt}(GI
z`d)O8pcAx{<E<Ffw{OW-V^<z|4 at EXW7zWYJmQ)j?$uv%kv^}TTD675PWiY~~nzzRW
z2(|0w3X2hj$2`1zbU3{RC=tSJ>{Wu<<c)?Y;%gXFMSBxSNN9+oga{=yb)PFp(?^77
z=dGl`vsIN`$7~qIpktSk`^dYw80O(#5Zp27DlUhdvDn$a<d{na;RC}aL|XD-NpRm3
z0tk(z$6<gf>_NhpqW2KQS1alhBC2DtnR*!^ITs{mx*@|*O38r2GZ*`5dw$3Rx^4+6
zc|iy>iwBXbP{wV61P8WmQYT9lzXm|mXyMOvD(hvlD*Ne(5M2+m6LF1^iQ+XZ9Mp>)
z<1h}DeAJCP#1B%XuO*qS+8)e((O0GOGS%R#SDtNWZ1-#SbeGhupDHq_I}63qxAxc)
zGuF%SS_py`0qtc==qoAT3O`bHV$d9+ at Q-21Zjt{8R>g$TWgXo0fXQV%1DvAEv&r<&
z)tlqZA{Igub3L^VE%;6?P!j1IuDGT%KiSrvx)xU2355`#9EbNZxCNU(Ozphyt;S|6
z>y(h&lD4R#j6w+8=>-VH!jM})eC73q^?qr&_@!#Jn6AI%{HFWhoJ+G>o^@<^%u at 9Y
zpRRIXf>kK_Jiu?kj6Ta{+Bd(6L4g4xRR7fPZ)>hJ2ThXxFK(|WdIbcoZ*~aQ at l^Rb
ze;FOhWtDTb(du0(t82>YwdQm)g0!X$Gcnf!^g3+S0}r3S+*!ehPWs74ls at 3-3DK9>
zt?u7o<<xD0*PLg*YNW*V;x6ExpduTp<b%4KU%3vSA(ZtAAV5MxmNN~03k1gcTk*ma
zfMsw9pp~k at -~F~04i4%I_{$0W1t+L(RE$ziYa-8d-0<Z`5NNg*Bcr3uTf<Z at 5mi%e
zuMJT$T^EElp_~JaUvr}Vg+w6mu?8^1gCV_7a?9AsE8W%|b;K7XX%YRJRs3Gp at 9(v(
z=tU*!sHCWlIe)AC`#r-#$0d5yhId0{D!y`#sBil{o1v9sAfm|i4>f^Qg5!ad2N}v>
zM$T at o7t86%EF|q;-|0Ax#WFw#*z1dLjotO38P|6)_cmm0N-yGu%=HL4P0u$bVJQ#V
z`zqy=DV_4~FmM-FD~ibgG`dh^glG1-wF_`XCE#LCg?WPGkXp=yTjeFUJbS3xm#J at B
zWq#){unRs<Ox+QhoI9{{fo-FY>_kL%ft-0sU~&6-GdMhjO at mNH8KI3?E<u-CRh?UN
zD<ZT~@(8~rDfo@>p}O?t-k6#1(~y?rwlWZ^l)-X|HwDojrp{$cUm`H>CVM~@?n*tI
zk>!?ODQ&M>v$ki`FGZ#}+wr@)S}kTzbiWcSZffz>d>zJ8<MvjX+4>KxT~*%OQVE?+
z2pC68R1X28R(e7CLl}OhAHRf2V~ZIUjT3>)h5LGq-=A$}*c11+gH5mTE?xPPlD%iN
zrkP4FY~xfwW$3!1(<lAG1R<^_dw4>QHuJ`6r<bcwQVB?*wG8ac!wi)HC`1s3U^nzI
zr60+jd7s7e=hW|d(!yi$Z_WN*|D_F&)3jQJuI8cq9fEDbQ7>*0Q>L!3B{=_La2WhL
zzmWMQ<0NVH<UDPOe2V%&y5}FG+vI?$SPvvrZtp<d_NA$ZAToh95ZV-PPb`Sw3C)lT
zPv>Jg at MM;S$hc-^{SG9Hj^!dMi*hTK?Qw%4F}}_a5PGd`4?+pT(jwWRP~a5!T}f4c
z8 at mb(yV!b10<2PoON5W*N<ac0?tr)FEMZP1 at OsJzm(AMM=H)4JhxaKT4ku~+8b>*x
zUjoTud9qzy;rG%YI#As)suT#M9qZvthaab2$wibr`)^k9&j2RJCy}ve*&z_!V9^dY
zoJJo&-{Q&~;4T<dkTRZDK7oGj(|zeW`X2qXY}p`%@qILFI>J&Wg|<&4L~*!N6`~;F
z98w>eN}w5v3fUU}t{m at Q=I?ofaE{Ju%nA^-6#E2p>|b<YM1~>^gRLA6<Un+Kel6kP
z>>j_wNnqU4DX|+V*-nI8l)HV(xeK4%D7Jxx4OSgxP3Js8??4JY<_ITQ at Y)z*QPAN}
z>n{1`*xmvR>F9jrNn$grX2^VduMofR{w{T$RTYVu9x(M}5dRBTCD#1w#^=`byr{b5
zOtOTedAq+DQSB`1-_s%g1Ll8C-`iVEPfcwdI!3^YVg>`T;2)8$`FbIrbY_>f{6C6D
zbbt{Wmp#sKD#Hr$M4*0!y=I(p0Kjh&is;5=;M^2R6J++c(Y>>uyZq=W6m>r<{AZ6O
zpZk>0y;bE)k59!8Y%U}c0^g431w4!pBqe!wY2)A%c>SbmWb+~-zo5vIPPCAy6AfFA
zbmy8VM^d~0HxLhkxA80%PEtaBPI2Kx43f$}Y>Lpd9FYIh_R2uGky}gExA$)-&8m-*
zO#eF8;mNrtt!D&kyw4sWN7>2e<cnk8M3|PaaXJo4zn57UYR*?uK%7S$pzE}KO6-e{
za3xv7UwP$2nsc1KV0CeBZ$GbQq2Bw41{A6Ws&0Ufu->GQ+#-m_&g!97;iJT@(f;}4
z0dEE^1R78Jz-mR>MQg+WO1eEZ2*8Fht1Ur^CPye4O0;%xsjSo2qm-LF{6kL4=~c3^
z0j%fx?O|lUO$X3GffBtMw^wg3Eer!SO)Vf^_Ng8<bC1#er~4hNHgkMB>v{U=@Z2vC
z63Zoo69rLD!%Vxask(PhnPLmLyT=g=DAWgAV--!- at wmOph=%98LSV#|)T!Rsjii!_
zy{NX*nO|fw&LS4G+ at z0V!L8|is^w5yJO~U3%6FU<(u~Ebocpl!%U;#gyj4z#5MG^H
z&q|w#XN*pmz4Tx`L(K6g_7~-(HWsKWB%l&dc9tp@{yChWGOEq`bse2N0?TTU*}Uuk
z1`iz at 2XBeC<miwzkOC<YCXZ2MTpm@)1>H}<E2045SjC4!YXTB#>c+&sW)x5sO8kMX
zs|G#&vfu+Q at 7@m)%bHVq307Ey<`Qhn)?e~-K$2b$EKvR^2$sQp6p``+lR;C@!D_7x
zrk;Yd@`AXdC}60A$l|C8+%&LVM+P-$ljPg%>~44*0750jF17s?RqJt)2rjm(hf(Wm
zX at mf?|3Av0B3#Yy;4rEP>s7O>087iH$0EJT0XUBdCL@<y&JD54JRQODso}@|^P_2i
z(Lvl&o&aJP(g(oj<G9ew5S=9s+>oO_*63I2J)fz!SKJc}&IOI`F$*!gHepM2R?STc
z)vUEL5jfT2`*Bj^^|k;B^33UQ9>*)7B^IZqxB9WEh*x)20VE8kt4PfVBC1pV4 at 40f
zQ4QQFW~me<N}7I5A9o%>h8UO|GWj{#a#0Tl$_>=y17172bD_ek`ylQrc6k!N(XLcf
zLRS#pWYbVyOzFUZzlkbB{6$BvD%q~$zQVh!n=)ZdXoj(MDRdT}7C(gQp4j->&w?I)
z*-QkLu}&{HbB;)@QE&!3?%IZj;Wjz2A at 2o>iVz|YRuiU>!_((Stt5QesAT<isI8|k
zjp5|M!imH$-Xv0cmx2XygU};eY;W2e+6<!o+D9YQZ$uFhjLsg&Szx{d24)&p%fqVO
z+{o#)c}b&4FH^5<XdFLh-FuA$Bz<7!T*Hb2n)O34Y)z|!!up-Cv%>LjgL9W at CJn%`
z at 6YQ95NZExeEqtI1z<}TnJ=m!b9pdd8<a00k8z5Mj(Vfb_o*A9{teVxdPO*M9MxJ0
zR38MpZn*4s#XS#mN%-PcyZhihK&o_ULR;@<Rg$GVjfvZPFUlaD7+jm2!y|fuj3 at xH
zw;U$R7`<IthDliw#6p)<i<wNqHxqLEB(CO{UyDH4<#rNO%{kSHb at O5b^3D6vzjDJe
zX5O%s;lI;ASlHKV(<$KW;yUnzCzr}1hx4lC8}ZJt%7bh;Ee|Ln7GteI$E9BwyZeS#
zgY*Xp`gZy|6P19hAF!3GaJ*g7uq===IF)6ZVzU+SzvP0H(xtoDB#(fQ5ZAZYdEY5x
zmR=|7B+X9DuB7ZBFjsHIHzhy#0R2`(>2<BC`)nghsf);D%#K>qV*l!UZ`+2+7IC3K
zNU+A~aqcsHmJz;iF&+glYb~&{9-Ed+Kd9z9ne4Ah?7|tc!^e%gz}C?~7OAKq#_)vw
zkXu2Z+V*8MY!AJ#+5pen7lz7s3WQn);k?PPWdv&@MzLi68A at C+UFh!9i~2x}-ssUn
zopb-DK!fDoTQw++(TrTM+G4<n6heiG&Z?Z$iayZ<XoZ=cOJaW8a8Py0bQSuJ42)Mw
zGP(GeD{C0A5H#@~4?tP1tTcD~bmc1qT!`xowwxs#Dzc8o1R*E|%iG)-2_Jcoe>}Es
z(3Zdg2JpmBCc+?v=|9KE-8?*d_+<gmD+J~#&yQk9PJfSR5^|QOr~|o_J5G`JS{Ehs
zX_bH<eYR0$9xx6}5(2F^0}D0eCo-ho7p1Qjn59>%VvqPvavK6f`E0xVH4GoAWLfFL
zWE)1=D`>4MkP9Uk%P0sBFZ at L%?P_$;VH;x6{kd(TJJvr&_UJA+AN={>q0LC7!CWXY
zR1xQ^+`=-;ohnK{X`DRm)>cyxC3ciBLwHKxymnutCY&=ltNFfzVHxyJ(ZY_B*~_%0
z5XfUJ3z&EO|6AEA(N1kGO>|@lv`I(ZTrW}4%ZhOf=7Soo at s!4hF+^sUz>wAlhylAe
z&6KHQ`zO(e+|E;q!jK}-#$dP#>BtI+x65)jd?~T=zpQCH(es{Twr>M`9`UkI3KG5?
zTxOUxXC<9$&^_gl61!aHh&2#YXGuo_hv1+mX6^=N)L*5^1{rqoZ|QU#1_`P|6yys0
z$VYeS@;bE8)(Acuu!k-_$qn%Q(wT1~W8PWW(=xcOH7|42Hs$C+=-d|&L8=AgMOm<)
zBCQNce|eJsjk4iD#A_EmBN7b?h4G2Oq_UTeV64u)Y&L8>GNG`jg+v@~I+tY4QG9v{
zIsMyE?~}sOa^sTtK?e^PZD+?4vwXd)KDDEem5sx?#{oC~+-c3WS8XpBY!YqmKo;v%
ziVq(=^Byw^6;d`k(_%f(+p&UzYIM<3(M1|M#TI<c<is9WRjw=R3SUxkcwd7vZ}=n8
zG(`afKRzLrf%vF_DkE$RxE@=T-r|m#6~~92nBXRW!)YAc>Bb75WFN$D4c=S<t2wml
z{#fw-19lc>&E1pvYza0?tAd_>NxMnHmf1nRy$85?kQm~{sjLyM2dv4KIbq(VCh9ch
zr|&1P6k>pwt~yGVHG=Eo`n}LUu?bb)G%FOJfSv&NYAlMXowUUKi|}S%5*&n@?F3uA
zDlrEgsNjbJ`~)rb(Pojfc+tXJNyuuu`~Df6DmTK7Z at Zdmd7ZM)WRa}4qP`gAP6W5V
z<Gky*4wo?bDiBc~2mldysbXDKcP67lt7BF40lGxOBHt>Atzno%iaMf<_?kKRQU!Lh
z!dJ~{>y(2Iu%2cq`pX~sG<sOk9m}uBTjtIYbNi9Czw>{F at 5x(6KWmXe9o#Oji1jCo
z9~E|kq9LAM-Mur1G?tfCquHdZS8JHDDbD`0TVje at 42NkZA){C;?ZCEHg>~(86zw%k
zBy0VXD$jes&i<@7{bAysm^|dR_0={aZ_wN at hYk_8S=2plwWVS=vpYcg$S>O&fxfek
zPchxzQNEle1Kk4fI at ML*b&g|I)9_L_domUE0YP at V8W<|TZj^a&Q5xW}Gf|cz;nXSE
z>df{<Lb2HQMor4QjV^gHc2NMEOqHMQK)=E2BUIeKmDrUCg09L6HP%S;7Ms(FAqDHp
zl>)}&Tp$k*`Aqr$lvoxTTDRV~6nk&G`mIL;-AB$i=g%rI1d-KDI>-Xk<$6C8PPR?X
zKEXTQWD&TJ-L=8o^5b+D7xb<m0OS3Ez+J{#vY17?fE|NK*%_fmW%RV)HA8Vk(UOUT
z$((PQzV;M6Er_lJvR{8D$`g|Si;PRWRXs3xtMd&ADg;3%Ie=gS0sf^;!iQb=J9s0e
z!Q!(%qQ&>~aDhJK1Lq^H2;1?)&nLoZTl}~5V*Lm4%yj0?H34V$+qYfV$vuqN at rnT8
zX#M5zLmV7CTF(~`4AUkOkuoIqnl$X<&z!c;qNAP(0K+;U;4Nok9@&4S^9n<;JiCXE
z^d}iAVFF at Hi(-JVRs23Cx-8;9 at Wrh{oXKX9lE-U<@cS2cW_8MKBi}TIyRL0c>N1lw
z+s04Ht at 1ymO5-PU3S#`81QvKwnAx(S4*LDgt<UH^W*J>PU(PX0r1{bukCJCAv6?DK
z9xpG4WjOG-_K0sr1@{Jr(aDRWWH#eu-Al9*M&lyfTt?8wVvoqoaSITmRzC|91X?Cp
z-%<8K&**~B(lf5)eXk(s8Qp(@&^YatGn35>pref8F=bY1vHhTrwL<H0OtpsCBD`c-
z1pf9AL4v$Z9FXO9+wE>+ at Tbg1eNT5K3uIhz3*SI1K(T4Df+Hf9q*qM)@&89bA)<!v
zk9sG+!{=u`$2OK(#B`I5PuFnj(-qpMBhaDzlGC58tMv3>4xF|Y*czLFuWg7n0TP2@
zc3rX?{PPdDBJ~wOtbjq{;o<2gbC~yh32uo`AbCk3h%2Mu?Lr6&iC=Rl=u<nOBoQtR
z>s- at mjV9Dhp@F(scg3Yj9Giyrm?|SUnb?`spnGrwKnoQq<)krhhoj*5-PSCMVAl9g
zUDiIyjcy0XH8PNE4OKF{_+P+gFK*3bu<S@=NZD_kdS)gQkE&&$Ya&oM2Jp*=sxOE=
zI2%*To9?1)9gg1_+0nYv8K-EAR_~L>;q&WAb1$!gBub~yOMw~(I4d;Y0_BznEhmfh
z4KyI1$5A2j!TXHbk`h!R=QNGgBJMAIK%cHO3lzbdL7d)3=Z3)+G>>Su?#J_FMxP&_
z5n^zj(q4LmlN-5XI8 at 9JE?%JlKJRzpvV?F&yf}~9yr1Hxu#rE8S-&wUyS2rsmOWg^
zZ)FQthsRr7kJje#@wc4_$R(IwI`>w<+e-+;`3 at LC^&b$c+JcuP78o{L+C*EmgqNc3
zellm}>a`Oon{QvDiI>tEjBd2x$RaKAH|}<0_|#h;6?llw at e<?qXckI)kK@;h!PaX{
zes>Z`5l?eMX3A58E>4PE*xvHA3umke_aX70JH~8brO#QZFSUqo+nn6 at 8IlQ1m`zrV
zGo|xWvL`@ikK at WPRSX0XX+XSFDRMKS2B=PrF=)v|+3)-LsdX#KaDV$q)6 at f&I49EP
z3?<=FPb=4avh>9>1O>n5*XK#xQYkDDd^NbS`Ls(!D%l+b?98IHX=?v1q}$0ur<e6N
zSQ;&s<I&Ix{pB!Mliy)*Dm>K}4j|M#n;5+3e(v?Tp$Vmw_;A>P%X1QIMR7;`BvXKB
zmXmJIG1WJw`qY8uD2nf)Kfs?A!M0^ew;seAuLxP*9*Qsi(M4e*rD$;*E54^NgaQhy
z*K~DDybmNA+u9S%y7y=0*rKAy*joijS=0L%YI%>MBXi0}w>{>1qU+<$Zn)=`f9eFT
zmR3U!e_OFdc-9~KSnk at rBC5n3b%*0UGAu%=dyhYiQ$(O~h#OngUG~jV-66eGE at j=J
zDMdhPTgAhq0;w0;H$wAZsTJh>J9=?wNFg9lE%n;4wlYfq#HIUxm>b$T8pKi~>?>t#
z+I9>D_M;fWLL7M32 at N+s@gSTZLAEKUwA9_F2IVnqKZ_0Kr?P`CdvL4I3!fUVIukFa
z#*0gXcsQUB8g=KdP}6|enozbkhOBMl>lSxszS$}%Fx=s*WD$~}QEt+Lc4%E6GJtKf
z$sM>_nXc5%NHtgV{_$$i6%)E#t(SH-tx70`bo&qP@`v<{G&!&9xT}nGQ;gTygJY+J
zH-#FSp2O7)(p2vE(e@^wJOn!Y0`N8q3eyQ?M=r>h=^pf1$T7=}g@&a%F;0<z0*4TD
zLnj!rrU=dx=^i~}wVmY*<_uVq5;-eYelna4U7_1#d4LWE+eJxg5nL_Ww_xf@(RmyY
zbsm9=yQfvVDlIFZfMo7ysAYZ$#0hc5FKo}b(d)*o at kJW4ROH<ZL3uKgTV<v!(<%a{
z4CF|pI|DjMYzM;TakU8r#BWngm~u}EJH~qieihmGmX}Ab$<9{zWoHabWt{-IUaE0P
z7e|vdAfr2>CLynjQKX{tip@=Nx?gaTvd}0bs<5g_yj_~o?(r_SjOH%@YWWw+%F8!z
z8x=PwNkXFO3<``<svSGlN;!d(MSIS8ZGei<r_!mO+f>BuZfP5;dS?pbXoq@^d-7q`
z65gY^l+<P^J1(Oq3|=2-#n at 12t|p`BRlCPPs}4N^?3mutZBSA7WmsZD<O7$RL%EEV
z%gEd-<9X+%NofHI<OECF^Me#0G^)|W!|?yv3Dd+XkXe&uF#n~RT=7<f=C)&c((RD1
z`Nc2R?3vh$o5b2|ZD~;U-g5QOm&9sNorbBpOP@;f5=vNXhwHTKWQ?E7D&@}U=$?zi
zqFybWSD84CIVzy(SqI?kp;L$}i}?5ysY?=?-*2H?BDZP<R@;c)8PGYHjgRZvGtjX%
zV(pTeSkPQiW(X;9E;q{E0 at EB2;`csf&SY{^_^JdQMowuoy;yDnTcpa|<KjBdiWtcM
z8e{&mA$*b{;}_+ME;jWdeF9|;6a6A0qqk^&hC)v`TwxC*kk_9cZ4wIcfv?f4y1D-`
zg24+JlXZs?eR?h`Mm>4`LEaQzXHKdvVe#|w0<bH6Wn(MWd}&#;r>F!EPx{?hI#(?n
zIiD{ocVY1SXzT1wDN=Qcn?nA0>Mx8Gg)~{<xVk**Hs{*YJq~?Ul8cSkQ#XA8;Ue#3
zax3i_qWPhRl@}qfw)GAiwYU91K}8h=1TcDvM;QQ8VvNz at QO#g9KE$M#Rp6P{;U0MJ
z&_<$t%G#->>gyxkivVAxM-OWIB*#&;&kk!pjR`uN4vNN2jKl)&0W@>L&_R5gX1%wr
zTvYvOSKTAmB?U(h1fIPrlx;X#Zj_GidZ_8NiDqp5Gx0?MztgiDoLhX(hXqdOCYtB6
zLx}Z&ZbRX0ak!e6{anGiOew}HWLJz7$ZL{(B*k!`i30zGfV^1`iLz3A`%M1iuI$VV
zI8bwZl1H4mqVv%5KLV}{s8mCB1$iG_gT#9s-R+}*X#{*mO5iF*4~Qni)_z+6m1lDp
z?7gl6xt(*OM4j=@tKsf5&W at P~{1NWpSF7^mip^S2E}tnrpzJoX?t;%vI`ii^BP9OJ
zTRb1!h8h_%*iwHu@>nwcPKUgk>{CgrFcL_RP+|JCF?g8fNawwRNoPf_xe2MN6xh~P
znx$oKj;iJ|OhFn}gjERe{<FWor1aTi`HR|H)2_Y??)BKOx<NmkXvWV0 at moE%e-PfY
zXcDvg%9*ReHSa?2sn3}n?+(7kR5FVz=d8<DWVDsVV3%Wt{>Euq(4S>mMOyRhb42N1
zX85I_GAk8oQlCz21hIiiAW_0Bjde;3Tes8+HpT6Y^tmq7m%?N&dRCoV1Jh1JSG^_i
zO6|2jLqgN(k?hRLAGJmP!VXwh^9&j%{XW#eh~irXdN@`%8fRQq7#NEf)mh}(D)pe7
z+k5CR*>wS(+C)*S{tHvYnX#|~&bobR6lqdRZ%DUbL6t>~9fq(SH>#un9Q^TnS1pbB
zfb~}Ds*(2zEV-t$6(&Xd<+_H85~%l=8jwq4YLC<Kvq(AQI+!}nCdK`YDP}ZFDa;qs
z7AosWe7N;DghM=@Wj_)#r}mR6kj{!I9~<#SA;5n;+{L3$N%C${k^<~g`tgEs8B35T
ze};;F*(GKPn5T9sfIJ;U&Mpx4j6#yF)B4sLBmg%zB-pt=QRKOX8A#ER)>vp{*43hY
z|MDL$LgB)ocy)UrKTeHRa0&Hs9YgN3^Bxq-;jJ$u-Uo?hl8dCC3N~~0cnX0AH`6R-
zJ?N53HFawVu)+_I9B31}HQ-@)G#;DR?j}DP_H>379y0<#f0s8xb7i$0?i2qku!+H0
z7 at Yn89DFZ5+<&7hRJjLUw0ec^mY#a3j_DZLDc>dC$GGA_APzMqg1grb^ZpUskxI(4
z4V~8OJ>?f=Ta%VDDC@(jCbNsA9%|3*p=$$2p|A&RjZLYY2M;hpvf?8 at 90pX$cOBfu
zudm{id_mN};x0)}Bta at Cp!_ph?aC(nxyVe at mDwh-1l6zGD2E@va05zPJ!Gb1(+&ZW
zI^ba6RckaVl$H?I_Ax&=VwC6|)spzLXyrp#x}_4`Z6`5pDQvfyaM9G#{--o%W&e_$
zcyRmv)VTlQoK}B~PNzOETP{A%1%>HzF4XUS-+zzXxUYRMVP2}{n6<{PD**FolN%`~
z1%4dBCol-q|Hd9(nu_J}uZ6z;v6W}@6l%Ru+ at wVcsNa)+=|<Kt$`i7VGkMKrAzEOc
zI95LBh_-{X5x5<puU8fTRXkHe<vspT?losI`5tC{=s`r;ZC*ck$K3pqBIOi6BA^FZ
zg&laQFu4mcl(_6Rijy;E2q*O!)IBT9X2eLe-$I<^Gx5jL{@=OM>-2C$)m6V|&6Uj;
z8tsE7f#9DQQ`mnxm%CztnxD4?3lTrkXAlx7FBmt&J6J4)-#V4?8Y(8#)Y#)jH>kTc
zaob>x9pA9NDlpm9Dx0WeyPjw<{Do;7?$Y^I^hM-KM5Hn9IQNwU0Edh74AS0YVg9mV
zUJa=|U9hTjvS;^w^}Z~vzb>b~G0wsC`5d+j<wheMVsh$_fBlQwgw5a2GN%}*xc`k<
zhf82z4^Ctqc5ywU1o2#L76T)kerM`(y{lIw3?*ZPPSUV)@VT#4K6&%T^Af0|{cEi-
zH)_alYxz?In97(~ZW8(U_*^S2Id3s`TxMnpx}7|EFRnk=d?Lm-SfJ9)ILa{)dUJh1
zZxLt;_jSFN8q)m2fyuC$1-wVo%}3^?fp;brdau`$>0#_oDY!rS#wfhW0KVvpmLV?R
zusWgaba&0<xExLL(?L=nll<)w`<QieKNA21qb1Aql1VMSlS5aB_3`4GJo7}r4de|i
zK;ohx(&}Sv>0QeU^{dpH>f-#3Pz9x^TT~d#^GJ~Hz2aQbTQIhk1KjTf7-%C2XvQ$>
zHQBkQ=#~|(Y%6&8#j(4<>gqKX%KU1nE7;8g*=$)!7e5&5q3faSEmYd at Ps-%NyYW;F
zQe*!K-*B- at 588&fPJQeXq_<%$;wQU- at aO+w0p~eysPZ&t68yO9+w;(~$eV~PMlz(O
z>4e!g10>|r{kX;5ePt?lQemKvunzuKM)4x4$=fY4>?}L^jC2QbA3H`VX?CjUJ(u`V
zTXMou{auG)SvTJ)#m7-2Xhov|P464OLM2SAYk#DJf`WU2geMVt^Io!AwT1J{nU9PT
z*qwPGE$iX326KizK`Sf+f+-4p5YSvpapU*`u>@}Sv2M=W!v8 at vnbkp_HIGPB%8aLz
z8Tn%pzF3oE(Vz%_+E>H3;aFA)T+YS55F{ZRYYGtn{Qhx1U#r=z?M%6e at C6es-I_GE
zRR$AB at lH*Wn!C`>rV5V<Ip at ES5K`x5c)>Qmo4C|YnMMM;`^J?RlGbd;w2G7xDff7g
z45}43civQ-?Xmx7HnF*iF|$Uv87Y@(&sAWEkDV;>ljpt2#4ezVKL>)XZG>iuVUGW!
z(gcIl(71dQ`^F(nZEv-xlHN`E53D`Iw=0CuvZ_M@&l;p~uFgotK_=5^k2}dXXHo%m
z5MTtMItH7ALGCsn#+pN?KqxK+KkbzJKr!Av9z{l1{uxV!Weg55?s7V7sh?knd|@jj
zr8qX>^lVOA$(Pw?46U`YU*V)z05d?$ziosK_ZR~v-Z3wncADbm4Q%r>iw$p%rh~X#
zwIDc at aw3l7Nj@-U&h8r)HGLq#-5Xfh3rsw|BR4GyphJn2nf95az=ZuXzOIIkIQaoW
zW+75JA)LiIY%C)eNdZTefi_Df%h=3Do}v1%?fzz@(g=$6u)=OJeRWtMDAGT^Bpw4x
zd5PO6R#b9x-zbDvCD|l34uTLdwotMfh`n<gP+-UmphJkT3L;p at Q<-!y#-e5JXmhIh
zbWF2VKx0;FUbR|(X+Kryrqxe7=uOfO7XQCnogn?W#n2l+5kAI!Jc!?TQpfsr8 at Q@p
z97<X++n+Q8$2|3WDvh6$2M6hf!rC4G17P{#`_=%5B=EFwA(%Hszw-n8NG|t(9H&_B
zrPbb_-h(Wi?Yk|?hWcJAQ at 9oV5!&HSF<J}uX4{Fd=&Vb}K69JY%CwWY(DD9$<*#NJ
z=X)O_jgy<<bS$OT&2TEb6NPCgaIs^Guiqh$>)r43rNJo7DHt80BJMyY>z|u1&GwWg
z(**(n#cUQdW~Z7l8l+9jWQdS0*En6U#)?taitw3|Eko!=QG&o#)o4BKLxFMN`DRZu
zaIV-H2G;XXZNdC`U~D%0ksVu$VoAPGUTT(m(U7zlP2E;n`1>);-Q9FbPnqo`d>THu
zc!HHdv1-=l#20W>v_{)D$&BY++G&+>JvHu`6TnP`FM2 at C=@ZTqj`-sALslP$?leNU
zU}~+Bs|Misuw5di65QfFVxmd()1m-?77Ntsdv-xZ-op34RK^^kpg4?af)U;v{6%e@
z36Vt@!TxaQTS$)h`kyC?KMX0SD+2d+W at yNfig)&@0>3lY$WT~4am9{pm<?dm=iR+!
z;F&c-)*V-gP=q&pG%7&w7E8`*1acZUKz9GQFjj%3G&#toEfB-oHf8w%w3h&K^^Zew
zJfAJL);=AVMbmZI8S&T)&QyY`27{%z$1>H#QN6*RIG>&8dHlxA<w*wQ_Yie?I at gjG
z-(uK=>u=?J8O`AK_qLGSe#JDOaB)2>>fU!BIRDmy>p*6e|6YEr9wO*%bDxzwYQDzV
zb6Z64H*-@=ZwC!;m)oT0Z*od6x9sqK)Wv<b)+vbdb|z=3auT|_9!N>SfK0|-H1kRx
zTt{a7N4QOm{_oyY9zfV&kF6JMHpte;up28qv#7eUr00lv^ox7zRBnfz<BFi1*Mp5#
zoJR+z!*G;?O^^NWA?8XZ!_%N=A0`n@?rsaHX8Rv`t%V36gL^g-_xsmNT8;3E2&Y3J
z_t(?>I|<i>i_cxNx2RmIeZT*nPi&=Ty?Lnj_DtcDHw5vrxp88iB=FtRZJJpP!Z0D!
z$pyuza<LUCe|A at MTHO%g2pNBrorxGI>v)JGR%gB%WoTl+dTCgFsodp0)_- at ze7UsR
zvW<and97z#My1<Lu)6kAOm0UeOdgc1lwBkP^e#W#vtGqEMcc8VUF3CmH((@Uk5Qkw
z@#^<@-K`n192sFNQ*_~X01HgJLOsOX<-6JH;=<o`A!S07lVIBfB*f at esq*pwGNs|@
zjq1%<nakeQqcxX2v$&{Nia&wE)(PktvH~1WZ!GsHbPjt%(H~?sy`O6-KhCH_IVwy}
z)9;X<9G=;PnZ=KPC)iCsXDZ#L=oL^oEX!u~VYQ9!N$M!Yz*kl1SMn(Yj#0$I+kSON
zful6`#t at 81QNhjxKn$`R)b-7cj}f0$!bMsB3&u^nhFEHPcgmbRT?{HY3kcvEsGV+w
zdI at v`WMlqpcW at TZn;3u741#hsvB?lb1BeypKKP4L&^Pp-8JiV}v8g4v`RT6RikG`s
zqrQ~9P0NfeeR0F}x)2!eIWLx<gnC9(025Y_Nqs1Z&|pV*3TC6`?F*_Lt~_<tOmU!U
z_H-1FHc*3zQhd=$DKLyLmyyEnN8(aT&;_2<Q$!vi_a=p0iwC|w^DcH0TyaObTYfD8
z=c63;jAv at Ted1ubgf3S0uXFK<hs=S-hS0k~Su^V>!{I_(nlqn+Bk~&bBqwCi?p?|H
z45TuIfGsv5X2n!>&9$uItoA1;!}LA-a}8~F#$e#Cb)ZT`;cPlo+Z^3~`tYDK(Oiy@
zZi at w6AUjbw1GDw^qol0f5C at Zh4{BkvO#R%sS+%&+a?_Y64rzRVE8)Vp(ALt2pLQQL
zN{?kz=F_G_<Y_Dh0NTnWmuVfO1N4U?Vg9DQ at dM$EH~UJ*J}u)&m+Z9-kk0F=4Kq$B
zZcmw~Mbions>kn3iGyWLf at yk`qpB~_xpf5M?j8m0Wszz+Qo(>0R+rukb%%Rp7>LXK
z0<5qCRt$!naGuH`euWg!7Do<c?9AKW-~5LuISQpZ$t8ryr+rkTi7ZXc51Lsc4)ZxR
zS~KOE&N(t(#~rHPEby)eSLjIx|EA!^fYrJn6n}20GDND<nv04-ydBaos}-9^zOQ9Y
zOLPSGHscTkWqCoa7fM9ZvYQC0%)yAtlW0C9$FB#j<dKB{zBkwxFS^3Q%Vq9a1{WIk
z=S{cnI_h5PHPziH&6zDY3+~$fo^k4oT>4UNt)D}P&19v>9j}gJYu<?OqFgZhmVuJ`
zI%c<=&8hn|^KE7^gn1X%%Df&rCkmDlXfc8u&i`?9=Vb~NCmHO31TGigLGY=J(}a(p
zyKU%<Ww6_-z{ms01wn(E{X_?uxq<4AnRtQ<dA_c!D?E|pGOye^IzNC-7a?GNn_GJ&
zg6b_V?Dxya^VhaK#Ka(IYIWCNLp+X75lTm-C7}=*`d%Y_I+)X6c~Sk1no^G5VPB!l
zv8W~XsCwDZ{iigo1lH{^8Y%qtV*CGFIMnK)YSfN5-09J$Ik4CZApR5P6v+Q<K?NP9
zC}&Uu?^QY0_>EfneDbN*#W(&`v=zNdb$);P-|f0V1x1~&@D1;|qXbv#($FQ_uSRK0
zA}kg^<`2GylV}XoKOa@}S>%5nw)(uFrlTlq?u<EN6}6ZY3nyaf at TWVmCs>IwNDj;+
z;t>X6MSx at Ggy{gr_`9_#`Zi3pzJExEL?5IHkc#P&g?8H$q->s*e)u(EeRl5)THqA$
zyEA<RMLQa35`Cs+Qvwl%0gt%MO7_<g6Kg*MfLY5sqVe_22&p`5=k_2%vkKvK@$717
z$OH)&L5L3fZW{mh`x0-PL+WklBy+1(ZbWXPlcY%4yXh?9C^%Y&4YCFwxMf~@*&;`(
zo^4ErD^W>YAMrF9kA20z8Re7ycp at whyKE&6fy^Ia85SgP&xCX6R*g(&zXIU;#dzik
zN`Ze+JQ#Spy;x<bh%LSr-t3ru3VF5x?@TwXhn;whA&po_ya#q;=T)!h!%~bm{e=ll
zVbq!efHgkrq94AS-7X(p^JjMzpk|=DO+<`sdUvoy%bRHHONtO=_82;uAVMvOU;f`{
zYvAuN&I^a at -@6V69AARU&9-x-8L06U{rv`U0LD$-b<>t4k}5`pe(P4DJjKnnvT)m?
zd%zx_B9C-oOIC(%THPDI)*gI<js<sgoRJpNV88*&uYuy=_^KrA2IF>g3CX_R9w=hP
z6lj>$*a72##tdJY%MX~S=QCKRV?qv=*`1 at 3>N5b3B+LLXI%^Mk{V`d-3npLnjPgo~
z{em+f;-IMx9UPAda_M8ZSD%q(mLadplTeJeTu7g=gS)e`cPARzrim!9hfI@?Z^Csx
zxNy>&E3MlR{Bcnn5H*<k;v8cX<=a1%s(_n2D;csWxgw*%mmg6+Xv^aF_WBd$qVA<5
zwenFN$J;KELo;VG)}6S4c$+XYqJMi5J0CjzO1+3}8M&thVE6K1^>AE}vlSqwO4W#4
znpr?U#-GDVRPk-?gI9Hh39|&$0==fNgnoaxGa3qg!nYiXMhH9+n)7V at U*%dep1LNS
zHch{kNunm>f$F4t51(nk(9CX(qE(bNi<G8XCSG8%yQArh$Z*B)mABxp)>B6!ru{1E
zgT_XqD9|xG6%_MLLLC*OA6B()9Z$aBWbBgFwnuL{HBh at gb*b)%;EtetQdGb9>b>{=
z#Ai6?@>%N+vz^QXCsvV^j*gSBR6T?~`x)4xN&Z7+G?dlYHSYk-n|#{4Ll*TQQt3d|
zfg^hl;vYJT$VbxT4zKTsrd-B<aMzr~I8ewu;%q=*FV0~XAcAm!na>Jm<9)VXl_sMO
zD?O0&(OjuFVNFN-X}9_h9byxNzH-u>S^W>iWFp5a{DgO70%mw&yOAeG^UQjLHX94t
zv6A9j=Zw72`)=D2H9!i=O at 4y<AYHE0cCyp6sx)hjMIr!l at EkWqYIx<y`0MIMt>Dc~
z&?m2gGp8HD_2b7?obiEYkD7D*Mj7cliyJ5vi3IsnzDvRv-)CUgB-<X}DTjLfJ(M7P
zMbkp&RG5sCyKHOVIMRW+5#)9O>YlN$)lF=!v?RdRZ$l8qA)9H%*K&xPNFz2(sid{B
zHef5WXDZ-Z+-I0-fnF3- at M{#W at Wb56EA|uI?V%`OHRN(Vumv$~d~2qUkk8DqsR-t;
zulN at -*<IsGHht`Y$JDfit$WT}kXzs*7%?BB0Pxk)^;J6KOw54EBW`G1O%2VPC0OAz
z>L1>%<O79K{{X1}&#u|%Q&uQfKf+y;`4#Y{>NhOZ3Wh$4YlHByYNhgk3WVB#T%6=2
z@#>TER!mTtz#<f-mPK$Hm_bnF%FZYE<Cax8*8{Ip;{}y^-C$-Qw+2)4QD9KNuY`1m
z($P9mRW;deo at 5D2BLOEFiY19AV6gb|k<eupCo&ti=$>&?)%f2+P*eT%j;aSfAYcZ_
zx~&%_$?c?gzP at yD<P}9D=H)D;;fq=l_6^z;E9 at cZ;V(zh$Wt8U`hj5!a<k|D5&NGY
z=~M#EByz8u!Mq;;KnCgW_5{a)4WA`$TU=O2wu9sPrn#lNtamm(n$BP=uaI^5vHLrz
zMpOPI<hs6^%##|cmME2wIAX+r&_^=<CdSjS?m??ED^g&9bPvU at a3GJnM3X|evtcJ*
zd|c6HHrJl at H&R at kXCu`puB(YqYk{51we`@;^^|)DxW&vrzqrDw9O5Jr)t)o<#s4#<
z663~<i8AYvrSSsu^<y+HZFel<4z~42F2L4VMvO(Bl=4&HiOl0`^GZM at M0G#a14`m@
z^$8FP^h2*!>c8Iu{+jRsv+O2Ws|GK8tw3Rl!+MOVS~qwl=^yNzZ76Ms`81~5EXu1B
z=01uH+Iz(%iAc(#Lt<x7&L}xFp1_w4_J|pQXpdMgenVt8U#H3UB1+yC30lBuCyQb=
zvytJ4Kk1IX&3KJf6=Xi>ktlQ>`#PbPd86zE6ZYeZHR{MF_I)#<a`N?YyNUwnydCAx
z${>|GvdKGv#3a2_u%gg_%&`tA5=C#oQpw2umq55r$pN&F@#9{i#p7!P+Wp0oTypSS
z2OIF3jPrJ9755HtIF16~^TALu92>nrzQs6F1^B(Xlt`JvYu7VDbqKun1L8nrpnHvQ
z4*fZg>xC#HY2qif!#_gj!FLNcT|5v3tCKmD#|;Usuycs|M>^dsM^k9HReYU2NKi)C
z9Sdg*=p8E>5-neGyo3{3v7doV+DD+ at 4d{s#Zu~eN#Rx{MGEE~Bt at VNtUCSOC#y_sQ
zZLdh%(c_kv9#(m!85xADb&P>lg@<x?y3%yDc~$q<Z7Z|3AThP^#wQ%Z5iBlu6hUOM
zgv!3e+Ja)$x62~s$MxEFdX||>v*N~>*FLNVK!AQDlZsqDMfhYD6Q^W?-3FT|)bJ)C
z;@s$FB`({~FAibvAs?8>{|%U at 11luEodxAQ4I#(RM^R60RqCKu at GszwBD;tG#WK4g
zDD<%@Fs9i%*v at rGJ&m5aV*6t6E9 at 1BJyf%1Q_#OX`aFI=M01>oN>&)0r_4MDPwiO?
z&BMwNp(q>Fg_nM94 at Q8qMv^0(PgYn38{kIvnX$mk(>_Y7dAoE-yoA{w7C}O%=ro2K
zo^FB!q2yyJkW76wpQ;BiaMD<S?jUXRS90UXct<APNIljExHDveJ9)4#mwbG4GP-*v
ziryYT-eP=yJ)SaPuqamv$0v}h^jSm8-t~K&&&a00k!*kAkX_+O?RjKjXqhs#=s$gc
z!7Hms_!A>n5Ng-Ztkd7iWudzD8<^4838p2iVYSVth|E#fX4J4kmGPk((#IQgGp%{-
z&>t72W}P%=>gTx>4GLRd+a=#xz1Uf>$u;Jl=7>6e^`I+_T+#8!4Ee0;x0=>}GVDx8
zQ`4wmy&A>of;;QvaoD93I)FVSeyVIe at 2+4(NY at I?8GT0v9POq<67h~$@A!eI^SjQk
znle$AwPDnVs54_Do9U2!Hwr=*C7xyK3 at J|cGZmqpV*#3Oeav!Ep6Uv~x|V|0YQ9I>
zr#$63dq?yVodH*W9;#4%o-|lzo=i?T(d)yc>S{WEu at 1VA-^tf}C}Tv(I&ct(-+z8>
z2jVvu9Xo~!?xR~Nd39N(#12{sMrdg2Ju6%AtG#Z2D5W3cB5k*jGa7=cfX}z$`SDi0
zFx2{)Jw)}?&7kEQ&B%;!K;Y=WiODm3JMD-4fqbOREO=h;E2BEr4&>NA^PU2oz|Xss
z++UxmX<n-To!ioERle0}WQ=Osv?l33mjYE#4n7Uz$bfI>PeT`+{g}8>N&WDZG@|nl
zqMGe~5^heAYu6JojQ+TNG#GYTvUZ?wc7vOF%3S^}g+n+2q`=S+9sXaZKGwtr&^d|)
zyYGa=rB-&7Y)O7&qcO4r)_{8`OF7r*36<J{eM;(1EM@?>pYl|u_c>Klxz>-vxPimP
zBs||h#~9|`^z<0Zw#>YFuESgOsn>1sL)xbCV1&o9zMvJ&nUz^M-Ox!Q+2?Bz45)d`
zZnHdB=Wm=~vDKFOgElpm_|0)$VH$;5x9D%Kk}aPz2)-lsyA>bevseE19w_dSzTZ`I
zXrmwaJG;;I(v6b?wtK&piB;L4;_B7UA~7QQn=t)ACl0!`6%@Nzwf)zaW<uhLzyax~
zA at TNo<>tsyS- at xU8&$XVxI`f_aN<C|RC0Q&FxmQfhv4YWJsy!sI;L1FAe+jfoc#f9
zZxWMezSFkAh<?AN4hz(a!Ue(~#y)A0`0U$y#PxIcvjhPw%i^{ZQx at n&Xzfpuy1bK6
z&cSKV;u!|<$9e&TmZK1Amu{FD)(Sw_D7qq_l$SUKHVKMWu%=3tJ(B6S;RhRLGj at d&
z=MU6U`;Kk#MNOiOul}B;0-)V8_^Fhu5+wWytrb^-Q07qD)abK%>nSVz{AHPl$DhYO
zUr%m$Q-Yt9;umlDt<6 at dcm3rr(*&XSis^L*eUDEWsi-PNW&UNR=qFgPj*^Bd@~*<Z
zCOC-&AnhW<vX_^-8)wZLOLCzNqtts1{tUr)2ieQ^fe<6J{2PebJ2=RxDRB6^vy*nr
zb6=u=(prNId}HG4mVp#%)2!%nzVF_^d_x(j*w_<z@?<o7EJ~}C45}td-|PLWdQN<M
z2$$rnXNpDGwJ$ZTb7gSO1kCn54?~vQY0dsySHQ`(?|9hH*etN>ol9ITL_T>=^ITTy
zqj_102Qa4*U*-tFFtTD2v$Rq_C=2~CF14TZ>52MC1plpw#P)mQ&+HA{&q#`2%{;5o
zKw}KT>jjh at w?FO|VgX0s+S--6IUr`Tw`*A at TD&99 at 5}Sb<c$_qOd4a!-e?Plp*IRh
zc^$z&aTj+p9GRQDAA$*d_&|0A*ha5$H-DFL?fi2bbb#xjBwq93l at Qfia*3s}&<*vV
zCDUZ)EiIsaR;t5BIk~YUVVA~^!=k$5ccY(d=1?!ccwe;SccTSk1d(Bq-kVqol$XYZ
zXZ5QC4H*=sP9C(%KfJGbMUTO09K at fRWfM{}GGIb&E^pBLWwkR%i44Y{fy#?h1ziG-
zD;$-Z$6a(&eOcv*7`yh*QL~{PPB1zl={|tb)#Cb^r>cIrKSt;U^!rg9$HH<y9S+~S
zDj7a8JM#Rx%3`NjI_nwn1oi|=gt>J0?YaTbDkjj$7<TryW9 at R6V^n=`(ic6&^gtE8
zWz=@2d}J?|7orFk`wS at +$3rDO>ZB+><o#b`Ci_wq at V{o=tT04&OHa;$zJm;0O7Ts4
z<;k8h)HJ0`Cb#b|#-9fra0KR3Sh5oGqo?x7#69bk&m`jf#ow(r;7T%xU+1v2ZEo<O
zsV-s>uS-0d$e)7 at 3RXAn<oE&=1W*OyKF)OS&I%m)$l24`W<Ss)d&NT=2NpCfDB>*W
zk6OUC25}6eB-if(;5=T|j=1h)iYP=lKA|<v2<0X9EdTH^Cv0N+zC;{>ngeTW3_Khu
z{v+5WzU0SOp4swGuw<{(BtQQ(N>{<UXlbc~ISCZe*`x<`P448?Mz#C2N<8l>x-I6g
zfk_mjQm9ciE55*oJYNUlpi~&Y;&tPeGu$-U&CTU<9dADw$)$i9sK}zm7v!djB&+Z5
z%S%<C?_~~fWuZCu$h(sJ2e4<ZJG;z1zoAyO8&6mcqVJ(|?}H(pN)*-VM^4d%qZHR;
zE at xy3G#$K$)oYkyg=pSPO$oNL1hJ at JKv~k)4J=>Xh>3)RUY5xsWz|zIKm~yV%OXD}
z6OL(q2e#lz)-rHJaPmXy9 at 0*;uhP7eedkdVumgfuNQ`Pv>?$Sr{@YOE`3;`DomFEW
zbo4GQ+=+V6-RSPuH!FhWm&o5md&c)k33`=Rnq}R(cFqV&qAE?Xm!x&XWl8zqawQjj
z16z at 0DX#HCYsj;!Ph!xs0lgxaKQSAR?U8!a#pwaniBR&(b`Y)hh%Fnwx+mRT%3<bk
zv!;?^sx`Mtx{cLev^)Fgea+*kbQ<nqAHd)@l+}LBlYTsz66L5OJ&tT`KfA>Nb4ftj
zo~^|uHJ}Y>tS`T4)=GEI%nRXeLhR(Z%9ffY;$||vD0B}DUJ5V{QY9HLam>0HdNn`5
z5`pB^Q&?%591UdNFtt7icbW)if`fn(EvsgfEKNu;gXQv05SFcX=E6&kfg44O=*OmJ
z7q@!A`*9Y|X;4bl9Z9fhY+Gu?+~!mW9vgrT{M+elhAp|nBg=|I9-q)fOirDi`C3OV
z(Jw}(O*h88 at X}(WDfW&#ntPQ~P+4;_0pk#~t0>w3rT)Ip{8LJtTz`t`{CdEkg{$%O
zwp+(}Z^W4lOXi0I^{@$pMzTmh-B*oV|CE-#Sa84%>Xg&HmC14cH2UCX3l<ms=}5rD
z(j7}lXxG|UzK#Hxy``BnJg^yQc&(-1#JF$B>#T(`r0hyjlI*~4LYPAVjjRaD4~jTz
z5K}HF`gPBDg`8m=42a;}unj~PZ3${f-Gp$gXXB%fB|8MZjED8A^{XshSX(!)ej5er
zOw9?H7x&SSh_BaVbE%IaERJR30#j`5TmdBua1Hb0cc!+4t1nndoEt4*dxx=#+zF(0
z0^D9h at _ccWbCkE>tZSG}>=S&9nV$m$#>zHuFDRY`o3t-nqbOfEBjEGWxeX+?k&&)P
z at XzfjA_OTqiNv6vc7E1WE~@I9HGd(@lz595Pjedf3A^~c$du%Of$lIMAc2Az{IT-h
z)`$po-%UiPv-4c|Dz^Sj%K^SVNe3Q>?!sm}*+#E)Cm+gqDBwwA)4}qp{}xe}`ZaTC
zw)1Vg6Mr#X*keBs&=)R}s5hxHFcZH06gIqF7*YDit%6l(D-S+i!NWFv at h>P++zuG0
z?N3U3cCsPXzeg;IVf@<Z8EV6ij)Z&>za&u4Xd*m4kuTxtIA`GjKA=8-sB^k_bt5k8
zZHO80c5*M}Ug_3Y=nsifm1o*D+f8r%4RjB+QyzP3C_wL^8QJ!Xw5dxAh8D%bnu=jG
zI1d;cOC0`N7Z7eed<h~EPv<%{@O8 at R`&xh6tGA>}@x at thk=Xb|sCgftNa~5y7b45P
zt=)7*{gVMlrVrfrS{0O%D)Q&IEEY1JDKQReKaKxUtux}D4Po125#vQbliBO`q-eu;
zROv_;d$7Up0w63 at Z4=(<ur27UZ<Z%0(m3U53Hx?R17#9kZcHz2<woyEo+h1kJQ>)s
z+r6#sycnpbt at eU`X*W(z1<>Gc^NyA}9jDx_6byS4aHc7G=wM*V*{_$1Z}B*nTT493
z(<OIEiCb~pFBL{=%5#+jOYS!yXo*4l0JPNG^f<FobIcmCLJbeLTFk$oTb}dl;`eY`
zoZbKnzpPB6CFu#)V8gzb5grv9hiyn&{Waw9n3nv)AsArCoZpYVG}%Hhjjed)GF_9$
zoK_d9kbTG?lNkzp9N(OV>z(`OKG{LOxbr^WWeFiv_7X~INw>Iqs_F?v5}Pnysp-`G
zMr-&X?0!n=*TuO^X(A?RxgaDfIe!rs3fTmN%xlc2=wli4{xl8ZPf7)H0kgv4C`Q0U
zWcFccEl)X!bqSW$-HZ>Eq^g10#mC=r<wN!(SJBsj+AtE^wxO{Lhma-YDbj`k&##j^
z#@%GQ$XAFogj`PrgL9a0x~H7p<F+HHL_Wfd7t2OidvWFr%}j!s)0|)MaN-?66e}eG
zS*{C|tm36!(cA>A+O at Dypl{uMgmOcy9(1=TE9|CdkEFERS=008UU`Y_>^8rg>3~m-
z)Ktjymky}u8Ms-2d0+~M&T<lzUPK;xBK at i^-phMTUE06n%+lsHX}p`3#?4d4_QQsS
z`9y6VYLH=ncSy|gXg*lgBDnqJ{l7RB1v-6A7+XC<oPX<le!4x^HJNgTC29+7vx^Up
zEZ3GR!zTYtbG;AQsQnhz7>um~C-IH`XFr)sY?BPQgm-Cs36v``7_Jh|30b8X5OM0&
zd0=}z{e?k6X-KklD%)@lpp7kpY4q2944bXfqqDhE{1RL(Q;{%pbjVPKL5Q66`Q$~*
zk at l!A*4tqMnFh}E8ftA3yd+Bb=V(~P?yU%`Qr+Oa?5Sr1Wt&4#Hyvgh<#6u(t%<4A
zG$16ZB}3;K(}c9+hXIEl#j}%WL~N1wPN+%*O}T7Hx`^5dAnb0cyI^y8vyr-J9Dc_d
zS$Gli*-GP(h<hk>>K`K_fHVrDg|JuC<Mhn!2R!pN3UeLA_K*URHI8Q(qUt%O?Bn||
ztj#(OzoRBu&NI|t#Ym_A!4*%)RZg&Lad?(1I;&=*X;%f3C+NEUX=ZGx2D at Ro7ySEd
z$bb5odWJ#|NTH)*W at 8=w7E1#=;hV}6>|+FNe)>i+7^TX`WOb>+JnuGt<3ooZt|Y3F
z$9*#^{1-i?dTI%O?9qfNsbSR{G)VRcyMan^eB?=YNG>+7LDa8d{dFhv<>j}usTb^t
znT6Dr=ZlZ1Jw0dfZuk%N<p#{8jJXj=LKj~jH^^B#u7U at m7ZKbGgBp~RFW!KRZ1(u^
z=E<GGKlfGy2SKjE1LJ{0P;7C)gPct;9Z4 at dyg$8bo9`K5Nt0^YpRMK!7^H`Dnb)uQ
zqy at FUiOU+Ipt2Pfv6Dms60~-d#!T+e9<TW4Y#z^0`Ho9-nD)s at _LRs^G~3W2W(!-S
zU-cYJb1mBzt-apr+=kaU0XBrSv(NinnrMyvBL6;q^NlP4Z*{mI-s+S#=2ys!+X08e
z9n4l5xpjTDc6uQykWcuo0vwGLK{)55lA_^nRy&xRid`$}AtN$)SG+DQA!Mp0Pk&cw
zutsPdfL|K!worSXk$)o0HxjRlN#yh09n}FW040#)_*n1eovR7H+DRjF5pSn+7jL)z
zydBpLf!p<H*|3^Dw__sZ{LGCJCTaf#0|KNlLa|~qm1(Xk9D9-vFhjkk*hp#!Yg*s*
zhf{7&$o~Wn6vg17P8=3uER{@TZno%qM+sBv(S-2x0d#51c}(kB!q|aczN5rI%p&X)
zgkUxtJ^0GT`N{lIhCxlEY_S(yjv|A<;i|cw#)q51(dmvH;vb-9?&#&CKiOI?3;SyO
zk~$Tql`Sr*%4Z@&;%#S0p1S{-WYX~ZuCp5h;KSLk-iv!_ru9lj!E5`!_U!DI#NMDB
zwn+N{fe;b#0&6J)6r77)k4a#)>-osOsAB06Nk)Rw*2DHoH|aM`Y!h~|s})DOwMIW4
zHcs2+vYP5XDg(;+K at rdxd#Zv?Pa&3D2v7h*VE**wvg=20iqlaDP^RzIVKwPJMmJ(m
z>91 at fYmR;kzT)2Te9v^y917B}5ED!`=MZ1FFz2mj>1>HUY-opK64z2=)n0NaCOrhS
z##Rzu;tSV*)W%p)kxs8=u7v}=sc>O%d2Zt(T+A0Fw4-r2DAWcGqU6<`$Xs<fAru_E
z3g~K;vH7_^E{D4ldG8mFwS&V{&decX5wU;aN}ZxHqh)#_${ofxar(y6;iS-#X03eF
z6Q*c;Iywoq!}0jf3DSmB^(?_Wrj1KAh)B-bxyb(~(VeV-o<}f>fecaHPzqsdB8in;
zWUHSoE$<)DYsIfUCnHs{KlR>v`CrIT_aFxZ6z(T~0kr at bnVLYhw<xiwA?M-kna9^a
zqLN^2LC^;G%LfWpxmCoX5AO340=C at GH!F=Y=2bz3mfxwRPyVKmg6)mdfrgB23m0Ps
z)$$!nbFrv89RfYVAsm2;Tnc~;Q$nIM`+JjUW94J=Chi&c at Qm5B|7PoBnAovOaLhaI
zU|#5cDU@`7AyEce`jwe#lhsb02H;vEYJadT;=RmedoY5guCkc9k<=H1IAC1e at eKE#
zH9}xo;zjz^D_QX8Y!aB?c{4RVJU&LLbB@{x<4 at MjCVgr}%W!{`7>h8OvP8B0$yy7V
z-%@Qbxle5T<@n>@o!#bY9Siidliazo$UWv598Zx5v;VxKFlGhtIl at Z;zWXu|BwB`t
zC4Y)c_QhhB;$rLd-u!^QZm6g^g)dF(M&(Z*yZWX^Xen|kD+A#t7Y>Hsy9eW`sR8VT
zR-e~0ez2K4Rn}_LtK{+T7XbmTzu at Tz^51P?#Kb)$79;y1Y)L at PY$hB+_ZTCpc|hiF
z=^vdCi>zQ;T<GtNOi{g!Jmyx#bBz;~Xf(o+MaD~3EGxUWpdwgmpBFGc8A*L?1wQxO
z))}wE79)SA_c`s7kZtU)F27SJi)F_O`6WRfJz6!H)Lx!`BvsJsW>eN;IJmXaVzL}=
zXO{DX?fq!3MNP3w71eJbAz4#ryb)xw$^ykr!e*~<v#8%B<LYtG(M`e0vYtR^b<#^R
zcR;z<tnZ39p~ZXbUh9AIXZFDUSv7MgzqhtO6}xRBZypLU3;%Gmdkk1DD8dP~Mx9oy
z_EaPBZ9Vizy$fesG%tPAalSyJa3f at Ftc@bk8k>UN2~<eG28C;7Qb!Ma&|(&tC;uv|
z>t*|=_2JX}>VC#f0!{*?*1#c9G%#Ql&TVsUPXb7aV80Yw4G=g=5@=?^`aIs;jRHzD
z=0Nhw6}Dk*qTL?Y`!lQ({i9&_{+D0Bux#=IQI~77tBJLiUr2w-vSZt*xBQIv#Zjl4
zx7 at q>r^!J6ZRr^_g9oj4pIrxc`hqBP1V`tFm;yG;a;7K$`8{Ie>XhVU#N!<K8EBWD
zw}Ms&9>U8o{;TUnIT+{|3wKJ)F0UaXE>O${dI{;c at xg9Jy4$FG`$}I7MoLqHof<$N
zMUP(+XCh}yZMyQ=^8CQK;!rJ8FE>a{m3}ktyjYwKR-$c^SYMabI at J4o8;upF;rMbP
zH1zdo3-cUo{I29uyKg}KT)7Fnb-pAaCb<$9DrsNm#o}29%?pCanz`G=>Yn}}n3j;!
zgg!qcpt(JUJfkxlWpnbpTNlGh7pp}-rnU}G#rLW`oiOCCBN>zARL)a<2Oy$d{|*0p
zPoWUx at RAi~<W`BDQRBKMb?_%`<ZsWN1QG#w$<<fp!HPSQlOcD<(Bi}thN at df+Y`&T
zPyk((DkxQ}I+qnldv1F)*1`Is`{v||PSpj*J2$&tlFwj$0<g9Y at Hg;h4Ag@!S*s`v
z7_wN at 1}olBofzOvp4;50`y)Ml3~?#BjiXiSZTb5MJZ$o17Jwe!Vbu$An4s_qfBsGe
zR$X5Os*zloGG6}hgvwyMi6pZa(DMuJFAyatjT?Gt^aCvAK+e>85IENA(X(KBW=(h}
z4);M|o29UKo5+*_mI`c}ZseuG$7ypU#48>+2D1;EgDC05iVz{%j#q6+H%z7kgUk{^
zlDx@|eDrQ)=9KW$=^6DTWm=G-Gr2IOgkiX`-qCSdMm@)pj-C>mlMlN_)!QuK3pW8G
z=6kX#bFu5A24I7O+sO%G93~qgAX9b>R24|&&R)}v$ajaJ_fPH5Y%WZ17~pG#*x+lf
z+laj_)zyBk7+#_BJJsrTb8QcD_+5IJ at qx8YAO>3x(C~K7kI$DOXF~?cT#1+Vm$0Am
zxl*nA`Xh&hb-C at H`yM%@D*?p>q;xgcu`~nxeY%=|LAQRlkr_8kg%Hcwv<HDo^+&@K
zw{02qwo#Vcwy^fdf=QEQOhBpGwJs<j%u8-9_|=dpo8j?lQRP=oi at d{a=&-B0Mgtz`
z#b_+s3}jf%xtF>ED6l}kx?D?|2XKcS#;LqU{Hn1 at Aq2E*!MuCPn;E5pxGRu-s_SD=
z*Kf%9;Vg~P-J=e)%2jdPS9qWc0^F(Y^WNq~a;H!hM9qyekEwPG8g5pc!x>^K6#nVY
zcFs5#IN){^`V&rW74J7!^y6wvTgze3mP(dsU%wK+R6dSo93}+<Ljqatv3H*baTiLD
z*tg;hI|l#8m*uxw&$S-Nx at wQHlYWH`qr)Gq at QI`3k}q$`uIf{TCw0tXZJtX~WRwxi
z847xy)Z(v-UPyHnOcTCR89AU?0h}oLV!UM9Ofxo{7{PlFk!a&)sxGfw-P7q_ocQ2L
zy;R;eJ1XFi@>2n*Mj*!gk~ia<`Z<=c%4}|Nd#PaTtl#nk<#CDRi%^1;ZK at VRkB&rI
z7~M7c2R&YN0-S<}-U_ExH8qj3K7G-V79l>j$gENV(=c+;7w(voz$=wKCn6;0)&cCF
zkS}Q$PT#CcUm*dXO}@`OMeXF-r0!mUt=b#eYmKGmW1GSRp+6T4D9Bc4b~3*ExQ+98
z>~bRi!0!W=S=6a%bFdm_!IbO=FFMbcT+`m}Ai4`6#|UTxs<^oox2Sd)E~P;N09IB=
z*u;2(bus({KEz33DB-g$E^A~jXUZ<B;Nc^s0-x3X at 4n(I=hs*E$~RiC`mq>)E9rs9
zIm8}O?_{u8LsZ0_mm;m0RX1GpF_p8yxXt}~KPm|c3O0qDQ9Yx^=6v(~G>D05)6u at 3
zb!rgN;Wb37UY4%~iWH03G7zJQ5mv=Ww%!uXkg)ArMIz0bAa9~fiH2fG6(kue)U<})
z1`-aAljNo%z at 9cH$;iP!EweDPwG==9O2+<Gu+_VO7R0udyB!VsMj5ynoK7b*9$Nny
zgdm)~GorzLHuYp-5>`gs{bX3LW)6U%IB#_E1K>cT+MlN0T^p|@{UOUyuk*vo7+}>w
ze3TH+=W_&?10KK{s_?5Na#c)He~ekV?;~yq^|gS>hvP#emG(@(j5Afd*wss1V<8J|
z+<V_JPdi-zmsyU?IblI7r=;l*5rAMxEl87U<}yH>z~7C>{D$xxTTmnKCHrEld^dVY
zFb|()(3%h at 1LX6}Nfs#M#h2prw}6IIN^2u0LLC;buI_1vCE3O*H;GBHis<Jt9|BaF
z^e~UtqtL+EXFC{_$xl7!RR#~K<N5J6o8d5N3(v>=mb#iySro5(#|_OkWEPO6+sLKc
z1Ml*)i*q$s4U9QNyz@#&%!zAdyieGS`8FLFb%;2`NbTesi3#gd_~i{SrH<K!o%*I;
z6(Wg~9UEc%BAt=bPc{S})UH_Z5N0!tOUlYT4cO7s<GjZE|D-l7%<xDBG|!M-Xy at bM
z=*Su`EM#S2n3h=C8~_%#Ca3C5GD2UM31k3i&%=+z=a~Q;<b1|V%?Em75#{fUjt=Jg
z0-Hr1>-J-#ww(*FWa#6P_5J(L_K!dH`U&!s*+oO5q(~0%OOr)k=UI1XWM%ah0FlnP
zJDWunV{cbNJa6DxO=a`8K{>+dAGw}0&l@@q<?|;Yp=h?VnU6cyJ^^rdCy4XIk@!`c
zxZ0H0hH?~C=vOB|3X|qJy29yAyEq5}J-T=x*tpdW=E!}hnNy(Bvn-3i=rfK!!b!Cr
zyL=JDllOeqfCY}HgyRiFINvgu!O+Ndk?d9lO|1WrpW?l=f=fQd_pYJ8W1p1_%JZ<{
zZuisNyNNicqv~VAR%^2wWnRYA^y!*`>rCK<a$FdqyP;uoOZaS{BVSZcf?PuuM!k<z
z!lDfW?}ujcfRB&+gS<5-><NHr+%8o=N&V6wJn|sCpmOzn6#zV6t-*Z85a>#du(CP4
zKuJmZ1za)zg$1j^olmFtCxf<6J3z@`fuk2MA~WZCa|>ZbvzA8mzi=8jf?oDeu;5ep
zCii8)KMM4}kp=rmD?PR?3;^ZmU3;8LQQl9G8UJGAr$g+Z-F-+eOH}-jPcU-1ZL9<X
zR}cgF(W4ZsS4YyZk#Lm^njNzqhZlGrmmpZEfN^xINqCHOBd}vU;=NP$3pE=)p<x6_
zPva4{N2q`#h(gafLavjAI%UeHH_(svu{=9QQXY+mMzfld9;csfhW_2hzn$;U)O%_9
zEz5UTQh_^e%Bu{s<lwS#cWwpkam(s+?&WF`-6)JZ?XkHF&Ux(*V)xk1YWhmpgv9<D
zQDbV9Zr+D12bS>dl-M9zCl#L}^s1e}q74bJQ?}+C*+HHx9Q-_nIIdwB9oJO+8p((#
zs at UUh=^wo*+hG1e1wQ;CM`YFW`@Sxcz9EKa!_e+IXD<n680FR;KGTH^8_VNeQ#6~*
zXjC=i1*e$$$%SBg637eU1cb<Lg3G=$_b)(@CvZ1RofzdQH~@_SC)=rlua-QicW+Qy
zA<l}+IvG_f(Pw2BI_l2EzJiOXd9=DWb0d~q*B8NJ&8=iYMO?ZtH!fsgC}!V=er`Rd
z`$ln=fe!>NAOc&SD3<ly7bVAQYK&IpmY4r$_n~G|cn8g90wytg$&QktL^nv)17XY%
z)$fzgWfZd-Yapr=*;Q~{TqZ{8eJXOOa~Ov-E+a;QIBV8~0M2*v8r^?y$ycdmTNqZZ
zbf7_4nPv3d7qbp7Lk(MPyqsPs!^{#EriyW(VBC7pGwRy7A5Wk$1+A17#Z^m>?M1&<
zrO-<5b;)iQOaoU^nW3U_Y=%}gVHp!$lBQVt at 6bzR`XxFy?7-BZQpK3hUrh{>otsF0
zYt^0i$MJ*!z0rY0<GkhI;_rh5 at 2S3^N>Yydq4Qej!HKbS>tCbYIjb1xbM585kK33V
z1UmEwYLg3RKn|>g2;9n4PJYK%wQe&6abDWBjUisETVFF3J0tFxe*!riH95Fi=h5mP
zNr>YZ{$I(E(!HdW?dSSl{2~2DLogs00W2K;@gBwuZS+}^nYk>xNt$45nH!jXw>ULW
zYN&neRD-arL7n2 at hb9rB6!szYJ5!HNFqw{wqvCrfu1|4JUJH$!DP+a*R5h!7u~|$z
z3Z8;#yruc&KDDLAEpCgYARoZf7}Kn<jv<QnR+ at wFi;%_E&MtMDwAu1{mdV-w`&g2?
zcMF*^KJt=lCK<l386p>4uPj-N?Ua&S9*~Rt4b7nc3ih>Gcc7w$WV=s*3Oh6^t=vZs
zD#pQyv-KaqK9z=pJshQ(Sj?ifTaWNhGGLnOG?-C8T2SxGuzY|pJFh&1L|KjlgULBc
zmAUOzFzhIa^|R&_l6&mJ;Tr(O`X1e&ojhc)&>5kkae+hk)t|%{MfkJk)h6ESw9-jh
z$8;M51RbqZn59*x@!LMsr4rZMXgIIOkCt^|GL`#F>q=U at HE_B3O7(u%{f31gC7|D5
zdN_m$1FHh|(@s?=Z@%tP!6jH4bS`H<{%!@m at hh<8P#bfE*8Khn{_Ad$Jxk2E!O6}~
zL$pWjjJdmYBSDbF_4flAp&Eq6ByeOj)hAZMiT9cNfG%%1+H%x=DL77Bh&kV>?dq0;
z2r;HAUN4MBu%)boJMK0)8RiPaQh;lO#c0D!ZgIQJAg}3F$KL9Jfq?&2%ct%O=tBxx
zaSr#7svI&fJ`0nG+a0>Cp#3cS6pGT-U;%)@Y^2NFU3Ip7{y!k8RhNT6H*;*?$5vX>
zSG!QylUjq92)A2FT#m||BlGbHzIZMXCVbu^;Rbd0={>8Nbw=P2>_T1=BdO3s&!oXz
zr*^En_wat|A6Lx8o#p-q8}6)y?mHkW=yDto{r1YuYKR=z$!R17**XI1F+ra4$ub<Z
zk3xPfpiwDOI<g4%C_eQ?WKlW5)oyj37Vq3MIQRJIUESPlPI4!<H+k^^sp at N1ABlth
zMq$AnhcseYA3%C77F{qO>v at 4ie<!1HLaY1lgM#o<@bJVXjc`C2i(wflA=yUsH}- at 7
z1y}$UH}sT|lk!xGISL_d_KC6y$X2uj!QofhIE`!$(P|7C at cLjy;ZBjt+X2b7OxPFn
z(rZ|!<Yaw>Rz9vNVM@!e-emw}4|@`ZHsYg?1dPRt1`iUrV+v8H{}B$eAyG`}BDS5g
zuQp(IFhNTn{LRXWER3ysHin?`41%|_U%97)fTsFg;Oi}aN(R?x!Fdn_MCRr2;7wwM
z6}fN8AfIZ!DAb><P=8$~FEyP)^xpd(NC(4hj^(LVBHotT*lq8dJF|NiqUmiP77S2F
z)xLg=jgHDGkhSW~5Y$N?#IUnf6~;&bar3Zz4fCz7>`e at AC~U3IGAg)e;h#mB*e3Ei
zB<JBEnMFf`Sm{fp4%3PSffcn%#Jdu2H0)%7`IyjvT&<zGa)Jr$LOVMpd-5p+`E1en
z*e!wQx8}o+tk`a$LUJn3zx`~hcA0B#I7e#Beu>f1MJtXfeV>y?cr7EWG+cwjTqIZN
zilJFFzq_+*aIKh3Mgrc=@={Qq11P4DC0k)gDjyTeUBj)UXj~573^&J{Glg){Ica_+
z9vd8ZRs}I7YUv%5hqiy(JB;o!KKl9uI9k`!JTavv6z^6_MFYk6Lvo|-zALaW?K*|>
zouV;F+mi=i9 at RZ15(NekS-T4{X(@WVsR9+$K=CLL{x?%#En9Oegy9;aWuZ|#cKsO+
zH%@X8q;!GFI4I=0P7~W?3hDirdZ{B-d27a_>X#mVO-`-OIK<QT{uh|=Y4_f5P^QKk
z50!20L=R<p7e#GMDeE`Fg|K&jb0Y3S_z$a`9T*CNkr4w)N6K(nU;%c`S!*-UIqe7C
zE<ftVW=%si;XN(v_z!7JY5e>D=U&jF3!wTxWG>pDuC{;V9kwB)Np=m{+Dux#Bu7fa
z!tHjDIq|@#OX=)c#uH0Jie-e65VxEp6F<;e at Ydw>=8 at 5plS9d>G`Jb(nW;4*w!h;&
z66sAl<nnsg)BZkRAX8EnUrG>K!Lgnwd&=Q0^7uMFvza=vcfs(W?D5VB3hGpPGb+Pr
z`t7m3jEl$-Y(MKKkIgurV`Ka^ISO2uKVN!pv8N}#iF~ldl^)bTD+Me7Y`k at yf;`VR
z$u#_9xL<@~FAm~YRQ7(eqi6RmHaTG$noc*q(a^D5VTKQ3(`U#*{5^oYZVOWaHLOD$
zO*F8KY*WVkatfmWgoqEn_3qpcm}>Yy^2mbXXrMPKk!KAmz?V>*38dcW2d<Ok&Z)DI
z>{eRjlF at mt_e^M-kMXkAuy)L=>I7Ua?J9$tgf$rSv_Dmy0b08IUZM!#O&p>AQ`ntK
z<nx1(MOti4`WKu*MqdE@&1YI6FxKKjgWw3eV&pMzPr&y(_S<i1M~97(M49NlQo>!4
zXtFJV^D%?61Q<`l+L6BakX}P<V!>|_D)YHch?y<v_{p#$Owq#*rtpQ at h7KhEsbYBK
zU~cimffpvYhEbd=FJ}gV&&><Fdk~hLaPeI9EocQM9blkaC8(`5|FixCE?~vY0(_D(
zP(|GHRNcMby2{S<{Wn7ge at C~v55Pf|=^lb&RU&rtUT6f$_obku`taU*o|Obsn%+lp
z;^vQj5nLSm!Y`r3>91lG&+yMo+ToYqZC&9i at G*=$Oy^E!e=0FiB!nk+k8)mUwSj|j
zVKC>NiE0FwgNG)lWJNe8L~RD}(L|~U;=zIT3)I0R;po7pi9^3d9qB&j<IG|w1H`qf
zg+YxAjh6xPZ=k8w4$dj}n_e at lPRz~Ib5$M!VTF-ZxH~qq+ore~9fAyzs$mYZHnqm%
zetFNyTOg`i<jNEVb9{(KKlnf_g896f`-n&c1JS`vbd at 6`#U*}(n>_B?PVTBStUmmL
z4cHFv=z*TF*NuWHwt|LPy+5>aOex8I3%@(O!U=UwRDRSw6v0o<QGaTjI?tIjuDZ9k
zW&$t_M=ndGZI7~3GlFQ>T<Oy0J-{#GgZQeOuF<g+PwylWz6<|7+zxV1!(Q(tL7)GV
z2=KJovXIs|)CoC{#w~)~F!-_;DeX-gEw}$mPC?%p-eWl!Y^LzZ#MN(-ybshBk)i&~
zPOt}VY|NBLc}t`2<ZvF-oEF1(|I5rxK54EmVBVdQglWne1Icz{zGo`TK3+b34ybY5
zU$nayTiyhubj7N1RRz`W^2E_TwBjCxES?}%jk=Db7FlZVHT9+nyXB%x>A=a`rIY|`
zfo_N<wqbrhl^AK$-PZ1Na75{*OMT6^azY4WzF(!I#{juX at zqBqO%t4`bgF&1IuTh$
zRL+WWWH^rH94m}TX<<Y;!_gV~{*x9XT?S7SVY;c-i{`A(GI1=lfvadg!m1E*{VqaB
zmNT%^IWj<!W&}{r8lAVxnyA4GN80PwlXqY3VA4~b$6idbuj`>+H^$!=QCdW;*Dj+#
z58D;dvf2e<;uNWsU29^j%JSU~hcx#HM2SS~-|u%hevpsX#ieQ66F9!q#KM7Ae!K4j
z+DcWT4kjy~uCactqwI&-Q;VXij^>ZKGblq(f%+#181KJq8_>oJ(w(>Z7|!0B+f*f1
zPNc}Vg13GtVs|GI)^AT>ur at 0`F at rYeA_H%FO7q5+QG)dQwRG_Rwgm1zZN&xl9+hpo
z1sCX|Q-hZeN&<~v{<|J|h=Zc}w{RnUpJ7%JYUGN^ofRV+&E~@~pK6|)`mf{7_;}<!
z$#;q8;c|&j+N_i8{(q<SVnz_s9_(X6`WL@^n4Vj$OEb(<U08A;E{Lpf&nH8sU*TLy
zkvq^7Wkc7a|IQH8(6j32eQrH#W!3EU!yk2pm$aj$KN#-%#j!L^OJ>|-7`{Czg$*%T
zp|`6`bOy`P6q~IVvBqX;w4j0Y_ko&EJCnUT{8a4F*)M)014W+K&IYEL-TC<Ig-;O9
zp<DEP43Sw!u|7kMnH?j;`!Dh_V9VvSG^Ke6%3IX+5xoO)y_gx~WV5TY)D>g{H^g!v
zGCm%ka!6$ibkh>h*nU8v;oRHH{$&>qQ2%LTe6yoYO2gQ_jN@(Gz1$!m+X%`eo at sm0
z0{G2ERa)+|dxeVU#XaN5pwe41x+*XBaZmZ5qbTeVP&jE0 at ts_YM~Z>rW;DeTZ~3Y%
zh6Ix7Zdj&PR_R>?1>yKzz>@`<#^19g$5o9TFlbj}WqQwi)8+$_%}FVIqd2&ySXVkA
zTXSd|C1wfk9}JdUiVz4bI`=XLGG~^^1v-w2E1K=6ouczik<CB40#C4=$LF2<lVn&!
zsqIEtTVJ?eQxj`N^{8(wrt-IPvA6IMa~AWvbRD(=eVHobt_$~qO&=~3?`W7;r-;i@
z#I{e;IV)kSgLeUR8Qo_O+d55H3=*_>P=``2y6*~cuF{cq5G5lZ`ll-yAWNb^RlD0V
z`;U3D6OR2g!^-$wQ(Q?_Hqoem?{jNGE<-JY069R$zg^_-PE}$!(?Aau{5Y!*Rpnlu
zVWUb3wxPajfNrpxsjqxVD*4kH{O)6>*DzeK<`K?ti$<#GHT}3v>6-y^?FPh*4V~<$
z`Yo7R`Gw1StEE%P`Rw|Is at 5;HOwJQJ3+u{zk}@b}(H|@cO|Azb|G>p_3WVW3uAs0e
zmv}ptscRFZM#L!Q1>hx;R0DP;oJ6p#_sPMtXhEU5rh{rByAMD?M8KlmtTV`^5U2o?
znHux8H!Z{Owos2xNMvK0LGO2Xhk?jtrbE?C5bHtHjCGH6?(zq!cyfhS5`)=o)!jgs
zeqB1+Q8t`{-Q$eJR at ft}V0Tv2dZQ#pcCwW->WvD}Xp_dF+xz=vG0gc=3WFH)(!oUp
zpF+UaiJ`O0KbzWl=F?@)5qt!Gz`#o-FhxDEY#>q<_c- at hVieR31%#%}cZkBP%4=6q
z4E}Q``1b6}l(?@=jai9Bq$`MTR$Ba&_B>3ituPNbahhOObuoeO^O<jKr at x#RhGQ-8
z7?EHgA~v99YP1NV@#wPFry4zGT?$49BPQKuIkhpS*#)F|$4H3!B{K2<<)THakz{iY
zX4V%3#*_-ZzMw2L0M7&voSFT<?WwL4?2gy1>>m389HFi{DH%j$>`q+3*d7!9aR;Yg
z{B~f;xIA0czI5vd`of{V;Z$#kjSinEk2-lFdOf0ecA5Ve`;;ZxzSyxp26tyhdqlmv
z<)0HGh1O4K8;q1c*RjVyhCmDor+<4vaEVFoY53)4b-Izj*5ZZD&^Pjo=4-@<GSg_c
z8LIyKm~!@P at rV~Ff-?dZjw_A4xXt%x41+}7YBbeIQ>rPp)ZzwKh|@U-`=R?s>C!zX
zUG3pFLJlyhZcci6 at 5tKXbVxj=heHy>I5IcFAUI_aHv=C(1`f=-2>2A$`y29gqzekB
zR;VcqD?Ry?3QU8I%zh6WL~*aQmvO5xc5j?v^Q7p_Qz%z{QgI>7_+29=+VQW23lcZT
z^<G2Av84jQTyB4OLE|0(*}k{Yr2)~wNFYJs#1Jay6eavdjvoVdn>&=TSWnJDu!a?y
zzH at i!)`t`TF-zkWu)o~jIRK7ti^O&#sny{WVl0G(Y!Nm*%#rK at cs=2?N&tGTVM$k2
zL{-r+^XHgiy68*f?|{Kv%(u>@@IFny<tD~Uf)9JFUO=ZWBEZb4;-~5NBNdTjL{MG7
zoJhO)LA3-Ry^Zc;k8O_!Wsg86_X<D~5FHrD0%uGk03GX1DtlH|UbX>tfd2l_3X5OL
z7ozE-qu}ntRraRSD@@_U?Y&!QjQ{rRXA0;*N58V!BC277J&Z at iRzoht!}!doKD{!4
zOucr%a+*|X at W}+5G5E9Q+xVCk{V at A8e8;ni#see*Q<dhL;;KjfvkTwQ_LZbYYrKQw
zrfw63Mff0$;+ at 4v3Bz*(31JnAc}WnWsF3Yibep=i>qT{O^QXn;6YSn*WI<%Is(~^4
z_3)MR5DB&Hvj8z at P=dF at N1(|T0E{ya$He<f>y8NA$M-u#us2OI+bwgm(fLhzy6-`r
zxcgNk9bTXv at DxJDEaTYK@Q2_LoMHsX8A;M0&%nnVz7pC^4gH}%k-jq7Qq6fKcse;T
z)bKSDeTD9pCrE^x6(neguaq~;tR_cT!~;b{v#x`N^$A2J^zqVuizvCFbI)R(@?7Ui
zpy7u~D1I=TF(!q`pX?61!AE<a3VyY0TZQI&RcbGOSJ47#W6RHBfOOLT4t_{2@?VR0
zTwi$=TgMtrqkp257xc96hDcf~0;V;p<sVV*?6dd1(kyvVoPs}}6Pw}0*48jCzZgsd
zU47O%{W1?IYS&6<Y9dKhf))VyTr;nn_$@IKJ^ZXYem?1|tm@!RCz>7h^f5HJvzN8J
zU-NERCkDSeL)p{=YCCz-!eV!~HC&4h4UMVjOh#Yr0A&zv(+sHcnv5%nJJyj*q)e<4
zSmD*$K?@;g^n%OGRCfTK{Wd1_P at zyE6iha`X8Qb%oS<_Q9V0gv(wb!Z^93X1FTHnW
z3oQ)l<n>F&x?!uuNI1>xFVzstgmGpfW>>8*`+v42$c12Hg at ZYbecvra*K_HN*dvF9
zwLueh>C>=!F6))9&9X5_zJf!M0KhyG?Zs%YO at gH@rkD7(a#@d2L1!$hbQS?%&&i<9
z*g!DX8C3H#$%qsA=L@{tjPY|cFf>!}kdF+4#|k|ZQ5c*7!TA41Q&5AULIyY{&qwCL
zWkNMepc5w_Y1s5fix)4H16}&BKZmlmX5||*I2$6*5kJ&)0H^O{1~Q(4ko9{vN)oS4
zNSmx7&npf=6KBzR%k!wpFBD#{17a`#(YhSC&8CO#?%g~LoQBl{dfg>Lk;2Mcfm<SM
zY(JN5n5Y#;{Y}6BwXM#u3tn|`6x#ww=dRo%FdRq-k~vZTiF at I~(dj6cM^kN<r#Bku
zL=mRg*3{{|;EYl80YA8IExN)F at eo7Bj#z_M2kx2#E~?Wy-iYL;8h>Gkl*~Y1ct&{$
zX+QBbw2l%eU=edD=Y--s-J$!}e;mR3Qgk{uVR&YA%u=CEWml(L_}Zm21@`o@=6528
z(T<?HJ9BY!mQGT>gVT6D=CUnt&^@N&s}Q=4*^B+<Bg-WWn(0(QPka}47B4#iVew~z
z&S6DQSZJsdT3UXv`4dy`5ShvkDV-NMFoI;NTFHZq74Ej(o`Sz?5DcwWN3OT>F*7Fk
z?J0$aOsEm&&aRXsj{#ngzQ5dfV|9f$P<~g5XOfQ=RWI{NcL=0-xG)&;g+&h}qGXOC
z|MZP4lN(v at l#Cs9=-|EYHi7hh7={*867q%sxL$of6%Qxg1!LiY8b{Q~3MyW}Q{+C&
zX}}+~^M8szs{oapvmG>O?;(19@^_OFQmdCvJ-FOC27sJLAP--ud8B=&Y6a;`HeG5Y
zLPjf<>%YtiM*4&UsWo-_{E{~x*r|puO}>Jf=`w^XMAXN~U&tM^ppPX2GiEgCD<qFy
z0w<Y!uAXK+qyKIHB(n09!?JxMOM>7o-tmZZ@*UBh)mG2n!UDcj`sc<oLNft~grD8R
z-3_(&IG_4RKiE;1vDRIv&2MkQqRnKW?fo(S!d&a5$w5Kdw*z&ysl at 57;bcekig^o6
z0^j?=&V#0~$7YK9iW#V?%<mbK=cv}>?A5!toqc2m-UoVoQ|I$2k!^@gpp(!Xa+On5
z$tY%()YVxKY{OOB^nG2{1JTChz4R at 2u|O1|U_d#8_?x;>xyfgt8sq$%kjfUTeQe%c
zE=0Pr1T+Inum^{-Qs<H9!1-Mr_5}$stJO&GJl{``P#tX!8-{p7D7CeNTYgP1QY`o{
zYYadsC at q=aB%6(;uWCcrDvm-V)K8X%^JZ@>Skqg|$+{rWttU8JoZ?I27(b&TxjzL;
zqYOP0zqxT+1P8E=O+KqyT~9P}TQQ}OGU2|@{`O3P#oUxwePhrZKLo--0rg$Xp}8%E
zGY6;)Nr6G>>>N1O>2WIMx0It}1>ZXdf+HtchQt>TrTTeJWW1W_bAu~EeNQvOaG$|i
zT at A{%h$B65Nx!ZZ=3Y(<Hi@}1>f<jD+nd0uVGrLSfjvzdehMa~T`@Ta=rQ$&4NT6|
z#F&K=BVRUQO<kWFQ?=Kewa}JAXt}^EPKQ6!exC(?(MRWX38SEljW+Mjk~<OAMo1O0
z8G|#c#7a}gd+6_aIEE$}_Z3|L&s^F)IPeLAu=V|VQIaK~S&=6%QEv|mYA8-_UK7rf
z>5}`^ZnLf6s|g1mR6?$zQA0SxuJp?K&B6Ys at 6{R1M)KK(9PN+nP6~u0T(mF<bZ2k+
zp?0kN8HTq({U+*tOw18`eGo;9&{Vwd+l55f>nRT=ay%A*{D}FlYY{~vS4>p>-BF6t
z=*)k?ht>(LD!CWYN(I&uTaSRCUEwyeuk?DZkxVOQE(eKTy%+rGiTB1*VGTz at FL6fR
zNAfP2T`Be!qG8u~VkgU(EPWW7D4b9Z2Yh#dbC~GR4^zhxTiO34BuF-a@!AW^&*bra
z8re3v7Ugnf|KN0@(_k=MEg1R3{sq+LABYe!)S;aKKC}NTDBF8seLA%4Pop at uvtH8@
z<2YVtbIa|-Ct$|vmfW!QWeForZmDbE;?;wpxU<mELWpf1{&#X<dCiNj;S=QM#Zz9f
z_rYgpUArAyNW#Xt+73fe(ITfUa$)CU>*AM;GMpL=-*~%AQOBcqwyF>lCBuRC;!x)&
zpe(c}hy<ajWqEwXVZ>|v_NAK_eO62v!V|$tpnY=`H+}cqlw&&*MQo9D(2zM)#0?gY
zTsyRdQkV6nH|S25yNI=Q<otdf*<M9HE|PcDCk^@sz=mm4#x!p23-peU4{|eBhpu!M
zn-O56%BkS7X&x2I1t_rNeQyO5Pz-Zo*s5M5U{@z;(zVl~Oofc*e;trwEXW>C>io*W
zh<_H9*lG{-`+l~v4ZyZ!&o-!1q5s5Vm~6b&%nt!*$$SIH&$O=3HLrrJIMv(^=7J*F
zxYA*;oc`%2GuK>3(mDrtfmNSj|D&G<=qRuhG?e?gK7u8MF;#^T*z5aCgP2`33 at Gi4
zbaqC at Z%fkG?wVCtbpTUq(Y$oFN$x41A%JmXn&LQ%dzg6R5NZ8ol%ox0jBEe+n8eA)
z!ALI%WD|d?3vi19Y9id=hekr`1MP`1f=7N91U(|%5u#Y{vrza>L6mP?F%`-JvBgo9
z2_&xZO%T|*26rlWs^p9^tOi5{JH{Sx_EzcWO-7K`Ajhr(vCrVX=onL&aT5OyP9yv=
zG8BhD(zh1svK#G-kKwHb?_MVQu6f=)fPa#kahI-x{ytzO;E36s?7i(NJxR!=o_#3z
z0b|%icWyhU`gnu1O at a(Qa1p1WMxEyXYU}nPz at UqpI=iVeU9o~d(L1hSdNlW>T0-Nj
zDL#yet4M9C$`F?9CWZnBy(iqhzozDYDyHEpIsYtbVC(=Zz<>q}l5!Z&Nh3`iQP?5}
zKs}ErRDz?n$JlK<Z?u?YR5iNkIj@*J;PhoOWRi`F-d~YvNa`F6X%Vb4ag%;n7V;mi
zI5%ri4t-sxy*xIMzS$|)?*3fA0%if+zW#QHw{>gl=-f_ndO^!tx>qX^ssp_CNoDP9
zD`B=S`a~uZ?_jT2HFMZ+ih8L;oqmzIIhoti=1Coj4bCuX!QS&DJ-XGJU(<=Cd1AA^
zisUthl|OF at zC8d1{zGGh3A&od_({_67+QC8x95cw%he-A-V(S_v}rC`Kmb0IN*s>;
zrY~N>yn*@w$CNV at 1R{@^4t)Xa_lUPIi(Efa5XCy5B at hX6<af%6xt(JRa;=WB_iZpe
z5VuE~C7r;tQ5iWPg-`Y#5+09Si_<s&N#`0fhWlNr9G}pWnqv@(pbTFla)|WMe3!^}
zsK;JxUKg*15J#hV)T$x%;Z|th%pZvvk@$T%;U4<Ge$tjmA{@t1!t`nz(9v0shcCg3
zPoToJS4 at Pu^{^jt+OU2mDnRZ;aNps+07b<JI>zY2`DhbFl%BJsqL0i8Dv1Opi%Q0k
zd-;&@o2>saR7#(m!@aJUUAWSRCnEBvt5_-{U&_gbR5{pLLQ(*qxlQfIKP8v_pM$`0
z`@$@;YxqBT#|+ubYd@)D`&5Ck`_5|R6#}i>skE%gq`f_;W at Z)J4`#atXw25^b^o`e
zptkl3Gh;K4O`IR2uR;*%WryHO=RshtAA7^{^$^VLhc}aQ;odEfjx^eVD$odQNLaG!
zmzYbu+W{dsLn~1r#BGSVeAcQHYd@;n4OGb!MP+QXLJIfag4r12RwZ+9LR|neyg$*$
zyYkpc<~1`6${_>_x<1FzJEu{taiS6R4qy%%7%|;V4Dc8f)DI8+V3m|H(XAz=VzOGz
zkateTU(6X{<7Kwt*dfeZuD4OlUKo^dh*Ql$rOEDrGvASu^uORV--R&^gY8OKOYDp+
z*ZpNXK;&jRT01eewhW3gW?W2{6+9~_XD@=C$>ToHxFTJ;*D0I{0FkDI5AU|$tu0D6
zapiQHJl?#MW$E!1mw_cioV&mFKZBTBzBjy@^MzMG<h4G}fp}=ji3anpypn`L8KX#R
zQ!9~YY(i?Zbyyd^TnW&QUL(^+ix-HDGFs<)B#HWD{oAKm;FGT at DICFK+607AU6H~q
zeBHDuO5yW7BY3QfND-!%t3HFGN`s8UBCXV=_EAk0BROJ-wJYsZ-3&aAMauy4G=Zd5
z{OuXJ;S2I%!5Hysu;%#}p?trV$mY7}0c1#E1>AvN#2U5tCUqQw4f*>sqVB*TR at wA5
zo1sw*s#Y*gkPE#(O at h0sNtu8Lh(xH#rlA<AdIX?i21>UAiV0hBCEQkcH9#xzS%qvE
zWD9BxPf-rBS4-sZ$z4Iud$=qcmocpP4@~M2ptqMFi>I$Tm%#I7K*9`)WdVVc+trdD
zhO+Jja#z-lRtm6CPba+do7UKw;0M(|9r;B7$mN0ZvY7goA`78Qv3K0537`(7l8?f1
zGMP#^R^evkaSlh*fjnmJL?7L|t^NE;H{C#|L_SW&y_}<t7L|4vp9bGRa+H{k7i&!x
zpp{68^tDj_hZzAnZLy4L8|3JuVI~rN$xO$m=yOd>W{nKUPvVKO7Xj^z0`ayJ=#7c`
z^F|2Lal=xS5bHSMle45`sxy29yGQ?Wi_A5V0Uc|XqoH at Pn+sEI-%(i$|H62ReZ{uq
z&E;{hJ`LuHv%TY)ux2WhExE)zVXWBdw~gxqr3|Pu#sKgonP2L#5*!&ke*-UZ4y~QM
z2RTb0-tkH~c}hT3!!#zu2<1p<hP1;wi)CQJ$^YQl1Zx+cXyyp_%owL8C_9mLLLr63
zWg$dkcf$8BRLX0Ma4078RC-~`tLSiEVhjQgcYBG=nXmIfz+5eiH?0jR|HJoI7WsU<
z at lW;j!hF^PUEFnNwSAk#h-TwU)g&m}uO5JJ+S1$X9X1S+gC=-|Lwoj)b?cEP^@jp2
z+n74}Eg;pQk1p`UZ0PWGj#xW^8<?=K$q}V7$aFLhyfBh!Vi5Iu!qf2h*rGH2?cqQ6
zG-L`z2sd{oaF>Y>qjLJBRLj|BvB&1zyGA2*tCp1@#VZlM$sOTdGOBbC?rZK&wF5ct
zm^}E88W_Q6SXsJ(g)QR<4sW|IfsXc4Lj%1t)fed>3OZpv%?;uG_X5$(q-%1F%wbh=
zt-vAxMpBL62U;=UrC*vm53k;1)&JNl%CD)6=+6@{D at M9JP#>Kg_|!o&=Q$$i?B=_C
z^HVoB7KbfdqPqU4m;?0lf at VcGYN#!3q+oo}3fxG%<?m4>I4l<2&ya`V%lK3lYu4<5
z)9DbjBf2n7d2`msj9+M<{AT$w%Bq=EFj~!5?wF}z*yg4Txk4-bK}0XA=w_uxzv_j#
z9xDqO4v`LJkFjuHxfA&Eo|InTpvV-1MC{2ZjNiCr@~267sTQqxU{&1&6thIiQ&-v)
z8kxq<rpx(@UC`sEM><V3^Y3y8CK-`tgaLQzah69B7g@>^A<0WP`y{#OzCt+=N-KBW
zA?G|kV9*-BU-UNvI|NvvJrY#a#0&7=9~9&OU1J;8XePYlin^5o&}?G>^ENKMBq&nh
zZ1n8%2RRVit#H at 6vAV~!KctYQuy;MN>9fZ36l}RJ?GDGH(QfMk?GbGG2|bQkXw=o%
z38K$K*gRG<);NoqI`bq7;p68g%nr};*~7C+-NvxCe1wM_<<7i#SkKI0%4K`Q4h#XW
z?l;MtG3cF`!&T`amNpJ|^&>VfyARqoowrNTHK>C}!@G&tS##Dun^=>nv*to5+c|3W
z&Cx90?;@q&HHj4dVShN6{S@%@DUK-unlNKQJE=u#O#3;4Ps6XBgESw+MB=L|r{{n)
z7KxZ;))BdNw at 6!X8~REI*>MU>ckNXBV)3`Uf<_=`jhvz;@FV&qCuSY<yMeTb2tmM%
zpoimK1lU4jGSkr`ZsB%sAbC7(-X{qfy%ti8Ceg*0k$MGL%b6pr#QNa=(1A*=Z@~@Q
zMF#9izmtBhwcr)Pq~Kd?>!>Rnz&|NW`e>u2?FfmWibtbRIR|Pki)q>rWt)M?eQB$v
zbPT;QYsmQ9P3Ks=TN1E#$oJDgE1IRa#cN>!6iv=1 at LcVR1IR6gb#RVA2aWHl6lVja
zD8x)4x+1B(fgLg84j7?p%7>ShNgC%e%c#bxhM2{i6%q_wh!@#eVMokO4eZ}u4~0}R
zhF<P^vIT!J at Yl9wq|Y?Rx5lNljHKI at MCmtKuFx-eIQ)kSTNiDyC9ZnqId*Zr#_ at oS
zkd{vhe=9{{8y+dqg%B%40tv0<f&aw!4dA~bi06f at KRRwALu$R#4i*?>e7nA<SrEdA
zKacfbxqDJ6rCl>CMrCbHdw7?i!Y5hFJ}3fg3Oxcyzmuiy#DM%q+g}?B4PK$NJeRaY
zo;2j}(_uzgAQfa}n at 6Bp-4`ZBgUSl?5CC!LocJY~AG<{&bVa%*n at jkW9+(=eRgQje
zX3VI9(l_q+K4x8k_CV2zjdV5l{M>_aTn&hPdOh$XI&Gdz=k`+cE55QXI^YCm+i{Uj
zD~VP at w=Sk(7rLFjJ9tMqEB4GjDU)v}>e*t`Sxh#fI?@gk&`IytBgtN%kA%=V0<rD)
zr?cGeUYU;5bFTQZO_+X%DJy_rj0#yTM#X5zW(=GL%}L}n%i at 0HMw<TK!o?a@#mVJ}
zuJF|5Om_LVmP8mxiKDau{$J&lf#!ruv!cof=XD at Pj>th0QQfTvnbbGSu at n`$H9ARd
zn|_E(EyCI1b`crCa+f#6vRzsY#)1HaNQ%KeSDyFau3M>!I@`!TNUADpeK7q_M<(c$
zQ5Vz3<3xy&Z}a1@^TnE(+!CriFxe+KDTrw~iN^LS_<FVD+UfDR5 at R%aLjk~HX6w*t
zxVu@&tZh5!FPLU1Z>&i9DW5S{53awxlLVCKHP?YpP?$EJ^L-$z3(s!Bag=|ehp;Y|
z-pv}+t>9(sB1*tjpH{8r{r{n5&vz(U8A&fm;f9hNy5AVG;7c$iU*uR^_cDNVYN85?
z{~%oH7|=}}g8UyIN&a!>J{+f@<jCxWX||tz&SJ*?;d-uQ9-iEHkw=)Zba&cc^aKP0
z6-Dlhd}Osio&M}U{#-g;yK-KMrp@)PuuP61*7|$Kw-#YU*RR~~Z2o!8T*=pnCcDHI
zL+OHb54=P%q)Rh7KxfLens8 at te<%bA1AHBAjU?2yJ at 1K4gIwOi!0K5F^+-=_ft=l0
zs})Me;Kk`X#c}nsQp4za+RrCl{zjO?dflF+E^i1b(vfQ)oL at gZIfg;tJIr(%TxLR4
z9DwCOBDfhb>WQTTPkCAo#p=G8$;8)S#!AcM5C+IlM0{>mvpbmUFfI at svw0*hVdvWh
zSNINr at a+kngmtmb%2SB0ZPCOMjhRrO0sgtbR4}xV at XdNNqa_@Xl*VPXo%3Ei$Cv$e
z7))f%14`#BLJd75k at Epn<!f`yL357`+_G#1z>N$lX1`VPiUe5^vQbAcam~hUO|rg!
z4b0MT;Grxo^_<M>VzBiC{+3lFzL>?P?Lgg6yxFsPNr%yyW at y3RwAkrS8seClk&Jqx
zxasCvW@^lP7nfj)V&bqUnZ$2nu-Q#6oHI2}q|0Y{Evo<Qd0h_Mh7c|0Cp}KrroAa+
z$$uY#s6 at QhD6;OW<!wplQr*(azlSr4RcC+0uT=)Y-B^&P=G5H$y^5rnnSqa44z96=
z)Ek^UH!n2ltJStDX^#M!3zM5OFAem at u|0Bm(nw at eRFH1B0TvGiOCfr`&Luy0lkLxq
zc(Q5o<EaiVQ)#>Zu(au2%;tP|anz=R<g9(M0i>eWy-1=mIp(VJ?gm{nAQ>%*AY(K{
zPp$DrLrnjzEO|$9kVW0wQ2T-L at VZ~rWf)mkg}O=SYj>IhtKmK4)qQdZ&MA(D5o*O8
z5>usEa2E{>Q+mD&r8f}Ef&0MHpmiM?W&OKyWsQaY@`*b-{&+zrrbACBtP;lI!xAr3
zJf}>)7fi`mhDq!JQhCEexfgKOAbiv- at tM`l;v~cDvz-W!%-iCof9k4}t4`>bR=9~F
zU0H$=;4-6|US2j#>Nv^VXaq`$tmEF5imSXlYn8yKmpFUQj5<lptYZ5(|2BN}R|4)3
z*$1g>O5{|rl`^%)uNx%nZFYCxOdr1f&=|pyXpkITv0sp;0P_y(763+bRgXC)?n*3G
z%~ssT%EA_Qx>0lnyabfroCSF=N;&1(#Se%3ek`dLGrarlN6Euz(XW&d6!WckBa*pB
zNcM(b_#|~+p?tQk%N+C?<3B at xd=bL74=- at dg@pn^7j`@0Zq;kg(qSjH6jL*IWC2BR
zQnNSN^yH_>ZEtQYLQ26+w66gDvSJmBRhpOZGzua%dq}^==lR>X)FE1z9frrw)=(`^
z)i;)kdvGgZeC9(Jw?=9mtfSqlMw2Mt^YtACbbbnA2#FToGr9%kF-%kYvHEX(Lro_$
z)`T$<(2fXag$C7hBEmoB*$4&7_q5H^YE$jQt-dsc<pkd+chZ8P^NrVG5XDhKpdbTL
z7^QPU`v$DxnOVG2C}b*TlnB}CEq3kVGuoG;yNIN}v3fPNr}fKi_-4w2q~>^cJQ~Oy
zzogAg=5P~5Cc#eP(rCkI>w;IGL8UHi#Ip8(k5<2((!a=r<CCIfYrU|>8J!ejP>3GU
z-qEEBy3VFyh=72`@B9r!fTScRLPRyHS#Kx?^qQH5kI0wW@#s9FzU;tF1s5JkD+|b6
z)vN<x=IV0i1h^mzzuM>7Ms<GHF&Jr9;t4e9%=~24&{Py<A!E<DZ)JQSU`6u5wA&wP
zO!vRl9e>7bLVWaA?X$Cu>iC?zc4dn&%d5|?6}T$PnP}zk{wO;{8`O($C at -PpZ(bEu
zy%uoS5xg4dei8+gU5~HmHoquwwf~N$yt(rcjl*H5V%`^rsXnnZn7oa>#q93xlKyyy
zijzH%?gJKXjaUs$eI+mhv*SV&chMJapp{FwoEtTE<?%M(?MiUteq|N*`9EvfDrj*|
z)4R#9zL;pLMk>inE6a&XLn_Hb!_+g>QLzA<CvK2woZVqz>9FWyKE-;DwoQI-s7)i7
z0kCL6afPO+nn?4%*%jabKow)Y1nlL%nSf&lYQZ<{@l9KwWDK!&8xfiUT at kmQj7*#)
zphb?Q7;LNlA+LF27ShnUjL5Kem^~3v^Sp*nrf3=QQ#Y at fK@0&LjCh38IHpOa#Liyf
zrMn-<5oZT4KA>F576We-IoVp8ZmwLd(Uy*dh>KL4kr*5*m+61*FDaTu1Nr!X-q6v<
zre#_=Q+M01)X<!wfRt*OL5v1sBq|5-Rz`#+U%ZI5cXOv?!B9nu(U>1SDH%?ce$A*0
zc{N0ag65~@aZ*M46R!S*qw$;|jTyU)b17>k`J~ZRT2WyCkSgC7WA#~ZtGiuZMRCyE
zsK at q<eU(l}?z>&GwgLv6Z3u at bXN-2n`>Gya^-hT62vOoz*~G_YhA_IQZyPL(7V5lH
z$t;9cXA?;&y(=P!(|osh7;y?813Hy?v#%5*sNv}ipw at X`2S1*`B$+O__Tv-Yr7MNz
z6kpQxCpLZnbv`vQ)X9e1nsHH>JknV=914rp=0(OuMO at S;%n~)1#vl!~o-(E0wK8tN
z*?Q%g^h3*0F6W)^60UfelClEJsbV(~uiXVmE2ISRO&#V-S`qppjA!A`a#(!XOOHnt
zkGUTNv~cnEj7HBW!m93?CWS89o2uTcKLZ5StcmW#_hN{bx)gl!q<3g=&d7nnNr*sC
zl!9k|=Z>53JTB((iJ=Rt%}k=K7sz at _x93xNt0dlq!GxvF$KgFEGAzDbZUM_3r6=e~
zFI at 83l-p4p5H>Rf-Y7<evd(~Z<Y*-xz(ua&aoE#k<L6cpK5L56^z4+DbGP&n;I!(6
z27j69CCMSj;Kvf_I5edcqKzm5zbmUYfx_h~IAA={m3s!{8>uh9fB^nJzBHTIwl=Z)
zd!U6(_U?KC+Pme!4N*8E#u%)fdC`0n=hZ?*-&aDyS`SK+NR}Z<M9vDG*d0sbPmN+g
z2e*nsrPOFj^V_3gZYV}0Eh3IFN~aqVjj~5qIf5O(2<zBnSEd_(P|S6nXQ7NoxXEp)
zETiGf6|~!Nho)*a3jRq5zwqyGb=8_?)19wMtNS&xD2rssYV}I5VmpE23F1sH$D?#f
z7xDW=@fH0&k6DY41#vctG6#;5j{>u?;P{u-?+vdyjNOGOMRt0Cqaqp+LEY~wC(>{>
z6eY^zo*hWFY=y%WaP2G%W#&Pd{bINc`!4o?!NUv($eJx1(GY5i4cO=2jRnnMS8-pP
z-b<y2=Pat&%3+^nd(nixDQ_dAm8+O9os(~z5`VY>&p03MQA-Fz-hjy(L?>_T<IFi7
zOOYdKJf`*5|12tkki1%sA_-9fWO4OhY1h3_a8D>*cJ7jlp9xOL52x#G`}CJSF5_cV
z&;5k04N&08#pz3H(e1AxuZhHHR;v4{oKRg1qS#jM$1{8A=d;=2h~Q53d_fwj-7)Rb
z(jUrz{M+h>s9#qAH5nq8GwUj-7#sv at kGK5C490n5)PPLn9JydU4BP!bs087EET$|m
zj*35W&pRn?{R-l3bgGFMa+1eKJxO*#w3|ht$@U5OBP?pj$0u;aYg{%`&d>Hs{x5;J
z6N5IkCNdcG0aEM6ht5GEFFr5(Vt^|E4;{qIs)t}d<G~3RV=$o6+#>LR_KS`#DJy{B
zTQ0{)FQL|Qho^pn3PfOhkHqFC8YtZbjg-sslh|On3e~YUTOMUJ9X^l4BpG&#H>or1
zi=;zN+py*_G_!-x>JW)mE_u9IrB^^#2(duDlTPggr&P?@3)%whJgz_Cz)7D9>Q^yT
zDgs<p8+Rqd4ftkqcOx#^)FJBL4x$Rx+NvttT|6hRC){1o0RS0W#iiUi<TUm+UuH3^
zGHpYQ$Gyt~+vc^wmn!iR@(M(FrBoc(Z-FaT=ge+nZ;Tu4N#^b0A(d>!`bEy9CUCk2
z at ny}lr~{w+$*sawOCb3vFDlL_he3dP4b08#%impwvkaftJECK3fG)RtZN0u0+`0fR
zCfa~wCqPhG5}D+k`6oTw`l~$vhZC{W&a`zT7bIFz_;zMs)H<P%%@FWkY20Xr8OASc
zhmV6Y6B29*uK^>sU^ps=>S_pMu0zb#B at C^hd7A5phj5RTZsog>oP*N}aNp#q&#@e{
z2-l5M`de0lXJ(}rK`l8N?!NO=dAijcgdBW#uy4_7J7OuMhDOkD)JMn}$|84Yw;!aY
zD!avP$Z^Fc2912#ChwJ4U>+ABEDQAg-P}PRYNnjan8t2A<mDpI%VnV_q_9-*sDu<h
zISe$MW9PU4EK$7)kpmwx#*KvL`#yzC5J$rcyYRQFm_-HNQxVM at Zz3`z_#(%M3TS}!
zn5F^<5nKtONpZoT&~HLEZc5zkoIu94>BL!(GD*6Kp-lS0<dpd97RCY9!TvyfGRxdu
zapuh7fGd~yD-`S^tNOd9N&L-D9mo*~Y>CF*qAFk!txL#(dWeY;1H^2A2IV?J)h@*m
z=WL99W5)N$eO`NrgjenuAapJo;9uR8LKeD45&*i$H)1#vMSR+YSIGSjsmO37utNSl
zMHEWl8PN!ayXFBjYUax!&t$YUsV~O<v4ci%Jy2eI-VW{3)Vn;Y($>!MY2QiqY`-R!
z{$6_8&Dm_t3wjbMF~qj!&`=d|lsLqY^)#`*T_^xcinNmn at pv(?FXkGhh4!~nAA&ze
z5x<e3JR96wpnJt5<z}t}r9Pr{GY6V$GpRPnHSvqe2Y<QuIy=-s4OYL9Z%dPulhIF`
zsAH51QAWV_bL<tVZL#(YF42Nb0i9DwmZ~f(o0NUxH9eWj0H;#2q~!msUGDj_!>|}s
z072SCTl|A$fNm1k^9ax at -s<~9r at c1kc0FHq*xaJ7p^;~!6Y>5-{l)fu+KE6Hg6w>H
z`lDHV-0krOZ=B6nlI<xiErTQj)lX1I4+7Kv=(*FwhG$|V6A!#;Td{0IeYOW5hp7A*
z5p_!4{a_GUmM2{V?ES8*tM%nKzwE}JS1R$t=I`L^+nx7eQRbHSyqg`==$?<vTrB1g
z*fZe0IjX;z6e~iR;bI*h&qs$o<YoL!wKK`*&b~tcFI);Lav&NprS-=ij41?2eN^rv
z#ZVml$>>EAnQWQ6<~=qNxY4ABp`)}R;WvYCxJ(Clkg+5IAy6~B at w~qhdXVS&beEle
zy)7Ak2>}umzL0Cs#nMW>8lGH}%M+_eI_Z#Si3=3Mk8uIMU5hTjvqF7mF6u!Qu&9a9
zx^#;o!2Y##zhgZ$b^jXF{-PC;o-Irs;Z;Uh%q>vOXfcn`1nAe(xbSxq36ej`h+>k7
z-DHt{uHLTb*v9~)Vtx~um{a0Mejs!i7F6RTVFH?V$x%_ono}nst$&s6)E-zR8ZQ;W
z05l46<&Dz7OV<PvoFW%URca4rLWp)IXi<k*<GC-01 at APpQyZsLlFjczWa$x*V{w=b
zvTWw!)a;|!ruH%VUDs&}!Kt5wlf(D6Z;P~{?9WIF#9#y7f3vD5J!=6gZvCmeSS0t9
z-=qKedoXU^e1bBiki><YE1(u>*L6IV*8^3DWxkMp=>sBesx1u&>os}_e9k~GFvXn2
zW!a`(f_(R++)SNN27SK2g$N`!fe5eahrx)43z-hW`Pu~5#$`6zf4yW%r98zY1$%5|
zxmmyOb1m}zmm9+sk-S at z(^gw;EBz`&SRYfWndWyZt%n&SMqcffxuCDm9aU~;S6=I?
zKW~utxdll^<T*Aq)Nfhb2-YV>jB~j#<3j at oBK}GD_V21_zC*CUNLZm$A<fs2Nogba
zwdstvZz=4aeR$m_(C2WQiakk5ArreDU0ZRMvT)h{J0irNto_lPu0O$ZW#6qJS-{|e
zd at p_H7n7w;-E46t at FiGKKtPc9urpKoeMCXj$p>6nb at T-+EYwR+pxZb<27++#zZhm%
zW6bUb!RY6dx>{9+#L^Z4fla2Rc3k7DSeyRsIt|SINUiMwt64rft|e>0yX&l at X>fsO
zo at SIz$*W$;Mjzgh=-;CQtRw6SqDX(h&ZiUwy^rqZ+}c*-KXRv|h8>jxM@=X%Yb_f5
z8E at Q+OFqk^tbJtIBFnRzGeSo02krrxhrC4i7wm?PP&-qY<}do2LGIm at Z)c=<ogtu&
z&basZ`qAHVd3$04Tnp-)O<4-pVN?h0Tm&i=I)YmSS6Q)y&nA{<Kw&U38=zzsy38yS
z^30qmhRRz5YK82YUNDVL#exUVkc5Nmu4$w6<{!mZ1va=aV^9hKHN954%-IC+6+tto
zj>GQ)dY^cNGddSZQ??)|e9=y+LA(eP9Hznk9oP}H{slk$ol?w#m_azn)Zw7&l&^BQ
zqP|wv^l;|fby3lTYclzpqnr;YTjNf5R~mqOa!+nw3?0(c47JIz+4-bm57~=49hq8C
zLd75{V>2p6L1$3#^e<s5RdsE6T%PDQsT!hJP>tsagsDz1R*Dfnv`D9c^xHDvM<FrR
zK_ALbh~l3NKaiIN4W8iKe+uKdjV%KmYXuB;BgYAInq-x3#6XoeR;u(%p~>rm^G)iS
zj9(6<(r}EN8djkSoe_ at GS=VT#+cUpwMM4|iT~YbAo7+R~EocW9>P6a)_xV2|_7Bh?
zFfo at xNc@K<Ln?%T4R=|3`$vB2wW&4hZpxBWQO!-a_O|b*a{cd%jnfB{HXS|{wrr<;
z{SJ}3vND2N1883~eySfcg!?qkz^CJH8iu~zBa&;%Duu(=!CgI0EgvdwBx_EsQl<GC
zB~1vb#20BY`J*g{BS*eBcp1=?;}SOO7`wH?H at jOIwU|HG7Vgi9dxSoejjP6x<HKx<
z46fJtgRMNRV}%OJOa4Ibati-;q!3`y0dke#{xjN9)RJ(c;>*XHrPmf*W})2t;iJV6
z_ZH8-?Qbx5&k>zQtCAx4<<VUb#dQ===k;iGgS(#g$m!oR8tG0wd$7E)hgXUE_%Njk
z1ThvX9QF|ju5Du&Gm`rkJ26#1<8bsYIV>3d{ciVN1jUs0KsboH!AJyKeO$$%DSMFg
z(T3dmWD;sS2lW<UmaqQJSe}?O1tM&n1pT@~Wrk0GnMndF=QhV-p1H~hL^z@}D|yiq
z8 at y#AQ+LMhRUmRcLz6&dK at mmNUx-#9D1HzKc=-c_-q=TiCHX`RJX;lsmCi={Pb45A
ze2bd7z0~*EjY(kCdJqLMz`cQ#GJ2~S!gy(cVo^plIK}Z*1vG7}*<0grEo&9#qWDwX
zr4st&j2&)9;7fUCYe=aW5UTmwgUNzFhY8Nn{k!o at lClOyM}UJN_NJsFfjgP+FJ}ho
zFdo1cqF|;uPP;4gG at +T_8GwEonshH{(4+$^AdB;9HK(3<%q)$mg;#h9tiQN^*~lHq
zs;=bRs1*IKqpG=32Sk%z>Rzch at 6q<UiHj7NA+`)EU=&q=C{xfXwG#t57gk9ncNPlY
zADIATK+hHbr46%QGeRV7oj!W(kwtJG<@?zxoFaK$$8?&^qnPaORv{tN{>RHSy}fJg
zPv{5C-<v-WY3aS~7AV=f;?J at 7I?>BPndmMc2{ea4)X3>31U$^3O`u=4XVtZFxh|kI
zQj*kNz`aqTQ=4 at GG32l~k%ZY1vm4R!5GAjdUr&_?JIIj*^bzGPTm`YBsGU)WZXQM8
zSRUA;Tncc)$7d4S*Kia{6MSnCT7-|)W=J6%11(V at s;vZ&j3vgA+S4*M5T<U6`<>KZ
zKPfpki!i`2jOs@!+P?rp3<Ym!aM$_8D{22R0 at s;&kEl_AMXyXs2B^hr{P-E4>qZ&Q
zHI~V*TlFB;CF!CoeU*dj8FwJT{=L%I0z8w7Y;0XX?IYeiW^q(2Gx`Q+Ti#ig0AcW^
z4(XgWx-5Ss2DuMtMhVsFP+w)#(!NHguG)=mJypMIs(2Wtn4%D3_RF?;WWa^<Nva5w
zfw+<?N=wq~IT(i8O>N6w(lB~L2I7UknMAL+XpiT<HiJYC1g-W>iobC9Y~)YGn4cqf
z2Ep<1S(#MfH1&#q=HzSH22x=ij- at Jr-|Qk8gNi0Es$r|Mx!oBg23vxAzv+Fg2+K~k
z^S*d4-k}QgjFOH-`0YiHw>0RIl^iq;QwLeLU5W(i*KN_2V@)kg9Sd_t_B1uFjBPnC
z3N8eZHuuU4h^huFcft^ghV?VgX4_jOr#2;g48_k0<o><2x6F^%Z)Z&_e`ZXeHAQr)
zaTl!I;#STt62hvZl$}_15dhcP(zn{5!HAXdkniPv7|bfSF9oE_Onr at D?n-(By2{B+
z at Pfc50e4Je&7 at Os6hDOkCJwMZ@rmFf$A6Jm%?@wPtnI9cO;t)c-~jP~tycNzb*Cc?
zs&rN)ORz1m;5}hOQ?4$*jN~3e=hqQ>uc$1N9r16-)JL}9Y|%q&03-YdQED4qs!pst
zHuhE8HVCSlUPIR5;*jQcw`(N$M{m9vtJm@}xRx#kc1fN#L at 1hEm{oR4tV!G2hukF&
zDb~$llXvBAzx*L4uNgr at GrB>Prd2(sF?gkkG$K@&n<fQn|M3=|W<CHZA8N*)N7d?S
zAj_JPBLYe;Z02VG_B0_9<w!X`%|%rS{~%NEsLSr2HM#tC1`SxC!EPHwK3rQ8wp+6w
z2uEt@#(WA^p4OXz6-)Ig;6G`QNT7dQ{R@)eC0fG+k~(@?h0wZDfl>~Au$D_IAg4|b
zzb4adg9iNXbK#*K at vzKC4Vh9Y{~Oap7Hs9`xkMj at rOm^FNgmi99g8jXE2qTkptAnx
zN8CY9U>|P<tXfgdV+^cvsCM$h&pII)tDfYH)RwdFz}cri>4&hVUW}KXpd+9n5WW5?
zv!LC_%t4xZQI<psgBSS?sE;Afb>(>&+N(1MzF0pHHglS0jArn!`_!Y=_i8S9Pvo6%
z&`U0_)f1mJ%H{bEjo`5a20H#L5?;HX)6Jw)WGYxd^D0 at LOR4&u{WrzSgGsnx at 2PT&
za%Ue9_i at WYuB?F*`EQ4G2qX)I%3d&*OJQ$_*q&IDq5ecVW|WCb43~Ji2Rt=xh+(4&
z4EtHFs)lmx;W}qWLRZskMG-LgNjob%X%Kk0pyfNz&osmF=euNyj{$0q4ccgK^QbFH
zFrXQvJ2qIeitS4kbdiAD)SOxaZOA{P1*YL`+PT9}DCqK2>Xm2|dzSl!D&wtm2J^@P
z^evhUY(TSo{B+ZO?16NpuvKAP(@GqL#|2^7DA4IB6peN1+tCGyb=$|5WdZTO7uJhd
zc(hY0yXRNO<OHRw7TsfUK#9R(<pSW{^2RjY_824Ec`KNh1Zh4LE!|twtGi}8mC at k;
z3PW<sgN>3^Gao{zVpdEy6i at c9LbDICNnxBLvtY6h4rPW(lF+Ub%3ViT>Ao6r*TONx
z{xjDB*s`l>2_1f=fk4MG+&9hA;Lj}v1AABCWP#?KiGt~Qw#L`2oamcq(*6pm5Ha{P
zm#|#*;09DsdEp)-xc{<c;+VMlQP?Cx(P+C0D=#DARiJIc)*^K{6bD8nwi*x+RSIkw
z>mutc_MWennq-dls5L0K_0$_JPEYkx=BfBjhL at MF*~3rbip5>gNDa1sbha67FnyKA
znyHZy#fBvZwwg}r%lYnmq<yvv{59H<K#K8=AdQ>SbudSK)}~x+od#d%<YJ^VZkPiq
zLoRv>*%Wlsk)<5bje%F)0UIcLvRCuwV&9Cn4?oKt26!<f=Rb|TOpZ6sPA73Nf`>rP
zWS>S!4#NE+f+yBkGe$9ykwA(3Ze(Xe^e{8-GJMF)Le;J7AJ2f#O0c&oR|g?&jTzg?
z at Yse6Ft*4r<3Q at wj5qc?vv<eZ8s&^u>R&m4D4%Dc?f{$^q-nYCe&4(?Mne`>z at 2oa
z1*s;YF<1pcB^-MY6eVzK^`8+V)|S^UwspnWdjxWo?u=CAF2h!{@3|jI3r&vw((zDD
zF_|cSo@{#dTSorG`?csG2z!%1>WFN*+BRGo)QV}neENTc0=C|TQO>Kl&L at z;(>gwe
z8&L$(imtKdcBeR26+8g{6)6XD`uE7`j}aMQ_Jocsm|H4?FQwy(F at I(Vss4{-(v$&+
z67|x1h%tG}_143Z{~(7>Gp0PX?4UDPj5PsVo<NA>vhM-508Cmkj_mvJ=;;+EZeItZ
zC+V{&-06mx==&v+P_8s4 at Ib}00Igx75k^dQ6vP^JrRw*RqqLe*U^+ZH0;Ej}(rB*e
zYNkvqf!XZ_M;t~bG}XBmqPgIp20<q}upKq-ASw<$4a at vcUs}8KkR}BTV;B!VvC3F4
zEUT=lgNugNw%cX<5j!k(NnHsN6S<`Yy4feP39Yyv at 8dwr@yi_HzGs{W*`{kFJ<NbH
z<B?H`O~GGjk!ps2a8mmjCvhutQ<L>94%%9f9Y`{@Q$8VyLr{KTEIq7E`BeXNf2tjH
zpgD2(Z+q+QK&ZGiB1T}?PVdT;8CZScx2p{Zkc=2mq(y#3RePA>!4OE1gOzEKF#>Zy
zow~-ORj13)@e5bs63(W0b#$DoY0znSy);YRRpT)KKKrjeyD<xr?Q1u&GLmkN8LsYu
zyE#yY#R(`KFu#7vCAH#F(I}feOKvILqpuL0X8ea)I{ydz*Qn`!=E}P)W5-&H<;$5#
z1z{RS1(^|rl9qyjVC?JAzpDAO7SX3J#B<tEhq7`zq!0wkg5B2^8m9^XsdntcJ9{Ee
zt)(-GQfyoF?{rwUouQsG!~i(5+RnZR at 2i(#ts<cVer=qw7>s&jqh)$h=j<vD^Xbjb
z9#B*i%WxYpBLS%7%!T`AWbsD^oo8rLb6hpaz887z%+D8g*vj($6+|D%9~v{cFuHFF
z>~mU~3Z2c at u2;q<fb^B$eCA)v7{~>cP)LP-d6l1lxb6>wFt_h#s+aC%t4o+H(S9O2
zn$g>I-exfQdmN-59@)RP>j^RIe(x{h86I9|d3&${3UBg4&uM26{Lf>WgeQk2I_97y
z_O8lDZ-${1Z|t<756+a{G8XvNh44Ym*@qzuN1>*oj|AtgcCi<`SB9rU9WJ_Lrlv0Z
z$#6Y52Kq4z!e;`maIxZ<P9!hmt49fXQ3Wn#ARbSqR`);K3ootLxH`+9FaC%`DbiD>
zK0YWN8f8aEBe+TEb!OI;+=W%~+R7zfRKfD}D(qWrdrh2NI}lI5FO_bA-^Rw|^x<Iu
z{S6MLIurOG<vn9nMw$UXl&^hmhOki^&N7|&=&tT%fRp?<2rDsOl9y(O<B%{$ephz7
zPNJ)>d1%imdyTly_0fxs8vbxTiG*3;J>02*sm|=<?qj(Svj19LVfIWXFWXMxz3Q)F
z!cq2=tX+rp2Ds&MUjL>cT^U;7^t>k!I#F20+3G?btaWLV<EoQ4N{W^^SqS_N%7PXN
zN?s?7IVLoD0#c9`N(zKwKUhad9L+ZkEL)%_gdF_1BD%2mte at y1dxa9G!&=w>6Dt0u
z4VR_uI17lzB$DPLZcS at ShDf;1hex)3l6(B-1j5$?U+474jR}bI#o2}I76h4XFXhJ>
zY*t;N_Ot-nn@`B<g^eiO+BaMyFME)tQ?SX&fTqr-LDx+uZk~KjUk6bJPeN_$qu?ud
zDala-p76m!D(TLXBvn6Gzne4Q<L~1fxXle(x&tEuctsb*6<GOa>rw=C5nx9x?sDxi
z8nClab at nLrdQdUd68d94DTtwC=8Xu;mAbI6MN<a>$G$yGYB&sX-8=6sRZlH%4xx7Y
zAw6Gk$Y5A71t2J=FbgCupl?Fo(d#bNf)IHXVi*>pDMfQ^={*A~;vHN<@5B+4405QU
z3#0jnEzGbZ$x9p~_Ncz{&lhrat;@rVjLgJWytEP-Kb1gqzBAFa_>)$a26s1dU2>#m
zWfXvG7PdKtkstw}em9Ipe5^{HjyI`bsXMFew76Vq&g$@4hjuxw{05dx=}ciULe0=B
z@!t8$+{>MHb`WxHkBIS!$)e&5z?D$&HBYg{&Nd#aVNCE10(&WU7-X-Top#~3=6vKQ
zi!*Dic)Cwx1YKPkAr%-PcIWb(Dlz~&tm#Lr^yBP<0=k(tCUtiGcN&uuWP1EGlTDez
zF=Imh%Ym5vKh(=JV+h2mS$<}a6tI;C;rqp at NfTfuc5y#qI4w-Vx at gt3C4>{B!ee{_
z=h(kCN1l3!wP5A5 at g^A{>63MDD~TS|v^s5y7iS?tYoWZWJUhmnD6)!olKW!Pucy+x
zu2Z&pM7DCK3RGjh`&mu{%^Mok at r*9DtiSSS!oP|mIgkdOc*d`l^4$vBETy<*@Vt!$
ze;m4^@`>+G$gLWiyJ5v>caY?|tLPYHSxg1J>V5bZtd89wMS-ku^+8{Ay7a`a??As)
z*jjU at O8+)A{|qCp<Ua+h8CMGf-DZWag2AxnwIZx;T6<+#4@(#vmDqB6VayZM9PX+4
zcoPXLzCkn}Z=`&~xDeb?4dr$4a3$qIDTZ7+-Oq#XSA7dOx*#>v4~Z47Png3ml-dmM
zPj(1hCv>2#S|?W6>q|Ge`*qwF^{X~x)A0(BBh&#s|1l^`q4mXE2Ih%~fx3X7Kf0XN
z%ey;wi|hDN#MM6M3f3snnELkBw(zAsALFo5`8!-RyRn5f?rGZ_EgDvfdF%R;Vs#IH
z#VN;JE{c6Yi2L4df!*F5W=PBb=JjuO{eL2ypbr)Mug#u3`o*|N(kK8gK+wNcSz_8>
zAP{>jlr5o^B1_dhI5Q^mOQ4V$hErjo4~H-07>t$0+kK6-UJda{0F<u4WxPbMMu}&<
zBFx5I?{>H8^~oB3GejeEI~S)1A*bRWQ8}yeD)-ke5bn&kO)kDf>B;fKK;Rg)yJv#S
zd<_)FUUNGmVqOR_NX13HF?T#tINav<O3F(j%7qh{s-gT70Cb!A#3AMe#zJ)_c*A|*
z-3+F=Y#i8azTqpw>;GNbGQrnvN)SF!9$AxQRPX`dn`eqXbR^FUnxtCXTF1yqF-6Pr
zB at Ne_Q%^*03&%j<!8Wh+G+3IYx#3IU%+l+CIS#8sIRujMc}LFdHgJIYunj=6c%eMG
zgD-}?q-7Axsag%17tn7_##k>kdW7~3l$}kH6R(Gosb<R&E-M|m+(It|jvVJIgnicg
zEZLG}1vv;mMfg6u<MUz<SjMz at ill*wVcv at wD+u<PM+yKg55S44Q3Re|w38ZO9g;7-
zH!GTu_+oLJf_VpzgibIxNZ2 at 2c#dj?YeQDG_Iy7Q at 0fXTHwcMLoA%;KuYZZLl>H3b
zw$!{&#z3|wDC-wgRB?;7)Q4 at m$>~HbX<#B{pzD(LUq&G}Nhs~YWH2FZqHNC#Utd=u
zNm(K{HAZ&*=Z4UW0(RRRT0IcY_J7EpLod4>idNN_<JT!C7aMdll&=?O2gHB8Z=iLS
z=bYRIF8ln2rClR0n6eMsD3jwNEgz^2PATL$dUG6rsKPIxuY*@tv9xKCZ at p>^Ca61e
zO}DPC!5j^mP9yC_zl#efe19!Ivhd=)xV!~Nou6{$WZ60oy9_ICfVFFk^SJ~Lvi0>y
zyMxr2Z8;A2izWBAlW73MO%=>Fe=omXt^d3b+DTJs(!)Ep>4|P|R$j-YIQH1F2U%Wc
zDbBaXP7#kBqCidepocMN%TwMwtuuoA+gh62h;5w-e<g~Q%w#Tmax)Hn%pB~%Ejb?f
zlOVHi8{a_p#Pcp!4SL9q64|6*{sy7w?9`!(2?C>oO*tmP6xa$UA;(*O>8o^XU`- at 9
zndq*qo#bg3Bi^ns8sX*p at l5f__aaOJo&h at kd?IVV1I`AtV=jx`<WT?$*e9jONL*o3
zWcwl@#%E+~5Pt)b4DLT%sxP2b&$t|}h}dbNMQ&I}goVDe6`{Ds|5yj4n2}wjSD%#V
zl%l5dX at Cu`<|2{B39fYZI1(V~)H2tOc*iSwm1Cgq%FFQM5GN5AhfH2(I9fuzxDcRs
zihb8(9Lut#2m7pSXMHowpJ5o9eMC1)o6 at -yu_n)kTE-E8`yqmxk6!KpYVIP(yWY7c
zRba%pziJCFka~BOsi*wLezwXpMtfSh<^)v~s8%ibACl6&NAJ- at v(w&_<S+{F8sj7X
z6_!-NZsa8DO)aOoJLF!B!%uyLZ!BZ1m`J`M*d^4FX+ur&0)ahWE}#9tm)PY9MfTU*
z3<6&av2kj|GLcn~Wvdt~W!&8;u`nc}$>bcjA~b$yREG){!K)_~5Aw)+memMb$$E0+
zh>CgVBI1{C+3X&GO0i_<gcnLO>RFH_sA(38ZxaqPEk&}ru+Go5l`SMsiCMA%uh51c
zn6VIpAXwHcV)TRUasBNA!F(@MBs?^oqrtc at urdnu{0E#S(4|s5tI35sKPtr)7mvHW
zINBZyMqQhi#YA$4<V6%p_w1HmYQ~P*`CxdkuWJK`P4W~(T&3+Rab1-q_i=r5#UCPh
z%$5P>Ng!OV1-h)r(C=}J??~XS`+Gl{VoQLMElzeJkG|>MR*~5jaL9U3=E$<oIpai>
z?%h?BW20grQo|4W at Z(P2O${;K3sv;cKy$C at 8?j;Wc<@9Zq?YcO`-`g{yBko&#Ft=v
z2#~gKsxp(FdnCGgi(R10d=9hBTNpsEN&ZX%Brr{hkKtWFm~v>3`5NM}2p#2?0M}$4
z`ycr>B}-5KrRWRAQHR}#jj?N4EH*zO;z*PqD^Iq7*n}W%b4vYPB_kR7h!~Qo5f9u3
zBRH1SSpd$I>Abk+eO;SODA3E03^>(tUT&>V(Iy^%x8-9ZPJDn*OEIM)mf)ts)k_k_
zg%%D;+=;=r at aFd&yV~EEC at GG=`*nza>&@JDqwr=JI&8KLWC`byS7BaXli!_~=ZN)K
zg_u=iDj^65kyOV;$1TVo;8~CIY*Eg!6X^x{!$tNgl9ORL?8rXdKge#-5brksI)C(I
zuU5{m6 at eG(4*3G`tY_EoUn=N>ZzEC<t9!jryUBeZ#)(t}5Z#`;(e(ItLj#z==O}SF
zk)D-<4Lv-*wcr at 3(1wF<FObnWi$3ecZI{lsWMmhQN%-A(V<)bznsdyOaZlS89eoba
z{uo`>VhB}By$bml$Ho^hRq&SDLKyh2CqE59??JQZPfyj58akmGH*Pwwy_g?^IvpmT
zf}W8cx^h{6kVdZL*+-oR<y2ho!x+x#Ti+BG{jpmn7bt2BFj=~GZ;PNy>i6*@p-{R<
zMNTmUKeU)mBRD~yU({1?G#lItF?<}cgZbKFz02SZ;bYs&QQz2oLn1KIL-1J^n7M%8
zwAyJ}p`&z1B$MkIf8t=|NExNuj1}6GtK(iyquO|;3x%4H7v6N3=w?uzUg`uS2@$!7
z`c~G?q-X}|A%*Xc?604kbliFnIdX92b-wTWn?eCQJoX9S!mU^~`67!z4f%*`!rPa+
z#4;WCva3s}8Qt_o=*Frkskq at ifm3(B2pY2RJyyq^(|B4?ywg-aT#`7KZlVSZc#nIA
z3gTfNy>GmV{I7I)8OdMcR>HrH*%Al0XR5HQf$_pe#bW-?<(C%=Y}TU}(HSgiW at Z_#
zmo!5=x1}A@${qV$pgf?PJsu{1D3DjRiFC=xs&=sAPBkI;K50XMp%J?+)wx>fcE1fQ
z9QM-H8}n-vzX0A2^D|TDO3H|htR+U at e-A$i!A6DY*IQXA at Kg(_2Qa|rNrVMDvc6sJ
zO`~?TCZU_+ at z;B$m5C2MRvBvH7 at e;%>(Hdxf3JmNX(+z72XkBh2D=6!nw53nNDIFq
z`nDBYs#XT_Bg at 6JJ=On%t5INmN=E6fOg98<yL78TyU^LLqGZ9w#1?lZzQ>}7Xa^sj
zK>s()lA}ZjfzjtNB51-|9QEz0)hI)Qd{nFpN912+x-Z;3w$aAn{`fVseQ7*FgW7x2
zG}C=)E!_N|ePyD~i~@eIv>}aV=z^`<`K)^2kE}-iKqe*6U(i^?faTw;?FeuJO}<)8
zq at 290!_1I!N{vdW3lN(J-XgqY%QMXkBLZ$8?3}am(9ahl<Su8%FEZ=tKA!V=F|qAy
ztodaw?UK-a$P6l!YfT(Ll=P0u&T{Nr4Av%%T7mC4|G|_ESLu9+6UWA1H9Y?a($w1?
zWg9q6DR~C?GIzf{0zyv!Ra{QWSc|FsKfhp?!iI3{L|)dPef;H?aU%y?5AT_!wbt2}
z1FQYl_gy)xs0j+3|2%a39>LER!e2yNN9P6yMW_#1a-D-NlVDgudI`?zVQ4jCNIS&V
zcph=EeOD&fa5~ME%IOspg=CjolykCH?#>Is%a%Sv#yMqO*$m|(9~N$YDBMnf64Rh5
zPET2SS3l{Ca^4+X?fYY6rK1=figNcQrOEXnpwi*rN0cB*uerkLlO~^X|72}!AFce8
z5LAGvNgh6(lj2BPL<5GYF|(LY>#f_LFF=Ch5Iya~%B#V4U+rkSINuwHa-SL57c`lN
zVt_9Z5EXI at 5ED@%u_hC(4k_yoNZbT at 6F%6a5u|=sZKyoU^m0kJ93DPyG5t{&mfEjy
zuGW#EXr&;U8+xMj#7h~R5qK~%XWqJM*3g{DzHEbl4dwSG=`}<TIabVIe1t?|AQjvD
z78uj|dIV;TKLKT=>~PbAr~%V^X(WBRCh;_-og1(Fi%1MT>LVEoDZDc!i-{K^&Sq5&
zx~0d*X}uNX5rz5Pps^!(`G)c3(nkHcxb9PbnpSI!C1tUHPj;SA+zmOn$hdDnDwrl3
zL0K)J3-~+NxHHA1gyt_`ERQXsKX$jaUXRZZC}VUj9OMzYIL*F5X#muWA2FcJf!255
zI~-7CY2o$DGsBKA*tmEHa~;`azVr at W95_$zv)V<_rkVwxCNgFa8PU~4Tyd`e0vmU#
zuBAspLVYJNl=+r>R_!M)UJiD=Nt8%n{O(f3yj7)CIq>&vBD+mUDW?nIX^@wQIbGts
z{v}m{1kWT(7flxyrL$o6)*IR+mNc|sqr95R4l!c!7|q{0(-PWDkJiM7kjeW)#7L**
zw41e>?-ra_EUhDaowR-7WW3&Vh<v!IGwW_Aq`Zq45jd%@+?UB at HVAsgOS$i^W|*Pn
z_=@fwh4XsbWa&K^vI0?Vk at +S>TknQn=+jku!ty%2?n9BLwznx1WM~jO>^f<4E?-lJ
zm+)doKlrC-Gww}HjWVOHX^p21wlnRPB1u&f-6qVnk|f9pv#xGDnenif3s}w-l~1xW
zJ`=vHwZyg!1$29M)m^r(T-2{LHSgOcq=V-d6{GFF{vXFJMnjXlVRf3-&OAsR4CR4v
z9ThbhTq6lF$S)Q=2%W74X at S<B at _MW@gohyXM#f_eaxqH!oA<Fu at cHtHD7PM*!4o|G
zS~^bosMC3Oyc)h{MTzP`AZl;?&BLWH4v2y)$rRTur-e<>l7Ob9s}`Wy6kn+jAnG`Z
zrgU<vFI+`AkyhS`-)N_e-)q5;`H&bvn0mP{#8!(L%^ICcY%_#?A7XOPlY<TQv;u)=
z at xEcQ-K}m!;^EfI=PK405RJcc1^NAy-uq=B82`c9;Z|A2YQp)2BCaPpGVF<Wx!JFc
z8|4Np(Q;jSb6+EJYDE;8qrOJ733sgaEpdxGi&U_Qj^$^7;XXO2%cyb2otIfmkJUd~
ziMq!fwWF{&<%=%(2*Va)q$q&C{_Hvq!y$ag)K6hfPKbC0JS4-Dm~z)QER{P&*}bJw
zfHtFa4J6xW=!YUQ5*kbeI{cJ|Xa721gq03QRu_QTnKK!Cc1<Guf2m6E+8-%yCBb<~
z at tDNQlL7dD+$p0{tzI{G9t9V%7St=?^wNIa9 at xy+(2}Rod<}s~a#s~p{RUZ|wQRh5
zs6=6qV9qj^+EKNRxzC2;H=GzhcswmHDm8Au;r}K+c0W|lMQQp}M1!$z%4<}mPW;zP
zBt1rTy at LFT_-i7a_Vf)qb+y|;EtC}tn4t at c@}2A&AEkBOUu~*^<GJ*GBWj!L#mpn6
zbi2mB%BqtP{#FqL_K5u%%BMS#MgvH;%d#l5m#*GV;WEiDf&}Jy at jo?3m?ureKFlsA
zFLwfy<vF7~KKHCEA3)E<;DLY}w3 at NrP5MY)$e=Fx6 at eP;W+%3%nHzUL at Ji-FCbdKv
zXTWbqri4iZ-3pKPBr`z!AdS3?M{O&P8|$jZleN|pN%vxo`iA%?ZLtwYi8Zy4MR9C6
z!zqJ73aOpSNE4WT!QsrS{1 at HT1@_hA9}(hQ{$x8A=a7RX5$|7}($w~~xYU=d%ZOvc
zLI*BmtN-tcGUi%^96~2T1pnTdw8SRw$+zltn2bEK*&sx at mdKWNZFPw<*^Obt at 8MA-
zr4aeVwIn_e<IW<UH%Pm=T4^DLer}YQv&ozHNBnY!@@@5G`^I~jdmQ_ at fM;6Ma|eBX
zVNbwnYN8>Wd>hPAf0S1#oPwKHVRVutf#e%7raA3B@<C+mPgxeeq?2X$(_bj3zez!t
zbUqUVu31r*#8GXXOL7pGG+ at 6L3U^?<HH(tX^1b0+)&WldfZhGwn<L_P3(!yX-`-lR
zV}LJ9J_FQZCO6(+P}%t*awk}MM2mnp;9Ew%5Ms7jmt$NLN<{x}Q^kwHvK*pBm;kou
z<_q%HHVb*t`l*Brh7L~}6)ftb8hwpgF&S~tY~ikLI{`HFfr8QpF=2=btD&ACY9-6j
z{p0G6by|j|c``gzoVid=Q13M$3hO;Ix=8F*%X9);TgJ9 at GN(*4XcBFnj-k^fS*i_M
z5IJb*gc=`qdiEd{$I)M&zaud{P}ehlF>kv0S8|dvRG@)?%2(^Jg;^2sC0vbAfL?3&
zhG!iu7D7rfJn|sh*B~`RlSNMoPPLF!z08bZXNPOY3dS2DMU0eeuly?hkLk#yC=5NX
zlesZS9mqvq+7*8m>5<pJ5~^|W^asKesieEr=ynijy1qp1U6+&Ck5KTs)RmQyzR*@*
zb>z8{L2qC9wjuq1Cg~Aa{Ti+5j)v(AuA}?b6LO$#&mwn*X9AMZ(i~;O*h_E{?=v|T
z>(F?xUGtS?{B{lDm1L9<^a2qDRgme}9D2NFx<AQ{CV~i=up~XQ9-%%~bO!8)^e!y5
zl%jjU7wNOwP1L?RY^pJ?6wgn$X#G}^ktB8-wNRlM^hpuv6x#o=Y$YuHwGB6#gjTbJ
zra02jLm;eNAM{0k*u^pg_x3Xz@#`e;wi!X4VcNf7IkcKRAZHg{@jN{;oBF5dl14>V
z(%I^%Uben8fMW<QrS=k{F7qJ%9$*p0Qj^zY3VWb<eJLRg(4P=q+TrZD3nqw=9$bKK
zb_0 at f0oThh#pSc81`?Tp$Q99BbUKWSq_r<bhr`p;&?8fpAb^=b+Kln%2 at YxSnXl-G
zK9(g0-}lMJ at r`Fboe*2^rEx6qlPXX0@|+1bQ8H%^&=Ma^f=em`I((9M6CIb^sPq9?
z!3uPP>kxXq{j}Q7#7}ESjbL)t1CJGTUsRz8*)AR7{6j<_#b?z3H{SPbIx1g@*wt0I
z_}Gy(h$z&-#k4fF;va6(j<p!`^_T1s*^MH=#!p9$pT<dUYju|YVjItx2I9`iQp%nA
zSoPYLCh4zR9^_0Z@`*L1VbgSlL-;j^P~j6Pfq8=27SiEKzt>H8Mt}9JzVqWTZlG4u
z-ZxdEFDG^p#<#24%PGmq?Y2;b6r$t`&xpIcN~v(G+UX~9OPt$ORvSzf8LaPe+LPu!
zrd=*@O)<A3S>e(dYZK}cXSJ*$SG9B#Eh0m3q9SU!BP63<z><x$abo17Av&J4=RUl;
z34CE3B;sBQfPSp at D1~SNG_~b4I!eM$BW`4BwG1G4;h8F1%CVMdQ_jQ-cDsP*$pKrz
zmXBirV5?*6^>p$yqOB6(k!c4oVuFU)Uo$%7JA1h6Th5J)!hcAm9&!uPC734Y;BX*0
zcd6_~X2|I9-6;9sh2K(Y-$WOLZ*yK=9D{>ZyBj_l{<nVO`GBj`QG*fn!}n}V4bOM1
ztE&b at B2cv74#74$yIVc(*kM36LvAQYF9ibh(|d%^zRF%`N%M0 at x(Ip*VI&h+1mg2*
zL`_EFU-c8~UaVA96jonA^*;kdNPOPMp?ucbeLvpcLwk(wM(tu)hX|ca;53<#l_cHU
zt{oh-8y$|F>ZkA=vEIVh>8n6DDst~0F2AYmcYbBEIo$A- at NlYu!ihdhRRuvpa$`xo
zED4LgCBz#@v(qG{y;gxk<l+)rZ9$~&Ytda-pGS#`$ZPT6?TvLZ3kpF6V;+t>PVRE}
z6U#Borg04n%T2-`ohS{6bqyZ=mL|D+57p>}f*<8A?M}e38Y8a_FOlc|ysQf<IgqLm
zZzg1Cr=h9g>WLK#Z(x4WD-GUmV(Zl$Y6=%aVe=2kHzq|aurF2TBgfcs;j#f~w7JPG
zMRwd&vyhEF>x}Dc<h8?O?SY(1HA`nmO$n!rDdDUI=-1OoZ!%!9PCMPqR>LSr-(8l}
z&{WUC7;nwvv at lof5d}l%fxfmZysV{^Lf-UO0;BD}h~fy1{K62TJPOfwXtdwZaJe#z
zqP3bd8sAxQ5%$W>SAo)`%yv#hpGR_oz8~wd|9uGw@#E-RyHT&d&3uiBUqlclW?Sm}
z!s*p<lO(@<FO$w)ZJ0ypH|5$;1<yZMw{Jh}NYf24Gl#+X_f0L_s-n2Y;!^tP>;(vU
zNR?N at yLg`WI78}j4LmU&IKTiyt^}v!_=GigSJ1-ILDL*F6%tjs_g|EY=F0=FyThZ2
z at VB!dB0#baLQc+DXN;VKUfCbi^*A=+$(uZB%QLUxYkCw>tibyR{);``O5A)oo?`K%
ze|&^DwiR~i@=X<N3HTHA`RtFwGQ?9SN7 at h=jW#vESMiMN{nTU)BwN~CND4ZW0i4uP
zpEo__;KWak0UvqiO_DH!lY!i`KJYHse{UYjp4gty%5FykltOcZ&y{rrThu08Pwm)s
zB<^lg%$W(J3#BXCY-|U=;M2`1uqq?w%V{Kd0xxi1PqCzLyGt-G at VK_f4XvADS8Zng
z;M{jDXADOgO|Gy-6$YqMDL_;4Ncv^@NMR^2B&#!+myvAg%V~h_FZatxtTvExPg!e#
z(1}_AQga*NDcJ~BCa4(2I#Dn^;R)(Ce_zGU`krl9U&EKr3oKEAn4{PPkn#G<7N_iC
zzik|sDM;A%oZyXOVZzl8AnWeC#%fpw-=>wn4N9z)9okh#1-o}}efszo1<4V at A7ni6
znK5A!ZrPzAtuR3@&&3H(o5B(4yg5|U42Zj|vlXU2%giJwcc6z$5LHuJVMZaM;Xr1K
zicfQ$eAsFaS at 1A&XqsLNMGSYN+dC4;VZlgV_O~fgMlk+(Ey3WegnmT^Tcvd&uhp;b
zYk%H{58%a{v67$o!DEHtjfV$`!4CxON!TU0N@!W=^Gqxs4o|n-mDRwo9x^+8CO;P4
z9Uqda1%+oJh|-VO5_BppwYL?Kz>RY_1pRLRh5QFKL;LTfM at 7HWm*;d7+ at aup{p`JS
zUp)2y(5<nbTxqY`1Ql;bl`37!*9-o-;RK)9#ciSV;#RDmYMV*j0E7kt=d2zKDq`i~
zxFsPMIN2eoda!HM7E0UjJye?N8eY%|1qV;SkiP<j%+;BW6|(<X#wm`mH_RS_#(edC
zRA!yksj3OMxB#ApqPJ%eOn;S=Cpiw3VT at aM7TD0%OyaMfejo&M)IplBxmtg?CWfF6
zl93m{B0 at 93LJ^6*37^vi-Q2zAsC&9`c-PxtM?DH0t^aIzwJ^Nr^22sV0go%(2)SZW
zdc9`P0&IQb!<H^%nOmR)zQaU+irE&w59MmN1pHjXhi;rN{4It>WV9PiL_A0%NI-FN
zH^e0!$z6PJhd-Q}yOB4!tEcTy6$g!scp)1~#c?Kc<l#dV)1-*6+yJ#lkVL611V5j|
znaXb2#B+rY;~PJD;m?Zb>f)iooAh|@kS{Kh1$3)1uzUNE<u;jHl^8tiYr{!Kl)G$l
z+O?X*RrEzi(6{<&Q;8NI;}2LIX2~VmK6$~~eny+mGT{z0`<?J(WCcIxgjhECu}xka
zDsrbxdx+l4lnCF0K|w|y<ZaC8&csQK3=!LpY!KXN3mBNSAzIi9sp-Pm5dQ*ADMN$+
zQF?>+d$Wl?`PX$Fq9F_prBM4fy&L?LZ?Uk4_GfsHn<}Rr%*6$daZu at jETmH@3M0+`
z&>b?O3+SaDRi`I%xYGW_4+%27M}u?=yn_37#zi`5n#=tOm8c>%%);b9`8^6r{tVcw
z=L&=C+IMF*1`Sb4kbe;T+Vg>&vHV~*oHmwTlqfQ-Jps8;>_$RHfiZY5(x8m_hgvx6
z_=z5E*Uv(44aR<f)80@&rCHK)<!M(t4N7|V2=1=8K-FctiVy_`;R%lvGv~y)2wv%<
zmY7%@?byD5rh<h|CE5V at 7IB&rb9q<~M{f|JgpjM)%-_Wp%7)lz{8<PV#u+l%bCxH1
z%ysW~iXc8-#D*34-gK|`;5-=L*>- at iBv@b1{lUQq!F`uL3 at d>Lc2`f)2wGl3$%i=m
zE=Zq{<UGaaNF$08g{?nN|H6tleC4-O9^w=Zh at OQ0@28Ic2%hBgD<a|ddX*ztJwKV~
zi9le(cw>s&qr-yO#uWcO3ZvPLhBR#Ap6i7L7qwjgHbF1eyQr$@L6M!>jkW904Rh6a
zEHKyO-eR7cfu~{OvGWW~*j{4&vAai~yJiClrYnlM>@0h>s(+S8Uzp0uHJfi;N{{fG
zME8wd99 at l#Ez3J3?&q#BkgzVxeOk1g9DJp%g?97(<lWs{laTsZ^hj&-udW^iPy+wF
zn__%1C+0?TUi!VCZu`lOE258L_=KRKSTUL(L1&xe8UcJWENOLhnHUw#<Tk35(lgPv
z87#@4d2L#KX;FL(uy7!?!~5v<qfa6XHAx<bX7`LP=l^1LH3;WMTN3Lu)Q`i){X9@?
z4}o&I2KbVA>C1%XIb#~5D at gS0-6VE{gZc<#LB`~Ozh}>^m`wOZ7|U+n)XHGG5A#3q
zjvnrd03TREL&Tp%=wQVF94iR5J4KheS$?)k>_i)rGgui2dm$D}#1E?<UHjx2kXNgE
zLRAn&x`;BmUr;}VEwKFQR{f~g!ZW-JfOadrVr{=2hWL1jvYJi<VIdrXA$iBZT~*>u
zWf0pS26<r++n)R%uC8ql>ucEDWr>;y`v~<tI~R*YQ7xpVe~N$IyFBYze1ziyfJwz*
zx%XL?S+%?IoG?E+0a at _@hcEmM>Mb2{qVq2Us-)>gwh3Vuzt8#sLd<YWGazd6geBNi
z!Ix%z0Y!V4)jRdOHc11AX~(8nA>~1lq-|9<y{)xwd7dU;y5UY30m^vz`WQM_GwcId
zp2ld;R8 at 7jxtW~+O0#wij;XIRvRC$MRZvp;`o>|cf292<<2JilCyW!m0o<&%7HaQm
zKhSqPDGNRb==*zegjVx#FOhrsi^Ya$v;%6B3;2Xbnyva@)#XjLD>a<Ikr3w7G&#W>
zv4f#WbGhWZ&TOt4Q3;~^@rXj at I4G)r%W5Ges;)ZhBN9R4qz?>~ee>C%qAq&-?<AyH
z){`OZk%sjN6lBaa2LkXjp+Q1y9-du4X~mKy_wFx?7aeTjv9Y?WPj5LtObCc|Sc||y
zf=pqj{)Hw};u_Ju@}_pZO(G&{HgXF98b>!yzlvn>w<5S`Mm<cJKHFn%7G4u9iaK_v
z`LTqT_#3p_a$slHR23h8-2w#%Eb}NrRYB^fg^$}W_q!Ud!J3?klrit?jPo9>Fp=5=
zHEdO0Ru1W_VpdTPRN^smI5<i&aL_?8`=*;0c(2VRd$DD%*VlPJ&{*(iNL$zmw-X)(
z^U4zGKX5Ml at HW->;`FAtz9+H%)Y2n6Zd#^`U0Y5zl6qGVqtvE71*SXsZkCS>HovzK
zIz(?n<=|+ko+YwXF at 2SLQ0>tb3Zgzdv5o6YYRVg&;XV1AX*n{Fob3lfnO>x5u?;!p
z6e16GJ at isv>vSehNFV70<V$s7!*|4orRpe1Zo+QT;H2FEDPXActn5E^*2O|Z!~!Z<
z at Q~clI0^>6S}QmyOQoK-uFMAB at c5A$WCLUAU#;UXuYg+^^?wl;eWE&`cD*Lyxt8c;
ziA6wqsDZGiuDC$L7T9Vf4eIaPq7S*51y%6E$yM}D@}+w)l`OU^wTOr?T?G?yY|t1E
zu&j)R8qCLfAkb}Pn&ItCh9qNRj?ip#fZ8E!)sbE;?gcv2yHQ&3uJq3_XnPjr1kx0^
z!`o=4G`2x6$5}zZvS4M*$mCsF1{I+~0f2*G^l2EWy<{Iaj}jy+W`{-j%f3||ta8)m
zKm|3-*vl1U|HCSajoB32Tifj*6X?7q-_2j{?KY)#7OvHyZBP(E;4KGFO}AuW at mFxP
zhvDfy1keYsF@`w>4<mzYV)(mYIB*EleB<?aA)w8CI&3x9R&T&GQ#Xw$gbcA!*8L+f
z at lD5p+wx7G8xRHE^0%@a{#E}_nDQBTn6(d=tH1^&pQf?Pqtv>NEFo8gTY$^ET^P7N
z{N*E7dKfTC(&*_cJn{v~j%Nb&2aLd{t{L+W at 5@=aiT}L!Bj!e-GW;^GI)@@DKe7}y
z$5~=R`y}Yv<q3^EBB};YIsQ$?__2Kib2)NqS5TX1D24dYh++2!M?f=pNQJ;y*bzid
z&U|yvL%jGme3Yc(uMj7)rl?y4^JQN2p)@GZh6q1wHT+Q({E^)vaZp`J<M1;IN at +<_
z{(2#&0(??&PM&qvC4-UCxD9^PnMuX_s|QQ>dxUw8`!(+OWgNy{=Q5O@@R*l*ZjaHL
zS+~PWDMwP?^5w_^w&rXV!NI4SSHylXfq%&;FkcaPI|IgWXy|*-LOHIS7tcLyX-Ud1
zA_lVYdy#sIfd19ZAtZ8SD19c85+n2&&0#ux>jy$qAR4M6LUnMMi)R`s8oou8k43);
zH+bj*VIpHzyk2dJLmjGB at iqXx30yWd`_bdZKgm9+sd&AXkLsQwHxJ;ArO&rB2B~Dq
zHK#3+i=g6LdY6u@^M7_0gn6si5!BfI>bteC at 0s)Y{?p;36Ya3)(BF!{#PLRJI`5J-
z4Y8|Xh;*~7VXB3_kDr!`Uh&VIY|Zmxui6$#_qgzZ?Eswok!Z9 at q1Ujdg4*k^Ry7Vz
z*v46A-coo<TYtBVMdMPaY%FUL%w|Q3qy}e8*8RHirrwcgP|Q#clRFn<9_CY}qP5vk
z9=2P{kx~gV+a9!-iwo|&s=!9#q{{Au9vBt6(IDfP6}l{Mj5MngC+i(PP9hnPmGlI!
zf?I`$yvSCT!LVdHg(_@=&RQXKY6g#YpJ?mgT%<h8{*<=5)8~+I*#@ho(;(RbdbA!K
z1wx}F31^d}U0M}Fc;HyjYzU{vt~2}IQZIa+{|G?vA<<$O$Eda{Zr!;Q?s_L$y5TN(
z+8UgLn#b*3Qt&OH$2Gn;^=&X4;Uu1sT|ZcDdNj=lqJ7d1e@|gqMkHlAgJs5wBx3gD
zvL>YUIFn`(3QWDfwh(TSZ9x$pAGyxJIa&!JN-+y=y2A02pkN23=f$G-9%VBRg=gIv
z3eXD6cQAbVJOy%p(w2+jgiWeuwx{Wvs1!%4JQh0Mi;$+V|23GTUO1t2RAXV_+RxJf
z14X+(EI|goZr!ncK^&5s0L?NrF@!x;V_KDhmMf{>usZIb_T=3DAH=2)B2NDq1i`Cl
zA1^Xja;6rqOr3~QdvQ%56qFs}6vYGU=RsokoBOrEIDoe{zPvfE3QXDAZ!SO43~P0(
zH5lm~RY|k+K*G5|kZ&#LYf)(WM5AuhviPSS8|Z{n$bu>(`{KtY#O3ZiVGhockF(HY
z!m;mRBN*8qf*z~qC)~#ENMH)ZI{j~(K7=lpF>#k?h-wda=OkoQuEzw5upb_ho9P7i
zB|^Xomr?&{R6paDKIp<B`<po*ofgGX)pB{K_8AP8tBh}$18j4~@7gXOTj))^DE%9T
zN`ycP6V~5|c at m!+U2gyU+1NM4NVcLMH#a#He>z}BxXw<sf<9rDHC3QXcJh`;1%G~;
z8r7>Y at 3gbS`r!uIiR!`n!py|(Pz->@m}}itWceg8JQW&KKcaN|yO0Sbb3eSgwB99`
zX6DQ8nOu8T2=YnMfM~R?_VX!2T$yw7OXk>?yZbGE7<l<~9mnmd&3mdJJfo$e0MIOu
zP?%!IDwY~z1&n;>{;ZRO59UUB^8$swA_|K*+?w~$tYDF95EqyZX5p9S!FM0r^c#BM
zn+|C|M|&S(w}HOPWnOSMZi^+GEV<HdJLZ`=GwF2Td>-Xvha at ML9~g<5p*FwGsCMHH
zd|diqf)Y3#qM)^u2$+i&bZvMkn(3&pkA<B%9oSNbGndYq;oS|M%0Ed&Kw&2GoUT+d
zEps}AeQ31!oV`D$IgTEHWAlJFbCCJ!hF8A*q*6i5^F#gee5DH`e>)JemxbH_lz{Rc
zcSZIorQ0%>gZw=UvXg%W6r2h%xSJTt^`&bwBF~N;hyA8`62+~*vSXSt<4+}dQZqv~
z=a-BIS%*B_PZ`43l>N at MPUUWxH13ay1O;On_Ufvn6 at P=G?DTviqI|N|&g?rVk;hr$
zC at lec7)cq>1ht3cBN|(+Sc2)hWbxWC!MJkM4cq;;^Shk{+ at Po~7EytXT?Jq?rro#a
zGntztZq(}r(LUJ%<tDC^M`yDfw at u+xszvwP;pG35iSL$Ej)hC_4|h#vj&LCCdm1l?
zl+N=5S(?Yn3z-2GOFa-1TIPMNCn3(H9z9Cy<KzJQg}LCuB0K)c-K3h*@Rd)8;xE{J
zhxUNl3*B}rEv6CE;1c34M>h(+1M+|gO1cWCT$!_{$B7F6!S%+(kMwQP=kM2APq-V0
zDva&_LP8}Uh`d5KqLOu92QY)~*~8L1`)P43HzMDUZ3%B2AM#AK*{MRNsTCI?sRNln
zLa!^tyg}3jg&W>`K*=`&meLj}Z|41W3jU)fxxyX1%-gJyeWLElE2N_A3UZ~n)%Iz?
z>CMV*f$Loc8cmdSlm$(zE_)B%och-ik-_%IsKdCncm&{Pc&uw at 5H5u*{m0G<le1~h
zox$`cXrT(Tzx&xBf3Rqw-oJLTS{^)0Gk8mF`Jey1pt?zQXt96+^_OclL8}5O at U-ut
z5`i59lAhH{hVD?ll|px%h~{!E)-^;FO1m-6uj{Uxr2tS>y2XDHZBCg5U<X7o at cQ;R
zWmLl<pl!5<milLO_IieU#UXGf4kWd_(-2aQ*<dXY27!py?q|&}yb1P*r<;CD2DW2~
zd{QQ1!p-E$-N7yKOJ#B~*3Taby|n$^^JZ9?&Lz)!P*(Ii*%25xj8SU=Je?vD+rtJu
zeDQJctDA`Rj_OOOauxpFXA)jC at obO30Ij8i0WAEd-ngjS32WJvq$ixSbMp&_V92Wn
z$&vwvJWL`SyE;B>R8^jNKYenai6$(o^|FPLHDwQ|eq4<LiY6`%NYlXQJRDBqwo3un
zIy!Cau}&TkG$gMcOPUX*pZ3Oz-3Fk*Ku^ylFc^WCbZa0%i at rgHa2H`GA?D~V$7_(_
z1wG?_CcNi)Ct}wl0+89ogFvx<`@Z- at r^IP0ptOncrvR_$ytsWvL_T2 at h7@)ShgDb>
z4?7t4Cktp?j(1~S`uOq;{_EiBpSfBk_cmaH8sdUVHd$Pa!5*QY1g+6*388Fyir1tJ
zykoZOuwqVblh>SGvz71<ckam1xGYBSy!pp#7p21&9P+HLFt|-&+WbjYce=n}fW;dD
zKW#Ei{Bf*gP>mn)j#;8)e~L<`WH7SkL0$h`)cD?AL87*V<aKwipyYbtgU7`Dk_3HZ
z5iBQfLj>Z6B0<{=%@(_{V?kTKoI1sdsUz|aQC)_zA_q>yW;l6igGj%7J~_#FSbIEe
zftoZ&?-?{8#)FucP$Ew6R1%W?sKQlqRQ8Q&R3Y;@Nc!zVP`p;diE<f$gtw;{1`q7u
zo_zIe9 at q9O26KG_lY>vH(E6~v_C%^qt2v8!xnPlX5>|d4S%2v+Nu5o>%G-c7bt=VJ
zqgZVfAJf at nXT6}=UJKzG;GTb|=3xuLx<zg*B1v=3-DIGVNsx_7GmxQ=U(Tkf?}kvQ
z+A?r?F1uhftY(;X`wKvSa1S}U{vj>ifEmTbUEyNEnuBQeG&g05st_^%u;@Z{u9eEV
zpju`5SWj?$#?nCs|4ykQn{CMr6-WMyupUql{?3DCNNA4E6QtxcUvP67&<0p{A#a5l
z9P&|EfezSf4<g!9o~Ol>3cx_*)nKg)j<t8=S*v&el|N*R&QEJ^!y>aq?+i)t&`XBl
z*!2%=@|h+2p2a3Zm*XGaE>xTC-UibryN%J2X at at!77~xH2i=PGVXO0MUQ$8}*Ft;O
zU)JOJOxAHtGGMh~b at n2d<;|x{s9dGu&eCStR!M`C_y5t$3Y0qB9po_w_D)J0q(!}E
zl-^*|hf&`j#uH>7{vM4I4<-__g-b63NlHxkY4r!nh2n};O*NKH`UpE7LR`%^D~cww
z%jEF8sTB5K9KVty;(hn+3PYFDn3Oh{!=((Dn(e)QlsUS*@K5L8>^(Nn>!Rbr`q^Wa
z{U>$iMkZ`=m5m!|bJ#(Q!imr(8RtA9H129`M|)$J>z6pY at c&{544=jjj~z8jhX at q=
z3!u+{KW4*t(yJCT)pEFW!{%g#B^BKYkf4UH8kY+;Kh-Y<9So5G5`31~jQI8Wsl?_}
zJ*=37`#cs(zH+txYVM6e+zcg$SNyl55B><;%si;C(fA9d9S~<0RN~Q&<B=g3wj^Q8
zplUrKB at L1r8;yB;q9uAR+9sqA;sZ{Hw&|pR%1Uz*w~TBq+XYg~Jc{BHCvzFCv%{J0
zGPkK)U1xfQV-1Y4sV0+meYjzjUB8(aBUes<kVfhHIx-oTbWQ#YCIcvz+N+;^UUK{G
zL+2c+zE}!t8IASk<uE4VlyB at ml==>Yb**m2394z!qjVw%yrMK3K1d5*ri%YUVGyKI
zA8q?ZBv~H%3?39S(CSo^9X?6^JcB#Qxv#YiHziG)VL|AyE`<V$XHaR^8f~u<A+RRi
zPJCWJK;r9UrrQ_Aytv;}yF^b;^xRmKu>5$7z1_zjLZS{z?v?1PZByqmonwzYy>O5i
z at z*BF#FLt~R~FzYLrqGjv+Vu4w`l3HxxT!CGOjJ7$P13mM%N=r7UsSI&zlC%fnb2p
zI(XNom%mwSp)(8Wkzcsc)cn&J=hDQ4-)s-O7xt&H>tKSH2|<T|i8}7M<%D6(3dehc
z^#-8tsBLtZJRm%>B<;1_U05}hXOHrA+wxI?KC8ME-;`)P?oXO{3!t{iXF(Y4yeHuK
zIzZM^^Xm)fxi5)oK at PQKbY*eecbmq5H&w2X^TG~tb0UFe_^;ZbrjQcUt8aRYuc=h5
z6&9&cN1e~RTkQWbr=<1TlWoxs3@;$Px#}fJlEUW5r+BRmoA2+m;PN<ceEw|v5Jrex
zaT<wF<hsaBEa8Hn<tlor86S41Q&#yXy0D;=o_y3G at 5*oZu%~2QG9P~FMNw_|Tbr5R
z+%L=bg#ht)gNt1BR7n{F+h}a~bPk6p5p#5hc05rKVT5m9SP>9FYqVb*`|Zl^&k!x*
z_hylI2=N at _li;~c+?ms;kBI}WcWQwgi1~Ss>;l-{sR-c=U*R$41?nZ7?9cd#PPx=9
zA_%_P{2e44+ at d~Gq at dN-_h@Qdy at GHSwVm5FZo;fhZ<{(HFne%vH4_o-1Leob&cAMp
zfp{rx40|{YX!}Sa8#-Q(yX&d~A*V*9ig9wQP>(Lope^f`0y1*qXm(w;pt}H$YH<+z
z<>=iYc}AAruMe8H3ID6b5glKANp4dom$^Vk_jU^@R9k?zKvsSp{--_^Yyqj-E3-~W
z4G6`%^=2ENc5K^+A at Q!_^_9GwRBEfoBdzaQ?(@t%`q_-Z<TB13*nJ+)CDOmtP?ku}
zkA5!hO#U_kefu$z4H!$%Te{9`4xw~1krpC_eW2!=J6u1CsR8o$SDz7xh2Yd{8}<#l
zd_9<$kx%#!fD}p`VfWAsj*hFj$6J*5qlb at x9O{mjgd*e=TiSEuw!bgs?$gsAZqpXL
zvIiJSaRrr!bNq?*93P}iJag^YC3>SaIZ4t at 6O5PByIVHy)QG!8zXMk`;oeq-olWsK
zk4_qKpn|z8YqCxOm*>GWGK$8>#p=cep)TgmpE&j6+7?y#Z}pZ603BQ#01e+|Sk_4`
z#z#LomDsf544-Fc$v(<9k-XZ5QOoH}7IT=-`h7WdQLHpi42WbNWV)GN-!*F$2kXX5
zla8O@(H==|u&^-w7DA at A480`(M0psGV at EEniOy^AsroVi3-Z&=M~i2_H-wPA+T!&}
zV at Ts`rAM~{D-v3kR*PuM|7&rX_3 at wRzI;XM04|LRvIXRq+7EN&+L#A5X(Wl;ul~>>
zpEs)@xVU5Mg{HX$KWk at pFAm&hge&6C4sD3F<?*yUf+E<o=ctrq at z3058c9+g`uN_k
zM~^~=fbQMqG%wvmu7wkl)$$sXy-j3sEZv><(+;D9c7_NBzE}|YmX0ZmVY3tuhNHO_
zIdh>Jb6fadV7RmQ7`@V2Z%y|@7_x_U(a(|XD&V2=WIzjR{2zS at GnRXe@=Y(8oKH9+
zs=vZGNwQh8E1ev`z>tr}Yift*Q9OE%OlhpMFpJ5FCxg_92P*A-6nOyjN!KQ$->?k6
z#j)U4T<AB~W3tutoUniEUHYeVda*_2=D;&Cwxdz3jX&A9Vb2S@%86Uz`U`}w)H- at 6
zF#rg>03XZ)fvi-v6tk~~3y9tL>v^d`+}FHMg-ANgS!X-*dj0WiBJ~}BjJq_08=1^s
z^Ewnfr?tr7?W);3JfzH_yI1HJb4)k+l#*XgN#nk4G=nv$GV*&{=1?Iu(V^oc%lkBs
z)xen)1Oq(rO#0P-hH6`o3Y!msJ6}ePhlE+R*46yV+{MNsZWiIat~9ab7;X#L$r`h2
zgAnuX92p>G&ui!<hR6;~(p$F!rAw!MZQS>WMeznz6 at x;I4nLhJ(|Mh)JQAV~MmnAr
z9cy0NV4oanyE|W^lPbc^nSXin^s{B<?)}h>>%h%&{6DkJ>mSvDWUUvR2MoYwG74VT
zVlR7N^PajE95pHa^Lylf5q|zdwK}PNi^8Hnnt1f(P~CL9uLo+%xh|B0?Lt=i)EFAT
z7%ef1%T!TqoTHEtH&-WMmE|U6#yEXBd|(MBj^8g(r0j at KZC|fW)@YUrho at O=;AVl6
z-zQ|*b^BN7`y at Q#0yX$UBARse&C|84In5i+6LxF2Y8SFRb7DDOg at OMSUioaqQmI4N
zH|oEI?OsVmLS)I>x7E!O!1XHs?b}AHD3bH)en)BSxt|C=m^8Dv^G<mX?s%18M%<$j
zy*Dx_O|nl&OLuje9oIH at D@(Bney}8c6}PMGdE5%ycL%+`HuAo~|H7+BrD8H-RW{wX
zkLy6^eHyM^&Pxy8Y=@oCZw;F{0KvH|SPVUol*wx6(m3Dly6b(5=-Na~FWIXp)cyrb
zYxK^TBvGUsB&jUy`+-b<h%_-CT2%f6id{4rGHg*9I<s=BAw+nQfRWBX*D=6~*LPep
zmjw~vB>L$)Hj7gKi`0`}$4cAmoJ3nrri~84=VHA1`ZNdwU(uWIJG-WxMTw?d>lFJ9
zkBuvmWvv#Qj=Vn?2%iCKBZt(u-|Kn3Q@^wZ_58Rs{t?p)9RVS#;N$HHQllQ`sAC@$
zDyfm$Le#|Ul|)dQ6ujX5;BF^LQP<oG0bFn=4hl;6M4L%UdIh;Mi^-o#7sX%R^F+Q8
zPX`t%1GC{}Z=_YBF{hYBVDJ_8CE84lMY{lHhe#fy_yUi<yVZd33wJAaU&DuFH{O;;
z4bc*C-l0U&{!mA&a&ANn`MSaWuxRvQ$mG$jFb1th)<7|?C89EXOJlyvGN-q)C at T0=
zjGwAjURI*>kNsyI^YJN+>;ZXMw!ub+;}UmR*H3u$|J+oPgS0`H3`dCJvPp*yX7B9*
z6 at 3VL@Zt9!2b^rV`twTx<|e8G{1{6BckCgM&zG at IP@iC4))@PWW!1bmp#0>xQ8!C-
z%SQa at k~HRqg{fCksJ^!8NKFnTAJxSQ83Pc(3Ue_b!PW3`&K at F;_2;y)AEE1ag2V<E
z!wD3IBg65?&u4v7{CIKs`m7girvjW7VbaB+ISWVI`~gPK6KpbAqR3nO5}BnpJq|5c
zpHP2Z?lYCFDSEpw&bM1$0Mq|_U^5Eku~8+Z{mp-TILOuZT=zX35bG!ZyjCvKX{KKG
zD6Ua$XHb16x_eTd)t|-vg($`-mY1hC#NINPvF66KC9F*yEvKF=Nld&s(rkR=pd^%3
zW@|A*F^K&=41YUn&@T4WI at QFifDIpwXN>SyKR#%_+h`NJ+4I6p?@l~^cfbr$A*MyA
zs9q{^%l at SBX-|IdlD`&jOily6S8!*nVHko7)8!B7vKb&tn5<>JT$!ClVdIe+7h^#e
zSc*VaUQ(&PY5AM8Xy~7TTvcL<E_`NF{jcoOQfA?%KIQ%Y83j};XZ8kRN${{9y00{%
zj(l9`-sW}Dnu_KIYRv+ROL!oJ<Prz0lDxk1Urv-<VPITP1u5+CN~oq2SqLR)CIc1_
z9y=cwFNLH>hQH86Ulm?WC2WOjFy-Ibmv~{j5Xqu(;_k47JxwONsOJNwD-}ysaTKiu
zwlGkDKORZ4#Kk!AI*h~a&A?~8V06-SiK38dF*a7TgFPT at 2^#^ksqjZs0u*5Ua%x|f
ze>^+qyi2O0A21YO>1a7}?gRHBF_ at Y2-f&M=>4gT9qXk at Bm&BXKVUWe8ilU<xgFgaf
z>Ni85M`czNx4_Kh>IKfzp7v&|ckw;Wxc_e<p_M7|)%<e`J<GM*QHeOs?1S at S7n3n(
zi7s~>#hbsI8`XIFTcXt?&PkU at zeuOx4DZ_2h=j_e1{6LF%LsopNLi*;>_5V#Z8uF*
z_+PeWJhdQAGLN*a!zC?|EVud`#u>;Ts*Zyx$k9}qxwEU#E*geDPzov)x8P}ugbjA)
zKHNnZlKD7{q&>D749!y6t`xbHvi~x4+NYf>vd;&9OW)fOW*&)>^tf}W_`>NdKX$oz
z?){x`T4fm%f=9WB>rCKGhYP%(?J#NkSM5D#6yW-)kRXbfA@|Mw_;_z2=e$pK+d5*7
zSaJqKST~Z<7!ZRi+eX3_swifQa1601&^~C`bMk3a-%twkn;nF|w;oZp-4!1XyMtO&
zfZ_u;+!xI;Nr8&rXX+knRRjmVi5+Hm?O$|0gT#elMF%KBbtZ-#cpdf!wbLOe(kH*E
z2oxA};(ZSRa0qVMBBHYn<F%PJ&?H^f<!CwrDd5VqUpfRLtQL7>z{Ne#$IRTS<pbq5
z_lpr5L;1>)L)t`5n)~${?6tP`?(l)d$w46`ER$vn!t3kZYPpZCJrmtgv#F2C6Tftq
zbWB5WH+tudE{%Y$9KLx1D#90?=hY<V`hI)bX_Fc7sW-nX_V#ZU;+q=3)Cod1rY9oJ
z=puX8s_~}ct*|KV1~np_Ln2Tbp9C%D$SAo7C0R}Tx)?tXoi3%i4aYl4=yp?Dk}lID
z;wrc=frwG?Pi3S{y^an{#%M{T$PxAt<Zkh-ZZd2?8M9NHa3P*&30X>O{;_P?Y0H&g
zf61SX%P-??{T;WV^?)f<3lMf%c9 at C8K7!z;y0-p{0PJ8~w`s#O*&%n?COpN#y<6hQ
zGBL;JzDk(Bou?Bpq59}2xag!**TWtsYo?(6<6KEfiRXqQT7O)gd{~}FbjE>d*ld+?
zu)`v%WwB$WIFZDeE_02egI4O&FD3D>U(B?WDq-1tL*!8y=_eTD(HZ87XcfNRaIBK&
zOXke^)epT_{<<RL-rEq{W?yf+TP##Ys<cW}WS at Mvs)$!qIhVSNqn}tT-w}geY=|#E
zU2hY|Ni<{okL3GXR>a!+e7Y2vWnE$i<@hD$8G4N+mSRbPJbPqNWZwbHCd4nf<OFgB
z%jd!F=t>HuB^=-QZ<uJZ9*##J>YaeMmtZ^l$0`)7)Y;B_*S7Twkf{teziKxIkzA2K
zk_-&v)*(1Cjig(w%fJnUxn|9W8rQpfCuTd+9fbUAOYQBs|Hqt;8=^#D-46oL=`o!V
zCoPC96VpP6uOp^JA3n at YtV?ABM-5^lxGa5I$ii7~a#{kJtQa(4Zb%mj`YQ$qhBsen
z<=)~$l|#UzTs|})tAH8 at dVm$eE+WnO<3VU(f~8a0(yc$>_t!FG(c$mYd1FrmXA at TD
zTXG%%?aH1T8E`4`rV6|=FAF?Gy49ylE4QVDh?q4lJcl$2$GHa>r$q%CMIb^E<FL-m
z?^d~}O+f0<@G{kq(PCVw171$-DR_~*lHnHZN!2<gIzwLE41_tz!*e<mdYz|qz at d#O
z`<#S3koE^HP&r#Z&16kNo%<thwJF4yFy8D&LIkLo9!NH=0j3dMLj`?gMic-*K)=7y
z at 3>Yyed_=?O`q+G5)PW9?HEpdnpS*iK!ur*y6+cFZFcHo at xb94ULdQp5VC`O0u=?T
zP(zV|r<9a!X-$kfP-13jCk&MrME1i`1b`aBPw^vtl>@x!3zfU1!F$$d?)^dJ24+$v
zj{sz_j{EvKzUJ+#oVLp5MbloO&?`y~gU21~mnBU8x<t>W(n8$(dV0bqw(^jhR?=xD
zKcxf>*9w=`s^z8$`++;{^asN{JJ+LrqCS_;dsKSZ_yc{NXh%}lW&N&nR+iAl->J~o
zM9U*+2>e7=1lANTE>A}fd>}w`&|T6`-UtIO+>M-gT3h&q!OnV>KzFsQnkb<O0wSNL
z!F>6zjL|al-Tg3$vCJE%s?b)y&a~@9 at ic2jC>NOoSqK%5;kA^<e~OSxPet^XO)+%3
zeF<Z|GDk{$StChW49q;|`{1J-c7R3KpFt6XWSR})G3v}wiylyI1~-U)b_b7$?UCW>
zsP~ALiVM*<KW{}mGS at G|rQl3dke0!c*XDL2tbP??+K%`RUNW}=Z+71O-0TwM?Xn&g
zRSSqI at piHr(h|;j%&Mr)iO-suN&M-8T(rq23TT^f9Ja#o!SIsjP*X%yA{p(Cri!VE
zzvT0fZe!<*)M!+!QQ~BTk4~xf)*Ti99BYO8`br`R{IbVltc)V-=)Nxe`6=ETHX&R$
zXrMTHuahouhtUN6JH#yn at OAoMB|$>3y9M$t(;hVs5m;tHGQO9h5(P^~mC?%PX|Rd-
zAdCKzA$S_nMW3$=`;}}AtL(q#V!t+nET7l_Nl4UhTpJ1VeI*Ba^2z|nC8#<h+B^#9
z at 6n;g#}4XKI&Yzy+h^Jk0d*(EBgJ3xlqaRA><h4XrrxgO^1<wBbJWC1NX=yU!%<iW
zFtfQLPw at btRFc!PuIwKVNSt4cq_;}%Wm{F}vhI~g(P}tfQuuzz%RpsgAip1V+bV!K
zWqn7f>>c7Kd2DzSM_I-aZb*XeL$t4NA>kKMi<gR*r?`tvj%lxzjsF(}$m<7}Jy!SR
zS{zAP8ZZh_n6D#cX#iUxW*?55Ur-8R8{R31xyVj8p++9Fp0FEO5P_02{A5{vV;_)C
zBX+sJ_$uSWXim(Uy8C7hn$e~+G3K>A6~ve=&$JftRjJC+EWWnGifd8%nYifbu9e|V
zvxB6Cwi6(02hN2T4i9Q3S_dt4nMz8C2sF8U-Cavt_9w!@_z at BsgQyW(A7rP}@fI>S
z|2g~~faE+PpisXsg}~hpS;XbJXbv}_rD4-j3qaYTEkg*#b4AS=K3E|W+;Koq at 8Flz
z5Ovr@(;P9*9d$21(HoPoQ1 at p$V`Cgl`YZB*!Q9Va1(FfFRR5$W$Iv#?RCH70+lx=a
zEFr8z)LwMLaRkezv~zB%C?Be>Pt`X6Q)HY<uWc&Yj(S~=LQHYhCzRebH|>D%H9t4W
zQx9R6b+&{1NbBn9&=y+wHhQ!KE`siJV8oAxE7-PCp#??2U}YK3Q9(#n4hrCuDq4$i
zj<lwrTd}J`<3l(GJMWYr2t1`38YvuaKrFqK-gRjBKRr&U>{fz<INpE=R?u(n!l^3s
z`wd*Ci4hmi6DSmatXwF#pY7kgNhnMjsb9>N^zTDtH1wzD*w5;`nCQHlb0yAb|02n1
zi{0R&IE9iR`bDAT6UovV)GMB!^fRy*Fp>0nfdZIRC$`$?Vc+kBgo*`E2Ex0-P+vh6
zix9!N*DQ&;as1 at cmzkwfu{B0vY4-!f2)pF1(dp``^o0-6;O2a5#-Q~^(AyI#pm5rP
z{{KU at Sq&X~Ap7fFAZ<AQzGhW8G!|kxK&#0ahK*$B&g_zwUW6h~W0H2w)1$W4 at y<u4
zsv|bcu*Uxgi>zV(yMITTDs6*9`@?I-q{{cHo_XI%^@<VJu@=;&|2Y at s8>qmKr>2i*
zBv+tma5M-w<7dJ$d>ZJVPiP)bNyh8F>F}h3;alaqiti8FPN7_{1Ad~$w+=JB%4sq)
zCSY&7WNVB3h9b;b8CnSzx+Er?#Iq#~xioY?^&WQ<=~;HHg&xSiV=J!U9hKQGZRO at m
zII?F*B#(Dau7jbG1*tndfnFO<5V3mm-7nIFFw~!;U8Qi_G8PlPC at xoXJ81-a3IyH1
zgUTdjmF08DR)Gs}qrll}0#f6+!k>5fqW_l5g-hcE_r7Y<THzQ?R}7^wdQc~_dW-?t
zK_om<fpn?ctv{A;o-rV!C{ET|t=)F~bV=S*0LS1N>h at 14#Ex_`z1U;jP*fg%MEJ32
z+zvd at xGV`h!y}o_C7uq_aTAL6NJx0c(+FHO*x$R*kQ;oPWvB&oH0>}>ts2W#+Z5KV
z_{<`0pN<#_17jUFjLC2aah5fl>fctWP8z{4G- at ep(Bk<=BB3&o at m7lwRw2Al{rl^;
zPZZg^YU2Td`X(dd%TjDC=tTbw(d33(6fbiEp>PqHJ1V*Ab%Bv=+&K0cru<PdL?*^Q
zs$XuLcJ}HA`~QXv*RX8}*IMpj$A)rzJZ8FllsuvUFW3p at g?0P0JZ-34mMWnsY15n_
zSoIp}L{3;XZhCXWo$ci<JA;R2l}3Y8$4p2V^3T$gg4c|w(%9b&k%`3+9-!Z7n>-tY
zPyCr~zUu9VIpl3_T_#k|ZlaUQhKUd8_Z|FL&>*1$i4Sx(jMb50>nmbUxhd%(j|xz$
zxZtrD<5I`1ns;x=Lezvmw{T-D14zbtGlz5H133L5AEskp<*M$`n}(jhDL22`Yj#p7
zS>OQ0(5jHwHG}UCr$0Je9u3?0z!)bw<%SBbfCJYJbb?wS=RVuF?v+)b(aJkBk2I!n
zRs=CuW(hTIIN`*wX_`e>Gsq=kG6ctURwf68;J~7A#-?(5__tQth8m};1k)H^i2^7+
zsu0(ISdBVs;*Y5oxJ43sBo^TyMQB at Kzezj87Gcox&<=#E730 at l`n3I&TQ?1=;=bMK
zxE{o at Y5z@z3~iV~sR|<bEFy>-lG=In?!R}bN_snxSNHYAzcookmqnnC9<kg#<^SF@
z<>QW7DIGy(313%gwi(RLf`8*@4LHR#nP=-*L`sNARk?WB%W)PHJVqBur{KZW{^6{s
z#_7hpUyUvpJhWXXd4;#Cmc(%5i{XHr2827DWGK)U-iw3Tnn|YZ=p<+QSoOM9|Ilux
z&HOnwH0oOy>usG2(@$ymsE>qien at Y`fF%czmSWToGT5VMmFOFbSJOEsqtcvt0f7Zc
zL!|7Y?JI{IniV!s6tjI(I9O$rTBUyB<XB~!{8#J^+(IRnnbeGVMfn+YVGWH=fpc^K
zeI5)xmenJ61>lzTWHD0d)3VI~`rBqE at Dg^GLP8&0=YiH<h4gKUNpe$^d~OUN&YB}X
zrJpn$DEd%$qCY}_r20-co7muE{0Gvp{Fx5%LLeq|VGB3aD?f|EtvG!x$RD#R-sJ{>
zNVCNnNyLX-%+mApC7cYFI^@+zLU&A_sd_KP70v4aZ=_z3{Djy&#fj>gx(8TMb7u_D
zsOSu4oW(eT2x(Zpme_NgdUbkcsytV>_mh1oTbqNK+LgEeIYCOhJp(%Y1jn?{JbA^h
zkV5QNng#Fed|YVFkStHv6acnZRZ4LYTm%Eo*Q~T}?+h;RFTF{@XjevONe$-2Mxo9!
zzmW`@nbN!*z1C6bfTGTB*CHqKf(vqKvCc^Uhh9!y%&@<9(NZnkN)@fm2jDr^HxPZa
z>^|#3#b4sO^Hq<k|25#6)r=l539b1Dg$y(cr2!}MDRBudDb!Ac#&`clagfnpCU#R;
zhJrWAxN$Ji(d?oP8bWf_;Y{!^D%2rU^%HLZ0t#EA1X7ei!UnGP!meT>@_X~a5$gxv
z>vycURxA at ziTlq934GzVb+14r7j!_Z^9tx+r-Q<L3?Z7bEm~XE$vF1H><}ajzGV#A
z)pE)~FD6uav<aYep;lqiy5Kv{J285zRJFdQ<;ep(+`<-MZh9A+3)#hfJZ`nvtzy_E
z7Dq8cHU8x=wtugjG72&AlRNJvC%vrXukNTnH5p at IXA8DcMmRZNExd;Zuh$DrFeXAP
zCe|dk7Z=3Mw$wb$Rs=!=c~?u~YyKsVyKU<2VnSp>tpr at Kk;Y5NAut;AenW?S2t{5u
zC^J%7x{U^0p4JV~<7NlKR|6jAsN+F#ZXTCX0Pi?<w7- at P{xe_5<5Uf;4#{}LKYyUn
z5#^?vpR9Jn3)XD1@)V=tt%0Pl{b}EX6r-t-KY8t at 9*hmmFXXQIzQ=jy>b4uR3!J{Z
z38->J$%4D;)2YIjYmY(liRpXAhs{E&Jm0R5Z7NU3Rv-pTvcs~NGPGLJ=HiY7<sYJk
zT$===vGfos``21G=;GP^E)i=o*^i~b6CKzJdtiylH7ANCS=@5%41;~<T&jRQw-SsB
zoAce2xvUfdf-#OagF5=(v}|dxlyyAQo6|G||7 at Qohe8#lk|f`%3T6r%L<2SFV^&)d
zDXWXz4?1z06{+Z?$OesHN)`*?9LL?qRF&KzJxvpud)*e!5JHZ($%|D8&6{%Zu05|T
zXHtyd%r0&@N1&YiUz?{-p1#LXDtZm%E)G44u2EFkDOfa>WHy=5!`IMmWC~P|n{rLk
zMrC*b^ZSmREw7#R{d9R6FblC2UKumo_NX+l?H%}TLZ^dL9FWns9QKi;Y4)PO9I1U1
zEZbjqGzi2asT8QhgW+XZFnis}XQm)KOG7)m1rBv9C7TN%UBacP!ev~M?^nSs!V{95
zRM=6!9DqSg*+T^Y&nmegKksXk%el?=EPeS$Tf{(m6Y at ev(k&e>3}^#`D<*Z!U|jts
z32%s0Um^QGgv~QJQBJ+Md8kVZ$z6%4q_^V9K_qk$_6{{++U9eFBqMP)>*J-(6!Yly
z_(Q+3C_~4Wt}SslWcEjJg7J#Q$__ZisCmwSChQE}A)0>-I1!wz_!$s~!#->9F>o at 6
zADUwst`D5Z5x+fHMr4UnXd1kicz9Fv20UE>b*suDV^sqAhEXDmL2)TRFZ0-*lT&JC
z3SryY!->)=9w}YQz)u+*!s3fWHq+ND$hPou4{rVH2F{NU64l_~3FF2ZKdPwXH!WC8
zAjMVN_R^pM_7%@oPhO|X?f8KPGV_RSZaY17OwC|+Q;*pAVJx`%ulPbcbF)dCZoXt@
zqELwd-8yLhbIGn>e)*aG(4UQRgo)w2TkBF$N)Dg;_|t78Xm at TPBE@L|PZFU97BH9Z
zeDA&v!cyhLK_$7&$jMVa9H at ss4v7PGc(eXHN+m#<SbB^~+R8gJM`5)nV}XCCh%!<C
zo4?B9BcGwSd}|W5w?-- at QOl^cU@<{fk2)yCPLA75tf+_rl7x|g*sDfT?$5dp?a9ur
zdLK)U9}nnVyxq)TBldH_xk5h>8gO>^O~l867GKY_3_a07zUS3mzgfGZ_jEhr*eqt3
z77eZZPVlYOdXW=FCLTM6WB9Ep8SJy$91F%5 at GnU`<SN`JryfjG3^*Z-LxjYvdH1Wo
z5C5iNusx^OSmkM?(S5>MIH}f`o{q=&s7IY<*QDv{^r-%UHl$}fmY_><Tvff8JO?`4
ztD-yk66kN;@Ku7}z+0o+NH+%Gh#O=l9sjT&o{fV0DUaXeqIrkLzpMzDk))vD_juC&
zWIc<BYVHm2;@0zPt2LZGa<->bRw_))QnW8>kfQj_+?B#|HjjE40ORam0tG-#^eu}E
zXxNV%i^WCr94IY2HPDUtkLK6mBCC6<k8^4_M%-<o3ZFr9`fIrvHGxDHkW#z_fC~6?
zh=>ZH$`5I}*ef~d?rNwjHU?`9-{x at lf6o!OS%DrQmUurRRRVudLCJlyB;A^7jtcpv
zSo|30N$pK5op8Yd({==YcI2U1%+l^ZCqaWed3SA;P!>sQ#%Yb(^dC{Hgb!OWrkW8g
zfFDcb;fGq!p0P29@?`H#*)J>~3%&$mPDNe1HXHZ at vz%lCxz=-E_IR1Y{kshZwlonj
zs}v#RKRHIpJ^UmS9IvM<0cHZyz4)n1Riks+qh2c~RSZiD@=)j`brF%rl at fb$!g$Fc
z&|+0|TQ>uhkx$>-UF5n0W$^xwdE%!&pZh>Y{kb0oUwL>K6k+cG9D5g%{C5_n$ZSd)
zJ+vwCH#0{k*yQd_iPy<nF!L-Vx|d9x119&ZU_1Ksv+1zmQ^35HOQwp+6cUkpKq+w&
ztV0_Ggh=P8?85eJSYqt-A5$>(t<e4><ZnndN?eIjPk8<g$An_&dXAmS#XB?Y+Ud3Z
z_(U<SR#U6%xB7(Xd-k3S$*NF*K`fwg>sECCu4KgNaVY7Jol|u8AQQqmhfmY&qxS&3
z-SV~sCw$twe1LCnb|t$C+sl*i^hN^dMBqlrCDVGb0UDtexvS7jIWq7@#k?2S)uDcw
z_qk7BtKX;goRdD6=f%x at JB~(jCYhbwuNgey^mwsI%;Q%KOlw5Ws+lsjf~wK6`W_}>
zwwn|P%m>;nMmbdec=6odhYKqhv#*0^r37v^NB@@m2iViqd~YRxRb%lomkLz`)RWy|
zz0jI|W*%oYCzYxm>yp=Hc5y4zK23CXJ-XHcvOo?{=VBGOf-%7VRW>lAdbE40zx;Sg
z=4^-ii=Vrm;_1_fBon9$NHE|13mX;Xv0fAgwzc|0=3EwRFhYMV%CVf$09aHF=a`ja
z?y&~J8Ls2_xrp!XODV#{wdO~^i%oN(^l8%2&f{lR%TZciJl;!1t*!E^z=huXwtZUA
z$uSvbEPhTT6Ldz0<ya-H!@$IGVrj}Z3V`D=pQWZ;OEzX=09hnza?kae;lV#-O-(S3
zUgh-xL9y$XD2wKPcmcnFrRY;A&{f50B>Ta)CeO;IbgKv0gUN16hLY7aOYol|QoX^*
z&L>2<6*Nhkd`v&J?O!MmH4)En4}{fnVqEU{B}l~JgmSQFdN4}d*aDQc!~|?u>fH1b
z0uGpZP|_|qx at wU88t?(!+afER7E2=%l9OkwQwFz~#*<jk?&s~FimL^|)cHIPV-f1A
zI*^M78E1ng!p`MmqJ+HL-+cGQe!5=KHQA!Y#{~5XH at a&H;pBIAsaah2rBfF|2+x7h
zN6A?^fM{1Hg&eJWD&qn9`y#hRvBoWH8e<8W%CYYp!IMf5 at LH1|d6wafbjK`vsjgAJ
z13Xl;Sr*gi^v7d9)V7D?wvxW9kDg|<0<NzBvDrE<rhGVux&#Vtg at 41ivT94y&e>+{
z<Z__Q^EFM at cud>%@dmSF6Bv2CS6%g2PF2RfpKgoF+cLJ)A3-2SlkI4v+dU6nd at we`
z=${xjQj5+4bmLVDkwb#gmP|3t$%l~p8}=5xI-$SxiHR(}S$IOJWT!Id4xg8(;zwml
znA}URKrNWGi}p<- at S5ypwzs#|gU-Oayx5!;Lps3{|NbN(>a#VV6Gd^$TmC!;(L<A#
z862WIm%cEfHmXNFi;fxjl{=EY^(dD`zwWovN)1-gG(fvWvTH{%{iu^W1|?w&IN`fc
zr;6Eqk;26|ox-}Xn}3y|ynVM?epi`nH4IPi^3$us7mZTP7Kld~2LG(x<=_%+SL$6+
zVG%iJ+Nx3sYtlh1jMXcWtrXL>7$@0`gJ)SuKb_{hJOFzDTDH at Hb1+|?1<5r&g|}o>
z8J40&o4l-UlE7J~{oqK8XIo#!T$(!Dw|1CWZp+|OTQm;li%3?h-cYf0HPpp9K>{~8
zQGt@}JfU%O)Z5g--8L52Oox?Wf--CK$zcd853mW##c&#BUtn=gicEO^?nWbq>2axk
z(EcF>?A!AsaGSej_(;=(*L;d9qXL7|8{&fTL7y~w)XZmK^5G4)>i_}_N^JBt$}g{1
zGawY`H=BQ44`(j7M0!q^76K+j-4Y?S?=DcQ7^f{EA at _P?4}K4@&8``rZ61Vr`sRZ&
z?dOK_dTKs3OQ#G=fMV#0f|v{uu6I(@38wmcaL1Ks1_xihkIe;lJV6U_F|;`|A`A>E
z$MoU at k>hN?auSu*QXKbuPh;FWK8H`7W&l6HWFiCG0tY+HN>;yTk&<8diz at Hm{s`Z%
zUGFBB9`k4`CIUUilO&_Y+IWiaBWTg~>$TN36Ygv|_negD<R;ZqHD$Q83`UrHA2&KQ
zq^~!uZ6;L-X0iq)M;xn+`azLeD-!y~r7+De6r9%ou5Z6#KE3Hbl40sIYLoj$t<@^x
zj`@A`GA(R%BR&CwSkdg|IA3y at 3_(?q1cwVIk*q7$kbp}QT#0;&WGOLaZ@;E3``j^!
z<XRZFH$@Q-FJXp5%ezN2#DBzbJXnX3>~GFlven_L)msaZTHS44wdF*~u*2U0?+ZY>
zMm_x{nE4wM<aa8zm8pAOymC4qRGyHR4Q6bL5L){p6HtQoBKD33MVYI(FOF5D8s7>t
z1l#8?&jFlpQx7@%$EXZI2zmb`gqu}l)$!q^Njn?pdiN;Riu8~X<5Q_9mU<MgG|xlf
z16G<3!Nw#5<E{$TUD)5xdp~GIY8^joeJ>`dP#Y0VPtN4Qo^l?2)781?qVQ0DjZS$m
z`3C6O$JI-VyCDhXhnbKst;Hjm{IiXrm&lh6Zc<^-JlI6OwX_ah<pBA&^Jn}<yxHq#
z%b*Dtcn!gd5`v><;52V1PyR-hni1RJqK1?B@!-{!zy!aWKBKgm?~EXym_>6Kg*5y*
z)Dd|WP6(@W)gZRAvY}2xWEu5eep8AKUcg8{ZLye%`k at NKjKng<glUsLk7@|i&c2+$
z->i40$pRddPx4i#b?JMT;58af9oH9)hMnVPRm52PJYY(y{I{{w4p*iyBtbg~n2|)i
zhAK=KBn&$vkw9`Kc~s-R?u(Gji(%f-X^5`&R3QrU$D76hz~=<<JmA8R!y^;)+o-O{
zQHbjzVDJ at cIRtxhB$zt(gNVLUMQD>%2#%4I#-!4nNprxI6BSBryq$CEMN~5khwtY0
z<GYTy=A$=e73j|Ds4;-roL)Sf9~y4OMfFQ366-V3{-{fiao8t{H?v0!o3bVZ4<ihp
zcIbFc`8o`R at NiL3H!>A9*DSGTT|Ba-ShBh@*0$Q>pd_Jk1>WbA<GUfyf<Nz-pYb|J
zXxTh2>?-wRkV2z|4GBKk>vS2~qh^Vo#hYY}rujl0N_J8EB)zlK>+Nq*E7YN^L|oSl
zz at 7R|#~q}X>AyY)$H3O*<H{kZWizAKtFDj$yen!W(0(84CS$`w2NnUsT^=+n4nDw2
zr9gvG)3aklwQ9LSe-Tv4Qj)OPy at ex8{CXEVgi>%=W;^x2*uiwIrITo!2c;^<PS*>^
zse~hiC{w*dlglelY$clB+Ch*Ib1ol0#0ZIyJwyoPhpWuD089hh;S2&Q9}j#0=Oc(N
z2|wK9dyzlc+#k5t+f;T0pQ1v_s_}i+3j~<k&_c*6_5`3Ulxcb>Fyp{vAsZLVXg{E4
zoNQH6 at x8|ofK*?`_2dGRagGA*q;LsWGBeo6ODm<ULUdbvzg3OGV)+E?geWT5-3P;Z
zA3aO(Ki?1+>us9&CvY6>o9||;JrZA_VU at POV#$N2o at Mm}VdyR&9si>9X}C#3Glvhs
z+<YC at df<0QiMRXUibk8<XL$Ff)6%l<K`u?bZGRTKjqHH46a!aPfFZ9)Y9*ee>b4)l
zBsaq0K}PSY_*duTM+!RG!}m at muNirjMT`2_*%cgt>7ND{);5#|53&TldE+HbMCm@|
z2QDtBUooS(EiULI?G+p8zW)4i^RQa+jdkK$*Kjgx*<=hiizRID`ze4QTaCrppOFlL
zrQ%PVDc2Y?pk^s8RbUqN%7%*C3)5F~f{Rxei$*)ROYb#(N<$X at x*n_fDQuw;X1c9A
z;jBNd2nm_1He&N56`T%?t<{1W&X9fM6{`bO)7ryh*;mx*Hv|Pjky<!yataKQg9Ue^
z!twxfs1M{jS;hvmQwv=}o!R2$v<TAdKN}O_%?O*(<hq9fJ>29CK$!LSMb2r?WJaCz
zYyZqJ at QuDC^{wu-?#iHb2Zn&PCw$xc2G=mt^MF+=CAFixAaeKN&m)#Q8a{a|Fxm;j
zo)X^3kJ_m6VBL+}aSCJgdEdX9G)KiKWir0D;1GVB#DwD(KdEIp<t{zWlW4Nz47U$O
zSR=1B9i<}8HvIq at rW^$e7_XjOu+H+DXu6S#+J%K7bIuoXKR%9j%>z+Yh&J1FodAiQ
z4W+Oi2XSE6Pl4w4d?mV|!(*Scgom?W^y$s=b!H(P>XBIIDt#ia47bLfLvVCvQj2pY
zpstsRyZk2Bk{9SlR4qXHWF8(Y6%_Q7Mv-$dSRP2SE63_o-Bgqe$w_{DC)3M^HTLTg
zn}{{VTG+>!N at 2&+YqvkTMGrsw+><%8NBe}Kjt%#zr6vnuAX at F}(I_}<j2?Y5IzcA?
zvRC%Q6U9YW1ii(@XM)bF&LlBg{N87c<lkx}{;muMD`*B1`bHgW at JNioGtt(lBvKe1
zrCbjFt#SjMHbsepqe^fVx_8N>`cv;?!dBw~j^aprf8R&@VUN5?%D~e671*}XOXOd$
z?tbTFLx+mg>}F4&%U00#X6 at G}=+A#&@P-F<NJ>-$N~E8XUsslv*(?BJ_eU`q)y|V{
zak-bR4arC#_p$vv7Y%2zzgB~0Ts0Z4h1i>Uk$X0)!;)x|q&JYPuoq<V>X3ZR8!!64
zk44<z+*ALjCA@(7aR)5dxmQZ?7(quX(z)lbZh>HT_`DtHuOACe1F^jwqr4!W+*4QZ
zZTURU1a^C)M&6%o9OOD77qi#jA{Y#2L+~d2f%YqUjS3=8Ngs_l6}T03;}3v{*!EI|
zgR7<pY~tZY0yn0H4FLs_CvE={KspH@%wivmACfBd{&_(!MfWKg$vE46DlzEWQ{dpf
zo`HVh`5+CLjM?9b6;hIyJ!f|Q7|nB31IYEhUJINvRdEFmlhwPO{0hKvo9I{&&0Lj>
zUsQ#~8crlw9vKv!1hUw+eSTMJ1b#PfpZaUIB>6MjR|sWIFGX|nu77=H5r- at OqtJg^
z>tOhcDUAb7imJ|asFk_0Nw}v^j`DpopB1<|HJ0ZMJ^HI6n$BHddA!gMz at uMi66JCQ
zRj?`%8Z2{;GEZn`pKX;d2X6;yHgir0&21evxtcU?q&*hbdT53^G-#3XJKwZK>)rS=
z3>%PAG^*hkwmt>-UVm8<{8y+eeEA+d3@#Krw3((Dn8y1t^WWg`egf8c&`vj68~~mY
z!YpEs*R%?V0$m#j7)6{G`6k~wz at lEQQ0?|5;M=%bT84g(EB6B3+IQ`>?gKMb++sH|
zQq-oWN~JD;cY-B#g&A(-6y58J*Rg8J>!YEX+R`zO*hpW|dVGPyv-hQL*3*tGUbCp%
z>>O9RI`g9H#R`W7ItI<?lb0q`aBAa*DGG)9ngfXaitKV&m5d}3)EUQ03fGRiQzmSA
zr>8ju5-=_f413EBs6@!!Fru#q*HbV&huDYDQ7Ef*M80nX;zXu7gFl?d5?z9il*~yD
z4o`|?+9+&Om&(FapaD*xldHBR%O;#X=FSV5 at cDc5M0ELXb~+DWo<lfgHu`3tE<D?(
zxayhYfUD$8;vU&;e3~U!DAxWq*f8T}WUP>Et<1q*jmWE<ys#%!aAV*k5yy;MvI|@U
zxOFGnea3+d#h4{AmTxc*>R(~RVh1?>nl_9QdL^{pPC$lcVr&0 at Ki+LWG^NwKU!gbH
z&neKvFEj-;D3LS<=0KdlMjJDUjG!iFqfJYaxH3hX0A4zMu$(Gm9gAX|lM8NNT6Pp@
zQ4A9P1dECplj)it^wz<KZD*#Bc$n?gqITKaq87;M0+{n&D8WB&FCSx~8AL)xHTwH$
zFz at wWx^}l%0!py!Ew_|)<doyOsB2U_1Ku0+ZNVAfNY{`!7y8#0*t?{|k6hbD_WKGB
zpXj`VGT9tNKW0+?Av!Hoho<g+9(}@&khx at FH2CItx$(^cni5i>k={G5PHCgN-O>v+
zMR`ZzW~X^*-Aa%b at z+9S$80ycR`0oLHV~%vm%)=<a&I+;E>BcX7IQ|xWlS!*tgvie
zok!KjaJWgb`G?Fw;>Nc~oyBL>zlOgT3i+FMw=J*A#_S}^a&M<)2rDskI7wf}4k=Q%
zW_xtqR2tg3zw__weFVxFLXI{6y>4M$M`o2;sc}+`lf+GjK;@)q(7WKw&AU*XQZrpd
zy&%?2ty1NXIBM+I$&%qby~W5qo{SZcxY60VSUc$-YYn at 1aa%bD>`vSrv;3wz+pV;5
zp>sQmkvA7Zg)-o(+m1^xAPl3Le3P`>J=fZTWWlk~(9s0w8Ly+6J&G_JqyGO9FF1jF
zbTHBveJ#jLjonD>HL4hkv$uoi^CQT(aJyPAy7=15jQg|fKhUG8(V9LSB)BmS`Wy+Q
z{&c6FaUr#@nh at Xmgwc3{)gWHjgh}48-6f#@f>5ka^qpz*G`?R%8b1cqCDm)F-r?@@
zu>xjkLrjyP4$KRSE~nY#!%YfOdclLbM#R4q_}H^q>og7GewXa{(amZb&klnJg*T=D
z9nFNu?pUq^=a<|(XVnd{Qe^%C{&%M^a02q&T*a4&ec)yDjly4)?4Q(~;&_>w4l{MF
zVy<kn5kVi+w1%mdkx}s1aii*-Z at z=Tm at REb&K@<7 at W-mcMT$4BQ#9 at J)|9l5-*=7$
zq9r)h%-g9di2}_(aSUctj1Qo9Wr|&$dRJRul9^5<q~*Q>MX%Rvxgi at m-=%T{EU%2|
z{fY<5-OmJ0bTS{s&-8jJwFdLG1}qlMDRI=wFy1 at oL>43>k|~ttQ*K33VEM>!y+Tz#
zDC$Qi3*RdOKMPFl-FZU%nt;f_d0}pQ=o|Vn_4HWa5=?grWeaK=Ic~hBh}ilq(T`j1
zG1AVG=|YHLSKRZ{0g{xSzTA;dAT>Uf?K0;6-`(60`grgP>0`mm9vTM9gJA4=zKnvg
zi}zQ0Z+R$&W+y69-WP-@>?^ZAsJ+HocA7_`0?s at FH>tFzBT0YlBV3bkfF`v}KFN{$
z^BGW(j%=x5ZQ9AB*jUj&w;yh=0uY?FEAOTq(alN2vhBVA9Cp<|J%puRQzzkvxyu-x
zu7Bg5ja=OjDgwg3wFC>|$JA}%RWmLkO-pp<y<~vHGcZ?|mk(9obPM0NL_SuV7_w=T
z;(InDk5B)L#T^K?>wVKR0bODUF`&p*AV)cJg1qVMH-Xxl5^tsh at xWYftjpBjH<SIx
z2H>r=QxMimho;2`3t*l$uxo4?z~Vx>;=MdT2`Q{FE5gl>7T7%kA44v)0u&Y<wiIUU
z0%FmQ)rJ~Kf0dFgiWw52mIEs0xb)umO&<NTdfkXVHkpDe1_7hWX&|sz5y9gtk+W$|
zz04iY+MOaW4TMhjZ-){&c|nBnj-C#!{?G$hlww)>U0V5zyKiI{$1cdh!{8p?fd6Di
zvFhR0q{4J#;-<4LS%c-{q=O{E6J9UuV;;bVPm_%vy$~V3ec>!8R7^NIZHiXJ*z{nd
zlKk^6`(s|c#6goX;cnosNSGTjOA)&2{g5>tU^c+dhh#nIE3E%yIZQ-weE4?fbKH25
zXz*3?!+;J@`1$jZc1`&2u49wWQ_j5dQ400eQE3C6WF^-J at --!9|0nl~Sk9R<d7Y4-
z4&S&d<lis7Hc*INurtZaMIkGx_?`DZd&rE-Y3mBUjk72@^jLuaqLn_kS(j`m&qQ^{
z7JOL%`dM%CC0Xma$2GWDzg7=Ek6Gx%$nZn4WjpgDcr;e)PALkeYbDE?)Y-;jpF=*@
zpZc#bFGP!dUz>^!7NC0hWph?Yhd^AG`pCqREk1TCC3<wdj1OT|r=sy at zlCNXzK590
zx(PuH#_dWg?f==Pb400=p_MHl`X_fzQ%00qdx5m&=daOP>Ei{CW)+;DKyAV=D`T+k
z)Q%WWnQapNF!9?vXIYi_E`ah**ytU(6qvhpdF at J5w3!j(+;NyX3XWWtqxiRDhT(B0
zlToFvMz}kT4a*#~bA+;NNx;0wAmmNo?i98DXNjE$r2N at m>knmgJkpqGX1~DdNeC$s
zDy_OJ>^odM{`<<{k)h0j!5N at MLEv*=o-X6ea|A)kGiEGcsEeY;#{erK!(6Ir0{TnT
zjTXLI%3b7jX6}EX9SRCIC&u)m4m(?{b`X|p;B6~tGvo}_FchI{&`0*7Bdwe$coE8Y
zIGd4h8-g)HJ0rws+(;dH7O2XWz<S;>f*h8<H=>yx0<wOLIcDlSh|Yy>TJ3x$#PEo^
zSUuO6zbPAPDI^aW7@!PYmntdHMnWjPPSIY|8Jp-U>2jBy0h77fnyeT6r$b1}{q!Wt
zJo3h5<wrD>c6LhRA`89rGDy{wnSm#Z4PL4=rjtt?%#z}8WqKK`wmFDPLPse#td-{b
zp)X5j%rv%dBV+bV at 1KU=JT%SyIL%IMda<#-ZFM-BS9M at JzJC?JD%sb2U8!28V1m1=
zYR6gDx}QR5?<MBCyEe#m!mS{XtNF%Ew`BkBTzJ&@^;ch0p)w(CIE2M+-0cI4Nhvn)
zF}gu at 19*Iee(i!E=)My?iCLB7?b&9YZIKS4TvT$15A0=Nv~B*@cuwgTYh-<la-4L*
zDX&&*>nLcd_%zs8^AWnkW9vrJouHC4Dej5r2bDb|LTZQ|dz{bp-jhM-Sm at U0NSt{%
zi*tLGDcF3Bf5>@<`A!>o*(uANl;9 at xxXvS@*PJ`DO3}Kb)je>r&wQ92S<i^Yrk(QA
zo2_g7nXo5|iGjPDQy8qL?LBVJC2hn`m|mx2j*8MFS`2&<RiqBqDz7j{g#9|8G%?rX
zf%DMV^t0^B_nw9C5U0<a1rVCq9&uSLT?%+^iBri^9Is|LXsq|nIeP+vXD=rjaDqL<
zr8QK>I;w+6j{$&-+(?#G_I`v{q>%AJ96nZ?duTMx+OAHfN}}C6`GK#uaGDGI$Z$21
zL;yf0PFA)*w%~FQgk3;^TlRUJto2QW!fqF<pN|^Cp!0_0?dc!kt*afqaZWAx!QEF3
zh^vj27W&h|8H+c3T2Wkf2oBE;t=fAU1Ym@#do~#_J at W#~Fz>d0uFx1^lkFf)MrkU$
zmT$JaVd^i9qP5L;N!g;N9{O362NoVFF!OrqxQXQ^S;!L4CGAd5=YFSCAEe>lFiZDz
zjiFW#cCg{ya{-{JdXo#AIWPWiDN1bLJpwi?!*Kt-4;l`mwwIw0M?_1lf&x?aHKK%n
z)g9G)#sW`0Q(!plxL{HnCw>ZMbS%_K;Obs=xO`N{2nMRQUn6~(M)5u7<1}*j#?rIm
z5Vb7f at rluI6>_~BWi_RN$(V5DAcV|+>^Re^*L1Ov at gsaOu7cqW6-w_XJUIxHAYYE0
z{0wV(L!AOK?PliegeFjWXQiT~ozsfb<{8i1g`TX7s9+uOp$p!Q0(Z4mYS+8yg?B8~
zm|@3k7YMilF*%Cm0-0&)ykY9PDxEehAAN%~TE0`H_z?Z(8HdbajdQw2-~}td7Z|!M
zVoKl<5g>;K^nYi^)!__%+wCT{dHuj-@|NJ_<ZO6Dm`#B=VIp<6QS{3Se6C}@+`5y&
zhrEXJ6ll1>vZB5$JvmMbU`@L*%*op$L@#ygyBj-TW^cM3=ZEs51lPu~-lYv3YPDqV
zBtw2rHf88*!iE9zd8#(mg&3mPO(bENU&i{TMr(f})r|ZjL|g!>POj|2E?s67G&V$d
z8f6QR0tfisWd_8h>y?@jBY29<i7GH*Z9%w7qo-Vs5ynG<9d-~_nnXbiR!Af at TvM`4
zV(Tl=0MW#M@<HN5!`QowOG<ns%H?JFor8`5u)cfnV?hm$H2{zRL$`sf$~^IQn8h#v
zQMYV(V0zMNU9a5nvuNf1%L%DRtz3s|%GFOSsG(?Eg|xzD$=O)SeHR)#k)-}as&vL}
zDM0`YP`>yI=E#a-6Fb$`SfJ8|I!`8Uu_N4N-q!eT&P=M%QWI7EV0O$%&+{+GxzU`#
zS?=J3&c1XNF#JpaMW4J*T*=%7{YM2iTI`B at dZ%RwWaqoHjjretf8W5ynhj%VdDUiv
z*j^9e8gFVQMS8Jhn?Dk2fG_y6y4S4!=^RL<{}R at V0E+6OGuE<B?Gv|`m3->fF at wr5
z=mb>>QxPYRqxJA}0fLkdtpd1Xdp5U~`~B53J2b7xCi(@*6XgRCT!{=tof(Z0(L!DD
zl~(O&GAqJ^BwfSFt$)!4peSxXa)nWXw4i8J>iu<wqsjaIsg0jB7W$sF%$*GN7dSE+
zUVfFn*p$(1wIj6spt at Q8*<Mr(Rk~%4Q1z_o9*I7$HIfHNjy<e{sPDDZc9}qHmRLjR
z_zoNd7P@{PM%E$9IVcF{rvg0NpXu7W*4wFpo<LY){d*VVyo#H9elqlICZ)8BOd{Dq
z5HkEJYw%3qm}OYs1=AQ~j=Nm&$K<IP=sY at 6AzVp(Efp@~&f=jjmlO)p)xfPI8&u9Z
zpRT=pC^(+?-8nKw*82oHG(Uazgp`&UkX`2`*sL^Uns3uZU~})-?sMy(wvH)5+=CL$
z_HlnP|B4TpCoc>$+HhY*2a>rkR>Ufko0dFm*VzepJ8+WJd7#a{Y|9VMcGkX&QHlqx
zmbVPq3{|K1 at LjZI@_7ngJk3nUoJKsH$Ie_N)WiD4nvC>!0Jer~p=`jKroOLb(2Iw1
zEejp0YmE%?4aKom`Pa0-EfnKdYM?#wGkrad3Z^v_K2dC1^VYEcbB`iw<EoTt)4%=@
zsuK)jm;5X+6y4;5mf{6=hz<uUrCSHaXi32kG}I7k&Fk313S<Y;_n0|Bh4=3TWvKGP
zI6ciCC+2E*B+N#j#mvC2R{A?)r;bx?su}}+V8{_92I1sLLZL`NEbWBj3VfuWjD+qp
z@#*R7(Q~R=d}K&mc}O)s&dOxMN6s~{9n9-IYFEm)Tg<kGGsec2(jz4ayrIz2hMw-G
zB$7CYq`NLf&WE)0r{QuYtH;Wo#-42!!`6m$Erz#&|31^j&}shlVf78!1zq8sV_`Qi
z>zk#y$mbKg%r9!@!6;|oLxZsdTc|T?W=2Vq&QQ#c4(OTpW899bu;3d!{<<xe;Gf<G
zLXylMdR&`^W}a_?h<S0`|APmP3oulMgND=Q_a~k$5t#M<48ATKMbKsIM*hJoh&}~M
z7xkEKDZt_k#du;xMvTJbd{<xjtvV}==S)G?21Serffwbd9xyup4OOmmC^bkOc?DhO
z52M)(JUUpl&kvz>1ta)!)Fm*vh`^|qH?(1Q0GG=^alr(5EKH_Vf0g8ExzyrQTUdUE
zWi{Y%3HtC6x9|m8uy2j%GJfjUD30A1*Zm&biy4rd#_*Czc=Eqlao!z at o$W%0uzC$a
z(v|ayLe@&Tgu1GC<>{M0Gq;ZSk?{1q6d%C;V~~gzzj}wzOxm<9 at X5zo6L4aWld+EE
z*F9=so3Z7U4z&ld#-eSs)oXA$^Muc9 at mQ~XjI=Bd*_fO6PS4KN%rS`U3Jlzbg;h~C
zrAP8}W((^8?yO)XYl1b2Ec!jYFEId;H%AU$5^d}rqgoC;6Q;dC6qfMUEl0I8hxFgX
zqce`4GeA?d<FLZZp(^1w!}gacAB)-%Ce14H3DefL;1Rb{i{bF|JjWvltGK?qpDLA4
z-&+J2CSs!K>>jrDi=cPT17$PzoRhw)K=TaAGIvNh2zx9>PQ9Tevej%I+$Rp2mn0~+
z?lh&SS1ZHgv4=+c>el;;zU*#58XMo9Rwe<Yzbh_cDmWM3ECZhqQ|`IR;Xvnz^ddMQ
z9$q*C-u}QX&Z#AjcLn3~RreO$6MuG2TXNX2cQIOh9`L(^suUnQ_+tZv{M^1}K3vi2
znsa113fPC`8C+j3i-;C0Z-Ijb^<(=AkHO}bbVfI?QS)ow#8?0uvqkZxaV-gnd(T`B
z91az&$et9UWIBFXudrY?$oMXh;dyjII><wQoYllqOqK at 2DAy>6j2Wn)k!1_VI-=^%
zS=C9z6Zs(~fiI{FP1;gUQxz||P1&A~v*{4xwPkvBln7&|-7Rswj3D at aeuqj`hJ7fs
z;uL7~b4h$!Vx+1%1ECc<_O0WfJ4h$03s*&c0m8bb%IUaxzEj at yDbps=lNk_rikn`m
zrSmO56FBhI+w4wz3;=BCBHI at n%;&g(`&ccOEI^bnKGj}@?5b{MP*e?;zqycd87+;g
zk-W)&(D^#OC2$&QYFB}Nes~x-v4uXt%{?~N>{xEtM0E*&3iw(Ye~`Q at v+)lMm!)-D
z+!s=K^#vrFZfh=5PLGI&uSmoa-zOI3>u5&*93Ed?9dL`+Nz9#wt)jmyMTaKS#lWq7
z6*W5p(qAI!0`{=2ml3!V=(So>#UGVXLgF9uL}y;I5A~od!G5<_B?5{{Xl at ZL<RYUx
z+^lQV^5w!@X3O$Pr8M}C<u4mv<~8O*T=N&^i~1sy42%9uCkcrp8zn4vGPhT}+;63;
zNY0 at zC+J0+B)9WW at D)P_LJDp+<6$@FUM+PMhqF4VL``H^wp!vKaz4D_^v++WzK^lK
zLyg1Ke*`W$pEBTQb>TES9|u^-m^RV-Ig(O?g3#x~^pgIy`w=sWSU^`cca+xq!d||C
ztlKzig{6jUbKV4)sK at CP;<|hrV<F*(8&Rv^Ii##P*`LFVB8TjS7o+$VBbb}Rs2Gt@
z*({k^uF?6;*-ngJsb~RYu|yr<&3+x{>L7c$cyHS;v0#Q(a6G!!SGlRi8f?|h4&Vd7
zQ8;N`82Z5DU~5(WVvdYh(2JB*?OB9COYyOLl8Io%<7 at S}H!%r*vDbzKvF!)v3-C%6
zth_7X&;>P<x_V4TKAbwdvv^l{8m3+9UNc(^9b6tQT(sFR at 0Pg#f&$5PT*U<i%TSym
zw>P^KaH&w{MM%E5W9x=0G2*OHuaW-<LaP$T3Az~f?n01qrjlV;CD@?eE3QL#&NoZT
zT@?_p5Yg>fh~k*|GVVk;jEb-?xdFX)w%ikGKr<=jWX_&MNHcIsmhJJyMKA6tfMNkX
zj|22$rG*AcxMj>J<QdsnYyXE*&>SSZg)FIEdkV;m$D4cZn-xH`NkSlCTK=J8|5_R@
zd184~_ymSZm0Rs`?&dhXoPpKcLJ8OhF_r}&h{yrlkCUP0TrcIj$<S9l|7t at 1ZWCM=
zEETqVs--3eP(^Cqx;=M$CS4W%F37cYfUkz%B)|f6s72Ll<!y#+18BdN6iB;Q{nlsn
zKjsrd{htF~P?(ALGXM?4c}I4cza at jK|LgVTrpRoH0-vbc^<gTL<bvi5;cs_&s*mXa
z`{4)+ at 8i-KtV<NA1Bz^*R+|;<=ZrM`$|$d3`$+D;2kWIH(A#;bhTniD?+<1~waR|8
z!4?UF(d_5cwV~bA9tkmPiqH*UhtjkW1U-+uz;SkWcxk{+n-PZMKY~0%Qc|pJc`~}U
zV6&$Yt+iy!{N?!>8kdJDWg3sL$5XP&)roU0g*`FJ93`1myN<oFh`Ry=gDndNCB@`8
z?lxCkDE0$x(I+~f=3!gB!+5YG@@ymjdc3Ob9T{*I at LIw;Rzx4uvP2X>qvJr?%_s9X
z=J5_NTxyE%wJ=}-Ld at 06stA0h(&e-ZJGk}FR#OhqL|4=Tr{$tbsyphx7%-Dk2k?SZ
zMG_>clJEeSCp&4-TX*u_KKbvr00b)4GiWY&&o93%jT!^Y>5a5KCDGs{U5yDMEgN&)
zr=)*3yOt&UC<kP`LV0o%stO85`JXa<7;8Tt{7Y2;h1HUlG3XXW|D<<J4}NJoENP3f
zgNgWI%-(L7k>g*>7nf+8xW>b*99)t%i!S0{R(W at haQd2KBt1^U>TmRXuvNbVzB`*b
zd*I&y8k&UJLBTxT0*P1AvNOQPPBoO&8jqE>pJ%+?7}9eG-y_CV7aod}Ki3yiNOvzc
zGebbyKv;&h6X&G|Bs!6ZZ}NAuT2#cpaa;A<(ovtg#0<AN&7CL(jrDo2$P9owGx}dM
z$YMz1segz6LE1Oi!<l7v9+qqV4`K8rkyF4DeH6*LAl`*mj9!#^=i;7v8f5Pj)_j4G
zKJqzjmM1R<B>xpC4GQmflIYEh&R3|j`SWHimQpR&{ncX*(T$K(_CCT8TGCFsv45w&
z)<e)nhp;zwW<Fc!?K9o14^(g#A3y%TC1dxBfe)H;=xe|caYK%D^-j9ih#1eY$5 at mA
z7_rmzs%*GlE;chx8g;AJ5~LCT at Mv7(42HT!yS5^d?K|lqT#$KV`sjw6SodrO5!99o
zl!Qv6VQF>osq<&~mev=UF9U4ogKp9Z_ks^ofEh}$JPw5u at u@-?JCqBLeqww3!F0ti
zNMHc-Zy9l<WXCktd|x4VX588sLFamPa^XwQoLU0>cJ12H&f4#6K&XkUj<mj_v=FIG
z^dH_<tO5Nsgcq|eb!*4tVj6kr>rfVki}IVp<Rq6&6cQ)`+j~{4Ob9bP$mD-5dB5sr
z&JWPlBhGt;-r__mjLrfQdPBj_qZC^-qIt%pvvtcBjepu;_0kO39_U9!dtc+)5ldE`
ztM?4eXy*vEHI`SVTaR9t*@@}Y^vU%+Y?h~S!4M59hvzJ{1_qV@@-cjJT$F(p%vN#R
zGi+a{Xm+LI%D?5kEQT-A3b^|P)iPouj2M#9odw}IWnh|r0q5$Wvz#f{=IxBgx7_Hf
zx@^w at V4}7|j9l5FnoC9bQt+jl*o+)GQj&E0LZ(E14N?2Nu$lamA&Z{m2!XS_%r2&_
zE_s*+sjsoBpRNycgvryVoi}3pc1O!uM_Jg^MW6Mf%&g&B>gL^#Gp_18*f6$#h{z at t
z?D)$0i5JoGZEc$`c#o-ZDakiCo^z|N at r$NgDr)l?DnKSqp<Rl+6zugw)6(;QA?ty;
zXM1x^*p at -YNHSZie>kijKp*`l{05x?@u46>{-~<~BdmvD^P@>9caNnj<4-=FP0U_u
zJb|?TmhCt1UXesl<D#mCWB%f4)_r~+2VOq>+EHi};B9`5{rilYB$kt=p+V)ecQ<kz
zoY`f<+sNRe?-d7F*(#^^5_{pu_Hz><!IGZWp%xNJmy*W8e+o)TSuchLGS+NnKnf9R
zyW)GxpH9$xZ%V*DnRi at PjwAh(S#}kVVX2&AsoW5L<K;4yq3k4=EvKurtmb#>$qMgC
zH%HM9Bi2)G`lzb(XdrF!aaFyE0FpFH=}Lfd(&qY}i?rS$B`}a9y>JL9cC^?*z#BB|
zfdIMmj`Plw;j4)gmZEDKu?m98IQX2DG*%LJ!+)|AT-VE%_F>^S1H>Rcj!9PPt%qpN
zq!74cX6kodS|kiJd2{$G@~Hi1Z{5!M{jQC-ty?qO*E8c&f9zx<R95xOQP?_D+oc*=
z&57ohJYaJ-EZrYmdDDqROKAzla at Fr>(nTlH5toF5SDa24PJy^Hbn{1Cj=(-F<#boD
zj6 at lmdlaVEZVQnYG8jbPEd&po>^<Qk9 at My!*HY=9U#r#`-cT44EQHV}yk&d%+2(M=
z;eh8CgB6+>!qeqC$)rbPr!~%5lqAB5kwK`{hWQWn=0PrVmX3}>-(hhMb>t%PMxEga
z9L*u_M)_V)Rr4rHJVerHnloevPvS<p+##{IkVfrGgr?1+@))qls9IoARB7*%BsZc3
z6i(EZJlgh?CxwTT2~*Xpz9*y(yOqzZqH=om+_h+ at NCV0LO=^f9ayP*PqEm3N4x1|&
zHTil%H;t|pkqKVtGpLgK5rJV7oy0P{2|^6?RzJy`EQ>CvLx@;N7*Kw<wIF+!4 at cAY
z(%=bJ5bguP<Dnufu#eRMEkM%0G7DHgE~VHPMnQ%KnBaN%o!Kb55{jVd$0D#68u%*Z
z(e<G>FH at kD|Lyb>;Rp>O#MOzq6}iYzY;R1Cm7SQV=UqdMNkU*N+esC<1|v8{Sw at 9G
ziIW7<_!lv=V~QEA0$DP26&r7^;)(@s`$;vm;2kXFVrPniqcPXSF<K%|<q at MJoaOm?
z&}^0i+b!RYff;e?vebmxx}X}xYUd at Edg%lGzo`6I#{;W;yExisvIVX1`qV3Tt9y}F
z&d)GWdC;Zo2rd{fuG_Rm+i;X}_WqIW*4WqCHk8t^?L$arYk2Z-vB&SlD(%ADQwA7P
zc>2UqMVl;w;Vw+C7?IDl9J139U+lncesQr<sS|;jwxLtmNqy^zGd|X?|0PL;W5s=2
zJS*ZZ$B;I@?sQ6osQQmoMvtwhXSTLv;2%;*o at U_G_aiOi1&#SLl6iF>GlEY~EPRu9
zpb`Hqr*=<4nvv}22AW@&r|M>}m+;M{!VaH2 at cG->AFUa|cp}qCf=2@%&CDS<hi1AJ
zzm}D2cbd<<dVEjm5{h}?psy?th_?({3<c|dwlYb=pPg{!^aFH59O-fKf)uU5Yq_?f
zBtHXTY{5MpVt!DY4=^@!<@?>Qd)_qhIbr=%1G}1oZkuP~IR3$P`^2y3I=9>1($tu0
z)iW;4fA$`oTt(WkKjSJ at lUiB>HZWkr)*9jYaT|mW2xG9dFm at DtysFLEnABS<XrV#q
zor;yiy0Sf*O7LMXF822G$lU5O1WKAyu8z|-`?bcreIQ>canho#@gW`WSHGq5Z!I*i
z_*heYDUog%RoRY0CyO5hsN>l&yJ+GkL>cvqD}?5<t(ZS42p_6iI>&*+Zk$hI1*i+C
zWm4OM#AG*zWc6Vo88qYg`DS;3_iM3j at 5tLNJzBB(P(hf{#uW?w>yUY7ou={t=Q;H@
zMGl0ll~jLk$4|wK8LD3%V+!8;$A%9~4|(&tAEx$pQpE0{Qh7~_(Rz<1iX~wvzwd2t
zt9GIhBy!&!onFG2K%7fE%I$X+61fCw(ZK%b?lQgm+5kiPB at HQ2O|{9ST9DgLs$I>H
zo^p2W_7S<XD?*JQJauVI!w5CAs6#LJ(8;Cuvz4v2y%|h`)?ff-&coC`XzYrc=|&@^
zQ5}ZE5}(Q&4{}B0pxd3mu{D2_cL!iaOzhp*uCCKuVKbgZp14N`Lc9~P_)S68Dm;Za
zTR5es!&J`KfzPl3)`_LLaB?KfneP|-(l7?80XXZ}gS^u3RN-<E^h|{744F=AQ3K@*
zxXFKLAhOXm`47^MriD8%>5Gr5Nld;2zk1?gWR>K1LQk;Gn|4j0Le`0x{rC(p%4Teo
zpvKQW_gN;dAH8YyJyKG%k%_HAC<OW at 3@p%bF-pY=3Rk5R&k<J*YoM7DTI-nFj3RXX
zHemda$T1re*v#$QXRimtbX}^LcRi$#BMsd=_X3Exn}R}z;4RLwNW*F?Ob0ovR*`3G
zDf?qBBiW)Nr6*+bkGw*ZsM~(Sr at tq9`DhIOz$%+Sqj~wF1^Tb%>Gmis7_VA>J8=aq
zbu2Q;ITesNM)da<)5JD=T_Cvti@?W*%F1M(1>{|xG>$V!5CPx_kiI*`Cfqbr|FFYq
zJ`}Z;Lfm^4^^W?FjaeKP@$X32UJcj;4A~p1_v6NBxOt1mVq7-E_c+CT2LLp9&A8HB
zQ*;j3BH6Qq|Mke#gA#>2)66MX|3Fl0CUh#lyh8y-^8vgJmJkB at o{2fdU4$_q-Xq|_
zf;DP?CbZ2=ga4q+l~;;42O)tMZ6{m?Z5#UA5mNefTj`4}yc&eT at o(jFcuD9I1w$Nc
zZXApMxcR%*<QIxLdeWJOzuU)O=2{+;(3SGS&;_A2yuN5MjS;DP{)A?u@&AwRsv#y2
z_^$rv^T8y`THZjwSM1wgh-Wy at ln+U_frZMwbTd=y8=EhZgP`vd)iXv`Nrs$}`=n7^
zI++<a?f at Jqr(`l$wri~bKHufvnVV}xt;Lgejj~OYKf)*fWPh at frP`}5K>T!v|NSS}
zgXR!qnWJC`w>>K+lV at 416k31yfDdiI=LV|N?sOBZqM{=y?)q1WqGQu>WIzk<im)|3
zD>JF!eQ`u^S#DmsK7e(Cd8*!h&RDG$W8h at xk81(PHR5U{%UfmpD_ptioeHO1y#*n>
z-;M6C4aHVFXjZQSGNrrS=|zCIaYk=QSA}ljsXjDppkG at AkrzfcN1?in8`pS$8HOjZ
zDPL)}K at 8#^l8}*Nb=|ywKf=@Gt%+TIWT0bqGXK@=6z{&5CUN)Mr6G#O?i5lJD8?wu
z9}+)YK9vhMtm^hCmv$AIkpnu7Nc_f<ob7AXC)L;Ar{3Bc76L>%+UlSy<c9Z at 6}WPR
z&+faG_`{;fxU}`7)XJ-B<8;*`NaSy|Be%|YzylZpgce#IKc~}$dPU|xBR%aC&P|U8
z0?HK~<c?a+K9sR=Ri=_w(g at A}7?sb_1RK&Vr)L;v;2Xb&!1a=bCvJhO53~q5n4(Un
zP|soZ{#LZs3<{mjM-yGKGnM at q!*!oQVo*{{iiAbHVVVU$wGub5OA>hEZi2*|A{{;d
zjAZ4 at wIVZQ!a<-yii2>7bVHyURw~CL$yWbx4AF3 at b<dA+ML9Ce0$_zXR)g82)|r*-
z({sr$4Ir*Lb1PO7nXtF50d?r5(RA7}Wvl#ceAVw8V}j;J(}5o)sN5RF#^<LD^Lz`6
z_CbVB%Y*1IDW(@Ejl)n_&S?QeQ_Da%l>o!Nf<7a1OM=Kgh+9FAj=bPDiSXAMeiw1u
zO`co$VX@@uD+(Q#Ud9y$i9F_T_EYABuZP|A1F~`W<Qrg;3!w!gXP|%ACSL at W{8h&B
z62e`9&MqogRIxzd#bx~4DgU1gEPXH0%-AQ*HL$mi^v<Xw+3d()avJmSk66~<!+TF$
ziLiE?PIH6go-8P{IwNaQ^vp*OiK{-|w3Cj(adCAGWn%HDHlh<6V?d}D19D*Gf5Jb<
zli~P33w at uOms96}VbH9S(J#As&+2^9_c(R?nlM^?)e|#flTDKGh$J!)QofH%_wFJ^
z)Mq+S*+8PB5ToVZv2wAMjqv%+yOzo_@&mz7u;l^TjpMQ;y at C|k*^w=ksl<*JSQxAA
z^KpFewa!k-2_KWBQX&V;RKpiw;qTV*aHCz(zE$P-FC~5mf2f>l!nLi+sNe|=KPW}q
zKFznPB4oRF|4vGc*uZ$uiYERj6LWhPYUJL&eQ~OC#|}TR6cQZeSyY{uY9)p5iV{GY
ztM`O9Gd7eP8f%FgGo=x7s!40!oN)1H1$ob{Ig=Ti_e%9HT~=Ae;mG^`yTBU~Gn+nt
z?t>ZkGNd;Nyixr`Vh%?Lt>2#|=JS|ye`UyH$y(Nupi)*JPuFS-#fFkoh7ZtG at fVUG
znT+Ft83_H$<8!5_{_Kh^mUCUIfn$r78ZigF4~D at IWiN!Nzwp!2qE84QByFLfVA0i7
z0hmWT1L%&m);#$IksR)@9~~4zpXy_nxGfB7iX4>Jpvu&7KFBY0{3tvf*;<)&uj_3$
zP!YJT;?Zq{ssFNvU6lg_k#4AD+wrEBxe^hqIh5L$zT-Ir0}oHh6FkE2ZlQj7#KT8N
z&;pt&SmJd%8H at g~E0kPTaZ4aUjxp=arUuvE#D?(a;xhdtr}<wMo_!D=qXCQ;KJ;9t
zA0pa<R2`+H5$WrQm?NMR at 92O!9e5|$@Q3;}v*`6~h0L6%P_ at +i!+WhbwF;Bxj!LAc
zT2Kvm2&hMTx!1jYi?68+Hm-dFG&kMPvayQ&tIY%U9vr729szfh&iEmpUil?dlp=aa
z(X|vx%Ok$cYYj|`v5YwAO7m2$@!5ICV(8F_e^KQezG6p3<B0c8r9`uK#6(8tQ4N7v
zUKe+F!n&F2V?+xKg8fJaVs8WxJ*4)=m2M`-7qHna%?Xe*sxFx&mO)BUAg~NNz0sDP
zsYpfWUU$H!4T=*fHnj;k9d^hhR1`BO7v~G6K$Vf|HTE at DkMl?x;uw)!tkcczcD#pI
zUH|wZhX-5N5Q+HjOzbcM<5 at XU+%6+BT`@pHKMiI<j5Z_iNx>i^*(YJO(nCf;=?Ey@
z7dcB`mn+u95GCi&z732;)`5sXz-2aen5-KPuVnC+xu*N)oq0dIti{HRM2jV<m at 4CB
zS9IK_bl-9s(!k{1qGH7R?DxG&%b+()#DMxk7eSyA-mjM3W<<@SO#Jx5qhg>_LP<Oc
znYWMKjK*);Wm0dxX^*q<_N+#Do&a1pu_C6!t9O!opIe<@%;vI^u2-js?{Qo=H#j at f
z|6bQh4IKD~<p1`?#tYL$P3h3mE)>&aX(t*6`cESkw}4yvgHPsry=9W^kga3m9<>52
z=}6P7y<?N|p@?`lI at xTQ0Ax^Xl0}DOOkgntV*9 at 0*+@&esxD5-3m|70abf^}pDK_{
z`HUg~lZ1lk?ljEf^%gS%Q-UdsR5!Esz|dluV9;;!noRZ+VXaNLbAo=D6WXIo^5t;O
zL<_X<-VR}hktjapHVpO%P&GjcRz5Y+H__iaCv{SpbK+5LVs}rD_tvHkdNiA+6F~N!
zClreD!|?{sG%uHPF-PF#cPkmMA at AAYFzDPVxd}L%VMzI5T}!M7B`RqMolD)Mv>$~v
zu*;dGc;5~;Q}f>S5uf1muoIQ_W$5B_eflaCo3RQ1(|Ya$tB$VlG+RJ+)XgMA5*=-)
zA^Z+kVd-+?5P1Do-|}QPB*DYk1o)~1!oVW#wy1n3Ss7+OoY-+P`Qr^wB?%?q9>Eii
zSs^RqbAtvU!+cFRIGr?&s$Rl-)KmwjWkPb4o;LHp$bI0G!zi;vA3?lv^p${4=c*0j
zkYI1T6{v=G7#WddlH+?>_|Vk7f6oaZIA<|6gLme>syBr&>rrJOOe#zsYvCEr4`-5`
z_Q|Yp_%I!Zm at kL`d36fz1hTlVw-EAiuzBe`2S?hx%KD at f28C#sKpAB7w4uz<MK+1;
z2hzzTh&|*3&gMP_n@)?~zr|@8UIhF^E4}ts{+i%ewh=HOIb;yes6t%!ITcU- at u4^N
z1)c=-Sl9z+(|5G|9m~`~y&Byl=!40%(&cYjI8{{znTa?7dvS3xLr@$)M$3yed=7`P
zh}QSUz?x}shwM!v?onhMi8+lQ--vAYBl$4i|AQ|1UbCBgrI6UmEO+5^g)F&#Unci*
zawXpWIKH%8yK#xCs{sSI-}Dd+t0_vq&#ug&bn at Pz30`U`1_jj>%hP2_081eCK74Bn
znEFSl-J}GGuE*Tlx6<L6ha~?>rR?mzeO{P2hTTLc?_YxRx|bOs)ueXKp?^P!*ip-s
z!-byFj=DMpSMiH_f^`_dzHKPI$D^>pTKIZ)6NEv at 7qZ+oHsaZNTm%k&ugt64`aW<4
zJ~Rm`Izg%u^kPN%i7qq^<VIZcY}NF0TmH-*oE-L4EETLvW(65ah7mt#i}?Ipy%t2m
z at lCqb0{aien4r$LfsZjj at TSIA29fXDIC_EvwL%e>@Pr6Jo0n~T{i8`Zu#whfjjuS?
z5x3a?)`OVym-mDI3-f`T)c$mbRkw}W2na*OUKRgl3XU&h-Z`7BI3Mdf+m|Ka&YaX$
z`?6g$+F+#V^)MboWA=R6z}lZBRDLLy;e~Z4q#KOk_GagrO#iL^Mo`!?=7?~2twYc-
zbS5={u<A`w+gSA~R4`YD1?eEHDmyKDA1o9`o>r8Tp&XMWo3e_KKuK##`YXIi!>!en
z7 at Q+tY_fV-XQvOnZ6<~#WHQ7hr2|BRso{yTUFS8%cX0IZrz-kvt$zAyL at YE%$4$&V
zJ!6c=7S5HK1wBqZ5q&Ix0-f(EnZcrDY#XX!B`4T0P0F`=M~d%{zl1dN+3|xuLT!)t
z!6%JJtJ5CBe?Qh?AU&oz6l^cA#Xzk_aJh!p1M9`?sej{QExz$044KvB%y!i`z95nW
z$(iDT(61<Dcirx?Bi19t at WLW|0&_eH)pFRWs`|0}N~>69k-?TGvhDmti#Q=)G~cE?
z>5GY+A-jw62<|iz83&*HdgFjZfUDUGF9us<)k;?~rwmY_=oh!qaU?|C1INhP{7cH4
zRIpv(AqWAKJ8tiamKw9B at Y3t3_zvA~?~`WSS@&7wHKfz$)tI8FLLG_B(81!hfbFFh
zv2r&6AYPhGF8|!KV&%<IMXmM}K4kB(YxYPZq+v<0d-3HsI9s=Yv6R#=>_UBy+xL6k
zG;XuBq_S(|nEq8<n|gx8Vkw)4U>FpET%h+2xq`uw9F{hE?SQ&gYqPq|x;2C};io|K
zQ%>{hyEqC@`B8lcGZ>ysY1Ve?SM^5-6|u8$Ip3p%*bxBA+cp-8?%j-*FYBKneMS{#
z0)LnryJ64AEm52(DR!eudVl4W<Cc~AAdc|I*B_oZOlSb%%n7HP*)H6iDK_Sp+`LE5
zny<=S`in8vfOddX;wB{fJUSHxLu6+_ at BG#fzylC9DmBbB$Df61xC?GW%}3Oz>&c(T
zOP@?=rnI^d>w8rIRG2EZDz5mEw5Sni2@{LQ3+2WGGLp49j^7qaev>l at EVEOwiakHq
zR1W{xBjdrtv1JyKQZ==4(Sr3S*s~ba;kCs&ar0>E5OS+1;Wo!uNtd4kcQY{i{@@)S
zOMeC|h&+4B6fYP8w8BbWDGD)Mwjg!b0tlgI7i~6cIVqxxOB3PkntRm2z}x0`hZIA~
z#~QY at _f0Hg=&VO-eXv+niq2$F8f5*LzVkPJWN>vcy29ItkBm{RyRoD?D99Vwad3AX
z$}U?rxX+DRMDM0$?;xl<@Ve@{seDm1be}0uytHR)z8kv at 7j99GeS-U|?#%N&*4eVC
zf?yl at pAUkZW}8JMBu-L6z^laqW-h;pXZC<i>R1r-U-%8cG3 at OPbF%KW(W#K%<kW#$
z(?}J}r6gst1ALE{AXV*w6`?}U6ky|(39!HY$0}wBF|eTXF04GX`RcaytMwG!1n7KN
zc`C}9GeViTMmh%E55u{o`g+f*p)%3fsK(TaWO{?T1Lj$@e!X`3Q?*R{%cyfAI`_G8
zgA*)zA;HX0V!LHO`O$xpe$vr{&S^kKxlw^zJ!@?W?tfx7JZ%kY%;&^kJI3}zM-OhR
zbVI0e&x`sg^GH5U0S`br$@H6>Gc~&R-iyyh>Mj{vDl`E#6{VNk$XnP&(dbT9mE(G)
zw=rxJpKDrNWbaSJ5+ycp2<PM6;(6zvwx#}5r_qxg7R2y=;eI97EP01(XxgSq6bEg8
zjjrF)qmrTWxgd6GR#uR#HZl$Yk(>h6eNz_CU#I`H70Qvd&J?bOJUL*OXn$J!BMMPT
zToJl<eLhYm=Dp6sE5IZdV<7y at qyNkB+)+e1lgWMLHe6Kkk>z_erwEsS^Pjvj)xJEB
zo=l6;XkILX=$R>rJs#Y3VEFgu2g&H94U8D<c6ATFd4?-~J!hSWtYp`h+Mdhy-A+G0
z;Oz=0)kKo_fqpSnah6_n42@&RL(oL**hmz7vs8 at h(Zz at R41iA4zc!M3VMiG=Yu1By
zr7(9$E$X*csgjo(JSYT2VHcIG)3q)ZK5``dU0bHWQ&X at _1$>v!9a5j at ES&L#31{p(
z!Yf}8>=d#Hx%9D|j<#7cJZK-<OlqN5>shwycRD75<VzG_gF=oNo9PKg5x%SV>Wr`Y
zv#Ey5V70CTZ|5U-O`CttB1lG+?M&P?#KRL>p>6Vp)1H(M-NIr^IABfm1iwNNOo`Ak
z^`vPUp-kyH>=&m}x*gDEX#6|<mrlD+7GszeZ>z$Uuj*%tI7<4m-1BS088JrwswZ%u
zQg3SCNGDOvvdJ!MY_bbg_Lr*L;JfHv2LyU46eWoHP=%5hmKifqTNA2!F_#)k6UH>z
zqC{fT54sV1l3!vBN)(OAmxJG~yW9mM14|F4#RJnFA at jOroMyD<p-zT-(;k&`4JM$%
z9M|JHxynF8l86rZ7M5cl_s;$Mg5V?}m<)E5UavN4t9(>g!KI|B++IcogQE5J&VqK+
zINJDRi?@h8BrdO^GW**?j at wKqWbwxB^(bvpZZhQA<_S}7DqvL3TmNc~z5h6=Qg)J>
zSi>>Xm8`BtvEBb#zF|W=P{%|$6`A#&ptwEnQ302L$t62r!*sG`bF1(P<!kRVzEcI-
z9`~31A;1*`Bu~i72Wonem4-`^6 at _1PzmOXaK^PKy;!l0 at jASZq)Nmss^8$^$CS6QT
zh93NR-bDK8cZ`l|zOiE~Cnal;8T at H*NucETd75SV5 at DZ8k=(^3xP$Hpu$kS-4K|E~
z+v4}>ody%n&-9qn1b8=Taj^x_otEfe|D;^*Be$6eoD5uJ688UVR3otOb3YHmU{Bf)
z#VTQmtUNHM#+lhsIs%NK<xgQr{s3StnJyk^vNE1?DjiOd=icDdnU}sjPwSkToM=Y!
zqRE{Q){tNCcept%&|keWqYODZ)y4_X2vx~NKsJA!%<R1W<X1~AFdw%3 at l}H@(6kX+
zah0c&y|@A_`ry->GHOdu=30z^#85i$SHSybTXvz8yW at tj2uWB#l8g=X#aZcV^x9Vd
z3RBjpGcv$j_oV6epHlhsDLVIc2~jHKZBmG4>A-dJBO$*K^XG5B)?{e3?mkTD%<y8T
z0XuXLOJoDn;p<R29s8_E)GoD2Cpi|*xsUq|Uw<vb9TSVzl&$fyV(~sM at T%6y=>3aC
z^OEFLzy?QBBi>;ngu=G!_`pejB^khXhq=L8R|WQbdeB?I4+(_xQ>Ej4u`MKjFE-Fq
z4pM+DV%BSC<SH(34VqXC&hVoqOlNy=xGY){nwgD)On?7zw0P)AR9<U=a{D`Tf{MNf
zo at U%U!&}0M%}D|Z9i)CPr8O`K^*i`(ZBxzEg!Eb`U(CVsbv1^#ScNx%?z28!&Hp$-
z2b&?c0cg);a;ZHT;_BnIwAG8I-!(=s=lL(9I*kr$C0J2n*!2r5^=cqlxS)7<dMFTI
zP4joW3=+aMX__72hzY$N_(Z1%pDj7L)mf`N3M8&}HOxzsHjtc+0j at DPG|7;^R;w}9
zmTs*0J8VERpz$J`Sj at Qiud_(7alqb>)#)YQHg1XU{Bo-fDZ{w|I)hga6FI23C&fwQ
zSL}PH)$i9pW5tBwTp)}FndbWBjJFSs<+7JWvV#1mCVlwG=0OUr$5V3izIFKI|COwB
z=$;!FsULOVeNx{y((?Q5(W|w}$;Nkq+>kZv^o^1?r(C}(#evnmHslum%JQ>kVtq$O
zCWMhBQ38b9xL06%`tU*(V~4s;OEbQMZ8Y at 9l5ZH!x-)p~zj8xE%79{Mll)P~I8aR?
z!1G_eT3 at 0)*QEMHeAocxMDp5r$Qk^u=%Qd(*$nijaV^C<f);fvI-u-~QAjkD&)~38
zIle at Vw2BYzmXWiy+moYEt%0^ryG<H2$dSMAHNMs$->F$2;J0te{7_|Jq5YpmM(X`^
z6S((}-0>?uSr<u&Ai}>jh$Hb?q0*15+PFY!K$v|A9m~r;Td6_fBer!Odr55YtOuOF
zor!Xwm&(sd(<`g{nNr^{Q-iK at AsPs%#J6QnJj#Gldown6>YTB6S4Ku>X*7#19e?A^
zx=3h)(KFE8tT%J73h{WnUXwjAI4O1=ij|hLX9z?u4~A3}7yeQKm+S}C&(o#SnNU`R
zH?R`nDKi at Qw_jN$f8_%uC at sOn;syJruLDp!_dctWC^GXp_UjE`tyZHhUtW1+TelW*
zWNYez;A^v_&bftcRy*fBQAN<*PO`u=JRcSDhlNZ|VoJ7=@WTLPqt8*=Ujzsn+Y+LC
zr9RkUIJOXkI37$(WfkzM7Q>$c%Py14uP3qbMt}sUU#&qMhnE8Y{#O?^KUQXb^3x<;
zPFZr9Ui4Cbk{Q*KO*p!)Dx(}ClX(EQUHnrTmj}-z*Y0 at ehsltyuUsmACSawJFC9Q)
z5W(}r(X80pS-1TDdHg_jYex(SAea`mU&<`W&<LhAp-!Tg8DA>na-JKU7XdZsc)Wz9
zS}ZR`c+38y=0RI7lMeknDX&rJfp5;5{677iNLpUJeX=eWEX?+5tynH-uIDJEmnyyy
z%K^`%4}PE&d9v4jXGF2kB3vUd*g)N`urYd8 at 9vJoUUQ>+q@$v=^IO7q)G=xoZU;SU
zmNYZM&yqoIoZKE)JHs3X0nFf|XIoXiX5(3VnWM6@*$m+wa{Y<a2HPlJD!|RSX`p4(
zS^pe{dK|XCz3JyC+8}!?`H+ao?n5P%{lhuzF(^i+#?ZF-pfg<m*bHt?Q>Nl?Sg;$p
zD1xC?CM#S#W#j1WR_4Bf=xYjD#2X46)*$yy#oyO`+$jY3)W{h%ZoH8tn|wiAM!=XM
zinwn>JVUch`fl!0te6&<z9A}B1fB8y`nxA`*F<mfz9_7Tc*B9QS%=(7^|}_DnRzn@
z9<Tq`H<|Vrx>~!SoS%YFnfMJ$trX|LPkbODJxJ6vve6n`;Ha1ikn-M7K~sw=!{>P2
zq?^K_dz1H;2X at f2WjGc_RLYbVma)+!8&MwTBx at 8ea!h45Xs`@&BPj5&BgJTuI`@*=
zEh~sY|M!0rL(TITS5JyOCVCd6V~4YPN$J~$8Rge)I>)tFmoN!=9N!E0ZLzMlg<EaI
zN3tJl!;a`@Cpais*Vb)K8ROsn#JhmB=($?-ByQ5(xn>Z2H~y{Sm#78x0PI&KVAFY4
z0}6AX$y)e$>T7U6$~fi%Ij>Jdi4e&BeMjBZ62#m*y{gu-;_f{&Rx=GxPVOi4Zt;GE
z!s>5v87nwDBz%SV9t$FU?^>)ulSMJ?uQiPDhOoZU&HL6IiV;xL<gah?>N1K5$oX3s
z=4e{<v6u-uLm-qC%!8Mh*9latlUhkmhwI+zWZyS)8BHbpq02A%BTo at -J*S8e(c2}S
z`Y+PJ_t##uU4|UQmIMZYN~?b{^C+yjy+S6_K)=Qe#$AZ_t(*CJ655StOYf>%I7+v0
zomM^PKJSvqfx-Jmvdv2n)7WoMs>#BL)qcQ-^J7<cj!*A;Nu=&{;;WO?(d87i490VV
z>2REVAE9f^^kXc#U(WQ`&_Pn{u6>R<buN98hK0&wxF+lxZW-yA;Wb*5DoBWG>j+OX
zEbchKh-^vYNzoCt{)_j`UK<Z#r#SR#9Ptnoe at U#YqAWyjGp^?l+vkvWSh}3O-9hU<
zMR<36&qZDf4b0e at 49+yi+p<7**~B;CdS&exHT)(;_O>5DP<nHk{K+lf)GtF?PnGlL
zdjDJ>r2Z4axrD4$etlWKHvJm&+P#Wf?{}QV-}@^!XI+Zj1g#9h93&ekHgr|-o{7tl
z5XBgRu4gkO>O+E~kyDm|_UNodI9_Z8C=tO-_{5RNC-a^4s`JDZ=rXsHS(vl;SkKk8
zdnEO;yTqroan&$YepX}by4EW07RGu|2o=t<E7F7V9&zpX(|99ccNEadWISlECbd~?
zgDYGOE6xnm*62YBtO=>&q_+iv?3|o<-pi1AfPjl+AYl8RL=@Ls0rjuNgha2%)4{b#
zfLx^@3>bpb#6Nb74`1vM!v!;rv~dn*NfZ9sg-CT1{M2f}inqv+-nCFIp5oEgZqrzc
z8mM2&#x_PUIuhJx|1(cIKk8Os6x1#G_0MVw?rjd2g8E9eqlQIu%sSGc1rb9l=9xyU
z<vkJjRJ3vTSW)YQKlBelUK>DZgIki<a=I}<EY-<?(i|}S%|5l2U{s|x#zTxWZ0hg$
ztS=URICe~?rjUua<S#u7`g=G+lX#4Zj9!yvMbYd%;De9R{;ZWZ+7yJDFuWkSk@(mg
zex9pel1H+*;C^=H6$b5(_aTyrD-vsW2{Tvp0eUgWk8sU=d76QAX!~!M{I)fyX`O~G
z`h9W7Iocl at NSNCK;%QcKpzxWLGQWHTT{C}fHyjMVR{F=I#Yj#*^8N>kfTvujkN@*H
z1_XGfR~fp$;^KGP!nQw(kzWePTTxOoGy!LqgSI1fmlQFi2#e2wdwY|6G2nR{<$cWe
z53*K9IUGY4sPsaE7CWUZ#0aU)m%*qy;P#WN!z!u`!((^=+Wp4leLl;!?nXJ8Z2?U-
z-;gx48y$hsJlsSd9EvMfAZh^3E;o5V8;7_TKO at h?WGA;kE}wVN&`^3SvclTx2wC6A
z?C86c$hNQiwo29F&&t5_(Bmy5$p{$l%P3VbihERGPqH3DT1kCnojlO5z$Ye8KwR4b
zy_sUNTw0g<FG6Hj`iUe3^_up&6$P-HH}*^OXddq^l%p%-f3h!nIZEG|CVdZrR(##p
zOB-1Et<n}9<x`Lxi4UT8 at r6M-@|3n at F=Uq(t4*ZWP5fg17dC}nbd8~H2|y5ko)Ie*
zk*Ua6LIY+ETm!{So3oU8*oU~ZNP8lNyv=5xZMI#U1D#7BKjvWNUmJ)U$}~Ge0tTQd
zcx#_obhxe>iLMA_C5&(=9P`LB*Qh&%$H4N!uA>VQGJM;eR{Fhg*+ea)o?+m;=&0wp
zL=IMIJ>Z(*4%UpqZ}^~FL*Sbjx2~O<?(y*=skVr*Bj)zKiqV4VE#HrPb$L!@al#eI
z_8OOeHm=22;WzHKLbdZyb)xh`1Oxy)&5)eiQ!(|XjiP<=0+D3}p#_013xjvGt0%F(
zwpTfwA#oE#H$^tkk=ir2p`>Z`^kmp1-a%Iu$Vw;F)b15MW^`<*r&ceuq(Zs`3#Sgy
zj~gu!x=f_Xi)^-1m|FVd+y7Go>5D}~<%hkI_2+$nJmTCDdAF85X?;2JNJdRg`SDvW
zNp_lpzp4mB{rtGSBaS-Rsk=-gQuv^^<K$;Rx*?Y1zvU;K6!SDA&1)foGH{QVABe_-
zu{It}MuWQR((@8zv!mG8D4?8AZqrK5hTozd$AJ1Wt^+DTiW!u@&dowt+l4biBWNN!
zn$RLEn&g0|lhYjDjWq3~wjUdB#E-i^m3jSj4kb6t<%oS1Y8oNgm)XhjZ(7Nxb10s}
zxSx~vFz;xw{{L;gY$LRu+vW#ph$Vh7l+v^PgK#_~>|;&dG*}8374cF at azK-(u&J17
zq at toH*|bFxuJ2!^*u=9wiZgFLIfmp#hN!gcr}!Ygch34(Dj9Sf54!=S<*Ng?ypW7K
ztbHwJdJl2xW_=;8mQt5ELIU2wb=AJ<+MzGOlT?mkJ2|Cqd??<&gb-8RpyU`6v;p-7
zrg3G*;G?TG*jdis8&knz<P&V$Q-QAu!%TR}NZ1%_TC%jlxE}Z95QOc<vO=ap)7+nh
z^TnV#gB>drwi3?^g*zW*d+?M9GutQet*X(O<y{07#xP?g$6n~3t|n{M45-+Z7W++Z
z=^X9b93;WQEAzHyo^i9b^??cjqmf}wzzPL-^H$6^6dKo};?s6js_i32slV7NXL5K%
zpUWn*F{fgxagc;|K^hH}(6uaYSR%Y<H5T8TejI5Kf<IcW6Wb_I6GE)N1|y~~E{&vf
zWO9JOZ6H<d?7m8wr6bm+8l34Y7jvz76ZfsQ`LQGIV+v#~lRPcm4$AgY4oh_Qov-zg
zrzkDg$7!XOkeCuORKJbfRspsmV`kWgD2=vWek%hvN!5^YqQ(fWAgFId at X_a0Kr7G9
z2IpP4jvq{FqW?$G3{V7dm~NA|4jssqDNXbR{b_(#aQJL^JzP=Rr+`s#pmFhaXM-~<
zNSgB>OxYMeHK%Z6;R|r(3vba%QACjcZv%jPRa^aSM|Z?^xQa##PqyVaF2~9T6f2w2
z6fOScdCSLAZL`B7D|y9 at kC6C08aCk`ySs{F<mTUQl%X|DMOeAdd+63Q|GJ$$V!hF!
zoaSfoo%AZ_{G0YcIo%x>1tNZT!r=VG2z^6S6#>z%S!Nmb{RBp}Tfn0a`1co2qN;9Q
z>BKp><)?bny33lb=yWuiF6gf%Q-eS5tKJT|Mnq*yp-1Oj6#Px+$?&D=F|>)zhD$5t
zgcp40R&CSe9i at 1EPEn*Ofnwv$orj<`v_L at Gf3@LXvtBIhTezSPK9UeH`v$Sm03OS`
zS9}<R>PX9*rVsKgS5MBP^&B;T+DM7F1<E>pR>3nSM6trty?J;&#{}c+X&=HPr`?`_
z=kAwL4^SOD*}uS|di>!QY%zHb44zNiJKKx|!zkyGB%$Mf$g<I*@3hKy5~T?>5>)VP
zQ)8}19H-2tz394e);ZP`_K`e0Yone+2gfc%But&mjb+B?!`U)1`;=nOyZZo2mWCK}
z#~6fUk4S%3D%&t_cmn6yvfnZN>8LlO7bEJ<q9A at fPk#5(kwDlqxAG(dg!qa}O`~{1
zKqA(}OqdpgHke;?a!t_^_}Ffxho2ev_q#>A>V=@&lhSao{PZaf6I*X^{cmpvk5t+O
zj$^Lkyf%gziGVS~e9aBaqJ69d9bES3 at ZO+|F_C0+9QQ1X1+dnYbPN>4Ltknwb2I3=
zjLwevvcrRWSo`Y4jdrslaCuASp at je@$Nblyq(4d(LSavCW1y$ca;=JVi_a%(@{I7}
zw7b=7EhRnZ6 at 0h&Pgfe(h?5I$TJK$YJ~AN!-nT2+=VVwvXURr^kbRaytMw)2!=G88
zA+NOKCsTJ1{NQ7LdL9C-t6IK_RR{K+M$CT4QPf+TFXq=kWrOcLPYguyVH*IIYv&3{
z(x3F?Ed`{~-3vgCC071uj!X}mgldz5%*zAGPfH1{r8f=NVXj1GQyDYRrZ33Y8_cQ3
z98;oGVt1hEb3$mYP^Bfb65|jQbv|=#b8<WwM{q~E7K?sg*UJ4fJc3_&1_tnbu!jwx
zyVpgHfRB|}H$L!O$c1-E89jp^ErVBLFQ%j}*0Vq;>!IU82a?=YEU<^jE;FvQ^5zW(
z4_C~5=vS{f7yhsOP0AV#+IO1eOr-t_^g at d(>}p>vDW%2t%%XbE>AU%L0B5YQnL>Mb
zuk>~KyAN$-zv)7Ol5|yq6F*SV&s-0I<^hFLR?j{FZhg0*DwCxAtnBf=)Fy`(##URz
zyl3$V(2#|$A at h3J@98jq*!&I~6!l)|crObj40!47)5T at JsKdA4icM7pij!>RSq0E<
zb|#Di at y9R8#d4Q;HY8QI)20_t629Gd-YAFIGNR&m8c^-X!?5{^tNWV7qUqoMC8yoX
zv6Wb9D^zvart$$mFrEsfbDPj!l&_W<n1`e=`O{^bieB^LN?8E8Ptt^W=k{0j0^WJ}
zb^DFdLwiqhm2g7Ud!_=YZG909)!|bL9&9=~G-F?(i9i}1Hpd@@rmG-|w?9y-vFX^f
zkbV^Uu$QS;#$e=XuzqO->_<L@{s8lYR073?$Yd)WHSxgP0mZ!Mx>!C9%mt7?1 at 6hQ
z@%vcXnFXk%sa-Frnx<$jkxWb<g|ro7^Pz5^RIf>y?&MIMDs2b5!%$VjLnG7 at r-=&<
z=sodOg&0r>Uun6**${sF2H)u+dqF?}bS_HEBqbb^@(Pyl$S=s9LdcwGM3wloUW%Lx
z%<a3~4nV1 at 4qUB>jwC39n7U2(Gs<IBUYe({oN?Bvn{Hh8BC*`a&Sx8A?;*2qGNnGL
z2Md>+tRvz`{rM at lcx+~}j4iKFL^-!@E5L5cZ$>FU)O=fhu1 at snQ^?%MaYy<|jJWKi
z*gn+3W$R%cFBg`jjbBfONkevAPDnvUgb87y-#|Xs7E+4BY<{%olA6oAdH)6iHZH|(
z6#G5fZWJ%feGO(Oc6ws|GRb*dnUR^1TdT<ly$6*Me;H at Vf7J&ys#MyE6Qb7-LeAR;
z7*#K_TNet;?KDr_H>oX?5FPf=vFDK-yGa(Nl6PaxAbUQF at q*@3DzcT^#%QKg4gse9
z6t77fhr8jLrO4|>8jn5qP%+R18K5a9E9g)Kb`|6ZK+gt;nMv~X`Feeut;%O{Aud)f
zj#P}N{?p4i&vJ(;(b8;E_ at 7PSGPO_2YqcHj<9Aq7x3Ma`0cO}EEih$ZCVMV$+ldvZ
z@{Ah<&;XM5oa;n`b;^_LouHn<bIwO+!<CccuXlqBmhIE_10u+x<gwfNqYxx^#w~@A
zIbGV-d!9M9Uj|#dBo6!V<;tmv;2p_|q1xy=lvfdCsPNyA&4>_Xm;n$dvpc`E#C7aw
z;r!Gzoyp at a+%)OTBC-mGO>_aWKIzw20C!6njYWikDaW_7*q=E4c#1$MW8|dHXM<(R
zR1y(D^fq3iriGEK!jQ1ue`<U~cqiOR>mPR5up|tiR>!GRs=V&u_D$6%(_fjeJ(jqC
ziVsQiI1cyxnkyl!Kxky^y=*gZCKr<$$=E$hhD&QR at C=~QT_DR%6uxTPPm&PMn!eTC
zY*J7o#EZNu%0l at 2Ml|K|2sYtd{%G?57Vs$csv2+9F)cJe<OcnVa<Fnwq155nLtI(%
zP3$2`sqWnl1Ilr#DuNyN>Bh`hgTxbH$wQeRq*rL25sEj=dQ#o}mG%ndSC<~8Eo*jf
zU}gEet7L95xLMxyg$Ack;tI%jQl-$Qd`n};%p&jtzkW_TFJQWr36x7sTb(Mj5(=dX
zhutGjyETTD60&bBtw;Iw%R1sSS!2=-0%Cco>flzum6^B)w)j*nATygn<OecTDlX at k
zB|K at 75oeyl%9ZCv50Vk_fMtfknF94J6)9e5$`Ubvs2j9OL^g_~_GnqmL((eIjVT>2
z1fBoIJXmR+G287o#ep0Qfj;=a9crYR-hF8ho<eU*x02aG+`)b0^NH?$;6k{8f~aj3
z77rKje6!Y=2{`2&W1XGZ0nA<Pr9>~?e<kM<#V>Gz46g-ZwXqpcaDSt<7i%eCd^Vqc
zq)J+9oWnWkrE~geI-(VO`t2HtA%m{7 at zjVVLTG-h-(Tx+w1iT>FMx=c@*lVteu_=3
zI}rGcx6a)l4t&Nu_)@5jKhU_;dMXB~K~J=J$$F+o&JD at gc{8 at c#OJm+IE)qpI~1uK
z(k=2Bb at MY6Cd=8OqVce$0d^pGYfQ`nvC$0b5pRmfQOkvnz}Tfvg_N(h5{amK2ee<z
zXT1rgZ+49=Zc39K7O=skK+}_w&B_2xnafOd_N~|JSjeWY+!dxq%X3NW8>sXVP9y$e
zq`G$D^$M(y-rv4129>o-uL7YI&$Bk<W?U&PEr}6YS8Ls2gGQl|aldNqFb4(zd)-sT
zg~SD5l~e(?@SbNsFE~yE3W7LS#DL_xX;YTynKCUxU^s?K^4`(1M9Ltxg%GSux0)C6
z#vGtzu??)0Zl71{p97WS+RP+-kEBOLzeXfa{N=GzQ(SKpiV)$- at k=N0yS$m6$mUqu
zWlqYdOvi-Ym~chb{pgAg+&2U1-<IosHr1RDv}>~oe at dCG06ddNM6|C+C-yf{Wx5Wm
zm4AQAJn$=DU!lg-r~A+}(5cGY0qCEkbE`(16y0OaxE;trsSX=H<Rm^U)nLp0X*YcU
zrph^u7eQh(s+}O^R(o2aJ)dc|<g$ip`|{~k#lQj2t0WJZqkCmcG_s-5F+2zv&Qj14
z at X$-kdquF|LOfS8);*DOJk#Dbi<>z&uS&V0d}nynFgzNVXBWzY^R?L};E<A09t!CH
z++xlaFxD(4e$<`Qk%K%EsR0K>LnwC{R1Mm3r0n8ZDL!=~0uBY0%C=1$DIxg?u3N9k
zjiy3?%aXXzn2b+>v+hXQry|TR^kA0|%Ep4D`vT7w5^vv at t=8hwSxm=(!Ugg&eK=$n
z5@~E&=1Aq*{r~&=)n;VT6u?uFr+eZdRVenIWO+(U9q4?0n8uo6j>q7h$rwKLi;m!2
z{FGJHzw{|#)&Tt7#AGs3H_5Vv%D1{JiW4RzC_Qk}BrEj6==0z$<KRV&V6TrQEQDeH
z+Nfg10JWFSs;Qh^)$o{!o%)6}rttbTjk@$n2?X at yCuthDZ2i@vDj;KhpBx5a$Th-O
ze=mE&@={Y>$!UV_2>0@?DLcbsGr at rdW#kyws6kKzYA<V5a~9c4&de;{{^O$f)teSX
zfx={YrN&nXk62>DVZBO^N=r;E5wSXesB(qG;TG{)*alz|{CIiC_hr at S)6QQelhQ&v
z7X4qoTjUTn9hN1t0~l#%)(ULU*qq*s%AJKSIk_(WuDMM?0Eu8F5ikohgQ{~lqPVHU
zA=Tg54v7?a->Xd at 1la{*yZ-^8o1K|$5}1Zt(*%RUmwgz}!~QK@#B^S~%T{}00tB3M
znqWG+yE+6aiSO~Eq7P}HSBMl-8B5793xQHvdNu3>&&?4g=r1L7IB6U=4)Z}ID2Elz
z7>o?O)_<amTUsL&0Mn;thtv={m`-*80XE)A{nnJ+=2s|bwTVLo;}d(Apjo_4511Pb
z$S;g<n+gl_lt>~aipS>7YG#a$N2Yx?Jj}BI1`cutGuDST5sg-{%yMW=n}T>Z3K8P{
zLBVlpPWsk|8b==vGZs{0?<uj#F`l+)TxI9GNO1#<8g}|>o(2A=(pH?FpCJ`BYJX_l
zn8Pc);bKYMG||eD$}L<;$3rOw!N@&>pczDXXb-08qFr$-TY1ILsQE(=z3SIlMAqZE
zhDH(!epDkK3v*}7(RjB{FesyvO=vB$iJ2OOra0L^x!zE30B_?!2pH~%{@QWtSpV18
zixL+aJS5h;6L7Qei5As7xU<x%OfJ1mV}f_xj^=NuZKQ-)M(TNjuXdz-ru-a*uYQ7L
z={YP&iv#?f6~eDo%Oi5Cjwaf4VZE+EQ#x1@)p;?EIQ0n9php{xo<Oj5PlTZ<?IIXx
zq2ukUHS?bPZ*MBy9_vO9t&0l(rR^$+M)iv8VR=g)3URvX5aI^Z$jeki*OuS2YeuCP
zshd|=FijGKc;NxN`ALoj(%(BG_vso;acpug!l!xmI&72~1|XG1%A$=8X2w|k-h(+-
z9GpR=wjFP1Yy399nGuq33(S-<&=7baTYyG;V%bko7&S*7YzRe?CcyixiqtgDXeqc+
zi+xE{Eg_k%%`?F71SGR$Hwn6u!Y9Q!7&4qt$=>*f at 1sfoNJ;29>EEXS_gc!wqX+~^
z1en!5r9-RJsj%k}E5>0&ph!vC(UcI-tE1|@VcCD){X at 55pA&hU=VtyQg|=*cPWhxd
z6OE;HfXJ{8BYYv?rO!3Kg;R1wm>)0m<XGCo86|?sHwj1Qu at MM?lxvM%RCy#>Q87r^
z3Va0OfifhTouB{EkWVctpY;+6CLnV!SBdqS!!&sbAv6&)9^fN0P{d|LqBPiOdxKn=
z^T=Z2iGv;fC7c*vS$r at o;!HiFO<BYQ_X3pcRrMrVW6Ur<LQ8$BaDKBaYf`>g%Qafu
z9?!q8iVR>YooHg32T;BDIcoo0<aL3QgvvrVCt*FrPf{F#sYTs%nrm(5Iy$W at h=gu<
zoNzK$QuGL+rdV(^XQ!1E5mNr)Xw*8oHMtpq-1dbZDa707Zot4kjwOLjNFIfLndD_&
zTmK>e92=7m2_F6iOudZ<zZkucLGp$~HEj0t9H5*}>(!hb^nm!x<0y2fF8=GPu~EDt
zWkf`xdzPMpPv7KouO#1h=Ix_<SmKNXXP;=T8!T=1Xe?|8LFYI(sk%+Tv%N07<=gdf
zlW<RlZk^KC3ib4SKbBRMXgKMslmTJ}*kRwwrte#kIaI!SCRQNqm`9L-LW-m>)_-eJ
zS?@|ytl8ZgRq#0`C04bFNR6TyIWQmlz*fOoF)ry?TElh>6j~b^kQ{9*JEGZ-&>}6K
z)7yS6|Dn1D_XVi>J^Ja>nPA6Gph4uX3h5tlb{%OCu*~Ch3ueMCHV?wZ5;7Z%R<u!*
z<C)W!Wf2Vxovrgs=@N$=Tec0@?yDRwfN7B|uqY}cs>>PqG!PN?QbukJ`yW^9Uiw=|
zh2ju2B)K!nB7(0A#o{~0sy21 at QDAvvNS_}aDa0EcO8#%~&0qFoZ#CHSGAQd<X=yBa
zXO1iv7dUJp*8asaZ?FCEEn~smv3Wnmhb%+^3W{5Q5ukDf^k8`h+()b(+2$kql|2JF
z`Dpq%Z=Ylup4liX#~vY{Du43&Jak#Y<J9|Ge|Z9i>40xM3)G<PRiWtulMYm(S^sqY
zR421j85KFhM*ICT<j>lg{42S9A!u<i#^~^PiX=bzBsearC{pvTGJmM_D6 at OYflkKn
zlLcfE_i9Bug1abLDJJttB7dQZVhXI^C#%Z;x);`)+$TFW<)+XandSDXd_FZ!*W at P*
zK6E>u%n)09JNY~3yjF+Fiz2tQA=P(J7m?ITsWrY8KY?nCmPAruCh?+_1kNlP=l3Fr
zusRV1a+<Y-Zr<lbFH{wUqjvl^!v9&2`sLOJg>x$+;yX<mXC>KVp{(qPl&QLX97?wg
zpM-S8o+*xA6<}d;u#z)TI40CM!cVa8;=r-93KxhlPpMt?J@|EDL?i9MX`Ld8!r4mu
z*Ksd@=gny%jz72k(HSWeDqT)YCnD`FmNOyG3;lf{p&S<NlnYA(N4_(-^r!x^cI- at h
zI7RH0GU9dqq}xNgf#wdvTBBND<9^qtC{PHA5rDCg^t?68?lM3Sce;-r@>Hd{0aJgj
zNq5S&Z3xR}dH&$QgiV}5&WxLuy7LBivc_4F_^TO&oo-%Ti%2Mu4JLnV->tk_x)#)h
zWKjqByW3P=VP9-0t^sqc=4jc~-$hw at gEUA?!t+h3p`R$n!0b`<sCnVzb(1KHZ~|2$
zsMR<pmW#IJsv4|+y5SWJeYu5jL1thpT%O|}xpyxGT&#3Fd5GGHr~eY;xWsb$u7N_i
zUuq>;Y;r?@k>8RKOGamj3`N)~8#NKg(rNfbcW{uj#-z&pZrwhbO5cxQmyXW6QWBR2
zf2L=ntqI~wKf?zxgODM<0dhg}J+FaRzTG3~*&RtIN*T53FKP}KGG8Y$EST`Y#nhOA
z{{$%fvqKXCu<H+D%F6?FLi{Kk9po1VNsi(gV97>Qi8LPNrhchfULpq9)}De*{4~K{
zHOwA66^dYK#V7CGU^i~-_$ONDoqHSNr%m at 6vgI1{6rB*Mpv~ETp!CyE`n{fDSbcSy
z9 at N`(mDIiuZzP+AY<sW-O$hv>bSsO7oVb at P8cDu6K<J~5Eg({-PnIVxg$5MG47>0%
zhEwsR1FH}5%SDb|nuY*ny4+oo2rb{(JY7_ze(JnN4FPR}frtl%XsV>x0%KIy8OdeI
zkeCr*GFv*B8~`KAY<n>3x%Ti067ub=H>=G^kW1<+LmCYldfZD?e{)!wbf~|*N_hQb
z at RJyNW#>Yza_J}+sj|<6sgzn8x0ZLwqPiAm(ro-8&DXI!ILjEC!cFq}Z$abEk&jBk
z0cX`|AZ=9}K775xUhyT388$gvvK^E&f7QYJG#_a~?yZA~MpJjQ8|})lQD65-K0&gb
zHKcN~mkBIzJ&PIH6($p+j9Kra&9?ff7F7_Iamm`{HS!{{hK!}$NMiHRh%6T2sZ`bB
zMHL;McQ9uq#eM)N_dz5*{l9Ww(u>`iB+IYYZTfI+Y07>$g_Ckg8QN}LKkr+~ANYVh
zkO9D0+?I0`F1Ir8ey;V|vp;~>?ipq7pi-dZC;kR0MN$eU$h}KWl_$IaI;s%TMvSB7
zO^w9#S)P6y^E_xwa39tB?f-}!m=T4)SGP8s$K9Arztp{pT@*-{tu%P+=YeG;ohgun
zr+Wrw(1ZH(8|ES`EKQy({xxfp_Opg9bF)mg`!%OhGvraoLZ22Arct%5XXP8AkN3Js
z38)KY<u=X3ywGkbmhz{ln1aQH&Z%YqVo?D$HZs)hb8}-q8<axpOopfNEhtG0^AmS~
z8mNS~S#qr|JH7(oLF(~5lK?+Jz`qd*QcG7McJ(ma_ySFHj#e0<oeZsef#tmaUtQBc
zH&(<zSIrq(--mSr4(zM(BSmbSHF5#A2%)M#aFP4SBE|MsEj<~L|6pdzI)DDrK8cCE
zmKASLO#KcNrw~#RHEDN!7Df53iso?_xmSE9_4dW;jc at g9QbV%Fk}?3R{vv*9gc!(@
z5?(sKzGmzx!j3sf-~5Yrlq+N at gBQpm7w|!Kr~d1e(&fXj6NCa+jvNVnJq?z><6b%N
z_B;|1_?wD<F%!(J>^MV?40e*dE$=}OSAWGpe)0Q?^;Fj-5#7mXH(o3W86RBzQQO<?
zRCmN at f7fy8>mYHYO5}_D!}SnP{a{jSd8N_M&BtSfuUUsU&<-kR<&qn_erj)+<M9+G
zXI`-iEaCgw9Q0w7Kzw0s%@MGF5Df`al%2ZIJ6eI9?5x&13mpq~$TKt*&5_LYU0j(~
zp0aKfI^VJtqz_|6rAdjU4iNMBfKZ-`E;l;U`08BuS6z>|Z at J#qZA>Snvwp81+;6Y&
zZoUlQ`f-|173Ct?M#OT0Tnu*UWG?ZT&d=BGl|9C!b6LT*u at vU?YTWqe{lM&OO*MX_
z!uwZdNPUTFhaPh7EBAu)GDQA{)Q#i>mnPmNK!#&2hgSJic?%7&Foy<&|34OO*p$$E
z-{JoS$*$4!0VNx)5B$n>F+2UrHQO`LC#1~cCAgyVk(X;$G;rR2&10<nxz3iHZ$MRr
z)R{4iC-#>AM5($_eszp4odkog)Im`Exo|@>PGCvWm)awmLu_@~Z=v6?0IYY}s!=B`
zSr=h%AH4|ShWIW#(*jWg7)k~&zw{IFdh1F!_6o#SpDAo)i#D6^8l5X~p5d=*(M6I=
zF9{dgG=BI|W=y^4u%y+Tv2Cz<;w;U6;)lMz4Z!2R8J<vA9O)2t`W!pALN^@>p7Y$-
zSF`WO*36mBJ~)=N2}69RsLB=NG8|a0^<h!iVHxAXYmwAZK+GF`>2e5cf4_%%Yz at 6M
z6V0c;!6AYN{@4;P9lSK*^Ih{^Zc-AUcLN9pk6!dzS*<AZ=xiKM)`No0SmRw?j}rrs
z6TTS^h~<$G%RBBq&Q$_$<o9jx)_14M5$O(=uB^oI8VLC+bBN&Emuig%UiT~u;zUpG
zj~sf45t;s*9q78 at Ix6M8rL%E5jkP$aYjfYP&ZNTk;>Zc`e*(tYW*AU1fMP|9kJ|FC
zpl7=Av+{@>dX!(#^q~Y@)9SUjn;oCqQpSg>PUs2eFkiZVkNlT50W-dLNaC3z`3O<@
z%NvczdLBin<Z$tKSvO%H3&GG#2QrijOY-W5Soi!Hv3f&~qRcDv{)8p(IJ$}^OUO#5
zDo(s}7qD7HhEm%roWrVlq<e`dPf`{?F}E<76eTl?QmskMk)B1`%|L at yKc!}>j8qgk
zyW{BuW!728oohAHE$NJ~;rx6kcyn^tZQnpx|CK=*rhoC1J8?HDYjVoxPuHy#?hza;
zf1LUkqFS?i-``4Q^_7HXlk6x(xMP~(QE|@7v4(*<*yHc7=RhtKF^~p)LJB@$0^ni2
zhd at 5eP$;;yaUapC88DsJpDl8R;u5<CSV9uNWnY8yI-s6!*U6cEErrk;eXOf~?K{u6
zPJLl)kGyp2<l{t`mZv*wMKM&3cc*h_PEw@>kvy^Vbm}|uVGXr&k%6}w+*ivc^Z#tP
zcjr(jqNZJh0v_N?Ow(p!g7Y)Ax4!o`67W(%q4lH1nu*juD@&UclAdIfOZDL{A#g*o
z=3)s1Rx4EA#vvyOf}|*fb0|`=(zJUblTBe^p1W&O9m8D(S_Rpbv4fuAh~$BTXH#?3
zR3(%DA6(4v_Of?r-K+47fHSQy9Z|pQGv=AC1KWgiId<F?eqAjQB=G^9<ZLpEv`gr@
z$8GZD+M{1=wddd}E8ic<_9XhSnI`3FSVaj!6xCHpRV8kWlIny at JeGRn6?9MhnY=77
zab1Xy<(lo9?aHMGocum`J$fG<JJ3^O(7IaHSeI3u&r<AaHY&~T^P4UQX5KHhw)6T-
z at rneHry-P@+%&NUaR`uN&r=YCY4qH3d^)DCfAI~2j2>MMW&K{;Mki1MDehuTiw)A_
zRT-bRV~Uz-NS65_HmtH~R*ifD#d`>NY(JJ98r2=A{xd4~#XyV8hQYcM!kgrCOzbXX
zs;luTCEW1Ddl003XSDtq-J(*B&R at u)s1w5m#hv347xcmlgNd7?WK5xAT=e)`HBzbh
z-~z2baxy(tT1*_AYo!?>Jh)Z1Uu8xq(#mUqNL;AQRI({%4CXrI(67cdY6NuDk)S4m
zsvMDGWfVwX8F2KHlY64p*q?J_ZG((YYZmo*>eh54c)})r1+-4reI#@QY2r|^+I!qA
zDaU?Aya=#&l7w~^c at GnIU=#he5fh3#;^4U)|6VF(Z_RnJDO-`cD2-nQ at amR?9Gqq*
z%rPIl at G<|-4s4K%b2E9=Xz3_n0{yHz*#hi at v_=zFUPN_-F-i>v+2#DwJM`k&@Xip(
zN3qHA;*SO0q*_oBO>D|0;tQIcV4JlaeXU&rJ+m0M&Np;<y<Gh*f|2&He`oE#ifA4g
zV^N025jhyP1rgyE=nB~;jku=bNM0U9aRDf%);rSm^kQwV(LR9gPz#N6%Lp!tQ)fHf
z4H?LDcnz<xBz5ZYjya-$CF{2utlNdf>qJTUJ*h+DK!K(>Se)@iq~M;_dZ=^fSlcE3
zqG)w742a6QNM|8V@`&|0p-c{xaAFA#@ocKAv~HiaRGYd&G|9Ty%oEvorGuaQ_GU3f
zO+bSn{&1VVu>P2rS$(H9lSAXlJ5LiZa*(k6J>ut);T2!}ifzJu67dIv#iHI<yPdIQ
zNSqrg9kg;Soj0&>1wl7iSbYK{m2 at IqeMcC0i3?h%Qnk%eiHaiA?H%0n%&g?;d_rzv
zcMJMNDLETsd#=D(8;}$~`O7a=C*RXqgCRajUB1<2zrUL_6bXsgs7$`|g0iz<WHT at s
z9eV}I>Dn$lneC*RLDr}yEB$`wf>vdHaS at H>qKzX_Kne-Cdhq1>c1%2ODV^uvH}$XV
zbv<+5oOfI=G>Z;ojFLU^tpJH=@v}FQG`ZP!0{})s67RC-23`ir$grW=djbD)VFEhI
zfK%+6G`v{M<rhdJ+3i^X!nh+H=v~_cuy8-K?f;AxXhIoJp?mo_zVtw(EAF`R;bNkW
z1o1BG25%qr!cLzXP5`- at rosS<yH>)x&4Ofe31Ht0B_4$`xHfV2qnm-{I`}GEq at lSh
zCIPBU8wDs{rUN6OAO27pM+WUUAG5{nBAh{2AHtCM+67bA4FMbCFA at n&+_*^Pocq{{
zlEHOfv at w%!rzh&?^YsK4|C%yQ#K5>uKcBl7tmCm^GzOXDNXSniE)KLP`}!U!TeQps
zH&whvv`Czuh$pY;Lv&>ftY3W$aR6?cd-A9M(vWR>g`cT_bqb`Hy=OZ#5BYyWcz}&(
z4eYmA?*227i at d=0*0PZZVnWbAvXWFx at U%hzJz2>1nyoYXj{<*kH+2!eE at 4#*Q0pAQ
z8Vc0hYeJ at I?Aep_sjN_)6GU}+klPiI!tDOx?Cp1-KQ4ps;_deszNYkap1y|^$9O{l
z8J{>HnZS;wrn0b>4_HRCvwsg=h5)pyvoL=}nBl`kKbwCXjtnbWy$2r!wiuVu;}E*s
z=<Kn}#3=@ZEoqfL<qW`aRHoNJfWx2NezjF<6i<M^AzDapc+Orpq at 3u3bc;g`IAhxY
z`SGn%EN|{}u+K}&`q*84l^Jf1Zj28m at L|0L$NO;N?vZ at xINizMiwYZ?^oZ|v#mpPG
zh;Iv90MF={9MVH~KV?nJ=&2`@-g7d8iJP;c&h5FhEQ;(fk9l;|ZQg4<+UuEO1wnFX
z&J|x*r0`!J-#zBx3YUWMe0K>S_~jU|U1x#$NPy#ZjjKOsoC%cQCR6fh@~Q6+&oRZr
z%56}$%f~wmMaA2dg5xq3eXdkZ-kQ>`wpDlh!AT$5HF$$4rs*lkPL at EaURE6wPrWG#
z&w4hko+a9A=+#sann=hTeemgV|7pUv7%BBZ at QT#Gfo!}pQ!-~Dk_ at dLzrufcJV~fA
zK1AgL-5O$sSnLh=<WmrKB?2idtq{fpQGzT5aPaBgQ&0Pqbf+$=SB2M~U~c|A!}5z^
z4wkd*S}7f)mWfYLyF*DcNvoA_MH^E1YW8>mi*SrW=309s?XP2ozPyScG`Yfv0PsoH
z*IxI?@t~;3%&rx3E{N%|Er<^Qx_RW$LGQFYFQIty3`i+kHOm8PM6*Oc%UO{AhS8#c
z<wbDN);WA{gPq5$#Cl7uE`r$_M9dm^l_wwcvnp!G#@@JiX(BT2uHUa?cXY{4qt==3
zXor=!avY-S(L3ud`QLz=<`6}m(Y{RD52*;fT$-B|S9!>Vq^c5<kikh6=3xCb$Mie3
zgF4;AgW*5KJnxJIi+4mi*))WPaz3LW0~4kLWF(nVrlT5>E4{<FjT-!Ylq2j4p_^8+
zr6S`YRxx~R(8*;(fpd*knOdQ5U&qzyr?t47R|(vgZ-7O`XHVE|wSTbYoP63nJ;?7a
zLMW6UbO*{v)$FjBPxL8fT!f2z$-IZpF3xK}FzCY!VJ5Y7^U_069(oO;Dk(60*WucI
zG*wUUTGZ{$+-tO5{=j!rVN*@2aUuX3tvs<}&%HArIn{iHAaeZ+5+FASpY)MliDSBr
zRGy6ZRyqhn-N`(D7ka#wSbZK=nZ=t^v~s!mHK2Vw!%<EPW73oXkVi#C?EKtatY{@9
zCNL}Z^XReJ($FSYdOe*@qI;3wk+OWq32mSqwn<3jfRTopf5-+5-b((d3&k^bvA(hR
z>pI#zhENwY6&ame`*cOsL~NHqI9i1l)m1$Pxx9}%kEjMsjhReBvyq=ZW-uSG%4yh{
z!=${&yGVL39=Yok8n(5{6Vo}d#KsjhaW!BqaK87nXDnNfx4n}vs^JDmi%|4Xi3ub6
z)V;LN+<B<=Vt3B0Cb(r($9lp5dRi~*2)7x&kH&fU9r`r1hfw#cQlrEN=pUfa=;WsU
z`k_&#iLERnTqFKJK(fh_tQGzi8^2Vrd3xhTrldzHF=}MuN~@vY$|l8#B1Q(A05e)>
z8dSe3g_y6}?-9J`3G-*|f&$Q3B(0eS(1s-(`Va)bJlNX8KEXn^n}8z-ZWZjq(B^Of
zZH`8O{0K6amA5772!y-3z6pEODL_#itZ5{$SnZiVj6SuW8J?#qaPl?UNUPLy#{1xf
zHY3u+NG9i40&#%b!<DpZlX;=h$;rAcThkW|66b%shhwJ=S}ZVAqF(jgt>^7|;WP=3
z5Vvly1`j$;SgI;SI*qR9E<SM|47BSzT87M`w8<(JXnlg$0WS3m#6}v((s`d%(0Cj;
zoc5>xm+?R?EG7`|L<JU0l|vz)BjEs|_M~3%!vm9M5=v^p?+ZwxzS`N6z=1c6Y={`w
z_gvMfQB?M?(Zm3xwd8?6ud1_Yd#C=>L!^*Xyd*H<*+~TD0s#VK7(t|unA!#Nh0-~Y
z1ULgNM|B3x&w*N<$NM<HpUvtzlo*3_+_o6iBLOh*mr?xSrKo2jkJ02;Gug9V-~;DN
zd5P+gRl4kk_|QZSm0_?TW0t_QV_zb0VJ0A=&?ipabloYF-kVLN82qu8^R!-Y!ZR_-
zy$Y!*?3l)Fhhqe<*--XKGW97#^9$w}gf^lcd}cmF+ at LomK@Kiv6!r=2x;UD|B~YXs
zGAcUIy}C at f#Lx_w1g{819cq32$cZrDfF3ra1HWlLjzG0bEX<_4SQc_H!^%3>**`r2
z3l<@V?(;VGYbq4Lovd?v*%6INKK5!%NKYk^Y(Ww_+&h)m+mRM(?b%0>IvUbXkgdC^
zptHQ>Ea0KDz58gSzIG*!^CsXfxhb$wNyh>n_XJo89LcuWVaxcACs&*2dUW1`cSA=N
zpdGY$?(<BCnbtWvGmPUpM?lnCT1R*ZTrm_5^D*BZf10Tl1Fz)Sr!p+n9xzK at D+1NW
z1RDPe8a&J6`6s(2k;pP`Yi(f1eLe*vUAQ$8TUh2b>^ZSducaaUL2oxyQFC!c7Q96F
z)^G(`2_a3en5{_$#@r>3XY&Grzf}6>M-CB8q}X<(R(}6T|0 at yNhpq19ouW#Nd{>M=
zN!a{1W>(^Ddp<;%a4D+r6MavOfdjVXr0&HVMZ^ZXF)i-KNddLDj|k;M(NgIagOQQ{
zAds4N<-*FHCn1?=KJ&<#HSEfWXv4Vsy5 at 0`5(xati8HrV<DVXiqHa-uF(1}Gv}7Hx
z2ItJK60ha)ygU33m8Y?!r<?ql3h9#!s>6b at ArIR~D$rT8Nt^))djw#C at Sl22!GTL(
zasgD<Yqi%G*)*is{P_Y)^fQx8kQw<}(h>hHl%y^4a>116*w_}q&ev-TB%_#f_P{9D
z65z_^SMJ9>WKMJK0N#^1ND7y={ul_vl`w)k=$&Fa at dEy}m7_SbKmcAKU9RYB#})Co
zbUKW$60>Nq-hN5wa4sw>0u%l<9^XIin}vjt<1r>i2xNJQgeV<@Jw5M?@tb6*#dpV3
z6LT%}E&;xn!vH6eVqrp0Dk!7PhGYHl%nqU-Cw+v#2jWbidt7k?gxS0K(dIp+odk=E
zTdGUEQ5I=KnQ5i*C?>+=?bbaAB8SqbDP{_K%=5MQ{vS|gDRjl2Vu!xaMRKpFA$MFa
zUU7TZth+d)U3O}FjO|Gg$x6!r3|xG%69Al3)7rsS)WHpNA}ST)>8!@^R)-TE`#5a9
z^cu1E<L^Co>tE1*_PrGOdwDRj)GpbitrGBDeFkJDYA(Xyi~Hec3Uqo4Oe2hLgxWN8
zd&371MoTz*mra6<s)XIbZNBLS9OYoYtlXU<Ann0jUh1LIVojY*g3H{WT0m1!$bdIK
z5AWPVMnU&mePNH6xg9AF^IB$(vh4NEa4TJo#}c7%ev|eArK^=#_J;eIzz1<Hh8=p3
zQbT)%Uckr`-Mdrh3qm2QN+gX9kpTS=)hdP}dl^^6e6r5pj#Z{h^p+&A9U*Qe{xq8h
zZmV-{{M>GH8#r at S6_W%~pBEMvy?ff#5f=IUoXgLOjl=+EWeIvm0<Y$tHdG=tx{_x3
zZ&1qsmxmCw`|ceUxts!6+x~ty;nw5Gj=WjxSzPS|NI`Jl{e?WBNO2a*K+zc01w~TW
zx$_+=#14t&j~BNd&Wk%cCAcH3oAgBC5`K8=?O#wO6tL_A(5Vy%zK}efuwqE#(T7GZ
zyRC}S7Y-qBeZ;rto(fo59%Uz=oO4=cA8O);2IZG;nfQ1xt$1b!zKPtxMZ+hkr>!+|
z))2?Cr73^3T6!YEKskMTHDDpND2o=TPYG|-q0B-ye7TKue at puC#V%FT^A9#q`oVxv
z{4}J*%o>pd9TDyXokj%ZEHh_8V0pIPXKhB+6=>l#3hAzt=v^CJH-`p60??8d?YZV3
z8ttcqXD+g^U+N#+PXZ=1lZq~AQk;H02gU@=uQv-n$vLDh!sU*?YUZ4&&s1tj78{xq
z8gokwW_}xI+qG&(>>u4&g|M$MvMr3XVSgdPC<n1C!6SY at yvDg}PZ{&Qfb^8SUOj!P
zBN-h6+Fs8t-t&S%da`rBSYc=0k69QshAQ&kxJr;;>+&nBNFv^SqJNRus5 at P=Tn*5+
zAM5aRL477_yBT(L5=$AToqLnUsAE;#2VwS7J4zbzvpi?%SJ~d|)ATuD|9TFtbOuCH
zOg)}MbWtN?n$dU>cWA4^$Km0L5{-5#{3YPhaja63E2_Awz`3 at TrBfPrqt&J?ry%dY
zjhuwH-G^RKu5Hlppo4aC$Y_<Go$J}mPprIVke#h3EOf1|_-$7O0F{s!&Y2L=E!S}F
z55Hr<tw1hgltcQ-#Znm13KS=<OgVw-dMo8dS4cyKO+SVXCh*-xd^K4;%VW-Bjyus5
zMzzDN3{r&N20sFsa(Q{9D^<1c+(rrE+#7mzOj<MmwApr)Fu4cE3t$IFGDbF-LDUC5
z=slAvMwm7um*E at Vp|Za+?FcN*Z#@5*MfO$;0d3%xOPu|Bnb>!slF1uu-ojVBx^L4|
zC#x@?Z^WuB7=M`V{ni^^KO{}+;nGKe2%$?N8K^r^m;W5^Mk^`$$V7{fPq8F!&!{%m
zfq}oSBl?n3uYNjLwW)ZQL^)4_EP;OqA_HFkCwe>xi`sjeP|~i(lG;SM#>`Lu(NwK0
zDDsT00Qpf}@jXjFG7=|acV&%t<5ZpR5KN*jvw>p%{u~yaQMI3_jP!On_h`+ at _I@jO
z!#9)im2a>t<B21cM`iw{h?e7G!hMM|>^qnzMg$1neHxQpU0O2v)Zl^xIucE%MsS8I
zR$ImD?Xb^!IUcQe%4sALuipJQ*lh^pO;qpGgx+)bBqhzkBd|FwxoAiU1jagKS%u+z
zqesX#o*=hchD=ss56j0k8H>(+wftiyC5~FQ{f2AqgmJK<Ua!zZUx#xeRH0{`0Grt%
zS?M8*J)J`O{>W{8-rbF0qoTsHr;Xll3e1bN)C$8*)Q0z!xDZ~Fg#?2B<@fFA5=67W
z`(8Z*RIHC@@rGUTdOFxK(@s_gu>AR}gj)#j at 6C|2X?8`%b)M=MBNQE1+OF;G1$i^l
zNEl2KsS at d`{P1ZGRAKcjyw6ah^>ri>rVvO|i2nu9?Hoht`R{g_27XLOrrxS1{ao=_
zHj7!K9^29z#+8a~Yp2IW*kN%rik2I0z<is24mFBORMws(ys08V#Q>=k7x`TnzAGIf
zzH2W&O>lpsBVCTxoz&W`$qG3TfV|EnaP- at NQ{K)JGyxjdTW%7qwODCDX(Ef^r0sOt
zY6M+8#O%qzVDRynt8&>!Chyug58?@g9Gm(SxP38cmEfc5Pv|c^>e!HJeNbk&-gtK3
zklHpHh@@7mx%!K2rs(GmfOjTVtYV)LwWUq_txLz78RHeMQk1j-s*)hDNyh5jwBg$;
zmn42B)i%+~TVDVr1O*@fnztA^7jSI1r(Qk-AW<m%U(Q$}j95DY_)rOwou=8T)NO;u
zz4hUWY`u(vPVs}cOOgSs!X)AD9_V{$!h{roLGq5}9tM;w2-$chLPRrucEevq&AV|;
zZL#$LkLjr<m4m}TO->!N7h^T=CGZNl&7ak<H?-?eKlOy&vb-O5t)}Y^JzHXk4)IdA
zT~tD>EP|KttBQ#R(kHalN5!o0omYrZdA{pS=#^6|Bp#JL@^eo%5I#qUX|BYoEUE$s
z#{c<yu8MPcuJuQQEra%0 at ZLX6BuX*qE<(3RIrmJT+7DJ$fp%Xo<ji`GLv*I0e|5)>
z=s8RVbaV`NOkXbDWR|qx7GQ6s4aVMV at zQIKr-yYeC9^3nmA4=Hnqh3cHaE9S<=ct@
z^}zEv)5t9Ra1<1x6vy)u!@y!}dxS^qf#9aqCo{r6)L!cUO!R*WPA-6(V*^STU2^x0
zjm)VuoQ%(xDa+ieFa**3VLtvCq(WNYt~Y!Q9EQ at 4D{h-U(7k_^qFE56ybYRR{mEx<
zmnRZhfa8>%+da>1hOa_#2t#*3VoJL;>G3xD+thho%@B4t8M>C*cfIoT#^U2KH2h`F
zn5_o7Bk((CVI;stCv(3rF#hh8-uDvvbWn%kx&e^-%e_bOMUHCCgAyRt8%dYJvdbyl
z6)ClAaKc-M{qoA^9C;YxQvwQSqzFI!9^oZD5k at xdd5&_#)iUUn$N2RhySf+>I%P5p
z?Yo;cPco+Tda6k^%{|m-mR#!9(qJ^@Py+hp|H{ML7I0Xh=4ey*4C0B#0_w+9d^-&@
z6))vjo2;y!Lxwnu^M1lIl>?ei`?RTc`-2qfn%PZfq<y at u&0Uqawm1kPD~tay^b$1f
zBfzRMHpJ-og_O4W`#@&4A7C+kRaIXl>%qOQEX{~J^E5X0?Yk9mN8?Ru<@WVx;Z7-!
zoS?Hkk6H4ND#O()8-P9PZP{<@d*%3KwSx1kt0v0UReOo3r7`+&nzqwHIK~dlYiI;K
zE!N*(7rOz)HA^#|(cM6?hHq9{_$_JVu=o4~Vyk`gxGSayT|vRQdG6z{LnMN;7_K4a
zSBTw4VCiJ_gZLL0AOV4<IuC}M!V4_6k8=^IbwGJ<(Qoif+=i8aHI9`34fy+wb)o$F
zVjClLh}&5_#>s at s!j9Hfp*>4ZJiI-nu<j-2cALD+Cj@=tiT>))mehKE|0K-a at 9!wD
zkP18<ty6lox_JiMqi;gtRkpHuU7tTuiJG%DPT?rE(MHFn<*%$7;<es50rRPw)uAvI
zo%rksGQt#UOZkaSSSgGm!OPS;Dz}<&ya|r(DHAQFdI*WU6ZN~cK7av#j40uFjn?r(
zR%ak0^N>M>#K- at T&h7bB*vI`DHz)PT2AT^g!Xe8nn%Kbd at U?GAwNR|Q3cf$*>)eO5
z`5V%<2ngSefRuTDjH@;rje+z=`oqZuhQ1Tb0NllzdWX3GR)%-_QD)31Nq%p}zKBr<
zJc~rGu?Ne5qFl-R&#4wwAeCLQsB7jp5<v>$<6oHiV0?hQE93_Sp11QLNSrnGrr)I&
zl|zxWy<@-kR-tlu!m)(-y0*ya7}5fn{+pG*j%HSu`Am^Un>eJZeLo1Q6s at za_AFTM
zfYtUjgAPum$~_7ZbMi0lc^x?V{2a*+KVTj}0?wt;1OLl*-M{XE*+<J;dw0g0y2PHt
zi~!?uK at n2MC5HrLC$tep?zwSgdxpYc^WK<%1M{?~fr1tia#N{`i^)=o{mS|>0-l(4
ztSc-pk;j)pSSVX*n-`WC=Y`o?i?2I|#lwLXO(X<MBt!;vSXMrQ)n~Zzb%oRSb_{80
z0W^#8GTM_v2#*)ZrX{5f)sZMEcV_-6ARN_ITF36BQ#kXtgp9L>noF&Wttz*N%Sp5L
zT=CZZ0ST-n`0wZcMrdp7+$&4N2u0H;%Jq0hFUp)A>><{(Kr-j=>&8caok1#^$ka2i
zlL^++?nH#RK0<A9*QKtoT4%Cvrx~EIN40Y++#&HS4jf$Um%tSsyiQ at N3xn0}z{xD{
zao;WDoVg(^`-IHADCihFSW~cY&xmNi;g~!dC~y~lpHv+Db-iQ9ta|%Bkj?*WGudxa
z1-*n4t!tuKUqxrZLeNnyM>z4vbNR*q+Z at 2-$cdwXzvQlBInRIIIoF6`I=eO}CutdX
z#PHgml~dpJKu$PlRc?`t_aJ%vwE-bV^>a at kgegD5leNTjw$*J%f8|IAdhuu7j at xeu
zp|j!bjWyoy|6Fl%0uqs>{uaq;#L(W|5Vd8>A-5)~xRR6I0Mw_AoN5iH2xsm>aZdAD
zEU_w;rGhnv-KDDC at kZ0I9ge0w5WZHo0TM}4`VXXwG+C0)=wx~dpV=ESBm{F_nPK<k
z1Yw+f6H{X%{BB%KGu=WF7RQVl=hlp`ENnYo4IzeeqKLGhDVYivhO$@Ke9D3eDVGT>
zek#P6p5I3mi~+tJU1}?`VL&8}cu6jP42)2f%E%D%X7Ee~LmI&%4r!GXS21$n+{OC!
z(Jc*T_38(ZZ`(*>4riDujgr91vq3PHgyPt6tL$%-vI98*I18<<!^`^Z##lH}8UX_b
zhbZ8%EQdGTeiV-6u*OZ5Z)|sv(**dpm22VHTZ-c-EVEZm at H-<kq9E@=i_du9Yw4kH
zjurjWpF(4~;i=2GP!c#TNy876BsJmmAQ?W5mPy{3n9i>R^?B&g-eIx3-i;~A&4?f5
zd1WLw(uw-*F?kW0(=z7%G+hZT5TSn;igw`R?KvQ{Rqj~RF7ZGywv6W at g^WP>01Uz6
z;g?sMI!7Tr6!CYT=Tv>ZeWF{E(Km45x-S*YsE=Tyml6-w1F1DR%~U^PYshaenIxYr
zMyGgYaTA<PZz_{D?e+TU3UP- at 4)_wMU1p3tuihV*s4hi#HX%iu#1g!I#lefbH9zju
zNGssjX5_`v$6{p!2(D#%wO`Qu3o6B|kLOWUv~gursur4^qfAW8k$YwgohgG%%ULg6
z{)qIv7&z^1B2+B~$PNH6fqP66Nnz^Knh at 3!fvSVXKUQh)m at Kx}37J9_HgCabU_=S}
z)-XW=P!)@|#@+B~er^Khp;NhLvK#0Ve}2 at d2IGMZQDir-xPMuDmt^Ndis88ikf^R+
z;4j}&u^gioyEvurhyd1*-F at ZyVzc~;1yP14;I;Fbb`z*Ve^S4_f%`k@$%rI30UHgD
zn@{O6!0><ArGrYaTGwt4yU|0fE}z>aU;?&a0Q4DjhiGWzg%L)>vPev5M-6BX%O48i
zx1{a~PVOPrzL9PlTvscKIq7%b*YKg9xGeBMC2d!lx8)6%cLn*lCb`m&{R4E>7TE4(
zFv4|xWmym8F<JUOdNg1+(y7s=cST*gL_u0d(A$l(w0ynr3|%;BiA@^w{JW~BYKyCz
zL*uMLz>tB3wBn at 0f6@cQ=MKwGIwyQE+%c?;O9;*Nf1XTPfAma{VE^`?;~@UGrNSu-
z-?aZSR4fNM#$ryOHh#&{cczLqDnROLcQHCdh$&kZAUmz>QwKpmX(YT^dG&07_0ewI
z{Eyqv^daUX@|@`?xcF`TKok*Swy$DW+G1i5_d!EKVb<q<n|_(HCk}d{ppHcbm_$Xk
z53hT^+U#?6aWWP#l8pTi4qkL{u7N^Dg>_BCmLr`{*8*TkSA8CN62w4HgNlEO1VNr)
z5yxlKz0(vDQBsFo;{&S%kJF?f9OA-WKW8b?xV(1my at ola!lhIoc|;;t$DhS89&)F9
z<6NH3W%F^K7SXF)8MZizA78QF=x$CaO_;$cojSZ|KZrFji}0!t!M||t(mbyZW>A}?
z(zGS&JbYuy+HPT&d?GS$fh1JOM-+;A^JsRZn!}Z)enZ`5wgq*xYaYIv<w-?*2nU3(
zkPc-Ds at AE==hAp5rOArvJgR at Xa{?dN$dM8fsl3+YUWDk2hX_p7j-Rh+#vRL!_ix)s
z5U%iuYg)u4NrW4EZ7NFk^sDQROxOdE6f~~oIAc`b1X^5E$d<KTo^ZE6YzPd=3pzQv
zsM@=Suj(Y&zD${fvd6ua_RvRHQ(dr~AC{Y!6&SSu6?4^*igZM)Y3H|m0U16kj>1VI
zOrvWxAx9A;=*lns^Y14(J|EVY0*zQ5b>O3H at Lb*F|LMpm40E5kbUc_>3t&`2XV56s
z&O3}R4Z67zW(=s83)?3EZLq48m^HpE at 1J^YE|g6D;GzmCd!QPbisWa5N%ixngxA at B
zlw3lL2Ptqg2&{kN+P!j1oPJu}A;n!`9abKrX at p*h`wT}j2Lg>gSf#V`Zs+x=3=;1E
zlARu7bLor9&=~}xKEJSyG*o#k*cmv>&HzpnBJjPt%nz{tqz3 at xnG?Jz$OR6QlCTgn
znIarW1>T<Pg(`D5#QAJrG8#&V<$&HFwHSQ`RZT!X^_TX(KUTY6zX19~y%*Sp@#;%U
z4c2EL?x_$_A=x+yRN6MtYopT at WBqD*_uy)3H^}rve4g_N{~a>+ug`e&8_d4l#*3b?
zZ=CJTN$1M1N*nCzkGM5Vf}w>YXcXGteErE#FZz$}j)+AAX_3*JJ7=uqfr3CujgY+v
zp4QB7$R0V^&PV%nAwnE2>=iHLaH~<q2U-}O)zM;L{~Bpp_D|wN&qrSpZV_`0t^VUp
z<PJ|F!~tKF``iPG?2X1>)F!jDMctJkDM_zNG^%L9p@(Y-S5*sYu4bp}*OCfhQvurl
zJ|8#Mhqj)|I&d2S?M^t2-j*gdLSr*7- at gD`b`EVwax&^nH!13SFC`JZg_N~iQJv%s
zGV)qEl(irgS?N28PrPHhkW3!8S$Oed*A%N7dMIpFF!fJi+ at _+)w-kfoD9h&W%EUdG
zOwCPC<O<)+yj4_VYAb7m%1qT?46Cg}S<t}Nc+;|lux?qH9N3iy8c*Hb99NrM&tG}?
z{n^%yWp`>Mm>v~@S~Kv#r*Gp%D)z$JCBIcBV-Dk{>P3n&UTwX86U<8s<}JCsU<5Ti
zF_5F$mQ<}5Tj<>}g4c2mRJD;b0}M2|=wCtmEzrNnlk9=~*#vZK<jR5Dk=Ncf4K_h4
z9Br at s<aU*#9vyv!vTzWN2vtm0jK7Z=XL9wz)(ysFWkqNbbH_uTaqL?0)o8nr_2ha`
z1yOs(k>#i5;I#O{Pu%CW+sxZRFh)Th-~X`a7Z_t-bN0a8hSRaYZxm7)hy at VV%RZvR
zOCuXZarnVCwLo{uJQ6r<rBA9|<!-?T_u-Azr?|`AhZL2Sv#zA&?Vi!|(KYi~ia*&9
zg*ec90OuTmSag#WBwD7s-22NB5irZg7#IKCQ8Ln$A^|L4cS?_|P3F>+ at 2_|OE+ES^
zQ3!&p0ftCJpYMjz;SvnOM03wJjJbnO8j at I3@9;YbMoOdDQiqIv`!a^LL6h7(Yae}H
zk6di)L@(#ZnCt6Nd}vW|BI13J&@OD+t)4ke)dRJJW-?1Ef0n)1wE=5W+$1H)fF;3g
zsOH60KzrkZ?mXm$um-wNMU;?i>%29K4{!c*o*MVLyMwAQw;ZM2$jH)mr6-D8NEVD`
zv^6D;jOZ9p5KapMp)WWsR9y>R-%*}0nt0qz!UV87<*y4K%VtF}5t8SFaue+vyyUxm
zK4syE3H$?tk!Hdota5j-IJ^00Piw3CeNluZ#ImscO+8^EKMk^JgMpz0a~A1MJg$3(
zmuz*W-}I>XWlUYN&IHE6p4fyO3mf8~PxD|HU<QBAbFV?X+V$*c at -shB-I;+I at 8^$H
zhz}R3;`Dn&!18g_RqfoEyDi`A?Zb4gmHI~ixs=+c-=avV=9ao!uot}V<G;voN$trb
z9h$mjChk<`1|MVB!A~Qc6q^+A5es?}KQc)(u2$(?q&hZWdx_f12X)F`TVWIiL(3X6
z%zM5FdGNl6d<-G;pCy3#g$7hv0hovE?W<y9os1wt{yW(%RNQ@)VY5HpRE2#G25bJZ
z>&k1ndx^o;@@k37^b at BuPL(^0Vs1Wx+#-t<5e2W|R-S`=Z$<U at 9B`?G%l=($qdLn-
zXdT=v)MOY9x=d_Ge^O3`9a^*T at z^#6&J4>4$nI2EIR(HAJ4s&omnFZ9IB%PC4`z8$
z2@#o#5p7WR%kCt|53ViAMR>;fA8*diEzLr>rsJceIK^T7g}JA)-Z0THknX>d-z0IF
zGcn_2p;F at LVG5i2$j;XpA2OML(?u%ARx31M<@6`hzUmzj;C8~=y!&N!I2sT#kodZ<
zpe!A!lm+Mz?dY4r7u-+QSWZ$2w3^@=!W=#=enq%B2#Oeq;3W%X`h4FWZdGA!|04L<
zYnQ-vi;Z`<L7&#W!NnUHZdj<;>}P4?J0{PV48#NaAK(=UHvSJ4H&Z#-LP1r?9oEaB
z;y0wZk#xyD8ju8(7xKe2H6{2yBJt5tXsY_l$+}jY{vZ@=XlwOza`6JX7n7S@;2C&a
zXeq+97e4+jcjz(m$)w%>>+IMxK$|BA<=9E`Ed`hLYhrp)XSlR!^Sni6Ul?>a8~*TG
zLYY7EUH5D}Q^ae at ED)9ZmPe!G0z!KhauA|U<z3yQru6usOz8jpa-n)6&>&g5!j_HJ
z+`n%yI~J{VJagWRTJgIE8aTOQi#QpDfp43Iap$|rPvUeI3Stxg1f`%2b!`@*g^Nw7
zcUA3y at -s_2SzZZa23`a>LWWQ?uJ|d-DdNIB$s6b_3NRw2+z2QV{<%Y4kg~d)IMLw}
z1DX(^D&&}%HD+tU^%>i+mpDw$S{FzVs`I66+O`wzTh6iL3C7=x>HsY^xb(B93*oN_
zsn-P_!s+a{t)0SUvvu_I+pqU8l`tR=E-&}REs at ai#sj8C<E1TE#{yc07!vE+zyAU%
z4Y1Eo999rC?1I_yra6Q7(Fz?f_>z8wi4Wr6O<lbP?IRq`#CgU^>M$38dxT4>0`;sV
zp?gpEUT_!GX+~ZXc1I^mApgPi<SV3|pzX=Mg?Kamoqhrc1DmBgxe@%;A5kKPODA*Q
zlUg$}C at M-#HxjEyiD^CkRLViax;y|F#?aIe2)&&aja~+S`}cQAW<u}<(z?iegcYG~
zR)tWrwQNnyc{<H{mRcVEse;Gdes*)8-srNNZQ42DW`CZ86!)U|Va7|hh?r)$E$v2m
zDj36>OIiMn at wa;Wp-XFO$LSgN;XH^V(NU5T$&I~^aUzuR8EnxWV_WByv2Fxa<1V{N
zxKwKb3TDt~peKb;QQyItlR<ePq9 at 9st@7`OPSNzs;IiVpAtnh<wf{C`2yRxlIS~#4
zpJH<+TEflk+UG~S01*DOlTGKcAnSm)y<#^cDZ^SWO{0vr99NNcMU}Y|eC7~CQX+DY
z<47$5x!=}`z73 at S!x{MYPs`RvITo4P5UYcnfW%WgkH-F37D23Y(Dk>eNT%_AXR4PS
z^J8M8;}!i!Vadte4#~RxS}FoP*TP>RVmBfb!s=d-R7`%nNoAW#cUD+sm8 at QHLa_ph
z_v)a&gz*T3Z}w(b$!6DsN%7Y^od5lqyEkI?Z=g+^qSOA{E&DpHT8J$<C5|>PZBD3p
z)d*5b>P~T7gnq-X5Kq0t7$!U!M6hn(?E$Qg9Q(k(<WN&NEu(ogoQ|N6kp1Lph9o*c
z=?;H7h at UuPWok^ogM+fyK0*@T)6`YC0<m`@nR+fS7rw0oM_XF;pl=X?)5y-eNNDnZ
zj871?&)v6$iw2N#tE1PaKfE|Q0Oy5bkU6^FN0A%->f=5QG0EQm)4!)#2JKMG?8PA$
zQ6!^rJ-A>=B{NDl38t=uV)NBBiK~keH at Nvxm!09bn^EMLP_~s8j8<HH;Ikt3wInN7
z1G^y#_qIv;VRek_l?txOoWp1&9%cX+9sk~5h);o}r4-4XQ`{TvbV^|R6~m(b<)zs8
z8I6gLoc=(bMN6<_j-z|S3aE!C;U at ePbB$H~gg_FH^;GFIQy0Vg-0tJ+vCb-M7i0Ei
z8^MM=sd(h($f6f&<)j-miIT6(J^@&A<Fc+bL!zSFG9Mx}|JkX!+Q!L_<b>}qL8dEF
za_W`9chQs_2D0s|Qtbf-*&-z#jC)#TWAvg3^yJ22ceG4ykaUTLQ`O+Fxf<M(xS(@`
zq at t&t;bsp*xmB}C1>6&2&JoE1gav?cl5d22lepF%BIU8X{zUrFKM?eFS|uP$^WGDF
z_cNBL090|x{0kq?beA|J)%6T$3?9%6yhn+UJ`!@dLFSb9 at xiLi8Uf04LiVehsx!Uu
zsT7fN1Xlp!F&83rm3L0oL(E8FA+X^r%IU20%M*{&H36SNaed-qpEnC83$XIMGqTE`
zrV>>!s**GlVfDU`L0$<!U%z_d50uJe`(Z3`vzY3&^8H6|{e$}rf{RUWr?{56y7X12
zaOMF`sRo*vcUyfr<wxOzVh`AFAv*eU5n18wa(&kJ9#)ZV$D1S%G2(6aO&X0qeCX~K
z2f>ArX9AI97bw_xl*LJZPie#E%W*;?mPj11UIX(p_8S&6{UBdM+SfJ6_p#F<-I21J
zk at t99GR%#>+%%9~cdWV~w!5yA&O?{{t2>qjYm%A%=+nVfzS2;BQE~?=#0UNdjw~aw
zT%A>ULG_CPf>dAzk3cp0ZCmk$Bh9biYd;1=s|_w7-I!@he|6%^G2wRA^HhIUi2k+Z
zj70%`Hrd$0yqWz22(&KQx)S9y!0A<t1=DcEO1opu{o^oir!p&jHP5ztD~O`{9==kD
zl?$i-Q@@dIjCiME$1?*?h4$6uEbK*bdK^AGCUH){GY|(jBSD(Umyh$7LM&Ceaw$4X
zQ2y{3^GlOA<>Eg%6Nm8BUGGMfi=2RVYBrH=DvsfPEOS}OMK3p(UoU{n6RAO3x^G5?
zDreg1_RkSswWu%PSmiA=peiDsGy)+?5o{28$MB#^?WVe>?ZqRy+t32rYGBq9PNo7^
zp2CuIU=_A5uzA6)!c|LIBSX%Yf8->xX$8w;=^rM4$1Gh<DZ~6{T7c~66>0<!LJuGy
zqC?q77+u+B4TL5JUI?mRN1py4LRJRlf}#I4N!1c_sOYzLab$)$J2J7~4fkH9z|j*g
zh at jV8@Pw)orfQ`Hy~i{=egt9UZEIsd4ktu*p%LVYbnb-b$XugYhKg4tEZ-?|E<C$_
zWiZ?Dh8245$D$P%Q|(_in<%4aUlRl#rd2Z%5Ep;rssE^WS8GO*O2q{=EYt$#2o-><
z?Z`Z;cl&&Ue1ohLK=%<O?|pC0EypEH7`{td;w|wkJkL-Ff!3V*TDq_Nzmc*^J_<@&
zITT!h&@g=SP-OjBm}*CS5qkHl(6~H%eKrf3(M^nwF0e5MklZezuM>9C6v6O|S`1i)
ziv1I=TE`MX;i9j%wH)oeCvd6a&JW)qt$5E1hsD<Np{={bcAK7oS4VxGkFC_rA+&a#
z6{NL~D5~czdIk!>U0+MNvtz{YBIBf=2>dUKfjhpcD%Oh)F3~78pkK-;@Q~%qzM@><
z#s$h~6<ix>0|ORCDTtf8%zg9%@6qBU>QorzkTr7en<cI}RU<Yg&n8E5AiozE5&D1c
z at p-10HD?cbo7r+bmf#2;H?byMhowp|%UQ3|Ev;P@)|L5C70^J#ZC}-F33x*fYwvbN
zxV)AAPvJkyVTjB6c9*_g>!72;@}<r#QlwT?5$nQDo@=yObn^y@=za<We4~fH<rYd<
znCI1fojnHD+`2`#A*Era7YHRv(Pj at nSd?-J-Tx(RUodNd*4yloe;0rA!(iAFT%2Z4
zwK8P;2p?E_$c<OpIRSMH<`w}!a%X-~OqNld_DqmgF7g}d-!~90RVK{iVXG|3 at yg_p
z1B-p~<PaGFbNxKI$Z&p?0LlH{#@ftz!z<dWwy(h%i%5rf)_a!bKdR_Rq}$ZT0O_dP
z$1JbNLN>#57(5w06T&}e(wTr}YbSyjwQQ>DVy at q?s~F{SYfv_6)+RbFe_z;n)*vfl
z^`>UebQ+uXgm}S>4O=PbOLidpVX5Dj#}L)$y=$?$hBtrzl;zJEiIAapchEAfzKr{>
z)g4c^iEJ+t_f5*&uN;PVfXztz1(ot_Kr{CqG%G=VsN?KDb1?`-DB!z(8u at dBQ*YGZ
zr8cp4>gxINCA1aaPOsyLiw+3Z>-lb{{M>#P+jMz;;kA&uT2#yNHN;@lsODx*OhZgd
zGef^>XKf5UcEbXx8|=Cxc4TCWVa>Cp)uctkYKo3O?FpF5g-=JKgZzP^kc$Zt2@;0m
zNMNNrrNRLVER}+Iw0WjUTZr`qaH>c#IB;5_L%wJAjNZ$9l;2J@(bDnX05;bcGsN4D
z=22apfuq)Mh_e)O>!Zz|20O$dgvpSlM!A6*@0X|u47<-(VN?niL&vN@>=xf`8Xq$>
zEZ;0jRyT+&qY@?O&p3~TqV_&gHwtY=r>VxdkUN#gpDw%em#Qmuo#$X|xg{&yck%KI
z><h`)=zwu7x at Kxd1nmsfPCKNo_sWg-`8u9mqf&pXZ+SV5Q4<+2RH2p=MhNum0~64D
zjydTRx~n(ds6UDXb_W|6S(Z_p=etudqHHDu3spo^(RPAJCZr&_I`V_$(s+rz(9=n0
zYGR!co_)+PFQhn<%Rl1jvax7>n|6~QuEs)s8Rdfd1ebv({>lM`_Jt8gNazp;2W%$8
zQ6k5`ABZ#yY3NcSS?GPzb1PvVPkU{Yle8Qn(tj%#s>5(~RWe;A1xF%MEH?nd+R|wr
z);0zpenwhmx#1M$L3f}))Gnc!KpN(^fNClYtF?PzQ==*s5+5*HCq_CFukLtkncat2
zlaVjKQkPuqftYQ#MdOK(7YF^97 at 4rPwz3fHrE}1}hv!!F8=A__?rH(MhenzzfUZ%!
zQTT3F1I8`p1stRdU}~{KfO0#rv2e+BA;*LNB*Y9U?Z1H3f;SuVv~$kNo8!}0+kLuS
z_7mvGO<VSVbdUMrm)fC3Tg};%Gus}uCpG#Uu}DX^92R%bW+=Y9=gg{FksmqpN?#P2
z>MdY{d0wfc0D9~sKD%8YK7H9z&_}h at d>`yUkepIvyvZ=^E)SY|HJN>I84gJUe5Ngm
zXZRo@!H0FjTU)57&ltRD97VRv%!~(x=6)i5K_9yXhUn8`fQ?oo`uuMlfSknKGsRhO
z+DMzBut{s-GtWrYj+!0^SzmK>6j+a#&nLO1Jzr;>n(Z<y%nnplb;vM4?Uz(F&t)2E
z_01^Jrs0wTHlC2jz=dVZ9QenUZ^bJ%VyQYu2|Qp{0 at IC4R@ReNkmw2z!ea_EcXy{c
zIp;AZrEi1cKm1P=>0n0&Jv$pv$!g~_0w?NzW)4Jh)swteHIhv3f_P{B*tYn7lVTHH
zd+-ak2f9zm&vrN~A7MMpt-QRqrNATPdpw)lLn{9Sn(YOY+mhrI<vhgaOjZ26rXMHN
zOKW99X`0(wNB48QUxYe0*u2<@OQ%9#uNmEL3$zabk^l^nUaNCeo?2SMwnZ7`E0w}e
z6-O0Z9sU&v#Aita+<Q3Fy!X1kIk7)l at u5bE9PuZ|(E%-dPM4t6CV>5D%K~WEN=ug4
zLcthIb}8n_RVPbVxDD<(-JjM?GZ8#{6Rd3V?>8u2|7&7oFA<Z=m~wdi-uhxL76=^u
zt4B(TuNiM89GOA9yf>rrvOhCCR#odvx at _3ia_!Wo3D4Ch{xnh{2 at q4N6oogv>C?-j
z5)1?ud-XP~__<RR4L^9GP+YINW%HB6CY19xkFgf8DJmQS7$+j-Q}16t<%K;!ebEQt
z2dRoHbUy}`N&ALsL57bQ{$zk!-4?pFF5-z3d4I(*fmu<EGbD-qvXC_)Gv>299GFjs
zff;d56QkCz8aoC%>d+eNA_~OCRCal4klG))*@z<?u_N|l at A&;waA~xFLA&q)VrOu<
zrNsNao1X7va3;$yy<L6f3uvY?Q)M?Il)1|%h7`J^9DGT`yAuBYY2o}AJfX%a%X)>~
zify^-0E*0X<p|{-)x;M6^X<F$eK%&#OY2SFz{kc90<3K99d?Nt52}K=B~ND~D>AZY
zEcY!4a0hWNkx1@!$*m|oQ#=eHgyhX=Gz^fH`h_y`q3mh%&niJrCfxeQ4->3}h6A}h
zRB`uZQVXcC=(Npl!s2zVkFvv&Mv&H)%1n(yt_L-3_t6l8cW_TogK}KNuT_kN20?*>
zl=jZ9E|3JQrO$V)J<}&nv!?mRFS^EEx1Q!K7iaL9XX25<tt!?|HaE0Qk=FIpvYDpK
z)1{Dkl0a+5gP|=6c~4ehdjp92z9Y(3s|Latr9Hwz;>YG{*LS?8Q5PIw#J&23d8_`(
z at qCU`o39!4S2NFA_P^k^vrG9KH72)NJU*n1O+V1orvaE*J`1u#_c<TWtx(2Kms_@*
zv(D<w%EglMexdRe23b?oJpli#DR=!>Fyp0c=hI$x)AFA>kwei@%|KuhJzw5Me+l1A
z4)YrHfcySSxBF<2Bi-)e6w4$j&3-?&18)b3PitM1v*Z3v-=~rk%k|2!cenkxDL$|j
zl80azs7Is?BsCS=_`%M=dRhnf*ZhNmk35aB%}SwOXo*@{XoS#Y{>N29M2m%pF)8jw
zsS^*zfTHo|4*9ku-orC2xepo81mV4S6Zid^R1d^2ITL7%>Q3Q~ik9>;M)9_BYNX-P
z8Q3_22<n-;Y2MG`?o|J=_3`Tk{kNn~<6f4nUJQL{J|b2Rpoo`8jf<<*VIsipef~=C
zjSM4(hsN`#kHI(8PKojUYD<H1RBq9GPxUrhsU*{}EDKM^sQ at oP(7y=f%SALN(Q;ib
z&|?zG07C}(#^JKLOkk7c8pq(UT;0*fM&R*ZF0^szbb#u%=*21)C>S2;ApEs~Q96-!
zF`7fvb#H84#nDMbTT!FJ0n3y85a4OU*=(B|PEbF-Mh^eZmUj5I0ES84KG3^@COE{%
z^jX<#=o?a)QANOU!Wwn{l)#AE;~T8f4E;*D5il9i*6}&34i(gNi}X>6g7egc8_%gG
z+;^21;?z(ewABN*-NB?_sf9r%t_|rfPG`X6<h!<LUP;dcylWySd5Q!7nN=|3Q}Si4
zm2XH*$)NO>a{*%bFxVDwqaUi%g&NWAydmpyY!`z0kRj^-?A3|T%Uw-mMX87bkeN^B
zUj;^*Vng7Mz!x<An2vCmnd5qiLk_$YJkToQNo!By55Tt}PCN*u-lBZG1VjpqRAj%t
zaQ-3g|D!}SN_cSbG?|#IetHh#m~!emCLKNqU(q<9a>-be(~@;w^$_^_)^<E)+Vv&h
zWaOelhbH`vg9RM4tmO6Zn^QV5VQZyQXar=N8#VZ}iGPYOAo?x3A at U?^9J}EX58)Pc
z=61dCMpOtgr510-D13LWl9CO6r$F5pM=EG9;n5jzxxx^vyS$w4&X>mbKkvbYqc<5V
z2w~R7UDEv~<>49;zE%XBs~~Z at 882QV!n|xcusYDOIS-K9Eus}ts+`|awG$|<xg at UN
zV!+&RAY*F|&@l9So2UL&I(`Il$qZ%0*O$S;R!8i%q(F7oLlmWB(ptC|Z-WP)XTm(V
zXQ^`qX6;lkXm^Fv;DS~>p+}BiG<wsUJ71F+6T5jj72bid#o(A+x&Bna^tt1ha7*mY
zhT02Sc&Ci3rko8ihVEUo+H8739odc46^U^SFW71w1UB5{ms4x`vwv6x9*{h&7n$=a
z!jDvzsyTHlEs7OxWSFEkAF0!)Ok{T)OOxtCIb;+vP-&jX94^dzPSfn=|KdHh;jkDi
zuF|Zf5Wvx40~FbIOSa?$bl9pT9$J5>=}gs)mJ;f_<09sdB0FVDgpZEb+vS7;4s=Kx
zY+H=X5Mbd{4~7ntVwSX?)J+Q=d at mkZer8Tu)(tf2yFNY0lo6o6Wr}3pD2wXyR&*eX
z<|kCRsWCh?GQC4M7!;eD__i;g>G1<nIcJkPB at wWSxGH8T#En1UekTVxA%ff3b(sI_
zbh^6g1zdrWKy-Ws6Nf}Ek)48?D#LR8w5T?#>i)^`ahw`Si)V|1aw at SXpXs;u{o8AF
z4}9~*pCTPQs4~JMg~&D}WT at -iKqZ_%TqiZW9FYF^aHAkL+PzH>>rYtBLQHap$|BxO
zmi0_Q%5$ht(bV-v0K8v$6{^&HkX7svai_ at pZBd8<Z;U*s`j)h~H;c0Iw0W$LYb%hw
zIN)LvFkgV~8m?)_L15E8h)OVxmr1Gf(Ft{cX$}`R(xfma9RKS>+N?o at 9DI$0a;T^x
zW#7-VHS~@9BI=6(iLlj72z<saRY42eG6)hLYlQ&ct)dQR_~Xok`XYexFtQJKxL~1(
zyINq0gf33~KtpyxqdV~(E^wG&oJ=BNtH1FAQ<V*%cBel}_(Z%8?`*Jlw}10I99%Xs
zql|)Bb!rIZBSVq=(=v+#LiS<M5pS{YpzJu`1>`?>D`G4EP at QTa2c-l3(Z4l#YgZDp
zR<gKf%=6NhZbh#}pzBLW)}tU`Xj}ghr7YXYrTlVz3VFZ)<Hb8lf;}f2^_OJ8HVh5^
zc9`DdvRPBkr_>!b2_|4^TACay%{qAhse{Q?<ES^iOWlt}mSIJ*@niQY{kfZV*>5i|
zi)%6>u7`W-YhEx$SR+CDOWBt^E+isD0DbLW;}WIQkgahyMG9Wx?*U)Q9?X)W;<|!6
z at s&2K*;4KOfP%L<w%aEUMk`GCz{6@}{_G|?)mVbQq|LdWEa95Wj6XKWaDIytv>+A%
zzj1xS=DD-g8W2P at bsXf}sxj_5fkFwtgtKuTC=nz4_GfYLfFFgqCV?-%saFg~qs$>m
z-vTV&lC|bX$oAbgGNR_sx=|Ct46IhE#C{t-gXRy9$u+$Oj+=bUH-WkVdJ#nuyve5Z
zWyBgkN at h^Jhn8?L?^o-0)mFBpJymr+RIn!`gO!qYSKKJJ*Y&BYtl?nJFR#f)+V*(5
zfA!o|<%<&9zb;-?T+a6pcULKg-gsL9vjSq9yFN0<pK`SvtHXKQ76`IQ8Y<{|VI^eC
zw%@h#{<Xwv1!3sU)i%XeP)>y~h%6Z+#a@|bCrKIc;-17J^<+ESmGC<6=<x~5g(DDT
zW1kr at a;8$)hn=3 at DD%$>s(*-UFUDKh!E4*@wElc~$sqJ}Qu=W+fVEs%4Pr$Jn@<`5
zCYKruf;YLSVBGT@!j-?3Z9*Fw2!0IRG6g?~hfCwp-&opuGvl-X-n{ha2zx}14G~@a
zI~VpuAYNm-s*J9a&c<pYSNrdEJAt3W8Ch2uzNIGZjg<NN$x?_JC-sv{Kn;&9HqqNP
zQh}$fh)tz#sk1wH%<Z!iFoN$TGoN%$wKD0>O~+6$xtZi_QsKTC*Ako`PD@@6J5M8U
z^1le_3m1|#c%d3R8V`YS`1Wclj(b4qveF6*{Goe1iv+DeW%Y*o*>EE{M4|l8=`$*X
zH|>Gm4rP02yIiE~%l1jrWGj#?`>f>7 at hmrm-{CK7$s&@PiG&Kn#xgQU4R1`H7YggD
zI`T&nay$-5IDm6}O?9tB%S9W!8sal@$s0P|+`@8}?J?TL4`g6L- at f(UW4^8~9-%MM
z at ou6v4j!=oorT6?oL*9<>H=5)3(TOuZ*g&92Ua;<2am%jy&VWub=($=Qezr$V;D0Q
zbjqXV=x?V*-t(CH2p(1>cJ3aj1~o&|tg;vY2mehPT+3R9F7yNY6wDA4diI|2%$X=_
z(;iq=5s+cKdv@=u$T+bA6gq&*Wt&-~O#L1{g5!s04_FTnfx7_1uNV<_3!@_sXt8|R
ztMekzkN^p~MVp>E+tp}%2A1aN2`}do0LLKCP0`T*K&g;*uVe!WQ=vW;+-zjj`e(DL
z8qp%hpR$N?95Du~<{;v#dK_|4S|N+1l;yiij9$3LMziHa!CVE4QFQV#R<5fXNwv6N
z^0yj*bDv>;>8k?CN3K*T&{IBcsxT7yd17+qgdA4SpI0>+W8m#RKSyYGncodzdTI!<
zWp5unE8f|+$MO`O-Ll)s8UshL)iV)@SpaUlEFIeUdFO=$O)$b26s2VT-j87Mlr$Y?
zPY=$#$7cdS$<CVZXTt`9+!2 at cEY++OkgO=rnO#AvjwDl2Jm&jV{15hVE$TwrxZa}z
zdo4Ek6G&jV$E#Kc<LSaI=zS at w-XRpG_9R$#gi#ow;Ts~^J#?;+HFr5_s9!Wy6PGt$
zoBHxK at -C?&B(^J5-PSpE^s{p{uMAVj=$`H)&yzc=wxLW+o?|)i;Pv|<7(>|z1JLib
zkwymGE6Sqz3e(kquiT=m=_t@^MVdtS_-SWQ1g$!RGFiz*OlVPr%!XfJb-3-|vU#lk
zIn-b<v?LKaobDvBIfSeMEc$rD at a$64X|4F1Q;mKJafEPCPdScl)I2;U5#sKEd at Wb+
zdQid%93f{7V{rp2+;M49Jr1O at +@`d+HjB~^k^QpHz7Wg<&HFYKw#j#`9Th6khVe?W
z)>AO7#qSo)Qn2S`TU29I87Bedg`=4iwEof4iz15~K|Ic)kZvN^B;S4g(_)|}jV6$K
z at KF98Ks8y~u20A2dSl?X3J&zA!|S>&lcvz!K)^fNZIC*rP9n9<rag>9kzTcE|9Hl9
zRW_j$g<e#?tsi|3KxgcwAa+Gm$LfY=vHr4SOHf#}H&@KlC-k7p%GsSdHApQUeO0VL
zd6)|E?ObEmc$XnyjfB->4vMFM()AaVJlvfXmQE~N{T4hJ^DnG=)`d*^k`F01!<BKG
zGOsEaR1&{c&r85x!r;tP+NC;U8^PQSzyhZBVSLK|mv5bsFZ3tMKO<UY`YhDRa<c{G
zj~=#a=uS6?Oh_AOi{lfUA|j0}gQk?sm#YRlb!IXHR|)nQfz3=zQRc}lW>d9ZVY<YR
zw`2a-$=nmeN^#G=*x4-Txg4TXtX<m9g+VgHWSLN}7xD`<t3=GzF<-UBN9L8q(Q$i4
z6ni4@{B?ev)GDixZEkt{Tl7Wqy1tC_ZxP9BRsRS}Hruz1qf*5^<Ouzw%S{#d&IYWh
z9;G-2f;&0Wf<{A}&S7fIncTAr6Q9?Ya55ZjoD2IqEY`5R?7v*b8 at d;2a0PkIXgGIX
z5-07}Uz+RbTn^o7nCeg$@p?yR4$wR9<1z0h24}Rx3=cvu+b2D3M6i;$zu1#@WR<TX
zJ<%SF&~D(B*Jp*mhGeD7vd`n>c1a1a^QOu+76N?|zTOt7<@wa7r5cW}bCF6mKoIgM
zNq68_{xkQ7IcuSBgN|H;C<Sq0k$a9{YonzQe1VFEN0ry6!5EbK+srYnlgJg~O+4XP
zPou%n!2pG&ILF*>xc?f!zS-ePmU`l#lLqU0ycwV~XNkyLO)TesHET}FD(j7BUedLP
zkmd>(>bTu$hcOcj0MF7l8n`i#fBypRz9C$nK%_L7<w<>N$yX)0`^D&~Ap;msQTVs1
zwNvBzk7W|lLDmMcP4Oxh_!8Z}mA_*C9!08KxC?_O_<J4tUNoSZD<4(9O}`S00`#{U
z#|`^;k9>K at d1{P~E%P=yADNLQjS{-9e$%Ymp$M9sk>I|;L!>N4uhR&*#x{G)F)u%N
z>8M-++Itt<+zv<x(zw*#_<w^Dn6Z$Z;@CQz%x*#ML{(;(uEP3oAX6LCtS!P0Q&`(3
zM_<_G`deD`tk at Y&xb#+Kj8uC%^iX^yz%ULJNg?Tut`7;D>;5r}u{IEgU!3gDCdPos
zeGL^w8%r`t?B<r||5PaWU at QFRoJx?1H;n2tmy{^eVf^EV;^USJ81EFhi=Z?^pGx&$
zY}{FuSG(RyZqos@!uBFXs~L0mr{P5A+BfP?WZ0kA-hZflo%JmCom(aI6e^+{ok&5@
z0)S!`pC(Kpj(YP*<}`avk+pZC6w1DYL!~lG3j{|vG15{IXpAK<)XtmL&{)GdH)#ch
z^ss0Pp|kXby|6TDllZMqwH`=I5NM{^KK9;d$g?2ceySX60eyAvgJ?7m4$8C+-ueCw
z<rU7p8d7{QMEEw(wJ&?o_X_?I*NE-V0=l~phE!=SEj}JS*Q7w1?<S==n(}yD(9*Uf
zDthXd9618vHXKwyK?g4_E%a;<<gD*OcFg|>uUI(h at OR@83bgXAh;dpI`{s6K|8-a!
zs|v<<bd%TRW}THWCUvJ8TeBpIDoo6j+&`sWCHlR0`k&iwkGJ)Jaj0Y_6M$?=#ujTe
z<*N<MeuF(@Vt*tcf<6W*^FcFAv~{Qb{UXea-Ln>*8*Nc at da9H73S4A?@1zPJGERp$
zO{vFbos6UGC+z%!+<1589*q;@bUs96kEk!`m5UEvMwWV1rL9r?D&=<WiwO+>230dI
zUeIo`208=a8>0+U`qFUUQET{Ei~n?u+(UoLnsuW<zEy|Xe at nlBfyr9t2tj0Ix>MS@
zSLZ{@tR*of?m$|p0cPg5 at sR|%-b00Oek at uj2N2GxGJpW;#Qc>bj=7RuciTU;2gy+`
zg**g`DNy`2h#9YV at slL4t8L~csaC}<Zrkpb0*oUl3~c>Bod5unpr84A1b0NvXYSpf
zdswRx(KLNJqS7+=$0VN3%niCMYI?OTA6F!?yC+bGR~tMw<6c;o1mXU_j!yq<>>;t`
z)tJe{MOQ+d+$aQ36nT&@ZY-g-r#1^)KHqgHoU0M;castRJxxgNb=)(R?irYO^U(oF
zvc`f}&v3P6*SO6!O;^;%cu#(Ft1Z%TFFYcxMxGw0{VK1RI+&nqQRH+bjUqm<hLgMG
zD&=I!rhYO4PZg?>ey!&6CSXtzpr>&B&h4UVOPP%xg;;ShFhA_aFYnfpo2P3?JwpA<
zZYN&xC+Se}!MOic`PI{x(2#`LzOA3#DMwG)$4usl;77)g6w~jJfNPuBrEbmYS4+zZ
z+V{NS7*4r3Mv=m5_r{kfUZi!LGZ at SZ+v<>`VO6|9*jnZd5N}90;EZwq^+C`4GDS>?
zhX_CVnb0B5&^GvYeUWbi1@{<lsrI{R3<_>gE%d?g=kY!;n2^JmTnioj at L86E={&dr
zJT6N{J@)s(WbY`AN0_{^kOuW72ea0@(t at knft*Yuo^z47nir95mbLv8h;Hklxy#Bs
z#NC`!THz)$!bl5~L^f$1r$Ig<{|nYA<fOqqlKDTjX1Dkmk%6fzgSa at NJDMMItCdN%
z>_oBaISlJEBFxzism6#m!`gkp{$`y;dWj8RU!byfrxa!qJ}Fud(BeX0v at n8hlkm5P
znjwv at iw;?pR@@sdR+!JdNRhm`uS^LKC>n_QksF{DH|2d7fy8eyh!%Im(M0}o(q7qI
zxPuP=xmF@`q7i8a^>wpLcBJ*+unHCgA91w%{9RzY-QRJW55FtvYV{L!@-fJDZt`&5
zm)4DvAB07wU9wMY>v&;FcFr$288^CgR39)M7Z7)n+#Iygbg?O2(r*{{d5r}=KGtgf
zZFLhF!CkqZ_4B8^m>rR*C;D_PAcmZ$i(`>MavTT%soU0#i1Ta;e*2vEgpmp|N%{Iv
z9*!%-<QKcD(NFoLrwA6*h_}70ix(B%(^ojKDpE}RjXEN$zrrl~gE(aQAoiMw`jEPq
zwd`&kT(hEOlN6b~CPU=)pCyk`>V)=m6rS3-<i77ZOv09CPK;b*82EKxKV>(&Ex6tA
z9?{)y>pNZgJQ{prqgF%mK?J~J_xg>e4pAS>9m{YVo@=s~b?x_yDi$K=-rH6~PUYpM
zPhCRtsF_T!o6Dp8p`iB_vfDmIH&UIq{+|iOsxEDGp^o4*ns+;dLB%8&5`KcLM0t$Z
zT?p}r2ufS0oTWDNuk@)MM>Wbf at N0^B?YHY!Lak7M!jpaA at 3+ezN4U+A3i;&?<WcEd
zclJ=N4CXZCY5 at zhO9Z;8yP;P)<x>&j*2{8=sZK)`jAOnDUO80>VYrH9hk78)`?dxD
zCiQto6!cfral56ZPCwdnbzkze_Z#9atl)Y_(!h~el2*+*lEQTf2i_pk)Oe)6eZ6OD
zG%0=NiC-(Kid~q(E0?J`W9L?cAKYW=TF4y>Pl*>cDlW56PNp#YRS*45pT1L8Ukb4K
zu6oeVWftTj|C;<;RpAu@^S{&+EoOE_8};S!r6NjMrs4^=T_?f#*vU~Hk-KbfFbIL$
zx<Mx$(dc8zC|}M5 at ZMSof;&IJ$tfqG-ORphDp=IqpDvsR7MSbXmu|5xW9uzTXYae$
z4Nqa#FH~Stj18a at Ht!;48e1qjm|lekOZZtQcAyN_9OG*U5-chFyLM!}iE00hC2YFA
zY+GWv4Ovjkx3yIRjs~RektqD_rNwB^f9!$y#J-pt6I~Bc)Fk8maiVD%b$Z at VkQ;W#
z|0~oHA3ptZ3y>0K(r!?bvIM#GXacMoo!&frS~~-UNyJ940$*zl at yp5sArj%dR5uYh
z|NJE!Ke44O#a7nM6YZRTFKCzTZ{Wcs;680BD at AJEsJ&^XslpP<p=t~>Wv(T{@RCOs
z`%M@;eltzV#7*BYXg58WD?r>{#KXw`z~F4j8$=#lDMGHGP{s2DAbfmsTN}S?eCTWI
zF0w2kmpVZ at sgf}}^{8v8`tYmMU9l4xUXOk#T9-kXQ!VJ#syX%iAoZo{(>oJB{S^J}
zZN==w45_-(0D9%2?#p_l_UL3<I^7yWP)|3YDmZ at PS~4dlc?qLD)n4N%m$s}P=xG)q
zU07YWATk=Akqbur&>RX^ClnoNb(hUUS%5M7%c7>g8d9 at v*te<LV)CP8XHXUxRB7u%
zJJYPv4-LekI1TvEYjIBreLSjvEzcf1Y at h{Zmbk60=>sl1w1m)Cku~z({%8f(7aBGn
z%2JID-=f`||8pf+DB_!-CZ+tZ3MNR(Zx*e;rIXOAlH33Ajw)w$_!`;Re{WqO$m%iF
zA}*6js{2nR377OpJG&^X4jo~w358R^<$%)RGko_Wvs?^>74O`_g>lAazFa1cnRk(a
zQ;!q6g!0n*XGJKhz at 3r*>c{mr_-6*@7vrhuNwR6yOThr;!6Ydu@?tG-aHd(rZ~>1N
zh_A6M$Q}<T+THCWd75WYeu*zxhaa@;i)y$9Pe^2-?fN<Fta~Ac*-}}|iYS!=001`r
z*_N76T#6ISnp#y%EGs>~)P#?KIfF(#Oo-#p56~jOAcspNh(V#{6`=k~9D2AOogPrG
zF{4tbu2xIWjJ;A;QYuYdtaFMZg?}GV)(gD-jq~?`zPBfOs>;jM_l3DXVR?F8BT4l3
zqwGX`ADh;5RnS&Z;@bzfB-E>2xiB-~ge#Z0!b2?^fh7}nd0b1b#H?Bt9k0<XU~n^z
z%*vO2c<9~}m+?XLldv$YhoD8|^k<1DQ{2LargqwH!O^Zi--)uRKY>&oXK9Jt*f$n2
zY&tl9v{MM5wGihjoIl(2bGJ;fRu04c4ZJ&El1}l}D>v`9>16=9n at kvmXw8`RqIsYz
z$RVR-_!8o{94q%y)4sQvF|9=uVzNmHD<*JpYr$kt^Y8N5lVWPGba}SB7O(#np}?V&
z)+_FG!`VeKDQOYQ-GJosl{UaxtNkF#YKgfr;a~z1Qau|;>@FL68tk<YlVju|;l at sB
zR4}YE^MfirlD*iBJH|*m6PV9{#-y<MB*mmSLTL^i5nJ3}=r$b|Q%j#3z2J=23x7SC
z^4;!;F1#eeet__^+cJ8oXw|{)q;!4U`=p$jXrnnxIpd7I3(}r|mArPXRMAa%nBOx*
zctg=vUxju9f<5tNEpNi3^3-Dz=%XQQ+Ynu{Zo2BiG?5;PUG2`fJ`(EG4`5BWtun5}
zVlVcUI?qpgZ at ZHPPCXh>?k3`w_!uk6^Ms5tO+ypFr?y_G5Ajub+nkV4ov+uwBGwX1
zik<V#Bj{$YEQm|(VMz1b*x<N28J6BpwkQl$qyo at HHM9eWPl6(o<hU-%&@y$tNDKFd
z^D1|!nxtz|o>fo!Meh(B-;NApqa)RQ<kv9v=>H#xVGmJ8#Riqe6ZaE8BYK#Ue)KFs
z^4${*T*Q_sVXmE`3!awup0y%_8F>RI|2?Op<^=~wiX6c8Qz7`tNwBj5)zEVD<j at 6R
zl*0Cz#f`M#pb1ri<ao>E_AV^(`fzXRnD7?fGHv4NQ+yJ_Sd}o?@4?s&`gn;V#D6*m
zz4))_?o}B9PSBgN#j}RY%216yVoq1WtSL1Rnt%OSp>MaOQIdd>JlCrg^|l6=Hp9J%
z?l}7PuxGY#o*HzP6-8F|-6T$cWX2llS~?<>uLQ@#J=~H+ZT{h at RT16dZ!A$2csl7Q
z3y-ZqeyCgcBLL_NamNB>UjS(85?FR==)#m6s99v3P#r91o^tzbW>p=c at SpirM9Q!<
zEzIZXUnaF(NusCCj*(T+cpt^(90J+!eG?FkV at hmFCBC)bib6d$zxee9=mT2)`ygNH
za$&-Gd|}I4T1P#WocKMl<`9F0!-w at +)88AiA5*oTEsTf|-Nzn+r2*Iw35j=P8d+0u
zZL8h=(T@=Jp0^d0SOb-6;!CfYV@@%=69WLUwHGm0@;%U^ggudIPZr at Mu8wJD(`uqo
zuQEKV@#sML<}4?e4}6K?+*|N8ye*7JjalJ7tIMXk`MOpO)$&8s-9>&W<FeauDGajx
z`HNP`iKyuMS=_B}{{RB5&`!zuv@?iZxc$!}Uprptq{%!TV?4{~+imA)d&XW{<K>S7
zvtt{DxQ#WdV4*`lpCOY>wa3-)2%JR0iyyf{Z1}VJ*NDw1<IM`4%}T|!Ffwii{t6)T
zDLyv$pPUK;PL#S&m8Efl&TDdr7d#?vQPINm#ydBOVL?W4)ldYRM^Kx1wjy-VhdCmr
zjeUYG`<JB8tvt^O%;dy)^pmD(H>hr;c|pM)AXcRt_UFQIPnD$c2sHc;(<zGjhD085
z%Z=PtE=t*!BemfcF>l5DpFwV9kPV$=NW!6<au$4Tc38^0SFF8|O>IJ|-O&&Y$m<A>
zEYT7v){rG_X6<)H9`;Ax-nzxn9+upJ^s0jLVr8MBlHhsyHmhz7WEG0juuFFN9YOr4
zIS7eFf|HioY$sfG(*(UuR<-RLr*M2hAfgKJX~?=%OXt^2!!wd_p6e5oFFME;4d{@d
z!N46jy<a<Cl<cf>^7=qhy_+1g$$dGhUPp^=)(<ghu;X+^lEd<yAU((-i5T5&d<^9_
z*s5oy*eYLG#KIg=M{;gFj<$1s5BPXaBGrVjUCl}qMLJmjs%Vtsfk%OhpFY{g7V_&`
zNkjd}-W*${fZ#s;;W9VPa}S-&#5wvC?s!Q)ZM1e&Foc!z5=Hqr_tGz!hycKtFR-yO
zryo;c7AMsT2o2AR12RJ#N5k#G7DEHq{6-DphCetQXOm^oOO*P*F``-qu9_0nyS6oF
z<xugSLQ5;!f4-mz_ZHQazyT-F$d>=rtBGn^Zvf_HUC_?dbRu3=N at Vh%8$E-bTc at DJ
zt|Za+T(#(SP%|TG7`<V{MhHtl6g5JMvp?>)_x18l${3VYgcL>$m|m;35l$;sOSwOc
zZ9<P?wQiVLvlMcXG7ej?dzm02^%v2~V5jPI(G4 at T186L3ii}^r34O-+^*BtU!rT~F
zRnVt*jwp^Y<VLx#(=0O-KPs)Wliw0=ZI;e5T9Jv5Mch|ebLpJwf=Vdd99hZf7ldBv
z(+=c0jjE=o?mGG^ndr9FCW)AZGKy97b}mQpQMJ2G2PDP`$14%ZZDbDcm%TV|7wc!W
zD>gk$X%Y$Epz<8^6DP3kkGJQSBsJpHIJ~eb%*tAzfPMhsR?s0lc(*3hcBT?>v-Pai
zsHeDRwOFev=I~lnB~OkQ)1)>JpQZn at 1F-NN_PTE7FO=oz<)^%sCxyP3K+b_KJ<Veb
zsdkvXp1gvNBwixUmS8<<@uN^(aBWlHPoTXT1=nT`z=eBh8Bd<K25P`_s+)}b-XWLW
zzBUIal at x<JJ at b}U3)hk$;xrFg>{}meOK`TUs&ANSL<wy5f at iEB=O*-Gf4r$316lBx
zf#r#HvtPFakUTRc#G?#FNS+&dXzx>HM%<2MezFJ#wiOGfYS1WH=XNm~%?5n%uH^%n
zbC2fm>pA*(v(Ex}sqHzLHG{hX&~nGukzK$32-I-yB-K$la+e)lXgIBs!*bUs+S&fh
z#K6N#v#&ISEGejS<1$fK{o~LSw0*E7zBohv(_zce7SW3HZL!(zk+V at OP;i~Wm1s9w
z6K`Q?qK(ItW2mDb6mS{(S<ka-!e|ZIH{SYGM9-0_a$Q4 at E6FXJfgN{gy>UY-M)28_
za=uxqJm=--Ked_1Lp1Bz^_0~JJIY(@SlLPQTdx&bw?9^t13Ah=v=DjDU~3*PG(-cU
zT_|!c?f{L0cD)Sy9xzwSdesgJ8mDr~G$<<TSg%!Q>};~3S<@Ir at sdD2lc}s$(VIq{
z1}NG}Ohqhkfs0YpABpz6rsBD>5C{!>Vp>uani`f`MplXn!hXe+GR9ma*yw^5Ce(zA
zP?2HIR3CyQIa(Z0L4*{Xm*MzX&PAlL^d~>5*c+=;Pawp+sN2v0FJ}D*!g6pEYh;O%
zm_G`_#Mvdw$H?S_+_MP4ui2jmcn`+tVC?bj<!=*!PnvqTTSW?L>fEo1NreD;yblXf
z#T%H*QK-|7Zggb}dSOTEI9^HkXHA7 at jVK8o;F3&iH;)Z+-p%FbVjgB&pXR<6|3$=L
zsvP<38t6}46@;Ule%_*Klci4()pVQ=0-nQ5{Px9LvWz0$!LxW^A8bf^E_ic-^ir;V
zg<Wb-?qT1817(Ferm+218e78Mb8iYo-?yQV>AO_s#67G*!l8VD_{^9+9 at BQt4R}ly
zJ$k9?!`|oMsR=;z`P5k(i*kD`<`{ZLQcrc;F|t6&9dQbZvBLDM!3z>lM3IeG9(Ns>
zGzqqCZ(7crP(9McEAy9|#~%XU23t=I84Po}IiMr(4qJlz^*=a|<?>&WmTWL7d(3ci
z&36tBvL7Y*Xy4=We1#^=uLryO9i|r|;03UMs`!2LWVTc}G#BH$+r<(BO4I=hH^Egi
zNZ3oeFgpuo!^=7}|NobW`Fa at Uri0juE*hA0zw!-%G=c9vm4K$KP4-ftdcNXS6c>Q2
zcb7b1W3HpdT)Tv%GUX*)6~g;(Fen0EbSoMvq3$}T4;6aWozUatlNC$y&7ubCeuA at c
zzNS|3_5!g$o{8o^C5Uw#OAqkHx6jR$OslOejemr0{TO4vj{JFKEl^wPoFp8{WaeJU
zt-Ddi$W}WiQ8%I6)d91%Lm|=-XVwqi1IK_)HtZ7~fY?#^shS}5lJygNp7(-HJC|Vu
zA)S;ylweN#H4==MlAR+zae^0@#v7d6a|1kGlx7!Slb)Pc-_kdk0g&_VPq!Bf&1P}Q
z-;7_wZ3DHSAu_6p*cs<46(+0Fs}2%|cGM|#`Harwoe>QYCD{<^i80&W25=$ckH{s|
z19_WtL}~zzqk8=PLb<8$)0Dy`5Rye}$$)8!ReBXg=|E2n7xvl>p^%(Ot^?v)5|D|!
zkXfokO67>1d*-?>stdcZ?tREG at ut(*eCPl0-Fl_C+J@!MMOhX{(3PHbOzM8)C{GQ@
zl??DLssg=jm>in_rIRa at WSw5Pb@qJB1qZ4jTG^ij-x@)pB8EGi;r&@#g+WVucR`pR
z5CThN`8zlwI>S3XnHXMa at IkQ{kX^5;;+Y^44t14TX-T+-yu%F43rsv4SES6_guU&I
zTieZ0#q0cDqPP at Rjc|WZ{FfkS%5B@;3Vtqp(^JjOJ$c=0e#FrutvMBAds{eeUkXAm
zr3V%Df2FILMM>Y#xf%g}O2TLWi3k@`92;8o`cE55cMrArAnNciel<vPB{Wa;me&X2
zf=Pz&F at _2&4`}a{7z*+uVJP!zlO;1<2aCj^{!i^qb(5}r9W7^!+fv|2gWHIq`xrz9
zsl~V-aqGg`sf at ri-cr_oADUjqKfeAMj?Ow}w^~KNx2TGAq4cU&6mH=eU~UH5YcWd*
zk+&a8^0`07zhkUzADb|GPT{2)2g<)$Tz|5SOc at 1?OL}J#bod=3{Q+JE(eNT`*fYhT
z&N49h%%VHf7=5g|U9CJrTkFqi;Ln=b9Wr25<1mKP06x(5;FQTy^2T`}D<gnpVG2DE
z&cjF7^+OyvP5p!gg#`%{akcmNTZ<S0T!aBdc1p(LbVke%zijUiR*7MVWEGK`ng1C~
z^JRa>>z&Pzz6?yB2~vA9vyB>4_&OU5;CQ0$^n?O}*`_62oaH%Y_9sxEluD`~Ux_bx
zKz<{O-Z_6uBAj`Le$iURd^*BB4B})Dhaw(QR+1IJ)?EKM)<#+k72pkW8-LNV4OhEP
zLC5*kNQteG%dABly(D(e!zBV|=ab+AAzS;XqGm}SP14DuRf0Xh!_BE~Q!do_Og=f^
zr at KfUF<)VM!Ret**t^a!)8aV{<MIY6gCOK2f_-Ut?*TVL_q at -<gHW~`gaFA5KeTl9
z)D~ik$E;-NA<;BLp|W`4!I(6OMK>;3`I{GN8pus8veq&wlAC?9nyS^jHQnOsqLS7_
z7oJ#?hsT7aq}y*BEc2NLlHc24p;m%-F}+Y-hydB`iO9T&*LQh|$OTj>{YE43JWmGH
ze3b{mVGR-a&kem`5D=Do7-rB+c{<%F1}UUdm>{wl at NoJ(QfmVPeMb_y0#nt+W`fjc
zK0B)v(Ki=yG8IeN<)YI6JpbblbA1o!ItWz|W#s|joAStmhb~xGTa~0g`MTBb&@uFt
z^LdL^TeSn&t+SkmB9&*{;v;$Z(2G|XKv1`!HX+F7`Wgd$#NqNdxoQoi?sRs6=QfNt
z=dd-EbzjyDfq(3H7dc3!FdwKeN#*n%&FHNDCp+9UP(VvMW(MWOL<2`6)G-K+gI_Yo
z30Bk)<nwpXzBf|m4JeFO at 4_RD@eSow+m;{gOPKSv<MBk!UylLildanZ9xATn|8sg(
zEFnVD2K1_$%lVTyC_pQ?$W=8Af)phFy>bROwP~rmQgo-vvnAKj8Oq|JF{NgHlsxsk
z9#VEjhcb;}<lc<L??$J1EgIi5q6ncndYka&ua at MyxJs8)Dj6Xcn(00ka)!n4sk9$@
zY3p!mv>^wsc#kqAs;w}f?fTbJf`qbQWeF8)5-t%W4^7ed)VH0K*`Fi;g9&4SFD8>Z
z1UZ9haH3nI(h<ECtDc=rxS71bwAh*Tj)h8ypd)e(Y*-l#1a^;ktIhr7eHGJAe7BE)
z7O#z at Kt4O;T6rT at xE>2V2VyZ~6Z<DFEva@|;0%m=DEl$zmKJvK^6iF&lklYCQEN0T
zfk)O>%BK-z&n}=%fp8?ic=;<JV;DD$yNBuUeqh+4_f&rI8hN>=?Fv{>;D|*#{#f?0
zl*3U72Z79Fg^+;9xer`RIvF@>w9x#_!JE4e=Mb-s2usYT&Mvw13U)K$8t)BF0gv`o
zTJv!v#xMHFKil{#grmEoQ_6?<!D&#_0XtI)G5wzncD?S83SE0h2^#8iTko>$+L$Wp
z37R{OUKa)8xQ;PNuJd+{6bPypXnDd+b85~WNt;b$iN&HQU#oK*i-b;GI#2=;TX)|z
zY;76-u6K>~a&-68dOqZT$4m!7+M4<a%FKg~X2o?_J_v}yhE5MBu7YVW8Tyv<x2zr+
z&#e2N_^pHLmL!%evsSZ4a8BJq6s3K0UebwXC=>>ac`7EwQv>xYHQ!|mo5bpe=CZ&;
zBun;{thtTGt$Yf+!Xk{`>vx80bd`x<j)e<!<*3RaGbeZ|kz=js3Xa>q+#I*u6&#MR
zp9J)&Tf`NBzlST<r3raO!0LC95vcN{DCkY+l5_K4%wZAdN^u!6c+tq2{KU!8l`&uL
z{%pUVh9fI9^gBfDnR=)+c!$jFtGhQ-_+6i|Blls!&uQh3N at Z}shCKDRVNVz7_vOVl
z`-X346BLO at Rc+M1<kO|a at yBg>|CHNX1$Pu>z%so at lY$_)h$q2}afJw&BHcN7RXrpg
zt=6!VMFcK;TFx^-Jh$LXH}yWN*VLryEgB8cHs$JA;cDn3D#UAy%Bzllq%k&oZS>)Y
z=kX?gT^f%wQY1eDx`mjbTHQYGqg-^;ouF8y2~Xk5^SVMJsSD=dDYCl4Aq#G*eXM*=
zY5r3haQfokWbCd?$f_1}HU--CCpm-_zMEkGj(WCzjdQy-+MhXYd)^5uHm4rrVV@?l
zun_+u6X&7nohW=>Y;k{<dTP13R<~3{wb;5_s*4I764oAT$jvt}Y3EXI&_HM)k-r7^
z(f2%GH?J!H6f06NKkx)#dCcqv88p_(=gh4B1lVuVQ1c%!=sOWlJLE>rLfe4WDOWUq
z*sQMvR^-?hk&t*xy#V*NjBelxpA7)*Fp8LUm6Zcqs^)p41}4FJ&Ll}<^2F##)u6Rt
zM6DNTpEwXnAa)<OJJxZOPF*<Z32EiHA~BlxrU9;+yRp~=$}FR$p-8e?O@^>PGSF5=
z!-br=iQ<{#TU#pw1YiL0 at x#^^CDNnK5Qgk4O~IAIeGO307&`ocN1MfkXI{AaAu^b|
zDpeDt=S7ii1DA#>^bJgg)FF?gOdWK6i{XfSzEB>zlsd*+rd;?%tPQ}H<_9wNf-Hxm
z{>o$|$C5SejZecihEp$-_OfUy$|75Aqg5fMtvvPw3jHKr3!GiAYU{J-hCEt=H?#kv
z5Xbl#AV#%G;*^uebk3#kwfsPqDO>{IG)k&#rbmna<Sgf`Y{WjatNTyK?0+|rH1Vrz
z=!8Jnk#+Q=j;N>&M$|{FVCy90?FAnyI(n1-GdSfn8soUFoyhL#`0mrxv<KE=?%-pd
zSCdj=>ip9`&d7SDm+cl1F;}@fpX^7u+6Yv=w(WnpyeW*7T6Y^*s1A|@b)CYDvqs;d
zs6RbAnRYebLCX8*4Xh%9ybauAD^WsV_^JHa60H5ouuXt;Lf56g`rOj<YS9a&R~b_7
z_zgIHW-TKIkiLHbLwy18RR`R8F7s#KOB>h$O7={Tul`J>_TcgMd2a+G19F^?CZx`}
zveXEh5VDOZ>v~PRQ{NjtMSro6U}Nv5xb^di`o9F}{Hl6a=pAh-y8t5*lPP!B$;M7s
z>p)E_chY=IyjXw&ti-s=;obc~w1RG}2k@`x#+j(R)M}|`;L8tF$vI^<9=Wtr*n&+_
zs`!&owEamgqgTB_^>e1ua<dagT@$|RfN>FEkhh>pg##@qA$_E_(E0YQ)tLTqG5)6B
zwAdMqsnzf&LbR2|PFI)=??;NH7If}I^PJSb=J@#a$a~GXJqu5IEn<kC*Qskt&bAX9
znuHRV*wC at YqjKlJa4rj*Mp-G+?I2?o#Fbjt)iiWy5c)7jhE#30ZY<P8MtiwpS(uFc
zCJ9yP+p&+<!$eyjjoTOvs0$5>7VqKk?;M8^j=Dy)AFjpIYL?6UqsziJ=WEgq^@s6z
z`NEO8?ZpM~;h^9fTyT1zToo~4R_dOYvAV1Ek_oV2G4NW!t1>$bK;l*YaAHjj3Iru*
zg(fF1LBTBo*bG1y3|yy(`!H7uC^l?y2`58VbZc<a;ife>tutY=b-d_8T-NNKy!FVF
zx@@N%9Bbd{HouAe*|_$H0Mu_Vr%CiH$W^podWcd5Inb8(i at J9F5<?ORbO&l5h(}=i
zn)SF|Tu~<RZaxOE+O2Yv%0?U+yuGb-To4eP>SopQL?i;JS9gYgLE;RJKlMFwlUw|x
z3o}=tJ6M&3Qj9hPIQa8Lu}-339(}{YBF!>@z7k7BtLPGCd6{E{5H7)gl~ILC-EK|J
z_?9cfd&p-#RL^ZO9WjxEdI;N=&s$(04ii%NXrH<Moh}X at RMj`=TUV&=td9+K5eXZ`
zkW7j&AgmvroQU@(ZJ}}2w4AcXzq)lt>G>FjxUgj##gNwGIxj>?BhOeHluC+Nm_xlL
zBe7f1{9(oLaFzCoJ&v?_7<N))YtOu}={{BjNrBmu&(%A+>YYulA+0Im at th|mMfACA
z!}jtX$3gZDJ-GhfS4K at wehv5{2Pb0fW%7hV%9nW7=c0I&HOl%JvH$|A0nrs@%Oic)
z0<|$|2{%E)&!Yfs&<R9u1gUo^maD(;zLVOUwV1Gji|#_ja#29y{(!Ge%$d*Hj?%KG
z`aIui9u1s2cRD~cm+SMRfXxpbw!D0FM|D-uSGecbC#eT?TJ!&2Ma|k}P3{Hx9M{!}
zAqzG3+RGCfICXu!KNN&FoWbnZp_;@j9PcLM%e#>ZD9o+oMM9yt8$&p|7RSY}r6w>5
zzhOes(BpZPVVLrxr$BCN>5W=-ZCQKxPNvRzeYNm*(m8q)UnS07L_cs6n6UUkVRS(a
z$}$q<v&W-YX6=N_&ttu)<@+4$IBfYanUvaA5gsiJ at C$#9W5;_f#D1I~!6HV;k_O2D
z6#-UIMXpq*8r5#Q!yUfZZa%Df-SdO&RT!Z9#F7wFgCinZu>_qMZs^LWpTDwaum&Db
zQ0$VhgHD^*%_gDY=;hg^sNA$l_9|Y!;(>qX|Dl=COi6uc$Yrn>Q<+;1@>IT!4kM?*
zxh$WB5d>$DWyrLm at a-F<h%J|$Cfq<M_LHIMMK=#=0ujPlJ71fs*}-`(HVoD!??mk5
z2S_JR;H-&yO}VG-9JecEe`^>jrN7QHHWI3ucVmG|otm^rHL;SBdty0PPPU|5^NBHS
zHFz<CLAPD_q<NC!Fonqqr$m9!eQdUDgZM}#DrDLM%SZ<ElZz->!XU#X=lt?RR=o76
zRuO&*38b|W+!J|l+nogHtfz}v;8<8nZ>M*jU#hfd91JaVC!R!yxEQ$Axa4l%n2Wi+
z>JK?|qGku0?28F at M|`svmh-{1iOxBB=y<Mm<%Oza<BRgxX|6rpoGw&(%6=`R%f>(c
zB)+9qgz3u_GYu5+s&LJ)6)Yc`B3NdWBiV?B^8V7{ua<rq$LB2B6vBI(L?N|7ZObKh
zK9AmlBo?^i!;7boa}oU<$=4Da^9}MV`Z8AMe0~A_&+p)GlKICXS<i<FZX~NJog?G4
zGaq;~1<U2z5OP)7i0wl9Rf at O%!TzGL9BV%g6GuLt;_9f}1uc<(lxc7ckG(u83I{F_
z>UNn+1!st;9k|&k2s;nZzy~`utw0=BGSwm^B0`DTCJFBN^>5{HkrbIQC*GJ1xq5+K
zsYUnabp40VQ@%HQ;7NGkKeSe_<^qTJumVbAefhbb(1sz&c3k)iqSW3*u*Xp!Si4q;
z;+_Oa>czWjF?NOdz$$0~%BXsS^d+ at Qy|1_-{S~|@?fUyAU|ic!nG3kK7RyD9OZJc*
zFB>{;Xu_Ti&}2aR;)}U8YuZR5`oW);Fe@@pi6ZCvA(A#{h%8+W)hco2BBQ~a$_;Z1
z3VDZm9RZzxzoW?fh|@i<PoMPx&w%z3*-Alr%-j-VMomt&?;qNZH<AJ`h071?Ox6>d
z`rl&{Y2nl{5jF4L{=)r?!Hbr^k_rrzjucyx?C+Z^9i0V7Xc_3x$g9L6*xU>Zz6`0e
zo$wHxvvIRxQ7X1bo1c!6AkKunCrh^Be^BA*A08z$f#Y*1NW=Az#H=#P&utDFi8!8;
zPc3*#Fki~`N%wSh;gXKGq%3l;e1xp;dM=u1eZvhImKGQ-Z3zu%-Kpuc0(`|Krz+Hw
zJ)hbgsDW>DjOE`*OR0{EZqyCPj!q=8l3VD~(i#**U{e0wD;0869}>J&X(5&QkxTX+
z0o!ADzs$?Z4*+26qGJ%k5ygj(rQ1eB(`y78N2<0;urW96akMHLa{j|^F2ksdpaShl
zN$dy=O at tSu$I4!I3cN;706Q1Yljc&1i*~kIa}ey8i(?N+KpOjph=<n}6rr9{b%h5_
z7Ayrp6%5BO>Wc$?DIQNbWP>?sxLd)nFf0#S<MZJo#mk<J2DcMO>ZtJb^X%?Fs6;Hq
zQaTLLGo=;p23gZRO#xvtizie+31btKPza-ixbwsbjGxPYS(&bJogOC_!ZW-kq=%Ul
zD)Ijfzm6DmvZ>tqZFh98cQpSXJMdc~TV33<sb(;5z4Wqhdly`?ba6!mv9+f47^kbO
z!b33!sw;L-H^9uYczIHqCfu5m7L_UQse8>eX2*P1bipF_d;r|aS*&AEyxZw)vS;Bf
zsS`HjFmIp+PPP#^4(h66pU<tdhjfI`B{a1BHc at K|y$cW)yZI-%IR8B{rN70PehxrC
zh1^9i(z3F59u(=%<Pk7N9vY4S5V`HBG#LW38)qVeWl&p+ft4neHx0=zb*l at m`L}bF
z^bCI+$r%!dy@%U^V+m!rLfL<Ja}2xsn=D*&1 at ik_qJT<d8`k6!E3;%hI$Uys{n%R4
zsI=$P|LLSHS~cGbRzVOvpje~o3nszr_c#b)q!~%IW0;j4l&YFD$kihmWbZ=iY0BC*
zzYY|bfNv?U-3g#N?ow}0s}0;UFhm_842LeG=1-Sz0qq3CX-w3#NLj7AEJ)1wGJC#Z
z_}6hP;Ebr=Nt$&s&|@Uz2AmE8AuJ#*P+{}pu|o$t8J;NF4;Wa&k#E&ctX2d90{Ug_
zy?|2`F9ypE@~pZFLa?7ogJ1GlhsB at QdB!B}9ujzGAYWFg%W22%_J+S)SY+QoH>bJW
zrqQ&e`X8$n1C%7y2u+oBJ&vEElLI$+1QT3uIMKiM^&jsp7Y?J&n;XItBNMF6FIA^O
z8O=bJ(p%xF`kdN1?^YTP<RB;%S-`i%J_e$$w9!U>{-a at jvTq=M+qDMvSU7PS81zP>
zpMpC;%e5zt>us>$kXv&3X_Pc>7%(B6YgSTkPbX9KhKqOi^j|ClwrC3C1~r`4KtuG5
zTrJa>1{7sQ$Dt44%Iwzp#H*7D<iy}n7VHO#!t|ysH0L0eBXk4qhHWC96bG4rP!mF-
zH5*o%z$Z&m*>?VWfN1$tJPN3}>&QIi at zjP(K<?|n$!z2|&`=8>{B1Jn2L+yL09b$!
zxQl++7>!jSi})W&rp|Ag6<w8pB_<_xlRWO=P^RYRr*~66zc9}nx}vhRzpkay+uFZh
zun|2tnJ`p*7-Z>hiVJN%vyN=vAxhWbr^zhzu!B)W6WuPyD%(Mwp*0fIEl9T9G6Xu=
zV_2v7yx&(#a&T^lIWIu_?>G0%I=i4a59Pz@@s><9$?<iVh0caQWXCi<1geB3z3-?r
zI!pANE44i~z5urpnHm%niEs_=O?n0OJ#5;S`^Qe1!FgwtrW93^H-UB~15RX9#A=9Y
zN70CrVMp&;iMVJ+=66+DdSW9T5ALZIiE;{e+-|_q<krwgzeTZulB29Eb4uAu3L6#y
zDr5x~MOZ<@shw&aaDE3}du*afe2uBzNg}A>aP2j!on(-mb8)}5GPsbyzG}qRo#3F9
zzHe#~*?3&fpvCZ`%Cu14o!iX#sv2NSU$7|KeB}N2yOU^e34bR$#ADZTX={12`*OaF
zAAJP}25uIu6;$nwNe#!64+3SyL4mut?Uy}M+U!!s$;$1s7}`7I6z39!e<Pm#)LI=V
zGHIf-POD50Js{1FB`Xs8Zm>rqaE9R^htwC6MS1Uj-F$@n3C;&+BN at ZyHmkCg>CBF6
zWgw>3%6ZKJFZt2jDO{ZFtx6rCEkx4{`06FSNSIX{=7InOHJE4cEJuEOl;IFW*(qgo
znY!I3XXFs!vzABWMsjU8?r6<v^zHvXx)fpwRP+3-<Y&war!D_0E69^`pOK#i1RGME
z;c)1;(Ls4n3aKOI29ka$NHIKQHcw1%v&l~Mph2Ai9iof2$!k%leE7vZmFw!V_fE)W
zuFQURQwJlyho)jqqfrb`PCXVxXzx{Tb(Pty22^b^c3))$$l1YRc~lo7S&FR$<ft`J
zR886qCw&oA!ffaZaqk^RS`>3Nyt-JBgRm~D|2m}Eg$F<+D8)5jq3dTOclVr|nE(B=
zd0pgvHBbu9=Js*V5stryx%Ss4-C48EF`dGO=mmUzFd|nl8Y7l|HuTMj!Zj?wE0uXz
z{wXs4`;2Ex(HWYb2y>Lt(hV0PY62^ZDaqBEe&CG`(U5>X3JSrXJ-i5<g>qqAIfIS%
z-nH=-k&-BBnq)tF3^_D=*O3@#WTvD+5?O>TuXaoM(f~Cdi>O(>=vQb>>##0T(|IyQ
zy<A?yX(OWT+*^J{@{Me#aUu+CooD=@qx9zR!mxk)rxV>Xf#m8!c&!Zv4wiQ`4JZUg
z+b`RA>)_~i6A)&T$K8Qj&|^t#3T#f7D(RN<+(4b>k-VdwPb at 988}B~lu$tcy05~8W
zQGJaNN`~>%j|-j)bqSDBy&!*Tns$7rm~H5y8p}gc4-UePp-{+aum)+!CS|6iIT&jS
zV|ufT at Swkth!<%^>YXC;Gdbq~E at o_gDpZ-E11SH(880g6d#btam7zCntofFP$mUCt
z at Sx9~U<m1xP3CMMVIK7AGOB)R8J<l=7?TcTyt&K68J4R6&8Vw-lRW>Qo8l}xB**2_
zI|AC;;;iEr*ZO;(`w3!|-Lg3BUP}wQE3mTs0o*%1c$6c>yE8!-bt-A$PCJeLCIckB
z%TKl%K<qkXP}9TkH?DHJ{<cW_VCFe}6 at Z%;@GU<&XvflNXns at JRscglyuULq-|fOc
z4&T<z_3;NYgJxBX at F%u%;IQ|Rbca9Rf6<DVLlq#}35DtpCk{CtkHddORxvF8#f4rH
zyXceEw&;Rs at Xg%XobQQe+r(cepcQcItDfZ^61 at Z+La>dT=&o>BRMH4If_!Er0dp>s
zA|cJo5iMI?(w>c{`i4%Ekv$?M$@e~Kot;}WhbdNAop76ShfOmfk>)voKDEMSERfq(
zZc%z=-;7!Kxw0<<EAmC8e#r?P5X*>I6N4#LMsqSf_Qaid0c81Y{TV(dAh<i at lqjAQ
zulbQdu{r at +?Bp4lY0#7i>tu^W>cMn at 7^t!s*TsY*WCAO~S&vc5m-L#p$0ykHNa8K@
zH?qH4rodC}W)69Ei_xy=IV`Wk``lq)S9!g>s@|CmCo7ve<WT`-ivVno-JApw#0Tt$
zl5YTE<^3h{F@!Oj>Cc0s*$Q at Tq?htuUT5jVpf}L8#DkDjA%b?2TJ7%aWCW)*)$q6>
z_EXx at S_@-5={qg)X!4yOWnTQSjSh!koRBRHO(AF6R3`cGLmapLefFD~BEe6Lv#Fvk
zK&k)EK5-}`O6F*AB|QP|?k*2w>W^!TYkrufTVuFpmne&o`FNW%t7%5Iyr>2?!||SK
z`#74R)KE4oiRbO at ISpeHLj3sqZEFQ-SuV{^IqoYaoG96pp(M|xvuYA>q{sSOM9QxX
z&mQU`_g+p=c`h4(3C(&rS&ZMka-aOWdc>?D9wK0s2cWgnwH(+#`UFwklc86%`kjwo
zoFBT_NjR!;$JF$nZx~N-)AAwZq=;JV5p9O8ct5(S!_p10*AK4aAg=;O&1f#}<iR<1
zF+w<e at 2TyUUG*V6F?C>&=53CDN&_gNEJd5xE_PkvTu@%8f1FB{FgLUe2oRY|{UU(h
zZL96)NEo&&2+KL9!NH{SCZF=ml`l2{d=j5}_o?mIEBVwP2cxJ*Cwx1glJK at emAALl
zPS$)o7xNpk<%E{zJ2LW66u9RpQ&;5}ARx~iOoNvqjOrs_W&oWa at CcaPVa1v#fTYe~
zg6&b1avWf?_5Ijl6ex}kHYBS5hXdRv)$RGZ<X_ag^-&df3kBa<gmBK9{Ye4D&SF%f
zD3al750j at T(+Lm7+$q1!+S)GXXaJDMvyzd?Px(C@#&R+Ryz5}AxY7Zhtrw|f$}5U!
zYrh7c5c~dI`T2kQT+u*HYqBp5)nSPD-a4UJXmi7xxDW at ->%X|X=iuc^ruDJN<`?=v
zp87|bfH`452TpV1%P&&c>z`b?{@lB)+<GEoeYgQ`*vTizhmRdPEunz@&0yB&|HX?M
zv~z#ey&sg<V9ZkZD%lD;;#^A79bnYqqO!x|$*p2?kqIGQ2tV~s)CUA-$CC6IiUhD<
z!%>sE4v;}U<_Cd(bPpr%5{-=>f|eH>sc}5hA71sEh*#$eAq(Am3F-8HA2_MP+d}u{
zAmYq~6vkv=$Y^jy>Avq%0HxD|1iZ%`O#;;!z>u1)dg?kQ3k*XBqA&&Z<7mi0yZVV@
zJPZ;{`nA>=GaI at XxP2-;OQ5z|7Q~Tlu3z)y(zCSld!LBzK1xsHWX(k<3EQATm|{fB
zTX8j9`~_=C%E+~}x=2PvgN~8`Fy@!g5-f*sl^^VIb)!S9#QG at M9%7qN at g9&nyr8Yf
zRY~O01ACRFcC^FW0D8ueCgw}b!{FJ$Yd4<aPaZ^R(a*@Xk12?H&kyY{UdF`u3|Qk5
zP38c6ZmKT`nk;w{y)+h$XhU0W7~3 at Z8$z|L{fB{Z`3PC2P65GNtXH$s&DQ^J06g{o
z2#SZSc5m!yk&lq)c!-wduPaC-bk94vrPfkz<7~nl7D8Jld>?yX0W9nine}Om-|NlT
zCwIJ1-f7gmEaD$Xzb9^*->G#P;paB}E`8 at X)<z*+;86?;=OuSmHv;5L8gk$A_NkYB
zLL?=2#!JHn;=}P?f;FWdc7xI-4_lS~yi#>|F}!7hbgYv1Fr1o!Fa;cfp{;G(lJCzf
zR#$=8a=laHwzaGZa3%H&ay?@_#7 at o?_lVoEubh|UTB^^8FL}I55p=(g&;^Og1Rs!~
z$hT8<DL{Qg<*;h!XKx~Xi4WIyEs=Rv_>;<-LAlsNPUcPK?`57-sN0ig$>iZNWJCxn
zvz)jaZC)gM62CoW)YN-tqZ=UIVO&omqi;J&#4z!fz5{e&LKJ$<3WDMcnF@|ur$fiH
z{ei^Sa7%NUAHJm3(cFXbPJa>7>o^*DKxJ1T%^bN8C5cAVR8TOB?CY6zK~PkcOFL$d
zG|!!*0r7XhqZ;6REsm~;XcQm#Qt^6CLP$7FF at Tug(6MNJu}2N4M*j%QH6X>roZ~>d
z9Vs>R`wW?t3K9*4fOo$`;jG5ygv(frZ9&Axl|{|x*E134(8I)#j)`cr)T7V&G{sD8
z?7jKpUfmkE0WmER(eqke!wx>$<^Im9*f+(qh_5{fpt}5hKm|ORWY3k^6#Cc*Y7GK|
z at 3}f1-(xzNHgYy~I{@;=|IpQf1`tEn`l;xv;C`Ix!yhO`p5v&}ME}deCz~oI->V6m
zeCVZi>m(#U1$vf0&FthKQV}JcGB>;)??!(J+Kudu=(P}bI5#tqBX0J0VFYI&?QLvG
zopYjzkSRojMvp!XX*WF)A6YQ-q4bt-dWGRP2H!qv9A5{6>oR17VXJ#(4>F#I*|3bh
z2)Q7)`ZZzXF|L+d5F>C+kP&T)R<m&?%6e8Un5iz-%Uoq<XcwAjZQM_&Sh-DNF>!j#
z&z)e;+-8tvxB6lE`0Uus928L!!nV!p8wSz%&qSEv7>gmnh5v1(z*e&JT+Oe}{T+R~
z2}>BE58&0!ZlSnn{FX;H3pD at Ic<o<t%kb;@iVIW4_m2NG5&G?8DLD>(bNFSMHqJ)c
zyB{c!U{rP)BuvpfB!&!Z#IFN at d9(kqn`Q-n|4U0H2QXL)dgJLL?a#`vPd4HJioj_u
z;k)JR)BE+F=qnWyl~=;e9CFIFXlDgOKuu0RP3jrb(ZldKb@@8_2c6ZT^P#ZXSZmt*
zC*0S!HDrgM_oD+d41ii8rwFN)OKB$Bo at +qbM#`#-;`>Afu>qaQ|G(LEnF3Gp7-}Wp
zKlo#|fRTzf_oKs<bTzmSlg;{Tic7qo0b2`oJc6D{etjmpfQBr~Hh2$H5-p-xqo1J|
zd%+ at QZPx|NyX at jtHHn~0w?*IhFu023?e_?SRS=zxfh<|Fy&y4bk<<b~Bv<a~n(f$N
zS|9>5dTd$6Z07kiHw_MA`!g`y1=*GwwA3X&#Bm769c6k>_nAGma96>u-UBH7Gtpp(
zO2tb!3FdQd-SVIw{?}3glQ?Zb>3shLwE at itPdAfU%Rup)W5hJmx9)TeGs5Qa2Ujf)
znPni|x-SBmR=DE%f5^vf<+J~W&Xx!lSdt#Gn*zp)+gfes(saOKTv)_wh`=PDG3%jg
z%>EXl8qc>+O3zfiR;Dq?3J%I*hL-O-cl9<}tKCT&&{f0wa`E+v_j2tZTCiAh#D0qp
zz0_jJ+Ve>CV)qyq^)kzHNlKl#t+H)sz$}2+*0fafcNJAq=4Dd$w{PhNjBWJhp%1XY
z9kX!|ogf<W2~h5KZ$xYKnZ#dkitwz%ezwHD21ZcrOIkEl1lN}qK7o1La&<Zl^}jXU
z?*dKnxhM?kw6_*O;hF$v61^Lf4UrbC7|xrb8!0{i at 7n&R5(+c*g6nynJdx~;7U-BY
z<_RVV+dFuB*~i^?%!jXFe1`oX#QEYw4fpW9Qlp5yEHfeI7tjktuvuoqga0Kz9#jQA
zlsM}*bz0FBhY|nd_Cd{iz&4GG6HBCC#t+R&-_u7WD{&ILyG1xP+i733*4|^da-mCK
z{5a$s!uG|edw*i5^*7ppghmjpS_NA0=Xhs8uwCb0#z%u7&^N&67XcC9q3-ikVta;I
zOyzL6=Z|CK`0n0*F1HK{kjhBX`1w=I-#m)4Fh<M0XGSaV1ZsA3H}vRIlvum(zkyDm
zm5_t<i$(2T5+{hGnMKG>6Ys(PTq?1cEFriXEIuheXp1)ZmIu at 1c5C4|ZYrnBDl;AX
z at j6$$r%2RE(-G;L0RVkY9_gIygnV!7+;#3~bDgPG+!cAJ>RfEtpuG5Z3|3(^cEVr(
zU<RDgz<N&yyv{4Hq at y!JSyg_ztwY>mhM1IxaKfos3Ee2IJeY<6vL6Jvyc1?rP}70+
z_64XO at 5x!jZ}-oh)n^EWy4`5_Nx>_qnew60D3u49qnhni0Tn*Ytr?=?)V=*4ux_V0
zZHoI*fKJzYx`^Hgn7;s$R*q}9u7sL)lA<1_gC%#Lc-){r^n;>=B1{o*nnd2ZT`)fI
zE5Viefg;=j!Nx~~|0O_D-#m0c^Cc!3(Z9gT-eS0Jj{!vWeXLeVgMM$yhSHb*T9qx)
zi$b<x)X;L>hpvOr(J}o{Y>loopEWnwz`}tFWI~rH?<d}OvLf+e*n_xeC=FS^MY~PN
z6!h+r_6W=-fh at N<anPbXC#fHNc1;Wg8_0Zw&ipnShnU3(+tz)Vf4dn`^;HjF0Y9*U
zf}^WV?xjtWLm6Q5mA?)%%p0JbjJ!Y?mFH>svOoyEz`j3<tVh1m1<%z~yA8&bVZd$8
z*vD*isIjdRAwpdY^yRJ((`G%$T{G<@M11bkVx?#DL<{eCk_Z=tuHd=eK$}OGiEewY
zu2cKd*uxj at gL^^)50tEZyi)j@=B~C=(<zEpG4FYvAq9P+?zB}OLB)xRrMpD`T;dFg
zB at oruMR!ar=9>>i;kjwhhS|F19)d>NuWocQ+X#YTd29giDDEQmTI3L!M&=m`U=W1P
zXKaU`MSl53`qgD!$~x6VcidQUFK1eUu%+}X*Y~32ffhs&PeFDTqatN13Z^QCL?d`5
zI5Yv;?qUm+ck6Lt3Y6qymRDH6STtsa0pWcNdO=qh?Ax#B{jyO~5pC30Yo2iekv<{c
zp&O>#32%voUjk}iaQs6r&us)~SBXp)N!!CLwlwdotra-!+djO{ciu{_^1b|;yd1*v
zhC7|KqPEU~P at 5>OZXEwAuATU^Nt0F+zcR)Cwy##tLw33-srH<_`M<=^GRqg~$Ue&F
zJoyN)j|<7U1m}2^Nq_MY{sa~MhUyY1n0Mr{w?c2 at ap8e43RFZ1D*Mv>i3f_P-l-#b
zC?XSm?z4%GP>yUym!>L6zoh1}m1t?GL$MC&v_gM8_`DS#RTkX+N(!jwMsf7ijQpRN
zza!d9L(O8qle{ZJj))#YH;EcZt&h!%u2gAUFe3~0r%r)-<e-TJ%zuJCWeKj~5iB{1
z8*?-5qg9|zt{jW%q)|Hc%|CL}w5t*a=rx2qLOeVIgrjOvMqTYhS|s_jo&Lc|;vlP&
z5Q^&Slp$=H3qLzg&~cr1mkJoTPEwZI;cg3Wf!v3LhsY7W$BD6Ddd75MK-QY7Bf!{=
zOL))LS2;T0jJ~hBxvn2P1Gt at _q>#Q(w6CO#70l_X$Ydz|gGKY%Nepv&CbF#fHrfHc
zY!&qlWx@^?nzjpZ?vKQ}`S6-MCaK<aK|hm7kUWPsf?D&1U2`33tvEmbOP&nIeAn%r
z5r7Q6lK$>lDn;K2LaPL#5_X^b%Rn)LRHP2fS9uc<!IAN_NoG%}J95cOln|*u{BAOW
zQil^k7Xa%!UCJYWWw%bgrP(}?ne_R@*<qV<slS<p9IFGjL7Q?$HstQXluK)bl&@T_
z{ynL(Fv$J=CBp8b4i0xnCuxLC&9KWMm^J11V|6D^gS5A at pf178Ho#vO!+Ka=Z)gGH
z39kH#Al3qV&0 at uk769p!4Gux`s9sae{SV<VdpqzAkH|yJka74RG9|AW%_{WKj6?sc
zxH<~;H)sh!3d>fzW>U{2IX!qm=r{{anxO(Es!KrX3#oP at kkhXK2*dy;xp$?DA^}Gr
zDhj2KKxL#q5u7H=cktfqGajnsbZ at o20;b^_;YV5Kz6zK+3TV{@MnRw!+~O~3dn(nC
zO$_2BO148wY(_gM5VYul{CWV*G~yL27xfMKkZOSZ-)h_Pt<@9O_t*%FGK#NB-h6<;
zdjb~n{bD*tE2Q$eS~(j#DFn<dui^3~SHS2wU9Becd+pJuGUY&*L>!!U=G?Mnf|gaL
z8Lz`d%smR_P@$9qj!{1oRw%drvIgzcTjcp63hPQL;y!Oq#}cm6UW3-PkD`u|ZEw!E
z8txL+ at q#;ZUca8a_K1Mp+hx)LY$LP&9RS6nlc$fFa!t0ZOB0OI)6OGPNXo?AjaChu
zuIaq^S0C*xdhNM(44*SLKr;#0*eNVGazfWc-A}cS>`}Js8ppnu!^mzsJ_E7371DQt
z#7W1Te-YY{=^MyIM(%i*+s1|vp{lLyH(=h6C;aby5U59%BI9D9hmc1Ev6W(IP061L
zFD=#u3 at 8GZ-idI&Ml9QBy at B+nv?(=(?F|a=bRvQ!rMo47s{RZj^TFBv!DP)P_?LNa
zKqji(tWPRLF=W~eW(3a1MU-JA_r^|P%RWJn!<AHM(BI>+{b>y?cSmIWIOH!#OIsd{
zmq at g&A(hesCY(d2lMaF`nj(C>KYI{n)eXBl{ZhF<wWKMmg6pOh9%wfjPmlF<y at kqo
z{k;xcV;vO`WdpYDOZWaA<UdL8Q_EFN3^yAY9v+E>+t*Xov3yr4ejZCnDK><pQ8cGz
zEZ}5?B?{5K%?E~A<j$OdVEhYrIBvA(RpMNI_jb8^s-(D#98^JMK<s!q!>SWyc_8^m
z1M3;p^~8hJH)8IxO;l!|avH^kc38G!_1z8gIgnD-A?GlkMyafnFz4X9;cn}SRGK74
z{v>$0T45R|#iel>7tJ*AO_g!c7YyCZzWq++>VSy)bNyUBR1HE;>li);HSLKVtZDyT
z7#8gDmfFTFA%W=PQiSpjOLRr<psd||*M#GwzF^spE0;Zz- at oKH)Ak at HF){IGL^JmY
zsZ!aYo1qbm0jox3t=y=9{J1BRXLqxAo~S*k8^p at MR8w#Vv+Yl7dw_F9GhYc>ZHF&H
zT=fYCkE<8XO%*~5%|eXC-YW7|bj`5Dk%ma+Xne`AfE1TOwdqfJ)7<N*$ZPL<(n*%+
z;_VdvSYZMhP=b(;z>-K;ElO(RiImuFZmW(;(ddARpN7RdL25L+kFUt#%^;(I$%IaL
zf<)AV_LhMtzB4f(HpJk?i01i}i`Z|L`Z!sT`c1vD?eJfY<<yLSLK+>o%x}R^p)WZ3
zL=h<N1bQbpGxrReWz|^tv>i3hPd%pvMHd^n?P{os^3S}u2~NIC$@_p{1O2Dk5+bo)
zqkAFs^&Ad-<y~7P2VI2KJ^?^_$D4#+E_EKbtthF25VzLGJ76B*oXfE9<V1*|s&{f0
zGS*}9I;niKI7{3iPGgB1D#fmcq-;P9eDcZo_<v<F^I^A7*WKm8LdF|I9-DZIyL%4Z
zTG}*4bP+vgEK<1kuDRRarg*Qub7(uC)*k at e*MRNx1Qb%JX&dZatQ)=+rcu#F$wR$N
zj>jAK2KW$%cOvWtOe at VyvtGNTvlM}uLv4;QP3lHdAEGc{<O at V^eCUzz<%>`|RIJv}
zT24x36NrX}vQt3U#@^;_+zdqK$UlVz;9}9>yq)du+boK1Z1%feW9)Bh?eNl@(G5E0
zJ`T4_U- at v64vgeI034C#@3n=_!V_&a(@Lq_mM5Co*HTk9?u00?iasRtW&98!UkwHF
zKBRTl695dj7xyy#Ok<|VW566pfW1hBITCfir8_oY7kJ}Id_*9Z^F6Xm4Ys<eD}6Ek
zYbs at omHzHibugCxAWlP?LzSM?j&y=F)2$;veQ$+r-CCIm4Q`c!;BJWaT%QGD{)d0D
zFv67Le&r}J at CSbT__dud#1aN2i&MH%nLKcgtHh{8HpnBabpTM7!UY!uguxC&`hjWj
z0DuJ~=IZHwaOOWInD|*S*?!cYj!cBLh|IGK*}hw9EE|I4J>ckVuH_aa at s_9?@!cja
zo#TTA=|ZJ652{L3sTwF`Kz`!9$J2>2^{*|YF5j~D(gI}@S=Xd8aW|zAb at oKE?%b1y
z^uCRE!>i{ZnN`nEw#S at F2v(G|J$X=c*_*O<(Kq}$UeI>esoU`{!ZQ at Z3bg&{{cSsU
zdB&Y!B25{=Z!<t4KjbN@!dev{_FQhJ_^^kxOE-e~T630s$?qXjOa>`gQE4mk`y)+6
z10T&Scg&YaVw1^DTpPKpGRcpC-E6SL6Vu^}H*D|1=p_=iu+BrZX2z3+R4?FecXnok
zrUNjYa3zMHEPmK%-m;2$<DXpr%;bA7Qvm at G_qBgT86}S@#RA88$v}{P;`8r&h^3R|
zyR@$T#~Qb~sZIAD3RZxCX>|Mcm^rY$nxT?#5rdjkP)#a;s*^E2Fqj>fn<Vo}r`0yv
z^6?1Fy2WjQhdmjeA|K5WCamiTJ{1eC at -B-U{@A86xki195x&{OHnRiXav}~yde0Rf
z{P8u*tQBn)iMVldZ)s<#NN4Ms6N<avHDCD-WI!@S((7EJHkfAMv*C$W?mbUjHN>z$
z*qOO9u96K0h5=`o;+L|<iJPQGMs^RyeKY+Ef>LM&95z)NFH%Rd#7=$urX=O&ud3*?
z|3gc7prkU}+z0_FdZmB^MZx0oN<z>q)x_V7qoghjilxI~ES+MBoq9bv?NO-HXMnZO
z=IMH!Ulsw0r3hkgE)^!dYSMRttjG#;xItuY7!8+iNq at Xw8g6)_M3YFwz?Lo$$-YMU
zCm+9jos+449vb1*jDW>*<h|lYEj-9cX3^;w;_*DgwBbfr?CBF{;KjtXE(_zj<ty6|
zZb at gC)=3z6nx0*B+xEl9Avi1HeeRxL!U?qULldoUs+la7RT%#ir=(W<h5v<aC5~9~
z`4mB<=uDitWg}y^(SNkW>6}S0&)N^w at Kxq<mR}d1c$AnW6{zD@@}?`Eic)imvn^?)
zrpra5vkYl|!nZE-vGYNX#ob7ooZPnI*4V)erBx{8x$_#ZzZVY(Wgq`ePl at rQ`OX%h
z(g#1lqOQYDpG)UIz7$q|-#wc~CPs)(n(GIoiV5vU(UEA}FntCCph`-^h0JEBIum_b
zjUXsrvib%f)Mey}-J*!qrQP<=c2Z&+?2??BMsjjBHtK<#S-+t=1s$HY71I|7PVE8-
z<o&m2V at JC+ORKd7ft3$PbBZv$+jmT?eG^f(?s<S~@>{&dD`r7!w>TRKY#u5D@#Vt)
zM_8*k2<=R&hM at ZoLat#|jhTy!Z-HF>)QwML?yPB8w;z-fbWJisl%4iNoK_(k)i!!v
z$qN#NcTzz#=qRm at Bm?XnB#Yelp^{c`6 at RJWe5@f4QN+(NV|TN at 5mN2uV#0W<8{NMh
z7b+{%lFz`Va7A^-{dycuOX+d9`C?j at ippcQ^z3*F1<1&FB)AoX4pD1+aoAm*W5)if
zk(X4vV^dq5$90!dkEy=KFJh#mKl7}mQZHzK7NL~ZrLhspFKlMrPz1ycqV7*KkN+gg
z)s-_2==SgB46q%7?H?@x>i~-h0CTLG6DsO6OTd=`^nVq<*=kvgO6VVDAP}(iTGZW9
zJnMY3g{Lr`cofjTc102R<e{YD;d@|gtq-*tD6!ndzlL!3O at 6P`Nm$g(f)`Ex0c76Q
zO&O1(P$WP_4KjTRO_cVCe$s#_V=z!7xQ4U0TA)EA)oTNo|NC#G0V!6jxL~n7Jcr}J
zXADoyj<24jw}d}|$(70QOVPIv8$5G(mrFpbMAR6DgR%v#Io0g at -2pesf{9px)(Dia
z9}^i?PG;2LT!pbWy}p&3p^!MDn at 5Lzq0ANR9n#8s{TTKL&O~0^41CvTFb+Vz)@U2Z
zIXAZ{{ZWf`bdVgIufs{qfQqJohO&gRINMAUA$OS#ii3tE?se=AT>ImhxEJC{O9Vq8
zKjRJ(`-eONrk_WZHeh_uIXpAJ#)$g#O|qeRlEZf at 6tyBRDJqw%4NbbkAa$b&r!yQV
zkt(^|o6Zc;9&wxJ at bf0^2zbo5h at SH!OGv7t#lbZ!o)@AiVua|}A8^arud_idQw95~
zN!Ku+OE=-PP<+=8{`7p3r6$mQ(Sw~A4h`Q_Oq_vMQ6Yb5FXp%}L}^eb#rf|&PyM4>
zaDH9=M!ni08oV!?DIyEQ$khdBt5Wo52?}EY=HTdrg;u%$?_X4NQNjY>SdY~a*Asr>
zrm`tbR*gm5YLm=A>ZZ&AUhy0 at 8b^`}1Kpl0tDK5z&N)yPPr&V;%+5E*j at 8=Vt$L=u
z>2|w at U?i`jO+6Lw6=aNpk6QxaH*XHyxqJU8?0CKY=MTYvj<<5ypzY`JHpGfux+6ij
zz04-4Sp>P5w?+wA{w3;@q1$_hu=yX;{|DDOE74iDJ`a&OIWcsYwT*Zq3QA@#h%oH7
z0EjG&Qrk94Un`yvu?Af9>><Mqg+2moB4oq-e39X)+_Cy7x0Yl~vbICnAYcS-7#;Yb
z#-RkX`6lWQ3mMaR(4VrqCSF%!CfmTcHN(17`)oF$nJ%&T@=JO+ at u#jU#Gy4omRh>M
z@{<VX?cpv7_W%2WELgE*Qfu;j^Gkc2P#Pn-gDcc;Y<Bca{Ax7NZvC~i1=EMBbcGB_
zGq8m|jT)7)@(8(Zu=`@^gHuH-NC%|Tbf at ifhtCaNI!U2PwX(gNG)LOH#e9tjkQOMp
ziAxzEJLI!U=opDlmIR5v(%&kdMI7B at rz9L#lSu at -@`qIJaIdEYov-xW#C65z7;zbb
zk}zCJvE52!7mJAr%00z?b(2HgiRc}Fi*VJjNN+GK2_)Hx_wO4b9aKAfX^dLwGY$p_
zk1Vg17 at 5wN!U)0ePhwv!^?3lzEOezd2C~8VL^LH*qTJA>lFqU`l$`#hdherkwG};`
zqK0iG*T8xBT9ssmi*;aiIc%yX?+pfcC at o3zf3FQI%8M>gAOjgG7vgx~q5&qUF*g~(
zk)nV9yY)pV=dY9aAbSMfm?@5UjA_5xvaU3kqmhth|Nf~HapkS_gIzdrs6{(Ae}r_<
z(H;-cO=$8>e_-m8ZPq(=tGV`L3JMnku;;cD2%0PNBP%?Hbn#NmNG=D5#M6nZP$%k8
zMLECv;dgtya<3cx9+&{>e$DoNV9!)zf`snu(6ik*+DW&K=J$BV^sqE2fZ4DQWZv_1
zVWnX?XaN>36&BbYDRyawo^qum2t4GRZ!GEc at g;F`<e)s{{@prMJi=wMgG at MQN)H=g
z+n<`$C^xzA_EU82JOdVy at WNAf<N3Lu{uC}0Q*@yjB at 9MX-5~SRM7F&VPiV(m0+YWq
zYbqlkp3ZjaL%D+}l88DrU)K&8#YkhG*nuahK_x9AF<#oM?;+53!RKEBXJCfgk%}`D
z0*QCO2mD&#oH8t+jg*Cdz}#%x#?-2(q2$MiSnZ<%K9);S_Ak;*p1lD>Q$_oVor^?J
zt|3YdYRFM154DS&X|SFd9k*|Y^OPzqjuPGu*!Xu1Ns0y0E5C9~Mn`VsDXLd+-|Fwa
zKTq3ghhHlgxLE|vVlBna;!pfa^m2|I{K6S~)Ut&qBo5<AL#{W0JFo&!@|G9h2_*#x
zOu5)fuagvr<#zPED8aRH|1MzGpT?ZlsV at If(!?Fk);X<R=%8aqJ)s$rVie=e5!y>J
z^`>7^8kG$sG0!QAgMCPFp at tCK1E-8;X(U?=is&L<MKyID_qJ*sQ}$RD(Jp{dI%jcj
zKoL`anp<dpFXGF~XoQNxM;3e3ih?s~rVOGz5f(?l{rV!=lUyV at Cf(zE+JMu8Go-DF
zPf_MQGQm!^D_SY^O<#^fm;zReoJ<L`m2E6zVZ-@$xzNggZ5)+HFW>1&eVX_%xJ?l`
z?|C&M4Bl}D&vOC(Q`Up2Yh_qtQ+_VHSq)v0g6zagrjIqlThL~r=+qu|xbzH%nRUtC
zXGZ~f$EUc6l{Lv?6QoYst;qM&{f2wDb`_|_);0!N+e^l*`x~wfqaVV!5GF>xMcdl5
zuW(>JW5+ at 7`7jRnq?&mW1Rk!OQltPxnx$-y<DjV^%5>trZ=_NPX2c>Uk$j}?|FviE
zlqlxttU5IVU|TF?#jGEnUQ)Ac(hN<zH%d#ETfh+h6m)J**1GMZKay~Qp?`DGa+g=`
za$M^?&5dEHey8X5v(I=`#;n-DlU&tyTGbWc+Fr3&kR=EenaIi&BH&27#P~OjkAHmz
z&d0`%W!C&C=)C<wHK<X*^nuqBND(vV*`D`o1%{a6vsE+0d;!eM;234XKwuX_F<}la
zu%D{6MmgFwxHiD8S0)%8RTC<Hp6;cOZ(er at z7#HZV|x5LVkJ|ua!B3(@X_)z7*#Gq
z7*-DG@|?WG6 at Mq`(O1cM(>byQ64pMhdD4DV18dMR-i8sQ#q~ZvLklDtgGQN5)EQ{l
z&RYFVcf|(^@Gx)MW+c#fu<ZHErJ)DGKv&j2V~<!M!ngeLxi(6T at TAnbie|Pn#rI;6
z^s?6K$VOS<L}b2Q;T at uNN^GQupZV=agKBG)M6O!Ah;AWt&-8nm&w!Ygh2f)6uwxpn
zDFR3Yc;a>R<EQvlqeg`>eqIBG>fOppYE_VG7!D at aDe`Y;6>O!FAZe2WUc{;w{}V^*
znlEp*?R;E;pj!%ccIF4ySC^FUpXnF(@Le$B8FSGge_n<z&UB-vjQv{;MLSs_uF3}y
z;0(6Wbf#`~UZ@=?*A#Ri`ow+VG!I}%Vu-wO5*ZL|M79ZfwKRjGb(8=YMOaHN8^W87
zNPEN32e60a at c_`_ATlOmzY$`P+H7g7f(05cwx_^mc{ok`$8^7Q+lId7E7GpZ_&>dD
z at 0A$vrYt~HJS)<zq1<N%hLKWxSY*HWwy(af@))0B^b)YTo~od at At0dX0bd1!tO<pK
zTSN$4VE8?4jiR)@9B8X=!pli*sG4W%c))hbc3uLd9z%AdnasBsM3}pcR&S<C at vL6m
zE(iWay8=MJDov1yHSAq#Z+=#5&(vOVUOc4C at 1+mQKx^a`>P^|#OXqBO)e^NEy(jKT
zb7#tDXWP at 1%^B}=1Z?p=uKe$I0OWH4oO037-nI<W58Y3W?!0VBgvRR56VKds>+0|U
zG&VZMr%`pOWFdr?UboHF_>wslDtH`vQPrgSbVfjh5<xy-#jHCPJQO<TneNs7hRDVD
z#;70HFKQ4q7kkr91R6qy2^ZhR>wp0cWKX^1y)pkBP+!0h&&oP7`tY$a0&H^{FU_Nk
zu<qHcP#Q=>@4 at DfR{N&F^<8fD=)Z+og*^icw3ItRSdC%>H1tT+Rs}A5Y8h=u|HCBe
zpwk5M(pxR)GIs1qQAoi(9+2LPBtn~m^tucea4 at SlU=lMJrD~+(lZP`+hb#AaqF?vX
zU4U&)DC)Y0<qvA7bQ-A%lkfO>O4QWQEvE70*ie=_d!s*aVnhAVeCw*w2<nYQ4YG|}
zv86X{N|mOv>lzJGOTk at h<BegX6?d*9aN6p2F6EQbb`GD!CaIBy<I!h<b9#Lx2JLo$
zO$*8+oB4TEd%vmY675L`vOwHoSQSrl8YF$e;NQ=qbvnMQlA!Pg)L=C-4Uv;J5OltC
zw^^b~VQ at -X#XR>KI$)x_lhaGzgm6K*a+DqHXH+bpIa)_ at Y(kGZ$AS>m><6-O#Rot7
z{;0&0&LxdB52ei{X=MKdH?rLEXr>+c3E$@7K1T5o+QgvN68g`k0pu_Jg;Z?J3x#Tf
zy8hfM42P)QNMG at _VI$KH2|77deiK2G_H_3QYa&y6i)d;aq?#NMmapU$ytXnG?Q3#A
zKzoUibf)wG{tT057-dk2*P?1ohebnFgo%bm{SCOL2t+j`=Z_j9xj}~jp at pfM{zyW9
zTVf~;jTl&pY**gDwM%`IPhy>g2TuwyB5Ij^z(B%j!!UZsDF8q{|5Dl!&J-Q!W<GLu
zN?L?J`8hHa3V(^BkbRh=a+V>NhN&QNqz+FfcC3<|QQBSc!x7t%mq_}cx(|;U<7~oJ
z?l>hINswjH0_zfn1hO#?Ln`UpGvYxs9B9^m73S`~6|?)ZgfY;%e)?gExRqT(v69&c
zhuo21xu!RM(*|UfArG=51e^jZcQ2HP6+u~$sJ_RA)(BKTtHsY`VU?<sy;6Ed85R~^
zGbaz|@J+t30-=QkB=66q{nM{`QqL>fdsfw~kM5b>mY+q3=<r6*`XsoRCZDA%W^T9{
z-;PzHF0aDv!rVppqdYL(0$F*=X2qyCh$}AZZvD!8d>{@rIaSX*XHUvbdGIHN00TsJ
zV-8E4hVD(YaCZ1wxYA^S!Uv!|-tMPw<*-_=UQ;(Z3wM=%D4*2=u_pvi+#t-pP?@49
zKkR4Pu6$J;Z=Fe*g}zRXhJ8Iskvj=<;yx7IjXZqLY=(5mGmxv`6^&doXcr0`rXa+$
zS?>d<phCng`?^W@)qzd8LlxEeoz*u75or`9=kOxDo>Nu%bQm|k8^Y6qf!%n?urJbp
zZ#@9F(+9~ag!%SC(OQcJs-pOmC=tg^TI4sU<;JrWb0C#nL<2eJX8apYB&q=XXEuL!
zmlT-zYB9h(KF#BQh>_4)<kL*w#A1(L=2C+<KPSOM9gC|frQ(jRF)tk%{h!w=Q!<Iy
z9&Qi;bC%OLFHZ>q_|58Cy~1}(RG_O2;4&gXOWJy}9lnw!#<;(eaR58~V#>8Xmrsgi
z^-rv8OFPUt1W#`<KQ)Z^$cE6cs`c<ep^Ij4{P$2fZmvC#ex_-sBS??-lk5`9ilLI@
z)S$%5fMvdy1YCZ`Y at iUy%+Ub_w0uC)13loRCgQ#J(_iF~wrV|DEPR`c<VHVAnEbC~
znf)=|f3UP~D%I~J2a&aWLPcF4_yBzUJBxVkCI=G>!QpXvlrV)wUoV4E at SYOW@%sWX
zHD6u4YU+z{Is*&BzyfFxt9K#~^8T5|OX7hY!%1y88cd<T>(|Yrs$U2Pf%M16*_cjx
zHVSXxQ|Cc)ei%Am!B=cTwY0nrcsi3f<Ug0-<(llH2`XROOhvGW?G$<7@{vdsuEYfm
zCGbknJ`Hj|!?So&t?>5VTb4FvBYt09^@C|&n8-dj<+Jy#`iD0E0SoN<j|7a_b&Jk3
z*0 at KO3g$TWU*NE%fZZrJh-I0wAG(;msjz<)!A`RPyNN5}>^V;H%p#h`c!tE-5~F&C
zXY@>(cOJ~Ca?Dy24`97P-wJb&Y;CP?KJfNMjGeqokez}uv+i`B^W#q-t`wY{czE`r
zkr81pBx6z`+MFaE{n7$7A3MiQ!V?M5!3W0_sI7Si(zPt|KSC4|tMYHF5|ZkG at 0Gnt
zKmGJDkH2*&m`!9vBCC_^@6XMGb5uZ6G3RL!ef#iet#vb^M^T}MX#T~|+tAp*6{eJc
z^#2Xp+Fmhj_jqJNrS|g*ZQK=)*QF=Sg&lRZtx7>?aE3cr%NYH}EXdhnQy%4we at f8!
za6!VOHiBrcuhK;1M1yC|VOWH#V!qA(lV=^_;zkgHjNvy;F>z)c-pKy<*e|Fm=m+w(
z_6WZLo}cPBUi^L#E02Z)N^h_W#?Ne!=X~DLn#`Po-)VHB04Q)JpXpm$2Ow3A7=4(?
z1Za(NF)nLAc>Si|L7j(5D3vpIw at ed<mdIZnvi0K5nTja1JN>vx2}?qG&0IqOKzkVM
zP+r)^D4)_GVzD&MkM4T(duAK`R+OZqz$YdeI$vBXxyZ%))28{%=$Ya5{KORLKJtU;
z@#o6l_;2%K(e~018gXEt&1$o$vI at st1t`^^`TzPkXlR>3D>j3fvDUOq<_3{QsR$f^
zVbw6E|Ne_02FB&Yj~YJ}C7L{_ko_*f1LbE3U+u3*urnjQY9Gz|G;<#Kj=;D$h4IID
z_Il?$PZTZC|7-B8l|I?vR_kONJ+65#+e?bZ`chz{Lb)q=-=v+o*QHec7rnT at 7)qec
zs#a0EbUGy_?#Um<w>d6W5(7Ijt<&=(f7y;6V1Z5Q5xGF3u0|pFUo*%owkw-DknVT{
zyyEk at oYOjpT~xgNtZTu=ZTM^##_hl<0OC_*>u6bJW6ienL*N=2!BVs=L6O*JsxxQI
z+N5^C@=#?Z+p_N`Dx1<~DF5i~xRPOxt>!X(5y*Hp{U-Lfr_}FDHgfcHj?G=1n7XmD
zk+EWw>-~i7-vB1!R`WU-!sZ_@(qMUEo+Y3H6)`-K`&1eyFv)GYO`cx8#aN7x+HH at R
z`ciuJeIZ-wr|uo)wjjP}*NAQfP0aw$#6c`3NTp;j0s{z&-Tu(!75pZ^(imCYqB|;K
zn;-u;EyMq(wE4oDmh-vUr8Wzb6B3o1zZ)s`#bY18(}O<k>cAIt9MwI4Hc)Z)IrBpM
zya=6W8P|>4GJ;^5Eekq^O^EF9iqoxDp&G|kyo0bfLm0EoRrw?ZcAEPGeH;8^MEkMV
zewLW>H3pxTjrQU}4}^}ZFnKS|Y$I^O&~BzP>x^V;ZP}*iKk!#0lENpM;yp!|^YU-z
zs^MbU5xj=I_1Lq;&cpHSf&d1-)+p{P?Q|L`);hUVb_(yi>n+WuF`h4#T=kCG$ObW|
z9~pn%vms;&p)AhbWpA#2q;LU5u`g|#l~0c9908{t5c!$AF=)>;5-v58>(^dcHN*2G
zlZ at 3u6R}>K(f&nPY&{HYW{cQ30XADzbYEi;9W06~{;&htTRN{J9eze&l?};=lTO3*
zjZft7ERWL$Y54k*hTX=UrFj%Ug(UwN!m*8*V{qgiI7&p2ykr9dFJT1nMzphI$7rvI
z>fkBe&;g6yr!}?oB_##46%Qv1HU4EHk2_3XFhcJirDH)rxn`9fvSB;4ir>sU_tW%O
zVn7 at 3KvPx2e&!LOifV-U?rDn<a}{fWh4<A_+z$J$M$L6f%%XxDQYF at smN%FUiUyrT
z>nTK1i)lFPv?cOph at V!|=Lqfu8CItS!y7t$R|y&3{m#Kca^zok)@bUp*MR$gQkQP4
zIdL6r`1SiAl2?|mubsAVG3k%3+znx>O>&CPfCGq(un^Q5f8hbKr(o+dk|I6SPAsNv
z?SW9qge*Q?GC*v?bd<sRwly1Rh}ti5rVQR!^DSZ81DS%f1D_#WHk?((`uGE0TsX&6
zWb~M|_Nn3XCUtG6h6mail)V&=+WJ2?VPWn7#**vD)?Zp#nhk&Klt1xoRLACV?HOEM
z7rVggpmJu|SqVv*7zrL6&K*<FqTD at 8)FJJ7fWh6o0SA$Mp19mzeZ&<DLy`C51CByw
zCS}{(mK+=q9W{^6y}~SCz}Wo;eJC4Rsr1j9EH;jxQ^Ay3l?XMuJ at n5l0_uqusLaMq
zk?m+;>4wl=dd^nz@@+y=BxSI`&?b=T=TA>*F-T<B>)Whjp=$-5T{{~$V0oQ&7ERO@
zimV6h0pGZhkx6Y&TzDU-eXZv(^j69l(U#t}&s<#k-VYDu8pn85!H+4Tk1n~OdsLJ2
zCvz|)XMub9FW!?hFxz5SU9p+*@MEJB<eP2X)cBE9wBv?6e)+zJKP1X0(Y^*8ov~Uv
zP^F`?fI5U|yhH{408RuD^~R<v#SK|o4130Vy*8G5cvGN5J$!IN8WH8+2Bzh-c<eP}
z at R*?Ui%|88sU0C$!f@;!MZbG2VOLP;Kq5#;A%vO*%}Q_%YfmY6ZTzekMwsAoo-TVM
z-jS)sYi|><C^lc`t8k>e6yLCi8@=hh+_lep;jPLQAgM113OUQhYH>T#Z66+4;CnEP
z#SxV>S3zf?vX5+XV#<`N^cRwxLl!IHN%yeJK11pVU86w)tz8lt7~LlC{PdkrYQnt7
zVUiC#5s<lioBc0i<n8zY_@(6t$A%cokiE=0XL=x8jj^Zl^zd+g_N3YQ%Ud<uL6&MG
z!3%lO#LH_sgbL|V1Q1-!QUgrhn6r=rrraQx4YA<_7R|yr=Z|dp=>+V~m9zk0m-hig
zdgcH7+5{DbX at vrkeL5(RCqmudMpE_zCodS~AnOA7ZbY5<(gl3JhJ{ty7^3TQOS%de
z({}(Ay^lK-D5i#bDkGFweytq#8>gub4xw)vUrO;ZjGXWUg!qjX(9 at XnYBH6iU|0L2
z&1&E8o^Csw>!K at QQ|r~7VL3<kdRaQ~gi1qy=W=@KctO*I=t|Ii;1FNC8LNInffsXT
z+I>TC-P#0FZ6_8sr(MypC2HI4b|cAIm^3z at pG9vLIgoVZp12pBagEbKokVGUY=H5U
zc7u}f at U=7_>K_1;{yy+RN20z>Ezc- at wvZUAh9s;%-OUT9$O$?vWt at mTuP)rVaLLVL
zJ2hWb6GL-I3ITETZ=?w~JyA0W7}v8ph!xJ&wMLA7&G*ud8qNfi>^*`xmkg{CXdcw2
z8=*I$-xW<0>2Oa0F}f4+ql5yYJ^EGSjC(7)y4x=&a+g$a2E<j)9q!fQtm*fA$&bR=
zGX#ielaZh+Pa)j%DRKe1RD(7<B|F%+Q0~|1R<CCYHit115{!OccAm1!%mwl%CAnr{
z&dST<gX=uY3HdZn6q13mh4)GIjrB8$1Av|lOd+5OcE;*roXjfVqH8h_XF at XM1T3Pi
zU7j1eb#SN3D6M2dH^XAuXo5bF()DIYYit9}CuqbffYj!GvwX at PVR7C^ty?>&Wv<P2
zLL)6K2goegZ(`P4vLs at l(553;bAmEFQic_!`M5C52?$!a5e=}ij_}iExPT%<fK#$n
zT~w4g665o611ikkjm!FO($QVz9wUp>S)0ucf}E}d3VO(Vcv$ZflV%p-nLL){0ANX|
zCl4l_?L}~vhkPrVwl6H&9TWM=S^#=pPk#*Lh%jp;rsc_Ar74kOr^@e&8pzX_HBHS$
zNeWLIeq_p6qe{A3)}h`l(x9Kg-U8?YqYQhcK2YP at weTiH<3enHv`B%EA#dNkHPeO4
z!V}lUFqDi1;!h9xykRJ(@bHd8Q7F>ABZnvb&&d}%>zA)sFGMk_0>P8^(Ux9jltOH6
zJDj51GzUs}V`1++>Re3KD>%9#&E=VZU>i{$qQqdSNTPb7xvpN|p!rWt=$mUZrAXy>
zH>tRO^u`s*8LCefGg>PB?FiZ?pAay=(OQK`%c`UhU3St}6Msa at vxZ0VKqE*wCfUs(
z^QO1Ye}}GLeE#!evBmBjOI7 at es22$&84bh>ASgq+H86ERq at 6h1*Asj0V}`onL`d|&
z4-7GCRC*epVpjUTcM^uZ5j#l`PSR!=_0xRVvPkouZW3)shci&-Zu(`J`@Y=DN5+xb
z2lpmDvxe$v`N;7 at Jf5Wb!~vQr9LlgCa8PPDrl5fx-h1ER{6Ngqr|+``n0u-|kSOT=
zqM1U2N#+ngTc3L(>20DP at Trc75wk)9Xo5-flnS6DvIOWVNTJlRZ3lEFXVV(Mw0W;o
z$iOf4{^dLwS`Z)ElX#iF)=Su4`I0P=`^c7MJ79gu&Mm%a4)wW+SO*e$ja(|{qGaZV
z?|K(>te)M$7fs+1C{XaJwj}Q&Xp%MKoj<N33?4UZqDm>Ox#`<4yrw~M!p5iiTvRXD
zG2dGamr{3$G!0mg+qL}|Mu(EPr%-LP&x+Z*h0qA66e=_NFAW0}(kl8tU%qxzhv23m
zrUv-OLtrbmxs$GVxUAes0i$U1e5i<Bi<G)ExL2K-{VeR=n2-VSElI`lFy}fjK7}Qb
zSQ at dTdfyc=4aw*Qi(aCluhC+dTU1G}5o~&-{w2dli0f!Y3(gOz&vo at egXtjY>?9k@
z>HqTLeA#d@*`}Os9b%2#m}!6+>5C~*jPCH^^$exrvT1*um1K8t1|~F}g+Zn;dL`=4
z%PFt}bn8s%4n6jfeXDd(4_VAy+G2BAoQ+TQ6S4>gO9biZqCMsDmSJiGr$XYUzBE`s
zl{#xi at j7CKo9}-#ou{Tr$5wjrW9eKZwBj90#~7Aw at 2kNOGUsClqJ13;8Y`MohpYs-
zefmyweTz^0nWM*PsjU!&)J|XMh)N7BVp%OaSRX}6Q6nHn;q}<18f8^mfqvYoYEaI!
zUra4p5guma7ZM24+;a<~bDa0tz`Ha- at _79QZDH)M;d^GoP~h<1?T~4pUyh=#$z!Cy
znR)gjaaX2|5gPSMcyjl;TbntRNbP at EqwHz`h47FVQl{51M*8<;2dXO3%<w-A)sX9J
zj3{8KC;$}#0a4A6TsB5-bZtt|wB%mi0_h|KO6%QzpnTU~ep8Uxygmp2dYRri568-r
z1X#$vZ5JmNL)Ap1L~FSl>JJ(LrSt{!)Z1!+$6MI3Cjt??nYhfkxxGCWm?Hhi0sFGa
zMFsDz<B*0GA87t?oyf2cYKPsP>&Jfgsln at fd%G$?usO^64Sr}k?VV$Gs<`SUOBy5Z
zM#09Z-I*1?a&>|}K*uv{lY_Y8+pH>zPuCnnPMYzd3~n8-VTt=nKz-s~zSbtM6Q^AB
zo=5KVA0h^&Rt&RbGT|_QE2yyCy<v!VQX91zS<5XB*H5OQ><9vvKaa~G10Ia~sb;)_
zJ+PsY3~pjeFEI>d0--rtl1Ida^&*wvj=(>cxrWn;+0m)nfZPShT66xGoI_gGurH*E
zzA|Gvx$+GYSD2dAi_TSB1J1 at 3SxA!k0#ShaMq=^+F06l%PAdr^6)vbKgv>s_E9pm(
zxk!9ylf3g08izt?Fz=NEirWV*tAYqOPNDxt*(Id5dufQoG_R_OELFon*8A}gGXc+u
zEy_<8I)Y*L=A8l9kq at 8p-pEr`d_N{{4`p49hhd|>JWP8GWuBD&IoOBeckhYh*MV(z
zi~xKV|1BiOHKzd}?(0z`oGP~Rj}m&@wKc2u4pi*<%3ds8Gw~=dl5S5CBO7hT*dW4J
ziewV2Q|DEi6xnIi${nHyN^-+qK!{M%H^lJ;L-56>EAl$Q6V)0)fGtpGm0F7*OFMP-
znvaiBY?X+1KB(v>3t|*ZA@(({eZEXv9MN-k*DmDT-WCv_&BC}-G*S5Lcylxp(ph)1
zIc*V8wDyZU5n`{9U8B&2SDY(h${T*r2*uiG2xocfJ;zhfjOuMA^9q<k2F_|?4sb$d
zG=127ULm(o;W}3UF9K%gIVI{+3sy9}r4$Xb2MYD(Z~|?$M6r{elEumN#oa20MK68I
zU{za<hfZ(_uN3DL59VBa1{U-s=ybk;NvUgAica?Kns$HRGP at Ixbr>YT+FdHRb6p1#
zgYfOV_B{*8Ho5xrJgyr$<6&H)tah}L=A2hvz{2A9Scu0o#mN}c+?2=R&s~z={Nxu2
z*wJP7#!2 at cL8D5WJLlkoymX%}ui+vtTzhhB7%u=Qol?ZJ#Z8ssB!GKJR5(^Y3!as(
z?@K%Zt>Z#H;UV5X`M!1yckk4b-=`~ZOpho;BZ|3uY?tuUJmOh>G`_&ulX#}&*_Nl}
zs2wjCxIA at U3OSgR=q^*VAOa(RXQ&~g47rY<?IQFAzceJ2I#skFgIFi-QE0K`Lqf3=
z-a3(=c|%oM{wjh;Pwu4J8?pxw#%BJTDEdDDrdMZWVe>KnJrP9iP<|PT03v9z at nIaQ
zYe|$_i%vk*j|@|3DnkyZm?@g%+0F$${ig>gL$3Ai#J#li$_bleYtVLsEa#)6Z=E8}
zN7T1~P at eScdYU)VeE=Yd-yB8y;$L7|tVE5_Yd^FfFln>u at R5IHwx-B$7ujnUrg?wf
zpj~sXZKABY(>V(o8II<V+(I?9fKg&VY5-E=#sR|8q;pVb*KtMv))IweZDjz`JQh)f
z6R4MiU|=S4>)y<RZOG=WB}Xcst>5r1*s;;Md>9f8o>wp(N}^6#0K25Splu#Dx#BdR
zxo2fR)a8Vul02m_lmItC$iI|XN8$`=xVF1_*bYNvB7T3MMN+K`sCYE$lqq)R2ojsB
zEh9zG at eS25TD$?4Z!({nIxJfy7$)#$jW at hT$Mc5E6t?MOPuyHC^~B}7Tpia4xeq}z
z`*>@*qQ=(VF`X&V*{J4>i^M;G<ep>gJ48&fN8Cu9(%(iKfrT_Ib^*hA#NzU3i`M~N
zh*mJw^rJx_6RXwwPMdv&-+gG-zQK0zT~?)nt8Nj#q9Gu~g{8TbLUE<OtGKeaX=YOA
zd<Xvq>5#@>OzUTj4Q-;ouLZ|#`n{!1d87)TJaF*g!WS!%+IWMxmbY^lZ)Ty=Uxw{K
z@(nXAc*qF&Tob%5H!bQ|zu;u1PE8Vc7ihLT8wWAVaOuHg;C966`3Uafjw95eAECm&
zGF29;39UTjgIKL-W3Qq)?t>58o1{r7TrWBjRK}^93IS-oZZNmIfI2{}!s!5F>rJTB
zd%tpIQl;>2za>Dv+XEr|LOwS$&&p9O3Dm2U>Cx3 at DzhlTRS|_=I+zQG=UB1Hx|%Cm
zU-8ccAuzXsO&R%x0c`q9cA`Ah%fe^}F-7F57NK_zgyTD6yjT(v|KBuq5nO8Dz(I?^
zcEmp$B^<KACzNV-O1r{CerhO at IjBTm9FV0-?*5XwI6A;xdZ<wE^MUm(!q!*8kKx}g
z5B4)*9mJLm!k7fXixLp6F$4Zl&5mXy`IcTTH2+Bc2j$E3jz`mT8yA<b5(>s1i^4yQ
zyv0{j+;0!dl8t?9#=4NU8Y{vnc!5ZdXtpB{9H_E878z6I4huxwNPbYtd)vYHoU`I9
zE1kVIBTA`i9la0|7|>`!;hx?o<vG?&n(m^D{W+!6TW2M!6ziQXnK+y;{7-5r<Z{PV
zkvp^u7PAQq_o75Dj^Pi38yyvrPYgV%^yLWPDiS8d?};BeBoxU=b)Xn~x&u4+sp&gu
zurc0L&o_*q0Rm%u`v0YN!v~ABn|i&HSX9Csa3QeBI%e=na}9=*Ww^r~f;f)|;|;k0
zQZv8dY&3i~{YRd8DRI0p_qcJ;PaZ^QjGE7eGzD0fVWOSxNJuq at 3Zl|4L3lYCXuVlq
z%9r6FX at a`^-x^{)-7#bz$r~x9pm2V*p3Qjjs;UN*m}I4tlAthXMuPtQ<_#j5X=9h8
zT-|%?UD08I)TrT&97qmvNPRG{WYW!MV$m?1W}fvX9>8R3D6=W61IxA*!9`8f29PO8
z-_#)CV?&Y2r*6I*mao8rcmAtBv#%!Ul><iy{lk4Kvm%pm-r0UilNj(q%fvI_St;zW
zR=2u0wdF{Jff;`@*}4k`meGmCuKt+gO$n+Qr+c;ZH$iVae4Tsq%J+#5*mof8Mobzk
zEwdHWedY)5O9a1wn67zCC7 at Y!0~P^q!G(7c*6sWV>I%jpjcp at j8?F}5+-qv<2_!mU
z4B}yvqQXZTQ>F~J^H}&%{1U|z8HaGTdbeLE-aFUw?enA;Ty32t@^bYz28EC>TFUGN
zejJp3j2?f)A%D4Xd8&WoGugcmk;|k2NCx<ym3_DMt9-bOx-2t$`@J|tv^HYEX?C4x
z{O{PIz=Jm<C{-k)*kaY#j?={lgCq{Aa%g986_8Q84(;9mvDSO=#-Pv0=GiEDZZD&D
zQYxDOhY3d&CpJboq!)`!5fA2<=gndZshBdCf`a=8oi$9bSQkF4x|&_zTKROVbNLYx
z^A|2=zw%fJVkx?hZj{RINs#xLcY881+WuBhsu$O5Q6^oWxO7yT=1B+BGrtBjng2*}
zq&j%Esmr71p4(&kru)2REzBMa#LA$il-md!1>mD~8{z#U8F0F;oYifC?KxbCZh<lR
z!<kSdyH+gEDPx|D#gYcbjy@(KFnR~S0`Q<;AaW9frEHJAaZakegvK3=_#A}!NFRv^
z;nCk!%5W!wgjB7ov8SHUXEj!qDgROw3jFUq2dWAi9Ya41=(o7=l=Zt1b%zJ^H$!1z
zUIa<rKz0A&Il}s{!d=7%S6gW?nj*c`46R{`Uw0NtJOhikMfb9!gKF0h_-Y%&?@exk
zrjUtF1+yU#%V$0LlSQs82MD1zh&N9q>><=88Y(e60qTC9H5q=51R{e$?GLB|z9_+S
zIihSv1RpNL(y3gF=+g<u={|7c%d<+Kjqur}MqI$dH=Rp8rz7`mPGrPZ__<Av#r*)9
zd4`6!>Flkt_4E;F9p?-Go9$PglTNrmE0Royrt9s<Da(a?R4Q-nNY0XXM~tM9NG%;l
zsCF;vbrB~UtwFl%@t{k4U4psC`;TWNKkNn689r|t6SP*Z;9ZZ|*HE04PdS}%KVqKd
z;B|1AB1M_m;ja$~EJ8%@$RXW8ImX(V_=?~DI!2<)k>_-nT)_}AVJdwaw`!Om;sIF~
zD>KPy)xVZg4aPp`PqBB6pX^5TE}AU3(E5Q5A`Tr5G&8RdCxdyl7fKm at xHb#R9hMNH
zkhAq50G5CJGjRJlbehArn?M_*WWrT6Y=%*V8rmrv&`_mlDyq~H^D(M|)i5NE+n!)0
z@%5P71c}B^1#ZDYqe+u at iI@*MoSYpylEc2<aZ!9eJc1s-Wyk2kw&1x&NHnCYIFdIJ
zIz>oj#yLW6B8<j^Pjc|1FaKncAaaez(U&Z#q5)qN(0LO5IKvmnVlx`#cTluXf;l$h
z;aGEQ&Yhj>DP1S0!a>tzV*B?HKM5w&Y%h9wm*amE_)(*Rp!D0cTC at -PfJ^FQ-?hW*
zwz6`J%+wR}e#z8`7yeNZjMt>U>;VC*GtCVr<>HiQ$Q7?w>^t?MZukDk0ib;~Sr1UK
zA(;nTjaM3|bo~>3Xz(_2{(OHNP;!DU{dm!{y28!b6#hL#>^eO98_sWr3R3!YC?9)w
zHEAI57yQQ+e>d7UC6~$9w+qvX3O at j$XAMK%SrrwvK;v`WY<*7-@&xBltc}|ao<b>S
z1ZQ2 at H&L{=|8227z&~55=#aoGx~n8E9lzM_V0O9=U|bUgvsb7VqAr)SN0*v=^wcB0
zzM-YGI7G`7BZuwpMPX&Hx65C&n_y$bk3RM~dk=5PFQ-pv8vqsEZRg%hY(S7*HA&>Y
zjYKNVtBk0JG+#%iobwP=2%BYWhAXGMPqgN%tc?h`lMH(q{)0e<*pti?>th-vYM)$m
ziaLbI;yd0)jnd6st|ZQ>vB|=qlvyPgqHcS`g)AtuG at 9L$FQOs>P?W1wOI(<(mL!oW
zNMBJ*n80`r24JHh!adjlC14)!J01O#P2o at Ghwlt7gpER6Bnx7NIG3)^`)wM`mv;%#
zD!?}g@$PBk(h--8i!pWrIE9gUOt>|O$dwCZO?q~&M)P-4D0QbH at g@(_427Q3s5pA4
zRI!?FR`e&&k2(!A4--5V5 at GLPVKa~^n at Bl$lHQ+}uRT4jJw>@8Ff7Cx(Qw(ArI<;e
z7i;!hG`s*s;I*Ms^uTg~fo~CAWdgdv0zOtLf)V?x8eQ#0;9>64ea0Yv{u848f87h6
zlFbLdAy3`8G1>qwDKmp5$Ok+{I6KqgLi<7it2c>_IH6%9TnhYs^k|PEE5r2zURoth
zYl~7!GsM+`GQu<T+-dKdyCKlliJT;5V7B6^ID|3 at t{aQWy(@h31?`jX)xlZ24A?bi
zN;7jlgW<@Du8R$)(x9|fkAB)sH=hu9NHf(^-olTP?GaJzo`hyU`L0=IG#iQj04w*X
zfgotL>wtsALgR-;pC$npcTaSXJqPoLq+XTE_?I|5h>98MJH3o7+%9S-%P^;PbC>6p
z$?W`%aQyY-R4H4dV at jqfPzc5z;1OFx3#yy63Y4=ErP0L>d<`7IMP2}b>YHnGr!8tj
z9D<01OFTfHUQeUpP7z*g2uxR!hyZ_(7Yv$`FLnKk<a`-*I0B9t at n^x?6rVAhu at b$K
zmgY?a`D?y_X3(R}6NA5uexOaGmUk3N;Vee^0Ucj4!XBl38Nmr%$m!Xy9gr-ZU19u=
zw)Wf;)xoYbuqm(vhQt2UfdyvFX)?bDxJqtX%Ch<ThI-rv`b--~Pfw<*n2R?9u}-F8
zur;yW5<^?woeh22p^C2kgr|M1L&CCeuJ|tlLt`?>p7S1N6R{a&|6ikmMEy^P5gt;c
zFQOZ=xqi}l)HV%n$aUqP1vq at dep;uHh_S{pZ?gsuR9QLOv at XycOir-{qpaC-98CTh
z$yt388(ih7*50z<m_yrPjw#m#Syj^8`PV*oRFp7(Q!G=)LbH%=sMw9QzuhaR4?R9P
zm~KjJt`YFld$%4e2;%u)urj*QOm|)l_WIr8g*5^h@#j&vwh;x)5xj2==v{RADP8)3
zlXj#5tw{#gfLSbLgu7Y>(B>!I8{Lj_`B6zr#4Kxy7Ib?!PaLoy>mNgE!_Sv<*TqMU
z_yaIa9aXcaO~=0HSzX7LM9?%z<lsbc+53&TtCST<9B=01$W!11;;NDHNcARc$vfQ}
z2$kgPGd-Y!AzJcIhNu-hnO&+-PGp7z7naBSus&(er4Z^rY4;-S(iF3kLo=wsZWHjD
zpiECoSV)SghX4pze_|cmeylvr^qSF(XU<Oa$%$)XvWx24A{!p!{3LYtqOlm~_A{nT
zm~ANp()P}g_y8V6AR{3oIe;9C#?Zse;!#HV;P&1OzBV6vxDmMkXLIrRY?fX{|KfQn
zy|Xei7Dh>21PDdyC8<h8!(j(VQJpxDx_#l(7KA&S`rCc=l(}|X*P$-WT}O3p>L4E?
zxmuR3oq4RK0^2b~g!Mwz;kfMW?~eB{{Rm`hCjle46D7zX?l&$puD|9XURi9V&-!a;
zrJza6Cns)GCPX-4i7PhHPfxKE=Amw{X19q7wMYVAqL~HykH$EPYs-<bvWR^FFY4S$
zcDSSj<O+yJ+AfnQO?y{NI4;V~aLM&rU!nbJ&1lF`aoT<`26<W3;S|<z`JMr!&!9>o
z2-h3=t0$TFGdj582EQP}KlB;Q!NLI3b`L0lwV9rU^eEq2200|>dWH9Q%K{Sw0Yk7c
z at n!A(#B~ICXvMNT$gS|t$87D-;hA)RNB8*;^$**MnPYcaIE`+Br`QBW+<`T^R3NB&
zB#59>nH at -^R7>1!|3z&}>NRrv4pn_lU1;r*j-zN~3F^dgQe2yno$H#wW2I)73J#hl
zV$Xy+t#~_Tf|l+&H3&x`Ha3Yy0QVj?j>wSFr*7p0Ab-NQrQ!OHDkI^)htNRS>xU??
z__ at cfw+{;0V7zSRQ#p5Y at Y`HkdVu3k_1^nOLkS7DNJ3!26MzjPFrgtrGODKaqx?9v
z?5D5E5tLHv$5_{TkA1U4BH2n&lNDvy6>Y7X0Fjp&qG|{O5?|sOGTU8(99y~VyTxe7
zcJ+TK=qpR8uz^EC*Fl*)R3#v6Px>jjgP^u|n+z-L%SIrHOUM at 8Yk%*=4P6Sv7AoDe
zO1$p>bI$EpD|0$IKdgzpr_1^3rdrhVS9*#hXyJUaLv2aXIS(zm*UT)#yrX`7KEW`J
zEK7!--DxZ~A~ayBUFl!=AGlfmrc04m1iWWU^6d#idU9}pII`H4VOR9?+^HuG9lA?i
zw*GY{(SC*2_R^Wt!4L(Qb;bBo)oJHjTjfReTfH0RQpp{3VOI(rWdW$4a)@`@)}Wct
z8ZFuLkr5*#f;Vf3Ttix3`#2)^SXkxD^VtkgdarY%cCj~m7ujqXNG1}NKuppW$KiU<
zqmHk~dODqReubjOX{y5Adkx=W)r&u5BPocCMV?<Y<|PeU2wv?jwlvpDMZ-taVg4dU
z&vmef|HT~yaF~4lC52#*xbq at HiR+Dp?3cH{8y9 at 5M<ge&mrWXfTr3cz6#=IfIjLt_
zje(+EVgybcjWd3}KdCF-4gtP^5WamIadLl$g#_k8Dx9AoG_t>ize;-zncBAaA6H{r
z3078=i0N!<FT?52Td9uD&zY;ZT4Gs*zvzWz#jm=(qnV7K_<<<mBu|1$a#vZe1()vW
zRlz(ufdoNiOhWNPcSJ8-)y8c-&nafLT8j7|Gi6csRL%A!ozi(GH{KLfB!Y-P<I3)=
zq2rkxdb^!eM*7z0oJ0mM;+U5sXeO=l2WHNmhwm3~6$r)3VSP&D@~R8X4s_A4ciKCx
zI#R3g&QVOg%e`~FiWu*JJZs^n#-5LkP4VwxBVw82wlhCFnq>7E#&U at _iUG*^iP7O;
z6D34xLFssxYCDPcEERVcATGjXlCbT<8<XN<Jxouk+97W^pvu+#a4U*YB(WN>NX}b-
zOr!*e_s769Y_O1|opOYteU8D8 at X@V at qR2aCWuGTLAV*Gvpvfm1mwxS)q<KZU10djp
zP|HHsc-P#HXxXF(FO;lTwKSB){WH`cw*+`vT;86U2~&LgAr(A%l?`zxO`yn8XZA34
z(`eA&fHGg~imF(~d*HyKZtPHYudzO>HU?s-mimBewZ**MO<{<K5#`8zn~f=?NFM=8
zA#S^^NDvS?Hvj!I-7(}eCq@!9G5%nYPno)vjdyMJLe*21GIg72`S82L+e^8^jse4$
z?np|Hlmtm;Vtb0DK8=#48OOLl_(5qQ!_k(bxphRI)hSJKt+{-4jmyEiph3gt$CJng
z7?%#Q2>gU*8+y_v7bc9uygY-w3FU~}m!!xEAoaKxTjNV8gS7yT!~|AbJ6p|q{8wsL
zgP4-cWt%XLa^h=E9$TA0v9*4I|4HaLCw=w*|5Y?Y1E6^JfJh7w2E~*f1)&8`(2gJn
z(x=*T30O02- at w)?IW#vQzy$Cp6FmMUd|WqQ7_l|EnNAlIY5ADz-QUK#CkJ_{(HeFK
zyrfRk<2-j^Q);RoT1WMxp+9N0ZE*5k5moNKqwj+MWhu#@l?pu>vbpZ0sH&6jLTyPk
zqZJ_ao|Y%(A2Bn!mS8BTv9^NF`qO8{yzgXmfHwk5oB=A2x$z;23sBIEY;Ok{sKO59
zAj{SRl$;3i3|OC4R*;xNi at A=kYck7yC44kMwmp^H(*rT7Px<V;Jb+TgV4Uh{>|uQh
zpH_g9P2&%h=Q=W)+g00ZZML$RG2#nhw}-p5`QP*6_5foM$*(p at xllA}Lj1=hdJ7k3
z$<>-z8n6`)dK)+Ma=hcfE9T7gt1<&F2=Aur47rfm4=^(<GNoCp#^|rVE=6KSQ0^NY
zd;Xm)T&KjE)MtkV6?izQfAbr=b9)3||82|$fG at 9j?glU?{RhVDl=wRW519^LARB&W
zA at -Pbi}{IZZzSD+%*h8M84rghmZPSdx+F9|RrQQ@;5$@IL)v(=1VPGp`*YdXC*@4s
zCjgje=X@#Cb(LjHXycJB+xpj6Ea02~IaP_B0C=|^@;17=J_>(G)hq9wl5g=znlj|>
zFKqI%M<`KI_z;+GF%b&(wxYxEZzgri|1hd@%hy>SF?~1?WYVdR+IfZ(J%|Wf_t4#J
zvc3-sMQFY3C27uaCfYaPk8%65`WFoIC;MWNWTMmAp at O|1D5n-_G<@HIY=IZ=|BxhK
z#|F8&Z^6c$;IzmumhF~%v?H+Y5Q(HUiN~U}$j53V*?Ha)B=|iKs=M1J-Wv`6=H;Ux
z?MSchI$N76bhS2K(k7X{!`Tcm?Qt`)9)f(wg+N^K#{ny>K9TOmqwiuMZmd+=pC7gd
zv<sP7`C`s2wB~6csS)PUY9a at QII|%|qXKG?Lb8mo!rM~}fIQKBLLrL%zsnI!%gq))
z<jDMUNDh;Oqa{V6mst$^nmHJ!s1|DZCQ5RrsuMh4%|i9Jh$z&vE)nRgz-{5kdhP(J
z6E=kTmM9BF7|HzhWUZlT*USVxusY~ixi32+0PxMmr4w|~d#a_a#w-9QjT+K?BZdeb
zh`*fdFJ*H7(QCUJ45Sus)9>XmFxKTsyV=KzVBJ~cO2W!)n&SAAD3VBK^OJRfRAldM
zW&cE^zB$R`SSONZ7((2Gz2L~-10T6#Hc%x(H0F_sw7Wa5iXuk%Nq`*@2_}_4A#po*
zNUs5cb3D9;DxS0BbX<A(*a1ayky`5jKz3)hCd*J!`3K|rCR0M$P~~0gT5qlDE%8-U
zI$KA`z}K~I4l&b&`hfSknD=6#KX-E;s4vlbM at Smwuy|G7ECrTM)fq0tT%vjzKMOW-
z{J=f&%*J2`vd^&<IR<&EEsKU6)k+JJ>e0|)=u4*AQjLu*-`ihdmdkvK at Bw2TTd`5Z
zI)=|pI!&a_v*4_);Wbr>irht3isp%FHmB{ViGV2R*`(D2b?FO)n4wd#gDgsdtGdoB
z*$eTCYtoQQ1U8e!5H<#wWOH+VrSeDBDRF^{Lse>gptb!9Eu^M4BF#>hyD!62_5$~t
zkKyIGZS;g)cEuuhpt}j|j^ai20d9#N9sL_KMs at K<jwgLyiDF}a+0Ob7nQ7ab-Yf+V
zatg+M_SPG?Xq1BlE|NA}-ragl^H^g9{?wUq)7TuaI4sgLH-#Py*WU#t8rg9Q4b-fv
zF~wDt`vfQ4X at IhkODZ1JosfCIvuC@AG>xLy at Dhe4i@2MF{kO=*&6_>o*RIqi;UuXE
z=g1nkJ)Az_7<{ipH_`(tR_M9SrvP!Y6nelj@*8Td7ddlO7RB>ly7ElJHB>$#CGueZ
zCG<=ZE?3`H+wDXOCqE8p;;jb`At5bBAZv}VcO_V)1K#Gslh|f!U%P1G6_H$FJd;QM
z6u5xpA<gf`mE!2Mhh;_SWb+83N;)CZE*JEoUq;bJvP?;8rPBj{F=QK^I9XUA6O;1^
zx@)?yuBCN&52qX~R!?rdzP{<6#(ol5Fei=!*qx=AAd`f61X7-n9SWJ-JhoXlI6W0&
zcFnjpE~e*2P?E*`sridwfi>W3Fo}k%#qNknw!I&@xr3a3)Ymya%A;VS2A<Y9X#tD~
zz;*BN{5#;Ldh2yY$WsNKX*<Mt%cPg<mj0SKRW%Bm_oDz9e?A<-DX6thUxpU}T-_W5
zpu{tbjS9Emg%GoOZ`rG@`}P7-D&uOeDcM_Bnw%R)*!(j$Wpu(Y>Ug`;q9o`)8TokX
zmwf>I<MvaAfng>$M1Yh^lX~fv!hwGq4)tbm7Vht&yo-`K05wI@&jWmw2za?ompsQ6
z(Oa3ZlZ at WjuVIj*I at CdwCV@B!F1 at j#+%@(|5yN{;17gR at AVa$G*gL%+^YxoRHd3cb
z- at D~Ypd6*Dt2(B?d4XkH#&5{ehii_Cbkl^_ZT2v!?Aey?C{+hC8&+TXk_Mhfk>74T
zD;IVjGwY0^mSIjhZ<4falO<;XM)rmu;Z~rRJaq+&YITK at +rkgAag{6wmp)@?SR~NR
zG~2fa at u&T$`9g(WwV4)BO18-FiO2?UFX3fTU#DMjSL(OmPHXANO43aHY4HM7YqF($
zMQ`?a_S+yDDb<}ZeSosCiz&0$PXe*;+5o7>Pl(Yb1B0cHlYNCO5>rUXV|PVYFgn%a
z?%%j^O9-H`oO_b=NK`W1xv*<3{N?Dlc9b-zE?x~PUZi;!HQ*MPtrXq7 at LXJb_H4;?
zm39mPbSw7~0gab_*k|RZRpmyl%?eSbXTcGxPh at IDjTh4K$Gv-Nnkm4FEyN2ObDjGS
z5p>H2<pl{ndI|4B7q`u2PhcLlZoTP8JYFR5o55`td0ii6RuvH>V$|~0hCp(P$a5(Q
zm4_pPO|W)ZW8bd^TYX{iNC&#VXxOZlQe3}AEV*W84G2DGFVS{9OK at uE@JTW)FDNQ^
z{W%v`3S)cYzO^1x3pVSmDtH(b7QC4iW>rnzIXiL<KXy6 at XH8c-iZ3jp;^c`jwfM8f
zZ#rGx*4pJxRMN18D4*^-D{OHn6&<DTxzbQ+u;239QU}wb!qH&4kC2>6w5i{M at HN5r
z1smjcRe2qy&)cO?G~6U%x_NLjw~)bU$?6Al7*7QV97AJK;=FS6;i<m+s3~?1p-KVS
z&3>TNy=L#wZKti2m`Vj^x{}mPvaUOpCD?AXgPfmte%>UciEJ;XEQ(^!1PG>e31(%|
zPY66#<P~ZS<>?YO0)f5eFy_GomEU9jK<o<`#}D6^spZDi(Mkdo{5 at 03W6DGkiei#P
zc$*1F`Vc-R&-+6m*%C}`pP35RV??6&Ab0%l_{jtkm+k1yhppyK<kLU)yNef*0dm*m
zSvdUv$C&&>x#@|jHSe`HI7m}LgHZ9`)+v}FdZjqHGh3DQo*QQO1WAn!2eYu%l;WEK
z{-!H=;Se3 at _0Xmczr8l$`Sw>-QUyvR#Kw1{l0E{%GBLYP*#`AW$wF&FpQS;$+aN-|
zaP+MVfQ=NVAHlYHhIzEiXj38plWjQ(a;o~)mc75eBNmM+tO3p4d8kT?Hl0#eR4?r9
zvZB!(HHN)e$V6a1cwp=g=sm=*6okpMDH{LrJ;=NbvFq!ORJL16p_S1q<td;W2KfVC
zaIjH7fp-i}VwPCkkwpD_5dUAcCs;isZpAJ}dO_<wExC9gCfcg=D(x8J_Tc_pzsJAK
zGPo<5 at bL3w$>wt7a0U!=9CLjUE}^3$vhMsi-LGDqq-2e$YmF&sy3f2tPb;#ZJgAXK
zWo25m at RhH&!zHq+udfNGp6Vr??h<~kQ7hrEP};`LW~`lj$$>xQA$j)niuISMPBuyr
zBX_)5^Iq2J8?AXN2NNy$bUmuPzhs^|6Y;QLo>M8eLox%I at +yw8rp0F2Mj%<O^Bt$7
z#p^L}fc*yO0n8qD-<54s<*Z?xb>AI3md6g<41s%$KSXiI!;KYznt0*)xie*Bo<5H6
z5F4j{GH8NCj?#0$TLsQ$DU#lb#XNa`lN#$~`g2J$bo;7Ko%wSoV?V#1_a|y|MS4Zj
zZxeWAFw(j^*fwdMo}7Dp(NXB=|09D_+fTje`Tc- at r8GG)+qdH2mrY!OeIUwPqTg&?
zo37?Yi|K)0`ct6sz>pA59RLOYM`L~Shn)($rK^}uI9+j``tinMXSoWm at ahtzQ_*Y#
z8_S*Vkm7;`9>MTuEV)1e{vMi(b)gKeyh?mM?u;rXS%6!BO53^e{nR7E)`Oj_HGCk1
z(rze3b<^_#FNQ*{svj#SRji`2s>aH}ifGIhbf_VC+sm`rr#~!&U?^*|@!{IIHhn at W
zrwgvy;!<(hBNyUSv=f?G7a;Yiebu)O*htqCUH8sZfXSoJW~WklZ>DSYxnST=|5KM1
zR2lm!z)Gqx3Te_^z)iNW5E%?G9WoaOo|NClm9ks$@46zs=CQhQgwKNC6<46vk#kJQ
zn=TMu6G(gjJ*mFOPNB&on;OrOFSrBR!EL^v%NH7W)=A9BLtvZTCE%BmiG64CA_2ev
z3mhKwO4dexw>O^3x+&HDhI-uBl4EusgLdH;aefDJLR4T!kv)XQh8e-#Qv)XD+$vZ+
z6-Ah_X~;$Gh2NdKl~_%o{OWs}S_gzi9kQFpWst at b;O(JNM{?qDXz7MQPWHlOC5w&;
zvds>`dO`m1pMx3Qebgy8vtMPc=cEdo8hdd>9&LLFn*L03p*R{=+=dp6UoH(ApCLUK
zhs*ZWyaL5U(lUzI*s-mw#VP`s7V|n>4{*#(2JjV~XsqDwdz!i^g^MC9M>i6E+u@=m
zU`UBhccOy$O6JRDS49+z)hJ|S=8n`)71<R^v)Kf=i5aj>0+PjWXht@$eX9j$sn&R_
z+Ky9 at GS``Y0WNpk6#7SI?|XBRPawrMLB&hWON3Ghrw6cc+?R*_h%5~0N=dsyxkOlg
zkbBjgR-2-MbVn^Gu?9L^4Hu(Chj@!&bcovc5iI~Aq(y=v>NAcpiNJ{9Mxji=fEP6h
zFU{2ani$BP_v(QmuXz`3?2t)xy+j_N=CX{E_Us&}zFpB at kSo>`%Ia!ak8_DJuLT-j
zir((+8SXkkT9&%WwBOMW9%W&F0kQn=i&8~s56xKzy#}9ZoAOrOS)C~dcJaAaGjy6C
zs?^CG8dCJUk2c#^`$(x!SoyKoscUc7<6K3}6&3-WHj35tv#~^?7$gjmaT9Rx{qOHH
zBcXeL#`DU67(-a19MaSIz6=2vle=m#fvNfD^COcQD;MDE_MjHGuZI&*fMa~>M`6z|
zgsb}tp$47{gvH!1 at _6%VuPiAV!RT>4Z_jw?i6Cw}$T2{S3<^}6(bO;&`01mQ#-_W3
zN&X=p%(7>!A~cT|IqUh}7pd=<hr=Z^+VX<;dDl1<*Faxd1>32?SUwSDD!ww(AB^fO
zPV9R_W>y!w&>zA5<D0X`{%9jP#uTy at 4lMk5$io&9E;4#D=IzP2Zn!tvLtIaoaFois
zXSE3n_t3|9$(d>*I9AiU?#?5|%IiLv1>)O at +7@f$Lj?SfAbB|IlMY%h4izR?q(Qvs
zZy at qSse?^!F%~4Tlx%8QIk=F9rV*5;9kCP92G)Ngu;JtmZUnhcVsm?IqPhu-8XU!U
z+>dx3EKDZ_nv5U|;vjDnvIs0M2tL#zThb`sYz}55V(fpEF6sVizyAV~s{<`JoNLZG
z7M(aKkb#lG>Nyl1>Ulcscg|fbMwM<z`&A+G0nQ^NH>aCgcBEk2ue2p2Y_DdbDM-By
z-AOE at _!POh4hM4IYuHWnB7&(zI#$E2uiB0-A$VnhesR&O0)&ao$hnbQ`*9zv!^i;)
zr|^S6@@69a>AqfbAo5B$E~v{zAD^8-gz?@ZDn~L*i!A;(tti2Z at gAvWJ~XuSQ+O4v
zs5#w67sB;wFr0e^d%ZyHpu$cl8Tk_+aS6@?bc39tJ5)|K45G5FlAaY+)92=7$0HIF
znr6zeyfk{&ogS|KYrg0^SS53E at y*fcn?aWjQk%8(Imt at V@6(eA43nA5g|we2NdSdD
zy4?4SZo@~hD#y)+-jM%iavI&@j$x8$8*axUx^F7 at py%gA<EJyeu;WMPZ;T`oE0B%1
zI2x;XYtjL;@~P%b7H$TO!ZQJ=9lId~;U#P*WK5UkcRm3%JpUo+n#gqNp}&B$YJ%?)
zdtkcJJs;T%tAwLvyNY1RQ~mB}+$O_^h2(hEh=$5%hmRK0XguIp3xi5(X1Q!=K#D&<
zXv7n7|Ng=$0kCxp=6m=o4Rp)!f+i<uw;B^cxx0q0Qb;`HsAh#$3RtwoS^3$aWOzG*
z9r8(fkxR_PXP>xrJ9984W>UXAQlhKI23<FAp6X-P_2lmC>tMg-%i at h%7y}A6DQp4u
z)_x}a0=<1K43zqxV5UdX(@KRzM(d>&iskHOwGX3(+01UmrHLh=%(^e4GW;IjX(>oc
zAUEHN7V8P~Lje`fmSMOHS8YJQ9d(F{g;hzbnE|5X9~A3Z4kgVE#r@)w)fu at U*Li at y
zP&@phzxbs<7s0txBO|3P?+e>;E3|S`5K2rxTj<Cx%NjYeevR^+ja%VA$n0#qp>d9(
zf{UWJp?H>ZL<RpHxC&DxU!7hx4H|33ZyWLh1R_Y{qy(zF#%eB4cX}5|D0fifbaYE9
zRT=@|*e&aF+1x7X%Y6~LjyQtIFRq^^ubv6${E)xg-ds}1@)-f~S^7N9boU=U%nYwA
zGr>swOM88 at v%IDLnMG*`P986}7SsCM*;muQ<A83=zO{^YKzf%_>ys8x9Ihph30&AI
zd+e+A?}fxp><!!jPD7|l)ks;vE-`kdB~kC3c0W*!;Eo0CA$0~WdN`)>1##G<q_+-#
z2#Hj at h+W(JR*{%=(z!)D7kj^BTwpRlIC_zTXwVu26G6Ys9_l8iM=M27d)(Wp{DVV+
zL~Q_<GqW>uXmJpe8++aJiM7KS6CHES;>H!8x+~9Qd+)$M-uoNI)BdGb+so|4w6YFG
zn|lt~RQEf;mDx&SzNlivU45T6`ZLMDf}l0<*tq6Z_foMPF9Fb%fm at Lu;1#0We+k|=
z=VT0v1i2D{$_#nlc%GydQIrSEO0@^@)i<Qxicf(Qzi6UulRHo4Ux(gB;)rl at A|b=|
zAIhF$_-w|CIP{jYX-2Ls!3iHqmZM=WEk_rCv}|46;e&aB`wcf#mOQB*UkF`$6fxc7
zF}&j}@;CUVzK!JClpI=1@{oKP`S%~j-JUdGhCSQ~!%YF-X4|*Bau{iX0_;>>@pol2
zHYVNI8*sbdi$6T4nvwjvOv$$x_VI6{RmxMKL^v$Y$JBDtTeqW3eAW$_>;yip01sBw
z3K`k>Iz_XpkARq<=iFJ%wG&pAO8qbabExdAmul<e<|u0=u-FwtcZpnWCCRZI3@%D3
zh at 5bvLph4MaSRsr7M&%ia;%AEwc~GJu6+ at 3*GW&O9Qa^0O;3Yx^u at d1e0$`JPQTE!
zGH~S;dgVR0k&>xP?7vN>8W<MX>^}p`yd8Vhei%QlQxiR@{2Pfo-`3-DE`V9vwB)eW
zpDJk;SVzP;u-d1w-KR`brBy6y66e_z<=+4`C8^{W(mH;aY{g3Zby2qZ*|=(TCuALM
z+&RVrPrh9(!dF1~?nCdGE2Y#H#-7}d2#H~~ZtQ$ttL1b2GomhUz*5=qLkR+kPM|WB
zIyo)SJ#UbnMs7$Q*O`oANB8ye&#HRIKusQj^3pZ>&<Id0g0OFl`_8@)kTq+-T$%%b
zYI5R6!?dAYkL6g5=k~7{=+|71ix-)FVge!G2v>X!32Iv%rPJvhTV7X<%sSt&Z`}Vi
z*>p}k5j?Jy7d|0}{z57(I}tu#n_of#Bht8tOJ^`B3Q at ncOo?`chscIE)rh6iRizR-
z6Z6idkM7kxC%R@=ns~Eq?IaLI*ra0dOVGapDmM#pC$?$TZg}@2<4H2g9CX2wx}Mx$
zb3_NY7E46F at i8ww&sew>*Wv`0fP&ehOh1GYsSA#goR6TLB^Snx`Ur4>gv1)nZRpmM
zjF~MJp-8!*du|{68T_N`I*K}3Pz7I03oKBB+8uC+3wlR<Lb?l_Gs|FqR1g3z>!zGm
zc%PtN)HtyGECerH1~PSY!P%{38mLYp%-i=;jm~L)VRdb{gk*njLsc2#X2Qy8hO6wP
zV0kvmB`ugyQR*dTMtx#2f)~JOs!-`p23|d&7>o~}Sv0=tNgK{Oj^1iU#~E_vvJJV|
zbYhvl*^W*$N#+e07Hl`#2+A(yoz4n-SEHTbf6-2kOdBd`KQ)y?9W&in^C5lP_dy=b
znFjrq#Kl<0r0DtJVwRz11;Wset>^|P at 7BD@wp^QTo+vn{zY#`<#?ODLLE at hA)OR51
z)qB#uG4H|FJ)k#SE(v<U+_+=y;mQfn+$^loFPrlfghw}Y9q1CYN750j&qQ>nql=v~
z8BtCiU7fbm8UlYF7Ng<on2vw^Ljo&Fp{BAqn at WSD@H0V9co!BuR^;Plw=j;D5+YZ3
ziz!XqMk#e$>lr3<C==*p(C55l=RV7$2gZf5{0CxKtoC{>S#UPQdxNJu5u+iT(@034
zb=mvzyCwXE%ylz7>+TxOBVj at qKYmH*=BHKPCD7`SR9DJgrNPdh(R?L?239RV`X9WH
zH8MR&iNACB%{uG$HRYDoTH-Gzt{&aJoK&iC-%4mGlk8F5nZp&}ypfAMBg_Wd{;SAs
zfoHdm)*Z__L9zT_lP<_2i|k-)J0|$44Fb|acK%k at a&MmM@#Lgq+p|5K-U9gUWe%KZ
ziU-ww_r&`dBfYZkI_aobdJm29n20GuoiR3jIaqBeYtPU0e+q6okhJJ|kvPv)9-c7;
zfcE}%oUXBWUV1Vs-1iYrj{$J~XA~5I at b4`YhVF~HvJ?Z35Y9_o=I^vB6U at z(CJV&?
zWxg{yN+3AlxVB+tA{8~Vn!XE&1rQXzA&<1K8>(#*AsG!CU#2#>3x8hkIgJCDIY>YL
z#hcrN!4xPR)n!mcdK=SFH;A!jIHPI*F?6h^dv2m^g-&1Ed!yd06FKkm9@}Q8&ONG6
zkBFyq3cj79ga_kqlDxn085!{XL;sji{g7!9u{9*BJgJCTFs)RerdVs>Rc-2<t+=+Q
ziju28(u<+)nKV93j_O(nVOfI1`m=a-7!E%Zs$a<}h(>>K*oBHLm)@X^vY!3O;<jVC
z+rbm8PIzPtJ%+^UzN#TJ&hNL^an%bb6!cKh5JdcdOQw-Nluu0p&qD3p`U^aiP-$N|
zPmtWHbaOKa(7=TJx0Kq?%^I=e-e6Vd`b+CNk90Hoo2B`mFyafCvUDiJucjH&Mtj)<
z_!-fR{3H(Iy0}Qwzh9=#+cyrGra)r)^efW4<BVl1^E?zsMf$3&XeS|wVTt-E+?*0n
zR^d)K+t$kbjUe`y%F^(6f}8r^pejXEtTgD4`Snw?6M3ZsB><=|qSiuc=i+&>Thmfl
z076&gLX^)F{{sG1#Yxg}_Z^lb9ArqQ_Mp~~B!l at Xtdl18O^_nc!dWYYp#0?GLyJ|O
zJ#9 at j!15Q5vaW0=r@^H(dQQ@(-&Yr4WhUa2?-YwIL0b*oW_r7#(te(Q(rsG?j1NDn
zYV|$g$G)llXhiNkL136N$?$R#(k%xo?ry{ZTBb;$$9XywC6GmOg|?<Go_1GG5&RGI
z&L$f*QwOZmB)+Ov3*yUJQcz!_q1}v_=PP9(ld9aOQu(vlk{tLny`8*RUmOTh)rt)Z
zES^V*qtF+ at k~)78Xp~^&Lwe}9LgK}qXNU^8SgI4mV4cl6%QR!%TzF;|63(c)-C$aI
z{{0z)9(TJP(-Hy#cP<Yq at kq4$Q6X0bQB&OoQ|2lz{H6l$L)mRMqeE2nOUa!iL at s<l
zM_Kz=zmpn>{uYQA$J7fj`n~j at df9sZv|&GAfNTZ=E*vAJQxtMRKq)0VTv_`Gf+dta
zExV)2i%e(_!TQbZn-t}OD`~I0UGH9>ed9cdV|KblQhSY`_<^A~hHC-efW|`gAyWK8
z4z at TbsOMwFYT>%WDvNuy at nG)+%R;hLiw!6aFZF+32F)2CAw02Kj~$aL#fdk>ur_O<
zk!M55QhK>`OZ)3tIA|FrR+DUY(gN>fRkNxoC47!g?em&>fWhz|^NxH#ZyxGc1)pCQ
z%TOTdL+JLn3+s2jua7F0!3Go*jm;P$A6I>(^_M*68|O(GA#mvs>kRX@)#DFXU!7`|
z7N}^B5*es0J<pyAD(_O1Y5nMBuaEC1s(4|S!tGb6gl%KOyzj6BQj2Z{%K;A*u~1gR
zt}on->|BM^62O|@BEZl?q9sr0$WP!pkjP#ZRK{v3tRTL&(Fho?2zr4&`Em#pS=F=*
z&51KN3Q}-7@?l(989BW(akWJWqPg^JpadauC+sAWlc+9a`5Gfit`0vM at EdzRFr+$D
zNDsAG*j%ulg$<|EOH}gTY$Qjo^J?+P3QoGcZbaBe|FP%3!+6+Y+**a?u^)-fzt2Tr
z69hE0e=R5U(qm3NBLs_<7qqk+ke at 726Y$@p$-`Hi=m&tU(&YXzo3_dSabtoiILA9U
zGZF1uN286WDi7+DdqZ~F>$wdVO^t51CVt}cX_PxH at YbCy6^JM}(Jj(?uRYA8jJ<n5
zptwF$B&4<baa4SB`70KT*$VE2FC%l`{Ypd7p3&goSe-HcYUVjIb*a9fM0>s^47CH`
z!e6d%aKErWp=v^o!OJvst5!K+Uvff`gi?}0mZbR1yEvE{vpuSWMjhKtJ!2>fR6)`p
zn!W=$s$rzfPhpYXRU**YXqjDNwTEfFbd+g(l`(QdGzF5(LVXIQ5Oj%Kt9|J>9m4Y0
zfYzZL07~RVyDGH=A!bPs6-(l*sgHN}JsSi$js3R6$qJDgmUZ(c<Dmt3F9`Q9-A_~$
zELwMzb*pW+TJ^<;Tl__icFR~I%Qh3mzXx|%{4`Z>&-i1NTFKK186|;KULT}q1duxl
zuX1$=Z;-qn>uF)68o^{;JVO!~w%w;PCzoaom6tlLZ7}2oO|Ipukgqv(+nO3I1>}Vs
zTL`)Sl&~UDX|PRJ#Tl?A7=u~+sYn3c_A5bhAo%gmYdjqNA40F&w5Lku&xAU_R+5|;
zpDWj_i>s=D-u6G84ozOj1ZqiY#Hj8m&dhYJJe_ at fI5p!h;p8Xku0(FXra@{<^gucn
zXMr6PXP0gawq<R at jvi{CQ(<hU$&HjU<!69Q&~#KIOmf^1c>C&9t8q%)14^;*?Dt*K
zUVErF^)gV<q0zYA8c*vUZi`k at M9I{*M4dRt7X=iJs^(x$lLnkfj%K^EGR;>bUp$X?
zAon at Sj}v~IlG`6G0E-(mwgk4kY5%XzAv|oC#v0A6T^5+wX|$KBg(+E>={*d_eUdtw
zH7pEzw2rF$e_H#o4`ZPcMd!Pm9u_4@@)*HO-01q7IJ7m1#GAJ)lC=H#-~J=t(B at S!
z=4M|`hB#4Y371;?L*XzuoGjB<@zuYigJDKo?qBc5h&bu$NGBJ2WIRM(luD9Kf`(2|
z4+ET`skS#EI;@t?DV<WItGZ;7bL6l2PYa<msHSGU<M!%vh6Om2qv=y<kDRXJ$rw`w
zK;Zi#U@`}gSb$ZLUu?Qu2;81(HEJ!(cBp9WgJ2ZO8%Ze^!-+7E(yr;s&OHHnHc4o>
zTF*n4T0_k+<CFr57Hx5o?MotL+T(9Z<#}c_f{fUIF%Rni&DnCaHC=DV#%0z^{SA`R
z8*mF<M_IEbF1c5YeyR=26euO9iL{%Xxni&8PJ+TJ>||yh;_+(jX}j7=tAN>H-cX(-
zcGfn{K}@IZZD&M#dHoP3#T$=)R5#IzB0TF9dzW9JsZ38~$PjQ6l&wCWF2#lhbcMJH
z*eDPee9$+iD~mb+Fq3J+r~yCmBDQfcJXjKE_eO*fylOcCYPwFV<2t;lOtIKW<33wW
z8x3Kc!_h`w`%62>tWjjFE30ahP4jF^l^PeJSnlmTNVGC*Vz<9TvC9~?dB6J|5I_CM
znpLeb^7AAjG6$}U)ggGuL}_YOxZo5<e8wb)w|uf`qrLO3vOJ&VT94o};_O^`+~J%&
zHjtBFCHYi*#gU&%4H$I)G&)ZPh;EN&Aq2G~TB4Jq_2pVC{a>>oeP%iY)}x}PhQ;AN
zl<CX1BT5F at ecARzt~jF=KjlMBD>_BD-L}cmztFKZCG at anopaIP+w(%aS+aFYARf$W
zC`+AAm at Md%a|+H1*p~o3{?p(Y1-<?V&0>^9PH;LJ`&TdBcnPWv`Fg at J60@kyzSp{=
z^XI$a-)sRANX~#x^Y_P+V+msBUQ~n5%^ryBlo~GwZP(fDF99gLQeV}82 at -O1GPSth
z{cxf?6Cx7?t6(%XLKslSzhttc=+*Bk?nL&So={Az$W}cfpD9*m6r5<qdsu_ at Ymn3%
z1Wxz|!k(Lh1JlcHd$fh at 5+$kr?x!1*+zBf>U!WtM?u`=IUrF>g1z7L=rtRTwaMzQM
z4H2<z<b($AC%BRh+_B8ZS*bGEkcI%STQ^nPJ*nM<8e~t at oYNa1bepgxdbY;~Era4E
zfnpg+`9xdjqCiI at cB60?2|2P#jgm&>hZkuLh*4}J`p|e-jVh3W&f)FD@~L9YuQtEW
zAwc({vdA*e`oQkD!1P<Jj~b|`9|Iux#rPoyAecHbx9Lx(_d06{`mIpis+v_=AK+z6
z(o(tn$08+yXBOpU%q=DlXy?yqcWOGH!EIvg48u2L`NZq++D~;&e?pCj2EFBsTQ#*8
zVc2<c$+_7NX7phMw+eYm=CvS!#vl|T0Lqz(9W1i?Dat^dir=3Z&TlTJXCcymj29-Y
zaCA>joPv=Rb4&;doxiehJ6d`R<%)RuwvupNoPS}d)hlH&;WVG+?JNYM?7P|8^qKhs
zT2zmN$MYDm8yrA`yi*DQkXxgacd$NlBB47)5ebJU$Q2}ugQnu!-A}U=l5Wv4^BA}Q
zzyFMUOX0-is|@e}teTFFv@>lI<FRBLwIwk(h$c~D|7nz at wQ*+jwwPLHV4UKB&{|?!
zn}9V!9#vgez%~IS`P{S^$1)+nZ+Bbmyy~<#^d_(wi(;DTr+tE_86OSBJa~oE!<+EY
z$vL}TdT*jPC$og}!T78TxHSWekFeB%8~ir+MXg>)y*_UnZ#D<0jgiFw<4zwd^np(s
zRZuLzw`|2OipOu{*jK3<V!ix&jV6$`YUsPmBvY>m&^BAIyzpaK6~p9TWn)Be|M#&1
zgVq0h4XAwNl~3iB0dbk?`A6DHJB_S*nZCA>^_>zXZIOdAfMgo`=v^e+QMc7WE#4Jo
zBP at Z_mDpwEgWnEFii8P*>)9uZ?A#>C&Bwa*!s)pH<FOF|mu1<!ZG=CpI5c0=^bDN&
z!6~!?0Tl~w)`V5iC%aO_Dv{cgUZP~EcPg3<sZ-H4;L6CKs<44h>;2I7Qk}#d_11&6
zaBr*+ZnX1CYKNdurnS7Y=0wD&eEPtS><@WCiHnX#pWuw(CMgf=TGul}3gU4CXHFk9
zm6Cw+I?pM{F?kgtRul|h%y<e}ygcT|MhyVILxrUcoSR?mh<EKcOS{U`c4zCEA9i?d
zo&ASQA034aOTxrTt#LgbSgy#sly1LKSfSp)u*$R~bix%fge-p2!ho?7D@<mN(NEZv
zyHP0_<}Pc7n^LEN-PHb;6V|V(peeJKxOZi{K{x*rUo1I^ble3u10My6k%Q4>12MzN
zYgb?UfEWX$EZ=cy>o2Ne4*UC<7Gve!Q5rcd{)Z}FLiA4DotyM4x|f{4X=(#vj1H~A
zFEXlqQ3AGBLh@)1dl!r&DfO;UDk>$K1)vEzw4=D%xeJv``7;lQIUrv}j_mtis|Agg
zuKY%%rQGBe+>-E+VnXABZq#wXKLV0jstxrOXDl87M+67At0pKygp35g3OO1eZ!x!!
zDKF)XeI!BgeKvpu1tdzY6-B+H)Z%S3u8U6nclP<z21LH5rDVq98maH!o$vqt&erFO
zbCY5!kO%F0sijZGy#mB=)Amjik1fNO4y-&x7Y~oi&k%I#+_xXIv3O(O$PuBTI{S$Y
zXmW*atV;e}A at l`#$k)}p?L-<|#!&UGBc4==<)4<kOTf0VT8~IUd~6$o_PDFstDdo(
zW?_{V8|8a%(!Ej-b8J^rtC|brCuMDm_%CUFfG~zjeZ4l;4~!94kxttc!&(sN!xC-8
zT05%vt}Z%X%FJZQL|}_|!ZIhBw=ck(4P&ypn1DY6qQ3GR8*k}u8hF7{EKSXG6k;*3
zRVcZ_XIAmPm2p%UgBp`<j%}BjeW{$J12WgBvuIzNN8x*H2 at JO6yj`Cxa^RpAip<5V
zcdLo7kNI>g#Jn8u4(x6i_klSwvE(??!hZK{Ni%EQ1wCI<k=BzM?lxYbmCeNKwkJcc
zbYKsA3IuzFbOK=`dkCB?i{$tT0}3n1VE<M#LJ?Nqhl{*KXGA$ZqVCLfXr^RxTO^RR
zKnfm9SmY=uiwAiAXi(tz0=>@mE3>n5mab{BsoU}eS|9%>NtiHbV84PD-$Agd at YD6g
zbEPW%M|wl~!tC$D8~2;NPypXA%U^JBuX4hyPqxXo<>U=zR6lKPv27!rya(-Est2fk
z8~M%JMj;{mw(m<KMON)YT`8VW*Ga8W5o-@%i3S;>qVhS0M2a3qs}V2bTG@<%?1y$U
z*XXmy;};{;%~NL=MF*964rp1Q6+fRMxX|~?x!sVhLG0Qh=&RUSYtCg-HF#=gShNXi
zGq1YsHle<;?&E8#_eNh0#K|^qSMr2E4h}mqaHMOf;^J`(k;2~K$HT+4?TrDYU+)Uj
zB6RQ)^=UD+7N9`kY%%^?OHsk4 at 97(|*B->}`w(lx*cw3>au(&!bp*71U`az63bM(b
zXB0#}rSoIFUL~{{%m?D-w<9GT&#o4CJe7Zb-zz7s(3L=;rsKC%FjEQH%U at I&yq0JY
zn)l9^$yD%dTTH&%0vK2Q(Z~+EFdZ=1ngBIG%D-GfHGQ?mI{2SQ`n|y=${UI?zS}8o
zM`rpf(Y1t&?I!)bgm}hJ^cS$l7xjl+2NfXdbaeRY<e1e%<+?zmiq*Rw8?6lhhX)jH
zlE=V*J`BXGADegozB%#}7NU`;nTC2m at i<hT{yGobBDA&+-vPRGCQO!%A<jFAUoa91
zc^q6ht@!z{)vCHdpwrN%o!z_v1mZ+Jg))y7u8W^RpUBF4V~#Y23D(}fJTLd|*zxH-
zoa>!3IvKz79}5Zm5%`D*xvjq2cc()wpQUpsY}1E(Iel<>YU{bSCEbOgGpCwm0=xeM
zzy{Xlcr%f{`5po5aDr_O;%e<QX{*$}VS9PvW{5oxXc(Z){`4BMv1QF}aSdZMfkVk@
zTS4dHv%OM^NnNEhB#~xtMfcrr1p`98x=37t0==J(v3&G7r`^2ZP?ikTDx=rV|Hvy7
zC{oK0GW+g<mqTFoOt=2FDkVHHIm|gUU7^O~7t3839c<$$W3oV|&xCcO5}34V>Po%e
zEUew{lXr#R5Q8Yig^)6((8snnAg<)3aA3$x4f43+4jHI<B)##@Z1OhXT-1`wlI9b0
z11Eg=dWg1KRtl~tgfhWS`)uoq*1H4+s^6W<E?4qZw$i7b;VY7zEw)Pb&xD=R3ruQW
zbg;DS<+NsUF|F-^V5u;od;xX07^twuJ2!x)U%B3gw+&44=h;W>w#+|7#4q)~zjmIW
z3=_q>hFR^``3ryP%B~26QGm38c<B1>gWe%$R#2nEtJYuzdCq0EE&R)R`1E~)CU22O
z!SPJt%=I&$x>uD>YrVsoYof0bhSjD-bGI>qn<D`CnW|o61x`G}EN0Oo&;|D`zM>;W
z^Gur1!d}I<OL8{<Ha<#%A(m;%+w>LU2LGUrvU_7!u)X~7-!^fto($V#!lpgOzRVFJ
z8sjno$R`mPNYN;$*PoqtD-@)c$li?1CThi4InpY>7_}o;vIs?5Kc6e_Cf$k$E3s`o
zD at cO?gwy;0lnz1$61p(WdKDA$?4Dk5*uY7&P-!ZHOx at YlZb>Jx*tdip`T$rqt+XLh
zMj|pSB*K2kLB2i^Yrw5oZyvt~4>)(q=eJ&`(T)@kPVKoxi?>X73`e4gm?#yCjJ#Rz
zxehexemy-*oDY at F?Fh-oh|+Q9(vGDOg>U|G!a%!>;WUKI6ka#AdTi)$hduec5htva
z9}<xZNkPXs#vn9sRYTJ;<oPI8(kc2%QK61pD#?zIC>dPc^AV3hm1S4nz9{~Ds*Q$i
z2+cmN at GM67DSt?Wuj!C&7FboT>Pl<Jd#VSm at hym6POnCp#YkmXnyycwRjbHDvcvul
z$6N4wRe_KTZ%%vZJn{C1k~4LrLymcDtxVY3ZutIR_`^_P2x9YV1KWL#IZm3G+|rX!
zUPDvU@{|#a>cz(Iws3pYK~Y8_-^j}xY*-iad5<@5qOlR|8G6~Asvh+mv;-zj)8)Fa
ztb=T!stP(!20A(?qlP=b7P71bp1F&a_-<Y6S8NYM(ozC_0+dbof)jTkb~lV!M60h@
zMWAVK9XPKb1?({6k;C-(V5bX4M03^&)BDs=9ZGP8^`_lMCN=LZpYGzdW}JNykj>x1
zvEC_f=fpo-5x^*#A9qm?f(9twnEf7vS8pCfdUF%m&28V4EqT1eCKnvU_Clqb?ob86
zktD%@(GexWaoM=lQ!|6g-`K15XV^vlUG|Ck<k5*ESvCM_O`ZhG7yL;~-87nE*aE=J
z{O(4VpCsS9AzS3 at mGsZD0-hrdd4pLq%(l~AE{S`{TZu7Au3t#>VnKyKHW6x*qRMr5
zO(J=qLMGuY4q;?%qzGA7xBv^%f9Ww)TM|(4>4ul3marmR77s~HH&|@bnX1ZAZ#@6E
zEn at 3sjejBvAKN*4N7#)5yqAq;sMn^O-?VC3ZRWX~Z_p7(Xuls8u%uu64&93D<Pa8x
zx at M?B1sYNiX38fvol_9#y_P*61(fOh_&gcZ?_9#;w4C3q6+S$?1>8uipUA`osu3Lb
zJDLwUNEkuvxkH51a5p}9izQ%wZ($@yunP;B2l)O6SFqH?AK1{_xn%A2ketB3HwAiU
zbg6CRMSP)4l)F%J01dLmy#+z$k622&W;I9`!mA6MgXbOhN56=9 at Moc3v}=EvvwED`
z4h at RyeFWGTF*%L&m>aipdda0(!;2h|fvg7LTq)StPwlkQ)D?;{=_DPRP+jMqn3`b6
z{~4pHH$r*#2fqkMfD at P&j9zJR`4jm4Zn*ghEntqaiueSsqd66!H(*~$4AHh;@I#+0
zRJRjG at l5?<3uW?k=oELsqxY8+>yr}@O<H9A?w<50zb>DBkTVUIOv0?YkWSW<{fW0p
zR>!&w{+suZJiFD$dKxt at D}|z!0&XpozF;A#i*6@!8_l$+VJ#eVU-A>6&xTDUJWCZj
z32BKh+~@GO`qt8;CiM%9(3qpqhNXVl at MDVq4Ff^y*lG_40L67O&83|LxP}X!oQ%(U
zm?wnekH+PbC(>c0FuihDOS^Ir`^E7)Qq0NR<a2)p-{ChtIV&F;v8QGJ6!zS_5;VqD
ztO<fr?tX3&viAzeU(wbPTm?D at D?Ga1olbj{5&>$cKTi7+hg~_(Z6?Y%H=S%!f?*AS
z&apEPfOKO`vMV;xAV+<f;D2B%`{IRjPyijmW_5e4f*vzO5JhJJ>z7uwd(dylS}!;W
zvX at M)V7(6U`LardJk*feGEmd|BN4Dfg50s<E=;zb7uJ7F<vViC=4<NdTd$K-mTa&z
z#oG1(dRDv(&g!rIb?l~onlP+`;%6K+!^jH899#c23&GG`G$n1```mgxj1pt>lr6cx
zM`CfwOku$54q2%?Uvw~!&@b1*6M7t#Z8^_a-kqJZZ2avyfx%c$*`4^?Ax5F2wXjkk
z@*gom$IvTN;8X0z&z4zgZbFvBf(W{`400<^3U_22rICY^BaeMdNgsJa6PTWxrO_s_
z2;+o7G%X^uNy?aYT0#JZLLQkndwBTw2}@JT`T|KeX8w^oB56*rZGR=7BwQF|$g|Ta
zISi+<t<6DI`PuW?k6q+9SY=EebMHJG`ltMg*;IZL3;- at isTRD251`|o;*|uB|1Xkw
zMhPhos(EF99cJyL9Arvdv3t*&^yMsQ3>r%z&F&-DukjeS)lvnw?9$PD#x&2k7?rR}
zHiVpJrk=!nK^5?UH57#I%LBbKW}e&^eqnbo2Foh#3rCR<F})3!(7(rtDEP-3(xhWr
z@(ex}RY%#{MwX^zB=%YtW_o;3lf(E1m<Gy7i+bJ*fAr)#OI+%0rGVY<XZ;yq;Q>Nw
z_Z_wzbEyU^T0&ULG?Sg(G^_w8Rq!-{7S_aK($^HkZ?YAu1_sM4(CFffra`_BwQ=HQ
zvHeJN{nG#MJz{;Du{+6Y{8JY5osc-}klSv>l1iJrx2kRo=38#j*zZ^b!2^}t=mmWe
zP^2mG22)~;ncx~2eOxr_#v1aL>=tt=2f?q0&gMC)sm+pgY(3gczWk|`_i42kh%#XW
zXnf?>na1zUjQr&h6DIEO)|{muECaSw$Uln%T4)82Jx0%v{uhFjuruUn*J*}0nHJA0
ztU3A0*^~S@|Jqb84BFm3t{r&<-sqY(rBzD3GC{CoF)~>^c2L1dwFgr7e=8;UZ{MzL
z)l}ta_URn~xg=3(c4rPn6BShH7rq7`B05~FZr$e!t;(=)R;sUg(P;MOXZP`ow;H at E
zH<SB436{Eb4?9Fcpx6j5o}&u%YRPz%yv0~^NtIk<{nx<O9P;-e+0NbE2rmdV!09G?
zU5Cf8NyBf$-}tU9QX1p4#lJrsT at c_1iqLsK6&w=MbQw~^!<4yFk-dd!!sNnDVpC at V
zRfm0+iW?Ii&PPCN0!1pEo at ddpmN(J(hgu^S9HtkMhA2N(s-CE15o1~VV2J4XyNRv6
z+}1SJ?qLxD9twOTDHg&gO>w at X1_iPy#Ak*VgY-3K+^o1+P%aDn3e6jkzUhHhWi;P3
z6F1)>D{>}-g5ibwjg6KWs%Wo8k#LN_rZtYBVm0L$V96ncncGkrWNP|mHHbdZFn-T>
zzwhWeJ?fETBNMQjKRI&xcv at OYib_uy@8UoqhLLiia!peL-{<|#rX*1DAljEvm)Sp<
z`%}EYjlzN5*Igi<dvRHuyQA%6&1iP=RSCwe>B=e&s??#Ny|vJR=|#&P)=9DgCy_Kl
z7m+YAWO6}c>+o!)0mTi|^2m2uC|q5Xy4^kloIUWs6OI at yP10Y^MihAqUn(;N$)$fY
zf5nC>mG^}*A<i;2iB+~4h54tYva;9uz0cMm8g4OW3PUpV0T&Qi_pk092M0q=LWW^Y
zm+SepK!@5McA|sCXYR1KmS0ttZz-fu4&TTK-B9Oind0||#PPw>noElPODJefEl9^6
zjpx>`_=N~|jnDu;zpO!K;5a#PK556E!TsxrlnURIjg|vvI1v`VckZ(_Kv29WenA$$
z8Zg4*7oW<j0uZhXGdFi!r1)~e!6q??Ex)?aHwe?)^0-z4DhVgpZbAvGuzB?OAaZBn
z8W=V{qf8 at _nVn|7xR5Yj6>!bYl>tA4Gc3mehU^Qt<A%pGg=N94ZT}NAQlQ<U!Q3Fv
z6Y6RXzi}yLQp25Y2ka}lc~u^q2oq}|=5hyC2F*AI$q=&7HL|o^POynnnLQxwT)JN3
z3h&dm^mXj4xj%~N at c79+yXLC}ggf#gz|dPc^syUP!>rjf#VcC at 0X5Z5wfH-m(#plP
z%3K1$Ixr~dtPbsMMrz!|qYiZF&;X(@JxTc at ToAP;u&=9%9+=H at 3KFqx6y?>LM4bI?
z0?f(q`bvCg4{fr1m*t~c0tQ4$NoH&y<2gW`zWy4&NkvzFF;Nr7{F at f9YcrRN^mRww
zrdo5f>KNg)=bd2b7$L at 9iD7C}nSb^zrD5nT+9b=M!pJD%NTbvTgOEhdfc$y(YcyVe
zK((7GETR_F8&-M%;lsF<WoT!T_!i;Q at I`@qtmeDLys)fl4c+S($i##^x}G-^f)*G|
zoCU!Y!dS(sP7I!M&ru_i)in}c7Ew(qKz=y6QWI`$gBc)^L~PEfx}G?z<<Yj7h$$#C
zcB(XpLH2Qlbo}qL3_iRCd~LH8QN_emq}!jAPG8aeRC5Ws(}Bbe6D^6=Cwa=1;MjD#
zXtHR)9W{15j^1fE3?vH+-w-OcFMB4W{|#L{FG9L!-;&_1aiGt?xx4!>_x5_r{+8f6
zjhzuJPW6my_n*kN>d0Z}!~`~Myw at W1rTPtf%RUjqRWYW&8GeZkktp^>l`t+!`8ktT
z_HJW1MY9=v;^%oAH;eSUpM4ozOH$iDu9V&?)LoLTf#P|eoY1&jU9`J{N(+eF#(Eg&
zIF;cYWfjL}F at +x%wB~z-$m^|3km~c4 at 0$3q?kB$pyDEmw-qJisK8$ByF`*=y0b7>i
ztrYa5MgoAuey`mQSQy2<-n5wm>ciqP|4ICaF<&j^$4~t<63$Y~h7>d~YvG}a at srDV
zS_e2uo at DQ&HuPblQ1-o-sN at L-q*{6uk?d1d8#I1@)~vlOidv^<PEm;mPy`idEgEgd
zdd0R~+kn6|*2r at lx0?%5#ZFe3L_J++VG_u%?W_7!Au3gZjk?woiG-e3&b|Q4{T(G2
zR*nTiPO#k-YZZcvn_Vs4YV!AZKw^Fof0?-0IO at 3hPl#+JFt1Bi^nzt1$YqLWb0DqV
zZ4C$X&<3C#3 at 5ys!gf&r>v)4nk<o%p{#spe<9E)3xe+Fv;99jRd at gT?L_pAQ6td+K
zS!7YNC>Uk1IslT9`-4dxI|=@WyrSU+;p at hhLE1AB5rsrpVw&darrXM~Klg>nJr}ON
zD7M2I24>BJ*s}15BmF0Ke$@d*W!rD=1&yQ;uf;X`kvf$3hc-WlGxF`zCMD<`uzOtd
zAvnrc(TibQDOAB6diG?!gw6$sz6?5M`eF)nS7b9gSgK{leo+B6<eo(N#@6oW)+)66
zTB*~{yJhSnSGP{HwhNYVcY|M$jno0=N~hRt)T>e>S7Zjd5-_IA^!TFh5=#YYc-iv-
zh7In!gyusJ$u37(QxT?``db$;f2;>I<Zpwmap=Jw$}WbbOT9c(f9=yuMF7!Nm9FrZ
z257p8wa6F6J>1kx^&l2`ZSik=r`BHjVK8~5&5^mQwb}jMRWm-oCs_DzUH!a<>hEeN
zN(2pyiI*LiLy!znn at Zf=Sd_kq0A>RHA^9YL2DrF+F(@WSg8fm|&J`S`pE}6R9dV<W
zLso23x-^VV0u~a%73N2TtJX2dE0^$7jW}b at b9(SE7cja3!{42JANf!3%t=*;3ZsXp
z4sC-%6qY&<+UDDIZ}>X}AA{64{PyXMBZvv|;$F^lIp&K>TyKPE_PJ2YIP4=547>Tn
z0uJ=^-V|H#<UCt>-yne|R7Eeq_8|&_TVoQNcLN?I(w(KcEu?dN?EPkWVJC@)Ie%cz
zUNDv~@5#0d<dt);oz-^C1<T at 5d$gzq>{h9ny$V07ZxqBf5;giK+VADhp!umGR4}{C
zRvvuwW!GP(H&)p-tUE!^0PC3g0rh6b5h>Pto=+169zC%Yci06<F$TFG7w7M{$Bd#g
z#+#;V1OU$oFRp;A)Kk`G9d1u&cHuT~QV+}bg7_0A?q~}vnyz2h^OB7 at 4rH10#{rX`
zM4Y^(WLm+nt|#HF{OkV$kJtxz+7xCJGO_9~d<Bf62q6tG-MFR&a}Iy-4H@;OqdL_u
zjR)7am0T{YgAf-s;(}~X)3|71t5}i6_mqlzvwNK*u4AC#cZI+Lq6s^yo0-uEC__Y)
zI<=I9T3kK(dyRUIwZS7{J`>v;PW-YX)#gDR>8BF9&oN9<Ks@|z6_h_kzKII7TSWkK
z%NZz<teRP$05|)z1*%B)Ql>N3h90a0^iKE_OGnkNG9n?pvRtRG?qeI!8&%W at 4HBPJ
zw}(EC8{9ugs}@Jnn(jrpN7prBykwEu=^zCPX74gjQH||!Z6<}+PhP2W$`#e_eOXHn
zj%dCxDjj=iO7P{xY*@S=8gC>GOGgAQ!-~(RrJBf=nKTz(dfni%iAF2EjEk!u at YEjv
zw!^r74<+f5 at TPS{&-*j~I36Icw{sF`31Thqoln&VT~lg&xPnK~=p6RObqOTQX at E1i
z#W<R&w@^dHpMjtO63<Rj+%&+skbI?6?D=P_yJ%6n5>z>HC<5NtkT?DGl8dy^b=yHA
zuqv1C=*E6}B3B28|3z|G7$Z#@ESca;-&m<&C-w?49isk<fq>mVH`nEgSR#}4M at tvT
z2&;a~iK65dj3*CS1RW%2!(b*?1--Vsx+%7XNmBEE39v at E`90UC;hmh0GH_3kZD4jh
zEIlpsT_Y{Mx^AxMbxFR&A4#^Q7w*9SEJcOL^M+A}91Z|Yx at C_zYkmcuNF;#d5RzyV
z`%0q6#!<*jHwB<kLEEtf`!08_i3)IjLWB!|pmsj4Vvv2ucs^!E69)lxF0jbkKE%C&
z8+?EM#xXr<26$dD*BW<XL at m5nw4V3$unqR)<A4wxAQ<`ColnCc7cAD43L<U0(>*;O
z{ITq~<xheBw at q!!4m7$z1p at 1Egx@U at HJX_;Mv}vlxy66Kcx3PE!HbsC{<c=rGH3IZ
zIY;kkp}TGa!!<%;^t16ZR-}$4Ck{kE<_VKB&GmvJ9@>v?>2)x^$!xCFBFD*Q;g{xg
z8p?y~16{ZF3|9gJXtp*>h*&qqV+1dexud-Ou;0So8hOU?6OALv#xn60O=tu?2bQ&(
z1NnFl_LEP(*t|Nlm#PDuwhV{?4bEq!Q$DA<z<iKcJ{=RKu92k_pT?~!ZRtzHH8;ZM
zof>xIV7Si{ZC-U@{l(RG3CqUnf%UFA;gj%zeYv8rY~;YBvox%XCB6>yMj~(fzf6jk
ze&{)9LUcDM8C}pjt#%j+o50zKhn+U86<tLK|F at Jdg(z1XbiYG at dR^sOuC~(rJO9$U
zskG1t(1Yi at zkK?r-<2}+>@5!S6Gh at 5bVHkC#!+^x;2aPn*W at L+yTeQ$JXcNTX)$09
zm%y-K`GX4Sn`yvEzJQVbO5FmxeW2bo+oH=&A6&(GQl$d3)y_8JENgd}*5uDFHtV>{
zk+es|uao|iY}e%ppda>M+ptU at W=~1-U4L89(?hA8UCMI`&T_yEIVpqC1P|a+rR*rL
zai>|kvI3Z95v(;;Ui;m40kDSzZ$ux9O at 3k41dc|`F2iqZ0sPf^|0iH8#7F_*tQ<I*
z#}?ILV>xY0c<#%1=<zTRgFgCuN94yK7B1~!MJ~?;DITfmkdbSe%N^BzIJ;<)hW?q=
z&IfY<mYsigoM%Mq-ET_*TWgde(liYz6>9wg_beIn?={qe_!Ws7XL|pDVTaOB*32+6
zP^!G~^Z{Wnwdysw3D9t13w&*W20PZ-Wk(k`e2rg^ml6HPTS8_0oez~O%*G;dq4`~7
z9u(BzvwE%0VspLhB35}YyPF&&HB)6>WQ+S1`%6^Gnc;z=3V^4JJJwYf3pK%>jvJSs
z_BIg0lPEr9>#Z^;ABF0+D`!U5_Y;y4TS1r2V2ki6A|UP&@D|j^wO(G}7Z6)@2TD?i
zzC$4))`&;qP}}P5t_O%-t{GE4)S~S)@TI7Z`r3|xZ7+Dkh<DrGT>lpfEL(M$d|a&Q
z(h(A^DC2c(N)eoq-sF(EjJ)+vIjso{>vZU31Gr_oL1$DOh7GTcs_Q670LzBl+O^W7
z>c4Y>0FpERX3y7LTe1?=`+8A)hvwt9BaOFi at rB;T3W^js+u$se>F_dN*z5*mpxK{N
z>%A2hQ#p_WSLM|TYQ})_!3>7ld}4brZ>$v#`7rK!$tO$}=J%RB5m|{?bxORgu!+Tg
z`31=3>52t=+j#lk@^b9>e7Y*(R9v0!FdC$ndTlI1JSRX`*IB^~v5{k?S~y?PeTcey
zC!y=co{Kh*FVXPY($PvQt>_zHC>=sVpi-ItjQ}VDGQ%_0D;X;o<WpQZJ%*1d#RP17
z?;5F8z(vJ%;U1&Nqgg1jr1Wxa3kvrZk=E_z03|zWARP`oH^<#g_WY{E)>%g$vAL$7
z#u4`xbNM~M^XVF*blD_4v8yqP;iFgE at n(TUb_EvH_T5Osl<CenNAx;Y(*?gUsRi^4
zsYDGS%pVdGewsMCOHiYi^x&vOZg6dnNJik^FLtI)Mu#4k7`xG=(oCytC?`>QRzx((
zMl3mnqJ=7Uyjst?ydnW7Xkp;%f}g- at cUSF?pquJry*Pt4mT;s2!E@>*OMM^`?L(vP
zce6%lSpyE~D`-92RNSL}`&z0uS?PWr0$&oD_z9R3C6XxRwn&5Y9*sqb%vJhz_lReH
zs`(nMF9TRUy01=I19uE??80AJSySH8{uEx%U^}t7CFD`@n%@p%4g1-?OiL?`W<-yc
zz4W_+J%@HB+A3LGGhPDy$l&u)vk@*{1*%SshI<>j)I90uk#civsX%@HjkpVtqbw9B
znJemM5Jt+T5rMATR$+(t>d}2)&H*i5A(bwhsMI{-x8dF(vfQL7cCypJ#hxguQOnb?
zk+X5KAXY~0`j~u5M281NBx*Y5oK at 9ARfJbH>-Q8~lDyvt*bgF5(-hEmh2>uyOUn01
z7H7-b0}ip?@40W2#x2xH$R}a>XaRM=DS*-$Y~s3Ol1H?UBp5VaJjHg)f0NB$rHdUP
zSpYm33B%)ki4--{HhA_$&e-6&2ph>4|7Cb*hI{-0+3r{`NX72omz?Xq9;|pffWZiz
zSf<G5NCz)m3ehg)hoWY%IQM+6bI0iQ8}()~ZHZN(RN2fg=BZqa5n|zXxJ-gm<E+MY
zD%d%x9Qo$(3^VsERvCBwj_I7bU7-1Y7zOJvP2w|v0!a0|cn42f!)~xft$Lm^=}7j5
zh3w at UmxSU+n5Oz?Rk?3w!=k2276Xw4y>oz}!m<uYSpD6n#{SQO$Wg^+rkdSZKk=^>
zbi%3|EIYXC`W3|eG9A@(*@^fo`7u)NNc&h|D0IKINnQX$Wac|L1BbmuFPdE&<6rL|
zE+S+p*QBGDJlqFni;#qpLX-_Qu$F-wojH|fZrMY8j<Xv@<m<?KAYBrhIUh6Wp~t>0
zy>tv1!99bxyj7 at _0JF#ql=e8s2#4E-P%3WR3ix2&fC!l!2+y%zi{!JzIF0=6)O>ZT
zLy;3C4 at Az&ox<n=2lShRvKWu99h&coa_U+MJPPP2h~9gKrwnU;mz0$JUQUd6C1*jK
zcYmmNa<`#y(UpynxUIgnbTMYUEoEp+zyJ(H=!f^sq|PT1kc6>KoB-_6M~j}t>x at cm
zuRqv#qd$Om0lRPunE$%<^eNu2s)akrHHRK^Ui3M^TkU>`+i_b}qG>>r+`Zx~1%LXE
z&sQ!l>{3tzVLrav5I~}%n44~BdEp4#dtfy%c3DGGrc-)evVCPR at IvGsZ%>-G7H2z)
zoW^p|2xq`+ZmeLrBRf2XCarQggay?e_)6p1ugQOEdup>iyp^TlgZUmC1P!L!cn!X*
zl at 1w429wxxj@ynd%YAv#lRc3_!mfO&wvo1L9P-#NVp9c=3T2#=OThO>uNX4$fu%vu
z%9eB7$L=5)pM{<}cu2lgKx?_b`%A03CusBRZ*Dj7Ik#H3A9oNCh=gAhZd`xK3g;yN
z)1*e!P7CLM$ttla>`)eueB7#`!D<0i+jHWwcGPf=Y*m at F=e_1pxS0;gd?d!<R3SJN
zdkQ&b9bq=r0#G5wb3l2u^cE4PEhx$GQjW$2!R1G%Tg%A}v5ge!!;D1Eh(usoW&!D*
z>zRcw=m$o0F;k{w2vM=9PFta*LH;o1pyZcGap`JwuhkiMujvD!;ysn`MOg9>IU>Px
z2;g$)LN%9z7^>o_VfFw6Iy-XI74vNAEOM2V`aa>FY2=<5Enk|6sJO#0+Ebe=iCJ!@
z`-Luh*{FDZX3<|RRz2gwq*%m;wu2*(&Br99E3izhp at x}gnR{q!a!=IZgihJgT^}i)
zq5$jgs|cn=ca6*+C!`F3uOXp at OaRYcar}VItNDjGB1IQbi$lOqj;Gi{4fMQKgl7HS
z=3 at 4*H}Wgoow%w{k-RwmQ7|S;Yn`^0oSv8~>kinc=0 at 3*+xDeHh*_*4N88+0w2LbB
zGAn3hP at xu4N<GJ|wLz=XO(iS#g&!PesMnDMF2 at UXw(+5N7hT&Xa^d~lIB&K;${I;V
zS)N^9&2XPB^GdZ6jU3U$<7jv05_PNfC03swf5c!?r+Q$LY;(Va|1Jr?skrJbsLxsH
zGU70IZ-6D>G{TuX%!LmNh1u~>EKMkz+VNL*Y$R=5KPIm3n!js{=Dw(U at BK1SkZ_k7
z%gp;hQ>;)JtxCJfL9FH(tn$`avZd{j<E63Wq at XGo=TBKO^<J$LYKBC!e(}3b&buvy
zyUykbr%skM2J;?H70^bOK9NX+r_U%Q>FW>#Pxy8GhxrloIi^dhS^m}^XJytIJWP~;
zme3eEstWwFXyHE|zvqNei^v=NBRsf}^R*%rOOv&$(14I{*XCXo7-TNuvBCc5{ef{Z
zR3_<A=y~_qK7N~BMV}Hj_Q0xco*@Za08LAUMw<z_KlD&9a#|#yvYPr68Va0VX&79G
zgM#ipH0<#ZJ?oaFYx0h25i<P-NtkA)=43sgiMPc^@Ws|_81df-Q91D}OOOih5tS at 1
z49O)>*Rm8hP?PM*y-V45s#fOuq at lAOJ>jW?_nNo)YqrI4t25uL4Jhe2(M)Okd-|*g
zC}$0Gmz5o`O+4!A_PQPdFY!;YLfN-d)3)pq2p(TPT|}Cqp8!1VL<af3vvEXA!Yx%M
z>(fTU^i{Ic{%o}US5q!<+1M6=#2QL;8d~RcZ+yudN^+JW&H&AabC>6{YIL~_Zm4#b
zN%=>;s_7;=Y-xrY!LaXTfzZ@@q#|-ec1$U0#W#);Aq0tV73h0}u0Wj-Sx%zL^#we!
zH>t88jlIvpeQm*Okf^!RI68>ENK`GHw2>vDo)GkzR6FaF{a at NF-!&@^Od%chS}}cp
zO*|H}1%m#<@mb?^Y7W1dcMid+=cCZ`KG;GuO#et%!^@rgiu at F4?)()>p6+~<E_^Hh
zaZg4T)?%cW-`PNx6;Wgh_L#?}JXIA)bwz*s^|?dw6a$0Kzn^2_nXxwJFnv4OKF%sd
z`6Y|sMB2sr&izRrZP)I>9{j^$Z$yZSfUbX|W)G6PcmqfE${i+z#K{aTQh+m=g<786
zm#IgWIYEWsgR<e*!sng4%v@#oaz=|zL$I=O5LvioBBrd9g=q5Hr1bWHo6?(My?VtO
z=~ryfT{2L+)7u$hmW9Kq+XkCHL1$bh=!Dvu=p-IPR*6{FDTE0?MSVP&$>;}iEYHkG
zv=F}g8ocrymQFK8{ZR~JvZYgq=!<Uw^r<II)OpicaBE1qt;?LjPeu#N(|+teLi4nx
z^B{mLfdCR;ry-RxPTu22nl5`7c3DZfVBzJuK%-b+!!!y%GVKYbt`D{?sY(4bhZo8O
zv^2(c_6IkdP3lld-`K%}y;p#G2!TqI-&@Goq`=gv+T4Xwk0sY7y3O!dtEcOO0Nl-S
zIY~Su!=jl%kMKGmT;Ay(aZq-Z**QT21CG#WAQ!@mUv^26AXiQyFf{6!g!{vIGux4m
z>CXlltT+nDxnq9-5h5G+PGuS%t+Ym*8U$}7Mrag(Q_-k=W6Pq}o4O)254TKr%J#p5
zA>kl&Krn_%3(?!#M|dFsgEBq$UT_tX<PH8I6<+-MzZ+3A|Ef{JfQv<@>b1l+2>D~{
z;qQA=5Vkd${%(y&if1D53VqKY`1YGGGZufKq(eK#EfRppF at AWWKIyBR?zB`JL0xnv
zNcszrOb%=;yEqaJLVZfm${wJR%Egby5r!Fbmw>0(R3nI)-c2SrlY7C`EN=<Zp&^{M
z_VvE at mv)`@)ACD6M)YWa`0i&4uW-n{>V1v{>cm&b&GAMFD_Dn at m8NLfQ!UaZoGg#k
zDy}+LAq$n28}M*;{hFI96ls?ZT8;N|R1mU=C at oW`4TkDg#IvH0JxsjJ53kgLez_;R
zjyxjg?O2I<VgeU63{kh_rX%oYv_qek at _7dzOT6TRVlO61hydR?<YR4{50jI{;T!e~
zJ7-1uX_y#;7xY;b#2>CoGn49I<cmgNvb`}N0d7*>um at HvN+@_F_A&B9{7wx)wy}_3
zMbbxQuW^2%N{j{M6Kp1=0TNTDlm;hUTG^_(k^e_dtp5vNb%4+Gb5TFw!z=@vysSoN
zAzd*&Uq<}}iU%$Z{5pS0zrcy*9DPi#ox&PsJ7n)c#zBO%FE{sc5^YG-xcxV2u9rLg
zM5Tn~GXcJgN3Jtpy%U!qte<3>8DX}}Hc~Hb>|tw6Wq;*I>&+xnn@&ez^%;!jtZo<|
z(AYefeLW?cY!E6<*&u at Kvs5>_jjb(8DgG-5GQtNwX0IeWR->el5Hpkg2;$IS)vTY3
z(FVMEbphS~YTX8pANjvDR$Rt|Y8<|KvolN9qj^G>Qhug^XC)KxW$p48^`I_sO);%p
zEqg8siDaP1S_GYLiA!{2VHZ>Uda2^fv5ks$(Q}ZfU=L-lHEaoBcO-y_Tui+_`*-i*
zwWvA7bgR7LS#>Q=mSs3_TMSPyQH$W=@pJhZf$~JNN8mz^ERdm;krGGnQ<~=G;x6&i
zK#B@(v(QvdPt(L244vR^^V at -01Dk_zZP<}ty0iVtYOzSZeaW689%&&UL$SQb!#}FI
zn%yBiBURB>sdtpBob?YREy>N%eUGX(_x=;gzt(%J2EKJ^_?mdrF8C>CwU5m->)wlv
z3)h{bLff`=b;F#O<hzW>K|jo69e=ZE71wd7PpK;%_erx^K^+mUVarI75bIgi{<eym
z``32D^()Vdj}@vkW$Poeqf!c(bQtSst*yd)B)4m+CV(8LqVcF4Lmk!~TM9s9#I9cB
zNkIM;;+)JveKyBvA?a<*Qe(IZ20%UwldDh4?gJT&C9gE09c;hsCH5#cbmg34N|GD$
z$|~(hm%_drEMJM22<+@>`!wa<E35<^F37dR2suWh7Cg$I*<}y?)@9199I?oFTjz&4
z%3H&NXk^&@;K#?NoU2ZU??rjI!7@)7CosjqTj^9gM46qa8=6mS>u!I|Uq;F at VK!hO
zRjL)8nJ|etX at c#!{ieic!#^Gc)c-FFVs7z0Y1e-h>U)ZCt;2W!Xf2wBtg2kj-Ay=F
znXj%V7YD3++eqOwxMbxCzu<}meyDreSV8I1X!I6jKunPQbFjnKq47ihCyRWbXzhI`
z-^Bzy?abteyWUCKivF}0reM_|RvC$a`qbSn{OA(Uq4eKO&}L`!4Im&*MI=hsY9>dr
z;GHL5{4XMx(yzZwNGx-1e9sIbe^+}q4KM`h4oRxqC_W7ywAPx&oVSk!Lss}H{}P3|
z<-klPZYo(=XpC8Q=7&2LSyF{56&nou!}tbbT2|qT&i;h$$l_t8O)raOP2&-6EL=!n
zaP4f+_Sf23Cms9IHYH)1u5ad=CYKAMrzh$ve at q#tlVqrfku9-=&~SOw5kSVd)}2ht
z09 at yOsV!*HWs)p}1HQDg)1`$&Q|kGL+seHofs%5%_0;R2WI}y`bl3V!7XD6%M71~h
zd%9!n<sN?_!U2~ssz at zMmQEh#^IRd=F{_}A3PJgW$Ma6_7El)Mmb9{eXzGB?stIJ{
z9kIVKW)lwCWsCr!G%irk3n%fb*a3lFUMT;8VGhlHx7G>S>Qf6*+g^MYJW1ej4O)gc
zjl&u%=dR`Bf$Tbbq1{-d84(g1YiLe`1?@bCq{JD7>g+330fr+LiLHgPIgUGnMIXMt
z{Btq*6;wWTu-42eeIFCH5Ivj3=|d68Sn3`8{=?~^1&ug{yAs99-pezMkmSEE&K{kw
zXYp|iHOn0#!rO(3H}!#Yk3S^R&R7+lgIbV_Z~l%aL0C2hAve;(F0c6FPJ4 at fP+oRx
zSATxvha|j+44y!mc5~qblMp({LlNxQ4T2f|*cVT(uI}z81<^aM^r5ybx1eSyg#qgj
zUt3!}aOo-2I(2WZTEz9u=A2U9JKUOa!RVAoRM&zlED!Ok9rbq>)&nlVTVrO^^Sw;Z
zjF+igm=3|9Z3%w+P at +Y}%Np@}N1Hr9Y8uhc6F6N79 at weWXT{@!VhRtxG6ixD<rZ4r
za)##stW$s3MmEFv^;WQ1@>=|5{sL-)X|kVOY>E>7-uM-Yv?+cK2xa9WWzu!?Ze7^L
zQqyfp%xQ-!X0usi-tiW1ic|~!mf^3sWRg}F<Eabb$K~V!AYgl(62feRiIBiru%M^x
zwS3SM=~PkhB4Av+^TMj?#=2l_p!`*=G+eYi_aLl01wliz-f1YMqwfF<uAS-2{462z
z+4wzp?w4t4XoOBn3#0$do-qC)o~a8jlC6d)W3FA^AALW_`t_LaMwjm<B1KXB&FX(@
z^-No0l|FJ4l_NCULBJJMd at e!a^)hTVcgby(ggaiqVc;??Nt%c0r1$gXJe-O at UjOqL
zb9DwCThP3A2|YK_A7^TYkgK22F+v~JvtH-RV-~vw9iXzSQfK}e0SaJkM~`-<rINH;
zN<%PFp5$~9+E`lA_QFqUbr1ZvwIAmUB9E1 at O&_XD3(&PkK4x|K#3SSARCftGR%~Gu
zGMNP~5Da at IsM3rnKrJyVJ#zemosMS`yOe&UyFj%ku?Tl?Z}(RZRlbl@`ta=D%$=t0
z)Pmp%Tn?^jLZ<N9(E{h(zmKdMu60F1_=Iy5)TDU|O<d5`A30Zq`Yzf1oGrRjvH8kC
z=04UZ-nUh&_)?HKOEtEaTY9ryT|{2WKvraWq1X3Y9Hsm2Wz<_Vgi(k`_pxL9=F=c-
z=tva%cw~LM>=LsGXXOtz3f0?=VJM^^pIx<7%QGefLqW+V%M at cjozRc78rnJu*rVkB
z0JtCHPRATEHMAkM>^FIM!QV1RNxiHY(g%#T5^GSNXHYju-V at fgE*5>07()eIs=ci$
zoR?n=NR&Ev>MVYm{Xx3$40u;GigP&P$c*W*F8#SysP&jcaO`#Z;+RnlY=s*Ae_%-2
zWbR}h)TkZC$YSnpYkjto<cSUwIf5MEZ3~q{_!f`TIR9*9SV=h-Xq%-8bw-RxWMe*h
z0I||}R;S=WA8 at 5U3({clr(2*}2+7~_ at Aw9Z!)tR-CWk$xtPvtMzv87s25Q>m2_q at e
zlwKTJ?x>BTXugd7oFl%vLJa7>a-bo_8K^{Z7D9di{Yd#7r*~~;(I?wWe>pl(%s<rH
zK-nCa*>cZ13?D&lw*^bk0uvd)9+`U~A<1_rM;7#nxIeYh`uBK8POY!+|K<52u`e>w
z-ELxW9IyV1iK%u~ve9qc$6|NrEOxe8HqIfQL|h?1xsE7GGqly`j>4&a&TIW1)dku$
z*Ui`sv@#DUxrT|>Tjh*oq^pyCuffhpa)0PMP1pJ1CpP at RdfP`<QwO)VAe_9nhX547
zjy9#npxL(S5{kXp$C~g1Evg{t+|hJ;OvWB{Lv at xI%B`t>p!(N^U`szYx!!CCzE2g-
z$- at GmqeIrOg?2bxPJ+PzVay15r)yz_t;({TRdr<oz-Jj_RBMi6C(fIE58^7QvT#m>
z5?D7(XI at 9U*wL~tQX+iwM9XMCb+ifA@~GNO-FBLUCWq%Q1WJPWsHZov|M5J+t3r{G
zp8~cg80_J>QwGQ+YYGP3kJp-IMbA$F;;PyJvkz*bas2SR_u-w&=tNysURNdiEd>q)
znPn(Q&A*aN5lJfm1>#LpWr3Sqv4?`DA_d}4VYhQQg~VaC>>9V{RhZYxjoaomPauVq
znZPYv=Il4e0hRwj!45_pkdqUEl2Pr4FvJ7MX6lD^Hgb;f3htWA*<9=3o`r7I+$3py
z5ka}?6cE?YI?YK2t<Fj|N)W#8e%@wZ9mMbm<HMjk%Wd)wJf5t(r|=XbkHBb};*Qlv
z6Pg<A4zDl^g!#oy_+2^hfvIaIUyxYHWF{9mU*;tcX at RLze9ehanbe`s>Eq`v{tTUI
zHcV?^naO-Xeeja8*`!2I()r;HXtsv{C>GOiiiqQ;;^8RMEj+iO!Dz?FN>rV0OooQ|
zcOAKI(O3!29-zIeibEYk-oD;4GPl1(XVWxlq_Rt}YUrhNCOp4j-O at cLps>2VesXgk
zA9fNM(V4VdLSNx{eK0kU|DxJja=3is&uE~>o+&v&VLSCj#)r=_F;Vbsg+nwETyfj?
z&^nPQB}$**xeWK27}XGP5#;5O5Ah~8$sen_&u>*UOn|D-CDc-=1k)h2_}PZ-lruWm
z{=)^*iilB(sFtH>2EY9Fw|V`VD>QUC{)7k?1+g3(VIyX^EDs=z=;Syx<~_qaZnN;d
zPM`Wr+y<??I+CjA!E41h8M}3yzMhkrwKXtwNL)h|iWy~Ulic}U3NdtVo5=;h>>lMB
zsF(kt<IB}GFF#7NFb5A87D;FWh`e at iH^0N6i&8)qxCSIy9Q^;6hxnmzsR?hro#UHB
zUH@|#IZG`8$mK2r#4!h*ud{`$)>_zXv`w$(l-`eWcpq#0fnUu%BKw*=$GMeh8J09?
z at K#wqbr(Uq(S~^Vq0IwhNxPMUjCkT{rOr~<Y1!vX4uK-&l)CSQ+B4#%ryq{$(V}S=
zT|Y2mUaekE+qJ88Tol7l@%_MuXUU#Isut#hn&X4sIF9HCH9gpv(nv~L%DWTk^M9Az
z;coFUCLe#~qVcqp8sxsN*A@`w6GL2@*VE`Bqt=98S>OjyhSEsP2?Q;ApZ(H|W->Cz
z%0~9wO})u;q}K}=^{PPR(`FTgTH#BJ-XLV{XNVW%&A|JjW(VAu2|BTYG{=(#MDxj$
zp8_mtigJAZJWQ||9Gt7`C5{HH{2ZvyEz)9c{(y86m at 8c70(S`2krba--VhNW3UNbh
z5u`$8$!XHD%A$+MhohGY!>Aw$h6 at JUxpf36xUI<Jbtf6HaO(?fABraXspx`x?9h>V
zYB}eCfhk4 at Yo?@`lY}&cM2hF$D58hCO1--$^&y0)#8d7nFZ at LDRueDG;jB+<I>YzR
zfy1*sN`=#NlJ$sE9MU)PyyRe|44t^CL&%rZskwlj{g-`X=9SGF0-eDdWy=^;<H3ur
z$RRL*0vvL%3lhllusUL&pu7nl;Ag;bB^GQDmDnmE=Ij}dMl>^eTP8Oh!UOla(@3Dy
zBPW3cpxn#OynnY+tK6?vXfn at s;?L=2Q-HcNppVgd_-w8KV%Zrtit3Mv%bAxa0bC-V
z3)htY+c<(cu7IUVe-^(AWF$WgsVS5k7AMxl4BuNuH-sMj-vs{jls}<e!NB3dBB$dg
z2#C0I at gdHcu<uzJ61YI>Mw&3|`QWTydZ3SVc|O%9Lr08f%UNmB5He=71L%Z|bh_<W
zu)c(EJTQV at jq!6}ockAxC$j-F0s!xWgq+%EToC9hA*B*xlcb?W3qDPGn%qX4Lh?vM
zvM-iDC at i%w?O~gNe!-6Jq>fg5_UOtY>ze{m+G%g-(qk=s1%3<yD=BmQCzF0m{b=NM
z#GTgeFDC+XQU2Xyx!uNMltW4@*2H_eoj+}OBo|7;8&jt1?;fRzeu)d4p`|#I^`tu7
z?{5LORKXei7gJ>-8(7x3E_q%GB6e5M{muN`*7%K3dU590@`MNqjsQXiwD?j-yA$AA
z=Lef at S7rsow*R77L?VrA)B(lW+d+Z{z>cCpoicg9&HAy&gOGYEn+KLU)R_b!*ctvz
zz1#cyh~V6Di8)8u{v|H!j9<s3Lzmto%Hn>If4mFjmWb{z-646?YUyn`VMU;PB<&q)
z{%#8UJ{cQ+!=-vTr2fqe&U3f{XM0NsN~&?qK4t}Og6PfzOWdv&76`N<KmwAG-c!fF
z$*Tuqo=Sz?c}n15RTsGk$|fw#1<?tAgKu_qTHXNS#=|}Y+M)T5vJrAgOtrW`cSY+6
zR>)qZs{`yJL;uQb*%MZPKQ3V=1|b$!MJE7A*eX_pj28FKfqIkozZgg_z>pP6)n8ee
z`gTU1-`a<FZ7>vyOj|HZU696oYo{kw>CN~9eQjDBmZ-=PyrDYDUgm9k{HT$zPp5R`
z69c<TPJq+ovn*md)!TR7X357}SQLuBiNc%I9_Lm*_%US5C-kf5G`rXMqJ#3SAH5HO
z%cN%pgC<=NTd)Vw^NLaW;s{*2q)m8!n4^1XZGNN8;F-7WVno!ad>muAcdiY)^;V-t
zzZyeiXP|8~G6SE{^kEWahQ3ram^UFhuSh}NSWIjKRU;G%(Xp2`MXc9 at iTc3y-{Qyf
zgI6$%1bWx0VMMLRSOmzNR~P%nXqpELka6${u|Nd;n26?`u at UfT9MgJnH8|&Q=sn~T
zz^b2;WY>;f#EYWwJ7iS_t>#s%qNLyc#v-0jH9sgRU~%QGv!RDOB9aCH;E4%$solhR
zq~Ix?*I{-n)Q#RD4*Tq*&b8GQ;|9>%XjM?=CLX8ILv}4r at X{K>o%@=5 at Lmk+BLs-5
zC)_ZtgEdl9llO69MEloMnOaoUZcc1L@?%A5|M6;~dk9u=GKMl3(w7}=7aO#u5+Cum
zL*Nffhe?tWElcsJgj2Pnf7q&|K+^1KA(ed`mM0f9w=2Qx>mfqH89L<Mm9#`evY3US
z;J1`-cywXgei$#<T(%SDasl8ob+9Q=wS~HRVx93YV__o}0SJH)`oWPfkSsvJ_NK at _
zvDXovTd(iZ_v-bLF0!feA}?~AJq*!O_Q5o0W~`tq2>|29?I>>fabOVJq)tIwn`Cn2
zzfKpS|E1Im(dTZiC%e!~5Zflyjr89Rm0##1J1#H)8?K^!Oef~>ddF&}0(Z2<$3N4_
z%2p>t9oe>&9!IyIF(8}9R8CI2_z>_GB8G at LgLuM-dTIY&*FH!L$|ul|ubrLThTD!k
z at YpEBSnWjKV<R|jOq!p1g=q;2jaB`>;-l(BAK-bMJeazem at G_rIxKxjx)#4VD0HVv
z^sb}R|AWMVwLhD(c$st5L&7_M7a`bCBj?(4ldqT9kEwHgzwIkh#8%b=w%Imhv8;bj
zW!JU_+V5GlOmdO0I2ATT7J7T67 at m;9Bg*?pPx}y$fBiy4;I+I6cOR?rsC(=AKHXQk
zbovjo|B!i_lG)tZy;39NpoWSxlimDg8cdH8P;hZ++)J31_9 at Z9Yo`*lm4>-VC7@%M
zUT)m|yXpADS3S8s+N8_voE6eNLjUXz9zj+89_ at GSikwJ=Dc(K7?Lhtub)4n%m3kH;
zsnm!mHpt%+LcLU`FeWuOf(+=6u<Sl`F&yclVH>3W%0(yN5`i_z0FY4Y1lm*w17^6E
z$#AK{T(@>0M}hqd=$v}P at mcL`s$ZGH>;&E`|14?klX;bFHa9;KwNkC;Db+;Ini1Q`
zQ+=-T+df~WPyb$Pl{8(`C%rVme&_@%=%$1S_iM%l5?fn-9Ag&5k(6kHd<EC4I#Lkf
zKH=*?e}W(U<Ph`nGKJe at UprjWl9k%?ppisUd7I1f&kVaCt}X at xd`sZx)V_ku$4*t*
zXak9ytQv|U{HZJ-Cy<All~YuCGIJb~N8M8-`fX<-TkLjnM6Iv at hW=R`RVi=nueCe!
z#i=PsqSq?xPCNf}(_b(!<HC7aidvG+vwvr+xZr-`vHZP(t at fnhV-YIywzfkN^14X=
z>=u3p;u))kHM&~q)gmq`XcF8mK>8K*Xj0|+LQi6-X+R(BzJ0EnAoipNyW2FMUTb$a
zBO9ZNB_J1a|1n#%>#sx1?eh;`5w$6vH#T;M|HD)M=s`-EBh&=v$^wH&xsLbmP?{vd
z&Ku@?i%6;$AHOe$H>ARGw*qVWf2-EsZ((n$*(_l0O)}3Pn5M%-SP{GZjf}l{HZv?>
zAqxn?C9tZ#YEy%om?ICyQ~hk=*R><ozLx+kn#LV#;KWc?2ml_zrp+m=bz;R$2TVB&
z1wtcQ4x%k^C-^V*nD$MJr|-OIBlgctn^k6^Hj<Q8;#D!XUS6LE*Xdx{25Ot8MRrzo
zsu4g{2ZX7C7M={PYGwYE08WgXee=?}*woZHofCc5@!a7(xNW~b{~houL&%#BwxIiU
z(*sGQmA-L4q5-Wks?4PY!1S%1VP at DvoLcfTU$1 at evFZ#Pew`Yt3GIe^JHgKf*#E|a
zRBW>6-j(gH+VUV9M(>VBl(sj!ED<`xv at 4m?FYkU`tymp0cA2XkHoIh4`4m3{%8c$3
zM8)*Zms2L!Z2>?MZ>4Yoahrj-^s;u%x{<aA^A*3mV?80`Y?=|NSfV5yAS$Vh0bNK6
zK(N?@cu>o^u(BI7F#aSf(^ouhVt;{giFwHx(C7G#vH^p}8{VaYj>CIAVY1{Pj1fyG
zRb!ePHvdjGh4tlc-^yZ4Y+ozX{d$lafZz-LoxNivRC}{U00s6~7%5KRcR8IAr4-~u
zpTTppHCd&JgkTRD1JWdrL`@m%qvcDG4<788(uAX#d()&hyv~61CF>CIZn_aSUKLUL
z2%DY_6D~A}13<L-tCUV1SV*d<q=+6d2exbud-L2V)j3v`M at b2gHvT@#WE41+1jS;K
zv)rB;oAq)lWZvsK3Pr5R$)kjF$_LeZ#|v8(f&at1q=<#<fPnV6d1m9;a$7Y$vW+?x
zbPv)lUu>=Q+F~cA8YYEde!_>}{T1$pj0jy?!}$uzmbu{oOF*>0Wt5l4C_tL7D%a*p
z+;E$<2VqW5sT`vkw!qjhjuq^^kjZQQ&Gl at 5U#s?1b?B;)5rnPp+9jt(GrdEkvMNce
z&H?=rQ<-{zq+z_U?Fh!K-y^T&bAShT)T~*S$^rQza$L}>+9jZ=87o0II8y=+4#jq9
zL!<1=KK0c8N9M^*ho%G|*RASk&GC=GKwxQSEF*c(_EF1=Y{;<3#6s4p)*5Hp9Cl<*
zeVyl|p2%;+2Qwn2#ZG6t7VMw>a0IK3Mh at B8Q1N%$EMXIUlV1mE@^zie%XU at tGei*e
z0V!<$W&%9azud<?J+-W}jed>k!teN9-fUK{#$r`Gr2=v67lrl$Vyz*>2%>|a*7o7Q
zO;wc&scRCps`rdD;~Urih35<Ng4$NP7+e2!^{|w^<f_x?UnwYaHz5qs2Ar4sH+gYN
zXy+p@**6;ZqoCiI_R;fniPF1lJxWrN$yxG4pQjW*#0lxXLCtSRegm*j(p2!DBd{d+
z$6^585lORxO93Vr{!{(@6~6YUlCraLdd;@mRgw6ub}szA7~3clxq7PBO9$fB`q-sj
zqjQ4C at 5ZP$mri%CTW8E?;e8;qQ|K^<>TsHJO?ei5817c#D?vu)vgjKcBjCFk>b~3A
zotvpAU!eCUV*qHzKy$V{Y<_;)R7v{&=v%lB4w0tk>bT+_bnMv6;tal}1*s%ep!DTF
zVT at sgdizMMKUyfjIc!r%@qd?F+0ArQkth&gf)cz-Nw<JcsoY@`?j=$yfgbcs(S55+
z@@RU1k!~)<rz!8b<w0!|!U*75V&?YcR#@duBWNwbLgD)l522u992{eC+KgIiR(NO%
z1k5LL?Pg-eyC at xj1@EROC&JdQg4lL$u;J6XHH5GPauP1DlUpN;Kx3)0F}hN at E5}uL
zxPy7N$;=gXAxMUh;j_^8;L1k0zush5r9piPFjAr3d>#O5|8 at f#dIOzDQf|<a7tXWw
zB~%%0A2gr5PaD%^Cm at dpox_{CP$N5~^`5q|gXhDtOwjLx>FFVIg-G~q at IAtA`fT*W
z%oLZRT~Rqq0gxm}ybIj}_5v01gi?i({e$=Q`_|b)Zdpy%z`pl-eHQ~`e>;_x#y=a$
zTcB6|RWK8)<{qxr=m}BNil{*e+;Xw-n(f45_o?m*UK=F{R>hNCK#8^*rdDy~@xazT
zdvB$8Q)ynUDQTotI;sx_Ig8EAag=1+NTQj)Wjnq84vv#~`r_R4f9dN574ZwW%Q`!w
z$xEqMbwZ5GE at mRc@a#xE^L*g-LaF7K<Dq|ovyFmT8G8bV$~#)YGO at R2NclOG6m6?S
zE`ZdIeV#S=K#+;b55<Z>o$gq~gg$$M4>5(MZz-waHWR8eZW{~$8y at Z{jJNXo9w<jd
z)a9{dKg5?{aZ0@;;h6;#sQGXs95l@^j!tK#- at r+8dcTb;(Ub at f5*Y|8B#UQ8RF!BN
z at J!`>eHMj`QjZ6<v-tl*jGK?C{jU6jRwLrvRTiQKs9X3K+;AgM#hC6`q at Xq}lCfkS
z(6vC>9YrzHlzaO}FX>29bEH7mZ at z|SuT4TNbFdhLi6Ct!QZiqVS9;CCKZLCY*ee2l
zn_ltn8cgs%IY+fT{Y+7LEO&}ZRB>5ItS<BYHdyZ-g4&HGjb$lHjVo>D>rYG at H)kM0
zbJv(!{pV$WxlW?E{>Izju~aJ!ffbTMcha#`)M8~xwab9vIzG6Q)2|t0+N7$v;@E-m
za^V!}S at Jx`YPlYC`a_|^RHP+QOW$E+lNpbrFg)=%tM9BZ(W$?RMVnnUS(gH|KhG|O
zY925C79mkxdSx{PNF*U&ILpI8(4_~>zxj`^XWVmm5jtG7XDN4)X_scFz8#}lRL#G=
zj;gTUyZrJ+pZxqNN6Aj00-}s-5b+BE9C8aG+(<#auyd6Wo^!Sn&#i&Rlb>?F;BBhM
z74HQd?nn(Iq&g&?)sWpbCOk=4G~o;Hq=B9Io9#^3{d^3KlPw#yE?$lgOU0LRy#0;_
zzJ|a)>8a1Xyni~Z{AS$$3J#?R-c>zJm-~_<tudR<CP1)i0Kn|FqO#ftDn;hHsWwuj
ze~I{?%k`+s;;d<Yz- at gCzhK|P+cz_Jmt@{`mQITT3wAITz5Ug<9pL{_|6QATchn5@
zZi|&QyXPJhAT8Ri7cvUM*D&FekD~NoClHl&q92IvY|95StydK|%(h+&=^7iQT`V0n
zonPZmnrbbop#qPP_b)9ftwk+gX0gGJ60k%mhx1p6jsO%K2al5dy$<ka*3S6ib%n6n
z5yQg(=Ij|gqZiK^6phMaizMwCe@`oef*YVsC#L~aba^`0ntyeVwA;C*rqc~7p_e<7
z{ev0X*8yl`o$&S~l`=C{2(9qQY|;JOz(U};EDOm}d)PnD@=2H(i4oSCn?O<;f+9dl
z=?Z&RMRcrD_eMb)J>u at fMy7#v&>fgb9Wmi7B-Z2E)}>wVl@(3(47n1Q_F=Pd!LIGm
zTs23(BZ+5*bt5#{&mt%VqmD4nPn;HykXfK+3_bt?ls|nwyqdiTea4iJFR9BtI9Wf`
z1)*2ZXYmk{#9FbS>5T^5Hx)3`?N7st&(I{|m9u0SW;X_{udtzmD!I&oyVhAT0=YoT
z5xMlIzdR(hxo6}iuVT)siY$$(Km}S&&zi50i9M96FUPbR-fqF4U5p0`9E&$#eLq!n
z1$2?(EAs9YocWuej&Ep;+zx&<P3e><Okz%hePZDRA0 at FIwdJ_tUH8Lq0hJFi8L-}r
z8&9WrL6lzo>%njGtc%f-e^dZ^J`(yYN`eO)LMDA}aIM{P&++8OtD&fqyCFtX`pME}
zt+62yiy$GsgHg)d>BVZ<!Sp!-rlDFWRwU~x*$|$gdEcP$O`%QRBoaC=<+D_CjFlKE
zL7t=kIc7rDJt`YMj?^pX=_uE9u>is9XtcTPX<FsrI>kfL5LWMRuL+g_Fh;QMk)<>U
zqD-$m?v$%2#pg5GH=zl4a`dOAf(PNe+KyWXH=6%1r$wccwQ>yiQDY5z0Wii&&9cuk
z*Y!QN&_ur7thL*rA2)hOsM}HklXbUmqh6ay;%2cg4?*$mrPCfcTmyL>&+^`^X*=0o
zl#n8*KNQ&pQ$hs0LdxvnNTplz@|vnxKn8N*=Z at f@ON%*Z$YhGRLCF}rJO?v@=rzQ7
z7StdOZ+Glw^Ol0e!<gFXk^a^21(DM8_|@_^H1<>tCov&jc#}|??=lK0>f#Laqm4w^
z9c=Mg9xFk36^B)5Wymuq>Iq_8vUMGK%X|?-mvUoBfWIlzhPh?k>S95sE4kj&!Fe6u
zf_1kqk|J8j;~%zE%O*7h>p}_b4BAd2eSK*C*^dA==+eKx9TMpeNHKoJVtT!xbqwwA
z8Gd_U=c6jtehWq*Kqpg%5InwA-S-vc9H)AMUTRgUupFB8ZKf)1MjsXdlqd1(_1F0N
zen$9FX%cBmPtj6tIp0s+7d2e|bu2O5RU;jbKATafc6XfR%;)tl=b(X#J_ZyXc6xnJ
z8Qx0JUW%&&9~l1OMe`6<@41&ugBKA9%toHuTzD|o+AcSCXy&9}gdfkR=R8%0((n+*
zuu;BWtVb_dH_kc+5m|oXl^5{JmIF*9 at D|YSZbol(-&{!VBOD}e+`UIEMBKWS&Xf5U
zB0<WT_qezH>k~ee^WA6kTTO8vvJ5X^-x*|hu$|AJY-!agiFTa}X&&OV)pX3_s@#Z=
zjRy^nqO!g+%WcYTfi2;WR4WkLvYna=5j%lYe=cxk8~9(N at R;eo9fBjcdzoNHD><Ix
zNBHp>(_%DfFegfR=^dMlCM!PK8VT7m9N7q`J5y&ZXN$8n;~`)ZHOs<J+x|5*oEv_H
zpUktTHT}^WJ at Rh5;Zi&=26_m<S>sPriW(w at 0~!~S1 at F~>6;}oP-jaOS7~Exfrrgv{
z2L|InrZ%ExGj7n}M!ha9^QxlmH&{$6bNA>V5OT)*YBVs+f`z<S7-p7X?-oEcQg5^<
z2SoC9I5-4?L;yyk{_y(7 at 4(RkKU(_9HnsK)FN!;q4dD%QWW at v&*{6irXy|z>m3Put
zw&A%K=&}g{ULE2%hU>k|^s at bu+uHtD-8Bq%^j!RvcFk&Z{UKm*mDKdGno>`r?!-eQ
zwsZOPvv&*BV;&^F1*(EFj<Ib#<z8E({>pH}XN7m!-u{9nKk}VTWfHqaPU8q9&o_is
zC<RjwOfTn<K35dh&HJ(lCDoBD^ZIbBz2fx<Gd93tX~+w%5dY{1$671IY7bh-<72w-
zens6gwv#GBtJ{oJ{LQ=8>Do!H2*@lv3BJf1zqq$6J*BKb$><XR(k^;ijkih^8y9P5
zoN5n|DdQ*lw^|Ty%THeZ-g|ft@{H!_1-4EcbLYtfksqx-ziu{;v^W=B-;Bs at ZVO$V
zz^rUqzMgI9SMCh=OY=fF5BzxKy at dz(z^%muGfOec-2qr1T{#Mg-YQr1`mj|4`JrE%
zC$Y;h;G#gZ(wC_KHDU{y^|BSt_}dd;tk;E-7p#Q{D-q4Q^K{U2+E4*lx at m|U&We?~
zv>b at GXfJ;0thIU+j+6bzyfcp at LWm*TWU-Ek!!P?w<odCI<9Fc43pTj)U)gPHJ1kG(
zti$~i_n+p)0|1jEm?U?uw|HuH_6OyM5v_)T!Te;Nr^qqW^_aflSJ)4_*dQ*=&SNP5
z<-2iJ3PzTWv&oGv*7%j=)ilexf}0XX7vb{*#t)UCJ}c#R+Rqx(_ at 6XQJ!|30yE?T`
z*MxY{!=cIVT5S~XoOpP8rSnew$$~_ at wwolX#k`HcCBXx^2(fZQrH_1|FGChiHm4#z
z_s@)H6_`Q^bc8l2!F&7{z at o^))`H0{J;1dhEUVWIpu|tDBFZ$|@G6I>TvE-wrByax
z$r3kNuebMbhQaSl=76MwH_`Ja`=;!ZDk6iD$nT`w at qE;MS=6Z%Z+>cP?^L0>=Veu8
zrgp3RIlHPkFVJ_noYz`T+f%-eprquWoRzQB(ts&O9bTaVIeo%brDlYy>TP(a*mpc(
zX- at uC@ceXHO#l`XLol?fCfu|G%J?-8&n`W}uxIF!_;nu~b^moXHr-VnB2?7H-)7o!
zCODWay?El#384yrib#Mabt6;{mV4SfAi~=xD`Rt#on(!FM*!C(AZ8vTkhH&C%U14s
z>J!v;j4>;i`tQP<4c;iDgiZ9GTyBK>{DlxhWT+)6R7t4pekYvJBj{S4nZneRw+PwT
z%X3B-6rmC^NIUtc=xM at qg=U<I-0_$-#`amKLJ%n0ZXiJ7NM8mt!6k8$PM#5hdhQzH
zk at M4+sLVFH+RDe}zsg0KD&n9KWOf27BLO)GY*1s5uyp}5es at D-GLkL+NE+>O*qE&6
z()u9w?H2Frn(8k8TuE=k$bUtrrH&5UND3)b=@K={eZ`MUkZ0YCRN{VTQhWq>Z6*8A
z-QEu=W_$SGaJB}r9cGlxZC6RL9)TVzWx@=#&89i|m5tZVx%-<mrEa-7A?*&mMJ~^J
zPcJjp_F|L4er6l!YNMHk8fi{S^AsucCd~wN6jc=&t=#W3ecA9?n_1>1=1kd3*Fxdb
z9tDVDi>=X}?ogii)pU4Ii&gN1%X_eKn}2GF9UFEOdEbb)dnI*Lda9%gB5`1G(-(Do
z;?!k%BWi+iE0`jp+fy_c<YBZOtBck3`Yw5~M43b2#O?55%|;l#q`T{^B^)d=0xOy}
z%E)hsyBPIMvJGiV)k?IgKptQo+keSMZ1u?5z71^q0^bHYv&?zfog;`Zw@<T*LjSvE
z;}>||?1l$aoSIj#ggW<@`q^@=I%Uf;V*U=dPGx(9mw_JFgaN_!Lnj-I0srL9HA2w{
z-xjzx{G<2-84-%5ZzjUP5qI$B0AKcZS}^Nwwf7lijWJF=YF#{h>O2SD{aGc;VAIoV
zMzn87rPHiYLQ)OKshq}iAVp+FKt3O&!eXGUTHW-X?hM%|0Ihn1s!zxs1vi||m<#oC
zH)MN&U{Wy|+r2h)lwyy_#my%Bsc$<jwkpb{Qljx7aUYyOA85>5A_5OM;kzC{42Drk
zNJk4%U8ET6Pnm-<TFhOST14O0jqo-%7&cV9><9dV_MJf^2fE2U+e+;FVo{s9mrD;=
zTu<P5Ft>-%1MKDrN*>b^r-=JJJBy=j4F6+RNt4N9Gg?+{(27a}+5NKY+JlyGmO{Z>
zS~5v9^g0&E>47k7J8*4vvTMjP4&3OVKd`xd%ke5k7c>ANgfLWav at FX+mv3_LWtGVX
z*fFYDmfZ~H8Dso$HT6ko>Di{lIUYI&xOZSsj;(97+;HRLcJnB=l#!<r>S>7}v4 at j<
znL|5piGv$GO>qDDaRjPd&gEu*87`G%?-^IE4;`<v;qAfo6T)q$n5KdwPa?iMhUk84
zFzBVwlZ@=gHv=m#c3y&aW!)AQD*-FXt;$GKgDjI<oDQkbN`5jIw*hV=5mt40b_zY~
z9L_AKQ3rBsVkkHRy8*6mrnN#=+E(1T*_Fg$Iw^N<dQuL?2+lV+1YvQ<_fRd^Ap0wd
z9CTf|HFpFbat9Z|+J=C#v!o1z=8(m+=P%gwbYL?byULRNAhMy`wrDAppZ>Z7-fqqV
zNCb_OfVQDY1rTKwR6hYDmrCgNJ9*Fj_OqMTZpUOTO&X;wKf~<d^6C-jlfQBVKw~Ao
za_P33tD(mcTcn#S?DatYoorIQOXZlSnCm(TwxWhkr<{j{j}~v at b=7_BFu}inishxH
z>PvrsZm~{_OzQ0kb3Krq3(~x2toa>c at I8rtwUL!l@`FfFY at eFs=L|m7_f{9L%)&QC
zrD(4^mk*olp2OZ80#w!5MvP3IxVN6iFz|3|ZUjc)e|f3JLM_l=S`=h7g=uvR|8Mb3
zI>8c+Q~q(H-y<*5+!A?MWpg*&tLC5T=1Qe_>jeiC90!qhf6=wAk1?P{ot0Q%WZgIr
z#}Zjc?Px{3Z<D){IuPf|h^REjPcadGriDhY%7HYQ#e@~?nx&5nM2WU{`i<&EhHALv
zCQ1J~ZxQ?j4lGNy>nG1wngHr@)z<s11#7Hf^o?@@zSt(l6Q40`K1U-~#bhnqG=u)d
zC53=nV3$$mDdTf;wngdzqb0u7H$zUn<d5XKU8IiX4J!rctz3b|LfRaMptnLfv5;8W
zY=%tmWFpf<nUDpUl8*dCOa;dc&Y+yejvYQHi2Rw9k=Op`Md>XWlO;T0S%}(=kat1+
z9USjHY<=XgeN{<|rYY?(oNU9 at g*b}3x%)?fie}q?a{lqVF1<b1Q%~T*A)!S)i3+GB
zVZF&%9kI6du&CU<ne#p#{}p-maj5IrLaJDV9o7cLV&mNTU>ZCZzbP at NKTBni!{Swa
z>srN9pG`8CaP2bc7|#*yp8D2d24dTGPEuXizZBOITt027Q^zVG;6t>XVqVs5i}s2I
z;`5w5k3_<8rspFDZP|EX)IIP#BJ!-=ow=fUiK1Nk3J5>1pzX@@>C at wk105##zsR!5
zy05QE4q4DDhYf at yK_U86dV{2~;6Yc0>rZ#M!C91R6@;Iy&0Od(A5W&O8MdccMVhwQ
z%+T=|mMU@=({Sw>&QnY{s{?+xe1>T_rWAhhD!+QTcre6)c&0xD5Q(YMkmg>x9=IS%
zoyRM_hYNjCF)z{P+HN$T22=K4C%0w8Un1}>MGrVqlv~?j>;^1%c76ZTqSVe+29t1k
zjTrRt2HM!O at r+W2sVGw2y@Jh#PKAy&f**?}ISt%j*u`@{I*ZvHgWh51{lV3F@>Ak`
zwOXU;G$uRa*?L1Q&*vBGGD>JgWdPYj$6C`6$B$_T1k6VxsngxC(L5e^EFEZ85|wJo
zpN%HD7k29iOOX*4EaUR;D>G^hHa^(+ at ijf|WIdHAB}stI*PK>#C&%?!i+>)T0o01J
zBq-~7U8vFXZU?Z#)o_#=pywkHeRti1pnlmfk;O>5>0X1~RxW$GIKypH&?ZAaDaxRY
z234S;u-i4rW=&6PVcK|t>gWQ%73wX0T at 7zwt891L!eD0V1J_H`##`C|IOkoyzXH^h
zogcRD2I8;ZBBfU5rN5t291=*Gz#AO#`N=`R%p<z3HCJgosLwf5&_B#|ISo8>&>wGE
zcbY5+U1JF*!87gB9SbMy>`{`~c>kUkW9N}N^-YG^)d<FaZ=sQhaa=avW}Yj%t`1IM
zM1EDFK}jwf`TRoA%t32=CZZSCk&pPMyu3nEEu(XI==X=Un8ctUT0tt0DiqL)8ViQ0
z8pf~fH81nC-jbQ0LT9htSyj~ZbS%{i8-|I`D_b#2_EI%vL4XoBJEYu->L)l at SkDm$
z_;~!(k0zl7+)1;d*(5%aZ>b<Hh8qZY4H<Er5{<SiS0h8#c#DnV#{-5(P_TwRJ!QQm
z%K5Q$gHZ%>5mj{XV`C!whE$UYu~*fQ%U+eXmGtg;RC4p~15<OITAFkX6bH=xcdOnb
zwcDuk5VKQ+FGnz!D8cHujP&U(!Z`5qlt|#(JUtSJ|12BAA?t7zM$Zsbziyc5;cbPB
z;?ornevHaGy6|zP$`xgnBO6O~Qvq5GN0HbK+>lqXIBSed8aZE#PM88MH8Wk+x<}ZF
zu{KH$v!oY8iJ5hOEdd7B%rH<h1jS>wx1cI%0?LW(!A$B#y)7g!>Su-MKAW^(&sS{i
z_$h1PWG?5<+g+z2t`+8?RKv)12bhJl`=ZK4d8}W-4DJ{bawQ8~?Fis{wibw?BUsu!
zN<^h%FLlh~%3c?&h|SlobeW-%U4D#Q{9b0`A5TH!eL_%Rc$3J$D4+*~+1E(3mm3Sm
z63ytJwST-T%|D6(xzWDr3k+i%m_F%%mAeWk133l7ZI!)7SaE=kp{k$tjW~Z%C;8C|
zb9e#Q-oth|o7#Mwj#~1#78m8g!CM0S-*yLAIUrGnO|IsVWUpI^{E%-po?T5t%RaAq
zzGqV at uhbGw(#iqQcY}0wMdiI!BkbC-f9PaWp(3~_Q5lMNDW4PQ2U?ZjTNcvJwx5t9
z9b2V<8)KEun?Fx8h`DuR6|H#e_BYSY)n^=fP{^|D(z<QTB-4qAF=APViISrTb(DRh
zLI0Oxl^=I)AbpKcu+ at Ltq@xkP(nUXBJZ2ld8s1MsM<XT^QV9}E>FO)g-zEYA^|^t#
z&*{%*OH`1rK-O);Th5?<o9g04)^qFA&9K>1--^_VcZ0mD8*#y^i<C(V8w)mo1lVWS
z{(ogxTSZw*_;k~V)h?m4Om|A%cZ|t45|)J(yhhKL2mN`b?+LC3$@4Pky40;R=wksn
z=$k%?($2*M(H<D{bX|`H>6>EDoHgTJ-m^fqc(R^34h>z*1+f>UA$VplqnDYH`$NAs
zrg5L(Hrf&i+dlKL!Kd$jnR>Elf^~#S-VQCoXq(l04EW+Q4;rKMi))P+%es-1&egA*
zobEDg3z2z#h;vk$n at YQ<0 at T;CIG`Im>8*ZkOz3A=c)}MkM&WL?I{|Q|qH5Na^Nwc(
zM14US<QvvF+)kxnTu6z80An$SZ_hRJyKipCoM;CtwG=M%52Bo~ot1g|HIn3>YskSa
zG2As#L6Uo|O>)$x3iWbvV`_koVU(=!lro3Ci&@tQGaZ3LHf at d?w)iwn?wsEq!-4D{
zPrnX38eRhaA1|%JXv3?HcYuTi_)%q3T7lWzdo5XKJGwF39o!y*nkI);*?c7_!OI$w
z1~mXa1U64UQ~vTuyG1jL;!W`dKp;`^4N8NKwAL|<4nhnn&GuXu;;vy&l1IlpBIa}D
z?o`B|tBv#!>m6SP9xdjid<+x@#<I+&P+lBXUXUPkQqZELuYWd at E{a=2qtSvh2JMos
zQF5-Z7~=Qt#)7c4>HWQM3GYmcpwSWwefO;7cz=_x+~AdqKzC%3D)zA*sryt4B`{0_
zOliUwSKSAa4)$FkM(OJwC=1O9<(TQU^mM8LArwB`^;B(VQ)$hdS!d!S!5 at av(8ayb
z{{f|23j#H+bBgNW8$xccvD^E~|HmH_Q+TDiZopuZ!6Yz6?_6~oBOkEph&gNfw_U$+
z?&aaK9t+O`6C3OsNo_dFLOu>p8yD<$*<CcBV!$u at 1I)oq?H|(<^C7(1iR1_Jr2+k$
zP+sn=w;@|0u$il-P3wawR5=0La(*o)GHyZ_BOOHjM%2aF$S?G+;gj^SFG=Bm$nhz2
zwAz=ax9+6O*0ba1gTQjCozIQnx#c}%&J`$Yxp|0tbJ8$3XI1pB6q5yr+5Wf;t$s5H
zQXzrlXdK?VctY|-lt^2s(QQ?!VFi=F=##vzYK3YyAx9z|)sz!LfB;R;9hr2e44wD!
zIe`g5pCnszcev%#v`s2(Ic14s&O`l(lBhBpWX3NmOwCIOo!~>^#=G2Um_6Z=3A^P^
zc;w1b{qaP!9kCTBhDo4L5ghuKjTO!v6gsmQ_z|rTa_t3?(kaZ1<NsZ};FEa_P*R`4
zcs?3rS~wS(Xt+ox_#(gmPYe{sw;42h6c)rA1YuC&kdP+Kd$hu$PFPtzWBevD7&z7&
zWYgaIQt1$>JpJb9>PMr>B}y8vY6^4C0ZluXgP6cnZj|?!G0>{`tWTd%eb{Qx5w=^%
zTr!SPfEwNX;ipCwb}7=T)AW}yxXsC#BltOFWlj1N?uuQaDM%D`+ZEO9{GjWoc$|lD
z;m_~$Oq~cWR7a?Ks<*+ESLQ8WR|QUr-W8wT5x*%&;fcmcNo~7;WUtCOfoBi${R?YM
zzh~3B2BAj|qHDxlH?J5t%B5!&h>PBHA=fdPQLOi~ALX!1H(6KTYo!D}{4sN-e*x#X
zc`#9D$O?V?fs{xztz}WE4%*y8cu!tNI909Bk^aR>8+r#458Y=sFjLNkIIUO~&;w4E
z3MgJQ5vUoMb+J+=)nlCeEcAA at uQ=p$dy*bWagaP}16f at K4ZdG=t>}{Z+A++I$C|YB
z-lJrsOt3e;&U at PV`1JT#Q}2tVlnJvMkE7<;R7W=t9qc%JE#>b!a2;*Flok5wLq}bR
z0U~N=nX$rt`cK)6u}V+`K8ydRKcr)>&Uw0$@O)TI<OrhhLkHR%_4W|w>`S?)2GuWk
z=ZZXB(kzL6w?B3oId^_c#-3B+zYdFlKZLdybJcm4(GS at A+6%&g_!o`dFlYS2h$Wc7
zWmW#+vwM6Lro5)0`!6y)z at v~lofE^04Sj=;abIH&8(J=JA_{%+$c9=mklx0t_UIhl
zYtO@*d5cm^_3kVCJ@!I!otL63d)H?txtGB+l!3rBJdF+ at i{1bwCL at V?OE@|nKa!R9
zWOAcqBptP`RT<c#hTeQEz(9d?SC at UFpwiesAYu!Ig)8`Y`R-{nb5Arh%^909bCH4X
zOl<j-343V8_dap_aw<5d*IN}>-9Q1<m4gOW^;eoe?9YDpWK4_I<t40T at sOQLRfJYm
z>!CwmN#HCaQ|fL&7>POtPtl|ReM2JM!o)gVe!)F3f~lC&O8?T8?2i`zM5K}~4qW$j
zr>hr{_*2+x#tGP;efs~*`E6XACOm!+`2fS&%v5js4sf9shB&>Pe_J``Z at T(s=EfW5
z(SEnD+e&Fry*$0Z-$ul3J=<?o$F8c5L6X|wj$XO)?(dr%TsDpE8PG_|oJ;wQLiCS<
zMZZ##ij1*iSS+_(hzB7gfHX{);J7jE^mGJ)K%-UY-wKN2GVv!1Ib9QCf$m#9vRVBU
z9qsvxa*u)O!Vi8d7B2mOApv^sLgpHCuh<fSBb6-Wt8jiUO-(L+Erq9BL3;@^VvrhI
z%}(kzDUwdGV`GjcksgF|_z%#0qG?p;*Sb*yn|GCqx!l%znwhX#aW$>`;2DiouMvj&
zEc at p4@8MgV7Xuh5GL#J)G-ps3LXG^d@(b>t4Uuo9Xi>hoda05oO{zQ&pv!|}W8URK
z9Q=3(a;Wg!nzS^AT)7JpdV_^-W>|cG_WKrm`3vg%#Hv#PFVR2m!IZ+}CHTdV10JFj
zdjc?W0 at z-gBa^FO1Njfe at -|m_l{hpcl6+iAl*;5nDE%7m58AVDz%KS=5eD$*XJCoL
zt0LU@!&ko5c4)}|(o|shf7 at nDW@9?k7Ja?xceE`Fx%QM1)fYR}ZZZYQ0LRMpwT|;c
zWn=Aa)X)4!BA9zQm+G<|hl>UO?56x|JYOPn1B9MV3g6zB@&9-<8XOO7ZAE{zKH{p3
z`snf(qk!|iZj^6#&N|$xE(6*cf?t{;NeA0`SgKLRJC!tt35l4P&X1c#L^|p9>wODa
zZ>A*=!N!WJuvYS%7G4il7P3Nm*3qp2{+6?8zEPuV6df9-U2XWjIMtFw3w3 at jxS+~E
zbb~*Qa)!q6=zBl9Bd=t(aJ!z8WTkuqafLgVq5UzO83BFu>3^J?Z#2MLBjQx+1!uHo
zdb6><kyjj4*EUPpP%~PBx83w5!?|F3dfS*jF4Utqxi^&DSblcPLzQCswj(iJMHd&o
zo%S){_s*AYex&z8yYoB&dZ063<oPC9LN0A}&?D>5oNt$n!XsWo-RYCt=VOz*RxRc5
ze1W}rZEnUYc!v1+-bubIor+p}Q(b#^>$P5)YDe!gF?bCCX5D%KK(C|0n5lO0_VNz4
z!a)3{P$7;D>t&KdOA=N@^J%cXg*AjZuoIDV9Qn&iHs~kl2iDAiyg6=arEVl1xT&iK
zm*iH(2H)&PG|bwj?fA=PCoR(k7XRK(WZdnYj?hm%rU*U3BB0F_PNIRTZidTV4J!9e
zT#I4!%{Vzr^d>@5&2$=bnc4LX#W5(Dr#7^xQn{8<(9nUSU-8(pzGI0km2*HV1+u0O
zreSye1ax{-m1c0)3nzJQ$_krU!!|)8=pgg$P3bRMO}`PKb_VvxN(PH)h6p1UK6u;k
zj%n%p^gq)`Pj?-(8n%Z#{v6Q>?m>)4GR7<X at u4pdqAyl5k`T570CqEGABX8Y2liR{
zOjK=98j3GNdn-f-SG;H_*4}SlXjp^yTMeo98-Z$H$ild3hY;Nb at 9s0}pk_Gf|EYpM
zapA<E9_an!%uq(^a;3p=m at q6lc)#hzl|pqDxgrtz6z+Oh=~T6DX2@$2R|+Y<2k%{c
z<nOixsgg-Qr3So(Lh4ZS!EN|9QO|8Td4h*ze0MYPgN8Rj5|DRRo=lyYyBpCQ08(@H
zS at rJplZ}LSajDSGh!rh^=F?;ftSWdQF-qQ&bj*cdygB=r?3d9AXdkWG8y*!!0Ul{F
zJu}52x+0mx05tXebvXYhExC+Lwi!Cl-?OSnYNXObFqo6$^w;c8aX0`3vTAw?j=2jt
z(d}D{t(LZ*=ySU3cfj6Wk^Bi35^EmI&26JaZ8gDIh_L<fufIRkZnLodCKT1+`#7kg
zwM7#0{wt?z(ktw*+|Cy3gw_<$juBfGb6Vv@@=FpeWH=;Z*Dh?Ei1W?xydR-LUaWD@
zjCa+}#(zxeiC0TZwI}i>V6PW4kP4~=&2NiI=dd7Xfszdi;232nJ#Oea92ng-Ia*Az
zdmp!ZAb^^jVF*v$?I;PLpzp?lVd*ul4qBa9&lkbj{CbYHplK^}vr--3?6)HZTXw;l
z!WL(iJl~y%&iIUGpKFPdLIrRWiU5nOFddics=qV)6H%_;4yG}rFQXw_26}?|scF{G
z(NltFS$j&X8NC~dm+l}&ed68&^lQeyel+(9z$UcOFCm at H(9+LQEx%a`8~x7H&UpO?
zXli5_3w<b0k<jK!b6!<Mfb9{9)-)(tG1ZL#vp1ZfFRahdV1f>A=hh!)z*c|FMD^8d
zC}xL2m~6hk*>A*!x)~j$=ZrPm&qGJgpY^bFB(qAwpO+Oi-%xUAgz+`vHCgvK>O(i5
zUz98d<709N`pgN7sJbwV#jt*Ie4OJZmnPW|Wx|>Hre(@652HkrI|NToLSi$A6Txuy
z at 98Gbs$sgsY;}0D^BS{NK5y|wCd5k3`TnV8 at Z)G}jSvG_iGR6k{!t9EFszuy=T+$A
zPMSy18bu<Fpu;oBUMc|h(3v+yjY--G`?6jQi0r)KY*;flmPkU2Q7cr!SUPyRmNqtZ
zHdmq)NSfQk(WQqY;-68U_3 at H#JE^#2RTeUJ(^T{jP-dfC+z+(ld6E_TrYNh$L#HGN
zU2U<$Ag{~W at G+~wfm^zjkXE4!)EXnTWQcx at IIYZKVf_a#dLY$>3IG&Nbeu1TC at 7D7
zrGe)gY_r)t+*(2~#SGt%auo_2^DWoWNhvE?5CJwh5fX&Ly)Ap&y$))_mY*QrEPiN3
zf_U2?@rjL)QBt;nOL$qw^SMf36o=K2OmD`xf4(b2!_#xVo)Z{Z2$gR^fT6)Q=~y-2
z$~COMewAj<P%CZ29v86X=%r6$N>s`@$36DAIQQxdoSNg!bF3I0mVPLcxH;!iTc-uc
zqXZjt#X&VZcZ%n8PD*5-ic`9a+!rnE6uO{=)tGQ{Z#*@%5-i3oBLHMoV+o at +lxM^W
z)4GNsCf|bQmmnAnPI1co at H%D$APG7opqaadb2XH~5kDy7tA@?hcI{gqgrLyjd92i9
z_rUELC!%g2BC?7|#QTXc--C$1=$dm9;0yfY*|ksbOrr^LUnZc5Waa;S_>JeL4ni9s
z-=@G+nHLGIuWIWGy+4(}Y&&#5ez|zy>-v>gNrA%>?sv2~=2wEKaTq+c4xx5LXC6|F
ze0Jlihvf67_bK6H8sWkWSnjlfhnC|raN)4+bb#Dj%OVT*)B>2I(U6B8On&HGUiHlY
z;2`a4VxvaC6N9#<OX1_giblS#1?Nvde_e2ai`6S_!*e0Nhh)*`ctJ|Y^t~eIB>4#u
z^lYGdZ1K9FfEZ8gQ@}D-tC5bM0;z_-J<~gz{aUZMB>9V>tAVA7EDTBjRR`^yWT`@9
zH2HA^hRb(Zp|bX&x-HdD%KhPZ__;GjjMxje-iUH*GD?#2SXiA%tN4%QX183Mu}*ej
z3(r4|C3c0lXOkUT5^_t0(KXkSjNs*vBpBAnK#4cUZ>s3i)`#S$`5fpAc}{<`kJ2T*
zqmK>=tD2E;WL<H*w2LitQSDYSuP5*Nim})v2AF3aL0T89K0%n*74H*M-gq2X#{_;M
zW@|b<lYl8wt4*aqH)tphbgo)kr0DP1T4ky;x$&q({xMPkJSw`C;V=Epb|4weX<nhD
zw at L46z&4UC%aCBMX0cR`{<I!=Gu%PUJa*J?4X5z2=0(>R?Q;++EnjhU-M%rBnTpR@
z?QXM at hxl1>3yy!NRagt_nGD9Y3?Cp(!M&9lWR(Q}hh~v1cY>+B_t1T^Ji+2q1c&80
z1)|mFjheQ5RM1=e-z2*GX=XkfTETecn~EKjO88bgWy}vz4s3b(mrO`w;>O^x+7cqa
zvO*x=JNh+AT|QIr;{(x+-2xWRZ#q-1ONtTdBB#?@^a-f6#A|xd)R_Di#ZqKUT7B)F
zz{-1kHDXmy$Q;qCm3-1Hin!+U at au~nx`(-vc|&Ikn7DsQJhUR$Zv&=&P*b$hQc-&W
z^0nIn2^T!RyHvklzWqw;|2ccx150B<6ghA!GF3=%gUj7>lmH=6if)<RF|}UvSViB`
z<W(_)&~f$x at 8TUy5=*v}6fuOv+4OQx(LX(2<XJx{^9nyAudQ3ezm86c$&ZEy?i#K2
zM1M*W)Aivei%?F#nz?=hEn=GtjZy;I`tuaqH67 at GYm})HrU?3qvhAO at ff(!lZiv+j
zgi*(qYpHhgP2cyjduxclDbswkCOl3>BV*fo8t~7qB^j)N9gK_LNQFsFZwC)3N+nFI
zaW^YEG0LJ_RCAsZ9G%bt;(fYk+HTB%g5cstc^K?9gNXTjsiyI+*Jw_bPX8eYx!qau
zE{O4G%zSU)q<-y2v{lK~CreZw3BOikWYOU$*Yx61olI{MlC=Z>@6r?C5||}tL$j9!
z)SSd$J`wTfQ+<;cNu|8`t|E1*DgVa69TVGiQ1kDIYSN11ly~C{)y%_7bt7H~peAG%
z4BNlV{2hRiH?dw1pqS#hX_2`UuwGfHgc<J%JT_$Fc#1Em(d_KI|DyvIJYK>Kk|msl
z95&#e4+!L%K^CxI<*aqOjZDc$nca(Em5WB5n3R+ at mZcI6cum!J^l9xOz0DJYGy209
z{H3%!nu6VUGJoD8D?4-x+e7duJg<S3Ixi~EO at +g{<o~r)nLTVUzwYo&nQa*N&iRD8
zQc;8?s)cI@>K;TO*Hj*m4HmY?Vq?uu`zp at CGh-Me;<=>hKmeyhvCMosSos%A*qNz;
zo6dl`qHO86M^?w1-|zj~ydBI+GtxRopvJe&ig^4PPVTMs2k6E<(J->#- at U14uz_2_
z=y5awSZ62fu=tf422U;AYd_et2&ny`C=Ju(55sv{y%Rm<x{;+iEkL{+D1tJ<eil3Y
zv0c|tQI;D4m)eA=+C`c5L=9c~)RuZF^<Rsh>#O^+V5rYMfv}|ojZ*8^p16;=NlgDr
z?{7_&7qVre1fUktDN>NpfH{a7Pvtx-v#8rhV0C5k6oz6(V%DoEOSy;7G#gN#?~dX_
zlXre#JGFE6=vN7swTEi)cx)g`!Mz#2xm|h^XSP at rhHPuyw94j@indG6F^rlqAYy8+
z^$rT4qd{6D*yf4i+*_^zK+`twNQS=HApe^bU@%fX{p2cx{N%mO(<j^a-puw5evjUH
zXn&VtZgR at yFlCtsMF2Anr9b_`&s at UH1&vNjE!>hZ012M=LDH8GqHRIyPT{-jCz92%
zUgbN}=U at EwF$l;fKa!lE)IUHY7N$fRRlG98ja~zqL5W?aL;kFWOVF|6Pa`Zp(Y)uQ
zlnm2N%U{5GVZ|UI#sc&&an`wrL{CoP5vZ`hDD`_o((RDL!=X;HBcNtx<;ZFcT8rg4
zw<PWnvdT5*w{X$$VYI1U^LAy_yg2jJnw&F-e1#!w=qJrvDscQ0^*7Uwr7P^Ktg6Ji
zK0Pb#v<cI5N8RP!;!fUUtHOVNR@=?1=JIv-pYa-wE#zS*G>RQp;|P0KNyfUO=zyQM
zep}riibYZ#vR$&`LcGYAZ&5+_kgWG}mqkk)19q)zDK~UJ%-b!CMjP89Pc&J!kS|Bw
zab?A~wOQ)Hzuh};O@!uco0M5mBUC~aOZ7+z=Aijk^9F(6Da}d5j?LEV&@golkc3{Y
zQlHs7)py&r-=<9;__CeAr~S4khWkMJ>CYgQ$*y)5#%M$;6fV3nqc#jPuCg?l)h+8Q
zJ7xC}FRT8ChEPzcEZ`O6{q*FP7(PYG^ZD947J6kiQ%z{MgiyquWMQwmtJB4yw|oLe
zeC{CgI8Huo#~om!tb`>qJVYq(4PQ6{o><y9l1=E*@>-|JW~Il2KN at v8vKUi}9<ym*
z1?9NeiM&R!TlX7VC;q#{oVaTNWbrueNn_f~RZwmj_`+m*M{pqo{RrR#1geILfG!|v
zdCIZMDe|8}gc=23zr?+ULAFD;(wDD?rO~rxI=Kfsiu4&>toj3 at 3pRA$zlWlcg)pIB
z_=%GST~Y2C$5jWHjmW^WK74kk+COv%gcJvTrZY&Y^-<v(biKc}^xV?#4dRRRZugdW
z(IcBRt~7%XDaJ?#Pfb)zkzID*lFz-i*LabK$u;MW&8Lt7sgxbuuH5Ad-4+g!T&^K5
ze+6d|3o4qF-T9SzuKIwrhl+59qu%=|PG8}dhPMd5PVUg+0r*5Z;Bk_B1aouY;k3z$
zw&o=J5sb0$QJdH4qaj9Hoy-pJ3QvnD(6@(BaHiX!PE$rOX%LVj*HnKRc(7=#0s-c{
zLU7?nnuxI;BORULg2dFiZ)Nrj<YfJ81IojO+b&D$1ms=jLi<7u$kJRF at gm_;8g!$H
zB`9|*QkqG^fZi at X{{;6yY2v4NQD?e`MM0SuP|15nz<W$D5mF6NF4cTKcT$8mLx-wr
z+-}BKxZa1kfoOvX-sp|Twa(E1w=0{ob?e0=jB%)mriw=r`&Xqe)SJWNPyEsbm}k1I
zb^B7fK>BRofZ8)JQHJw3ei}F!Q6yn~v5R8fAlQR75*?rNFoB@`FQ#fFt`r~*Z)~|D
zWQ7mhgZ^}OmHS_;Y|CcBaH?o!Bm2CRjc7m^DCEXJ?X-MeiB4)_9EY|uWwSAnJLl`M
z;DG-8;V^WMPwAW-_sPkw6m(cO+Gf=a&j%Pxmu~17VG-?EI~l`REN1q#q(l26<^@b8
zQHYisT37Z^<;&2(@<!%QtJ~n0+MMJ0C{pUkZ*gPpI{VML#X^~%EJ<9X>RRxp)(!m_
zhf+UR0h>V5J_C5mzM4>{d=+Q%0r9;Ew%j(cEQoKzW|0u*T}#GGKN{dqT~r=S8`Hs1
zOT_Cd_G)&S*5<dmRPNK at 3EEF#d`c5*fZqTXWJ~9NgF2{EgM?s4D~G>#x?-~1pVwKl
zh-Pb>XjO4*9WZEBSsM2Jlnt;DPRZ$P@^*~<kqvb|-637WYcQ_tq7^)_Tr3i3Y|M1f
zH2*aZP}n?L=*H(Pg#EMgHK^>nBkqU4fUU)6vH2oJHSrlXp9b&s$%IGOT~N0(PaMw^
z?E|Fd at 8XeYt)t&0Atm!`%tFwdvH|LR(Dgu=qArTs7Tk{VU1C5t$xG!RSv+6Jx7X2B
zg8z2^q!v4Oq48wCOFGdZRJQsY>{h|}EPC&e#^E%HYWzW8r8~?iR0S|BKGvOKBh#}p
zL(Rchj!4L7&EkuG9eSg}(%n%W1<-}b7H$%~0Z4RLJfa;J9sJ9IX5e-5F00aVG$E3{
zAEnkLc}Tyx<@o4Vx4%gBS%lJ{S&hJTjzbt8b-*oCWM at tlZNJhXENPV)D{4M&!;Sw%
zU~{jTep2p<R^$Itgn5ZhuCBZ^?!hmeL!19d1q6K0ok&wr>R^qFH?U&l9J#zkB8po4
zuyzm!BA$2_-MMaDw#d7fTZU%E1i?3sigW&LWOG2MNV&)|$D`f>EGzze2qCE5vEl^=
z(t8)J!-u{Pt{%mgfd8~(5~)$E9nds}G|symom(nYJ~t<FWCu#t=j6;7(>pjY4vL%{
zGufzX>mYU1$I6Ie$QnjjM)%nK`mYo+_7PAmK%hW&QZHy%wX(+t<|WqitzI*;*J`SS
zFOS75q-2Cpw0iY8?I(u9&LxnO5oeZ1uqKC(MJP9CVtc$gqQ(SrCal51GM}GZd7XIj
zmV=%kQ1XJe%uA at WJheoEkKpc`_f`Hfq)-P-Dr2Gc%hv{xv#Df<+Y>DvM%MmOP1gw+
z0lfMr*#zhhk)2Sz_!a2qX)M<6Ge&}o6Hl0sT?v*p)u^z%o at QSK=v7I?T7J3e?p-UZ
zGn~Y-{|E1i`3az||6LTgY^qm5qp7bR8T0+dz!W~wd--+6P~}~fHGZ5kX+FqNn1M2X
zHxSa`fii0YY)sKTR>L5}G27eoQ)ESx{=95&oczQGjVDJ9D~F>A@$9;i5~#fGQ2J`s
z at z#+KUltjB-W_q&4ds*mUmb{vt8?&uTS7hv54W{LJy%4EPV(!vSBEttThLOL3%P7a
zYk-w;o5#&H|H at 85M2GWHJ_Mc~0%EI3qYz`exkO2RHZL`QZ4UoYe_TwZV;K0t0_Wf)
z4^|gR({{8Dw12}K>yl3DyjiU+-N5eASr^~S^qsJrRCv=S61+kX?MWp2OxLcs{pS&#
z)k9<(ZejXeqY6Jr3)TBls}->)Ju)VFk|)&r_e7)$_L!C*HWpY!rRjzj;SJwG=GDP|
z16eL=+^yORZVGfQSI1kHQ9KoioUrl#${c`^1-|}f(!OqbQaE3POT#p2{EP7}?qO^2
zbCcXez!Hv~xR+#Mb_1RK(Ca6o_cxzOiX!{$`|LT5M};iEg}s_ul9srw^Bj!6AfkWP
z^F*5*mQXI`f(hoCq99hQTP2#@8Egt*Z2a7t^Q6>D)rpKPw+{3c_13JA0%hsMqrAE=
z);J#0r0K`*!9v?co<Zu|B=Z%+6Zt4dXK=t*3k=>va3|=nj2yaP!nk5OL1=9ikn%vK
zn~BZj?Bi+Ypircz8DzOXBRZ0!x1vBFpe7XOoM(Ib#e<+2Wb;y~PoJ)%wQKbL@|rnp
zwH#KV9WX2kW-&wn#yzU}lSbPZc;&cLeNOr at MRO!W^ACazg&e0%v(#JFTMFBwbXZ`|
z at bOn`B=0Le)<e1lS#u4(YOLMl^;GA{yehWl+$KK%j>+Vf0oSkzxFQ@>#)3YX3&8)X
zo+<hfF9ve61y)V-Mz=rfZ0%0#Xr<dWsJa7G3?=6D#=jmzH7%@;zDsNRhelRta}})T
z at _N<Zz4 at Q~uTivFk9>0pLo#p4B4<vMB!TFu!iaO5a}=mpWrBV+nu87^YWc1|gS%*_
zOQD{+Yct<S<- at bzFKB<Z3$L1^G!|imRVz{+i$k3?NAv1g1)AcE6!||D9iKRxc|+z0
zhu|P~skF?;tTh;&Pp>aY&Qi7qRG*UUy%(0Qj!Nfx*E0DinWn;{sZCR+pI?AZheSq{
zO5z}G^7b+^8NoUYl*-VHVQI2b<bGpxxm@;R_!Om~3O~3P*h~Gm+#gKp(>d-&D}j^{
zg%u8u at P_5@Ys&qU1rbmF at ZsEP9l$%GrGQYB^RtDX42^C_Lwf*Jr`_b4en<a$P5260
zO3K#UbDkh-9EYf3sPDBDTy9D1A%w{b?G9b$XTOjsB$Ek&z~pm5_Z-**tk8%!&C;Sj
z5ru!U%mnR$C@^3Yt)IXVDfG>f*L?Gh_uNM-g15?NPe4d7wo-f*x-o=XY$+vBAqx6$
zN$^?kZm0irUNsz+TG+vo{7t3nvhhZ at XyXnt|CgE)prr(WmDYG5D|z0pK-K}aUpsAZ
zpho%catxlejo!23-(AXC#BMZL^H>(WkdB#0kqeL6^7SfDii(G)GxLUSm<TWUC(&M2
zZ5?CEKk_+d9qpad&uyv_91T824kTy-e|zpnjB#&j<tEIso?ogyk5|^CuFl6<^k{5s
zhPWrFoI0DoMzz_C>8fKPG<afq$*pIp^=jIpSD{ScKr{d*;4ZfGE1rP*yvR6D?!059
zUv(g#pW?5j=FotZ+@`iW>>Xu9|4CPukiQUIRGib`Q1G<WdWob?(#g at _73sH+B!8v_
zioc~R-1IcvQLpes;{PboP{?mK5(xWYYF5BDi~Ww~UO at QF`H*0~Tz~Xrpcn%RIm45N
z&zfMjq32?azc*erm0dpA&0Vfn>5DnVg#+K(WeJSVRR<~fS^%fmgEFb_oapaANoV+m
zakC_jmwG2Q>;qL8z;S*glW>rNQ0P at d{ZOzipR^GtNzD3q+^wQue&F%UfWcJGsyvvZ
zXK{}f at A*u-?)Mz_EoSe%V~F1{?){rLDDU_1=25>x1;Um1P5qigUYCUm`7e_ at i|>Je
zZ$fYe?z2P4|1VF{<xhc22+!}Kbto<J4rs|~YxqRD)v2ep^JlhLK9l#y*El!w(@`lX
zh$}%s4~b)E8^5$TBD}~BIB2vb3LSLyZEOU$GrY4^K6;H)!+x01)^BB33feg)Hm)^{
zDZSpdGvkY_%PlY&Cxe$jP?}Uy>|`QO<#M}cQg-B@(nBzG3WH1T<Zf=@VxO$5C_%@o
z1M0g5sxuko#ig}-;EMy(=m8d)%1^4 at 21z&#B7H2*^EkW`tE|ES2({+3BWgy0&?4#l
zmcWZ_PQH+iX|R%6Z63m75DnFYWnI?<%7Rw)-YjU81FcB)hM2b3C=?=>5{vnrvkUv^
zy;Cq*y=5G4)4c##Obyy>M1ZLKKZr6gkfEKL<?MkiW*K8Meairy(5QQqFo+)p9zIzN
z0kAzeYT&LDH!4m`S}@N5OF*>0W7vL{9Z at Swy>*L*asIYdw`ZJIakeIXV4j+FXm2a`
z?zA~ZV!N0w-xXx@*sQfBxuRo}!FObHLBc$Q-3hsj4xjw at kUP4Bk2!sRRO+amwL%hx
zeJ(m#LfRv4A>UCKG6PG>_&8fNAfM<j9R{jw?@Iz3r2q2K)qRO(6`k9UPbZ?OkF>aG
z+82sQwflr>sKI!aGMT-{Z|<9F^i#}5^SWtMja|yLxqJJQf=c*O4W!b+L0|B+Tm4b9
zl~*qC%n3ZZT^aM0Ej~jZXlEx)($jw<i>9qj0&-|=v&sC$*a;A1IH>J;jPfS at GY7hb
z&qW4y4|Jq1o0g~EoQkX)4hW;SUAWWNH4A4A^_uf|78j|hnoe1y<UUomT2+!m1b#p)
zAv#YdDaQlZS^*Dzh5OwnBPdbUM3mQH5a&0D at +TJ!yXSC4Qc=%b0wBCJSWRsnR at S7>
zgqmKgdBZ;?)I&n3#!^`QaQII;i1P85etyx3N^`g=V<y0wv#0S&n*j*3beB~T(dE4;
zxKAM}Nix)rJ)2U!a&4={nYkqVL at aQcnQ}1TyOBiq at _-u)x|PA4;}@2ci|IPX)(2vz
zI^eg2S~Z*)HFBOpcT at mm(|?c>1YP{N*hqg9OuDzo=|C#?Xh;o&AqW`>HXwZ}nue{4
z6Srzfr*CwlDc@~5l%$)Y5~jRhBB*N1_%whtOC<QYYgX3LF8ov}BwL2?`D(B<{7EJQ
z0{b^gb-=bR_n)zX*pQ`jB~}yBby?Ww(};s@*S7V20p10X0aN80Wl%83t}78YlF;hj
zOS0<?h+}xr{4}%XJYESAlIwA+7Gfwd8%LJ|*cnwYZ-tn*w<*eVgy3^xY&ec|B780c
z1<%tSekhwtMydJo78QM$Puz;#r1l>(bHGNWG)Bbp8YEDoU_ at 1V9{i&7Xr8>BOjx%f
zNjq7jL!pwsRQwr<JcZs?6l)EYX{uh+oapjXlv3>f)ml2XRLQQ1x~leR|2?Tgy6P*O
zFkM+T0C=AQkr3@$6ME*|n)W_%LK)2k!>NGPD_g-&{YZHCDf at 7jK0xu78SqO#TE+Vp
zOSM=8mE74 at aL*;rxgACM7!hDd%@A?ik$Q$ENq1peNln+7Hf}nzl#<yatNo-LVWD6w
zo!!u^VVLPe$Cd at ua(N2nNKLjVou|16h)t^6i<-DcPBlGC%HAA=#v5a_;e29kt)1NH
z9vn*3!0Rx2f;Rxdj(a5F8{|md`o-?ijz%NxE|V~8-CHzbCkp_KPsa|GhUACxX^Hpf
zrokGZ;6x{YsCvJ$&l#Ld<iB4C27H~mImi=Gmnx}kYGyZaX5u;&+!3hTeC5cxbzh1=
zVr=M!5Zi1kY~PY2`%!!&ju5F50Kq~ir-OaThHkWvgdj5bw~p*}rT`oBoe(uN*BV(y
zkei4xaJq*T<na~&ikls4c};3A@*Zs}zIr=$&J6*}Aa~=nd+N$kRznT|=HT*W%<@%*
zg!Rn`)3d{SMSR6VZ+VoBznPidNYc at 8ZQ$hVo{@vFS~NIxPrTo#-D`wV!BVdyI5J6K
znf0TB<R=Vy0CscJo!B+}ulJ?A`Jh3zaXa$;QU`sAFB}t<4nxd0OyWRxrCxAC46N6J
zoV)o23k?#=&5N}CCo^P#mJ8=(z#JV|mK*T1w;>-Ph%n<@`eG8{C9dc~?hEm?i}w9&
zL0)~0<IpvR8=<0;i*j?~#X-;5a%8{fmL5?}M4V at Yj|PUZ1cMQ+00V;%KUi`cy^N^>
z;A~TO;618GRAq~lWp at tL$6oRkOY$8Nl&SNcgGmvtNChdovAV$Pa#3FogC`YOfuans
zj#we^&fNi}E*uA5z5cHcC>Q&eY9bM at -iaCJE@9U(nO<6OSmQ8cdi+|hGOIUG*n_Zt
zCTJLA3I>8&$Pi~I^)v<gs0GSC<VKSFL#8Y*ysFqeenkqBnZSUO4MG}gR)B9-OJ2N=
zM at OzhYVHl@1$A}4<?9SGG?DB`Hy46xO#i259FGH2eI(&piF}VVQogn&eak}=enj6A
z*x$+6m5VR=H)0+5ufkQzm=QoSs at 9W##(HRi0Hz7W$!3la_h)|81qHLPm`ut9BIdPt
z|34va;Sc^Aoe%xiu*N&-;iU);8rxZb(A;3N+tfc-lK>XU1|AESr0+i9Eo?&<=*kZH
zk4~lh9csS*gN5;|Zn<tshe$7jy4RpEl~a)d$*8Z%Pa|<>r)yyJhF`qB>9`ad>vv9E
z&c@)W2<=ad1P_0ZcZs#1>B!rd%quiXrha?{CEhBgO;$omu$P5q82Z{Mf#(<(Sww`d
ztJ8;}#ymL2OX$Ak;*vpn0wsCJ{p#QPcR8$ge97mIxJ>L3gvZ$K?057IdaTvVoyuA@
z3=KQ8rp{5ZCFhL9<WLFi(AQK!4i-~7b4WPrs`sg+l8t(pZ3Rb`8Ye4(Of(>|dj0?{
zob}?(o!nk)J>s#(9P;t$S+xYG)I%p|RfzyB4cvXXL{aKVS^e7G-A3&YJt`TJ5}C<P
z>3el!V09AWjhJCaZVh*9_=+B)b1tV=w8T at N+C>%(f4j{B==u2kjH4OJ_WTqIi9<7Z
zrtOYf6_G7^j{cQ*CbQCRxNiln?M0Op_+&*AxqkQi;Z*ywUg{(YE9(EIe9H$UHQJRh
z&bqtGJ5dfO-ShyH{Cgwgj*u`*ieJS at qf1a;(OXMEo)rlz#P#*RZX9`Z5-IOv^U=5Q
zNt?YEVC-fcSyBEeuO9ABvc9;7Rxis{iJ+6a7qErc_NBnAJsVT-Pl1q>@_)NG(+6jq
z4vZ8)fu8!>3w}GG5p;*GksY3!dm}`1*d-?}=zE00sjN(K!iL=*dJED5g?||snq7nE
zQh6b0;sO6!XlsvF8*LWHlbUP4p?oMJO2Hum0LIB$_`~6FlpHo3K_^ZWAzx{bXagQd
ztEBPF+z-Dap3;%bnO8%7K%xInNE{yp{ZZ+bJ%5W;&HU0noCMldL$v}qealif#XvdS
zdU6r0y8laL`1SNfGL=~k>1M}inSgR!5`>MDTuP`I$YR6f>={2ve?b>JyMurG=UWy4
znUG7XGh&k}=IjpC%2XSyFsim6ZhM7f#}C%C(5ETP)Gr*kxd(!HO#C#M`E;BB0pfno
zIs*3yDii@)9TMKHf08B!0PTjTqZEJ!sb~ZF;o9a)c99OtoeczuS8=bA3keLJ52d&i
ziLaZn>P|l(fe*6TN7^F}YD*9mqA*!&A4)I3lJ(uc$dyZPRX+uCG(a;4WqXvXm1x(r
z#*P^L@{jj9wrxhNR-3NqdF$f!CHFF55Z#E{6#BX=!qx#0+MkB)o~@sYUv?RWoqK1?
zKp5Ds?D%s<1c-M8ryV+d!)Bujfq8T3=+LH{s#8<z)h}3NDfbN}z6(I)fcSky)a4+4
zwO`{6Zvns_u8fE&_aJs|08s`t<FOWcO_IfbRW+z2a4Ti*ApQP!5n=89U82Z&T&au;
z&)Z*5%pXDJ?yA45H%g{px!pY<XL5FEq4UK#tYP1b<BcE=Tc1_5!N&=r>l2=Io*6}_
z9$pbva0f0+7Vk3xBlB46iMQ}>!HoTk?kfeH8NX_)<(9WwQ0(0caB_Dscw;sKNei%g
zwCqN8MfcOxzG2@))F>_}gFwI~a)<9mI+#m?sJjXM6_i~G=IT5N9~*27=T_mM*FXer
z#;fJx!_T#dM-7x5)k%{;ih$lx<ukCg3-b=nqdP(zpEA-$c3}E^6xYUP-AmZCm!|Hr
z7C=dy&z@@?ygjWg;a6<c`+!gp at o2*<Q6lCauu_yJ;)Sp39-|jEqKc;EPY$b2x_x5%
z<ms${6)8}>ekWMs4M~P1=+r)j{;-9cVl}^NJaDI{n!Fvq{-7LnAS<D|@{De91GvSU
zpYW8NY{J7ej?Nxb4H&b}{%X)<IX|lvL+ at mwL(2JQ3N4 at lT%nyd7PutvoXJ7YAI%6>
zfhMDALj1?p!ogK);u*iTSN!H0bbt22nrd<Gq=A8H4Zz$hT5+dqg~_TnLUhF>=pSEe
zEwR??kR{-vBu(n8k;+o$r(A|dcbFQ;={3AfvEwGqp|J*>`UTmTzX50XaFB5ETL1WG
zE!6`GAV3Osjz(vv(6*Kl)8Fd>T7s2uzt~Lc(7Ut*v$hw+-9=Y#@-lSfzE>t3h`@~R
zPhv1eQS6d}3-93A at F7E$%v>dPuG)0J#;n8VO at +I5F8K7ZQw$I at l6gW+Th&~3%{9Wl
zkGQ#vn%?gfWzVBTH#^CJy>uL+=cV5rBgn+Av?Y(I&`_F8Go~Mzf=x1Y%E1_9-?&M3
zt<A9s!M+i<N&y!wyDIXrtTVH$RTBu(<6-!jpf8I9Xh}5UX7uu3-s3e&I;3^V4>;X{
zj7g<c6Hqje0v^nHv|pKCQ`W{gkh6Kx9RnkhN2}FXp_#t_3o63CK6zS$wd6|%N{yIX
zIpGnBo1H#=Bg8^)$-nm8PGgSH2YbX+KzACilm3X|u=yHc>aPIn^EIrgot36gMX=xR
zv6C&Vpy85GV^%Azc4!9@<!m$v!HCXJR_*Qvay*Uyfg$vxEb%!uV^FFQdWFtX782er
zqyh>O8Tl0;7ZFf;ytVPwU{H5)G?W3CI@?R=8ST>Vf>7f_PS9h3u=n$SRt#R-&Pfqp
z%Tkt9Vq={bvNS{XHg%|5|6ZF-QQz0VP54 at Q;qKu;v;R8ry#1|Od@%7aHxY!Sacv!Q
zhzFrQvKMK=fj1;Sr?|s>;TIV5EAm;vX`KI1 at dOTNaCI0M1zqO)Ybw5W0DBt|0#I!(
zO?rOn89YUFO(!3MRn0-TQg5Wg?Fr9vEXc5hIU4aFOt>Vd;xiT~LT64;SIu at Rrw0dX
zKkTHbIhmh+Z}nzY6Uf&)$$Uk#vLBB>>Td9>LWKeT!AhA&pZ7Y`ln*>8a07+(sACB;
z3Dg-bA<_t;g;dD)vbY5Nf1)(cysz>FgRYU2yfVO5rt{PI+qXMWBbPrxqF=gvV|Rf!
zcd(C~^+LtzT!dL%N&E&>m7h3NxH(EpqG~|9Un_ZJph(qp9DqDK7N5#NKgmCjVC8Hl
zq{n)4v2?A+evM$P(N*RRRTyKU;o<qJ&C%M at DofkJ{w{l}R5|fIb7ot?OVkP(&|+v@
z%z3b?xC26AwCVa}p%k8hF{Y at 6lq<l7FlMn^P(%YnR&-ZGB=6`N)~xHerYy1G(%N!R
zXwj`x4JM_cO)Z68Y5 at gXd-w>;Dk#R~ErNl at FRHgCx_1hSpn<Ec_`jU46{q_wd-Vyp
z`K8GbJu+cURqBlf9=YoXL8aSzf8TAo_(=x at s_~Gx=XNls=u<+wR+bd07FdRZGxRGT
zFj at MTV6i0R(f+CF!-G&3fHPv;54la>Z5w{7z!0|-(xqR at K~JuCc*~dG`9gIPsst}t
zG<~6s;Dqs+0t6=<Lhvbm at LZ~<^4%THsab>9fxQ at pSz-XkwMYK}yx0T*;w$|!Zs=)y
zbipC_JYMRYZo`x?-kjCx$B3J|WP9~rUvfO-PiO+9>aUH2{-gSa6E>ft>G7GVYc_fk
z|GlRsTUS?Pz4eoOPVy4UwD!%L#q{WR_%K7h*WYZpuL<eTeRAp(yQspfXk4hgXVPt_
zzKo&7nIjnt%8xlXhK%^y)gWR+;w<&>6Zc0!FQei2gTqBMt!m<RK>=&^U*iO8hy1gC
za-~YS9g}H9>zph%x%Ah88yPgFRJ_%5D*T?xF$6<Gz9B{GDHO4c8a2)xa_p`O^%!No
z#GMoe?7h__!nftpA%7&E{*g*r;4$}+>)(&$sQbLP6M&;cJIN|{K5VDJ=XFV@{fwgb
z5;PKCu?{QpG}8!Pv>D?fyDnJgSuwO2o`DJL=oy`nhpy|>s=$UTb{t{q>EZxQmw0%y
zz(^+y(J;#C2N|A>r-QM^rPD+zDt+#EIEnhh&o{O$xrI(W`+Lv??=0 at Sv+wcd??#{r
z1HwT60Sv732da|JUPPbQK;v_K^rFG}Eno1Kv2Xx760I+PeIPYGT2Hyn3RN*br3#E8
zBz%|VO&=T at 6)O1wM^=OQT@?3qI8I`YgRGmlaJ&{pr^`y;7!WaRukaSJ+x at FnmwE@+
zIJ6?N>h?zUs=~QdAm|^9;rnSkgOGNl0!Ed7Rt;^2$bbSQ><oGj$a&b_(TW<Q3k;k)
zGENZ>z_qBR<Yq7JEucmGIDM4R!OMv$PQa4tZN&qQTZq9D_G(VFR^!fHW;G64)Pb~|
z?g?%5k<BEQPb6t5p~i;=;t^vCQ2@%1erqgdtye#RZZ7WyX at yE`>Uaq={cr=E-h9fv
z_-vlYx)Yg>ny5kg47Sdf8f&pFuAE6)xBfJIWGJH2GZzj22VX*+>$3H+S at m%%kwkF(
zF?tWtf6*dadVUqM7`wh&KgT%411xxXS;D3Q;)ZgZc{FmUQ7h&pQJt7 at kxD%ct79Zt
zXI!B?B4dOgmi)n at vF{q(3S9*vJ&82~*==|gmg{Mmq5LVmCra^sx*?IGj<|HiG31=3
zOy;!_C6;CrrIQQHUOC9e7W#ixnE<qKy(-Z8<G|8Lb<1k;r)g8Mbf!tjWr&yvbtdq^
zIlhq_#`CWn+x4t~Q_VbTT@<0W9pTBYH-P*JfI)O;K_?k5RtYM0dS81W(c^Uhb2gk3
zpcHcB=>Fji^e+1v^1*U`Gzq>K8oJa~pL=dQ-B6<98TxO at ER)MRv!&YZ)~`yZ6 at ymf
zXtbT+#wXegC^CU9$QPmHG2C9_F_EI~r6a;(8;&74P9lM9FO^lh^6X~2AuaIj_E#W+
zaD6n#|EaL+!bbD=m>yybf$TrP3~!_Snun=YE;rm9X~{GVfugyU$pDrM5>~eCchWFk
zs4(Rd9p)`J)md>9+(bULIp?lJ>?usRs>H2Mk2C;$sz+flfkZ=LcP{?k0rUfAm6vWO
zuh0c)wtfX>LR`6pbkSG&OR>xs9oi<2r4$|FjnaZxt_Evh^!j73FxT at Y>>wBZ_!PNK
zl~ZHBTR)N#MrLK)?Sb1)e$LI$d&ScHeMXUU>t}%bP=a at oe2ZP9HU2dI1;1kjH&1XZ
zOd7kT++li(4wr_- at M2Qajd$tBI8qfxs at R{g6)u&Vz{y!r7_&XSP#$2?6Z<@iu8C~N
z&@p at b;K&$=U_qPI)7xGnAIqb at iZE#kXhIpMdK33lt^G6R*_;S0Ov>*xwx4x1!9#RP
z1=UKOpMcyhA&=jZ>%Dh&yX*<hc9vulhD@@OXTIZ)%!DEMztgC=U`t|u)-FX|f4u$Q
z=!G1 at 1Kcb7RM}tqy~M{MO4~|&mV^#`)L%tl)jKNJHEDbpy{mEg6<Uww+^!-@$x0?}
zS<9V{+ej{?=M^m<dCj8~7)2uW&%CTe&i)4uY2_n^kkku<u3EQ$aJ8O0`{+nEJVj<R
zQ^%;eH?L7==CMeOo}W at l&YEG2gsHzzzVe;CyVpw|sQN#HSczh1JaNt{`yay|gg)Dd
z8R#ahEu=dDiMk?0x*IGd?jrJx<POzAnP0?taWRCmc<;uaiWvQ(@*h4KT$efAf4D&%
zO+7<J<j at 3!v3mwz#^AFIG=S~yTrT+)k>oWQG=ACy{00EU<P+Ro>n=KWn&OMcG+nOC
zoDu?JCy&yT3=;XLAbb7XX%N{SJllyGot1F)&N-ltG0y!2Ioc}{?dowq at aE(fm`c~C
z)=;caatw^IL^mKQpF@&J82=FBhnA7Gnab&x2ECPBmdu*u?ye`=JxX2x50;LkZPNUW
z=@b~pO>Nv1l-)CBXsqWTfyN>{dn1(-?GFbEQ065eS(TlijJ{HdmRS5wY--jJk}{;>
z?S-f2l at 3&CDd7vMTCagz;-3~!C<GYA<lQcub~{}|&%a{Ig<GwY0UNt#hQO&v#ZbrK
zlMlG++YVp6mq;*2qkXM0=orLqF-&l&;P>|<9X^o at iI}hs at W=xw$Ak68 at pYC%N^ZqG
zi_)G#$@p>vhPrzzLrt1zMdg_-)d2BlW+-CWGQ3`q$BX<V6_m$4dTyH&n?7QG8Qep<
zsJrHgUNQU1$kcs^FrT1ldg}>_SVNTPRSOy2JNF;)U!h>8j_?aDNz~l~^+jQE6~xR#
z?6-8HeKHXBEftITfD<9+;?k#oUH}NCrXi?;P)(tc%L{F{{1hFi09!S4u^{Ncw58Y;
zX<hvo6t6+nq*`|5=_=Qh(7K)Mq#XYCQyD9x2lPts5EQCWC{FEF0~0a|_f~U{%CyCl
zzRI1ynN-he>l#MqR9(- at jxOc*_I32C>}=nwwMSKM(yq_(?(5VImq?>t#1b4(3bON;
z#X&9wHhyN<sOR*;Qtn$I7hfSkz(|=a>$_Maze;@z(hufM=eZrKq<4XIA}1apqXQ<O
zUhZf&o_HR4=E|fB51V)m`+eY7)jb>S!xj}6<wX;#loSffO$=qh<}4Ig^ageWwZ4aJ
zI1YJx7Btk>*$r1;91Cn!>8=#{<5?*hd3FPj$Q6zrWgS)era5!g0l?f`*trwPW`%I0
z+?Z!0<<nQyZ}{Vp-4osCf_Wc`Gg!cc>XL<3EQ8SK--ymZh6C%Q|MH&VR+)4{G97#C
z;H}_*yuN*=<)XBj9C6;L;uSW5QF2e~PHNro;;cy}eU8;ENr$^LD)hQud!sL;`SWkV
zc3GNm3lWQq_OH4l7Z7S0g4O at DQ*gE$r+L_&foNR*?cdYI(vCWT&bchn|7WY6L_E9d
z!O)i?PTVvxy9!A&=1X+2Mxm_B-A!Ev`hoJ9+n`x00TL6w!EI*wZlIaQKzYG8v8LS8
zb)uLYKhTHX{_3X|r8v5 at HE~PV%huJ>kHYiDNXRa6u)ewKeBvh^PpfGN41^Hl{9JDg
zO9A*wye$=}7KHdu3DM^swe7Q*Cct;ZmpsvCxw?g)n!lT=Mazy1w_<NK at L~bD0Q;t6
zixUN>g998v1<y5M=wpu7LPyCcu+_u5uXhJIGb^}HaFe8)i0f1^&l0zf1rhyKf@^59
z@&2#LKKK at R@`SU3)0x)N<}m7^b&0V<JaO at a(x{mo4X;o0I32kY<Dim7&4U50R(xnl
zyu)*pe0U?WC&EEc!A{Y-x5zA<4a*W4t9v5PYo8(z943e$C(_r%`CW)X6miI8y*MWy
zm5s4JpD9>&*OEmpYf^V8tkR9@)>@Zl{|K5)wfWea(?*MUGTx*Dlk8di^mIm9LH at _-
z4+89z08dF8h~Mk)RpJLl?I6wsA7fHG2Wk78qBc<!e$>`ZJAAthJ^r+-rfn-d4d<Ev
zh3w<eiaz at OJWG8ufL0<rXY;Kngxa3%#)w%~RcnTV<NYiT-xnHqdnt$3EKOBw^^jrw
zF{A~dRsTM7H6Oqp&(qNbN%c*kjbTNGul8p`%-kS5V~NN*;@5o3RoPjqg`Vrl?1r$6
zARY#+<~RF(4bUrEb>;dajaEjdGB+cooQP=l=Bi`hwGzAe{B7Riu13USA8&h7pUihq
zt at _io5<`O0yvnaYbk^5>l(T;3y9H<gV2ZaH8mOV)9)ZT#F at akK62Tyo<W4xQ!IP5>
zXZr|rCSIuKF5&C3+o;hd7Wd8k9J3%E3)&${ws=SEnD;|0<#znC)h2QD`(%CO9;)gD
z>Hw8z8mafD>7)}G-?x9H<GQeihPCJ-(n(Ob9r_zko0{vlQ)<-EpP5dFZcu_Kiw-Dm
z<$xc9G)gEskJxeT at CZn!RZa?#q{Kyf!p2n7HSw7u2C=sjURJ1#zOWzNux5qU&_GYD
z9Mo)CibEf&uR{#CjFIe)>7^RZ7Th;h`wu#ap=Xji5#M3lFS49e0nCD!!jQ}_n at SuY
zi655Jj<#&92-U=BwDrt_#w>Y4kS}W6S7Bvkk1$H at 5OQ_zZs$h-+nmZ$iUj&s{$6{H
zzWOhh0l^ka?7sUe<^nG#EmNs<V-YmF5&jYB7a1PN{@WxP9j}mdU at GTXX|*}p6SIR9
zsn2Vl-|ll(RP}?;o at KM|$81wugwm at j_!jzaUlKra at 9Rv-<ELt#T`+TJ_=+Sw=niD=
z{T2!`ABScIrPE~8gP#^hL^tk-JmhN^mFmmdxyAsW)TL3vjF9<0*eQ{qzUonwc^K==
zNe53u2*ukdDSGITf;iY*H+pn?N at jLGYzH+NB#ERx7&#;dL<u<@l)&IjmK8cq67p8s
zT1OX@&GrQwHWeDWF5l|*X9Sp|GJj3`bdZK|fh9H7cd7Vz>*F(<yal*n9w6c!e)M#+
z<^#Og9d(P|L*5Fm2r#FKZ+MwD4_gb`oHFxUSslcAwS<GML2WRrq`U-nT;t}y%SANw
zuZ0R9fc_2LGAnoT6BQz<Jv-noYB+`d1%*f5(D}hfN%->)3M^2e%6Sq*U8SZek9?{?
zgCDE6(mV5w#2u5p4IIugC*z(E<tt2HsBhe6xrmU$f~$4#pw<=P2uYlggxO%@x5k04
zH~#9-7*-Bn?dv6FT+4gVK4CGmHD*pcxkP9Fepczl{+q;e<@xr at nYVNo`RiF|(6#9U
zu#r6(V*mVVZlEkvp<tfVu at N=mTfK5sHT{{kN)5=0+Pb&`kE=wqLL#RlitQ`_T0;SZ
zW_G0P^Z#zACMyktR!ue{asb2g-iasL58Bx{5g;9Jnt{_+YEu#&I48KfBG+yn;LKbQ
z?SYb4Ml>_mgn?v^jRSmb$%&w(=QZ$eJFFYz+h9z^%_+;f0?`yatEhl6Sw5NzWL6i5
z;XbZwsimV24xA#FbyVcB3=3^qfZ7?)lTVq=bC2erz#@EYy&(Ma3yFxpS#yW~Wsf#$
z?+-24W4ob3Byr%2JMi-V|5cV at Tf<P_5owb(uXOn55D_%`O6F=CM*Gjk0bvWy|AX=^
zx8!`48>0UmZP69VUWJWU3<%VzlX9q%7zv*z=*l&eJ)NLSMCW at pxwb{5uuOj0=DSEZ
z0**fAWi9E2KszYGdSOGG;?Chr-6PMh$tFOUdh9zGa!-7mVt6}tYT9lRU~1bXk%us-
zD?3hjJ5>y0uM%(;qsPQ((Sv*>j3zKNw{4Dx<vD=+8Rk`W7aaa2`q8HkBG~>wr)sY$
z#AcmFL23@}%*NV&;K^rExvys=R2_|Rmb#tk3e-Z|U-UoL<y*wRRN;+c5RIRIz;)P{
z;<qF_7RJwOrN}65<0a~F>-p-s;9Jd0IB=uh%)swLV|NM_+;%+lsmJz at sAO=?z*Q5g
z#LTRcO5&;-EKJ(DvTym469^AiCp0y$eWFVL$m|QnZk}4udlw{V<Hn3!4n4tlG=c~~
z4$=1cm~nt1F)uZBIb-WP2m?(Pnt6=XgkYRM)ghy9MEpEJF-jyyzrL8&^D8q#(i3bR
z1x-8<QYSqzFGEI?1(Y8(t0nI*BT)#Qs=)2>r!Up^cr$z8meEhKiR=z05?3K6+f?E4
zBPC?Ih<<B%-B64(>`~GR8|MAO=+;6Woo=b95_K^a&O;{l(}}DRs1g{_)pZGjZ$?1-
z^y1^K2W&b~%P?8Z%IU+0hbNx#6X#acKfxR8#CM=hdW(Ty^EQXdv^v}_KgSd7$<0!?
zb at 32DiOd$=V~d^c7UHVA;!9kbDV6Pa8{HLJPChsv6?+<U#;_=$<+7X_JqL5!n%Tqq
z8<g{t&ox;g)eDyvhfEMbXg9r9;~1z9haH}p1&J&&BFD7poW3J;{9|qn{>o`Nm*KvV
z6lTHr-M+pHR{1+XefC+WMd(OT8(zJ3M6uDKbru>LA2 at 1BXYTqKr&@$-Y$G|s(!Hdp
zBoXs9AWLUiOEZeZ<%-SS*SwwZ5nAmXnPVABV(43 at 5UiB(OmSq7`}Sdnf}Xhz{dK5T
z?mc5c%Mg)HZ7xM;jgZ$3zRFzUB%$|*VWg9}ZjlE?9*uI;MGbU_ at O`puFg4UxwCUg6
zV96yfv`{rp{A921@!$}sgax}Uc6V~y3zG(amX1M0$_dYa0P7S(G16tMVq$t;dx0a<
z9Q5N at f)PTF0aF|AB<|$K!dq;(7pTNGIpTi^bqCITvJu)VEjF?w3|?L at rl|yrS?kd(
zBd^6kBIbnMHqk;C#EG={-gARIvYc#VeL+C^)UdN$3UR^_u}$TKYy}(K#9L`JYFeEE
zJCVB`Ai;a_$zh0*TYP~KWI*;c=c0H6%*L_dK6s~REDG!<Bu{Hl@{=)~Rx<n`=Ra$W
z-`741PZKsMcbELfuUT%B)$BJ`+=-_?5_!sgJ6Jng9n(^x>4DXtA}U|=DG<_1m!57E
z=->!st06jRz7bxt#x6C)ojX`iQ2<gr2o6Qufc|N=_%+qI1joulHGVwatBvm4R&(}`
zh`*78zt{Bh-{%Jc7%YA`3OoBjZIzW?I!PUKC_e7|8K>XzAb&BV6|hCXi)JZ{S1#^e
z{PvM$atO`*=*P{l-(bwJwQ>;@*5oKlf^-4Lr{J=T>(iE8Znyul+>}VXSxalkq08DK
zhkR}fdw{d<ec7`YX(FjG|Hpx%MwO(7(!Tg7geCE-K8oy7tGLX%j5zhYi8g~583`E5
zJG%O~Uf-SL=H+j3`)tbtajx1Bbpq%a@<kSwD$2yT*Fb at ImLvXk8!CwLVrBHaz2IH0
z-foE~!Wv*x=48OxW`Fg>CM6luC7B#UkZ}o_tN$t-f97-Pw!1HrOv5k(&o#MHt4bj&
zQTbGI->CoSVz2(98W7+rCZ*S)F8ZYWC;vLgCu19}{&0HA#OB>MgSk#m{QwNT)b0Qn
zo2Rsa$0zw;k|7~68|b;LVm}r$xk<(Cotzy{Y9C<^XP;%)cc`?!t>EP$lZ~^~)Zbk8
zyJn<w{+Z}cSy3w<%al_iT9bC_vL-%}R<OtN_%dg$9f5A@!o`4v%1;Z>0=Q9q_?fn-
ziQtE>m#4>0l|_OViJ2j*+ft)LhCS$yOORxvMBWg*6AoTBhjBrRV&4ObX;3|e2U<(8
zSf;V<66e3j<k$05C1qQvJF!LsHsI14I7}nUyiCAf8R?!}Wza1vT9PlU+eJr^gU^ip
zEsW}C9;t4bs%9c+SeAINO}^n>KmGjO(@aR-wqYfa+mN(U+sN1kC-{dxn-y>mTOdoS
zQP{<I09SEv6R{XOI6pL9S3&E3{Q364))EZV9>eJvv+<TueAVG!X#$D59X37&#u+IP
zxF){=Pz_d`SI~yB+-NOaKA^iW`cXzK!}ma%h`7Wet2$i&Hf at vI{l0t0pIaZpt4{|J
z43i%#(t=yhXDQm~yNCSLdnb#qw3w)tMp<e=<+C$q1va{%754*f`iu61E&VmIHdO6~
z409-rhe$wLI6$%_`20NFd2OJE5)T8l{;#9+ybf&H;u&`nHG|Knh;^YJXSXo1;+U9<
z7oRQNXpfN1tef&8gwV|w$4R2MB)vxmawEijPb6o|bNM_|X>Pvf=vUpAO6_gQfK8C&
z`<gk_&)5kN-0t~=+~fenW%^0OS0+nwabcGJ)Al)a8J(<$A9p>jRtOK*J-xgzp#%YF
z`<4{ZwPFd8*tx0u$&dBkmlceS2`}|0NpX%tDd^N2;2G=?do9~ZcbS+>Um5aJ*6VO3
zUls<V%`y0S_Xp_CFU*wuomrv`ANBrx0&NPR{dAjgqI8&=jaB{5&zh<<7cHc^ujwF4
zf&ySs3bB~c+EqfV+jnT|K46(rT&o18xE+g!W*IHGw3<r9hYYAR?y7Y>(YX8R$lBIF
z&7`2gw_2^)*NF^4Tpp??dV7FxkR^+wq_0$G0avo*<^$5H)oMFg(&?clil^{0hM5^F
zOmV&W+gYSEu_?F0q>PU8h*TpsrPxc&@_}tFsHO^#cF#oxxKZGX^KaC-^=Y1l5KDpA
zxr?$oc(^s at ulHMIt`|u#w21 at euC&Ia9-vx*hyls at ssfEPZf6|jRDD1&q{HP0DR(tL
z at MTopS)9g5h^}gUymTe+Yf_zYOZGvQ_Bi*yJE?_IS7HEh#52(TMIhevUVIV}+3din
zo^h9B&Ix%<n~=*kz7=D9+=iDMSS%!fR#oG*Q22}*AwRpMA|ec2Z{1&uqqi^hwAQU%
z^>L3;gR(B!WMWV)(vrTmJ<<aD<$3qIF7>~U{678sK;+kf at NJ?xETQR^?ud4>SGN2?
zYrv4&7$wqG{4U$8{TuR?EzKLp=cTTrb5fn;hIsn24w|$ZV$nm~odMC)-+K(@{Wif>
z!%$mhC|~Alzn&ZC6L}zbIIU_U$oQvv@%WMW?Z{Cg(l!9c^;w_}p$Zho_n^*J at 4DXy
zu6UcJMh5w3R{nYJ9B<Y-BWzuK3JI~Hxaz8bG6ybo^cSbIuBT{M9`wwbc-x0 at dH@cx
zpj8A<p2)Q8@=Vv~grqWO!ol;{Y0##s$OaQRdv%Stc8<Nlgq=;N0x|%K=w%qtv~&IG
z5XhnPEtczb9ldGJf?X3KeAVE|0G;|q_)j#?Ku#QXqTBc6)9FCtH~kBKLo%>SYJaI_
zn;qNdqphi^JB_Df=&`sgwLHsgq^MZ9KQ?j5ueO>8qRSY{ODu~?OfZ;fLPB()RU7Df
z#{BDW2^X&ns75p!qEP6zOyMw(hz|7W at EMJc3)*k0OD@&}*_y<eS80pJLkxAsryRYB
z8eutW5;^DxR{%=1_XdL(yn1c{5TvQo4%_;%rk5y01W(yeII20zqPtiJyZe`D at +?sH
z>dxlOUDTzukw3;-cj8gNKdQu3u{h)YX}zKq$DZkq0tuef-Y{Qw`?loU;)o9D%zN4c
z58ibnGrMmW^4#AgN2AI#3o?%f8_Y)xse{K)!_tP0ET32eta<8L=#XYH&e=)e4!h)~
zoK2E2#wNdp7OVo=u9(y~0G{cWB)mBGV83dcD&WCJeZczW(X<Oh5^i<c`l9&Z at 4<;+
zlm5J$A-OYH>RMqC6VFe;3m$5a=qmbWY&9$qD8FYi?UzC3F-B0o_G6J=fNKp at H@)Ch
zlbXh078s$hz9n7b85kD9 at W;Dzyl2U!<<t3OId*sX2`ajG{enXwJx+`aLWJ8iwR1ba
z(Vba<r+PEIa;Prfz-&QYjO+0ZM_j8Ieyd9^O0+!3{!5 at FC7(yW5HdRKK<2)`72wIW
z&!lNlcx*JFrr&>n(4UVbfc*MZ`twOt*6#BT9AjH5+K}XB9+Oo3daK#-{=b%XghCbs
z*{;MhG#!T?{&n8a8%Iewc9E=M1e2n53v#KSYZ9dpAf=7w6^25YzeUmDz6|HJwvqjP
z3-pu4%-;QhR<^w+(OyOOTugk;16 at YLqNp&dzmONyH^Y~JvVHQFjOYzhcL3R?PYbF_
z;vt9!R)XwjqzMU~YaXS;NCp0qVtOF>{W5iXfK_G=ol#{F9+2gxxf7!}$YnuvKb)*J
z=gwpV$<OI at 4q*2V?&t_6MJ&vc?vE=5{WSpCq(Yg=E9;V!AttT<eYXUI>1Hkrjj)?9
z++CRVMFD)uL6OT4nc9>SD=tDUS{3>FWn{>9A87duLi_g|LoyHSCe0JW+Va;cyS^X}
zI6336qvT{aj`*PpW=TZbMFB(;U*tAZ;@F(*mHGrHC4mZgzdpuShfeeI&(ukJfKd#|
zak5Y~rSojf69t)zh>fMqY6z9=a-&aKxJQmUpa(1s?AW*{pL<)|3hLAwk7dx>e^ZnU
zD21B;gb9~^zC9os7fE*)eJVD+5Xzz#{>vQf-aQzR8h6FQO$SbowGj-WXNC?u*`k9+
zpRck99>Y%{<-Tj`JDt*V-?)O$fD&b3j*`@uJ?=!7YHdahTgmA-*Yo at ZJvpgThjpzX
zO&c5=$~;7aw8HFm1&@^}ZR&RBu0~yfc0A0ac}+?ScK2hKx*ScEDv{pU2ga382hUW{
z*ir}9GMZe*LyHQ_>kog{;~`%tFC(QX@))<%SR41_sY>U#GYCZPEX<tHdpqt1xq*9-
zeY3dvUn;@GqFcKf?+^?TXdc9spwd#_r|b%FvK8=w?5&zf#e?)#>xu9eMpzN*mLI`9
z^8G;w%NV*DsYj5#(+QVwX<_kg2E6WJycZe$TW{ZbXO=I}PQDiC{CN7VA5`pPB at lpz
z`!P+pb=diR6<|oH9L*VU%DhuUKc~yluz at 0N-*+6`acS#npGm9+PRjA<&jcc)y?u`_
z!t$@+x0U<ay*0Q)qMKEEuEGsc98Hv<Q9bj&M4Uq%auV30l$VYU;tHW0h9XOSyRTmd
zk-UbuS)mV{6(>*E;iz_~4q4Bkpx75^J7cC(!#Rx?n6r$T%6Px}ALe$e)8E;BLl1t;
z^y>`Hxyc+?hJ^cfw?5cWd71Ku^Wx_rxv(VF5>AX$aJYAfCnHUpm`1n>X{h at fs_fx3
zNEJ2U>ybEskhNpWx?1^hRpA{^JPd*>?JNE>jp+i|Qz=jm0VY-HElfF|eiCzHt4(2Z
zpfa#>p&Vss3JU-WcrIVIxs6~Pin$#wwKh8)Be(ZsMOg0wt}@B%RJj?*wMhZCA}o=h
zsKK+Y?vdagGg5@);zDde-#3R+Q-h#=GSgF<O~QnXb-90lGzk6%cdGzR+O9ImEz8o0
zJ-(054w|QlsxA*sSHHXC$Z&}wPwMpmQlpHQ%mifwsAGvPpd?Mx$}|^Qjr%;qW=94O
zh-p#_`xU`g(sem%AVIQFah`83(tJD8Y3QrSm3X at 1-UYIQb9sD9yS@SrqEo%9Y3?;H
z5<4*_Y)GR7vSs2QX6(A_SV|ugNC|6Mj1kX;mChh!Uf?+*s9i8ji(oh7=z@<MN0wy2
zVBhMeSJYQQ9Vx&G7tL4VD1!^_hR8#gk%=gS;UW$^S=RlF)ZAl(ik5RZ(|ZlyFDC$i
zf?f;KOCcCMb5l+?sj}$Tg`Sw;hN5yaD<)fXxxw_ at 18uvJWs%uPLhl)HKZEMxDe(rs
zV3#_1)`7&Na9g4{&Bup-#HSy?tJ;%mIR-qZu%(c9nYf1=N+)*0yi0?4DNtYig=+6M
zN|IM}V=Zz&Hb(1wW#X1?ZjBZ;Kqs<SYWk0wd<>Gxo}2PIbZo~OMRilk#YE0oRPPFs
zISZKU&+xo*3|u?aV6I4d7OZCq&0IbGBj^cy$13A=d5dcUg%K{<VKtF0N8YEMm;7-9
zt5&$SV}6uY)=~V3&YR3TYW`tFpe7khKC&YeyK{Ymm>ai16J%=od0+<=%{Z(uFa)jt
zV?PpNsjpbx^m8nFW+bp}IGtiEuL<r35bl2P8P8CMq&u$0?ob*e8{drQt|tcVJ|-Hk
znrt*+$)lw$1L{5bNJj`0TB9NZ&it&8EiH$O8;FkPy!sylD)gxpjMBG|2JvNlZKpoL
zz$uuuBFh~ZTp6#>sp7K)u+2NM%83OiNy~jr at 206h*JXH%?4xFDz&x>R8t}@a;d^B=
z*&_Zd5YbUqf3&pN-&N|tDH+LuxezgIWLlo+aLRzi7d|7I2x7-vdGdk51vm848z9yt
za*5ktcT<!ZTDD>*0blvfiB#+Te~2zP`B1I*PCvCm;LoRHX&V5r`xklVPfv%Z1ZfP1
zd|0bN5dSL81Y_)3Elnn!@37ERp8dMM0S5HrtxqhjehZwdxU!G)(jmv0WQqn-?%2f{
zDR>e~zP~Dj(g74~XbXH2;vvF-2UKv#e~oJSA0q3|X1C>6qMmQO1UJ?+51%n_uEExb
zr9z^=!j8jhd-w at x8+csMuM+VYlOHaz*kAJHu8s*ZKiklbH9gsZw%{k+qGy2c({<;X
zYa2twPw1nmZlq4)#ub-kxa?k{g}a#AoUpBnCR-$h>`_t%<xRcgN-8eurW)eB4AMoV
z)2C_ZP8%+<Re+|D?s#F4&#ZJSntNTu5dg5{NS6wa2)DPh$9PYms;Uy`vVP;NXN1PX
za|ngs&KpuGIxR`6whr)0m9=;>fm{k)@=nsa=hCHiPg7hXleW?W>jfw9{c~PanG%{H
zx1R at R9Y!)#vsb6_0>k_%5DV=^Nw<??C5l)p!$V;qleg)q7dZ at EXJ9v-kDhpoSi#ez
zKIC8YkS^acEq9f`L$-A8s!@MPxtTFP05dC1p%w7?ocnijLtDGuBD+E0G5KwutwQOD
z$+=IiN3`jZbu7FD_}h`eC8K8TVD3 at aJ($Sn{@t=ceu?krE<Cwpo-QEe$zfk>pkHiF
zW&Xs2YA+&lwFQ*!Fp4xt4KUq+V>gvcnKt>r3S7?xCqWpflkiV<Os%wJl;7U-!|lSz
zCwV at G)e at UbD=*~*$Mb`lnB%_gRZWb at +dXz81`Cb5lOyjS%J1ivL)@JD$SRg at 3&5zx
z9~^9)3j?e-JxYkjrKHFrs((=xy}^|x9l23Jh!K`X4>WdP`1OzdGi}T?@L%;{ApoOW
z-5?zWiwVT43$2UcWW)(1Q^e5JBzSE_A|07W3^f&@^+!6KEz?{!Wy1s_l4R+))&4GY
zG4Erdu-mF`dLAr)z|{DP6&~qCq6yZZD8P4|+9KX(ksrQ$TIiHrclO$W4g31wrGLcV
zPHW>6<W<VHw^XsWkL?gJ+z>M_`vrNHI65<(s9{7Ffq$m?L&jW1k?I*-#TF~6?5^Vq
z!wyhregYvN3X^V at a(WykHsi&}_;bYwvm2R~duHEy<MqW)r+joP&OzJbpJNsLHp)Dr
z@&Zf{a<Emx#l<p;?f?$R5evl=1%XkH7t+K;=fuXFQ|u>kD_{hoBi^JsKl=quf~iDu
zdqtiREv}&rb{mPOh#;WJBmVC95|j~Ij_|quIi(ciRdkL2u*cpT&XQ&dtA(`jx69o1
zJrS!m=!3UmapTppSN0tLGr_^ji4ar}T2(bM0JK<aDl|rmVC^ZXi2ica?F$+^OHB%W
zLF8bBKvNZk#)gI{-)Kw>Ln5^T1;u8bbQQg~es$>po$tfDiN9_?70A%8ks*|z(^FY|
z6{S0Xzti1ly!3T|LMly=$JEA^UYZDL_p;W)cVeCgwZn8uRwhqB6(OpP(7t^=Q%<fe
zV3z+Ym$B-ABLEHUYBT4yO35j&JB{2+6v&~HZGnP!#q_32D1MIWrzMW!-~kLZ|9W?T
zzwsb^ji(8wI(8ohVijn5Bt)*NEg^JOPR?uSgyYXEgl5l8QR5KVuen`N)l6(SKDes`
zuGBMYApQc1I!Z at D*6)14zpou-67eU#)zcJHU~KNT at civ3(Yn=MlwYI`;<22+UGFW{
zt#tsrQ-G)`{ll`R!?T82@;svcQLR67>;d8xO_^s%`S@))3#RFB{;}m_p7;?M(dZ$!
z@#BtMTmZ^qOv*4*<+G3d!(t^kdH<9Vm2X^5!A5^*%1EJ4UEI=o)xwIw4*qj%frn?+
z#<*A$!P6C1VInYv*T}3_P+g=Gr-qOofv0F+cT&Q0|FcCNtJ$>~BtR+R^$XP_P0fD0
z2cKwgJx45K#O+JWtf;If<<;48aH-+zy(K59?1lS7PkVCCPSC8ON<a;14y~j&m7;dl
zl#F(~DA{sFBaDyfz-1|>m0V3?IjJ=;8Q2+$0aW-(in~8XAbtVaGQ2kSuF}QobTrU-
z*S?eWse!(f+YxkC4ec#~;`B7*s$sSKjEBfEqz^)}$4k5J+c-BZKZPZ`uskai4A&Xh
zzO{{v#yxis#S5mqUjwmk2+FZqZqKviR(kBYPRUEVTFT?nt7umo_I{a-PtcL6(i98H
zm2yl8dfA at WGFhewt6)k2I6%h`dlLVVh1i8_>_C38o-OPvFY8@}lf at c8K@?B at jMIre
z*9qkfAV&6+LoVRI_-lO7 at ND$T{s`S_GN)Ca!SnVMf2SonC&PyP9WGoA34*jziQeJ4
zXfq-K+H0>yzbG;cMTpRvlJxNW%C7Rd;(m{;fweP*DgYlCeF)A_x8qL at Xi806Ip3mO
zSu1 at 49CTBnNfRWq<7}qUH~5|y*zOw^JnOXGrCqQDp!RpGmQH>i6iQU%(pr7sjJ5%a
zp~yX01!wBKvL0tVDhDR4^mp$QGq00Z>nLpr#rIq`BXmm**4g6Lk;B$Uw%zxAoWR6y
zQsd}nM44FXGCvwd?Cv1CMXc6545N3_)9TU8lCRl)VG_B3g5TOL+|Z1J2B_c;ZBG^9
z98O|P-P(FvZ- at -L{2j*T-Y`)Xz2mS}uS(u!d;D^5m_Xnh8iH#&6*IXkG1)Y2MHgDF
zZ)Kj at 7~ZZRyfwkr3Q_c<2wb7y?cEs0S0dD55gjl83&*$&@)XrmI)45#4<>Vj5G=-i
z1jlijO~j;#o%J1ETOujex=hPTx^BKC-&;|-togZItYol%SzFWXcyi`J;fp-1HzG8x
z=+c)WPW27cw0X{2`=~q&r0Aw&@VD5ZxXmk at o-&$i|Ck^kyo$75Y@&OPsGW3I_vO`Z
z(4KusH^F%Tp$aEdK5L&NC#~aNBp4joRut>5^<P|jX)4=W*+#f}g at o1y@T*UZ03M#9
zz0NgUt%^(Njk^){q1w;x>@~zh_i~wllQKo#IrqO_FRaBbp2D+F92Q?nObr^ChWYK*
zfNZRmLkCrj|3F?%5PJH9NI`hk!R_o;d+ at rL>jBv+(_4Wj-A&vU()5qn5~EtrXU90t
z+ at 23gXM#yihM1vhq0R(E#B)m+3ITMad at mFnkTs?GEtVX?xS-fiooqy at p`4cFq|A-%
zVCsBiHLfJFm0)6fhH!Kvjo#d`;2bp%4_27ObB4(F*ZrYmmOKN(Ak=Uxnw_JLMog8!
zBBYe at 8Fa;cV`{jALttM900UR%%1j+xzkDKlQe6!e6tQm*TxqxFOXTD{YBtx=U{+#v
z!!PeXwsYeMQ68H2J(vWD$sx-2I8fe4N~5q)_6 at JVj0rZ(kid2gLiqvbMM1ZEdx4+0
zG`3E8$h>V~mFqb at Fuj7xe&j60Vt74bCaaXq10o0Uz3+7ZXN7UYPqf!d@@hE(J#7yO
zsm7~9S?6jr^+$wns0E}ce1If`0zQRK4bJi=XDnpcTD$&nD5{hQh-LAVpv*w!PYy|)
z+Xts)q)0B9J*yxeta666b at KiaXITKrFgXlb?9PC<>mts&G3hNQA|=e6R#NMmZ_K6u
zbf{-uC4Q#ID)KQzuSr6ZE&I*TDEv$AyHAvjK|K%AVdluJN}b|WVI(Qdp<D#2+$L`k
zJD`@%z)D><9GKgAPbHfOL6tY&63~cS&zv8Z+Irl0&agZ7 at 4y~4E1_%?%mgS`m~Rkp
zH;|knf%<v4uLzIiWxQbH&~?m6Glh|j=D}`EA+-!m+<HqmeTm^5>_5IFA{tR$_(2)~
zcb6-&4w!7one#P#7Tz at 6cHLCgVvJ#&Oc)DLLK+z{q$Ew8TO!^Yk4P8)F6U2#m<P$9
ze+v8v;4zFQ*z7pHUp4V7DlR-3ya0eyE8n!M^0)5mvAAM3M>nHMrs<%ERA%2s`0K at C
z1Ik`8O~O#49sJxRL-NCv(3?pstW>oB2&)SY8^{ojIax!3n0o^z;RXisaIzU?!oie$
zfHrpx;R+?yIegt=#t&Y?lO%vIv27TFR?j0CYjz;6sUDDM2p4^<B-t`7lnxpBSw14$
zaTB8sWPup6WTB!VG9L<MLVh7nt;QCz;A{$uQBW}S5oU-g07n#*DfkpJKn`6Ls-_TA
z0A?6KP?7Ju-yAgf2<7x&EAW<eNNlX!m&`$_;reBRL(MKWBsv1*0$REdw-TG3N~Op0
zGui1>>(iidE2eyC(YmMEByf^@IphOj>-yYBho$XB$MrA~Jd%1EcJZILV?;d`1<ycj
zI1lq_jqlIT3OfyOwGVWh#joo|fT#LG?4~x$whqf!R$oBO9xC26cx|{n-$N?IXS4W9
z_HO=OkP=C_qq8&*8(|kNC4y!_jv{>{q1Q5;p=Ag=nf{SZ);WQRp%F?yWi;LZH$ce0
z(hOQ(D-G4;(`@7>z(rm(<gK-0HOn{895I2p|0cOwbj*>Bl}#?9gM45OiMUPZIuYLt
z_UiIGp8!wOvsc*_6LZmftTg8EudRCkS>vYv=b{I<UB?I+`;H;>F1~NDV&3{(>O9Jq
zyDMIP?=CSWB^M){o>oxCC&L5SpOlCZ9l-Szj8DmrBe<h(s1r4WNIMqUK<+5v(Pm-8
z!0tCuf at +_nAp`{vpYDBBqwS%zh7!!$j)e at z2uMHh5(v;t;q3O}3U>^BRL<atHBVhd
z$%1W?j4WR*pQe;gA4Z8I4cj-FU-vIs1E<Rb{I73}W5||FQN$ov2_vWb-}dt&ilpy~
zpmy&5-CA7 at IpPy5F+%A-eZ6#_Gwv>qam4nE%Ac`=g8>jGP|txOIKU4jYX#o|!E8R{
zQt%VS1s`E$Ri!wiC^0;Y=^B1AvfljCU)0n5H?{tI#CkWTZ1RbO!^R(fN2r8L|HiDx
z7_oB$u=h~%7(D2Bhpv9 at 6KK5yJv)IkvnHfEaojt`G|oU<C=#&P0JD&k$#7!aEI!iL
z1Rjw;RbTg{bR#Ys`8Ml5y%%u?Zxe~Pd3F3<evo$pk1JHZY5SS{0G>io`=Qu!Ah&w1
z;Lj}EQL)46)(p}h0wtbvONZ$1t89Y<m;IQec=rSTb at bK|s$L+7VClDE8Y)_?U{?`A
zeP?UT<g!Bizx31bWUSh}CZelrw}u9@>Spg-j-<TJB38mlmCn?6#z;P-3daQ+Gnpbj
zo;mDEI4q&{9CV-#^L7Usga}05gx`SIES_Txv&%eSJsvINHjrH<Ega1_aj+yhr6_uG
zM%*;>N#Wk~3`xN=>A{~BGy1`P45id%S|+4TP7OaGGVm36c!ec#OE?TKh>)u=3BW6A
zsa=et2ocZSN4&L!Ip%sJ5dI4&)%H;C0kuQ#)9M0|OBu>*NE(KWM<jG%0GzDW6Sa-~
zX9 at G~zG*DregqMqc}2V4uf&leuak#WUe>XUyUEh~J6ok99)O9Y5AL=5Y}2QthdQVj
zEhfw3P7u`X_PjQUV&1^qU9fKk76Pp7=&y2jYj!vL%`pVUD0Zd`=r#jpR4yJ0W?SWV
z3Vg=6HaSt#pU{IoMs6cD*6!2Wj6X|U(dO*8MgAML-N7hXC&*xL)EHd?A~gIW`T4j0
zoNB_TaPNT8yOc^3L~u_-J}ITkanb9Z2FmY3K=~Ze5Pp%BJ)B&hbCDPDdzVNqPJ*M5
zq^5~_1^cARMy&LCjD}rV#ZDa!GWblG-PIa(JOFc}J0=%n3G7h2_ at irGKATQAjP22C
z%<yL<*zsQ}1y_n^FcDyVfcwbJ`w)&Y(cs(d+r`vvpL0WK{mhS|>Q3EuC}%`TGn6M(
zqNt at Pte=>dHdM$wFuh6U%|H4FD*JIFa2=PI*cJA3+03^Yv+7CJh-aQ$b3J1o5T<~(
z0J2{GdIh{wJ<&t-SLF6JJALg{1iDG>b5k#4qA_fbwgglxZ}6MDek7J||No(rif}Ad
zhvIgca|6lRbM=m4#o7&`@XMq at xE8nveuPEx2{kR{qQA~4iMlb_>x;(@9RjpT5eAr3
z7kQFA^h~zs)}+sf at L)L$$Wy0GxN`oO?wion3M)zr$!9j$JjlN7={Kl?B=3L(9G{+-
zJ;i=o;AAgn=GtP)v}5ww0!Kp}xL<j6z5BFb&jtS at SuyxnY+}rTjE>MMn47=C9h6_G
zonXs(V$X>JD7Vt6a&_KZ&>!$!MSWI>DQ+R4&Re-oLZY(gcWY4EwWRji7&o^V{+Uf?
z9!>k`N}aKNyAX8z!E|{Jz2aaW2A#0i{n?ggNL!ITf|9rI1|7bHEqe8jp_s|YK2z6<
zh8K=UapMQ(P7sV^_ekgOziW0=<JXKV*yi`)RqfmH+qCt1lPe00xh>)p|M5a*^^gqM
z(x7&2>1mJ6gGI<Fgz8v8qzffQa=hs2bCS+48-wbw*6b>TQ2FiJ1G}?LHW=;YF1&FJ
z{7RC6;<xagw;%X1-hj#XD?UE5w0~4eeXDCrFTglr<E;go?wLB$A~nkpIf7aGB*l}q
zV;`}QVXXzLjYudw>I6XI4W at hS7;Hd4IxH$kl+2nQhoK(@BEAcA=i+)o_#>sh>2qbH
zp0%yz$^#`9SazS+1%_$-fH)-62W7A%Ca9LVWvkrLSH$KMKPk#+t93^G9CVF=8vgpK
zD2bW6BF>@0_sBkLsSH9&Se0YdukS98q6O8kInbtla=Xu#r!;<~;C<ECkiDdqJ#!&q
zh567u=@h7!IyWHnCX_LD)hTBUnOw+O4veC{$j{d$IA<^idrluSRvxK1o#Dv^HOs7-
zbTOkV$4am=DWRE1Eg071dP=ATg at a{VnYE>gMfY<WZ7Lc-ax@;Xqr6sl(TfDiGS*u9
z8u6ELbp;1*6-VP8NR$?uBe-27-&bJ=1pa{OxdDnq8>P!4L#=bzsmxqX@=1hH)hGl1
zkT_1o at fo|BK?B-85uvu4YbOfhWJtG`Muz#kMIv9!0 at zlX+bqI;si2;I?1TXx5DRUg
za>5YE%i6&VP+Y7I(`xy4YoCoP^r_P8riwCS3TayGl|Hhk=1-QbO}NNcZC&&s*J|$@
z)Coj!4TlWTlTxR64Z+v?ps>i=gAzqFnedLt#e^&4Z~XN#cRs<(>+^gQ;7h_zn!6up
z_sxb;NIheahps%bkVVkIIBl>%`oSggYm;qG?eX;O^Jp5H{%--NN-cJUG}eXr8XMq1
zXPKv-6b_Ma2%{)3C78W{!#+!%JG-cD2^p)2r1X@)!;4!p(x?Lk at eb0~`JRt(@9P2H
zl at V>cvLfeRM(*W=OE9;B3qth+xNWn0Mhu_F5)2XNJ?%A0KVJ{J;^iEU-I#egm2b&D
zDwm&@<esfQD#jS1vja$f at r*t*!gp~RXYF?9>)5G!?hYLzyRCb>l1J5~xS!)sRUE63
z(Y(_dr_TJLA1_ci0dCoZ+ykpa%34Z(_?swtHP at 2nLMkW<IaXpRdY2tQTLkYPygySj
z1Jp$vyar4q5+X&Z!&74E(H7=+2NsZAu186~KrCA-6nmb3S_w|DFIU*{D>d&;xoiSx
zm1h&2D9|mh*e>LvN<8r$F;PA&#Z<#Nbc>ArdQe?kMsQ_u*7fh!8?ARMi6 at Fb=c^uI
z_G^=%=PbZptxOx&U1s_Lzib}9LJ9GO_Di>Wd9qNWj);}vr|U2z9e~=I_QIQgQwK?@
zcti_^1NHNmRP1n>mw(Ra%J6*H1{gP!uxd<9K!d$c>GvfI=SkF?pjO!PchP0wM}Sws
z)ATSOE0=*oV{o(JR%s_o8X5QgwxVq`1UCoFkjBwFGQ9~`$909o&gp5W5rzSBep3Kp
zzcstJt4RUq$H-JP at nu1t@$t#cD!nOOX#V*UFBH85ea4;#Eo$b83IOL3g7S(6nR6g*
zg++h*kc3ag at E$L7eGIsN965^M94{ObD~9d at 6~=hO$AK4jY#AtPcZioMvD{gA at UJ3Q
zf)Wiu;`qFlp~N$8q63~ckK7K9+0e!S;|A6aTy-u4U6g=3RIeLh3E;dVCZ1`lM{qEF
z1Qe*rIwx$ZDaHfjhU>2zxu*ia73(h|$Nq=oUb8{xM`n0+$0GOuP$YNF at wG6khU@ul
zoUqbFf4 at 0d1?0anyR3(LkFq-7+`Fx!2glMOgB8H at bQK(5YR*Yz$0(qgIx|*(|2uzE
z{n9Q!{B?Wk-mtHB7Rbsn1)v=3o at hkMIg&I*UtNCJP-r#sG<kw8br>SjOVI<l)lwvU
z)m`ICE9#cO-#aA-u^&Sw9p)m!v6U>-Ej?+R_itnH$iUii*1{&8$w(tAa4yK;SAm7%
zsp^u0+^1-<P<>yOW~~P%5(z+pbpsq#S=h39=(dDZU8Ar_GlxCkc=-v%M1x9fjAgMa
z<!pxByq#uCReX$f_obZikHyzey92O}qQD=srpF)J;$G>mF+rEZ$IN>O1Bnef&x#ke
z&AXe$${w$5RD$Jly1g=n5G6uHOnXXz4#_FTgEZ}i$;)aiK!dwRX?&tL-{=d|bkXl7
z%Qzf7nuu(Z#nKF#;h(NS;rKK>0mAo0zKtIT?$8{rbsH`ZG^y79bCOi05)qC|R&ZKQ
zB=eH^i>jceD!>z>90rr&3q5uLR2g*)^PwrG<WoLXoqto%fW8Xx9n`Ta4?&KNe|lE{
z%bY*w)F9C86fQeNrYg^?xOD2 at +Nf6l2;IxB!I#WAP?n7|jZDyXVsrVTI9N(oh9r0b
z;Fgz{Kg(RjNw)9#LMPVm<@CiLm6ZM<6uRc=(sR`HXqdy!_nu(gK!c??nE`sY>4K`v
z!V{EnRNFFQp8437!YnvXzRC8gj4BpmUg3G~=N at 93_!EE)VyMZ=K>L%Ic3bXB{v-U-
z+Dqfu3h+*P_kyFoi{>ZZp<QuIppBN_*YbB!>IuwWT+q~#my7L94}h>mp-S`|H*j>K
zpJMU)f?5_^mb8%`TIv-yDeUp_Hcr)ZMEP-Ybb})S{I6aYo=~`vV{l{_Q2j>>DuWJ)
zgdLQLCUmj~$E5N=6@*n<5%F~Guqc&l&`!puvZdX1OwU97_k#Ov%>H6S_a;<`pl#(t
zOj!Zmd9zW-LG!P at mhTX9K~Ebs=-j6=9F`#wy8cBPZVgi-vtxqDM#)mn_)-1o%IxL{
z1zGULn|6EgMQv817V;p%Oz<Ydok`IXG%GCr^HgD0r&?z=B>mbI(Kw#^OM8h7)fTPH
zj#zBmE^S1Q&OFYel<!BPF!i#i<nbI#uwNa94(GC@%=MapHv8MD)L<OvW^KthW!Hi`
zn=mIt`vwI5v49KK^WNm3{`$08aqs%(!U!=p{c}vnh&;Bq4)CVq<7!>S at AQ5Jijaz`
z2~^^tj0R=-YM)9PgLHA$-sIrzc;Aac#u7}&-oOp6S$KNP7hxF-IwifJyc>uc=4Yp@
z3#7K;TS6iBLu$QSgSVonPX~dO&$V4aBQy1(PN4v_X6padEIs`R3CG}=sWL{}o6Q#)
z0GL7($dnMFu4^;UbWwlfUA-J>&|RExx~cfNGp5=39 at H6lGP8Pwe;<tZq|6*NcQ4g*
z$4ezCt1UPnQz#`$i7!6}xj=R`mGwX0EJP?63bM38oCmcah6?u64!!BHK~LHJ%kizN
zqqAhi(kvlh%9JN5cq;I{{W)>Kwq)z5z0B^OUv$t&%vn;eHi}8!(9*hl+I*fgS{7mk
zdhC}JN4pFt at 91Aa#!8a=@?(?hPRMi&UAQt)WgXB5+y~1nT}}phK|HYD*@))U2Cqv9
zo<z-itO>}?7E{jx5x-`-bscW<@MS#7IZFZp6iESfZYZSkZy at BS`_-Lg5mHN|%rNHt
zB0b24g`lrhzO+f6e02_cC2fzE at +{qShWpw;?1UsqCrGP$L)eQ|w2Vg`)Su%+HC9 at m
z;Y%#fiTvU|vX##7qaK}#4*^dWmz(-XEjx`I(U{C}J?N(rjfqU^e_Yme0^hL?<!b!Q
z=?wf2Om3zud=A(}x_He^D3JiQRNy92tKhR7UM;YS_A*<EQS)oj4L at 3R|H<BC#A^(q
zY?&PcM=hL_E9>nt^fYCakltTQ5jzrz^5^youw^i`@Mw4RXekrCuesHT=dP=`>~4ar
z#J`AaY11#;+klBGh8QQLlLR%`EvYl}4lviR)qW2{t{_R@{?>MccA=+KOBuQuk20p9
z>}2?$upo92*mT at 8GDeBB-+<WEip&q^_xjjtjA+7D9+jkDz2W%~wl!li?1vN32w)Bj
zW7oGT1fc3~{}KbwovpF&ISgB`yR`V0*9rTY)h?&pgzst+OH$3K>e<>}i&L6Sn;q1&
z;aD9$hlNc6rWN2d^c};SxhgEaoH=aS7WT)=cy>kR6opy9AcNE^Y263z`~d!YYo at ZZ
zfiFJ20i3iL;rFOxE)>9yPcK at VZ)RXy7p)I^@`vfXrtwtwgVjszuC~Hy$lAGxx;SP=
z9rlVPD}btgrZkEd9UOhgWA<a8WUAHYrd3b4L4R>XbQ!%W>O02(A9x*wf3T$&-Y~GA
zLF$+I-Q7GpN+F!0PHi*mH!9vdeX>5Vky=C)y9Ri8p|2<hJF%DttL+mkohvVSFH#2!
zIT<5~|KM1N4JD^;A^=fVS-f0YpgHntKn2weW(+{Ajb+^dBfGxk*t{+BtdCv|R=SKT
z^EPc~71`Kb6;wH2qqlRa@>{CD?MXMT)Z`(lImzJ<ZH&s9KO7q30N~@wb6#q2X`nh#
zJ<g|NM5mD}6&)hpU-c3=v=Ss!Twb-c;s^76O>E>=0b_TMBh2>Ftn(z}t at 6LuE)?on
z!5oW?6 at qi+r(!;hteUnKme%o<lq#K at l>a^mOolmd2}xf3=oev)V|Fc%iKXy0oc5SX
z#w=vETM!OvywUl04FnHJS&Il*dx?dZl%k1?aj<&+y7>A|AG`QHLG(28TL>LU$0HQ_
z5%AEwWWnkklI(bt34CnjpzrKN*S{FS)Q at oK)_aLFcU4oh1_U)>_xu#|)M4TSDO=k0
z`~2snH;CO0Y~ecTDHzcqb(S1k<DDV%?-jw at WeMPZ#oeJO)HM;7 at _2iq9>oH`?`u^x
z2?d}$?nW350|eZ;%b}oXqA7*C?4lB*e{dg!c>2vt7J4C%_I!ZCJGm)^NDq)rVLYkh
z5zjD*Yaf?hEyz&i6^2jHuf~{2Gtth7b?IoWF3phK4J1RmDAjRZc(V{@{jr;5(cvsN
z8cnp^_)S+!MQCxqjFZ+M_oQa`*d4>22XIWTL`WOVm at 5`3;vC3o!1+);-F^nz_&31A
zfqd#g_X{`Kx4VkuBgQ4^5ZGZW+)CtbhnM|Q_T7C7W7(XL5pL}^(>CP*xM|8}tGT_D
z1#&8rPL8d9z%?+%4kAmcR|GtRo;FL`J(&gqK2zjHRE>b1XtJv-K>wrpmiT?Xw$tMH
z8zC}EIeY;2A;K{QEsBf)$&@-M)Ek<K4i<XO9#1fxik&@bUVOE at +lu)(pXG`U0!%3G
z<M`}z{z_L(sbH|KX#|;22T~h0H(rCUAjGAlJ<+fYlXL29c=sseUC2os#ZxnTzU}9b
z at SX@ie=iG__IucGEaf^3wt_I7K$?q$ur-x6;fW+8J-%|jk<8SV7Qg$l9O9Pf+7vr-
zalT<m;A|2f=)1gymU6>+#{?R+r{I1+FiyQu at +NA)Etk~AW2#Am<3T7+5KF?2oo{=B
z^9{hqLk2^TPZoN*$cnA$KFQ)+>Xvy6_1EcRc7I1mPEc-1{#G)wS{93ya_tPC>a5XR
zF9CoRXa5*(PEwMLPWptr3y0776y<(-2fAL%H-it~nEp~QDUJp|H(;}zw}IHSE<0ce
z<umz%hmh^zRFTf553DyEVOgdOcXZ^K?^3Y&!9Gg(`Wk59iLJ)z*G at g1vv9y=1)BtR
zv at -3O>%mMW5qb(raZiso#mK};v>h*h at z86hlq~d*CeGT>RHsj1*O&^5MMc$2lN`+A
ztZ_z+zuogFU&Ab89TB3-&U#aJ{LpnbxO?eZh)w3-hNN*epAljJzKdKt0j;izGO=-$
zI#r;1HN;=qPD4M?T`#P#W|#~_to;Ret#$MX!h{ix;NH^j-?m{6(OR*|F3W*<tO;3L
z8UX1D9uAvfzCnY6K5mqy#A2%yWtShK<Ok+B_TbZ!yUJo0JCwIM^Ypv?jb8tZqA09i
z;EiU}lp}&w*sPLy>V`%@dnoXr(4i7xyTq>0XXjSiccW1ax9G+m2nO6&#eG2>B9Oy<
zwFdYxot{_M^MP)#z1|p8V$_u7MhJBWO3>$2ukX=X*}Ph&8ZjlSyNw&MyW9p6&teH4
z`^~*4Q3H&wf>xY0s;TkPoL3_sJlzk6ZCS%{6~Wh#4uF#H?4Y>pq+ESg?)Z+ZC5>}i
zdGrdk{h%uV<tXZ8yFQ2MQj#)5BbV+NH3%DorNl-E06o<cXem-K&QYpLd3y=3*Xkui
zOj?MuM;toe)YCjk^q6<<!RKLrUo&ZODl%I2sD-I#pj^<h_SV_C=?RygtfTq+XT{cg
z4ra6<Stj7QA2daA(++ek_19*PgZ3j#2!nk|p at v=x124>e+euyfieg%w?$Bp|x7pGT
zibP9M8eC!O#JyeUQgh*fzV{6A`x^XWl>_XHl2<Wp|Csj8c}$jBb9`C$ABy+xf3ij9
z>HD{-bdi(dOMxDKSQVz}OBC+8SaJ-jiwQS~Hn3%j)(<z!Uw&JALZD=mU-qpHsrbu4
zYNHpV0Brk9nAw`DGTT6&f7d~!tnUU(CNT^p1_M#%YK=ucEI+}*Tt@%ACSLN?ij)J|
zqWFq_)bVEevEcm at n^oWHNLO<cr)+?QV<af`m>Y1?<7TCO#EIHh>y;ZfDNWcxhIe~s
zY6Y$_&&cbY>g&Wn)p`={3RK5;?xpISn9mx0=lh%hjtMuMk}*%d`t0l%*Y&TCAS#&Y
zM}*?IuXJ at q^1jAyPw8)Wku`L{iS(_ac!OPezA0a{dOS%%ykh-4K^1nqc3aJ8Z{N;(
zIHqh2s4Z4woF|ilQCKhPBH!QWKR22DiXw9w^*v_42-xU$G3PkHrsQbQ`C{3;AbL$z
zfZgnSefo8oBFF$gwtkl7_TSP><9J=9n8i?=EjD<iAgG8xs(ocbq4Z=FV3-Sf_6Pac
z+=n|_3Vt3%ar at AQ15e6u65^uB3eGRhIC5&by(tI6+s3qNf!r~?koy}=U_O at qESmhW
z0(@p+*fpGx6p0ST?5<3LRVnF!`)$_V<)^F%_cRW1`&M*5b+($z2APgj5sGgkh4A&F
zk~fffH-Q-eWV6OsT9H*&-_C%pO|FPwZU9r;F&WPjpjVT_Q^+3(6xB{*A>*jN;_Kkx
z-#vGBkiLiXv7i-<;Pza9v+SY{DDf_{ViAF8A^@T9^4Nnnt*f|)Q4J%6mTh|&bwXea
z;15XmRXb<60MpGFWBtyYxLcFQ`u8y+(4~D5$Dn>@IP=*d=oHU0d&gzB;n^*t-?E!@
z7Pg#FY#|7WTC;m-NRAk=&zbiy_gr`wF**|^)3CO*b0Z8a03nR%D;5RnXdvAdS?FOK
z;x^x_+DMQOHPQ12LambL1LNvM!T_!CI1W9CaQ5)SYG-PNp2MHi5VYyHWbl{q+Y#je
zlU&4rQ21n3ti at 26z*|M=Lj(727`>D=IW+xr-0`Ua^8Z5JNJbr<{<pyNYe(}jqfF4a
z-9B^Y?(4Qa=Z}i?M!NK&_6EF#VyrFZcSo){{ZVq5oXDW9F0{|UvB1>qa4Os)CU=>!
z5_g1afs%P;HD1R9fkIx3cEN!R_Gx8D_^ig2$f%Dj#(s|FzH3nnCeQVy2IWPco`4~9
z=`WDrKPKs?#DDw&w5Y%(_;JJ`sI4`$Q=p79On<O3|MFfTH4(l_;k0(wmttr2H%EY`
z;>6r`DZtcsMZ=Sm`Rx;Fz9)Te{O8`6fqnx(9hZ8cG=rG^gb*;<MlX>)%I;;L48!Pr
zaDYg1Ha4uBoBlSAMoS-9q{ILa3~A6oT6WJCgQ~)BLSXo$`Om>(y3y3EAnrDD1mu4p
zUP#LBI`M{KR_sN+IKw*SZ#%1Q>)^L9g9K|3U;oAqVzu7754<xl=#RTtPv#dZcRC=Q
zkCn@(`UDcy{BYM^GAPI)$P?Zr(h5Z+4X#o!HmEqzUf2!6_GxE<x3(<O2{;H at rg^AP
zPwB#riNf_M*ENR!s4h?LJ}+Pc0QJG|ks)hzVq^^GSP-kP^t1HB98nDYEpJ&MDECVm
z06-6TQaf*o|595(>=%f&4 at IF<mF)>g`p$xcU#(czcu^vR9VTWSDetnRMl&y6MD-)(
zFdtgPuUlaPJ-Rlvvuph2&ri%?7OJ=yIoWF_MP9iTjHw3?A1BcK__b`M*N%iyq_n&#
zN1I}IhgbartgmgY3Kf^9VT>XkS0yyT2oqeN2_ovGtlqyX8UIgr_!T_k-hRUHO&!RP
z)Y=#Oh<4ODhx$?bHqsR3d9BY%a(?LUkwm+g-hDuDL~FO_J9BV3VI@=<EsYJ#<nDKC
z_icpi|HA$H*X!zBjy@}I*yf0QsJkiNr2gkD8G!*P6vI-I<@TMAO+Gdz3SoX)1WQ-~
zNPDpiCAu$0hf{_`rd2%5_d8f9$lV~74O(;=V{*OZ+t?hMVp!%ffVf?$erXgUZv*ns
zqG^~`RkS?);@?7QAXVj7<o-7DSl78VI?5U*a9#AGtoq`MBw_Cw95z!kFtgKIufoWo
zL8!?LY#UFjj at 1Ulo8xGo$0yad2aMg&Sg0f^zK(gc8O>y9^<>z|H>^_h4p4Ae;xWv;
zDh>7g=_;QP9~GPIcXtD-NXI40wmRbXhfBH8fX}so;1P7f28#!Qt=BJSs7uK^DZac(
z8|LBK)8Hj1D@@<r{eX<^)gyEW2{&YmY{pKuR^uWO_-_MI24BCO4Y=9`ywAY22LPga
zi=+zzF30do0XeP at l~bgClwO$FqNYV)25049 at T@`zw?HQEzKMD&B!Q9_c>iBalR%A<
zef(}PB;`1vs{94H7Q3K4JJa5cnIdJ4mR_ZCiSkiMme=@7h<SM^kXRBXKHu!uTxp%%
z)jw;8WhiyGBB<i)x46!IfYZ0jv0-`9C~=*AkY8_6^F1D%Y;vd=AWWZ(HnW~9-N8R$
zY3>Rv+%GttZAuos9WE|oC*T#^i+)$E22R=_KV;^Q6La-|jx{AJoo<ivrnAq`8f}52
zd>Jt55s4Hdzu)Zs^fWXSjzC;~-Qmnoi!GCVuHq3N{G$5LynUlM7~`~;Vi)<p(o%6V
z3_Z|kOa6azJMA at skeVysefKxS6F$tg=;F4D+{oGiEVccVG90RJ(WkB;Gh8vUbw1bV
z0Gr`68}hKDCSCRjazqH7tcM7$q}6{m$(@6#d(2aM$c2dTRX+id)7p&jJ-;i4><~CJ
zjZOyO=37|^t_Xvv&tA*8{D17PZ#c}z0PN3Fi(w~DC+VrwHC%G3{3Q<R?vzMZ2EOU~
zyf&~JKG{{Aa98_vIrPrv^HhDuWFS0UJDEm8SdAi*nnVMZ11+`W<JVeY2D~Yu)sM7i
zY+YmaiH(LVU)ve25M>tfkP&!AoB3A%V?UCftEHs%7DF<F2*;P_iepiib at KE8mh%(a
zej%o|uP7j-*0P)EAUVjg^gZu0H}6YkXHLUXD+{*(tTA_WM1eH0+ at R-zme5hkAS#u*
zAdt1xCP?s7)HI%_ZCsc4t=kfsv75{P)W-A-*X29yh2MPEgHXk18a)Eev(I%Z_u(&%
z9deqxf)u!$9!G#ayX^rdx}Xd|G)V52PzCR&aCxZo2rWf@)S^@}M(?HpfuSV}j2koP
zH|}p7i5Rb|t5Ci=LL;3MiMrQL7u64YjR{?+_H)11tSqaqia%Z$xku(z2;Z1OT)FvR
z_<63AuLOC#EU3(h6)k8bU4Ykae3~YxY6exOH at 3Z##zmvZ?S%og$HlT_9mCc;Tw`K{
zc>fCeEAVOEoutoDiFld&CKyzkWREO;S5OE2Nh_V;h~NKX`|TPhMtp0_zQi{i-(H9O
zZBnMEetNA=qUHEp#?NNHDe17FfIax~Wg$HO!I0V4ZqL&z(8pyQ)rVDzd$tPVhWGUg
zP0 at 2+%vo+!m=OTE at +k%NVqC31*E98d0ucbg7cPNlNUX<Z`BE1TtxtU?OV_SgRkrTw
zhjjRSUiTUO*SZ&D3~e2rxoFL+=)#tR1R<Ozumn~z(=MB`AQH<ynRAyqWw<E}K=eyi
z_+G2f(2F|10f1myKoD9Dk?puPII1Dua%rIT?*@`h>Ue)4xvTKZv?s%lAx=)%;nOnW
zdbb0~Yu#?Uw}4eQi;l0F82Ko`6KF75zyNxl6g|!5rN;Z>fLtTnZ!JiG@)6eyu2kl~
zkOBe9?GEtLe-6W&a3JEU)vIu3PmPqikTQ`B>2VTyEWJOxm at tpJOL&b%uyR=jJjc?j
zdk7^U^CpmS#N}Uy2XoihYVZL0NaeP3TI7*<twt-_UD|C!5TFZmyoAFb+gKVj|NP+{
z5DqwLLWAO=^Wb!_Ntmtco3Fe_<BWTrV;@+VRwW~%z>}f>X1lN~O4L-C`1K>cMqPGB
zQi#zi%;WMoX&4HKso`|l6}ffhVe#Q3#7~x(TA8%z?6ZT6{BkgLK%0|ke&K{w6DnF%
zqO~)*sj4=6zge!%mKnwcs{ZzNWxy#qUj<sOQd at Yc0uieTMbViMd^R+^(wN>{KRdO+
z38fYMa{^t~dQF+=SCnM1diX&1pI?zt$5MCB2SN6BNBG=O%s8O8^B at 6WK%^autyS>5
zE-d&n6jiF!_^-^)^ENQ#eim<Fzc$Ss1tNWbWj$pSxP3P!ix|rh#y+`t_ZLRK2(|M(
z5h1d&SODRC#%k->$gGeQAfi2`Q^Wh)9ZxidQ6nNT+2z>ALxz#(pyAG8x33?<mqi;5
zK<)^*D6NmieXm at K4;*akWZ)oL@@TfA7ej2}$$=ILwUV1o_%Xw3QQ%7EX<@5(W{CYv
zgV!^UE*x@#euORRMirZJJet1A?ZPL|8S?P*`tA5 at dv1gedlj>%Gn*vsqH`PQr|9Z*
zjw+xf- at hFV)=a+T9|7pCGwD8==Fdc!jb?4erV<)q{U1n9eGP;fJeX(Q-!tkJYmWPb
zdNQX-6_c;%tNEH;dtt1siK;SOgZ7gy8kud1l+MUq<vpk4&PA^ol57lC=- at deorels
zxI_Z-43nFL7N$tHVt4M}$|ricG5IwS()-q%B3l|vnhL4T3ARFU9QFNA&=%P&iV4d(
zAkHWR`$*Gl_+%FtFx*U-+Y#?kUGB4n(w~Ux++ePIX7r0yZQD%*P2a~xj0EN?b?EWD
zNsO5TTM=#XD|{9^Aj?PaZLh`)NezW52$-CfT53i!hIX=yZCuG|7-ttC>Ozx?=E)V5
zy!+0PrN5tyn;<ggjR(zi^tU4I4}XYPR at _gOi{~81$ZK|?qHPJ0RFIa#y1*<kx?E)R
z9yT`Eo0F9%zQZ>?oT**w<ch3b^I#`M<D3sQgu`s#R<bQ5cu>Gs(lL;3FR?;WQlb2;
z3 at Iy<@MZEpvoRPv%|T1oaxu- at 7&)P{mRb81AOVQs1)4EoQ72N68pr=E$TS`DvKXA8
z&p1>Yr+jV7b&fNG%(!vj&)@M4 at xs`cjoi+-n2X41?a7eW^Zvq86Psoal8kAIVD7vn
zgDwWu;E(+td0a)ctCP$iaznJ2(g)43$HZX7E_;tpMnQGpXt at xxZ}z0KZG4c`7FD)=
z#e)KcVG`3Beq&d5wIHZDKmTrH)yfj4l0tS$E<WRxO<E?v#$+B|YukrTF>6!kXGu`w
zW;-Jgk?CE6n`YIZ7JeOpV89Z`w2Rr4`Yr#Hk@*>}A{`R9p*HWUwYSDA9q00O{YU&y
zEabx%=&yt-wZ^_AR>=d+`wXo9XkhsCG+{)KFqx3zs|LkF+dxErznt)N^J8ND;KhvK
z<Hafgin2FuS-Y!7SSc*5%noJzMWfFeQmGd at FzlQvtM=!(+Xu%f+Q-6vH&Cw?E6K>I
z`9w+N)@&dep$7)&Je)fmENWxwn#dj<og2#bUU;eDS098)!E=ZRM=vs~W@%6TBvzYE
z&90g8TCyYX&k!u4Tg5*Sk7ab~*_ff<K_f^ao_C(~oyU}`uOU3q)8#h34pIY<+)Sn+
zg$kh(@Pn}H%)&Cb&%bbOY_k2m0x+JgiBO<BADvWtp=1*3*Pn_jBRzDn4g5~gER|Sb
zwoJA}zRgZXMcWyv<6aW(Bn>j3*=jzc+`HLKd%|o=B?EW9$^IsftL1+eTKRfh^qY<L
z(*nQ;-mVv at wLMaLEDvRxSA$d0Pw%UDInEcHIM at N8M(dR}89cNnng@^&XqNnFV0Bq5
zn-yXFcY#l4EIGVpOirg4UwABv^W5uAx$cXm<w(|ORt1>B+lBgDPUBmaW0sS3UU3Iz
z9EIqR4eT)bY?S=Z*!62>=}Jyvsu5RmRk~}ex-tSsEb}UIZeUIBF1(gS>PEt_2;@X-
zrKXDf2Rp!^6_oj_5eo0pgb=u{r0LeMI(yFMUY*PvsD)63LStvzVgBR8&RHC;pIhph
zA9qvq&LUL{H>fh{Fx~0le at pqY6i{xC$~4kHy3C5M;}&`%R{=d}+t5HJEw#=4PvJN)
z=|YX`=c62q#!eTz;;5cA=*e5m-ZjKiAb?^PKn{2H#=g#K=&NzS6NdA-Tq6`Ypy1gc
zenR~^Vut??A<To%k at N@#|41%Oya2m<Y-I*RcazM8Sa5yO!*a6Uo%T6_Ras9qFn=db
zFUhjKJC4+FTk79q7ijw#%z>qW5yh!<KzqHiNx3q-yOB7 at 2f<42>gahCpXb%VM_m(U
zV1DR#u5}$ojH$Z{A%S6*YrfTrY9<YA-V};;0*Q(};TPXcnpzJ5F<;`sYCwn{h`wtk
z8KiPvJ=>W_6JPnIaxJjShUPFm<L;1<CN`#Sfp}j|v<VX4ZT|z>%YB^>B0G>IDEVs{
zmze517hS-Ad=8cIO at FrIXEyA{OeE?P?tRF>oInJ{Wd%`fBr$Vn_ps~Cg1QqYk3OJn
z5D&e!2#J8x!(XI8aD*3Az%f7&U4xcVz_syjZg^w~^_ftI6UlWkHgrM+#_6YU2q=9{
ztP5WH*%#HjSAkP{DmMkVWl~E3RuX)IMfOE=mTt2G$QGW##l`=}H at Bu2D_$o2NFDSe
zQXLJ4cYJ?KTr6USuNUN&SQE?;<fsLyV?Z at E$B`-0+a;1<esk47S9AdAw8%>-ykUyo
zL+i6F5rtP{;*!9v%5PW2;mYg%&@cOM3Edju6)V5A$IslO?~5#%M!JHzH1<*$pPL49
z{cDl<W=!qV!E)>LJ{0GKD}JJl_eIWxCqmqnmHFhCG0JWJ`f!Ao!ow3pwdno|LuFrp
zbvCGO2I4&~7vBV}60s0`>c}`M1k4!Gr^pY2>Yd at QCo&v`vH_)&;PDpIQLWrOI0m0H
za_HThucA<{>dlu!Hecp8I~@<9ZX!UotxIMD3_k-h=lk6%r)!bJ##vyn4~QD2by4-(
zc`|c_EC<!huXsKhRZBrb4mr~}W8xL|Al&<;E4DpRf9u*#q*{Wd`-on(1*gk<P{RqG
zynvGFm%b1o(caJpe~lr~EA4te(l8bHC(2onu!Bx4F5y0(c;Wl6>eRpmPO|G2cr)qJ
z&1^A5we#-!53kyo#k$iOLYJ5OR(Xu>KVqH{*KgsLyV9SK5&hwZaq;?pPy^0N!f^n(
zlGr`wj(@{;-7;wynB6$23}pNZjuTaOJC1*mjld(7JratF11C^giRkVDmNsBQF?zt1
zo-8M9<`ar;EvFpr*rdksZeE?euYt>fEHv_w3<mRxFMpMa2ebM)t&G<y-AIjVv0-uP
z{Rb4Vg(w!+f_!`Kj#aO=bMc}^iwTy$o(mT~*OXK$nc27?B_Gy&_DC1 at EAj-5`MvzT
zm=OSN?AnX2lnCcoWho_0xrx4ECOra at nSM>1(u7ezUaL-J<|%_2YIw326EIT+W)c4?
zr}p(W<iMLA3+7$cB5^T~?X+Z-#s~=e=eG+hK#hW+QA2B<sd=>l_)1i2p+{{Ip07Z`
z3?wbKG~;;BukX)d0%|3PK3px{rsx3*VvZ*L1Db+nRQzQ(Fy)pgw~v*xR9 at ysB^t{<
zmA5!FWLb@<lXJu`ti44)F?+>qdl$&Cz{Kwb5Ii-hR~+=D4CVE8vogo at 6=o|{Ef4iN
zfzvt797~Rr^**a0(X+V3kQSeGL}QG at lDXEvqzM^nGhf7jBBBa+-Giqc*c9A;8z2}b
zd(b=TvvPO)r3E_Gr#)?&YxenDr=rFcI#6m=3L0tvykJy<KnMT|;OTVNWc at p@HU0<_
z^p8bQZc`?x>Sxk2fm`c@`nsqcO27Z}eF$zZb%?T*Cf?{gf!^~J(w;mlT`mVriQ1=4
zi4^LGB|1C%x!Xym#kq0&v66%%k6M1WhYxM727WFpw<cQ0F4$AT1>{2EHoq?<jHS%c
zNw&nA>Ru&&k=pgwFz1p0X%!dNW7KeF$0|-rF*RjNL at l=sQv7{hv2Je#QV7|zekcUb
z%_AsLEm6+h(O|>z8)CA{EEr9iNoags26x~+@<SrdJdwDZ;a3c}H%0hMktJXQkiL%e
zTv+f6FM at x>s_Eg~!`TpVNJK87inQf33rPafdNuypJ#ON at +x+A^+qwC?gNRpLA*@pT
z5KomzQYD5$tO%}2g_{nb8mMoX247LNoQvHZ!+1KIw!NWEjuMq9s__fC*|*)Q6Vpyr
z0K4IRCmGpXHwN?~bl=0%;Vhv)AKkRGA2!N~KT9bJKW9CfYxOU_OLa;M6mX^Py1ZJ`
z`SjNCX-G<~tEacx(dkRWl?z at Zs#27!ubEC>1_oOR3MTsoW6`h=AEHNfu8B=IDLOYM
z?XVpR{ycRj6kILtN7m^Yy<ZQrod|(<2hcqXT~bDEMtuPpY_9228CakmTi7eA>7mwu
zm&(GdQmQzO at 72GV?}YZxpDIi5^(gn{?W3^*saXpTRV0f8rpjwGYhnTSC_vL5nM%l<
zTw%4We&_LT)b)y}G`lG=`Nb%E0^>Vuh?8Kxb3Yx!T#LV2zs$+GN(rw3YBg#+H%@<T
zm*3;J!*hVT{=QuWt_l+`yf*5X&=-f|%OoT4A>MaXNp=B%5BoRpHFw!7KVJvPU&<l)
znL`(b>sR&gW9hlbrp6g<J>B1WGZ>I#hNmC#F%oLYvF(`ZUX^4O4+yd)EN97~Gw|Ow
zl%JeyuL)uv5I~b>^;zkwB>n#Fls#w=4gOUo%S#l-qw$C3RQazYtJ<S33;lY#oW%{U
zX*|5PDDDm#TdOY0Mdp_cjr<@lF~z9!!Q~k^jAcxYWQWAzi&FS1Rp}LRz0ir(>`ZIz
zv1`NxuyhDOP7|$SdwEB^#Zt3EsfKHU0q(b at sxwg3?r6``C!`)l)2vrXa+jA01cy6d
zYfaWfPy-=Z5x5QaPxvXZYXeJvqLZm{kZVfs&8JhghIUn#5$0^+xh+tA^sK3;cv|UF
zwOh%wqa4J|${MX631m+W{v~ld3I%YT3eYw)eJv=D(q?XI`h<LFpfkfD+i{T}NGQ6I
zz6~LAp_E3K)Aewmb at e+nPOJls1s&&dJ1xb1iV(zMfIx!cqf6Y25?gy)t5N^?T0uaR
zGIbLDcSMf<$%_8#<!`j;9{qL<Gs+Ksic8r<iPjn8UyVJ=Pq9P|c3>(!DR<bUOJ$|j
zJjGt$;Si=l$fqP at Q9^iqO{qHwm7bK{<4s}@l&^WSTd=KM^)=p_6mUTtW}&rpyP%EM
zD-rhEM`iAI>v0zVi)EFm$F at cOof^6-86atsZo~YIew`Mgk^(giuo7|Jumc<3amf%R
zx^#>2In4kx|B;<R$wV|y)!#s9Z9fMRQSI1_<sn&wF8=mffrN2}b(WCG+Z+?mOS8G9
z)q!&A5!HbMSt#XHGB6V2NR_>nET?3T80JOC)>rpYWwM&<CiCkp#Sc!c=31gZM!dY!
z8@&=3!jd^zZ<sJlZ at ev~`B}}Wqa+Hi#F&kQ7(XwE4Aw^oX*%OX>`*>r!YgV8?9VWU
zW{o{#^%}gHNT?T?Tv%IFj_K+=eMMjVJQpGvSx0ScF3TX8Kd~wAgJ8ti=kigxEoQ8|
z5UUi_)x|bEv<xf^XE=r#=tmr0^R+P35oUvbv&qZ{PXS#KK!;-$Z5JpBbM#CWkLj6R
z at BKL0DapDJm|d{v%md;XHq~i$5vD;mdR+*Bj^OV|-juh|ffqThhst1k!PUB>MOC=p
z at I?CyE`m=F=4GFR{=23WJmDK1XX2tff}RCn2U-cIl-9sGX+R2{$$d at 7(S>F4K*j*>
zx;DbS7h?dKNcNvFQ`?&`JEFugluU1z7TP(SNw4Nam%3I=;5$o~!>Z;fp?EKbjAd-p
z$rUl-RGOxI%_<}Hc-5c$nHYWno&DaYLPa?w at 3~X*(T8tBDj%fUO?%gQDv*S)PaDKk
zJn-%4M|``2S`UKwqF{n{Se+dxZve=1=`e%?yGt8u$43 at R0tj%RidX+%n93#S;WdaV
zBm_CeX|1Evow)FX=~k}7*%uOaFoI*)-83r5X!weoPF`p;c~rkdDdZKknEO7Nb>HIp
zv|R6A{&$U-=&aN9er70zL5_O_i1fI8xVix&wIBQ(gPDzSEwXV!pV4t at L?bu&Km;sc
z8BDYX)IA0ONghDu;?g6PGYex!P_w$HFso;$_So(Ona?bUCwic`xavk?NJ0C$l^cg_
zR9Y3zXAJ?b=o9yuI|cm!y>4gX6yQ9M-p^K2OxwZn8d288K1-Lal&p93Bf<TQGfDTr
z|Fcg37wv;0=!5ll-w;v2E=UAH3i`VjtRo&z(;S2U(lv4xQug;RUxVIp>Ky#RXNkdX
zUbb}#P9`*>O_AeiJpfYGhTf-yP?gf(cZ?{M+GhLp<>pj at v|mW$l09_EurNssa&-Mw
zb)ha at vj0PHkM!9=su$Rf`fb*_5KchaqyEyG+4-TlgVfKr-r{sSwLdoqqY*w=X3|$<
zVP_Qrz at iiMNT!(HKl_C8RKC*`ZogbkIl++^6tu&L{`n!fx4(Cii<Nz1osTu`D^0>C
zRtWSjHN_6UQEK!M;Ky_!69W at rnj<3bjH}alalcjz;G+8}=;vOW!mDxB- at SwBM@W<)
z^^m34Q~P)#xC3iD)$FQty~0$yQCm-2^dkBGU23Yv9VdekR_3IDMVf at sh*)(|`Jg?~
zau?7k2rsbYwNA1)S|(v;e6<I<Jh_HU)oxC!6V5#<)t__;)$-hX^^ibJ+LrV-wRRiq
zm8eq5nMTG#-kCodpoaskV;l*Ac3d(l%uuML)~{Gr+H=}9{=-E(w0 at flf&GCD2>WN_
z7?Nr>rn7_gMx at dD3I?tib;%aNtNe39SPHxT5E^H2WDyl}I=N=rv(^TB8u%I4VigS$
z<U?~Ga27JSOMycFCQo1&APY_(&m`w!L=GRiu)2x53c at tP@#yUbK~GM44d$X#&HEK<
z)V_MO(!yAq5}mb<m~4nW7dK_WwoS3>elB+^T9l<dw0+$6J!9CPYkhLd_OztG41J9w
zQ+Vlh1mkTs3}=ulY|k1A at s2B*&zbbiW)hjfmmNUDWj-%F9N`pK>a_OMCyoIKX4xgm
z&<~w(uh`)H7AIbz>S4(uJSZ>TMf|q^8lM~5Mx*3a%p>U?<dG?**JZ;PQ9_Q(z+sH|
zq?}~?H4SP0C_gUTfXl`EHm~9_!d9SJ;W6W8-KXQs3VK!A>6l)IJ30B8t;jlkn%XwU
z_z5<ZJKF~3&Vr-L6oZ<DohuNd*RE^PWDQqtiXweU$JPI%c8_^v8Px|_hx?#pjVOQ6
zq*Uy$pfxJao^L+c?5h1W?sAND4^Vfm+5d$<YZqz}V|^XmUNRP(!t)CGP%w}Z{$HV*
zPWqO{_-~#n{TY%$aj0 at bRf4MbAy7E6&8veUkNupfSyvPqcFZq+0SL1G%QS~<UfPg>
zL-uu!iEdwI5TX#o at e?g-%iBbFwJkNR%Ow6Hff)HEolPj~ijTTpBAfgaa;cmC)FE|>
zP=hx#Z)ebj7mrlR_l&J=!o6C=70kg~HL3Sge(0hJG%vp1CfXQ$pc~Agq)^Vu9Lv<v
zRA-&#hrf at +tO*SAo|_qOX#61!C1pph<_OI{1 at N>>=czmvcSv0A8fFYazbWlqr+e4a
z-uOW4KtlRbldg~}i}#taecE)?$0X%&TmZ4qxCV*+X2GiLp3gtOVSFj5KcU}LD&m`z
zAF?)_Ku)8k2nK?^>23aD$NaKLbq2BSQ@|E=<#2yk`QWo&)pZkk=_y?*N@}OJn^I^#
zopX-B<dxMo(N-I)$ylxJ>b0QkYL^r4M9xbs0^pRU;((+u?A?!vV>Ix6l7(52lcLSe
zTu=e>Iw`DnI%IZ$R>$GieTw*D5{g514Y#Z~{sJ at TD=j9FZ_kYSf8~gHiRo?C<?RUL
zD|ihV{=fx2%t839>4Gbf5;gmJP!<8lV at K9HwM!&^E$E^+HZR4OZ_|pG+P<Nd`t~jo
z%WQEQR#LMrG6WD`tuIUc$eYb9s6JVad2Cs^f;Rr%M-uEsgX7oxWbLgCx at 40e!>N7l
znL}_U;DxzDG<`#b#8FkrZ5z#jQPiD)tcEG1BLW(3B;^|wFp>^XMgA24xUb}d#QC$E
z-0TK_>cpguO at F!~%snTB2Lvu-Y1>&Z_3Cc~C_0To{ilU6Ml|(fcXufI`T+JCixa^x
z7tvWgNDOi}iltA>OGMU=hU!}evd9k;H%BBw)V5J%r-b86gau>6>ZQH%&B!h$34<!2
zs0#B447oJ;n6BzYa2Zkn82CO!vmo>u9V)Khu_wsio*GcyCEDR!#{1hPHsXXM2%@lO
ziaTHyJ08W*Qgs>FANX!-V$DxNFcTu|GI3kXVMjx+Wg)5bGRfPHB!D_rU4VMN0PVr2
zw4H%)Q*(ADke?S|Lk13T at V3gCDr5ft``DWcFj+O&Y0bwQ)DBmjHYi-5vkh*I%A=Jm
zeu}n`2cgXz@@kE!Fo&-SS1hh>dZvOV{uOnl?2Gt@)9#N}nu9j6(lDlk*~ItS(NVgw
zuQod~oOMp1G2t|?`QAy6UX6m5(O+7Kp^*NK8Yn~`QUDOO2bgVUVIXDfjTfY%Urlkq
zsKPfbI!3%p3 at z)ZjXCC8y-Lff0<+F%?69>XdNqWMayitjHH at caCL7dOC(De&?6-d7
z+G^IKwKgiFJ&G;qr>&LP+v&3K+XM-)H8}G1#h<$EorSxR<TW0BWk+M4r{P%q-kF2c
zDuBc$FH2VPde&qz7!mHGivp)ObVS{fL-zu%FnY9<>O!H9S}skKX<Os997bRiYbanC
zy^~>k>aGD0DJMPrXu;D)VSNUWBdznk?Sj#H7Ywy>jhPEX at Mhu?c=_kadWv at riO$n3
zM4qZ8ZVQ)<gCV*4_X;F&2qxm at mVD^Lu56aEsXrME*fCU^Tb^*#6nDt#;(#XOWIx4<
zM&gUV7aKXQFp#BUfsiui7*y=|A~}*b)Beudu)*sr-hY!dB-r*w&P}!wP at jGibSkR=
z>z3L;u1 at ik(R$FIqu92p^WxVm5AQc7WZ;SCq2gL`zT77lnY{7nlu7h_Z3BcjJcC^o
z8u4omB7Aj*saQ`bFXTex-C1%?_V=aFq(`GD8z0)XeL*KfpSv~CA2Pp-ZUDXa0p}<9
zovH8KN}rp$Oz5JqOPswoV_k=;p^--Q|60%0vvwVWGrl|DT!ij%&@h-4)a<ETj3i8F
z2G#SUv}NwqjGUyF_!Q*W=@!~*AY at y@_AG7y8gw?H!U7DLW5AsF#e(lt0OFaFnK~=6
z^=$77Ym at mB9|EGCI?=;jFon(QG?%Br=X at 1y8!+GhVgRk5*EG535z}k8(NBn~XB4!-
zpOr3)k!@$5k8T3ESF)I at xN#1TdNO?L at T`~#bN_~@rM++oGfcJNQ+ar3;3|9k&qOoo
zpK9=O9NiIJHwJ;MPbgzL1M;peUImJzB)Q9xG&WFn!l7);q*y3X#-~6tYQV-Jt$CI_
zK9+f5ok#v0fQ%AM<;9M1>~{^rf0v)3CbaZ at u_*!VE-`Klafz<r5PU`qasMN7wpZMO
zF^LKwl at G-pu4ZI>{UA*9Zqw!R_al?StfBxU<NNR9oSWI at p&EIlv?=uK7dv_Jyq;8i
zd7_8byBr+=JwU?0l42DUQ%bstVSF7hCHVmInLJpWT|)UT*gycVq at H>+&)}JCKoL~E
zMLekInwe*&z0BEOvrcg|M?MR|rO)8&?u$tF?I6?q?@;tbPl(xmpOxe0b$)ZQslAME
z%Q>^btjrF2z~ft-3of0d)U*;iAzO|YWG?_33=)UVXYZXwzn43Pk#OGG*iwAFD9C^X
zOL+9vn5?U*j{iZP^adVt?7e$vRj1m;^|A02-0uQF+D5WcDtN9sTBc+@?tKIs3yINw
zA%Wkx`u1jqEov|+0ay%xw|Z4bu*~0{V<xzC%#3S<Ky7Qyd at cc!on<(~_o_x}-wEu*
zm$5j_&KX at d88lmCJAx?GTPTU}P at OYL*u<}M`+pw0A^?s=OG>+03DXjFJORwNHcR5C
z-WRAFz-yQzApkGaK#t6=FqeANjl2%VZ*eytfAI!klp|0_wZ2Nnn3 at 5;+4QNo`7vA~
z5PLE`$Fay!2OeVU4}DM~*3E4m2bX%cDvn<ffgCecB;OR>s?m8_Mg4~^04e6AMhu(%
zD(YYLY{HlYo?ZfTlH2lbEOJluy~L-!Ve4BaXi at -g`qr}yg;M~xx6(TKbeEB1K$E0^
zry``!74b2b(InV6bn6QJ&W)FdFoj?_tQ6KP4AA7Jk&f|g2Ci@>o%r;EhB%_0(mmNO
zczWU- at g6m`Dc+oBTkr>bIh=S4ioWG`+;r}kBlIN%J<BA5(pz>w`Ikb9kEpVn(NMx)
zR+6tC=b~8C`a}Y(akV1JD&Kw%FTkksFSG1 at v#;&M8>7}RVXA`P at +n-O*T}`PK1Hh?
zT#;$Cuf*kl=fEr}*GRuhqo<I}`RMJH{JoX9riNSrVh2p}?u*)z5vz6^`5+n9Y?wxZ
zs6C<}Im|4yf&e(u<(qP-xg%>S=f6g3YSu^m-;&zL!Pmgu`?P at tb`@I?3FOH&E=x98
zP;LSDqwL*uT?nAz`Yu*05Rlm%qOi~4Jd3YR`buw~&sB)SmnBSZGn<9FMeA;Dc607b
z%2iB<>9eC-ZK%>nf91-1!Z(dq=Ar2tIoS3EnM-eWG-ZJtZR7negtNd{*dQpiD+)Bf
z7#89|W{E at 3^K1V!ZsTTljCr}4+=`6M0MDgI^4Op7 at _d4_mmFr|7!;PKS^T6I#E#I-
z)KIeO*R1Kc&n&XleG_ at j`K)HD$je08-tkH}=7Q(*7 at ryd6L>IK)~nNJk9K)tX>s0N
zCbhf3`ijtsfe`hSY6d#&AyA!WQ*$?Y7ZI^vC|vaBM(Eb$%C|o7He|?`48tOZD-IKk
z;f*~n@?#zyCh7A?y{>aL;XF`cEfEcrpDBYv>xk<E&#|5$8~28{O)~J6{>SBL8j5#5
zDVIAag#X{Ou59cE(MxAOEbJmG at k>pEH9-f<p at g!8{X27GY)z;r1wW!EeQKqgD!!+K
zBEsz(4Uut1U?>~(0g&09jxe!mkogf$n%Kf)_>&N{)5N#3*?M0Oi6GC0#p9#z4Qv!*
zH=w(4^&<TK at M>|UV{J9coz&4gI;}7Z9svVfUfM?$U^gC++Or39>TQtU`;YfZF_*&4
z^^4q;*B?VcoL7|rUid=bf~m?nmR$uif3%-ML!jwF2nLgVqzWy%LDa0;qSI at n;6ij=
zkNGVgT)L(FKUt;Phn)R#RwD~1CYXK93?Lb6r^Ts1PX_Ea&z|HztSq&li7m7UDghV=
zAZmI8W$c~81FR{AZ*T!m%s6>}QuwKA4>h(z+i|z4fI<<8LkIh1Z#tH7%z7(0P$)!n
zgkG7icb|sC9T<P|>dJ|4ftaX8x1a5bFEti~jOEP}>it!-7Fpf!Xzw8KtK6$<hj<A|
z)!9zPuA~xqH{htXHm&5u6Iw&oI1fX5i{C;=%NACxiQReQV@`@~_b at 9`uF+yfFDr_v
z)dJd>9Vzjy-@$lizR)&^^Ig^$$(DT>y7lk(1ckVX$R502g|Ha$=fh<DhdxN?uXzgs
zrX!s}SNP at 8ulnnMg)sfD;g|VtR+mf?I)0CSl0bJ}M9t^*GeI*N#N1P=EsO225Cr_R
zHD*gN`xj<SUFXH$1W+pB2gRqvON6a*_ukK>(=YX0Z83tauwp*}{NmH)QCym?byYJ{
zyAn<0ZO^)fex3y+Cc=1Pt9JEAGClmiX2_H<O{kqTe2LWiFEeYi&6mU}BK4HFz}e*w
zdw3F=X;xDRUXi!61!ujg(nMO(n+RX?HeE<bBF-)sAO}5mL=A+_pPH(TYjBnYD5qbU
zFEILZkLm~MQa;HfUjaFbbO5?O)s&pCir28?v(Onf0mH+Gp&mxc3MSZWgD%y)oCjYu
zzrjlVUDg&;xlP}buuUyxNP|I at 02+&p<3 at 2)8K#^e6Rf1JryW!emu_?@X+0Kg0Ca{r
zP_0T at 8B7M#<>)AD%_KokHK4H$Z7EYu7CeIxprc!PcoVbduO8(<&aQot)6!Msqlok!
zHB7}_g}}jyOsT0t8!PSym7;*eMuAP65sB+0=P)^(HjC_Hm1R&DI^T+yS}f=miB??>
z;wB&ogZkDvF at _(0!tq2MNJ~yQBPo%qhJC`CzfA6M-ncqzm|Kb>GQu at +9YWhs^tRQT
zAF`%8V3Jq_RBoA*L4ml3=7S<#Mzz3nnTLy9CnFf9T#2>tVirBRpQ~fv`<D$`lSal3
zumP_uxA6hQ8Eu*BmpXzrY@@L8uwV(#j^vMA9YlLv5B&XnQE#jq2_Qjtm16pflCpu)
zM97{ihsV5En1*gqp{$o>@rz!$wm>K4lN?xH!3<EciE=cK)qLrCZUy<yP+wF3c8^?Y
zALQUn at RC(fkkh}f<0b6<8Br%DERp2c)1sFnF3u+zps-PD$4{K+8INxowK*W6#?{Za
zYmAFL%zkM`DHS7f>fqmqQN+s at I9e@c$zkewU1%c_X*gPndb~0y6Hf0wze87Y?z-<#
z9Q>W1s- at C%9_;ClytvmMCq97gTL<%=NPjzG_Sp&y9OmH{(d(kYZYIV)j at 8xxbfQi7
z=z%BfEFc0;evWOfcpm|H08<NXNE2%9+VGT3!I8+2xCSodBSff(MMf^{DH6kkbv1l~
zNy-^VcsnFwKI?g(YnS7;l{hc|;rs3+u;TyoM}5cNqne)=EZ(UyAA^|t(Fts)T72Jy
zCf87J_0ag9r#l%wh5NN^w1Q$&P_?e6-cpW0m^wtlZ^Z8j4XiCZtYpyAn&}#paIt2(
z^NNvBFx{#rZo9*n+yXdO$B1Q6=nZZ%mB13FgwrD0r*arB at V9g*bDabX)J&%f_P;v?
z2&>p^==CH4f1qd!sGQ8It(mWiW&Vf1738IxBITw1%)nbf%tHzHSi{#W8k21_IF-d~
z%=O|~Hm*$yzRE^#8XNoqO%E=PWy_u8ykLPpj(6OQGj?`i6BFj2<dJ3%U3G=|pey+n
zTWke<8#Yq!DnkTV&=T7IEQzn6x at MsM%|XY*!{O7|yW3 at H$al~VBWT~=!d~jp$|qR7
zCE4vxJa%(tX&Zr)VlIR2?H+RaiH$_OC&FH))f&Mqa9l#6!J0`c>$u`}<=#D{<zlVB
zxSS0m9_l-G)lMR<JmnVRMsU#d>dh at My<sf at vAt5=$?OqPB^PNMmE&^EkL{$IY{xd@
zbYlZ^Xe|0?G7DGra4i at Wrt(HAU~vf-LoAoK$?hRdVg6@$sj%mz;4$bL2ckX{N-PTg
z?Nv#M=Mj0+X$0U=xC^UeNgk}_Eu7_1<*{mSpD at v2%p&qYy9K5HI4<uCkgBEZmqzYV
zstOIayy^BRY8Cm~HsSy;x&is_(iS|$C|ZH4=?5jo at cM3{tZV<kFMJ)FK~PDO_5VSE
z0T33HZu>rZVWIt^Pu=)B7Y!~n_G6b;D)F>J53(hw_yW8bdx}q-`<-*4x*{iVU3A7M
z<o<C(K2qO|IzQxUYZ66Oe&nBqJf3f0iWSRc{@K8-v)sD-+m3s=nTYw4zcLJJ>;QPR
z^qN}T(^x-|#|gT3+@=`ovmo8pvR&q>4%?Ao_vE-(KGX~6iUBvAMHQjIw?8B+B!E)g
z8q^wauqY7icIZJ2pdZ6_!*zz{{~rOYH#T6L$~YmqTuS;FH3-fAdHfcj6BqL6Z#YJv
zWGa*c{;A<Aic8zBx~o|vr-;j1O0wt*F<S4Qk+am`LGrkF<EQCp9NG;DxYx$2*La=d
zVs~{~fblH{%Ia2xh9n#)>bKzZ5CWr95!#Ed+Lf*3RK*B{Z!^GZ`;qg->^qzcFNHUH
z!fV+x!C2YLrsVLC4u5uA%NrZsKsVZ_46*aHX+|>Tb>I?&2))#WodAY;7J%qJoL*!)
zIL*4ugb9YrzL53WzsJSTuLs-?L*Q?gF{K*nk#J%&@TbdnvGwSYz_NEg6hr8wFpCzj
z4q-^DgWIPrkzhuUj+OUb-mRk~X$Mt7<^v9C&baR%WnA1eB*jqhAdd94b-s4hZN$C_
zA>|C7 at a_a=Gx1^nRV+(dmx(1QEn0pg4OsOvvP>lvaiyAV at cecId12XT1(}0C^Dbj-
z3FD4amS2n9R_arLpqObD`>oj~&A-N6p8nrTfy1XO*^o&t7qXXc4a{*um=kQNhRp#a
zQhU<q!Vp43yGiph6HHHhoW)o|9e9WDY~Df2%!uJqo1PQc**g4MOKI0L(vk#H2C5Ai
zw%)=bAtX?9a^{fhii<|M<^_qVu1%L&yfT{>o1+<m7Y)<j_BQ*0>xVPaN&LYginE7W
zN2^$_2M?Y+dVeojiAc4k9Y=Q%R=<l6Ag*PxsuS0WAdK%02fJJeJYV}gDN#O>tJxI^
zMJ~1Z^@&C=gOoRNn!65`uDL47M;-_tMx5Y>sb>xfCApzzo76V!j9KnNI1dn<^BI-0
znX6wUKUK%u(gV0#L;SQd+<JLFr{8@);bv593EY^+P#s8oq3C#J*lq5v)jl`6_eAdn
zT at O7ZXI2c7u=tO(mvPN-(|<@UhFf_mM<jZoQgus2^z4N9*o at rwdF93++y^XpEVH0p
zm7MVm>{yW_*|4wgqe2c4bt*bWLT(}5NC;VAeE0;^is=>gfJaI at 8%irDysOhFobl}C
zTx7GaV?0=`oxlfklP=K?S|@R6v(*X7Wq~E!^O4Sh-k(zvZYF~a_<Gqtm<(*)559u1
zUkfv+CPrnqrKoAwPn5aw<bGmYw+hH>V0exbBij7^;gn}XYx~1vKbydzO71DKWl1ty
za}Yj-r0CAp%w@<U!8Mt+hLe!y*v?Lqf7;`T%vAlA73j|sgrL3rL;0Ezub}O2(47Z>
zs&$ir71)#iQXIz(?`tU>e}Crru}YlMl$XO*FkIy*)7%tyYPL;42aEr*leT7Rv-Y at 8
z<8~@yD{g<nbK&VMD83)Ld<8t`$s)dTjnmpB`v~a|EOQ+{ZGxwJtjKgpr5Wu2UlU`t
zM3V{jD1KsoufWC4G~<oziM5?<g@=Q_uB~>JOh7e;LK4>?Z0Z8q|IP4GDG_KbPlT at V
z6E>)>6Q|lYeR+?w{`?uUTK}tmaw%_Fm!~wObgh25wMrhT;skw(VT)Fn#{Ekf_5kBe
zkMHp`TN`!L0gYhd^>wJXNN#Fb>=@3CkvM+o*6MNGjJb80+wm4z;_Y~jYXi_3>c0XY
zcks&3q5y_;(X6Tq<YfraucaFJkx{24uuHlmp4g=+hJli6{jx_%wY$GxLdIrJ<DlMi
zKg2cOW7o?a!A&oF?P!<iDV?hTNX6OHUbh=tsYo1Bl@?A&8_3RVv6_{zlxLDbA;hr8
zz*rHq&N<i*Dj`H<J96To6FpujN{A;Sd=CxWj7O4ImLA?v`X!OHi1#x%XY>KKu)-7Y
z)@6$cPyATLpK8L>x%A_%QVI(VW{{_t4iHx|OGEEyi!pA{IBC4$nt@^CpXB=R7_yZd
z;vm2EZr)njP-ovD>=s*DxW75b44>&2iRjhWw^p$pzT>}_YJfP^k40QTB=OEu5pOkU
zuBFV1)L`@wE`gKW$NH7Lgl2d}lO207PQp?Rke#64Cj5i7#MohE>eo^D^03Ai5Jb|+
z!vrFqRs*24SFn1b;vZ_e8#$n5#b^3kj_64p&WP_6E6H<45o2}+$G|W+1}Lv12Iy8l
z at 5H`Z<CzZBt}7a#{Edmb&Grn&M;*IaYULQdNNTiLvKW53q#%9FA#a$;7P%4(mU9v6
zkY;zIln$;AC5bLkI;g>z&~)aI`HL3OHVdri0qP;WL7L%A$l1iPU^I(`VNOeCma+R$
z86M+e3CUY6FU#mpjNp|<GRmB6(9gXAey-K1>nzt9j8E;}dK^oYoT^LNaYdp)FchA&
z>l#4K+g&dYf!77fapNWzrXQK5#?>iS6T`S#pxaOnhGYt>xCVlkPg~(_Y)z2^^mM9)
z;@R{ab<xBf1tc5ZJT8ajtUsiN1x6;3N0Gx3Gv-wCKBrO19DsY7K3__Q0kWk5c7?1?
z+0PAM-KP49QBaFSXy<68Wz)}EHFpb+3_uR)gYT;wH|g~X`xG0dLyIb6Jvfj0l)JoH
zE$dObK8L_M?eE~<#cbr8j&)z|S;xIoeYMsfrv at ot1xKg^WI4c4F-G$@d9B&VuR`ZB
zh>SDWS9?y-K!y|>=LPkb$i=tZ<(Of%BawnhL$4qgaYsL(<zJsE814ZlQFl;SE3bc5
zF$atOOz_c-7oTjK_LD<+nI_t6#EbK;83OZyE{$zu4obMVAp=WJ-33WF1_ly?h7(Pd
z$}cWYNPfS|#U5(&35BS&B5|?W{Me{u2Ec at v9@}Y{4LD!1+=t=w6wV+L65*|Fo-X3Y
z9S;35Qgfbm4L|=f&;xDgOIutd%r%dWWSAj2O;`UNq^qRB9G%P_o+Z?J>sJKtx{B)m
ze|R-L0;h~60)s&`qCQMn`%fFswzyTlO=^iEg}?i!6Z~<~d=H9*P#>zI$BOIXKx-(e
zDO^}YgA4UGKD$AYkZG~;$y2q_4m>3Hsm)UrZUSv%BWM^9a__hTw5xh8_NKE0Tvd)j
z4LU!rUj({imTxWRA8SZ?AQWG93^>)cshhm7Y!4i at Zp_HROS5c>hywM at X=pS~_Xffr
zP}jMT at SO+yJq|hW2)MI<)&GAbd((6iaInQ*Br|Ixl^2y=Smbkm-u1xM&Rd6XUHUD!
zYyz4i&VO}*5Hn+dKWsq_TihBy7RMKypcs<>wWD4k5o(;3J=m*}Tb~I`tnlG|*McU-
zo&gMxgcvc{k#FgLM}nJ769MFwa`_OEw7VHc;xpm$3&?vYxi)WUy<6D(b5J9!3Ct8?
zwJu)0-U#4sL4<GXjt?p`y)ho8W<E~9wG0(qV-A0CvuLcnN#~UNT0Srv-nZi<G&W+G
z>JF*E4&;0!#(%Yn%e7&5P`!UESl~PP6eR=4idy%o9rKzh5iv>4fC=Knp$*||z}k|(
zj25x%Lkf$qXsr%SKi#>7x-IG~8EZSt*r^>-m`(3ih`i_ilLllVl_#QlWCOC5*^Xut
zoUv)7PcRa-4G6xdXPT=SvE1aFi``hM)X!`A(zOnfilA`xBxwt1Mn?<lIbjM``t60B
z69nh8xf$Yc at 2i0@OCwg=J~EDHurf;iyts|Wzr9GPYvP2{vQ}T<j2xbtD`{#DK_#)B
z;;r}yn;2n&``!{k9Ion+l85&N%aSiZBs8lhcmi`;xm(ecWX&`qLKc`v>EqSF6Z1wC
z81Ot75mD#2l*bZLt^uX-CV*hL24|G)GehXKaKoek9)m>}`hf=ww4bL)Y)1`P32RlP
zVvbPXKV}?eZwpI=K%HUY{~u>4C4JB--`4P9vfSV3{(BzW+;P->J#^l_zzGhu+H{QH
zzs>1=`9u5GgNW#L>n1+5^crUg0j4M7t9x at WwC>=LORB6P$xBDICSkqlDab0qG_f~D
zq;rSb`2<*8urI|~R#e@$Qr2&vfYoypLr2=&CKw;<T%6{zYIl)sTxJ0<a8Ih}L+ODt
z9oDo0JD$W;rd_n*hElP#eAl;cXRIU<FEio1Ok59kTn<bltwwa|=)_OSsS?K!K+<-#
z&LzacycC4wbPwPaYI*3RHWjd at m#tO=MW|s;9g(EJzv}&ivkh=C$?@5-R%le)pjnQP
zhN?eDn*m<k?~h(N at CY-umE%uWJ?g at 0;`pvs&DJgVvgitwYAiuhgeFVEdkW6(5`pzk
z=xlDNf>$jyio at K`YYM{_g%1|~<~pv!f|PGENWeEI1nIlQcZ~Cj*GZcgVV1i7JRC45
zUw7O~m{TFuUbHswBCm=*0-~4tzf?SUPgf*lGCHz;67&k#X4u$N%@6gl`SGM*tX&Uk
zsEv46cAFW>r#8PI-NtMO@^uY#1$So^V12xK`dg52%^yFE)fMOl1AS8_g9K8o9OHm|
z^!(JD7C~d_ZhmfX>lxyXdj~wbdKRD0e+}F8Y-nmER(4?5v_x4Uu(u|xR(Q4oyShIw
z;?|$}R-F?Q50St!M at TpSDE*V5Mn1e6c`;f*(Noqa4Wl_}uK@#@IZi)R+r+PAI=Uxs
zkTrsOx)US@^oYe<ZGYW_V>RT2VDkgWuZw0%qaLm;$HCSY1?~|c)=6z6)ACKad|h8I
zV7+8V%Nw$)OPuM!CYy23qp6=jK{H(F1NS8lyY!`d)P8n~U%y1+;O>o_O5O8~=px63
z4EVD6TEg<-aJ%{-U*aEeC~b9s)a3jKVqzWv5N2V93{D9Cca6$=zZzX|Sh3?r;SEWZ
zj+;PYz^@@X1<`P&nGKQo)1&qg=q;mNyn{JvIzYg-V2ud1Jiiha$NdslW+=*~+Sve1
zg-r)a?88r7Tk?<djPGZ=+$eQ?4{Xo#(@H&E3i<nqyW}$<#WGnMytlfD7I(vHG``8S
z at vD`a<ZrDOzR-k`#DMTsR(m<I%?f1%@jDmG8{(<6o9_{{XfB^=n!@ZWDYXk0eqFz<
znsZVWNV6jOS=0YXLHvqP-S^pwZ>PlTYPRcB%$$f<{nX7jw=U@?V~9iK>P?Lbl`z*s
z?sLkwK=y(67GhXMe;xBjMAn?M4~qMAD){aJsFzfeJ2rm+RWULk3aP24lFxG(d(3~}
zu{Dd2$9iR8N0rc$sxQw|4KEh@{C~;6TGjH at 0l2c`qcEaRorXM5d#Yc6%T(tqwW6T&
z76HT3ne at y;rT4g4fhSpJu)W(bQ(hbUllaNV8`?0~YOuf8zhwszKAVBQk7XarWb-L4
zG9?+o#u>l_^W%WXc+|}(FD7c*{7Uh*pSG8s5`}2ynCdITe*r>8!k`v7vfI_=Voj?O
zhG{e{+f%eGQ=;LlSUDe=jp&(YiByCEK#+jeAABC at zw1{aeaXW*@N`Tnd$Ew<3T^ZG
z;T|v5o+_;ZBJJYyG`@4UsJ6fdlz;3q(M{<JrK4D#??J(`wMdJ1;gj09V+W-5o5?x(
z%2;_Eao{!0FHk&3**!L-ik at -)Zf;+`V2VMw<&lR4qBXW*%45h%rvsgBN}sWYb9rNm
zA-#9-Md}NXYaw}?Qv)_0-d_p_clLsWael2I9p!4 at y|0J)LAn;u66W3^pMy_;amKL-
zcQ3AGOw$A`p66arX$0brTf+<uf2<Z+wz5q*%k(lhGif#0b-6Peu|ZJolh)YhfPclW
zA1j7*1}nY$iV?Wrh+#^fi9k4f4t<h;t3UO|b%EdT&fE$W<^f0 at sMqh<TQ5c}28mgQ
z6?a;$!)uHQ?{3H<AZ(QaPdP!nimq?I58v+Z;T|Pk5L?jPJRF2Ud3s~%M(pfNuN=>B
z-*gN-Z}nzv7GM%TA^T}Id(~mhg9r`h0QcU-!+Tb%`;Bsq<7LAoHqk;8nw_hrUbLFu
z6kYiniG?wZz5Lp>Y5f)Cmrlk83IKtlwWmdqt?l5Es80Tl0BgO5Rp=6H8i1JdV2bC<
zaXP(fnY;@Vf7EwRt+8RuBV|4b4PYsX21PTG(r=VD$BmFr`DRmGx_ZaH6V+IUgh<6y
zKZ)KZu=?_;>EzKZ=T;0jjiA`Sr(_+mLXvY8B%91X<qZJu15lEx!-RGS9bZIsoejT4
z$akzFecZR8(;yI6I*~mAV?g{D5k<t8Xr?~?gKCx9w`u&n(%O?NEAHc!HM<rrJwJD;
zk(a<#A0<O%RX5o0cS at p$lvh;1dM~fB0|Qk;KUy0IDGMY_E1;e_hQmIOk0Wo@)4+ce
z`RQ)l>`YpVY&q)lAoETsGWDnkh#qwA at 41m8!Tkxj;;}Ze!W^3TJS=&4#6 at UB<z?XU
zj!8apZg*O|@oU+@#rF?N4p{MrBv)BHsU~?dW0L#{G;Fko^p_>dCpM2W4buf~t at J_R
z6XP&*)B9eDw9rTbrzzu6IhK0Xy>hfqum00jOP~89oj-CVJhY47rEDJ at -tCH6n%B2T
zEaKIR<X2EjhF{;wl%b{%{YcOYRVy5Xyz%?t+}_UXUbMYD722P4u-;zENG)auRrI+W
zTlQH4Uec`$O5THR2}S;az33<Ef?AakOz574f{Y%%X2M)2Z_M2i<np~hZ+j)ta&Rq+
zXqOWvX_UvEjR!&G8`rM#1wi5{b4to64X1SW{*<xF*YT`mjffZ5mqJKiYw~1PVTLzP
zy%#}B{Vgpax_n!7Nn4iub--QVy8sq>y*eaVlvESte(^|O`@B~W_xW65{SIn;tBs$|
zsNELiOmCD4vzG}wc~X8C11umgk;9Cz1-IY3Tdfw^8)x|3H)jS3Qk-dh!JBfHe51$T
zg$+QfyW<Uhf!JD6R-o{9_G=GcZsFg;u|$QeHw8RP_pDw}Y(P+CCz2BO1}>BBg^4>k
z`?A##vmiIN-9(%z_)TLTrR3rB<|4~A`@W3bi8Sh2(c at i>r}*cO&&Uw at NW&6m at z{}~
zqZUC;2Q3sf5Czxd_|i3uk;1`r&!_t5z(A9wT4n6nt7>OmP(EXHT0rlRtY#?5Q(66a
z&zcuP#J_H+_T6ahruqI;DkpETjVSIryQM~#3Oe)Rw^w<3YR=|1{0xPvdDoz`WFHfa
zlXKOZJ}wO}oaMJcFkNu~ldA|tbs at KvqljjQkE(b<mH%fD1_VUtL9?IZ_Em5NsFbY2
zgts%+od%w&7iH580Rte!+L`^9oPU*x5Kdfl_b84woXC*z#YNp3+p%8sDrlI&@<Zs1
zrAv}hE+Or2!5Ia3*>K#ggz=b-RAS4iNS1&FP=u at TZUt+eH#Md}=aSlqlT2T<#k-f0
zRR6D6cNUWq-<n1rUxL8&l23L?28$ru5YX#4NGsVDUhf7K`;9ye3Awu%*{^6)Os&>@
za4UjPfQGYkSnSIF-U!8j06y#fja^c at yfi8o8XBy(gs$1}U2%O^m#YAQpYSif(y=^;
zJwY24p09;wNdH`QH|C{1-N+waNEPs*3F4Z3J1<l=zWAIF8Q=`*t{z~biFM;joDR3A
zAQvEhU`<_kj8D;^h2v}lq+CMxyBV`(-F;VrOmNsgH<Rp;{&(ckk)Z>(YImbx8egju
zUS|c*o$mar2Jbw<g0#!OwOXC_R5Gz@#GrUbolt9sKtMBD`{ig%SeeY++|zq)DQ(3D
zDPRF-sMRREq<TTSQeyQQbV+vhP=Qa<K||zVj~i(VteL~ILO2NVEM|X<DO4+){yC^7
zzj&zN$d0uVY7Ph6I$c9(5wujj8&=kQ1G<P14RnjJ{|g$KAF_j00a*zLG6m&OJ9LEB
z-j%5>Ey<o`&k at ttUnMdtAn6agHp3(=Kf7^`N3gX`{`WAvR$9V*S>rQ#IXY8`m1wN@
zNpfOI2}4!{5Oe9j;wUnRvao{G*Y{cpF#rF*>G8Q<jX|ICvm1`LtY0zEtRywF2@&b_
zw<QVpIc1{8_chWj+ea8in=!zmzWjjK?~ot~wxwu2T$LN1S%cvPc}*F(Z?DnWID0V=
zl)GfSr1q+2*=Z0ln;c4v%iqWX_|P+?zkXs9v|W8HGlVbb6+-4~+igK at iOnrg>|uZ2
zts|zo|B1sJ5~xcsO<89AATP<Av<eUR$YF_wmw5q(7UPLPbji{XK<+=LWlJaBFCPxT
z1xC&Q4V0R7PgGkg7jk?4xDv8Ljt)7*MLm0p?SzBPMH=gauM(5F{Vj2MLfPnF>1|ti
z!jd<grrOi>6|a at A^+zgxxp#`~YHm*W{9UY6q*oI=$^dT{oXt0cukVl?{UtyjnJcrN
z<A_QfB5<b>YN97br{Xd~G|hzTtu!1?&Sbx~?~4;TYN8=bmgpzlsCba|`DUF<bliN1
z3VHoTc8deDf1S&8y(kZe=yl0qa+lJ+*rc7h?*3oWOZscH?%U-20osIEDp*ABnEByM
z9Q#x@&Xg?k8p at n={~!hY`WY}Yr_zHJ__t<KU09g2OOxZ57$ZEPO at 6tIZ2xS~!g9Cu
zmc?Q<nrU(~B2=ST5iC8scGwJ|1Zqzghi8n%qp<<0t7#xN+g<Vj-Lt$Vm`EaFpJ5h~
z_<6Jgbk=_-geC<)M($PwH_OA_1}#>lR&c*)?huy|s+k`}nU?1Ysv&piYrE{M#UFPs
zg5c1{XpX*hL4sEEmcbgB)R>gSt}mlAzCb^C4U1L#il=ab&Z^jXXF!cn2uOLx7K;Bw
zCK#2_FA&!7!0!{CO#I7Mufy-0uY}4^2cW&e{hN5XK8Q=={%^GbLRWd*F<G$<!l)dR
z?J^{hmT9ZF<Z0a}ifPB;p3-R!wPvM0##jdt{eP*criZi8xcsN_awnzsY8YsYxy(`i
z(Jba_DFWd!y2ZQQYj|L;YK}bxxXBT)?~=fm6N+=ixFhkim6|5bk+qjFLz|0h<;v8X
z(Z67Z_;;pCz*D=z8xvb5OP3U>dmkZcaAl-OVf2O!yumlCIKtz;oiHc7Lz>{tdnjj&
zbyl1b7mHJO_V8<@)#cs!xP03NQTS|1=Q}}0vOf$qUECm*ow4W5iS1f_V`63WPi7+O
zE~=lwKoZaHHZ&)m_UFKtKo!k6xkp`(;RVUx&akGd1-fKP&Tc>sxOy+CLGp1SI($Q3
zG8H__PIBUd&C7;o<Uv0qRbZ7>sXRD&TUe--Nu+r6zHYXhMGmd_xzg^SUy^1Usfu+9
z0UabS{s3Mk=r6tfn>AtR2JF<Q;HIzSVn$e92xedoV0CP|#`yko4_x?oB|_ at EsD@>t
zc8CoRX5xd;i&G_;96$guKh$p18H$B8>-%0PuSh3C+zc%^H~}*YhRQB-+b(YYT7mp4
zvnad(j7{g_nDOGN!qIv9q<jtr#X=TeXpv||Jp4hHcJ_)l2UqVb3q~RwhzZV<r4X;3
zSr|n_eI9elzJ>YAo{4O=CLQ`>`(l!AoYc-V^d2#FjX&;BSBbl@!;Y;cI6xJ7jWple
zeoh#C45?o>8#i#o#Q1Rjlo-AAt+E at m)wz#L;%Wv0M48&NQ{0CTx9O^Py5sW|*uVP5
z1NNhf&nN!+-%0gB&zX>jw-{hhQ1nUf3AOzVH#z8?91>rt at M8U;qspZ4c$%VG-O>aX
zxmU7-)TQSM6IEq`ruR=iPClOv*T8qb<G4di+E(}jp>;f4wrNSZk`mMa(yiwC)2hLx
zK~v<-O0hyd<nvCKWQIvxu2FW0I!C%kV|3sM^Zs2=!pGUTuKz-MYs}w6X3ax+J3I!5
zJ#Fh(Lq!@Gp?xEtPLQq+jR>Kr3mvjAFYwiG)CE7Rc3t}xQaX^Xop*W<sxkY700VD~
zU$s<Q&RoM;Jl}$M65-&GP={{8i4!OG_bIPKX&r`!D&+Lsyvxjdv at PoR<K;{!I~Z>K
zNcY(eY1PHqwAbi9aLpNNO-jDiCrA6qnM<c!(H+?xLLz}({l`<mo*DD+SC>;70S_FB
zOjaF>jsF99i0~na_lBUCC at vc!XyR58vT(bEwRfF1G)E6j?h4;}hUyG=!U-<?T?H;#
zKwAuJb~{oB)^Ij?vPuLhQaVISn(GqHehq~M!e6Mx$@pQ^(N|tZBS<6F at cAvOob3Bv
zN+g`IX|dCacKN7x;K%u7nykKK!sRkU3n^|Qb*SkRHPTVjyoqYx%FN|R2 at wwF8&Hk!
z+c|j=y(G#*3mS)A at o(5a&JC|5Qc8ffa*N51-QEFfYCkH{LCn)3{bX3l=IeyE1b7Q)
z at pTCET}2<#*V at U=p4#EW$M02mswrDnCmUT^Ob~}HsVnZzAmNDStd#ob!O(vFLFG02
z at D|tY$R1~geuO*75h#GzMt^UYj^{7c>n}vaULh*OrrW;FDG%rczWTFO*@*X;loC3A
z<ynI-!74<@5*}ph&Jaxt;jIJ%Nkx+tZo3wWTP3d&(5x6SIk{CYKgWS!s6^7#Z8=-$
zS;<PX#jB9Ts-VZ=H-`_0tM(8CJJ;VF>y)g&nbFHahX-|D4FOa6ZM2Xysed;VSL$<T
zKg!bd20)KNvsAK8!PT6<@(x<e_t*d_Q||F^oye0A6VZAgr~<i)m4B=qJ4B+nbB}>~
zLLPTh=oOXC<8Zciw;}9w-_ct->(UHW1s&|vT$b`}I_=RQraOBdqw|lqv6GKS%dFV|
zx()(zfT8{->x+IOu~mAG#$Eb at KHzbvBSrpmZZ>4D<Y=o+N<zMt1Wx54)JM(`Qyl>v
z7Eg4 at zuPJ?jbN|Nk5r$KrYN^;;G{4LWaxI`YmfNHIv?mNPMwssCyp at j7j4n=kiY-P
z)IMni!`%p%>a4=*a)?|R0$d%stuCcwLqyx7!WlRr4Uwz6pN;Y>t?niK)f at c7Hd0?r
ztGMp-OBgNT?!?j$sy at m2s`ILL1F?jUiS at XH@?EkrDMcOc=Q~(hVWMi{F3o174y^;7
z- at Qs}s7<6ZTK6$(eg}Y|>%&JR=l*S`AjIk-6qtN2bxd7J3AlBVC9ccU>);w88m*~1
z;$KnUxair4D`SY1&=tW<SBC<e^raQHUI1q6_P@(Oed7tB&ZUk14|)~tNTT$(z)4l1
zI~s@!vcZGz<l>p*mRP;Du?f(1e23o1YPsv*2w*$SYB+VLZFm)pFQ(T*SSdGz at j7J)
z3lplX{8}0I9DfgR)z!%iYg+)aCh5+<!_OYi8FdTFNyKt}%ukK at RU5cbb^9bGB4yfw
z4j95&p)B0?dsCq5Zn&gDRdw_Zk|;2LKmcg|?CGjO^Rf~RrtVw~uF(lI8>%JN-Ce7+
zRuCZwhxU7c>H}>t6Hr_>ZLNC`ypK`V5?<TmYtf{0_^?XPWi6Lil~as}5^%P4{b&bv
zZ;z8T`M0L#MCJ}z9kG!Uhp--d(5SZRL=uk<0!qcIRX{2Cm?8c<0ejGQW4cGHk{1j~
z_xbY)pGj{cVuhz{$pFu^h1mJiinrOGQd=`Q4z~7llvoQD2EQ~VoM{{pCfOu2Et<3c
zcOq?1Z^6NcgCaE?@lo*qLUyMTwm1LNP&IzNILwr<wkBNufsIw%tO1wVrp~>mJm}n5
z^FA1Nigy55vdjAByuBoR|L!fGXN;B=>~~GU>HI%C`jn%Zx*&olt&N<-eR`R#x0$zZ
zkhJ2y at kgSaPqCydPH|`O87l2107izbIbbJCd#&q19e<GUQgpkH6TwXhVKo500_Z{;
zX2nA<E!24AT6#@p?5ZXDNU;N<-e8QGYoz7a_mpSN3sRU31X4RrR7H0mB>t0BlU0 at G
z^Bh6NG*ghAux2nSzzwn0RbGB^l4w}dEi{z1x46~KLC63r<V_gubEiM|$di?`Gu~`5
zr(nX5jf9<bk-23&H#%>wJiQ-+g<e1h(y>cwpw?3y7?i6%Xa-VyoE+GAzxi1H;Hqq2
z1>#2yq_D!Im=R*+t&!oT^MO{+8XOsAAbV)t(G)6mW!>BjgTMfHspImUS}cEQ^1NZ^
zQ<dcW9~ljRO@*yr!kZ<_Ixv>)f*L_`FG|pq#L8%P`VI7t^OJj#!O%rzJS}(mjYdIh
znKEObj?Q;=%&oW0xEzxD`SfHhTQ=r_l+|`^FAN7~6ut$5*j<04+2dtrg#?6fNj^0n
zj`}Sxb#J~HMsq+j7a>mh&kI3wdC$I8cTx^DyEqFdQb{luK;~nq%<LGmI at W}w;@P@$
zu|-|4D)K3aETUE}?0|5gTxF#X9XHhrQh5G&{<rwAyu4t^Gcd$su_M$-5lxSkeA>m2
z_b73jn%r+#mZ~Gf+1?~JJSrw*r+m#?^%zAf-#K0aYYMmO>PZ<9oaK>iq-NKD2ebVK
zj`Sto4Vh1YxTsJ)X^M*C2|cGB at YZuOZio#Cxcz%4zo<KLQLk~Gbia0hm*%wo$_)?A
z4sXHH{Uy!_xgUeH<+%g_0Kbk<dW(OnC>sBIzNyLSmm*~Fu}KWjgNsBKEoWK*KUuf%
z%-j2cjrf_eat|^r_M#5|9Khr}3c9)q8LSA}Jg=#Gi7{(981(qKllEuEHHZ|dmCAc=
zgeUNpUhp30-`3b8%pA00Kq1RgNO8J%AWWr4!l^sYwVMX2)s!HewUK}M({rdycPy}D
z$Cc|_I}2!;No6e1>3T8@{2qlVdr&@1fUOB4&X$Bwk`PC)-UWVyJ}#0J*d_kzu~L!#
z%bIfVB1=$x=B(2zKTaX7exrX>lzP8)%0LArahU+}W at AglZGE(CArwOpG-6Ch1(6QM
z^ZQm6K>b-q0=uQJYVe`wQtJ{ue#{e6CwTa*fZmNH3*f~mRVD}?;WeZUTXBP@%>`!M
zdd7ZTPWD8v_B%Co3ML#ZA083>2pyAj`JwGldP<;?DAt+J9fFC=d3GD!cXZfRuH(R~
zLTH(&YEodsMx6Cz(aGMv)c5J;1ym^Zk^x-%=fZw%**uj(dQJa~Xlgztv^gH-sO?Bc
zEKDWB0+qBz#_PLSX%vjqv}pc`=Y~?b at O;nWMq=PYR%VQQ8OJeEF#xVghQ+JF)ESyx
zF9?T7DsNA~dXWGe+^eLKZ}U;$R6))-=m{-{dCwH=0g(yFl$TyYn4CXswhMrgWu&m>
zpN1ni!VEUI9qMJD6LCAi`c^orKaP5hTXzLoY+Ex;QbceD(3JOnk&6f9Q(a-pD+!H%
z_-d$MhMX|^9rrm41(=(WxiApy<00%1ifFy?LlY|bU!U^hxpG#a6JI#2D4_vc;hBt6
zx*d<*^;Ar?KgD!|p%dw*g1|bV1JR3&2pzrus*-APGMK77akZ)?mH9S+C$Vjyu3Uz!
ziJ8vL!9dMVkJrYcA8;ZLT&@FVl|YbT^|p11s>T``%MSBA5}LXBt6*kZTMR#S0F$Z}
z|0+?C5ew8j`_^PbMRL=0huz6ZFHzT1m^J?hR`Us!u-`%Ln1Aym&r}h^jilzHWqR2C
zFLB at _z%Rl$UfACm*4$LC?0iu~g+0r=^n at YLrTt2FyGW2I2GKcvXyccn2wTR^C5f)|
z7h_;@#%XbsjYLnc`|U0- at B&MDc*&``gboH-SDqnX<n;K)`EqLiXnAqw_*T#;Q0D25
zo6XgWd*g`>vCfcG8h1zuO;P9{`HQyXs0@>ln0YGVm088E`dHm-a%gl6<XD8WT89(c
zNp^)L+VV8zUu-w?3oyi<`WdZG2dA7w3_W$yA<L<M5dJNU?(Ao?F`_LiXpmXCl+vVO
z8Y~^F+cQK}-TNf(QEjfX+b{os8HqfPYyZ at Edv7Jb!dYsaQU{~5B3h8CiV^}KK$QtX
zuWF<!39WIqN(tGH#zR%L74~!&-@}xNRlfh>9_1DTWz{y>Z8DZgp~^;6PBp!=`Y`}K
zFP;&;+xrNNo&-v<|Gi0M(_ptK{5zSR?eN?m>&^!$rVXh9G#*I>?IY47hsze?TEoO-
zJe8+jxec<bGc~g6E-t=b#Zt&1WOUBZFC0zy9q)yj78 at l|s=#g-g-n3r5E_NB*(fjK
zQxV)(+!ulqrhv=UJ1ICV#|a3}x-Br|tArBmoB!YXr1PilBdb+nR=2ImK{sM9#_fm<
zzhXExl+)p<XU-dV(v>iq+gt~8uf at V9p1wgGxZ{;-l2u8%5H!5;pbRO)pv}H0N$T<9
zMb at -`<15;imQ|Jr<k$-=d%-E`vJyB$T|xC&E1;E`Yk<kHjWAIMy}@yRF=Ro~4OcL;
z`^vD=sE7LPPlfc2dJ1ceu0{N)*&oPnlgiI>I(UNzWb-9*^(Vl(tu=I|%s*3(cXEn(
zO3RC!EE)&e_RH&@nJz?kQ?P#!lFX?5agbtWI6 at dksjhO@Ce!;y@>SQnNgQNTgpz*@
zhkb7Et#k=z*_*x8%4C(IO;z9gzIK|(1H2~Ge3RMh|DmRPk?{Bt?u- at DYinn}hn at 2f
z%GS{COw-|-W06+kJop)2y~37v&*ZXS5J9P(KnDB?jIq}{tW&4IY3vX_OeQ%7tEXeI
zLd51O6FfZY?VY<kjzcvaw&O=cO?MrmzM;^F<6GS^kughv&hdZ*mHgNMuc3WC4<p^!
z^a&$JROGBjH-4bM2Z$!dURb8OJQ#zDs`SSGFLZNyPX5>SLUB54;_W(2r+a_ at rw+;a
zbz_OJr#P9Db-7Cb-LJU)3qhdKlgopY2CkE$UZ)~%o3hl<CXV?;`&DQ1(MPnk3ZC8E
z*dBx<fnSsByGv?dPCN3=YzL!&N9Q|gpWxK0xhH9l)(e6%kanl9lh0`V7d=(r=ToJX
z-KvZ6Xa`RFN*L~!u5HuO0F;YlHxLEax*iB+Nx8IMj<)Db3H7iuV8SG71yThMGZh-u
z$<x}~vrOY!5W8(KEhQr%C*bdMg+HsaoH(D*e=DN_wu{453ge3N>21oG81;WCM)W2*
zQ$;fMLiv+Pi3Q^0qfn9nOKVaf(XeBD*D?-fdwW9Mk!R8`=;H1c7ibyui5DrG5j^@W
zn|-u~IOy)WKNixpHr9pUm4NTZ&+3Cc3ecTN0(nqoj|@wsn<PCquymnL74^)=qV4uU
ze|ifNI|;?VJx1&yIf(KnTUq^tLD^Y89;lAKFy2iYMUg?_^Wum2eMGszBzP1o<b<+$
zKL^m_!yxrYZH170GJ2PXNFECxiH>$}6!>?FjB%I0_ymuRB at veOGd6}JK2y7V_R;ln
zb0PJz678j8<>qdzM`vB3^nFnH(rf8PT)+*oKigyKnK%215?wdv2pGk{JGUYC&~fyD
zsuzC7m;GVRh-pQkn9XYO#_rZ~y*w5Xhzc{Zmyuu`p+V&{vRl1Nbn>3HLu-jHvFjID
zmcVrf)$Ps^1g-)IUgOneQLhU33_!G}hB9!VBd6?I8>J0AML9m1)+4TFrH-}3ra=oK
zJkxMF{jF{`6!ghpdccMVdfcyK3W-0NB5{dakYL`_<7ZkNp9qrp&PrRws>NpN>YTGY
zSN%~ki&fnvufh->OZV^Gqgh9eY3qrhxzX(gw{=>a2i~5wLr}FHrRA at k9+fqxJ^d!^
zx}f>yA8yNKKSyroeu>X-+A?g8dCe_e*17QuD%9F|WND=;6LGbb5RdznWmv+k$xwZ#
zDYyoB+v<mW#;Bf)vRTXeL-*G?KtlKc?G>y`3)o9VK!jn$bPJ?c<s83l)j?O+3(d{Q
z at qzzFXCnUN2f|EyY;iITzlV+<)Jheg6so)_V+}`6?KWVhjKbHonfO)*`tOSRt#EK3
zCCTAh*Ln-JH$3vh>K;@o7!_g^BEiq;8M+7v{0V^kvi3Me_lAisAi1XJ=<5RS+f97k
z&3P~<Zyvt9(iMK at H&5;Z6NnoUvB>sctn9ieY%&lHaOV^-so_SJ5?!)jg13PT;bih3
zVOP&s{JV}JGOmu`^Kx=LT;1qhuT$KdBj at iI*BHytrgk~a<=>0R1*gOtECOPEmlQEc
z(JG6E65t<?kWIY2TY0tfaf=*sC=RTv{9TwG+nA_{`-WaJspW-`ZP_=39=Zq;!iN~J
z9R*KyRI!ZtLdQDvN5>5fR9hI`rBi+SkM%AO`d+(=$#x3O>rj0ONGmWKV=u_~LQ`dy
zSrEGtV;dNU0cp+qa^$qhlDo at 1gcx7j$9h50g@<+6IHA-<LxesxQLD2s|7+AF9G*H-
zekbkPQ75BOyju__>m7eSOBz%Fk1yL)8HWPLz;^@OWQ;SBJN(vB5S3BQ-#J8o`Y&cM
z`8M8RFNi`fZ2H&MhY;>={Y6;L6(4#XyI!6XXK8z=F5sbn6dVWgHGjc<;zNDjE+=!H
zFV*Mhg}IC(WH0XUce7Oa9s^1lo1&SQOFm|xCPVFXYm|~3ZRiMke4qerG(A!pBZ~oB
zvMU#;C<=G)MKa86KlLWOK at j93jN=1XObd1Qk?#MB=qMulmsWtX;v5HLLfi=F2hZUV
zgbRmyk}ZY3ng6G}44D7Rlyq2t_>~Z5s2oD3LR?1m?5v~MB`5eTyhbeEo_i{=0_PqX
zz1J-CCrYjYr&xZBx8TVK6RfVcfyh!{x0ZbN_Nz%!>a(4vc~ql#M6KhTgyx<+>G>mI
zk>M%+*_lPF>yf~3jkA-kB+&LiE^9WiFm+#X_U6-HYMO+{8)*@!+p}3dbEe2F#TH8J
z76eH{vI8smXD%EXQ&HKM`^AxzD{DL|^Xn(|xH?J#HWdZDg+K|KC-`!2SiEd;&g1uV
zIs2Y1ojm83q8FR`$G*CG>aB;iwAH at Byj3e8+<|-9(G!~Uz+jChG>5z*giQazs;qy*
zF?<VJtR~Ee%V6%S^Ce>-J))^wM!AXn^Xp`MtuQ&tFG{A}B>K_M(NUDWX>MlkZMuPp
z6TqSj1h*oC?c#HdZ{u3G{rN^aY*x2n98WfPNS9pVOvrbrJ}pxTs|)PyR5DQD9bwb-
z6ANq}JVRT%B*>^l%vtycs71fX%R;?uWh2`)F>cEqTAWeibdxq}xEClo%_bj{{omy=
zZP{W&BnbMnlQX*L9E(vb%j66DFb)y57o(!GKS4*4vMpD*EY<AphQ$l}B0&BjGHe5)
zp}|!x65s<lzgnfEh;d1}z2gFH at D<dJM(MCS-Q1COUBKPf<V+uNIG*!sImnDQ-K!UX
z-YoJ_Egwz!1pyc&eN<oV5*QC!6EqDKJ!Xo_wq3#$vpr at t2EX7&FIb&79s$G7V_nT7
z{5Lj|R9`GBZ70&%y7|XaCM#(y1rxhxY-o~F);FzWKuSXEMUd&an1Vtoj6yF+{82U#
zkBv`c2ajYfc!S1-ObJJy at Yn{tI5A-XY4W%FUIeHFKtQQ1rb+(t8CxIQ1T4QyfREwG
zm=PVa)i;tZy+YwRYO{W>!riQYb8-J(I~5A*J#@-+Pr)B2Hm3eI6WVv8|4O#d=UNoq
z|7U+n8GZs)C15;H3XKE#b02n}X$a(Mm{M at FT7p+zaOU~aGulVNInfx1!}q;=*x-}%
zH2R#lKHI!RZ&|qmebr8MF15d{(sqk##II7Cji?swY+4&NY092M81X$>KY~y{cVpI3
z<rvcxQOEcxsmgEVeWePn=u}TCm3<X03(9<x>S2Cseb^6i#LN<X{~EHbWJNGkhp(G*
zag%(kKI|c4N<Si4KE@(}ew!Ngqhm}%FS?8vVZ2^ibo3{_67BL2;%t2&>S;{jJc)1j
z{0?KerCGS|!jm&g8`$MrU;q~H8t`uW>ZP#(rV~m_ZRd41reh7_e+OI<&uRha&3l_R
zWdXP^Ct|v3tpYkM?ooh))*QGmtS~2IKxH{ciIV_0AGftCG^~E73=r(Rw8^9y{~^~1
zhj<kBkk7dvT&EZNL0R6~5zTqFi9+gU8i61?PNsk<OvZlKEBKcNAx^^^MkpWWW at r%>
zFz5nR9d-?dTbD<lX_5*k2x=S)#v9+jmf>vduq{W(+qI*??|Z&>`g^<n1B?{4BXZ%_
z=%c<0ndyNErtI?TD9V9L<D6+eliO7E5dc*{s=qA#ny8G_if^#`=iQZ*v&{^H<43Cf
zvg>b?SrutcPhAIPvu!7?KEYRSk))Y0gy291A4UkIN*l)!Uj|EU8iJqY7}&3&@wnmz
z*f5|znW$_m7ukSmQa6*Pi$klHM`^?+xaI(1q2xr8wMrx?2NEGY$7}jhhOq72m<{Ea
zm}KzLOhPs+4l at ftto}uNwae{JlC9EY))xFhojC^1SuR(myE;;Dn$c`nidA&Y4dheB
z0hjl`{)gsUcN7~`+Fe#NA0S`0HL?Y=_%t*)=_$(Gffl>}R at Fc}M8(f;xLh+vw}|G7
zjJ2+7TC)!Hl4ys-7n|vRhY-{$>#j^d(b?C7WO)CUD0}0x2<&TlAnrfF6HbQ}-4pC>
zHJqf)1`c&6umDg;Gb}l+wA0>tnAsKfdA`zs48Jd?B>ArTMp7h!j5Uq0Nr9w#In})V
z at u<8yT~~!so(=^)10|&3lGx;bx?!moU!3J~j_;`%mApkxEE%X+&p~-!q}kxplKmW$
zoAUSe)ys>gE9>J9y0ExtJ}jTnL|iLzV_~=1*i^)Jf{-Cv6^X2b*hDoDnas<*O0JYb
zMayTGp3aWdB+P|r+9;!*gxiz)(uR>S+=25mj+;5 at PT(Uih)_OM at vgmKA1=&KPCU$J
z!Bjf7Z`Az~*@FdHawvXhg8ww9>tw7C8h2i73_+j2Vuu%Rv%8hG;|9|8ES;B22zsHM
z6$SLB$O;7-=EnvS?c8r#GeEj3SPV(#;wAb4IY{}46 at Gbzx;bm1f-0pBVjwNI{o)YD
z-P>3CD|=$ekh7{?Uz>ECcP&QwM!0Kzm*=5YC%U8o9YBm$YX=z95D{JjBU`VGa1#}W
z4KOPt)NoQ2`7ZFlQACEq*sB%&3RyXR=KcAU?U~dFV4%D2v2SHA%=CN|TtAPYy2kh|
zOv*BEWtg38#x5jCg}p(y8g_ at 4JGrFP+Z91mN`>3;hLnpo*S>{Na~7E%gS|EFDO{rP
zjAiFS$tS%JhD38;4n`_2Y^@Lac96?|4wv8|-8Sqr+67go3K_Wk?T{p4-5oy*_g3R7
zF&vVa{d3DR?(Z+oT%C{_5P$}bAj=1ob*SW)YYx6Ys|>6dB-jUrbchSrXpy(rV1F at C
zR`hZ`n|PC at wBqI(k{pJ&MAx at E5KLI*ckb#YL5q`T%Kp_vKp7fH_N7n&X~7=AOXjy9
zs0RE at FC<&_doi^@aqzh?_2IFVJgHC!iH1C$J&Bc5ITt`aG{}aCT-P-`X%>auJe!uf
zUfAakM8l|>5LqC&lE6`Nuuy*Lf}dkV5XAIV2OR{DR>!-d6VMo`9sHDlZe!&y&GAF%
z!~H`DU)_8I3>AK;0B`c<Rtwl0i<f~Jmq|NV{(K+_OF9QZ$qdZMS_B(kBDx}4o(M$+
zKk_<-Ck$S<^Qo-&V?BshcVKkM67}#f5SIXTD=lg9-HE4eMzydu&AFZA)yeA%JAT0u
zGT->-Pxs!ah`j4~_`R&R*n-v>J09w--kHVVbwu)Wn|IBd{!2FWT#PYv<peDBwu9)7
z;!=e|&Xa33<Yr{p-5o=NZiGIZ#`lVzevKl6YRrAdQBM^o%v;suosXk#`04UVvpYcK
z{EVJ)^93!Z_zG5z&Q at -Wmm+x50#RLeL_SvBT>6Q_cKJElJ$(F`p5u^x_b?P at T>(mg
zhQ!-UzInC@%Z#I{w<>INLEM9z)@t+EUM7 at 6$WOw?UF?R{F at NPav1Mo^_f4sb%UDM{
zCzLYWEjFM(MKBf0_~MVjfe6v{mejAcfxh)tbzKpQ90At_2gaEZh&2z`7pRe7h&K|}
zv@%5#)<{J9pBv%&|3<$+itBkykNCUn!`py at s%}Pbw?Cwe0n}hbqN{x0!SN!m6$t30
zb1HfU=y*Gf4rM!O#FI-8)hzRaQljE#W$#tW=vmWu)LkfmXGDio`0>_)nMZeuVkfk6
z0SR>`Ig^zWzR|K-l*mnRaaD<kpJ;t%U0dSs at B`0mUpJ`gGGLcPmOqH_INnw+OB*4%
zD#6#MX&fCu6sze at ZmLJ8q_7)|s#@C>p;KL^Z31qZCEn7mjI<bIcNKv=a!BiaSjY%P
zce?KrwQY at vyU#EClXbM+_O*&0>+g4u_Yp-(-MM31Bo76Hx(w28^4OnbcivDK>s``T
z-Z!or4S;=iE~x~5Gk;yNXNx5&zn=FTw~=HJXp_qCT#|kg4?v|%l4cmf0VDxS#L|01
zzCPz1p`l~6{^-%bJs4|#hN&hLhpk^Z#?cY at Q>4!DfQuK~TzH4L2l)m4Y1izi$|t`-
zSroHOj=UOeFN8o3M4fcEb(K!LJx9~=FMVUe6q}DnS-_F6H_Tz_ug_NbCX-0#_HYG&
zYE1ys;7eNwn;1fcHE7f@;vdRnZ7&eRRG|SakTd1zIwC~aBx~j*5#pvUyJfx-9IA+e
zD~bf7w&1!f9%iQF*)0YrWzZTpgbz8_trN;bVmE!S at lIyreVOya*L6~2C|qQu8+ji4
zw4;6czy!v~N06lDn4=;lG39irlE+AsJ^;7`%~B_ZZkJ#02a3e~X01kgrdL^g4rrH>
zc%vL7l;6LOI;(Al0qN&&qP*HN{idLiRZwd*=$|tLTimw;IPu^qcgT?gdJeA+84+YH
z(XPMn(M>nennK831UNp!1rdDU0`A*6-7QV<XOQ|Z`4Xz&!x0$_K%jVO=s~T)j>}w?
zHG|XAp8~+YiC#`WMxiHNj3u7_g6j)xtTjF?`q=5ZfVW8<`<qwL2sGIsbIk1|&1Ykn
zfg4dBKn3zy<U%#2%@^(+21SXE4n4#ZidowL%j8SV&W;u_0j)Vb4g|qngp8MBb^~AR
zIDT`ilk6*ehcqTMKe7cU+(H(t at BxOt7iOpUE<G|INIh%;mxbcrtOegm)}NP$4_?Db
zA(XIOy}*0LOl#Cy%Zv_34<jY3zaB7|kdHrP)qj}rwo4u8cLbWOEzPO^ZX%qE>d7Sr
z(R$1L%KW5r+BQ~)&fBCpTMqzUu9N)ch!^reVSK!F2FCTW_S=|bO_Yh=KsjzuQ^RB>
z6pCsk{S;2GPIAsFLJ+nWKdCA=^uOJdcd`xJ15j-Rz)!zVu|3F{kuGeT60hxIG&_f%
zAcB__9LtmVouj!r at I&#|=Q3nk-<9wji_s|IN^SpGv8Tum8t^OxWxh7J2mM_>6ULFN
zC#;rx<|}vuD2Fdp6jtCip#;rBk$ycW2jJsoFD)(F|2HgO?KhT@{PZ+QXK9i8k84US
zAO2^{HwABS`<o%#=%w@#JKen*0Y`wo5K{1T7TFxjXqFQ`?wnI5x>*WYKTNY`;vLbJ
zTv9;J8f{kDu=M+LfImGN5g6UA86nGKgsB>gTs~0bt9(!ew_p~hR(2 at FCSNJREn$=H
z#)6Ssx_e|m%rlxAyVtTWP5FQ8U3CMD>FMi6+s$Gm+H%KiAbivEan3Ivj*?UJkXNeJ
zS&@FmZ+Awae(lzi at 059q6-fUF0vnspiT^ZU1HLx6EDy%x<XuQxm$WKf9AnLLlEnc)
zG{kTJ`1eb`gH)uhhDtEg1AkM>;rdrGCihS;{gz&{l)59&3kynoMWg`0wl|`jO at 21p
zHjI*5;^K~ekwl+*-(@2Ij~#HZ2ih+Uc=1%g1GMSm*hTI;<Ug==1ECi(wM)dF1(L2#
zySv+XP41t>He at Gi0k&DPr|X)g%Bl`64R8{xdnvX_Jcroc39T999)l<OPM`5xWWK*W
z^g9n|GcXEZSg6 at rPwQr8B#`8jt->M_Ts(()VxEbzwGWW(P<()~7j$i_l9hcos7_z7
zN}0y*o at jNT5wLqNKt$X$awc7*iu~5citr0*(ZS_<8CYw4OtAq*O%NrdX?hlu{jBE3
zAIbYkGc^I(jeHB&Gb2%V69h6RDsnVkK+-j+M6pd|>nhM4ai%xUF4fAbYeU9Cg#%~q
zh})*vo`vl>@+cpUYp9JiY9`_Ya#4nLMTP{D1~Kc^hIdhB at a<v$FU|Ikd9tH9i{cjH
z^ib at 6hOktjEpVqgS9vWXA?H+poBT}zrbOl!B233fXrZ3ug8s4P6d2anZ^)D(<wT%2
z11?ueO*97hj)05UcXgZ;3-`HRIzELNptm=vUTU$?Ap180+w-8|FYYP=y1?(Rnz32W
zLd%h>t`v<jL|Xaj{)w06Z;o3+{73j+15y1m19<_0dS!B9si{)kU7Mt<K8Hm7K^E?}
z56lW%s74-5lQoE!ngACvO%Xm&S6==2EfR$vLUCxgjC0OL456%S&{NEAqrO;o=Ut{v
zyn&*DGKiP8LxV9U38xab+)RQWX|bbhQ*N+a^AZ!Dd4Y^0n1_+rBG_NV#}3uQ3=#Nj
z=jDz82v>0U*H~Q%5tT=1^AM;Y1)H}#JB6bqink~@r;*Nog-2&}OztyXzM$WmzGoze
z`JlXd+^X<lF${n^rj#SLyZjZOk8le`EWx}9JE0O`_;<H;YV~TTfPq7VSpn8Rb)iX`
z7NUh8%JM<CR>oe(Bf_d;-xA`A)nbLcLLRFuU at P#A!udC(fH?!6YAv0_CRi6e>MqC|
zacBiF<GB}30&JGxTpKz#=RFrTE4+3%MkNo$32v at JfuWY-(=9UN*x at E>)%l at OI7wdG
zu#NI$LxjrbX4568NoIQs%JI@>Oe4oXB1+Bs?UdDPfa9=w9DRfs@<w$776BMl24cu@
zBd8b}ueR5VmtR2lmnxxr$#}YPk~9d7$htd8$FqW#1aHvITrMaSoQFQ54EQ!()dZq9
zPp*NPLEQOink|5XvR!D8WpaeY3CNKp6(G_&SR4Vrf|6gf;S4bhtY<lhc_LE&OvXZt
z8&<G~PHVmzbYIAu|8v5M0Nl(^wP at p)q)v_idq43uh4hX6BviH9bOD+Kxf+W7GmKi}
zJy at deh5nQKC{%~p<!<BSF|**yAM*YMV at v^`lTwL)C)o0`AY|GxZYP9TJAaH3gxb>i
zdBmM at e=?klDYZSf6!`F*wJH;mC(%13u?W8C>BE6H${1ez8>cMeVEP4pO`ubHPV3o8
ze)Z7P_Nr39qR at YPFSC`cI}L&~j%i#1Q3l)osaEq7OC)4n)+ia2eVKE|Mz at 3yd~0Fm
zfMbero>u1pvD@~nGL<iTFye$Gj~(1ia%0$oLf at U8@j#OMi(<r~{<<pqVL=m331=CV
z3rHIgmN%<G?ljm_M)o=!BPk5ePY8>1N9+86oX2Xuws<eQoZvOY7i564v4o+;bZMNL
zg8?0(&%h;e9D9cV?ys>&tYDtK^7Ix<JrbBH=VttsJ?s3Ci0vx`N#M<vcmZpSurT|w
zp$66@?hCo=569|jfMLVbFyauqu*fVJTY#si1R^=&o8Q@>c2ojw=#xfkdZJ#9(TRqi
z6(rWADA<*aQkK!t;J;Ja()blURXHp|Q*;O~8kc>d)wct+B<#-GjhwN;Qs;dxUDsz$
zTI1rgP$xi)KW6iTun|e>0<p`KWq+TXQ6Y~{)0SwJ$$l+Zlw+yTt>}Tq`8W%Q`fkek
zj=_IC!6jF at A1u6R#z^=kd>w6Kg>$1H1u&UJL}b{|v@`-xz`jz;MFkw}D2Usf21t>C
zVs07Kk=&9lmG6qB6i73cIwMzbF*uE|M}Tu$+4VrgVY1OFTPWOa%g#heBFxkYl<%Mt
zRQdEE+-fe^$Nj`zheoDVO)SGaeLN`!0h_!)r1BX~RADJEr$d8_=ZHASC^i6t6?a?f
z$%)eb+YAUZW<!nos4r9E7f9$3%^H6GiIBNXr;_L%{ax!Vmn at qjPn_S*J#4 at 3$mjt;
zuDlP(F8LZ<5etA<HWC6bB(ir(A9&xnzK<kxhpt7-w1Qc(in;6V*q-FNmw?-MVTjFh
z|3A15-5@!JOmh*GE-8H0iIq=fD<6luBHC$5P2{pS5EWbC!J7muS}Xsj0N>L&yerYQ
z4MMj$EfP_J(HpdNNrSWASO5Jh4zIek+-iVq2!h<enT6Q=v`mAK$aYm9Z65}<N5L}B
z64=fT#X>ipt^;G|OfL?k^SWpDKTfno>dZX5V(%#gccK_UppcK=ijm(QY)C8YfyU)W
z98}P@;6bz+t)@-1T}bTE(I6=Zd2p!jZhPsX!g2Vuu6<+iNiKzs2Y;j*{yhq$F0)x{
zG$T>n^@Toyatrvza&O at CEHOot8g;`}UeMnqzs3}NW<Oc?!KW1y5M;0g?zp(VOY`9P
z$0g)E$eHmK)2x||hLU=8N~_dhAw5|I#<w}cnjJ{%i7$0I%}N+qAavN_b_b-+3?PN_
z5Q(D#J+a;{CPsqSZ=GRZgi;dDChra_A%cOnV;KlpY2u}`<6GO%s@&5h+{1g;lusog
zA)y=RIHtmEcEZt{u++#rKgaC{qQ6N5i1PF|zE@>>3KHd)DoIjF{Dl+H`k`8joAL{l
zMF-G3twJUT{5tby(3uu*Y91ybvt3?bmRu=DPP_1sTOIGRM~y%kb4n1=;2q7^1dasa
zF1YYKS#bX!sk7vDwNIm8ElW;41Lz^-f8RT<Ho88tW8yP4W7e=nz_MMYN@<ER?B{3e
zc-q~gtePd<{X@@T29okAsaSWJvE9b#I~f6dq#)32R!u4XEvZI`PxOCtadz<}!Kcev
zK&25FnU4^|>zOa~Au`@u0 at 74-^#Kt`*UAlrt8R<g at b5;eh||BE2<2h)mmz7pwJlZM
z8Kt+Z;wL`WFe3ojk}udtJ8RzwsJFLrrM4bv<d$#G8{OZN%R97(3)D|Pptuea(t?~Z
zW0rFzu#=qAvjxkMBWf{U8Vh~6a7KPj8c`_oDMf1OUYj>kB_H5+%`|HlUKgHoJ=kH~
z%3DO@&yCWW+X38S)5`C~9PXCz`<#c&!d(=XlvNlX+PF-chI4-^Wmr={RY;hp3xr;F
zN`Ma@(Y?5*>ME}6k|dQgcnORwIX-%F!tK0#^88K;R60|nwC<<1?z8AOCHNF++{s6}
zC1w>gi<Eu#M}?Xnu|3l7jA-Pz2wzBE@|?mqj}r3Z at nB&?QT75ED^B%-J_Sb(5VW<0
z`0WR3>5V2@;!qm{vVc`+{(SZk2&UEdp1WFU(MOu&;8?%(8Gp0k7P*_<9Xe+;wlC*2
zQxv(+3-Lv$!(okz8haGLwf!+q>fGXDn$DEI8*8!jWk~6L4z)4Cmgiq?zpSPt%BZqN
zttRg@<ueBCu~Mar;*3j7EO(y&V5mo)>!JsJ5ApG2rcjEsUM_kRiVh9clw2e{U+>b#
z9#RCyvHht?qDSnjlR4~Qy<@xU-$gnk;wz8Ml2{?>nes^MOW(STlig9_=8V|v+ at teq
z0O+LG??FH{xwwZ*OiO2VV(2KcD2i6ee=A%bTnM9Fyhoog6_-53=MlSw35?`P=gkV~
zQ?HJ-KTb%8(N5cSM$_g6p~~2|XWyDEk at s^rjz$s-)t&1es~ReBOAx6jmJ5x8u;KBB
z1$(I9Q;_bSxac6xwP`ig;vSYk>@@VH{evdOJVVh8HF@@w*ZzU{xrvp^EF&(VKHq2c
z;i_rBZQ_fD<SfyT_&*MIpi{a_sz|rP<7Ptue8O$EvaBVuQ99>bMUZF!QzlZvx5dLm
z at i(Zxdt?wE>2zNA@$gQ-4xK{x=-nV9YiIR?&SZK>1KQ<EM_lERH_DZ=DGHOdUSmFR
z+R-bU^qn`H%f)`N#hQ-_+)pNBH0LoGLk+`H6)x2X%kuvN!t3Wp9ISSLHl|onGN1K#
zotglBmuvrZ6A=8qNey&mn_k9IWqPO8W-)>%ytiI}UV*K^gGb&CrU{1{A=4}<W=Twl
ze%`ByR<k91FJ!+D;%Sv4jZ_~57GF`cJL{IBGl3Lt$$gfKFNW%{9sQ6S7qb0;-=8gt
zv0O!cZiEh4<Gi~3D8diGuef77ZmDH|xj>#Q#MHWX#)5%YYa3I*uLnl=t+Y)3AELLt
zqer2(EG{0`P8T)pDkDvMRm87 at 5eFaN=lE$0!*`{yPJisZ$R&36cj7*5ZxY>R<&P$6
zV=e^sC#cGEvs at uHH6$f^(G7}}6D_&#IomVHdA3DRb30Ox;;nKskiBU at 0maI@70o*&
z3DqDWVp<<_O56zln^<gOhc<~1XpcV3Q3{&8w1DICS$>|4CH~=`t1L!@oy;N{1nLd?
z5}uH6K%kmOkR2t)n5 at a$1%L<A;>sFZ+-G(g$rH at F@d*X;z?A+$Y7!4Tfrq*CG%++T
ziJ>W_J~VDhqmI_YQt at Gt7j~2}cW}kd&p=o9Q_N-j>_^PuIRDjZL5N}C^V at Zx$RTlN
z$S3ZvXPfGc+BdNmLoPDx&J=o(@>!DJ%-UIfQYECMTys}bkAPvpLA&yG->T|_A-b5Q
zFxE;Z$73bXcYA~y`&+Y$`6c+?o7Jt(2;dk1L<YDU>)uS#QL3MN?!W8Gxe;b at q(wa<
zhy9Su@%t;}3~N}ow|kpSI=Q9&ily%<rtRb&!D1iAV?jyIERH!I?UU%yGQwL at TkJDP
zuyK|bGI5En2Rx|t+6o+80q>4qjm2r2EgjP+`iE4M=;}XJ>lH@>(wGtsxtDQ{0)95^
zi|%QLhKla*CWsG{)0wiwK}_(sf7mK&^x+|xA$p=8{%y9L!#TQxVlD*7*VwF(T=am2
zTUwXsr at jddLpkGVfIhuJ!W2p~l0?B*aBEw;$mpIuMDK*%?k%IP%S1p=atfQGdt{SH
zHS#C%`<ISKUcwhWyPa$NIUQH0vNFu@=BWumrmZool5m_)2oa>9CT6X+mD*gFx~cHF
z9iFiN^w(GQawjdh&A`oCbpmTIh*oEFjIid%HyCZz+7m&Y*HbE%rob7tLCjm&mPyVw
z014gb;;wq<RI=I{*?1DnAKz-S>Dg_Nl76IGm)slYvBKXnr<B@>mKk+V7hE`?bNB=x
zUG{=byJ5&v2b537LWi(s%o5*Rtn55vcg+ai7}4ho1Vonjkoy+B2F+0StmX4pm%WO2
zUG-BiH~qUF{bn!lH>JZP$%ShQIOAow1Q;+QRocDwD8ou)_E&Bd$hHm at N*9WGEvC#S
zm_cS4x0RJio<8R*tI6Y*GWXerIC~$dPpg;IyaYaIJG6Rqlj#$>O at 0fVrJ7FnN>oC0
zp`XjBhbO%UGQl5*K}V at dKpELOwpcPPsR=*%buJ<2Jfs#Qt at pGt%!v$`Pz=d0{KHxh
zdh?z_EbAT%X at Jt>QE5*Hlv;2CEM<^0N(A9j<;7-3?u$sH-5$#A)RrUT9qhaOLWZKU
z&2s*$tH1~J9_K8g1yVsBY^Dm+u^=3&2<L1KMd_X#Y3LM3;#u=9fa~qs8E5KIa24H3
zJI&bPv at 5PyT>DAtF at 3G<dH+t|P0>-p!KlS*gzX?SIHd$gIwkn<-E^Wv<PAyO0gEiP
zhAsQ>3NLpBjRrT1bn0yFT`me|NfZ(L^91+W3VHFm_i{^K<uqC39z+2-QzTop*26%C
z;ZU+jDcT?ngUP6A)-?N24^6}X8x>r>ZWv_(@28|h;&|u+I0>Dxlt at O25lQ?e|EC{_
zx(1gV*@!l1f*q7Cpg0cM0Qsf7#0fkpc?kgcfuCX<Yuud%FyX#A3Qpl^q~I{3wKb$T
zn at Z^qKVFPSLg+I7mgT at humt)I6XqqSj;e`UD(&8=B240Vhf>b*$(VtB$KY4v9)rDF
z at rJ5pxRId&)!U#?7WGO^*fc3I&0;$XjNrR+UWQv~4O1)}WV~W56-ZN`N_Sxf(sDqC
z7O)jb!BPlP<ontzu+nqp3_FA-&ng{awjU%sQcmnuV1_)kkM(=P&VzfOfIv+BH{_s=
z%nYELqXUX2heQZC5KR^q8NuIo?xTO8iaD(j?5FWI&_ui`R$U+X`jm#G6yD=xlKp(c
zV_y$ixik{_!9T45((!{?cx)E;N2dZ=Zic6(W(Etn+w8j>Uv5G%z$tatPcstZ7`cpD
zPdJG|)ESESINkVgRV_c7?rfnU<uM$tE7;j;7q6`z+=+3O9{MWh at 8#_Y>+;{s&XSu2
z)|b$2JL5sz<O!3&P^dWl1pM&6%C84~W$!<Ky9i&Y$$aB|rF`LlZk;-Oxvqt~m4|DU
z&wZY~2<WJr7ob;8V{XV4$E{sJfO`XnU&o=4{E##%M8_P(zS5<wX8q6T?Lq1WzedG(
z4Wt#*-36XB<K)FSZT#s(Br|yGVU9=M2FtL}-L(@oSHs`-c`*q|+^k^&jNz`@lHIpr
zG%!wo2khy#2Nuw<GU6|vw9T`9J6p+X!!~p=fDp~Eri=%h8 at tziI>k9phpSZ>dSS&Q
zW9Q^GrV^_nbw{y?$G at yxPJNcHpECC@oE4OQZ<gN4Jmy5#sE;pfh6J9}cY#)=KB{&Z
z-4Oukj<Y{I0&$>Jvm0XUsx#IU_4AhL;7G6kJliWdn+K`&=&|W-3gJh4wz|hg)41gz
z*_rOaSu at t|FXao0;|S*Q>OqxUYf5vhM$+O+1Ih>>%j?QZEXf{lV5Ha?0KOf*@U&<C
z at ie^FcDVx50C>qt`F7a*nJ at tb`%A#6chDvr1%Ys*VRq}AJr^^Km}2>PrfTcm0hQ8r
zoLUWhJGl~1U(p!$!kGir+-hfa at W$fFD$-y0;4GdWbEmF&X6X*+`J*w|Jpz>`uqzmm
zFtC+O=OPEg5%ctY9CUHCa|~K&iD8zY{zO6DbX;b!{~rpP at SZ!*<gtN`d{pR$$|S13
zAqEjo8nWx1^^C!r;u{H#6EB}|(QhVdO8v(Y1;^o34+(j at H{J^K%$9>UorTARICk4;
z1hTI3tA$DFnerf^#<y3cQ;_!6b=}!qd`-(ec)289WQGEhRNtS;i!M?>g87de*G^$*
zklxD+2VZU^K19|S!$O-g(u<xctx<=V#OR;vA|_+nwp5n$aGarhjQ7 at yG87fyV1rF+
zwBw;yd at qo*qjSf*oEB~WWO((%fh at r{fTJc#ydchl*R6*0+{mWO-r>vTrEzXg&i~c7
z$L?su{d#v+R|C{h*n|HXIlci9CaOFo(sQGP%N=)@07u(U3p7WNGcHB7#u5K9aLOXV
z-c-?jSRCO~&UG0V<0Ym7d<z{Gd_j^CCo4p$&&Osxa4hrLH7Al(Ijqs<6uo1B!JIGq
ztU*`~+HzKV?70 at o$5zLS>+2e#J~3&w1zo#U0 at DYA%fpu!8>^<rfW!}1EHQAY?7XP7
z$suXoz-1=+!p^s`&IY at 2sq#}ATu66-a37-d?2m90;g&a2!28M&>5$+{aQxH~`Itl5
zA7pvPBZZ2tYFNUDJO9B<Os%U)Y at P)BRyjTH8jMbao%>u44?*a=Rn{<tQJNRBa0w?6
z$cPwrh{F%CPtC~5%2kBGTy{tJKV`n_BP at c64lUw^NmJP_D*x6b5LDwaFZs(Ny|97+
z6Eu&CJ7P9A|L+Yx4_nsC1AQS_vTk`gHjk2)L<OdI&zfk6ndj5+1S1`0;WOB*E>yAd
z?UufLmbelslhtW}H4iCt7hi-COyBtj1SANL&I`4R=LbdbLm%#sx+n}+GD3irUHDWT
zEmUC4$pM#pw%gFZ31RUX7gyI0D*-H-`^Yb?%UckZG<mp?={PF>_;?#KfPC-i?Y`tI
z#VHFC;Sb&X<lD~7QFjkF_WnTuqhMleZ;aFsyoYjtzIyLH+c^1FQI1g<{Tr(JI+h~H
z?EzdkLS7 at -<jw4JZC}PdR at 6I=a- at M#9{;@Q`YeyQRT}xFABn10Xkp{~O=6v~6;5=R
z1$(+{Nr}=4d$R3eV0Mcm<<^xc-s7^N at vh<)vpOJ9Y>)Rt)SMBlY<<JVPIgUjV2p!+
zod^6TNQtsljH&b8kvi~5meHGx2&=kun_i>4oKKpDM+{8<Qs@~D8rkJTqMx0o<)y10
zK4*6uK7#EdUCmEe+0DnXrR at 3pLhO(135*?x at o^vSP}bDXqoWl7<UnL(Frn$#gY}<x
zUH%>9x0%|uA{=%Y#F?1dVuqSk`i<%6n;r`(+a*qk2fHMUPWfiSsq8-xQ+1Bio<;OR
zNdpi==C1xQYe4sb3vHw7?KX$?Tr;5)Hd-vN021=YPCnjvR!v$Qs9ZV>(UjOYhS&UV
z9!c!~>~JN9Of<kvExH=z1>ivSel|NX8uj&+L}TM7?=+RaABuG at fe@8zgDT_N>89<*
zJ81zx>R0#2!;?3tuv6Tw{cGrI0s5CIwt*z0a9q at Ql2M+s^5d;9?)0Q{@2Yri&T6+d
zL8g(|M8Agtj1G4!CE#O&fNb}<I={<$3sS*9BR}`A_wUzt at vNj!xihX8;tr(tJEgSR
zz6z;<?au<bgd3_e#Tf!NIVQ?c2%T~&oZHo(VSD<G!bV84xs9MFAZB*k8`Ywgu<^a~
z1w>x#Es>z7^<e`sHTEImB?M?Lrd3HH(Z#V?(=#$8j>@IVu_3tk{;Q=<n~b2(x2f*B
z%^0O*dPU1HS*-^ytV~3NwU=(li|~<f{uWSaP`?vtiVK?B{Cm7nVd74@^h9Y8J;VO`
zK?$H=F51ABTOuq7z8`CNjhF~|9RvjVEP+@^THUiQH#`{+;N{?c|N3NJN0sxnO^JQS
zw?DX?FaLMy7W6`_G(@NAXN_diwMM=OGPG>iQ`(kB0?S<0cX%S8$s`OiMYK>SZ7oML
zdTilkXGux41469qldP0M at TE;b;hFL#)SnSf(96B#p_|<!03Rc_L|JZ1;Gsg?xUWF(
z|J$*1Q=p%|g-8O(T;=eM#?tr4=JYOEE>QUR^`cr8x=8?ooTFwXW}6y}Ko at nz%OnVo
zs_1Dj_Vz!1owiEjM{Z1wkwU9bOCzD7QvJow8uY5-xyviY7O!XiZ;t09zJ<_bF<04+
zeC&jDE)Jg>$>9{yzjHDK02sl2L75?4Md$R4^G}aVt)AnYw9j#(W{cL_GQT5_;2!PU
z(8!AcL=ue5$Ifdjvi)YOM$R}fusDPI`h!)LOheqhtA8re at whxAUja3<RlwGjvg49^
z8*O53ti5U`hHRW1Lvqpdv#cYKo1q|@&Nu1N{QhOES^cM}h9C)@cb7G>zvJy}@|#3T
zG^uLxLm3bCJ_qSSbd5B~=J0PthXO#jr7Rqm;D`ibeJdx6g9-!PY0RF at g=ymz$_EaR
zA?-UWP>E2qA=R`i+m{vklNU#Mw8kkOI1;8AH%r2*Bh<OP0NAUJddRV at b^lypFE)W!
zzoj9m;G)%+3eaRoX*NTZ-sWk?Ll;G at q`T|ef-wTdz(m#c-5D2<=32+oPIU0D at fs8g
zt;<)o at unNn4=hggVeHj$FGG&%rhS`;8!MHUWN$0{y9=+Eqigee#Sd$GFFA;(IWJ(h
z4(J at eboE!N6fe1CM2CHUNUVh4Py{=iO()!RS5D~_|MiPRprK#l8D8_bC-9>C<GgK+
z8SL;`*+i?1xz$&C<+8Ffpr}2+?VT@~r-=^+d0#^pdSZ$}=6+=vR*zg8^yBqLqCU4?
zbuY$w64`2tZ-xx)$oi{!7RfNe%U^&Hl3blC;{zDJ@#DTUCee;rJ3#fAD9}yki&_V^
zWFvi*kth-wHLJ+1(z(n*7EIIzG@)jNsc9DU#wDtO#-{eR at -Z`s;}hdfx7i>|(-l;q
zCgx{o3 at mdq?*-P8o<7zDzX)sIE at 1LE)~VY4>{$c;4`3J=h5}}q6SvaM)-4R!+nqXg
zjZ014FHctFuAnj<Q^~{Ho;Y|8X+VA}#ob#qz3;fem}0z<L%$fMN;DYIL)?{}!FAx2
z#nn4sx2kP==!CLSkcYm*nqyUSLRf>IZKx%h2wWW29!<Qz>nU7DkC3?gMf_e_8#A<)
zDjEIsP1be|Vj-GszykNP!myy9jnmMZQCEX~q8 at Gdu}uRMTOR3IGYB;~8}Fi44uKu{
z^lR?d_{Z0c8h at HCA=Cr2ybl@{oN){JnVuyQj_^PJ`27UyM8!;8l*J2Idn9=(P?<N6
zkTrtm{jdHJks{Q6*i2dW|CU`0N=SyAYl`6N7GF1)=2W1(oBGQe4R))nu_tbg7z)#F
z4aY~G3KQ7mE%uKsqbqF*tJX&wiy?yzrNb=-(o$Of97p3kv&hjgz%P65sOJqPQ$=iy
z)V~y^ahQMZPQ`>O_?Z!})G{X73_Q+RvGnOK4KQiDYK(>$Mp!mBvmpKQlDe`R&zRMG
zB{r7)es?r-CN>PMJhLcEQh5Hy8!Xi3gaTf<S$)K3h{{J!*iCQ&KH4-dsmS?h{Ld03
zu+QMd-cR+_>SDX(?1VQp$!?PR1(@k*<)kwvjELF8kCqM<!}EnKqZ86eyLqgD9{lEK
z`<4T4 at EL?7TXILqo)S^?RRT>5OrbOCjCvPDn|iNlV$OfwiBE~`cfdT%m3-f(UO*5$
z4r`bc(@BXQ at 1W%WG%o|&X36gNvWarG|LOH8aGH^|q*2UPXn>aWrlTzq4Y=1Fg?FLQ
z$;$-aWET{f{8SA$Ca>8_sBogaaJ~b-H at qgETv;~U^IOxMX5nL3$~a_VY-ava-$l$}
zVv6gR58Ws22;W%k_6~H_6fCP|-+Ocu^Am{;z|ESD at 8YLqGmeAKt@1IV!%G?c&zP!O
zp~#OS@@Rg=gQ-BnN?><}eL$O(2EinamQJYIpvxJFzQX~0RUsP82e3yxz-y7V#q)aA
zT$zchWh{)T8(IB<MccNN_3rSTAi;pEU-<k3&?oy{=VDEbF||*pXBH$wmIvrY&z+TQ
zm_M(UVlGf#K0Pt%(4Z&I6pXrCDrt!h)8RI3_ofwp6gE{cu`%z{*K$hLDXX*?T>f(&
zExe at +p_0=%o-CWl!QYH}Wg@;oUq#296hGsxBx+n|bkbVQxEr~=o_PQv-=*$XvxZNg
z9oDGt at CIlBEblPN!da|({mK3PU(kr?#*y8^xoA^vM at k(i{bfhWWx8TUfiVbFT4p7)
z0t at Nbr37!n$740g)(D=TcF~mrxQgJQ`<LzO3$ampT)`wRVFszGpLnl@>5xST<VNqu
zN`QIMRtjO)OfgpdtiEeJJ5#%LoXZgRZCj^OUA{I at r{G?Trj$h~q`Zz2fRYFCs{o4o
zk&hiW20}BGp2^(@CaeO#>fCj*>JSZrl--S=LyRkQt|Hkb(mx)^- at _XdEhb=easz&+
zQX`P68cv?Xk(*Q}y&M80^BRq}G^*Gh?~3K!+mP5v$le%GQ{;nuZwiPFGRA-l*;Z3G
zQz+oH4N-SoR#$E?%XoB4(I0*blrGEDxzpcfB?Oa8Ml)C!56?_z<mJ<FK at UPjoR#4K
zTRp7rD-XfAR+0mNI;1R!UeObm6pF~4X%?3KxMf!44a2ubz#50i<L85P@<Eaeqc1=G
zuXyx73iqsH3qaDrBT~Oz(0F#nnP3bMNcFJ&Dii0J<%JcHMIDJv`w5tKAXmy-b(1j0
z at 06r!9AgxguB*{NZ*1XB)ZD=_MOpUk5$GKodhBTd0s1w_76N78`#bNm>d_qv+!9rJ
zPM_7W!xgFnYfSUmJ1KSQTtF{!uj69aWQp5S&t!PRCo-3qaAs3~ERuNYHewC6MYI@}
zzayu{7D)C at 6XuYBht*(B)ZK3oi5%y_U}}WUo}mN>JHHC{n<7A8ss=CKMkt-8i&(84
z#Ko$UY*tLPWqksihrKU|>CM>!7a&$m0`UTrlNdoSXtEI|<JeYEhvNna$@+l`q1gB(
z^nf<?Z9V8i8|zdlndP%m4ivrDg%jE~h(C~52_4E+1hIl*0(WtGy2Z;;Tv(0zR{v1-
zI7)m(oB13m2rjXZB?|xv6>tD=GJHu)GzPN^9+%3qc|DO&6t=%vq!#T|{Gw at plb=%c
z;CA(sUcj`*h}2E-N#DyeXsUkzmg>|&dc*hZIqg{MalYE0pgn4AWQSIs(aA!bFv_!1
zT?(r`mzzCpVgiR1suasZB|a4`(gj&c=H20j9kfcAWPD9T at sauGarn8Zv{I(j@>)#3
zH!NPugtbSLcF93f#GeBEeRl?wPhTR``O{vfai0HV!KfHK!gEX>g7c$BiG%pU*F+5y
zsRQfx{h|enRO&BxvteTxejK%V?Q|~TwmUbM`6tEgge$KskL?`D;-Nv9)&Qj$xK$$3
z);cy30JvlD>ki(tT$iIa-QuUEeBe~b&Q5q1R~pyC9W7v7nJ3(saMi#bWG(AJTZ1du
z0Cx)gTztO{I|6+aMVQ=QM%AR4P=@EsAiqZJ&(xV4;(Dqj??K8|9EbYEBBW4YIudnE
zAk9qh{iG!*(BqDEYAhl9hOj?7kEudPXa{BuFU>p}+ju*MC0V&&5QB at GXoi#zz?c2Z
zHBb7nC3XtL2;=0Gxfw#@566XQHt>$(8E^!NC;R at Yz5<;Sv!I5pps_xPt3}p649Zrz
z`j36p^R{nVglqCcUqb70rdpx}Yevrw%C=1<Hb5?6iIj-BXDuYjp{l*TtjdfRyj~yv
z at AIBRIcz`2jD+*!xR2Cgvg5E8ZH`i42JFlRq1HkDOJbGO5lkIle}mt~qL{LPNOp53
zd?)H__+M1LzG)MMdZ~lx`1Q{ELbfhN=95&~L<KAt$2PXX^tpiLQIm#%GDxOz>Uu(x
z?njdypvL^=$!=LUNM7SAIF;F5Cuz)TwlC}MMUJ@?UlSOJIv5p;=2IWYJs-UQ5O&LF
z&+)o-pJPF<F|`q;7JHl&OS8{vumBFWETdl4-J(~EsPi#mvj|MFnfPIeUY at AoB$iU+
znZ+<sZ8wSx>-=U|L^5DKr|qf#srvB&kCp|eCbB!nbFk!Vob<F^8(zeS4 at IvF%7!lC
zC+pVit1&b706#EgQ>*nk;8btFKAw1OnX3(EqlEIqAl%XI&o{IQIO$^~?6PoOZlMSI
zctlvL&b68~*Y~<6BUaIQD|ld-Tcp$PIKYE!pks~m%)^PHJk1^q#fX3xxE>t<q*>}b
z2B2AQJiKk%fZ9SyFZJb7oSiEb{Qcl62)C>5!A_GoP1(%Ml4;Q!XDH}Oag&32L-~;0
zi_A`a35=4P!O&C4sBcy2eyG at La}<x$E4JS9!iq(d&;Ka@?86hfZ_%j$K{ea*$H|l9
zb3FQs62iNQGNm22g=0b`JKk78?t2}mqQ;t!1$e>5DT{yByud5vg8ExW=9xtR=Z_a-
zHe^lPcM3SC*~Jvfs+vA+?#SdoQ2nVe)hwt;*(46g#T6>Q*CCh*SFGw2dZ27nl^$63
zoVaO(fqCdzosA|1E*XWp2mT#|>)9L!xX;>H81fAl5Z40vQu_v`=qCfLyL1xX_{(7z
zT6?HqVL!+fPlKOy1|7 at e?Y2UM=1SDng#;-8P0b(fSV05Ge0H?>-0OW<zTP1aKQ7&J
zAy2D*b8i*+3AGqW-mWSIg*YtBQ#wn2WGxXU75fnVT_$~+o;cTaHXY^R=~uE<>=P<p
zws9EV5f1z;tDld0opir{NG6jZ`GvNDL4zqx*@<y}98b(=RinybC`XpN3gruY+}<Bu
zTIT)FtlpaNen5CZ%?K1Zh(_$$HbrGQzRX!rjaH{15RmzbzWnRqV;s%dWmrmH2yuqX
zZvk`lVh{kn<TA~jj0#E$7oWFajSe5D7`oKs53~cY=@(koA{_Svzv>gHM|XE5Xzd*!
z^p>TaUB?~TPm>pcARZ$=H~H1DJ29{vCSGLOA1RQVO}}d&hta&uaG3R}kjldRFt at U5
z5D?YGPY=S?zczV2=44W&_B=ndrR7v4Ob;q*vCuR_i~)b8u6LeuDI~!Wa*5y{``d5s
zG?T<MbD*h+s>j{vvv$)0ZnP<?;CHaNh6_Qxr71L#xt9{)-Weo3MRklv30yH6$_^~u
z##`lW>|`Y7=9dAH|AXS94MyYz2SGyC5WO=|@{=8R3VwCeeq#<Ai?XB=nKa~_e4MAV
zBD|G_kb(SVcQd5_ at lizFNV7NnBJZ25cUbT&>p^nSpjW*RCs!DFivupLj+51~>l&v^
zPhQA%IRQz>qJrCtG4yz%xiDMkmoMaotjnzV{LNjuLTi at XQ+gU778d_^higE0QO{1s
zRF_z^`q?i at x+oS2RB;oAz5;Po+ll(eqn3niGrIJr#u5-OloahxI;PGzLY?>#G~X;K
zX7GY)6%hDOROG{u+t6s{(vM_b at NZgQMHjH*AB^=-zE7#Xhx29{#YbsOi at 0lVbMXY6
z`2l=m!UmVCen3LAn at rZ7xEB&oXf6Gpy7sh%6U`~f?wN at +%RDn9A%rC`9+hu;_zL$~
z`@~qivdn`Qk$o}#000|QZj+G1L?dA)(n82f_v^!ulVPIascoi=tA_pL8jjnGlo)o^
zvh#!2c6u10cV at DmR>8qBb)dwa5ZH*)87}S?c8fX at aZ}^~Y_!loo(=}Wx^nT8)d#E~
zfLO%8G{McRAZt)rTW;a+U$+lISf_DUZK)JH^iBV#s_=D#RzZOMj!(wbAq&UEwP-~*
z++&#hfe(;#*2ko9x|G*Ky<Gr(Q?Gv^D4Kvxr{e9Js3(cx`3R(ztF(|s4Vi?Ga>^>v
zzXlx$n8}Hg->d4SPyS7BjZn`ujC8qM>`6vi7Wo(uQIWvzS5DwO3q53tkRf7~y==5p
zT at Pwt2KAAYnOGUmnAK2lb*YT>?Tf;JqZYrdmQGupL at x9h`U$YIuh58^L+sb+cbZA&
zEUC>L&lp0A%qat)%ne+=d)ApL;pyGH%{5xzvxK4}+B{O#7Xls5#z`o^nBM=i;DmT$
zohK?tFpbUr6>m(MwpNAGlYi)aPZf~qMKV3iD%RI_cYYPSCS}Qo&P2Fe{tnf4fjg7E
z*(_fce2o%1=C4q}xnGz@@c^bZ4?7-`h*OSCLkrP#=nR;Q_l4(F_Zo0}iOK}Sbj8`G
zz{NJ#{_8|oIi<OOXHhv%EbG}meVW#d<)og4#5w=TuFJSsL`tWzYrG*I{(4{c_mG|A
zUSUs>k+sE19Vn)juP*}PaueC+AKHrjdf49de{X-X&v8EIzjAaY;+3-DJ5dEU9LFDH
zzy at 5l@tXjQ2w>}jpruE3bZ?WX4A_XNDC+?(s~{Wui28U?iR+;vL;xpM3>f6G+M&7g
zi2MJlF>-!jw`ojEnDOlBT$;RcO!vJd48IRb=jq8x_C-re6K+wCYR`~8>|5h;&NF_I
zlUluu?=JyiVEkm&vG!m<<)3FJrJ7ec>~^U@^p&NLG;bi$9Zqn+c*=VdXGmsFQ7Z0V
z7~siEwG)s`nX)hp{g-@%jb;uA5?tTy at FzgnzBk{0{gq$m<gv6vNz*I0XL^AJdrtDU
zR2Ynz&w~S1>$w2*9b9#B-p-`mUS?N6R^ZHj<K$+*2y}-k2W8^(&Bo&(T(HG*1F=LY
zb<u`U2-KMXs^Ph8H1|KW{S4tLR`Km=aoYni69QUC+0NkECj-?~PN1l6qiwkDc%=w2
z7ug|ufvqtE(e#<tLd>fB)KnUGuUVJ*%bvRz&{iyBd=Lozz9dFoRv$6IfgzP^SqMa-
zl{o}D+D3=L-%<ni&9n{ZlKqb~r7$RZi=XfJp2LeFksaPYv at rJ{#agF4$9t9Y07ayP
zG?bAaW}!LfJ`~D)A2ChpPXFFE*%cjgCQBB0ilP^`KHop%+k+(t-n+rU#;|?gZYoHo
zEK(xpSbIB1Kz|N(1k?4gdiBpHgVkAf)8NCc91XFrU95v<ty30b)c}9+*0yt)t<p8E
zYfhXbKGr8T5;P}RE2^{i%Lnp9ianlRRh9aS3shQHoG24-`VCEUQL7 at B`$Gd=*YD1{
z$20NvtPF44EN-5S7{}fQ-wD)NUa0<ujNwys&dg_En at lG1-yVDc$J8|do9MDy=5n?$
z^Z$Z<EGV-0WjU60PIqr;r^UuAQiD7P;R)i&lXIApTq^(^GJk0V;~P6_*&T(!6=dQ@
z?sV}Oy#`S^C71;n)6k`Rpc at rCY>UXt((PGW|IEt)oL5<!%M{)(h{n8#?9b21 at pNKs
z3#|s)^f7GEN?>x-vXOnA?6~}bx|H=h08gi1XYj3-l*R^S3snLPc*E#}uO(v7Ko0wt
za3u!f8bSgB+Oom7m!=Z!frIy3Z)E^>!XTj2n!6-j+T>D13R!YSc*_^PGessUx7pDD
z1j%%krku*gRt#yNM!#>wq1}OSk7dvm@~*GI-R9)5Hb3j?eUwn^%u%bnJ8?Q~2jz^5
z=dGfN6UxIbvRQ0SjF at M^7HeGK=vwb12gZ?4 at C)RW|I_dQ3X2e40yLQN<Nz&4aSD>y
zBwVm<7A$<-4rAqF5yx#}X+7(qdUtu`B=3)OhdY|x?7;h_nz?x;3N(C$7b{#wG7ihE
zGV%GaYo*T4`pyj##uIL~IVa+%dV;aY@#`j-*<vMb(9F+ZOAgl?GYk3B)N9JzH2gKP
zVJVLA$%S>$yEz5{d%`w~rFr^#!D|8DMDXjA%EYY>Oqyr1zUybS|3KyzPAf^jD__)-
z1f>LgPQnh~*FHAI-5T1oQ!CT;15g%jUW5?i(4iY<CN}<2B8>Y6?~9valDS-G>GAj=
zoA@{zb7LEoO+w&tAiE*<V-0HN(${gYD!1}+CAiJ+l(4j+E>vR4ytwG_O8K|Wyh&_R
zcAt-s81b?he3{KMYy}GQyLa^{sC;36LOY+&m-Mz;HfI)aoo at r2l+<-HavFW1eAgz~
z9J_6><px&fwy)J$0N|D<TNWNOVfDPi#cx+J2J${;`fX6f^U$E1YqefQ%=wh?7wq)a
zsk2v$E=ih;Ck+iB$$7Tk)mDO at CYt0i%Wy&KypdvJ*O*v>JKX3t$M`ae5qm?GX7ba^
zq#3=X>R4lE?NU~{1U(KRvzX%WMA;tZT$Nz6vEhkJewO2c`SrCCev$hN5}ESd;mRu9
z$B at vY(26GzraWfN0Yd18KxB>K8!F~e7K%oq6awTZ`REw01%+^5wbt9~i~v$up8f1S
zXEIl7Tz`IM=H{iJCbBJ8J-uFSor9J8eH3r48CjKNs=CQG_V!LzREb5nK$oe?+9prD
zx_B4j0<ql-kzv$o6`F`JXHgZ^&*Z2t$H3-)(2cs)(nQql*G;jEsr08G*S1uK6V}}e
zdkM^|JH|i#MJ|;L#G at 6>#QU=YUE}zmH9q3o<Bi2ry*kdN(^E5|W$<FVzT;XMVtGYU
zIvkFlN^kTo)MPfL>tc at xVoR@DWmwF4dCBG^4n)VBR<+H_Xjv(zL+DPNeUNK;7N6B`
z^~^vKlVS;Lq_3lS9X#))?VSW&TwJ(|+Obg8`YAHXFGPjo{A))i&}SRIIz=~Ye~QL$
zhXyO}p%gFIg4?&R|AQx`Vb9S7!XaRZ{aP=7&=-5!9MULe_=nU{IGP4w9 at h5FLK0dN
zUZP_#UQIQ`x^*lSxrz*P>honuO$<?2W at zeo+|v^b)O>QRZ-dNtKCyPYx9A19F^V1T
zTS7Lm>rT+!7Jc;1oI*MvGoa#JqQAoTErzR!naiRQUKx8BEa3&3OVw083k;gsADbxz
znkCgYqV{LSV$?5{(Tfy_N?J~DTtcovP0DAS=X62+Qm$^FCp!&M3BcibpttK4gW{Bg
zp_V+?COvZk{jjfIEsGEroy`rhv%<HWSP`;T5F4t|l)Ea0<y(eAn5-4J!cQRr9AIYt
z<#@ly<}v!)EjS0j-tfU2j-Up8b*MQAR9uUe$^%Y-o*~a1Po^KRUXi~`vY&ZukQDVd
zh!^JwpfxGD0S=q40b}0*7gd;$$(hP+A)Rs^BX(njT<t6nx!?n_)RC8Z(zo3pn7)C~
z1_1)henhI14>2d%SduV0sA_jqJ_1bPvy1{rl2FP=$K<ZdSAc>Wog8DcOJA)^jWU!@
zt)FMFBo{dE6kWigZxprxK`*}0LbBHL{pHo7hZSYrky$38dnoUmg;CYAMSQ`f>%+n@
z0Zy8pCmWb|wz=gL3$&MibK+^q=&dvEf_!|LD?k>L*cnGX?cDM^f at 3%ud!z+aXIHZ7
z09<Dr_5VZi6j9w<@;}Gy7>9B;TVB1SDB^b{N++&e06xul%c;l;x-ASMgCNv{>MDJa
z1XoFgbb3jwi?Yul7-AFBX?bG~hkX^SB!{&KE-Xbb0J&$Kxvxhpmr_`wjpz+dqfd1H
z$|0(|Q8iAmPD at t;GyWECF077Jqv)|{>&PSvg0f?S*;>khVv<2VRn5-{AYgL->PuJG
z#8Nwm=|G;xPK0xdpg<eW7X^mHkhk_wZ%^uo_<_)p8U~*sWRA#MujcAKOjXdd#|HSG
zQXonyadJW+DWxUJ4XZrJF8BOyU5%qrohqth`F30 at s+$dlo?5*PTc?=vmye$q`zMII
zYG<+P`sY&@zgpa&PdFDZ7%a-}J|dC1dVZ?LU at Ii0e%i3ZFSHJmqY!D|CmrD13~W(U
zzV<O`jQsB(6#o$4)W9!0n*$Ua!WM}+IO%K1{QQbT2W~)!ud5zV`bmz+y_6d+yaP^-
zT1V(c(_s~UL3kAQHD9qUk5`1=cQbIvVxs5@`W%#{Gg`~sCy;y4)Iu#Im&Bt$8e2Dk
zs^GR<stijp;x1JUi2c<gA7gfZs=pI#U2QysPS7ClGw+aM%4|t-WNH$(+1Wf_ydeV{
z3fK_CF3~begCN#MwYKYH&2_hPU$TO9O1;sL(OT!jI$#HCKgyA>piY^pQ(_N<PL29)
zB)S)^$Zw5tv!K)lv`ai&MfE7q2!g;v6I$cgdL*k)b`co{g~s|Is@{F-;v;`GB_zT)
zoA6Hj`9YrS;WXkROnCQXmW6nO<0k+>`;mQyllF0WHol^;Q=Go|Viv7zq2hu7A?=2I
z6VRWa3o`;{@aEONdj8C at NdY*)8~2^%f(UORKJur5__M_)8hs#>P0$tQmpy1Y08^>R
zj^Y>t;+`HVrc^L`+vwLmSj4S<@4sFa%iVSesw%Z1TY?9_AC;$4nK2Cqj;{^57Re at v
z at 0`@en{z{l`}in*$k7^gPiS61eRT?63!pGL-b7uxwMjpp5SMu06IUfOOYP;J7x9n|
zzyh+Jpy&+P0_ZWH^wLanvHqoZ)X08|2QZTU-S at 7eLxcLVpEO%5)QndrJZ(jFRJ^=R
z;Py|Hz^@vI7^87jY4GG?u01omXeMn!5b|wnY7p%{eS#8dR{2Uigfw0O^&%sk$S=7(
zz at -?;cj8}g=d$v1 at 3$+VTR_abC-wgHC$44jqJq2REL?rw5nX`k<tyc1Lo5PEvnK{o
zJP1qo$u`9%V-?1QCRtQM5JIZWyq5ayy|RaBcbr6p6L^d%)kqGi{aj45$!DZV$9cs$
zN<4sqmy;EXVWgh`>AGxQ)?$h?rMfM^yVN6YB;mPy;XOCS;g)@~8 at vaN>1zYxM7RGW
zg+|MDIP{=!-C#kG6cf{(6sbM3;r3XX_M1zEJ}J8(r at z2*t?GvAoKA(&l at N?RiSbbu
z at -D3O{Uuq}z%t?EO30pK)(r>m-ydy-kXRzTG);*;Er_{9Jp5WoZMb~cKY{MKc~7QR
zPGxyi3$46}#YITq$S<1xdPJ(}(NO4Gm&wRb80C|18KLP`#y~O$48DCI#w~_|#I>}g
zIr8{(C}Xoc*=7uq3<?U(3Fdws at 4dLMg<>`&0L7;N5q!NkwZUp9-XYEHDwTNpmsXZ<
z3YFPGmpc{fr{)l|7v#>htmuiQV<P=E<0_(e`jUrzLlvo~!`EkwPoT2YeF2AX^R20s
zm%RHlaB-xXldfG0nPa#?0^Ek3V%&&GQs^(6GS?~61w}ljc}i7ozM~x${#1!V2z^yw
z*yPmnm;N}#k{vd`7S`$P+2`%Kj<5>gEv#=)45;rkW3|p8A+z)(o+u<6=i^4 at b*6kp
zJ+6aQVWDKZr1!>K7IfXuR=Qfp(AfBnPbSF5HJX2fTkz`9TD$+ZW?mI9+XKW#rk`>}
zpQDu(GB`ThdB*1}CzrzXM``>3w+;0Fg{O~)nlsCj6882~Vrs<Bk4PR3IFc at np!}&u
zvJ?xY^SHP8jgf|V>!sTxIC_&e*Y;}H0H=`wA$=2R!cD~#rYI!81lkN=x^RnC>7)XY
z41xUuJYwVde=Ex!!qcjjMAF#u?IKT2HnN_FK6C21l;9_mCLs=<Gh8bWLWnZkjV%@u
z_i<&+r81XyzVtqdgZj(JbI2==C8BF`t748dJhsP}@cN2Us1Kl95S;;xJSf(DJT?&c
zJX9XCgn6_<O+aKYIs3|kZ-vd`^S|&*zuOr$ds?LWovB~?<G7mIZg^?9<jbpt(@Ik4
zY`;p=+d?@~rW^Xvc$-`DYuF<~puqwU{DY7l*CkJ>QXr8CDY&mz^k=e>Dyr#Oigad#
z-4N|HAuhxxG*OM`w{-Gb?lwA0c}U>bgl9YO8JmkhjwLG*{#u3I?)tmPz=%7AUfej}
zZQl6`*g?w5n_#+bh4>Evq1V|vA4h9 at r1?)BEx at TaJHFIDXN6#hLyp*TV)}isi_kbt
zzUNJ0O1Mf@;BpeHN+Fvb<kjyqf?TCT3cBkhjz>8ZQJxJ^CsL)X8+wHse?bymWK{KD
zIpnsqLed$`qS6WDT|PHV8AU!b{IA!ZKDvy3brCc->`ko_#0AnO0#a=j_Xnmxi=tLe
zNgbI>kgYuxE9*QSfipim0g|+a0o|axM|3b^1yoZnefEisVgz}P35g^?Bx!%6C8<V}
z)Ev!y5!Ph=mM;Am=VMvkVB!&vOlMT9QIcTI-If=fQ^t!Rv8gR?)`*T!!x4t2$;4e4
zLw#43|B5JKenCF#VYaQ-e<(z#F)Ut9b_4{bl at ub(Ntso2h&Wa^UZ-U<qvbLjacX1{
zUxuga?FO*b9R%>!x@?Wh!fvQuo?Nv at oi0anTH(XpRg#8*%Jd3+ETZKVL!=L8hVbRj
z>U$!cAlY0Dhi^PETULR8(<I9f(#&8Xww^i>Tt-WEEno97%To9l(|*oU6GRn!xIoDi
zNz$^}2y1S`>gG#(j{q}`&a~x9QpGkB*4{h`gHaM()_3^0FM5KQC<GnPObT_K850(9
z+`esCIad92o;P-^Yj)}t$_pGM{GpY&JJ*KPbg~}CahrYpaMtmk-|Il9a@{Kh6^>yf
z=sYo)DcbJq8C3Q3;vDhF1_m~-%#bWxf5};VPs1<4#HuI(GK at W80QQ7ChvbQk+H7n<
zWeZRB4dF`gb}8Jjn(4((+5MuPZ<yNPk_)N0T<CfgB#Agn#qrWyrQi-^Rtm1mS;Z8*
zv!;}75j0{rjb$s#!;7r9={w>6Zqy}0DRuT!$_-%g(&Nq`getm%N0TDUVh1_-zSx9~
zosmOo&N6_6$kr8;nt~l~V0id0KRb&-ynmnE2 at jRfqkQ<o1MvZfQMa**BaB6ld*m`E
zXh4+Un5OyDhrXSvH4RQ-ej}f7bizp|u%~{a7s=baX-wP4Pmgx-cl6_LW~y60IAJb`
z7G+hFo#pcB(0LD##5~<(o5Z!_V<`2TREvr1*w|f2Q?oe6M5%RQc6%Nr{PmS;22NDv
zcVJ<bD_^?y0!5Uj``bi!A*WdY^~y<M%wE<3!-fJ=K-oL2urswW9buXNDfUd>5%u@&
zuD@#U^7QsekmM~88Hz|tB<;Q{^fOyG<UT#2B9htK!^5qgi7J7-;O8m-wVR&4ddRM9
zvUKby^I}wi-%Id$gV{>4)~;20u_|CB64v8<HF%tAxIRqQA-_YW at n4>^1nzPR>C9QY
z<k8%QTL-mviOdr$OUPpV5e+5V<H&^^o68fLmN$G6#tw2_xN at 1pl)B^%$kIU1Ob=)4
z%`9P$f*k__<DM$|d|es><+Sl`sV<@*g2+>!X84>t1J4z0socF7mI>N^-Mw^~ubz<!
z*5SQJH@{;8o2?Q912n{PYt2Sn%tPPkzAgmVbucngE=8(9dXvFoa{$zOiu=(#8XX=$
z0=>C7kPi8x=s~-kpy(5AGpehv=IGaQV+B@}H)GKfTm8y#nP;WoD>AXQzEP$$UV)(<
z&{A5(5Ij8?)w_B^HGLiXN*Y$}pe}LQN)wuvt+<kHwduLV3RS$~ZH&mCd0t8{qXm3%
zImhBrEEriY<{p9;#0V#Gkt1y}=Hpcs7a0MFlCG=2X%=~H+l-jd79W1^w;_z3eu_~)
zkw=fJP(|2-vktQi?wPxDa*7aCc`Xpb&gb>26<6q$?2Y3IGo;?~u(i((qizLkGo%4k
zu at Kbup>H2=XqPef57d|GxjA+0482$CW0{UwBfQ5XM?z2XP|1Lx*m^>-|ME}AF8~J8
zIs5!=Qy<L6E9het!in3f3e4g^=D}q0>VJXC5ycu<nvshScA5G&jw~s?98QzQKJ3jo
zK}9Q=*m!+8vB=W;CCM&sQck(>tD}+TOy9t`BlC;{MaapB1Hs?5lozUtj*w3lkbm6H
zOtP)^u8bX}<e3TopIaO5VQjQ4lc99sJ<&-CeHw8GVN-O)!f+zB_lPQm;|`|iwIHC|
zrJSM-AB)Vv at 4!)wOm!LsQ%q$P)Es!w;7B8lvmKoY=nWx7C)yn7bou^}F#LJ<!cjes
z5}DQrx&dR5y}td_My|1CkVFWb-S9wZlKUAEvivz^4~@+Q{Bk#^7PR4znY?Vmi$Fd3
z4=?m4pFiVrM%hHmr+c>|X%94=7aeAg2(27>_LugMyq*get`F0P#l}wgpHAIusVpn?
z^E{djNB{br!xE@<?Fn)8^}K+zD56Z{zM5IoWn=Y+3(i5+*l^uIGBX_nWYivkYb3fk
zm$`Cv8K7EKxBm9V?z0iE%&FU2Xp(ecz^bt2PEW&`Tig%~qpzsVpow9_`J)LY!J@#<
zjr;PRLgtQgHwwYDE2RO!@GY5&1)|<{p00!3`R}plXhZJ`fN?3mQYT6FN~;v1)Xe7r
z(jY(j(cdM9N73p_o)emevT5K<|M=F%mV2#u{nBpJ6_{~3lhDs~e`5<;aqVmu)j&Zj
z-{$`Bo|Lc3 at R3uhrH9$jm14bx_^I>vmEi6ApY1b9at?CM)UfI+<~v>+7iy?Jmn^Cp
zpS_tF1}NYhTHEk-tW at vPtLg7L&XsD5#KJ|DL#n-vv(gHhrRv+`Mz(jQVFKnBvg_Aq
z1=45P9f%1by+cx at Td9B&?BlZeDYPJI2D}aBoYXB}3G%$3jS88eP=#a&5pWMvRCs-Y
z)9~ysPVm!Mt(woh^)&*hYN9};&rUk?CN`F}d`~HNhdZKyJiy#763rw4fEQ1_=-pox
z#6b!viT8>oSEH=7AfJrFV*d7K*X$>Xhy0rtNr)TB^v-2Ry&D(nI>T&IsK<e_4I23u
zZ*gT|R38v)0}I7KB|9znvfq;c%fB4QQ7k6<LGZTF##|ZbmQvkLWExKx^aY`oA{Uwo
z?w4r$ReGj;Qi0DunDAfFO6GOkq)D~4Z3q|wuzV$4$d75dQZx4~;<eVP>Q~OM05|`%
zeF}5{1U~~xkI)s(2aXa?l*Vi!Euh}%wte=5<B+>R#9bApC-eK8C7VzR%}k|-u&j#Q
z#tayTV&Ryvn<Na>WjGp0O-?aWD!FWAn2~0eoQejRj9Z-jniJwLXhn6OupmW=bDaU+
z!7TIyB3{nO#6~&MOguck#-<6c4GdLuQ9KnF$}uQql4`gh;g<ASc{;p)rj(966bS}A
zIqQ^of;=O at E)nnM{ADS%F)d}-7W5H^>eHLt<m&@-_XYb`eX3uF_-3B}HQOF>IBG$?
zG8MhNgCF)i&SrcmHc;Z|h&9WwcJSs7;EnP2kc+_4&(g^~A^Qzd at w9i0f?7}&7qzaR
z9nE5^PUM1p3L4y-RjF+qi8b9b at B=lIRF at Nr-4+6>z^xE)K at +W}oz+Gmga(@Fq$d|M
z-d3RSpc-nCa?)!B6agHT^mpt-ZjmZ!^fm34Y>IPQO5^Y;Q0dIE#5-p{92#nsQ7eu6
z-H;qI+;*0(=HQS!lP6iu=~4n4fdw6j2nKWv$3-9*{QzCkG%_R_p;~R<SLQsEL<iOG
zyI26QmX;I at I<hb9y!@*YctrWViZdVsQ>7`bH1;Ayfq?2x^SaT0-pXWwRvOP3T6{Sl
zK|Ls&IW70ScMs?{!g$#q=zUH{6>?ME0s+AyJ!ei;>A>j4aWD6F`K^m;lnV at a5$ST`
zR1K!LXKf~}2_gm82Xc9(AlV3@#M#H8R#@YdZ|*4kK8pfH?r5u56JBX at Pgoycg_Kc7
z>DS$GQa{T9B}*usGT at v800;|ot<uf1PkB%E?~hZSv6iRJpz8T+F2-=wxxRo%e|sG|
z^^t=|C(0jR0#n(SOwjC?ky%v{7Y(+dnRI0SUUwwErijrnrPj<@Nm9H<w<;O5w3`DM
zq3W~MH7YDhqqwyHU6i<3VjeSFyMGymYR5+CsA_QI*Hdi34IpC7gos#3uD$>0!M7Y9
zI-PvFR2wVFe{KVF@)~*?Ya?Cvam>OeZGk2d2kIsJ!xJz at Q)9QUSUT9bU`<d3q?Fnf
z8jcw}!}%fqFD5ENP~WJxOKk6(!JLFQ(Wp(2hHFv at CC$iVTv}*b?Fcq1IV+9fHAQ)w
z3QeDlrB9;!z3QE<bR^5_IVTZKZk)nAv4%k+twq`4PdM1N;M(HxpSu at yeO8X7`9Gec
zc=5^OY7S>mu?LJoSWsv%<vmzOu+u*pcG(_|1>**!yn5^inFMr>^)5n5KLGR(3Psrq
z85(!>f59*_AssjS%kTQ=>~^z<#9WonNdviJl!R)0p?jm)R1;(?%{|l<WvSH`Z at cM;
zEs-I}5r(H;Uo!vpqnjE#YMBhU7ByhYunL(yDq1#HQOW4BBY%1z;>^qt=Lx&0>Y(4l
zzsY5U>1AcPbM+B@(vI9{Uw5 at 9DvFxuCt-iucsDUhGAwk-U0+qVQC7EUGIV7l?X1oO
z!A0Cwjx5hnWP+6)hWq`9&S6=hdpqz#?LbI72+k$|1TIwkfY<Mbq)DFq5hnM1Q8 at Ma
z9-A#th4-SXJ?@y~uBKWpx;X<X4R_lZ1miSd64tFnld5eI6D6GHTX)69wy}@mu{z5l
z8V_u8c_UtyyGTc%W*xwwZ|4ZCrS31J{mP((1ub*CQza*hTHcY|fqC=}<N5AZ1gnl}
z{9#1%>Hs|$B#=Yx2U0zL9E`4m&QX&R>RUOOV{@9J%et}g*=BW%p<%1^bG_$``45iz
zR>b;rTIJ?o*)8;+{kG!eJNhf}aQ^Tne{(SES$x;tRWZGRUc%STQlfdEzOb~V6N+sU
zW>BSeMe8uq7H_2OU!BJGgUv~SLxEgZQ4q^0*`JTJatT3-j$DVv^OLrn!J?+W+!vdq
zy}j5}Gy6Vt2k^Q`1>OCC5^-lt1zTfLj%U#`Y0-Phqz|4hrs9O-Xxsm2KUEh6{j7ki
z$>(`DLh6>x at PjDkWz>>NIgLI!8U79;Q6y|wV`$(`Ld70>_AeryjxCb9WrZB|Qi~U+
zv?7RBqKwb-!l`to0*o at aqe5VIRT|2c&BWv{p2*&kMJ?cf)t*)Us!+I!mS1zL?#{+u
z)NgPMZ=M8*?uWiypRzuiVjJ2ZJuepDaccfUCmd^5u{(fi5ft=sXC at F<Zfnv|i&E-q
z^r;UOhLmSPg^~M<JQ9%tY2Y|lQr!?z*E%`KcaH05us^?P&7jtE3Rx^VZm5FTrAgn$
z&tGM3vrGn+-qohzZQ#1vy|((>XG`r`JYNFlwE6zBb~L`ds)BSTNc8kOzP at cS+6M_T
z?vBN{?W4=qCaSGkG+SDX<4aOV0!xutH^cd5WxvEF3AP!Fwfw8G;l#fjuSP%=pK3I~
z(`dB9P)6k?&f+=|7++a)Gj$*?QUWH-GdQsH;ISKUaT8RTHDn1RGQ^c$!N%C$@rli|
z2MgX?bi8BZrmYG^7X^LQhf$RFiaIWGx*egZOaFN48OC-|sf_#5=p-kr(R?JWsS^X`
zIS<yrZUA{mYl)lq2m)ZK0wvXgYo`0q4Yplg^cx~fkOC{7#s?)bY4qZIMEW?D>_|IA
zUua=8uZ$QR1XBbZD|vbm1@&0B5i{?)g!SaH0z=hrxSYibjd5P_JaB#{lJ5(D4hK~d
zsIVvztK|kV4dgB`1fYHb7O!_YYMYaIPXFYC^jv*L$kik^`Rfo}pW2>a{!uoGbai>?
zIbV@#zWl%xO6flmC6rG%v=glXm-DSu;q7=+h``WAsN8l#I77H47u#SYFjgbzD!409
zWWmZ~qtXq%CzNC38>QtY?W_s5d|KL7<VIZgtNC8JRcPX9ZPh%>FLze0I+~|-AN1<=
z3=6H<dIMEYu8p8Eg8pZ~AFGk2WY;~4ro@%#8EK9o4w->-!-Oe81+KHXDurEUoHSVx
zh<?cAXINU_lZCACU*Q?jd`aR*tcS^f(yGKqB#8TC-Af~ym-o%C6JIsKPgBY2Zl=ZO
z4VO}B7j=ab?lP(q23IwxY_=_NcHR~lV|?B$Na#v^*#FFy52 at Yvl)n3NyN(xnTl@@c
zobsM70By;=Jwqbll}q!;Jxa9lxRsAEsLmXhg9D>^P$@l?wA&<wGKw+jTG1|3jMmz)
zB>Z8T6uKI&eKuE-b5SALw{^-B<4epEt2I%(qVW2h|4vzj*rU6<ENp@^^D+bE;VTyO
z0nJ-HS+-2c^1|Wa19Mpg!FzAg12F)P+`<_7n8R>Ft!2G47Y=VGv~PEOgLUTC^7j0%
z1|DPAH#)FARY=TXvUz&47R2=X5LIjrJIOscSK2Ov#6r+*wrNXy^i5Mvn1A~?Kjc=X
zoEb2N=9>SrowE#fdXqMKkHuwr8 at hIy)U}eW^2I)Yd0kKQc78X)5A7AJEIKx5JBGQ7
z62+ufXrAj7g2o&FR<V*q{+R5QzvoFn9N+M_7<dY*@Nh<wQ=j|88NvxFm12+?`u|VG
zk(QjlgJo)GQn5+G-5GhPu0=E3Q0_9Vr3RDr*i|5^d!igg1-%Nppp5BX8!YVdV*sCJ
z!kCxM3dB;8ZxV~ikYIqoVz=@)M9j6q?omuPRKbb&OP4*LAj7BfV8|EQ;E0hf_OFmS
z7S_=*W*XE-uSlFX^ItS$Z=fLZMr04n2^GXb(=mPtos}mhKZ;A(3twH7Z_K0*i`Tz5
zeTu2d=1`kA)2E-hL0GJsiG=c*bk1Y?*iyGGs;4u%;14{or7hs|&ut(O#{KA<HhyW*
z^!(0kNT~o~T(mY!a>AT@$f=1^ez2Gj%LP0o`LA%HKXJw~Q=r{~y#zH__e}-hamcD`
z(|iu<?Mwdg03=7$uk+X2_q<`_<jeqJ&Yxd7=3Row1=kqggftPXTmTQz9VX)73V;1e
z*|r(BVQ?tL+Ik_pnB{EsuT<*I76)E9x at qstFy}PTr>xfy20GqNs~=-p&JlIA`uUO8
z*to4&Yx`&%uv6cet at Ke%_<rqQT=G3C1%W})1#5lLbMTST_zSzj7(fb8C++-4zo6k~
zF{eXilM(z~zQZGMB0|sRaB)0W&Bwo}G?woi!Z252V@<^QSm#+>#xtDhihzFiDUrN;
zQhJW|&~TSwZxd7A)^V<sty|a?UF}4yz*bHgefS`!$9Sf<VF<LDOt|9_f5N*>Xa-1H
zI3k>aL)qq$rG1F)YOKyF&7!5YWsaDe#>3)zte+fwG>eF6Vb?2BOC$F=>R3*tk^rf+
zNfnxuu5n_*hRK1R*y+IXGh1LH&>B?`nE^7)hdi`#YPibRJa{$*5 at lSd6Mp*9OgFo@
zwhJyS=^<5Ah+{)|Z&LBK=JLkY!2&iNf~cw8(MyUo?l{t#33KeT$i_5T(FZV{_<>rB
zFys6qkIhCX4oG#UCYxh*yfWFrb*|?xNCWd9 at N~@|1e{uagc+M(N+GbEGNVkSWsgD=
zRNe at +P{lq4e#d~>DgV=Octl!+lfIhj<X`H$8ZMD8Rg01N=;XlTzhva<otsb%_aeG?
z at WJfAz-N*8b1;!dQvI7d;Trnl(r6npz8NxiCfAX42k#+rtar(KS2ML&qfun0il at dQ
zQ;!B`vhuMC+zq+>8U=)6;_&T at Y6$1%=eCZ8!UrEHte2!Jf_j0}_#JVM>!z~lYRwAy
z``dsejP&nC3`WS`A*m>OsEccsPT8A8mOWZJ<VM`2g%xH%^Hg6 at TklXfyiybwmapka
zM1ScZ7E_E#P{|DiGgBl#u-P1LSX7(WC_w1Iq0&v$QvKINzH1H#a#CyCew0FIe?Wg9
zF&5<s%=u-zR`F*ltOdEMYyhA-;#vA~$u at CJMF?cJs*(1?+V4I)Yx(&0RMUW=0t7Zz
z)kR8^`TZ|_1g93q;^`gMxb_AnH|bcX|K~aZw?Y(Rb9O3v{fR4GmLzx-(kFJ^9C5`4
z at ZyaWJB|~?HmNpd!oA4#RgdYfA%xsAygaUTC|8 at Y?|1~u`*GIQxS$`dDOq0+9l#-$
z2L1+682py8LJipw9l(IpE&o#DxvT{uY?jY%gEHIN3d_I5kBOE$p{g_0GXc{lUZs$C
za3mtQRSC$_&UWLv{SzZlkNJ3bi6W!OF4ktkx%KQI*V#cAm-4;*IBky;_7XhPFha)+
z(lrS3cg;v at P`wPZ&$}Q1yj913$K;ipE{3~I4#Z5QQO!}m8*6WnuFCt^1;SzxWHfsa
zd%(|R#f`qcH|`@LzqjR2IU>(a7=+S~Y at UkpC8{jlEXC+)<dI+Z5{i&5kC|HwspBvL
zP2B4`0x4(Cb9)CO?}#RA(eUvW0y_Jb_^*zum#}4GsVFXE3|_bEhT~07vo#l<Fvg(m
zP*q6L=45W}>;^N2Wk{wYt~>1<BJjy<>_ze(3uz2z9+8f=P&SL;RAYdb08I?6_Y#_=
zzQnhEJa&8RL;qIXY4W1YB|PZ7>6K2J>CaabWfI$~ei6<V^89;6FWV4+52nMICAta0
zic9h(f>@GX$Wpr(AmqHLQ0-c4><fbQ40^g+tC_;LLHe&ru|DJlWt8A#_5EDL4g)vZ
znR62$F)^}h@<EeoCjI#O^9ZhLzgH}cz;)O42^r!f08j%|z;c<G9V6gkG!&5|fUmqV
zJtY(q_3GX at AZsIG&_fZLkr}xrz~N%06`8N=R0r8N4-Xo|sNJOu4sYTIw~sF at a1*;Z
z4SoS70o|f;1&dD>uCx&2c%`@wWFR$?TW{Z%7Zm22qmMp29h}cF#~EX$>B&ZgnT7hU
zyUAi;Qy=sA&xw`K4)^)I2<m&CkjvrAQ!+bLOin_i8$u~VTsr-|0 at 5^~M0ESy4s2VH
zI#FE0xIifH><SNS2gfqZnTmwOXp~}6erZqJqWv7~8;+{_Qi+Il<HzM7LFt*S%LM|t
zMVqxkT%mu)gh+im+b&r+;3Pm&f@`tyJhN~j<ft{yUF$53xhl#XxaQ$W(ICpDrf76$
z_6Rrn$M-|#!>+Sb-(zm0!&J{5bHNo}q1i&;8AFz1>NCC{MY`W}q`5hm-ylC8RT}<X
zVzy%fggkulJLx5?IrU<I!Qh<^1bF+}8Tl>=EV9IMu4=c<wh?X!DzPLCCXgG*Ix0}+
zPVBy!Cao+$GY15Vc6Y_52KjRi`Tja#Z!FTZO?C0v??tIDC_*#OB$I7E1J1e at 0oTq-
zGCp_`hfXOh`cD?m?k94RMtu>9J!}+^sprB+m~rA at MnDBIIhYb_O=azk{@{bZ40b&~
z!CNH&7&Nh$ZaMH-n=hYNCy at N2X70k$9$+BVg<6Xd0wj?{zWj$DN3BEX#5kr5bnncY
zI@!ev)14^08F66tRvP^R8{=VkuLI00%gn*UHS=fh?j49TVwwDb6R2JQB38x#f5#Hr
ziVeAu{=$0ktC#ML#8mz at SQmVuh>QW|MJfBgwlvSyCIT60Y<>|_hh`UQe~t7?7nSSp
zE1B_9mRcu9R2=Cf-fg$DWZoBy537CK<t`H-j<NW6DaCXnmwQx^(p#4i!f~8tFrU}i
zA54tPM#@g6O)0`7s7HJHe~OtgirX`$?@QW$>#5_NbU45aF?|bRUQ0ny)#)&}c}OIQ
zvI|U6rOJv3A?m$HI9CE9oRJTA(93&CKw!z$K`7T2ehxCKcsMI9Nqz0$*!d#)QSrSw
z7bp%|ZI70oPmVZPJJ?lSIB(ew%;}B%g75+K#%@YlXBbj5MzRc at NB`#!AL+4BCGHG0
zE9ExmXbb#XBWSbIkK>M(uO)Uuh0Bf_*(4AxCdR%U1ECNVq_<w+*RH=&rqU>sJ=3>X
za$IewBF>|4Nl<<^c`rTOVAI)MEJjG2<T^`$4 at W79LLFh@(6vfiO{m9S?2gpw_&>ec
zfsjqjEdWQ_ioX02<g$UrkenR+NwKvYBy61qq=19%g)5~WRHtYg<iI;lM2Y$=3Bo^K
z0S9^FqMLgMBnH|iW6WWrJwtz*7Q)|QM8*`DiyqqKQpUL3yM~L9w*?$S#cv2y&`j8-
zJ%Hy5N;6S$*8h4 at P=hL`!4En9XK0x8Q^Owk4o1RN5Mdc4T-27D?B%^E?dDBYGWulX
ziXGX-ru*r285(<gYU7XJk(%c?r{fOs0;Y+YX6Aqr1Y0S(Wv#c3_&kc(_l4o4CdzKk
z;4$*U-iCnb{TK}+!OXl@<h~r8KP;y21EkptYHB=+lejb$H<0xs{KZC`8ZmJ?%@%~H
z630*TnA$_9)TEQV7)CVHj#x;9EAWlB!qWb-tN1LVE$@D6TzN(RX1ZSAdJ5v24qK$G
zM;z}H;y`^EzjTKEYSe_-__Q$=VXuK8l&>f0MB<ab#qOXVR<2dfTy#dUX(xr8Qi8N{
z{16>7i${{$Dj3rZC<_)-68;7DJ<}~VmO+vXaV-I2DrUvoO&HPl2gdtlBRC~IV}+E3
z`PBe5!J?rb4E|hcr?K1tl#59JH*g!F37VuF3YJiu10I-J5*{CUwPe;zBGt~>+WQ{!
zm4mvosI1)*jE at Rop1G{B7AfQ8oeiocsjs4`z|H&jf_iuVxj0yuof!^fX+zP}bdBCU
zdW2CV(G>4UK!X6Q`kW3|nYljN>L_z*>BkN>mdF^clq$G5oz=%GC&W?<0aZcCZ#(HX
z%*2E}eu}AlE&t;d2pUZ(XR|(MpBi3;me*mw4j^tz-oaU)QkkJsJCrz=!EN8__VV#S
zkm>KQpx;ut at 6lcL$K}L4uRaFI9E7p~Djxw-^fgIii>VA7u1Le6=T0_iMup!vk_K{C
zoEl*qj$5F&dig-$i>{LD0i!r7nI2WoT4LC34`}3&4hx{oT7r?=F$(yKRVG`B*2I5l
zdw&igs$#8^z*E&eJmL|Rds98|yK%so=qUeiT9q}5FCRT_DzE&`pNes6pC!_ahf_lh
zrw8!_{VOL~ojY}8%FAf3GO92KPwD at GXFVEIqR$%yanvkmXys1vBO4U;nX9*}fL3I)
zRFtwiH<InA&(1HI-}sRHy|I)Iid1I3QT1yPYVMR<wd87ksmf!ooU0HesO{xBF-8Ea
zt_$XQ&pAN9gpgL at 4%E<gZ;;%4zdI|64{@DHBfg&l#QY(9{3KO*DW-Dui<7-{J)CzG
zh=}%()4yo4E!Li)tCtr at C=6sy`&DMq(m6Pon((b;Fl!G~hrT~vNP6 at Q;f5?*_HRW*
z>;5S0e)|5}EVCq75Y|zxU64KAj<J38 at LU8JS+ssgz_~*y#jMcB*UYXsvdE1%5tVZ}
zu*}Brxy(af*uYEq$%u;*XhE~ZMy^)Be}PnYNXOaOIa3#T6eHEmQY$``!CmqR3|06h
zL7coidicy&@rC3TLr+dakr0d_h-DjuZTCzS=9)LgM&g0=y-!m@;!APt3m<<V01$kq
zV+k{7f2Tlj)Ivybs?dsb;5vl(#~jh6ZE2>}F$_h2_8gAB(W?+R91$~3K3d-m6wnvT
zca=2uyGEa{yd`rs!H at KM`Hj3$;WWj=XK{L^Vey^1{aE;9i!>WRDXz^JC)6z~;z4+$
z_G<-8$P^#4Abu2Qfi=^dR^P+8;?y1Sy;39`i6RhYcE)lVl2&cgUNIF}06J}tLX%3W
zCLUvs at lT+$Rk7$Sr<yD?1Nhxr at 3(GgI2_WuS at zO@I>M~L1kUCV5#9hf9|3iEwR+U*
zbEv$!_#*nw5uYlPg=79Q3>}MMR2uE2>7^;ALzU{~g3=@!2 at n^{3tt_1yWyH}J{8&?
z>3=Qj{^>=zowMB?$edqKR7sL%bt at xKdQ|AK%|RhgKyn^93y0q3{*_yejv+UEAXPb-
zXo*q~k^$2BzOH|X7&T49Jgi7$sSPR4OdTFCFaLdq^vmCa%3?S=T-ou&f_e at JPHXtD
z2J$X^EwW$ud7Z4?oZ_I%0%M=+V}SF{VEwD=<{{2l8gf6aCLKpG-uZmP1lJ at A!gPMR
zYA@|tx&%|jmKX>wDWOYK`%caOsY3I*=YP+`HCWDIeb4tzEDk{enRB8kO!D%jxg=EC
zus^3q5ufQb{4r>ss^#B(4XX%*MDhFdcr0xm9_HeAT~2=>dJP)!7437?SFT1&z_Fc1
zho2~kbP8Drw$kaiZjK2LUNDF=*g_FYJ1AF$Kuhs4paj?V<Ez2yEgR1%V_ofunlOb5
z9>7azu-M9hOx%=UD?B3j?mT`2Tfe^H-Z6dq?ZWESyi4<as|_~Ij(kQ)?gC)ARW8Z%
z%gj$UJyzj46HaXUj*q at w5_y=czIs_u7T<vu(u5|Ec_p#QJBLb*KVWTvi8Zd-;-n&5
z^FK0ewkzGYVBJ*jLVPQz4Om|CEtnsb3hED(;<3-<6G{f-dh8ELZ8<6ufLG=!rEJ3N
z6bv+j;_&xucXAv`x{G3bXrVsfJ^h8S3zpu_OGtHpPd<NTwG~?YD+U`jh7cI~sH{&{
zv5AhiAo2rmBe<ygtZgT5$Y$BNRH<F+1Vg~SWi}qrP0j4Ki2Eu_E0W`U0pyRc`{4=V
z(94-(&R{)FycPQ+oH*FqgFv2yuND}>MjJq~KpoPr>4`hz$E5<`0jp4#Z at 9Cr2eau)
zHQ?`Qy+_F@{!24VQ;PcvG4>K*XBEpw=^HfV!ou61>f)9aCMWem^b#^R&}LOiBTaGl
zm$31e<6dGs!Acl)0dDb at tX-QR!vjC6VHp(;HMu@;1+kX0FrlV558#b11c}0L1}gK_
z!<VxCfWr#uiS4AAIXs10Yb_kx^p|o#2f#AINfSwBG&5Ppc=&*!{jDB>ytD_I at 9TY*
zhk0*s;Wu)@vSiDf;zramkG`Fp3#>Ck-bKFQ6t(2h30sPx3c34vg~;}}Jd%4 at lya9q
zvL{!kC)XF!%d}oM9j`=SEHv#0##QK15>wE|bWEHfZy}1!SMaU71Q8ceM3P~*JS*K3
z39|tACVX>1JI{CcvYJYRp^xieML~cCe~1-sZn=okFlGsopm9!;`X)|6!^Ibwe^UZv
zYnFcwV^HHl)tTvDb5}(f?y>pLl%u8GDab2G?+5Vm>*snDvsYYNhNZ=F{=a24Eiw$#
z!+ae3X**{QY1|$YtLTT64SkA5b2TfUWK~)y&X&|D{G$pfErEgmBS?*V-r9A|G9le}
zK0K#TFWsAjiy^oJhAm=#FQ)Ir_mIG3>qHTExl|-4_w{x+_4hQULoGQEPL|L!^GnEK
z_Ha9L&T<I1?r#GKaG&wdcY#|rL9OXpqx%J?j0l*Y^(uJnbLnloGw?L&;l`tp%zcpT
zdm1lO+-uss%NZas$6~R+nEL at tfx}5|#KEbcHW!6+<bmjD?-J2W5J_@>69Q}_6N<XZ
zbiGST%^*92lVEIqZS%Yp at ghS=*2Wk(V(`oN(;|M4<qTZ|pQa{XPDM~uRZc};LQhgb
zUqeY>LRCpjL|;@vM_)-!Mo(WLJs at -~Ze?(Eb#7%XZE!7ZbT>INGG#F>GB7bRElpH6
zIWjU|MKNDZK}k+uK~qUXUs6v^Us6F$UrkR!NlZmwLqkq6HZ3wRGBPkZFgP+WGchnU
E3KL<^J^%m!

-- 
2.18.0



From yangyingliang at huawei.com  Thu Dec 29 01:29:46 2022
From: yangyingliang at huawei.com (Yang Yingliang)
Date: Thu, 29 Dec 2022 17:29:46 +0800
Subject: [PATCH] clk: mediatek: clk-pllfh: fix missing of_node_put() in fhctl_parse_dt()
Message-ID: <20221229092946.4162345-1-yangyingliang@huawei.com>

The device_node pointer returned by of_find_compatible_node() with
refcount incremented, when finish using it, the refcount need be
decreased.

Fixes: d7964de8a8ea ("clk: mediatek: Add new clock driver to handle FHCTL hardware")
Signed-off-by: Yang Yingliang <yangyingliang at huawei.com>
---
 drivers/clk/mediatek/clk-pllfh.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/clk/mediatek/clk-pllfh.c b/drivers/clk/mediatek/clk-pllfh.c
index f48780bec507..bc2b30a55f60 100644
--- a/drivers/clk/mediatek/clk-pllfh.c
+++ b/drivers/clk/mediatek/clk-pllfh.c
@@ -75,13 +75,13 @@ void fhctl_parse_dt(const u8 *compatible_node, struct mtk_pllfh_data *pllfhs,
 	base = of_iomap(node, 0);
 	if (!base) {
 		pr_err("%s(): ioremap failed\n", __func__);
-		return;
+		goto out_node_put;
 	}
 
 	num_clocks = of_clk_get_parent_count(node);
 	if (!num_clocks) {
 		pr_err("%s(): failed to get clocks property\n", __func__);
-		return;
+		goto out_node_put;
 	}
 
 	for (i = 0; i < num_clocks; i++) {
@@ -102,6 +102,9 @@ void fhctl_parse_dt(const u8 *compatible_node, struct mtk_pllfh_data *pllfhs,
 		pllfh->state.ssc_rate = ssc_rate;
 		pllfh->state.base = base;
 	}
+
+out_node_put:
+	of_node_put(node);
 }
 
 static void pllfh_init(struct mtk_fh *fh, struct mtk_pllfh_data *pllfh_data)
-- 
2.25.1



From chris.lu at mediatek.com  Thu Dec 29 01:40:19 2022
From: chris.lu at mediatek.com (chris.lu at mediatek.com)
Date: Thu, 29 Dec 2022 17:40:19 +0800
Subject: [PATCH v2] linux-firmware: update firmware for mediatek bluetooth chip (MT7921)
Message-ID: <20221229094020.26547-1-chris.lu@mediatek.com>

From: "Chris.Lu" <chris.lu at mediatek.com>

*** BLURB HERE ***

Chris.Lu (1):
  linux-firmware: update firmware for mediatek bluetooth chip (MT7921)

 WHENCE                                  |   2 +-
 mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin | Bin 527150 -> 527662 bytes
 2 files changed, 1 insertion(+), 1 deletion(-)

-- 
2.18.0



From chris.lu at mediatek.com  Thu Dec 29 01:40:20 2022
From: chris.lu at mediatek.com (chris.lu at mediatek.com)
Date: Thu, 29 Dec 2022 17:40:20 +0800
Subject: [PATCH v2 1/1] linux-firmware: update firmware for mediatek bluetooth chip (MT7921)
In-Reply-To: <20221229094020.26547-1-chris.lu@mediatek.com>
References: <20221229094020.26547-1-chris.lu@mediatek.com>
Message-ID: <20221229094020.26547-2-chris.lu@mediatek.com>

From: "Chris.Lu" <chris.lu at mediatek.com>

Update binary firmware for MT7921 BT devices.

File: mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin
Version: 20221227151301

Signed-off-by: Chris Lu <chris.lu at mediatek.com>
---
 WHENCE                                  |   2 +-
 mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin | Bin 527150 -> 527662 bytes
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/WHENCE b/WHENCE
index f31fa30..25a4fae 100644
--- a/WHENCE
+++ b/WHENCE
@@ -5530,7 +5530,7 @@ Licence: Redistributable. See LICENCE.mediatek for details.
 Driver: mt7921 - MediaTek MT7921 bluetooth chipset
 
 File: mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin
-Version: 20221109111213
+Version: 20221227151301
 
 Licence: Redistributable. See LICENCE.mediatek for details.
 
diff --git a/mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin b/mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin
index 10dcc2c0fbc1f89a5dc289dd4f4286888f029e45..26daee294b573ca5e3fd0e223d0fd346bd4055e3 100644
GIT binary patch
literal 527662
zcmd44dwf$x`aeGBk~D48Hl;0;OKH*@prsT<tr*H_3E^Z#Orc;mf|grFM6H7Bt?Eg8
zfPfVWLaB%lutH^#t)Gpxu&$dTU_n%LjiPI{u!`V<rrg at p(EQ$Wl3oDa&*z`t>-7bm
zoH@@t^UO2PJac<y<}fCE%$U(*#@ssk=FvB0k0vB<igo%bvWf)ohg|cAzvlh_^2!p1
z6f=Yf4*ZZR<=M at fr3`?6`a_9^e)A7YIO1Fhq6#%3wQGaVp+re4Aq9h|wG(D=znPfE
z1Dsk7dH(kZ{uew=pB$wjG5-tQ??nd!LDBjTmB{HPJCO at 2h`2~1kG)Y&cI+xA_X1>(
zM3z4$kz0mH<eM+b$$7O*mgC9)rJM|Uu7afPw3E_$J5f)UelMH<=kd3cR}tyKDzfOs
zD$+W?ij<FDON23NNe7-&7FUr%Ky_giIU2Q={8Uv%8t`mHyn96ziGH$*RL!a)yGyJ7
zpD*X{2`G|Za{v<ne;0}WR=__1ZjlKO2iygy1iS{=2l!NEBK|BgI!R=-z-#M7CgG1F
zGcXshUStM8B{D;Q5*ht{B9r>1$PCkq%<zAS%#G<HGwK6CE8u&P89iKN#{2<r2LS1A
z0!`i*BJ+oAk(u(1$lN(sWM*#{nMI>T<{{+qXd>Wqk$J33WXe7fnP-viIgQ9j;9)Nj
znQ~5KmM;;R6<b8cfp<qO05Uu3M6zrJp8pn^m0poq-z+jOK)%XRfKtF)fb$}=<^jMz
zMY08XZDIj4MdsBpB2$|QxJ_hUj}e(2$ZsdgzVkzoc>~W~NVoe*k$Dqkd=vV3bB)OC
zfjl1#7MZUn0n8%P at -*NXk!ei^+$%CCcZ<xwrvQ!sJ{FlDYedF}r|+L4(~0~#7l^Fd
z1^5Tx9N=ew7tjW{0JsEb7um2`fER;s3+N{-5!p$91$-j1ciaki7O))P0Bi)j47d#F
z64 at zgKsaCkAPtZK7!J4rU<Di&*{Lf4D*-!2w(vGU6`)CEXG8!%KWD$l&OHt|0f1cd
z^dfuzc#&Pqifn0=$S#L0%U=@Nl`}(7gy&X~U4^_?4FY5V@&P81ec at X`YY4u_^EBWr
z0OfxH<*!7V${dkh-6*mzLQeWz^OML{Jpn*IYm-HG-4{W4Nhh)|p&Ty>BD>*9k*!_>
zfQ%cLh-_UP;5z_#@BSZ=-2>gYkk<7dk$w9!k!`32y#C+eom`P^bOSm>_T9}Q`(C2R
z{-Yn at 4#1s&y8s1%j{vBPe|##kZs^0kM`W8yMfSi&kv;gf$bNwOIUECc8~_;)qh60J
z6xk2Yi|j{8`>`mppCIno3;<+0_Adb9J~aTQ0v;CG<H+~;O#sx>R~o=GfOi2X-`6PH
z*Lwk<i|oG!0<uN++cAI~kv+$WY%AnH2VI at 30l+TWp@a4-BJ1A`I0QHiKz at F|$X<b*
zSDHn(D at Wv1mqbo`3*c73c)$Z9H~4_a4POd)5%7x0jaUKL2zXuOZr}h503MOcd;+i*
zutVgsPK#W&M&w3423QIBi^z>03`iBZF}nco0h&ebrauAp0X`79Te1L^B6n+y$c^`j
zTn^Ia{vdL<trNL%NI&jx0MOljO62ly6gg9Y$V~#y94(@E5IM_vkt<LGo)@{o|A^cS
z1K??qn~8GFoB?=H<nDf_7i>i2?nx23dr|ItuZY}zw*j^Rc8gqbhRDtB6uEijA~%1S
z$SwLw<Q|L^xyAn at au44va*y03a;1Yr?lGgt{pCJ9!T&LoV-M0VohWioOcJ^0Aj@;m
z&2uGyqayeGaFJUE8J5Wa=yKU6K&{BFSR`^U-XL<dkfnCH$nApeYCjdZ*CF5Q&j8#a
zx8orIWZ%gGz;EYzk*h;|-TeUQ{tf8*4d8YS5V=2pE^=>PhAh0uH6mRjbh>vo;BmmK
zBDW8^ItYCpM7<vT5P-Z6eg=U44qgCU1Y8234h|uYL!du|d=G_-+y`HY+)?oT5V|<3
z0s#Nn7?Jzu4nQ3sAab8?7r8H{1E8~3LF7&x1Dq7OlhDPv&4BL#=S1%3SU?^CG(SU+
zKck+ypWaH5JoKIDd*T+c^M*{(_mWo(Twz5bJS~#)M$z|}L-e(87ky7T#6aL(z#%c<
zr!@JZZ!zf0Zo#-PP3%;EAo@<u6 at Amjh`t%;#Lk;Wik%}8MY7^6k*wV<`YzOnzUB9b
zzDLH2zL!sePr2y3g1jf~LHKF#Gb4{ti2n-w%S2zt46!q8ljz%dMD+b>JaGRbc5<TV
zE4@=BFI*BkN3RimmySZ-?~xw)KJrJ=xACOtTTl-<enDQl5MC$xiXVpz4}<Oz(f9O5
z$Q&#B{2sA$xF6}JioPWeh`v8Urhiq7zNrhu&g8em&WKl#K2G%Q9U%Iaoj^WC$gcuC
z^rCN_RrIY+7JZjXMc*RGwn8m-jyx!K{^fD8a}xNy#EQQ42Jr3=nQda=SHI{xaZ&U=
zt`SN8mx#|216}74A20ek7mH-&Leb~CSM)vjACcI<L|g~*SStFKt_3}0zSJN3w~FMY
zDABjUCX&^sMBf{jXH5DQdL95BzXbX}BCi|7&QUJq>APe?+0~-&!)WB23cc8YA0m<$
zzk#0CLa#fK2Jx?zK!#Z;gAw|;T_jbA_kRpp<d^%S=v&wd8BoVxpN3q}PYKGq=+C0>
zuLD8*l1L_;1#Pw1Ij9rywFt+f3{Qx at l`lj79l$LYiHx$JXc9Y3ABn!A2cZwt*?I6-
z3%#t>ik(9*!*)J}JXNCap`S(HZY}EfA>{cP^y~&t=(D6jB&)oluO9X6`!{&JC;Faz
z7_vHHS9Q?$8rbV$l<jkoOgsad-7flS{{g<2A;TZUPSpzJ1v_5;F=RO}`no<9i3#@n
zD`X#;gFKLT?LBxuf-)h$j=#Vbn?>KRAEKNyphM`T3i??3IqD)u^wlkcP0kj{^5>Ce
zDtP}1c2X<)Uax}QP=>Y3#m;v&qt4bqUY$r5XN$gzR+KRf>A~lb2-yBm*xqT#a|ZHt
zqP%L@=@iI(Bk=W*J6iPB7$K(%<taxQ9~6m$>g`{MZ$Lbcx_B3MxDt3l^f?1!Cp%Rn
z&!fEwz^#GaSG)xo1|t19$eRs$r$OFXs1wXf*WCww+$jb+Poa#E?_rd!z7g^DqVIun
zJYka#*xus|?1vXShuNWzHq?zBZ2>%1wV};!LfePDzH;adb<$RavfTonXj at m7!*&ng
zxfFUsS+>L0o*o3cBqg118tUfCLeaP51=PC?`+FK?L;HLT^*(R9=(~>*I|m+t99q<c
z5%NQ??>vKgK%cbsebKk(W0YG0Z`6+;ZFToq(Rc3`$h#T<yX<@qfO1?ZfsEksNWAE~
z`|o(43cK=x&s#`)7kFI)UI#s*P5z2Du at -#|t(&TOsH?@I at 6JNJ!-jbDUoW9tohajp
zM92iaR11hJhCQQR*CI{pc9B$ap!r_x%-9P3qD(u7A%DofWGu?I3bt$z$#}omnN$uN
zQNh-b_NC3xb1Cc)_AqY}`pY8GR{=Y{KLhVp at Drh*rAUXeKVd~)u$AQ~pZ~Z>D!xIV
zwjb~X+5+sL3iY_gjOTwupZ87J0`&XTLiC;By-bff`J338Jp%m*^tW;W`qR(AXAjy9
z+U|Jt$E#u2xjyI~?ck|NkOS>%LnLejefJ-}Mq2cz0_@@?lzUnZZ0;Sze~A3i4=t=k
zeU1n1YUBr*9zvg0dldEZ!z?e+%ZAh8f=<$!!w4U*BhfNx*&;D5Tl^$Tm0#2xZYJUJ
zMTC`1y0F_U?Va8%)z-|_>?!v2Aaj^|8c&#bvy~$Ovl*^|<GL)B({0n#M<H%HA*xgE
zFk{s84_oxI+R{<6&o6-+Uqqta#u)40gJH&Gj45adhDj~Lp9RDGOoYD+hE>xLZViUR
z`XPKY6kZHIaiQ=Yg!_fUKO-C)3~S5?zndF%XQo*f&J^iZ<=0INhAMS+lS83FD0yTk
zoQ7}=%0I_EfUupUz`cSr3^C~=z2-1MYP2_2>|3?(1zFfvY0_)Rz8B4(&L!riIh;98
zPbv-O(Q^hA%p_WChMgo>2{FG_Me3T&f+<j!UsqvH)e-YHE3w)MGntvID|)+}So32p
zCJ at 4#=NU+RJyBU_mXmmisOu)jJBbDm9xsrH{Cukh{36ZXyGVRC(L%<kcq at rU${3{5
zAw?{3{XicFh)0?PX?ek+(ll$klvYq}*G#t09Z*>gn*IrHG5|ah5grKILGfNPIH8IR
zNsveq(hW7|6~{oT9}!MQI2qvp!g_PwqomS~kinYAuz02*mYHmrhcb})=11qoOg=F;
z8C+8fCd33T+RbZ=2Y at QAV9A<xs|97LBI)K6#U!DWWS9$<l7wtB4DrLwc^k;&*m*kZ
zG&^g}=edH(jHY1Tnt;`yA_c!_0|`1ZBEFd1fb!l5`pky=;`L-?f<Ussaa2Mv$xdh`
zqZ9OG3 at C2`<ycVO49Z(v_gR;$`3}^#f;tD(x5bx|ame>}P#Zx#9 at M#@o&ajWb)UJk
zm=v5LdZfq$Wj<hHg20maDwatoX4!;nmP=@5`2-!SiZ5o>@m4l0USKsYNW_MNGNM4V
zQ|d at iYe5~Apl73jj{&s~)UlxM=en;zoDx8axCAR3AD_)8#Ov7ppc*hauax}p4=j<)
zNSj!h58S|bi5-;SW(R|A2<VdHo$OHSPSm)UO-`s{^$8Md0Iw9_Q_b6ob$F%)?QAWv
z8W{G)JYdp6k%831&NB!NhlC>%O4%Eb%Z-pQ6Xh8R39}&KC`g#ClxKA19BYPdbAg7q
zk!B3?zX=@1#vfyEP9W?p@%8MjkS!;^l!aE=aR5KyivI+9l2~{wQ}fA?$mUUgV!oen
zmX1envvfQ$%B7~Qss!%A2DMY0PfVIRE$}~CI-V>7xGf!z&CN>KI#N<M at pxt)j;@gQ
zYKn9cv)AFw$5T_6 at 61!4d48#7i+O;1I!`M2YTm7)&wRp1(zYwL+6|rR&NNF$*lwGK
z;YC88t7j}7<<lSynYxZ-@*K%8BqY&BG$jZZTIVrhKAEMd8)NBUUo*aG6<^F-DL~$L
z2vJIc9*o_%Dq<=hXs>vou`r($YZ^aq%tu)giwMy)?)T(<qNbekNnxZX%=RP`7JMs;
zY#!T<Z`MFN1lj>rQKWmgB at l4B)4_R>@gb{d-bvyrn;dTI>uTbPK$*f2GkcX9d3JjG
znTNp%TmHBFlF?FP(P&BcxBZF~;gAB{X5lG?Nh6TL;-w|+*9nQkQvE0Jml(%SUnd)+
zJoN6VGHdDJii}Cq*T_tZL3t~XRhEuF+m!GfG~^+EA~jh$F7GyLbQ!#k#2?~IbQ0^~
zpnDc=Jl-#XYt)P%^P`DDW{gQ?V=W!C)8srkM%J6N!wDoLW+6PWC_geFZMTpyQGN+y
zN3xA5weh)MZ+=3ElMh*!tk${0^2w8t&Ecz?Hr7v_OAgAAp9}L`>Ps<IMIu7+Z_{|T
z-E&#im~>>mr9-_hRL6C+b}N=QPRl3O at W#)KN!DbP*g)S4 at lK!6(`Q-fTSwZ4b74Ws
zB4B6;mWi64k2fXGPN|FW7P2vwY_DYENrj49u&k{#y7GiEMBBBsl4;1ZY2rF%4J3I`
z85Q-RQE}!+5#|9x94zyHU?Vj3|9GaD;Tu23E90d(G*15D&co<ZY|Z8tx>BKMz9H3>
zny)*cp-;SL2j7o&zbnstT{E6N<FVchkG)VpScUVz&`8{0)=PFdFIXdM1Ue2se^yq@
zdOXi5Zvo}^VyKi6N*N<89SsloooGpnOuY8`JQE=w%O*?5W?OS2NtRUPK8Y9lE#o)d
zVbbv{NsJUmMoH?gB7_2l-}s;@rnUJvFEhESb9TR-^3Z|8nk<EZk5$eCpIe%vXsXpr
zHNh;T>$F;-UXB#Ykb=mJL?!$Y?c*fiJ-^hXvFVryTOu22(rJhXHO~`|%A`{h4=d{(
zn6b#kC+D1w60BO`_2E-e1ip4e%a)U-GkoQo>f at dZbY6owO~Sc~!vhNSG2U5iJUOk(
zQk`4g98N9s+%mUT9-bR at I?cn&H{fYPzQ_HNOknAzw+`6#Qj<Mj)^`e0*af at AH>gbt
zmxk3>$aAK?M$mdTUG#)sgk5edmcrW at q<zD#x7A2VUfvyfJ9mKG&YAScrJULUN?Gnz
zPi4tV^>p&2xt$=M^u)8CBwJ0D;Wtw9Jt_b6n<+JBonA|6JPT|!&LO|SK^NrUp7ERM
z^`2H+O}&AQku+{C>PNRHd&g~iM%Pc;Ja(K;CgXIx9&zFBTM*Z8&lvp1?YSw)sXN{?
z+*VUMENjNO@`I at iCq*-H5_*K?c>*g(p-1a4g!9^J(p5ojBGJ`VU0(=-z;^wp!y7O$
z0x_{&Te=45I1*E7uqCQb3A_{sZKk<zUCvAxd778?<&W8|!f?XwA1)UQ)>@KdiDuSs
z`bOiJE*Brs=A_DGPrYYQ<s4g%=Ay at kXSODOXFnld8?`a*fNy81FiET3sL$(H)h}nd
zOafVgSjGP(+jF+kkf-4_l})xp-Djxv1OAC!E9BzpH5csrIhpalzhOW6*SY8w16 at 8j
zN;X(J_~+1 at T?976((%d*c73x|3aihrx65-Z9WS4C4;Hwpa3OVbc<%V^8re`iKp>Jf
zC)Ppm?3cqhG{)J}|M1-{xl!9XZs(@J0;cFaqr8ke=@RQwACI`iIY%E4yTm)k9Oo~o
zoHrf&infvM1C3D&msK*xn1#!v3<)E|D^q2CZo>9~o|xZ>&&}PieV}`vT`xyL=0Q at p
z|9z!wQuUgPeaa^1!NOBfx>cdl#h`Q-Xz3&i?7Gn|H2<-?e9}rw$A<s72MBznCU at kv
zRv`{0B}4oUw)$>4Pl)BUJ0$$}+aqMnxHD}^p?kb%3`#cicS_cxNS=t2$x6v&$r3Ev
z#%GnXC3<wfOR+fj_3er7ckO~F0{Rrc3xht7b?cLsnA;{rpu|Kjh8-=V;}+^C5RjD6
zT!fxMh*kP17X1{5eu^~_K9TlQFQ1&sF*l;eW2>i5?Z;%iWta3hx<pMSW79-jp;VMw
zq5P;>h4#Q!4{hdT+9xrv;RwWXpdt#zy9xz|Jb2*LG)}?SH}goz?HLWMwg>xq2s;MY
zem&StA?!`SQb~gx)`YNQfer7$$|3B{z^Zz%Pld3z02|qZeK>@@71-Dw?7Wb~=%aui
z(1X9b2Omzy;(LCU)U-X!3YQ7=6GwhaKjTCC>Hi!0VH7=NUZo#8UIa_056MRL6V-!F
z2w|yy;(D+VAuQETOgFYB5W-UZB=le}hOksWd=K_a2ut;&)E||t=GzdK>POc@`_CRd
zQ2q4p!GF+$hen{Edu6?Zk at udb0A|2Uf4P5-z1TQ@;Tk%=N+)EDWD$w=_LfxsFA_sk
z5_xI1 at cL3sb$&eFUz$BNo~$ga!e+WkVyg4;rY+PFp?cI|Zl&I%LLbQpRU{6v?A5W3
za1Ylfmiw=<yb?QzERa-(lB!4L^HQ3{*WY57AiJ;sBuOu6Exx!P%yC{~@#)^M_!6#E
z+dW!&$|n&vCm&|gld&F^WcFaBBTFGm1ZHKo>Qxfvujt!VQkcR&qFZu@;9*w@)oT%h
za-vMX6%($+#9y1n6ESrO^Pa7a$IPDjJKf=B{x<8PB%R?*(2}W`JpZFPe at -GZ^*lL1
zwQTl=vqkN&&7E&B!X+bViO~`b^DzFF;Yqb0Ih<<W%X|_h5WQxdMj*p at kH(zrjj`(1
z!0#uJ4Bl%8uho?HJkqqJD)mRx=3JY0 at HJ@%AuXkoRal8UA*((~>CW*yQ(_<iA<e;4
z-sdUR at NV8g&h(Au*G;F;<ai1Zn at RIM&j<!cEDDBUy*x7e at GxRT3i0Ts9Ly_RjGoa-
z*%dyt?51R*lr^3AsIamLz;=2|oq0{E!8fR}?o<PL4^LBd-Kvz<D67shv{ZdGHH)VC
zK-0#UV!Ctc(dw*T{wQ0qtfI7S%qNio at 6-rY!!T!#@xrMB2|Zj1kpjYciI3kZDS6No
zz3G)wExk6cfxTr}dJXN9l=cGiiPo%(@d~MWja3K!hQWN-y<KZiDuWd0dgr`S|K}Ox
z^<=kx>uHVY=$rYG34!yBbzV%MtHDg%q-#Y_jVkffS`_NUU~Qm2xgrB$d#DsVX2|m`
z?f&)GQiGEFP0Hu5rTnja7ycIY)qHy>6sgZMT at 5|)3dVl|ZOrIlf6bQRY3;gW9r5cs
z`&l}kPB4cF!nP*k$mtHu--orN6mo$HnB_iIIIo->f+uj{Yo=nB+|f$7LX45rH at I*|
z(L6qcu?I1=Me~>trYeZpSu{@<!Z?DM*Nf(96il^I;j*P at 9$|ufC04<_1PmL(U>%K|
zUIm5^VKfS69Wa^@M(2(M&01h|6oc^QP>kNq0jn?M+`+uJ7tIqw(l~>dmy71<6$~x^
z8}>p at a=XLuE4g`iKj*jTsYaw>GTV|u_4HJ&-|5dgrLya#6Vm=OI+=P!Lq681J!U<^
z2DVOmK&rL0dt<5B;;HuBDBF`lRhpBJm-v25CAEuj9-hLH at r9`*Y`@xZvSc0!TYb8+
znWp9qq_M#q3hk|Xt7M53w#DU`{KkjY=|p2)5?ETdvZ2ZGgM8nY+^#n~U7HfC*lAdm
z$WG_VV_`XY)oe~)|A^JwJU-*>nVUZ4oDm*YO5T*XN%tvNhj2wJ^)Ebi(%;nlj4hE#
z!Wx!!PBv!~Nf^CqZocklc-MV(lbw at IV+jE!AL~>FQ#r(?&xf85Uy&KleOSpQ)09?p
zx309SQ#Yi!(ymV3kcM`z?@o_ZN+Q>t8npkX)M-7bF~jHep}dFxA5#zSNxfYr`@_w{
z++lny(ZU<T#N$bQPBOvTN`jY0#cv}C<`{3lN at 4<n3M+D5I59s#_^z0W75rZ%Z9GE~
zOhiu_SHGtXEI$-!9B=)H%*Yv`x<A_juZ^Ys@{@d=q_ZxOghHK at SdS4^o87)*nI16@
zo{Tyj=bC(pDKzNGXKHJ_#1vLZf%A4-4SU{|S=mHWwAnpBojP=eTYb>OO`Atlr}m$w
zqvOx;k*E}J|7#=xzT+rc)z8#F_T|-5aMV*oSE>>p*ISydXn0mM at f<MlmQ>jH2_|hI
z(A7Vm2%1K>%wdP%M%sU1HiLt6!G12^P^RhbK_W^i4&E at mbzU*NEhg~N=#_Lap>+E0
zbm;NiJ?Zo`9i{XAdOaNr{}vsWBlPE$Jk8I$W1M5*`wf_Nn$oV^u9&*9&aowg3t;tK
zSvS at gb^lkCOLeY038}KXa}06GE-_%nj{L68NtvbTQJ!!Q#<uPmo0nOa<h9$d7NGP>
z4__B7xtZ}2I^qiY at C3?R8FQ65Pn2_P;1JrqJMh697kgxLLN-Nvk)&HDW!z817(<{B
z9pyr;!*A&IvhtCbXT{>3ap~bJVjA at DnckSMdsnmf&wKT-P~Bc<H#Jt^BT)Yg{9S|d
zNm+Q~D~&hescHOkqaM1^H9DP3%`sgu)N;F`O$mf3x_iuw!;}b(kz-H;<D8F~QR_jP
zx-nFnn4d{aTG#{wn~22-#O_<WFP&;?-|NtFbTFn7y&NfST;CXvSwb?x at r~<4(j+L-
zY-k*)Nbxe{)$yf7h8NXjB|5C2NGfC>FY}i6j!sA)3l6%*wT(lRbekIo<GmQAq0eMI
zhk}pPxCQIu_KuTESv8HXbSC2MUyZR!9&44j&uQF3#P#R_`Y44yl-Pq5OW!Pki`6It
z{Mu4VA%RO=6AWdOW)3T6!1*&&57oK!z2j?h+8y=g``w&b6Av%EW~4c>o|tYXkrm7L
zt!rHWw~c#WY23Vbd*f?+-)P*mx4!YMz5m#^A09Zq at xb3caE4PaWSz3IDjII-c;pVc
zhA2u!kCla*jVaM>B}F<r*}G<6j5#?hpv+Ha=Ig%E>|L`r8ugvMcQt+5rM;`2qoEHi
z%FEY{4$6n|_ybu*?FhcpQb|Co3cW?lr*FpD_kUw18R=FM(cP*R9v^5PcBR;AV5_KI
zo72r-2h&H)w;E#Z3F1^UlopYRU7Nw4X!D2(edznd^$%Kb-xb%oZ1@?}bOl_^H+Q$W
zP at 7bw(PyMzV9d!9EROC9MUbwcU-M?&5aQv?x<RnZ;0#j9Kl?m$eY-W2);_bb2&FH9
z97-=0oMkHc=rYp1j8(UatQ-0jZ_>%{V<n at j7$}g61Ko4fh|=D9BicV^n8B7_Vi>Au
zi?;BHr4$$BPcYx at rXVqB!O^t*w3mYRXMswwnW-H4C&io7=C%TF!oE#mh{tNPUcrgo
zICF7$mvtU-P<oS&GfC!dO1v%YeKThg2Y8LO8lqaeDa>hO9z{=5Z#D3S5Dq$s<a=dg
zdP)(=Q;JTsxAy#CS$gS;48KX2buC at Vb#zK8Gj|_Fu8mfM_Gq_cc-PSV)LyB$o>fbU
zAtnIL&7o<jemV5L-TLKvMvD;D+#aevwahK<E#Wo17Wd(0y at o2pi`Erqh24i?#FO?;
zGwI*AD!uAwRvja{=1_e8=*^L~Y=&Q*cccR}LW!=zyVt#!?pW#f?%$VhPX45)owjQB
z?%z8N^8~t=!tDLbm4c_HA!YA0^xnF?pN0C7!QhMjhNM^bchk{>)>O}^kZ%w|V=9#{
zl8)6{%nKeuAH_MN@`+JXhdp?rqO+EFH4T_K73mx#_(WcM(CM5XN_qLCU6H2b<iLk&
z=lfmv7U|sZsRu)?q;8@!4s at z~k`vh+=8Qy75>0y&kGdzUu8Tx2Iwu#T8&2sWO5n;Z
zLXQo)P*_dsB6=+SZ=te;tj^1rMq#X3USue}#`c1A5zb%>4QV5#jVUDAWSy3tLFgTY
z&S2+nsm8<6-r8%2pIyS37}>`3QUqhDb)bbhgRNMOw6tHMEw4{2=$404D&w`%4!ULO
zwh%h9byH9Yd+bruO;KXNY{Ni$s5nh86_52ceWPpttEu=t>vk?w+vZ2yG2QFRe8ZHU
zxfIu at weV@(9J?BNX{c at RX+hcKP@Z1KoQbg;ZK`W|umrM_C-ln)EmzXOa!vJiSfggI
z;ynpcoM+arTSxl>+JE(tllrY_Y1$ZC$Lq!mx{I1ZJ(1e%=35D!mvBd{yaD5;0rfWJ
zRQ{Pb+i-S_Q#L2NgT9rSX1%Jl>+U*}(}Z>tKx??qqZjlS!@DVL!}(~Z+y%PutLe6S
zv_U*mdR6+wI#b97rYkL?(j0 at l=$xj%lGlJbty3GC58mgQz{f&5T|HTsc`60cC9)}3
zOBW_w#r<)Q?&^3Z`>Oc(p4{WF&mFw_=Kgpcoi%Y4_C^71OK5cCEuPm)!^}iWx(37(
zX&Bw%gEcGd*?8yliC76)J2TCr2$3IXNi)R+j^(PhuJCWe?$!eAuNEu&tII4Mbq6qG
zn9l1sb)_L5zri==Pt{YK;FFV6Egi4k3tXQwJiWV>XzRh<$^m_LD^Zu&qts)MG6j2+
z;SDMDc{KEF#xt}Z+unX2Bf1GCQT9n?yK9b+LbQUx(J!=D>Qi=RvHJ|`Q2Nw--7(GH
z&-PBs*L at y(Vm9+x*3H<b&A~n`dfj~8abReO?t|y+zQ>yqSFY^SYI^o*!;~G&Fzm**
zx7Wh6F9cWDoX*m5Gj`wI#j at M%#2WkcuqoCmvff(C4#`Ov#5Rm at O%737E1N7GW6#?b
z>Mw;brFj3z at Aelf>08b9NdNY-4y%*6tW|7IPQn(p;Rcr_L|tEb0&~A&q&a4L^41G{
zDtW;g$7Y6NKL`E*a4&YhBMy7#WB2)6A#1EujM^U&itB(Esupp(A#)Y-T)(W${Dd1v
zSvIjj3SRFR=E_s#-DF!h at Dh~|W5(N<Nri<dM5M0_g%=~dysr*aCTkUwV=ZN at SL=YU
zS9q4%7Dk73z*D&wLI)(sOO=Rsx}&laa2H at n2%imnAx?S?b8E3ePIL2E^V6PL=MKk8
zIjv<&wdt at 5D@(QMMXZ_ySrBwWcz$VdBt5&4n_+r!V<XnGVeUz=4HdO_VM(h-zTZ~E
z=;ch4-b-Nrg)M0)g&O<iX>^~wHJt8`2R>=|w`*dL$95)gIO)X{cir8P>KPhrF|_UU
zq#g2qOG{;-vdn~!iKbU%N$yND>tjd{uf$$nLh&nn!~4G{iQnBh+>BC$QtG)Ou9OnY
z=4opZieKg%_S1JMK;O|5_HRgm&h<iZad>{5HnQp7b>Y>?r@~L$;L+xa+LvF<36qH6
zHIhFNBiUlJMMp&7ACXUB2dcGOgK`=?^3-!$DBs^BvA##*iTQDSq!1fMPaRyXKj_wt
zGX@{fxsOs8oqDPPGr09|(sPOE2j=mS|D_ZRO5w!cP&sswO?Twa)1bz6k<uwQ>N3P#
z>D7Wd?vb-kE&X at R_HY><l+jE2$OtXZTp}?&GM2u|H=Mjq(@t1zI3LTxa|hjP;bq2e
zJl^Tq0m+TMu0X(xb($7!H1$w)h5c`7ivMG1V{PNGB7=^g-;8P8iF63ZgT^lzqsj&t
zW1iWFXCj_8cn(C}5$r~glQF=&eC9^HR}{6ccAtznosN|>cUa at n8<U^eMAx=1;u(Mz
zGjMah%dn-~l`o)11l=lSy-aC<&s)v9^a3Mb&qAF*PXK`HE0CBm-dWHhv)z6r&BCmk
zpLevRL4vr3Wc>E?+H>!eT*ikAS}Nqfr3AfC8ppd>1D3_g8SqzT7^4b4ga0z==`=aK
z#elbOTlDmN2E`a3y8j!{7>pxler$}I_UH9$g;;WHwPnkZ>aSiMB(%l0pNu)f8^^u5
z#lx>Q7ze$%#TYg7qmypqm^ZhaiI67BdU%|&jL9>bB{h5+lJQP!rld9|%{&Z_%`Itu
zDOdH&EUI~&K^o2%vw|_|nQsFt4n1&9xpqq>Eos$b-4Vv|SC!Y at l3K_S_B#Ag1<zlH
z|3<-UuESqc at Vaa9;aUZ+zYd?M;Dzh(!&_1}zIW&vDZ`Dl?0%-rZcHlpvLQLB(P`PP
z<Tj=yrCZlB-(s+|pM50vp`T|_I(R@<QcB<!G_FGWJaZx;cEOr0TU}g3go~rK>iRc!
z-moq>JKbxi^%<<;aH}T*ILlSIQtAGSOiPCONkYtXF|#PfdAJ1Y64_dF at A^Nu80%Vz
z$x&rQxWZg^<7{X-1DrKI9IHI)o^WkTy7YjpM*oAqiOR$iJN5ctHerv)dA$%OIKQA6
z?8d8Uy-E6zbd6ZcT#fmj&S3l2Yy>oa4JJp?BDKrZ+$c#0%>)Abp_hD=l6Whyt8zQ6
ziMGc6xv&0$)d3#`uWUTd0~cGddur*(8~`tBlt*XNgmuT1hGHTR6XxNlmo at 8Vr+ahd
z=4e|^eLT)o#TSiU_2li08)rA%^we8C8NI4(&r!;m=vF<8GkZZA=^7fjhi2KHf{+{z
z at Bkk{A4*-h$MotlNnJk?t>G1Vq9pU?^PH@&8PitLnY~9qJ9%ZZ9iHs4P<qrs?s)7H
z#L7;WK{<^R3oo~_n-EcRJ0p<IlN2d~vTfGsNO&lxR}qe|mXb&*jOJEYPjkDm%gf2`
z%N34p{!S{Nq{nX><w^_ at wR_}H==D7-Up=IxPI=>ACG~f0+~taz+d{I{T~oH*DBD3w
zk98Q$tNAMG`s;FX_2l$+PfjDt5|y;Ou1ec at UD|hh(*C_q+JQ>i%JUpfF7~e(cew(Z
zyvI1QY(QZwiNOkBMo4mZAAZ65J+S9MsHP9 at IUEWddi8_#Yxf+XC0bXYaK6tA-;`os
z&6g`E4 at X#^x;@%me&fjdwF>>@t4eW<rszZed5|8|k at XW5`cdbpe#eFKI8INHS&QjO
zGLyc3B6?AjM4=muTGTt#Z51KP?|*|5GvgbeMMo1oGbqHRF>Mt%!;gOI>Ezs~UnDsn
zEmGs*G1 at GY!#h)O7AW7p->+(O&{4p<5^Fz<3}yXo8Wr6~nC%URM|6 at gs@PhIk*L^e
zjCxv+F$Db)rLuI4O7gBWCe1jWm45epS=%LBM?Zgh^%Tb(M_yLK-Lr6}^o#XVthzw!
z%S>gqgK?!cOmP0O&F)HRD|Z&ORk+gHWapf=WiEZ&awp?m(c7;@crSz-?<}@n($H}W
zqb+hof7;XUMH-Fci|;btiSc-L*}xXyyGO>zS)N<3lBhtDD9^F&YKdx^s6@^O8YVy*
zJESRhrM6W-IvLU|gEY%&o_+Y1AxG;)jqCNRa&yzZ3;ory;5aI4puem7w at 9VOD~o!6
z5Xv!F8SOGqBR&1CmUy(NolkRTd&hS7yIPVnrjl(*v$UU?WsE7qZc3SM)BDB=Wzm=o
zyaql)QSv1D&kku_c_35i!+XlFO>0TNS^_P6lYVL3g!RT>{No;JeD{|QYt{3CA5(Cy
zI?q1$jB2&|6pOPJKhWLD2kWv_;@_KZfUkZ8M(FQ0=fP6G%YEn<+!-N8dKxI}=2upm
z1TvqV#1!(Xo~W+LO at C!|ZqhGh^i<4<#l5MJBA2Ex9V5HpeLY58^&eRe1-!ZEev$Ml
ziNJeZYMlMdcPDov_XlkxJ#zC1l<zx&xSX(fjr5`C9)ua|0swjb*r|xqQIcA6>vh=p
zVVc5r2$CDNb?np)XD;g}5 at Hh`7<BJ>vgmY_O_-Ns6XwU+#Pr*PJaZ<;Ydm9Z!sFpK
z;mKH=xMY+owQ{~kPum2Q-8Iqrmc&DTttXO(Tob!vaMG+}#J$pko&;Jl?A68Q45MeF
zsH7Ub#2mTg(YUzH4^TZ(sVnDO|4JC#KCGgebcYwJNB}uV#+3H=EFJ3){+M!lMCd#(
z_6mco(wOwjchcmRRL>CO$Y;JoKKG+Fe&JwG>d(X}X``P0(&AI~qY at zIO9y6@Pk)J2
z_dBQ at _sfJzLw9l)T{){k9m{8R7>(!T{{1JfT`yxh$DZGi?6sRDa*yzKZSlz?r*9J;
zPh{@BU|)LXW+}s*&Et&sa-4TymUh02^~G#zt2%oi088Z?CU{gl>S2?nA$eSkM8+|a
z{x7q(hkNaBF`JXd<?F~eL8q^LP-h5qO(_n159|Av8FPgqq9*XR256t-`M`fd+9j*U
zM-{YGo$Q_;XctS%rTbg5bCZ7Zn)OIwP&4pmI49{KXH{+SubW|Mv%fT;UmqMB`+Q*i
zPYua7U40mj(R<UQ4)iADa3*{l#>QBN at Z0m+?Db8XXN((NNycSY>MOVD@<@2)9iCPh
z`<T5lbuFe6Vc!koF6P2vEr#5vpRCYeiR{jO_9rj2T;hNa_5Cbcv2!GP-@(p&+wl5+
zPT4WX$v7rrHc}X(seoid9eGYuO{^ytadU)Jso1&Jk)lxLg{bJbG}OUhHXnu7Jhbw2
z&nIRLA=Yg5eAh%8C%YXfu89qp?VNT(js>PtH_3ffkz at fRDc?VI$~-9vy})2+o{M0<
z!aMRjVZvDC^_3&fG0~9<nc$Uu2Grn}<YX(4Qp+ey at _ZM{X`zx+QZOH^LUGQ9&isON
z3hjE#KT~^q^~^C|`vs=A at 6)=_3t!c%X)*7{d=_5yf)=~b+b?U+UOStMQhb(ud(z*a
z8QYSY`>O3p=_l*k#LCZ?R3Gaqz1H=Te#+y4&Z~2ddKWpLoVuMv^O);3z|$#3*WKp4
zxo(_G?R<0<Q+GSXyE3r2W%b#F=mo;)2|Vd<H6&A7uibgGx18GHrU-9EujEnImTcD!
z=jdbblJ=E0YH>@dE5kXOufU${4(D5+xt2-7F^Lf_k5!-E<9tj|>&a?Em)SX1(D8z6
zoAbtoWM`(=PIGWA*fye9i&5*hEo#ZO9wLnABy8{MT(B;I^}RaTk^3xGakC3ra>j0A
zb0%(Ld(%hrl}#<_wuR~Espm$qT{RtT?*GiB3tZVUu$nokKOJq%|75!`CYrx`T@@YQ
zlGfAfL|Nl7hDTZZDZjBT=pkS~g8>cH$CkAKV|nW`j4Lya9~_uJJ#7gsi_A(Tu4Ua8
z6Fqj at 11;H=m}T6(U}ODBcjbvQtn5D7dgc`MaDc-sxfSWZI5<$4RwMmJ`r at ASv#&`H
z&jQjHB0Xjg&8&xj&*$J${2N>xJzQp7#pU1EXx9syar)=mQ!Z3olrJr7EBD$hfy?EV
zfNyI(PF*h?X=(pqC)$e+&)3ibw=3F(PcyjII9I!@I5_88{ci3<=l0}AoqIk0A9TD+
zKiP&J3(s$9 at 0<RE!!4cq)tdO4#CFEvti4$ZJC7SW=_lIMok@;iG>y(Fkv-wBzJMo-
zyGs!m(QwZv{XHohzXz4{LlP?__SaG=Oox%A-i(z3=G7TP+SJR0n%g9IVg+IA&2Vuu
z=Xvy&b8xB at 5@cxG5Uv?5wbIm~c%0J=#-?Anpbq-<qMIoO^HJjX_w5{3It2575`A=!
zaq2qeh7ip$$nw0`9xC%ODf~S1>feF8uQ@(<Bwd#fr}Lx2DiUy|ZX4+QdR5xV)T!qg
z9X&~{x`6YWD3hX<=}M_=4z;q at k~f>LUu$8F6r78fVJ@!75^>#HtA|GJp;@+v-U-EO
zGy-ca0rTtbl0;PQ(Z2d3)>`K7wO0D`ZR(oQGUk~7zpS;2vDQ*@3$C@&MXy?JZC~zC
zhi2){KC6!3T5By=Qis-B=_A_I?aOOMhtmGmT8pkDQMTe?)GE?rY1u;c^vzZ40kg7l
z(6ukObfj%lG;l+r4);}(&eg7Ba8KuLoUbLs<y}tCI{kdN(qE{h&?+<fbnf_bwLN_X
zcDm_I<y<Xn3}Yu|2V<I}u#V7p)o3jXm3LKeJ+XF>rM+d07p<z~9sl>8<2L8+c^0!F
zjDB<lwfa+P7il5yeDtRX-{Ek-+SZx4C!4kwdOIQQ56Fc$hIRhYyL^vhb2!c=p2Q6^
zjF=VDdw-;I{=?SWZ%3b{9;2&!yO>1GDt^O at 6qBuZbFT9u#Y|D~*Ljg*7ApAbyht&!
zg1^p-6yt<fXwS7?p%^-1p;x2+7=E7JdX22dLmsaIefq2f>^5qlXOxxa>;-ZLf0MmP
zSsl=r%$7987uMHrLh(h|*M^pqRM`woRmx1q2v6gl#0cM4OB7d2wFFMQ`&v%NuHsav
zaGDX~<h`B~GbF at Gb1f%Eyo%FIh11<ZPRzpJ;Iux(Np~G5cmRK|bj<1NIR#6H+PFrq
zEIfLB_!NaK3Ho3K_$g^U(YaYMZU&U{A{~ic%cYXgC`_rARvu_cpE56S5p=Azn2pD-
zQ`&!{1J6lzoDa=Pc-|qqD-F4L8n>49H$GC9WC>iD5E_?p-~M?A_6D`);mAK$UF>2S
znw;TptaL`au?j7<9^(_n=*wp1wkK{vDy=RCzx{1Qr44c6(JI+sOI$MpxF)x at kG)a(
zH`BhDwrnLg9vr8Dhpt&=X+N2+jDdm6Nw%smUL at pw#ao*VZ!Ij*IN_Q3eYAC)dY_+}
zkCR+|y`VG)%w?3A=xbv*T_~pibupQtn4yrjcV+}`^t1+MCbuXYGp<XwG?Xsux^$H^
z-IX7dbho&tUc<GnC3QYq%R<+Zbq+(kE9nh&=gs*<8|fZvX+PnViZ6y^#hq)st89X6
z$GZBB3srGAOMG9MFh02~&pB4b5!FPEHWC`kA0JaT(fN43&Jk%$E;Bjbu3lptRW^yv
zr at i*Jiu3Y2|46`XqFx)~np-kFDy+81lsV6Tph%c|t^B-6k^fYdsx2E<F$mA$4axW&
zf%8jIWp^mt%X{mCpO5vyWcUSOvt^c+3{WN_9p-sudCCp}yr&3H^p at k-<gLJOP(rzv
z2iFW9x!^GYJOp@<;j6de{;w+)tJ`m#_h27IS9i~R*2H>OQ0;kF&S&Sd-sSUAHm at UO
zQR&9#%LaMFpqGK(aQr6HF`{gMSA$=yp`RYsg1eLWvIMEeYWHbFn??$2Nx^Q!Q92tf
zXjOi{^=K6iaSDfi3Wr#v&7iSQrz^iH`2D@~--Ytf)c2=%njU;7D}Bl<vO&-}v|Z8F
z+_hH3pQTpRcXtGPN2NT2lTk6x9LFBfqwsvw at K@$A_hWoE at DrZ-nl~_vanv*a;&pZg
z`uPUm&!DUE7Nylqv9z~7hZ5`P+8q8Gti{lV-@<b+=9Zu4MtO^J2+z`S6>}yH9a|kt
z?#Odacz)rNpy6N2a$<Rwj<>nbp4%)7<|?d^*GmK%_|!UwCpmEvdou4d)yqFur8vT8
zd1c1IVpP}hgz}{+af1hE84I9~VEID5L{KZ4y;`ZhL(vO83q8=8P%W0wn;DbqW*}9w
zl9uij9fYSHw`^;EZrNhfa5Qv|hFBUpOG7Fe>Y$-OlrgI0c0sv))2z-)sOb=JOAhyX
zm9LSY2U|q%tDoYhULZ4ZqW&S7$4<zjumk+=h}^NNdX&I0yfNa)8+3NEp-9GU*$tUH
zaGFvV*$n?)cltBG(iBJy9u7Uyvq#=o%~vxtWfoFYD(O&)M|Uv!Br(!G at Y=M&+$)Fw
zURs=}j9D<9-W<lgQQR%|{<NBzMTk-kiQWd7Acx^LGd#1{;gO897mhlpHL`E+I2P_l
zEm%`zb at c;s9%cZ_zN3--n4V_MHb#6rG)q;n8Wi6)>#`Cm9EYQ17M_;?Mkjm+0k_L9
z%WSTy!r_UK4cEnFP^+$7K=+#HoipmWoAY7Tf(<n|F%p%vV0Rgw;V5Yd)iUHQCJbGl
z%)#A0x(g+9xN$m0ZpvLy at gh!D_bbw^xPjgruN(@@8Y)*aZaWl=N1fw_Wyoe!)PCW|
z!$=hJWQ at TKJfR3j<Y95AE$v at 6LqF*_-!h!}gMX5A!kAPz(vG(N=OGxYk_tm17uv)9
zX}#}eT{6zH;eE8?iBWA{uY9K_#5Z;@_-?Le+E>WKWVgJnt-|Yo#1Tb0SvEdf7~i(?
z(z5zVl36N|mS47CUXB|?d=_}L3<JkZC1gOE4{rJF)ZEh%Xnph1L(ijU;oDZqf=7EK
zT%MDAa~r-}Q)WfXUCMp8fW%VonbZm`w_nK2O4yAPNE_OlM&yp)Rf9TmNZ3o)EU~8&
zBFWeV)8S-Cj({G*MWmC}jMU_&cNoKH8cWCFU+7aBk*^!FgwhKf1G;L)^RxfNl+ygi
zQEL|uvHlak>VKX1>m#83)~1PyP at W_XV=y}fFustGD>f2)new8%!S{Xl&y<RO_viEv
z*mYJFwXYbP6IRaB69g?WX9*#z7(zAyb^$s78Wtb804xS%0dfKG!je at SBm;c|J}TS|
zL;2u4rKLCt&nkeEz5`AI&I4Ga?FSeOpeM_V0E+>}s0B~;tx5HHOZyk^P%LiXhGEYO
zA?ih4 at D$o?8@?St+iaV$-;p+2#=~lPWNyNSZ?Tqq9W^-{7KE6S%+w2kQaK8J!MC&y
zH(ZpPu(r6L*3<bSe6=7<!Cu- at a4P-uh@eg!V$J{=rz+lsPSn~Pa>vsCq}8LMt!qQ8
zjI+o3Fohopg}wvFT$xj1HJ&zEMMIsu=d98beQO(zzHR)p4|7$MK9cj$8ty~OPeq!v
ztb`5UO^plaX)MJ{X!W=q<3USW8Z5KSqC8^Hd!EeUUBGGSF!W+e_e2DBpyYi*j-*mi
z+8u&TcMqM7wd}~V>8{Yw at f|GA8GCx$U)U?qF1~+9KJ4Kx(EEuDMu$-Dc{09f#e`p%
zTNqMx^-u|NINmS!yywXgc>lR?Dyk=1SBgGPAa*sCo>J_Iq_u>Wz<Yk~;UIL<dy*gZ
zyyta74sx(BN6M{}%CYZyPQ5u%4m+6YjOH1gw4}8?98H~6=FL6tlRBx)>wDhKo%p&I
zsqEn$qgY&UlxW)#UVV!@vlHLMBhPfFz#gimGYXi;`e4F4qk(y#4<;h_ZCGfaYgiv#
zWMAIFI>ed3m)zL>QED>rk^Vd2CGp28+WXEpvLGGxd_oF?4=>P?GL`Kjxvx{MSNz5l
zw1tEXCmbop+0)LTRkVV7Y3}&-A7o8h?`XkX9W5-1YP{Ma#LI(edy#QR!uwC8ZlQ8C
zM+VypZBfRg1=%h5YT}h+veu(gVl{HN&C~o2P)@52)fVHRBW+C=fcYD3c{FW{!Htow
zAiY~kKh`oEE;dCSN}w`=^HW(jZ&3OsOUEI6HONMyc$+2`R=prQm>%ACz2wI1X*wZl
z);z#H4L$f`e9pWywhUwF&&EZce=lXA)%>X?MUJ3fG<m%ZPXnIkKH-7K7XgqO=NsX3
z((j1cF@;(gEKzHWxa7ijSqM+0BgT|Vu5~(rVR at XjJVN<)4l?$;<Z4Md6h*n3^f3W&
zT)gEi%DZ|k!X;RpkzkHnb-54K93ULInWU02klg`YK8X1n_~8EkSfoc+Nk at 6Vko)Q`
z5#xi~S{ta;VmG2XyX(28(KsoY=#H}yF0r>|M$(fSSjVWa&X-omPD}geQ68+?7D=9P
z{MtR#FQ+OZ+Iu~$n`_Z~A_Q(Y`eL$M*5eC2^DG^2{E_Da0bz;M58ty`$YW>P?<T~r
zr at h`UEylT at e~<aqJ*U#MRJ$I67w++3zxSe$Ghi7L?Drx_e}-qX+3if<(TbMKMa%R=
zOG at s@nkmLn1r9k)#`j`sN7MOMjX-<T8XIcfu_JEBG|b7Mb7REO%pI}HJnSYTdo=SD
ze`dIx=0HDzbO{s_oPQm~=vyPu`B#mga6lS5|AMa5DshhSwZL!FdNhhX^gEgf$)2RM
zvZI;E6Z7+ue$9!rB^VJ$IihDCU(=p7sRrwD%*2vQ`YG~a=YRUoNc$Ah(llz?pVr)i
zwp-nY^V5h8(mg}9*OEe|1?SWnd+Yu)sjHecVUBhbwrCt#f_t8?)j^I_U<|n<t8<K_
zN at 75ZSj4<SN0OTET%VylT2hdkWmBmffz}jEkJV9-|EA at RlvQryAaGlB)S&439>0^O
zGLA3lce2Tta at 25U(5fcKM8pSkSfs?VM-AB1fdr5Vd4q2Za-S8<-4iQi$Pw6e>UeEB
zm2{O_(HTwSruiU;@zZ{iRVZtFRys76O8cLhdjK}NLMiE|&{OWLXL3k0Wg*QxUX$}l
z2Eqa@`=&=}sgMuWqJ1<Lk^4BfJq~Mm8YOx9sKJw3&1|Y)rB-CdIB2{9x>MEU_?>cu
zltDRJI<{Y-vYvFGiM>i1THBC>Qq%tI=LZ%27#ta|EQj6<C=dK;y)7&Xr-MIR<#*!l
za$eSgUCXHSSsQjOG$xe{k|Px>NIk`#!TwlD2FB9FfEuF+zFnn?1LmrjuI?B$>?a>N
zXQ9-yPo-gh`U&H+(|<<GQsb=O=I)k7&uMB%7AYn>h+=zZk>^lZ+cFG(dGukMf229U
zR_z$slS(pzHmA@;p`W96GaI!&6sPCzEWvIj_1Kmqo2|%YnuOb8wJLv;V!hap1s{~h
zp{Kndt7loPW$#A+Y>>i_;5460FUQbaEgjo-`kR#Z=x!;t#rvB&Y5s${F`Hk(Uekga
z^zAjjP&_OGv$J!TfIEwmUOlt=sJ~j;KW*_h*@#x{CzuPDViiQ^#w_(pRHAoi%ZBwR
z-wV4{JAZC1Yia)qcctMonGElih~9>^W|tG^K+LZ#IL8)Kc86<XzM(MEre`!bcPYtC
zzQG!KgvCgt*JEDSHk{W<(z=}7gtie`H at 9WOOJPyG9>cr69 at c+g_lEA<F`<4HzPB<_
z at pojq<9cP+EegfE;nT2WO==sSHKT0=$}`nW{dRhmC?`g7npHWQt2}W+R1F^oixaNp
zeuM0m=nby<vgWcKtNDlFO^HOQZnm@^UyG950zb#C{%v&abx#yld~Y_7`d|Xi$>Sz%
z<1}lrUBo(1-}sq{yl-`7<m+&!NXO__GtHf73o#0phbb4AntqWEp<B&i%K3SE&q$#6
zj7$S at 8y9y058#fGr{5>BLEgZJ(_6ZY`<3t233yJ!Y8^QlpMLXAy2`WtO3%x;YH^F8
zSZX!CS$02mOL?qdTcOPd?C3?zjhLUulsyoyvP+*t at +v#^2`!|v at v?=$Rd{}qS?LCR
zjcA2pZ8}(6ygWdtlHvq6i4)WrJgDqSIqrux=(?%|ds%trF9l*Q))DI$Qd;~1d%3jB
z`u1{-NqUypKeBGey=I(+5azLbJ~v;}fZIl}WWuu2FiXdlRrHN>v#bj at p7_XSoOJy1
zTku@~>nd5r{F|J<h&lFFGsz}_6%8M{qJ<eG4jN`1{)Xr&g at Mm-ul=yOju2DTvt;Ui
za-%dXpDWdvvE~Z27aUY;8iwGDCmma6Hu&L(L)+ZCvcZpU(h=OrPNUzf3+0KgmiFYS
zSMppy>m{(lV=${QQNA@^#gxm~)7yF>h^IW_7ck}5 at R6?LlLxya at x@HJD~!tB5Jvmm
zGOS&2SD at JVV#(Aj)yw^`8e5dL;N=-p=aCY$=JxO20OmgHQlhbEEGx$(hx}WAdK&JX
zb7TQlWH^<vv3^Q1nS2FbWn`M{f;(@=zN|?v>vrU at 352JkC064+R=S)uokZr2e|btv
zy4~r{VpW89_siYzav|-vUY^0L2rP$u$EFir8d*89Dj#3vyUmm2e2R`6Il3CMBPT2U
zW%zG*+*a8n%p(IfN;*iOI|xfkDw&G at X{HmSf;{*|L#5ZV8#~JF-{pHC71>L3 at cx8T
z#UEg&8D8f9RM6hu`xDAdEFA|bF?$m*d-FgmI9V!rsLugkp!hX}cf-T1q4BVCC0?e#
zZcyprd&0PcFH5Gt7Drn35_~Xbe7B*%&1qb-Ot_JU`vS(j(WX+ez*@`+)l&|KuRifX
zn2Bg5OZ(UFx-vZN7{lAYe#h^$boBo-oeSdLP3Fh+)W=j<9?rX!-RVd%=>y&_jN2Gl
z9;!}8FP>ERC#+xZp?(d}Q5xEIkYf50^bmLA4735g5{<d*IG4Mi&7{ost$xYUF|<YT
zsQ_nN$XGBtwl+_uJ}H{UosS$AOX}RD4U6fxwcwuBJow&eDt;Doy)R~BEDw3UAm5!Q
z+0(ee{ly*lrlcxBZ+3)yCOXi5!g~Hg^}fMsB2 at PMxNROR5v*?Z^m&d{Ny5IX8mE31
zwWLF?KtRTC`+x9tKKQMY3Sz0}C^Qdvi2AnVaO~^-h#Bsc9;|_C+daJipO<qP(RVV?
zwWiXr*P+lJrE$u4gKz9f(aq=m>-Yq}{TZ&@_X$_h??z3=6}Y1{d*Ppw*uCpqMm&)R
zzQX}uabG!UPCO>=u$0j~xnho}%maI+cl=JS^rSy*s)8u_mj18#(lHqMF at Gv7Cj6m4
zDyeLgH*N||=Q)m;N*R1hR8Qg&R$|SvrW0$K@=EJG=n6ePZdXRHKJke%*Tr1pQTl}y
z_#{wsUp?x<*NKDWp>%G1%{lm%m2eksMrKELMdzySq8?8=%k3 at Qz~3(&PkKtn_?^|!
z?s$Bm0%t$V;n%v0cSq$exQoXrFamoZVGo=1+-a!<vyVGzd!YGrCMgy`ux^{KBg;-<
z-KEJ@?ZCd#A_x7lN{>FUxO1yeKkw1{v2?un0Bxn+vDN+2mpv4c`w at jB+TJ&R?<4mk
zRD&|?3R+~8{s2$fLce*P>hYVMl$L53H>ai-_0jM*8-g0P|I1X&<Xe|i656L{QY|-q
z+^yxuB+S5qT0Z_>UoB at wy3td;*e at j8!#%P+(nq$3sa#Y8JS?RI^FBqVRJOZm at A2Yv
zsx76gSS;r2T#<)whJIGcO>|W!xkJ1cb+ at H&^7`;zr0^c*o^Blt`$!eIY)v7-4HR7!
z>6(n2JX{gF{svCbfgb%vj`H<Y4THO8mH6VF<PN>#1Y_l2sP51b(z|OXl=Fi<rQ-YK
z{GgIEEX=A$&bXz7o5d;40@|AE3aIA)bsBXj*bO`WAi1TJg#=%K6sn)IW2Le49`^`(
z4htg&i}|!BA{AceLAHflvMHM-o<yuw`Pu`XcwqS2_i-A3AroD at e+P@bgGgAekUv^t
z at YT<3tnFE8(VmWV3-|cw$tJ|jH%8RHh?C40X)8D3yNtp2%qqMyn0u~t528J4+e*6f
z$9yY6mZ-HfZfMww(H;F3{Ji7K<^^Zc%NJqXFZN>&*Y+m$ep>=xji7vR2B_n`jmDTo
zwJw4^j+jNSp<kcurTyOc!eTFjuN96gz)n9-(cgzR)IP>)yE3PWvcBJ<$2UO<L%ngU
zahB>piyj`il^@{TJ<f{`#y5w?*od-+y4X`_{QJy58{eGy*Q^EJ1C{tL?x|*B-n)Zx
z at rGM8yEfvR-y|NP{~?$l;1rpR-Jy5smkDvRa+5^w>fniUoVX(*kTf|r$?M7?H5%8A
zlpj5rS)C032gUDJ at Hf!Wya!iHahCRf-imlRhirmxS^2K}n;4ypJBU(-KwyWzH7mjC
zmWeH~o}M8bzej`lVp5rLj|OzNo00=>?GZX}gavj;BmAw{>**ijgRcdGVm#LEpp*4`
z1m)ehNAR~&T at 2rVaUQx3QDe`z>~`d;c?-9es21toW>9~UyE#59!7I at na<61eS~zBP
z2JY}iVRiQvM!{r^N=7<L`t5X<J2D-0VU<&4w=P*C%M5ac)QS+J+lpDqBN7LocCNA!
zwx0(lZoOyRJT!jBe+=uf;Zm}kPDj`R>?i_5YfBS0P{uc9oyRby&duH6JPNwJ+y&0}
zWj)=YL<?JsaRUB~t!w=_A2oc5|CoO+%JulxOsQ$hIGiskH`fqyisftVHNsy7&FKtt
zDR%6ZNCbNZGS$T|e>ds<j|d44B89b;;|r{5I6Y<t9=@BcFKu3m{&Ab*2+!MV;^*6I
zkpGkT&YlGxr<35YEO at 3Cj)jh2UN#ZRM<Q*Qi<+_Dry~-nXTgz#s2Iv!GUMyD9Y0^L
zJorhjGRMGKS9d>z9<8QU9yR?j*nQOWg)Msb6%(AEbnX<dBd`MW8BcmEa6f^me7_~7
zWFB_Dfe|=Ocr{M)pj0}Ew4`hv`@i$@pR|=SyzNOIU+Q`83SDD7cg2`AZ6wYr!vCne
zMNP}Jw0kaPsdkT*v0JqsE^+)H2E&QYmC|KC+(kWz-Fa5OW$D=0 at AoMEC-E0E&#z*!
znv9h3Z8t5>6!U2DUyqV;7Fk1AnOeLJr*orU&(dB%a$7o5V!d{rBU+nA(qI&%^YhGj
ze6`k#_6{2g^OI_5{kae59v<GKL+^i4c4hEI^6uS1<-5cam+7%1r)n#gPF|>J*lM4&
zvnqb8gs%!u??exjfPMav1(mL3X+%qkTkQqD5MS~3zmMKh`EGK}&z^p^g={c<)}ux5
z84REEsBH^X^tLVbSe0~PI0I1OW!hM2@&(SdRoaD{3B><CP7%Ye8$JN1t*Wr2EMcC=
zZ$G at N$>VR?f_-KwcPR18!b#>dx6AIig4H~FRHaA2T-w<L&+u(c5wtgj=l!<M8|as?
zpUd{ZLy5230fP~asgU+r%>$|jcdglXEGymFv_IC0eGKe^z2$O#6 at aI90BG!uR<sxT
zm8Q2EkKsOG_gAr~FZ3JCJrjyXuNaG)p<3=!{O1Q#(ZX*+D;U|F;k9?B;d|%p$KOWZ
z5Tm4|=agx>v%Ts3%C6^h$f1nLJe3b4GEe)4=}#-^U+{PLIx%P!^vmwh3qOe3Zr}2w
zca2656tg;Q8t&<@V`Zm&-!at?eIQV|&Eu!zj}~@nh0oR+E$iuC<uhUCsGt4?sefr;
z6iYe>PX`@`FzbWGVXSW4AJQpC<Y&`^W$5-;s5PNdq|p;J)>p79LY>;~R{lo~*dAYl
z+=c}0kar=BHcdUm>ZSPKGX8{d>L5J-qkzK<NhKI#rmqWyaYLt|8DR}dx*O at nhQi+?
zoE{9TkAfxvVdN8oUC)Bs5e9F*88kF4!Yb5-^;D3Clp%~SAS!L565+QIruoiAcyti2
zT at F4bgfV-JJPZ7np|Bs}kAq=+Vm+q77z{_bfu~+3&`0AQZGnI=ZF4q+?+W3egK60a
zv&d^c=yxJa<=llZEj!Y((1&##>{l=^9h+cYZ~7iytv78?;-=$t>-uGP2&zQqHvT|@
ztJbBO!nsw>5mR^xme9RUQrUVv^OpAJeCl0S{pfe+M)L%{<ZL_XuH|Eq%1!yu`bzZx
zsHX+@^Rv*4z)Eq7D)1h{=R)CDI&Z-|g`Vev1^lq558bXlbVspco?y!{YfACuBZT5{
zX7#9m9d)ygT(s)S1$=k;)@l)Vfq8SHE*&1TJgj~5T5$Vz0q$KbcmeB9>~CQ7zdN)C
za`*^s2|T{-ue1m0F!V!|odnF~&cBkI^v371kfSe;z}}0F)E?&0?Qe$kUqRwxyX2l~
z&pS*{)`rR&+1>JvON*sd(k at H;2YdXj=8edamkwK96=}$aiAPvEYh7QVKh<`c+t}#o
z-|6<myKpC58`&I3S2h3aXH9!PAlOOV)QZ5R(2VqcDYGTTB>jKny?K08MfNvby{0>B
z17Q(?bRaAugalBc#&FX#4GjX#9y%c;ECF{MTu at YQhYJJ<I|g(R8kZQ?iJHj}#jyh_
z0Tp$|c1Hu_FfgMtQB+79yPxl=d%N!qWORPd_&m?&{k(s4-#S%wPHm at 7Rh_Cj6^R7@
zA;#BTX2I!Hp+D1AxT?0)Uv~67y%4ZFJMv=1;ho>C6W;kV<`HGSa!K&nac{}sTZHnA
zXz_`IMJufOp8Ixa-hEHLF9vqypquXwST$w16}i6W!8}-T*0bGA&)S_ZNLYr at 8?hT%
zlJnw2 at se0^7}NL1zFSpm at a~H50(<cG(7+l8PHrdQ+;p64AWGhe9ijO#EFc^S+BE5`
zjqww=_jve{wo{Ujd-IIc)BrQItpB#6MOQmcoG+G(kECwKylw#In`t!Pgr)*#Algo~
zrPFQ>M#cCy*)eSi4kC}2pcS#-uyZzadRUW*b|+)Ls786wIzZ)IXQ1#!MRU>F3f&nk
z70hhj_yO^pIO*4 at auD?I(2XnnWPd1|QV(_lcddgjIBdO{_NCv{<@SC5OTlL8zFx>3
z{HC&Jww3fC8%Vpos1i2?n{#howC-4ExUj=UmejYFLB|XWA&V-YWBvi at 9)gbfeA~X<
zYZt8}t at ol0^`mKzWzl-f)#D1Lt<D24CX at XWYSVAV5WiOFq(R`)9U+`4n}L at nFlLKl
zDeNO!;>|~>=l!G2CmKaq;Bm9K!!%-BEM8{qL|UXdS#)N{AE<JBEwv`hDN10^tRMap
z+WD3S4e%}Xcg60Zt=w2M6TPMce0zS1i)3?Ddqp^)W1%szVB^k1IBRL98F9f{xbcDj
z@^UEe;fb}m_ncoK1$=J7uq(OBShY0J1vA>$bBqt^g%>Rr?Wu?q%*@{yl4Ba8KW-=a
zV>?Y6vJ>CR8Zw at PuKYiqv}MS at 9^5DHfZZf!CT(?i9Jml#bd2}VT>G|20_eTWF)*Hx
zUFxD19iuZsr>&<lPRIHBh5x#3`J0BnWSogtIoEdDeeU%$c<rUc!i3-0Ew#7_X3_Z^
z6^+|YqYmh%w<sCwb;1I>#Q_T*!sAcACh7m+O5M(MPkvj^&lXJyV2{`Ft?z94cdNt`
zG#-ip8WDZ{At7x04<a?l_=G;Rr#tn-pA6sX&g#E2Ox}+779x>nNmDp=zsqhR3wyd<
z_Xsw>rA|ll2WWd6aYI#r1&k%OLD0F6g!NUl%;5Ly%m^pTgT3(n%<$FeWh at P2ua4CW
z2ao6G;bsbcb3 at RU%$}K-)Y>aIW#&hDN#El}<;)NAlD at kM-}f>8UV`yAKF_r0B>WI(
z at gMS%&c20jJx-OSOsmV?JMBeJKdYrqPh~=C#(I4nMkQuZzINp+)a(7Ekrr#Z at NltS
zZ?yY7E_8je{p0iCE<_}fCJsdIBBC2}0Nl9~nJfCP%9G+ at gqP&qhx-+VU4FkLmDKeW
z&3^1szurkSlMR>Gj$@X1HiQ{J#zNcbdtteCELO~8ATjtJ%-{(Nx8Y2y1!r1Ibj-tW
zq7|o7D-#+=5*L31i-~WI6ifK2*1geFt@}pMnO5xB;7sej?;Xo3`H5E4^BDi{9qE<?
zoMd(S at 2HxB(@{7t>Up((Z;S8SRo_VG$`vc8n3tIo#dWb0ttBfD)7jH at docl7GMXi<
z%E#b*sQ~RL`uA%U?(?3*{1i>3!<S|v;g2w%?fs9NBoP&xxX>sV7NX|sO8x8o*0OA0
zB)m6Z*`(VRkJEw~3ymd)pkZM~36HZ-&oU9$TIs9I@{Uh9xzO~bz6?Viz6OL*3kL9|
zxUlOr>!G|!-sKY8<=l7O>v4ZJ`=9dTgn}5TndV^(YgGUDkO-Z;mR`x!GrhB=zF2Eo
z at Uu$k_>T`}dM&-L7W1peOZ4u51wZSN1Xm9FE2I_pRF{e`cC{*=*aAIBDtJk6WTJ>%
zK=UYywczMUe at FXofVLRpg!}yD9vH7u#CTeZO&tVR0)B~7|5{icR at SZHjPCcgZN<J&
zH;;$z!ur at FzNeo2I1Jki<KXu#PMZC$>YcJ_q9OdR`djO6-SI%xb9iyc9{v!}lpT|+
z?kr1ZLU?oilsfF~+o5yPLFeQnozpPThyx8fXprq18|{-p;^2#rfvg+kkg&s0)dzkS
zE`@{(FpLTYzI+Zscg+5Z-v_yq?)hjp^y8jab5rj5Na2j#oSXQnV9ojC{Sog|^zujq
zGbAN7#}4y0Tr at omiz#9dQqK{~$CxVJwk(<>rRvxiq(zpfE-^wb(20Yl%K+(NYbwzJ
zTV at TF9-DqfT|W6a(n}JsJMyE^hBw}reul%=Vo9~FysJ(iYgdl+g*+58EYZPkvhJ^>
zFRY7JhOql{U89okX5Jg)3TzuOMjr~}O&JQkjsI66mF|+g#wn%OI9;~LSy=ZRjhw7^
z+H{@p1{UtCI&Gb7u>3o1tL;6b-}kLA7@|9<-;8&kZ~iF9 at K8J-6MjVB041!<aZVUv
zk%)!YO*!o?0=f-9r-WO%q9D;57|_SEZmv!hCG~b^DpX1~X2XbTljhq-W93tZe^_e3
zzg{X41$+(o8KJ#emOE_8aIC=wVb+Q>+e?N+x3v(bK`X>Y?6es3`md^hy!<<~1$-5{
zY7<HA?pR~3+El%?DWx%)q|7RubigRdYM}@AoC;3I|LLG7bEf}&i3y%m^LscK!bj0=
z2$A(aIHN}Tv!=xAEWAZ%r4=1ka_6DZz1)5N&TmQYQ;oAr3f_?FEXcC4%1k?<It#On
zhPExz(A+efX{CP2qyhMc#t#4d6%h0sqtsta3ql9e{Tg}!L`<v9pnetWOIz9)wb?|x
zE=V;To=r6zeowC9Z~*S at Y7K{{U0lOF{vGY+{gIy at gCvaR^gXN^&Qmx~XA#}G49~@H
zGJcE5AGZ;IRO0u7HgHo at k4%#{71qsrFa8YhTeuCLlG)!o8$8QT7zbckh0Yg4uS+*1
zf;2vXTLrwoW!(>rFt25!d>;f_1_M_2?>Aa9yV><sx6q4hJA6la26`#2h106?+$M-q
z5lXw9hprCqM81i8=l5Qf+4UbcxX&G(h*IpJmy|FoYIdJHLK<1-N at 2`c!mj4NIH|@d
z<>PLs$lplogua;JV5td#E8XYbz9ujt*L?J<$wrptT^z~Gom=u(R~iQFd5aGq_qi3i
zhHEPNzh}1CahR$vG{ir;&%Nu;T=e5t$5JoU>b&O^&8k-Cy=#g8e*B8h*v=qdcGy>4
zRe&8Ak?!JQ-H$pyf4nL8)?2Q|Y@{cx(_zyBGU?nB{BFk&yOhM=u={(yTUXqEfbNK0
zx6M|?pyj~KPY+G(;*TNmvLF$0;%M>5u2BKDYE=V`6|nv(L38PE%rp59dhNBH>E!5M
zSc<b?t;+JSW*_Yx^n9GlkO8~MDdC_AItlJ_$@jvq)r9^O3;jt6&DDgq#X{SZ&}(SF
z6=wlc?!5{n!}>oCGnuJ23F}4ChnYrPL3YLM;L!8#_aSHP_y(m+z8`JV?Q%!n=!LQ$
zax;B8ei`n_QOsn|-3fP3{BTF<M~B2PZ#(zSS52LjJuW at 0(qTUHr$@2dKx3&6dtEri
zfjI9<cykNVF%I(r%pTXqNhS`P3euBO-RIXtAYtTJN0Xe`1%N)|0qB(IWZ!qRPIaI6
zWugpN>nFSh-9`)Cs6Rsv%ClVdH&o!f(kR(&f<9pCWTa-seYQbJxi3;Uh7|kCeu>!g
zU-O1cLnk6`CGqI4x%hn*%SRD<GkAebqxCA6eeuselN<l+)4;<zTK_Hb at utGnm&vp&
zo8b4VJnOFLmYX*HIXV+?`~7mL^&W&aDDDGr|B>$tVaE`9b9z$`JDafL_(ISUQfBV!
zYk)luX&l7vNLMATPEK|=-3FM}nU!CI at AS@W)ewSl<AgnfF#!C9Q&>uE4nTUOnc0E#
zXzx{H3zEMg*Nsm2kN+HHm94*#WwjY(y-r#PEnIh44E62rT*d^pe;Xk5S+b4|o7mmp
z>PKf(P&1vB9FqM?BSx}L=nKY%tqq;|cN^BFw at B32uohYKE?=A8LMN;VUi}ev&v;v!
zT9CtquEp5(H?T(OM0hlGt)ve^o11!~pUjuznY*FANS6eE!!fuQKnG%vzBEbt^l_wJ
zLYWP1&;;4h;xrfiF4P$*>I-bEZgQUsTtTY at 9jiA-E&qiOkF|)4QF>SpbVt6&C~B}{
ze+lc?pLX+o0xL#_Yx3 at BIgK5Y)6nUXy*nG9*FhJ^mSQx~Nk;sG-|^4ifTA%FZrp!a
zwHaSCz8jT!TbzX526ddlxie^!yq2Z3?)iZB+&{crxf{ZzZBrrg&|E3MrH2(vOY<4h
zPRb*tX3f_9A@{jgQ%L$^E`8NUv<_}2YVZ6Bemdmyj at o?cO$!${;iV*Yrw1?nad=)6
zovgeEu$jZNn=$~e0365RDNVhg4Uyju>cMUm%@{9D!U9;NTVOIq*3!9cVS&Mj(<zY;
z_56Pq|8H&c(L4|NI7sDzJAd at s9;{I||AEf_8X4=vmg*in9OoYe4UH9iK0<1i;_%YZ
zNUUpt_ey5qa!k;zje{P416G?7>+HsUtW&k6+FfacPK<Tdu>&}b@`a2;_ENw<o%A+#
z;N-y5hR#db0laR|NzcRszdhV}sdxZ(6W at bA+#ikAn2H&JP4_Ovg6agef~UO+$pr$w
zKl8J_6X?W#FpkFoWqkjv#QjsH4zd39jxp1GWnln2U2A^8tg$DK9E`-Po7hutoA2}O
z_O|$Z{oJj0jS-sz*mp{!y}|O_-W#`*jt6u4)`c6fQ){+gCM*kBaF+_!h=W*D7`nP!
z2M%*y(}z`*?D%ZkLQ$wM!+xXP-Fo9r>P>cA9&myqycWxFmMV5(MzOQt_hS`~C4^B-
zWp!dF;c>XE?$$e(L=NNh(>TgE)(<$#jC?-;EtYZe3#^wIUpuC at +}+xFGg;mL#_+Aa
zUZ~065A0#aR6o-Pdja>d_PDMs@$)=8#6zN0!M&|LZt51yuGchBYRtE#p%eZ$Q(5yK
z#DC;K3r;K3o(#KZ4)H3!la%j7<?B|y<8XUw=$228np^_|Qwv}j9<5}<n<U-Z7<SK-
zwtR|Fncd^?>*#eC1-i!X<EO at F(y46XzTDnh$Ih^eI5)V}b+A*eq3`yxl5&O<4|sRB
zoE0p<>k?^O#|C at k-irUOGi)qNdZ)2dZWoHDXEP9|5u>MGj+wF*?_VLN3+a8*gm*TO
zFNS<!N)1`q$KCq%n*ofFcel7aEBUM0$?PNW#@4YeJb^d^7K(#-t7fYUkVsHCB|Hi^
zB`9w`beLmuNA$fvckY%?M7$jHw#hXc)Tgay`-alKm5wZ^XYQ;O9xt)D*>s(-sHahw
z?zhY!b?Fm3FN=(d#&KrFL9^**)BZ*6|Mi#kbUUc^pIu-pPrxqIeCz<SyC3CgP1^Fw
zTPD{yq~m~9(O4?``UCsjwnmaldb3lH`Exq<nk)tjciY{JVHE~`H9N60Cx at 9V+)ZJa
z4L0F+sz2cD62NY9Eo77pI%<TJxo|=QuY02FbGX<A2gMTegDI#%8 at VNc!Vw#qe>oI7
zEXKwYS72|h^^;q1TeJ6;PmbWNR^%KO{X3V4*CNy|Hj9l2pGP}tTE4N}#_qM1vis00
zqj4s65a)ixS*eM0O$TvA#PK1H0jCrml|<a;E&q0vQu8But&glVp?!MLF5I`^&*d%H
znPbzPkUOiuFNrAHZ>ktLQwOe2Y)o2J-Z1{<@!^ymE<uO4+OeJ#psWuj;4R?s4dZuw
z9ySOp at pG(mS)3EA+3~g1vS(28M2yZOX`Z#e4*iNv?}FWLmFBpY$8|_^T*J7FXpZAF
zU%i;-v@>l!G+oY-E|@izK4 at UmSdZ7u42$T>^qqYxob(E(@rOn$_9U(h8vQ20)+ at d$
z{`ekxVIC#yi`izgG!fL#H at lzM|3vFMdg%nsIs3g1yVhcO6vjoPu%K5iARpWqPkMb&
zORKb7$x28+lGTs28KjBO={MHmJ|*b%uQhz5J7$txc%yDZFix6)?^;Nj6p`Ox?Y9f@
z(t-OT)pr}K7QJ?Jyw at IwmAfgqlJp1l!Nf|)(x3tV>44u08r`i=<IIecwf&uB?DO47
zas;kuvp*3yoGk|I(5$*!Jt4aRCn8%tZTOn-4WBxFCcYZ|*K-I`--30jA<vxlB}Ts1
zNst7kJF%`xftLCjsWH=>)^sv(8dgEzzaz6-+UJ#x6tc56c$UAzOJn2_q(6kxuf-ey
zcR8A?ebqwVEon9}uI3LlcRu;OyLEQh|C<ovzBB;ynbSB0!#uVPBLMdSt_j-a*4q8x
zO;#;P`I`ox%s*pvv%7X<4$%6$zjA5V*=hf2y11`%nt17-y2Cx=lS{<FZf7;kSQ0?z
zhw5dGn8RS?PiWbUnqKX0eX(9bkIfx=f8?M6XQd48*1Dt?oVRG(#?Q+{UM>*D%vo2z
z<;)7>7OB&whn%`(K=@xcn3m#Z9y)*AdcZ=bY?_iYU0474t)y72LC&lQIM?%A%Hhik
zQR<R?YkYQh<mJp`rrf=Y6Biod9{1FV7O|O`#KawO9zV4}{IE)$!-Qim>4KkuGilx2
z at Fq&yy~(he1-oE8?cUU8G>Az>Em`dJIfVW(VAQV?GlH05HPkiz82s8eMobcK at EG);
z7`uvk)=z(;q5?N at A`Lh(+jM0piy8DM>Ib-6mvk~3MFVD|Ld|ftL(G7k>O?wEQK?65
z9q+td>}z{egwEfEw%~q$&NN?rEYLGA`Rcdbtw|44F3?sOYc at -jwh9Yg@F<l~+N2SA
z=BwYvUI8N=4br_aRx1O9D^RL6s2Aw^=%frR6Ennq7xg+wiG_MYUB2aJQ+`5vZ#DIG
zx4wj4f?S`0#EuJf$4*P+rNcp5PhIP7-FXVBm>V%8e5nyF7<s9d&n6;~QIZws*=M*T
z`xl^v=KK1xefl%74OfCVH?bMzXX at 5bi{jL~{Sv&-g!aNAt#06|DUG#yPipxm?$!@G
zd;NNo%Wq`ZG4bozF+0kfBH&#t=#Mr!nbCS(E!%*v<+ at q{bq5Ove!)_!mo7&d66Qnq
z)#_n&GV+orH3PbfWRd4?;{q{dwH~_*`Zo}7|9Nl`^E at J25HCZb9^U%!DJhPBPg359
zlc+{0w|Ga2O}Q;^&DC$w`1evJ;-gnRd<^mFdsJ!;=5c!WWZrr8yN6TJR`0r76A#B)
zfT$Ui`klmSj0p}ztalKrPD%X<CG|%Yjwc*F;qcUl$5Njp8K_ at AyjhCl-wjeD&KsTx
z8pKngCdH~&YVj%E4)>uNaxO)!`GsU!rGYn|yza$7GW5!q*Os%9<;}qiXb{N%;p<)$
zp;Zo{ts6cJCdzd!V1JM5c=Q>n<6yTpaPtiNJ$BGbtOeIL9L37LZ*94VHpVRiEB8By
zxP39oMjBp)+&tOlz(@+4#qQRI)nXu&MYYBL=o94HMSW*Pd35qC$NFI|IUDb4*t#&p
zdRhzw%win&U|nd<GUTb}bxQ?Hi;mj3VH5o3ab8#|6oLoIuN;0e-L3ooaa{?9NjZL^
z%%2T+QXHPIWx-Shuakr`OvrU>(gr0~sis78K<SODMm48Yuaj|>nq>V?uLisO1}kZF
zWsjAg at z&_Ew{1gh?*BodmfNBe2lF(qLR}n0S?Go2NccB!o7)Z=w=?r~4~+gI#x4DY
zks|M}lSc*r9O&AHyZrhS(sg;g+nA$M#WG2FZo_lyo?9=?v)Qo=U?+Y$_&gtBy3l+E
z%Z+Gk+#sjeA#mxUAdMA=zT;B66lcon)0%wwxf?fqAO)NO!;q72p6=xv<k+6Ij2T51
z=z^DxQp-P=T%Oy>X62`+o8oDPkD2xf$S)oB#-<RRGYo!-GM#{a&SHZ=Y`}{gBE87b
zx#6`2r!+x<((x|Hq&0(ag2zUdBcxI~m9iq9pRm?RLTFg1S8e0B;Es{lm&h}<EhOoV
zy*QfnciCawmMcJS4xRi14cqs3ft7R1{_XU(+o4McS`NtFI`$1{@kyJ8BWCyxuDZ)>
zv-CN2*=gK~(Wk;%Z(n~ta?^~w2|>HpW{029Bjy(fc8j^~L7P7x at tW~kNE8P)Gh*(N
z8k~;6c~zWiTa)HmZnMzI&Xqmt;*jIPW!QP6IaGaI-9Yut()u|6m1U6fHCNIXuWMb2
z@%br#He%Xpvi;f6{#)elQvSu>Yx6c!o*7pk4PpQoc=t{W)Ws>(>1GG+K^=S$wP-zV
zkNF$w<1ki{ZoPYM(n_+;f|W4oYHLOXt^O<NO&iJqy?rBpm*a~$q}6ECizvxpl-igI
zH^Ff0Wq0Ccl+5D5EumCf;$|a$(zpWK7HItuVzC*GHXXG6h_6e9iy#?ScB9spbAN+~
z*YlX at z}tT)O>h5ID2=Y>D&maYIHhGY(0f5R^NcUmh{sx!orxNNHpA at 2&I?uxaTKQv
z(g)T;d2Ahz&Fi9zKM%PyqDGB1dDJSgS~1pRjkIFKaf~A@!DU+l{Zj_!#J($#QbJvv
zG*GEk6KWMV$wN!sq1(<OZVBqiiZ~_MK~BfG=a&YGZp_jjNBG~Ousie{tivByv?g(Q
zWtY9-K39J`)*Ld%e8hfNX_Z9cOuq}YBh<M3E{CnnQsaWgN!f=cZm7pOhZUpfM6QC<
z&E4vR1<w_h5UiBT_`tIgK5CZJA+0m$ppE!`HSwPv+Nj<udJ~<H33e at 9xaAwVtx^)C
zTcv);*(ZQj*O^gIMy2#wz(`s#1Kea*e6qREXpPTs?lVi{GlKgF8lREeXST-Y3hpyp
z<8vkVDbV<gf=}-iGbz8Z^abp>kLJ7Wqp7zy_VtgZwyzm|0autgx4`0blxuh`Q4iMD
z<U=O)rnf{I9)>U8Nq}#J-m?lM;?`g;-4t|M>&MiMp%)nH$Dl2Y*ipwjOVBpstGM;#
zt`qpX#j|jV1{#*hySOeOX+;k9_8F}tQF|A-RbO%;ee=|S+5S?J3omFzU*Y at 8(y)<y
z{-XHEP}|CAINrBGxU&b{(`(omyPv|Pso75ZF`+43p7vgGDfEcxNJ#)En5P~xXEk8t
z#!Gf7``5vhf)q$YfEPK7EZm0~L^;f90d at F0;a}Ga+ at q`SwcqGjX3iq_eu;W0rGm3b
zNbh*Ye&|Et at 2l(O*=`o77uWYf>s?Csd7}9L9_NDi(Hl1xq|u<0NQ&qhe9?P9lmh5$
z;)_<b{QHTIk=MFjGJTv`_%G{$w8r(l8jRtU4ZH^E<{xyr26L8(+Blx^k}mw}OTM}y
zF^;&U9`7uyxRmMxc`ORQ3K%64trVB+&HdW>YtXx_(Kj_op6 at T;ujeCUd0nn+IZlzF
z?r>Mi=y?>aNcE_;VmxjFWoYY{w<3>!aUJt^zX$`8hi*xA&?4eMnICy>tozIV+jeMQ
zPK@;^r*uLoX)n2jsAZz9^k1|P)t{W>XkX2G32z>t2hDC+2Uo0*^0za|$A%un!{q)+
zBP3$#UEPqM*$w3ldXn%BXpzvAXnV-xq}&=FW)|cgg<fkX`3=2iAL6_Hdx(2H2DV%r
zCoY!yf`8KByI1kOSL#dt$H|r;quy at pqI<xV0;!_(@S8Bg>K>4Nqy1j>fpk&g&4|U5
zWdM%@OsZeSEm97tzXKNK^v#OQF&cE`(Bvk~V7ds-bikTdDj;aoA<vqXx7q|&Zp0Xx
zgt$J13eLgnMCzqP5hd?SZ*D+efYZ+;LF>~d8_W!I=P}a2$p+&&j8-0Z=$2`D=IqgU
z|ABTACIOy+d15(W8kvs(b^yL!a!LaMF9&=z;3d*n4zB<_95CJ{;P?a&2D}pZ7!7r1
zz<mMV5BvcN+!OG9N_YaoI|IH~rmrIy=egQeDB(K5xM|;Zj}i{}<`Ce!mGD~ue+ziI
z5>D{n0pFE-^R^}_124og_Bs5TpUc+xd;y;ipBpaq|5g`Dg8MyS+zE>PL#cp{0=h%$
zC*}k9DBy#DZ<W$x at JoPiL3wGkk0AU7z&C?$qVb;seA73S@=<6`LpMJH_(o7qSK>be
z_y(FqN_a~E^LAzx#C*?a5jvQ$%dta4+EqJz#|M+~KPDD-gA&#mzHZDs#^mK?j|NUL
z=z0jwyb^HeW at x-YyZ=SBCunF-xPW%9hW11$LlW|?Z7T=uEYO}raOM?&LpS%}v@<TE
z-3xn7DL5NN`M&M~+Q~{7<$IFUUvh%>^`NZ>?IYp<PWyUy=qBvnBi|R%c9Q*~Xq{X@
z+u5wi_avzw&-W5HbG{GS%TXsz<a-HdAK<k6U6^lYKtp><`+PfJ(9ov(9gBR6pj{2x
zD+mT{5wvlG4EgSR5$$b1LtAP`J414S_DaxR&S?V%?UkTiqSOiFchxo!m!KB&Nh9x^
z&j5LIbUh?H at t)3v_~Vs2xF4~mB94dp9QlFX{Rq#I`nRJY#AtB-<unGsJ_EJUeF}|C
zP6K|RaUW=Ollr!!(I-Yj&PP1r7?ph73mVgq4`@7e2}(Zhb%$>JPU@$nF{X{vz`L#E
z8QUxOB^~J8*i3DRysVJvj3G^Gg3_)l5O=LY#Yr_X=Hm-;!a(6wB`5cQ!gRzr3<{7<
zyhiRp`0rvhBGdRojD}nzMB`y47k4W(9_KV<?z$V{8)G#h(|908L#`2`u|mlQTG%=R
z`B()SSTXQ?K&sw&W2{DG8p~od)O^fQ@^P0!qm<K-^KlnwxH-4jFXY5AlawBK8So0)
zbNQIjO4y|co0EGjNli(pEJY57V^s#eVxQwaap=ZNDU2Wrul^W5xQm9BaF6y9Y)p5B
z9&|U>S-}(uQcsm(V=S7~X2(*S?`Do4mDIkV)Nc4vN$m at s8rD=deA=#T=mFI7!23e!
zNoh!@n3oOpr-Z$ygyAfPbsi)SNj02|al9T%A_)9^Cn!IsDThk;MNRK5Qp%xHeoRAo
zu0r_^P~H_vRVd#9%D&v2SN4E4h@~`Es<q%)%~qo4;$|H<cs`XI`MMP`3PIs6X#j_B
zQQ%uak9xq(3cQ#`Ccrl- at I2}*fNxab+2TOa1^5O9o)R6&P+E+RH;h6X9z~pSfNudj
z3~&T|ND}8}zyqTr8Q_}$qh1kzfan5zBjD~7pV9z)17OT8xISbA?ZR7KvAXZVYe<$`
z#J8yXuU<zC31y^pGr_L`UhQW2KPm7bz|aBae~&NOjHEaR0e=m+A~;Oyi*GE2{F6!>
z4AxNJhu9xzs6PVun1=eJfZqU>$28Rc2>5XYZbW!J at dKp<-p-1aC;w at +Ji1~fb^x*d
z2n>=Bl-E}QzY6#P1t!V?z|gH*8x_A-0Ivpo5amHj%AA^iuZH?C4fRhE`xXuL&j6Qc
zs2>N6@!$HnhWaePUnuYagimgJ1a0P#X9w3)`(s3}n}_zph<-h_zh*SMo at RL~(Cd^D
z==!v}(U3AG?A??iHtL1O6ON7X<a(PTt4%!A%0pu##q~Ol8!zK72_Y0?0LR4`u;kmQ
zoG08R|KOprEW<2v$zM1wQ*b{+D5N&Wh16d1zJd#lC!n`^XiOe2dA%JjT7e`j$AzR_
zQr`~ucRVyELzg at em3o{qEN?}nUfn#BdP{aj<rEL!qRJ_RLryJOOR|Nh1=+GhBzeFg
z$b%(!x9^KfZi~(;(H7{7ORh)VYx?4nQaPvWD8kVfm&~afEzdFmqc1L*%HyYV`sj;G
z+<=crGK?A35|ZAUS<sTJut#ghenBZtvh~<msZgIo5_ievlow%y(Eyw|fH5+`<wZ}Q
zAGDk at owg{@xT?<(no4``(h&#tS*6z;U5vWl`YK-&u=lo86i<@&_Fyu<9Ug}>Ufpr~
z(SjHFxJxeule8gmOXxf##W8%D!+PqW at 9l+@T*SX9<uZ3@@#lcYDe!Lqe*k#A0^bJs
z7+{(YQ+#L`7r#O2A8wa^oH3fdL2RGCWnnaZV>5JAX8*bzb_wnsLw~w%mG7mbvUFV}
zy!NGyFDJQ%VdX`yb?+e?h5I+61_WuK&n~$_iAeQ#oAjQAkx0=}rYl;&bccsep3h3D
zWX2L5+JKiy5Jr?(5%&&Zgn+&xm#XR`_}nCnu#*oj7x!5ZEmc(u!i!vkY}mO3wN5Mv
z#sGi7$gvqIlqf0ODW at QgQ&MoMDTw1Zy=&AI6rbU83V<ku%P&abyI?W2vviBIyKyN4
z*CVz|bO|GxsRXIQh=5W8(Z%T}2qXMT2^1fi-=kdsop*=Ier!))H!?^kMNvBp(voOP
zO6`=LQu7XL6{wxE<7(a&ADZ9uHmAIoy?p`g;WKnTW!;Q38?cg`*0MiI$l9cjt)7#^
zX=uSf+alZur%~7^>kyM_8_c<V!#n8p^BH&%9=e7#xsLDy4Q3ZiSGk5om<R7uc at Q$g
zVTcI%TOHw9;l&MW4w!SNg{xe>5N846*fvLm>D|gB$&q0P)*OgK*v>M<pD}G!1U_p4
z?>Z1ikTCTDN2DA1 at mLQ=k~tpWy4{HNkcw4L at NesOYq9Eg^H{s1SoOOP=n(5+73+Wx
zx!?1Oj^{QTxqU9Y_a)!UxD6QI8!i?W#FvNfYVfuF6}xf+v9}#6yAB!y^rR5h5 at oKI
za_+_&zD$7CHu8^y`|1{n+-L#FyRs22s}%@(@UkJKGih1l`p9N69b$H)OVoe2&iEHr
zVluFN*wMEbXNkJ+*SeZ)My@><Lbn;$h>5tKrgMiDosk3)^P!Lh?!Q21k>c{hrnVjL
zs-=Z4;Wj)d-7MCEw2|7P_Yf!9wKu}}4#dnE%n-?q4?kq=Vz@~Xs13s at IN5v?G%2%i
z()l+t;8TV;-1j%RJ;OUd3o8tT+EYXg_h6ACFlGYdCeP!EI9G;t>ThyjZ$po}VDJUz
zZ?!brg%aHdup2NCwBJ=I-^cTLFO?-mdD-R&Q4Z$`%q%HXcWbG}LWp9OLJ>0#Uh)}4
zF-Gm?b|t$R at gG(wEo&FD3?VxeO0^25VHZ<sS019aM at vn3T&@e at 0cPZ_;ZNOeAj-R9
zHHq6J7v?Tj8ltxsdqA_$O3SFlBFBVf<x=W0(1;H|C^6iF8F&`lu<)eJA!qe)e-<(m
zmz_1h{XqyjOK=<ErW*c)L*UqjN2p930?#fy_?<Ns{MQwHm`WT7?&}IJ{5~!fJeUfu
zO9j`_ZWOd<q)97j`|CyWU_X}!6&J{Zb^nn(SpPHfV1uTQl02yFP#$cI_H0ESY*Mkf
zJlNc!JlGP&Qslu_6^qM*Z5_&k?H$R3g-*QNiMl3vurN=N4OF)|ifn*9SU6mf4d}HC
zhiGNP!v0#>u&~enST@|D%7z7>;xrEB1gR{5RqhL91MI<2s45#493mdPNH%N&*WIF#
z4Yw$qeS5opayxjmLMs~<>?UgMWWy~T%7$BjxmioIU0)))>)OkP1-J5iYGuPMo(p9I
zQQe}Y8tY9&aeaH)umJi$P4Bz4UCC}m{H+S5JKBZZfshUDWy1nknYoZsyYdjVZCYv_
z$_Aob8I=w5&s|J2RvMzWU6BoUw37{YKsIcYWkVhGV)NfuWCP^H{9}r2fSj1$q{s%y
ziTMXZ7A^}QC*~i}%8B{E*UE|c&;1H=BEaRuy%)%d`~D+2asSWAiItkZOL9W&P)_)w
zJzkL$<ti4J6RSFu6H*jQkrS&`EG{S3bSNj*b|fd}XQ^^x{$N#3%+FBe#QZ+0oS5H3
zD<|f6(#nbX@&98vp_xOJ9+ohJkmW=v>?B+uC&&(1J2_GMJL1QS<OFtK3`;d~VyVLA
zced*@cY<H<)yj!d+_AhsPAu(EPAmoHDlN at +{fg+`*IrJP7V>;*<;2p9<OETbv{Yj~
zizwdTUQUz_CyKE-#BJ?Lb{pcaRw&)oF61tRtZXkQO7ULIg_PQrhp4U5QtMDo5M?nc
zCrW7kcR}uAr6GE26*+NNJ2`O|<b+R^6D0vvPL#Z)%88OXRZf&Vr^<<v8m*it*{78g
zB at g{?$O%1JKBm1l7-uoCXTQ-+?m{baSi1<7R8il+4iv`Ik}cFXurueBu&yszM0$dd
znPx#H^Y~7Zk4|+1D)<KHfw&I92Z+}H!`<g<9ZDR8z}KbO=~@LC{XxusZiG~d*lPe^
zspu@$(EeEUr|=o7_^gfjWDpMGuO}@>30|+|T9Eaz at KnWTL(C at uxyKrUW@{xTs%hAW
zFa)y|I%|l|yjC at 3(M2iGYf)2HeEz0Qd0w-cvJ(EGnzG_^4ECNE(JNUia(ww@$xk<+
z4m+K?e$v3Yc_B#uc_&(Yb(qJ{3TNJ at RO|4^jAmYtY8`I0z`S=zBEgLr&AcNdkLu>3
z{7(Wph*uUVq&wUP at Xom$@;sp5w^Yb<Ap?d3UPs)9n9xehTSawHH&2=m_kG|tXxu_r
zv&_3o%0Sz8r%`O)ZKUfB8M*t$5cW(EA9|j7izsD|4Xw_+;>>P+K6Nd{{kUc8u>ZlH
z63030;<AuVU&=0%1_~p3SnKA|I(eRZ#t1e#q=$ra0CET;a;$)$4+3-z?ocBw-VRsP
zjmCcS<)m8+bw7 at _M&5cL&Lq4cKQLsdn|Bs#{CRzqmUy1yTuS at 5?0H!qH!qbeo&3)1
ztYtInzL0YZnE)NuJe-s3^Qkz%VH<)Ik~!N~>q0tV<Swf;kaAdjUe4W&k>Y4T-%#$b
z?jN}y=@tK7&0+DEWM77I80t=Ea6&yuY9mftj;V)*?$yscjIzLw`bhEH%BlgpSA1CM
z at t6S=H!3|IJW%|y(&N$Y#Wen-eu0gaFMbYbkQ*&uO#T0P4q={IypL7{KgU_cbt-2S
zKc{k5agEAZ#gC|*RlHlvS;Y^ioK?J8%UQ)0?K!KsNZ~AK5sPQ3oK@^mIjeYr%2~zO
zZI5zRah}3ikSxVHa>>DG;H={8|CF<educhVxT}`4ijy_%X6cx-itSp?n)|($v*!L&
z%UN^(Mx6ER#}{+f+)sXvv*y03<*d1{X*p}|D{2ns{-I;en)^;ioHf_4a at O33RL+{a
zL*=Zwn^ex4TcPEwxjvP%=3)m^<*d24{}N}-U8{1|T%XEWb62RGHTMpcv*zBa<*d0&
zRL+_^U&~o at 3)^$n++hl5LDM?-GL^ID_LDh_`u^PBDre2 at u5#AgP6}s%m*ysDIcu&_
z;jC^2%Y4lU`L{Bw=wDjSDmty at tfCWYyA^%fF=rK>)pAx*la{lJ8nv8N^b&E_GtXSi
zSw+wO9A_2n(Q;PNPAz8 at ZPDa#eaD<t^higXRkTdytfHG$&MI20a#m5P%2`E)TFxq(
zp>kHyWG!bEjr%3eD#A_I=xA6pL*=ZZ$tq_RjaNCV$f4z|qH9#nD!M|;Sw)%cIjcyo
zaMtbaP+^<OS%p7<n@}<ul?q!_&MN%7%2|b9sxqsP^#737vdk*{P?cF5zx+AQDm<v=
ztiqSIoK;w-wp-zI9dlOU8(PjP{H>O=3U_EZt8gQ6*3&C5=Bz^T=QyhnmS!;4IONf=
z at CGes6)w=^aBjz(Rd`27oK@&jIjazw8$Oz0G%UPY<*dSyDrXhqe1|$377kQ7t1w;5
zS%p1+iL(las+?6gQ01(`bd|FTFI73Ku&b7{3X at gNDzs=ht5DaTv%Eotv#{IaeMjXi
z?-502ErI_bm9xCBsGQ~fgDSJU&ucl$`;;oP)_wGIoaKE$%URw{TF&yWRol($>zK2=
z4{ABfi~U_b*XHvq?_w=yc}s}1o|<+sXL+ap9A|l*TF&xbtK}^3m6{x8b<A1b at f~rN
z_Y#$}yj at hz@+PUA<&9H0%d69J)|`;aS#!SAa at L%$e~Giauz?qqS#v at vXU+Le<*YgX
zR5@$TX)R~XIiYgaoKLl!HRt{IoHeIL;VkSk&Ur-TtU0?C&cY0LPL;}8bGE3QHD|rb
zS#u;UXU(}!<*e1%$^Q4F;hZH}&YDxI<*YegwcX~-=$NzS+@$5KIr&=7nsc?5v*wH-
z&U&){#hf)~z|V2kobFoAnq$*))*P!Qhq%et(F}ghr5$lr!B;A06`WEztDsrstb$Ke
z&MKh&zt{}E;BA$&3Jz;Is~`Z*Vk7}Ww4b`k9V++(mAmFig1G-;_&rNG#TgiRWxaz|
zM9?KOwjE)I!~h^CpdEk?2&{*+6RSp!FN82VD%iv+ip6Iw?2OT~0Gp*R;`SMC3y>v6
zo6%=CGN0gJB^KBb6y8ZDUchY^+ at zyb9QHuF!CKA`v2Sqn41 at S1&Tge#6a)5Lt)~$q
z)4N=MaVYTPvJjf)U2f<w)G!jEHYor*-nNctr{suzb4pA)?136RxPVsYoY7@;q%3_j
z_CM=0>J~bO0fJ9>55Yd+umLH-R>HQX3M*qQBY3HIsh+HatA58|8)Lanh3^hpVV!=t
z3HOC$EL}fif1Th;Ytfu$mNM`@k07u4+ at aYgja^xidV?a>#FE~DJsR7GoOYbc=K0WL
zt7O5Rs1=jTw&la13HgHmyYOEx29uGaI9DedpbcU$4yjvYoDED^2+KBfBZZagQ%lPA
zMkZQe0XxIN3KFoFj2lrpbDfT$VC$;#{Z_beg9B}r>pu6y2ASKC!{1j)M~wspLozkq
z&Q at w?>@73S)1{&vG4GXdtL%weaISw8-6g>{Q~3^tw$n&%|0sSVXB6GYd18)#6u*%(
z3Vg&s+uUR{miX2O4fx+7EXcKNdk49>kIrp@`faBUizTNGn-&D)i_Wq#xaJ2<MQ3#n
z!c|)J(W!-J^iqk`k7H2$D|l`O(w?`+ZnpbjnE^L?rbge?qBHY|`w6JyRukg)mU|)T
zGG=#|dm%I)STW4T{V3$$LVI at bsfACRKO1+S%*5|C*|=kuPvyX^w0zmkL~?UZvm1 at -
z>s`nJUhd*KSPr+P9<PXqb_Lgt)BB0or4z`GAI`Un^aTuie*A0PUrDcBRR57fcE#7W
zzcPAn3AAXJ59i{=k~aBdzlG|c`f>ko2g|k845x2_wPrZ?eTYNwg;wNT^>#=H+!!dG
z;j-yi$VvJL)Q|~s0WZ(X+C4g1um23^pRdg9-}VvJt7}9H^9bha>N14v4SLs*ln6gN
zGAlf<J_B(+c4Zk_C~UpnHLOiOSHi>UDD)HD0!gcSf_fXEPZ2L2_8rsHVBc{s?myIL
zw5_f^5*o%eR7>5h-5-jMjk9hd-8-~7&~nTwQ^rZ?IA)b7<0Nz(v%K;+i54CMXnJg<
zge;qNUCSEGvq`$)r0=Y;Eo*U~%ivF<HZEgXxUFDkHMnsAn~Mud0MYG9OQI1!xUq+7
zNu+joJVZXy0QlLX;ouIkfMJWmaDx+KxB|Ij<%vi7OQlR{JlCtWcGt(WY&h*P^8;u{
zOG74FKg at iWxDj|+tOU>zdBg_P2<RY{PzgN%_$B!7f*<w~IqnPmTtQC>FFyLSrGChf
z4sUjr)nv=1pZN&!!s9zaiDC)W2`D^>ev5Z1aa)jCJaP$il8YrRg*~cWxO0JXeZ=d!
zHK-xGTw0ugfEzrEnqu+|K->qUSA>>Y>&<c);l$#hR>-a16hWF@>e7y<%YMsoZxZ)U
zc=+wnn<ThZvXr|Kw<pEL_fqA1iGsUrTaT(?d-97~#L;K;A)5<!>u?X at BT(7~8+jLp
zd`!DAxa&54zk%Q0Sw&ym65`*b_)=Pm4C_JPx?WWS_vD|-gRDtWsDDD#XTY-WHj6fd
z at 6%Qw^-n{IRIf9>2CY<uR%c3=>iE~J!~eAIC=Z!k(Sy^^GvI6z(#<Dbed6RBgvoUJ
zL$?XxAG_>v%}RJ*SK9eBey30gM_DjW=IzySoqtBPa&etgxlt#_QRg{zuzq^4mEZm2
z^|C*Xx4~Naq7C>LZLs#jHrQ|EZGaYzwZZ3<TC5GUAzy at SNUs^c6Cv2uYdeYGUr2W0
zrng-ZV3C at vkJ<@>L>8lN$R?Y{jho99$C3ztxY46!H*Pz}+;)u{xG{gwjJXAJ%hHA<
zO-<5SD at lRSFn4QLJs(N=sgUU(DziiAdZ)jq%nq at -o&KgWJA|%x`s;GfhfWuAaQYwR
zJ}+x~r~iR^H_h)z-#fjwZFQTOOY#k}ByaIeHpHF!zbMJq)V>)S#_uUXlBfP&-bF#q
z){^w*{*cnsMUvn0UeWY>NPfdjWxJiEH{4W~TWFO7H%=o?UqY)Kjt!|ky|kqQ_m32*
zKHb}bmzSbao$iePvP6HhQ->0LxGdw)hLGN}JdC-yM30q=Gzn3OJ`&};L at p;JG9>!6
zuc<UR`PC2Zzfn5^FN>7{Y9{GRFx;O|Yx59D_i2BY+nB?U?)=quNOlhI0(?j+<1O6}
zcJV^f4#=|p8y(4d<WyIajlR>FY`c+^e`Mb;OLSEt|F at C}DZ>gxRHDc3144 at bvUDdr
zk}wK>#}ek(k?Q=`Gt&AWN_Rz$eTrIIR)smVKqKEW(BYCymi at BapNiMVF`jZ+`Rk3B
zkaz!4P5w%<zUzM@>!Wq#<aI<N3dwmIWuo;ZmxlW(qyF*^M}5jgw5>?uUo;lC9|vNi
zw9;B%P)?j(7^~9J=}2vRiSr?G(KDy^jLrNP1M0$iCg%NcC#miD>-G{}Dmwkylit5m
z>OxcgU+ynTz5M)$e41+P;t?6+;Tfu*Xe*76wi5X3S7?#HQ>w9%`N9_Y2XB$Ca*N2l
zhS~-Dvykte8BzXFYySUP4?6t|v!ye?FkAZh9`semZKLq**SwZ+D?G}#i2Z-A5B>9J
zTkKyvFWuF=MB9k^4_4AxJx^I4>qFS*pK_bpho;;ZZAoQS()U7s|L at ut)VnB>in#aJ
z??W^n?zj(~(DtG0e%(HF@@HG*FVrG<jcE&U$Ax`p@(a=SiPk(~|7xo?<m-Pj3N`;i
zA3E`0^`S32ZX2Z!{Z*+Y|NoUf1iMQ=BlZ5K<fS&6muMTQeQ1(${u?ty^r1=bsC{VC
zk!VZ)f3y#^blgrDhrWsSA#igbS~oI}{R$(|w?Eq^XO%X2x1(M(DJ9xM(YpVC*o#_z
zp%;DgU-hEzI&K}M7k#hPQnRLY{?Cm>KeTHx?W+EqvVvdcf~E8-cX&3|=ga<IujsJ~
zuwq3|XGHjlK1s8aIPss#iXQ9PiKl60Ag|3Qo>W%%SkX`XOj+GSmpPH{|3R;ZSXlQ@
zBt1CReSmOcYhn{$^AUs-WfL3Q*1(q3V%X&C`qk^-mG6$<Le^)qGEHB-_Wh~~du93-
zdSxUVp@%ATl{y}ZH&nhl7z-PLu*O)}NbC_zB|QPhyW%+Pf#RGYKh>$j`2bp_PJCKf
zol{O9msjV=6Ly{^?orm~RL))U`kdD76SuWg5H8K at CRWn^9oDdnVNE-6b<27Mf;M*I
z{Vf|59X_;_fTt<<HxJMmxQP?#)*~!tk&TN)(vR}o2&5ape&zgNyu8Ln%qz(U`T(Ml
zCD$=z>3e`KlULhx(r#iuS?7Wf?6Obn1+KEd;#VSRf*LCMS7 at k|(<Et&R86>})h}qk
zKj!MW*RJUEjiE&^3CH_M{dZP)yGQUA^NMubGBqPKX+>YuUNf~D%8L7 at 6H^>^V}iqG
zNhm)1<66O1f%m*uq at OX&!p;O??76LKLh!f}-|G%dI0vgWu#r!9!U=!EzbHjWO4x^M
z(SKt=s?E;5EiCVk*$eZY%XZc#=9Kh;B{8a_XntX768XhH@=KJXdxR4nryaeAc2c`>
zf2?;V{8s8G?`QIJwC(l?Cp- at g5@}a<NKV9jiuMSrbTjZ`ZKDyl#*9_ay?}aYj_G02
zX at M6e+|E-d!yf6iD;zjesY8A#&AG8OuScxXcKebq#`Yy&K-gWBCf}EQ5ztbfpXXo`
zr32V0n0G085b)AnG#@#pEGz0hzw!j`;4U>A$44S}L|Yd6JKnPRqGc708~WaaK1x3X
z-%h~&Z at EtB<m7}-O3wusPe at RDD0<-plhTXP2i*~19H8=_jR$ldkgR=6AX^R0D-FcG
zbZBVY{{S>c>MP~r7B5Z=x&PAkH|(H^IVCV^?b*T{({|}{N^Q(BJyn-8b&I9a=N&)u
zEcRhaR@;36-#%YCz1ioxUOWS9oadi^QN+8??(@%FDmFU|Ju=|)6nqlk(>Z5t59TX@
zecJQS`{9RI8K1FW-_BsCSUceZd)7}!DjR)xt9|CDuGGPPHybim48Trm99#loAcd#D
z5(5+lnrz6GK0EG7Qz+i&;`qnqSikF1p9EX7Y)F5=Na^YKIKA_~i>ptBz2Fk$Io$^f
zu6eKgB=CIC=J;$#k~kQ#aeIHra at Po0YZlz+pG`sj(yLgGX_v(^Le!lsIb&E~64XC*
z=*vZC3^rV(<L6>O2VH?%X&eaqma@&z^!kAqoim}MkHby`SuyMj%Z<HP451gf at x7eB
zv9NwTY;Zfj4EPOQahYh&>;01-{Wt3VUUi2j9PfJ!udi=w%1ipm at 3FC&9y@!=lP%uu
zjzsV#68wArv>Q7mcjpcL3GdcKV5xLl6Tz^zusC<<$};#Z$6lvuv#~#HHV$1eNRz7U
zmQ&^Kf0ruWa)^XasHy7u$*G3V$f at f3X;QsbmJ5`&avyk>{C**7Y5>o}KusQGx10y=
z{&#s0 at j^*>ubKyzq2%ESrQ{iE9>PDiEBQd4>HtluvKy(AUw8uQWdQCi&xqx75Xb1R
z!I0f at KDqm6^NH~z)<V&I;{7k)LfU*j(Jr5t at l-Q3smg9`J~RFeUmQd2*fgmgQ)&k`
zrg*ByG_`Y6tc3<+q=|<;eT&qL_dcOr++PulH!c+|7 at O_eTHZ0%o!HhA{3#Y6Z*}Mr
zW3 at E69-|33zEdzh=6AW`XLId>#o6>atI|h?)RU|ndfXo9f%5g4^nPCEr0;UC-Trvy
z*zjkWv(irDZKXfQVh=^^-YXy*c#ld_zKO~g_T=HuM<2=$>TocXK`sI5qxV<90&pO+
z+mKU`$Hq;4PYpPInXAQ`TySpVbvfN7CbS%2$5YIG^YXG%VM7)>!K=s`a8|IF1{xmh
zs)0rZlQqziV4Mc>!2T?~Y+$F<>g=wp&i*pnT2PeUueak3y);oim$50lw_fn$6{@TJ
zW$AH|f^_}-8Xw at 201G1wZpk&JB?WdGN5f`<p++*=S-i)Qg3}{xC45p+0h6E0!vZ)_
zA{L}uMDCXbzhPm6Y*E3PEwJ!j)n6y?mhW+-7g-bvjjpUEOraVFzeZ4PlqnjS0w)OR
zus at r=?h3#O#w?cL9L83L_uxGeN;3f%39b=#=14CfssvA at opqs~wJYF>1c$4`zf;_^
zd06^73Y(3vIj*b(`?g{seZy<;nFAlMb2OupqFz`(_<6~X((6Y#^1^O{7iE-p_y6cx
z%KYJ1l~`gKYzP2r8DJ6dM2G#fCHzO1&9XGSnfuw<YK8Iyz^g%dHBrV(Yy{cZYOH1K
z;W9qI=b^6d9>#NQ=Q$?7ph969aDoIAg;_))2nt&SywfUlF?GcXVGF at zuOL<6?yayo
z7*=-uwjyjR+^|8+wt~u5XBw<v%qp<eGVWtzRS1PeV^)QjRTy(x6!*?>ae?hoinS9V
zJC)I>UlexO-nDYKo$Yk>!3hc2O$g6&+5I@<pu|aZU6QfQW0ST4#?B&3!dsCxdJpDE
z27Ho`8^waFgWFJskBuD!&N|?%LyUuf54FQN1fN}GJrbe2+WgRo?a}^n4JpTABRX+Y
zVi9^JdI*g`Wd9g%@1@}$(eb`9E4rPyW!-COCno0C8Gb`o<l>eV)5Pq;eXqH|H<kNd
zeSvRRPW39H+QzL?poc|mK5in;t&!l974IR-B;cUAfLFU<&ON-TX0;zY!+rbKQ2S4%
zK8n_!N^Xa(*`kE{$j`sVl@;gV9Mjj at wPuZf4e!xw_PNk&B9U1I(_Uduy7sy70%@dR
zn&^GfW%L+CVH$X5TGy_ra1$Jv9GMq$bDSs?#gk$7j*7|NF?!fLGN$5IFl9)^B-l`)
zVj3z4R??K+(KI=vVp2>tO~qu>2v*XR-N5{WrNWm&6wEth*if!w8p at Goxss;rRxsrd
z6_a50o{GudBUnjOc1P3Xkcvq$4eL3k19dAH*5k3<^^xT8-%_*S#?LjbmW4kk$VQG8
zAG`${!5hSP$T0IN at QbNgkUUw2RVr*)1zGsM3bXeSzCncz8~lfbY_#j}q^>oG_l<L9
znLU*2C&%p at M||)sBbSof2~UngUVUmQ4L*XE`jOon2kp+GD4q<ncU4UGF6!r9rG8|$
zf+>fnm;@WvshEa!1S at IE?r54EQZXqeD^xLAA;C(TvKyF3i4QoWU=EdGgQQ{_B%~=R
zY07Q|Qw~uv31&eR6Vev2lBVpArpX}{lVTbwIi}19cs$KesqjH1TCI{K_ykCBL!}Wv
zMZOQ^a2D(h*{v<%W8n|M1Epy5Qnif<HmsJz46Dhlh7rs at Q1Ct=w;IL(8#W>ga>TF^
zX>N3lZj6q3FUo$bz>^Khy$4dI01MuN=$IGjhS7xkkX_$0$Gt2H<ED9YfkSUsVV0)2
z=Y&tWgh7lrA7d<j;XSS_oxtT7jk$Bm((i?RCJ&8b3JhB5dQpY(u6R02Rp4S8QB3lP
zQViK&j8SMM#;eOA|BLYoF`aj at 8=UQBEXw8NzFAg5k(u)qzp=8c1vC~h#wwxd3ha_4
zuEB*cSfP(e+;W7I-xjURh2IwPQ*gGR?YF417yX6%DBR&y;9V+T8Fm3<m%@><8+`Q&
zcv%k7U{a`GgXt$&!Ia%mOb%%<39iv#))1^<%I+v8hcuW3Z_{9IBUr(d-M}OXY~YZB
z2?@;MhcuWE0rMdRQ+7u&Ii$fP_z?}}BLpj$vO9{&Aq^(MPjO7S=RJj<_mtA}o<bjZ
zs+|PpK1wek2~6;IwbvN71OBZB{w?4~HSnW=pVq)n1Kt{y!JxMlx!D?(!>ADs%d$8M
zDS4luzz=Fl{UER(R7x$oQR-)@ra7d+BzT_&b05J9rtFSla!7+o at RJ(MCka+CWp@;l
zLmEuL|9_Flh6hxMY<K`|{D7v-34U0S$PbfS6GrgkO4#G%)`SuKtRj)0h5UH-0*Oq1
zo~T4Nc)-UVtwff6REaFZszi>$B$2s$sw$BUQ<3&mRU!kn8>XrfISNN5aukkAWDXx!
zC9>hT(PlWVN at T-vWlc&ldAur<aa#IaJ_3#B{#j}7Dss0FGL-z>vQ*}A+#Jq|&r;%a
zK^*d%;JlSZ6j?igV23K7??)W+t99K|E3cw3Cx%}w%3F(-mPcs|4v&p{r8)dVK{g~U
zLMevQI$jQY4EuS%nEn9GlJ}!u>_ at +t9dqBQ$Y>s-^b3;i`#~wdWx$AyT|p^8u<IVI
zjQNNz!?AREs3u*4n=}%niC_g&c1Lr}Aq^(MFK94dAXvea-N5AYP7W!UB=ufE*<R9=
z^(BIpvdV6hl}mUIDP<)I{}R$Ts443~f|WF7cQj27Y0 at P4s3x~Z2?i$3PmZDmkGe)-
zrd(f;?xk50_fcj^cPQ|S3QV(?7lHAz27VdvAq{*8 at S7U=O~B8qdI7`pDDm?yJD)F8
z3v)PvQgdm`A&ulCxIrT`8wghFOLj*wIi$fPxRGPZqZ1VRhDNN{yQ7cF?kfu%LovUS
zp)v<_5)L*&fsY6dXgTt?(#qlpFpnshvO9{&Aq^&A$mtj+=Es0#OvMdM%thf#AqwVD
z8OF>xhKc#GfSI$LTiLB(${{Ky!I(M6FfktntfVQsqiJ$T#iW>+Ima+DKjt%MUPH1w
znkI)-OvLmUe(w^jEoh0wXv5zVtknIB3jB%^_6ovY(S#BFx)Sy}xiw(~zl|{HR19w;
zH*dS<VdgBi%!`WOG|#lnkw_+>X~w07X|5^I7D0O!Ih6{Ce9D%!G1a}QxnNnjU4_Lo
z#XUW8zia6r7Fmh>PDi at aBbhFbPT*-zN7~bA_Fdq>tQl?@<}+|ng(0J%T;j0D at P$M8
z%tACwjMMl6IA0*|D-q{%#3A^ArnV0dthBJ~j at CAZG_`#Ix%<j>9bVL+a+W!!eP=<Q
zzd~8Ra?Lv*;q~!Pl#2UoJ1Z>jvrvJ)j^sHUxbq+wzD8<aN6LW5UE8(`<2x@@{9og_
z$_B4z8D4{Icr9E^8a23WaNk*A!&(n6f)st!P=awQ$eyeJVFT=}bT3#|(X`hWNEAlw
z5^@X=@!dPJ?VJ0cXbyfyF-cFmsc+TzQv-mr=ClQ)JYFx4dnTvUtcN|>5<m;$UVH2|
zZx6E(@0S|AJ*;@Y+GV$=<l**TFe%5-N9Sb`t1zOMKzn1H`VC^--o_ at pGTH|15%#I$
zr2g0w8!I_sBN}^4sW;#)?>MYi1~(dDnK}i#u^IF>2-Y&bhQ}HPC>mj3Fi8{AqzP%l
zie~`fV-=O*iru`!IRQV{w`JfJ)Ip$}483~~uT2+^)l!B49pSb?4!jZ<#9L;-vzIXP
z6FQl?BAv&e3r>?Qp2`}*ntVUK4`o!o7Wz7D-|;VL31#>*tNd+N!oS3~p?87J&l(=4
zZvbDH&4_o3%7 at fA;4*k at Ysc4&<r*<P^6{`sV9;2Lqd_ws<$9R=c|6dINAN<=8qzsF
zjB-BgO2h3c(knuD<{_;wW>)NBk9}Sw{DC9;OAA(+<g*7O%xGv+On~>uFz95j!U!+J
z7-48d%EQ7Rg#V?u_oA1TD7f+P+Y8*iW!Z#_JScGZm?QgLN{NTY(j~~R!S%~<441<(
zTp5B!d?A&>kFxE<xHK9o-Ohmb$?!_7jFT|#$#8fRNk6!=*gn at FgRE2kz$Mhlt84Oq
z#5opEKgwk{BZrTWpPc^+%0GvdvU9gfSPDH9uM2`7b&V~E;-?}$)-??494f<B!sjsX
zslH^lj7#pvlynL2F&QSj?S#kS at G;UY%5I14BP;HoK7q15hO$16vZtWzX26dta0}oP
z6;452n5ZszczBk>)<imA4yoE^?qg%s#7l5jgOA`wK5Xw14-srZ80o$(aHl$KUlEm5
zq}eFHTIRHGm9-0v2yawm$|}TZJie!i`WwGb1Ah^Ibem=fc$Vl50gYtX{*!MH&2ptj
znt4A=_UD(`cCng##7)KvYm{E{@jci#>e~S|ia}cR<T^XjpckoZ_3cxUQ`C=Vx)<=`
zZ03JMgXbFbkP`0qpae2)8)*LluL%CP`CI2 at Mp$Fk<?%db;oe*}Y7Jj-N3tUu<-`~6
zA at JA1J>*EHYrKsahqD|<cAGU7UxXf0LXR1<bi|wbRDA17;L1V|x7C*rH9(0(ZE`>M
z2GzGHkVK+-FR)cG?5rM#B<$zP0rgH|4!sMQiZ9B03~{OTj^Q;%NE_Ps0QG3y+j-q5
z!=FydSa2u1hknR^P6aqwG6lF2sa22OO?9E>umCwk?lyUQ7*aH4w`j|b_t|?GyLJ?c
z@>9LVY9^TD?P0pKqnO${1QxGDr9Kmby)mv`{y)V6730sf#L>(4Sn)D<f?QsdpSK8=
zH`t&2jwJArrCmD(dmQDxMQuH~*8tlVOleO^?NewSy1|x=U0Ab`iFg~6=~MBgK4#*#
zqS4OOqR}4vAN4Vr7vw$xw=p=-YcY?aJp8xRP?}h8Q}RAUBO}loD_C%p*AjQt|88nX
zf%flsf2O=^+*DKTQltJse)Mj9G(FszN58qazDPcRo-FM&{RLL+l|F?YtLam6KdQG!
zOUK`)H?)+0v+7&v>}sTD@#l-LVc#$Ty%W8{ffYPnr=%}t6!hMzM~G*28L*;}LbV3#
z1sQac5qHZofX&}i1%&*_FQ`&T)Qx=d*Hl3z5qa9I>?q<@R<>Dwla+0zQ^;q1?$D?m
zn3=`y$B)`5pH8N8c%#-zOt}r81xTd(&})Bl%*;>WxumjSSML(M`i&EKxDjv at Y!oap
z#No`Ad`2(MyToV-;T2<qEdX|@v;^sJI~Rbw;8&wR3EYYsd)Q at 6Ytf4Xj+4yo;A9 at 1
zCR=-DEH602H|pw4Q}`L2Z;7Xqa(L(d1a>q}^7DC=M}88m#qf>sThsA=ZL8W?-Yu6q
z=}gj>n^O%d!$$ntM6m>U&{Ll|lw!1twyFnCIqJupwi-QR^1IZRY*nUugJ{B at Dt>JY
zXVi3g<|!GHJui7mYEC~R%ds0RmFeCdwjbTCw#iL+pWHGOug6h1Yabpwn`a8|J-!FI
z#y?|i_J4t1HQQu9)noFv`aL)uVJkSd>86}GpH67WWfNE~?u|}h%h^$OlKq{XXFYWp
zrVLZ1p~~=_fm|7;{mM7P)C5;IQ+2kRjrwr1UcUnQG=+a(osIt&$20vh9`Y7KZs8$y
zJmdwun2YgAzp#4vDLwK~g4oXkE|Toh1ToEhe(%%Hl(xTjP7xVO7r-1IH&^j*z|V-E
z3BE7mi}#{!PvaYh?<#yPXpJxNwTh#qWN88 at _OHIJdN^KzZ?(OESKwQ1Pr6y$gYX}?
z8##_E4I26P9 at O4<@a at I(SX-T4HKs~G*~E+zUU+w=MDRjsZhT}mV&LSPsYVRozd>xq
z{}Y)ef56LXVXs8AIoVxzIal(0>vrEBnpUgpyb>ii|4ywqIy6H{cDLR(Moh!|K6V}X
z2AnAs6)2<5(}iU??d+LY{9WQ`z|V1v!5WMwoGA}Js9+pxhp|$F(Mf}`$(i!hQ!<9`
zGhjGkX_RpcC#A9UyawYAXUfYjD;T at mVNB9se4)W8a;CiXmW-ia8k!JG;R=-cI!?by
z6ML*P<@j+Wc7-N(pIGeYHL)|DDgXSZ65Fqd9T$uJkS2C_DUE8J;#X&Z4~*5>_%~G#
z$G^FH1pecgLAM-V3%+;bYsL2-eB<$5fo}r7_u`v~?|t|t;d?*6$@q%+rr_(t*M at I7
zzMb$T&g+b?gl`voSL2(C?;3o&;=2~#ZunN<+a2F^`1ZheJ-(OVy8+*x_*UY3DZVT5
z?L{0MnuHn3Yv at 6(DdXUJTMFde7xw2E9_&=v=x$Be?p<R35&n(5Pdx+If$D7PPi#N+
zc))eUYj}Gm&3S9v-`(f;FgkSzpP3%?sLr<%ZyuY^TXi<I)2-jhb;-Q&zYTG}zaZ{)
znz)~9;ug|Lx(ni7sfnw!Kc_nu?_4eRq{-=D%|tukGQehXqxYlS$jR^Id`ouZWC&rn
zQpfpuj#>A9?(@4ZBMMP$!08uJ*o6EG?ep~ZSDHNCujc>lA9H)dE-%%KO}tyJo44PW
zl4T6!s4STH#Pi1zbCcE&a<|3 at gC>$b@&5>#AS3i4eHHtfkwuhh0V8T+wJu=H>t^p6
z6!OgWo_TnSIe4wNhb6Z<Kd)QQkE$K`|G0V#{y(X9;{Vg?vH1V2+J*n))#LF0Im0>$
z-!H23b9??!1&pp=_o_5V>3NgB9+Efr>t4Ixs`^OGKRN$Q{1al%e5>^dU(WmrOJ#o5
zmf#PS{j0`T>M=I_%gxLcPS#e1dW_ta&flMBe)G0YRVf%%1YbTMg-Y<Q>6n3Ma{ETE
zpRqkIvSXW&ZWE at ZuWYN(@AOG5&pfn5Vs19_uYYq2w~Jj)UxN{&Q^7fDcg_<vO!z(*
z=jn{`seMkKI^8Ka^yH~CmlvJ&T^)>vYe3Q2^4|naaHSWWUG?<oK9UY}8gr92WLN5P
zQ#R1+>3_y6HI}9X$>PL-=(LwQgzU#Knk5|x#tEg58FO!4oVYNtd37doLAHP}L(&_k
zvRICH-mJ~9B%I3F`DB$YZ@|!!(^ty*T<uiP{qcMTkk3IU1C%=*<ugFJ(^EbJXL=Q#
zH9UR#lHA_w->OW{O<VsKG*o{UvINVKc*>y#Ib3{i81<TTchDUESMF$@yT^I%#BF3@
zNN*IxDNROtDJE!mVBof$xg!Rilxy*|v^~A5bSK3#mx7DlrW#oPHm`x~fTbxBr?jIf
ztO)-NDU7FAyTgA|(s-RtS1I$v8*|fEzG!63idUXq;A7UiG)q9;_RdY{wnWmkiJ0#U
zKfXu)Z*%(6#gmzRhWsh>mL9v#`Wz*@m}3DR{$V3^uu=9gR>Ym$EFq;T&|D^z<X$>0
zTg<K~%k91WWYtHxN!w2cySiC?7_*!&s{-I|W96ZpFI*7wFFfWMfh7u$`8p31Ep;S?
zt(ngay*#gM=;b-EFO_Q;_{vH98N()BRX(VGoWo4I8F-ghV0vRctQ}9 at g?tR!2 at 4Cg
zW89HDPC-l8dslXDmw~TTv6H$phCS9QhCBh!r=ypM1Y5bD at WUzfad`Eu&kP%j(?hbC
zF%}n2LFyLt<akhe9lu~+_0Y=^YSpKS7JBiw-rDvWdVpO#A?n1w;z7iDv#GOKlDl`?
zn|a9-2jz6BWI47(OJ%7y$M|Dj*~Bc=vw31Ry{z8*JaU>!^*v$%THG9<8CyQAPKiMi
zxnOMx1Av&{Ci3|fZcA)f<h5AcxkEQBIORN at 2OMLjc}la)pKHI&8Cb!DZ+JiIHt1^q
zx at k<8L#IT;-D|9pE_f;V=x>Yp=!2cf$M9s##}KrVkMU&8hrx1;4LxiTrCq7>T8w6z
z%PdSh2 at 79x2+rae{a2JReO%2Ik`cZ9UYx5PbewENb;|5E^j_3sO4U5PzrK}hXSrLg
zbYj_v@*Q+paW0S<*P)CD+r+%&q01$EjiY8vjnjtp9)9Vaq1kcT*e&>W4rNGgd^-Wo
ztyx{O7Va)Gw{|%S37UuB%{a0CIqxI4<Bi7Tp^qVM#C`tFVPru|3?N^Z<=sEoe_e@?
zO0$0O$|LT`?Z<<r9K$XK*C*6AeOe_`Zpxa=g7I!Pd}EUlGxzgfeL++aLjQO-kIe*z
zrOlt4wDvyeaC&2A-8iEYGdAK*!9N4QyRFGqJsk4-kziugo`dnQA$I<sb?{%*WUL+m
z|3|5BQBQ2sIhl1PMx8j=#W;WIsHUXMu6}w2H_mITH943qA&CFfgdk?F7^^RD^R<=w
z?8<C04ljbmJC|D51ry-1z;#p5jQ>NJZ7#J|Q;&{3i_!ks$d0^MBDe3lzsf4*Q(BX^
zG34}8)|5mk(G7+m?qBpg-(-?u*`~MoOxuYzofuG3Gas`cucg8GV{!PFASGs9fRvbZ
zel-6*KWwrRg*Px$PUzj{!+&arIo=n`vBY!yDbMjAd5)jqIj%&GZ at MtYJ)gKB$9vo7
z*u--zYwIab$lFY+*Pa`iY)UD3{;IAFSimb|f+jn1JJ}TZ5iz~7QrzCuThj_DReb_R
zj5rZook8rXZh>U9MI>@<Fup2T2^qyhjKQ;@Gd4!Y^Ka<PZb!$Xp+j#%$5qL6TroOB
z{tca(?dVKy^TqNrK1v6*k9%G2a}gg_8|NbBR4#Cq(Nn@~d#*ZV!Yr>4J0W}|t{jvT
zC*owgymm8Z2*vlXyl(6qaXtGUt{?FIPKw8W2vBSA+J6 at +>4TSJ4N17 at Q5swm;Yx;J
zFABr&drn)Xo5;gV!Q_7%25W=%WW;LC1Qi=@bmQBKZxz1h@!g5<Ied5F`vblY;`=?m
z58?YAzQ1krZ)0tc{wrpZMXNS3b8^owGBHca%bWCA)kNeab5dPSzG%tmq_dK=GyjNJ
z743PGdw#U0-{_?9S9v!_Sk7=G+f^yHh}G$Mm9Xkl$I{o9IXoh)>tEHc!jdz5owYLG
zJIMTFWnXCJ{*h^(q^ojFPG!j$S61eA0|Xg4c~`*Xut^C7(`?V(YS|JnNO8e<(gWai
zM}uSv8c$haHwrcq$ubyjIN(Qe?58ZmzB^zcd0=^R6IRpDWCc?=p7o3|Gud-{(3IE5
zb5jmh|IcJSmbJ<7Oio_|V|*Qo)F6TX7klpl7ge?PkFVh-Fu;t8h+wiMn6Qw6fdpj0
zVHiLPWf%s~5k-UnEfof4#LCN{sHEtip?1ntOwGbf@>-`7FOlX2D at VFmUQ;?*GIALt
zg#UN#85BFG-uJw}|L^^O`hU*om*-jcXFcm#m%a90d&f?+>+PnRpZF@)23xTj9Mb#l
z&a$^8m{mN=1wG1`Xp9)6d$kp at 6*-kQ<xGUcj(lnt5o_mYw2g=@XLk%7%-B_+DR(;t
z6U2#`&|4WZwRbjl6v%PA2;XuV*VnSUV2`-?Mm=m{;;VEeyVnV}EkGZ7ZK4fFMf(z+
zx4|oYaSc??RNG+Q9Rz-G*Lap6ycgru$!CKwo}F}AMq=K;>h;}UhGUF4zpNr=Veeji
z*@B@`?_F6=Dq_)wBqEkLTH3Hupz`!=H~tt=V8?Iaw3gppYFbiJ5AB`0Yg^&a<KBv!
z+QA+sn+n?qhh<K5H^kw#j5rbrar9WtiLh;PQtA04BzBIDEoDi)=B$Vz48P8~I(fq>
zxjV6w at b%&44pND}q^!2wCH91!V}xJLz_Jt43wS#SV{8b at A3fscrxRPr%{3>=?KbX}
zPWR-<Us>FXoWiAcdOxfr21zi>(;CBXwAF7g^&5A#m#%*XFWapjF16cVQup~X(y}z>
z+=Ttt9nf>@${k`p?zt`9PfDbAVSX`h^!j0}A1~ntkP0Ug-crAeiTQQH1>Y3?AXSBJ
ze2m+K?GcP0f3LG7*pG}Hs2>!u(|=&a+PlkISG1KwAF*xNZK|-7N&@_r&y+}$H&j<|
zNNpWZQ5KQt at 8m1g4`yQZgNBUL<6^+H>@H0aaM#YBx^1LPfS<`;!b$ds33^sm!HMAb
z<7_2#7#uJU<?fFd<BwJ5D?5x)k%PDMBmB4XE7nHr at gI118C$YlzmmsGq~qC=TR13L
zVktQyZaaU7 at L|aVen!dE{h;LW9u*vuO$6ETpj?w}L<~yxd1c4yk*X^8bmfAi-i`%U
zjY}*V at 6f_cwN2fFS94O&5tquFIEg9m;)}V0#poxG^<2?QA{aeuPtNzdo6%!?doa4t
zejMcB`8TZS)ZO}(oSt$yhv at 0P47Hsen`teCX?BqL^j?(`J9>S`+hB{HFrCiey}Qef
z-cLO_s2sh!x3bF_e^+-6#oskpUxa}gKx09xmg&n}U<s9~dVBkbAA;##(s{hhGJh+n
zJX&=$!me&$#E_7I5&m at pH?~wBl at xg5Dy{eLyMwO}Xm*y{5sok3BNQ=|<D}G+USo&q
zyxgwL6?y1M${UdznQIlz1L*irSr##1pp&sv-at62lMbi5uUN*SpMq&^@4vUkzMR>J
zx{<ADPrIbfhH|=+$9}29Q8(J=M%QweQ+60N#v5(%*H8L5DFGKW;X>aT4i#~6j&Tc-
z;p~<jJ+}oZ7tpnBw<M{zy$-X~J%?Y*m~x!D^0|6V at RJAJS2op2Z7XyeBpaNsI5l%$
z<!!Km at 7Gka*O$lS`~1*dzp={LOt0vWhXHfkJ^P>Q{SoK5iljS(9=XA5#y+3J-*0e#
zqV8AfZM*ESn&N at qW3;2AsQstF`FiY+IPAju6>qq6*bW+Oq&{0zj_KGJbSSNN?BW<H
zx8a6sbEnb1+y(q<Bb9QsVlZ*J!Zh>2=hnO8Z+V3SE9t`D@$)Nfkuw9|63~$-x4Paf
zX2j^xL2jdka;CQ(tJvMR3LK5lAfpRHMj(XQR0;pB at E-wxAEZ`6s)0cQpQ|wfpC9PH
zab>K6-+Ng)*s){-tz}}j9@<UE42S0%U`OxtxFqoLW at G-UzzPOE;%kfR<*!*+lf_k0
z&blsITq}ZEm(k){c8PUeu(--ASl3q;*U~W7^`*sCc7=6)VR7jzS=V{EhD_ocB3M_W
z#kKkd>pEv~RaUXCvliDXG3z>GalPEkx=veM71b5E=6&UJT$g0vd5 at K1?h_wdS9ei}
zF?14t=?&EJ7T)EI?-<*ZBkoPOe*$f`_}N_n|D%Ps)q}rb_1_Kty461!{51=2GaLL>
zE588z6)QjA7-=bS#mt8#IyfT6?@DycgP*m;0e0Z6B{~L!x0dK|9=x?g`xfxl5*-M5
zYl-&VSPu+>`!e2;HwpJ1E`UE_<xhaWWRc8X2L2oR1P!$Fk;TvPB>eD1C*CgUAdjHu
ztSpqSKkR?*TjeL2y9z7$*yT2N6<EqzchZsqJJ`2l9K5~(y#e|i=(nKXgPsSyj4K*?
zLW at DlXXt9P>)HOR&6vl!zupwqB~R)+kt`p~xrEYVLSzvm%kZWLFGkO<w&ZD?O?rPe
zB=6CXAiP}wE4cZf63`bw$AP{G8Uy+gXf)^oP%-GjAiQ}1bP?zh(8Zu-pn6a}Xc_2Y
z&?TUYK$n6p1T6<$0J;qHCD7%dFM_TBeF3xrbUx_IprxQILFa+40 at Z<5f);|V2AvDK
z26PUn0dzKK73lMzYeAm_T?aY~^cB#Vpw(EZ{*P9+^1(Jm(A&cM0WlNq^JAjBJ0l)1
zWAz&0%i#>dS$m5<!3|Y8y0ktRlO0{$yZC#;_B>tA+cRcQI9leTa*3C(o>NY~xsRDk
zzo%qR$Q}{9N;Th`M%(pXcK>$mm(z$xa!TV|lG}2+%Neghdd}B9v~B+=_cydLuH9eL
z`xiTR?a}Xidr#TUclIpVSzEb%&(cb}Z#t~@5)>kH4%TxbLi$$c at ZW@52ZiK4>W|&;
z`Sg7heRDINFEB^v!T$yLOF&-)9S8anXbk8A&}h(wpkmNP^xYMpi$Rxw>Ospu%Ru#@
zOF$QcE(Ki#S`NApbQ$OZ(B+^nfvy035tP1P_XW_GLFa?61T6(!1v(G35>yAe8nh5}
z4d`4 at 1Lz#kD$v=WYeAm}T?hIc=qsSJK&wG#g081mQJ@>>brR at C&`waSyNMYTYZcM~
z`Wk3E=<A?u@?6$>Cct{4VLgv^cRD|g%_Coqlg;CVS`MW{BbYMws>r34?&Q#G^<O-(
zGPss>&-NYc|6QuLPwMTICJ~#PNxj{XSRD?<wT29#8<KkO8IpRt2xh7uVmwA?mt(b+
z)cNg=q<ePp{p`nqo-{8Xxktk0<`m at M)r=i7XX?9?(A;~D&|UI!?AzhVJ(Nh}owO~l
z$JgYileQ#tX&P!G!P?$jI&q}~u5#LN-EQ7~>SSm6QOtywvWOnn at dsXQpx5)}?T6WN
z*mvO5Qc;&TlkVBvhQzO8ht#^mjXQR;P at kz7BeBOsp2P}rbJ9HycI`P&v*~Sd?tC_^
z5V9bSlwReGejC_ at d$m8|jUqlP7Gk&AZY#bTz#+Sa#CTx$5AVsSw82|4q*zncmy@!k
zWqC0kKF5=KpD)67-hp~MoN3=@^stV}j!9(HjCvRR%{4mVZx(hh$f&91<tOcpw&hEp
zk)^6#_)ftF+(XXyxfbL=wFBN^v>)g-#HlY6=m#i0^u0;}=~X_h$JIy6V at Tr=gEUx2
zVP_fdsfg7dE%UYPI_R$_bq;Jf$uH+f_?|ACUzQL*mmZs*%$@|gv(S?u;cs`_Gaspr
z(v?@sm)L0&VGZqpU0LilvwkNZ_3N_3%!By>v&D7x?-k5I10dh2awq&{=NO;UbO(`n
z3^gEl_GAEZXcK$$-YB=jE)k!!usojbWO!mOZwpJkc{S7;;C at p^Z100^Di<K$W^h}}
z?eKS-jL#wP*<S7l*A8&IK;MS19Q at AmWbsqHx4^vv-&(pl$I9sdG=Eh5Siv{2E)IRP
zxyoq+59RS8-4l=w&yv`}hUl)G)i(g`{8NzqmO%Q(3ha|&Wog7+Z8nY#B%~=xIVqQ*
zuAhm8E53^nFp+rUvja00>ofQ=QRp3~Heq+g=W~o#rz at bzO}N9u499bzkM+5H&U7(Y
zLwfj}MZ9y!=gj|^u9hW;Yc0B3=Ev&kb>6oBj;_k<skX|miVIi#L%ev!sd8sAZ^h?b
ze$c{cxKBd5Ps_(b&IZIdE93hRgj at ubAop(&dVblAn1eoFlw(K8=gXLRK3^eT)3T*8
z4L%oOk4E at hTs9zPxsMsz!A`1Ar)9O_a}VnW-1k_~5Ho at vQDhwPF7wKy&Ld}H<}tQ0
zI~lu}4UE0`dEWQsK9KM-@~THUM`I2$197G0zzps}-(cKh8kiw5`OHwdvSB>Ic>&&t
zT?MQK)&Z{o)xdh>i=M(j9)?S;m2p97u1Mhqi~xK91{ewW0*?cJfIlDrgg`J50*HW6
zAPjjt2|UGGK_L1cMgzT17e+=yinZt4%Lpe4*J^|lk2{*Oq)xuz<kRSZw(ABY_1=jj
z<MbTd-yj?AZ1|Q4^)^b5o{?0&>a^j#4TT%XhG#actEbN$)GMd!nT>mUd>U+Jg>Y#I
zv$3<+ at R_Y_ac_NZ6Gk<>Nd|ud=@Sq{c+0oh7URN=?ql7y<xH1kuMH%^lPAaKL5_&N
zT}j^6lf&p(fc?-R at Sm_(N_Sd$7f-su*RdYE>kNVY+oF%qdj)hvI^MlBW}+vN;PqoQ
z>fVXpj4dCDF~ddt*m9emgrlL|n6Cp4m-*_i$INBK^@Fir&)FcM_qUdFB3>EbgfZF1
zjv+h=zPhm?eRu4xquodM;!Ysx?Tblc(b&I_`S#Hk#N+sM;~CJHX^=pnm(<LG1foYI
zc*-h)wCr*H4ORxXzMN^UwA_d{2RQ9M`ZmW}^0D8C52_*@S{jW9$!^jTF&cK>zmU|~
zvl8<N_6fRUS*f?9wtG(6Q_0Ae-570F20|P9{fPbH$Mx+rR6GZMxdiJCg5A-8J)o{N
zCc9T~Q8TjMri<YZCOkI%`=8;S)b~%Y`OYVg6P_x7|0R8sR#N9DTa0J&+@>!J$_Ut#
zY*Wt_Peq<KdOg8g6=<G#D%R%v&9wAS2T6jf^<<>pC7F?MsVp=OpQCsA+CI-MN3Gvx
zyhF!F>|W#t?2%}z95?P=CTSSVO1_Wp7(q7KMDTaRT0T5;65pCx8CaI^@^qrsyBL2B
z@<46ilRUlNIY<z&=hZ|$qj!nf5U|JSEZG{MC;r66;>TZ4TyTHFsp1MrgCxp&JCq%d
z-a#tk^6^fSq|Vi0^xg^9Eme?4QjTXlgXRSs*4J<BYz!=mNiyHP9c2GYa=m at bJW>^-
z`z1LD^k#GO&=@yzA);yoo~|m&j2S`pN080fZzWax6X2?jV3s&n(%tH+LxS%5a$Iv2
zxQG`QaP!=@+tW9}1ROr)8{|Q%){MkCg8=MNS2Yig2||vk4mMxAVLg<M{P#yN4%p*B
zZo~oaF~5r)+j7`1a`Lg{gy*MF0(N#C%YEVJf-ts(`k`W1{b<#IUfd7FOt&?u^Mh@`
z2lcpjMAOq$eR1iY2`n7X-bwivtWWG;0+llZ_*)f7Jz<w(zb|O|L0 at QyQ_k>lFU0yL
zrE~NO<EHDxyS5_i`VYqa_u+j{Y<<uBoHNm3qQglt(cw8FVR<`_7hIc(r965fU{@@(
zV8(d_Jb7h{?-!8{EAI^c9=)%NCx+iup{pXC$Qeg`RffLbgMLj$%I^e4_#3~=uicV|
zO*8Unv+~#2{P?!?39n1QnLkK#4)Lt=*qo$kj6;4GvoFUF5NegyW*_)YJZ(#*m8)<=
z5+%G1{`KFb?aTRf#P7>zJuSsjQyW)HO>KBcd;fQ7`^v)i#z<ccOD*M6E!kvR(@qAT
zh%r>zH at 3Ql;`=o-*wNMJCT1<tg{Rw8miAh9=3#qz;Q+*DJ7Tlh?l#$DOZkg7G4RW$
zBcLO6PuMT`^nJ;PbI_MQ$w}J~C5mt#)^RKD2(n+1!LBK1GA%!;)1~dC11)<UR%ZnB
zFK1exTrRizg>=A@%oeM%aS0MYvkY4+2c*cg=G173zhNkHqIYfXVLeaZw&aK}JrV3)
zaNI$mx!Wq-y$5Z6C^tQ&VzHSPM?8bH<PW8N<0QRrk1ug}a#2eABk~#^32TD{?G}kS
z`yg?fMPkmo{Un};H%P8!HP6ZnnO6Q`$<zC3gX)RZADsnV(jF-nWBG$}OHr=bTCS#F
zxnuuXQ}!uT8}uzvmgiz^h?U3lvNlv}ssAJy+fpcha6id99?^)yBa%^#v{^Os<ij at P
z_&t=2`->&TI$O3CJCUN(h$k=ElL7qx?bYdIX|IRvM%`3)E2Z|AM#q9(X_R(Sn$Eh@
zDTO;7Eq(K!YGt)c?yi2ddc-cdum4l6td>cRJZxw3LBCopd9+r2A++_l+J9~f4wp*R
z-)iyXu%nH8|N8f at cmI~68biHi{!_iIt;H4hs~2sp2X at 32K2k4gM;+)v>8Mk?Du9#P
zCpBdD`jh&&{H{Lqxs(61`k)`%4tiL3OB?^bZP_)f<KAZ>b=MmEn at -K~mJw`aRsZ|U
zp3}A3iO$+5#q_DCk#<C%n@<K1<LLe_dgW~Nd(_8<7`-3$u_f3C=$FSNf_pAbkNV&Q
z5=!VU!!uTV@=gN5nKoh*i0Ac29%K>*IuLMA;>q=a!KCuZT~gT~GJRJZR<BH@?=D#a
z|8b^r)UNo1L7c6XA-fV120gyDGICd9!XV-FN?$yK at 0c(sn5m at i({f61Ck*lm2k)HV
z&Zj(mLl!r|9eIhsxg at yzZ)M}UCb$RFa0b3^3GR~Vl_SCN65QoX<rCoe3GPKSJP!Q8
z1o!f-Z1|uA_pMB&0DglL+_y2TpL>EQVJf5HHzdImlF)oS5<H8hv-u27 at F0BTqlK?$
zf(JwSK=8v7Jc22YbC<*`!9zlMS_kh04}8yW6u99D9 at F`ik>DOn at F?O}27nup;8D-7
zd=i{bg2&k^r1=m$lQ7tpU+E8SBwhF7eSKr_eplC*@NQoG4f~$H-_F4f?*OB3YNKx>
zW4~!c-vJhqfCWq6o58AFkwXaUE4SlY&s>FI?H`ihWBvLQ&W|<IlURslyEq|$*GtC{
zoE%+ at RD-SGb}K;mU|hTp#y6qZQ-?SaOW&wQ{g(FZOo*>1><PA|$a!gk#J(PHBX|oZ
z)Tnzf-pJsD_2y!nViUn{Fix6JlEo&_ciz$WeC>6I+m7Lkp9GtA2SxaleqmGKUStWg
zU1Z^H5U-CXl72kXkGJc`+gNxqoqa<?3ws)EI_fuF7KpcsS<Z#P&0$b?oH^q#2+OqS
z0dL6Ta}sfe!WRCC;Oh~ep0lV&oT#32GX5db(}=T2QPiCfTuKm^=J^S920xCI^(^Zt
zq`^s3j#E!Y5A+FM&T+!~2*=S=oH$L56M?LsTfPEkUlsaOaJwOnTW<zEy=~<!@u>gc
ze(?rVw>6%Hx5T5oXTNx!)NPGt;VtnfKcZi}5!BtYhqfVS1lnc<WX^`nBOt#+KK}^n
zw|qO?us{yi;$9X8Hy3VxKQ|xlA^qG#tWUfqBnb3WPm7@^$6X0q6Y}{6%+2LwR|2%?
zNxueYJ?rWTw-_-y5pyOqDyHu036g<!2dpkn><QvLEqk_yjZM$aSi_v at +6TO|JeEw~
zpO at fMZ#k1Vjjs3U85-Kg2mNTCQvOGlR1Arf`Pj1W0o+f|14SYf`LOTRa|Ry|Y3La^
zdX^|2?kwy1<OsO4VDFv}&tN8u#F<k1#y`)k%VooQktaQSL+dN$pP_Vlf={>g?SMG@
z10VK!#LkY8W$PR_5Zd#*24M$uSUJ7h=}C9_Mh}${5)A4=uiQot0o<|Ac5?%DIpgWf
z>nriR(CES7uCd%8a93GwAh;_m#|L-$HI#rfyiIuGd9<6HeZG0LYbCB_N4v1kA9A|{
z2*EDRXvcC_Jjc2eC7%afA|tK at v`of3PpKYPR$Pz8R4&j(*gd4a3uQR90=fWKfLxE4
zfER%mfcZcvFb~iH+HQR;qqj}K)E+yEZ&Q7=Iw_WO#VHnNpQ^W1^HOZc=qaQ(yyvZy
zK_q4hAKVjC4w*HH(Q_n>-s^_sC)?_^hBEo2-X$+DOBq1IvpPv{v%h>K(Px>6{$+zC
zm2uiQ`?dAeYu6=79J3sIhDykI?4llXe081FL<X!fNJffXj9(yc5B(rxTe7cY&{6&r
z&tAJ^8;NVefKFm;u5ZILx-E$No`fK7eFCqW7%wY42?t*uWSW0e$n{Jt$K6FT(#{nU
z+hJt0k*5-UwvC<`|Gqx<Q-6u*3g%F3Q8IcPiFB*uaW_?Pue&^Csa|3uca#hYcIwHL
z;5>Ct_V=5mgUEo_zL7}nT-J{?-Z^0>Lpq$lmk%I4LOhiZ%UDN(f`mmm+T5AK+`>6?
z3g-$-UMR_CJ+dtx*>iGrLAitk1ZZ<gp3m04P^89_JxuT at Mj&AN`H7hcv6HgnQqr=O
zv1!j{PfVXMY83V>NSZP>?%DW>XjUB7pRWxSrIpIGx!NE`U0m$^J3s0kJvuWXZE_k@
zqMpsfDaJCv^Ftzn#{>sQh6OSu+8nK}q`$W)B#xO~SXe}ZinXIhJCg^gX;S~-i1~p`
zM$YU$hx7k5fA!ovnmZxV#6I!*^88%^593UTOSj7UFXV_znK&_NVuB);NmD9f<$svj
z!+0}L_1xk=iuf>IVSYZ7S2!nU)?9`rnVB=UVC2Y=7TrFK^*jBBghu=;{f0ap{5$<V
zlEWVeGkWwRvHCaIe^t%{Jtt%`dFmOu0wyg*{;+ikdBooun}e}}Lu>&0m;R$ZHmt85
z!GSOKpDq5POCii2)E?A*2qE~2GRXs!fDG^h!ho&U2-yYf1svP3 at doe#cfb=E4lsZp
z5C8-M!9bXu0}gHC837=f;{a>GWi?;}*aCKdJ%FDc|JM>yQKcsV%gcZzz*3+bSOzQy
zRsa>i%YdGYUs(p=8hzzbpd45REC*HqIGMfjWq at W}1}p)V0_DImU^%b?r~qCDRsySl
zN?<jx1~33fUxxH$NMDBZWk_F!^kqn2hV*4fUxxH$NMDBZWk_F!^kqn2hV*3|-8{l6
zoliI~yhu1NEg+nQiwFlNxH!m>v$ULWmMtfo6%~Z@@=C&4RY^Fj*AR{YTeWM~5zZ^s
zgtLAF;cR at BaQ^lhc7Qfve`+(~Y}raUHQNa1&FzG<V<+L at lnUqVcL=9;H}<#o5YBsh
zakz$0h60|zaNscjtp@$`p?@6i0_*^LzyTNlI08<9Gr$F009U{b-~j`HLBL?Z9T);&
z;ZBADUVt|+0`LK7StH9Kh18RnfAA(Bn at 12i9bB_Z)Y@$Id at V-S*>iKUbLMJk_e+|X
z5u2POW8#x1#xfI9WburD9_^+?7ZN*H8>cOvJ;gt7Dw7xzW~F1SG{j1urW7e2mXS9j
zFE at KeQGRwo(X7JkTx8LgXOwz=Q8pbEvWwN~x!U3vm;nF0Q4B_gkt1oDQL~Gp{V`aU
zSja3b>r&5S$t>!LI1?u%SqI^046gGTq|1~k1GI(A#K=(?doBF<!V)c9gp7|%ewN9l
z1CW|QoVkTe?(F9g5G$7oW5-L`;YmAdj=E5%W$P`Em1V~#O;l1xk}P=wg9&Mtwve4C
z`r at -*YSxS7<mReNN*G1#1Uj2o;zcDZFk%%jxrK9)ayBbxfRZJwOi^+=WBf_DB|TLR
zn~2I{P4lQ<H2uZtO0<P at X1%D+V`S1qCOuZ6WRj7)R9!G at E*pbQ|EF=|=jK^sM*XXJ
zvh)e^|8AZS;y%n%96u>8Uam|^nHa;MDnyJnq+B3_nJm~!Lnxh<7me^)d9&3t9^56x
z at Bl5=uyi(cQg=}<>sHUpVQEPzO&Q1(;eibrUL>-{qiY4q!jBrCmgS?=)O)Od$pcfH
zgSNAn9yRCD^bf-N at w5IV55@M`?7uKps&?|g=EpM6>E;wM`Nf5EAWE*fNIR==t}}_U
z8vFlTf<GuDx3DBTr=&z(Y_V(Ss42y2+V^J7Ent*6#RY0Dqkx4J&Yenf3yalxRJa+s
z{CssWw9e$~X3q|w{cDu9Z#qXQ3$;13Vbj*Qw9~NG8OT^dCd5w=#wi#!qY{`S8%Ug^
z9;CobiTXz66cjLXb#s_#3=4rwuCBNkV*z!c=OYT5!I|py&we!gp%NLkH5vaBs_>|&
zDRkn;@@?uvS=p5t6BI<#vG)CM{h`^CsMPfM^mvSy2`LZU41Q at zs(6Nx$HzX)FmdS$
z1uKJpuH|1UgF4b!eScAZ>SPv-9?hgF;uuDjrev527=RgBtTL8ilt~lfE%`r)*O!)h
zusl2Lfwjc at x2nQMrs{<p#c2H!t-6?18&L$ML4$O?I^U9SER#1&jgfO!5d-mZX3Q-t
zo`d$svYU+(6;P5pQ=OMRYi at pFHU=t-%Q9kHcvk7rRLrOV^xp?DDgQ_D)U)PlA4Fsw
zmi4yP(0-pW>LHFzON&=1*?}dHDW<~$8L5zFC!{AQgGIm3DJi!0d;b#Dn-1#PvUp{D
zoH83123Qy}F!YGX;ILp>C at v}bDu}d?#KoB17i965D^ir%Ns83$U`AU!tDwL#A^a{Z
z<WIsxe-ak at Ct+cK687{XVRTlCjf;y<OJm{{iWCI{ahbHfD;QesVEmpA>sRflB+Pk=
zlnIPn#-t_7`;uD}2FrL5Zpkp#GX2Ho<rULuFeN`9%M5l&4l}aEg$#e17s9Q=p>Opy
zhefW4ht2UIum485blRp>|AS&lR9}QYDEI09`gk<%pVt?o&YzZR4gaHJ`&E}jJreg%
zi$&b=u?mb$|3$SQw#Od`5XK77Zw%;{?;l$PY~s;)|BV(x8oHQLS{7c`t1L at T#FX=(
zqoEIq#bQP|Q(dfPN at f=7X6G?8)QpH7*)20o{;b*Rk|0FEq*XXqP3JEE`9VxfObqN#
z#$LU}J+%5h%S8EDD`nG=U}iLfMI&7tP7DcV*s-xMEaYJrT~Iy}CPLUutR?#vmk(B!
z{qhb)oIhA-J}5s7ar!MfANbS!A1*-I!R0~N7 at Dtj@!D at O8WlS!iIL)Z+q!0jUbX66
zEi;nAjtZTxE!C&1Co4B6ht2?2M-Do%mCei1=2+QzIkRWwS^45pD}w^EXVOXD;-=$5
zpU%P|+rL;8M^U-v%_^LoL)SeF#(6BcbVb_#T1F(w?kAc;os$<3JW7~ZJWHz%2pQEU
z5nB^1Agyki$})Fk=N9)fsHn^YhTU6Ya&u?pKU}jv*n^r;kl$|u%DVGJh_mZ|QGtNm
zLfu^LSoVU(*_A3>J?Ej$on0R&-P!fg8accE>nb_BT3Y8poh%9eMWu3P&d8>D&c<>%
z+d3C9(U`5!f1;yf{7V8x1u`=94zv?>poJ2#{42qFuxKXMb4-5Dtl8L|p)08WFU*H_
zI$8&6RlgJeq5K$QXoSA`O`S&<LsY?*^~=M0#%IK0uD0f*rmG~HbVABRcJ{-SAg(To
z$@ruMQZh4#W=SvavgxX%FDwt26-Bv^coA%*Wm~Rsv4qwV!rBn7W9d~jb}5TyqpQ(P
zOPKXssGaU<&X}!JYYPjtGljUgEYfMMo18OqW(#w4+QRGt^<3c$Ei5G at JUb^mGF+5h
zR9GUEDzoK<rRw5rD5FHJ(W&R=s<YK|W at Y2T0h^%HC#@x&nQO_3eh7pg2RjH$$Y`>Z
zoG0a=%Rt{G3&_VLfP4aZju1I{kz-F@;t;Z!BPUW$0Ma-h&0|PYk2H at VO+C^SBaN3e
zO&HSHB8>!T!jQ%bX}Cx;+*;0XYdIREi9s4Z%31I)%CScpZ=}(q9B-u2qa2z>Y%Qns
zpVCzLSNd1^SNp%}zsY~A|91af{=5D6`tSEY?EjH}z5faSlm2J?&--8S|JwhO{}ulm
z{>}ck{agIo{5$=-{fWR%;3#kr at CEJyPr+~jBk&Uh2m%Gcf-pgZKrE05WP<U6WPx0u
z6igCi38oA31TzJ*1w{g_V7_310B`paR0t{sRf1~4tAb5}t%B`>U4q?$y at LIM!-9_l
z^@0<ElY%pX^MVV4uLXY{N&hMuy(IYSNcz{X(My6Wg1?TW?qV;ouQ)&)Bn}gg6-&kA
z#S_I!u}VBcJX1VZtQEf~ULvj#uMt;^UlVT=?-K73?-ze4J|;dXJ}15){#JZV+${c8
z+$Qc4+eAA?yG6T4dqw+32Sf)&heeN#mPU_{o*1o+Rz=T<o*6wiS{wah^pfa`=rz&R
z(XT~si{2HzCwhPMhtbEPPez}Mz7YLw^tI^b=wGATqPwDPVjN at KV%%fAVtiu)VuE7+
zI+A*cnFkt`JkaR$2O8Bs(CF3&8m)hz(JK!$N*-vGd7x3r1C369pi%t;jc$FQ(fS7(
zz4Ab#<bg&RR-<7te;r8~u|OQi+NeaFAWmj&bh<cSJe##qy?D8}lC{yT;+^8%tc})-
z8^mW=8@(dFDZb6xD2aB6c42Lli55f$vNkG-PKZusZFG8ce)MeCM)lFlqbpe(-5R|!
zdN*sM_0bK{XILA(5`8oJHfy7}6&~Zl+9(qvhzX1diy0g9*OAmiG+g8>5{LptBGDL;
zSR at rCh>}GLQHCf>G((gxnk_08%@ZvUEfFmjRf^V$Hi$NfwuyF%c8lH at 9Ta^eIwoom
zoe_O0x+uCNx+c0Qx-GgZ>JW8{Y(gDET|x(idV~%S^$it-28N14$ApSQrJ)I-$)SqS
zjL at vm8KL>1vqOtR=Y=i^T at t!Hv@&#E=!Vcuq1!@thVBl1KlEVeN1?|;8$!>7ei?c(
z^sgi7a1q05G?>+>gw?2=)#!9qqeZMn^{hs#SdDIFHM*D8Xg#aZ^Q=a%uo`V)HA+~G
z@>z{CtVV-bjY?RJ%2|z0XEj>HYE;i^w2IZ}R#u~XS&i1S8a)q<UJCu|NJ=&Oq=;&C
ztcYs#84=Z}N<=mKoQP`lMG at 8LN)grQYa*)AcSKa9ABw0(KNnGrek-CH{fCHZv`a)a
z>KsZn>J>^g`eZ28=-5!I(Pu)bMpdCyqtAs>jlLL4HM%mCYV@^Gs?m2ssYX8xr5gP_
zlxp<b&?}*T9ZC1cei(Z!_GIk&*o(10#NLR#9eX#nE0#zdrEXFW>2Rr^^hv2m8X=WP
z6QmQRN@<pKhV(gUk#xRvk#xDVQd%v2O}b6GOS)HjQ2L4Vg!GK`OX;`LE7E4^uhI at _
zx704qIc`v#XB-nJhzp7fixbC5<DQ9=$4!cx7MCA4J5C$-V%(Crinyw{4RM>}w#V&`
zdq3{Oxca!0ap&SL#$AfL5%-U{yK$XyME2K_^uySCX!IO3dI=i+2Q=CVjXFT1?$D?&
zG#U(z#z3RV(5MO;oe7Q3gGS4t(RI-1R%mn&H2M)V`Z+ZEH8gq?8f}9{ZJ<#;G&%wr
z4TMI=LZjoM(F|xb4;n3oM)lC>8fbJAH2MxSdKemQfJQGsqt~F(7HG65&O!Fqk+eRx
z0UEskjb4LBTcFXNSO=*KH0lM720)`@pivn#s(?nPL!)z{(FM at xN@(;|Xmlqux*r-n
z292JFMt^`tZ$qP9(5NFc>H&@VL8BsQR054oghsQV(dVGi`OxTcXtWv{-3E>Bg+ at Pt
zM$bT_-$J9!&}auVYA17%{dFYm2<i?ZLI<I<kS}x>dI?7e{e%I+AfZSYAruRx!USQm
zP%g|6s)W;pdBW#}bA?*reBmPD5 at Cg~Qn*gILAXh{Rk&05j&QGVzwkrhC&ClLlfrYt
zFNI$VFA1*+ZwhY<TZA3LE+GlF!<Wb0g585XgGU7W1_uNO28-}`mpE7woDlp>usm29
ztO}kMoEJPZcy4fU at ciHf!ApXd2UiAH1#bv`E%>h^>0d>oTZ8{Pk`kdEY}5 at l>Iob5
zg^dQnM#sQLC9u(FV53Ud=rq{qOxS2KY;*x^bUAFa3O4#0Y;-$pbPsIwFl_V~Z1fCl
z^dfBZ3T*Tru+cWyXphh?*bz252sSz#HY$LP2E#_j!bWAV(TT9pNwCowu+iDD(Rr{@
zJ#2I(Y_u9Sx*2bI`|C(5^DqpM4FiS)4B!Wh0)l`rU at Ra71O~3`DIgda14IKs2A(Vw
zhy-GRBw(b$N9GSa2?&9w4L&b=8^*op1NZ_ at 0D*>a3%m`_FYp0;fhT}K!}BS=hF4Mq
zz*9g75N>!S!Pn56AOM~M at EzTRa6_+b%O|-&A+Q*D1$Zyw-~JJ@?SJ9lfAsr*SIhs=
z?|=0BR~{dno8F8G4c!-W_RN`>{QR3SxLq`ER2FaCp2U&k49A`xr-^=MoO4s|I6RgM
ze*^q$#$A1JKm0$3|8 at 8i3F1qd-ee?KUksBVzT}<EHDA4x_s*A~Utn0Yj&gYI-1{$*
zcMb!iY6tZ9mpzX0{Rtot2mvC1XdoV#0AvC)fJlt_5 at 0-#3QPfH81s{XbYMC#8^D+^
zivpy;Gk_9vz*89agMl$XG!TzD0Av1w5Fi|g0TM6=jKR1c4a5TzfK1E*5g7N!0f~Sd
zP_c7Bwsj6z3c3aO?BAXOBL0`=fdA<C|LRQ3kded}ui5a!Ybylg2{MX2NuDBs1Q#_p
zJ%p_t at -!JkB1j~OBGF_Vkq{}7kp!ICeugBI6p~8PNCwWoPa)IDbdpQ*$t*IP6yk2|
zJn{lr$lf`vAeE$wRFl7vH&B<Iq?YU at 2gu)X*S3M2CSQ=R$q(cP`I+3sYrb%!mi(s=
z{&#!hfBNA6AI3O>9>~Ed3L6rRa~2giXVJ}`v2g%50KSe0bpmz92 at 5VJEf>HQz10o9
zlSk_C^g;yATFk^*ix!-<(BrJdGdOF(;H-rW&U8%2nGS+87X(j75In_z^EdeS82bAN
z<miJ`44$<ZiBfzK_Bh~&nEs#wNbv+>1%Rgq(w+pKLjHm56B`#WM%ZDLz}X!j1ie`V
zgp%J#7`cQ|gJ9ffL5)U3x-l3(?8#X0QQ*bkqakSwc at 85=9>$b8Bo-qCz7as;@QObf
zIZon{PXcKqiR2xOHF@~5L^*0zPo9N-l0he+<`YQ~Mj#hFAu=E1kS$Tbore6C7>CkP
zb_Qg~1nBAc$p}|LYg6FP0;U4ffNWqokb`n(kXMni2&MHBHQ9`@j7JJk+Du3=3;8~W
zc+Uf~q3t=4V=hn#cM)Q0fMTEo&?3DK^3H=+OQEm%kmUu$eGz56gwzYjVT_D{WD(Mq
z0n1VE6#&i#5u6PoE5WY<a5jkGY!F$4JPgoT6|7+`>b?&7uZK-+AUDZI;8nc- at NeWN
z@)}xxGvaT7Mz(_1AdhWm-5ucHM*F^l_O1iJA2<LU1P%dz2R_0xHT7uq6KKItVF?XL
z`x#p5B*IRiwx7dhPNSx0Amv%;<Q#O<h_Lg(7iiZnA<tLfF91g9`66tn3H;ZP`y24z
zLet+N&L#ML575u~Tn4Tn&#Q1>gBGsi37Z?x#E)qCo3MaeX#Hl$@)Pv<4_M~Uu*lnx
z at fTR-udv%YXa{QXCRqAiSbQt2y$yA2M{nssPcb9kPH62O+P at 3@Z$LM!^*-v*1N73K
z#KCDc&Prm#Ves`8d*Z+uM+R_wi8FXE-l*ULe;%GC!i)FFKwuCs7;p!M03MtzWGH7d
z@#LhCVVnv0GTbx7n=^(C=k$`t;6H-HBR-sD!f+zUNcj7529n27o*(BV at dq#9RFEe)
zGf4oal#BwN1fJsLlR#iJ5QK0c$B6`^tPoBW5rKvRVZhVC7|t*f&UunVa3mxW7z at 8B
zKnz3!F_3>8AORl>#BumU1{x2)1kgmzK{6gl0-gb$1(JaYz(gPgkOQfJ0!ZU<i4yXp
za~w$qXeP&*Oadk&FBQi`rf_UX7Uvx at l{1J;<BTWSz;w=0k^|Xh0J+E`4^RX7Kmjll
zm<2osJP*tU<^XenLe5xH#92x-$iEoS0`q|Rzze_vj+`vy*pWrx^=P+$=Qo~&`j00c
z&je<TC-qMPqVeR@=<(#su|Ujt&etD|w=vHdZ`0`v>>qD)&l6ZU-qvM1 at ZES@*Jpuq
z<89sG9vSM#tAgd)5<j~uc$Di32>=4^BqRukbvi<10N;-EFm}B!1>3bQuClA|-D=m{
zyVtJQN8;o|<WBX!@iCk-q-8P2)D{UwMmhS-Uhw#k3hit9DqEzn?Ops7D%uO^pROYE
zh$^yYY!&%DvWiR}S4B>O{}ng^cNSm+R3MJ^r+4q;I7I(yA8$kSfmR+e>ao0Me|YP<
zzTC>AE9&W7U{Bq8o3i21Im?&Zl=0!^K>c5aKL~mju_F%pus)t|;cel at iOw=lFqC(6
zuqmT)DX+KkcHqfCOFopvu%~xq8A2HF#D-la!iS@$aUllgsE0f{v_9DCkB<F-cf`AI
zsr)p)quoQEZ_i=tOa1xI79K^=SZw~3ckjm&j-#H|k&R>1kGJi|+gW&;3x+vX2Fgx{
z&S`z=uTRedSeN|*BBAp-+7&<Qm5pck at faxm*^qjRMD#&@x&|P82 at cqTUIFmypU&d*
zzxH=8)f;|$EfSKwmNv#GAg%tajUb%04^T^ep<PQjMr+H at T2~QUKfEi`swa9l6+a2v
zZYz~l&<2gE2l%AcS~$TtPu=f5a7$P>&eZn(sCb-y?qIn2yuMI6jX&zv|IXb)-B#Ja
zZl%tC<?m(P56j200p&f&{|2$CT3<zCfce0MgH>er`&DGqo+`5LTou`Wwu)@MP(?0+
z|8{p3IlQ at w=m8f%^+pvb-c&`td>wuKHS}>ng7}?h;Qvz<`MMVT=T#&F{%gSN!6$<k
zoU9^eK1H14RmAgX75U_oDw6k673uyE=@A|V1OYE@!P at KT0B<+;4<Va=sUm?uaCa5i
z+)+iuCZuh_7z4Zm>;$#}n}IKF){<R-$aXE6Xt$PJ;;tp#4r^hLmVZf at F=&(AzCnNA
z(%*Udi^E9S_b(2szTf|&X&OS;k`}-*YAtzAyq1g^ha=zrFa9JnFRQUqmiD`U=l8=e
zUvGQvUGXQft%s_Hoc*cMVd1WMPwm{W?D_}Vm6a#P*Dp^voh)*?y7jf^!?JgJ-u_kb
zqMxC5!NeNf)Kxbx4u4{_N>%lmu;7LFPvyR_S$}2L)|-mI9hjePqxiAh*Yh6#<x7Q4
zyU&00{BLv9W$(_pwAR=8>Y}xFt)oxXhh#@ASTrqYUe;?XOOyx8XZ at f$a&GaU&xVe!
z8|}V`|Jt;-;@3Y-(mS--hs*BXnUvD%9<l7C-7`OAMelzh>C^m+F6RwTes*tEY<RM1
z(aD_SbAo=!e&6YrbG+N at nru&at)8=sXPTDq-q3<8?-#Fjzp^prnUSYLS1o&H)VT#;
z^`1EMwS8!^UvSalbNRU;ks)~4DdcG$dL}bLp56%^VtJr{&^M`4t^Kl=<t6xwj~=r;
zJAC%_$Nqg!Pa|3Tjl3UUMbldSw^Dy=K5WOc at XQq&hxS2Rr+#v<V*-*t=&ur%x2Equ
zE)>xKYZ>~7{8q|Z`#M`(U%!8}k0aJ!>F1H6nmW(@<hAa%-kEWJRN5WQ*n6>ic0 at iS
zz36T}FmJ)UDL>zycUpW%xn7ml+R#`~^3iXno-4nzS31dWbWY~^6w#dxPbI9rNuJD@
zbUkNX_N39_H(nh)KCVpCWZwDhz;AZO&sh2oNB*ceYr@(JP10vfp7UFOj3aZ7?q0pn
zea~w at a1+;*+;^$FRpJ&j&*$i=)cWmp8ENZ#GBSRdqnNdA+vqPJ;~bn(vdsPL^=X$^
zIk?)`3MLkPG{R at 5YT%Nv81*;2H!7mLL=B67ZW(+|`s7K^lRIh-ngb`y_{8ni>UAGw
z4E`*$@%Dn4n#zi=)OUm4sLooq^n8;GbK$Me#~rF2dpJAolM}I;m8S-DKGQ^scbyn|
zHr*xUkaBtR+sc<Ufl7n<^c36En$J&}JB>}|j@@-X)oic(=DoHd0#WwRw$rjzKc9|Y
zb-J+P=ux-#em0w?*4=xrt?uhn7mjzB6x^mMLymW>sXfrSQ0@{M_<4!h+egzjS;cLh
zJh{PK at p(z<yW4s14@>*XL8B{Z4auC)9-X$YdBdcACpTpO{F^bPWV6KRmaaK)y2- at n
zHWgjqnTq&s)!tsb=D^3)AGIraw|1PUa6FW?rKerFrnEqw(%bINyLHITKhx>sqOSwp
zPx)M(s=ZsY?`3m*m*?wY3F_x`>57Xr@)pM(7YvR^nu<7 at EOnFD-_&26ozmRBeo}35
zysB|fYSvG;&MCj+pHnurw98MGc5FZ8=``i?m7dzhk~<lVL)$Z&N=)g;w`sDzYu98R
zx~f)|Ui5o+amS$rTY75ZU%r)?E^L at QRru-TX~GkevxUbePZA!RJXv^jvPxJ#c?!2l
zqoDOs*XY_N-Pn=AYda-<-TbD~&{j8Zz<qUQ-j!2{%i0&VYdTM5F1ue`s~UDFc}ou`
z{fF>UWq59?I($ZIet1r5LHP94>EVT`IpK3tXN1p5%?+R3o at wY!I+>?VI<>0JG%b7<
z+}%m1!A}a$1mBg^4qg?W4!$$V3|`h)a!MYa<{a{RY0-ttD at v77Ewrp7sfHWgr??$~
zy32RnYQIY~)gG0(ZRK@)YxBl>7w_w2+s1UcskA(*onsW<oU9i9I5}T<V{(D;`sC at t
zYm;+?S0~R9UYVTBHP>lZ+}|NHw7n at qJxiCht9=@8wog8E&6H)^QJeLiJuR<Y=~n7J
z<8^b<g{bC0{=TjnoubLxXVoE%?9^MPt(SL{xHrD_<8{w3by<oJ4rqTZ*F?KGdI=SW
zTt6<^c<!~k!b9C#+BGAD*OM*?uO?j-UMpI3d5KAKS!$An&(l?3R;<k%W3E#U{c(qO
zl{r+(?edZ}nCF&-x4*4iZBDv4rsHiH*F4_%daFhe-jSHrRNb!R-upmlcxH#zP<mvZ
z;Rsimck8e+ASFq$uTwp`e>&IFhv{@3Ua}g^7Ym!JO&5%%_vD|MTeA0cEsR=aHcdX-
z){;8LTwv39YgWS1A5FE~*2FZ}Vus>klJY0BNgiI>KAm at 8lNGff(Cc(l)sw at 50^L^~
z*G%E{THQ}hP$~{VrXi5&P-rpYoago)kgdLTc(*CeTdx*yGxKi6PdjT~pIv9FbZ;;#
z-wJQv$ks2s1NA(VWQ=S{%Aj at BwR*`Qqx)&IK&iU6L%Z4>8moTXdzsEe^^#e|#y8XW
z+_bz~Z-=ioA5f~yUPYgoP3G^KOxg+mKpSXvS*LHc${Kivk!;!?FIiN}+u?>LFXzaX
z!^$V`C8al+P1^8ziD|m~Ub55XCzPsyg5s2G+(}fI=j{$F`OWcZh$DksO2{LF9%SLA
z+{t;jP|v>=aG|GhXeVA`vu;XcOMEuMr-YXxT}_B|RjX!718?pYx6;GA`4c~`HrxZ1
z*5!TN8t4VRXn%bta4_#T_)Shy=Iskkq%v|_X#Es+4dywa++He^uQKl|$lR(!TbZV-
zw+74Dc#yZjoUw)5P2>1m;`HjWRK^1S#9LI?x^!9x;bdJ#-mL at 5Y0wSiPv>^{#Sgm|
zV#xzKZZH>q&%I0Yc-)dlyDlTL<?Lj?UA0*&Oox?s%5_Rrdwlk(TVKTP>zwO5#(Y3-
zF!NN6=ARN$?xUU|N$F?JA7q8k+ZX;>Z(>?FY<T03M=~|DUH6ylcgbtuWlvc=ujVxG
zH_g;V9l8;U1G+F?swUH^tyFjD!b0VtR~9O{rEbS~`|6Un{8qPpX#23t#ydHaY<0Zv
zj7RRhX>9DwGVIq(^*kD#*>urVz2Zkr`th5l)GbE0T5iX}r;Uxjtt<(1)$yLz99TT>
zuyUbi-O$F~I*)a&ZfOfTbg7DW4`>fv2z2Ltp-JN&I-I^H?Qr_)W}UpjY*Sok%G$)M
z<D~P>A5J%HacwU-z%lYXiagjfU)ZEKzJEu~y&LF0t}XDfyq7f9#x<r%HKuQ7rnJ5t
zzQyd9`BU{(rDuZQ9HXJ7VCI2gIqIUbNk06L;wG~uW0=|NK!dsIBN}%F;zIWso(YGQ
zpT>qv<#seGzU}a?t}|^<<+k}v<+fAzfhk3$pm%kt&~;*+X-BQ<w;f8Jv)6&2s_$i}
zqH2Q-ci%l~X!px-Zu0v2_{KW<QMF0JGab%&DT9-#*yr_iL%V%pLr2REb(yAQ)n^F%
zn3Jx!;Fr0$Es$UGw5yVPpf+nsn{G&g>9W-A**fijAN>@@J1to?SBsi8^BarZp7on#
zywfh{Ui6b2 at 3f_Hn+|E;yV at vqON8Fe0b17!C5JTo8#)?}^TI<G8464*YfRJDrnJ?b
z_~NTtzc+rxn0>W2tMZzuz>s1}G(77yys at EFZn$AGaZPn<$JPVd&+Y}fX&eIwb343#
z<n?Gu8anp-V2qb?OhYpZ+H}g2aIa-0;f)IauL3`>GfmMbX1Qv4Ln9S6rYZHDHpJ;Y
zobKkJOG8*aH_R`C7kqh!f3EjMuIYgGl(DYBrd9K$;*dsBlIf~cPp{2d-K9%!=qOez
zKJ;oH))|>a^D*|er*h4Q(_Ox}tnkmRRjzK;Wt5bn>{3^yCA>qyHA9A6zf5j;q`aZy
zl|kGwmk0UhqO6y^?71fIi>I3omGU&OD-(3m5u2{~<Z${guS4JaT#Y5>%L>1{wEyUo
zbtYA+s!dm&*m^kq_8Q&#nxj)HYT(z{5R%o{P$XCH(P5rFsL>FN1vIaXn(CS|RjRW`
ztzTtp;d8S(b{yw9BJIwiu$t5<`_+5u3Iwfen$pIG=jDpMM{XL7M;Z**b;^d0^$U%L
zyOU}D#$NN(eO*(2;a*&rQF;t at 8>&k$85+I|b(zq(<d=zcWmEQZdmACAF0*9lxSFGR
zZd+Aeuo39xXA>*Ga)pWNhAVrh8{})gD at Wc_XuR9@mU_P2dv>z_M4isI9Xjwt9n6~Q
z#G99;eoxfOR@^<De#`8ap^G at 2q5dT#t)boK9MGz2=e|zs3t7KSG`T|d`?=gU*9+V>
ztiPHx)pcuC-`2gXIuYA-S>fgvIgQ(KI3s^uh=SXpDbD*;qfp&DpfnuOl$^a`dV<?w
z(((?~YG1y)__41#OzEd at nTDS&Z-0V&^2bD8uWMV)Rn at mgZ<szUIaH)=Fmn#1T!m~e
zG>-Kvpn2>I<CTAvY54I-nxWh2h5TOcUsBq*lT_{ABet}e@)|m>I~;8{MMCC+qiv>W
zDsSE2R44YWO#K||qv5<SyjL1-Y21ys%;+<nY1GX<bQSU(kQt764S2WBlyJ1gG{u0t
zz8YXEaB=j^Qcn!Y)cxj{q5k-4rr|TM%<s%5Rmz##z%^aoL)4#n-%dFeuQZxFUNZLH
zRdet9EixLePEjB9&Qqs^EQm6r54U2RZ$>{e>J+Nmx~aw$Z4<cnYyB=?_5LNXr`B(|
zsWy;j(q*V%`>JkTrg6n at Q@O3Rem<td>6<x`3hr-*WbfTU+Y59`-VcY<n+v>KO2WNc
zEPd^=^znjPzt#7~qz>#FnpV)`mub9pH|@Jynm4)OwaKf{|6FG1CfAv!p5TV*6pGyk
zw4bBjd9+?0^mqZ=AKI{fKF(<mbZO|&Ce<LG(cCKMwxey$)HaabHgamsRrufOPNn&%
zT7%Kg{Ls%{bwfX!@%SrV>$#>t-sz_OrNe?A<ZJC`D6{5(_VibmXZYR at 99(0{N<sda
zrOO`nJ>T24S<BeImzAPw9h$)nABMbNm#}$1b=l_e+{=TI)`pH5r;T3g6>nSn at j>*x
zoU9bCN9~DKrW&S*y!!;N<8b;-ue!VqtwrvouNAE3EedqM-0Jq;thW5!1+BH>)z|!z
zkEWY!k1jI}pnc-U at Y*x0V6#+)<vo~3&(eP36vPd8%HWQ{n&HS1vtj?)Bu9}~4%S at p
z`@Wr5^~AwM_q=26O2bX~hfMa!vpKx`u|TgJZd0JQ^M$LjH8XVSn5!m0KNsq9rq*-s
zHzI$OaVJE|HG69p&qFz<NV?+VkgP==XG_0XK;7OSs at f=}ZGCo%->15bs-AJHR4wCP
zmOSMrA3y$s+M;Q{)5ZDXTHe|~XLkG?V;Kv6e2>;;htfcPHx{gg-Z!?(jaxd|vEavj
z);eP>u+$lP+uu*m-*|nVR~6`vF&5+b*+}7xaoMNMbp<t7v*z>mYD8R}7Z>9}8~TZd
z;-GFpLq~qRq&*~y?IZg%iiVEgE at FIWE7@@FHQ%p_w1`t=SYevc&{6QV+ad4Vly<HA
z(Q?y(8dK49^w-cD&99q~w>F{avW at Szy7k$=4&GGIs8J{ma*PcfIVV$EIqB+!A#&R>
z`8QN{2>YIf>57nFncJbFVwI8Axz>53ZvC8b!%}#rz#&*)r2ABaOj_LG{X<GmO)9Tr
z#|?uc@^AW>!@Ik1y=S7|5yVZUaoxVqy4QS>rKR%N9-K1-*Aq5%aI1bzQJywqe5%$w
z!EOE#*E^c2RHj88w2ob8x$WNXTXb-CiZETbUe$V}qsT{BP1B4q?@Q#BoAP-3CZsnW
zUm!;xA*Y+_1`P{3<*~M%wc!IL$O~iBQOR!yl#RzPOMSnyP3KkVF6Qmhyn^-PSVNlz
z`t=HPYtpSV-fErNU~cE6v>pgE9Ku{0es;1jH$-7Dn{pD{&Yl+LYNo0eYTXk}nzTje
z2RBX>xhLH_oL(b~%tjff)yF^fGqhY*R0RhP+1HucVOXk}v9C+zdC2^WGUeLYQ+^-U
z)ek=8EsUi7;O{!^p<BOXHMDcM#@-gp-&s1YS)<MS6k#8qQm$>UO)I+XEl#;Z$K<m~
zexJ~~VhlEGaIK{p!996Ow)Q at 3>|#h7w?l_?bZ*Vkq3_9?s_!XbJL_w%W@{6=T$OX0
zbVKSm*+txojVj-$#^RApUYklvxl=H{rH|_fe5}Tltxf5r>9e(U_p)B)B7AX2ARprs
zox4RNn`*_YT4?)cYq?|m<eV|@h8x;3?!0+G+j!>kjFC;32aTj_N;+So&-Zv<R*Y;y
zA8`rE(A{#qVC-$3R$^xJ*EMwL*Ks at O*oS$ogJV>m#N23d+Q!{rpRPFMHzmrvL%GHr
zsZf)UY~hL8tff5~h2cg^Y(x87SExMPR!wn3`?2iAUhg+kOw>jeURAsY{|+jv_w)Py
zp*p4M(rML=kYz)WF|xU+!!4|cPs`yp#XqaqIZjbJUKbuU6JyVeqA+77`fPS<c2x7>
z^lcxoc9*Sqr%0=6FVgaQQW?d^M=}lT&N}%$CzRKiN>(J^tL<LXQv7B3Zwu4IU-C<J
z(Iic_?MV8DYxIl7+B4m8W1xfLV0)tBKF2uh at 4-~|$q8*bjjD~4&i(3e`pPGCI;6=)
zn#*buIhAM9JQieoINk1O>U8(Le$!aD&Ea%gQCp_rZk@|39eELr%W|f!-fk-4ng^%;
z?5YuYy-_#7TQamG|4w}IY4g)c&ArG(V|Ggx@}0!#cp(*XDX3g5{~~1VUYtH4Gx;)=
zMR+_y9@&*RN!6N&{f)%Q-0=8k->5QSy)oyFy0s-MR at a%7+!or8YP=hdX%ZU`G|6$z
zexPK1k=BrCQjY4-wk5W;>v`=aIj_yc at LHdHrN;E@=I at l6+Qz$@^kL at 2XR+t-yj!Ve
zF}Kb8JTF|6tzM<s&+85x;!=8Kqv1zg8nv6twZ*mES2ULuhiE=m<-EHZ^gZFsk|FWj
zx_jA|R$n!RA9|}ZeOl`&+43GgiF$ZQLf-PgA?lrxsyz3QNvA&>p<G>K3ODT2q|W<W
zU5;(*2g)_7))|H$Oo}y~>WX1OHcbt at RVx<H^A29DBN?z~&Vshq0fsL1*&(;;E*Nfv
z$yd3XGSSX!qkh{VTVoDRGhA(nHQu3n0H)SqS0huY47i?MQ?vF9jd4qhD)F~gh2i|r
z?A0bycz)YZg{pmM=21J-mQ^Oxv|+8V6H&Xu(9=4|P_5(-zWA}7;h7@`4W at Y2DD#mF
zg9Kq6xEAefmm1n at Wvg01+d$i#UPL)1STALk{($%`@h^@#Qkz`W<}~j+TsvZob?)d8
zQ(Dx$Or^2+d}iqt<kMc8wXV%6f%X3;bGY%&7n!BqY<|gW+nf~WZ<(cSwaKfY6GLUK
zY-ua{(XBD6CsUp;9 at c?th8{ZiIIU<rwh(Qr+o0MEopse_t-1H^Hn&4ZcCNXXlxVnR
z8a(l?Non}-NX8lyt+zU3PS>!c)oV=)lWx~-vo#HydbVtGk?x7QCv3^~jXX!c_{O{U
zv(B17E%K7qg>7WEZ!|b^t5qi5M#oZm-BA2xqtiEvg5&RQU2|wy=Il1lmj?d&?smgW
z&&<=Gnc5nc-hZ>v=@&)8DeogGx4irn2fghRe;fKq!QI6Nz75mVs(SLT<C^h;<3hi*
zS>B%892Z~@;86Yzby0}sD<@NGz7g)W{2PwNeo5Rh#XrD*LX8RS*4rYr*iA at 0TmHRw
zw;B$5W+RP)_w%p}t||YwZ^KQs$h+ELYMGyM3vJLz+YI{Xt_^F%nugb++k3X0lTPJ`
zI at zciX*gxK%KWi2_8FyUQ_qC<@Peq5bvcV#hn61<Z_gSQR9AYZcUT<kBHeJ+lx0|J
zn$)<zO+IYjzOYr at b>XW at _9+i_*JT<8*Ns`-S~qk>tKa0tSME*yt{QulH7`tU+|Ydf
zyB&*a8~6VxxAw(xE{=ijhE`4H*(IiQDvNy!?K2iVrL at q#Gy3x_tr}cgc^yh|gAOkr
zR;DeC)EJIyGLSBH&PLB?4c9f9b2>azsJ%_ZbuF)5J>v2J)1*0H4~sXvslj!Et#Zq8
zO={8M{B*^ex-^Ud;~I}Gkkj=b&7)+9uIe*Kw*hoc<#~8N&kM(Oh-IvB<gTaVH|(t@
z-rZnsnfzV;Rprq<Q*6rFf at 2dJYXeu;YZjsp+6UR_bc%PLpY7e6E9d=So8Dly{a$rB
zQeiZ-7GqDhUUjkH+X=0$nT9VylDJJ+!|wDNcKOz#cWhgED(=NVj!>`Jk9FM?q24y#
z{=9n9W34(|!`OxjI2$v09mspz<mvlfRh?3AOC5yrbcXVl$&zl3qV!jG{_>+^wCjmR
z-;pa^*O!>jM*2N>c(;x7<Q&D0!@ILyt<73>H#LXTF*%1F%Wun>pnB_gwY9ataG$OP
zF|S<Y7!?Oozv6|P;tf5u$(6m{Z}2+Ok1gs5EL9!%zF_#Qs66?e$<OWanCu3gI99Po
zSG46;%L>Jw>wbo3{3K6Zy{_avlX_hpqr*BP{g~o{cbKrgUB=t%HCSENE;C#~y)Op3
zuD)ezUfpE+$=-NfW_T8Ev#B`|dw~tS=+2T1S0yjptHWq+8IS#hoQZe5!wlx4*Hc;-
zr*8pu(M*W9w#|S%vB_giM4)^4O`R5U)LZ6X)Z?Hj%y3NOo^&bD+pyd;eN};Jg!-|N
zOzeqic~5&^=eB7|6vmKu)e>DA?|k6A6kC+BvFP>K0ky}AJR$D~SP$*Oc#pj##ZEeR
zVt)M?c5Nz9mW;uk!x&dx at n^P1#oxVxC+;_88jgi{lzzWMxyl^*9Q3<8?o#2bS*@Nr
zUd!S1A)_Lbus at +(b+1<0_}fOA;Z`j^mRKWe;SDX#Z>!Df?bP7D1m?vHE}59~ZLD*@
z`luNS*@J6^w~A|rT at 6vF&udB+Vr}Mm4s*kCjQ#U;3wS1KXSa$~Z9n=M?%~=$!}V#m
zCg`rWMUFMa0lGHE-qF;&qJdcj_jXhp95o-SIxpLd45arQMrPS&<bUK=<fq_`&>B^3
zS|iU}8|L=Wf&EyEr6~>;wKa6Sv at 7xMk<Sb*nm6V(YbL7~M($a4RTIC;tg(Z>&VFb9
z#{sOtPbM{8R=lDQkqSF&vo>G%&P}}8uHdzJ1sct#B;VaKy=T1jxy)!b;=1{}RIJH5
z6MHq28#?CeoeyfmFem+u*LC>+;p@%An!47uaZnL3lC3fm(OPp#J>^tW5v15UfoQEl
zLP8)i)Ix};Xg0|PsRJEs?Ku>72b4~hQfqA+ZA}9N+gh|*tWp{gLfSeYBBHg{Y%+;V
zzk3Bd at B3ZX@B9A9wbx#I?X}nVtmnC(A+m8X>L?=P#NNcaH;T+<E-ut;<)_5`965t$
zIa*0^jWO&Jv}M4}Zw;1lq#fK0^F4ls;yh`a=;KLs!cyLaNKbbgd+D$y>ebV+HyQ9d
zkzS=m9x~whGu&;v!NpfBT$omNh?{WgV=nV#0+)OuiWBohOq9Z;ore9L!E*F-;0xK4
zmE2=^o??0Xs`P`Ubc$jCZKq;ipZvnggcvJX+h2&ja)tS0oY(U9HNM8)7p5!sej(Zo
zI{TWfK`Oou%%+Hmnq(AaQ}-cHaE2Jeh)_<&2tVR~%Pbflly|sbW=JY8=s0}B8uQc!
zbvFMpQ>VD0-bDpGNyh1drBW~DyF{hRQ)=x8#as$6NJ#Ss9dEH1XPjd<*b(s5T;Xpq
z-wEc%Jn2}<-r%JCg`#9nXBVz`K1^pdIbTRAyT&DuJ*50j at I#U<Y!P!N47huZ7j=c6
zPQ6KAz<jSg`6_jk8uqK3RM*&~ex1w(#wudoGK^^o at Q+Mj1PP#ndqQu;rjdE`4s<M|
zZhRqn-Gy%oeXkX}=k|qFCmsBMTHfxHg04Qq{{b at S0Y6!3kt$=RGtb;MfqOL1mb1fD
zrA`Jd3zRf;N3qZ97JX-Jk^g$#12`Uc64+*8?g7vXGx%R%Ww|n(Tjbo&Bl`_}N4%q$
z#lB~q))teBmMBjEC+Wpl_lk4aGhBw*)RzwVCKK37CKaS*6jr)U(TDYKXX^MJ;^mmH
zq?)cfv)7*GyjjRkv$7s7Fppf_Jokiq-KLMN+sv_byN#^dq)s<qzL;MnO0n#wB_=7I
z7;!=viuIx(`+nsk;vD2>k^E{Emw~nIOX#iFdXWVAD at eZL<QEatPkI-1T^L5N$64#}
z%lJahcj at h*ce08I(X(?;fIk`5N#E$ky- at W`B4|XDv!p~>^+m*F_c)XH1$~&yJ(GRN
zv+bfp?hCHWB~)YI*DBBRa&wK^DEGGq1W|6f=`L5gif_R<_JZb^f$L4FlXf1U3#sqv
zr>LC`vWb7unVMjX)i}_BOTy1I!G7AKvDx2K!ShSZcYC){3&>pAr0goyvZS^a`N4lH
zWro3v|D1D1C#~Q_OY{3e)+l<!%Co)q+AY1?wuRmlyeR+%KFb?>&>HCl{nzT4VqpsJ
z<|=axa9HfGPl4Y?AAR!McIezd)95tG_v$EW0CKgl at kT{>%N*e|g65W&fc;sL?;_tT
z_9k73H8UgeFF^>-jX$B|0M`3y)_yy^0 at rK><kUY#y5&?4uEV(A at Q}^@#a2w+5PTc)
ziy(xY1#vg&osv(~_9J-bB*)R_=lI3c70~!kI+y+7 at Ym-3wHmSlx705vvMBMIAcWT%
z_D`zHpe)<XCGZP$&sGdzPi&i)fqn3IVjsTaBHu&ZE^b0-SEIZ_)rR}Vl!|TQf0}Rd
zGZ(m+6!w~?4rfl5;s)0AanS+Z{JM5F6ukY{f)KXXdXey?6>G4r#rU>;^xL4V&aw+!
zLb((D>{7{+&Oly%R<~UJ2V_(4;OM+g(q at kK3&i^M)@dtj%p`?_3GlA>PX+(p26_5#
z&_ at X`dXfZdu}Sh}!X|wC2=69vqG$12Gdc%&o`UBc><#M&Ye%>Q^i7QP-;fa&B at JK=
z`Uj`xjWDumr}YDrm7(lH^9Ftj`?jVY@<W1R$dSO}%xt1we1p*I#PPysl;4f6lSCV{
zcM>P`ZgM&+`7yCyDZc|Ba7-C)>SC7X-w)aH-*LD3%kqAll&m<5d9C993|XJov+9gZ
zPF;`9{cjmEH-qkR4$HTONXYjmjp(8(F3>wc+dXT#K20ugh9>c1CP@`{@LjubIWJn9
ztmtMcwSB?_q{WK<NvWXW?`xrtX)fk;;N$mBvVxC~)@H&EU?ci7z0I>Y0OM!*Kik^)
z85{q_dA1ld=p|0<7YMni{J|Q;yuH#XIrIsxdj#7 at apZj9l|w}4n$P39)=~FXOKWCn
zz9H)X*mqIV;s04<R8_1;=RN3G|KJE;YoVkKQmOPv6zg0(y{0Dn(5VAlK{?i{N&ixY
zxpZbih>??1f7oKE0l~56GczB^wa?Qb{2Yau(0^4WYf+!!akQi5GcE$@zgdU+S5rq#
zhN+`3*<^$Ko5w-Fr at jbY_<2)~CYkWXrl#a%lVLq%C)0&l6PQZHxdxeCEqa0Iv1WZV
zDT6nEY%dfW0<jlVR2x at RQNRUMtijsdrVr{I(XZHT(@&wU^VccEB0YFk$iu(rm5<x>
zLEmd40~FWjYQ=S}3}?cRlN>k`avNm*v5l$fBW at mck#<=4fwl+vYVcTreo=(>@GX%u
zsTjdL(1U1JO)xaNR%8cFcn7$e1^3XGD1T*`4<OemX_LgS5qiJ(fvM#&smiJ1S>~(!
z5^5;YlMh|ZAJ%EoybFQ?@SlH%9$T2A{M8l at S~hOQuy8GPg-KDyV*hhkhvUUv<=43-
zf}EX<slF?7Khk47=X%pA4%k7*d5ICc{B?51cH;_+&{lPtwF?T$in$qcf5ds*RdpU1
z+z#*_o at Lj;tAHO7{GgYXotT#~_eXjM_MzkhEeE-#=M3A2HW6CZB}$8N;$7fhv%E!;
z7?*CH+SYPgxTeR&Is^rvH}64LQG#{)Jkj$2=L+Q4LT>n8tu?%_xTV}+h at o~9-i at wR
zz9W95v?$V(XX#$bx^OPu7e9ir$U?tXm|S%Je&{PuPhRnL(X%*rN(wBYOXmJ;)V@~y
z1 at qcPE}k9nl!bnN7Ce at K7jbg*+mn5u$M^%-VIJBz*g4Lxv2&T<508qKQ<>Gk1%Cox
z9L<+=r&*U=Hpvw$FQXx&akQMRp_2o?QSAWj&Xjyl*Pe7(Ujm**+Pehp&Eyw>-d9Bm
z%6hpOyR^1t?Da-iAd$Hh{8Gwz%9UF^&82pHvj_Z6AFiP37(eh1J-GKwE$iaM<86_i
z3Y%kqvI|rBM#%Norb$h<mbLpiZmIHLwkUR0-X9?=u!f!j&woYmKIl><UnERxau$yy
zO?G%w%j at LqcXK{zuHq(4iW)7Gbl;fz at gDMQXO`S5_!@k*7|$n8ifWMgszhm$?*!YE
zhDXchJ3^B2Eb76#;Qz^e^rR>{vseZC`Jh~%JAWMVck--)_d&B{1<uAp>=dlezG>2v
zUYw`$UtDg*lby>h`uH!%1OM=!_E-ULfiT>h%wJv8b at 0p0^&x9<)`SV1dXBvsyQI|N
zAtU`SE$Wn9gad#8=Oa%PtE}M;ehJxa1}{pqRB_QErmV(z%y0a}i(!%EY|gibWK)AU
z_lKdcb2>gvyv at 8hDO$Kj`7frBJ!3u7;$$M&J=R~L_l_UkYaVjRC&B5e5#}w00CY17
zbaS3|Uz6+HCeXYKCj+<(JS)9Z8H at gsbGR=@w%G-`DHt0gJNjAT&QEpc2ZEN;M8>~C
zbYQRrfnMAJ-6{8J@@7}48vTWi6a6(pm-a8nLdTRclZ0EIbjL$h>TuKh)B;P$^3i9(
zDS18aIf_SLt|Sf+97VfNG0dw(J0+NlT=Xq<QjDMi`{?L{zE3K1ETwJ$7q2J0vM^zn
z(=*l02axk<u(5;1Ui`zZPi9XnB=d>2LHHikYT%`{Z``A^q5GoBuF(l(?g^g-dLIe=
zDoNje at UYQ!R*LnPI7(Y=<JcjhU(!!}RC5sj?KdWWpHh|Qz5&{3Zjjb(0yf|tKc?OU
z{!;O``wUeibwg&ga*2c=N$Mx^>sT7tHmRQ%EKH_?g{g5q4bu0-(1mxPt~W%hu<i-3
zrbxOAdg8Sc7$)er7v#T*$32op5>}tuqfhgM{Gk}Z*tzv+*`MjxXCI8aN#*A|O`pv2
z=ay0Sgw-vF9I}>I3xG>>Ed!njTe*i{1ZMIMc#RJyMS))L at QdQ_1Lp8d*gh&a%p0<!
z7QFZRq)URwC)M}Z*`t85?(x%E8=aHr&<0~IL9Q13LS2sZjQB~MLu9xn7r!augx~_`
z8{^iEpls5h;BhxyY!yMC<Y|dr#{^%!YVL^sC+bFWPBHg|k^+8YI+ghVPntj3M^(<&
zat!c{TG%jD8vdiW1^NgKA2i0&=wvTLFPSGwQI>-bIdm{SAZTH-yIp_MSws%^DicAk
z({MO3o|NH{b0r+|);hvVkME8>0GbuS?#B6hk*Ozgwjz|NEi=#$Fo`JB=?%$cb=(Z-
z)>1Sv7#H{X)pE<t$1bNMa2^oeHkxHd<$f;%WSdPQy5^-%)7|uh1NM*<D<2<7S5m|1
z at 4rOp;H3!t>I+%1IC;E(-Vudu=MN!#rjqTWUkJ59w-t!IddSCL2{)piG-_DzSE3zx
zcZl3q642&tJ)LLceGA=d0+Ia^C%Z9_o#015abqA?B8zzbv2rF9-y8zg?-Zq>?rr0p
zDrvr>OH5r1O(yj!uE(r!w at D=`riPe8)U8Rp)%oxr138ebm}xDq-I0ax!+r+6fev(3
z?pAK43niamk2!LWcsX;=htKza=l3^h8P?8T<#(JXb<q*P9 at neB1ds6bNY16PbCw6J
zG3Z^JTlZ26jJ};MCKx^JE9{OZSO+J8?(BKiwyBC5Iq1L|m^ryv6af3QKz_{VSo17~
ztL$z%1N?!Vf-cMF8MPMcE(3D#4{?JyS34L<sg_G&PhpHZ=~}kmRu9aH at M|6UPlQOQ
z`%IDKOHbe;J!O=W!x%trI`i}fGDnHO3b%MV=@OhlS-hKx**t&nN>=SADwwW>e5q$*
zN&5^jhn%WUTW-)YFJ~9dsm4dxJpGip|I^19H@{W)H~1~kL2YzA^vzfEheE`-&dVPP
z%_y}qKa6*HS`;Ul<BC(D-ww2U;K;|+J0Tfu<LRGO!%S+amib1}`gAh6&l{l?&@YBB
z#`)wmD>fPZtwVbl-W2z{DQc@;LOGSm;Wl9^&$W<g8?Qc{H+bX_`&sBx*erOddW6I#
z=m%afrzj7MO)s-T_8@#oEB1m~B<4+r>^4&<Zky1@<n=IhrO*}R4KbC}eGj?v^Wgu)
z4mN(K*7y=Vc_PuL;kuL;Lo0B`)?u%t at HkHk^%P at N%xsKS at 1fIo*#*4VLC}wn=#Rh?
z&SyCeSgc<W6%#o#=}#`c+)o!@{x at _9SDD)CJ$=}NME>lGqXxQ!6>)V^_D9bSH?BB5
zPYxSg=o$T-zyO^ZXUi&IPfs&=u4g12O!6*gSe~Y6RL}i;KI|fZqy1hGIeE<91-OKV
z47PEk40P6n-;5O-Uf-8?dq_`1?jL}ypB%F40M7|MZf%0Z?1Jr-Em6{J<D|LX-~%^<
z2i!#XF5m5L*=ik=N}aEXsTe?=@&|R2=ZhcIJ5~9ao6g8441;!qwoG`Du1vBqa_W3o
z9?_2z+ZxIDXve$mc5tJ8ALVl=`=I_-)LrbyfXAEJS!GRAzC+iR*K!K%AMa+%0lN9j
zy5ZcDkpa2CiD2i;Fv=;wJi&AF>>e`cRArh}f)|Q&c<sVNnmVSIic$yi&A at -Z&-j$o
zH}|Aq5e1xjZ4Vi9h5^1>&Fk}!Rqy8Vl#6h7eOjlz4BI(gu at JgP&yG at z>6>>vExYVE
zKfe^uE at dDGTE#iL9JXS%7qa&WaZc<Ie#4R8L at v182Hd$fIR|<gxqE&V_$@#ioRq&>
z3x04W-$;0UV1jNQAGkbd;alN}tK)u#{QPC&YMv`I_oS4Q7&f at aM^x6w1$Vw}P0M#c
zFORaGvA(c}aqnkdq1|^QbmOCK{yllU#3+7_XW1!>I3=h+zupI}%SnV?O_>dNzLf!f
z&jdEPA{WH{Oz7v1 at 8WKXACVl7Euw}U7S;jV!}#FT^4;8uJUjo*5I*fc_oswS%20jo
z*G}c@;qT-gF}+rBAU`lYFAqB2sTJ6ZR`GMtS=K%>9(3eHtb`gO7}pDB3Wqok{P at y{
z)5`F<KY`C~602ed#Cfsz!5i8!zd?<UsMo2EU~jlI9f_;K*J~vW9_HL<!g49-HwiDj
z%NdiL`+j5~Wto?{WCXg6UR!dr<>Mk=m2l^(n^>zOj%?ty33IJF>1zW7E869!NyWbH
zbEofUQen3a94*37r at hjKF**jDzONH5C<aMB^4inRlRCkdJV9w;*8zN<=OW*am1DoP
z=Q8f~QJDL0!F*+S?14B=m$7>slM>5ejk(t+U8hW<D+$iG>L(F+()|mPx&)^{YnPZ^
zUBGPiM<sGC=>b=F$_)25E+?2+cNIO2XTun|?t9POy)Yw=D^1O}hbB^-?+HyR^ndpf
zB>7xOHuzGU)r?lrhj~MPcpbi1-59t_ at D~*WS^TTyH{*)+Rn&D|!0RKrfS0+g1#R9H
zU*_FIA8VM^5vO3Ei?w*=3iya#{j~i!Zxm;7ZjD5G at r_}zP0qi12yKA;=u4efM at f!r
zwU8U|o|Yjx{BkQ9!{^VzCI$Dg3BUp4H at _L0?lm14<-y#~!~LOK3=R<+wvjd3O0%cA
zai%8Oc~esw;a6Z={qatmbJJ?bIS0%Yw5v|Dk2do6se||$*bt138*DhV7(ZZNjC8h1
z_hH$PC)UqjF=LpvZ|qI*6S<J_^2DmdOQYD{%zq|GJfX)`!8Ty-YuJmolMiA&r?BnZ
zL}h3~VMG)34?UaS0WULA at L0~gFuwjD{vMO%=EYVq>}IYj?684Z?yH>Jl$fPBj=mn(
zFRLCA)KJ{Pc*?6mHsdAt9Bjef_=kIMT%jd#pC=#0yM=MBy7+(JfqwR`Sm|X2{&0|-
zIoKC_?i?tz>prZ2t>Dbph0u4bw?Lnt=^ecG@?;<A^ZOf8b*t#wn0vUcDM>-we0d!u
zwIO`5l3-WVQP?^;#7fW+W$a*rq{)6Sjl2(=gUiZtU=ZmdVz-cn``?u1Zk^D5jPW)y
z)^jID`fGyx0$`JL)+e%4@{p0K#2N$!oHb>wO+W$fT?f5t0nRCf!T#AfoQGPKwc*HD
zEuv(mw<Y_xd`4 at i{Op`}^uc86bx}Uv+qj|yHm8m at Wzxy$WHwi=fX-b5JK0U4R~zK-
zuGOoz;?Kz~9sR@(Xi}5&w{c0ZdsT3qKR#sCovr|$2K(P<^<36QMHhqfC2J$z4NB at Y
zDIThgoC*weyrow?uG!TO9Ru*$U6IpJCU{jJp4Zcb%F}+8nj7fHS+`xQRMFG<#6xwE
zaT6DR)#QvyN%E+Zem&H^j=D-0E_QnVt~4+*v^fBF!0TW)xdGVV`%RSBTjZNK-%?R`
zkisDn>-)1dH#svGk$w0O_5!iT{3^}wCvqNvr~l9RVU at I|>+koKi#T}&rz#9}f!DL)
zT>Omz_S_&_#*3BYTB at Y1v1Of4WR1My@5rf`lj%*4_MdsKRj|+T^U}Xp{2||hJ~R;d
z-zKEqgYMvJp22exvBSe!yVM|CEf#6e-gj1vpdY`Iek_&kdO<K{<%n+z=-G7A2ee<L
zY at iEUy6Fhu;Ibwk{(aOrkAf|GXQefM)`_w9H~77}a=h>;vCBc<s*`##Zcphl)b~AP
zj1l9xI5LQ55&R4D<VDp-7LW1 at z8Pq%l;`wKc3)xh`fxvViwA*8dvyM|_$S>j<vnQU
zL6L$NgEsb~jelXR?cNuauw#S0<>BpJ(Zv{(!#AzsM+p{lwwH#@5_Iz}u9$y6`DXcb
zT9eSzS%|u{<@b~`OfJXr+)q7ZVas#g#Cbm>$(D8#I^V-&E*AfUzStX5zn<aunx;y<
z0CqpML|+Db#3##g>165>6M!=la{TLas4L<Pl22 at j)Oos6a9j`mNwnheW=0;?mUF)N
zw(4L at -Afq~W1Vzw6TOqt+f>wfrakxb<VTgI`sfH}?$z-5TOaOp4IcrPx+Lsk&iT-Z
zjGUbJdz%V%Ep at Lxcz4&_)v)I)4&x~<>i&9z3;rl?uyns-NcUG67rZ;Kuk-_jt at JJM
z`IYQxdZyrU|0h%<+p8|xIXPr~@p#DMyqKJQp%eAM3%gZR>)1C=6J0cL-&Vic++QHW
z?IY`sUdG=?<R*a^&RtEXszS$e=}+r8qMO87-U0dyySBN at 9Ifm%*uqrWrm!>pt$BY|
zrOxxIi%)VLmnL1WN<HcmyDmVI*P~v|$W8lh1rVFociQW6|B*@jcZ691>-aa3AE at Zt
z$f;NB7gQNBK9B`(3BiA~(%CzmK9A&9+n!?|_u-WpxM$q<L;KVL%HP!t;Z-0<E`xo?
z1fIpwN?oUGBVH`L5M8?Ra`es`IjgEkEVpsRu(45<k8r`|{Wad~?S|C7nRvDp&-(Dp
zif6-P&)V>86Hi)gw>`&mcFD_s#ILhv32VX}yPha6>*i8Tz2c1U&h&?s8IaMM!CRc_
zlH)3`2#3D^Pv8zGlJnYPXc=Xrw{0(KI4p`)M>RSB+!b+3zn;48B?Askom{|)n=N-V
z3OmN4H8Ozb0v(pEa>dA3IjZf}kMTRy8O6QsZi5|daMUbi*D=#O<GFXCj|rl_7w1tI
z8&Z#4s}Zx?dwSvH^*d|hHsZZw&?{zPPeS+8Ae&_lTS4%%Cdc(<I9pQR|Jx>JuYhk3
zarCmcp~oX*_n98HmdYvRc8=xgl`^^;c<E|79JFwrrMKuFZy(bx(W4Eg$r${(9lTR5
z%GR}c(=$~LQ4(l2uJe}TeuK&e8=U5lgt%5Np6UrM%CnL2n3q`wth3FVsm~+NpALbI
zA?h<Rg|H2f at LVL#+YDbbAMp2?r2V|QhSV?K!@2BCTus*DE?||p2bg))XSnsO)0P08
z$Z=d(;Q9lx6DYPoUkTp{<?r-ff`jD7k at 9pD&)y}YessVlEIp~*MnAjXNk2RG9(kYC
z^8>LrX!4=n0B#US1q(`Je};_#>QEjMc&)U_BB6WD#Tc$;?KXK?JGUHr;T4==DU`#O
z$VLhbl#%GT>G?ePCB015Ew at JbYd;`(u`>iT2YtIII9Ps~D~CVAdC6f$j(LaOb)l}T
z*1eYZQr3h`#KvIOfUrSxw?P(F-6?qza&I|o2-nULB^mB#DtN~6CfH%EtLcj0zQPK+
zR|mRxdg(gFAiW7bXEzjtUJsBwx at hq|!4yKfp1kPy%P8%A=CP!XPRU|F(=$(7RLe~`
zQ|9P(&k{UWIadH3>(Z~rL)Wm_Pw+3E1 at he?I#ALM8%R5mX>Nz*Ucvkui9KY?s at VpU
z;_2J^_}L=@mA-$;8p$`fzY{qX=_JWFE$OpsnE<RCPfIUzRbZo|c}3*>T#{77Em;oC
zB#q~EKj&F`w{N8O(pXm}$<u##N}j$7-R1xz;~9aKe*Q(gm!6KMirw$7CFj80`LvlA
z{e*a~mZ_w-rCWG5V!z(Lp5PUggpYIEib8g)VZeu*i<JkH^C073A6w(&IFW?;NwA?B
zcAv4NoQ1BOYp3g=C(_P+RTp2uiIw!v=}N_2*oRC6f5wO12o*W8$#L^Y;sosLZjs!~
zI=-9RBof1p5Au!UICw at o@(3Ty<PJinll#pWvtc6q`A25fl?DA``U=ihLRn(v6c?5a
zns%h}DYZ7yyGE||1Xe4+UzYWS95?S7{NB9h>NmNY>DAPg$mz;?kyCSrxZ;X#!D5_^
z`LQ?Wi<KMbP1Fy-eMjg`%0Dni=fbYXae at tQe*Y=(S21GHck6c6Ze0Q&t0MReJ^Mx{
zY+CJ*2VxG&smVI&p5B^7wHNl}pia6Ua at PkV$e*N>z76^7aHzY#=A;?mX9v0>Dt-eG
zafaT>9K{)py;|`*`iT8ecxFDqCY}ThSlr at r$e_=NLwX_TLG0N5KXCsD?q`kNKaBeb
z+&?sSKbzP_B?W<24q*Shc;r(r6)jWQ>!h!$K$l*8TI_!QG+m4F)neahnk|lcdK2XR
z7i*N<Y{<2*DSzzj=-b`W!N~#(kpGhErxx#i8FlZ-0WVdkyxBEy8tr;ma?s{tU-Eqx
zSm4AaO7vIk&4X&nC*d)i&sn%HK)d2vTr}x}(EZJAko8F0Hbb{Vt{Y%;o0PB#es0nx
zYVB9RC`di$V{f{zr%Q_xHt}3c&<<zA;d#?bQaWAMZKx{}`WP)0MDPqzikZEY+~n9Z
zdH-(fVyuw>xBuJsbR}?mU!|E~qdMX1mf-K<>mYn%L^uKKV5xb}tzC-mIWY^K?A^x5
z2}$1&p7ma=rB^$V(u1a9UnqWw3~q8L3lt}6<ZtvxP6gjxSO(n$rKi$(`>=<qzlirc
zHcGeO=ohLbhhnpdj94~YC#?pCl6wK~Q)`1HheXTbIPAUa<o<~#;OnvOtmAEa*{9sq
z at k4VU0~(~wBZ(48ZG-IHSGyxB_JjX*0Vf*hT(<L-d70&htkDMh>jiRKDWmTi|B$8_
zduTk?806jq at NfFYM)YOiF<={R_(R<6>Ex8`so=C7MWGW$ea$tGDpi8 at l6yld_F8^_
z?rhCop^f&G<z5hOEOpk!f9(=(DRqV&Q=IUGJs~YsoOUoQbot=n!P7rT>!ovZ8d4QO
ze&&nV+oeus=Nc;$2w7Z=^b0&A9o^&*F3=PS^35Ylmm-f*47=0okS-#&)XbTN)O9oc
z%;cMUTn(w|W9LZ?_su6sy at Jp(mlb}P`s~CZ0X?~BRYvrXUh4OwYTYDrZ0e*AMyj+J
zqtre-Wu2A7U#jWJa)S8;uF^B6ksL3DgAQ=lW1BDctXKVHxPJcK0&{3~P3t$Nz at 2*e
z9t)AvTGq`BpaajkU~7Lxb(&Yzked0TU!}o*{#~4}I at Ot$^qB#o64<0KO1eV6H)hA^
zpcIBb*B|w=gv~ItpMN*J$v;pv*tzVN&6~Wy*J_Dfq~YFrBXD9Vxl;AShZ43FBSz^S
z*VuPz{n{n at M(J*!FOX+YupP$uS6yGkQ&;ycNwPo4H^#q0@?4|3$``3-<tw)4+*jI;
zOVzx+u$zfI7w(d`>u<e(cvh+0JZqP{W7bZ&W!4V)`B~fLt+QT`Uzk-QPnmTu@>~t~
z{^3yD=oK^}Taw=?xlReb8oe5%uM9qT);0FbApKx0FSlUyS-91GJu+6$5vAYgeT!>o
z^d0_x-#Ie&&R75a7C$G&{Vl(-Z~FcBn_oRBJ6iw#Z4Z1Jh%UbSA}}!cAM$EV8 at m_R
z1+WIXxaCGy#G{Q-;zxg&1AEcPbC}=L=1zVM at kglX+P`f at AAIk8_}>%E6LpdFCrN!f
zff4gOB#p#BZ+}VBke at VH20KaMI*^5v;D6BW_GhSr{v?Rrhj+e3xoxoB7U2xhsUKEr
zi}#rNy6a32ch{Pp=!QQgd`=Xh--W%d at 7f<oFiXgcTlL)jDHQj#MDo2TleJj23aemK
z(qEjGJtJI09R;25>rqn!PcMZ$^GfGU*g=5j_BccAE}0qn{{7P=b--DuHOmw|bO8Jp
z8%e#;6({nJ*ThpMlcHM>J`{OP)XGiRk4x~qsnmXb at LM(}lgKT at d%@Ql1(!g(iY>jg
zmA8-XP<BR6gRks9=oSJD_cw|`2Ok>in~-wQ`}iH`-`n7qefU%L;{7k^*Y6M3zqQ}3
zM`A5pPH4^{hIN_>yX#4xIVt-K<^^&eu^lA1T+$G1ge<}gBBv$YhCclaYz!>0#p8OG
zQUj1%y0CX1s##4D+b*i~jvIqM{-7 at nhod$KSD<{aI-JxGUDb7FMrSX*`N4Qd>KhKn
zEQZflH@^D~=_BbY{j{l;_%-P4 at G%_guVw;ulv%(l7VMDd{pvM=A~Dv(Jo<j*WJ$iD
zEUC?p^k1T^7Cpm at G5xc9@mYDWOO$TPy(4AYXxSRz6g-RXuyT6j%qCa6Z)YVp#r#p%
zcglBK5|8yO!zEv~tP9}$D&2Mc;TNTUZ~uopf30>>y*xMRrd&zvxylgd0Xoci;Jp=I
zgum}o&kJvZEzb~_$Ql=>@f`A=;)*U8e3OV?Cm_k*b%r&T)`d_t at Pl~zbxm;OIWk9~
zw?txt{Y*Uc+vl2HZ(tn*H|)ci(bpnBc25cVUYEL__}_s4=DF025;XXtjn-if+c3XA
zOMY)D39z)}2mH0^M&JbH3BhCfC3A;!ri8yU4><cqEq+OD6RiPx19kBgMtwrr3Dj#+
zg+mUO8~!@8xox6)>>2WZ)hl@~mP8qTIa5I1L;KbeTPw7$AhFM{Qdu4QwI&8*WNJw|
zb`E1S)Upa~9aq!3e;&_1PYhk7j)wjm{Qg9qt0f!dvXA|WHMccKrhEhC?>sFhZ33^O
zEj)v=gRyI{-xb*J@!0QCElrMyNAEtB&2wfy%e$G?^6=wbft0ZayoaBCZ0~=Eb6!eC
z<6Wmn;%_J^jC1ak#llAkSkB%ipUIyjS!?3i&i|Efq4!dO4Z6Y^qGa!wo(OgTdWf++
zdMd$&_D34`+{!||S}LX!bSQSySr at 0HPm1K>^M&!sl;csbTU@{n>7HhX>Y`@4h~E7r
zDP+qi3idbM8mupkUQQXMf$3(!Jj0(Gm4Wrj5RA$B at V2m>1^e^~^Z(KZdmA&O{XbJp
z&;Jc_iv_;v-KJ&Tnoj)m5j-QKon4-B2UxL^^zUfw{v}E0 at ND0_EmX{^b(n)pthcP_
zUVoViI&DRtU{N9^+~(zkz3AY|go64IxmP`~2jj{W-j<T0Hg9!F-k&R55f5V$+7ZpO
zjm}NsI5Ibr&!evFm^_D^9a?o7bM<Gq6E?Qn7-@`>;MCwni~VF%qk=`MpXk(4K4SZa
z#uGcGriqA=anJSa$y)~L8izdI)T>So{Q>-&4|PLRgn3T!GrQNcO|%qw`2@=WM&!*K
zCVLr}L at Mz+7%S5+BJ0FUQ<NjsSUMl>ekU5X<=}m8f&Vs`p6p&s?0&G{V58eat-hJm
z<A`DJ$G~4xp!MR2&Xw#7e+k9|`Xwd+`@x2>W2hL|Z4T+Az{aKfz$1MKf13AB`mQ1}
zB`~(EP}p-<TyHpXFj2IwiGT5G(!l at lA4!}bkk=;2MY}4 at RaW?iI at c&KKxZ(LlMs5Z
zQ1^e-F(3$p59f2rcRbC!HaZ0|rjA~uTl8u_#$gNa_IgHwHu>@_uoJ0A-q(oHfW50c
zgFc!CQRP+ipBJxlDQh7ou#VUrA?p|KAaYNf1-4s#2j%6i*doQSO~`Hq?{rNi1LnR`
zG45bYg=_IzoMm?9d7L-A1a0WCc}L2tI8Bq|AF1KcZ5PCZWGKAh7cXa$@e|{hiXVw7
z0GybUQm532H-UFKo0P3g&?q|+Q{s;1*-Ra`ro<lQmQe7wFL3G^LtCOh*{4*DY9Nlp
zn3=Dd4?j?KY%49N{C(bvqxFxxWrMtHSD%O6XK(I}l%8^l5(yv5I=QWE2e&@7HZpXL
z&4F`7=u>9lwl=%?QpL}8 at nV8q-EB!1u%hv~RX8*6Mux71-8p+MXS2y^PnP84opW{Z
zY8N%l<aFS^E<T;S!$pEu<T4<S$ET6|5%+!eMOUAWlvzdcx=6isS~X&wu)heVv1e>M
zB;V>bS6ESJDYc9SkAyldD<;>)uN*C3B49ZgdzaRhIk}~*#a({KX!)FHl^qYtyLk-R
z(b$h`c at _`zSbs|me~Oz=_E_Ut3%y?QE$Qq0gci&3?3OdfvIV(%<`siJ*EFp9fZkw`
zb`I)gtVWpCV!4Cox3UG#<GDt)n!c)+-W|a at s#_{k)Qyc#ZIbllUhXLI7x8QlE{d^*
zu65Vjdo0^@MxROQE;Ib^dPnPMa+P4MddN(!LMw?q!`=%H&vP(>mfkzrxdqB(@U2!_
zt!M6zj5jyAioV|E)JrGN2OYUi at W7=q%v(Oze<N%L`kH$q$efP$Ys8?1A5^?;7-xvV
zpfw=v-KN)?h7U6AU21%b>tHsp539-bRt9{!^QXMgn8y|hPSxn|RzN3)xC_>dvJN_7
zF=T?dIYP<Y4NGM_Gsmza*f+7T6?k`SPA`qlX^Z7-wyC!~6Kifti=_qW61B;q&%D^d
zJxhOVkX{_rOR1F6K1Vs95Y%*i{5 at MwKfBnun$Q&vefxd1Z^D4)-Wbx4H8HNRV9)?9
zYtigbrm18~G4xRvbUP|I_&k&f{!m=Pb(cPVD|AANwz2imzDkOCBumSjc<+X~L78??
zOWjn-*e1;mQ*Zy2T}6U-&$@;`HJd<RI=D-8mjHJ8kezl>%amz?E%ZIu`MLdF>*6I?
zZ<MuaLbZ#m)kiZyTcSv;1^3$S5~erz&P6*ByQ=pQ(q5(edA%^haDU6(qz>O~V9d`b
z?v0I8Kh}ALXc_4F%g~3ez}kyq>kw1n{@D6~-?E at gwc68)7y=H0mBnOvbMnAB at KgMc
zO9ee9q4TgwE!IiZBf&{3tLd35^9650o`kP4{Dt$u9qSG8lofHMZpNnaelEz&|0`6i
zzxDB;5^=^D>?694n%2 at wr(Eu(S0~vD;8)Np!ShSxIpMMYFV7b}cs^>wQzNw|3nh at l
zKFqV%NZHR-;DJQ&t+|z8b~PsC-wlP%k14{s1;$#MJQFldlFwU;-!lA`OY&>tKX$3Y
z+q{cqdBZi*L+D$Zw at a4ShuBZ~WX}>A88rWXomTETp1|I!lFoG1Y1g`_rIN3O%YgeW
zzja6heb%GW?Eb3wnXbI>X4iaaHZZ@{E~<oQ#Gd7dZ3+2qsa*24JI2ReV3~#b-#>gk
z*1^agc_gh#&wcoYMovf7;F>fD9`40NInKh!SSQjIiK)O}&uQwGTKM2S7CV;);cRH6
zjG~pw*734Hrcuq>O9PwF&{9)<OO~l=Xk4kIF87;Z>Syobu$Ok(^$c565?D|ln%!B~
z^)|sHH at fJKQ!0IOvuc{uaIRPudPX%_|L at ifCL5h>v=?QXt}{_4du!(G;mGlzcj*F~
zKC1Fs+GYQ*T2}iy$@|Aoo9?SJjJ1WCCOaJ!uF8-_6zz;Q{9G&}_-55Re*116>XMSZ
zlhr-Crl=cL6DqKFQ(O;a-#XNdXHn8Dt}Z^&MWvH*are>HAT7N*=F{!MSv)LC2JVrj
z=wYPABYy40TyQ333C-kP5d!a?xGVo}TB~yKc81~^k<p01VsQ}g;XKfViTbEs*zBSl
zj|vXX*1vR1q~c79E4s7s at 3@5dofG(<wt3KI6{nZa9LD-RBrNTm;3>@w^WUC_yu~E1
zQOGp^#!0=83R(&rArg~al!-MOpy)DgFLjmpD<l0=N!hKWY_l-?th;PjFUn?^?4G3T
zW+TByIDwV-J7NadneCyU>tp^sAM(zX2Y3beg9g1laYO~r7u)$JYWHU~UALYHy{ejR
zlGu|?Z{JF$j)EpvTH%M}>qiAQNOKF(ze6fb*d%^i2*tk*dOOd&)rzyKuzf+x$_*D?
zwEW@?F2&UQREDWnqgHQgIPCO7{ivgcyY)oz at 2c(8QGHBB8+7@@zT2S#PM at 2LI!~xp
zn;_44&JgCBx7xOl`l4G_Z3z7sZGOiPe_#-GxExbp?;}?hHb?_cj at Egxjh2&oO}PVV
z(9gio-)Mi+J8CuL)l{t2mH(~(>RA1Jv`3NmO1 at 1W^UnN`R8PA~8hVf4Mq(Lgh#YVd
zv6dVU$*7oy)U3a#oRA_$YI5C?Aa5&uBF~I#{@8T}+AJe{FUsoZAQH<?`8?WqJ_HDh
zGGz|&<)49=HWxtaMnZ2=IiZB#H at 3|2?H9}p_jSM)4t8iobY-(^n)Fl^Cuw#C;0n7i
zj^0&#-*=U%k4sDh{;lV3%|nc#Eb^SXjBouaTw>nS7q5IS7B;!JM2SO?TYabtiLmn^
zWicn?kUuYRCXLuQkRj%XLTlDzE(uPsO(iA!jXrT!{wVQ9^Wi&8Qd!jgK2AoS(;It$
zG1f^z^P|{nRo)-D>ZGe&v(`1cK;x^pG{gO3*?4EmI$zK;#D_?nJS<#ow5O7oZtb{c
z8a5Woa at FLypq138{Y>wAtg0Jzk~aEPkTUN4B=Q|$xh7^Wa3Z7hwf}`P?fEaxM4s(U
zPI7<-xjMyjqhoPK@{c$9M7)KVldCPR!HtG{?}d)0 at 7s|M8BGtpjPy*TwP;ru(ld}|
zEH1}Aq{BzkLpP9~j`RYHYd8pL|FLuk($mJ$laQV|mVN^1DP!q{NCzWbWO4OPLpo?I
z9f>sXI(Pn~NC%9i+mVKR=FUHl^v1FDC8YDm(!U|SVJv+b>8)ew6G(3vOaFp&!C2af
z^yabj&q(JWO<P>|fbG5KJ(j+S^hDr?8!!$+q`i>NN1BiH1f+8?h94s>K>4{A*U%QE
z!!*U6<E~AQT4MNe<D)n$KFz$xt)P0~WAziAaO#Xc#eCN$R#;7wu6ZW_L?CAsEr$H>
z8&GC?=9)Jn%^Ki}sGj*LteIYF?(9n at wySXxVGYU!xa++2;io*;L+eoAif2c-JnF`A
zrOC>rQrCoX{TCm8in5;(EbiKLg5Q1kgF8KgtO4K!YS;u6Lnc>~XVtmD&!YJCx%+ds
z9+mSv^${~I^qV+Cp6BmX7kfVy>Dz2{)SD{1PQ?y(PodzCr>V~kr=r7tDJ{~c@|Nl+
z&g at VJQ2}c8$pc)9`a}H+-pQQ|^yI|G$Ftz+#H>8~_Wg<x{k&jj*cOwWd*yPaqdsIs
z#$UkmrKg<w<brnCr<#dhtY9;E6YwW~LGYd1OTiC-3K-w9T?>B~i-)|_(Qx>;m(>BV
z$&)ovp9#Ifw at Y%jZuqOk#;8&62H;<TRM3ViRDIZy9YtZw_^|hbulAALt`dpYus;5s
ztBAF7P5k28VLzOkHN}*L3E(-%SVW%7AA()~hrt^7D=f-CiuBu{N&A5751AB~U9eR+
z8acg&`}lLkXT(kl=h<hSk}jPv1$<dH#?Yr2vM{i^49xv at MdMcg{C3lmmtCO=-g^0j
zwIij>tV1PF%(=T$HtVkNnVPO at ALXX7_ip#UMNj<(nEo}<y5QaN46}<b9`DS~K>VxB
z=HAxSX3NX8<fu at BI^vV;rLtMQoy)p(jMUi9N!M_u7cN`R0#_DFNUYD-Jvt><c;GPy
zM=`W69q7~!=(WI$LAHc$uJehmLyK3MdygiYs at 7*x`{-IKpP6cQ-CO786Ad9*`GKJ+
zykVmMd--`~E_8o-Li>C*kRhRmLw`RN?Zo;?4_FVo-NDZ1uS{Yzm+RG1egA<J-b!II
zFrrU1#r^PMojOI;R}x%psn99xT@$Q6rA%n!!jB;ri$Qxr4ECm7ZcJ!B!N)rb(I>6`
z>;Y-eVCwwPk=f$$9lB><pG*^fAk<y$1>2Yj%F~_8zU~l|P4X9|P6`Mc_O^6NzP?bR
z4PA`0Zx5qQvZ~Inu at _tpJ(MF;_ at T~&CB<8Ri%ZEvEHOP-J(1|cRqz)f_+r;V-t!Wj
zUpw+AjPi(nvRy?wX&kVFg#)^bMfYHP<Jc6eDZ)B)Y<e8{hV(7iI^kTH?6##DYFXEd
z_&>fEBDG0<4bnFcG1*w}im~}8cC50qon0Am=3w!yURoDx#(Mggt^}U4+TyYES)(;y
zYVvL&c*?HZms??zV-nAe!y2<i`ZT#(g~0X#ny9xz6wR2!r+CYF7ldm^%b?tBCJk#W
zugNEWev|8#H!y}|iLOC9@;Gd_T&*(RebP4GGOD$u<nmLIMT$F15#z5Vz4s at qk?X)~
z98*6dJl at x^`y5#b-NhdVJ|t_FvP2d&x&D3<dv=PZ2=Tn)5FcqF?B*@B)@<n)ms{xc
z1P=IgTd7PjZj|5a?5(((Zw^^<tCx#6_Zq;nUtec-C8i at k2l-gf4ba_Hyx9hO<FRqp
z>fg_QlNW5775pVv%>K^F*-I^}Zr$<C(!Xp}8~&_HVu^m=*cHKcHXQi+KCYL6*%^O*
zzpH9;uJVd*(M1wJ<|b^sKMD0WSJx5y_KWbpo~lCZBLjKXfoJDJv(44l$uqOL+JdWf
z0)7+C)q0XQ+gxoR*9dc!i9DNzbga3$hU6JhmzSznx9Ak{&8BpVek9i~bWvwX-AxUt
zmK4EJbM*mImO@!?;#Z0EQ|9WoNM0-Q7N{&}!{N|Gr2SOQx<$W{Iu;}EYpjELx~Sht
zU4sp&FVLi}BksD))rZNI#1Ht=T)l*(yYT)ERX^UVgrAY8F6u8*PYCD{;?kN8c(*EU
zm$~{eQr2RwT28LDuuVw~w+N0J?tlEa1iYB~Hta^{f^TqLTC4PbI+=&qm5M<zV)yk+
zvCgVV`IjDMGJ)Tw9-l2Z+T`)~zm)zBx}A}DZ}rpAv5u4~{dK|$yWl8%fTlN5I>bW!
z at kOP7OZuN5p-g6^7UgA83k63J$IJzt>}92YV+5OTQe6D5;c$m{*l&hU^#(cDIgbAb
zVj{-Pk|PF6l0hLpZ`deqMLezxhWEun-Y|(x`Ld(tr219Ew_=OLs5(gPWHOaZopvx4
zv}o6Zbm#MYA at m<(<xQvcnUp#*K<TgA+~j!w0%^;00{F6i(IDHh4c8+LGR7O%ng*HB
zi2gY`XQ52$_9sc&>%P(-7^CC4P~=G?-x7eo=6{+rU`%2AT0$??LMA=LY-_f7N_ihe
zs+(MwKT5g at I#?}AP`0jWkA{BwqP{M^&*iUG^@8tH5*kqrTSK9k=(W141%*U^18ldY
ziTZk;;yTG&Wj6d-^DE9BCdt-txb-7p2IfFlI8&HhXm2?D`!nFtW{VU=Z`DL4Edfuu
zHOYp3>$<!}dALCrw29~@7`wjz6(Ln<%q{ExLg}Zfi+?f3H!anN<X4a8-$VW(lAk})
zd653R+Q at Br$HK)=_IVWccP-hqX9+I=O!BKb?Z9WyeGenHsoeC!&>mXU-0P4AU*-bX
zlgEQiwys>ZrDh^!eDnZ$-u3@@4oo2`!DgD&wTJK^uLwKMjFhdTw@`fxGRx}dtW)(O
z3GSai1-%;D6d-f+J at b<FUsMYfcGIMxJvBi*7kHVLC*03dCht}FJ)sKc74 at W2LkZ%D
zD_ucUOIHzfvU>$}rza176M2*gzh7}bLii_wS;CGRSSs{%&%;(AFv$-%pv#t>bdhO?
zjZqpfwas%L*|a9q>0g`I4LgZD34LC{1uMMmC3Jx^??_%>mx?t3XCHzM=s;I6YZB_c
zgFuH&jBL&!&@59|B70(ff-;(1 at g3CX9YpFu+zWTPkiFH&gG>YYhsL>rSXg at Co8S8H
z&BM5|$NVevV7Ct0is05yC0U_sYbi~A5F2fDjO*gdT=~1uhb>8c?y>)h$k%0O=$Qrf
zkfmOB*m_y^e#zq;xzu;_Q+V~j2nMKEJ~%^%@H)bl)3=BWK8nLoRbjgl`#1T)hD>|g
zxA1KqbP~J)hmviecpu#01mui`jo-A%#Vcoy?^szK{ap?d9p~3R>n`HG+p_(zPS2T~
zt(oK7vwsagl$|u|tL&c<Ti6{Fj*4aw8(HvvTr1rUTe2ku#gOfX1%AzzSEuf965BiI
zbZ>S^sq5hB;I9%FL)&39zQlaSs$$!@bkO=V6L{@1Gd&~m{uV!AALG3*Z2Bnlam>L$
z&Z6qmT)L(hIO&qSHRGMzlfC=$0t+sLN&>F{6Ssw?Xo~$ED%+;?t at e;KstELftmTFW
z_KyVP5}d<X92k4k!_21IO8I6cGwx@^6%1&QzT$wbh>XjihDzZ_7?b??^4QOpLYH4{
z)9lnlbIE>JVhgEZ%qzk4Q`7<A&BBuYv<0*MW8e8E;W5)U-Ox>r*4gA5TErW6+nY&u
z&!#Io`zmxMIhVNVp+=Y5TlRb+e4F44n917dg7L8Xp?*z}MEojy9&sKrU`r>bV0%rz
z&Du1jc%JNc$^8s?Kb|2j=b_E8i at wjH9Kls=$<%B|A~htwQ^Y{#jz%meCv=ZZFbKP+
z%dP0=64?8|wFd;g-gXt at 9B^sjBV97~KIUz|dLL|MT&1O6mnHS~O7 at y(E55Ogx>S?G
z+B`4B#may|S~q(ImsG-EDyvkZm+*$Q?JXP=Vbaox>?&J!sahTK!9wT)1U(;64*Z<z
zZ6_IP3Tx%IfFG6 at S8zPo?@CX7qDSm^QuorCr6a4u*|Rn!Ra%2*4boTRv;pi*x^#1W
zXco@}`??GG-NqQ*qt`3$;#?s<TUTNePsVdA;LElHSe=5!vrt=XChk+AkCCun*j_kw
zNM8**DwKsT`bTa%^`q)ULMOM5`VR3^hCCB;w{8dim6J>lfG at n^DbDSu(>*(YV?!r@
zrNJXJaKt0U+v(Y{%i)<2IAVK-jjYp_1yUXb7Ja<oj)xg>Y|}6fX-Ok;X=uMnnrMT6
z(;zTGhbpk3Gem;9OJQ4ZE|=OiQMdJK at V>#SLDCNWk}_u%!#cW<?p{sZ=9;M=;hTPw
z-n`QZ-;-gS7Y(XF at 1UOf?7(=LsoNp*j`2(l;rD3RL47-Q-Sa2K&4WuQdudU=nM+|$
zgvymIh`pPI at 11a@umhs_IYs1~!A0J+*=EwlIf&P$gq{yPXX-4YZ98>)K4KkuWJ~I7
z7+VjycQE+nA3Q83#9=WN(}~ePlvH|y=EXcMOz#ACp;Xi$_8p0<gt2ehDXZ?cDcxg!
z5B at 5SPzi|}w1EprRtz*+Sj6Y8#(ZNg$a+<jU-E?ynR_gB^kiEOJ7P;=?>H_}_LBJ%
zU8?f^C%BCLYQz+BH1 at LGA;dH at NXrI2B#6zFiFH%(>q*c-)c4T|t^jkp7V*kWzz&yf
zhs}d~UmNsO!eNgH{r4A%L#SgI>tVJ>a at lzfz9aIjnsE5)8$HbYz2k_y7^pn7_enp!
z;|%+~BZ57Ca6RRthh6pq8lhkRvMua+R%nAQqyO>WJ!lzd<2Re%1fNxnm`B$WNG#FB
zMA&4MUs(t`W&IZWKMnsOP)KyBe2Y-R|3jEOsRO?G9W>&N(=&>?)a at t#!DS;3PdxF5
zg6y;qWvdh;bQXLVLv}d4h;AZ?ZN(nxv}R&oNZ1y{s<HY`Qgk-%VcR%)`CzOTK7%=-
zqvO36cCp*o>!4fnw#zQYa60|~{I~Dd7=Qy6QvFO|aed7a@?RT>>G!d>pvzKzX=fe$
zb^bc_vPeEY2>R~hbT;hJ1B(9;DNt8-B5W2Rr=)@>S*qvu{7c`zN2m!znal7G^YJTA
z>SKzld$}#+ZLq6=tq8wkY#iUh7=G`tz^^s&F?%qBv3i2C(uMF})@hcg0}?-{Q?TDj
z9Ws85XmWW3x3(gND_C5Qy1(VB$_IVdoa)z;{hN;cySDru9S?iHZ%eH>V-E>ev>bX#
z7E-N0_knXtxGHpMAT@}y(RFWO=QU1tQI42`;~Mv|9M=3G%6|sk^$-5(Dtpf!_6L&Q
zo(`MfaP&{<bsILpO`zdqUD|DV&^x8zT8g+)^72dAL%(vt6^{vCzj%_?jh$2Biu;)B
z)7D(p2;Kl#x$-N)>o~ur^M=EocgNH-?yN&h0iEW(X(=k(4%r7<ZiZ$W at RBNGTcEDu
z8(_N=!!5lXTi91dbD<=DX2DEuH+$mX8P+Fc6UM2OjFa{i#7`Z;I9;J<Hu+3KOgfPg
z=ie5r^=Cobc9C+(H^5dGvOf)5+gE3npX7cm({o|4<zI=j1NH#IXLD1T0Mk52W at i^)
z*D{ZbfR0Q8f8fI>XXt?i>ibw1VrvWvlW+HH^t_n7!zRsJ8Kxhl$);ECCNH(q7ht;(
zP~jTe2jB5GNsKXa|5JXoz;0{VdfN_OsxAO_{a)qV_Tus;jxDR_l%sZ{C2G%9!wT=+
z>C<=}UGa#q2fGxt78r^|sR5P%KXBzC#89~{-dZl at j*&RONqyiUErOR6c4NSc-ecda
z(+3^GKE^q?GU;#e2H1)oOXS2`_xEy&xo-%Q-Pbbcs)u(3DqFxi40pTOFoyV_NOwbt
zRel+C$!^=lb73tsVqSlPZL0vblkg|p3CxJcC2VT8SSKj!V5igy|FW~>+@&+CD`_oa
z>Y$C-n^ySaRrx#(+u36{e--2!_w!C-uX+sYWfwW0%P$vRh^ayB*jdo!yYBbG4=;uf
z{lw^*Dez)n<~FdmY&(cOaCskS(Hx<?yq_y8Wsnwlo`)=Sldsmw*tfaO at a0VNf0gTE
zPv}pVA(qI+hiO>=&223IE$=$dg}r}I(1;ksQqyiV@!e1LjM7K=+48QBYiHzTq1^OR
zEn;2%{lvynn at 6fQH&v^GUZh&hX^Y-kH4eUEFP{{0%2H=n8*B0L9c{C4$1Z1`w&D;Y
z*-<D6;>UoGrpJl*$8eJB7{rG=%{_&8qS<TQ2JCk&;;3a)I(mL_5crHuz_&Pum>ud#
zVY#k9%75$mmTd$r=MJDgL-8JG-UQP>=)`Aw5?-LbDUnfECbZ&w!Se}X at B7`jlKz*Z
z at 9*atN*&mz1K4-Nq;0<OrB0vpvGy&y*hkAd6Dz*lus1Ybe2<h7Y{9<GgfB4JzrYTC
z55#<e at qd`qt;_6$3>352Lrx8qloWe3%GICv8LNvqE&7wCkaV@<8<p&ka99)IC!(U^
z+vw(PFi+b5|9N8nZQC_ASFNVmtr at 0iqKuXOTrk_If7suq51x*5r&vQrnd;7h$Me&h
zY|w41J;jsi1^m*|1W75)$ypQe4~Cue9mhGgaXa`(?)~!LF!xF>!MxZO#@2E>c*FW>
z(`~*y-kbU$Bi4O&3awQb=~A*r at qY|Kd<*7Aobh(`9?VM=_X6pYvViD8$hjYqNaTwZ
zz1*boGg0Zgtoi^y8+hDWvX_{rl`BT;gCB1qJ4pM$wpB+%J{_Aw*!c87U(t2H{5PSv
zTFzzS8(AOZbJNRhwB!=LUurW*&p1^9yNYb!<L2dt7(K<i93|qdmeA!dAV?~EXF>*V
zn7`e9{?;N6 at ILHY8}<_VP~7gTiK&@Dd=+1gy8?cc8!z{EdPuy@^i-?|+?S;7$9J$N
z8oUR(u_gq+j-6}qFE~AtQ}1)hi0iNgu~0Lq!9v)yO|BT5Z at l|pzG(@3adbt9L8fl>
z(`za{JKVmc?eIa_zxSV$^$rU;U-*9dsfTR`Jt!aV)QdkNzH!}&WYg)v<l-mvLGRf(
zqhBYt$8V7Mq<X+kszFzrK5Ym5X%DekI(s>%t1TZvY<o_hJl7tK^HE!e^GyO@?CGmG
z%yCPpEZ>Q9ek$ZG8hppi8i~~>I8}9rll%SQ0IenQ=iI#g7G*(K73 at y7RL650_Q!K;
zL9=s;ZC$-M=c|FuMDQGlH`Idl9mQ?MGj|#A3|Vm;ku~M;so-)@?n`9>;xF3-TcGzE
zB6*0lIBr!pX$xe42GSn1<t@~MGoefho<qnPS-U2edeV1msl&T<|GUK3+|z=XGKj+r
zf4GNgu3LR-)=@o)t2?jL?WJ}{F?F>jm}*`!waLNFD(!=Pph<5p8#dU>cI$f&aOx}6
zCEEaa)WfHrd2p_vzliTyVTB)FWZ0G#IXw&C9VFi+^wRGP_#q=`*#<{1i8o4JqWznE
zeD@(vZ#27ojP`$9sLP!|BbM}N+tJs@*eFd2uftwNHR$6P50o;dV9(T3!J-KEQ%$aE
z)@A9b8cx#rHZ9{<3Dv9YWV|^!KLmCQoM$Qza$|9=HlSLn$u0hdnFss*fK at -h?y^NV
zjc4?L?sDQC${3r5Hf{%of^$H#eSGv*Wx at TBgNP-fEp?2y{2F^Q9c$09)2^RnbaeHw
zEyu^>e|YvZy1IJ(E?-Bx{6EZ_+7m;4D<osQEAelP!x<4`LaV<6Pnc5bU>NE+_=9Mh
zH<ix?`<)r<E7>pA#P_eTEvBJo4|Pm0ZM?tg10v7)T_)q at kW=464}Xd96m+O2fT=u{
zqgO8-*};H!%-rQ@&}}<HS57i6PQh7shWeJg=Z7{B8OwH<YV}MV*MaXYCH*Dk37#-9
z5In;7ngHMo*YNw+U;De&jiYPJjKsc)%VA%&?O=Os&_mfW%@)|XvDmBdU8JIzfXSNG
zA1zqaUBrfU6_sDc?-G8$;df^B{snQkUWrk#W?TB2VXmmWzcdhbW8>)MI|D;ic=o$(
zA{!ayRp!OL;N}<B8RF-+*;lZ?!B*&mYC67?#;c!~O4Xz6#f7QhAy$<CAzazgv_Ng@
zC>f6!mpP#-*lG;|pSXi(7voZSr0gHUtON%WSZ%g#TY<5z?y;5dCvq#w2N$kV-3Cq)
z$PY0cT+=P?5_o}^BK=7zKgj*3+`-i<`p~9FZK-U~9O4(3TK<zze!IW0b?*7X^D$4Z
zdLRC~AH>;WlB=t at B?=qr?&X%0|Ad$mqZo!4TW8w_+HZ#q#ZsQ7MqAODSQPPDx_88Z
zbWiXp$Etg6yYPDfzf%0R<ClwHo+Mv3EzY%51363{`a_AVthYjU_P&7abd7vR-w%eY
z!SqS;gXMY9H at pTL#eWY&mvMVjMkvwM;79D;iM^oVKSl2XBRZzPwdcCAH(#3nWQi=)
z7%Hx5{riIgGh#ml at BPxRmA9m24;?{S{p|VoanFs$#PTgZEA?~hd=Uf385Wd;xPoPz
zZqe&~%!iNx-Xi*A^$cP=i|aH|@?*6!snUda!0-uEYHU(q1&Aj?(vZvUKvzQA02>wN
z0MQK?61;btUg*y`E30sdGKg-#(-|j$J-1rHcl)J4pDD9E7ULhR8j|fT*cXyAx31vT
z*->YuUTBls2ET)@UF?KU;SaK{N&T|faolzpe6FOkPsr}hZ7B^5&C9%NtQyF2>mySA
zf(V8~Y<bmN5LX2Lb#XTZki(YBB|q4fPy^dF`@8A1$9~$>Hamg*rxfhqogVm40l|6L
zN2U=!MoN!&=fLI(|2Z<vvn8=Md|pbNalY8I0~l|c5Iz#H9}V^}W4srEH+PSRqF)#J
z2Im`UvU3tmD&ZSZUoUVg7q=S!Tj0>_Lu?PkHo!Y!h?P@{^9*tHiM}OTY2NBs2kZj=
zk3m-;chwfRf_~oy{UjKECY?fT5D+t_HfaK49Q36fia3>?uds`sdt|=&xrlS5Y}&_!
zuELj88qwU<OAU5`_en3<FQrNB%U1K&KG*{AO^B0~0v_R+$0v-ggO!a5DT(^@0`R<9
zq-=FOjsGj*f8Ke4O98K)PSdKy75%`9ZZFI}a-EZJwT$|VvbPbZ!zx^kJn4~I_<zMs
zjZ%$FRjVv*D%QSz-qxxR&{1yXXq&`&-o=S+k2RGb_T*G;p1Z!C3~<ktb6-u=JoZ}V
zBeR=yzr1lv7*Ax6CACaDWE$u*U)`qu8Fu|f;_m@`E(m?MryWw*9`u`$J~BRig911g
zdyDgCZ;}{a7=v4Lk_p{pZzZI78;$A8$QtQOAw4py52*)nsZbB%^N!yyhyBN>>{Mcb
zE$ic_AAC!!(gY=>@QRrF#MQ#THD;`(;L*9HV&-jvd`|pS7b3PG{trSVpL^QRiC7$~
zfl;nvPKi~@HxmNp^vWliM@(7x?~z2<=X`B;-Ct+!9Za7iG-l0pQL9b8_T)J?;Jbtv
z$w%HL>$1(8b+y61caE6Ec6sb{W*+%JGsM||KN at i4KY7n7-}G}*?)W}r&2&oopFupR
zKBBMObBh=4?i<$Y=zo6 at on8MkB+u=SYlJPCEN(&M%(-vqe%al7P>%mnl(Tub8gbor
zP+nmHhL!~z;F!+Bcm6-ZzC5gnYwuqKD;QxEkuBQRnp>oBi?|`BtzwB0w~&wpB8v+F
zsai9TAzDSet*x~b($<B0uUbm2wKTRG!;;!sYqcn18W%!bYAGV(QY#@FAj|J_2D-fO
z^FGh-k9lV1%*>fHXU_Sa at A~;}ot|28DYI)yA8=#)r2k#FJ47^jBNMQ{k<N_xIw)HR
zeBP3$VwdOG at caOt-^7#WHiU?7IBW at mw|Gg=9Y3D~zhvNnzobB%F(o9|x+Q`#_F8q0
z{h-|Jj`cJ-Oqqg%?C}Wp`XTliE?dvnXp=iOMDY__Z<^pM_SscAod$VxZ>$$v?|~4J
z$?-v^Ku at lzc;s4pZ)`5P=KBk|wm(yFhFr_<&9NKg?%vofr#`ghnH)PZ1(yx-*4|i^
z$?=~|!4-r2QE#lq<fzCLG#-p8amN&J`h9nCI<O(OgVTkr8(S~7K5TYu1HSMfvaQLF
z;VjILsfI7F?=I#cTecQubMs^1R~-W#QyF-X8pJVwtNZPp+tK_wr~NVoKgv?j@$%lG
zwf|b>ig(<s{=0_irMG~d&OpALszhUw)gtViHwSt7zWkJy0Iydjht7GjS-O6*iO?<J
z-(lVoeXw?bx0bp|XU-|0r(>R{<vxN;&=n%Cw*rf}sVha%IT$atom>CoyM#^*pgkRQ
zMpkvSyks>k0~SN((hlj$k*@TW(67p=Ug<Myn?f at 0*|8?MTA at 4Mq~4EvCZ7UE7P$`p
zCty|0B7PTs)hessPAKajbFBlmmS5oRFZ at 0LrWEMg5Y2s>>Tx3WTdiL3V|3PoZq?-o
zz5n=}%bT`Txj&GEe0N^{$hzT|*>w6d5vq+(F6qE{@2^CBQ499|GjsYufBIXY2P{jV
zoUo(x+Y_|in0wtKao8zfg%8XIZ}a+ik3dn9B8;wDdm{vMs6|Y<c}ZS3T7ID1q^~gV
z#}k?@SW{TwGZ()9k?*wd7vcNoC*I+9fk#>v5g(UAu=|1GtKkgBg6mXRR}~}itukPZ
z5`CeCT_aMdpcv)zYF%$}D}2YBbP1|X(6e?M6Y+g)26Pn+(Ipi@@5V6zlW-W at m-8U!
z#iI{1M*M>Q>}@>@IkmUg&Mi^cb-g=!xx195z$&Xnt^xET`LC>h+#U~$UlXyL(0i2m
zsu}3J&gW;$Nm$S&z0d!?Rjuvw*&J2R-M<&I6Kq83;zrm`0#*K;m|06<uUHaM-zvf!
zzQ67ScYk&VsYg$1Z{r=kadMIqiqk(#>Qx=7DSm^NE5_{Z at r$;}ss0woT6Q_r-I_#o
z=jo#AiCl<22qgX$_jq;G at f2YPY(}LR_usKG>W#pusKVMNgKlS63G`yHUkvJD&+1qB
z+X?mz);riO)z7LB8^uU&+@=qh#Sc at UL&>x}g0Akijaf>@aTDa at K7UEh6~x7b9*i$O
zB+6OZ3%knWLIyarDJ8A6%(JO=F0kNuZ+EghSUT3Jj0n}H&6D+f^(f88%}+Q5>irrU
z!F2u)`h4>o<U)$tCQ1oAgV?^>)JwoBl7*e7(~C8<R2v2iOYc!{L&lYj(m<z!J at h*%
zWbN~G6)|XE3f`Ma_zKkbbMqBjGFczZ1vVL}w>S%U9@{%f`xBW~!x?IuH0ud>t5xd;
zFYp*+-kzExaHcNjxaq>M$Em4`F057e|F%}$A6l#K!)9(*H!9BaZ-!gtv#@puuy&*&
zj`oPf+JoEyy$hAdi|o$@KN3!`qSn5vxGQ&B1_si?ch*YQyQyX2yLf4qf&Pr}4{Iew
z<a{UBCu=+}BU~oan49##K6WJ0NqXsfSaaV0fu9~;t6RKpj(kkGL%-`?$klb;oO>L%
zARXTi{w#;+w^9WIgtv$lO|BbSlU&Y=l*_giddo3$?ag90gIt;bA*rzKuqZlok#BbE
zek*;9a!qs^2Y&DkR at +C=Gkn544PCU2P8BzUK5RKC+NOa&y8G@#KPzzcKu@%fc?yfR
z3wW%dH-*H;c|SU7f0iu;SQ$Dx8v5LB_$Jrd6wqU&gD=Q2|FAa6tS9y~f*FN5Qlpwh
z1u~hKCy*nlBJgDM;;d8WmE_pOps5qZ)!hAlWuQsD(p%z2|9sRf1|G|aV80D7Dg0Fd
zz%Ck3^`WlnK|YX*Av~i|$CRqng#P0HF2GotyR at cgkZ*aDsfy}JT~76<{0IGZC+c*p
zJnRfF``PKdtg(b%-OC~J_Ja8i9N%T1SqNL^Lgs)d%yegCSPATz{QlUqh=g?I<g at 8_
z;%edqirajt at QzgB>EK=naiuFF=C4Tzail8+ozm>db<&*4KQfY7*ATyo{BT`6Rg7OX
zy$kQp^V1CC#X(=p>Q|AkE)Te@@lker7Bx9~k+#;BK6W>J#|Chn*ga3vFT<B*c!D#u
z5V^YpDDY&|L%Wx at J6mn8cEIn0waX4CIbz5-NB#jx=|$a)cN!rVH0fqQ4ta6MU7Lvd
zAy!D<i8W^`nIl9`t35+6B{@IMb#l~Goj?&C)Iq&60CWKFRFN1_=&s<4(wQ06z!PXY
z=@r6o-HUGzgC66qO+(!it!GZh$+eC2BKkl at f+}L8w9eZ*4s|co-li9faGgxj!cUjF
z3t34`%bC-L#^P-}IgXRa`%9|m)OCHqX(ReJ{sO*s!G4 at 8@LkG?gC1J%KlSA!&8Jth
zIdDk3EoCm^53>!q!KQ%sm+ZYSS}p8`PtzQKbxt4YThZOITfa;o`C#f?NB$9ipPLt>
z;lEhYY7>XQCSR=FsE2GO|B0eQYhnucX$@AtFOdI8M`ai#Z%+c9JP#X;9=yCp_hP99
z&oX at I)$r^g#MId3BgnnVFXT at kPW4=jnx97MMIDvw^YNgY9pKM)qMmxxp+i1K8;(hR
z70BUshvbW~!xx+LvG6m*)4Suvh+oc!ZS^VT^Sm*LP2(&73H!k<dd1RfzzGYBE*ipn
zdXnHhDXx%MG?F*PE&@-(Rs4)`KRbE at j>jl2>t<}bg at 1hq7#p{u3xFN`4QPV|F&JND
z|AzY(M=w^!@aAK at rD2SumA0W>U-L37<$bB}^Gm3sY7l3MvRx$3jr&isJ|U-a$_;nN
zHsL+=@dG~c_pMGM|4i5?_Yc>EK51@$Jt^2KPgZqt-x(T*u)D!`5_uSb1vmy9_;X(=
zk?|mJs<jWMi{kDAFVCBLhV{2Y3?2P8WYwl&@SXYhfTi6uH&}zUxDPf?CpVA^iq4FK
zk7l7Oastt at 5j!2Hk2{)RLJs<!!AC9^Sb(`q1~$a8lNcAQt+`AJ at r!+bHso!RM+&?c
zWd;2kAozfU_I4(5U`w$KI7A%SYx5$}1{dOn&g;_VbP!)^<n$YWEf{NV-7x7F`30f5
zmPd0%^|vocMnZ<C5ZkFge<G>&GmY#IzsB;>-1AxIb&Kb8niBnecyh!2wUy;o`f1of
zCn4sT;3%ZC|JvQ5&^VBjJ-0Tk{H91u;_n4E=#&tjkNk;)GPD&m!xOoxz5Vop3*_DL
zix>1Rkk(q)$d>%FaW`n()cIFAe8u$z61J>qsO&QSUk$Hd!Q-LwM?>YmqkIo<-Yi$W
zdc1Rb!pK>mbvtJ(Fm5c0UQUt%7#G^ph=Fz6hQW>`(Z1>HsQ5v&%d-jk9dmrr5(iJT
z#BSQ?KMLP<eeD+`ouK<W5f|;)qz*Yr^iXUYMdTWCeB!>1#BX5?^1BQ}?AcW0yb_J9
zDH=b%ohSEb8q|jj_0?Z>*21^J0N;iKh#y1UInIp*;|EB5jxQs)U(G97#mz;&*R(l(
zSXX@@+Z%k+EafdaMHkLTk at M~ZywgkDH6 at hrOQXGYFP2k8{vv%pH at W_{WievvkAlBW
zD1HQ7hH;43y=7YD at 1sk5xuaIDdsHdW?&XQ<-Ok1E0iR85saU%!!4DvJZu5$$7~R at A
z1EvsvA0M&dJifCF$D?wq%J0x)unogDwbo+K80~G!^&eFz-P=SblsDo3-=Qa223o2K
z?ZUW~dIVyPjXN2pTF1 at JdchQTw|BSVVW)2a`16{j4&#By3=e5R1#)}4{o- at S10@e@
z8apmK$#<jwd)8KtjDg?M&Ox~%Upj;(i(KJ;jnF+rz#iF#I!;3m^M5>BoAW562=Xd;
z);%OH#}7W<n2&A9Y5fZ9I7>*Zt?Cx)dDJ4(y4i92_y6io{ws9*h<PLaDa4;!#ZcpY
zD%s~O at sN*)p6Ox70{+d$UC=L#F}KnZ?5BpD9H)jpVNAAt6T4pkpKndo(6<nrgIc=U
z&*Jkhw!T)-hfwgif3ySNPIAcl`>=Hmn*@I@$Zoqxo^;sjYcxyPe$)Jq?<QjwZ5bH@
z{^)>yE(M=e?arJD>#UGZ4g at ESVE40t(GNP{{kL{h3l{k`d0I3%Y at JGAcK#^1PQH)7
z2-pu9%~$Eng8zp8Q_#siBg>!3&DFj`XOMZ0x&KA2dyQ<bn@&&+n7aK()r)pJy#;$a
zZ3%z$f81S$A at RkkGJFGz??C1}-dRJ}Y%V}sX5+mBeq^nK?-$O8#f~H26?Yd{41E=w
zi0xX{6#7qsBTN1#$H`lzJP%)#KFpEZ3#6QyddYZan}lkwcU1P- at C+LVGY@_^8M9ox
zxrT*nD{DK~K$kxH?A}f~p;m6q(Biv*&jfovMf`O#X1NhN*<R1{?IYjFU&OH>kC(R}
z^wvBnWHk2Q<N4>=e{}(Q;Jin72u_hc@{s=7N7w)CBe|m4Jgtk%%{3_2R+2s%>aXP5
z&If~iWg~6&i6H$nH2*%=|Lg6qYu%4zvHheC$l=*U^x=MKY#U}GCr|9#A7c#8^s7c6
z{QwN4!9E*Ca0~LjfG?QC#wGn$<oc`M=-F()!H>B^%=Vpwm&=(JnrnD{ZDov$?Zd@$
z+Un<i;A}%4w0cRnQ;-SXDVf-q^4@^oQ{MuqqK)K;g`VECEs5My`S*KvvG+)d+tIJ?
zd|52pf28fY8Sgrn0#Xm1#FGK%hREhJ(!N2u)8P$Yi*nE%9XscL1@;$9k2+H*OMSvy
zeTCyK&HF1EH*~?4$^@_N at DqJhsT}>72TT&gkKA9YtF_V at o_1aOoY5S_Eg+_*{dFFA
z``PtpLD%Y3sDHGvs9>-!^BG^*DdXj_=g63goXEKU>Z3d_LPyX~j$noPwmgZ_b0lQl
zCVqCDJ?wEW^v!!n|FN{h2^<v0)4IjwDccO6di<m9s2_S2!uxV07!NYc895c;qk=Ez
zQuvI>QFr{D8n!Mi<BkuUqb77`gw*WRr^ohs$jXn|B;>zCe<|b4VEZZ%^+?f9 at CW!8
z6X+_zdH7^G8BK0g at G5h*V-*#HYmRvNoSOJOXv6M82l5R)n4WHFwrk)M|51@^m`rTp
zEkOTD=Jb0=Edw6{kJtFg<^!?Il%*b0%mH~JVn;A<b8o)z*SVqRz)rE1<WxQ}RTT!i
zN+9@*FRRr(O|~_ZlfDA^W>0=ulEtq~FE9SpFoSv{l at Dx>@znV2wpiyVb=*FBA~1DR
zL!Q^q9Pif44<Vk?^r3B1opYi-?x^U?k<M|lk&XIQ95?RoNd3~Xz9ngtm8U2E8_&D=
zh*^PO)klW;Z*FUl7F#3F|6gTsWg_YLug1+ZpEXHiEvavbbNP<A0 at 3cM{x!4L$<{0$
z(FHrloyha#zLAaNH0JMV$>4oS<D*_?#;^M at I9bxkm&7$;ZHL_{q&4!q$?8-swE^F7
zD{{+z#XDkl+2)0S2SS|gLPPIa8Pf|q5bzA8nb-q!SP!fs&hKXNZ9irqj=v)M&D*1~
zaj=cT=7Y@}c9Dzl<Fj)TFosBc4e_OxaJqn1(ObPtH3s{~*pJ7)2m9&RcM~7%{Rsr)
zcB?q at eEmQRQw-WTu{}ouo_a;TgHbcJ at iOJtq0TH|S=9|&zDm%Hwa6WxH^^h#3zR-N
zuM;ea(x2i3IeO!PCojdmLVTC>w%-?Lg_*_g{~r2J9Fwt`fxQs>bnF*kpN4&6z8d_b
z3wSseLZMse)NyK1haK`(C-)1|Hp0_Vvm&1YZq1lU+oO?(&i>h?x1oc5f+w3)mr3GB
z)KpLo>~hfxZZAV49&#S~Q1L%8Y7WXNJNVDb%ABF=%YwsaC38Bn+7Sc#hGE~?1QJ(C
z at I(;DBq?o=Ci!Lsuz58q+UbIsZdy*SUet)OU#{p}ATggUoIgVYzh@^$hWGQskI648
zpOasn;?O6Iu*<K&K8IM;*OOpFOwU!z0?kbul5%Xi(eHGYNvN)91>^L%)^K<9D1rg9
z|1SMXQ9h%d<Km9V&!&^`j(dtH{?cRrf%i0s+wvT6{HoQ!0TnN`7plb7Jh^fjiM854
z2J-e=?8joij at Y8~_x4`~jan_PCUz at Ys;Oc3yEQi|U>i3tY}GSQimP#K at L5j!(6H-l
zF8nM4RIBJ}%|pFrdw=Nqbxyt7 at LSH0<&E at fu!X-i at nq)BW(U0*b^CKpL<Zv6UvmpF
zCvJK-+I<_CE*Z_Rxx)6iMtKaFMGo7m<X-kYCqakeff+8EJs1CS=KMRz-+gKSOwQ+~
zO#!W at MFB0?z&i%~3cQyxjLqFFcGb+K9nHgAcN0Ak%JvZ1!>E(0qh(Q@<a==ZE{;2f
zj<-fb?`}&c-(TnbT(b}{(5*W$h7UzfKpC+9aepavE~F0)krN1iqT<3vfOxOgopa);
zAn!=(62}WzH&ewYforuB`T{Fr|Exp%-$<^bSC?X}%&1tgKd|D1{XrEX;6nAG-k(%6
zgx!Iga~=on$>~FUsiso$&W(DW&i&;f$~RbEaLgB2))iLdmPmpR<OF4PbWU6hQvkhb
zy62M&(b<V{obmL?Ro_1S1Tc`Cz_qD4DAJzG2{yMo-=DP24t&(i<r4=oS15O`d!`yZ
zH1LMz;(uqrUs<m0H7nfidUd6<LIC}FhS);h!yR4F&tRVIN2~z8qaSuA8)(XTI-|g`
zg;{M0fuE+gl5M|dw3vK1Fu}Zl306g9x7c&s--I^UQEDQ&QFel37dbu(xjl0q1usJ!
zQxbA}rXhZ5KYVY1`*<M<{8AEP$AAIAUsLDaIx6-qe-Y;IvX|8!7Ob1d3#j>(()&oO
z+~bp~T)S1Hz0XVJ?(<Ts^{@9lZ{Uds-vha0fKk^rx*-onq~*4U$URZFrxSM94TX&5
z(fyARyKtlVtPQza<c&*gukmS7Au~zC1CHnksfs!vp^U7oGt;lO`EsiP*g4mLLsSbK
zXzwYr2(CH at eqY)%kckOi{J;2!FU|~zL!7?0E^|D)Kav?3XUiyy8;jUBZ@>CU4g6^(
zz{Q&M>Z%Eoa`|G6<MES at CQPH6+3PQschbNr#D6;mpTB;-m=n~()Al7yL%;gt`7T_~
zeBlG!>)x~&$0;S99aG~j!Edi;RT^Yk#S3~mAKyM=xX~vKe8Gj`pZb6vP}hfl+#u3g
z6a0%@#P^449DbOb^TngLEKqpf<&KTBEf6=mZ5rh<zIav_<hF~XjLt_{QT6tR>Np$9
zt~T&?S{bSG2-f(2Fd~eJ*U9*o`$F$$rFRSMz>B}e%Up6pwr#;p$Y-zt%N&>k24BY#
zOY^+<r;ghlo<np(!AT=sV|T&#r^?dYE#^26y+XNoB1^NG)p?TV<YRbp;Ppc<x__ep
zx_PuYh|pKygIy$;{h&)@#3w^Tl$mYF$xU#rNLfb$=G+UdSN at u_<X%P>IYEDI|6IiG
zEyB9WZ+6+zu+AJlwu!}~1TR*UfH{z^@7^JawGQ%d!w#m7ALP at v_=QyumA#o7G*osc
z%m5pGH^HY7sKaVFTf(Y2Ojs4MCEl9~*;qOUIzPm-`;xrFDD%ZXL7X4rV2^(iRNr9}
zF~FtLj$~$_f4#(45KB1h(RcOjcHkseB>2QIK{)@I&>O6gvXE;8zsaw5u+B>|V9n26
zO6*hZQxOY$3Hi at Eh~6n&LG(oDcu67GVn1iP5PR8W%6#)C;wH&_y33v~^KlQ_G>LBP
z^c_8P*o?%|?w9CsCUgsMebg!ra64|7c~Q=4^?KLjRHBE&eeiXcOO>$Q_r5q3>jGYb
z_!UId!an&+u$(cc2jIJBQ9;eqjyS6&Dh_fG%ot(u>&(7!8f)0S&up>=_gHDBqfn!8
z7H&qq!VIiiBtEqY_A?Q|fPzf*EY(48LD?O|%FVvv3En<t+}=5kqdOytBPSXbYNY1w
zo4|k6pkMBJdb$q&i}E)A_ecXUG(IN0v;K!~%E-IxJB|InzE3$j_fnlF9NLaD4=viX
z-W8snb*$wm<$ztr*@AHdKm6{}N;Bd{hBpTKQ;5|=p31S}>Oy_<e at YJr&*x=OSfkAL
zRN!ye`fpygiNq&2&rJONpa}l$KWNK>_7C3!->ZwT>7Ojxhv&Y<GY2W)37YM>gU>Vq
z&+lY2+Q*Iq&;0Sx8TIY`z_)@wkh?PjIlPnMv#wSk)^k`FPmc3N_0~(v40ko6p*?Jn
z?0NFgK5b~9KD5sm+Gh^!Q-=1bhU*%cwaG3qT-5;UJMVqesSw)#9HTS+H1Sf_zwe3)
zvLSNbxXjNTX~_B6e~T&3$5mhE1w50iY1y~UjT>i#bk>&z^y_1S%F_9J=i8*v|4a8u
zY*PQi?AxA=1m}cY2kykK+!>SWpsRb9QSVhF#=&en{CExW6+8moJsF?D#>0!g<Ru_>
zztQS;EpKS=EE=@2x?ZIA(#=%5 at sr$@>=*@2X`Wa1 at kxPp5%^Lk at RiQSiEp@Vb1^pB
zIZdXGKEQkNaRXDtF)kqI^qK@<+(@#KZ>_8XIwQmbmQ|QG`M7!chFyJI*4ctJ9<#FB
zLcL}uhb(1Ml-01iZ{+cFryvFm7%%;Mh<=%7@#x1bW>PrToFA3dv12jLhC}a^ggHDM
z<8v}O$NR%Lk7whba|3Z48&}I)2HNrz>Xd0e;0It0 at Z$WE$;MGnI#?J4KM3{H?U^Gg
z^!J8y$};9p;?+(lcRB;LJ%wYcYg*L!evP%s*%*fWdu3l0vh+fK3ipz4*on3t;k_1T
zWjK?H3ahi$X6&C-Sg6r|eQ9;#LsPDgJLiJu9 at 82hcYXFYSLVKn<(d1<mhKr5&t`sv
z<MOCyi*}FO1dLN_;bx3Y1LzkpESbizn!nyfzUki3H*y}+d5SrFwIU2WS(!>r1=?;?
zZh1QVYn~E(XLC>v*)L?Rr*q-MIbiNQ;w1cxMxywM{3GNW!rUb1$b$-BRucD&f8M~$
ziyt8C#U&ZT(j?>}Ebm;#%F_2Zd{PejwZ_ofhq*sGPH`Lh`8E#v;gals&^Mw3J@*G)
zL(Z&Ay0qrLb+6S?M-!=-!EvpC&riui`Red at xqixx^5<a#NvFGD>llz9$wDpzFT4D{
z+1;B&e=L7sZr^~l at wsh^NX{OMz^($Ox4QWX__XTi#5ijOY>%+Tb)et-Gk at mXLyYOy
zndy^?80n-wwBw7+OwNPMl&4=`r=Y$=Zlr30a|s=I5aAo&eZJ1Ud^YH}On>k91ms$m
zAh+KVPK_u7x~FvLpDSTAQp2W?*cB?CMhy9gtMIqaBsv=70j+RQ4^Zdr#f6XIy*jEo
zh~qRPCXK8U<?(gy*3Xbv<3P(J-zM;{($|g{Wk2!2FIHAcN}Q%;HgDtMSy<oZFJpOH
z>DuW=2{*(j3Eg3oOo%l~TW=escjjRKwo#IE7#rT5ebgvP`VbrPwww$!9v;8KC^cL&
zO3m|((wbLs>}{0(v>W>p?BB*V9osFOXBws7)f=V9Q;pJZpEXKrD~*Rk-z4wF+_Xlj
z(e~%aI#%bt{XXWr2-qXQ4=G#4sUh;9 at xX|)vGXDS%?okIDk at qoNpdYAa*hKwfJb&Y
z2Rh*+kUig at fp6=ql)U at UwCw(F@}EDQo{zb5)2fp+H2TVhXvyq3v(8Hz?6juJJyR9#
z&P+2LU%!yEh>_IZp(V{$zip=WHkGHVa5Z8$QdGbu+&<jI9edBW3F{XAnO{jAb!-Lp
zqw8FenRU*E$LpNJA8|gT&Rz6#ox2m5**`%>@kM+>R~GL5ocv!ZW)PPEd3_WFCxF<P
z#}1g6)oRR(*1I?1`_EL=w>#5;dF_DCC<U}cGQuTTQ&a$bcWY&WcTlaQ_*SLlP4_10
z7RJL$odX6Cb>=WIYZx)hUq%994f8Dm+hq7se}-){i7zjjgSOe~T&rG7bO5hE3^uN}
zAd7rMY$}o7Y&-hN_%JIDO^+N~H_WzL&}Wo1zsu@?Y=)jq*@DNwfx?)t^A3F=@WT9c
z#eT|k0VBc+-6!N9DhBq1wrGCTkI|_OcfLA<+#}@QAV<_RuXR>N23-VVL*T2aNy%<-
zy9r)CXv^j?l%APM at +@d?V;lgJ5qMo+>$~@Tss#S%Es7h2x!$YX23bPG>|~xQg6>8)
zLq%}BGzR(3ZNOupjE8G};(biywOd?l6R=Ih_9V8aK$n_;p9gs!cBmlMcL%w;Z%rWU
z>%NoVv&Lts?R;(GK?&uIMoyl6Cp<t$Z#_Af+Y{&Cvgc3n(&1N at B(&k#iR`oA!GAP)
z{~g<X=)(oV0m!wtBgb;wsoCTkl||qIKdVgeqv>%Zj|9R0CA_aD#Mg;f?%@sAH}kT7
zVKFzI`S7)@XxV4PyS_%BEhKy!i?`X*Jnt5_5cuNzjE4Wd`W&$IR})NnZ5!*KJr}vr
z_>_&{(S%N8`9;}oh54B8%%idUK862T_0mRSH$i*3 at Q1!l&tH0*ZMP9~MND`XjEAR*
z-yYRQCucR#$@+Wy4rf7D5E~X|QvE}|F{gzRed at kXPk(63!gtOWHp7?V4)S?kBz437
z)Hd}MwA;w`5f`yG$R|ngm{doRXTt^iMjI_g-N2qBb<^dfoilprbfW(iH}d5A{{Rao
zn)g<I;Gft!h)aGtmBr1mA(p&7{q at OLao-?j&d2{>d>z=P{=(ORE|uW>3}W#p*g889
zzfQ1tY|_^ih-qi>eY}V*@Xz;4GP-e3+q7id&p%zK7f1Z{{zHQ}J;-l|_-!&a2qw;7
zxIk#Pg`U5}W-Guu)aFiJ@*nMH{f0?g_8!<c_Ruxxdjl&2mI5DZEBgFfRbvVKLBSvJ
z$e0AKA>YqxXQ;%3Qf&uppL*iYhVk%Z<v+Aec1)Z=EDy;EDj at A3c`R-{1>305nSt}~
zJYBdC`E74agpPAO^<aM!eZS(=z7v!R`p$}Kbziey`HVgL4RP%(_#PRh?Y|<n=Jrb|
z|M$FP7{mEjufV?w`7uP<SBBerNA{&=V?4|yKGN^CBGwegoF?eTt9am3?U`&WMJvMq
zXFiZTE5^E7=i2iLu_Kclg76n%WkJ=>Xyog&&4=%enqz?s+lFtPz<wV)H^oNUpXATx
z?BVW)Pxt-5=G9+wYQtf~u at BBEdT35r@|*a`RVceU<%R4UmhG<O+%ds9xf6m@@@3!^
zuKK{=ke!2t4L{nF6_ at 7#6W4DMWsO$AcNlqN5JQc*n&(fjn25fg_7^w$q)_kk62ONf
zgd24U-}PXOuc^+_B36&>&zpHV+8cgXvcc~YLMIIwv;r}9poxR{0fV&d+N=8RYXO9|
z9XiR<wqb;}jc8?da=3rdwh^s^wC&JI<KeGg9HecB&SOn)06k-A<h9|bXEa+++287U
z_`m9TI8;v=>PZ@^=M&U(0QCS5P`ei2c@*FBG`9Ih$-9W-E16O)*-;Bw at CVRi(0k~x
zB-+{N2P=`|+5KVtD}(!E$?RV8?s1}HupfoYIukZf*#1;Oe)-7rfIQoy9L^cqV@?n1
zPQ?>`ttVztWw70KgZDimc^V+3NtPT}@^f#T7;gSdccIuQdB$?&ZW_i~A%%9)AMwUo
zzPd|%`v|?7r>NJB-Ut0q9c4~Xn02GKvd5-M#gDqtrN7w_V`&=;d*?e5^=qeQ_DCj`
zt4X{-bwWAh)4nsIg>3HQ2e6M_GD_Y{<-KA#(n)-&rXVMv+;HxMOxQL9ad5cyc`UId
zN{Sbd?{dBb8_x%E(a0T|3*CjA1KzZp0hWhKSp_}xA#NCSbj{4Pzy4pqX1%0LV_w*D
z#d!Gmgu#Aqv7$en(Rme@%GJP_VmL9#Szz_B4BEATJ$wt;CCC$rx{+V~)ti6P`)<&O
z8g3&6na{5^bQ;>Si`Z+(9(IMM{2G$`Cnlb(8<>*{;aO4-q4niz)-SvJ4;oyq%KCuE
z_|+2H%?&QzZW~*?(#CIIrJ8&CO&T#Xv;w)x=CxQ`VyNyStUKjus>68}@d>LbV34+4
z37r=AB+tOEHM5XEGZ3`QLYIkaq|fEvIC-danJOUsG~%B+PJUJ at s{QosE0qUE?F?Nt
zh^6#E`Y-o(Nv)$^?sP>-mCLYp3~-qcNA_+d1^xG9(@4X)XVWa(ZzWr{-xXQ5_sccc
z$sF=~5&7FASlZB?_F?!Npb=fV3-9#e`Cj;~_HlPiJ_h|+Jr8lYwpS+~`&+rew>tMM
z###^VdyMw!^lk71{*CzfmsSjZzw(<3NogyvBkRHQcTZh~wQ-g9Q+iqW58>H}4_IPZ
z at 5+pTKZ*VZw+sFnY09SbTum>==@sc}_zW_Ce8=Pl_y#RTyX;c<L*sfYd!7GWu_Skh
z)-0#?k$59uo?XOTy9l}*#5X8ne5;k;IC<J*L+!Z9wnKw<@Y!~}F=gS<*jN0mt`(Yg
z-Qwal+eoTQK1tR?=r8^E>m*Jsj;;S`wtla{`X_C`daPJ_3GM7co}4S_tA6CB9FTUI
z at 2HbbTcd>$3SO$^QRgf8)^zyKr9~+8{89E3YQ%t$@6SY8#?ZYYyrYSd10V01zkdVt
zaQLp%+fnaryvrBu^c`yFaOta-fm=jx6KiqZCHqT+&gSo?)j~V@*Q4AK^~9cpzWjiU
zhZA1f_Xqon-XNLs-1#9|YYr_WesWk#s-G)n<PkoST=M<MfdpU0H&>eLB&?qqscRp}
zT}l1oCqV9$I?9x#=+UL^xkujRn=j~K-x(ND&s{yap0o|Lpk>FD`JLq5;bVkVxbE)o
z6PzP^`|tUIy0on!@N>8x`yJYSxOx=t7%&xNRJVLZxszU&ABg*?UsTAWAXB|cj!lf_
zZu2~M at oW)%s7#1~FcX?mT1TsKe2N^G%m+=$(Mh&Cd=N{6I*+s0o at 0+aaIKWk8#2E`
ztsJ*=1pXsa+B!Lf{f{>3?9;dPqKIo4OH%xY;Vl0w#=Hl1et8;M8(P}gwIPz_pK0bp
zX58Os6g{{$v;eQ_+t-F at lpX6r4SX;`OF)B~^gGJaPVb_ZYCp9lENlbc2Ogxw?sRM6
zs|)&&L}(P at L0j5Gr%^8vey%(X{M-<YKt8FnzT+!Sl>;ZVT;$g at ZU)dx6G`1T2WBGh
zmh7h3fP6xqxOrhe()s1cY5I%@@s0JnJo$Un3;)SMp44|YOUL2c*mpr66pmQk{8`|q
zEQGiBY(lONRbr!bWv)F~tz5?K6FPleaqx)`|4mj(;<l-y9<t5EE-f66oK_uVeaR~%
zw&z at 5*WfXI1!KZZ{BS@|rCH|&`v5+uMHL^ECnf$2{*Ym+NWW&@1AhmdsxMHOF=yr#
zOKF+%5;xCWc1_B0rM^bKjqt-Q_CNUQ@&wS`6ktBqa$;2eiVk|e-*@y0g+t{}jRkEt
z%%U+?C8dqhHI{+9YGBM%!?*BF;X~=Tb(cb9&#0vSBWD3~-FsXfc%_6K2mIeV3YlkU
z(86})$hML_@)YRP$HAv|H+bG_`g`TeGkVa at f$3uKr0J)vdKS;J<ut~L=O1{M#E!`=
zKwp0gevJ0)gZ#qAHemfY%dQ_;$`28vs<BI`M8XS|NlM(UIOaxY?IZlVZKQ7?_{P4W
zd3kkcUdo5;k#!rAa?52&z+l at qRu(i4*p2U#u?(C&m37$bjkOmyNX<_WoV|ls8{U$%
zy7ptgN<wUyz}G$aRAW(I$jP7rJZBGCu2aA3 at Y#az&kXq(d3-u-3EIc7*Yv>mvE44R
zv^(XR-%!>~e8==pjIvitKI%N-WiDhymXmfuYo6hB=mK^S+M>bsZ{UD*>k{52=UP11
z4?eAr>tm=gtq~mHd0u&fUXOOq(YDhH%Olrx;?IkBXP9f3Co#1Z2Rnw1y^&pCkDN(4
zo*qp>`8hp<>z(HTZohdX$;Ht3`iWBwfj8ZS;}y-hf#EO9pY*KKCk(ge{AhV-s}7ne
z_YMCip{*vN;T-Qh&ttrJ&+m8w&(C=LpqcBQ2!D;2GLE+~ApA3V9q}U{S;Z5L`vm8!
zHX`<pw~Ms%6;?O9W6IF_l3j6X#}qO0TZ0!@<ZC3s9ET*8*myt_a|U at Jvi=ZE$H6?_
zkcYECXLR(Fh}rwu7NG4j2 at Y{y(vbWulne6f738C%BK=Wc2FuS6ka5BCC;w|)K##<Z
z3uZiWR?R^UJ!dnXLC#ober at v$zxaX<o#qB%?yOc;F-CoE`55R{?;tiPgX$lmK at G;k
z-+jzO{vgboI&5bNW(1Lo%aOzR<F6nWFC}z?m5T`tsv|N&xe_$$#-DuB0OZYnB5Rf}
zAEFtE0R%ST1EQCl`Z{?YYf{?MCVWR7JHC}zXOl5sv)K6xUV-Y1PJ)d&Lwt<L*fg-;
zLScI at 2mcc~jo`8w&Y8vTVlrnJ0{bF#4jVsmPAJx=mM{0)b0S)63Vlg<1~PI#XyuQD
z&mw%z)B?Oi$-biwGIGaX^9%f1hR_b(0p=d!($grL)2b!>7NMyPq0<cSnbzq4wPOl3
z=YPG^VSWK~`9sB2vOcgj;vb+V at iO$*ZGny^0BgWVwl5FTv!G{L1plG66azivp-6vR
z8v%XIEJIdXu;JZJDubi#$p%5E&O8tDCm%5^qnLfUJAq3dmvANch%JbEd~i7hKW>u0
zwD%(SBXjjp!~p<fdw`RWKmKH$%7 at vbu>0p_`!OHD5BHOeBUAy9V>=DE+nzL^7Nr}$
zIB+7X3;0inv82F at QIC~kv%C8uV)Ek4&(X<Bzm^8dCRzto>1yRZ+|w-$H at j8u@9(0M
zweTIHY|`*K1r=*3M<gw1We``iYI8YkLFC!;)wFo<9=h<)d)j!%p~p>$co+E(M#U}7
zy%L-hcd;P>JX<)9=X+e?C7^A=xtD`eJg(3IA>ZBOYn`h$PpUBq_I?9=4 at -02p>;uH
zbAH&U2Cbs4!{`mQ7dIlu3ZYf)^WTIYO~X~cenksxxu5V9oX<gnYk}>0 at 17cX&z~bt
zz>+enO{ySxudRQUEgLLD-MO at 5L~ZVt5cktbWlmbE7!4mK<Xs{@OWMmeiMY{}I--fh
zoNQu%(N+T;Tg^l_X!XqKLaL@)N^BK}*2($dFYBd#c2nlwZ{(T!K|Ch-^g)({|G<bQ
zd20A3?mrB at ZBK@G$*(Kl#(m$SF9-1K8dKZ|*gOxt8VP#^i{q3@#=w=4PDwU$6|?vh
zJtWtfDRG2#lXNhb+9t>nKJ?K2?3fW+zx=e=9h}5 at a!#`1;g_G5xETX<eBW|nNWA8l
z4k5wNij9SD{53Q2<rNGkIBBu6c<2G^sB>PxteuB<C6u!GX|ae)vS*SpLws_wZVtv-
z6TL}A#kHRn-qv{`cZ^p_ug>ee$IZhJ<uWrBebruCZ}>YOvU$MY*-M+w%*egW1Y`r7
zgHydRAfSDmC8w)<yw-IhP}ng|?kUUOOeOOwpv%+{eD4vYpDk=Z7l0<RHrR$Pzed;*
zmLLzdgq6#05Pzj>J=nU6hHSD?G<>Bk;I$foOQs$zE6g8$i5llceB-fp89#abEqWKn
z5fc)AHd+>bR?Z7Ki8+5BIiPRqcyIm?z3Ny`#e<4d8OjQMMwa2z&wjvs%^R|5MT*ao
z_hoFsR%p2XNdV^;JXaT4fZWts$aer-G}FeP&kdF#Z}<;&9^-G4Yq)pKm3A6-&I~2|
z;zR=U>C?Z&W<39jhir?(Gih at tedTpmWFBNjX}-i)&3O#FEO3D;KDZ={2WA4*6upe&
zz*<<yq!9hxx^r{@a_;OW_MM0oks9S(V&jS|0H5%wf{Xj{otu1s`RmMiVd-zp@!SH~
z-S#mlb>8C&phwXv&oeK>hgQz{h}2CmfoR5X{Nqt^E+#nQ>qwR2lkCo50i#Mp{s`f8
z at MRUWdVV$5!fLh-=%k|`CSCy+menaOciHE{9<45RwMa{DVGQ@#)Kvc<4S{|fc2D-6
zc at f=1_x!pFHcz%}G3P_fP5V%JD>D-^E<>)t&N-LFN>fdIDQA;3lp{wQe&=Nv9Hu~w
zjZ8x|H_y<uzJOp=g1*9UgL at IWA$6U{2rK$qg1qMGtna&x+_(0m!U<eU2lV4tFy=?n
zyW$_3<{0#dbHMug+G~(+MleZ3Z7SsK;Y)|wP#EzwZKXtb2C)lxw?F%CJ^OChmoUbf
z at b11p-#r%nKOstwypmWO1;^whKQHpOfLHJNcbBl=6me%6Stm at XzvM@%74XRx8<3~T
zPVPg at gd6_CJ^$_z_LvgyD9owhnf2-&ZshB(m1nH04UxeY^YFC!&7$yEpbvZ<_5V6p
zKc4B<-<S8A+v$MtZ)b}Ljk%-XCDnQODTKaEnWCQAt!Tj5?+wio*4owDM%XG`;6vQ`
z3t+>LmRs$K5j$YFaIKnv<ArQlyL}OSSrMBeN-uZis|`K7o(zwfrU^%0iW02PUmpQK
ze4h^+Hv6v at aCS1kKpsZyAmxufKpP+@_j<p`K1X6h+Ti;s<0&3=)0gm%Gr0DH675;)
z%Fz24Dk9mKQrIYfwa^KB2sL(Oz9uFadHkNjGo4v4`!+VX2P&~H22}j((t at nr8<Ula
zLga*7zfPIwza{4<f^qf7e;957E`UF9HW^{(5WVEG`b`Deb__Wm<_i1S7*|Easo2aq
z*WRhZ0n8;E(M^zeINsJo9`q8uMrq0>x(Yl%X4aPIG>or>z=23p5uUV|sRhq!0qs18
ze<ud^tn?oo9uG0^>BP=e+zt7<uSMdkQ4Yg5D$MPL at 0V}4TS8W$pS$%u|647*5=Od`
ze_`69sDEMncen6MSUg(2I;y{g at ul@@VL!pA#j$GDTJ*ER(~f(Ja-^J(Nd3s8x&=9^
zKO8#FL;l(B%%4jdAwJmQi?l_0Yf_=~RtWxS$m+~yU at 56Rcj}q)>6y*&1&xLcOM(Ay
zoj5?AM?3TR;s~}Kl}w3-xeR#{|8n#U at Sq9~!N%<MX+mz&zx5GhUkzf2W8nAJ^83CD
z+wbM0YV>C)cjy&m9#c#3J8uYVy3@(@OB_30^at%Nd?i|d`5_ZGsTu`s7%#3p at KcTk
zhLO)A!DG~qdn4i_HO-v_Pm#BS6UaL<)W?cAoAepTfFB_yIf>{x$bA%-x0d`LjJsNn
zg{33>k}LQo7ryB-t3QDbN(q0tjqihJiN|+K@!fg&R*d(Sgp!No8NCF3E-h*1!#9H+
z&nnJ`%*DYz at O>A3ARg=kqx9ZK_-5FI3Ge2-g{>7lhQ_RLtzy*hRZ_UIhu at Nf<j~Bo
zHA=nLL_^>IhtJPw=&_%Fm>&bZU{LKD_yd0LEr4&u<mif8`x=?pnj;a~$(Sa(C*lLG
zdl7!@yK?=5k1NLcN=F3_vmlp2a at P5ZPgRE)^}4Hn#$1Vz#|Ul2nsLO}LdGM<9+HL_
zEcmQ;CUg2iWSrh%QpE^e+PedcILArio{hRS$SX_iy7x~oD$QfW0=szg$b98kd_)3Y
zwp at e$_5}veA=q+dA^*uq!+gS8qL&sA<*TmvS8=@ZlKFKPuuR_XYo6!4h1^<Yg-poj
zDL?94isRwqHD?rw8?ex|)O6j1_Xa|9n`8XEI9C0xImr84`UB#c+kxMPIA-OSTp#R_
z>*QvVawBX2pkw~w#Qv$LsoUH at OL?a#*Jb|1%|JIT;_rg&pP{+TS8J~Tud|T9%X0>A
zGwW}DsWwyV){7`R){GQWgMT=00s3bl=^yiDTA-}fz4%^dkW}xn!va3o5*I^qOWP2$
zlF5s++EnnVygAw%_03cVAU;zAdkK+GucB>I?P*#9JL57E&lwV_e~Y at U4|uAdPTgE^
zuukjHHwN{GuJNm-Q<XaW;~wMTB#CO*W|!{g()Li7hwDp+)@2&GbxP=Zx!t7QI)#^g
z`X97Xajqh%!v}e{FPwBi&b5^UqCKtfvH6u(kT_s-mv)o(;k+F<_9T83y7I>tBFAaI
zAhz at 3rH050DT%${-w|i*e26$>GBzKo)rwo at Y0ihbGw<1ef7cFw9TL;%?#TSJjt2TA
z at li&SKY>X)HPa^Nz*lRqe;{vm;h6!*5H^DQWJ^aLg0sMgvugW5`|^A)iBB at pA~g@#
zi=8UXMffZ%Rs{%uwK=pEOa at yQa2x)p3$Y=yHG3l`Y*fbwBEBI*c^!4U$Htw?5WAd<
zzI|a-txm$q`ul8CDVJ?I<<4#}?^&G`oIs05dvkmIYNLmP{w5;sM6NN~Y{-`?X5Z8Q
z*L#E}?#YRE_|Z8CCIbGaD<{d+o|}m{s0_i)+4A96c#H85#acTpBEBPjb{l*`HgBen
z+LBb>`h?N;)Mw^*K(_oWbtS83v9jY*qHIDub~o;Y4Gr;<%nf(H4zb|NphufK$4Td9
zt<BSkPyYFB$XEF1x4lYz5IK%|X_mZPLPJjSJxOqhFlXkHIph9g&cN}Soip#Vb7n5`
zMMw?3=byy(6t-aII`fj at xAP%Pt!aJL*QTN>BcsB(m*K+s5r&`7KY`<sxNjIX4{XE9
z|L+!<L%Ua*7j_F6$@a6fwARvroH-kVCKc(@-t+ at j$|9mC_<b+<>KT3-`1Uobrc(ag
zi?DgRw0#(F1Ds)0A7Ur2Y*Z;Lbo<_eFId<a#O>dOefus?1Ya>Zbb*VIXIvfp9{T$p
zw)-S at J1y*)x7ymZP7=e8tq)r-wjMn90QWS(kGPDrKgCefRb%0=<1f6NX7QZOsPFBv
zE#qj?gC<v}?b<7_$@a=^^5FUOROXc&-*p#rJ9F-c0)6|BNx9q3Nj&;Qf$zF)^4j(y
z*~lD$#S=Mv6`{WH-%Je(GqghYgsl%-FSZ`&-yUFVf<AH=T}Av$O5B|_kYCe4*A}b`
z44u`yfKJJ_Z<MYN3Kntfp<>X^B#sSx*x})qE9E#?><*FmJ4Ri+la?nAh?eiQ)AF!4
zQlE~!#5-X4^!#zd at wJCJ4mzLsotdhXVbI%+Eb5FL(>#Sv;5aK9JG|>{QEprZzlivB
z?2S6<v#>99LT}PX>}SvU7q76%LDy1?$I(gDFVInYKbL}-`b*E|t6o=l(kTT>I=}Xk
z2t2m&@aHQ$M8G_eo>C(QD8P3HGk}<lB<K)0wO+;c$|pR};#_3nEKV^Awn|MwTjliF
zW~Xf#e8ZNRtaKRX1zKk4nsys&UIO^-1jE&7?S?b`eFjH=Z at mEieDgGontP^Ai(kPS
z*-^>7^%Rchn{u{FO!BQV^MAWn`7FaTckq0QwaEs*#Az*fegMz+>%+I-_UtN?XuAvy
zwJlGFYq#`Q2aL^irJr)_KEw1^`@hHWx10{NEf;NDWAa%n at R^{$+Hw`;Rh&+gXP`V2
z<q1Bk^;cUrpuCYYfO0X)lTrSPPnP~_`@h-yp&LWHg0{*~KHo>Bzj`l)E$>D7YLvf<
za=y=E{nfj{Y`G2PX(&%e`8=N#{nZEm=Jca1sY2NyN4W^)h%=|tMh&YELSKw=^Pm&E
zZ7K5;l6XF$uj$%|>-F=3-1Xu;Zo`?dE3fSirlP+g`m(TX^{<q<H>SaNUyWGFWQ7;T
zJaTY!MWMb{{GZQ|KVTv!4RiG~rU%EtD3fC!QZ0F-mDnmbZESG&OjT}61kc+!1N)1J
zPmt`l8V?^1PHcjFywT9bVw)v1+f5-{Rkhc4H}O|9Z#w)K?|1~6<U1n6TQ8BgT249c
zp{u=0+~!SRadCZstf>rgQCKHcoO=7H;kfcr!y&ta<7Ct`v1aB`c>W~uTe3!1tl0jO
z;mrB(m;;Ft4!oI^70j;Sk>gI}+%}D at 3Sk1KJLy@bs<tpP?!hl=$({q7c;(5$-3l)A
zVtuVM*;?)Xw&9RdLS$O~)khm}-%hj-GA`~rP2}nA_v*Y~UIkuq5IYTiOeBs&_EWSh
z!inRW|A|2%`<||f+NM at 7?R7dRd)pbR6Fw5aQju+?w<tV_Z~5piNNyzf^e+}VMe=-2
zmh8q^dKt$E{`aw7`P5 at m(6KJ+Y)Dp)R at LIS$nfojWrnH?{D~K-PQ%X^_=d&{eEMky
z_<XjMtY5*?JixumoRSbHHQaCk*N&P|hH@))U4N+<w&G$n-G!WHwqiAWO$5j8C}n2o
zbwlnF9~9!xZBNJd9PV9EM0^TKjwT7{F7Z)2IkpOUjc+1PBVw>go|nP=O{8wUgzC;g
z+&#fcj^z5)*v^z at b2ousxn5yA>x=y_+D>}8Qb<?fn8?1v_4fi-lYD!p+H6y><~|>F
zA$A`0Y{NW{>D1dBf<}j|2L2K2r_16WvGFLtKbrBjOFdI at 9dcc#dIt3(c&L8 at 6G0jM
z6{iWhfg_P4>SO$Lp3aI7xB8e8$9$`wank9OQ(YwgM&bMBU8iJJ2e54PMrqxDW2=C%
z!G~{TUCA!wNqI&+lk*a5D{2-vpv;^P9_1>XuG|t`ROg(2+fNgl&*_67fgU)nWzh>D
zGkigC(&KvR4e+_1py+N+e$(H)@K9Xnj))qQX72}l<TBla7)kDiaxrk8 at T~F(+E@`Q
z*V_VDgD+=}#=e(D#YA$cz|ebz1>Bp0K3(Lt{sj`~hR|NZFJ*QsuSUm{J`}d;c*TES
zqY<CTOP=L|Ox_eLLYx7yy9DLSoLPvkAMcm-k^r`m0_9m7<CkreEg1oQg4?$-&K+GD
z(gjRH&Xo^|J^;B+UlR5oRBIhU;~#J?i(_4X;Q8TyQ%?=XAvtq?C;oVK&fF~IKavHV
zAwKwn*nxG<f~Dlz#3rL`G>x(E5-g%zMw!>Ii2DQ%U!5~g2_Ft%Js=0Ix8G-jI1hfu
zNi0I0bMu?zSrRAwPJ2)q;>#qZ5Ak1r<E=&>S=!?MZKY+PdzAwHpjpFPt<2V?{R at 7s
zb<S*B`GQkI)rNX05dWvy$WxMQ at 0@0 at sfVsjgs*FW;uq3~pTG}tLbtHdczEUfXtnaV
zQ&Q?ONX)&_$hTkyHZE at -+R_KV-x;Mnz(@ghBJxSkKtAag|I at dARW9Ne{Kg(kro4@^
zVXt7mIt$y-ZZ-LLxt$?nsqw50D$hDhBT?pXSBSfAicgr|lqi#px{rdYleC}>A4Oz0
zG_=1YF_+~kf?r|etj^Mzvs-bAmLl$YQN7zPQH1Iim$w-uKLPjk$Zxs~Z3lN9 at H(!8
zpPx&0aPSRJMJc*z(7C53&q8iMaZ at z(4GSdVCgl1i|48nOn8(K=i+ezXd5Jh;2IX6v
zga58DE?*Orob$6U?3SKQTMA%bx>R|<=N0Z5<qzLT4DRl<?UpMAUjl2Z&b{kL!}- at P
z7O98Hid>%ZsDBy{7p?SdDuSQq{e0y6%?A#$(?eS55S7+ZPae-_BF|5BHxH+ao=&d6
z7 at e`#WvkP-P(O=v!Pj3VG^Lm(^dpPVM&wcd?zLFxeZRjTuyCI$cGCi`9kx*SswDYC
z<eS=AoAsV|rE;X3w#2#k<LP^=GMn8c(hwK$GpU?Y%}pgz#PlADv#(mDT!FX}7j%Zr
zu;1N{POL9)*%EasbYj>k(MprMBrWWe@$i*6Q=(%4zMbw!ChC+yV((8~8FdQld at b2m
zN{Zd7EAutYD}T1IxEtfC+G*l?;8=J*rj{vewW%ua3dvS4N<rdd^R2ZnmRp^2z<gEH
z^|6bK9UWHe=l(Loof6}s*2EM*Pwg?KBF2ehhCTi!?g6zX_JR2s=XL1)2A>ZrWwJk?
z`zvIh>(T79aSymFV;^AbdQ5pU#>rh7!?4G1#kg=>F!XFqJbbS!l@*<$?Vz9G;*V=D
zl;5nLq4lnCXtfpJQ`;+e+FE`F at b(itW--!Wf$<Yr@|?qQH~ACe-mjKCx|Fj6*ftzR
zaI^SlOSHKDQ491op<ZGAM#-o1YZn7^BolmAT39dIbpvv4AIcn<V?CHB18vx|&xw>T
zh?XfEQkP*a|75tn{;J{r`fEfdW_8;)K*1zC-9(EU+#k>!O(;kFF|#S`n8+V~t;@oY
zH)%&u>ewiKS%OaxFy+s+C1_6~Mx)&}&T#PMjs|zx3ORDG<VBlu+c$FZk(&UrmTjcM
z!N{`K0?*BjTxdMBsR?b`&0UGPJqvyD7Vz`c97m)#d;M8Pf_#75(2t;>#sgPpGcpaa
z4S4+H1FWwB#D`VTRx3Gj$F$LNC&r8&w$zT<!c!M*OFe4X@=cyQc>?G_=hwS0 at eS7t
zW1yE!@~q({&mTCMuk9!r&z4^;j3L(y|1F$4a%NCDVs_HR2ddSNnnMp!bY#G(_ic&_
z+b0a_na9$XrqD}K{RYXS0bWWxWZs{fV$(@%#m|3~_ot?F1|o+wSU<=&pOGhtkNWOH
zKDjN$cWn6~_R!6ASDRFO5#w(+H?ODw at A)OPaFZ)?7 at i3L@8H96`N%j<<0s2%(HG80
z?>WE=x%!}4{2B5DmV(bvMG~Ins+1i&4%@Cj`x~+B?Hd^xa}heBgOM8YAB)|#W+E>_
zSAC7>o~-Tp8!)eA1g`*PSE09>L*|XP3o>U{>I!x)wGYlE{NI)E_pA#0fmwtc4dbv)
z!2Q#d$3^3;?J7ywQPDV4yC`#h3+9>wIg)w|3Bq3dhlAixZjf_km#IBE9b+QZ&x&z<
zn)hn)ZD2kKTegH8*E at s*YIXB=+k)m at wt(hoG_O7iIrlmYk|Vv*?<rr!y46H<d4YM^
z9{g#Xft(%YANrDz+eV6h%@ZHx0}ttgyyDCBLXO6{lIq4>7|*TuWammGllx+DTHH-C
zPxwz#D*nq^pF5wXT!yfm-dV at 7{t#Yi17gd!L{$MJW*{{Pa at gjjon&m|yYxOn{O<zc
z0LG_Pl#Y3nkX4C)>TZsY3NwC^l7%%0V-?$W(9i?d)MPFpFRS~i5%E}=gm=t87>!sE
zU*CL<QPTJ=Yg0!Ku)|A~m-8$!rqFL=masgg<g%X4L%jN)yIUT!i13<pjh|H&gnUFA
ziuho=KUiK=P$s9G&Z*R`*agr7&ZREk{~F-a9&XDiX-1xd`wJFA?^-f(4`ZowA4!OL
zfS3UZaQmW6na99KW8ILlIBf1Cd|(hJ;hv-UvvAMG$n%)<H?q2CCz<NrN>ext%E$d&
zf9O#HpqDHva*O;eCp$8bBVE_*?w8QHl!E at 1mtl5oMEsX1&Fpr>D;&F1pYsPD9zcB?
zkmCwi%b+1=gpa|)1py!O9QwC5XA|9p>p79<AN0sYhMx6jmO8kr6^=4VDKIX8&%<6r
zo*cFIdsFV%l_BW_+nQ60d^u5Ne5#C>nR_K<*%Aj608I7w?%kmSfbpYN>M2jd-SwxC
z(<dJF(ul*)$NUx*w-cN?jKAJm7W-%H3McT8 at s8!}`^Os2uRpcaZcqvbcyd!+bb40R
z)FsN#f&wwWlX4uq%$z>Zq&v8O9rkV5ujQp<U0a6vasm4U>`jJq>raVuYo%KEi3IIH
zt&Hr=EsO|#ojizXvi`><UEF^cyKJu^E;$+B{A0+k)H1B4uaQ2BItFZmI-5kPKf$NE
zhn~O5$WizAMDI9uO=zj2A9|L%IBzm78oLIV&QU{s_3HF__2w1{>ioX=4!!z@)rOow
z8-d|!NuxhLh at 7J2Jv90k@A(k_q}CSy{85{%)C>MT{W<SzogE*CY{*ICI`on^4Yusk
z;nXW35jf7ru}983W^3R35r`38>MTrx?~tt2FGqrQ)WJr)Y;4wGeZUdVM;;szay=H5
zQc2 at b=Ybn%ZOPal4zVjmW_RBh_{XP*%+{;lv`b$XI;P4z2}ZZG<I4~?zDEh$bJzN_
zEFW=TdMa=xH<S9X4)y12bel^EoqNHz at j;JdY`#Wxg-^aEk6!@Yr(F2hS5jXFxo#Ko
zr`e=GC~uhJ#>!zIySv^Y&c(mJMdInP9(A+-`%=D(>y>yHITpG-EWlpUsYo7 at i{MQk
zVc!gz3LjyN*=-8=7-C-zJ}e{7dQeR{;>4)4LD9E6m0&m)J1QmbokSn3W+b463c~X$
zFGmaU9~^`?#aybx at mand>uV8Dj<TDe`{Fpn&Hqezl<kO{cRMe}I(bWRUjwcOB5q4U
zeNzU%08{GNH91N2uXy$wlpQZqzvGRvS93&c*>N0iU}?o~c=mc&AM{~}aT%MF_z>7_
z65%EAGNg|6pa%)qzn1tb?)xcb9*);0-l}u=C*k~uIO~G8C|BYg9G}K<cT~-So~Y^t
zkE0xkw^4Q~1~FcB?t$arF~=MJyZ-ycv)q4=W{}g|F*wHPF1<iEa4=yc##qcEqvXm0
zl^StCIu#tVFPVspK;$j&YEF<TV(cpD@$LW*4}KbT?k^pjfoi at M{&~0F#kz`|j|5u^
zI?3Jn?$99MI3w;le=}_SBK(8>;wJpBTcDMd$RPsUZ_Z_-<l-qZ9^@b7*OG6gtBM`A
zq7Zwuuzr1utoStK>j7tw_Gh0IacxD6b{StBLNGggoXe>$CM}Kz);!+*;LDsHqrD>o
zig(fRi5G41(ok+6<~^Nt8sp|??pFdE#)Jz#%8n3{ziBhBiKz}#;@H_d$oSa56v<$n
z9@${s9S2;+<=QH{6h2ic$l;wD?$0FU$2is6Tho_o>+Hw}4?O%%)QhnIx_DDt*YVxN
zN4m8oHszk?I(mcR7OvZrWjOXybk(jcw>g!5?t at C|><c39^a`b4EH8;WtwQM=CYY(c
z)A99<cDfSuEhD!xSnOfX0Uq1#)G3{;EFYjeq*9BIJ0030{UmdL_Td{28h&0KUzr>m
zGqFE1;fO*06fnq3M;)ZK-UfkZuR$Kv+af6Cpv<R5Q$lp!-=jSpSX266kPCquEbN^w
z#JBo2Soc}YXHvk&Fd6wVwvnY?Q<iaTc+THvK=>7SCE(-S+K%T>>x2FQze~<o^s6WC
z8$D^IR?_i_as}@7M11EB^dAq{jZIj?zMn0~QX&uW0LE+If}6-g@{7U_JT>V0N7ISv
zG1-Y3F-qS2sPA!4KkgYoUZf6;1 at xt-D|J=W_bA(tm==?R@#a2qSz%}Q*O2S$JJ?!M
zvow$i-NeQVIoV0%3h01&#9oNDc`--XHhJ;7kOL_I{dPvX#Tl)=rGHxZx4uIkE|_3m
zB{SVtl0MXx-?mH2v+Pp*1H`m<9A0Y2Hx8SWfm{fJQVQP|i|-r;{XO&+rM~b}en at N=
z9eU*HSq^?qmnn#b54~N6oL~wz_Kn4 at X8YHI99AchH(E^Yuk((17kuy^{klSnekJ~_
z9AIB#%r7JL;hr`@Fs~SEUHsB+U+Li7A at q|vLNHoYD?KblE?>)o9vKw2p)V^h+hY8<
zDmAdGR$Iz`oo6W<m}|0b%;dZjx6IW3&&>G*XDpInkvY=_bKB9tQ{e0=w$t&#hJ$YH
zC}1Q1PN#D&8YP$CvdMj2(c;mn#L at U~?<qQwBjaQIo2P+G*@R;qjw5(N(2OINfyX3P
z47pbid*XgS++WJxe;D^fGHDHWY{-?huQB8a+ZgI}WI*{Yl at a!lRTzJnnCmvGAMZtu
z<{e)`CU(2~&^F2TBe2!S_y!c0vAo9He%43^|J{hTQ`mnY_?V0 at o2E3>7FOb#orxSP
z$(9tq`50GeVO!ZTq(E6Z%J?X|8PkWdLY|@-Hs7%CMXOMDBW57+jH0gs at gi+<Eg66P
zi9g2lCDy?fD#ALI<S{P$OZ*Fk5O@&JMC1RD<%!7}f;?J`@D^EXrosmS&vx^Ym6s8h
zTf>)7N4Xo6Pe4CeOTS#_{nGP<X8dy+{1|KD-+v3^=LO7Rj2%BN@|IWIVtidV4vi5J
zzQkjCcAHkB(pxf-zoie~cbfJ`Tycix0gYT0+zo?eh!;kkQ>H;b)*UT>hGyGT&bH}S
z<eMC76V=U28*EdaF3yd5Zg3BhJaffoXvl#tz0S7FAMFBNUfN?z at FntiC&mYC%ETWM
zYjkhE2JiXMw^8^La($b9XNW(>9O?=EfM6dO-d*oDBwUyP{PT3`D2=$%=&yy3aeR{=
zN9|)8aegqkAm~5Y4&GuahPw^?Ng^2sSRd5482V*#Ey)FxbNJ8of`L!ru{H21gsm`$
zrFUd)`f+e=N__3cZCi5IQ&^9d7$r?xu^zQUM)da0sdMWN78L+v7`En(>lrB<cbK74
zvujiK;M(*KyEc9P#Gmil at jurl!k at 6XGLL#P>Zk{hkq_+S0E3G7cUchkZ5jAA6Xn<0
za_Fzc7USXnm|1>*#?jc~@9Q(MHg($kV+xRy%U*G+)SB4n_mNO~W0zf$*v{Rme3qZi
zi6Q>60?@IJFoC0bMv1#xB5;SQVq7^3h5h_=rHH*|5;!Vjv;&FKkW<m=as8naV=)&>
z1+j7~<R{!aPuM+JpR$tN-}w!DKm42*4%Vd*-Wj at XV(V*RuRHmfN|OLNCT2;puApvv
zv_d(V`&L{(H=C`04qLyp!5xF^Mv3u8Y%=F+TRe2X at FC!3O?79#v7n#Si&%w+)sn?{
z7iV0eB;;On2B`;e5t|y^GbPq-bQ<cHp#Guqj$IAzsia)WmUsVI{$_)FIw_ZBU1^)7
z?VOYLSN{R~s!wPsK4$YDT9+b2o`B5kK3gs9NR*y(_<6**k!$LpZxv)a8Ru-Of5X+$
zw>jrh$L_U4er>l+V0mjXiz_B$brwfiy#+8pkdOoaTHjrK4%iD52K^^OU#4Pa<wYG;
z1;WoeO`E0q+VV)B20Au#6ymUA0ufL7sG8t(x1nqnXj=^{4_&6=3*@tovO%|e!sj)z
z$354`yn60K665XJL{$y5ka&ZFAc7N5u=IQaK~Lg^kdMKeCY0JmklRFZO%=KBGXZ%(
zWt#8U<5%+;)RPDK=GN4u`7YZGzfeyLbxE)YeAh7Qk|&FkU9bVVT5rxpRzK_ROdw;n
z&RIG!zW~pQ|5qCp{?P`+AJ1~i!9Tyk%2MqeNl{okqp+T6;D1VdHZ=c_v-gi{s_g&A
zHB`U>2NmSUwDNA<WRi#?lgQKr0e`?Y29xp2WMh%PcGwPRiuS{@LRcn9x2A+j<vq>T
z#8KWRra?q=q6{oDLQ(utxx+Rlitv422kh>B-|x at k`}lnR;Bm&;*>$dSo$GpCuOH9X
z^Y!S^vEUw#*wYHmd$&SI-(k2}{9SZ!QA!lY;{qL71l#i7Iy*Re$=LQIE|E4aoAAkb
zOBwu*uHt{&;nGFtu|YI2v>M?31xl6SpwUHqm#+EMm)kc(p8mnW&)?*-)yawOwTzc8
zX+=Jrg4jWPAumz at 4$gJm<Qkq(AiI4pjb<DkanLDSfQJP}2KQ;@?h}<~4_Y*QpY8v?
zk8^(URkWJ~nbHc3n!P-2`WH+Ykry;DV8qW#_U(L+|7 at cu{=eFo&l5jvBeVx?V9fIU
zhTCBA`RPB~STNL&qKLn=kywniQ~Dxbi08S&05^tb6WzWiVtGOa^49AXc_tlsra`nd
z|G(P0`|q}Hi^{R)OILDj{m!6H`EXmPC&^&0di_A!0%kF*@Es-#eul at Dxm8m3g8+%@
z3d1OVt&Y)k%vnx2ffm_R=}F)XCSxpTc{1n&WRLq5&zW6Vfw~4{eC~Tv{|~=UD>M!N
zzRz>r|IhD<P4=JnPcLj6`aR?FO!~k7JrDbX*8&bdSy7|i;xe3dch<xlb)7s*y%hZX
z={MPPx)$}<J|^f)j}pCHuPtH0YgB2^MDE^mB`vh1tsD4l$a}<FcEg_~QLf``?%mc7
zXA<V!;e*Xiu}?2QcTbNxrSLcS*XCanQ$Ju|avgYycU-WfxRu_06MMbF>l#BvnSO)r
zPp)4{uE+d4d=URrKfq at 6$kzkI+O?;LUWaz2mv1qC)=DR8TBvOVv#IbB$PoJ`{$EM4
zOD%=3DxFqe)B3phAN&%@zAgNke^~f@!er&?guT(X(cX7)@x?Ar at lBUgx(CO4*Y%^i
zF3l$F-w`??cvbJ%(iNy7S!$~g>N>ICv<Q|17m<%WCQeSyoyIxn0zbctnrcGeb6}_E
z|I7Or)?PE>Us@`lI^tDu`*Asp2Zigc``8uGqYvU8-ihnuA;#gE23u%t(65N^^kAOm
z3g+Xt;}}OMLsdjAk)XyLzJJNweK|Ymu0dLCgf0X=ol at n{nwR&Lr-i&v_$m&Dk~W$9
z_}vb&_LIjA+htS0y%~@MUn+^8z}G1u<Mz`o^cnR7 at _Rn2*lvl9SFVeT7oLSbJ_hfE
zYUc~THEpW2V|?x=T$g<HQJHR9{ABo8Qk9Ry?~VMLUmp2<>`U-_uTn<Fy%e_p5b9#5
zjVv5=#sV+83BD-Bp6hg3WUnzsGZ1g}@^Gf;)}yU%_<7fRx8U6%E<xv*U9V-p=Ffo)
z^izgFU%FKz)g{*+{`^_QO}5eL+&ip*&m at w*Jp3%Pq4Q)&4#IBTX;38%&=-)OQ%2+f
zbg*I`V&&RJ|3emRLN3B@|CR;Lzsi+PX7Ep05Dr-YTVZTHkp<A{7AXzL;s5Q2kx37*
zuiS=zCX4u+;6FS-d??9?<Ky#w;<HA4c|U*D>1*s+UfYOPaBihy{-+jyLw{(LuX|wB
z{xAYD*q!`oIWvO368h<m*}nE^tDdOy1c#byL(4pdmOX7<P+sq`_*OLbG&ehc9DFQ&
z_`6?n33!m7e~6eD!LRP9CGS}HYe_BYjP7(EA3du^QS5I}y)k8!tg*pI-%-E$)4(x?
z1*ii*i4G$Eg~)VDW^Njn=A@|yswdZ2QRmtQ{aUgr_M*G}$y^(9sjscdBA-=#N2*KS
z3Y1(NrFl{{xTaQaJMxM5TY<81eBd76H?JC(q5u1UW6KQ5N7odn54m}uhnxeJvE)_p
z1mauGFmL(dsOnqGamV?p9mRKp!iH_NHw>!R?S_dTklaImv*)<9sezhSXC!q+xGtKN
z`A;o0Fz?!B;NEnJrXDk-ylsyozR<ytpUtu_j$Tcr?!*%L+Nb=2O{JQ`QR4u6Q$|{V
zvFisfa2qV;x%g;@73i)bZ_rjN?TijjR~)mu>n7P_s7X)l$8QHij^X_r1?K3E;HzOB
zDa3g82QP5f3=;hrd+|NOt51%YhY`@#@15CZc-i>!x(CnN%&spE7<|Ke&Hos;T%m>z
zAHkcMb6I`HQ#?MURv+;I at k!v_s1x)&FAss3x{tW~*Yxwe0(>_(q0FZ(X!&V|%|`8_
zr5HQp%<&r$zhGdS6Pw|g!2032{I*$TFc>BtA~r4Yb*4dI8(Jf46_3IHg&Lda-`nu7
zF0F)|qM9nC+Z;IG<dnLfAhDtifrh?!X8>z84mus`0GKz7dnQU`ZsmN~%>4oL#&OSJ
z4*O%iwwj~HJp*o%I{0O}p3MNCgY?XGT5K-kt`*)NsD=;m+1$p4PU++@&KIk&xNv-6
zQc&c`niSX<Vv`2Ni<HZAGR&@bGURvY8p3&yvLHZ|iyCv4_kfdfO}lC-+mT@|dnZG=
z+#oBx0!}i!V`PWRG1B6?1 at 3+En8yB*QZ;Re2^%!X-n}yHGk?b0+1St{r4P+XR%(Hf
z|4y}0 at ipPAoRz9<8us^whJKHn#~h_rA5(H=js*56_8-K;vHu{xl7Y2T9QHY$HvqmS
z;)kCY`aRPy>x6uC$I7F(;Zr{|fy6fwfG;atcRa8N_tENV*%;j?SmS>%vyI=C-m|tL
zN3zW+hR<0f2gba_4qvvNk>DP(#<u1(<K5ExJUi~sB3}}@lspIe2A{euF7$h)fz_5i
z%EpvVhR;7)upPA+q?LCAVpZ_Jm0U-i2$vzFvD+p^-V^w31sRz0Z^(OU5C6J{_+^Hl
zaT>6}1Dt;oa{&8gPXaIs;AL<jN9y{KgO$BOBE-$p<#*vjB<F0Vm=bbifkB5ZAV=*X
z`B)M=<b3|=<E9S#{{7*HdBCS3f4LZoB8SW)%nKLxyDr%212ah8<_aQ97e2 at NbqPj-
z_!i=Ph!1jrKF0ZsAMKDhc41%a=IhR=3~4+&@(a!&4&%i~zCf%N at 4zG<{ELs+Z at 4WX
z!AjIh>rM^hC#ZjHCw^o2iYq7~Z<EBz*DxKye#$jy8#NC`$3#hhuj=ITk6wVDR-yJc
zzPwhAd-^}S&oJ%))~4 at mtWB+DC0Uz+fA?8Y*t5E~-Xnfp60oDxc{-4)%-74o<w<qW
zk5ca;Cgc&nW)1ds73z!|j3>Kv{lFjG33VfD2XQuF;RTt*ud=%u_n*(@J6-*sYc+V~
zknC8i#vUJ0)m$<H{)4kvj~GM!rqUjBpYK)pIAwI6qT<vdT`qmh+*1Xg89PDeV8 at yF
zpUjrEBcB0W-1~kpi0=#li}_VJZMkB|3<6im_C7|m2>!07ZYN^I<=(`v%J~`t;6LkP
zA45BVx-J?%ugLVc2g5StL)0oi6FOmRvmncCe<nMQhxWhFs)=6@`F=9pG2_UF{wXWD
z|BrEeNQ94g68iJ9E{4u&m%%rcZHo>2E;tnPGY$UV7}VbDM%~^j#F)x4HdtR;aILR<
zU6~QeAZ|8aaR%QH=C?$ClQu<oI&G!=0Y0Bi3lW}4TOqge2bs2DKeRszeyBx5{zv#+
zy8ed`Qc4*GGWhY1Q3Jr_xq$8IGRC;~vkcWpauK)q=N+GutU3?grmwazc`ZT6rwR=M
z*H2#YCw=L~roQo$x8*XDLw}Bym&63w7ePyy%b^9z^Nd#UP+#~UxDsQy9JmpYrVuh=
zdg%9w{jsyB4~RR$?u#D{dTNHGt)6ayy}H~hf3~O%F*U^FVu8Uq6qHN3 at p}-vYg4_#
z#qFL3CgYnK&>2}R<nlX`ycub*AEaTgh=UF6yFU!!1#D7fJN)za^I1ICC|#H6qRvT=
z10O_Y(=k at sbdi->TI~}p&cRf~g#s+cS>!vhEtcNFNc=zEV#WU^n-t%-;{Qq9_rTCt
zT!X#jyJ at F~;!&2~9uesSVnP!Zk-pD_4bo<L!Ld%v<?^&477}eGF(L1kFk6a5xm at Ls
z^)xZ)21Vj`===Zq`l0v1rcmJXc$?IL8`MkR?Aa1aYA-ao*nla6 at aq6;r2F2et>~}z
zLwT&r=C<FnrxXQTw6ry6K0c^AtLiyYt@|Y~l{spZ?&;6IG^M{Yg*qVnAa6%d^3*}#
zbzqz6j%8;&HK?Cd+M{3n#&6y&3!R>F<e<yI8#3t~2kM=i>JeKl50Im+pHyr+0^eLv
zvZgR!Z$0Hmw>Df%qaugb0BulCwuesO`qlth(Tn;!oUhR>1<!AdZqqMOgReNMP3-U1
zn&vObD`KL+DX*y@>y~ZMeFY!bN;X8-*ztm0!?x(^Dnd|4T%`MiU6FcKA6nXt{kIpq
zf~He#x*k&hPml_G1^+Y0uumKVZayTCB6ZS$r{7&QU(G}QO_$c{Q-N4ZH|A(t`Onlo
z`jW(i^>_k%!9Ax-H$ZX>uAbJho at tzabU-j4b&yt2Uju_ at ijrae7_f#OtL#A>zyou?
zoAsx at j?GdM`GGcydt$SulDP0p%=;%$@9IowK~j$=@^9wU%7Hgo^H{hTwWu<Y7jOXW
z1d_Ia-}eGmUmM>~o}-G?Hj{M#OAnnypa}?Gaazk}cooL0LbfKX2sz_ at 44+>Nc|Boe
z$Z6oYCu&>3&G7@|9^&`T_Xy?=eF6`AS~jU47t%+ at s7gyk$EAi`Pg at kyh4BS{*Koe(
zhd#T$hwn at saP01EEqwD^;Wv}|+}M(w=L{tHy&BA?2;Fg+BIr`~>Z#ju@~4zWiQOWz
z*ZQ;x=1(1y{TZ)K%UD_&c~H(QiRmKrpRcRG)p-!E>E8Wo1_F!SX3N&XrzWAA*R10i
zLMOU~<Nv<!WU9Febpx64;E;WPsyWy<u}3DT?4r}%BKdBK_hi?mZZpJ;L9W6Gj~rjr
zK+FK2`Xaa4u>HGdBvCv1VkrmWpWk&BQdf=Ifc_i}zF&afzc4jc_9WrCZ0}yHpZo>t
zCf>(2zta`)7ibet$ex at UM|9k3<~@(Ag;bwW%kMYFAkKsuVx6cDCJUJw%YO&=i<$Zc
z{<q4epv}Umui^7W*%SDTT8L~$2V at 57>@AsmLB+>?^Ko7?^)nW=C;9J8UBmI&TL_oE
zmpcBJ4%BU%`Z03d?tupZ95n==8Mz60SJ!cUH~*c;jYV(4Un-v3fLzWqMdeeIV7K-e
zQuL^qg`CruFh4}@!Y#~bYv%%;J#HU-0^o@?c~$o2H%D9r_TxC}Ek=nd+v~yK<tzFn
zY~$iO-Y&~Z$2!%Lcn9>9LZJ-$nhdhhPcc>;1lhTe|CQ=lA}fbvr?(@>4*5F)^THI|
zTwFmXB-vGuF9N<Fe(Tgl1IV`(B9D4*5o5fuai5&U=jXW3l|F5?`l#j(Nl#K#LgO~}
zBjdd)remwd5BU6KNt>q_>nl_~5URB_{QiXGAd}(c0Xy*x`a;n3+;)ixIYt8lvGIdl
z%Z)GX%D#P{q48{G at QbE&w6R^$R$z4o;tHaz{HiEx==X-3 at 6HHYAG{*Eyvk3vFzxfO
z+%y)kqKxR{alT=j)0|;NX}w|pN)r<Ki8iFz7fZ26u7)nBGrO9zldd5?Ab^fk5e59S
zPbtAeIVyk)>V*yS6l{TZ#BV%&cHwuQBQCnMbP(tA@!fbFH8_Uic#g<0=<Cza&N|`R
zBydg__X0oS3SNPG!CzB*_{dCx-Ff#1#JCP0iT6;Ut%!FAun(Ja&k(*v_4=egaF2IL
z+#SDJ_usL1k4b1p`pY2E$4H!j-@)tkn9SKB(~ysL{M_#9C9uuA*vF~w%^Q3#Fk0-v
z1y<etLd2zl-Fo?bh{4R~^f#7QB(WwSuO-2%JkL}Ax%a-hI0bv}DWR*=MtuoCaUoyB
zyBO>zKcyG!Lq4dZJbWqP;MD4e_wJvNzkT}M$ffp#M6`8o*6+je{Y^ves}n*e$lFmH
z=}XAJZ^A`G`wwhmkFj~ESq&SxN^AUSEe*VIAz}?F5 at duT_6^)1FbqYUo`CpTxsT$x
zP(S%2v74<rr-ZwA1bwW-;Zqgl3P`PdgU$n&Nu*WxE6Fn(%ju#wQJ-Qgd at sL)$MbS{
zGM;^WTo-bXK97nSe)cWUU1xx+&z;0=Zoj8G0t}m<yb*OF8(2R7DZ{tP1Mp*cPsq##
zC#L;ClniwS<Np2IgoSw4GXzg(2iETP4)V<OT=`YL`}AWW53hR#_i$G{CzeSLvVJ<~
z+qWy33`>0uV$p(3<p)v8c-J2ie<@_^=Ul%B5)dCwXcHoqEYt|*!}oN^>T)7R)3|fO
z at fvN(TV(8bkI1i+u^T864&u5k`q1JYyrT|q#_L>S=uztxCg2jtT%0QOtEYZiX|3pq
zQAX#tMmAN;bdHJ`cL$Yj>9S_DcW;o=cN1=)A129Hn8P)HwE<9D at EZRyuY!cYo8WuE
zS~(tMrxpsM6M}BKdg0fzKPh|`zUHIA^}4>k&BdzVv(Bv{oT^@5b8~WP at H*v8 at a~Dd
zt;6fCB%}uMi#weuuxXYmPs5(MgZ0b48v#2wVcgS at +jsSw-nB)Eu^xzB0-eY5iesmE
z1paS9Ucl!esQ03=GJe!|tM-{peNwmMo&MxEmEd7<tfC`$rqqlIa2!1~fb&16W>p at i
z-Q13+X5-lAc2U2ncr>_Q3c)oSavT``PcycKR4a9k)Cye%yAiqr1umS6F?S8hZ3ExM
zAU|dG8?MF(zN>N6W3EQO2`)pZn?qLScAPpiWftu6_M#N}kxqr~5<Y)KeOcLn-#4&r
z^mv?8>o*;E0(?vFqu#eaqn$^udedZbO5Iwy{w}TbW~9$Eh5#LKk^v!&qrq7{rg)I-
zjn1QPz)BXok^Ci}OT4ziY{Q{<zoYW=u9;2YAw1W)R~)Ml!w1K;&Q+9Ru at uQF>e&?N
z?FaCDODlsl(nc9_ZX~^1wUe~-c&@xI)N|PC*4p^u8?Kv5UGH%2YzVl^MiwCk*jZip
zo))&K%x|j320R#^<-TEbvBTiM#9?@A!hm7d9*6Pug%=H9;M^np7K7U!N0y)EC@@=3
zuE{h{nX9%`DGM#leKJ~Z7_)Q0IA-BR%5#dwF!8Y#Lw=LPXMv>+*R`HhgKN0Za{7Uc
z{^zEYN)t<Re3s)`e=eTINU2YZ+5=nj4!Tz}+NX{-`WL&381+v#{i$B`(}(Nl!ACUz
zlzw7I?(_;q8W6{5r-l?UrZYuS?)mRHKSNEajLJu3Q>LEDetha{*;A&zn*BG(!mKHE
z!E<4YW#BWh>#~&TT#h5++_1O$A)D^vfAC@>*A3 at zypJQvxx0^=hZ*EvM!!85 at t&eL
z{Jpf7-bC(eu{;<W_dCx0+<gOKzppZ=is7g7Pc&*Pw>FNZ at O~;kX4CO*4!gDDIYxUM
zG^jzv>mAWbwYjxP^x&@mrXB15D_$$&IQk*}W#kzE17>-_exg>d+KYXqtwI19R%YFH
zPcj_0T}yHd7J{?LeuCs8mITU?Z)oT&3A7GIgOj8rh}8Drari{YsINN4+fN+%Sl86C
z(*9MD2>eek<z9!L+Z#NZlYbu(-z at R(J4SLc?F9KvuonKJY~+1l&ngKda#wW+`5?%h
z+xohB!{vF5jBsYi`}7g7Bd)NoALsXR=Tph~da5^0BLfzxKWH^s?}!@}At#}3C at 0~;
zqKcc=%_q!;M=!hJBU2!z;G&!4xA9peSccCHau%Q02;#_jGh`sa#!;DqZ2W%#_(&<W
z$tXS5PcWNwPmrBEwkX!{zacR at NnSvV>WX(nqYnIaLZ^$;TI4 at pY?M~GfK%_?<Uht#
z72<tgJ-1_)<~jLb`EvctSdve8c-v}{yW%NI@)3Ze2s#0&Q)>wgf=-<m^eNs)ZG7J3
z4jjL9swow)Sv3BCJBMeyR}^k(?H2`oP4v5P;tTWBeQ%fujJ2$>b|ld`w8bu4TUB#A
z^r_gp at Udy%v>TWY9--{;JtI%8d?dlB%V!VAehD6(i|rD7=iF}lC#Fzv<jW{SLL2r;
zX;@R$Yr1I(tsP}*ZAS#{*CAm)5;|0i<4{A{ejq$Hn&tOIvA~)vQb*LgS_k9cANe#b
zN+LweR{eM6k5nYcf=)+)x2|MF5*sT~d>x1V#FdXWUP$Wa;_MQ{;c>3_Oq1&w5?hxA
zHHS;0+2B#6-IB!#GDXIm?5fU^5sL;9=RZUGhT32K;Tx4t#H<G{AZ_vu=uqXc62yN}
zquAIi<6Y%bxW_W|ZEX}=BNdal{x*Je9Q;_6K^2&I7ks3hv2!pVhp=vkRVCEsP`@Tu
zDDKbA!4c at 6DCq+K)o0rg<7W}$M_-QrhTk1d5MV!DP~1h2H+M7HiQNqNvr0xpUyg54
zy!n?l^?z+MAvNemIDGG|N#H9_5BXm3Vx+TLO8pt*zaQJ=nudF8)pDm=D|F&H9}Hmy
z-mI*VN?nKQs6jk~6MY&!|CXf&^>=W-mpd>2^L$Q?G?kop2CMfdXfb~C3a}9p1vkbQ
zX%g$ri$#7{5B5^3)t@{^q*nZrkeQR3G*~M=G&fufO!o?41mv0k=%r3Z5n^C?@F6!F
zZ>)U*_<%{!7bg(?mdJ%z=q{h`fbXye`bYt4OYSZTPq>BHco(CA%+2HUFpE*@>W=~^
z7em*(P8i92-*A=qu8YFS=U3(s9pkGhz{)J=ec_#gSkd38U2fJhkl6}5aKi&8_&0Fu
zflsm9kck+7O2M}zzV4yY6u|aHtt?)lG4?>esvUCQx5>4m5d0o16rYm%P{3d8;<sV1
zOVDj&U$*LcWV`_2Yr9$BusY7Ch4wsF$D>X>ugzl>{J6*R9UiODS2gvy$Kx6q+DDv?
zS6Gc)F=NbuesBjFYovEtU^kr!=4oW+G~YYK9%sTaCfd9jdY8&dN1z^F3gQpzkjvp;
z5Bih^zagLFO}-5=1aUo8-X`zY3oLf{#8Jm|+~eTg*MSQHdiy6My&Y(a<vB<!wL+$I
z!ry5R{<}tov6<=ZN6l7)gRNG-F&j9c^YnP^+dC0!$Op%-^qZGZzsg2p2%}#$zO;6!
zylY)9d@{)-=W?UFxykK)L6&liA)?%lI;;21(@<-5Id42^2j9cyAv|&5fV36{W1K74
z%tn_%ilbQZ`pF0ji*?r(D at DE74Atr?>1$Iw-=S>a<uQ34CqCw*E>FZ=Y2;Kt0$svy
zGWeSr at Z!c%!njpM1)lFk+dOyZw$d+Kw>grzv9@|%CSwiUlO*~(&oaah;KTM@#si;Z
z^ru`K8nls0YA9|g at U%7BuFvRj*@_BNMy70bGJb`kktx8BL;o9no97&nQsjIDdz)Vx
zYAiC)_sfe4;-(dD=AHw&l;k-Kl41uP7wtk#+rc19himZl!s6h+;rZrcjz#FMbJxm;
zpE--Np$?YEs85HE?g_)sI%g<vob=EC4fM~yScPW{Q2XN<$3zc!y2Iw#q}z$-ti(JM
zGAWgI+L!a44jLrn`~sUGoxG0?r@{3_iC6K2n1lF^vXOcKkMxrJ;JzQ>{{qz8g1;SO
zdXl?e6LNVTjz|2T<MBJu-Q2Z=e{ch8S#e|Y2O}QB%78mW172e%T~VYR(MoEl(E+j0
z>qq^#1>;=r;fddkNG0_*Hyvb#@iq9(UZNWyAL=4>L!);DVz6ZoW3XTM^FKhIp}?ot
zY1LVr*K|$J+1u_SCd at jWx&i06x(6aYwK11xY3LFWTN^gj?4aqPewMT0nbekHd#yaw
zFUW`P7>?ZvB_ at N)GC=<_{QnH-2Sc&k_f^$IE^7ivF5S-&N&Sci+*?;J0iT+$MjTl0
zvQ}scv2PLEIUc$Wa@~x#)}E(?;>Yk^CvcU}hiozJ2M46qk6Dr8#?(ws9+_1O!LK2@
zeZMe#_?~k%^>Q&|tH#B5=kQLb`CC-QcZVHzBdnLiAD|n#&h2Kq6QtAgYo+Fnc<8af
zD_#xtjC8 at axI%CiM-G;r3tY~{QTvY^+ at 2YTII8n_?m)SuDIf8JJn&8BaW%SuNhW!e
z#qV)=g1fbc^#L2ojQ7?ig10H-ok8HTcOLnq*gq%@`M%(S`SX9V{8w^5P}WiQ?&6U>
z0n1fCA)oP=LkC7^_-BXsp&xAe<kXjw8pz*|#D?>^8i{eCgh at RNWPi~NoTJ(*<k$IE
z>OI^HkiUoZ;7+Qitm}ry;s)LgiJv>j^V)YN%$r`rKat%rL7dwk{ATvW;FH;Rg8wEv
zkGyjaH;251Z_fTbI6vFQcgSvW=kCa_aBW`|x`OGbHt_mIBJbdFQrFb&XL7$o8Ubpg
z`B>#W3G>1n=5#mUBQ-7#S0YUUR)6$DF1GS3vFk?10GoMl<8NG?CyDqWcs&G9L+}cU
z##;Sm4I@>c{)Ton!7C)FfZymQa&(t>LN3902xDO*Qnz15t|3jZ46rd*BS$h*m_+Ug
z**iNF>&~Zy=%PpaFt08Vj1xD%Fo!NQkbA*qy(wvhKJzHS76Jd$f-%2*=m14M%pq-G
zy7#_oG5pJW<oDsX4grU at i+xiL-9z`hK!(pBkX#pK8Rn{s*sMOt|1Dqcc_By2jd5kd
z^B7}Cb~DEDBIfc;9&)-8o>zVlPVzkN0kf6B+3(1W7VeF8DA!Jn6}n`|SND<Q{7%MB
z&a)9Z!@QGZKUHT7h#!8N(3c^311*Hpz+REWVWJr9 at lD_wsi$uIT2DRSl!RE<d}(<0
zUvh(qU9Yb9kn9ugtJ2!)0v-cz>^HntLyY_VYVFv_=ttUJ8ZGkHqk;}0hP62%<=Hlj
zV|b`mxQ8E&JZZgpKm6SJwfgmsaL<xT^vL4ZQO~j!ya)$rZN#1#8RnME?Dj5N2EHd>
z`F)X3Q!@*nHTzN~3)`$;m2T<o^VRjz<C7e*0m~lOn|17x)Tt`HR_&OR9XAKEj_ms!
zJ_h%*2!epeA<z64SFe38iIwt&@)|yE9sFAc^!DLcDe4Xk&Pg8npPwrqfNpQD(CTbt
z4^}PY@<+^=e~Y>KcN4N}y5!*ExmXtyh<>kZR+SeYqY0*x<TXr}m_#o<{M^)#u9ujA
zv%9x(H#b+K$XumNcpuX5E)hJL$78@^Bk#RrMx<+`H99hwK2w35QSbnqsR(~j_+iZp
zI+ti-)_2fTJ27qvB)>g8R#-`NEdCYjU&}Gy4}a#5IPu_Itm~1<&@1A|_X~e{sIx;q
zv<}P8ee_Jp=h(AP0bAvuNj~B~<yUJKAtoG=bUl6^8Sm*QpI8jM=J-Xwk^2FE at N2LL
z`{4rAkcvZpVme5F?vZ{yo&}wk<eS_g`T0bLq+bIkZSP1ck+)$Fz|H1CMREFcH+)Z<
zAAw)b8!jU9{&4MA at X7oKw#RU@{RZB{Qn%hAzYNKbw!aazRCzGgp=h2Whb&wcE#qIw
zcJNQg?s4xrFX#s1O at kz_z2tFTFE0l+EY>jpTiBs-SSQCI+aq*!q3)AIa<6i>=3X)e
zcs3!)8Hc{>;dvQ3&$v%Gcpf-C|8b^{vxQqAkC8V3+@=ola4&SaKVq~G_1n)z4(qp(
z&~M)@3ZIX7+Snf0dR^ved|dwmFI-+v&4cXXV@}#q%q~NAQV)NSa2P&wo?vcF?gV>>
zwUm8&v at L<x8oaQ*+jiu1mrdH<?UJ7EVvh!)jzeiT>^;qpzFF1zZlt-QFFVoBV=Aw(
zdB|nRvv&WQmf&Er<jDQJ*dH!qfH?(kx>)ypHTc8B7u9<-20(96BgbA-?>eR;dd4e1
z5q)qZ;jk6cA>^6YcJhSgXt(z<=Vyg#brQ5IgRc`fneVf)KGxaO3qJ-|!#BBSMmhpg
zhxAFer$}2Xy!h^rNy%2(ub6*ck??`mfeWH4&q>BBa7)LP(i5mBs)@!PRtavzaq|e)
zllu+inAfAY-U)rpX033D3UB0|;oh+eYn$LGSnRuPX%ppl^eMVu@!J{Xw}RN{wi?+y
zmXgOg^p1V~56@$aD%iDN9>Z+}%!A*u`8DkIsC!@+L!T2^9L$b->U?}$Cvu=%$V+JA
zKW1*=uyTqwjC}WE6FnY2xbcOz`1=&6L;b?x7hmuT=__#23XI!|q4)4_d|f!|ne;5c
ze(k3-fD7RF+=uy1PkVXDwp(i2Iov()^e5%O;pv`){Nd_ndY`Pqm?uFFq%{tWKi0}^
z`ES85Lss12WW^FPhv#N;Ij<asC%8_yWOyBK$Gr;R+a`1F0>QYB(GdO>B1Z at oV?E)T
zxmJ64;j-|UdTQ>iq<epvgOF=(?=xy;L#;l{Z}D^1hUlg6$Lxa-du~Us&ntP(Qy=Sg
zLf$Rq<lP;}v}cGsgHK+HcjZ~{G3hnPtu*Ld?@8Jcq|vg3d3gUMUw4Mw$iE^Za)WzM
z<a|^W-tDKHe$_<mB*<`=(>D%zSGb-hZzp4t at Gp4>Pi#HfxrFRz*yG6WN}%_i6S`uh
z)?Riwx1YgJE&LFB37$`LNs#zZXG1#ys6&o>4t*cDMDP~Ia+!Pp&k)5u!*1;TdQAtx
z?74G$H{q!yGAd~R^-t$+EQ8EhW^&z5)f7VZU*Y73dsr`D0r_zXd>qMY_?F&F)MvZ}
z{_FY?KBMDU;1CeYBp6tplUyHc!gav?)asc at TgrK`Eh;#iFkPmoA$DNl4sa~)8!f~f
zbFqmg*9{K;OZpLqcj!5Os2|FMPO0urqqLl~*#^6-mo8V-glB at Iai8+w#&Z02nQ7bY
zEaky#$a#S-hMYy;KVqdpol$B-U&&M86yD(WzLU{)nbUn?W9mNPI3+$ry;UjVQ9Ijf
z*nhe+O3`GyD#-9-iNMfUGUsV)t^TPMXb0Fl-<#yUxTiqINi+NP85txteNr!tCC7gV
zUaY77ScyL+{&N3}UA#u*I;l;GF>3I*L!M{s7qI(@?(#EqmtXL1INgQs4j=dU1vl~k
zJfh3+-66}(vOjR|-#NWy0nt;m2L$Ve<a~{ka!t)u9>hDp)FCOG5DxC4vAObJFlXlS
zh024XiAvejMZ~wTfZUVAwe~!ZdHI^8ZAfk?b}~x}SMuGPI<c?SJS7^^;khw$SU<5R
z6P}T5a5Tc^EGKj171T=L@=_0q{dqUQVSmOGoRyP3l?O?zNu0uTgcc0%QCZv`_27TL
zdo}7m{Q2%H`0j)&0Jfkwtk)T$yT^8ce-L}3j~E<-WN-Y~r*O?v$S-;{=`+Y`2V(pK
zsQ2^$wtat1%l1s at i-peP&=*@u&p}@-v_DA=ta+xmj7^uEjCuv1!z3re6YHrv|FFDv
zQyM^3rBF@!%g4K`sx`_Z2Yf8V=762ys7lcufem5~nlE>Zm*!qKh)zKl-g)xq{?hA#
zsgE27CUGFtllmEZ@(kE30kwyBB<Ecq<Ev<%nu+?nL-vYqmDF)l at Hzf}NltkmBRJa6
zqu!m*L;mW<F~oO!t`GJ15_}7)r0O5BNA##Nd6%(wKE|DkQP%}*P#qi6k=<_d2b8->
zuEOA>ypzlro`xwfzJVI|h>b=%u?EaM5y at 51MGNxlsoy?<jLk?G;6cXl9*^r0Y=Ta=
zO<5M7N_1QXYfd{uu$VjQ1&J76-=tq*(?rHg2`)O)LFO9TdU9C*`wzLm+-C4DMxP}*
zJ at -7|;M%wuHjC>V_<;Z8dD`(jg~QMDZ9u-tJp4TThtFe-{GGiTAL;ye{}Vd6elL|@
z99k1H^q2M(h%vTF*#ACHy7QOkC=<kDUVIMyTVJ&6fA2r<9{Pt^FPEc%>o%Sx at h{7X
z|LW_H=<DUbjQtlweSKuz!@idIx{N1B*!xQ2Pv}aBJ;T`y7~2ozKi3|9-va%{CS1>8
zT@)lf9P@{3ndAVBT`s>xjy$LQ4|4RJB){S at I;jhNcW~E%NBQAe|I7H3wVKZ$SMHJ5
zHHD~0F+7im9lGgR$RC&G at _#-H(}q25)_;%t$ej<L#VGl`{J+K>ee&@5ALIV>pX0vi
zuj9^$xN+Y^#(lHoe;;=;4x8TnGdJe2g-`nW-Tr!yZ%01FJW>IO-P9tU^U0QiyjG&W
z99l>@s}E8h at cXk)5f#P%!7_pt?Qx at b17Ab1Zt2jQ5ARKLinx3SJD0y8J^nl}nfJJJ
zEB6eYJG^%lcfT7va5L*_5zBdCkJJ4D?sGdIoCv^Du$;dow$uge*<F%PVIwx>Anx;W
zy~l{N<e1bg4pE#zygx?#c;rIyl*kvve~Sc9-ilQIAoS<+xb9hk_di~QarhuKXo&Mf
zEroB_54K at Fd_=O6E_NAkX?#mPbDlgyP?$mSx*c^4&T#Sa80ZTZE#D4uye*nux@>a+
z-kmQOON=Hy7x-Te!tWAyakM%`)pN>Sw*m8EyxvDg_Lz6zdv~22MeV_7CQ5 at m#kcD{
z9{mQmEZAhKg|IK52R0$qi%FOixPqT6oHxV=qE;vUL3FhQPPal%ObGO`Tf?#SPoeLd
zysg9g1<_Gg#3AM~c4lxsS&Qpi1xKI at 4=AINchKaykmv=_8Hug_*7TFuXJk{C$$v*&
z-o=h5aiBOiahBp)a&7Llf9rwydP|vI1iT2aB8AOZ+iI+*9Yp>RorZyZq$!AkY<d)U
zY1pX}PLD($2lO+KF(!N`!u|fi*{M-Oa!OMGy`TraYLnUznDX>dx#+_-7Pv3Iwz0xT
z4}8nvy-8KVS9z!n at TSjxsx465Zl_b@oSW5_oq4H#3Fc^Dt7<a*^M%Icz at 9=sH0}l#
zw!*Nmp8Bykip4%?O;cg7Ed(FxQoPHTk_JNk@%#nA!6*2(5F9-5$K$t<jf67;*y$`U
zE%BASnMpXMgh_%pFYU6`jh9&|En4#1Y;y&pvn~0<dhJ!&NIT}EGrv{1DgH8Wve4VH
zS60wv*bilRKMvikYO&4{&cKG2!hX&ue83Y(OwIu6fv1?!fn(qpVxL1cbqlaLidT7|
ze$cZOy1T>gwGbRmMWKG!@2^YR)P4jrbF|Oit-Ax?_0RCb*TDxMCc5=ck4ZktZ;7}|
z&Lw6AJ#A2q(HO>!*QiQ{+qYV3TA`-{TgRSs>FnhhrQ>U)s}Ua}xV1P(@XI78Ty=!_
zlz>+waY3wO<f7~*Ht)(sL<gYDf$Pq&b{iySS9q4>D8XiX=2|P9S=I_ehP9$o(%~qT
z4xL9HXlSkeq*)(PjJT!64vv{F{t3Jn5%Aq|T$^m&#fp^+;9s|M*ldxtqFDwG)Az}H
zfG?cfOWfh|DU%$nm6nI-aUFOfNIN~uU#}&8g&$A at Uh;DtT^?r_uL2G}BS?iDtgCUn
zde at B^(VvDV3lE7?;S<Y%?^8qB$oUg{a9$(7p^u<$>La$@)<^1)Uq``5pzBPKMtvHp
zjs8?GRo_S7uO&!}3PQC}H)2=uTy7~O7Rx;oI4YsD*2uvdSIlFiz#p%xr at Cq4|3{y`
z8}h}IS}k-zz3XHG><T`fH^%ZHK`LqEcrf6{xRfM6hH>dOqzjMeGj_8U`KgV}Cb^wE
zs_UsPi~KCtuNceFcZ_^wf;+Lts at UxZfZ;(b>(XyTo|O|^O*bnK`(Xp}l`biHu7qv!
zE8<lO9c)tI@{a=h1n!OT=*uX)FA;LY5FbGeD`1_z`PtiP_;I^$ShZ>)!AQ}cr;U;1
zVQ#yevARL=h_IEw>jUe0l+~x|5dSZ+9g<Qe;!_a-^Go|RU1g<>4b2O%4o8w&^Qb9*
zjP4`YH|X03fp at vf-$Zxf^8wf^ft<Z^g7_W4rx!@pT-YkTbQ{{Yur>bh)1+E at u*SmB
zb}Rb>a at YJU+s0)m#)4PcWe6E_#rZAO16=>PVVwUrbQzxaOU0oCr?t|s8S5uP2jAYu
z6OfDMFu0!@$SH3x1Lu5ibuV=nxoN=losk+uKXRN+366T#`M#uU at k=HQ07nLX^T?M@
zx-9ljked}eR+uM1%<9r at wC!lT>zy9i%HL#x{Aq0KIcT}=N+t4vzH5qq)q~$p_r+@)
zTSiJP*LzdxyNNBr0`D?#>Ur}_&t~(ETk?C5i)#9KgOuQDlBptp<XIen-0?PaZhwx9
z1 at z?_MPF#pbR$0y9DwCXi1qNhDk7<Mz=z*4L{!*kCAU}8OJBfxF|gaqt>3b;MRq)o
z3D`p9cO#~GqWBv&)}nG|>U!1R5{^*I)^Qn at vgQnajX^l^3gUNtD&Ebq0jZ_TAu72}
zzuvg*+(FCM!c=^IRoAMvw0Gz0)pHEYiNTH+-ltXHsvn;ts_Lv=k@$e0L-43=Tk{Zy
z$Q4Q21X=YS0zLK+F*yfZcu0WDJk7TX^7vqAP*{&?iRLcG#9)$ccQ;56Ig$4^NKI(G
zKcH83P~#gN7$;S0szsF|LcDGSk=xWReGFyew}hS4=K_C=njClk)p7lvigM(vhQ4?T
zdemwXuTk$oz8sk|dXx5558!<<AGZxwF|W#~N09T<B4_bAfcspAyc9Ag-NRl6PLTAc
z%Dlw)0CMtBbC$Yx<e;t~2w0CkV1YX`<pc1)41$A^$Ri?Wkk^8>Afu5t<NFcuUxTZu
zmCYK;$uw{D{RlcPIE4&-SU0qIBIYT%z9ocCn}`@veox}8M2%|(_>n9x^dw at h`CtOU
z;kj8{%aWRIvwC_%O`ICFGklzcqiU at i^ep7Fko%aUd_Usn0H2ZtZtmcww)g%n`5f=r
zf%Q<vl3e~2;|FWqV8_Sku8aS%^t!iH at +Dn{>q2>hu|oJTM2elY`sZE`^(OgGT$^ol
zjk1s~3;SvY!B`rIuL!b8VCm!M#PyTwYqZ<PKFm{DJ67Ij@&lLAL~t4LeGi2O6QANA
zrK%%{Pf3*(X=xf6kqx3T(G_BUDN2iF*%^OB^Y&fQh+Fu6jPa_*b5wA=DO%kiT|RvV
z{V3T-(kcSB=U%Oq?k~o8oZ$E at B{z}BPjdX_J;0Xt9s<6c9|)e)Wy-p6)Fs}Z6W2X2
z9s4D?ddT;P`2s^yJ3w&gD!F=wAQ``xDNiuk%5K{&_zH8{6>PdCCoMyH0vOW!!B6v=
z=?HT at Y}4!NGl`BvbxFvTEmZ&qFlemP4C<eI`wDNT{2KC-V!}zz&H~+;TK(Vn;hD-4
z<onL9(im`n<#?k#CSUQ+pKX1U=rGpJ8mw6cUiSGsr}6BPL35Mueyo9`Ouq6xw6_wu
zq#p%rH}w7Fp>h;`DDT<wUf at fJXQAd>IqEN)x^HJGDtQD)cnrRkHr*~;gYlnh-Kla$
zVm`};bo8pvPMw+S23=*O^sGU#WI(lN=_OfmlKqf0$wlzQ;Zkt^bfX{OxMclH*Uyb_
z?>0*(U#?Nizhj8y^#SkEWr#U5pyFG*d(zvxd-RF at Y;0-Lj0|40v9Ne+1#Ht!|I)QY
z7sGqoPx2vRwbR0Z&v0;jvE#Wt;p(+m-TjJ~?H<)BULI6>;|=d=%4|w*c2#9?I6;?b
z684E)U4J#><$>IWF_}NBSmz?$asGPFcLc0Si5>H2f9M3_PYV0o@=A{}MIPNs+7*vz
zN3EutkUR9<wE091QUT)R=r;RV9s95!)_klFPsq}dVc$6msq4V~4A7#5PSp0fL6N?U
zZEUc$Sn4&A^c>W0=rJnO2L)Leo3q6CVXl8N)6(tgrRP*Ay*#RCczO6VVf~DRPPksu
z7L@@UNNkCVzVFtHx`fNgy6aso`O2U=GeGiv=*h|q)t-9l>=wu<$Y^t;?|yz@`_5(9
zA8fZK&z%7-H{bxfH at t1C$df7-^Dl#|^Eu4D=eAu5250o&c+j~Q=xpKQ;$GIz?Y=<7
z9k0eRyc3}ld6Nb4Xs033ZWrjD5X9t#RRbdj4&*kp*~)PsYk{L=z=8bayS-d{Ip8Ti
z66ix`8E$TWoYXf?cSdbghy&EQ_rV{6_t);CWqG~jpB`?;I{c at Au~zm$uQJ4Z0#2 at 3
zu8O)@u7K at C?iz0X*SysFJBu<#9&gn8KWNl?JB$2HZJI2|=aCv=KtXPcKBm$Nj6o#o
zWg_nE`xSkh at Su_SyZQ}0Zx?6(FkF3X at TEb{pjI}gy9jI?&XRgdlM1;&#_#}sf6zSD
zw+h(x*~m}4w|2BLI&Be-V?w&BW2iebVxixZC-o5 at Hu5oYaQ$aIzxolLzvKLKdmOCV
zc(33?<%KA44?5G89R?BQB>DwnD&f}zBv<YI*+e&o{*t2-DLOb_y*jeb5MOh|U`>(Q
zgL*w;3tgT>Y=r&P1>>c)BkNsVQ=lU*4?AO&?(C0BhP~oxU{7Dd-;YEu#r?$aqh=}B
z3BcF4)(tu(`1sbkK~K&ianzpUz$e;if4q0>SHOnvC-MQD+|Y~S9z4Xwuk|FhW??^a
zg at DKP{Rp<KgX}R;V#2{)DIn(wM>2mjvC$--A#ZXS*+)8YL|==Mvw_^qQbn+hJGTZt
z{_CuwG{>0YzLoI<R^;rI&l6&qR$RX!A(nTZj-;5h2}2m9nnq%q<v$NSY<f`&&xAPh
z^xzqUiz0aBP at W<AUh at ROB^{fmDGZ;aF%kXhUKMbiIjAQeqPsI^y<!IZcb7xGVK2hI
zx6#V;p`(3Fq28;{L-#rvgnIBa{PuJ*_4TSz7u_{a=Gv>I#r~@%<~0Y#S$b}w9^8?G
z at 6-pSAqQCSXAUrH3jb+;mGIsDT3#T)YERp9m9SmN{`Wlc^(R)7oM|DMKO|;<;TcK@
zEMz9QdSEMFbkqEuDhw0_^+lzQ)C|A(yQ(1E`|r7ZCIvWsnGrlg+%_lG6Lo%L!CnQu
zG-Nxtvg%=L4&7rc;b6rcPs4}o&(!eOYYI`ntSgisW<!owH?Uc~^sai3pAvu-JN%jt
zr at sSF@a6NsVG*qLX3UFt<+qrBxBv1#!CvEk*iL2KUS=2P5c`D0_ibr&V)Bj#iHtW&
z?`sOTc;{6yDX4vyig-DfORGUn0BX{TbuRnAFel-QhnybDr}fq~*uJRRPwmJUw7f{q
zB)qUS+B=s~JH8OMn at h|O(vUetxdru+oVK-Im`})2;438mqK_q=4{j+ou}d23^AwHk
zh&>;qf9<&5qj%d&&6M_=3Q8ewid~c&uw{wnR^&22Ffr=4tC%<beJ&GNxI{%E at RK(<
zy$~@t)c?KeEYw|(guSaF{T1taZ8ws-+3M1zLEL9v+XQXAjg@&nMsQug5TM>MWW)n6
zIzARP#-%<>;|VYO4RA7~Y%Z`Y?lFolMct^$#QJ$5<UaA)`!o!3iI06rQ-Ijer&v3?
zRF??ub=mjGLAyip&yag|2cO%GjAa0y+sWtPqkG!u^$M+1sk?toLET2|;2yra70Smm
z%JJP|#Z0`X8<0gpg4f)>E6Iws%aQAHyh?#wm+!*9PV>Y*EJUtL0CHW-$aOh~To+1`
zS0h(HMJ>h{L(YTCVJ7V6I~-T>Qb`^#-gU at _{$WlsxT~ZwEa5qYj~kzdZ6%%(Ivn)?
zYrh<N at 0U21flH*<=}-L>>rB3f<By`r$pbiE5<QyS;{@-Y=&=lNWWr`BgP(%%y<=^j
z{{;7+A^FTM)y12$4RcY4>^iHpT5P-JGsxV-dKkpB3yn%)KluB|=Xr;eNv>-+&Pi5i
zS*BDGEvAkGi+2ZDyyKAP$s|wnLUZE1P(Jpj^2CAQ6<F&_d95TK34K<GzU~4ZxSNdy
z7C%R4QkU!6)U8X}SwEkgxkdPY*TQBt#%DZq5Nma;E)crd4Uz|k_hEfDP2p9gpmb^9
zNor#QFqh<EpJ6WD4gDTEbV^49EeOdA<wqa8riFgs4Oy9n`5OtF`mRrFwP2PjID!(g
z;0n(9x_x1|H1YCcHFX{`u_ZJ}k;ddxtjdm@=9YSwQ6u>bIvbBaOF21w;prUq1<Qqm
zOp2YgoM&P-Q{{9ku33O<i0-&o&N4;A=dzJs<{RB&5KZgJS%NwFN3?_Jeui<v0sgFw
z+D^aHHL(Fp3~Wki4r)s at aJr?L=xd2hq%H6b5Sg7b=M{|IH;QSH!!L$<bK_`(UYHX_
z){9<UM)Y%hm&mOlNmv~#)eXQO{VVYgL?tULP%}BMC}ppU?uxuYI0MaTqq>Og{7M|`
z6W};)_tB2jtN|B(9q<8G(jO+ at +=l-2+RPoTwzEkWA#YsBb#(PWPIji~2132bc#u6}
zsv-F8DTcqa**7;0I#V5wHEOA?Xlre_Som>#qOu{Bk$fe-sH{-cEgM{SE3YPSQAdl<
zM>xvE5RV5Qd69LSGt;`QFZrf}7L9y>xCn5o&|9S2rZoz7x?oQ^kzegn-?Zv_V=*>l
z46>o$X93e4js5|fa$O9ruvEr($zoDxMq(W)i+h0aX%7BW`5yo4Bs=yd<W3Lmg?tUL
z0m!8iWD~#Zh)JmH#PT(pdqYR>>0#3qI~TN({cQ3E#F4**-uVHkAq8GXf8uW_sZ(C4
zYN65>K0Dj>!iKp44CG?9le!UF(CBQI(v8Nt3H{(=ZHuB3k4y|u9R+{QM+RBafNEjf
z^=j8F*UCq&GP_7?6{Koghuhyn&ysu&Uv3dUA_)7T&&sKyN|m}!-p49 at a+vW{fzjW6
zD?6ri<;hVN at Iqr8>QG}tBl(!fOXw%NNqtn<qOF|#msa-Lek(r4#sXI()m7Vm!~Pdd
z2RbL}c9Z*o6ZJg7wo%VS4yyf7dytv!0)DqOv_RV`m}G7loh|unR%~K- at Ta_H{w!Ww
zm9$iqJz;o{dzN|+`S8C8RM<c2c!s~|3u^v3?Bf|2Uq$J%nX<|@+aHN{k^h67v7t3#
zu%a&g0OIzgT-^Q{<U-+nR2lYbE#EXF-zw$2`_AF<*iB!Qn6#U<$3wj<WwxIrpItkv
zvu#$s1ilqA at 3mp@57>jr{o>49{j=xaP2eFGzMOog=>qRy9ehC~|3rkp-Pohs*jQd6
zJ4#mvTP1>3mNKxFj@!zY9EZ)5GxueUYi)KO6PSL}M2kAgOZVr^4$QQ6TQjVtc8RsS
zQDi;!{d&ynU5h$k`;1owCtd`9>Ilfe)`#-wxojeL3I`U)@2O{(N8W;6a!;^a;gxTl
zof6#U<*|4%&dVcj;QZZCKDaz%N+aM8CAK>7Wj&}3Evcnzxb<CC9Y@`*@q6KpVPbJ#
zu6oIrnClEU4gLiisn=Pc``MYQyK_nezdiA_rwLOSsqm$$NL{*We$sF8OWa!Ho8U)A
zEH7aR>d+&03;)HfwNc7Q!Ln$B;45?QgX|<5c<aFh>AM>|1bxO7tiJ?vYhO0cK1=)X
zdiX)0SFDYSbn&YttxK28Y94+!+hD^V3iV at bf-K4@$oR|k8S=-V|5T{`;U_ at cQ(fm{
zHI6p+Gw)N!joON>*dx|Wi$QF{T-DrMw8jAZL=LO<i9A)HQ(^C(h55hnlniSiCy&K<
zH1x}9oS*M)Wd_NWb9TdS6XW_+-7cpX`L#Qa4z64sXAfQkT_L#`ToiG?1TTsMW{A4X
z_!goL;0JxEh0$$$FYiK78uGbfN at sa~#?1AcCx1Y$f$!xJ?)y4kxaSMRhAaHN#!v0?
zkq4dkTp}@{Kk&&`_Nd?UQbPw0C-RtlZ<GdX<z(j>FOT?G$yZpTvz*{KaW0_x^7TRI
zedHFWU8MVhRv?E;q_z$FKK7|fi2od%HsCc>*WEPIdUM>(5MFPm*oWX{K4F(hzRaD)
z`AI4bFY3B{HgbKKWt^|-=dW4RXPCbbb~x}(k?r5G=}m3VFSWEjAUWHR$HZU2XovLn
ze0}>BeD8X0sm0}#!@rAqhn$_d$SSjD-Rxn(ae{d*!@M5+K6BW1z0TRLu^97EZp=|$
ztNKNqN3}2I0X`LQG8$5d9Yt_i!G2!!vg~1bFw61{8%Hq55x;YKHslzwe|s`4#<`h+
zcbWIVGa%zV=eZ*BQ}DMaqdj;AK_+?s){fpR_!KgR`hH5PJ}Q`~YqOn=y<3f3`kBk|
zT{b6UnvE&Et;~mzCuii}8$?8oCfyr)$B<!>qz+6m>nT6&@@WB{mb~veFONAA9Dm^U
z&2{`WWDkJdj_2Xe!gYn<Mos3OC(nlGIz2qEKLjV}=gfP^EqLyO2gr4Sj^#5Gd0{T~
z4tWpSAp7i0uKgW(ErAl{Yfi1s${&<ifrSVl`@&Ciz!4inO@#e|`UE9iMqzjVsYo4@
zAVscdi?U=$k9a6g;me<c_p%E6bZxto9)4dx%E1|uavHp`ShInsGta;mAViIsP(6wJ
z<%6RizRGIy`E7lui5$1<GmeqttA;|$fa=V$R&M;W6*MD(K2 at h^HOh?rSYPW9 at 8NPD
zC<Ss=Ne=Ej at QtVxbhU81hjSFQf5VPF74%5?r@<FcBNqFPF_zlesr6Z5h~xY}cWi0O
z5+iExK^_UGNQ9 at 6)4G5sm49xOb at xZ5E@FqClh-eJ8P^Go{hz>3-WgFU1lP|u{ORPq
zEb=nMp^t8fcefbwCIl at 9U(m)y10DHCf6;5Vvl!nMOa}IO5&Aw}*PyO5A2es1uWty!
zbNtZJtv;J_o$;HpUO at 1T@VfwOwk7xi{4UqHxx0weYK5#P`ee7dCDBSaIOsCy9;1~N
ztRHm|Jnn;bEfo(=j0e#fF*f6<tNqW3_L}J1@<HX>!S)GlD%AGa+eY73RzR00JRIPz
zLY{GK-bL_X)v;C|CJ-2<3p+aM)o-JYfIl at 5B)VC{roeYSQRhUy=m2UAw$f$u9ie==
zgTF#j>+C`fN=u1J|MOcto?_Yeg7wxdzh?QC9vMUR9uZN!`FdH4AQyaA1;mC4>w~@<
z2dsjP?9V>m!6uiMMuvlHlH>M#S at PM$0;~yx%6>>m^@5YHo=&aA|KN}Tp5Cxv-2gp_
z+Kc!*kCuR!XEHDc6Ey)^nfys at iaex7q4O|}f=)GNOw$$y^}u7)gMEIwUdmwlwn!=;
zK{XE7&3eh?>XUZ3N|lnM;B&d^EuG3Rt&lURyaHKyKmqo?K&HUj at ThD;Im_5Qpocy|
zFkaZphWxbxU5%QVx?Q%`66X*pDnlPjvVp5*p(#aHQIwT^4jkCmYvObcr at QWpDp~2(
zDGHsHmM^<39#o9YnRKQtTr*96l1{oPTQfC@@O|)~L~LuxgeKf)X;dOOv5DRh0evX0
zbX}FOR2BR-$r&xaLhK048O#@~*)zO;?_-oKmX-e<+%#C9ihQSlx)m-8DxQ-pw_}fW
z&dH>Zw`08Z%0 at TTJ{Wb0 at EE_M;668~we=nf3+%Yx;yxyF51j9Vh_`Md at m4l#SoZO}
zJb0lJ6ZYW-V2!?X25k2rIUDcsf}RfbYpfXNQYf?kg-hYR*+X0kH=mGvImD&#M>%rc
zz*FDImPy?lCj~m2DdU!_NQPXeB*|A*ekJx;HQI~-C!jj|VsMf2kvR2G+#WLXDdfW2
zkc)KR+(hz`j`RSRB!mwsg5-Q`uRu;Vv4MX<JBsag*q!TPcWz2+EN-LYLe^j{bfj6}
ztB{B2Ie!B%@f;3(6&GJWi!}gW3FniVjW#3k$N5g6uN+9s4|f at 4O#`ZQ$ft9NS<ahb
zOY9-fguecb)B{zXt8OqtFE344xj7LzPMCKw?$a92PIFb;px?wmzljOyt9DSm#194D
z_Pf|05~H&hJ;0oQF<fLWGiS<sAV&rT;IAO|O^_tAw<i5P4 at xd9n7CR|7`Wi(Ra#{2
z{ywAQs?T0vXJyuPKS-k6U?VpOmPfb2f6+kVaRQth{@fjh_d4ph@*KG*ot)@o7~l#H
zDbF!l#LF6#7R<4CJ0$zd!bMF3K6*8c96nck2JyA+sbDkAj>c at _>l<~Av!NCZU6a%T
zIVwRL#Gd+{<WFqRFsChT;Bbzqqjq4g`lVKC{Di}_!=LNp75{KQNr1itUlh2vMiSo+
z6{!Z#mwxHCCipkZ{57ySB^LYK%%Ho#yL}5RGIcI7?7Pkg#8X$1{b8?+l at R?ssW1Pc
z at H%(@2FQ$<(v^^<s}o}J{j1<FiG_|K^;wUj2}c$3rm&a6j^lW5!oG{sl6)!UJQDv#
z9xb=G at Ygi9*;;V_42yk3>f|oil;k|HF3?l5!@i^LMYrX+|LG?-1Z*e%b;FnN2ivRS
zbb|u%xHnY1j&Ay8lhc)&7gm&lBW$&e#Up{y82wcB80^OZoS*u?YxTwK>#cweFu`g0
zWLcu++al4;`eo7~KRthqrGAAk9c5rf?}VM9 at LaCDrarTX^<0QrD@^;KK-Ac67t!ls
z!^@1Ld8o;$t5$!r7~f$Y$;_?hOmi<2($o#zsQX2E(20CK-kF*BZDBj4j_M6g<b3pq
zbxCUB$7`ceW7&4IeHUUPbHkxa!>8`*gP;B;cv^e2rk}u`GLY*wdAI5fsgt)8n4R>d
z2Iyt=sEaslW*mI+%ytj>;yM5R`sK*~8(IhaMuktWk#X-8WOMsGd51mx=_PIK>)^i)
zHoS(p(2QCGz&@fsDOHB%qRj<}OFY0n*`Zf#yGZ7(PoMk-?HG3fHI;wUPkOr#-~B%H
zPK$cM?RbWX1b*e8 at _YJ8+xmcI{s6v#U!pQNJn-?_!_~h-E*9`ofa8on41Fnd7d{oq
zI#7R+=x^~<Z#=0LCsvl&wYn*=tG@)sVUW(`wPKBI!(7-%V#w$x at +Z;H at 1ak$SqEK2
zub77TM?CMOK4x2Y!0N#Ny&j`>SMN|?c at _L>^m72e6As-o_(IZE=pRbf;gf3 at P*Y}t
zTNU$GiTaIBwQ!b;5mUd=<0Tgbs8fXVX at pn4Hg(Jf^zT~0_W#5E1iMK6M+a&(PNore
z7Iwz5{QdB0h=P4`kDQKW!RN`poP>IWV;-l=;%+fnghw9S_e(1)*sQ8w9~?LQ_~Qr2
zkJTDmuFahG70Dlu<+%2ttBDNai7%l}<7U()KgQW}-AQr6x^NL}CxxW7Iz;C<^>^K&
z+QT1)B`g#s!JqIt(K$(e1t(t;Azvm6E%1|pgF5b^th+WW>y-M??Z99691j;0>`u>d
z0ctir(jv6*TcGFEErOrol~oC=m4(n9a^T~~`*|fNVf9$NPtu-+!+Low0&hr!?txyg
z{VB^gJ*ZnYRA(mP9Ek^qE8rWYY at _O(>j}<Iui4AX01s6JFkq?j2jt%HB at t}d0}juF
z`Wz&eu!@ninPPNqRWaTsgS7ZpRZ2&9>2G-rf$2E*=UD>NI^0XoUK~L`o%;a3iJ-tt
z2KWW$SwS-Myg<x^!;e|P=Hh-wF2A!uav3}&LBNSaw{thUeg}^Lo^>DbJwk5!9Ebw{
zK-cj1Pf2RU$m6-2L}DGfcSt+~V_L{>fxlw_cIW$UWL|_rPG9BZ^n9{kL$?Q(oNx{x
zE}}(!->08lTy?s+D6c#y(R!yR%i7i>=IzpN+V)#Oy{Zej9Cz$#cxDAvBlDgbW~d%(
zKXTx)>p`errPsbSNcirUNchl%&{t=GcOaHZrdx@=%?mfiR%{IpBRcDk at Cj7nD7=pT
z6+kZMaJJ*Hokr#WxJePiA>08y&{cJX><X;Uv$}q@)$#`Hr#aQXdU>cFV~v;t4(&u`
z9b%0vz0}-&GduC#m(tSv(DQyqy at Nf7#{?nYbQI3PKHb at WN>=JZeEJhF8R1cdthhL=
z^B=%I^J3B!)VsK#4=uSmaYimUY6zxT+X6d^)B_>@E{6EKu*L&$-F4?S<oCi?1K$`+
zPnUe=1i#p+w{$&MuMl2L_}Vs6{{pX?%;1Z<CJPtZ at ZA7>R4kn(?>RCadTJ{53JYGw
zaJ5xuE5usHXXdz^+#mW1cs}yrGx95qoW0Ou49^Vw_0&Y27<~eUc>RS0HEbsv^3I7|
z>EIQrZIEZ7+Xn at UhR<1jk_|&PA^ei&t50TEnrz*Y&#?ckpPdB1?08~#P?f>9f7^qc
zAGJ=A{Lo&;^AcX5FGDBb9^R*)WZf+G at JwJ1!7)JtOYeRh_aeEkF}mYRB-CKaBx3Uc
z3pojSG0}0(;Ka(;=uG(Z#FEd%;<#4GH5Kb`o!2*C@>%dr)PaRhjKp1Mhb0YcS}z}j
z|8#M!en~|*I3PEzh`tB@{(s?_?ELk>&mB<i#h3#d9I+sr8{2x1<m<?V$)Y;=UTA+@
zB66KWzCfKIjJxtEp2cOWAbMM*i_Va=!q&RS%aHf;fJI at l<u>qlZ^PJm_(aPm4ap`u
zkL0NnJS_MUfK!A0`6)QUV1HuY8uAw)f0~o&SA5zqC!nkBQL)L9eH_+8JoKHnalt*O
z3N~_zPfmEoEE{ApY)f6ex?XaT&Ln#lB^+V3cHCRQ`IWB$_i~-ho_v<W5oDv*lmF~~
zzNWpkN6#y-J^arMvgh<cml;7~zW1;v5qsK0S*X at dpTqwE98xFpoX*+0e)xroVV5ti
z78+eS`-mTF*hd^u;Q|h$8{ZB4g(Y8!eBmF<4E!i3E$G*&smu(0=)O+Ki{Ppl-EP&S
zi|%xk>Yh_gU1v6;X3}%Clk#xu2!3a>y)&h>61H+PaN(WcDt9?E;b)eReU8M+)j73#
zURl&~tL`4zyMs9W>jLJ3bIU$?D>$CohHTwLmKl#ZMs&h6LwlspM1nEAx+`1`eylX)
z>Y?tc4L+F8<SKS=gd1f0Rq%2T+32&=;SZNFkwgc0biVuxz2G0<^y)E%FKI6$x`;la
z1be#gccI$20odz?A$#3 at E9Bmaj+H&8nWCXuIm7Gu{m==_I6*?kS)T)W<$=qJKW4Kb
zpH5GX%XQ1_8?wK*^^-Q3 at x*@OJxbaE_wqoke#=yzi5ehvf at f}IBKgzv!eG;Hu*eVU
zgG8vQsQnX at a`NAp6!N>3Phc#r at uws9nX%WFum<b+cV3_%TL`WlVIjYo2R>T4eVEs*
zWcf}qPqy`te7`{tjSzm-LBx6HAs%N!oNb;{;U%ous8dmh at 0>ror!Bv1k1M~t$<=ra
z$M^8J1Ap%~x#Tt+cQ!e4VsQMhsdo;z(DU~KhdA7xGL>Kf5wH8OxFNr+=@RRp^A0hu
zrCif`39m`LB5I`8lQ_=8AL4ml;rK)R3-Q4W=z<^ed;g<9GSZ)Gw&DI%G`W6Wiu?W9
zAJUiMdrQ59$R%~<m;L2`a7+*X4@%^lE|7cNT^kzG$1K6|iI96_?*nIw4ERisXZE2k
z>Z%X}!D2n!dw~sj-4yf1z{wQd72v||uAM?K-#k}f7ILT#Sh@`vmTt9({@ft-vLmi|
zO^}9qP}z|GtHE1OaGr}2?OZL at MZg)P34m4IHo$Sdze#MqgQzDtbmX2tHLR}!copCy
zbZK%D3r0O~HS&gohUV}M!ecLLJcT^p==`?G2jXvvtJ(DM>&s%>&jQO{4m?%agVUBW
zo5<2@&TQ{aY-x9~%OP)WVBep&rYHBLrOc3#YeW76xauokC7iJ}em8f}v($B-u at ciz
z{T|3*fo>2vdKDmD9kMk&NNtv3d)&jzgX2O#?7-W>^$)fHWIEx>EVH_Lf!*zvSY0>C
zxxXtf at Piaf#6J}`Yyht595`apuRr_be0z<<@GaF9xSRopbmb-bSd)vj)l;3DEv7pn
z=<$=>w^U8swuPQsxHHrb`QHwmP4vF9Fy~(iZFPv+1<p&CA&$4Q`v2qX-Q$|L(m!A*
zDqw_B0U at BZuGzJ&w1^@p)m^KCh*k+9Are4T2$8Ba0~z8C=|yW>lvG7&S6hup)kZ5R
zV(8j>sftpHkxHN~YQzg at FUpV`2*Ue46YSdk{dRxv`~H#7oXnh=IdiVhd7kg{eg3TN
zG!*+;Lq3H5!Jqose!R$mZ+L9mseNqUxVhJUXY=EPGx>S;2FihTNN+#C`4Z6=6D+=W
z2GOljYeM}s7wDIQF5~#4VF`7Iz9cpVzOQ7xb4}lbr%`Kh-fUP*-5DswJ#nUUI9Cwr
zZ!YN;n at cdi?6t?a^ab|wy^he}!p-lcVUO<B|Bi&(iwE2ZPsG3Kurl+gnb=>z8_L=I
zvx=*|CXXUMtSXlH!}_`*HnR${vrN<RB<3|_g+rkp97f#;TkBJ8Ggam7$14f-fAO++
zAP;r*;wA6p%x<Db0hYb4AIsk3y at V;`&Z#sPp{G)E>D3zG(6q56&CJnUt<2oZ>0g++
zn)^s|*mq`w<{{GQT%H2WU8GaE^lD8v(yn{gXjr6Yap#}lLC{xlZnAFNXeX&FE9$9h
zQMH@@yZ?&41Q`&%w&uN$l5u|HQ?ZwlhCEwU`ns0L0L)h47+>AXjbE!|9AZHddDX!F
z2s||zL*QVVM|?hayetQA($@JTJ)uetY>_MdGDCb*kBDK504|c;hw-h(SV|hAUNBqd
zzJKMUyYpv<-<_Ls-HmyN|JU*u>W-n5x--06xpV4>QRx}yM}=ig3u-DAZdp`1$k$Xl
zV(aFtyFs61F*j^Q2Nv8~+pubLkZk2&_ at gam-va}U!y>b6es`4>y1aJJb^fb%2B}wO
z1<jS$4ikX4y?9jwKf^N6_rR(TgG8RPVNT^m-KXuI!=~a|!zwjDKZsfvaeX6GX{lx^
zgM5cg&T0bIz;0)#Hs#r?gY0i9A5N5e8g-2AdSFP_UCaaTD8Uby2V7oUnY<7Gi<F3S
zMR0m?M}h0J0n2B at +?oX3i-6-8+>E&fa~Lo+DGMIMuKD}@n7`gZeAHI<1wQ<C2!;?b
zPG2Z=uqj0Eh&{ve at ohespV(L7o3l>G*2lo^AtvW}O;!3OH7-09_PGay&T#bMk>i9;
zvZgKA28=uGaGX!@8R5QgrQ-X9pt`n|>9gCwN8JirAME7SUZdlL!0M`J%##TBF?nLM
zV75ZT^M`EzlemgejVs4q191akR|lqR-P at df^SL<Salg4H+y~oGYl2_JJ;jTV)qVoM
zRv6yN#jqzBo}q;y&3HdBi}X&OS(T?z{f at VfI7aMLkVBSjCr4(4W<|(K&2r#FkLbVK
z%jt-N$i90N{LW_pkH5&gw?08}4!UQ1$jY!v;Gf%oe{Nf=q*#J~4%#KZ&iPLy!X^tn
z*yyQpGslfEgXn+2mt#Vnd*C4-9S at AbRt{ssVVEVTuTpt8ooL?4!Z&#2;r{$h$p4{B
z9t`>vIyDZjy3EV_7oG#Y79ABb)8o(~h|To^(Wy{@A)daCm?!P at F0-tCw%fs at tkwa&
z-y_JPuy3Jm9>lZI0h}q=c at _9%yhBYHAV=g7{TbnE8nMQ#tdBFVWD~h}t$`nC3%Q2+
zc?_QvYv8Ud8=V9FNiKMX{1E?bG|HAw at ZQUghO9(cKdyN9buZ#$(qHCx$dNi#rO%wD
zpSHJ`$XX*FS3A#Tp-!hD4iE8d$glR|zbXHmU=SHK`0=^8h0DTG?ruQ<$~Xdh at srU1
zrGT?20o<z*TP{Nn at kOWyu}_1);mEs*`tP>>6tXgV3eh>fv at pwp<NTL2!`=$iWHoW}
zVV(RJA}a>X;OxS$hx94p!xs^|9QOC!3p(J3_9&l;T-$GhS||YLAoe$}3uO3~MbJ9}
zR}wNA^>-HK_lJHnF;{rnsS*l4K)?7 at 9)W!{c!8l0E+>0mqC;T&h|hd0=C8peJbQ=`
z at u!Y#9tn23+fiwXuZS#SJqbAk^O*J(GB&{Wno8mT at tpA2!Fu>EY$NbN#kghXVw|NC
zE|{UlP&Kb3M2LNH0^w>QzR_>p3Y05*0 at IW%ILW)95A77BoBJLul=lTjXY~cn&axKF
z&2Hz*xY(H-2Vw}ge=RfjmrR^Za7h at yYvFfsK-|PgXV`+f(XX4yJAl`Nj}Mt^%ObR%
z(-Sg(gU>)7V#<0A8bQ7XxVH;eo$PvXHi=tPv;yfES6VATI+fHzwVMy(k`E57rp(3A
z*-EwpuSEFHnm6~Nzx$REf0*sB>;J61d-R~MgD;!&P_W*-3D}T(z`S3j#Tu5g(e&lY
zxFaxUWkQri#vmpK)56)P){2|J<LViOIX^fKdpOKH!38|%013ZJE;z~b9X?ER37bL%
zVy{%v9vjyM|D<1uo;Vn~9`wuG#NP(N3krPfC{t^05_wlhDZx2pVl5`uR`~na74^X%
z5e#ERC-JMhN at ER@C{{x!umtULAyiG;&)pt~c<+2!=5O#H=J<5*z2FV$cqV)y`bH^y
zGsM8?i0Vr2r^f*+C-1b(Wc&25Zs`u8UtCuqEa{m}=F{ckCWB1NDkVf_9IB3iK837*
z&<$m9n6)!_mM*q~^fPZ at 61je-i|^pD3TH;$C*O|#=msv?t}Xj`P3it)PNWBt_J{{3
z;xS7&Fp2^hp0SUV5k4w9p3~d%<XwoN0DiqKy7;S4o(DZS;T_t9b;xN{!%u{H&z=wm
ze0d6dtWvkM;@UghHBEujz`RSY{R00HV9#mLfuQWEd;5UTJDA`Lzl(XmJS-e{luN5|
z^ci)|5S`wa>@&3?W3j1iOlnix5=m48#}!Zw+%C9v*_puYR)=*}NG|sNE*ryc!quxN
z4!SwjxZry5Ce1W8fXBDdir86J34Jr}8)1t<2t2j0&{-lWboyQmUxM}k=O}gGy=k2d
zvfvxw3xFI&{3S9MlJ?}@dxl#lGtftzSD+Wg^Z$lx;rPy{xtF}CH^Jp50aoc<VPB{k
z{DzAOW{^1@{66M~JIo_NN~DuX1V)4pP6{!P$aWEN&&uKFxi*ObzXOMJY9}%b+ZQ*)
zHCK3bVcpt7>>Ka>DbAPhlpM2G9eHCsxqcTib^A}*xA<!@zDas~b~j&ccG at N)_Figy
z39*GhH<gIrvcN?74dPFR^hU&Q0e`}qB>kB_^$l|T0Kc`^Gm<py4tvP49zQjCAC89z
z&WS(E-1jqi&okM- at Wt5=PJdeTCa%4sPu)iHe5#jxK#rgA<j6yr`^+TovsXP?TG_2n
zJxZ>f&`XYx<38RixHih%*F^G+LY|zn1KO9F`=ZGI(fAF=z5_Owj7>qS;S-2^v<ooL
z!)K4Pm3)*SLTqRW(OCl9a;R_zo$A`7W2`#gK0*cBMHGo~_Xk}?*+p$<rFs_nq`nK7
zIMid|UO_ at 6^h)B!sLyNRXJKlS!agw(^5 at MIc@NgM9`G5q=_T*>=_3x~-BsW}EP8}F
z+Xg&LBqJAw5&2Oo!`f8_AIkmUCpoB%)KBBE0(14#IE=u8IeA21fpXsL*Pq=%-cK?1
z6U`+S>=!QMo7qjgPJE-#)y5_^jtaA5t-U-)&Ldn|M`MbGM?$9J8A8k}lK5Wz6!`N^
z+skt61#IE4U%!k0eZW%AQ-VXTV-d#U6s-^ZB&oPpp>NvPkI#~5Rf0s}5zepD-`rQf
zKN5aK;znK)%3!W`^NKL{*+_Ywi$v at e^i>LdH7V{28C$>!ea(~NT9ochU`e!Hvyp!!
zC5(zztY)N&a3)C at hB35*PIT$n1tQlo=1{_;;HxmiNEX2N5_vH<Q^WBb52A;G>^LbF
zdR6T~_;C$^f0r*;UL9B70r;*v<hk(qJ`nyI8G9Q}3SO_KI=*o|n at N^`-(N?lpICt)
zht~xgMUP+s(;;}3=@!gH-Ug;sFq>(^8gU2QZqATq*yu}y;Md0*D0Yp>@aQLNguG{t
zga<yC*nzO=|4DF?tVvoMY=#bSk_qYJ$)7^*yuitwS?0aHq^{0nkK at Ca)~Ph_?Ii!F
zoGoV0$vgGa{z3ZfZvC_pay+DuAmdA$j~_6Bwb&<PPdJF$G0-e7kKZIL1((R9fl`aT
zXdhV@%*LD0FOoKZez6+s%0Tig=s7R4i^#nkX6b-(x7Zj5e}kSBVF&okzJh-*@iF*=
z&O4NExyY)+juLEnvhUR6F5iZz2Gr|c;@r at _+`5<ZzF=83cthov|Lq;6g4uYN%NMAM
zo=CWM<SqY}=Sxx!)cccs2T8s- at GWq-c<{&x<QUJH+Q;NMoV|J=|D{m>OdrViBEor!
zx=lpi7h3+r0!xoEl`1?2EE(3^)y<^+3HPfVdtj|JzDxf%E&37iV9kC;MErR7`fz<_
zKe>mi;~9amO7IW at k0>d+0$HdPV at V$<gHL}_(RVm^Rxf$Kl*EETou=adkNVV&B=1k)
zC&b+N4oN at Kr*0zG{gA$2AkVg)K3McK(hs at 0FfRK(=D%C|)SV=cZ(uxREy*r&AL4lC
zA<ntDX%5*ZG3XCRvwvYk;G`=hX>(r#=_9AfoTqHZv&_)14#G1K8~QMLR+v6DmK=xT
z7cgfLd4~9(!T0!`Q8B_Jgfowk#<kDEIznU?ABX(>9K=oyUJxE8z&g;8XWrX_ at lEmx
zljSDN0Yfkc{A*05Zf+HnaeBWVjA<$y`;w4m{I(mmZ8-vduCzJrywv`Ajq}-d$t`i7
zz#M#weHSP9a<cGBly9l4eB9h*XMZANi{}u)pSpeflmm9~$#OQMg^}$XHWGD0<`c}F
zn*{~rp4bcMM@}}qw(W0{W+!y4j|~#43!HF|SgH0KtY44gW at 7FVM;=LD6#1Au!!^If
zw!~2{Rz}25ZF(+- at b>T=!qiCMwut<e`vB!S^?RKJ@*Hy#<=4r3qg=d9J(bb35I-Ke
z>_y<rCs;kX at Br+z|LgnaB$E0Ee at Gwn`F38r0Gu)y4-WEtW}*BM<_f$wz6~+e+WY4X
z*d|=u;)G9&f$TV>oW!eyT(AZ85&%DE3Gr=;N8HhB=Wlx;5626?DoDz1LqFIB9+V#r
zm-@(pGhE!5DUvbHbjeiw$dUa1jNdV*Lh^z$MKan+Yzc9}+!(fFEUkdwvzOb8JbT<;
z?8md>zl$FpcbV8ef-~d4iBX#$K2kylnR360jy5+r<mR>}VE(EXS(-RpIO4xu7nvV^
z#{jz(?W>qLN7s_xwcr8qTS$LY?G`jleh2fdmAsQlcl8UwBB3)>%{T=|F_)Htt5Kix
zkN9D6*PdX&pV)f{W*TkX2A=uG_Me-b^U>Cm6J7ptu<bio3IATD8u%2cmb8CQhLTU>
zhatuh at loQiVgIO-Y>Xy+mV}3N>mI^i6!uN<sBz!GzK{a`W>Tl!L`M5<F5)di?j<rW
zIIngKWRPh~g;o7yZMv(DdDbU&yjN;<Y{joq;)A2XQ7T1b0{l;qxXzPn`CNJjm(P`U
zUE3l3&9Osz)e$$4$YzD+xIyH&^*+Xy8_ILDpXV^6a<a-vEggmL!G7u4_#R*#GvWrR
z)+9(rO)nJ|2HcL&K8#z4w&b3(x6kz)BI|8N>^icqSp6~A)`PgV?!b461 at o%i23&(3
zYLT!kAqi_a`kMRmXoqCsqfp at E!;=-~Dr2-x-pI`Huqk}Vd(vjukHqiRu|IxI^vIZt
zMnHeE665=|YB&BMB7YuymT+sVTPZ)+|L*30d-n%|T&$rM;Y$Jyc^BfcFLLz<l3y^N
zJI69<a(B#yZxQ~QL9jt^>+P4^+`}>pg)ad+n88cJ9Oee!beXuRpTAXzef$@PqkWvo
z!!S3TAvz_pS1dly&8t}J9+NWvE&CB4{t@<9`{k7>IOk>VyG^bI^y{15z=u{#<|L*!
zZWGRj;6LJ$koDiQMQ9IIV|@h=Q2!bT87gmx05Z+M_qjSPeNv~-zJoe_Y7b{Y{a_Dd
z0dDtlxT at N11gCfWz0Q8MOaiuY+UCxxQdJ2j?-1E2BH}Nh!4wPms5sP5crrYdXGRPl
zqd){*w_Yu%OAbPLum>Q0yBOsgB;J=G%3KLMgqv?RY~pIFr-J#VCvM<;__cBJ#NRQ`
zjY;^SuJO0 at 82Il|Jqf#s49tHi<C9mLfGzETk5X^Ool!q!dGPl=CmQx9d_ntu$Am=$
zIt9s*Cnu&CUZi98HmdFelNPhLMD-JNIndkNXJ>ctVejX3`K_qChi2z(=p#5i{-5x_
z4Ra#6G9a5 at w@hODs!HjX85z?wFR0pU_NZ#gF%WeNxtiOPq5Zvo?ceVvll^Yy%BVCR
zcyzsQ at JM@IM+}zzJotfn- at rHJVgC-S+7>TEG}eNk1&{O*upySxuVH>Aa`Yxvz_cOX
zN085->6gz3LO%C|e9oUEC9-zxv)~O9MSbCt$@z#)iTn3PzQ%M32ANBmKR1_rdnEE#
zPVPV0FN-HY7Khw_`B^S+S>zI?Q?Lv&%K&W;=4(=qk5G>{$INlrZLwEy*=^IzB{x&6
z-Kb#K_X-%-JA?4NW<2j(*SoJXiSk=IS^GfXhM>RKL3S^{1<pS=DvsADNQK at j9qHB8
zl(U7`?b20X?SP*hZ+rjRQOvV(`$F{pR>;gAcI*o`$**G#ar501`6*c!!MoHzWdC+`
zwc9h#6Fd>Gm&_CR_Fr7%cx_!=66P2;Zq4i!CK8 at ye6L>fF7`o)A&hxp6X6@}c!tEC
z*>c2XiwKs(mLY-f1L3Sq4Xa>|W8dySu0k*)tb+K)B at Z2<nU`Aoz!$OK=Um&mk$pAn
zJQrtIr1%OPNb46|SDXVc)HlGteG@|bN5q-WRFy8t6u?HG(73gYb%_5N>p$*9NDYy@
z`|V#I at O50IJ-{vopHoJ^og_^0H$x!e;`!G)ha>g?<_lw8oX3Y`j?FPod6XY8WvyLE
zJ(1hC1g0xl%*jNSdfyv;ne36-5oYHta{M#dKMvV2U!-Z`MTm{_7ioSWxYGIQnuomS
zaa^dm4LiuiQ2)sfy at 4-dkw>&l^SCneSR3pq-y%lW#rjup?zR514JWpZV-H<69oSjm
zEAYW^<XMI|jwmDQ;ZcE9xK at xcBya9QUSIx{h;^6?z91MGa-Ee>H=^=!EqZERM&zX4
zf+^-RzR{u2Cfez_lRs~Mhn11NqX*`pIre<%s7k?p<mKMsSu(eol!3%eg3coyHeZX}
z8vM~O-Szcc{ddku9#|ikr)*aySUk1&uDYo-%HDn(bveO9VNbOc at xx$CEIdJ{*Hs=)
zH=l0L#oDlt#ASueX?E;Aopdk)*$l1~q*xqkwWS(3hQ~N(!MSEZ0?uXP+~TN)SYnrx
zXnR6 at N8LOeUE~b8<cc{${Gz?W5KlFyuFWSksvde5Bhzj=cz0&do`6S`zfz`TkA12d
zz!&kNq3 at J0yK(F|D;b!WmCr8 at P-V5}FGNhYnDG}2Wb(F^LjI}1TqSGp-)n3Mq*?`O
z*PTWCT-Wnuo|;9OTQkAaY)we3c1t>Z><;`kn>uGTK at a3{y(Z>8$Vo?2s!E at aQA*=k
za1T0zM2c*@(^2*c<rTt={m!RY_p|R0tD5++IR1!Z430nHn1W+7j>$Nl$1xrK6<A&T
zU=Kk&<ZpR4{19(t*q;&Gv5Fs;>nsT1E5k(uGe@=6$;wOUDX>$dmzS92-&kuR-f1<>
zWjE7e%?jxCVhj-^&cV<aA7J1EQ<O%RoZ^x4gtNP4<_`0ZYfsi0hMy}tJop#re at BK1
zHdH)X`l0*^(ti at bw|?n6a`+pLd`U1D>9^&-B0Wv;D$;MrZz25`0etnB{zKl0^ccZH
zq(32Cq$34{vwZ1Bxee);Yb5XEdw%KWZzDW at x@`})>b$RQi0ie?-QUPaR{g+F)+_-p
zC5!(}!`3M~yqirn7V(5>F&{h;xkkuY`{`oe#vmF0u}?AQzt~nce&l3}_{>#cZEdE%
zp1BR(*Vym`&8Bdf;k{Fm>~Qcw4q$_nJq6o?Vwqv4;;y$nBD3yb4kY}SyNw&O!4-Qi
zG{|>NB3#U6hWlDI!Q9i&*V9^XMtVAxNw9ZJ@!h5Jcekt62KN4Bs^@Mke7{drySY6!
zWzga|J*!^FzB-jR6>%-wS1rr7Gkf8;{mI#A7IM=}9(a3pqwlJ<OTgK(Ija?XF(i(k
zD02wa3}4r8;LnyG^jwCAsnL*H*SIa!l=P#>w2_}`5??PjZA|*WB>qig+I~;8CXd9L
ztt!pO+^gCd4*c-_{CMjO?A53V1tbO`!PdFC@!$uqSCxg!uG&~&<SYsFbnvwIW3~s@
zhJ1i=1J3<ma4646P%H|CFL;3rdUSB|yUs!G5z8S96t#2b2~R)rb6C3wUn3*+ZLBKY
z(2N*2UcP&v8(l)roRpw at i)!PQ2xcjO1vB@}c%|C@^^{l}6G8gG=ocZ!4e@>}wgdB?
zhB3;mI0~6^L)X5=M&or!ZRaoveZ}Iw^r1nr-Ad^dN0|om!FExtk&VdwRv$ebm=<<2
z{1ptQxi=oJ$uqXCl<+_BO_BHEe{)T=pOf(?|4q)DBAwyk)@*5(%2c^CH4A(-CMR_G
zh$C3r#$Ho(#x9E5fbpP;@<6Oz*l$9ziJsW-PoFJj=ZswF06sul4fUM3X1J-W%YXd!
zn!HU;WiDMVE4bhGx<s+CO!9#foJHV$QdpAyMjKpQMjzRYUT=6&ewMNgSi2QT at _UB7
z5~FN3{|e<d{!U5sP-jSYv-5$3E;put18M#EEbtvU!58K1PO51JH&$b>p5Qt>?KOEj
zoyJ(`w$%gdhUm at K;D+7c0;#ZFo at Bb%BdYlB at +9#gqT|?gzT%&+w~FES1Yd{<U&w;K
zC#p&dcB<664(eunhb5ejLET>q$;NlhuD1Wv6l-N7s0cw`#iJ!#vG4s{(-}1bYfl3u
z6ugS-7Ot%jOWM^|RY~W5ib^Bbd69xt9E*8V1S0M at 8U1MzWK{T76`^h0lcN$0+o|om
zNdnlDz^ff at 3a6)=<TuXMMC+ZEDXW}_dFQ+*qTLM9roOB#x^G6l%5&;7i>#FrZHa{r
z6YAB|AESLIaqSy?qZ=IfHq+W0S8Euky{z=j5O4_=-EnV#jA>mpCc9CPG&sP}P+_&?
zY<n><lAmF?@Jk<fs4~J~=b;*6ZM=n?ze9oHyxuxH{iW-5YuaO1#b(>VanRP`kM@=+
zZSa$Xob<kp#BA>H&(!GG7j{%e7j+<(pQR(Vwyix87~WLuDI>6^q#+%F^eWt|hfU#*
z95K9#9>YJq4;aD{!efPW3DVy|59S5AB at X|;GbqFQ>Q<F+3*`}g+C62Zzt#)Bx`^Y9
zeI|HgR7_5FRnmnhf+29G$9Gf?&>kCnT~3ar$0gd&VFNvjSi2qi^F_b<6q_10rPh?x
z$C}RbQ!O^9#8Uj3M74~XN8hAwD_%B8Ojg5`-PXGjpY*#CK8uha`D!-T$69O}iDlzo
z!SA&xmA*&m=`+5yuKd2;yPdh6yGwGra)l#Q%2K2Mu{#D$cb_ilJ*Ppb?1O)*)fjQC
z4Qs_k=nW>+oSWb@?3?T){I&Kx(_x)(qtg&WS$%8ieZJ>R&Tx at x;oT(d<hzmDNj}Av
z;z!^;qeUpAhib6__8`2^&hFX0ll?eX_#f__ihEyn-HWo8;@fIXPJ_s_>#hj*Zp6Kt
zFc$|<!WjY7J<QR$DmCorX!jX=hz%U^fDZ$+f*7xHwtNS;`5eJLe1|dmlY^9>sV!+}
zq?D1u{$9E`$0WCS(m6(_S(4dGM`V6jqefqqX!i%#W;O;Vct$eP%rVLfnc;P^L;Jy5
zcd;)0(EeaM!D4T&iCTo%ImH!s8r?^=86-Z|yE01XvlFo}L`uDn1aZewpg#~<Dtq;r
zUmFL!0UMUFuS_w~%T<r?^X`vLV$Zqwv0b+HRpkY`-ryf%_f4$5cUiCM@||_R at -nz`
z?<%*xinzfx>#v9pn`1I6l2q-L^UA$^<*J({Bg(y~irwd}z?a||3;xS97I4pap!(8R
ztop%qKb~j3--vfShj+~PX~=we=R)Q149UOCY4P1y17M at rO8iBdbkYHBI>mt7L{3}#
zs-=4E93rO;aN?Ym$Z2a+ac<#%k<$XA?ztf*Blg1H;o!Q?8xI)}cuCt5-L});lGsP6
zo5P5YA==$x<=W4Xtvdi)wq7-}<`qAuQS!+_gXDt>U`0BtcC>p^wcBVLRbM0Wa|Xvy
zCBajTO}|Ni>vGRr7R+RJtl7!42fxM7!u{uf6^~>jh#B;I-^tlVAAh1Ri?tGb?4k~?
z50$&hFeE>&hx8#=8G?I^w^vGPoHqxUoDYTq at 6y}<{)qqk{lVJ_M+t{D)kLL|ep6xV
z9h3Pk=~J%$wZ+NxuOhN<f42)f2rt9_Dy-8S+Mf|^a#%&MNfwi`|6YHG!(V@@{uZPD
zYJac4Rj5B}ZadfiiM{eB>Hmi4p%qFg-Fa8!BSxGm;F6cvo{WLtejfun{x}9?WDH<V
zJqv8lPGEa>=ANL7r=OtbL9eod3Ut|Qp+iaIIW05KN-Q~NmsRPX>jIV;7?&|#q&?wt
zF&G at c)|~6YSP$vcON=Zt{ps?=wHmr~2T+HS9sj8fZKMsKs>Anwufyk_uEWz at 9ac)V
zEMhd6Pp8NBgnR at XQgKBCH%_HnF*lNNN-zOB_Tkoe;B7~~P$MXDE`px)_RF5_Ch`7j
zs1v<lj;{XU7Ranx<L3L4=cZ4_p7=K9x-I~w<hHvjZ4qw^3m2jM%dlR_ExSpaLp<X;
z!74(o?Yg#MftAR$uz%mbriM(PsB5{V80Y{V;=&pduPfTXUMm3K)0zS2;WK{_YeFNf
zCiel4UToN=ebro2G?XiATb2IfpTTkD#hVPf`lJ09 at yz6FjOIaQ=8_SDdC0Q`97Ot$
z`$(SKQeUHBAvsck*rR_LE<)aQavSbz8aiCrgZ<edtVe5d^tBg9pP*>0Nq at 6^w*UID
z-OBC?VW87AX+M1FRm<QvckQ(ui1RDqIF_88ED=&|KQSiWQl;M-6Gg*+YG#wO=Xgcu
z(yv|V#|=n-<x2Oxi?pFX&+|x^_n+ at U+Sq@7B=*Y!q-QlbJIZmMJO^p(6{N{?khYWO
zljo2;<oV<|<a{U6<T>Pgko;s-(j`kcbcfdP*sH*i-^9Evt4kUAEYdB9C2ts!9_>0`
zv>fT-{dsDU_Uk{t7is_g^L+x1>)DQJcu#-1oT*6nm#b?c(*5Ofh>-3tS63#|{pE6Q
zL_5#M{}a%^Mff(+JAHSm0)2C717znRn5%}5{pRRCN`|%PblOtjhu~*{J>^YbJ^EiI
zI8!4$Z;(AxS{D8vH#%+7k2`4i>MSiB)WnKZCAYx^g?{{eUEIh(!D`a)#+xQaSNy#6
zE2A?vX;fQU)_7Bm#K)cnzT>4QaK0S-v$&DZl5-i+V=u^7kbGm$;~D-qKV0^!v1zsR
z<L_z7`1l(2X6J2M>)bgfi`}^}s~-Lau#x7~L+%Q*%-r at uc=G%{^!wTx;2n-)U+&Z3
z{{2z#1o|}m;e1>Fc`Mn!dCh_@*jVirb_)J+u+LZna)p*}w!L5xpIrsp%@}fy^-%14
zDY3%VU?cn4&tyKub!|t}&28<eIQK1gE}NYDG95aj#ELr&weazc|7 at 8d0>0={{I4->
zZb>sq=opVidQs3Txb|9AY4+|_S+I+Rz*gpT$NtaM at HoxzEp;6GFxX+>@6=rr<LN9L
z=Lvb$=vb3Fr=v0jayYAXack#bU$MpVw(qeZYDzTfxybONZke&#E&-RMe_bOp&hWGE
zMq}IR82Nom&If+*|LB<tKE1Erz}ztRd__&PZ>u1hS3fn8GFE7K8%=Sl)9|%<lD=9K
zJ*btQ2(HIgRaG5tXpB(}UatkJgZ;-(`;TS)#{>Px(*EQAy4=I>8fFwaD7Sg6DOnX;
zqkgMZkPN*}g5k%nZi2^Xc%5y{IKxlA5 at Ta~3|(qk3mt)USL>2B0Vj?fpiFd<lC4~)
znpzR<3A_&WN{e;hQ+MX~)Xi4ytBKy#ix{_ET7j|cerm3e{P!t#KcPGy4_?&0PCDAq
z^_9rz?2K9dfS*|JSyZk>-KqTGV~Ds0R4Z^@MrIl%T$N_J_;@B_K{A;)O>uN!O|*wo
zm1nwW2gV&fL~Z!BzMKdgmdh{WF9OWF)E at Xv`a#G4z4kT at TR9u!=|Eg_Cv4{CB<%k^
z%!)m?5koNeLFTXYPLy#EuZbBcKF!U|n5%myuWaYTKd at H_E+NF{eNb5kUeO?mPPBkO
z3G3MB1rFUj at Q3PiYA^;3X-hCBM~*#f5ug8s=;6t^s?xlhA>CsyNSAmxl-OT;MNim7
zrQrWkq!%d`rYR?YJAv;&KAUtL-Kmt0Jr4{OiHG+nHfO at 7kV~04vC>>Au#NS)byU}k
z5=#}GZaGBWKcsYPCoNX2g$-tF6!@D at e+M0AdiJw?#0PbgT7DoHM&C$zpSyJHJz7lg
zldIni`7yI7DyG8Lcwc*uPFvX&By)F!{7BLm<6F5oqLX0L27MmiE=An8j)o>@d&AfZ
zR at 9R*`U6ixw2!?^QUuIx6wBh<G0$HQewO$apnju+o;Qr6at(r^){u=+f#f=LOWUXv
zaQ#I?FI`^Ib9qv()Muh^6OrXqfxsV;F&*A7j{uL)VLZGblU$mP_+W;vheh~?4V-+^
z7;@M&6Z at F37Lmz$U34RST}0F`))1-(W$W`!Gez)IH9hkiw^q>$Q7>stmF*If at isVC
z3?oXdh7qT&;6``MZ=yah&{{jOcX at f|JLr6Z-C!h~e0cuwEyK;RRzu5l>)l&EuVa4V
z5jp=q$~Y32jKkAF#wmx4Q=Yp6`v at U#=yaQ#c>@zV@^={#zHLOV`E#a8zU_q>fut?y
zIWwfwE72xzvJ)t9{si%W;puUc)^xf<KS0TAT6?1DPGG=Th9P?slVo6O&2;kZKZ=H|
zi~A1Wn2vVEHyds$`^Y}|x=6Sjb<u5|NA-p*Gj&+;?fvJWf1y61)kKce1b85RHE?9<
z$Y&$pjXW~wjKtSPyA#+2kVy^^nM(h=OlAI~T<mnoR3zRdb&8&h_L(2sSr<#>(Kj{*
zPpIgDjC!Zh4RY#KPR1(j-v at Q}%dDkXTWv^}2ER`5*hRCVViYgyGKV;0WdD-4Vr5fp
zkYP)e(#(KZS*C{IUfpDoYZC$#k;wtMem+B=$g}I+G55bym+bXE_8Khk6GX4R*D~qs
zYowk at eWR{>;TMT|R18L+{KeR_*QyLMIUVgcCUpzYhf=5>!$oDEcRKZfx17`|-D!~M
zt#OU0<AqIa?GkM#J!goQ5_P{RRk1urk34Dpd7898(C|H`)ijN|Jr}b)-$C#XUN2%y
z&8ca+Ie>rC5c6)L;rs-vQfkUT9E+vankRMqALUkuYww|P$KGQy_8yachC&`LW-4aL
z#HXK<ogojNO at i$FT9y7Un}G%9Vv#P4aDDd-jISX-Os^z5KF>f3v3lXd2$`DHf$RGf
zFGH?vBLBgs*W>Y|@6D`fMBlsVZYF(<e-eGEZ6N%Iaz*%`YRcrNLf;fU!Aj~e=SE~A
z>2vhtC-ua)8YJC)A(x)2qYkc)8Y$o~(BGvb#w_;8>0Dc=KRJl9v^v at ehb-S=I73<Q
zp4FQF&#~9P$0l)F$sA7|{k;#q`G-FEmp}AD&!_qz*_W5P_T}15|3CWRWZ;JF7iU-e
ztk`|dNv{~j1P+J)f>_y%y?XWG(jnt&ay^}fvI<V;QL|S6TZ_2n$~zN?zD|DMnA`cD
zj(L+Wn2&SgEsZ_z$#3IaA$T#T3Q}+`%+mPiA-FPgJGbhXO=-aIUwLP&rO`1K{$-FC
z6}t(Z7PxCs=DadVxh5kK+>uys$a+aQXn`pLe)H{L1hQ(c$FqRrl?Dw2x2aG)tlI0*
zv6XC4ir+gl;!z}z;oFBLD%mRiM$dIbPhK2UK(J+4BO!0<-h6NZ_LhWr5?2oPxQ)Jo
z1l^n0RCq?2M<hen+3e%o9qSVLcG$eY_oDcxim at EDi>7|h`!hI7=&9eUBEeCDBSUm&
zq0oP&Mt#pq;9XH&Q5aF)7Z?q=6Q?SS<Q(JAyb}U0F(#L1gpPM(2<&O>Vsak3!z~IU
zBkE7rB8_+fOfJr6;@(- at y&vM<$K+mS8m<?g+d+HJV0kmaS38_}OOS|IjEPJOxsI|K
z4YJeDvg2B>ngpYh$@Q?8ZPa=JKc{2-jhoL)8Ari^AYX$ruvdxq8kE9bgTk+Zmqgyf
z4-4_H_%>q?@5-7e#>V(-tLYc;KJwfb8Ec3?V#)0va+^_C{8LjvonWRgH$zoi`5t(K
zlaR?}eq;QreZR>9ADhf0AnORf(;(PUk-yXUR$OXOEU*V+aLibBnnG*LiK%vD<~uh-
zmPXlQ at a~W!<fyG)^9k_Ap;6#Kq>Lf{H5WT)@vP+ititmJ*MFw}|DfMcCmrM(>T^*4
zHLiYH#i08B|6HBn|AqelTpi*6&i?;5UC$o0&Gr9Dn`o<7U&eQH?T2$k3S&ZsqBc1L
z`hopE83`Hpo$ZowXDVdEo{(>do*BBeRHEDRl?68p(ZH|$F*w{Di2c}YZz^&myx=>z
zB6?L{@(W=_6$EGfLL}<$ew#`X8967wmw|3nGiPU^tz8QFvO#gdTgEF7d3`tjlXFA7
z;E$*c=^+16?;HGTLsgjy#=p+FEfw6(X<=u0e+EAL$hb2JW1)YSaO-QEwHO at X8DVc2
z7jE%FJc%x2>`BP)$n&S#PKTbvo7n73UYc3W<Yu1oUWGbu(3nCxG-pEwD-^s0h0)8M
z^xM3Xq(A-MAMYS7%Bw_uFGJn8cx5w1Tt61(nQ(4gh=1M%9MOju)@vQ_V;tMP3eb<o
z;XZ$+kB&q;`)5|`lv~FI<2}LP7&rQV92-19p#axAboIs-TH;}@^By%_InsEAm3V#+
z3~Lc(&2BR=?_2pIV*@a at _SirVNB%@$Z%)-bFjsRr#WtoI_ at jlp@30GTOh$W%HFxgH
zw2y#+dQ_RJ0xxczvy#+TGOq7JzFjz$c!Xs{D~=wPRA0@}<Jx`bFIOlMptm$3CaNi9
zFk+&vxNoIXP`~L&6aA*G$yqN!+6MjGe&037C*xwL+6rw&dd1<pvUV?Wt^{~7JV%D~
zCGPt2sl#H#bsGn!o5pPg|7W|{9M*n>7YH8Nu=crBFnDKK_<<!d5=*1?0$*4*kQz`k
zQ`=V-Kn=-QZ$8)oZ0aqM+4Qr>*w&Tg;Q&TFNNp$I9(Fcl*|@U_OSwLI7VERSDiFRc
z$z<%1vW|Pi$=n!E7(;*Kd>8zo|FLoSdfDCc)MLAZGNF(4VZAi<r- at F8q%U##mxq1B
z<f4y=#(i at a{W-WAeJ_plJ;k`YcfccT)54G9U*pwVfpLs6!%NUKKQ%U4ZyMt&PhlkE
zo|mY(|I|3`^PYuk8~U%!)U^F;jAHx=HGQmNpze=jbch%7tmOJ%5wC&q=Y5!?e|nrE
zzIXpP1x{^>F-^Y#yxJSkC#L*eWU|G8%MP+fAbcjQ;0*4m7}3-NzO;wo#Q$doZ0r7(
z6Y8Pz4%pjI>jDO!j8#P$?NaK0+SsQIhU`Lge=l7kwok-53kUB&Z&m3Ei^_lMB at Zdl
zwL`X$5_ySM8JG_$jK4y*uuPF+-%?KJD+b3wS4- at Z!?*JcbYfjc*Eqv{-2ug9I_HTF
z9{R^<?f$ytQPV>vLw{SGIfjuE-JfDvUHV7!>SQ0iiQ`<@Ie*tfdNg4^22RD#;M>H>
zZAqEwO6b;52FN!<D~NnU`whvT(@S)_C_|4+Z#(=7R|YHg#Q%30l1Le9ogI>jp0;}x
zwze at i-hWz`oDa??$VH_qr7AU77q+ME4zCX-I&G>Pa#oB>$1RL?>0no!V1`re6(Y}#
zrnwf+kPoQ(r}WruEaDMl>`{CGdxS9fEuM|oBPu0C&&k!r+gx2drIU3#++P>G{<^^a
z;D4=)%l&on9qNMA-Dm$F>Ow;50{ALd8QyS}0rsqkh=cIsfSr)}5O)LmF70$1Z|H_R
zw?^^l{{7O|kgc!G7%?4vr(isN9P;xIBp;E>n`2q2Ileu8gTt6oK;i;*8DrjRqf!d;
zbfR{zK;WC(r<saj4_`Vk)i7Rn$Pl$pR5Kd>>7Jd6Cb#v1%rhZN#GPG|Va{4<ii49)
z|F}1Dnnm=PoS%d%AwNGR^0OgUZ>3U%tH{0qd#FCh$JSgC-AQG*_Fwd9MXlkCj}_N@
z>B&UqM{F?>&q=Gpv(fj>^adll5_<ERoE=WskCs6W+D~i_s{?pW#0$Af+KNf(?=NAQ
z8Q%O24iDf!Fh=gtGGa$??LDZBA#36sJm{$?*d0uFP|nUc8<E+`9tLF)`JkNinYebG
zTL at m3Wu^>HhEKyD7;?5 at VxX0g@EYSgfX#iIx?UqDwh&|eZxYx;YB8s{6MNR66AU;7
zSe2_Evj_Ui^&;l`Oz2-tT-ogZYuS4Lt!!kB|9jaw|7+RI at sCip>;I)}N&hNa?~^h1
z0(80(`9Ha~gw5coeeRRCjQO{=jQwBQau&C*`44T$Xu=T#a6|2XX-nIawj{d1{ywig
zj4=otT^s59M#<)5*b4)La18b-F5N`*wN;-nxlt)k>^R(boonc~K?r2ObdT8fKlj5K
z62!byQzPhI)%I^o;;mJmt#*b33&sv%HXw%mMb at p>2tJ!k_Em87#+vR7Otl<@9oYGq
z#MJOns;Y`gQSGCys(zqqYmUJNR7t<R+e~kPy%f3{)f9}kATr*3D`&`fO}wGMkIPet
z%Xh>zE*IZbA$HMI<8mCvW!V2VE?r|xv()g#I^aHGU;0y9pJ7&^m6`y1D`a2F53<KK
z at Qg6jNz$+5(66y3sh(=1cJR7&Qp>TvUMKyB>^0Hf6StE7ehGQ=k at peW{W1D{dpq(X
z&d*7#zdzj_r+p6gi9Ou at GT-Pt`@8+>^i%e$L5=A1w`ufw at 0YdEnWL|#?8Q;XUYmjb
zCdtg8 at Si1qjem)4!`eBPok2MvA3)zydyj?eh_-izc%yu85Uhw6x(na{lEY4f>>PIj
zdLpN3?*8{zUWe{vAawgvD4_~A=@|jOu;DE>xz+>GN>v269>9i~Yjn-U(07VV)mRgz
zqm9n8KM)%kd?XI<X2FNVt&9I-O^V*(tmBWGPUe^je`+Jv1Dc(!y~<!Nt}2yGXNbM6
zbk(mcYyrepjTq=o_7%zrz20qnqm`CmZTc*4UDRy&;)~#8{|5Pf$T at ntvvMB3S59=R
ziqGJaKbByKT;G+KMX+MPYIacITLI?d at 9_P6M1lXLF0MV+GK?MvOz3Y+0B_gd#AMG5
zjBgq+UUBU);WES-NQ(gv{N$c+QL{5gFV0p3o1Ej*#M#iPcK)7!I+s7XQcXFjpXN^x
zoCc3?r2Iv2k^Fe-KJ=Sqim&ozcy7vQ`?@5HkzOBShn!V=^wYwC3d!5fAeqHDc=+|U
z_7y9y@<mq%wg+UjltyoT$4{lS9{qId)}Yzf+d3Y*u649#b(KaJ2KcG69tB=kb_*8O
z8ruU9o7{ivR*WrUM=P*k*FC|xUKoJqI^Ul=Y}e5Pz9xPeuc>rI(RbhzEzW4<nFV>4
zf!ZCwIj#iGk-1)JeXio(THz>$(Ex+{X~!B8e;D_eOGj);>A$B*kjiT)9Z@*E|9_(q
zI8UUvTb?;HPZ{C=&&;XKI~O$Qbf+F7X3-)4e;Nh`Pg#CL^@j2`y%2fk8wIrUHNNS9
z(m^jIW9zO)`xxirEjedid5s^CZ%_=Hg7kvSsR8+AgC=TlUl8 at SuKv_5T#FqjrFa;N
zJ9TGI9oMy-y6L&gPnKm{CzD%C6}*5ovaolQ^&F?ezT`ji8g-d>ODYE_N=!5Nzus>r
zWRzPya}Z}m<^vfI<IawGZ(K=qk(YARf<B^0h91`KukRJ)36eJCxr2WYSRNi{dwpX*
z%lI4WwTDPw)75Ja&u{1c9|lj4o^FBcJ(lCwApTaL5gGqRgf&&zf-z`|`)2AdI3ljq
zR$J^G at Si6EOP{Pb8;6)X at MHFll7asm*a7Pd#WN=ShwN{K9KQ<h_73 at uznYo_oB4N{
z`Gli~ZWd?nOb*>n?nD2xhU^6PCw0rM5S^g~?|q0dfxIZ+XNpzIX8I<|wJP`q7q?|K
zu!@hw^<+%2JTlgYP#EhHU<42OZGcXag-y!|y_?m0QLYBQ)mHEHTn*m!g^y%5bT_Ku
zJ`LcVgWrsA1$X{?l!1qFc at z5}Yw!eo_aSg#yg_h9m>)6zaD6bY-!fzt+9xf{d>6Rv
z!HCT<mK&#o6^;FQyh|h$@%#5C&#_CjtCYctRUC)LcbqT0m+wbhJ&|{{{2%YS{r}=!
z_CLHU=zqQon7X;p;l3P*zJ>1}?h`rP7CK7t71~6|Gax2n8o at 9C^A7C2o4HWKE-H*=
z7XlLro*i%jDcQKfHg>LM92=^L1a|6vOfvdIYF(f`-5l7iR=ieF$#Y~K5jXyQANYEK
zYbWEt`>%u_5V2F0Th-oU#pR+5&D*?}#KxE(HJdR{fKTR^M^e;1^&5WwP`pOViH{e!
z{a$B=Ll at CL=RssG_Tz;m(Vn(B_olKTSy7-Bz`UGF;@v`L7E|$)CeM8Y1A9?u-YWy_
z!?izq2i9Jk`%rA$nLOcp_#BPv&=&@>i{2NKZxQWiW_=}v+t|3+_A(g-o-EFv_{>15
z#^Q?ON)>o(NQ_r%z4tt#_X2+JhUPa?X8O9O1!aC4*VcL?&O`4Zocl at BO>pD%B~2f$
z0WVIeyk&%IhxkHnM*OsU8e+p|pCdMWeCsgIuAj$oCS3<^+rPjTIuv at q69h+$ID_}y
zPXvx2?K444_}pm3)IlG9lNJ-+0s1xU6Z1IV$IrmkC}%wwb!IuoEBmd%p#7)etoG!*
zcKF0EK%AHPbp_>ba{j>wupXogjWfN*j!mBLVP>RbjwN5-i<t`N(I<#56S{6Cn_LK9
zgbMlV4=OfZ{u3X1OX_Q4ci43-wxvoxZm^3Fitr<8Y at z-^)xbEmvhZQu^TH6X;DecG
z at y+0NCOS=EG!MidKzze}Sd)do-u0rt2rWxl{v@@<Xgw6R-JmY$h5!6~MbN0LhUfvg
z$>Cu;>NMqVmPC7bDbLdTk|$2RYEZ8tc@`L=!}>DTo7&cjqOQXCItXocGlck(HABxC
zjrG16oN&L*hAmIKn&Tc$AlEQn)#RG1e^(&Zo+0xMKg1CdV$5#{7enqo03M*^36o$q
zZP6aUoFOIkKi?V{sB96WaX70+y77LaHE}nNPud~}SYpx^IRSXiS|2mov_98C7e`(4
zFrz=Fa5~&uG4n_sRhVFrEA|l;DDUV$*BLtxaqR9-y+`g9v$1{P7VCWdXT>CDl%@;u
zdmbejavk{2z;L;)Mf(Q$A8w&sw=qBcqrlbn$K~KG0G8OCi}70V;o2#Xmm2t<28FM+
zF7TuHek|i^L)M$tP`?@Atic{~6!!Ep2&cn<&t;NW7IV(3aLBlRG?^<a9<7DncRT!1
z!qUO at n7XywB;T*~UZQw8A(`k}fc21#dxX9HRMb5<Vhk<Uz60-01b6ReYlX6oy0`(`
z_0jKG2!F`hiLxHNhwu*odw}P}@W9hBU`L(zfMT5AK0ey at z7B9ag#{YAu7%?G7MEwc
zE9MNoNeE683Cb%w^ek*%A&R8yPRI~V2Fc`KL%(hIWMw>~UkL12r(gs7+H|oit>Qpq
zmFMv_8q#hrK3Kl~ex*at at 1SzWJ<tuLEHU+-Rb^7`yCr$rcd1!X9c$K2{X&t_?0LE2
zzT<L(sht)@0n1P7v)U`r9N#(}ezCCmNMZBICjL3?Y21Gq{x7f6`+Y>#6plAz(eJiL
ztR>ky!b^EJqQ`+vZ4}{TTj$Sz1 at qXult*MfzT??>ivs!-iOo*DxAk%Z_K`PGhibw@
zg!c}MzX9JH_wXG4xp2{VlSzDbd6`UWNBT0-uOV$kx(?~=tZ(D2vQ-B5bS<&z#&$y=
z^D^oi9H6?E(>7iG=}XmKE8{U9ZMl_<zv5uaI;uxkOLa5;AOAp$KfX#!<La<J+3Cu7
z8 at R8l+1RZ%;vZ&}Y5x>5eXEUq>tib|)!MANh3DBk?SXcq<+zo3=@P-4)6%dQ*yDQy
zBG~8C!=ja2tDPPG*dK at ytNYEZxDUs-GK=(r%|ExuiUI|RT3h?^%wMsmdX$`?y+o&H
z at 8Qdazb;4`zB2PJBFjx`?+f)M_}g3C2nQNsJ4~^Naqin(hdVe4Lbk(>`mDGT{T=^F
z+R#-LP5yI7 at R%rWAm+d%W~jx<`ioEVQowIIwAw8gyi~r&aeM_w;Mgq-v8QqupC&ko
zYvs)T(2=}*RnpF7WInYhNMFX>P^wrRK0kXJU*-`hNb;CM%4djuyEkxyvTKcWyoS+$
z8%Jy^$zEt`y`QuIc;1q`iyD5v_nmMJx!3O<L6YAl#VG!1gW97v at LA=<HU8trAwD8&
zkRrY(@u`XCA+}>-H^m!s5bwWlS!i at -ryA~GD<{WXjp;RAw<YJ=iJAb)={MBy<F#^S
zPmH+<aSx*M7`3sLPBpf=ICUsV%@nQEvh-S|UrAOMjz+&GWk<{u#3>L(?LywWuDmE?
z08gmOq1YJ#yO+_hRr>BOaI7ffS4;%wD&{Iikj!rhPoH5`uFzNoiNmUu6685+-fKP@
z6tAE5*>KbinbR%-pGU at tTkryWM?9%lqw~H**RnqVIEOS+x4 at ua54V2={x2dp#!TYJ
zTZFyQNjgB>;L{La>!Yq8RCJ39pm%2V9V=^}#N;W#3lDDFc%1K0UZbUq5$#lCS!nq3
zT6w0&v4g7Rd^ORDF-B51rr`a4!TV<PtW at y95%u)BT-mDsaSpyEs;rSdHgPuOA3dwq
zo&lEcn2*2i?1N9VN_O#z2H=6F1-<5Zd}yBXyO1XM$1TS_w6cP(1fI{s*H|TaJ0U#V
zthI@&-NrqPz2#F3uFyop#hOXVBxjH5+Ghu)Ak92o7GQdSN1&fYJznGLczfwEt&>Sr
zFqP`tKN%K}u)6%&fUjD5?3dvh#Au1j>R1!_I(YS=6DU>~*a(cDhXmVK2%QzywFr+!
zf at 9}6BoTkwF45k?x_2m_!CJ?|^=aJoy{@?oYexb62x1HGuxSgx(@NdM9PtSIX!t~F
zE20vC3z{|IaX7FkX^@Rc|A#zq4SpbOaCN*@I?SUnZP*{q-?qnUdnd*KgR;cjXO~at
z<?c<>;yIA>#s7L1 at F*(yLO~xxj_{4R%K1GZ&8=Cka?Q?E5S}LAPchf$A^zH|3C4V8
ztWg?(_XbR;M7k2()V9mt6TcQ<T5!a3X>f0F>8Hxu9b6qtWch(U4HJ&zzT?uNc*f9N
z4e;I_rn$P)oIeeClYAubeNT#M3~4g_Xc>t;_;QY)rVqY?wtT7Fo}U!rKzyZ(T|+Q_
z+&pcpq&>7oTG)plaHG0Y{l~9Na^2~wQc(t32TIhGed<hw+O$@88ufbV>1X|yd*38j
zJJ at nB(mNHG>|@X-7bzq9=gN{;t$iZ=O1n}qwnh at Yfv5y{`{VSAt#{~noKN)IU>%?>
zR$h<-OX1OI$ntpQb}aR)AbMtZjD+73m8LyF2QY7~c??VruEEE6reSf&D~2SG-WE^F
zSTkGeEK8!=UH-MRjjV>Mq@|{^HDjryve{JoOR~*&R*HE+_UeU#DIQ4~QuDC}-K$@)
z!?foNdGEj{<Y7Z)v^F((Cyxo{@nmcuRmsYz6YLUPA91WN<V(|q^&(TH85|{{p0!Oo
zukaBEv>1MyC_CXr{s#W$h#!NP1hX-YO1dhuQ&Fx<m^W`=-n_1mVm=(n&4>7YGM5-y
zEThOAgL!(i{O{m;V_THeCE6(;jb9{e=+`xBQ)Bl$pW;Ca_*wL(>0=M1QeNduVAHMn
z?JtzCf4lcm-bLquRBd~CnyCv%$C{1LBxT)cc-T;tZ9f5>;GtA)1^5?Y3{%e8yi+x8
z-f{dFmt8g$KW+$`eLw>~QRV60OY1K>YgW7sUCHGeEvc7p^oUI7ThjQ?XY4VW9!r9j
z)l4hFHPhwC&>bziGQ`V!0sqAV4Ap6vGTn7Au9xTU?JLjUg>_?eFJg%d&6vi2zC6Fg
zS~Kl!r(xx;T;<jgD-FuGv1j1FNY$8j8E0MYV`EKwAEz02-k1FJkWIXNr&7*~G#m-E
z^9RK1jvmoA1|@*Ub)h?W-W#0ti6$G;4*1R4m}1^NneF+V<!aCx+b_4a&mAvGQe8sd
zZoEt{HkIYhH8pn3RV5IeXw9fVC;INWHKOKIY>M&J63NKPYedFVQ4&vU*+{ChX4Gis
z(soa4&8T@!<f){&Jfjjx9tFu0pyl#p3^jhf2LIQ94}<D7ISh-Y=UtK(0h9NMla|Q8
zkgViQF(jSttyw|(Anr-kIu*eCpe`?vx+L|RaV_W`HP47x at jSIb@>Z@=8aTzEpfs!2
z at NE@IT1Qrad%j^r$&xH5FRude2^mY>@fK+v;%rcpn7MU3*>U_AX|accs-bh24DhUw
ztng$EgLW^OVGi0=!~DacWX2Svtr+X;)0<nV^5;2&<1_b?F{n}(zQxAIA3!|L;;2;Z
z7wqE9Y^p+28v~gHe&+V at Ka5H75}#euZH#*CiQDri*1DJ~W<9CO*m*=I;yGjd$auw`
z_9l^c(8p(H?;(Ab%p2(EpQE22Rg5B7&42IT+WqX}trfJef9%u`@e27Q^8<{Xy<HzX
zHEwq0I*gfHoYY$z@?Oqwu4cuQ=H>Y{7h5Ff8fkgWMFTl5s<}v$qZn~ZaRk?km2iCz
z>B-H*{-w~z44=kWZ6oW3n50Di at gjHr6(7i4foc+?f*PU9^F1CK;9CMNu2%RuT|rD|
zBV!ArX`0G2WW5dC#)*!{lI9C+qRE7~XcHzScqA=~4%(X^;K5|6uMWh9Jy;)I1U^ss
z=#~N63-ktyjh)8(I&{RG?`1EHj}Lio{CrlX-9%zL$R29X(Gs%H3psT+R(o5YdZvR(
zGGA;@*?YcyHuROrkRxNTPf3HW7~JLU2|OF*%e%yO>Jx$eYmBdv75Uz!E5Rvz(z1j0
zH#@tQ@){Esi}xco<=5fsv{uz at _{EEPcHkpg1>(I{RSd5W>ANVyh46Wh8*@0E>jm8_
z)Lxy4(i6EeVM*AV$z#TyWn19u)uw$EvRHdt6(g=PwD4GF{odI281RkHCcG9~5U0lD
z!{E?(E6ULtB?hm!Skp}(msgdQQ1;Wiv>og??G?dDavr=9QB+`tjPDFwly$eNG|LKK
zO*g)y<~QEwrf*cRMUr_|7wxu?F=rm4tF-4-G3JZbeAAu$H2&!|IodYZ<ZN`J39*Fu
zCtsR_^&@9NuU$mJ->Gn4!V=@=E{PoSz4kbpWvaA^w52NWIE6IUHhrAQ&Cka(L}FtL
z%EP*A&soGj9UPAsy0m|8Am^_r5uZSu-8Ob;jT63)&Rz)(zP)qc7A5ikxd!gb+3tP+
z`p;Ovk9n7 at hoJ%B30hC;<Vjv4m&ao*)e^t&?QV?)dBA!%yEpxPqMMBOHTc3R-Qg$X
zub_m?v(v3^Nn-3-yd8mWX8mSRy#08FsJWF*^t2gXE$mK`1f4c~y4%iQWIUfQq4_V1
zO?U0H-6PZegJSao%$8FXyg+rp;9}f+dB#waAb$~8M}aYtpCV|nse at gpqaW-s-Ev>p
zEM)ck0yRTN3}3HoDicv&&ot#Tr0gC^h+FXEdfUWU?M)Wg))`6jy4ED)dz<JMgQSme
z9JW(~-6LCOX`NYjo at o>u_ZXoMJu`iVi0n-i1EZ31hr3IsSCGB~T;XsZDZW?#(`EQz
zcHP(@{=x@)_o~v@^01#V(v`mEm&9V&%HjJ79}apak*(r~gydE`-l&gv3(1Xt=I=>S
zf5&r#YZ{&}@pCBq*2u<d*5r*b%G4f?bTyG_c#S-NL(PrVhA(eCpXou`z$Fv!Yc>V%
zD-7O8+CkUy;0+?1p8f^rrjm1zHHx2-!|y>3k7Ssv2h-F2Ap8IEnSx}pANb?BqX)HL
z2A$@CKTm!J_a^XPryM+gUemwc at kCyKQjYoozL%8f``Cw}yl3a2ydP$IJo*2m{NVMl
z73_j6wks(1$+iEKm&o)!l0SY|_^aSciKhBOLz>&bGjx5G1u<_E!Ev-d+kkjg54#d{
zEoXm#|7o=LGxS+-%|i~%aNUFbEgRxF)mact;;`i!?f%+Uc0|#1y}$l(*&uLf4Jc#v
z{zj{Q$Z--w3Ni6~kE`;iNXX1r_0u-><XoN7YK_sR<TD?)vYnBwf?4L0PR#!uY39AQ
zSHM|2yWYchTUJ-j)yP(>gpzY{g1fkMGM9cto*5Jys=j`emhhDZ#iv$-A^^W3*2-v8
z8}Tdtcm;`hPU=rre`CGz1T9%vVOqOyDnET{-r*5iN35CGR1-t>)x>DY9@<Gejk{Qh
z?(7ZK%7`F2j`YeMK?zfLA)cKzb_(*&cI8FCLEG(Xw&d))QZtZplD^|NZ0d<1Sx|;h
zL}IPVTWkJ;z2>BSSN*=oYQ?eMZ=2Fu!f34m(M;=M9Ag9e-#uH~2i*hY5a9XufUzN&
z^o8jd2ec|&MEd`V(fK=rVg+SbXRseXJBQa)sn%A7j>H)G at ToMoq+RD-N0WSCGnWVB
z$n^3DZHzyOa|?aNK=3Xro7&b*6dO$9eH<^!@Q-+braztDgSlOZa~2#UalC>f_<8r$
z<A at k*`@UyV4eSjS?_OO>82F=Vo7fQi*PtKE+c)D~Z{Emf2!>`l_*mSA?<IUJz+;?3
z`XB#q%8l<?{rfk#-T^uG>~!uuT}1-Kco|8?C(%8uP@?~lc|Zfb=eL#8PVlqD`_ke(
zanyd@{r$k{7ZpPe2F4$Aw8m#*c@&)q|EGo~XZO(K&adJ7$fezmcm7TN_sQQ%&N)@f
zkK6vH1|D_FV55H8mK$~>Wmm}yBfyX0UN6q-EfZ-;EWs(^Nza^EFO_ at P-=J)2iOKDP
zIO}nl7_mC_s#&<^0CRvtpfj;G(v^?-D+Zk&5u&^+SZvH)o at BHwPg>a*q-nOYddLtp
z@%Hrr%c}UYXB>iqLipwcb{i5PJ1uxBZz7l1&94 at DN|DEQ at NQjqShpZ`Svlg(fp0dj
z8 at LZm{!Z}dcgSrc60_W4%WZ(qm*%i!(~fT?7Aw8{xO0qZf+p?ScspG<<}q_zhdRYx
zZdq2ZUa-5bMz(`seG2j`<sLrH1vUkIKfp`z*Pum+eITiAyFY{O)=7>zm&iFk^pB_{
zKKMJ#&b~ws2UAa9RZ6(?WqwkgCP?P*$WnVYL4WaOMKtAD6g`H_4NX-^2c|^HctXMa
zYWq*W#q)sEvHx^Gp5o5ykbVfxlL9KxYc+{qpkTPMn?qtJz`xv<yA$z;`c!J6lPMNA
zsr-dbwN%^`3r?@0_X_gdq*L#a^#k9qN);h=Af8pb;kg~%p=y)haawZ(t at jmHCGF}%
zyrExLM`^!@+|+tDX~FH9Stp%_nT7U=Vx#kd#Kf{mv5yUZ-f_2O46!wz-jff0>9f-b
zw}yG|sm&IvuRgnrpMm}y8Fepax#bcKEDiC0LA!4OZoG?`0_;!9N=J~~^u7K0X7sz~
z+YC~w+mNKao6n4CQ;w8->c1<3+!NLvvJ|@G at 7{BzkAR!vyN%!+3F{^{LSQjk$oL|$
zNJ7<7_o|Xg(ugiEW*(6R5#xIVFwlGQ`0i$&@M|GeN9O$*P4N8@#9Fy|Vn1|O!ztEV
zZOLS%@reC0z4C51W%tU5K5InYb at wFfR}rV$t3ZBJIWzv&^t9$3v>y3WW1*MS^a>UZ
z9h7wh at f1p5-xmdLSR51e)6NE!O{Bc^)6V?KYgd7TQRhWqetOwwS8fSYoO4i>XNW4o
z{MFyDejT2Z^`K@<pc7?3Su=A-+c4+^4Y3}*HJOD at VoSmvrAztltAumfZRlu@za#+u
zcqOKv+l4BB$kItvgi7`M^L`tisBEc8 at M{~kNa?yq;XcCe;~<KE(%6w5z3MTa#N94^
zy`KAi!^*!0=^*FIqAn4g=+G+#46do%n>N^E=D`PP#`H<viLf=uke-EhoQb{1<pKxV
z at HV@SYGIdCx7ZNsCfap at PgCyhSFX6Y_qv~_wtXx8#j5f@?g&s(wr`~mt=~!>UX>0Q
zYm^PLETcvJ`92&|`K`3pN~axnR;nf(O!Ft-2*09COGlBO7kKoJwyWj?zc%=Vbz{E%
z67M;LzS$ROR3b(+iTkWd%&#<SyHD~0Nk7C`tPPrF-rP*$B##g`)o6Brr{L}0nrPIe
z6n)*r{bi*g7Y<`RMhL#h4Kb~4-;6cQIZ@=^*uS=+oearE#fI!6!Qj0$2_<cox!1nP
zI<TrKD4mO)F}g++=!{Ax?Y)XY3}noq at bN`FCGT0rS=p%`;Oady3~kiN6jQ^{r%ntq
z6FxekBgOH>0tYz!h;O0Wuu=VE<|I!@e?hVNJExz>y0aSV+1h64Mtyzkxh2q@)tX+W
z+CrhvNBTR}aExoUC6-kWR;itvp%*9I1Uaw%NNXKaMSD?i@~&b2O146Ma-$(;^J76m
zo#X5{s%eR4 at 2w*Jxuw2e8ET4(DbYR+b#Gq`Y{`G6+V&|Zdsh<Wko6oqPD_v7p(R-V
zp$lG<I?$+JzooNWGP=nyyRfM|byJHW+VkusNo`-ve2Q?4S*(eku(f%ft%<Jf``V{{
zJahcmc{btL0ai-?R<G1r>jSkms>oEW64BS|J+*e<Jk`gBLGgWtLB7^{nbw*A1#S2B
z>yI<yOLRITt+4kR^S7I|58u at trq}7dq}QrG_RS-FRN%kz)tx;%T`?QDgg_s%@0?bU
zhkB_4H+C=j!zcJPVx7AT&KlH<>Jsobs~9z81AWd$wAU|)*YP5b55WQ4;VvaUOtcs>
zvkm-u_l5Am!P;#Wr0UokdGYX>$USSCw9gDa^Y2|T`*hXBm(Zd>JOKTAPw3D*V&}oP
z{aM(&M^wALs6`BG at S{An&Jz7$vfve0f5bd&Z}TDZFz at S_d6<XwIkA>Wx at sZxl>@#1
zAHLo_uF3L^ABXS&PWGsX$flLGPh|25DU|qFc?d*2?ZDVza?spZROTMGu}~2!%hcr2
zLaD3}%}kf&9H$P5hGIxKKn58W;t9;uJ#1s39DeWnf%^3M{(j%zAA3E|p5y)8hwHxX
z>v~`Bi-);dGKV}5IIRld7v%kh4aiOBrX$GsuIcoa+dO)St)NpfTwgx4S7?CV;4jbW
z4 at b_ECka0rv3;H=m{bYl4 at _5HK6F{+Y|t5TzK!JA=5&Ebu8i`xOhgxeP7+x&@q><W
zI_-#I4zD8Q>#=il3Svpj(M7B|`WVq6lq7#LV%>Oxh~<1PZz1xv2JeHOA>XmOWQi^c
z-}_v6Ik-OM{O7rx+n-Vn&R=9G?4(z~jsa|E`2nd?hc*#R0 at lsE;RNDbJkBg$%UE?;
zlUrVf_t;u`7cO&X=ZRf8C6lSufhzwTqy6svFCIUwOxHXjkWc^7fxe at 7c={-Qysdhs
zM6+<X+~0&w#M(4jvqJHRtz=j7bT8qz!*w-Q^Bn&b_<`c}v#_>-T!yYRisXfy<1xNG
ztqgkmp|rr-PCjIk?PW(x4zO}HMxH0fSkMA2+}#u3kb969vI&^iS^NUJBnRX4R36ql
ziRA}kW)M!rImKlC$8RZ;AupNyf|8BGnmi40cF)7!FN2+50$u%Q<Uj*Qf3R$O7Y&|S
z#|J9dBk=u^AhbTjl*3-AGly<#YLh+N621hSS1XIy&qpY4gAeA;0T}~4iUT;qph3(t
zq;I{_mPwW6fDi2GL8d%dVnIwY_^qG|(i5wxk7mT)$SuowD0l<#vMXD>vK?ic*2rxm
zmdRy3XE#)~H at tMHMR<<7gqRjzzvHn}{7Z)Nw)wWGFux%V4*BQE*6$mY19>vefZqW=
zoh-~B(qqVDdz$FYg!`av!M^$cL;7W#s`A$G|2F*Zu`S-Wy-l_cG0s7r0E5<n|8s`+
z)31Vi*((gW2!;QK&wMgf8fwx{f{m*Y&wn5C{sb_?GejTiC&4aIE<7Rb5RQJ*ZJtPV
z8RhoM9^`H2Y!2&qdpLYRlipMW{%h1Zc*M!t?Qfq$FXvl8jx_iZ+MLJ%{D1LH{ErX9
z`Ty^O05*v8L0}6%LM!Kkz&>KA3>fDdsYzJ3)w*X=19Qn({9GR-d?;h2+eP)V9n9t6
zBwn*c6mY-9#B@=A#5mGFUgT_tO#mE9Zp1-fhOK3g-ss~FeUNElUl0!_sC~Lq)HAAc
z5+1Eao{(54k-3R8z!m=J8N@}kz&{f6w9>mY<;LE4IvFz2fLzZ)Y7*9<bFmirF+9%R
zVNbp3L4IXVtIXa}1MJkfn6Y$ROq<8??vOu3Fq7vHemv_&X7lV#*$I(eV-a`8Kd)E9
zFOog{t=QsQf91Xv`~UE_sL8Wt4<Ltc_RI|=N8H=U`^@=-*o5DgxpD&^%}D@%U`pDI
z`zZ5$^Q)iT4fPM3X?}HUui%Ng?*0&_%u%((F+6_1hFmu#B;ooby$St$Cf1LC`)BEu
zoWB;bEq;Ib0oi$MzrZ!4&}aIIti$;Xe_&fe14$ih>@GsC0iy4MH at F$~0bIqf9mxPY
z67XdH2IdgE+WN876Xz6;2A8v1w(nU9?3YO at m)pSfmPP1%kBX4reH7JQq};@NOfq3L
zzft9UwOU8#>_J-x%38t~EV=?b&=wY4o1v>(H^VkC^>75^E>h~egB0-p>_lF@?=k{|
z6+Uy}gI4;(mZ3A4?1-Ugp;NMofNgj;$7tDg%C6agygN5+vdVXb2cb_lVNFhxeop=6
zzm9}GvW1Nyetl-41N^6aH@~IM&!@S<OMI{Gfy#F)yu}09nuLQ&XIocgmgoh_LFZ&$
z(812 at TnL|GitGq&uy*DcDTnVeyu)spe`*HfqF0jlF{kO3yg|#VH=W$r(qJwgH&Gut
z(Q@<DFE?GRqD+~Q9NU$hiSg<;4LNqQ`iw?fM at AyntG@(S`ljfE;1|1zbvLdrE1>1@
zbqdq(LRQQ|T<;ZZ<G at kk750biv`$hBeV_Q|uU<gTbYPf(?{N{V61Rr&2%pbN2e#;K
zw0(ggkiQ4~2KRL?zEL=`RY{xeb{0JMusyfX5^5GW7H8E>50lSEEaz+WuwPCf+^&V!
zz)^m~9I at RA&fK$Z8Rg0 at R$Yoh9HCPN><;4dMQPl&cleqvcP6gM%IGe7fb|@eQr%@D
zv_0D0Vz9c3v|hYNB@^cGx1sGn(@oDQUECEc5trs3Q at LQft*NU)8=Mu_fw#5`@yoe7
zJz{lpOpQ7@)|yh}B#u{gAdf<i`A_&sCr~#mEBAn}p7YmMYj->eePdXjX at W;t#)Wb|
zEjM^xElb<3(g~2caz<T5Q{AM#vlDGs+!9g`s(!q04xL2R`)T<eou0G{SNEor<k6SX
zQouo&s(zy)-*(d0Sh?;n%eX}v`&`TXYG2V>^>?rV`-P`~KX<>FwLtb at 932-ewmAv6
zQs at lT9rGtU?!sQ}CRnPvCE(LYf{yZU(r1vj7W%Ry2KzG at cBt=w8??jPgMI~@hI|3$
zf%WvpYOkmueNbB?`e6sjhqBS=gSFSc4vRZ5Zh^@G7wrBVH)4PZSJ6E(XT7(-+UwtA
z^~SmkpJNt7<p8h at 16ss{ok(hhJ=%IMX99ifmDJI at wM$03w0c<vun)aCQ|O*-MQ|r%
zQnPU)^83YGf6WQtO*U^h>EeA~wCki{{^f%alshsS{KJW`-KQe=4Dts$!B@}#Sx6%f
z%}EnDa%3m$!nG#k?b&v1HR;!H8SDAKOpa}zLpg*;?4F~9-_@=01K)#3RBrdQkIlG2
z at 20@xiRZqC=Yns~sWdg!W&2p^OiS;{*KM0K#>nh`^YA_~YzToQU%)pmzlBBZCpWY<
zu?ovar%vmlET%1{nuHHL=r{SuQ}GS*Rh+~Amsnr+(8V<!@ELc|Gg~qKV4rCsd<L4I
zMWe_(tosN)0O*=N#}6O}Lw06S!^s at vwf5CT9n>;z+kYxUh|jMkA;2SAWxba(0p*Lg
zZ8n^<ym3;m>S|kXqCQ8hi?Tg(q7Ch(6}>QgO)8#~X>0EMNjDAWE+A&O{iM$4EdOKN
zN7r~z9uGT{lmq#sA34!T{CvQke~=vyd#3?qOXLNam)iQZmt&xhuVBGJgm#T};aR^4
zk03_bt#4rsRKLZzW0A!O+=QCy(>l+4Zl};MCw$oYjl--v!cK%OKn+e8Yj7`R5xWj)
zs7~z}_!o4od%&Oh1*>Q+Ws at gAdhlSFN85!QdDka5YtLw%dYY2bZ?}$GCC9#=3ZT!l
zj>;zcG!;+wjbuNQnnjOn9i{)rHM*f|63B773D at W-Bey@1d(L?BOxp0@=g`sI at j&jH
z<bPZ*;jZDz0A3aHuBYiU at Lx%&owS9L8za{2j8L|C(TX_N;RBR&7THf;M)o_hqanMJ
zNE?stfxZkZ48`#Q at Sm^kV1-dE#=>Py0{YR2bXSqwv9N8yrDH)RZSTx@@Z(5v&03Y4
zw=U!AWQoygF>JY<jed$bkv(Zd`xzFpXs5G?iM=hFXTR%;M?0!pJiQ9lz3^|4GyAXq
z8<7uF{?3oUUYEeOa-(jAk2UmMhHJ8d*NOkvY_dzo5Vu~BoMt!JCSf-);C=<sd_Tl|
z;6LVG!*uAUl+_}qltz=Kojx{4DJ?+1h_n8xd8ej>9iWfJW&!J;wYDrc$@-n<9iLLm
zq%CE1LFkjQ$L7%4y5JL{Lx@#Sjx{dEnBQo=S-sIrf4S)5?E7_b!hhu?pnfJsu8&Kq
z^L(2exlXuw?;*!-y|Q+Nu(o#2^d<ZDQg<Kxsx2e0xTN>G0empysR41a=3Cfv?KR3R
zp73N_wL7)UnIre<u95f*YUdHZpRJo5qvcp at 7=tT`zvq4>))1+ at -D|Q&w`ivb`*Tv&
z4;?dOPDs9N%1MaoEK|IPZEhCLgDqHf>H8Y508d1U?cf at Nx1wgmNA8-DZ}jKPBL16g
zJ~<77=Asa$4?d@|S6*Ignw<K0UayjJ3;8zB4T<K=ie;(?l%FGRN8a|fPBh1nJFB%i
z(+utwGu;^*|9Ewo`q=1P`y7WQaH_lP6>*Q>(kMsSSme~5L|s*;kDsm4O$BGeCjE5<
zbycCQIqNO=&T?bl5;z6dZ}KhDc==L`>3YQfy6Jf&uj_Olw}R35Edj4$_4FUz>5L{f
zL6caZ8HfB8J3Z9Uac{Tc?QXxMz3%%7)4i~t=@*av2JmJlZ+Ewgy!U9|<Kjp<$#dI9
znicL*g<HsTN?t)+$#=os<T>pk>p8T$2kqVytK=2X%C&of(?Y+f3r1VcvX%5t9NiV`
z2!;(9_)2A4DXk7u9F%YJEii&p^@Wh;7>V^B`babSep#&UcfY(JN<LK9uf7XeZ&3!4
z{)Ku|PLIrNn02pY9OJP}dZWZ at JUf7qwN7b|=_0wYAxpD>&u>=LPcODa+6FC=+nmZt
zJ}keL>But|{zR{{<#$Vvdt?dK>fJoI{~Y*Iyc#yrqw7sa{dkD~jmVoV@&n)0xW}JX
z2H7^F4{bI`rk5ZW${>I5^yAz!Lwude07lEE+VWkJ>6V-{-Ro?$!>_%TYW2$|&xd_W
z&TH|ie?4<_qv at ibRuckFl&hAIxr0Ob$ZT6)JvDRnlKHm$Q^`{gSd49hmRWmV6rY;i
zeo#ks0_)ictmi7xGQ<=t=e6W0u$F#3*Vz6Fb#Z>`SYNKp^&2z28jE{o8RlAR<w9Ua
zV5^%3y$Ug#{_pEO=RdwwiC76&oE-5q>JYosSkrPxUgxo-ka~{v*j~OQ&RH7ew5cd-
z>_p4O{hx;zjFSsn*f_-X%E48fjANUyP2*YG4a~VRL!Rlnf$6~Su5I0=SFrul7=Y`i
z*IZy1;yMGae;8X6uj0CzxrTdQHa=T;mi3#3csV8|M;hf`0^h>TCLecF42~%dcH}5S
zuH%?favH~CaZHxqk)sH?ierPHMf<pt=7%*4KfDRwG3KDekY>a`m`hexbO47vi1-Mz
zJ7J5)Dz{;Oi^iSsX{PX{z1>$Ews+qYAr2vVFSg*EH!xSN#tVZe?^UwD+RN5ll#FuD
zQy(Dv>+7*UAA0rza5XQ1e`*E(FWBBfC)G87i|gnl$T7mryIXHU&N-JG at nP2J*goJ9
z8lc-hOBaWo2k)WFD(~ovibwpyZp1HKlQqvR8oQCmts=;+HW at X6;Gu<^5tFb0^ZUfv
zs}?N)wj5jHlSRx6WGUiPl-mpN-h4~i{Npy<lWC8*XVr)Y7hi<jS_octJg*{!$U*WP
zf=wsSX(7A|t3(@toy!`VwS;g5fLppEW!5_62Wcl*c0VP#X74q60di9=7)y9-%dX>`
zutwI5czzOxQ-;|7cG&j at yAp@rgL0Gg3-k^ey1EN<R2lhx!tG<Mtm_C*nZ1tA53By4
zZ~rTH;~(G7*(NN&A<C!cnm6RJYru2mZ&6)0Z`i@@Q}guT<bBV9ItswMwjz$E%?%p_
z|1<RECcGDZXxN%c at vFfPHZ&6-ILp>H+0F}X3wE}FBYPQ7Zv7+ceb`hG58m^G`q853
z5vR-LdH&!r9GovfKB}T>k7F%<cS&9V_XXif;4d!_e;LVHD at GhVbKNG}=@l9rW+C~X
zS8uSi-zg5WXdlIP`_Q%_ at xSL9(l8&gQ_qs~4asPWm!PkHHMPmM;G2QCm!|${lYP^V
zI0uj8eGA)=jdlg at k6tQdSHEEG8`wtnr*`5R;5D*Xk-iAes5#sH`Sxy>wN;xGHJyGd
zxIBlQ=;JcP^uXTo%>c?+t9dB65^Y6s at jox&`j>ETs<3Od6#PgtkyrO6#L^JIVieZs
zD>R4WTCMj?i;=5g=}pfa#6^1Kk!!hJjfiiy$yyJVo6ikKskpqo_ at 0^`yq9oUb+E-;
zjFPO}TstBv8F_V)SCpNBF_;p9*aF<U*lnXHmbK_p32(!PW3V3XU|+R%u5I1!Vb at rD
z)}B^Z0aMyqw_^N@&>z~6gT33a6S~Y85|i?{3~?eItlLClEfV|?_s4o#JNWXcZ8^q_
zAA=#^a6JBCv<~gy(;T#li({GKj>&sECo8xTb$qc1m?i1?n}kbyA99g3k=T$}6R`u4
zeuMT-tM=XaF7|t{)mQuGK1kZy(!1RO%)kg)<xmb(-cP{59>cGa*f(sdgG)FYVH2?3
zB$i?+);Hn6lmb`1Z6@%J2LJw?1pDCNVN!Rl-S}n?zPV>@o{Z$t^dSDpM&d&V&jji7
z4J6k(ax<|il;a?_2e4)E`w+i9gb#?k)0t~D at V@7Kw+YDAGT~;2>3eG at a>-ky<4FD*
z%8eMDO-bYDc85+K_MyDT>qY*Ri-)86;pO{(y at LCD%lFH2jjC$z(B9nc&~fmEBTv+O
zzNDO8rKJ4tjr*(oJlLy0=5g(nI@?q?_xKIlQ|=b&_?C`rdB|~M`&)DiIlK^qgL@<K
zgKxWQwiq7R_Yhk($uDv(8ISm0<jvMlNh&S}E#AYDydoratXnu5IGqWI>+rAkjVLGe
zj_<|2{Ntzt__P9Yu#dc;ZRmgD at myTZ7A|&Agj`eEu`c*W-x}6E&yzYTH^00Bza$c;
z1fS4Hz{=^ct&KH=l%`Ao-Z$-2GFP=T#dz0jvKF+roRAm_L<++ev%GK+>#Js++>&%^
zv&uOp8r#!|!GVADUvE-VEoVczC**27zyoKYpQAecWCbqxSM2nX%&Xv7Pi<FHoucpb
zfutOQ4&3uR`5scQ`+g&S1KtSOprVQIo!H&~^3QYM?Dgmwy$NFgxjXYd<#5*o-}OAO
z*3rxjBM<XRSld}$Ij`kv3^foc#GKRgX@>)Gv;K0}r0tgWKk~61#P==bVvWYbrbYT|
zChC6=T~Z{y^I1{Rox-AB4U39aHN at 524Ysv)<i1%2Zf?lU5~6eSfUVndpL&1k-+FHE
z(Tt|xXmBpsZD)EDZKG&Kx--W}cWS5LxWuQ_ykW}&CL^!qb2ZaVM^Ned1gcc`uc_Ui
z8<_4Na;Pq1cNWF?WThK2=*eQ+ at mYx{PqPwwoJeV_UbWDtRD1fD-`RxLO4^+9>SS44
zC7bZ8n>DMtf=<IO23^}|e?W00`WvVIG1au7*EeJZ558m!UTW+1ONn(_HTpqtvJZB}
z*H!zcY{<$9RQ2afBKW+z>XC>ywrbW7K41^l2Kj5Xh!uAuX53W~eQbmK7SYqSuNKMQ
znC2H}YPK}&^^BXM?Wa>^rNWjuzyVOMsCeLoAE}DZdw5iX=mk?xkvG$Qu$%G~l_Sqj
zpvEFq*t%%tDK~%SSl_jQbZ at 0X_hqJ;`0Ca^Kl%Hr5BOuB*@=0268s&>h?67wXsK`n
zui1T;aZ3&n8;G8XUBYW7K3o5gC*StAR~-mXd~)-XDRVl@<t@)At%N^H-ttt^D#9hg
zZ$TcNp9x=AL)^liBG?;5iIC%qf^KMmi4z3PDOHMmn&-%-ZBbrZb8PY<m4hA0+^F!<
z at zX?qb6W=uKLc(5|M3j3>04rEM?2tKC(k&6XY{ipsT)rM=j%8a^8h(M%=3(OCvamC
z<o#=APgaebT^ASjeTiX*l}@O0^@i;2rsoe~OLnJ%>m6&LP+)T~{=NyFLVRqxNd$kU
zGoY?VfP?se;hyo8BKD6x$fNRF$oBTLRFzG&vjedbW7<u5<5<Mp8^;$mIm!#KIlja1
zdtA2`c}<jg58^k~NMe58fn6)8+H-haNEKv3G3xDi)LW!m&0J9?sz+({)9x1~_%{ps
zr{8Z+ at NaxInCIy=P~E@|yUbJGbLJ>iu36v{!vFi`DR2Gr|5@{t%K!d1GLhyDV($Ob
zxV~bcZhDl$c%?moKN0QQ0`6!_L!9-9^dYP(OOEyG5)D#q@)~FGLfhHvDP^`ng{{e$
zNN3DRrjA<;OE$Acw2_Iycv1=cUDjWv4;dS*hV7e;z`U{x3#-{^?`G|kLhLVutz++i
zZ5{tU;YY2BdBaV3Xa`e?4hTDTpso0Nils)ksH}Ol0=|Rjp!>oR^gd&8*^SkykBvkf
zo+>|({e*HQ<mksy<Dr+4_$FU|8DxK;xX%b%H at iw>VWW4Po+)YbIJE>TsQ2(DSpSed
zq?r!+HiQ*25ZR&Lot<Cn>50~CPQPaDkxsU4zMg{mAFJ6MWU=MncH`JX>5jS?o%ieJ
zboQYSWMV$Ks9S{cCGvg>h}Sx5Vs`Y`#E`jB#WyC{3T^^JZd37Z)kN&-$M!zi!q<AM
z?U8T($UZ)q3iv>a{M$aW{knnM`kIUZ4y)ndj)jwBu$gnQY_d}5J+}f%(gy^{?S}f?
zWmUelIaZ-pq8t-=ne_d-?64n<vv at ycPb|6NHlU6dl6oKQUQ<v0w_#r3j(4ys)X560
z`PAT^jmFv}nz at QLE+b{q8BlkrYaDdG_C7C at yr&L4c}xep&<8#Q=DG+zE2G_VSeH0C
z7iDj;nD!26PnWsZD{N=noDAic<`}gjE$X+fbKk3eyPwRX{3)ExE{P{2^<H;{4Jp*p
zF|c>%>kIy>4`bly@#$ZYwq7$cc!N!jesyDo!j^tB(RLO2OQUp)mfyh`Q|Tg#iW=go
z_R|Z>*j9y2YhOsQH9sB%mo050 at 1lSOqI2=ia8(zF^VmVngzg?h{9;^;)+dw_dfzS7
z=O5XIRA;J))2#<!FS<$p5Q1E+kM?4Y>R{(1Z~Y1TUAGGMsEL|f=ovpAj`kXfIyMP6
z$Si~>!rw?RHnkq-Qfpu5leM0!?`bx}ZWLD{e>+VW0-dR|+Kb0jdyR?bA$MX$8o2%P
zX>i=;?5_42P1^S;=FgW;JVZ|nD$ZG2*g~u9gW+Ey{_y>|rNaBvm#dKnEumFY6)K$b
zrB^~oDRMz!pXm1?CBl`m^19ef*;k=Al6~m^;qdds4DUaM{e{AnyhxG<5!*@a at LiL0
z?V>!b?J0g0Y>`CXl^Y|lP8f-G*m2mkOELGi$SlH$LXWPD%-ynb_>m at tB4#OkIbyp$
zC~CO#3HrmzHBFNxql?F9rMr;3_TJ1ib??lS9UgY6*ij^R-Gr~$CIY4cG93Q*qE)zW
z7v|{pJB1iezl_FQg8F)5Xngfd{_pt8$^W16^*+(pe%!$O5 at V}tNas|IHH)?*Z|PrS
z>xVWnrhpNDE;j-7{TcV3H|`XYzJz{+m{U^MWAvo1$=qZB-lp2iF9>Te$nQ28e+e)P
z&T at H>+#7i=(~lE<k?1sh8~TVRNCB*6f%Xb=iMoST)_eIc%UbH9e8&YKuTWjmA2p$d
zz_Y;Nx0C$3x>upVN|6tV<bIF&pKGbVuQk=QG%T>R>s}>wi)%7uEx8FY_|^3V=Rf9u
ze-M0YI`H8G=d-Epk)09GOKUyh(a7Ds!TLwhd6G9(Jg^8hns7DZT$^}7B#&-gT-zGL
z6G0cpj;KrOIAfN-$(G2)hj0$@#hacuh;jQ&67c)5|M#aBu|Y=g79YXZfbG}F-FTI1
z3C%)|BDr`A>_sDlS9#zVmf6F<;=#^- at xAbU;Dt0_+!X#f$!m9UGw==bj6`l`AwDdD
zafct%{1Q&e>4J}76UN;sDkwZT5}an at SSnz)3A~W1az#Z}6uBlJ*T8qU9l3bOJu~I_
ze+TyjAP;vh>N*eG{_q2lGVj?Xa^08!Svq{)s9P@*_eZw11^go at Gh|}<fq$Pg$LlT|
zjj|)_<Ar+RC0liSil!|9d2SG^a~JF4CxgZzAJw?g#Q_s+d+NmYm3&p)2+O>HZp~y(
z?rI&bO-P>-kZCJeCT{Iw72<1cvY#o`eScltL*tMq5q^T!z3X91)+DT9gOwvA;ctt?
zy8k!mvKI&k2-b8t!+q#}&?fCbxnlDKv;*pLc?jzAyK=eUEc(hdY+JRvHD4R0wJp^q
z;`1wFlM8&Xu6P6(ddRH1sxt%!p{DVB0q<G at e$<VSL2-2*&m|)cF)pkWcCe15K-{;J
zyYFc{)BV5CBr=v>C6Ze2t^K{)qcPWdW^tHHamXS$*Iy=yWN3qk+2D$dGyw~O7>{F7
zx^Yw_bc?U(63u&cD+Gh$mLgX7wk@&&IH2Rd#kzC`;5JV)rrGhDctb?h7FI at 05lIYN
zL<(b&VM^Sf&@ra0B7$+!pMgteC&?>%ZbZ0(=Uy}}quKJoT&Lwnv(s`C+|&;TI4vO|
zPW~;OPHZ2pi!AGDOW)IO_&~da{-_)B-|@7E!#7Rj$`&O23O**8eTzjhuT!+Fh}FX`
z<A|;H6n7Kc&ACMC#b8hPp=wX`O6Zci?LGXMa1+}99?qqU_Em$kO6-aoCmwB7MB at 0E
zpXz$UGK9COvT*5`py$(GDix*Fxuy}Fn{FErjA|XlCTQ!x*XJodEj|@DE*5bdKW_|=
zN1bemb;ijxheatGU3g-(C+17MOBd-8b|Kfn0_X-KRX0oI4qssyzeRXk-1qzfQWwQ*
z%aF6LLN4xzD^&GAPx6Axi?iusO?-vO#x5`9MTnH7-0)RzENakC4fe4FZHJtCc!jum
z_*<pptAmh_-Y7 at EKwL46HRIS5k#3CZo|!4IMXZQr>39wgcv}>2y{AsLJNQR6g;D!~
zJ<8X2&rgt at sEZ2w8uRf7XeZa)XtFLYvgoE4ozgv_{sMinqa7ISGkTsWbfT)5RWiRt
zEiWp<xre8x{PSAVuOh@{30^{7JVE*(f2&b}_ at 0gA8r3!L1eul9GQX4i1ygL*dgLV2
zO()Ohb(I*tZ=<ZTV>tJF+l%~d;NrPq)vO(~X#AaR6Zl(8q6 at pp*f_IM{RMcFFbC_i
zFlUo^sUYbj&708k?g(e_%kT|mffc%dZ>$sXk$0owDd1}O=JEqiJ}x3y1|QoaZ0vs;
zDxP9~CFOu at ZxlpU6|g4t_HaYk+rnw;OTroOZ{+X`SS|HC_wCW at FHpW?mI>3~d(P|%
zeK5AUf))2WW5JQ9Wcq;Rxg%1DFVmm?=XcR2v{Poamt>3eJE;%8Et)yVE at RHHH200i
zgr7YL+!%@X33~@+S|j>a?DUtbYl*G^y}yxe$|wgvrs=R|q%c at w9JFef%`uTn`~BtK
zCxU{g?qI~kvCBz3H_3mfFJmV%jXFcd>+rP(mW{xDqlWJr#cY=LFYC|!EyEBj!Pr|4
zoE&1KLbDL>MXP5IeHZHUL0k1&35jh0cVsc+Vd<!!f>zXMfoWg8zFh0%ZK%__L*{gb
z1~S)ZnqOv)-g4U<z4<mcu5QIFsrIa1MMXv}(5y7e?+yqjBZlW=`(2Nuu)y)LsRs4e
z7#g5DE*u%#B`6aUnfsF)KJ%GtfT^Ip2MCWd+UT}Of#(}z&tkt3`Qw9$ybM2qaiDmo
zJnDGZ4&gLhzfAM4(?lVUc%ID?v;AbKUsR`X<`8B(^g*#G<`wiYZ^Y`Ru4xJW5IG_r
zz_+ahM at r6|mmoX9D*)Y2Hq1?l{vIi1&@Y3n&v5;h*X6fT{X5+#EA!v2sRPdFH%=#A
ziS-O61zrqemm+=GXl6ak?*u2!o at E*lS9S-sjGMZdg>p6r{r;)Buse~yFLvgVx#$UU
z59v#`s#hhvE{+?7lxyW!-_QW-IjQebVB4tQ=>W9nZv7ti8goZy;4371wkuiS>*zGT
zF?3|qJ#dya()oy`Ign8joT!nMAeQ)XB{;W`kF7zT+69iSUh~q;P9ySz8Z%Etu*p<k
zxxB4}V7-xV_XxL*msJ3Z_XCYw3+TVM==hD at sJFXxCaE{mMfC5B+M^`qv1+qr75WQp
z_jokJ^{7UlS%zGv8%W<qOdmKE=#AJW0>76k+mBqWEoasT^94`K%8UyAq&mN_uPVH#
ztF)f#5A_cAu;ZvZ!gpmwMk(^O8oob0^d877*a(bDVAwEMlkrP%Nu&?tCS>#i=XU^H
z<0s+!wf&VB?6(NvskIB=sM!8w at 2AWq9&nSuamxMT!<9V5y%4$Sml5 at vW=;4})k);M
z^*Dl!z|CmZ0MmIIm?~G4rrNXWb8)pOn>$wBCiDMS_<HsJux$0j at NCs@+&!<W{fF=Q
z9dn-6-=%KA at 4?|?&4LcSlDlqkjhhADlVCn^-4?vR%ijgvHG=zp2=}~!dz9EZac%&=
ze*6!`|2O?zQ$681WV|iEBK at Vd!11bW&&{_O5Bm6<(g!u~>I|9>fL#avNmhY;EHAQR
zl~V|=LL+!k2}a4=9`@c}W5O#zRzY-W*e5u7K<8r&FU9<~M4by<(Jiz5t=o`M{oxD#
zl5J|f6Fg~x1^kxueD$T!z-mwP=~%?1P~G9O*3I-0%;h4+7cq(#{P8TTiT2D%hU|j;
zMcZLK>rHgN*pic64E$KJr^pai6(y<lxQj!oj3ky*kKYDf=T+n_G0I_|h#7w;NL6?m
zybkuE_Vge8t33xd+OA(+TygzE=E2)->v+A;7X~r*8btFnFNwb7^^3kXwu`<pUKQ;}
z4(WYHr|65n%W;8>Rc?%4f}R`!j at 78JeY#n5#v2So_E+s<*Tr?QCgwNo$rvZ_Py0mk
zs@|t#ff-y%xSq84z~OW$bY$3OogDpG2HdIg8LUHr$H82)!6<AFNCA%>nfJi8bmk>q
z0p>j?{lT1ZqAgep7VBH;GQ#$eYl}n<ub80oc6T!H3;D-x>U=M3rj=FS(7MIf917~U
zgI_V-!KyqrP5<bzBrbB|*lm##|Cjv;+oS3R9pp26!u$X8E?_qCuI at P{qOCk7Ed|an
zDQrtYG*kDC6gv8A8XLhJhMt>VIx{xRT4I1aG>qOSowUY2Ic at q=>$80JSYmi)WpnTe
zYs~iUwDHpk$4)UDjkzU1<Cn72m?KUO&k?7o%|&vZ*N_}$AcrycX{=+Ul(x%qAjoy}
z0PIA1%Gai9ZL3jl^T5yCqD+BLSO!0LCNBtFgWZB`_0z(OVO8D at VJD@J0beA=`S{lj
zUiIR}r=y4Zv2-=+*c7%2I5p_iHsz|6y@|9^^{3$RSeJ07iWTH)-W1N at HHUfwyJrYH
z3AuDnx;oINkxX at Zx2PP>Sf*by)u-7DoW__xoHHemvqlvwJfc}g@;~q&*Q^sbV=oJU
z?{>`J;bK$8H%2Oj-4+FN8N6$K>}bg9S16}ZDl0-CJ|p~0R>mUchUHO%IL-#RY=`Q^
zbq9gR{+!iszlv}8l1^Fviy&6kjQ)t6UVp at e&%=01-a=xQ+oEK=`@)N)ud4=xIj{xN
z>J)+}ft-0juoHE&f#CVo5-+8=&l?<y7~f^>Rlz4#+ihj5C92EmDXOc`gBl)LiaZ)p
z&2!$$<$Yd5*LAE~J-HkBsuGVx<w{RbpZa^Aes!qK{sols871ihSeyM)b%<`$153^{
zmR&=;wvQAdhcU~W!rx%c-?CYx;BR2%R3nac at ut+p_J#nzGJGA|4cT47Z#4Jmx at f67
zOE;0pr}g$iKH at Y4cF17~)o5GS+Ga^$5U)-(DieU6GOX!WPSxHD$kg6;%b2e47q;VG
z at l{;gW=_^&-K@@n{2tnm$G#VZ_&=&`ni3qK<6pH*exXWkna9m7gZ(n117N+GxE*mg
z;(qCj<^7=#^2#i;7*- at he3yhr=Iq&+JKFI4df^*t4|$eDLft{ke?4 at IJN$Sur(k?O
zG=y>I at c6~xEkRCRf8<7$Qp*X}_HH<^SKPah6B_F?PnqGHcALyUf?i^}N#~;;BdR@@
z-ozZFWbWYjQfazRH|cwbosz}8Lgd4oPCqf-Oa2Qk*$4Y|b2;qM*j?hg7*}^}3;dTz
zC;2p^Z+ljyKv(GE=GNQZ2?5qJxz4vpzKNF!-c(T%)~_E}SbZn2Q-t+`{w~>v4UHXM
zA9T&>gpE#?T|Bakzw4BTUnX45e}AfVwj{$kS>bK1TOTG7?6eQ^WzaPc+REzHPm2(H
zz&(?D78g$`Lpi0E=)!@zC1Da01BP!3fGx)zyM*xC83!Q09jqF<uX at Kl?G6$@@wZ%U
z;B=s7!p)ks9{E^K0B6^LTvkMf2WK9}nm6<rT73y)>UYv63Hye1gx7Sxgd%qYbQ*_I
zj<|RlvUVBtnr86;v8&;|@Q(xMpF at 0km{%gHNOu$CmMU{I1($Y2vuPPUv9C~p*IOy)
z)mzBN^j|sEW<9-qGvYx?fzxHcL*Qa_#aQ#BOu4)Oa49tA>N47bbAaJr4GjNGO^PrI
zoY#};N;+OE`HkqPIc2f8%jG^Vi(XK_5;Y%leJrQfA$Q=UtD+?QPvib0PvDd*BBB>A
zulAgX3_BSWZD-soc3fjqbDf&0Oa#7XKc`D25_uJJ((OgLBBIr~xhWYg=-9YVg}AV}
z*7*%>KhY{m7fP!-1dpq~6ZUCRftk^Vr~F;dzsJnraJ`+7FZD#maI)(KJY%Eyu8-u&
zx4op`_KHsc<-Wq{9L at AiTY$MVEhHu>1o3q{RXxB*baC}rr``_U45G`nhjZ}<My<D`
z%4A92 at g*H!wLe^f^CoqExU8zcA_XpgMc7x!#f^B)_Z)(sV!0e{V~%6(GmqKK(mOt9
zRghoHc9heY^En-Qszx0;26}NB>fWjf_Ak>zucW$TUx6Q_c+O9-i6Lf-iiB=i!O9t|
zw at 6tuhw)9n5w4EVsiZI1J9?As9rxzLR=S+{czkY0&9C;X+oZZKSQy(u)?XGCX at _dx
zjE7W%SSzqZhYSPGe)VK>zxS^}S=#G$HDOBbn=7icmPE9fTQUg0j>5PE<LJ1iO5jiW
zD6w%E5lcyX5L38E7r`&3OP4v=80H4zl`sdQzwaS>I`o6H7z3yCZjg0pqy*o+5$B#7
z{_YIh at k`)p5G^5m7tC+u8k)=1RqZ?GQF1?LOHq3#6sp;cGAm-0=0YbhKNXL81$`2_
z$DL3U at hzh6C6Gm9LVyi~pQIG`mr{}8 at nMc|Db`~Tirt9^2=1NmBtv&w2ED&j_Jz(c
zdaA%}+e{w_I|Ck#BXkaY9S at 3K+E?|F7Nr?>Q`jdb*0i+C`OTS4Gp{Y0UzN_vYMNPj
zRk|g0M*;or4iCL`bR>8 at SBXZ$rikM>Z|BZS$$8bjlIS*1#cA=M<?^bZi2TO->^tFJ
z%>v;zVBKHd(L%q3XRO7#PdM7GO<<bn^lC4k0p!Jgt+pM{(Jrs3X<^N_3)zaWV^5n1
zub1X*fD-oK!t`6&L2KQ?%XprdiW$9_Kg#{!>+|^q^9uGMAMh;lj<LSLqhw{v+6veo
zCodGKAg7aIYi?@kc>VR@&YB3yBgpfa&97ID9G<(srJtfU4#!>Pd)uu7sShINy1 at r9
zb6sY%s#fcG)zS<7FNm!Nu3S<z&(h2|*rky1q1e)p-Aa>#eU!OV at rW4tv^XBpPn<6>
zec- at HUhx@NS5lF2%3LFS+zzb0I<bbiNAib9si=FQfw>0oW|Vr at Z*+PiChLMM)>Xvj
z*}M{VIM}pYgK`Siv3|BI_SLc at nN1iQ3d|jns*fzMkvJi$7VYOxtJGPUP4>C`Bvrdb
zdc at 0HY3s1R5Zs-Ux~6CH7pe;ZiRt~`@asC_s-i4n&B}85=L^FZ%z at 4YK9we0enWC@
zx8>#covS~2*c18y<cZ<?pR_w{#aGZ*v7VX;S?yqR@$E8vJMnFo@#jV-6Mt?|yKaX1
zVZ<4cSm7d`uR4B6kJNvla{)`6MNQO=Tc^X=Q4>B!{)t>e<!okyAUD_e^G9L(N>1n5
zq8}ead{yQj@|isF(l{&b*)~C5+{M`c7+b8}-y(RzozBHfAAF+kXr=;>|6-(@{S{-u
zk8eV~>QS$Qp(B9}-H_`>zUlc<s$4hfHIq(8y*6%Sy`|NjdOqqkgl}`Im_F|Y203A{
zM)k8 at OF+Hq<Qu!aC0xBeZAnMHCQ at x&y`p{*54brhQFYIve8S6H`aku0%R4^yE-ize
zBd2Z&?2wO%M4x+u<;pF8qt9FUV<gti_pzSZ-!7v(qNKuL)MEnbF^Q|kV`Dc&&qY1j
zNj^ONZmiE{LmnN0ziGcNg7i7{IIKg#DU0#Gw8|N-oc|Ni4UCi2dO;-STj*%!<ju~?
zvw7vH|07Y5ZDZ~eKZ5^k#I7~W-9XlMh$VyTO8-Nw`)P3T(92?6#&NKj22lfodhXhX
zV0(7ZY0MRR8P6)HS3fMc$b)YiwuUDDPTd8Qi>}~rL>nBb`zTC7WGGut-Kp^6?**@H
zTU#c7yYCF<E$Bjw19*MMJfeF+Ul{|PZ0RYNV?3vuA@?-St*iF@^5!YGW25yYDFvC7
z44LFY+XX^Tf^KL|-j24;`@k&ULbmS<7UKTdc%B0Kvm)gD`fTC%t92ne%+EgL@|}iQ
zmovy!F)icS$}jT13i=fLMNnXrS$l%s$Npq+eJZo|(Z`_+`H3OF4R+4v;&*Bm^z{C6
z`Ocp3)ZnvGiun#>f at XcBM3Yf2FZ!|oIAL at 0wl2aC<hR7WW!GW*mZERCdRkQZ7?UU3
zhx;FaJ*Ek^0Hvw7ZY%2J81zRObr)mb<tJsj=%qMEVi#s3&l|8$V|{keu)CP(Dbzjs
zb^Kq&G|;r>;oM;GnWQksVYgZr)U0*Bnow9yuRt5oZ64TVT(HXp(91{NFHvJXR{z$f
zq7_sREuc0S-LTz{5T9WmfX?~|)yS^GZ#?wbv$Dg(GOavxBIeNV)cMA7 at S81D>y5?M
zccqkdk<^a|j1Yf2jd^j at oTyG#O2I~wn-%j4<?u;henfda7XwHiu)LvbLcfDdS{JdX
zr|m_5u^<wGxD%N>kPjB4)K;A+u@%24QQfPY4eoTD$9lel)160=bI?^L!WLXQ)c*IB
zCgd;0oVw|(FEz;3=QvizoQzsP+SYVhID^>Uc=k}gzwK`>qZ0j80zEd?+M`Y}-8U-9
zmKrRV*Z2h~PmQ2Hw7jAJ1JC<}d&i(N$)4s;V_24OO2unRF+NUJD(Gji9=uLha5g_D
zy$n2D+`B at 4B6>K^F9ml2)`@%3Z%s{HKP2tA7;TKTA2`oH0MG9q>J-wihwNU^8!Muc
zk*j1wQG at Pr#Lhp9wRLi}XVJfSF8DGAzBSY7&_SGT3FQ(gN&m(3{ZP(x_QGzZ2{BSz
zEWYdQg}X=}nSp*hON+RoLL%o1%+I!wZMN?cd%+v8*$ZiM&2L$EOC*d3cJvqFo4O*X
zfNl9Ua?+(B)+mD6K=RaJtMiqro!A<LE}Z|j$xkp1+a0)0rf$ITI3a^|aR-j=C3Yrk
z3r#|EUmomw-Db{rnuz*?d>7$c-dlXiO+|vM>}%C1oDV3McU=(p6PxS~m*3mqT7#S^
zH%|cPsV1BoSLaOOwnqO?3<(xm|123_?|&Jt#Qq;c@(6aZPlSJB&h(iB-i3-2_{M|C
z$?ExYa_r at Dxo>&YJhHaJT&?%+2LD^V+eCpIHSBZg(H+gKr`lua;cRhUc*i2{J~hdQ
zt6A^YhCa1hbxBYb%cAY-{k)0Z#=XBY+yH$_UZ{!!PXwK*s)L^JBW%p~%zd9Zcgv_o
zVIZ%x-0Wj6iKz4-t~2er<Q7Yhul<0PTR)V#OoxS4Tzt_{ly!f({HKS_a@{p^-={Z(
zPHFFuPJ?_23+x>(sdqEtLYzD!Ff#{XOC>tch^L+g7Rl51z3LZS--Yjgv{I3|Oi*^p
zHTEj{E51`JFT{4NFXZ)jI-cl1;6X&4+}?w_I48cm`qfj{#=1$_ at tne<Q~Eznof%s<
ztV>RSFTf=$6P~L^9#hkxIU4PPbvC*7Qs7zNu?_ls1Nb>?Kl(pP=2x9PCre<3kJQME
zteX?|6 at Et$^UKl`z-ex-_Ot|BcIgZLzt?@Mkv~!Dw5-zKI_v4`g-nQJwCpnKcf|AG
z&`pH at gTkB!&Q$1=$1s27>n4b=W9*T+spDJuj;-7rY2XEl()i$7s at 1Y)=zGZRS8|&1
zr9Z%&wT<t=e7_AgdctM(e&jmn=X%D;>esYX9%7D2Lo{!~p7XAE^Y*K(0)80@@yqPE
zz^2tA9|dd(n8UqW<^nsJ13c7v9eBM4VNbdSy|+wIue#~2+=$rTSg&v8 at 9lw(aoIf|
z{thXgF%5Rn2=Yw43wBcC>!A%)U+9CUTwQCc7Idwl1_kz9Bl|FOr>-^Z2<LBqoSPqs
zuik_)?>q7%_yCChW+(Zba=IUYKefq;x$fwkPVI|$&PZx-{&=ojKcie-mGbwl49&4|
zjocbImy8d-DP~FVsqn?9i?Pt-qoGq6)Z2|EVqkLS9{0g|XyhU)Nbr_=9p=UFV0-+k
zG9)hqxk1J7r%nW}!i4$l=WxWTvrA)L<T}ht`=Wz6y*0#<ek#GSj at wr{HZomU*EuVd
zd5x9t<Taum8i6_a9dk+JF*)DKzDWIU8P8lBo=3hHer7ANLJ!3J_8aE6``VqS&NyHP
zcPUMkBtG$h7L%2|Lfxg45c at cZ=t9t~mQnZoM0~=_a0`9x9&+A1me~Ydu at iHD+w%K(
zR)a;tU~D?4M5R*y(QV)>MG|hSpubbOb%R*bZxXjxzQa5NeWxB}st=fTY9#v!o}B|6
z!we=C{x1_tBaVI?<YVtC5qlBaKZok-fku9TE}yKwtBS&7t9FIQKzAJ=w(Bk61SR%q
z%@>tQ2J1d`7RL4~D9>H^2i))vtb{J~YLQgutCa(L at iKfeGR%)7bB%P;cA8eGv%Fh|
zz7Kh+4rF3}jFK at dbf3Zd%T?gzMW2_y&Bs0H`)@x$C!^naXSga4<=qv1OAUe#uLAXc
z-CI#*a;#{Y>qv$^kcnKglVb0Sq$g*w^P3`_vG|r4)xoT$F%hCf`<5;u|G&i8s-*s7
zDA at iIt>i0F-*?zXyyJ)Wh at RAZ<P#Eelh?`lNFJd6Jh6uXX32P3mmk}OvivT%sQL{t
zs~6D at _p<E3I&2*(^B{Tl0laq+&x-a3XF31f=@PDgTXFp*LA^cKp~83wRQJXtA|3~^
zQ?TbAicQ3twvwL`{UGMF&8I}vp;NorGR&7x0EaR{y&W<4cibMv>1<(;lZNQTZ#j(;
z6)<PiZ}b%CqwQq<UD!j%{;lUkv&%<Sa(WKS={eWvhj=EU=lH%Wu4jYLN43y<rRpy@
z`$6E7XTUkJnWae^dj}p3p}HfKypj+F&pI^j)q2FIM?;pp_P4&wjU6T($0ZdJHYXV)
z*jMN#a(eV#g2zE$cn!X|J480x9)XSo+mg>#jBnsrz3sy~AL`6Ow^aed=b<xmy0!0B
zdm8V at 4G{f@=-|Fnht^H7`(xcSr0<NqNa~xh&^fjuI#x4dc#ZYFAWT*UoJxM>LV9Dl
z-1WX?8}lc02SZj9)&!8Jx(}%Tpq`cPTFQmv53up51H<-ttU~sMH(7(i*4ZcV%@U<j
zeWY(ieZy_{f0fU;huWQ)hjF4~X?_yk<G}sspKoBEQ2zq`X(Zo(_b7O!ehOYO&U@(N
zL$(~EAHt?{WVVcIp-C>;!)UvB*meVk=8DGE(0Rhpcbt$VL+jtyh`r@}q<TB216PwV
zhB3Mt=a<P!*%8di3UA#3;k2-~1-VQnWbM1KzxS0~gI*i`DAvb(6OqaAKjC_uo6qzO
z9j97#`S`Brs_}WNc3ff8V24k$jZRr at i~a3|;1k*e%nx7a+T88vYrB{}I+yw$^QZ5q
z2IO2C>R&DVL!6Ec`{Iy}4SW1Q`&}mb-CnNWwfhkL`Wkd}+UP<bb;UL~h-~Ch*U<MG
z<tvBh-C$xDmK{d_<G#H&mB^Jh9b`TsawR;Caj`k-b%OQK-;)T2pKlVSQ2mgxcZ}n(
zZbQHGQ&7*LJ?9wZRD(|f^%?dbhtF>!ojfGJyfT5oPKF<09=QkpW^PS(*4MxMl-&PM
ziY4O<xzx1aE&TAm`aCxW!FP%r?a#rE5DtCePqOxzvxw8#|I*EaG|z$C7<xPDd-}l2
zNPQfcKd>JGo9ZmcwZ-Ae!U8rIKClFm3j<@|ve-%TJqqgeS?CvL*qripfzVM{ev5gD
zj>w*0jhRF at CdY^kn#`rSMlS`{*qBQliwQ=8Ul1(=Cr<vDmu%bk=HmPv?^HZRl|`;Z
zeIahjp+VnC&buhM<b4ku4h}&s at XQmo2eC_41EjA=(}gE2(YdG4S0ZOG-SIh_x&ygW
z*C;11R9^F&N^}G2;t<Xv*WjhZ`u{=OW>##Q2|uTcKF-gEY}>kFmasb at jUPT)LcxBa
znvM0`V@@U2A0#_9g8h&I9za$~FwXD^H0CBj{x2MB5HFAXli&lg^QX?XL~eh$vXr^c
zjicl at 26OhPx+I-yg(Z at Cm^??5Fp>?5$FsVrRy+gx1zBrQzk9d9wvYyFI_GDFtwFh?
ziB8o7d$*8p7?YDL8Odtpb>VEnn6l#hJlmRwb6wdRNqvqfsQWf-pTYH?UZTTQ6f<vD
zJj#4kS;pKa-$S_kfDyZgdFu<vuAL|s!JhcAPcwJT&*qJGzW_M^nL+d%uY_D9Y#M!>
zZ{9Cg?<L7~JM~Pz at H^-?kPF=R#zLl`4p8p}?DFj%Ry;bAoLjxymjA|Eh`UMlnI)2L
z-^ohI{~ecM!**+?!iGfJzMj_rd*%`EhK*gsMirHYeD|=a0LQ;VBptRF)wVrCC)fdK
z%IyZurC-R)&C*5LLomnr at -Mal3#U;{n0#skAH1q`j%>efBJgoa at n8YVxHgPaIY};5
z(YNXm!@9}m7R|qq7lrEg=jI;xXXHc|jk}F`FikjHc^BjMF60fyzO9<XA!pVP`*ytO
zaiIZBKD(6XvB(Qp|0ZC9n_y>Y0(O~N)&s16<8+mGYLEw5k_7lLl}tCgjJ_8-R+d2{
zP7pj-8L+?H at Rwt4O(VwuVnlmV!S8NfwUM3}>l8#Hw`e^VU(`Z!ZxTDsd9+{DVuF2I
zdJF!TeVQF}>~uF}su;^$k4Ry5(;Fwh0Q|^7nodNVA7#(6gWEHnQp6ZllVOA7Faac{
zX#0oYhFsI)xtAK5i at 5RghvnO<;w}sw>y<~+!^d8UYZyA#(-)~9I=1zdxR#+~-9JSd
zhmW<z*@y3aKhosiH1)30U_%aQ;tSLx=FR^>L62tZGg-W5_ at f?#kIPdA9*Rd7t~owg
zO6<fb4$;EYuCgo~OIF>3Z%B>&WS%9l;JqB)Ux>J`-SOWX-yLsmB;2+73XMb<xExqr
z3-+<Lm#1D2pwqj`q6<9_r>Hu}^B<PhVEvHFijWVkT>f+t+6LQaQjt@~(SUd`o64V&
z289`u0#X0}i7Epg>SIz~L67>)Y4PglX;Mw-G$pQOt9{?PNieVK6 at rem!7>Ho`TN|i
zYTwUhk#ib}U|O03=lg|B+91k0K{#FP#CmNpv8R1{VECGjw0nQwpM1+vFV$=#JPZ1p
zvEb6UDgc(&BXrgv)<{$Oa6DIja3vOc9tR)MCh#Zkjz9Voc^COUVPLAG40xM|VcTez
zD}Zyo`~~^83zq-;Gu}!h&-l90KM*`i at L33-$j!p~UdyJh8JLXktvJox7rmm6#`X#+
zXT at pTdAzgH9HDD6Kl{;ucY^7fUtG2Co6qtliPR|nE_>mfWL~Lv0x2uCTeQGlcrBI0
z$jthA=oqh5RDtU(@ZTopc9U`&Cyw=np0l{z+_y!v)n3>kBiH}uVbLa(T?!70h>x9U
z=i|`R?v)ryTZirH4&ac=z`3(c>LTr}*;*l at ehJX0v!s5oe_ynU)LYdSdI9H4c!$kW
zfs1b^S4YMm-X76nd*M|XDJQR3l!kYWN13qJ7p<@tUP-3vjg#<Q4~=OSEx@^O{2FjR
znO8DgR<r1kz2M6CIL?k~F-Lq#%J}|p884xX#7;HfpO3Nc!u;jNntuNBtN!w_S&J82
zf0BB3oTYcn?yOsDdkTFzzAQS|Lp`t at _Cy`<b+;Ui<6+mXCi&m^xigbVoUHjAXFCOk
z1bwpG%dXxp2-<F^=cnC&I%#=tOv0QJtP^e!-w~CR(JhjVnIw|%1L0SnWHe%Ja|z?(
z58LQvVvD!_W^Kz)!1xK0czZ at BaJKlY;r7o!{N@%m3G=%HHZ$+stjN?F54h at JYZCYI
zfFteQt?D1fV}X}hKbwab+#WJ#yEI!-_63kBvmuA}Al4`YF~Pqg4!6ZyPG>(ozpf)N
zZFvu!&vOeF!_G5b?7(<%VXgG7QKq_Kl&X4g{~iCPx{i@)%kLQ#>YG>>U4fn22|u{2
z48CE(V!|Uuui)w at 9DdmZy!Tvg*6Nour86<6HeW-zXL)xA$+Uj}zjOZZfiZLc!teaH
zq2Rvfb?&`4$a}pLxc9<0tG*KT6%TTPdw$mL_^&b%Q-io0 at +{=9NwN>R7IOFX{-5`O
zN08$!MY({pM|&M7V;a|Dy*>6S<_tI5z81MvfF)t)SM6aJE*}U_p3 at v7XATkG9X2Kn
zaUS<qkalfQ!9E7=9(*hMetra5za?=phSx3p1sHKR at fkukNHrM(0p9fy-et_q5(Zj(
zG@*pguDaXH2k(9BuR6fGHVS^`H7#DI&FYhu&#j*C<yLULEb;UsCqh5C-i!(AD}R4e
zy!s~mg3lsP(zbBSu?HiWF#>_Tz)jY2lT3F-uh<JNgU4tvg{zlA$4XweV7}@s at u`k2
z6Z_-dkI6lBF?f<7o5p at JeBFY-+q)0%a*}!%5q at Vg-Gp{`8>JY#3)DAZ8}uC;h-WV5
z&RsE!wskz8in2f!aNp~#SNL}76}yw3%tRYK<?kl#&ual6th+oR_uqK`QLK~pV7<)-
zn})tSYo|s_a!Pl+xV7K2kdznCQ<CTL99$cP50_EN)dNe)hCbNhZ_m>C+c5?$Q$7E!
z<7(f%;OQDW{~z@`dgwjb>VMYnL;u(MZF|H&Zuao^P~YkmT-~|EO}?`T$6eSS=vauo
zK);VizfVJ1QBMMa3U!9}YIrRA#&ADX-G_fT1?_i}J7)q<AleeSGz+ at Y=64CF$42>P
za&`3-WKtLK6tIuk2k%I-{zT58(r{X12{$3eQO?{#4n}vVANpt#zXf{S-Qhlgbs4D(
zdW}et)$I;q?xh>yzgx&SA%D--Y0sBgCLIR87=GO>p2xdI{U>ZkFU=1koT^v1x+AG8
z-uAd3iJXAk{{myUS0pC-ySS-s0$9Z+-5q>x at dog#W1SYm+XTLjKCF at YpchPFO;i=_
zK(6U$#rJr?ayZH%gU2ARL!}RiC7c5Jl3<jO<0KCQ{>$|V_{Pj34t?FSzx%+Fp|*Mb
zlc7FPwGQJyog2qj|L*fL6 at 2ojYYEROSgd;BufE8&JxlP~h+!5{_uSX09$@z5b!Tl)
zp^S at X65m;|?I}7IcD>gr2R(uMtlYeh0mjsU|0Lcx2miNg3CB;4c53=p!J~)gg$ChS
zn>B67{~5&Tm2RHLFIqg{j%BW7+9N;DNr)8Tn at oaDM3xX40(oH8EeTH{as>PhqkX#L
z2(GV5{V355zybHM)Mabhm7>`?hv+82FMwCD!-4U%u8+tR^&29EW<EE+JaV&u{d_s}
z0^QRhX-hsE4LP#+X8yqUtt5ZLN#PhyehrNi*^rzWTSsJWW*pwtZI*x3VU~Yz)13Ut
z1#i3Q4(WUT at CS_v$1hCPk7GUL*cimZkD>6JNo?sD+o>i8u(MgPB|@h$kTDj8ZzQr7
zx|@0~`3}q(FM@}qw8DVCM&^@N+rjk`Yv-Os>z8}dZm}g6Yp3+2`b{CYb&bYq>fm9n
zevU}bYUWQ9YbH;NvwzbL{LJ|laWCSqF9xa8yRiKQd0mM=b2`sd?fF5dp at AK^PjDFi
zO-5I_yz|!3_To|K=zmDh+V8OO$c+$G?VERu%(JiqomD%hry<4?_SZuJ>J`E|C1MxI
z{oJ|$=W9K*JgqZ8n$DU>GJV1;X_&)Mp5-+jr#$UX|0a}ajrjKeQ6`dKYdR0{F+WK4
zCLa9A1#b;)4<QF5{(DV$lziW at D19i(EZ^F1mcNU<65FmWm8&0{9<92uRIYh#I^s6I
zl&S7>`!e8ww#5RYO*lg#S7qdWa__c*AZhyLpk(b8=-jV~l+an<R+9d_Ix-d5tX^P~
zRuk^rKCtIP7nIo=N&oYggEwU!)q+07!fxBls_iX~)MYMkd-NgqT2r~aLyWq^wsjWf
zW7ZO`_Ye*i+7RQyGcpk~d)92o>wj7aj>|OUeSrVqqgs3$wg>yU_sIU|9lQQt?`Xt3
zXuJd4RxS4qi at v$-sh!Uumh9R2z{O`DUpsTMq$)o=S~UR70rAWI7<H86)%FoK0(%Aw
zod7x}coP&vM;3mcW+&|=csuQ;pdt-ClbYA2EmJp4U#2NVpIk=T>KwS`_zN}92-`K&
z-EyiOzT-Y&ps^9p21iNNMO@>{N1H(o#LYzAl+Z*s`}$k14 at ZS5fJ68i>xBoWEnd?#
z8Dno6Fl0hkTAd)X>X1bcRt-Cc+^uA;B7Wj5EkoUq`A at Eb9zl7CzRC1qyva-c1E0{z
zVPB93zMw&;dgxyNCdkou#4dq%QUlhjpO+Xailhf+$D|tgQan81jCuBQv*YGJuDd>b
z-O+zshnyS~zL^E*1HNHA+Iu3u1+r6KG>?L91$kDAV=oN<cjA9gcy!Sl`kC`?K|e$e
zSj2H246+>koHsFedF>X5Ty?o<Ce=Zccvuf?5=pRWA+J}JfZBz1biF9Kb_?pVK_sc&
zf}9ovk1Pj<+t)H2GXq{0UrSKf0JV4cKB298Wxebed=QakYH(0}3_a at X(i?3Pc0MOm
zuW`1$h+KS<(I1RgreAM+U}w~{72r$wAZ-wJ+`*<^^h}eJ+#KkyM}xEH>?c at r%SC<Y
z-fngta&Ej%VmSH8 at kULe_oz$4R{#U_8RqmWfiX3w-|k18-E;VE@%lYwTRKyKC%9pK
z at 7S}L=YR_Y$MFETX`Wl3Pp&WX+)`jYniLj;w#WPmIqcDt7M-QKg=+MXiqY^}!Ct}n
zuLuT&t0(l+fbH-Z`Im at xcrc#_X%7y6^N69?7V^ymBQE@&nq3ji>_bf7)e_=|jb at 6D
zem=K5Sf-he{T~F60FU-IzBgC>ApYA$f?6lmIvs2fxcHOduZ?DEh`-hnq&hFG!|@m3
ztBtnR3Y`k%cJ+T0c?p7`ZxY>dl1{Ix6FO5V;`cO`s!o at iL(dwIiQUHHYR|Pq(m$)f
zIoq<CPFC-)@J2rG5UN916-%})BE_N^<UY|-@~qk|>_pWyfp^vZ^Y0A*Z&LM at fg6B&
zQ4G0ID<jvIi1IuJ_%v^B;}?|63&unCE3jTzU2%=MhO!n|qKD+}w6x{@72pCFOo(O4
zeTPH*JtE~P4ND_uPck^Q<$D(cBX<Sd`W at j5q1VV@Gg)cNw<IGjU=HJfPp*qaPCAjY
zwhW$1$?!Np&SHXR90R)<iK7+|2%V6rGBP)8L+q?24Ej?SSu^SXAaWjDE{kCoXyX;Q
zjfgMTFy9&j5!=kikK);hJp$vc57)Iocm9Gdfz45(t^p6W?;EwyHy-2s)c+Em$MF=+
zwkQQKfFwreoa(l4cI{QPnI}Bn&io-oY{v>!U&$E8lZ`kGqhU=Ko}Do{UgaZv0(Aoa
zxe&TSxw-pwp`NNQmp|w&Py%DG!W^4sVO4JfmxmZ&*b0!hn7$aEu2D`~1Q`^snOre~
zF$*MV{i00ByDW9Xv_+(^C_6=oM%1C;LilUy{jh7W#~XMT{MPHSrVtMpb;O75^cN5x
z?K#ZVvY%zbK+N|=`YgXp?*CJebB|3!IVVeNJ*VVp4pAoLUZy5~noiYB=Cl_#iSG%#
z)6niePpIRCDU7;m-)-IMH-v8T4&x=iX+$T`-^3VFgU<!|-17!GeRec?er*@wHaP#W
zKNAP;EH*Z>yWD*1&{72{d)j?rU0OBqhd(Zk>>iTMrJ16Q;F-x4JAjQwU<K^I0kO?-
zO5-KS_S3^{|HEQAVuKbu<>BIzRz!C5)?uvbB3#4gzh^a6)iQ;wOe9f4SJ8JPKH1%X
z+*aZ6Np71a#(K^5wopxQKdz62YGbQlB4nq5*dQ?ey9rnOzu$x1B|-QE+8=yCg0Y&d
zJYaLEFJM!5<5vr8g~&Eomo#!d@>KS$zoG)hZR9d;{|>o7=nEkYJ?~W_KS|E at Nb%76
zklIDch?o`*e<^$d>&KThyL8;U!RutEw>}eNJ@=X&xdo5acDT7X#fm2F4*2uW!JofU
z{k3Ri+<oCgVc8|}twD#4TZ58*4Y^0kX*yZkfi?P8WBx)nFQ1f;>4oe74>Dwn$kqzX
z*Kfd_`~r+dLnz_|8|1LzCc&;EtL-R)eI;Cqeo>-AePwQol9>MVTcnRX7`@5EZ?$)`
zDJTn(A5x8yd^fNQzSLNi>u_YAry!E)ISd;p;`z|8b%)F4pG5jMk>}%jS=}K^3eml|
z`L18!t=T$V3R_$mi7zKHC6MD0*2U7k;TW^@)(#f at mzUSqT?tRAx*m?aDu|6uZu`++
zTrU6UF2N=7H;J7kGa1N`+I-liF3}HCpCKoU=h`=D7Z-2{$4O2<YogSRGDj1<Vnu;v
z<pifC=o74Upi||;o?EOh^|ntRq)RCHG<1<st8sq?^3+vr>;^};=UxWtLB2Vj&Yy16
zuAgRuO)afrCUWK&2(DrE&#22QQL&gO`=HMPk*WWa;7Tx`4646YA|K$?jfhbMHtObU
zI5t547&^AvW1lkJRxaN)lGt1Pvot?rt(9S%IM*eJ&oTIMc>ru at kT0V&I0>=E*%{z7
zhQ5%is)yd#U{3y~L6ij<5W(CA#%EA?1^ApK^<((oFIuX34clI!1M($S)q`9h4&y{i
zuf87dtWphBgfPHFefR*dwupbztS5fU`l+acZf;!erSqS1mB1#rNUC(AzjUzCvs`8J
zywTJGN<r|2aV?P^tGum`+i%juQxlfE;#yQ)ixOzdOhu##^TKFqo%oNXEs<<oJ?i2(
z>cRq>+EU<a%)0eUm7JXFSSpERr*k=oGqteY;<;pQ0X7Qd;s5*p;q1-hnz-8baS#<S
zk`VzRNv%)&q_wuZ#VC@}%?*gSC4 at jEvbZEf+Nv3nfT&3AW?Ku<3eu;WrAlp0ElrW7
zi(9c+i!`EySW(f6QrlWHSwUI8*BP+S^S<xr`}r+@<TFWT=FH5QbMA95*L~fXfA{)C
zQDWeyqUIvx6n7)3kMRGhUvB?j`sMDuenCI<pdVgCKlHPG6fx3ADgW-5wwuHKB4}dg
zl4W|nntxb9A;tsDj)HR3CDf3-=}sZA<R{*Qj;SBfF%8f$H@{^UM5wip?eIktU9?~^
z(KD$>q}_rD)gZr at m3c0He$Ei~zX92N2**NSB|bOfS6F+zkdyEE+h#b4t}u=CeOnxP
z7rm4UxvUDYVS!?}|BZ&Y!bQ+I9SZuYNEv4krii^b#<QRue!k^cH?n3JlI3DObc9gg
zhb9jDYIOVYKGY#Ltg-Wk=bONuJy17?_?pRlO-JsEX+Po_K1P7Lzwl#?;B~#MO%O|T
z`z-~3+XGpY8+9gqyP6>X701(vzm4R3 at Sh{=<$tb`s8<7flKUp{uMt~_l?ABhh;i~7
zSquA+_r~hL-w?T;oMyZT-OE?<47=tEVJqD~4eRizfEhl1zLLRy<VWeA7S5UB;U8As
zXjFXj7xe5t#A#0ouD13JOofkj9yoPVj5c5at?1W!!FtH`7F_o>aykrTyZseLB6T6B
zq-mNAKId4|PmOzdFAApM+~vGpf+eQT at V>F^3;YQ=Y0pKan0}*E13LKS<lZF=e8&$R
z)tV}Vb2ydoc{q%l3%eW5xvNAUnQG}3>Zkc*M)bikklT!^i5xTR7eQXDos&+uKzU`7
z$-;0=1?KnNssx80>asg9)|pDgjm();6EJsYqQ{Wy$`3%VQh>whaQtS?8~i=s$X{Wt
z1y<l0#Ih74eOFC#CV*l47#tzp$PWh>$e7vedh|Yc2h6UG#1BK~A&%)!d@$6<#K%i~
zFmxXA!Qi(7aw)C2AU*?F4iyEAw7Tz!1h$?x>I}=<h1u{&WZ8O954)!?#s3oWBd#G&
z5A~79t3;W@$ARmP)Qu>>JsqqwG_=;K58ANS6 at -Mthk~42!b1{LPQ_V&;%Y~Z`Qg-x
zFrOuICuDP;kXOw+c}f;GBvv+i10#WZE{FXm(c6vXmN#@Kcw<jRM!?s|w*7r^g&eic
zw)x?{m5`gL_k+CX6PlUBW0qVGzSF1lsLRCFg1^K@*EPINE6}dd`n^LYKS;2sr?kAs
zPlZnPk!!Q}b|`Op)C-}<j5~Gu;`cfgjQOc&1?Qybzt4W_nsJ&UF`a$LlS3U%C*ry-
zx!u4#Ojo}~ee{UcqM5o?@Vd3GQ)W$~6Y>7JXnz$r`zMi_$j1}8udRQY_g<HqNnYO{
zB at 38l=`r0%nyLD;T4@?Ds(k80a3`Hxoz8O~P1P+-)UWmOZaqH`mF<5D_<4^ur!CN-
z$aM*R!upjRKZth+3^rLiIg!<|FZ*=iR<%){e6#D<9kc0OmiX$6YwzQs)&Ou8K4w+3
zZ_ggY!Xnt(h;_V7a2FXGu6h*UTngvRB=uZ`hY?FnlY$fE`Yfz%LmVC12j5b<Y7jPV
zy>(${$*F{~KE%=*s!5%<<;}kLzani~eyP65ws&K=J)DzfEVNA8e;56GgGoRiY^HWv
zCQKoI#>kKYN<0^}tpaTFBmDEBuSH^g=PibhZ=Kz5bMJ5-)c|tk+VJU__b*@KB8{{$
zZOi+ at 6jp|K{RV(@J5O{P_$bph*ZV8wwfytV-T;$6jeN(N)<GX4xiacah$-Dk5q9<r
zD3-cD6Qg#a@@6?B<JIO~XMgtyW%!*CmBgRG{<gEf4N*zpun<p|*~?)MyDFjI<X-3f
zB7**s9S+<!{B16U%JG?aJA86C%Y6!*e;#Ww^5YuQin+p6e|}_rE_}VX7Z34Ss5jyN
zP4L|wg0E&9;_?pz^D&j=59wY-9_LyLb$rU)@cRdGrJe2ph2 at Rvi=CwQ+0Ec&(!bVj
zqhZ<+((i(Ek`B!6pMjydnfrY*_*ftM%L3a?xmE?dhxyU?&zpV9O35gps at b<=A?z!{
zK_07e0^?MFN-~apcjTN?N-p?EYHnNQ58Wnu%t)IzFwXmoa!yyH;`8H#O9$H at jNk;o
z_7`C`hv}O4&~1Fj{%e9p#h>39<%NCpA^1IW;AcoH90GrK<?k|%Bbac9z>jryvGoum
zv!4i5aGb~&scV<r8xQh^*1VwTx~V1~_swy3%ds#fxDVLh5W?+(tv|3-Td^Hem<f#5
z*M#@PJDR-9n?5ESc8qYgGkP-Q`EfksdQ0E3x1`5ld%UY%B|Xu#>Y=~7Mm==0mG{uA
z!AtDTDGGwcN&byrU>ou!;~go!C^8zUdgvU!GglBl7+-aK`I6cL%O7s}67j>~Ia>_=
zUCnGCcN1c24VZ6r<Qm`@ivVs$N`99(qbC$HT{A+4%&}!o&LPBB?nC at S@y58L&AO1*
zjDI$WKCZo!^}H0^M={&L#oqvb(Khr+5OssxJL3FXtF|sz<CySM4cvX!I#+tF`?E*w
z&Hf6VqifW&*P^*ZZ*912(S+$OlityTPXaj5XRiT^^Uv1ghql9a?TI#$|G5A3Pm$MJ
zRnPv_n*7fn1zOndYV?heT*I21cBa`oYO3|+7i3&}*TmCXEZ(l6#`L$cuoj`#N5kb3
zBlvKtzS3LvK7vn(tCbhCEt=a|H)!TK>6z9qSHj1Q*ySQJMuVSa*W&==BK1Q?1 at O7*
zvJfku8&fyhw98^dO}t}E`Yi_PE`?(3rwU3vGi6p=Q9xh>;ba{k{t+S%buA~C50aRw
zMi)OJ`E;eStVi_1O}FC<$xqeFvJlZay!%~J7i6M1eg$eQgiFDr6+>`izqBfCn;_ at Y
zd7JTnyVQyQ-^Bkm91GqijE at -1Ps|}Eo!$2$_FcoiA$H$?VPD3%(R42I-U&|zeDCPH
zhk;ERhj!kA&FX|511tw*!aB`)jJx;h6kC0bX<xq+4}U!JPmR%2q at 22h?ZDDYZ-A%G
z-j!d|v8e!SW#Ll|X2W)SumthhS1}f-mYzP~=SA}|zZX at twHe3Q;J at xkG+^z_(1`u*
zEf_B)`g}8+Yw<8=abb9+<Yn;_^E<nl@}<|R#V-R}QPa^i3iZ!YBeD^HbtWpHk15j`
z&K%_E)^Xgy*TDCKx*_LYlw9wU at BbL`*c)J%-mO!ZTG{p=DbaKAp76Uqct$}dM}~JM
zE8I=y`0NZ^KeohxeSyH`I7vU?dyCMBHuF*AgvNavhmRqCckI*ppV1r^!au-VLA#6D
zSl>g9=7Xz5%ZzMHm$bnlxft`*51~&P$cCM`*7Zu|%f9&KM6OBi3bvDW$AFKx)DfIy
zbn#y^dV&LS%`CjLol?|rB>zEvOvZnz<U6=-C3zOd)1<H1eM7)8J<Q6h%(6kwV)hx7
zc!t5?O;v5btXXo6y<Vc`5z>E~Fzy`7G;7%YIDtH{Y$9`weZd=0JLiz(HpWJzXf8Y6
z23iZP5s=Lye|xchW at h1TA#!&F_YXghF$eGToNW*COvo4;ax6qYbdzhBRr;S9A7orc
z+SMEeMzWw%Y5FQY1J9Ep-G}>^kZU{DxON6GO!4a9fGs7p>+HC{cJ}_jou%7 at F<xj5
z!}XtGudgcX5E72Z``G8(<9`O<Cyw09a#ekuVjISw^&HwchjDAic~6U$*S1@}L|Y%0
z7y`~L>8?vK?V^@heSP!C2mMD|Cbq3L!)<XCsy{LAe5eibI~j9g at L09!@O<-dJ@*nP
zat;lg#VRL%H}GI~BRGu_TYt^yC0p{og-JMW9or9f(huwyTS(d_{XwveApu0k*KK2E
z9_9w_?-lq2mSg)Wa+d8;@EaK}7+a)+{>n`*!PhEMUvDtJTJ`IQj at LxbkT>`vuV-Z)
zd}Du>AU}ReWS3mHDIPvgt6aE<$iA*oT#O0s)CcBc{kYid_h$Tm<LP0ns?#NYGR+BL
zDsm{(G at p{Z9 at N>zJ>cG6!FHR3$dZ3SM!$<OdyUL({;oib(=ym$rYiUuhWlS)VfJO?
z`N%f2+57nJW^c?tEPd5c&3>j0(jn;UWn|0}T{)z3MBc4yIe8@!Tt}7gKgzie;`zqG
z9%%rto_M^PYa4maGZyV67kx?I5c!VQ2`pdCsS_0gsOi at S`)vsK;WEd*(PB(P&0Iw#
zYUZjO&*pI8)3W+*E>piw-UnG<z%OrdrGoowmEGr2s79Hi--7*f<G}?ADf3wZ$G4yz
zTm-V4;7Exp961LuiW|=k?+^TYf6>497ZBTg+<1Jv at MjyojL(lnfBiO+zXsl+{4-MI
z-dnIG{C8sAl1#C~SRU?D>n7(P{KS+VRWO~Yi#6>^R_FpOQ>XZG&y48Zy4n+8-msQm
zeL0FEJZr;i1GQs`T;7n|{rB&ksEgN7hx*o7tImO=>#5dA>jd-};v>!8DSue{@?Svi
z)dCH;<SVPe>Drs}q&yGr5_m682Y){NGx4+qvEfU=+Uy1gtM~pYZY6w^ey>fU#L&@D
z- at f#9I=!@q`Q3hEg at U)U`UDj;TS?J)=ZHgDQ!~M##NOLlYuztc3xWUtPCWUzngL&M
z^pw&{=5$NXKs#y^tpcwYYHo$;s;a8_ng>VT>(9Ko_7kZJ!c$PiRP&`y>-U{s^LG#P
z23GTlerEOM%?t1fH`-6k8#zvQp5-yyB$R;f?0l7_nm^KKYwagyvHA?Vc5Nc-ST!H-
zG{JsCsF>@f&%$30egEFIp at T!`hP_p1^3matU9LO_54mr?74UKICN?lNsd4Z8UF)ys
z9YrmjUSMrbf3|n5^^`u)XQ>{>nG9rB44vGv?H23}CCOKEzAe2jm<HdS8$SBgb4N8Q
z-paHnO$>O3-oW=cBu@;yLnF1rNX&*{FAxXl&uJOqoO1#{u~eu;9O^GhjPV^7c1U}b
z#15c)RtnZrXNawgxFhUjO3`Ru_oZl2VMm=>7et?fKX*wB at oyZD&m{hF at R;wTkBgS8
z28o`E8o>T&drDju`d3b3p*k9Tk&}cu$ph$<PwNcdoyj+2-0?}=0J(=AVk-dm0PH^T
z3()1f)}tw=Uj;72WD_aJTsHsfxp%?U at O#P-{CplwI`k$fu#TZ29!&+#YXgVq)xX}?
zoC!<M?Jg=<@8u;B|1k0Kt3QU#p8kkzi`Trk208~~G75b<>%Xnmr{j4I#SyjVQ|wEJ
ztQ$jmz|rd|Ha6UF5sqQlbh<FEqYn8`#!3?Nifjc>SA#a%0^f;E!j*RcciLIVm<6XN
zK4V4Q-GE6J#^kabpZTXHcIKa$_xGb;2StmJ<GS#a&q3l8Kf*8iK(lWkpZF}Ly-yH*
zX%IU0R6P5iz+L{u5yQ^x!}|K(6WQSZgMSV(<$0Fp-~r at w5L@a;iPIeW)^C&2bN}cX
z)ww?=1 at HA@)5pv__)EXQ_a8OO$UD}euFNCp#!6~6Jw2L3^w{sZP*birI^43edNlm9
z7YP>dt at D_tDp5gKJCkj>sgG{x*_3YUxhu2XUb)12^=3HyFd3SY%xJ1<S^{)M*fhJo
zl=S1AtRSt_0e|okHh<zf&Mb?(vcaP;-QkD8w$5(Y>PpXt4_mkY*(8FsLfy<=g^b{=
z#BJ_A>@@DiI{ag^?`^qsJl5-tt&hbhkpmZscwHpn{U-93t|%^`8 at RR5ADu*3F)D`F
zG<_C3J{$xOL+W!z#76nY6{27Ir8g0yx(-Zr56geJ%r?|Jukb-h7U^rmg&=z+S*n5H
zcj5;zCUW3EWM!s)H~bqF&Az*R at PR2lAXtjHkV#y-pN*Pjgb$Q1p6v$yf2Yw__#yC4
z?vUM`uQ1R1qrP?C#Hjqj4 at 5foH~imt;N>W at qc-<V!C8NX)Hf8gqV7~eiGl4O at S3I^
z-{6K{uP!<QTq(zq2e0RNkjvXlPr$Wjsjg~sk2{$;c!!HQc8i;0;7^C0^v+9>mJ$Om
zRl*1$OX>TYeK(#ceBa-0Ti=#y8*0nJ*veAft(!}*q*B*m<WL6Bl(@j%vd7<E;znIH
zCyU|TjoPl0xDD(xwa<3bTabS+W0L{z=kWi2Cdij8X*+5kfERl5C)&;>zyJSvrry1%
z4Njg3KH9r?h<!=0CU~yNc!un}iL?RFC6_o+XY~l46Y(heD0vQldy^8JB~FXXR at sfb
z`0<Q{<vSVwO^Lx at Y4f$EaO{}-vqE<B&X**ju4#%qkIb{^pF->53xggV0vwV&kCPzJ
zbE!?YXC|%P9i@!;LMZF%FxE$Wa<Dq&RiKD&9o!f4DsO&_p#=Ptd97_ at J@s0*c8tnd
zWi;F at D&QR<$MI6n1?nHpb*0z?YBTH~pvC}+cY~`co!de0))b5A(i7mA&@i&V9m4c6
zJFWrC4$hX_{B^)51Y?a}F~SG9g5v`(8f^WL3UG%t@%Lao<Fwen-(YQC&2lhu;<Rdc
zJwFz947fq)$%V(jPn~3b`Za(4p!67v)0hXWhJ44<MQQ8Byk)$T at C#O=ev=bC6-R;%
zz-e4pMKz{<ei$4M-m@<RGNJ{9w;Z}Y;VviVNO&jtm!x;n!okIoqe1Qudp<+X$2fS8
zTu*oy`b9bX9V>AknV2`{Y4D}p;~mpCh*IHGR!cj8EvgYFFa5pl1lEIc&LsFozXLA<
z{9MQ}RXue{J8J1b at I2{|E5)=vEX%5Gm0HV}NCPJ2er_}M9-ZqpR*-muydFMC)D-|<
zFY1}bgX=uE+qS3ob3Jl3aUbAW0Ppx&q6dN#1?Qr_m9|P>?i|<pRapDVO)h#Ra(@w@
z at oWaCKnl1GbSgJ=G{mBDY!>#fz%z7dW|}iUyds?ccOUoQoZFr(_~ib*-!a_Zy90%+
zZ<P2vfd?zs6vt<nMk7}}(2<I~ro~;px0>@D)u~j_a4rIB+k%tXCB%D=rEW9rrejPu
zbxZ*MbQ-mDW=Bfhh<DsRYB${lSHVEoSGn%zeph)m?TSi at +>zT)@}RiyN{0yl1M2wL
z1uwv#2%jSG5e;+&FugHYGcMP at -?>FK*cw=U=@B{Bs>|Sd%Bj8-(hkgKEd2PJ!5@=`
z_nfbuUX-R$p})XOThm;W)+u4kRS&ckh*957vqvPyS|X{wguZ at ApvU`y|6R9&%q=`)
zrs{Wg`vu{RHig3<b+sXV&wlV6%`aZA>`goz^}w^s?v2^fCfzfohcFi!aO{(ixkJ%W
z>KWCFQeS+XifvEyhRTnvTT&|a#lO79f!vpWK(A@}Y%kW>)EM7A{A{19_EzhfTAx7A
zX%I@}Ul{Y%9KlS at WaO{7!KDNKNaR8Oh1l~-tdYNJ&Tt~)yr;k;g6l40 at 7EaTo}N)v
zrC;Clu_YVZb>KacW4pGgie64#AaP2{IURmI-3-(gW|Hj^l0WzgeMszfoiN=N%1YJ9
zFNq{=AqTP*xcs--c2jI?UnE%FagbM=(Z+3De>}wqE_cl=s{xO>%+L{;s&yMGROg3}
z?{baDxQP0^*?VT1WK?6?7j*n5oeX2n^B5|%zaRW4<h3Xnj_Fi6_R2zDgI)M~tzx^^
za>&%ZM7hYxOfoeQ9OsCBbb)@xT6YS1F59-e#pe=&%U-T>A3Vkhug*t4wu-uZ&}j0|
zPor)RB^@BY>4}h)Jz`*&jYq&unxbECnX6xCc|gDRxPp;kz5hk*22Vr~^*!{xQ6bit
z^aTTuo98g6higp-lUmcrFUJ^MtpIKh_C)nqwC at Gx>MU%H>`)70BhC^fWG>0C0oPhQ
zxXf4%vY>k$l;Hc$sagr0b}%}E;E1Tm!+uhS5S+|K4Uz!iax$M5+~p_1zLlx}OQ=L{
z)nf2lE!JcLS9xaGrVTL*e#ZPKc__apIgpolT)_IzbFL8m4Z6n$#Ak-gitXU>*#?|L
zX&*3zc0RAGXUnGnE=q+t<3s)lFlA(pVD0kaUHv&c{y3ZNVc4(gD$ey~Zu1eWIe$N%
zu?g#G7KyciKOwUQxv;}IM67=wF%$TWH`FDRvfLTRiU}6WR!L6=FN96o4X%jJ$Pcve
zLzXt7Zf+ZNkXGSJTP5(Ll@@U8UDXn9P~tBzT|Bsdo0pemt6+4*4`J#uKLfr^H^Dc;
ze{EF1g#T`mxUyvl(e<e|PPpo>U at dAgB$PovLjL+B$WHSAed=i;?mw6|8t;gQS`YG?
z8K`jqnbp$cV&m;cE&&_1Avz2?VW(}sW!1ScG^w>Zdi#Y)2I>8y%g&icm!1_)vhBaR
z%C^64g{`J9Pj!>ODChLSPdHv)rtK4Ek*%6B+G=Qx>aPaO?*}#_cV|P3uTP;oLt_2A
z`&7U;YBnGyPRA#5JmO^>H+<9{@my6m+5bs}>Q~&?SKy|ggb8@(kU@=#+kJ>(4Y{(C
zJ*ai=+ZL$;rUm&tX9-SHLqo=6-C%LLFTh6kfv at g@bydjWXg<+lkDNgqi{QjoiV`qJ
zQ{-Rczq5z~9*z!Ub>)?;u8e%9=%1ur<lK_ at sN3Lev03?@FI#e7wx^Gu_V|OOUZ5Q7
z+~&Y~)N;G+%p%{xqnQ#>tUaM}O+Ntc!_BQ7*VEP>vKVLnNyni+-)5}+hWwM$vp5|@
z at 8rHl^s_zj!W_f_i=e;XPcSaJ`NXGv^+U)?evAEBKD7gR(HB_z&rSRdAuZ6EkHlx=
zSrSUYt9s-d{me`sWYV?;^5fSTG4#~wrfqaY=uhCUbd`LYhn$mflVlk)daM6Q1tlli
zj`}if`#mp^xG>~XKvNy9oOk7LxXB$qX92-qziQmk98{A9%+wMbN8`O0!VY>HG5${A
zH}9(c%<WI^Zy0R~vc$dT5yP+W`Tmwlrd at q1Zn@Z1tuQfokKW`nalQpMaUtS0J;JOx
z4;m}PzGUzpCATB4l&PVOM*jiCHo=#%V|sLiSk3nNWW>qOs+{mMG=R at _>d3pf2>dqe
zJiYkn!@9-L^(7%`h&>S=<^-Y>W1MHGZKO6jaGZTL`%EW!GR>On_|D=Vk2m|Szsq7y
z3+|l<{`3KU0rH1mlp<Fh>pMB-gW+TFzU%RxOa9k;4i7{v>5=ywPTunvoAx5!Gkn%e
z`2Tp%;qtu5W!jzw19&x!FYi5-R^}CD>3!2>&ED`IfhSFSZVii94#!wnGcp!-;{6lu
z`4l{h;tlXx496+DCzAD$#BSb;5ZvP0+53*Ro@|%Nzb0|dV;gvnV|>)Z55H8Dtp?U~
z!-pcout at y2QSojL;w6N`0sImeZz7C0)cwO)A-M$6{DRQ0A`5e!h*^&%dM{#ElywR6
zX!V6<U2+aZ+5-lUwQ-D}5A$Dk%^SZ8u?8D&spPM&@5ir%z0xDNC2<>PsoL0k+aetg
zEbC=ld#O>Z`UCggf$#0c>8h*n?fo+zxDnvRecemhd+inh^UVJCBL1odRyr0oPb}8%
z4CHf0X!zuuXuh at 1d8Vo=|2TPGj?<zY<q}*+Oh-Xvyyai|HCX2(roLn}0y~{i_~*#D
zxq!UTJ7lhtxLITYV#v=D*@iLG3Hg44<AGhg!Kl=T_yw$wp=+d{pTzhW>GO9#8fohn
zv{i>(Qa3Y+yo=kd`~uXcP~7$k34h`wIebj06{I-BL7heyzgF6BT{vEn0{!jfui;yB
z5kJs)8QSe5eH3_Figgoxmsy7QLfU(`9Xu&`XBdYUVqRpFxEAaj^844?W}ioW?|%Mu
z2%H70u)iL5z!5Tr$TI*Jk7t5xVe7 at rM$D8G7q%<cbyzIDg`9Ng$LODx5-#*piSQ#9
zbMG_)>z0DrFT*vA$k=ZV5~Y(I7!vP<UdZA*z-N~p=WaZ3rVaM4vRXm)ite*ja>Kxb
zvjzS6Gvd8#?0y^F4Oa|l$YoQ=dm9vH-|e(pzFmr)-rH&KVS5Ym`hs0lO!BBM%*WV!
zJy}6?Zpfa;2_9bOOisi1hcP~Xg50jb_a{-O;z^RL&>Up=LF^T!${YDNCHQS&Casy_
zOHPMv6eRYdt!i^Z*P(;^s84t~w%cu_O`fgCvd-3XH3Q%8xAo8kww{%nZ9QAbzDcSd
zfUm4aehF;Faqwl5H3ajnf^dQY!&0F-nXHuFiWaCB#?L2y=`}4v33ML1Ie2WP)RwH2
zHwrUFZZR8w96L_51o|dwKsk<SjzN#;Cu2zn-&*y6)RnAMzb{mZ-NpjrQ9f$hCqr)<
zXVw=&FY>ZJvRLpFq(VRWsta4-aaK?U+SeTPFmmuoJ_B at kU@d?x$_GcvCW0&CT@%Ee
zT7NZt`^z+NWjj-CzOC?2^etBb6ZTgHa^E1EiHt7nrf15(MBjV{9ps8<I at KF|U(`HO
zQ|93Q(${$GvvZ9j<ND`(GqscT$4v|?!<wjwz8^71H|kX=y9VQz%{_+oKYip_E5Txd
zlm7zhmh33f3%(`Cuhs!eoxgn-i3RAVN6iyqU1Ha*b;IrQ7ZF at 7aIyPfr^oSri_cbp
zOOx|5?uSe6CrYjw)vEmY1b*Wkpw|6Xm52W#WU>b_;(f4zRs*Y|RPTo^wVPm1|Lv<2
zyMaCTL}dorLesR)#=T49<I}~)<aEguDdCa)P`xXx0J`NK<mulI^n?-&$u->L4yjwP
zLgh&wj&XgFoEGP%LeFVw*gtyl(vDW~&nLwT&yDsp<T6!a_s!hvz-6agD)-b!B^m2r
zS3{0&nk4q}RY^{8-h2sp8_15GxKpoz*U2WhEWHWeWkuWq_?DN7y{=f(?SuQbhoeSc
z`I`%)lIUWUbFX-N1lsLj+giZJVk;URCOAmg5xekQm!-c$udaw+iZ+(O&iEf~peE2r
z8_?NtKO4SaV>A`DQwy<v*Y<y@##k1|d0|I3A-}64S!qq%nQ1CyR%nWK2C>&7-tQ7z
zwyN!CtS-IG+Hgx|^=!>T++$c5`o^;Ian|1~I6uQDaO4oY8u%B*1<C2nL7`ttodgpc
zeqMDqSsCYPG_Rq^*lRRv-XIuj%2iU}4{m<k|KjL~rpmJW;HML?ddq&Dftoa3hG)vb
ze8_<wKg_o$##qf0Y?8Xn(KX<2ZuaTFm5ir9Q1z3X5$9*3{=+9t4B9gjj(@>4PCYn%
z-W`u?O}fpg!}lEo!y0-Tb{_mC`f_Y3G2!h#PGquiB4ov=83T{Y#RI at T4vGp@=h4=z
z_=C0 at _<_hg`I6WsPWS+P`*3~`{KuGc!K)-r;MjX%*M=n{R|2(gFNi)@O*2Ptn;<la
z?*iLJ at X-U&Jji>3B~QV*yQRO8=fZQs&O^?&jB`XdU)(Ra44j!fq&)s0aQU0bJ}Ebu
z=zJ?QXQq9t8V#OCmoXH0g!>4Nk{u7?<Q(<W0=2byF8B;|G7YVf at qE-S`X5W~&96<o
z$N8(ktqUImzZbeUAG*1b=;m+QBAu*meiOR+Az@@*PE<r*X4E|7V?C$pHjk#RAN+(W
zfNs8jXNGP6)*M?+Rj$f`9Gp&IxG$N<Pq~PDjTOmj?`(P_z}vcf%%kSfuR_<Kf;_e5
zO9gQ at AAGw*D;I-zFTvE*8ZTTZXlbpar^b+aNq5li9q_Fmc_dvEYFsq+7#S0s)kJ>v
ze>R+_h1_?vL3}Q4z$ph!C3Rn6Yw<%&RijM<r;`3PU`aAH6v;?EXz0w)rPwvzP1Zxs
zw}Mgd4KLQrFh-Kvve04Y19z8Mb4}266F8@(&JoPrT}}elx1Tg`V0~PJ=V7svBu^Xp
zxyVs&4vIV_g|4keEUCl`yki4&>R7VI!EZ5$Iwfb!2}5TEkH&a~$+n(0#QR+fft6c;
zbz~{lsW*}T;+Z%Tx!uPaVs$}Jq?o+S3i&5OB{e881Ujn3FLJ0=#MjK)kz&$M(^GNX
z7U<@Xzk>6`4j}kR(>D0YOb%llVz+z1C$2du_*429 at CCQ8%-2*h3Eb6BBxzz6wS)h#
zmh-hFT>b at YI5l+sZ^>MR&2ogq)rido-NFTV{5)*n3XJoC=<%#Av=scocT%h>kDv+l
zv9sA)VE2xNZKPR2@{)AFN&8_pEkzCr@)(JIb>T;HK5Msv=b+L2)Jc+Sa2U8A{ciX%
z*05uAmLNjnK^`>e|1;1lA2o(sI~eGDq}J5HIt|Go$)YmkHNjz;3Q;D<20jNp!QKpM
zH0gpz(I0O38$QB5;5LIJ!O2fB at wf-lCf-{fj_GBwo-7U-aoTT4E!&V;z;rYa&OVlV
zbN#TNLBCs5PjWdhwuah}*TDTAeDFpSbW79~Q at k=-;KB6<3AYFQ<3F+YbN1f-^dBbY
zNu30HA6)eRbRWbn9DaWIi|e32{|bHmT4e&To(VO`$F%nGzea34M|~DJ<Dpu`$wAaj
z$NL!ecZ7)X-u-}$Up`!8xOYPX at OFYDezvN)ddsZA$SK-^$jRDUW<zNYuqedW6epC}
z>~xaNzB0jPw-7z%Pt^c?biZo(yrV~xOi2rXPoO7o?NZcV)Bi?%CgU0&Py!ztUg9PE
znaoMx0p{>-qTh;^=CHM)?jZI))mUfq`AB>J6b~kMVfz@)uS9G}2%kvwQ2)q!@a4h;
z)J&?!elf`>)&Z{~9z;$;w>kO^_)oU?f(z}=!ex|h<oKhko)FFn7v2wFuD|JHBIh0$
zJ!=rpGlb`2s?r>Oh;MX*6C3u(#)1V|#a>Yg$&>Z36Q&2$2iRa+OG><`bJ=G$07q*?
z-)^Q*V}sP8+W28S^014QB?ZP<aOszr+KKK&IK&>DC;gqjr^JhEHd!W&a`6=-Hq!l?
zXDpMd$eI=w9fCSTZ=*jXYwc0S+B+MIh>RP30so_hxRgoGviW+mZ9Z_;4(oPrb9};e
zvpw*MH3<0cftL+F#QfRD#seD*h2J*&(XYzC;N(yJQV?tM>D~q&SHTsvW{kc@@VXo4
z5c}To3EL**9gVt}obcHm0b;%UqW{(wFs!T};s`x+W)JSu3$ApZ^~n&EQ8D!gwl>O>
znx+gb=5)j(v;A!(b`TZyl&slLIu7{_dqqe15Ao`b&OyCn5+m%#XNdD7{8v)Uqbz(>
z_`XD_0{39{+(Fn7IrwC<Hus+@$o2gFvop7N86D*lG=T at or*e?|3G%zqyqST`^c><}
zyJ+P&JN!n-o5);4 at P_}lya}=%KX`%7n}ALa`7 at F?ai<rU{0cq#QghnR-dV{!uXfB;
zf|o4P=Cjbi`9^5(U_70TOwkgb+!^5_jL(IL*UVAb**Ucs?<|GPE9qatL|_ovyp)z-
z*_^Ee=x at 7|?vgo8=X2_XDI_NVzOHc0_k)GsN)~B?f$O^sPXD03yHEWV(t-O3SBtA-
zsUPPm)s6r=WJVxm$NcU5J9ndi&E4?17OE~{j$@wJ+(b^*!^q|P6?uS8_}GwRq556$
zEw+is-AFL?2}wOG at asdC_?!>jy9d<}kz4VZBflX7 at 7x9F8uY06o6u<vH2d6p$a%Nn
z|GUkYW4mDM4Ci<Bg`m$m?&TBAatj<?J&2W80XJx0V2|^S<P#JovpED-yC;2#djWDf
z7NyZeGt=V=5yuRiUWj}Hd7Qp0AM0R#$i(TXh{-0J?7Cxn?7EX=-9)YO#WfBV+y9_A
z-&leCp^t$fh5yYnlW at PhxgD4rFR@{`GsOAA^kiqUJdR*|e#P2ZIgGXUcUHTDf({Bz
z&;|D_0?xSRR05aSI?4v%)2c{r$vjRRYWK}F#DbsL&GA}JO!YN>o_)P2>s%mWXTZUR
zm_!-y4~44+;5R}|Kw{HS{erifgRag57VCN9|6_d^W#Ey-+$vipxJA|x>9y%fUQ at i1
za5S+0zaxlaabXRjxeKl#=Y1J;50P+rYtI8&OWoQPs2v0D3+T>12bWzh2Ze`6?3O9O
z6@**A`W?RWkVCM8*>ze3j83PW-gn%_SV<l;WMPx7r)u80Kza;(wh4P0%?Vb*kM at Hw
z2R0}0^(&F{zZ1tfiaBn<+prHa-(-k=2zmawIr9y2>>sEJL$<e3UkdpGACm9D0ER38
zrwH;1gSHBD#6EN86h@$jPW%p=UlSZ~QR-x6)nC$+z%5>eOhtVv$g~U4PbS#xERW>B
zSl>ZV=_cIgVfhy+VH)T&ueCNFFx-c0>CJ`@;rHU$a4&OHU`Jjd&$AW%cA)qR5#%1~
zs4t0^#mu4Qs{I1sOgyQiPY1W-_*ui(O6uc3%4wrxTboh8_l6FA;Q%M8qX)XdbzHlE
zL*hCmxLyLbIg8RmZ$xIp{_??JkOzOkfAF7(6-T|t(~iQHKj|ae>x%b$$x6uoEX?PM
zrNgo33e?I`+q&)|htaqj^6o&%TC73tlye*#@FgUc13y4%FWYyp*GbMv;Zu^k$?5QY
zZGilyv947}#}3>0Vz)4pwXxjEO3g{M^|Gju=xXXO_)c4oH;dTpF*?$&;C;x(y>kty
z80x`0t7SQ==V{V~&uMZYBf5Coh}}aM2v at Q9`=5S<3&U+2P9!TiHoiS(HQH)FD$%|2
zKl%+^o3M|bHf=-Sy~0H<oTC%9(PNP>GDX_&8Eu;1kXEHF&Q=nCl#LEkJxX*v%;V&l
z1)7RRbK38sW$d$!_%9HHfNuNf32aC7s|m$Y$oKVck^Cjj1<f0%r{_lQ!5w`1_`Rp>
z4n<Z!ZLs;gSf4y{3eU5_71Cbt4*cdLIZR?;C*FWhLY$BMCEp??<j?Z|Eq at lIXi|Y0
z_RLg at 4Z@UJUh3=;PjY)FFoM$C3x at N_;OjsRuSLp43ou?!62A%VX}9zWkuxqWkuz@{
z6()#XBDuVgNhn)QbX{U=hI~ia7qp3?D-=FTeskML@{jz)gYf%e-k35XbF{yL8-RTO
z7uF94be(0$k359m3ixJzFlW9-_HDxF1#>2utEL02oJZZ-tMjnNkU4OH<S=a}T(MhF
zlkkvPF+`3tko!9vfc=lkzX3j_zgBU#AML-GoK41$u^z{~#vT(&bmwEGut`58Sob3j
zz!sg(w)qia++^Q- at tJY`=EbFq`DvXixl6nST&?XS28A{nF at 6nb_dCccV2s3@g`wb+
z_*Gg*+Wz!O)v07~M(2MZ9*7piIG}HO%n94EPQG#?nz!A@<lL)$(dlbdOdb&I07okw
z2U}*l%UA;2atmUblhglLpjdj#W1#v<P;=_}g!g>3N_9Os2RN53 at j&B&m9GJh3Avts
zg<Q*213R5uvr|04iO>{YHE at ff1)Q at PVR&zO&_xi_qAP5-eFTGaLUqNQ at T$wacuGIv
zj6r<zWNQX&!<jJ-l5f<DcsWgu`+?-8Zp_BI^euE(llke}<k`&!_nUU}BzaHsa`K+#
z71=5s8^AUDOz8KK>A7veg|^D8h=o-t3vUW1B5yU;REr$J0dwq>2L6MHdF3IFrY!6c
zzQD%5e!@QY-yG<xMmW%O@%|!6UMUAT!}(VQaai|ckXtFJC7G^mW-&GusteGIl<@07
z&)pz1%HYqq9~`J-Z9|r7;QnUBlp<zvpAmc at 8&;|&;5}_1>k4GR5+T8hxlxA!y3g3l
zSckGvXTVHf9BJ1rh(jz+j$Gk%=&is6A>T`lc;G7W67Z$ST70xZd9BebpNjQzjWJgJ
zCt}yNz|ZwV4vpaF=E+cRP!nxv_FFK$#5*^V)6i(na-$v-!BXYGzF~7#F@~h at 4Tt)t
z5ue4}r^Rz5-2|(I+;!!>eK<Z7^=>fN=Pstp39p^;Y22Gp at PmKfL4^tNOTC@=+UP at +
zm);G1$(`p#-5-0L%(l(7LG?3lK5PGsAwEJ8IGDJY)9}e6CtmE1mx~Fe*^!(kbqR<c
z>J!MPPgHi^GLElS+%<@M8!MK>rz_K(B;RpQV}*%YaKN;dS7qV&eaXlR966WxWA<U}
zD$sANKN|PKmGr{~SuRqF!ObNm`7Z=ByEr)+F}>uNm53Jz<Fmo%wFSPzV#2K;+{D^m
z3fSDUxRvPhmEx3xhnS at 23&6z|TJ55O#F+=xOwuo_x#n}L=`@u`mtVE at t4nhnf)#}`
z>cDq_@%gM}CGw6_ONNZ$bKMPwJ;3#c95%Xbx4E)Y`+>{5vaihA17D5Lecam6Co9Y)
zIVX6w!|-oAj`~c_;C!r&fv6j#G+l&zm<s$UbVAhrl at Yn{eJ*qv at VrWU#Q`y|!0zq<
zhxoTdKXJWH*51-Z;|!|rz-96d+JYR^ZGxO2GR8ambqQi<Ex*84LO)?0OR_L^8>{fi
zbMfGl(rtsz<k#$dHdxY&Tn{@xmxG)^(?zlt)@?*wf1X;4=gV(QQ_d9aQ=K{rUz>P6
zVj3HyRwMEZnG%u%0Uzj6)S?5I4X_&j;xuD_5zj50$8Ae_1bK)X<sEpYYK(oK>q*QV
zMd_~3=1_&k4%mO=b-l9>Yx3e!YEIBa>Z8Ep{>W9((*+%fUmCtXmv1I{bsy;ou2z3P
z@^FhVj=z`wj_2&gI9(~*t!aV}dL?+*&luB+z4>O~-N5G&co?`(;9;2(3BNIIE>DEm
z+BC6b0y!t1*unR!pTzeKt;>JwuaHX-W7Y#>g!@}ao}ao1yx>YkNnOAgJdArK{LEP#
zH3$5-y6mGTb$V=HXR$Hk!TmveE2rRFQNj*#BhDtPT?n6wyY*&Fo>YNreFWdZEy*?d
zkm|4GOxTY#upbY?PbRndR?2`|Rfz{h`-pEx5+ZDzK4ccY=2taUS4jA*@lK0L`?V?H
zgHX0QAIQq{@)lJws#n09CPhD&Nba6fnz}`E!KJ+!xYWdh`<SEv at 3ai)S<g57m}&SQ
zIu3cK)0KE%8xFdeq!xSGXQB1l$!qI#KhHglydU8cS*^c5kd-uaPGaf~HRRqEDk1w)
z4|X$>^>$wRf{Vxn6vyk~1Cqf%&~3Wan!&#Xf8JHWbjZmx)O}uhu$@U7W7kAYJ{uO1
z>wJF92i;7PYM><I1N^UITuRgRk~H8jk~F&nt5hyg`W(i%2;-5|^jI4661cTHkiV_9
z%mdynsnbiRf;V|iRaM<a#Q924pSz>Q4gwzJctO|0aZGBn_u&}$=+c&H2rmfUWdves
zC9wVAk0x^&_GKm+E5|*K4Ifl8N%~3f_g<jux_Zj?=h;vz<_}My3I1^4bCPgh66o%v
z9=!pznSG|NqyIDwU7L#fR4z^(#{YE0P&*OhyTl(;=+EX(h0i8-&mLWSv-jygq=UiA
zwF5k0)gKPGBEM3jI=UP6jd)#7Ivtpi16GMAoy at f@Ud)3Ua3wRC=O^LU9ir2yi{Nn^
zV1M5S8&?ZG_!icpABJ-rcGa-;{(i^)OQNOVP0!JMO6sy=es6;ezla*R-qmSQhc;!C
zXTW&a0y!c=?F<}``>rJILXSCt`Uz&b1aUln;MSkOm?+|TEn}&cI)mwGNs*;bbwZt*
zI~#gJhH-zG8$O|bez1>`sE%6S6>81%b-&U%h~p$u7ZLyaSer)LuvXJ+3WsnG!(?b;
z!rZwBgc>sMfpx#n|4wcB_E+-FWGrI8s>RN<E5Ctl?AEFzf8jna{O5I1XVeE>wh!a@
z`r&k{HFvh^E-)#*_zZDIgJWg1DVQ7sE}4&*6x>&m>ejjart9z}Upl(i<d`7HMXhJk
z<!Q?i7tUNe5GBJqNK|>WN;2LSx=K8#y}5<#Lv8XLjOnB?Uc~>0z^6lM$&z;1cbl82
zd4|8Lkckd2#j}?lVv<J2UH<qW`WZ6z^pp7is(pv>n~6g8lSFd(U at +$RGgvIh-?g^M
zT9hBl5lhdC4AKsfUfKqqzCm2VKVRE#sl_-T`6%z8PCVk3`DX|>)p+xCf<50FXvaGI
zAl9jW7LoYti^R8$wjlfRgQQm%q>EkCmB<%H9BV<^Qa8yL24=#Sd`9dB51m1j66dri
zs4L0sY at 2$v%{SRLr=iV9**4!8X>&T8)A9eQ&6Kn7V at Gs?2Yzusbkc!pwaL${E at OuA
zT2jaX)1mlO;2xK0>IGx`k%L0w9-)JOudm_b+A(flV321VISI9>g0<j=3i%W{0>|~^
z)>b6W(lVcEs0PU_PMt7&3Hffv_j;ks-b^RN??xSRU>DJ6$8qn#QaOMP%g6j?z)ym9
zD?Li;PJAZ$55C_NjvF!cRVj}mzukyDRg$}MyvxNs!1F<$J3->>Mg!VNAnVbaukbY(
z8!})R;e(@7!L_A$^Og{K)s2en53>6*P}4q})O#PF!=LdK1HbK%M2`Fe1LdIMukm!S
z*q|`17Y7pMb|2HO8o*jfd=>|aanJhTrx?MSct$8C=QiP7k`p+76<Kq90V?=g5$`AU
zhO)^1uD|yiC&B(ZPIzevXBByFvYwA$Daum)jQEmu1SilW%vx{(JdS-46`eb1GdOTF
z7o5TG-jUz7#<Yw*BK-mvYMT;%rIV<ww>l-$x_Zr**5))B?{Q<x0tWrp$3#-~g0Hdm
z!dG2q_y)Kl)m>e!>H&Nni<6CO2d*~SprfV>--6$%9Q_P`{4l0&{EFzG$o)y(xGxu;
zZ6&FblHUZsc5ElGXO`pnt<s;KKr9gZ)(KZGX#(c|5E(Pm_CgnnAY&`^N$p#C<xwff
zU#~_z@~qJO$Vl+?DPDw)xo4s<ll|?)Z`d_^h9bqlrWkZ%QFHl$k}bTWkp=z(JQ=SL
zzvJ1u9ZKL(K47o67CLJMcvx1kc>8p2y)F)Vsh8;Sx{rZVt;#>v^f5hQffM~xuQegR
z26|ncLWh_d_BH+N^3VMF*U-$Wo%!F7i!_ffbFJ6pc`d0qLxw~1JdqXt=@z|oi1b6G
zXToa-$5LKkuoqdz#td1;&d|?FH)4*546!-5V`sW7pDc1&_Db=g at CkImxBEHz`jRD#
z<jz~><{w+&#Jd>y=8(xvVvk%oVxlsRIB2d->VS{Ky at KHLpsQSFYh!*ur_MeUTx;6L
zL;|BaPLqvsL~N#y`2{gA!mmVh%4y*GAUKo`T`YM=#}k+Z82ihBJuQJB@*}dPzJq<O
zL=B1I|G0nu_p85><e8Niguua&m?qIXon@>K$>+|-8b*Fk8vgBSft_<)ZNoe`!unH!
zOWdCU*XM5^o*x*m at MD(2Ur~4l at h~R%N3y at h7c3)NE5WIi0LQf%`PEy<v5<`f2jhe-
z_>vG<e&nf=XL|>E%4GX8=?BmIg|A?qCip3r{$_0FcrfqWv}|p$C5+?ZrfxFCq3$Xj
z0ev)GlP89r$wd5H&y1#sp83sXZ7In=q|OkGD>VRlG}(5Ny9N5gam4G%JuEI8d@>st
zz6p7!cyc3OC`W8=0$b1g2U#2ROkjN2+CS;YdzcA6)B)h35^H}1A0~?@B5Ov92$-#O
z!sEAP?d;424r4m;D`AeDR$XG{(`k-aNFyI95^=BDq(8Qy-wJQhsRSccHio>1K9Vnz
zirSWnvIoh0Ju0V1c_dUnYKM#^`>$euv=K5R2JggyIa<$h|Fpor;1;JNcil`QzCC_D
ze9(-T<$zPcFH&|bSuP!#jhtsDOZ1><ncNPHC6NKZ4}L>rG#f`8zDIqbC`4b`l|O!E
z)enxKgU6twHk+JPLgW=IyS6beP;t6&%`U7rVY*oP$70}@BzjJqkx>!8`>;fPB2!Yp
ziIeE56rm(kAIZ}WSQ4n8BzoRQ5rw%!t$)OX376)%jJ{l#uo&lgdE(O<IPcugLzc{+
zhuY5!=d4FlE%p-|5VyH+59Z9=iHWIgfn_#rAL?(^TTXoDYHj)LZX)Urvi(jI>@Z at N
zhtQrw6~l5T=Ebaf5*%tWdi!oVo78blc1P!P;?OtiM97IEG73Is5An0-cEc~fhQyZe
z>?+KkpQVg34SwhZvJYEXl*D*Q^(CHp6_II=KL_rynIs2C0{fh*Uq3g`9VPQ`gj{mh
zxlKWyL~4lWyRhd7m)a^3VuMUXUMFu^XLpfeDL5xg4V6;^eaMgOfP6ZPc2`S^mtOHG
zs2id=EKXMqf5PkVRs4o|7K-ETBsQAct#ab~P;NKYNwVJkJcs1h+eJz2ICcWNXuT)f
z_!aPHlRhlrJx=gF!}$<gJM3R at S3EddMDpVklI_G#<pQ51Y_`j&@rC&yxgM8D_RSq?
zOxsq`xc6+91b9^;d>)_Q0bfZ0)}AcRZ}_iWSi`l at Ur}wam)rE2*6*)o`qv9i=G9v?
zGxX%SsrRt%v`gF#z at J&fH3VNm<lrgGq}{&`bFmXV9<b+WOPz;f$y#hmC9=k0B(ZDh
z;B-0SsHvQW>jtV9^I<N0l9k3o+(OdFI=y9Dem8dq-luG$LED1o5}?k=&*GKPeG?!H
z6W7A$5c5No#59CBtUEsA_$(%6dle(gXrtwpoB7>^C$9DYn<^#uZtHR+1IHO*>+&tJ
z<@g{s34SlQphd};_arb0uzyqMcnlK*CIv5!qP7 at EbqIH0?jh$8{9``ZnS0j^=+NG`
z)_zrD>WRu4ZliJU88usPIze9;PcQ(-m!7<?p!!h98rRGFmbYO0NhV|Q73fS2VR6=u
zCDJh!*A1q=>uS at TC#0s6;E!y_y`-K>nCUBuc+bwLu--neaz;{GrY^w|bR97#;Q!7;
z4h_!*hUkCN%LK>jNif}sd_sF2oKJm6^`<N9vd)buJCHl{gc9v!kbXtHDhK%GgL!X7
zrLwYYxQ(6L_cIw$gv*J%ukYC!&h644!AT#X0|o~?1}=iX^_(=3y6qE0Iix?S!N$F9
zTgm$%`cS?LT(-5+yWlUy`T;)!#!t;m at MQ08J0;A5%@<LKdY3xzj84Y<1_lB#-RKFZ
zqZ~0ZZq?(12+k8+*L~2-<A_fRW92&d9N{xpw+Pb<HL%y}NAB_be;lg}3Fjc+2kZZL
z)F9&j at RR8jWPDgv<0bG-xsBz((8-eBhsCJdnOgWSI+ff%#&<Q#pM*7lswXm$<$fY_
zXw at +O7&d1la)RJT<nGo1$2sAO<Z4JAcu0$@Ecs3T1(7yvzn6brVmnvIq*?1u!<UNw
z`++|bv7|c0*iM%@Nx#t_bSdaeY5 at IngGSC|{*PF%QRDdYmmzD?kvqTl>~hR=7xJ<C
ziM}@Sj6d*;t+mMYYCt<IFAe+`^)4;-hegA63I9O<9FpFpD*}eFmO1%rko&v at eV)oO
z3g=RVxJRO^eGWc$FW%8g+*fl+n!Luc?<<!jY%<YNfFm)Tpd(a*5Ce4Na`Yc`z>)sb
zGgD3Vu%ix<eu1rAH*!zM1gJ%d_oK9K>@=N1emA&XZ&pVW?j}8vH3I9S=yTu(_!f*4
z`BNg{7s&PQS5H73gY2Jx{m=isUq<#L_U%SaR4h0g8#!X at 9i0Dw=>m9Mk>jME5Klu#
z(jztmEViTY at zTS7)b9k>8k=IePDj8Oy(I6ks6_h-_^j5%rsBUzraC&pTIVDA-{f7c
zMeeckDY@{=rzQwr#I?X52p=wZ>w$Yb!ih}Cw`An^H@(dymUzJdeiz)ZLn;5DnBvU=
z$gw`VDfe^g*@R+MU|bUV(<$v`<@>VjJ&fx36-GY3a8X8}ZNV=bJDHb=bypg~;WKKa
zo}rIelJmQpR?!=_?}g9c8l9Paj@<XNISU6F=nS;Qe*kui%MgJaT??K;Vn5-*GsI<W
zchkT^(-E3wt23<)zy8nXc;m^-!mYL(*kR4U>|kBcM_Qi)em#w{=Y&5{fOXMM at a)J*
zKIu_JZn~;*1eq7_3W3ZxkWx#=Ubd?$T}P4ilW;hWtW}qI_ns-M>m;+{sY68t@$E*#
z)Gwlck~qjZIDI8z2g~JokX!YUQQ8g<<kgG?HoH&W+01-qvpP~Or>dhHI*Jr3H<4|S
zHNB8$cE~f^J$VMX)LT at ba{Lc@*8AV&nMIxlZZZ=YPrzW*kori-O+u|5%^`f>C5UA8
z&d(8VXtd7bzK+kE;AeQFPVv%e!Bp7TqguB0KaKnZfq$I#p{UK~nYuo_v#O$0 at M0B%
zXKZ at 2-+_HyuW(;f1%|jGJ7b%J7OSa9*qb|C3e$i{jD89j=SvW^Xt`!f2I_-<%uHEm
zJ^V0rjG088Gl%O=fUB(y at 30NAflgN;HQ-932Eq!o?&(_S@#Nhatj!+O=@z93axKQ~
zSL2tIxoO>6ttHOtjY4HBq0HLtSrfG->;vsxW-My{X{o=0lda8anf2%u%y+D>7Tu$x
zyc*-$Azl{I+xCF>|JxR09LBPY%1oH8n#%;@yh!RC|0j&|Q7!f#R*es$zO~lbaX#!p
z+&gSctX0q(kfXiFM~C9`5T5_c1Mt1adlA4E4Rfe}8NdB~=tGmmQ;L=12 at Q(ZTA|-B
zPyQbDgVsSmb&6LF|M%7#$;XEO^Uf2i at gHgwy)-+ydH6rq7IE(Iaj%smpBVnnJwv=<
z<iFtL3&a0;j)^x8pS$&T^7-Na9EZf4M~>T>d>Q|t4${DHq;3($Kt1%L8=OZFr%4c$
zYhHoxf9}Y34kv;A4SrUt5 at U4kDIs?N+c~FVu`P;`8VwE2OjZD5xiw>ehj|DeA=U;R
zJ~WA|(z}-oApd^|*q%>}I;qFFp|vM3jq>8U6}pI+I=Y-|(}}kiGT_d0WyiQn(h*|=
zZi$V#^JlxGC&#>sIP_48*58A;l^eOWKcc4So!ob$sAp44T}(>+0O2+h()cbb?PkQK
z?TkL6p7M)n64U}Wi+!#+Cg5uWIs~=$ZH!Xm2i at I4>*dv?wikV<^c<5$Icg=V`!zqP
zuS&AfPMW|g$twMoR$!lkhxe#^F4)N93QJ1d(G#Gb)I%4V$#bE8rJH#G+Z267mDqF;
zx_mkF^kdDMwD`famGJ|vxs)%hyVM0<y&&!*@%^q)lh5S`4)kHZg-iKn!uLdEJ!EG6
z+FITsz5ThaNr9HBldnu{%e_?;9yrS)-s2axPwRPBA~;f%HpXp<-E#%}?sqp82G(1Q
zdya(}I6j_SeF?l0L|=!T2fpHIN{pJa+jME%3Z0#MP8V8210(h;xG7!c&D#gN=IwYI
zIYP6G5U)g?OnYCp&3+XzlaTM!6@)Jvc|tD#4pP4|`8JN79##R&_xrimNxt&Y{iS~i
zGi)VSmnEZ?Ma>^!73zwplt6E2`SH=Nl^k*1E68C=0eAM at l6?3L3P?Rre|uifbu)$h
zOkMEL?*`AdKALyV|BSlZFCBilom(77lgbMHl)y1OZ}%%c{qMX70c>1ex&|MuhnHT7
z582-PSUicTs5`p9tO9Fx_0jaQ&yF^inen}b#QB*+r4i=u$_B~rl>Z_%^;B+MdCbp<
zqgL||7H{OwD=8wjU_%1(i4w+kY8N%wX~p(#dO7AsyWQ8jf%oYt1#CMBb)YCc(Cgm`
zdw9IO9-JF-e&8F`E|W6;%hg at Q>065YJGb1ywFUx~TYbhX&GE2stG88JvcZ436`cBO
ziQoJ#u6rOXT<hMHj+jz<$%f}MUudwT)cz^xgWviyVC&ys>)~xe{%<*aa|fUDY3E^E
zRq9|)V_S_}_HRuNS3Ud>S=iQXzrutLKa(fb^c8B+t-tq7u2j<tnzXfp{++o_^Tkrv
z^-ijnNiCfu91kvzJ%P4>wDt9<``9mdo-2kto|&isZj$7<{ed>qvAxamruM<-J{LCX
zd_ggEGwtlJHEAUq=KezU&3zBHzD{zJNiDmBc{GS^A8O?}$y`FcZU^Sz8Ah+>YJM2*
zW7i_;rfWHM3-`DKF=8(I(cw^`PM#h1+h}lp0pr5*siv0nqNb7CC@<MS+Ki5XF1Tz<
zpGd~Li~Ica-+isBVN_*|R)u~MmHxs!iWtN!^bbdT8uOPM at QeDY{{_ at jimXD8eIV*Y
zt5H`DG>HmeF?jHo%_}a6j(~kISMy0?Vet@?K;6()Y`;M-mJGqKc2)4e<`ThUlzmiY
zX$NgWjldsTdnV^>E+OrX%51T_9>TFwc>fauj};g2Hi44>(9<PO!Kwh8|Aj3Z%&(A|
zj;5vJq>|oZyl0`xR^rMi>9v4EVWLs%@RM<mhNW43OO}>w7 at e`u4Zlmjf7<1EhdRLP
zZ|i!6K99Pv|0rQZi6u_IG*ct}g7u_FX6mKa$Uhal4sL>tgfEcDj7 at jKE@=lwsW$ea
zw%?uW?@@i%?^3;3yWXP*sV#mPR^Q5i#AD_^OP&6zEq8>gZ6zLA-T?1Io78i#q%SNs
z*XgHP+s-RcU4K4u)8^5aH*fK~sJV=I&k4Uw)Os{*9vq#$sh{@^WXg9DUySM6SUl>|
zmXhJ|uw at 8i%swh><G`4l+(3U-)5)^;R02(w)ps=@ah<=a7<I1l*P(vlYGK`R&G?Vm
ze5q~BYOeC=)ch!L8!)H~TtKHnN3>JlA|`Wrl(IQE<RMCIDM$PWJmjI6W4Tw7hbrYJ
zFZr(uyqbbOPTbe#{HcVaKroRbPE?qtGKr|y{XtXc(#ga9jTmDs at _{OlFE9~2EIEF5
zYL+gNy9+w)E$|EF2&Q*_1wU at xpR$&dQ-JGK7Z3MoG{@RhEVI^iVQpvq05`!|{tN%I
zV0u$wnPr?$EageokFoCdq+2^YNmW<#Z(6;cB&m}Mu;BYRZ_*-a&`(KyKzC6xJbQ!a
zJIK)l at P?YL4S&kic_T9a7t4wO*D!9D^)tb~P at iWp;%<(ZAGcP_t0ChyvYCuqQRZU}
zsJYI#0;yeTDLF1S*X*089HLK&oQFQ&j&o(;83<P$GL~~Kx_os7?Dn6)Gw?@I7SG4O
z#H|!*9|PWPdoz<lUB$RBWae^}u78-K1!MT!+=JV%q2 at J1_OWZB0oa5vGTzl!wGk!;
zc|t>uoTrXrUi2~=Q=cV`>#9wlyc5H$FSRaR+Xg<JTNWSHoqJua6SS#jA%5q&HUoT0
z+2Bf;#f4r3pRt$ww%Vhy>&j7sR&P}!W+-G*TE!pasD3xJ+hQEj(zDEF4pSUK>ot=D
z>a;)bj!=Hvos3NLDQz%09jHy_NX1q~<Q-+NEnnTwq_DDQ$RZ0I6s!vDx1gp1f0Oik
zI=e74J{P%P$lu{UOhrQOxF;28j%(9C=%tmpcdF*-f<o(ZT~+_k1?L`I?~THmcMZqn
z)?AoDn at e%bdIv8jYAM?9GwO_A(=(_o^l$3M_!N$~RvhUIF7cn0yI&<hUd=_|NIX at G
zDEC}j*N=2c!E{l9=^dKP)AY`lXmg;rWOq~oU$UOzWte`X(>doX%9pot_~bbXOKBI{
zOeM!!-ONjn|L4(ekLv!e88z*AcebK(@W(ty)?AE-63mq;(zA&MUe)vhjiM^H>@IB4
zyD1N&KMFLj^AAGbNy7U|Q at LGA(+$XM#|s at +x9uh9!0FVpm12{(DuwdoUbjjRn{={c
zXd6dtnQHd!+ern5?$RC&E}<6j1=8B$-8kp-<FUv$5LZ7y1qs)x&x>j(V0&nlXzy_i
z_v7KdrFN9QLo3O1!l#uM_-x4z>j`qbYfn*b(&t54;5Au<d-x~k9O+9=6#QkE5D&z2
zizETFV1x5V`uJP6kIDb3<o~tLMtuZXo`UvXj!HVZ&2$6%JL$<(A3vzDhi-ol<3j!^
z$<h5DJ~-iA+f;|l7ISyb2fHA*zIUiP%LmQY6a9pDa9GE>2yRsisYMl1r=JuuOTA9l
zZs{w0zm at S!E#1aEN at CZ1Zms)TKYvpc7rqd}uLUd!y)Uw!5=Ui({v2AK>t6R)R1(%P
zH)8z2?2)lV&O=-|tn^1(sW$5jWb8yGgvzyNgXiE`a=PB;9#HuYA4Bcr2XXDdFx!F6
z|B{|Tj#u3PzcF(0IbED7)cf=~PFlVh=Y8AtHl2=kcIA$>OrW~)oIQQu2>yPP{rDAy
zdI#&@tJ7D~72F2!#OxJ}DZRm%P}}ze)lK~Uo<!4MSc7jcOV$4c|1j34sHckb)>xY&
zYIf*5+8&F<e1*&vj)59ruX~A-;k`5Ld*9b0;eyw+E at 2yDSl^xhY~?|pB{TwlB&wg-
zIIhvA7wB^Sheo5uMn at D5RF9>CajqLVm4(rfoDR<Yz#uf09%4?T at 4Xn`AC<cCyPG+^
z*1JEI)%WY6Yx|hf5^zKjKM2<EQ>t at a-|v`hEMNO9?_+T1Op)F?jM~3stUocgw8t^a
zcKb#WIY-)unz!o_yG5*a`!Q{n%7y2<qD?~^j|apF>t=f~7oAm`D5mOp_&n2`GSL<?
zAHi2GDRtAQ!3DS~sn4aPUNB4mMk0M&9XRftMHSCK93{h;SB|UWl$$=qdi1uzpu7%y
zbNx&exW(maSy7r*+c(du#oS>Glel(HIj~Fxm>1augP8v#aB;wiBKEM35~Ka~>m%03
zMJXp3bFU}=0lEExKt%e?c!Zu&dWb&VSxp~6-(+ash7YK2_&+L(FOaydiK!LB6#rSm
zFF#PzO{Nq2y8n0=nngZWB(;L&E2uCMABf#p&aoL4#_#AE9Gdn-1>Sp)=BM8ng<9l{
zMM?dGa0T9bpLOaBAJb<EcZptUF}yrzeQvzeXyjet&u_R<q at a6Gr3J#zWbGNqviy?&
zC&{1TT|r#DPYb>cQ8N6#i)(*caLIBrQkPc|HK)l=ORBC$KDe|uEKSS43t<Y5$+Y&s
zCimToT at x;nkXYjP;(P@^p)~rw+B+j{c%mYkDrv;CBOhFHsx>37xNBbC%lvtoe0)cJ
z9>QxIw}QVN{2m!`>-pOQ9l7Nk at T25ywJ6`4llyejUJ>v-kv8tmqEwB_k`f6$4_K1y
zwo$ZB>#(Fy;G5SKZJwnXjdr(!9|akdyrZZ^WG{k$2;*G>Y~;D9x3Eq{a2p73)F_+!
z5&95n5t3`Q|HpkAnw0b+_F4ag{>E4ok6q!O;dbP9*Irm~e#!s3Pi;Hy>p`oFp5MBg
znHnVt``{M`4KDeRxRL_N^IRL9zQvo!;T{^(vC+W%K at mS{wP;eOlUAZmIPxgC&y;xZ
z++u&F`jH|z&*yrK@>q6I-In(KKFi0um?$YnT!VY(&4+ybRd(GFzV0Y5-|GHF(H6+)
zv>jT4<y|PbTZNkN7B|%`tVZ4G`Rnh`y{(0A7!Z+rQ1xha3gr}KKlK}3T<n3~6~uiE
z^LUXy0%Ieh=pD?5SM)A_`xbpb+h%&qx%dTs%3{~3lugWN at J!);p9gO%<Pydf<V2nN
z=FTxn5(m`l34Ta7i}LC^rfpMRj~Oe=<)q{IXw+rw<)(0aIl1~tDVkF!VP7?G*wATb
zmdE^X${6SaZWZH?<5NCl&1Do;$XHFjvB2b{$8(No4?c2|9)N6=b}DFd*Go)#6lDO%
zd~tmgrR-iC!AmUsj`ZPSAp&<PR1I+Q$oCmOC;pp%j0vgRqkvr#%P94e48Vl^_5KSD
zJenGao&vvfGO at Fyw*)oNF)}r8BPRIOh#ljmLrW9r(`qg~MST^qxwnZu^4Jc^0P1Ob
zg{i2w4ZM=DbX<e(*=Z*y#^$!Ce=@GpkU33aQ9kAi4bS~kS^WfR6L9P@&Ev0<dIsFI
zrfnA0+R4D#xHGU;TT*tBG20)d{KptwEZ)oKstBx6KGa`n1J36pd@<Vy*QsEXWvA{p
ze71oD=p)#sOYOe9i at _^k8u>o1IXG}O_HTucI0{?%Uvn}a7(}kfQL-ie9pFyy)(PKe
zFqTi(OR at gx6XM0oY!4f)GeQO%(-uy{c1Qr<v~b`5q3g at znz;7%L25+ at 7*rNX>|z_G
zw%pcKg`#Z{1tW?AArJ^4E)$|%lz|Kp6}i3Fd%e{QV_U6lwY9j`##U3--qyN9U1;1w
zRN6)q#I2Gc2 at w_eJ!gV#@B9AVKk}K$tmm9L%XfLc&lkAdy?BNf*DDQ=Ds6n}r&idE
zPVG^Z?{3TrJV#_s#7~`~yfCJf%7euAFAXKOXH&wykBIHiuhe}1Y?3sTerP^<HWk|*
z{CcIKz;tD6t02SoVc$Xaxhh}=N73yqDfD&oGk(eXNZ3v7TNSJdzqG9mHXi<tPSZOD
zKjGJi-)X87_$&(*2RxpE+{?GOwD8wko~GON)DWve8D5_`FZ?*l at MatEmiXCQ8u+Fb
zH-8_$Zu}mgtg!`0 at vI~G9X6#D97681{g?xQ7b<h2T_U1hK&;cL1k$#P(ay3c9qNA)
zHn>j{nmxxlWl_bRW9!(2OP*s6P1Fj{u{GWaHqWuX?5L9d>!K2V at f>@YF6JFad;ZN|
z%sY;E*r!Lap6kkD#JuB+V3+$as>pNf-#Zh|^uKpml)nF1OG1<9nCr4=zjI6H5&I(*
z#ZlqCnYrO4UTbrUp6|o2SFvGC5x(yh{659+vlczQS+Q|UNy`NKBmCB6T-v&c9fsd<
z{GP(^N&H6O7lz+R{GLF+1E1B#7ZC%m!~Qtv|6ig%kH>x#evy at 1_A|t{2+Y+Y*zbLl
z9&#JxY?4*ZC7qEMfGf+Ia9&RAj6`m+L<B=8nXlaiyu~p`3f(c-5l~CEu2HnpnBMCw
z-Orpx{%ykH(Nwqn=p at Ki=h#HsLaxSqzBmmzi)zf*T?4}MmW4p}RG%N<su?(rtIBh6
z`<cIJj}IJY;`j>4yiSvPjl;i+_!GtVR)e$hd_-`PL!yC?BjwXnR;BsXae?n}wen75
zQ?GN?IJ&PwSQk8)GM_t}c4{}?v#V{ur{`H!SYC0u_%6g#4Sbc;<6Zd!BNZPIyB at Pt
z3tiqdm7LGdSA2lJG=UDukEAE$=PPT#UDgd*UAT6Ib}POq40XieeNMb at I^GvZcMUEv
zxBsF#KZvUVF9HjG!=SJ{S$f#2P2sc?c?W~9AyyFcgqsV(I|B!~6v{G`=VrU0mgY&y
z&9G&#_Y_LJ6P$ecq4aS0=e*u$!n%s9&OXM~41CQ~*5G<$eXp}58N4of#Nk(I=T*m=
zEyz;@IXCSDu<G|@a}dXzqqq|BDDGatv_YP1=hlO_PxWpy at L1ppfFJu1a<UoKJEE6s
zn&4+zMD%$4|6V=^Jnn?kFhS&cy()6OPOo=U?_*vqB)k#O>F2!-Zg1o?oJn{iba%M-
zH4jN1!r|$}E|upX_l$_6CL&Lr16<X3p64D(WL|r5`cmtNWX%JV=W*EV5Sv(LBk_Qt
z at 1b3Y&lr9$wuX*`OstQZThX%f-k`{g24!7wA-Eykg=(^YO~$K;JsLXJ%^3K at KNxRz
z3QELdLw at xKPsO4ArA6bCkymoNEXG^R?@&1qad=%^5n>C{lty6IYP{jsKYbDZi{RJs
z6=U3+*o~x3A&cRfm}Kowt_l3NVyuIzY6S8&Lq<~?!QFt|oUmE^3T{?qz)^X!H}G5m
zM?G=k#J61U`|LT9KWhzqGQh4kN-$o?HbUGQga6k5|3yz;FoLxh3V%~!*UpK&Jt`Hl
zZesLv$SvmMZ{hCwTbg&XsWUtAT=#F&3Jnx|O8#k{GS;a+kpHP%$T>u*+4r<lt5qLG
zE$&&@Burgw3R4r#N88SPM(u at XPLzxP(avI-KDi+$Hao3%AL1Gi*Mv6O09y`tBE8Z^
zD1ZS>FuuCkA3ig1Ls1sItBbT1;zVEl^LuT|z=fo)gD0T<BPoO6qTT8K0h{tIbZ|-J
znl3i2)>W46Q)C>u)sNd?(*_uqz8;pCf6O#=tAU#^DE~x?kNd>qe|HBAt*z+E_W98G
z)>fLG1zqtepU666<=en at Jmp{0pF>SW8HQib-RK_3ci9$P>lyCW-5EF4eB6~Y;)CLe
zGkeqhMtm{XkN>dTXx_Q_jHWN$4|4jBr}qgH?Y;reKE1ERq6tBL43LowVqVQ^dLo-{
zy4ie>u7d0_8ZoHzn;)9qY3?z-*W6baMP*^EO;`t=fewv(4V)yo^<JqTpg)7ZvvbO%
z9}WocQDeOgxW3uJrolfvkBQ`z%CD;R4L3Yoz!=krMP)Z|m9c4B<oICLV(dgqJ9wwC
zmKhE`|J~SNX%}o4$a}z_2HyfFae>noyp>b_R;d54d(;2>UI{qLoP@`5k;aL8uROXJ
ze9paf#@DC#TfsZH*>u9Nh1ORF4O*?sURNzl1;3fnr^%SO*-Hw4CS+#xdBll-7;qut
ziACRpO{Z#1 at w*@F)YDfd$2B8Xb55_MQPi`YT==I}p-BV(i?WhRFN`GEv)ZG~67%xG
zF_i{tbwzNwJ1sIadZ=0lPON7w<T at _3Fw&LASLW0VvPL1ElTGuEys4tQ at J$2AdB~}e
zMAnS(5%YU at M|cNpA{YQkWBv+h%b>FrPWmZV3g4yIzqM(E-WHy(vaMnFmYro)FO-!8
ze~PVNNkW=7kkv;ONzQ8v*j!VzVGFR at -<gG*DqE{vWpfMeLCsu<vRZs!4r~W{jFT$*
zeNt|5th~OimYu4dY7BbUQ8F>?rHaP`8pdujTz3WY7uj at 6tvxrc*BG>}PvH2cCS$zV
zmEiM2ZZ)ZtuBkN8z<E=VunYYFA8w0O+Stm5kFW|VdLQ~gpGnoxXA1h%f&WR;2JH*T
zcOnEV^yqFRZz}9+R<!RW!<G at X$W?lujcjaig|Dk;r&=1^O50I3tvQc1`g9qyH$QHE
zesBzI%sqpL(Os~0KlREVW!aCijH{IMtMSfD7479VVJHnuc)3mbj%|W)hj9x^p5y at A
z7mx~$btUy7;RkcEbk}4(@abuo+ZD*yJ$3QVVTsWDGMXD$OPsJX&iB-~ILacMyZM6f
zqz18sWj*luw-^)O71|X1fwmOnj+N49Dr0$18>CUcz^_l*;BP{>@+<gT_rYf~%LLv{
z>9_E?+&N|aHdXtAY2FwIr_4VDdjwh2-Jw(HO<_y4QwMXji?q3e<3BczT-P&rZc at kK
zX|^uAo~q3~tGQqtS!Qt|hC!VccDBHnWFMT<f9?!&s-}UTZ?CqF4Q^~=!(pFFC-Wc4
zS4 at 3Rz6-wJ3&x<br%<-*Z1_6lDAqWEl at v^mb at b)wDS>d`e~b7V$xE;=T{va6Guo-r
zwd6X)*ykV~e8pl5Fl-Nh=cx!XeQelrN^NHX&Q>1Vz1qa=>jN%k7F)$TSU>GE63nOh
z%lPg2EA#E-o0IPXJojL+-IM7SwgAsX{7W}5;`b$_ABC?*zSfI`(*iM at O^^B(un<l5
zl`oBXIor=L`^oY1XFj0ZnZWjQX at +)}mTob=wc6^^;=Z at m-LBxut=xoB&&Wubk*|-P
z*m$fsoUSS`qCc&$G}sgHuDKSoBOA|zuQ7Lu#)Ukzb(IQwHKzn#VJhT;hGzG}$H3d2
z#ykMNx$nVRO(L+ at R@Mn_ at 3d%FP9o{6mRj)B9CR5B*MP~p2w!e{XmTF<$J+Z9aRF9!
zrcYOHrbZC=Gq9h5?^4v*CVrPRv?X%Z-Akd)_V*PF8*V<{n#_MF+~B(eKmMQgeDelV
zws}KmGU==ME*a*kJH+niEc`G(Fd!=56~N_3k at knJrq-fHS#n(pyrZD;iV$wI=EL at _
z_V#JY^#<+)?|RVxF68lTsC at Q=^AQ1N<~J3;oxMT66<?Xpns>^x%{vQ{%}0Jr7QfYf
zQ^=FBmz~IMNssCJd_DbC#1pV%Ya+YMmj}lnUd8GX`0m+hboYv1CFf0DTQT42&BN#B
zU2`PU2FDco-IBCV9qfguE@@>{QH3JFZA$*YjTnDb at k**XB7|VM(C*{;)$lbxm7<Nl
zj~{RbpLVi{!vdcV+W5KJ>Y(xl_QS at F^TWqZPzRP(36s`s5T*uyts4n0=F}1Qj3dh(
ztOb4H!l_MmrqQxEoNq$g)fOi;wwI(ew$D!s{yKMPy>HG>WUU)pm40Td;f>4MshImd
z#5kxYHVsx?R?j|v{_*_dIy>Up&*kf3*GKNB`~q#AgfrKl&E{*-PVW9b?apWMJ(hds
zG4$v0rVu0AY3%7r*rqF^j9qV>dwM3Z3Fb^Fi~>hu1 at KPYTp-~Or~WGLza{RM6I&FH
zl}o=Sc`RN;?vHn`gZJVU^BaR>V24e01!2sNe7CoRvvjn5Mb>`krdvGnRltFy>%g-d
zN3O6+VE8UVF7Ls%rL<`AdGNQ{NWb#PTKUh)=X&};cPeEe$0eh*L&-UD&3+HOc6vWU
z(xu2^a3#6-<t)AymgC8D$->?R{WHdc`zfsc=@X|hpVPhv8QVc+!Op)HJl(}ud#A5k
zBPf`am>YYs2DeIIRXmP4x>d$veeVYD at tzN{4OpS?YDVk_9%2_`29D`D*?+{Cv`m|F
z!!XF_u#=E64Lo#g<-MhUC(lJ*51MmJGVq-H3Sh8tU1GT{L6wA9fO3IL);MNd&<Le}
z+|w#7N9 at To!ii8$&Rs7}i!va#j`)ngm!WZ${C=(H-N3~wjoBZyB1gK8<VfE{ncFQ`
zFZ16fd=q)j3RU6fb;h6eC0sx~1WWt%<i%&gR-inc`~|^5718Ig-v?i8%GN5OPvg*%
zc*s6-%-qnOo;Yw}8rEKxxok}Q=pNn`1U>N~VhiiYKDN8D9WE2&E$KS)U$&evqpTec
z9d7{diIr-3w&vO_T2Ra~H)$7cy}@Qv?%0rZ7lg&ODm(hv@=0V(BKZDt#OvX`J<Mf1
zb6Ed7$d<fg=r!1(fuZQb{~sayO$3({zGD((G3}?4HQFcTIaC*`XA(K0ld9_Jxr-}r
zC68vzSmTK9BoH6eoNP at emjXR@@8%9Xb8MaJ at e)eKJivYyVo^Iueo0T=!NVx-d)k=D
zX!hKSmRlz1s_-=+M&fE?*3hRVHo~n4yZWnAhxDb*h+PB6nF`P7rd*OXj8_#MDSbJq
zZ>NH{k4xFQ3GMBMzVN`qNghz^>5JwgXW_^GHdgsnbT-y9?F)|TAU+g$!%(b~Z3XAX
zU6fi!n1u`cNlCQ0ChZXJn5)lXjw9Df+sfjEN$`;>qvj{9Ksj?fF+<STt&(k;9tm*V
zM-P)6r<BNjdezLV42{eC3UPxMfpP7X3>e#`D+qJT=TI)$^r3C&*B!qfgTItjqmD|8
z!If;Wbxxz4h&cn7H)7+DYVMJJS%!BdFyZ7mMO;c)itbqah&DVM<LF}aOz+^({UWDy
z&7SSv!%sYm+?l(_yT4Oax?Rct=xI at xpO<B9b=p~sm8X*I1?M6UBw%fvaU|+h^anv#
zkR(XnBHsdSyF$Co`0%WNHn|_6*Emu_U^C=UFXW?;zRt*`2a<X at mFL^%zDa at Kn@NQ4
z4c|k%!oLc6U4jFw at DF67&)g#Oj3DF38sq-eVmwyXi8<#&*mOoxa4xE?&X}~$+p-F=
zo6rYVL|sJR>ElwF>6{w*N0IXa`e`K55B+`tKlrexUxrL at HEI_6?G21CKVW;;YQK_R
zMjXqXe7j^Mkx3Bu^&jo at h#)d9%G)Kj#qD8aK3GfmSlPko4 at 7Qh2>1_?Sqi~tg??St
z-zTP#wR4K#=?~B&Hv%K+$M0Zon5*B*CYXa5 at Sp-CGu6`Wo(&8o`TntU9HoVb8A6;F
z+Q1t!fs>s|Md>+BFUC&18JxF}dtKD#Ayy(wqm5eob)9R#<S8SD|Nq(<GTuh`@Wr_k
zKA!6_UBVO^oEzWyV(dI;Rt~9`9yAI1yqGS at 71O(VU6oS~+#{QfV+*lG%)9<AX5}W4
z&jGP^Q-KrO#TQkmc at BP}9&VU+Ht;Rwcvh%BILv`KXRjSEA}0BOg2ZBfA`8)ul;^_#
zlLK951GrC>sAq+xL%!R_2r^ro at HE|v7$C1bUUV(y=;`2Rekh+3c1^BqtnbeC*=Sxc
z<oL<tB=<>mk`?dxJIZ?qwrS}6L(Gsl`=V2sqv#VWD&tZgj@#1QCFm6|SEj9b$d=T5
z?cNpUj=rV&1 at r3~K?-}$rxM?V+uyd2NS}iIlgh8y at ff>F%KgY+J6_CRyPg|C;!e<)
zJmWE$xgp7*Lh;@Zxl+3=CD7EZXOvBm;AFj3iFzP!G5jE1k~U at mo-spw#_hsje?6Js
z(AG}_^W<5dPH^C at hU|`9#K1K!-0EcC#4ku(XD(nJJ%TaUhP=Qro?PyY?tf%QC3&t7
ze at M31RCI?pmt~^=)#6 at h|MoF#_XCIhf6TkJs(fFrO8b3<>aSFRC2HlIU$k$4_q~Zt
zWi(tm^MKf$B- at yy1sBG}&ABpe>YS^TAZgPgrpq%f*;LQC%n8RFUC1Q5bf|+zzqWe#
zR>6HREWj##S&RkSWu7_Y0p%6rlrA&f)F)HlK<92odmfZ7SJoudi)(c<zH^4RGTJWv
znfj2s0A7$_YkPs$#5U<lr73neRmILyR>!|-ZcoX6!j}1B^p6SCV-D194|yAY#>?RN
zy|Iu*{e!o*vQI``DxI<z>vo<?`X!Ee0poAXuQr}OE5w3#UHv7v^1NfJQmo+Whn>m)
zeT>8R3u_d!0-8MKEx%#b40+%g58wY4`wq5*`bN48Ih&Uc{Rwh4V&T`?E7bYY&~(H_
z*V>#y6Y4dcGD+`(JB0_|M6!i<&cX5La6E$?r$VFWU_QAF`8F-=yXWF(w%MK;a(!nw
z9fg?sS`t$)n~QH&71k|B%)z$(bSU~z2<E^_l%s1L^1tfi!AH9RoMTF?SxYQ^^0&mX
zq7ui-D)j4HVTEL at OrC<i56+lMaH`6);6u+TDXQCk at fGx!OXNIwTu$iD%yx0rcwd|L
z^H;J at bhHrp|6*hNUvlT%+Zo4OU&+w=ld-bHH_UC4 at xKAHNMiM;H>w-+N|oma^}K|7
zkFRuAHhA}Zwd3!9#n|6;a16f({cXA~Sz#ybH&}_b at YY<ZQ1ff*()O{@63qagG)ud4
z6WXCF?Avi0!z#z!Chws>tlR$cJ9!&4NfMj)HLO=hFg6<msq{J1 at l?cT+@*)-<PjW~
zI6g5y-$C5-pT?)gg1&T_^f7LjPhUg`+6o+<4GyX^;fOfjBahx1$ZV98jG1cv8aFqw
z-uJ9k^MLpR>26IQhZxpd-(c+O$vQ8N+sG2cfC^7n-dnK|?KFz4(-kfHxQYsWJl2FZ
zEfbK{ub<8gdy(jm{u_Zus=->4URp%@k$edm=P}iF#vcX{Imf74+Y0<0Wa at u+c&Cx$
z1vSXu4c_#|2gdBv-H>ZqWEtQ{2|=0eYV71c;TFbtoX({YI{^5a;vtLNhg_>Fb9(Ze
z6Im4N5MnE#8%_u3np=GL%zf=b4fq1HEbZm7;yOj*ErUdP%!K$@=(r9gCE&Xv{*c1F
z-#v-6O^b>?P2}*OJ{jU>H)`LLKZRJHhvy&boF3+-E2pd@)TeF)Twq^mVffsG^LYn#
z8L@^z<;`Ng at +<Hg<Nzx#SZwurY)yzyQciSl=Y;dneQgfUK976|Hq6ad;hRV29VVIb
z(fKaesm<;47vlV}&B!~%L}MPzTey;aS~niNs>gtTuZJ8qv9t&rL|^9X5r-- at y=&N_
zt;-+Ym<k(0r%=pa6@;<Kd-hQ^<c%L|?`(Ay*yQ)>ws*{4{QkOg!ZdkzMOwg5Zyb?K
zTezOc)ZV}o*t-0E>U~dk!_HbD&KLg at Z75Ud)dE8ggAK8rt+$w6DWH1@(l|;dnj1>&
z+E*&`2c1V-XcxZ-9>oHTq2fVZ74f{TByG?caJ|B|MeJJr^Zv~;t1t<6U7`89pa%Co
z_=~#Lh6ABFx^8?=Yp7b+DW8FFqc>aupCIAxYZ*M<;;tVC{)M-6cIX7o!8(h(sn`JC
zwI9DRW?v*YNWyPcJXvjMjR-OPDw|<jE&R+>Ois163Qd$LB7~_ZQG$bHn6ld68Q&)v
zK#l{?wA9ZxBE*kP&_*6}82FRYWrb?!xlZ9V^fAIIH6AkX>q#3huIgvx;rd0$<B2@&
z;3e1s+vsNb0MEU$*`#l+edti|ML5n4)=#WV&?4u++u%T+hG)eBpAv&-y<%vcrHiUB
zE`pBoqP7{=Zoxe#iwXBeOraY4pW)c2E7C~*ao$#N&d+yNUjOwG;`N{5np5KSul1MJ
zg6B3RT^Gw3i068)EBgI9OQCvWHb0E`RP!eUH06ho at 1PJ6A6F|>DQjheU~e at 2*)ESb
zkYtjp$zzun^<NcikH}9hg!22q4<XvjOd;SE^Q?6i)4XRK1tQiFb~`n6<Lq~TeZ8>q
ze)4FvPd(!Ljf<UgjsU+xI8N?qoGlG}7RKRNWA at pHrj(9e>6^H23)OYa&2LS3fc0es
zV#?-f7lAYE-+pSw+rJ8HlNhf at xa~0>2l^Ri6jPfVdj8|wPpPJBas25S%Sm7IZU|ke
zt3|Gt>OI>B^3q-pul=>`?G|Hz<*Ug_zyj9-3!DhOyO^rU{iUp3Sn6|DmKonI#6bs)
zTlWxS at -i1XY88BFr%RT>ud@`_ygnWIyCJu~Jm(tXUM{N#THD#gQM-_*2+!dT_CMzw
zDTn`s+u&8e*d*no{?BsOhZgE~d&>Ek^-(!bU0zeR`NcN(WW*q%oZxCe4z}X4yQCXO
z?GnpVK+4m9ZfgIz3Y24RfB6&p%OBide(`$Gb$jCIzTAOgeJ!#$vHsupm-~_|Tm1h+
z|9_jO9;idGXATE0IuP&w7}z&u-j-&DRX4V4$+#tB<e!Us!!(#jIpCdAl5SxRzA!k^
z;&zq7&Nt1_YE;$j0LO_r40G*u*cF>f4ZWCSFJtWP=pVZ)F?OeNs_8CH$;=`BpX5D!
zB^|QXZ_NA>923XnBBG~|YYh8k0|@^WOL>lK>fkT)4S2$$b9{?&_WGPB^S+qkK>r$v
z*ctH9hjjrvbRT-5=exzBEfx5-25{gk)jWF*;|Xh)9q+2(xKTBD|7Ljs*5-q6TV*q0
zhs+Vjb}!bIIk-<8-?DtmQU~I*@qdftH!`mMd@*LbbfJf at 2-z5e2bb1_C1V~+7w3wT
z{u{Aw6_4$ec8)@hOz}C7#<_S;z;Vw#z{@WmtU-MEuaKL6BkvZ+c00!0NMO<)kakn&
zFuPHv`6YM`sbhf=bH^gyX^&01CM7mS at XXk!Dw{|hi&19(ji{GlRE?PX*!OmyAP_wd
zb3hPe at aNGVCQ<ITH2xA~$98#1*cYM8b$|Et%K=G``eonW_B4biW{wK~8-6n=2f3b0
z*X-a at U>8c?+$Ai>nm+<MG&!!+?B~+NV{TapI0TWi&z=B&cvV at GY&iZWm(^oV?U|Iy
zciEL;XQS1eOE#Nx%BIEHg*2iYE1bxQ+)jZ%7-e$E)m*16hjYkM$-PNVDiu1OGHefd
zmo7(f6IeuIV{=f2;73m^b5IL4_l$A>2AAF1zH0Epx1{k(=(h&on|rF`_|IG7c_p~B
z;osz3SmQqw?XI#9&YMpTj`4fUydh16*o1NT{-&6&(){!7Eb`Pc-vV2k9AJ=)wCVFz
zv;nq7gJ_dCP{OhtWo^ZN-cI~N()Va$PdsQV*mu8e6Ms^B*xDq_+IqpBtKBPoV78vk
z at ndJ*vRz>Jnj<YLv2PeErb3qwfsA}uS<Nn|zJZ)LFCql%)8|wr_TP*Mp_{o-oOj|p
z?6Wwg^4MqzURFD~VokX_p at aCxOKuC`SCuZ=3Y!pRkQHc?B?r{qtc7wQ_N01GoY!P_
z7`-K880->L5LY^t>S0%DUu9QOz0$437d5t9x_4AJ`qWeM6cLLXCVQ9YJDR`r&+{%e
z#{A7S5w|Y-so*yxwqV${;TM8mDdxaL#9E3rQ97hTU4AWMDACn1HYI$OaD(|o`VM?O
zcs^o(vxGrBd``dnADp@}VoQL&l(q_TW71X3!xu~Qq3<WJ+a&rBC-7Iiz-5&pC=YP?
z3Ky#<bsn{>p93EJ4(QWW=+jq;d_iQ+vQ~B}<Y$ZrR)G9~e3><K!<HFWmf1_Vupb;z
z^hsF?V!od!+rTd3n^-C2uxv at 3DQev&*u8fnf0E6SIw+F4j##T at nl{8UwK_QZuJ$QO
z9PCT>;*FB&6;b8UvXnt*8Jlf`V>R$>>4+1~uIsFbT0J(et>11 at fcJM}43N3fTe}zQ
zu3Iot=j&82?hMT~G>uUE$ibUE2EM4Q+S6NIH1f`zDmUD8CDVGgptNi7EZR!;W#CeV
zKGoOBY4=j|fdyFz9k0jFw>qxej50r6VDuRS`<2(J8_dEsHGKuSLC%WvqCagNm*|(D
zFirVo!ck3YY4T!MSlpv$FzF`vW?K{i4@%;3?@96AQ;0E^%i~G;aV^@-4!aKO0PI?&
zbAJu4`xUmAX_!YMk>gv`ZOcz${Zu*#f9FEvFNhPlagWL3Egem9VfT<j(MiU-JjXK+
zN`{Q;l^pSDll%sqLV(S5g~h!KyxrZ|iz~xYFo#bHd*_wZ#g!vwWB-M)cgDqHeyk<;
zLS{yurR&PEy_hG!xn^<KWRLBYJRv?0b0+4xYF;g*HD49d=GaTpAIX1IAUM)o$ca<|
zPJz<mRG%*BNJAq+M$kCk*MIyk;_(ol;Qr(7Soc0ee^p`)17@;FAhyNOz`XmSO<Du{
z#3Dm0vG3|uK(0BaxrDx^g#2^Gm{`}@c;dw$Wy#v_UB}>u$&ort$F}x@{|<KGu!}8f
zUWYz(#dg(cjPPMzt~36}#{|2LP9^eyJ4%wns-<HU&gIAz(h^>NR+jG76hDh_cNa}T
zd4}OVTG*mH_o!&Zka~9kKbwkYYDKyB*dTjJ8dX(NtE|r3i?|Sd(rK)d$Wt@<MxC+r
zZQP%V`&A}Y0EtPk!%o#L&OdHtHR^>}Xw++|a$9NI`9Yo2bq+3w`xyFBO*K>AEIG|q
zF67Mal4+=K!xMeFLbJQuj{QSoyE3Hxs1Tol{q0vP&)nw}YAo*ZWN)V~oqWGRXG*F^
z_2%tm<|E(qZ)m%#@@Z5PWY^OXgTX~I3w<jaGKY8MW%yXG6&I4V%%>@yTG<tmPq4XV
zJA|dlj<0spwIkG6%ie=MY1r>F$^astKxcrDvX1x&|4}Vl=a!-Wc4uQf9dl|;w`xd}
zjQB%TW!<pZf%AWDPeq(PjN~;msy=d1RU&6htzOTopugodO~d*-iRAVzYr|S{2yLwN
zPBT0p<H~Of at ScM5bC-(mZp?b|M{;b)Yoc884%zqph4gJpUsKZW&uAfbEV3>`hHQnL
zaSHen at Z|H?1!-6p{P)M}woAP5tXgvaU?*e7wI7Ejht-Wp#y454>8#Dxy;Y%lXOy><
zJiD|IJYOgJ^`_gR-UPYJKC at 7cHn;)3sm=d=%zFk=Zvs!#M|X^>FV2!<HPEkiafNas
zYeAPeMam?DOyPZ=nJ+8Fm|Kc6FCNq-!*>EVWjn at dmn?<sLzhW~9)z-xW6+sS6{nZx
zO9l{KYLvk<Rz5=ee_ at B+++d1dH$FFr+*i5^=a$KVwevb_;Z3O;r}tTn6E+UQi&yM*
z4(n|jIJ)CzJ9WvW1-eOdh at M`IeU?irEoBRdEs*{pc2m9Yk={bNC|i>l_o?3Jk^9U^
z>G9qAeQu%;0$dOI6N#Q<o{*BQc-X&w38n?xMIQv@&56P>{snwH_=m}}^BmQ2HgMRT
zYB#|K9$yKpHtgg>qH%7jg77){4w#R5YN~fl=u@!ySP?@SYV|VwtM<&YH1p$)$elG%
zb->N5Cc4{IrS5^MB)2!VN3q7kKSB8ZGW%^h0(sVB+hN;x(ROwf`1*?!w^7&l=-JSL
zrf*#%yn!6fx~NO=WjKgU(;;nk0JHr)r^b1Y9mgd3EAv1WLTsy|Jt|(dsNV(+IS9VD
z`=L|v?(a;dUGikCH48PJJM-zT at yQf?OuW+bjmkSoIp`?FFV4aH;x%`ScRu+|w4qKD
z+xo{k<E~q<*T6rwwwql0IPCDSy|~?}R3BslCv?gJHr0^r(f8m>P%_gIcVY(zvs)l~
zqS~V;5^RNVNBI?rDf||;7V-^DA-mz1B{Br at lY@sC{#@ecXa9%)op37=I~DXmRrFL`
z6GgA4I8r{_274T7t98!uPdse~+oqsi2<%JRs6zy&XPyLKZ54gigLzqJg)add<dg|~
zG%e&g9^VTvQ>mw{-T3B%$0*>FifW at c^1P at vtnKYBGX8|vPGw^cA$G1ScOm4HAkm&1
zYMS>F?CXXmj}L>k`)}|w%vurI!fk*YfqZ6Nz_4Q-ZehWB{?!CvVt_Z%9WyrpJ5X~q
zIqV=}{*wZ-Sg-!R*-5xmiTx}}N$f7H4*r-Z;E$q+uMM13UGiCrUk*#~jtpI|yAS!i
zYR~q^jVH#3!tYcm`klHnwqBzQ;ABJ&6skz$z?g7REc8Xl_a5IId_^kQUEY9Rs>b#P
z(NQ1$hrIL#!3DlZuyz9BisO9X&z=|nj6EIX_jrIcA{bmLnFN1O|G>6jC>=4J3B?>k
zY%gC5QT&mEQT*3L1~$Ju)E_ at T{Ake+1D=_U+2!Zh9A!;o)^lm*BSVAD?++c=*!*0o
z`RY(_^f5CqhF%o7Z<p>gr7Zp2^xo2n%KPbVTPs_%<^r3x$tnQT9`Hqlu=G3PLot1P
z_n5|Mp0vILxgt!Bna at EUMy`lqC)}=7tJ~=XIT^=mRqO0~RBIa|Lhvkm<-PP4!Zq<+
zEXSF;mpWlnsD at 3Uy0C`i$Ixt_EY!x~`nVyy3%OCK$HV_wkxZMV%PO6_wgD?KzVg0i
zFEDh;kV9Ulh)l4BtiLTfev2$wO2+pVa?BLB#x-u&6J5YkoFo2RioqBK&%DQf%WSFJ
z`x5df!506<<g*pX2VQ54`C0lM^MK<J at 20NzTJ>ABJ)iiO5Gx`1clb~7O2p-YBUG5j
z?27QBS5 at oHU!%X&rf4_o1U0GeW}V%ye=8+A#uI&+OG=AUv at tbYs84%D2-)_x%Q$5<
zuy<Ac?NS>N0vV9=#L<9r-NmI4zX7m=PrNi8u}`Vco0<?q(T=!px4><6>qos*Pud7;
zY*UMB$gX(eho#ZBU6{KkY4y;r?1M4C!**~N`g9ZQm38>-E-(^(6S=HWPkgI1`0n<S
zZFM~F=3wLf^>3sfo at x_Rlige}wW-c{umSz`oI+pGvh=$-E{+SYu}vL10JfJ-Y)9xu
zi2ny=hT#0p at G6|I#PP>7hgRN7cZZuin23tQcRvR2Z82pXZqRkZPIN_gh}c<SPh~7t
zdn$bY$9$S(y9joJaPL$cUb?r!wDfD{ph-K_O>jMR$%8&%H!{dU2 at V#`P_<+mC7_?u
zQ7PJOST}kj^u$LC-R2|3eH;3G%v`QPvIhR5n0k6i48C~*lNd?j_bw8hW`Fe3pG%7p
zRM2G<=*RmMF3Fh4t^}3Osk-exvqaxId|pCOl$*<kZFj!t|8>Du-~VpB=X8=CHkd2K
zj)OM7!fjxVR_OW3iVw%+Wz>&hI3>o<URt0SMuvDY^tC`6#zB{)V*=^}-sO4BeT>~}
z#19JjqiseSa6U!A&dy~J7xi2k`({jG?1%NfO~aB}Feb0Vr`w8cn-0F$n;P`V5sDtk
zYDFLB*&VE2;fPJHcVAHymiWhj146~G*Ci)8%(vF-WNK5w-9(b7^4%UugH{i{;AFf~
zt4CkJHU>D>FCWKq??VUtSR!Y_P1>ZsgRtYHZ1&=D%KehnmcFiR^r^{nV2{s_2j3L>
z7i?i9S7-QPr(*%L!2h7=XHAODfbTR8{-3ydUn}g at u_K7B7qI~!!u~rY>1N&b6BF`-
z=rhQ#?p1f44wcqm{!kk(!v6m+ at bcVaGr>RnH|RAq_UDU!r9Qbg at _u~Of6r+=KSLV~
z`@%i=a~??MVV=C$=x)qS64)GI)VCi`me%mAh3K$T@?4bfm88DP at Ienr%n<aiUuDVU
zJu%;5tZyQ|;AmjYg;#Lh%X1zGE9m><u_oEGfjgMr+ytMNRi4G3#CyOc!LNsG)cs24
z)>a`})1wEkvhK{$f0plhRL3DTHs!7k^T}Pe^%v=1E8`BX=7788^sqhPIHzya9S)~V
zY>tl*G4gPl{dfg?cWZ_G?q@@+!&d5Unv_PjPNn@(K4r31Cz*5IF^KO&-zs`8qilze
z1DjA&x*f-QpwH<KJXZdXm7Hc6xZC#2VwrHUUo`NW!GW<|I0cTwhVqlX65{7BKS9c^
zOFpXG|2FCv{l9!_4&qZAH;1$-_^VUEFJ7m)4f$_9<ZplYFT2O(z^Atj=a-89 at DBM7
za7M&UmrB2e9v4^dRdX6XYg0h&;6ljV3}2^RXU_Xe4)fRmOTE|5*WT_O0AJ^%q!kY!
zi;%vKTuks$$&d^0J=h<{Fb7N0%=K!-;;(oQ;~TPwBy-RQ5yPREKSX)Q1B)654AfAb
z5uzb;#VKkbLp_Yn5&ej)^lOD<a5=u=eDa+Y4xH-)r$1>A<Qb`7hPr=}vhybLRS&x@
zt)ZKBi>T_l?LX$AexI11-*ubL(gx$(+|@4wCN<6|ey^0#%4%{fc0}VE3;ABD_+BBT
z?Vu~Cyj0JYlKxzI%dmH{5Fe~<!1uLO$L0Hi6R$I6^rwh_f2lt9A`|xZFzsV#zoQsq
zJ=h+>_F*i1e||$I3)RzkckJ1E-(Tb}{S$41m<GDl!O%V69V?7SJ3-HC)s;;yB<qTl
zuODmy2QD}>+=5rV at 1?QYbHGrVxnc0R=WKSfZ&B6=ANZrdgUfNuUeTT}V;mCjXll08
z%@wM0mstMrB<EnY+9f#*S#8FNFT7Q at ovbn6B;|da1x7Wof$kGySx1TT>pvvJ%ts&>
z)fcExcNzIs$eXBQ?sH1mH}v%anHT&I9!{grKkEPBuCN$-knhPkxKwi<SdW{=W8mja
zz&Kt?#<8ETQH3%f4>_A_yTLA?Oa(@KySW&D;}L(W3H$EAWAcprAcG_S34==?gy)ey
z5RH4Mo7KV`{6AVa67mmlf<s5-b72m)CO`$*BSDlsZmsXA+kR?6{srxm6>i#AafWts
z!(e-o8{T7)>+JJQbTed<9(ED>>@#!}=ElxS^_qv#d76tm!EGJw at in{QYj%H?n`9SY
z3uRZ<d)2PgoJV_meAcu0GeUa&ZJdJ)zUD5wi0<)0KmT at 8qoF&Oj)JV+=aWW!#;1%s
zH}Jj(t*|2!&KLMt*g_uMRq&x}iOjUvg=e@%%!O<W{3iOVFgOK%^JGncJR8?(9<`Ub
zd2qaTwtSjK!p@~__>Qp0l4tq(3gZyhe|dx=Du;epF$KJQ!~A at ucNH(P8^~OX`7;G^
zk2#t#SSO!?JrRC>#j7nZ({9MHA*e5KYGu#L4i<j<(<dMZ+JJA4*!|exmyX0<jG0hp
zG~S1u#RqFbJ at MZ{o(#kOam*FBkoSoEAF5k^7`Tq#<-f(^H#oVzBQ`DOJ9Zd&5lC!l
zDcb)Zz{^do5H2Q~-n}?u$aidEWBVmCt`KJvF_Ijotd+9eWbD~X5LZaPEpQCS at jfTs
z_i$V?nQ!Jer9N|Pn^b(m%(ShL#hCH18QHjyVYhX_?^JEX{G=w&XYY}E{Le8xBh53W
zVOKd;DKoAnV;Z at HyWrm^Ytwwp!zp(^qe2fnP1l>$;huSTr8p0t!<>6foQL(8hY^>K
zdH4>FwUBvu>{QHUCFr9o&Go<o*B2yXzZ7F-6+5n9E*B&N#oWQ)5?`HcHO`NuE}-q5
zT)uW&JY)+g^T+%#BaO at -U@21$9YpGn?Er2V=Gm2yk54PB6Vfnlbd(A0R88iRA#a^n
zV}d^G{R at 32WqwRSopI->8EKeD!8gMy${N_Y7_(=h+>*?7wSofNp~}gH5kcVlYS2d1
zefjku at D<JQ|D>>o-9Z1ClH!py&c!9|$Gb`YuEh3wbP(EhI_&(&71p^FHo&(;x#I}r
zj$`bsm`Zk->BQ0s=&kdUkmq!$k30^2q5^ArM#b5Sv#DmYX4h@$c$8b=BM at J&2QNgK
zkn^WE;m)JEi^!}5ze?sT)6J!)ZEkzIvYN|9`F<ri!yuzgft;`PJ{US2y8hG9^#h^n
zZ}~&l?^B&}zo*J{KdZ`dhpQ|dSLdF9-GHj$Ce-^j{{!oZucf_}*n1xnIUWimhnXp;
z<1XoI+7xLuIFTDQ2aJgySJldBcglSDr9*Mw<D{*q9_ek(DP!U%$B0ZubP<9{40xGY
z01oAMCD(wFUn%Cm*p7AOAp9No2%eLb;`bQ*r@)d*Ukke#9Sgla7qWBuqjTENbTbt_
z9L5RN;fd*j?X=@&w)Qh=r#3_eTbf-CeGWKh<dfMDomuhT(ywEC{*WbuT^w at KNIDAD
z3sp?$(qLejiM;t0)kkDv5?>{$f}Jf^n=EZq_mbSdUEqIT`W2B$5zmxPw#?t8-;lOv
zH2#QtPj68OsAKFt6;JrYh#c;QUG4#58BvaZ_YMAw;x^=Z8nV}KgMkkcbq4gcDA*!$
zU^7HH&&hJJA5U`Sa5uPA@(#)g-2wV;p_}9}{lW+xVQ-SaLEh-hp}K*u=;%!5+~Ar%
z0Icg3lzq5pFVd6vf9NE5ew|VF6uW^5jn2V1_!)MA9fYHNsJ|?k<YY;}982Cqo{K!{
zD|IKJi&yU1K4|zOUs?B(UyL8T-tw_AVhiv;LrY<^)yj%3e5=OuJnA)4zw&b)+zK#q
z83u<uf$EfH<2yg2pvd?3eU0ksFCQ(-qQKXVc8K`&Az3qh`A6Rm-)yMi0%>>W+<LDc
zCLs?L{68FrYfeMwz_kH~nb1-tWE!=0$)k25*LNw!XV5bE(}-^ja`tDW{=l3PzPv7W
z1HoUy4mho}3;Ko?KGG`@fzTC#)~SW5bQH(IKeXLf3%lVJ-3Z8RiC9+|*aoMpV}z+k
z7l1P(w9feEUm at e)ls1GP?T<0JfS9vYu=^lp4fZ)h#o?^{iubaZ%KH@@><p0sm8Ol)
zJ0kQab_<`|b`}PiYuk>JSPRH$Q%+gGTSadsu}P9)$n~5A{m2iwWwJ*9-F$Aet?`A?
z|1e)2-E2NG`jWYG^hNyFlU$lvXQ(E#X3R^HZH1wTl?(M(F%04+TW!kGzuF2$+h8Z{
z)Dmtw;1osOeJ?QXi6$Yd<dF`~|48W{>G1XR;^DvR^18acp*-GkE9+_KZEx^acA at EP
zRx!aZRtQ<kVTV;y4%h{N9p`tGGSnHvk4Uc~ZsmeU-^^lAr<LZ0l_K7Gr~|qtbTd<T
z#=i-^nK8+c+pkMm(UMinFcKPV;Fr(||E^m|R9b<T)NmWLN3S8bILhaSjlqrYPUpd{
zC^?35mU?i)k!r+E-y-^Fe;XE{%^Br>Vy8hny4_PmJ&oj`S|Cq- at f&HR8u%&7O7i%!
zdi0-r;5<*~UTI8_T;>R;!N+gchQ*b+*=b?pjc=9r0Ta|PDOsBW{N<I3I9gW{tO+BW
zR!jGoge8Ya97!yZ#jjQCkDswE7=2#UJym>11blb?76!UHvya%Cvhqp1#prYRZ^9hZ
zO`egp3P04NG52yie#ngq?&J&-W1+ZhR*wF~Hg)vR at Z%i>XJe-s`?6eeeWi0p{P{t4
zl at 56S%7;7RA^U$Q=E0r_f2WmPhxhzaf^UwwrjtBJHrLdWwTj$_agzK5dEa#@UD>)L
z-n)s`;9k7nru;4xxz)sdGPeNl8VkG`Lu?t62Id^GV>FEs?HKK>3gaX6C0CvCi_f at Z
z=KX3F4Qv`Y$1v4#`}%DhUnC$Vw<QZ>#*KM2E1%4N)C2r35W7bf`^fGwCc$I(7=6xT
z_ZWSa*gdieVfWAzyT|A=#O{$bir760UC1T3sdEp*5bRvX8(2G$&&WmAp?Z^$aS?s%
z7}33O?ikJiyPR=}2`|O_GmtwEV`-yVIVJ(^(;S^zQIS<Zu2FZ&z-??QNCLJR&v~`-
ze%2_{&5UDYeT6)|4e}P|wTwH%E9<s5VxB~K1Lt%~zxHuqe|ep;bq%)55Z4X7U-|vP
z=}C^dv`IgsPyJ?_I%ZihxTZ6j8OFAJ%re*se$zb(+Xunu%nmyM9p*P2>kyC4-fBhO
z at NMu3_h2lQMsVme%aU%?siw9@&oDdBf)B=&^F)VKV8W$eZ3Q2X_O$dsMN7sdMW-%<
zlvm>rw|A(T*o`z-w|)O1ZX^1}2C;9TkAoBKFviXpalH=rZ=y&ZH78=Rqo}}`E~x~v
z6hk$k4#+QwSdS@)CI1LplGkY_w&+`svjohCHtiE(Kg27E4enFKgg~}Xd17W^dqeIs
z>1lr}iSL1a#gO;|$_>B8!3ba2iK=Z*;YH;)=wG$@`bteE?35`aezalp0$~c>(`KhT
zlN9w{1<0#*>%*;`!V>C6!Wm#2Gco@>A#zrnl+MF*m*U(~<X&JF2Zt?!d_R&3k*83@
z#j at 8JP729%HRhxrANi6LO85vMe*`+i>uXhOw^iVmnTPurMLXt#^TdA1<=4~9r})<M
z9?gH$d08%wuM~06zd|;!N;=4YT=%V}$rw>~6Yp6oPr*EhccXnnVB_i(fbACEfIg8-
zuOnqB_$8`Ep^S25YNM`*w#z)?S15lOxyx1yQv4nRwq-W4fiogT96nLxEEhS07yE->
zWC>(C^pi^bzTx!HOXDy<AjW>l7p6-~?$ma<bHJe&<kMtg%)PpiqedgwE9Qzoir{$7
z%0LRS;X^{>bPmFKzGM&9w_x)oQ%-47-p0yX%reL*Un;+BObE0_JUK#PJ{g!KhwKsX
ze&ziodf1b{#5Khgrn?_gwZj8-R~?uGb at 0#IGx-LVX|8AY#MvE>(KlX9Mn1csOl$xA
zIMTKtaG`BLU at Cbxr#F4O<PP|ZG&K%GnzZD5by8n(;8^VegV`}DJ+rff(+u>)UcrVs
zE?^=Tw6Y+7TuJ_Gxx7J0dyW&1fg5fE?L-`MuPm3(7r=cf6!7zeS+;RPqAgj_W1O&}
z&3vq=Gp$|U5fZ8UW+$-JTpDmL4%=Uam0NKi-Hde<Hgwt!yYQ3pw{2I1WrWup{+#XR
ztH_PkM*K;f3%t5+s!K6zS&>&0-3N^5ckJu0lWTs=+W;Hb+(u_{F7!-~9%>f~5&Np9
zJ#h#k7W at 1|c?RxVR_|rL4({k#TX7Be`O`^G1nj>;-DpYW&ysiPR7o~2%{EWSBgeO*
zUWkQ&ZW$3`NpdJi8Ekf8C3s&``DV=2XW48|S=hdMub=jghyrH3Cu%O=DWnkn7I^Ui
zWG#cOG8Oo)Z2Er1H2yf5!y^1hY at 4<Kn1 at Jd55C`2)En6I#!k(3;~ns+rt)WSt&Iz!
zx72N~Owp+{ozVFnpid)@pkL%GImrK#Pq}LKqC82-=0P4xO(Hn$yPR6n4jG-~8fuM+
z7v(sLEzn$u$raCoqaX6dG_03jV9iY|?c}(pqhwQ>ooss2L$V&S#o9*F9{4W35h1`p
z&qP}w4+gj=7lZ3*xPLlrP`p`E6rD_Wu|=8=jB&&Ym2zHblW%Y#F%xC+;BUDAo|jjc
zX|d_dT=2RW9IAKC(wLZPPDNF7uqQNLFXa5wM4Rwk$bchlQv;_(6e%t=7C$#qi040f
zWhP{XWr=sd%UJ6O=5Ltt{#K~tR~5CqNjnz4y7fmkg|8P1EoSg8xxhc~(D~Y$gq1Py
zS>?xr*8({%SLvgnH=j-})T4Yo+=b{H1J9H?*@BqytX*@BlxdIZ at 0%r8VjPklQr<GR
z`z_!V=2A`Iw*E2p3~gYYDCc)4Y{2JV7fv;{2WM}_7Tkr&VGe(5quZ4WE&^5MCk)AN
zc8u9UbRao$<p5j$J(o-7Xzi;+&Ltcijm477m~(ZNdf-gc_y$Kje<eB_G3D8D?K>IT
z at bVN5aOmZol`5Zy5htOGX2aH}q7CxYo8Sff^tv$3ldlBp!-wkN0JY%c-TDdBo#1zI
z2}&BaUE1-+xyrRD3w#VC6qTd+)#H>*kUW_e*c9ZsQ`7a}qwIq(qLsbeIKh=Rv>NtL
zJ8%eesKGp;k;J#cAI=ha`Ym9XriH!t3ghj7f4>3Tbf>}nX45`pZf6&S{SaC-1bijl
z7Q)Mi=a$uN-x05vg|$RqT15Ilgm>8vb|t|<Nj^1INW6xv$ZOYz4YZmblTMkCNfnqL
ze`?;uRE;D59F;Chq0};U0LyjpPL at GDmKL$_A>RYzE6Q&_vagf4EYv~W2rkCP4TsZ$
zSlD<v35ROw9r$uX5I6Qr;DU-%bl<5dgRHM7R0vCcOgcv9y5||p)hFp+MVVn0j-NoA
zM)5;r!1CCY%^QS0-jTBO{DQB-!Fe^u^zM at MA+_MS87$A_cLW$ydeWa)^|8oZ&kb8y
zB)z+`OP)HQrsRMnx8*xBcTgd0D&i)QAJldv(9IgFZxrh*QkG<MQLqd4fCHn?tO<0n
zg~TqE)LFVQb^!dUAvorS|L?!-5x2J_5ueBPXz+x=4$&?cray!|^}AQHwV#ih4!dCy
z`clx``&_y<7&7?#T#9yv)SI$N?t?qCsIWv57<O<R@~yNe_yXK_16x+6h7JELk-Ngq
z;{R5iYLyEy4R_^;>y*~S{7|7rK8BIXYG8$e$@54KwIwY?uMV6>WF7b{rHzxH8wuM)
zyP&mnI1>w9kV_1)>St>ldHf;aasJ<mS&%i9>ny at lTbuA4<*o?fch(tOF8ep(o)E}X
z&yjTzKB$Ydp)nf$Uxof3$*&gUOXBz)kZn9V*8H&NNxqQA%<v|}J2ylOM17gkqR=8@
zE72W?E`F5Q9bU;KenD%yJ|fc4sJQ42f7JTM1Q{)xgSk)Bf6hxh=hc5MK$g*eoDq-H
z{m1<?10&tk<M7A5rEQialQEmWoan$qo_{eO{5VY!gM%Bi$;fd5eMGswun00?Ma5(M
zPQ*d93j=Jmf)8cwE~2}3YQcB(*1sJkMH=VJYLd$ZxePKa=AL99i%gy9B)S5wX)wNZ
z at Xyx}zl%*SUNc*~<}c;bUDSL$`z6u;ZLnQkKZ&#%;`+ZhwZg{=Y at iK%A3ujBy%3l8
zSK!pAFrPv8yRN$m4E7+q?|}j4hp?Yw&W3!Pg0 at XOTES)yXu^FunF+RuYG4Jxt*M8e
zkRQw|*koIj at WQF*0#t834D+7cQ<2ZRPRRDTP0$t8Pk<9rHRFIWZg;0KZo5_XCjBd$
zL470I*sZV!&I~&PIZ6+CN)Q6+PS^?$N&od}m9VJ)dj^r*d}Q2eEK!{HGsG^NN!}`x
zcCtfS-OpcO2zwEDjr at op?KbG^`L4(Kt857^u)`CD#>IiR8$(Tpv2N-k*x_?bPvc%I
zxc>T}ORs_r`puU*W6#7)tTTT2Gi<neGIkK}_%CeRU{C$|pn@;|zsCf892(fAG~n?{
zL*G|wXT&}M890PGh_w!O32iWWj&4CxC$^QSXCt=X0h=nsJ`Oo-0uwHgm%7^2Jh6G5
zm2)V+0(m_#7RRZnOPCkVL=@4X(XrakV9RZnR%6~dtZ<m034BwQOYEGG>4U1<i(x16
zt4(sv-JtypWp00EI+HyvPD=w9b>;sWiv%y#m>GC8Qzs?9y)vmze1}z9U6>=!wCxsN
zu(b<ksM_vyx{E%aK7>;NC#M9zWhU%W&?&f~=<hEm4|?$H#O6Z!8n~!31Da~%*6afg
zVJo|#R=q3 at vc+u3^nqoo1p{!=8sMB%<;?->nZGb!nOC#hQHRhZNA(5%xUA at u!T!1C
zhM?y^M~)dQI}u}F0#4I{=}ziD1lLyHjP|Lc7g3=EFI_7u+gF?_?W&fQ{nI4-!0UwN
z at vg>?18>6KzR4luZ6_`~-o<=vS=y<99Q*@)2HZD>OkJ5%Sm*;gBYz0kv7f*r;S}E1
z?1#<zkZS{v at ncrN7Thkp{iy=i5iGz at 7|*<XM%fNw(a~-4*=Y9{M2z!J_(w3-+22I_
z<|xva|I}yW%g~3Fwd5UW>qcPT!P!IJ1$*TZE!I$exjX}NQ!^Roi^;sYY(z57Ez*Xt
z87S-EfKA5JWh53JYvOKObdLCKt>e_Njb_~LttJ at LrPBXIc$0OKei-3Rhnn(tyBCH$
zF+AX}r`)G=NZZm6k-K3V$0 at fdlxXLX(AQGvhi|{6ak9C?%OVEj{ej_RPV7v{Q+^4Z
z$#ad8ehB&E5c20e<W_oN{#tY)Q>$~fwe!yZx!znq2K at zVf>-+HR$+Eh8~XS4=q$4K
zV7*b4eZj_|oU_sefub$=cC}CEP%deWb{n^h$pkMV;)}3G1pzBJ3*!Ur#OdKn#ySIg
zovp>dBVT6B58OyHrj*qrZXWF&%_WmHMjMRv-i~`dk>1vR#sxRKUC1qx at pDqAxgc;V
z;cpPP87HhnK3#I9@<w`H<wxlU;qU*iasSap`7o3>UQs2yfH998eUP1iCm8)V_&-`p
zl%g-_2#(jvQ*d1%^uHx!ErbsU_0Icdl?#2zM%Kf~|6Nx8_p*|;F%@g=Yb4j9Hl%-C
z!Y=wh*2rGy&cT1kf#7)}eV`$~h#ro4X`3h)=8%48`0<fkC^HOgf)B_EPM_b1echD{
zJAnMZ+nMyy!3ESqe1n_Ptrp%fmwEs at z3^JfWI+KRtRmfWuFe=5hj}m`vNh40f#s;D
zON*gTfg3{Hr#yDK{&lzN_jQ*Gd)|{vi`ZBo6HT)mbR<*V(%Yo0%bvvZY=jE}&;FY1
z*X{LgBz8JUhi3O5bz1h!?{ymbd!0^_I=M5EEBE%F>b26-f1sy3xJ=TnVn1?-zJM(3
z>*qY!6UX=I3J at bRO@TOJ>Q|491N(9j=F2`Zp32?hGKoLqzvkVGo_V*wU2>qi2f?;Z
z)=!RLazs2%56WCPSsmLaO98f?;BdBKUEDzZD9zJ`px>@U-&g?|1z3^vZJG1NHtJ?3
z^+N9LLtnW8IkydKL9KcT=KNU5s#DOXLa>d+HWb^b*am`&IRo>B0srUV|42Mzc at kok
z`R^(e^lb|AmOcph-OHF?feps<8n|rj4A~QwrS?=DXSOneR#Q##hyaIig7iD&#ttF=
z6nrzZCDxK7*nhs#`NPMRtv`H3o4ARTLGl~gYl)P^TT~*~M+%9x5ME^J$$W|L)`aa(
zc-J!My{*C}ockH?I!_BNZhjShC3Qx<mh?6MZ>cViU1%)1{!~bj=qKNdwL=&Io)2(4
zI5`8Zt0euSSVM4vf{L$&PSV9rz}m8snRYTO$%=WQ3v-GaSQD2iZmk3RPE*`Khe_q<
zaKzIs{uabaOk+RCJbfkNB=nU$*dk{zCego>f_*Kpo_<)HRKza3rd{gLE*YCG+KdJ0
zr}Yv);@e^Nd3bAJ8?+Li&gjBF`E(E?LTt{4vnFkb1G%{uBVXJmhbEy at GR&Lce+iyw
zSTy6Yh1!>6U0(~n+_|TKQ(%}nW1xljGX}n at xnX>@tc|>Xl%{{32n05O$sdAes=?KT
zJUbdY@!v=q>V21h54X;^;y>WG*av<KHFQ69|NBU6kxTkyzny=^qq_YI+}g~(KlwwR
zAiAP|T4|AF3c)-cuO5&FeApMBoDECAfURgTb3)P(QyqIQW_+D-b2jqA96@{EMcyFi
zU}9gL1K#2M!x!wUFeiIqTY&8pY>N)J3V&&?6%s86Z{`DAuKM>iZ}902+64dgUohuS
z0p at R2e;tD>4lmh5<hR0^9=ojJ9(Tde8vQ-ut)|p_9ScaJ{cj$w6845UFgFZ{O^-3f
z9)Ulc<RCQ`KZSe(utVoB_P<H&rHcEovD{-1;rAXXU)bU3x%lQUXnF^)B)B`n&+;9G
zGl`4^zqS_dy99r{6L^Aq>~Yv-vgoDa{Z7$;ABEU~?U)ySmfVkNft<Ao^XpVnMwA0_
z+L+^Ch*1+h;>RBp&O~lq<fh3l-l^h&LEl7t`io%0V8P+vf$NvV0yhX<T`KZI)R!Wz
zsrcrf-j8)(?Eg1Vw%;J5k=#r-F-P2hoe)?Y)a7|>3*h(tl`>(BA4mMuYRGr@*cWiT
zFb3EwV%IYK%1zW<guHoO9LKZ7alaYQ1YZk(7VA|L?zIxXF?kO#8+WjF+^7iWJEVDd
z&MZ7HhddAONg`MsWp(<Z=hpV?$KWxeHWK`<c<+KFg5kO$d7}Tm5kzj||AqH7lK$CZ
zhK>G7$aRT0zZB1%jqM`n?KNV|*9nv#b6U*zL at yNOo|W*W?g_ghau{7Moary$AD!{D
z@;|N%{~m&NIwxZ9J`u5Z(RUN0+G2z2eXqSiFpW&BWTd&iFj>SlUgLmk{H~Y{j2MpR
zeGS`eCNPt?PPlt_V9qeI-RQp#`4mkH*#cKT5PnBLj}LR9=#yExkKA|I1<=TF!k+-2
zsO{jcvYYUMn)YlT^3;iGL%O8V%6l!U&F-73-HuDiyB$_=;=qOp8J}QNJmW6oB5ZLS
zY-Vx$I^Z9W_itBl8#OJc&qdud;PQ5pIum{>OJ9J8n~3;phd_p at lpF>|ueRTx0l(=r
z@~w#<<8~Ez({X$QGuNTyU5&ZT!4d`Psl at qgZ-LnC`rlP7aZsVeM*&~qM)Nbo?=fbD
zej?W1+=_QH%&>=Q#>^)=+*hqUI7O45(+4S#&uVn at IM@b{oD8Uyr3ci&#@LPPlHLx)
zSZu=kZ-L7pMeAPzA92Q|dbfPN0(q_cB17|am7X^8eelRn+ at 5^OT(|we>U_PzE|xKQ
zh*g$1#EShsyRL#ft2<hK7zuf?MwJ3*vk}J&HDS2t>*!>L<Y9OcK9m)DJ#_A*KV7e+
zHqE>ca6v|F7|NtkkiDXe*=E^{3jsgNlmS-u0P at -$#J7MxlyM8T(Upk1N{Ma9nAD&?
zu!)aJFwY#5B>fuotO|2uUOOk-dH5gpBI2h*Tf(1YpH;bGN1S(LUR&js9dU;@*rx%H
zC*$j22Toy(Pk0Sa&2zmDUI@`|n at 6vY7!F^{Cehb2LG&YqYu94FKrY+S=R(sbw2nXy
z5|pJ~$er_(sDmv4_b_8>$+$J_HYp1iqV=!a{+$E$O)yU)SUS?y!1K(eq~O(S|4qdB
zL?ZT|93%do#!cceCBf5)ZF5#WZDK3CtjaBiZTY0id|p_<J97W3>FGb_6pt0)*pFj>
z$PH$Iiy3`3L1DU-am<6S!@C#4&(MSI0&E|GL&eu;Ra6`C>BU;>eQ&l<PKh7$4luj0
zeQv4Yi2pGT^4zb;pPD?SkNu$DJ?BQ!rGwY`%kZy;u%FfY?yW{Wnkxk4!|bzb>bufU
z693q9Z~eD_Y+{>jCj4V*@Q<Z$?GlpsF8Ie>z-Rx4V;$nL*;}s*iLrv at 4d9Q*fV;yF
z at 64R>P>cu8z<Bss*@U)kmX~Odr*~YroIM;Duv=rn{_5yiX2&D{8RqzI%wK&iv*`OR
z&GZB5-?gNVEsstKdw}ntlOacz_&tJSCa_KQUWX2e93crJx6iGLvsthsnK*EY#_w{N
z81Q}Rk2g!EnCq7&EBAvtC=_%4yT~UIa<D63kNt9g6T#cip^^r&-q-uSQHmIYVG5y6
zb-xp_YQJE9=?p`zS0ZCz>@{E=v4y<}JkBty*9t#vj%kO7bE|vNFUGAN%tbHic^+fq
zB4Q>E%1VK|fWOo4H6p+K33CCP<&fT_+lXI={GnGye?jD^RaZrhyF|zVS!grxH+s$1
zU at cm;jl7 at u?nRsou#`i1^1QXcK$zl;+5aT*wphPPulhSlj0I$vqm1c);4VJ?>60<f
z{%`Et)@2x9Noe!qx|x{s+F at ga9Sgeh?)}}61 at zFjXJOxg<B)NMAnd#P$JNq$uip;*
z?%#P=^zS^sz5~xfZdk-^0tbgRzxxl29A!X^@K}tyg`67w@)Ew^lEY5>Uo<1gTGhX<
zlC`-I^5XHG@!~p5=Huq*%$Tm&5wr<8Pryrxe%}E+-e_QqFz+2o#4~&}gLIc?Uq|dQ
z%KQ7eD)g_bKmBQ4J^uT;+VE&yWs-5-8G at Jd_&NCP at F`TXz(t7jM<}&HTvrYJ4c(#H
z*Zx$WBGl)d=w%f8ioTh&p*|?=QZ$SCDT}lf(Vfli{4=HS?Vt`Bf2u<h>fo=qhgkJq
z<b1cpzK8g(d#KZH%&$hhfHnxz2b1*}b7)@JVNrJ-hq^5hW43L;J=f!X?XW))-nhH)
z at B9n>Bvbs3%OS`4BTr8Ow%)*|udF^_qJlgW!XRJQ@|V5}0^Z5Pxq6|RS?G=cu42id
zBs28qYRUTQYsD&hJ!IFffGtjD3(38R7rPm-DY`J`0nxpD{UIN7sNcw~PIfFa9&sjT
zSYQh);1?ir132tkg+$^fgYGjHHj4~xsdOcHqynw&%Qn#axry}3h+)89kA;jeB4!8C
zg~W0buDr~cUH@$_D30~$;HY~v!9l?`kU{JLWKMw(v=05q$CR1zGxR2`!(PRv`LJDg
z%7%$+MW20fl$(54Vh14ea25-U#Z0uRTAb?%9=v^=8n%up1UC&iQ$4{gSx;<pVTg$z
zcDru-4+PKbq_fC5O=p72!{LJR0<SnGf#4FKeD$RxwQ*ZTjC1R5=<T;PPK?E;`fUXF
zvED;&2%OgVpx=)EAIv%2?-;+D(6GY;?K;n#QhM(XjNfh5HFt?h?xvAnb!WQGRU!Ur
zU6tv;`(<LT%SRlE+OUSao8bQ1-ziK7Zm)yrZ}ePd0nxkdusiKh at uk50`FfwidDS}S
zU?1_A0ex(QF>aG{uvD|(822$5cf<dT2W)>*!~;5UJQ(_?Rk-l!1!0<{qgBiswd at 4y
z_zuApLZ<eE4nc6x7sTfk;+t&1b at 86}NUKF15i!Q4dqf<f>R$vGeP6sb{!cc6ew&i?
zHQa9leo<*@ze%to4m?NC8?G7nD?9ak?Lh;dhplydp|xH3nb-%Q=fn|=dVHr#Pv1p(
z%aO+ebw(exA?|K=k^}Q2VlH4iC{$Vq_J~VI-`Owv;1`k at F@IOH)vlU-&(l`_KYK!9
zIt%Pxs|LCt#_E$_dD_<vTQG;%Pdwj(v9-zHMR1qEHHQ6BcYG6YAFjM#XPh_IgTs8c
zli0$<@?bnYHdJ$ujH}0xyZrxWBk8w|IHjGM7W7x^xS6PTwrFF!5)Dj><UaK)vBeS0
z(vp_KbkSDuvo^%v^{5QwxrOP#H7NaE7z2l3kNE?G2>EyP3K0W!$Xg)%&6umSgikhW
zBy`iDiusxpaE&C;k>;7B2eCCnSJZ8PZ(-x)(Q_cT&Lr>Dq?qPsRaJhJ)lNm>_%ssV
zmUWtmAvOV#A6`{)Sd*gsPYQH^tS^|ir2!-lHPazi^1Fq3=A9|o&`lo8cT0m$S!;@5
zGoA+y at T~lcQh(^WkYn+DA*+h{SUnv6&*V}2C5cHlBczqLir%ZdT(myAHZvHy`xi`y
zgk}(Tf_TG3?33IVIn1`PO6|Fn42<odaPS8Mk9U{EGmTy<*#g}<9qVK}=Geb$-$@xh
z#|d7$Ch&F<eKi;M$)}~yAig*I(Q()oZrR$)cY)_R%i^|yZ|0{A{NINEITm*_a84(c
zqF=TX7%C^RgTS9~T9U{$MM$@{+b`o?Rno2!9J4894tZ?l<&;y at rV7NrQ+mEhm<O%}
zcfBw7S4E#>(%Ai*;%EnOj}F8<|55KrXd4aMfaIRmK;E6ecS|PmRzWlT?<QtYukNV1
zsb?H;N*c5E?Hp{g%+}fekFz(AYwFtG#=!|Nk~n}2ky<sD(sGMfBvQQ&6-3k;5)vXI
zh)P1L)|vx3AXTKTwzgG>wIH{(Eu}crrh{piI#^T`i%8=Dq)IhX2b|3zBoRe;pM8S2
z_kO?c`^WG1M?UA|jQi}p_TFo){j6t^E#dfz3prd$WBz)P`U1M+_29(~9$PM|?!(8E
z3*B}$-f2U8iNgnTnOP#}!n(PO)RTGPFXpV4X?GXSiK&KPe|Or2Y4=k&!YjzF(og%9
zS*SF1E at xWV3GD@SE<IIWqdn1l?Qy8JQ+sSep7>l7uxR);rFwR4#j$K)ZXZBK2+nKX
z6s7z5#J95K2=c0(ME!QMzMFaf;k#imv{gRk9SSkxaSn)B9Bp@!`j7y9tov(vz?Pc)
zJjpMi0B16MKSIbZ_Lua5^QSOKvFaKv&+MU>DIVd!C`h^LHl3Ks(CNT3C}4x65_=Hk
zx&>L6k=!!CO{GU1sx?fU;we*UIDV=yQWwFC)wxV8H_x!R>@j~l_{EkHIYXN&SnR4a
z5^KunC;eSwe8<iBE;9Bj#Nd1(c!*@geqAQ9djeo=asKY#^$@%`7nqKpR^z%$1Y6ts
zF^A#%q94$TTR5Hx|Hp&i#VQ4^`yxC at wMdhScg*295wjrjg&y>0vFOpj`Gbg`DX-Es
zwOCgQy28g0yq~(B(wT0g-UB{91AXW#(k~mlQ_ra;@qa*mtFPZF30_QMC{_14{@{s<
zE3;@X2(LFMOkUKSH+gZqAL1M(lM!QEh_zrr7wL<sm8ds4`8M?*kxA%h!0Te2_cZ}x
z at s4QXc{I3cYFDceSE~J%#WhPwy~IO@)m{e%4D&bY0Co$vlN^WtO{}rNE<Fg_J&Auz
zeU$Lmy588#w4*M#qZQZOaw&QQn|lcje6`{~`U80m5Ao}~pWJnCOT<2MfFLKTi<V<d
z*bdoxi^LR9p0;l6s+Rxar`M at xi0AOe28V=Rp>rf(R7DlOo7ED%QAGGR#gaDUsJo9C
zZkJuhyI(FVd{+Z53UEH#%Vk~bHL^x?hcseMxjMpifJSb5I at eCF`*v^PJ7R05qhRC+
z-6E at S6X68qHzJ=pP1*u|b_F<#mxHT#1^I9KB(+rX9V0DTSzB>sEA-zZ)<J at -35db{
zYzO8P^b4+uj9sc<Q<g#pUu^BPPtNTwkHz~#&XGJi;5)nBe};lQecs at 4=`6OTqzxn9
zK>IzHavqq>_tBQQy9yCQjC0#uOdRBHyYZ%C0gv&KRl58WD_tep5#A at Ii(DtAO~CX*
z$I3w20!Z1^rOYvIp1qsbgXc|y-E*RD-}W0+CG?ar7LObclDk^{32Co0QjSX`-R2xG
z+wa(%e1Ne?Zgy=;Uf126_`JPeoB+Qj+N~93*rDEzzCYFchJf%59Dyt#XA-aVr1ZA^
zq;$=>zqd^&&ms%j?KxZ at 0nVv`?|>draWW8N^9C}1r|u%M_t)1yN(%-2-=XWwDXe4`
zn||5zq2x#6XF5o!W`_G2dlX87&)4?T=_g$Fd;k7_mDnKm>nPWU>N40Qa}5F#`%|dE
z+K7uuY1c5xM^yH%29Hmk<Dn01eT1=gVEoliM_hgnm8Pg}j<}EjePdmnyfD+y{oWD7
zsj_;M`$c{P%J(7o65=pV?F_BL_G;e+j2TWcZ=qfCyk8{!3(s_cH~+e3UYSdK1Y7`;
zoHNkhJU%%=zV)}qZoPu?=Ti}nu!dZdvXs+>GJb(~Oa+(vOg?acsXMV=oCdt`?Q>q)
z&j3r9$R7I`?G}kKyXXJw+(6#HIfBFybE^2Cs<1w)`jm`=G;}fh5_f%3m7>RNY|AqB
zx`azaj}jCJUMWAL__G!9q>$en^=$J*9NRd!+MFdQK$)HHGK>2D<38Ju(xPE?p+!Sb
zcb%J5ueJs*<vd24Ps1FU4ZCzCI8>J68Xc(z+Fw1JmcX_`zvfNDHU##Pqcz<r&+W!~
z1kqpD&XqNIpW6rhei?k-X|Q>e>TiwGcggxgFY;Tu9!mMf;4LGlg>h!rhf1 at ndv54m
z=<+={|8PN^*=ds^CdrBW=LZ3kH6R<wMN&L_Yw&CuIVCYyk~$cWW!MH+m^Hks!B3ex
zH%h_LH6QPt>(ye69pVZf+}Or7Sljx(fjlXw@(llwHr~tr{mt<g5=maH{KU{>crO!d
zHxo{VHk(uhdy&_d=co2D(%W4q*JJ2Pu5MzxDZQLH*K3r%=TajUvLrp^OiW^9FC$fS
z*CdKuS!biJ^HM|a#Rs^@juD at 6khiYE<6oZ>Il4xC%-0sg1zqlta#xb$mG5&Np<WT=
zL*z(=xe)cazE$2$d~54Dy`&9rE(+iMmCu*)_nU(zhtZU|<Z&AE&OBu<W;PEdd3=7X
z(*1r$vsY5{?fxPcB>~UxNsh&*=ExS?GSi+tc2#r5FphubKhv3S_i_9J6ER*z@)8lh
zxt~enJjAnypq+DK(xJ=1uO-$5{aRb`Wg9zpwgT5ebpP5`xpOgWyO)VfacbQ1$Z6$_
zgFL2^F#v6`UGK6T!MA>l>pvN2Gr4vhE4R1~?}_@)@pbncT=T!iN>j^?7lhX_R^B3G
zCFLF~dlU;WMq- at w*Z#e&l2*E=VI7QJhn)Mje#w#I{g+zPyCtpbE<;Y4KT-CjC_8X~
z|5<jyU#7}EA1=B-P=9BuRAXO9zEjMNzQxV*3salZe?MXUkK9?%TYL9>$o4TB{Y>Zc
z2HFd2c|IE?--+9Rb#O|4a?jO*tlEm}5_T*^4oa-`!S^f3;%7IwdcYr%`bj9(01I^B
zDLV~6TPLgErY&iQJ=7-1hhCO`VQTHyGea;>lUNS#JE53YTZsP~<97 at 3yJF4fmA}h@
z^@O9Imj8NIH+dG3uOAR2R%^Jno|X>iSEQW~r}-!m`nDrGDnm;Cdpe1|5tE4bv=O^Q
zpo1RRyXQ8m$3<cPLFxx&ea!f=;uvt1<5YWMmT|0DcOhKl)%d<^sE-Y_6xi=f)Uhu2
zILS at JjKdsvOdWPk%Dd*)C9_$KyZI%7CfEy at 2|w#G#?SLK))#J;lekL12^-V at n9xJ}
zSt}XD+N3!rJf at pCeb)kzR}kyG>CFw!H=^*1!8=edvNa^W3)~%u!vIFe(me0NKdN-V
zUB&4i*XXp~<@B3A`N>oVpM$kYl1D50U`)24Kxh3y5c+L}p7CfcrxfpKnwxzh*6?j|
z8+0b`*tMj-UV7A=bm1R$5<S{q5E_|_<LmHCZE$KEp##Z=T#Es>xnc`hPe6IZ_~n)}
z+O5DlOQ6dpxz{!nTktFyFAy9Fj^IpO{|=ECwBb7(A^O4(wT8)kF^F4Bje~#aEj&LB
zd_(U;UUx(1I0gTwJji62q3uB|s*CwrH8xlte~y#~HhvrM#CNABs*h`=s<F*J<Hv+9
zGyQADK~g49M?j(mczwm==CJWR{uE$<ld<OYRJ at mfV2lydq}Vc0mc)VmEvx#$SDoS3
z|2&d{Gt6Fu$EZVE;o2<S?WFLFkiO$ID+HQaL-<J+Z-9IlX!B6~-oUrK#lIVWFCm%D
z>Gv06Pfjq(kasn^7x(dlUa*CGkabh@;mmokBQcLaZ-6|iBl#26xv-bpSle<7zS~Rv
z7RH}zo^nYWp7}Gr^_j?Y_!GW_?;w5?I4W3~e at 3uSy(H!pp~ED#_QlM_+Lub-pD{UT
z`qVV_Pl-vA3ZiouGXgJ at z8w4r*vfXu`cBrK3ayn5{SCjL1q;|`ZNUDa$n*y1hWvQM
zf(aJK#By%pn}mX;sH6K>=aDp>7kr8H;1h!Gn_FA4`XN=>;Ndq9xfUu`w`ze$_FK;-
z#}8}$8hpC<a7$}t!)8#$>LrozgDridvC}54cSXj*XXUP+UgQg8vQCTa39k-zCfpDn
z%a;jbVJn0}@0 at hV(`+-w34wWA>l7p!#fmqFkHztchdg;*=D!3JbyeuE`{TQXi3-Q;
z<l$ps=MM==FiTPs&2OzeZ8o-^HcRd$23o>BPzP(x^}UJaA1=dx8t&KNTz|z}X-^!e
zpS9po^UL;!j*fMCQKxkx-oH|?q1o%gKdhq#qJcIu^G}d9XV`sPM)d(3^N8>;2Bw*8
zdy0-Q%tm(|3UU+fTc-*(%%022#0DZK)|XH5Y7PIqM(Q*Yv1f|=sLvY%@_z$$1O9f!
zAMyPI at jx&5Vl5dzr*F5(V^2{z^TRjm9*`W~#2=D&thN8KIvevie02)d$3&M}`?UE)
zURuy{Bfa^f4x(G>#`IzPz^HqXY=K+RU(d+63C_)+9lXKN`Qy}^Yb*Ym#D5x?8ENs?
zwA}RI^%vBeY4B+B;e&9$$FmE3<o|^WNSi|P>rAr1k5EHZm9J2Wz%5JWLmtcHkF|&$
zv&ZO;3}L)X?<rn4{h?SxxQzrS;d|*&zCz;6Cf;#K_1DcuCuKm_oZ7s~`^A*jn9|@C
ztQ~LxIw>8z0<mK&z*V>sYc+F_-^O<pxPLNxYAbH)f>$8$uUmfv_GCLP;e8%H2IE~Z
z-lgGKnimP`t&)lNBa at 6hX{XB1DCabIC!OKk!228VJ8qsj=^w-glm;J=J0C`Qd0J7q
zQ7Mv?lRi?lLA8ote2ISuHg}H_w%+~4<sC|KIir*ieeDCpHB7YUA&y3wWOg|*hx~4^
zc5eEL>OqWTU&eg+Vv}*LlK5nSJBE#^L at rEa8hq_i)dF^2OW at rIr$x4b`mmDvV0{`d
zP0Ao+p>hGrkp=l21l->_$w6?44fu}6)FY;DHoHE5ZUT6KOb_tQ at L34z-9C#+>&P51
zf1TTBq0kVYg`oa_`Yf7Ze=0?uX9IGOLuqMd7yl_mchJ`y;tPhqZ4&$y at P91y)l<b0
zz2c`Dyrst^-_bPuL_g5b+j!N%9}pW6I8C;!tz{h|w~iFNg7_VXyidH1_nyj^5t~Y2
z=ESN;(eRTgMXIA570*ay3pUSu;+KHz^gG~}P^@wLC6uDS{SpUfa{BPBJH#&mIr{gv
z2CvA~Ll at fzzr<1Em$=(X>I!v6DK6po5AaLef&3_N-ADiSOTfObHGH(Yw&M31>*$Gh
z_&*M`cMfu}$iT}Fe?`ko_$%D^)&1?Sn0UwSuYjB!CUS!J<PjMm?*tY+L2wd%VO_1^
z9~U`Ne5bU*$4+Erv50AwpWjGqEyZfu1)m0D{w5->Z&C(gGHs;IQP&xWwE|8L<=G&z
zk$02%wiK}}wbHNt5%UeoTwxv^yaIFIYpC<&gE49UQXLKF>q~7HNZql%i-&IC1?q|T
zE_&FuZ3)PR-#!EO at HoWgPa*cOo9nw@`m at U{o##A|e8h2FsxC1|zlUv7)S8ea%%!Em
z9QGS92P#EE_(iDUIClj)lQ%aFx_2tDNu-}Y#QY-FSBvE#odk=(bVZVDKZBj>!%;o4
zL)?Am?h7c71Z5Sg4jE&)F7!>iBS3#0F$hP{e>yiw`FZG1{l?gJ_zn9jB^uW*0~cl-
z`fl12n}^s52Pb2!>tvRJKVcf~O~rMwxJE(x<lC;iWbDT^HgFBZj<Pmv`i8n`)NSii
zYt2rkaoS@|Na)o?%MhOe-(uTp;bT60a!Q5U=0M$d(`kzCgtWm<euR*+W=(XUoK7Qc
z?l;m!q|B~7KU^<2w{=PJJ^#<KfDbN(+r1fC@%EZ at y-Of(v`0##9`jO>!!IuM9xaQh
zL|fk at TvVif!}$?3u)(tMAmS%Ry>f(I{F$gv9+{i*zE|Sy2}`j?1+F}DALf4(u|F_|
z_OtuR>QRQ7MUN7eaV+8_PEGI_;bUUk(n*S=hMC)Y|L1YR8$t&5)St}>-cu8n4UDxr
zLaXEbgpbL1jN_3hV^xD{E52gyWqrf2`ys3MPzQG-C7z^j--VuqI6=r8e9G=IW8xj)
zlLWZt4*DcyA?r2%#E8l%6dC6ftp??Lh*d(l7odD4#K)wr?}*YLO+Z|JX)N0>?j$Tz
zp9q!^nE_|+#E7aXa&j*jryIP*?b&n&a4Tu2h`!Bnq7NZnJmv_-DR=(U63MT?Jsyn=
zQvVL0)zer*tz%rgBV)&CYEY&N=<n^waa7NLZ(yDeFgGksRP7*Zi^}z8*LekE01KL2
z%(&*2j22@}h!;2pM>b&$`?)b{e?PXruGeuM8lnojIm^oI)JU~5e7xup@*n#WAL_UJ
z_31(Krc$PtV*-YzhTjjLj`YiO0x^m4#@tjwwwTLHFkcoEd;3TiqXaLO-#S~6d?<<0
z3E*#lo~#5Xp>%CP5b!*{z>5QyT&>laJ`oEzt%wKe5+-w6z}4ky-!Jl-y%9W!(tR%l
zpM at S6yw(wfe4^UjuziWHU8282tt7Sv`4&|Yu#YDAmyZXD&kdnenumgSaQvwnmn*r|
z#$Bo|n_Vs%O!yS}$WLM0EgB&xN#F|V$i1+25(K|i>GXB{58Qf(a($4U=mpC497~2w
zZ4N(awp>dyHY&A2r}Ib7 at A64ByQukyU8Gf)8{>vLvJBLNM%mEE?(4uSGH<ZSyl~>V
z#@L|_o&q^;UqhQlaV=VZd}|c^O)HS2Z#VkFACUW3*c=<9W9Hy}d4q}UU7!#@gt=o1
zm9EZ at RKmVk4u1Vaa*kWiOyC^}Flok;_Vy9*J~xgec_7O_L>m|1RRqoh2jc<ALt7-|
z7W{M21ttRbF|i$E<CVKhsRwv|dsURaj<h%T25h=aF9z!oCj37{uc_(0zYKK}$gwoW
ze#FW|UNQK at 15~5=0ffs^|A3jxJ4)gi=}que25=bIg4HQ26c6ci{P$N2Q&y1sRns~w
z`bzSQ;2h)4y??5nlM|etALj<1 at esKms_I<&NAM}N1%HZP4zHSDgLscJv}-Y`2h2h1
zk;Bn#Km35a67_CbX7jP``u&rM=d>-eo!T63a(D>uQMf<wQDS{5vr^%pK3+8iHjNhJ
zTe~r?v_}(&7}sZs?b;mc(3%vA5dBtW#jsxrs*k7{@j38~D!PqNk6~u5Mu<+{5t<3(
z!Pl+56{+-an$Mywvf2OWj}tFUpM&vtJ$NFdrH_m<V*5^PPmprHS|6o8)FI}X5 at a=&
z+shPIW`e%z&_weU>)9Q%foF5%m#m!~w6wl>$$|D*#(-D@{|49DS4D$5IuQ3&tiX6@
zcHLZxF&zAt_-;H)k7sdyYm6;<OzVW*jj^Tuz!$V3Cg*YRr=*|hyBL4)z(7S*u2)&X
zY102lOZJ0)p1ufvCx5k{K*aXPX at XbS{yAMR7xCA{WPbs;3?LsVEDrrRJ7&=ehTerZ
zy1l^U?fbj_jbm#`evb;+a8<^YU)zIUWOc@|1G4-JczpW8{S$uXx9B^yn}dFyGRE`)
z>et1rB=ybRVd~hn#U$9ah4v at 8moUF-!5anLjTeFbenj6zfdzDx{2XElTU`&ye3KV%
zr_!+=@+oi&{y0YF)I9i=#o&;qRkJxVP7Cd)_G3ozzz2yj5B1M~%Uso+2o8C-te8md
zUgOwe^a+eFmD#0K<+gZ6Rw!rU34WA^c;W`{j}py09ZF6cBj(kI4-JeD4)PL~$9ixa
zCwLC-h1bq#TQs)Oy3DQ(pP3~$eR#9*p0b!E9%A?XMeN)(Gq3^mvZqSdeA>7|f7Lkl
z0N%HDRv=^pa&VOIum6%-N$NpPVwlz&#asKA-t>f?vn4QPHC;!gtIh_0p!$it)0jBh
z$x}pZH%fU;{0LrY%Bvhle3E1j(bG*EgI-8n4ZW>08+;SIX~<zedko?fN|ffa&3S at -
zGvYYa%^L*!U=LIT2eJBjO!FGSo^XHYW5Z0J?(aYyv=A-<Ni9{P-)g%K&VrrlVR=>H
zK^i*a(uNW*Ms+&mMeYsL)%Gb(E|;IVo0(^JIdsTrR*mgE$W+u|=M*Kj)0T8$ocu1I
zrpP*8TVOKX$<GYJ7>@ovi1>>H`wC<daCw++DTYCgXU5wdvApXk=@|R`UWkTW{5v?T
zdXN|45}PYehx`m1-|qnbw$UJc#}vFI;wU&%tt8GbWd(g1b at g4!O4V5^iLQe#F2r at m
zaoq`0pX at pb?0AeN#6M)^Q&<m7k9c`+?2E39O{*>jidUVdwV8IrtXU|TmoqOp^l0!B
z#K10&I8|Hm?fl>+9GB1M at J%2G3fl0Tb)|1Y_!z}mu|{-Byj)!tnFZa1^&MdSKsmfE
zU&gj|o9xRM>J$D%T)+ZiSK}GIYGti-&tvmZ-vrj?S+)f24Znsoh9PqH;g)QncqN{v
ze)2rbcN<0BY8l2k#BPwX6K-Lyid%zn4L3^nTYx%LcchuSdX&2{rV*KWXJX1q!l^vA
zQ2b at C16-s`xEEvtoNPq)sEd*s!7I at BUPV7af7$!F=&WEd)&{?S@=o?%1LUdG5sUkB
zBRs>$@NB^psaN>w7i0 at -E0(54LQi?-DmYq$wz+JwW|uKNK7iy^ri+d5D at P*7=|}4I
z?0aebF-nUvjKLb#MvTYZ*_P%Q$Y7XYZ*#!;m!X3k9q1cp$auko@{Z1euZ#O0u}$tD
zG*6tk8^2QD?okc!D}c`kvN9dND6EGXC_l*d4`xNX2xFhate9xR+MOJ7w|7b^I24x4
zACbNonFhZf>X*9%<HJnJ_uw^R{RP;EtR0L|3ZP at 1inj5Ap;i9A>alz7oVd0|S$5IU
ztv?GLTf?*?*WR&hrOa{lnFY$VmNouZH>AxKDN?V*gg?E+<~Js8!@FLOTGmv<Olkh1
zLpxSu%-sDZ_<k?FlGb#BnL>@p^D|$kGl08Xg#J;Atp?j2*sfyj|0w8>F9I7#^vKr*
z?EF3Pbz(aOcVmq+8FC`S{_h<5;)|HSe>eW9H1l>+6z>O0oN}e-8ND;#;bmi<(f4U&
zUI($gr8(|(8r!Ry5U(AY!oV`YkLI>(gUtJ{{bj!HN;L0RB~HzOJ+{QC_O&l;$rhRy
z?tnjpH;a+-rZBO*33<t+Z%bCyyjFIxd?-&7M*(wVxY?;SP+!DT5ufdqZuc&Y9pR02
zjEiy9j2|*oA>V7p4gNLH-*ju&kEVyae&Xck>3}WBP$gr$x*Qj2ZtEBvRFgTRy+LbO
zo1Fhov!z*NcCMJm_0I!7_ugi-hYm6O$q`=$h><TTHuTG&WyrC&X+%zfF61wxw7ox}
zTXCK$&Q+~ZHFe&*Nj+*7z8PVRDt+22+3`H}17sTd&po{e_ at M@m>k}JYHiOzaMnayU
z>C0-JW?8)_<V&OOouozGitFG_v<TBYqci53i|w}ErIZeHn#BE{YdFUrAJIeNKvNW^
z_i}zAoJa#@p`%-k(u)4Qv0QKDMA!y-+nI-Tdqt$_WKPj=Z)3$Ek1?rOKisV8;_Way
z>3Is+aoa98=e`-io73#d4+RdUu&J|4hrDkY=2FMz=5EIX&PCqRrt7)g;2#-`*w1-n
zOy$*>a<^?UN=xii4xT?;{R_%<j-OSKGcbRBq1n5E_~&wbWf)gE at H2~BolIVK4*FOr
z^pg8yB;cbv1<sd^qJARJVo9^>ZaUWCz~95)DftOlk^ZVzwBEcy(FF^Z0jna9&IeYZ
z7UMIyzZv^)&`Qh?oa~%h!zaKOd~Zek#ZUZIjb$C1TKng!A`Y9Ru3qT;_7chWJH;8$
z<6p~d60dA_T|~YoTV})&lhi=YU%+_O89pY$!zV>@5bIwzebOWc7wU2`Hbk}g$g!V;
zaf0|G$05hsnA^;mGwx@{$g$6m=TwmA^fxDTL)Y|k!H#nHB#}0W=;6N_+QZuV8`Qrb
zFXv5gT^&z2Y5JFf)8Ktp51kbJ1_O0=aFC4TKopdIyQgSSAl69ClG2Z`ep3;Nwfu)u
zO%K;yg3fV{eQsaykkCH(p}-A4aT`?$4iWJ0 at O7cbFb;e4=t7|nJu?jTgdB0C{=p%E
zu_pLUQeR|z(!w5tOiMX6<bLsTU at Ai_o!L>m5~@vN#CU$2_?6&Sy;ECpJKy^9gq?)X
zl9nwwH$8>t#9Hw!#krwQGRIZLcDcqN$70~Tawa`8{tn_Tud&xJF2c9rediPpkh`}v
zXerh=QUzM8WWr81KQ{dM>5<vF=BX2Q68 at X?QN&L<0lZmw4(+xz%#sOh1ph>G{c?uj
z8VWh at TJi3)t(Sq9LHWoxlm95o$dGeJX#hjG;fSvj<9`iPjPdbJbtv%sw}5fFmHAb3
zu_Jw67j#hjtmK5dK8mIj3gBeI{a{bp8a$5A4~nKPVs7#qXz$@9F6+fGW59=QJ**i1
z-C}|_nmAitJR!PDsy~i0V(vA6Mf6L`LVQygt3MO<<6Hwd$Ic6%f$xjV51*+Ikz*(y
z>;vP67sg}kFUJ`FFQO|NKTOw=Zznu<uq{&yXm&16eS#ayhP^=ie8_KG!tskt=J=zY
zEe7OrgOBPod<@h1%Sj9{d0vC}s=JLYJMnP=Ym=_y2vN^1sQWhbk;Uv<Q-XlnAmiIJ
z5|R6}75?9=cs~tW?t!|VKNR=OQ4{~=H{@DP$$%|B{zZcE?MTmEbuJL{M%oAO&0i#i
zpIY}yKWuJWKK#b%xp>ZLeA{YK5Z-w%60(dr at dfzG7e~h9e(n4&&9h6ohi54qx-9S_
z42`s{Q3Ypb?0D at AY@V;7?|`dz!cJgqT7%MtTd-b4*5p4NuETSM#0LqSw5<0Joldu(
zIy=x-Pn91 at kCfC98LF9C<|qeN4LmnHs7t(Mj!wM}F&7=AyyUqKp&tA#+Yq17`;gQL
z;aN at B65l@h*V(|BXay@*4-{uP-M~&of<K}N?fEn1FKMxkp0LxpazdL?J)ZCk6Pw~!
zV?YJQIwJpQJE9W}#0I77)b(hiE5SUR(*bWqY==Ze*Kj}1Si}q at A%?mVwughNiur0#
z>jrv=1$MPxgNI=j at -o17?T9T}X*jmE9z6F>CbqC=?rDPAGhYEuW~W_|`_LG=sGtAa
z>>p|?-u245B)sk+&bO2GTe&)HE1wQ~C(95L$p0;D%iv^n-h#M|-6_j>o0eE+-0+Y!
zxO$%>u{1kugiqYyi86l%9jFxgNDg!m?*>=D4mb&^#6Y-a5C`CT^eVQ{^(cQ5hc{@}
zlj|N`D#*dUE8M%lN&Moq(k<_z4>aC9#j6<=g*mTE^T4{W^z~8xnnxP~sO$~7WNraZ
zR5Ie-m84&gaY#~)^^Q|mix at k`AGi~LU=7#t*mcoxe_#&RA=WlWV=wrx<KP2WY%R4<
z4xIn({%!t&iPqBX?Sb=wT?ZzX^?65!`&(P=lY=t9-OHYD+1?(Mc|`|Ke~fM6z^N^Y
z<5;f6=^x?uFd=R?Fgf_8l6&#(GKrz~>!A<b-}ax!ylVeGM%GFqWW=|h^ENm^WEexG
zX5>Z#cVc=-C$No=kbm`I_{l~K&b7gAa55?S>&#O3+5{7)2bP3<KXN4OB=5lX!-4G%
zcI)aOTzt8-i7ElFl#cMXAtolQ$+fJdKvyL@?OG++gs}eE)g90C{_<*V at cvYgEwyI-
zI_AY>PHUA)e**T^LX&RumJ|>2o+XGyDjbV=0)OZR3*jp|VT$wG@=rPay&zfjTFM^{
zuBJlwdz<!=t)x1f4<Fb#vd=?(N@}mc=R)f5_fPCR at EsjQUW&oZsY55Z_uo#(z5x5b
z9*`D(n_vM4Qi#Rn>J!rL^F?<PT5)Wg#bw_l%*At at Pvod;{eQ{Pz;TSr!yCM(jQg*1
zj`&5Ja?l?S#I4Dv2U!}tXTBBR?<s?=K0MzsNZ#PGO^LY?w<w#oO1``oelngRxfZZ)
zdlBO<=DwG?G_5vc&SA2OG3Q7|L=&86)-F;%#-6NVjwRi1LUsCB at HBbiyQdwDp^q8g
z*ZFZQsIP3qN`h;7M at +cC@Fo2J9z5oCq9DlmC-4h_Qx0?I;cKD#tNi7tE4lu9LeTJB
z%sp38Uc`V;+moW^?k4$MhP5_oAQKr{X`>ul2_tO`btGFRXvZ}MIObSJGEoGFpq?I%
z{Pf6;W5aV35o_JeY-8WyhyP>n8;##6eld>svUcPj2|=5jW24JrnGbd&w+!StUSqFH
z)h<Flpa<NRS4(jHxN9f$7p}SV4MFpePh-Bt)xXE<5z2ZT<IFYiSLNm{#l0H$xks_=
zIg?<+tGn?H!l0L}e{sJKs^g6`yAq_hE)&<qTU<SrUQRsY7 at lzznEBE?o#IOQT<u`Z
zILd@$jsw!S>+)m+*C$(C&T;PR^YXwKF%s=e;#;eUZ=>ikes{>X+Lmxe(~{xDK0bup
zVTecAtz*WkD}&z&JqmfMJ|KOwB4s7yDFE-^5qcQM?jDeCp>ch``}{ir*za at iZ+VP;
za4w!nN?8v3vH|aN`|%#}pThpgZKyBs^!b<Rm;mqv`CE at tST{VA+CHB$VEuI+^7N>z
zk+#=b<F6$muVtqCW&Uo+%cm0LGDIC9UyG}l{yuyh&&px*nBe~@Nga_>vxFn&z>c6h
z2d>*G%tf8p4oKf$mC$NhpSY4dM~!?Y$ZaTnZ+~;@sQH*1;P2o$sVbnoN$zR7RsTKg
z;w;kEmBbcK$ObOszB^~p`<M4>;af^F+w(*?-v#^p8shP<0<TW|nb&yGTaYKR7<nR#
zIgg;j)M#m*KUIqSIl3~~kjN8sfp_MlRAevL>9?JfnJx0m7=v5FHeoF~=cL^1!tsKC
zAO9olSNK}rz}z6 at 7ZOfGlAlV{>yYZtgFmPrTqkAfMD=#m_f?{gp^rt9zDE^@*@J%$
zdv{7YS*I8gDGv>cGsb=3Y8L(OFOVBMvUaMc^E=dGu=CP285l!*!(KK at w~oOWn(o#|
z!<@lCBR_O%(+QhO{jw=`^A`DaYbRAXVS`))+zsX`lqVPVI1?~O!w`7|4{P!OCv%l&
zE4P}e;htmbbI9!O at DSBT<fdvIJ4*8qzRS+ at OTm#gH@<goEbsA at L~t(5Qgi{!Vd5lb
zPa}EExNjj2YnIpPQ8G<G8_PVapc`uiHs4*q)yCX(^^yFgG3sx?^YY1F>6@@W$$y-i
zg*CFw04?H9KFgEkJ{B0*`&_=eKHGwG=tB#5J>W4cs4DGbWP!-Hq2S>=rumL7$kF=q
z{IpuOe)rFngX`A1sxxr)t3L$6?`e$P{|J0;f5oH&)4ptp9XO`lSjRw_(9XL^{x<D4
zlx25b_Bv+}css~>@;x*-#?VHel%k9{_6eVd??S$SKKTF1f1KM5tn9H>=Mbke-OK5-
zOySMmC(WLAB^2k-&!fNDdWDjCj=dSHcV>QrT+-h_zIH)3ehIwzh)KcNxH){BTi(0F
zITnsbXagC`F#c>MJm1W0E3nAwN;(PqzUtSJuWBP31J6T$9*O?EP`Cm8!E`|SE}d}R
zeeA(>VV?Wgdyxt4?qkj(p$2_=M#3fZX~JVM0$idE at IA}*1~R``M~~tm$CK{>ue`&k
ze#!;k6J&CfFED1mf<t<MJNUi-CwK5aS-wSjdaYsJsmLVY<mSN#pv3w)IHkc0jGSz2
zj*f0>s^lQcYn&#*+Ix16dG)A*4jFGpM;z}%D!I~SOtfC7qSQm=9%a|5DPc~W+e!2v
z at Hd};53vpLGv~nTdzMZN`WgF|rX(8Av$2qG?6}{&YVzAuP9=%??I!WP^1~C>$U~3|
z7cp$9*-tok36JNJ`_|DrUZSJceiRg6Xrbl>Rv1PU^@7u at A3hYkr?3lLp5_Tj=r_j(
z?-Kk-?q%1DI$l49SeK1#+{$z4&*y3l;wH~ltmhiUr>LmebZ}lse|p at 63ZqQam$5NK
zpFV$rAl<XT*%U|en#skHax!<qrk&N`9f9~laL*DR;77h~;4wW6t_Xg1tDBEI?1TpE
z)~_E4+o}mBd1;LuuOC&fKy2F at xf;i9VaLtSjl|qMay8*QSQ{#-0>|jen0d45lX4N(
zct@@Vw__3+kD4`ypSiMz$28HKQHJEaNOm2M)9dTR7)Wwtq^aAQ(+|%8Zu1d1Z+iK(
zsrT29!GE0k>=-<sjoHGuA!GTNg|l*+<XbIxw at VkL*J0gHz{r|}jDh>7c1)N#M#<fz
zn>MHoe0}RWzEgA}?^*vL4;y#w>)=sv^8*b{{zrW|cMtks4dUHJv%A7WIDMur{T5&{
z5EmTwZpU1`6PV(wj1vEqh;>|qJhREjD=$XBlxF*(Z~FNPXGb^5yx4MJ?C#g;xCiC0
zi7vD6^AuhA`+YniVnN;Su<^EdipzE~Qi%z&=eLm_{1h<cqcD#6`O0R4106EIaHNa!
ztFchZ!F>kh_~D*1_MJJtQgAT5N#care!KhM{q{FuE)6>b{nkmiqY0lhWF7fVcox`m
zVp?ZHUMj3%tlaSua#LL`SMlVS7j8nwzI;WcH)HN7#P1FK*5}jUWjLl72i<8#IO4OI
z5vB(zu=B&mnLbGY2QoN_p+6CxVCV?(>iTd#ws8&Klb_}YF^<W>8#u;1bz}xO3Ig~6
zk?8Z!L|`osu`rYG at tcLnt%!ag!k94H;<D`%YB5e2p at U{5{OLaS=%8?u`&iMcgi8b0
z-4SkN$Br`?I}YRi#TYxz6B~Up{2y#AYtKO4If%Rv8{W+Y4%u!cvYp*B$3i$7d4B0?
z-fxJ(>LHvP9ijSu$Pwg`itu%1w=^yCvOr!lrpM0GQ8g19s5RCHl!C;OLf=qUb(5TZ
z+ at x$Ny);|uD=q)<^}}-!2do8tAGpt at tUm6|n?w8p?)lAkI`Rz4Hf0Syt^N%;-xR96
zf-e5EbGs2E$Jgpa!<i`kCSe-OQ6xt!ZEyKVUb#S#Qwfe4Z at N{{VxLR6?&sU`ft&!Z
zXW4V#C~nLB!*coWhtY&nM{Y59zLB`?Ecov&+ at JN=7?J)g;}`VRA)R)-w+<K_11FbV
zm#UrJ4;?ikd>nA at Io2d<5V(als$XNdRcOpN;6%ZC<{kM9L4<SVxO|<yg-SPfYLT1d
zbp!BL3!6KyrK{HB+;8$#;GSL`wvA7NFI5-Th+|dqHNa&BU=5AnvqoZ at hV3Y9mo=T}
zkhOO*i$c0IB%XE*VujOj|LCx4BmIG0KGxjkN(`$s%HFekHsD-pST&Q&doXa$=}Ih6
z0fTTAc?_ at d-`kMk#^vR-hWq8tuTqsch9WPt&jY+eURX=%BsHFiyffiXiLMT8d+o?$
z?3u_v6z)@y?Kx+#)AO)mi02$nvc2j7{=)F53U5$4Q6GDaC%J|_H{{7ZKF{IVi5uWk
z!dATDiq9nCgPP5tkHY6SGJ{?OIXjBAQ4zi|6=S2V+0_9~_}3dTUd-XW4ZhD+;bVvI
zYQFvK7&|zy$@qqCCAKelB!b`U*8(PdB-#eJ-{<WF=SK}@*P6oc%mwvb)H1Bsi(w;#
zAqI=^K!u at B7h7YQ#pFHspN)KlOThUCS!U;CtKLps#PL5crvC3ZY?d!7d^FAl<C>BB
zN^m#hI_!_bc46+v!3BD7M`~?!rF#B=&!jZV&~)OAY`r$z57&!u-ICmIF-G5Fy!5xZ
zN$UA^Qf+XR>U#&SubC^6{90}SzS at C!>h-D at sTViV@wa)WueC!z9#1%%Ki!G70OuDa
zzOJ}e)e2MWhW_|hqkE~!=1xy#^v1YXn>&Z5#WZ<JBqpraGvHVLlYCodcpxV_t+}h`
zZ=Pp-JIb?B^`dd?_x)_X&wNP*H_2Re9T-&jdP-5IZnn$?DDx)u#9%2nz~%Z2D0e&e
z33fM%_zl0elURS~Qsyg(yy_nf)aL|$e*7Ri#(o6ca2;Fs(VVW7%m$D9p3oIl)^7L)
zDmhZrT at Y*M)z(P2egT{8Gw4Sczu5hc$@tYX7+lEDxW})Q42)attj at C^I!~!K02mGA
zNzg{K{;9pqs|KB-b`an4pi|&_sG}=Q?`>R1a!w3tHlHo8X?}jtkNDN%w;%ZBtLCFW
z8Q~+nZT at SYJ)qRIbi>%pUc=07SPMi<%PR`R?~yI%MLM;tl;RtiV`}wWJgXXh%ZCA_
znGSjf?dpi)?Kew)YT*BDda%)-#U5S9|6}wb{11WtulU*P-?=R40Uw at +>Ey<B?wk(I
zF(_-)2iIqVf7E>~rwi{mMOP{M!AJ67<2rXf2fEUY1sIU4J=T>!8N-nmP+S76WqgUe
zId4#HcrJWf4y^B`3~Hu}x4|YxxmTCJb!_w;OEA^o{hp`k;l|fV9v$RfYbN^<2d!EA
z>}eMwY{(Od_}L*RkjsGiBhhqW1N;Ji)uaB_l6)sk*9q6hd%%ipd>vS+4EWN7oNnN(
zu9LEoayKUo!dgYoYIofi+W9ub*+>gXylDq=Dac9Q*y9Hy8c2Q|$WckHq40P)bQSns
zJ!vug_`sXEbK<DKgf4$xTtag9LTAg(mSg^b|9^5lN6GmuWqH|EW;oGncf3efLw-1r
zr8$^iqSTdm-fe<=fed9pFa84aAhDANCs;8LE`c0HvAQ;nZEjCEZ|wR0U&2jRN&5y|
zTR|`4v?d%^A6jq;&xBozm_3(Gi|2X*f1HK#`*YjCXOaOd%_VRYpVp3j<=k9<-dD9>
zYQ-p<`D7|$0_9DX=Kc$H{N;$lIEMTb<9Oc0K16H~Y)H(zhfS}hHnH)%n6LDm1S8>F
zLa<ob4*33Qn)r5x=IfAKpv~=n9I?q$w#hM=U?@vq8!sd0i4T%v0S88PEfikNoiyoh
zsmmjd;d$R6Ci6N6{zDR%D!vx+PKtj_jd*#3$Hk?jo+7rur)l9A6YML#Gm7Qt`ij_`
z_=Y-S&%i(5b1!yAjo2S~dcXFZ6wW6&K#l`-R7$>K`xj(g<)eS#9um9qD`K|kDqSPi
z<R at nkjw-~;yX*v;x!o<dZruyteqt`+*xW}+^0LFd5kEe1N%vf=siOSg0bk)|kbd4d
z=T9C3J+Y_O at IfV6X9Cxl&Fc*2y at kNL5FWIJ$Ypf~ztaU2 at OZ{4;@S3ax*$i8yeY?1
zwz3oc$y?%X<S7)jc6Pi%@bchFP=QaDVAr}MoRJ4O7R-m=hYyV?QeE@!Cu=EVN-~E6
zXC{XqbQS!*ef)JC*a6z-sHpfW{ODF!H at K)ij58tjoWz at 3k&~UaFtonD)^Kb2w<>U7
zCv!?EIoAJ3T<Nh{Q=yaGCl~?eIO1DJY?~G_Zh!_;IV5HcoG_HRtyk)0s!?mbjr6}<
z<!TQe?_|g>-olXT4SxIzqjXYV=DeGGsYT{0#{_(HuG#g^H1o9_vaiM5PvQG5q&}fb
z?g)(Q;PYCCwIY8;9Ok;kVZZUe6J0_1*F?s-c?%p0)b;53Y<zX<356YP))x64>Vv`Y
zQA;@Fzb}KbH?gtg^6%lhb^8(Ujt1f at M0-oWu8*06IIr$CErD at Z*O<8k_}~d;SX(1;
zXg$b9BMAqmHXnFkqPr12J9Rl^035w6KhInuH^^l+Q`C`wd<!>`kGi&EZxpbFT^wbD
zNBb?hpI|o8PcjkDRY&?vLW>Y_99|I%l7-#yw_IN&BXTJ0=Fg%L(}s7jYbTR4V$e5u
zt%zMd?Ac22#Y_<J#p5j=*~RKK!fTc>=llMWh7gy}s`%dmc4?}75*4R`PbF=ff;GG&
zh}qKsyX>-EK>Z;enwx<9Mu%CfL%UC|2xBnmw`9DTtP&u0DD?#NQ;Fg(u&j1)5p at 7}
zdWG%VCrJBCYJv64gFd_tao`z*(<hLug$xsobMq9DXTfIN?rs}fJkj~7O7!J3)aX2#
zUqkvg^s0gW;pSHefgRX2I5J(mocNsB=gQBy7{u<gYYKko`=>YobTVv>J-pNW>ftSJ
zpW6rN7zfubsRu4)F~+g!k~+eZ0H4o at bYMZ;7(u!-Wd%F`5}zCy7yVg3BN;2Zp7<Hx
zE at f>C9P53SorguNU-1IQ5BL=m{!kxU(hiJ`KmLydhCw0d=cq!fXk84+^HGT3cG!e&
zK67c4%f48>1?~JC>Yq=>op68fAb=M^`!C4XuK8CH>lr;g7TCZQ7(+{uFF=f#ls3g<
za7kibMjVtyVTZr#s36^q*Clf#;+oMu0>~a4JJ-AC7UUy}#K3U^s)}viRa at ZmZ7Fiq
zT*Wtb44PcijV<%`sG4Kg9`-zf*b)bckwZR`ZYE`S6r;c#<3HyCooDP&+%!&56q|0X
zsKWjoy#FrIT?MZouC<cJ`U(6<*REOg<o-Wk51qdT&S3bQ?eIN!fj_*C#7JW<pN at O-
z2rkV0(j*J51Wu`e?o2qrj;mW)-Sed<ZNhOSw4*LbeIgGunYa47gaz*Qd9(CM`}FM!
zJxpvmwk`g2w*{ReM67A(+Zd}&sM{K97q?A2k{1x}ziOJfYts6lWX?3`JKZ|EyaTa1
zoh)vC^pSU%k-(XKy7qM4e*JG)yS~wEK5s;x6I{cwfM at hRVsW4|s5g_jCC)$MS76vk
zOiNor9O;wl&HNUQoy25(`G~~s?62bxyh4szOLE!YMD7jmyQc2_qxp6=?jQk}fVqVC
zM9^WLIH`n<dqMn&0D0q)GmFT~QO<7DNyQ at QO1vgZRX*|{uaq3bJOTf!@#8cd>TXGc
z$9Wr%Sun4`d;MLG9dQiZ_~xxdo>1<dG(68|eUqh<DnF8TOmdK{4dYuNBVB{}PXnW?
z#XQlZ-i%y-_2Bxbe>RTzX?=_BI{p3Tg5OWjexF&G#m0{8Te&u3OCoO$TMt#blV_oS
zeM5Bm at joHIDg18kIZ*Nq&S4Imq#<)4>egi^7^-_jXT$&Y29HDYvN1=2H>VYA;=A0k
z%f=2U)SKgVq~4B9L>!QY<O1POoB`hJ0j#+W-{?#7eN;Vge;YUp=FNDIVD;jsZFHu5
zCcF$xyv23|b5IW2LM8cy)@`CY7V#co-V+M4fE!q3b=iybofPzdmlfcmDp$9XH7=~z
z?B_?S7|rtdZo^D7!O`xrN+zub_lS^AFQ9>iwHczyo-G&J0*q0mjAt at 1tVx(R{M~Ey
zq%QE?r>UtMfF*$L=>!I2E*sy|@%KDJa;N2-grBW18gZ*>7f4(oX^(6<|LF#Aor$#H
zf6519y|iSECow3KG;Dk2l5bE~Geh+C at R`?#%_n`3v={IGl_(zDX8b=$d$Tfg;-CLg
z^pWEO<wLx%<T)0H2YISQJ~bi}z`;4G5^%+`90l+zf1_Ow{C|(zM*jaBy9Qr$#l^RL
zTS;s#w?1YGSttH(1^k7;b>bUd#{Bs`=Ffk!^XKRP_xY2|xsaWz|C~EfuL-~<CSaR`
z`7 at Ez55B>HIaAOIEKMuoBku6efmdEy>JmsAd{ndkyH0Bj!;hmMpX2zcXOs13j-Myi
zy at TptQ(}z}{90P%+I|e)=%+D<MHS`Y`O%OC4LiS%A~Nmi3{W6`C*M84ZqTX at 8~2!8
zgwMj5Y;xR{mb+4<^IYd;oz8W#3}<t)500B1K7Ir%kkcDbjeApa?SfYkr%v?4cFrSj
zDW at Cq)$Q|DIkUZj<oRy!u-tO%6#S<ny7Rz|Vsdf%Ne)WI5;kt at Hk*G3n3}X>ko8N5
zOQ~UHp~UBT#C)ayk83505X`T0>f~A>=6X_3w-L*NywT`y22L9PX^eyIxerLJA>s4^
z_TooFc+nLim$X^E88IE}aewfW^H1W1(~jlV(PF&sJCsYrmg^?+i;QYc0Y}9m)5Dw(
z3v!xLk!vVx(t4jiN$kqo3Ou{SFtZH#dIWdaad07c&+uJ2I|^vrH`UWJ+tDQ5=Dz18
z_8ygB9-hB|<=QBtCArA=D7Xn7>JehQa>=!{UoN=Cq5lj4UWCJbQw<rb5qDD^JO=#;
zaW{e>)ORX-j<kQPIEi-<Tpa!ASF`D5xxW=`Sv4&Xx*f(_Bk*|F8C8+WB=gz=J!W}~
zlG982AnbP+wL)=$R_2~&ub=z>xIT>o@*`Y77Cc8QR7(Zm4NxqE+@@npZmDuPfWtx@
z&Kg>Vb;T}DAFv_cl_(2$)*4>BOk at o@e<#l0aF0O^@6(B_o?kshN%Z{eB!hAb^2=xK
z^0h%;z7X~D>!Gs&ZwT4!{#L3-JO}adXP07*&0y!)qwM^ur6uq=5bV=v&RAe+w(2<e
z??0v<bM<A+*;$yY?;^$_8}s%(et?zrO<=yg18%beDH)i9Mez6KuyZhu741&A=ssrq
zQ-~PaGoq9g at T(HLaisbXp4EwG{(xsQ*dD|)A7XB*V=>|4C3e~$F~)LEO^ph1jad`#
zTUSoJKNUG0n$yqct3yn8_FGMr`!AXH?6;~X8ppm#@ce|M=puIm!CYmRB9{b at ABy=k
zgnq<spW at iqZ6KN7CbrX+z+dHY6Kjf5{+&fH*0f-Iy3hgL=gxtS5v}HjXJ%9#(;o*u
z at z=bMp6DFbEyy`{<JwmJgKMRF2KtN*<?m<p7})5j8<XK5x#NKc16GQz2_KgoK(M|8
zI-V7C_HF!b;dc)8R)_WK$<3)FPm{G!g1f^S+0TRrJ$zh~>z-d|J;BrpzWf_gE7;TE
z9kPMrif8dGDzRbl2jF`dq at RHtRED3kb6NhVl#o{Bs_4uc9QROAUfywR?-GWMW4Hi&
z?<e3`Fs_mLA9#&1C<AaA?-eGTMmqtQ;q(yd29Euh&^B<4E6f=<_EAC$^hM~=z^4W1
z{D=QmF4q^~JNKjgD)9RfJn!XMXQ4;OLysPTU$dmnys&)+X9#4)7wh8C1%r*y2g!P$
zKhde(^5N(TJ%V>YX10|)kt0Wgu;AZ%+c8}4r#?jMi0lB*_G$EbysHv2^eEl$>1fQy
zuVW4S at 7%7!0%txA{yrhAM-&62e?HtF*uQv=Me8To8$J~4o7vn__~N#zLt<_K8~>HI
zTYbqB=?{>{!4BNsUjDP-ZuPAHl98xAVw4f}f~1Igsz7om@>_*nyn at pvz;Rj|@1S!K
z_u``;LyhFR>S~HwX}NkMXT0k7$R#r@@^M%{OPygfsq1^E&Tnozlon&OW=+`oVj?#h
z<J|CQ<qVe`9ME<#)`W$V%untG2hIh)C-1cQ49c1_!zTBe-w9t&F at Ko8hFNB=av|>?
zlMW1CQj?|JM^z`7kG7TPUgr<PcL|?mz>AG*o;?U0sjW(9{rZ3!7)|&d5f7RK9-t~<
z{t`x~l)XpIgB{q2cTd(|L5}4raK$y&R#;oKEoMeMfCaQk3%4+nSpJn#_~0+o8)4he
z)3?|ZJRR+5 at cuqfbdE{~kIX#D*V^v2{lT8*NzEcsZ)W>Nl7AL?MW~IELowfyYt}l0
z68-!4R_eWji<)hWwk(jE$H_5PZhI_HpzJTAEZIx!>ejW at LCO4TToV9Hey&jx;l`G#
z3g6`|FvmO6&?cMK@{JQscbPf7S~}5P_MvUa6%3BetVS>A7=`B1(Bws3Od{{3LHW6@
zB9xkBluvRAVmU7Mp0WCRYBjEZfIOD#&0Qp3s$8u7tWK=I3Vt9vxke+?pQADduDjjT
z$u;l-4oO9Sk(fWGv*=+R#zp=xwaPeBf0c%>7j<2yDKuA|z<PmT*^J-D07K9$T6Hdd
z4eI%W;k$Ijif(Q3 at Ld#Q5`K>19TLw|e-=C@;xbJS&&8O~N7X9&gJ;qwbhswikGqlj
zNxc!dL1H}Hu$5zLnbTEQs<+ow>$iH!BDyt+ at izVyPB-5wX+>`P9&rZ8QeJ8E4Id`i
zM=-LKLUIUky#~Qg>N$AMM&!N&Z+31~B;ox6ADu(2w;?~y-Qe)neq*}gzBm)S1fym!
zd!<FL$e$Iz at vV6FCtM-6HvT7GJ;3}PAu`JU1o-Vm1<oqJ!gtmF=FSx>pKmO$<T)8F
z?>MP9B1c1!f3NQA4Nf&;z&hsXui8=uJEy0aI~#S1K7x5)`lhH;unoBwv93ueC111U
zO_3Zz&O$r26!=3a`r+t^V+Q5st~iOhDPDs0rzGGe1>24?@y~Vet>FK|^QeQcdjiaz
zb9a~<@=gcUX||KR!y-H5!8<8HUKD1rdG9FYoSqu#o32cq*5(Q9$`NIdlbclF&@56v
zFBmz)7AX&N at wqd8Gx|mJGx5AfnY8u+H%W1rs>J-8f^WCZ_$qiUFF-df-j2EWrfwSM
zNPpg;rJLc4RU%d;E#fk1KXCV7j!O!2!KdEUF^AVE0H at wV$SUURUicC1)M^D|P!_|-
zgng``>VVy`z0A$SGanAf&p|SOQR!HtMT|b*GvXlHlJMSmk7!_X#P*Z_7{7PX#U$>M
zTQaD1Znxo1;UhK<&7`+$6_RS$=~cCc>c8xBc&Fo*sYg<}n8&Z}EpTRji+(8QO%a%2
zgH&a=dA3RrgInO_uYu2W5qvu at 0|%cPv4D}`Tcq2&Av3c)WY4b%&t-8~9bygf{cyTd
zG?0<lt*$BJX4e5_4DqEWV at y%_hM>%EaN97}o?zl*!Ouo8TiLUi(4xBx%{v(<nRAVa
zFM2qAZR@&Q;`TP?fTG`UYG;>W<L8$I-~zp$)oOKURVKP}{zLxo7>1GY_5+t|<NpKo
z?ZvA`ImTifyi_hPdY}$eA7e2$GxaK)Lj4hP16rxH8DG_Y{gj75(YTe8Y9pgjzR%JS
zvs49npULKSDvOh-Oz at jrwJn)%2d1Te$})^Q`RW7l5|Zz#=mB5D8OvZBxrAJ!-fN8K
zWNXHmGj)j#o`WXG+#vX8BCBzWkUMG7z!*H8_jz2Cq^9l}Z2><&qT3{`@2yML0&h4Q
zv0dP=O;CG4w=Oi}f1IQdYXp>WI at SeiE4mJZ4}-r_rFx9D(W`R<I5nI^Ra`h3$EP&-
zEcb!@afqG66Ed+yJ+zVo%;253#LHVBaMS1q!B^=&ARDfkwHzT?8%92wv7{~07H{+4
zP;b-f)O+bgp@#?NfgkxN3M(-u*2HDC>Tjo6I<@dKF{@(E1YcG38Ny5ZN&7xVJd0Ku
zb0#jU9h?^;8--kswz+u6Jw>x2{G+bDvEyCSSLmg-C9V3Kb6MHGM&_n~tjzx4hUe{L
zbeVk{bZgE8Nk|+jd}fKfWh031ac`^s&V0;g{%Rd!n#q{li?z2t<fhqJYq*^So5uUA
zw+XgHn-3e<&VK`Wf&8EsH`bRL!5amC%W7ewJ2sBW;(%k}nT441g#-&bLN(iob>|;}
z>HHvkn0hhh_0v_cMP{{Zla9z6>b74DEc}$@h at +luoc?I>Y^(|V;pgk(S>^&G`_%}n
zv;ULitZQ(+Cg7F|m7D;S&4y<omIAT2KXAZ at ZZFeqig)N}aGLynq=Y$@D<|*4vpcc1
zVtXCiOV=Lp$osBE#~}_>j`87QA-11&Q)96OhKvfpap*tPCCp*@$OEwl?Vs7Y?ooRA
znLieDkegxOZT^b|dHIq8<dz;a2sx+wNzQ4^y~mNSVx3^A^(wPE_Xl8Cs^Gi8c%`qz
zw$IbTaS5I(XO?{^B4hm5{N2DKBJLaUQA=_DIGaOwoB}w4P#$@f;nX{@CHCDnKez9;
zE|7QH6uW;5ur=V3#q(by_?mt9O at jSfhFusuYFK-NcS?;2arL2N@{>t<@qfGGL3zC1
z9K3h7Gx#yqJmd9E1LZmCE{`5MUq~0;bwaRmHu6ow at A|5wj?|B#*K}66-YxU|3Or9e
z!rLl&dTQi+w7>NHv%$@j$^3 at T>{W4It&o*G<QLvX%IslLTt^wyWFOm1L0W6N9lTZR
zej;Tu_N at D*Ku4v`uB81`alVHLz7S(tN?{9=9p48T-63ASgi*h<c2^L%hQurQ`}myD
z!@zZP-1~ee;-GiT)PSQXNDQ0Jta@(1MnbGfgGb8zc!ITnUrKF={7QY^X9S63D#-Ei
z01jPu+n35JaQXy?0RsXbP6^N7M<aRwUV*ltrLFp|q_FB`EzPB?WD2|7Z|#}D<fn7s
zQ>mdViM(+whbHL%!kp<0o~-`bXWpQ5j8^Nz%+Y#BCakT7YBh|ZHTUzY0(pX3^On1Q
z!!3t|yiWP#uoHYA_y(@OW-0lO$H=dTZAtf^kek0lF^ugKq-<EDV#_v~#r>_9%iLuq
z;{*I_)nr{4J|gtPZN1Gtg4Lmk;Bp<Q=*BS}!Azkah6xhc?FP?Q7R!&h!t{xvQGKZ{
zS}%8;(Ax}xPe>fb8dj(FhhM~k*x*%&*^ZmR1dp8GQ4`B^<!h;f at mXYywRYQ5`9JeD
zipL}uu|uiH+z at XkK3&_A8OFUby**~$wk}5A>^hW=d~x!kyOH1tnG2nyYbiTsmQPP=
zZhK1^V<h^+wi0qJd?B&G3_a0z(x9I!If$8tUL2s_OI=jl5@&ic;1BD0q9-9IN&moH
zYvK=k;kZBzznZndN47t{Z{YY3<T&z5{sCXb#@er+9~JpU#Bt~$kK at j^J8V)>mrtDj
zm`$MwbP&u)tp4Ei`FagA8nODR`bwKZwTfpND8uLx-f?F!pQmL<lR4b`hPj&(k^Ssw
z$Wyeh40$G}<>yRE^lSlV9O6r1Z%;)Z-rj2NN*vse_;<4-ad597c`&1vHF%DDmBjNz
z)B}6cZ_m}A7BAoAR3BFdr7TBVjxRs6Y&-wg4LK3 at kn5x3<-m%_TRXcXoO9uxs*IH7
zGnfO?GT4ralk0pDNAtQBImLOEgMeclUWE3U>E(ovo}C}3B;Is&Al4VS&d1>6I2+uc
zZ(+tiUya;*r)2 at KtMZ?(B6;}Gr_RWvUc|SLzNH>X{->-M+(!0;4~N#rK?dFLB;$Hk
zyLdTda2m;(CRmLa92-BMn>!#wE76A4h+(}-RbsB51$@z}_`AsIX`MQ6#+kiRFINoa
zr98|_B=56BO7%phG(H$^u)3TE%6LVi|13Uhc$***d1jKi7Rb_Y$aO!Fp%}y(0Y84%
zfjo!!mQLXFVgC)}MnpXhwD}?aFy2PNQnxHfevE%SaQtVtEFj);75q?;6UjEw5LQoK
zI)mDq3_Uq%psj<{dj++a^Adom854i+iM&P5d7^uZ9t=G57uac)%q&Tb1GunRTgmq-
zdWn4aJcxgcIpnj*&yc at aIVZA!<e(&YVC7(frH3z*6M%fcW8-u|<x>hGs*s=Y5 at OJ!
z*tHX2uhFL;PyY&d)LBco&=)$Ue at XN)@Fw5kT4MH~9MIjvb424%Ht4jH*3ml6X!1Vy
zdyu;o>%hb>1ij%r8OPYUx<!A;`q%dlqa}qVD$6QkU?<saywhW6Y7mEne4f$|%GOS<
zvHU5kDLpNtpUT^%-B4?I^=FfC|G5lV$W&wKM;@6iUQ;sFtS$Pla1Zm*#6)vdJ8UFi
zlulRaVAIX9x{7A4Wdc)z=Nsd<9yUdJy-mqNqOVNhmH1Y|CtS(70l!c+Rm^SUzmcEA
ze-`ze)~e}B;?^LK-3a7bLw-n3HRioTb}xNNri>ThGoDjQxWEk0Ynkw2s+UUSMUwm~
z$T`Mp!>R2|evW!1or8SXr#@ivbFr_5Zhq>08`-DwC0`1VXP0jZJxXOq91Zu(eJ|WI
zv>tejU)0Iwt#?V>*&wT(Ygpw#d|DC}veAjTkmXw9EGK=5Q<EnPBK at U|v at 3T+;T|SB
z&<VZ*x6S_22yc2C;h}4Nm8+b=l(PMj*XLWpyChyA`O;^c1i1mh5BQV_9J!c}V>!st
z*5J*N at B+|YWqC=E3*?4~R^naR>X8Lip+_^nRq#l;Q&!GkG%v?LU_$l3sJ=6Ak?A6i
zAlK*DDH;Fn|344(>kH7={#T!tB@>w=^%QZG{eJeDoHqVS#JYNd_hx)(z5BWFPpou5
zm)2R>@q&Eo at U@ED?zJ=XW?G3{9MFT9$0CxS4O?=5#1Zy>Ka$Hd^l+Snj5Ugv>B<-0
zV*7<ct<n at q4h-~_Pq1EM!?;qy<Q4(%aKnr-B${Ak(l7G@#AA32$72AKmd0@{y*=p&
z at C#Z>M{L7ZYnMo+W7I_xrY_Pq*tRUbjr~b4y`pckZ4Fv6V=mDT;5SbPAGMS#;135+
z@>clJGBDpL2~R5<Z})omNuqy)qg}_P4IAHO?6JI842wU%3f+R_6X>SL!Pi5c5zC!1
zMLENgJPu=VM&RzJlgU~J at v}_`;4eq~;>$aP(_u at J>l0es>*eVm0Gm)^>fQHJlxu20
zxiS5NMK$EQX89i<Lytbr#PRy8bT8l6a1bM>01rtjxZHH$ayy|er6qcc_JpdfJeI4G
zE7U8}6`>x6aYZ)SN%brmIRc5z2JDXz_=7Nd9B?p6|F`!>yQaXVzE?~*cy<U=CJ9NI
zOX<pT>fWc^gW4C at jt}w=GKc%a{=iyt<XXvh7-RMuV#|(Vd<mVRhJLj*s3$UyV+)?r
zXhmMb-!Z>->--hKHp7Ng7IFBWk#mLTfNyKzN0Duzi at Gt?0S at y;$dxo2$M9cd16HV)
zN#ymBwUv&m+|Y2}vUuCp!D9ut%ip^9DMuI{xOPfVS`gxJRHewPvM)w5I9gDFzBMG?
z$F~ypW}K?jLG$(_Z|A;9MXRM_X{*JttkrTxsds|I1-wTD)6R}>WE`nB&Nug4M}PFD
zHb+(WPdV}-B&*&s`fan<IrSeoJoVQd$-Mo0kxx1@@uY<U7jmUe<YJP!>tp1;;08Mh
zZgRat+w5bBk)Q1Bkm}#jzP$i>h_{k!LTSJF?ke3jvOhC2Sv8TFtFPBp{(i}k_<Nr*
z@%R3!M6>>GqV{Rt8fprzp~0nKv*++$p{1Vt#w6oe|1x{Lq9o5VyXd41Iq}b%x4e?5
zj?tu=w`fN~UxeK8KM8s;RA%nhf+L3bapImA*+`vhQu+4a5G|=s8>vrCs`>yosmWD7
zw7!&i1zQhn=Qg=2HexHmHlMYxY~fyt-YTiJ<WQ6zaWd8q4 at H?7(g&&0 at TZr6zw%<d
z)z`oL!!rw8OTpKB1IJciEqqqc_wZMvO{mHxfAL$uS26 at X&$tGkw@<}Cbj0(nBgXyE
zf?)Mmtba$Mew+V%c65G8V7#D)bA$N3sbWbjV*3v*D&yRkE?1upAF3_|cfcXv7Svzd
zwoYdJ?oQ?@$tnl<FZn|YuQRvWPf$sVyBHc=VHe^UtP!AXIsM@$gMOT%6xo4O8$x2n
z_wGYZYOJH~-AmRO+r7e1ZbPn$LML-8=yIf3 at 3d_uIp|<BC4*CS6XO0 at P6=)Y#)9kU
z%YWr1dx4*LV2yFV2r+}ch?7=bgx~j%nC}`~tK{(>8iL`O#;x&rjP<pP&_}_O`=AB6
zh}Nt0R7uc{#ulE7mcHuXuRAh?`G=~Ee at B0mSuT1Q2cPfd^u`+7qTG`5v2S_<I~@Q$
z`g2N7VxPIC{4kNdIVM6XNI+X>%)g4*-!_7m(JZPdMjtCvT?_Q8i2@(6 at J&wmQ0mC5
z=M?>XU1KTNFxXCxanB;hd4c3h%1^aM2d-XSj=GxKG_1AO at bGd>@}P5cRC!1C59VyK
z&I+6sbS*YVNZERV$Eqma_7 at W;x`BFliLM;%1h4l?{6KxD?c-HPk)IW~gQAy^U+)O+
z|AC4(*KbT5(0?=|yfuY{mrY?O_t5TK at Vm6#$R)S|_#S2MdgIgp#{r?9 at ZU`*n6XE|
zIIRFb(ixFxD0uwr!86sOm>(@4Qs9~8jzXQ at Aa%wqh0o;_vqE2w{Bl>~z}0X$F8A{q
zzoHxDc|I4R>#MC*eFjT0NIv1?)^8Z7$6U4^8&QumTaTCdflt~8<JSM7>)qp;EdT#;
z2orF!Tjk8Mq*g?cN})v9TTyVL=GYiaCI^j;X-e*9yO}4%%CbVZD^Ysay9n`6lIaA5
z4j$2&Ax?y`JT>urDtEJushob#YfzuV_w)N>kL%ujzOMVaUf1h-y`Hb<>pZ at X5Z{MU
zRz^Lp{7Jc+ at C=1el)|L`Q%2fT`BPB}*=JHi7F?jSq+2nL4<r9NbWEPvfNv`R|5Ia4
z&lhM at JE_kD)CV|z8yW9{FHq;ys&};emUx6nm{CGG*}mY<)gU)ZD$5C$6P%p>T4T*6
z8yzF=X^7oBtSWY+4>-X-U6QW94_or at LLKa**~-`|;QMGT`A#E!XbUB4tob7>diu$B
z{!Vbf<NTHBr0%AsdnqOZd>mN+0B@|bo>0RUZGoPJcDoEtsO`ZS>g!>@if%d+Am3!v
zPUs1Jb{Unt9US^`l9LYpPL-8^R`oOb+JtDyl7EHBZ{xmhTOnc(Svj{5Ys4(fk3sR>
z>Fr}DV~tx9k`mc%h}q&2jHiOG#;|YHO!?1M;4(TeUT+mKR9{q~s+8cGY at e%!*C(<$
zOpwv#2v_`7Go|(s4erCn>Qk$6{u!KaA?FKonq6fyWKx#uog at ZhR_|q|v!!Oi(^M;X
zkvo(8aZf$$KA4lD1hB&=mc4B_!Nd66v~HptYq0r{8^bQR9?Iaq{)VhO5MxxQI$V>v
z(SGPT_K7Gz^yT&QFviQCc~#+_zdGZ<qmF!coFE1~d>d5Xq5ldGMX=M|=e`S`we{p0
z#4CM{vJ(IQQ`PzBGbpD*4}E>YVc5 at IW+^zW_m~GR%pm%{a#K_xo_|^T16_dkc>;RR
zLVYD-r_L~`Mcu at fjDGropiN{qJsqAYRKl)3uw)<vyk|MR^K8NM)m=rve&h@&+6e|E
z=K<~sOli&lnM<YSxVgyh5y3WLE<V(ddf7*?hJHvF=uPDQUTHW7_aCzPZ4awN3|gCV
z3i`u#gYsSEnGDYXXF;a*vG4^3VA>5qAK8hVSC?vj$JlM<bY&|J6|&zrkFkd)V*O^C
z9=-s-OtNNhKYJ`Ncv+-Au<6Y#E~K?Qn^&6hG<;Ug#8ybg?y>!%Bf@#Jn!pe5tJjOK
z5t}LD%l#^<_Q6}gd%q>-?H6eA?RWWH6s8mazeqnvrz-BCy<N6<VS_fXi0vSLG4fsZ
z{Ru28(F?{WX at PZ4iX4!S^+KNKk6l;O*g3*4pl5A{teC2;Aae<$gP-q7GLKAHS8#R`
zzB4t at p!`7pooe_6C&M08^BQgd&$0L<<Ly$7^=vaFdRqjiq+91C at f*0nve&pI^rs-x
z0C=Bf8-hNx<Nq6iz}vaB+*IE^%5+td$)4aAh92Z at vQ7L27q((N584|7O-I+HkTz81
zV@|@FMY(mtcO_;z33JU~@Rxi);aXe at w*M`9T+j at ATLQJ7ODlUjPJ%JD0(JhSDHXC9
z+l0Gb8w{*%@E{jLqzl|0gsT%Ahnv>b%L*!h1$PqN67>aN9Qu8cQu3-+`S4Y`sw$^n
za;tG`0eB=3i?!Sxr}C&JBka`b@~{~guf|Zs4CnNtFZC%9A4^L7e*k at yY(G%g at vXCk
z)x?&}w^;GK=wQ|1xIh*11-)wruHZMwLD+%BCP^w=!DTA1$1(adkQc9WkMkErf&)8e
zK!iCsd_i;q-leapI(nwL!km4<fwAGbAT?K<gpB+x)9C59qxOMvxnWUGf5_r`+4TFs
zO+C!JoZKVG=e35tKvmSLO4b+Dus1YEAv?a-LVrd*6Hrf)@*&o}H^9HTS8z}~P?Pwf
zy=LzF;584=`G-fQchF`I|GBGws at ry_7iclJxN~9BPegz3*7 at V&q=-M2@#9E7?BX=&
z|6lOXuFyH4chFA`a>~FT9}BG54nYjr=jOQSLM{N8?HHb+qk^!8 at ZtZGZwryCDu6Zn
zF>LK%PHsP4!3n`cN}nVJPv^A2VAY3XH`OP;r#Gm0>(nh~t9`+Qq>SslhKw81UEu23
z58Hz)Lyff;a+U=L=XEgwadgIwh?xeY;gckJ2hV?>#0C_cV08Msf{F2l)#(Cl?x?uE
zlIJEER}x%yO#YTA0i&(WeX6ZWR`%kO;L at 9P5_l7l535K>nO72Q{8hp&t=)pyf*VY^
zb-m_8#%_o$;WXM7B^Oa@$N9h(DNp&;^Xml at OPc6Ze#O!X!Hc;Q^S=rOKMI|Kx=3(d
zqBe*(N|Or=ULi05HxmNA5r3{p@<1*lO<i6v at AVc-pT>KlfhqY0G0r!Ek+7+gv_T{v
zDh*y~!kGuGazV`k4JXL|vVv>X%IO05rhXuGRO;yR(hjaBbfx-u(z%IqC^K*oM|`pN
zWf%%EH|!BSYjJ&|#^->L;#&0EH~Q~a+YZR6-WJjJQvb9(js_>3D**NV3hR}@=h&kB
zc)wmxWDA56Rb|`{gqIy-)S>MNvrv<rN${r&*(Px3z#gehx2xFX?W&Qk*M4Ac*ji?K
z2(G&2oCCI#;Y1E%J#CI|44Dy|THMVrdJp&>Ony$-N_TbMiLO>W?-vLev4{#5Eluo$
zF5L>BVp9^2$As~ClZD0LFUfu5iuEYr(1iZ1Ao_E0VPj3<Vq$kqTB^6j<#<ibyQX-Y
z;0jUK`MYD>`1x4EgX;{YZVauBj~mqQ+MPk{PB*4-Gx(gkJ&7L#I5q8l`1XFG>y&Bm
z+5Rxu5BN&hn%&&fElLR!VA^sUIS0EG$&Z}VC>!E{2Wr-AJP27ye3<)$bV3{2&AtAK
z6A>O)?Ey`I_+i1NSPk(r@|I7&0X@!{cO7HqOJ0zWaJ^PHW;#<S8}{27UC7KZf9#)6
zu4OjF;oH^6uqQOo4Vii-Ru`ZurJuxHdLFv{Sn3n9-T((EjW#$YB(ifeY*CxhR(Dv7
zy&hO^CHz3QRi8*w1l_?o;Iqrd*oy%tP9c9wR3N)ayPpc4I-hOR{<m|n7CHz2IN`tY
zq2}_54&)H!koVDyGenmR?5<+H4Y4d2T3Gu?BE;M+fn7H%v^8#?;#$~D@#V%ER|af%
zgxfK>pyq<BOC}ml1AB|PN)*?quwm}*iVDG6Ae~3-xxs$1d_7&kpX_DfZ;E<~-ympi
zSp+`fj}^Cht}G?ta^=gJaue5@>HVa4Yuqgocczn#EQTHsMQ4Mvr$)0pXfodwn#p$3
zx$`bF<s-TaEs9 at iu5IMUrJBXgLx@w$6+bTAXBOMHfxESO-`wa!e6G-}ujM4AL0C5}
zXY|sohb-(h4~f;A|7)8Ey)3UsGM>mW;@>#mL- at H=WAnSA$4{;+XRjeo<kUjTYqpvT
zny%PHv^VfEgZFaVM+cB&<FRkQU at bZs@U8bs2J8F%h;D8=br^H<g;z00+cFb+aZZDV
z<fZY1&YMDf#ngpE9qf-Ox7vnrYt&BO#uAQBD$#RKnpf~=PiVoo2mdSEWv_=^J%u%o
zX9Vnb<bR2dPM7XLF3mwaKqmO+e~NpE``d-Hc^wrgtRu=3V{wh at U3$LiL(h&PCo`YA
z&{%V9*5CJYU)!<P>6!M=wFAqajejWMt##<q;=17vZ2>-T_6i;3St{h&47QqPRCMG5
zqtCnj&^hMEf9U&$#Yoqb)Pmckf%IwMrf*$G>6BvZ5&O#*Y#qHK{-IK%3QKy?RNwmd
z8fXf*D^<_f4MF{g<%AC(b10n#pUG|IBzk|#CME*@jyVxVAuyVnfC)ylLl>}P$csT;
zLR*ili7MsbM>{8|LVHKSevNICtFaU1(3t<)uyBk$MTIpvI4ogDpB=VExs9pg{mKMI
zyq^&POuL at 7WIPk`j;H`!5=r>Y#BUmY3HT9Q)=K<VfPaC=$LrW$rIkabo*?``f{!O0
zteK&CNc_!^)0NTC&q>Yz^v$L4SLlg8Lgq at pNtpW=Ht)o^{7G at UrS5vf_*Cc?*3fij
zg8vvb at s$M`o~`hJU#QVwp{{wDp#wkJa`m=`U#=-seXD*c?$*Rq>(#QFu`!02;KS;%
zf?ty6sJ?|i{b#{yUNrQb_^?e&9HDZrNyt-KiRX*r_OyA?pX51<w!}?In&Y;OzD5_s
z-@<o=ofKS|^+e`D-htnb_*UTKg8UPYB)%>|JMo|M-+om|cv1 at d<Fa5!tH(RJ*9oG(
zgqdzX*GF+x%^NtgqQmX0d7p2I&WSiowue`!D(Z!-5xT;w!Wm2u_IVszsH%|ULMQOI
ztj9WguTDquX|M2$lkfszU$Q`s1#7gt3WF+`gM8ae7f=W3HlvUC7ObZ>YxjGY2m3{s
zHx*32vpQ_11NVTOaL2~P$Nd2R>8cSOg71NOTZMc#Pr<IZ>Vkz%d7~Hh3zz)|=#;4>
zZ)qj=D;&h$1Nmg}f}NQ9R699ZqjhmQ_AvRboDy@}nzGB}I}?7VFw2C6;FlnB{~YoR
zb_-L1yU1iM^s3t(TpBQ`t5hclpE3Ut(HF#aNvpRx1AKhM=Na`Bup&~-dphY3_#_BU
ze~b0$@cF<Td_nvYhi0;0bJt3t7oqRuNOv?iG(O8x_=pHv$D?z=nKR#{I+rfp51Z~~
zP0YNDz{AZ~&pcv>9s4EdbAQ36bJ-x>=@itueO*S_z#jnX^gha7Mvr;SH^K;AZ$2=m
z$jJ~sU!tP^z%kp<KG-qC=aX&tdb;wyJx6%3yMWL6AnHjfIBf?{|1bH;Lmct|<n*Xs
zQVUdL>vfkd8Dy>j<Ui9Ij at 8%+cP at ByY8PSMyju>QoO<XA_1X&9aYd-(ilI6daWSPq
z8iLgfgnfdPkB_ly+E2QWm(A7xttpL5pX92V$nUAqYU-Ted2UF=8YFS}g|H~t9ge|v
zP=>Y6kPU*)ChsR|6O;jsC|MF1G6%W6X2Wki1Ke(zrknXX;5h?gT~WTKTnVxH&oI5W
z><p#ne+dp1Z{k<EbfHE4`yNB^Sje4;F3EM%JAWc4kn&qWZtlLZ2Jq(vl6yxJjNOcR
zz5ey;e*ZwV%`m;B0Z|k`=V~H87<>oxd5P*Jw~Rad;^Ry^*3&7Zy;LvdeTlY0+aN;i
z6+`$ZT7o^SF4p`S70_l!8#`&NSNx#Iz*Zbg#vbgzy*THlGY#i4ye){WZ^HU=s~{iq
ze#=aE?4R!(^d))3uflAM%j#d&5PP9yDH&7Bz2qBK41HtaJmkz+pL|*JB4RVL;M1Im
z{~JP<<XubXA at loVyGyQNokiB}60&xOeI^!qO&!(=$bsbU3*cQ;S;9j7wQfG_6sneb
zOnPAVF(P~6H%#Yu)XOee!HI65UnjZbSBDUv?O=WQ7Pl-Z7xnyCeW*{lQKUX(EUQWp
z2k>@S7q7uEse*(4^e{G~<SN#3z_q~#5$t~F`&~;Fe@&fB^p6#(kW04jf>|e-Q}P%E
za7#vyqw~ppWU1p)z`c|i(m`)h+~I^}5tHY- at AY@RH=y2;dEZZS<Gmh>RMNbQ|E=DT
zIm|`gWYpyk=u>;?myuKY4 at Cy_$XEPg2;Knt3eFLxO6vso#JsRcZ5y~WvQ1TNze)KR
zg2e+v{pt6YQ{rXJB+c(SnY2N(#=71%|41Syp3q{@?d(<^Hr?pVlGYV5MvvwTe2Xe@
zLQ9nA?N|<Rxz0p)e>@Skb9 at WFx5HThKEt)pf1Z4-8ypCIhdMMbNZzI{+4bOB_$i`A
z_>Qy=x*10Y>bVgC3Y%dXZ-5?a^vV5eL_K#CawLav&an-)G15B2bEW|zAJN~>r;RZk
zy_jMGmKe_?{W9oV^nI$w?I+yKvtTaS0nE?>;I#HLI<&**7p`#&nqB{zYr5(7rHqQd
z1wG9Y9f0+oH)0|S)f{X>p9wZ&eviht2)1t0Ab*EVrTRL070;41=i~-{jdVv<ga?oR
z85u{=3u at zT!9RE$zIfE7xG-ty1R}3456w^4xD>y at xReP-_!he`FL6n8c<q17FZ6A<
ztn%9|-T~Yev1M7XE;}I5N_R+}8A;DcLchs8c>?xi<BAm}9o*Q^Z%-npxw^TbW2H=R
zuvi0`pi?c6@|<*|B7y>*deC-3c;mZMux|M)qyhGeT7zi9fO at Rv!9TvoK;;yIF%+Ce
zya{~9VV;r^&Y6g3kn!KZT7e>V-?(qkr&`3r4JrN(*dk)dybsy8j`X3Ha}$<C`HiTM
z$ocJ>AS%ev3E39{d&^UNy*qxmj@`yBRPE0z7IUqLLoy7XFaWN(Z}~D+g(2 at LI~Txz
zn>@o1bRT>Q7wlY(27U|v8~CQj4M7`gN&h2u%Zre|H9eZHdgU+hw=|zPnig^zIuN+&
z$$5mAUX>sBm04f)AG7|`&!9J*5;*s4`=BD^?vW(^9oWZU7n}%tire-A41iyqIfZ|t
z&1=P^ybR>)7!b69E2m2NyFt!!es#v~u9JdpW-Z<0pQ;`vJmB^d!EVTNc>qlhPC-{U
zu%ATd7bdAP1@}ZFqe7G~*H2?zhL{p(ERkQxt>9jJbt`|5+o4UPQ`dHTrLTc)OS8%S
zjBe{qTL624o(;J$r?dflQNVfTZ?*?eeVt0m0&d8TtLVR>Daf_$1^g>w)9JzqYp?6r
zozNNk;6HWIH0EG}vngB)Im>T|5?ISM0j%2ALU6KW4<stLUergPjpzQ0Nsl-Ny`WY&
zi5xGz6?QSy9w&#*awhuk{CN*C2A5+V=v!S_;-E*XzRk!Z*iN^7yCdwP>PV-YJ&Wtx
zg~-X!72v+6nbWgp)zid%70?@?Yn}xLW*_h-$Aznbky!x0(+Tz>d9E<i{Vr{I_v6B?
z^DNMDI&dxG%2~62Ao7RL;|G%G7qm^@N1ch?S<BS634V%wnb_E?PVjps%D;5bWAGb>
zZwKxM=u8#dG1$l4xfx(b$ddjNC#hY$W&YhhL#ygE?0zEdN#t#KoVpn0$#1B+s_EOk
zZDR-QGN%OxMUJr5(7km$@XGNnF!hnccpfbsE7MwTIMV`u$O$KQ;?prXi=^A!^P0-i
zG+k!ecOQLFz6kRg^q#OF(Y?WWfUKpHuOt-!gE14nMuJK1x$WYRyE><5P%mQA5g!}e
zY{$I$Ec7Gz#-NLqi-;}YOs#0f06m8Kls>EcR+t054&RYGQ5pzdO}sz84c1S7b at 2xE
z(KmQ at 3%k5A?NXOIZJ8^y$~=w#jp}E*s6 at _<$93*{LPt1dO|;Dy<oc(p{oOWN2W%51
z1nZ%c!(Q<c<^gi<r6^BwuHa4o0CfZxTpASi8$D`hJRPI|kT%rI*e1wMU_V$9c&WN|
z at L@V_loLKg2RD(jzjYRI4o~r8i9F7`#+M&zV7ZpNw|X{bn+gPn#2kq+`jq6CYDYea
z>bh?<?PSe2DAR}@2%E`P8oot3S9FKYK;8_0=&8e?!;S&ZZXLB(IA+<;p_wgLZfkgf
z2Hn(e)W;OR)$7U{4D^O?R3}2!%wEM&`wVtD)~}aBf5Ewo`9pqI%e%KVrfmsVc~7Z(
z6=!#EAHF4|8gpEVN)tCr(chR>mZVA}eC7FlA=4C|VXMVY(K$xX7srYG!PT+T7GT<X
z{c6~M)V&P&)G_zhDbVK_Z&K&lNfq6-BDQ-q!D>s$ylqMZmbDAl`|#(A9b|i`{fvf1
zL3YDv!U at gdT=W;L`@%Y?An5FyXb*lv(Wge2`j)sAzU8w?*=AQ~A>v+jq+g01lBEjd
zk%!%UA at 5LFzNnYjikK(Nm5!8Vi%mvs`QpBer7v>9+3K#EDIeRJ|3EfWs7^<PJ*TbL
z{n5&#vQ6|zipF{~7WpT@|NJ>{`rq|bCEC1#3-fF>vTCkMW{V;DP~F at OG77Qu8bO?7
z^ijlu*-4H8zjo`*vTu+FG1ct4Bn1|yg5<j(xd#yM2$`Q4L+}v%4)AyS1+PH=OGS*L
z=A`!nfyJXB<-hWiS<|bWw`En%mH3 at Y--(~zbuRst?y%dcwZJ+(4Bjuk$JFK7fz$bb
zuEUs1bNp~X$UcB<b8tSuIVsS#B&Q;L9;_VpqYU7n6bdKo6@*8%Mo73gd?=gnN1TiG
zI=^e^+;mkb))QwCgB{Lf>Cc3{z-y&rT8wz+4Nc3u4#=Dure5qI??CiLejMU>qdv5e
z=bSrG`}yj8tgS{+{b5&>H1tQMU_4}<7JPp1 at _J#PSp at sG3iDq!WY~9fmNFsiEH8+h
z$K=FuI4%c{{2}xQ2UCam4b(N7*qPIuM__-WYkI%tFu&!-%~$+VAz__0vX2L99Pe{g
z65CV2E$zp#Ji#UL4Xi1<OFn4Yz#(54sVnYviAf{%Cv{e|4Yr at UiyT8gb>k*EA7D3r
z5_iI$kzA9unqV=%aNE1SbJve>f#6!`ghRP<6?gt;JsE}K44GFnClrVAp2sj}=1yGw
zKhF`2hdusV)hEzJ-<~`hejlG%|Fk3ZmHRp1S2lWv@)=j~{x~jV?u4UBI#nrbtzWy_
zu>kG3PVtBbJfRTw1o)4YOa`{)Je%-4<jxvzl75=`+$)@#-IH_{u{51qi9ZVYpZ_=u
zJzyVMhxx$|jTni=eoS#8bk*SK8510s&#sWQJ+R^=Hzs02sPDjKXbZcdsvzIS&#6oh
z#Gr16wdroV^JZY7aZcEkk at T!2vOo5QT|~M240xYgeN*9^Ii*_EnO3$Ox>vXDaErwm
z0i2f3+F?5u*(o?0-if*HL2!EPjgWL+2kN0B|6va-Cw%56Dd&Ve8SewTf`SV2G8<j0
z>wF8aRu39wf(7V1yH;kI)QIiukf@})=pv(M<mreek2GK_hfgp<7d8q8jNK;|u?~6>
z>`>F(-vRX*sd2yWiP#%Vf$}54D~MM*7HJ6kFx=p`nfT5$Dw3Pb>45BUKbvpH^WH;#
zATmZ=s`y|QI<*Bp)B||WLi8&K-Hx0|gKd0<v^(@>VE at 1gAXA=*&W?B0$UcDFSl3mY
zGMIzJuU*VJb!^|tLfC6zdySUDFPr0S#y9RI{se-{3+s^XPb3)F#rz8NZC~{5W`==2
z?8`HIn#T`^j)1yOFhU2|F8C?FHA4mab3&j7e$4Hv!((feyG<YbS&g+Xe6h=4!WjJz
z_zSW;yI0mtT+5`yaRt`c8)(BSw0mAMcnDC=MM?V89M~_G+ok3lCt_1X((z46FT*C6
zN%F*vEgq`pMWR!7kiG;v(MaW*LQykf=E!_Ci85;nsamw-x3F<H{5{4CE=|6Hev~^e
zi3gh;KbQ7zvCt9d7cC-=lk-*3bsq^;B{Gsr9X6%fIJr5eJBf8 at jAFteuRuE@*5 at 5J
zpG?jp$b+p*UWff0eQr=r{r#N5zQ~Y#4c)@z3C5(Q_)Z%r&PM>*HXq{zn0UIV2>Ki?
zWG=+fL-nx^emBKvaQ)9_Wbv&vb1S<D7e&q^tXn4`*K!Am!yz2u$}b4sH7w5Pv&sb?
z?4`tp@|r<3$J$l)!;&7u<)`|$AEq80+EMli at +CKZSMB{wSgz_QiC4cZi*yyGFT&5>
zeOp%HEJ=UL{i``udUK at Q{Z4CP2R at 3i2-#D1f{bgFduvXWU4qQr1(`W!q#Q9hHT1hf
zr2_k+hOW5+dG&tHu`-9R8n!N9_;9}{a3moQ1~p=+Jc at mvkhamUJ9MJ#^3XFI-Pg;=
zGug4iB;@P)6KzH8&pXf$$T$5H{V;Rr9?QT1P-j-VzxCFk=bRoowsxqTEIRLdU~o?H
zdtOY|Y39bQ8B;`a$UdGWI9+x6pD_;`1!VRT!BNPN--hn{^w53Y5 at Y_x9FeL_Ahrzm
z9FeU at zIc6Q+_k}Pi~296i^#Ybyk_JtykgN=_>jYzE#Is`&e)M|49g0)+^EqWjh4pW
zLOyuUh%<4w(60N3+Ob~~Bfk9iv!Fw}pM~-8kMERAg1vJK);~tHVXR`dL>2#Q)RWlu
zMSC%%z0kLEfH#FK8oXzLj6p1y=Jo&nF7ePSu<n0C`33rTz0eQs`>o;><h?8RDXbso
zD@^DM;8u6ruMUv!<Fv5os|6oRRF8u<%H&#<1vxfcaL|xg0$ZwCY?C0CtxN%4sDenL
z>WGq`HYg7Vziq)5W&vWJvPhq&kpCopG5XFQajA;?$cyQ8&l{qVn&c$h^D(T`k3%LB
zY{`A{otE5BPEtGFwyRt2oW{@({!dwO>Az$FFr34eoC!?@9%?MOExsc%f#^N(t;a}z
zBx`|hw1_Vp$rQTzEeTglxsoB{3VvPJ0DRe<`l0t3fpyqn<e$1S`G&5J%rBF{jS7tB
zVQNdQ3iD<f|84mHT^i$(?#^TU+z{YuAaf=UuCKAiP9wZ6k##wviGEi1an7PhV>I$=
zYinVHNR2$6vxwk1{YGIuqQ`s|Ykhjp at yUpb3R8+~eh%ctT9E7qY`7fp2-}0TY8%R3
z{srf3u*=D@&X>ccZ?P8aIUY~&R;$I=UIp(0y&3Xe;ckQTp;;(>^IJ)dYQJ_0esHWq
z+O-|-93z|Ib16*fNd|7s_7rk$?7FrmdJM{%&PHL-+<O&i&^u+H_tfaV>#ItG-kF})
zRimp$9<+TA;dc${6qaQG3(~#bWOyg%A*n}r1|u>0ez8bwCp_AfD^zD-kGdm>;Tbq3
zUrB7#z}x1-W_=ZX{P3%Z at fE?syhlu2Tt$>0vjs9=8RZx8%B=Ru44tl=kN86uu<AQG
zQR%&j^Vw^5IWUM>)@$}zMxVpAM4u|Xhgbk_v^DJ6gWnhD8<0bzxh8QVFa#w%@cmxp
zWoq at v3;J8&Jauo;Tm|eBrN33n*!zJQd0hnSCwOv*e>IR*bF$}SIQN`Oas^VB=mcO=
z-RlI6P?!jPIRRtud$d<}<gwKUL#Wyas{5@?;~o>rBah`QBHzA#jXSOeep`W3xfbzn
zE*%fwHb}Ko6M&fOx><Fcyz~s#^#fQFH_`q)M_9hXh<#4fbD$V;wa)3N>-<oczYex5
zdFdnMAL{$mKzPr<nJQr&_8jp|V8{CGYIYpt{WYx3`kZ?9a#b+fJT2JhTJgHFk|vm%
z1#2930fq0%+X=o{m;}Xt)+=E*c!L*&SY at B4ZGXoq<9Rs~F2k;B2X@}+=Bpw(!vYX@
zkx9xg--P}e+_{h%Fg!cPuHFq<!fUo{T|}*gj?qu}z|rT`=vQXgN_Ki!!1*cxS8{gg
zG48#%U+FsXj<9{ru-0*l|5ev08-8Cf(0r5IGwH!&gnJczMz=_t=H`8=BjZ4|lZL&?
zo{sm*^h`Gl=Ov(Rdh(`tc08|f<3z48G0^4faL)ylPM|dU7L=$mXDu-LG99s>B2WEj
zKL at zj7wES{OQ3J~B7glys!Z4k>YZxnZM%Ht;kXO!f72c?(@yGZ4}c9urmW+1e%-I+
zV0;^Z<$&)*8}Npm at N;Ql<I!xdJ+J>h(Z)=w#CFLIZaVCsN#I;mx?^`M1j7)kP*>S*
ze{&wktTFoB^dSDCW;Itc;V`(!RwQS}s*?+2<;nWkbkye|zAbp0N}c{`;AFjMm2tDw
zJz+CNSl8g2&xT)8#9nLM<xR!SMLR6TchAI{M^xG{aW?)d*miq*zBy#BS4XD^u_pRb
z at LrcbVkRlt$$g6ue}$NWYxWFs9nPK49<$38R}jzebEC{B3->nH%+d5SGPF;3Y&+Ua
zhMaF5*RdbDZ31a4m4)+0lR3d<5o2v<^wkWMpnceF^g^PC;eP3EJ?z_h-NoMpUk~YF
zby^GB!Gd?fItlt7IA3ksFkUhV7fG2n)-kS*-{5CmNUm4zfZju{HzNP^1FUuBeiQi?
z%_M%Umt~C>@y2>Cfr>Sxz}6`*W<1hOU7eYsuD#`yy()!eJzGx(!!KjE-LSsG39ZlA
zt`*Z&wd;5_jxu{qZ^;>MVd)XO2RmL}VmjHEQd-L`9_qI%LdUyfNP5c#oGI+KqO>pV
zoVS9*cC~xkgSFe=JmRpWAvXu{mrW!8VbdTw2(U!ZZ4Y;*lpewP+l%WF!-Ep-<3nY#
zwfHX8cKHZPK4W?>Us`&VdrxlVQc8b~*5e-8WmoOFCDq&-*aK2Z at 6#cshWa$>3*6^2
ze}$qC<sWp2#!knT*tr=khg9K4-;a|>tZnHT{F;SY$N|p0$2PaLnq!+Aocr}x8h1Hd
zxb80A;j%r2op3dU9oKmn=N~Tp4ZmirwQIQ|&vf#Pk<&F73TlkLCAF2gb}dg2t{=n!
z1Ft6=@jBgJRn at u*@4L~vfZWeZvW9Ei<$RKCW6d(5O2d{^Ei9Yi9L4U#{^+DNu-Ro1
zUx?}h_#69xG3gE4uUZLP;XqPm$yIKa*MMNOqRTmry$c^0I5kkG+0v~BS%Wj|a9l6L
zxc~3+kjHf=Jw=_N(~C5XTeHf&Qr#E at r+pzi-l<`4!?)^N^4?l|Rwmj{j(#MG??qjq
zH at N%FMfZ85*xQJ?k=s(RR?zb7q^;1tzhMm6?MvL>Zon=^t})o)J<U9~ADDU+-|LYE
zom^4uB>g0cM^8jQge^LB{NriR)oSQSzrEsqKUwV^{r9R9z<}Kb2M_U^_6f%D+B-4F
zV4nG{h{%p5M0UU*Jq+VbJP&hQse at qIszjxC8*8dmWW8<|OTQ(0$JSiP#8D&;k&Fwn
z4%5Qt3jf;Up_8L{#K&^cOr8(Dq0lK~ue?ffKrI2^;@mO|a{7SVzqB8DeVYA)O&xED
z*%S69UR%@~D^Z#oy2SaLLnMN{(Ua9(Od+mY4BL>Nl)xR#g?u3M;@pkk at +S9W+E9m+
z(1|Q$j)lDazuvv+|9*E0`E4;St`q%3x<4$Kb!iu4e7qs<tC5xd2^snuC-XbGG9CF=
z+YtxCng<>(z&Ygm0ZVw!Q*7g9VcuOW?qZOKiI*}o|3Xiq%fo at 0`SD5lcB&y~(cC`C
zxMpwLGSi7So|*8zzy91|;4XfWIC%2yL5Ey&<%IQypr?qwl^mTOe$=f)O`?LKi?1iL
zxKm$x1Xx#VW6gh7Xmkok{V~=Da at d^gh;2`HLgt1*Hp<D|gzuA1{Q|i;P~~E)J+Q{t
zrQ=u at xHg_Nx|na>bCJWYkoOG9&Ab0YZq6VwR)o0K(*Ede3R at L;c<Ew&VBGhLhuChT
z*Xm!4+p8ETV!ph_A at 3GszC)Ob_68;j{RbstWvie&$Tr4B6aIi*oG0X=h4ZGG2$q*q
zmpXGV4#_U1>h(dN7;txxm4aca9nd8n*<EZfk?mCx>|M?q{p4mT)&Zq5t{(OCu&(Dc
zs6!T;XiueV!&>#Zabc^vfK}>q$LVezv8CPt{>M7S0q9esaX%Z{sT^}cfDn2!<o0M_
z0yT(#e}p>rMkh|S5#7Vnj5vdN#mvkXseU|LPjnEvO}{b8Up1UwyT%6H<5A-->N@<Q
zuR-_d#d|q%{lmyC%sJ7RlMM<xc`oKiIXBA9Md7K7A-vBcD)3BCa*RHNak3TtMnP<~
zRSW5{;8oF8%DK!zZVsX3%lGKiN*PV!gNaU}CjLVTeB-cv>~-rU|Hc at r4O6IgVhr`-
zJ*%ruux)ske$G{D6GETlLafM<i}uN6Wp?Rw;y-%@cFg`^tw!J6Xc6DD4SH9`|Ee>O
zvi(!%ORKsXWjuCJr-?uKSSoay45KeyseQ$*(`*^k?ePu<yaSiA39+1Ykc~pN-=4?@
zF)^w$v_GY5++`~fXsI)3vs<t^xp5w0!ATCum(Vkmz)C9-?-c}Hhp*Mk1ArM>fLwfY
z%P`i%8=`*0+(7(DI^|b%xqeQS+^-4PaXZSRbOFZd0j=D9%{FpPWfxC5bWJq5#y$QW
zw(W?OCUM)_-JB$s1q0F!<T<&?%~NGYG58LRi0 at XQ+$HL(l9x8oT5|tV#8Tq^8z2i}
z_=vfq4r>BSDxfF7OOtiQ8uJEw{*r)DiFt!<KIYFD^M=kOGu!F|?r;g^@?B$faL33P
z<Q?+O*Pr6mE4Gt%#kg6{JfS~9>qG{8t1e#^^SE#!?v;UirQlxEz*`}#yjv5s=P(aA
zHoSKiEn~c4J4hk-<<;R?$O!;H%HX|oL}vGWG87#{_g6Dd7(Ji4OIhL)@a=&?v!}~%
z7Su3-bT+>OGG#x;!Z6qa9JZaxr5F?2g^S(sJO#Y%Xakb#6|sqAY+$Tx!dUSqIyE2q
zmhBtZ8|7tQVZY*>#0iHnCqmDPAUfax&MQU?YIjDi{-|()QZ;xC<Ka?lAC47~yt}~P
z^!tji?`4dUeTs`=M#2k%|Jh$Exh(AaLt%%W;^4@>tk}Hd>{u0Y30;%q4xLAGF{k3Z
ziwfw05r-wYIPXI2K=QGXME>o<b6(gkr*1|o2HPHWZ?{XKk7crTc7=5tH%oC7$1Twd
z2HVdr!SPfa&l)<eF}k!TNX!$@W>7z-MO-J*;m&ZQDddfWpTymt-0L&Ms9GKNh5yx0
zsGre3|4SddF@;@EFD%)HID6=XrFD>zgJU^Qr6hV9#zMJ9$FJ2Orv5S5Bc1K+6}sGH
zmt>mMT+)zE_{oq?XgL`>q!T^^ozNdTp|<L?e{{l&Zk=%4|DhAoq2t5egm3!)S0{un
zSZMU|%O&~*VnC47mCS*DU%B;*LEW(Hf9i(Zs8UC9y|1e%4RL`|=$ONaK4?B<6aS;X
z-RG}(b#ddahqwQ?4hK8YmBi++UG^pTEmk~oKsPKl6TOi7iAJ1pZIG!A*EyMX at EfM$
zU35klT}$b$kL@`}^tF|(ICoZ&<FOQ@?*=K^Cc2%qjeFkOWV;NVaJ12PeM3BAJE?x?
zZv%p7q040hn~<Xn6r4vt%8VZ%x?54EYM)R-^f}<Tt9fmB&)ZR+;95#o=8BNt%l+SX
zZMP^b{uf$HIlWqqo>SV3x<qs0f2Gq)o4C at FHf}bhY25Y5%Om}n0d88UgIoi-WhZ)^
z9p54^ZAdrL;QY6hNB+^}irj5GV5bLlH*f(B>Td7H_qy$=bK@@(z8>;T={i$W5y5Mc
zIbd1nc*5I*ejTNf=Lc{8;V%w;2A3bWPX3!dcV|$agUvgEH9~LSVNdtk@^lu~`zeSg
zgnYKAu|dEb4UjlOIsn+bZ1#pdU33rc-omAo9!{EUx=GJxJLrUv0Ymx*XPh+j5Moa{
zsK;h at bp}#bh+mGfSK>IXPlN4Zdi-X at Djo)B(iPavdel$6VK)SLJ13<ePZZ9fyhuqQ
z?vd?w>$=i-x7~|NAh-o^>V;Tb&KtE4mcKj5ulMLJY`=r;WN;)e#`Zd*hYoV;@Dd5n
zv~U?u34Wy~AeZ)I4nm9 at UCz`dq^W+43RcZcaOe2^`4>Nnb_;MM at MRNRvubheIBGqK
z2hqfU59jby<P=i91Rv74S_hAC`+!#ywz>CUZyx22Nw*X1IQ;|WXIa at 4tg&x(im3A$
zZ>e5_J;$HSC$vtrDPy_YE*2|z8hu8`wnYU?%~t98htSo2w7$9LY*@c{1&M94j at fg&
zUT3|e-Y9KAuIIDX>3dosR}KRc^St^A<kvaNpM&<lGD&nq$IYZFu?`^oY!@-#V|-GF
z=qb$&pY&2WjWV at fs6&4soFOZyO4#`tu+}ltlbajP at 1W9fd;@fm0Psn`&jsE;iFv>Q
z`y|Fu_xbY*2YgVqf--3}V$<NWvYNK5JbZv3G|oRW{uD4O?=W=9365^Ia5b<K>7k2F
z;#Uw1Wy?w7Y~oAT1fcCaVVCuGx8Kk3vyIF9B7~a!rgBp45gy4CHPnW<S0VbKMp_qD
zNcH&&koVJ}n!=>RKaI8omdpXprkk{c*uJE7jWv|Xy=JRPen{FcIuUXBix7uDSpUuS
z0e|Jt-9}d^_#E7I2$5FXmF!Z~0c#tRaoHJ?(?|7=;8XJc)PB5cJK+o?F;;dVo1B20
z2JZN{z3 at kUxTF<W-HtGS@~uO{$r|?pZ<Ygg??0iR{vEII6%)hO+x9|EJ5i6MQX^t<
z!(W~czf(-5(Y9Bm7i<K-`F>ohB<m+Us}9eKVUrQp at loDU!9l_1+ItsXaJSQG^fP}F
z=MtMT&r!@M_mVpJImLH~ua96e8>{dCW%uT9j)a}nH&y%y{~yI=0}BfK#FEFwr1YUq
zBklwxKbPdrz#6H(_Po1aGt_!{rg`82e6ffzyMo_UdlGvE<NT`NSB#xtrk41;64D at V
z!tgy{4 at MseBDqz=wh+G|{8MwNtAhIzs;`2hiC|@sBWOUtL*7z`V78DCD6_b*m_b~0
zhw?gfhOT;9Nig(VS4B**j+qY}2y(bK)*Q$Kf1;bC>bP`uHy2wPWaq)Q=GOJ8!){%l
z^jlBmWJA#Bz#nL1NIqAB^Ch at nVn-!5DS8FsrV>fK7~!)fF${0-iwZXSgu(~!UZ1s)
z_C_C7g8S&UDw5&F?GNjk$q}0|Gha1jFgN(#xQ&T}@}$oZyQaa-*SYQ)ckV0!^0)T7
z^Jz6A$ClR3gHQI|ap&Cvujl%AlF#B=?CX2io%{7CaOl6EOme at 5V&D2$J#=puI9o+-
zj at H{ue?#Ji!`~%(J}$V4?^8kitKm`jjd%OFHj><>1aHIp798sfOo~r#f`3oM6oQZ3
z3mp2_A;XYc;bRT%KMc78uf-POeRqC`+>vfhTI}n-<L0R)`x=tl2G8sLB9_K^sKdIK
zl3NGgx4$t~JG8IWoxc`!=zrB+2VA?+*IftP&pC6j4$uc*A$0*x2{<8 at 0bKB#G9o5_
znlWzjXBpv>%QK#yygTEW$-7`b8%Xvcx*6UzfcUYYvjZ#3MXLxuXCeIkSCYzk4|9~w
zE-p6Q$fSiIXA;7XF|)#(bUI!ixMsU at -Yj*{>%tG`W>z9 at 41VI_(8ID+`(}Bg%s}aZ
zG6|(8$^?{;p?m|S7s_OmBT+IaNp2V#B_CxGN($vlls+g`D1A{bLOBU#KFY}`m!OPA
z8HjQs%F!sJQI19VGRjaD>_1ar+hBJzqaR`WI<~ix?O7vm+)uR+y8AA0|8HqNR%4-y
z>Xl|4uUjw at cH(m6(1bslv>#JGQZN1>S}0x@{j~Vq=yBqW(JzVF=oiHwMMsKDqJzct
z(ShQIXn(OGdbGIK=sRN_ex<<Wg2zHoQ2SunM?4p;!y4;*eg)cfPofTE%Zq)FPE&qh
z5Pk;Ct<j@?wb({yVLerSK9cvPqRHTj=&$MBJGf7_VWE&VJiOD`;5sL}aIK&Q at iWU{
z$I?(v#4f)cm$&#pXrdwR&i4)6g>-Q*v0L`!0$Z5T(0U=A>Zi2?e@>lgS?TKwxg8rV
zF>kRU=2d{WAi-CZ#ZCi1sYmXRUAFyL!#r|x9WEhUhYA~Aj%&YCIDp at M${k~*0{>5W
zv#W0n?B+98tU8cr>M}iD{*-VG_T at I+<ffxs+H}*f)GG!YdEJd^r$Ri>5qm*I=wSKW
zjf6DnjIj9m$0w&oHl^?MUvG%u+rjl?yZR#4*;vhg3w8yYz(>(Z+C`HItOanW_Jbr=
zEE2g at O<NqueFn}v*O)g%+|^kACg3=np6A^Bd$m{(&xAbnIDSGqa}aBUvHKSKH$%mG
zm{qMU3&sS=^CD*o_$I{4M~bK!k%<P`dOP+9$}dMAGsr%$H&#=xd0-qkMNKyh1$e$T
z^0DB_>Q-)8DgOoJEEU{_O=%6UA?&!K7d9 at hswCTUz~0yx8L-D96 at 1~^^eV;{7d$G@
zgVr0n?-|9z{G4cm>gEhTC*nJu$i?W?egOHs#oa#|B9F_TRqYn|MsA=MM6MT{N1xd%
z{aK at Hc0EjL5*da?HpwGQa!m^S{MFQlblq3;>FHn10^cp-<k at f43b9fC^z-im*Dzq1
zIl>OVd|&!ACi4o|i@{HN9Q+8*$=Y~L%@ZXY at FLrQvAr9%9N$XZWZ~XuI>F5VZo`cA
zUrtEpq)d$GQ-bc%0eO!`$K<*D(u?tm0bUyN`pj3 at dFcu#FR^%)JMTB_Ab#87CoML5
z?B}$@36~gYW7Db!n+iH&SEHRj5b#yI<U;y^JVLcH`5bIiWX>xgJaGTx+?D^&xfk5$
zdhDC@|D3D-f6hHVcy8kyoGSy@)JOQ<QGD>=8C~yx4er<?zTDl;Kcb%L>{Y}Sp{-HM
ztnbls`T;kMa=6?4r^0sFjgAW-?W0pw=LF9KPYgS{Esn3pd%KS3 at Ef9~;KKJA(I6P5
z2baK}?`eBe1>N2 at tkp+-6#vg3h~b~#y>rjGP!aZt)P2~#0e+^)dfA>X at S5!Kl{C9r
zHQ+t at 8TZY@_Ht}*#<`2tz-I1gIS_ODOqdfkoQ1Fn+{1A{91lUsZ>rckufX9uMzI;^
zt;4+*;ofZMG#vBAInU(BhEUj^itT2UPviXbsSjZ9aQ#%PSK^v7T%+|b2M-8xwYQGP
zd1jOoz;o~uu*0%rslJFE=~OE3RLR(1DFxPzJCR at NnDr{1wZTlMRam&RbRKkMjt=Fy
zeE$X9kL<AA_hsZ1ZD70T??Q=w{9<PpyM}{Z5N+CpyonqafHqI9d_b?N<hYB7+n-}}
zS%Y!!`@m?*LS4RNa6R~hX$g*B(%-%+W$ST$Kdv8eUmuKPSvdAbd~dDn?tmyqF$u>V
zovFZ40RM>d>^RQ`tOuThZz@%F6x85<3jSwSqEsLb0&QT||3%6JGxd+$<tcr?yWFMk
z;-%pIo~8O=kJ&(LrvfW=>V3LEH5>m~@~mRmhIemcM<D0Qw~ey#Bfw|;X`}2HZ;cK*
z^Q5Qs;2+pqBnP*67W#-xaX_Ar_mGqKuzHsn$UCuZv;?t`^{N*_msl;-z0kaR<>^EI
zlk<-3-o`(4RSLe&>C{6yP3?gGacK9p$JN;PVDSI at Wc#LXqVi6IuJQzRKIx45nVG$f
zHI7=k4*oa1AKrzJHRECH^!R_lhkTzYFuKlf5M2}g1leC;^f0RU4Z at ksO-~cglCa>b
z&uQ?a2u3OTbwRL2%~w3e%T^3y(iOw$Y%N8`kHI+ at X9xXf&v%J_8w8(7mke(6Ui@#{
zVzO;gj05kD;o-JK=@JgS^6Gf#KFRD&ZZ_h==3sla^0%7AsgH;qpId`p5q at j&E5>gH
z^jHQs>doL&BlF~TlVddU(Jb3xW*swMc&9~PekyV{&(b0;KZRU%OGvx|a at Z{~P5<#-
z at Qt%wQef7;7d;Zn&FrO|crGsU#UqU}et&d|l4;yE{A)UuYDFxXN3}Qbcj^Dg|6z96
zD<JQ^?B47ZjEi@|liMDbJfrTx_V3{{^5r3k*2l-&d2Rly)i;INI2M&>+r4AL#*nOL
z*T at k$94!U5z1ld#uLI-9Pws#ZlB-Hjkp#=tcJSMcBm5yFM_|81;Ro)tTl4~>$B(y>
zUu*#n{u8f#f*|o0^6VtY_g0^rdfa<gDB0%cG-Lbw(0pvKmNzr)yt(yDHEQV6^;I&e
zFFS191K{)rfYa~q9ESgCl_%)=(5*8Rt>pbe6Ue)&|0H#aOxAZ|Of+ at Mz|V>pIh6e<
z_o3_)A_fKT*CV;<|FBuN!6HnBPj*`P!`#g92L(0I_cGZB^a3wOP8P2_CmY8S!h3P7
z2X>yG9OU?h-+Yf>hql6SjJ;-<=si$W!FLfJXa;K$dW@<bHuScn7|%&OdHDV8mNEA_
z&6Jag3H{4IOMT^}<lXKZT|-xInwJ(jqqFS0hORYfD0h+4Ym0kd4KgN>b<Ieg#US%X
zY{X#BJui#Vchf<U?Vmh*<qB?S+vCT)VsN99{CY- at 9m$aYF@`16bf!(vX#)+1d5HI>
zTIGs1Z%(J~PYO)36&>^rt^x;B-uEg6xLq5 at FzVstnfZUI>Z60=UC{yX`M(w30DE<P
zr-OB5Z}zX%@ggx^SxaaU`kFSfiLS43U_NnhZ-#1L$yE6X-VTRMfelxw;N**jwliVM
zcr*ND)lIhz{-OK|Fzi8*@5ry3x)@owK0mNh#!0Q^T)?u{(Dw)17WzXllM379q^i!=
zbgZYR&9qm=lywW`)(YD<WbH}xbd?rs;76Q;z1wz;b+sL19c|@oH(7%k<PomGSs^n+
zr-dH-mjqnFDQ{as=bNr1q%F6EX1 at JpXy&jBqjYM=sF*zTU2RZH at b8TJd#}PgruLT|
z9pDE{Z?<%<BG^U3rGz;ictxV~ac{XXr5;sdA@|l1ea32m%zqVJtgjIsMqpJw!2I$!
z_Zf15j>LN8UW59!%v@<NG`jA-WwqF4Jd6CZw&Ao+-IWxR=qO at B4`HrpIFM%Zd{s_j
zES3NZoX0VGeHUbGHsY$zU at ddkZ?n1b(LCH^mh}Yg(V#1gG}I(&dXsdpGh|w?(urRC
zw;!W?)W at tYE}*HKza!~^u=Ik1`_4Sjn>FDyWT5Nr=X^^|4ERH)tm`+VP~be$YzKZ4
zG5+8Z11Cri at t419ZKJ_+!stTtFh(Cw(#`X(m$4^vGAq?|+PEU<PJKB!(2p|0doUj0
zU!u<DD6DeuuRG`h<Ua!!Y|euCGlW~e?i=fyoYY*|qroxc^Au-VKjY?$2Y|`zod}E$
z$@PkLbw6xS2IMNn_3-O}VvLsN0ZT#kOiUrUn1Qi&AICGZVPlbv9RTJZ_BN^)r4wVt
zPQyP3830}k_c8eOs5TsfZHTO6 at a=%lB{FcU1(-}3bm3VT8{=xfSaT{FoGgzm6ing8
z5)J~Ssd%*J6v>bC*g_^%e_5mB4fsy;?$6uI>-SBp>OAqRw at sZk&+eZ#q9Zglxl5-r
z<<e4xQ&Yg}ZQM0#wsrcC8z$!9yyxaQ{4tNkO2qc>@Q#Ak3!CUP*q5FG at 1RcqTJ(J2
zE#^?jgSzf{*d=a4-#US{g_ABPe1CeI|1Wtx)+?V(v7Y_pb*9exDy_3VPsfb(5i*G5
z*Qtl8mm#h*K-@#(dzn<~qOVQN*%Qh(pS&A9;9KMs1P;pQ5eIGw%`w^kgnl7d%5R8E
zB>VH92>GUpZcVO=Zk<Jq)&=0cI%^0Wqi9c(iM^Rr_KHoR|2X;(DI0Dr0k)f)*wA?^
ztASgbMYu5V4j;7*L*KoQ*kG4hrd+Fu5e*O-VgP6Cm?!cc7fN1q#rY{b=zSNUXNJ0>
zXS>h8&mbq6?=Zf_jcrcC+7EoeC+GMNz at OHhklAqaUe?t6Cy#yBpP#Q%AP#h|X05`Z
z@#k9*t8u96OR6H_3963{0cP<9_&M|@AtxG9f#`&5dAlLsM5ZgW2=OS>^UsH*=AXf@
zH6-<})7A=XdkU`~HsRirbDnXXEZ7Qe5SMz*B*jyH->AyauMg6Ju%~^)>j!S7vvJqx
zaPY<FlWq6A!M1yH`k4Ncsh{-|?q}#1tNp&wy6~MpSBK2Ax9H1{zM`NkD33F+XMKE5
zJkTO4KU&Px-n#>QAf1kW7J!(-5Y-=KKj!jd{yNA8zR}~$2k^h=sGg5QKA=__GOobe
zqJCoD&sOP=pGS|yI7nk<oD963qf}3D<0uzmf1GPH;2o5);5!ZB8)C~`z_<RIcOC5^
z;n}%FzaU{ESu_6qpZ`#piT{uAKLgn5M5>b>WAyzfsn&64k#}s%)bgXi>_X?Y<9mvG
zm~09-JgN%q<HCC$Sy^8DpF3{?n_PqMfi<#Uc~$F)c(Dz~juxfW_TE_}T|&+)N()`t
zl2d*pez&#*_Xuj-^<X_>0j@(I>=T@!f{A?+`2HS}2Zo;i;_;%iXO0ir2=6+%(In at o
zlFXIRCkO}G?&-prXpdR>;2GL;Cj at OWdb7G6oR#|pV=6b;_Cen6y7E0~BgB<o!#Q{T
zH!Fdm at a`U6&f|a$wnNVOesHh$8tRA~Mde4aX7SCRMeK{@{y)SD_ru3rePK7T4WayE
zu)KAsUZyPtMjLp`$U=F!;Z|R{sbfXTR~C9}q)xtNXuCSHK>o?l_V<w*`Da7hyIBjD
z#h&0YhyMS7|2eFS%O>k<<Ye9hpS+Au5j-pGnJ(uv<Y@(eo;|tt{MLZTe)*G9Gp$qH
zmxITnFTo!;cFioI!hfwiDe|CziQF#uHF6tSn<>5`_P22sMn^Dz%`U%%gZxvCyILiU
zvf2Me9p((yLHh??zP2!Zi+imf@?UGkRo(xrt+(O&TTMH;&G}s+Pm+6Ky9V3P!Thw?
zZpO9(+Y)SBQ0kj@?iEwE{0O7VuGY`Nvo0JM#=ej8{DEPoALi#7T~1mr!vFWN-^*W;
z_W;|c4-6wVRqd7o!%RH+xX5GROLy5;>6c=k66aN-oQIM|S&DPU=Bpu}m+4p6%L>YI
zkGA at 41)KeQFlP2cUz>|}>BoCz;C&8a`xWeyH|;ch>3<Bqj5^<E@&66%7ZTkL`zuI)
z8M)Ip8vl>xwBUY^aNkexycH<*cwQ2DZ~F#)HU2LRpNaEM=3K(|avV#=+UG+YA2Izc
zeJ$Q=#Pnc&!!X!f>Mvq#nliPXQSj;;tM3YirBPitcOB00_`Xknj!yMokM{}pEyD9<
zr9HkhV$^iJ+QzL3UC<RiYDvBoAsB7+oH|2)-(6pw{wlfuj4S$^z<529BmV>N*)FbC
zKLAWWunO#aU*wwm{u9j4UQ^*?QcW0UcIR0*&&yJ+Vv?0_$knU5VZZJPlh)o@^BZs;
zusbqic at GnU6pxSx1-LQlEbLIe!Z#UbnArX9wRrcH!Z&%YoHrHc-S1pO&lDE;AICe3
zgoPM~GW5}Gx7`IfC~EI~^HOMc6#CuBQ^>oVuDBsz2s;fE`7ZkBJEVWU+)psY<1D5H
z at 8mRAfBgglKfn9A)fa9<26y}Qx%=;>sNZTGJDR}%j<~PvweEd?kg>r8fERK&csqaN
zZJ|4)2KVtI$WYQJ|Af953}59$*rMiBz-d=FIB>C#UmJcJdWf-c>+}uqJ42qRGNMJQ
zi;dNv{~K|`7Si|J*F7Qb&2Aq%HQPLH63*T2=ODUU`%eV7L3CbbEOg%F_*g~}eu7CI
zwDZ<4(9FwG^X}#>L>n#QIdk4boYy9!$E}}2yK{1(Ysgvn6o`&7xK<>-66CThj8;Fd
zk4=G2m83WaUdspaKowse6zLEwpW2OiA2DfXRdj)(!#W-0T*;C3>1I<o?0I;f2jE>7
z4+sjSh(}|O#>rKmL56dJN8-M;0P}rkrs`s}glfh04D4rS^ixMzI at Wcv$bmR%<U!N)
zaaPEYhom1g?uxjqmM!UJba at y95jWHUuvr!2+npvd1Kjp&i0={qe?#5<jh?UHgH3dS
za&?Y!>_CpHiqpIwe!QrHa5B|9I312}#&<|F4-CvJE^G<CSl5sWd&g$0i}PTt4Z30%
z^SZRnGY$G5`d^7m3jZ8r+fwk}6>1Bk=Mp=7WVakVx*Az1){PGr$H`&;YbU-Q-p{5C
zt&8OFlRt;G2Jqdybn<SI#WlJz at L`oclEbD at TS{{Fl=SD5{KTb{1 at k)iKS>*C+tCK@
zc~-+vf#h2jjp5fpcfFp}KIg`D2iuKrYRPta`7>$w{`KMJY+EIAqIl8Z<IvM7+F1ET
zv(=VM`k$dSdo6xN=7H|Q$R4 at X)L~0$8*VbI|CB2tUo)if?N!@sg5A}==R=bs|0RFY
za3ou0=*(8uUfj_H{^+CN2^bEZfG)h7oL9lDK)==U;6KtNVUF&|2|znyT{alcIidpV
z7Uwd{^D(0jLcURvALQpPxfmLTc+TM#kD~R1`JnqW4ThrMy;c|bTz3hsAwIM&^x*Do
zRB(uV#1`Q)1Gi10IEwui?9bc1oed7H!oC#6MS0%n{lOY_s7ZRhTd0AZ;2`X)5k{ZW
zDzU%dH<V9;`!j0eeasE(Ar}O~nWIk&TA`OMh&<ky_L~y%Kz(wxvAeDtF&vV}ChW_g
zmU{)Q%=Vrrc=)_GbRh})-y*sg{i$xO%TM=wtUPe^JhhRRc8F%r7Gqt5^~sHsx-VVZ
zRqTgq<B_w7sji0{*kAkjd+UpwA(g_PJk!S~Vk{#EZlVu-F747o`Oi{&O^VlQqJntf
zg`4K!r6X<v at f3cDuLt%4cFgC8H`eq&8&pVHLKa3Qy)tr1E#hUZPEX7Mz!eG?g<g%5
zk2xk3MGjlGD6;A0R59l-&$FA}+|weIFgH!oJuQOrlP6je4P5K;(3P*ujFiJ~-2$KX
zsaLW?t{?Je`~2l<+v*s>jnQ(o!&Gqff$8Zzr`1na9cg_#^bpQH1sQ!A`I{`lY`pVC
zdZ}T1naA#G>X#7c7-$nc`eW?GZz=H8p}vxN9t?afbb!&dd6vSPr&NUajfRb&4t{-!
z>PKFH+h+eGaGMWkdE_biU#2`;N at TO)u%BJN#FSf*5@`ySz@{=9ykL_fPwN7f*h3R9
zq|ys6<gVRjvaigVx}O<k^z7U&?vm&8Vi5D;WXdB?<C=QJk!}C3+T*U^*kBx)Yx<_0
zpUTV?UHMEy0{og$LCikkGIM2 at TJgJlnR(#am;N6yvJK$MnmYL;Ljn7QxSAh$&c>>T
zhYTs+{lFh!4*Tk0+$`Qcrd)B4T;uADJed&K;L6BU2<R->dF1HtTPy3K1KNa{IPY`V
z*MKW##=w6vnioTI13~ZpL~x&XCv0!zY2=W(pD>#Durr>z+*tjW!S7S_CCDYemB_D*
zaSfRYf6RsrbXw#=d74S>NU;v%Z{>CPug+_S{a$UD317r=W)k7%ZIoR*5Uo*NtciNx
z?wg}<`YNbc;WxnHJrX|<6r0%|#2kAqfKLdVGL1DwZ^Ex*=WT&5wS`xqRsz#JmT&<Z
zJw6?!os4^UAf6L)3%Xn;Y`}@U4sewA6tqveY)C4(KC217vn=VpB-q413>nG=3IDU;
zWq01EB-ngcRO#4FY7J~5Q$&A;Rq4-KrJvjli^d$191fn$aj!%d at IHm@@aI~&*Lpgp
zt~)xVuG^rCw1-7U{w17YX7?Zu>0ih6IQNrW_jN}UJ at D0i6?U1Nhg?5$_TORAu)V~G
z_lNxi%xFiQBU*?5Qz{+Y*~os(PnzHkg6m>u!fyK&aFiuXAda7>{z%wNEpFU8ZMAP6
zIQJYPvnOyL+(pyP)~w2F+$GaZL)O^)xNZ%%fFjqgMoD77S6K^o{M9L9i%5PXW`*h#
z_!5hYq-33r`(EeOtLNZ8*Qr17ZYzhLu^T>_nbeF>_j?cyKW><)-Tl0dq32otd0xTL
z^XQ at HX@;Js{rh<sQ^Y3V;4Sz&cMGuvRehTM8Nocj-$-~Kz$?#yM>TsBxJiofUdu#Q
z*tbz42Ak*{oA_r;k9?=rUn at I-_cZy}sc+KREsm at RuOQ63&!e8_h_AyOjP-pAa{l~O
z1qwIlLNw8D;{OGl3OL2cee;7u=b5_x42Yc6sb<f~&qUT4bi?i7+I%FJz{ax;&&*d3
zxbKzh1)eJ0%b+uFPoaGL>M#dy!aNs at HIhVn(E8 at o<A@*k2u=g{g}m8vH`H`^O-k)g
zg{-t8Om|Y<DKoju>99FHLvrzmA9+fowbqyS+y__PBLRgRGYbq46Ba386TggpEgCM&
zQhmQYk$qrNOl?|OpgQJPVf6Vrq_`_;6c2V5qwC$B;#%^&xM@{K67oz&NhZ$`<&Ect
zfO8L+?ZM}gXNrGC&W<sSvYq2REy!(C3jA7T?X~Y_dYi2;Pdy^cK(fv({Fe^?XKaeD
z7Ln!p%0gax%Mzgn;}70{#cGGB#A>9M;T;r+SCnDQrJcOl`i6nz6=LnF<lS)(iN1 at x
zFRs6V`6Y$a(GRQq?2T^To45U at LjD&6t3!Ma$CY12Q6<~xk)?I?gJ#R0YfF#O{m54#
zFHNKmNgK$z6Ef9KlNc{q{TEyc1 at 7rG=+ZZOg^2O`TtWJa3Ui5m7JL at IUw>kB{d=9r
zmZSy0izxmKY{XYNx!<wq6stq4mhMA8xfh2R9!{6ko3;@8e>T4VyyD`7AYPYOhw8j8
zpi-vUhTrxVn~)Rr9>Mqh77zc+VzE6c5cucCtV0WVX_N3=OaWw}j4?&|;CQZx#Ok=V
zyiE0C?H&yIMSO0SXkGl7TG{H}=vizzHyzxF{icTKEaehLE=3OWO_!)@<;E!DSLzq_
z3NG at t2-ZM%j<(z^`i$C(yr~AiL+D#6gY6aO0U4=6%yh469k`CO1>8t18C0hXiF^8U
z6IH8{RWa|w2Gy0DsN_1AQjZL26Z&(7n2!{dztRh0*K?}U8#q3YJ8A4q$m{Dxlh|%M
zIVMug#j)$a)(wR1#l9?DGh^%){O5`$VS6t2rB(uCgL9|h{~H9SN3hu_>rpCDvb+Y|
z`$0k=(@#&P7{O~V9u at ci7gT^8d$R60zcbppZ at vVEs!nwgn3)DHmb%=z%J%By$CPy_
zBb+ko{i_PwlevkN56jjeW<i1S9h8|U-$j{$n6Njn{T{aGSDq{TsPf-s at 8kbQ#DJEg
zEEVJ-j(Bp>6Qwt47QB0 at luzeuTh!hf at 9x|+I9^tHyX-^$w>llgRn4}&D%c`^MEam$
z3~a7xr7mt=Lsxs&1vOox at aDp7FYq$LI&fYD6GnZtJ&5%cyf$*wH at j@Xe&y)15rcKn
z>DUTxhU#MHZ?-AO*-(cv9`!hZdW>?{V||H>eh$xm-(+dcLYuF$J=>|U2@$7p192J;
zvHdj40hHmnfuxQ&_dPGH8T@)WU$ec2^Pj=738+^r%JHOrC||P6s3_Qp?xTJ$sK$C(
zD_}38Yj7=l+6THZx!;SLrS5u8K|Om0>j~^T+SNY8v-{*Ue!p-#`(xQh*4t&Dhjs9R
zsIN&Kc{!?o7u5dYTUMuy#e7}M8-<v#K$2 at t^`mnlbp`gT!%P}t|3;$^%u)?!+N~XB
z|H5`MudTQ~_O{`<O`KP&bZdhSxfGanJZied!XXDk^6VmAlyAvmT3)OLR<*xzYwSf&
z^Q7A};ye(~FrLI3ed+|C4omu!ATN1#?DDItsUAjQ&gq4nIsw?Kzb+F at KkvLRVpdR|
zgN`^8HXn<i7`!lnB at MumZni5%YG)V4?&Ate at 4x-5ne7FtfY!BKFN&bG*9+OdXeVn1
z*7~|V3%TIrf*rzi at P08ZuA+!9w{!FI<%aZE?g<k|YG?W5y3H+H5N~F-FO7ctmH&^g
zFOO^DTK@)70V5feooLmX7Af4T)P-8Ch=OQcfRGS~ELIXyt7t|tMpUG=_S#BeY-{!2
zs->vZ+SJw<S=wsVs!*#jDw{28L_oA|84?nZ?fssBZGZRuz3(6MIcK&rXU_7R=RC{z
zLF@{BqRZBnME23zD`BfFh+#W0f3GiI4EsCmS4kTOIQ7Rv$eoz~CAWbWMwbTnjE~Q+
z<TjqI(q&?fY!9C4IW^NFPRg?Qr{Fw4YquXA91gy=7PfHSlK<d5?xjx8IAtHsz3^<K
z<g+ZRUkvPIA%~)6C`ShRPJvD`7pwSR^4`>i`NFO+JYJaNGCfybTV&r$%0*m{vVt<M
zoP4`r7q>mOo#;W at PS6J^v$0i?p+a2jtgAZa-7j=vy+tXeVQ2p#=Q+~&r6E?<ryMbl
zD;W$t;+e)TTVmw~-B4;awH~}Xqqq^XGIw3S-x7)0Ih<acW2%9 at _c?QOrTe!N!X7L*
z3mw~sz}<cq7(5v~%`3oatPr;p5BRw?6F)cD!ape1uxzoiFuLOFD_a-LhfnE;C}$$d
zxjhATPFG5z*ZzO}+(hs(b@;huC&Dkt;pYY$6dPm)RRK4F%`lnwR8Rz3dISC8THm_%
z!(1C(uP}v-f=z`Np+5>;KYpZ3aQk3j!NT at Xa!XPJ9aNCSly%ha_27-3Wtk5xUg(qG
zvh;p)f^$6UGNB7AfQ<~*c~W8Q9O(bLQu*eg0n3e_tf&!{N4LqI=6>o at rJb4o56Hv4
zOT{0KrIL*Hmbof at z-nU&-9$GKJ1mUZ>7)+u3+sL*CDLLMvq8cn(4c%-Z$uo@?T85m
z{v|iw-v%8W&o9~3%6*GH%6Gu1Tkd~q%}v*KojAWyNw8y~a~9-nUPteOeZHK%<0Ogf
z<)(SueMJgfpVR^yux+|=-tvlQz;|pH%9c<*+L?uIxiWzjF&~R8 at h%;TM43eatfIET
z{x*+x;1tc|!*`o%BzSGW)Cv;}&TID-of*;=j(x3bz0-zn`Dwu$qK+Q12AEdWZLh_r
zLw^Z-n2Eq;Ry*)tH>iNkLay;|V4vijr*`CfhHJ=u#v9k|==bd&QW6J7>4R~Tzrm`m
zi)lx^Y<px}Ll~zuc9w{5A)YjRMABk8;A}n7k1ndleqUK4f`0HSxes1&CFB=BQ)NTz
z;d!Lz?|{DH%Gv~v9nROzjOS8-DIwLsULP{Ik~3S|W}vL};ZJ8QI>T@>`KGoQHb}pW
ztzNU(z)cG at +I!|Y^cJV4u9h2dZ=ybv!ac;`szZzq at P@^4W_N1Ghp6|+$D6qSdPkjq
zj at vl$rsID8-|siXaN634w%Pc0416tSyV!E4UAn`m3_s_pR*U_U8Zxo&+);(rhPB1z
zwS~eS#1i9T)5o*b!qf(iON at n0NI_Gs#Lz~o6l<G<sgC9bs<Rn>Va+_MYp`i^uFK8O
zuG1+SRn03YOU2hWd`8Wp_F9o2lCT}ub9<fAHgsF at tQGHA@vaqR=-$vj42|=jq*yF#
zS1$U!kxR_WJ~*0kqf>v~-F9M=1$61)tRcVqB9PlXovKi7S)^EdY}Lx at FS4MA-anV~
zTM1vfG?Xv8{G>hBbgxi*ss4>X(*wTtl8Fh#y$q at ZK6KssO}s5G_4$Ljjqr`%V0?UD
z9A#N~Ysht>)U_;UBibdcU@%u^a0*fxopMB(cZA8C+FnkD&wiO<Ymh3-`_Kf+CQLhB
z%8_g3j%z-`{T`?DBpySBojf1i7G4kd%<k!%L93G3+lZeSLhRoyA{+^M))rs(R#QFe
z+vLjn+}X_r-*IJMYF4tkW at 1B7RnXaJFX(G*E$D3yWKGQ)whDegl`R_fz3;^Z6(!49
zH^JuvG<Ti<KXn1W5u6kT7?mLbs|_!5DqbDqm1pC27jzO|KuZ<t1MGheet^I*q|Y-9
z-;S|wL%u<`jJ3l at wWnCYZ=h=~)kQ*|YFV_T?N~Hboh_AFv$3M-W*6Dl)S6o9p9_y$
z(hW~K15H;8wT34-fraPb!#tSV0Dqm0hIg`5hO4Qn)5kf{5Wk$#A;*Mqu1H;v<#^Xd
zn5FLZmR8W8!5 at y*HwvmpO;O&r9AdrnE`n-LoAQZ1m91WTZF)?xINw{p=<Jqe#DGTo
z1ULDzFD>|Z>dR;s)BKjnLlz!_UDwuzpD_<B#lQk`tUII)M(l%aG~)zpn(%g!Bc^2=
z(q0LPWhf%Cf>EwDzdBmP9^w!ahFfYZQN_tG1&zfVKc&#3eV(YM8s$t%?74t at h>;MV
z51Y>5bwX*uHQ*;8p06M?;E23YSHm`|tdxlZCR>H}(JS0Yekc4*bjzOAg{*-k#^V{l
zA%YBH8<)Du>@PBMbd0xgWU8`LH%@DZ4z=emTCH-WO^6?QDx7N+vYi<xfDOB}ppgs9
z*Ku(!SCwP-HFGBl-r>T+xsBOKvk6Z^=W}wlQ}-fx3@^4rACu7?Fhr0Eot<{2r{G5t
zZ!tqfAHaARo52`clUxwLGlm at tT!7P9n at pJ!Lt=YixDL4FzvH-pqk)TNJ2{5!;4;{=
zx~QR+k|-xPoqSOCvw9-#(;1AhC9w6sapcQ<Z@*OFv8=ClZ7)|^0#?Juc|ECf!8z`P
z=Z2BKl+{n_IYU{1YuVmUs3h2JmceFTg|=qtt|@WGyIclz((4R|XjPWPKhdR*N&;rr
z`XTK(YF7(leU6>q5tc&6G<?H3E>83{#zw=!yaF8;=2~`?$?qlqmi4j$@j|nh%zXs_
zQOWFGX``1aD!r$9O2>S)Q6TGC`8F+36kfJ at q`B_)oNBxhD*m;~^1>zCYp-3pdos{S
zwWk`LrXMw4nIX=qIGV8VqGz at LPkwW~cTukhPQE3{vSh3ray_8XAmLs!#L$74ueGOM
zzIE&9<)4{Us=f4FzPE6ZR~LVMK&@_`r6;E*OOvxv_S}h7#E6bzL-bL>)kmZ9?K*3A
z&nWBATsnH_`cVg!Lxs{+Vg3h6d#HZgIM3MHl3{3P#=H7t4nZ5{0KfgjGhPZlXp`Xk
zeO$J4U|vthyuRj`*MS9{?c3N}@LA=6D`{?TWvdXsL5H>NnzMw+gtN<avswEWQT&Eu
zDW272Z0i>B`t%{6RO|NhxGyw3Z^-Tmwg+e>p_jwyB^xgHF|o*}zkFRk>QJ?Qt+x7=
z1mn+H64y_3kpi1gguK|1x96<er{>-VKlQ<9HQcDrnz at mmS-DMn&T%j9Y32g4j^-eK
z#7i=<1NSMBr}<vH_I)z0oD+?ektqcSIkvuXv$)_mcY>ZALh-EFbJme~kPbiH6TsiW
zeoVy>ANtxgcK9e0Y~Nwcn8#Aq7h at P0VFh=98-q9&g_c}k2j- at MXP5_!j#SvI#JO}J
zmTotAhh7EZUzp>;KWvp*i^T<j;7!6jrYUaFrKD_rd3zOg32WGC-Hwdj8JdC``lW_O
zPJ(%qDsObIEtn77nIhQUx_$IM<xA$WF3Ge7G8_K0IYCd^Xak at 7w|N`Rk-j2xlFZMN
zIV at uL%D+T;T3wXZrtlk6T`Dj5mtO5sjemd-=u{Ks2L9>Ii&qMFXO+$G<kdmXTpv9O
z{j!w33p!N?KS=mi8e7-LHMDNl8ml&4 at w5HaX8p0hJW9bEy$syEyy1*fJ!BX=6^Dvt
zW)I(ZU^updH*%_XV)n{U>kjJe1oNv)Ji~TUde)kdNY(%#K*Mf`@Ikz<^B4xPQ{9{>
zO>q=35v2t^gA&2xNWtT5rNHCx6V>XGkJP~)&#7+id6Q10p3BbV|CHTBr8!?YqcR5r
zlj}OW)spU!9$*5U+CICNnm=N?e%!XLIw^HKbEm9lXq?M2>dk>`fs|9`HzP0mCMZ9{
zH=3PHE;j1Tjk$wve)c|{^4UE);j^!3(T25x&Pw;6c5P?_ufSOsQfBZ8eS=ar_Bf at -
zSYcP$&PXrqexx#8E7a14wQ=s{$ByS$XQvtL=T(=Mx2rC#J0Iww81ZxFCE(UxHY+g~
zHb1cIhn%f0>1N%EhYn*$#b;i at JnGq8YOI&U8fSeZHcUV1Slc`VM;Co`=GY5ow{V9F
zx(_a*+%VUE^NTaiy(y8kub)YHgp10y6NY6H)zCeo at _t)JOLCbF)t66xARZbf{CHU1
zG6}G*#(@V&qxyLOg8z`5*WQBp3p(eE^)0x?mDRyl<QUfc&fCDYX$&mr!+LLO+09mA
z{jWr9o%e*(!I!dfgT9%9E{sR&+i3~Je5fyY%54Ll1Na5^kXx<bIW?r;^m~J=&FHt#
zctc;P%HvC+)Z<4w+EfjH*e7VGY<(_pC&35hjBu>sh%XS;qdWcLX`NHJO&7_t>6h)P
z7N!_8k}`~Eqb064^vm9 at hE1inK6=8|QaSbz6|S|O)0EYy=PkX+SPkB!s#v_8)#skw
z;`k>icp3atvj+d6!9T<heLnjJo<GWLAmdK+8EgxIZAcr1!=A0<6zt&`C*ice{*~Db
zK8Db{-K=SV<~_wfcj5p0fG;*0^x(;we;CRhshrF7%&BU<I(%#KV2oYNFaCPha`KPa
ziI?n=<4vX35bV)5MD^;F!EbMzX at pOvVM~un)<@2DFHExK<QcX+QW=_413}x~cZL2B
z^+ml&ox!i^&`-z6e}WgOL?2+kujvMT?)g+oeSE4))iFR9YK6bDr{RYRI!EZ;Gg at b?
zbpDe^=*OI)6S7BUh+!)tzPcN>a=^zR`#|~eXbJd}C}%716`dh>xdVM>Gl at sVt-;=E
zI&dEHa at 9_CgoXk8FA?Ku6V}d5 at NIJ|?Vm7#=jUg_*F^m2L9&w7({miL%B}9H4xAC3
zU#z0UJS(Ml$ohZ*^Urf3UWoAppO6aemchmKY&hiZ!SR{Ysp3|40>Qud?8QmvoFvo<
z=s-RTm}e4mM`4#GEwtb{7lMhg&l%s2+#}|ahn0`=DjID5evg_<-xI|pkvgF-e?q-}
zQ6y!g1fB_)2RUULo?VASgF}sj;n{#!mB&mo!QUMJ0}KoY-qW9WMH|;uh#$sdT=zLi
zOf{TerTyboRIgKFuGQ at hsrUL)N4c<T_)a6cgZ8{d)?lm`&oQG6<vA+B)RFa>oMH at p
z0DO?2Fiv0rKkf(nboWnPz>^$@-RjuPF7SqSZXV*>NaZb|@$%v$2lKuC6C4;FMh3n%
zLXpFd-N;+TvxT_vEHSCs-u-*s+;uT49sXU_uqA3n9LrWqG<-TwDsF*}!q>FY?dciH
z9KABv<~|=fb%qKfG7H2E_6_(qk<q{hPYT)a8<Q?26Z^+Su<If6&FCVV`6u{JiwF**
z$^v=94nZD2(dDM7%(@ftE`KfPz#41e$$)1fE^OdlFL>f~g}rZ)ZC;D~Q>SalCv8 at 7
zuNQ_n)fL?5w$J#*@;W;vHfQrX+`p>}W5;DMo7Kp7JKZSwfMeMimX!PjTyB0cw<$k|
z%gp!ZHkj^nHzLiYQ}ey~_l!HaEwVOF222}qVGne98{u2%{?1maE7A}ATv9|X#+?`L
zV-IIKY?+UBcUVE4bLu7zvDY|YGCXJ$Q8wr(Yzh%#a2_>U8TcO1ae0=KKxex`YTWkl
zjl8zTm#KDTHvG!XxF@=3=ZlSZ=)^ImlCYz8-DICTjdKw1FAA}pXy8b_Oj+f>6h+br
zo6Ne__wMLuwmoBXz{<w8RJV at KZ*Od)dUW>p?r<An*S!|<XBD|$bd`>}P~Usd_(^Bt
zn84`ZqL1ik;|?xyOa#hn(#_3pm;YjHwnr8<(veh6h6?E%_8uLFbna$b<29-yW7Fs-
zjn7kUjdx%x-bQudT1(?Gsu^{ABAton76*Nf{3Gcs<YR;OBL6`8$|kFFim^4<jB5)v
z_u$%nN(R}eh`LApp4XkR3fGy<eaZ~rz8xKN2=%SUy;`*AozP_T!~48b#UiRE#K*+Z
zc{u-qDG%|<9^v7erzYcRP+g_{$QsHQv?NUEkSXOWxybNd=$%?2OKWuKf#Hjk9T{Wg
zZNr$E%3gAon&4-qm=+pIu<Ri#G02=?3*p1XIp~fM{;IpVHI&&&lG|SKb(LMXG`yEl
z!M7la$g&hB$gB<?j&jeUfmsqVii~ke2bwN}FWXcPA)5$H#4u at 8UY@Ews6`52T^;>N
zuTH{Nm#8T-e8H+?7Q)sejy*;v7&W=6#;}%D=$pv3_`J>LkI;9CMZL~-I8V*X)ya^r
zM?N`k6Bkc)I$uYAY2F6pTb*k2a$sB8f_yW4nePfdXsE{?uXSVG=4 at PV%7{aoUI7k?
zh}{o+;*aU{ytR1tj&lRbn3JbO{x<Xv-ywa1=N}^fE%J|%9zpsD={F@}>K;;U2F<fM
zeD+iFXxzJx=l>vnSV$ifpI3!aOW8a0!s-n8LFG7KLiuX^Q}7tGlOaz9to at eaNUDw*
z9r0*T)dt0o^P<wo`KCK`F6qln&4cG{ysMR$a$5Nj3)Ypjr^;Ba at hrQ!v6{{07E%`D
zwFqzHoCq)Y8ru!A_3z<YpYh{}k+?Pj`7Wemb*+dG7N=iyc)b2z>KgbVr|BOa4#D_c
zq-%`)66t)Thjed5esSgn&RT$Z2`m?4pM5#6m-tIMr}^E}P3K!mWNe2ntiZyFs775N
z;?6)m=#&y}*Xwq7V@%z3z6E-?l=`A1p8Z9@)Q&aBUu-q6hb_<sy36 at S-czTgMyW0(
zuTzaEK9C`G!=~2aoMaT4<MLVsOx|YaG>knLj6HX<?rjg_B6Isdi%xqUGt{&PqTb?t
z_d%1$yaP=`nleq+_(MTQ<L?De8b2%OThfE;$)V}~@vwP*y`V=ZEegVZ<{s>|3Ei{I
ze at gxxWo$<}59v?)7I4QSid&wt=PR_^!l4I#(kLsqTl_kk2imo!Li}XopO}10sRy{%
zeX3HG9LYzyk)}>E|1kGDxi2ELJTKUnTeDp~d|=zOdd4sC&B;@Z;Mcg+*0%DaC|iZN
z_8s5`)zhNzuLempUDG!O8!-p33e%wTnCt(}D{68b^DR7k8sgTB<D^uhL;fl*=nI_(
z{of6=%~HiQ*lfYhigyxxdMlkk-NJh7=20qh1<vB%Wy_s^%9fq$TU9lGlP$xJ8uk($
z%rr$_|6Co`CD=siXz1}^w^~;rz9t}csv+L64I72J{b+&>rr<|`61;{t<kmN-Fxb?V
zg#k+l at 9#bw<+3k20rtG-;PXEXYt at gy5ExYiJtpL-u%EJ7{-!g8oLl{`{%;X`2YkaE
z;A^sHE1?hj5qjeq=w^@e%2Vsc)2UZ^<%~K|-K2)yoA>zAbl>qu13ZiBxp|;9F*s&B
z^t7nc-}JO0f7jDG_K`O%N-CA$#QdeB<pEomg)X$;?oo?4TId__Z at _dYsdV#$4_C$4
zPX-U at aPLMZz!nHGSZFWmR)x535ACIS(0CCTLP^vwLRIk371|en3I#R_SG@%LQq-%O
z_Y3^e^YEV3@!n>t9Pa^RGo}@KT|zf(Yqdp5H1Q3%#dOjush|3Fk%X7vyW$v%a;#iz
z at YxFSfo$l7F;0NvB<5X(otK at rN~9$^+{0J0r$hg>i|8xiJ79-C?UjJ({Pz_Sm%e}#
zm)&Ryzf4s}O at vK<XW^bo`&WlzTL*M(c8;Cjw&ow at 2d$FyAs3|m_U6LxXSc0A1-;tV
zY+qgAC-tf}p6w(ssk`P-Hg_l4 at KIiwt)5Alox;ehF8>&Ttx0Njv)~xzrKBuMv)ijl
zXLl|seGhh$tIGYp$m;U at av%IBWaCEpW^$gdWLlb*QFh_hF}s at Ztnfs39qL_=^{2B?
zFaMO;DX`_H$j2VlQZ`zP`sz_%<KOGMpl!_y<p<S{`ug-bV#$BcvxTJ_cdmd<<jFwR
z+!cd4_H|R5 at LT-D34%S>uS0QQX&fZ_IN+@&KtHhpV`vH5zT|(orpGleejU9F{(L^r
zkJI4))&m<#O5F at y7&I?YZY+flb97>$v9#+M at 4o3`)$31;rFS9U!*dNYQsG;Y8QZ6e
zqi$c6vh^N2iH|#C*@_}QM}OIoP6~w`e&p8JHsoIb-$c^S2^MT+e744MKgV(Zrb+Z_
z18j2paBX~l?4XG8j(1WD{_u##Gh6Q4xkT7CY$3KH5ij6)(TI0|$F`w#>DprGx^IJz
z?4YwEU<Y}t$>Th+b<}mvUMxChl+Ah+G7|Y%(J at 2v1Ynt0+Rv`T|4aI9Tq3{w)5gU{
z<__#HhKI$Cti(4+d_6tZbNCcHp5-FHbAhdR|8<XAl&QvdyeMC39KX&to|@)AA2J8$
zdMEWNg_7uF>}l_`w2B$4a4FL!OlI1J>5N at S+U+gyA?Y&294 at f%(k7ghuE0E4s(23j
ziq_CnwuWBrpD`t#vK7ZrRfwNR(mvwX13S!LU`Nx~7z6A__=I!8cyBKF?!`gx0}G>>
zTQVV1IuWv;Xn6~s`vdP814>L*_)4b1x92{1|GVjb$T}J|>>s#)AICi$^*HKq)Z(a-
zzJ)SjUqusKEIMdGh|eDQ*+70Y^^I+UT=^dYE8RH*`;FolUb}EC#@EZSN6~*;<4d#Z
zLz!VF_`^+B2M4{QU8L%h0xy)GUKGWN9C(186=L11q5FrGZDxpH8t}1yfDc(prTwSx
zQI3FT7i#oRQ)TNJw96f4r|$*nD6A>z5r-l#<}ug@{KzCn9AdoW(ZE$G*Un;x3d>=q
z=f&#|xa&yU1MbTH!AO=XJ&xBt=_Y#`mCGX`WMRFCm4tkslEiq#L1GPS)$jbORlmJk
ztKLF%2rMut&PkHSpM~A?&(O7Xq%U`=Vn%tMCN@~~9JEQY<}$`TvES-I`WPwb9QY%&
zsf4uIJcsRaGp>=gZ9?1MFNQxT={H=f#<hnye;`~z#_)&?TzinN4E{BJ8Ek_|T!cmA
z&)`}|dIs7)N<M1fz1w)NbFDV`0 at 4l#7Dg1Fjm7t(Wq(ML$Dc!e&!WDMQHGsff-=PX
zyXhIoV?W8IAXOnvHCeedluKi5sW6Vjgl<3|@DddUncYUjrGhN-)06P;-$d3B(C<xL
z4Ew<h>BwGTDrJN3Zx8yD_(E^YOLW9dz at 9z!TaPfx7rIfSim9~k+zfvxDKH4iiLFg6
zk5jX|z#Ht=)eMCn4f_$!-_tb<dXfJZV*OrG@@nhNskQZ%1m0AwI=>CJkL~m>_8PYr
zI#;iv>vTNw`xKY(&(LYfe}|9U1Ho@&`T`yo-J{b at uuZ`KY~tx)ThkTdQ}k~-X5V`F
zvdyRG at a)=4Z(AV4xByJSO4z_0r|X$M!K>L`46%Wx*H%@C^Dj8$4qWZFPQw4)#9kP7
zRN at a|PqLfj<@52c1_1|tWR2nyvrzs!&WoV`rTicx68y%y9q<^~JF$qXJO5%icL25;
z*TNnbi&>`y2D~%VrPpCYI0ODj at rZ|m^-S;^xh`K!_QZVO*dAsn#;hlFl#5|==*t!f
zUWL41ZbN;J_)M*Nmga5HKX0s|z&DEU61=Oo9)1z_7=)f41D%6EPoy4c4AK+w?FMQ6
z7Qqv=%~8ysHTR(#fbL{2?$0&C_RwKp^cc^upp%H-5HSShK0rDc=^sd4U_bu^`TLQ+
zObgFfb`J4l&cG-4f%^s2*-J4lU<b;IGBtCXOdW`O)Nhv<#PbEVEWUyE+Jw46<^g;f
zU}0*mOcrV2 at 4;RO5Xr2K!LS{H-Qeoeh{yUHjt2No`0^^4slcp$HCv<&`Bx9*6-GhC
za5sG4&iKd%7fV$`AOot`3g77#yw=ca77uruoOa)C7At(<M@(!UH{e*`UoO6DI at 8Wy
zg7iAlIV5ff9p%B9to-5?R=@a>7kv|93;v*=cEML<G3;d_+hs43H3$Fw)UiL5$-r+C
zUJ3t at jCwDmp5o|4tXj at lI;Kz1rn!T6_JqdgSu;`;huwhz$<4s?B62Q23_64Ox{mx$
zO42ULpa<x`wOaWU!Mi-2R;)5d#*sDz{~Q+q|4Y#+ly^DcD8{RBE2+;Z_<fOm#ckxv
zkv>6cK>8TzC8UqgCrwBnVot#32j71s7WmohRg~S0>!A1S`C{}Vp&dek%ZO`?+SEb6
zjy at Y*%tg7eu$#sFQN at _>9vROg{c_h^;gc~c<Afg{&sXo3Qsn`|&e-|Zh~rE$^AlwC
zk4wGSQG!?Ty_rSt)5$Im146?dXPkhZUx#y9*lJ+{bYhEPo3}l-OZYbLDf;mz=;t4k
zaSdH?CwzfLr{=Lr!oz|-b*dOeKKelg+5w$S at E`PX%)1)U(`=sIQv&+t<$n*hFxlwi
zhoFhuF;{IuU{;xdHzJHfJHs~*_a1=8K4C_Iwk;HuVtqS}^Fw)(36+cwp?9KEoR=^o
zsCy0?J_t52F8)_wtC1j3P`@xE at l2BAneUhp$VWT!TE-XoNaUsL6TJT)#s~B}j{kH<
zyy%Peb8M$jnx8?(|ML<f)!Ys^Br1<zgBY#OBWy>${IJD8Zdg6<2bo39T-;_}FJD7V
z=2 at YK+?I8~uh3x!I%c>V{Ti_`#5_nDGd5Fi+$u3658G*Cla09MKdPX=t~hY*Q`nor
zo-unm at mqNoKM{Cwj#y)sn8IC<@A~Kz!z?Pb#-c1BSg)e*iH+;Mjl<m}2MH!U;-*A>
z=c|n>3erwc1t0msz0B{!0;_o%^c1DFb{pBZ00+ms26$=**na^t%ZZ!7SX-oQS;%0t
zb!zz4lBn3Q$#JGOZoCM1Mjv*Dj10dT;#&{;GUIA#)He9~75>g7 at EV$=g}WU7CQ{y3
zsjp&sx-YR09Xka5PJDx%zAR;)Vh^?daMYlW1g*rcN5 at 5vBr&^mFvE20Z}xdig^h`X
zH}=$S^nV3xG!lW|f!Gz%mtAUe;3ryQW&7Z_YRTP?{5iHB@&rpRVh<4C6o+rUXLuOK
z at z`|vxS=S+lDiA at IRUs*Sl5lOhwsf=R_XLkpv!BB$Jt~Og=gjNa)Ir&*`3Id3$+x7
zXIRtP at T?FY*d<?f4a2v(c=7OCiW^^vdretzVh{0g8ISL_GO4&OBG+e{m=T`mLwr2X
zAYaXlaPVlr7s&P{JTNei%*3Y$>%t)hdRcAC+fN715AfDsxXy|7KkWDA?F>;79vzsr
zZ^v5PRlHroO{jx6){dpI#8>UEA^Cau9!>5R%JffDk}BO}AIN(9uZ4OG;~<NlF6+QQ
zm4io`%t+SV!?R70$sZ|I?~sFD?l$;8-v#_M at Vo@8BBt+IonQ}IA)H;?*Ohj`%t2qs
zIq^)T>bLE}wA#MjdC#sf4dokIJMm8<{z!(L8<5K){vl$^r|vV at -vO>h>OSzu-bZK5
zQC-|^_cH9dFDbqny%TXYO8GU=S0biy`22;wyxqotnGMR}S at r&2R88(QV at c1{{1X1x
z5+|c<W&`9(yCrGrdi^=AjTdJSb1KS**_k!VUl#nKv&7iCLgxP?{!g0wDX at x)uOU9J
zY{&w!{E%=C*3&cau}OfQU~=W4Z_bNu@#5&ScxK}P?3J7){-^L>Hl96P9`)U0!_o<}
z$e!Hv@{Xxw96p9WR_eZbJLmWhw7W0XYX<STm&P_ at KYAZ^zX1G`UksYs`{i<sVTIEt
zu+O#+$GT1>%dnpQb)T7vx&&dLtyMiTqI}{L7VRTiVG_*@LY%rF5~pq;Ke0a_J_X~X
z-uP;`iTKi%s at avsmu7~CjMjBVBd!&1gy<BV;JAK at T$_W~=FDi(DXdqplg2ThcP~a1
zSP5E4c>BIm at xOK_uVC7lm4O#{(bx~f;+TVDAr3VT=)JkiMa}dG97({Wgr5h#DMg#S
z2K)LR(l!-ed*panNjt=Jc_5Z_^vav9v;^mGk#?kg9e8<D(bvcM_4p at W-$crX-j&H|
z&z%AvUAP!FY-_F}4i5ikU<{yr=djM+nct~fjZec(#y at 5@oSIN5mdb;MuBr8x7jHw%
zxK&2Ne|sJ&q00O{YmHY3Kh^>}|8>fT+Eqp5-e%tyl-;K?*>zfZA^FC?q?w=}z6w|E
zs?W*&Z0)M=NUFlUo!V7el3$JTuKCMqjn$;Q-)gI_AvHSzi~B(1^aWMq-LJ`WZ)xR+
zkro~WR<%>n?J!N&a-_{+>jVdDjo*`ZOHr3G${OveOXT?}C|B>FUTZu`?ip*1dPj<~
z*VY=3ll;Tls&b^}*O?YQ;)p8G>8?h@*BkG~Xjk1LW%!_s6942{V+DEs_u8sr^1LYM
zJp3T0k?(#)u76ltwS%PJI<8L<9CW0m1L*~+5^b>3^Q at p*->rRJ;p%7;ub^`%qfBs+
zdMaqfnp(~)@29)YhnQ&;6Ecd>-GOIEC|n)?ygE#QZz``!6|M{X_1#~c2>afUUiTbi
zpEhm|Wfw4EuVP&MB7Gz1UF2sVU;gZQlW6#KqiE(NX=bHc);5K!p82l-f1g7vU$3lM
z;8RI-QHSiE%i-rD$DEhQ207|EO5vI(4SLTvQP&vl3Er&1QSVdIWxQ&=I3IiL at Sg++
zS&o*ljkH)%hkCRNenDOetgkbq-ijDQdhH+NKPwL0`R4*o;X3fWeSiDjR`NY2#kow!
zu*JMMe>v$7<J$1~jymid23bY;eBA+-^A9ji?nyCmoWzxsH}69H)ShAy+m?edv9}la
zCgQ-}V#LrZInKHXk70agRJv`sinfe`U*Ff?d at kHjyXH&|>%~bu&vF>kC}TaXKI6ru
z0&g|hc()xq|8QT~L+yz|&bTGK9KITy_C!IGBQLp7Pkc6_y{Biue#IUBUDncQ)&knC
zpsPjYQn|Btp2Xj_ at wmS=H_>l+&dw?~iibMD?}~y<j~4|y0N}dx({_R};u#G;&8N}g
zi}(2Y@#Sf?n{By?6nOT23>c4E(B|hBcfddJ`{+&n5uVeP=3K@%oEt*b1|1<j6l7h-
zK506k=XvW)&xaoa22ZU at s#_4fX at 1)RvEn?&@K}Si_K(nX*z`i~nm3p_it(lDA77vq
zyRh$1D=v=yG at V-@25lwwo_k>9c at y8h4B8e#nXt}cUM#+1S{|Nd8Wp|@w0<ha%VJ%;
zFMOHUL;slTdmcD(O;~$ZGFF$w%$ccokBWWm<`nZw(iE4v6XK&zQ>D(h?i!!jO>i`1
zzUWWFXFt7wSX2hr+6O`LVRpf4eEU4+$o%3n(Vn$cd{5MGH0m}6>nrHrg55){7(3Ve
zqsyB(u|Q4y(H8o`9>Zn&RN)td|G-!td!~_#4?7-8%dX5g%vN)fS`$B#^qamTCCOjo
zIa1lRqTcnCv@*b|V~V;KllLvtrV0=7Y=}8v2ZB(U^8AomWtB^*a_rD{VL_NaG%;){
zc!>@=^|)OZr at J2=p%}~obIdp={NGaWMbSb+gQ1_*D$U^2hxyOLnzUB-0PT)_ at bu&0
z^LrY*fMqt4$3^;p-b!S*|6lhg)B|*&_;3{Uf{TRO&D4l=3swRf9ef1(^Ww90u~f(!
zpqux`8Wlp~b4B~aa%j`zh^0ELKeiP3k92>F;Ah}eBtPGMNX+)>#qT0cBDww>boT~(
zV>-r;c-;-~Ql*9k&-cLBxJ|Iy-!6>v-#8^vk){k-Vl5G~?nL%3$R*!EKP2OQIQ+hn
zp#OaxtB_K26vqA-T?6;i$bJ9cX2fB?``R-Z4)OQo>48^NN_!C>RIIUKD&Hxy!)w6@
zj!Z|a9pFs$rKgSC1bloma8CCh7QgddGGfUPoGGQea?ne?L=I9pXsaT&54`hT4tDvE
zPggpxS<JLz4G$dPp_W(dAK8lf?j1OP1Lu%c&J5Cuj}UtPk?Hvz5zMFR8qZIZz+ at Ah
z2$hAGYt=<v`2SwCxvk|KTV`1JJg}h$7dd3Q6~*s7{v1AwMe5@@35vDD!m^(8UkzN5
zmC&gu!|lLbtRk{V_>#SKa;ouuw5UjIj#ONX5y^Y7hwmYBN!THDgp5SHq+)(0VjP0j
z5WlIG2UI(bK0%JGlRSrh>OBm66T{NydmHVAcZf{={fWS>`9>BxaIcTt!~f=coPxi0
zKi{~lV*jW&9RHYdq-Wr{)`91W&=&1 at -X2P9H|j(`27Kh-8JfnkIM-FWtr$ezt2prU
z6ecB`3GvH^58Va3RZMq=o^m{QA at qCMNP-tcy$_#J;Ax&%X|!@8vL|rxz;0AI73Q7<
zzTtzj1c#4vPa^gqgkPKaQpJIr-vVn8W0K@=oa!G#C~FtWlF94Kql)a5EVidY{7x76
zsoIJI2OscIuA^+V;uiRq$@Fn~eQ6A9XLiy$T}(b_oHG-$=2w5i_!(EB?OTTQpR`C*
zO9SJrLj3jWSyG;b;2IE213|97`KuF4x(w2~=R#BU_fkee&$tq8KMFjsS1~u|L(sjr
zO1C%tkuRupzv_YU8|Ap>esz%ik5X6G&JV!7Ex;ceEa1k+7dOs%x6)qoGXC95_aDt(
z-HJJ1F`jDTPkJKuDdZymQD)cLAI23W at GEd_JMeyTA)AO(2{>sX2fP-7y%q#LN&?Zd
z?0BBsqwIOuFBOLsR&8Qt2V*{mq3jRloFL_^tJPlHnrR7S#K4x~wik){T41`4#hxn$
zdp^V-<ZE${#BacuqhsWU5W|7UCW0!okB=6|soVrtO*_qU$ZofzTrn_slArHUz8>2W
zp!Po<inumuUPR_a at F!*lGh$7XP>Q~MAN1)w=|{&rz8 at +h`hl6jp$SA5isvN2FKNIt
zoetk*8)WdG8(*IJ5A>G}{oN-}K&~%7^&>ATdmZ|69p3$iX;8%H;}f!N1NSa?)PnAK
z6~FO#Z}CUbBmCxu5nF)SJRi at K%DZ#|=45&};zt+tVoz)i*vHghE-IN%9rM5sG)}LS
z#oWd`ehq%XGs&F9dmVIw;+N3W at OscJ&X5zZnWque4!koIdI9{uV~@3lkybjtr3HVU
zFFNMH+ZY7Ajh_hK2KE+5;5X=qtypWnO87Ye`hR<^-NEP1WLoh5Xj at f+N{w+mi1Nih
zzsLUs`AH;JBAw~T+f^z&bCO?;HhPghjaUIk$X@@kK|YwoYar{$pWg-ER_ZtXSRW{R
zqQ}npUH!Cw=ooqouHPJ})6N0fp(eBg{7F!Dm^S6xd;N3%yN5i49GSBn^%#NU3cjnt
zF%tWF#DnFL^=dY3Q$OL|gDqGs`YOm{C-z?ol=BAKWwgUz`#^>Gw+QCA;uiFF^^Jjr
z&<R&MU3V3gK+a?eNQ2A}GEiO|@NVy7+>DN`CwqCu6PO{(!|Nw6<J|)dZ%YR at BIi85
z$0WMyo1Q){9CoIkr2jVNRQm7zblfy&+^IYUcoC!XEwt2NFG-JWGb{*DfezP|MzMNe
z<7*i;RmQ|Cyh4UT#yYvu{nA1Qj#(LWz^6R+X4jRfzw4uS0+Tn1SHmF29hdV at 8|0UV
zE3`ge3uPDKFNk}<$Ki%K?w`Z`O596_KTl<a*!~jmGKqY+p+f8T1JWD7YxxDK2`Q1K
z-$HseK5)|69LX5qCtY7rA$~8!xwg15Z6$nPb2r)Gw~oELUpI+A#pROk;QHq9k1Djj
zV$5GhjAziE&(^WLdT>O$SBU0Up9*7-31$&{tm5J{FZmyg#8}mmM1N&i=oVspdEABZ
zN#M;E)VFGe1NZ$i>LVI!KI&0sT05?sVVuz(@)F^?1;92{>_ZuiX<o4H5a)LVERer%
zSn3wSK;M at 3mgWlRI_BuO3#el$baSw17*`7a`m&Ib=&N|DOi+$Blu_Jr%>OvZxo3&A
z<bMJd at O*Sqsw*H^-+_9Q_byau{Wn1;UuTfM{ZeRjzfLXfEy(kLeGHyIf;<Cy at lNz!
zqLUl=?i_qKifRWA3;C|GLL2AvKfeze3qNw=1B^0eVO}PBcpaUQwhF#jx%_&=47U)1
z$7*YyUzXX#>xvkGv9_$XuPq+BasODu0&xsv?BmLT at qoD7`B<at$1bRet#as7lNI~G
z3u{e-9RFj}$@g?oJpDb=52(-I+IX5B@@&`xpv}BxmIaXIoUMXiw->K2&zsj4FjV0M
zo*(vlsy)Iu=m8TQ7~nRtKTh-gs~y^sQ8yp5p5wX?X#>nT*KFWViuCZo-(~z`oH4ox
z_RhI{O))V3pw~=(90i-36rRu8TVc0#F}yCwQCigM>C1RSH`^e?G|tN_S`O^m2F#mV
zSWm7fs>0!G$QBEVoy)N2|2$^xi-VKC+$V=@cPr at r9rGM&M^1JTNxR~GsLlGQjeW_)
zA1oVocl(X at M@f{9B4aBIe7{Vj!}`!c=ZZ>59A at yAw}^ft{W8wICvAyQ6IuKVD+cVP
zz<)Yd4UZxF1jG|kXZwKeM)dQQ7{`v-rT<%+-DiCLD$z52LVTK~sX-CYb#~AzKsyq1
zH$ne%G2m`?o=5aW`_(L7J<$b6N;Yp0jL6RPn8n}Chy!K`)O^@jQ1=3i!|Kax%x;1J
z-3-lMYF6=;x7|*jq3SphJ2rFy%b6EfI%j=9q(^aOjDA#NW)mZh?2h5dIxj5rX!rD1
zS}tt#=%Kw`Y}hYc_1j;5ePtTicbE>)k_H9z`JrZc?V6T?1veNmRi5dU74N^K{9blq
zmXCjo_iNbm at Ag~j-2q;{%0JGujlWgay>d19d%4nF`~nL-uZxZLmW`T}<eYe6seij?
zg0gL8NVO|1S6YjOY?V&R>-G2vvLJb3l`+6Qf;Jlt<p%oaaYLzz<3%oY+C_UP!LNw1
z0v#9p1Fjfl?h!l{4|-vq2K%Y8+TlcY!qNmorcusLguTgUjq1YNEne*PCNFj$&iCM8
zaP48Eyzmj?PgK2fl*C-AePUUkZ4dYnd`zg~6+xpS2>Qmckc}aRcebWj%x{%eLyz~J
zshs{0wk*NpN2IooR~36vv55CnhcvKBP3=itXDU~TO|7a$6C~-T at vnK*0DEaJPfEw@
zE@<{%tiQX{cQ5CKa=pNBMDaQ0%S#Zq$=_Z)lwTEmi2TzB&5V_5Gj0IJMAW~-R{Vt6
z#V2Zw at O!W+#ikOKJkg2N)!OYS^EZ^)iZaKvE2u`T`~$>_>Mv{J0nrLU0eHeB at C(y6
zuM033l<g|r2b#S`u|%BzF*lmOTab&f-on=?{Y+MK;*z%F+0?e2Y+1XLgy_B$6?C at Y
z4jnj5N=x!v=?yEY{E{F$JsxySZO1<)1aay%&?D(Ekw9P&(W+r}I%%LC?fH1UCom7<
z*@;H1Wk|;$^?5c=1?wF?6t at JcXK=({&YX<+9MIA9&sk#~H>iKUwp6iJ9PNk|(+k|4
ztMvLwJ at jh^`+F&YJ;3hc$ny+*Hf#Tvc?zA=vw8YEnWw2AUkEGIib~?gS32{SnnHUa
z2d8r at -I71T{00w`Cx;EwYt&{s$uZBtU;pb1;5L6iqik|LWE9)Rorvk=;tOv>PTfrt
zy5LgZnr(h|Us0hSPi-agO8SIpt14>zFTi{qu(KE!+HYquE|kzW(Ct6%EYdzEb{75D
zLHGJ#cTlg)h~b!ppo^bF$9w~HaeFLqIL1Xd|4wxOj5Xjc?;hTH4Ky|gJYpVn4|yI8
z`j?DbHQ{~btLafBehD>_UI+h at 6N}p{QPh8we)C!|26nfrc)AsDfo6)?eIY)skfWmy
zV!^YvEB*;={Vp8;*W7C#N}c-ex#uyR=(vD&QY!aTVb7tO3c8d5ADWojHGJv1Ho+cU
zr)IC_PN)cSMRg{@V)Ax>z0ys-Dcc+P%EpsIW3Bd*%Ibbl at d}y4`Z&akj)AYMn4OgF
z8QcyX{qM at P!`(uGp#{uPAH*LecGorB at _$w$uBn^c-BHdNlrxX)_1?Qj`4U_f?KxE^
z#$y5<Ncs$MUD0=D5mFynGxo!;&}s4nf^`f3or&62sy3BZjM*Kra6wmGARnzf6<7$n
zun*q98pB>k{7}U9H1}e>A&zk5Imn-{3+KDkD4(lzk4TAaTjTA2ih&O$Bc%|>FR~_P
z;gL41Q72)iY1fIjHRed1YZ~KOZ`iS1$Jn_OIvae$yQt5ce%rs$Bx2J<`Cg4=y}?_%
z&)kmjvj$iYQnm{3LC(fj!KSc{i7RU3%H^|hZB#%LS<|5xL>~8lLpl*@15#h4=aG&O
zWaIhLNn7KWZL$$wOexvZ#(83GOWN1Q5&fo;x}_7J>T8N;KLfrF!P~h}p&cF7&zDiX
zxOOx8<x02ZAA*m!p<h>`U+0p3)jaO+SA!)dkn{&^;Fplp at y_q@u(vxg!O<@l&@WZ!
zUqXx3f<{fFMZ*3E@{n_<q%<%7(4 at 1)3`^xm$JoGYbtokhTH?RRvLgOaYwA4E9dAQ5
z9XQ-A{*bAT`{tz<&&kU6)PEV8=s@@!B>`76SO(0+ at 5=FwQuOyh!DT|%h%Qe9yL@~n
ziaPho7+HI0s-};NE_?(mv9`Q*D{B2$Vs3aEsu`4B99?LKKjheS+2S7j at 98NC@<Zu}
zJ4s^cXh&f_BQ6#f#^)jy0&^ex2JM^RrLi~g_#~z=U;(h%y$FBg_}6bxkEf_dM}UEh
zd4mOh$dGgUUnToKk21ujEW_L?!`vzZKU4<)w^GF%!5(UtUg^43#T4wKUu~%2qWm+%
z)3BeL2mkq5yl||aL;aIvJ(-r;qK7HY#3x_lCuOFArwXh1`UmTbD6~_qp&4yr$NTkM
zRJ0lMe9tR!kWnP^!X5jzY5a0BM+1IjKjtzhU-;j5fd_o~loVJth<ynD`DOHvn>Iyd
z!CK*C{M9`|AmD$lZ>6?c;;H`tmwHo44eMrn)jh&JwxEqmW}86YCg7Mte|V;u+s!s|
zBF%JQO^<;LW4)jUeSp}#s#xre!T))bDk at ZK4RX?#xR3pxBq!jPA`5*&lhPPRA>J@`
zYDRK{g_96j#tmr;&Y>@l`a4e=pa!4lMR;reRri;M*^A@&t;KIslNxJSvqeO;7w_Od
zamWs0E1gq5+GC;RJX`T;YHU9ZACyCnEy|`7i{62pWH;FxG{T3UVR&tfm#mjgFQS11
zY3Ke8e`*JhkA4rMwnC<0mp%{qKpJdwG8S_@$@nwit=+y_js7f!z4r;&UsU#whhYz5
ztYj|`@QZx4YK%e51Y+);;I$WXg{_#2X7b(-&_{-<_14}GVp}31 at 4}jBCN>!k{qSBq
zp8y>ak%c<;1JC-^WLE*_INcL*9=_hc9W>3+j`;t_f9*+R_n~;gUX>mPJ^B+%Jo~gM
zjw(X=mtm6%y#oA46aBAf#UDF-E`;#4tk8~utODb(6tbSuT9zLN|24?GHGA>z=y&ca
z6%1R3KCEBYxvA`P^zj9K7(-(`MZ7RS;w#__o8Xx-*07DTri%T~BStP&wNX;gOwSZp
zGU5b3cuF!69{}qOk>~t~=ihYLXPkz8!$j<de?$BVH>weGn0)ZI<FNKGrEcKf7~I<u
zDS%GTD`$1UUDT}$^JJ&umV0(To)p&m|1ifL|I&)Ruzqq}KSmYe&>jW-3d&gr|HdHr
zOVOZj`N$vQ*PGVv*u%N96LmueTXaKTvShA;9~!}_lC$T`bBDVT|69Tz at UO>QaO~@r
z!@uzjo(;T#{Zwu2b=aXaYEwRFK>1 at sH!0!*PNrWA=t!?&NIcGs_|8v6w~nzdW#g4|
zD{aTV^)D|~Z?lv7RA_%+9U508H_w%Ile+iIw_x9q$U_|X!rRm1!E-I9uD}jE%wr~r
z;ZSL>rup at 2vR1S~KM(=@y)O<Qa9$aZ(T~5^C6?MLvDRji1XW6fiaO`3LFc3|BE1rH
z7H!u+d_lQR*k!uZJLPTtFT2bX=BZGG{a76AG836Lw0WoW4YYp_{viqJ2H1im=dDA%
zn^D$vq{RNFD&XI^r{vky1dnMsj#U?1uPz4;=|$>%;{)m}j-Qb~U7=Nbz_tZga%>Wv
zqkAW92kae}QoR8`@^r>K<E9v2ANQkRJ7rt(qNo%xGR7kA<`Fv8^Bwoivi(vy%2oJo
zla7JCP9|b)FQhK#e(JzDH at MbC*bo!uv at jZNwv@W;uwPoe4K~T-ouW7C%p4|Cf;z#b
zZP=siv2-eAnOb#$$BCdSJb&pgdQ6^$z1^#|eGlX09_Rxy?m8Uht$@r;yLQiv=%5%P
zV}TyulFP{2^BCwo;7^e at I(sa5m$8sfjLm=_g?STX2p=t}_89G`<0YO7^?nol+9$j)
z<4fS#&lOhT-!FRZRCdw{25W7g%XG{iGWO3$!XIFGhF^^EpkvSfvd3QV=2Q9Qw4|SJ
z3-zH!>c_)xvx*vvcn4$Q&-!Vjlp5PF|B%;1zFl6to0>%A78ViP-dM%I?HE_s&&fRZ
zSPAX>lkRz9Kb%+;5B=un4!S4hKPGgK9;5IAE%}%WgnUy>>{kn`9P|zGY!7{&?F-)V
zT6-XSmpiefhOBpPf`0l&{);|l*isvac+IFAli1Jak~p~EpO3ZT8t{4zZMA`jB?x<D
z_%yW9-U=^|<EGYcKVNafFAe?VaTd7aCi}PMYV7?7^lxIwG51As#Zgy0eCf>F!YJUt
z#%rF=NRi#v&P0rEF|Nletz-`depds&_n(l*w+p2>AHac&-UoV7bEbv6m%WSL32ZJI
zzf3R at df`^s!`_hlk$zEGFDlJ)%B&X!Zw2o+4|baCmB;)i(Wy}uIDT?MX~R5DVt9iF
zf2`XbY{y=ClrAQi*x)@td<zCL2H01Dp3X33)8CBg(lsB*Zfs>Aq8~Kt6P#_uxB2!|
zg{g at HPU-q7m`}tmD-yo#1NK*>ER^H&rw!I__6h7dkE7f>AwE<WoyRLBxTP4ER`7~X
zXT;?%N9-MI`x&+^#0BviWuVW`Q(Hq^O=9{)!7&bW1h%ZFlm-1h;_blEKN%N$8+hp-
z(5Z?MkX7tgd4X2fOsK>)4V~mthj;;2*o at tS%n-JD#GZ>^ex!K7p6gYIJy(@^{l#sT
z7l at xMY`RK~TXPTiU3SpS(Z<pS*u*ymvVE|j8=(sfPC&lbqm<~uD&02uL*MythYd$n
z$Y}J98rZyVg@@Bpc|v01TnodDFAe#X at Y(qk(Y+!rVHx_?A3V9SGn%zk?4NfZ^5ZY*
z<H4j2ZVR^N at 8%XX?CcYdnH4r0`>o-?RH`HTSDps;tvcv$4&wh$l*&(>6R#4LtJN~Z
z%MtyQH7OXfGt~<!b@;uI5#ts|N~o(X7hxwb0x{{{gD>v>=oq3;sn{Pfr$3EOLV7Kc
zKk>0{DD3=)K4(c>H1RF|l!*_y7pPv{(9xE}*Ei6DcZ{X?;wG--XH0xk=d;toO{02-
zR2z5dQj9wv#<BmRQ&jWue77!ahXrY;>kW1nbmCh>Q;b{Rj6*(2<%D-SbV at JFpqoK2
zB%aqaC7z?5603}rZ^dn5q+2E~cTb;~K^>U5OsBvz^=u`V2HWCPV`XTHeEM1~@+maR
zV7tkEq at 9DV;F;w9I&{Y&pQL(|Q^2Q7^R~t1>V at A0tf{W=M~U^M5B1ckcE-Jm{V|iH
z7jCvi)<uM(9Sj~E)9S&IwwR0g<7k^TBo&;5o at NtxmQ{%RL at 91T|A=`|SRX&h(E3{X
z65`)*UMv3a4rEQho&Go|WGLwICWp?BVDVXq?fNqr^yv>KUDAsix<ljjf5 at v5Cy#+W
z{|H_m{A+>F#4`)ZpUJ3iIeT>XulXwVg8RgG$;};W%H>J#!Vj)FJ`g@`vmw`xMoN5+
zqmV8_DnlBHbScs~fVUE3?Vd#Wf{)BM1Ph%EIc_14kC*D1Cw+#EkoQ8)8MX}T-ug<n
z4WPsD&v_buchb+EiJ2DQ^O|$K^fwMiPx{%AUf+WK=*{R+cowpP&A=36)YyMS0Rtua
zr85>+wy#3mcsd at jcxB&Uo=pLU^M35HWc#f2CZtPck7(%D44V2U24($igKvG4!L_~_
z at BHyU-+|3 at BzXtv98(kRg?ug#c8Ju05a_#)pW~GaZcv{xwU`5tbLZ3$OfmR~EYqJm
z9IdZ8JP*8Ug0U{gg~(pB!+>`Ty~NQOk6+P$CObg-4tAkqCVi+E&+QJ4L;s})euy~A
z`i0^P+Zx5H at v~IWHD}h^+lbC)_=3i0QEU_N^3boJ4EgVVr9J=Z*E1z#4U0I>i1Ggi
zWCqg4nAh3`VuSso)G%O}6Ipl!{P2eGY2cMc5?iLPVys%>4)b*QS(AIf)bb5WW#wiW
zz9;^9GLu5xf}dNMAzTPsxrnpGpC$4QtR-ki#6|MLwR5=kPV`~mj3r_}wbxPizP6Zb
zd;h%w{58;uO<oEU;^e9wZ3SO9VyBpxI`Ndw=Q&GK;>7O6=ZvMx;$Cb^OrH3o<67Lr
zj>G`RHQ0h<KRcL0jMnEYO<usw at uIqM-ZOCCf%B(0?;1G2i}Oyzzv$4-+iq!!Vq58T
z at TotFIW!BtW~o#dbn=?R;w=w;6`!@w{*=G#SLxh($hOOgp3ye}7#{b_4~ivc_fLM*
zV4>sBw3{0p{7bo1fqAte=sb9b3&nwKPnI%oEu9_F#&~P8RTjuJ%nftFJ7CPih7{L<
zZ(HU*0oO0(nK6FvI;ZKo56{c%g)WBgoPzQBZ2 at pKk$#7CG19M)#v(n8bP3Y0O<TDo
zvPaS^%@*>$dkA at 7vz@%}UWfbNYE;M%cfU^F)np<+%>8Hb9_pPKdoMDcy25yA&R~D}
zg>x#dYxDY0j@<$qZ=^P)kCC<`eTdYG^bt}^?m=0z`*Y-ZO$E;F?oRlwMDs0q)_oZA
zQq4~CTuB^dDcQ-oo!Z4#JHF)&-hB at KSMB)UHpl;p$p6-x$^RZs>Hpuusr~<ZIIaJG
z52us=m0bXDWWyZq5irBu at D5`CuupN`HE>S!!5uj795^R_A;6|#;oItXz7OZkIByv^
zCpzjoIByy_ at 4@+PoHq`fcL(I*`9&nI9l at _f{gU9LyBsm~G!8xDLNe|H)R;f8(Ok!Z
zPQsQ6bkZ06B=lxOS3|e>6tblYF7dFZSyAbh`vf#Vsy}{MtUvgrmgqGIEd@=8!}$AY
z(ply>=H?O5qA4%Bps$?Z8v#E*)`YaZxQaCvb8NZ$+6(sfgnGNx3B37c-m!9VzWK0t
z`?e4tl%0;UQ}hQ9C#<!Cj&%VaVt)KGl=<zSWl|`scc9E3q_^PbT!R1WFH`<M%KS0J
zhm>>O-JrZa3^B7j46fJtD08`^OwiDQdO91V*N69)d7bAd6ZHb0<e-PgQZUvLLk)cH
zABUq{^Jq_M2jOo)PtIaoJcVwR*aDJ!O88+qbXC9y{@-Zj7 at j114Cv(;;4?yZTj^B(
zv7;YWI{IM&&sQI{rjO_u9kdPW258;i+ndO)q3a!J at 61VO5rdtNz21(bFEEx5fSyZ$
zGeYQkqDjoHGG)Nm^y)zS;$Ns+%*cUu5{gQ(Ms#D1=))Re9xg?hN$A5AN0|U~A1L!1
zl$APAW*X95>LzdKaJPXntNursekc>|i?Ysrd02n^%Ww5HUw&O_-?QCOCiQ2T`w>s$
zyZ$o2{K`@0Ez;J^NMhqn9i^vGnrChO|5|sjH|k$^#EM%awsWMixDjj0leXC6#wf8%
zopQ7eDfBC%Nyqh3b9<A0`{_UY6iK`ZjsgGZ5$E9TFM|IlqmPrdYcuqJh<g>mN8I6q
zsl-kzO1z at oUqtoB`(hnS2|V78xT7eqd$N>gou0_E6Z<Z*t~lmUDw#uAKb8^S$cUdq
zMsBw8NNnX*iiT(r*7010AqMLZ_!?q=0(~LTJ at 9;(8t1Yk#lGX*%zZW7YcCE-Iz(bD
zxtgJaxJKtf2QiA+g8!w1pr;UBAx&%#c0%vh>CpKtrLGXULe?2Yo&#GM>ybKXZ8Pi~
zi5{_@*kvPr_g0=1Yq}HG^g)W{ytw{+?j_{ok%zq at JsWw^K>i@|2?P1t$fphD3y~-K
z2t2QP3;E>!{MruWWdr%0isgi_qjy4{twwu`fTaa{pQ}-ncg5F>#f|X0>Aw$|*X!7)
z%?fTisgCVHj4nUu!Cnz;U(!+>#cxHty{F8=@twl-O1F)75E}~eO<-NCn1#SLxk1+O
z(mGO(M2t8pqF_7p%&?8dUVy~dV5l(YH1h;6$mf%NF#iYOSj5VY0bl<K at na5+ROl=l
zsdj=-3Vm&pMa}vnZJeAiTr+=g;MN600?!Ji(BXaod1`x*2JtFfAt%Z4Q2%p!xf(c6
zhg3G;|JpqT$~JddaONouyV(jozT at 6E=4bbM<FE1d0iSCtd<_+N=56c)yL?AOcJd;y
z`jc0bqRh{5t<%>B*Jc(VF4M at jj+DH;(l1VPS8_i3uw^RSyQZ;vXzwqX7Wb53MYuEG
zn_WGWQ!5Xl>|DKiEXt;8rRQ+%pi(EfSv|B-tSl8H4kpqIgs<>z&TJ3QVh_=&D`Nbl
zbI%GhquZw`CVrpk^7 at rTf!`NXRTo=<n;Y&qMcE!s)9-r9mF=%Fu$d8;j-u5ux23Cq
zsSwBR=76C|@04HXVyLDZ3F3e)7{ZNIXZE7ar6djt=$jP#W+{`JEe(GU@>py3$MDns
zPNk-7^rzceAxF7icsr;}+G4D;#s!tCXBlnwxILYPKLq_OeLiTe;049X7Ma;kno-nQ
zxKsW)eA1^2I*{K5o;V$AS(>5_xYOQP=LXhIT$AnVEG#$JQ&lK?@1MTwUp0Si9z59_
z<3(mpRo~Pc_uokA^y-MMz|Oa)0t1U%Iz9}0m%E%d+p5dlVoCiJ*J9W*Zl3Xccie<&
zxYv~aF|I|9pNxDXWcRnB-$g7>wzpVjo(mbMlS2k|Pcu*WUjKJETnC<ZD)6X*2V5=`
ze#3Y}-ksv8!>nO84)^d(geT%5px;-J=kc5hb}rUWrI7uiuJmR@>&-yQCJkt)rxT;w
zphs(CRFK!MgFP}cUMKbZU#}lU*>f9XsM}Ja6I{f07Vbs57;?`!1lNhZU)T!_xQrqV
zml1psYutqXb_gnOj48N{cO#HKX at A}94}7ZMkoqCLj_YB#j+n6K=}3E!PD9#ldEM*{
z+#_$KUP!$p-tddu9$bq2MCrAn8cTH0Q9RcIxkq245_=^vi}(%&P4GwM@>JFEdm#T}
z>MZQ5bRP9d;Cb at j#lT0GOf=d!^}g1^A9!}`3BZFatwP)Mko)k7>@4gZ?gm-$Vdl8w
z|A3c|GCKBv7sUB($oZG;c^5iV#AsCL>4bhPf<$rk5bhx6)=QJtxu+;O_l?j|CY`C_
zo}a{&%Q25jFjo~$cF*wPZvOF_di3+t at F|#MNsB+hynH%kTCgf_MD@^~Af*=Pt-hm`
z-yyy0>#IC~v<2xQq|KlY_5Ncgtz}*{)aOF~ARP=FgM-Ra>3hz*e1nx2B=1!ZeM77?
zNQPFsB0VE^tsX*ur93Zoa-_d;LqHdrl{b+-MSAts#3j`jcRk8?7uBLp-O96z?|Y~b
ze at 0AIllUwbJgNE_bAzfd)-0TmeN6T?0UHT_=xT%h at Q;lNYwG>rtLR~6+CzS2h#g3m
zhZVLC&*r4p-{$1Qzs<>42j=9D|6 at +NI_BgK$DDi_^REYUr5ACWG4}@MCc(1bi+mE&
zeMkw;`{x7mvgprw`3sqsjCjeHm=nqF&dM^qdO|hgwb*k;{W&LF)5%<%hq)N-n2XcN
zT*N$WcFfaVxHkv)BFR0Zi`Xx at xnv(TVQNa83G|b-af`=4;w0>&^jPF$$3H;+LHYuW
zm50y;9Kl{)%D#v(l?*=y#C}ITpJMzx1Wx=@&^g#NRqdBiyfW-h{~-5<{YNdq{2|X2
zW!10MVl1_g=kZ)G!A5#u<wlbGRIgq<VJpUZPl=js4;T4cm=UoS#v5bZr~h7V%6LX9
zh3<^Z>$n)`Suw8(-k^l~3GJ}8QNnhkUa^qD-j+rU%;Tc}n#WK7YaXW(diLi$o{4!!
z<}sPSWFET?%;PDz&SCz(jMO|ZZ$ofS<~^C;vyhVc{TkA4sW-kM3ogTa4wCp_Zs!Ld
zN8T4PV)`U;;Mq!pfP+wQSL%xA<^@f_9Pg8!!MsmJyg-q2^%2-+W4~MnI+;|lfA#p}
zOtjZi({F`agY$I~w!SIK?8<m!?*=|>!b-GZD!C8c2Kof^`-EeD7eP-&=65r6$z*;%
z#QCy4Teu{u=kN3T$icUPt)i?xa?r`{&p at 6dp{9}86tK-oR;lMd3Wfh{WgTQoQjGtd
z;kWWM{y+Jy%LK*%|0%FDoM4k;=QaSJw*)fXon)@S4q_*-8yM!Fa#qS-9B+2>U8p><
z>L$;(_#)M(T$R;>cv=pfh%_)LTJS-6$Ewuwrd80{@}Ic)<nD;|6TX4?#nXqayKu$F
zMyDvWs-5K>Z%P!&STDS}1+fq3P2H#A;)yPvFBOam-i|%|XfC0!6aM`j?Q^I*peLz_
zeQ;VgC%=nw0VYhZ4C at 0W%Kg;8$}=tV`3muMZ>+iA#Ku7)u6FGeE8$ZH9w<Gy4e=;|
zr386y0{*vV;D2gB2WqnG{^Ex;by&v<FVrfDS7_<ukzJwbkfX-{%OfY?O*#SiMu~{?
zxD##Co?Rxr$uF0t80&#u(j(v^Y=~Px?9`_~2Y5SRBx&c^=KgYGJ7AB~95NCZIN~1;
z8dd}-=mg*=iI|EI>^TEQ!X9AG9>mo}xu2pwUc4~G2XjR{CA0r*^cn0_LC@}zbLlF%
zSpfU<&?NA6;{0yVochrHvU>b;BKW&Rk9K)DunqT-J+B#hGx0JOnt5ZX`N~UMAgd*D
zM}E^OmRN|+4SnqzDwR*@w>QbIBl1PTnxKCBXRYdW{70`~jl4M^f$%wq3BO<F5fFoU
zw`|W&tS4xLpmI`A|G`0Jj?^!xG>=*Fi~s0J>wp_a))2_ro!t=U=@-ce=Q at l<H~-ba
zFCQs!O7vgOwsJ`;s{AvN%3u?)0qIhtn~_E#UF+bzw4UoS>ww|#ROzzh9%R+fxqp38
z`eJNb!1OGe-y)gy|1kFLaZyzL{}7ts%8tsN)soyIk|$h65KRFES4G`r*=1q5Y3;gs
z;c*9cz#EcfTB&R%NLhyKB~vQhxR#nJgsIU+3hT8EQPIc8Vqh<#Tz>B}VBena_jmha
zUT1c8=FFUPKIfdz_5Jb7*WOfW)c%9E^L(W+q=E6y+YbJWuT*QMM5PbpqT?aPh)D$x
z4Eu#=bO?!+uTzp-Crd(laei8v60%lVW_AFp+Q;>3$V25-&1UGo at 4@%154ivRg6H8s
zoM3R$nRvz<Wfn>wl*Df5i!v3ZA4(O<k#3iH-qwdSWVhH<(El`UZG8#)gX+NkIq;+B
zT@*=qEm#YhVP~rz*!!VNcs1{JaYCNbwHfClB|WjqJVk6`p4^y5eH}Y0dPA-Jr~R-`
z!$z$Bca^Q^EK)5OK at V{n`Dll*kMPVA_yAe?%8KGcoA55+9Gw`gLtJ->lHZBnXW9 at O
zOs=;k8GaA^M_C8E0K6C4j^BR(_v|j4WFXjBz*JHft!l=)^;%gj{TlcnDR3fZlkY>h
zps*V;+gG47A~B#LDDR^5K|R%E?L%3E5_({&3S}?KN|Ze)D^T8yPr$nQ2JE&=LH|qC
zUt|3ogXhN at 6Da5wfUyX?FLJLa4tM}#ASb?qJ{-%`Ko<52C2{t9qrWEi&?@R0GrGb3
z`E1D}LbrhueBWZ&RI)&;xed-UHWd~457-G|1FV=8ya~93bwqZ`x*GHd?Y)n0`H|&O
zr$Z8_BTqNhk~p4Cj5^`pbeZ<alLY?5%@HVpO at 0XEoKu5z{z^y${3?e9OnlM4Y6|E)
zJgl0NYYym~MrNbCmtg5$&^gvzxAy{`1|4U*w)m~keybQgNc&?Z94lnN{~Xm;f~N2I
z<!K3?*=>|Rp}d8;^9wgGV({ELZ3C{|^iylEqHM)IzY+e$OSkkFG7n(S`EN9j`I!mc
z=L^F7hzX{{O<-COJ=iVy)gTX&p_jV6%I=?HZnq<k*OPg{q+(uRPC!P<_ngYj3o|z_
zvblND_#gA)+F$d+f_XvaP!-Bv%#S{9e&mt)V6b2e$lSSv{~qC<Qz*MpeuwfQ%9AKb
z4x$q%@1Q)6@;1tEQ4+iNHwB9^-f2{AsBd&P*3(K(p7;XeJ4T&8mGBQb at DH#JGkLK2
zjv3fjK{Jhz8CY=wc)(e(p`#w?G`eH4ZkcXJLnb!IkUC>W6YR{N#RKz5Gj3oWq3$%$
z<3F=4$gviVXMYYn&R?&yHAY?u#(%KC)OqtG2~VS=@jH7D;@8P_%po!_(*BxDjsJ5l
zk^e{KwE`2q^%v at U%p+h)U{2wCQU2+ghPkj7dQd(12LtZ)#T--NcOHJfhcX{!C9aRb
z^>~zHQD&li24xn?XHll33?TCg=c#B%Hh%l#_bL2N!FeFc*y(pMZ-2mE1Aht369N1l
zqy!6*{4Z&b9SO`!rC|d4{3O;c8+(kyq;QKJP41z(>D9brwdEO%C>6dP1V=B8GGop@
z#J+T+R{q^HLNY#Sf17W)hTs1;^R4lJJKx4MxIg_IdEU(-cnfn5v1y*QxgQ`8a-`Cm
z$O}YHLB6(d{xLR at a+3Xs%O57RcCreMij{JheuuiG6w!5b;`d$AWW;AkuQ}NR;*!{8
z<ge!b+Xi3Ps6NCUR=6h1D#}AI{Dagd_;Un3PaQ$>XZ0X=6Lj;StA%D~V#ZkFzwiKS
zG;l$-cLVE~(CfblJ}%08uQ9;gCF_2ITMMo|#(npJKSO*rEQptiM2YJ~5dt%Gss`Mb
zKenIXCFA-<-2W$h<j3Ru*H~qZ#g>762AJE34cX(~k3P6Uu&Us%W`e%J1fIpzY^X{x
z)Y3H5qh_!M`bLKj<fcMjnZProYZ{apnm0I|4)W_pEl|V8_1&|Ge;{&ZZ{Ts_>!t~r
zD1%RQ9Pe)CM?u|zU1f;tC;Fn3Y0w=e5A-$GtCEXPZ;)%hOO}q>h4t&}L|^R3zTk&d
z7z at 4jJo4K-EZlH$*rNT~?~y~NpB}a44y)kSy2~qE15RO$qCEA8MK0D%qJe+*y(?A2
z at tL*>4T2r`9VGTtAa+MLLh=V!x&RX{5&Y(jm){PV!?Tcm8~gXO5vq_nHlHf+^49hc
z9SYH<z&}pOi$yMQ<P!x>n9@^3MRdz4#AP7|_ib+7u_?8M`s{Jh*h_XJp9%I8_|af&
z+XFwuS{MsmNg8#BtfhoU3S7g at d0mu@_ at C(VMRB>K89C-qdbT5Azuy+DZGXCC)L7_r
z;`gm`(=+ at UUB+<YSJUs6fqnNC%u!{7JN+3yKTzD at JiQvRfn=Q+MXrxOL--|jc440}
zM(2J`z7={-!=L0?lz+534R- at S<nIdg+0Yj_^XXl{HFfg5U0Yhkp5M3H4BsP1osE8j
z)PwSrp_7IVBbTf<=_nT#!hgy0CidTUl-(%rv?-})Vu3BAlVX3AVSmKD3hFg{PN&!H
z7pYE9Avn>%X=2&y at VC2IrUwSJK6iy$cYBM$DQE)C)qx*2 at g9Mmb|S{_E^?W2{2g>M
zpCC_CjcyXZ3G1E{^WFv?)K5gIb%Le=U5f4!$^`fujv(<R90n(uYrr$cTvK4Ky>h|J
zKFe?uJZyWsVylII0plHyIT4TCXA4ozL#aY8I^;wPJVx at N?YT at 3<f1!-YmZykar5d=
z;Q5ew^#{s`E<F{B^9P7cadgE|<8jZwiCyZoG12yOar^r4`##5KBX+H6YJ>X_7yidW
z8+^;iygG(?bqw?BSaTUSujVn2Fs~|@!00K1^NRI6mb**mP55D+U#tSyL+~NwkHh#%
zG(YJR_`eLFG{74JJM^~T2-d#L3Fm9eI|4<CWm@!aKKeP1UPOHTQg#SWsc*s0xAnHj
zfLPI7U$Tc2{j5TGaTw;>Pomd}+ at szPKiL5I$#yAUSab&G{={ci`9gDh$2!BEuJzCh
zFVcL5eXR#+!+-?^?CK0ji!e`&T+QOUxbII~yVI4v=y#!H4rKl9eZmyz`^6z|!@r0X
z48=34s=le2n$JWsRUc#qPAB}trw8*X-_!56sq{)JLZ`=k8pG)okqQX%{-+`J+2c at _
z!3L!2m=0d-7Ml at 5e3bi?&uBIaeuTc#IH>2?2Kn?8^wl-U|Jx|PiSyllA$jU_Jd&es
zw at 1-_o(1xJn3rDLvrGe>QtH<3qWv`%JL2rMV^l*RpS#p5-VdQGM~t00dwX}$G02F;
z=ws-o*|i-r1fx-JSv(7W?tit$6$J<rfip56KG4U>y}-wu#p$~`26FZh9lvhLfL?uq
zQ}AfQ7EUIfgLN^^@Gs!Zp??F8PbIl(<~R5AQ$v2xs=yz~RQ><Ge>{CcHlSbnP5RAU
z%1n(cRskAKMmyi&)?3JpkjrAoIAZ;fX-wM73jw)ac8Q%=X6g7g;G2mu;3<lMgBVxj
zkA3*B?}W at pzVZ11ojnyHcmymaj18AB{O}-MXtrBdd14*jix?C=Yy-l&Qc)He>p5M4
zD$qv^&NEbx;HS6wWVqxZ8^678s#M(#EWHk#_fJjKd<J}b$3UEWu0wevBwG25xn;E!
z^IV3tJ$68T^;ih{PKU3#kjT2=g=P5<24W>bHYh&{IcZ{^?!rFDVh_0aSNl8h4B{r6
zo`3R8gR}D&$cN3u)<ODQ(xs3?2LfLN&r1`|dT1s63N>PIA0ZY`N at Q^IUAfJ4C1~zC
zw}v~3e=5Hk^~M3u)IZuG2*f%lk46k-QMRih_$Sxo;0vzG;Pd!4#gn-tl5#RJbVukr
zQhz9LFG179_5r(xpE5n<J5$_yUHERa4fUH)f0FuZ_?kOA5dSKYadIvEOQ0tuaeZ>`
z+im3eLEFjytm8Q9NF_Q0*kLjt&nT%j_#m{BwIZ&A(-YVczkqmyLI>7O!Y{E3*w6gG
zM7vvf4$l_oW-5t(0zTp#HZd>4UT?T5-g#O9`t0mbX|`gV+j3ts7u!=HQ}iJob52<)
z+lTdbHrlXR(h;A*VdHiKANL{jGdq#j<x1`TZ!&b3Gy>Mbze#eD!VhN;_<#(QJCNrz
zg;ow%=%*NLx;5YhmDq2KB|pW>UF}*0a372>y?OGfjv)jy-(G3B>G7(e9=gS29S4Y?
zF7^%Jygq*zb6pRALnr2MZqd`z4P`IVQuU{T at tQQ~LaKQgR0-Xp`6xcewOKnBbSnj)
zQLbBGEC0S-p#~22`@rdxs3PN&8r$E_TJ&$$g~~8_oBIZHuABvq-7-!`A*C{+QU?7=
z{>qKY<@58x`s}pk9Q_w!!mAlu#%;P7aZy7I$ge)94;YRsL&uPu0*12~%X}_Z`Ef#P
z#-^ru75_^2;VH+f at Shs<Nw)ng9bb2r%^<iR$iFp21zjv++n_TLxxg2$nA1tska1Bg
zMxR$=@ACpLF^dOG<8Pg8tl>=5+(lO)Yqc^Nny8!`5tkFzx;eb^%$9|V)T>Mf-*aK6
z1UM_?6&GQj{PJ+z&~@}^;uDkm!bCCVO)zu|z%``fQO=s);rdJ1&#p~jjjq4)ECaEH
zu%jrcvy2>kKs=9Ns1D$%O8Eh;QocX@>0TgyHRxY8Xct%(-1%CO5^LHT(7v3Cz<)WS
zr0EuMPFQv7^I`VXrMM2<X`K(zzezgD+N#s5>^kJ<!@VDZ9x4&%T@`^iUHkXcO{3UQ
zhxcAUd>`6;gMoe+d6Yl{Yb9Mq=mSDWfnMhW^A3F?*gayy+;yTW1q$Su44?cU at F(*v
z`)g=__|}WSZPC-jmddxZue(eg3mr|-LXszv;H_SOUpUEc3GCmrK3NUsT?FP`glJ at L
z4fd}NW4PfyTW`1_OthBbU0SvfzQpmAFV>d^&UU$0U5WgvR`?DBN3p0=FjU+lOhj(t
z6tdrKx6oTv9Rwc)d_xFyFE!=$+wYYBRCF8n_9)b&tC!Bmu%!!OL)VSp;#o{`8jly#
z$OF&F$D{8_Nn-ejJ`Vcw_c$MgWtg*lY&&H^p61~bGqL~9n=lVKG1`&43HyucW_&JL
zH_Z*Jr6C0-&Co8T)qH2IH26)$OXPph(CRt1#Fv8KDokEx2cNYOJn41&Swm-+7TCPf
zI2-WeKE}0cQBw4^R`LOpN3l;e=f4Ag`fEDxu(zI4%<5$Q4E3hCXTLwyj%SsIo|<)q
z&_@{Dsb8C|9qAvdS?ScK)_knx1*oG?LTvqgC+j75{3b5#9_^>?7iM7{&aBgl((BHc
zfN4|U6J-)+g~b>61jh at L!Ws$`!3~J#Y)4-n?a07=i^A$~tq$*FQBT*&C58t}Gl>6d
zzCF}?a109&YobNW<ZsB4T4lXRD}ra^y#d(^A%CW+p7E>_L#Lcu%2e{9a~)o7yk)2}
z78`09<Z(U|C at BUW!Y=p&v_-{*)kAJ=$N6pOi7qk>Sx0CJ=eKaQ{Z#r!qFz2+uHOY2
zD`xuvR&4fQWlQ@*q-EZ$zpAHoi{ZF1UD?%YL8&a0v;Ne5%+qi2?5`7*ZvDt%)dl=a
z8 at q(V(>)FU-#*&E!DDYcsW1D!zjEk(&<cr-Y$M-O0IZ9sRPvuVJyGlCNY&zejvMjk
zxh-^%xpC58bTIoF{|Bl7&&u3V-6hJQQ}9a!kN6f2ueNevEfF21`r+ at sfG*zpCL1fh
zf%BD^bHf5((aZ%lIj}*ano^$+ej9V{8uIhqL0ro!^k1i4NnHUZq>Ww&J<e;~cM<I6
z%ZPnF13I~q`rMQGNcM1^<z%tBpfv^<!D4;@iREK_EDoBqcMUHWbNCh;7!U>hR~)+`
zxW3KL(2cr|gI2yppF^G)=wt9KWbS`IO$lD+_53$*{&V0u#NPa at x0*&$OAa=W*rg)d
zs|>FXYhj&WcXppXT-(QFzz=J&Cdvd%>4Ucn?vP2Yd$bvH*v07M^_r+EZ=Jiz_wz2n
zH|DzQ(kF9YR^#y$;ic8cOIy_CF-c|j7?FQisLbExAu>DZ+4y$k;9-}F5vxPad8M=k
z>j?$Fiv^S^@l~0L4K|P*O1IG7ALP(kvTJ2u5d4Y<>ow}o;i at muANSB7{^+l(@EyN?
zI1WDiV)TtZ_${KFg--GzlP9*}+V>dqJ7}- at we%70_<e!2-H85RfPYha<a-Z{l@(a{
zp*iLF=6LR#;g9Cohj^UJIpz3v8IAm}^nIK^#`S(&zmija!D6qbD=HMjF6NXEwn<Co
z_h6f}Pv#KzU5%lV)pBd0pJ;V1Fo at KbMY)XC6ix-9e{azme=+)-4M<1di>U^|ZlAMD
zFF`j}Om!efygL=R{Q!-;qqOFwbA$SSYhVe<0cW+*Ys20}+>4Uz9k4k$uk4oC6!8BE
zME)bP)&bj!wa#zrfiFX+S at yv&a*fE~#NG<o1@@5;_#bcYP`==L3Hr%yVY=owtZCO_
zn|C4dI&4VoY+=CRiC=}h4c+F&fPHfbFQvqqt^_u#FNrGxKmD^Z)ZDI<h5-K<JZJ)E
zLkWg`+X5R(xpjG45A-4|<Kx<5ir at NJJ4Vvhss$FsTIl(@F}5SWyogxO8~E?^8a-rV
z8EASWt}ljO1bj8ef4UF8Un&9K|A4NO<L9P?)Ih#-2pHfmCmQVJ{n&>_>Ii>5UNawY
zAC2T22tOrw(eNQH8=hBKV%~8t#b2xohc7H_qUXw*okf}G>jGXCJ&A&jzIuvqepq9<
z{Hq?|g5<S|s8?H0Q%ise(;}22C(7wW7Cevh%k-!YVWuV${J<B8aW12up+2T>$V_ww
zWJ5i8Ri6;2z(Z56{0IDXR%(t29))aAUgfv$=)odqKw1b-c`v)fKP&r^f5x!Nb-Go}
z{)w?{R3i9m*tKELhJ8D?3U%ZQ-UY7<pAzuwy-Gju`dJ|rIDf1hh4a)9lQN0Zhjhde
zes~A`yoZC&mclltm+TX))ojI at bO8O|3*J!*S at bdV=skje`pj69S60v3(AO7KcEK0u
z?=HwZsp{Yr&BGj6KNOfJ$<Rr3pp;>rA*&~MkBvPa&?;KbYXQbB at Y!p8T!9ydxK8J}
zT*{BTwolcvVx at m1ooltR7aE*DzG67QI{7t0D#TT%ZttQe!lw(luo at g#%bmEV6Mo5Z
z<n~C;ox<_!?gO$D`F7Fg;D5Sc!z8#-mx$djw?yd;o1H?_B8Y}9BpG at KRW!lR^a8z|
z$M>?Zkw%LA$$0ZEqOpd#w8~J!o^O_PEVlrcw+!dh_0XsBy-j at JtrFc??Tm7H$DPop
z!7F1wr)BUv9)j<?UzmqnUiiQ2fiNx%^W>{`jvjsiJ&XfA052w9)(9WdC>FXbAMn4g
zo^&}z4bTJc%Mr1ZPEaf}2|v3x_+C{Y;#Td5TP1#7<%4a4JOv$vK7?yi;C%ypJ~T2`
z3jNF~j+VznJqy_cc3;s*(k8Tx=zC>Y8_#3Cl4>G^$!aV67~>>{-;JMP8Dhe&9rnd~
zh;w>_Mu0JD2d!HOtv9$f_ZKl7Z3AN)aRkj6(=*sRkaH`PQQZPh^6E)fs(qjh!>`a|
zDIgzdB11>3I!g!Z#8~-atb9Ec$D-n5V9%3Z{TA>2%{+SA4^gwQ2Cj!6^_s9*i7y~e
zyVQ8PDQVcH8Z~fK6Q27zp*g~dHT_zx{ODV*&4mugmv)zC<S8j2IBpvpk at GLqvvN9U
z+E|QxfEe)+(@1>8*C?-6X$(%2hI$NZ&}HDM)R<>Yy8^#dmTt-0iEm;+-`_?h!ncw5
z;IF>$m|srQT$}>1QQ}s^@5Y-dr7z`ugZc0bhbJ>9+7>z%_pg3}Co}C9$q^xx5-h4|
zw_KI73KCZuw;D2F3uvze^Rgwk^5@;t+LB?vEf*G at 0@gQ)%RXEl`X2b(H_w5$b+9(r
zP%s~EwVO7^sYA}9t{({YX51S1os848%)1owz4AGf&FW9_UjydWpwCGp1HPsQzu`9>
zsV8j?42g8QHb**KTkxG4&4PK!h5C8Q!d$u_+5!8)JM^pu=P$vk(>#T$u6)53kN<do
z at c--ms;PL!>p!0H{BO at _2EVx_WTWym=oed&tI8Mo$}9QJbSbdBJlsQF6m!p2<r|#T
zBlsRg09QAC9&6g`)#vpwbgS;%I0E}_+7DbzGl`9Oy5jZpu at xVtKLcOZwP=?*Aa`=6
z at pRmp3oWeN+|rw(+uO)<57o|+^jLGIH3*KIo!u#fKIq>`ydIszs|J<??J)yu!Y+L8
zIx^Ne6M2SU5MjLD=kB?fe-vX4{6h{q=)cA~3D1aetcH&Y@%a}Q+6J(LF!qTU=Uo`*
zT^RFSl!f@!M#-#}myOFR{b#H0fS*Bpopi3>2H<fb?ilA!!G4XHI at sW_w+{Tbv<to#
zoNc&9Pw0MpH}>a#?p^DE>6W5%r&Lccjz~@t=tq1AZ8kXnJPKSvj^=nZJVkUhhf||p
zBCe7fDxfDlihd+^i~T5XGnH8To;BTzONqY4jGno=Z34-62ApzlUN_>&eox;AoN&pS
zJm6e7#|*)KjrS0o$hh>7UeMj`f_%i3s-__qLM|{_eo63~4I51(bT}o5eWffet3Mpb
z5nl&9&ZF|%&L#3Fr&V6&XjS~5j>*m-Ipg$ng!B_x$UmL%`8pBt-`!N7tKj at m3W3RJ
z1YXthTt#hp_lx9S<yg&;+VV%Ac{-x)1q{JUiDm-7-44A~$XVt7%7-F7(a}}iT?3z*
zE!%Px#8yM_>SKNJpPbyI8AAMB;k&_Jh#LkOx_g|b1NWZFRS<oVzyt4>N`6tk02}d3
zD%e at bHNq2c`;3CyBfTXfAO{Wyjv{hhmN{7KKumC(!ce0O3aJx#>~XM&k=Rm}tH4^L
zfDJ>z%OvLnpLyCXjPGYU_~p{on%@#juic^J7CoSIz`rN(PSx(?O#>bN+ase2c~Tl&
zU)U<?s@<33E0p5A%EwG{;ozR}!c1~M(IZ4VhF#h7I=w(sf!M#!TKV3o&=1&LT7Z{i
zS)V(!iC||nw!fP-=T3#(2`om=ufCGRV<Atd-A%c^YiJ_szL2ZurRC}g<{t6mem6^U
z3-4V)7b6}5e&eC;>VH+l<@XW4{7Cq3V=t`1crC|%MC?9;&xkLwkY$tizJ7^y0{1py
zRHL7GsePuzZ6bK9K01ly*`jvTmLFK=S#0erIs$y69AK0n{|lW7pMKc)udWpHg|!Uy
zT9{YGxlW}wMSNqd at HMLPTd(a_`Yro40DjQ?55&Fj{g|Wt?8SO~#|G#W35F(OQ%Q{D
zv8V&K>}vWFwaZ_-?4rMBS%v>Ps+m?c*K{N{*L20JZdh}ogS2nNS*OdUIBqKpeYfKc
zy$SNI$P29cll$*#{DTC=#|>=8$9LFF<Br%jr#P4XPX3?Q5B-w~*qdL6<}n?@bXl`d
zNn*T_Uxvg+0fSII!`KwNZEHK5we=92y08WH1y7!jYnvgTOXk}O?X&ufYJ(-- at 8!b<
zK8-EgGomUdDqUNqrsEk^au at iD$EeG4JI>H^dx+r?;nxGVg>{AM)nSQBnFYB~5bKv+
zjl98rC5N`sqJ%~FJmnSV)iXxu6EY%uP0ZGDrXgEn=%#u00v}@km)KVpWHX2MQx4pp
z$jC?N=UJz$n|EdM8V+x}Afzg}*<5UshEyb%nm6gC at S{tBzs#r*7VC#OHW|F*k~KL`
zUzdGXTmB>10v_v;rVgV=BR)0`{%Z=^CHM|?#=<V<nM(4SHMm#n3+<sJW9_`1SQ~qD
z%YNQ{RY at 0z<dOXjdq}S``NgM9w~M-zTCX=vtq8SPY at U@P4LNNJMkvQ?=1sZMkRH0w
zyeUT->7>2LdwBNHe98Ut^bbw*<fJbm9E|*9Cv0O%+M`TMPvNy7N8j_-S<ykjL<OE(
zbP!?^ggC|vS7Yr{Ytqn`t9s;GYQ08X1BNO4v<30&t?;3k%Yz)C7orWVbLC;jLzxK2
z?Qq!aY}Ap~dTJMP19J5WjEJ##)3hUY3ywF?t`ms2*bE(zCf7pVyY%wBjsYyW=pbH_
z>JRv-kXXFuAqO|1etAS1;^zL!HHA7h<9OS&gX0-&l82;@C(m>79GmgJw_*QG0!`bf
zQYDGQSQqjYWUp(4Mn!P}ZBYdl2a9z&_RSE)U`)GmP+_oZ<&uAK&&WY<X=vjli4EUl
z=cVC$-vow=g0v$yzm&tPjt&AormKEC(=q5L_ZalnKvzK~%BtHUN&?^a3UH|6RXwmZ
zJU%I;x{yofCV1O2dmME;6ziDii)QB^se9g`XE!_VNDJ4J{A#XOq6rQz(W}q#1U^!1
zC}Kj!X$-Usv2N)aL-t~vCut0bo4T99;K-}^FeAU>oeUk~Nkup&QW55tr2Wg5o9 at Mq
za|;tJZ~jDdl*IaHM|0O+M2;sH&AIZKVV;nEoQ<i0pTdUO&bs69z%d1F+>DZkBb+%}
z6}K%C_+wY$V`yc at TxjpI?Xj?{_q4MGBtIU`3vp~fPO}KaJzS3{n0te%Fv<-VNK7^6
z7Unb;W4)8$<iDIw&bLL9bFWXx`F3UK7|hLNGB<Obgx3GcWd(nf``xOGwdL^+5d&<@
z^%9aB=LN{okLJQg(wPLlJZmd>Kox6;?^&om(iwPHW&w?}p?X3u0bL}g*nMk*`_ym9
zx1b-3Wnb5p&v}{lM&7?|VV$9R{I at li#0!-lMs9le(Lxu`#b!m~drG-nM3sv?%xj|!
zCl!W{f-!ZDqA!Nm2$P3bBZq<|zSt_J)2)%Ts&40^+85sgPuU$Jp?aYAKwdD-!l+p2
zdXrv$6a3AuA!(|1<?FERq=cL!enuzt<_;r#kLcB!p(5pUk#H;KMJ2{VX(<uKg5I{w
zd59RR4|rqf6{EbD_7J`%b_ at 1&mj;)+AA+ZnBbGu at QF%Br0XF*R at l#cZ!J2sCEbD^%
zM=tH)?tg=_)$ZSgxN(UsUO$J#2*^lW3&C^&zu>z0D9<lSI(<}pQWQ&U&&0QZ?6t^M
z7iO0m9*63|v*^Kl`D$-t-h at p~!&<y);bWXXKRE;6x(2k&7;c5;ak;19BaVLGCixxX
z6fBA%*uc at xGjiY~BysiighCD^b5-lVs0-te1S~MbxdMk<v8*#77W|OA#U=NhK`fAz
zw~(U^JbtWf8T_3rq31)u--Yyn=W~XhAL|s&UUUoNvhHNOxzniE351DW<4?v*9vAx8
zIZPSTTjK5XRg%kr*e19(dGjrF3FRY_ErQ(&Iqs1IiPozeCE~3jg2Um_a^GhEdg?Fn
zvM4|C*N91mZh<brej!)i5GwB5Y%-!J%KxxL`5yEc>NiAb)0<ApC6CPW at eSb;w(t!y
z4|A1;t1%~agb&303#B6URdr4}(alPYTGmo>=so1PM8B`#S)x*>H^tjid)Yjy9qnuP
z@;2XID48x3Vy_vT3rVz%%;DrabLG&<7a~XHn(XR;xp=o^iW5Fg*9(|Eci2KzTfzFl
zdp6*n)wm}U_hfMQ+~Drn06iD<Irt{5C%|t`x87pY>ztw_w=m8|5X0%gu-58~Cgk?P
z`&&p~VXU5WZN6V@`(RG5M+{{_+ef)7NIqTNm!9_cPLgj#u$=hP<|1Z*+&iZi|3%Sy
z^j9ZmA35yVjCG#mo%ly?9=;(@v~ba%#15%Ug-o1jg};b8AbYVoQ*m`XqfEoKlm^$;
z*-^lf-uF3lB0bzb>pdK~IA&UOkRxNiT3Hj29a0CM-g@|7H*mS^)?!c13DY5N&Jda>
zfuEhBy-957Sd;f`3v7Mu!g*v3#Ww)QH!2<Hp*ZiM{Pc{Zoy^VDWmHr4>$ujAdUCO6
zrc>W>b>%-*ZHzS32zP)UkXz$`jr)!(`d9dfo$a8AFD>NK#W;60Iy;7Pm^SqTbgb_f
z;OocAH#)}3$2uR&jjZ?7!MwIF8I9gi23yg7Wt~~Ie9NlmcqYLg;wyOPR`j0 at Jaa$J
z^Krh9t{mPXV!SSx=PxhA?-Fay@{d~cDd6uf-)K})z~VqX&@0i4sU|kRgTl2lp}yGr
z|EnGOq4}n6?^oa(y-jvXxB~xe;QA^*H1Ekf>6w3f=fAmk7J6NvH=s{o3*qXI`Kx}s
zGt${=q3Z02&!KbCpO>ibLi1I(=gFxXi5JOlS+fYblcF!Nhs3E^w6P32k}$z)mtCYk
zPqphxJS)dK2l!2*msmC>fQfX#CRrXV;W?s{BAwvnke^D{0^jfYQ1?hD;or=YqJtx|
z2J(f8lE at kltSxR2Cp;wh-b;k9nDYa-R;}aKs%y$ih-(vRZzL-a$0I^Ija|U!6KR{P
z)P|iThO+l5;3rICj#3?i=aXNwlRfIM-w`4By<JJgn4P_|5Ca`aaj`IniGf{aSyw<T
zY_?*&ciW;i%z at yE@!0ogAXd&J>oI;mKQT$%U%p^_zc7($4?X|n+1!@oV&D<R8G1Qi
znfJuqgfEzx2!25Y{U<3A8y(6N<_VLLr9go>rlEYR5|C3ff%+ZmY8ZI3pQEL`$F5gY
z->mY1&UnQD-L09c$q+=z9@<krvM7Nw#22W#xOc!GN4S!+ABNM#s>|FOO|ZBzH^UE!
zdCZ3)W~{?@|72zg$=!+g^3NNmkH5x9vG0_Gn8A-tiOy(n&5H)6`dT7$<{lN!#@?MM
zvk1l5k7d}~RKR<aF;kQ)fwz^RiXH}Drgr~_e-b|5^EURk+qo8L#)PQE-|kmBWxutv
zQeSWS?MfT$9 at 6v4l8YVbRM+oHsw?^SxXhKq5igkO|LM7ikNa2haGo`AZX8PWv*Cuv
zOJ~%S+(zza{O()ljeXH(cCfSkKh-K~?6=e1K6x#DSWXr*J_<Yz{08{d_Ik=8zj|No
zL=JP}2j`I<A_?^kkw6}`tl8y1=bY59A2|T#n52HroO0_enn6xRJ at JXd|HXSgU^!gz
ziX$1!e714f_-4ovm5?JwmmGT6#CU at jnN59Q4vaRuqNMD?#3YZ#b>mxvv+90e*Sqx;
z_yjoPBLlSM=}COvNY%YYkMYg8H=nzA7I$wmovgYI%siKXG(!m;WB7qy>{h*IlH2Yz
z$^flaK3!I>-)8&AfuKUNHp8#<C#(;VB+ozwBksf+b`SYqT2MAeCE^;e!@(Cm%E*&+
z;aW?SlzE8%ui^Y!6tLi9cd3aTIlDmWpU+MJHieQmnW^M*l*|(N0*7e$bPJ;j>Mtne
zIgqDe19+0pv$Bv6GX-_74kEb<BeGPao}h<JM%fmcU>6L>zPD!XPux3JYJS2!Q=rGW
z*%&px#r#sVL2zVQTR>)AF`Y55GkY=iwOjc&J?5&O0*$o at _0SC_RP4^kGrb#oN#o(C
z)ZRQ9Nwr0$c-3Kl6~m4>8oUzLJaVr4LvUoes6e6l3AUoKc)pq7lM6;bPh|&AoISS`
zeB at U2PmO@^&SNwNoFC`Thj8cnx$_a=p^Gnw*~NPEaF<A at S26T5UX7b>=py^qB)PQ<
zLb>wK!Sen<3BL)w#xO5^SO<9Ai+^2Pk88-cR-xRw3Ex;FSl+m)Sr>`iWznaAS$}R`
zBHHUetV6Iova3RQh}?4s=Qi~|TzBEF+i~qE-WwrU?k`3R(<1PK7PP~VAU8F|zQTAh
zdOBfVvg{PvvXlG%aIP)of>2)MJb89xKxU-9Lb;RFU0zV4IfuL}Phkw+7A2t%ULd-E
z%;Og at X3tAHP{(Fq@)1mv%|r&EiyPc09hBIjlk>NLzQ}vGnx{oy0HzIibb~o`Ot=$e
z9ra^mKgo}nAm at FIbMR5*oS~?@k?g=ZzA=$!A@}pZht89d^C`}GN}fe?hI<ZWq#gby
z#J}^ZRd#hN$}2c7<2Wn0kNuz6KeRZA|HvgAiwG};^>rp>37)IN3%vcy(xn}uG~}Yz
z5{v^C8<oLxaOVVHOJc(Rx%o<OqcL_y=0n13OiUb*F@%t_`A-pDarCEz9~$Hfs~e*N
z->-@@)CCT+s at b@g-A<09y0c%WZh(g$8YMFvpfh0uk!9VDuTTvkbQL%rHjhQ*f445|
zzxWTaqnWU`WN6Mo2DpY;Q{eTWucKX|<Bt9W?}~(v+yLf4IKR3vWZ-=j!mXQto7OJ9
z%fEh7L|r`PgglS~9J;IUSy~O+ at OFh?4q`228sNM~e^Nm9x at c;qFw3hB*cT?jXJQt%
zgkIR>*q~$lruYw3FX3H&XfxuikjFK3A at SpQ#OU+8NqY+zwEqSv^MRj4_Dk3^Ap`N-
zh}{P^_$d{;)svyOTC6@$=*P30o;SGa@~`RX@&&9B_+RGtqECTe3}@$>LSp@|dDG?7
zjvw0*={(tKxNQV(yD`?#Mn6k!rLQ))Zv0K$$+{XYo^&ysiF-!n51ZE;I&aC at rC(6j
zX)n at m@JWv`-^`Z7x5c+Cht*NN at T0i{+38Qga at aTE7er_S?f$rsw0kPPu at ZdiT&|BV
zbA7xHeH_L0 at owQkw5JmDpZF3qS1ccB2OkI+TQ^OTT9atRKp8uz`~Td+t1<--b3Ir?
zxi9@<`V8GnGyOnb_W`@|bU5-^_0T!$HK#Ts#z#tBA at jFTfw9GYCs>YmP37`Te=MBm
zRfq3vqy4Ee`XbsIBfg1oxOmddd|SBH&_%B!^BrR+rJ!Hs#%?z^c2U$Tx=E1r_K>#Z
zI$W9wrqp_e2XJ;_qjAue*5_f|YC2L9*zz&kAGs*<ay*;eTCnET50+}rX0)?8x7wxo
z?_+fhiQa(Op$8UUdfl6Bs at DbB)V>3Kbh5*!mXj{jJ<zTjX!j6kw??!8w#2by45(jP
zPa9h3Os-GQa(${sJEw7d`VnX*0(2Vz%#jG-{^k9hZVUaaakQSicWW`7&OZVAy at dRZ
zgnoND`c<P3hH&%?zcQ{5KH~ad8Z|?h3Hn|A<ogWxzKNrBqtP$#as2|Cq^dpU;2iWx
zhllhdzg*9x#Ab6>N*;7ATz}*Zma&6${Qsg|D`@v9N4q-EuFL<R-A>SM^Ap<rbTvo2
zU7+3iztQfMLE7!)XgBX~v at 89KcC8%kF6C(V2hi>oj&_BlU7%f^=3HPKVmI!ikEe5e
z{GssB-{^Kq#e0Kvt0!v%=ynsm9&{T_UDW4|yk+t&=X^*GZZ^2b at 8lmdnI<@~PhN$8
z(H*QmO at UY8yS@<pK4Oqwg&e(Z5zh8H19~Ox`-r~L;97Q9{4jZ3ol%sk8VwrXKR7-g
za^o|dn!%058{Am at f6!=t;~;JRI9M(ppi$@|7K0a_+}Pe591=Zg9c09u=sg8K*w1D{
zcN88}n6YR4jI7;3t6LE_nDJ4W1u=paI(7V1{H}Lx2KMBgLSWzK+g!1~g9rGOlpac6
z3(=GEe<$)KJ;nn$?L3=Feu7*lc=|f%B;K#kzqN at e2??II+;}>6rt2>AtI>OyDM7)?
zJumiiG2m~9ypo*B#fCqx{4gj;`BBg~<?gZuHof^Qa at j@-_3(F0fAJxA??#+w;J*}<
znJ80HrWk7IEbjSn(BnR8jW^VzZDq(s;Ny|Un+V=Gi}+G{%7G1*8u&S|HCbBb7U2;C
zEX^+l=^Fm>z&3e2Sq5yA6tw5m;QD-?!<8xii>~FyjdAX$^}uNa4bAm1zc;PiR8QT}
zMV(&E|AH53eBa=RSnL*Y&}nc#Cku8S3^%+JnS?ktd3MvG3KB=n7ip7Ecd=>Ko2-I*
zyrz)CzJWO6MA&5%xqfRtRdt at KG4z{6r55BT5+ncA%SPG&?9*Y_>6Bq7=qVIkyYHqv
z>VWDQR%&o=V9af_!p*T-Zr0NA<l9sUWWF*}YHFOx&9!`)xtd9#rP_Leo%oIm$$Oyu
zU_xH`%A$U4o4Lh4=OXm3vSr%(YYsNae8`@x>^sO943pF8HH;iKNZEkChS(z}W??+i
zcr7OVu*dOwvt`YksG8983%ZyUQP2lPm14|yF%#D3DM|t+Oj=`wJOv$33cp0>0~)_V
zbT^Qnn5}QoQY!M~bB2FC+0&VDaUa&jUS>+&K00yK*e^ARi- at 7@v5J7>^yvIVS4DFN
zALF(3*7T9WW3ZoB;XN1D<xSFBm52q+Rg{=d_a-j at wglCybMSZ7?rSw7P8Bv}Ra4vs
zyz8{#68sb{GU0XmM5)#`I)>V11Qr+_K&`Lc*Eal1wZWlyIog5vY&+if5%)eWXT`MN
zgw=S*+~I}7-GlEPXy2$w8*rWIq%!%8ZVK8rZ?Jvyx2oxM?wt?t&KB;S8CJw}fp2(L
zGxW*3w38^4M|Pp3JW0orTxW3ws*#W at eLbh}ULV at re6}eO{YTcCV#7tbLU(V<YOXKk
zx(I$X#(&gc`&!~_xxT!Y{5r36^vI>X$i>`DPw_fWKilBCr~cwu#8R};$)s&Ov<-Bf
z at L%u59^^gn&X at 9lWA_d4x|h<sphHzr6$R at H^Gpuv4)(g=<8$bTz&g5{syQuX$5Ugv
z#grZKXAb1Z_|7kr(4F?NU%K`OKbiKTpA>xiE1XYgvGD2U{y&KAdm`*(dToEXeD{rV
z`A6r<<sW|~9EodrOTUNCrbaua&_R1KTRfJ8y-B47pAo*QcOHD-;O-I2+vTw+EPl-i
z`uEhO`TrJv5pW9nu4DM7^NHi=hpCHIEyLy4CbQ+I7qj!IWBBhH$>WQ4=;_4vVb4;t
zgX>MwFo&t$a0jwUz`%R34tk>>0>U=pU8hML-3DJ*VBDKAA4%>=vyzT~x)ePBde5ri
zcH!OOUBW+5euT0N<HOnHuwQJG5V<Ru;7Y~5ja;~~khw`5VGPM%Q`I4oBBm%w^?06q
ztCP)8bqth5AFfUydR)(N%2(&hzZ73$or5^1V)(ip0I#smlxnpB^Y8i-UYAV+|B{&1
z30^XQ at RC@^{P3)wj^UTYm+-4kPNaGhpAY-FfRUYylJZTs&xPKA9C^#9_a*v(Z;c;%
zUE at FY*C;8GJ5)9zYruET&(oX4L-Jc{!gcNf{Y%3Oq}JlT&vmr=b6&40m~sW*z|vlt
zfZOna#4|fFPtrv3*vlp&W_CG;k#+?B;74H#eWIg(TL^3|>|Z-EhlawQ+(pMjPxqhi
zasR))2XgqIcvmT{&+I$tBI%?H)N6!NsxzKdQRF(lVUH-2dq=5YIok950RA<df$s{(
zd}_n{(&5*i4%>O!hV>JHSpoZ>)fi{!W05BSI+`11)l7>^b0HJ!10BUv4K6+3BL77=
z$$z7<1O~Wu8RJ}druwb+#w&sE!-u)U{3!ZuV^GIXVWKHD_Ic}@MaQR4G`>$csx}$w
z$X*XV^A4i~rW|swhvbJf(5q!9MGMrQ((4=Be+WiQvDU4c?4RHXpr7Tnc+4RFcj`5?
z4BzaoITycE^-|*VRPVY1!SUB<O}!8?cpWtKLi=vHiIh}t=qMsT at EjhHp-?(O`x)TF
zYLF|;NtbBgR|&qC#K*;ve9`bTOHzNUkq*Bx(2gUg3ywkmn+sj}SWQ5x2KthP=(mZK
zWn6k<7vZf3`<Fk^zqb~0V;oNSmA}Tg6#DolW4u|IL~?**jJ)8Zd5_=)VlH_ROmf2=
z&tlj_^;CO-5BP>Sv^{>=*8zIMS4Z6i9{G{O`-hx8mpja9I#}U6F0XJp;|@KzBA<TO
z1^ff`AUBU-%c6bYsRyss<mQzi*MMg;bd&IZ)8!%8HPPcwq)yT^@;hMXyvBXYGt{S;
z^YD9t-Cjx6i)ggbUHu094<3-;#u%y}a)XUvk>fjoLk1tbbS at wC9mo}(xb~14P39eN
zjnV(C3H=2hRKA($nfW!f<&$66p`DZ4po^Jq-ASvUr&w-%Emt+%!3K9wUml_?0q&ru
z<qfWGVUoSTw03nHCOJ at 0>ra*2fYT2?iR4}fCUqy#{Yf{9UBJWp#p at RhZ@oo1Gxxyu
zn_QMpE1}!n7xWnRC~Nj^|289H)Tg91wsdEyM`T^GUSjj|$$w3tC*nKxi!jY_sc3)D
z+Eq8z0p}GGVA<gJ5%hf~biL(4)kG)0a%<2%%;gTEiyqKT6FqRvE%=^t`8|pL_vAz!
zY%;li at V99sdX8srL9e8O4oHGFFOxh#`|lz~WlNVl<TQM1dte9tF&23U7tZEAqF0c-
zbg*H1*A??WBltJyx5=*_f*!-cs;PcA>}4I93%bhH+j~9X`-bs-!4teBe_?JOe8<0p
z?DWCUyI+A_v39pkUol at j*~rFp!e=rG-+;Jk=*b?|mM?mm_#n-D9l2QVs%+);MP0ya
zzGs!qyeQ}uk3hL&Q1?F_=R0AGxI^YS=6#J|n+Dhj4bI-Ps8^@Sj5>z>=s|<~M3V0#
zZSwh0zFXeHd&bi-IpzjAe7TWNI9t12R)cz)2J2Mnz4;ls->4Z?mEdPN{t<iJ1Zqr0
zaLp#=O3*|Qa*+E++XR8A_eZSzna1vz+ at nM2q*V_Qm%oF|ncDINFC&JjRCoy2Q&&9%
zUG at hg;v2~R=qm1ltacD_3WzH^Eo1|r?Vdl=5(~S&r<VAZalcEs--X2QQ{T?{pMsW#
zOCUc2kC;Y28Te*(>g_7K9{oFU1nSlqTVr&{9bJMl2j$NZ=L(pJdFHh<t=Vr9TmAyY
zeEDPtKVfp-ycLtqnKb;aP(IfOE4ACz+Yl4soOdb5hWo+q>;52o3iic(=tWxL|5GlS
zW9p7sOX^0xgmDts)eUtO?OQj2KCTZuL%Y|?H)#-;>-@`(oY>%ebc4jxHMl3dBO!WE
z(8Lrkq7NbVM}h^O5DZ at -_%jdu<~co(C$rYL!%Xb^i5GE?{=$~d6Zs=OPUJsRA>a9_
zdD^rI9`Vzg)+nM_kMHua9}aV*YVyZ;B!<1cMiKmj$H7MDgBfEVn&j`oZ#`_&8tA2L
zF9p{hj)Trk73Czp<eu{U2yzZRTuqJqy?0 at Q#{T9~b{P9N{4Keh;9}UU<KE#}#QNas
zRNvsr)RDnor;ZLj2LG0RlEXfBoA?p2)yB(Z=&v=uq7Cp#fUacQfL)cu^3f#)dFJQ7
z(c-^n{7!(5UWA=sxW$DYQ}f13g?Y$Ax$I%9{7Yw}{F<{&KGdm at i=4!lY}k~-Jf+&i
zp8bLFQ&bbtnb(%*$y}R>{_GnKc#%D at eI256wm3<g&#;|?_c!3XqE(dx*9#oXl>A43
zd*)-|s{?hpDG1-RTKBjAb_>@(`LDs<L;AP+rm6n at SAF6CQQwC`)sts<yO8s8&fn_W
z0({Lo_*ONsKX87qcCxOMu>?lvzLAOOlU|gw{~A-(z?kBi%0m{m8DrUi^9=I;YiVYu
zQ->TsFJP>fHn{%N(P()vBW#mNQPF3TZ at joh5jHzM=jAhr2kCVcd2el!z8W?(RomFy
z8yx1sR5n_AgGbN_*MTiJQez~tK;rYf3c*uhafvU0S5F_-Jb3-_+;noC(2J>CEVp3q
zh#Hl0kl=c1>S3RcBzENk;moN5nXHP_-(jui1tK at +{OOUk<r9;vv##z~k#1rSOyXe~
zXC7y1pu=B^y<%8UJu@$;4w#r{$oTT#9axXKd62~I_4z~&LabfBdH%Gz#0<BK6m-Oa
z8wTPSIKR>~<3`=anEU9rVRSL(`-1%5D)sDe`l6~kI^M|YHsYEJF&QLhN#F=~{5P5Y
zmCIS;;a>}y_vTkmB|hfGl+WbDd`o%y#;%oTRsGhdu9k!U>ab3_dK9)8F|g>SaC_Jt
zwCm*b(n%F%OKJJIf0qBW5q=Os4;qyRRap|)Bj$SjOSs5rJmBtDg6D5G1_bVdPWh-`
z;{74c4=CFTi?Q{<hyX3*@(!)7)WRyp77F)KHt?&^IS#fTK6IXbkaeo4DY2w4M{2%7
z?&^kEA0GUnua+ZUNGE(gZHUK59Fk7yS(;m+)5ABnI at -qQnF{#le#0cISr>&BKJq*h
z?tcW|%1Y)LBYVIdzQZwPAJVbtZ%giEU_JQJ#bsOA46iDsB1FuD<9ZQzsVoU=gsnSt
z6nsgu at H<mNd_%yCar{FsFig)jhCH_)ex!$Jeccv1&U%S2tlMSEpneIwO4jOW`(cL%
z)&u0#gXrhH!o1r3B~R0pg^q|=O*!Hn2w(bGC^nQ5>~iFQ{F+gyiI3VNw5uEcJrpi%
zaJm1CxGzu!pD%*dp#sfJP(5P9xBJ2eznWpfI)T|iusgVCkQWU1AyzI0 at eC@>X2d%@
z6#Qs*K9VBNcna_UFPZPyh>k#fG?Gm|nh(9W68Zx%<extDqu3N@?t3jgz<IEeau=<I
zPh&acv)8rPzua&512(l$=B?jOJ~wNMeX7p%@a+1UQoGzYI(pXJyWszucw=OzKnLd5
zQi_Egx}((zpR;zVuk9?=dG5I>y^vXa3syEiIQ+G$gZR)xhv|#heP8fEh#BGenG;ZV
z_$Yg1>`QNkh(qc`N-toyhnztP++D(BGN*`*g1b*Xs at K!z=35 at Ri{w?ox=lq|pPF_i
zI370Zv{>Z7y?O*Z3ig$Y_edVR10L{8TS9a^TpWcX at fXBD<{CN at 6U~<HrvfxW*@RBC
z|Ex*>XD=h4 at Mh|g;5v_)&=+Jt?{4!tL%C?6>*eB7y*d47G4!;fCcN2{Z-5U+{=RI2
zFE0;jApfDBr#&x)<W0^9$(fuKma`@=`0K=xZY`-J;V(ODL<I7R4M#laMG}XUyraQ=
z=2QuARSc(z{|)qkXN5}Q2Lk+&2*UsO`qiv2bJ*hzYOTDn-8CKln`dEHTM1ugPsAc&
zUy1YN^lX?b%P>aoumk<*X^$Kk(vbO?_?M<b26oi(rHzUpA~VxQj8TK&A!J=(%&|wb
zSCmU6HuC-WhCc9qN(%W3vF{x|95?(Q%oOPR?gyPA at p+K5|7=nkI+S}?b@<1{k-P@|
zRq}Uh{&v3yc)6^s#j37J+}M$Prn>jQ1D0Zrn2CKX?sZ}xo5tAy<3 at 7lr--c#*I)~z
zMwu^sYc?N0UT)rc!pr>eiKFKGC+-KDhV=<T!I#GjmMMc}9CYgo$T|GLUpIH9$~EVB
zbEzv8Vro;tJ60#X9 at o8bEuFebu0cNrTjjJ0$c*>m#+cbFxSvU(u5<TSQI3LiT=$0$
zUg&$#;D2lIO`J_K4)#f=*z|hK<qKOL)#E$rhe5ubwjVt6Yl7wAcfa7)|L(ZOyvWSv
zary9dd|1Eof`z>dyI|UJ<Wt7^JLLQX?1eZF<<5_C=iEIf?sMm_%TA%cKEV-go;2+%
zLQB?3(~d^ZA#;stg1^I2_~<>Xf1jKi;Jb%)Y6lmuag^{KaZ9i#cvF$adPBeTv%0qi
zY+sNulLq=hxDR%;l$VFVj at C=(5_=Z6Mxj4cuEw*5cIjR`lV-gI{UvgF1U&b*drsk=
zr*Ti4)cD`(MSltRk-fv<^qgo_7L`*Gz9TE<rw8)<ZkJOwJmaX at guDfBJ_VneY37r+
z46nH=!7E=K;CEK9tm#OVn};=m-?3j_=%-W<cZw5`YpBOMiGN`F-Jq2re<Uve&#|bG
zF;-DFTda<^cUOnUiCKmwc7ZO;n63*uImdiY=~Li<&)EZI@&-HnzglrU6!xL=p%>TF
zLz;FYhD<ZmmOyn4NnFnkO%it+r3S}A<fMzctqR?nXK-W}410U2w<`K%i=>*VQk_$(
zt)uyS$sAc`%e$nt{rCapv^VL7pS%d1QkM>aQmyPaN;?AS0;(ML96M7rtzY;Vp7~;H
z4*y7<j-7AqDmsBR(HpkPWS(zaI{Mh8<Dm|B)bS8?P=j^w=>pDXI9SKDPrzG$44%RZ
z`klz`cI26>gfAoPN3;&}$J?NW4nxQ)40<-1v)v*0Y)6<VuI$yKZC;yNHyIqQmkf5J
zPUiuP%TU;odg04>Zaw4XyJn9+C486Ys|W0H$;EsN#-u_wg_DunjQS42WIe|48-m3N
z+^jLpTe?!3x4?&FOGhTK9x9m{p^QAstAIau73670YjB5vMvfx*!QP}(FrSE>6S^KU
zpLGmZ?`_meO-`kLA-rlUWKm}HsPFMzES_(JegU+DI*SQ@<2mQUOBQF(YW3{%X%dSu
zl4 at 5ZtLH+tgnu61kwfS*a0BGnWAtQ>MtNE}d~kpRfcKr^-d8EPV+`+jmX^(X=%PRy
z at E*)3A at W7F(Q(}O4cN^}K(FCP{aE?YVDu&SLc`!*$bI_-=yKfym+}ej#0R84=tPSN
zk7iE$*1SS(Ztu=K*Yn9utFxz#eq3NethS;|h<LnkRtbCwDeQMr-LoX86*XRbVS~@>
z6#=6L=)GWljTH3$6i4qd<#oy>RFhySct6N+{0!Bf-0y!5{#L^`mHa<^@b?u}Kli(H
z at OJ?G=2V#5D~T at 7(8WJd28<<cJ*X3=@dUIiZw1kbVa+`!OyZ3MPQfVnl=un>_IYK<
zB<*_(eh2T at OjkjN9rJR|Ns*zO9o9j;oIdLNL7KEN3AvHbB?3<ZcJc(QFX1nCF4fJp
z=~t+J)mey6-x|!OzsxX|!++G5)a{@pR$I}w7pqUYO1hzI2vhpHRxQi?XN|uM*A2t2
z2|kl}o04`uE~qlUM$hr5Q1>XrjQV*-ARjOf7&EwEThH at FJpE&Py}@Qu4tsoXli at 6I
zksfQ)3K_rA>+_i6;h&SWMXww_CFf$@t8_u3O~gQ6j)AQ>tI#fzd^(w5YwhBHv%$gm
zs=8Z`=>$fpE)e;MD}+g9xljJ%=4K+XCqTdduGzLM#Vljzs3_!?^YI+Ti`40(`&@o0
z$QgD~_FXJ;hPyU{mt176qvK|F&|OrMTVf$2E-yqpOK-hSPjz@?p0l<pw%%c_6k8Ej
z*pC<t*cEzCx at O2KOj0kq=MMDwn+sb1>hrjlbJ6FIj7rdJE`?YGod|J}cY$Xs67J>Z
z#a&`cVUfq#SWorS)dn$S>hFx<R5!f=ykxoVZsJku29*%}6Fqi7r;_+G^x^-69x}%u
z$2y^B6 at -V=<iJnBj<xC(J(aufUVJWfib{(@+%I(Qz?S0sgcYsNqaT`L4|S$yn-OPx
zP0W at Ln<+GaH}kfZ776(+tliLQj5qX0LpSCa1-<cTtFs8X_ at LvJgZ`m6Q*Uln>b8LX
zfe~nUjFRXBA3 at Is-Wf+0hyBrtYewv!hu|-N4m at F`Cu7}GB!u4`^qejTRYiYnAK<Z}
z-%?UNq9o8x7~!v=yW{HU*h1$NI<S912g&i+$YF2#C~gSf(&+Kre){W_$85503-Xw;
zbRyN{ei=U5JEkWJjd)kM>D{=MxG(CtZ**SpFIZ?eP;|l?S9AgxV{sf0Jb^|$j;F_e
z>1WCOp?6ZFK&x0+8eHEmBsQKhThZraEyX(G_hPj1G1Ubch#+x4ypavAza=aidFr#G
zKIlh|Mgix>b1wJW0sZIahxb!w&y64LFddrA=|9_%&!<%G=H$uGI at T#%ef_>h?BM6k
z+74y at M))7 at gHF0ZFdlsW3XKdh+0j-W)y>FPk^GM1wb#vOSb13soi)}9+-q0zKCD^O
z%In{;dANBsAU`V${4a-a4)}u+*msMYwOo#-yCFX)pEo;o@&M=$m at 3?37mUw8GWfj8
zHy7W~2RSE=a?&eEJvn=r`~aumOUM=Y9>^PP)I6RIJKl2xdEG9Yoly*Z8Gg@*H}1$O
zxmL^`hL3s5pxikI|CbENoL+aVpVLXuUrZSMrstZqT}1!&LI~cYBbbF<7{_lIspbui
zXBc9B+bZKf2ft#QM+(;cBiTy_^R}I;Qa`U?F3D=3^C%_XE)q1a>I!_3<Z^a*-yh&)
zX!PBe;?GEZq^=;@Jje$8=R}AfiA20CCmZ`=k2sS3z7W17aU&#G%75B+Rk<`|vq{c(
zYN11Mr_Jq683Cun2_f;XEeLsfBE~o{jn^djvg}91>tCjmR6V?8O#>s-ywSP>vd=o;
zAj%Ez1g=3lGgLiB<cM5jgH0z1cs^*Gkw<l!@`4 at oh5#+2f=<OJHyqbk;XdpUJowuC
z*SxVRc|Zqr?ugF)IF5}t!f at Ou*SVMB at YGivNq2$FMCQ>>YS(jFN1OSft7-zIz$Ms0
z*=ZU+>-***S9RH~qJLoi2(7n at UVvU$$SYN%O&&7|Z%$W0x2D7#g#5H*OXHgH-L5UL
zduK!+ioMX_9#hDB6gvcYsgp_0aCQ8cdgvp-Un*1hEp#<>v)N+AYv=70E>=&6j`R_o
z2i`c2_!FZX0$)vUa()zk?MDwFCUs|&)cixib1Iuj{nkdt!t0`rnGe!81HvGK_O1~j
z9zR`7 at +3VbGKhyBm>4|dJ9&xdk5<2nHKP}?(>>FY@*fV!CL_ecSwy#b6n4#3mjhz(
z&MZ!bdGtgkA^DM at Q)|z;#p$%lQAZEi$DqrHtaKD|dByH at 7gJQ+5Nj~_s~y0II#483
zZ#K4fYzavP)`24Ad`JfR?gi>9XNSXDB;0_t`P5N2TJg_X|MhN at fz$LxR60fc>&^5f
z3F7C$^Ar#{D`y8?41K~S18|u_FvnKUp_B5XXyDcj((X4^YMm|A8 at 2%Me%*eKcZxvF
zAZ)py_5YJ at d(WV5yZt|O+sIwsK|j%L=lbY!aGnD^IOti~jk!J?{XYW#?P^9`%3m at l
zd=6(?JeEjU#O9N@@2@<oE8a^F9KP#h(6Q0RNZqrM at H>iIBC!&FkWSEiL+n*Cdg^nJ
zBu*cV^>=0|&BOZk2tHHxnuqzx%@6r9>>nw*V at qG*@-(_Am*`AE at OO-X?ZgA?yJt07
zw>e$%1=yZnA(#Mv*9)^D1A5`iO`KlXP+LAO41L4tg)zs^h*X at 6Jrd_%i4eO<zWd4l
z*e@*v?+UVi3!a<U1R0gCEV~8V$Xl$NCJgd*JE2e78#49~LZ4jwIA3gP!l1naF;46%
z$o?rr_6J>M()$J4|Ju7eZ50Qubt_n+qaFc!AHk$Uj7?MAh=trW59BHyyw)1GWKoCG
zdr_x(*3~17J_vpiXshd1Cur3|d_QAicox`7oNexCAMpkK%5*LUHa&*tS7}6^)~u_|
zz3k^C_UBwF^7a+?Y-ajF|DPX@^SCECO*Ju at npeRWKNg&3`fz<8@>NY2oF?*gG>@k*
zD`gi%SyFvaF2u12$2=VKaU|f-lQEAT0ot7mAAUZ`!I$wG^o+7-Pcl9xIr37h2r`jx
zZd`^qTi}E9=krRvCSw1SX&(z!+Fq;~HSoLsk%3Lq#0=YuxKRruqpAfpSSx%G6Rad_
z#k#!O^6Oukmq+tRY)b1C>W?}3FTCvj3Fp7IOXo}Zk^G9-x4xoF`LF>U+zcB+HGECV
z%{OPZVn25Ma3D`01)IY|!S#W)Vcn}5E8=hWFwG=3Y~~+A4Pt%#DqhbR30uVMfa4QW
zpiA@~ymvWlmt20YnSWSk&HP>a)S}1GW!4Pz<xmrJEnJSTm_?_HSzpkqM237%Gw+9v
zYH+{d&2!*;jv<HIlQ`ibrWpIxkPE=3rHvD%pc5bXydwTSCZ at r?_Yh(T;dg>>YC|2!
zvyFJOG}O6>tMlKX$VV76m+&)q&WrfU0-wSgJXj!+Y3^(l<_qcu#*#OiX$IbB2K601
zgKOizAsfabA7M%8Xkb9dX8xOwK>Lu-v2eb*D<hqkM{;Y$%mr3KCv->UOJBs=4tWf@
zr?UCgbSbd~RXj=*UUT*;BrH!FW#=u3vI!R&O-=taZfshW&=w&!F4>b7#fWP#zg5|~
zfGqC|CMmCflvK+KD6^$`_Ata at H7mOkWXA;sM)u0<z+T&mdS|OTYY*#Qi25ow64<oA
z2KEhu>@4ny|CMJ`=S9&RkKlFT?0g0Aw2CXvBQG8BwdrN2@(j72K73+lYoklVJ+NO;
zh|7QttEfpRgB>hi)q~%?0xIAxqm$TaJ?Tdk^3Qw1kEG~7uP at Zpljo5K<g4=V?KY+a
z at u*+GPm;{5FEF=P6y_nO++Hg$ixn*gZ<2~NGB*Da;z9WEkFQ}WhB?Fust3pyd>h~M
zXKnds^1=VA2L3}GkTvx>Ro`FFRFY?g!&ejhA}=}ubLnJ!0`C`V4(N6UrK>I9<PDyl
z#8M;I9LXy-vkmokf-W8im1xUC#A<1CBgh<M^!czKp=9#AxH1nkF%|PjK}CvJz@|P2
zV>=sq=s5*><>~J|!oJy#`fkR{FmG3cHNZw%BZR%SBNg|=;ojKkEUx{SsKNi<DuS&6
zyUWZ!6PMz*Pgp(vtBMCs<=!jgeqwXKHiPImNq at n{1$z~a8Bb!gxpnp^_>H=(jG%t*
zdy7roneRkJwuKum;kb*V1&0Mkb8EQ4i1H%Jy*Q5I_zK6D&}$*T8kbiu8(4#{@{&Qn
z$ZNL#SFB?MR}ZwjdcNjW^Q3Vv;|L?`DBjt|^Ny-cy at C8-3vevNv503O*b=}&xsCO|
zANM at YN)PJG$_(nsN(tg(%o&oy4E5#Zpgz?&GvgJcBYD*`T1bp+R1Fh}_}C0yb=K%I
z#FpVa6LC>l$kn~rbUJgCsVQ?LXMeE|e6RZitgAMh?}fcE4Ch^g?J(l}u30v22GPZ4
zen9$Z`b>;pji3PQXJy4Z$RD?{DVxDq9c>g8o7kpRrj2{j8a$SLe8Kkewcz?1J at jMD
zn`WcZa08AY&Vs7ac2?1B=sv1BUoMXZ?v~+tAuyBK!hG;ADA%YuaP126coV#{D>%QV
zMUDe@^$2&XtgRi`A<$uy`!KF+?>Si#zqgimm#K_mtK{3<fsgSu4pXWIc8!1rXV>R^
z3-~)vV&80&Qe=Ee4#&B-27ZM+b5hFAd-g*6<N6EEjxoq(mx?2vVE^HW0Tv$e)Us(f
z=HL*+KD+PPR7O7B0v{dZ%Gy4)Dz4~SX6YU+s~lg^T5srLl=zky9I-fN?SVcL-!Pkd
zP8s;k2zu_-h}BFU_++u+2POyaScLn45zqSL(Bl4d92usKZm%@B#(V(3gbM7PUTDKP
z%$0N;$gxYEz;Opy)?p3qQ9>@qBQUCl4i%gR?}ylJ<BvSQ%)R-L+oyk%xwpa9^+tp9
zNNa<8tY3rk^W_cB_r^E4bT&4)@?S!I^HJ9?IG$^8rD(iIOn7D3kcP-k(8Xj8L=0aK
zS<6lAEd9LRP`?KEhgW5lwdG@;3k8l+d93Ees5rH!V6*x;!DjH(XC+uW{#qZwgHPQE
zS!MXQV=p}9e+WCp5YSvS>g+YW`^N&=*WjBif`7qQp)~BR-T&5Mx)?H?CnuNPsgiHs
zr)LWFdaQLF5vyt7g7*Rkz#i&H{Wd2@{RivZ?rZM6dZ_j6cAxV~iPI?F{tv;S3R~aR
zJ+_YNnmUZf8R+h+!5?YaCFhind9qsM@(gdSFM2iB2YN$ZgX?E+TkGkO(`_z_>7R?e
zgRA3}A1m49={DS>jaQawJFXEM#fWDG{b+Y0&lc-Toe->%RT6)oQxh<*@|KNcUd#ed
zW0p}^=a*-R;Dg5X+2G#1zLK|#Zb2N$OJt8*p5=K8KEr9cm&~%OhY+Kf30=T0&?I;s
z*BX+G7rqzokbTa(m&{Kx7R~)LVhHxG+0h|~e%(g5HKql=qs#){FJw6Cmx{}3GL~;%
zaE<_`U?A{yVV}>pha;y`q+!cz?~furi!6B7+`?_Jb1E;CvgO1M37fC4q&uGM(}JKH
zCNHSEDnU0r%Xgd}|2YIBP>&wAd_{xP&53x)2Jpa18iEm^{OkI?|90Jn*czkrXa)77
zxO{b9t^9v6_V#g2*8BgssHr%|<qh}K%3LCeBBc;fAqh-V*$o?$38Kf1MM`q9T`W|j
z((;@`a8+V-D&?S&$5z?m&d$l>F%?szi87XwF1$n2bQc>86yf`PUz;7z`TRb=$LEhd
zu4~ur`+DELZl15_t0aNs7|+y~_GYg92;-s9EgFv;<J$>W9-e#hzwTGgW}1}X{C`W}
z7PX(W-z*9nMfBem$$KiuG>9vIvl{Qm_rXW3m0n3P=Gj7*vt8V%yw=cc+ilMZtRwyc
zduayYS>@$aKCU?`RChsCCM7<wN%1Q*PUNsY9secz`*~oLfX5K6mW=iCsE}vZxo`G{
z^~cDY#}3;j9TKOaZtJDO{ktAzVs-<k0sBdRNLXu(1hSxv$buTgj5hlj;IHUk-BHCQ
zCk-*kA4766!yd`Y&-{Ezb!_EkD*i#@o&r9ST<8IhVbfg7Lp_$-2EA%@i~2oPo${lB
z{d+V1R$!F6fscQjQR|on<9lu4d+O?MdQcDQ_msTMHy3=0e;DlqUn`H<I5F7}=RHUI
z+Gr>GQx&)c4v~IzVzTL`w at xuXDB-Whd-O6XutW6+eSMF=7BX%VZ6|%S{vbFbNI5!a
ztbr#cWBeNhE;>jT=&gI^YD><0ss<%880Mfnm>W(^77)D^&w;<73uEw4gewu>xx-*`
z;CcLdirk(3Yaq*w(j_y<-Ps?A+ at 0gGk9Cpk7wps}Hz~J%zgPLD3$nsp?4R7LeBBIr
zf%6{UB4LV}{Uk*8Rtg62KIE?*&S2idf4pl8el?KqH7_rYI)O2GnfQyoiVsPK?6(N^
zr6am6i)@TX6cJ}4Wfw)%^?_$NZtTjFYHnoy9LA{cTcm1n+aj3VQIqTLWCgXj&qiQ8
zSrrFMwrfT&Qi_&}hLdrg*N0y}es}OgelEjyKU<Bw6}fQ7KAJxzY(?FN3tL+%vm+L{
zRa$9xNrT1@`dbk1tH-*S)Iaun+9(-LeAnoQH)<jTo(+L at cNU&%s=B*^;snEppE;gG
z9)dosf1RQe)4t34Yqb`-jh1^6 at vM!~OT-^6DsA>(F&p_T7itq)ien9Hf&`x9sz2S!
zTp7=i`$!D?7oU`QNG^rYbVpaAd7XVvIv)#6^tnTXXL(_(K>b*Dnp^dA$`IjTu1TiO
zkXV7J6Eim)Fghv1V}Sc_Y~b@|hIuBb^jyoLSi^CpkmMZuKRgHc$R&sE72p>@AAr6>
z>`9Qv7p3-ur!x!GALnliORYPH`fArjjClX46;J5nve@^z1&6CF@~Mg7_btl#SQC!=
zD-tq-D%hW#j^X=$O;9`V9A;WZa(-c0a@`5sfAo69h at vO6o`^O_z0JjBJ at Lc=G0Uw;
z)`a5T48kM7BAIdvd)T+=1&6l=)Mx_!@6RjyKRwSuxULt)7J}>g?i|I;#3yBl*;ttT
z?|Q8v^@U>#4j=Q?2XOPSv8C74v at S|<*TAkOcx^`4q*i@@OI~bYU2fHu65A3^`SwDW
z@=u4ia*9X0#LyG(e?!`rk9N^&Lx$rI_urc}I7dCRG$G5!lU<;pNUR~Ss-0-dVJh&L
zIbO)?ccA~0Jg6a=B<Et at -C|W3X-6)EoX0tSA9;t!K8ei<S<df+2Lsn=NNi7 at cR!Qg
zhb&6&<@dowgZ<?s#>n>^4ZrWZp5OOf&+ilNn*Zis?^Y?nSMVj~&32v({0{o4eNvHr
z5d86RX6 at TUC5*$v6=;T$ZzJ&<Lf~h at D@lKrxM7QQ3jP&oniQhHOWL9?rFu(AP?}3Q
z*|w)gG1VmAgZi^gHPI^cC*)A&77ChR&vbKc_80C5``a9;z&7TT^fuut5!AybG1p#s
z_gCs(&0>;MLwZjh0$CyroIDv3^~>IwUL at XA+DrK5u%5jS{)ZcUd#YIzw_xcJx<Swm
z;Nnl at Sw`D&37+-B`nA-M_gT=Pjf88sOwT1b(hUn2I*AN(0(cGeOPWDZiKB}P)Q%$m
z;peF9lnL$fh>zxSGOZ&s;-h3vrJ3ocA{>SUs~>Gh&_o;c52X#%rm#J8WS9q!8BF?r
zEhYE_ at UR%(_j06bcep~>d*HaWfxmjl;-)TJI;}$mZ3HhPa1n0rww2beSIHDj^1s at S
z^~dDx49m71b8WC4>sbSQtJ>5rUXGXz1Go$rJ+Q9TgZ^^cF^kT2j2035wziDe^<b<1
zfKfU~eAf@)75l}~OkJi|ki2+OVD%v at uSj!)k8;>{*{t{EkEem}QqhiFcf%M4Ib2}J
zDgduU!S3qIhCoB`cG>K17h+9;v+BdOz}P6-fz at d4R0mMVtI{NFxZ#q~Wl-dN<=;>a
zd5&#xEdVDkd^QE28-mF<A82NOn{;09w8*Pr>u~x{FzN><7U+MoWbC>B{}Ll3`S(7v
z>dSp~@OT>Hr at Zgu-!lR4ia~utUnOly`1g_P!sAjyC(S8`9a!q(F>Vj at KG{R0eS|it
z8~I~h+hx&(;3f|yIg`-Oera&Crm=CyP3RK_^shmZGYL5Eb4-!x>lg_*JJTXt)U&|-
z3cIje{}KFLIx18DkrF;9;_r<U*F}#ouLaHa?8qO<_mR8_2Lh#c!O!o)H~cFqFnSB&
zrpk=aJdSrOgbkz|TS+;de6So%Zmikd7Au|Y%UhVw^Iuo-Jl=bC`(mVJ-E>mDJ4Wf~
zaxK)2RL`jHav39!t0Q&o@(AceE3^(KE8_4K58Im=!I$k#aRn*c*30TAB2PR}wt)xB
z7QQiJi}<}8F1f`J9J4CzFtMc-FaqdUZ087 at t^vFt#K-XI{#~kvfS-y at QS$$5 at qY?<
z?_$A;eVNWK>7`5f{6U>q6K*sZ*STMwz+R at 8B{-S6PaMvDw%PykQ{HFtar)aC%x#8V
z`FPl$llS$5r>-5?<lCKkrc1ou)@3o;x)AsHGx#xX%t;oshZDIn4PasLWq|*}&5TcM
z^dBj8qfZucYW6pC*2mof1 at yKwU7VQYCs`<UigtM4$BYNZ8hkXWe1Ru(CGh>S**pgl
z;lU4oKKd{?FNVSb;SZT>AGUssPH*|d8!OPi?9w+op1xFt{Hj0U9XDbYd3{th65$PI
z0{pWoMFXi*Utc{7pF!s(5d}Lt;#k&zj}RO=F>3VFcLgq#$^9Q?nyhFeW5OWi%anmK
zP0T<}myq^ceABFMp-Ots99RJvnVw8y)+y)jJRn7|vAx^6kmSymd{<o9p{LFH&xaW(
zF8n;WYx#L>Cfnm?FPfK>{RW=v8*^UZ^Wa?K<mC?FwY$9Y8FJIe%iG~2M}D^QoAI*f
zA0UTz6TG#!+z=;!DePMOmlWdrVRsJD42N8WoCl;oB46fssxu{B5QlmCYSeJj$Ia*9
z8_Ncc&}rNVzngb{8S0D^9)aEmEPqs)co*!i#+lu8gU*bx)hP>Rk2y87-QN2 at J0v<r
zc(%d)oAm``)rg~Vy=~|W_+c{%PFlr$Ld_Rc)fn0Hh#zdcrwKiCJjgIqGS6o1{}T8^
zCA*(iS)0qVtj+7+!Ow}`Dg5SG+t-h0;Wx9kUo5b;56Y~Km%hUFavYOc8}2%-4MV4}
zuf~>KmtpN0DxmL>_yD8vqnBuvV;P;*?58?K;+CwJ>CCWy98caeRHCvCwSLL&;+7-s
zKRE~az1hx3*B|b(6yv|-a8FDL3tw;2X->}m0^6cZpD&FpRnf=wYU!--*mYcJ4tN3x
z{`OE}W5L{J|IFdQ?`Lbbm#7X`aVaEElqP1R>hP|B&k0^YGd{R5cTv+czgozqT3~f1
z3g-%*s<X4b4M*59#<_m6aW9(AAvb`jVA9%qq02kEIWyIPzV|NL&QJMVzSE+93Vc4p
z8^yJ2PdOBo(=ErI`pt5&?zc(Vxj}ReY__V>qB$h~^!4~_zIox?a8<%f at D~wG{M(Yn
z3D=0N4t7!KPgajxMr3)iR#LH?OxWk>-beD_x&(jMxEsV39XRFyN84SOjGByGvO}Wv
zn49ewlMll;z9QkD>W3mDEV{8S^(bqzNf!BuMK{J}UQ=LiO5VB;IKb-T+JN5U%IUp5
z^Qm*iYDX8-NZ;jF3LVIkIzp#%bQuD}Q!UD}Ul0 at SvczozH;cwrc>bvy;Xecg>i%eL
zT$N34TUs)ueUeRo@%Lv2dY`%a$<eNodGrlIiKutA-0JCBV6D22Tpr8^tjnMV_l=sl
zECxo4%Vw`~S%hmH`zx$n2C~hub`{EOzXYU=+q8ILoMX*HqTU*1`CGcslXe&U+x-is
zoQZl^8qy=9E^zaOj-Hj&*VeI at JlyzzDa5YqpXF!{2oB1h)M#y6nx+}7O=bOy>6s<q
znrWu`g7Q~y&yTaH>uyeZ-}-(_8t{@PeUCuW(ZGE+x=<CH_gt}2-^1)29eZUC^(*kx
zRWV7>+f`H$;%c2Ip at W}PmDz>v&{x1w_Lp^!Q%?O9_y#|F{ac|M9B6^kA?PW+bP>2m
zKYP8A=hT94@)^WfO0qw4K?Vycm>0d1{)(Dg)8icT^!$X=7US at hlECPlnL$*OC5gR^
z`%bUZSu684Te}XaTDIm*)m)-YR5v}vv;uMq@@G<m^ps}*q15x2ITe2$c==kkUXQ4L
zg9cWsbe^@5ek`<VQg5y^cP?GGW^hDfop$sV{ZjO&j17zgJmBbWVSe^ay?z-9fAh~l
zOqQCI_l<|a2i at yuqk0jy<v(!CP$Yjdc_<~;+Dk8p at 0F)SfD;Zp0kKpgZKT}(vCu)|
zHWh)3{UBmj>w8X8mq*P{bxEd7ql8U53sYI{;n-qkw7u9cy7gpLPh){W&PceFQ`Xum
zm)0|4Sz%97yXkvBRboTZDbu$}GO7u6`VT+3WRT9G&V#G_orh%2V}}nK0x?$?3gfgp
zhS^xLAv2%{IHmV`?ow9{Ze=;igdM<37y?}qDk}Vy7Cl`M-OdEEl?DwPXjoRljIfs&
zMzpe93|V-$%<B1VK`DcHMi*^JWbn;5>z>;7Mp8!0yLknue<V55qizRAmi8tECmL{m
zH(#z29DAv>J3gBl0-wUS^z$2B`}c1AOxSe8mCjlE_avikmC+6KT;#nXxQAz>iy)Vp
z<|triGS{8cp4a?b8^qq72S4PQsgP5LrFGK<IDSgQ;dswHIrdu>Hep-GRf`gweah`I
z!nT&H-{g?}cYh+sx#Tn#up<RxT}LBlT-=TLdpfGfV5(J>dt&628|SoQ6JossrQNg|
zd;o_uH)>TC_s^{qCw26;Dt+g^*Yww^tOLILip1$Hy$!&|^Y_^m?Ra;4OU_ak$(4AG
zCAJ3L_c1xq4W)(Ps#Qe0OBH849O4$eaXh;3vDP5RRK?jj+0hLoFV24DI~l}Y?OY$-
z9FtDgn+n88V(v at 8v*rf0i`I}_H5J!WvVl`q9!ll}<(IjQ0!s-)??w*F%95h6fA)CT
z!Q!B>+)Fg;O35a+{3!=JjqCu<pOUYH|F*9DG^c{C&M3;Ib97;@B(_^52>MDFiky%-
z$`qz3N8GRIpCSQeTH_L}UOmyT(Isbl^+)r2 at XYS8bn8`ab&I`c>JF?S<==5~MXk$^
zb=B&IjX}JWA(w%CJ^ZBI77#W&YOJCurKG%@lTW?3I&10x)|@+{SE{?YOhbtIX2n^^
zC#PUv(OZ<&o!ECUg(HdrmLc~`+z4YXlW(#F*4->_4Q<aa+)>ZPK!$u$QNzga>^xnq
z at 7ZoHW@<m4jrg&O+jzFyxr98s>X14p)veBuw(@-bV)n92!a5v<XFVkh<nK7$JCK(v
zaL+CNo~5kYxv1IG^9W=@5w?DmJth;pI-(rt5y%g+_vPhcIo>}D&tHoBXC++l@=cL<
zZL5hIr7J54lzs|Xs|NB$4Y!Kji0`S43S=*G4)VUV0ptwqb*b6PnyGA$Kk$%>Lz;e)
zN6>eyqf|Amg~TNmnw!T+#wQFSZhc4)Ji;9noNz(47Ji;2<h4;kwketUBeuV+&LTdb
z1d=P{W at j>c3w`1;y%2tzH2&UeB~rqnJ+mdH1lKYAy*6OEVdK`FEntvS0X}SQP})Se
zx?E~%8z%`kN9+o~XOzUO^5(V?jfBrNnRO#y;Sh52x#<%0H&(<<2+AFg`U at 3*Wn1TL
zLVF#=xjE`5U|+u}+E3O~$7R<-hn-ui4HNCbdtO4`TBG7~(spfn_B(E6c|CVf(IkEc
za#x17udprlsOXC+4uYkE41FrRlHVU%I3IH%cwBLOFkCvtfp5MB`Hh239`U!Z`#xh}
zg!9Nal5qY5Cy)J-0zUZXb!Vf3%G<bgWlAm^<&7)Tav9Mh%^N>+Vho(DVcf&T>9(J@
zW#O8a9PNMpCa+PPJvPL=@wo4Nm%n&-$7{5i;KOXz?g{0)I9Wy`M<aLnxuqw_ctKtn
zl0Wk<Y-isV8_~W7GNwk`VWZ>18Hd}s9OH+?)}p^Z53Cb#RIbciO;4sip|t^PA*GQH
zr6{g at dX#pLMH$bDf$QVeQpmqs at l4ELO<AJcxDxcE<G_8 at q95&qo}6huQsy$REjs}n
z_q`eUY at 2gQSn*S<9G9J0n~D$vrsE_P;C!rrt}Y$2aBsV?KQK%M94GQk0kizIg{vU>
zy>=t62r<7Ex4q>m^OXyEb62qS$WhnA=_~Fox}d$^mzxUBREhW*oBkKn#V=2zt!HIa
z<6XD(;c43-#{*ZzzQ8?%n3VCz2ZVeY{kI`!ifqyz#BTN^BQ{l8b_aE}$NY1d6FGgI
zovrL1aTd-Yh7tAi$w7Mog}8E8XD7QK^UQDH?Cs{3Vy#q^i at AjIx!hyrM(*+QWNupX
z*og=5{si#Cq+t8l;TlUOwvQj)ZOO)V8n`Uve4T&7&!J1_gJagV?iX3aQE^7Zk;2n)
z_o9Z68zUOa*KLEZZmXkUI}m0dZ{i%1OAy-xY}MF4CTM~#=R$vc%cW#r!+y6YF|m>O
z2AOo-U$Exe$$T82ZhEUhyYni28tc~p>3d~cIf-_aISc(wjsB+O``ZBen;ZSjgZ|db
z_qQzcH~u{7Z)KOc6 at o^Kc63i|IyL6Wm0HIY3471G2B7a;Mc?T{UoPSM)<4j<?8xVM
zM6^xuHJ)(+bK5DM8uH=`e!Uo%J5v-LU04qXtH4(R|1L)d5q+Efhi`uRUNj2h?>Wt$
zS}oP{<Pu_|`UvlrI_1bk+9N}*u#AXg@@&j~?Z9u1_ubbB&WIzp$Mxh&+#~z<J*eXc
z?}5)#h1^NhCoz1SZ$T|-4;p!#oSCTv$GV5~1JNwl*+)~2Q6>`4B=~y2@{f7G_tf*{
zdlvWzH{qa{Hl+k&9haq@#9Ddh>HO$<h at JkIJjBlyQj~iXcD`oW_E5p|#pTC1gG0|f
zyW=pe!hYe7V_ZHkXOF<A{V4vI;5cd5jV<jpSv!E0qu!AO3eMA$r~=y6>^c2q0#~PW
z3`!J4zToo>z5y&U7gYqCU1j+mE@$SZnK{^I&fGXNz1+?%n|Y5)Qtb2Ewoz}(Yq$~5
zhV{j)AovAc1#A+#=^&y<ll9(be*_1=T;1X6R7#yq%D3K!|Ds{P at -vdt)K0keIWc?w
ze*T%<zq1}%gn0R^vO8$wH)An()*S&?xA9GVopNihIBDS(avXmAgXBNj{Z0J;xWUMd
z^Zox=Ea!dIZVowmY4`?vG8eiUlr4HOu|Y);Uv`V9N2M8vMV`?9$ynba&?fsd at Qqg-
z#PhZYa&YWv-iH?lAAShN!5tj`80!VeDfSV6J|5RRqkz373i at Q(AkKA>vNR~))Qi)x
zE)bvibYD3h<*ys?U3ZDR<M-<%-uJ_|?&c6bj=tBpfA1@!(Fc$hM|T11)|2#NL0!~j
zrcb0Z?%KbLE&=}iee>K3CvYSj at a69#E_09xw0?RoyRlEF>}clFt+(%KfPY$)_pR<B
zy}P7H(^FCqcF+<yV(@riwWl_j;w-6U{d$qDt9zOCyOL#A>%COR#R_xN_qwbOHEkZz
zs6S$}x5-}mI_!0#@7k)m$^Lr;H-{V>6A<ItKyV`9ou~x1h?Wwc2W?(l;1t96_fP_I
z9xM-n4mRcV7oUuMA~YL5>{)dmEIds$qJPvznIP9ezZI24yK9wYo)`s>N#6uL<58il
zu5aOKMP6+(>v}pXtPa0^@V|2m_=+%2eD-V#vDv^(DBoxb|AoYiu%3bOd0&&55s^-R
zCxq4y9A7iq^W=)AK1M0MH)(FJQ=jGKIfg%=i1<u|O2xM^nF&n|&#Z0<_%3Ns<VhRc
zzpHSbMa^<zxtGVAf!!Z{)Dsm-HHlUuuc)S`^Tbab9$GDR_NdstJ<4+A#54~e2E_zB
zvq?CQ_%7>yEp32L at MnTW+IO1xNGIk??+`xM;Y|{u7`BTy%He0-H82(5`zQRS$K;n)
za?5L0-TJuMZ=AKXs4lK+0KUiV;EJ>C|7^InAW#t8 at N0n(IR&rl*Am=;^tPy8(wS0d
z?aIzbMI2tm8vWR`eokF3jL!kqOo4e%X-*Q$fkXIgxF!CJ5y9fd8t%kTz=EjZi~PwD
zY}H(@f)DWQhjS6Hu$=Bg&Is84>V92QXYHa>J3KCB-L*A!QpB+XleU)$fIp7o=dL_5
zcab=D>0M4)K0!Y|wOe0^e8axB5y0nwzOZQyd^RC7)Gn(g?~He at IN3D>oO_G{e!TM%
zk|PE_6-$3efg&#+91jc6OM!{He=YJuXi1DC(IvFUNDc~|2WJgAFLiTDwg%fCa1ZCj
zs39wvh(6Uk<^w0son>Ow1`}<B{1qVW#vJUS1H3$BQK9Io8>B<~m6wmeX9uoA`c4$_
z;S*mW)qwmYy3a{I60~^}@`c+ikA}d$GUBO|YRYbYwps}NUd049H5DsGVqlo>AWHIR
zan^`N^Tx7aLgl26k^&O at EvTYHnwt8R*5*|OO~=T2OYXKo^Tz67Q70x$hwY?^UM{Gb
z5UY3gk93Z?KFT?!WS%BqH|oFGNU4G@>yZOT)f4_ at l_$VFB18N+zRe(rgPt8M5hNlG
zs>zK!)3GSeSc0n<F&?^Sd$a!$a2Hw?C3UUKsb3C)cQPr1I_1AWb2lj?@qoXi(Cxz*
zeU!Ab+4IJ*eVCsPfgh7{rmO+h%tbkq9)`Z<WIQQrj at uD~)jsfa;&c0z1K$f>hBxU(
z$NSv!N1hsHOI(>W8oA?)0l>EuB-NUzzBu(#lG`H|dij1F%M~aSzfC%v_%wKxJxPxw
zYKH?G at y0^TYpO)!aa9?7Q?Muh4YAkph{1kZ5SJt!%^jZ~;wjlawSm;Jah at e<#Q4Oo
zlGG)=No=#fzZDqw$4cswCQ)z$CC=Tiyf at r>k^esk9t{5 at VZZ{xzmycx)I}?sE^^3o
zZ_YwneQM|(VcXa%2sCxVPR8#u<4s-Iclp_nX(w=_kycs1FIH~q^_M5QhGhuqh7%sr
z3kHKwf!t^9CB|W at M1yahG2`22C&>~^;Zrxkr at jyWA5F^I)Z?qygZ#a(8EDvnU%yo?
zh@%U2(JcwF5mwDhn7dDUuC(d4v at G|VCaUDO;)Wv?2PbV4*x?JmQ~Db5sh_kv5kCz-
z`f%MX9NVg^Au*wMfiDO?rTa!$S<`uI=R>`EU^#D9gX1S1IF~+hPMhu>OUT(V at ttQK
z!{2$XWs%=B2JtY#r%rC=`ts|-Qp-luO7>WRMnAYACSXEc?W8TP)l}mFEjv^a<mf7x
z%yUYqVQ*4n9QloX627-Al5Y*;2W8;;6bHSy2C52vbpD%aA7Y)ylRvm;8TnCFHf%=v
zqf}ALhS-Rlze5imcGBL8oR7$Fz;nveFC(9`xgZESz2BIridsAu`9Yzxofp`VzoG%Z
zdgyW`#Que`?O&^8kzeXh;E086pk&YLH5k{JU-=wL>vcjew%X83;w*q$TS)XLIu<f&
zJJSW-2y;7fkk63bT=#gMBWwYD2(k8Ig>GH8<r8nbO}}RQr5kD6FSRP!4Z^m49`3Bc
zgni_Wfy~oJxG1O)(fWY)f?z&>;4dh{%Op2a=P@=P`J&e{1ub1F6>`g&3ld;QF+v|&
zL-He{jB$u-j}vGJ&J3|YjnFrjOn3`<el8;JXZzmWf-|B)>uAF5(XXkxbbU$HrA{%*
z;I7_^GN`d%EOZn8b=_HTI+eww@%MK6?yV9H>OLfVNe`6&RlfX)%Ru>ae=on0+)o9e
z4u0Y5V7|8w7}NpbAb;T9uk!Cc!oNHB|L5H^|NGsj6P*z2E(bp<_E-P@?zxCbR0F?H
z^z9(zjh!JC%4gfUP8GvfbR2o=H`Z8oXlf4a$n-OmJ|Akc9HqJ}sb<eA=Aoa*&#6{(
zhtMy+(>v*O>b(D8SbuKYqI=^@b4mM$@W<SthQu#nud?wu`-X!*AVm1Te6R7y|M*@V
z|Gmff?_JG*FH>4XHvj`ysofo$314-P&WP_JvicR|BEAgS4>5ymuk)XfBeSsuClPYK
z4}sI#1y1XBx}mfPx=$4+A@|}LS at 0=|aBVVV&85I;swy5Pav!$ou)n*QEadW#0h93J
zrMvL4Ivt-OKk4$^ZeG42 at -o&>_#Z=%a~C=00=9`t%8t;vz(A;`R0G at 5gIqrza9OxJ
zZ%|I;pt at WTi1^U`@I{^Z0&}0>fF*hKA%a&BO$+Nm|BM$CTry%ysm;3Ah at Az;x<p)u
zo0CbnS~WWaocdFkzvnWL>xhmgNWt7JgPsTZj?Y1fe30C6tpno|xv>bRTI5{)IdFH(
zTY3jMte8nfxp40yw?$^8XOc1ZF8Piyd1MdvIbgf6#*?*Imj_$$_WkBR%uxl7=n?5_
z=v&oe?T+`}d9L8z;nm!aR#%b|WnM#tAO_%7^4<c1bG(q?)W3l3Y05b!1>5%M7XOUs
zA4-?!xxuIOcA*(#a97|?$Vcs at 4g#bBRj at VV8|kXTHt-ogjF`+Zm_z2WXLC=4O5$E+
z-{DS#uFAc<=oFXE%HvIKaTP_@>t|ICCwDT8_y%*i5v+15^8N(8Q0?TLkmC*PFB~VR
z(y8dX^d#VkW9?nVb139K$N6q14t0mP#ej~OQsj?cPV7NwlVV_Rkf-R8c>!@Ti-}EX
zoC)><C-(x{VMl2Z-rb3E-;peiyEsh6+F at sMIKN^&&RS{6fuuPzz!&m2e1lnB?z1UA
zY(3JNMU_Ma5<e8M{m&vkbspwuZ%$0)au>8Cr{@?7vLj?h=)8p?1xBKC1VvfE+b3$J
zE+GHJOZdL_8V at B$Y|I(t{7ye`*?K2 at 1#*}@Li~w at W3D=x_6Ul^h>4^<>TX~|zh>Gs
zSBRd?nJ9&BO0}DI(!0S+e1w55nm_+D{6}rRat;$z at pc8@{K at C*Tuj<1Xr%?Q;`+(3
z_aLr}`ZIjO9{jxZd-;E<UpLo{JZgagyY=O>rN at H=UHYtbOqiU+6ul|r$4O8?V~UZA
z(?3H6&4Jz_Y?1(1$lD@!F*6lk3Aa=4-2Wdn$uF4bm?0L#bbrdS-Z^!Y^uajHyUH^j
zS~<ZZQL<aPb-*Vou=dSF-3Xzp7y0%_Tk`h&jQ<6`|BonYj~7hpVi;VP?%M}$f1FBD
z%M>)7$xlYP_8DSf3+jvtg3r<jJJAa!2jT4^Z6+K-zwJQ1u7l6sd+s;n*+P4oIuEF+
zGa+B)_AvVk-C`-`rDXQgIcaEDvw`qNZ3Z^`2jO;a+mE|O+2P|tJPP}1Ocw0!83OQ=
z!-i`%<O{b?0fruRh<r8}kM_>wimTw9b21ZwDO6V5ok at hZmF;q7+HO0u`20b+f)e6i
zAmbN4oJybldA+VymP>Lu!ycSU?DU&mf>f;}MWH(>;W4MM`>O?QnZZP+#=bnk4veKo
zV)Xq__q_u#Lg6{SW8k2FV85Ne7hJ7AA9kB))a;{#e+;&}t`vpz67V5w>BWkJf=?B-
z5_7ZP$iupi;n%;*1nSPED5|$OllZb^3p4)LXZ$Lk&Rhw<Y`cB;1zj`Rz;EPK-D|6}
zbPB|V37N^j5TqlfIZ)uTET(wQFVQmzoam)^<U!@_6=&fuFH4!Y^iC~P;YnB#$#zOA
zE;6r1Y>AN(yDQ>IkRzIWKlHSL8f8US)P&h@%Jimg*ckhfznk<?f}?3IG;1#~CyAV7
zu*us6BJ;*KPt}N7Azdjr$d>_ewtV?$tGyMRLZWHF1}aGT1P5WyY+__q#Nra0u<kFg
z6U>R4kkHDgfEhJL9F<_M7xrQfhpmn|DeYtC>4 at xF3H<51v>kC%6BQQu^w~!&!GChy
zFAp=9FU$Gg+uQU&dnYGwF;Y@*r2lQ~ib-X+I5X$>(FR|8q{2^)x_sy(zCDJ(8H)Ds
zwS~7XE^*3=JMk&R##C{M;0cH=m}`sY$hh49*<U}D>vVfFb?6tW*$s5%eH?=MplB4q
zA^hG4t_gBm?6o=7mz_yVJL{Akuw9iQKY_Omqef}_$Qllx9(>!nACiKYKC-U;-i9_q
zySyFvmW|unMC)fHl4~J%9Uyi;Z<$)UYID+Vd7mrrh;-!Hf+o?lDMQGw&D%i*%b~l#
z7AjUCM`1H_MDQ@|UEX=;E72%{iIf$x!N14Nf7jzOQjcW(yutgqM&|kY7i<mxYu%@K
z at 4?#F6Do^70v!j~E9U6_UGw9AAAd#gDOTp44h?qL18R}8_2mi0A>;K!=z~|Ic>W~q
zfOsYP{Zi(hNJrL(jg<Gh5DWRG;2^;U{?C4;xnW+inZq-#L`~2Dzw*W<5)T4<m7RMA
z`R1l#8;|Xyf<|B)#zr0^>(7R1Og+9&S;5_}S70Pmkcopc9**2d?3r|BDhHoru3#hP
z8FwW6bV_8!)61ic(388-4oAeRq8aQXMq~b7(k|j+$Ww9F+E-;c*Vb$d^I_6*Z^<K=
zUh|S_SEe4e;#}DLm+pYAUe|&?c1t~reB;CkQKKSRY$ua(i8{05nTNe~#@r6SOl)ox
zY;Nj9kR{bZnXm78abk}D>U*3ZS9g+(cZos^?#+sGOkndE(FCl;$;=gzPP<byO}89#
zkplg0(A)1wedMMIPm#9e`|xGVV;2dQ=C{-bo?(&#i<qlu$qUz^jCO%Y(FWPVgZb}G
z!pA7nV~r*F!y>PL5p%}3j4=SXPAb?K$hr!OefYGrC%y*8V_W2I$e~8*2$dE-EX~Zr
zBsPQtCd=>V#0Ew#Xu5Kj>Jb$q_Qt3Q5>^{LvS2DshFl-uiSzm~NB?`w5kDV2S87Ws
zOtX{uzD}7w5VNeMYgTrAD}&r|OfcI_AEJO0VA7EjyzAYZw81*%ZH!CZli at 4K8dUW2
z?|n27_!Kua$Q?m>NI$4gCBErg_@?9VEK9gY`Y+g0D=kT%xz=Q%osGaE2IiiE{PM*W
zHMqniRI^$PY}=EOZ>q28p1}X3>PI7!MSq&ssD3Q+1#BCDksDH9(mjzK0^i_M;5Dd;
z_yK*WrBecV06JPqI_9Nx<~A^r7t!W%(D#B-rf!spd$4aZ4Ekmz<bX+9Weo9m#aS=5
z$%2OTs+0DL&(<}Crl7wqL5xxi-`{RCvWO!j at 4GWg@HO!_fyaYiHv~(x68=5Gh|LcY
zv_aQU8efGx8;X5}7CfqmVVXm1c02w8|K~ldL2mAQMFaM)Fypb`r)YqlxshNk3yhLu
z%w!7n!7d;?t~Bv~X7M=4_sRS_VmbJ74E$K;kPm_IyEb54_k#xqF{IQcMxNLxdL{sQ
z?oN8FZC-hH!wJfQIEhV=Y2D5g#GbrQxO%}6xheh{+G7y$jBVjL(78Giu0=7hqb`Gv
z{V)}*o(x at Wc4WEwH?%`C`-6H$<Py=JFc-X(V5cjw4kgFi<-xYwcaRTDoC$e^)Z at Mc
zPXD5WB6tMiXNf9`e$%{U%MCKd$y{NC+?u+k*>Bj8?ql^@-CFf4krg5ad4VO7C)LsT
z&gIk<vfhKo_?&R30kM~xU`NJW9|{`*%9XO1v7yr|V~CFUFH&B#gAF{%4Am$orb6&N
zB-iK5L|=#hbkOU!WiQc6e9Oa{A%6U&hiw&v0iRgO9x2ewE|;y-#`@-W3pio179qx<
z(qQ+lBY(OM95d>NI>on}6S4zov&*FJ6%8p91 at 8c}(Uke=g6;<8zOy2S_HU%UFIIuO
zjm$U7Xa<~(_C9&^T=Uwuu1AeRE`{N`VZe at Xj7d9yvc5{%9kST{b at Rx7uA84sN1ryC
zjhhGY{GUV)fhk--IPRz(V!M_>4&t;G{pQJk><13 at C~&K8e{g#H8&E%INiH+ku4Rhd
z4aR-Pq5=u_1o0KC6gHI2BwPV}M)KBfd5G<H|4T%6Be>8Cr)W3klw{1&sj%zp3asS&
zZ|nW%NluAB0Y)&F%&Xdg6otT!I7Jg31b-aj+{AVwr(oVQRa_D!3aY^AxLz`IX}9Pk
z^v at 7*O=MBui;5wmN-8c1FW@^a7!J^t(LDu>9~Y7#2nj=sVP-CQ2I|MC9SC2c`#AjZ
z_-pV*tVh2XB61*IADvPfoYxSRL#`v&llH~+n5+FJkaf50!FB059*a|HyM0MRVhQix
zlfdm&?(=}}9yTFTpN4vHQNkY-U>ES5=;&iYw9{Jj-{i8vbu03E<XyS0b*b<Z0D~-e
zMKf5sA+Ie|=C?m2L_dT%{Rrt>f{B>d!PP|1cO0hYhZ)qfQrzkmx<;>wl*X$gf1^&r
z&iStCYs9u(!W#CgKpAlaW91cEk%;`vnsz*6oqATJ6n&x%oT@)U7W>Grovd@=Vqmn~
ze&Agm{x~qFnf$Tm5#uokjsjpgmd8LJzsvKjRw2)MgReb-zv0(m1M)tbaBNW|#ThHE
zXXMj))RV;C`r$_P+8Gs*$rCPwWatrdT=6TlUfPZA^?->lz`pL~tMrwzJ_;O{$R(fx
zUOAQyVty(xYL(FG$E$VCV?t&GG%=-zz^e_NJQ;Sq&_h?aKSmzgZ+;n^n3xaW7Puwp
z<t}>8v=eGAbfN{3z_C-e;X8%y1l!PRZN2KH9Ul5Mat*czab79>MXf_V8>R4H>fCCN
zAtmw%_OGZ{MJ~`U*1dH}NkytxO>yGbfO>UglJD3IQ6JleyuEL6Cib5Gq&BF~7MF?j
zk??8{h#tqe%&?cj8{?MYSRan{`|b<D|Eu`l<@+Cu|5xyA_+Ef{LH=0(jks4r|FY<w
zHbK7_<;l_}td?P$jrDi|whC<-u6N at 4-*Ejc(c}0I7Uve>zJ;bi9J@&^h+B^HcI;mh
z1z0_OvT<Xue;voOaNLIdcK*I^G5@~++{s9+{~BExFfqS$&JQ at pFx8g|UX>1Trt*I=
z405V2!?OnIzru!-Em#Izp&Ijk9Oma2sDCo^1c>#rfcv1 at RUnyp0`sc}bqpLep1lBa
zuMXQKupO;o?s?@I<Y8ICoQG_3ik~a9nf>r($8jqI`swW14Kg)9R}%fE?f1EIyWwl(
z<cNhWjmO)NaTquhV29o0PJA}zoTG?I(J5?xHed-H;2k)F at qzC`9?OgJb+)0~qnCVw
zZzgqo$6|cTMdX7TPe9j(z_8o~CFFyQ+#d*Ek0?O*nOaQusUvj7nQ4))t2<3s)xXex
zEwsmKAQO<f9YTJ=`P7J53I6kK9saPj>s4?4-ox=!9QVEl at dB4ps7IIyu#dogMsFte
z5#~zfI{yFIN1xFg;q4!)h#$tT)wssK0>15{`}Q9q^Ss;w{SPwTnkBH;-Hpq5VgX{i
zKA<z1!POrp)|0v<9Iv8hW|wpNfPUFJpM1v<{&BL#5UjJt4Sw^{7*9_U{6C{))wGh;
z)2bQIiPm{#M=y5i<&K!;>>k8~?W)*??UKX013raKIjwn2$$3Et+A2sk9lG3o8Ism%
z362ahd8}|=KnBL?5xSlqr*lR7VS8)CSlr33!n<f%)d7wl_FXyy_ChCh_h2vbwr25m
z`JeSNT<6pb=hxrTu<ID-FW1VbK5SpHG_hUgZ#fd{vIO_IjRn*NVxxOVAJBxY-^z0V
zRh)u-*)kt|EU#2^-0_;f?8q5?e!}+LZpSmQjTY)%8+L}Kh?jM|$C<6}Rwc1#77KyX
zTC+hB%GBD~F_wZo9?^d4g1#BgokD at jjQR$;2jg4Q_i!R`dTAEjCI4Y3<=;Pi4>++m
z1B<tg<+u}Ju9y{z1|fGk=^*wH)`-&m=JgG{J#Qmq?{)Xvlf=?Bj|rL;&=j+f*z<sm
zl9ykm=LD!l6EniNWMKH0R7{RL!0vG#K;3`sd)IZms|R}8I?YV^D>l!mqMGYFG-I3A
z<-AfAy68NxB%^<>byH)+3z%bGxr6zHj3rt06DNK0#y9#}pS;lkn|i}ZHD_k7l0Hc4
za`;)Sx$UUCmg;x8AFActVPX@<_^fBnir*#}5-;YBu9xnik at uB8wC@Z})`wcixf1FR
zTmj|rj|cuE`OLta%ofiV+3{FYu}%iFN9aRr9pMju=r%cjdtgp>i|1XOZ$&;Htm9)w
zFUP!a0x`f6R!JX%tqb<Ahp5A9%QAA`Vyt(F{S6||!SNQdrp`Wswf?cpT%Rpzq at ZeV
zFx$)P%9Z%GN<$Ua*G7S!iVOEh?#d#bIP9x~TG%Cc{a;v5d`AIQF at G4_WVC_5b(yYE
zz1E8UDZKz4?n0}H!g$-rkbO0{{fE~?{$N&e7uBywuW)iI4?diJ$XCGjY~bj*hg~sQ
zM1~MFX1szjPGY<1<6(7kWV%D0a_Z%cLAIQpEt(hM&j}H3f(}rx9bnR7+tnO*a7yiu
z7~4aLWpM&O*sr>XHT_fcp+fBd=B90;M94A|nO;#b<ix=Tbo$~4>?zA(Ps!2NJx#b{
zUIx~E<9)r-YZnueF&IhKY2-;P2FJUy`fu{-1pA}sQVKi3KYr*kmw>f2A%SC<7Eeu9
zJm)e|UBHhWp;MkX?ivkVY~>EfUpR+$L%I5aJNXIQK5UPXI2Z0I>RQwk)B&U2iayea
z`Sl$pHsYa}tOTwmg8hPU-b)l3$ZG5xPZcI`^w$Ktx6MtbC0x4_!48tRK7M^zrh845
zk2OO!vjyu%w`!g4V_+3ICiM6**vp$Yd at eAF#FBpb<A}|B+ at KOUC<e0Xxo`pG^YKid
zuvgHYIo+U2S*)ldb^-=*mcWU$z<$*@POG~B`@Rjb<klD(GBDOB=rg^sYU&htk}q<B
zyslM+Hvb-akx?Xu|0z`fd|z~P&0^TTKaXgJ4ElAQ^6=1aYPJD#Qv>ia at FijHdzi#j
zC4 at Y^xWi2+OK(JtivNE9F701LiCB+k>(+*UNAwQpePlgMMVn3m&r)&pTeU{Y{!~7&
zV8)2IggZkcW8voz?o|APc@;QKC1Ni}MOxsK>{SH;Q>U8Q6Mlo@%s*5NLO!+7Pf<vU
zZt55AWR8W4rIYw_Po&;y3WR?!cuN!N>269P*5<5u*axHELX4U{^Krq?sGsMAMMVCj
zLIfD2xYs7yEp;;*^qnkSGjzrCyzNqsc(3KuP*M<VYgyWJ3~ArF$D7a&4R=oIw#KIm
z&Sy^NpW8*+;{G$i#lk-Wb=%EMRx}WuKPDZyb~mwI+yGs}^ZsQCs!*OGd>h6$IN_#{
z`sQW5IMI447-Q3J78kfWBPuQu-7Y)_x;Nwp*koVh`$Mp|KdhIL{(yF3$T{24MH$0|
zUxwbC>c#cJP6_^zhvIcIqL;#+M)cBD!CmMS9^{_VaSEb~?{Hzhb|S9S%@knH5K9k}
zm^|oV(4*gck?16Mw;>-5=`Rv?0be&N#D=Na_eE!?429o<&Fgz!PaYt8GS?@l!?#~1
ze6f&qzPev$_kQK;tkqX%F4UP3anY^d|7%PN at _o;IZ~fl;6 at FvzSjLlig4oh!l#`SP
zw!j|Peq6q?q~9+K$|ZrW*heGZ4BrpJ1XbRCuz3;sftx`Lps+o<-n?XMKVo=Kd*Aus
zHHIPqVvkWC2j-`(F-run>%m5u4qKeB%}M#8=iX(qBU<G7g7zvUJCvDE$_2koC118)
zrWEz}!1ruSzW+TsU^*-AU~TJ$PxnG*1oVED;P3FeyF_0I8h-!&jif#KbEr4isAakU
zCK%<g>$XDohMsM6+~VWLFemD8UXF315LB5rzRfjh(bl?=4!(bckmq2IBz9 at oyy$x0
zTJZ<3%?o2T!)2sC%CSv3nA2Wvrz55sS5Ka5z_E{WT5;@jc^5r>>Q}2bYQKWtqDS;R
z-!D2`qX~A8{UDOyWv8R>Jf<c%;cM|}#5Sj0D3Ixz>B7Wbe{csNzra85*WHi;ZJ#MP
z=WF{Wv^^u&VO#}9G(+cRgzC~Fft=(RAh}oy7BF*x#R(DolmBkJq1Wr1O1lPKN2q@?
z?Pho)+Gr_*F at d@P&X0f3B74IS>0_CU&HEmqC-d=y)~e)akE9UoyMoj!)5grz_Ax=f
z*Xeew?H3 at cE}SECY~hd#2Y!P~DT=VOkiFFE{JbIfxYnp|<sHO!9j+Uv{~#G^7wgi0
zc<2asG;HtFa{3qeR^5cFHvEWoEAA^*uN_-edxY(UUwHujLE at kCD;=;RKE%3!Rz$M;
zaDojyq~yRwkNknqIsG!=Uvygzu^jSR4I)qMej}rC0oVMk(TFjv01vG!@<*|Zzt)KU
ze+P5Z9irFbT9^72jf;QB6V=FTfV>47jPn;E8!H6$zqi3F=)d)n7SV2uhvk}^ME^va
zJtSGoKl4lCM<X0o;kyIuF**FP{RfV)P9g&!H`Ul at A7MPm8Fx>-G`hJ~$;Y=~&2RRb
zr;l!~!v9R&xG}2P<i07-GxZuy(4cV%{)w?skGZ80 at s$iX>>70!YP9SnfkE4+rqYJE
zK=u+ikX>q_E<miVeu<WY6IBj>#G=U0=VY-SZhlyQye#rJ5vOq at Hv{3R0N+H#bzdL%
zjq%r8$QTzGF~+weKB0jjaR4556vl=M9G$bU%@BM|uc3 at +>#YTWlAqOUQ9p|!e<aT$
z_Tx^u1AH-P`(v<ou9e(X&q}>Vu*`#U^y^(q=7A$)P at K&4O0pHT>ZoSF)$_2Oh3%7w
zT|v$XeDe-)9mmEL8cq{g5&l{)c7vn1hGfcvIrX++nXVZ!!@vC>3g#2vm_5w2k-3ri
ziS*mL<fjHPJ`}|NkNh at qG1`+|txELw7r`w8TLkg5Bn3eynZn!w*DU6{`}5cvO{k-8
zem%%$?vZu73U-%F9ccsaTp&8;vq_Kt_dEc(EF;E9<`#lIhreeo>U|1xHhek1))?{p
zhX2pGWWs~bKw05G_Qo9h=9*$~)ZJ$5xfi^CPJ at 0?r%Eg75d!mHP at 4)H8+#mhpWlcK
zJSh%1QNqi`&m&`}0kf+X&Z$Xi1<%QWsT6V}?YmK&9_B#|a9m8zOb_CG2UV+d<^rSC
zMeL$C6(fR?*K at M)E9k%{W^Rruf_|}^%t?uV?Yv95!k^Q<ChCI at e&6qut^3P;J=>z2
z?vkl}I-}P6O^6Y8$#^@yFXm*UH(rSM*Ao97{6(Udh~F%p3rB7+XED)J6%!!KBDYrJ
zuYy!v^Mmgc at cG_!f5F_g3jT`&86OjQ$+op?UEZ)Tjg2L-Yfj0bH^EiBwL8tmULmn;
zznWH=#qa!+&xNM2u{X&vhiQX3Y9G-B_nM<VC);Fydvs5!g3k{*{J!lMZ3bVk_MRwF
zH(9b6vgKLGbb*2)QL*7Ud4{8_q89eFY{ccNP21#pzn+i`<V||xzP-*nA3iNdKUjcy
zZ70SZFbDg0Ej{iZ7Tsf3zUTIza{pQrbO6N;eD at V_gl3TIfS<n1q+!e{O*YI^J&*x>
z{u}t`7nnNaYMbY_+T`&0vyKqo5Akh~xFy&k5ue89iVjM8;2Z3tmD-(nMz5%E+!*Nm
zeZbs%u{CHv(r;#6HM!&&HqQ-GH;>&f6VbCe1`ejOA9{U{y2(Ud00!wOc@|=T at Eq?r
z^7=OMU+sJDa`+-2!Z&8UvH!lmO+3Xro at 01>=a=;<g~Sfp;+d5ry;GN*J_!FXUq4=5
zPhbKzCnlw^#WNvCdbcil9nR|}o3r*gVPAcc*lVVMvw`T04Mz5l`^~E(FrW66X5{t!
zhm9536W+FSEcyt44lzLR%kkgZ(@A7x>E#ropG`j{&laXJ^s3}Kb4)h#Q}}Y|K;v}*
zNkPDdd}t`b+WmC_e1*Kdh}g66{#nOhW0D2jL2Te4u~*XB%rRnX6pvcu2nWvu;*xtr
z6EUVjh(E&QRNsW%r!985Ix=$ceH)MZHvQLyLy><}|H}I-9>H_ebT%1xu$L|%<8JC&
zVk^OX^nkr4v3~W(6nyN=px0i5GA?HigF0qV7ChU{&rQTHSKu9kqimW%pIxj)FjCPb
z_);^Cx8I<T&?;SKoEpBDY*Qw<f5$NGm}45z2QFg`{)S(J^XL*XH#U!X>m<wDz`}<S
z+<!ukOUFh6+i_Jijcs)0Af|4?IA-B`IB^kwh}^DMMeD51E5E|=RP8x^xz&@D1<Y7B
z`g7)#YD=<X5ZJMMSYP__oEZx at Ot~T2+|j(r?7J>!%8k{};`(LKS4clg1<tJ!TM4$?
zwSRW0*kI9Z$js#V8XR8`cL93d-POt1Ps6b+_Nps8>>A>~4d|;kQ67 at R=mxe<Y=6c5
zQMkTu(W}s-lBaZutZ_f%c$+18-yr`Cy1bYB7G*6U`WBImnBDyPKgZtCKbv3wuQ2NP
zK|v-s2q1r1z;D9IVCz)F{|Y_U`Re_(LZ|)R##J(IjL-h)6ut{Rx)S5@&LTHti6Q^h
zCyxb~1q^HtLE?PM&Jg}@bN>Xdof&%BaxLVKaYc(>)xBmhk}~RkSX7F#$)<Ec_T|EF
zv7Ul0+MAp*V0t+8Ak16;^vdn8E#}uTHPfG|Cu`RO<=ON=d3p^E_sau+-jM$z50od2
z*q5N6mI&%dKiFz5Yon8xtMXB(Yo!BrS>4x#?Q_qeJ-aQc=s^)TW$Pj>;Yga>j5>C$
zPS!3Z$8mljTrp)U>i!Yz-@!R2WC>0X=+#+D?(1OLuxaK(R)TLP?(e`O_54 at 44G)z2
zeM6JuyM4bh^~eEZ0+xQ^Xs2GO-Gq7cHu`3JOcK_y9`-VqHuG>)5!qrLWuDk<3I4N7
zzumVc<r7;DzwSlC=JS3*kS>$2gEPO^!90IvX18bz6 at oT~-Cv4vU4DjE0wbp|Z6=%+
zV$H&bOM}C5LxOYr;aj;5T*;_-sp;JY?W!>5Cyc2NFs7bmD+ at A{M)F+2bL?H~(}=B`
zqD31O7XOFH8c)&UVb8o%8x!D3Opk6cD>ru&Tl2kaQ$vGR at dV-21IJq(`j?Als?+H-
zaJtWDiA>Z%)=AR;Fcw{~jVoy26QMWMdF7%JC0M(iydJpRmUB^Uv|t?K{^l_SRjj)p
zlkmRbna1cJ>y*a^Gr at lX99KJR5^=m8c(yk7cUv&{Jb$;LH$X<LgbbWvh;2yW%W;nP
z%hyYX5uX&9n;}b&3AKN52|iyh4%En8=It|wbg!XruM%<EI9_ib&&ytwu)n4F<gTkk
z?y6H-2fcFF>@CWbKA9^lEa1MaIA$~{!vk{ScGzZ&``mO3Fc2;OelM_suV8%l78k)r
z_(Rx1!7%jQ3_%sjuo6D_S1^V=n2X#Z9o8?{W{AFoK5&bf7cr7tQwsd*7oV{HVTi${
zk9&R8ruXP;@CCgLJ?<1eQPe}9S6Cjf5$+G)!`n&0n<xP9+5>f!O6m&rR<HSik5 at KI
zVXxk|nf^Wi_HUFs?*ZIw1M?k`!BO at e$OQRl<F(LdA&;Z{WUb}P3ha-JpOY at jbuFHT
zY<@1v15eA-t>dY+^FAna)05c4^pBzT{bt>b2g>-V{tLd0#AeZ}{<yU0i(0BFEXVTA
zp4XZhhB6j&*0E<-A0IWsGcBF?L`r*U6MS;&5$#b0yictNGGkYd!q(-I*=}D{056((
zKMv2}fsgkm>-w|Pjx(?K)FfA6ZG;^WYbdxSz9M*om?Ze5za&0tpKV75+*&f51OIX<
z at h|f>Cu4l8&<$TF$=PbGxRXF)0*?wD at H@Jh$)-NucZgUDa?ZTb>o;W9ql_{E?Cu56
zdCy1ItJ|&ZZdv5lYVf`oWszTHD6Ci9vKbz=%G%?U`Q1d at 28T)f-p2O_hb?!svp0z!
z=f{JSGIED%l4+ at aN`7xBj~!-!SB%`G{@B|7s*K=`A~&jc`u3+ru2+BH+mDYdR*U#G
zeKXqreS%#O5Sx&PZ}+2qD$|bzZJT;w8#N-fHW{(CO2pP`xoM^rGRIE*6><yg!29<u
zI*j^QMd}0VMCZY(f*{vu_Jae%to_)&j+{34uzl-*pOwS*wFATEJWlSP<PTl3fxMUC
zuWYvmw0u0<pMCF4#ygdGrxx$rf_UCB0YBV--;09#@*48K9^>ETC%xl+mvxYT7xG_|
zcTI=QZ@)R;Azp|+kUinKkl1J=e9H}(|L*eg2K>u{35qt9A3Vy6cElQY-Am{3X+M$U
zuvdVWEB<f8ZDB<X+ONh;h|T4wVF}lC4=X+sr_()p6<wFISacxDFa8?IzZ~UnD1uBY
z6~;n8^4a!yTz at 0RWD;9X&$p_avP5^(6vQjXmAWmR|LE<pv)w&atSf4~X`5vgb=flE
z8yCS!2wtVW3irUC-2q#I#4*~UJn5-0=l8)jQ3R|?Lye3w!3LL351&*n2zI#Wv9O1&
z0DfY=pn=D*yue?xkH@<J>qS3~GAzY*I<83*SaAOv{B=g$8$j-Xzh8j4d8}3KmbG~D
za$34{IUR~y=2W*}J@|0INnDpycE)G~jzM-@?;1Dyf^N!5J@{hu%GD;0ejZquK=}5T
z`{uwABxmMK4~?~j&H={LK>b6ULS*r>ILuez_)zTfUuHdoIk*(xJ3#Q#BUB_8b-_VD
zn at _LAGr$7^e+SkEM at cWZ#XE$J|A7w*;&tbwns+~at%m#1U)tr1Jt{i^TyoMBOaJ>H
zBSuJB at 0kVrMet8`cXF at UhCCZA{U7}T-DtMMUh(6}V@|~HgsrhvcgqDXtK!-mtL6$-
zlkAE>4z9&DTF++sv_QRId67lz=#BX{3V9f=P=b-#HrV4^AtRh(NY0}}#T!NA4S!$)
z5f?iL^KXp3%k&cAO;uQghe%8y=@ZR<#;d451$<Dz{1F at p#-4}Zr=FHMs<=MbCFZgc
zKCX_({}Q}Gstd=~z;0i~Ir&(-GygtMo~bK~hwnlEvJ{+mc<wn(Kjez+7+~3)#m!@;
z&yYSua4Gz`3j`B`7}P*gE^ir&zr@@>QQ&Dv-gjDbo!~a$d)W><#Mr}CF(i&5(9-##
zzhe)#*mC`&aKGOE+=4Nk+JX=+mukPRrFtVj|DSak+~PgP8A;tY`#thk$sM{7HoWWT
z8v!TnXE&WZc4>*A2)s;pc-~oWUG+fLU`SaI2lgVt=d26Pv!TCl6^5SN>Qn~UTV at 6=
zZ;AfL1jr1gy}IFLEi;2JpHQWHNUpy3p04lX+jv_I_uli=jQIJ~HQLbZ7xFoE&HCca
z<*;k{g-nyWQWj4E{>jq+!H38*hc>iot|iii-g1V_sHu7H`4?`Y{kPU6ckin)8tQ7a
z#&jB7*E?n*N6seP_jgAZ*Usz-H{lyK_xBA6zJ9lc?{|}ZIoYm}e)qhd921Nr_tv|=
zFe)1G{C?EOo~U3$0@{Dj@#Ig_S~5cyBYvyZ{OsE<>yy{!kU28IW~*``-_Co_OEDMe
znyu at vhB3;-#(o{!TcT<@)|16Ha*IO}JA)8wnYGW4L5>4(T?`?fYtw`M5N+)3hv&<>
z=oM4z*N(Sb$9I75a;u$IRoQ at Bu+xjHZS-O_6?MXUjrHZ$NsxE#c at DPy-nbF%*NrSN
zqx*y?FYHHD&@da*M4Rx88Nh2nF9t at s>9=I|95Wg7U~uG*>L at S1PS_*uB7Gn7=8YJc
z!|g;42iPNT^83ga!Sgqfu|e=?k4S-k!gqfQd-H6>gxbA*bc36+=w#qkS6AGCEK|<R
z6}gbVZw-7N?;)p0Bt4OjEpa=g#1B{wd>s|13w3y$3w1{@uawu|efZxM at ICU8qJO)z
zkcS9&(ne7+;#qI#j{=vt446dTra3Mc`Z9bqC<m)?BTuS{^u?GL4EKl}2j1 at KINz5t
zv7^0JnL>1ZVCgaDN9fM+_iQ(mppJm$6ZFC#xPio%(vyha1hT}8X8-FQ0zT$6Y7}*9
z|E|&1QKN_-rP;6eY27e97ct at C8^~Hj<O#wD*^()Knb|JoQYz0 at a&0Y at zvU2aQ1~Eh
zhNA=@GQwv1F at 9-H>xgHms=W-`Yb`9PwrWZaTGyBCJ1*JmIi9k4=(uEr=XmmFo at cIe
zH#ktQk{l+aTx5MmnUI?oxjGRSd(zXo06LqLYE4oXzdEW_SLaZaRKx#4uCGQsV+zS-
zggH7n9(f=}JZtxG$lo#I*+u756n4ZvgP(+6<O1Ks739ZQb*s8YerqQ<{Up}z>%Lf}
zn4AQAZL-ia2XbV<GYQTr#Dh!HN5qQ1A<w(+dmiQ?)E{)6Ub+(Pn6jxTYQm=8Im<{L
zlKg}TT=*0o8#gB4H_dObg&jekx)h^;j8F*q>%0aWKZr{x4C{>H*K-^Xfxj6xUf3`6
zKD-rT9(f)H__QtkBPLs}j~EAzE^`6$E|*lp at 9kogDC2n&7cIRaxAE;gkODr(8`)ts
zbFvZhu_$~EnZt?SHR=S<Mf`C}8x``L!gQACT!`zL%(*N2k<-v`)}I1Az(`!=x&rQq
z))5_`?nBM)MNaqty1BTDe%Mfui#PEoxW1g=fOA_$Nrx<>#<=#5qQ+SCpStRT4-ddb
z(XdkHTVKbG8xs{sFc!qWj{F>ZwYP|D9(n|R_jKT6!5g%FJ&EhepACHAc~Nzo8~)sZ
z7;sM{!QS1y?6A_Z0=!UJI)8JP1^kTRx5TLek6-(aSINBv<x;mmt?3bcR$7`AEa+x{
z5ky(L`1pJo;o04Hn(W6*%77(k at w}d`xf?zxb(JE%y0uW79iQ$!{wCpM%OJKY#Knxk
zbNi(OqB6;U@%fJ_27f)qjP63*+JshcvVR9V_C_YF+5cJkWLJQ>{0J9O-bSY$Mh*+@
zy1J2NXIA&*E5lL_x5p$CKSTh=P8qPG;E_=K_#+~i0daP|Dm3|UGjc7o;eI!r0=|f+
zu|^)^G3D3DIK$XhBQE~noJoYwHsF0mt=m{Io(d#<q0q0KXj|}wCe9-HmjBHcn)o>Q
zLW3Do^(CG!v{cdXy!`l9;KR0*27a^|^XVr}O~PR5J;+qcPTD8HH{l9lw}Cr!Y&dUE
z1>Zo<NsmAY4z`Jc_n|kFxvh)5o97g5Ae^G$#iY~h@{kF|U({}XJ8V((Q|nHg8FepO
zf7 at kb`)X>PeqZb!@mg3)ep~2r%w?K0qq`62?_oZx(;dri3<bXp;+DXL%n;qqLvlsc
zDycul$ZEL4N=cW<P4~wru)kfm0x<`JA{PI%@c(@x-x2I4kp*l+nD-zL=sqWQryT9n
zxA<JwOQyb=qt|^7UjMk9mB@#eH1#`v9uGvB3sbMF$9I5-KjntHEu~v+16H$rDTi^a
z=j6au$s>&kU#9hoKi}%+5a<5bi=#sh%qbWb(x at k~kKjFLfNLS+KYHG}@6U|-aW8Ib
z&EFoX&Z`T{NbUH&J`BIthwVS=LyG!X3Jw>|nNbBb`b*$QH1qXAcvm;&oe9gtwglU3
ztT(U17R%QYsUxB{8SJw6$y!u~`pkERsZkbp^wAJmu0U3!yAb|vzB6=p^mq6_LOwm;
z9$E{`!$xAy#kM5R6_$?etJo53gPZ9Rx=|nbe(fPe0!L^Db4*@!vdN;%H-;{bHcV>I
zy)h{^_qR#&a&J!x%I$=|(*X_+aJ;b>LJIU<*q#S&<u0}z_&)@h?q|YT<ZVw<R*G;)
z{m4xA>kY}s?GcQeeOF$czb!Nw{4LrJ4<`qfQAss}6V??5y_eSK0sn&QGV+;Fb^i9S
z45kMh-WL$-au?h4A;EZuk?O#I7q&kqWH4Q>Wa=((8(j(6Xiv4x-Ytg at 6uv3}erhGS
zL+2CQ);rHR9((6mrt)wly~66Y@$<Z7i05BLUIVlzVp&PM0#9xP4 at d?TL{|ZWk)d(v
zmtl at oO+6+~53A8nM(kK}+0C4Bd=5 at vGn@Tr8L&|@fhR``tVxFNo|pK0n#Jj%Q*%ET
z)L9<ic5_ATj8U+2_wV239C<)&#k`H2;+2rAM*>q(xx$Uuy^B0H12!P=nDryBVq=~1
z?htUwL!xTr0Z4x9i at nLCjsv4tD%v=1j90E05d(SDLUI>CW`I^pg%q|27z+vl-ir!_
zKR3rwNryWE=|>z!I at BSiKh)d~9<RTL{JZ9wChFZ9JGHH5EA at pq6W2YD>mJ2*({bIi
zww$}fhcOMgr<9NMW@~jn#Vl<0e6u&tMbFLMtrA=9J=tM;OW^35+?4#Hut$PQ#>eUp
zzPv27JxlAG`$;@YpyoLAsImI>;58w#Q!&XMVasu*VxEIdP6yr|`Xz}|w1N8BGM~B$
zT;%CX$5 at Zpr2Q!-d+pA!bYM10sBib1`wGQNXC5;vKXRF~-gK3yrX54Rup#pgd-}kQ
zcSo>5GiV;D7&QOjaGGx(z#Pkdldb*F>s8vd_AoVa%qVTrK80=FJsH`z_8-FcT~bh(
zdoVwx?Qn5~n;;p!nFXvzrCn!-F5cUj&U%8!=eo at UZ=S|?baDEb$8=Lfy?Rx7E3Ity
zf2JtFPOy&^$ZOT3c&RlkYb<hHk@#3{IQYT>=q&0K{ji`)sijuz|7`vcc<VyIf2ekx
ze&^YOpqiLlJK={`vP~BGo|^@8$J!74i~YnROZ4cy at pb=9Q9?$T$j9Z?Lx$*gyztI*
z8(>QdN!Amcv=Z{>yNIcAgCB%&xxLFYKn58mXgWS}tLJ#qXwM7<;WGKN&{zp9>-Ofc
zX at 8P*o8R8*Vj2SG$gkS$Jximv0PEf<*L57 at GLo+njD4tv=c5|X%Or!bS%-o+V!LWZ
zdu&qJ!q4am#dk<<#H=@k^%4%8E5MTcv7hAia$<gN&6IFxgL>~gK<0y)u=~B{fp3V+
z)8?3E&;{3H?5o+a$Z6yxvMU*{uz{L at i$I(p$@!vtEBpq}U)+_XqFN#I%!prxb at 6+m
zlS-WMX>~mgES1m(jG at iYs0LO_oedu`u#J=)zL-Vu-OH?1CD|QY5z}`8GD|n=`25q^
zqvHs6I)B-W(H4o|3hXI}jU64QM(*eQW%O4$Vv?i9a`sko`Bm;k?E&Zv<1$0AznE?3
zUg2#~o!%Jb(jv?&&+gx){=P<B(Sx~V8x30=^;v=ka at oBabpe+Gej_>^xr!(1md1eF
zCHJyp3phDM_}*CXXvHF5a1)uA$o#}q=FbVswz~58xk+(8UIuxSpPR_KNcfcYd1BI`
zv&GmwL%@0lG?99m0i7B9fs%_&%6(m=9TH(zL_1VF)BW1XF)NNi?|W~ra`PJ0VWQ90
zSA};bHYm4kAh|$F-(W6 at A_Q^ZF?p=P{dPyelaPl~>;7E&M$4A75tB~t-}{#c#3daq
z*}lVFFsHiGU_m^&QWN(7`1<m&CeHP3DO$lmrplT`ZE4e^w6uyMNa?Alfw(p#1R at cn
z)x>C(njwT}73pHt9));Xm$ueg+)z`O$P!ws)}<&SjR+xH7erCix at 1ToAPV38POv@a
zeAo5+W3Jg}-g)O;p5=b-rzXwoWqppdZb`bj$iKA8-5F$ecf3>5 at nJ~swh-IFz1w~z
z9ZNs$-F_L{pTI{SG@!wHqI9`$Y3!YfZO4Bgm=FC>U<ZRMy at o5;V?TRvAe<wJyNUt#
z$-mEDtaiIu9TMd(gYGp3ImUiO?v~d|O~~Jpk9KElI!(1^E;LL4m-3mc56Hc^@0xmx
zRr%FPT&Kwl2|J`8q`#PXKFq8Sh5cV-+!isIb0>45zCAMw*EXU~e<%OPxXM|^wL at n0
z{iaHCys@=358Gb!T~4$aF$Li1Z5x|Um0Le3-M}RI2m1hjRk624!(P(^PN{2F7c+xK
z&Xm$T>qn&~IvFzNyh``w-y}`!GaGRIHtK!ytj1BLc^WycM=rRt*9fN*^cKje;B+FK
zBO$(gU=1L5S8O{mF(iKOpV8^rF8xqhnV^IBD{u?QM_jrT at i>rqOP5+i4j=GL<qMu5
zo_{Ky(a6sA9hmPSD at eMDu8VfNlg=h}!`gR<{ojVN9O1XlujhRbS6k#>TMs_5){*aV
zg3ZIIuEq(a%XXfIoFC6=8 at U|ccE);BpPG2VH&yZo&$>qb6W*z=*fZi#B>cXG39?dr
zv!+76^8w1Xz>M6{DBA+)H^{?a%mG&f%4J>kAkqBE*+w1mD}yu84&8S{L5t&U+oSG8
z=*Z_t><-$0F2>eoUTtg=`S(PZIRd$lY at -d0;g$n41nw-fo1irYCgJ!726CYwC-x5J
z2qq##_11<Y<EVse=tChz at 9+AA*ju$@J?*M7$}vN>*ZH#XhBj*cKpt=#`o-2&S=)fU
zEJJzvBgYcKQ$)c|H72XwEFXOzbzw(NCCpE<Qo((3mpQ(F&(2f8dMB&3vD=MKW|Yl+
z>xceBLrOFbXSVT{K0EFX)dyS)6O6YKrqXMKX+ at uSk3~C(Qt#GA$x8Ve?|~(vuj&$}
zR;}Wi)Vqs at _2HOLeMNG5KZzJ>oeeu^1D&CMVNRKK1^of$5$I`xV(MzvMQ}2NRQhfj
zi20UNZNH#1o^qD)e<wT*gg<ImDe6YPhUC(Cr$TQ22An;>8sfbgj)gxHc#(Zu?X3yp
z$}8jt-t at Qq>161t=BLPYKrf&>!S`o{oVkfEean($12?Zyc37JO+w6?_E^u~(0|wh^
zkl7B*+rZmb_2)}78e8(F(VvVgzTC`|CH4o8#AN8BHxpd8;-*AfajmEt{0o^~g2S0l
zopSC*Q~GKr?0q4O+<$0n9`)2ZWgXg(`c&*HqmzD9(pRul+{z?TD<VZo<ZE2#A9=LW
zedH5yQ-%C&DY#a=AyZzAEmel%n$Kca7d2I{Dq^Zvf;;I`wDVHV6D-}BW9vCDWS<_7
z94P`mr=1_J`d07=vhVY-9i+pD={us*%ckD#)xc?wM(kw8-T`m<yD9s4TcvMquue{R
z?0jipK1HarzTi6XDfuHeBfnjrD}&FO at Q;z>G860#x&G;@OZ>~k&rPtSYTM1FRJR~N
zmrwYHB0|~m!-vZyxqnx<V%5OU2SV>uSnS~YYA{VR_?g~baT^@}Y(BV1iCW$yDhMUH
z0Jxu!*ub^th2sA#1LYv`t0+Sc#;sz^MJ8dg9=u$fcI5c8=?V68eUbU$ci^l0lv7?L
z@|$US-slc^0Wn^3tpWC%)`T%M at 2zCQ1&G{8i<Nyn^BLEUc!yx<cRJSYlqR{8R6M{E
zJ!xEf#E^YE82LUIld5P<(QJ`3@>k${k(DGQ8 at KDq!!4SNCvA~Qmv%8Jszxd<%#yTQ
zIS9Tm_*#hVM|L<GF}B(<Hg~%o{4}MK`(<+N9cs4tx?l~7dB?FFaWj96#3eW&xsCbE
zUFIX{@Pgh|W{@DqJa~1034 at I*6>TP!BgQ%d>oi at ee_-}$EjT$=uS7mkaLuJlz1wSM
zzKl3?@bi{~j}N)T_)}H=`TJG<k(0|^H`#+bhV1+uY;sHaK}4rrdy7skb(@pG at mt8|
z`Dk|jD;)J+Fq}_UyOEm^eLuD~B4o1)-}jJUuAE2ECo%8d?vMY{hqMih(P%FbFG`-E
z++JVIgP&-dyUZ&EF$vq+JCO^eBO&K<3oU*3Nt?)cXU at Dt2l)3I$hh`}i5-8Ti;|p!
zB$puRXJkBsU*$`^m0Yt{%#K;Z^;3tP;4CEEf3x-{?N=#|4Ku2d7o!|_nA<mn)TGG?
zn^!UEvSJSxLqU)}#n1ulXcM?Q+I>ZpUZ0(l+$QxQR8o$nVFf`I at _i54^T0D>`xJkw
zn)Q282RIuASEwA+(-!2!JdAv9jRdRRI+NH1FNWawzk%b<^w<TE-*3CjjCess#om87
zF(!F^@udX$0RKQ59pomWRT)d74Cl*oeza-UBLCGCnFVqRn at 1MwyBc|a at VY_w=_|hF
zn*f~ROhc#dOpIp+W2v(oei<2J1OljaWq}Vfk&n(dY&S1Dg2QoUn{bWRa}8|D;Blcg
zlm+hSN4HnHtFFpQ^;)dkl`Z^5$ocSqe2*GA4cPDb%NE;;SPjhtaSJJPK?L}pW`G-d
zzs=p2g!V-2bclUv8S`xJgij)e%#rR|*8hMUk&N890%d;`5el6k>T-)AJ<&z at QQ7@y
z at O19S+;Nt-XXG}_A6Ixz!HHfzNpMsWY(<fLZD+(lG6!(#sTp7$6s_C}dGpaTY<#Oy
z{bHmP-vYnT%Bo5)?Yofq#=y?_B8y8ifh)3Akc0edQYHMHveJlt*iN#pYQx;b*Kjvs
zoID+ge^y~S`$l9^wZ;*sY$`fVwbUruzc!yT*@ZJ3pW|+?>qF;h`jI+Vc~s&wAMf8I
zR9I){rQcmar}Q7H+C3z|D}~sB=Sk>%()Kd%7b(_uL=3dvXiFFT9^p0Y1f5ao;~pw2
zm4;RNG&3 at AY!wm?3u}e^kQT8%yYcT&GMa+mr1!x?0{$sd{>X`huV!sW#kLuL;N3pW
z8}Mw?{?(D0$Z;ZC)rNb{l6%Smjl at Q204Jq?WHQMQzQ2h7iTYKKEr*Ip{f^8{|4~mF
z$eBsTngwx;Nq(Rj at g-x)x2-yl=WpxG6ZF}<f(eq9j+LrT=?`f~3o})xfT0WADU!r+
z*S+gxeU1YgU9C#+1+#W9$e3><Zeto^ut*<J#sNdS%DqRv3NbX~nH}J6!B~BZ<G86P
z+z1)!AjYg1|7BE2>J_vRWXop6{zHpl_ii%yhmJ*l#3t<Pb5)lWfs<PUHq3SDbCj)1
zvlm<hx6dWu6zchx!wE<D1>n-^q$%Udm#kNR+25un&&_1{O%shRXs3 at HQjQICg+In^
zWr#t8c>y_!o~v|QW6 at 6Pbx)Bm;|;I#%eCkqXCN1!6>|_<e~rY<PiKJP3Kra_z;i{7
zsgPGaBsnQ9QzkL`GU#v#oIs(H6ErTB8d$L>W=drGWJX^O?sO?N6xR;~UO&b^9efWW
z|4_lNswk7ZxE{X$Ydo3FePe>n-7ry?Z<7B~Z;~JGF{K}^jOdHDZ&h9+|M}Jw%)hf#
z&j}Macf1;ucff5rnBNy;>M``aV}x&^U~mNdA`BN8KoR7)>*|HQ<IUtUdDO7KZINql
zM}&a$fXuUU&zuQ7#8{Gt*12ExGJl7s9pbxBB7RH4QBbw~`=}SWVKwRze<k}gnVWsj
z!Dcf9JWk at Z7ZA7H%)F#diA^JO9@^13oBK9mQqZ1yZiCAfF-^DqH;{E)E#cZ7d$6~y
zm635n{8}4gBzMAB5c`w*Vk~@O4-ZJXg-UjfHmH`wey#K}MHDjVmv+QlkAg10Xs6tW
zJVC|hq#E8G*f^&;6@~u><|IC%uk{qIuvr}{;|k}#Np-mP1I>icnCNLL**|AhyC0Gq
ztFHq8bb~TS3{v}KUx>Lw>_wBSWyONsm at njw;L;*`CVU_3vRxJOCLiIC>^!nX_yecI
ze}n!hmNr)29%E~1&xCHCqYgm~b0}w`N<!+0#A^{gGQ<md1$MKt%%%!cj*#S^)nabt
zB<O;P{|9CM&XoSO^XBQo?}%I=XczZ|+%_N<cHCX15<bpvG|9gn(kAV#pMzD7O4XVj
z%ys<d!I`fiAHkN$Bv~<V2@~{-&G19lw6+Zkx0pn0hhbiDl3WtP?}^P97 at 4mMnu&hU
zHLGBU<Db<nb&qCEDHHv2UpUM5=*+WYiL*pyqJ6HHnyYRVog(k?KKoL)vALDz{iGS3
zD2r97?Lq|^FCp_N3V4F+7%S2X9iF-uw+biYe;!bBaL!-9SbPuTIoc!dQluE;`8mwv
z%WRJ>&9K(#GqMiyltI(??c9BvmkgaCSzjrXA%;3he;WP7&i>PM<b^Y7H{)5{V+!q7
z)QewiGUjNhdN{#3b2*9Cti1Afn<ZFuw#_2fk5i~1<2$g4n}N45fY*Bp$BusF`?lZT
z<F8rq`q>K8+T{@;BR;J#Z3&0~H?{-w7iVFmyZXys{op;KAG~>jjms>9t+R}3$5`CM
zs0u=XBeZdbZvn1!d9JtJX1^ibY-fTHFOj{ug+XkJAXk0R|B9|hAF|~l at VP%izU|>}
z^2oZte4QqJP at hwBXL^^p$$NvOp6IK%M}j%7Q;HmM&Sb<T=^%f718%wGq9*T67%vNr
zr*vhLnIzcK%z;~+s4p5E_Q?6Vrw-#i{2jVRdcFR>;8*;M!|H{4IThT;2E3MPTsivE
z!D!gC>F0ryNSBqCiPl1<uJk#*2;<`zDr9Gh6?P`BEhk0{Eaidjoy|rU?4h4CuaY{S
z>)I4!wC`L;xpuZ1eV|Xdt!8jVW>XGt*p4`@wx0XalcVT#<Yxot{{<gXSKte&x!g{t
zOLl=<5gaR!Spy}`ohejHY%;d%C5NzWj||2&A~AWsh3v;F?yhI*VegdkyhgpJd~AAx
zknqCeCz+*62hmO8Ys*4kKTqeWzeM at nmJM8cWUjGZS5DQExk4XR>HZyDs5Ek4bKf)~
zE7*7jI!{rB{7k7Zy}(IB#wmS;>V{r42>mq}a&j>2XTgw<fe9l07I}G8)HXpMJm*))
zr+w8EJv at Ti9c&vx9-7}rLcXzqtMIT_8T_(w`cQMN_c!phCu03A)?%zThc8qAhV_c@
zJY4e+#T9I?3}23IA^)QUMtT+dACJfrN=K0MuSl;}ovxjXW1qn1`?0ODU8c72zxmVY
zkm~HFWnZ`I1IYC__ld3Xwv=-a_q<G(zTQc1z*zO^kRJGPUrL#S?X~Ron@;dqYG&d;
zCE!>gbhvn|jpj?<U#q_)?dtrI at YBF0^avuWTUv8S?8DE;;hP3_t{^l&+I-ymJI=R^
zh}r?E<{j&Vyno_-Z<}(yYrU0YEJt6hy(Kc1BRAq>_ at l=`-gckgfcarLCs at 2-aqif7
zDn?uij<#IYLyQj_1mjfQUgyy!OTkMb17>hRrTdF3%5LZd9f$*U3&!Q?(4R<5s0F&z
z9|8wt6~qc7{yGME3pT>`@QP<VT-}59)>v?gRLH-QAP+N%J#in0{#LOqgJ3J%7Zzfi
zm{sNGv16t8(=hhh3+9LrjDgXW0}>a&MiE%m1^wIoR1V+Rgd*U8FWZ^a>9^6Yx_akL
zv1iVNE;CYQ7HTkOMJpR?6d%79y9~Bki5Naoy#;pOp^&+1fnRUWzAzdbbh6zMfzNb%
zQpO+lP7jpr<|dDhA$d<OWCPcmDzlI}nS{1`dcG327E+!{pC&V8R*Y3A%OSVr6bzv*
zZ?!v*+8SFwg8vk`LB*&GR*yOWITg8ToX0M=FbdnF*2DwNj_Tt#nOWGM0h}BB^~fWS
z^X$B}+uw!Q6dB2Da2kFQ%yZX)kHK6;a&AEe8lnkJWQbnnn}#+G8xY12<gr at bj`6gT
zf1l{?=tmDo+#UR9rQjDjp`KVIE?lHf&ubSf*FPe1LISa2OIX<f{3MV~dfsi;ynuX8
z3IAu=Zj);Tb4giAf70D9%URRY=Tg2NxT|)Im)8X^Q~`T{w(uK!?!o__>-3yEO!&aH
zxrA?CHL65jhulmkH?ajA8ga_2G2X at hr}8PrLW^{m#ZI%F*ai;U_NEa#^SHK%;BjqU
zS2%9Og4 at Qwz;WmU7wZH|i0oG7ZX at sbT6e@xB|Dt-D%W1*E_kC%zRrCMF-d)E7w3k<
zC+Jm+Iv$Vzx7hp#=3#r=F!dJ2DtjfJ8YUDY_dLD4+TE5>IpFbf<;{08;-D8pHm;AY
zg)PD$%&-}qvpmNl<*~K=pDMjRcCoQOPQen`Jdg*w<Dd4H>??o8|2pX~#6Jh3J*1-U
zj^Ll-pH!H-!L3{1s7ZU7$xA`5YFVS)Sx7yVzKT3l?@%GI0d<??Yac*fA~8p+gv&`>
zoADI#O at ULX(#K~maQ3oEtr!<m_@|WDD@^nNT(^(tNELe%r-83vBJ^K>{wJ#b&*oZS
zom~9;ste+5(k7Lq`lL#)q*`$+t{cix=wg_Vf?#VE`tc0vS_wE3N6rZU1vz87d-a<O
zz*4y3?}B}fssj&QFyij-Vf+cE^Eh243DgS3i- at sIfln?i?%+<nv2`>!3P_ptFIKuA
z3Y1UuGiv72!@$QIPr0D;B92M>2gdXmRyH^Sc at 4foa0nhwXjP97p9NV1vem==62wEI
zZH$561l;(LV-1mu2(OY+!#oFnmVpz3@#@<?7h-+DgO`LjfrAKi{R92Gd&&%sbAg4O
zZ!Z9gZke7D^%!&Sg#{Mgn`9map7A{Nx&eKhm|wOHTgRL>9w1{<Ni%f~_4hWNOr7W7
zt8^!f0!H?G7MpD$He}`$;xX<+R_uGJg-O}k>^wZFIY9?qML}#ku%QI$tC7oW8tj{d
zvp9nzQX!wQj^);dZ3mof!{3QToCP at fV~7kP*u=Gabf<#Q$Rdu74@@sO3fS=)&q=0r
zD4$77KYNaUK9TE<uGU0}19~dB4awNGehZOPSzAYj-tPIwoOUuV-g%42^XlP{|D62&
z$UC2|ewE1Tk;xd#5VwS6*)9C-=nvT#o8Kg3C(&Ox7J at hNZdja;7`Al6;UdTdPi83O
zo;)H;ZYAx~PoETbMzEE`BrH(BtxsjQTgf(wYwa1r+8)5cR_XOQI7FP%xH}bl#e1>u
z8~Zw^jqhr#cOdWG at Ot=2b1^0%rXJsP&+|=d!1E7Yk4*TPP8YmEBM%3-fnUbjCd`l(
zM<Pd3t4`wJXOM3o^I`VOWV~(FVXOt;b!!I2zy at EAdfS3>e#wXnhJyd=9P(*jJEk%2
zZ3CACV%45RrZuY2 at 9OD{Wx069d#o*H$g*}}uI-U?D0{A(@2d0~_m1RouYIeVf3{cN
zq=9z}R31m1TX}4fzT+0ww2YL8Itsl$1pKwdLY+D)jwatip5^%-;M%*rZQ$8`3%O5n
z^V)@JklPaz!K*}p(;D+C<Wk6>^+ewDdk6j`jA<768n<92>d$nQ^arnT->~Diqt~A0
zHEuV2=qm}HX6*&ihCiv46<5eNog_MwI%$Y=a<zJRtVrcASV`<}l|J8hO8y7?^H{?u
z*1}Fz;2`~xeiMB3E6JR+cs!mrpu?MBQ<00x2R<W at ZRd9HxKK@O80c^1kh^;(Zy@*3
zLtsM!7KLDmFwU3CcC+*85+a|kDTQsq!u~5Iz5$pQV!QaPUE+k^@O&)v0Nnpip=eDr
zJ+q3P^JBLYd&C;pBM7Glu}3t$fakYD{(=0g4iQ*64#BU>b1LM!rlb6XtIdbIPT35<
z2)Kbfb`HIauJ+iT{D1ln{koG}`}{yzDQwyY{hyGz8{E60)WJ^VDx{;rf2Xy9B|%-9
z-<ndW9&n!bBuQ4m25i|$?ApQ~IhF%EC<?d}$j#pE<Ql2OWAhgNfOdFf&24%n+Vw2(
zO=cznQ>m{<drSf!as)Lfv6Y_z+`dUyC@`vD6(%&^VwAjNOB+IN4ouO2eqq&0yytT|
zT}hEL_6s65I-T85<+1gA_Xnwm8*_-fTVZO7j8y1d!U;BGkCfPcl+CD%lc<Zw5h1ej
z2m#_P9!i{;2TBp|;1H(j8PZn$6sV^t#Qg^4=W1aGeESdBtaK_pY*!(Xdg#dt=*hCp
zE;?w$saTZZ?R&5zq{K4PVdxvPps(G7+ at 4Jx1$X8Y<eBW<&OHjeo?Gldd0|K3gBLwg
z66ZF_w?2fe>bg at 5--u{+U*N>LD&)mMnCE(Kou<m*D|FZYp at iLqx`sOXNLWVnc3lHx
zh3E>?$fc3#h9_+~#(Nqe#<E;pDzQPw0Yg$@njBA;=C>m+>|<$z&HglP#1svj!~SiE
zLCMDVo%Yz)kvAvRU%xz;w8uUv?>dmH3w;%S^it&wx)kGChVd5q-)G>p`OY(TQY2>d
zvkH055h0ODO*ubf3{Opnvehs%J?&&9xqm%d-{4TlIg9fO*3U4D(l=)3y<Vg$ctc!`
z9O9+Z at 96^}OQ#qfK$kp$<v8S}Ke2!hV4 at IXnVa!~KQ0yW^*r?9nTXd}p#M`JsC**0
zgt$i8GM%^0&j<IN(Ib`z<8hw<EabB?jA+9%81Vv(*CHZ=AU>U(%Yp5+R0SNJ<oD=>
zadwmFU)PZn4dV$rA0;pfBlIh)iXRI-yPx4E-v^u!;2)_l<-I9{?v46?751B(z%950
z>oIrbsJ at Np2Y*suV?Fb{@f6d~&xh|r8Pe2hJ?Yo>TpaU5pH2nOw2R<#RqqJK#qRD?
z$9Y0 at 1i=zko_#_%i@>MKC%isCf!7Ciy1%X+nGxQD?>?)@KplMGZ4(lnjrmwUSgz%W
z$+r<sX55!4VKKoz-?PsIPb<DRhHKZharJ^+s!kuwh5w#===ntGeT}RQc|XbzCEPy<
zu at T4UIx3xByw#~YOg*lUm;D1dG4|7$n}v*Qa}<-jC5NH$KhvRyO&MSr4<CO=oZbC&
z+U6Ow6n2K^h#q?A%L;kPo4B_#(x4i0v)S0w<TBpGf_7BtKDQKkf6K*$uXYDwzR;$O
zd$4ZC_sHo)EMnCVBCivBvhRJ48-1}&@HOILXF|qIieBt*fnU#}D-kcq%YCkaThiBF
z>GKw_aF7=|{MV7b3H|v1vD<sT$vbtKtDlI<=!3XC-C at iR^0IYA-#>TnS=q-O>R(ss
zKJ%jyenC|L%Ci^sd>wOEr{Gb63pv+1=o#Y<0YCBe9{CDhg}giviy{)aHETxU`&`DJ
zoWQLLCY}nxcgOticQv`G8~me)yMaDfVKP*p4~+KL=4<;P7wvPk)abq!RA)$AjMYPy
zJB+a~sb+mm`nXPTpSrw~4V|dZjM(_)o#F+PU^g)U|Ehi9 at 5p!bQRF$FlTvhFnV%1i
z75Y2$&HfJHziiwMS_QX`HZSSoF95bgwl0*&H6_1}?g3Yu1GWoCtQ45PQj*7m*bq-5
z_S!a<`{PM5)|0qD%yWi{d;P!*;m at 7P{?o&eC4x_B=w$HcVLV%0>|aWJz+T`usOwAb
zojXGK6Y at GOkTgOE3mKaP+w``?hBo-QN<{fj#!e!(>UW*MBtL4JSY-BoNo_MnALyyr
z*1XIdxXCGKAUVzV)RUZp5rMD`y~J_zmqV6?AH_eqK*PwOH)p8MXxEFMkaiLGJsT?-
z#BY%OqFpcXD*^{@+bW~GZ4=^^?M8<axG<&#lm)vgy~aP1xSWXDWRlkcV{Pa}oKvTN
zIs6*1M^%{emq#YRK3NW~xQr?neBW+nAzhVi61NBwf#pjUcL)>pZF)UyTC2s^EusVW
zV3+vRzue&PO_Mz5n}qRmu=07a2{OqN>M;Fw_65Qjz)euT0DciS at Y$;(CziNY`{CF>
zB=BSBt;#31SRweN#&~=ROP6yjw0#X?YY2W1_-;pT8s_pw!CicNAh?SYfSX241CyxU
zOK${c%T>fSqAuth{Y{i*)kxq(b!GbPc{+3FrR%C>#MM8>@y~<`l=-ESg{w&nDmXr}
z>o&{jv at I%n61WrJ50B3(GISSdjNN8YU!*k+-!JG0&oYA-(JbocR9O9d*y9&5rYX at c
z(yT46q%F<#Wb7kulbPAOKLy(fkcB<~KK*6M6AN(sMIy>-mab_-?vXaUw+cE7;^rC^
zuyZvKKQJ>MvOsD0DS<C#wob`2qU|oRXg+h-q>WB5Qd3sy%V{^fQt*9&;)|HWe8zq(
zK2OeB<}LFnQui52eOYp5dJh|$FrGY1p;7OJJQRho{IPxv<Vewf)+>CHDY`L;Gf4J9
zj5+-DV at R7pZtj=JGrjEiH{5Zh8pJ6&&cS~1o8%?o_n2!$#zz>-Z4BZsFsH(2ZoGFy
zE@^me>U=40GV<-bZSRv8Z*i#Q*8Vlf_v4m*!90+qwwV0>b=#sq9mtJVY68h|CYx^(
z6*w0C70XHTr3 at j@x8a$OOzHn>T{PoaoTt&w<Qj_^(R_26NbAE(!1z>ecRyKead)Hu
zPoC+Os(AuzvDE6mwT_495F9@#s~7S{0VgaKF#KQ1an(84Jb>ka?l%d2CI at 3n-`=r>
z<c^(EjaYM<@WkB(N7YI30*rB!fLotjP|8d(?qELfqbFsKf$UNGP3#<UjGQCKA-AW2
zpDQ;OHsaoEOuAPPOIc5FPlEf1iOJTR at a>xfi#gD{!;}^B5eDl_V+nky?xa^r9_Nmb
z*@ZJ=&%l=VXZD5YCsSuYexIa^hRzqwa<;)Hg!WJtiTs&Ze^VyZ`ozv)w^txv#zVHu
z3gczp$x3kHp-(lObVVk!ZQ)ZQTafdf;}S0qu36WPJ|~GyN1wYv`WD_-phVufJfn}?
z6L-tTRtP26;SWXLuk3k|iD=70FA_(xDk7A#(IXQ-Hw>~tPMh4=5-~_;Aou&0R=2dx
zS5JWqZvo%#ZDt<V!lW3_p<R!u*ycT6n?rCL$YVb1Kl<t{(pMpipU1yRLz!Mux?qd^
z41H6DzA2|Cm87rE3O}xBQm at Pk3y=5Bh*^ez)UC*XT#=z(skj#Y3%^{wB-<3T6!T0C
zBR2kS7IB^6Nxz5vv!uW2r*3i4Q`r94^H+aFUyL220*9>ex<LO*HLiVt?T6StTLey8
zMS`J8 at qFVBCQZFS(Z8{tnW|nQP7c3~Ywig2;XCtIlH=fA%|d^lgfT#(Zpb#h0$i{0
zF0Q$U=bXVdiQ$F~&uGUQwlHG@)?|LSVcm>%J=Qm|uEY8U{|d&933y&M))QB?Ar2c{
zwBeU=?jDm$-N4$0^#iQW=aotO18dKYC&DVieaUTz2o3*C8~9)2$XRg3V_X5x!JR>U
zd&h%TrguD8wt|ea?067E{vXky#2Ex9qXTd9a^!|bp172}HspG9pSe7)1hV3vkQJ8_
zOb402E9921p_jX>Hs`k|EP%f84s3|P_7EQfosw|6LVmazT#9>8A3q8rE4{V=AH~2A
zdsawY<HyQ&;dn95?_ at N_U3?!RCxWX_jojrNqbqxYq?JwvzE$25C^&$*O$J$a2KYKz
znRE6$At}=~s#kx|&VudF&cBx%g|e^L<{($HyyBcTP&EXxTyFSEoVuThtb^E%9^l}5
zD&41s08^2PeA7C8MTPvE5;}vr$`KH3H!v#liunpv_)6)m*S#v_KVP4_KEBD4dQ{Wa
zhnko-^JKC462VY^=JHJ+QE8Izarq{_e%vH4A+`;J9zIVd9<~Hg_)3LpM51&T-c_ld
z^Os!s7WP9Y{UKFjOs==LEMCmJQ&ms7rE`rUCI#C<%1wjI3uS1F6!(A8>=oc9V~IXj
ze^jw+`02TCt12+QFqrSogR5FB%we(MNAzRxA4Vu2;$GyJwj`tOM?^|l8_-qYTF7 at E
z#`VK0<UhqjrtYSfW8b8`iZLRvX7cEC<Q$Y(W?(*%e>{>>mUK+-0ghQ-eh79X2kP~@
z4{VW^z(Ux#S=*ScOx6Em?i`sVrd0U`{40Toseuf5c>b|eZ7$mLO~_Z^E;HVMKetKo
zDyawXUdw-etc`*#{%BDX=U8vuBrV(&Dn*@*_ihJP%Z+EG5j~$7kGxMlgb$P87}%J%
z*Xit1cVtp&M`TX;Nr5`NTkr}v*QWwgw_fbfBTlJpxf(o(x at g#3+>vt0Z4YJv at n%0Y
zf<py)S70;P^dsi9kAQ<tP(IPT_HH-iimQUVY`m$PnTl~27)|mV;RJOQExXhJTV1{L
zu<ATwP~FXH+o~oRv1zdP5Dfl7^qG9rVYI(K_6%a5VYlGey;9gR5&wB=kpi*W$WvpQ
zW`*4VxF`*BUCB2G at o9pcBDg7C>P{hLh<+C_j<6R;gy5Qbl+z(APT;8D7hKn$!}#sK
zwS{9(;E-|OAmEdK9ib%H4EM-yJ$;WmRvF<h*V_rU0snQn$Bu%w2AgB#%>VutJs;28
zn(e~chsuL4Kf{y%aeUJ9cA^`g?Ja_h+`^fxhOL$KE7Ip<@6a0(y6BWV^sOW3iM at y6
zqCE0{yyKk`cZb!Rzd-yi^d|i0WdwUpa>Zf$V|qQx0j|uL4Al_K at i$|27>mOsb^aT~
zcXukN(8%$&RZrsCIZHy?;{UWmyu;ECn};kic`^gcO)dU~kKZ?*clmEPuI8>GdOP_S
z+B9L2&W?ErV-V&-r`it~ug8ebb0A*C{{N3T&|%Skz_0f)bWp^&5FHq0of6+#Q+=mv
zLy~b2$(hjG<{OYtf`$(^2H$i8d4X%`<OC<?$9!R`p_wCB^}*PK_~c6WZ+qGAcEM)Q
zMF+;+iGxh+7p5efi6T#Z>fQY97%MTio2G3i<HnkOJE%W+>EO8_ at g?VNEq`bX7m*93
z>qvreeVN?x_=w23!6f>{<*S8lDuKk|77W3+fxCi~fA*nBjN9n1<N2pN?aE_+SoS!g
zFSx<ps`T2Q?ZNy-gg{r{J8Bf(xn58TZn09-BeCHYpq(He!0`&;DB)Lm{uq2<@xaLC
zsAKrsmG}7Y9|MQ*3;9meFXI$buuCnL>T}?4_9J6Cg|VE%SWaOqAND)OY3LHfz8mWh
zB9@)|k`m+6;gyhq%f*4pZhF14i`cR84e)!ZHhS!?OE1B<4ZAYtAeZD8!8V!F*S6}D
z2zCXwF)!pA0LK=vFh!(KT&*ScE$D16$kU~;nH;8~^HbH8`c$qBc8^wIg&4u2#2(;g
z><pLFL-Jb*GlApIlpQwbY}%wxw-Wx^28OG?DwK|E11H9 at h`~me?il!{Teo68E*JBb
z`^G at s7=Jl(pePLe{p$-(1NU;e9r?dUC#fzq<rIYCzxE?J6Ff2|aA?5Kc&BiBh!0J$
z+*l7kUOSU2`Eh58u_e+ExRoQ98<@iwSB}A_G#&mQ)@CjK1-7=c725=1kr at YE@b at _x
z8R1qj%oBb9-5vi#;II6h<a}p<m)x0PbeX2Dg<S*wE!cdYk5bkO`Xt_fZS-cXqHx}^
zB;ynKQ at W5R1NbM*5kZEv!twBRY6#v(*@CjT;46CEdo9CWyX-Rokrn&QMqM9M|3)xJ
z?AR7He4I9j at URm*=fFa36t4&4dbe4;26c#hs#h8>FsbURXp`_y72a>7sSXQpVAO?#
zgUI3R3Mrp^q4(RiMgo6<dI9hF?6a_&!)`Q}CwvdMAvx6=Im_?>Io9w^;PxfoG(&k_
zuqmMhHuw%a$ALJ*)~q)uMl)D>1J64}{E|Y*OQ>J?L;ZX(C%53br?{@ia~-kqYp;3w
zLjK#RJH*zBoy+x$hK9=6Z-kwN{l*aX|DvB#tBH;|JYTC<%VC3fonVe($8h60{TJ=z
zJ at S0F_p|S=quKBFA1oL^+6&qvkw4Zi*FmRt`&-l at k$a$fm#HOW-t%5B at j7-}`yB8-
zF4$RZ{G;JzeQe>SeHuoTdw3C^zl at l@4r#Du;}SV<cU1z%ow`1}eaVLYF>{-(uK5!Y
zuQ=1XUY~J!J at XoPs-@H}FPpKI?rZ#%ejYy6jRO>#tZEI{<o8idP<}S-9ODKBf-|rN
zT>dX|4d}m%8SjGNBVNX3Bz6k>+M)}EUCwypEiY-79XTdfo8<w=kBN<I`HN0!%<#vN
zzWrRv@;2nMF?rdkqkR<Qn0hsTA9YacQZ<=RLH3nW2O@$heP{O(J2oXz?Rgum8b%x{
zW at H6HXb&B2 at y0emn2|v};J$)7CXuV)PY5j+DhjqU389TU-=losW4~&i`zguIwwu26
z5qu;ZOJ7BnnfJc6-3FcV!9?mpfYjPj^KO>HoI3jcf^@6<!JNdp#zA?}{}gi?pff}x
zmI-k^c~LYUvejsNOYS7JcNb at 4#30BsT@>`U4IlUVAFeR73xb_57;i-c`s9Lhs7$!E
zv6V?tD}hP+H$6!g2;WsO@=e(U_eh(E4J1r<=vcI|Fd^Ia$ozi%qlmt$3xeyOv6j{m
z|7q0yzcF at HE!yWv{(ZfRv{B#0XMWhNZ<GEdcnf1KY~hf_!k>-T7>|$gX;~@jOU5-`
zDy0Q|!hm+v<-g&-WrMFyz)o8#@kU*{ZX#zQY|z^<C%uF*xsI9%T}MmoQ-}G`6Mn!s
z*lm9XZtj`i5%x4CnKNi*EczmRTo}J*&m-fyFj=*cwKL-VgTE!Vc#N$Zbf1&>NsMU*
zCer9+2;XFrvGpAmr=__e%r-Xb%HhW(xe<!yM}hOBAEWSVI;Jr87eu1n=V1Ohp&T+U
zaT0VV?uYm$d!!6{i`3}UZ&W(K6HIXFh-=_Pb5xYWEDGr&`8j!S;l6*V{iJUga*GuH
zZ&b)va<w_o>*dIWy306PZ~)(d93#4)v4)-XM1#`hlo=a0!4^YjhAzi9SD3}%{~hAN
z5dBuo-Gug@!Nm9nncgn^4ZIUqeZyfRU8eS9-2ObYQ>G}=;j=Hs*j|*R^~HPILQ^Mq
zLI=5uy1EV at lY?H4dYMJ$Zp_hjaU?#<Kyv+vlht2VY<n0_CoBJ?Gf|dqL({Ps<0tfT
z%Iy0h^@JX@<_4Y0*;pap{z{P+&ptIDz6%XQ=i_<r;#uA#j_<u_;qyhcwM%Vw!ZXVF
ztNmhgVW)Ub?I$>avE?vwqA<qRiaimzu>EhR`$&J`^d)sqb({5 at y6AT*-B&(>KIKK(
zk9b)v at QwHksZgF``cON_KMQ}4)D?LSb#;77rTdSsU{}}^@nfWnJj>WY`zh+jC30HD
z8Q}NJ!1*(<4~qTKHnKlNJL%n?gPdHte#rOSPmcw@^?v$USmfA_$0Ejd64q(De*QsR
zOCOtR2=H7^=myc4pIgZ|2pyD5?9kwuSR$Qm>);Z8p==VfM0Y_S+-a7tX_CHTyMyEP
zINpNe+lh`y^87jt#tYCD_qT- at dz}4^b->;rmzd!l*iNv0WH)kD1Z_vGSCh0L6m~NA
z at keV^49f0nJgH$asi)9^eyWgv{1dPUwH&^(MzJuwQ2O9?-wJurg~%DmLxwrlFBffM
zDY>@N-JL>YmZFo|9Lb-~7$fGewJ&ndhZiaqj(AtPztY{<x+q4knA=9=6FMI6`vo$O
z{OB<}|2#ND1BIS<Lcjd at Ci~7%;OKlwzd~*$;B5Fu3EoFN=N$$5*(UXug8Rfy5B(G}
z$MI$OpW9*EO;(-f2rAt@#b|$d`U;E_73{b1!cP;uDrFn4`%<kWalaMvZQ+qgL~kqV
z^5|e|TNJN`pO)Sl(GSNe1iy|e_1Nq``v&{4{Xrj|fU?Seh at +z<co&(Eb*Zt4rz79r
zV^coxQ^2+ at Kl+n!Jkd#y8u5;q&?_O^E%wFt;X0yMev*uSa*c!U^ZAL4JwJ>^n~1`H
zkMfV^T9Dg$L$;l()BbzSa9RYpEfRhEZl(L$JJ7?3kD{FD=@O3VvexM<<+ at FOYKcGA
zeJu|8jeV$Z=zQuUx`X6*C~Br>RJwnChZEBK9goHbErt(wo196a_S`xT48(QHabq1Y
z;s>eyw?3wNZmy&1d~?zE%GK|acHyfc{X}x!qbL7R9Lb);7=nC(;2iQH`2jF?eG3~E
z>g5wR>U$q~Hev~zv4(%fcq`jPWKiQxQpV%`;0t7R?jNo~FTeTBZUCFN`|5s47kkYD
zVyD6NXm`*xUJ}k{^<mftP?q!DO$wD-rckTTAs^_+DYM~QNg7xFw{K<J35*;4Fy3EB
zy~eZ8n+S{}xHVdTp-c3NMOT22ce2mV#=keIl2G?Sr2M4aJV72Gv>WL9i%$xFU^%|q
zi9fSeT)6O9JbZA5!UdW>@47h4U|(6rTQXV!pHhyo-cfbAlF6C&RI~E<2}WAe5}vMf
zTGVUY6bHuxalG>Q1#<iiay%EZo_B$TSr&Un56(?GNOi5OuaWp*5QD65hc4JauP1V`
zdb>Utd0<%lOF;{>4D+V^=&Sg)i^ShX+I3?Yi&1#OKZ at 89@z!Q~0Op%S^soLSR`M|}
zxwome=ckfq%x`PL+(pYY(809t!AEVwJa$JwgU58Hde7v`tj&PfKvOYBr2_vN4BlDD
z1Jq+L8{V^+Yo~R@*0aqAZLbA-<u!T`$zQ{P?}hj$t4}YvO7uPGB4x1gihxm4!e{JG
zY=w;RDaN{Bau26J?y18VznpNK%^MyIJUnSf+$*|Z%qb3BgRx*qyg%XxoXMVZe#6MQ
zwY}%E{rt-?CIEBH|7dGVYbN}cI(-$<EBK4mw(&u##RNwjDT=dzgRqn3V-l@}Ec0U`
zjT|?v;Cta7WMieS!Y+S at USCuBdFHg%v=`ue>{M3qTWET;UbQ*xC7b)iG!hr2J|g&G
z;w^Bh1jCNIa*xP+COwGwyoj8{Ic%M*bC-zwugHWwd-Bv8_vh&`^ZdIBwo_Jo(@?lk
zyg)S_erDv-tQ;WiBLQC!-roY*b{%kCz;efeSD4tgcl80*CSKwMF6U;%!2ibOd*XQ1
zKK|XT&Oe&qK&3C>IWEZFIYx`KoD)K?- at 2-G=EOe;ei3;02Tg$mp_p%hW&7+JuxI%1
zl|F&rOE883Pq|2?>BXm^FM=DtQh6J?qZf1`U_Dor?-BL!BKVD(G(I<CkkSP^_G=#9
zL%R<0PZ6;<!58<0=#@o^f|d&T-uJNHinR*5rJM8 at 7JD+2ZJVci^@v8nb@<7CAvPW4
z1%f<B`rG3otd}Ae`nSqvQntq|9_E8jJ^K04fzRYUk4~aG+bFyEqGpQZDZ9UI6v~h1
zy^p$h7y8KoNta-$<SF^4!4z_f9OAfv)%5!6ePgrpIpV`A at E@6svOh;;Ns}*ZJ_a&=
z(QURzSBVS}TGt;wxFDXm*RIfS{z=55Kvu)KTZUrOwB5w^Fxe#9aou+aVv`joi|G|v
z7r;4Qd_rNcAP(zx#6VnoUv>Vad~g`1WnT7upRx;JBe}EzHl>_|mPp{;AiKN*T*lkJ
zI_e-P>rkr-vd$0ZeW${Pi at q@Q-v(fKiGAk1CBEaI>H2f5LMg8peS`0tNpyZg&v=FG
zDB6&JtTf*h at dDm^LZ#5l)Ngw!5IfOFhP)u)*$Fk at LtIO^bO`S!_>p?}n%*4n at _ny)
za4T%S?>H7qoc<l+QAwO4Y$h{hhe({D=U)>%QyhaBlUB at SkcAgc5o*c5gwHdXU^5UG
zVw%l|4R9i9bL2mE{Y<V~Ft_(Vw*B{iRPSg1;{-`H!N*YZlvcFcp~M!4GI!ItL=RQZ
zBUm0`JY}N?LI*gfti?5hH3Hy!Sv~l@)xybY`PjeTuN004CzO!rsj4~n*MouiY9W|l
zdWP-MQ_nqXg$n4HB^W>2b<pu7o%}88?;5jz`f;=jx=$9tK!67=#e at G~<ZGLxLnTlD
z^2aG*S66~xLXLQr7&h)lA)T9_1K;se(V#Ush=md{$>8x!H%2juz<pLrT+V9b%OU>S
z)s*9`-0B?v0vj88hmH?#7d+zF$0xz|St_x at kD2Uig?%gi6WH+$3xrGJ&hL~<+_6h|
zUySVkmtTL*^z?j}W}@UU at V1sCE~C at br9ButaxU!gm>aE<V#L2z!{@lYkAhQf)_>Lo
zE7{!9bH+I#n+DNCAa9VIQx?cimPUq#j+T(D;up!S;3Xq6c^!ORfBX8!halcInmQ(4
zKz#?<d^z2LchrjQUf@)~zJnf&<5#Jfz~xBs%r1Wm{P`9m;tmpe)I8oXI-20c_Vg2O
z80X|HuJq}f49tK9x}v<G81iKdGF7%h?>hsZ+mn&$1#WG0z(kKfH(#1HjQH9N$I(YO
zYICS|x(s#}Z?3_qp#B6Vf#@bXi`>*@qGNEEu=VDEF5%O63i`p2<71eCMCMxlO<6Pi
ze;MrdiX&30#y8zSVphnxZ0w(eK6n>)>8GsEeIjLvT}*Y8{{$O`lRuNSowo~KK^uhK
zJaU5C1|MZJ=9~ZUQI7brLO$fuGauz_+T)|dJnD&~5b1)U0|aBf!npWu58~E0WL*dU
zT12Ifw=CdPum5_nf4%-G>|yTI!PA|JtJYo3Nd<Pt7{o(MIhLC_h<oaL<nX>-)G6NN
z`S0>(&X4B}oiF00&!52yv=w(QuoXX^uRLn%``vNjpt^qa5{(1bUg3RYE57`p@~o+E
z(XYY}aXduRjN=ww9=1PZud(tLW9*VBuN3XlM(KmHDtHp*1=vv^2MnCsUADu~70{)5
zg8e72j8{HHY{P}&6Dr-dcQ97dsOv0cM}_>9QV1FIm{kcm_FM4PAnxHYY`5EB(<Je6
za*o9}iCqJSr=5%c>88hoAB$52d?-w|7E9B^_s{)jKo%7ju5tFocTUqf%yUO{n-)4;
zG at a_yM{ObY!$;Q?hMTbYp61P)U&E8k{}npz@{q-v$05sLud(%x(Qn!wxyV?3-f-R|
z`ff$Yd$6S~RhF7W->&eTVtZ6i&JD*HpADPW{NsI@*XExIjl{lw?iOEgilN at R@s2Az
zFI!7PA6v_1UxUjeD%yuJ|9c!S<K^I*K+Rrk*YFaty->3YHs&+fKgmN(*~$6J?L|AZ
zZ|iMYi+MpXjfl!lVn2%A|43;rQ=wkR%xz)ob*TnEA&2Wo0(A%LCs@~-L^Y>`n(EVq
z(@)-}^RqUF&cgP1Y{z3g5$iN%UD;A<_>v&b#(-$epTfz6k6rnoLVnIIoM^LOz`wa!
zt-J+1vyTvQE{`86yDGK~|44|jq3t6j=Dg#Zi63w;un*)v=mQN-b{&L1G at HZ}%jP at P
zB*w0ICmV+;0SATe{2RQ?`K>$|Y{_$gFCGj$g8U0h#972NK0p5vzT4eAgdE%WGkkkh
z5ofC{g{fJF(8TKgg(+DbJgv=rTvgYfQEQwg`3{_iT=kL7ef9<9a1%M2j>xG)SU<qJ
z3Tx*Px%MB$YOPDSC>$}L+NX2gZmi^{C{HTV!;hNfTsQS^<)!>c<>ex^_Dx})*G8cZ
z=Ra50VLw8s$M!eMyZK?rNxyJ&hcMmiW7LcF&Mc+Nv~Y)mQ5OW|kD0$wm^vV2=XP*y
z%)<3wDjB@*p-^$Dk~@C>M&55acToz#d!x+;a_w`{DcIy3w|6E{KB$vFz{h=QSB0g)
znF^k_WR^dn3;42sG75hl!EzEjI^<$^dkgCqwkW>iz22lM;H6#}61}h3xQ3V12)nS-
zQFMxGQw*_gnkNrUbc#^tqSe<4-(qciU0>#PF6{G~7F_=`PiF4i<FdH_OcnRgB=7W4
zJewL|7mj58n2-^)jqGy=SGE1oyk-ZDSV-5Wikqgle`ww*H4Y&5#F{0%A4s{7KgJ$u
z`OB_RD>MN2>}PkkpSKj>k)PaVp25D${%0y=dwd)8_&8x|&L#3~8X>WT*dE=T1v^W!
zZP5kT2`c1Y_z8)fX9&uafaCAt_;hle@`i@|^K8u%$jpX4BCnRJzFar#sLlZ&DWR96
z>;Y(Vh?}G{fYl$vfiIzQK*BuMXR;<?J#_jvp~qwbn??L3nd&pzD6&>9*9N{m8TqFk
zgP-wU>=5-k$W>+sFLFI+Ci?am*t+|2HkRdRInEcj8<;-+!4-R^!S_qm!q?J;y82!C
zf^i#ib1?Z&dByrMgs-sR5Ir(<YsH at F{mA_B5=U}fp+Y+!UpZhwwS?fWN$%_4obOZ4
zRF%vkcms06Ak at zg8Sw0g)5v`G>{;hwTX!=Pii&C{aW;N1kcXU_c)p_G5R=3{e+<!Q
zJ>__LpkPaWF8n8LDff`48F^e0w+Oun^8E)NeMJX`l;*{6wbLToQ+hWm^9O at h4(IX$
z{`(yIupF{Qso?|vdc?t%POtF~GJnz6j|)t%ei*^J=Wmc)R(t at zl}us>4!BDQoIH20
z^(L*r+C+E8PFCJzb*^ob-iw at A>9YqhpHA>&r6+qg)J%QZp^u_!Nj#&eO<xDhLqLgQ
z%?d_tMBJ~J_qY`(^9F)P!n at 0+*ZK#Vzj%Hvw_Ka^*Sni~-`&K%dnWtt8_ctJCo7-g
z-+&Wf(*9T}o_C1!8N!81p4r&qtOuS+l+a4z(SdE7pBI19&Ha&$$FjiBNc7l`g|i7K
zpypTP9op)UnmhZBgua4u;v9*cxdt0VC-j=zk+bk!bfb$-Z$$osO0Veg$~&-YKEZVd
zh4FFSV#48>GVFI at yb=B-=+EE|^)B@$7 at iRF4A_P{F`vbN8#4wRA~Cp^4_r`i9+B<J
zl%c at uBi5>Nz`Ws-o|?3QcL{eSIMl8P6<b_PK9)S4f$&u10S8z+MeHE4+vMI_#O(9G
zBJVkHhyN8g6mx^h8?z7CalSqv)#@Psw^l2gADaySBJ8=i&MuUyMiLBQ?Ns$}c0ENk
z63 at 0R2!cH{2iF<0+RQAb=|CO%H??~2a%=X1hRAml$$RVB_ZpNWe%!`x=l);!OFG69
zE;fVY3HvUCk~{-EEo at nA*ly_EZa~~eJ<4w5e-%`Q<Mx24XXO_;;$%8^88Fy_l|=W(
zcjlm6Qzbq5q&{-k^4$?8dy#V9Ve2U8|0)yiH{kx<-un&g{kGowZS4Jq|LcB_j%uA^
z2uTa#*sBa{+ at ryV@0&Ivx=PRK$<r(Qm_!Cfy1~+*PlugnVVH%LTcFoUgNA*sAb5-S
zF+Ze}_&@bTfmMG)@T=@FaBDlgY at WDc#5n_ZO>8QQ0|>`Y+hp~W-gwOmY`mt3#2o^M
zJw<<m<X&NYCeK5zUI0F*0Oc(lYsPiogHM3)uHVA;2L2}Xcltn17rh{Mw_pk8 at N2q8
z{zp^{8`lK;2WJ8m%)hLj<9QZhk&{=ku~V(tY8cuIw`MJ3*WZs1BJV(q^K$6EDO7N$
z2sU862hSIi_x^P)-iz(;$-4#PikRmQax7wwgt2BX4glsHxlU1rZpc-Mx~D{s(#vCa
zllui$*yNB8m6X*}PPWgsdFF!WUOX$G=%zWP9skTh-NQy!rCNhJ2d?)3awZ0ne$?2)
zaFK_m-d?#3{k=+0x${ys+36Hp&)ow>%oY*LMbizO0&Eb*16cOM=U{;@VTLYo6}pik
z?LDIJ8$ZRe0?TI{^3NhT4r~|dvtbt)V{OpS7|=jX?0-#@f_Lxdgy3Fqq at zu!x2|CR
zft-A&jUQKRE8yv;;a>12KmW_HQ)TjFZp8b1glp?^0?ksNwcs(Lx2l*oanH-<Pim)N
znTjO`iyliZ76TS778*-7mZex!SkzeNV$ooEueyV~4(}O(bvf3<@yv!s7XxfMccdOZ
z>zF0{{TN5Gar`vinXB?geSW(~<g=AVu5iLB!o0?D!;aUAvYi(UjnOm>Gp@#Bz><qN
z-8XQ&(R$)y2*y{$v=ZK3=&>o_NgKnlH07+lwKGTS9-U^jOEZvz6FE9Lb75N}IX?D`
zD~GSEgELpng)DIy?Z<{#Z+FV(>Wj3gf9bxR#tV?g3)p-j>w#?@XYXU!VL87<Zhf9$
zTkUhx!iIfH7HjW1EzB|~a&qx=k&`9w^n3zKSe`=udgq+<u-{UYVW)%ve{V}?DQ`01
z4i-v`ZaP2gH>aHH%G3<$5vsBOe%Nm~XU)`LdrsI%VLsM6C4*zvgbL5~LOnSa_FL94
zPN#5&=NO*R&EAt6b}}oB)0GeaJVTo29PVw*)D*bE9e+~#M!*Tdz}L^9T&LA3udmj~
z!%k<uYHX&b&>fj7!Ywewt#=`|ed?kVUPfGbm436kDra*~UYqSe&$j*weU5i$Skk6j
zkoN`<oGt1nn(0g3WdbpmL}h(xp7WwT-&WU;2 at WXFTn{~F4;5nB0Zysy{ZCf~3~e{>
zDsdl{m$*~puez7WIqrce at D<CqA_nU3r68pf`-|E$u?)m=tanYe$)ZRJXV(K$ob7Yu
zL)_$Ej$H3<NwKzfrF at Qa0lnw@v+GFtqV_l}lX36pl(hC??6S2zWwvq?mNx0!u;2Y%
zagmDIVZW!m8c^f=MnHASKa>QcX%`k7!NC>wJGL7#Kcs527NPCFszbagd{#3IUm-`L
zi}{E>e=+kzY^%b~@o$C^Ea`8V^Rcf9s}ktK&VY-w6F9IQVF}fa?JnN{oXdrLHwtTm
zGG<W%&n*m!Gc(|x&df4aGJOSaX6`q(GyTHO;n>d1dD!j~b{5;)GC$BM5 at e9e`iK3F
zve%#t^~^HwHuY~??S&?kYnI_r);z2;3^%hrz&g{=!oJ&ycWDie`0ET!Z24yy{$$sX
z9Y*!%Fj*tw%!1`Q1^){BJ+;DBxIPaUynj&bh%fdUHL&-)({Sv39HWqj0gDpep7|lR
zQ^U^ry9VCY$nlIZI)y0*T=+`~eyZ at 0zw5PwCco7V_%qhQS9(ksVLNa=88~jC-Q6`<
zxzgmfj-2}zyg?&`@7NC1l5??kcV~xky~(cx=U~5;e-bP7fzFs9XRu#}=adQiV1EMH
zU%44EC}Lr#?LY~+_aAn*W3Td%sqflW=%MYe1-)iA_1*CY>;#v2Gi=4Tr`d|{>TL&Z
z%*M5&!FzvRc at g-kCt=HA-<*+YH~E!c!#mEf&&*}{fP#QgatkMU%GEYWdEHaqwf%+2
zwZtrD^OkJgBmdWEAvg&T$L((WQrU`YzS$%Hd|X-v#-ym%#%cq(xe-B#3kl)I at I=q_
z6l=?a9D=K{81BofhGCou%l%P#Z(lLj9XieGl4jU?3di%T(9>#h4~rMg7g_D_&&*|T
zkGA(7!*@y-uxf}g`gC6iFqFIrYP&WH+-6y89Eg>$I38Lz)FM9V$w0${J at 21#n}dsx
zr^aTiNm5?*)p1;~eH{}7b2r7(YVfVG_iS=J#Pv(8>ub}kmb=gyNX%9(a>wp@|Ad=A
zTV}z#?m`BB!s-u&)D?Ota_*$!o(UX>e`%b3Y%=tU_bR<~68QH at k(U}+ROp;7u($Rk
zgc7_JY+!?_%MnWmHU;x`KGjA1FVxY=PG?Br2BD(b!ZpP`Va8KkME`- at o>8%9bUtF)
zt_u7n*Wp=hks at PhYvPs_jxiIT@Pkl4<B+%IB8j2*@YmrQXQYChzwD&bB~KBndMh#+
zwqWGl_Sl6n-<N{xh4 at -7lU#rt64UuNPhmRvKYms%zKQ(buo<=g*STfcr%ltoe#*!T
zt0Td=5R2Gi=g&$P?AM`)Ep@`zS{@OyWi_3imm>(U8E+#t-dP^s$tVh|B0V{~ZM|5O
zN_{k?1+FmDKOH%d4kNc+E-4GzcPinSA^bDs8Q^nDS7ENo%VoFa9KwCQagWIFPr-3c
zYwz}9Y&$&L{ll@{<JtE8N^o3Hbl2T`L<78V9DH>zjV3Z6bc?BaeOQS;2i&h2sKZhA
zmVB;S<dF~6wKX#bK8*<7x`_eS)~d{|(|_+3eM{u<#p0707*?Jc99Ek7LfD}^(RlBg
z$-MbBX*|V}6an}KM;27bukmZ*LZ at 3t-QQvzHNOFi-NONgcz)m+3D?F>k at 418DZy_c
z7aiKJRc1Thh$T|Vv7o&0PjM4!6x$wn^2?YRziF_=$#<m+vP(J^WfB{Yneka|zUxyO
z*3%?Mjzl?i3Ckg3d$hjghCh2Icn-8YLH4kd;5zi-o>14O5&z10wAHsOeO?96z}@?m
z?(Ky*=B+37co*+HCTP)<`X$?&uubX_9CZG5*nWy_ at c;SH*zUykI$UGMc86!1(qX#=
z+u#Cxeh#+D|G;znYq8yo?XSUQHyzuzvF-UEE&5y7{shMZ1TBQ;iDNIzF>V(;r at w*Y
zo53}BK+ppD9NcMwqg1p;DfV#WOpx3Yj<0HaP*3b6-cQ4~$qxG}!4rCb*euiwr9 at 9o
zkUT~|?GP?ydHH at sPUtqoa)p8qCo at K&tcx+gesa|2ZdHuGt4|$P#r~f$>MwVSe4HaQ
z5oc8mepvAH7EV=NZi=J+5N1qvah59EI4ad;eGcTQC4_4X{pgAA82A-VJIgWN%)8V;
zr-0k$@>JNV3Y|@cf>7%c==NhNeM#VFkVTE%rU<PQ9M8e}u{HLm!!Vwu+ZJ&Z1MG^y
z;1n7Et`okUyF#s@@1PuwlVDbT56Mb>D;9#QT;D33j<IEdvdQ-#c>a^XL6Bp}j|efm
z7LYu*ALm`=Q*6H!kgV}z?;D}y!spXLFU9zt0~|i9E1<mJk+|qe_fzl(IDZK at My3w2
zX#^ZM-plAyY%Q(8WTef;buL{G@&7Tv0cf%%kI{b at Vckt)sG%p_@$_@`LFm%?{(}kM
z0mgGV;RxYeF3Evy;nlytRnW(H3UvdyU$uA?cwHPxEVf)4k~`PI7z%tg>5XluE1$+G
zn?4Mp=iY>G{zJ_l2`!w2XXOT8VhwU_gNGy{h*O6?bWS+auo2&l_E6vhe(k}+8M0FF
zBKZ#aLefV_FpegcJI)7n at -ym$y-x5We1<0W+;RAod{Fjr{(~{rl_A&9Davh4!@pXr
zUdIT*B_E+hE<x~n&65?61ZR~aiD1&zzmmKKzTnAu_^Ft|v+o3yY94`y((C-k5^h9a
zw22eyg~%H at hj3DnvauX6Ch~89BiTD=VJtBJP80lXM at dZjl}z04V6U4^$_A_xxrZ$$
z`B$)s$%l2qX4H^2h}FIDPY}ZoP83`>G&YIF1P>+tKPhk;&cj36_?s>x=NhM$Pjax%
z at aVAYKavw2Q7xu(;1`S}xV<@_<2ZC*wHz_XEZ$R4t%?%-TIu!6MzotetZ!hw{6C%n
z9xw2<+Z2Nh9|<DESNi at z+KEaEU*BDU8~;^8^l?rbY#Z0~>8kz}+rsaW*n?m0kZ(OP
z24x1f8vMKqiBAz+ba+1}9&$n;Yyf%Sn4h4!1YiG6e4`C9_FlV>B330$wG#GY<liP-
zq_{T=wsHshA;EO4C;BRM=y8}gL>vqJ^UzZf<IH{&xDOAjZDW&FQF<hoAe;r@!YG%9
za4d6jDP||)>U`&-{8tEe9ULXi#Ge{>2e$O{C|53B4;yZ_4m|Z#1HE3uATIpANwm%;
z%(S&!n*pD}(zy)lBOtc%$(ZZw)i(G{{qddE=zmwSz6ef3jKkU)!Ze%xPbG3BXDe@;
zmThqQCL^D?d>D8`@&0=74g8KALP=ZO9KR!vG;H_!i{`W7+Bw}cZ0l|0>208iEEU9w
z at v`L{w4TikDH&E=SCtgt1|NruPUzp=2l4&W&Oo16=7uau_HOsz;2mvxdkqiY5$!(<
zI$(Of4)Nurep=c33F3tO^{kj-cvgrzG9EhWvuC|5dCWcw`eml72=ffF5#_#4o|ji<
zGq#oBdp95kCB=Nnr<B at Q6|}}}8e9l&9!q6gI?tUq$M$I7cFda-a$je$;pMPlY$&RI
z_}#m=_3N#3frm5)Y|%hIH~ywUd}pL$tHQYreE7GN&k62H98FOLUP54!xhs^dz{dD+
zpCZ6sL4jvqtp<k7qF+x9B=x|Sdlo5oz{({V{jceRyn}tGg;IH+*|s7tIcXorV}f^=
zQDb-s?~-`wKyYg!2fB72_^83nOE at L8tB{+p9lT#Qy<FL at e*t-Sa-o9{+6-Msm%1>>
z`*tV%mUnZJH*Pon!x&Bs;<0lFB%9~^l-8_(Js{1e)Z)yNbGJk)J^uqSVP4ZemN?AP
zuiSl749%#w;JgjCt!+m+c2085D%x|;ms#@hH_WGpxxups42?F9&hWm?-rIwIokSsK
zIQMm8*YjDe98T;iZ3iJ^693~y)X81=uv17o+6+#4loxg^$a6tWIn+u1mMv}?{R)1#
ztu^B90>l9?8m=gDT|I{K4~^TT)x%a0jq#wI at Fm3V#$1K|m>!Ss2cL=Uv{T9p8-;m5
za7phZoCG(ksTRUZ0FHw$Q^dX}h*>BbiCi2NCMjar@%~_NHYv~^*6T~gr>K9 at r>On~
zta}&6z-iFYi4CmB!!I}Di7<7<Q!g79#Cemrgo?fPhyHfm|8R4|u0`VQPhbp7U*lqi
zB0jUBalK;(r`5yFebMI`H}~$BbaJaqf0oESMNx$WOL=;%40EuCbD5d}Y%In_*h_9f
zuCvg{4NaF3TUw)>POfRuXKrnF%qO-q<9i;PnsE`h%Ed*<7l30QfM;DC3+^S at e;3lF
z;3~vEjxW at gfzP`c`8AS^4(L!m?6Fen>Hi%2Kwl~=h2FcUV%x9(Kwc)2W9&YC#He!2
z1OHY6sXr~r1-d9K)7tVhgLgEbZ7zdnEy~d&FGmh?iJk-Y3Rq=ar=pLdKF;w<MoQJk
z$u;^??4SH=|2=m99Q0o6koJHSO{-ppeA)Aq77q`wdi&T6<ae51<KB{)3CvvKS at a2}
zV(-Aj$W%@UDI at CXy?_*8I>~c?&uZr-!A5ls=M=^d$@u`tBcAsH6Q<yVRG0>?icGHb
zDV;>}o`@M?TBXmTVPZ;1;)>5%Tj+_rcA`Imw~6$_9^{Lx&V&8mF%MXd!>TCkpGBO?
zWv9rv5PHUAtUtiI6YKY|?!tNz)=xM()n!30k+mRaL{Twjd4H!SiQAwJ7F$LwkQHl3
zZaKwR#hu`hyBu(I?o+dYa~<VzY350O%P$M%3b!Gz%Q=*7x&&B(>QU+xUVE%ec?0GD
zGxkU2?Lj$nJLn@>Lqca+>*+bXqhl4kH6tg3%V3|<3%O?&5m_ptAE`Ig=lm at qri!h%
zU%`3M>5u;loR8PBa!KsXVa7$mZ+iC&C4uZd;{NINBV5iL>Q;U#Vi=$+F?w1joh8^M
z;0&uoo7}3k5sbO|BCwY;o&C8R(VlLEXAs|<afj|O@$n(<vMtVmyfFl`G`}bYvBj`&
z7OmoTIZsf~>+rwQvbrH3cKZL)=+cgo9V&wSQ?YH#n`YOV9&BT7Gt$UmzUi3V__SB|
z`mIb=U81*vha^Y+Wkf&fYQ)f*I;mFurKTUg=S|5Q&-|cGcEtT25Vz7Y>JOh3Wh=O@
z8o=>fNy-p8lf2vNwoSzNGX>ijSx?N(B at b@47 at rE`i<sRXljAkur9 at jwL;T|hSf_)R
z9_O)i!-iXj=iCL(`A$Hp#!(Va)gkuc2kN5IIa*dzw?vDvSgCa3KXihJ<09H(55|&C
zl*b`eqa40N+QAv at oE-$tkyOaJ6V!81Zs?(CFOjTl`XXnt?nPi0Uj$D3MgO714=Fo*
ztkQT~8`$X7jw<+!KF8|BPVE at u4d&&>ue5>Q4Nc>XpI{uhi?ZDb$e9bQly<aPME%PB
zy1=Q8R)2?bbb4LH_ogpihVuN$_L*52t0q%tI8&&DViV#AQ(#Bd4m;)ly>6pZXk4Vt
z33!6oJg=!rt|d#Y7N at GXn@Yql){z+3|Hs+8$2D=LZ{s3bzyZbs$RS#5n`&ukl@>vY
zE22O=10f+0IkYtaskLTEhLkF at +uGVLLfVSbuC<7VQk%6J1IDhlXjK#~MwAe(wMaqH
zdSXaIR8H^pOt9bG at 4N5skKZ5pWHOm~=9%YsAFlhlb0 at ATfV?n&q%`qF)pTDI=G#D9
z0G?fJ{(VUzay(|u8~mSsJ8~k_594SdaJh>xPcvL~qo2cda(VakR8=&_-b0k at A0{?;
zJ2Hm)3(vti0=-c^9ys>#J`-AVyV6=Kx)3v1B`N#V)<wftj&ik$;Gxt#8kd!0Gf1kh
zfp2!GAK at zn#*O}&Je%kh<o)r^a;ha+DgJi3w3sDhm+-R^9Sri;XPC1wgrl4FtF(5#
ztldmFx;ekHH*@5RD&m_hrmm#Gwi#ZfCg4I$J-+yU8Nc1YTT*ZfvV}Pna>5p@*;m0;
z<45GFu!&~lsw8vw>q*LExzg5}E<aIUd#dgcK7;rSw55W#M=A&3rLMU`MfX(X(mlB+
zgI)?tE8WedAKzif#CL|Y+xCPG{G1uRtaO`{OW$U}dz|Dl at yV)ma9Vs+d_KQk>~l5K
z3D=QoDM$1k^8UVISkr0<#>bVX4tA6traT7x(3BHAQM=rv*r)u&Mqqz2_rX7nc+svm
z&pO-7l^gN at k0d6|vr!C=+HH{})~oji$l&3+YTI`UIX*uI!L|rXkh`{V_sHyHySUl=
zs=IzZwv+pdt{VHsF7B0RnSMl>-7C4Y8tt~Phg|Q4<Cg=g>YmW;t9Vw|6TCLi*KmUF
zV9K}Ua_6>f;2I%MkM=D;wBvYwm>6qC5^}<g_B{`sWPh<#U>j3Id at N;Wi9g?<dgTri
zLl=22gY5kpFs&-!;TJ<+ln_6c2>je-4OOSgdZU)2|9{4O{)t98Bo4Cd4B`}4+j4cU
z1$zQR`xV}E$q at IOg4(j=Ny6Q)9WBg0yMfD*4^lsZqy7*$g%3iO--SJ*Mhzb^%Elf(
zb0PSee!lnww>Aen<m`RyJHS0Ft-(R=wyL;c6g}3hMHx8pV)`?PaWMY*jPfMJWfQ$s
z;3Tp?aA_56YcTL?z6xTe;`h;+E{<?s?mtNSjj8>UuiAx~j3NAg;Psnj8SE965>9Dn
z`w!W+TFJK2Az6 at 1?j&{*3 at tUR-g6W!w?U`z0iRgA&t}Le1UH;5^09dU2Qp&UFwBSE
z$<?}Dwtp#iK9!6zUxvR6yyjgi61kZ~4?KL_5q6yCnjR0%)iY7c$bX{ygtvh^N0I&Z
zZB~VPOWxZqOy{5NLFAOZyFNAry2^P)Xr#}RaXG5q703GM9WC}u@~(y8UBI48#@`Bg
zqf7T9`eoVKfaKh!Lwf(*uq^D==M+C9#uhQ!h&ySNcarl_Rb&q*cy{^VA^o{umE*C;
zTY`SXHP~xQYq$pJV5`Y9)V~YU;a{6tc9x8jzNCCRH3G37TY(SU%-j8b!&<T$@9{c`
z6(hV at U3qxU&nV}(LeDwN8Zak*Ama%!84?aM1pV@#{ka+OE<b=Xu!~@6sa?Qxf*XX_
zX`ss<(#L*7Fs)s00xO%0cv}tjUf`b|_+vg56WP|%c_TQ_9F$_Y-$CX`3_j0TI&W#P
zPsASYG(3y`;JF(yjvp4ki+ZNJ{et5 at tZ5p24-~Oj+grfvXrdO9Ij#Ifs3jQfd3|J@
zPS3!atyeAbQc<6dl!{H at +v=>%UfN}poCVJo(XU5;q!<3PkIyqC8){ErWhj4)y+OX5
z2Yfkcd^xKh+eGvAbOkAo^yw^MZ<%pKhh&@hcU?iX;=Hqe1aP@;$zM36pZh$X at e&!2
z1cw9eFXX+z|9<i)#GqvO6d+&KK{|4nWzHl1Sp+j5In=&Ns+_q<>W#SC=7hoBz>c!D
ziCnGF?1T+^1J_J)z9Vh{`qz{D at jm*$>Gp`|9v9x6;FR$!#Om~eKkLEQJU*PCKip~5
zMNDD>3Zg>;!4u;FPE-waDG$UoJnhy3+s)tpM}LrAa_JA0E!eJ{MR3r>UU2vxa61X4
z4aZF7@#^2MOeQ$!=}Cmo8SBMc^<JwXd$A1SBJPm7sHO3KN{N1LNfYtqS4*JJBToSM
zmX`;xERh)o+w}A)*WAZikPdDH#_DVv;zlqL9JxL}LWng2HZ{U^UpzAdYw}^lR{tv-
z;|}>FiJb!cAEA>d>p0DA_xuCM39O-Q0_PIjOqn*%#{&BYVjzHj@>*Sw829mrsV6yG
znhBpD&r7?J)wHhfN<&)!kITd&#zTRa#ksC|!6-?t*wPbBJUB)?r#1?Pk at 9E`y1nP4
z1*IKK?9`u?6Q?yoZajziVnVyw7#T1w+Qgf{(q6Zz=zgXD>VtucOD{4R_ at 1L{XYvzn
zAU4{rl*#SvI)?B+!=^g?;-8$3NhD{o_(yg>&wc7SX+4o&qs9a;A#F-xCgx#YlJUvZ
z0Y^sicGR;o_}unruYy6+SBLhauQK?)>SEIrGC?Jc7<uR?*xS4+N&I+7oj&gKZhc$@
zCtRkqc+Hph$7>o-%|Je4QTS3Di9MqqVoo#@8;UFMHp%CLXI-jQ=qSRo8|p{KpK2eU
z<70*|Z0X8NOgU`4NmMt%S~;%K^MVyv|Mv2nZzj%z-bduBkd%hbHce}%y5qPg%)hEl
zty*e{FAA!fxk!v0VZfnziw}~xPr|Xf{(NG4W7M>F$$g>z$14me`2UH#uE1D%6n|bu
zVttQSoZI0#4<1XxUH3b9)Y?h>T~r)p_o>Z$6x2 at 6qi)|FlltBu at mH`NK9Y|F_Y_&<
z&xW2caMTKnC5iEmw{{q7&iqJ4GD(U3@&564<R48ahJFIxtc%F?XA2!hd{1Y=AENk#
zkH_J4Si;o+ZWoOivBvWsARjQ{tnBQ%M=;(?kt+qfm8sPEL;7^sf622*8Kf-hi5(KN
zF)RanWVyPI at QYwim=rZ<$i|zLXx9rj-X6+r at Gwkf*<c4hMVDw)3)WuZzi at J+t~edd
z{B__Kz;Eh`(=L at y07j@Cwt3|3OuQX%Fy}7xSL~5kYl at ZmW7WCWVXK4ePvRho{Pm%F
zqD%0x>A=Jwo~P_}<QB0%=JlsYK9G#c_1&=N5}O_7VvJ9?_%QUrCg5^D7UUv^>x6D&
zXy85>a+5oc^ojZrx9V*;q3f(l?s7BOb)CYbQKs6nDu3Rl|AO-9^kt%cwx%KeZZmRg
ze(9T}kq+Mmebue1R5aYDCUJyM4RAZ~#YLsKgTwCl-^#wjUNH;$%1Wv+Om_C>lix*i
zv|L2?&{0v#u}7Z^YKuY)F0o06ts(g&j_(M22YEt at 6kDUP&mG$FbH|v>T;%0!d9hHs
z8oaeMhgh{1FHxn&wnzC-q3CT>Py%q5-`3?eiAud at W|R0{;4IZSJRj at utFG$=^t5BZ
z#M#?6l#b%<CpTb&nMcM`{ixUD6tb{obPtPoMF)5bx`B(c%e07 at p)MTKzq#EDenzrB
zJJ!N){gWDT{^BEHA`&A~I;ttI)T?fuuDh7zhxvA&hwa;@VZOU_`MEgqbL^kw+GVb5
z5v$=<#0LG~uOQdvxUTsf{wEE7?{Te(%x3Z7p)t^cF>rHtq^_^{tGpROOCd|4UBN?d
zp#0~7_i5v!usEs*>k#lRBUdtG>59;?7^D8Ee>(E2;(vY}otIY|G>6E~N)_IbLwpBv
z3YYrn7ncrTAA1YAwrwnf=OgDOvHKv_!520llgmH-p{;S*=pQM<Egl7)q2bCnY7UNH
zMSS1aynpW?i#%ji_OjIt$2K`b13kLH!M2y=F>Da22Z??2VHM(nB|*lS$%OCT-R%2|
z0^BTF&Y4NAo&Aedh4dSVm$_xg7ZIo9rZb9+>GFNZEqd&C4t$MYWFi(VIq2}rjK=bh
zGvN<U4D%H9sS05`d(^aywjn30%^2A}5Nr#wMP)aZmuAWbO)1wrg|Y^Ft6tgadx2mv
zVJnb<do~F<^^&LoV_ZoO at _OajG-Z`~&8h1ozZ`NU^}>E~p2`E4{$ZDm1eh^0U%<;V
zv{#Y5goH1i#auKIA0vAZdWnhf_NvB<4+k8`-EETSA{`#Od6-*UG#Z)Rbo87PKAA~~
zAKSMl&SNJy{7-Oxrp`5~^9SgEOhoJ)e_r1ZH^xDaLe9sedap56D{6y?JbT0}=KLxp
zHei!&CSc8%{ONnMg^9=>vHC at n?T7v+SYnhh(m{`fZWUnel#+5j;JH_9Q6zUtGWPei
zIJZe1$tj?l_=VKHoPz!MaAl9}U+i7d at 8DDSuU67Mz-5zo?bl#WarsBg7*A<<=TVTo
z4cWH?vfx`W<aP&S<Z at JwoWmOVDP$bvcMnoWCt+M<$nEe!c2aZT*DHSPbK-S`$38IP
zKeUAr`MeP_d^U6;Gu!c}4=fesqkZ8^*a92uB+g#ym-=hGE%(~Q2w{e~8MeK5iUKTF
zCq40HPO-5+=StqELBr^P)yh1(sRQlV=AjQN5`0+9Udd(jtG)`%0 at u(Ux0~+L#4aw^
zyMNqYa_lcJ at ona0-pG|no0dyW-Re~2Wz;rqaZGLK1opeLFwHHZA<o}H%M)!3Vv>c(
zO_QHha)R-LT$jmTf6K+Sfp%A--4`Z;(^Byg>?MAPKk6j8=$RC%MVO3rB$FmwIL;dQ
zoPm)Yk1;i##9xL6^8NELjJHXu&*u8cy9H~gmZ((f0$K0r>m=T{bSysOaE}(gwF=0e
z0jlw_9kA&K0 at rtx=%u9H1Ywn*!{5Jxkt_EL!sy?;a)HnM9C6thWFOns&CS{R83(>U
zpDz(VGd=2{%cjly!1{r+-)xhVZGwG}gKXCcUY^q^+w96`1%KW_OKX>itRKi5Ji*+l
zk_7$OE-KqZ<dxdJMAlP1N9sppI at 5ezFZiVgOyHENigR~jokyG(d@#xQ$jClTbPZJy
zIAc2XlD~terL5T~yWbbZHrlJQMJ+kqu@(y4q()hLU(}*T`xn_FtbZGvF^k}<eNnBg
z3)9^)%A9>s3&7=?9s39B8Q}8!;C~O2yHtnRD7Me1`K;5nmi#XJoE&rQ<apyK{=AJp
zzYF8LLe*U2<T8B^G6%t$CEMD>Wx^ht*igZ3Z!Nd^L5E5%;W+RNadS8J0?)G#_#%CS
z<YNckVI}>V*<?AsN at bX0yrWog)>*e`6}TvJyK2LaSq%{tPbsbkCe%v4>BM!Sw#@&}
zvi?>Z_pymiTQ$KTskj!HylNm&7E}+s3&E9C5KcbTc-l`j9UNxO&;c?niCt+4_Ulu1
zkJ?Ucbi)4DiFmg^gd+aj0M7OB{?Q$0=OHElJ`Ht1aJ?undATT9_?>07Z9eQ1VqGaX
z{XK-Ss2B1R`qV(*hK%V8J~_O5r`nI{HE620k2^?r8KlO$J~hZidRW)oouyb^<j<@T
zZdY${w at _LpU~P{IGN<n&fl=khw?R)(*4c_WjkzN4{osV0>v=B+C15OWG20!PZrH0_
z>s_wI<W#4Yv@?Fp!(8C}9Z9sQw)~q;V`tq($j3poLbS(<37f`FGH<xGGpCKnk>Hnd
ztIez8j_yw!B)@}m8=c2gq;0p(V=}kCkNJl9XZ9L=ItSe?v>y{d6%3d1<Lw*e=%Ko0
z;9CQG`f|aKxf4;Z0#e?#j;`=T8=DGWZg{DpEBvh0_AIfNZf)k$Er0b*hy4X at LpymM
ziC%+5e{DgloV0%*+BU+c2z<#>+6bIGxZh#t5s9m9qOuAe$Gi@{?alBDC9sW{UyopS
zy&M}raK>o!e)Me(_!hCJBY)E7uIVIyBY5f$nx&s+nB&$aDOHBiQ*DCphdAsJZy4&Q
zBsrEY>3=S}-1_n-F}1f<&f?91BJ&q&r{=)|3*=YWWE1ar-4vV9Muaz~jl_FQNr)cc
zWu0a8)#Oa at V&_aHa?}75an{rlM at uoD^GG?u5_N$7=hE}8vS0uAvhNI)-R||vpJhMb
z%g!DuJ42fdnWEck5bf}c8}f0>$N1E=w)^hMvjoji?gamm-OD at A0e+xB!A0nDho~zA
zBVd$K>y!PJ5$XQ&di~FTujX}>5$4*zWf<P{ktm$1iOBKcq}O-L$|`KhItOxe1lKCW
z&LJKDwBfDyZN6*7CSImn!rOn^_}r%nkayy=dr&94*L>y4>&dzv!a0WbMlQ>5I${6M
z#y!q1nf4L#(va@~<OxwQQ%ex at pvVA*gZK#E7W@;sp_Jxuyhi`?$NzG*&Afka8}PaF
z?cT`wA$MCKxV^#~B`2pU0}SH_2ZJT0-CSyPmf(AHeP+^-y<la~OTKHoJzf2oduyn#
z?(pq7Z>T-zlz>Y}k&&+l=e=A>vwmCgo8HW1o;7{aM at va;CSAd|bEHp=Wp&R&wDIDy
zgJCNP_D73cP^FwrTUG(?uA{k^zz6dhb=WBLSTER2nbQ4H4sw6i`h9j-sIshnn9twa
z4DNkZ)FK``bcOM2Y-XoU`x<&Vus)Vn+nk^^z+~QF0~_syQ*U)LsZ;UZR14Y^?RhVo
z=|O#_sRJ0lTb(}{g9eQ8t$j07m5s*u`{a9%F}{<0pEbs}_sx_6Gbw4j at o{#7eUGHl
zS;y#XdnEgSzgG7{F5B#o=u9qtd5on}=rI4zF`q>^-XU9L at ILrH-UmP7xftMva=Wv{
zhrtCnir5JBp?|*&`FRjJ6p86*XIbDxQi**JTxurl)gBxBr--2&Wsx{-)nv%i{lE$R
zj=5W at U;M#!!LUj at coZHWuJsn-h(H{`5bg*2xLh5BxgSHg at Vg?SPCMds1Ia1K-zHwS
z*6k9H at ptjz^Z%3cQKx6l)pd5KCiEkp?7d;F5!Z%YLaxfVja|ZYZ|(f}b!+D at TepV9
z^mKy at gVn5Ci~mUuPmb)z!0wRTl4QL&=<V;j>9@~5iP2c7$l98XR>O`#E~tp^1vi%r
zT)x(@g|Lxil-=g$dJjUz>6)3E_<L9i;=Fd8`v~Xyy)wXyngO1cG{p)0?uBlCt%z0Z
z%DL|CN&H*8%XOZ at _e$&x);yo0tL08VBKrg;7$Qq1)2{(LmAzHNEZ7>y%&(N>Cxc%%
zk?d0hpQ)~_QqY64M%@M`!@T~Tq>xp>boUyj65i|9Q%st9{kusaZ-YOBGqikYlbzF<
zm^ib#H!0*T+}CM1zuty>BbgMl^a1W=%FSZ(A9Ad<8 at TnhDh=H(8%Y-#PL8t4o(NGG
zj(XV)M at QJ0cjzCPS1?Yd_{xC)<d}){C$Ob<0F&?o;^8iaj;M_5P8D5;%u-JBav*l2
z;`%Awz3Wch{kDpYw(C~iU99ETgbR^BXTeqpH@`BxJ9(>yTZkBb_=~#2fit;N);V<F
z at 3^lW_t|k at 8}939>)hz5+o1cM_$Io6;dHJ2%D13LMPSW;NWBfr+cMaOc+436$mfU|
zG6(s<f1 at cKll#}jw%~oxI}SkBIsjgjxW(OjSaAK~Kk`5A4&Cg)<7?x{f40Z}?N;hK
zUrn~QKu;LD-+aT7;JV&tEo^Q_@=rarwBGa0&#=DDn-APp*;~6MIxZ}M$lS2qW-FHy
zA4=N`^kuJqx at -jC#TbpTolUTPKC^u*NR0WLe-JwnWTTNf8|*wsRDM{$Unq6LXEMn9
zOkM=1dyR<5w-dp!eUpAZ!5j0?6eiaF4jKQ`x&+-e{MHWr{sO- at V@_ToIT|^d<ck28
zk2{H-{Adz4jNTane?It89|&%3n-BZO>FZC?4rVO-NK^tWY#eOIqX{1kv4M!rBIfOk
z>st9a#6q4156e;0{H$KcpZDqKm(JNOqQ}p?M))PP84UdKs55e9Ll>1WAE$jy^sJ at b
zQQ+NRS-B1K#+Ab*QvMsSgC~hPOlgU|Rg(9e^qYx~u%7gx&rRTDorw0Ch#2;X;H{kq
z{*OsR^5IS*AJT8aemqULt2>LfPUhu%F*qaC6O(i33;7o!BZ=OI+_|tdgL_3fV<34a
zd=B22Lq8HZ8~XoT*nk2P`b_ijY{=0DSqXUGm6t-jVJjfq{eCWt9sCO~q0YdAh`KqC
z($PN*OVmRiMBD-TS*YV?r@`*x7j%r|zd#&u9|f+~z}@mA;E;eFoS8u|U}cE!4D5w&
zcjWj^W at V+qc7*Cd8FrS}*NHAh^3M}FU)#sj at a0_w{+j2K^j<e*B$J}Os?tn53Hwt&
z{12u--z^2a3VVmzAiJsw^+<jt1!IVBj}*BObt3jkZ|IBgMMR=~BFTGUuN|)%kNNx@
zFnC9Nt^d1SJ+}^(nO1d- at -tuPPhHZ5`ttquVvBq*IR_XTKVmn>`c+2yRr at n+bUjRY
zQ32xCe+LHbQcy~(hwuB;!Eu7z4q-kxIkS)7FleXM0xzq at Ua&woe_Ac_7Mh5?*yoP?
zcMj|D^kjl7%D*oJzb(FPc+c_3<A%Lf`AM=r_Cwj!gLsDm-rkeMw{I(S3 at 12~qRBVu
z*T}`NIVC0j?y~PB@^v1ul1A*J@)FA=A|C?YEiDT+y`VbWC&GQaeSz3$^`RwpFB$A9
z#Q)-L+2B~6H&&$qmQGl9OfM`w=u>Xl(4 at 6&FeF)YZ4+F&f0%fMB`{ulA-GijP#;=(
z2JQ4SFY6 at pK87x@#fq1ND6>t0etDPXyvC>_;a9AM-f*7J)dznW=~vRH!KLIss)Zcq
z>xr(ru@|!Fb#hLaE_z6=`*UxFEfRQCp4aDzAoMF+TmYPI3|qcxdQfK2DcGRE364Il
zcaIS61h0~$>eG8)5?N*eY at M)|?Zbbw<TUa&T)r0v4)`CaYxLMke1r2DI>V5CYTF*k
z`>Pw51s#Umfc}kkBHuW2FM+pvhv78v$`3<FtV3R at GP`mjv6sleVNd)&+h(}9q-cMV
z|J^LATyOiH<n$imfYGZ$eH=r2uNwJwc$||`BzPlaNv=Py at A{E_q*e&sZiRV68#s=Z
zUX3(ieke_GI`^tLALw$F)gak)Eqyt;UPG{hGTx5F5^OK+e`v>nX{3zDJc+(N at T17)
z*oeIVcwW>8d#XcS7yRz!dQMt-%7y3WIb+RNWJ~J*r%pi!XQomX**(5q;J^}HAbuLY
zesQQ at nmHHxk%G%~>33d;Z+NWVF=~P}nR=AWlTi)qUE<eq?NR)Ej6vRj81PqGQ~`7i
zGo50Ie&cmdU}S3kU%J#;YfBun2Kik~hLe>8!z{QybJdf>q&b&s{XRAsg_Rc#Q>kIV
z6*Xb(IHHyj+wOrgSPyS6_&M?x*^`$Zk6cCePa)xrniHA3U at qz&KmDBr_58IB|Iua{
zXrs;0_cp5!rUEmq_wMRWooL<dE3s6!B8M~PbT#)ZxISdsMxjQxzB_x`NwPjM at aMY5
zGg(K{;BVd7PxyAIzq!^Us+=G5Jq|5oI;_iHm$Y}eQyV$VoqHJL4n~Z8Y1)n5`4__P
zELniKI_*X~jyslsXUF$1t};d?V~)B*mqRXKa|m>tXX*8}fU=6 at RY7Er>3yubg!)Z8
zCwN2In7&GWno-gALpzMo|Nf5jPiO~uWD%b0WW+NbEyP;w1z#b_SxZ&OFTjRA8teX~
z$s{lL5we%@I7SDXOxErHT&t;JFOB5)n=B&#LbmZ!yyPuoF>dn>7 at rY7Px@LpNoiG-
zxOJ0yR_pufIOKD9l{GR4=$qhGdn<H;3$MeW4TB3UgTBesO~GYg4^)a>IM*+ at th003
ziY17zH$mPx1Dr9(E`t30ro5k0HEwWBg|8=z{Khwtt5*^^8MYa3$hKbr*P=OV<-9RJ
zhEvFQpgVw%2_F*6+K&%8cMG2r_?#r`saeh%u~v`8 at j>9Et%8D9iES3J6S3&y8s8==
zsWF$Cs%uw2tGlQcGCSMn_#VZc+Di6H#25{K{tdaEU at dGa-=l7p#`P1k<GD6QS94vf
zTP2LA&m&h#TU)ZOh6yLfr59DpgQf+0y7w%XVt+YT`5tork at 5Es<If7*1N at VT1Pi-3
zDh>V6PvYN7GqT@?z2 at AwpTRd011tqF89I|%W4Z5}jIr{o{L27s?pIV2J;fMKuSd+}
zdM;B}!)5q%Ghsf4DT~bm*F6#IpLXRsBNO~+h%b4VD at d>v%?O$%gde_3+&aife{php
z_tczO at +V(SqMMljxs|ok7nm{2ZW}TLdSLJO?@p!dN~w80BM+RZ58c=e|3jTH!=md-
zc5eX(a<@LT)K=sllw0HotP~oaUq4G+xr at ujCrf_Km{EB#r<B$j13cCfJw4YE)KlxH
z^Q5~NV9T~v86;cV+O)1dV&U`d7n5}kT=1~-fw!vDtDUS%%rj&ks}h!WLPxVRqe*PT
z6_Q8Sjyd%U<4-uEX=9bBbUQ1rR50V+4+_ at t@=7y&FPmYHaLHuv%iCf17=*mBhPRLQ
z%X_OlO50fpY;_|-ptF_Pv)8)Mo3;=AQciMQh7{{Hsv|yrtrhTh?c&B{8b*z-Z07tL
zTP~|0V`xHtEKG&0yf~y3ew=%<??TFG&uyJu*#RH0X&%;9_mx*=-^C%GKxZ<BSFg|B
zF8>341lfW%7&X=F4brW8^k?r-`#KqU(1S2B=?h5^n~HTorZZx%f5=KFw?k*|EK}8c
z`VZ9&amJ`0#=gHgQugKOJ2 at J}yMB{n^wH#%SA~~$2Bl!$U1&U5I5i~YmDQCe at XP?@
zC$n?@A!IJptjex;lbt|*yz?lRf!wTL8O68Bdf?bbBX?Sr++Gn!gWFJN6oe7XC2|^`
z=drBzl_YjwN^ODP;0titX_;}zB{`P77s?-lwzIQ{kwE?IM0Uw{BYQBlKjg;-=|%^g
zPIBsy--4RF51zZlL at eqe=fQD<b?x)MLhTDbP;%JU=26yMsnQHw7dR`(^`;x$skcrs
z8q290$USV$YCYw<J#TYhvZeEClI8x-apoQ_{DoRpV(Gk({~Hk(pw9$f at vn-jt}?`V
z*yBy9zs3%jpGSsk8C at YuF_&{<$ow_nxDXj`A=9;!3D at OvDZm3Kg>X^tn4E8?DxSmG
zudt-ZFX(5LHk;3|;~J8 at 9l<4n9>qShj1!rGHGhtY%nIpZHz#(rzI<t#F|6XEAyU_M
zXwQSduq=-!Wp9Rjv_|^2DG=Pk at C8E#f;=PH9~GdYoQ=!EvKKTPxPX@;B_x;Cc(LK~
zhki5iO`4K{J?zFwjcdkEHH%lA1^<IHI?2#<%0~{~$M3&0i@)DT{K at X%32#h~SO+-@
zIVkh~hIfSx1hLa2E3MGAtjrVmeqvftdJB$+;dmIn-SF*(?-BSO0W6mXctAX0Ti3u&
zpBxg?rqJz at ZDU17C3pZ7y6V)gDmQQ=pX+P$)9sdhUU`ZeX5L+tHl-G^A%lh|N(PE%
zWZ0?CF(%4ase)43S+XFM=k}+sX)p>rK6q!Dj}(5t=913*hIIwG%iwePgwH(?0Kaer
z=Xs^vCSBlQKl$@MQ<%(J&Pnk*PWR8<alYE=<aa9nTfaNbXORC5Jf$IST(9phX8T=v
z5XPSI(fq66Oisb~B at t;8UFaDl>3i^}h)J%ICzx``wrfU>55r!lyfG>uDut~!fV<eh
z>K)@!5j%_APJ^L}dGKFqZIX`~&MZr`2H(!Hv*q#@$lWK=&ws#YIbGv#I=xC_?(R>6
z9F&^ai}mZ~DoMzX4Du1Nj(V?mwt!bS32_u1?(nmJJV776F#zolG33LLV}E<FTc*=S
zWnJmu{1Uoz9xdo*pqml>3_2lji0~_v`&v|y;BFvTA;Z`n1xp8D{_boG(Cvn8VgNX)
zi^#q1>Fa^H=LXwDD#q?S;NdmCR&XzS6^>|JJ`q at HZe*o`8$sTi_%baUY;uJyc$YeW
z;Fvga??`+`!1wzl&iNS{0#s*B+$Gv>1a3B7Gy2B>E|)9T=2-$|iEg21;_a+IFcieE
zDS^D1vb2|zkUUcui-i%(UP(#tHOup$d(b`jIEa6xaaqJN^Z~EKFk-{4fDYLD9=XmF
zJsvVmAJ)5_;G^#jPC_2+X1;z}_;j^1Wr|f8*A6m&A-6i<YiUsh;GL@}aOp%WdrL~m
z%)?ipZ48F-sm71yKQeIRlMKn@;REG7a4fT|?#eV&jhDE7Q(q#kLZY-9CGCBfTaW`#
z*K)NL>q0bqR6nDAt7UJKHVHA~c(-g7j=iRxgPd8I{C4C!Qi7Y#e}VApod?!ukhDL2
z3j75Ll>}GS!GJH88wHG+3ir7Yy$)Dl;PHB%B<Gk1xl-JZ-_CIS at 2-~VB_AP%`TYla
z$$R+h!RHWsTRU&)GY(vb|0xn{DdsfW2 at Wu4H!!>KLz&32tsFkF41CZJO-h};?safn
z!&jC%CurQuGPV+HO(n3s_B~44ni_j$H>X+HpA&Ix2bbJf&-3VxEOF9 at ao!K-3yvKi
z=XoC8@!-)lMi<OTV#d6 at F=`9?rdt*tbW9jexMTPAaMEKo at PYM3C5P<J4O}`M++%~?
z$syOl9~!}r3F*25(IW7+Xmoo?3>W5Hd{`>mLom2iin7(v&n*n;KU<;$HV|z<5 at N-X
zOR`uSR0rLfBFB&OW6{6FJE&A~URXSAE^)1$W!o_Zvn at _*mc at BB!{V$Lw>rxz_&jac
zC&>6Bv174zV&~A$`lyTGclJtjw|tr{mHjEebx1Edxlr=odyoH{NB*-u{%-~OZ|Bf|
zWtHT=`p5tIlK&12{a1S1<u`;(2ETXeHp(<EU{xTG`?u#!3fe<Q=oMw0EGKU;Xs5i3
z=!x~u9^X*5SMCvzlw;3bHu<D1*W&d35x4_m$nn+V`F9@`REyswAwT6NiC#!WUMVkG
z;xyTEw3Q|C878H*gUir%hiwfxiri!1SXQkI+lDcn23*3Y_)dq9e>2&Cs|<R at qH8`9
z!}rvFN*4dg at hyhz=cPZ)NE}S<29_%MxuhS$>HZ>zd$HcT0rQxwIT%M+cUr~y?U-v;
z^SjvR;y3miq`HdC at skbN<El9CIVA3k{9k48p3^jv8=L#UJPOwpOz1ZhOsdG9>t0|U
zo8O-K;pFXP9I%VX`at$>*c8Lb{*1gP;|ZRn$%7k{+x3=(@KCEf7_pp&-}L~FUna6R
z$(z;sbbdQqzIu94TF|LsQt at vtAGc~;ajjcK(Pp{3&t^jd%57o7pQ}pEN_mv({#@US
zS<ekLjP!QAD1JdH&0>BJ^>)n-^PAZ3{juM7F9C0{sXjlIN=?q9EixOeIrObpV3AY|
zEE`SM7d#v5%Vy-${#FCIptuL$Ke2x1_B_d|{f4+#tVIQi7wNPh#PmUbK)DU9x5J>M
zE11n8w`3H(8Sn6%bgI&f_t->iU3vu_p^8|`s?H}4=EPv`iO<ToP|amw(pi~p{-~Bi
zd-|S_g6#3lM-9k3c=i;x!c@(qN^L8omB7He_v$mQ_}1D>Z)@0NA8_s9Z)-O^M4uuq
zyYy7(1cD*SZzp{4#$@`Uo5fK0%|~Y<oqlHnY|lmy8pJvW_&nFyuIU_Hl5SvZc+O75
zw4Vx-y>%q;$;NIsm6_zOIKa)(4dyhjiU{<(GL=ItY}5*H<uSSEP`7u$qpZcfU52 at I
z&lpwCC9iqwdd6sSeuaIh!fUDaR#d*u#-*&W7d8hr3lHgxT#DcEx-q)j<ep(tk4J?`
zjm`#@w<qrD%?*cMtkQ8z%o+{vd;0qtdz6^mKT?~cm5((fztCgo&~*q0fcMEz{5^II
z_Tp&pSQKD=-EoEEGDQ7UigNMe^WEog{zsgT1D-7Hf1Uq3&TDW!{ePYRaCom-ZaMWs
zbJvH5BoEIc&*K30dE}4Xm>CN`TzU%`=jw5=U5vwCJ<i8JYQ+c(*~bZYH1Yue^Lo#Z
za6%ln7-SSEdsTLJM)V3BMYppxn5SaH7u0^=^JE^4*5p2jf4R6v_H at V`#!96g`gYV(
zeTvFnR6D$-=u3IvY#DnSahuQq)fUkr%IRhedB|*r?;{PlWOrQIjNeD$hZu=t{V*Bx
zz|BhR+a>4SFmHg7^z{BjgqX<~U@`OSqQucRhe=~JI6malV|<i&U7QEmGNEx%m?-oN
zes_rTpzlVLHIjU at 8WuT*)LQ8US8f9tbT43E^TIMqtlYJR8}Z1u%A~vI5NtRBjMTRU
zV|yfQ<#!kjFqO5?ljr#O&rE)9BiTno;-6cB{Mt8VcW6$wm$D|Uda3l#x70-X^@|mp
z6tdxFf}@JIqCRP?Cd!IB{gK!^^!*5HM3<?D<R!=d>8N83TTTa%JiLw3Vd+dh#(WoB
zJG^OBOXvjH|Kew!CU!Vx9P$Szz1xlF#QqR&wxNEZMO)y5J`BEp4IL>Xc+0<s)Wg>I
zoNRkl74><@T-no-8?D3HS6`4DzfHUr_|0=!#=j at Fg&fT(QN0ZLZNpuX->)|0q)}1=
z*?^rX%S9RgFdU;kH#AXS7;h$C3pt8*ovUB`Q8%R~zu~_~X1mBa!2{?{8OoN%?CyU+
zmgz&xQon#T_HCSLv~PSBF~u?*ze?8YdS~}&W5>o<nFqM`3tWr5uxvm?7VIsb!#??i
z at t4GF#xsd++6Kt8yEeXz`zOnK8@<BjHKvCx4S{T%*rqzbN>+7)bCcj$C*uBSd{4ml
ztK=HgXCA3jqpbUVJYy at VQ_xZ}E)uaX5L|BJb;O!kT(NX`$F2YS*%- at j5<DODqOO%U
zf{-J=K|wq7upO4^<usm=UMw{}NPL7f-VZuWjUkWfLZ3cb9TAji+L<Rwa&fXBgnhP(
z*yW9HCSHe)SW6S$zkPWAAJA!<3BMj&?qMPP)U7Y?yMS{|g<CE{?kDyb at z-Q*Wv?c@
znY01 at d|dW6;+D!0k8`cT$(17?&J0-x3(h<5IrJ8c>v3ZWa{E%nmO7{Sxi0;LQhW9$
z_m-jz`EcxM+N{O2EGzD*!7Ry;j-ajL0-jE^_(&$VLWg?I6b>9*<cC*wkI+59 at 6`<+
zTb;Z8bPpP2mCn|&c?E^Z9=2?7_61Cy+zGv+BzrM96(QU5d|$}B2R#L`^2A3_iZ~5b
zF$)|TH%Hz}+Nv%^_YnP)0)4tYI|pt1iYr&$!a2yxz6d!ICLyLuFE++6TGvBOnvb!(
zK<4A9_l&v<+qR~31H;gfeBO^w{><m-=`*l8;Bnp$ZjM?e3J30{thAofPBpRx&xED>
z!|weAbg|d*?S=0*N^fxLZJo#|djq+%JCQr~2Iq$JD~O+1cRKV8VrY|fH~2jQxQau2
z2Hy$GaIL}JWyJ2SK0z?w#<;D0z+%`~<Z7Ta6CJtp{0DQf-(!q at k9lq17>qH2`Ijp@
z*3HekVmC-Azo;bh`liglnT$B_9kfjVbfJFWo4aQNH_?`S(auR>_rb?!`Z~t_;##$8
z^t<_P){+&7n?CF&gHNu8ii}Dtwja_De;aF%9s1EYK3{N6qPJVpy6$*za8n<PF6?e2
zwn1<^=-CBP3+XQSbCDC9eK~3|$w{G#4HGTsOQ4FmVJRd>cl0`@8|&yY^*E9vC~7-!
zj$c##KKmi7?l)lX#(J1a at Ui=DLw{N4k}u(d8BO-xqW6%;?+Ckc>W5g*nv$m`T*Fwt
zG(E`;IiU7k3X21WdItCu6-)by2^XUR{El<?)erq&pF9<q3^uV{P$MEaQuZ9$vFi=!
zK_|k1JqBOH31JF!wbv4DJU8TPihp1&`6sS<o#>xKypSh}-V~Ljun9ht4?sr8nA2*Y
zKiPseCAyKi%#;~#&VPV%ay)=%u6NTs{L at xo_0d#)8t^o)BlokZRc!%Jn>!rKnciH9
z=mD=oA6Gob)ZqW070<QK#n?|FWyl5e>yVY~WXuQEAa6%Eu$x-w8Hl|AuF)B9GmO|b
zkRyO?P8Kln)hseL^12PuSMF9zbY1i^d0)<~pw7wY^X_EJzU~y!^*s{kPZ&FT#m2r_
z$(ON4y7vo{MT6C_ITocc;L@|4>i!mXu3s^x!imkq*GlrZga#Vr^RH5o$T#yn>pw%=
zcspWEV{6|rbN7m~waAy!nBDi2IX~~O;A#LqKk*zFjvQdK%53KDyuX@%$}0g^De^oR
zxPWP-FZ14GH4$p_+&p&vFA?uFCib1f$Bf?v_<XGIC~YFPmVg)W38hZ6<q-vmEe5n7
zem`Y+7;v7|3x<cSOZ+WtZQ`Y{ck6EGPMKfLyNEvE`>0SF<UF*43W7Wl5EEbTcI7ng
zYq1PI6jR_QidZMyjy}qDclEoN^gDli9NhD6SAM~@FOWXu&z(eGutlWbd4AC~BrX~M
zDfs_R2|vTJl0U8&@;M+Cr(jcl1ik at a;#9v4#a4{UxD1=BWUwCk7{>O8T1T9>Y?vkJ
z0r35=5FL$eHf?!bV*0vGqI$1k#H7I@%W7 at lPRQ*%PlX}Rdw%euV1tY2V%1s^M=;vG
z|HN9j+3?VNzDHzy{<M07q{J$irH%lu#X5bS+5x at nX7IPH6M9QDLn*gV^OVgjuoi*|
z^hd#yfDc|mY`7cm`Lv*)vDOXabC at b81rILm6O4krTti|aHzKbr`t5zSI99Ciq9m;y
zUG^A8ux{Fk+(jaL at YiyCm56SS6}L9q%3@~Bk!f4mBwVvAh8?;FF)^(jHi`KXBT-(Z
z5?yt0m&SwzPg0A0WOSrxWfAhjOk1BzCAiANn(hW(jeCnpdG*e=as0FRa=Ny=%7H9$
zC7z0zfig768?wQ+V@?~mHk~$bIfZ^to1)SbTlJDE8!J^d!*70`^;6`KwGO$?Mheyu
zeND}|+K0Xwd){#C9^yL(PO(nI8XE0YCK9ZRsjJeKO=VtSVNX at n<9WXcCd9<xc}(Mi
z>7N&|#+yr{6aPhg-$Qv<ukbzu!lyI_e!=mG_fXe+F8NY^CYYPo&vTSLYwdjZcbexY
z6X=x}^%<2MB~yL?T`&^yV2ez`zj{_p9p?1?#~ko7C_g~FEycI}N#siU7xH9JQSJo(
z;5Fe9_}IUOFF_P^i>w`Nab<^Xw{j=&P9AIlj=v_nzKGXK!S^!A0a8UIVh2V56J~uy
z46L^d_Va3aGjJ;I(FF;>p=`t+`rqov-V$tQJA$7A?&KS#7ckARr75tVP?rQ1t*3#V
zK7zUz09OJ3Il)8nTs*_6`J~M;W=0UbllQT7!q3yuRSv(^j@?P%6Zj3^a|K5diM-;x
z3fq9o|4v!k<I1){k8`5F?uc)?|5FCrf_i$uh9Lv*%>9$uN(%*EoGU+}eG8OzY`EeG
zt~Z*W&!0wo^(qa?cT0c57AlS~XOW}oYu3buBYyWo^ewnH7^?L+@^yLA6X5fER~a7r
ziQ-6du5za`DaZ+YB{)%Gd!K?f+(mQ2$JMVuZX1N3VWeO-+HCi<8m3%uICsL-n&5YV
zozI~vf+vx-!CE<5`2o?RHJaiA^P~LRhNmVCRz=c-g@^$r+%zkLMci7}vbwj5 at Wzli
zOIZtRqRywkNcUt4Cx4JV^_dT#lfWMie1A3iRz58*_bhC~GRgwZLrd^es8bC%T2ib|
zE?@CJu_4-Ols{7omF|D`$plxQU_HUyhb>5<(=aPro4eMNF`Q5O?W$|;6K>iDnXlgP
zh4=hXSF5<cf^#Q&j6gH(L&W+!3bRJ`DDSRv1ZG|wq4o2ytVzwWFRzskW09>=bYSX-
zMeC0#e1E{W;`w;U+JwF?HQVx<-3Q6LuGnb!*n7UHjqttn?w});ubDcS)Pw=^!u;Ds
z86G|SHTUHl|9>@UkKlQEe?(hmLf>=x$p at 90XHP}wS5*WhpLIq_q8vh*;0I9wiTCoD
zp04C|x7yG^I-s>1*aQuIlkzK7Fj^{75PbYIZYdut(}7$~H-Jg}#BkKZVUWTHmz2mg
zETh1^YkI&!=g}{&bVIC}NNCjUVnXTeu#7PUhB+P&;cL8;8z=XLJ-MPm;Ng7h<SNZB
zna(pXdr`j)d2f-64%e7ZIugx;jzrp^pH&%TKwfsAErgQ?7@(g%iLu#r&CG#SvxAoL
zn27<@r3-ldPYkgoj_IiscyIy}gu8(yMqm46feYkow+pbrS-?B{5;#*g?AbYdQ^UMb
zJ%(Mc at SLf&lDptc{fl#@)W3&(4oh6$kAMH?ce>L<vbo1By~|(g`Y*-F$Aj;}n9T#O
zIi6|>UZ(U7-U2+Pm}>G$K<*Zc;ro621EM*lx1~Yh;o>m<4%ffQUw<ArTCMrryG^Vn
zCgP#LuBXAzeUKa3_0)<b;EH$xTw#khxB-XL0Q~0-;q3n?@8o|e?>C{hQi6Hq0a at k@
z at OC$l7w`dFp!CH&L!H=PgcJU~4A12MyA1ZS at Qwet=Jo$_%_X7gKduS;FV~zB{>S@!
z#{QRU>d6{_HOT|<Mkiza*X4tc<p8)Hik3^%oo<#P|Hb(l=WfYtjalAApOIa$9@^m!
zo5Y=MQHT#ev|~g8vB7`$R=wMr&O}?hcw&!8OgEY3_r_2Y6yRz;A3(73Yuc)+KAS!J
zomq2nZ4LZwz;IP*REZ;zAFb_U{(3Lh^>^E1-PyWetvZ+ZOu&=6GIk<){!m at 6)i|Gp
zz2S`H3TzMeyhwdQ$0PUQ1jEBkbH%kjC)B1Vk>^t7mpf1!u8VApsT=9>$oP5A4*6hh
zc$u>?=ExO~+s4mVh=~6PypVXeXC*_&pVvHiRx>;7j3mXWT3KU%QA2b3S&7}|g-x_j
zX1Mj)%zC$XORBifW{cWz{&$kI0Pp{R$t3R&opQ&>!my<1o6BLlAn%VHb$Ac{`fK{X
z=-Qxn;`))pm=u)tfWQ84VM)at_%#@_{MKGzd#i)B$Y%olKgQ*cJRjs7+Q1YU9)4GY
zHhhZbuKc|f+><d&_~SP7!t()M6Y1pGg=oiB{JCq?gqS^~ZGyF=O=3PJ?aFh#5?|D5
z(v~sb54G*QGm>T2IX{teEYia~ZclO_X;X16Ux&rOkBs2UzE`U$b24hf!_C7`pLh6k
zcUzynvu%0BoSXc$iH2L7hmrnmwff$nixBgk6uSm>V*?ZT|L4<&*l5GUikHaPxV0+w
z8QKu6mH#nRAHf;PMQ3cVtFH&r0u#^|);aIhIQL3u1FkPUBTGSl<NkBNPLCa`--0*b
zV^{aED)@Iji42~9pMRFzXdn0(G4Kh;I=FFHTzs4aujUVZg^j(<U$acvgdF#KYc<uD
z;Zoq?#{qZdt8DUGc-DHEUE321TXg_S<lwv({`xrl)`(p18vp0L=Uw+w4zCrib8M0~
z^8Z#h4VQ}dL%-+q2n1;O_PWlOBcd+CuC2$OW->p22fl`J24-BVf*H*^1v6lqpG*Hp
zNt9b4<2F at ksk`Ku$f(>K^pD^phR-(yIp6MVV<p)0-=Po##N=b2wwhl>Sv4qYEGdV`
z$aGtk7JL5;7Y-sh(A{xpM^I(am&QkVpVvYbCNc^*FD9II`rN7?9<tGJ>yrbp=Z(j4
z9sZLVzStCATu>$If=|D-x$FS!%H{QL?;M7nFDkR)(^Um*L6xXm%ZzP3QTj7gFamRW
zup07HxT(5dVlov;Qn;cSt2PJjCH{9l&I_ at 3is8Z6V)}#o(MP`kQ$IK6hv3~Yb%N at c
zVqm|n2mdR^AgIQ9IWR}QigCb at zAv~RsSge at Hvcw7F(6u5T%a$~b($C6@^Np8>8;YJ
z+o}}mrYb-B)SNNkF8Egd$h`3Gq}a4pE3+1O at 3&e_%*@#bz_)P<YuA at y@iD#Tg_b(X
zPf;2sW}UHthRgc5<lU4c=CJu)OPvezp*slKI68O|J1EeCqe??XnxAhPC!hoVTJ*_Q
zrz+c02|j!ok at evN{2Aqb2A%nl*D1{TzZn0>`yAMV^q|94aVl+aIj}dH7zcb at 4^ih*
z;Kxm<@9R|px~q0XnG-nx?+dfh_TQquiq=!Agw{jwxjOqt66}fYH0t5f2_z^x46-=#
zz<f3u{pKgeyuEo9Hds?A*1*q(xy}vM<*tB!jIlF29mkD_@;)~-d^UouGbC(ylslo~
z1|xN=Ym28Jw8eXm)vwV4UqSp{+LK<n%8R-Ai7u?mN!AIy{2|%^xeTcQrrhwi&;Fvd
zn4iA$De!fB at y^Iuh&}Z+$`mYR2ZYPu7e at XT)ca at XCp`jH(5<i}g1u2~W#!6dg5}`j
zlYAgwHKJW8<e!w^F_L!y*UbAfkt1ZwI`TebF5jsXsFd5Mi+~xV6Ol(9&v~7HPQMWG
z!-Cn$I`f-%I?+cCVM<U_n3!BA3dVeC#=F>nmAwu5tCK62JAzL%Serz~JHJgqO#M^f
zWEJE4JY>=gs at XjE&S$9KT;W1*?V|7qJ?$QJc)AG3z7c!$n$j-B?L5+JHueFZikJw>
zGIV{Z5O~v}<If)NS7dKuR$>i(m#t$;$ew~R20l+RU;llbBev*@du;U?*+pycONjXb
zAK+)R)oL>5(6>$jcvynJZSBzAYqgi%qz^JLyT-($anMVU7XtXW5s;yqf}bM#Y-s?n
zWH!k8^+Fls_SaqVGxRUmPq4o)qfbs>0$lY$S(|_^F2IKs(5>saL&X{#s~L4n0a;`C
z_8qURV_t#&F#z1+Jj}uPm;;3K6ge#+$G1AW=OFJXusOl at 7!u2R0b{?p(JOGtv`mU?
zTo$;9l^7r7+%xw5Hbr?6KKJ`GlY(kt->Db4FXdpn8T6X5)ZsN<5sJLoona#7q}}iV
zyppQ at XEow<q3b=t^AEI$ICtq1=uzN1Jz3ln6_2tI&m5M?V>&iN?zOSt!LyOvlxr~_
zPC|G55xQsG#zC*_bv;B+6J1sp<c?On0DiBA=~~##7b!nLp4%qEVS?-Jw!MfOIFGpB
z20m~6NAStt4CWf0rN|HZmsN^`uxEg)c|<IOJe#3om7c;i3gdJ+>`F<>4+KXP#(e$K
zt_q3HCg>(M1#eG`bMl_2Foxem9Q$qH at O`H*@n+^PYV7pNh*+V|p#SyXb>`xpbnr1@
z{IwxQeh at i`IJSt?Q4w0ZOr=GC-t;YJ9tozX3(%gX=|y<gy-RI8j|j1I`9aqPM$KKS
z$QdS0XybBAeZl*94dbC5&l~u69i6-f+7$NJf}=hb!jn_)8P|mIlmU6Y2DsI at GOJ6b
z#_wwA)CEMRCb2=K0l{0L|0koKlC7N2uO#Ox+HjZhEpQ>-e;hB3IO!j-wj(C06}eLB
z at uHQ4gH7p<F*pMGJUShjL2844iDQNc_0}rh7aYOd&YUwy+6s32?qJ?NLt>y_o$B+|
z<rYrLRMjQu{sO+Bo5qCRK8#`Xn~0lD>Y;zS)8{Mg>w-ek#tpr`dTkTI7m&VR_9pp%
z;c1_*8n1txy|jUpKQn$#XRyw4A9^%t>tdg;pmP?W4o_B|fX?ZTvNjBr)$faVeOey5
z0`>MqyxCwE|GZ~A`1{G2CH)}AnDQfi5AHnJQIfAIa)Ncp4bm*Pqu(Owbm-1s9W!zy
z at 9AEVBjQu7Nl=LOZczj0Dj)ZPtHib!@i0U#@gen^GT!H_2IP8GJ)A*uqV7#-n$3`U
zk{qFm_qkK0;{{J*Zu=t+QAMwB%Z2SCHAKnOF0mJ-iVwKPtoySh_aqs&Y_r(FzSH<V
zI~92qzQUY+3VAcnQl@<H*kSFyX_O2O2yeOal5ybMZVM<K5t0RYm~f`QO>8>gLK`dR
z{V!=pF)r8A`-4xa|AKisg5YF{K906^*DpSD4)J2BFOdsM-EnS2?yF0W!fxr9zCiKv
z^7)B(f%CJn6P2}LvC&R;<zy49o_vs6J-L?jO?Cj at wR*A<>($MoWaR;Jt-#xbU#2%=
zO~)MiTlUfiq`tsS-vpN8{>e;!-SdU6jCNy)zu!dc4Bc^wgpZ;<EQyRk at d45n|2~&V
zn+Wva9zY#ipDuc3x1H`WoS+6GGB3Z!0h=mKoo|Cp{uQ>?bw9?yM8t?A7Jxl at NFTjf
zSctvx at w$S2jm?)^a>oZ9!`y!ug}8RMh}})rm+rZV7;E*;3*+VOVIpuyB%rUWfj5y)
zJE0sMREPD<!yuvGNYACNqHNrQHGhh-nabhc=i6$;h$6n%5r&*x<o!R$PH;qIf`=@V
zj2reO8Rstx at g9itWM`7`(RjUoDpirat)!D&KQeo1w-1pIMa1_89`o9vT*&br>si0a
zMY4$rx1js^%uG~U9e%o-rYSn7?}0fT#)QGX>2a9<+bx|xrNjQ^;_PV%^+PN`4XIoH
zL?1hBtJtTutl(wCk9pbf%-K_2 at C~rFWDMwv+eEfsiQSHCZMAcwTRS!`rVUlOwo|P2
zUF4|#;67wu8&ghX{Ss$)CAg8Q6!Tz<%>svhA!NXZv11iakX)=d?uTqxE2viP#JU2z
z56ZjQT4O6qu*Lev%mBC3rda>kjzf|SDy-pF!Kg@?&w2IvKg<5SSi_f{@n_lBV<({O
zv3%JNgLlt<<%}%RDj0^nE=xHHINld?lM?QUZYMqp{;T0u#dml|$d|FeiTdQvwlg;Q
zHD0#NdMsP==kAO2$W{A4*EjLk&z%i!|Bv1$vfZX5G5wJH%!n^+CHCJQcsYW<jwuq%
zP)^Dny>yUZ?=iNmq+flXB6?$@oduu0;0V<U4ju=1Q95i at Rc)Vzxmgg;@*w}hjEec5
z%yuGEV&3e<`bqeE5o27|1%B2+VG7kPOhy?g at Ixn&y;7Y-IJEe-$ojJ_+G3wXTTD=n
zi2W7spP&eO+%9O#J;D1Uzk%Fc5gY=U8{EjQ_iMHK<fAR-wwipNEN177i2>KoM+eLc
z?;NN6VtRvLQr1ECI~bM-`OKiah<(2kw!A?i3-a&wn(`v%o`+zR@&jV`_4yTY8$-rb
z!Em2nF at M68iy9-he*m5N4rJT2RdHP(S82NPn3wC_@;f0Lu4wJ#G(>-f?%gaR{Fy|5
zyIQN57mb_~#Xd!_p^0x!H^1664)gX3_*IV}{)Xt(d+Mg>^hD0u@(EjACEL(eCEBnu
znB)ui+A`Q7!1r$KN643mx}*umqF$rX53eMGKLdRdDL+F&=1_kvKUXDN-(MwKzlIv2
zXvXnX94{ls*z4-6BG>;`wT$kjMr`OP)4LtKh1^}aC*aRVJT12<-i^&buBO;ld%t&U
zNB<n6^JCsCV-T+u;IZ;oU479rZavu_SRRb|jv8PQ&&;$azaT!NEt}L?$d~Z{v;QKk
zRa!ExqrMqtN#ymW;J+5L7}rhEk%sz`=tm!K5vKEF6*`q`tU{;K6P?O=iZ#Wi!FKVQ
zqEs*;(F(o)%h?NfIsf3l_cJrj)z7rw|LW&Hw5O8q=N_Lv*L|d~`LQuZ(bG5;eIA;K
zKEGRmK9545k3lT0oBA$fY51ej=lfwl`TgJe`~v#?)lffPPxumh at CAVdaiXx<^Ro1G
z+;;>xznjDkqm=41{?X3s68v7So$u3(`T!@v_b-`q;OwBpL~n4dZU46nt_5c1 at 5NQ3
zjmMA!elp`ve at gVXeEr#Ktb0!Ta>!As`=h)+Db^%P#d}G9naf(^iQhuk*hBq{k8*B;
z%ecF>nOpqglgZH@&4p4a6_xFhnW0w<I>p2%t&$4o86V{ykGi=)7U5VV4R<yM1-)(_
z)g*x3?J`Sn&r__O>bHvQOgN<t9SfUxf$Nz|A3t;LpU?b9&dpfF0 at Kz|PdW*<0BcJB
zv`dAl9+A&|6Fb0)A*bIY&txirn;U3M4_u_r_;|n#@kca;{A;XO|NpMbh)I9e<-wnI
zkpjP=etV>O_v^n46l`;pCT+=-yJ?9*xmqbbZo881tU96VZ3qu?7-m&CVxTt*(|t@#
z#e4TS>8pnQv1jdfM7o|I{-W{~R=?MQb7A`zQ-k{#$59=kF3%sPtA-_6-3t`g-N&a{
z1Fd at DzV7`QC4<5ww^Xf^3K-XtBP7^c*>99*z=#}M)w5k5uNx?BuI>3c=97SDayME|
z-CJfpxg^uPB~RmCp!^{)A;-s3*S4Kb1|HjEC#$=edtzmEpscl}tmbqpCpqKfUhuNY
zzIsa&_ at voX>leMruv_E^(wOU`5~4QM<?Gt at FR1!g?KPk3_lwpT#(!ZKS>-njew$43
z(^vY at RZ*LQvgA*Y-*NlRCs)eM=Za)en+yTQ!5r3n^7;z5gSn+k`t)kp05{W;+}-dU
z)KZ67yWGL_T&d$0EwaC{8F^?Y&^@~nbe;#->YP;*x;%HK>O7eW`COt$|G)gJu)Q4Q
zZ7&(_TgHUv_yBKEF{ylA!JLaxH&q3!lgTgY;c?H1?SpQ3WzOfw;iuI>N20ILZm?Cq
zW9r}}rp~*->cF4p&Pq-r4{gg}zc*!S5N&W86oLUmJhchOgGK(9)@wUy*to_;(5KH?
z+cKyvMQmPupv<jaxM%#{oLQ!Q*Chu#91`+vJ{TqOP!(Qx-_rI(m#2#($$g*xt*<8G
zIYOo=`WrF_RJKt)2g^6?`{p0(_f;LHdrdgr^VtXcm~E|1;9rn4nIV&8e(ou>mkF`V
zy6a4uyRA at L*;)3D?o`<x-F4qR+Ac1EenbPSQnp9Cs}OkLhBr%``FdO{XTEJiz8@|}
z<;fxE&!1&1^JvC-&lfgOPDW$uY;e8%C{|)R%E3lv$k#a)X~dUpGO`l)7Gut&^%zt4
z+jioA*R{cj1OI+4i6!-Kos9Sr?SmpqaktHq-Nn&a at rzn7GI1f1vRS0wmDhd035nnm
zRHKTL at LYUz3e+h<<(04Je|zD#Cw`-TxK=M62Y)?Vg?v+-*4HT$y1#;c>cIOptE9S)
zvOVtO3L$IZ-J6+j@%vj3OPdJgX=zUmbBDiHf4rj1^o9xC2nSRJv|nrsRe}5%5hE>H
zuh{Vz6aLX3VJ&zH*fs0j<)-7TB&N0 at j&{bjcr-V}>jsOYmch2|A*W=|x?RJVxepy@
zES-+nxg{YdWmAEjF2V6q=s%ko!Yy-0_FBk$Rg$ha9N)&ZN&K}7LXOFv!L`S5?Lu5@
zWgY>KGKgz#;+iM<Yc$Gb1n*Xyh-+9}Qv%%=yk8u0_i$;rcQejwalVs(&P8BeNEr|D
ztR$3k0p+~Gmy?fsmc<xwUW4=J*%`FMU8*hi`4o9UR<12z3aG8|)S4czqgc1aMFq@^
znjYAxB4bk(S+X<*CtHH&q{kT9Wso)W%sxEl0jq)DD#rOm^ugGSm>CW5+chZRCyM*K
z4LM1XBia3+er at IO*wIBj><sO0p9|{!!&+uTVxwm;;QMe-^=%$$#rmp*&GAXXrOI6K
z{|fwN>&G1nQps%r>vL~X$c=bLl4y%PU(;jI=q at rz$n!BL<VW~uerNpxyz+*xwgzS8
z8G^(y#)dc#XG1*vTK at 9km_Ig3B7Z<)?p9k&CzKM?2{t3sUgSW%?7VMq80Pm;cNyPq
zM`82nXJ-Jjv|T;jCn at TqkrsOM8EK+zPHK(Apb1&twubJNHR9Rn)Thko*}#!8W8+uG
zsKE>8>HPuK3yf$!bb)Bd+E%vQy|-!v-6_9HYuWG(7EW5S!B=l?=}+_6Uo>m0)mLvZ
zH|=n<{g9yY0OqHhabO+s`<ufse#4`p2^F=B)Y96t*KJFY%5vJb8vAcDa(iq>{))ww
zg9PJG@*8^}SLer)SbXH`a&b3}yd9fr?#%PUe_~huxd*dM)?4uB5Z<(Rel>R%`ZZW_
z-0~na#?io5IAcFU41I45hg=+<zJI9m34S!)zo9J|xs0{1OszE~MwM2 at x#gz^G;~BB
zZtcvUGSz5Wdd0IUZWK}mH~ija050x at sRq-Mn5wEck2UGz8g6*ywRXNUxV4kZX!t!b
zt+jLQ5*(AfE}GY6;NH6kyxHgM1h<2Ra1T?e(p0 at hqI}vg{&QRERMn-_DdvhIKV`z4
z38vaLSte7l<hk{R at e^#R&x-e?PH~+t&U(MbS8qDBCd+M0^vCpP2f_XIO~!`G-SN7v
zoqqHK><#3*w~wWJa^{&Tds9u{EKfCk6q)Mr?Ec(MPQ#RE`V0{PeZIHMANXfqH8FD4
z!kt3;QO>-;ry2wk9StvxaTIP)jrDzA_1TKoRX^+urw8zVe~x?LYYkM8qaoVgk at LRk
zqt&VBPUa<D?PRipwi{j?=kR@`n&0q(m!rtvV;sKw4O61~3<(~6bclI(NVe)<g<am7
zCFvf?hAGGK{Ih)x)PnxS8PUzYw>;tv0bhMn*krDV$~IT8%2vH+NT5C{R7Jd_Uu%Ay
zUF+5oA8xv&P4%d`tLgHbx%Z6<>~$5)mL*43nrNrW|H=k#r3d1xq6UJJ>EDtw-FwnA
z=U?C1Nt?!1=8(LUt;qj(q%c!l%Vf5;Gi$ZIYbu{O!q)hHY7p)0*;_ at M3fJXy0Tbov
zyQX!nZ at GMUg-CaLw^nz$aNUw_azD8j>*Q~Ojrpfyfk_htM;oxNXoCxZM~d$qfZo2z
z5O;q-xdD5n#N27f#J3ddg3R36lxgl6lc}uF?KSs=Wh(!Q+^c4TblL#suS38g7hX!P
z4YGz=D7)Iih0<K?_yTZWApUql!Gfwt-9<JdWPP#J)S=FJA;ADn!0fB^r~TS4&*c*)
z7sUrmUK_O=dcX)@>o8<dW(+al=V7adTj^H>!IlkS$(9efrN|>TPh2-l%GSlEiED?Y
z##|@9JedOZ3x_RS8PiLJ7ugL0cc*7AWfjK8^pcqBd_8|p_0T=-)QF*bgt*5)rdN0%
z#?~MyaW*88{L3UCuX?JF<ZLzkL7u*M;Ts5yIt?B+#1rUFF*Py0!&}y9RAWj%XT}42
zso~3p{y^#jJt7X at GRhb`M_jwSqV*EvgFM5 at CC*#YE>D#2EMg~L(=Yy*4&D;e8&A=n
z&PmdSz(?<TK6Klm=STZU3pr8A*$S?_umEyHBy0+YNV@=!JPmbtINZ8MJ)#M97*UeO
z<f9&H)Pp=<PM(kN1bipq8@}UV$;g$sl+-6?C95%YJ0ul7WqOm1?Dg66Ecc!NL_4gE
zdFU=heZ<<=Q6G+PkN>I9OrO-kK~YKJfQN;z6N@@6^=VN9H%JW<JeYxCb;kHMGoKKD
zo*84Os7Ej(X3&M9k3P+gju{LckM<}+d!QZo_K=nQ*&g65N1x6v3?0w5V*gQ7;WXnl
zlCrKuu3c`K$v%Vu@$sot|2Pc!M`GazRB16bX2f7`B0iOM$b%H);GcmUR{!l8lxB7j
zgX?22plmI!!Sfp)zvDjjY!aK#)RHkn&!9%EEg0GIuIB#`_U3U-o!S4mxKv^!*9C<n
zwbq$T?LsSYLuxIeXhelT3`8S~)`W=5m=G?h8`##?&Zxw;Do$;s;NEC81Po*AsMVqr
zX<P_Vsf{QKF4cr21Z4ZYpBu1t`TV|r<aKZE^4w=V&spB*9F*%JvVX|XY&VYes9zqL
zUy*a^bD-V*Do(TWBIC at +HDGqF1y5>NwlM(v561HY at 7i&BUeJF_%QvtM$Mto~=J;*D
zm!NNY^Bd$ITI!oqz_bmDoC}})v1{l)HVOJ*;(5r5Eo5FZ^Bm(CIh)i0#~JcgGIw!(
zKbc>VGrF#4lDgqPe4qQrM_h>vw(5m(ie=ERqg-5Dk81<4H%s(aH7nsa@~*x?v)WQ^
zOtMrr#%bQg-g(We(DyRZ|8^Bj3oye6{wvWS?Tn{upc8B0kMf`TsVw%_@}K+}`7c?S
z3;WG<I%};vL?^$6ypsz=v%=gn62~>ol$wsKzBe8`QVQ&Cj_JqU|ACFCo^9<VlT=}T
zd4BplV~n3o*c8Gc at wNB=QmOh%-$y1f6PYetPQ}9pY at 2gp)Q*+9zD=(k5ViPZKe?O8
zdrZF5yS}mnk^h(M$?jX3e&bElZ>q0;kUN>SuF9m{rUPjWVVN_k$7Ri|ntGFwBc=bU
z|G(-_=gWhA^11xBeULS8T=LWQRFn1yl9 at QdA0oe`r5Ajw85#Ev-y$~CJMcFq- at M(M
z<C$5tbDuNHdeSwU$k|q}H|qav$7;d1#1_{uMu6DG2IQ0-mrCU0t~%Ug`|6O?C1*3T
zt;C2vM(zp3u-cR2CiotLnc?NZ-#tcAgBWUuLEC?tL17R0C$TN!xOlt)*DiGDH!{pF
zA^N9&Ospj7=3eS7 at Ub6py+KLTQ0{QxmZmCGgoBBFF0s|H=1`kKu+9m)%FPo3OEq*#
zY(WmO#huw;jJ2+?&L(<fu8H at t#j9B&uJ`HjTib-GxLz!RjkL_a&&v#EF-QPx7=v$I
zOY|;l&hpj3Lj=aUz!Qh at UxGbnp1qE<H@%9RTu|HVU$IW;y<f%qejDJaj%VHonvR%Q
zmys`gq^(EB48<w_LP at h#N_*MTQC_Q5=6!`ZC;y-Qjqvh&z!o<<x5aSb5b}zxZ&yu$
zt?gyZ*=5Qq^uxLpgAj*tm34)8r7|A%Ah{^>_DcWNDHK1o at 72QQpAJ7z5<e;j_P&<N
zmBBG%pl at fdk?*JDlvU6%0>7$g67UgYTt~yMN9=&|lZLa0kWUW!&O&9CU^x?8=sfE2
zBkFMhHo96N;@}YdBkzp-2PRJANyITaA+KT1jn);H&G=u!=q;@(#LDLNCb&uEhXS!x
z|0J0y&xLQ?GMqi!Ss+vQKpgLO{72py@=XfyP?TAMc>8)zUiy&WLN>4|K0kUUc5MdH
zc at tTS(0<^CrIzy=DRmy0Tv at 3hZ5LZ=y!ZKw)B%Dq{ylb6vOlE1l8yCe;X_{-aFHn!
zxk;@Shgy4u!Mc`EVUv=dwObN92X$UE7+4V4(~ZFWX=W+<05|IIf9okGSjOOn9i%+U
z3?G6H=+Bxo+etpO+%3St>WKg4rKsHHuy3>mB%wbr at 12Mv*FCqPTfqLM7)$K^ymw7?
zXEy*_hkO7e#(Tieup=CUjUBmyuov>W%L_=tGo-8<tQE!Ya};B3^$C?(A74j2IoKc`
zpIu4pOu&yGSF%YikkZ1>-ArE}Rt^`&BbIb#nO~g at _LgX|3wpWxB-c^nEHQ8?n;M9n
z8dz`W)RiZJs~zOCeP++?t_ShAg{|}wzS(O+7O{CwZwNrVN7yd^qAy3CMXVk!8JBq~
z^a1QN(0gJXk@#N9tnM-q!~0$2MZz9}pECU_^xieV4|Z}>)30-9rQ3sNrq=|E8Jnt~
zV5+tL=9KgwxXIS~4mo(LX|Egs-LMPhA|}{2b}?dtIRz5t+RuW-HCgCWEAV+FZ!(j^
z8GAX&r+ihDyvCPLIW#+q%rC-c^h!|P;5Ug}z*{fmAFwN&A7kFZuFM~&=qNR)%<$(N
z%WtxJtK+Pl6$8*`F(j|*rbp13Gd5K2Fp}p5 at p+DeF726I`}cWzDe&2;)x<uXL$BvI
zARhQW*e%_#$J_)q>7nk&f*}1w!NBBpl-pUIbj^+2K5RmdxH at 1B9+Ky%i>z!ayP&Ur
zB4Sa!##%%j<&Q&o?<!9U7Q at b(qT9mHhJ9@&=*5d{k6 at VSd*=O7R1os0eL?)78e<48
zTO8o5-#nzis}}=*G!^^X(gKx!R))d8$GL;Lfp`X;noCp)zLCt1kzdl>KwK#&{g|(d
zC??n}%?rxy{5<kq#a`o5*hPoSD-20{e&wrS<6orwik~;#rAj>Qa?Xu`oej3hJrP=7
z5$M+n&=hTq-M0?q4-84>R)(fT>uPyLPw7gnLAsap<4vq at _y-W*0^kE+qes8jh9kcs
z=npsYVt;>L5!Uiix-Q at -+Zk|FTLnz`u!)k1=DjpxDQD at w0}mGldwU at KPJqQ>a!J+)
zz-|;d6yump#&NMBJcf)B;wB;|F~(&Jzk&D_z@{w0e(=9^H)JFRv!8%x*jkJii|E30
z+gUGTeh_TVROExy$xFf`b?bd~Ts$URrpx6O5iGw2d4Vx5u$lX4ChF_8c3!6${Dw<-
z7+9C2;INS1lU=G8PTzK>VBCbdAD;Hr3H)dI=ssz)MiN2uisbM`Ha}tdZL_ZEw|)b5
z7-d(?AhdTncoTLzYo1~t!IuylFW)L32fKUy1nA1g-S^cevYPZE@*v!`dTVlki(2dF
z0zGaf?K+vLP73KQu4W}EZ-5qDA+&)1k{n~g_<GQ=fy3 at v=0B86=9c;$W}J^l;JRWU
zbZx5;2T)2&v{H7gRvMro>nfszP5AX}^q+Lo-Jm#Cqc8*g9IL~4 at 3~-*ntw7R?IrvC
zcGf)7hSPVPXO+8E^V6%bhxB&s(UtSF(f^l~S6CX|FKCM^G!FVCf+tbSYxru!oeWV(
zCZ#+}!+qG3klv)u=}oo!H}{RKX6U(Bpiy2Ck{myC at g0B6uO8{u<bH;sp!V~Rrq`qV
z*3dX^Gp{#%>!ivL;r}56zKv<OAPMsv_xO#_4J83TB7 at yI1M30)B!Y!x{fU1-EU&(>
zeRD at 7N%n(Qz$XIqw*=3_7ya{(L{}_JwmhCJiSVG at Akf7g$V;_`_ at P8zR^DJ~m4ndt
zB)*vAZ3b_#*dR!r(TQ<EeUu+!{rtr2V@}Mi=`-q~bL;lOfqxAfxsa46ee06`RZxn0
ztx=xLFwpt at 28^MOCik-hC0I93=)kiPA8!wxi<}a`9$~JKJuA?>zeQ?3w^Ax~68*I2
zn{MnOe3COyTb(v-HS9NG$bstOj{_eBtbp?&e11SnG)r}w at F`@B&7B5mv6J6!^<I_f
z+UR1~zY7%|tXv%Tp-viQ7RDO(M6&PW`b+T5Nh-BWgWl1#zouRjAKU2jagaNB{S+UB
z^!AM(Gw%s*AXAxzHPIXE>+zL%- at Wii<zoI<%=!i91atF{+-;ZCjRFrxvB?^E-hS3~
zNb#K at 6M4E31B%e^Ym=>=S7QjRo_vdrBYXvHOg9OZi(LcU;CSBf3^xn0U@;b;A#5Aw
zwgi2YNcQ!BEYctFue_d}H3oV;&P&<^IxeD^>>UNN+`f?{wgx3G=x$@FA-z9ug0-`3
z*+j(6gYQig)fgJ@!_f%lC=L>znxF(S*D;5t5I-2`POJpmf$z^g+~~U}y2Y<h_KH_=
z8wg$pG%SPUBK&+4`tcCW?9~OT%@k;|g*{8z3-ghT1!9>LKLL%dA~rli1L$PXm4AXB
z$1vZjCEpTES0-TI2OFaHVD6cpbdMRnQHxlzh&e}Wgrm+P9%=L2$?R6l-CnSZf<FT7
zX##C)(q8OgwQq2&$J`hbaiUiO at iAGt1h)J-_<?Ck4XgQ)LxDl40}X~QamZPQzwQa_
zHuU7m8v!nDQx7Znh<(6P&EDPY?9Ipu+!vFP!wPnJU_<sWI1gfvl<t0Vc#r-%Hx4wi
zukNftT4*y!kNv<}MfO|Fq2sC8yU9LCd~I~w_}?KXY?AUc|DObNMD~&e+gWp`-!(`n
zH*2!|Nl38HinW7WE1P>VeE#hI{=iP{A$E2`yNRtG^YuH-rx(%hz-*%a|6|HNBLH3#
zW4kXT*lu&$6n)rIvS0bi!dk7w{&3Cy4&GaqdllpE7apg3!k(<n`YU`{_dJJPw3)Mo
z*!c0CTa3SuKj%4M9pqxz7`pfIh5mx|=yxmDvXut at P3!9NBYd-mmH4mua2k~&U_ubT
zIPx;^35;GG{9_8vtBH;r=aNyy at Uug%a`>%f=8h}~-26InUxtCtSUMpt;#lN%V3<N9
zj!jN1^MCH2=-WeV+mI-gGrcbVu48MjCc!trT_%mngzw^F(D|Z?^X%swUzwX$A~(Rw
zB%;&*pg-}O6J#obfGdJepxkX)wdJuUvDj;jix>;NxlMKo{9e>6O|UiGh0Um1BQ at JJ
zNkd^b84(XTn`2p3_W@!oL_iK3ADM(TaVTOn=F at 6sKiV3xnx756PWS9S!>rkpJa<>z
zMgg^c`Ep6o at _$N-um-(n;xUJk_E-pw<{x0jiUZ#>$bS(fEH1`Vy6Y6MG0-pSPJ{$?
z`>Czl6R*Ozi{V#`n3od~@607*SC<y9`vw at KYX0-eL1bO4Rsr*X^;BwD^oXyvb{Y|*
zH9Qf%dqEZTj$*dC^y`$(pdr$LEaFS9KTBv<!N^=0d?y`{F+j_K&u0 at nHFXi~)?&{b
zF2p{dA$oVjawIV>Im3Xp_tz!_WWF2${+r;%z9W1%@X{{@WvPk~TdVf-P0KF^Yd{+|
zFAoY%DeL#u&!T3`CvPoB3>i7U9rV5zTS4ZoVl+ESE7Kr`I-wz?9l$>_d at QF`ev at G4
z1e2ekt-x~xzCh at W+zq@Mg|_1zA8mc6jh$$t48Df404ZI7IM=<Q+dP9~FVKXCz?)fR
z&y#hYPxkyBK}wQKe!~Mp)H*ZkP3z;^1k-mm{RiY2_|gz{!p#aDRjdr=o}3rt^AYm-
z-Vyq!`wCdz=YR)$jD0p1bXV5Br-BZ?uBj;V at AYqj6(VvWGtPd$;TV>QSj)JV at ZJ*N
zo~kS3tpfcip7!emLeHJLUsy4}?I%Ol|F)kH8vN{@!kRpt;D^5#%qPBj+-oRvJ@(uN
z!5sLXld at 8EZqkov>lS_%nL}lMoxoYLvat6QTlFqE@=JWyJ<r~2K+N$_l0&)kUGNVw
z{c-!0wXcQ_L!7yPVY~`!zY`$;GKpo>IfEI$5b`{c<vJ&Wp1&h*AXq>%@&X}m%cGN#
z`p18bo%PLo5;q(HRNmyPp;y^T at VVkf_+!FX>3u(70q-+dz-UPk&Krbtfa{w at aH*g{
z at C63Vw=p@>r24~*p5i*_Lm}wy&o5JNry@`2IO~z?arCVKH*_#_Wp at Qf(gWeswh8sA
ze->Lyk0bIna*1PpcBF`g3-)yHX^NfD%X{sqm=EI#Zy;*yrjbv1EbPzd??S?3b?=LY
zkX$!?jO5 at X*jw-ms|la498?mO8-%uD4NeyGdrWSgz~EUlB7usO?enALO~7%X{0eV^
zs1<o2z0P<sVn8x at ajPJauIIft{SSNava$ci9^A?7!SU=?#A0kG{`xr91-QX;?X%k4
zaaQ}UVw~^grjMCI<n&iMfg5{8mK^pni4p0z_)2?pu}@a^;lHw0GyEChJ-TGrl1zt(
z$hDA>J9^p}odHvJE6Tp|F3LWRc=CH*iNM}-kzjjd$>15~ue2MIPF6E`^>pPR_!U=S
z?gCGOxMEYtJxg8pJ+??$#amZi59~iM>8O7d(RFmim4wd>bj!yGzUtEmLQfBowXDXz
ze1#ij^|sHjdfVQ$dY{O2>xpjWvv-u+S!R51u5OJX>1*<A7M{I~HU7RK=^*(}v-;Wh
zIp+g=)U(&o7TE6z{tI?|4zL9;zII4AhHqp)VNIaDzz`bw<4o&+c?o*xnLdnD?&o$}
zZV_?@6n2*Ta8SSl4leWi=qC|!8k0H#Q>1~P5(j$am)Kb$fd$4-Bc`@9Se$>@>NAqy
zFE&<U6u@=>e}gS3;~KD3BjE$KS%~=S at LlWZ!pi|Wb;O4He$E=D9K?Dp7PL|qgZ~;;
z2IjsE>-sj^$(l{-d2bSboGzblq;IpLnEx^OpNIdqSV_$PVfcRp|7-F7r=*|qa+TW|
zJlE^`d%wf*0nfGT!>1TN;JKQwhtFkvBfcOQK2kU6u0JIC%k6_6elaP9(FFsCPjXul
zT`=-dkg*y=d?$eI+6w&K8{%IXf5fSzU(i3<73VI|><p4uk^emVQ|P72`3>-;NMaZ9
z5`28SU^;_8E9XBCK8L|5f>#o$b?|v1{ZPrC$H);f+4G3|nU{VU>z&CL1wYmg4({$-
z^Lszm552!8SiQrfimwgQkLrU`RIZ>os++8s^m~{WI?RviV9ce9lXdkB-IhVFoyO2?
zhBpd&qGRyYgU5hAOk(toec00ptw4E6Uz!+RE-JRmzbLn=vhP<P!e8c`Awd76AZpXv
zg3L`P3KWjM1%Zwr at D}-k6nniMenk4u?dNj$*v+}cSx1?*pn`rhfp!TNVvVF?E==l$
zI2`G>F;8~U^0XW1!_UIw3V at 9iyV(-Cl^rj)K at J2Sf#^BDc)(7OKW6r+Ons;7Y)m83
z@!Xpxe;$4IggH+oeeA>j at rU|&^QUVaHbKG at BX_UGJ>P1-oU9BY@(6U?kC3CdonQbp
zgW;ot_xsBjT^eG15?%;+L+F+vk8Ee=|7fyC-}B-4k}<x|`v1s*=OaF;h9wr%*<nap
z2h2A1c_rP%$eQ3SpYrBW%$_|7^!7#A^O}HNweiO>^Dy5IUm*DVwAwQs?y8&@G|?!9
zuT&iNl`7?n7z at Nrj=6@|u#a6a;AN5D6YC=;GEQe?{J0F+X9V!?{A^W(i-kBcJ^m5l
zLfKy8XGY59KQD44rcWE>*Dv`-U30hZ5^E-D3&#8hqPNg5FwEWr>^Pob=BLRG8qvvM
z6+;Ps2Yz}ip1o*oaxSGCvF7r~oQRCGe&dv5?LC6;<yK%iiNDbN{{E$goM8gsHa}a1
z>+9hQx3Bwpw$)d+2p7TZ^4}K!h;I(+@*P87fQP%*BHl>QWURMIDzdNn53#db1ZyyN
zLPaxyu^l7$6|^|ewC9(X;CrUP_c8YxU$EO6f6*a^%vvk-nDv;4Hq6I!xy6`^dq{oO
z=07_hAzP4G_ at D3_<i8qbZ)+p;<I_x{r}T}7V7~S7O}X+*5-;Idyr at r>13kY;_8sb2
zC_{@Lp6PmT3z?Jk;;z1nCv`@A>12H~skbndS!WD?$nPbu#T>pZ_=avoU63zt2Y5{E
zSwj$q;Te4D)9+Qm*EGY_kk$Ztk_6m(0`f3I7l65*6_7$=b>wJeNy=5wEts(<Rq$7$
zj=zxnh2S4z74P!iJyY)#<9sHL8XRMgvsz7Z@>)+i=2M at +ZuU>eK<i=ux&t2$U_8O6
zsI at uMWU${aAN2_GMWr)=YQ?c4J{H$j$X&A8IOh0rroacsT=`0H%*m1Ze4<Z8ya{{b
zGEOz4SC6ySyBEmMF+NsfYrNhh#%JtQ0P*9H>WN<!hp!gd{+id4><2CV!6(D(F0-<s
zhkA)^CN>zRzm$Z&K%YYF6I;Q9?yZ6R6BEE&6>~|&hc8hSi8TSa>aF|@F8J){#*&;V
z>i2p7fRE?DmCr|S1T8*Ecm};olNc5R`H|7F6Ff1UBL5ru(t=ppbxhfX(0TRMwnOI=
z6h4{gUH;d|ij;jPAad3I>5Y(2Er^i<-7|^nfp|`|9J;yOpNa0`?3!-*y1)Mjn(?hb
zZg=qm=m>9z3?%epcmsHt2F+69YZ11XmLeA$bmo2+={m$B-Oqc3yy1z;>!jTI72Wy{
zv;jHd--GWMe4bIp(sP&(Yw5X&S0d7`Mc?~{s!7cC%|k)c{tchoR?{=`oO9&nA>(C)
z$09r&yPD{YAeZ#@#m4|$1^)+3`U%7ml#wzqu71!DZw*LAjQZm2tniskA2?aF&g?gG
z<gG-nG$C0;croJR(-~cXJkSS7IZWIfKGE-x`um at jm!n^5n0{INOuuA3?U(z%^-B*0
zDKB#9ANu7oUFTOV*^l{nhYqAY{FS7x|F}bRmd;Y2UW>ffE5X-4&_y!e9#nyOVuydx
zj~G+CxZRn#$)@TN%j6#-d^xToJ}7*7qBhlrMiKif^qYI&%V?mi$RA_nz3a0vp`UY@
z9Nyp!h0#R!!p^HzAgAN(O*hd`&jBaZsd_%vg<PV21gYHkF{vcS>gGPY=h$|7G{K*<
zF9A2M3s6#FpuLBYe-d$OKW?Pwg2wi at uXp7Ve*kH!kcY7;79&^ZW{&WMXKa?SIFG{G
z368x5- at kNKzu3Dt=HNeYiHt9xLo<iOYbf)d^_JYtn;;fIwwYy?A})?}9g%OUu- at 7#
z=Y?*5)=!D}>e14Qde1cFOgiPaxH+#DAU2K!GENVS=NWkiJ5lap!^eXy>UvhHolf}V
zkl at XAkX;@(#j$HhTrI5cb%>vRI$lL&f8}uGPx}FSTfZ@@rk~^Kr(egM@!8$ha!-fD
zXVw#`ocY&u0D7G&<%c95PIoMyS3hOqE8XEALT)?wu=w;l@^<=N)N3`$L(XF4MY_em
zhcRdJ$gpjQX%ns4ikw{uVk?h at xWAeGY#QV at y>pIg<quFifE}+2G^ELy#Ptf}kPB#^
zyj|58bC;h7-fRup{v6Q<6MHap!4h^WzYKP`IZ6{x3IBK@$E-1DXQ{I!->S#rdJ6L`
zsU|_>z}i)6GAIZ3&3t^<+eqYeHu;|2#WAGU)0wLBJ0hx;lm+})ouinswS?53+uQ>_
ztDWIVOb)5<obl9$SUdH<j~@m861wWhPZi&>W95&-7a7YR&3 at ZMWcnTnBz~Nd!|2GN
zEA;79eY$SG5&Y6}=rU(v{ghD-w4eCLBAyxiT%pqzq;Nk8ou(WM+6vvbV()MBR_;W+
zQYGvo<ejnrqt=G_Fxv^u$G8)Evfp($<tIWf#vCTPUhcdxG9t at TLk+!iA%}|E1&~*p
z?uz at 5FOYK(H?TuE4>pLXKieP#^Sks2`{aM;O#tuxA>t>?!54j=?g~yJ at q(c90Zn;5
z1vy(1L8qWQ2?*p=)0r5HV}IHI>7 at TXr2kKm{#Sey6bHP)OUmb&<C|n3NOyww-bH8b
ztkcY8+V~M@$?N=+VIj`RlxN1ru)oX!t)htBC$9%qAPsvM0*7M#%@p at y_POz}aed47
z3MRwX_XotJWqicN6rCVPoN(qj>gjX;mG`MdtO2yc+q4GzE at O*|y-jR|u&*Jmi{nv&
zDmNeT3m-w3 at IV+xw}NM=qvJ6~i@<*_Byxr0SE5UDyalW&$*DDi-Oks=+EH&CKP^lq
z(9s^`fHd*+#CAsJHnC~QpQuL1){?nRzCp&gM4?B_R^5M?y>$`h_?+%Jj(w7h^;Y;h
z!q at J%btH0j&uzhCB0KCn&6@!|$J4%Jc%HkJGWgjfi5m&OFNn8xIBACGzfZ>QjRoNO
zGsO4)^vrzbnKrz$MabwImdp~Q(oWR76LLbo-_1ePOFe|t3ptJMQ(;)oP2mz|USHD8
zkyntl-tbO88>!oG>)kXreFybRcN~Dq^q`5BRS);G*I1h9d0gP&^i4Ty@|&FV^P3ut
z)&^GLZ~WUEL*%WfGh$6X{6q-bYN;U({6EGc3B2mT?mp|H3$!8(Yb6NyhUmF_#U1GD
zdsrKN3ziZZpLrE?HZdUkXt-elVwmhq|DwM_brdq+`v-TkY~_oP`)sc-c2Rql`S1q<
zul`>lon8_r&F><azhNHG at Ar^zdXZp?J<kzBc)<wOkFqmfKj^GaWXh|bd6vY>d;egR
zKi%!83)_3WAj-!-lD>&1acM>%|1(D(EMg<CNbX84`U`n#kfWw!nD at _X3%Lc*x1O17
zTQ~h8<-p!_2{=^54`c93do`1w0}nDSjvWD+OY)3N{6`uZNDal>wRMl7P{GWpYnhoO
zhAQaxT=XeZKJnpZ=KVvglU<0BxkfM_-;8E6 at c@`PgIEpV9T881{pp`%@nqV8dGvca
zww3Vo;u?~RzLEH%A}-vWjHf(hC&uj|ZxuTa-zvnnJ_()5zEn9Ycot-=Eur%X?@nxj
zfBqKoG2>g<>;KrcRitg(YyPrrQIO5hE`0L=zK3-JUq<+=`Q!ng>_9WVRFE-76FWU(
z_3fscu;(`aAMN_(*>*MPp0=x*w8{6KtQUU&9jy-Z;fYV~fDh>CSlG=ZV<3}z==n^n
z3!`W$v*rSOS-bbu-|ck=39WrVXssXU%?D(@65Y+i-9)yY#)kdsdDslWr|<{(<X6oQ
z#39KbvSOJ(pRs4hwz6UnKO{==9k8c}*P+-PKAUz6vN6`H(e}4!voJcs6q!W)1C?J2
z;S0?-`egJBgYP}?D$vXQd0YhZBRV4oKu0Abu||lz{)hSS=^tsG_!61x57gip)>4k&
zcm{?pF!4xoqY=jfbKQS{yc6^R-zD<&Uwr$I^L}vnc{1-cM&wckhPiwGBew_Hn?b|S
zhi_oMNVgGv-$&qenl)2 at -=DCvpO}W&lnfnB)-y8g_UyH85|amhA0A*{9I*eI7`a^n
zxf$|#-XrQ5e1kW at r|>4QVD*9&G7jV#=Tg_T6O8_7uI`afZxGQAe6N}JhUhU{Ccl9;
zUd39=X9tS!M-D=49iL3!N at V(OT|&3MK_CL3 at +a9=-W-_{VT3--4gHCSjTn=E;HyFd
zUI1+j$vDUGRe{zGt?B8{b5pDvTBfGIz+G<L;3e~GqWp|Ou%jsGkgCxj_|JFfqfZQi
zymJP@)nACNg6yr0Z$M5vEN%>q1NP(^Y%sH^4m*7Ag;SApWZrZ}E{8u2c=+6AqVMaq
zMc$5c21~RyQr?5;$obbu{0ik4)0fJ>2Y)rv?+W<y0*u81BC9dDuSbG4<oqdZ2EFao
zM=-nlnj!?edaHAw{=-ShVP4SV50HasDxt at M<S;^?pZ+H?0|<S7N`H6#aXvz48ld<(
zCjqf<Bv at Z%<ePFg*%y6l3O0?I*y|TSe<jU at etPp!27i>}<K=#n$Hfo2coCOyD)^Nj
z!MliX{2BRz=bNslJ&Hl!&~{*9F8vMzIqP>A$j6L)(Hru`bBMdit3W)7#1 at 8cMx0d0
zJw(^S&|AU>^9K-louRiUu^0C7(WZg>V1qM5UVTp0k9#sS8#$NfD6Y|eu5azr`cCVr
z at 4T-1CKFu%Xfb?#iS8eI_h)dLTAe2oGEjFNdsb9Cr3sz9RnQUaL!ac3I)Y9Q&CbGF
zv}%f#(b%`cGH!%s&A5ubF7)*^c*Ey3$-aGvmt5xmkN04U+8g{zI2}xlkHj3?hd4jL
z*15>MEYh80k5SIztLclZtAytQZL*^6+jaRTdRs>D^9Zg(*Fc^T6d*@JKcZ{QC2RaB
z{Kws_ at wyUzHte90;4!3|9|_}hpM%#}j5WEN6-s0=vd6N2<~`TnpFL7Ji}eEYTqCes
zw^)62U*XwoevfOwx-)u-1q{{%X+VIPdyU}X at SQJ+Oh>Swhoh(_UXdb1BSFrWS-_v}
zrH;}WiZoUxu>-DcBG at IqTK5ZCOOAD77i$f8HxAm<L$QD*2S40UzQ4m at -<vH}8~NWt
z&mkf6u7I at V0Q1fxMIT`h)4pQ_<3KQX1taxh)qLea{!9J+8D90DVX&tXeO=sjAMVZ<
zr<LD>!TVJ?&)d&B8~XcyCG*vPLNb+se1;-mE&8%!Ks(k#9ykjO%LyOuPBWNbZIol_
zcgY;IoTsJ0u}o!jyTB<zkI3-B<QrG&H3`62xD^8l&wD41BEAM4`~e$Xnz`C>(1DB#
z7|k&=u`(}ji7>R~{!DLO9)Y>=rAmQ(ov8#rr*9lX?3VH9p8*`3P}Xa_;9C+m7`o1{
zsa=zk5Fd8{$v3#PjM(2blOuBY*@$1dNx_2u&lTR+{cPsCb^e+Y_9 at xYWp?h08kfev
z#C$z74e_0v@#1rkovs0UJ<BNF?FnDoYiQablE)5m^VI)KZayt_&Lc9EsJUCGg19{=
zfLU%w8yLPpfPCA8e-J2pRtr9v3>}28Jn*FhiA*olAht%-rh2T)K8D#F8=lc`bkgvD
zh3>=5#yo*<d;FOB-Fgnf_f?#8BKJ!##J2+<c8bw=NU8CNolnZ*gwC_(HO5=>JQA(0
z)Q~`OCcRCsD)V3PcM>~9+c_;07+x`QhG)i-m|E4Lz{m27fd`|R_&?RPqD{8$7(kGV
zs)<YkdRYx!B;n(3;vE}eGm&q9#ePnahP;|P(FgaH!OF8;=MBnW*jmmj5f@%ea@^L2
zPS<)7UvwvlO<N${bf2$+K4XF%wp;v<QZMDJNZrJ>U9osU<2Ka_<?QYJpOtnWAI|v~
zY(~f@=feOKzkbBudheh#H at R~DfRkP4tvEkQ;;~!gmj?6BR at j_dch<WW;g_+qzA+NN
zIPlYmdw3^PA6y&tK`wNbuRw=kgHMn5wv at 8c(w$!TB#%dKyXw*cO(<W87(Y>EJ*j-<
zr|?VNk82ZrG0zx1(HDrt3j8wa9;~l-j^`c>{YGC0x%Au6LP9qyz3r)5op7qwi?Kn>
zxJ|WVq9C`=8fKU{m&otP$sHKwK;CUL>SIG*-d10{f*j<T-85O4f;=;Yn`R&0lj{wR
z!?{8IT7Xsjgz3+ejfkNDoorxCBl7W??;xHw`mc()mr2HHqt}_)Wj8O-9RB~eo9o?;
zGa0<~y^w*-9I-L)&jQZ()UXFa3A<CH1rDuL-bg1=7YRNW7^{mRL1li87fJrx!B>g?
zqj3tmnz?2}c~9}%y1K6MJK-BYJQt1of53FRWVt)(v3wUWzuw&Qkd^*st5?fm|FkiC
zb%W2ok9TSOva~W`5^^ik$gLdD<hrkB at NdXvh#a`%)U at PS2tQxt*aSI0tpCGO=>-$w
zY9r1f6^7W&JDIsP&yITVzy0$(WOQ1H;kQdDl$G^l9R(fvuc_|mp=2(T+y`slDm}R7
zeCfgT4E$0{3v|ay58hH*<Qd#bQDHHe#{tqTlII6=FoO%6s#!ChqJ4e9-cTtkEDjlD
zboM_^%7r{1=xZyTW^(^Ll*9*-7!mW57f^+KGo|8A67Q%owXm4*P5nz at XO~LwJ?$Kn
zzg_L7#@nZCc?(#JNtuBp4nJp{XjZ=__1hC0_P(h1A6!iQJt#-W5RMLUuuFuq!5<(e
zH1wi+)>OS$J&*X8*y}Y*%KW|<=uZm}|Dzy^vXmCyD$laX5#tmzG86mrIK9)k5J%R=
zh0bK;>ImrX at 7NkJguJWG#k*SS7dm*?Sf^z0sgR-2^UTk8W39L}kvLAqaSD!+kjW3;
zx&z;7a=Ze40y%!)1ABvWO6)1)WcDf5FvJ&{GR&UZhYQ at B{_&zDycbhY`{=Xf$Yru6
zB6wxrrU6pb4W~r^y--VJeD!8L_iI7C{vp4`-l$2a5jhQ#10+_*<)M}{P7$?qtzKeY
zlK at O{NPeV7njhzsYKIypQ+39(@Zl8cYiobdHwnIEHwZq~nuj0q#eSp{6xWT?Q60QT
zcCYq0w<#!*b8Iq+L!7KS13&on#<Lt3iNSwh9puAgr9n7Qc});cb?}yo&B#r147^as
zm=zV?{-RfUo^V_4)++UPW$!@WG5wWOweaufO~UzP<$Rpi3zBa%X;Qde*p+Qun&?E{
z&J>8t`t>;d_e#vQ&g2zk{Q|jvFE2f~WJmH+dxIu2qOo8#)AlCkM9L8v-)sCz_-s-)
zp%at6oykrdG8uVME~?J5TS^OmOnp8H^B%U>kRiaEAIw|@Or8z7gz6m at Drj$S%C$F;
zLOdbKfs)Kam739#gCT)>x7xz34VOhCHxKd#B#Iw0vAzZ&*4LDYHkv&mXIduPlzL+#
z at eO@H^_R_c>hTlJseLhSJrD~l^TiC<YLE*8^K-1ys&2~8^1r at 0&pEF`WvRN-+c8AH
z0sEZHDYq<|CP`~NT=;5Mrd8!azSd)zRr*G43F=vpIT?AvFN7^W{SW7|)8m})SgPn`
zjZ#&%e3COVU=ZgcRU?T{J$P5zgOc9*&rAb%UNMf(8-XyFeVys5wj+BTN!&P`tKf at 2
zS>>X0AXjHoZKa0sqgk at xGWevqLfDui3%Q5~XDP0Ulb8caIN5?Pv_k{NVlT`>9>MKY
zpn5=A&w#}o9dh}Cp6Epm6Y4T2vyQi&?ohYMJ4>q6{@4R$nxu-6&PC8~o2 at pF1UQ<d
z;7 at xjKEqwRJcz5k)HAm^?aJU)Dk~|6rL}t<AIG|KNc^BwNpZ*!NvX3ccfd)Tp1B{w
zXIpEdatHWwo<pCr8UD}UAvhWIS;5N1+qm+ at -v`fK?%<|$y^Civ42W-yBRft0z*kqc
z)mZqNlUxgyEpu?8uOa2p0~BxguvHpT?;nsGel+|g>z%4#YWG0B*Emw#X&m{y%cywU
zWgPi8*WLk?f7jfws5Yz5BOX&wz<AO>{plW7om36~osc0LWzK2X0}3+Z)b0p($gs_W
zHA$O4&?M&&{}7w&lD at C!6aBi70Tr^UDoa(g)RKnWsFL?27~3S0V~X}-9-R|Npfh(@
z)VEi`?|YcaJ$P}Nd+;2UJJTa~oov!qX1cSRLV|R&y4q(hh{}B}`4{ZvQTlZ!tMxbV
zOf%wIj%Hoz8rx+R=Vm^(6we}Kdko)-LHVKTF(E;S30KI~v;M(uH@&03VjRfsFe*o_
zL*BAn%`om89FkMapdEsDJkGzH>N@^~c*7$hANp*nhxSTyU7(-4_>0m#;88!te%G^K
zw!N+~S?tmz(C2{Bgl#0(%vVixLN+8k`X1!>F*80eJmkv_Dn~2@$v)&zU~@ht{YGC_
zXF}FBTfMIAiT^Wb)whrb5ILf9mjRFMgx|E2rNQ_Ql>Z8U=VI0h(&st{WPa?wx-);(
zAMpJy=6`~A#G~A!(4|k`cm+PW7da_IVw9&c+=~VfIY0xQv!oc9zMgEUHVixy_I%`h
z!hECy?e&h2*+I#_?A+k|JAAU1mi6?{WuGT)_5UBKa~7vW`hm{3r}a7AUqq=HyLK{c
z1PN4F<vjmafxW#cgq^-5TI3X at l=<zf6$J!XBO75Co1 at 9lov=$dBB4aLzho9Lf%D}a
z)^Odom8?-q%~82tJ~y#F0zQoD_hOwM=oz7d?G(g=-x&h=DGBiyhLm}49bnsyQ9&(6
z>Bc+AVdK5E8^3+jB^H<POtni%E;Kq}Z4-+JJN{qQ33-lpMlf}9qE5)MTh?#Wm;$G|
zPV8jGS2Q at Knr49v&#=mRCgq#Hjt5WTkSdSAoD$iAC<A{Bm5}<t4xS`$By|K2)`_`z
ztW^5N>+~ALv5;H5p6ST%BK=|lej^b#y=PK0Q at 4Fg-4YQmMEda|(BnKca<}&HLyal@
z`ny8p6soIa at oxxqkdNXt<-#O=5qt`pK;K$9f0v)~#8HjZ60yrUkZKa-;28;?iNiCA
z at +-LK;CwoR+;a<}+3yO(6FYp*>b-(UJe%Nq)|nu0!Ly#Odx*7*dos0fyh#sCrDfZ_
zx$1RhDeA%I-$2|1%zecY^K0s6%vpcvI<E5$acsO=wXpIv{tf;R<+;*>Kb{cEP50y7
zkk64{xi;DKWX+GT&7_v+d8G1oyCh&>&`g!n7-nz at WaW7+Qp#zWsj0WDx)5(!qB+N|
z%32H`n;#9*h$s9-qIOcY8SxZ3pP4>Z5+9p>3aT>N|7B{C#z^WBsx0%~KA`-8jQi~)
ziYcUCoKMNKm2P9I7`c5f#38;brFuuypLfV~KWn3=MHp4!ENV2}S7uwh+PKQCCsIw#
z%IxTK1cy}ALtcaL=}wHb)bUq~_=5Q;cL(IcuW`(OwtNL8M4qprw(fG|t^6yd>&k3=
zbIOHOU at mKm+AU4qI0m1H^0D`VC*_rw at 9;C&w{{@*sB5KyQfDfra4ws6D6^Hv_=>WA
zC7r-rjfd?E`AeVaJ1_dKwX5$O#<;;QK|JE3K$k~i&QnpwYegN#a%uss^_S|N at YAi{
z$a%_B;VGo-a&L!Jt*)HNzXAHQ3;nTM7*pvEPZif<ZN4lNp<VvUN~ZrP(w6dOKPE;h
z>61#gFje#fK1IGhU#c-qI3cg*9pau=A)XA%N)qItojqbZOd?TRsD$(%`lLf{>*{MG
zuQrzSM>5kN%@(isqTE_4{j!SRj_>OJ_`R+^ZSLyRi@)pB`Aiut=+leceLC60JA{7C
zq{7gzA9u{Rug at m^D%P#yTv1Fx{*J!Bxq$w8f_b(?V`2ZS+d=Xg^xs3Sq0g4lI at V~p
ziRrVs=(A+>*{9`Rzdh<uGN%QLbXzdrhLHIdI-|^cbFXi%-TYs9L&to at 6n<Of)@`X8
zV;JytMXdybePNz4)6!{7*yN%Hn;Mka@><9bBY**C;Wz>JryHYiU)tYQxsrdwJZoJu
zzfDs>%_sd0n(1rH2Fwv(TW07k{;4f at nYL80uj-%=?`q3kv}G}^Mckg31p}D%(~9-e
z!K|P8>%6}8BR_>YB>b*DH+*A%v%0+A&+v!#)HCgwX3Vsc_Gr7>a|>nshm7CNx6tNV
zOMO9-#hY=F%zaXZGL`CyoQ3m2FWg$ML3-pmu#=aAQmFA<<l=Qq7FXxQL6<rcm at uj3
z5qRBW+&IkjB>63a)Q)_{)E&XR=v(}6%h+p0l5d>STxGbN4f?pNNsv<Ea!Mh0k{nCl
zu)U=RdU+5h-|zE!B4-^9r+Sy)6wVc2^GK;P(bXHhn%-eqykEj}<bR1y?1g`gSF?az
zANDKSW4a at y_Va$Rd25NBU!z!iP`c5JYwz-Ysq~g4`>y3lEnU}?6 at sKN5AL6dPQbn1
zVa#<R+x_&p#$=u<ZWXRV*$cvGd~biWRk1d at iu^B!-U0DH at gBLpDAv-{IDouQzL(!s
zwhims_dS!eqSIFgo7dQNjlWpl8J&px3&NUkZ+|p%U8}RmH3sC_br$V{{sX=W9%;bM
zz0!}pi<11@@RfW-{`1ngSIt^+yE4K0I5K79UB}PZH(%8>-$}^L3HcHKuRi_1n&?XS
z+>Lpzso*g-2hUBrTLXV2u?z8W!Z=run-gv2rJJ6_3#|2#k=)b5=~ypOiY3?wT1rG>
zZwYPj^7Xn#a?Tq;9mDvn#k%T at l#^#RwUM#<@@<S;;cY#0-bbsuq|kc at j#qh7tB&+_
zN>^OvCXO(ZdLWLx_tr*HhdJtljsod(-j$NFp7Z%yop}w~IZgi#_E`5F9PLvy`Ju<j
z_?OqWCnH{yv at c|af0!UM*B1RmnL~PQ^g89hlsz%sUueRy!}R0ALxYbE)}8L{bZEWi
zW%=F=+xSj#(y*7(YN9X4Z>*`0kye(`sl#r(DdV0L%qc&Id?IBlKQ_bn2e#vV>Dz+m
zTkGv|YyD4%ugNLIf9RoWlGx)7vx}Vq8GAJBgJTVuJKGIwc07rYC@*^;N5jXS$SER$
zh&>KDvhA)&)MxkdCg6zkSUJ|m3|4~D*-nb|N5T};B|h8Kyl}U?#;|6?Exu->O|$Iu
zWv9k;9q)L82Pu!o&*9!g{L>Q5sdm+T at h!wnwm(?Ge5+l>@9!VFK>21opZgVJT-SS6
z`@Y4Ega71q$Ul(fit@#7;Gus6J$gf!q?pfl$UMlW3LCrHVDEY1E&Dqc-mnk4 at EYzf
zH4Z(}$^S3j`AM>eC#|rx2!T1<r9K52Ku2^`Sl^BOL)K1rI(bI?6Hg{S<?DBR_fW5<
z!3k+s5wE!C3_lUD$QRy%4w2}ufY-e62E9$(RvA7Dn3Bq^1u2%idyG%1`q%$w9Y+6F
zhmaqcIrs$M at cR&cN~H&XvXXCDBp3e1=+MS;@+!+mErwj#!GA;CiClNlswqmjAdd4t
zK_bU&c)06y2p97twbHvSRosYv7>K>{eaM|1mC*yfMZWav at MJ1Tkg9x+|4`gxniRJ9
z0;c>CbcynE{M<_Kuc;yj#-eSn)Z|^10vnt3UcEEU?*`)e{uefe<Mz=PMnnvgpD@(z
zbQvD*xO=ip9nRmY6bpAv1dUt|pT_ru4FB;y=7-8Ex)q0Du1N&ze_;f at g*`;D(kgP{
zT1!22E>lQ7Ad?6udf@{=1*y{-bL8nR$RG!OWzZw(67Wg^)Z3a9&`l>Rw;81Wh79r;
z-?4Wb3_~vGI`&Y^)uEct%2 at VHaXsNV+;Xe;let!J0b-{Xy)Sa6-L`FYR^i*StlQz=
za4Qgd7;%Sd+?qsSm*UFUtL0f1jMIxF(y;G;U{QUNq&&8FA?0rzH`K*f1WzwLXfcJ$
zC=%!Xm{VHe<w(_`#*weNkVkw^N#=&#n$bQvQnM9v5`E6!Th`B*bK1jcQ*MS$gv}qL
z90vdGWcal%2JZ=(1bK8NY**=l=Ux)Xbd$o5pq at r?3up-|Ln3Ogj2 at ++<KdqxnGQWh
z8T;M)*8Ij*pf_I!^guq)M*gpstxl4=cPm?_F)F8&NOy##w{NU=PC?8)8PW6G_o@}L
z9;IKO;fE(Fj6u*z at QTx&!HF|GVG_{2bKnCdXnQ=$KC6pi+CH7M9qUd(om%u(O&Le3
z2 at UDXZbJJCRhv!6<Ih3nbOSe&$<!n2uv_1Re3UNwnB2jdB<e?-VHd?X?3Ga-^sh${
zhklM at yV1r2rG<CJ at Rchl+BC1uGWx=((yt4z+Xn><G!8xJG7jD9;(sjJLnmN8_OzUx
zOJv)vpqty2vBKB_r?x2l0arxE{UhQ>+PoJr4ofmO`5S3{i)ymik at F$jY)r^=f>wE1
zV$g*|v?+toQRusW6$2v<K7EGDh4-A{Ddk>crVae2rOt`xdD-Yg5)1SDuJ=;#ULX~w
zMxML>M3NZI7yc#;oB_M<g%`p1v>T)!KBD8~wxBJl?}52lcX0P}i^}H&d5wEaOun$1
zxQ)NsGw>{pXV-kl7tBi^8;l$*jk5|a6 at 5@s?M#Vb`h4a4Wqv!f=#LLl at 21r$-#03@
zyNp8)Ag23;7t!B{4J_HC+N?MYx)c_$6*w9x6^1%Y5+;}ROng}c-?Rp~39-M at s+qkE
zW1{?*W}C>(A0jq+1p1EgL-5>N;=82>5^MPX*;ucg%H5%Q0ebb!7+1+^#QpD;U#FQO
zM=rpQxxy^HTO(JLgwHJVTlb~-A at iNt1x{+T_*Q9Q``NV#?90^Lfgh=)E1H7iZ=m0X
zW(j0|<5q7C76s+ at s|-%;S6+LLsx3Vr^Mh`(b~SY7nn<bxW7q_laJ(jgi3uU=t}k-X
z`E%MT-OdEAC%|gKUYCA at n`*pPu+ at CmBjw&SN-5-wQ!Zro&aslO5cj>MYaZ?+ag+n9
zn0GES?==5E-`VSX$InCZu9AMFQ(`@Iyzb6#`?2m0_<^Qg)`CkVGh<p{PkjPAejC<C
zPgza57kja{IRWPvA@{!{YV=FU(&CpvbdDJ7<^16r>oxM2qRN%S2aFkteeF=M>cLrQ
zKN^yDHGmdFA68jEBz5}t at dGOBm#0p5c*g46_J)DB?gDMyio7ZN(mk{>t+hbr at C!nY
zI_?~HATV#852ESu at U3$|hKG-&<hVznZ~yZ?#+|^EcCDQUit(JK%o_FDM^~Ia8KytN
zUnFj^jIMZqAHmM~{Rg_2(!zT9GL-pk-)-7 at MSgmlb5X%3B{QPy=mcFQeis<|0r9O$
zrSBncC-Nj!$~&0jOC*Pc4thJ?FLp`AePI;%n#t at Y-~@?`>tvp(fz6)0^A>a;QDk4K
zIE6AhajmEH5cs^&6{qm+p3)<zN5L!C$hnN{lLfCl#u!-rVC(j)&dIdPD=d*iBQkp?
zl;_ui{!MDj at c^@1?3W0?^1(T7oFDg-;k<W2OUd$xl1ST{rqTmb-(l_#V4gk6+~+aR
z?n8N%zVc93HFLj+d3G3czm$3QIh3{HX<0j%`-7NgPcZlUGSBWtSrt#q at +bFm+2mQr
zL2^HrMV at sS%GU`~Hdbknqqby4MMZ}JF))_iYw9p)n(Z?yDvL!qUL~)lK6 at +k|0imu
z<#A at U=BWM63X6Gl&iMj*o&PcEx-hDzCI7+D@^3o~1qVwO+e<nO>UTMf<;8wdOUd0t
z^{G2Sl#t;|GYbkz(l@#_`N2E#fY~+%?sVZhX5Tj~9#5R+o_$G0xp7%fnwq82;NE%T
z?0=O|H9M;``S5Sf%E`i*o`MeWec)W0OAGJ+8 at 9u%1 at oz9y07kA7IkEYX1>T}3JYpV
zyUVPDaz8Sr#C})ssuSaS0l!N8D)9RWzaQ}{$L~CTX4VR^3rCAUr~FsAOnFQ=3p`4)
z_yO?V&AX-gR#l?WS+Y#=qhWSL9p=n=@cFG~^pQuItA~8)G0#}%583h{HGgN5BZR$&
zUTthCSq7hp!Nh*38RX<s;K3>`*#A~x;lF3ub|3k-)p3}IlPy~vab<p6rv!VuXviMT
z7>3_V2uL7pzVH_DCo9 at 4cA-7~>|nGFHbZhwO~>{3eCPcJ5`EiWJb&W1X9A|+8SrhN
zc*LEh1ur5u&lk`EmU)~1r`3haV8=*GZ|2I_E<s#+1NShy5jwFumGg)9B6N<d8RyF)
zqK6nsd_ReNQhK1 at SaLKf>>b9ylbyVI%w8;3?H;z8;a4*=&Z)LhS=cLfW6zir5?EfI
zYp|DP8_MC=Zz*1zXsNzGo?T73lqX6LUf)4vSm;7Qmm=!Ts~rAhju}N8Je4bNOe&G;
z3r$grIzzIs5Bkb`i$>f=(9S04`20Ef%zheXUpOi(q=&tX)0?Tw#KTI&;kqm_GjmXE
zsroV*Sa=y?sz`Gk0aeH)Xi(1!s4BmPdR2EAEOjl3rt7<RRRG^tSwAdEVkPaXoHzW9
zkW66umT7fpf3`4E;TDRtUKV6y$LA!*dxg#U1$4X8%^G%8MZNP2_!UbxL^1p at WaW&-
zL=JmkXWm_kcfq at BU$Azz{nPYB-mfCh^$+mkADF({lM6p4L$C28<}Du$Jq~4&3sl_r
zKJkM!Dvv6njCF<uI`s8-uY)GBzHcdTW?U4zqLceNqi=+HS8f%eZi11J4;u+zDqmlK
zALN82#66G*UZUg3HS`g5o`{Fk1pTvrKsDL3D^3d~m{W_yZmjJKNA^4V2FF?RatZIY
zp1LGJyk%yt4Z$_ULBM}UX+g*vC&I*?WIe*i0rB0niO8j$i2ruPKWhq&XZZCu$h-l+
z at CKg$f%IeO9On99TpK8eH`W#%#ji-Q8hv$-xzD^;@jxIm)|SlBwLf$1K65P^bv{bQ
zxy;*IFGe1Lk2d1>9P*&pEb at w)O3~q4j2#$yXYh;B_IE0-^V5UN5Q7i#RDgj>ko*_(
z at O}O+ONj+M9L6IW^kjF?r=}gT7T9e0h|w2f>!ICZ-jXi0^sbajn!RbZ4>ndq=8<m3
z^VUVEdn$hO at k_x^j$a&pN%+mhFDk&wJljUk2d~<OUps!y__aVUx=MT>xx%Z%W97|$
z3BcG)fqm{mnYZOfZqr~%nw!5>?qEmB8!^}OfEje5U!bREj$dOh_d*_OjF*WU`CG9D
zlE^yn at q);E=S4emDqDsRhU_H)eQw5_<zW4Ismn3<kYn>k$P4g!TuZfw_+8oHjAT~}
zWWaA{VvbxBJHqA=*+;O7$g7&Iv7Yg(A&VqHe$HXq;-d59;88WZz;|@Az+aR~*Z<8T
z(d6S=zA&=P`{cV}9V+Q^XK);Q99=B0N4?7-FVs?R`5~{HCZFC8c`jb}DEwpit`;kn
zF!(;uF8Nj9m4JySv<-5F|8wtk at iLHK=geo1$9Lvws*FZz68KPK!RaCsDHA;SHpK~}
zV33Qm8}W#E%1Oqc=UpLz$~PeszQezuR^J&*y#wCPtQo63uBO4?lvUOzq{ep8h*QZA
z!29jMvw&~a978-%FOdnR!Y*>bPdI(XU4|b@>NRwcl3SW~sIug6(sW`AY0sp&rJ;%a
ztaz at 6P*z!T5H_ at xQp;AU6#Jd4!VG!qUf2BkY>~iHeA_p_-hh1J1-=A*#Sxj?@?FAs
zw)alFUMY|;wq)xap<W4Dxovzh_(-X~MWaP*8lsONx>oRlrG=OOE*w(kcW9HioT=jq
z<#E(UxmOzC6;9=z42z3(=g{1f at OPB5qScOqD2|siUwQmapk9e_^|iN^`UF1iwIwt0
zZlGQf8dGz}C5^33%e3EdNKMyO-g0xh)K=1hcr~1<>SnyFc=~P|d6%Jk%Y~7qA64F{
zJMg<hzoQ=;B}e((iux8QY(r%XZ|a6EM&YA-<(AsGjb)m1m1PO3vzfjR>5F%~OyBD&
z)49?KiBT89FZzv>#5ArQ!d01+b2{<A$2eJK*(-<_>y}pJt(0memqe+(#&I9GjDZ_H
zSif7*&wFU0uaEg$_GNr?(Vem6yQsrT=z9oGu?#Y7NkOgQhuFr-=;8iBy0qG^_4~W^
zN=qplFOA($dVsT%o>j(H*Wlg1LEe86*hR!S;AaxM+Hijod%`gl_ue)=S$KrH6!HR|
z301h^C(}_W`-a0G1^vrW$qB5(Z|EWNPQ24!lfnGoM+cg&E;QghgYjO`TXy6FH=k1{
zSlsQIeoe}_VJ_^k{VT(V`-g$<I^^<8e^pO`xWH*R2Rh=yuM at vk{OYlG4#%_!<#coE
zGRc48n_z2ku=7F&%Nq}m1->GYJw9<6*3ALMzOK0`spJmtPkj0jgM#D{ZNkwk*v|Gc
zbwE3VWU$*OVE!2->1e}ikSSrK#D9~>$^Q at ZqGkA<lce)xh!Hne^%%LCZ|;p+=bbPY
z{NtYKPSq?i;d5L>S6U*Gq~qLapHks6NjG-oEmgRolWyh4ka(>%^&Qgbt$U;NeJ4n`
z4a8Pd63 at Kj!27i&#Ev;<Ir4XndDxZn)XTdHKM4|xW1F~@&_KLvo)8b4S3F%0zQl!}
z2m8i0$nx>p2Fl&T#;HOK{x$}SlOj2$9*aKv>9mK$xLs(}oIaVjxeod>vr{hlFC*Vi
zw0vKMwab&OaT}GC7JOTqY7 at gt{KuH~zAJ=Bcn*bog*CnO<i6bDbcv;E<=mRPdwRfL
z9Z>U9%P*$|&RLr1lUcd1v!f9EIF)TGm2Q-qWLMhYSL0yT%_-`0R$#@saH+=cq$*da
znNv~kO2pWm)_w2qNoy?0)Oe{|F?N3)6?EdXz5}?MQ?NBQY8Ht+tnVV+1+%C&|7?-l
z&!%{&Nzu>Hq-LE%4vL>u%aQj(x^W$1EVmim|8N->9&q_zLAf5Kf|Z0EsZpEB`blsu
zrP}^0&HchYCE$c1>V4SCbGMj8SK1Kg3h_5KxiT~5zgAuw6%QP0dq^MayPUXwHo-jI
z9pl;0JlIR@*h?s5oS}*HsYO8pFH9X-X5$u-wL)y{y*#iBBL4>LlvA(24*$OcnoLu}
z!lP*W3*u(Tpo5oupl~Y=3>$>_e;uHGjzL<>2QgyoJtuU at u*s8lI>t-vXOLHQ=-wYF
zf6%=|U=kkC30Hb+3^|#>vWgAPuc`Lh*QhpDeRzZFb&E?QB5mKqA#F1%Uv>GXqTQ8P
zufXS!ehT3+W4OFh_0zYk4jngGQgMzV{hy`}gm0kDEKvKeO|;i#e{I>|Ni^Nu1AkRM
zo3d5T8a|kZIBAWkr2bg*4(POx4mkjw<x<km$Z6FxCosGLJpMa=*6gNfv+#eJj}{2m
z`o at aY!#7r}70h_HJTsmS-s`=F<|G7DJTc;Frsx-IQgtUVmcRJMa#I><5C5EQ4#sVn
zfIG1Pv}`a_4?nDrB*fT8y;f$G^<48c`6d;FK6a32mh9xQ7a7r~#TcK_953ck^E2P=
z<h^b`<4o{t+H0l!d17BZVb9tgE<>I-(3&DQnY+NdOhFEVFA?{1dw7FJYjHV!{aobh
z=QmueUg+oZ+&9o42iQ?$u5UU;?y-jBdb#|%W=>aM%z at tF=#a0J!NV?thqRG>G(0)B
z(>zz~Cbl5z9kB<QwD8^KP29*UeKm$OcS)3<1zE3+9mV}0Jpld=Df;v1pL^(w^n=P#
zh~22Wjq}9<x@%pzB}WA_%Wc4HgO^`!%rK-ur}kg3FqNIx(}tV at sbt?GIi)u&5OlA_
z3#3fbanNov3wWP?MW8t|NqmTGw-a<D!vLPsq8&o?DDV~k4E|!~O4;EiH7(x9?8lR_
zr%H31Oj1i*xV*-zNmO1IA_l)EY1mzX49661Gkpws=StYs(DTg-=~Iq89;n~fy*$RT
zkZqzz#Tyqs?p$(Ry^!F37HzW}TNGz0c^Jp-+eNeGl!@fOzK}3jqG~+6U+>S21J?O1
z_5H5<$-s{t4cJ<9Ta!55&3g~=KV|`kRwpMq!9haA_iK@|tAX`lY2HSB_7 at 4}MDK;o
zVL9ghe*yxrKNQZs1>20vqvSN1l;XBG<<p)7y{nuU91neM(y)DK2lRs6cj;r(&<>7G
zJp}Sg12Ct5)s_V-d~J!>leUy;<ATre&vo$&&6)uu7kE+Aawj+bN^hq@<r2)b=5w;C
zPrBPudLZR8a?Z1|hb=zIjrQ^5IX%pA^Q4xZgdcB_zjw(tJ at 1Y=5!i|(MU+5NPVAI!
zbCMo8)wv?#tJFV{v=Qz4>GTiI at xXZm!Y&Ux```qQRXt8sY8E{98U=$r<A)Edh3$^?
zt)DRJnQ=_1^m0?h9gLj<<EWZ1ax*bIk3AhjGsdvQH-`Doj$u67oF<F2EL!&4_{}pe
z=!Kl<e`vQH?H2vk?vTOAb?`NOU5cqttZ9rN^(Fjcmjo1JKg8S{(@Tpn%=ey{rgxTP
zT5z;D`8&wC$e)yC9_hMHk?S4Ib&Q*;hCO5=^mU?H(5E+MXBp<G>u9VoZG&W=Ig_Dx
zn1_};$h`OC8v|Ezz8^Lo_5;+TYrHxqe%vR4k&~XCdu^C|^%~fOn7yn+a+HjhUjnH!
z$$g|P4)BmY9CGpkZIeZQAqVs*h_3?1XM^Y>WYie at 6hZ9Z1eI$oky9TPd?J6O{0#Zy
zef#e@>J#!!VrSU!F=T|T1W%aO0zJ8#Jy-7GzW_YKY`nJ>xzU;TwOK^YEG-Cp6?V*?
zONygg5AWIhA at 4$3<I<!`w`ZhQ$GJM>9AtfBQ#DtH9S^WKR@{bNpaT9dSJj!IPbS!T
zGN4Zuh at F<k3eR3C)gL|+L^tR;D5YE~sbVPPwyVN8MlPC;^B;sVoCoTfoib`Ko^y2_
z8wF9ug(Zog14k4?;R{<x&$_qOIRv_+xZvrQ?<*Qr#IJq`^fX=g;gtzWIjIvp3(rW1
z99H4 at gAOBt=rF*y4S=pAD3e}xgS!Nn*P)`vnq<h33n$u;C;121*;d%6SXJoP8t_}l
zfd)D%BV}Trn6um_m;v99rQ&<jGP(Z^6&GAGoZVdS)DAl~I7 at Zgo>Adc4qIVeTcUDX
z at Gi=_h%y|?1msAHM}NcaQZh%O=3kPJ8y^c9OrUT>mbc+qH~7OI=&NeP+UO+zNnau6
zS|hQ02_n%)Kg;j*NHD%vB4fLGX$p5<m_CQR!z*DopsmidJGeI|csgkxXaLa at MQBD7
zy8^~*Tlr(i5MFfx;vq;m;2)p<KkfSueL4J)2}Zlfh#%y`qNA{xCB at o>z$$r0kg)}y
zh<QTpm&k04uQ<LvUXWE&wK6TH4Rt^pC{iC{!yE(|7`gs__v{$KTrpyUk!uP!{e?1~
zv=O{@7<4oPVM{s|nj<~~zN;Mbe1H%-FqAU@<vyJ|=!<%Ru4etpv>DLF_~uvF_Xgme
zO%VC}xrS?IL2B1G6BTa!*YW#ty}S}ddKaA>PwmE at Wg@zC)05Z=kt;x|(}MQ}zY at 9_
z>j8ER$!@~W4osx;$a*3=oW9Qy{U2mXgZdMdveLUZ33{_q$aYgM<iW;&4t5PK>Yhh<
z at 1n8X9r!<{>%X&TtR%hr-mfD-%f at P2p8o&av;R$X7h8czN&RLn<OZB8KJGeiyVweu
zLPoA*Jp36N0Zav+X<?q1`_7r?$$8tw7Up at J<N5x~^GC?_v)_>G$B~Z at GSOL_r#j5I
z?#>M)_7l+mZ%oax6<Qteh06$SAb1f^AjjfSa4OAn)O|S;jd0P~VH@&>>YMVgwg!h%
zV~pd*{2CUec-<JLe{t=$^hv>q?6-}|;jk4bzrmcGO>~IRaS`2<KWCGvc>!dP%6Ttz
zqHd7su+OjZBY2T(L{6!kPp+GuEI|G$%ghV;&`VrhOK>c!CFvxuJGoBE={pIsBgzmG
zobkW$I|+HLs=TvSf?U2y!x}K(JIVZaB36tsm3fE#@8?j5vB2i%BTnS5e&&@46%#mB
zH6xt{&X<~9)G&26r?sS5|JjK~szL*Khc`CX?WxmuoV=^Q>KZ|L#;0z+tVxJ*m_~+O
zF^=r(mv#s|;<3%2YT~2YTpG$XW=`eSa<ye^%lpv(BvRuBpRg!mVr$^HwcL3ro~kvT
zGd&zQw`LLeGw4vaxYbqp8Ja2fLT5rvg2o^ptyx<mbQ)lrIpA(3xMt0}%=rzYDiAqU
zHq10CiA`Gh4fey+MY{@|#Vajk!X(S~4Culgmn>%;amsHPIqbfrEHVy!O|jP8O)KfG
zeVh1~I7Yf;`3qe5RPctP{5eb;+e!=md4=KWhA8qv<H~x5T;iBb!n~%nCBf6s#^DjN
ziXEIP?gr?w*&9FX(u*`ew=tMt+6u}IKU+Q;m{itNa*M2w)!F#wV55qyCF6%U!5>o}
zAco+}ma>(hIKG18032Vn++C@*<SmV}xS_-MIz|Cg2L1Yh<Is^6R#V~0@<vv)xIghz
zV#SDBp#!@tJizV at sKPUQ#IDjpYiGEO#($d8r?ck3KQ&(0v3IP#nP7Jh7`ZL<PBAH~
z|Dw2H9ZQ1yaXN=;mb?wu0uck)S$e>evIw~pK#!WiA3}!+y&%4adh|>mBK9DjtM7cU
z_zC#?=PN}HvoL<SEjYegRz}SHKj^qg8$SDr%<ti^sg^MF&hOKCOgVm^o$NXmYIVGF
zzornZOB_Aqh&_M9qB+d-UZ)ARG>Hc55*Wcq#(v=U`E;y_rQB=bkn4*PKhFVuZ)suO
zb&QGM=W62r1X>2(0pEQ+Jg(d!?4x*|UIM)S>%YGSn at lcQ*T9A|G_EDvboR=tL at qDi
zpDTqf*Q0*V3?1=^sO62pbIQH9q_ST%lB^3 at TZl7}T5p#A;vF$hUT>70>|8V#Hkc*s
z22CafePJ2<V_^163-9eB`~vKdD at fmfUcMDj1$}{@<n_?;fxpf at 7}ZxeZvZe-PtQra
znf-fJY2m|4*!cZ97t8#%{1-OJEjT}hw%w7~nDPpL4ie5odATB&d5(A=@1)-A{F!aT
zzUU-22Gak9I|*(0tsl_l9Mu1!FlE#}qjZ1gUdT*&QEV?Yc;r6NiLUErT({u5_;=U&
ztu<Z;FfwYX=IFdWz^?(L7T?F>wI<bgUAV6O!}Zg+UW at Asf4ko5nU?#lQTi>)e~j{1
zp!}V89l;ov=;5zVhzAz1kF9<+!OGFT`Lg94_>PtEcLY9pVea%s(BORsqxyKAQ55k<
zck}z9oq?9Jfzb1<j<Xzd#!*8-AAl1eV_I;!#6V;q<X&3&!g;ea$IBb0sTHoN+3qYx
zpEi=U^N0(aIP5+a+r2n4uPk>@Ck?x8lmb5)_3w8oXT5N~GJW{#Z^oCOLfy(%OZ80}
z#CUgLK0J_WZeolROAGIm87^$PgMJPPhb`w;7IGdAwAE+xMw)1;?l$2oir2{R7%t at A
zeReEp;zKf-?XgIHw3E4;H;U~w2sSl?@3~6 at Te@JNsqRWyx%WJ<?4<{qKco|VJXG;o
z%=<MW<aB!Be4bQq#y)ZWcjY2ZhjTKXSu1jMJ)<Mf5UfdQ;SHfM<qvb_MwboX|D){9
z1EMPT|8Wr&aD<}*%A%PyMcnwLD2qg0H9=%aV3-AlEw2m{SIs#xhmjO5m#7dYbHOr~
zamjQtJq|FI*Q=#sBht7qjAn-Bf at I|!n1!9+>p5Wc`F?-DKYo8a^E~IAXP;+z?{BP^
zeRuz_^-?yl)^6p7LoWP(t+nQXHMY<6f0bD=SVsB3%T&5JU%rg1^%cZww)6Naf(+&-
z!478Y?kesngs}+Y5dOXUAU6rY7hycYqTNO=0AT{cXav9A7q~!#i3np5{7o*$7WM`O
zn=RawkOxL_IqYdH^T<jNa7^_@=%aq``c~{!o0ZRYQU$xLTqfGcdAc~S5p`!F<UV~o
z&mZ;5XGk*Niy3zhGW++`l;e({wl`1owBt^JwgaIjfAi!B!dJ<f4IaZ5_usPS2yFM_
zwe6W}o{vSDw#-jMI=t=txUMq6_#eo*vk1X&x0UlpJPu(z!e~5?K|B`07hwXPCnA0d
zVG=?Bo&ymFA&`28Aq+<tf#89?F>X+Pfajfo)-XGv`GhX$ZO9cky%@zex^wTlfKLt6
z3EyAaEU#Lse10j;YF%e*Lj!c)3GbiLp7>(=dv4Or&?{JNFWb7Kot_tvaO#3;B4E6s
z1v9aCX2*36oJ&LRVjXdeKhfU>{5rch5`3~>8WNx4z$c3&urq9FEsV+oU#3`a3Oa=M
zxZJ>Zpr6-=J47}kExv23L_0P%!DxgHcVj1PxGT>s*&296RAlmpKRdq)_z(;{?Hj4|
zA?GpEXxs+Bz6TeGRqvXH?d~tL1Xz8iD&26F;!avp8xUu{P?l>v-z&a(kj^mIDdd4K
zPLugYDO22=loRA0sKd&r!AlLIqP=$Ba&fZ)jf|gQ+|*fSd*=%;7!N44Hg=qQXQ672
zja9mLQzzY;^0x$@CcFdv$}@rBAH(0tM$Rm6p2Iu^A9XUeRd<`n?Fe>xnP=Ju>eejs
zhi=+za(3*RNqmKW02*(nn+3k=vNd;u)<L&FOS_$pQ`u??B3#ry#azJL(9<iQ8|J4y
zK_?*JEX6ZH;FWN&QO^me`#u at aeI&AB_d!dVtw6rjPH!t~(rw3m5Y!yq8BaN7mnK at +
zIFIS3xdT3cyZ7lh-Oj)>W>ND$$=spO*^F9nJZyp>3g^xt-FEhCT?gi7L-1G131%zi
z%~C2R@^<D24td}S*yZbH)oc4qbIV=IIc7VTNq3l}<^8nGV!m;l!1T at XW>IrC>`t^#
zl at YmfU90XMe9OobhtOWr5DV_*Otw?EK{1V)Bsz`urwow@{u4G1 at 3v#!HVBLi=tY#C
zJPRyAX3SU8qPvixHDJyP5YoIdR+kKsfd4zP&dYof-yz at l{W5`-A at J;*;K4rA9MU|t
zIR^ch;WY>2-ClnoTdcA*4{d&#(*J#4b?@rd=)T1-t1CyocLwGc<(>}{@cEx3^AEVO
zAoxBHhfA5{Vkx;NzXCi==1&G1&oAV>)t9Kr83tN_+ksbc_w0us%;JL{KKi9I0z_C-
z8NemB%Rzgv^mp#X_XGbg-#>Zs-Lf0rUSbRH-P%HI%bfX-pkH|pemS#uTj>Ps0~z9M
zH|YPmn`3nBreCXYHZstASq%TjkYk0dy74p83=c~l$$vkw_sp0EFVA`5`2lmH;lpK!
zB(H^$YHTq%tDVA(q+UkK%b>vzH|`4DAtjG6J~ia*A7UO~tN#)5=h-IV2ablBU-<&(
zw8DPgS>Te762-7lu8!8=oiQdC^p1S&^TcQu at Nr{eBXHrggcgIW9C+>}UxREdiO29|
z(xNp%*XumJA{*>?Q0DmVn|75rq0b=OLGnC9^4P at Dn!*of^%<h8dLR?|5??MST604G
zuO at GMU_0QuO_+NpYyfBuiQh3_gxo2eT-_0=t{Xa6Iumj?Gw#x$hsPUcI_V0;UjqMx
z4Mk?+OlL6Y at xe<Aehj`La0LBP at LQ0G&;MYy6lFEom%16>&Bl2ae{iPbgzn`w?AM`j
zbBMphC*?{0m;WI7<5rXWFJJU-3XPOmf<sw_$7We0{j|(#u3N4OEoK!Xie*=jJ{Ag5
z)Zt*onCn*9v{o+1?0h>d26Tnu?Km$ruv=rK{i~fdY1BiE<(ll=WR0!@HVh at zF1+g^
z at A4a)XV58>6KUAdz<U+)JffiI$LHx8%#%qM4Ccuj%u^41Y#>h`$usM{$(oDe<aRn^
z at cT(>-{3r+<m-N0(>Lpq$pv|MSKlbU?kmWDO(ve)zfAx040;Ci*Bb$=Os#fBrcsYb
zow5m&jby$PE>c}5bTO~fnMkjJ{;e)%IGu-il~a9~*IR^VF?TH0iS$+?-!}Ij)WZ|H
zSTUW2`F=!oBOONPBfXF6#k}5w&h^kZqWi3S`9HKA>FI!tbuX)lJ`8nE(?-ujeBB2;
z5LK=BNpgk@{)>CYjI#{z{jZn78wtR-b_5Fp{}azo<>m1pN3i}FU^rK|GT2$zINH7N
zE540)N&mnZwr~6<ko@;b$Q=eN$^ZNv-fiIDy at _|P^6&Z~e_$OQiL%lBxE7K+W*o=&
zA>{kq;V840l$o*TNj-BT at Q&r*?Ew5Xbm1iQQ#Vlun&Z%gk at YT@A7D6~Vcsx7?5!rU
zJ3mbW{MwtIYdU^K41JZHkUqfe-FvotxNx4-bkN}ky^ew?2I);S;AT3LPnX;8AuWqy
zlBLjV)YH0oO;PtiXL%obm0!=h5UU at Q87nm~{rw4^u at z6`>ZpsR3+-FzH_5x2<?nb>
z7p+a3#4-AK&xRJS+}5VPE!HN^k36?Faf^_CGe(~*L;6LeCq$}AdZXCdR3na5C&^6L
zy|M{Egr00r$oiA45q9cRdNgA2$Rdi9(h58eDdJs8mm}J#HFN-pjl(Kr)Ta$~UOD)l
zUJ!FgLDeT+iD(PbTkB?uBbFtl)03%_BsT5aB&K8dv<UMc<nx|Lx*EZeyf2F*=p+%J
z7qMwC at ClNaPRc;ub$s5vN!KE5B=6JW2vt%BpBJ%d-(X%<QjY1My at 1bqJn5&1ev<cj
zam4DR96m2%(>}L>dRHgqB5wqr_fXQUh(40{MRCNcq+C8PiDRgJc+S(9l75cp_41D>
zOUlDHJ&8?g-X-;rbiS$F701`JKdCvQht%UIj#!zL&*w#KS~Gbd at 5-c1Q@P!b&#O<m
z9??zmhKeIrBxUk>5u4Vq$m>%dz9K2hRAsN`^KM?Ik9a#Ni_HB}*FYNi_mOv|kJCxr
zBrP{pxd!UiCH)xDN$L(1N0cVX`Miito4A3zrAgV)`P|Rfy(j5rM2D9qVtG<FpO3_3
zT+5RN#&j_0Tto}0>s4`tGAWLp>?4>);uxRg>B^*dzK*Zar$VIBzZ}v(r0F8+Ze(F{
zJgqaTX1XZ%sKR-(fK%>=F7B|Xh4W at 1&K!(oQ40Z!S#g(r6rKs(WFa{RZt-$Kd#XNM
z8vkbCb?k%hsqC0XkQF)}|E41IfcO~j%BjFBW9lK(wIu!p(?joUleKL>blgUoo$XS(
zBVk_j9q284R*65t{q~_N at w@0d#)9=O;8G89-?icScjLrV^6ZJ{_Y;4>^RV^fDY at 0P
zQ5?M_c|P<lvlY$MRr<~3A0mG at zO>ZkH79aOa%#P?P>lVf$Nsq#xi~qME~VN at Y%+HH
z(V&X)X=ry8jATpR`(>FP&-3byOP-XmM=na9$Cn{7O|6YUY-- at dn%l|WNB&w<5aOz0
z&?iQln{0yDy&us&V)VV7?+Z!4)$9s7WNunMdz2@>wbm58 at T5$7^2Nwjz6^=4(wWH@
zBU*zdn9r at 89Z{5&+*(KDzofe&-h4f|{zAT3)rtQRX%*))ecGGJ$@Ru0(r?X(Uy|!1
zt;S*N61?U{%97Q5e at RSJ-Q?Ny<!rI$PO?3+$><3jf1tl97^^gyp-X+{Oh*hkp$L9H
zkS236g3N_9xnyweK8}<mm(aQzbs||GBu%57WL}BM*ym?%NzXCgSI>@;%$tLAQIGX<
zFX|1FE)iQ>G~%c?lIPSvbmE*m6en}dI~#SIlABt(0MjKRZOk6x8N8D2G{!xK%xd%-
ziE~W9(Bj}W(5PQaJR5zhX5L1ui;d)ezna(=eT)3(hs4pj$<VQ-7xDjjT5 at 0HPgM-^
zFxsz^`y+qCoIag|*jTU~a&q`j`Xg`FC>e~M<k>hfxg+u>KktZ*1(ilVPe<gBgLT-F
zJ0pLjhFV+7#8L8jrKE2gqtQ2c;)+(tL;^0$iq0hIA8?1?5l3gvTT$QtgP!h8?2ft)
zyVV-x#XD0c;Z2gU;>_zv>@Jqc{N_WyDipSB)?*$+OM;&=w=7SC448tzx}nCYS%7z;
zLyEcCBeN(@v2i0n54j3iRZ-DjW#9YXWfKPAWcZeG>2p4W%!hW_c#*OP_!3F)3ZD;r
zfXGd~qPYjUZVz-xyY%8scCSp|I^5f-UO9Xm;g!b6F(|WMrU2a7hR_~*9x!9ROo?=F
zDB#jdxd=J31$gcV{T6AtY$4KJ2;Bv{@SG6bf%JW?oy$Y~0HFnG0*Bs4oQe1jaM3Kt
zhd#u!Jg^-!9m1PPYDk9e`zNW8*GHaTL3cl|I4>l+&;x1kg{VTID)c+R#&?D4&^jgf
zYR4Zzb_?>&o(YQofEKTiJ;48?r*9*#LMRWNEBjpW^7I^mgB7ps4ldjQev{mOU+v?p
z5f_hQ)CG_y(z*!WL?$M7PQD#(n*qM`OV%M}{~7S*Tmf0U1>!NT4DoZWIpRpybaA31
zR-ECAmL at v>3PrB7k_*nGl0-+bB-r`a`++>OCDG1se0xr!;J<lDb~^5&{CTOxu^I6W
z1kK;-TP>aGNR)=wo!EQX&ucT`AJJMyq5*AP{u|&JSErfKB5AGH?*bwR273tQ?|HQ#
zzqmZ#tDBE=y!!cA<JHc`axYhC9ps|hAnR%;@|f<YHDB`o@%GR<VM%D6?0H2K<i!4=
z96h(4VIZSBs~~4aF408>zo->>>0F|NU0|32`Q76`5Sk-=ajwDq?;^auOR+}ClOulF
zD>n4J>^a4e;2%TRQrV&Fg1taH->KOwD-3-v*hf(+dz$W$g(wb#_EqiWJ&>1$u5ClM
z=Qv&l?Of<N+0$m1N*w6KJAW_VdYAVXzzZhS4Sjol!a=OfH;pT`E{9~J3;N%EGKC@&
z=fWSs-$OQEthqqOL^Wt`^6 at 1NPs97_7(aG0ZnuMhn%4ibFPOJKyb?m|U~d$5n!fwm
zD=V}PWATv{f={(Q^c>P|vNtf+eb_^ugZ=TZ8 at l2>$PA5wY-${2E8?Pi^8N6xM*j8x
zSw9&ElS6#Sox34`yar<E!;?1Xe+iX*yim9z6nhS`uW_T=VGk*e at +Id2WasxbUK28W
ze_j$MVh#i6w>jb}HNiS!BcoD-yVh|Zu}o3tIa(v{=3`HJzf1vsswmh=);ygz(B~j2
zPv`R-1->B8ASd)*Z;nq_;w-3qJYFWS1}1}sx)kzU`g)h`9%!TD51OI7_fRh`zopMn
z-C)v)?4bM%;dAkM)P(klIr at _67p@#A$8C_iJ^9YvmV5k}J|~~}XL^R*_s{eM=<E#E
z$3^^EUkh1J;4Q)?O0i{NpB5W`_;ge~<bALoM(Ix+*7 at UGEcqrJ!*a_!71q>@;atJx
ziPNI9qd3q5H&dfwGi2dS8Lf|UQJH2}>l_9AX!=}Hjm3Oy7gz;>bwii$r^biVHC3&u
zC at y$RloPfM`w`m_cO!NnZV4XKY^P^Mxq`>+7Sk!a3+UGiR@{+MzY|+pG~}sN>k-dG
zT}JSmCipbbTLe}*Suus+!SMOuk|}q;NlPX)(|W{G%yFiot|4(~5%gQyP&a&23#x=~
zL!Q5E>{;689?L*>h?W#}1xT5#Q;x=28?uHL8N^V9${tz-`yRVxYS^^;cc>M%u4?%7
zSodw6Qms?D0q>u3uhlQE at L(e3?XxY+R-tre$qHY{Z at _j{{?R(OD-(-n659x@@NOTG
zMJU`s^eKwA4f5w-W|h<0|J13-wv^lETFTo~X8mCl+gz-N)-gGk;=D5DoL;!GPcN+O
z`6p}`pAdhz9`^E~^Ze$Gfw*X_w_Q{;pes<{EF?1jD+hR|*!O*57yta$3LYzDm!CXe
zdWJk7fA`PlXZh!M{(O$%pFjQcc?SQy1JARdQ*Rnm1DmXU{P}eQcOH1)!y5?C40Mwl
zb)Lh(J0tWYMgqN7X`Pq-Q?d_$hlhb4az=0gwA!~|*YTo0ZYH at mi;TlMTs~t>E$!m7
z2gA=6SAk!sWz|#Qr^aMw#b#^A?3XP|u50ec*TQemmzvJ_DA2kaHNEXywJx2Sdd(|c
zTf&K(t*}url2sGfvT`n-Tj)`sTb{(bxGDYQJ?_6>8oVaGc*TKpZ5`!$Cd1V72>d20
zw$5{WpvHb`i?$a&irzQI?Ewr;WX_9f2;JyZBh_zI*SQ$L3V3I3NchV4)IIX<%#(LF
zPV7DZ^eH>a?>#Rx#%+00-U8l^`>Ay#@9`&jAA_EJoK2(b%5?A!N+*RH<NovHTQ9z`
zKAQqYM&V9aP+ at BMt`YrnhwrFE1uLk9fzX3m-AHIoPdzFgPv+Q|v%4MkG5!Jh?b`G)
z4K3k0A;;m574pL$4G#yrv-clzJ8*A?+(l1SkukmT0-vts(<Asa_>_#AHR&$}uP_bw
zaD}F`o%%~2j<AdFP5P8ILwNgyYQy0L8((WPx`PKbVz`UhY6grkYMH%+YO&9y9@(YT
zU3($**r!SmeXMM=<5-HX<5<pS2m3$1j(f<Hdj8Y<^t|wY-$TCCZ>KIzZJ6J7tW4WZ
zzD>{g;W3>?zVFydC#Kkr<={Q?-H)PviA<-zUv?!L`HN++hmy_so1I*yu}LGPZ<{1u
zy_kb4y77PW$HreSgf63k0ljm6O~D7+FhBVj^Vs?y*|<r>21T|>z0=_kQZ33F)zkM8
zKgmm98)*&mV?WVf8o5n1G4ukPPIa?!7{lxeuAy{l<_sD5XZfLZ;klvb@}Cd96P`Y0
z7$crCH%vq1dfY?wm)4AKcyVf`cQyD2rR>-GO9CrkL;K5e%<G79SEz`eSEFpMsHlvw
zJnlJ2e9K^;<ZDL3HfbklKHHdls+P8D1fXMWI3%vTmZcOp^8vFGzNpuKsOWIHpb7H!
zwR9v^;&lppYKqm>elFx3Bbi)BXtsb~p5g0~5MC^J25QaZ!MaR;s|)K$mC5IqX_EeI
z8*(^kI}!P{uubarxBL#TKE7=$BNYs^-9NCO+vR_2J6-d}U|nsrKedgqXqFDtRe9rY
zb#Y#o2kR0Ij^oN;UE}_$3;lZuVItqhG|gv&_0}?J)Hb?Fvtw{f#=q6u?=@<$-W*b|
zpv232aDImURWFmPfj?J%uKNc2$PU(3^;cb>y;mYYrw{XP^IASwufM>Cd1t&z2kRC7
zt=>G%AAj~SkMHB}gY|0uKk5aYon}#{1OI!+KwrQs2pp{YkH6~1JU9^UA^!x#parVT
z2-^|XA><-Fi!g=EmHFjM at Cl+C&G^;3+SEJkTqJ0mVb+%7QRI2RMknk}PA4`xsVzj_
zfQ~*Q*8YU^oujJ2=goWRcVqJE at 0T<w at _}DPv*PtN)HJ#yYd)Vhg3q_jM0n)~%A~>E
z0pzKQ8v>jy<UWxlqP7tkCpyXq{y5R?On(oycBH09z|TN~Ks{Ld-V*TdEHi5XJG=v#
zWcQaZB=iI&V7|8$q at nN6gC|7ndW52H5iw~@C(?09M-HZ=kd8u{%t>sGc;h0-^4l4I
z)DsKdku0HKIse;sPIS{rzlbqy0lz7|;9l^%1+L)3#O5 at 3QW4K#pYVEY5rj7d-JB9{
zKfurMlj0KrJ5{5tu8yAodyzHJUvEo#Q4mdFcF^xvq0a}Qi_)>620R-(nNOsv2j+Oy
z7b2GN1N{0Ed5?EXtt};^4P6EEh+WiC_|I0YW27US0Oux~zq^!(kc2wt!G;a|?GbxQ
zBfo(DtON3sM31%&G10lT5xv8j9ClO9EOKW5tC6W at Hy!`M at cx4L(TBqXc1GIB09U!R
zxZy?Uue~^FH0qWiND(9q!4JP=7aZS<u+P*1TBfUChJLf`yT^~9>`~Mc!NZp=1Quj6
zk^Tzr^=MOqAVzz;*!1Ju5k6r%{~&PWe#AM54}dns^IDMSQ-mD|yHR$JVZ-HPNWX*d
zF2WjwwFny!DiO#x7U4L80d3?W<RRqOyUdNC9m|kj0h*V1<1FZe_6Q`H&m{O2l`G-|
zkOkn=bx6ww(#4*NILsBV1CRI@$RClpY~^)UL5Cjx2(n^6&?o+)&TTZ2#s3{)Dw)p(
zCqcjVoD^6bP1Y6c5W`l4$x7rkj~@}ZW=I9_1J3L4dXn{h{8qv>oC(m$yR-^?-wRBZ
zpvg1J at N2<5wsYBH#kmuQKiLV}DT{)xo3~ua35ZjQ&F47ScH!lGUk!W-GMX<A*eW1r
zKdCSEmbavC<f!hM&ajE-&lj370!JOcwb~grTF}L)OU?mb`UdyA0- at mlv+h^^R<~u~
zUcuOo;7qX6TMQpA_ at JPR=db=VaKu0#Zr<b4=5yeAwZo1FkKY>AJZ`xJ@)R#p3vj<>
z%qRQ?6)z*w0r`jb>F<baOnB~1z-59aQjS(*kGulhb=OV1O+2?ZeD=+CD)GGgJZ)i@
zz$Q#jfV}3VSD9pjb6{NC2jfpD&TD3!n=Xpz1lJAKG#R!pc%SeJ;4f?l(KA`<5JV2>
zCI at AKFZ|E?3${7Dd=lu8=KUPjz<1(2)|W19GK$x`P7TwR_@)>38pV|)y#Z%0iQn<I
zn_Rz&^I;=z4|)E~DBg<Lyn-E&Tk`aIzF20AJA-%BSEvi+kCS{Si0l*MFHyc_58zVz
z)w2hIH$nCZe(hocLC+~`1pn?l_B3qoFQvTg;FWrkIfAcE2V`l+7<%@f;(0V32HDx3
z!aJ#4L+n#*L+qp%gz1Lu_`ZDs<P|3#AhL1`CkFeNtA0%*>v3T)(KnfRz+BCxJ^9Zt
z_LKox9<+(Jm&Ojns}uuqfn at +6VD@<1`8NBXjBg~yhc$Xd7&o934qlbpzCFb<HX3qU
z+XYwkufVsnO3-!Ui_)D$cRW1H<mv{j7~BM%V!dJok)bh&ANLD$aW9eg&k#AG2G^!s
z9*69BV-dL{AzKL?AehLtfW{M!ye%Xz=Br=q-U7Rcu6yKp6wdX%Kdos<3?_D!k_K(a
zp^T}epXWQn=Q8dv(jMBbC27PLy&H?#19JfD!WIQ|?LC9v7{D(Gzdd*p`0W!2fBjD$
zd^Fyj;@{oIyQg@*d^X-eE&%c`o&)d5zR*QzAH)8ERWJ<x3W9)pF2-8ip!k{*g_s2J
z8BH%E_S&h-WL|3aSGtbuqw)h`TZZQ+3gLe~q0ar<?qUseY&L^m?|x>Z0Q|TQ>iP68
z0kJW^`NW?8&LHw>##j849m6U$y680lAtg9(-!wtqYljP1cdrq0U3bL8yGcHWxRN2y
zL1*x-X+VAtdoYK5yB|@h;p_fh-p|LEP|wsl_n+Q{Z{mSE?n1r|@_Q<l&^@2dUUC((
zd%&ymdcm7 at LC>S*7jYiWv!7fqWRv!_Ei2+6UzP{`{L-oMv>Nrf5q*7fN5hW0UKQ4m
zIQ2E?SvNt48nU#Yhb7U|jq3L*K>sZ>sl9uN3_!=BV(S2`^A6pRJ#{Y96^F#{K__!+
zyitgBi2Fgn#j}hNNJne64Y5<_0Pk=&SyKDauZlx)BOD3p=c6*41TG>!M13SGBDgCF
z;qk?;G)tX((>2N(o+lvocGo3HLi)0PetzYNJ)eI;`U+h1v9}mF;eRLwzRIQ;{MN3c
zr`8*}e>Jq+38`?>O5lQT7$3N#b?zY(&_*K}OR>@XHa$t at M_F*EPch8at~39;F at u&&
zIYn;^iYXGn-b<cO<J9yD7xxCr$vvKOBv3t5LF3^zP^^L0u5(DV-<{Z#<@DZCe~??;
z;8KK)-KUGw9?ZJ6;~@81a|?Vne$K@`|6kp3?S=cpw2$$v3hBF<6Y+i+^2|q`SCAGW
zPrO!%Z~Kt%QE6oJK~5O5tJI3`VLL8xNzeB!Ip(gsU!b+3j?;@uLRMwviHhRY6&JXi
zCEEgI{(ppBoKjLWe>ma8W6!AE!$uWr;{Bkvoiim0c52#-65Mdck9n{{vcwL#Y%>0;
zIKP*oRO;aqeT_cb=qk!lx~j039$#<-b_v=TaZI0gwa2T%9O_t*&+w_G8Preo*n%So
zJ7GsT0_FUNkMlj|vsI;`rqdd;^M<(4Mvo?Csjkvp@*diE_|zaD=n>BHb&+yJ)*rIp
z<74K=)=Hl;A9(wVn-ALb9#S^`V4pJ9L%MKOz&pyjxv-l=<hw;hF^R=SW~vYTtx!?v
zc~ee$#ZxxA40lZp?0(IS-Nocg+^IZS^l at PRl=JCNH(#UE at a+<1^WMVWebL?#_)j*d
z4Ca^VNpCKwsNr%d)^qU|ZJQG5T+8XU6^ySz=zC4&=aE+0R>9D6pDlEb4+EP}o<8AA
zdIHoIn@@7ZT`mXq$nrhL&^fU45=ZTzoAKR3S^0HFue~NnYq&;-c(7Otow%R-A at en!
z$v}`|p8TK(v_Vyjyk`1pgRv}x&B7YpT>4Mwbf=`;p{tp8Lj<)>Rbp;y6&Fmy|JE3j
zW&WjAOhE^oI!jMPTcLq2jLCt3b(XN#+t2Xn{9k>Js~F$2bO}{W8w-xai!Ax}^afXD
z4*UxDRJ0ky?R^QN*ek~D)g6T2gFQPbL1b1+{3`C!`6gxGe)C<8)ZCbrLwD39Z}3!}
zr#q=Rt*$nG40mGBfz=E1Vy_$!Z}0?fk#oy)_f4pdrHv`?cpfN$Jub;-0=DpAA6ue#
zu<G at XlqXF#H?c=`aF5yAC8am9l8W{O5z!q>_}qJZ(Z{q=Sv|f4wlv2XKAgXejQ_)X
zbbRCEwxWu4bT0mnCD21%>~qU-&Uc;TY3gxQVdZvuUd#)y4`1(L`R6i^CTg5Yjd{3C
z_0h$KALswN68^?i_hBFHVcCDpYkv2evayT_*@$y0(xIjv=+ztA1 at htu*f8vae3yXO
zRT^~wwvBR%BN!1v27<IW0&6isAQu(kJedNz!X!gM`MNZ!qKVF_zp#IrxJ}1sty#n6
zTunj8>VM?#c)-Oc^pd-cz&oRM5<MsZH=s|Q&_LR5 at S2)bBmQwy=qywFb8o<w)Yuqj
zR<6lmYixG8R)+L~P6b;Zs_y(*IE&P%SKP5WG!bb(+%aOR+bG?r(TU4{NdRt?l{cjf
z=c_a8XFhHpj9W+?bTp(4?V{}>OQ0X*{5H^cN&ky3y#yO|KW=(4LGuee8fPEQqXi+F
zKZ at Q#-{qQL({e-pNY8uz_xlp<17S(M^}U}YO at h&s#^C3%4*rb?&o9bQI^M$$+X%nG
zmqjhNIAj~n8;wJ(ZC$3H@=u+=)|`+wr8mnMVj+8!fo{6D<XFsMVyF9U!J`>(Lq=(9
zoqMJ%+I3o_wLzBBJ+n~otFQ$2d-gp4<B2``3|cLCICVbG(5oT6L6bvz61G0S3NVSg
z^`(SP$SS#Ku_&9NZC@>k*6`)$!lsT?&`NA~08e&!74kTFUW_Q#$#CDc!4_QxY*KWa
zgBo`m80wlSs at yRJa;}G8 at i1}{ZGU(U<xC%r`>WA?n||?!9=P{waW79H=R%N&dr10o
z^UZFSk<Co?kS5qqv_XE4;FSx6Zx{Io$e^>m3O=>fQ|5ZbfqtDq<kX5BYQI8G`1)#R
z`g58twLiWyQ|1CU at 1?5~dfg;b-aEu;NgY|IU8<*r6$51gz9PQ4OWqRhRf7&)90eT0
z$XsU+9e$;u?vBd1wM=@pip}BsU3Dj(f<6Q2%PT(|hP#x=g~@8-)}A=AXVXIOM(~54
zDXt>x4Su{^_D_RM{6py%=6^J1upv~mLq>HnjAmQ&cdBk(n#yy$w9t-qKi>Q+?z*wf
z5je-%=#<p@^d-iYR%y|B*edGxt{$~AF%`7c{V~SGc?gLy*7(eU?*Rw!EotyuGQO!}
ztci)SGL(0<O7r{v>fgGL(LaMDowCN;W4le_D$uY8VI_NgOV_J)?vEEVx4|Bq%QqKR
zP#3#TSNj*fPR`4kxQ^8?e8GNj*k)b_-z|1J8 at wC6s$BRvS?5?|(pBm|_xH*T4+i&k
zS3<I2Gb3JI!Z0({v{fL2ZpKvaCV|bnX$rTf33f;0k~>)c-ETmCwkJJzxO$<*Xl%)w
z(rfbjq?cd6(6cx#(|+b1sZ00CY`(e?^j@@+93X=}M-7{Z{wRxb%+n-f-&Z%&Tn^@X
ztN9lR+Dy;;F at n<@U5}(@zs?*sl=@G?<@8+gocg=tUs`AUPi0Q}O^;(HMYO{-&gcN$
zk%BH`P-!()PiU at G$q!s2XnOZ^v^~P4`W9|6fnORL9U(iMTncOpXRAU<eI}`;!>7`G
z{9Q>ihx_Lk?h;v{no7p}EDzr<&o0{<c)>TXa1QjeriZ63u?4sQ-_($K1I&uE4L-g*
zQLnu-qyn;f%}!1|B?@=dgBkG^IMXbT+eC<A54KG<yO$Pe;165#6T(elih$QK*Dv1C
z273mb!Z?e$JwE~Vn>CLS;1^c&JEM`?PsM3r$6fOy{zpwrDd5P!sgb&IT5Ebu#a1qN
zF0rBOIZ8<I8r4aD+)nu;{VN-6`hpFA=oeRZ3+0w7`^nihq&Z at PYGkUso1racdz!qT
zz~A^!FTn06;2HwA5t&rT{*$wooOR^R-;A?V-Ld+`45WYJ&t>R;@%lJM*hXkudZnla
zHUv$FZ9%0)7hiaw8gDVSi3Ik6`!qBJXF|8p7c}j0YhA{LsRs at zyj?4%hCEAG8 at iN7
ze422M0VjO22j4q>V$bI1m`KC-^ZzisKmRd&mp-g_VGnl9ZzXs56m|L-4-51MqtmaB
z>um_08ijPERBAXeziN~wCDZW5{9mVc;r+aZMN@;4a!}7V5q(Gpq<_?0#igY5r7QfG
zEQ(uV2kbmOaIV~rZ_^{NjsXu?8CeKq%3;6ECUDVeO&#Vu8hbmMNdrGjTx1Ir>2!x}
zx;uwCsh!w0IwhsrPl;1G26vXvOQ7*X-;RxYjC-;2YH)Xg#ajaT&pn|xVfV(zUrKa|
z4IRoO<g5<e!w~+dUiIIYEW at w!x51t-Yyh|A04C1Gn!&t}8j1g7fX-m82}yOC|Ginm
zT>qhkNms=jgZ+tk*I5UhHtTm`-b-Ia9EzRBM%O#0OI2?qY?^g9&T2mDkS2Afc_;O<
zUzR)KHx;(C(H9&-sY;cw$*rVN?Y{ffYV3)r0>C5tuQLqnH|@PtMR1-Ulh7`2ccs`#
zZ-G8`&W2uNhPF*d=yJ>Jt!}W{ug_U?fAHNtfeN+^#D;J7ju-3-QyG5TyNKe3NPy#5
z2w#@)=__C-h49R#g1&=2BQAyvIgwYuxg!QX_&*e(Q|<wc|0;MbeSq;aOm>~SSX!`b
znI*b2_>$s$;*aD`3WUsgeTxG!?CnlUL+t%{iwl-PR$`{{mEC=?Z9wc~&xGA;t3&L=
zK)$LS`nOE532U2ypFCc^1-1?w>xM2JrI>wRrquwKdweGs@)?b-fDyo7CeLc<@-`_B
zk+MNo at a-eu-o*Ada3;udV?Qt#K-<)ly#hMYLvFO-i~QWlz4`f*yYp{O?l+6-&f<T4
z=1JL_98wl#!~<oTi?zq~D>t?=0qkXNtf3>k*YGfWnPMa4{#~3qRU4+^ar~%;?9}X;
zq9=0 at UCLyG4)=n!W#tPdEAZo{zIW=}f88ShZM)80GF{MdV$X{!qVp}giC?-0KfzZs
z>FacXmH2RZa2-0Dxy{ygaf~ItL at _i0_UT|ZyASrVOPc4PKPek+<iALlYAObBQ^<2?
zXjvkE-<wnCdQ>UsGUHj820OHRRsBraBi9u+^epW0IrHDp*|;&_1?LGmNuD5<ml1ys
zYnSA`Lf{H>cEz=Z#MC at IKMOsJTJXYdbE1D3YYNJp2SyC>{6{*Tq03Iz2eWnb=VLZ0
zJB!AK&eSj7*e}fuc&MLH-aa!!-o at L?{#+0(%+c-PGO}#uY;FIFv7#DAEN?e2)N-_p
z{fNtePGD(jt~t44A0xhbflG^PcNC~Rv)8*j%T$*B55DAida&c1nv1nof;uvI+n~Je
z5NIno0&9)>19R}uW;?e$<SaRNz18*Bwrb)d8UAgCV$21Ce$e=F$2~m)aW{0T9y2T8
zpDKsBh38J_rgS0hsflAXSlimX&z~Naw`cb{E;nS&U75B&xC8T*2DmGO at OB|XB!?|k
z8T?u0vmFi<{<l`cui>v59!~!ba~sIox`$xA!*s{EAj5CPuj$Tk0qh<}q3$v_oIU0!
zK%QXsjN@(gvO~$*9EwysBPI5DK|e~u^9s-uGAhh61=<t|dh-jJzI-L<fUmqTjZ<s8
zPlss3k4dWfYSrb3zbIQ*VMKh0SuZ$NX4cRZ-qvFhv#faf$V(&rMsAf^m- at q|v|M&o
z8_lIztk8|r&{O5N89!?4m;mL^>;w<!0c*QV<Jb2Z6q8(K{_>&h%1JJc(RRgV7z^&^
zxtEN&UN}TJ%QDlEZv5)5RBkto+UZy^=G)6$&ZJtCW+%#dxP)ID8}H^p&ce at q8@Ent
zqnk#$N=J|WivH>6T3Y^AcVM>B at 0xV!CxIffw<)8LE3?SkPt~N_%bJEdg$K+fcf at aX
z1<I(8h3r{6JZ<z5I#8g|H9^1SqowM=IODmy(zomZX|)$%m)o`?e9?RC0>kg7f{DGT
zCxEsHs>&P~U&hjt0cn(!X_WuW?bo)CiB)>{Hff!@JvJ}UsX7BiL!I}VY at Qfnx5@gh
z<5W{>pU$Fnj?PrJ-+zGj<J`9iKM0*Z#;WYjIJKxeFx`FI{X*EY at OLkfZC+X(aL|1m
zxpQ>TtzX##A7mcIlLVlXkGfGjX|+H6 at udGxRQ68!sIZHHg-qm<>Hv9|Gr at ARmQG8y
zGgt8cT0Ay`-)dBDkPnBvoyIr}|J#TWf`g2<!&K<uf{Kl?ERX)Tsl>xoCUav>`)d0-
z3*cMbGVo6L<qIw*$J|0c^X(b<+j4ZuCfdTKOc$#zZ!BN}m4#}zZNh^Tc+|za>1v-Q
zM#S2<iDa+))Nr6>a8`=wF?GThfc#Dxg|l#XJ1uG6Ov?~s{n0zkjp-5YQDtMO=4v(N
z(nPs6>F20^lD=S0SdcU3DRzXQsx&HS*C{vZVcJ`6lF}>Q-Hdoh$>9uD-;Z;(Eyq(R
zJA5Cwg!|6+v1!ESq(E~lcT)H0Mx`D9)2LQ|m8Y=Q?X>V+&=s=;MpeYp(}4*u)YEGJ
zaitL$Q-1jcTB<$hqc@)~Ypgm4zc%ie`+niqp|G>NfeVK{D{dI<7{+Oj3Z(^+LDx#U
zFb+En|L~p(x7s=BOO?mscJ~W}0;{^#t3>y)%~QWwwHHz+r&W)JL>(?xePaV{f6uFw
zQ?>5r1GLmTNM}GEgX&E0B+7~TzQL`wd0zcl<;iAvbeE?5pt+N2?&c)!H7ll?U7cCz
zqsZ*)&7_YBQ|KkEUwIcS85qapK7E1pOYO^3OkT(OP3dFjmv^sbn(Jsa-I-Sio6VW-
z)A!8OI`{Zc4&i5^^~?7|Uns|;g<X?sWJgd|VT;FHVIRfm3y%K5s+acphfPihAU;v!
z&DQYTMdkVT3+-jw<h_vp=<|PNay-682xacm^T!YWXTq-HN!~BPZg-SV?Q98T)dCb>
z`%QgmcmVEyPHb^4$*{O`(gmO$7dLR}S|>UCa8De^I_St(3OdMnmtQF8&lOHS%cz;&
z{AVVw$zK?{M)n49>GaT9ijS6V4ajk`fS%Yddp5Xj4D72gplf?4Y;5GxHlE{T=6`nP
zG~79*LVFVPYh^jjN?NU`8~rMtrHXd~(!5+FVKa!78F at r~L9kMOeR;>wlF=8Gx7ZD9
z`|0xn*_a2-mW^L3hqBVOy`}|P*8!>42HUvptc2=h3u9f%WRFdEBvcoxSlg>Sd#i~{
z!+()Ev&6)#b(LMFZ_l<EoxM5kQsMjVX6}mCK3n3}4BYecQ;k}izA>qdZ~HOD%^r=t
z3Sa8x<jOf3Kd<K1lGLBU6W7ohi?Q?QOvCr$iH=_x%E{QzIJnfM34tkZ?J9E=?q*fV
z-<s%h*S<K)#>Q84Dg(^T_a)|*(#*;xAN|lK%6;bpAH94M)_7RiCy-YdH`8E>^LEUd
zWq!b9x;2^RR`!|_w60ky$TDUc at 3-f<JM}r`0ZhcP>)dGXEj9I&tHy5g+#~TWKbGKb
zU0!Fo;P$q_ID3|{rCa*#ZH_Vacf^}r=X06?^O#+Z*Jf at u`3-mI#QiSAIPGp-RJqId
zBkF4D3bXy&Tr>RhG`K9_KirTQ`<Lg+?cXmR(O2egY3{6aFBg7V>`nY<B`hi{IU)Y!
zIo#{Gzo=T=v-cgM at iXr;RIl)>g0b<7;Ll1=KP$+<8RCooTS07m;4GQIZs$hh4qT43
zDAfYk$YxH~_U>b}4LbOE3>$|#F5{My8-e?<->tS(B&s2K8j4bLmW=Rd#NEy34I4-9
zI4viPBl&P|r?^|l-P)E*(&QcJI7>t|1P(#{df;t802aycZe%fM+6SDcZ=W(7GH0Fw
z7H6W%G0xoND4|u1gk~vsbIa@;E9_{}9RxmUh~eRwvH1lP`|}m(pM!nq8ggv}x5W2+
zV4hn|*f_MQ#ycVTCbyHeNdK@`pxa;U3`#ciEL(|rTHf5!zH%mb0Lwmili*#M?jyia
zyKOYq6yPZI?-hXr^EI~4)sl$$@wN2d&n58kpKu~z^RH}7KFP!M38f5VyN|Y_>@o9n
z?P(tFTA?)n7hMYfD2v+}E!nqWsCS-s<BKlH6?p2z9iGG{0_<zq9P`*W$$w#+qkE_A
zuDN}QSnFyN;<*%Qd$X%8OtT}r*nJ!$Gu!FC=FLmQ at Yj=5+1mW<hFMIN?+<KT)gAcG
zgzo&Pa=?@K*)&Q9U%pze;i=tA-h%Dm*UXz~F?_oUi9H73RKTsU25xgsLs$4I%j1T8
z!;jMzSek8lz`ynro+a^5teOK{li;OBz-v!67jKw9etcn9a|YUsb_cBp=jXHRnYO!b
zwPt*4Fr|ElZ}XuGe`CCieV-exJdNj6!7%ihAA{m1&Z|?+(>J7s%gy#8{vE;HU|0KW
z#UsGC4!}x}u&xZHB0*Ex*4-^_!hi&fc?&m(wYB{w{|)tG%_<*}dYMILJIB|-91I?+
z!*_wDbc?$aK9b9oVnHJ-t~g_!vmurA33jAxZNFp8e!7p^e&^?UciTeUZO1%nJm#yb
zdCrDef*{Rpta*&beH$wo|1D?&kK1YT%zRxIX|65$m&Qi+1isg>imGqn7geT<8>Iy;
z(M~5Z-{6}K-(a(?>W&$6MA}^~9cULgm8Yiw?L(iM-U^(f&!YV!59`Wl>3^J0VSlRT
zz at BfkKI~|_`Q?vS3)0A56*%<5kL(O&00=C}O-Qsi#HQvD+yHj@`@uKgNN_jWUj$w)
z{>!KEU;cM4a0%uh=$h8x<pX>~?3rNT8EivV>I8kt`Zi`Y;Qg`4Ki2ZND`gO`c?tb{
z9(0?1shl92w9Rw~VK0-cXF(iq0~`AlGP4=)^0?O^9(7eOK4{bDd=6Z?<OlD at DLufO
zCZuNquR1ZM59x{Nc}SlM?MFSQ&~Ny8-vrqgn#exok+lFnzMek!2#gPX?r=lb!T{EE
za=E~GIzxNIsIIUB7B<sPN_|nfsQse!(Y1 at x4A({JHLET`dzxu%ZrTvXcK-I!xUE;E
zK8yZ6dO!S`A2~p08_Vy+Hyl-{8jk)RGVa9%-R{g?59*qJ!qFg{2WJ(-aqonU|3h)!
z<4TYZ+j<gsHMbu&24q%O_u_&hMlsqIzkeEY=uxAt^f;k2zRN%+WMKf{cCq2G at -WVh
zZ-CDUO&3t6Zq+%H5phk|Inh;e#<*GPT=(a!f?cz^dbH;e<U_{g4mtFRCvjKb!TV;&
zukHoi<wMXu;TQX<Jx|)iyo5j=2LHAE*M>Rzg~kZ<CHno-Y(fR_qK!v&GQK}IbP1K{
zo7TfDKYtT^C=T<1=M6{ES1XUF#{o}or>YtPC!XZxf5bZO#2cv(Fz2UnZV=op18uRw
ze4NvHYzJq<|6l_i7pu*Hob4wk$(=C4;&P;7P4!V%NL#_n6+41&rNVzYV7LA77k66F
zL(WP;F27c>HngYVPjNB9%>_B+9qeWNRPq^l#<_0*t>7)xQxE#);uCu2YqSqv%Ed19
ziNG)q5wm*nyM21`F3>pE-aet%h+zlEbCf4^)v*rs;_di$6yJ9A;VhMrZ$9r7Ydqh=
z`iT%k8@~^zF$ytXA;XlaY1W0y_K$QLx8V8Xca#}RZV5Skg8jZ#<!KUab(~IvEUWJ8
zEbu!7v%(u>mB2;toX$Uc`QZOldE&VUHeZnMq=_!`fxY(6l&3+vSH<|;D%)z=#jT}!
zysMiJwu_sM?fZlO3tzm(n}rnYBSQ97>rq{F>PQ`>Z>XbX9(JWHV;FR|oZM?yJh&}|
zZAbTSJR1mJAoeeKNsyCQ;vR^=cudVM&d;pm;th)}XQ-e5wk}>~rwaNtVsm+Ao=JxF
zCUQ<-6HmN(%=Ftw^_q?P`Wdv?{P>30_+5DX4}XM9jK-pP<ImyoUpCX(4aPgK(2I_}
z-rmb9+Ix?uOuBab^&RViCN$K1{i?a{?b!t*OYeIyzD*t<m&TecM{><gJ*u}HwQ&{p
zFH$^D|M2$5(*s0HPX>zWuhX!jSfjRiu58+ARfRS7U-^u&*7(^xYXlU0(!A(0tsL=y
zx;*Lhn5IH*%ortCvx0)}WB3Eto6U^cz3DFFqt&Olf*JM23+VHkwD<?`6wS at 8;v-Tn
z%=oh--uzu<9zEUQcW{?M8M3a_Wv;`suR*b6onc)0F1D<~c?~#LsjJ~?r;2<lIL#`C
z{lb>K=kgs*`af|G%dELJx)$wE{CoTEmb)uAdgxP*{*z4^?}82N7OX}1rpNjauRD$Z
zy4Z;E!v2i;uYEOeCO9X6PrV;Bh*5PzFFYq`<JY;KKI&a<I(jE}hlSp<!$EJ|ai89{
z<2=22M-Ba1g at dkwJvu1`c|y=TQg-)Y?T175z9%LFG_6fH!Ha|p7&Qn_3?+1 at L0VXq
zg6Jo~XM&+)dIMw)<rj_cbrZ`llQoQANOitta!vk~$<_InCm+kdT5#-%9D%q0$`ZDq
z+`2kyiJIO*`3GkE$rfyNk76%W^wSf4YJ+_I6Wt`{Uo7I_LZLLcFvtfy8orFjK$)$4
z8R_537)cp6UGEwq`CA#BBh_P5??G<nDDjVg{czVmt+0*QJ}U79JvYm9Z<rds2%jeQ
z!0XP26T3U^12&DCmtAD1Pt;wh_OmqmjK$dke8#>C=Z~MfSx^YRwkJ<doIdDtZ#r<>
zSlG`og3gCFiQT%V_M2b3cpUF)nKA5@>d}H)^RkPlLGydeJjHgNn5Xy}ca%ez5bKm)
zH~d<dD{4YN_mlIkAu#~<T18Dl^rtXGWaa5IbMYT|kh at 25J)G8PAggL=7izB+?wHlu
zkQLAyrk=9S{LDqr=PEh0TMNCZo*D64J2wO{b0*Orxmb%(1Go=5OBY$9pHMxPpPvU9
zk24JNQY916Rx<kU2j4eh?P(=w(9<u;Z8gal+iMq%D0dw4H at Gu&o2vaSyW7<$KPKUK
zuO+FEiH${lj-kyw?P3l12>tprfn6v94J{4+H>8k>8EChL$f8w`fs7mMh1$SRgbj%r
zVykMX1aw+jcc=Q5xsdPntZqnr{Vn*$C}~Dt!^?2)PP<sEf2Hyvo{z_*)_MMR?EiP0
zkgM^mrqzQoHGWuUSHPnK9hj~qI`E*qel|!it!7*eiGiLfO`ZGgQIJW3e9W7>8P|zD
z<2;NLcK7K at Haw1(-u$IaPx$oov4oOXi!oaTc{K3p<u}2 at HJAT3I>tX9vbLPwbk0W%
zdE2qDquOLX%cR9 at jW028`5?#C&H*NEolA7!p$jZ6jy5hv-TtFo38O=rvZAIm1{a1j
zl0Esuj`f?HU#olEEc#gGt5({u&(`v`U*1%FjrrIeGmCAlema`)nCgR<N24Fw`ou>5
z{^Rq4ZUG(ScXpEdD|`iX2XhD>71|H|CY)!0*Romex2y72ea;+S5AnCF_>W$Z-_hrY
zc-xT!&%m2R7vIC4F$g{tS;<`D4zaG at DzeP{s@~;&NMI$pR!{c0IeYz5$R~GnUne at 8
zbNkK7>vuOKzb-ScSYIIo-@=y4KJ0!TbW10Dz58-#ZT|4kn*0%Sp|1vBwmS4VUyX89
z(bgA!OJ8rSWpa3XI&K2#fINz~SagyTYxM`jl}_kJ0S;gPHrAD``$yFIBi5D- at pZxR
z{9A(B{GZ)%*RNkeXtR9XsNY+{e&VyA*m|KjX0)hA77}_MIJQ$cq0V#Y_rN!0;A4tc
z7rR~A*+Hkzw9{Kf|DBz#uqGtyIG+Q7&<!KJiVaP|0F#YN=lK~oYt*aBydPwuMAvYJ
z-U2`3bn`ORu;70ME~Mr}&m`%@34rA!feVBGMc+>RY_&aX^lE4PqRQ)Z-puK`VBFn@
zcf3pHlnGMQgsWp+%-fTV%<{>#I8SRB&E#sPXtIG(Pd?tBOtt0VJYD$N#OAzfyIZ*2
zRqbVYisPhg at Tg+7n@nWzwiaLD*GSk*M{tnI at j-R7t0!_bV@$W~bF((Pnr^IC8Ko{?
zx1UTM*Y}%lpFU2$H(N_?tX`#y8+*=}sqJ#Vyoxp!tA^;}%Gc|dHRp!>-0ad*rawyF
zDqH4uv)Q_WLfJ!QD<Lbf-neq#6rEz-eO+9^{WAa6O0&G^n){7ar9-bnmU|TJ!#-0~
z=`IoUz#l|Scxr5P^y at lX&r4W~=?XXSje3Y3-|;VqK3DpIS1S^o7N&!4GOo-Ce3+Cu
zDwHwypj`&L#s%0k-%IR$kMJK2UDFCc!<H1h+MKawUrZ|K<3rioz1sy%4aq4NV8b*Z
zc!pvXIoAu%l5<pG9I%TrQU`qu1~#N at JwyKD(Ex5Ugr_rq5FVZ9al?;=@L9s(ynz0G
zEME_7e(ycWc8*uU|9T0(zuIy3zCrE~$4ltTLgJqW;~EMaF?)?JYz*G-{fnQ|keG4-
zeh448i(vbESe?rWIooMOp9H>K!u)l&d;VuWe4RnpwY0c|<i%Ou2H$Nir|!?^P9pb$
zwXX}lm4Llctbx3Ss|$Af$l7ksSUVc9=@syvTs`Xvon!52%u6NS{T3EDrI`1dmfg_Q
znjiR0Y~D4G;^&m`dzkWO8Dn at jtzO=KWWV?Nz%Qp9gUm@^dK!<9IUBN4&Xc<n_fiM^
zjKAP*(cSJnra3|Ih8{QYC&g=C1^>now2RPbFwgmeHUaevU}>D^xMNPdkzfy6g}o~g
z6$QgaWIKEf1<xqB5FS6JdPcU^#SJNP1f;?5tVHfm*W9qt;FqpW7r{0vu^*~%BWED~
z11svg-4izdN>E#oB|t-Xj&)v4Gknm at S?dp7n>Osv+r2g5Q$u!V{D##fh4o5qfM5I`
zY*h}(KXjfjS|3Vczju=;ZhBkDoUPG at iwLiAW2YDRI;5 at eV)QGH^vm$;v^PLAOWDxI
ztfISt^WUN}gPltB5C0A9j-{N{$8G4*$9;GY&t13!uP7veIDcSYZdrYckN&I+JfiNP
zU4$+HTFid@*Wy&@j;Lk~l&$1YwjFh}FGM-`Gu{}Gj(lP8QwO^=3s#c+hKq$R;LQ9y
z7&@lC0XQpT4eUkYY`rb0$!`=?GwP6HCQ4A7JLXwK{<z7tx#ON?bA3aWWqll?y00d3
za3}}bO at nM?Rk#eYhiL}8+G`@YlUp0|M^+JAv+BrH`)Y~29eMN%d47<gM;*!kUoLwZ
z{<HZyTlXE%cwPft3-!dL0cN=fm_;`75Yk<RKZvYB?tvZrUi+S`fxnfVjk3R>EaXR#
z{|i39ndFDxi_BEAhyER=CUdX5jW!<Jk_+}6P;2ee=L8z2<{9p(N6v-b1)(bd9=R<l
zf}PO*29J at 4P}kv58Q_eAfTIrJF2T1M2hc`Vz|t@^+5>LdeTVF?)g=w7BlXQ0>u1M6
zZlth5M0CO0aWBj!@5uf at 8CjSb?Z#=lrzR8_ri#$60QZqh-lc^7e6;rk+S8*w_}Tmu
zrfF at +e*HDTYiR>=xmv&tufMjMDY_O|M&Kmq)&B!}^?r)n;22TIt@#z_VLQ5`dxN1-
z?J24u^<n<M at V4Nr;mCV(t^g*&J2#x=LK%@~BHsv)TvW7B3^-`c+E^xE5rcN(25f6$
z&2Ja<27hY!b$ZJZ=fMmLdj@);?yW8kdL`3F@!xy+ at AsED1JVli1Q*I5{H>mNUv*)7
zkh`KmD8f1znP5YDDZe(dQ;z;w7w9B|bq%!jq^^<j`+Qw_e4n1wl`hOcU4n#uz8{$b
z|J^jm!Fu~2i#d9k8s}~i)xtO0j-Y~X9bA~s)_a_7y|KOEA3*^xI at xm{v^Pu{c{oub
zvf}@F4d)NhP2Gku&mnUQzTy|~1^U6EeM1)o_nAFjhaLU3K^2b}ziBQymwni^o%)Dw
z5?#f*?@^DGpAPdDY)ikq%E{!Ln at Teaeh80`wNA|z7*oU)W6oX|OHUVF4c;l}0X%Rl
zOk>!f9x3`t?LVa$@@G9PUEUqE1iW54RuieB`pn75{}lC+FkbW(6FHcN at fgUHfO_W&
zjC3w(f0`?dR{WF6U*)8IMUC)})CZpMG4O<m>}}LSvEiQPPVj$~w-S1AZjUi19gGe7
zpx~rLqF59ISw5^u6JV$*I46!Ch@;x3&JF&2wQ8KRti;25ZG_f!t$=cshJ)&>2!1!W
z`p9`s`s~cXyuDM^rrSQy at hU9|UbXZ+kE(0_6l@!Q*tc{D$_}So*Zfe{&tn<mG}qk!
z?wQA=u4{~KWYK*1D}U`-*m@>+EBS9yFLQC)eM at h<U**rKlyY0TETR2~M2j_s`%WRK
z;(gyh&mX>TT)lXPj~Q-!fU=i?KX3Sv!MoHpRstEH0op9;g>6AG at KcrHoaU9vYEC6G
zw#&5Fc%KAPIqsPaZMY*`_6&i2a1EXX?Y*OSi@<UxPJ5vyZlmYjI4$nz5a5$ItMhP9
zyIWkH8Gs|iI7{L01-K9K?LKtnBZAj`Oq25+`@3!6jN#!}mcNJa9%nJ+5CId4$#}_m
zZ+UEouY~qE?G^JJt(4$3z at a6unPKHdun&8;?6A_yrV!iMm(jkJ*}}fxyJh?t<acW*
z{mH1zagSWMQe at G;Qa*&(3^Kp?ZZ at +e@WOcb;oIw{v^B^)k0?USEe^Td){x-&r7|tp
z&c;!lvc<6b2w1wT*0S62U!r at 1`R%J4ny(@7(TA;Gg!Y?L0UKw}zCe5#+j1%BLJI6&
z48?hs$a`@AJwo^u-)E4sjge}8W%A{%cz%xLcfb}}?l!(02S1^9uXO0JisW5no^oN=
z at r3S~?~r#cDT_FPfv&=p*@m7=kR{>c_`0DvfjV3NZ>dC9V;RxIKwOA&#Y_gthY$}N
z$=Pe8$z8;#VGDH`Y=>$9pE5|(NS7e3!d$~&Ktq;SD`at;am!vB5vGRxht7QnU>{HK
z=KxdaRlh*yq#wM9nKe?a<51ir7kC8iheCM2?K2ZZ&yVoliuQHx2{@mcARlJGKP~2a
zdfUp97 at RxzrzhY}@oEiI&-)`N0M9cuKgBOn==k&u&DB5CF`9>ereD_lLDJFl3Qji2
zc6{VDca<}ED4*W#mHB6SmzU_z^v>Y#L5tlp%5#WBq4RbWZ!^cPjmBDby9 at gVh=(9{
zBBp{KRob~Dz$IXB0`y3$?TZQ_msSzMy`)uhnc6t+_ewGMRb>HpRJ+dhr9#(^@{s*-
zL+nI6BxnqDN58B at dBjId-|cr3Kn|8N>J%gQ-Y<vjQkAyyj#b-zr$syeu1o8E_kwoR
zosf-?aa67It|{I+tEtBBP%Cz*q5unv$XTmP>t*HbvO=wxlZ{oENpF^OGRT8UZz}m%
z60rQh7OmYpeXXDQ*|p<z=~}xIboSm__Kn_SWS at Yi`ZA%bHozuHpws-#!B{s-!AbVn
z%~r`0*z;Id(avU6S;ZE`4xgKfRrEIrcgTLT=Tcqfq${8e6FgP^tC9V2ug>t{UOJ1q
z;f^_^Mbr)WF=(UHQ=9lR0B}d!+`pIMaRt~6Wm}Iz&W3waaZ{LS`enZx)uoFYxp$xr
zftAD!(K|M+RGAAT7&jX-)7oyO+S=ctoWZxK at iCd^Eo_dND at vm-le}zNRXbfQ|Kk8~
zj_?$64;dQoPcye<sbB1BpGrAd#@tWMQN6*a%djT+_P8hQdDp@(U-f`rH3HMB)Tvis
zC!!}xWYM<g1HK<C?`w!nG2m|9K5dNLzEym58qR40aGbr|Eb0K=82n%OxbJQ#N;wuL
zaNpLjDCHPv<5w7Q;7g!|6WJ=@B!u_k*2?qW#3lbhd0mWjVpACdT&Eg$D#jR8K=6?S
z;{Vvi1)9r0$-P<Cb~s?h!j!-c{D)(J3ycLUe`euUzytdYjhg?#8T*!Hm(Ocw%fn}#
z-Nw$9UmW<444+P0IJ;j!V26eBHYT0KxU-HE{HEw};0nMrFItDFXDO7y3q&2QL7Q%!
zE&TTD(?NfQ3qj^@y*zn6#wTa^8DRooCehjQ`P<<KUdnKTXFGfq;~dONsV4G{)5ha$
zes--#!%VM at -gaW6=*hUi?^}p9L{}W71I_mXb8jA4b~y0FLWk}Q#!`*3SnXphU- at L6
zeGs0X(I;Fekj178Yz^5dXTXoSO2$1tL0Jcw;r&DVMur5RGkXx<JNJieKBybke9(lT
zTWLI~TYj3HX$SfHBWn<5SqT3ba=EuaD(B2|&^O9!Bhh~)uqftb;2s=L_$4XT1RpyU
zKQ+p`k at yeCKC1!Wk?fl%u at UcT2jA7Y59}%IC-5o2r(Ek-Cc%FNSO96?GAW-POXwQC
z24cHD<qY^}-;p^%{x%*i%Gn5+inZeg%RPzx at Xmkmoqw5(ug90iU*iX1c;KkL#=(9Z
zNBWq%gYPFxcxG!y5Ae>`jwbi3*DTm3*Q+9V{>52>kBEq0>~F#ZME`5U)i7Tk&zuB4
zSvG83c={B>#)Y0v<?j)_Y8>#ZcVjYi+?7=L+668eF5>%-Jj>^LH{w1TxPvDT+`;62
z)w<|q+7_CIZJ8as?4dJ0%Jk4 at QL}56-u!@;vfm?*lh&Aw+!nK=eH`7v#Z%WH!`ZEP
z3igCyH#h-wBIuwE)Wx8#lDeVWCXl|Pe?*V`AnHxo?TnWYx*xHZ3VOCA)*1X3N$W26
z8d(!y(UUCWVU?UOI7QtIQ8yQ__2r+xrI%-2MxGkLlIj-=@vWpGFy#!s`|Bs{Y{R{3
z73R6sDsS at N|3$fn)GX5rn)3b7CmCdXp;IqNnOO^6)z?6y0ZlT1V^D_p0rvKz#s|;v
zX#(8U=TK`qSVnI at 5~+3mGaWKgTLj}kM;#B_rCyc#R1S0bPPhy-)Y-G{g$0h%%*%rP
zIce0}z!x4)TM+$+vKZ^8lAM>7<o|owd&|JROU@{I3+~v%?SbKbiClZM_DWe5eEP`h
z1j9bV+4!%5lVmJpU77!VFcz{fR*3{>I+=@a%}NLKr{Plse880ND0jB=$YP2OUJg6R
zQo}cea!nU(cC>!EoMP!*#Z7b4H8VYy?fi1N;wJoBz~=OZtI%(`kS#;rN$~Z8vj{Yg
zX2NG4=of6A9&VR}Cneej`_;(FF!r%zFa3od1b-h~XimC%Gk7`Z at B+Y+H0n$ntkaHh
zN}4-pDfPW>1!zcH>xNdnQ9x*Bc4CVQG4xg|AJP&9e9$I<K8i8MRahmtL{@oY|DVrU
z1cod)8T>u`3*_u}fgWx!uUH$ckWReA#+CQ61#A2Moxk$|H)5i*RI{^|^FVsYPA7CW
z;lpR3uM!J^O9W9YQ`z2-;PskfVjyHmQ;xC);~mpxnOj;j-L4g_cefP9A8FylN1AA{
zhlLpj`JR70d-Pg7<;eAuTbNq<gQ?6QJTD23dTYK1b8W8HWs2X}x75?aa!m?cU>M-}
z at g6dEgzxN}|EIj~j*9Af*A}r*l(7vk;DAQ`nOK4t6^Sv5f=E=FXBZozQBbTPj7W^4
z0v5`Q2#6KL5+#_B362~)hz(^#R6t`vKtYXVhAEpW_t^(XG~buI*7wI<>s#yo at vMDz
zIq$poyZgJ_s9#7hXh}1=;{Lb93g3D1oh?SVuZ5dm3|)h<O~OCpb8InBGt$-ibVQKF
ze<IdeRNsT{<DLXG*P1GD$9JA at pI`LBq5<!*zc6FO&mqJ=xyRe^(qCSvnVf2sZ_mu|
zwH(i5YQ}VQxVGq6VC82i;T9jqBL(q5`NsYql*OwCC3s^Mds<N*?k_pEUXL^Qdh9_d
zqvJsrZzYMI=ZL3^>0WG8VT7V&li7U#WzZd!a(;fU9lph!ANnRS_90^oXf)e8xZ7H{
z+5SAYho*SD`dY^%?D;a2VsFTMtj9)TpMV#w`{{d{Pvz}YPd6A7P%Yote9Gws;$o4r
z at Q=g6YoG__mtPAtz&}!Ycdk*0#D});^gr4Mc|Zk1>mc-xSMlbf+w?-T$LUr(@>A5l
zaJ$0kB$r4$7mr6 at U#PS&4!~XUrAk}l0IO;FIdZ&f!Ije=G3U8L-vR^e)!9v9SAeVF
zAyHs&Hf<MqMmSUPKq)p}tRBkK+0O;-JG7n7-=?0A?`s?%e~H)P at n{RiDD8|xz-w_E
zuf-fMtf_FkLcr at 9$Ezvq4)|OHuA at vR<6MR=r1aKY=!(bkJ`X<4jS25yOn3-m!dko$
zsKXubTD%2G#Qui&mssbQ+0Uf?gIJAzvCd^C?k5zFQ=zTIT*i12`t7E$TvIjGaiNTV
z4_)G$usq!Ly_Sv_Ov|t at oK&IxO|Jb`Vo<s<^p-f5_OTJcrzWgz`<^}qZ$Nj~N9e6h
zA~-ig%mYkosXSaUmqR;tK12jPSW?)RkU_pj1Ng>m5VgtvGAEOTl9`bG1mif!V?mod
z7AU(K$6HPF(_ZLP^aA=(yp<jQRJp`>A-(efI^=jD4p;~*pn49(f0fd~I2QC{M$CfT
z+j$gnJXTBQaXezcV^tfERp1f(4<1jzV|5#kSkR6ERs*<a3p~WeE9~cF9}OFVv<x-W
z_n!yzHb;M@#256%#yb#pI}OLlwuqKNgemZ-2d^-=uiYT>Yk|3(^S@!*%<0ANBOlP-
zgcWeKmbLL(%JC|Nds!Q=o1A~3#E;`80k2TdTFTM7MR}pV+(Z45aD4~v;0nrSGk++y
zcZS<Q=soAfG;(7R<{<Wn1+4;H0K6v?k`jbH0iDLsI{w3*AjsI<9QyTs0UykJ1boPB
zicx2dicp&}&}~9ruk+&7x}2Iy$FjK*!8rTY*Q6AClo}Ol%WHXmxHKz7vKrnT*W6>y
zc0 at kP^zFcv(1WUYO{lBT(eT7}6Xgq<`r)iCohL)@uJ<%;8Ho8p<#Y+o)I+a{v7bac
zrv_;gb7|8;FW=t-?<-*r)(iXl^0!0=*Fr8jP98WdJEw(n+dW4UoQQgognDuc`DI}|
z8FF_<o=%DwE%@?+2<LcQa3*`s;_=<@uhdx14Xd#>ad5OU#Qmsr4BHJfD><4 at 11GK&
zTTa2d(M-2cH at wqnUE3Cpwk<SV6&G$|Z(YC}+J?=rx^+d(+-fw-3@(;SI_r4%MmxG$
z;Y`cE#fLJmFBNIZLV7&7^t=fP>m3yEj{f(ZmA at G0e|3skK}Njqf`g{*b2wwYs*M-!
zh2eO;<#@SsdYeV4lRt*&>6j4f$hFXoEQM}lty4+)4a~t_;tn6&FaCB7`bynuUjgn$
z3R#VIEem!%otvVKpmzdAwcZUBGJxtPyYqQ{Fo((NP$C#Ray9nmEu!y=nxq5;nL0R%
z(|0yLgU-`rh9-FaMy%;%-yGRZ at TW4&B*T7=g|YEmP8XUH at B(kHi~9r*bT+NCN}W@;
zWZ(3L<v$nI)-$}P%Wrox!hg_Dc6CrrfbJLn8i at Gu;TzB{_x4tFPlj%79rg)e45bX8
zo)si{guBT+3aJhad*&`HT}^gNlBQ_OzlxrG4DY0jn3#Pf)RgLByK2LG@$Rg*;No!N
zuQ*KM;!wTh=8QV!66k)zOftj8o#nwHolkM`Fy-Pwb;7$Hy{Imn_E+*fjd6%iqG_`v
zl+wmp*Hm7y3)8CaEuWP2Ml#>M7VAqUEroddv0KS%)nxdY&UlXaWzx8=U)%N0F!K-x
zYg^<i-50gytNJB7=zGc-FC~?bf_Wvx(HHuz`KHj*VXfc*w=ajseXpSTU<RFOWY6H_
z)-i~3 at csmmsA$`J&+G%C#?XC3gE%a-Z644AI^$;sr4~U;&SGv9mT{!Jb-O<G%nz}z
zBz>}f4$$$i&lWn*kytMa=5*5;0~hg%)t<ccqV-YZj3-hZt4tHzkymUe3Tp_$epcvT
zRd}NX?_SPnpy7hoU{7zx7Bfj7voh#dRg{*}*wQEXp!eN at F5H~{L-5Rx=Ja^W7Wxgj
zbw^qcTm3QLaYdP13!S~I-%8ZYWID%!ZoHPR=Z6pp6XwL3qA-`DY0$$kytf-f2T8Cy
z+O*IDS%nB=2%m8yhDpY$7R3r*UKph^n{Whe+Ic#Tz}>JFm=|yIXc*yxvy`+R2eh5D
z>ehPBYV2G(Px@;NT5ElS>H*4YLJcHY)*Z24cnY-kwzi*U?_iIHeKWOl?I=AbZ%F4m
zTFjA*GFroRv&DCn_t`b~$28D8O{YE_Q^%Q)&<6hie&=1OuFV4N?PW*k=EG{aI_!lu
zz>{kOG{_H(!;#-#V%}zFDyCz8&=xsje_Es+om*J@^KMAQbo~G_@(IJ9W==MLa<Z99
z;{iS34Cw7z-CuF;-_iR%5MC74*ydiwxpQkYl+HDyE_dntDxL(dHPlxzJemi3*J+UB
zn25F9T+^Gbm5zH!&-dZ1?IY|nfZht{CfmkYUFmt!^zMUcyfBwJV(%%hYwF<rd+R*F
z<2sue{wvltjXL$BZO!^#fD!tY&77M8`X at 0rkHmRb$ayEiO#;B*G=k1Yw`>7612S%`
zr8dPm(COD<-$dU>2+6~G=`HLH>m$?Wm_`u)l9eLMN!H)?CIQdoonp0 at I>=ghw`MeP
z_Zzx<2lAN!?Q)TK;PQE``wxOWy#v3R^5mL2G%rs*GkCb<K0RwOrv-C at 28@>*aXzDw
zXUfBy@$F><XJ?ib+`qh}ytH;nXFcW*I=M)e5e_|q!O`-XjdP2L`UbskJFNzLz4W|U
zLX5R#q~3R1OP%l5mil>HTk5dKTKx~?8A^2(fI&y8t{A2o=!x(CfIUFNSG4`3f(czV
z(E<d}1NA^P&<r#IWxx~Q8c+ye&V&1hWTXLT0X_gU9wopdpd2UwZUVP~T;?JN%C~kY
zPa=U?{==c<gZ*DerjBb&dpcMj6>VSnAld%ymfh={q+3j at _UtyT-WzS-oUqg3^@$|M
z>W91VPacpTaPeyXqKlU)t*xV<?}{3jbyOkDEj!)m8e9Bz!@gUgKPNs3tx4Ve&7J+J
z0~BTVM;s|jwy)Z~-Lx_FfW6{wGX8ttK}c2_3dwSq%^iirpo@^y;az3oE!EXdk&<1X
z*Tor5cs4Rm^ztz;a^U81rBh-|yWi+KZ`1HuD^<-7Q!@G%Uthj%+*S3mE}P;mR_YQ@
zj(T-DW~F`#k8c$+eoI~1k+-kEE)gGDJ=^&~&Y_UQ(K4&z6W^ZPpJspioMqYA{^tgD
z`(1E;&8c7Fx2G at d;dh7>ty@%(({V<nsI(&U$3frBI$-^4{;g-DHR_wm#=D~uN^*zZ
z+h`k+bJn5C&LnDB&j3X;>z$eT)wTi23-Xpr%@45qe%zcl|6s at U!lW<zw at e%M^TW5b
z<Lm`H8eg7$)oH`#WnU+p5r^0BT=>8}EO}R8kCPVFd*TfiE&I;MW`e=-&o}70G`Rn+
zO#4lFxX!7=s0y_xUQ_R!l at si724k0aZHZS#Zh`Ny!Y6_0H>ljJm{f8drjjWkhnZa@
zRdigpSCpvp at mZs7_kWH1zFsg1C>OiPc4jQu!Hgq4na6sSNZN)tZLK(_R(*9vwEpt)
zEiJdckF6{8k9+$tXz%N%VX0MR8&jU&3Ex at J%v`wLF!Stn&7AC9t?#LlimB;$t37^t
z^nOa#<Cjh+HY at t-w*GEiD?8V#ar=3G)4_}mulD`g^<Cm|vznws#?Q{g4^&=^8E`Wv
za!CGfQNynsOBh>xc=v?T%(OA(C->Mt=s76P-~6-K?`?-}S#CKjdPR4~o#7_mrff8H
zNDb>WVsFqF!c)FqT4m1}-23dzetj-5qYX|tjqH*&WgPD(k8h09r!EvV at dLaYd##>Z
zYrS-yuI~o7XU0Fc*O-O4zUvw~@l}V}E3XWnzbt=<c+t%Po{N<OU4kFjPg+|(W?Dq)
zgz4*w$3nhzO at OPzuOQQ0POdWC#noDmPQ$!JA;>>}PI&#dr;GPK%l#pxGH1sAKl0a|
z|G&F42OgagC10tExTSl&Aoa=b;>61p8<d(i-)}1a%_||dC8S9GZpD`3+cUFnHwVjG
z?yQQsSLpjoVPjY}ae4EV!{~!f1BNPOB)db_rJq8t9Xk|Svpa1>)vidygXZtQ!Eu`n
zQEsv!rhwvvH5X2pY(sRrY)DC>4S5K-0sr=YyZeqP8!{f~9Bo4!j<(XFej3;x0%<_v
zxmNe?`)x=O!X5(-0_`;Z&GdL?L$<xMAuSa)<UO#z(uRmqtx1WKHK|x(jW=|y$?@sd
zWb}+y`o3`A-{x)y_gC(%?!R=fCh>;WL;^F>#F|WiNqOe%u^~=rHpCI8`m{A^+1DDU
zhn`lXH;@Q~`B{;JURGRqS%x*44a@~Li>!zcCYM$w4fo1#BWll2<!zQ3WMr1v>PFk{
ziV%w9<RNp1{Q8%@9DB}M?SZRg<bvB7{aKt%r|ooW_`mIZ!*>5a$yxa4^`~LZ=#@;X
zz1XVN-u{2P|5 at fXd5rLX|KDnFrJs%XWOIFlnn}hxl*c$cVie at 4`m>Y$q{vIpG}0|2
z$cW1)pID?-MlSchruaDD@?p>Yhud0&`#8*?!`E&Un109fs+kg*zC3ME%&4FXORI|d
zir<)LO?S`!y7+nAAj5q7M_KE-d0PH5#NFnQO||c#HN(b>rI%V3_UbwOe(#G(8yD}}
z6~LdG*=1kmHiw&|H=en4FM6uM;O9?#e^iO$b!u at O+O;_C^8z2k+bQ$PZQe!N%^oc|
z<i4z<@sLbyP<wo|Guz`9i~cn7MKj$i^jCc2bQM!#p&LUV>l_Ka9`)O*t7B0AnHZhc
zhnn%EmWc!6bsDs>&u~9teGkb0v5dUhllC?3m(@&KHvZkHVWe8E&kl{=TSinqGHsZt
zjjD8e$AH1d?vg(yMvk at FTAXY)eTd=n(3TH at J%07d7}sMIZ%E<O0rz`)KMM}Caw<@I
zyiOQNRt;Z1X~p|NYow_rd!`=ozxzKe&%}Oz9!Tt01-v_;oxiE-<##8`wO%o`9FRVZ
z5A7G?v~-N2 at qrvDK60<cH^vT0srDpwOTX89ciA6GP3!kMI%V{mT~AHl?1{98-`5o<
zc8z;2`_-XxU%A8oTlilc-=wDe at P-^VFD%<Tx+3wQeKSe7EG+xY;mxjtqZ{``e$*DS
zeJ#RR{@|`G|G|2-INqG?YrcZz|6vLE!|w*%J>j;K<v%uI%_HTk?WSW?XRL6JZ$bL1
z at eiNn_aCno;|#QOYzy`<v>@yb1<nj3oDO&X>UCmSwZcUPzpNIv at 0!!_kC&V8)hL{|
zA?)+La>fk%h2zaD#POX$uM5^M2-|0?omwo*PsjN@)>e9)HP1pASq0)FVQmb4QDaXV
z%YX6+Zuz*AUjrS2p5;G$j<ocUAI+xk3hB$ev!2Qso*H)*Rl{G0a4Ot4P0GFO99VwY
zW7a%M$(oNeQO>qo$_k_Vf_6914!;GRInq|i+TLBF4#PPg at K-RhtB99Q=OwE~x-=~R
zL>czgUDu70RU!_#>Lt>8B_0`8yT<deKF<TKh1hS^!U|IZ70$dCIqv0P`K7nP^N<{S
zIS?Pvc)UgDDyv4?8W0Dua&C{ckjE*txVt%Pvt?PfC^iaV!qK-r!#?L6thr-tByybm
z=vRcb=^z1L<j0{Ka*<R6*>z$0j}*$;179jagNzUd1EjYW at i0~fKKVxH$*Tsf4AwUF
zak+PQH}LaeZMI**e#mOpw$qOa=OUV)&mo6*$F9hX5auG=H{=%H2{2-X7k_4j<E_=M
zQoJMI-3 at d<$eHaLR#@D*U?vayPkO9<f%g^U{=GDa;|G>MVcT)YA3Oq)4_bv6>bzK%
zi~maG4E8^{8J9qwM!<Ci#tq83c4FjvXSH)YKL`1PaB9e>MQLmonC{%c2yZQ$6ihY+
z4PHLzd^o0+(K69T&Y(P*<9xUIJ`F9G;JXuYuq^t{c!C0bk23s;1>D0}q30u(pRpNq
zk*9r*v;0{iw(r%=IE#7>amdNQ{%F=V{x$NNU%=qpuruiMp9#~&(i&FSychEOT<&j$
z^nUd at _HNK~B>0ZT`B~|8lm*;%l9B*EKT}@i-YGlf=E!Tv8T{(7A0P)j6wnFcz1%b+
zH<xPUE-{*H=WS6apRZ8v`Pc{X3~|}V+H7+;BSaau<-4-NWf91)ji at _iEdTXvl=oF?
zPo7>aHmjGLW8I7Y*dBUBa>i!78{G4e&ogc^9%V?sA=0D6yc)8SHbDNm3hb%QX0|n<
zT=C)Gl at +RcLcgV|5XV)?&Ep`uLB=dU>=f?f?SVZhL at sgofVek8SEhn2^3uie!%+qk
zS at RJ)kyncqco!9Wr*c6Ta%i~#dgqWgxuB_0Or&MrB@$(^0d)`h)Il?lFWIcH<|t at 3
zrHkWg at Q%PR(AlkEVo`RChGo0RqL8nrS at Q!~Y+s2d+76;XpP+D7H9}{gSK!_foFP>s
z%)6>-JQ}wabtu{$+xRaa^VO)|jjXNvEtWq{j{HEm8+cQ0o}ek1X-3<g2dr?*T=3#6
z7 at Q^Jmn|-LLj4!so`Ux5C${hUnF?kU+Q84!Q5PyvXEo3R>dL(bUB{lR7P-G&3(6wa
zIXsZ3eO at VD_b22ygO1Q8hqaNV!mmc|Z=?A|BGYG&ijBhBCf<IqTME8^AP=&NKnH2{
zLHSz*db!9q3*>oc{8z>bll&pa%dD+-Cd$HV)R&WLSF~qhSsLP5AU99e;C=yG=38_F
zWtC`iQ3v7;Vb5au{XP`Ud8%RiE{H<@6IN(-g2oT|i at V&iu;(`mZNw_tHnkvMnpoQ|
zBDuLxgMZ&cepTvF>0;#13&=~&3dgu3To&S9jWVu7`EJoo<W;A0<xO at Mb&ZF!B<ql-
zhpes3!y<39?TBAo#d_Rn>MSL!?Pu%Zhd0m%MIv2Vmj6PH@>0m!cI%BeZ$+5v*-T0k
z>cVlPC%4 at D)*r}I>?ajYKznJ9cC?7)fAbP)8Jf*>jZ$00RY9Nl6!ETQg|%yL;%yGd
zrx<yogKWjDaFs3M`VQ^SfC{m+5_cF?ur at X|Ij9c^i!x>X1pUARr1ctWdpa2Ps}N~!
zW`*a*>lj%x>QVq}tBOEdMeBx2?r)C1NOm3HCHUtK!ql<+s)gYBk`*pbz&ItDwOu1t
zFX8f{LOJ(kV~Rg-J8R3*cZC}j;0c)wLSHf(X at TsKPp-0i<=$p7%Gp+FtZn5<xNSvR
zyBtS(hTM_&AB@?)8%xT)d-7P@>Ai6OJ?he<UlGrWbmTW{Yl?bbT8H|pQZVI^v1&;M
z=A&G@<6J~;ii(iGV at 9I<A4a_=>8{ej@&!D!- at Vd{=IngW3MaX;whaR0S97*=RTJ8v
zFx>U1L%uJPOR{KRbR)$-h-kgHx72w at H#N`R+(hTeI>@knK3DI$*~rXwtI-FH*GXn1
z#_ZdTn&{ZwHAs(si(nj&GeQ{S%y<8fde#=Ao*zZjb7O1C%&jn?hk!mpJ#TAWqhC}*
zGu_K5im$8nj8p5q;_$tx?!(-Fflpi=jf>h-R;$MSj-Wvr{UR}L1dZ9UdO8Q-;_9_S
zRqxBiy{^LL;PV%gQ(nGv+ROQAXKkq`NE`9pswSSX8l7isbA$JeRvP&KPv9A)11K5j
zn8Z@@Cyj5bn;>}L`>ZqW7?(mG7c!+f!IL5)C@&(>;T5|!_iNaj6kfS|&)0|dMK3y?
zmur9FkNm|Ka~}&H<=*)I;)(Me*xT0v?);u_digYKb?5Y9Vd04*)|XEl;a@&+-dcI_
zLeD#=ez&@q_c-9v)qMX8SFib>y<V{RVmt5uZ_SgC4Rjya*B*JRd1+*e@<8NqDle5N
z$Vk-><pJLspB<$Bxr5OcxkZ={b=7MC6%!Gx0aT1#i3U(HDHk+=ikYxm1E`oV_~n#Q
zXqeTQLqtG-Hv#ua&#h50=ir`AQTlhd7Pu2&Ffaj_2DH-P#@S3Fcpm|5feAo6{l+jA
zb1SEnUKZSAvp at 9<NzpKwDXs3Yr)XHjvn~8_gioVo-iVIh%`&s<Q4gxjW(74i&JQZP
zIxDDwe&<cO(3n4q%7j9Sd5{!gWtdA|fId-4PNOa_V`4S!bb^=32ru-#E at 5%-b>e*K
z`U~gs;|Zf=B*FPo4X at 9o8seQ+lZWpY6RG~Rye47P`xN>wl{KAj%F$1T-*452ru|_}
zIzMWidk+U+wKzuAI6Lk6^U1s4yq9F&d9*J5dj0}dS=guW_tU~FXDA(&k5pfQbfHf|
zoNQ}}Ph?K|{aA;bQ3WZFe5AxZGe|o=bAi$A%#fFcbC($3KGMPHE&A=9M}mx`D`Xwb
zlIUDM=vhx1r at +7J&tGMDJmP3e+X&{836;YO=Dk`i%0e9l;0NfbS=<KQWvNb52xx&O
zsZLi9R0CD8zme)@FO=${uSj)XNzgMST9JFNtVlM#d;V!fx*oJ51Cp&s7Ld8qiU@#%
z307nR{3pDG?gC+_y|yCxFw<cVhFOOH76IyCu{R5OK at gAQodo0yAf&T^<SY}AbIS!}
zHjvRrKzsoMAdN2|RptV63FwLM%`p9d;eavFVj&=;hk&F5VfYpRiTEDZQ$X^23EI<6
z)V&2{FYv-rKo$uE<ers)JhB!Lb9SSF2@})&VIp+c^WvX1iKMzZU#Xt>Y<>SqEY;Wf
z#%Z<Uc>P_U_<MEEu^KJL*gC)eQ~p%8Z~X<t2^bn7Ag=-h#A1nntY07?j=+u|1mvqO
zh|@Zl at OuI`KFmuC1;h^S^nZ%MeFbDc{&Rx6tgC=@1qS1L=J%kvUO-$o{vFn_1JZ)9
ztHT9Ew at 5&;Z6T|b0&;8><OhT;6_D$Je}`}9 at jqqOVoXchg<{M#RGp;cE7VQ8E>QD9
zKso~vbpq1A5c!xd;M}PDKk?*(fQa-0l05Wpzvxg?@(}nqY<8-El<h&<1(pPxvWbVK
zCArtrlDvo6jskp>B*+X{Z*55;0lQ-Ya^xqJ9pJx{1LgJPKLWxl6%Zl5!w~n#-2&o}
zA|ML~2}s2%OLA+OC7HY0l5AUHNd!wRiFkn}IRe;PSdxQ$OR}SnC5c~XNjmrYJ1vy1
z$9 at 6Xu<cW~kJDD4EFhzSMDW`W2)83&fpgCUBph(G6Ocy8FoK2q8I+$Q0eKI3DSty5
zm*HRhV*so~I05*}hM+va-p*sm4%8W>;|y>P{#_AgG4A1%L4MYNL}*C{1Aexa#0#?h
z at 8tBcpQ=-q_6EjIYC1M#GIVr|L-kPanLXUM8gsr(hULELn$iv?QeFRJYn$Z4Y*E)Q
z<?2AqUeS^E at 3OZ(zpLwqwYI at tXlpn3f4hH=!}DF+$5(9LIkq}6$>Ghms4-QkyV~ru
zt#(8Gq~>T}(CgWX;P-9c1Ehre?js{!j4VcqaF`nqFHww2OTVEn_#{pLu%mo`;*UP+
z6FbJVpV&e36Fb_yPwZGj`@{};ePYL2*(Y|4$v&}TZS4~~*4aL>)3g{TwdP^?02wiD
z`$jy8I=R)IrkmI1PW!v=ZQp43h{0-%$pH1#nAmo?Y(|(?{bH+}8xt)Fg&-DdhXAEb
zY0|cU{zLn}cGKgOCFu>EQJ`)B3Lpo_1|+9Z{$NJupxy$1;=34d0_<fbT%I0nquCyp
z{|)B<#x$$ueMZy?wEWcVbKSx0oAMd6Z&)R>=|H9Tume@~!w&3l9JbZbamWzIv73iD
zdOHmnQ0X*GRylE-tcpZjv?L*{CGiL50$l-nxD5p^oke>LGw+fmc`LFYi7*vsEQ!d+
zf{0*ugS`ad|FvAHutrn*_x$Ex!~IJ+Wj;7(dB1tG^;P-2`}>A3uABX5=%~y*pFT-b
z#QaHTR9n_cUwr+alvi_yWs<dHfBQUe?B)$&`U5f3U+rm3`|`p~dFA<xmiUey*FB;O
zgrz*$>+diBXt~Nip^w*^FM at A2pI7%t3Jg at OINEWx{~7Dv=U<P0yZ&y7)^YE{QEcJ2
z4 at wjL7EB*A)50*yYt!9nw_P76xlVn0Qut!3N56qq^7G!j!9MX1^Cm?cFM4sQr{7!Q
zrqxM9gLiDpNr+x>G;GtxTTZiP?3{SjEacVx^mY1EMa(w^)BHnf`t8~>)2;W0N%3~$
zibmLbpTFDSq${&&QvJ5_Y*D^jV?*dBQ%{LUvv%<8AqGAD++92wk-LlEBoA*VzsYWX
zlSFRQo&6XmS3fuRDIR|P#`g;yzREu+RI<u{_{xQWtA?)(b#NSG?>}<*$PxAq!)Gwm
z=0^>Ok$x^C{bo41x%)ZIbertw?J>j8+i8a1439}}(_Q=~Pj<H-gP%r at v>!Rr!G83J
Zu_NqFeEiph1g>87^`g-u14fM)`CkY$g-rke

literal 527150
zcmd44dwdhc`aeFq*`#Tkw&@MZr8Mac&{7J5Rt#kuLf9x`3I%HfEw_q at S_M5`s&3i^
z0#+ypr6NK=go?_kpA&2Gnj&C9RP-1{kI~Yj2p-UsTQ7#@_nu990rY%6|NLIBFYsh%
zpLyn)XP$ZH_RP#OI%o9gQKNEh95rgx=uy`Zl0U^deHB?n0{BC&_`_ZC{(pI82}6n*
zLU;#$NR|BT=FL(DK<_&!($Js&VTpn`SAxi{B4o$f;4_ZMNkyb!5VhdUy^23gOydF0
z2sL@;uL%AZJWZbxsU|W13*BEu2LeIS`VA4u$woVo3Mz=ONF)!xT26NEE+=;ZB#%gz
zKP-~#2aDwUugl3<l|+`~$^E^Y41BtRr0=qm(mFd)O&9+voB!wW*Oylj at xCgu=(#G=
zJim&Rk6KIk(Q8RNo>LZAkwQRqVHG(NwU+!^RYmIYY(TtwMHPvDtcq04sv at tKR{cL;
z&c6~+Ab(sB7!P<?ApWs{_W>UWOn4&TPCyOd?|_2<ufRmSEil@>0;2(5;}V#}bpkWs
zQNR&_8T6*Wq@)UrZll1Y#|X^OB7qqmFEH267MPJ;0+Z7pFi2oV-7PSq%K;Stq#Fa8
z{7V9JGw5$s0V)M%_GbdK2<h(sN?;x`3CzPpV3rIQm@=QhJaxaoJbjJ8h>Hcr?hu&r
z41rm`L10$61;&AQ2V`{|02~&`vK0ceQYkR2;sj>>DS at ff015z*yYim`^IU?!ta%o2
zK_FXd1!hww;0b|wX{NyJm<oUnUKu4YJCWb6PXT8H=2bjjL%P>D3CtTtz;*!2z6WxB
zI!R!@dkFBbz<758b_q=LEr3-5(}J at 6dnw>7;G)3%@}a<VoCCBAOy})@RRXK}7Vwk6
zhQ$Hm0f~TqfF!^`z+iwK at IOJge!sv at SSGNO4gih|>@5OdHDDv)1wbuex4=#b1H=IO
z1Hfm>Fu+*A4S*W~Hv#4Vz7yD~D*?{}UKQ9v;0xCQJ`&g&8UWJGc~@ZPegOdO+|vR(
zZ-BtwlPj?I1q8M<LSUD_30NzzD+ at y~6VI0fb`=LeIaXx>cz{u0pZy;2LkL>%JOTI>
z at E-tpS0YX2^#Z%PUSOZg3_jPK6xgaq0LZ86XMtU}DFk2P`J2E#k2D($0$V*D at QT20
zL>YH|Ca|?H0-%rA9}w6*CV~COzXaB`OJLuEzUqqsDF1(jPJwMG1GohCJ*0pCLxKHZ
zFW at ZTJm4arU0^?43V0Oo7yz{H83Nk~z3)f<2WAQE$LRvwgz_9347eTu-5k~m>?bJ4
zrzqE_K7sulai9AI_UIHqIRJHev<YxQV82Kd*l*qkKySy!0RADc-$FOv-UFx+*zbV*
zZUI09z%IV~USPeT_5LKVr}qeK^A0 at U5!f@({~4#iwp9b57yr$G`GDnsDgfm1zag-f
zN&sIA3T3sRh&%@P7Vx8>&_oJ~K^8$V^b^2OfU|;P*bji;0DeI++y;10P+XHGD6ahs
za1wAyP-IUK6eI7(^AMmJVU?iBc^L47pcu^n5&<cIPX)zwv4A0hVypyc5fs-i5ESF5
z2#On;1Vvu1pvVQ!aV#JjFi=q3bfciiFBcROcL|C~@qiLRF&T1Lkj6R>@V%fY6aY^H
zz7Z5NHUa(z0DiY8^uisp1cePWv)2oXyY2vN06_M;)d0Jom^%aD6%_N3*CHbTycb6Z
ziu?aAC?0rLP&|n8JcP7+Uc>VZLGf^$pm^hqpjh&vpm_8pLGjdV0Ce-z`-0->G{7^0
zLTUtj2lzL at 2j~<O%iV&a@<~DQ^8J7>1jX(#f?~&Dz%77-g5s4(K!c#z2_5Xb6 at aqr
zgid#%yu1D(C~Eb9LI7~DLdMs0kOT6*VHFf_?**Vf8(sw<?}k%?VlQ|c2m>IG1CZ;$
zaKJTyn*qr40QerDGzEYn0CaNz`aLj5P<%W}P<#Tt9Y#K%pnRVI|HUdn at nx5w_$L9}
z4nUba(8<@3;YaB7csk&E0Ax9hGM_=6p2-KGp3flu40L#=3b3~K`FpcK?*CEf_}leD
zCv2<Zd7lut#0rFeLLlW0LdU}np`&fP(DArK2n5~(925e6N at El{7K6SFW8Si9LZ|9u
zp`&H4&@pYa&@tnT(0Sbmp>ueWKvsM!khQN19p`F<j^%d>9S at EXI$mf2pK_t&Ql&s9
z?Lqhn at G~Qik%<2m{L6%n_8CHF*e0Q4*I}XK(ec3jkI<<QgpSf%1 at i0#p>xz4q2t04
z$omu0Bi{$_5IQ!t2ptRRAjj{>Yd6B{gpT4zAj1Qodr;_jVk2aZ6*~MLp%ZN?5SS`-
zEV)<cxC1i%t6J!ox<Kemc~j_&coFI2g^s=bg^p#%kxvows{jw3(6P=cbgWJhIxdz9
z9g85_3YE|~;(*Zk_eX at zN#OT9D|D>agLgm3Y!d>1_=S$+=Y at _()B-VngZOMA&~+B^
z2|`EbVu7q&D0H~)5<2etk3j6-Ag&#GEEPJIt_3}0zR(Z)w+iI>D4}D6O(3gJ2pzBH
zLT^7n&;6m}=Rto5^14Ro9O;su9T!X}yGrQzBpUgqK`(aT2Mgr6 at 1du)(CaRwLHx at l
zkYN_eV1Pbu5=a%|{hxsr`Q`m0bS#8z7*WUHorGM_PYKGq=ry6^9|J)9yg(+L25q&_
zIj|G)I}lDl8U7}8tb76T?*wkSKqQp?c%#s1`c&vBx)1t5ot*`bwb092jnFydB5dai
z$WtYB-2a=<@wx`}dq4905_)!nC-hlTFOXF}p`#A<-0^Sl_(14*>;cH?gk9A_-)ms6
zhfub!1TygyY<9cQvExJVy$Bg at 7CMzHkQeND`Dc*jtkBW*g+NTO=RY9(h+O1>yfHTk
z{DC>n1mxHLci3W+(DBD7DCZ355PGSCK9+uky2uqeYL~$#XA5NcGe|QPydQ;~><~I$
zse;~6hPBIu&bK$C&elL)tw0v%2p#9GC}TR(gU^Ezu>B#hy_1mV6y)nfc~!8}DUkVE
z;OiiFw9rvwfSfLrryOOxPaqDew|^nN9`PLN;yu{mO5k~+!x<1d*{K3~2JMXpZVmLl
z;!Vgf0O`j;-W<p~4f4)HoqQ;eb$3G_w+eyI6DT9(djMstYe0OR&~a}$p0G&=Z0`{U
z_QMICL+#K<E9%CMwg4WhTG3`Vq3uK7j&kS?b<$devRx0JXj_+-!*=)MxfFUsS+>L0
zo)`$aWI0{OG}O(dg+j;9XHoAG?C%Mb4ej$`)cd^YLdV^V&^h2R<j|ll43Hmsefvq&
z1Nx-39|;|6K0~=h at J9Xk(N<qSEp*)VHS(?oz%DyK0H7QgZ^<(7crZcexcz;+Pla9i
zz~@b*y$!rB0I!7}(I)>un^=p!hSp8hJk-@<q2ty<yu*e#^k2`TT%9Q6 at g&Fuy;Spv
zD~3IzUe_W`^LBw$DnRp-(3!av`bC*`4MqNtf5{k>Z53=;FOczmp)<K0Hll>BA?@><
zq32TAA?#t^B=na>LPrJc^qx$-Tft9&ewHE~%KkSi@`9}_NBR861XA%m`m}w3uhAA@
z2UV!YHD)~jBXs!QfGt43k1s^u3Es<esFQbv&Ya=sN1(rz3(%i_2|jz!ZqRneqd#5^
zyUy!??$Hh&p9DG3t~Nx%M$mWP{2kJwKjmQ;&!gPaa$$3CBmNWQkA7(34%8>sKUJ%d
zA7r{8eb$a6sF$B-`G`)^pA6@<qQ)FXxCAYUmWX$Y$auH-Nw(5h)D&(e;R!{A6;0Z(
z8!c^}zHH^ztkvuZ_T)fwn0p#Wm;|#`K>}toTm#3n*-EF|rml-Z+;l>eC){C%sOg`0
zb&|@`Uh$4!1UIgTM7s?!*7t*9#$<>o at CL(V2f|+l!`w`Se+-6|(-3YBhQs0zJ`xHq
z2A}v)cn`vHq3~}A#|Fb{Gs5rXMctZZ)`l}h+EvEdiNR2%wsvwTG!P|^429DXjzRh7
znEMm9lN7jDkov(UU8K((#)}R1hKhGqz4NTZzf)<_smVLfnZKAz%#Cvt=6D^c)SE}m
z>0dCDXsnrbl4vEw{ALxYZ8Y<yK&`R1!knfh=51DDwG(DCGgn*mRyna6W6mcM!kOpk
zNkSb_T4$D%1d*s}Cnq?G8W5hqlL({Hss_JEv+p*NkV7<(F)G1IqLDHNskBHD3tSxN
z;{gdslPE4PI9Qr)Z4=WAs_p8 at _PPBl%R$pG(M|e;M-svVKszwOM+PNUk->=~Nk+OM
z=KSIqNc9WCDF~+^96(rS&VPth+7Z%Q^BES;RKzlq_47~$GT;2r+?dJ7=ca&bTET>v
zz<IlQZE=54r57w&(`L1xEL9}Ke7u+>mXb_!!BUc#Lxv)Lm^ps~nH)P$Yn^6itwv5!
zFqu&o%v%$%>XoG6cTFHsONJ*DlWS1kYeAn?e|Lh8j7a23HaLz<EG9XL&16)fj*JH7
zb)Xyr%CVrl-gUQi$(kQQeFLa-L49LFDH(@+ZvwRe)Z;;&2kHr+=3RH2ON&XtDWXG)
zd{7zz6BBusBvi3XVlm4m=CF#yW|m9TvdV;FR+V67!xDH_?Se#XI4C0u1UsdU1hod#
zQHeS>8u%DcYe5|g>NwZk1;Ug7Qp6`(*@T1~HZeiV_5)S_$@!(^j+<E`nvpiC(g at su
z1d$z>=w=6jZZPPQ6P)Z2>n_x|k4;IeVs(iks|T-C;M2_8inVyA2kmSvvFaK2xqM(U
zK#_^mL(eh at 4TFTk6HD1^kju4 at Fbm}w0SU7q;YdiBBbR4X<s56Kc5{K6xRGWw^1luo
z#v~kN$0ic?`h+_62FRA1P|8B9>^OiQaLIohJxMG)mT5*ZII?M^pP26<3QPM#H(J{N
zHqxb{t*Qj>!FrWbV<aYZtp at mCE$xpL0o<1Mhv#M|ZXF at 28aX_(4n<dpd(}l+k=g5T
z8u3)u8lCy_Gv6<Ix0w68r*ou&tLEHF`ZN+QlD1v3*{<(Yb*5X|!(O+k8BQSN={m;J
zUOo-dkg4lP7N;P_LPC;kL|uY#p>-Z37|ASk?PyCo`?3Lxhv)KF@{sp!LgbR52V*y`
zikQj;+A5xHC^V8{b;DN;MwBI~h!AzdK2QGVD$2=73L`yXw#S&T;9F5-)0l32lN#C~
z&<?1IBHhC*fq>JU0nUpI_ge+?E)rka=x|$KQ4v=J$`po}*{f8 at v(po29!f|>`MbuF
zQDRcjC{g?FK3R%zNC9rM at D#(u;YeZe(UQh>LgKJA|8e{!hVj$aNqR9Ky?dI(TG|yw
zhUDpMB*v?k-wGt9rTsOV9KMByJj74LMoas}*Uf5eCZ{C{2e}fh$a)meJ&QJ;;1|I)
zYQ`_dXrh-GLvq;|OZ)6}DPM|_bmp9J0ttzk4^JvGMh3*~7BV`@FJkOSu at Sj8zVhqL
zf8*n&gVrUhwXQHDc`ULie0Af-x~X%?0SWRe!aNuHQcP8nh*11nG at fnqT$I!%Etzj=
zSG^Oe<62s~70Vl at 8HqK#;Y&lZH3cQs)AvHW(<k)wWp>8a5w>B9upng-Ff;_qL`~1f
zn;d7S)WvuU*_cwYS278tLP;%H(o`B;`TS_2>DpS!)aTpO at tu+ylH4bcin`FKIP=p8
zbALV_mia%h5t{mcJX6f at jUVOY@zNX`Cx3S5V{|FD<|r1r(x7LqKFyV8)b3Z)C*E^{
z??<}d<)=~GglErqtTV%7&leC@<~$%Y68DpIqFu at l*2o&3j>FHKmQ<1s&olB{K>j`7
z-IC-oa+db`d;LzdBt{}WdtJVXkk2HOrG2xlDT$<rN^-Zz at o~$zjklPz+)5H7hLMq?
z>e~pufZ;aYXNqZVI>t#%p7M;{Z>K!8ps=QhVc=tx^1<i&rYM?fHB(J63+XzklBt&?
z#WJKI5+hOxe?j|b0es*W8`U-~6JbkYBTZU0 at u228;!&EkD&k=!odYu#skmj%$td2c
z;a?dxC6(uP4EJtnF`eQn=Tsl_oTKv^%xMzOR2=GGsEhH<YURjDWw!Fn@}_WVnP--{
zHPW!WsFUd)PPzt96Y at Rg7bOBqH@&&vt`i&WMoHJni(%*NmX3j~Vz at Z8u0onK^<{$A
zv+2Ai{5<S(W3d?C${_8lcAc$8O!jf^$eR at V$xRBA4!M+5J3uMReX6M}dA^QLp42xH
z#FL(Q){|_jsnY*RO0Fm6qko!GZPw~El*Y5bR^uG}Cmggv4(=I$nqKE=w$;?>*%(pn
z)}Vg0dvbQ(xMx(|q|IZ-X(cjF%jpmo?!F#zaeGGNH-67`K~CNAo?*6{(xKTi&XgZW
zV-#XE6EC7iSf0<bQWSc$etbBmsU}?&<T?^vUDfq9&+}~8FIv0-6T=e|+qI>uzg9tF
zD)qJ`)d`*x<Dt!T_YKRL2_sH&lCJz=yOkeC*nPvKV&1xg<XWPc^_#v|JElv;hc&rr
z64_Jd8CW^Tma9JR>A*8bov<s8H)^6brtk0ARmxA&Xg2Ed<Er9vr%NP|%?nlB-*Y^t
zEA{zmPF>k(OVWOcTHo)V*tJ3`u3mG_zE2 at B{*N~7L;pG#y<(uNLyD60mUixG^k(OQ
z&9t<?_^e&mWEI2ejCFQtj-~yD)9yjMqAHwE+Z>)Ze!E)ISNG?MsL73W5Io~@8Hd_1
zd-}~kUY{4Wt^Fp&6j;C%ooA$vaVKA3U8-Xd7ZlD>$HFdf&e6xX3rgp8N57?QWcvU^
z)WT(zj3H*>GBH!c2=U at nNtc(neSjzCFXHp^Hf$f at e#fqpq9F4?G2H)=TsE<K&G|lM
zlk#EVX(-*QQ0Zb&x^uL2q6K!{VCS3e=q{hQ($c=+KkoiKSE<e$v8|bpM at h+Gzk{v5
zUCQTUIn7QHzj1r`>>0PFPbqYd_l!o#hWtgzyt3p;D48UeOcE`@vTb}yE?bgE`<E1p
z^IqAW<bKc2dm^Au;m0uO^Jup|X^9ov#0Zp_NX4+DWpvy^{R9G{9GZ*JlL)bLAH|}d
zQlOt=O at vFL{nQIBQx(j$=<(R<sZ-;a%s1_#E?1kRu4HWLh)a};Qp=Q|HYw2_*y<ro
z3W at ef3~V?8u?kQTnc_W}LV-Lu;8ZkD#@97*NU7K}3Rq1K_LUHJG_Y|!*i9kqb-+?d
zgB;d`uw#G?@4-qT>{wuxJ=n)X*z19f?7=<|!rlOEY!7x`NMiI+!1wRL-`;}{r(^M*
zzlkc^9%hA01p0|5f2N=DA^r6G6a6r<9<nae4;?RprPGCEqxy;J!6t^VR6p at O*oY98
z>L;cfTN4OjseTfBu;)WqsvoWgdn$yb`jP98%2xA32ut;&?V<f=j~=Lg`t{&H?!iMN
z(9d0xPQ=K2=i>k~V5Yy^KgV8d7{7209bd)c5=OF!q&mAdjr+UE5T!_-pUuCrR9$UM
z!29#FrzVh<g;m&0SBgxv5pSA8E#a$29#X8-d6eiQ8NQ0dBbL29))DSe^odpc*H})D
z9Y_|4%7e+(BaNJxZt3V}v5Szsqu(S^Cu%Gm at jsj6eZ<nCebv&Dc&Xa%(MVH1kFYtp
zFq4jq at hC;J2O}L>3RxmBE4x9b6fu8A->wwHWd0G|k~?@0_Q<N&A_nC|nf@#$T#iY&
zGL0u<>JsJyTP=r~J at ft_@Vqkb&N?rOrxYe=$y7|9`NeFUlf+CtOZHPOn|<MIQ5$S?
z*Q*SF!9ct*8lq+%z~3 at FsrDm>QSJMf&%=14Q?FC=WGLrRn^Sx-R_z-2{dkhe`Rw4e
zn$n&{8gH6he>83Gm1zfEk#-=`QaVYAmB`;D<>#s0Ii6)o^d!KiJ2=YwETtOO%{$1M
zzR~=;>13K*Pa$HnXuf9|UJr={UO%*#M^+ym28>7{9^I6KIGKyVGfFPI%!iiUltSdP
zW^f)QRyG0HPH(BRt|&G51~t~5Y5?cqXsWIo<kA`><ynT7s*k2-(KH{cTNzVKcTPQ8
zoz=@9Wh<7Hl(v=mJd)>}YQAbH=FBlZI8`8_M^Qq=0KZ=361IwR9yCR7dbw0fugq&e
zZ&{XJLHih`J;!{mF>7Ode40*e)q=l%5Z85A*BX>cF9y2aJ}cM%Sq6DM)~(+<T4P%J
zW`1x&;4EXE7Zd2JHxoDMTG3OZay+#bnK~(08>ml3k)E(UR5Bhj<oT91|N1MbL8<st
z%4e>m{I7f${u%Y<e0wNlsn0T9^*!-2#(x}b%-~`F$dTY_?Yd<h@#{L{EbUJun!|X0
zTccsbbO+||L%pemiogWSavv|8S56MX6S(kYQ!z_!X(oz7jFHqgxNv9DJT8Q>2QfQ}
z<}o2mRS>hQXr4BNaRf216wOo1m}-N}WlPaK!UXw>tc-ac7&e5#IvP2>1Pm9#sAbGL
zVALUu)*T6&wZLd82I0-27 at b=ItgcYu4(7eRXdWMu#u>!CP&7{`V`%wbwHGQxw>u2K
zqML*FbG}zcH6jj`SZ^xT)8jk*PJjLhrClc;7x$ggO4KVF^07wkHtP`9v$f*A;torj
zFP3^O9&gKwvOUIEr8~I<k&9a at s$7io&=dt3UzkS1_Ng2#CG$ww>XVgCG&QFu4fW<w
zXm9PCB}>GxEiT98S3j{%Cu-}Gz|z{4^^K07rMtgT?0(hLwJE8JorYD3<aDk)8kU=1
z&F1F!i&(wQ(_xrBbJG_JXM~3pQ#K`S(te?+MYy7w`WGH=@i#U-X-i^~v4&-xlg&9q
z<VUTVYt$YI at 4CBovU9R&3?aZ6u}+mSm4jV6BlLXelEirK#!4=QrnI8Fb){dPx<1{N
zetGKpbhLY2cY3T+k`&#kLHmD7o!*lgGki`L%6r)VG4-&X)Y~PpFWfxT9md5H4ZI;t
z0-n_8BoVBwM0jbG+%}SEj`0PoBqqQsu_D)o6Z78)*A-K-g8PT4Nnl8#iRehf>JK!5
z<p(1T<E<Y`jFcIw`_o={Z7gjUALHUht#ygW7iyivdXy+z?e-PRbcngHCF*3nYw`uA
zP_H9js;mhjQ&=Si&f0A?>{(Y<Wg|_|YWMtl;@~O8>H{9dw0T5%V&6$RI{pS9iBk6V
zzf2P0JC3qd{YL#`-&`(*f_jSRN>$|IdrQ+54bO@?K>-ZBB^CB}c#|d&=;~)Ayt=_H
zDX>FuE$u%ro58`kU_WQnm#MpZkcd)>gEvfPomUKRiwV5cIyqfTD4ni59eO->PdXh<
zN9j8LxSEcIe~XUG5xTQ-p5|xVG0rjY{RYfhb!k^#S4`~~=a>?r2w?SHSv$rMb<eky
zOLd+*8L4u*a}06GDbZubj{L67NuH(YP at ZrP#<uPmn~zzS?6cdj7NGQU4__NBxtZ}1
zI^y!W at I=a69&_b5Pn2^^;2_$)JMi(V=X+#xLN-}@k)&HDdE8IJ7(<{BE#*S3!>{l4
zvT~7_XT{>3ap~YIV(NA9nO<wuzNg;%+Fl(jRJ+&NO^p@!aMV8of7c)*DGP6SvEf=g
z)eWyT=%5>IgVVXx9Mcs;Ew?M$lt_rIyNAs<Oo`BFDF!t#&iSwzwH~CY9Zj`~`I*?L
zflV;5iCBz4>^p1U$)K8g=M`u<IvCS{UXBzutZzubEFlHqgogDYX%b~=HZ%;7rFa4I
zYPnJ(!Ha6L5-nCxBn`5UmpDsXdncri1qW at z+J?b$y3GxP at Lr74&}RysL%>ID*n;(O
zTYHOKR&~RRok at 86S3|6v$67h=D;l>DaXor~K1!hvIrad>(l<-sd^O4dzqXiKNZ=Az
z2SYieNr4qJ;Or@?hw41~-u|6A{gyiOJ#K|rod7SqdW1Qtj+n-h$cp9ftZP{R?#8_@
zHf-Lzz2W7(uQu%7Ti5XB-Vfi|2M-+Au>akUo#E6ASu3xsiiTO*AH0RGA&Sz_V`Zae
zV at kAJNs-o0_O5v+#+(uskmsi}joR<kd)MrZMt$e(T}_{Maqnv9DCk3j@^ZDKg7RTJ
z{#a5{JA&`DROHdBLT?fC>6>BpJ>Q#2W`>nSbhoO7#|D^(UMjZg*(z$+<_z<9!SoUH
zt@@ZdgE-|3xkY4Q*Jh9>+B|$hANoFV{el+Ucg3|X2Yv<>T>)2fP2FuS)Fx$VbeS3F
z7;}mUi=(?j5u|I#cbr)}n0ORs?LgRNa0V&opL3SEy4{*dbD!B*gxr at v4!M^K&NAhE
zw3!(`#;RRK)(!cVGijxdu#(YM4B$z{{_Z(yL}~B55$zu{%wS6|(GQWeMO%2pQi==m
zCz$VcQ;-<6;AmQY+Dk$Evp^-=%v1&WC&io7=Qaax!oE#mh{tNPPR0q{ICF7$mvtU-
zP<oSAVG_;Vlz3a(`)1A}4)7Xd)kigVQ<&37KZKs7&Z_71AsloN$@R*}^pql!qZFNJ
zZ*9h4S$gS;^nXg1eI;GVRdjMGvtB=fTpO%<&5>@&@UEu&sl8GudR8qZ`j`MTH;1OB
z`c<Is?bffNXS4`W&F!J;Q_G6Qy(PSY*Wy0BtXEKlc+t92SYh{J81clt(@eULta7jV
zrB%xat~nHM9JM*pmcwwX^AER!hA+`p`1ZQ@(j6<^-hJ;F%_*Pvw9{tw-hF$gVV*$u
zQkcD8x>E5}*Qf5ChTdDd_sdW}G6;Op-;j*zer`H?(3<KQ6^wd5G^SGNBI#JI!Mxyp
z^ic|Dl#v+Jwb+9vN;+$KPhF3hQ<2s|f=}e71D)3SiI{I3<%%?=qy#=uIX~*Ut4QmH
zPdylFCbbit at t{*0Np56Qm@^VRNi^+AJgT0ssx}h2Xq}26-7rcQQ36+P5qfOUg~BRQ
z8_{Fw?}o|}vN|7Q8i}!Hd6B;K3fl|PML2^kG^CBxR;G~TkaZe*2BCKpI)$CTrD~6Y
z_SQZ-{Olse#K=~rmm(NLtphF88EnN;q^0cwZFzlKLAN}VQXa46cF-+Lw}sG=t($^M
z*kh0CZi*5;W*d6aL#0snQgK*s(>J>IznqHevu;;}YTNvvJEnVGY1B{YnM*19v=%PC
zn`2jfFAcQ~E<Grl6w1 at bn6of;qfK=!50*fZ^Mro6pyi5cSgxtg4r^5JmAxlHinGl6
zb?azfK>M#ga#Ft)Eln#!>v-LGUVC0$s3T&l-FyR~^Ag2jE2qb}sYks{Ibl2%ZyUyr
zc1q?HchI*o)2vfAcimoVa+=U?0%#3)dvv_+e0Vp7Z5S8rl)69{emUJ%k0yv`N-s;F
zRBH;^z;wAqRGMRu7oF4elk at 6dt8r>V^TE446S!DNr>!IFvQDHzx+FIBa_PeO%eX({
z(Ow?U<Xje?(35+@)wzRL-`pRmrL!hQg}s4C+u|GCcuU}P;!rcukgom-L>x+Y_+ZU)
zdp6uUeIiyu*3K;RNJ6B0z3HZyz|lPA))oG3*xg!y{ncW5e|4Fqy>>rl4AVKSLRG0x
zz;E!4d9-?JBYbjFnx*}vyMXI+hNpM85^X)WTiL(QZYAmxdz3otQKn*VGQ2*OK97W+
zO?Za(W82!!VnjEgB=SC~WOvQsQ;CMxJK{onr5*ClEOwt^9de&))E-su{c`U#qxP%N
z6SJ8wv&UkeHW&M}=yi?SW5Cc5-3K>nf5Mv_S1#|<s(bcn!{i;zFzm**we5gspAW9C
z6<SOCSnR&LizT<&i8b~sVN<MCWWBYN9h{pukgXr?njE6ERyJDN$DFk-)LjT+O7Z at y
z-|a7!(>I&zkp8V@?N%poS*zIG+{7(x{WUI2h`O%wIOcxENORQo*bV2nH1e!9p3Mry
zeg*t~;GXM#M;!Lf$GqcjhODt-F=~H!D6Sn|s2zxV9WqxT&-Kg7%zty^D9a``NWtkG
zLtXi at yqjzb2V9`?Va#|7GpVo;g at E*xq3~jam-p3y(qye-a;>F|^>Q6>bu!OV+rsFO
z4mc|JLg;`5c`1|dPIpvx0d4~<3E^{qFT_c&p>7RU$mwnlYkt}@Yu({kDW`k4RGSVd
zv9eT|p2Mn{mv~;whZ{?aBk9?VyiC(`8ym2e4RcR|Z78X|^Gll5(ml2sMki&NbUp(6
zFZ8CP6e{eOr_+7%=5V?{9{9Ze->!*09^09~;iMN++;w|>nrBF`#n86XlXmd`EiILS
z$}$r^CYoNBC8aantcxK%ypno(@x?E4^&kC}Bz|}2Ff&RKN~u!}cBPhJHcwj<U;F}B
zzmL9)0s4-fuwQ*Dbgtuzi^Glan#jhx)`eH6oCrT at gGXCY)VBP5ZkR}TpMl&=3}lPV
z79A0Re?&Tt9jNAR4NB?o$Wza0p>$7=#JV1dCmQ3qNIo`<o;tW(f6%QPXAC~3b04`b
zI(1Y7W^n7_q*ElJADG8Q{+CiPD1{S$L*>v$Hr`^Kr$&uyBgGSL)Mbdf+^Yq3+#_e7
zTKeyr?cp*kD5H<`kr7&+xkO}oWGsD&t8ckV(@t1zI2X&pa|hjP;AO^d0^aG_0nv at U
zu0X(tb(#ikH0 at w?h5g-h+5a)5VMoKzBE6QN-;8P4g>(offW|KxqRRRkVxHWHXA+(@
zcn(0_5$r~gmKb1OICU-FD~j4yyIW#TW?&_)IHY#z3 at J};qH9|h@$^TF8L-*t(r+nu
z8F|zQuU#dtmnjYK`Kwu%j%Rr6S*Q}}2>@_?5fU?oTMN7r+wE6UFU%hMjKiA_3F7Nh
z at Ehl|=iMs04EGm!E2MW*gWe~#<2|ea%VMQW_$xCFQ3YSZf0_J5x)ko!<Lw8pj-Jn;
z7{mSdd=DDEVZ_YO3{lfwTfdf%B{x)Cwj8eh_N9S*YiwIf%qh+=?u{)TZnfSp at Qp2o
zsF|O(xDBJ<*m5dDoG9twamqHN%xn@>@M(yKTdi55%8)$s5I8n@)BR$e^7mO(^EiVv
zj4Nh&L)4Q$1Xdip_lk18E|z%HtH-z_4C5~=uiKkes37cB_#-l&y9)okj8|WUKQH68
zSK`ApGG2ETK1s&&SK)_w(>8u^@Cqrz4YcfjrqympF8HQCC8*J9Ij)pe#+%x$Yl-vf
zEp4YC%)9@$S(FYQkd>4YxCITXkUrm>ge$tdHAk|#6!j4<1+7)rzp?X%b;0TBK0B??
zU=4>`JrTfJF2j|I_nc?EndZj`G0(-!q8R7l60J)lYt3EjZ+0=(wIY+N%#3h_x$K77
z&~hd?t9v+Bc~m{&9o`J_UR#asXMZD=i6eIE^}%eyo`CauAxv<7K{42kSJ8SCbs^~*
zu$H+T^AnxH_O00nX#NUJuB=6BmuY!Xq86G71olBMMwF8HDzK|^6Re50#(sG({f^ZE
z7X`0u0?q>$Td{j;Y0v5pFKU!WYg31H$CQR*A`lbiQBW^y_E at KTbLHk}TW(zf&Qv87
zjav2CO^h37H{A5pTLKxis%*~@%9&_aJ%uxSK^pN28mWh7*`9)s91idRA6^$qUAf2f
z(lSw1HxaGjMS7wnYwTHtq^lX-TG5%ahetbkakCws?66RJ)Ir{O>=MLEPM2OjjS~wm
zx4fGWQF9Z+lg*Q4DTA_Y)@n(3D5sYYj<A-JNHL7&R#-=KySB at xklYt59Nqk#R6bFM
z-*n2A=p%OQkwT$Y_N;vApqx7O)w|@>Kej3^R at B@WlCAcNvb~P79ia4Bhta&6E~Boy
zDkoP at PH*+(G@>j?PP_ZEv<+9KeXl3&`+d?5kkeM4Rp8`eznXCuE1=0c4I|3>7siqp
ztN><&BzO1W7p&j?d-jKF`oNw;q0qsXK3>0e&tY1kbp<l#yM6FY$@bNBv4Zk&g!QT0
zBi-dUjJQW5(@(yv6h~=_KJ;G&=|LS?H&Lb^d6w#TTquuY^aPo;n4Tmv>FOq;7ez^A
zx<RN#okP`H5u*I*Pbe`nz6M%!G}1GJe0)07T7fhC=%=1Y$&313l#FPRY7d9eW}y_`
znToSOM*lv)veiLH0pCij{V+0=^|Ps!bRS{1FB~4xNrtFmYb8daVyhwQ2_41|^hcD+
z(mpcTx6+V2<5+ga?eir~mt-CF%*oYL9CIA`*@?H$!kN;q*H5u(1I;fml{pT^l~zB&
zc}J_=mD*bFENHE8rMF7XIjzfFy4K}R#<!xkUyJaa3pd<aY`vhS;}%9+<cR*Xr{9Y-
z7{(XhX1EpO@$9kzUf{b&#>iQo8!nTmK$a-qvF&n+Y8t6T&U@=8KpH!wDR-r{RzNxl
z(kz2C%W0l{_?96@>v^^7mCJH-)4mJ+)w19?DygBr%lfxSxyLJu`e-1^F-RWmGEpNv
z{jG+0G^m{~@@D(SboaX&k~_MR^`=|ePR%mJlwmieOuOkL!-TSE%m!WtpCKrDvh<om
zTvr~*lKb$U@@vw)8JA0-fp5|;j+?OF at VkH9gAMQf-fpdWCh$ut&Q<5z=blooR-IsR
zw&G{HJ9%Giwo-V%=^FUzhhv2PadSQ_<;T4Hf5)8>VxXsivd6x-+QgIj^du&qU-h@@
zn!Jn`SLY at FUPe#F3}4)v3Mukv3e!>YI=rt(iL35Y>%o98 at 67L_PAL+2uS*THpZu}q
zb>x1Zjbub_9**+;ND!ABmY^0t@!W|pV_g6s&m27waWYC&iEf=18$V2A*iK$_!?uo|
zxaQPF-9$oc{JjJ3I!hLvjI#0ba&7$lc$<)MQ;=uw<OH>6jE#RJ+{Ql^YZI1?bfs0!
z_vmPwpt8FrTHh3LQg*n;6G=m^iQO?cY1TgcF7ZB3A}tyA>SA+;(lb$1QngNG4qx!7
zU5d^3Qaw?rE9YDPK^WXVtfHE9hZibI06B<;)V2>S?duQxl6rD@=sYj>3WKfEko at G2
z;$&}{XRu+!lRqM#d(axccCanFQ}J at zs3*R$bSUGf1c>>@ff?l!-yqdJ4l2hz5~0%2
zo!mv2PODMJ(rGP5<2iZn|LU{rBy8u{jrA!$yGbN>@^9 at ZZaIANM*fi`=B{)0rKiS<
zndTf0XS|o=yaThe^F6FDW>Z_$+5-VtDpx<jqvTKzo7D9w<6=ZIjuCZ#pS3;QXMdB~
zoIK8`CF6LluJS&uKF~F#IPep!?_Xxj6^e+8z}p(2eU9g2|8a4*q#7Sp;H_%uo*!ry
zi_67(yg7NvzxvENq|mDvcr%=nw2-rENAVw<VQI6!(W74<6dU_YVEwQ4DK>3g7>Ch&
z(?bsQCgX4>d>qEcScY)h^IPq8jhknT8&yfh<y7h_w`uc9c;zjgW(oV4y)tzzrV?S_
z4dX86!eL&0UevEvXs|?b=RNhS4_Yp9z=!%#wyoGX0=@4br_na7F3u at A<~SM0M9fAC
zLo^kTY=|S at X{w3!#3F7EpC%SN*E&*Vs{9ZY9hZhU7|iCQ(3*!-e&zYxtR}>oqnhuU
zNaG~8Bh at vr9<!a3PROyqRO%*qFUgWDfF$MnhD at 0!CZiV^<ji*w%vU%^z9)<ygS at _V
z<U1xh(jXJOvQL5<{F0q)<q>KbWyzi&Lpd#!b4m{8gH<Tb+0dC^a899FkNIa>Z?B#;
z+Gjt<^!9xk7kc5#dNmE^-I&k9t6t!>^S%AD=Jb`bxhUCZ*|#VC6PhvJw7i#WkBPrp
z-y&9SzNq|6Tj{f|7j;t}33OhbbJTmtxn=5h63t<*R}W987+rg#b8PK6m&*CjDyH@(
zig#sVam(s*2+{F`(Ghsk->grev_89YtgoEf;id>*MX%&hR&S1Lr*qU%cuD(88 at 1S*
z=E`)A;wrEwyVLpRm#$?Ze^g}ni(^zL_c$NsRXVa--(_}=;k6v^+UC5rKE;{kv(p at 0
z3$_jK)ne58ZHv4))`Nucw7~W*&jsreSl>&N9eGb-6*s%Un>%I`n>%q6+nYX`t8DaU
z*cN7-rJftvc2#t=x#vrhHgIXnfNG{icQV>w{Cqn<I-0wDT@{_+P4DS-qO9>4!=tQm
z@^7pcJp}A$5TKs=*s>R3EN@<hab?D_0|SiH)0fb)NUT`mTGnkb(POsV>&>aeEaUbC
z8|zx!mB&x9lDnn()Cub00EbypGtz&3U;sa at M*NfX#Xad~Uy&Z31*9)Tddwc0SPuc8
zufV1FPq;XGxXieW%fGMCt`9cj^v}1ao~t-7U0Bvy?z3A07t1Yyj;(b#b-i$erS0ck
zXfIkkUq%buE^8M)&EQ(&%#LNn!8zCJ_ww#PvnMa=%qs~W((x{%r4>CEo<GpuH{)lA
zTRicHHR)xM?Tp7+d$SmJ7B_S<j<>2hlO0288m&_#d%|CO7Ecy;mm)Bt;hs;%2VyvW
z56I~UCsl~-AEjcL79&ZW87l?Mt1}0;s+RFJH;V403c}Wz;o at e_a_BAR;8ZCj$kenV
zTr)~+rl~{mIHwtm&A4<<74+#vH&G1cqr~y=n-o~-5X}Ec^pQP=sq2_)LNrGq%QHTE
zsLV&j at UzTI?*n&tQ$pSdx-KD3=ck2LB;ZQhHo*Das`Qq$sb?82JxQ%Rhx3~#ldP5L
za;a<%mAuxHHk+?rYhjHPoQs!XE-uRwan)L at heqn5S+<AX3B_tO0&6WE^Xu-CL{#q4
zy!0H_TITMxR>m`}s+v&}=9vG#thI`<){=7zuC+1*pGs<OTkcSWX6ep8tByZgYb}>k
zht^sd!&_Bt%WFo3(*D_6i>@P4w&J1GDl%ee*+TX7{blO`v%GT9wk@}`r*D%ra7~gH
z_f?Y5>{!L%p3Yl1UrUI~x164J`t5ePzfg&xRc7?byzyst^z<3n>83N4Gdo~o7&|dL
z7~K?wb%ffdLTgzlzbk|5iM0bQZQjv7w5pP~{Xcb%+nl%ODa?j2`q35C>My8Wq=&ro
z(O)2Zi^Kg=YiH7)9NJpw?S%B3kqdDQ?YzUce2-&uIL;-u;D#AS%nI>?JE)u=+Isu#
z=+o3=ba`(VlZ08tpLmgCa%6ALRbHf+DKh>lFH+1x8Gn@*DMpg<S9y_QobU?mxzZ~X
zLq{z1YSbUY&9hstko8!|<JG at UpOuK+Mh*0gvT_Q0ft1NzXD^ah2Q((jn=bpp`ua^M
zz6kr;(2|@ghoPxTnduneY20HN;rnWd;&xCiffMJxlGD-4I2FpAW`sETuI9uH4slXn
z$%zpz<1|y|bbF8!v+z$itq*b1Ud0I>z`rUTbMk6V!P22NuFxwBk6s@>MIlRqK3E=p
zN?K2JZdQz&0i~QkM`G7<u_QDKQ>vwv`@I=c<^|4!j<puE3D|W?|8I2QImwRmq1lPg
zI3#zaJ`YdB*0O$v2g{NzfpZf=<1+5sKjXmOpvF85`Nyh?T}*wWGyK(+&WKl6p{3Sg
ze8L!g(JbHg#7#)K)y3eqpN%LrAub$RB^zvsYi0n~=+^YHH!A;T+85K7E$7C8;}r1F
zHYqJ_EgA9{7`T{hs|w=;LOzncwK?$C!V(P=o}AxDTgRyP`N{b>$<@~jN^`(mMvjTT
zGDe{d#q_%>CMy&(1oHOIjKGba*1*i<dYNP9Rq2+7(q&(ju9Bv^^s}7qdiT^TxYl~p
z=CeCk=vuVSVTf-fy`k<LYb2UT_ZUmtai>^(J{&9VJi~2e6I?sj)oom;jK^8xyUY0T
zDP{T2F-iqdPE>0mp)uq5n6in^M~qrWq#>ou<b11ojbUWjBs!n=*;^~lN^gIdh}%TH
zHl%3sW_pxZZILN+p7~goFz-tFIg>2^iEL$S4y<Azp2O->@H-smm!isUk-3-m)(1Bq
z>x0Sg3&3W}EZ$5|CLtZ>d1d+X4gtKU2v78t<JaV?z;94Osh5YM2|V(^V*+^a at F2ri
zZ^ivzR~lBgKREBiK8m*X&iSl~^{t at V^R1lE&S!ng=c8;sN64Zw49}De^o2n$1AO85
zO`>B&S%04zzgR;*G1QB at llZa(sl#gb34N<t4D+U9H{uALjTSV^zdv|1GKYAXL!8VZ
z7HKnS>=POCZz_KOD*cb4Jk)jl=$)qf-p<aL@}i{YwGK^JbhYA2E8<R5E9$#Dg1w_s
zj={;Om?w{6kLV$IzG?VdbC~;KE(iDtPkzVg8OAX3$$xQLI|KcEkMC#D)wow~byF;D
z%}=AmTDmrezXoeDwBa}L9E7>$7kN>>qFlnUbX>)pNlnLA2a`AAj1!(;_#|lf_p;nr
zj-}&m-cx5bOT4)XE9CVefd;;?&f!RIyvVlXpQL*E=c-gk_$;5qI9QD8T8>b at G$n5E
z;4EVS^bssysFw(8C978})wjrcp=Y57I1{Ud5_&UZa_tPHYLe5^y`lr~wBwd-&2Qc<
zHnoC=&d?A`L#Js-Nki>46o at iJmE6S3w{MzM*@-pnJZ{P1Ua$N$67*n;=zaAQ+|+Yq
zCQj7fFLBrjc?foZ-<^>=S5=SX8HO`N9DbF~PBs)txGlROYbQ=qY9pKA-|J3)>JOR%
zslmgcLwfe`tE;(chNjF$ib^>hO7YN6#z>MP-2<*n8_d0O*k7f^iOQG-)9KA&+#AK+
zV&AW;nOTI$<q+v at fC*9<ZZpF(iya=(Fni(10~!PS#?GVRe$;|BRZ>;oE9GMbAn!XG
z*w5%`)*M5`XG5};6{|t<Lz6Z;vBGgEN at C%831D=>cMx#9{G!C>DJvYF2uXicOeVGJ
z$^~?<iQYM*p1V1pWG~oIgA*fB*$ZAT!!sNuEumV5yv2l}>ytUS+edeyBn57qj+Pqp
z7F0ZkQ`K=r+7;K(o8y&3fLTN3YQk-Yg7K(x+^`JUjFQ?f{CF6NLY|D#n1Lr2;fOpe
z?xdydn<nTd1Ls?YF*o}siN_7eg(K`}>#q&QSe0BD3c1i8?n&=`H)~UHmJRQtWKWE8
z^LqI^H6gySgTQxl9n-c#8Y;P^ZLJkP2PBRt(n^xysltTTl^2%PO%lywiMaft{o-=m
zAmXyY!#fllv*eH-Wj?Uw%M)`?Mxgc0M-M%Zo`r8+De)f7;c#hA-q==rx2DXBnA_z0
zZUK>{-ZQZoT5da+m7VxHP9SY)YaE_8es>M($RT1cUA at GfMu;e37fg$j9l1Pu2p17s
zsu{7-P46&<(KMF!L%-9fINYcmyoA#83I=r5jORE1 at hPRoM^J0$53>H_f9U?0_{W2w
z{lTV=ijbcq9%C>&1u(vlkV`fady(>@yutS)_ivPne)s3(&)9WV7PYMylN(mf(h~&U
znA3!iRSY4U0J{P005yvbTmTjWvH^JjcwxyZ1tbG~Jw7Vj4MVu#JEf&K5zi`slfDC5
z0A~R#(#8SC0O-l`BEVvRA!@<neQQ#6*3$O%+Z2l%xMA4yLWp`%7d(zO+lp at o&^Fs@
zh&$X$%Xmm7jmS&f at B`M8ub?Jp!-5dg!c09ED3zkn7yLl$aKm|ggD?=dht|{CB7C(V
zOvYZ=Qg9;U<nW+Q971k?38yOFgHBYMYx2g>{-oKXq^)a1vxKw9x-gj^359+H$2>_P
z$ErQ8l9GlxInQaiC;GuQ41L at 9X`kdNCw(gAqcz-(mY;?+>Dh at Jew-Q~(9u|m7t!i*
zJH~^Sv@}>|iA8yYp7(r7fp;FKrNhvRE!`6l)PbD$aVe5YMQL~PHtn5sHs;-#Z_{3)
zp<_E)oHO?Hw!g3!p<R6cj(pO?ou~H`8H^60-18-T(~1edDz`AC>gu85rEt7o?0L_Z
zBJloO-&9mjw60`*97pVGDm|sx6G>|cErIj=*297Cr1vC0?Rn4dgdF5RUyhVpCza!!
zt2y=NL^<qasxzBrbkdUU=;3JUq%v>rd7sotWnSO&Ztld_wMb<T?-<$Qf}=$1&hYB%
z-C3RZCLVdRI|cSo)tynmJlqEp-Wd(dy?rndd2hi&16 at P=;3E6-4%Q*g{5|i+?vGrP
zNe}kh2``C1Ue?}^h7koBsORHi7<_mEZ|YRGi{!mRxnA-cQqdL?Hyn4Q8fH&Bg;voF
z>ZN((*MFQnX}!aXxjI@{6xDdOg-?(M(e@(Yj)d=@NbRL^G(`s63T;t_<OMlid^PdX
zQAy)b%CTyx+vaJ0`zfc@`f7_|;NjNBbHKbyTOLj8)w?m$6=ZZv>Bm}T!}-RjgNal|
zaDF^{>;}1Sva}z>SA%RMinFO>Vbu$Ag6ZLH*NJY-o~9F`V$J>C)6j!2#^=mSW6Lmx
z{$^P8)lXt3TFs;0R4Iaf(d3m at JoR{<`J4kDUj#sEoNt8BNw+g<=M-vXutbd^;(`m`
zWg#394;xZ1xYlWThUIY9 at -XGwInWSy!R1Xo7)807bTI*NT)gE?%DZ|k!X;RpkzkHn
zwR!i~>?aB`mZXu<klg`Y-iP at c_~8Ek7^Fv6Nk at 4<pZC&k0po+)x+74j!EQu#PS?|o
zqi|9($sKPailp9_8A(rSU>&2xI$vBNIW28pMR~AlTO at kI@oV=`znrp&Xzuc`ZiQFp
ziQpB(&=-@}B^|!NGtbig>Kz;x2=Gh9IDF4yA%~r5znc)hj`n)Ldku5H`U&%^J5OX}
zD|g=yFWe)+e(yOxxBoIG*zZM<ehkOvu-lowqZKWei<aqc-qgGiHB$^D3mj6q6k%!K
zF^bN&YIxe4*4R+<j-By4r(sS8of{&KWbKTV=V8|w*dtjdxKqQVbO-tgq)Vij;QZ?d
zM&BBq&cAASnFG?$`4 at DZUWs#zF9-gd)}xl~A?`>PBzug`%8q0qPt4Ct;+m3ZOE4gg
zazxKOzNRgEQVrJQn2Dv7#L4nv=YRTdNc%X_(ljdCpVr)owp-nY^Am^-(mhGF=S`*3
zf^%Apy?NiMv{j9pFh at HATQrO)!9CBHYavG(F#5a^)wza|B{85yEMi`yBS}qnu1``P
z-c;mf*;Fb;pfv^4V|5hdziGK6b(PyN5Zo3W(aU<i)9<9I4C71US{e<hNA#x#u4;5l
zM0_xZMRF{AM2|fkNC26TH~7XN_gTT*J+We at 6oFl*_LrwqNmr?4ozXOInh$aqKkZjZ
ziL$n3XFy|VwEwBO6JVn&l#)1^o^oeBlS7&*3u)$&n%vJb5$0*xH$6m4g?z9U?W3`X
zyhp(85m?I;D9IB?^q#b8W>eiNl`J#HLBloBow6p^@023MOv=g9zWoxFwZ(lZ_A+T`
zZ9@`DP5ZOo?vwSScVxb}9D38EJn*OWwy-Fi4*qhL--)}+`PmD0FQd|DZ`i%ikX$lQ
zij=J&?F4%Y`(q`U7)z4^DvTodc9k+7n9E|ix?@zZA0u+kMyY3?NXP#4-waPp{|zlm
zg|mK}yIU4Lr>Q2{q?qg^vhAHlo<k&!cPRYw=)*SuLUVwv+A*>xmt+QQPNs=MKS%9m
zHfntcPS4$1g56B&u`Nk4Tan8&5x2#5DE*DH^<qC3d{7>Tj`o7Aj%Bfyy&e6tUJO5s
z(|j(S6hm{hv~SzxZ<ODoyQSEc;BV}t`48;IY<>}YO$%z!x7Ykm at vsQY&dyu_?lew%
z^~~y{{$XkR!s~Ce5sk`EFc&VxDu~XFS?ZOjMDNg=1M88$7j}bY{@fj`rR`hXm4?q`
zGQ3*?dK=c7Q%;-%Fu%6o99vA;Ev|`1ePN_c$Eb1cQj{2 at -WqwB#Ym*nVP4ldjMIwZ
zy4<|P*5TP>TXW#0u*hDIVclL2>xbCAq5F1Bs9%NetxS;p9Xam!UfH#aLh)|+G%VSZ
zT8CxNXdRC7Of^%#osK2)iBX(pmCxqNPn-}{!N<YkgloB9FS$i}gKNH|zG%m4{sDMX
zB2lWbmbPPSQIhN7=eWVYjjp}!jKYfVji!+wPrx~O+ at x)oW-Yc0Sm)^)zBG}KtgcL>
z7I%uYjCM8C)QPqbBXfCxa&f8X7wHhX!5k)^pQrbXczVysGyu18aTjnu?ihLEK93FZ
z20onL(rwr$f3J?ma~f9b$jR`;8*k86p6w5MUcOm_TLi^ov*C at hd$3!|VFlX^ZQg4~
zFJf-M{5+=Y-UOvx{5+CV+Nn=yA)SqvEd;K@^Q**)*WhbJD`aca!rBs~{(O}f&$~%H
zugc^=WtYow541toRVCQV$~S+*6LYbaSict26BgLZ#ogAoma9$TQ^fwMbvy1g<17R}
zkL8St`RaPyHi9J+mKBFu+PAEtZwfcdx^Ux(i)_M4$8UZB-vzL)l2y#V$;tDWV{bK+
z91>Vj|A{M_pF!fGVb<ZVkDgK(_!9Tp51DHTF;zW9rtTxxibIWxQneXtu0UJC0hPLb
zFur)wzGY^;AAUHr&8;iz{rDyw!JX`M`pvpfp7?5MPo6qC&jqwz0xLXvvl0{K8xoXE
zxr9Bvt>=Px$|GR`Q+@>>@hU#~usf1a%#^#rsND5owBIem+68w7iVe?|OwCrl5Qo*+
zqU;4P%$Pcll%O at Y{rD;{cUzYdwLNoLIVL&e- at 232aPM3}7GOn&QyClUrWBLOm+)0a
zrqRy3^LM_JJ?RDQ&RjN;aCEf9YMjGLS7FT{k$K}^nBvW_JKfo=l5p<0ybUiD(thiO
z8Jv>9a>$Qt2I0gJl at qIs_$uFxo at D3ablk|*){vdK*%>duf4lR>%0_-3>Az9bLIUjp
zSW<GyRP;|Xofs9QLC@(ceV*5`qulnR(F3W-UYdjNSDY&T7(31IGXJN7_V&JCQEp;s
z-(QK at 8;{wW2U@|&Qqe<w4)_AaA0fOO9%eO-hn36m68&|9N(bK)#wC1NG8MKs!m1PD
zgE8Z~4Fzt6+BM6B8+o`dVAvaNDkTf7#R|T9%AxSp$3G4;5sheR`|dqgrl$>Kc-wbx
z`<<5dey`EFAnx5{eMV1xOoip)yj$6=j#QH_;OoM;jgjU4>J;?i$%T(%{dy<$Yk-c@
z(6)mV)0d!!xD{uh_2`vo%x%XMc?()i@@(Jg7cK2Wys}RPINL(Tg4waPX)^Um(KK!&
za#$>?@{%_!rsLLvJ6Chyd#kDVDa`f0o{6zM<oSYpx3;h+afAEoTkuUuWq{u72>DF3
zp#7Zn{D<m&gVjW+?E7%rJXj)F-R$Y}9BHD6eODDu{VeikK(0VQ!f)Gu at O3`;t&$63
zsplv(54fNDwxn?E>-~Zm?xh~Ao@(1Yy#Sw=a~aTgGSIcUQoq+B(;lI5@^^!;?Mczi
z=cB9m1i$?mF5mYFm(#zFnv5 at SN2~Y3KP9qz*SQRMA`g6r1HR(Ea?+eQOx$59qk3}1
z98sPJ_Db*gi(KhRf7nz7k at GG6U-PA7F!Ey_Ei5M7!8_zsHp&|}g{E@~1u>N}_?D=S
zBp at uunk987)-vUl)_KqsdVJijj9z{Gb9t_dxyD2E3oGzRpys}P$b+vF2g^h0-1wSv
z at GU#>Hr$NNiR_BbQ{F~Bo^+PmTe<;%T{@2Rl#cN`tE1fs_(BEFewM?pbsOi7%3E+7
zhf`n#_CUfOFzFO0#S+XuZl&#k=F^!hTL8hjZMv2$JArkVI#0P1`$mf#^vfze`oQAO
ztwjBNK<mfS{@lH^m3GHg_d{QHe at N~JWsYcj- at o5S?gyy`CD;|T$jJQxp0tI2{|eRP
z_q!-9)i7>OO)u)B;qNyDHEjQvshBZZmsAqkr)N<uH-6Tw<%dPgz=B#n_Ca4QXGOZv
zQ#}_KlI?*W*&gg8+XGZCssRp`Qi6G(tWzr6?X>rJZaUSLTvjX=japaap|Q}<N~w{q
z>O^;l_oD8$^nHFG-iu`3L*3J at qhKFtydp<kNN at v1TSdAi<0g-y2wi`@Le_x}{YI|*
z^;I>4yJnU6;+^OYz2gL9<=?69&=NAbYbTWReLbb(`s93{oHH!Uszc7WrG%Tssm=o0
znrjQF=KpmPb;#TGJ8u@<VoM>x7a;lSr|np2?7GuEoSwtNh{0k$t&T{8*Lk3Ap(4eU
z!xB#t)~ei&{hkD1xE&wiH2y*+ddI$<EcOl}VY$3<l*r(#pE+3Dv*MyX?dulq>7XZ@
z5I5ftvEw<MWIj(@xe4E848CVo;hn+UbESJA?NM7-(v?5vTZxiLt)*c@{Z@?b=(phK
z9bYytIFnw!2;+XSA9J|YH>mg968LsF<%2Uo?H_D3#4Ot3BG}`IS at bgc^~pZk?~N}k
z_A&Tc;fMn4^y3u$-FQRoW30BzbE+uoM_wJi2}&61ja!YgRQtU;c;r at ojC1!mFFFX{
z92#vS@*e79Pod%cnXeh%nE8+F1-|{2_%7~=CVt*~1M~2PTQs{j;+x+j0ipjPm>}R3
znS|Y;_vn`iakFxhNbl<4iF2H|Bf^t(DKFXQ$|W^w*R_-%J(*dZ0{;iazb at mip`&>Z
zZU at C#+WvV1;-y@&3BG0dyY6pbbTaHDav1`Fo&M(RM5kLKwxl|GhH(5IHRg-SWrjU!
z(A{K83B0+7 at 4OZk*e(wDH)F4-Ux*LB76^**Shs^t((U2pcf%gu-%NEeYy-x5=sHA=
zJ>#;QkgNJl+*+bqq<fn|{fX|TgzQA0NO#D6q9J+V=+&9H!yARw-M1J8Q!pwS=qTy8
z(^>9_4Ag~HN|oH&6p<{`OPOLbLX37RW+e}b3IMfprH!z09-O%KopN)~_$mKUtjC6l
zDN+U<VGFRM2n?+)b=Uw2-;{M8#h5xbZ-es)=<@RxI6snfbcYfxY%RtK_%pVy_2Ych
zuqFPZ{<$dEBU`h?#x3J;zNp+>L&yo1+hMQa|G}$IW|~W}W4A;k*fWr*E`ERCr1L+>
zCpw52)>@7)u%_emm>GEZZni$Zc`5qGZH~hnXRk?^Z?8fAkKsFe7I>Umz+qYNOf4J>
z?Z3ZZB9xCvS}_+jW4}*JL{i6sBMDJ4l)Grg*K6B<yI6VP^E`QufwQjeID{UmrdA#`
z{bAUB)bxd3o%@mrPER^_O3)Hm0s4%`d=<E#z*K(ZO)Z&+oo`@xg*v<%CwWjRtw_A7
zo5%d`y!<V;QiiiV#^FmnPhX;IjHfRdlBbQpSw;9C<+rG5S(Y}>g>2>PV<hZWt%pk-
z|A)aaqIIQqnGbbQ4`O$o)o)tb---JxN`DLfV&?g6ELM||629%G!I@$XE&jWa63!y4
z=_*r$w_$W{^v7x13y5w at dupuD&MAn-rWVy01?l`eD*<1v^`X7PhQj=$8d`t)W4ecj
z_vq03-{oBye386+cToN=@x*01?8qrw%f*&+74=)~lXg`lY!&fU;pv^|ffBLLKcb-0
zl_C!Jrn*%=;0y5;Z~sT=E#>bf*Zk&*vn^zU;nN-sde30^j7Mc#sHC at TvBxT>3&R<J
z3Ln$Tij&VNTwBH6xS2rwAK?@+{JP=&aoVa1JIW&FiQM)>yBj at z?-uMci+MwcU*cPs
zlZxGT&n2wp(WA;e0_M`rMtFvAY>c42DLn5tc3wljg#C1m2Odg%-3}Oxa7=~xj at 8`1
zdQjJzcaCOfI2-rHTCtCTU9dM@&Tj+o)b<CBy}^q1Lch}VX2Vh32kibT7WIXGkGW at J
z(Wn(;a5Ge+_yYg=!Bn*H>(B~DG-dkio$2`AdE2qK&^N@$Dd{<7n(lOOI={T at IURDy
zBQi(j!-&k$zG3<ka{6ce-Mvl>S_S>GJM_X0q_*3){ODby(F4V-PM?N*`s-N9DcyZk
zIan76RBrS5>G-38om%0uwMI)ix>xyRm^td#e?jWs>lxXS&cM?_$05x6U~w3$8}@~C
ziV^v#j9?kMJr*i;s1)h+1da7Ytcp;lw%g_ZQ3JNe)gZUQK|ADJ2%}9?53y<~{<n-r
zF-{$T=YJ${m?0^7L(KGbp)hXf6f_~MMoC{sx-p^fPY7oO!>S{oNkka=#9-I6;3kB@
zn`;6MO^dJ+bzwabq#<Pp;|qv#o2W$iEre;la}gdD#A}v=j|pMS9wSc!|4k_DNBFZ~
z7 at t^=DKG at XQEuR=mkIRIxJO&SBTU<z4dL5Dc<5kS4#F(*nh*M22va$CBTUPVv at G;t
z9S8g6%}d85n%A3tf>-Me+he%tINiE_*)6;>$+?Z&pXl1*Qch90mCoT)I1!f6y-rfv
zdOh=&wk9L>t}B1>yYr$sf?jgAopjgo(Mb8Gd}w{8ycg8dg8TW|=tW?qI7Jos0O2#C
za5J5^V4gzHbHM_B-qVL}cOSYV*fCGE<(k!{`0^1#2{^NQgvXA$Sxe4awdFj%yL>~n
zfV;q)IZ2xVk6Av}zWH9<zFmNOR|}rSx)b{w82xV#?SULROj`nnZ~M#bK|BQg5P2s7
zbGfrG<|V)SmBi=j$|JD%q9r>HDbVe2hV<V;;$pk#o@&oOL{HX+${N|-@{Wm%#Z}^N
zOWVhL{LSW#$dMBdSzQ(B$cITlSUhcAU!gnEdQ!2m!PBqP?MZOqPPitrDW0xs{uyUY
ze<r}&N&M7`z=hC^^d2$Gn`#mR0ndNL2-k2mPN(u2gmL_T<h^-(R7LhTT)n0{YXe~s
zfpj1&B7_7`qQ-F3Gz|>`%^o at -BrE}U99&RTZifp52s;LJ5E_>l*NK|R5XG?rDghOB
z#&$;o<1jFzGf`AX8 at r$Hse8Nc4P<nF&-gsg=l#5Ybl*Bvbxv)kPF0<%I_0X`Qh(Xe
z^YlW%?(E2m6^D0zvrc&D&zMJ)`N}21XUDxIgKrVaGor;O4i>Gj>U-|np?UW``Mwy~
zm4j}+J7Cq6;a24Oo(J<_#aYjGGd*i}!XRN8LT|)wWJ%7855-Gj#bHd}ANy`qt--r1
zz6<QZ+d~6u95}h1fOFGvu7N0dCw7G9$FP8KBxuv5vo^+0+}`8iOWICJLhj8oQd0xW
z(6av9iWXh%IB~vME<TdF8S}aUm~W=hd=r`qoPlUN)s{}XIT#h=-(<(MB{+yYUV>J{
ze#6e$(CJ}KCfc2h`Jx)-Me6{SbDe?07ZuG#XDf7Pv{W#&dE*DfbK<05qsl?hze6{!
z at RR+aY)U=Y3EZ^~zTmL+X4;p2Q<vNK{VxTZrTcmzckr9ap4nE?gKQw}_M%GM6l~7D
zdC|IKo#Da`8(C7{S_U06EQBnofR6bGq<aWD=JRd)a<5&qj<nv3Hq?)%J(fl5F;|Z(
zn6^3(yqHY(PpD158AJS9p_2xIOLv5DrfddYp1_zbilwlRXo)u;p`Q1THlJt|VS&fZ
z;ttb at ZLxTnwG(NP=48>C9e<$8?X}dJFsCSiJ+prJPiW^`8Z^MS)ZZ1mhqiKK%}n%~
z67cQ$DK3)DQSBAsfR2U6#Da}G58<q(nP$WVYvINV0?5muyoV>&=H7FDffVq$1;ei7
zDr42sKo`ttU(Yc<q!(VaShS}iQZO at rV@Qr^i2k^p<d5w%X~<4|D{IJj4!ZLHc+!?3
z|9WtrxC3^Rn3=TI;c?(XXwfm=Lv!uhA_<`PGRMGpLUyT(T6B!g2%WZ`$~Yb8>lgm(
zw&iac{*rMfUgccdY4^F;&)~I}5(^W4W4F}eCYVL%b5t~LJB>P^o8F>itk($(>=p+s
zcnFU_`I at BvgDZ7A(>?iZJwIDCC4fC%$G5(-<=?FmPtbTM253a|^@oJ8?LUarAmbDI
z(4Owp4}UUzt2?Xz&M<j9-dl)7o+VA;)cr2Ig)HppcHJY`{FXW$%^#rcZNv>#0TwWp
z*aku8J`&bf(K3VIuQMZ at ED!d=`!mB=r<bubjJ-NmGaNjgn}?ez_{|MLTQYlQUQ%nX
z+?1Ig<t2TO8<jIZ$V>X}CVbz=_<IS)-}pS!o|EuHoW+00OFH`&zV$d&mNKm_cki?p
zJ^iefIz5#MsTu3_br_YHMfuv5uTZb|lSW#s>B7UsdcD!^^SIFU$@Y)WgS!xsNSZhh
zxr>Ny%mHxcPGqj=yDCqLhY?<qcOULo7<T#nl2lUHS2X*vOZ|E$(M&d6UOSFi;@J>p
z{1^*utM7&7*0ESIkAcMCdoY71EZl}OtrnbVEzvO#!--a$O07(297$aK4J;<UHBv0$
zr&{+$PqpqFL1$XAV}moT`@VN9tK=tIQO{%izjvft5^$2$>A$0D3QkAiyr}2Z`n at f_
zZ&!UIohw(YoMK*PP88S0PPCS+JWOX#+wH{!WXWijuqq#e^Q8i`qv+qSRk+W44)aqq
zkq%#)iG)AGe75&LZjwY)Y~n(rU|5KnuPgPh_gl-deUb3qfMt_zTRct+W-K(87=ng{
z86`Z<LOshwTx+GTGRr$Y;p9Tom-;dcdH5O-MlBe?m*T>%*Q|%~CV7`jY?pK2b+5<$
z+3bJHj}r=Fpk|tfF|1Mj-$NpF@>+T&Q_u9ymil6?X~EAbrQ<(7nCZ3jzFN$$9xu_m
z0~Y+OM-p5)=&z7g;8R^HzSz~Ocw!6mAgSOby^)C`askbwDAt0bC;c7mzX94}j1%tj
zlY3yiN)h8}EjD!!TnYFkO8skLd01Juf-}0`+qM<^Lft$bx(n-LkNBQ?^5ZaUGmL}Z
zw>W9`yQ+7}riq5|zv^$TyLHC{RnOtYA$#~kKvQ;1uDY`<oeAO1^;7Dww{M5eNe7*i
zk91DMKqC$`?4UumYizVn28n|&LI$#KkVC=_LscL6S-2DuF2FD<82Iuz2;DLJD}Ep3
zPP*r#-O!JFUd>Ip=OcwPc5`mxtAaJ>kM~EsPtnUG5zLU3)Eqm^+i=nJG%TiwK}bDE
zEFWX4blb9Mj+ClnV~`eEqPoNgxj-ilnl1yRhpnkZ2W*)&RC;Xs8Fl&O=SVL}!0yP8
zMjPIEWBM5mTZ<*tw(_nzfvjCQ(iiej$go5QyUDu0lD at DmS{cIb&vlJTzMFY(j4QBh
z#29 at jj5lQ{^fvxqg;csr_8O;@UgLDxB4=UUb2M_Y-f7cy!W&q)uj;gQvcdB2w5_)H
zjDFv at zF>&%pnfyneZKjl9K%ELd`$QeeFK!RGRHY#ghe72UN_~mw+QGq{G1YQ<%)tt
zZ(u+l%euKbRg~1*ovBbM*_aI at s!f`28;zAu8UA6Z0snfbL=^Bf;Ae#PYFX~ECBv}>
z8-!Ua&TKCk4&By5oCd8B8?n=3%<I3Z0`l_j&=&Aj=&DU5wYy`DwQ5uK(x#NgWRfzg
zaMA&zB&&rU*mEj49sj3;p3Is4_a!EHQqAw-TnHaUyCFo@|KN-o>Cc)HtF!PHp_Nv2
zSjnA-M)z{}`8&TQy-zjHE-83Js<R-=#ws)Igz7BJHX7QtNJDeeaHf^|C6fl=9~wLS
z^H)I7bBt1dF)aukO!sT(1rRZ<GK2b6tS at b8W7K97@wy<@aCkP=aQHpBhQk54x2rWA
zo_28!^Z0kPoA*b4dJK{<n$!2NYB*2fJe@^!=Q2DOzsdM5B7fXQ{85SD3);X<O+7MA
z-c(pO at 4fglz;EF;cuHn}?`-faKVckzWfeMK481PhkO<QF1a1}Z{+4w=G{U@=jq-gE
zXc-Jx-M`;x$?Rs=SKUG{vhDC4=^5yyv=&aQ%5$3_PDLo~avr)myc78*?w#LzRc6<J
z+~7WUbRtTzgI-d?tf<+2?g(jQnJa}cV+p&O`{JY;r<9Mop(1}HtrPlUhJ&Rh1g><S
zd;6Neh+Om0t0o&+mUnR^Gk0#uUtMV!u;(p4fZXR+=o+r6=>MMCV#i^szR(c==sx$Z
zJ9E*GUmZ)mP^<HvQ#7kuo%gOK{`>JOK4UwBeA!`NbyWd&TtvEyhjl;d{QU8z+*@zC
z8ncm}v`&Xj3&^B%OYplLKkQNxf5YzY`EFft`vJNmcHK5x6@!)oGe12vv5P;3#LI$2
z#EGNDAG<~c*s4_xG*-a+rv%NVzcJ6`Kj^jBcBYe~dtoWgg0(8k!<v1xchK{3E<*<F
zBBz9dCg>!%%O&3nzg83aQ!Ml+B{WwP+7=6KQ$nwy{Z^a>Ou6?elnm?tILu_G+9a$O
zMIUAwaRu2Gw}V5^yWfYLwc{I<GWmYAO}EP(d7~G~e#p)A>G);1BS$flJ$EPEJ at LaG
zr5_y<!@TX>J6|<*R`$5`uu6yd%%2{`ZUc>_I_!1f6bItGE8)#8NXIzL3ov_J8z-4K
zY$`}kN_C%K6M=-0UmZ<yViy4Vj0d1oqLY2!(K^+A-j|6oV6C6<8gv^iaHIYVIVjI^
z+22rs^Gc&+w+Z at ysgseK8TZ)+A?3bE;TTfvEBhs4&wtGuG7X)GxRu1CyXNBeRV*Jx
z=*{2-HjUP+T=vC3`%G^9vrhvL>uCMA$j6%sS6?R6vTTCitMaV7qFZj-^ylbI!0q?T
zq1Jm4+Mu`(!2L(QFN7UK=*{U(J?w14isK7GOGufyudf02Jfv|DyCYqdv^qK2-E<pZ
zT4z>%4ZhPmvsFU~#*Gv948{QP7fxX*wK)Lkk!EHG(xbgsjV(z2id;83;XnR!lvTF=
zMwZoPko7ugA+&JaVKLOVzjGNA*#2#R&}YdyHf&;dgR38%Q9;dgQgTT4D~%Y*I-xHZ
z8 at 4ud=HG2tm);^#U&C5t&AWVUdJCPfCV2Hn*gfNIX=*_Z7rGW>*WbVzr4!-N(6y32
z2yJfaiGDI)j%V(M_99&p{0+z8UH~14J^Iol>C?xNb_r!Rv_TVOM~l;3^t(`Jq^K{j
zt-8s5E^q~{5_GKI9JTxxLOj+YE=K8LJ<uKb9;2wij{PO9Uw_)o_X(^R8Lr8 at qvbSq
zOin|mOZM(;d|n4#AX|#jL?;>X4}Ql#e*=ofK)7-LWz}YU&G>Fq=528jb{o`j2ItP8
zP4Zfn(z at pZ+H?Q#a^-Fam$prX$U}3b{FWY8FfGkzNINNyl$teL_lMl)UQHqCi at Eew
zAJICvnW(+<C-~`*&pT at KsW&ZL+=Q2s*qt7{^vB_OO?0yI9>8V}&u+>9yaI3>ho?04
zf;L2cKd1-0RWxI~Gzkk}k#2#>7+Fi_wuJ=-BTlD8KGgI7UHreb%}4V*<l`Wf2k!jQ
zZ+oyt+587O`)g#Z6I-f#@Nk at e6f`te at c9U-S&G9;M<cPW1>P%}fy*&Lw>A!X{0&%b
zO02UR`>{^dmTGsU5jru}S;r3GG|Cq;4%tfq|8&yZ*nyJ+Pa8TfWe4!OK_@*E5B&CU
z=cVES*iC#7`fz_VR%0q=1UB8f6bq^o*b1KZCL|XK`2Nh#_D-M^`@uLK2bA&svl91D
zl{&=w(>umY^Oc1G>~yX90kg)QIC3x&uWn*by=}hFx7*v|^YwGL-Ze&S4q)FYjrIo1
zb9-;xPC6dU>01|W#7?c*ewnZ=V8LA~SR)Q%O=0NjZXGzxc}*WyQL^K+Z3{)Az6|?~
zc6aNIJE=F>ZF#^6j__J6!&$1>g&D=pg5Qr-IF=AbF_qPcorK5XvbtOEToO5q(@*0l
z-&jB3EHm=`0JK=f$uF>8VtnnG+H!Ym=gnkw{~N=%`g)-ze?PE?8B_gCAM6F(%i80*
zw#3i#><|x$Rt5LA_PD8AFuPvUK&dg`mWEFF-%MrAdl3JT11&hMOnWlyo;k#;_)b#3
z6P2%9`HsWwsi9jwIcjnZ3`{M6Wq7ob4R4ZkYh&0wPulV+MrC%7!>^;)T@>gVzmK09
zpGl{(iTiSUZyh_sF5=waR at cE!xrV;m%Sy at _PCVe<*>YB}0Iy4=Z5<ozk$WrtyUwt&
zEa{!bPPttuo}SG>oJNeEdO2pwR=j_Om at cIENfX}LK)x9Ag()>;VIOzv*KY<eLf+lt
z@~q^qW+$_cz#Ch~y6^<z3|J@*;;ovkE<hqd;gs+w;FO at e`OsmG$sN)6{@l4+J`wS9
z%-bf{Y*3%Jp6we-`&K%#pq{z2R(QO`;%3uz!lIr=VY=TkgVd!@?7S>8DjLU`6$j0x
zn@#%{wg1;&*3<2v)_-<^tvms{O!Kh=$nJiWr!{HICvTZt<B*O6Rz+i}?CTHgciS3C
zD(THmJ?78p*lV&FEZl8(Glo?d_|@#h&YT=(vT!$rVK&%=+o}G5vr7QG$+eJCHt47k
zQs%-54ZQA&uFv6O7aSBz%nzoZ25sb)1PVuNX#V9;=&%?YPh5e$xz<l^#cj>rTRu60
zw_1^NSoH5)B3_G7yVxu?B77e0sA>7eb{o6bR?6-}uZ+f-)Ips45oe_)&NUsx5fR6S
zI0l?jcvKQ`o45SiRZ7i|<h4Gs)`a%yLA!9 at f<KqHU}ug^cS7#00>31pXuqjq;7lF3
zI<YZnRe8hsm&b=wcDMu`-fG8sQh>5Pn1Hu{$2W}M at p;%Fu*A=?&Sh~<tY*j8Qp=t}
z$rCX;kED6l{yOw4HoXgWzg3#!ULMyW&2bImE}}V((|q+}n$ym-`OtJZN4j9vSo)xW
zO=CS?H#01vE7N!Ot#HySoW>s-t=N;eGHCRh1Y588s`%r3=!JQdurFqt&C*0rKi}+r
zV*eAZ at 93oyH0SL1I_z4D;ZYbDjlzOnxqy6dV?62gK`pJ)ZY3)r{YX|n(q at n*LZ{zY
zi~E$I)4$g6jqaF9a^a1-4Z%2R0={b at X;MUfgSFo-#7hV6i&WojtXlNi&GBA)99Hh8
z<Vw;X)CUtQAxnb>{HFtcFKBePK8-UoPS*B!lCjTsBgqlCqRsw9;BdAWutT%zZuNxh
z2Aqg&^|aw@!Z&>C^qKf-^k2^*NPP>|sfIjr+LsvlS|>pgl<vg3Dg|2VYox|Zb6V5M
zz-d?of&Y%oZfT!aHd4sW+TdCK4lj+7N09yyO1~C!0NmwhuJ%<6dAFq5#JHM2)ZF>x
z_wLr&VgGMJi2Kq2%x6yH6b$p&HjDt=2e>9^n_Fx5gEv{VAmwiwd@}!x(arAKjX6N;
z at BYfAVP~iPr|IIp&S~PMf9ekRj885R1G}BoG-F8sogb=~HDV5fkw2kjGirLZyY<C-
z2|YG<=>3s{2Aq{LxLfOzT5#T?Z5ux?6M4Bn6f<XC{gyK;j9a8mn;vrNk^$j=;b2;d
zn|bK`aq9sKow8|4&U9V<=eLq#u?9J_BH&!lZz+c_FGQ(J_O0>R-I13wkC}4!E>2u%
zh<n^qCtAd2W)c&3#CiPG0`bEtbq*7by`&3%2F|2)bHke`Y4;|>Y8LE*@w9tWo6#U9
z6}4os)8`QS$AD44O3VmihSgBl^keXA;}|hXyuoA8e`4$^>RCViiHZu`#ECTE#B9@*
zp)6+5pQs<;Ze7yJXcP^YjS4lx*$y!ScB&KUJVm7*wRODncCoMRQ4u<S7utgR{W;To
z^|3(DyyUCjcDE)yOu0Z?VXWCKRoW^nc)_DoLTQsm<e9I28+!$ebTml!##pTk5UxO}
z)}UUX>!Xu0uuRMl`(4!QASD*+4R!gJn@#x%>Als|*WLOOdI at rU1`<0i)Ezr5k(Uk!
zX+3qVyLIO&q+)KwjPRvKv|!|=T0WbIL`F$goM)fmj_hB67Mkzt%l7Hdz&2b7;@re$
zl%J_vM=gp|@AgaZJ`>sthqStZtEM#8>OHCDpSW8;?CkaHO)kHYVaLR;W5?_$bBcg>
zv7kTN=wwFgb+v2*zLx811=JlZ9QXxGtzNnuX-Jq4-B+uJ)yc?9qSOrNE|Nu_yNwIP
zl+}9dF6iGty#43FMa=VvXhFOTiF$bJ!>6P;{yj-~BTk|kq1 at sfDK_P{yfs(9MdRN~
zm57gC_3$yor|(gzIhe=k-IICe)$bloMO(e=ZcRKKYXPEWQ0jLQr!git5V77ttU4w2
zCzRA5RXCn-^n}AxA0A76l4PKM`S4~bj(;~ujW}<3B4`j#iJBCvTB*gSbUWOKYRI`1
zwdNO+X_W at vc=Eaz1If at UUtU|zMwT}RGoV2r|A()8QG`}Ggtl(@FqkOUwSfISs^igT
zsE&i(-oVW>?DyC~FR>O}+i(;s_rA5|BH9?Y2&~-iAmaALC>v>b6>{@rn*$>$Y!<s)
z8&->fP!`n|`=d{gYZvvM5#`azuN>=#x#VoTt6}TH5bJ3%5HO2z*n at SUHOr8vp4TlE
zEG;@}<AzP}o5y)!sZa<WB)@X_&2+c!|HpMD7$)WTi86mS+(~hGzLo`36}(Oo&M+a@
ztw|e{Sf!d0%>ku1sv6atQoT;bS!$B?KfN04?i;M6(Um<`e#Tp)$KJLLwYmQXg<5Wl
zP8`hByb5)35M`kkk|W{Yz-?|jXxz at s*F7-$ix{``7e<P_zfK+%{Bxjd8}9P!Pe|A0
z^=@O1P8G`};kgaZt$S|0G|y(oE`Xi*>EQExgy}-_87w!Vv2lZ(Vu!$`i-I&(9Quw+
z?NXd6t50k4<>zkP^nny`1`I<^zInQrZ;)eq)-q-kS)dDEHcBo3TylACC!3X at o^Fb#
z89rv(Cm_Fc)Ek>Zbj~pNCCYRH`Z<dY0<i%va)|UIN9Tsu8l2Ju1xm-eAd}V%#t9x9
zS&ooO=~T*!cz(iKCkdfpp<cC(--0_vVqYT9)V7eMJNDve*574^aa*ncy*YI94>WAw
z-vw6AE&I3A+ir(0A!s=uck9?Upv5O`8jhIZJGkmDug%iu)Mck}Cq|zNYrTE_`N&N(
z at +JiBUYi|$LXVhVAlNPDwg+wge8g+UYavk_*vyEzOKNaB0_Rn6u5C at 4Yq`xrCp%a6
zsEb362bW>zjpk7GadiXLH%sf|{8yGi%GX>;U%ak$CC2Bc{Mm?UtI76fL;G)$zf1WS
zd#}ygOnGKpeKd#xVBp<5F;Ew$P^X(6xCeFcLDZu4xIN}?sE at -~MY{Fwxk)R at HVan5
zq^qqN6}0-Vq&ICS2lV!h{9TSO=8#sSO)sJ(gHdW at D%=Fat(V=2n^7{01Gj`yZHb$W
z_(|gmY+Io9M~KB{G}?5~_9MP76)u8gT-l9UU(WpvB3{p9q62ULp)|eySD`eznyZL2
zcH at +m(LnD7;mk9>R3jd1O?D<~0NM<*7dtOlEyPirGDsg-3+1tOJT|Y3F8(~^(uf*0
z*5pyE#A?M at k2TVY5yvr(umqQF3G`1Hm=pW1KuQU9aneAgR!yi?+$0Yzb%$;{hqxuE
zCoAHVU<WxJ<DOp{D7rCAe;na|i^A^EZ?F!3T+y1u;gwzXhWlLo?O1cj81oVPU8PkL
zi8K8!)Q(W&^1B?iHcO2Q8Yg8Rnz*4J=Nwjyq7%6aPB(X}6BayISVFK;F5?5wO8BT*
zPKUJ4po2Ez`_;sMc4(t|ujoy5LMGU?aN(A3=(b8pkZzUwA!nZeT3u&GJsFkKX8|K=
z#SCzhS at Fr{KBF~0!@18ajn4?~BWQd^a-Z26pDVb}aE;HE+^0a}GYUSvSIngR#?lwC
z=RTV6wvVRX-q_ban%cf*^aWgD=G+2{(^0PBwM0EwSCbE!)SKQCX?PgEcqakA5qi%m
zkceA at xpY&|X{{eqH-=tds2_v2Fk(j??<_&vjIZL>le<pf?-tL(DH>>4Chy|9fTR^U
z*xP5cl0 at xY;8uOfh4jr+17`b6NiMvg6 at 7*8D@(&h^7)J6BSUQ~qv3ep2I0;gbWg8g
zW9)tkm!@Vr?Z<?saCzE$#ih_ArXwW*oM4`M$eh)HksB}BrR-k^R|--f4FO){EV6JP
zW)S5trv=pE?}UF{FK~~pzSn-EXPG&R-1{Z!p_B^FCLz7!8T+9Rg}<+^muI_Kpk7?x
z3$1r4-RFto|9hMZ;zw`XT#!bCP9iCyYw$(y{ZI;^uZb^O)$;ErK1N>addc*0X5qiA
z2htkX_i8YPS2pk(pqqct=^D&gB5LD!#!I^Jt1tQLio`hLmU_Iiu;Nmx59F~Z{3>9S
zNVHO1vN!i@=dVHUvPR$3BzeBSe7~NLjOBH?uH`sIg1W<9DWm66v?A4`+KTbG36!C&
zU*3v5{>637+x;R8NFKT+)j^Ah17&{Xxv}mq|8Lu&eK|4Kqny$SrKG*&7NVAkw$gvm
zLR5cpj-!1w>m|H-fF3lvVI5qtKFZ(DBp(}k5D%04CykJZsdsfler7k6H|R;iH=spA
zQ=;u5kCSq1c$is`dlY)Do#Z$4o_&b#_U|F?@fg^0ah$kV>I?o!gYRC&_g<+l`5z}+
zf{c2*v5W2jR|=$x(!+1U2&;QQ_Ko&?)d$i=i8mt_PnH2Z4lt>H6}Lz^r2Y<Al+!mW
zGRJ7pl|z%8G=u3PIMV at ZUa5efQHMNhR^Dn8Sh*2nXcFT36e>6euM?@45=E4}FTJ?|
zeF08ClLW0#n`|&M%$>(b11B4d=P+7%+ at V{h<(acb<NXKPNtgt90_KV3fN5kt0 at wlg
zddVpb1iT#Z)qs~sV>!G6 at NmF*n}FjJJQ(mw;A1q at nF03&d_V99C~!}}_bK5C2=5H|
zUYWj*V4UY_TcL#O0OO{8+dWD+;G08$?^eQZ1^g}G<w`ige+PV5?#<hpqzt?e&)Dbi
zYkn?U<MRc4K74Mt)c;#uC<*TOfN>`%_79~3Itu6xsh^k++ at pXG0=`vBkHIeiz6Ir_
z(LRFk7XaT3zKO<v3h+(eP|8Q4ISt+X2;dt*Jza_a5a1hV7AfH^0nFQ(RS@$%qebXo
z#xBPW4QW^H at Espa#{ZaD*bPcpXZX4?^B9wtmpvLd#h~jUIP*%tp_`%c2JQYA(Vn28
zJ>de{xf<FNr3^{PySA+yw6j2a62X~Q01n;UgVWBqh;}dRHKpKe6y^K63uq at RVU+Jl
zQh&(_+Sh}&9<+~$132yL-JzSXe~)}$MB7RBi=uUM0c~fqCf}2!emvhx+|2ntXfH>d
zIFauqpnZVT?ss9nodFH)Ded#^d_hB->US*iErND6Xs;j`v_;Uy4Kn1r??tq?{S0lX
z9qkOs0op4;dpV~K7_?V{c8O9ajNet;KwN at a%qNY!b3Oy)&C&Ic?8JLI6XK6o>fnCF
znu<6c>T~1=diNtdN9x~>h7hB{`Iple0Q(HoM)xT+GC2+SfyRBH(M{^xjz*st4LKk2
zh+|apaW800Lq4GK&?PAOxYr%J at jI!Xmd2PiP6O|@j%RGI+?RBqb7M2LA at Z_9rZa{#
zsR>HEu0Y(i3Kb{S$e52W$O!|5SCyRH0}9g-=P)QhHt`y{2jRbq)rd^v4>1~YjS!88
zm0aAd(0H8Fkh$w_gl~-1h)m;w7!A2bh{g&fA829g4CG at KXkf*_^8u-P<BhQzk!dW8
z(NOa-N6E)s3XM`uL(a!tpyB4+V!x0R$4pXs;AOxoXwT(iMk`^LB5Y3XwInqqp|TV?
z9FA2P_=<gw`^2FeFQqVoD7^Y(_~0%YR>D2nORzEB6?)L!SZ4)OBuG6~hK;dkQkxx1
zZN8g1epFKXf>OKTOC_~0cxqTv-SBC<vY`i1%LDHVr6;8!onl@#)SnXeo)U($7}j}^
zJS5d{GRE<GD2X8O^PQmloTeNq-4`{zw at 4|6O8GGj<+%#wJ3x6?C{>|+2Ppe;Z(i90
z)*zPBSgF>6V>Mfeo{O7x;NbaGZshA$#3%%XyQBdezD0p=1wHBkH!JXB8kqp!q`>p2
zw*bCTfoF>YMHk>36nIK>BtvO2I^Hk}ZFm%M#sR(s at G!s;@F7W at n*k4uj%0vu0*rb^
z`~jj1 at Qr}GQ+!GT at C|@5x8VAa5wr_$b;atw3$GzrZV}(2?!S5+F(j0c*3AUJ26(lb
z<^QC>hX6wdnEyS#WHXZD90dF|;ELcdsV}~<6!K3hZ7^6veIH_fprQT<;A0x<j{<%J
zR36h%|0CeX6}S=M^~4X95_mf+TAuu;)$-_ymDmBq`Xew%K2Tm?1^g=D2Nakn2LMC2
zZf#WjUIDxs at IjOZEh%$q{=FLN!!*=CMeJKN)IS4UrlEcuFvfrD=Njs>0Dqyt2M|8F
z?Gdz at N1h#APwkHpy>1 at b4<q{Z)c%^$?0TBztw66+Mxg7{>PAD#n6P(KirA<Z8c#Sj
z#*^!9imW#AP%96OjTG1GIBvX*yCj5Ai~$@MW5AMcqjH{bm;8f=%CZcz$R&T_xJ<$Q
z455(P92Zi1$@>Z}G at gLo=AkipyyW$ExM&5Ev>X?bc1e9Z+~4ugm<(O=L{#c=%CNi@
zm3npaNa`)w8I at B!e2Xfl5Dq!DWG%@So)%=w5|QKqhaeA at +}*w}F1al_t3+F%FD|(r
zb+74*OG at ROvZDw`UtBV$ZnQkh1dP78WGauJ&gr8sE^z}sBFQjjR7*&DYi2=9uEHLz
z9s32PILX#yXQe`Y4oTc4ms4JZ5k>=W<^aaX1eX^*eSXk#%5>VIK;x=DLue}Py-P<N
z*k_eqb96E4e(S4zO~BsUPEkBb+S`N4{C0R8&Ukgl?MDk<;Nvd66im{F#4VxokQB%8
zWe)49hrYKLQgRXhqLj<rp~asA9;d*+0sH~r at d|t!;A4PkK1}hUVO;zMrGL0x`f<i+
z`UbIm`j&;!^o`BXQJMYga at ZxfcMSdMx>dfHlFHI`k?`7=HolzX8ith at z1F>lY!vR_
zh#C;2fj+zB3MC at d-)+)+7DggPOPQ`{0n;5GK6ySXrIHy-bZ7%!CP5fcVny6Lgb at Pz
zid?FykKl8YFv3ngyj<L8L9|p=EeJ1i4YFb964W}eBp3ty0VBs|q)?)yaHpJtI8I5y
zsiq)~<MggkQ&4<{%P9b&6fVCYh3|sJ(9Y5=&hEyg3|x=cF3}~7Xr>aR3L^qa2}BpC
zpCF9zD<x2TXnv1&0d(FSD*LfLeci|)ofJjwFi1<HEh)8Ac1q1VtW}_P%8sjfSA1xG
z&)b~xUiS6{w1>~o`IL1t&TPO+a$3v&Bq3{)KDK&J4yU0718s|NBb-KIpR7Yns%<dm
z_6_f#*Ux9*MR at 2M*5o?E4>XuvFkR&u7GWN|Pvt?#42K~i<ZpF^XN4CxtT|xLoffWg
z^+KElh-2Fv5vF%5k0eKi9awW94q-dX5P!zBRT22C1-$D(96`d=2ON=Z<i}$@7)j=M
zfa`W6)<Y^*J;A at N+pWc_-_2v~j$+mCKA=OahgGZtKIDGSD>|OrY~=R2 at ZOhvFXJ{~
zcyG8^SP)+xzN^94_E+r64aDAdsO&mu4A7H8SWA?-TFSW_Yxpt&R@=xw4(_X4Byyt#
zAn(dXw5(Pj=)uc|kj|uKjq4+u#dL_-jV at 9D-8$o6Sc%EN@?l5cVw@%FzF+HVvKhJd
zTnOD}Tq7ppdYaB1T69JdM9ham7P$Wcokfbv51ZO{ysMTLx`f;CpmeiX3(`hvi{3+=
zWY^vZ<2w*DXD~w~H$ME3v5Vm*NuV|ir{HAsP0*yw!b#`f%z#fB;&9*J<n|2j04=OA
z6lzZqHQa+miolo&jGH`<C*oWg+Nr<EfxQhq?t;M=n7`H1Y!^y&AHZ(FK+t|yp?n|D
z=e<;x80BS~BSblzCor?5P~EMi8VezcRSHGSIC#lt5XBg^o7<J_X2gG3p|q at B$TEcN
zR4COdl!jeQsa<)9+8!-6;c>Yxga??Bw}wA;yMZY0iq#};k6f6$SZRpfUhDzQLMtt!
z7K<DcmX%AX%RnPO{Gh~e4`$$5aKplrGKZYi!~I#vOk8%>0QUzW>@2};gqv#k6Apo6
z7apN9aR at xS@ZfjWRPbL{@L?)(Ah at q9xbXY9RPbObxGoi3N4rtbo{=W4r0uU4$%Fk|
z9#mW)57zxh@?ibX$b$`<K1%YSvO{^WG1{{gd9X>v;__f~hw at -c6ibl@TU9JB54LqE
z54LwC4;DJ{ZYS!R<iWx`MK(~~<|wiO@?ha`MK++<E*zqj4Ga5gWy8Wg|6|#3hbkKu
ze2UXJloO<~09Ls#kPWa0L!qi{Sa67V at FLl;30!xJMmF4{aQ5x(`pNC!(F(0>Sg at O@
zwUZ6EbSN8c0p?~c&31i>=&oxo8y4Kk^Qn~$w|Fj;4McT|mTIgw5ykcGWy1pK|1`bt
z)^;Vk74f$!l<sI3atA^-w3iJFU}fe)O6|%+)V67<btoH%a%EID%s+QA%~)xO-gZSc
z+|f=p+yU9JQI-vL(2LD~Uy%)v6Z4NLvH@~pev={_ASdP at 3|Y7=fSj0rKr1Ka|6VI6
z=0Eo<$cX@#6Zc*qC+_=?<i!0yBPUjB`Yy={u|qlGi}rX$PL!)yTu!X&P)<luEJaSN
zR<XF8Sks}LSlf}Dn4hJ}iTQ(7IWa#&l at s&(sB&U{53QV--$^Sc=Ewh!<%DJqQF>Uy
z3__L at rLdE5ft(;aVD02Y>F<aiFOn13eK9Q6$cd#2m*3g0&)f-qy;mzIN^!^X0y(j?
zLpiY&n5(oj+x07=dtZAwQCi6Jsg)B;FOm~PRnk(8^(>-ze|tGmI-DrR<`B2FE7@&`
zzgnSmSG$nA5VEqpoG8V6F&9#5S019aMoX<jIYE at gsGKOF`QHV(i<O4xtySd2UG3z=
zU62z#RZf%yR5?-dk}4-k>Qp&V@|-FsN@}!nqGX>|PLw?Kzab~|Wcir(-e8=?z at Gg^
zH at OR~$YJdwR8mEK13OR{PfNB?- at wkCQ^LBwWD)5JLS~u;mCWNiNj^H&4XEH7oCo4M
z03RS){||Sct92-G5CUJ9W~XZvVDtwu|G5!TDPpeye5InZSVQ|`)t|y=sN%CW=957<
zh`*k+93^<YmTN)Q$HG$;pA9je1mqrT2%4>xn5d><Bf=2OR_LrDI`dl9ltmY%Jg-Gf
zS at HRsHsyKEYRXFZhib}-&oS70UPP~Ct;q4^lO;dhfI94S>iS6o>*j?Z{pX!%@zr4-
zLo1wlpHi*EA2XVHL8^7Q(E{_{A&CSxW;FATkUXlJhw?uO=pbHMq>%1#AHX~3a>(<5
ze&13d(}fHe4tO1L8)8B$F>e*sLESuQKHT?#+n{j^Va+n{E-3?T+nq+SdAE_SH)Q1Q
z8$;MLL44?W<}IR>IX1L9^NKUO_4(Ab6!+tnt;7BYdrBPVu#3w=I(;d-Od2SR=wYp!
zN9*Ky?inN4=#U-~&H>0FjL5M9f<6e)HMm2Kw0JvQQ8ya<&6ksIE!6!u+8TN5fjE=!
zhWx;gp>Ez;tnugdRa)YCj&mvP-?HarecZfMvUKu0v$K}XtouUFEo1_8So3gBuFt39
z0EcY|PDti#U#$!2gps?f(m={#@p(CSGe(M|0ewTc!@7Uuexz6YcQuE_Uy^+p%3-KG
zoxut9AgPTwZ8 at eM7P?nI^DxQ+Kk6gJZ!4<?@Lus at rN?6iP~52Wc<?~+%Sw+&yBE{=
zkNO2RTE6%>q(N at 9d@=R^=Q)IVX7N5+5&Rry71ybpRs5XFS;aLfXB9u9a#rzfEoT)!
zpmJ96W-VtGSG4D>;v$8!phYa6rE*rWN9C;I2`Xn5W4ArZS;ct at XF;+Q=g1`opMkTA
zv;R}hD(<D_tm3X(&MHpUw40 at 4&MLNRIcx6sTF#pLPc3K7{Tp%Cvmal~S#v-6InJ8<
zrk1njzNY1 at xv!`>oco84Icx4a9dXuNzsgy2A5uAM?hci+=5A6sYi@;>v*!9#&YFuI
zOqH|d-u_FRHFvGbS#y0VXU$!qa at O2CRL+`vtCq9oE>Ssa?tCq0%`I%tS#yUeoCQtm
z+{;wXn%ht2Eb9And#ju^x4X(&b2}-V1zwt)pyjN&MuoGw6)f{LBjn%8tfGHuIjiWj
zma~dZsO?ttX~&#ZbXLn*MNL}HDr(enR?$nuS<gIkF=rJ$`*WOCv`5QXMLV^eRkTHu
z!}T3=R?#CJaaPeXm9vU&RynI^vC3IRr7C9?6>2%FXokvJMU%ChRW$CGII9RZU8AF6
z(F~QdiYBX^RWx4ZtRjb&vx=@!IjiUjEoT*Fw&$!Oy~0_yyF-O-DrXh`0B%CbXjCd}
zQ8}yd?<!{%eyPf=Lel?3TFWx4 at IzH*ZT#}*IIHlWma__9)^b*1o!V}N&vndMg>Ps%
ztMIp4&MMrY<*dSu#92?TyqL2J#h>G>LRgx?SmTgK!@?W1oK?6$lf$_kb5`LU9dTBn
zOXaLWXm0puhS9L_YL&AJN2;7vi1QulXjnK<<*dSVEoT+>{3XsR9IA3w;XswM3e#22
zD!f$XtirBZ&MHh+Ijhj3<*Y(od(QF(70$wLkM|vwv%E(XnY9G|hg8n;zM^uL_YbPf
z@;<NSEbmjQ%v$%+&vBOb0WD{FH)%P`yH;&Cudidy@;<2LEHCzV`COaNv%HJ7oaHSc
z&U$Lv#hm4x{&Sq=b!s`wd##qUyjN;+nAI_7dB=CeS>8)j&hmCqIm?@*a+Wtv<t(pG
z%UN?mDre34PRm(yzWyc7^1=pQRA$Wyshl<EJC(EM{8QzuIj6OpHRpuNS#v(sa at L&p
z+jG{O8ilj4&p781m9ysTRyYeY+&NV$XU*B7a at L&nDre1+w462PK9#dpV<-FHkA`!W
zXgO<6sg|?mc-3~BGoxe9nsbwuv*zS$Icv_<TF#m?f;j8R{uguBoB=<_S#!E;Ictth
z%UN@*njGRLUq>_eIhS_CSp{FIoK<j2<*b5cm9q*yQ8}xC_Wxot_=2}p&MG*p<*b4L
zIE#@44AFk-CU>ad4^-}&Ckf*Ii{bYy<rHUN<dyXfS`k5)%-D8>9TEe8oPc%!Iv}tf
z(oU=zIld6W?5JQ9rzjSmwXicr&jM_gzKGjrxGg}I6m3SI-N<}`gOyldM^JbtnRo%W
zU2v0*R&m$^?FMT(L&Uzp(K8I<k2t%Pa#0M}bG4pEj7;xx{l%fckIO=6ns>RO!%)LW
zgxaJ4?0DNcqMec>_RT3V>97ZC^xy(oopVN)(UG$B(b)g2&!}7I90mwJ;XMTVgu at 1;
z1X~H)nkuY}v5erQ-lcl760Z6kgKdoEIu*V<XoYq9<tE%0lCgCCjQw?jE3HLynpw)g
z`#gfY=5vQ;pEP!5N$L%XR1-^j2li-eA9C7pE}Q2=kFAmgd!klMF58w5gC^t){_nzn
zy%<bJj^bRMY=Ab1!8oLDk#ROKVIeHr(2W#Uu1_r~*BhB=g$3*k2P;UxUNUY(>CAOH
zf`YB9%J*C0!VM0zS+4us6B}f1Lk at pmB^@;q6b#AKcspCEow2vfI8T>~cEr3_!mY9=
zZo#?!QFNCC-%RB at 7}`!Fx&5Q~jhs<*Bj<@Z{!#o!&M5E^18sAY(OBYJA2i^9hp-^m
zvh5w@<~};N1?sn*IxLo)Hf&lDj4wLN%HWzGG!>oIJqTB6)kmimp3zGsQa_GC at vq>y
z8AyBH9=qA at hh+xb=$RUQQ;W{bBkm`lj$2KL-&^j5q|2DyUG9a at cwoga8~3A-e+%u|
z!KW5JasF)FeKHfj*JR_4T|Siqx6<-uHxtRtIn8b~s;_q;2Y9)Q=U_S9mU_G*BH9&P
zJ5KK>VwX-JJAOFdF47k;?D_GpaepPfc2WID4%ro7+y2Vvy(Q41T|S(P7fagYll>N|
zgX+iq!yPQwQZt;s1=gD3-1i|4!53PQbJg1+9dKiybcV~OV<9K$BTz#o$OXJSFKhSc
zWWD|~oPWMDvwz!1RIjcPEzBdBudB-tvNz~mLsBCA?8vO}y!s5p`Ph|ZXrZw6de^Wv
z`CJJPtE13Qa0?`@>Iv#?fIdaMbl7)HPlJ8Oy}18SpV79u_DE<L*HA5Ww|0LhIyTO_
ziFEJK=0M9at4tXuq2riUqKuQ!am at 0{<0M*m44~<;krJ|O)^#mwFwZ9GhLgUt#<r}*
zeJ+DPiQ2e~W#P7hoz>vR0c<WVC;>#bCoPFa{NTnOswI)y;qegpNCV(!kA{Og$O48f
z3d0Rfh~Wz4j+G}K=`WQsrSV*^*4kYk)3V{T$IK6)9W4!+X#FtrUE)UIWw8=KN8}M3
zP$Qs&R6-^60N|J4zYBiYN94FK at N)${CA|3P&zAZjM>@ROSyq!Rmwx6W#0!t_2qlUo
zR41VDAo?xdsl;tTX7R`+&`B<qv=sKJcHzzi&h-(m>(-!#>~d*w1_EyIENY6$Hvn-T
zkX{j5YOOcRVT2Qlhgu=GdQ${xcBxA{o-X?>$Gu71KjGoGM{kngR>@NCM%<nh7vD>j
z?<ETEwrxGChV98OY7s}D(T8j<*sa4ogpWXJ8*JoV9P%;k!r-pk`27ZcduJ7WaZ8AQ
zm*PulDKe}Fed~Hv4cwD|Di5+IMWOx)QJ(?JzS}I?5WY`afz&?@B~rc4_!_iQ6<VDs
zU8>_>vkw2$x}!W~c0~_PKhJ=(Nk})JboGgoZxANa=?~o|gn#U^$2BYAeO+ni)A*f2
zB^+hJJejvw$94W0)yl<nPUS|O97mn!)WQ1cy;gqrkJrooINk<p>5DetU$nv63)^77
zk+%U_IMxQAQ);m`(1v^wvLU@@{7!^mSFi0Pet#j^g`3`XNq|LavOa1j2ohP0x*?lv
z8aHk(Qyfbo{NYBAmfg7R9CO<>Zs5lJK{MtS$Sq47k~B3*XRRa!Lc`pxUG;n<<)=cX
zf2hn3q3fOgo-#Yc>UR2@%Ipxj-s!K)Js&z<$ieA<l>5A_?VbJy>fJQIBYp4m+P2kg
zW-iG$$dbIpH`x$(>i?o7UsL;LXc)hz1WBIydwCZHIa^E8oBKmbPZvpk%X>xB?;-gO
zH<j&nlHPDrS#F_K4%|46IDHANayT}m`t;J43fw<Zr22Gk3tnD|N_Dz3{>u{m(M}yo
z^x?9MLmNVR%knVh<`O+tF481KCHhE|^Afq7kjRke)4rzC;N(|7xc^4&2)ry-2B?{&
zFTrqsLaoh1Al;|^S#DzvL%Q=<+acLGybJIlsf at RDKiI_!O*<gV`fqe3>ycAkO*Z;Y
zXR_@^QvQ*Bzbw&JiTvM6CZr525K)O9yAKE{{>##x at JPZa_#I1_Uq`C*ThB=Ae<<A*
zIrb at PX;~HK&;pHo%Rq-qGFkS^a(^mbAIEsgW#z9oUP9jeM>Y8?$@;GUjjWH>k(1XE
zjVL7NX_Sf9ms}d|r;Pf`I~?^X7tyvNiGR^p+<qL0jnYbMeL*>Kc44eaN2epT?Iq5K
z#6{1X+A}uuUks=V at 0pnQ!=0qI<FDIGc&X_0XHR<nPN at q``G2{;DE0F5Bl2mgv5QA!
zjE85aexj{3KH5s)uV0}>{!XdJM&=7!<R836y2>pg_Zn&!?9W2JduBxWL#_G$XFcfj
zFU*$C{K9PM=X=ms9k-3bw_o#G!maQq-y-(^xjyvIpKY;!@w{|b^Ac?%>OWXXWA!{`
zd8`j%pMT12Y9E?%W3(leRY~6q`Tf6ZUr_I&NGjsqU%wC0e7NI2bVA#QuKRWS(8-@|
zk-t!j;5DW##2pv*p~){q+b3G{i2bXr+K{jR$tcwP3w`Lsf7OS+?6_@|KJ-_mmi+%$
z`Vj0c{fyN6o06B>XkMair1qgn%K2~15YdMwy`%P_Nk^hB`Tx;A)Y5S~VI2A<+K0f+
zfoR>xJoYP$MBn~wo19hJ<lT;X(WI1U3q|Yx|6wm``GsEe&41O4zU#PklwS0`QcKO6
z*7-j-68+Gw#k8yXbIJ;SnG2TEtK8w)Sf4NZf4!o|D!_^rJ)IHZEBYkOPU6IWDl2-d
zXD6Pfm4UoApLkMP-D5>R at iS$04_)R&y8j2g9%5nLKaup{SoZ<KiLHrEe9cD?PLxe-
zY+D0cQj1}euj^N at e^<UcehXQj&B`==_1gEVD(sc%Tj-UMY=j=F&{gVqDBe){>R>Ev
z1i~6)VI#3eFqQNK9Pf(bum_5BhWu2g4(9`Cl{)chWpz$DeOz9hBTv|Qnz%<<pHn$^
z$?J1kw@=*GQbD*hubWs&`*&EwGKMwn#MLe96$skciTAf`P;~gvQUac)+}}JvXW%AI
zq+5@$m_;@&5=lSGb0d&$0Q;5mgYohj8!@jWALs*!MwVR1kfrYdx=dbe(@DFD{bZdB
zLa at s|u@|_?0*haXqzP)M<X at qoQcjbkEmAe%j#j^*0sok*=U%&_&o_n^y(Ap(C-vW1
z;q4y5Tg)rcam&<<(4-Z8QG3nQZYV46n@&t|*o_Gen<b(6?2l^&TLs?pUXgyrFbg{q
zgt6zgstLj4N_?+7G~pbq*1$$S-3cfB3IC!LAt_-Wu0{Wi0jV}S_qMRSKV~n?doJ5q
zo0wD53zo#Fj-vU6rAg!$|Hv;<j_wgoc${|h9@<Im#{IG0nebbwpS+*R&(XHqBb at L&
zG)Saf*&#U*^C{XRtkTWEi?xkL+!`}hLH7dcr8%aDNv8!~m~cB!p$vPZ*RF8jOr;L_
zr8MWp(!3tAO55#Az8Kq=d;wv1QJQ>T@<l*PeSV&UO_UB`r(oWt<UznochP+0n6j*>
z`~1oixP!aYY#bkn+!1YA=<j&T;)|A5G;Zj76Z$Cq5PUlU_rK*jp_7vnIw?IDTs$E`
z>7nR_6HH1kMjv!XfN_Aze>NV_c|fxEErDz`Ft0Qa_tK%EasLC*9I3CAk6XMrG35SB
z+uyK*CgzmDsI_Mcb4=T%%PF-n$MjTP&eScIN}qT9%(K{sDOqjz1$_H_<@9Es?|ShJ
ztZ|-y{zVb*KD*C9bE(+uF!acP&r|S8fKTU~wLO at x1ommqKktVhUS)j7f_*!Konq~T
z5A0b#9jR>e;jQ+WpSn^9``v8FSTO)Qsc~=#h=CNI{z?o`7-+H~SNiO at CrzPvpNr!k
zmt*~|OMMb-$+98+0VAcS-{bVo|1PdR5%z*hkmqzCEV$;q@{_>xJ)7gRAxYw3#K!IY
zA<JDOV69njpMN$5`Ae^2Ii_6}%Lq|-vgC|meMwON(4j9EoiW&Ok&d5>{Ty@!Zl!S`
z>|4q<L(}UAVsy at gjy?`M5oE=%FDy6qUNMAT<i_`M`o_Zg at vy<|{4(G-bj4+&Ij{Fm
ze)Qj{`+L<Lo^ZVHF}%LMttl_*C%?zWW_s-GDNnX|w>uKSn at I5Q{nKvjl-!*+^e4Pq
z6M?1DZA}Ej-ooPCp)1Saw;X$&s?Em!u-Q0t#UM?pvRh7-yZ>FPc*`LYKB1<n>nEog
zJ|m~9>!(TeT3Ieo+RA<4S at QdZsHp)w4+AxMklk_~xclGbLBtCs;k{}eScZ~^CzO(B
zsCfwg*skOQd8z|6smgAoN`B!9sFwk_w>%@3&p{lczXn5g%lYK)pUo%6k5~&u^NIJr
zcnfLs`9!;XUdB_+(4;E6wfW5WH+*pnwPVwydQ7Pu*qGv}9 at Es$O|cdljFBcD_Vg`M
zGv51zc5#12Fy6RSv|wzuZ)<tSSa)JuOYo;ye7x16ON`ah;ChTE;P_6#_?X}2il5E3
z3l?Y7>#Ry28B$NOa_Dh;pa;s=XVUw5nUlWDy>|QKnPbDBWzI at FiMN&h9E&{^v3sw8
zY~VdAN%<x!U)Ym}KOcQ4Kd8gOR0g>Oq>tWT0Smx^%x*(YK^_}7^*uG<^kuFVYjVN4
zjo0OLmzdCUfE`aU_sz at 8N`(zs>;$hOYrt8-UK(h4u&V|d8BEqdOM-D4$OHSc^s<4S
zQmeDOvO4?AY->SLdcWR|H}uj(`CP`P at ZNgCk5{O!@|UH at MGDgO^J{#7O9Cv6Ft{bx
zl$I3OX&eok35FWUXlL;rM+#1lu$AyhNd-)PE)NUfM2T3CZV|a(7W{^V4YEZAXSTq?
zdsTm(yj#A<kzQm`C^WjVmN12C9Q+zVwNa*MWD1-hq{IGf`noFsCm6F>f^!&K8Qz2U
zNGQz&U?jLk*qI}}fT$8Yk#^RFe%7vlClVa44*yPZ&*ow2>nLnC!sfWL671WGh4c-t
z!DkM9yw1^#N{V`6{ov;%KT5A3<;V-W30{;@-rfJBYbo=GUsYm>Ww0RttYv^j#1kF%
z)0XfbT{g?o at Mi93XR8&;69BIU<<&$PFR>A1W2>>2v4_j}{GNxpx_cPUv7P6b{DKOF
zX}}2*OcZ7jg&-(w5%5l{(8bghD}*fslf8mefxEZD>R?#e_1lWDt#HEzG203%Tb*gJ
zf-$SWR?E1Lja4BO7L8dIVpd_yX;Iue!^H)*M=91$gzQvCqkd7?VSCrg-FCLq)dwde
zU^gK=%VqcDjDr#<(RE42Hjho(1{gbwED3K#+UPx)BN^~XLT(fbt`2TP89p|45IF0A
zvkoy10zT9Z=Ma2$k at ZM~?rQTxC$>lX%Qd7NhmGjOO^HS5mFOWf0+Ib=yuFu(dql_k
z#;oXe;+A!<rJb0VUuXCYU6G4hT1*qO3-`U|0^d~bd-VmrT{+dOh-w?RN`W30wfVS-
zIJZWEPgcB#ER%qP<^o>rf;so_rkd4$@C^6uTSM(XmHH at Jdn&mdwq}bG>LWk at 8dp}F
zhjUC{YuB1J{x!Tuui589uZcuv6-;}DJ?Yx#!V9F4f at z}nNte-M5QS;rnQ2|Srov5d
zWO8I)%*}D4P!vyw**hvGd&lTu at 5q>nTfvke6_a2?g^FpYAXrILc1P3Xkcvq$*)$cC
zO(R%IQ+5OM6P5~J3Q;ickYPi)ifJfEn&nEGvRlEFLsU$H*?TG`dyilxP1zkylS3*d
z#Wbwvm=4sfU|5gGa at R+a!+%T7f*U{AxLOwepdcGLR($XlYy at u*-yy at ytH3X&W<l~~
z8CI#VVHITI`zp-dNB9O6Hf-=87P8T<!;`w!9Nst1m1Xu&uAdyYZyfQ#vy5CyZYMlB
z4te#dr8M{mR_aG~a~!lghoX2g%-&To*}JHpca{2)-3q20qGA$kSf^qd))B0vDZ8U-
za!AFbn5<C6WQ7DPY07S39wk2Dkb*f>h7FR6X^@bnq@*dk6-+rq#Uz*oRZK`*z)G63
zJDMhkR7{F#sN|S3AK>vcL#4t8m1wm}lHd~{!3~v0{1o{<l*3uDH)OZAgpY+k1P_#=
z%}dobCfKlA4l}GKw;Dz;`#{0_fZS>r18mrcFvt<ZMx?pXHM%i6=DjHUu>wyvB=;Uj
zl>#hy3!-CQq#H&P?n8Ec%N+NzD2$ut%>@p<U4>bi;+_*e<q`%l;(Uy;_=WelvUCEM
zV>IT at DNDZ>_L)31iYYK?rRzl%#=GL_ELDMvX+$x}BT6x3e=$a(l^Cxshx{+bE5vl(
z#cpu6m$4|9llx{_1x04gSNz7xvKG)-#2BlDrYo>ZmbeBN!eE6yCUMIVPJUaoG8cYZ
z$WOu9g0|nH%3kyr?xS#rSAln_d}Y`Lj9m&x%5L!0E8t~0M1x78ehsFdU<FflM=?31
z!6djwgIPncf+ at SBm>kkz61+`=xs6~2Q+5NBB(Q-)3MM2lhab{lJ_O8%6inG2#pI9%
zli)`*n2!*wV9M?&CWkbb1V6<w<(~Hxdfrn?&wC1e;Hh>JnENQbgd{M*+tprU*bex&
z8u+(>AJxE*0)AQpKMi<mR0f0IR^(=DR1Tv?I4sNJD5T_lf&xFNDfNTEeo!g3>_(}d
zrJClD29w}@8q9qJE10r7ipe1jCc#f?FrOq?!Ia%mOb%%<0ssF+A{!o1C9>fGwDAL)
zHYfODMIt{;ZcP}$k1Ju1lUox;@Ux0UeiriM*$X5x`FWxe+28>md$bZ+_E9CW46713
z3X??U?y0IoHcUm at Q&ou!*lw7rO5`XUmB>*zDv>#ST$RX%<3^j|xGIqi$CWiH$>i~>
zOvY*Hclii3p8IE|y{pLGLda0^bIVeh$8mEwD?Uq!(*<$JZ-Vny7ExsF1cDu^e7+xX
z$gkFQPp!O)!kid>wJ2{bR$3mVEjT<j?v>{74+Ytfv<RgbO6zzz>@n=;{bKq9G)vx(
zez70 at Vs^}Zry`?yh|(`ey6*?20G9zHHg*N20Ku+%urlT&x(vtC<)NB%32xFzkS2l^
zOxYdHF^4pm1izrce1TvEQ+5NB&pSD!V3O2(0cCqhQ`VOVR>~^7QC2SDIi!@8B>YQA
z<DjOj2MJcvl-<!ZIiyLG;G>${9wiu<G(S0t7Ch=2g_&}FLAsY_N!&-7CEcOGFDfw2
zUS0&o%NqD)z=t&OA;52H;5Pw3uj&O1&!fc8yX<_vOfAge2ujVREr&FckKhK4%xoZ7
zsV~_b#pI9%li)^<DUVK2=o=cbUhj at RD!Z>Na16!#N`}fD&`CJh1O+}KIH2Xo-%2Zs
zBfvbOV9M?&CWkbbfFY-2n3x{}mN6AKFfkW}FNG+WLuD8<=NKmD!vbc`a&Bd}f+>fn
zm;__y9K*zX7_gG2?2e|%Ar+HiV&)vf#Qd1goOun&?r54EQZW(JWB9#Gu(qHj7NZS+
zPq0$=FDmdWO4ut1dqopQ at asz0>*Usi5&Sm7pi?otjoiHLnunRQ+%hjJe$zbDHb)|v
zfTkIj8m76XKwAXuS>#kIAo3|&*2Yx#s^)@a<#rVo(-img$o;ORgIHuG@;e>rPLE`|
zJUW4=JsoLJr`dOb1G8qhWth*vMHPmOhH{C+9>W(7;WG=-FfmT!3*dZ#yst!@%Mpj*
z1De`CK(NxnvO8Ma9MaVG0p#v0*L8SNgUVUvnD(6odHxDz{mM1(e1zA>KT#^~v+b;~
zyw5 at f`Z|*5aNy2^VE7uTeH|$S9(QfqE{yNIQ1O3_=PDb#o at ICqvf;IGF=^D`w!wX8
zfemXtxCm18Q9}vFtsr}@{)Y{)v(mj_Sw+)cUm#H!u}jD?Jj8eJ$hL3pgQ7Y39mOO)
z?WVp}<4+9$&YIH}jPiKBJnosCQnMcRWJ>@oh<oj^+q^x at M!a8Y^!Bjg{c4xpo|1>#
zf5D_2Lm!=&MXbVzUIOinaq2gSaeEt^@XBZ#v`5&dj+6RhPi(B at gpFwIEv4Rox4h%9
zUK!kIfMx0w?8au$+aOrW_!=H-7@%l`eZeG6NRuX{2`iofgpXBJhAVdS4(9~?T;G;~
zS5OCmax(PpJ-jwuJXT8?0(6Ai208FbTo7-W0nc8-$WQ2G>WXw8gDyBtws<OQ1Z(pB
z^gfhP`C91fuzknBq$QN$&#dydSqc9V--g}=Ha}~4n7#pgT{a`$DJmaQ<ABTHv8^3n
zGnQ+_^vK7<E`dQ~Esh4wc$Dj5?&tA9FCM`QJ!?qk_%O=(uqzF>t4Oa1-I<59zL;6D
zhduUrk?;qO>@O`?Ws=Vxj4-32O)&x9Bg3GRy$U0|3}b|$6)6u3e-Qqc;@*p1R-)j>
z!*4He_m*W7F7lwj;bV^McPS+v8cUZTzXsPY!!cYA$8co`8u5ix3O~xW5988ktaLjA
z-Y3H=u`*7=xF^HmO(gx`&SLvqgAB4x{R5X!C$Fx_{}Ja{JpCw_-HaSQLVj}oD=7aQ
zR?5!ZE at 3J3P`oY(e$+L#Ac~)g_*mC4taGRgTM3`Tz^D3>-7+q at A5+pLyvJmi@U{~k
zhr`E6w<x<EwvVj1fBFQ<_87|gILe-avYP=vuD~sTOH?=obz!2q;Njs}4qFrHd^x0Q
zo4JpTRTD44T at 5~h8~L!kM?6HZ1!1K7w!oe0uzf{TQjun({A!ugzE##PG$OoFktwSX
zr}6lnChBkeJ`Mau_|a{eA>dh}Hv}}2Vf#<MJv7Ue9%<(NFxj79X4}PT@)0)~FRW2|
z$;bC#->7c~)F=jN(Ua@!NP}LavemawMNUyap6On|i?f;k4Go at a&_hbN--8m!v~8gM
z2fQNq-{x<fml<J=S(nH2n1y?D*{C&q!5zttY?KpUxQD=B2ltR8nXd6RW*p9P9NBHw
zRD2P7ObI<^%+e8W>QnKpD}gHuJ=|7bLeu~y61B<w*c(*eqCgUf>b<~L!LYM>9Fnk~
zD+km&i8=HxU at E>S?=i%s);osR7$I$F-viX6b#Lc&pA3IGDPzH%>>m0d|2Y-lWXTlZ
zN~BgjdN<XDn!^I*5V_mr?O{mKl-;5&JKksSVeHybD9TUu7OR<Hj<<*D(vD(k>kwGH
z4wd>$4EDyjcKQDl3sj6h*AhoB+hfJc+zE1dQGVVcRNi2J@;j2iN0xT&6zp-7_ZGGF
z<X!`8TQH?PCACkXb?63LGIn9jMkeBIOr}r8m-?8A--<>%Q;SA>?0?k9WL}W_1l-2p
zK(EC-it_N^QbTECy-msc5RHsLZ>(U!QC>^jRsXxGAqCpM<NcZPu5nXMwM&iq2l>&v
z at zL~fXCD3L;`$=_0D7{t)AScuu~+&OdaR~T$^EF_9xWYzo8Hh;{>`dyrL(J%n#G?l
zzJ`6n1oTey3I|s3c%72Im{HJss~#bq)n&knMhev$tQTa^O-9@;&j2=mPZbdIBfp?Z
zAyGH-$zM|il|<xev$CUzS6SI+`At@~nNA^}^|?c%c3@@}yB|MlqkKA<&f$$(D>3CZ
zd=?;)?nAHr%`r1Sh3AsWf?d5!@ai{C;NeEVO|Vh0#1MxwTk;vbIPVgpC4^Uu5w-x>
zrP30l!|hxE@`7KD{v>cKZtP)~F|9=}4meISw}X>;bee4Km9f0w4Bx1$Gfm-VaK0s;
zPRik(`xDsFJju`JQ6Bk8v=+lR#&1o>`?alVV|lk+?xZtGUv5q{tPC6RYZJv1<Uvn;
z=1_{!F50RdIOV7xbJ}Y3h{^9#U$Rx1>J6d^d#d=gF`QA;<(a2sNcOzsDXBUAj4a1)
zv{a^hd)R(-x7sE*;eB$;P`n;T;jDdl at NAwby!ZGX<Qo5swb}m#dev-``Baa|-|F|^
zbcC(o+ at _my;(R)xC6`TLxwtnvfh}i8*-7?ycAoXrWtcKdm4+(Aa|Uu{nD#5*3{w+a
z-AvWlZZ_(}$$I??<kJ-XeRVeeUmVZ$%Xr9J2)Tua)bWrP at M12;C;h_e;ivS-LkVI(
z54cFOOB2L2_xZg~J5$>J-Z at 2NC|v+^c-&mYzX3lZekS<7j4$4cwmpq+9KNgYwV*Y=
z#Mdg0mXf6jpxD3qw(8+{1-{kx0$zb{wLR%(aSy_O;BMqNt~6-m-+NGd-@&&R&tq+M
zcGZ|F{bUm}N_gSjnG(SZrMdBu*@%IYZ>AbCfd2-u8UIgYn*0GTtA)K1(dJ}#-Q`@#
z^R3%`duUp%uJcNi;QTwa;^@!}DcRk6+ZZto at B7$w<Qs6NR8*jhI!_mt;k2`7V)1v0
zqX9q1F$QZeo^Yl-_ at IJutR2Qm4Mryo#wKUVQ%}hly3c^&h^0}+F`Sgf((@XOJDe#m
zzpP;FZig{RgYkt1qsW=^)>|@$eraezEQKpj>gzcDCQa<I&XnWFmDm-U*nMKLpV!3B
zbf*0CpGs`MCU#sb_CuQ3-K8|Daf)A^1wJrVXXD>gJskh$>Jj*lV+P%Fd at cCijjt8o
zd+?3NcLlx)_}+_eBEI+Gn}qNE_$K2k;+ul64__O;<@k2OmpHF8z7oD&@Li2>D!yy*
z?TYVOe7oUWfp2$w*Wud(-}U%jg6{@=d*WM(@1^*z#J3l5aA*={D6gRhwWf at N>uo8J
zcVF0_V|cJrWuv<_VY_#U`A7IS@;>zpTnDPNsXwv()Z+oy5wGFxnKb9EZGU&4-^1wC
zA$(?f(4#uvO1yb&K5y08)K0g4C)XwO!v8kJ{r-Zu*J<K at u8CVnC+RMTd!;6>(*B(8
zSiEz!*pnuwe>D^BfXe`z$&KERaw8|dlk+Xvk&_{W;YuCn=Q(EG`?=5WzKkeDu>q%F
zL}3&1FSO6o+h1w&bibPaw|~s-4ZFNlFE;URwQk;iUrLrSkfX9-;uFswOUzALKgiu0
z9}JpE`o#YuXo8H;hxAqKYep7Pss)UwiPgG*F|V7wXHdv9+k58WE#~00-X50R>ioQJ
zJwK{;;Q!<5G5G(a+KK;9tH<L1vuYRqk5`Yw|K|+rBz(W9&d=@nLlrQ(e%-6mAf at L`
z`g%y-+^>7>eyi#uG5_TJGx1M|IrFX7Cww{cD=d}yRa=5TRQ9hLU#Z8~@GmzrS2$T)
z73wi^S2}-xp83t&I#s1$R1tjnd=x6dyQX6Xp2_VSxqim>xX6xeLb^?umcFvBLch}|
zu{`t85{bFl$iM#0Dcml0IeiUAj7|mTq}@4B)G*=uT%4yf#;5i<dFphh;Lww&&Rkw}
z)^~L<9<BjJXUl&RG{Kc#bavI#r~61c&}qy~+K^qT%T3upuc!YRuhdwY5+sWg1ESMj
z>JYLY!)TUtBp4@@K4#3lb#dat#OBqR$OYK~!VF1ooXTQ3-g&b&zmjk&W9O4qy1W5H
zOHN-Y=X14FJ@?1+89+V<oeWU!bd=8k<xWre44mmzbk^|n=}U5ZuYapDJvVLrThLJb
zS;!JBN8%}m7UXd8y<yaA(%nIG_+PoBdF~$Pxf8dMg(1CB5T`U5>7|&U;emnMcIJ*4
zcv7y#*V6X%s?wbl&s+*FdYfus{oA|-vICZ;M4Zx&rm!OXH>5D0UhNM5O-bW*I$fpA
z6K~8-Tlu1qF)LnqdV!Bw at 6s#*b=x~Pq1zHk*Ct}VGyM1-`M=HSOBYXO_8Ic0%v*Zw
zI_q<k>|%}uc=(5n)WJsC$5;_}a<hb#sz7s at P?CG;v}`fEqAa)f_LEf~<tA-E9qj66
z at nOtzzN`v>yN#8HcD`^y%)juMX9SigJm%{>OtjRI6t-qQH}vwnvZ0sfz`j(jVc;t#
z?Pm;|bXEDF`f(03>1N<vUV-V2^{{q4c^C3AXeTTz)Q)jS?l=W4UGH7lxm^anQpHZ{
z&KUMss~GYGJfDtUA`)!ndcqH<)W_k~w>~p$EKU!}UdC8lI0dO&(39gq>2>^qdDTNN
zN2pbwCR*sl-+F7?Yv=)X at r0-o`-%q<=gp?hVoC1aZExl!PaKrfrIO{?5-pXb-W=nP
zd1Vu`P|xOx+4Qn{@AJrMD%JOh1!!?|fM#s at usS6MP2_^LB at 6&!ew)bWTevN;VUgEj
zb>|M<u;7&QbRKYwndT|YGJmf9GG|}~6Tad7sN0~c{p+SNT at IZR4R^1xO1j{s<fFeW
z=A#dGCLhC-F&{(FN<PMuF&_rYF*fwDMU-}>&TBE6X)d!c at gyvK$sst4XY^lD#`JMD
zS4c+m at _TWvcF=LM5!ETP+t7Pak1192 at c#N%vYq8_wbF at YBg%KsWyQHbW?Y9d9&8iy
zl7}vr>@|*>F*Qyb)_eG+cZO!iX=AtG+c}gWx$*4;IJahX&04s-$lTiHC?seeemCR9
z`scil+>SRIlZQTrxDogHH;0i0Eir(6U6yzMWdC&~LMqMr!7GorBex$9nsN-g7+jxF
z+w^IbOt~p*E(^xH+3<}`M$FvLfAs}XMF{=l-8?oE7?w7FZqnNOpu_2nnRVlgPR!Vd
zI|cs?0PnUYTlH|r>qml#ReKJ`!-m-Tf7Zc&QIoNH1pFVRzC}H;P3L6RnHY8AU>D>3
zrK6gXGQ0Ze72G(lt=8mVwuB)5Qxk%ixniuoyv^5E>a#1e#W=hO7VlhYT^CG%%L3O;
zK{NgjVYa!{T1`DV at +?OCXCpiEUWwek>;5XMluv0*-o}vAOIcGAr9?Lvg1CRt^L&#@
zhGm=H<}+<4+H_(-NzHuBg1nXn<B!GRTY{9BbpcXh*7?!=_x!NQN)+C}OgW)<n-Bk~
z9p-pnEXNYh at uxh;f8;rShUd5vIlk$_9QS<Uf*kK{pJNlxv8=79JRxs0sa|_-XtF7#
z;Q6b%GGGC(j0u|T$n9iP<VVEx#!7K}Q*TWxq*V0 at 7%}2RaCHW;tGWe}(H4=&wZZtR
zWF=%24>1PMg3j0&9nZg^GrJufkA at Dt2_07@({aV<4EZ;7X11d<xy={L&-f at E)IRQY
zxz9y>SZ$n(lvBCDSw>F at v+cR+lnJxELhOX_k+^bDPMnC7?ef~qoFNq7!}7YZbHw%R
zd$@kU_d6*b{~<uF!E66rsH6{Gjx{9VqDN_PO at u2Mg1smVzwbG1nQkHvGX<0XZ5XT#
z+LIBhH4{{9xY3PoE523up2v45zUT1Wh3^meK8Wx4_&$X1cliFc&A*McLHe(lNfxcz
z#LUS(zsSTaDKBr*V^tH8m&{3ZIr*X`r<2Y~($4%NURAW`P44;8ntr2`!e8ax9AP=b
zjciw?*dkV^<5j|{PaR8NTjubHu&#eqzY0sv at O9S8eD5IhkClC)mHS7gd6KTmF*%hb
zV_aF8*9{P4<m6oelfxz at 5KOZ@cdKPfz#zp1<4F&I*BuR#DQG-ph21FFNF>W(xZ!{w
z$+4fZ5c}?ch2(+d$xT>IKa&+q;ds_F#>`~T?LkvsAJ0uWSp7ef^;p&>!!tR34UF-1
zC{lw2&Yx_Iv{B7Z-i5h=AG5)(k!P#_7kh64*VMJO5AOg*AP6X+R$4itM4TWbsHh2s
zFjNW%D5xcB6vU}2RB@=<nm`aFXc!Vu0cBQEQ4zJZwc=P6+gdAB#UkKPd#krv2XLr-
z&pru?y|?#$@B9D$@AvEXyU~ZW_PqAmYY%6iv(Hg&lVVossph|o at Rnf27}lPU>XSM%
z-9*iJNzKS9GcO-A^Ey*6A2qvUz-`5 at 0!_KgTtE=VJET3`ds_Pf>?n{EW?s%}8rRvd
zyU+!3 at r`=e!uXAJCA-%Gw#`Q$+C1Kb6Gi(Howvb9IO7^f&FD-p at Ad$1_iP-?+wH}8
zbtcFS<JlRjWa3?b)$8tiZ)1$OkeurMar<6;*@B@`?@d#aR3Ee<@$w<&hBi#+NA>Rg
zxbBwM95dVdoQLY)k{%?c)<An_e=|+xzO;Xco7#e&4@^=`y|~F1bT@>1*N>PJDKYQ4
zp5tYD-y%wB+gEC4Zhl`C*xowT%Ym`oXQ>O$IU8nA%%rx;k!r3?s$8PlskZVtX=d&<
zps2g*r0f#j4#L!(cAGt{@9k6LAClV}PO8mv_sVAU=7eRhX-7^YWoF6&SV{DdVwR^h
zhTkxwpB?oZ`*k~A|JWt(Qob!St6sA2Tr#<z<o!)Z^$jk1?mjiw`^d|?vTCwKX68A-
zyP$ml#`<wmTUU~5 at c?hBPiDOT9&*V!RM{gc)zshHI;7N#8DP8DQYsig`gK?K at G5ud
zo|^ev^23xzYUsn~5q6tW&16#70c+<<Wx+W*T~7GJuBj at ocU>%;-IaEXkFtluSS2n7
z9wh%pQ at H+S)`hxFWQ^;82VJC`;GW)YL4K(mFOCb&RzimY*JUWT+G~UhR+-slbz?@^
zmD+l_l-j0ddR4k~|1Fs<*{oB^<D{~2Y{~aIC|PPK*~_=o*1`RC$z6Xz$<+O-<Z(Sy
zIS)*{NZG4$ADDW1qg1Etvi1F<GT76Vs{`AgtTt*~YS8$T1h}cTsoQQnC;S^?m3|v1
zF~gqOih2As=qK;IY*I?S7$s{@mcPHagC5)d5~B<4$8Ox-o3NsbeW6U_yi|vAh?4Hh
zP}_NFGW|Yb?r{B_+M8v>j9%Z_<d~u-%%C%P`!3b7-^0)JP@{LZr$4jA-}TRW;qL~l
zFFZlDpgy1($x4+KEFnFrrb`#EMgiSRx`3Bi&MqYB$1;w2neFTD<>1lX%Vl5p-23Ur
zq;q=XDy{wVU4k23?^uSJ5sow7BjnYKV-cYw?R8J0E`*t>x*-oG2`w0v%e184=}O0k
zbd^`v?iO`zVW$Zv>I}E`MU!DH`dL70`}>{^UDQl2>P8CDo at Rk<r`2>NkNr~aF>Bi9
zb=}lfXU#BbjH@%n-vP4zWC=L8kV_qBIHHJ^rMI<*AI@%>(Q{jnay4DszK{mCKi-E~
z>M8f{Dn^Y{S5D0>{GWTm-ITviW}3P*N19{VWO0YL(I&?PzL%+Fd279AJ2k$j$<3&{
zL$BzNhZb|((=NZ%xFF7nC=zK2di18v9qjXQKflTQnYy!UOrM!yHDv?7vd)Z-qFqh_
z7izFS!rhMbE8cL&Ed>?SQJ<|*=8 at PJ<Swr<f5xe!T+YpIciQT at sI9=SucK0~pI}F<
znwUGb;A3jK;jcQC%S!t3ANUpNrpTFr?-I~{C|6fw?cI0SFgNRA?qN*(W2|C#;VN(#
zLfz`D5YiVROny523*p}v{!U081*y8b at tvBz`A&^=-#Fc8f^GYCnVtEP99qkFUnrs7
zNX&3}z5#Yr at zN^57H>AT)eKE#&?7DzT<b2gt{)7pR5k0WH at H#+tgFu8O1{RrE*V_v
zRMz#q!Ik96x-J at AswUR;ox!C{XI&TIa+qSP^<rJ$8eHpdvaW9ouJjDn^|isJ5wouI
z2G_bftgF`GO4X&}nm79#u1hB2d5<(PZ{QK*>TV2T^qOLubQ5*_3GZ^ocZ^Nch<h9E
zpF!^!{LGrb-!kx~O7J(0{=2~6F!~3BZ!z#D3&1xU`PJZ?jQonaQHByz=DseGYmOLy
zDA9Zt{EQ`bH3M%f(OdxDSR(fVcw>oO?t?d$$R*&7C3bm%^*|4}uj37QQ*iI$68Muw
z{v`No2FbekfxkkZpn-P2F!-6Dfghge#M>pgVP5o{m4VXrN0(nZR{4Rg&*IW;vCG~1
zY>uI<tTTob*ulQ*&Fymq^d at Kn=vB}kK`($_#}y4dp~WEOdvvw=EU5Ep)BBwlm-9WJ
zg$1^q3=Xs7Ttn&J9)4c^RCv=vA4bWpw!$WI@|7-Z$gDR*-0*e*tl(CFN<lvY9Sgb=
z)Ejgas04I1s2KEPH at tZO^b^oT&^4ecP$j4mR0X;QG!gU@&?L~0LDitEL6bpOfvyEz
z37P`>5ojvt3ea_+%R$pXmw{?Pmx88)#(}N}T?D!TbRnn~bOC4v=m(&gpz}eqK<9yG
zgU$ujVWs*%TG at u#nZ!eHAOG&^9rC-ax8y~eSAP|&S1)G{rw7j38}tdTSCqNc!&hUn
zxt0Ah+e**M;cA=85tSp+GGC~reVmmXHM#OTW-evrl1h(CA-hU#eL9`C>r+MNcI}i?
z-#2oa$hj6~%6Xw?`t(q8F2AI0`)9cqBzSjwahcw~DBoVGEZ<S7DzB(aEZ>=4TA7q?
zcIAoDUfewVECouAmq*9y9RB&JwVTJRH~q2uy at I}vqGN8R^9APUS at 8b|{!-ADpkqN-
zfqH|k29<z*3 at Qfwguc51bPZ@Cs1j5KssdGlCW5X3O#=M{R1NwuXfo(((6ykeKvO_h
zg3|ZvegwJ>bOmS{=yFgE=rYiB(50a3LE}I-fGz^nf-VHj09^o at 3HkwO7U+D?Y|we2
zI?%bGdU_QFnnSOXKyyLcK(X#7t)N(|kSCy<K_7$Wfj$b0VXY?w)+2%Syz`>XvOhMD
zoH-UI{Ry=kN_%-RD)y?#>LK09q1Wp7dShkK68O}#0{eg0YPtlrx5)yD$?d at Q7o)H`
z?1gI$KZNE4wm;Pdwm&17sT#d|4pXSH+6rvDdNc5;nSUqy;nI`l>VB0{Ha815Zl62Y
zA+w~u<%H(`@+jRUS7YA}Pwt^a8t;s$x&~j9pFti4wl1HDnn<y>Z(Tk<jf<<CN4Rcp
zEj at dtO??bA;kBtmiR<_S8&A{g`PR};*>c!-;L}o3my*DzCU+t6M(mIpceruKZXW70
z4Pzwsn8;wPAh!fQ<zUyIGn`FtigV`+V1<wcab)x=XV?y4JMPu~j5mrnrF at LtX0t+k
zHGo65J9ziR?jPQhk#2&wWXQ0ls!<bFl4_QBPp1=s?H|PBI`2S at 8P2rtuj^?Xlg$Ik
zpy(Pa{Eexzz~8CZy&!|8snut?)S0Rip^>Dh?f6bX4(=h(c4~3sQtg1}4jTa4f;crQ
zzOrjXPi1=qpR`8|SK{j9{yRv+^+p=3qp-7#_f+^OkExsuyAH}5fo<LIpRrYQq_(}S
zwycwq0ah<fUQT`)Kz9~i21sp7tt(d`)iJvAx_=QnZ9=S}dtz4>yUncMnK%8OnPKL^
z{D9fw2K%=OGf-E^cUEnIzw8|2R7-adnRieFf at e><B8Nv}N1Fn*8Fq<m$$gf`)18cs
zm}j$<rH(d5)EeL}@gt_cgXXLGh_?k?q1p_8i~Vdl1U{u|bGXXDZ3o=}-!Smy>R|B@
zn{D7K;JcHq&arYj0L>p0zcc3wtcyb*ZO*XBu|avZkZvHP!?Pr&upzoDXY_SNJOAv~
zW$RG-#tQ6{Vr5x}yV`6V6G%u?5;ajvQP;1;?kNr4d}b8h_{?QSV|@l+W(<1A*?jD-
zIGw|IRhtS;=Hm_z^ERFXeW%0abp9EGHDphxuMzJX<a7T2OjpSP;++OvB at bZrlxI`?
z-_e!2hH6XQERIY0n|MviS+%9uCgt3-0nkD%+-D%&DfMW`c^Wak_Oo>&2&o5^BKIo@
zy^tL3ebDJUHFkuYE_yF>`X2FqNKW!T?Q{wDSO=f_<gVUpom!zC?4&xi8CDxkPqBW$
zeUFsW-hJs2MaCTOGEWa|J9^%G8Dr{Q&X{@UFkQqS*!-w=f`r$RR}IQJ=6#Uqjw>xL
zWA_YwgR%EM%{X|^W_r<;4bvN3AHWf at Gk{DW3&;j^fFAjxr!bI*;ZbX4tWa7vq_771
z0!{z}^aGrM{=fjh1>ghjfB^6Sgn$U}L>_~IA*>Y)MgPNSpmchMkx?6J?D<{%2qzHN
zYJ}sDJDPrhZMOU~!_fmxv$_Vh|2m3{RdR5DgXH|0bCtL&O(Hl-Mw+qFB4<xdTn@>3
zFDI*pK6g+PF+<7Z?tSTW+SD%&t`7;5+t#lA%G7U7drkWf7}fA58T=hepMW6lKRMqq
z#kg?u#qk%WYUY`AuL&f=lPAZQK at P8uT}hkfGjGwc0Q;d1 at DJH5qdToO^=GW%YhHuh
zb%wzHP0>f_y#hKSop_PtJ-#=Q;`L)ivF+opj8^x<m|-P;XRXQ0fMcQ;n6F(wRXHnf
zcrRkaHFnsq=j2G~{jIeeuk5ZC7?VxR7-A#ES2uDZclm5T_Tt!H+zBM at 9WiMv8vBni
zcO1KqcpRq}cm~vaIwY8&lol<71j08Y7-Ez_rs}V}$;x2eku%Memg`m0)neDN9UNoH
z$Nw1KBZF{gX*3=ryG={PXxR4qrNFkAX_!Z_Pw>KrmAVwQtvu6(N=7cez-W^;6xvW$
zBlh7VHIHeicp>~^2-X_}yQ8j^pxufdm}TRlreBT8Gsf1A*s$rVzQR4J9|yAet|0x1
zO_ZzcMfxVKz_u^9)}5baJtNs|l51tKNexdt4SAX<l>~29pn2k{Sd$;O(9%!!kP384
z(obm>%t(1u78=KvqqMr*WtR2KSY>hDuXKFG?!|1^N at +rddG6k1>1jJw^8L2vUL at bd
z%XSy6<?#74_|{C?P*uRX86;L|Rrhzdo~R9cf at joNy765rH@<7jD6PD6Tr2A=rG>6a
z;zFzpeztmIh5Hj0sZC at eB#EdoL)rf59VFd%Hr{Cx*tXu2-aEm%B?Hn()p*9!ZJFz*
z%9`A^Z-=V916zN)>(=F7a7`EQWhBFU>Ahe#(A#(J^zybQm%K9i;_0gR$=-cQwHMif
z{Z^7u9RQcki%GOhr at Pe|hxjjQ)VSuFV<lcQhd0Z*v<rO`jO(Xoo!xqpj1B#8&cGFW
z)ERf|yxovvIM?K|HP%B4<X`Q at aIwdM+z1!%G5-xawrbcfa&j`{gy*MF0(N%I)z0v<
zLKs^@O)qgb<*=x(?YJL^nXWLf?XzOwvl`qxqUmX>j<|Hs1Qw2G?_{=@j8E)e0}W%k
z+7?bg>X7Xds+~b24?06b95rK$dm+X*DSbn)Fm87n|C^~0yZ&~#|NeHz6I(ypoa2n=
zj^~~s<GJ&Rl;zDhec;+c4CT=i0o#3`g;tzLz>`;|_<j+2V&pBsKc)9|@x<`%D0EeX
zlQ6~{UzMTn_n=>sk=eF^BD~-a`8_t|VR8p~JTmevY<{+;^a-zP!1+H(^9|w|<uN%!
z)6_ZqA!bL8pCQyJt;v4yZFt(2N*fl18<Hqt2l%`{r0vK#5Ai$l(bG~4H8tsGsHuq!
z(*FL3v>j#Pdt;=dhRY4*QZ1QGHl}?a{JR)KBRa;`ZX$fYCYl{xoo-{+BG2%2Ta=-_
zlFz?xuRb^cvBiv-Y%#k_DorV0Z{iKV*>nUnhwcgc1)q*D`EU+8(<eD;8=^!Z?!%fF
z;*KEu6&dWBa^9!q2ew%~I>V)9XJK_lF#mF<cgSV+Q>Tz8u%uRlRhd}1 at u69UtrZt3
zVvIR`YlxrI3pvrdHczphr*B&_$CsW6b}u;gpwQgiDBQgVz4KabdP>D$GxyE$3{v8s
zN?UM--nYk>IC}F?%HucW)xHt-2ogLtNX*#}i60px=Irhy at iM$YGLzLjD>GzD`_qzV
zbkYXZ6RSTu3tCNlqg;&TugYDHa$Ak%e%Ptp(f_EaE}>K#^es__=VDEWk;n70CRA(T
z{~#ILQYhc9lVnfc&<OVp$*4vi88tHabsKU9yq1i2&yXU^lx at W}q-d+dlb7tt0Nc*(
z)n;L6uh;EH-BflXrS><Gjs at E%QrbpoB<qf(6z)j0^zDDBmC-JF+dI|j4ZGy!{X?yc
zmPwAjZfEjYr&=YxS*wl^+IqZ%e{2g5k4n|qYVqW-xru$}`gg8(=a!-xL%rtyL%ocx
z#S?d`7j3OqcEodkqh8dGo}dRsqE3&aTsh$#QbXoG|Drxtf2a?A?&SZhKIq4$Jzm${
z(8hmkTXqd=zBdR`Kikmdw#6NP!w8m^(fK}e?->aR<1G^gi|JEO{mh6mW;W?c>V|c8
z(JSY=0dM-4kUGaVeM|}V0XpR|h2Wlx#hX4jfrJuXsPK%HEvX0~IMYT<hT?g>eg~O=
z?py+HFrHlRE+FZHx6Ax`kQv*3v3h0Fowxf1*!E}A2W|Hc=)oyW_t+i~(4&80`l#*i
z2J~>Bk?xFV at XZ5y2$*#GJ}rv?d%_^Ek>D)@>}@Ge-;l)%ut#1(a8?2KE`@B|ZUOcJ
z8qUDiI>25!BfTFun*jSTCVe0{+W`A`8tx0edw{*VkPYt<U|-0j^WkR~U|-Cze)a*q
z36m~?pF==zNJ8`J8PGd^2AfZ>fS$w_`6R%%cR){u@<YMD70^>ad7Qf>eFAz)DNpO*
z7|;{n^BV;2?SP&$Y|}@9dncf0yluKGxV`~BYi!d8gL4Y#`E>@;90tz>*qPd<yMXIQ
z*S&aO-w3?lwc9GZn-_mQf28lX<C at _eVDwFG^lfD9H;w2!z&rx5VCi@>SVlMG;KBNa
znb{i8TzO#a?-Af+{Q48lkKLgsu at K92O@OOSI~_-Ga&!$+*%`m>HV5H$xOlh2H=)>5
zhd2>S->63Yl3tbv_}38j1X~hvP708AslnR_w&8>tb=%>M3>H{#uE8lbA^hxc(tL`a
zPXK-A9evN&UVFIB7|ysUuvvRhgv&dH$>ILQ5N7&`fj2?C4xUIm at k}S)tP^iy;K>a3
z4Gs6%(`YkLzZrf*@m4Xzxe&NH4C;<EXB-A$lMQ;n8}e*9 at 8S%FDg56BUxWDcoJ9 at d
zjCuKupY0*?@>`re8bjRyg5?BpX`Wv~XYk`#7|*hvMH-wm<ygF&^b-06AI7o3`v}L<
zQ=B+WjT3>apY`ksIQu$5c@}PK#IbIlL{D!Uc|$zvZ`UcF9d#Sy8F)iH%J=RRuQzoY
z;~98EJj(a&6t6FJzpSKf$mxr==?j?^khw49=gzi0iu$cBg&P*g;Thb?o^bQvw(aD$
zh1;Q%+rjw6Yd`>BN%gb_dNSW0P#7 at VR*Sh=O|}O>i at oXB0F7r|d&4b8%r?ZF3yq4Y
zTNfhjZg#-v>Ww`?oTp{a_OP+(*%@P)C0+Y~w+!<kGpc6=IMo==Bu=O6eR_t5w(-FM
zG*6lB7lu>}8Rh3>%DxA%nw|$5g;3<fzE{r at yg#I&XW-~rB7eB28qX(t!95lB-uv|#
z%z%D4Q%c|X*Sm17-&^g-lb*ey^_AJ4r*v(A(+lI<0de*RKJ4{~nHeF;S>`!}_WWl(
zumk#*n%?c~O?UZ*_3|S`0NRsYxeapw?6J>wJBPX~@pR^mG(0af%nn=&%k==)%yQkq
zHL;v6xa*ry0 at B#z<B8{C)?w`P&BMB-<63r at 75n@l?-?H<*rgd}uI`5CSd&ol1<*u4
z(v5(s{A?~zs>GEQujd*n7w9M0J*2)L`{C3I=xSU6 at _McURstUZD}d#|GGHl?@IvXs
zC`|(}wfhXRHPIc at 1^RHBEPQbGNw-yJ6KX<+$w~Xjm)k;n5O29HxPdYbnKy+|a- at v1
z&rRvirn*e6Dr`!7;=1I}u4LrYHqw5_C9EG&PJKX>>$K8v#v*sYX1y*mD^O}a)%;~I
zDH(@d)Z^wGvt$oQSB+NMPi$599rEs}>{0h9*jd`+n612byIHV_v|B*eHd1$|<`JIJ
zy^pwiqy%wm0&HH8y6Y2q6Ar#S$lSR#Axz2maO|z5{mi;SVl#|vCSl=3sW4HJy3h4K
zr(C4MCd{GOqGXgNQdyz-3F|09yM35Pl2U3CW-jd^uy{FHiu2Sj6+do~^&nk0Uy;hp
ztn~frem!aChjci9AJ&z;bjMTqu#7C?=H?zhGa+WKdraKIg>j4AmwdED!FnhR9*TuA
zOWk4!adl0Yx#R;y!bkD3c(R8P3}X0vrjwtT3Gtbt at C}`)i13*hq!=F=GH4L?E6BtM
zAKxJV at n}{Y)?bkz5>8z1mk^WS#>6gOZ21R2>K-<1a=^s*Co)T77cjmPMl*sH9$tbG
z0>LQHq0EwmnF&jmboLf{_%aLP;^Jx0;)G$tEXk|XG^vZgYsFAz(#!=N4$J>({;`W@
z(cB4<z1tyPN1lHu;B}l3-$<jZ|3nVo(DCB~#|KRCVJ1dQ at Cp0V%wETfM%7~$|5?P>
z@#1FBW at g1LoH=h1LzB#%xoA$me*Fx(eI4r$`t=Zb{WJY~3>W-Czi;I5C&COH_C~DE
z4fbD^^GeSFlbKnu(M#tr6GOvZw=N-X_#0z$FjjDg2|)kSf7Hi>^)(|n at WuW!#b0zO
zgmnS!0&4F-2)?3BW&sg^A20y$1PWUS*$(Ul%pYOn4X_35f!@H|00RsFT!Ep00Pr;9
z;?O3Z5deZYTv!7xs{s?h6fgt20Qf2KKa-Hu3?*@0s{#^%BtQ)$18ad4AQe~#D9N}q
z6 at Y8>v?M?cBm--K6aXi))7AkrV-=7HBmrt58CVOX0I9$_APvv}>A-qm1E2+vUWN23
zq*o!m3h7lyuR?ki(yNeOh4d<<S0TL$=~YOtLV6X_t2j%S5zg`zg!9o#!dbPNa6bNo
zaBzZ)gB&?YYQjlgOE at X1gtIP<a5U+Jvwj2NXt7nBnMF9+I>OQC5Kit!!r8PLJ3#r^
zpV~q=TMG%NsF-j{N(rZ|oN#bTg|nlAaCYv({#GU7?AeRMHMXP|&>MIgcn3hMLI1YU
zKMr>RW<VE!3v>m{0Smwq-~m=ZH^3UO0lEV{06V}QZ~(AyCvO3L07sxN-~`aJ`l%s>
ztT$<GbR<Vw`;ss^xGI*!CMaT8Bw%D+uxO at Y=As1J{Q}2N@(B*~WBh~1`!FG)e*TQh
zEZR-UQV*X+3BC!77sy>^O=I5m at HEm9M(Sat!zo3I*JaF#o)x2rj-RcV6F)Cb5rZr`
z@*ESpB3?lU1;ygn*hLA8KVn>6W({I6GW6?5%N(;HUgCnma*2V=OJH5G%UCjxdLqvF
zkU--gEWzNqf<d~;ei5z-am at HpgE00Q_;GPd65t|aoNsUt6GI1}SO#$x#W67pK0ts^
zn9SX0oQxfw66P(8ja!<));r9{PvIXpK7u*|{enXnOi1$*;@EkjBR=aD%X*QSF)^`A
zmM{~1Lg;K_h&Lv90!FMkOibJ&q+Gzt=^DWjR;DpwbjJ7>;fC~7Icy>-i!sfceiHig
zUAiP8ZsEL at v9lOI*}F`n&x8mj7`e-0=geEg#$eO`%eelFW*K9S`DgL`B16LdyLrBf
z`#Mjt{}f;Uu!z9W@!kxoLd0l8$_-^OlL?H}gVK4kBnY23Ye6iH2ltZ2 at Bm%>Axjrf
zCw0fiu<qDpGg-Q1IZZi~iN^yQG(28tj7QfBl!YHPz66#Z6HC2EyDWKSY75bJ2GgVF
zJdFN9SSNnoKjop=4x9Za#!A&rUfKL;X8zKJ at yzVSaSI_zOl*9 at ytqY{WQ at _+|K}3?
zNf|M5OB6GgEQwuguxraP^2M>V at 6B5@hl!ZEcus5rGXWM7w`dxPiCY{yiwYOLboT7n
z#n3u4d+CA&uC#v*GWJc&F%fYIGZ(<7jd5wGVXbp0V+aZH4{`UMz_1xDfjP2)#B$85
z6qqSd-!U`i%wZNSUC2l<EDU90mM&h5v4FbJ^AQEjU`h4*uYNTAwGtV&H5r#BRN-UB
z$mzt7<=eE^va%~P#?6hUW9|Fj`a`oNW5Of-BmFU6286zHGx$vmjPhrgFn^yQhVhM@
zFoBi9CC2bCoIxFFtd75^KXo#zhYe#UPVi+IzljkH6M_Ml@$-rBVVH=(5Pw7dui|y2
zr5-HL4trn?@&2u<u#u^HA;)60{*r{)#jM)M1h<LMAYHGnFy!mQ%$gUAk#k-=1My}?
zFN#~d5bcj;HydS)>yntcv9lEO7R`=RV4yO%3?sIIXO%9YVvcb||9usc at _!aDcHW|d
zR}oo<VZCiMv_EEydWd}{PV}D;!451#nZ<NiApIuD6akUJ!C=wvXD(T6?DsB9P;WY@
zEByQ;{Cy)7xG=!Nkb$9ljS_eY{6x5<=%^slz7ZE=c1MuGKWsv1gd%W4xI(}rES@)K
zj$uOhLzu_E2owH`FwwsV^ZXZK!`}#_vyzXmum8k}jQ at lQp%WO0%S`OJf}zzG;5Xc}
zQ?<tgV$Pco8p4G6F%yHsI+7a{2FrLAZphHbF#Y+=nzfitgQ2r$W0}D&$zeu at xRBvr
z=7n&haOhhd&0&zs>veOy%Im*TE}gb%)&HbeGNvQKpOibivp(L8`>*SZQRiQlYYhLh
zVmnorjCmvOzbqDU$N5aa*z{ji`*nN#i2$Cg0G-BwPWk at 1MZhNBjQ8JYA*7*;sR+Zu
z%XpP#=!uweUUf9|L9tlOM9hs{9Lp at 38@F`9EG9aZ5wat at VWycqZ$a!5H$=gt6}Kps
z&Rs4m+!$|fZ`hw7d-dk~+Uh$j6Xj#Aq at W=JW*CD-BV8Ph_Yg4b*w_)~@j8qyDBlPZ
zB5W?!k{yf7S1Zd-d5aL|PZpZ5%J)Q^PK(Z0{xtvB3s81&c@;K-=4)KMc3O;%@tG3H
z$Z)-FT(d&239&H=Og{!YDs;X!RG+S%jNHPRbOtawW}*`t*;z9aW*XULGZ)O8W#ktx
zH!>(dF_%vA1~(lSI&?M?vi*}q at fa%CvUza}X3}*JgK-{9uBGt_|Fw)rr068tgxHz0
zTm^&NCoi6t5bNqOs6!&QCRjik-87Y9?oh-m?qpD7CI>L=-VzfNGjI0mHT$bQsOUMf
zJ8eK2cb*8b?Dk(&z%?dr>7s<u>;;WwH>&X1g|BsP+3l6mExWy0Bg=08yh at hc46XC3
zPKJd4q*62IMk{EZ3$R>P80R8Jg4qiFM<VfdS>ifqDC39Tfp($}w9va){w=|JFn%u9
zbIk0S^A=!thOVIgzc3%#>1Z9ORsBKy*YabGp%FUfx7b;9F+>$?Siiikr~f1$%+<zx
zV(BW0CJhN4&(40h62#TTVlpl;fGn9ilV(XT?-X=Z(h)Wbmlg3bZ+H=Gq$v#7xL86b
z5W?CJu4Cy{HFhcE7oe-rO-q>dBB-72X+|$t8k-OomoV2I7nku%6O5ajb7wAapSd(4
zPBABTk$ZFkEX8A_V&=$EBZZ3ixFzng2t`=j^4P at +C}T<Nhf8A@#l$LN7tT}Q!U3D0
zGp1ycw#k{~WG4)T9|t=KiDVc_A{U4nG#RvntR_c at EBO-g93^37C8rBn#UW%3CydBA
zu1Ld0ns<<<25H_wni`~8j5K|WX*`j}6ltVL<B2qVkcNjeZyU>b+gQ$rNaKw(wkT)y
zKPjgR(l{cG66H7|jS}V1G-6{p%l{!ws!O^{hKtT+qf5R^p-ZXDc9&f)dtItsK6UxR
zrN-r?%NdvRE*D%bxm<R+=F;SH)8&rKU6=bVk6hYZUbqmx8Q+|5#kb|#^Lz8(<}>^O
zd{_QZzJTw^_u`BBQobL596y*J#*g4n;ZNny;LqaE<uBmJ^Aq?h_^bJNyB9x|pU%(V
z>-Zb_`TRnDDStbE7k at 9mn*S;P3w{m%B>xQmJpTg!68|#)uOsPSMWfgFe;rBx8a8^3
z-^BmxNNO+cBX$<MirvJX;?ZK6c$|2=I6 at pHjuy`qFA^t+SBewGsp1V{op`gjSiD_a
zDXtbD79SU%5q~4TB)%$c5#JI2UHnM=Ol%@Cmsm^eC4D5$5?6_v#8Wa_B9n}hjF&`6
zq9oChxspYa1j$NCq9j$aL86mvmK002ODZMRlEaeYk~5NTB$p&tB`uOWlD|tHNuEhe
zyv at C>z3sjGcsqN$db at f5btLU0W?pGj`bwiSUTIYMN~49ZG+OgYqfM_gN?vJ{d8JY5
zD~-;0rBUT8jTXMrXw55)Hoej)d8JW?)u^ZUUq at 0#%oh)3ZB!}_5C^k1Izv2LynwY)
zrFgA4owd<Iak+RGYoj&d)8g~2jW&sIi|?{FN+eu~6>Fo6gfAJ&+Ne|#APHt|bcSTM
zWC3fVO37MDI%}hal5)u|)<$b2rzPiE8*P%@mfU4+6t}{?tymjny!qZky*<50d;fJL
z?J0a)=q%(5hYE$l5kj$0CJYb;3nvIC38xC9g|meVgo}mCgsX*#!nMM5VU{pQm at h0A
zmJ4?YtAq!IUkHy2PYcfrFAD30*Mu#?+rqoT--J(uFN7u{uE<K%L)26Bw#Zq;7Y!8&
zMI%IFkxUdI3KmTeO%hENMT=&O7Kj#$mWfu25=Co8>7p!AjwoMLEGif65><%~ioOsX
z7o8TJ7hM$9i~c&2zAa=}jS5(eN?DDDu^OGhYBZkJsFKxa2CLCRR-=1ajn=Rly})X;
ziPh+RR-=T~s4c5ehSjKm)u@!!Xc()}8LUR*S&b at Ljb^YKEo3#im(^$utI-S4=rz$_
zM^dWM!9uFh(L$=x_k>iVQ9`QG`9iAEl|rh~G$GaKW+ByRg^+6Wu#jr>oRDhts*q~*
zZ$hfkXF{q`OA*y*9}(5)U=h{mXc5)udm^gQC=u1 at d=b^?N)gp)nuuz2vxsW6LPRxs
zSVT2?PDC|&Rn#Q<>quJdbJ*v&&l#T!KJ`A0J~w^t`uyhe%!kO#W!AEuvbSXeWP at cw
znU_o|3y_VMMaZVgqGj`C at v;@NPh at Ll=`x*cv#eOQUA9+tQ1+$lr0l%xqU@@yNp?r}
zci9u!3z?a(rEd at 4-oA`4-`CC8(^u>(^L@`Z%y)|Kbl=&&3w#rNSNbOUrut_1=J;;$
zE%n{yTjhJ$x5oF3?>D~nzSn$j`u@%LH{Uj2;`i5)^srA2H2MuRdJP)=8#LMmjdGz;
zduY at d8WljJ-q2_;G#Uks&V@#oL8EGDGz%Inghnf&(J!FUbI|BzX!JHT`Un~|fkthi
z(Z0~=P-t{CG&&9%odk`}f<_lZqe^IW12mcsjaERTpF*Rjq0vjwXbUuY9~yn>%k}%~
zNLu4_8XCO>jkZ9e_o303K3tg<G};Fmb%jPpK%;)p=mcnV1~j?|8eI*Ira_|{q0w?^
zv>F;c4vk)bMjN5gyU^$}Xw)1U?Fo$zfJTMTs1zC<4~<TRM(0DLE1=P}(5Ma?Erv$-
zLZe?oqvxT~tI+5jX!Hp*YUXF<_t%m1iQ5Y|;?8xqbhmZ4ckkog*L{GytGk=K(A~>j
z>@IT;a1VA5bD!iM<vzoGmiv77MeYgiE8IVEPjpXpPj}C9&vDOpFLW<=uW;Y%UhRI^
z{Y&?g?q}S;alhz(+5MV(i~DW&yYBbhpSVABCjv8kdCXd1FX%1kD{vOL3Wf at Vc)Uw2
zkO~3>?+L;L5rQbebipjaT)`s2V!;Z*YC)o4tsq^HA;=MI7W{Q2{i|rSQ1I80l(?J0
zMy+9^y<wxyu+gEg(GjpwDQxsT*k}Z7bUJKwE^Kr$Y;-kjbS-Q&12(!DHd+cBt%Qw!
z3L8BR8$Ayjt%r>^!AAcE8+`;Ded%r{Fo%uyfQ`Nl8|A}B1+dZ4uu(tQ=y=%Z6xe7q
zY;*x^bQx?^2^&p=jp|^dTkw{*zmBASJ+)o^-U8kR7+?S}2yg>Dfzf~r;A?q)LjVCV
z0+0Z1S{pwRFbePi0)c*7CqEZpFyIah*E+3q)Q(;01ULf&fuY*5s~xo;tabvNfq}qK
z?FXUG+U!t1Fa+=bMryMIoVD!%d|(KG at 8|}M)VBL={W1oK1J(f9z#gxE`$tIe|H8lj
z==cAwmj9#Q|LFIxJU&?dP~t5T?f3rr{CV%$vu}IjcG1{DQ*FjpzT0oC_W1CzA4=XE
zYxzUWSUi>se=Yor#x}34hW|PE-+(`nBEIy85=Pp*(o>4~(u&C&zOR^7aS`-842#B5
z4zHc7T1hHC1qSWx+S%W)KgRcgz)-*g at B$=&KM(>;2BLvc81tpTI3OI51AZ9ugMmn3
z2Cx9YnC~|RkOA)j5tsvpVB8k~BLE5Dk2wHi{%Q|kB;XAMU=A38abE)X10ld<%mH2)
z_s0V70%1TDI|nF?b3hX4R^Y3DdkXOSUz!8{qu>9lGc7~<5of$+V*p-T!6yUBATpQ?
zAwvl+YH)f8TRUVp89}_rC^Cjf$XFsJGU7)9aAx~G5==r#IGIQ$;rzRtOeZr)44F;l
zkp(0UcVm~4kI2XDozqm3PBMs&Y$64yOF7v|_L2kSbKJE(O=`(^<T7a_H_0#LH at xNx
zH)_d$`rv=JH~yy&{{LZ&Bj|w~oT4xxBXQ0m73VBouxD(z;JU)s9HADVmN;R-!=z;e
zbVF~oM(?yC`|$LF7tUJD#aWB{IBTKAS&R2@)`G!V3lp5_n1M4L1ZOS?o{k`RiUH?u
z at b4Y;_rA!{38@%7Ytav-I3uh-FaR-KK>3hjAY!?Krw7so14EGiQ1*$9OBf@}FiPO;
z4&Z^_ECfX4Iq at XdFlrEt8~0J8VUTVF#*Z#!H25*##o#57)SJx5h%yUf%0l9U5dz-`
zAij9TpC36v{E<%p`Ifv(Dlpc}!j~n~s8tOKf_{QQLs0YaBpxG>6`l}TfpN%`On`eL
z@{hnc6p6AYL59fyJw5+E!lR%yIowl$X~1+q0n7kqqTFb*5h>$QT04m)TQHW{kU1!A
zE+m+TeCH$H2fzYodm-dl1jNA|kC-0<i-9FT0 at 5#qyvv}~<<Qp($np{5u0$EDka{)w
z6eHtM@(I$afVHT13V^dg1ZRUt8h8zWvq1!BgUANtp at q&eU=5k5dlvH7!zOabZITOY
z#On_?k)O$CwEPyt-wKTsf)*i<Vzh1<_#J593bgk=@YTQp;2>}a_#F5G&(zeQ)lZ at Y
zPr(vSBkfmcsWS*Wi`t%p&D5f%=ON|S(8)K@&9?}<0DOmby$E@}2Y(5ugP!YQLqCAO
z47sm>zY0w^AkH=T{Rq&{`CJE at kY_X8EzrUZJYjPanz)6QzYPoc39WwzviuA^{tcG-
z3oP<3WV{Ef{5$OSSF{7Q_y at 4`-(c|%VeOAl$H(X`Pta3Zk#8Hc_7v^^4E%H81+4XV
z)Zr!2PJ0pur`b4Z#Dv4(>nmLdmot`h<v0^d at I1Ux!3zF1c$Nq+-Xq<C9)KNS4>$ll
zIa^6D&KA;}6H4CVgy73??-57N2=X?koxB78z8o9k#0e%0$BXoXzcZ&h>5uXTaLy1H
z at O(}x8OWJSTsh0hAYd>sgfp8A1%?4`2zTdL5CO{a;A9XXs0i=`h65uwZ;_Fl!NiLr
zC8L1R at EZe&0SVv@`NslM at IHVq$Cmhk`ok{(^j*$DG7bm?-UEVwU?2n-4}=0?KsYb~
zn8 at Lg2*?x3F(;EiCvz;x6ySa26~%c#<Qx++l~X~cae9#HoN+_}%-|d&Ga*|v5Q98s
z0kObrU=A=Bm<P-UJ^&T~3xP#I9A`9%=OmF2k^f>K0aymC06qd%bHd2S95eC>cqQ8H
z-}#LrqW<H^k##`YI8qY~M2sV+6ywOnslbeJoXa1NGkNmaIFr^%<4oEJFbg<4&Xo6J
zoT-%vC>dwkjSs-hXa?A1z;aE=0JA1M%GE?%fuUwn;s*Fw93_5$tr>aAn6<AGm_1yR
zVOG;#Xx84o*R0)1YT-n}ENY(HVmM{U{WTa<?@KW<hM~{w1&<G@(7vY3Fhv^E_BBIL
z(RM&NJcERJWsu6z8RXok3^HSE1~~)%@4!j8rvfHGD&iP_O8X9uLzEjkcoU)=YUClK
z63ct`hqtaP)kYp&QAy{5F4V0wQN0bFv%K0wWeYDZ^<M{n5cDi!Mz~7P4&K(lo5GC~
zovPkoC~wX+QPH at RR~mUU at T9vTAIf6bQ<}33Aq;q8!Y&ix!%@<>5Ce16YaSh1DKPq@
zW543f@$OqHKaFp0_L{ft!eQ%6{cSA`Jc^*P*!(GP--#z2b0w`K8^@#*Z`z4BGw?JQ
z40Egul$`;c)B4h1hn~B#t}d&Il+NpDSNy1#0?+W{F;Mz5AvFex=!5!n4M1$AIA9Cf
z1mM>>ox$gS?eAWyH~jV*BqVzcZH!Mq8vR)tK{#t4poaQFyM}O#)`p+4u0pnccvq%T
zPxNpqep0sG(jqdT4H{Dk*pi*b!U at KC>fZCpEoI#}Q`_;Q;&D2;1#sKibcE7r{7tv=
z5AOTaZIlgcA$4{te=qBPT|Sl#DDPGNH;GAxK7)7zD}YM}Gsv#043b}&L9)KdAk|-I
zkittDq#pd$T^Z!lEg3`!SOHN58Dw#O2DzArKE4@!9FQV at +j;o^oIx({1b;4rOoIOg
z at JjH(;Q41V$oW%<b0UNEK9)hg{4#^g`XYn8IE?fN_XOO4m0Pj)8t&?7&Hf=I|6T?e
z3J6|gkS$L#i1-20-p3dNQ~>2bF|Y-=Xp%{`147eGGTtncT;pYu7u-zPqv2m5W(?XS
zcW=_)Rr<R?f4&$gJO24%)%VALG|g#ICb<uokI5wS#hGNpSRDEOfAJ@!c^QqBvb5j*
zJHN(zmy74`7Junicqqf+>z}{ne!P9zkn)`58=oblrJo#Evo at eMSZL8)xcLK5MS1VL
zf1j{&fOhBV at kL9gX>QlQJ#bi5RK{laIUiM>jrnMcvT0u7?FpL>tcWz3a7*pn`>E}^
zYjHp9y70vZ&lg4d?Ou2-)7i55lT5RR!_L-tD7;pGGTm+2)Xiy2A`YtOHAWr%W=)T;
zdJWq*%>EPG&C|E}>xYxbCkcvARlof at CG?@aSMnLN_Zp{4sy_-mHM`#Gf_Cs%PY3yo
z41Vy*nVBaRy4_P$S={@^=5E#xrYHNXU%1`o!SsMVz2-DkEnaWml<WOozq2Au at _U26
zS^a(c$@7=Hh=K<Q;@5mLJH}&_2Of6v7;b}}$%KSOwn2wj9w=Y+O{!F5zud|4QvAh7
zk6E4_K0Eqj=f0<;k&OK&tP`I>(;EE?slPEFw&NLirisR(ebCgRlN{`rfaI_GtCZ!9
z={t`L at if3#hVnIENLgcFXN&9T_iy%b#QH1!yxzLdxaQ86qVC?Y{J%L~p3!&Ux2YG8
ztZA5;Tk>1<?<JAFrXTi+ at HI<YH$)sa at Z#8->CxlvEbRTOxAoTtWNRV<lkV^R;LG{X
zJ at 0-|=+cw-`3Ci&$O4=4za8n}d&A9dt5eJn?STOYrr)^K<BRuxzPc#M^V$!gfw~bN
z?6LLyQPK6~`?JjwiiBeZT$SHU{_<1RmdT$_y4-r>-ua#D(!2um``h^0eeXVibL^gb
zMf}?Dnw{l!&wr7uc;@}S>qdW#(lVj!{U5(L{&Jt@{QR~H(`J5N_EE9ZR7syL4p;dP
zH at Od9s{i;_z`%U}u3vZA^wltvnce49?Am+bB(LJ_nNACXYg>D4S=IB46Pncpu_j+6
zMW;q(EFD=gWnxJ2#k7gVKlZ9GZqR$|p1eaNF3_9wPtscl+|tM=-1<Dy#K-T<4&NM)
zs_W}K_Fvzj|3qK%=>4O5-p*TjktVkei!SEsc%_O1MK^MF3DcT4r<6|#uNM#0H~;FA
zQ?g5uR<b8czc_ZF!{iC_3pdJAW@(Z{nYBf4<$hK6Q`&;cpDGsYIJ(LGtAQ^L_m3K>
z@!fiWcUy5F%~_tEc01}x^Idsb{VyJuZHnc|3gNZ+Ar-axHpN#R3d$V|Y+B^WA#EQH
ze;732aD7X`$BsLh47vZ0`lD9CPrupg!PAy-tL5dT^A*kw^Zok`h|yGd9BBH$WB<tA
zUu=o1Y_~nSD=&U$#gSysV(ntj;=C-I@&X5|2?Z-3?$#ulP0Q=<P?)#WrZA~HuOzod
zQ=!e(6x~SLTHL?7Q9eW$l2)59-~VIsk&;!VB|BGbE7`uPyky6!qLRv0g(Z7dm6YsS
zRa~-LaX?c_>*H};YhtxlQ7F$5Re!60zqlbMNI7xq)*^vYwC}sz6jPVYqN4A%rcSe7
z6>_*X|9MGT<oe<m&d%%@vNI#bbZ2Ia$<CaZZaZ^htaj>RY<B8ntZj-K3if*o9QTjC
zp2OQ7!-IRvehK)>nBm|z?l%R$D`q74&HFjvtMa;w%40n4fAy_HnzQEC`r^1OT9*H|
zhPBONg|0qHlksSp)`d4s&wn&YzNI-)Ftu6z(`L49x at r!rUmTbFy#Fe7N%pFgl8jYr
zOEOofN^({yOLA8wmFQL_mgp7wpv3RDDykZC-mgMERo~@q{W(u<v*(7AS20-^Uh#Ym
zEzhPn%Ar~Jtv<~;F0KCdPaEY)+yl+OUa!+s6`bNt(tNe9CGV7zL-1a01-BtI@$hX;
z?UeaVm$`MVK?5IqE+`KPv8>J2+*zgC at 4PB$KeI}ima1vu9n>(qsu+81v_|kjR<u5-
z*f&LycwK+CTCuUIG)up;Bqn!a at fH1kCR#VKN};dn|81tGG)8x%Ea{0&u_Dj6xWQGC
z*x=x=Z20j(u^?MkygGP)=}()tHgrz+zQgNu{d7&GkL`wNlAiFKRSu@**?P+zKW$9;
z`nsOCN1tQ4Em~jjC@(pCuReu0O_6z|47OOvt=?aJM9(Xaaj?meZ`D-9^{v0V^}zgV
zA;I-6*NZf}<poCfxI at L<I>@vfGS!_`BMx6t5L$I5Sr%2+ulYldcOMi9vX5 at xq>tNi
zD|=Z>mVWnvnB0YI{bF>eXWjn(3$ykY(mM9bY$}C}EnD^1imjE3#4Gx<hdctB<NIY(
zz3ld5<Lhbs2W5iniN~(!LyN8TO`m7$c^vHlUgBG+XoH^Gimk~ORapy{{=lZqZz_$;
zns}_?K+}tbS+e3!iuRWz>3NAU_D9P4ZEY&us{gUr`n>|Rqw+x|)#c}3%8LCOkCq`$
z733<0JXO#`RgA-fJ%Vi1^LfGV(9_v0y>5VAns)cXtfM;+zB|SN>FjH(uV-p at XD!st
zi*k at f`3-$Hx*-pg3Cj98v;Hphl6d$`{Vn+>_>I|LEI4#-AC*y&MeDcyQkFi~Ls39w
zx?C(shs>E;v=uMM<Lh%(Y&^)DrQbDPv4zIDZirK$t*|~+aJx at 3)wQ;S)?t-QTPVm5
zEw+SiAb*KM*SJ3<uhx(UbeyHv_fllgJgyk>$ki4u%o at 2T{#<y)_f!Yo+G6Y6qdN+c
zhaCE8v+h!~KD4|+|9DrP-fpksR at 8IW{*q04--;Ofz+>43N6KPg!zWVwi(IT*WdrM<
zWMwTZ+dafyE|G82>>RAq-r at eBJuVk%il*hPPr7k1rTE5!lwyU$BTxBvL5FKM1x at hH
zy-}36KCg0eugAkwKbl6WcAHc*)N6JImwZ)}RLzV2K1EZKtLAO1J at jarLYHzvwVShg
z;H1_h`DBgn5PMm%YkE*~UO`aP>C8uEt~%{D?%B}98wcxK<oh*ciaJ at zRexE@l}2rO
zmcH$`TiNCF<=;Oqkypt|8aS<{1AlnlU!IWG#HQKbR+4wYp<Izs-||6D{V#$(nrPKs
zUghKL{#zU~CmyTSHx?av;#eF!pmCGxo at K81hZ}m29wUziEv`*Y(rXGs^s>Sc<7LIa
z$Jdr8Juxk|&OsaI=G$fIeL@}cwI#Q*r<Zs{3 at _b~p)In`*A`Ou*3FNcLANO~LaLsx
z9bT%P-?&Gs*C?`bZ`&VvVp?de2*2ErF?nP|Ze!u}15Lwn9|x7|yYddovt@;@(a(#x
z-!%=(%54*6=`2 at x+|VRnFGJY%=Ox^OjYUIp>TeI6+*+*oA-tkKM|-13wo7%?prFKw
zDUGG7^_CTnlhXRS^ck*>8q`>+T5nUXsBSD*t+y^y90*B#o;18V$_2W60(iAL53JM3
zvUK9!^2plMhAzC-kF!hXIOc>4llO&RJe!VjJ1M;4vXYnCFpRgaVNlb}ywdgM4QqK_
z71=@AQ!_&ov-9d-y3DV?rO-8Xljm!avvlLnVw|sz%)VD7%Fz}NjBJV<7&*N3!+rJQ
zTiHb^TwZIUeCdhO$Js?AB6AR at KvohpOIwDp5sFETh4Kk5x(_+cj3PTUvEWcp=A=x`
z0B)V8bl~vTVvla&6<0QDOR{vS+1$%b_92^3RM31>1vc9hdRfVo{Vt^+a>9$RWNHfs
zI-qQa)?!1rRjEP`890qaipUe?S-N>o6cH{rKjfgSx0>!MvYVN$2SQYGJJ?n>bfWvb
zgnLa^^4YJ at _jj%R2kKo)<1=U<(iY#!F5G6Fqm8!9l$CtiLmTtBr0A2!@XIT$tq}M&
zKcRBx?|mG}y$G2dT3h6iE}rojT3=Nc^HNRoqbVu3HIRSq at u)hKy|npBUeVfeHqF7H
zY at f{hDDFjn(x5#51+CA~-QlAzZ#0zsWB$lJ9}d+fP0oFoq0qNRD|D^V4!P&wM_rO{
znHI?u1;ZhuwrF7F*AuN{U>h|3dNytG_t{h at 52{}4q;Q)`Z(gn{=(d}UmuW1cprZ`b
zO$R;bHPLozm+E-`@T%`KWF`Ak8VmbH$qI$P*Oq1FKAi;nEV0ggu#oBuIv8q~-CCTb
z>-v=<r`1`JgSFQIP4umYg+p)sQYdslJ)#0mY**-Hg(7}!sY0hw3yL+R)_I}D4L at p<
zH?8G;r_k{d<#pkSKV~HVlA`04Y)$6<ZPRU=?-UhI`{V_!CXbT}hw9hzJO<XKC1&ZL
z?Qu+pY>vav$9JK51Rj^)9#qtj;$PN~$17?mn>?YRyrsf}sV(Zasj<-Gnj`#VC1>yX
z7dAYV6%KOpFKYN5^=8wLyuOMTng}`69znb+$WZlTX87TYS=6m<sXd at +p|S|R`mgeD
zD$?qCyBsUSuU_5Q+~iT(?BG~<v{<FLTCXZF&sJnKrmF5a?)LbhIordzHZ4w%{+o$$
zJ`H{Bkhau%gLbFtmi6a~t>G6nNzJ|N^20A)%nrXQ&(;=N!|tuOXp2<0I6D=Y;TMCl
zQJ2&crHV}$U)H1T{j|mMFJvWO3~%l_FtWL;p`W=_FYgk5 at k-wLZT=hYm5K5ji&V+x
zW!hv-q#`o>@OAXPDJI%Ix3aeh6_d23+;2k at x1i6-GF@&i at 51&46Re*{N9NW)%hGK)
z@)+?{dW&*JF4|X5?E~p!PV9V~1poEiZ8RV2%yZ~tjp$?1-=L4_mOp6ft;nu#+j?NU
zDkS(-zQ#U=GEamiZr$giTehM8*5mB*&yasn|DRs>yJZ`~E52j<UHNC$nfD46kvEX{
zOf{Q#pv$A>9G9C&`-t|Tt%sU=b8C%#_>w02v1$2diiB|C^=x_lfauBJ$#t at ls`)`#
z$1~Gf`nMIVlD}QwqRD*pz9c6<N|YIX?uxSUuzn=(vHmCC1KKb4y&FFII_#Fpa1s44
zeh=IKE-NA*7AhjJX86&c(@;P1=+v;L46M2K|MY44>?N0uv<SA at 6gQ~hKe41qFjE#4
zIKC-EaiIR*^n;F7R|%aj%0GvG1h-7LjZkbIj{H%^`r2xRzBzG-J<8entb}{Lwqmeu
zq-uR%>TVuyokJ;Y>yf+Tw`pfu=b!r6I_uOL`@qKXw+H)98zBCJE~-+e$sg9gV8_k~
z!+5Z-oz_KB+z|bT@!%o!{@A8m^}7i>9_%||tTV;~L!F_wnofHDyvbYedwmPWH;m;Y
zzg<O6?bxah%6yzuzCnIbb5hZ(sRm<$Nka~=iF-+#mZi(zWuIGH!S=!LG^JTOjyc8%
zlYx&s7cASCmWViO8*cG*S-OHLQFYCF$J`Aq`rEt*kF(Qq^trrKkL~Q|Bk#l>2V5R4
z`&1jlOaFPkXt$=6d+B-qEM4Ak$IRy?9!|C8lOytbSkFe-Q5vRQi~QoF>eAHKhgh8_
zPJgV888z+3XY%a&8(3eI1pQiDIYig&>X<LzCf6x?G|Wf-2i|R!XQadgyEFzO?lu}X
zYX63o$NS3 at sXUV}<=(*c#G_kqTc;l=-m1qK^+fZXBFzccJDQzTrolQ|M-rpRZ4NQ$
zVC3#qBegNsnf_$J$J%I`CR!i3Pkx)1CI9YFiD3??f3o#J(9MuwQPZhh)`ootBCntB
z>>O#oDYQ7R$fbJOXHQGyziAmkt0orf$MX$28tAv__oxHfS*m1<omqOD$Bvny#~bP}
zk4BE%vx-w&+Mws<+U1Ottm0^PdN^%pvCGz!4MsoMdm*jmojh5|<B$_OP=>^#=-rDA
zSuUj~C)D5gY4c9f(5%t at w6XB-H}t)V9hD=;#$OK_ at orr+e<AG$SG0*Yl6zHT<=%8q
z6<A{KE>BYEHHm^^gk2XEpUMp{8?d4Il;e6jE{{AKe~s3)`IlO~2G?4JcN7((s#9BG
zW7V}~3Y`||=)78<guchFuV6bdkCVz0du(hi9(6!_<5o=BT1EBnUCZ7du3mbesmnlz
z2fH!8m3*M9|K)LZS)yYBO<$IHE3bT!0^vh+^|vuT(Rusi(gWe=u4mEqFH2NJG?qt3
zOvc&`<Ib_r#Joxu-O>XtH<!{iC7t)t=XYSPUwQz2WKnHlzvNbDRe{C!fqFLoq%7Ua
zrI>dy_F-<*J at 4;Pf%!4}VT9sQdkMF$ad(_vQG8W at qSPa%cE_sn at QNSuHKh$}Ee~bo
zPTN7{QDkb=S-GQZ><XGA9J8s7q;%tc4SyY#wYlJ@)WWeY8?}iZyCKV?wEhdz(n!>#
zwA-{C#et(oxF=7Q_8+W07H5gEhol`>4M(4qSnP;Pla)NV&Dz}#?wPbi>)f<NdH&9N
z?sd#@_eZwJo7a^;&R+MSU0%55)vVM3F`H6KV%}=pHpOoLp2 at oX?utW=hp_G}nc7-^
zpL at w>U&Get{X?#tqq6Vmk)utq&Us#<*e5G#oTp7fnjJ_p$OGfPJX`b2%9*l~u(F*w
z(u<ATS@#TC$>d1uqK1s1XJ6^Ie3SQ6-p(thdC3a>&)bg1X-<xB4|)*le2)m%A60MF
ze_QO5cVeGPVp)NFD<gGD+aOmdm5b$jL)I<HB@>4q97JVVRdl?3;l?AC)|p4Jzj0)b
zBJ${wv%m4M=E$9O>*2Z&uYAudR%FqBB)^wesM(kI!?1E(v-=KgO-pQW;T3<Z+hAgs
zW3x=2%PW`X at apB68L^ME?dNJoXr|?5Xi7r#M~-06p&-gZvrduIJWw8~+2L_lBa?5b
zzcIzZe`Z69wv5`1=4|RT#RJVCZXM0Xv0R>^LEo!8K5+Tb-*4rW4Zf1ZJ9gugNr`2q
zsOn;V;~|gLwfh7%^*20Dp4g2&s0znTp;?}Ki$@Jlc(>&lzn#x3Orh8AR#!@Rnucu4
z-JyX6t6Y1^qKe*yjXikI49>-TSkqPnJ?;s$%B;$B;O*<1Y2(w7(^wc4cC=EPY+2kV
zi&uSB8GiWtOxT97pxQ3OqPpRU|K5gBmy^%;hM&8dccSu2HZNJS#iF#~NlTF=yRlG`
z;~(BI-KMl*YeBg_hd1YXHg6|%c<ht!a+7jT at tpL_d8KiAyNfXfJ0Pqi<hygbuP5;e
zRmnDGpjb=T6!rfc<y2w4l=D!7_+ at dQ@BW)=y?s&tLyF=&J?ziMU)qp$bl1mN>paVO
zcmVknstS4*^-p2_(?9+({P6RfhdbE();kpS&&C=*=V6g*y#>8SzM at L*igjw&s<-nh
z`}piHD3Rpc*eS4RI at doSD0gyZeT!mpV=Z*H2jkGLl$f*@{T$2PF>85M4HwUC!`Sz$
zKG(90);l!!=RKlSi<1pseEnHoOiHOJKk(9$eGeAr-A;+zFiA7bS{=0Qhl0T3U-xb4
zmG{_g>4r(XY5gJ_OBIvSo#}diie1puhuJrBQf6AVh;r@}2 at mT(Pl at G8ggK#E4a0-#
ze~1p6`c?Lge6)3yv8^j5Yi?|dOqf1XKEH8iursb19nxK`v+j)-#-tCT`ys(D%`T36
zCr at q2Xi>sl6zq~d&^lEcGsOx1=`N*cw~DJtO<vqf%?};bZ27xVX7X+bw;)Zn=1URA
zvEb3uqZ{TU??_(h)z50H&<49{n?WBtRJf*8{f=wp4+Fm&qN8#gEr5Mqy>ZH>IJY*4
zwqZ%gmE(o)lpig~D|}Wi at fSv4FDO`*ckqJ>Q6lU@$E$8A;GJyP6x7_9S#W#PW1Ag$
zPi**`^r9VkIlO?pR*Ukyded_2jX|fs&sQ9~G(YIk#QdNW$Ga=;N6Zgu{x;LtUtXq8
zGxU|f9~yL27FAhore>Q#Pqk(8d|7eV2-=UZZq%>7>bS5u$ngmLMx97$DAE)*AnvHg
zEk_zunxav<me0_?lKbGgR-U`{jwY5 at IqL9@{SC)7xL$Z#TwA2sHsET03HO+`4CBDr
zyu!8RbWKR}7`R+JJA3}4`*dEFCo~txBXK=q7%yHbTIm>$zH{PeOM~8WkJikwSkL7h
za@<qk`PT06t5=FO8q6yXSI*ETanEFK4$a(DF8|_bNtXVpo%N9urK)=tYV7NZtg8!#
zzLjZF)UdzysNw+n?a8K}HOcC!lQSRhQdHNsu4>W9u(sR1s^w`(c-7X*z)UT!Wu6XO
z9J8=Uu0!56B{@GmD;(=_V&_eim(+0Ea*zEMO=<shb`HBp$LaUWhhJKHt2Jhze&o0D
z=CY_si%N32U&*4(+rlfZXY9<4)RpA2<9SL&{mNov8yvUDY}iWIgP2>YpZDip+UX*X
z<n3?B4?ldlpn0xbx5sm^u3lwb)a=|)mbSQe9`9n5&&eHG3s3Lkp4YCeO}6}yd;YD9
z4X%v`*Cf4FEO*`M;GxiBEwRUwd$9TVs$!ce`NgK&9ye^N8WK_O>iXwbl6ifv9N;;H
zA9|~*VG!JUUSB)x2WBn&%6y<_Yq31C$yBAc{1W>Kxqa3*A8*j7Ep*IGE~y2bVs~i2
zv27j*Ci0rDM%A~(sI`fZV}xN2Mm;X^jyDu)THg7x{$9gPUe5I{ygMEr*A`)4EKxqW
z*-??BN#-7^m3s`;mdUH?m5wt}#^bbw4zc0G2dsp=4OkPM!<di#B<@K%e`1ck9#qtj
zT~ItQ0 at v>mtx5c{r~SECnvV6U$2DbPZBzfFisI|~6Zz0 at RIe}eTP2w-N%AaNiBIr}
zqu8G)zMdCeoVRIVRYP)kmApV+Rl4w=N|+N~v2(Kq_a-nmu6t61dH<fHVg66m>n&2a
z=W)GoDs@^&Qf;Y6l_q%*)@Q**ykiYT&8LUhYt!V})Xv^fTIV=jY{<jDhG*-Er~}Yl
zfn_<?6~1(RjJ>0s0^46IM0pB~2bv)3%`T6Yj;Hq>8Y(7x=D!!!qp?)JdP9HfoDKcu
zA8j}u)fg(ndaR6lDa|BHr<!b+;qTFqrTM@)O|!?t>BN-lNt*rF^_t(HuQ6J^tuN*P
z?{^Nklz!DxTfJ&?c*QwYv))c^Q!3ADx~kHP4r-Hm at 2ippRVuwZ_L}-_!@A7cu0XRV
zOP3fo{nCcx7|Y}28)YSv+|rKI>zsvYNUKioe;s4AD(g{MTt)pI#ew&t<=Otn8k`}^
zCU(tbc|DuT!Mmf{{HVgZipo|yY5EV1>lAzITUi<ZAHLo^uBj{kAFkR`;kKcQw$;>H
zMWmIPDS=Y!w9Z#?tYsq76mj8J(_+;QmNJggjXE{NfaD4x%S{L&gscc*ktN`UC}^#w
ziyK(D8VHC;t*r=1E46*zC*XX4zt`(|o<H)s=bn4+xo7>H&*%MFB4d73rF`+H6uAOC
zPupPFw0l-y`Zs)S+e6iKBsN!eo}%vPnkgq6N;x!Zs1k9!qM28bdky=$40Kcr-tbfQ
zE_D^p?b6#bE#Cz*cAg$>PigsN-P1L-n^a_N$Dh8(c3sCf9~2KQ{}-3<sS=FDpFW3k
z?SeAe@<{peaBiBSd1I at ml+K4tp^iDxXY`oq1kd}4-z!?y?kr4Pw5z*VymQ4R&bT~p
z-g$XxVv}MSZ;yO0{n2qUPFJOOg_cCtoh>lSGrpTn*~L3OS&2n~TRDs~_x<uGI3xIK
z_1?d1YWL3Hv at WoL+e29r6Wxvk4IfuLFJ$(sG`lUGyQx~ThXfw)KlsWn_Z)jyk%^@T
z>7&dK^c`j%=DV8h8-ATG99g#U^78O`Kajb=SS>$WhcUHtGR6s<pcZs+do0sZN#-qn
zRbU;xC;s#m7T<h*a9Xf$Zg<zQx}hu5+mkJzt8Ix_Acvk9v4%}EmI*b5!C6}<PlQr0
zHw?=ipk+ON9W$D_zlhHMtXgO;$h-#}jG6^(b5Hn}pcf6`frpu- at RxAr5gz7YvfqH!
z%ny`s*!P?!;8nvTj7?wxRwBb#%bYA{r^+N1ldEvfJAtn_>7BV!o{Cw<%ftHDDwZYI
zIbE2qL&MUiT4y?`0S+=$+G`gK664H*bc=7 at R*kP)=lHtKCF_>o=;O^#CJwvp((8=P
z at G?`q!{YfF>!qCR`)3lJEb{l0eD@<%8P at h6gx-o~x^2imK=OIk`15p$Z~~p_`H^6c
zX^ZgtTf8}u6;1 at b19t5`oNl2kpud*yCAfdxcr*w!LZy-J5e&zlU*{WV^1e45bGdz8
zGI=KXEl3^zXeaB*#J-Of)C{P?OLLoj-_G+k`{<^xoa}I-3*#sQ&1nFZmlS7VPB43D
z596k1M_b>LFwW34jMY1!1IIjXhNg{VT%+y(pwrGMBssHk>9u68{4HFVv5sH8&^&O{
zWbG at Ob7hxZWa&`58y4qvAK_&=)kfLGxl-A_!?AMj);JCNw;6j-)iwwnSmUPY9=ljx
z8 at vfPEcVx1z;BOVTeoB`^lqSOOr at Vk-c0KuTemKMqT`E&o&S2?J5k>Q4A50J1Nnm~
za%K<K%#EO2Z$HkBXQ1Z**1K{487*@F*HRv2)m-BYGo6KNA+CGwS<@^1CG;NesvVWy
zesUJ1${EJ*xP0QTc!yO}S(1rE68b1;{PB>wTwQ-gL~b?Y1*&2F&bHk_yS at G5+OAG|
zI7Z!hovKX?6dmr+V^7RHTZVn`bWk3?!;<fzZkD<eD_w5xc;p4#FSmEhbY79jhn(-S
z3Olzudl}B0{k%O`)1B at Fu_$gXm%hx>@r}2ilLh>FW*%kfcoFM565rO2eH*m(q0R$T
zZMz2jlp3vkJ7ng+h+OjyLO$Jm>v%*XX)~3z{$s4)&7zDBrQ$c9PSG8IslS-rLWMx4
zej4=ACSHBphP4>(_f?Y--=@WKU`2ny at 5Qk>z;ipEKgaC}NSSG*YSFh6q at RY~>nvZ7
zHMsp&afDG}b!!4rP}YjF-%0|8?A-0_C6fCAwLDW`Er&BxmGaq6La&3~^&Ay=#@0!Y
zQn6{H+B2ZiJhmb+p=F)G13rK=-84uQuEqJ?`TrevWxq9|__l-R#Jmnu&#atO7&Oc7
zZ>BR_RR1kQ=BCIu&Oa_zb=%1IHyTCF9S0Z&w0&e)y3w&n({o6iaNELD;JaFnOT0SQ
z!ILPGp3C#pB3;5W+%5(U|KK^T$7z~QZQ!X<P6hmbb*>Y(0EOt!4_TXXx-oup{_nOf
zf0LUZKcAZp8q`CTtp6A?%+C+jAm+^*VjDb;Yp)k-J?cA^uJEFSeU!*5r^IT01zk{W
z8D5tCcd`zEf$!#j`@d_99&WkI6hOy%kRp8T9Qx&G%R_IkZRRwmei&}Ci*zR_Lp#>0
z;bMB3WL9tO%2vuuAM`&#>%B21d+!6;Rul5s5X);I^xv4ox#R+|nwg|ONu5XfX-+49
z#ZX6=8R{lG3`)qr4^z<b$^Q&qSYw!w?I3)y!B*xloHsx=j+&RYMUlkYA8jq3>fR?N
zd-%88Wn$6zUYH)!gT0`ntEt@`fmC<Li&(oeg<XtMc;K8;c%9B1su29A?XFk_nYdD@
z{!A(Cx-q4#o41?!CoePCiZkJ*jXInOe$mzndU^4@?|eM$+2;y9DbHmge=2yak4Ksb
z?MZaC_0tL7FF_BEb5jY9#zb${f+h?ATXW(5q`X;Bu8 at 8wqk09iqHOE0LigtfT<u{+
zvEVc3Wl6 at 6f;P2{Bm%$5Ro$>e9Pk>ze?Ak-HQNQ{{xzUwLsJVq2kD~<yI>jizZ&cC
zUFTEnnN)q;ge<Ay65n|S>2aP at XE0O15B@aYuNAy}COKng;0l~jnG(Tiy at t-|)Q$9F
zoX66X`M}}i;5|k<Gr_BXABnpnv~*g|mZcXna_mFfcTZB#8O;`Od1w=%Wm0$LCJo*N
z29~zjZQI0(D&{E{&idDjvnOymuL1NX)vcuzSf`rMG}w<&BRz?2kQ+SmjJ{urXA7cY
zPSDp0 at 5V$62At=@rnQZTT{9Xu7UyEV^Bl%vKl*jRz%r&YTIvAm$qUYOAI7<(Smf%d
zPcMtjxG+6ldL;*PvT at WJdo~h0miPV+>)5x~B|}$o5cuK4Xk$^x(E6((b?dKOC=q<7
zXaqJG3BLGvViXm at u@%;hY>T-w2r`<QF>@`9W63$A9JJf%=V78Ddw&c}i?p{M?R6$j
z1HB(^yVWV9ZY+2bxIyOf>W(R7ZoRLDJvC|;JT at 8}ro}h2!0+VY3Yw1b1Me^!_oKy-
zS4$xCkMNX%kJAMEXa$zB`-a7!TzK$|nraZN@^9wC3jefn9 at Y?K6Z)ukC+JdAV!WqP
zrOEN*e;7DG&xtd0?H5;@hN(Ln*Nm0n=f at Tg^^#{<`zNWq>%mu-;Q8&1Yoe_io^e<D
zwR=_2^ZM#rtm}5*S at VN;!T*!{;~Up7&frHtKOdCK^W_gAA4*^EPS7mtA`S4Ce`9^-
z-LSA*sS&{{O4YG0q)w6C-x2}-!E?3c7VwOll8B+kVX64-S1xrQ#98xWoJRO4m(fxm
zrn_e){STWKVpD9pXN|-8D2{JY539v*Lw36%UgK`y9SSU=Rk1ag-<r2`x;n_&yja^^
zN*CeWS3+;6;WY$hE4FN0?KvV?rP#yS0|a`F;yl+I at CtO_HDi12p4spCt*S_)Vk_ at c
z(9JcVn{Va5qhiA^gXYa+KceP|RSY9ohW?UsI8SeVg$3RGbbO2muEh7{7yI%*1}zOD
z7}+z~;L~6a0$sTdx>NN=$17}4Ci+`N`tV9C^mVHs3vni^A)IpY75A)RIv>3+UgYX_
zjXk?%kI3 at PQH@Fy_;`>W*hg#bJG{byB(&3pxlo~R#Tyg6pJE at q{-Ez0y8;{NJ;25<
z5nkC-yFfEq?BfH-c~rFgISzX<S1WXImS!@aSQ~`zF*X7-jsCuXDTV&)Zs%^Mmdrij
zvq0}VfVCXzHHZ^?*hmZ3U-cMm0j_5vIws-m&!>p5UrHXAzs<(<@Si~&8=@`V6~G33
z<EL0+0DsBb=Q~5o`4Y&iDyo|BBYXpqU&qtHw at LltG>?N$^Ax8hM_ayG2%M}Ab<J}(
zVcip6t(*^iZ`#%@;FzG}TOt3wx8g3}*wm=&6;>ud{@@ugc0OI2{mtG<_V`r!uxYU-
zYIWLns*ct+HR?|VTJ?Q8;1c{gV4AR(`+hYrlg;2Yk~gjay?%D2IdKS>!}DD;=(H|i
z#qtdB-a7s<uV>?>*%P at 7&OGoTRh*JxgLJuGtR=|R-dE|SwvinrPL{}UDt2h*4vTjI
z=$q81A3<4uk=Ns+i?wdZlLHyVw&TqYgvxZIFp}O=#s;h7)pT-Ox4~TE7^lyt)+HO$
zxi(4)JR=%53`u=Aif4m90>=l9aY2XP1l{Cpw_VT=KID|RX35TGhp%0Gnf*i#7j?U#
z+lfvLnn%hEkaOiG<gE(AORp_xNdV0{&t1p)dq}Z_$l1JfMRezR<^d+rY;dR?otLQ_
z(68A;6EH5m^K0R3A0Io1Igj&z at V3XfDPwZK2pB$>N3r|^A(wLV+kO(*(bq!n^dN24
z65z~E$Za3-^T&Cj$ikrM%B<H{e&BJe{i2W-Cr~By5!f0kvz8#Q2eRrfJSXab9gbjb
ziy3(bX%l3$s<m%*Jksr$la4cekGEg2t7Sc~4>Nrf>uD2NTi}Nq6t4$q2Ug;nkQH;*
zgYPS$50N!<tJs~#<VGq<y`Jh>S-v(s&#%UK)uQgYmd4?pjg>JwJtg9cF&9s33Te_G
z&>ZMO$7FB8W6U1E<Jf1qB3h&=nja(T-<)%YfsKG-lfXlb(1!xMxlW<-ckl_LM*V{E
zxx62{QrPu1uw3Y1qJh=V<)#y?9yS)*z>}PgvO$NY;grgEX`^@&)<OTe>F#dWsr4i#
zjE%S074sx_ohbv4Fp-8%>+N892G(8~#&l_F5zf{+g)Qt!%FdawuIiX*&fvcUxD(;o
zo?HB8w~fwM?DqR=6xhh at U9^Ub2V^Jv$s$7cgUUVm2^vO$b7;R<-dHN$j<Hqc8tF79
z2{Pu2IW%cs%!xsb at h$xx#wybAaaJuq$2}~(p8mgmJmKTHE>8o`1zPyz*EP^PKe^b{
zU4rYEi%mUcVOqr-YjvY at cvgjwX9f+|q22nmYv_UQvaENRzeU2XDC|ka-+8qs9ppa3
z$dp6Rcyk-hC{bdI1N~iw_DIG5_PuMLrxMy|jmZ(C^c0KPW@*;D@(AF at BJN~Q190oX
z$Se=B3wlGGMwPdJ+)~x4g8V^vlUnSDsqPZ-e;~i@@|0w4nJkUSQY;J8-m*oQ6iIac
zJ+t8Kt<O`6mcKb~${^8~R};M&t_|V at rW|YP6YLkeSUoz27AuzWb}c_Xua~J>p!MEQ
zDFO}ojd>q@;VDi{0goNoO((SV^Y>CU?Wv-g_I;w7&J0DgyLU47A(27(-_Uygg^u;m
zBNmT7=ff5Y&zfP23w`6rL%;za3e_xZ+OTOf7<|`JzdD6ufu at TMoi?WL&iNnMM*vI9
ziEO(!Zu<gk;+_>Ya-<A&*M#S6De3#+gUTk8FblH(<FNTNLtcGctbsnat;r@~VLzp8
zw3(EYCHxKWf;{kn{)G1$%<;)rixkCl4Sk|Rk2<3s)JdM7dQfkl;G~b%Sl`rveuKWe
z*~=vHmDraxT`bX)6FVC}5883h*N#WW`aZ_%u1iM!wWxdgh!lKYKQkOqDHvd)+uNve
z?4JRXYkii<Zk`<OXzLCycf;OSAr<@!xF`5dvG$%7x>alFO9V4?vf_G=DD<)-nqDLC
zNo)WH>~XwB>PxqJPtm}tXJ(NxS4e at e{!^TH&+5KT<q6)#`SoR7MmB8d#M3>{L5 at Bb
zhA}-^IXY*77H8;J&epJ}APcIT>;j#?gp)!3wm8`o6Mltl14K5+t_JojD`Wjy6=vW3
ztQ~1V8y=#!%QL_e_9wOyejm7?kIx4-Ux at mP8XHr~AVYuE*eGU8RP4)?tuMegKBqhL
zC@*t6pmMPe`gxR1cnkWXUf+JcKVLgo2p#!Yn~#*~{92t_u`A2E!|eSO{rZ5*!`TG;
znocD!eU$<jzM at CPwuPjY5qg;Uk5swyoL^_lZn`jV4yTK at ys+w4ar<@ZK!kQ^%gPU!
z-t>|tqu^7aYE)zTPs~6OZMddOSp2ayF9N#W<v(ICvQ8~@m(l-z7j(qZVxvt2=i2=l
zPv^`7Pu{S at VY-=K0$$tZRHo>ic`5ne54D)zoy*V7TV$lMHztJEH8z5`&+zNG7aTsf
zE1QO%lkn3EG~YPFN85U6*V*D}M(8(W{tlBXakqHb!_1Ontr`PMf!Wrkt3;LydV&}2
zxgGiv_HCXo9TfUfpoIpOw&Q$UhP)bM#KErbo2GfZB9f21ddqxLC(enJ^pmjf07frn
z$@g2#*l%;g!M|gD><Pc&J&Cg=Ar-p1bMGkZDQc`S-}+>h3Fb0M1nZks;s#&3wS_PB
z{uQ*gUV at Vk_sv1-g;h&3vaEdtc`kyBH4HP?#7c}2`_Rwn*PF{y)iUTMd#Y*m;LD*e
zi4M0HG}#ubyGy~F;=ER5 at bWNk=#RK=@JSyI&U&ZQ36RIXF58kiUHC4YDeAsr6m_?$
zSwq(5oo`1JppPwz#vNwZ>0&L)kAjzw39p^OdBbz!+%mQeCbo8ct<pUCFG3q2L;gY6
z$eaB-b2A`2;JsWa(dD<R$Qb6o1lttcx6}d)ta;^5PnGCDz$s4`ZH(D&DqfV<UD7v`
ztkJM6&Or?sY*q6OHVffdU}K%g;GDZQOwKvruAp7ZLWh{8i9_<P#3|78j*lB`IWjPQ
zz`qohk1IsUou*N&pC{*!<Jy0u$iY+iLC$;FsSG+chVKcNG}#h#u%(2JK>9W8#q6?p
ztY<q{Pu&)L+O%hf4LXP{<!10Rx8q{;U#|K<cyUG2U9)6EKnd(;0(e^3!Ymq8r`sC$
z^E%PjPGOzf=oQgwaSgpS+WL=C-yGy)Z(Q{4jiZb$^=w%@-aVRH3*E0mRC77UsTQe#
zL7XOM4)#UwQwj66qT~+P4GOzG(0Lfzq1SiDr`3h6ONL(G5MBJo876uYLWTbEjns~|
z{UNTCMz8$9sV4XpeE~L4I;R?RM4eL9WK(G;{Z8J8?LnBJA2`ITZeqVsiTl3@`h9w#
z$1ujZWUSNQYwHc&3ERuGh5z&Rsu0`GRz(ulAaG#Y^_fcVuL>DeF{};)4jfS4r+xc1
zoQD~as%RP%&oM`~uyh}#$mqNK_G|I0#SZ!hw+ZhRPOXC7scu0E-}<$K^OKju#zF>L
zSz~NQwE3IA2{T_c8oQ-+lZZXgZz|2)Ha=`$dFqgtcD9NlI)JIc=K652+E&PuDsaBo
z3h{0iUlvuqv#qTUIO?!e#(ZF6Cqd5ujP{wfYbfKLm51k-V1wuwNebPAemH%$trlKZ
z$jP0TA?JpiTBp){H;WH^choeag3e&}Y}4F-QE*;iMVq@}3tR!a#UkK?AE;9PfV^ev
z!ueK=y1RHfcS*0oR-n?9$jLt3iM>E<Gw*#r5=qV@@b#asEi_t&rPDqTyiJ)q)W$ur
zEO<R7&c(wD;Lp+4C+D=-!d)pAu61F>+pB1E$G)~c%*hWb-Cy#>Y;7`V!eH-cPI96P
zedr(<fd2)06#9dV!sQ9?6MH<YwPVrN*>1NC?cF at ph<=olejKqbc-njY8RMWG^y~-H
z2eiLM(827{OPKS(!mX<0p~q0?m-Kaog}ED0lV%xf|L7+pJDz#h^E$E5LEm2B%P?+Y
zQQ5rwd)7Iv7|#uDU1FE_d(6`yeW^_{#w!e#p{*9NX3*ig>Y}Y5)6g%T1}>cx^3t{v
z(O=uM&`y)PT%3S58qmgEjJ5Xup9SX`8|*F<U(EVif-y-vs&#q at 9%Ga-uwCi_??p)x
z^UI!X&tzm%vO at Ntu8j5q(+vX~=n6l5&$?=kehbd~8+ at hZS?GNe$y{tJL0`1d#iLV4
z{uMebZ-M<!G|`#CF7fM5KgK~HQ*`6Zge?E>^Yl??k>7FuYPyC=it7}De{vuAtW;rM
zRjr>NoNbKPUrsOcYmKv<urUmM(O*f|DCUNblz9Zt2#@d36g?RuVlOf5!!+>J`c;SY
z^JCvrn8|s6!nSvV{_+<O-rbx20_^&xcOB;)63zTxee3;*BH1>cNi?%lee2&5d9oCq
zQnnR*eiG+k`r}sipNuq0-c at K}BVwFfvKI2VI6?nT?0W<=oS~#^$G_nq`e<OkwIk8t
zmEiq{$hu?d5{HQF<Q>GhD`Otnxk1bdBmPhm{UpxvI?!j>x1~Q97|QMTAK>o#U*~r9
z`$g<cDSj_Gu7=O9u<$ceimxTNR4fTE44U_X!fY4{>L#|Wr|aWX+y967 at p$$xSv2%4
z at _TrBd5_L}LD<sLit&Lw*q8|Zqn0UsL38JP_;3DNZsnck&hyk!pB>SVyjyTYE+xDQ
zWXU?%W!w?F0z>IcCVEHr-g!y0YQmCc(`N1wy1HFSNnm%PY&TNgb^|@YWk(mExPWJm
z<5?b_sqn0D{8=@gl at D0lT7Rur!#B4V<JU;na}}6l_N%T=2~}*6Im==it(OFU<CoB-
z;4RF2Gp^>2FQD_^3+%yCmY0>lSZO7b`{K0d#LZ%Pvr6+s{|>WIM`!+F1s44ayOt_3
zxt@~ov>1z8*v_z^!wYLCY>KL#<kkkP!B51jq5k7*gBESj(GA=p#ShGU>O<&cx at eCx
zk3Iw%F`q8sX3U-fU#}NAB~^&`;-FjHk39+fPqg);m0h(2LsRKy2jOff{%($c33n8H
z^JjrmxNPY1$k?3}!sgO+y<JOvD!yp4hDd;!zQEiBE&Ng{%Xv~fq?qe>5p8ggF?d1;
z-YFVomt}2c`XhDjL!jBXo^|2AC{hVq at 6ztt)LPhXXWiNzp(NvR*4YWXGi$SANd$TR
zb~kJdQD22(59|Zr4?xlb1 at Jlh75u%Ev|oHVy7;~U=dz};k*vc7;CI5mRD9{SQ#wxL
zUkkm65Z42^zCmmSg6p8Og#U!#2(!tDg~0Ct_Lu|ou)^%tFuG19W8RVL at 1S#LSm_+f
z+MdO?c6^TO9$deGK28<AAtV~Ko#42Qjm8)7y+oJyj^O0ijxTPBYQDEa4wX~pb}e+E
z8UE+FXz1TmOfkmdQ}FoRqz&M8=c-u0cvHsCcNe)pn-40i5jq7~OBI52 at ZBqg>clB+
zzlh14*BjH<B?o#r2E5&B20C}x6=)pq at ID<mtkN7fI;=jH3wy^#mFDb1e(u7mj}40M
z7kHr21tE1G9&Waq*s!iM1&nfA0d(AD1J-bnrwn<OB#&-5Qh{>^y1rw%p^p<CaJ2QE
zV)v0@^^tYG%;AjK3?b}2Dy~U#hH4gQyq^gUh1j;GX2CA=$U4E#iVV=>I}hk_-`<kz
zy at tcb46>3kfg`Fs8RrV_5Bi-$I=8K_FTcbqZUx499Da07CI>yD2===eWlM$~b#ex9
z61~Fedww>)=B=NZ<MecLo*qV94!a2UF4iczvCi&GWf{-WBMjCV-c^9!v(7E_G{vT;
z^PF?U3B!Nh at ub2*=*I8Gu!*|-1Y~!gPY3z|dvo}{{88_{{aFdwM|^XKtjWe#59A3-
z`PCh}8;S2n2A$wE(>q0$%PwH at vH)AUZP>WO<~hvBcE&HR at 1`MJCc<u~xOsAmh|>nt
z!|$e}^E0QKp9lLrEo79>!B<Bi&&Tg}Re}ef7}^OQo7kNa-x{%~<EjZd%KT<qu$svT
z(lWMi!uNmhL~5d|<t;`#v>JHzs^wL;N+LcNU1-}Sx^Q+!*Q+$qi(d66`km`4<>~|K
z1%E)k-rv|bBhNdLE at N&2M<}Dqyg8T?Q~0Y*HbH44<mi$23C at -dTb7Q)pgR&~Sz?15
zc6yWLuy=*c%}A0$%dD4xhhZ{@-dx-Oo}HbsU(!3f4EbUS`=mp1>-m+w{vL1(p_i|8
zUk}J(v;olj4fMj7%nCZP4}HXbxT~76#~(g<{?**?F_uoEd%1`7uaLig8Na`V`##)v
zjo<g+{yOfx<M-Wdw^b?b*C7*CV!yOzZI(pPnjW)>oe%+?Nb9sb-}4XYG>oqc`=ll=
zqx0k8zk$YJmeW3Juct1?O`@gWFOQLO8s#g<zZCm$%v%>VOhs0bBqCB9XF2}}+SSu`
zyZvSAQg9CJ*kOak|4U<|qMF%|`U4{aCYQ)BMZ50BSZLCRUf(yvQ{=wuYrr2!8y|wb
z#LUz($k*T>-g_T<9#YR#$bjVPHyWH;rhu>4FIH7b-O6|sZRt3Kx^BV#3z!e&!X&;*
z)X}1hF0KroalYestdUmC&1HgZKrZ^qyPMD^N$+DBi+A-nB)yZ%c&D%qc8e~wG<o`g
z;aMfdXMXTI<?a(}u%~{(p3*VbK*O*vJbJ&j=;Am0JS?M~T<&+y>k-!ye4e=$qF1zF
z51j?yx<-us<;HVfb=#dF at ah<Ir-|h|Qq)~pct7#Ib8UC{(k2`BUNyOY`Zw^g1+m2k
zqXGvwqH{4e+4O8&S&F*NtI|C4%9-l{Ujb9K_<7uw!_r^dW)}M2=@?mPwv=CVB-BOK
zz2F_0i#@akYs at ZTLxIt}>;N5qjrbgK?1;7RpmTA8hEj9pTb0jG>$x-LXP(_5nCaE|
z6+C+2gezEUY)QRP5;STJKj0}0)5O(`vYz}fP1hSd%P8y!84J%5DCMBT2j31p{y|!3
zNuLm1%sV_1tZ)%ISHa9sDS9A(mms}Q+{zqR={g?|o#r)3j7J)fC*>9T(iKR<erwb^
z#~xiAXdMYA- at FLFLf+`u88WPXV>Msq{i%};fDfjyG|1%5S~sn>EXgFatS>fJY;0&L
z-dLxw2wbtv^OCcy%-x6Io)>i2OmLp1VM3|Fs2}9%m~LM^$}{GKOUB5)%mp7VYUn8)
zu6<+C(%C}uMHi9H7FGy9VtS11B=`#%BgDhe#Q|@QB=u<*e26o3L!^CSmGC3C0`};q
z_(#e2#_bn%!{vQ at 4X=w_T|e~IFZeLV*54CZ6jGPZQx1Zc%^>!WeFcW4ygY at 4T<J^1
ze-btn##qZmcKkaJkIeO>VlC&A<B=Cr&eg@%oM+=}=!{g*z6bfSHJ3>qJEo&-+b&RF
zRti*?t5;a&{WBHzGHtKLuoZKAnRgP?W>o~IJyY>q+U$xsY0p;7Pn%H at n)Y<Xyfl7=
zJ*}YawPE!;iLuJDtDX%k^`k;;2U5K2#;!4z%S8{K at yDOVSiT$23x9m<S&YherN`@`
z1*v2AdiK$=cRu*<JM{QF>;C(#5A=55w^GNynfl*vu6s~+tp2UJ5BwR34!+?Ka4+~B
zirb<J8#cssbLSa}eh>fr=U2Zi`TWX7*on5ihWU+<G!CsLz6it8t+`Y4;Cq)m^bdk_
zqArqN&CkmME<AA8?<(=n+p6H3Ml9hkfmQ>{f&6>O at 0)R7hRe{K>}1}-J1bEx7q;N1
z!3%Ggw?v*1+#B_9!{w+;4Q){;8$cPs-&Dl5cYWF`-P%KNO2~=&UiH at NwECnC`_;+0
z0y20iuaTciWpH-S5&8nKioDsGwEkoRWSEZ`IqV<6XRj_H_Lhnpy at svV{4V3nN at +OE
z%VN4&zo8gXFLcD!;!Yr|6;b647r}cXPnA;BgZ)^K at Ac7t2)(D23MY|O%0_Sow|c`s
zk0er=yk0!SJSS*sy9OWGcc4$`?#s_Bf!?xhyl)q19Tra=`ga>Va`I4LZ{*f}y_2?j
zdk44r^hcbFVq+(40Nsz;({PFOnX+(|m>0-;#Ac9SaeQ*_x;$k>HsfbQk8Xz!#swQZ
z_3Q>(4_QTuy|aXFq=`*eifo1tckX=9m*~WIUh*73`6=_hAoW8>m8rPF$e4l$<KcHH
zI&qU2{$3J%_Z;aX=_~V<p^f-7h$h0naJ;|SN%RFpi+H+suiwRyC7~a?ORyfk49Rc1
z=SO*?`PCz&|2DxL_fc^|)Rl$}k>+KryUO7Al!dEitTTX3h+Tt|1)sO|tJuFpG4M%{
z{Kk(J3 at og^WiZ|J`)Xmu67@)uudah5&Ap>rlf~O}Gd5nTQ1RszYGTLLi5L&iU499E
zyIe$g`aJoUG1ai)F~MiJwYgHPs|X7Ikv{=`Nko^^&DZh;T&rx^$`twpcmCvmLett_
zBXbnXxJ&x9i)*0Qe$B*wgmnz85WEmSZ=v~CfeCgHam7)@_Xa$-n3YQfpuq|yvjKA$
zg8BV at +L48dC9Z|0CArEcmTob<92X<3PcPJ8j~O@%Y&|anze8E?1$0N~<7zrug|(d)
z)LUV^3E9`&m%F$i>pl7SGvt>G)#7exb6 at 3R19=baJ4kG-&^|*@-bj+*PRshx1dLI|
z!b7+AV~k7-o6y#w;o7ZVinV7;pkv$+0=>B^dHA-NU08~8rMJql<{sBu1yfL7anelM
zgmW%qz8z(YT8?19mt()zV81u(ZGq=M&pBNx*4Ph=<+fKpTFLLBTW4G8f{}^idq0-=
zMANJBuEuR!abCJ7Rg+~+8S~rSq)NWKny;d3xW at k@-^FaAKaSoo|8ut^K4JEGP7hvT
zJTGJi!GpGT^z;Vp_vtYbLO_RFj7FB)5Mp(kV?>@BLHLSh*ekYhCec@%DXv+_5`B9*
z{Ndx8Y1rK~Ou_n^A~e&jl|7F)c)#r1o2OoS$@CM(WPVI_SKp!`VeQsjp*Oy@<oJq{
z#vc|R?k at KEq)Vde8m5HcCp<51Rb+hpvx5(OSWWtOjow<%-;ZZQXY=WV+6v5p6YFh%
zlC0kv30*cX&wDB;#gi-2Kt?L6sa<rb+bp^SyrH$`K)g%3J8QFC5wW)>6tOUVLpzR(
zm1A=={~a<ncju$7(oGKsnmJQ#1m^0Q7!7P|XDTe49wpec&xhQ)e9f)XktIy=7#|_o
z(qqZ87~VsCjDp7xvrLR-hOVN<Ad@>{uP8uwho1<YhItl at 1pC&s(%pbO6TxqQ3k`@1
z$zBEy at e=Vj7%yXRlXWr}I!$j0b%k7N82B1C<<N^U;LFcPeciBu*!y6=!8TWwQvD1+
zEARxD{|$UKy%{1k(X*0$(Qm_eK&PbW#(sDNV<)8(ATOFk7U1EQX83 at Ar4*HYV;yV)
z7D{ln{jsp)?#PU$2SVKyst at K&<Lm#I|KO{=UE*r58twW-G8_OulE;n+4nR*})Yrxq
z?A`Ex)uH!x!GBW=U!`DiHDibU`i78=qO<1>7>CDzv0qZy(564cF4%`$Lf$us&w#xv
zu%V9)-sbjU<{3pMWuIvjn>k&JeC4E5a>x at CQ(dsx$`hO0*_PeBLjMcg<I%;F?-{MY
z*^lww5ufN_PaPyOk)Q_W%|DwmV!5+)`!FR_>AwFxMq{)rO6V@*ZH7;Ll)`~u34X=+
zkyrx2hA9hemLt{#-c>`^xZ5NX)HT{uFBCpvs0+HDa)GL+ixrkd8lkkWy0Mq+Q#!%;
zcq)l6BQl<X4`^meEn}v)-`ScPBs_OYX>=L1^7$#y=b2<}79H!ZCVVKTq4ZoGrHgHA
z`+0^EymO`J_f8k3H?cz&URhktBLuI?Sy&Z!%RL-^7H4Ko+s`v$Z_e%47Z@}=haZJ^
z_Q%!CV~4L9G=aE}t9hKfqi*}Tlcmadh{^I8xi|XmOBL+o4W!I0k|!ng#%0VyoD;6n
z+sE1c<$m9b3OZD%bJlQO2zVsa5yty4uI8Ds@`|`yl$Fb2GCDO>1LyLUmyea#9~RU-
zDDUGjtk>woXtC>F at OXc-`}R5)vsnQ(oQu)<AyyJsd8StHT2ZREFDs4n6G|_i7pe?}
z#*~nN7z<M*v~p8C`}MA;@I0tA?jby%Vr&cnPH at DCb#(cNm3Mi3eA-+Vc7%GJ_=zOc
z-`c%N*>liWuWVVV!7g-?x;xMRpY at K_p<<=F*n)dj1H0Fc#GT;^Zrubna!W6Jsx<s@
zlLLIKU&vIU^oa4-V3ciKpb=Wui9km(2?lt?ig`0({l~yg;9-;ODw)%<ei>sjdWwWK
zC51Rc&c|f*Ast^W%rF#+rCiSNu$~o{8d%29z-}vpKey at cKP}JWp78#4_~P_Wpa+9L
zTR>T79aFmvGC}$Tk1ajmh*jJ`NjW3-4GsH%d*gF at Y-~>TF8Eu?K6YZwUDvx7A}!4{
zxP(qc9d$UQImV(W0=6O;>+?IBuWk)X6aT?oVh(T9R1>=LsEXYeG}bo{;uw5G`f+3v
z+tmdckiogK<$}K&t%66PgE}CRcc|g(Fw6TQ?-;Jn2y0%29*9>xzCP+}Er>(X(5b<D
zd*rJGe-&rYa-)^AWy=k+N!J%l^QIcvhu at M^fWFjG3qqt`*yBTXdS<vz at K<ksNCE8o
ze7>%6HGWucv?}F}n<Z=Yf)li*nQk3l+fq-JN!E&XB5sxJ3Tdy}_xzHltS?{F&aWFR
z1+ILQS1>+K2CVZR-F2YnJ0W`>z}jo(E+d{o{`mTV&vIP9u`xk~_yIbcIqWz4<JA>C
zyAa>T!y2KxBy^r&J0i<G<E=xHs;HxKk$0;frGTF?e1)muu8 at l{HM9ybrQ|Ke;xe6c
zac)mZFOwJ`c(d)bIoL-bmxr(EWsE&r#x(MkI`|WW+3<V;c}{rr|BvTqA3V?691szq
zq%F1xj}3BIa)g$)aA%F+f!y$^396N_%WD_s^gz$2*o}2t$J5FjLeMxrYM=qXI{aLI
z6kRjK8gFK8&ap-m(w0H=Eo<}R)`&dBeWJ*oCAOrX`T21flh_rt9Ft-ZvT+$R+2IDi
zZ#;Ft{#=cxvZ2GeV4(~tHA1%Vrindcp`e$U%?>NXt=O~h8x^zUyE3!iH{itx|B&Y0
z(|csge^PV`>%aeQ3GY>J`7AVwX&%OvUj!bmyU~oZup>o-^pB0jL{<;Id}K}{-rc4-
z(uK1jhHiBq6V(1{UHa7WOb$UDO?Jj&xU_J;!S?7-m at ZCry>R$%@zcBhwLmMBaxK!H
zMVER?nalk5K>sX%W0~i4j|d&6M{Zd9_UBk*?Z$h(H^YhyO2*Nn-RCr9Dw+-2Fz3gG
zZNs2<RdGsT^YPu5uoYh~Y}}wB at 2`k3<QvO++V(mPTBbSX5r=ihw5;QOWjVlPqHHY#
zBkwex;#<hx36PAfDSA)Joer$sN7;_j##1x!>|0BKI<6*&9j+qd;_D+DZ3zQE<MZcc
zaTXW49f)sH$;(n$f{i0{gVnd3w5!J{KI#F+{oC!u`<RSK-2fAdXGBILeu}|6<r#uU
zKo{N<HrK*d7v)0ev|FXUJwc}<)lud0Gm$l?S&xa?GW1qf5)&M$7Mg{HSih${+02$v
zOZXT4IT6U)M)IzDq^84^CH{i<l|{O4n?dV#VvTn5q_H_+th84U(_c)=zDmlLdP<GH
zvRzYAw#=X%C1neG2sWbjJ}N$fcmY~PPV8CXiK`;WJ4YYj72pp#gcE~|#tK8Y|9n--
zf7T33gHFa~7+VeDJcr?Skb}MentV3^{zrqObXv3}{IBTWDWh!F`$HisQ-)@N-hL^0
zJOF3a-ns8q)f6Fal3B5bvKwTl%M7yY%y~1T6D{wee$+9n4mufp#F#^05T59$hW@^A
zFb8_ys&qfpX)!h$AkQRx?omk|_s=KwB~{fH#WthO12HutMW}-fybc`JEchYXvh=&L
zI)UGrNxcTY37MduJ+X(GUc-Pq6Y^>?*6OkU)}Jw6{|9K#UklR~D}^Uci at J*wv_?y8
z!B7Z^V-QN at 04riF>9}9%gy>?bYnWX*O#$ENr)<bu7-A_5#x-jE>W4N1^95g at fcJKi
zICdrt+BkpZlio)J;TMS?{|%nby8yJ#KUO}>#u9$Nbz$cQgZJl{ZGo_VgYDTgCdtI!
zu;_*<n~D7iSJ;B7nZ3dJgH47!syYbxc&|F>OUbRt`^j^<3EwLB)B_u=5j@@kTil at 2
zK_<wp$;0!4VB0~;VorvT|7FlF#!lBlh7h`c9-f4`BsjrLqlN6Z5KE-_bK--RJT%Gh
za#iygV2k8=$mH229QGM#elxc_W#B9uXPL!v6($xmeweE4%g?c{)hw*o0D6Yl5Y_7n
zJ&iruauUyNF0RhL$vM{WC&+W}RZ`z`CxsKf7 at mPTNgGE#A!U5|e<t7Yq=zP?0w+Q|
z$^Qdqy7*t5i9Abn at O7X;Y)DD^>K2 at lLqb*Z)y+nBVxyGx%kL}L^z&Hyp}!&h(^&e^
ze<9tEbOzdW1L+$`OQme!7Nl>Er5}AC=^v18k+P4>L%Mf79f9<<@$^GT_l>6~BYk~5
zJr!v$(z~VX<e5l!ji=v08hD*Ae<jl0<LNh%hJ5DBUyXF(czPYurt$RKNEeNz1B;Q?
zkEan=a8v$xdOy;J at pL`X1>@;*q*<i1r0m2tqzA^*6LOKh4g9bO<8T4#L8MJc|AO=#
zq*;vN8l-Qbe7lsLK-&Lf==6}G`u}`e-}hCX2WQ1w{sq(lIt#v4B}}c(F0{knzl5iX
z`mKI*)1$nt<g8*!Apifdq(ACt{bq$FKu_(av(DJL2BtyMIN7llYb7<@vlivLeRVQh
z-V(DN6{zpP(?%+f-m^k&P*KJ7ZjZUwz2z;GeUo5u_5UIG-Ih0e>Ced;0A4T^b^y~M
zlTRhjHmiW2H78yw+7>?PA7=3;;d!Bp*@81flQ<%m#EaYhFtr9QG2G=xr4-G$PQwo`
z^it7HdUe-JVbg at g;$Y!zVV%5-{z#t5o}ldWeit4PTeGCljT5_`kwtGe?vKz)w(*R@
zFPCY$3Jh8*E&FcZl9lruGvQZZ(P at N^MfI>rZGb($%Ub~6gxFSf!Dnt04f}ukqhFtU
z at k#i(xbB(5bkT|Xy5-%l!-H<%?Q^0pB)0HLs+oGFA`|r%0srcucdDMJFLkYbep*+3
zB5eHNqrEm<BDIMMg*B%$5NBn#^P`!CBRDr{3GGsJi*;ly+Fo01f<6E5w`A~BIJ@`)
z(zijAhM;RUMU`i>uur(q_QS9`aU<^}v5mrcb~41~I^(f}FDu0u{vHfj7+75y=01ma
zmF-<zAN6%M+fy5VvEt55qfDB1N_uivPL?$-$8&U8y7_m(<gRT^hHY8P&q05?+g-8j
zdPSLp9V%I?v6mtCmD3~(D>k`4$@074v7wF{zE);UlZDi|&L}KB^^|3XI%;3GDiXM|
z$426OUP%hE$^Qu+vuF%MbDaU5dKP{R;Kd+Y&V`(P(sk<8F^TLS4#Tj)Ne?m6G^Oa1
zuoEkMeB$};{fj^Dv5N~y?5a;R0zcSoT_m(`PzD*&5*mg6e(7egeyWyCf~{^*h(`Xt
zLY93=Zs|3ww~H5e9KeWHhfbda-_ at JfBlDzQw`=DHo|b>dmMoLTUTt0jxwr(h=chjH
zYkPf|&?JJ7hwMS0GJ2isEzw2gr(%umC2Q+Mhp&9d5I-Q)y?GG!Fn0uwkh;-2Z}i6P
z?&6Ifby4vy5-&oU5xW6rU#}vAuQJY`q1A=Op3+-+si^a`RPyTK6ZQzi5$jcNzD;!C
zk?<2C_ at e9dfX46Jk-5mfGsYv1SQktaSyF)=e4rPVy<Y%(8=dN<&}mp_I#nw04a=$h
zMAsX1&u2elT3AtAvao8yfwl~OUbN-pY(**7d-?eM=VAR?jg9=W)P`FnjWT9KN(0tY
zGm`{7rBRxcRo|mhTMU~Q5<F#ZQ&Sl1aH2}m*JF(-+kRECVUvOFb*oag{m3iD9Eu0(
z#0NYF$I77GQbi@!Se`0b?N+fte*(tf at cTB}Qihm6cvmmZCv6+3qiYu`vc+w?d5R;5
z?YFS1wghV=6L^j8=1+vj8-=Z>^AqSU4z5ooYnFDk?N+hV0<dSVhfYH*ul0zHl<2O6
zY?~o*O)6=3F;!F4z^AKaR^B^f{2p{tPeLbE-zcMMB(fOr?9Wz6*v2a4v&hGKj<z%G
z&MjH6F&-c1jNV_=Tf}KmmzRA-Nw_1FnLD<ysZlYwzqczkvu|(8A>gIpyZPt2#^{96
z0$iJje($9ZT*G%&f}^6d3iwKQ$YIxgyr)-kKaSY6{~3PQeUXTJ)JLAx;o1J4Qpx>i
z$+KX|{XgRxa0kEJlKVoE*DARmL$2o~!%^hfHKf0j+^0$2Qq(mVDHEO55ufZ7(OE6I
zx<$=KQnxL-SgQ5DF1f#+l>HTD2Z%o<(r(H9Z6q%gc`cDHwBg&HYNSUaOGRh*kvcXY
z?;EUxw?xf3q^_dq;um8`U2A=HN$#&9R}weiZOQ$^B>fcLe<IR=_wK^KXp^Y<AgSjw
z&?Cg8m0ZNT!zcDi?w==R=SYSRk!v(;EQ<ee-TQi9e&Y9j;Kk-;Lnj&wzJZ;8SFru0
zLyVY}ydo#!_Dv#jZvIKixBjSb0>3TpKj?j3l{BqguswRi3#;(n3nv{aonMMzyXZm(
z`VHToA5<wKr%LyVLa=>d)v at 1D=6~8UP~Q5^)85w+!)$^|_n)PL?aR+|R8+a5JvuRC
zYuBIqz7#H>qz)NM{5xVIuIJ1u_VUfXSDf?vCObnBi)&urFU||%LK2hmlS#u?`HsHt
zopbzJjq&tsg;VfUT*m&FK#QJvkPgu#z7GAzczJ_E=%lB%bqlr|3skyyqe)v{dJI0S
z?r7^@_v89qv~|v8Tw9{8+qa>Ay7?cVO!15LB>jg&upJnq&M*;qmQSAbg1;Vmi?5Hh
zb9oDY-rEM5^pqmk<Qlbze{0Lc7&`cJ(82reT0w2?+$2qOqT*^?jf3sah?Ifvdz8?K
z&1c0dd`6(xa^3gtA^IC&yRWKJ5>E0E7u9vYHn?vu{R++<DPI|#DEr-0M(kqd at A5e2
zYoil$7Jx at v>MkdGD^-dMGXAihuf)D(L)!%3MsJ9wh;BkLvDfhF1^S6tRi`0dz5bE7
zno9|Tl at pUm{^qg#0_2|}`D%aWG_%p&O68w+Q8nw5FTmz*VQH6>@B+Xj5#OomB-0GK
z-z$!a+E?1koHoe<Ez6pyZqB;GYf$o4TorwrZoQB|p1b~ko&!^8o}!HU&DBeIkWVi#
z4GIf)naQW~zH at e7X7=kYxox=D=%80ao4P0X_ at 1+lUian;JZ;o(rM+~Qm<2CW^_B1W
zqaUW0uYc2cQ#@^UF>Pup*>RNLMOX26)7BXWXvOS2_)6r_75J6o-bnZ-f?2|L8(1pz
zbQ*eRTMs`KI3Vj^%0Hx-+gVRl0#hs4^>^iwSWSO)gaoz<il&D}X}SaPT4~lI`1nNR
z at s(T!aCQ at Hi}ZXiSK(O^zY}z*LSfx?3N)*NU(H$0)C$&+E53vJ;&+mI5bwfQu6vUk
zd5~$W at HxV{f;d>`fNy@^zbOLa%5nWk5wKZ-Y(;QuH(v!^Ta~OBx=CMLw6QUctLbFb
zd(nq{^p1 at EIwD_p+L``E+U^FC7WQ4P)VIazKo#A7#xA}Dj6gq}_MM&iNnF>}5W)}{
z95fndKRw*V1R0d0up7&0+P3#SF?14QeW04_7{34A9_ki3V`10Vw{Ch(|Ju5me<ro-
zrAg~Y=BDKk|10|_*6C{oO_+0Sz5SJ#Q}#n?U)%qNxWc}8aP(>g;v#!@rq(iZVLw*C
zXgXy3LNDTxebM*4hS&+APjbG6&IC^fAC=SuW+Lpw>m~L8C09>Xf!0?V*oltL2IfXk
zzGf8I$8h`s<@>QKF$a46S+|3#3Y`v|bZ+61wHk>dKCiH6(SaV@(xbq{l|A;*>HU);
zmCCADwcVAlV{-b|a>oOkM}l#A7vn7MNs-?R=3es8PHa#(i47S2QMBc<j7fqIPZ at 2J
z!58cs$7gd|Hcp2w->uAMLRV9c^+#LsU;|STWJ0<T7?Nu2-Qb*&O>`mVn_&Hq%e%p|
z{m9?z??s%NvG1R2x at tH#13JsG at +$Vxuf&B-M(7AE=aw-^Oy157hA66f*2d)%=54Oh
z1i{Y<zJX5oR2$a9UXLzsvh66Z(je|bnHV;SH0-cRn>b~5Hl91yAM-tf9sth}t8<VC
z+md_=<p|ya+q<QK)wIdUpZgSK at zsd!q=8P-M%D8RM5+!0Rm<fA at 78<&h}Rks_kgO5
zG4ickKIZce`8$XoJt1t?A7Or%cuCyu(NKJ&f<8vuIpyfQRJsb-WI%x^O_~JXsr_M7
zgf?+u?p(cEao+GGQ_Y3>mxfK1|MXoVbOfKyPN8-9Y2>-=Qvr5PMdgD}HV6Mm-G?o&
zMR#0?c<`j|BmH5<>YJR?Uro=V at hsYMp3d#&<V^M}mwNV#S=b#Pz%LtPRKVzXIXG{K
z|JKo#YIZ(#0Df(9V0h&mp2aF#oVYKBp2o(x{rBlk3I7TEN0fz*x|qtLi;XW&X{0LX
zcEnRLjn;-wk^mReJ3{o}7x#>ogcmSX33b4?p{tjlyXRbLyl0Qs_+ru3E;afe<yQIZ
zrS2|r32XWk_kt1Iwi4q|$v0M5Vhu)1kP^O5MZgMm#-2ru-S9=?+qo*7*R%YMbha=P
zJh3;jh_pjk->FHFaymZJGaBh^YB605Uv)WC at PY<@D1|sj+KfH%J7=Hb^uJmSl0a*G
z!f5fz4`$1_BH>&*b2O4C7uVBT+3v*+l%2Emm<3gc_xl>YX9=`(dUwsPY2=%?cE`8b
zgGn2AwW7=x#Qc^q#c8enIdt|J#6P at O>UY^6V|&jWp9Vhq%Dp)T#APu|XR4E~NR#40
z3pc&(sbYX>2wtTT8;!(S!r0rgtZsw9+BfC}@LkdM*hn0q*VNq(o__fp4l#S(m~YGl
zS+C{o#|Gg~<{OI*As_m)oYCLTDFXjYYo({&VvXrQTg%Q&MT{Zc at +q8p17e)Po~`Jf
z4Y8V>ST}|OE9fKYI}3ysb9)dm%ohPuta}l*5Wf9>UU)qQJ|@tMi-Sz4qY&$1={-kh
z4Fy}z%2lCXz<0m(UU1^bFGP;)5u8f>di}*f0p|%k&vlA*bg~dO+7D=lP}ipHQgW~R
z=lQkv3v-efD`@85U%3PR>po&2Wj2xcqSZmL)o4H34EhzY68par|0}Qu_*6%t%VSGC
z=y7bUgRg!a;?TL68*`=dx$Fw66!w2L#5W2u)wd`+oo8hB!=Le|=XHM&okbT{i#^g9
z;KaVLaaF`tcJMb|<MQoXHSA%FS~B22$i|M1_d!nUpUY)}p1mcpDiWv-iF){R=hMr9
z5AC51ik{$0bUpe14aDJF6aOiHPW!Q}W$@jZsq1o^*Y1QKypt(~O?r3mL3cUoDurz&
z at mVbfuhP(~-o^DAc3lYl7-gE^E0#Rs;^!$OZW)!oRtb9x*pMXFjgR9X#?TWu2R^RV
zUubVhF;*vO#E^zR^M=sB$-9HjGIs2D)Ny-lVuJf#`*P}FM*?Nob_sQVPrch-G<Za3
z5R&~{h5dW5y at 08Kt>Vfs70%vMo&)+*>DHC^g|B_5`Qc_{`jH;G2xlfc at oQ!`WmQBW
zhT%KQ-{I6)^F=6s5<2ZGh<T`;y`8&4(vqt0wA4-XPc6!Z?XwNEovcf(e;)DI#5Egn
zq|EKdu!qViZ%2&xp9(9pVf_5M$;-!FI|5W(D|iNA=z<g8f8t#GL0s6S^u^d~&02;S
z0~<m|ZrCH0nO4NSxDom<;3&huEk2gNn|K~JJqc7p6TSE0&LHY%5>s>0F6!T$MJ(Ww
zyNwv9Y%)&I-G^<f5#w}}>Bl&=BQCuf=VCtA`eD$vy`&uSKZT7iFaZYsZ(sByZsseU
z7pWg%*MAIW2kZnqhr<ID-G;XUos4v7gZ?e*JalI^_y#Ak{}2Kr6h6$cvnOyx9!HZQ
zdxbcmFwrn&TbZG_(qZsUcTCqZ^I+4^-NBCUgZ3e#U+XvK73Ps>;-k!6@|TNW5_QAI
zf3RIGk+j>WPdhJBYLhE)Nr=BRGvTF}1M%0b*Ti-F8pPa#y^1^o*osZ?1TY5pg$qt0
zrb at O`54+Jg68o2*2j0@<{fMWH?Y^{m{F|4BU4z)iI0ujM_c at DT!x|T)cIwZ_sPgom
zJPzL#eo%B_W{;o>JVoJ*3EU?N;)`OrOl-!RK$o=sd&Ml)!d1-cVc3j*3fo%v7QO&1
zNvv)%np^>Q1hA#y*TUD#NzPry>AuTkAjS^bh`p(TZ{F~ouW;_i;ruNp*VM8sE7oKj
z*2`XUKDRf)hoA-VWS2q5&pxySK6xh+p|==2Grfac7gfYD{&LthA8yYBEfRXn?FMRB
z*i%S<IyxUR(zA(EbFJKMssMhSl`HzFr#Oo+q7$)26iXQEk|3(E{czz_F^j!l;1wb+
zvBhv*PJH=`6V?dNuU8gMT~n_xBY^u4VNW8a=)SKC!<6 at m<JC7aBB3vFPo*;E4%QCA
zPi!aqI;9TN at IyG)oj=Cf?2#|f#AS4xQrMn<!rPsg0RB4Ymy$CHl+B%hcySKOjdzZ7
zyQw1V_YA~UE2Ymcr-FBa&+rHCr4B6NOtbBrn*XQv!?Ra%S3%3w>rr2f<f5kVj$s8;
z{cKj#KKh*0N+10_6z2<`|6UTGKLc0Ne`(bj1GOrQ#3t2a-xZR!4c3Hd?o^GpuTGK2
zn3<5BZ@)IuQ}ajxDdWw at zIDPcnCxF*ih~K8j${0nkh(=q2C~tn4fo8nNva4=T5g_q
zd}OJ6I+cO`?B|8^=i(bloXIme^rMl}^lJDy`gj}6)06-2^Tgfs-#b26p at yYlWrlyb
z%bqb%UanDiX at yegeFNuC@D!%ma5)k at -pC4r5<2gxqa_<Jd4CC;)np3`qRd<c at fC(`
zwj%H~?y3a*CG|o3Va)xbRIOx#|BqZ7B^MV8uf3rhyf3~Z?CQa~cMF&dUMrJL)+qj;
zp*zuqxrubV=kCS4tfBUiJ_&e4KSIv^?rI`;OqEf;wcEd~TA&hkuZMkpRU6q$imwFo
z#_EGlZ#7rM{0^Jf4Iz+Q$LA2XKeM67;6K)W*i+(;qMZ1~{_iO2hjt}n+l%jqDPt^Z
zjj?;dG=K1MXH_d(M at tsyq$RJqdR%{b#^1{+elHUj4(0gH-!{Ys9`eN-b&@^=*AL1z
zwfs)}7I&r|1wX3()f}(6XNzxO`mi2wFReU-?_f`?ir3G;n(!_fKi6vhqPgdom`^zn
zCn6v5Qk`_sUf8<b{bYQ;@$Q59W^C}w*)Z3H`Mx@`BJ}R)b3VV)dibyWo_b~7#lSh_
zd`V0d_Whz1-=&l97b}Vp^Z4>#9f$(u2!2!8^^KBRy1tRxzP<?9Lg78wPepGCUU)+e
z8*&l%nrLFXS`^)GM7(>o(2=gah4V3Y8O}Ew{IY+TrN$gr$*hYtIOlgj4hsU`A*XG&
z<Xgp&3d+3xU?6BMWCod!x6c>w`0v6VCEq=tDmpWtItZH01}phfaL)e|n9X^y4)KSo
zu)fz&dOY)$0ne~MRZV2j3i!5AEXutt;2|cn(wh%`7)A0BdvR!%gtP at RKnH0L+A@fG
za3*xV44&h43Ne$jRrI<+eVFck=$U)O?|gI)V$2{mGkoKs>8ZA4x`NJXY-BQ-xnc0T
zp)+VNU3$1rrK2jt@?bYuA)MG*7&Ec+x^T*fTK+tJ%pd=I5}lYg|G~L}{t_Pv6 at 2nm
zbrtBNn9KNX0QoMVm+S4|hgw0)0s^Oy_ at neOrdO3bIE^oZU+;`@+W-CD4dGizeCe^a
zqpw%FHQ5Sr9q(PbLs+v-FOwS5MvHZ6?(^K2*($@bP>ZgGvN5+AYvQmcbC#BjH)T%z
z4E7A_(PA;=$>6r!ZuiUCs^D{qFJZ6WJ?jeWF{?b+#I5(B)BG)vZf&VV8*_lI;2g-#
zS-YB5FUs$Z=P8(sFx{_n3g}m>u=bX}pcVesqvHp0RV#)KM&b6GEPu-Srf1Qv{^W=q
zvro|9d&n5?4cdosu)FIxtvnVyp*>8ekkXyt4_5mR&=loeZy)a~*)R8rAK>1QO&znh
z)11(9Gru+ke4lxJ6B(~SGyOgE^T!BJ!TcQhks?VqL6|w+m?;JC=v<(S-tZ at mN!r+Y
z%8s*6Kz~o(8$lb0jOCw5*Nzsisl#`JNq<Rsf;0T41CQ{J(2syW?8fi={)`-z4`0vd
zY$bM26bs)HIhW-R{gl5`;)4C#E$mhJG16-k-Rq`QzyI#W8N0bp_`BPi at H>XzVf^gX
z+umJ|>(Ot at xd#8L8HLpDc7v=3_GCjLbFzA3AHlOD{<pbR-`?@)sC_<uVNpyCznXV|
zI}95li}441r&4_BY%zTaWe+tMgNHcKe$aDFZ~HFOP$wPc?BIJJfelv?a0>;V9Xe4g
zCS?zL_D|6%dfW~Exl=LL?ks=B`aRTv_M+xvz^|6fYZu<;&uy&}oP=ELi+zB02>l^H
zdP>?)Q at h%A)Urvy%-uTwJf1eSeBBdH*}5sUshen=Cy7lCPDUL7oprc}sd}E0#E78k
z+e;9GVhrCH<SzT?g8om0eMN)VMQ3z0HtybW(mJr?gmnbGN}OBfzZbuK_+{glgP#h&
zJU^=HS}L0*gDhr_y&|=C%64ur=6gS7*hgYR@^3-jP(18M-7-f&7jXghi&qPw=g3x;
z#S%RZ!E=Z$32X`bZtVLI_)%OhvukRPOl?`bPHK&9?I{_qotCnw0r8;HQr})*J5aCh
zMQk3`$i&6 at xL1$G$rAq>X<6^n2Qx{urmKgKSc9Ev(b+3`ie$(ETZwLY-si+W3|IUI
z)E8}47C{AK1W(6*5<TH>0bYRkA|wsj41Q$3Ho$&m&IzJ7h^dXg9<{GxLZr1r<1Qn5
zg9Ht{ab-*<?*n3wLv)>0bG}IE_ePqkHZ2<Jwx?g#?f7_2q(y`_kv at hZX3aJYd<?Ht
z>G_7L)>O5`ikJ(Qk1bU*(yL at Wu@9Hb=oy}{->0j1X{3wbJH*a+-ed3$LJYN3xi>V?
zb;Rs<#lN1`OJrvxOyw6P%8-vk$^T5jMqYCd|25zZh3#ae&!_Mr-W9?g3jam&`lf}|
zU0<BFr?#FcNvH$<TkV1W1Z+#w?geAK&w at YqjR(&l>iAwg__IMv*+O3;yd&z90n=is
zM%ceh3LQeM55zjaJ3k_JPBzXo#MdXfn6K56#{(;XU)WX2KYAd0MF-b{hG&C at 5`6!E
z7(1~~Kn$5^{uabM$g_xcn5`zB)~Wrs$f at 12pOm$%A+!~~rIsC~{3&!1AN-HiaOP!(
z#KR1gJU*G&pDv=)Ja+I2M?c##who at T+GG#9Xf?RC%zjeVJ)gn<m<(-X4p4UR+f^Y!
z#_FjC;6>TZrN3rU=2u-~KBQbW;&!M!F63E$ZKJG9*WYZ8G~UdNbiJVDw307h9qtA#
zrH+lY$(a{Fy)onqn-uXVZ)QaJ>dTS>6FrvR*C_kqTFJSOZTO!j##2M&k7;d+xsYq1
z>--{jUKwouTZu0Su)Ce;yVfG&DIfG(VfpvF)*>FTE{>rFI5~;ogfU<)ItcCLm?nFC
zYiyNZ6>Vw#Y_`>wOzJ_bD%8X3hKA2X!8T+}eo{zb=lYrB!MB{s(49?o at ifJfpcgz(
zhc;j>rH#!cop9C&86ER9{4L at Q;(sFC=5)u%Lx|1M2>h~Xj at hXc3^sM|l2zQ67^C*%
zKS`=#y91xVhbkm8zp7oY$L>#OhZ_wto at 3V@_%$JJ@~?qpUA{2Du`j^(_agqst3>sM
zqa=^~#~I>oT=?DyjCt>XRxmj75bcZiL)J`)t>Ssahsq<m%w4m^t9^aLdL8>u5Tehk
zc%J0>e5;ni&di#+wyi(?C(&Qe$;4*-$D)~g7}r)@XNt`oF5qad!9F<Q{~_$%!=kG8
z|M9#;!qiYAd35ra0#SK7F%pp#=hT>*5fUPj>~IQ>W)g=yXjVipGYlv at 9A=n{Fbs3$
zIt<9bfHx$;`)J+(h0$RK#7WCj2qT%N)9<x5bUB~r`#irt_Oth1d+)W^^}XKfeR;h@
z@{SLlZ1gr)vgc at lC97@xaLM>k^>&VA at MJ4po8!1u%mHR^Uv`%=yaeBC at ckU8KB{)8
z8out<0FSc at a^=h6uvrF1xSb8ZW9k|5Y?>j!%RE~eF6HahiY{-dGO{+{ICDM9JU_~O
zbBoExfifw&zGv4n`PK!TX1-N~7q8UQ6<xQPd=C#*mnze011^$hg%`-P=87&YdA9B#
zdG>y7Koxnm(=S}QQg5v2+M)P?l~=0FtPR++Qr}k5m0zk%tqo{esXtKBB`8%=wE?aC
z!+nY~x%_g(7n9+D-v_ at 8hZ;u(4lNET4$V01i&&b_gpq at x39+#A9Zy*xVbaQw)*6~X
z;*dek<OM&{4g7Rx+}tbq_GX#N_YegeORPV2_KL~%|3JLzih_}izd}{eJ3vo65l4qN
zufJ}A;F%dMX^7W%_ZV#ehOcfK<k8zLjiuWg3EcuF9_B5P2|F~-GOB~FO`Am@#XPTz
zD#E^?Y{;as0iU?#p(J+kgfH3EnDB5Xp%WUEM at H9#b=&oQe#D=euAM7ul*h}f<&d%J
zsfxz#7g~mD+u^?*BcB8Lu|Rkd?`$^$GmAWjZ4|Jpz9KdmNtX&2B#jh4Fc<r-CBWKB
z+M4lB(kL*dK;I^5ZZEalA8|r<2_LJr%R1DB!8sSd84BMc*x^#78Dg%4=?~b1PktCs
z-JLU2^vxU@#(Q}@e2+Ldf72CS4*F9*2eQC)E2V;trQFx*P-E_?&8AEv at WVBo;BRt=
z61JMF*vn|%3;TvJhd3rm;jDUVALltrLD~xQemkMr#K(NJ6 at CHzS417{sQ;dMd2WC3
zNtT?T!wm$_AGp2(zKoI2CkJC)Wp6-Tp9B6Vkr}ozYeXZp?M%sMkH+~82w+#<5@!uA
z20atAL^+188pta|M4q$=vN!&Dp5b&W)0QpR>$RZ`YvK-~JuBvLu~+pQkh(u%OXK{m
zR=88)11{qCApQW_k at PELJ2!SOD5-_$ROolP4;OZ#?WTXW_Neu-vc|_AG0YJ<w4;St
zX7{GE*grvkWcF!=US(_HHGabBz0hSG$T82U#vFcZ$$)#)V(2Si16|<A$3H3#>q)FA
ze)&(vw=VSx23)kB{jZD%lj2!=s+@!Umam>t&#9u+JCd`^WN(Nz*h*|K0xrnXUomiG
z&?kM5aesv#@@WNM0NW9)Z92$zQu-hpgAQXt7F!vuS}rA6G+6JT(|r83LikNd43d00
zK^-=`0dkaD#AhUHl4vd&$1T_+YripsH^FD_6MoykQL}Vz1#~N=1tMV6HuMQ-U1H0e
zR$#+jxKPaSU}mgSH90c{h1)N72-gRS3RkPzg(m}91m`&eZC;p$7)e>z%?+7V at cZjA
zh61}tm#L at C1A(;Bu?)DDn}7HS`&`}nK*)7)hKz^!OCv6jScLL5;J=N8uRwlJ(@iX3
z0F13y&tmCFz5_nM_ZXf*%HOd-uyQeVy-~JWF=v580bZaKV_s^M2B?fmzJjJROO1`}
zGOSfQ{;*c<m|UxNK%Xw%wUAxYu_)VS`3h at C6V{G8_}H!!*zQ9-0iS~;Uh?u!!H+}}
z>?q~u>_Q9TAKYJ;JrZMhN#V6*-*MInG}CLce~2+GBKITiU&6LJYqFoK7pPmJfrrel
z3RxU&yo@#Hh_}O>-4nO}M6%_2wlX@!iM_RK^T>R at qTP)8gFn*{8CPR~hVT|$)!R*z
zYm(gm3E%^M4B6%NS%{fvoQ?RJz at _q*WCpR}gMCRIH at CkO>4Ek-K5XQ*Hr6J{8rCdW
z4|#M6-RRQ}`tTUP`dlDv)fF=@CE0+p2YTWtb=C`RO$A1)D}+PzpF8YTCw*8Az|Kex
ziHA&A4ZGzYRy|}HX7B}&w<@dD7l}@dU`Sz(bQgX_ZI#qwo?tKO-3gwoCBt^ArSE>0
z2{iRvpG)pdNnX&TipE(!t>1`|w+Z+x(Qkezw6i}d90Zop5T!+4mnQf?DuM8fyyOMn
z6$%OcMgJbcSZbZyEuP?8+!9{aZljVaNBHK=BM)ckyY!h=&f<T?Ic3WTy`nW_&wXen
z at Jk(q%r^(2=RCOJu=#vxp6EP$>l+^_ at 2bmrqPk>zW%a`u-G`gl`5i`1USoZt(*075
zyt+OoSZa+?R+j`6Hx_R<HA=TvOAP7qNq!Y^<LXBWMM;<F6#PFgDR2Tm4l-j##)>$0
zcLoAkRlrSX>#JmateDOEx8pp^ysVAjo8uj#<JZ$CVCxd}u*&7}>GU5YF(WC7?;VG_
zT*zIIIG*s+YV2b0X{sD$T|0rx-3TmMF(bb{2OfavKwE&_2K`j<51<!_sRg=4Vl3$r
z<#SBHj)M&Y^4tkouf(-gQ+Ce~vU)OKeRN5-)LB605aJye`kUiAue4#$VT<d;9_Q3m
znpI8dx`0(p>|4j=Wd0F3FtBy at hAk!E{wDkWL2W9o^0@%}nI_m^YakElh&y$;!d$`5
zCwbVj(H04imw`W{4`wxtC?8R>1XQ8-4lN%0A|8HP3ooIJH1JY(3XBRV3vsyV_ISDf
z0!lfeEDiKO&sO4EO6uY3rgq<`S*#J%#LowRy>kxko%L_ppeOhW at ukaStrU^D9g9}-
zq@>*l|Al%H9)1~Z&bmQglPTsO%Br>3Bj(oT7i>c{q%E_aQuGvvX=Bbbo>8nj+Cl6{
zGJf`Lb(C0M$}Vz0OZ4H{{&aBI*5;rL#90nbL%gNUGz)r<?chPQ!0I9PN(+JKo{MiE
z&$#Mag>P at e=cg+B2zl52OZIWeLhg*_1sNKWFY?&Ld_Nmw=M&ic978_k$m73)pM7C3
z%_8}Y34Zo(CVkV_gn6*qKFY0$Go+PZ?`eg;)QNTLJoblq?oT-;RvV=|^(C-||HU~p
zxh at Qlb-|f0_<0KKRv;%X##+(ugx+H0KF&T|pLZ4ry!W*UetxK#j8RS- at XS6VdUx0{
zqz&%Fdw<~+xl`E%ai=b5m^d$cP_FNQw{+^#?g at LR@+a+}#jL~7sSR<z$C?e_rLI!M
zpIc@>h&Db1KQ;6N=`(vx_C?FWu&dG5x1{C5Y#A`y*H5lbz%BvZ>Ku>)m-9T1stN2H
z`0<2726AXlaR+>&K!dJ;k5&-9mG?UKxuU0G4`=;boYf;JUkJTfP2YZ6$LJ9%It+Z<
zU8B!cB16I&j%VD{<I^T=F0q$|FFx?uUgkq5!iS$d;)1>mJDZpJrNr)bRywi0Ah<zT
zFNAE^9U_izC0m2`mcpJ8JfpK%0y=%?L6iabG7PRlrMK9eiuJe-`*f`Dyo8*$#)HDl
zar-wH$28qjh_Jt=2l=)Ltx6g`nyk{)`GQvw6miyZ{aodOq65{Q9m;nQTeD;NCJrQh
z(4)9|Uq)Zor4c!U6?0QPs^@EZU)E?iJF-fM|9+PVvUm9P6Tcv`cPFtkK3_|Gc!NLc
zDkc9;D>_}9A`ch7sya!>uK^7l=`321=ai%<m^9I3S^@fRh~0L&VKROHWcmT5cd<oQ
z<B(0Nn<Eybg8m+xN#f+ra at H=8BAx+ahqFs?f7q$VbuVmDRaprIuqllzO9S=;yZB_4
zXRnfvdP$b2iFDY59|L~2KF+4ON#rF=8H>p?r=GkQ-@`J3J|cz|e9%UKhg~chO6Zna
z;bSCvRYQDzCfn-wJO>eb<~nRC?!ZS5c at OF0+a_c(p)Fk<+F{@4xi!Gt(;TSr>{h-*
zD_GZqG;ycwo1GTi^U3{1G5&d!Wtr+Au{PmP`ZFhq&_mMpn`JRgzZ3xjVvDm{Blh19
zjFIIU8)B9hD&G-k_E&0@&+do4`Pbm<4Fg5-2FG34vF3t5*d#Gfh}G-WnNtLo19hIu
z%6EcFBDJWe1=swg+c?eCc^rpvjD+X*X?G-hYLxs$`Fs&2=7`Y$&6Ep!lda6&aT;GP
zUMfo+;VQ0=y}+$;r2(I{wnP0vbtte?sqLrqvXq(&(AA6)KilBkTdyq6Cwp0DTvn5M
zlbEf`H;Gb!qk4?&XJP+yUuYzF)JS5_T_^x;{{r?|dyt2c+V=nYHhl3>EyKT?h%Gn1
z!J3Ep7)<j55MyiMmxyDo7=wTD*nWF4%fO7=KlbZI(y!oW72yBZ!2Sg>(V>TbC1?}#
zT`pPMC%<WA#sc~#J^?(>`RG;(HmZ&h&CMk?>^aU4R>d*r(|YKe+>>>A7i9u&L}6~w
zD@=Z^pbxRoQ~X*E)E(ms?ZD)DxUvlOPr<&B)LlevA4SY at v|H={)SHZ1ltq*R`N<u%
zfHvTKEavJBA><`@7E1-p`7y+M1szEKLpdPxDimRFvzW=#BoPHo?~;)EWfTH~K}!`;
z6}QiZeb-gZe4`qFms`WSN@>YF$J|c~H at vEvZ=l5RFML7CA1Z!Cw=f^RB;sG&zoVVs
z0<5gfW1Xl2srOf8&f}j$)b<}C2fLGw|JDVQwXRPh!hJ%(1yZk$cHmvq(EACWJthkK
z4*HN{(w~UuY;bEGesm4yNK=YjGBl)+>dq=?>rliqHL!ib{s;Xmf=!UtYGex{=P%zB
zUi~WJDSYNvQ{wQcKWka27w|vfPaUFS-ZKn{@%`}58dArMLP;+1!w!aRK3fhu1*Y%u
z{r5~?l at fe{C%9d5(ngEqzqOI%w>DBb3x`KPU&XD7^k2S-w9#aH$-=7-PqdYZlsV`o
zX{X8g_d!H={U;>;YrC10f#BZ|JyJ06>rn<^ae!}o4`Yy#1Kv>qdugK04kHHM<~zSY
z*Q9s!lXkmj{Jq`0=}f!9hrPdqX*)f;M)H1`Ir7=%o0^SG8x|edGb9MqorT@?kiw!%
zuK<>xjL7-#T!NicO^V#PXGjqUJ;(Ukvr_WTGk<*NF!PQA{;pyo2X1HDkCa{DW$XEE
zBp>hnY!zhxC1^(#Dc=O$>4#52=z7qd&CHy)0dtI at N0&?K+#&Iln#At7!nRE#@PmMl
zjyU%fO(kfVX-5M)7j&uzZMr#JNNEeI1my?TEl at xf-4<_sYkRB^^h^f2R+5DLpZJu-
z#2{@s{&?sm!jHFW$e8oFGGh3>jqbz|I)Zl6FIGo4WlQO63m~fw86x|5Nf&b+1zW5{
z(tg;>CXVZXNAmbnkN#wQO7$arBG5<6k^eZcWhrzmP+&Z$FlUtXt3ge$$B at 8IOo_a6
z4-7GRtr{_;!GDv`ooD6II(2z_?IINicBQ1>+bgjazsI!ICFCPVIl&*GFIH09y0i{l
z^ILDZ7aO9(od($d?Wgr=$^%1bi73OGyL#wa4$Uc#E9`3}_WJjXPpe?FzZ31NIAC4`
zzmB~nm|v+s?h7b$UtT1~98liXf!C_@)U3<+{XVjB=jvV|+2gB5#{LCdq^009{;Rcp
zA#&8wI$|G<Ht76pRw4XC{cWXQ`ch_|#E{fY!w;uj_qeU&By}aaBxkoKOFbqvsFguB
zV9XzPxOlp-$d2Kx4 at J5qDv>~qxW#zCGV{Z at 7wytrLiR^!+ii8m3<cc<3?O at H!2{>r
za(^KpWBwm$9i3Tn>AfXzJ at d$+D|xN=<&21qpsY1!^Q(7nOnbFRU`cN?Hv6#1dm_P-
z)@TK#n0W8AZgU#H`^NFbvUAlLiVhLhcIaz0tv;-k!hxn!Cin~XP;$*Z_CKSI4#bo4
zVZle42L6a at q}Edr1)jmr59ca=VFd7yBnO5|-lh07t}}?e_PgtFtjEE}@eYn;U<HX`
zuLx{h;`>W{M&K)@kXV4jQ>!f-TZVH3&adFyi1S9A>xm4uO*~@tR7`&Wm``=~7Jtyj
zQfmzSVEgprdf*Zbrm5WDh55N)uggn_PU{k5Ei$C-nc%VeTHMJo2kadvt2*tH<eDr+
z9UCCRINTj!I#T5NV7O$~fw1pzO~xi-s2|ydb2-jCT`2Rcj?hP;H<1H_r@;k2c}6nx
zk9D9S#qMO3&r0lXsWrVffR%H7+prxm?|k3db`ATwe>ip9OqIlEMM!PaK<8(#kFAgt
zpiNuQX7&Gzi^JDbh^fNgqm at oRx4apBx{_a9 at d*4*w|f2?WhK6x1j7WrQ-*%A9oT5T
zO~A%o$QIMN at 4>G%#II=~=Ftc2Vyi)2S+M8bK+sCnhz|d6&OT>(g8RB9_;Y2nHBM>?
zf$k6fuenv=&COAd*1Oa#!m99+xSy^RryHm;d;J2{y=S$Bcm6|gM@|;fwndLfglTg3
z_0Z{b75*`w{g2<}<G*4|!R9?xw)y-&DI4exVye%T7UcU}a_YJ9z3}gP|2p>ZWjK3q
zR-;UYVfy`G$Tcc_E)jhgZ4ByW&Z$BBDCpfI4z^vCeB*No*XKu-qzyfHqO`E#7!005
zFAb7J3oe$sN|&gjg`QoSaC<Ag8+!KLE3Z~AqLp+7^1j9&=yl=xT2L<hT$r+r%><52
z4Gn!R^qLwj^2c>Kd6)UmRnUzfV3UV+wxTb)X67MYc=P*R{8N!duLvUBUlHNR#UTX7
zj2B~aoWaZLnkx$#Ya1u>C!~#GtbhhixnkF46;J5-ru5=kHhEoRhdiHUCiRzXJ~zsN
z-*wxFM7ZE+?@go;tjpvnb&%zdHay>Z6ZrVa!JlH!1Rt}uk)v(Yw%h$w^T=)B>m2jB
z3M{P=$RKQ(L$=BDE)rL%crV6Er+3=>F7N33Zf`iSsI<J~shbNsIqL5U!%J_y8?J><
zYhb*=SrmTZ7e!(ml`*Jacy1h++0+8Wu&Bab at Fus%F3m`g<U$^6PW)U#WPv7J*KFNT
z`o`9O0C!0RES+wCwWCh+Z?)Ke<F at O*z+tUauGCbjxFf1=H}+n at IBG?I*T5E9 at 2H5V
zH)7xNvx;hhT)qbJL+~H>y at lnHI?N;ZC!ikX&|j5+zSPh)3zd1Im)nM51A4oJlz+;z
zb`z;L=KF2nknspEb9$XSkW&I4ySw*RmXu)UK at Na8qESVI7Wht8A&zJre5TT%Zw7ua
zu>BA>0sd;BJsldE;<KCSg&pmfzn0C9-V4IoiWr2Fsno?$qf7C9l}nzH|MuoE!!$*h
zQDpo5KcAg<nkN3ky6w;)etqjhx){y*x+w9GJ`s5*s-VxEOZJ8juZ6$FGjt^jabheB
z=ak5sL&6J0+X9_$C(2hCgVWa;sD8318t+Q#2?=gH54 at fOz&`2$-t^`Rg#^Ey51TSa
zm3xrEUmU`oxUO<A1K0o#Q{@nIK2zz+C^5a4kxBU2vA=Jt?Ksj0EUs-cN^fpsb(k=Y
zhqhffbcAYWo}aQ8)4;_?znz0UVR?s%zm0Rjp*?g2?RpL0v+=z4pQCtJA<*Nxp|9BQ
zSVlAUvb#&`U^iU<&x^Debst^ZKUxP~=Eb$gMnMm}e_7kft#;TBU0Wn4c17NWYriJ<
z9j3P*v(_gTy02xFSWVcg3Ah(KOetm1{aQ&HG}j8&PWSL^VMYnk_H!>Bw at HlL)8JKB
zNUAX=z9i#+S^{JVHae9f1up#oXYHJQ_5XUTgBDWIEl+y~bKv~=)H!V-Ek{=0NX@<<
zzIDliRq^s~Q(#xb6SPk=@m0x)Sm&%3v_~+qROY)E5Kpya6!O;hB>|B6qs(qXUx7*X
z1c?m*x^&&=s_O<fYJQUg*y?S`B+bu?Id{6P>GwHH-d%9A_vY|{_gmpF*iP12TF$ED
zU*siSKTNRN3BM*@h&f;$R%aU0Z4<oNnnWY;=g70XO_`S_)3zAhNCWO1ott?cx_>pn
z#Az31c8~1Hyfh-p?49tR$9OT4{Vjax?~xeC at SVJeK7nr`d~Ywm?bgUx)eCGfLdOP4
zC))S6PZRtXQvx5>h<$;_Oj(l?ByQaQna~@o$2zQy#Bcr8i98qSB(TSrOY~miQ}DlC
z#K=(~8yH~AASbAER>d6XTECzSYj;^>?WGR*YLfX>$lP0!6%)Ert!<32%8Q0<Tw)N2
z$2t<KTr{wRgux#GD<nVtHl>Ocz9jE!#Cz}HJ=oD(j9l0R)U2QMuYqiV$a->mp!YmD
zs9#{I9z?yrqP8Ihy($*?jfi!y_Lrcf;__!ySi{<nuyk6*w?>w-K)_ZNz~Ucz_(Gca
z#PXn*t0uTpkj0&&Wb_WCJq%gh*OK>ON1kvaJx%$>hMXI{-+G=bGOE>~z?>{Xy99U>
z<^1i`=7<mP)dIJplkmII&wcMD{|=x2UHRONlxjvgRlH)VLzX`7K$%{WUo?lE;Vh?=
z(D$e~7)P-2S8wI3;ghnq^}A~n`~wja6SjH<E9iS$limz=)=*fZ)KVibKUgz%?qOB?
zT+Q#A_a(m?w)4+9ytmTUj=`?W3R{7z;?4N(4SW+%0mD!&Et&YH6&Qk7Lr^|u9C(4*
zSECV62c{NmjTAF#5HB2ZFUY{)U%IBusmFag<R2DKVNvzu8M;m8zH;(hH+eQso@*x0
zwUg(D$#bJ;Z;?*a;%o5iF9N3cj*ZB(o+JHjjCLgj9x#&qSyEFW_Bn{HBagUpuU7N)
z^2Z|2B+J9!dkYvUVNaLORJV#cV~WGyd!;=3 at KSGe^VwjQ5qbsV+2>it<@3vDCbkl6
z74jTd7k5fJx0~R{_nJg__EGpxSa?Z|BZ!Mo1YCVGK0o6n&2MvBffuk)q+koR;u$+9
zbhqp~)Lr^1>hHWYQ74!&3Yrqq($%@F$?+8UL=`ZdDi50^3RWw|#v}ZeNJ%m<W|9 at a
zF;U(a4A)Doz|}D<Mr^mPF35 at CgV@y-S(L1BiamE8*s-K!P>`^uJYdzv&dQj-NE*1r
z9)RO)j(P)rZ@`tQ8-xGA#R=T|6 at Qg9@NJrKZcmp7<7^D_rz*_hF^tb1a*zL?=a+V(
z&)tK#KAX|ww1BqUK%P1WY$C7*+~yywWPG=`9WQXhzCyTFTsi8!7%;~7n)Ym49&^*K
z@^?9Q7hHFDbA+hBK-A*DIuo(}x=t4`^kUeEcS#*aP}bAV-5EB?&)en|EDd|ml(ubt
zfneCNsA8TZQk$&MyqGu^sY!;#z&Uy4=9NEJrm5Seb>_TQxe3=FWW6R%T`>o^s<whc
zjLl^e^h>fjv-|gdkvg?c){$RI=dqJJgzRPD$-J;--^!XvDJ*8#?c4~s!kS7c>z^cR
zeFzKop_+*4_f&+RDKfC at NgpAu5#}bjhm0O}vc%UKeO~L#3)GPHVv%kELz58q at aGv8
zMjl0vG?R4DFO8?-0nGh7XW031r}_#;&<=}q|3lxDgueYs*ASbl8Ijhss@<~m=oM7L
z#JFa|mZ(o+smT7u{Ui5JmdntEm_y2-^Uzq<O~}P9kEs<tRUw_0d1|o`YvZ}+*sDg~
z6@>Wa11nreH-S&<v3F$HDCjhy<CCG?%PXJe)9`C`RGPQVlNh&YQH~Rpwfvox4O{=D
zs;90X1`{x?39p3s%HSJ6a>*2BW1!!<VS1Joaor7eMd1N{x48y#AG6&?^SPJ(g|HQX
zUyQdc1b*vr`{5%OMdS^<1V<pDWrQF2?`_yGJ|;_#t>vpC;O|D(iH$ij#hiG=??`Cf
zhJ8F at bG)>Or&FhZU$n;?`nw`6m794<De!-o3G8I@{DlslA@)t4Vby<lhS&eXGwykl
zXS8y7#x?`b5PlWMPM%@0o at bbT9I?$e at QmL+%S(C{KE$qco>6_1XB at oEGkV_P8O!$J
zd>-cp9Qa=S2JSsP<4qyY`0rah<2P)caj2b_w5pc;7jx6rD at 56^k#$U_`13~0`D);u
zJnbn<SMa-CQDHJ(!s_&{J>1QjmKa4>y;roz5Y;xM=PRAi1N-Xv#iXyX&s&SS6 at wR+
zL|P7wlYU-*G!%1Xr!CH)Z5`K5(vqLj)`S_fQd;0roXyWxR6-`KILLnrm=SrjfwqnP
zt5iHcKT%##0soMOVBjHMd^hseGJ5=RtXt at _u`F5oN<Pj%$>f)=$W(jkWvbQy+;_?p
z;&U>^4B&S^w+M12_&!XP$<klnNcxvbn7~3n{2+p%QcQH$%QO*|q2Y-3mlOij|8Mgl
z*EWm9yQXRs{tcidhB$e<X3?w|>wo}pJGViOlpAljq!1XNo_%itRR`Rm^uMJ5Cr9MN
z at Rz-J8TsH!%(+)#r+pm9pNUVqcpPPWKqfDHY at U*5=v at Yz0}u8heMBzadzUFkIT;@j
z^`mjU9$5;jDnQFK(ANlV<=6wB-GbtPQeaPE%*!^rxB(k6f8|}P7nA{)!bbc at 2`&-z
z(*^eCtZI9sHgC;h$o@&+AQsh$+e>T`9q{$wcLE#GKtr)s at esk;2XB=BD0NZN<%4(*
zj(m&*;6MT+EOuDEaWxm1r>*I3H|Dw at _d50xfszdivc=E|#B~M}?6AO<`s3Gu0h7*4
z8k9TNlKooir#QaAk%QxN9NC~tEs)7$KTmD5yBV7x#078tf~>C_SAx$P3Y+cQ>{!G%
zP%1lO|7?s-03B`pd?Jo0?%!bUvz=y%g0A8~&)1s6eEWJkFx^h(u^xjQx{0H~zBa$t
z!&exKNgcV5fd at PiZ%vv_50iKm1ap}1zCl^gd6oB$X>Fh8g`Hz?KBo~IPOoU=D*P)J
zZFZ3GZ4AbzD5RzJ(*n^jo_T&OzCx9_v?NZ2qkysfZiViknJOU|IIg1%zxZ56z53jE
z*EMS6>LlR5&uu-x*u%Ac3R~-Zde7W^rrfJAR}f#47NcK#i9H}yKv#y<(3QjV#-y;@
zWG&rOOO;RB+~{qF;g>e9R{g+|p`Lp<?Xc0vL+ns1$s78sf>Sn>dll10pTdu)1pG}i
z#?=MH^N_<AyZ~_rYG~lyk-X^-NIBoFpw0Xi$slBN`r&)P--&l-hHm{0&j-HH{f!J(
zPYL|j#noSK-~Ss<&)WZAOds)Y?*h~3fAD|mnLK5a_&+6$UlKoh22*GwY=wJ%`@g|Y
zjdu!8RO0<+l_}bk^ZWnfCa{4JM-M*ZWNZ)|p5L*EQ0_K*&zutA5#_BAs*9bKllVdy
zoA?Lu1t&HcWArO%`(?}?@H=2~4WiARg$w&&XA1rRdL#J5RU*#3%~wP%;u{?@*b`hN
zc5)aGpT}QxsF*Pk4L>0gf3%5|Baw{RY}lMU<6ndO*AwM<53zJxb0C}E?wxnCg?`Ly
z+!#&Gge_E8tgyB{y5wVN`BtBv)39mc84tb=zn%Q!4gc?XDG_;UibG(x1>Lo|xZqu1
zzj&>&7~`Rp*j`^2z>gKz{FZx0ey<aJsxQ_bj8lO`1X;O at eCvaCRVM%N&#;w(OoYTA
zurqtX;1N6G0<!kNrbozc!ydK(b^L;<A2T<7`sr(Zh}F#>bH8^I=ilem?{n%eU&D8P
zVonuI&Z(f#mJZRPS at nPY{O$5*5Z|CO>R*G>s4oT^5I62r-~Lh9F*0+I)>gAB*?W!>
zJy|<tv)4l(x(9N&S~6Fk_=w;?p-wIIHJ{ee2I{uc3O>Y|-5+PYxf^5LH&*I^A0X47
z9XpakHp8ClxrzF5%E@}{O@#j*XyOEB!31p!Dj!w{4HDWmdX=GVcL;5Z6G%4jKmDDy
z#R(>8+vrtZ(k-6}+BRB)HN6(}jG>W1W60+xCLiw~@{#<Xd?b_kc#+Rfllgpwd=3*C
z8qeThqn;N~7aopap1}zp!M-<Q4Oe at x7u10sgWf}iWpE^+9c*MD&zzHnZ%mx8-(}7Q
z=Vc;e at Li5QYZq)E5&xsmjo30wOz-tdU~ZoCAE)xDACd$szM{O)AF9Foo at wY+bwyVR
z?tifI3)hM<^^v$22l^Yj1!rc~VXV;<$`$e-r$=ylW+m<ky=q~b<9<2;`H(FA`Onyv
zxSzV2>&W-n)p0-d?}CkroCRHj`-2>_@)&D(!zKHp#1A3XYRCSxw#wyU;w<kZ_6Iz}
z<(Hf`!I>GvM$3uVgL+Th3LU55YxvmV*{QB7avpe^)XU!vJ;D1K at vwtnL3W`S0dKlN
z1pJVEZf~ri|ET*sWOPq0c<cB6d*#otxd at CnXlvpn{ricDcDLEko+^8uw|RpQxK<+U
zRfocD_kt$$Y`{Ct1zrl`Q6g`|axY%=8@*S9K6JYmQrPn)30y}}mK37*A!q1P9!HFz
zRG;oMZDifRoUG?ml6(lQ-ykIP-J$-K25-m at yX_Pu^$^<azA-S&@(kR^YNn?YwyNAT
z{Bh`d#6)Yc**J$O0Lc!EHXvq`KNo%vS_-(QwkFrnjL)6Rn6+jN;&g5WEo-CS^XYE9
z618txT>p~7!E8Nzt7OaG>JN`ueW58nVg0Kv<ph4yBgP&@wqZyauGh<ZjNBKnc4*w9
z7-e}XHwE(V(#R1{-IY4Q at SiFL!!xS|!_)Oad&wLcJB3*BR~g!%uKGu|3pAoE?!_w=
z_`U-6uv&M{_H&S*nPK}NW|eP0_lNZJ<4dC|G1hkDy;79#WOM-Ri{}#Gf&Q+E`g5I#
znIZsQr5QZG`ji4|qr!2Fwq)xr7Q^r0fZ(AAYja?CFuc$04_k{mZcDW`r~>1(sj&jK
zh at xNXvAq`h-M^w-(ni=><GFx&-u%Ul2JIxRQBwb%uzjMem}^$h<!v3y*pP*Bo&Fab
z=O)Y1!IVRQax^pLa9ub!Iri)Ske4b*9Jha<fHgvuSuRc8P3SNE$LGWc?hKPZkIDb`
zME;IlSdZ)HHlv(nar-Yfp{>eUQirCIt<Kw3rLx)g<-Fi*MBE-5>S~5vUR}-$(ar0n
zD}?YZVI!>;X*HAYR^uO!QxU-Ad*zRHfE*6>QVk>DeEcf|<;<8Y=ev#N0?nU at +~%x6
zK9ih737ricr-d9wZ~w!T95b=$L0gWJ at v!2y1N;bSuaLP7&M#^vX{`lzd3NaOwvI3T
z;)X<@lh&Xm_4nx_Hjtmn)ux6j@|@&#g2c#756%rhycSt{SQ2}8TwNzk#?`nuKt|3#
zxN^+yitT1nHqZi5rgLU7`S-=^oL)Rv`284wShJvQe+u0iSJ$0&&lt3~>vfbn$^Dk|
zHQ+VqD78gpSJ9SG*oMf`LslVngD!XmxekjCDhz2c-sr4G?ADjyTd{=DlztN}#C0UO
z?h6J at xj)X(tsI4q4)V-po?T(C7vb4=gx-+(?RuQA at E=7#iuwh84NO0lG=8nhkFL%+
zfUy*bet4JRpG}ze!0X>oN7e?Lm{}Y88U8sy@{a{u{y?JwCe{WUFtWZGo1{@vtP9=H
zC4-iL20cFf?S?wl9eS_h7|Z(S0`Ps{L2Oe0DGt~GgFe9i8MFaBs7>rTO7RIlx1kRF
z+$4>N119wNkk_~Y*rXe(lUi<cQrm|*NZz;yP9rd$q>*P|d4$j>cV1>SEw&?e>c^?X
z=5{Q2y8-#aCUb%(9ZzNGIP3^(8=~FW at B<EA1AdCw+pM|!IO2=s&ueXzM at a{T+!x#|
zj%xhA4A|Od at 2dZV_=Hmz?&+R<6!Y$xAN8=yCF at JxQ^aP1HGbd3H64O6F$MNF_ko at o
z!|Ep50Jg0=y`vkd<{bimI9tLa?aHFT-$ACjZY#Y4bEah=5;ktl?mV?O$jFx)caypi
ze%L1cm9O4l1>J1`&g857gu-iV8J(7Ng^p$`3$Ia-^ZT4XU4XG_=x=S*2sAT=z^_>f
zJHKrlN#pR6<{{n3GaIkPuK~{c<{Nq7m8{`P*wxDlL>~u$7K#yz+eXfajc~Dg7`D2p
zz`T5RnBJiD+l_K+PMW}znpL)F21C=P$2fWKR}4*}$8_hSt=|AYR*<O0{)O?G!1__i
ztRFJ&5Ac5t^fge62rraw=u^zWwflJ3UBbV!M%HZw->99Om-{E at WyGXD(j=^k`nkRe
zxNn=6J$Gvuc##{)SO&IVz9=Pk^^jF)RR4ou`|+_h<QUrI at 8eu*AUaH7`o>4Mit}Qw
z-pa*y_s2|)6FQZnJ5c}Hm`=nFlEJ^A6#AOoPU1^cEfD+bgLWZJjkL1pAJ$7_4X27%
z+*Z$*R10AD30l+5m&FZUCA1|F$4|f*QO8-G<o*`ED+iyZb^qe&jno7jc6tl`L6 at T3
zCmmwCUQqPlQAZExA#`Qxp0cV1Jyg6Y<=bZ#o5K;ON#jjuxg`$YJ+a;;#<^#xH<0)b
z4}5vU$aU>h6b!N3OI+FSSiVW at jkd0pYQhB)*3zYkmV4Q;gtkWR^VB&%OFZXnOT6N2
zN<89hUYe--A^SmR!;0mi!R#ZJFk+t`-|MVi at fGf;h~U%bOd;i*&B$gmos;WJvDcXC
zgkLb>#p^=@8~)8#HZ&3)4``xvf(Ih&55bX~h!>9iuncr2IplNr0v=)wI<%2ZqaPd>
zkeD$PiTBk6o0Fe=5x)!iF2c`i$hctmlm9a=;wQ(2WC(GxzJ}k!G#cL^Htn>~o{-ap
z8K6UYw;OY(g4-)uHO$&@9kSJj;d2B#-$@!&%S*ah=tRsS%o`JqN`gm0_Qe|zD>~_I
z?2Gpjy20#=2 at NulJ;H_((5PpA<C8SlZz9$<8T*qo1HOg8L)=N^lBd2T-(yXxo7;kV
zn3(Zhf_1hM^Hs*oSMUmy)?Ni2bB)hAvd5- at H|NqKzY3g>5-d1RU4+R9-WPjh;A*(O
zX8cm>Y^LFtHYk(ERvdRUx=wJautzQjt*j<|7U6SF<>DVD%s))nBg=lDU*OkjI8q9}
z9laj=6RbL_#D9T<@LPnY*1C>*{vD|q9?Eo5$^Yk{%81jL%l}}nChG&EBYqBYlG~n&
zmv=x$Gl(@{glWs;^jDCxw8O?oNzH~F at +gUSxM39Xny)-Q^Z)JnMv(7O&i_UmG9y|2
zIQE~R at Qv9d*&H<jyODK=Lf$;Xa#N*zCAArI9PtiotnPoRFTDZ(0%B7>Vh!ECEG#%p
z at -AEYP2S=UCGW%Lea$n^77{u4bWi^LZ`69T*>hrDbeI^}Qt;iRz>86(TG*jXdjh_G
zZFa<>=6=YDqDsu_MY9_#xWC{Xb>o0qQMeJYBP$)}fMZh9IFL4r(oo9Yf&hU8{z|2V
zcIbl0w{}0;H1Q5i|MpIS^G(Qc8*;uu%!N&d_eM1hR%KYZR`6^CxZab{<g}t}|Bl)-
z*pSdf55`;xXm+Sd3%7MgHl6JQc1T-D-l+dAPq<Db1g$C%rO<yHvWgJbh0v;bdoGnk
z8?^h!X0S!j<$mR?=br)%?g5 at G9Uuh8^m at c5IM8Kd8QBD5R`6SzWg-oEv*@XDJtaG0
z6#Z3QD%!~YXQXx~Vm-mOPw&{nGWfJcHpaCOUlxG~HifT1#`ele1!#4mou;~{8Hui9
z)Zfya{Z6zoNg7#uw$D;KJc0F8Np$XUupfwPu{37SabNUQ%>O34%<>oRHN59UTWavF
zZ{(Rc=sZVf^g>_3U_{lDF;K9<->?`lks0iZ-LQ|bMRvs51jdQ at Z365iMhhn2XT}W2
zmbiLAF<8a_{AeXxlDN80Az20)-y8e{;s<)OpF{Aus4f%vhS*yLyo<cqUAjQX0cGin
z_ro^11^+^fN+uotPQJBd%n+NLu!9r++eB{S?FxF~&-rn;5wGTUUq#&Q%cUV>qbx}m
zTN``Zu^DlOj<Uvq$#dKBcS&c|9?9Th;C}Egi3VR0-v|mXn>OT-uW)f>C-jNWl^0T6
zXCh>o0)i<XN7}iKY3E$fL`DY-8>NNNBf!pjnt|Du?<00kK at Z|!FPhZJW(5EbpbflM
zD=^O<y`y{Tksm{;E&mN-e7tSEHGgfSQ~1g=-)C3ab=j4c3$VT3-&ccJ(;aaaF6r!w
z>$|CWUZbhRd(kBG9DC<E%-6h0oz^j*O7cI`4ji;+ at 7sg?gZR$Wn~NCOGQ?N_=31m=
zN8Lmk;*&ooOZ|S7Jj1&h;wynT-X%V5&guZP>DGf?HJ>fGr+Zp?x9Z7aI^?hN-aPCX
zjiJwv3;Ctc%K~%AJGw|02s{R=#cts%u@=skG!XgSl6-m)aeg)t{Z7ubUI7<6Fg|c^
z!6&R{e~R}}&u8O9TJEVdr|0epX^Wi&z1x2!4e0kZkfVGG8}AdaU)A&fL-HngL$t_q
zIq5$ca>>7Q9KHGMuga&t86wG_hnN+dIPhg%v~cDntc91DJU&JqoOw;a*|PZqd(XEO
z`e@;RoMY_E#TeGIgjD$i4S{?ddQaw^mK^ouJHk at vJejop{2wqkrIYCbNf-9GBJvD+
z&Q{`sO|^6w`Ewe-<42$jUpi|%%19T+My=<PJI_<5$R+rgps%pofZv0HC6uN90=qDi
z0rAt#jIDeLc~7~Ltpb*&67q5QgoJFMQvxNCCp{P8=ZN+7#UHW1d0$dBStgo4)?u71
z1D)fb7f|8&X4UvY{QDa7?~Ba8p<lunYr(&@zx}%r?SC`tB4T7?Z45YPkwN~4STW$$
zcc-v9<&jsdOUODA*;x2UuaLx)^f`~%P*U=qZxygsTk+n5oZaxzcp;)OJ1SgwRe`wR
zJ(ij!JwrMQnBg103#ratz%w=<BX;By`Qsb^;T;w~wU{2vc6L at 18e@IIStU#LZslZ1
z-ea33sq9+tPZh46oE~4HqZPUeIrtF8&O^{)80|LSj+}3yw~&|K#PvZYP3+qan^(l&
zF`Mo3okGv<e}0pla6*txYyh!7-#P<+ct;0x*i2s?;*Ut4#C{mI(%x%m1C#;#<ciy;
znC}#jj~4LOJoz7IeTSM3MIYD1O8Evyr8i{q{|DKt7++QBD1hOBn7Oj_Z})`;o~cCa
zz#I5xde~dz3$=>-`B)bRy+ex*g?UAl+?NUvhfbm9-uz}qcs;?-`n4Z^{1$iv*MRLQ
z;uKHP%TI}XGyP+f?KQ-iXyueMzO(f?#;#hKJY_XUgSk{fWD~^C&iV1Y<&aBM at Qe>_
zq<P>0YQtvQ>oC3!0$*an?)iq~Rq(7qpq+n1-<g1SYus|zc>%ukW}@dBP-B0s<rvll
zYVV+q^=fg!M*FaDP|OsxvpV|1@?6e^zS)iPM;cDFXANQet2xbm3<hqrFsqy+S{D#4
z<dhRkTwKpAEkirkCra_oJdKh6ACiB(b=_l#h5f_i^~1gbhr04<_~+q0*djgFIBVPd
z##u4w(-^<Xr-0KWOdN?8+2bmof{pKS=&<V1{|i=X$oDAcBORt3rX2C2zCcMZ_LJz#
zJDuP`>-hwCvtsmd#6$f<8)5Go2;YPR*u9BnZH5of2kX0|7gGvXDEFr1Re}vF31KCx
zxU`)wrFZ^Hd!M>tZ^Hc0`Lq-+3 at E^Ok*B|oJ^?<`XnQ~@^2fV5LA?UHm|!(JbNE}G
z>n7W{KBJ_u8+*V_ at O7>tvJUbd^{KOr^bf|}tNb>Gjx_f*p-yttX%8bmfecCudpXfY
z at GNbpw-NQuLtQc6Io3Wa`6k+cHaGUQcfdA-8PECrA0$sqw88l2XamGhCT+kow(m!s
zp%W&&n?4tZ06a!uM7?2(L<n1 at dLz!TTQZQiouNHE<2yDx<o&<e{M>;YyZhPD1jq%q
z#Vm$B;PdN!8I0t_A*od7W78NoQZlBA?1}i+#GP^~B`HxK4Zg|VGHzVI^`{`jPpAwt
zQ>%lIN`y=HV_p>#{UB_uH2x?f){N8RL1aAgr9*XmnG-gvGb;JoAsxTsCnNiP_+e=z
zrtk at WtK`3bPJF|FeLWz_4=N>bpq(vbzVh2fs{=BabojZ9-vho-9CW$5n0uN!%qOfR
z(Z+!iBFmstyhB^sxXlq?8i0{<L>tng&qX{hFZ`KK8N!D}TiRgbb#ncz!Y;@mU!~&W
zZeG^7%ISo$+k9JeN?HlZuY<p|7}#*|kLI3r|AI5(tAti@{{$TX=-BdTQorZ|D&IW_
z*?x7DJYtP;He}Ob9VyuR*97h95IUNG1v<YYC2_5 at kg-E<j;VDhqN^z>){GY;qn1ZI
z521YylJ-&Wp_{lp at UtwwWgJe;3<4j#Fe3qFC}qKKrt(6Djg=3Z%0+K)Mt+IA2H|I#
z3w;UMpFV}M86A4s06n86Y^ml`^=ovKx(D$GcK;Y8d4Q!?2bP#2ml&jWyZ=ii(2cV6
z?yr*)el!Z^`B}rB6B`R6SVqsW>Dgfo7ppw0rf0LOSA0a7oEloX^&Q0eE`{H_*%9Wu
zl=$lk?)S5?+s at QEp7*QAeFN^TYzgB#s)HYKsn3PcUx+=4UK07~_0lu7*cUW-OSbIg
zz+Yn+=k+#c+wka?y at LB^m=xQAY5$Nf at n-~9`)_$vQ2zl=wqkrGUkX2ECF1*aOtdrR
zqXpm8AzmtM`LM4ncj_VcF+)~gLu7(M5BJ{W%kM2<7eN--G%A+KZ{{WS*lmso))-&Q
z<ORIVU-N=p&fU?keXjnzAng)-8?^2s<k83YoI>W`SOcEs-Y#Gdvq>ADbc{^2 at tc0p
zT|8;|BUH(bWG>{^oGz?iJ3xDtqqiJktQLL=^B?o?|FQ4peqLGyTRJ`bjm)I4Vx%jr
zODo_5rR~}=Q<<O7E<zudu&StH*G&@h(IKU)*0y_x9n!I6*i%(y4s}*i+TKxMGmt&H
zko!3q6K>*5Uypa8FT)sZ;TyU)!|%Hcdpp4a9o6i5>Fv$EH-D=e><xaao0&f1bAjIU
zn36LEeq5%|F9 at c0NVi@<Vs2$VKO~=3;}vabRk!$eCbnpf{%d+fi(W83l at I>LHGsp3
zqi;mQ|4-yT*X5BxPea&uo<m``_)WM!8d>T(61mfL9M{M2-eDYH;pig$pFMNfk^MZu
zGU6+y$tZbvZoj<12n^k)1)2vaZ%Ou_iEQsk66AB<!iB)W5G0MzE5L6O9O)X2x4H#~
zY1q)N%#Uw!dj-iefaPkGX6hyFXqR?&G4MA at 9N0p{Hn)}cp}h~{=perKA78IJclHUE
zj=>+m-Wlgw;*XE-4&faUXlEz!J4?C)h4VRH at _oDP1s~5UNax$q4?D^v3%B=HyFN~s
zKhvR_Kh>cu51>Xy9*sGDL%cM6s5$G>PV;WL_WYniT$6Q)ZEz^VtqCg8;`CVsUDRx6
zZ0I(LFtgWq9eT(H95py<aWuk)`VbBg_7I0bcVUO^Yv_vs7PAKY at y;7d!@NLjE at f<3
zd5E`G6()i2s#Ida8Mc5N*jP*Sz_1Xe759G2xA`BVlxOO)^uU%-8ZTwK+w<5dkt43G
z$nTe at OAx~o at z+OJx?`_{_8hxc?Q@>WrhuJC2X0Ls3Nst<yastKBxl&}PhT|aK()^m
z=(`|8zi*fSa}FhF(Qg0cl$554>}SeW+WfDF4NoK;aIU3FZ--IV at VqR<|CFWw<>y7k
z at Jp00TLAx`S3|ucb at 11?A2NpZnxp<zqT>ZJ+)wwMI^pZdpMIaGcluQ79Hn!Vr5hY&
zD}~f`Nd~2gwESra);}@Ud~syapI(fVcE22{?~aO at iM44q|L*8P&;AoLu_jiETBf{#
zYkyDG^eG<Y^l8IX_VYny_~s>iUkc0<1+Ihf{onBY-y=S^gcMj{gJvmhq0hg)8P7r^
zih2+o+O$DZ6?8bFs2elelr5=5*<ME3{^mJxf*o`<qR4&&>DwgLNM|A459tpD)kYMZ
z+==u+NgdK3K)MgoX9iV96rFjBdA|nfQ;<Fl>Ha}Y5k;pzVA8Q)ogRhsza#y at prVMP
z&RQnjgmhn|&p>)WP-#Tb;in{Kq}@-OwoXO*bfiBFp2GL>!!bOx#j=5ulXCf8#Fx+h
zw&za*$&jeTFjO+rP<p>H|Ft#cNu1AUbE(pJen=Q#h}S^oYlEMp%o&F<KM0 at 0&yZg$
z`e)Qr5%&554d&|mBaOI at LE2QD-_$C6TA4lV-dMxA5%>Ajz*xg&FV2sEr%=p+?a`BS
zQ)gpOyf at PF&N_ at Q*~kUYWo?M|=rjXa+lKc)wI2W258K6Wv9C$`*+JG$$tk=OtUc;$
z7~cQ%7kFMre6;z{TmNhhk=JjD{66;K*xP-GugbSI!G7*e628C5$6n*-10l~@{3E5V
zoRK at J*kgtGy1l^LUA^S<p(f9<us8WVZ8~avrTgr4GVUR(Uq#Lm#MOAFIdP41760d$
z!2wyk>uPrF?EwYZpGFiN-HG>BqkJ~(Bh&xNCw!FUNnUbb8sv!zVALpB4a8On_W1Q2
zRU`4G8G3qFdpn^`1m6tl4b(RC`SrF_wF41!)!F;$>c=3*NBY014(A$TTlGX5{AJ-2
zGVK$)E(?3URVu!WDwEt&w{RNNCUt|S_jyZ*kA at qwYOE!=F!ILrvPk#!yi##Uc;wFO
zd69zadERXkaR^*(pwEZ!ZdlBl8eK?NWGS8vgReP+bYTc5B2N#SR=v$@i6Q);4Y9EE
zpKp#;MH?u!rk&WL+{50d4>6i#>7P8EK=?DuWZZU?FZc_E8}joV;U!{V;w6Hf5&JE~
zcSqi8$c0JVdeG-ipZ>xj$Nhfc+)D609PGVL<2;{LP3hf%)HYl{g0-<L;^51*;Z{nq
zY>(px*4*#SrSQ2DP=^aVh<Q^Hbw(2vUNYf>ay1>k*^IsJL!S+KryAFfIVIq6s at Hqz
z57_PQPl1OJhJB+5`?Q~Yj>Mz{Z!XZ$@zdY&?2zA3dtcHGC~1pNi at ho_F8c7dDjK-h
zz=x3YiUYR!w^4Z<L(&7jhbgOb`}#4-CfKeZc2k#rRd9I#c$6Yw#|3i^@pN<F2LErB
z)Bq>r8n*|2GCQeiQyP41OFC+)eX!@a>a6$59#}C<2mLc_W#f>ib^ehI#A=O$e<XJw
z=K)GfzIES28OH*Y5vG at G;h)m-+=o?_bP8-zmWD078^jIhsuA3}&zwSR<WXM2FKv6l
zEhBpTTc_=N1jGKnJ%e8X;+<NJkRgczu>a(@q1?UW(}<mqqq~qhJ0JFQZSE3BOJTT7
zb<z@`BsO&&2F at mp1z4r)@5aM7JkZ}r{l{*W*jW0g?u_+6mb63PG+|ed at tE}d3h>Md
zo^I9hiSwIB?A0<=`5j`T6r-3(OWse;r6QSX=Ms#4V|pQp-z3;YV$cKEMYrxEcy>9#
zfkye>pTKws&LVs~PnY;9`Ih(yKWL5844DYVJo<GXyEe{X-xFszW`vETf%xN${+(Ux
zUJMK#7wCj8=A!$<0R=r6b{Vo##pp9^6M6Qal6lrW`Ru}c_`N!5(uO;1sLPODAWOe~
znPdAy+-V8nJ>C|wMJUT6XA^t?8U@}5>jd7JCV}@)Rf3=A)hsg*{Mo|SBr?Q)SBcXw
zUv+QAk0a&=!D9GW7F9gtp|&$Rs60_h(FN{Yx5}q1)O5r0sev2DOFk79TjjvqImIoH
z(u$88)ZUW%Hy23sjLcG1v6S6R8{sqDu2J|J*q_Ahw- at jXWqacc_jbkAIAm@$#`a&(
zCasig1oU*+%~r#|HGNo<f_Q`&Bak;(4L&W1FRrTig!rcj6jQ1Niu<b(%T0%UGt$Mg
z8TzEkT at V_0t1|r1IP{ixAAfol^h?e03GXzypW*6WHFy-$>MpiDm3tQ$UNXf$`#d%B
zCl)>WlWvjxu0AW4m$c}__~VOU=XvNJVhle5jAhk5<5NoWC$jWwvqES0zPwTqG8Qtg
zzfxnh*PNBJ!iGiOr+rwUF?)zz+m-_GGKMe}>F*HJ%?G<6_kHojfHwE{=*Om5DRiNV
z(yD0^#JC!XkzL*#UlOmNgEHhDLm_l&Ev?vYjFH19I9(G-w`?~?^$x~mNK4zfQ{h)4
z2T#-v{avBGL-R9mGmNg`Oru#|s at PtaY2+mpOo{B!X<*x_=oMudR~o9zjq)rbc#0l!
zjyDV_jB>;al<#PR-)M(<i0V0E(x_O5#8R(?T at uq6yqPj|Z}iq@=7F}^Voup@{`&se
zlBFT$uKfc_zXdqA7Os7$Ayw|xq|O3ePrWcdRfX%>%ynSKPOm0?XGFJtFR`;?zCYhT
zyL|mDVTeh;*Uo&KvC}P2-w7FZ>V>FOm0O-Vo4I}|RgUXflizk9fbI1=6fj7(U=KLp
z(;4%ky(6~Mv6-6cxJ5lr4O15!JsmZ`^0y|ekr>|$;jNi^_h?c^N5{7rw_^<lnl(98
zfa@#vXCbB?ZFZBUhy%He>-)@dp5ceEnEj}GE%=|h%nFoiANILgq$&O3*R|51)?h9{
z{)_Lbxs=($tu<Pp<9)%iSMgWR4#l%XCMHt&?i#9mNT+I{O<F}-0YA|7l~1RnDD#~8
z8thsvnHOWNSGO5GSr^l-$=iTeUpL?CxC$Q)F>Ba!{D_ZMk*=DCxGqn;6{&6JjEE8U
z0Q*MP2wN%9g*^z&83p36Ek~JJP^NLW9Cqwqp)E3j%`fCDd+##OUy~RRWAI<H)Qg+J
ziza+IRiX<bx`EVzXMsrpTyJ`5KtYV*US6amaRg&V3SFwKbDzS>+MCeLq!%TQfDUN<
z_GlD~nmv094nr<mmDug9oT*tRcF4qtjfwRA1&7Hq&yNMi;uCLu0H2*YAK*M4Xm`a?
z0lkBY+brM?y-l#`S_r?eqs6r#t9+&5fX3Mn2+Xb>EnQ}YF8!KbZZre;1+jb5#Of*w
zFqXzs5W{ZAKpsmRBXt#ql+8CftQdde?z}~_ at SlS&&$II0JNRZ0{Lg<u9})Y6x5gj7
zhKLz-H%-Y)DB2QYx(y%pei`WQDnjQL8kw=9WTpJp-Wt- at 65RqTWJ1S#1*9JbAUBXG
zrYA#I{Vb6^iNrg1VP5Hm6gv^qQ}I{uV<*YHag-V5{4%48nM>k{xrF|e!`_pZsgtyy
zRkDV0+{F7wxP9hfk+{&1dBHqfDmK^76k)C at 5tnH<@Q5qW567{O+(+&uDWzh&8DpX`
z$%b*Qca{(2v#gqDI6Go4M^EKwb_wZW)*<>1Ymk16zMzRgoIlx0!@UaoXIv6*x`oK{
zzRO#j+Hr)h(d4Lg4^$y;juGve=X0TB7sh4Yz#jS_KhR%JsWBI}yI)RZ=1Q+9YW-kc
zMhBTE9p6whJ5Gd+`}b1vmFL4NPQOWT0wJT=#o+Sv0xL#ibVI&WIJcOLZPe at H=sxs!
zE=Pm$X)~KKkE~&K^r<4GEo&KX&4XXVX8>ar#}?4ggd!)IONa%lSjdAvRxRQELXX(N
z%Z>xvmuJX at og|@`GR0awch8QX)JE59sn0U&ts%dXiG5tru9&7zeF|y75lFHXx)JNB
znIbmWinNYJv(ojH3j4m?u0xOmwo(n~-}A6(4`)gH+7UxxhxH)ju30O`BtiJc+o?O@
zGw?j{0AnI+uLDmB>xPlRcT=oghy8VxOp)+m=o-Ak0l&Cc at l04*XH}^wr;e>$S<+bU
z_Hcx(LC7U{E>f7U39kCpATE0{t(a~IVR`FAgw7hZTm=6wbDdhjZeuGm8o&4mbXbG@
z<|3{ZFq}a{7IR90OSKKSlXYm{9!*h58J^$Y`*O!_3-E0ei{~oc6>Md?p`Ty^0Dp%(
zLku3F!w{)mcHa<#o6YY*ES{M3X3FcVjcOXQ%uz~!H|PGWJ&zuQ&!muh&g=CQDk2dt
zs15lRzz<)H`CUDL{Wq}3td5EpA at XitHq9S6%lOAs=Kmf~jUsZcbY%%g<J6a$?B=jb
zrw(wB+;U-lSA{E`wc%ROq&&Ruk8=UeY^NFPng#RaMVzfTzvQV?L;{<@=uoV%Iy5oB
zNm^l5izL-(>q-*)1 at DB<DRXBG$XUDLmt2WDhsOxL7ObVaNt<Pz11^*axI5=oG*jxy
z?>i)VeD^$&J1+BeWwFa8`KaIX at J(x9<_oOon8~)9ak52Y;TVwT^8<Nw1>yJF#Uj00
z at oZg4Cm(T4$$x0HFaGlb`UJS-pIu<-`ZvPfr(Cnqq4HZBGgng;tBf{WI?pQZf7fe^
zS&8dMaGk38LT!6sV-9>o=c)?eug%f*f2c8_9AVHATbB7u<Ohs$F=FggBfeyAe|p_8
z@=TCavMO;-ijiuo)rtqM!#>^|lN2qyByIeXqdcWcB-r07KPpCn`aA&LbD4t6 at DayO
zHUhu0kmQGTXhvutFgysIdwYCg$L<DCXrMXd5mJ|jJ8~iW)N at M54H_?G0(TIzt)%fe
z?!L$~%Oap3D^yJNVWF>ci9bEoBQ?|Cp`mj3?RkZW-=Mx1G#9vt!5a|cgy3@(;Y_gj
zU?Yq%`!6<Z3~~Mdd{|9}jW48>hfT;cimlCPB-oGx%6P-&t7rp1i2<~*p7`H#_t^KL
zAEsjc8pK=*!!`F2Dc09{PCe2Vf$p0!;5Wa6 at F>IZn^*Whk*;#?#d}eB?t<Tzf$B?#
zT|i{xGG9$qh!EfQA?<Ry at XBVS&CpacX_s+5m!TDN@$FwSwZN-}kIS<ALGcxS22L}0
z5t7G4pa)Oj{9yB=c<+VO$8pVWo+VS<ABX$rGHlj>EP3<8xQ at WJe^$5k!K_Qxhq9E-
zGm#dVx at 3GI-pwKVUeAw;=jT<rGv1z!IO at uYF&0u5-SmrwZ;i(oOMQxGD0sP02tT0Y
z;2S)Hxb<ET=nQQ0Zu9utBCjr+0$EaC+^GTBX~-0bPx3Xf%?{Y-wSI$j6*wxuQcs0_
zGWN<Y7x1CscfGR^I)31)Dbjpe&|kTrm3G7 at 0iHO256_TSNXCQZ{m>p#SDH7VWbKTR
z+V^Q5;^+qSw1uzncRLP^Hu&^VhaF2gOfgdQahkspd+)l80K@^rzdO!qav(1q9JoWb
z&9k!f{hzp5nD+%?CXAay?zaO<Fec=%QC1F-*ieXx=4Ya0ksZsDoK?)3-z&m8J)*T`
zoB^hy($VW{giTcg;)XY7e<Z02P4E{wa!)E9CSSy$2iATu^2JyHU0mca`MtifD6Xup
zMEfqHHtu5Q;(3YoJzU>rm&KIXOZ-cc6#NpZ@~i6DII1Lxa#qE at MU|{u*52jF^NW>;
zX+G#%O;quqDM3oGSuz?whyDd~XpnofQ0Q~nf2w0%^d)t9d6Gm)>r3<1wRWZ7+oeiT
z?dxYa`u=}%n))}b)F)P~Y=T@`-~R#b(>PQ5<ehsQ$Nb`^l}Su^e?`y|`%kDNFmE<q
zfWASg?$yJdNAenCbgjjE>sUtCl>StA1m0bX7#_ROUt563D1v-iF*D!w7eU!r-P-}p
zH7Spw at 8&yU$2lJ|e2mNT=I~T)a~Qk8tiU^Fyi*6C-%7+cd77;(FlHLe3Zy-gs%c(~
zeY-*YFxs4)=b)c*5I;KCb#(w^9X`7<?0=bc4YJ)WY+$YSZ<H+OPDPzII{h)OQbKzQ
z2hkpj9gq1RcjQL*awgk^v<KSe(Cd~`U1`3Sv`?}<-`8OG at in4t;j8YKG*`+R=}&Rg
z at LSM6>F9e3`KG|;s|EkbfX+c80Y;(U3dHtNf=^3kJp}(LrLPWg#OfKJHYvfmX4)?Z
zaj#Y)1~t>Jvdw4ag1 at cvIf*$i%u+e at 6LzY6U}a-0TS$I*=c$0toY`2z+UBaqjT3W%
zp^FxR=^A_=FrDP%K^?p63qpHbC%JoAhm$@ngbbCg5P0Xd2)y^VmfA$MeEwlesrXXu
zOvKd+UWGlm#=nlpLPG8UmsvIP?tqkT<J9t}I5q)G`Ahg)S$T&1pAdILZa2L>v-v0V
z$!F|h#MS6TAM$`J+JftoxL)bp2U at UBpqWB^z!1lE?H#=TBi{dndH-v?vr1B@&0`_H
z*2aY~|6pCG^u2 at jJB6#D!%%Rf&RWdj2dHxV7xA92p2c2Q at eqsj^Tn^BqevJZ9Plzc
z#79Xsj47qxDwO>$&hG?tg7-171pS||&ST8h4q)sEUL4y)#!==V{yWcEk2EvVnvu3B
zRg1Lw&U&KD{o~kTYbp4F{O_2AjuUthepLxu$|>|kJqI`sAIGErGo2=~Hjwen$t7#Z
zDcBa^TeY*2y9fTZ-5mz%f_oP?ix%^H=o7Nd$2$ov`1CC at 24T0Ki}CX|<|f8Y(x({1
zmsp3_$#MP38R$&$zqs-M$Mc0N1W}0jqDB4mL>^_Y3ED{`wuO7wL>l~nk>}@c`NQ_j
zuKzfIDboi`nS_W at Iawx3?W~(9(~jf}1(8#^-vo~4;6N3P{oQe3tD{^W5jm&JHFr15
ziddZc`-?F?perVJj#zvBLId%iAI2AQ>Jc~GGTsS%+r^IEu6YF0!1Ik_isy;vZvrpf
zOkJQ)$~N0Ka7uCAK at U^^l`O>l2XD^0m9bdq+)pLAGr at OskZ}OIFKnGnpYZ7+ at q;u;
zzpVqaVJmn}N@$A#x)Vaj$eI&AvF0 at ImgKW4!!ohXJj*i(U07$t*!yiBAC at WN-X!uU
zVmtH9-y}xHpAhR1v*t{nSaYs0YtHK1zy0gm|6Owk-@)L;6x|11#v|P%b~j%M9Xjl`
z1n}n;Xy(=;{RES)BI&%OGXjQ>@4QBBd0rERHK&+$Ep-;+cuA?qep~axr2p8Ak~_YJ
zd1Ch#?urgGKY`f2wwvK2a6Uj8+u5gxH3TSJ2U6vlgPigXGxq`J*-HV+_`?oOvoXeK
zH)oW)hSM<@`a`<(BJ7LsZVN{}kssGi-k%Y}ybt^3KTqUU&&iv7-pJ%Pn|ZG4sO2`c
zBPPXZL)e$dTWYW8E_Z*FQSL5g@=s>+H)<7U at SJD(uBxk&zkhz4qnOwRIA#A(ly7~k
zoa7511WBynPxu#qOS2({w%3q+;O|hRRh%`5uG4kM-+=rl)BS+&e~P3VnRNAU>D#o5
zlO$ai_T~Ibj^d+rzqcPSt+ckFfpe^DlXSB`<{#J#E27 at u$eN7`<=A+t0`aMikMpo+
z)A1{f*R=cZ%;eV at J!fs$mx at _88J;<e!CKWZvWN?eJObDr3dDdR`0HE#M)V33b`h?V
zRKn at JtP6!M*l*W4d<tU)MbUMjV_oavUzNHQev(D8;A2MKN7`4QZLcu<oIQw at b#PP-
zOm~_Z7~M_IcxM`!S6}=<e7EmDPWAp2MEnRAVpV at yepmOTa?}NS(#FBQ7d)r6Uuwp>
zW!4AvlINp05j#{DbcMMt51oyC9>%^U_tf4{Ijb}2le<Awb31enw@*>ccNtvmh0hZm
z#K?;og+IaPWQLWDS($3v#n4&!HtheD;k94O0Kei_{Pp0AZOk4?>{pcqOu{UzCqZfC
zo&S%scMogoO5cV()TpE;RXj{dTjeCR_CTb_v>kh(I+lr)QbZ_wXe!h?Lrbw^t-q16
zC7fkf14%XzLO3K4AOVpC#1kT5wTg}k5|v#;0wUFxDng{zTHkx^VB2@*eZTMezCXBj
z*x6Zo?X}l>)^oU@`@!*VuA>+HJ)|y@*Y5E}(7iVf(x1GXgxGB&=SPO_y9_pCAv2Be
z*J5nlklR|nYK8SrWQ;xWJKqk+GMd?PdWCWz3)t8U;P^en9+J0*7~+$hwRfb|GaK^s
z51vKVH1M-67ZBa*xe at sDktfF^_Kl-Wy4GgGHM7Yz(nwo*YoR{NGyhftbVV=VT!DST
zeHyv at oLP}Ku*Y?utkmD`Bi!33L%YvFrZfV3mX}n&?W{bG$O~Wi)`|a=?AwbI{;Q2+
z|J8=qNY#Tj{wEi0V9XYOHqi!&^}O+G8_g5_aQj^w`}(kUdZ#+t at H}%pfd|908CnaC
z)1|PM;OlveJQIA+I;j?IdHq*g>war%wxJDczIPJWmdLZ<*S1iDlH)dhk+cOYVzu{o
z@@n`Gdc at NxUFA>16#*&oH2)N-nQdv`Ek|C;90jb$k`V(LV}Wv{9Qpv+<L2WzYrLH#
zj)4BCNALXq_<g;1&&2OFqw4>c-xFKwKkr}X-Q at bcCo{VL|NHMpus_^x=5UeDu+*iD
zWLZQ(nE5WVdKndHKfw&~Utss<yb;p_o#|gh-wsc`qy%5ly_qKD<ej{<m##<yw=isY
zV6y0s;HRn(Kg`+EAIVyT`!VlgZWaiuVpNXYGr2i>?_Kblc`dA>c4J>+-YJxxx3%;&
z(jT>8ulJ7wFEADA0iB*)uOioD{>6-J72<l>f(hBNz^2YQlS`}7u5QOJIq*e7)WFE$
z5iF*EoUJ^qkx%@(6 at 5&O4nC+l-#H6YV;DzL&RYKG@!vQi<Ns>;POP_ln6v}!8Cwqb
zF{4#2j8Jz5M+M^!zJVP%*uUG^NIDq0t(nc`GtfCITW<3kvA4(sYG58L*n2W<<eUoU
zV1GydbOt&ius39We(Sd-sebb#h;22|!E)zAI?9!2d-L)A;hk(bI1D#noju!8>#4M+
zc^AUgsn<3kc2kA59Uze5w`WHP7PZ|y$9f|=0pHhzn8!=Bb+Ci45}g#+`4fMM_%^Va
zh5F-&$LMz1Nt+|P at w=l$?*8*Ebmn8Q-R$7hw00UvtuQ|ZHXz=ef_e96MZ!DL=&K=T
z-Hamm-d{@GVada|%;v_s)shPv+(5=J-p_g?CzAhp+&6gl1&;8zznZ at juQPv`R73n!
zj`fK(rg8AW={6r3HNvkF=idU~Rpmkp6=~M1GsaDEbF*XN&v^!Inc>HI#%~_{gBWj0
z7osx}pSlh{-5%&Y)1db-d>;5c++g2#QAM~;DQt)DC7yb0;#pAVal(!~rZE722tPA)
zU&Niqf~CNXE%N!_WI;|^T#oKHSs?tqTv_0${Z$qmhb+K5yy;J50d%@O;<L!j-?e;P
zREm9N2mCI7B7P+J1>1;kq{a{XX3f<j#1|dZaP^4e7L&zaCT;p at 5xBI<F#pT?%IJil
zKQjEG`O9zjrO+F~Le$4XFP`pat!{6`G)e93hu}tI(!4%gK$m~sd at x>-u;;}j>}gSX
zjw|q;2=O<IaJ&y4Uf%xUI>#EimvD`oUT~=wwMj>WuZD+*Df+fb at -DpoOS!gkES9cF
ze|OFMlI9Bq^mX54;x{;DrUHXjta?e9MU`s1UqBr>fdX^FKhKi2VP^L-1#+ab@~X+_
z08LcHr7QgvSs(1^4$v07DNsa(zjLL(eAPdJXS^AtUG;MKSz~_2F<$#Z1!_uW8*|Ay
zU=(j`t6EKbrY|G at ep(x#IWJi39Q{NP8aiRCIV5 at 3Jc<1j$tm0#bbr-L-9Pv>3Xf1J
zr`1Wyx`FNUBx$z1I&f;vGHka>^xx#Q5Fh8v&4+`^ubzIijM~{s<f~BJ%`c;BI#D+g
z^ZRAJ1F`y_fDbw#WgKXS-^HdQA5amjYkIe{&i}&95%%+$X6o~<wfODK%~rgh(~p|j
zowhX-I?}lz!}6cNNi&n^&)AC}_IuuS#9rJEUH##LK}qq at 42J))B53l}Hp$gwRZ!BZ
z7fUjs!?#P{QZMx>AFcXxP;l(}PY`!3rn9L_^oi&MTNR~7&6#iLuce6buHSksE~aT<
zH|k*2T*{;mVC;|!=lB!i5@`Ys_b|q;shF74*Msr~yCwE}7$;62dkOm5P7z{qbfN!d
ztPj-XL_a@=-_*5kY7%wb`8Z!A)J0q(F`%>`1~r?&_XxcX9F)*4<g3Cu4C+SCH=R~r
z9JF&)80PR+%-6=CGpoYDIiiEVCG&_8JPo>nbh=7?o4dBHz8IJb<&j)%rAQYN%K2Co
z8V1MGPz6Pf%1{ON1&c^)+9Q5ZZB#Rxje?!@>x9c-vgfd28EVpX7LvT)a|<-LKQyXu
zZ#Ifwl$7_TfNLyIFitaqaSii`K~QYEsV%vy^KqA$leLm^TgrqlJZyZbwsMBfx3k>{
z-%kSzKB~|I_Cf3|x<?BfB@;g4fAaXm=MA}-8E(Fm(p~`@6nhX2Kes#;u at fWK&-Ual
zJo6S at LwxL?f{(ZIM5th+uj=j&{I>iWiCwfV%S)5JbiO~EyH^u`n9bnd0+!{V6kJ{v
zFJYg{4NvXMwV9-Oq}C0v{<(<5D-mzahmRb- at roDa;LZeYH#gkemoG0z|LTW|KApqk
zJBHXMHwl~J_6B0tJV7XlNsH=Mqz at Pn$F`sb1mcOI=3WN5ObYnF5u05VY^zcvzCVO#
z03Raf3;$fE6__5xK1famiGP%4h;+z>!a5e|1K_K>RAj4zy-3c%hdz at WD+I8^feWsZ
zHrk}n-^;;8M||u5;*L2C_)TV1!{)^tB6G<e0H10J(M91yXh5vV<WbBwv*mKcVvYlg
zNNj%SNIlpSGjr0&_tX|}@h6N)oXSld*c;8_5Y!6=A1d+y^AWFn2ex=sQWM7iGn*0d
zv~uuGUB~@jn`kSJU?CLDO2-5~BF5swVVdQu*3ogEE!GsVc_hcb#_<B$Mm+=BZ170b
zhcDuCibx#4J?4DSD=Qmt&+~^nHD~?wL(!_kZ#D#Z4(jC_Lmn&M{9uj7Wnqn$(ivEz
zCnwfu4%J70Mb>Cs#x>Y%1GS38z}5m^tW(*4tkYunWSJ+Nxc at vZugR-eIkER#9x?=8
z at i(~E>&gb~^G at INsy0Vf-!!^}j3M#K5B*WK7x9!SRJHvc_J;s!OGp(B{~_DOFK5q&
zj2D!2?*axMJlh_$Cig=Vu$DJOdnC=8V(qXjV at 9nsuYEV{aC0B<wymd7)21A_-_r45
zV0#-_8``;qT#fSJ*vHp*R8REl1o5r%x^|@tN<$3OOFG^~`$O+G5T7IXJM#Gs^^w<W
z_<HVt2ghM?4((h<e at y(@lukN@{W#pMH{GQ5AIAJFv at 79H>jz(hLHq$?O6wrQ5L<c|
zJnE}ncg*B9uA0Qk>`HuZjGkvM*lf3`HtTKG_?)--swIDOxy>Mcc_h`p2JL?ZA5NCb
z580PVqekKHe31-&74dEGc+)0e?vUHgZ$P=-8n%%xmN)XHk>`g8<|qa-Am?u&Cs-EH
z46M*ap at OXz-s&zA_IG!yyVf*XfBto>PFqP#0et8q*}P^)hP26EGBG}<{Ub1jgl{Vk
zagQP<na4j_lQd>DB|l->o!qD0?xBoOQuAOtsk8kS=0#Y5ohc`AGyf!QfNy(g6=L|Q
zp$DBLru7BnM}bE!bV%d{u6o1zCyzp6W0{^yW&<nAW|2Gv at W8<r1>ex_Xn#D{SNw);
zbFi14MUF{vn1f})GJ$tbyL3TP)>8m(B&%eAMNSnvPonP`$N$}u6#U=c%i#M3`2RBZ
zJ$xe)T~84Cu3qJe50M&Mqz~g>$zAQF?;A;O)nMAD7nA2a=tpbH7gI at JOqE|K9kW8u
zV?ABaws7%9^!@*Sz3Y9jD!LT<sX-hDIS6b`WICy<5T;|Tl}5jLR^V6orRpa48hH=D
zZp&jKsmDtypIk9Vl6tqe!WcSjpepNqKE149<R>+=ux87nl{JV%+}{4q at X-K8opFU?
zzyQ6^u|->JMBKDWRyQ3vM90g#HR0DU<&W0LF3&1QEtBgPbHj at +XrP~67FHsUJUswh
z(a{Ov*KI}NiaUjL{KPx<(Nw5`9pL(=fUMA?woVrOyaP*Ac>cMqsj{3gBjJlpKA)Ag
z`MmW{QH?FBWbY^ImgVtp07o6fUgZ}%)3z>V=kb{q_+H at KzQvYz?FGky8GEz7uZiww
z=JTsyYryWYN1nm|(k<90wg4A at wKzsL$nmJ2p=GGuHjQpTE=4<P0-G^MQ(GUWJE=!e
zuRNds1NMS?;(H}I1Scl(E4+~(iWr$mAVZC#a{4=9?E2mFF at H8;4cSChhzG=C?wi^3
z^mj?64kAC$hOjEBw2s7h-^aZF48Ev*9xy82 at L|tcX{%KvT%$y};P5Gi4?Yg<Tq11)
zpMMHi{H9Yi<T+^6ofG6!z{<m~IXE8dU$M%Q)n<Fe8T9Ak%k}wwTkyF|e<5BEoX{5e
z>+jA(9?>kwJ=kD<;RI8MK4p^Fntu1 at LVYb6Bf5$HII%!)*_@?s!1#7hTU|9FZJs$D
zc2$@z#_C_UunE3}Rlr0tIW3V2)Cwc`yiYNoocw|9mD-(K>gu{eES0Q#ZdUx3`kYjO
ztS(|pl05a at MoF4fqh0=}G9a^$N&8Oz5I;7m5x&>>Yo=v?$$D>ly%wBubo%Pua&VSs
zy^sHEMG86{Ip`)ScwwU=>I(gvPgZRo6g5yqS at Gi2C+oNS)O8UqN_j?lY{)s(Ow@{G
zR94n|u>H**yXd3c>2x{j<7vU6j#z;b78$-z!SB=R9@&0HVtzYMYF?S39zxB<-MD5S
zwGO_6rjtKxzfw1ca1F>C=f<L at X|1}cv__qwtid(F-_tGIuhu;xegpT*sI%h#l<ju3
zxwq~-K4)(4$7hlcrKKP<5L?YrXNC6Sz80J}*WG22w+6oYKWZ{$hV24UZz|h2ZXqRO
z3+qO~DO10FI^jYf_)GH=<X%~Dy;=N*`Prz|T9qibPJ#T<{HV2c9<W_&HLB;hdbU&z
z=0{#yTx6pxr89+ZNR-02 at acG}_OwVJ{m7oZ$;F8S(FvxHw!JG=MkhE|ZChx1_PxpS
zjzRsV7ejMSVXx<VJ)RGp4LAk1#~z)05wbJ2^hW4iA}d|8(=SkKfDHXJ=0(5%eAsxX
zzZdFg2Yz4Lz!tQdP<J+NC|mZoD8%r?rNnP9`#bmf-JDcK!eOaX`I(1%c4!y7KB%5<
zq|Uw51OK(cn(Cd4^)+lW at tP!x<NekVsWv+nF-I%qu1#L!VI{dpCP8k{=|k$E6^BZa
zc1!o**&>0%QBkR^Z)*y{-6S@*riediLGE(kp|TOvGyWB=N9Z2@{LP=30yg_2cA;$@
zNIYj+y7_t2lbeG~*EZiK@)K<^*cZdFN7g}?dy~WC?17H-33Q}(clf+~!U$*Prgr#Z
zi4SKxboE_aY$^)B`^0(!z6K-C`Qf|OI4;KVpE!~l0DAcMKSw(+K3?Bh=fWe=I{ymX
zD+NB3#3kT>CVLKILWxUW^fI6=r@(}LxNyxB*yxI}XEr>Cd%O{v)2YO7cDI%})1p<d
z$Gbu=NpyX)TgtpH6JJbB`Gfd?SRmJXedDq_5U(G&LU}#``@Dg5(4|BBR9WD?kK;9m
z_nzB}yc{+QIe+19mt?Rz*3lK7hpZ{_ at O{S5b!2!p{JQt{yr;t6`?*EeDW<=NZ`ez0
zmS_6c*sjY4J*x0*M?^be<0jnvWn%A^^O}8CW#eBP;^k;d*t~B-zMs`pJ at jW@mu(m7
z9(@n_S0KuB?LY8=#4f6)gNZMM-W4QY3BR*+Z>U?R%9=v^^94zzkO`%&B%VGI)3(3Q
z>#;>8wTAchq24I&y`I`amHWJ>)vYKHS*hw(;p}*L?@7XC(#h$fhY$mm!vC at lxq;at
z1)jaTqXF@`LHCS_XFm+xb>yx$?-*ivO-Wycenhw^ZN=~>DcIi9?V5)!m=uYNK6#<I
zANl)RZ at cG%?;-QI-^QonS*H-3)mGr(l7Qc`j!-|__KJ at g9kU)>cM$hDW`939-#P;R
z6zJPYC#716G6Z!`k?YyzPJF|$#QzG}`U%%>Q#|6t@$)T+DO(l`Wbi-z4IDxx!7&4Y
z1p}o`GrP&yd3M-f-v#T=ODslQ_mpf{ScP|#BghT!y_^d at YQMb%_(3uk|Mhqee0oLU
z?H4otpKuQ7$7j|Xn8Wtp+W_Ds-Xp#UjKTx_##VyguzVbUF;VwT0%AW`EU0nm{0Tl|
zo$5J)jUZg9{Wsz7i(UK$Hz)t)zuWP?f)Vij=1#1;HF`T|AFE)~?BsBf2MF%A%n84H
zHuDAKcAcz6Q0bnF^+4<r=sbf5HyulE!~gSu`~O707qTb?u}JM}(t!SM at XK_bC%+Lz
z!?u2za?1PvrF9>mRJA6Y-|??f(E!z+HSn(z9Oq|c!q52 at _&`t>Vb>GI!04xHXFVaW
z;Ftev9lxDD0Nvr=;DMQQq)t;Y)zqJX{FA!rx&ddYZs048ZlI??ry0&F-yWGY;QP1A
z57<int|*l=s<V>66Q7;F|07c1_X>8tb2ZNS%3AzB1E13Ir{>bHN}CS)ytXo+zmGvZ
zVA9{6qG%~|V3EekM-4vZKL(EO)D0XL8p+<+_i>gUb9WudPx5(Go*G*c_;cAz+V6Fr
zkbcosx$errO)vMtjvRnbAW9`EipqCavcOLE#o_sOio)JuLZ=|7X1Z<3&5(D0k?UUf
zm8WiBm6bM7HeJ_I!Pjf2;rS=;dII%z*G7?g)9;Ud^)75taMmyG&EOmHEW0&Fh2@&_
zXUa9J3rw1*h2`qkk7sH&<6K9nOw+!w{L>!EPZ9Z&O{<GTK3&it84KGhN$<{g3N^<U
znAFFQXZn6!xma^SBhy&I%6(EKskkn!paJ|1dnKw1`Of?6RHA;C<nW+2sO)j!2U3Q<
zrEc;&_xgsko6 at G*p9angby1CD@{aQ~a0^0;>*t2d#VL%p0bF8%QbsukH7NcO)fkW;
z#c<CLo;B2q(u$(C+w1bTIO@)CvDfu%8GtM-tz`V~!xq!xGqLMR9YW;FnXu2+!rrQZ
zY^uZmb@;y?$66eB<4AJqcB7u*OmZ)E&%#W+r;j6s-1Jlnxv!+?f@|Cl^u=@c4Tb&w
zvc at 2UZzxZsZW5gvI7;LFh(^KJXY5NP^)rNT`E4TgrGQslK&LL5Z at sg$0ClDibMZ|E
z-z;OjL$K+7$Z6@$C3eBq9~21#m$0v-whTgsMTU2sRfg-VcxNZ;Ne;nrBV^MLB-gO&
zk`4KUfsIv{!i}@R(OY#fi}?9bUu$VIWYi63_tqb>Hu6iH`mHwt@}eTBntluPT)jWb
z$v-FY&%&Rqvz_K-+7IM6{!Jk|eF^e9uxC|WB64?tM!pB)$&<eSEuM_}yiUZE?~!=&
zB>V5<$(R2*K80m~H7Xe>B6=p`M>KK{{_M&*n7*fjelGh)z2w^+#K+7-Y=NOy2zKD}
zG}}RZ77LX4EVMO{^QakBL$GhuE4CW^?*n^XM?Ddu`wq1-@&7|4mj_2L|5=VeSMAAR
zb3n>?yLK4-bdkcz)cnBO?1lhc2Ll|sDs$lN9_S*V(V at e4oD^u2cHe)iH3K~DG2K@?
zs!&J6Ao|D#4kE0-AYiO&;oF~QE)6}2@$EI2hP2?w3Nxu`!hFgd|6f<%8!F5?u4&{M
zLcbw8T&K$?*26E=T=)>U)6n6iMDJ)4>U!t<rjJ0UN_xRDOVc#jplN(8%6FNtfI==>
z>k+w^|F|vQZwszPJs-$pF7``oo-5SWTjW`g8+0XpKK4q+R6 at UsILQL44cO!LR1Y<s
zU2iE5r8~eixAnFty|n`Icle^G&W>>g>wf-Y2Ye(?&v92;NNuvs$PsCe&)2HlQLDMC
zt+OIYiMTxWl*?wck=9wm#nP3IpUJszW`*gdlURJdHeIA_t?<7{+MW4We7=3goD$#0
zs<w6`;^z6JZ{$6R4mdvfct2wCh3XdQQAd)Lh$9uWR3w!K)rA2^cUg|U)wfiXGCd at A
z-z6UGfG>-_5_;)m9k at oDlI~zmW(a|=NxBodhF;3+3DfaNe4fn1HuNvAGfVvE!@Gb%
zs1R3?zAW2|-~AFlh&>e;7OFeMEG;={mNw!&wY6r)&9k5TU7NrBzRmaoL{H$8{yDqD
z0DO3<pv+t*Cp_1sE^NR#S(t7z?)`29>Qgsa%6`KKOg>S{oYkdG=I{Y!zu^O>s7sk{
za-QG=%0hp|2TTbpWxB|Df)5Z=x%loN at DNHnH^z5b$lf^|j~uQl?58n5?<CJ*_Drs^
zESgi$X;d)Jd`!4Dvde)J(ENrIke)<N?ju1hE7KOHvX`MVb`kkOWJ4SDm#5(im{A3t
z#2d9E&qUok-HKR!gVYSUTg~ZWMeqyPxPxPm;1BcuLe}`bJ;b*ib(4JlC5h-6xp#p}
zRLh6_REQb%(;Z9Z0u!vZ8w%jV*22euV- at _0W(~N<o>JY)L(E_ARX*+w`!|)Xk$b7r
z{c1uzAp6e&uf7*tq~-P_&{dJEO?MD~F63e>JIF7V4bLc-Zjq-Um-uS3&fY6yBqmCE
ztLQQ4eA1>{TFA5D#re0i$R*39x^AJiEB6c~(s|NUHlM`Z{^K5jLG>$lcEHafKaMq&
zy5a);9(+>BkCyA<qf*2FIRHKU+`L`L*|_SMj(7t6x=D8hCE;C~Jov|RIbW|qHVnTp
zVw<Dyj88#Z)1~<&u9{fR764nDXFul`2>awM)ccIe0nb`+>~msZhLER>b+!R<hjj4x
z>hd2(jVcA=Jqh<W54ouh2r`-66$Jy86mY=L{ZG(}sGGKGak8YnEswK#E^{`|CeluD
z?2{h@(*(X7 at H~2Z|BvJI0_ViIJNZ at q1FPFLO5mn4TXm@UY77uix}MiZzo1}4OM6CN
zr4+y%Fr$dU!nfM}BjU$DIKk1J2JYJiDzZh3x}YB<DMmN4SLtHeprDc)>*mp=WUPUK
zsz@@9f at 3$-+{ug{l!7xd=_J=i0oo{gYQY`PrE^DlTE%0>XvU594k9%P<^A5v?h?N^
z=JWk0q-1|X9Yx%Czu$uKG-?YSzhrL9W$(wh=cwT3k5f_s+0l^1Aa7DT at B+<D`_%iI
zy$8>^*FSG{JDbj3TkE=(Uri}c>nh<F%5}WAZ{k`1EzN)Mj5k)Je*?r0qPFA=;2Ccw
z6_1VpgO<aN;5qMMo<+*_uuHBc8!^wck_vKup2Ai~-p4Zr at OdSgw9-h|ckuhemi_S+
zav$6`0{^F=rdGZ*5BKXM<8ea>efz<99R77Y<cO~%+-oIz+%tP7#^y_Tl?yi$9Q(?2
za2FTQ>rrcR5vh~ryQP(^xhI!moD~V9_}x!sq(<nI7v&RJ8~kRN)L%f(Qv-C0bK~ve
zmBKhS8$L8~aLjj~I+Dbcuq#F-^k(aX?re>)qq~UMlESHMu`qxwH4amc7T?oUK4F-!
zdpbhbSo^v7?Bf$Lu5oLB=tuOD2^+4B*CWZpx`r*rVS<k#7Uzmp-_%A>k0D;Th2+aE
zZWooHR#PDp&jV-L%GstL6wGrUz~6{EgRm{0y6X+yCJp(mi>XM{HGDT07|S{mkB}dG
zNGChWH~8mtn;<V- at pZ<{(5l{feBz$}eo{sIASR9+Ovea^eM$+AUGkM<1or0>$*PeY
zj*E<W{-eqai*DN^!8&!58Ju~r|7F(uaSY;bu)Y1}MZMiy+rOKOsg^{&eesok#8ic^
zE-Ox|D18KcIec(R@#O~m0e4JtB|rIq!xj_;$K3Z$LwyO=K5#P`FKdCl9*GL?+d5D$
z*hlzYe*M2nkV?+?m(#a59g55y-W{+HIg5uPBG-mGo^f$NPtO^>{Q7kz`8!DD>)5<F
zj0+Xn^bn~Xx+EOu5}$cVknWhPNVxMVWN*y<aXMI$_?%^8ES|u-A!7l2!1EtfjaW`>
zyWj}pw_K}QR$@=$H`rJ4ciMZVno$!Y;m#|9y^cTf<@R*G!ZCGfHh0cLkixY+Kc2B?
zB{m at +buDrWf=94c at A#4X-8*AL9kelTL9XRQaz5Dy2<C>vnCL{n<A-~4v7Py3j|g83
ze@~&zgNwO5L$He at lcB5XkbhO-UmqO%)OT{7KX at 7z31ik@toseK(7wu&>%uEw&r6)W
z7np`D at xv{Lqvu+%A8j?oKSS;b*&AiWx*JO-`~F=G=G6g$cjD$3=FpSN$-Q7RE+qD|
z&%X%H2w0%K81vSM$e2qH@<crkoKVj?1iy8nK#g^>3Ov~ie=}Dj{I6V%@Q;a(EarSe
zWDg$OLgE0id(=8^jPF^##u!iKTQH6dn9FaCAaBd^wRjM@#R+2%1HaXZJ|uV|uQ~pH
z>lCrD+Y-;zp~l!)EzWQ7%p>PvTXugX;q=KBHeg5ipTz$|PI3bftHXPAHgWhUPvC`1
zmyt1<^Q0p2=mimK(#-uHx)|~$dR544EI~dad at +iI>OaN*Or=)nhOdDe_IYWe#2lfP
zroOwjZA{MWNM-W*XF at xXr~a5l|8Wz>F~XV}f5*`!B3RfX at R2+c9Q*V}?pex!^VId(
zQM0l!IOfMgbn1I|P8!vFt7_z#bU8Skt_sw~A4 at HKU0*K0WTrACmBY4VOhtWj`idyO
z)$wR>_)Dy^p=|rK at Km4t_8RvX$hz;ieYr3+75A&N5q}wZ=1t%z)Ui?*22OCnktNe!
zgq}=d=g<#xQCmRUUg`SZkt-;MeqWEg5e3<UwM|@(NImA?lid7U2;J}^@7SJBtcyXS
z7mF?0_&zI5 at RcNY;Ucfc_#l>av9z*07QP)5=ITe>T&2idb-qS)n_ at G;mfgAzY)Tq*
z>|@Af_fA at C&nj>tFEoSJ6*xN!;(rNiWErE~%?SN64db?y%XhcL--E4H?3i2Nl<dZQ
zkNN2tTP18VtZT^q#HS?W`vr$Wdr`Zpoa%;8t9e3p{!DmlaPBg2R{1o^IsB_Y7Pg0F
zR=11N%_qosZ|l2s2-wXlb9RyY0gI3deG9m8_+%Q;A2Ut*Q%L&NTMhl0<di%{a_foj
z#diR_v#2FW<ZW^(_}3DgXE<M427IoM{isL2rZ)@xw20W97stIPFbs^ENj4(B%nZ`-
zAu{v<<Tb!YL-a}52#$^e;$y8-{4H!PWZ}W2K*wBuz9VdEq06TiniFpPMoavrTdh*n
z2*dj~S;L$j+JJQu4B6h!>Z~IntBU7wv6cH|4Df7`BrhC!-wC5W$ZN)ZI!%ai5x<(%
z6E%cMJCMiyQrKeNcF4mX=yYEmP8ClhV~;U^2eFb|$H=y|sHgsI*73QB!MvLbdoMHS
za at cTi%>31zh#MdKR8;c2Jo;S6Ou|#R?PG$!3B5*ecvwp{%tp6XX`{Vap5aC at naIP)
zn5APf`R|0HRzq(FY>C+}ebbq?>4 at 4nwZ<cFBn^J|QWk%*43GN9^X1h7<acJ3be4Mp
ze+q8&Dr8xJBfJy-<$#0G8#0kcpP^vh%qDuqv#mrQyn74st;%;5d1loDX=KppsGFGc
z;nq~}FqO&zg~-nd)|CWeeaxC!=Y14>l4Zq#k@<-0ar)#PmbCSJqGJRysZti`f%$j)
z2)Le>gCj0#MFAPF{vCA6r=h4BnvsM(tP}i)F25u98_2QS-{ShI(ATEIA8qi?DGub`
zF at v=YKE6vz?7K~RJNT&dY$|^HHt|{7EJ;ma<sT}YweI=hQ%;sVIFB)M@(ZIACfeBY
z75oBAXJW5MZG)Lr(C4}|`SOi8_m(?Y%sLt5&D1z<s4HP36iE~p&N)W<dgv?cSNtp9
z*^ZA%?0!Riap1f|q_41jco?_IuJ at qM;C`d)I|r at _?TlvZ*Zpia^8Mw-4|15kiB727
zrn%tBVeo;imk3b1j$Q3&1GWd_G!9&ZYJmuHV3yf6{#YxI3wGHHAuGV)ggtHv=Vx(Y
zJ0>s~@k=Jw at ejDyT=;UyoZCb2u0LlIj2n?71mpH}c5uv{?ZGh%rgfSXiN}|V3V$~T
zA=jdA$}`0k!Li9+drrzK+YTUB`ZsWHchah{FIN<-dW#)_ynB|DcaK7*u|&4<y5u^%
ztNV(CtBH_XyP<P^z-zMTk^(I!@cv0o?lHkR$K0tzZgB63obQOjyQMh&>Ua1=cjQ*#
z`g?-?WK1l75wwg{$xe$}$bN=Bj{GhedT(Gn)2frH_`A9N3>e?|U$B?p`TP#p_C3(q
z(2fJx7~IqKz55c|CXD4lK{1|z;-29n*if;4Ed;-JZyDLU2^S at iQKDkhIF-ucAaf25
zFtfo)1KFR#$&Zm_l|u>n5dz;=r4RhzM?J!gU9dA1abp?oN?SSj)w~EER$4%=$A0q<
zk_$8w<1q3Dcm=?9=g#4w$-PK?Huf#oy~M|aI#wQ_YbP9|;Pmi6Pwd2<tHHDQx9~{J
zL56?8)fd7MPwT0*;LR*XO;)L6Bz!G?`(;2^Td8B@%pjj|@abLaMce2OUg4^1j#T8^
zAMa~KPDzm}l|9eD#pOZ927cMhKrelp;0n_g5nkcYi-BKO4F(oh-PsKu`r5D2&SCuK
z5Rv20{ta`Fxm1IFl5n?uD`VQo at sywp<3Pp&`r1*&uQ81CPa<x^YqvkHNSs^cwS+v+
zt|8d|cJcG<4#;g9?{6c~Q^dzOedG{%&#wPDz2zY8&FQ#4DP(Qj91-j$vZHlMDMRa~
zR&laor&IaJpGEtj(^c4L?CF0K--hgkel#^J2>yky$UQlX>&0In!(O$fijToRalzgu
z%^7`Oe9X0vPRZkZTg}{<1%lI95elpX(6*6~naFR44deygh|~9z&&yk|59WLK2ge3=
za612bm(Cw}Xk-cI338yYXH}E=g!u*@f5<D$O`p#);-&CSbPyfO=@=oL0I&zEl2yWU
zY$1ORTTZxC#|$w&<milunO9&#zR|a$Q;^sBz-kqvu2U)O`;suPi?2XuoF{x0I-^%_
zEp*0th{F^Yuzk1rb-ccgFY);judj2TB5~eS&49b^^+ZZf)r2qY&!8gwrbk7_)DgP_
zwnjdsUvvg`Nc{ltM&Ig|rArLo!LM+fj$GTD-e0!vJTQvI*89|9?8}7jW=n9)SHnsl
z@(%qi-6quGb=fTcpmb%l?a%nXM36WhOz`zrs7-sN$WwjppCmr`{3O)bYh5{)()k=D
z_z$f~+KT;iGk4DHqZ^h7SY3K at l*2JY{3FR-nD(u-PkvK6Tb?rHfZtdv(!~{Ep4X2U
zNbUmrjxAl0IDZ4=tnu;U5wgC{y64(*h%PI>Z7w5vt|!KQ(Ob4d-0_TUAIA5p2s+ at B
zC1#yxzBMf_pXknLYxRT<_#d*tQ!dB5xW9zFOYV8pc%Ip?TbSny|Lb`$2fe?Wc%G`^
z^niNT^Q=4f;CVuh>{mW|IIiHg{y*Nr^}A8fFfnJ*U*FBPDva%Z?18U}cK+@;#%vbM
zi$6mLk6m)&|J;8mYG6HAK9RG5>z+FZJ%$PV^MCdAAo|+!yRknz(bo+R`nvV1{@m)@
zRhq4bZwzlGHVtPtU~E4Y91e~-riPBAIK9gg^3%)f!I(qVa<&M`3AkA;$R@{;6 at o9x
zarBBH<<_Vu6E at g~+;zaH;~4uN<4^XjN94$z`*E}1Jk*_-m`B7GeKHn%0~7eoe?E(6
z6ZSR4!7;bYKEE6H$R!V+C8T2i_<xN%`gH5Z|83k`e;xPq-;cYeKR50<WZa(${6CL7
z8HXo_f6bMN(L|EIE_+jv at CuE&L-H%(_d%?um*CklQdTq)9VViQDv-WSCBXl$6dEYX
z at scJE{ATOvj}ZU4g?L*XWNyrf1wsRt|B%P!GwAxClIsP9+&R at 5*SVMzgWUZdk-~S$
z_99+aI<tZO5*+7w4saj9mQiv(7fUaLm}L>kuW%!F<xJeCSdsA45^@w}n9liE0IRdu
zWR3GQU5Hy`Iv?i^J#MCBCUoD$xULiZ(e=;6INZ11aA65 at bchM`!#+F;8L7LJ$v+6}
z$grkDzL-2iXsASC%|pF{a?XElhR)!tshY;|vk>3yQ*-g|HW8oH*lFT-fe+?w_+A>a
zHs<I9a#xM8BFu+P;Xkq at j{Y5D at 6763)E#_Y(2+rK4T^*-0UQ<;IS{ZhzlP_$EP8?E
z`kE<@-1t}*?}yKvrausU?Qu at O8r8r*)z4-Vd<SfglhFC$$8qgRAb(G|o$rp=%e!yc
z)2CuBKAmHupbt+MM+^0A&1e(R4WKs?dwtWkK1ZAQ`R;=Pxz*Xn at VPjH`+8Hg|6j?q
z#qPi9g4wZ}+cOPAKYdh#{oD_0JCob at Ab%e0cYbp_Ae*j$@esD^a!!|otqL72;pf-!
z9l^LIakeVul2gb%+Z~&W{ir9W9~kqxw;n<t2Kn{CwWn&GW3e$!m^Y77ZRh`v8URCM
z;D7J0lIPK7?gi<Ynh|B$t4o7UuWZ(SH<Y824ZW!1bi|<_Rhh6Gn-q!OvlD at tUD>S9
z!+t13zV`vV%MwwsmFPw(z{R(&+)HrrB%Y4nLN*d^4B%F)qvsQU$rmQV9ToqKts#1T
zbCI@{uk&5j;IY0wF^yF;{6UtrtvoUh^RXa%QT!9;rQn@`?oReZIu83`Io{6{Hd|W7
z=69ySj at H43HhPzibn$wG4ytst%5xZ80 at m!<3A-9NzA(l4zgzn`oJ7&Ydz}ZariH+A
z7BY|UnsN|FB>tM2v)P^SUmu3QUx)oTfauqYuJPKlz1}M#=NhX+-;gNZo-G;r^K5PM
zMEl;F3r|B=Up0wUuAa>1B^i4+h3Wo?_zS_Cy64-mzJg-|juXEUmvf>c>lpk0M?_y*
z4sHkNa`C8zW0Yk`D%4D8HSaXx+#1c5Ifd0Sr^G08iYn;*Pj#;I$O~N=9D7X at -rk4&
zC`}%6?lT=>crOG$j<}|%QZ|OzhBtidd5{C(E|oc#g6H0`fxHL!!^yp>Xl5*qcRE<t
z788!^zz0Fv`QNW4zJ(W2>%AgdN5{M8nY5_!1H2`2vScmy6wI7sNhdoi<2y}d at QVSr
z>6Sq$$obbc;(Uf6C%m1a!`r)egdbs%ZwGvTJDX<FC7!gVCY=n|`KZzNEQ at Z*Tx)7#
zPODbR+|dgjJd+k2Q)zQw7bx+Jf0qM?PpcJ)Pf#QVfIhwK^2d{!EOd&3S=|8rav0BR
z)|6UwJk;g`-$f<nXsE!7amkR>#h(c`{#zMX``x3!o8)oFOtg1eVBq>?*0{b)6U19a
zh)o9kS0rL%z&m+8OXOKwHP%iBzczVy8hj*P$ThcoB1qwI%*M{VaPwW%l*K)-pf6YO
zz7SUyB1VE*RftXJH;zvoJowqw<m1{VQhV07OMeqsk{skHSy-*<cJd_f at M*zCrwlJ+
z5hK5(h|p0z#IItjYGLU9QW;;TtpvV4M>S4r%A<CCu&)O4dR|c7%45La7CEwg)9|?s
zHp at 27W(g&}2k_?oK-OIH%y3;d+Se$<2H>kH)8t}}g`(|7{)@nu_G<>eGx{fmfg at 6K
z?(Gy|0F{fJf!Z(&uGLXxbR3>H-oMi_Rd!F3&H0w$- at Ek;a at 6uABi|LP<K?%(Ew7SJ
zqKc5Srqb#PmP-sfIc_G)6b19tBvF>RWpy!fw!mW^=eByXCNEaUX4rp@=aYN{FEQGl
zqAeP)i)(abYaoBLO*7usq|YiN^1-(#^ziuvhnug)oT}Y>SEosTxXibx(JOu~@O#y&
zyV9N`HPZ8e=?3Jc4jfGb)@7=0dScc9axN&yox6i+pPeLQ0e$&(|03&+ZRZ@<kS`H0
zLcAv|Gw}#D3-tzeO4>W}PE^W|(+B2by$mWpi<edL%je|bc?dom`QC_0uJ0 at 3TQt*z
zCRUXbFtm5MMRWB#qvrNfW7q{rTW|_ucpB}!mfH{MG`9tYOX>8d+QH}F)?D3LhR>gY
zAMyoxMs}=Ej3n&__=S(TYXf|O+YQdN;Czo#2Lqn(^0cc;#3G6fye1nsfG<~L52+&O
zfO9<eIumqxWe4Q(G3$-w+|U-kB8*9QsP5thiSAxOh}lo;9Mq~GiWRpyuW0izPSc()
z(@d*3AZB-)*!I*|IB<FnujIb)Tvm;ERnwHe(CL%%sC;!1^u-Y9QAH$X<8x=+i<>hi
zLQ~Ht0K<j(*sZ0~&IdZjkpJQ(P~!6z?sJ?g*F!auJOjM?q(2>q=e7xv%M%WMrl_~s
zxrA$SstMQ at lb{$r7%jLKi98~52Aqjl3+2AZp;_6^#eS1ucUEIgB1bc5=gM~IxZn;N
z)L`AXo9vjU<a)2o?gWSBn{Ige#6CafBzTYl8x2omulea3Y*&?2!!++N-NBFb6@@kU
zphiYa0pX%jIiY9G;^I0?(3zF(4&+--t)@n;-<LKeoaJ at lJ?CRR+~$+qe*Mr-Dkq0G
zPB$g}A$?rOW9c|t*DKYww!x2K at V^}#`?n+3yCffqYZH8T;(2sj@<lFZWi{~^K^Aps
zG!DkSgj^q%dhu_Leo<~~D*E!XKm-2U{0KWZi-uQrTE8bc#)0p(6v-D8JN5N`fkZYK
zZzefS1C#QNBW`)}fkDe>?<FC2vGOR!>o~^C$?>S9vRXQR+uQWFWFMJzXL#E(S+MT*
z5XJ+z7w{!j5NtWg`4{9So}*L|=coe5HRS9Z6ze)se>j?P&-khi`z1Je$oGi*0!uRd
z20j;PYkl5E{^?b^Tx^r4c4oLe27e(V=ke<_ll4Zi4IC9}d!N)ox2r2)o2KUkdgMne
z7a at 1Hmxr2B+K}ab+VGR#q>OA3WPx*Rac8|WkKfE9pX9T5I!$65`Cc at qcQLrWCXb^%
zdAk3%zqa+fM}ElijoPq-J_(Y&(t?m>3$;NjRvy6`I4w^XkD|Rv!0NRRZyVGs`XwMg
zD?yN(@xdB5#I#V`tqpaS2Qp??`~N($%b)PSGWJF6n45U$Yt;xfE(dy_e~wn=EZhE8
zu at kz=_#}fwv9MU1_=f{^m7=@|oruAjXF7G at _L+@-fXk9U(CcyhuskD37t$K0n7dPA
z0XF;xk4%ZVz?Dl=C(oD>>rukD^geUaD7A#h`mQFzHWdx at K1_5mytgCBolvx<ei0$n
zQTfCA*1s>g!tDvNg%(zwXug;r)dTBXr_C9^EMDQPRWp=vvy7~Z(CgSIa at i7TT698G
z1p9u~Qvpih9`?Lr7w10$*7OqilMWo=IQx;G5%{IyTzzd)BWc%kTaKDcEs#6DMI8RH
z9~{Y*Nli1CvC0SicrG1t@;+qgc(PF_qtbyRET#<$3Q)r*$4UC~v$oRBOH;Aqh;IzZ
zkqA)=wYF-E%`(EJs;=lWX)<O_@{LIZR$F>3I$>-D*3UR}!d<+k4kPd}mP-shD at uj>
zgD;YG_wa7sMM+*kG4T97$Uk^lo2W>9B^ELYG8#EoM;zDWBhA<!+#U;&o<zPG!94Cv
z7;q|e{$36raB`l++&kHwVxOl-xcD`6?q*ieS%v)H{wTH0z#V0+Y0^tpyYvg&VYDOm
z$eY>4zGgG82nF`LXrRJXvuRcga0jWt8>U?j4d}M1xc2Ps`6bkvkLc<_`ZFu3V=OG}
z*y-;-oViR5J`ub>U~I|>ukVi*ti!KuX|j7$p;t-Fqu}1!$RsY`$P8~Ia(9sauX&mJ
zT0xdE at _az*Yo!6H?-XPW3^eVihI}6PiyTf_wm00|*$kY)TGYiv?0Mxy`c=Yr#$hQP
zc-~CT{z>ENV1pM8wh(G!bGl1c#d`9;bCcimm at i}u+wl8iL47Mbd at Br5$W<&<jf$i7
zdvLtDIa6w;cAm6Azlj%Vh#wm{8Q^YRd1|Cz5jXlA&YwhnNaj%CmkHuM9pD%g)`?ps
z2EqxyvJG*Sh=pB*6X=*1WK;q4m&sa#e+$Q-x18)VB$x0#Z5Zv7;QaKx$LV+xu at R0q
zeTELG#*yo0g^sv8xjaO7yriQN_R9T1<x9`v?>VBE;(k@|rB;g{wt<&V<%CWN-aVC*
z_{m5t)o>m;hk5h>-g~6qJm9a75c%L7BYKg0DeMdQez2bJ6I;`}gv4L)T<x%B^T{65
zQ3XG1Oy at E#E(0H~W0crvyi<I0?{j1y5#flwUPC at dFV6Aolelw2`1uiu?wuT>kGLxD
z2VP{^mM)9Mvk}*eEEcJmK0+<f4+7hhrC`Fu#5P;}SLk7Dvh>m(_~F;UhX~#O%~)X7
zTkIv|d%xG<r)1vj at SE3p-LHq}SCc*jc9TKf_;c*e_Feu_ at ZYss@4{Y$eeaefHd{wy
zdaQT<XhtlmZvfm|G<^4TCG}0-t*i|@x|iiqy1uP>_7#@?22HLz>b^z2eYs+w9y!5X
zzvcuhLyzw|LbchB?7FumQIhw09+zuK_P?(~*GTLmB!@bZ%pVfBfAR(u860!=J8<{F
zR?J$z<196=-w>+lD2tpu@!pHHH*oK>%QT at 1aQCLI{kx>0yTJKSqFI)5f=3_N`~$eN
zDqw4Bxjpu0!nKOH8kZ;Kd4c4Kp-x$*bvPM$s^>Ds^^}T!Pm$mmA<_oN^h9&|J1_;W
z7yHcxcg#+3v at -NzaTVs@j^F*Scl}TN;M`u8XJUwbLSp<CFSVOjoE|U?<$Q{LKjZF-
z4!IsR?#d7|C;78D=g2_q*(#Qq`4`Md_~Rj`NxrSG^)6fKw$gdTxp9Uzu)y~%!v6{`
z*jCht=XeE7!=bauoN_utH6+(W^%KEeU_L2%Hab{jMh;>RzeQW2RA~1j{(Ov{Pp8j_
zjk at nVI;kWyr5Ez1k8wKtn)v(FjmT{-4Ndd8PNiM=?VJhRIs5#t0~43S>4k{H1;<?5
zE|jt9r(o~yApNakRc=p+GWZd_&kk^(rA^mTA5(xQY&*erMMP4lYYZ8|k9Id(kcX*@
zdDd*{WOAM$KL4lY1|Bk;Gd-J_6K2BtY22(P at su$!$6b?fv&3&M;zK8~cE+^N68!6<
z)xuP2Cu%vU7UGD{`$N(+#rV9ReCBe~cKI(5Dp~bH1+_z%#unncZ0j(du at -r2hy0(y
zd&+?<iX<4%&)yR?qwR6KGU+^}U_JFOCx4^Ak9FIYbiT!r{Fwfw<c0b_CfoFPc>J(h
zpT9T{VT|vIqruJlmJo5>2iSX(V~*VH-R+emH~A4I><j4X<nx5BbWe<&F{%`6e;j%*
zi{owZOQ?hc)V|iK(+hDtX#8$^F^&g}-%igJg5S at 0Z3eh7VKc<RPtic;72 at F=aQ|bx
zQ!{n!Q$aO at QshUc^HXJYZXXHW=Jw~DPA#52GDI0)0^UIKIW|HmViw}qUg^JppVrH3
ztD?@^4B&mJke-K*Ehf0cC;dDMt;h#=i}xr-9xUQE(nb=KggzUIzK#JGoPm6*N<PE(
z<ixX0Ig1wV=l91<K2GER_ZC?A=9o>;L7Jr&b{llD9QYMfcpuG2>iy#=1vRXHnb+Iu
zz+9?LK83kdWc?F#Xgys?cWvfdhm)+pU8+rYAuH=Ke~-YX7Q{44yEZcRdsHMJoWSZg
z<er^6kJdezsNHadx7T{Z{{?wErPNNNZh=#b32Eh>g3k7l<EVIhXA?7-->BJR0q*g{
zZfTD^n;NGV;hGv;Lv+UvkuOe9oYT_={?(+t62lj{>K4q&KP2T7-A^(UU+g&g+<Z}g
zudvmzu$!;%olGB5S8}@LOGIDus3C2Ee}KsB$?aca?4I|36LNSe)+`xE1 at ywn9b~=4
z`rIb^Ilg<ETSFDeI=+s}PfR8LfsRVC6Sa|jv-BqzdQMyp;Sda}e=C#N&M6JBPk`lg
zn}v3C>KittSO<(iGwF{!UEPHKsN7zn8{L+P8X#{N at Y*pmASXq7w%B@?j0f2xws+hA
zxuyGeZEB9!LuXnpRgxMjXzSt5s`#Vkec}ph8t<aXSL{Ttp_X}U#fAPo^xm;`IMya3
zCf`@$sz)FjoLbqEPa7gj5f>?*sMio1&~==FJq5fx#&Mx+_+bmihKxZC^n2vBXPrj>
zfKPd>3fy63p8se#L~_-6&3DV)OEEqcJ0%`<{6&<9y$LzYuD#Ha0ek?-o2nsx*R at Zg
z#*)&J at s!FsdM1}&=YRX4C)v+JoQNf}&^v#kJ9%BGeYTbO8 at 4VN@1eY?7xtf8&+L=`
z9d&o8Na<86$C{!oSgP|ig)CnU+;w(S#~qI|-#Y?MBR8pCQZ6diHo2!uCvRj5zm)~f
zG%RYil`U$VX#WoV6|W1v+=Y(zQ0#{>le!I^({h#zG<-$OWcd|pZpc8yRsPN1NvIjk
z12&S$S&q618N8!JUP3?lk<>wjE!xP*e_f}_&7;rCw*XtCV~@LeVE;SqyG>|ke<b$<
z_o<o05S?tCHm4so2GiCfzeL(-O<B}vyRP1QAM^Qy#UsN`NiB|}(k4pRJFRkXVvjpT
z-Lek8d&riD{bRYb`*- at n94<%7i1AhQKKFHbXOr6>Jc{IKUoLa42}uuX-G77F{r_;W
z`!H8dxwAVuRa3UqsHv!595FI69zW8)yq;azi_Tl`b_TjV%{#Sl8LLQF{t5gmWZo|d
zg?}K={vz~-2KCh&HFJwB_Ye=?O}_KX1P`GOzMwqh)-J=}kJzJ|_!j9r<PYg!tE}TI
zdl$e~I`0<0 at H}ju$;XTR7*)-R1^sm`J+y%y|8(t&sD6_y<2j?O$Fo9~5nzyA_TPnh
z{ob4w*gl)I-+MHGCp8Xou<?OBI#xsEj(72%!)Ge^yW_GKT2T9Yw|`u=_xd3FqUeM@
zhj6|&E(hm}tiw{GSFM9TlwdG{F*BeBG^yLct?v#ga%sc*=kJu*`!vOw3t7zd1>w4r
zHrPliVG4U#SjO&LWq{wF_}c5^gXFq+H|hxcf_ATHm$@aX(Y(UNUv6nxk=I`dj(Kom
ztImkm*$yUk+t#R6(`!VC>B3%XUHPLUT%ZZjWBs+N8>iMt^G>8bxE_8G=oP9nag1XP
zuW at h7M$5#z8H5erY3=t^*s7 at l!b{<5AJ-cN+oAtBb5N6=M%*)Jc}#N%>ix*yr_P6@
zc3j0CG3%Tev5A+QmZkIy-M~;x=BLK2U6sO4!`>Z^`Tr<tw=9G#Q{p>!=$9d!pYL<=
z%W~Mb!r8Ffs&IW7J0`56G?I;XwS`6Qd3FnQh04BMdbj%_yT#oMov~GZ)f at HxPH9l{
zBE#*26?+EiqsW+tk4Ae+M^6Y!$u;o3yvKdNTpBUjNNhN7d04*>GgcdF9&O?Epg-`*
zcIM`M03JSzG=j)u at _mTz^{brh42(`NTX+|-M#F``90;2!O?GUkd8}4bFw?-Er4<_e
zbc2s#!uRnr_ at m%I2Y&{54s({boTFpazV7FwDp6I;6vR2c;veL(#b0rLl6#T at Hgjwz
z*N5<sy#XZ-%^Zzn?*iE2z&st1m+|XLn~omPG)}J#oqPiFnD`6isV==eJ64{8 at 0nu<
zG^o7^|1Rnpa(3z-S>SWkExCMfr(j+OVqR<gO%t~3Bb at E(hcSPX8}olkd!z+yg7hkt
zKvx2fr5l_@>?nfGvX?}=H`h$agReAY{04$MeoxNnz>s6a{+(geoI7q>QzZXDb{Tl?
zcSrL*PV!TGr?>qg?Y5c7`<JymTn&B>qpR<$bUvqTc5uBcn_VQ$k52e{H@>UkWQ-+5
zFTE;HfIJBlR7(s*j*1Fh?-(-d2rvb at KILdF!;E<WQ%m0W^5}&23LIbL_RU!i4cP-=
zx8r#nM{%7D`H7WMGkG>V*Zzrl{R=okyW}4rzu at GlQsj3)$BKCiwSk$Oje=aXLH60V
zxb`=$*xO$r9zgy?Gx$52!N<qdxLWjYaK_%CK85{)Is}(8L)t7QtB$Y>EXXrMp6)f5
z9`Qh)!k7PVycaF@={M!e>52E{T`NbOMDQAegHZJY>dB|U7tkii4DY>9;(m{Siyywq
z5%T$Zc<%r?{t#}olViU`2F{bfM;p2EukoKPuYf+a+`loTe5eHLYu1Cj2d4sD2L!8f
z0(=R1{<EcR7ZZfHs3U0`&p7FE!AbjK)Plvn6Jnu&5Qv!~Y2f at nJKgHV*Fr{yN+6FS
z*@}2Qa$&tkbb_vsa!W}^*&L<oIi)4GVqDiYR1yn6xv0H2Qf?5GIc(&;%=uW-fId1s
ziZWKO_+(%=xIcEzDfUgjdni2hq7vgfMQ+4CZ$RI#u$4K>)u`>KPER|B=XjCM$XPZy
zUEaUN!$vTU at VfwS_PBj9{4Va?-1Q+fSt09*KADl@<<X27P!k;o-D6bj<o8nz;A_{;
zOr at R*zusHgW_&~ua;v%InBhbZ{kT9|`uUrA*E|DI!{bB~{kYf(U0%!C(Cy$+v8-qS
zKbDT~9kZYx7 at 8+H(iJ(Mqh7!ORXkv5xd85p{6srjfE?E19D7V79XB`MIxNU{<nwxk
zsO1;#b*U%(sjl47s;SksU9!hLs#ks=b(2y>87NhD?9{!sT<}|^5E~|01AW&QSOo>y
zpT}N?O|I)*+X?PTj_b3Sck25TtcleDdEi%3fupa2F6+eqf`VPZ)JvLQDyFYf_Yr^p
zJGeqy=<k3zu={P<RW4Y)OD|XzreG67Z^0LI^RFQ6N8N9;k9KN5t8%UevxrU*=X}Lg
z7wh4i0n`_#nNO9x)8J!~jqA2AkS~IqDU;5vi+_DC_P%ZM6j|k!^3~(~w2B1ip|25~
z7xprjzqX6LkdwCkhq^+IufX8{v-O%tA-u(UhU%v}v#R;E;KWW3Yhd$*BkWnKyjR95
z*k-!+(N at z;|0MPGf~L-lFaEeXOVm)O+5QZ**XQq!Zp5})R at dM@&vxtsM>f$r+My3M
z^v<H%dZ*d{iF{D-a}zrPa|ZJTYc^0?G9F9?woVtU1TQ+)C- at P%IDUj{E`9{+SAK+)
zorDwNtpkJ~Aw|J`t|a^jC1+sAdAJ`Xau3|@TEtriNxYR$c!G#e;a+sYNH4Dk`*0<&
zMy$|rF at fZ3Cfo~s!`iQP^4AR&Qfc(<nf>5GspK_{R^hu2L9sPeQ|aErLvAPHwW$Zj
zwaJ8!UaS0A7nQ%di&cag4>MWi$amV$yGZq4%4^NU at 7l%dS~8Ow>_gyG$aKZ+Av6DC
z?FWbH<p(?rcXA021AIv9NZ!Y1>k0P)Y~Ux+j^bh->`o8Zolodr0q;t~W+B!>i~fba
z47zsn3C`aDTs(&b*K+Z71J(e1C7e$x3T>{%ALl!PzS7p1zJZaHmlkX5AfNuINPJxT
zzM}CV@=WOKdBhwB#kErL5cKlirG?oZ$aBKHGsngTEc=3y@}S?Cq2HJ{Yot>s74bu@
zn#>kqe|WmBW=<*Q{M1f^`gRaFCLl+&wz4_J#J(A*h*O2t9Zhi7#?Sq}$p3nObBl}y
zZ<xOk{4gH^KU*%FwY(y!iSQ=cb|*E#e^E)|aW<Tr_?*##_xj7L;#zV~y3(USo(5cj
zR9q`hMZ8QbuEQMr*0<vJ?M_2!@mQ>nJIRYT6F!OlGfuuyogYv`e0^_aaW>Q**ELOE
zkfRl7gV<9dl8bindQklzDmkoMS-1#$)uCYBP&bEbUx;=6(_;_zlcms?;ENiXp&BQ?
z9cpckU6dPspt}bCje3U$HfMz<@3<+n2za+D66+0IlWY{VBc7 at y`@@Mqeg)CrMH=v<
zr*rogLuQzJCqb49EEatKS at azEMpTgh9ys>kI1RZ|*vnwY-GHndNH(^llAI~=5)%JL
zJ}tMmI5gTOH!s}ZsL4w!3&{k=iJbq5(^G1ajn0RYn$#n|`iZ-Tw-NvPAPawR9)(<P
zTh%Iu_8y%<7Y`K7Dq9hnrN at zQkZq47xZS@<Z(=`oaDHl6Ek5F>)?tq5;HNg9R3$<O
zxHeVuRr5YgRhFTpqFLwi(>pYpilVE&lq4;D1a<~*bT^xo6F5gX+Ju at aX>zU20PZ$}
zuLo at Sz>rbt)$CaIc+T at r;5*Eta&=>nNv)EfE6spzl%c5&y_6k`clHwT+roAz3qNGv
z&-v&P>*DpokJm(_ma^MI`50m%(oX2o at Y6H1;HP&7Z|lR=+b&^GDK2(~{HWbBsbFLS
z$(t&zgkDyG`h_81H^3L4b}<3Ic$a^lJfmwJga#;LR3T{*Dq9V=&y#nU>#$vF;(rQ0
z-0uemFc&POmWA^z^hfXPUP?bT7jcPF?2|3witYw7Z^wj!9D2&CJ>dJ<6 at L924Zf4R
z-sut*__506M}Q63Bq$8O-mL+i`6u`W4s{qgOz?Tcwv!<j=Z@%+>)DPN`T^)J!_->-
zl-`Fp{oydBGLzU^mH67sRQ7e))hsX$TG}LS#2OjITzHhkkkL=%P@<oIf<ECX)6OD#
z#bv}l4omyO&D|NpMQhyf{Qv!qQ`=RpzDk{rHR$Iz_+6Xpp7zBe8T60o{3$UH&FrFH
z|GI+n?M>g+fxPIpjf}jC)J^0y*ierM^Z6yhGap<Q;f?-f4R8Cu+^?%$h2Q7z>X3dx
zYR{gIb5}an!KYz(^P^%4dA;EGL~X`Kw39%`xo4xkB6#J&zjvV1$**>%PJeaqp!dg`
zbYUu~#rVZVl1JXEBi#GY)eM6H-<L>B>1@;=59aK-jHZToU8e!IlakjcJ%_rsXW7o+
zn6F>3G{rvynQtdLC&{tk<jX$D7khji{AA#yc7Gu2vL<BR^zhz`z+fBBcUBSXj^Vrw
zSmYnQ;_Dn<&~uj0fuG{pnU*5)Jm?OS;p4~qd3Lg;=v}-|(w>IHdfnc`yST8OEe-Fw
z_?N)v4X97%swZRlBZ&uZ;K4VV=$5G{NMlHh)$jfYa+-zhz<`wrO3A(9OWFg!WGRQ|
zsU|THvbXV?Le1=Y%KT1`MAw(9)zcZDdaS7Iufx%8MO}YAz2VbkS#k6?%Sz#!NbWaz
z0>9uHZL9SBtF6j20)9*<KNt6-b{tQu*ul)~4h7yDy4{GHSpYr(JnPTI_XxT9(K`d+
zA(%7qy^YsvLN3pg{Up}G9w+e(jOjdw7yKPFV0XR`UI$%F1mv`glhb?2ehu9od4|YY
z0Y4)(AGLblIC99TUrMhSAJ`|`Iip(EG^0v77M|0+YuG;^6ZsrFXV&AH71V{gyW2x0
z5%1<jMM}~Kz!wmn+NH(XnI}I2A6gsq)nnivuux)p5z)7$5h0e2tM-dTXWa>(Kqrpz
z>FD2F$mPkL?KoklkvRZf2gGpvoY+&LtFrU>`B<OJ*peJ?jRW>mjC6i<Le7+T&tVSa
z at 3M<^h&3wd1L_R-8jr%)b-ilnd52N|;11$3$;dhV0Ow$z9xqu{-pe39{nhPq!mA2d
z;X9%8M`E8T5T&60#h&oqOS12eElVeDz^Aeoc9eR;7Ft03U0CB=a9z6a6Xf`U{|~+~
zC4G^1O85^pchx2~_tCkO(pCXqTMlJ&^v48BuA<IK(*gy)D~69sNmmPUqpm<tEu;Rx
zFK4SeGr{{N!&=5?`KtnQf9NaV at hFAQsK0mZnI_G-PScvyRdzN2eFBE~={=TA*iJm;
zo)fvUL^>~r2YJ?eQES^Xan3tNEOFU{@Jp&?eKnmuZnJr(u>X0S*$=<$6=HW#_w18?
zvj;gp>T>^}2lg`F%_#RS262zO%xb<<lh<hi<`7&H^e*H>yo!5~{8#YBHB?aA`s>8z
z0~Yc+a$~yO3+($l2WS&~dR4qrrYiSF$hB$w0U0!V-YNS$u{$`Uaa1In at evhg?h<I>
zKlKWZUHD69l%OCpKdBIW{x&>Qo`djMMT$)rb6|tti|XXYR*_KSk9?SFs>N{^?GJe%
z-+A*{n}LkG_!ORnaa&LHwm611B3H{GC>${gN=AT1k=F<m;PW2D*a1^2_}nF%s{T%L
z)d?PUSEc|sHQ1l;qSgiMPwZPRf5AF}>4Hq38`Fe20bS+HG=62AhQnG^xxO1;HLp;Z
z2OC)*Gr7~a5!|aJr=G3I@#i&we-e8Z75S65tYuO&=U2``EwXfeO^AWx<g7tWr-Ah)
zjtqI at j9BS-aLg~)$(}P6x(w<HAa4_U68x--ei6^hN!=FXNTTz{LRS<BJJ=HVg|5La
ze^S~u#Hjy9{8*gM5F60m!2pMmf$t{#!n}*dtMHGR*0ihZLsPrUJl_TfRT|{QTFT7+
zsJ))Gfj$#ZD9ohN<vURu>7;Lg^OvX=`{yBfB7N^Y*vb~*!qdQA&InELGgpv(j>O7+
zCI`n#%Q|+0YlZCHH#q$Z99fEj%;kbca9}mLY+Vnf{0in6(Fp at xd*qm%U<{kbI%~lR
zRgZi<aM`*MPMk`oa$`H;iD`B|u+h)#Lw(+I&$UDcxUyGpHoWUJ_$3TIoh|a)L>CEf
zzl1$~rO}$|UJQG^+hwmuT!q}5;;S<BfbWZ|oinkXZ(0XEH``ii!&u~s@&1E-N5QMp
zloJ%<TkM>vaoOM9C8Q1c6=FY0|3%sX7c*-1ER~GBMitAk=X_o0xz=G at 5el1L6j*!n
z#DD>{6H|Z1r1brUNg=;m{u;(2%V9(8(|AH*(O?~mq}yyY at eKS1^BilWh!YF)EP9;x
z7GKkCAoHX<7dkF8Z4_K`2M}*crD7w}*dD~$Vugz6$grL4G$-OaPc1vslpS}5$&N2&
z0)lb;0Dl|t_kJl;#=~(#X};QwV?wE_9XXTPA99>lTzjQu1Ph3GT|!@Fc3kNJ{uEz+
zL|RYK!qn)<g}Uf<VLDkKj^X%w3x5&#L;MTzK_hg*gfP{A^e2$?XCZH*KkG}G#RqV|
zU;9J)GI4KRbR_agne4dV{SVIRiT?{swJpr7P{iPRH*4fAIQDEVBzqrtA>Dw_Ot`QC
z^-r~%y9pNS!QKmOfIZZFwRp9jO#v>fNOgf=zNJimHS(k)H5n44CL_n-+a=LO=OM0`
zWvfShs2a%sB9WHEdG7JZ<7%ev0nVU)6R at h?#T*CxW at 7W*w85t5j@<K?C2PPtm;rpm
zu)dbWf>Ea%d{%BZTyuENcfivbw3m_V8=dVLS895`?>N71Lwd7CZUB~j9C)hR(}Og(
z-3%I4kV&4==mqZD-H<m=VBbISLT<4{b6a9ura=A)xDq;Tz~JSF^|y at DU-{@pEj+?&
zk9t0k!CkBtd3sJa{e-Rg3#rvIVUPb3oxt%SAa*c5h3g+|0m$?}`Hdm(j6p4C=5b*4
z+{wAK;ysQZ{Jl+2_f at 6=*Yvy>*RNmuB>en^d`SS6*}ofk-!b5K3 at +t3^&k4Hre~f3
zdi?c>$0>U^I7q!mto_IVpTa7P?~CWD|Kh(udd`QDn%6Rt2I(YeH(Ml$Tb<`fg8!kP
z$`%Iqs_+b at f_S!6_>b;l;hgUO#o7DEHC69_;Q1p`R-^opDRqq>lL{+flBwAb)Qlz<
z5f{n{SCDzbxK>Kun{{Oy1LdS+V`l@#fNgBZ0D%ppR6;?sAoC}nEXT$~Qlml`+%)t1
ze4k<0?&sdm=llKsvB&#;-sin at -sk=E_4D~EseI<~X?}r}3g^(*ei3IZL|#m6 at rM{9
zTc!LvdxOg9Z&y?yJs{9fS at iQh9RnZp^M+*F()LQ~A(S@?)KnJ1$Qx?b>QVLxFd9AM
z5O*5;%T2##ue`u7!lLT at p{H+iC3y7T#@<n0Vp=y!up<7|hq20E8j1d8bct8zUzDs&
z{d$D>u?FX1eWnhNAO>?5XlH#;Zd^+XY?r?xykT3XhqY1ffUeam2Vlo$)0Ck;k*Blw
zqpBg72z~XDWk?tB3z4J1mc3 at omc4jL6L6U=%L+0<PIWh%-yH-yG&_&v<zEEV#VXrb
z`HTEu5RE)*`!3%Rv<rCzaYmh;LD|SJVDr0!3Xu2yS00pyd;nXXcjtGu$5E#Q4C$-M
z=%)#Ll*vC%xdS`PO8jlbH}9%Jxz8QgS*2?-ql61t%q{t3*fH*JXV>p!!)C;MB=l-u
zUeGM>+CluHr-<L at J5FvP@^eZ4lz<D{B5(fC0pg$f&oJmBU>8aLhxIMNS}I-hV12D8
zWsUaj?8e&l*|pU>ljZNlyz;7z$`S~vtncsRj~;eLFD{6Pjwxze(XjULx#!mYoLIfq
zdA_e`>WW{Bq&ey>t7c_n1TO09)h}4;zDzd`uZruqdMHADc`E-Dl~J}{+`DMBSF&JY
z??G<G)ziRmPhRwzo1r%huUd4y*Bl>tbsXPBtt?xA^*HVYE_%>SuSgTO?7SpjLYK*x
zta$h8(TD~T%fe4e$#nCx-}2kS-_=$X-$6-Bn+FCWvat_b)B)@HQ`qI%;<-9p|DZ$M
zD`KZ-qhQxJ9{!=@vA34O?&Wkiv2*FeUV}XhHZ|3=N}$*L{r}j%E+P(UCdVEFza3&j
zctXXo!w#;R$Q{8mIQ(U!*q=E2;hO_L$WR;f9>Bj)IYbRnNs*OadnoX^t5TSD%;8I?
zQW$ck)qemRcj)0*zu;$5TG|!iwUs{>$TSsGWQYZx30)ub<jT~(<`mfKJ{nYKNNJI0
z_%u3d!>14Sg0`RQ(=E^1d>XullI1mE(<M%4^_x*P*yBF?T}lgdLz$I*{W&G)K&#E|
zFDyBacLK+P;9O%rz3iHcJZu($z1*0S5j5p at d;69fL{9}e<hh?oDt88PUD}|@un+w<
zZecqsBkm=9_f`0wH^Lr&kN9S2dAJ_3XN^m{tqb<gGT1-MGJyF+?4Ntz;5M`V6DH_n
zAqVR_&TVAz5gLj72behvQ0GtK&l7nq$8estv0-hP4d^c+w}3W at M@fv9OQNy*z$)wg
ztCt?^T?v^QYp?oT>d+%16?`pnqxIU7&g;M;>n1W4D%~}hSdV>DL%$)8^sQZeG~ph*
z3Ua at E(4x?9p>H1Y&w~uWAWO-HeKOu5q0WGgxSz<+2wu|<a`D}v&0;@}iG7zp{6MAT
z9{LASd+myWHzL$@CgdkFU=8&tQ`<dg8%^xJpF82wqOBYIuc&?_J|<&revhQocTq`U
z0dZ~Z1gAdr2ab|ikb^#LMO+@@+du<XZ!7nkSon3wC7QbhY#hVq;?eE`hZ}8lf)__f
zS>WZ|oK()e04&cc$RSR4dWe1+7!HZw4a6-x|Cvj>IDyC<TlPjYA$__<yv#Wuj%Z-%
z!$sVkgjVcrWc9-Lx+aGQw(lW&Iq>)Q&B}!zT7I at P`Jpi#)Ita1%YwhT*P+L^?19`7
zb|tPO=)d`Be=p>lrV!z>alt~z+n5(CxvznbexH>G6P#f9#YC2wbi{A|Vel|NzbVon
z=9LE6dQb4mOybtc at N<L~nH&Q;1p8R}J~B@|dFkG`4GjEsa2{TWhW)&btXs}OtTPM2
zgIU_qDG}wm4udZ)CwMKufG~7s3{>%p2P*k_117!}^3XyD{H5>O%he57BXk3`5enHs
z;Fjw}1doA@#q2r^yZ8DLPg^aqOTzm76n+=0d>Z7&>1wAR=Jj0i4%q9#$A|2-q89u5
zqvc_{;WIF8G%)NR^3w2;(ZKM#6Abny(gt8hR3o41&71m=*Rgb!Fk~3(8F8#{-39pq
z^WXw}C$Zx=eHQYM;J1hm;e!$4i=5i*x8Z-M{$@Y7Dek1b(AfmJd=@YW!K<L&g3<A8
z`q=1r($4AX!A7oZu%1h3^8=j{;=?x;zH?zT_%)oLVV}#fCJCMm!76*YJft4&FQlU&
z+iU60I$njd`g7ukAC^aC#ZIhC!VevKG-Mv$6*4-3yemA7 at SaZ0O>*!1mqX^cGQ(bn
zO?|`sYJyAlOD)+~Tyr72Avh7aJ`EUGovd^*>;m~}=jXTk**mTuCio+Uyg3;%#5`hC
z5#7>Se0;Bnaa4Px81r3|_J-G5o+=obS}`4RZ^CbA)ts^z`1Rx20h<^vZHWE*8Fv33
zhiAP(Y*6LKpoL`5CD-lc at TW1@#}ynT-wwYMA!IvM<~QY%^bV6dy_1YbJ8b4cbNqo@
z&Q;?-ZxVZQ%-c8QhM+&)eiwXu2oLl|d)Dpef$s&5kLo1x<zW43>hCMvwuAVMz&}hk
z$%cDp*n7mMrv6 at XZ_Lle)3A95+OG4r&?e5cZ6}}~$bqh)!1zx#-+=U+0<~6Vw`~5V
zSsbkwSUI|QtAJ?|vseN5fEEVEu3d^V>z+#3u`j9g((dG2h at B?-RdF12`|t;055o6S
zDi9-XvGhEX248wlL&^kOy>=wXA|LTXY%M<n{4(cZJb*n)9}Io)mLBw32k-(w2ZAnR
zoPK0H+4qiP?E;^{95LL0Z33SE7qS-cox5&hcx`ilmUt1^WdwsN+Gg=-fFFWB7Jg2H
zSHk}8j1I_mR3$TV6EGxx0wzV7h|qO$w(q%WXEck`KroNO2`!RtNjVN13e34c9&Aiv
zFelUQ<EESd->M5WE7K;<Aoovz_UoQG(8xa!XE{moKLT4z8)t9~0`E!J-a_ym@)+L<
z_&vW^>7c>ylIt^w;ex&3Zj%2+teZ&EWB5HL*3Be&V1_(I(ro+!$@`Gr%3jZr at +EPW
zL*zY&2fo0*asaq6r*Q8Zv2Hr4GazQBk at QG_7InUfvk<*`_XWrwYu$Ury2r^qotSxy
zq$2 at h+&dj-xk>7rMjhL-xbB)b%T)G1DC>kQ2YR3ArA1HTJivcAv&5cBEM1NKH`^5O
zS00nM**E!pN$I?D39M5?MG9g>BSsM at q(A5lh;K<r!!gXqr-|(b`q59v&9!C_Il@%<
zr=3d`Sho|u3-~IwVZVeeQbm&*_HBfJ at jQulKL^Z1-x}=6dg$IB5ov875n9uv1`WQA
z(wC(Slme&Z5%J9c(%zZkn_(oKo(!24VvXqSAw<@Mx{FYE1J=DVuEhfy{vs)(<khJA
zuy>3FWhviQmLj%7VX_w3YxTB&ZW7vlAviDgQS2#9d!=|7wj{t4W6u=G`NIBzb5sW#
z${-!^<0kEapJS_i6Z|97Z2KW+dTq=u%V3}CFp+1&_PrNlyE+;ELq7F`rFeIsGWl8|
z;`NX=pBj5F-q~LIh?T5;y!*RBBkq0cal?jWU_veGW8ZGIhWpEn;j84ODKX%q25FO5
zzV0x4pJDwa<pjq{ooP1Ag3l%Df)4jw#dAi9`~@`QS5qNRwcFvp^;h_Hz00;Yfo<>G
zWL?-kLY?dWd&ru*KE$npj_<k^v1Neil<&y?S36rj<l5v_IL|A%^1*WMuED)r$ehl7
zGic*x4_a|H)N!@s{lE!NvH at Qo^i`hKAcCETf8p)3!LbMH6Mn$0E5rWbSVjCY?P}-=
zRalooI(fqp(3<5et(hynN!AVLnZ?W8 at SnX;A-*}DT(>eKoJekAT-&!~On- at MYb9x0
zT+7!aosA#t0879dW1sn%8oU+cbGl)3%3<Kf<li#Vnk}!vPp?eeF$*$9GA at uQmO;M!
z26-0NgNd_;{Fk*;`cjwX(_w>;flqZxE^y2o at aZLf1%Hrpcm9MuR>JP9YU4jQb$b07
z()MAjmfA)zw$N+f`7<2FN(Pu2!1MjXI}ST)@h-3bPdEJ~!PwzS|E-Rlv;+E}+x3o;
zdNyDzu(t4Qd_Twzl=c$x99Bm?6qDH58<qkZ;92;NH;_G#%x~UV6VAyy_rAI1WKID)
zBF*nptU059K4K3l+5ORo at xglZUz@TEa=2vMb?@HAnYK8~Er&c4W8o`XT;zs*+T`C5
z)4iP0_!gi{C1$uIBn}M5YBH`r1x-Zi$`==qJ&}x|Zw+Exllw0te^96$&@*rQHY2~E
z-2-<F9K^oYDAqkd>QIY!yQ{>^6!Jgd173SN1vUoBg}_Rz$C$l4 at P$YLxoI-V$60<O
zbKoCjuXCI5tPEh(#p4->bNwWF)<<GpD at m8(_hNDhd4_jAPtCObV)t+^id4r<$(XNX
z%t97B6v>E_8n(OPBQEy;bB$R4N^iYK@*RcPAJ&RJG{yGM8?21i#(j%TA&2 at f(H}fa
zxIccYB9EBU21~g`-<Se)WBZu~bgshd<Dc>+Z2n-+4LhzLV&?{#>a%Fyd~f^MJ*m|0
z&#r4DcW+c;_q at 76@P;-bdpuoWHGxNzl0HfK)^!?t=4tL1<Ug&sm=gwjajbO)BZ41W
z!5%FGy{)3X#;)RMaBl5Mkz!o)tiNn7vF;(y at Hyw47E{<-pYpB6`KPRAiEk#s>X92C
z(OGex5}Iwa3GKT2d!Ka5jmb*K4)WfqL^sQDDoSL>5JMg^+!BF-(gJr*Ya4|9 at _&3^
zvXb;a<j^6oZJH-HamBze%f>TFY}x`xjrSaHx56LZG`44yhVAy^iX)~aVyt0Zy+?4q
zS^oAT==eVO(oT499-(n(ya^rv>lXB(40FT-?34ZR!nJ>Qs=b()M#EO7-0%*5BqhJi
z_}yR%4BHr^LC6sOf$ax&4I`%Qqmd3Xp}|wu at yc$Lw->BGb6iVwA7Nj#Yc at 5+?LTRT
z4y7<nLdoJJ&{tb;7Q|V9D4`_5Zw@#k5c_RZ5x4(Ry{iR$PuQ%Ty!!NK+YS(%==4QV
z!iWY(9rjvt3Ijf)*gG${tRFmV(B8#9nhc#~>c}_iPafZS+h+f^tzFMP4(v4XZXIk;
zLq&!S80(qJF~7JZzR}L;no1gA6QJUd at xQI7Kzt)&W9 at 2zZ`KJVbJrBYBf$PUmEaX^
zD|Pm52G*1P5yUozf0%y(;Ui{z4h-jKqG`~s$=KsBIrN0yP3gvZYefIXd;3>({&xSq
ziAX at 3@ryN>kh)aMj3!k&t}6}Ra&j-5&9}1kym{|Ep;4w18l@`R5W$V>X|(-J((^RV
z$z-%gGKOt9F7{|J<55NH2+#lP&;G@*Z5(I&IoQ9_7 at f5CaL?A6E%sfuy%<OKIqf>{
zb8aZW6GnK?s=58_IRDI!GjJ*c7C4%f$-jLG`nxja7-$4tXgL{oZh@`F2YO8Z0+*Wj
zs03Va{yFR)gB4z$$DzkQk><$@5)hd&)`=6c5-rwakuuq>Bs9#>#{@@1tmW#*-fR4~
z_x3qtuxWcHCD9>H$;aB1$@h4lP3k)iuw{AjN-p;Gz^eqS=GR7czGxh=tbQR+zBeTi
zYiYt at Dc0(B_ at V248piNih2Ysw##`4i#(u2RXNdfW(AkH|@vK?ojJt=lxovU28@>>J
z`^RXM7L<X0B{VB&8Lw=45cp?3gk}#YvTa8B54i5~@?<w3Nzq_$W`Ji~KX&#(e;=Sg
zTa$17iS5tBcl75S{2JSDI^P`9Xa03j!spodCP4xg>$S at 9xn~IU(9H?eco#4xz$dF*
z>qVa0&7gzIaL&W0+xDZsj>x>4hPjGC$Z>xD2;X0d?+;|pKOyi|zWQBmAq)oYE3tnm
zsNYnPa^!2%*tc!O_iWiVGg^AA_^_<ULsx7|Bs8xsEn4)Iq~|DI0eiB_XkLMQMT^ek
zt6<K;F3WPKe=9fN`s1u(=+!g*rHPNhcPZ1qCD9-DCB%+5d!U?;J^MU4qeAd|D$ek=
zF3!TzFK%4V!CuIRPVVO99iE|di!#~66{!a$Z=R1zde;M4iwU$8=xCPz%0%4+vKBz&
z0tb`GW2P3#;cK~z4j|8e7_yoac`3QZHwCe_JMeGT!X6G-_cdbAta?1(fw3ZV^GSQ(
zpcVDL0X?2DMvt!qJ-!O`_=;o|p{-j5(AC{Pb+eZS=R+ro|MxvyIatL#7S}QeI at p<J
z{hX!q-yWmAAwTzk&cE2h*3Emkbg-IRfpg+0rvh`3^kWVBv4OKw1fSkm19$@i at E4%(
zj%#VtMG1MIdB2xi?|mos(3U|w&*^=4rAX;$1fI%D&~xQt4-d5Zyhg}xgmd13oh|&<
z&llqvz^c12PQG_+jRI#M^KsqnH6h3T1wQZy_(1T9k1qfpxYV%&G^sE+!a79GL*T=U
zVV`E{Zio^-_AO|DodmOWaFQ~4WUY73|JG0De9B?=tgL)QX(e&dG5>&Lo@<59+WGnV
zrK5pl%vhU`H1N>aL&6H7^I?e22Yz3=%1fej at aP@JOTZ(!1Yd*R&8Kz*zRCK|dxn!A
zAwH#*3UNQd({cR-tm4Ptdf26gzo`bkRGM%u+Lz~iO_|(xlIY*J&6sSp&+q&xt;6W{
zV(t)nj^N(_52=JRXxDQTcEgzN^heiUwVjBChd2i;)=lJSZ~u<$;{?}s&9u6jgtK)|
z_l(fD>9zBSr%?vHDzYE+1Ys@{p4i?MXJB<C7YV<(BXomeND=^@$cB=kF9?RuhT at _9
zME|j&U}#^7iKF!CXxtxE2;B$Kn^X+#DKUjwftg!^xLnE`Vw6>mwe1Yza+yN+v$)@|
zKcx!6`<y|Y3gG>qjp&COq006&*8qQI*mfig*FJ^4pdWT8edIoHX6dO1aZlD96g|4H
zQaBvP1k3ga{yxt$d*&wSuGEBA%r51szbQ>n6*##msLQ at X+VaLMugwIv2=a|$=yd;t
zv;Xx?dvDy&_J4J9zBqGnquUgdORX|J4xGJx?#eOUOCPZh1s at dxJ#S&V0=|jG(N1YG
z?6R$}KP(`zSYhv&-P%N}b{EoRyNkJnlyO}Hm4`SFdr+2xvfbQVltGfcPTwR>>mb;j
zoQm)h1r1V}uOWOAv0L at ZVgfHChN_KVhcsp4{O%Qn3$C4z7JdD~BKoBmwYyBVVK|Pj
zkUs!B9>1vBp@=6b_E~XIcld?6UQ<GWzn;phRtnV)>+%uZ)x}nKnYP2fx4o0Laf{X(
z%HH(ePf$w(x0oh}Q)+>ETTzto<LFSt+y#9hiHFQ5dxsl1FUr)%A6F(<@ncl&W!dX}
z4G{|0V!YER7t=}M_2mU2LSA$5%&QW97Se~1W+L at RT8MNO(tM<MBP|AR$RT!21PlF6
zY;@*5V3ZE<cZ?c at XLS+&z#wU7XluWEUJEr0ezAC7OP}^-v)eP?)<>tGh79w0$nfsh
zdL95Cm+F2ZPX$JIHNV44qa>`qjnVC2f2=X+Q^bO~s5ut at YcpiMuf#ZZ^ylaQm1{-*
zMF;%o^WWpbxA2uj$3f)Nxx0~H=h%<@hujS0mpb5=pZ_km5cwqz;G*XLg<y}q at -o3F
z&;J1NFKS*{!#6mf%V{ofZ- at rH>KU58&9iaNjz@}k2S at 7VhDH0`H9-^P$=p0#H(cGt
z&mDS_$RfEKnw3X}bb!V>L?<WK_v&LxMw3}zMcMqGSK at eOsyf)!sw2Nsk+_U6A*N%0
zyT0%0Qp4hSU_ZXi`H^2Ndus(x-me{*ke;x*XbSAQk})=E?n`;VhMh9J;$5i;7}0w4
zn}pcc^8}&UcHl$CGrCgfHd+&hb9#lE-IBh%sYj{e*^A-l{h~7YI!`-}E_=9`$;bX{
z5v`3o-K}JbA%}ejKH7glyjRF^KkEcWPa5>c68i+;v-B0+4{R7S>~YLt$(|?S*E$cr
zYZWV^3Ow3+fu*2+qeVL}$gI8OwrImbUe;c!dRrSd!>s*ziuuWD%O0>RqJ&R;fNvay
zjw@{{a6S%zC-Hn2sv2EFWU^>e34Gp at f{(T9v(+5f!|}>_Ns!Zx*=NT$xi)y`m9t1J
zJ5V0}Tqpd#W%_J}0}Os|8R(ue5_h><$(9pbelib<U0q9JhuoN0k2aL#v_LkQN(p%y
z-lJcYdz_vJL>@;&IPAW}x&!-^ninIds^u+Y4hU9&j{ED-mZ{j=?9=5haTQ2~@|XLx
ziE4L8h at qtLs)1+ajXtwWVE9tuNeVw94-_BuHJ5a7TEZ&htQ%p!Vv2)r!kNf}IlH78
zZkfgqb8WbqtHbr at eCu*X-b=2v%q+9#%=B%G=NDyZyEa)OfK8)ij_LzGhaIAf^F(lA
z)1I`4A>*FX>Iu8z2VIS;1Xw&xedk6$5;F&6;QimmSY3)=CB3LUHlg>EW`4#gMknK)
zuHM-sQyIb+iVQ~>;1dDkDZII={WfmVaZSu`XHz|W^s&q&EmKm;%@Jg at c2w8KSUr88
zWTjb`GOqjN%rpb<bWAnyj&^)95!glyu%Vc7rMl07gH=B<iP&(&Yxo(5nV7mzMj%<K
z5m?VCoEJ_2_XF$uh}Ps|?%zA_h))}lZM+-Ne@=D34}6^9_t28)ksA`vMhQbZawMKy
z&x43lbBq^)zW>67n8^ofm713}PgTfUsMj1B{rTE$kkhRRDr{}UITT0<9s6-Vg&nJs
z+hY|~nmf{3N$!hQJ1j_(MF|cwo5o>2t;AUiAF6JQZP}vM^1h!vZ;4id7bQ5_ at sY=P
zNs(1KdcO4*6I;EA at nBr0n0d(pt5#R^k*D<1ei0L=>{h at I#KX(pCXAD8EW!A$WXJc1
zoC09pt0O<nspCsq8QtAHi3_-aTc!y20b4}DbS<t&T;;8Tz<vcU^XQ6!Lowq7{AL|6
zr^dBIZs!S{s)js{;M_kVh`6OVSn+Q2e0dp<savc8o`GyqFTrZ!tKky~8p@$|y?Fv<
zVOQdEdU9i}-MNl(anq!_5}B_F_PQ3>&bJiEMk|qTLB0V0O#)pqg`0`GCGbVpf#39y
za|d}3 at _RwQq(a9KitD`s#Wvmif{R0)H;EkW;N7vk_Eh-g=COFOy@?$;(m7>Or3wYH
z7vKu~b7QaBkN*sM3F+ZK8|>de-)Tgw&fK_&?%kuw+I`zCI!|bw*6g;>>iZ1z$Vx-7
zucwJ8 at k|e=1O}}_(0W2K+pu==?3T69p+4&A`a<hy^)3T_=_Ihcwp(~Po+O at Oc(J$s
z at O>wko!k?ioqi$0AF}v|V|s673B)xzs`LUQQ1Er|MODPK+>qg{FvSbkH1H$0GlJJP
zFa)dCFGJf-9X`njY?NYnF|TDfQVab~@WR=p_PE)H>?=o;>5;pDaYmcbMo;i~fx%ya
z_h~q(Cq_9NLxlh3ziaW|HQxWCtwMa;Vl5*uYlml>@!t>d-_6*I-IVZvo65l+{XmWc
zI&+Nsf$c=!O?~IA1kGlKFX#BjRlwm>Ia6X(G1j)Do<6Ot>QeH2xe>Z{;k=Q^DtbMg
z>1Libgm0u<!Y=Y9n5zc+A?FKW_0IBmU?7LRq~nJP=j(qx1RaoRe#NhcoQsLw^_iWm
zdk`xpxj$>}XtYdVSgV+=r-Y*^I9JX5uYujteWMz(12f$<F)8dq%(b)Y1yZ+8l=oJu
zw;x4=w_}m`W#--T)1Q9|F<)(h-dN4BsU&A!Qm}Top{Z+L67PfAit|s62KJ~Y&x)Do
z$<%g~lm;tfn=YmfR|QMboEH&K_JnydY)SBpx&O;E=CaRtDA+z+7QEm4e?0H*rh2?1
z3h#ItI#tkg{Pzk7uBEx>Ecn5$c*K(SmHC5C>z095BfcRGlyRku%3CRRRMV=A{d8Hz
z7u*t*F(^|w%28%P+1|8$O~h6TGB?*hqb2cH#Pxn*?Cfx-<y;S<wu0CGOM3xud3qo-
zg>58P;~84^9Eo*=_~Vs`hhaXEJDDB7J`Rw&A#)0Tl)rB|6JuyQDli;51-p>k$rCW{
zrJ(h{qilTha>n&K<#C>IH_R}UK;9oV$texXm8OU^&JSZI;{STsg|9}u<kkP0J9CEU
zsM~U~sS08XTQ-xOL#MrMSToz^OXiTb4bBv|SYyyJv#x2GX_sKzGHLAnMgRBvoyi1`
zgtaT3-fAK9re8g=E9@$nQ{MS?j$!B5Hc?|#(uKbR^MHaKzHq+y*FyzXt!lCvvZ-X!
z_TT&Ot9Iby|K5LU^xxv&`|m#VpJJyEJO3ef2$qofFR(5>r8DvhXPeiCAubhcke}Id
zdkxI^eGMG@;~LPDHGn;JKJ0i>V8 at dZa+Xfsc$RL0TxC6#&ibYk8A_#y;ng$G at G=?S
zsH83Xpa-`h6_fF#`@)LA4=Hwprtp3-ZnDVrVXN<KkL~_GEwu`LXgK!Y#!yYh at Qyyb
z`g<RC-r0v&***mS{G42 at Oug^w)MD4W&{-$<?_<}g at jUiMvQ7!#>B*bE%^&*vS7Q06
zTbZ&{W$Mfy<CT$RBVV9TzIJ@!u}z2EB>(U3zNv;SNnb;EG*j!n?*QLBQ{m0?%8tgg
zo6-JaoL5!!FC?}hp3zL~5<%B$=j at oJAat!m at 1f^N7B#p{9_gICI2CLk%B3Vem$ff%
z&Q4%E$yb`;AAc0MVfD0x{13M0$$dlV`^BCum)N$-qLSMF3Ou9K!K3~P-n}CxJaf?;
zY0#&!%E&E_Ce--|ctc5Tn at OEnpCooT_L7uJ2cK_;-hI)WUC_DTJJN9FB6tgnPaDo7
zf5KPxy-4CtQX<~#Bh6RS_yy62moSk>M&LIe><b^cFLKwnyJ!Q8r^K+d#DG#0Gugi>
zD(U>)t=aJTsh2W7QT>Ja0&o7FK;&Qb=I{Oo^2^8SIFNsNtlSs*m&VGkfQLSfe1nvk
z^fJoHbC91r2YK=w<o(F=$#X~@@_h0fQqD!5JcpG3$UPrbs%vkD>~OMcY8`CGCD^wk
z=U2b-G4j%Q!`TkxKk=4#Pe%T|u{ssVzdu%f6ZsFv%5 at I0_u2Qh;XPyRy3d0ASi2^C
ziTqf*?nR95+wGd5M1HJY_kDnIuEq6>;7eN)8|ak8(HvLe1N3sx&eyS5UEErl at ER3~
zv*$v&3bsP<sQ~VeWH<@)Zwc^GTjCEAo~b++*HLbUYy3KwhF?zpC#xDb=3viE;67m<
zzdFD9m2}5$GVeaAZnO69$bZ$%>@1CzmFIp^%{Q#olmpv1|3#F)4F0V7m5)hTfpu$n
zbs?#@)r at C+i1PQUXSo|B#;<E>!zWMjC1;qK*>+~r7ZG`z_D0wU{vh^l8|bbWUj5P7
z_L`YG%=-$yp@)IZ4SZaLwF$rk91Z+KxooUl0U2b+wFbz7Us5J_q{0^t{QP7$c;b0S
zV|iuFebE0bVR?K{`0*A~zxt{1u(7N7EpjxuK$cJ;mibyx_8eQrA!SP{V4G~}&w6Sx
z{CPkB%~#L at zjGt5U(ojXS8AW3Z3*@Co)v+(Hz`WExQEGwE^Gk0uyI20f7*TbRQB!h
zM1c>3?g%os0=_Mt5uJ($z3Ns;Ef43$R)Y?|$L__^&IVuc5$zgYyCUs`75)6Tz5^7b
zKz;_`M)nre%TM*~82-R5li0X4FZ0Ozkf{_O26o=dA7XDfn0tzEP0VyyMYh8xsv}w~
zx)j+Qd;xwnxAS#;>#9upOW-=*AKX3v=F*TD2{61q3qCrQ9vMrIjiq0XrH9ATL-S=f
zuLv4 at RGyL9d66~2Jieqe(@_JTmh!#>FFy#(qKgG;>8ZZYh7Im|UmNdm<fm!{-`J9=
zmA`aWxQeQ#OZj=RyMot7TjPNl30_I<sr5{mSv<csxP@<RDMBn<ZTe}qY^o(hNUled
z at 035VG6!b7?S)U>CfWKeFZ0oN!S6%f3miKNc3B}E at -|AyRBBE4)FbwzG%O>snU~JD
zCNMb}T9Y5_!r(6?!!PrYDJXBu2V<!N`>rPyK9Z0l{TgBy)6kJ~Z1F08GsQqx-dF|x
z|CgZfTQd<e(78O!NT;BUsfYo5#peRMH)F4!*uOyOhA-emH*kZ>U^Bm at 02rbx(tsWX
ztR$RcYeH326R<*)=2T)0o+;O0O<vh*<dx;_1dr21%A$lpZ at BK;T3(|`Q0c&553ShV
z at 2SSM3i(&V7nUow11BLyg?d|RPVowL#;s=93zPVF`AwPI`&}=DJ=kOnnNRFHsa=%z
zz?*b8T|u{z_m2qAL;4jC4A8khwF0Yo*+S?CDi(k2wh%uVdOxvO96rR=-7ubqM2y%<
z&b{KAANE75tzSKNwmpZgT+q;~7ph$INgiu_8 at opo5*zMc*Z3=I5a(?Y{8 at bix0X*v
zKgC#&tQT0<YD9)^*w?1zaq#Wf=bN2Zh#vv^*Sg|W!71ti!Re(6*XFcza(}-5;*f{L
zX12nX|7FOSjv%J?mx&F8mdkO$7O@^{`q&sf0^57muH!e*B+qX|Jg`3P^uOU7cChqG
zy|YsLDEOEdf3ubeG3UgKThew;9-xZRHr-IA_BFR9sJQXb^WF4b^h>3*%h#aom<c=;
zfpb(La9&ja2VK<|KwT4L+ciYjb?w&UD%gKwUkZ4Jr4J)+W(XeKsu0ZBsF*!%?Y-Ea
z-XV1Uf2DB at UK(dm3>xQU&^RxL41$jk4qn=*z8>_%jLs{+(}?h6BXrICizBO!#vX8y
zvEV&%z__ssW8&sqpn&hQ;+?qe?&9l4UEvML2Rv1}Odl(+5IC55aw*|Ww9nkK=#t2{
z2btH*v at OIpR$yH5&4LH{I>IN1m{TUBFA63%QAMs|ZSG`z`&c>TFVwHJgwT;eTYo7f
zvEIX0qn?_4H|j(}W)v1;KEdaF2AX6Yp{Z{DPE$SoN4l8t(o`hACG{PB6ytMXYT^7k
zLXV!k<ovF`7&L0u+!4^J$5|Td at E9LdI7YJ`#@VVy{;;!<*j{(v(`pMxG|)9nv;JT7
zR+D~{8Z_)-oiS`nlRoSUv2newPkyM<9sZip9rFI at rQ7uEV{c&Zzc|0<_3y!JAilPP
z$kT7~jxdu*Ka>7OUjr+W^kY~N=HyPqUsmXT)H3(_<g6Tb8gr<cDi(zEbwd@@wV^7~
zr at TUe;g-VoDEfFWkr%@T^NTg9I`sW^OZcQ6NvKmfRwux|pN5|?E#XZ?-|CxnkE at 8D
z|JpgMsV{U5v#!OQ7udcF7es7V=#1KNh*@#h<QH!D at qeXTRbJjBC<VMn9C(ko(MzC*
zlLJm2(ED7tgLVcz$jk%nJSi&agZp6*!Nwjnba}t~0M^&YQyaU8jPIt4LTq06D}tsb
zec=86a0+y71G$C{rTCZIbFW at kkGUtg5k%%#%z4Zu*)8}A?KI=sqV;iGAaAm6SCD?(
z at mO*=nRE2f+x--y5EyE7t{3j;qls)E)qCcWwKjJ?i75*nc{Mv0lD4C0OXj^k1TQv5
zC3uEX%${#={6E*;7>`ZjvXVU>A<%EnLH8f#;K at JC!S#2{LBf|G_VVTSqyInVU>tm*
zG|w0J?<h&rFm&Ov83PyLt5C-O9K3p2yig?O%i<Y9d_ODm;D35c?q8;}etdz*>$r4`
ztm-Ny?bzlxfU+LC-e)^kjIztXz+CI7M%j6~{;rw8#gtY3L`hG*09$?Q#~pP2y&do+
z1HD+1M&$9ZPc?@Hi3}H~7npz(iSve>mo)HZ2lRZ{6`$PX&?{5#N+|G5HLlnI98=-$
zeq3)`kk?zi{34Cm6UMF>%~caW4|ORqk&`E{c*GHdy(}5LPKw7p?M3L~%l)BaJrBM9
z$tXv;$2}(t&qzyHEzd4c`<)W1#HJVx^nson at a{QM`lz3IQ|;gx;E`l+s?9kBJQAdG
zB0K9Q7+`6&gXJP?&YbYGXm6}s44lN{;b%#iyf@&Y%N?MU%S0WJ at m_Mdah|G4Ib??)
zg`bt1$MTDjH&7jN8OoLTZv*?^>-cX8`LDbU_YpdXzBN5>upZd77XzFQ6Jjr#0;J?V
z+ICi;zsiWB?5X^6HzSuNXha{_Q(-sPD(`joJ#P$9$yTj+SD;u at q{Dj!ij*Qj-ttp}
zrQ|&^F)nxio`O`7ReB;oE$_9L(RRF#Joj9H!sSNnxYcVn$R+*fcI~9j%3A{@oj at DL
zw|zPU{6V=4agutK?>=i?tmxGzY%NMe+`QArPGzUKoi at t~9&8W7fG4A%#661U7dL5Q
zl&2*wRhp(5?{*1EYA=)i1$L3$X}~+AI$Um at X?%l7LEg{Fi;wkQ2aH{>lA}*@$vyPv
zTVwaw{^jJYvW;D{eTM7uv1_)Ea6LM9E%82k)sXl4_L$hqB+ufz+3`c!-@?yUGT{|Q
z2J(T`Yx^siCdSvW*$}NyDRxB?IWuHy79!h9jC5XDGaWwcCBSP_A=YDoUqH92(w-O>
zZC#`@+PD1>4O?oXJsEx1B+D@*ueQ1qXFxVO-I~&)_BDdO3=A(H(u+>J@=xHJl&wjH
zz4d at Aj9jDNcPy{y%nI|D_ZBc4Ehp5R%58?hGg5|=xY<zI0r|UuJzr&$lYs}$Z0n8L
zdoC5RBeXGfKY at NnowFr{_a>3p5@#5rDr~=87Iu250DT at 9RP722GP-^ZpEy_^e)ifZ
znYV%G$$a{KK2Aa29N2~a_C?=IuayM+z|P~tfz>Em=5hy?BgGsF$h)>nbPK8S+D^>l
zQ}|zRfQ~+dadwC8rxfRxIq at Fnt~IGKy<hX3KZQ>Ot~+G)ZYga at Xq<m5I!SlMZRHr^
zYhkzggXiwWGJ({gaGTxxU{|YYawVv;VSf|)itf{=!&sT3OdbZ?qrE4xID3)SU_8o#
zvS#b;`M`+GkF^8?1Gj*QCH+-{`){D$8%W<wh$*m!pNKao>vkmJ-fYM(3&Zb$+_D-m
zP^(?PA_i(<lY*{B|5hMR<eTHAOsE0*@sPi*PW%P+BH37}<9pOwlET|(>&sF}SsLub
z at SI5GE$n^Wrp?V|1($ABXqRoR6!-a-iDP^dMd`qdjqyE5{SBDQdGPrPmmBE%$^00h
zXoz~7UvJlm+|*wSa>Percir)jSzLX;*)5v at eRQ1V#z(s+kZ<2+bQNzlR;t)JX~g-Q
zk|Tv5OAT2&q^+CtS(+Q`32R8?g5NFO3;EA@)@LDdb_7-8XP~Mv$8<O^tH<(0CPeZU
zw!Us#sa%FRV%}Uj8}r#Y7jv(Y%)RiXv!?(vc)T6>!v9*YLwQ)oSTlp=L7(5THuHwE
zv92=0&ysaNXbPh5Sf{$72He{*cCS82_OCUH^>;W($H|Lp{o@*4lZrZi?EL$iXrH`S
zbbUwCo$Hk1++L@!QA>!ay!9|Jv>(QtNH}8Fs+)mZ2ihb3-*oW1+KI1EBlPUO^x55)
zSUvj%%DwJ<Q&w7spON~XvfI{mpk0XU?_CSgeZo#89vB1AgFl;>)4R#?i;>9ML0cFJ
zy~LX$kRCY|GYhoE<8RIf-*TF!!-{O<Au|R4^u3Sh3~egNop7p;rdEZoq%&{J;30ps
z+7HdIiB57If&4Z(>?OI8$o|43=T{tme7^p;8|h=vbN()e{3QVUu|b)9`OU-zmToHz
zTdjj^4Q&8 at v-A|9Z|J@?v#pbeY!_|t^~!C(Kg6~{0iO8(ZbK<)LkTm<&|mz>pZe90
zbRnI6r!4t#;5!j}nFYWyVEaOSr`|zziO966)1b3LyfW?-o>vC at Yz}Z=mC@$-OOXfZ
z^{x$+?G8D%jDy$%1*zdf&_ at WJABxmO9}#OHa!$4{Tx?(5A(Oo>8taRavAzI*@E`l)
z*|EM at h`u0w_mBS%ePJMdAp-5swxQSC2H2i{iI at jZuN(!<cOK_vVgBDYss}GUG41-J
zJ{QLLr5 at 1M)&tIsm^+~YItujjQ=}fD%jG<dQT(KD#S^NS>QE8`NE>78lzFN{r%~pz
z)B!W>pxd+~(1+i3%hD&H*7Z?|X5A<7MPENYPnw+dV3^*e at hO~OSjL1K{ZuS%`bXY~
zdD_e~?3kP42l}~$(9eRpTMAEg3gY>K_iUncppO+h&AdVn<K at 5T%i$G*XVxlkzlc6c
zXnw>IGm98nvYvyv-$?Ip=V>4}=Vu;cpg)=fI_MD5IY`_h2C+fv$XLm%$L7oVu!%!I
zJ)!yqaj>vPa%er#BY1fa53|PKc9#fpDhhfBZ5G;DXd6#xcEZD;4d%6IC(mH>LD^nl
zuoP>@u{3-ocwo at kf-jdS<OWfF!$jEHq*KlOvgP3U+_o78=tEw>o-#`GS*y;<fgixh
z^3G$<s<C#R!+x)X{B;4_HqC!*+oXSMo9};U8~1;0TVun$Xj|z2(zeonwQb_<HD-rQ
z*T6l;jwN&kcksEl$1>#K#*+6R#xj8AYyQhv%Ejvu at 9&9<|79%Ix5tvm0>|e3Ks?qU
zY?EbV?#CF;90xB98-yFsPqFz1BCm~lJz%u8`nDd2T`P|X#&i%4;7k6n;eYbOh<6YD
zJ+*~?L#YX;{1s8JKPhO3?>^^xz{7}HZ{m!UbZ~AkKAio)<E_(X-LlX}p$BGG8npXT
zEWzEL>fja+FL=LavF<o at KwWhDiAMS(=u081$!W!U`;n}-#I6H+QN!S+-`6F4W1sxi
zyDsNt=O9ke9qV!#)@96pT9 at 867Ic?j>C-w^pL5ox6EyTFJQtvE1?}tU1MTqyFh!))
zc`~nUnAbRyrra?`N?^DZdUQBnL&^Lhye8(m={%Y57Sx at My7?IQ63ls}FX|$u&v~4`
zpUpmHkAi;UH<rJo-OQrj^;cK#&|j^p$D9|_nDay5*da5=T(53N>dBkai1}s+o9Mwc
z2fngHC#TAAcD}@Eq!`c#khhfNAnuYDW6!v5p?x0`TM;{C7qA1U*>=|T=H|1I6ETqo
zN50pDLUu9)*?ub}%z;k&fIAU7ym{5$^I+mYP78Y;K!+L9;oXZN?=)-6a3&;SjEtP8
zh>ncPb5@?n1NISnF8+@*$$E^L|5J1l*<+%6sY^HyrgCcSb#m;*QNp|Ua-we&PJEXG
zT>#NlBj!27*+(&u>xuD=3fh3P>Gi-{t+nvGCvjyyB;OA at 2R{0-P59m_B3ljr3jX&m
z5gQ`!cLh!)zMY-V_2qgt!pF0m_d5KG^F6>incrN-<Ms2FA?~JJ?iLLnD<eEJu?dEa
z7YL4aJz@$}J^;-34aMzdIkO|lhg0%{mN`@D!+}h- at b~&(v-Ri1N+`xNcV at IB8koI@
zxGR7=a$xCf$T#D|&t>cJ+-iYFTuOJ)Ik6hhSrrK at d$vX!x|m))-SP9qoig9T1$Az7
z_6A>fgmkU-{Kd;zd_}^_^FQ_0?vzd9c<)WRKSI0K+Ozd?Rz&_lD8In5r=-KzjacNp
z=YPW5>X>vtY{5d~fv?`P70+efJGg8(VO3%^>=_%@I=lA*J9MPrQBk8KgWiz7K07%_
z%g5Z_*)_SdKPTgG^bEO}n?bEK`;%D1_)p_n=eY%A|7mboMElk{d)^znu8&b-?`T^2
zGjCY+xUS{JbH&HyqxFHF)}=EMpJ?5S=LAE4PEb4++^d_;TZlSO$DHOdxj$*Y)ZN8f
zNY>VDvAqQ4Px3NVfw at 1uG+U6jDgpVq#m8ToE&BPb>G<DAo^+3G=``G{i<|GciM5#G
zF)oerNS8hsKYUpqp%&}8inV#7ty2BAi at FdNzoEr=MpREJ>pZd7!ab4oBlnK!31{fG
z#ov#ZDv_h0 at v!bR*!PyDS-VqpS7+&n92s)h<dZW)r#VWWn05nLgRtd!ht<7)I5SV)
z+h<E(N9LNxmM)s9WUocQ<VoTYzuK3G{U+;Y^*W*Pb6%TlNs(d=s%`T&?L>+gR_E1C
zU%-C16t?s=;YJ(c>+tGL8(a0jI*0AR<i_x~BXJGdUjaJ)KD>LQYf;QBPXp-xg<+2n
zJRbT<AI_$lzx_=9hxw;)y$RbN%ef3!T%R=kb<ABe_=JUM-|OM`>Yn6D(60NOPp~ms
zX2Di5e at _Tm6Q*~_S|9lZYux}F!F9_YhD<UKIxPlrH^mU*U&rk~rx>aTnT~gz95qaV
z>?ZiV(Li9#!47(O8Czb9HoSv%DFGj(aDE57>vh1p_>kBYVSmK>!~MVDeuhBVqxouY
z*j4y^{snP3USikjui^D$bvC9MDB|P4kvzxGXunVQL- at TcUdBS=|Bv@=V*81_OZtDj
zOZ at -hU7A0<>&O53F4)vP1{v;}0n9CY|9hi{HmW<Xvi{7%!R3g5SV?Rch=0zx)ayY#
z(>Z&3c$~dnOdZ&O-_2?6k#P>v%Q)TPufcYTZmz+6uoR^GRfyAlCE*;|5|OGX(Wm~%
zYry7h7U{@382XN20U}PS;{1a{9X_WmOpt5vTc3{Rr-S;iPr&B7Ill&d at A1d)-Ea<F
zMf}`=<Ch=s9%K<p>qE&E;KwhgS>x5#KW)l$<)-B|mtkMF6fk%%<7?~xY*&VGiyZo*
z&Wveq`(3o}7;=@EYG?X%Y^vE_3mg7rlahMUIeQ#J at -3G2^1NX~&k(11s#2t<U>DBf
ztQu|^gPOcCTd7Be#Kaby`qNMok$b^@@39~`X)_%fBt at HDxcATyVmeG*hqAdr1q6GT
zem+QtdnVkQGNdQCI>ZO^i~>6R=|qRm=_ERQd}}|e*Pq7XBZU&b@=$f>CCC9^BzDq>
zDL7kr7Cu-QpY34;yNyQt9L!-iUG at alHE$C5#A)8ONPPEA at ZAqP#bU at l*LNm;MV~P}
zX0{SoCUX(f<>~o5FS=Rmh*dZbs+WdF7MWf$9!O}E8`F;)pKVvsdr^)#L1dYbb>9tn
zgojhz|E%hv{!8=D#z1aK^$@+oyXjM<QAwLqz1U9#3n at t5*}I|)HjbGb_^!TfUz6&L
z3p3-JRm9$R6t)}btNg!2EW;L@$wJuP6=A*zc`DPkuOxKG<aOJA7Dz&i5clBek{_e%
z1lE-g7>{imoG-rUPP4wAs+-SiF at CwJP9RxC>dX~bx9JLUw6Y9yS{?kIKf;(vpo5li
zo`js!iu3+S_}%+YfiBNJi^Ul(C-<;kCFGuWev`O*0_EBF5i>}LHUDsX8R+g+!2GG%
zz7l#<Y5FSc8Aj6oGZh0azSL34+F8}pk2cj$Hl09vdo1R_mY9sioUM4yL!&_$(~uAq
zot$R*B?$Aenw8;ZG&hkt!7+|K-Z)1d7dLmTtgxvGcHXl$<&gjGxo4^lIAVpWhr{FL
zSA(>O)stVfJVb@>OmD9O_QQv;4WEW~0k?4Y-B9n?M{zYbf?!J=6oU2Ie?6lW^ip8V
zdgqq@&PQgA*`7Y>jcI)pmigdgzXRX<Cc$sWxbX?o3LWblV4`f=yP%frjgZHB(5Jak
zLZ9u>N9!i<?bFWb4k~rMyDk6r{%))RPyJWuJxwGA=E!}B at 9bg!du!#$nR4KD9}~;Q
z=fEDSX64|S3cQEl4OrOcWXgfbkO94U#$l8nn;`SP?_7SA at NVcIMh1{R%GNn1g6}%~
zsE)4$b_nKCAm|GLbX<Rq)vPsiS6`Npc$+>P(JDLS!3(;fx7rSU*vA6pnWFiFzy4k7
zir+_MD3${+HKjSfOVyS0ti}WM5jtnn{n7!sigTf<k#m73X)2H3-`pQtC|Y%KdYbX#
zbb*OdG{KgC6t+iENsFho+or=G)+1eZm&dm3IpUwwUBq6G$My5dRLvZ6zOWb>CAW1%
zt*{Rr_|iXFt|#*b`n6ZqJZRk$*P)w^d3b@>VtowXA$YSyVTn}|Jwlr8;&kw~v(bkQ
z1P2oDJ=spf_hz-fO{ex(R2TN;Eqh+B=9D6 at Mg9fk&B*5?|J(}Baq}m8Bg+6a1ASa8
z?Dz{dp}#9dL{Ak7J=Nr>q~&GMX+ at 4YMIEkd?faq2_N5UkY342}Z)O&yI-cLe(52KC
z(1E)q<k_<(>xqBZc{OKi_^ru$`;wW!#OLVGTm2OFM$TaOhm`Al{XyV0_?jqH<^9mh
zS8x^3$ro2X5VIo6aIO=4K;BHf{l&@nAJQdGJ7Nemx2t`lxQG+ho$geTwYE8zqoaxk
zzUHgdi?|x~vwsdQn$kD4#p3fdv6p`P2*F>6?d=<$Jd|-pjiJ+k!x?tnDC+5S0*eyY
zBp+E-CL`Bu3fja)BOcmYqEnQ?-qCp_pb$0+r|>`ceFmo^eH-cfkyV}oxg_9F=M~J~
zs*(2xM}02Ho0O`LCB)y+Q%2 at 8;%_CpzVZKb;2p&HOyO#>-yrSNX5CY{xY=D5uc{6d
z?Gqig=LuSt6bNjsnl`g`cxvsI>A(N?n*ToXU(Fe=MsqUuJKYs+Lw4oj9{2wEj_MEO
zGP+Ewl2@@9;xf5jEA!jSYcpNL`ww~w_=Y90lOK7Xq=-XX$=mC(t#P~0(uM`6B0n8@
z-(9h3TD;S)Y6=oH at NJZik66xxE~Ce}hdBn1agB4qYrR!Sdlx+DF5fhaxCDx(R at ANa
z)<qkkt4XxcWgE|WWrM+qH;ga8rMomMm*Ch8Kg!M5)%zD8HOEvBnYl_PF9tfq;Jf15
zZoOMHOMLUG<;vt<*sTrgAX6jjL>T at qe1mqAekC?_h_iI|vLvF2^ex|t>#`kPxGsUe
zezI#B{CCe`zx|Oq+bKpI!s3tyVSHH-{UWux*CKms%LY-SyA(2vGVX4a^W8fs)nG5i
zsmN0h`NPQj&M4X2!_V^@h+J;4m-J1aea_2a=|?M;m+1_DEE^ra?0=Lc#M$e5qeCJ)
zpMwp=EyV0&m`2WxkPe>eh=>zm*MBee*rvS`VUfBPHoA*@7)~Ah>vix)$>yJ;m%yIS
zlh_eu=;F7RhzGc3%H#`+re=&L0~geU7+Cd0PRGp?CX at yDVhzZp0UiHpH*9)fk3fHq
ze&Z3$py0u^{dPuf37-)wY5Yu}j#3C*(Fzg^k*B(`le8nWIU<*|qgM}^Kyvs=PD^*X
zV<xffL%SMruC*l86FYVmFS5;t<7cpE;M{A=mg20tiTiEr{hRFEAh=CC;YU!{lf|i=
z1x!{7m at Vh?!AEBSgZxyh34Tcp+e_MEn^F$in2amvfiH-!y>qU=qNYEgzMRFm{JmW4
zS7$G3v%v-he)4`*+l$!$R@(6#>_27ydKT<arV!t+`4uFEZv>CngpoXZW_jCH8|F{;
z&Eb{6s>*<WV8ix~Z0XjH8aLkS-rj|L7dZpw1ryt3*t8(UbEmRCRLI}a-U8=bg6|Z(
zVKi`iC;r!2a|zG56fzz5-nm#`7g&E9;u~XVYM at IWXhgqdMSkkJfPS#RU#Zq at fxn<W
z0q0MGro_nA#V8>s%A*cT^>${<-`y%d3x4oT<Xs(0FZXGASCq+T&yap&pDDTXnFAHr
zLl7%1yEInCH}>f8Bm2yEW2pn{<^tpa$FMFtpwBI%Q^GBNT^N^essl8-Us|1A(^e_=
zOu!k+yTZy2DqwTpNf(~aqCZEuY5BvGuh~a*{Bf|SNT?U&CIrr`qjo#24;C~VVx+B=
z_AhC7fK$qWT at LO!%mI%I)Uknr(u5-aL8^maYiC5Ilu}>?_Q8)+Iyhpgi#BSHNjs={
zqFPGXqCcbI7-LSg=^rYWwI<9fFp7^qmGIC>PQP6*$T$tZkOTW-t at h`g4~b?t4~Zf<
zE~<;8r_ORTxbM87b46>*v&`DAr-4t>Iat!LX%30|c?feIZ6`R$^WZ;?crl1U5RA3t
znXqK>^JtgFtzUl7QM$aj#MnpkuDF>z_WNPeX6Tcm?-`_dyvy9zf$f&(ub?dSIPNF-
zt%e at Gd6z_6Kdx!*$giKpOr$q&d}*D9N_|zjq~W0hWwEd3bQMKp<T2|kcIB&;S}jtQ
z^n=&t6-~+5_0*piYgRxmxXNNb1#Ey2L90eRWC at ZDHOH(_J`23mz!kyk#J~?#TrG+K
zCLO=93-Xe}gZ`GngFa at h*}pR8)q+%a^*x3azWlaU+|yRw1No71&YIMr&tg`rlTw9(
z){Wl(;{L02yY5xG1->AHBE$~)pr9 at 0)mQ0O1;4F}5olW;&~1zI6DYdCH^i*)yr3P9
zX(-fj>a;iSsdSG{HSFHSF%@RTR*6;%5|?P)*Zf-(67BW9<-l#-D+I241`}%1s*zX0
zcTO!&7Ufir|9JFO$r(-cgu+bUgP%N8l~rV#a9vVGtF^~=9 at N%PIvC6+a#8-(B at EVs
zUTT(q$EkLIr!~A1CpEjjYc<3xL|3Rn{#5~!?-Q@!U!BdMP8ZGAi4G at qN=O~Iovl-F
z$^DHK*V1yX(!<rN1ba44i!gS>F0YND4cwD^wW0(;>D3~BA(?~tkHyZEz~%>iSx)+r
z^l!lvD{?$dZs3WD9uyclAJ7?>Bna}T>5M!^9bIZy73~zx7C2ic6pa&2i$**``Qrth
z{>B2t)u2|&4;GAaPQ|RC%Mw(c7kCe7uf?C*TNpn>@bifY2ZB}%^QGUabkg)k$_ux?
zJ31+(E2kIOUaGKP$r{X&^f)<n{$C>g=18l>ev+dOo9tN at RM89^)-=6c1FWSx)}&AW
z=o=f=a>>@SGn=Tq$!cnZGe~tcH4*wq#5DJj^$NcBLA!;n!2jwO|3>C4S^Jph-(a4f
zD7i}PHUE8n+YfQn=TFgx$JS2BnpD?c!){{j+???C9qZ<e5LJxw9OK#Y#I!@Syo^&u
zO+R!%XYw~_>gg(-NkGy)IulLOGQ=rG+74Qm;MI-X9Wo6(%ul01 at N2BI*K<Y?gOtcX
z&avfzqd~x0T}NV4P+M{`5<5HHi5|q$%7nj at mD1Zg<m0zZrL(DNg4{0HZuI8fW003~
zOxkM1L5u#XJYim$b;ZqWcfyP!N%jWLK*ZnTtlhxx<bL9R&0bFLpw*l<Leo85TW$a3
zN!RvIp62N7{Unw{^-Q~-HV|Gf_Pg12c5$3Vl`Ah5n|!O=&A=k7_N}q2eQn at FDj_ch
zR=IDvNbRrh&L;ZP(H8Kqw!{vOIWe1F0$k%5dXVlFGZR#z`bxFWA;hBWY2Rg6<N(ub
zQkh5t8;MLuS-T>~Cek6FjW(3GHvtDfleKj%r}j}dDKqu8{Cl6SO3gO6v1_xDGXwr!
z57_hJ(=N`j`E(0ri1Oq)?L1!_uyAS#w#7N%^Cet&cKa*Pj?C6F65}zbfR5sJi{7L(
z%igf(a!%Q;jw@{J$K)TbQt1Wy7-nEkM0S*rpALV`WcPPE`QRFDX%6&}WS^z1s~5_H
z!ba&o+x0m%v1u}`&C0HfxggE7%b=G-Y-TT3LdzF8KQd<(`I#yBJoU6xYTSJj4Dicc
zV(;YSYP+~*`{5j5IJq7zY1p7-_h;6h-XHDZjN0|QvfW3|0RNBf4M}Hx77adU5m#5n
zxuj#@|Hw=<@U+ne4X{MXnMdvc>#|m;``2|q6Ywyz2|e8D1|Dk;>66=aY2b4BtFgb>
zaR2A)j}qE`vF=7d>Z<E{Q4es!x^BQ%=*JpLDF1$=;(Do1m%KMgHLx{8F39UDIbfD&
za!m1R!Tz3tD#MBkf|VyU?mdtw8+h9em1(p6YK5y!y(@UxZgJDnWuo-m?sX&hZ`FZI
z+LyEUuzi%?Y}ox8Xz*OlUeDBNsoIPid*wn-Qp_W}rM%a^&*3+S%v9<>10J72+Wt!^
z;uJjnn7XabF5$qw^+4%tt+WQ;8^Dta43)spJg4;hDqQW~U}uV^yjJgsO4t(Dtx7sz
zhRx^q;p<yVL*Bb#+<1!29q?iAvAj&u?kxCWYJ+$9oE!!J9wmJKEAa3g^peEJmNFmc
z%i;eCKMp#D&{zI{b;*>fkM#b at E}8!uM at rLP$8&_zz>htb at 8avE`cI}yGtxV%B?&5%
zgwQpjdO{lq at 9wh)JHpb*7=YgaEjs*p<PXD_ol#^QJkn_&lCrBiQMQ(pfz}uqm4F7H
zMs1~2B62`~ua-+AJ{_a2|L{yl4NF`9p$xROy*F9}OgpZDrQP#y)9$z5LFnT<+riTE
zSQB2lebE<a?_a~xZ(rYTKf#cdy+L at e6};Q`{#)JA@#Ope_+9P$!)syNt?L|+%Nh;Q
z&CKJ7aciO*hF32>gZNatCX{=mi=KiHs at 47#=IkosbI)PC|A9YUo@;OuBeRmYYatze
zz4lCwvpXrS_g0DMXW-IZ8_bLAbt~eoJ4wta#K24J%*miugKn;iYdclEgZF0UWSf0K
zw)E>v4mUZ|(IEDW$NoR5QhbxU4;ZzzvNwk}L?BjFa^_?M^(-3~*pJOGV)OTsXRhFN
zN_N)KhM2nrdDj$zyqEA>qlmR?WrSDWP)K5&_f;-}A5?J8Z9Z{$?f=Cm24{Ks#Ng}&
zgT4QmPXymJ{5dak*vcQG7&3P*_isAet6wqhxEYxJMs6nmq at Cd%8Lqp$G$IqJ?eYe`
zB28*nILr?!fXlCFa*y$-wRRos6+wr<rayIo&|O33!bY4syeaKwGXI~A%T8IrbHwAE
zf$zeiFGLNo5_@;&6|9lJ-jN4(w71-wMpg}f&ep*?iu~q?46$ty{~5B2A>i96q%twr
z=S*bTa5J%+_?{z5k34(zH|*^~lr<q;jns-1c)Y_lq=>0DTr0Qq<ppPna^_cW1AbIV
z17`r&Vj?Rj>%+U;!E^wzqY0M-*XR4YAy>h(FTaKSr2jYV#`o<0{TsaR03EyNYxX_b
zEvFIF<qBD!gs*<~7tBAh4@`&bb5E?XiUB6!yL4G#SnFyJy#}`WTarNs!_FUj^z_j$
zFH*D;K2Y!<n4okr%i;gX=6jum$0Vt7VFnG8qjRc{Nnn%Ox~?Ox?c71Xmncn6RnKd*
zUYinH7EvTJ+ez%eg!a<c&Sn|8Z~A>msdpQ+$uE>el!(d at n=>gm0QXeX7Q~QA(B|=t
z3rgIDt1kR7z|VH5-47^A-D*YY0$s0IuHYnrhIqkWljVM{+pT|1<%mmxe-7j&<)EED
zyQ8j&t($!LJn9HhXZ%q1{QI^QI4sYdMtnI&P`;!9^0DdJDZt{L$W{Mfib#PzcOU$|
zro&$FXqbUk&^jk$&)Pn{{E1IA^e5>h at +c4b6#hfS5k+yQPw4piW5nKPFnbC2&CzkQ
z)Ftr$0I&B-?;gZDFqFuqHu4H6*v4tASYPxTp3)di=W}A_Zc~Cv9>S~B0RuM{ahoq2
zMbmrrFRF?p at eR1PM_VaXnKhm44GmGHgDI_gk<f8KsR at Yne+P3;6A<s8#+D}_A43VR
z?WEGL?I!UG!e_8+H<QFlfShZ5$SC3s>2f5%Ku`8*$mvaCb{l;fnwpf!R~8ak*QOkD
ze&8EiIV~wF#II5cI*%0q`}gI0D&?=yNr}R!(pD4V3+<Miu-Afa%3M at BOU!Thi4oNI
zXxhr$%nJr>9;b9_iQvq!Z2vBzZ@&6lHt?hueNFH+#5b3|Pb-F#7Hi!M=5tY6PP2}-
z(6FZ=J}?;fA7MMLmAAtFr+R^^w at O><=a6IGeJm3gsRBW%Jv&>PF4JA%u8&*T4Z3Gr
zflGzBKnpK;^FrWLEIbL^k!=M;jtqMYDOq16_DH8BEhnn<o8>oxo=`P6vGTpGqfXdC
zrw0D*MvzFj{4iBR_Wc6^@c%hIRl)8Pt3|?`i at -~f&^{caKVrRX?3#TarMX5^c?X<<
z%{NNHuOcq>wVhlEWLX(UE9HZ966#x~!ha{I$gy|nTSbY$e-<t at w-Ov^;lk;0ZOlia
zFR9eHHr0#QQbJX7Nnir at r!}K*gm~o1bB^X@^if-|e~rzn-QQ<Me9G at y!l3Oge*H1o
z)g64Tpe~_^uk2xnJ_$UER`-vGfH#XVl(85lTj7)EiF~+Bn9~bdx|Dh?C+qj;$-g)8
zrTp^cva5Ue-v87Hw_M)1BF!D+&dswfDshuI+rot!_WPGFc)d3Pbgn+las%}Fm6p&M
zxHobm;0aB06a0`GH?ABqLEoT9z5(M{58mV1P!+~d%-KarA$!f>3{Vn`>)g?RkYD!C
z(KTSNsGrbA4TTw-6*;|5)lXTJI?Q-L5oS10S95J^NA=H;8=J at K%}VbIGnOdmN+%PW
zwf$&$FZo9J7Rl+{ElHyEgei6{|Lx^6_=Xi=zqaE&ZJ3+7ftUEXu!|!8s^Qs7!~^4E
zMCoK6Vl7tmHi-KINL*y6PXk|k3|IwSMSLsz(uldv$|hzhXwZdMgA%qlmWKR2^3$?D
z$Ud1iv#@?l28wa&TeKy)kF(|Ux|{s+RvGW$j*~^J7B%!%V2qQ3KjE8~Fs(IYyce}2
z<}vnA`1vA!(oh48gDnZGG4`7=M)mS!YBT24*<XV&=SDE6+(^%bs(|xF{0oz>W{<6z
z7?F@(O66szY&=^uWiHOMrw+!o{r2wYgb)wpXBCm(P_j-5m5%)0oQqi35}L=6tediX
z+!+OJB=`h#o(jsgs}7sn(QjPs)n0yHwB)Bt0^6AqM|pv2(J87yD{jx&lBBt7_|?A3
zEy+|wqL|7_v_YTz9VJW5qcjsrDOI)aP$zA?kwqJD{#)FcQcGM%T+X?|R}F#&L2XaN
ztCmwzfi>P3VJOk at 4^TRXMcg#m6c2q{ypeA$(JjAGCXh$nFmuXpe91BL<e>_?BGhG9
zd;S)-#IplsrNNEEUulma_T;e~^9|7M37b8o!KcUKXrIs_j&{Bode`2B__*$)uke1Q
z_Va$A4h(-4+&G4db%Lk5`kQMiVwgmQsPNst-Uz~2=MyY!oD*N+mjT_KmSAQh-;4fU
zBx<-p_|s0v)+od*_y}o&GWC|8tWC`4iJ%qqz}P$Z2z<S8MrUw!yt3iOcJQvFOy5v&
z2Jp+X{n>lGJYW<-wol^r{Bs4KvzhE~q8|A6U{9U+Bx2FPj}PxJDN%h4EHr}gF?=sq
zjB)Go?oZ#&Ap4X2`%O8Wh%YcQ)icD)djxXEr at xga<9QtNJn;XZ_sRQzeo8co7;7Ff
zw_}>%mkQhoK}(BbtiM`3LeOjhA<VT({}Q|(nAqot%+in0DQ8DRri0dioR`EQCD=U^
zZ<1I!zOZK;O=jE3+!Kg4QtbKPF~hpB&K);~<2C&MF!uIwQB~XjcxqyDYEZ#UM>Bbl
zlv~Y+L{@xmValb62$fLI#YybpUd*i2>PD8sFbvE=hj|8u0cIG6hXFwzRYVlb)VZc0
zU@$q%fJkOm3Ii#bzxO^+xBLBlKfl-Sk9nOl=W(C4_g-u5wccwj`qs!^_ at K?O8K;OO
z0cMe8CAn{^eUQ>1NA+gj*|RiTm+<d5_6Bc(pF=Z~UmzQK7vK92?!S=dQzP5P*6RB^
zbPD1#s^>P-x$y5GE)H?PeeviMUMHc?FN3I!X6mVvrz|ZF7WHX@@g70SMd_L1D3Q$=
zw<|9`veU6Kt}f<C`#TkiJteM>c<M at BFUHPiuFCcP;ExLwF7L^9-|^_8P|w%p_1S>H
z*<`4U<$pd&t8=dR{L3LDmEgn3m&EE$U%C3Z`&vvwYjJ;pgu1o6GrHM-Q?V2CBP9+t
zn1MREDXz{t#jcJyqJEFu;~Iy4)E4h%RxiUG)f~rK=h^Vs*-v3SB%WAE)_(Ezv>7$X
zOwthQJl5l7h_l0(yjc!AzXf{wv#56#OX}VBWihpOx93|N*djo?6Lc)rJ-x6M&WY)D
zGz6IcQEzKT&MU23wfWXGIr70|ZZg~9*D(WUxElUL4e93x0#fNN=|I%<xb^nl0m~p_
zl9AsEdLYxU+`jdmcdF#Yuss7Z;AOSqMDfc5{W_EW?M9PFZkX)4I4FO(-W5h4LrhE3
z at XOwxkFB1l(RM441KEZ+xKd6&*$xXiO4P(CL4F7L8+?(QaC$ZTG!~*WPxxs at YT%bi
z38}cAG5Nn4|8ql*j$Fe$LX7ij&9#(ZCH`-k*k2(cKAbMpy7-e1XBX^S)p-6b at Ooeq
z{REEp0(ZeC(Cd1cD{<ZYR2S1vXUR>X%TrOKnYA}$3P)IcfN$Vj_~{7EHPre4vf=Al
z-va8P!I#iH6ZL-o7vIEx`5<QgfBPVS4Pt!|*uszS1nYyqexO^H0zQ;Z at 4}j`4Ef^o
zz9e&hUEprlPhszPO{MkJY<tQ;m9S3G5s?!uvS+y$&Q|8VyHLS}JpehBbnr2zz|LY|
z(&Kd9-`N|edaj{L8K*8$eqojteQZWekbs$l-yZk^Il at 0KL0nWl{3C&9jIo_1v(EFG
za>(%%)OEf=@51^s0qc-LTZ>5YR4M$j7LjHN=5R2uQ at q-Z-nF%i#`E(De~9yhQ0dyW
zB{luA#C~zn*2GcpwvlH7L*N(TPJS!4_}0I$--`V|`CF9aS&4b5*ULRCBRQGdQRA8Q
z38|_cpRbh+e7v}-4Bt at pMGo4W6O(&(A96IVi^;vLclPC|XSCb9JVO>MCwcq7;kTMw
zRfX%T0_S3UuY=7&J;5&r^^Dfz62T{g$Ih?-SCE435nS^o#!Su_ at T)iv|L$_1ZsZB-
zzOh_Qn|dE6x^DNlunzP9u42-LL~=|6Pd1if|B})S{bHT6Na4DPoY6{;)>9VPE~_|N
zuN1pJs?|R!t^>8)QO}(=cK-8Q%i1X;{v3st=kG0j1ARRJnNzoLFYrKvRGBid`=I<P
z>;hk`Z?)@aqd#)>!(a0 at YUsTZ_VGYrTmpD0@=FRKyZsvBpRZ at EzHPu-d@mIb4nK!F
zd8o0I8e+cwz3Ua|(!N-aOUXE=he^FImJhe0ZMCG9klo)C`EN(2#n*@4i>r$m<z@$r
zT>m~|jGKq;T-VHLih%pC`#9=p)VT3ID1(i6W;J|<R*%z6%8*Pdrj at sv@D9I0zvnL7
zwTza$&u(F~LW4lptzhSt3ci)AFU;=lA7q|;5;;)|2SQZk-dW;Q_+0PpMm-(he7RUJ
zQ32QS+>=q4Z&?F(!!O2Q&5i2^+>8mn&KoQCfmeheu6HlCGm)btvFm^I7MZ00x<1K`
z)p!u~(Sczia)n@(*!7FXW%Ios*rFlyy?g&a{0Q<J<jAJR&vOmSLzo0nBZd6-ushc?
z7CH{tj=0di<fs2#4SBW{w#zFEvSV6pX{b$*8q?Z`TwfQ9z09;$9L_n`hB(5RW?**^
zpYJGRxBAIzvb<7p&E7CIJyNWRE1}g<9q4=XyC7vqODi_~v&XV_)5vG&`+xWgq%S<0
zHDKX(O4f3;u-jTg|B61~bE}YZH4E{}i)0euV;H|`8R|%Tm7xA`F-L;j>A5ir;3vI8
zrwX*K$WzbyYt4q_PaA;~o#1Dxs5b>yKVkh at UdZPvIKqgSBJf<3-Gi3WYC>=E0sUSt
z3!ww20PowxRM9oVig=AoLi&ZJ{oIoB^~Z{>$U#`j>yJp(n?n4rKeB#?UFT4V5(JIP
zBu6&S0sHSZo0Y|es083Wm`4{JNA(JlTdDgVCo?9gXCG|UI)bGNZALzgD(Fi+WX$xb
zAh&>#!~SKvYGUkg6wWzAxfoZlXWZujIWV6|S0=WJ19u1bV;s&71h#1TyxUlJ^=;-#
zFmI7N9l5hNEYl$dnB*$TCNk at z4a&qz>cDxS1#umMl<Rqdn!Y>(V!~dk0?wggs8o6-
zphHo*e$3FkUTcs5vjbgT`h7sIxG+ivo>V9A2PUO>=#X?!_-Twxt-TrL9)31uZi=v#
z)}2F*4X*>R+n0(of^y`aLcW3^@It1<t$J2O>e77Q=*scaBR5=H4jI?Gm(+|r`APuy
z9IbREh%|8|=j$|n67oH09IuKr+&f{Z%vQRd<p1}|#&eNxZ>G_&AygjM&ZG|NpWUy&
zs`}NVakv5RI}H25KyYe|X<R#8?G`^PlQ&R>gX7Pw at TUc$i*tjEzS3aajG{KhIn<~q
z#r|2WEm1qjAenXtc(hXlvjf|VFPqQcfa7N(hyBN4|IZI?iMz0=24gqXUHdG98rHx0
z(?W$^7xM4xYly!uxF|y7&<$lvub_R!`m6h&9~^jA!pRD#`@Tl1^ru5Qzi&o=O?T8!
zUQ>$ar0VPD{Ez=?oI8k^VezwRam6F=;y$TCgZ5~sQ=}cJ9o_kT^<?bBO>r at 7ohkeS
zjswEoF-P<ThKFb8g(rArk=j2WZSdCOSuL&v#3)Y-tfx}w0)e<^xj<|`Ln-Ne!}MIu
zJZr!MRqx5qc_#RurutzAP$H+xnkc<Hf~!qX(K16Yd<$vv5#-N2NfpXFsq$A|6s}L!
z816?sJnvWP48g&Q3 at IJV?3BN$H(_5wf4~IG-xQO5Da|MQa<ZRF$1%h5H#7cpjcnqY
zP;#8{#WiX4Ja)gIea=quOeW<&&tYoV;~%rvl>g~^3wsUQ2IN&C?}}l9;k&ZXx0nd}
zX?g3aTVET+iA>=l?fO_+ah~j#&nNp5aSeD^73t&kxg<X`lSs4q07gzjFTJr{g}IPY
zP=s-GYlRkdul#|H>9`>Z)}Jj#ew-3qlY`o5nPH-S%aV5J&M9JyQ^-WsvtsmL${ZE?
zsTejcxuZd}k5i0(RKm7b$jP>CLLI2z|EHt&rKzJ3*lTatRZ>GM<J!BQ57YJ+3T618
z7Gh5CK-_u_>X)TbzR_x6z_)F$iQk5p5B!JhP1yte6jc{ZbckFuC}!5~2(fO#xM&$V
zRPeq*LOl at B(Y#mK#q52qYoKcAn}YY_It9*)UCfqGUTI#t!&{sd^{pcYu?ohG^QtlD
zQxlrasR;pRYo1EX32ljvkQRYH{afePR-q<S`PN5VJI{aVxiv6^Um0D-KeuOD{C0ZZ
zm3W5Q74Fh6PC-7HAv&+VoNtFMw=vjwQG+$7*{gIwAvMLRgDr6eLj&>o>DA;I1MHnt
z9CexadZt9ew^b?})9qbfZ}>jCKw8S%`EmkeLV4X>Y0-9BRN*(+qMp-T*nun3dxA$J
zG+$fwU+Gd}R|elYrwbnLDv-7j-;HC7H1O3ry4{`+e^Zwt at 431CrJwyU%}DE9zvwj!
zE&LK=6X%V}b%@(BF+;MB9ZE@?+?<|(+${+KvgYE?%u&iKZ%O=iC<OzNx+nuTclgM5
zWz-$i&vnwG%B(dT3eqBxv!QeL;zC+fp)eGWn__*uurC<+8?Nt6qE#D`+(!dy5dW)V
z8b}S-JzKmA?K6g(kynwor_d|QK0{K(e|Ed-CDh44j?;<bTfGX~)x%ZibyJG=Bw~No
za544+?H1(5)NwmvM+~2`aU?SGTy6*d8LyvhgXB5U2E>)T5~U{3;dTs_qTe;>_uOWq
z(9Ia18yP73<Yeei=*u?!r5XL}vzk4kVE+Za(a3Z%%H)+oQ)kk4F><Qb at 2qRF3}s`C
z)M4y*HK)n8?RwdDr*diNKJfaBl>=mafo{e<vFU+ZvZJrsH3DbXrAV<V&pmz1Bb9!$
zvq&9m at KPV(^Xn>>?&%hs&>I9N9EwV3oND9=yJS~_t(?i!k3MK&*QSTZAKO;IL%x(d
zfy=$`F7-P<d>8S*t-Tu at _mFSu>Sr;PF8x)Ep{x5XdoCg0xnX4co(t?V+yAbp9JEiT
zO7){0%bttUGXDisjd>e4j6OUpC(nm%%OtG7v-B^s?)v*R4J-IBAt#DR(7w$uQHM-F
zs11E{%E3nc=yT<fCj?@~AZTm7uRb(UEKH+iz^u#M?!;-1Cd3pR64px#Z8Bzm&^)ez
zZfYvsn8dbu>GD~3{GGYyQ?|A9P0_%Mz^;M11Y>UswPSCRdSU685i6msH6flxxwFwK
zHq`r=ax?-fq4QQvNM8CA(j(gyAr*9cbN^t|#&tU%mj7t0r&<u#YeKH#avb{z+cM!r
zZi>A$Dy4Vs;uO0CzkMN@=`*q2FCWD9eTIWnHLgp+_1)Ntgnf&Z_B7n{fc&hjn7X$G
z at pAURN=vru4#KbC?Hi{ns>QLwn-ZyUrxeE&<tuRPAdZ=jOQeN6ML1 at 7vnEbk)R<i7
z+R+TZF=Wtzopp$RI1{bCCIJrHfcS_rUPTvYM4I&2zc|CI=*%ov{(1HMz&^Ei2jURQ
z&tr>PxhZy0q*!V|dqreFXH;KDm!q8xyi;Ufv=sY|(6j51tGOAzsY?8>>#Jv~a_Uy&
zI;IMI%on+Nw+7CQDz|BYlgo~*@y-Vpp%%LRW+ptj0(lR$k*3=GwqnFDY(@OS9FMv$
z<2EiNe2WI(3NX{}12dQ7+KHHiI>`6_#A!8k!1Q8E{IMkOH|oUh;~M+ic<-p7Z0>~+
z+=Kk=*^w%)q53KCt!k40Jx3E^C47)PhhWpmbHpU?!Zb%ZuycD!4ttWjA*U|Fy5$kn
z1`!i1`>>H*b3To!LmkSxjU;bv*J7M=J?~M6czzOx(}mc6F>HH=2M$cW2kj>77w8?{
z(ABk&QC;NwNp2r`WRApUO?-q&Og8`5xBniy at uzQRZ4(i&DVg>xijnoIbg<ctMR24s
zvL1Hdjhd9OH!4A+5Ad$*h@)xtB3M$?!UKLAIp#>+?4C~itoU7mo#0*MT{|3LK6x;p
z?qqX#?6QY$nugLd--JyC@!(Tm=DkGMyk-eE_3l6(Lqn4Vb*SQ$8qXa3<`bN*@t{i!
z{N-1~R|eTr$VD8yT^eFOnTWa)7fG$>9ND1QCp`J0p$pqR6WgEz|2Y>_26;FmvY4C?
zDo0=BLtl-LYzV0v&#TRk+#g~dFCg^}Jl`Bt1<BE`!0j<dqE$KdL;3fAM)o6RxCU4a
zzYiP|H=bcAesEo%nwp_E?<+LOhAa7D?uq~z#yAf#J;23|=b?>d1=pf3qp!BJ at jv;v
zJ|Fj%MrY-eAV1P6)X>dGEDh{{*RElWUdgxBJ~5QN?<i`)9BJ10ATIJD)7FPj%ct1}
zds~QE{#AHF!3S*>ga+h$47qqO$z>&>!r2%l9?r+Nm7|6(YKT&oF$b+X5nDj8#>Psf
zf1p02l;myr_dl>6mQcAvGR+gfm+FUdH7j_?muEj5TDj&v=nu`Px32bl8 at kM|BqrrE
z9`NoGYMLL3wFn(X+#fYXE*UXJHcQ1}g#+MkIL;T=_ at f`<>Tc-RIF|RlYI|d(d!sIc
z#!WQvO4etZk(&oG9>45pAh99MB4P(3;|Bd*rc6rx4Er2x8D)~>N7C1W`VTyS7r5nd
zd7|E_upAiJ4*V_?`$kB`&1LeGf_msRmr30k^%1OZFh($bnfFft>zJ~sKw5+vheATT
z!ZCca2H%{k`Gl<juR%;&C5aCqc_zr14<dEdQIm<PKs(lB8;k9~@OuxxH%LAp^3IY)
z@)ThY>$ffPXtiExmh6iflA&(=Me9{kzlPQ!2B*JhXq&qG`lSElZJ|D at rlSe9ZJ6*4
z^0#rnK7516u)IRKwR>5Ry89|@+a}aT{*AQL(n;F?(beDEFN}>T|N5V7f0ZWA4Lx%;
zHRPnR-Z~_fh)p{$5ZhnPw!z_#5QBqzWATGu+p?j43f5{|)T8}v>qBHdLav}jHb1eb
zf~_};_Y`aKBe7#@*G*t_t{_%pT$%KB9HBeD7x#|51RB7fb*&it%Mi1M at n<V$<7x)k
z*u4(e+~wZHSL&M7Ju3)}!V~^y6 at Jf=I3 at Ul#(|TYgKb%J%FfP`E5Q4foguPHygMB4
zI!@MtqWYICkGUO%j}69{YzC~a>SU(D=brnJqxiW7+ZBkxfp4_$VfqUJf2aDpj9>}!
zz+Gf)v~1YiriE{%k!fBkLXP!0s0Sf)yb|~^X at _$T?qU7wgsvkk_%+_V1shZi at w*dy
z`tQDZ_L~!X&LLkjYSqHVbC1Pc6KvOMV6AKHsq(v!D?LoH>{Vg?{8~D%`vzo=?-_|F
z;%3K8u&MhEif1KaI}_h`gv68h?}SZ at jMrJ9{|K|%9qjWDcbm^Y;lnuQo)*+%*f+3>
zkw|vwkeeHPb2ZVqg}~Ka%yGZ@$RB#{G&-zdpawaY{PZQ$4(Q)x3Rftk;sBZ9dmOjK
zb;igpzOhd%tlzA(tC?2%{){5JQ+6>@y&3lKwG5p_?9PtbIG?<fFz^1u`U~d|s4bKw
z;6sN|Z`N1GbsAP=9;J%pmzjhxPQRJCOcm|dQ3;%^8!KQJgRU+2dwu0=HRFnm3!K$A
z_CM}3F!T9&1E|wAZ1q+|ssatj$!>U{ILAC at ecVSnz$uVA2{tdsd=K%)k*cQ*zxYK>
zzcC&>9kJp%#ENJmYOXx$wTS5H!5rGuwR-rdU!x%KyypAwgY%hEk514(tp#;v8Kbun
zxtg329_FhlshpJIO6EA)848=q=cx75=^9Gb2})?~nnM54^n^8??h1`=<kyW!#9w-S
z+lo&kPWiVU{St9$tAFnk^wR+UOS!nugDU*=ZRBoD92?s%Lkv9pgMnX`UkLJnjV`CW
z{r<d`W~FBRKX)48kJ7AvYiA+Jt&H4W8dnazA)s?Sy|t3L!xVFJz~eJiwNb#l at h-It
z>=~4bXRC at k_5@rTT=BM}*nX0#)twljcMtxNpE-Q;87u#<&p1`tv19Cbaa<kyjO%zt
zsr at 8Vd;fOSOndW0963IjCmVPX*iYT${nxgx(2KSXrCWb2sGoV2R!15yUR_*7 at 0F(z
zp4n1By+drX9-S<oyyJ11_}E5PgWvSW*LQ;+#NK!FZ^H5b^YJ*$ovI>-%>(u#y-y9|
zC4{yH&ox*ZCI~NZMZN#x9_&rV?^9fN0J(6ro&x;-CM0n`5#Ryc;U;l$krp;C7wDD&
zx+V4%Q;mCaoa>@$iVraA3^6aP at _<d9Azk~8+;p*?DT0l_D7yTBB~IrsF4jrO{{y1S
zGyeQvDZ2dJfBx4|i6Y2Ca{YW<uak~^=B>NgXj98xME}CB9&lwmJ at j6(13Y%u%8K}$
zpYM+{T(bmA1<Lcl9e3#jB4LjE`Pl|$D5w5>JMgcyx(3P;SLcX^EnS}MxS5($@6|4J
zQ?+&}S7nz-FbBBUZ#|$dUThs~k{uA%IU5I3rxym~1{ZY|fX~z;cD7UCI-eJk7oQO<
zj?_)qT=`$R-NN0$wUGs;*FZz$Bfa~`9wYby-TV at 4%p}Gs!T+Q2B9Bg68L203FLVvr
zB{LNZ6tt<w(mh0E!jg-jEy)hoXRs@>{TWyvaB at 7u*}6V9+SDO&wZ9SoTt$zd{d^wi
zf6mn&_P*f6S1WPM(O*3D{ksQ-?z~%uF%Ss;ml>ad_T|V8$hlfPkUFz;AeHC>4qB)d
zw6^6)ke^j{Y`{IY6x#!2%krs#pqBMJ^Ws;n8!!{Uw_hk~v+N*q0QuiWnPT?X&*T_%
zO*WpbdjR^)u~obJt-Mpfe>iTQ%+bzh-;VrsXh+17TK9pWL)L4;5xHS~7r(Zz9yFE`
zx{C`VW|RMPirv5-ud(YvlU&rAET(F}QxD?TfIjYbqfPPkpk2YWVmfx<z>-?>o=9Wg
zRjP*IQgB^0rw0A+6Y^_(PTq2~Jw at NJ*cvrGxG+X1$m+`xtOpJXu_gnrA?Iy1`@O|e
zN?Ci|Wg<^U9$ca#bdPMbU*)c#Qzz{Dztcn5DSqjd?WC`-y%pRnn1XRt`+-gn+?FF~
z5b8qSjn6pSglBlgy8}kX(<8=caj^NO4)rdijCo+%66BS2=aP2?z+XTg!*~4bC}Hs;
zuP|@HwjMrVSHkfGW-8?CG0?MReSNQG*C4@$$*u4gAEoyc4GJ|S&{rUv_EI(RUm)Lu
z9yqctR}l1RHP$P+ps_E%rTYr2x6}o6o<xp{o_(QZtv^MZ&P2J|p(`yc&`j~<Uxf{6
zS$OP{C-D0~esoZ^%9F+67#MThhVa-YE}?(lg-&99_GP+D<%-+KO`(B<<^B^fi0hjM
z_|GzTBjIoS;<iic(c5x&xw>co^`NjH+Vc1HMNYo4`^He({eL+lq3$F5z at okhxjJid
z{~hdm^NsSvGj8e#wySOMU6XURLC+O~!!m8)N`j9=?NK*$sFTpIK8Ae$n7Kkf+<k at b
z=9=O^BKl4D4fx7l1isdnD at T0SI;=MmFdmH8L at N|x*K>%gLQVCm1^Ld(1$n^u at 3R$?
zJQDD2<^m at TI~?Y5SHMc#ck-kVYn08HPxHl)C7{>!iTTyh^Pl+ at 7yDoH>nqH!qu({l
z?_zG1Oz7B-O^6di&C=iJ)-y6Pr(nPRM=WAr;)LvbI!|sUV+rF3ai at gVk0}VPiEO&L
zn%L?6>Pg+<aX+_8_9)~k)<vpd;3rM5yh!|HL}!)dVvLx=bXZ%xKF}DegFg$o^N(4(
zQ-*%YT(e3wP&}0VUY<w2LMg0s)M0#@<0~DO*eulKBemXB|LfZLKdx<vN*Nc2)Wug4
z+Txnh?vz+Hi}!B5Ld$+6IiX066!=ZLfZf{SlND{^N>H!6IkbiGA~jR7)`UHUTTHNg
z@^I9}Jvx+5KO at w2i|O5MF+<r~vqTyXbAiTo3+E7HeE%16%-cEHLX$lw#&ijJkHhNV
zx8H_sJ+?bgU-B<ZibrEx3GV5Doj->E7kMG{xV_x%a?II;Q`{}2rgTCp_bpP}F5x%e
z8 at NKkHyaUarWskq{lKL}9TyWf1ooyEF~9C(!nuZ8-~nxO0y=7Z5u4<t)IB>3b&yQl
zSX>hqT4h9SBy!IJV*7sz_jI8C^)sM#G`7#zk1kS4wiakcgvj?<LUhdd6Arc(cl?Ry
zR{w2iGkBshv8+L)9H|%9b>E9o7A)m26sT- at uJl#f0fHYqf*8c)uy)vQ+r_R`7X at uY
z`(r}<_2**rB3)5*k1HthAg)#SN3N<Bw7#=nNbr;g-KxLEgZ8CE>H0OOl?eO4 at aq`0
z!4$2&W)9Yh5|J+ at 5xGm#vEE6OYdjOM=6QT_3>^r2aloq7-B*Er04>jc2wMJxvRFqk
zRt{o&C~AXiRG1Z=@<RjT at 6i=t{^)gr8?<a;dDfGTEcl^JucqObg?GtdUuXdjN{_6W
zN9ydPTL)m{sM*<x`(oJp-d1V~*8TT036FKJ<Ya|btyvsyivA?pw3y^I*VsNxM1Dw&
zm(?5<`oLXdLcT3uU_pSRTlsE$JA*uL)NOi~3-t%`%inr9z#RXQAaNWxpzMWh#`t<X
zV>;!#Q0bbn*&WdVzgHyI4;`?%hi|@ouAI-?->-917Fq~@WDIiMX<m&(J*mRP_8VgT
zx+aT$+EW(&loE^Hr9*wMB8&g>k$|^+CTY<as?diu7NX8y3I7CWL;mxD(IEJyF1Bsq
z{6y5xRK;}Y6(^fHnE~ca$m!Y(I_2{T?&ekRfFgs5`*yeqsT5O$8)7Q`Q|o=v|5Z50
z=WGc#8KgGj)^;0es?_56e#6i+*5~<;G5y at E{oy|OKMZj4B8^mDn<b~3w(?F2*W1+t
z*`z*d{tTOXYkM0oD1Qs$!X^{HwhgvI*RPyBR{%FB+_d9Gyz5}Ci9cf!hk4R*v_OMA
zk+Wqf{Ksr%K4L-(-YNs~Fk>xJvvsqh)CV{!91Es*yJqMH1?D$5%eQc}q}`DDEdi;U
zzBRnA at Ad+pG6%giZ}MBSG^#MQ1AG?a0<p#PQQ*G5s72OB3OpA!kX*#XDB*KV8ac#K
zhE~05h$;4e*Y&0MR$z}}$BM{$8Gin8$m3J!C*xcRbfflwEAih2sN=6Yf54cmv8kg|
zeyWlCqSiR at YE-(nJYWRpKAx8M=WB=M9OPr?m4X)6$rzM<%i=a#$Tg0GWW5a=IYaK}
zT@<J`Dabp>v*jfP^?#KGeAqpRbBw!4*0)OAUz=mT4xdB at YM05rEs$`F$lUm;#rea=
zq;AOIF+a#`zd$!^ikDoMpyxI5ePsRkhTnJ}Ko>aEhP>^}5pN|^Jjlp?Qzn)_$}xqW
zPi_ at _Y)?CusvD-{q#fYxQr<{JtG&V5!>zYo;5(h^d>>$>j>=l$^Jmy^mpFew`v&zF
zi%|=6w8W#YO|0YDN)Z=Y1`K=|a?Lk!bhdi>@5dO<i|8lho%%E&^rz%je4B*&*`7&d
z*{j)a9OQ2*2X1UEoK{*dqD at _#Piz*fmkWrl0KH#I&%JR2xjTKuX7Q)Niksy*W~zP1
z=;_ixjpTY5u!q6$b=u`5rkm8B8|$}sQPTMO8&A+1m=_FR;=ZpY at B4~sPk#PPY3#xq
zOM(@cdvf69REWoFq_lK3Vn|7!N<hy(fohGSdl2IQwE!rSy}H>DmK(JKnD3|8M-5n(
zG)J!JyV}z1(McVotAUk}Ogki!+;<4IPg{1#!cCD4h at nYwJu5;^P`-nz>7`?iTvl*f
zd+A{V=qL5)a9rV^Yy;oXo<#nJL{7OE{N`u%=o at Kl9?9j57*@0mct5dsG4`ut$}c8k
z{4BF!eG^`IvA^x5<e$*LS_b_)Q$(X?d2gklw$IdkZ at bKOY67#}{T+90ivi<n41H3%
zs(#=-VOIAD`YZ=|QigVT0z<I at -yaKoa-!Bzk;k{^N=W}lwYOTyxD;j$Yk3z4-yPe^
zuL9Pnh1EwDL#M5`rz?n!%X*t!x8w{p#eS6Fq$$3=8gXTruxBu`Q?{omV4|I0Zo^yx
zzyFr2kg(&Q+yj3Zqc>_T!Yn~nmx67VmW<({QtNMz0N+L*Wd=POu+|-+=GZf3De)`I
z-{=dWkdKZji=Wp$ygeIv%c_|~#L~ouT^cyRUlEO1;tnJ7ZlNYykjXO(dA9VZF|LrO
zaSG(An%AjvIzQaRbQ5e4*6gR*ZLvom<hg^4&+hNMGnnG#YS3*TlZrNu`88oIG#O|T
z^QgNj(AgD?RHS)GHAzP$Vg#Gemoi$(q#~xT24g85+XKMxm3kZ>t^}?3MZN1h3qD;K
zxC`sRuOmij5hI}sy2qk4)Kxmu^-qsBdCA5kyvH)}9>mHP1 at 4j?19xHlNXA|!!6uP0
zASnvd1M7Dj`NmD~|IYorHdx^Cs3L21SKr5uqT9^lLM6e)gqsqk+l)fQy%3(9u(&OU
z&#}>*O4ll2Ie%CJ><nt)ntF}ERcYI at lp6gP+!9A7d#nWfGs33io#@I$j*&X<AxAoU
z{IGLFU<i9Z1G%>%FvOXP-<ru|VqU=HGnuGD<oHAz#-`%Bj=&IkNni-{S2z3r7Vhc7
zJ=3tY;G7k|QvClM|2qRia!lN#WX_#!Or9UziZR{R77lD!rt4C2pUW at 4-i6$usB4hd
z{oN}8f>8T at hlPI=av%oyzr5~yK|a<Vz7w>{bfJ&Cza#oIY!oa{01csMLk7y6{-`@~
zOr)7{2z;uPEB>9oIpca7fPWF8Hbbm4-2?uDU#GTN<-kgFRmkeG4f1 at DO0Zp}(!du?
z^vH?wKV(2Pc*R`QIlm|^cLGD^)X*u(#x_fV#w&cMQBGnxCHTpNGT0_0a?=^qCRvkt
zqrzrEZimK+{@nEC at BKMFT`!$~^qO>8>P>k-rclq;MlsrJ9S!^t$7W%HW8)IBBYug<
zv0;hc at j7aSzxGEv4wAXb&e0&)5L=OF6}(;6wqxi1ltEhd8~A(XqAW^eZ!tVQTLBDI
ztD`~pGjkBQ!6PK!Q*bu&IJI;SCtsDBFpkZ at o*LgR0DssGnRGo(99?(K8k`57E#V^H
z(qHq1s7K6EFmLVn(D4EKJ3O#Hv>>^aTuXPD6I)!ljb7!zFeF}qtdU-2jJk77+M{Wn
zg>;KB9{NH>ua1#wHG%^R6*wk$81cVJ3;QD{m2t&w`0maBdKYk;c-MV9E;+sshA<dY
zSZ5Dzud!FPmLSG9n_o$AhuzQb={$Qdxji}sV<%;OtJS%xvA=B3YofhzBZ6Atnaana
zzKyKyQx^~I$-)||8*4J~kgy|v;_ZgW74%iw<exafhwb3QycU;y=pWYG!C8XX)!MjN
zS}l~&Ng);T=3u2m17CA}r4 at c*Gvs)xa5wS|s-4$)L9Wnb<9J}Q$$9}8qY|7i{>#I6
zmU64l)L_i^)Ad#jXe>(Z2Ubm8 at S{FNZ$1AkW9002_IPVur#LFeT&K$qdiogfdnw5#
z at TF|4=EceaOQd3a2}e2epuM2rdR*Nd<TZx;P at J`Z&x$!JR|5Y&QUhYd!N1RWzjunW
z2lBj;9qXz0jL~Yu%cLOpT0ZJpS0ffff%?I1;6Ej<_ke>&%nfyyHsHAG+Eo3Qp@(z6
zk`~!cQIb9pzTqrmUC`vL_Nap_KwYn65w- at NH)IouS#EAK3v*ndWUNEiV_+wc@}4J{
z67ZQfoC`r48E>`o{^eR*Sx{DVKl-QNHq~%F(nruAsc_W4lILh3^m||*;zY7s?*(bk
zmMx#Su0~+WD~hZWI4>(4##hu%#UFCIvb!HKLDs<6nW=NMu3QfaynKGdE&9<hV96<|
zApo-fG4ZEixdY}Umu1UxVyCrpbh2f34I{;|k|mcT=UlvsS__lc*+apbcgdupu#plv
z%Q+P>+$ZRon6v&_OffHnNhJJ#ut_M>tEm)w8YA7KhRm(MR=Vfgfn%#`2M+bAs1k09
z7w)w+;98l;Fk+$eoKqpEC-#-tKf%bze at ctm#23E1vLYp7ie3a=1Ty}Tik0=IOF3SM
z3$m3ae}A^rqfg$iA3<GX74!s!9QlBN<!r|@6pV!bqO*uRt5?A^A<u>cx<!+}vU>#d
zN%_e!fpKSXpt~_QP)j+m4tAuk&z9o*k8qXXtH5MmLS1OA&rF8;pt?a-#uoT6j?%H9
zqdVL*8qI`59{}z%V}3I5!_kTy)S|G?*inwLsA_5U+wZO*|H&A*bg+r7d9!rA?TB51
zd&C)!CL?!BbdSI!$b$_q_)ZbV`=KDU4sqNgB#wJC>eW<mvax<$7h>MDOy11FdSTO(
zWFK>zH at Q9tZfS;%ZpQlEqJIC^kf-9Kf~Wo0=UiQ=xN&ubPI7hVh;=$ID5l(B1syvC
z<FdxNkb~F*_L=On<jtgw_}#CUaIHf!>vYsvBj36fwwyvzR|Z&nD;;YqwiiS9EuL8w
z^$LlfVEG(kF#noL at TP(DNY3zE!6a89V!2X<YN8K~8$H^w4nGdvxZ0U+KSeR5PrleP
zIj5>d_IY%HC!RT7EF}4Ss=<3Rp{LHXS&3Z@?|q7_W0xEy`BTS$=lAlp>#WA0Sx*0+
zrBqp1ZnJ^@c<~doV*Vo3WBR}7pU^#TAP0e#%0R4%33D$)_yKv3BrU9YU_UVY8esT6
z`G0ktN6zc-RhJj_>zjx_LHfRTdblZWzT=QRi_&-_7Hf5#t%23+Qo|F%_dDQoR2|{w
z6P=~2T$z-8h?9jmE)O at UN39xfNlb5FF5y4p$d5p6!8eT&os-USUE=!`Y5Gnu#z!Si
z|KD|4!b5k+nyzk}MH^^6u*ubq8s3l2Yy2=51q{kk?u1Msv}SgEPh{ACWG3%Nl4lR^
zZm}I%rYOI#JPUpsWxM&)s~wh}Q&brxhD^;bnzi#P at Q>>pmB28Rurz%LeAGbhLku2U
zm+j^gL5c`py<z5ES_#~<0_P7p+qkNTRy}Bk at o^h92uekR50tYsVek1lg7+il@>NQT
zcU6EtHTCo|ko&B at dY$jl{VR0i7tseVagxVg47`N;P3mR?V(7znloQ{^ST8%5dWi1P
zR*Zg1=iA7*A^AGGuiMioDb@~ESUc2V?Qo2&9pbXu>Xn+ki#Q@@t+&+KrgIBwlu3C%
zW9^)<x|h_H%=?k6V*3S{`<x%hGhz=Ro<<t_*W?f)`)@|*rV9?BFQ?safXydV-i)#S
z65r??CpjKj+K?J%?;)mTMAjPL$-FRM3I786J+O{}t%iAn=<CoE`1Tgm6HX=T)N>Ym
zdpgdYoc#6z{e`7i_c at wL-V4kFT*I(+yAXfWPVQ&zGu-han+KIn=E&05C*}d<%OCRq
zI>Tz-h|L0j(XTs!6NJtF1>FA`nTyFvTM1nQKBF_m5)3 at anQX^;7W)4S9w%if>%VY@
z>8~=e$t767oo0}G4cBT7xq-0)<2~4(priF0>S2$qOZR;<t)@|TKV>%5Q6}B}g3=y0
z^LdYk`2t$>3Hvn1P4GS($N5I~d<i+v!8(=EM6BTM4>#$`z+V*Lzu&k%<S%i320okD
zQ_tk%899&xH`eP=z@&l6QYPMh3^lT|3&eQN^g4l|o=VUk6c;9UoDsQ;eEz{VUo)~f
zzA|6~)(tcXHD?RI&|?kRI}E?}?NiWEu`f4~XOVYoOaeCL-(oZ4rdGb<@2CLZE{8qc
zS1idq5+w_6r8UmvxD6vqIqyvJ8#{B7UdYDuCI*fo#_bcUJKjfjAMyg6dUDpWih}8$
zxx^Nr+f6Nnz0RWZ6+C8FQb&-FtQT9U$S}j`r=+^<nGu~_)Yf8ilKwWc-ky(q_^2`d
z1=g2zY^^b99{k-(tifcEm&l(ORMl2NXLk<-J&gPro#RWFE5?mV&9YK&Ej^>R@=j5Y
zk}3;&xbl0fXYc9vKBe(Eo$ibIQ3!cp(TxkTNz4#khW^{ZRPaL5eMJc)RUEOP<hR6e
z<fnV8K1wYuU6tGa8t34(11k!~;p6pe(b0m#{D;C#KL^<Ac0l(+UKL;cXi#~OT99{2
zk(0DbGbsnl5g*w72*xVbRUg4msH8IR?Ph#C at pHczpKz=kw$@I!SazBB0%DFx%y8Sy
z-*}-D`efiu*;L?a_tGE9u0A;jym|rQ+arGqdU(xo`=ieEpm|U4fK6jXZ{;z^<_#eg
z at n_a1+J8WP8b!o|`hM_?eUPQUU`ymX!4}?{dDNaCozioq;5xAR>a9BJFW{f|;^%^{
zvq4uw_b_mxvLGF5PjlNUf^?wkET$ZE^<S<UFHvfi{|dUc$5+m*u;-5l+EE_{Yt?)D
zv?|b5W?HTux3F}L5oCd`2k2&&uApyt!eirY2RPXR<L8OvCI3a&jPYXceMElBOmv2G
zs&1~}0FmikDz at FGuKaPMHWusW9LVtFTr&;dg)JF$3<VvZW9hhd<D<vUfR28oHeTQu
z^xF;KN2iHwl(kOSpRgW9ep$@-BRYl6IJX?Scc$FQdm20#x(K1q1;rYEZ!hS7x(&ST
z=Ld)ld(#HQvDJPlBe5umD|^jdoAI)@?hJDBFio?y@~hBYT+p$mu-EQEoUf88v+re^
zgze5Lyce903wN`A3E%izvH(9VBZyy!J~$n^BY7p^q0~}3Gh#IUHge212c*VdyLH*_
z!W#dEC$RgT4Sk4(hFtg+y4Dem)^iA3tp8_{bD2tw at 5dUQXZnz*^)`4?Ie5}k^c}Gm
zvASFz`nvaKjOilT{_L#9{m1dVLg>+jJ1a!;=$@Rkoj=8#6=-i=LflI*>Q-C|+q~wr
z-mh<L!+socbQpa{ZoG;8A5qK7=-bM?G?Z<<$A!M|SUM}O?rGwnuNQ=yPNvyPql()K
z=PKnz{Q2iBe9v%``}B5ThGWVdStL);aI<J|n@}`JZ(`}Re9Z;>502Mye<$oRzOV at x
z{q&(<fF5h<Ov+5}!`#;nm)NtIBP8|{Hu>YI`Gy$lQFo6w>@Rbf at 9Au2KmP0NwTzVi
zg5)RUHL=<+z<%|}jmLr&+9F#oQ;9y3G8))t;9IbNz#Lka6Rm{azw}Z+T}kIMKhTfL
zr@{7qi(5jC&^1&iT}|om8=`Amd=J|sPwVaOha7!{HzL1E^h(~-^6;VWt+$7kTko;{
zqiYPXTECvzE~83l*h+$YS`4)Ec9Fdh?bY~QA!A^0K<0~a2cER|`oi1*^`<ABZ60k@
zzdaLr@<n-x-fXhyyR$8v>@~-cM;+&h9gww6{!GrX`9PIpFHH3ReMUd%%#f)csgm3?
zS$cj*neC>wI?}g(7MCBf!3i6QJ%Z#;AaY4=#5lD;?>q=!fz>ZZZX{dU06Y78H;kIM
z-R}(!WGuw<lGt|`W>$&9yvpn<#LXhtE&mecN70(XfX!GJN*Mub`-9Gpd|d3ic9ypo
zh#f27N#roVdhtBQtsig%M88Kr9z`FcKr!;4-$c&e^n5EB*Aw<H*f9Ir%2BsO=B|}F
z5JP_gYwU8Rre+9rTPk18Tb&SaKlBg<)+1Vnk&IvBH$pp~7u|i(=!bZzix+RHM0dB5
zF>)E>xGfklMmECd+%abvvgO_qi`>cCqPq;aCdgMFZLw=$Tb_2!ykf6&4Q%U=z+YuW
z+)=B2KB-xQ?V?-7JO#G1UDI&h?yGTjV*4*#XXe%7_;T0hSRc>9v7H7TWUZUp;g=la
z*$exgsa>AJuXG#${lMQH_?C~%8lC$Da+Yo6yovLh!cCSO=Q#f%)Q{8-!*1d9B6SMa
zo`9~jj-6M}`z3_<Z~AS2(V%z6Su(#)joOUZUpT>!utxdKH5W4T&JN^X_}+<cJcatK
znul*ek2d|ivaJF7%x%bONvs-q;A*@?@Y$CqpR&?Db<`B4X8%goCbt{!SkB&uJiBDx
z4nKu4wUu)?JR$PyHZ#V7#IFtfZzp at rUT!^fI}P_iZ}c5q>&S-Qp at Ytdak9YDqQV@!
zBp*;FN$(Z7pEDufh39$24l{ir`jj1cjFUrvOP~1O+vtN4rRJ3nM4FL<qOke3{1sgl
z{57tJ`2xhaiDPOUSrRe9axJL?e&!3;^a2TO(tX*m1-K+r_gfAnu1EY+#zz|6C@^_B
zW{q}q9%*YVbS at jV8<W^J7ZV+b^C4;bythG*=ea34xtg at mFdDW}rN-l*?xKu^nv&6w
zNqzFl&^Okp9$l_5r6$niXNajm-yk;vxprxRDrs~{;OKtj>Ihl6=|v)AWq!+ioNMXb
zHnA`k-}g0sr(pwBF;|e|JVB{>;=94&j4jCb^A>12AHPS1B;O5>tV7u~?DWBD8H-e!
z2fV-+TI|!QCgLA at szBBcpU-W`HRMo*PT2t&G9tUel}^eh_>_CDvvM*;__3o5w#e{;
z=~M!AKGgb)USUsS-h$lvJYEBt{~hf0bFuyTTqbmMiCsZSR at JYGv7ffKPxw>DAL|oQ
zg?uMvvBO^3bC4=4Kz#~*su$$=_>yhFQZ7TTf~R~CpAYN<p3x-ia!%ne<HqHP_4Q6%
zZTe;edPa&@qg_Xp;2BtZ$y&)X at vbIfJ3{+X==|>QG};GpbdNotrwz`jLG!3?duHep
z$*1Lo at I^UT8A*J_b20Ce?!5(n0MX(6NWG_J>R%9N{-g)w9lb+lP~$nnw4rH;ZC4 at M
zm9 at t7&E5$)yQrFAu(1AQpViVFRb)E~T8u!KuYq2X!uwIanhRXPwhOnhF1lAo?{<F7
zTMXIw4eXF#uW9dHgIb~f at V$K$ax#7{WL$*}vFp?kZ!NhFvZ?jhPps~`#xqM3>Y2&z
zhj^xAt(G38SYzz1Uh{r$HRw={S}aE)PpV%w#VaT^eN- at HPn(n_J+Alkmm;AHLdLa#
zH|7}L)|7ZY1ADO1?=p#3{H4#Yo${ggF;$3#bP|0C`c)I1J=_rw+-q+J##lCL;0V)w
zp)WoP`M+#I4xUvju-FlES+cgRl-?+l#fLa7>~<yd3hYfYu_k+;D_--yJsvtw4cb(5
ztqrxslkjY25PGLQfNHYOg`ew~{3_<Bmu4;X6t)W{X!VP4yjzw?*5<l4+d<v1trq(0
z1JKV*7m*(n_SymdN%;S<_Tv#O!Av5*;VaO=S1=X&5Qi at DPci_LF^~uUj2SX=IA|VI
z)#uF=@<PU!One{eRDF{U8411vULrC~ImAJpUg%_|_IGg)bhGw1m~xD}u`unLnBIMk
zXxf0>czvL|bi7bE*RyhOf at e8&f>hL=&GF80l&IsV#=WsK58_*DIbUV^Zhjp+dGG-u
z12$uBMbaDhZ|U=7jPW6$cP8bJcf9-!(Ut06OCm8iy)xEcGD7cv=?!}(^lq~((K`!m
zIqH0z(}Eb*CiH_U(@&$NzL;q9bn@(2y!V)}9sPe4^Y8nM7Iu8M<N9OHDWXN56_^hL
zyxf)ph|fVR6>PiTG#|jaHZuON$G(GH`%tsi9itheUWCm2HcZ!li}xcn+n(t)#jcpS
z#Eu#@tgTBSw{T!@qFb2np_9%gYj9gGbMOycXDM}P-DOtSnZfEhY0Nd at T%zmT`h;6U
zY(<m;x^D^3&e{<MJ}rSA6E+6Y$FU#BwbSaajlxTpfx(!V_q?YOukH_C^57pjGdp+e
z_v1JZ_6r4>BiQ$p^|QJ(@pBN_`yl*snS?inbjDvJwt?HbF~5OpWidQN?*q*|rHm1n
zWet<MOl|m7sd=2UD39nsL=V4pePZnd9{|=)6FSf6Q-t33iwvW0V-E5+Pp-3ioZonK
z0V6xQraE9 at xT)|P!DsgU&>tSoBv=;kQ`uYeM$kFLD~#6S_#0F)Xpqw9OBH&Y94G5g
z=++*Vzxy~!>3lM_+BUJ<<F6;$brbz=_r*M!1K;j*c#jhIV|;c&PVg$AL%lPSg7*{(
zJBJH}-8ipdUP8`=%H*%X+pb}I`rl@{o*}hmh3LCt_~-^FWX0oJ=sn#SJJZ2SCf2|Y
z61&UF6R<rI{fS5B80M%3=bPa3y=6B=jQO8{PihD at zgfh`4qI4$^c?86H6LS*96y)v
zWcX)sJ<c`S^Cynehh>TQt{UCWUAmsV6zeC~zg42q2L#qfeQPL!e0a^j*$eV?<~#O$
zCWG#Q{7m|F2{3gN<EwrohSjsXVe?`2Y}n at iJnm*;+}&o!-Ml!WW2Zq+_m)q^7=7Nm
z)|2qYyL1}HUiAU(q}=^UZ$4}BuwneM-#)FB at Re>Qktc+&*vjm{9`F`B_0Zv~2&O-N
zuER<ffX8OauVU?naW`B at 3(=pO<R-fIb`kw6_Fo1z at FS*tf`8pf0VcZ~K7|Hy4}8z;
zx=fWc_NwOTu?4h>%rDedTZ|lrcmAW(voZ*NRMc#@!Ip3w`oaRT{@Jmd)!Tp9&t3dY
z$a4(cos7M}kJp?C3?lLa`>(@Cha6hVd~HUXo63MctccXcz#Mpxt01;q=afJnjEgg{
zJB`W)prg!)ua9Z=C%os7JeBCj<QR0F`9zim&AU^Gbv9%vuw%c#uHrssrgzH{H+zPB
z7Juf|#GWe=C+V(pTF{H&CseH6vI#cOY+&G&#GmLI>f22n;pCCAV$F*FR!|dEgs~F)
z?;|~@sL~$PQe73&Up*~t_&VQb{4u)8bqRhazo3Wj7-0kWPJfj;tY1eR=4hFh;<*G%
zlGX-%RayM{ehUp724 at 4-bT7>`(gionnzyO<>{|GyJH3<`JH&Tf1^!>X@!|SITlW*J
zfH*O7gWyD8_?j2&IqW<t?=nc=;AE9Q%JUSQu!oc96coj%ZWQBL_tA&(4CohRy+I!x
zUjq9=8S>;KHw5vaj~ja$m{R_~#+Q(9*t}R`iBTC$IqRvS&0Vi1_Eze;gS6swa_we!
zXmoPx{;BWji4GSLZg)m>*}q=%qCJOv56SCSP_!x=a_b~`*DbWG1$=A^^(FkaXM5lB
zss|qc&melvouZ(5SXbq<e)@Ysv+r1fbTcLP0 at th1Z@?GW?>z{f0vdqsZt75<hB~}H
zmYmDksvk|>jX0e0xHv~i-z~~Q{`aI%r9rxa>#!q{zF#V=g-!GHc;NCZVy9{=3sT>K
zT?P35RgRKLn^73^0#k(iDlI|knFmpO?rxBe?7V0VWL(n7Q%n|gyXU_9QS<f)a;!3p
z$8lM|95!^WVfzfbHti}$u^6>c9nrkECv}rk0 at Vk=oX`bhtn7h5z(jP>MRLf&FxT;E
z`!H|!f!|>6>&+xCIejU?4!~wU%3_2 at sUygNWNJg5DPVwnVQcY)-{kiETx!@}eX%0;
z`5RM!D=C64-e^}-O##{6cRVNtaf5P`2L&5U>X- at ZYpLB$A!c-HDeyW8A at i7iZ-ujs
zuEksd7KdP}Cu}*uvY%-?3QW?sk7NKZ-CB^mqmj9fo*Qw;F8$hSA7j#ASpqD{SB&&Q
z#Qo8YQa|MRET&hsh&i9a4i^Ic5JF;%K6np#BK2a;eZOv9ggEkw^(M!n+JK2;(?+*?
zPab=#HgMwD)XiIGPaM1aR_&6BV-K#|I&bpWwOYT)>ke(5JLVg?PmWqG+scV=I1n*#
zn?7^S<X>;yE36B_J}{-4DCDK+sa|!Vzl7L|XDS`lo>@_Qajcw^9on4ifm~mjnh4~;
zoZLTp47It6$1m(CzE at 51*k%a$D_qV645{6dA;9|H<SD%-U6B=4W7G6nITG^x-Vy`W
z51uLq>cfSb-kFEK!S>xB5f7mZLVQ?A#ikopSMt1~0nq>7+q-}>|An;IIg>YFFXjc<
zOZbs?Bd(pHO#0Vc5*x((ALks(KyVg+oO?%^^d{nkQ0sbyvy)Qde1Yq8%7C`M at 9N_!
zux5Rn*wo%GnY?BWmHo&4<t at tPCH(J5-i3_C-pH-d_#VO8x~3Ztd&IxgTg<i}c at u4#
z4q#e8JwRx1`!(_|@_jC+r!orIn_k#AxTdMdF;#b#eA}{!|NR;NGLvWAsRq^~miR4P
z-v;?$jX#~rT9wz2?~Pbt&v6)d0od*(?TlEVufRL2V_N+iV$PlezRoXgxJ8-t$#LN>
zhZ607M|9VxT-Z5YMA}M^IqF1rA1x)=<Sp3~$Ap~@0j`S>-5og)q$cf__is#sp7VHk
zLg_un7oxk1%;fs_o_BnNwwE9$MeElJ^z#MiY5M4t{=<{DbtN!KUC6=nopmbdZ~pa&
z4*JM7$qE&r5B75$Izl(yAXCTs6RuEuIfrA;o at 8kxcL_%vM at 4t%n at Kx`-HtN6YY1(!
z&^7Q~-F>8-u8||h+b2Vtfse+yukZ`R`Euc<$+osRVnpsoqHui1=K7e{Go+0_Pqy(G
z+DK~G<RMqvA?sAguW5Y}rg4F2%(T&``sh%(bxKb$lbk3E&C$PxG0l&v3DUSn7Qm+H
zUq<@u at gdl@d88g({GzkvByRRz1#3TD&dz`J9Y5X)r?an-X{2(_R4vfA6zw3ksZ`=W
za#sOwY2LicVTu3PQ5e5VF2>qsIp)Pe{acNP2e)P{E~sB26=pdrgd_KgSbMzBWdBo$
z=NzP}Am2S;H-j(nT&Y1bZqmcv#Ld46?B}#MI0ci~tStnub`u!tsZM;~RQ`3e{W0*A
z4d6o~@NZLy5k7>t-1>1-0QXE|j^wAZ1-VS3Q0F`fTTdNViTR+#TB%oV=A_C?IJvk#
zbIdnKa<6Pbw!DzXU|l4Jty%$Gt~Ls}LY+rRUa5dpEPcKLwy6m3eLl!1C!c at mEaueb
z51`#`vFaP<;B;VlD%Qs)Wc-fh36!<vJhY#EZz_2&^4F2~!r#afx5W#=C)nrv>?r<a
z7I2%u){|$6G!ImX44i8AKK=iBpRGj5<}gLO5R-%cdWp<wT#NPg=v>H*Y3Tbf)LH?q
zglg1{P}K|aY~?%ZT1 at sYNgf`mmV*DUY6a=npbFT?kjn?(im`uu16jWnEo7gkc0Gys
zFvLi}R`#8(gzxFRfp_h|IdPDW%Q=)=&`a>_O7*xM at 7?`74X~~~55KcsoS2!$GYZxX
zX<jr9A@|E-%?#8>n1LES@*<x2k8djGG4Ks;W)krZ$XL`h`iJv|$n8bea!$W}4ui<O
z0C|n3TUojoJhiBcT*oOUzSYqexjS(0FXSF39C?$#n?{o+uS0CXWPj)5T?#^X2g&uE
z5YPbn>*OVvyLCJU_Q9ml0X*|4dv0$`heL9*6m0=7V83 at PaOJH>16S^-`g9ih=(VwF
zr2ml{(hs=vqLu%|`_E&YG=lZEYCtsc-Qpws1*FFGBK75hhpI_?@jT>>blwmu**^Me
zvW-TT4l2?%jKTUbKi at g1#io2bB2x1o8Y`2wG^34;f1>Zr$@eV%GkpdBD}4hxHwFEB
z at _XFTfh$?sP31P+Y9sY at l1HFpiP>>qjB#Ivwt`O18ywIK?^Ov^7#ox0lmj1h;9t>y
z40}!lJPP^}wKd%jl+Dd@^?B2`QdwHP2A-6Kygjgwi3~m#-~Ff|bjc>=U$BXUbzUZW
z25K_uy6<6(Rw3>Wc+1H#fpr<7MSz#1&{yr{vS;Usfn}+-qkdt3ai}7<OW?eVTvzbz
z?iFgrm+*>UJMwIDk^HKS^Sw^cd&m726%sxHzF&<wtaltH`a8EF;L4_lNp8oljy{fD
z>sY7N3j2{;G9PQCeCP%5QzF{Pc%b(5NpAK{5=;0hc<?xCJVYWNrLp&O at Rv}zg&Zd}
z8Svi}7>aM4H5oVe)E{G at d7^Jb$0o+Ws!YuPEOs7?{uuLS4*c?<wMD3K9_768`&eZA
zeg@`rD`J{E=xnb!bT06FPlxjLuc3{PpC$gYaQ$n{LD=>7(@Mk~{TiMy(gVDy68}m3
zF>C-MUm8fxA13&Vy!a@@p0Kj3*2UMi6Pz}_V>hc;P7`W|Yq)vHb+|X(Z|f;((blyj
zp3AwD%zeT`zz-7qm)Wd at k077J%{X-}!T9;|ULv{ya>D&$ovLpDzWMqIqMHE6fINc|
zPt2#i at Y^{oynaU^-;b3qoy~4)-2&(Z{xOac at hAm6!^rmL(fgz1q?Uup_3H$`Vdsf?
zg3pXTM|keiAiPT*V>%~^F at 43vl%GC0?&p_D#@-lwLO*|nUk|4M$8yQBpAj4X^KJZ2
z5qmo3cB!8dI9kLtJ_eoUF_H(E#y1jP3*C*kf{i7TC*Oy>ES(W47;9t=_=Nr|k!47R
zSjDr5Ra8Ys059}3Z@?9Wobh7icHsvseNJ2Xd_VhP{wMYp(K#;gG%LU5>JfL+bVIo!
z3)>^8^GbZ0f}0|xX6+z<5%2>!1dB1|y99YlkLo72``V$Sr(5}=OsW|1Q!ZuFuC+wY
z!VbjeDK3@;YHq^*nxNwSkL#If+KKzwbpg&7Xc!YEyH>J76*Fwlcll6|VQ9}G19FN}
z`^S9ICM{R~f3%6z+Y;QADm4+pz_~Z!OWwYCV!Jtk-6nqb6ZyU?bVe`QY`R<!WBL}c
zbq-O3iMR1$4JWn1#P_;*0P(a at oE&x^K8crhdjqdca)^SjLa&2fh<hD*H%eBd+$ay;
z3!U4`VT8`QV;ULHQ_dl_(fJ;1#Tw|r38ih2=W}-;`kRcuF;gG%s?hZqQ!3bP>nNqD
z-m`SR7P&t1nW7~P;ig&&w8K_T<grTdRiK9CWMNWfYw?U(l-OPzlhRvo#)zDkWvBrG
z|H0Nkd>ghxKKmZtf4$?K|JOUJ at s8Vg2e$H`*mpz(*8LtI*945b_@(F8^;>kKwi*uV
zF~S~XvKO||Y|P{q*K&gS1JAF5t>7w&6~y`=nrbBd<lI3q&NWm4`pL`Q#H+p7#78a?
z|EEY_ at lZo{q<Yd1V}c*1yf5G7TvCl^BWH=O7S|+=Kz9cp2s#VeL`#WocBhXW!{?J%
z0*ml(tQS7CA6=EzkGW at O0_VD>QB}@V-IszNlFhJlJdJv5BH$K_88c`@<e!NHJ%ZK{
zeRH=b=9|ft5M%N;O<-L5G)x_QhRTV1$9%y at -{)$bqYu?$y?QD-<yxC{y+?;t1^@UI
zAuz|n#_$9)^QY^ilh>X9({-rNL3f5H6e9-&zF`Rcjks^{&Zm(#5VjT6TnYC+IQd_J
z|GRB9?tzR`J{iytQ4>~~SoPNGi*f6O9}OHT81yu8Qs`4O>KS4VO at U3K3N|g&_*(S?
zJ&bj9jibC^&<i#xhoxX}rimul<fnzGts+o8XCQGl$kUP}a3$xtw@==8LvPMq>d`^s
zf1;GgN%b!DDE=d<0as26U8+?I#Bpx!x2(T;-MB&;FmjT%S0aDHTa*DbmQbbpG<FlI
z(}D3yM{!SVAb88cri@<XRB1r{jr}ApB_1{3=v~Yk$YERw9MC@?(|ukH3|`S*fcQ`$
zzWWK$8v}!LtiTk^8v60&vn<X$);WM2o#vB55$fn!eFikM3$Y%pN)ANdL%xC!PvKvp
z`Lx=l!Wa>(hu;eJ3f6x`a3Cz5Fis<`!DqB1x}!$}dA{4Qe)5}d>CGC;#5WVXxGS38
z5K&`qy;ihB#QI`u>}_%Dwy6iqd_Np_IJ-Df=MH>t2Jb`sZ*=@npuk#3Lb(tVSPq|U
zjonIowgMNY!u1S}*TY|1qc3w!pNbsVn_g@)3U@=_B)a7;nS at j2n(n!s_&((?a4g{o
zpP1!q5d#;l)I3^B#-~ohSj1PEa^8uEG1T{NrzNguy~(!TQMfRY+~+t#o&{WfKPSyO
zsyn{&{mK8noct&g`cTaUUnt;_Yoj}QHT%U%jrYIe-QlLTkFZ`?iS@#ih&lE&v=unJ
z3BGGDTTl>@!p(EKyiqriKYxAuCd313W>8Yp?<wbIg`3Vl37p(s<k^?ls-f4IVKdR9
z?pZnNG at P?*;FHUuP at fL*0$n2s{wpTu0csc%9O-7*&4>)<=DDVWr<#dua45n}gAvf5
zvdEe#V<C|fq>ec30?UMMFEMgqsqA+7fUTbS1;5+EMq-b^e9Omm_0XM9GOJ;8wD77N
zSdSz>2YsWR^;Jh8UIY2+_}{e^0tZMij?Z)CuHywF^qIznx{<R=5a&_J$&dckt`Se=
zDdZ`uvhZxGznHVd^(|-uAG+&4;vYB7cS-1)aMQ~%P9yO46_BxIgQ~)v6S)ImD?lCN
zfF at fOf2I8xcu+C_lZadPGfoRt;7A3(+smu9A0uOBn#^%v31}F-#g@%G0lS9kZ-K&t
z!}|iUrT`8!O$h!_vcpMm#?M1mo3nW?@Tal3K%e1M_Wx_(a~thwXMah7<~b9kbfkjs
zrSf_9G)^6nY1vb_+0Ic4{hs}P=-uR%@-$`A`_p*+uKUP4mK+<tM0A2c26M;*`CU-o
zz1P6%vp31}3$jQo^U8NO-Ka$_E$ZM_b$CLHt)Y;#oyu`NLzxLKu;cJn^#pJ3pX*3R
z%yR};39RYGwlvs(2fgcRjY~)@y=AiR9n~hp3Dv!=VPljkx2kU<wq_*l4ejLl9!f<U
zNj#^+G7Y*)pt{CXpbIhu=xy*xzJCdM+7k+gTq=V7DI9mHmK=8GgLkG78wBP*>7Uqt
zorK+Grt4eu|2AckbA*5WCh$4#*I-khhF=))6&-p*XjP0K>Q?58d^o_l#XQCCKSJ(b
zUE`8M&&wtJlhk0}`ozTgkRB#&M0^X2!E}9#^<y6Yj*NXb@;oI3TyL!%DpmWT&fwYt
zi5DA>c&)*Z41fOf at aJoJ|8{5><+y%I=0=+??_Mvyyu0WxJF`hU_pL0DV2yrVo;XK$
zGm*5<t_SZxUS#l=4*g-^zFL4gIRczUZMU1mbisyO1-puw#Uu=}x%O8h4}8MX at 7gSW
z`-hJO#tLgXH6u at m)RYx%A^f9+zmj}6>R=?f?{Kv1PxNZGpRnhyhYb|5>=@Vnws6yF
z=$YjCxZa%erN9c^>i{e7@|~mn>le-By7>D^yg9Lz!Zzm)T at 0J-^a9v$rj`h6P>bov
z*&~sS+`Nct?lJJ>XRI^b(=rw)HH#V$bC%%07JT?7 at DSSQ6TpRJpq{x6G&g;n2;W=?
zFbz8izd+rYmC-eQEbeGkD~XMp at V$Xw$3jQiJqB!3WjT=_7(0pHCfxsi<pTagcZ%kM
ze_XI)?rZLwLC03+Mja{69eTj(sk_M-H`g=BUxkS48C0Wp8u(op=648q at e>56fjRI$
z&hb5!;R&HNh*^Yg+E#>Pe|76T&cXK6U74%Y%#DUUd21kY-D12wFYIbE@|3ri_&rMM
z0tm9$Jhj<~H9mBsBp7q4=a at r+7`arDAt;s8=!yn5=MZo^<&Yn(_H4)wH&x2nNBAvO
z!6&}UG)JXf#uN*?U<aLzcg}EFbyq3ib{4KjJhGASbAlzllK~opvbyQlbZmpM0JxvT
ztcw=(FY=%sG#WIX>jK2gG+?bvTOY1Po<h2e-Jk245peOWaqGj5l0>!p$^u=j?<B8k
zdHdm7^VZp*#ZJ)T{g~F%z(9hwPrj{<21e;(&D)Av^EAW`V;%eiCyzXrl{suqd;cH6
zdw-`1S&J&0jD&ajH~s&n%aQ+uE(d<63+PY-I-Ca`%2*n8PSObS=y$q|PoJO*|DkAN
z%e%6m*7-M#<HPJ6L5-Y=ac$er*&A;9F$(%!&7^);5B;wBffW8F=Tpk05261NK6~pC
zvhE7_(RPr3$zkRF521tI0^VJY^WO>&k~PYQT(S>L1M1q26=ALLb&yX3%ZtexW$UaO
z(ifHBU0AQyE=kl(&|g?z<GTfRgkFuij;pO%!pW*F!Zn47bE8Z_x$eyWhqJejYqH+|
z$5WDm<v0pjI!zJq2C^84WJVcA9?v90B9u#<F}0IsY3cEtJe?S0fLzJgE#erk8^+B*
zWMg6~q9Bz{%NxL8HZ~@j5|zRv<y61t`x<u6_w#vtAHT=%_s1T)xvssh_x<~I^L#yD
zoRTBK0=Z=_*4?Y{Gq3R4ABOK at Jh;r+kmX%(*aI5;%T^yD_GZ$y at nzVD+u_qtvIdb0
z7`Ci2+^&Mr3tEYMA0G6FPGF)`$UCWgw;N}GPC1L%+?t!igPaG*nfc%6B=XllryTw#
zv9S?-h}jR2-w}1&LC(WE5;sNU;BU#^ZqWyyg#4ux7cuAVYtWZIyn?g%mys<>XSR<V
z*AXujy1{W|OOZ3dCmUmti?L9{S6ktlS}cC-66~~y0bo}KHvtoP9CND!>+Kg)9G*MP
z7kp3T9h@=^94YILU5j}?fb~=rpOWZsfjf_`OFT$0#h$r|-}2TZS0P62 at xDqjXHpxT
z98&i{Iqb(P5~TJK#}U2<b`O~(KO`qUJ?c^0TZku8MJAJ&c1C_4!ruKDTTAZo+C~uP
z8q8lr_(9#f0zY;1aYvvV7E at +J#$aZYEJ>%9Bc5KIR6}Wjy)$<Wk>~n;g}r8ReimfW
zeC~jA6L|Ag>Px^2tb;#m at mSw|N#ZAfc|QeC!5rj&KpcKjI&&s%WdmnZ`82V`&}Hyt
zju1Nxb&A+|i5-S6BX$^k*CBRUzaXfs9(ayg3RvmLgRN#RIAwszbNe1~RKX@;5{i){
zTkKPr(t<b%A>#Is^LTBLt;TyFxOqrE at F3Lb>}q6NSS`EXg!2xZRM^`PgG;ztMlz^3
zV_r;~Fm_L6v}%Qt=W2&7D(*FRa$-faafRlBR;Kvv0`Sks=Q7+d&x(9N1Nl*jo1$H>
zz~0D|U7joOMeegJ8K`#*@(v;Y58|YwxNmspEO{R6rx!?`rnCw9eQ8bfa`(@)4(0x&
zF84PgKRx_?(bB|K(KkO*l4mn at i;r8=cQ8RGc_(yI?smyyR{96)!L at +?`)yO$nFHI2
zUuT1n at Rb)7!na#pG8wpsFCqgxZ~e25C;!OpdRKil*r*PrEg1jbP`&~@{!ET!<-Fk?
zOE<W;(<)ZW($YR-DvvkGo_(U7UBK7c-?zQ}!M|5(uQn8yC#n)ELg%-Lmnhtvm&^L9
zQcS?n7ip at +oBefBQdb=80#(~fi0z4-pChgO-Tc<8%KSdHuf#Bu4huSyPH*m~_~A?b
z<wpJiU at Ztgm2z_+{9$e;SK?K7jarD at Dxv@#xC8q5Nx92cZFlhCPt|k4Y0(e|SwV9r
zhg^ewshnK`J+~v~gk)y4d5seOv`&Vnq)w*X@;)gOF?``ndD-6b at E?8f6rOXa82y{g
zGNTXjsUhAC9<ep<9?7Iqjw9FA{Se=4&V>or2a!k3eGGQK1ELJE(HmR!82D)- at S53p
zLD|yGofEH*c-m3P>>-NLcY$?VNaPyWDfJ6}Au(glg)+tcig~f*^T;EJyNM?;Gm(fb
zfR1-rB7RIaU7CCvxeT?<_gKcnOC^EKcd^5W at 8(sZ&P?XJmHD2vDiktE$~mLx9&}>q
zcE~s-fr-a$)gHN_4;UZV-28wEO+MWVyIk|Vi8}m$A<kcLXrVrb9Th2mA6ym%doSwZ
zL+loj)8qBw3t_+Qg1x36zWG;y`$!;hMEM^fu2W6P!Ck9@?SJd==MvRpy8Z!vxP;_F
zqla2Z|EhB&S)W`Z{q712Y{c5G1&)R;Su_*zeLFwnL4T`Lvw`{e{e`wPnX-->xDoMY
z%B|&)Q3x-2D`L&e_KxU=4b0e)|3qukl<<}8k1_1rkFm}iD>EDOTrDy1o8xuA93#1Q
z at P1MPjsU!y9aVgJSmVz9_}mz;Yg!SnJ9<oF2vO7Vuzgm;)}Rm3fK%J^CnH}r1ilvV
z_9*9D)Lks2$oQ*{Ux>JotIrxA&Ic05xBm6jm+Z>ne{Qhy7O#*G1pos)>H*IQ-ba8J
zLp%U$DC8yJwCseh<cYgvESr&U7P`#kZG{Y<NG#e|+^^Ps%+W#4`bDGQ7{e4hKMNb)
zSrPlw&YMHWMFx|O;BjW=JB32c#1 at Q^?!ip(0(L+SQHDPOAA-lD*B-z5mG)xUW%v-i
zYnBEluY8-5#2ZRp!FpRxo&i2{H?T8J<a<P6*NqT)*ctG^wDuI<0S6N6HsQ|s?ym`v
zp&!K7 at 9DI?dGkP}hO-6r>Q4rrFKkBrgv-eDCsKF#`uBL;S{d%?({v86QD5~dzo|;T
zCNhlbLS<pYTZLV}k+ at U$37&k#B%bs9B=AcB3%XSZJkBezEjw?)eht1Q1|Ry$Xr=F^
znA)wM#kTCJaY>=S%W&3RCeKhmT0a+SBTns78Plv`*AL9#Jwj{Z%e$B3EJFSd_X*&W
z8+oZWCh=1KiPt(QI7Rxqev at 2%G at V~ax2rF!VdsYbasip6LtioH@!OK-$TW!#7+qP<
z2QfdSC9b|}zrzzDN8aLTrMxVv*b_8O7M<B$bk?YD5_yvM5T4e at h>e8ohdE^x+Q*4s
zl{>lZ#>_+8wLN0n!Df~J+Q2Hlw&w%e0gU}-jud-hN}EceV)b##(1*7$=a0u~h10Ol
zFLLMO_c<JJ4DJ0Mzc=AttF03AqZ{iJYlv0OT<gO%A+BkdYj#|#&)q^7A`YJLX2AZA
zb@(dqNq<E-BrdWLx(x6f*b@$LD=_cwuhw-c<Mlu8XoF3jl^Yq<b&K;ZbP8bVIoV;2
zqt>wO(MDk=&Pw42ok>}})}aRYXg|VSxL+pr0gm2g#rkgcSRzD8O|W5$Tad>qpq~5Y
zXmA<kOT?tSbSCEF)jP*R{<gj0YD%kBlEccFF65uSszmvX;FzN?RJ`&ce6WQrI>=+%
z@$x%Il*-}deAUnt?qnNsi7a?DFgMIFbjnsIQ#_c+DaKh{&y??om~;o at gzp_gXXbo<
z$A~dAh76N6-d>OAw?<6Gwavih6q0_x=W2%tWo9GqNiOOw^4>#i at 3=N$bT0Rr19B;A
zD#|^^`1{i0)9>H49SUarx}=OdBqpOVG7Wty$KEi6XXS3!URAc$k$sI*?20GlCMlrT
z$c7FFOP$+;i-zvtnI??cI~?S6B)?(*7{G6}GY{ao9?};7bEL1BYZ_pgUS;;Hnx2w7
z$Cx(6pbaHM`#qMB(rH5Gc^2+&(tkqCJO4vm;Bry#D8z$Rkv%t9Jyd{vI`M(~F*kPG
znwa at k7AsWm!QPxa8oXfA*_x1H2V!_!1K##XsxhWv!e0?@Lgtvp9~?`p$>iBRp3%8$
zw at MC?a=F)llMLFfwO?$jM|&zcU!eYB<k^qQ at a%fvn7)b3hmO{S`dd-IBTW6=c>cSX
z<3jaLJfF`zzc!@NVZt+RGwu6zbS^$$AFE3pyJNNP3g)1?0p&Dc-dgd$4Ys<QM|iKH
ztiMJ~y+3za&T6y$j^~hC>0 at 2H^}os*WXdY_mUTzRF2KA~B40=znR6G8!}gMc_BG;p
z<EIrO_HgQ*W9&lbG+ at GlgTZqQ|N8b|1$igq?Kq744lw;-CH=t6u at j_h(jNrhxbAHR
z at 352E^RPBhzYn2L)#3f4ZI_M*uY&Dp_EAY3r({(7oYb|FU5M``ZOQD+F&R%wpYiP+
zMSPEXIqYN8Bc!o)yxn1j9n;!i_lz;@SU~nZ at I+xwq$Sv`I6uN=89Utn2XBu&ruM+h
z2S%>ZQGr-WJ@*`m??K*O)B*MU5brw!$zC#wJ^B~SSs_{5&W*{Kr#*!j!#2WS#`J$f
zzkCC+rIPm=nWA%<OwqNtU(Nqfma$vM(Li1&va*NB$|G-&?RN*tDyCbIBk*n5APs5D
z(7wMyA0fPADfeV)O=Ime^Q7 at oI>NVe at crmQ;Q11xqfVD4_4KHrPZO>&X;SNV)e=2&
z=<3>#LzgW(Q_Y86ORWq%6gfb~gPbqmoFDY75GY*=kupHX-k8+$E%YDrvt}Jfo^0kT
z&2#t)$SmMYfu897&lFsL!FxUVkL#lUTn{4p`p*yWdIa|Ktm{->EBfncFV>j_9-_Rt
z92ptoyt%M#W(g)Y)d*ygjAhc&oRxn{eZ#(}FLRT8b*uf3MHl)u?-DO#c<z|oopaOp
zmp`fRadwkjlMl}Z>TZ+4x3gsOAK!-v58G;sot#w-;0jw8>r#J+K7)@$rns at PU!8Xl
zF<2+LM%Y at qN5(@oIPc5CSOW7!xLo1O_$KTM{KF?;XBtM{L&bGbng{mDjDI##DUi{S
z at 4ovsUEVEb%@7$6>Jo?eQPkFUEft6{hc8OaHG)%#Ik(j6t06cG5d+}3Frf5hsUX|k
z>h`c+C=)+62l<K=;1EL|u3I^tHvSLXSH{M**4-pBR_j8Kb at h4V{2w at lF^eR2=QQw7
z;0)sbK;$#EQr-xz*3U%7qht5wKbuOh!P6WKp0 at mFJy-ZYjP;pXWc-GaXPC2Vnzsy$
zsaa%n=%%RXP}syE?>~GtWN^sb(6^SuPS%ILYeJmNjTpFzD%iO<5*?V at 6`%5CoiZ@)
zJLK0n2)xaq<diiNqQ%KdUa}W!@>tDjO<dj;3G|H^*!`4`Z{p;-dVMb-52c5toU$=q
z_w7qOtz8bjq5*uKL*m7}d_{ymhWKp={sO)Le^xcISFF%+3W1?`#-W8T>M3yg8rJQ+
z6(21k{sYLK9`G=miLMOaBlKiyaeVp<UAE?s#?`XWtt1bd<9L~Jv at T5FRzvJg;5J_q
zrnl9>o&-4+Ie`Tz`;+q~^sj;VLqh{?X~48q&n!cqoLimsJ at T+%-u*y)2jCv`A-V#v
z58&V=b^$sgu|A>Fp6QwZzpRCl9d{EO)JwnFkWbX)2j8_1Hx_c!Lf{=g8u8(d;D45&
z&EP!U$~E6AkIE5cE>*bA#70c){E?@jvoE at A3`g$DQOF$d%jo7UVr;m{^A at 4KQ*+(m
z+X$YniTP}uINH)(lq(|Ky<VLzzdud38Zl6kw~60tc|CZ$IyF80u$>6Qh7B~Zr;;hG
z^wo#Hx2chbH+2{9F}su(`%VGjk;J<HC;GL-){I!!6R;l<U&Tv^(Yh*AJ|;q2{5c0(
ziM;eUWb8|5`*dJ0pW>%L&s5`lz292Je+&3Zg7^1h_ztcjri18GF9jARwSJrbLwVG`
zuwhAiXC=lpyyz6G5w_A)e13`h0vTfsa?M;W5B7MJVQad6C35Wd&B!x13%Tru_;+u<
zU<xOAz;BOXojz~Nq`?!_Pw(q-i-qMv at i?P!zxudZ6xatlOg-1Yx=U%Vm?0}dr+N3U
zfu;D*%Xg*VLR_@&IVOhUFZ@)Vp{+AO2Ycu!bn7a&+pl~s?AW30XATp*6>@2A4w1XU
z164_rZxu>5;v9YnWxdXMALsQ`vEO-Z#_&_ZCJY%F`z<Y45JbO{b_w!hA(2(U=fa$6
z`%KLI0N)?-#{x6))4x{<&I{2m{u~;9s$Afz#n2rOo;xJejBgBC)@&kuO?Vgi%4QS0
zZ0P;%CB$ZoHNfnd`!>S9A&`Nmm)Nh*rZe^zXPWgv2$d?)A^xA<ra}zBkR&AJ- at rVn
zMm9=rurw*icOAE*FFWLSTaNFy&Y;ADL<T^vZrT-|A}2WyUC)CT(;NZ&D(q{>lW2;4
z2Dw`8SG(NcgNsExyqI5vm|g>Y1JC}AEz%S!3t2}nh7EixZ#*TZzbAUq`3Hk5BBr`4
z0_Cna;M2c{?et8 at Z==D&i4hgBM^|HRnb^gvn+TqiBV7TGouT$XDR at JE9Sx39A=g?V
zgX7&eFLlJ3*2%PK&NdaDhZux2&rQYn^#1QQVSh1kjvyZbatN$EqggmD at BdGm#=n7F
z;iOGXXdjE{mjrKub`78n#<(4H7TRS9EJW_rYw@}Z at 54s>9cjmCa8ZoSP*lhR2J30W
z$KQJ_&}*+=6)|;Gi+pv+mx{HYI<hhGnAn0`r<J}evd+3*Oz40u407~3V3B-Tcg(&l
zKbd|1*~3eQ`?Rl|cNpnL$+B0 at q$aPssTqipq^?<a({0^5ReXb;BVQ`s6tFB>r5R!u
zQli<kC^PXIxzAmZyLsQmD5)tp^^!gq{L06O&l}uT<!O!dM(!+IZnqI!6OXZs$#)&)
zNq46K&+c~znD&FfDEy8y8gZ};KcI at Q1g8sh{dFVY64N?2;XM1b%=&zR+E5H%^+*Q)
zO^wXA!}%-p7;uEp10g!_?1v_uyDV_BIJz;;WIlZ68$|l0;N(uMfL-t$ayk`)uj1NJ
z7O)zD?2qI1_veGlL9xIuS#CSY at M(i9JkrDbry;Sz2^(5{A7X5)xy at t$2UjG?GaGuJ
zJkP;{e31cr2jX!3Yp`yf4FiALLmskuoi=d(IQMZHfiJq?Xqle3Itu4O27ec9qYm&R
zz|Ms@)7lSOG{e)&h8j8Gt+7wMWl~Rw{ak&o>GM?NFcuDuUpYku&L_-K-wxOy<%C}V
z&tKC9e&&+N!e7Uy%|pB<>H)q5 at Sq<iav-=- at L%+|R_K{n7$j9HaP|@Isv^Q&0G%u!
z+ya&0ILKkEAfv$_jeAYFu0k6YaNkI(IhW<I{?W%`{AYiF2{yU^T$g$KyLB_+SH*ZR
zzBKruXSLPaw;*PHvwsEn#*Wd-zeUE$_!ZPvZ#=?04{Vx^ewQ)st<-+j9J`J+nbNty
zYfmGePP>((T5$<{8Nv2qa2Ax^dNoQ_ID=gz+`KAua7z^OF~HvR9!EoXAduUKaQp4{
z;@PN9S^!)xcz8|oZ~hjX$1aJzbEoC90cX{G#Qj#^X&IRV+-586`1#<G(L<-pj!YHl
zxl7SsTIeJOksch<>7L~gnF8c|<KDFyaF#UOX+dAFaEUQqu)pW4$l5|1YuI_r`&#~P
zoIQVoJxY{VZfg&?M+N8B`5bKFty+HO(8D>~t<AS}cVR7b;@-8`b2VK*Muzis-O9G*
zY^FThr|b+Sm&sm%vTgT^GQ_{cL$0Y#PFeSBbj4ofLkz7??M+E+=}o0e%<ptG_ at 0+!
zN51De!~Fy?EGls7fKL*!kWaz?T!b?+h-<#%&QL^yPXy0>fvK-3Lv^m+)3&d;=oGIC
z?+1!b*$jAB7q!uK)KS8t;CXZt?0TVZAm6au5*$ck2yf8w0+nBseZRxl?TZ+b-J~qU
zLDm7A|1(o=r7+-Qg4g{w_N#o9F%8duK*?S6>7-rjI5NsOyK%50T2&xmAM at T%OYdP`
z^rguZ5o-cB#_LDlYkNZ?XQjs#6}%mtm-^Pa>wQMtvyd%YXIyt3dg1Mrx?Tk at -k#H>
zomI$k+O-7BIVK++rETh~(U5bQvJGWQzsu?g&l%XN)W!V2 at v{+=T}z!v71 at jEbF!`3
z_c>+cJAEB{<s<>{%fZ*cRT{moxIbjyf&S(D)XK#yBhLHh1S*oR-LnYt-tfA*&hi=H
z0AJUDHSNtm{W}Gp0b<NC2a9#U?m?g6|BUh<fp07vx<*yP75GL9#aisSB*q3Dlx-Db
z@#w!XTx^IT;8ws!>jRm#1bGU8C8BmC=ZDMz-fPjH0^fGjk at YmA*lB@&Ym8jw&?3I-
z7`P*kabE(q((Kh~*PV4O!TKk$C^II at 5SyrXIWZT&P)Fo9$R5+-pV2T}(BLA0Y at h~?
z(CWNJi?cVRN*Vq(#P;BffDat89O1yRS40<h=O2IPLmWFN=X8Tl%@rlVn>&-y#usp&
znuxCryaF|&h==vY5i$0C_)K6op1#`L&G at okpa~vJ=%EL|4-pcb1I~!g2e(DT4%w|m
zE?o;`ka|av&;tyqhbI>P%8?SjP+~8zpG-}<qHvppBdi=^hp;y%+3XD?;|azQ_G?k3
z8^6)6AmCJv6Iq|K-05Q%yVN9qMbAg%yTpmTll*==@*l|gAdkq!82vOa<^#j%8^{r%
z1c$fS&rIaK+bzI{O$Yz%SEhx+cAg^l9h&4{y$iqgW6|=YyFCp_ce at WeoWgdFLf9Um
z5?=5rW7E!N)}hol_zHK8 at C>V2_$5muyg<v at pCw{_+do76PC=Q{N9SXf=w!<GBH6$=
zaygDn?#wm|zv#jtz6v(#q6<yz9CCgAW9&@S>moQRD2Ewijy)(|m;E+;SQ<am%p&AJ
zSAKGw4O|OidJvC6aF*EPac(eJT{d)dB}-;M8lza(i~RMZO=iMNiaFq8Gh>cc`r7f^
zVfX=i30E{^WgkXX{+{7ku3$;}?fkBkUwDOAt+fw6S at kW+9caM$mY>{#yl(p+H<8ca
z)2w`DmL`fVJ-6O&W#tz)&eAXG;)&iVpikK<Sot{fv*uQuGw~aVyg9s!$Yr*5 at L#vH
zB#_&`C-|1og~XQ4*@`_99MUgjQ+E*)eU#DrkRuM*n`+3)*V?Mk26Hz!wr at Akws#2U
zeZSeD%w?U1eENmGpLQoyfyYuRPK-mm$%b7u^;-_|JE^S}i}1UNHNy6QgTx<<eaTaF
zmDWzpTG3}$wH=v3u-7*vTVz{PDuI_ej{9;k-a_a<o8eP`2H4F2c0q~%%+kcW_N}~A
z-xOVdJ>jjyG7oD`Wc~R%ffP9b<QPANWp0Mj93q$kKaJR73R)%+2$UA^A6e$WpH#zz
z%|4|JKFvbHMcCyQ_%eMx0H1g$yAbw;PVl-WjE%`jV7Cd!U`oQp&}SjzhmGjrb0U1q
zW+Dq?e%D7HA$ih);Z&!ru~)c_+?ZMT%wQj5Wy)FaGkDXWhyQau$tiOR5j*@b2XX2+
z*U3Gbz4u^_bj181nfbrQxi1-crN_p(kBoCtlO`PF3|lp;?|+PQpD%0hP_#HP3!K=Z
zOP$gB9tGhvJZF?CetI7m0{zQr45wiq=0fS%TzCiLkNklCm1v9ZJ8)Wf{S!~$Am<?Q
z*?hCx^<<irskcL2 at vPC;PW+uO6eO;~{OExFeYUMC@(6e$ezC!KMf|qFz(m7OLiiiN
zErI#=CFUD)0Aj8H?;ZBKQ<!jZP#9GRU-c#;@4{!beQ`2kXvHBvgc<nTNqNBEF}jT;
z4R(ogKJ3_QAAygd$$d2Nv#>>LeW0g^T~7w8ByDU9Q at 77J?*qqr0?!VSoMr=;!iRt9
z>qf~JY!PgFue5=G5Lj{L)5n;)X4!yuX1>S4?<xaMx)r)kE6(hC#B#d1|04hC`aym5
z at wuM1yjap+aAHf}lDY!n%h8d&y?=CHDfV>tM^1?dxas<kg0XpX6fvO($Qmd9vcXLF
zj=v&%8s^MG$U;&4BCPT05-oR)Q^?pBn#cNi1LntApMQONtgPcG>ng)F?<8Y!yum39
z1g<FiUyd5c6ix=`tjG6{kh4+he2r5Yb7F0n33A&%Fs^wMi2Y}66v|bTKKk_~4$e#T
zT}=<hg_QTT6&xuTGt9$h_x7>0coy^<^8Kk5GG)O2hxNJ82~5- at xZVNz{~DP?qz%Bt
zqfOXbM9A;4bsK!8{5NlHj*_l8&5<A;9da at Hrzr3}l5flL7Qs}8B4+^lU?Fn2WWg_7
zMCQJ1YvTqI|3dtnkOy at H*8x7e@(fk{dhs^sxiNelb<lQO=o#)$X&lT$e?AXCZ>cCF
zbB#NzK#w>!o$tX!-S5gN`p=c`>e>}k^xxq9bL`Uv8XHYws0#cr_ikHsUY;=4x2TIQ
z6j&GRLl-eWU&MaB4xi7<l%-A*ry$!}5GzpFDtvpKQv&h5U;abs7Nw;eI?-<e1<Lv|
z$xL^puA$DjtA+a`$bR;dP|Q0Z6m#nF`Fo+5&J>E(`9kqtCT5CViCh?&h%HgXr*HTb
z^}yMIbtfSFpwO)a><WvPBk3B9oYQ6{_UIR at 9Sx9ma%J28{W7P?qV?@@)NEE=VEm42
zR at jb1&P4zDFXrmNH&ROGk^?q1el$mF(MH~PXay=sX7G2;*V*_EoThf(6v#sg#x~Xp
zZh{KPC9l$W2M$L?O{K at lwqBcxb`xGoJ;7LT2PE0R5=luMU*ZARDa}OWl62Aa;LfiQ
zD)+)J;Zw&3Pu8(+#Jyo}CVO;94&Cm18GU1e?2#4l1$A)f_Nv*)^B_x2>b~w~+MX6T
zHm_^*(y1ZF4tIUU4>$`KcYP0E<9OtY)6ykvho<Oo?k^g<w~pX2yZYHj!x|-bMdH=n
z<o at Cu;Ha~E?+_orzAsi`4;nkS4tUFTHWN%OFtKZ(pPx$1Z>wU1OOro{`n*T#(`R6B
zjMW}Ak~|cMk&rrfu#21 at VNdpfZ+H!KA0;p<+Q at H#M;s=&)Bo7$1S;Upi~4Gkn+EjJ
zh4CrVqua^_Pg=?Yv#f+i@~@HiZe>EId>1kL(~^q at 2zF!&>bQlYa;exw7O!vXyhWd(
z^4!dwKtu1 at cY1nb?CFCQ7f$4E33w$+PMt2NO9Fw(uH1JoVA-lr$#Uq^*hhue1qx@~
z<U;V>T*iLO_(b-d(p(3IvB@=`L&Ih{a{eT2%0~qXzgGMH)TG|OAz$CU9Vb?W(lonp
z-Ra&vD7TR*D~s{LjwD{R6WrQvdNbNJpOXi9dZg_r$~X at F;(wGO5j`vevO4OMwVv_K
zjI6vAg7f=k>0e}+%cnCG&>yvk?HaLY)v?=Z>{D1O?yUSQfr58>Na~ue_FXtvE!}5S
zcRp!U7wt8{-{F;kzU38t%-ES-&u#%ejYV*4;9nF3S;}Qw2VUhA5<Kva&#;Rv+Ki(3
z^cO!Mb1y!fJB8q at Jrg2=M#0gK`aj#{F7oWU4g1_6Be%5YXHmP(8PTR{tcPmI?_R#W
z6wKAfk?%*E)H5n~K=#?UG4OqQ8 at rUmi#*QXT)Kj5C;0fYgzMkc%kKc6&oB4ztRH6a
zuj2Dvf?pkY9{L^ZB>OV(eqTWNyY;Y<=_S{(R}60{>o5q)R_f>yn~;4BWu>-J!V9qf
zkacpI=p>Ir_n){1|NjkkW30KM1A&FWupfjzyVHU=3FO5!*wWa%q at F7uI{qOj2BwQ(
zqszK}!hR2V-=FY)ZRF&WcA=fn?+~wT<X>}G1*NX}z?T`;-D{(O$rqDrocAn5=2LOa
zR}$G<z|$y|+yoBcHo+}2^C87j9hvNss}09%BA2_uS4%azur;3D?-08;kyDRp_C^|+
zSU<$OC*2*jr at lcox-G(Xc4l0(+aPTBKOt=QbFsSy{i8Yt{h~xk4{Rn!gRq at G4B0&d
z`o-Pj2a at iZN|PSYm5vHv#tVQ$&l6ry??XG@<`DezpBb##r^5DeC{JyaZS8%EVB0RC
z-MszKqr|Xz{8B!P8?&;Nx?xfxZ&E!to<&$k1LKQaiTr%MlHiYns|g<R at 280kosr8?
zMmNeBg>P`qpx5@%Z{OELx5L((JF`li%j!#(&dQ<=aAfvQ66+sxeq9VXCnY~}TPfJS
zT$}h^B&RFlfU;btplcoBP6XF|=ebJk8PE;rL&0L4i!9eQoN)vr$Y3UMKI*wwagMR#
z)8k@@{_6aanXA}mp=Z90J!d at ZZ@|O(h;d%zatBO$c3zTs)C#^eI>~%xUy|7*f&9cH
z`?qQf;<}X@&v5!=;H>Q0t|7=xCazUfLEn3HLzsTdAGesXfvKj;@LYe`iE)N;r=d+&
zvX`+g+sok-Y&7eH`#InhcgeYPY{x&a0xzBAYPE~=7f;T0ef;*6n2vQHN`Bbh*)@u@
zh6@?!N3zF)^JU;2;M at pT1Y|$tb~nAmE^?g$wzmp4E$BOtH>B93+0ch4V(ynQIl&&@
zyM*YeBu^~zrXZG%k>N<rI_O#(^2z^+zX!hq_u3*Mu~<dFlXU|eMKyC)ZscAiaT84c
zgZpy$Q+_8;WQQzAa5GnHU5}tYA16E-A(vgJu(xFPtM|<%GHGW8;-&|PJOOO_MqHD+
zu7z|t42*3bdkrZQ<Mtx%soU$1XEONXc>SaKO#IYF*iZThUmwHabcn=uLl#PPIRlGO
z?g-{p1IEY)yzq at I$ezeArhMcLZY-YnvZtQlwl6-;)F=00eY!p&|3eHn&e)L3|F?P&
znakULUzXAtcciZgc<v+3V$3^ngc+Fc+Q?5==%`X>F8ty(#meO-<b=m~cztK{?qS?d
z6Q6=tH at LPx+S02m8wd{y3tG3M!4&6kSH)d(9~D~t%t9-pp9$DGNm*2GQWj5~l%*y%
zr-hCx*yx%P?V8)r_X0D3U7#-IXKf}nm<5QvT2s)+Qgyl0I!E<{kIe218=g>e0{!;P
zrcx$HRJ})D{vm%C^bAs7pT#728t=F9|F_yIh5bH8;o#otv2(nCqZs<|9$ddi_SxYu
zPNu~Kyk3KFaH2t|45$+-$JK8vro+bWzYRZxiosd+!k%}EHDcGg#H{uP6WUXQb{S~J
zt`zX?G=LurXV-6`8724ioI<QIjo8U9%5^UYN;=k^GpdIVwN_~58IU*LENrHsCy;zp
zznu?+&p%a#7;_Ie^-r>dUi at u*`r}!)mdNB$J)Q|HZH_TgF{bDD5?;G765sop?|I}K
zN=APWJZ)oa{ToNg9+xS>@4B93n?X>Lq`Qo`PH@$ZGIo+=$Rzd0k-P3rAJ+~}8kI{N
zY&kw#w(Yn3u#u-wFL#XwTlD>04@;Mp48AF4{-&D;GLNJpZ{Qn3v`@J!mnjqb9fkau
z!JWs;xxl|gUi&}FDjMs%0r<<!s3*9X8NH^5uhbXv^T8oL>Qa4VB)I3=t>DoSQK=<~
zlcez}n{_yIGpw1B0UD=L$g(hYi#V*Cmn0g*N=?T)dK|9+e13|p2A;00-2{K8KVE)(
z<Vat)(1CsZ-rXsh2YP!0t>aDvCsdrHg2YXb at 4#pS3kVL9xD{Vessiv at lX!`5$v*ji
zjh7(t=8prbNw`u%iSK?aUgF|Qz~a9-g1&SWhfn3V+H0H at +f)*FNEd8yhk*m at a6_&Q
z$c-y><1F?Qv-2 at OY51Lljx1(P?I-pEvaW2$+1bDl!1qka8GjY>8N!d7+IonrY1p;g
zY+x?dO`@~;omlVNhkgWp1iY6Mt>BPPzY^HeJnu==qtnTecxcTwm9t{ORMhngIt%N!
z;E$M%CMIS>*G)V2VU1&*N1T9;OXB;Q5YJc1#QcdJEr{hp&S at r|ua+$$wm(0zm*~Fj
ze^>`c4Ur83HDlkg2VPuCXHk%u0-u4Mb8EcL!6*OQRwMLmGYCBtWOQ#_#}&k*qON0c
z1PxklBxSa51}6#Z&>2&abI%(`Fh{_|4)C&ii_U5 at 5X<ql!t>0uBJ&*Nb6Ye02;vOn
z=DFa8ezo7SZ^d*OxJ<KIS!v at qS!urH+>~TMcY+TTec-mt<G+a*D}fE%7xB8 at A;@}4
zb~ju0KrbNUIb at l~F1k=Dkee%kA!!_o$2U_4#g&qn&(d at IS&$7m+<uz>z%9<#6P}en
z{Q4q^0P%}kz;iWoZ;V8*o}kysw%b=Gm!z)g-Q$M+cV7?Z0PIDbjw;xQkQ)%|<axT9
zyCy!}W&*aW2J#l{HQ0mf#OEVZ`ai*)P0kV9k?AUp3VC6`Wx at P@o;%WZ44ADxPUiU|
zj9vu$75m^yGpppBHc{KAB|Hwq_SSQrIWJA at e~!sj4u(hJ<|!|>Ig9APn}N%bSm`y&
zCKloahlw5;BNS7Oxtr-B$WdlnPm-DJ%RQBjYUrE5)T<HezYX{K(|na{Gjzimhn(n!
z*h9Zgsv&!B&pzaZA at BQ<V+t_>=g4Q^{?>)#96}u7`fnZ80wv at uxeGka`^GWt-FE*A
zPGQ%mUFrW6rvg~T6Tm1M at m=iy3}luYLMy```2k}$*t(|(_2l`UH}!MPN#@J-@#|-=
z$Fn9SWt~GG@|#eX5EFFB>7+e-&=>0$l-p{Ueek(9<K8*6f!*!`wj`i}^i$0R+ at I=w
z)?~G_mv5n4iwyyn?AiI~3x9Bt`cK075{PGK@`*2JCZ6{w-s2j|6S4=ZpnHvjt)NVl
zk$dt#yc`#F1B#{k0qF5^C3&Bv`$lQe!met93 at MoI^*0NUFGntH9*1*WvJ~><`UtnJ
zNuV-?@tc4tA^scK0J;w{eFt5g#F^~B9$0KChuy0HTno9FR|3u^uYNC3IcgaFN at dY<
z4JfPK_Bw-|JMVl<D1O33^!2 at yNx814+1OvFd}T`!fG7OBOAJ4CBRAGj!kvJ<s at c7h
z=saOhIuuNO|J#Oe)LZuKYzy+OIcM)3hq8_&G=$#xAN>Z7P3T7F?EUDw8^d3q4;LaY
zdMjc?ZgENj?%IPB^_~g2RV2oW-$eJb|4eN1$mbYwHj_INpFXb9M&j`Puw6i&i<51=
zxESx(h%77HdRxK)uf)>ZBtHJmLhgWT2x}yceE=`D(@$gd*ZGx_J?{zP_cW0G=o$IQ
zoH-A0&L|+K+#d}Q059<!>=A-LCF**V4O$xcA;a2$RkoTDyX2|$#*mpSxskvLWA7nx
zWY~K`rxjV|NPr9E>^FPkmSE?=8MJ~U?;6B><r13->hv}zi^!XPQt->@zWvT&7D#Od
z-yWRN<KUz4C3 at xvkFuKQ31GJj`3w0zJZCKC=pN41noC$W_N9Z>(V5T%$mdb)*)qte
zFF?oW!uQ3n%Ty-STqf71;l)m>VPvSUnDge4P|0b;zE0M_GuZFa=TF8xGm>=2aVD9_
zf2NZ9t#IS|HQ#T6Nhw{at1m_QeU>URe}eOI&voXW{bavX+<`v&Z-Q at s^;hVjUod5U
z1-~}A*49>&Q3}~co^&o$YFQwd0ghI1bdr6*-h=r&73Df0{{mMec-nDOrd;F0xk}1j
zGs-quz!jZ0UQpIGxL1ZfyC})r3z_1g5!ebPtNLNy3yCsTx3bLj4!Bu!GfK!kl6}xC
z^WeuE7{AY~n=T1JK4>xWPD#z*DCt^uuB95-7L%YXetpchz+gfro4cPpYxfT5=;WDa
z1Z8*J+$lIKILPaKSl^FvD<Sc<z%B at c`zI3IQ4~8X$qc>l7_XFY#lR<75nI1wzU$0h
z8Hq6(4<9*A?u#b+;Il75{_RdUY#&TIcbv5SY-*By*xeAf!Cf7<-YpS&{0qP_YfC6c
z-eb#<Q0U>n|3zs-Xyk=l1fSL=aHE$cwemWho$zy&!FQ$&5jzet{;n!qQ~kkzt{CG#
zFU0t{A at hvqBUX5>$aM<xx)J+UC35hTM;jPijeva=w$&KebRfSx^CHPl?D-z@<~^Z?
zmkg}mnY}+j{`eR4iHxi|_J_n*g%{4Iu;&~EBQ_p67$6`2`&pbVRa}4kesZi_mFpDz
zZwBaT<q<&y2ZR_eU-$qYxo{jjDaJA-t at 9Dar~AGFz0zOO8mWiB`V!&Z!9FyGnVb5e
zZGR-ED@&GPE{RYacR{X6_md%~9>Gt=LDxE9@{2r=ImE=RjxxEXrmVei<o_1aO8A_n
z0N+7mwBU6_#&AWYs8e-z_$<A;DIHHKNGz>SPn;s at a*y at AQP}TSz^-*$8GY*=Vjr|w
zupY6dVUI;Dyg=1v5D*-*%%X=*Cx;E{4eU>Eu&wSxeC5j1bP43mO&1KX=Nh>N@)`Br
z<gi48`=$6EWy1YyW+E1F?7zeovj%f_j0<sJ59(4FNaBT;*t7z0atTPx3&F`gYiWTW
zuVt?fbXjmrgU2fmc0-zQD(sj>cpMqOYg?KJeeQFi at _rZV@XJBqVEc$af!cbZ=DsiM
z at cwbb>AB-*<oe3b_PGBX5hQb|Lf%*no(s&+^}M3jq`Zm<jihgiDly9jAIQ31$#~)Z
zVWXxUSiGzae^-l-*Qk~3Saqk5G2~GaXM(o%!nQ3-7-ugW%EsAv2RVbZ_LJBj5`Z~n
z@*u+wjeSA&Bjk_?$Zvh{f at kjy)U^@Z;oU at z@!Les-tGlIXR#gNFnNHoi2r69_6f4b
zDB8;d;Xf-op6ks~CXP7VFJJwc2d_A(8}_LDov=&Y!+pVl2NB<4bt;*>Tqns{xcW2r
z@*5+cLi_#{uYW>dTf;Ubz|MA|82*d`PMw#poWwoA{&}>l(;pl*(C0?)MB=(6QRQe%
zvzQ!+J^akK5pDXCU`hSXW9{g=?<60grbuQ3zw;pUU^|cNf4*|mNJ}EG0E1gI3_F%<
zHu1j>Hsqy~Sh``v!eFew2gi#9^LP;_5ADpsy!NTt$koFB>@yky-aq{UMP52|OBwtp
ze+JeQ7+BW6z`w`qrwDEEt6hr?{E+;ot%{TtxgMXV$JU)F{lLJ1UwIyIMX28i(theB
zFoHfTEp-%guorbDyv#4(k at 3Nc8~S1bH*^x-Z!>t92jKi5Hk6n5`Z=_S86VHsS>~IT
zuvLh0XIXW4)?1uH*iM9WJo__CjZis$olr?r(21cNtBt^_)(T2&Yq$p2l)w)huW!;M
zUA~+_T?(B-c&ss|vq<?XE5QSyEiSa1;uP*?qML&+?Q`_=zQE!IT6>PI2^`w_OBHU*
z{V!ODQx#Y0A!li1N>(p^hl~UL at Z>oyd|w6kRjk8h)?NIB4$Z)lj*_&fLx}Zxt<_YV
zX*W&QENHOj3}i(WJG9vQD(>g78kSn!<ugw5D-oL`=FV<2BDQ+6U4nei66AXpxxT<Y
zslR!k^yvK~tiwsxvL9C-zU7W8ln$NEVI5|diQQ-MJ6rCjwdacUz+N2Y-f=0|Qd at bD
zT+&Q%^~mFKbgvVf+KsR~OyD&F<91l0pew+ae8khX`ZM_W_VEi{v&*b;xg at R&vL5bZ
zRmc?I1#ndH`iV(|4+LYm2mZ8~u%E#`1Up_EmC{y2=8Ce&zu>Hgb$H$`*m{rB%W3hh
zq_`&JiP;w*w8It-OwM7{s{yk6T7qX!^RUL*n-e<inrWAiBVq#oD(3$h_)kBFe-C-0
zLj+8`RNpqpBaUD5=g1UauHcjmX_u6_flvSLq8he7?$U&f$Zd3sE~Jq~C40R(ETEjM
zwQvR2!3A(6BTu2d0ybR at 4f_Q6+sc^lx1m=`AqR7C7DapG8s6Q*<kQW=^%mPv*h8wh
z=SUtvtnYs8;U|#?S5d5A)g`PVZNPlU!#?sQ@@C+E)EjxX?G=z?jIi;XrT4*yHv+8s
z*O(KML<R3>s(N*n{X4OwUtJy*8C!A|azcG@`>pZthjgC(g4MwOF6O-*6Oyc<nRGRL
zI2P(8e1E4jdQyh^OS&{fga61`_1wf;<D<TE$jQ0~zWsK}ft4A(H}cZST*UR-GAnD2
z&$r+iQE6%eKSMo_{`Yf{Yg7qYR*iX_yP}+`FFDID1`g#QUYa|1!L4%FzKz at i4w+U~
zCF*sUEm at Fc&xQTIB_YKwyFD0%e9!h1SL)ysu31vnXT%s-*hLyGnQu=^#Xhz#Sb5|c
z?9bJh(}$B3 at cnDRqeJq^l5&`_EwOOdIi(@;uD))xy}OHbcx>KfuiZ-9$lRN^%en35
z1Hx-&yE$){4ZId)&N<r&{(~b0Ct4Nbv)7TB34V$-bn{f}?9G#`^I*@<63lciyjjXi
zz&s!^DDQ8cLeBoYxrCEy?b&k#Z at wql3T}yIIHz6_5#Q_IFpo)D*!%K+<A}`V0$>Rc
zBMcvwSwCGxVuXR0P+H~+RN$YRYOBmB<msp^%N(Z6NlcmlWXj~B%s(?_emYj>7fc+-
z|EDrdp>_q!Edl at gQ>Bne%lI;TMv|;Y?!{<vun*X~+A4r`JjA`~8cIRj3GsO(l>BkN
z_H8(VdCMlT#e+`R8h(!kC)B!ghzro~`}dNOmbPelvYhH{ZsT8dR81qFt at zyGFd~DS
zdHXOepmsBT7K^&aplsL!^02;H;3Yx1o&YU%pbd7EyhXr|Rq|Evr$1u4hM0B{VpB=H
zN-QlMUZ1FhJZB`nbx9V=Fq8AhanrdUbHfPSVjbT~S5UCOI3y0lQp3KnjJa0Ny^Guw
zGK_bev;714N}XKOOmd16dzTyj_t}hHZ70r)uUZTuC2J153}+?D$N3e>S-<c159F at W
z?Q+NG<iADuFNp(O`v^I6CJvJvp78Y(u6z@@PXBRT;)MPeOZaFBR~2bDInUSn*i7tN
z*gERQFalbKX~t3TH>!UUNbb_<;J&SyVaE4^W8a(N_3Qwfc!rcEr3kMQa=fU=nQGMI
zWUr|W^~S_ilDHXi^q-pLqB>kF32tZ<dE9>lrifjfpTJ&@*UIz84M%{beZ3%uTI2W_
zoF*CQXW&=8IJ&jtyIv&q<ET(CDca^k@}uO%K(=a?0B_c>&s)l=YK0#V*Pd_`P16GB
z-$mxkl@!QgZZfwL)@nYEyVqBVnDykit8P=mp9Wpv=hJmS$F%Km)G*%*@f~`NO*42J
zxRk8WO~|{vT%4Eq-C$-)ncJ8+1>Y$qUxyYLlx at uO0wA-Ffa~%R24i2I){%b-a_J*P
zjz at mAEZ{~K7oDPS%qT?vbZGv8m>S4+t97AD&t_bUIVc^iIhZ+6;~C0Zv|)GBgC40;
z9;e_{urvknQ;P-#DT{bwj)wHZpwFw<Q-7uuz+Erk{k&Jh`+3WxZ_0zQ#@A_>xZ9uK
zk at DV{CFP}X at S^ZaCOjD5ps!na{Ulz#KO}GQj6#e>*|K=MiufIe4e*B=`6+jsgbV#)
z<6uh(CJ(a8d?q*M?{vksuAv0@)m*@({+s*anBU`+6S<LLS0XYc5BwekgVLDaO2!De
zSx#c^AA-GnAMp1{<ehRrzm7rf2=8yd{PA1nsFuW*MND;M@~y<5N#xGQ_cAslCEJ8E
zjC^-`zx%~O&xwsZf^~3>v8VhVp-KjpZ#3AuJ}_U$qYT(9Ld*^=^1!}Cu8%5*jO1NS
zFlsY_;d&Y|)icPw*c%B3rVzTI(*gWGVpEAe_yDoV<lRO3Az*XJ4Xo37546+sC3E;i
zSa&MgxMUWupD!J*cy8+XN_=-i9xdnkUx1v+a{oup?D~bsnLnP;>?JXW at ZDdBPRAmC
zGhxMW9^{8u`07a=j`ftBs)9fBMw|(`kpJ#5*!x*GFi$SqD{JOK&IG;(GN?sTj#!6w
z at Sr{pER^MD4R|maED<>~Okcu3S&qFWJ)GTM1KVY}H^wCI1$GOwKfM5+nq0&nxnOTU
zOZwvq`Yl8PZl6ZT|L>4- at F6iG707F;>sdzDYl0zcV?YB{iku;v$aM~`cZslPbYo1$
zVT~?hxVWleUr=2rhu<wd48HBPz?^o=FEHG1Y}iG5gcbuw(~dZ2mTB`c+aX^oaFt{a
z0Cw<4vPWMdF?rrP&YNNzo#zS5Uh6|e8 at 8q{hKw3%FQhIbmRL*ovkp>k=J#>$;Jn$H
z-|Bnn0(`Q~V*Z<w$Jm7DerJn#l3bk0f3sOkMLQZ2CJp`+UB)w0Rn6kW)}Mq?8rXez
zI*!IkCF7!`4jTV^Br#=iJ^mMVP{XS^sCjm-H%`6lmon>11>AMK+cvD3DLYy!#G7}8
zM5|eq_6}auuhQ7K6U8maJ;?NXF2M@}XCII9eA$T%XJXmjM^1q|ttPj3n64r at TxY7f
zviWbKZ=Qf98UDhxPr%MxM0~L&li at QcrGRBe+iS6Yp6AFVdf1=M<Qm?MtHLDl?8|8L
zBV<qOC;{i#*Cg&H5c)aQp=^p%^%+xourH}rkGF3PuuvKz??Rs=9BPl)z`w+D$9?WT
zB*_u!rh{j~-nso!vJx?ojo6=hQSP{AdU{rXj>@(jVSG-$uqWJxt%CSxKEnN05 at S{}
znO%s_nv%&lC&_vDd=QDLx7rRf^SBVW#kz-koAW97lSm)#OI$^;J>D3IG%NI9 at KyXR
z-9}>K%`>gUPUSa%m<e5XGje-jJp|^Sw~%X7H1YattK(C0CN%@A>VVDTt#ELZWa8{G
z@$>Q95y!f;EA*?B1^TjOUyZt)Q<Ku+;>LCG<Xa|@c6+wt+?f-oN(A<dcY2gyOUOQG
z;yGJ0y&UWWiwC^9etO}GR&o~Gxs2^zL@)xJl5+<5Pr-Wy9Kb=WhuN at 6dL;2_Q%E1@
zi~D(blhf{EJfptPimpbx{;}c=RePZbvacC?p=Akd4tp!92D=76B2`;GayeG^wy}&8
zEwrJZ&YK)!<V*rC^>b2pVY7b=Fr02-^TgxAxQW;|33hKNvn+;{Zkx+8L;tM^Dk`|1
zx at +jzs_ogLw;CN=u=e7~oSUbtnfvgWsg0W3ORSs*ySNXSJ5ok`O7<^I-f8o^DQy*y
z0b{3E%+gWnt{2Jk;=0`@dn;J=Ph~-7>b!MI-PrVb(#WhVyLy()exUVpdj)tSkDwfG
zwD}#S$o-9#Rg3dh!!8`WA1z;PHf)_`wxg_@$FL81*TQ2&{^Oh=7}fx@{lMVY(YfGx
zQYVP*Sqf9`JG<6LX<D@?r=IkyUG1m_cA1L%v9E&J%e-a0)7#FfUxl30%y^YEIh^Nk
zYQROmCm;A5a2H4k_BMcPm(r%lowjPypHxYFinyJO2a$*JCV<2CHBK>g1Z%+nI|JrV
ziW~gcDdPPO6Ldaz2y$J9f?sqc);Gx~O7Mrsq3j-;x3aZc3C0r~*J{Y+ZxWjn=1MMj
z9APt$ta6lxJPLiSW2}zH{_9 at w@bMAjgY*9{R0*&Mu#<%@Ci5evc5N7JQz}UY at N>qQ
zsuib^v$G=P7rKJfAM^WNhBFCg0M$YEM27E)tRaOLdkmd(H{yU`M@$>e&xCFLsX)=l
zaw^4n({m*+CM9Sv1n-M{zY&MzUS;XkR~N&UiuqpYJck_E%lRq5$rh4+qqotE=^CmG
z{gX{2PBQN$oY%;2{8k|LnsUU;r{n};ol6meRZ8Twu{KsZZ>ldLzN-`EFkCdSUv&6M
zk&kv48*$vI+ac=BT;P*|AFe{&@MkDzk7PDGlb#cK5#utx>lef>=&`>oLYw3%imnIh
z&5Mod%f%!f8W<8H8#!JFFH;tkf<8-x&%ujPpJ%_paufN3oSPUs=hzr2x!(NV<G~ly
z<IZN)__Dw$H0XK<bCB>~zurHPH at OIyfylq1t@4&l><=&oan9FZ2PM}NaQ&q}u1m>v
z_`PGmv+98?_YX-%|5E(l$&%2%=&uszYk`N8ruUeMtcCOXNX at rJr|A|F=k;_U>oC=k
zbnLs&2LBb6oh-egl*BzP!*5qvPO5|Fg#W at jmun&Ks#+dn?`%n6zk+8WK9tx5B7!hK
zK9$73Z;5$gZQP14?a1j3UhhNT6sXzjq7A9dxyvy=?W?xa+ulFnSTh5Dy0y{ZXCU%J
zG1i$n!D^T1&3XHPC^O?JN!B-FRxSM8ts6RFH~I(tSL)N48JK&q)aL>Bs3Ni^dU8m;
zgG!MLrigY^JH%DMLl`%7ILfIVXhTl2v=?odQ9^VcMrNP5Qp4-}>VLN5&nId2GUW9v
zRLX(ZVfLeb6S$icbk^?9iV*A-S%_H(Pi>5r^(y7h+6=qWh5Mge3(WBEdq2d!;@4xO
zi-yy1A8abnae-lh?v at w*uuUbD3=E{M<fdleqxGXCMu*wM%CUzX{9_LjF?-m)q^$42
zhHw9C(!m~COo?PLT9gc(9{XG$_M5uN1=!=dZe?P=`?|$VgvYuLc=`%{jiWN|Yd1J6
zccr7>>QJ}+CyKpxyS+QW5v=C-kog4s#RHOC$M-vu8_DIu=P$Tj3}-92Sy+Q4Pas~s
z(7msfDSa1nZ@@0xw)%3{uZSh+5epKpmn;z89j?Wg4JXSuX8Vbl6KQwiQ!+Qe7Wax{
z&Ab at wF`oGJEyw71=$!4{N>&x;9{Q=ZK==O7BsMYT3FKrNu{*v#Sag$C+ON_%!p>nS
zY)IJ{!|Wy2z5<fxsXG^Ws+!!|=|<!@Bx7sk$$PUjz_*k|s~ZCv13&ZEQVqAF)FV87
zlnQHH%4_JYE{RyO-hBu*)Z=y|eLN(OCx2bayL}FOW10oJ#z2mKb>poX at Z5m^iDN`g
zqf-6|=CYLbd;d2_5V+iq+q>wTNI%T;HstKp=cR{z?9BxL8J5IVGMu`Qd%&5CoU0e{
zx{mfws(@X-89udB?=tyIl#AZerURpJ&GMI2l_deWf)0q3kLv_JiMq at 6kXPTe#E$*8
zLom+!+qL@^E`CFfq6sGjk9mLV9<W4v?;9U4nBe`*@tkF$_qTDw0*?2$-cKygjs5p)
z!L+geYAp-K{yRf33%?=fQJ0w5JTM3Lz-~KF@(Fa1N!&MGmtaE)8hf7-EM~q>=PT(}
z%+Vlse|{C-r?@?MKWduJw?@nDCAsCm3cdk9<PN-c;*1ExE0o~psMNDn1WOEDPaeO)
zR?h!?rFpr6*5kRS(mG5|#6 at PN-3ypwhfl4$%%n{zf^Q0#C6bfTZa=Q|y=J;dIR5t<
z#pUq5!H500#_qy7N|mGq$^4A=!se<7Ro4ynVSJYQHQ4X at 3GHU7JM6Sc#oaL)LaucS
zS(OorToHFi@@43TZxR~_W$yZ!<X5A1`{meSH!aS&S-tvE=aKDYC<pn#wwL%dQA%7>
zYKU+2<&Z`V#Xd=R(_r)71Kseh#u!NKkxsl9jx3|^v3_BzsMGde>*cEz&8APwo2$Ar
zY2Bw`env`(eg9T-b at xS<uKP4ixU)!Hao*akt7SW1CUOAw%ssbmMCXrWEqhwFMt!5$
z`uv~zjwW}CHiGvfWyxlDc~DN-K(a!pReLyAa1b9#IwEqb8#&4)u+c=zoiuV=A=Z!C
z=g(0otU9VcU!OLTADq^Ze={O5DXTjZT$IwJ{N9qV#xolb8<Z}BuM)X2tv*#kD+m6P
zk-tQG2uC*JgQTOgNzTfd`*H7 at TLNIcw?^fX_~eA7Zi%B_IFoZ|Ch}K|?z<(3^z>CG
zD+V%@Tl^IKl+_<1cBvA4*%KrF1e-w+$pJbV94DTYP9YvMblal$($izE#Wjr1jm&*e
z4x8LN;j)CoJwXq&z%XclVTk`vyn_q+t*e|%UPZ3*(|D2hhc9(eO9gU`CiUFIdHrQV
zdC$3o$eyq8`2z9rv*Nq=B>knQgnT#I$vCrB`5Aj_;Y0n>nY!R9=aC2w(E}6Bh$Awu
z->+$QTWMWy4qb;eGDoC*;#lIjXdU#r2I?zOd9q at 3A#~vfzR*EmSpNXNdCeh?e6%jI
zIk!BVGrBPR0G?HLzfP@`n7H~|eQHJQ=MmFK>(t=UUqWo=2k_jlZuLd0gyrzNl}AjM
z);!<ItGrp at dIC1<^}y6`T~g%Uk9gk<?2&6fP-+_S{${s~^#b1C048jWUFNq8^VWp-
z<-J*~o8C4BRM;;f|J=lfZSt$IvyscLWOO0cP<Xd=)<WtatD<|CV-(yQ?<P0h*Dvir
zuE$cBCM^ZFzc*TRz%h~7whWY6j`ycEVt-(tU~iuT{dBgAhFm7yW-rr6Oh5h{r9QqL
zdVX#o&8p}*0R6WF?`q`7D<rw`kf&S5GIpC;;>e9<(cV7xYo=(wI!b~%-i3eo1N5WJ
zzZUrcb&PD^4nMja{)HZ33}mBq at XcuX@`v}JuXE7XQq3Xs!LJbqo%yLn51xsb?s#BV
z`x_F~sQ=G?pV<czGVQ~t>p4p?*6-NZB2Q`;nV)2iJHx0>+u*0b{PcbcyP4>IxHmtc
zYv_X`_iJE7v!uNV-Ex0h4Qy$RT<0(0+#ot at zQ#{Py-w>_Kf2N!Tlz~lY0rFc>vUho
zy#=GssKp{>YLn*K<R;DB at abnOx%%A92+o6r!UP7##F?2pT9;Zhx{$5LI2^!S$YklB
zZ*+rKDgX8o1yA>mWOU)P2fo%4%zlI-?Y*9gTs_vyC2AV-Sl$>laI!}$!xgMSs*We?
zm0~?tcm2xU0Dh3;lFGzYWY74$e#s1X)qM4Db>H~Y_1~n?wcorz*Wv8?ntGXz2tUBn
z at mfzSg$w;EBh(M-*}A0gUg=;}G(Ty2?|Y-QOR#Rk)whJvO^(B_bp5{I*;&6tgwOPj
zcen;~$oh-v*|OiOqxWJ@`9wPU+|$3!pFiV4IQIm`%lM!MIUuv<m;6 at sTxs8$2=xk?
zA<gmn>JpyL)_Qtrg!+CRY%xoLxmnEKl at K|1Ba^S<vR#)yUU}o*DiZ7Adj at tN8Dzw%
z^p7M@;e6na=JnDU>J+RwaELC=v}uvcuclcJnIFG-^BPJ7$jQB(#9eVON-{oBvcSN;
zJbiBZidQ#X^Y%AvI5)tfa|$^RR>0rlA3l}dnAVm51!UTz{XTqu?j8P3>`~4yq^o5y
zh(&$<gtt$9&+$~LQl8TT*?_TQ%y$@WK2=I{@2r?(*ioRHS)iGmaE8~`Tf`If=EAl$
zpQrE5wN-|-#^7^-{=IzK6t1GbqMoKFpzRvYClWnd4FBI&Uf&l|=SyRI{%2}!uF;E`
z1vX$0(J!28#Q4D%FUg4X+{%c4pUhjioXlH}hT(xQbbmpA at oAymNMu{~-j)i^yUae{
znl=UhmC_k$oemd2CI5Pw#o7A2)m;W|vXjXr8eQb%{8o;!p77zx?S*tB=KUOdX8!nY
z7waF~Go{q3_X3XC_apZ*t}$n!6 at InLWWGC(BzCY26!3LDr7gFyF6!(CR;^l*Z!8wm
z`sXk6uHKZ~%2s=tj;a^a4dC^h$Gz>?2wQ;h><~+bT$1tghVylNWxhKtHvh}l7r{T6
zf_$`Q9 at n0eu+v_+GNY-~(XwGm(#Jgoe!2E$i6OPaGk5j1Txa5=nt`y>0hM;C>sQLk
zs$}*V<b~}~lRbvcDo(jsZ7=jko-%*njYQaQMb+vsRzqa1t%xcc@(Zj4zJvJkZ_ at GI
z2Wjn#O)f>EVp<)g>Z_-P!|6+RA;#Y|ynfYt1NtbbM0XbVta^XLJJeR}Q>uZA=+Y7n
z%CF@&+(AAMI)Yl at yc<|3$tb=j*M*!EZ(Oy- at jBw?_aU~doX)4U+kz+!Rd{zZr-^le
zBI~q>f0f!Q%1B8qnG~5jV2D1z(ojW`9JT7Pj$k`!$I!P_6v~v5dwE*>a>zN;Q0`m@
z4_qKZj9q4O3S!eu<c!9AIEl65u;qSW)eKK>a{1C8f09G`(B7Nqk0w`0<VMIlxfm}6
ziPL9Ua8^{j_9RdH`*O&@Mf5h<ob<$>x+;{1d=rjJW)8h3$xz>TPFL^-oxXI9`*z4l
z`sv7a+l|yz{AYW at +jhAmL*k^<*|knJVot$-;R)bmz_u*#_H9^_-vvrV+PVF-T_M_*
zlEjme=be2(Ye}CcmkeY?=c5jNk{r^P!QJ3Ant^yYw40NYyAd2FtH=8IN2ZU-?=tfH
zt!+_n6T2wNi!TWzIlOVbfVxK4MxGrqQ&VPPUX1Z1oz(1w4faFGG#_6QP6Nh|Rn(*A
zpYDKtql at rGdSxuw>3G+7V@=Q7HL`r(urnqNc`wt`R~mY6_+7RS0B2+^rHW(TsgA5I
zp^!6PjBy1H)^jIr51kQpK&f7u(x-j(xst$cjP+7$ALJx5m&pI<JnFKahEh3yOS6)>
zQ!;6(+?^XDL|aO!FGIIE-t^u>pNTx1p9TDK7W~lt)DXGfVNuUzHSm>^{9p%tmYOVi
z1o?^Yaz3WMq>50^n!aShSxs!oSKv?j{#df&oRZi(pl|FNX(hH|@X*}hp7FETUoRU_
zPoNvH9x8jYS%}jQu-GNey=uhwr8bqkpKRv6{kyVc>(X^@vpVNFD_JYSR=SFL?hJYY
z#@)b-`{vb?L$?w=$Ok;c&+iwNFVLwkN(sM3HS~F1cROndl~QWsH at Y&Zj-e{am-Kr4
z7ku#W-F8Vt!M%P``*=T>eIoik7W4aUU>C+i9-nwizhB14`)<hEI{U=73dVnwi1Yh#
zM~=rQXe;=%wnYoTt>dsAEmF~l)6oo1&h#_)3 at 05spG*E at tL@IAUx4kgQmqV7CYCsi
zXrDDvfiix|6|i?5*JCYK(%|`^Yv9{Z?Agm{A?tB)b5xF>mYN7IKz(a1cr2D|xHPDZ
zE-G+>E4(uK&7VGsBK9CvfipM-IjUu at FE?1P9EQI6!ZbCj8Md}ZlNG$ED<WPL){bGr
z)%>jB6yTehurA7gAH+TnF8xY^MVwntXQ2ES5;_J1Q7XmkRiPJ7V&7iE{h9RHodIgd
z&qYn-|4eN|-yCp#2^)~p`y2guWP6+O>^(Y$T`1nj-Z_m+jb};M?fS2=Fnj~dB^^V2
z3CKZ7Y#>?u6ySlCcW#06DwJAOvgYA93V)rLN_`|Ts8#fC*w_CU&$5aQBMg at t_~+Et
z$4vdEyy^T#jWsee+LEmF)VUQR*qM0dt0gg?tzAfBXEatdaEysk*e~+nGv6OumN6sd
zL|nt*sVL!!EGj3gG0uIi4l+D57VJXYqv4sMlQa2<9&*~jwhX(M<R<tBr~7^vTR&Dt
zc~lo{(^tc?<J at OUZXPht_lO3&B89H+ at cCK(9$OXOV<NXBr^NyD3z6GJ6{}Jt8J at Pm
z4z+65lvTfiuOvUr5EqnxCRyfsLR~0_oOi1#x-2D?YH(Mm3+V>vY|p$k>_|en9dS+Y
zBQ$AlL-x)}#u<wFJ{g=KIZ=r?r#kZcsG at w){2*r<wHrAR$+N&+ at kc$aE5=j#Oj|#P
z{AN%q>#d=a@<pq{VkH^V&i=1 at CL-=D&doDYSu5M at H%cZiS)X1(fxB!TIPkXD<Y!Vv
z5A+|L%XdBZ<Zr?DaJmom{F!r=UrDKKMiN62`tQ+lv^yh0<xERPK5N3cs7|6A)Kfxq
zYQd9+r~*lb7<G@%!u}f4ad<=L?c327o_0tHeuf6OC=vL>P`d39oyjU!$IuPzO~|jE
zHNac-tQ)dn?y^<yIX;yX(v_UDmS*b2{c^}%z+_<^=Z`ESey`+pSPuy!M&$pVyWmg1
zgg!U9d1kokzHxrx?}lf=SAhDy1RhiDOPE{OC(0_epLtHz)d$YCx$}l0iwx8Hv?uE>
ze-dg+{<u=&gZuwM?M|vgT)b{~<;e2AhC~^3F8TWX{4D!HQ=z+2M060$KZ)*>>%3_A
zG_c3Iz5 at omlDZ%nNPMqWM!kr=v4B60+Dcuu7nP)K06%%^o|3dr!fq{#&K|l&`mm^f
zR~qD)2mB at pVtu^-3EXRVW8N;#IC~M!G}XxR4ZsebN&mht`Y`-R4)~GsT6Bpb+fnZO
zkaIMyFQNZE)T^}AMZZZD^eW2XJOZrRmqhm)x1p`7Ig+Jk%cx4b!u14uRY70c?{%{0
zJ$=G|zEjY;K~pzbt*X~8?d<#flT9a at k?SDqV?)hF_#M+j703spzV+uQDNp+m&T4hx
zlVr|TN2v^Nq<Jtd+a1fWx9gB|B^$UO8Ei3^VT=2i+X^1*1$ey{b7tM!u-izIb(i+X
zr*n3XeYVA~Uw8 at Em%&EdO*pS5`rVoe6XHZ}lXqg at L9E50vi^yE{FKJIn at QehadXCp
zLAu%C5i-dXUt92A!+kS8ot*&;@phDP`i_Zv!xD~MU=7fROGQe5|C<LDxx|J{I3a>h
zV@=D!U!=~P%<Uq!=a?Ddb;Nd<7v8@#WjeQuuI^{0_~N|^FB7+ms-!e77i9Pvd^VEL
zd|*;+PTFiMq%HmKya^jdh(CrinNs2fc5*5kzQpL5j<o at JJ%QImNhNT2nZaUUw2qMf
zvdp&GEQ`%Wn>U;*$l5N~%RkcU3sHxczVT%l at T#!+vP8DUta`j^@j8UM2CW^BvV8D*
zB<9hz<6`6X?j*jZMekL{pkD?p{~|t1!RzSTD)jRLOVs~E*SE(-RjvJ}CMJ_(ig+7M
z5s4B#&49$|Vy8&z5E2m*9(FJVc{)KJQzOsG>^Ka=;A~+tSHxj}xdC#O%b<dILoFRI
zAu<Xh!wd*iMumW+cKLnR9<0v$zP~@_vuF0~%i3$N^{nUeeZCK#zeue1n3KHFz3*B;
z{Yv+~nI9+5ckk;wTmL8bzR3g0kGl7DoTz`?y^mX&yvV)JX0Km?edy1rUnS3W at 9P??
zU+zBcp$3u*0RAn5P0H32$9*4~%+?)8TdsZ2)*UDN&aidIv9Bkb_1_r;dg6a%l7#1s
z7267pBv<RA6}*7>RBVbh_~QMZ#perrtf=F4anpLk<JK|y0zQ|w&gY$^+VQ!Jj{~0`
zd^+*DhEF#>*D>yXMlGs2A^Z20;QKIQ;i(wUxA6ToKI0*0_n8qxL?3S05C8pH>;C_R
z;hJqBenz6V>_SbEle}Wr2rw}6&Rn|5H&E6~wmnW-FUtEwAG^hw4?Lq8xCpT#=@n1t
zR#GaPdP=xGA~Qw>PVwy#^*yb+pf|2U_teD2^=uby6sGkS3%59TL_H|lh}_gs=)8KZ
zW=e^F8f>gI_P$Q)V_Bxh74V1cLyRMLfd{2_(4F3#rXD|zUNr9${rX{O4*Z!f_ at 0Z9
zB7T1h_Zhj=x*(HM>w;qP*n1(DO7y<af_v49k~h6U{CdvSQLyEE#N_``zfEsoERE4G
z#gEhP#Mj#TcyebIbam5NAKI{K+juCrbDMgCaX%^U*G3zCk3`gst5H{QJ2(su{BR_u
zLl*@6T|mnKt(R_OUO0<9LC6V%umksO6Bln%PDgt-Ar4y<#9tQyU&dI~Cd5mDaY~N2
z(J#kaLSqjV>WndIvC+cqB5>7_w#t>FX`krh<iJ8%kmsM~dZuVs#4gk(f}Yzp2)t(%
zmjQOFpw;4Wt)hevj6+u@%l%a+j0T=nJtGHLT;%Q}_B at G}C{o&g^lEm95ocQC=4@#H
zfyW?cYB%iGESChn-h(V}gf!IP(}8Q%ks5=r>Gf{Th(KCg3~cOSVT at xx;gWbdkN6`|
z-|!&pF$wcF>d2RH(#iGQ=fJ;MM>r;cYp6zhVtO<*_$Q~!NG{--*YSMOc*lr)QQPTc
z=)_AG7lA|LX>sya58F^o-GVy%Q{$7#_p|++NyHxw8|#QSu-}KvV0$T%iw*tNU**^E
z&6az<3+2o%MN;vk08(FC9kLVoFh=1)<io0LcYtr}Be^sK-{SW{#C0x$i($^Vm|9Qz
z6uKCW at s_)^sNME0o3Ehee}<d{=xDY(0V?q4s^PO(Vg>f at cfLt?jyU2Y&>yGIM@?4L
zZ6I-Gg*to(<_p<wWVb2uwu#^Gxod$DoPrwhrg0-P$}uliK-bM~*$GaY82>rLRsM5?
zw<yKMQe4;YIiAr6F(rSMyNwF<ym^0U7i!Kild0ETbBolAl3scaHUGpzH-a>T&xZOT
z-rOFGYcA%oztPWZn;t#JBR)Hmq#PV`CD>;a#=@7QlqRoG70d?CYKiFQCBOue8b{17
z+{;M%3V6ML{PDhHO4U>3S$)UQ|KrRu`)b<o>3P}7_&M|oapO~rlq#sWR0ngaoA)<i
zEX7}*ax*n3dsMFdlDAAaCid&gl^Xg!pJrJ8WzgtVowQX{#fzt8uoWHBWJOBI^Wfuo
z)qlG?{)T5<_Oy3jOZzE~am at H$+0#$;9bPDo$n7a8I1 at 8^vEtJU1wVgufzxVAiTL5A
zS&s5gFF;S<Xu4}3{U~91ujy{w9LGy|o at LOHmic#pgW at ClZ7MJL$neuNFh`>wBL8&t
z at S5N&!_Nhu8h(B}$!8zt+Sp9k40Px}e*&LsVQB2XLol9;!38QhdNYp?OmHk at sQ;1@
zN=2}Rz?CQoclJvyz?D3XxOS*N@=&SR;ek|@>s#bmI^cu<K=3CHFlo*gVCP>?y;5X^
z at 1h*|+<b5?EaiIwD~24Llo!W+{_EVl|2~&rOt5X>^8)S&=UVQcn|g%-zh%=r|GD52
z4GS(vNT7Z4JH%~~x|vS9IQpAzrBp1+UJ@(t#8|olyh0js#N%WlkL%wK21%JdZH8|(
zaybvq0<SMsbgqIwnYFX^!hr?p_IVD(Uu*+DdE?0hkD_xqgZrDaQ}P>`Hu{RE;XmWb
z51!TZfw#1D7dcL-7*9qG`GM`*#p#Q6Q_x3}<W at Cp#5<+P|IkyDiLU8!k`cp4U+HmN
zb~2UJv6(#jCxMSRgAS%&?aAdB6D?nz475;N<JHt<YSZ)#N?mg;?#cpevmQ at Yxn7|x
z^}hT^T-{V*Fya!xlYbInYE at IUU1|#XZQ>l^RhyH&Ujcjv7R-}0`g785cCP$7vzHRP
z=88IIl*EndKA}ICDW)Wk)c0KBWK((3y<LUJD?}YL%fUbN>MYEcE+uM^qMn+di|)&B
zq}xynAsK$5n~32y2)e>+seyuYyPCd>F at SuR)N*adf)e~*DDZH-4^DH_a)YfG&pp{6
zT&D1=rK5lMBqS8{f>XMN8V^_W49rxbey^fiNogpRFo;SawM3T0^xw=*fseV&x1Bb^
z*Zu13-`moUwrtG*fzyV2?x7#^l-a+eOHg}UCU}v0$G*yGv at 1C!z$e^Yu0V|yCDSTc
zZtLwiKpSUSW}57T^FI at Hyv0MigR)`w<qH+moZ}`&vZrvNgxSR{S|YOdI4U5g%MkNN
zjj<V~OPQRnF6Gij+*gvni{tJC6_bVdH0gt at _5s^3h_~KFtmRSd)zosqXNcddib_{1
zP%BDrC=n`0)$m7<HQlgAM4t?*an1E at po>YLcQ$a&i at Il)`4(B5eA6jomxbv~d&D6U
zbx+ at gF~aOr>3~PKntcl<{+s1E$f!7auT8EY>Ponn0`8v5Bk~V5pL3b7$$P>3`%Kg^
z{Z+KBo*Dp-Obi|&Z`jtSQ_I((ZV#!gr99-k!T%oqC2wHuQBzG2L5 at RyeF1X8o4~~>
zm+b$IqoO1Dd_qFh<Sw%;BY&!Io7NmqZf~O>rP4Sh)CJead=;l8{xIiue9NerymRti
zfZ=|N?RPodK-J^A!1WS7%`fd_92whs8aUa6&qAb|B)&hkfQ1luwNz}IughBYUeCeR
zZ$HBrwq<~0PBl{3V?w>Rst3}0OgOJ<=25!AGhH}l-p(a$MvXpdG+Z7tK)W`iU_3Pe
zr=Ep-6-Dps)Zv<lHKvIi#o)Cc%Fm?Rgi7EQ#Lx>oga+GbaFn9{w0|seM<W~yz#o at R
z1v7?Cs+QvI*<`Fn_kx?|o1Vsz#vV1DjaY8o8hJ0q2e*cn$kKQ2l^WCbI!x^Me0<Nx
zdpQ_>fPF72^rbku>2fZUF)>zlQ3DaV7v-E*`x6|a{Q{@Gt2W|<Ru^&Nnw*SPyqEk4
z*BRpX3m$KcZ<8g(ua+&1zfJldzM7AtC!;N%J(;*ieYnLwK&8jS_r3GDRGfAkxD(u~
zZQ@?2W30&UotNoxHbU^Znsb|ag1jrvK>UG-A9%niZ;(gi^~%|IRinMS5B{=9PitPY
zQ5H?V3M^NtU0Y}D=VhlL4<x;Z&#8P*MOQ{IDa_P{@E~u0*oVA}#!flCtW!i^k5eru
zp}gyjf)DF`=}ehHE1zcoZ~vs27RKpumGH-*-*0i+5Nm#QhpD9oAK(lYlv1c$fSd~S
zab+*^$rMyv`0<E=s&{s_O?TPv%{*Zj%kM>YN1t;j3aUiio+T7=^n~6~C%eqyyIvaL
zh|zbwF*)INajNjT2$lR^+LxgT+aD%tU6t$8Syjtk;JM~P_O)UjD2Y#l(o9!UH{)XB
zAM7(Dw^|x+fnPrdezAJj5WgWpc~8gbML!uP#<U^+0NzKlTaIBo|6P0aN%T`yem;ED
z`L~}mzTjnALVSYT&y6RIDVb5=ohpTG1Q*YAu-~iL?{?yg!aloTGvVbc2dCqVdT?HB
z?XSpAfgkpPo({~}?im$v4be at PJ|Js9Y|{j{ezp8lYd!ERxmMuNdL$V8*`8(CHpCtr
z$_$b-GBU2*y4L8&ydw7)Xjd at 1$bNpGE0X-juGz1HlgpB|Y~%d8mHyt*21&tCV^D#+
zwk2wb16Pxk;>P`qJ8w`Q{u1Bdx&R%!#AhG;{C@=p=yj~U(wUd-na%*n#tN*#waAf(
zfsC%@9>DtkXXN=jEhWBzblAHy1GfMV at t!jeIHsN49W3VY;W6bSufX36KM9%Bz|Zdr
zsR|1v*JZ@~i^B%~UR>wd)+1wL9GC4W1GjW3jyDPAj*=vAhbi{=b879)(M>(+gs;z&
z{8t|f9#O8A{6<YnU;*NOJJx+~U_hsdbc<>|PC~!g7aH4A6H)go*30-x!Zp#Wr`6+Q
zij-G>P4>of at T2R_%ZDUEO=wRL_+$bZUq3H=e;%>eT%ODRyrU$F<Xk;Z_C+Y#^S*dJ
zT!ppwfb*s(dr=kc^&;%V{iwS*M80Et3)`2urLh08kNoB~JM+-iCgi_?Gao!KOH2FC
z%4pLjS%f&sz-yt9tCo6orpR7Kxw<gMUjLD-NnBvtJ*&AI-1j->O<ePpiF=SOxyRbG
z at I&)ck<(ZXpKBa=pzZ=E34R&DPtL7^t-v~~=yd*@jFHs)Rctaf4`!9O^NW|%qPD>V
zmqtS+H<u{|7CHWlcW|GGP{SL?Cf?1{$V1H~^&~mdaj)s%Uu3_t`G(Ju=keS>@$TGt
zBJBHhj~D2E=c44U$1Y*qfZNPK#)vS_IfEUa>s=RkI$^C{ajw)l#+l0Mtod#Z^7sy!
zm^_2FIG`Ns%0Z8_t>r>xgz`V~s9t*-<YXFR^3ts3?>3Rxe8E1uH>Zeyk6n|7?W-c3
z_aNg)&Wm9A^jY?Mh><GmS0^{&Sy4}f<OsoDPv`G&l<{jq6TY6ra@}H{;Mx0}0c#|^
z_j(#J=UO}~_{Xb^k at Y$Qk70_rQuP6h>!#oKAzn%$4+eSs%aDUFyOz%A at toNtp64^!
zQANIU^Cbf$#|7v3qE_C6kyB4ZUc$Bc#jQtTw-3F{a!6l^iCup<r~|b!qu*1%Xc$z_
zENLs^>APwj)mDwC6m#xto+4{`QcwL1)cRSSoXF94DRmh<r8AGb3vwSpYqY0CiN4rt
zOXtdgQ!28F!K?pI_$ICVFjp84b$Q+I-h5aHdy)Sp;#PPcf(7HDh(Dt~2G*HpFlMrd
zECC-`M0DMCadcp3u4LDm#=Zmm|70ysmcoxW at 1E}p;E!NOWV8LLW6b<#7(MEZ!q<;D
z?|RsQDYucc;&<bt*C9uDU1-6Wc at +4GyTJ8+D!Al&5<1$#<qGEwVnaZ_t|R&a(et|`
zr0;=$({Mh;yMW&YHVm;d%%kgIV}SDrIR|&?(1|f&Av(t#rF%TUhDm01u`_O6jO6hV
z9UDH<29ab&GwkqejMIY)<q`?<g^=S#-aliyq at f#xu{mOH0p^Z>Ft~1+B=F8|O0<ym
z3w at M1p*M+O_wa4~|5rb=`u(_jyaM~-m8#-2QsCS8E)VnQ)nHSi$raJB%*jnvIlcOC
z=E$8IYdSv_`wfVxA{Rcf${B$CTGUAKG{uUCijf=YOKUhw5hE%Sw!7woKf;ba2~E7B
zD*=y3Y|csa!`9Xk<W*ndUUfwPKh#1Mz>bLp|BMp-_;z#?@9&hr-cQX!?o0)BG&C0d
z+>5#A1^&(bJdv)ErwmuN7fO%!8*_4<a;t%~3HPv}ooe`{f!)s82Ys{LOW{;v-T70#
z<m&!~2|}aY()wP$YRZ1_`o?C*>kM82jx5O5%l0n#a)JsI!jrx>2j-osB=3#7h4-HW
zuJFC0zY`v;=;+}{E_e$!cumYjxwD18mqGp$=Ov!fHM#?}4in8b at uC7h)A6l%4msu=
zax?hPIQh87V)hy<kn3V0YZPK>E+PZiwTZ1u488pTWRih05IKlX2fN0Iu!iPg4joV=
z>81$|WcemnfxAOjztDZWaX;CfRntxE7$j at a$2hlZVtX3fE#T$;|HxdOdNe_p=K7vi
zKbVNR at K3zE$n~614$fW$=3bt&hWMQLJDkc5-VL+f^=X**t}kQaKjX6Ee^xG23Q~74
zG=BSO#z at sU-{~pAGq`Q*be2EuGHj at JSvrx07+WL#bWXL;iDtdvaPW~ta7Du2&Ov{E
zBWMP9_B6IH9>jZ|5uj`_3l=f0LevAhd?luC1E=<Y;F#@3>Se}7$!yNe<q>r|bosJv
z-?!+JrOjU{k`x_?F*4w4X$e1o=fA?MrF!c3#EOQnX7?5gQn2p?TT{X*nh|SCMGf?w
zlfjYK+U(jfm#*-DkI6p<zMPnG)M&du7d%_~wK>&x5e*KFKX>AL33Y at S6dVR$P_tSK
zow{7q&o$GU(bs^Dd)@vqrMJ(+b4i&Sf+vCLdM)}g^xiH9gZ*D)e?HmIgnBVpt9j6E
zRl4scXIwlm)|XSy4A4pRz-X^@0Nf2E&pJ(4$peNyYd!MuQP&e|-~ifTTv+I5O3VN^
zc`T{N4Bu)^bUCkzohy^rxpEBSnyY(^%#~RpjD0o6zB*(-Zy)041$TTENpEp6UiOgx
z!S at 65wX?;-k8r=`uDi2!kxf>j`!5Kun^t(Piji>AXXm>%khzjmsWWK%Ifo|JK(9ef
zcu=e|?v1P8;kj>x=<_`!Wzvn)IxzQ7ss}kgVZ3=o%3IB(|9q9`i{lOpt>Ii&sOHS~
zvOD6QP({}{-b6p7>AqdKUN^9C1-TE?sz}-}ye`(UkiSUMh_xyYb5mjOD%z=i at M?u3
zDP{Z91-%5r#m-NxtB0wd{y0A!yD*j*GRB1M(sGZh=qvER3_Z`3CQqp+^0Soi^kdHI
z$($*&fD>XgG~wP1M>UBB`u*8aE=<GR-G;e~9Jq;jn;fU&xa=;>|Mlo6Ct0KY8WJUb
zqlp>F-B|7tEZ;XFV`<$EvKEkagu5L+le~MrtR7QI=6SPIk at 5`1PmMM>GKWk-sGWB$
z`<^ise3XybP^<f3v>`t~x_qw|I*r&-4Q>=1Kem9YAioKpFli4%@cgjtr`O~CJ<JEc
zPp8IR)7(extik*Tmn4xl<4eJJ2^nKOa!<l}0T`Dmk>sO;tb8DOmLIcumajn91GmF;
zlTZm9D)J76koi>`;A4<N232FdLX06%O(zTPTE9jPkEitS4;_e1()|m5Zhet#beUf~
zPhnpZmS>j_uLM53x9c!ln|!V|19fC9&|6!cOUL#V=pm+e)PED3YaOUXKi&O(2(=Gd
zuvS|*Yw!PG+U_vj|KA`N at 6t-NYWyDvo1lp=1lIk*e3 at UU4wf$`5HgVu9jrBA4!DQL
zWZ- at p9U{ILL6 at vQUqH9PAH~>rai;B50n>05x<+~ALTg^u6C0sJH_uSM+jD?p*{G$A
z at s+u&U-QZTyL98s7h=~#pH>llnh&2X_;U(KtQIzFU3eokz)?^ivOXO??D$f!qXM at s
zY1Nvg9)hs&%$QpA#WdwLyIPik`e00qimJCyl^SE}7#Fc65o^3J1DAAKIOl<%nZ{&r
z^x)eEZ_yOJZ_iLgkQVRL0=z`7^(fv=x^Ft_c^rkGKs<6lq<-!Oco+5sDWc2IYewWE
z^-9JUd}{??Mwjm)*zK?J;hoU?X4;&-M;u4#0nQ5k at e^h`le1LVZgcXFOHJS&x#4kj
zeDW-vbDZq&Y~<u`NU=FFXOu}Lz%`Y*a)667fRDh6F-EwgPDB6wf_EFblc_Ej#}}ez
zCu*{TkKh;JP3~An-RC-*$=Grf0)H|G`{#|MztdK)L|%jzyvG(?>tJUl=Pa&u(KoYJ
zo@^5DvNwV={V<OG1?QBB3FpRH|6qLo3HyE(8A+{idrQ{x4Joy`6UTS4$Nz+5_Or)Z
zC)(<Z>n`PGux%W`b=}9!`RzDg)B!2Cf5`gsPR2LLoMcXVDUlb~!3jm(zF}c7{ffXR
z%5Xkb$$@{TL1clC at uPxx*2kC>Qu7Jws&vaqEpm<vzK>e_6QnK;n~&r6Nga&Pd at RpO
z&|aMjI~!}Z7+hmVPDx-hx1)df$mdU3qiI+jn9JxfZ at F9zPhfu<^DrX1Tv8ZO+Fan$
z;kXo`YQZG?&-F8U2B5nSd6o%+!4-D%ww}LZJQVsNn- at d)>@golHh9-D!m;V;_Iu`3
zVFThW)pdKwSc)|d$$~mi*X1fuZBMu!a&y@)C?7u<{iEp8iNkgYY&^-#Cg?<r at QOJA
zF|z!)dPmJHEplc)20pkDbMg at 5N?SA?*Oca<zE?hu`2yU)b<o*QEfgUS?@-l<SVA|Y
zokC3_T*s$-;yMRNJI0qCgPbMy5!(6l|F at kc*r})8?R<Usemey#+rNM3TCMs7au3l?
za5NylhS_<_^-kI;wmli7Jrn;mO#By(c9c!DziFcVeG~0xk9QvzQ%C8{Bkc1YbkwoW
z at 0e(Jv!k5-eSPA0i~Bk741ED}CUmu}xc@!GVfY0pj0dgHmlTnCOXkRjYYO@*AxFjF
zf+^)?K?XODG=cw<aBW(AGouaPo&mQ>6}YU`i!v~8cl#DV#va1lJu at +P31{t6#xOe%
zy46xL{z;9)lf^=%a~^+^6#LjYS%`IoJ;wL4W0de-`MvMn&+TIQ<Zg<lPLIMo`(ojz
z1&MPA*T`pVeb_f5RbLx}_QEE2zqdN{Wi8&V=xin at pZnqh%%|~W)El42KhB8LuHgQ6
ztQoL(!k at M{jtJG}3U+RzP9)kkF~1#|q8ZbXmyO at QIOmahy&(m2R;6>P(>djsgW=C!
z=_`R8DrRLx8R83>c#j1xej4mo_B!|HIeX4%koz29<>!x70#p1re4F#gz1g`f!JPXH
zc&B{QZ&eliYiQFXDXv4FF)IPGqY(augFKOI6z>uIGM)_{4dfZcX!Ce7o=cQ=g{^b^
z%P}2i8nN*p1A3v4UdMPiFH|ov+M7`mLSm&O&kgMfa=FLloA2Krms3Cb+1%YU<E8G8
z at Hr}!ljEV=pJ7T#e!(RbXAgWg-w8GBeiQdHV`TTK9Zu+ at i0OJB11G$pv%%4i-zA+U
z$kd|aX1fZw`ubMAPoAUMN8_+OqTm>bUF at Yn{bR|nk*h_U<W{{;uA{<7?l6;cd75D}
z>^oDWmE22L;Y9;~*aSULJ}d#ha#N>#Sk2u>@_C}09J(lQ!t;!FK6G1e_??QP>g*?Z
z^>+UFGC>sLlzCX=N24yoFM0X%+TiCB5^mqp-mWnqFX0T{|0}5~Nv0I|V?|Qo`}T6W
z1o-D0^jw*N0-lKSX5(ifp)$R~ql0?ct{^#~u6HRdGvLvUc=FyQ at 7T+VLc|T67HgyD
ze!)f846P-gVuM%hBD#@|*RFpOcx9|3-c$qZcqeqj5Ra?$9^seJl_%SrSfAb$w&DA9
zo0B at sxbXjE{4WCvR&Rf5B2I+(n;@Rr(xt9nKztTY$bg|%y7pR?v`Ogg$Utm6Y>Jll
z70O{l*f9Sk^bP74+YR_68in&54Z<QiOYjz*B`k2I(wUxyomy9HnigYfr?r&Awf%ND
z{)0I<gBvxW-{sL~wO=lPj7NWBJx7c>iNvQ62RNQ at rrXvfywZxeEQ#Au)JK%QOJo})
zb~=0w-`Z`QM<@I{xIXm8r#bNRKzC$gJ+L!16S`yYxN!w!4sRFaaFZkxwtfj>+=alI
zp0uam1&39|G>;x8(<_e#CMYx^Z8CDMREYh8*8yWX6k~c0(J!F)9{`3kA32Sf5A-zX
z52%f~t}JpP;w=iPIP&`R6I2=S$ql-joww;idjmZLJ*@n-$0APjj3KY;G- at WbOgG1@
zFMI_4?;NfaxlEbU#nhgnuU~r%xzh at 9@@vbf6J3;}G^W1r3HtW*t-u)<BR{zO+g$3z
zmk|YC6F!R!+<zwK0FjmBf{R#p)tm%jZKz?#zlX|w8+!F|G4Ok?MeOP6$Y-p1V;V)0
zV4*KPvxJ&UX9TE5S}4R at sJV_K?z)B#i3Jyj^9U~0nn`nz(^c11g*Jy~CB&@-mN-f9
zXa0jr^i(?HOZBW=yhmBiHEoz(Z}Iq|KA4*+DS=&4cmEoE&j`IeomU&5FRjP94)$Dv
ztBJAJllJ3S^qVJqI(P<P;0HCYzJTM-!S7;$961g?X4aPPD#QB82X^+}kQ#Nw>R3+P
z5=Xr#du3hZKGaLpkhyNHaLYmGPiY0tr{bi}d9ahFvA#O>TV*2kl=3xgeWj4$=Og=0
zn%A`THsgDDWZ$`ikdH5tbD=ZC55LH?vjB1eTx%lry7HX`&VKfKkeQHmFWG}pgLfCl
zxKJT2zOVlYw<0$p4|R}^Q?>TRVso5|xe>R`=3KW4`*johquBk<xa|}BCGb&<Vm|P(
zhRKh$EK_0)X&M>`+-n=_naZhzPomH_6TZBBT{iTZKyEX}8Xx*kdUVsbxgme~q})*=
zxHdD8(uyjg<Pm|^0`T5xIGo5Pp58tcV<_EkPVrgW7=HzPP47pP!X7q6UJYxs%cUie
zS6w|`nq8<5!fWfQcNDL0AoxktSy+ble2Du at BR=gI1J&Uui3KKz65yKCSiLqdMj<r{
zZPFJ#t`@{Ixtw%fHJf)}CN^HcLpWc6^Ph?^#1m|}f@*=xBJyXF$5lKRa-Q*A`5wn5
zM(M_f4j at +1>vIqG(UmAg*J0;szqWj_RxP#Qc?ID*9W0b79{Bzg+piv^|Aw7$?@jby
zhqdOOhVz0*{ZUD*MpsPUUre3!rL=;Ac>W~RmS)g*yQ~&r19aDF+ppjtX;CBvu7%Dq
znsjJpuU#aTkhLtX;n>fQt8AGuih`uhGo1Vf<#EweN3R}h*?Y)ox$&Eh@;1>=U^5_I
z`7Pm`9*DZ!qjq5YPASKF+E&y*#gN$GsAcU&EpSZ|*x*H|nYDw|FpM^wmk)=+j=OB{
z$Vs<91^aEyN(<KC^Q4Y%rxa at m{8D!QJ)>_vnOC<{fbp9K``lpHhE#o0PWJs^W%ZIi
z^8Ho-8QUV=%EP~1LrnZxWL<_137k0UFPw}~NsXvKF%+o+M`&qi>}xOJS{>y4k;(jG
z9D8r5B(kfw1n;DXn;Tgk#H9=!FWvJY*AAG4*lfjw-L#vvo1k}j9`TPs9}v!U>G->l
zdm`3uLLB#ePPE~tda`dF?5nrL{xL+?!Wy)nw8;UT;+`LWl4CdKTt3=d6r*zBJ%N)_
zg1M at 4l#=hTWz4XH&=#@}Hq(A_almZnII*SDyxnu<Jo^79g>!tTH?VWj=3a7Mz#{y&
z&<ZYsyZ)k~2s2l6&!4LyHIXqEd3Tp%z4Zc~qi%slR}%1u?)*Yxr}OaLi!lZ)rX|Gx
zM_q4z2Y#qW;G-hCbv4FnLu at VTooR;C@!sm}rLd9P*!V*$l_qN?c8>PVigK^QiS<hv
zp&Do7570N`IDz(Xyt}5MVsh<3c~l*ZJoh3=1pME}BICieg7<j||1}`z3EzKILryis
zUK#otJ{}+BkGjN3d(!*r(v8}8Lr^d4SHsupG{ZaU#fAX&uLhp_9=1<ojd!*QNzCb4
zX8`fV1u4n3eu;-)AG}ti4#FL&*KRzke`_;rpaa%^4zl$}<jKuLb%Amco0&eu$Z0*#
z!RYb7I|kD3+{WMQaAHg&o`7rnI|})WFrM>>9)w)Py+e(Gdxgkbx0Yb7QFC*JnUv~m
ziBLzzulpT!<&t)coj{E45bjsc&52%kkzr#&7Pha;LlbTtgnt`(j1Db1_NPOnFQC(#
zg*xa28rYPNfOq40x4qY;BYsi%*bwu2JdZ={M7`TibcJKAF7!C-dLRBO_*%$2h;WX$
zb7a!{?;)0&MrXJ&DYOy31Ne6)mkR5_i6SPPN>S<UYS at 8KwGzz632I<iOxj1^_N*g)
z)uZ|719zXnSD~y at Be%_%W`M10A+dLG-y%j#ume37To>Hq!glb`h{<)_aTj3&Z6<y&
z%(pMS5RXch4vWe4lBHPNCA`b_3bvni>@)yRqcW=z-|vkl{_C^|%?@3w*|)(RzW|SE
z(gyF^>?AQb_**<t!|Y+;i?9xh>9<j%^(1gtF6x3VP}>kuuDvq9B(j?`OsyKN@=KZ+
zo4JHTmDIw!U?P4Ozp04D!~%N~i#RZ_(ktZFmNl>U9gAH*^!K2>(9dl#v2O$ioqh>1
zr$IL6G^N at q8Ww?zk>M(bcX8#I6M4f@*o)Bb5r;us4sjv_{4NEUJ9=y%B{u5)-_V!9
z1x;-IID=iu#=XaYmurnz$(B+d-~J(<U^!!*@H<AOEAstRVVi9I{0QO~z+C!*bHZL6
zcEWz1=)l3J!ZzdcPkc79F&Oa6Y%cFQ03Y*}kg88Zf>(!a4}Lf7y^vL(3WDc^C1Z?L
z1)IW>hQWEOj_D6lzu7;cjvL%tIf>4sceOXt##Rf*nAbm=IHpubM#`-v{rBbsay7x{
zPi3PnM0-fhr_hJN>2*V=o at o}VxwoMwV}GQfM-gLim~Bp6%VTg~CG08O-<J{hYt at tC
zQ+NqJg_r!VppM`}#j%@}k##t}E^&zX;D>+Mb_2NaDp$^+=B at Q-<@D*ny~XjD<iIO6
za=s7}o!}QXrYyJrG7(e$h3t!{YtK735mSc0y&PP$D(BYwv0MI~(D)swxr3N*!RC4j
z^^ZamQcGM>@W+ag2Zs6|8Nr(rGUO at Xdy4bl+bWNl>|HdtK{*<}-FBN=6qT+$kMYt`
zp}aJeqbJXMX{zVliR}=vF~W7my#aG7l)%@y;v_aF*-rG!8IP;YeL~wrzjWA~&;i9-
z$xI8l7E6Qj2;Lq1ewp;m9m|0+7Qk+5s8H%8$oW=t#8!3ARpe5jkFdrz at C=Ekj)61G
zc?W&_0Ax4Ow`<|AF#7^WjWO2 at TU`tv<q$r%Hl)B8thSm3|8mxl<L{qWl)*6w;r|`|
zEAh2P9k8p98H87ulZupQ)xe!fH(C4|!ag}yENn3LjUoLxa^zeowvmyY?C&?WUB&<J
z8eRB*0Q+OMeHn7>)2EC#+;|8-)u|2OzdgjHKi$|@37fzYISD$K68t4*a1$sH_n#^i
zbKfJl4U!j2#<bs!u+7dJT9ewqj&r&A47J`_>2VqSE9{tIOc<l_i*sRTt2q at O7Q~(Z
z2D$UM)|#;q^#<>vVFf=7 at gltEwcUsZ)jQu=L~{2QKpugIKWs60_|>puGW|?p|7<Ph
z57Zfx)zU&mlJr?tjw9w}@2EEjYq5?MlWW80jauvOd*ePctY+Bj7WkgZ(Z?2HtW!x_
zIRD%fX9(Il%^(meF^@LUCLgnND{{#$DmJM~F)xh#HxJ->I7;9?!SNc}=y4hCw{Q+5
zsW3ke!geZh?j`SqDsO%)H7+#arygqq#vrN3T#N02NW|S+wV0=!t!4bg)^gZ$!<419
zBo%ct&&kIh_y2`X!WcQt&dmUJZZ0~N4NgSejB5T=tg(d4tL&JGj1i27qRjy3C{q3u
zjceB+rhJ}1?0jEqvX-k+w;k;>#|%TZBu1BC*FiV9i(0EGqqDgM_<j#IybkkhAWYwB
zaPs{>V`HrgQ}Yo&l~4k^BsAgY7P=y}llXaI!^BZ-c9HdnA}R7YtmhKKZKaq`hYCJM
z99A=u4Ln9SczLR*z2I{QMa<(Oz8ABxrE=bJ)bZFban1m)pYMV{&a(<Jooc=b&$J*M
z_4%xj)xfAHy|`5HF{jP`qppxwi1yvFmgf(M_mi9<aMIFTIk`{schIp<l6WxI`&#=Q
z95-^V+TKLhEC2?uO9$LRu~3Y-RyuFrSP|}1fpzmV?61n%dwI3?A01_h9gd2~S+BI4
z-n;*dIelZwWljB at Wk(Yi&~(1!*)}0?mqLr}8?s+$2 at kwEz}%n;q$ZE<um`%P`7H+*
z$GfM5Iq83H={urTK52+lyL3F!vGhm~8bG%$$N2J{oIicoUI2gJyvt_nE9+EqeDY3v
zwt+A06=9mJpS#QXK07u%I2YB^Jjd;xbfwzEvtU^liFJGGNV_BDuLSO^!888&zv5~o
zB(AoQA$<yd$Xsxd|I2X{W8^gQ<~AUPS-G$PdQ39 at uV!Q7O}ve$GaxznnqV_*H%Vx0
z!2sgcAIf at t>tL^#IYUveMg&bOa7I5qCp4C6`?}(B#5*6!`L!Cp3o_nOhY9|Me$>Hx
z9eT;2^G2L1Lb(%bK{W6U3MKRwt at sREXY)C<_ZG0I5 at 4Xd<Ou9PLWh#H_Co*K?^VFY
z5|;}$x0d+6hId#@-g9dS{wwD-vHek^NDBP|&wgpgyPFJlv*xJaV>%~tKjTy+t at Fq8
zUFyHN?5N*9*Nb>J&54JBNtHawzONlOY)-N-wKM$kujG9x at V>5+zC+w5w?auBCF42d
zSi+`brp;GeO1$4)MUv43 at amQBxUm5F?~wNkoKdf|yJFCP8qBdWZ1b?)pGxXLoIPeL
zl5z~GkAx<S|5VYAK0!_cUE67<%d{rhW1G=Wz_Qgwt~>S^V%NQb at X)t at Om@##%<J2V
z6yNKD1HhS9F*own|Eaj7ruU%@V~9(E2bW;LSik;dzMRPS;#lf1W$4PYInftwm}mMa
zc}_lbwxhap_YCysbi(p>*Jp8>tb{4V7kZM-YyFaye}hh!wix=6Da(L!FT-c_CE91;
zYZ(*#9C%mcJ&lK}L&la<1<l`)xQ;SqY?&|Wd}%c!yScT%d(hE=;O9LC*^<wwIY}E*
zqQNyjg4*Nse&8`w!uG5L!IP*hfbnKOhkVn{S8i>57Gp^+yXl*k(~Ij(CGQaD9?%AJ
z4&nD||Iff>hFrd|Ph{dqIsHQXQ_w*uR?d9 at ITuDhhAVHO^}=@RsP6 at O4^>F{P=}$D
z6w)%h``c73IC~C)<5AaIuFK{bfk#D5I&MD?JOkhY+5`Di#%0jIZkck>p35orlHxz;
z-tGJ7{Zvb6tnw6{l&_hxANno9R3MH*OYCyGI8tj>61`|m9*)oJEn~SI(jd!}Bf#KU
zOSm6c%W+)g{l3s18mSjNX|-_wh3hus9RasauC*bBa|XHKE7$p5sGtbnUjcJtLkh<E
zIvN<sthX`W5r6*c2HslUDM}69G%dI?Y$v^&$TMD&<6Q<iIc$|J-2aS!dxKK1Kn||K
z3Oy$EN=07k0%Es4*#h6(n|LqE318Sce9wg}I7aG<z&ExwvKevmk4ZlhoJ{a at r=~je
z{hT>XsjBAhsCMukklfMz at X4$N9tt(6Z)FExzqLE(JH#jJM##JYE(*R^>}S&R`+dpW
zGRGlr(A_`1xwxMm_uIcvPUOisz2L$*Sqo~(zpVm-K;v8lUlIJPnxm1x=oCH;`J*A%
zAFCqI at jvHmlFB`2@#f|E{ZF=$Im^}58xg}NYtL%P*#}Pvnb15Jt<-9aZaLe+%2_F7
zY9lLWEs(RwJBOS-jC~D6&Q1|SRvp3IZ;4O>@2lKE;uuFEw~mc%B=Z1s*92V<Y6$0B
z5~JgW;s0(%gud4cYh9z8p+5*rzsrXt6_F3l2XVq1<oU6U6ShN+w&4BEusM at e@c)#+
z7p8=+2wAbTJ at T?v4KAfcv}8wdv%ez6=T?#ma}RtnROWOARTQC&pH+`J3I9x{Zii5L
z>@klH at OgQ-K2xNw_&0pXi~XtbGAb5efLyme@#8^jKkf~T=ad0#>%BVAw^I1_Q3vc=
zweHI7Dpt41gKi<GWX%IqdvHP6+pvM!t*BwDeiJp}Okr<hOyv7z+}gwB^lO(L6^x+W
znNkyx0d7o?TQ()H!WcLS+pz$4K?spes9%#5d?aj!TP6t$(Y__)>F_BxLYG&@b`SN#
zp0~lC9}p*Hzwx_0Kh;pAPBqL>cN(UvyHVG3ewhxw0k?kY6Ndi(MI?EYjN4np5AEmW
z<nw(nUr)Kt38uMT0N?R5+ at 9#B3%1D1l)54hv1jN!KIgy(D-agB7IXJUH(e|tZ6x*v
z;eZ%D&7T%(==sVySEPGDMtla;3Frykh-vI2cuhC{6fsggwa0ZXl5RZ++kO8+#9!|J
zC-_-+#H)yb?J)cg!YLEB8UE31uX4f9F1}#91O774&tbEbccX5z&*1;oSwq3SLv&XE
z;Cur=LfyBfwvXt$lu$?XN`h;4eu{T^P!Q<)^OORj-#v`{GBt%`;-RmDM_e6Gu**c3
z<o}K2msQU5LjBoKePa!FmfM$H196~y<VB(#*K{LxFXZusZNhrbjI^OXA^IZ<Ytsez
z8%i0%tLvk8?8kQrsoU$*%$UhNgc{hhuxXKJRg9WSVbJ~Kc}k{QBzdSps0D^1`=Jsa
zV3h^efmKdN+qbYjA?Wz`uOFK5VJe-(k7%ucZoLAwKU;Sh{Z&Hhtt<xCgxrT*7xmF)
zK^3sK+hA|!-;ak)*}MDf`(Ie at MR$Fnz&u(EzwBxUBN}?N(tW+*F7kX`2i({cVV<Mf
zS8hEf%ykgm`HI*3<bB`jVzJbueVZIrLU6I8AG*#KlJ)S`U+=#^yt6^yM$+%xGDXtb
zA5r58F&^ZqrrerJ@(Xdj5PpQjM7Zh%Gw=5cIsRc2dyP#F=(;5S1=;x%d4Ay9*c?PU
ziQp^Y>$3!?5F4@}4w`NoK#pN=PcWwe@>`4;Q0!Yb;TufXeFxpQ32UYT{=dc^4^Bhg
z1K@*B3r+aTV#q7nCD^8)$b)Dk+$+EU#Uc+jO(q&M>NCei^oqf~lo-B*<MC|~$)Cw>
z>AKULH|fuJ_i8(q1Z!_c02}PAEwa3rMcpAeH%=F9hr{rljiGK#)fQLq at +~bP-CG8O
z=WIC~yn0J>@Pk{L at Ov)djnqFTYzVI08tGi;p9cI|8tOYtb=z25j`(G4X at M^^w+Q%l
zf?a3r^LX%iH}xy^v>W>ko2z^{{l1;9*rb&IX0Oi=jeltv_sG)Q;Nvc^TWEEEy`HhE
zY4w;=zX$7>UMR=;UHF_PZ3s=+=5Wp7 at 5R`(pbmghufQ|OwB}6Y5=AJ(<a9DW)7Iaw
zHGBdacpcwnMcuxKO=Ds`!=LKBgFYCWuq~V1wk4A!&@VvEaI{YiKY|+XeN(}U`2Hl?
zX>sF#&+CzAy$EB$IMIh0<h~x4i7y8Ih?=&7#hCMjEQhuElP_JzrvM`*v>>-gO{Zi0
zaFHig>=Pey47PGF^8PkI-O*RqsRrLkG&n$Y!2Otymk6d|9Z9F^sHxIEk{5vaA?!y^
zCCOLw&W8 at 28I>-t^HXi9B^X=SN7**S=f-{cHrsRjlf<8-&-CE<nYJ9jZyVa9CD+hr
z;j>$)3fZ3{!6$>*;!HKk)AZUMYyzEl!<M6n)pdibF*g|B9s9}ggPO#8=|)dOki5t^
zSeRH3Z0Xx9wloegO$#{=_c=y#8X#+O$#ooM{bGF<IS=!sB%ItY!*ypcGqFClVXPA8
z;{JZ7 at 6%8>jr~q!i`69X1*U8&aK;y%f&2r|<5O0yAU?Aq360zg#<c at H?LU3Pl<<e6
z49Lx{A^-8Gf{$Iz^a;oC-;1boEY at Sr%zzx#XR;h6`QSKjY)Qv{DP*^J+ZDfttpUK5
z<l<Qm=)NPrx6~V*_+PTk#-wj+!|yudAjaU;ZS9bsd8iXN_K=W2mEhyNM+lydt(P|~
z*tB&4#^6+9SA`~=7GO;UHhJrO=likn3vA`FbLDuy(y$2cBF9VNH at c;s9MfLPRfNWB
zGp+GLQosG at keV&d;3He7lC>53UovzpEv~yNZ$Ods>N;|MWZSt?!DcCBq~S?L%G=%8
zu0qasIdsGtU-+CAs$-YodptBIHmr(49f_?Aoq=P`hE>3=9E$9LZzBi(fIYgeV4obq
zz9x3x9$q@?ffM{f8Ro|dj|RNM!`2ps`tygpc1P&%f$K$Ekl!Q-a=tJ4fCsJ}SH55?
z`fh$}X=FZWucL(Bu44L9*V9WCNvku3>tXZ7vbE2F2?yWVG?FL4 at -1!ipT`tqoT2_9
zo#fNjY!uj`N0}Kho&mKUk;frIp7`Ie-Gw!n##T(~kW4p0Udp1b>uzpV-t*mIT7Y~H
z=oM;rJ}i7~SgVS at _Mb~~ci<;8liUJ=+vj}aaS?u??UdgBy=@TV1U}@DncE<@c97gq
zk0l{?5nXmkK$mXJ42|9JS70#Xc%}9lrX_h6Y8>x{e7R2ibDSc99 at nkLf7KitWgdDV
zXg{Zf>SkWz<uWg`ZQnjp1byF$V|6-R-_x{u>PMTDQ3ksW{D%HUrB2Nqr}5cViu25^
zb&w&M{4mIa+R*sdeDSXJ&;cyYcgTKjA@;YhIA{94Ocb`@xG0BMG&KDP?$d*M&xS7C
zn_zTd!<DizvI at jG<+OveVZ);OhE2-)l5M7Xi{P33@@=K89`YXan>NVJHv4JBpY|Ys
zS?yjc1z(X`<SZZXbN=8CSqps*<75DzL7 at eDodk0L_|vuT2k%+CD#+Mf0Dim<saR`{
zsEF(~e<+ghO8dpCM1s?We1gwdB}7g_NgT%E+J6w7K*ULH!9Cw~>mlzBV?9i@{W_SX
zO84kN{Q!<?ArJA3<uM^OYc22<rxKaycjMFsruXT#zJshxL~INEnvjV?CH0Tv=FZb}
z%Y$<0fF0fGw1f_fyW$8RGpe2%YgKuWdqW<5yLJ_ at JKDgK1Xa=F8jZC)rmc#f*BDXq
zNM1Ma2aea>c~$U{4$IyacKqlcKYYh;ULj|hT~)c%J{7!gv9umJ#ueZZ_p{f*Zms78
z+hx>7dp0%IZXq(2wU<6+?WKr0P0x+ at 4Klz=3stDc5lD5|TX;B+&gu8k!!J&oJ+9(C
zS5g-H;jmeD1>ze?5ye!R;{bda#lqF#%zcV6Zj$}vyJ8+)4sL<(s9&4NF*)mE;om9>
z*T)nh7J|BcLJiMsuR~s|hIZ!}uvlx at wfQ*jaA<75CwQS{<QUXl$fH9sKFszzOp8^)
z$sqTNR9m6vQo;68vY&_NLaxIxVn0PM?93!>pn!qA=SwR%IRW#4N7cF8LOmZEd*j1`
zBw)hJ78k+p&7Hu5x02is_#zdYi##1&L#K0ci460&K-PX&H|*GC)Lkj>663jnEg$p%
zK4BHG4GN9~$I65q^jSqxhyc0*YVIwo#+WvYiL;Vt7ob*2E$V<+0xVef61jTls|qW@
zVK)OeTnC+~jO5dKXD}t?f2!Ug at -AfmuMnc1GpmEX&!ls+?;$_Sl*APY^@z>wha8qt
zhk(~Xf8f1Tcw9xCokm~O6W+<u=fLCivVR`EY*YCiUoSarqz*coh#fA3yjh_-)*`&x
z{5CfO94_AAj=A9UO3ib6g4<<Tr<%J*@N2UZ`hrskpV*)$@X#vO=i3aOJbX;7n(J|}
zRWx|0G90nzOS5UL+lRk649>;g&MTZ2ZK=m&k+0qLwF2`L{xc7JgB+#3E_xq0m5RYF
zUlMti65Csvlc7620)0_W#oqPtg3Ubm?zj)yS0?msX?b$iJv~+5j4T#MBWaUZJ?Sog
zd2<PW4QcOmgQFSPgCg+yt6Oxbv*=}1FwPH;lmUNVZ}$wZ`-^S~w%{d{>q`9Rh8ubc
z!84!^x%Ap0#CfMWe;~FFYED3pzWueZkjQ9PDjVm5Zaa9WkkmH|%(oy<LB&yYW^gQC
zI^>J%j at L0}df9vtc!+_~%vVeIdvIWf>fpyy)600M$4YrGsJExH+{Pp>(7N-AY%=g9
zhQzUxdT_TC+m$r at wsgr0ULieb3t|Wbv-6#twuO)zxBhM|!T+VGVW+1|Im>Vl6KuPc
z`ESlNhFt~5Kmn}5rXi8`&5*;WPl=c}P4ww~z$sZGM@}kY<%r>%r`J-|;E-!6`Wl>b
zs>tg at yAr_z7<(`xkOJ0(`aU%F2Tn^1;>X~-2e+5ZHr{!LmJzJeYrjUsy_WP<cA%u_
z`)EtVt*B)eYlM$P{17qul9?-)Ef=nKlnR3#`gkwq0lS7)Am2(UNQ`iPg<LyUe=DcI
zAbD5h8S~j(*=La}3x7{8U86{mqyX~;{%pT1YagK2P&z?ljOElZ$hhZuC4Qr81z#%q
zwW{Zc{{#NDEbRY_mt1(l{tpMy3rx&yjxct;qj>ovad;<=L;W{Z#fcpp{qj_6js47M
z!qlS5>ksH?Gdch9Ij;GStE}cXuSg?AYj}~U+kqSn)INzrJaWu$^;$KZ;F5{c$AVPl
zKC$rm6}>Wzhnnnb^Jod{kII!KdxHbk|0C=pxynU!5>;MNnmVibZAHqgfAcb-_hhuz
z!547={vgq8l7H2CvK;=P1Mms%f}PXrxtA#xd<=bIm?;&kaE)Re<bs20m;VyyuE_3l
zsHFm*{3AF|hOL)FZ_VWR!{=HZS&!d8>kKRMmekt!ki1RTi>cSK?q6lTA at dv8#Pvvh
zG}Sy}SFiPfZnYR|&A&q~eEQk=<IsncqHJ!HKe*#4?`Hk>E7NoB2F?%m?^;?&o at viP
zP6I9FID~4-Y5zPl!BRH96z4dxJ~}X7QD0vDC(4_hCm5UI$H8$xeB^cZGaSW)eUKOV
zSHkBTQnRfA+#4p_2%c9FFlT5N@!bZMLbmCN-{E8piT#NsIbBKKA+>vwfeF49a_qxR
zjzh2oD<}TD&Hk4(@!toI>WTddcK at b{{hN&gN$TMrkXyb_a2S00 at Rux~Pv-6qJ)ijB
zGYT7QzrJWLDhZb}ut&=N<v$1QZKZD6KS!>EgfmKaaK?m|DZ9Wkf!c-9`>x5QySSP!
z^rTJ;W8zecs-~619dzjDYly9YW6aU}ZvOF at 1`cBKR`!?$>@ipWH9K#Z_{ULJ5 at X8S
zZw_LGkS($)@#h5DaTehJS`Z^S+IRRrj}?3jEP5mVSLkvXx;emE51Ue68PyijWhCZ|
zv0jS4ZOUt<%inCkc~cQ1!I&d;P5sAmpa;tO?0$3!9n0x1dUe$B=fb}6%|%qEJum3;
zJ#_?Zg(~oAPBAR%iLM&~5B<2sp`(t_)xs}X|G5w1V at D$Ep#RN<zNX|1P`T5G?FQHT
zXKkFqiTBxy+`u}v=H|f*V!_Yg#jGMVsUnn{<*pYdcpXHM>)=D24c~q%?Dg3*Z`pUz
zG^M2b=PN^s*6t2*^&3&MVy;d4%E|~E&h?=(9n)b;XZ_KScd`P$*STcwz)$-Pwo>>}
zkA~ISzy1Hu31I#zA*(BS&?PbUO at bB8H)+&36L#C2T=*prH^X&wDqb$OZFtTaY&(HJ
zRW|>C_2nc#(Rn5y4|O1k&#T at lM*C|~vlDaioL<-rxlm`@MWwYK6#R^si^PRoA61B#
zJow7m>5l!xp9^1puS+6^pXBz7ygXBq;Aga1a`FKGFX!q6NzgqZ>;Lb$NH9^*18Ji?
zsuT0~dzYNOhsE`R|6i;%^l45vE#W*S?3hwasmA;!|AR3A3up4+SZm;yN{4-j>Jpr8
zk8U?co#idXSR1PksEKcgtZTmjtijK8QeSYok?0Y2HD{o6fFlC-xe{0=L)YQazw_4>
zQrZDJ7SG_~$)lFpOC7t4yglFK$`HdoiTW`Xx)pQ(TlkGLW^0Dm5$symVf0VeSfMZt
z^H?5vx$}b99Hol7+<7D7^5;oGzHg{PHm{{&=Z%4nwk2rU8>+$$q8Sg>LNE9$Y7~se
zdmH7zeyPC?p|=~R>+O|NlAEICUWT9AFf+-H`J?qi>`21Vp7q0VB=@2c^LfY${!vb0
z-f?R)`n{XQF at KI22=R?FWUh~1C1d#yW468%W7wmE+yi}G105NBkK|tPSMC*Thdnmm
zS`FE>ip=vhM6NFEEx~_<g6(uQ+WKq!SoAZU**Fes;)tlVf_=A^b9(qjtB(~#5gciL
z)HT~UStqGN+c+>gnIr0aXZV)UkBih#Rgk_#j7H)C+`q^178CmU8`yZIRAF8xS3~cA
z<$K$&xc|U5A`^2fay`B<=1v at Aq6(ph7*HFpkddv2{Ccj at s0`99nMHUX|9ibzGzqo9
zuqNCs1|Ll`Pm1xK(ON~;9;`RDo#*H}w6kTh5`3 at +@$NdhDuj8i7X__M4*zLzF(Zcv
zYg8}ra4nc0=qDx}F=MPV at Yl8QME0MpRjJpRZ^)bi?gf|(^f$$nkTpi|G1hwp&iT=`
zSnxB`$Ear-`f0-oUT$#4+NHpW$=PkSTd!5k9h6nRHh8x(9RBhDn)m0gT5qs^dmG}|
zQs}OA(4i}cpWwa^p2S13zr$LJ;|8o6&R((>Lf^-87pz^8hq2T`*2DAvyRAdNwUw-m
zW~{a6#Av5r`^3D2U-W;hkq`NI$od9<bnAHh&l$sZG6u}xI^9C at EQxR2in?9Ej8!oE
z@&1ko-g1b-8W7XffDeWt{`Hyr;X^y~-~CL+=!o>bE(!a#OqdTpz4G(Y&B~TCaGw;r
z{|ilc=`F~?*$i+RtWPdeu}RVlTcjNNHu?Uw+b=h<?%IA^cg2x^b=S#4%-|e!A`7^J
zN`zY1V$#-?J8?bM*2cBZlkcJNvA}M?Pxub^^zYBK^2OhtY4EpaDkIM{qXu<w7yse8
zWbW}3-PI{)YDmAb<4DfN0@&Qvh50dccAYK*c`z0)<Zla)xOE)(mv=#4PABuJOMR|}
z#54X&?l!sQ?nJ*-z}MRg-#S at 8#bd at fn}rte{1>6kvrg!}b&gWt=L2EquE)BVBrJF3
z3bte1K8mri!0nfqJYv-BtbsmX0KHd-u_A+>E5%ySQMDH`{~&bLMvN)Mlj(!ly0C4)
zb^!dx)sPn={62)=-{2a1cnZksPO6sLJq&#-rxzIAm5{H%|KfUPrd+VXaZ at zI(~SKJ
z at O3J=S4o`^;4&-7xI^9R?IfOpcZR;iTCy77uMcY0ZXV2B`%kK!<YPPMp}+P<k(`RQ
zn7TJ8l25_8#&06>67Q`6+e+MPA?(~t&Xf3W1 at 7fXDZvZ72%ja0u}vdmZ9GZ{eo1?`
z?aoee{QhruVZH!UfVG2gJU4*5LBoh}To at T2s~`*fiBGA6_&?~ASX*TL<@_q11#$s=
z`IMUQfJM|f2q(NIqApq<Vb~y_UQda~eF^r-?<C}Oy6w3lH76Io$fJB48{a9#cO~$g
zW6*;P#4p<}aZMG>Y%gbh#!C1WOwKV9+u@&dUJ-mkVmf*s64Ti->kly<_|S;Y*|$DI
z87fEJZH}#1G&a3*ajw%9OEA7VtPdZyD%`$M&plWRK1H3gvLeJ3`BOs^)>e^t#;@nN
zvgmW2QgVMgaE5F=V1U%DS^f`PGZ=hi3R=Qdkob@@P?4fKMr7TS*T7$K68sgxh;al@
z+>hiB<+*N7`1z0Cf41x31m>UoLp<a^h+~6KFkp_emf*eQSAR5)wW||JehabVVcQn*
zYn*|pSDTloMu#R`3II;182!Bmyn31u at X^qR7z-y;-RPMGnS2}D3~U>*-KEat*qIJa
zlc?J(6Zmn%HPJor+W-7EV&Hbj{6^sVvL>Ff5B?${Tetdg;`0QibRV<KH?#Fs<Ww~(
zlAgc8+cdsJZR5m8${`!xZZ1x3Z(dD!#|h8xs;#Z1q+aN9&iE46ue+CxyFZ1P^?Rg!
zk;c|Cyz_2u!HA6bq<xQB-|&B&=vat(Ps9D1;lI-WPq2>;g0H5En!%nw8Dp`EiiM4S
z0&?M~lbb4ro;3#fx|FmL?O4tjA>+GKgR>HV4Sv}Fan#L4?V05~_+o%FZzZ@;&zBOG
zdx5Jy8^=G~4D2_sDF0 at 85cmPeFItuLhx=pQXUD$`ZDXLLY0$?sWQ2 at x?{F^SS*~N7
zfq47lh+pgNrO1&QfPS}+?#6ye>KMVzklbIUmD>b;GlQMSE$qC%gKL71#a at r~ssZO(
zh>wZf2Y$00tQ|7o#IjwvxK0bMS3$0a`y6)r$|?&#{c6HKwt;JYoM3d>b5*<oa;~#~
z;=J#O-e&&>_raJ^r0^bwkNzv at bxrs`AJ=Whwh(svi)>z31=<gpmg*pOA*=Vu5K9$C
zrWcXtUFrY$_~$n$_`$EuTz2gr=qI<2?*rDyN6l#h=R=<&Wx>dp5iwUO!7T1B!Pwov
z2j2-|PK at 7HTR*P10WqqY!K}(fI`xBZKxQQP5uSOuwUH|(TVUtkL)`J7?iglB7CY|$
zM$S{`P2a`cg4lBfVxlc!uXpAk2HGAIn;;3YB&uAOJofPnm(*T{JMt$=?#Nex^9DKk
z(D4a2#Xau~e?nYIEX;%dD;qI at n2GHI)TRb at V@s3HqR#VtgFJH_@?J!`Q8)JxiHH6J
zI!v3BuT*=6A{G#cafZ0*0 at 8<wqZk%Dl at SK)PvWncZnEcv>}R$+kspqFiK!A3@!3t>
ze<eSN2_-R#!Ef}(`};`T!|<oXQRps(epj|~;SbdsRug}L)Q<zcQ0tY%j at AmusGNoH
z4Sw~gtQS6-KCJ7A=^7Tk(iR%~-CaCK0Js`*T^r(17kumdPy_E`tA+Ro5i55ALvRB*
z0SduiNdGJ at DXI#M{d!cE4h|O5zLG?XBRA24?>bL8+OjB8+p1Ulb9Q5W0?r{T8T%#N
z9XRK5YYCt5I(>@x#)6!5*xQHyaJ)%4c3 at e2ql5S_OuUz%cOmCY`*Pi~_ at fR}yoHWH
zO`dS#k0<8<_aj4IRjIcG^YPE{`@ZjoXF$AUm1~0{>CYcTsv*;A9Wm-bPceznk#?fr
zj||>UtczV=;5GP5Vx9Un@<}H+VziTf<A|x6kYBmfEtZ4g9X1B{CX)pHrcLk_WJNz2
zw?oBmXZ9AbZ6Vm3O4j~TfiFkVFE%WCc{gbb;}mR0pT9?9VZrAK<_7N#?`v7J at ZWSs
zzGNPYlS at KwKiLNzHZXsT-De`W6}E5ct(JE(=^Urpio6HDL0ijF+2!VsxkVHEH0-_%
z?0bIab#os-2ywys`r7_xLm>ZOc{c>_;@*=Gn*yKj)(5aHYzB_vPEN9v#Pgbc6e(W+
z6l$Df{9b2`5P1AAS{V|1ti!Vgpe}03938z;p>DX%YYuzFeh9JEkLZ6WQr?WgbKH-O
zRVq|fFN6Qbxbq{#TN&JEp%}KOVbwcQzav{0a*TFHS8P>r4#Q{J9GM6FHG_TG?7n7e
z2B*ne>D&ukZyR`N#&FM?MTKm<4E)=_#mi)f<r&`1ux6?s8;$0o9`(D0tw*%-fO4%Q
zq9QySGF|I@%POO5tPAOC!3!>6Ck#(|<?5<QpK?+A3fqOkE6wjv^Fm|4nalF_EMnhl
z0AlH8#-wdXE!So&E76*3fYp65ho4E}+O~f10)@h7-HkdCFR4RDAH(-+{vWdSh62et
zuSm%qME-!w3tY%Ge#k>>hFr<*L;Y5wTOh`1#`@9Hr*qFCQJ3H^5pTG;w5Am9KD*J4
zwE(ZsmRih<CgekOI(7qZQ4Kxy646`!fVF_H@`s0cyOEm=y<_Qft%*c`TCs;Q61jl&
zzY6`8g4*B5xLAW$oG14uF?%*H1-#P_JIVDNz&`Xp6<vOr<kDi at 3fMC~ndDDEcM0a(
z{s-RT-s%swzKGi0WX;qx_W?Kcr_?t?6Rbg)TdS~El<JN^*3E)%5&kRK$fsYO2^}CE
zc6JNCPsM)dwwzvkpE5D0@)b$*c98f0i>bcJVhyjK%Eq-!5+g9d4eVO4Z8oNM(l?+B
zfF~6BzaL at FO=9#IlTRv=p2-3h*UtTftWgu|DOr<eK~F?>4ZFS)IefUa=68G at vkYT?
z5%{Xwfh|J3_nC5BV~o2|w{k%S;uL7_Z|kXYVm+<=!+Ki!+j=Uvzn=1ga9kbMU0}?p
z0{FB}(53b^8h8j+zjFz1v+JqIF4H}=K=g;_nS<x~wlzmcFllDehdI5G&8<?%Cc at L#
zOKfJXTJ~7LBkVI&|KS;y;u(JN0w)c(0P%{0&F>+1YX+Vv8nQKEX%YHhM@}DEhao?6
zBaN)hdIrx14k}`&a at J5L+)o0(lZN=65c~NC<77Ge9``_hyN8-X8Q6}~9vqpgR%*cd
z<m3mTmO*%2FK|w7KG4P}MTpu4Jca5hUKQ--tIkC(k=Q`pg3fBSX7ht+2{{+JV9D`g
zt&-GyVsqX46?(B4&-V>5T|N8&9&BxzCi)K5Li7bxoXO-g5zHHGo*wurss)Q&Svm=@
zYm)R=smn|&^{DLzc*T04TYQ&#hS)%CyE71Lt4Tfe-+qEsPr7YyJo_afiH|O2s^JTp
zOXLaiWnRNL8tZ at 7umbiH*5A8|{weTT=Q?h%>x9m;C|OP3s~dwy#wxHCN6 at GL6Jyy(
zFqQ;E`L^1Pv5Z8%`^&pSV{dMT4x(}6E4jJ#1~)$o+N&Y!Y;&n1<;KMw#gTPZHNhb+
zu7<t7m<tSOz-JS_fxYh7+FGBG8592Vb>IgP|Ay_mGW5OrJx{q?rbzzzJGO6@;h<V-
z*r*- at U#zg0&ZF2*UtV}IaDFvo^;icjo_gPYa&MB4vN+OzHSl`b#BLia<4+^@wkP~e
zF$Vi$VEt0=J%IlWJ(`g*cAq!K*eB6-t(uV`?&avZ3uNAH`6CW+ at fj8esKNg2usbcB
zWoH{X;E8#ZttGY+IWYm>5<DSv>3_m at AlT+c_IeV$lO!Bh at 4k-<HB_KSzlGyRS^S~l
zI>9>cWsj}@gD+shm*hH!^Pd22(Ik?15$xhrTqoV`y+CA7M}3rzFp>R1Y%OOcVhLvj
z at e9DdsT<77j-Qn~Go9Ll_I?{<=)yB&j6Q*!x at Mjn^05hiFeM}LI7l!@OfkmJ%LIG2
zb`tVS+Qz3a7Ei;1eeS;czx)XPt7%~N9<788n2L9v=<eSc at Bt%cs=@USVr~tOPa$|q
z;2FRF{n_zOz-jn6 at QkZJa^o+%bBPa(Z4c(tFE_dS$h`Vx at c;IWO!!1JE<RTb8EH9p
z1kYX0`qt80n*^;+uJ8!)!Le9^dH$<eAHfR2_VFqA+d!`CzZ&^%{P8K615d#Z^E>ts
zdheD6EcWTCSf%YQi+`F%I9v7Kz$Wb-n^If~9+6|z`rsp5HqtMIEeMT0JuBqGmX*M^
zJx=afT-rZHA3AtfKT8;k{XQgjP5%r(koW?Cb&ExP0b_9~siQE~u21C8aQ&$5m|wzA
zx0>vyIU4Qf73Hu=ZY@{4oJE#(yWlI<fYZ8ad6VllY+T at XaDAmdlz+FXzePfqq+NDe
zc(iS3Fl*0ygNOF~eNzX?v%+=Lop<=@OgeIon(&>}n5f{NXg3KCR8(Vb_ioE)u|@NN
zb*S7j!#Nc;bure-S&*^Y1$`C$3pI3$M+0Ke#7<oUzvK(9E5P}b-`@|P0?@`Ey^j2k
zDv{c+Qlws8jo<6>yF#S)DHo~vCe%B44mH-E6KaV61960Er^TnihWs+mmAF at EluC+y
zex?uQ)`O at Myhb=iA-8=v-QK{_fJb4HB87R)OXs|>^D<(*a^M~1$Y=ijxi6q^D$xgK
z#DprL>z=f0ofp8pRr!i5LV?<b!P<stXHegyQftYpz_v<jIY_pIzpFmnut|*d>$KlV
z=#3dpiz4YWJ3k%19dGEhPvD*k*9Nb=5v*mwrVn$0K~a-_3O at 2x6>5z$2O2kBfj|FF
z>B at JqjXx)gc<JDf?M2;`3W4`<tJN%9Dez`a**j!{eCf0{@Kpz<@hbcX1`W?vE_fm|
zHrF-23^+*iH?WdE=gQsJCq9*i>7*Vs`ga!Vv+?<Z&xXa$M%^3}7nd>;TF7JZvs|;_
zx&w2J`<9Q|ZLe(!2Zl{qT!MPuHCtjacJX~-0r-5r at 2gxRW%Pksri`19->dq{*X(9W
z0+q~uU~ej6e^e2D3+-Bjv2N_AcXuH#asQ5<(1efwA7}3#*VL80jeDhqRBXjdHC9DH
zs??T1k+H4Q8nqo8DW!-g5o4jXQ!E9m=(N<SNw_FS3FJbA5XglDC89zIc%vw2wP0&e
zh=oYV0fDNuiV&$%$M at MMIGy>v at Ar@2?~i=W$+_;cFKe&8*0Y}VF7jSI-`^GZC8-OC
zg)@a!8N-e^(Ns*|LHzFl($CPQhZxN2q9*u~F;3J^m*P8SBR3*+W)1k2pz~pVN6d{I
ziF->1wif5vf7XM;;`1-8*`CLBrwFF at 6`nvw-^Vx*d+x^Z$*_AAI4ptda9zFiPN0vv
z9Pg+W$honPf!mWN%=;%hf8_jS#9SgDcX73!JUPeOLvVf^EhXy9(mszk8U at DC1~M+C
z3ECxr%jq!WXItNV-eDnej)9{7Zg4<hb&~Z`d|GJTmieKQEic!00q0k;B?b6I_<)mv
zt03bL^#**trWE-e4H##@>B7JJ7rRlac>R=Dq69oN+`WM!jG;>mo>@og#S1#DZyGqF
zF at K{Dux1&2jvR;Gtu)wzHT&hrs0|VHLXL*;(oWcWRpyPl7`*P8>FSqkU<LhNBDiYJ
ze~bt694BJaovU1R?|~RRr^SCtz7D=EEo8!1=v#jy at xoi86^<p<z$X+D`9^RP;CWkX
zs^)KV^lTMMcDdDu*SB5YJvVNaC4j?1Uh}HyXZZUN52<h$A<vG!?YbH~6BFMG%H`{g
zGt_!@Ia`<N&X=VsBE`1W*<znua$R&}Tc2rukTSh@?bM3- at iT!%-3Ok|9IKeL1;(tB
zznabi2eFd;@B3Z*q1#2|Kp4f1s&PX9)%y)5KWjsL?I%+)r(j$Rt{}22 at Us3ebnp{Y
zy89KMJboqKe~aY72?Cc{ojM>B{ps)0INug*KO}9K`aIh2Z~9k&#ry_sDXhPP_+Xqv
zT%#HN?yDY3^DSRCpm!+l7#)hFjI{}Yy4i|AU9kl=HTcv}Hky=;<75TJu-(V-Rd`-B
z);)$5 at Bf@daiOR5z<yvQIjK3nllBVG2^1Dxr at Ti$p!`zvNVc$~HfM|G^}JByH at V|W
zUw}Om?dF3rY~nnJvHyO^-ekfhphsVLmMY=b1nTN?19fj!{JAYgd1hPCZhyn|Vc?S*
z`3~q2QAO`UHcuz>w{|1xd({t@>Du0=7em*nZnLsZ^w~Fj;$|cErFSy}BduLMDh=>q
z=znU-L7Bq+`G5b<AZrl!XHl+CIQOt7 at rk(H4jriNFYt*dSVtt|SsI0#`#5Rb#*4_+
zrn{04Svw+sePa-FuL9PsCA2L&0Q$xR#Cnd47;{Y@@miA><&L1|p?sf!3&D(e>Z7e!
zvCSCw5 at g0GGH;<>B<mx{_`)+4tV3~WYD<$MD-?15C3DTt-{LlUlW$cgx%3LZ9du at D
zK77Zm`on at 8l(8P~c%MG!wSgAlJs-hOYywXBh0Krl{1gmc7UtMPv|A)(w(9 at u+(6#{
z<@Y2uS8$b{6_`z8g^3)LKo at gA=Bh8`i7Tcv!9{z3^NjgLqDLjaU_a?JYZefGBJ|%~
zocSRwIF=RN5|Wnu0?I6Rm6=`mANNTSzxvUN=JrjfyYw{a8#P^r1;uFdXv~q%VO{zK
z;)4HzYo?NVkaTnAOG>b|!nk%eV0#PerLn>#&uD$};D;dk>%^0KX~K(#px+;WjoU<Q
za-2&%-DTo;C=%;cicz}oD~?asdL1>ZNInsTXU$d#ba at rd@2 at ng<Q_V3^p3*)N5e!7
zL{^i&p=n=)XZJXM^hTZy%$3Lg?8{gi2w7@=hU2CxJwpfnt)qBvO=LB%@_mKXsjeD~
zrK-lopg$e*Ysl|jS>>!+st&El4vIKhmX~SVYQ%eGj&Ul&w@~Gw3(Umx3dLQV1fKY3
z1<F+nT}k0d)^25ya-1vT>8>e?5#N|}aHYAys4imZJoCbgY{hQhjcLyEt$S-}m+ZK|
z8JJ<TW8CwkA60yhXJuBJ!$fRd%qVjFy(B?C>J_m)q#v;{7otA1g(05Au9ht*B5i<k
zYw+ET1FOCEh2Gi1lVqxfo-+APr*En5vr?j0W4^J4iwex at NVnGLh;{{45~QS;2rL6j
z6}=t@`o7yRKCpb<UBQmRCYCJveZlrFBjnY2eh^|Z&#_E`{do2!wDaVKgV1GQ(=z3T
zUE at aGPh;jzAK+Pt?*E=J<e3v#+f|W1C1`c^M?p>hP4vfdA_LGCUm at Q@D86+zuK#SL
z&9uG~n0|}v at SZjQDPKP{;+p?UR`yj-`Z+!gvT`?(m6S_Xsx;q1MnX>B$@p^{u5&0Z
z!T-hhA8Y>9FZ*?P|BJ#Uo+ZKwGtf_23sCmMDEoo`F1vklpLN40v-geE-_dX>_Ze`<
zV{Tk`KUACjK61(#{7Pc9P2fxl!4`UJ(S}c$F*Xh3Z0f*Xv=@AM1N+=An&trGFv{&`
z*Ib?aEH|oh6e9~u89Tu~zpCVC>2#@LY!kluv#s#`1xy78StV>h>5P7BnsFTKp(;BC
zz3gE2``q<^55qi7VmK0}!X~JhOYGi|-*bu06~3O6f0hG&1kJGbe?2RYJd5<Nzkzp<
z8(Z<J%g#O0PKeJOZG^r(%70D14&~VxB`5Q7gAwnUL)IP1Q=tbIZFqsv<JMrmK>IcE
zi}eg^f(Sl6 at O;AoK`s0(t+3a$zz&j$`j{@!0Sm4`9gBQQhvpVrST`}p1#x)ub^J`1
zE(zWS_%K5*CIgcRUwap2WOYSV!mmK_flokAoLPpKQ&f^J%F05FP3fqVV#yLg;cVJQ
zxM*4puS?}Z5B#R#9jKQhPJ-bCF9+f;fDN*QTC&5#MZjB`ZN*_C-vqw6Wpk#+PfS08
zPqG&C>1pJeyc{sqZ+Y^H=qQ`)p^wu`vo-ig=;Ks(`l+$tfRZMBdz;kP=QW{*?C=#O
zHne~8iY6hB58#(6l~bwEf%FlVVEdP8zCc@)pgec*`yRQ|wjiFC_!JB-pMnNl9$Y>D
zTT0}mbRY&uvz7E0wBc4JcH%NOc8jF}F#y^u*oRW^{914cMWDZKh0gIB?4R1O=7=AB
z3mQvdmtQZH?_Lm?*O2LY at 6)@0B|bhWht3I8aP at 0{3w_Mn(s7{gq3UgNK1zAp7 at Q9O
zN^xi>FOmK(VA?|s{9V6zeQYm%Qnr!u0E4Xgg50x24Q}euE*)@ntRqkLG2tm<>xL9x
z>MqGC{91L*@{mKx at WKA0p1~R at 7(H?Y+WvWr?QVLS*Iu(GU%@wd?Lyp%fmOEhx;pXs
zLi)F_q}KbyXR6W_TCkSHTmszzF(#Z3=oZctteLBr_2n1%_I^$`WKia?)~yQ9Y(xDo
zZ#oE@!fMzLDi+ACyO at 5z+<uBPr{QG0awW+PSOdS8)TYkA5*Bm8#Az!txSb(-2T!p|
zM8>mYB5;*2p}&93tf^LT^&dQo-&6K)nP*MM{`jVYQn}~{FK}%nzl=Bs3f~lEKa6^r
z?gcw?@k#q?oCn7m^xs?Ds5d{SxYD at aN|8q)>aXcpW3YcLW(xL?W_3w7dww0`#4|Ig
zIL at 3V*ur$QI^9F3R5Y1kw{q1_(GLgU!<om<H5Wz8&9mZ-nfmy7STC%A?z!}xA(fP8
zjtAatvD|L#3D#`iunouGdS{5A6EZpZt?XqOvk_i-KNvlg=QJC(VXeQZyG|9THLALm
z^Hf(}nWqYzY+PlrV*SEXskClJ)lV~EL$!8E<zj)#>TVpV9~F4gy8L%QPlrz)akDLW
zzdU(*Xn%IN-}U5$BW+erbBMngYrij66ap8MPk0u)OnuS~|4_()gC{!2bi43{eST+?
zr=P1~`UGN&lE?d1?N8*!erhIl+Jv|>&2-e~tdTJ=3v~lbyXIvtwO`3PHP&6LhTuoW
zPd+rJFK)v>oU*^gyk0=^6BC<AX^>F;lni+aov_y(3VcZPDWz3q5Szlr at Wfa95f7x|
ziQXy1wty%4glxeZVN1(b)Phqp?4HvJz2D5Cxlz^8v=w+6-RYktTI7xWnL|qu$4!IZ
z$n~D69Po|*7bc+eJCdtshXuBTR%)4ZtnoOwW67NOfXPen17d$-Z-^9|Sp9uBHT(Nc
zXw-zeDER>FFJj|K5 at WVKd!o*k7V_$j(a<;F4=r9Fq4!C2I&zq`z%l5h(;PX78_NN9
zTn=9i{P>AIOTg_Dq(Tmx>y8|^2KE at 69&5_uk`lt<4w)B+cjXE!p|#0czmo0yn!p`j
z`kK>htd=GmTr9}K`%U<jhMe6IPV7LXumibrT{s&`|KYr1Jnq&&#z^?SKzD-gB{m|g
zyH!T4_on1H#YV(57)yxGW>@%CZO;|!am=7nJOh8}tFcsi+6F%r;v)<5kHS`~!L?<?
zW(&+Q)|tiwxYh)FyDo4iGq=?t2Z5L^9jT96QXh<6<Km9dL>?NyMLE*YKL>&N^K-il
zjxfaJlXd+&TEx=@F}``f6y$O3E5J9yZjr2Y*)4WVAoIYf+b+9>CYRVPlC}TSZV?!c
z@*IykdV3e*o(>1)(6>DEy4MScJs38(9k5xz27(;5R9tG2=@)6j;c;#kCEz3SSdLuu
zCHxl0dt{vmj3!f7;Uo5Om!9OvA!Q`}efu7~_i(13tgDjC`ztwLNnk589uF+-m-4TW
zzJ+y<FR at La@2DrjHlb0wY!k-gf7&MA9TXr2Z+kYeO`sqB`&%73KDVKdA^yD`JU`Ne
zX^Tl+q0TZrPvN)`wux-?pLMvd|KGL=tns<A=e at X51t<NkZ_lPzj<okK<X6#?{3_to
znFE`J>%NXZZ5G>+!-IS;`pF{FPw*ZI=_BNwz=78#AHZ0cz>WQ~wO at zt)JZpcMBuwl
zuw|jzeY41VOH=5rfL#MV at 9pqg?ih`DOetw|)b(h at tN^2j@<`cI@@_KcCf at Y~H_#tz
z8e&l9DAn7J9L#?OD1+uYzx4CKQtNG-)8i#lcZ~gFzsr7sdLs6ViA>v8-%f|^UV%07
zO~mCdAZub5m-l$x9Yu(4nmkgYP`;_-3`OXMu|8?9F&pBiNObX&nQy=xXgnSd+lb%a
zaZU)mDPhnA{kt5vBr?vQ!Th4LwV1Rk(+LiNHSS|_?PIJ}H}^}QtVLX7XWAl^rvzm!
z4ea1m#waj0b0^ZaG{hh1F at Dn1bm44_C&VYdj^78n^rvwx$w6qw*fl*__mH*1^(e?X
z#5Z=fvKnx2Ij*b3HHXNUv?|0J?3>jkgRx{SMU|w*_)$DjXJK)MO3r%o!(#QVtr-;u
zzK0)J8uwCmd@&8Xobixr-GRE#lbFCiVTzX1^Wwey(zYv6PB~AkQuD;^q|6F&7p~W;
zs-8wn)Bi3D!mq5<)fMHZdF6&3v?=UbHFC>rEOwS7kDqxfe5i?5wDn%XgGK7sdOLL*
zaKWM0JH%FudVLh1L!U!^J|J^5-gnX~*Nj*jcW~j6`!N4ElQjrrsG8Z=aK1u}Prmtp
zz+y58S{=Rd#bkXeF?ebs8h<YOpU3Tc<7HS=eH&W0{(bX-5m~!wYfEicd at +&7I3B5Y
z1b)bkdh{8&m$46H?T@~?7j+<MLM}4Whb3B1#1o^x!LIC*8QZggO?n&GWMfRCFU<3#
zTT-o!nMBTc)_{wu$|WmMzIbA1;%M3RHjNoE`Jb<6#zi*P>m`n3q|bm8w<Yyzqn6xD
z<g_%w^pyX!d|*~eUn4rV0P%}E!nm=C*C3}_DDGxCatU7p=26phhjR#aD=z$~9jwuO
z{jWX2ttb;>5Vs#Ed0Uaw&ZP&@suG<s at DcGZ8naajpF{8y?<rQWZsw0-WkA;4iUfz?
z^7D{kZNc>eYHY8GM1uVh^=*0m2byxJUd~^wH`w_sU0V{qw=g=wwxnBI>|}Went|<X
zrQKoI(cLewyYi?aHxr5T##|nc`7(~IxfRH*ZtG=ry)Nz6Mv(ZN6j};hxeRf?y2UBo
z!14?MD-KL at OO^<^n=cD$5DS#^gGNw|95f2=uh}1;%K{&l?%qPjJm`VHE>?DzAa_I}
z*1tsGj<*RZIazOzZwU+q?y(s*=F;xc%uSRuc)xusj{nlFn4l3#2M=@Zor`9FNca+I
zJJzd-?9c7-FMMWSN$$mZr!M(gxX9K)f9=vcjM=Wde#UHpC11}$u0NG!wyDQt%m}N@
z?46V|U{oonqn?=C0(S+QBb2*i{R)Eh5yh_S1XYfj=;n}9+be=ABb3fV$Ol+}Hm#4b
zWOb8V<FGj)r&oU>#=^_!_a_OLBe0LvXeSAYLEV0gLhKNZeLx*Ve&#ZgpBeo5OnhpL
zmUWe{zr7-O8)@%>%ltohz3+l2(>Z`PzCZ2ID(@9%Y)$A7RZZx(R9c`e<m`6DNpC+6
z*(jWL*slQ3KOSCh>mcntI1B5#oJbjb63zJEDN%Q)PdR`(`AuL6t~}5532_|w!s)>6
zG)=fFZ3V0vk~6riSh5 at TN?IVpday;W^xQ8&PCQmOXSH5Q?hkyK?QOG?XE=mClwd*N
z%5s8P>k?$)8T;8B+tn4LZTYY(RXN7vC*-%#sfhLX6zv*E>H%|5HfO_#F8UMlMj+QJ
z>C4~?;Q9}~`q}o1tht-zS-WChwcg_ATf2deDz!OTa>RBfE%^Xznn{pv$9d)kmHIbu
zwcE-1HGkg3jK05UZrOTR$`9=6Zz-N)l`^@6 at _5#FWM>PVUI_7<#_A-o at xHs8%2vxm
ze9;!^%zuo>?Z at h?A%C;M5ut0y=jqA%cl&X0 at imI-IoH^w{ARPh+w$B2&sx at 1+tqhk
zR6=m6#RAKw%#2?g+kIGhze*sP$BIRqLAO-#VkUbddm3WC;yfYmR0^-dkm2CB#CPLa
zHatsE7F>CzSR#tg3$AQX17lEyc${L#crwmxIjnAQz<?LRm>pOPJ`?rm46+~AR$mL-
zQ#WUo{WvooqwOcj);q>tBiJU1Bl|PKV}Sl~gu$T0CV_W~J!O)Oh at p!F9`F4>>!0WN
z6>)!VXRwC5%9H;q*U`x6jN3-~vK=vVh1TvD+UU8q^sJPyw#J^mUr at gamYmdg%)OP<
zI(t`M?(CIx^Xr(rQW at Zkg6`&Q!*~z1<xt(KyE1Ji;s}L`QAGEYc!5U^J`wP1QQbI3
z=2Qu6%cbCm7Y7FQ>jl-4F3u`eA0HeDka?(odb{eXrx6_SuC-<}FYgO*$DYQRfPCTl
zJ1H(=GWBgCtO|l1<<}D3<I`%@-HBy_Dpo09YaLkS=eQ9W#jjlb=|m1+Ir!3F%vp1T
zrN4-Ra)g^zfnJaK>+zmP4F=@Qj$Qf=GdDG^DnY$`7cR=L<SA_#JjWxvZ}Ivr^bPa_
z4ehX<rsSj^#*+9YHm~%GS~oiidd^RO(-(SoPzM8#I^GMklXvoro8`_!slV}b{Dbs7
zzEfW$P}UmUz9V}2%B-+eWrfh&xP)thAC0{Au{RK-kW{8R8Y)RXd&Vqi3Eh``7VCjC
zjvI`A&JR^5e`oE6K6bb7U$Njb#r%Q%;BM_yysgLMS*LjNN1RmgGR%7eNvDMIk+PzB
zD<cMH^<{W}SFD)Or9%E~m13d at c?93W7Pv)YeYCu>4BLhoIgpbVGsS+ymsi!L at lGdp
z2&_r=Ymgrm^5bl}-t7n2jdpA9qE9t?<swg3njZ19LtS63#=7_rxZhRCdvJ>3Ar>M3
zLRN<u{MuI{bj{6<<Ea|(ZPt<)KfTghgu1${mj at oD4Bj2k#gX^UUW)4sq&^v63D)tD
zCB#NlOJ~9-crbO2pz;$%{_Z7pU8PG-N-~0S5wC_Ex{-3RW~;_=9PzIwQV(;Z9(Xvw
z8#AyOwh81oK^s>1$=3w{pLW!g%RXhw<J at aXgKomu4&Xy5+fbFMXWF{z$m*}O<^_le
z_?E1z at r?1DzjAf`8$(`Q7r?A}4$MG%!>*xAl#zb6nd={AlH+- at C(pxtm&ML2CKy=6
zZIH4P?%+XbOe at OuPo8eTQe;#;#WtyO#+F at zOe1}!d5vC9IFq at fO{;yB)*igOAAJLS
zY^3i|0m#pD68he5j1!C(!Qa^xb_ at K2>z=%mxwjkrDScuk?h~fQTYHe3E|b)2;6I1r
zq;c04vw>xM#smDTZ4-6v@|8MOQNuE<4Ml>ekZaqUk-PK*`XyH#K*y*+- at i<i_|#(k
z7&3&pTQh)hf49#XJI!XKlq2O!Bl6nTODQK~-1x3!>f>QgxA8~(>it6$GGKuaV*?rb
z06!;L<2c{0Q}g<IRDv1Z>Cb7PC-njoFoyJ}83o`^&|ZOU#@NU%B>EAa89~OS^&#wh
z at F_C;SgT`h=m|NreL|&yW5ltEw-3N4L-fhNsMYM<ogu7DtmA at gGr*}uIDp2{X>sZs
zqNOceny4z?{jCb|`1lvZ<9bdSk>B3<`mEycE?fV~zNQLkkg9ZcYm<>heNq at Mwe>sS
zj%?+b1v=yk$$~6egRK$U2y734k5z2^5Wh{}VglEM at pVsE8NlJnT_5-X{E|xK?v!JH
zwPehunSN)tPYn5WyC-#?f0XLu=X6wG>0{}mUlki{eJoR$T-<|gUD!Bq-S>fm at tXKt
z*s8)t&wud5ml}BYF8T1x9l5-F at 8wqe^yS5}3C?@tl%cpDYBI0~)MogfKenY)+ai_V
z?1eo8{?pymSt=;$s6f=7kXRX$;B+P)HC>P>o{p_eC%TM&chb?izLkdjhhZI=w<23Y
z>rVY6^vJ1H$%~N|er1f#u>|^$CFw3t+*GgbT6In!i%GaKHu?{qs4ttR=ZUi3iiDnV
zmJ8d71 at Zby)6kL}l3PSS6kLq_d3DIoXvwcpDFkKlA@;rer~%GWLwM!c7oCUu?vMLQ
z<@8Dc$Iw6dB*z@=L}%XvUKeYli+96x?Fsbm#WM1YZqwSy6{5F3&L2`)M!S6&VmHHY
zAbO!NJ$~gb-kCPe?0UWhoDwqEd%#C2;{0qn1T0GBR#j-n`kjPtccd&;mAh05|1wE>
z7S>f+cJ#ONk;KMw7dD&l>{wM?M%3bh(25prcd1_lPcIPJft8(T>8l?1m7j2>F1i=?
zomJtLKU=_MujAEsa#w0Q9g^LC`Qhf+5O9yw^K at 5$_2}F|b>&x2Y*s0rGxBTj{3iMi
z%9X(}5BrSh?9Q-{9+P#tk3al%$&G|JB|>jIHspgbRu4IGVzCUm%>?kh)Haoo{+udX
zsXJeUH7R3PwcY{0cv<n@!C1eB$^~)7z_H|2z6e~y1;}V}|9<Ry2-L7wG!FSl6K4Gj
zdGClF`VQwnSYuONMA>G8Ns+JEio8u8#yVNR`BdGCQd{{zQL28WZm0<DQEHOsD_$Yz
zC8_ZPm2Q_!Q9k>vJ at DzB@+q|TY_tqOHXIfE<YB*NM0e=e9qV>Esbu(B*R#FyupdaC
z<4>Mb*0(zuwvQahO}oZNO4`J9h;vYn7*~w(6Z9SUIZp|q=$v>~=nu(_+}Pja;Rm$*
zyUu!G&+H-J2fnB1An;c8$h^LT&U~MphdJbQ=#dq(v2LHlJQsP9^d`jYfK%RR=ciz;
z3ho__MV|{98Fi&VpCeG{B2iBc{}59DB;E`$Ps>St5&1MICpIVe9lFT<sanK$U5l(-
zH;p>YpT@*^ee1FrH6546CE1)}!+DqArZHpEeo7BtMP2eFp*}n}-&mZ!UANdG(FBS7
zN>c7N90!*6D0BTj4}2TmH_2X(Jm9;6^NEjH<L8ta&NF$hVY^DXJ2bavz;K>$-=zFR
zuwqEC2l<ymV)e0B>5&=4m~#=c^ib~&&asrER)_y&yxS|n;;VAmw3xDZp)Ae$87hUW
z1TvIxS#&}EciEyKAD7ZwJ9}7lu)Ef+`gG-)&Z6_B(6Nn^l|LNwQH4vB*P?A(;e+CE
zqwdJn@%)(s8rb+<x?<Dr*kVJ?*DC82S011!vhIQ(No7pf8D)sa8Wizm2FyjgN0=+_
zBc{B|e+p#v`ld3RlaX`Gys#cvE;2u?r*DyCC?9g?gq*!=N59wz8NZI$2}91NSje|G
zVLb`Ve8KP>#+OjwT3h>18)|_6ryY6HqmKDW5Z^6%3-v4_d3c5C?gT5D$kCE~$K-j4
z+guT*Ya6j+rC20!sAnPSUW_p^9rLLOvcWe(PIMIH^_;vS!sdtf6Q9LmI*)S}Z6l=f
z2&RWz8 at 75xC$-n;+*<vrQmSuf0Q&@e+aSh!U;I!3Oqk{SGT568(Xc<HRO30%;oD42
zz|<HrU^9mf;RMEe&vbSM?ysmX4ZG2(or7F28_bADK5H>7H4y#nmo)HGJ|?_2q at NHT
zk>EnageaaScC52=EO_pH!bLABmCC=ou)%Wo9^Y%EtvdbWDR&7@!;q<d#MV%-pM&G(
z9Dg>&>YT^&md3pao2CJAABOXt_gUa>nF#K#FTs~;5EFjYl!_+!6fwTM3O}2vB4Y`C
z*9-iTaetkLb??t;&)@hhR-yBX;k;9C5UWa5^GKVc?Qf~9{*ZN~|D)}Y*Ikh3va_UE
z=sdJhb>NRUX8{K!Ss&-xOXsvomLX=q4ICphI0rQRZMBbHocwss%Tul0M1K-qL=Ig$
z;ezrA6^<X92TpsvE#3Xl=I0;>rMznJ at Kv^{29BtDFO_kgKG`RY8?$rmY_oYm&I2Q{
zP3<fxzs#vB|7mSPei-NJ^5*$U`jxn}-?dwdseq5B*3~YMb9Gka3lXX(8wgLhkk~=i
zLkC&|eWV6D$d6oIYa0CI3M<-w2=-;JuK5_Ya>Q%40Ed>4@%EGJntvPi!M at JzN94Vn
zjF<t%sM8n&g$)y^uGgKI^R{)DJ1MW%kt6PKgw;7OqMFPth<{gtzd}vM1(8G6ZeR=Z
zq0=v0j9hZjE%1LFrpk#7awB-b!{D_?Zmg*PIu0FtA0K$DLa)qC45q3cU_CEjw=u_(
zGQ-Z)!WRN_6`c7Ib6yC{Q}Fi|@bxp#1s*X?BD$2uI*i|u__W!THWhv at f9x(`Fds-a
zi#E8vjXV$a!5kBJ{dtV6PfVkL4J%*24EX}UExAs?6Ac$4r)p7tC2)<0!Jl}<jTI)s
zIWf2k^tSyhvn_uFkCDbY7zzIn>Nhs<eWspc10zPZYnZLB={~mA{k?qT1{PQdcN=0j
zZiMT$O&Rtsmao<=>v=dwAUoOJbd#!CI2kymX+xu(=GWeyu9U!5&XV>W)6CAdJk`AQ
z40%surOn{J%+~7u7RLW<*qo&KY2xN-dHoMPm5$f9PUq_ANY{Jmcgfb;?bZ%kV+YwM
z^=Z9*$;rA&>hC&#M+~@*dc@#d>?;s%ckR0+V1EntZ;2J|_V}sbKe`sF>sV)=<2vuL
zKYlWfbwujgZ05Omj{ZqM`g!+%^`nvFkjqWn*cm_m*EvmM)<YkR$3K$F9?W at hDmQlO
z)`qeG5?|c(K=UGUJ-7GQ)+S{Q&2h at +odhlbwgp8P{HO?FATcfH4hX7f*ylq^)<%&z
zW_LXNW8lvx^%HVvZIncm(rV~VxeAUZ<kulK8o~IGYa3c6BGlJB_ at N;)CV%GEVot*U
zhgg5!{P<_|b3WEU;FBZRw at baO3XT?amB%v2|C~J+b58}zOG^_f&TTEp`jO;;d1-Q3
z5c<TT7)96^Y at f0z!oKKKMsADg2;+7NBUjj*uqj#SFTkmRTr&~_o;w~ftH{yLykjZ;
zzm4BJ_$}wG#_=T*9p1Mu{^y7KH-^~H*?3q}W}-i5bQ_Bc24?{qUG6*O*VDLuCDvn-
zON&^tU=i|TWJc;*KNcUxy*ZFGN5zV#=0 at h@UZd+=b2 at Xb*Ym`$KjItWg2ntA-_7cq
ze$6~xJXyDv;<^lQu%w9fct$RsQ6W}%)JIzE)zq%RHDMjjUL4bi6>c{p<s;WCBX!q0
zT-Qe)16M*b+L^?X?jY-759HhOI8MH`T_Sl$Aj>A-^-EK)#|ge{wztg=8{S&I68))L
ztQhy#t$Oq)YozY7TCc#dV`9Z9UtC}2IzMVR_Dv)E_puMY#VEI}@HtAJ!uwh!wK#Sd
zb}Fr{8GgG=aP+mXVeg}5kR3`sY-Pg*0xy07?23nxBger1sJ%R5(xqI)`j*mDIV;d#
zV!``Si#kC5m5!+Xhi)BImiG at M|0h^)l78AFlZ^AmIzljS<anfcF6zX9vGYd!<j{p*
z>B)0w<SrTG5G$Tp)K{SJ!rTDfL`u)!mPM1?PVB0P_H at LkuZ==kQ^;EThfw6DIMGS+
z6sadzBo)XXB;^?+vvEEcI3-`i-}?dUSA_q*6tNfo12}q(f0X1fbeOJ~D(Wr%8sr|d
zu(5^&4v|fzk$6JN!m>N$Jkd^X$lxjE0l<CxIP!Qp9AEJ7<I~G;!5{q!v3n!8WE|0L
z)<%-?L&fdPbqID|Z#+o+5NjjLn|J#2%yvcS at d9u%_lS3Y#94uQ<AGm$iCO{K=&^GS
z))ZSHFPAVfCT^$PAwYiT@?wLBl;gd!@@jASv)~%!rc5u-1-3@#KLy`01%7<l?do6|
z`VGc#pvTBOa&_1zriEG>Q^DlJzPCBgdMj`ya!Z+h?F-%y+hn at WVQ`<-coiYnLUE%J
zd<qvlbAZ)oM!iInJY<7A5NmZIvhtQbSk1&KUkJ#9FF-o95!l&FwTf{h|L7&okKl0m
zU7%}8aF&z*IClX)u$*O+5L at zCtoJFl$1?XRhBkiRi*p!TGZV*F^X2Kw8q!(%Rf)S}
zJrnUA(L;`a$ywd}?O7R28=pI=1&?jOlJu^^H-74dU6WTikPptbT at 43;TR$)(7g(hS
z at Kc~n$mh9{<X`i>fwDXhr at t=m1}6tOPrgS2{xERO{GNz1;@I!>1AG^F{>NcWO#b8C
z1K?qeGC#!P{1_=8IN+JU+^6%8p5Bae82=Yzt_Uf8)Hbh5o1EnKu*aaSH$p~UT=4>t
zP4F|&)|;+=?Ab1`^xxlFV!a7FI$~i7hd1kc3V36Vm62V;oQcRcHH(p5575th#fq`l
z<ELZnHe>9*X at 13ZY|Nr~w(HonRP(}->ooD>Lk^{{GrtI%5aFnJD9ADgGGq38^cgww
z*d+SNk;}%FuSv<1y{mw234L-!5{c0PKlBJM at U{Py7x;Xuix-$1JMH`b&O1Zw%u|q4
zEl>qs_&n+?lTU`phXZ|SGPv7cVC(t!*k=9!rEw^DMk<Y}=X_LtzbTFSZl at gQ?vnKg
zi6 at 1PunI9U72xbWDlvw&VgFR4vF9Wc at 3{BuzR=<=4r&(@)62x~mM=<iFTaIcwun>H
zra$4+?b}@>nX!-I>8xMe-(AsWp)9M;L_BOS0$-P!CF0{fZ8`4u_~kYO!_hft4=49B
z{vfeD2=OdgOl->EAX6&1vEyySKCnr|j{lje-#pE6Yo*#?PC3KVvkUXHR^B!oO?lfe
z6d>oANnWzC3!&dy4DemhP11zc-!T5?2nfe-KIU4nd=YpcZu{4`xVCp1)bLBoLwEM5
ze<gWk!BhGwXAI(`+{>{plDq9J4Y{@)^X~Ge373JgndGopKB~d8d0L>Bt-$`%;63F8
z>Q$D|T>0|pYQBskzKSx8329>dbb_LxQLsUh+!iKIRp>$aI>@|ya0(UC;=ZEgN#Hgv
z|9Z=lxGczxP=;&yOu}T2_KF4XR%F-ProylHHcMX|#fpvjHmhf6c|%#u%<P6WRp8>A
zz+UT_j=W{+ckY*brrZyX1Q$o}Cx>jxhQSXo{+1%1{rKh_>n%ay%5k<{U at j2*yYo7`
z#wG`DID=J&|7D10tVNz!4f4X5VqEI{!TaOCedx^Q)f{~!Qx29FU!5(Axm;er7BTM|
zVhjI#A3v($@W?yd_`SoWO?O#3H`p=#w`Yi>zXncxE9A)bA^m3Xo1 at R40$*TPw}mQ;
zE{rJS{hh?5;hoUS!LP8L!~!$p_QAi$?O%Z-fR7C0mf?aXT+!(3^#luvwNS7`)VIG#
z0v`qPOM&Mm0~s_!Fc(tOMK;lNsjVDy#2x&e$8Sca7 at P}1p8td{w9eX1bfdlky_h_^
z?{_`cU6Vh@*v;!vnaF(pZ~aJ`(CIITf*cD0C*YQlv&%<=BQS-gKgO8<A`HGd#Jg<S
zOaCPvxe+lAjzcC~hi-W+eiG!w73h)k%?n(|Mj7L0x{kF+nqPDs^WetMVq}LuWXB at h
ze*&`O70xw0a}SC2LA<JJr0$fYzmPSpi{~4C+lTaR|LPOoH24?!+YK^)8RD!|giix{
zf*Sn@{n0OMXtaMdr#2G#yOxixuS}RqElnw*)Kmd=h{Uco^|H$7Jd$&7(BQuabMGQx
zQwHRVrXbeW7Z`omD-IKV8tda~7k53G--dofo<RMAXCKVtlp$x^Uy39FIkas`9^&A>
z%o4Hx&Z at V~{K3TV4}~CJwus-$Z?GSlYXyHyg2czO+P#MG*iVvXj->)wL8~796yv$4
zynE*q`kS582wzUQw<>*?vGXXn?Ja|0woKM>+fi0mSmQe)-<|hFz}UnJrZ9e|_cp6x
ziwU#d1eSdl#i0hl8<fRyXLwV<X9~`geehRim;W3__*6>E^KI4CK~;Jd@*c@!fu}l^
zpFaCw-~^m2D=$VYe&Nm=wD|i1O0?62V^_=7z+DlJBZ9x`#nyyvAGQaI4QxF)oN8C*
zs7X$e9>fD5#QoQIw(!LE+;WGiYJzd6m8ZX!I~<5}<vUwgLVm%>Ir#)*fEzFd87!Kg
zNq_pvXcz8oZjH6e$2VNsq<jo}&VVQ0p>1oYL~gCaM!wnl3p-<ETjY*B#KXq$PV3`<
z=Z34J<-?0SHw{-uk!{99tS_y<v}I8ub|G`k5V?jqx9Q0}1K03u<16r`VO#o&aG({o
zg09Unj8XW-myedzqMyAA-{*0BV>x7_TfTw~zIXYXkQdc_2e>?0R>y|H&=<bm;%?+$
zCGrhhE4FJN8o^!mw*Z;77i|M<Z!??V`20R(d`X>n=C{fm>Hy((YnsREM4T1jc<Mx*
zo}lKjPLTKDe>(CF9s{2n`Z6;o&$s1L0XY6LWa|GNYt3*$S+C>VueheyW at RB)Evpmz
zH?ckCGwj%H123enRKn%>j at V<I#C8^-e+fK{xc)e<JLYo<GI}?w-?nGa!0}z7^ZiG-
zbXZC3ZzoIKuJOHrp&pBv at 9e+;>fC~9wJ-21XD{T-sT&EfX<oP=R?sAmiC?FvE8 at Jq
zvho#mZBbki#m!G2E{mH56i at nNQ{utl61Qgf<7MDvX7WfCwy*m1qA5S;KXVD8>{jqe
z1 at IihY9?PN<#uM!pt?E}7*qI%ohVZtQ|3J=^KQ;khaUNYw6<d?_wm6e*xY);)ij(-
z;`yOVl}|VFTb9N8{XsD1Z@$gQ*nZ%GJD9pZEy&U5fF!gZx}uaK>kVr^iIKX)@C&qu
z>8{jA>aIS9egyf&><<(9H5SX(r+#wDFTDbCYayfaoP*Be%%Xw8Kn{eg(~M91d}#5S
z!_+3X%b`cs90s35hlJaAGb5kmlUQ>k#Mg<OHEV46wc~dV_~eX`SAV+#Km4AM$@g+^
zf7th$&=FJ=(bx%JAL3R{dLl-TYy}aL at +K#ByGQm{8OI0DY60)f{@Wi0DJ7e{73_Nc
zxsa0IO6c&uf{bnkTa<?XMoBIH-y(S`?tJ|3JQd;*TiN}-0~z_Qd<~(OP}X{T+BtBG
zx~>)E;2no0%RJTK8!5=hcj;sjuFKay(yzYrlmB*w<Xteu14~(PCL~m{rrj!p&1bAX
zV!hTJk;DOaR)KOCI=laReX_-oDNXpIvu}UKe&916NaF+{WIy#X^6TW5zLYA3-3BqT
z?;DV(KsMLdcTDJz#yua3`csiyCM0ho?te_~0TxOjjf-et?0adXtfbtbb!(1rW6R%n
z)qPto{S;zpV0(oPP>ehY at GFu&ky=7>-=H52abw%Q=R;S4%{Nt2y0w&yKUcmRP6KrL
zlcso*dlx#J&_4w84|2P1(e{@K%Jg|n8LU5uUVAn|@)r8fBlM+e%rEsEE1tK9;9Ag!
zMnnIu$2=&B)curbo{xDDYvQNAV{~mCyJ|4Mf;I5x at iVaoo{nqJNNNQ&=3vgX$`|oW
z<kuuN9gki-cL at 06G?c$PrV5-Tqk)w<1^(g6EXVYUlimDA?rL8S%2pm&j<`Q<u_e?!
zyMxX{tVIxVPu%1u6dRd1z30iCs$JCQp<Tkn>|(yMr4tOqP&{zJ@%~EKtfxuzz*!8;
zp9*_p71d2RzShng)-O;#AQ;JbeiZoAa2|E?KmcC at zXj(PVeXtp#+x=T)ktz5A?`A*
zzuOgiYVu0$(|0Gfn)0M^{s%}srS@`T*Ic3F3APpAS<moqHIg+azM+GxXB^{uRFf-{
zT20-^v%5ZOsr5For3#d&BlvWCWZTye`|x*pxQE22Tti&;v~ZCcKKCu73I7!0;T7%#
zd-;{C- at 0@!d^=|f;m<rvl`MSD`T#NFy)*JoYDjzw$(<1LafGfh{lo&k40 at u98*Bfa
z_zJ-zCVk|OdG8ePEF`zsDe$2C<2NtB3wXOLjisA&t>S>mcFlsx!}>+(z!vW|je#%V
zIC27<BzSo6A?yKHEWxIYNtHK&n;-Mx57vRyUyHn!s*8J9R@{gW`UL)r5GIaQk6c#y
z0;~gk|3=k&3F*^9g=d9OvDr-G%SlW*RRH{g1$n!*+}LkljFy7eS|e~$TIiM}b~GsA
zedr|nh+X2DpNP)@@oO1~V-te=Z5N441Mf?ws>)3l*&HVGMO at lNMB1!QbiT22(0OWQ
zi?A#F3{SVCu+UO_o~l({op=@BEL17Zn^c*5$$kdr{!DzoH>pqPlABifvv2cj{_tsf
zNOE_&pV(POuVo8Se)lG`i<@BLA=LHtNlXm2mgAX=Hmhn{i~4v9$NOe{O8yT$g|aVU
z;>AP$#9iYZfy7pb_SXIDWJ5J#xyHO%-DQR?zi|fezbTJ~<}w&+74pmkT89L+#GXiO
z6GYF}=AjP|{|w>asUiI)UI84Z*lZN4y^v3u8`ZxW*uk9sGHIOmEN?aO6(CM-9AdUQ
z$e1zDjfcPR17)QqK5rs$o)vo1599ObCU3;8;T;<Al9y~5-GH&-^g(>`BKX&UA7<SF
ze)xtsZqFtcCs%&;usSJlrDCAitL*m1;Hv{h&r0A=NgKZoK2$y8^2P(3tnhdV^+)oK
z)**M%q7@~utsEZ^vLS=XxFzyti<=$3BP|E|X^E!<Sk+wc4T*s(6*6O+L)zc19av5_
z^kMjPw~QvdJzXX|^DZ0wC9aqq?INrhm%G}=qk`!CepZZSGj)C8G&+ at xZ|GGc<HN<F
zuoCM)<A+TLITOG~4gWcwtIbrf5TEbz at nP)0CP<NJu-5p1Ur8_BQ0=m>*_S{LPOJ)n
zo%00b*pF@<gbM*SpU(|FPcVSq>3StI|5{zL^6D17d_-10y;bKrX8oR7TR?ugwKMbZ
zLVX_A5idc00RLxxnRBgbAuu%E_}}Xvg_sd_zjW(Wi73&6HPRjYe#4qDo#84+el_<K
zoL;o^-%$Tw61ijT2G;?&53)W-|Jpby1M!@z>nnl%Q$mJ*D178mikOo*p2gsa#Jr3+
zCvVSO*t<0LgDyNSnIjRqjP^-J-y?O5n75heAN3^8O^^~ESCSC^1?;nP+ZADxFds}?
z!w(yS?NinrVL{j~iYi6yh?2y?!4HzhI&x_Z>k#Ic?#TrbNsm}FyJwjuu5Y($8TM!3
z{cI*S<`wv?trGZ&U`NWF?QJ9XpTK(PB;f;|J=&H#n`6rXH+Tn$gT`DQgYvNn?knWt
z4vVA=IHW-DbTfyMt38bFdGSe`2o&aps7q3x#1 at KrA2%-k1y at _NfH-pG*v73ovZiC&
zVu7nIB)j4fPrB6sSxs#At<=Vts;pjqinV)5bjY|JGrBc`Xy`k6*<z;{u{h}rF8;cr
zkA+;ylM at zK!v9$Ye_vMU;(b>L=A|@9U;&5dKE&EUXW-CeZmH`|y#|aL!BbS3&16h+
zXnL+7m&9DGO(d~716TUX;N#xKnM88Yd+9uL?y-SmxgMU&#1+)_J=D|?Zj)qjNXw2P
zCawj3U*rwJJAk1=9_0SSz5|+C=t{pMZh^9uP;!D#VtmfSr6SbbF=?F7D88)HB25tO
z6yzdKArIf&L;4fRom`6N4P+Nv-ph3AOM{Th8C(na7W5J0hqM(K+ziYUOE@&aAc4<A
zd)Z9vwCnD>BOg)do&tlU3;wYaJ>oqxeWYY9X$OXp)I+$a=qU8BOGKydS%ti$u)DeD
zK(|XchdFS^crpi~ZWZo`2^@T$=xq4EP#X76jX&lnaO3!Z=YONC?=rCghd6Yth}4_n
zZN&MEM@;E7x+Mvm)+1PQ5x%hlbG)7|aD5wi2`ouB2^O!m;YGQAbG!(ccZ)|T=Ad0@
z3z-{yrVFOAkrN8 at UX(ozKCW6y;r<U`hM)%=I}E<5Xig2|)2g?fqt6FQ)OlWc5sfN>
zlO6Oc*)aqBA_0<v0n>nWl}6Mzy~{sSlESNRkPT~qQ8i%R=yvhAkh;KkS5jwRQ8HNG
zQNV4~F!4L$Kj#sW7j5nV*x3p%A~v=3B@#DC+QUDDwn`KBnMwQoXa7JfR|b*sB*tXN
zc&5FC<Qq6wS@&#O*vz$8j*>A*+Kaz$dOe?MGx}xH-b|k{od4XjkQ^T=A7X;t{>I?!
z(4XEzt~Amo2wsSa2M;X6Ljb#SjPDHK`&F(r^8er1G}xk}_RvE<1iulZZ8%1J#t+96
zECbO^G*y^C*J1u_V&>03{@?Sb%Re``>_6vD)N37ZhjrNQ!u)9zsDX_bnKP4XfNiPa
zM*Xpu_G3dfHYn^R(#=I@|GQ4Pu^Ya}IIigL;><^^+qV9$s2YhbtOILGJ;N=M!B3%C
z;Dokf4y$ix<N2%67sfO5Yai*;QS#e|5T8T2=2u}>pqBSRpMr2!@HBnOX*#DuubZau
z(VOK8eW*NC6N}?2<v<taOa0uU+i&6CBR;wIBE+H-{cxcm|DH~ehyIl}fSgU+qY%#k
zoWa6bE}eq5rsj#kf3k9{Kuz*XYK}2+S>X6{&7-A3=<6>6$FY>@3qu1Pi0L}`KdvqD
z{08&u+!b2iD9rVwp7tPC1-Ys*-eLtyX)EO5LZ1Q>OGtQofUB at Yw6_aMzm$B!p%Jq&
z1NZ;q$@wQS!KFby9g<SKZ!OAooGBND+#z3u9sv(UZQuUAp9D<ilnWGoX**^NEFiHd
z*1zJ}LlKQldr^jLMh>0=w;8@`@1}rhxbOX8 at 6Ae%uG4kTMdqGyb_<^WEyJhrNK)d1
zT#m^Ubf|p9ZcQQAO1gZ&8xH;F9&jO#m~VPaWHsVyS{%I?M~JJj-$8wsGv`SA*O(0a
z%kXolF|OuI4)~O%f3YOG3%VWT?Uji-ei}>K?zU1N*$X{pOhcKVh>St3-xZY7^O&T}
zr;@q8=6|`~B(R61;d%#r{>s3=*sD?gQ|Pw`A(Q9QiitWwE8=Y2C3 at gK#t91HKfIV!
z)^?X0`<F`6*P!#K<9wD&21##7jEtV&(pX0He1A?v*-yDRKRD!u{<4N$M85`|4e=D{
zn|aYX8{##Hjo;siId(KN$G*zUuahJtusL+W2YFqvEn76FC;JipcfX^>TrI+!{Ve8c
z31S$Y!@RwhrYXiYf%!H&5`K5apL!hjzFo{5jAQK&%mJ8#am-^uJYr<i7wVPJhse6I
zmvarzO2;#Q!n0-AUdA&?F1HQ_^IbY4SJI6bVy&PxOp3V0wC(%+<lFaMK)#01gZpL|
z-|EYboe$jYi+$h4&gU%UIa&x_pYRaX4elfHe*RA6iAbcIF~8pO&S$p22&Bvweh6Tz
zjuZY{qa-FMEDq)Ws68TVF1GX9l+b;$Bd4vc33(=cU3ieKH1tyPHSxz!bPlSQx`|kh
zEw+N$AKHk2S&H(j89fGTbkt3Agw1CsFja`<^lr7 at B)OosH;?FewV1Q_;I|vU3e+2L
z4K4AZ<;yFHFEr%h_8ah#wGobU;s>7GwG|u;(#;*&;0D6_516RU9cj{pzCz at Mf*lz6
zyugSPc5u3^xqSxt)g!{;>m(deM^@G#4 at J7z`P_bcv{U at o$Qd#wPT?i2_f`Qv0l7xz
z|5raN-GVXzZ*k4tJP+*z48}7pPcRtQdKe4_Ic8 at t800!H27}QB4B+R2l<e*eWqhse
zSA6F=wBH&0PQ!=Xu-g}UbOrS2hxonj))8__vabIg`pPiL!N9RPmO>vS{=ROaQ at i@d
z#Bq#Y9(|^B=t)1C7#RP;zxB2tT;IjH28<K>4#CsK&A_{?=tKF2u5GI^A3uXUdGdef
zZ9Nkp&lH2B?+l|y+y at 5#q_w+qJYpd%SzT`Dtpo6HrpGv8i|Z-Am6!$Wdt=rZ&Z%J^
z*fo0*1Lo~^p0 at E*9QT!{StXqKhO$(x-H at uK_PBL6@jY`*N<oz!$0ZqFz|A18<*{uG
z)f=N&v9!HLqUFr$zY%z{=~$Ab{3iTo<w;jo%9KSHj^<arV at kZ@mzL7=y)kAr<lNsc
zmL)05!SC!|3ZL+q9pz8%rMT>4^dP^|<d3rMN|Kg$O-hHY=RSSc*2+4dx;nuK4!eWE
z&Kim>{KtV;>_^eITAwufF23u`*D`Qk<C?E81BWLK7f}}?WqdiYJtE$d1FoN|;2aP5
z<p?l97OVr`#JjH`rtF^JD)`_`+$gFlYpzOWV(^+ImuOort2KyltT<tV7fG_Pwzt at -
zJr41wO2$ePqJCmmPzS*kV{yBXHD<BeabLAG^f;+ERjxnDEsLBXRF+$31D{;8Sl(@1
zsupl<369i!DJ!GtE6O66%;R<z+Yh1a=TMgP8M(ziz;$WDTX0PZl_8kID at kRrhvCw;
z>&|ageiKb-liiEI<hArkSk?S?iP2T|$8(Secq5gu`^`xCjYGltk2SM%SVsPVh_XiM
zx at NznJnasJ9T-dI9*0d!72^7*DR9rIawxrL9>3K0F>t>b;NHn4*QoWj3Myyhy4l6)
zgR%UScXaGsuw|sMo@?KaTzMk;F2{}6Ys-+p){DCCP^YS{E`h(mejusr1~3Gn$Cp&p
zs!`8hZy3yu^UTYN+b~EWHgf6r{7#dF^M|81RU{E_m;#wlNWJH&b~Je#vT=>0C}tM5
ziZcs&Kb8U8ISYMb*|7KIoE0D1a#y@%>lxOk=BbTdQkpHuqvyNTAaA|Oq!3v6+>#{g
zUAMCY+esaA>jXynd;2O5c+5Dnth>Cxi|uo at iEw*?b8cd(O^Vz%5=XmG%{%D1&y)k+
zfxaY}0C_u`!aU39`FQrWm?&(e^tMP9aM^m&N9k?A_tpYK)zx;rxLcL3l7D03bNO;s
z2EUZl8|g=neWY<KHoPJ)MvNERV$1M25-qPcsnUZ*o`r;~MVHJ at x9>!5LHISPGPes%
zd5^etS|5U=o5?STad<t|7*TdLr>=x^u(kyLCj;=8mpe7Aihqjf`QZ4&^QgD6?x9ub
zCpW1|#Ph;B)L*HPQ<$C0y3apgN6r)03Dx;qWs_B5x)w#D$X7b7RViLC3zH8T0+i}n
z&IWsL67m)9RM5XCmGQb#)vOABexca6V9?;HqX=*F5q$gnq(;YHeoA(O7s2vS*$tQ@
zyZN2E6xd?R5Q}0;6_NG>FTbeHuu}n>dJemqZ?c0oZxs3}=IbKZ5p$_RPgz9SY1o*s
z4<BlF9I#7OF>E|@|49G2Oy)1 at Abhll!KVjPFQY99w at t$RK;#ZaP7?AT at _SGcN8&1D
zhJN>%l82m-`AnSI3R`a0A-5L7 at xYDk(z#djE9(w$k||MQab9GAypWG^sO5iPUjh5~
zGXE-I$q{24Ag9%^nbyL#18k5-dFle-4hsplD*BAzq5hk(Rw1!}wu?=<#P%b|)90d(
zR9;auB2QpsSt7BezdCda<=q=o1vzVgU%l7k7~=MdlVoR)lD408DB`u#IRY`0^KQb_
zQeo{3$}=b8wR7f(tj-F at E<sBD5l$2G49Tf`z}gx(cVN5tj_P)+mMnu at pr|~L^6)kq
zd<d{3JYsR$RrGg>SrWv_);*GLE?DcSA{?@VAI;2JsjDfhEfH*kY=6Y$XKGB6Id)Bg
zjlW$|Zv^h9Y(_C;=_&e;L|O4~<hdN9WSI?HwuD?m-&JKu(2sb*8*;g;U+n(xe1eHt
zBQo^?)s*C6?V5R%rc(1(>Xb!I at CTg4_<6bxvgue4_LF2`W}Cu!eNryz at 7vG0ornB1
zI1a*}S+UvLZ$wP at Cb#n_OFwu0yZsE7?U?_1((bIvc9o<|VCBXhTVl!+77Uua3mngQ
zpTKhz-`x;I5kD~U%4{R;23g)s at 8$do4DfkL?N;4L`D`?&&5HT2wJuF~`#F<1JqtD^
zR&k=)@r-9-M0<mpwB=K!<anaFE=>ad3bvF&PDYO!yyK+j;fVJ0If6=_qF!!W<Z(=R
z+pC7@$C+dvx}6rJcD(dW?hR2;p-}Xuxx0kKl)^q{<iByB*csOeZ%?hj+|}KwKwrRn
zh3Xjx!S!Lnx?{dHA!#yV6k>(oqs96r0DaHMIVs5sJP5u0>38Z?;O>Lo_T~$@3`P+=
zdJ^zF>dwNh5l67C^9&~uLq`7!jHVs)^mH<36sLO>gv%d#lfH)f#e6;NGec=oVr^bF
zGl%4Zh&<xIh!SlE=2bKaKKMVVxR at 5M?(JP!^)IL;T$Ih=n)4Amw^ai9yyJ%rbq$&g
zRqzi^TyfeqVPFh-51w6#Z5Fm>Y^h7HQRIC`XQm;h61EloOm}RjYx!5P1^$X}#c||8
z=g+2Bd!6ztS at ALYKxxEl%|-Ah?UNwS!rX5;1H&&x%Z9;wrHDrU=rWQ&8aC{l9+l!X
z&wPG`%{0&lUyuVfZO9rHjjbtQDtv35ekI%9Zvrp!z+)FqjsotRnt<~;Og`WaJ9wgX
z8RS{Q38O9WSDom&HTT;MZB%-Gx(|~#AX<j!ms=g=Tz-#F^Goc^<u73^_eDVy?6JDa
zXeB8x{^#1usSH*@;KwKRflH9XID=I*QXb-`M|t3 at x|m;zcS$|<CxQEcE_={=lhluJ
zNoeK^$6fuN6OZSW?2dKHN<Lv{lKvb!DsYUmx98-(gk@>sUFa(>0f%HKWnM7VZk8tK
zXOewvXQSVGw1J;!MJg#1@^b7P_U0F!q{%q)|C$*$y7v9<LR)2niRcok+QyRb<u at 9F
z5f7QFDIVZ7>cKOKHN8NnhaK<JFvSghFp2H-bo_I~MvT}IZq(Mjj32}Ya`9j6PwBlr
zKajYjVIQ9}z?EB)*7D86dLLUk!O4h#vwq9R*i at dmi6susk7)l{THd{F%F6m>;4<3T
zdLu1JS>gkqSeGD$^tUXL(!r{MuB8v0NI&)wWn|bY2G`q!gR$)0H at bteqa$rq-6x{A
z6~=ge$!k8}nk`b^rz&?|FPCyIK*#m}MN|iF#-0A<%_%L0xzQ2!NM=lsvdKouc7?$u
zF5D at 1m6_l{U|Z`ZK2F5LVH{38*mptm=7e0>hng`zDkyJu4s*}fp1I8S<p9{<@NL~B
zZ&mWsG^H3~jqP+}8H7EvNL<C6F|C+`FmL=hwnv*887mH}<SQ~W{4Up~{in?KET&m_
zZy99lF)ze+V9q<1bVZ=I<u+J4b6DDZ#XAStnJnOUo51_Q$k4-T_)+~D>J9l-sbz^*
zi2U60F}W7Dk4j*Kp6E9w=;LJq#6Uw2ra9-S0MFf~oG2Oiz*JB4BIFoRkIb#j^xdyY
z?K0TW=1VspF7+xLIsOwlZte0s0o%kZ?)q;Mo7SY3LhmT9^OYz)bnKh~#5j5!^89Kd
z!H87aF4rHmjb~j)Tu`~q>TxL0-MM0<4A<8t)cIomHu<k6vhCg`RUUPm?E9~Vzi0K3
z9`PFu^CveNqpA_BqG8tCXE7GO5|%%0j8-F_y?mlEy2!4HmKE!z at x8!%KGdgbfi+Q+
zer?KIATJK)e5udF_`BgWmwXj|O}HynOF!DGG35apq7|k;T_UKk4h4?W=OxJ^bxl|+
zdLB>=FRAI?j~JIqzV&xK@;JPO_GyeHc?=)bl?2u_8fz77#O?yeSqy%SqmGws)vO!e
zv>=aO<q;a|DC(Q5B&Qx^zxjwRlGyU^Va=3G{_B;|Rb<~0yj5EVzo_e-1S2 at _TT>qT
zQG=@=O+-Fznu?hcarsBWnK_E|p^0OlJ8>aLF91(e>?J{d&e{u>Bt(}+DjG01i7_|X
z&A^Q6{8UXx)CG5ADaA9fepjaF+8)=YZK$#vkvB#YV?kf~JK}uQqz^TKFOXotCn9Gd
zz9n5EBI~`8Jcp>qkv8w7 at A7Ba54-xpfmpBNk>hQyz5q^uV%VL~PYy(~H!*tg;Uq7C
z26{1Y(@cN6!#Qt%5A$9fFf=`0d!O{Trs^lUHoIWtnRcwptgH)et;o5oKD&i{uV)eI
z9|KdpilL`GZra=l+}GsDbdpb!;D5`a3HBYfOUMm_|F$|&SVQBU)T_v~cnUG)YZzaN
z&OZwJU~&Bha4}w(@fmamas6tdgMkZqW{job1C#^0x^)-(pC}u2Sht#AM8V1AeXjQ)
z4=en>#0~`A;UpE$-!U>@PhtJy^a(gJQ|8{wH}glqcdKpVQ0Z?x>PBqQ*oR_;XX889
zgGKk{!SxU2{k+KN!Iz~8zn;#&?~}1op8tuecUsh{DdLa86+qUfKe(OYDZc_YK|k<K
zZMjr>vBmw0pOCLBd3>WJXn&EHDr2ky!8}*_^8EPk`>E6ZDHtm$;4n;q42sGUb51_+
z;rt3LL19GD&(f?eDtB-l at _g)vZ@(LJ-!E<7u}-g&Q(Parq at HlM32zRTxSe-wuFLay
zDta5~qr-aS at hpk1q2CeIAiwnl&ywhB>{npCO_*RH`}|YZAy4G*<Rt5rSa&PkP7idr
zoyIuJW8DZ>VvR&%$r_LkFX6TZYdJUmwcqua535N(_dbkwJd$)p%GKQ%D~;rsZ at qiJ
zZKzNm171324L*$gSc8OnEMkeTx~{}E-WWMSrE080J{{Jft=flr$g^Yc?N<Qv;CK;u
zZSVce_-KrjlCf%1&Q#-FmGnDN+w{s+pV?zbxwq=;O2Whq<=~vT at m><I`5TK#PI7>5
z)zy`VnQ?9Z4SnhWWTzyMeT0-T{TnOB^Qj{a>}P$W#IqlhdNL`Q?`NJV5p(p2Up>ug
zw%PT0uIEzese0FQ|8tzr(b>O+EYxnO;#mdi6{C<hz0~#wcs3N^^LT^YZ;~_jw<4eD
z1-&9kmI%3IpC(8tYvG)Cr)?^l6SfMRTdr|+3G&kb`E;7t7^DfGVIBwW!xC~a#hc=$
z!oTHx#_C{vv4s-d7Yj<|{vjqmKEWCkMr8e*?U-XL@!0l!7E9K?;=;Gs-~Q}gmbm?G
z^{dbAB02&$DnFgBw<)r=aGJnN`}WXWjt;SQYGTu6V(4CXV-b5CY-X0MIl|g8C2i@{
z^TK^IDu`Z=m>sR4!?71O)p~G$d_F^6C;GYrbE~fKM-Sx_pT2<$4)i$a7;%%Zt|QmS
zPr*C|UrY)Qc-PgT2loyi)je<ZyPm?k1g^o!aeaB~FD|xp<=E1wvSQ13C&C&L_XZA^
z83op1;_GX7qw57SmMF%}AtpTcJ5_W at ib@|P?C>yr!=nE#kV4K?6aV_;IK(Y}E$EPl
z1k(T4dn<J_q$ooa;Rcu-x3$Yma0vB+6vEk()f02?#=F5S>H^H~anQw->_gUJ=nnUQ
z6H(gIJ-(Px0(<w{$RT$OxdrcsWg*|-UdS5lh88<=53)>HKW^X%$T{~6*fE71C)v8|
z`16GXBQ^{9kKVyC{BJTqb{@3lg3JGnhLR?~tS{UyvM05_ow>|&fnN*wW8&P}ZhRbE
zsFu35I3CT&qX)cXnem=+7+dEW*88V`12fI>sI!W?H)B6Nz*a?wn(`w=oy8HNVKqx1
z1D+^176pC;#`jO;NVh7JSLVDjtu>~`aeZ1I1wKhftEzRP5jkPL>paaecPgoS62({@
zJNG>iAN*cLmL{D|nYGX>Zx8s6-_s2%Selq;_KCdm-b3ya)=x3ZE^3Q=#*%Bk5VSS`
z(**p5GV4>e(vfW2#md`|@-Eex`>siq`)*lrF0cK3?qG^vne$^@GY9+#hPE2&d4VE*
zV6hU<TE~m}L`|N@(+Q-HeG+f-nm@^<w}ln(nq!)wGos&dmZ{5Mk at K`Mxq}AiLWZQ9
zO$JiuVFks;z{`WAJ`JQk!wTp>e5K(!>g+r9w!PS%!FE@;Zci<?GHg#VYb<cB*bf#f
z_@|XlRtdIel}=s>8H4;Qh)ae~YyZrKEdLh2v%^$GJ$&=EIQA-dST+ZL4y+>DgrCw_
z!<hpA>N(6yY25V(JQ|L4W>99tt^X2dqaQJIu8h9QnLHF9y}EFc=XOag@!9dCthW)b
z|I3FPB(;<B=ybQUbUpY0e(|3|@GF?p?1)3_w7$`a{1Ke9?q*wnK+2b1D7962q=d20
zl)z6$Fdb!XEcLH5)J^b}3L=OfQSyoP4R$WJ9}#X#!3S=vi6UE?yWSR{wy<+pdT at sw
z0uLARUxJhM6k_=po`|d}$O1FQa!sUC40|OR`{-kvnh*!L2eHo%%2NjZt|YE*RZv3|
zcwb<9$?EcX6YK8T#D0cY_$iT<>-Ra@`K#5n-BT#wfPU3*4g(`_$I--@%Tn63O-GVo
z6KX69>uS#$I73|>7mJv2E_CS&{5%rRoK?^HrO60xpwXVY(bl^93dHk at 3DzboEBFk?
zSkrsHg&(M$;Pt*gZiCxdr<^;<UdFM6)%zx78p$zVFK{=0i#*P)kiEKWaPVgD;#{S6
ze^A4XJ$$)Av!+5)kMCKodd?)GfX#xw#pM1#t}|e;*1gxci)ChKv2-zOCERE^<l<WT
z2F82R5)JaL68W<hIrH?m|0k+KrOhyo$m-m+3F=hBcjB2#?vc21yANiKiD{vw!1R>)
z%;23}ri?seBb;_C2u^G?a7`+39t9j{e*$j4TvA63;o<?3$8fM0e#+T_f6!B6oQSDD
zOzI9f<AikwVLveY{6XrEJZ~TXdWDSCqxe3njM%kp(<!Z>$~q7;h3;hMhQ67)$S%eh
zR7?`lH;@Brt~h<~iIMt*oe229Kdb|R_98yv4qBDyJfs>wP3NhmMS*tICyuGcPt@>_
zQzp!RXb<F5hn^{@;mzeEUktyF8++tw)M+mHo-z0yVE3hDjMCfi%?4-pp5;s8x=Ovj
zuxrV_WD6 at 6Iadre8J$nCaXuN`*gZz7o}C|d=K3c7nV%ED^EDvT_y9LSov at 2w6Fm_4
z5+9g8DxI{`+62m*zX<p2ZK_gN4 at Q979oLIB<l9x+sYcZm_%$$YfiV_Q24a6+2>UbY
z4On~r`P)Z=Gf1Cks3dI+u8 at 1s6%Mp1DC9qM*L&rJX?-`*yM4XT-r%@r=iJ^Ll$VJ1
z!kUGNDP)adump$?`T1&{{_83E at mTBHgL2FDD(55}=LWUxdnfC8;iKoPIo)+)jM>`g
zD(Zk+4Q&@xq2H{dR{^W#0ehs*?y#Q}J_<d;|37?ve_WI0`hRLt at Ywu;X1Y3tfMnE(
zL1<Q<Y#ue5NQ8*;h)d9ZNFM44b&4o9e!52)+t?<IG4>M$hQgSbh$yI~tD`7jFdZ8R
zL}o=WDari4??HV&=ll75zklp?KYO10`E at _{ecji6UGM9Cf!hmQ-A|)_4(ba at eO6hN
z&Ts^BsT7!wdW_qnd6~4PGn3QDWW%0VpK=-3JPP{{<|VIgF&BOF1(lZ=V|0GULItoo
z#gH9m`MN7|*t at qA-J0arbID<kGXb{~ft(k0-D at sjocnw*N9CEr>U}k2T^U}*aiia_
zb^T_8P9Ptk=6mX{UUS60hMcpe*1iShHvCTrtpB1H<?ql%f2)#*+=|xSgRLBSs49nr
zM8|fX_G-ZW{W`~K3!djXbRX@=h2XhN4qy7KKBN)$WI1((GpE(m-)Hn at fp0tQZ?`H#
zW#BkidBM1{xUYin;HCY|A at Jx5D{xKtD%1W(=2O`2_jis%$5UWF{!T63k-%woSJRe}
z5_0{eMW}=8Px^#@LJo?4&K&0sjFX>KMlTbv6h7c0 at OHNvS*okSmBc?p`b^|{VsCb2
z+pRuN%Nr;+d}QA(ge{>z%gDmdo2+F#_rAtt)1~Bn;OEaq3|O7mxU`7a#BF7?3^sG*
z6TGEvEn<nkQgG_HTN7$+;2m=b30|n-)^hVIaP+P!KrV$keEZ~m1uTijPPm7bI+{KC
zNLIr}{vI%==x1HTE||Ei88HY%H%L#Zn<=non=3P}<$-^Yr8{3l{e?x7^)zJg?_(`w
zKH*zuhT40`TvFAs*|!$onW<D8G42ifj`!44HzO~EA?KHRWnX=kF6vrNF8rfH&Wz5n
z?b)JUd%I7HJsbV$Dz6fJPK#7mXPEH+5zf`!%V-79d996i6n+7zU8}xnUqUGYO88^;
zU6X6OcAj#RgtVb+1?DBJTb#G2zdbV(_yB$PGw_$}uB!EwV0&}xYn*V{-7=Xrdy&rz
zzJ;*Ae2#a{Sm#Ac$u{8-8{>ixn(JAU!7n(8YeBxx`5hYh?G|8;%Zc9?@7w3;_a~eW
z%&Bvl=Nt(fO?#=MNt$%~1|7Tn at P-;D8|#R}h{Y<7jxBo_<5d=hSm3mm(3f6xRD1f=
zi}=3+Iw|R2E5N&*Wu#b%nA<u;uw&2fV0XIYzU?mHv%DbR?$Z#yJACVsbSc$hS351f
z^&>fu7jN6oh at PERM*1<~(>Jo%nRu2L*WG64MYr73 at U<jI+psLUrB4!F=~Qz!2EDP|
zyrCxi*|e8RS8C+vj)U_E+>Kw?aH_ at GA>T4B#fF(}h at Y^;PlN2>k3omV_|C+8=6Z5#
zS-iTd`Z*c4N<q#H<YJlvUV5X?pZqW@$=pq_%v at djJ&z4<F{jQo&-Wc758M&#-5$OF
zU0<2lfU*8A+In#;nd at jV+7)^SbPu{`f-44Gf{7eM=LpA5_IbE#kXH$qg6X)2m068-
zL_$EukTF!|YJt!F`;Ze8eBMFU+fvRjvp7W-Z43}dxKR<s=QKGFELIuB9g#B-Ygtk?
zYfpf<cTZ5~J#g^!v5+5Zj|uB9wL`nI6LW1xQ^1}ey|3!%wBGdWEbc%54*V6aiToBP
zIm692qLrE at 5p7NV>4R0Wm?GTMJ=E&eJ-nn?r^<yN^V8Lx-oU#dmP<XRi|c1HV_;_w
zSPc9WHP#AV8w)>{Zi|l?HmPpUG{o0MaO?w!6Uv62MBywBN)<Ud!!s4MRMhhFCe5c2
z!$V(&f%k-#;9Uw)FK2AEU)v}!zT^Ikf~rey&w}nSI_t at zxYy&;dbxhTMF_9fX6;nf
z&vYYBxbET-${3jqKNE0m at INnsZ9)Z`VG#To22S;&7W=HRsU(idH-)^T^Km-XJIlUH
z{Z!=rr}r%sF_{`GRpc)Nj|Kc+WE=NdNqn%%e#S6()URvBhkZt+oH+yzzi(C)^%`jK
z+Fb{3CSWVpEED%Jg4<esF^39bfqU0C#e-i*F7&aikoinfPd0FJ{geW}bJ&c=rga&p
zN5zJG-K-SK(mkUkmh+TH&S~LWjUjRnYwAq)N2L!xCLPx!4 at N9}5G6s+!e*MhGn1X@
z$OvkOj3{TgyDLv2uQ;6z+m<5bg81=}G2jDFf|o>hzQH|h?k at gD=+G*nLy!BzM)(r3
zzot}<7=6p~lGX=0UgK|ckam42&rK1&yhL!zDSA2?%cRa#s4{t(dVul6IvI9F;6R?u
zA^s4;A>9`|w{r-%g=z55jz9VpaFnn)dvIzqoDc9jc&)86_$XChAMO!A2ZY~M(DdL<
z$jU0g{s#wHN6zM=-8^d`U-&dJhkhI1VXNN!s3nkawfa at pS)g;2uMfbOi3e79AL=B&
zIHO0x7_r~Px0d>bv|+!;7diZuFTS0|O at ZSNJlLtjiQ76{4!Q?(DI5CzHRdc?bI>Q4
z0JMP&9H@}zuyt)jTLn|XuGA=SkH8=FgzHSYM5A9>2A(?LmOQqq22m?`Ue0a#km1fN
zrgFFZx4Kvl?TeJO5?-r>!2P0L#N29kmw9}nX at vVS?+xm8!lN4oj9Yp?=I%mUg at 36!
z+gI$U4av3vC%flkw!o$8l2eav-o at 8_BX5l%9Gs9Jb9_H?7%_KOcy(bt03KcsC+ls|
zVtSJ(Y3akFb6yTnFDE?WS$pmBp7)TW at Ixb0gZ7`wkL4N0)mgl!XEim!&t%vp&wmnn
zz(=$OTs+8q@#2_B7pA7_Y25`YKej->^<l at 5An-xjR~o&r=Tpi+>uj&F_Q1!xlc~YH
z_$d2RkzwoH5pbb;ug2Qx1^&^_G5Nz(?URM{>jB<zv9!6jCjCbu$B3U}TMgmein=zW
z4=ofYmBmuE$Q!w9>%%9Ff`y|MkL94fbH&1mYk7R|mGBYA3292WP3|xXo}M}JzPk(b
zc0}xAPA-^(Il5bY_7Ljy#>=34pF#|Pg!nI+0`SOw|M60ACO7q!`$f()(AhH=+k2v)
z4q&PdVBCXunyTnZg<PG1b<Zh1Y<T4VOg~!LIl_m{%ClxvGdDONHC5yKCKe;kYLZY|
zuTvO{O|GkSvCBVr{;%cyVx~a4Yt<`%T+eeZ at _qyt{dsQXnj6j4oC|lf+lrd>e3AYD
zFm{Vxw?dvtA<u-s2h_WsoL0h3IJgQrM{)CY|9!y8?3y_M&X!)%rxE+pbP;8b3}cV1
zfoQ~se%@TYq1F|V@*U4PE}7H;?m~YzRG3s(KZf2t_A;46=_2?}o^URpKa4oXAAn6-
zq?fV8t|jpuRWh_g1^86-z&Yfjt>G(0uJ&ANALmW9_bvEIu$_gRlQxu-W8S9HDoh_6
zur3ETB{=aGh5Xg|6Ji<E{Hyv)dj|AZZAU5Lo?d<XZp(r;dp3S~_zCdK#4i`vtYi3n
zPB3YZj{(?j9GeQ6Dg{1q5r<cGQy at f6LCl?y(`VVx&#}6K&vf)}1dmJf5i(Z>jbiTC
zM*WO&`Qv*}M7S;vRC+<T5QQm+KVEUAk6?FKt8Vzl!asCN^)T|6%!Llz6LGY)R&+YP
z!F4zC`=+LaQu?T2SMhcgoSl)^G(#yO*IoG3f8ZF!JD~6UBP8yYHcXNC2CL9%!~N&@
z{v&P^9o<_V7uWPoipXOhO`$E#P57>`m4X8^mB>8EJMi}5{)CGg^3S$~_`Hy7B at yfT
z7v>nr8u#{E-%{ApQt?clbwX<+OYQM at UGse->au;VBa7H=7yljc(q(!?8*vk!+URQ0
z^iwkE3cFdt;nmm|`-9HalCFbJa5<)p1}8iG4+o{Yev3zbgH^CG2_eV0 at pa-Bl|g18
zwiU#y+@$9q4=wT8Zyf7;a_&UG2>F8HlJ6X8Z_(l!kQ1KRnt%AFz>nHkki|&^7P65s
zdO2WQY~%}R$@xRDVGvGoUAL6v>11QSLrZKvkWa#;uoVZsHkQP$9n*muOHRJ4-H5rZ
z$;V2*GvRFtnO_wyXnKgq{e4;W=zmgRF9-)jBly^g*eG2xem(lf3q)VAnbK!vW$ppb
z9`Sv8f%BLx!@LLnT*Q715WkMQ&-f75>lah3>QQh_+w6hf(2LM_$~s5X;iCy_C8EVl
z$o<<8Z+^PFm=`jl?CgVG*BbA>u-9!dJ`|a^#spjTN6_aQVb`&$Wd7xx_lOLtl0knp
z2NzXcLV1XP6!X}ZdKq-Rhk!3djDqo at bOXcS7{LRPeXwO3A0peZaaXK=C!vil0`9D|
z>WWtn!~N_n@#49P$nWgP?UDAp>!ZkS*Q*-qmVA|b4|1{1SfZN#40s7=*72ph0Umr5
zc?$5~q(WB!-}4RHI0x_e^yE7}VRw742G0)WZV~ixlxGyC_<4~!<X_UYzr(xFuB_ED
z!=f5N-KeXl5UcS?+e64L*oLMvI?e_X_k?XElczQ0`C4;18(gpY7T#JFDvEx-n}MHC
z2+lU-OIT;+)x~sJbY5TbmZcNBzmV6tb~dv(AYLy6PcnQfTM7nETkohkiy?RFb?E`T
z_AiPAKWunMvn*my at eT0ets>WEtH`+*4y{P-s{*dhsLGnz8(XjWA);1)W#Spo=L=mQ
zd1Ty_!>{q at VLdG&?dAGteLUI<ZKDc#@J*F-?h at k5*n4tRjofP{v~f9&^-2)*m<b$F
z=MZechfoLHW~f&$ZnbwZ3al^3z};U5o$5H5m;FWPOA5W3rNOvNeC{b?Gfb}}W6C)|
zz9G0uJ>Qrm2EKmH*Vgp!;I}M|uKOkr|JRnjxIXY~4Y|$}i8E`l&LV5~5RB3HiLL~_
z#s$n}?POm7){oe9luL+B2Qqyiu(k8syy-;t7G$xMqAZPki- at jcZqUDx{O<Rn=u-F^
zJnthCdSnUsH2&*-m^1b^@;+oNgHPY>^Fm07xK}mmiyX}lRzG%N=25KWkfRoUh)&Nl
zAOEJ((Kv5E(La9kf?P6YbyDSIPFY{?ARPa(-<FX1D8^-%5UhD=7O+{(;H&=Uqx(JA
z`s2MX<GnvwzxzxL(Zinj!MVimvH$kokU9Lv#7TG;2KrP#J%T*yk2z*Qk9;%8O>hU$
zS5Su~?R0S#+qQ)a#$C1-k!_|$yo5<mb=oQ?`_ukMB+XO!qoez`$vb=Fo9MRgVqhE#
zst%~E{`#mXJd3Tg(-l|GjdeXB5=OOG9q>A}JJAj<wVoVLf0Ty2S$P28TidgVDF^p?
zjaN^up0?T!%IA-MmVTJY?>fpHf&cmdYZVrlLC|g5M+}d5IE*TRxRSocO^Eogz-eCs
zIRdVD=&iloS2|s)L0%=1kLd5>&#v&4w<SCmA9Js#UtWC*eV?iE_zE`yXD#X+0d|O$
zBI at kpThR`DeyzPEN;h{uug>F7X=`qRo+e~>V7+%PClh{g18hQHa5iCn{|VoslRg(;
z4E at I7y1;G}3sXdqmjiZnjxYn++X7<9ID%gAUQ-i%goRy4DZI<Le at dlCURfvSr&_yY
z?<!wOl??tx<mUA;q=>|VKjatswntV4ZM2P$d=ao^39&BwmQ#mV+ur<u?b+xz>PRVU
z%CfEdXJ*;2sqgk>BmTrEEGtH?xfxpvnP7Fj;B~6j(lo#zAKirQf?(jUNw98trnDFK
zivd+`Rb}M0QS+bv$9CtAfa9IL9F`}>CNbo62frte0X|Li2-XVmC{uj5qfgDS#i%4o
zEo>23M|Zvm+1Ek((BLCgFM54d(2}kY3F5CZt5uIf_I1JD;t(w+Hua!1Y8duU=lYX2
z!}!@h^K0Kle(e at jh025+%`cF9sIDegaz5po?BF*c_r^CZR9$^=fb_q}^*rZo$X~(p
zqZJzCbMU!DNxv;BRY3;=?>DJO?3%6>zFVUgGYQd)8)Kk1J)|km**Uc(^vN}|0)k;5
zgI#bT>?t1G3$P|ZY0=XIg5oy4KH58jV{EPD%wZCJ-*Bo_3d#_a#?^Q2*68`o?wS?S
zzG&7b9$!%=_;Gbl&h>Bw>aMw4O+ at EsWxKp#r{3b#<$O#dpmZwt%<{*G{6ZY8XYIAz
zsq%em>^@q0N55403yDKN=efsnx~{u}lF|(1g2=m<RxjwK%Z5&Mbub5QMn;JEkF4|P
zzhM&O^=g5Q8Jv}LLsjraEA=yU#)I&o>gXewgMqi<G~9ul1%ADoJ{{jdg?7&%7(U=N
z4IaJdAh|d0o6J}0CD027Sfd`iW>bhSaKZ}MED3h6_(C<t;PaRV4n{Ws&vFUakqWVP
zj|utYm9UHZx{83Y&%^lwRy%CI9iDT_fCtHo6xa?TznC7nW?qki83dlHkaZl`2w-L5
z|J_UO%TjxuB^S?L$V$2(gpQMibA@&VmARrFxyr<%RpkDg=hO`b&bItqT)#Y*^O5B(
zVykDoL^TT)i?s9={LbRrO<-nP?9*W%i-j#7Z2&vekZ<Agl_!c*4ytCkRIvNavG?HE
z8DR5IiFyT#M-S%hd at u`k85Jj^RU1+b-P<Z&1--0*pK6ZwI~|b~Qxsw8DUyt*If-59
z)mPHWJBK~<njuE<wwyP37JV?I9P=9Vo{;udl22lYjwNg9uNzV<>d}RH at HfJTn)du|
zom~O at +4B>65nl<+MrV`>^JW_KqZY)I;=ER33&<(X{i2e-!knRfou`2PFp}?R_wrr^
zzDztnz75t-L21o5BB!0-*7Y#;ytF93C9>#SUDzAZ^8&WJhUgQ(%KV7)Jnsn|;URi<
zcd=#}a>K0k*k~!(CSD~N6z7YuSNsd}0I8erb&Ay0EML*l_fLDL_v%Tk5*betdJ*_$
z<dg!kvnAe2&9TeP`fc!I_HdYT_z|`CVaBw|mpOzno=D{J`ascC`3IC?@X2>;nl-#2
z&L=hliM4Jdc%FI8A!%aBFY)upnr}j;5j_w#lQA0pMOxR|OdnwK>C4bl&q9a20{+}I
zrk{1?+aJQz5e==i;#DeZqdRiCL!+_!^s0_bb4PipL;3GJlwCsVd8}Xa!!l5}KKgn<
zX~fmmTHbK-V)3hyD;;@xJA|#FiJ0Rgu0Y?tjw)%9&*7*d!b3iEFjU~!7*dVM%rfrA
zDZQ<0S;bL5cX#l{E-o%RAGvZEJn5MG(;Vn?!>^NfE*|yO7w1y?Xo6)eB=a`!U%+Z3
zh5>r<ew&tTPs$^is$7a(gM{muLS6J1touUdGOMAppQBHUdgET>>LN#N+3+vtrD&pc
zwg%)hw~~Ho)23HCj_|>2MQg?1g*3JvBDNy__2>%@NtCc#PHg$MgL^6u8&+!i5I at H<
z at e?2$Hn~(@cHI(<H9i~uCI$U91FYFtViUNF1v!sa3*=ANFgdB4kgw1vkOvtUdFpnO
zmjXPr9=j-H!v^0%xst at hliUG8^XNLm_FI{u(rDe740xPPf95HNP5opG$wwPs5B|=S
zTLnGglo4@>xrk}J1<rtN|CMtru-vWm)wz{f`1zNQ;O8&*FMq4ZIgjHDyp!tIDt3XG
z8ww1x{|$^^8CS0jSa;c8;^80q9k>)=JVqB0&gXtvnwFpHI1DUQHA at LwC~#beT_F4$
zzr#-ug}P?cojzH&oI|(_>kx0eT3qE{=j`EIChW)dY|#q~>#>eHFJ8 at 7kZ177>8}vG
z+kFjrPy1#5yumvH6=c(Ibg6T8$ZXiNyj%{fO>&UqE|p(~{yYtH$OG^%yomLejj0M*
z;#|T{CH2IIb`zUNIQS4%!0-{hN=@F?wvD`-j?HjGW=H#6kYO&J(ptlE?5?mYqje5-
z^wc&PU17+$RUX!kWB0oP*x8UjMepY;`zfP`U*tTl)hyPN_b2bns-0-RutL%f3>Vx?
zda at sU7VFtru#E*r>z^TG?-%lZ?ya8plTEZMYy%T9{w3v){^xs&t66oZBNuU4Iy|Qd
zdij(K`~R~Je0LTn%^9ICchC6h1bj}vKl*1oy5IKPhxllc`hN41-&(a>)_Xj?yjjQ@
zf?e-7PdjF#9Y0_l7zU=$0h<qWD=+b3Y-{;a2Os&c9IBAy%6~>v68qQ90f?WOf1B7+
zkk?ss1pdoQuy7*xOI#7+B7DZOg6F#CL3g&MD`2O|Byt$*2a at j+aUiq}Hg&0UHpflA
z&DgY%C9W2{+cLx>!2btKTM?<_oW0q%&O-JlWqa4so<37+;af(G at WnjOnab98KLnpq
zk<YSXEAc;wg-pFqXhs$=Hd&Y>OKz1XW%rhQ{Fx7s|BzwBkYDiC8I`bI<9T|J_lr*b
z)n6*txZ|zBQI>FZQD30%e3?}RUo!G0Lr46QVWde{UL-g#%!xmx8(bUq7+l`cqQ3>f
zuBJq6#Zk|9!24i+B+tu9$|imh*BRLMLo=>8KT5kYmb8S}^dBJk#xN&HChi^IfcuGo
z$t7b%u4!0(3u{O#e5O5k&bjDU3T83#AWgJ!9cg#Op#%R19spg)N!vl-6Lgm$2igmB
zOwj!n6MGL^20yGOD--tfgRln}daU4|ZooG#gFG3<x}x3*edHv;!Is6l(YKS)w-1T4
z(hZ&W_zmO!AMb!}fp<+ePy+iGt_>*`y$tK5hL`8SkN5 at FsBLAm>c;%ol^^yZSGC-Z
zvAqkN1y!*{S==3uicPy^`Ad_s(T1()KlfX}J%IABC`o@>3R~Gj-Uh+SnTSVeGJLFU
zKI8FgBKKRwW0UWBlK8^O`T#zN_S at 1Y<~FS)wtm=NTj>T-Cf$a1yddgjcl<HN^Mez!
z(T}FoTY$Byji18w7h5O&buvmD{{VbS2OP4VWfXFx1K)b7Rf|0E7P~?e!ae|f;5oD-
z;(Izg95TikkOv!A()q!p&rQgwKkhTp7yXJ5r&8o-PB%2G at txkMWk277Y^%XIIRg6|
z<FV<i6+gY(ck+FjCcYbN!F64*FQ-_dkJ}18zS<eEEw$3IPJa at A1N~JPGEOkB&ab4q
zGXJq#gbe6Ko%jB6rKyQ2Ox?V)nD;QRl)sEFS at T-=&&Yw?9TOX~#i`(wlNfbhU4}fb
zJRHA at B41sr^8Iq2=NJ8aSI%v%=b0X*kdF^z5wfS-NX9kF%dlNEL*{-7nfcyrZ3^;L
z1Ue_n=df?X<T;s;SA)@^-HH(jbi#XBU%b0Sff$}$?%yWMXR+^1(l-9RYdGD)$$NHt
z&exH9+COtxfcs>ltqk~<uc051Z^}kLtem_?3F7{_g6W=by>aqB&rKf7pDa)L9vk6J
z%qe3%Y*{mSt+*Q>if?Kn`}o#d<(%q2$NYqyfpUdoOujgI-S)}rl(Ne_-_;nhgxDiI
zbHqV^<bn6U+d60B+v5Gb8HS9DiF0nh%73gW0D8ptn9D_W6LrUfVOi*r8wo*r8(A}E
zN|UZXxtrL8+9%twRMf&2{&BDTKu=%w!g#PaduVrr4D*I1en!h1 at XLmv4NtS4sFI~r
zc7BWPduXpL(q8CWhv*YT7EN4p$ucqGw?wx8{wyiJoxSoU$a_AHK7Q3Pj`rQgs)4+h
zm&CxwUBfb?FNm6((r>_b*F(O~Og}s9k4wI-l0}0nN+nlSL5}?tbq#B7Wa|_>?SnX!
z+y7z#JFtZ3kjcG9;Xj*r2GXCFjEc>Ov#TO~p1%BxKE(%p=LCQX`;qHX>6tfbH_x$H
zaLrNVI0%DGB>8F=kngl|zr_-!^x!uC;>lBtc=`WT7Bv5tEU at QLKdr3mGXf8F6MPo@
z3ICr*M{4o16FWwH4q^)L_|5fjS`vPk#E`jUTs0d6^6Bu0vjvmS^P7FT&obncnw^+k
zz$NobBKS~&8(l_^M#wO4>f>j$Vm%-VSy{vmji1t637L=(un~6aSm^tc`9U%|jf2FW
z><lp~GYqza$a}E{>pEjbg;7cT^IQIDR>HR at 1dmhuc*R#0gsaO}IyM!#uFQ|6z-JZ?
zT<RCMa>Ar2zZ}ZmFNOUw9M=yAR=^6hM#X7 at x7yFnZ2{K;lLUER?P-H!eN`y$t+0^1
z(_ at QiC9(Cx&R_rRyT}im1YAkx>|zVzlYNHxh1{)2+_oDi6RbZvoR1Xj*4wSoy03t_
zysM%0&?C!33!{Z&$Za;DB6fE6<?a_;IntufqJedp>A at MifIJ+@Z)n(_IFp at j;+tpZ
z1J`;5K0>bu3%C at 7@iU`E-2(J+T}xex`_|>q1LBLj-JRopqeO at 39Ea#zoH(B;4|xtT
zhjQ5X&r-Er1s7`Ux!zjX{i>K;?~~G9D}ZqTS7!m at 0d|r+S%2ujsDFv7>pBEmqB^>+
zr#QN<TQFQ1G!J(5gFhY%E6Y31g6*K|;1=YH`0;RPp&Hm&*Ud at J)jqNg{bUpHP?&Q)
zcnGVlfpex6c4mCjwT?RI%fP_;#G}0qW|#!8tlu30J9OdB)HfX343kkwzP)S7IO2*h
zcgtO}kU8M-kQWe4hm&(w)QdQ4?xUTQwyTc#*9e}B>Bo9*AIpG!O1!5!2eGs>>+!BN
zh+PtfVNU8g(5h|LB(Eb}XNW_quq(U|v2%bO(|AklT*&)eYB8+=env>U?1zrKq;g?(
z$Zt#zI0Ma3D7<gc_^x~#>|wIQ2DUg#YHxEi@>3C?yz4pZAMwe!-=TCNFrE@|Cb1EK
zqpAwIB6{Jss3hgZ`=Gz3u@$tMcV(?aO+%L4)mS$x=|`bsloAebw9j<(s|Ikxp1tD-
zp4SRS#2oB0QE9s?87_H7V0NrbCsnqqldFq)!sV^Wp|)%<`GxSUqR$k#f|e7`+fgnV
z2b{C;ot*P7$8%N2KFj-w?~k at AF1-+2e>pd#1kaf(Zh<b(#Wl_J!!DULIX{Z?w>q;l
zSsa=)g52|a#-<_;)a*ZMtAM_74>{>S<NOVH>8mp((A&0deI3W;X#X7V-Z>KTzTUkA
zw;FPl5^gCve+c7youJ9P(r(?`yFfxXx%T$jjiQ*rWBcQ0NyV);Yy(?R&r-~^fM-$W
ziPv?ze&)k|VLR$w1bmf9y6Z7}yw#!AOs5jkb>JUcXsJw^Zplmvw+ND+#rvr6Z4pn{
zr5w^TOQ<KAWz@;AVuHKzeDf2u6zh*%?$+03t;f+0YJB%fta)m?Ixd{R|7!bD at A4H5
zy~pF~*|mr_5p;p;y6b?rm35R{HxKIw#DU~`A13FaZjIgKtz~5*?x2gS+uDt5H$*oD
z0AG*xxi9G`+H9G_6j#3p`^9?Jhs;v?CDi*1nG+rgVw3pRWD&ck6FT`hMnUv2T(8`t
zhh2yg<{x+cV^R;}23gS#Ry>oQ;o^IO=hf$RjF(D2coVyKVjUxY>K^eKkn=+zi at nJC
z2IQ13f$uYX>|DH6)EeLRtKSo|5vwwfYM^6zrgXJh8w}sCs*qh7DStJQme3~qt??jr
z8t}3bpIJ;ab(wkDXHKv$y{7%0=&9Y3XrG=sO3|hFzHMKx&QMi7VCrh4$|n150f|LG
zoQ6*~urKy=dHRbIYM3R%_G!=dZM(#~NUreF(=vh!7(Gh<lYCduLEhynq1)=%rY=3|
zf045qaXcu|KD*qN_BMQ%)86p+DYH~ArJ+kerA=$1OkI^W0j_bdTi`A4IZcUt%dl at h
z^Mk4*N>BfS>j*~+SQ?Zkm>&Wp%*7rFWi7t0xhhS5ua?BzcGcl`$dLm%@POcJpW|Jp
zsgE=rGgtX%a<`T%ao%1$gV5V#k6d7~bJ@#Ke_7W-{0?EQ-9|C7&ysuGt`GP;KS7%O
zKF>DAJBL3H{612`bIH|h8)p`~TZ8xEc|VSsMXvX2#S=2_R_&)`8*7$GI at dl#E4uw=
z4%jbYe?l|j0+=d-FX7yP-BSabcA0ZE=aFbLVqYqI1k}kmwd)3}aOP3_Ug!{s;#|Db
z39nN;U7yk!w!2K6<@x{R9qsO-<{`R{DPKB=yV3jSUyUAofYMuGUq3U~&M<*^-t;FW
z6_sc|E&5SKN*Uf2dV{Cmob=QiurshJhx?eYR>(mvB(xRU_aMfA#9QO}c53g>VZ#M>
z5P4%fvG(p6DP<lzW_7TV^pnoJfv=+<RudcbJw0 at _gh1ZdT9PAeFn@nM#{l0I1Ku6X
zGi;4(kbe~UmJVT_IhaRehla=wuXfkZ7;m31#N5`UAb5GYwrejp!Tl6juX}&)b%E#|
zo8^#+10)uaj0>_3BRQ0S=^2UK*m;-ODDxZ0{b9QyzV*x&6S+P(7LRws$J+&8ZdWPQ
z+jVHjrK)fE9JzZmaii*wZ72mD4}QL4thXZS{+p-53dNZ?uM8M^0V&}JJ`VXn=EdXR
zfWMnu)2|lqPz9aHO6FMNtNve}{onulv%?=v#)U7 at KM*J2w9EIFVSF^QVFT+DLxvut
zbX%&j$_bVpIOLB6>S<=wA>Z$iTjoE;mJU~8-j%Wo#mMP2Ol(yi&hv~;CNb?2H{tti
za}3>KR6e4q>eTG?DNz|4I?@M+1p9T2e(;;Bsr+!h^QPP^O&{Pnc|_j|ww0%qdvvH)
zIt{w`0FlLPL6`o5f#1YU_|lK~?W02NyC8=fEK`$?TBbqf{s7siC36$LPdV*?+*H$3
z?5FQwjW0%?UhgXKYkZ6CX`Z=A;axqgcv5ce{SUcmB{CLxPi<GJ?RAzEoH=`$z5XAz
z#<Nt|u4VH5BVd<Q=Ve{YrI0fUGGE~^qP>BqK>tCBc-c7U4!UpF*uW*u-D;3P9$LZu
zuLTB0O-Z_x#ZOMkE-7aV&-okd*YI6KR=R%XoPjQJz<Y{4jmUPo&Ayi!Mn9R|g>^vJ
zGHNy6?=~|)<>DQx;CBO-;P)W^DXriCwGeUd8c(e5#%-ffQ^EPjW%WRxBDpE0Xs6ql
z6Fva03(woV2V8t}!0mnj?^tH5OO_Jd0~o;)=2-Cj6W8fd+<P9;L6|`QADa6)=}i6;
zQs^EBxLavp1KFFQdz9h1lsI2?r3!Nna{gJ?u_WZam?Oif0iw@!Cl$01uIFuTvQ3UL
z5f~>M(Qm4W4(1MKZh}iiXbYz*C-^uV6&GEM(YA~sF~USAk*La-m}qc}!}hV(qnC_h
zjI}w<91_D)hUYv at bL_QvmQrd;m(&4$lKO!`-dnU!rG1&V;bG$IiY9)D--D#d#rOHX
zJ01wV>+t{e&Ucad;E#6>{%avu$IqY8X;QBJVuVg}SeneF2Ss~ynl~nNdpyG>JcF!q
zC*nD|kd2q^rQUV+RB;QZj_Ic##&=)j%AtX+rjNnqB*$E<b2?`$s&+%qkkX~VZdk=m
z=sFjI=9zoNR>r(Qjq72or*(9`h`9l|632ugzcY#cPte*eS|;0Hg0h^+##rSAg?r9<
zot$GU9F|U=^94D_GyWAmF^HFj-ry7C;UN*ayuIpOqdhs)G0xvQv+x}@AjZ2I<yKz}
zt?kk>Ipq3X$gGF!zYkf^5)Yg`trPY2xS=OI8M3Yr3HrTND?fmZyWgh<^JlA|pKTG`
z3cd%v at CsT!B4QL&C>ewN>mw at vn&H)~bEI7{ZXObU=MVpx?`3?e!V#I at TMh-Tbr{z&
z;aW$*Uvb&CH at bV=Jgh^$dcCcX(fRF!?chan-C=^mUxsTxKY8s#zDGURIm~L9y#93Y
zchaP;?Z}x_k8f|n7%rcdouA<MA#*UEU}V}c7T$zCK;aXO_+P{s_zbfSdSZG4{B}%^
z6X;Jk{&)1}bLh`&iOndW7{|7I&f7G3UR}Bl^CIf*A$p)1<LWVoHm*nyE4srR!k##W
zYXm20aBLCuFcKSFI#P>$XK>xWvramnf)9?2n}Zj<s4DDxg5=!=PKWHPO1j^2FzEs0
z5X!BRPu3$jmW`<QBw}9mdvsND)O$KfZ3*2>WZ;*$&ntW_onxz>Xn(x_QTSR-7z3T&
z)yz5SBr6BUtv2&S8+upZxDm&zCXeSz<$H@@pH%=;BiS at to$i^B>!?8*xB~c_JblWu
zM$?1sLE)|VufF1rB6A<w^S|kYkLDqtvZCi4;_aaqc6CBdPK at V5ju+9@FdlA;gz;@6
z#Mb}vIO56|+cTL&m87atHJ!3d>V<Dk>V<yl*h#(cW$1<PLob|7 at Ay+MJn7L3JO3BG
zFfVewQ}X}Q3!x8Y0yC>5It92BKbp`F$98&jj0yel{{Peusevv<&gukto?dlpz5#mX
zPedm~Oy}o+>Tvr<3*PnNZZ$Liw;l&uQRc~&7v$a={K{AdSkMo1{E2Qzf5UvWc~^u}
zRg3eK;>F-KG~!u=QaKY$&kGzKZzMWfRuJl*T&noRBu&mRkZq#hF}0L~(fT|Ly>L*P
z{OQXnO&GJK(BagsE70c-0xNtdB-Ql{`cY+yn&@wNm7FV%3Zl~i%M{D6#d9*9W8hdS
z54pbydA&UU?>z|&W{QK!p_RV|Nt4b!zO)cI_bQq4E-jVbQ%juyMs91(_B-Vts;Q%0
z3UUr)mxSnY-uM=!`bqsL7xfQ>nEuq~7*E@(z4IpYH*ob#=x=*c$~-pJ<0&VB_c%qq
zDZ^E1^GM7KnFmTD*Eg?3E(Vi*gGRd|EoJj at 8GH@$v6uftr^}zv>0tM6up6MepYbk_
z8~vsVYkpH#5s}e|Elh=9PEB$JGQD=W_d&!Pmirdq*$-3tE?x5}RSr`F9;Al#YF_yj
zWve0bIxrmd?$J4g>^?e^aH+ee+i;x3s=|IzpE5>Sx^z?)oeA4nvHH6O5?*hN@}kL>
zP3pMaq@*RCFWQSd`mQ0xWBZ~S2v!4JdOu{zXU-igk*8uCyo>iavHc;oo577-gzXQA
zE=qXy-+OSlj_^yr#~PL*Pw97%(W@{IA<m6S^lKw|BY_Y4Yomu-|Hu9 at zo1dz$bkVQ
z at iD+SchUpIA1`VFH^{PN<Prj|t*)CJF_m8iy#aihu+OEz<~)!hQ`h?<CRMsil!ZB3
z*S!tvY!SPbKBh0_Y=BMYeKMyYNA<A2*kc=ub+x0<2<^3<F0Y0_LxBqVnmw>+{D_l^
zag$j3z#HRCl#ppwe at t?yjvqnJJqzTD4)Hu`>hF+OCm?<)+CTGREilnX=(|`85MH*E
znDa3{>Fdk|O~)=DdL>u)Vw3|h(jG2{0va)leBiqH4a_M`$K$Wj%W<3!edGg at KNkDz
z36_Ti8zsh3k>95*1^iHLu8+J<&y?EXw_?nE*+#?!sSLU$AJ+h9(<jbD+*%&6mkF>H
z380U)#=8j~VEIe$JprFO{QqdXG1z8 at J?-a!uZ>&!?)u$d6@~mYVmY7Whnj3dTq_fO
zFxRWI6ESfkxA;oui=3_Ea`>XrmWxcZ0{l%mOa-xjd3ACV=nI~8Tf$@Yr2TAlm}ivi
z1LBGIAB*ZezLL35D*yi1$#)p?I_)jBd*dCjzEK$zOGqvsPM>QBd49Sb&w7+_g%PZh
z_hox<BXSvda5ig6yva&SpEj=EIY7Sk`qgBe>$l`l1#I79=&0F~ZGTVPV!!IM7IJzT
z-ow&`IE%>DU)I3))M7LEtmVveeGFdnRXBIdlV`dfacte*E%xB$wZk_{pN+ca+CEs|
zcg at pI1V{Kjt?Q2X+O$xSlNHiNzQfowc0Td<Q7v7m+}Oqf at 8S5dE3mbW7}*E#zohjb
zi})*(WlPzl+~s~QD4dj|a*{KH<TxdHPtmWl=mB#jiOmMjm>$?^y<LF#<4lZmf$JrV
z9hYAl at q0DuA#c9N_kc|peI#|cm|(q$?+`w!CR*THkbZhW6OFZ$*BRsnQj=I{@F^hP
ztP31Y!E<x6I2Xnr56OluT^Ob70scTE-`xUEryAgH49V@>gdu<6SFMfy(p at h}pDChF
zccpsYg?-JV at 6$SuzE3!B#zLOqIlm(M{wA#dQlo^xW;X+y4O=R)OECo at AuV-5a>O!$
z$C_Y!pTFAalJ4run3$VJUm)#`K01j57vJ68j#w)hu^WqPI9ok&L&#C^LEVHrdB7{_
zFW?LXPiK3iCui0z<kq^+lSiu?xwUS3`0vTSg`Rv{sCVf{O90Nrz6ah-nvZk8K~9lh
zE&kZ|Blf+WG!Oc>9C1~F9&Xk}ex;FhS9CFTv2VF%;rnd&#6fNV#%8_8&-F2KlP)G$
zU;YJftFH*JK9j?)vj>VZ!9(tbUD6ja4A1*sF0TJGat8V&Ey6v|BHw6)hl>{bX3X{Q
z(~^B=OW;I3ueXzYQ4jCXzRnUf at x1r1O`1KqkFoeo?mOps2b}v&lII<8y_p9m-T}H@
zG<g?-p(l1`aKI1i+Y(3goryo`uO{Bsw<liIcO-rZ8=BhkJJHSXti8mS4ZU5DZ}0`D
z1F~)|eEyluiF}n&3T)2lG=o^5Rv~UkGl@^8X$ypW4I6y<#-c6-^Ff-fxYDMeD&Z^s
z33^x+=Stl$%EKscqqLwLL)n0G6lEhyH_B#|cTi at bBspR7Q2v6FLHR36G0NXj%23`z
zsYKa|QibvqN)5`>DEm;t+D8qd`~u}olxI->$hpGZ`nC>w^cfEN5w^|PK1H_ce#7x`
z&K2nIUxM?0loNW-$}ldkXN3GB*Enp&iO8J^pEPMdapLBA*7tU<wSKU3l{IxI*ZT3!
zDC<W%Bdnk8<XJOzrde0-{LuRH&iAeBcJ8sRktTn>8NUQiE@!tZd$2_D8DGvI)>LGO
zccWduJ}Jc5a@$>mdy9AZ95A at j#3&hC%2Z)Z6<d%tyql%vP1ysEu^SWnbXP7o^7>V?
zHuTB;b>iIo1jLw?z?PLuE4i@;wzL+$*wa_nPtS_)llhgif$5UUr}BaKI^1XRE2m4D
z9LOA8d$~9v8FD+;Rv{SmF)dNJ76Fs|Hf{CJBm5YMRorSoPBGsDE|N1`Lvn_*q)Z~t
zO$KHyiIoAYaoU&+SgAyf`~eYc=hmklSy!hj3~xV`;kbc)a%B!xk5aA7;i=;`G1>eg
zuKvKa at n?w5V9({r@?N8!u5;}D<gKra8QSXTbpzm)kN_VcU2vVw;>O1Nz_uWD{m#lF
z?IJn|yai%ty<Z`?<_zRiRgJQc^9=GxKGfzbTW~sl7+4PF_%q3{PjT9?CJul+O?+v2
zP=F^t46)UhqJL-6v3LAAmgVNPspi6r0FuXgswpGTZOvH1(_NBa|A*#>GfX_)WeGQy
zj=zI(Ftb*f&CAC9b28qzbt=q4{oM8LCB&(^7QwD00 at vGORvGME+i8p8@4(+k#X8`C
zYdP?T2R%z?8R%OBp^1z at S~Nd{{pQ#-v_Y&UaBLc1IW`SB7^el at fczfy^pBS_D$G|n
z7hU%<`rYP?0oOC=Gi$xNL_&>xnnfAN`#D2vZc~MeOjx(Y(sLQ^`RAGX^G|~3wu{o)
zFMtEZU~d1!32cL!cVwFczIjb`hpIscn=w_TssKlV@~fPbInm$sfLDt?2h7`EXEDCj
z=St)hR~jiR{7C*-=Nwv}b+HoT`T3}#o4uh2ZnlJa`qJfpu++nP<nyUvNruZ=%Hg`;
zN5sP9A{T5SV=?fR?v*C4pB}V>aEg&O4&PTjod0;z0<`lD*Dste&6fj9%x#=UEYHAB
zMdrK=U=shcF8hDfecDqu at s-p6qwe(oQ8#R&E;kExb>N)J!1wNsw=zjm`Db5(GnR=D
z_q1~q-m}~e&O6f9D0PgB(FT at KM`?wp&DSqJ3fobI>-TuK&B$qV+2iN6!j|rHF at 7GN
zTmIa`h(R=f1OIo#4-WY6h^ia^H#1%7W)|nY8T at -#IsPA8*Ajm$E_%GNuNM1i!!+2=
zUh|rr7o{671n0?_kqV7GI2Sx8k+^Olwu`Y19)sYrFb(P)Ue{7m=UfRpjskXpg*ZNr
z<3FJMMd^O^*b>Fa4b~Xy_2OF7aP3=tM{(>P>U6A#?fn(o=dq1==HPbJFHbIk%|pIw
znZFm#`5x!Y9!iwIN%i3PH>l^2vI|@*>k-4CD?BrT+|F!iNItEzSGudQZj44=sZd71
zR9$Ic^sQD(KlL5x$TH?fzI^0MV1IN)_K`Ed&cAFgWcZOpKaODEZ~qGg+aTJs5cv{i
zR4>}x2;RhfHW~FKVvw4o@<2VVy#P2y-G*5sH*o%T)TzMnV1H(T!G0Czm*RZ2=X}H?
zAh)87dLpGPLf5QrI>d^@aRu85ECsNRs3$=^DexY+55B2^Q=gxJ|0evew4r1nz7%b6
z+kc;@e9Zp<Dc249mwHNX|H5Gto)7USu*vi at Imy6F9oWlcbDqHeTjX9jun)(*Zhsp*
zDi^rAk6Xd3Fv8V+J3}Od&fNOJJa8&p&eMWZyb67UV)d9+cn&Rj4rXWSI`T}gtybhE
zGOIbS^l2EYdtv1LQPPs at L#IOZh*!S8z(5~ZP*1BEeV79J$Mv|^qo-qE$;AIQvYj(h
z7m^<-M3m7}v+L9ybASOY|DEB&2Z!gwvn<D&Q5RUBvK4;h{o-t?{P8f~T*rFI{%pj>
zN)Y#Y#4l%j1>f3eK7WS+SBh(ZRa)SLJ*tNF#_&Pbo8ofT4(4FcZZdv&Q())Tc~Q`R
zzK*He((iifk8OU$f7^bVY=>8;s=;5Q+E(X9QQ(tTe+}KI*`7n4Xv$%luzez=D!MND
z0I}s$BK#Qq^6}e?Ujg*kEP{<&I at dEkV^oTp$U~!eO>m2K<kP<8+EX=GPVlYEKR;E2
z9CZ{h&d80si3+d3<pj_8tp^Rjt;PBtaA*a$f)1s~S}Q-(b9MA{HdDx4_#>AwM%wZ#
z@=<IV0|u}BPx=3*H|!OV_uIXP2^Z0LpS?Nnt*VZ&Vr(C`TUUhl)-i9jPv_ST?GMXw
z9K^BiP-)z2=|A*Vf&1V$O2!zTEaJvW{l^~1_!*yuTp27GU4DNU;sqt(Mp{L<jBfvi
z{S_>5WWv8}mL{%#40*-Oe9TdCmt4K<QF8BQ$oJsisjIm5mwjaW7wQnU|J|p;_Wo&y
z#EbcVjZz0phc11UMvRu>`_vM)lvV?mU&{U&|MkG_*Fd*E%(9T@>uVs-8YU+1bfwup
z3u8hH%s#jX?QJMaQC>o+ahN^NS6nrFor)v8Vs#kdmpz)MDy~c`0XLk=SZOa|%y9~1
z6~D-M5XTzQ%5bb0cAjD*a(iQ*{c7y-AU7}6p36HIqt4qNFDLxZVys0F^V$JBdTnz{
zY}~LmZNK4#wFPW{S}AUc+&5GemKj#jS!5LU6?*C8W<zIGrt<p=bM+{<k}_`8voC at 5
z8M&5goNwjn*2#cpRw5Q}{;z)0<ab{2Ma=tTe!WB%;s8C{iK`VJu2AIFlO}F$g8Xmk
zr;ZC%!_a9z<Sj!ib1!W%SLf}dgkh!4eY2%`uf(L$6(m16=LNcs?)Ww<YzMig@)1sl
z&6y&%^}_F8n$`iE^;Py%yTXvPuC3s12F9!1+Q*=;<z#4?)vXH5Ckm=4a`t&}<+=`}
zL8ictD`m;d%E|3Y{}gjkS`|IpV~1Cn=K_oF%;+=EBizDi^OSuy#9=eHsov)-eS0R_
z7WzXPaxJGJt}!dP9P8<$b0l<2H at FWOx6dZB_9S{bXBO7L2dJs`y-R_YUm9vxEJgei
zS%dPld*nZ!Tp!SPG}3gY0&(7^=dFD;s?0|H3)a5M=YQ?1eC_k^gkg&BT0+rxgHo5f
z_RUwv$IUIx8gy)Z9K0>%8Y_Dr><1>or$l0D39b}6VW|gKnn({p?tMV?8Kwa;KOUUK
zo00$XYv5IGV19Xv+A+b+ICEj&bYGp|u6L$XK4%MK_15vN<{f!E7-3jpbIUAn97bNp
zT+^{mZ%As<0_T~u5_sTHnONXo2pRh#xb*9=mf1U&B)EIuF<c{^G2$8>1(_LFqU!?6
znuV}4AX6Vx7uU`YrFW at A89CLfEE;`nc8Mchtf2S;wO3VoHDsWC_7m~e=$1}N^o90P
zo{0wUQNS0#P)c!aw~s;Ko<e-)|7L2La`Fu#@5dN at t68{kXOzxfWvsMKXY{FypgU=d
zhoB!FPAkTEfRBkjVytGu!G)|~vXS=;oUlf7N*&?U->{Lnk1`1EPRYeF<ngqA&iq8x
zu+_ljm0bW%hvcs%aiOq5T|tgwoX>bshLuXj5DGj6U3|eraxepD?KzHn9)yiW7okQh
z0PJma8A>I_3gQHCtOljYa}2&cx)#S^8zSo%5{JA*L1f_OAi~c8UHBx%M(5x!xz9g#
z05Wx|>nuN(ciJxd+JHQv&y&13o2H75{z8$EuO2xXQ(BtDFCD3KXRW*vBUS4cN`~~?
z>idk36&46pQy2r{7PI+f+^v643ar1?f8h}7U0SFBm$BmO3brH$&*-`?9%l5gFLe-J
zK>y9Q8elG(XyiX_e-(C#9Ozp{tSyw_DD<7X%U?S5YG`rb+%wz20mv6~nRrIXyvnp}
z-sQ+be77*{P4EGN+kjn6&FKP$m_9k;#g=(DbdQBSwpu;HfUlTly^5HBYu_Q2WWFv^
z?o!8hwAPXRD?aVr<n|42cE<#tr1uo`;<`fSW2S|5v{}dADK^?OeX9MxwMCG!Pb34r
zn>yE*HK(diCaofzad?K$^4>(>&EpwH<Z4~W98rs}n#d5|RD15X--W*AsQ66YI?hUD
z{w{`|87a4&@YLTgMlQ0EpX03_e6s~>Kkx>JHLX*_r*^clvM=Z1s^tA)q324KD$Wbw
zki9I*M{b7xcq{lTuhY9}cjI at ohWP=w#cS|$2vlpS+HG#$1NPif8uG1HmC4kuXzr_D
zaje(4q7FYxud!L_69jy_iC+qva9LQ>hw`xO+eO^1dMdY-l`*!-!)bqwaN3V;;+F!u
zl7(+rvZg#>CfW8p8*IB_^=nJRjOR-8R<GX;{bIq`rXa*E-?{@XNXc at +sq*vHv=wEA
z81}69R<PB}YfqKuWDOR~QU=Xq2$rlD{6If&PLTbW%S}T<$cA5}iQ8wu2Y-l@)`~np
z!FiBz*)dl2cMH1$4Y%&tZekqh?aL?~VpRq>pHQ8&95F1)++5XwNN1OfCaiy#ce-27
z7(*&cebF8jd<j*zCDl<!){KArk5 at S=@t=kNhk>82qqCSB(&Rl&gNj+onAqj#Pn83=
z3!S%ODso{Lix1LQP^T5`qr!9Qvl0h?pH&2Wass{w*2v)gv8?=>Eyc0&JpEwVETtDk
z>gDMp*~<@|(x0Y->T!)!?$+wLhzH1nKB#d8(P_j!35<U+$^XLCd{&XC|FB}hM%b*R
z2Ej#>7y=v?8~OyWEwR5Yb{s)_oLmtLJ92(6+T><Z*ijPS?HaW8`}`g9cI(l9lQsfJ
zPA=-~9ZCvu_g2Id-Av at mfDe{H&Lw}cV=x!*h}=Y{%CTliR*n(-BDwyZIL9jZnPbK0
ziERkwor&^9Pn0g`N8q%9xeSuS<|y|*0{^LX-J at np#x++~#uu)aGR~3pQF$`4fu#a#
zH+XDwZ$_#4TdxL&#OgtJ8B<K0&)u5C<LdqbTVl}C$!lJRk9s2&YFB!6yvU5hX1iyt
zdkbsbA3W=>*Kz(USdYBDLe at J*uBCMQ9K<%cZVvW)VY?dJ71(|Xr2uQ2&*@TSmsIX8
z^AE<oKF8YTTa;LTm8g^lr1F^p{~+>S*v|vEFLa`yQEb1DauD2Z at 0iPQ@2re(@oqQC
zGkp0V!G)$;!_6Hlkzeh=2nY9J<9<s}{sm<>N)Faa8S84eu{rt?Kj=`W at myJ&owrY|
zh!^Y8w?D+b<ETqvKhYJnsJ|2Sb=}n?=kdQ0$1bA$4f_|M|83p;%*b8*e-``YIOj07
z&tf|q<zm#K)*a^Rx)Mfy#Q(oxKh}D;UqYFO at _8J80drOm>hRzGWuzGQ;lDjNBA3de
zPGkM3qbtSL{Hxs9lY1G0O$YXYw3p9re+yancvtv0kbWT^kS3iyfcd;*F#p|u!d|v<
zUe`ziu9Xl_Fk&IseCN}V!-9u=sxy$EyBqic`^^#fACNCtPWj-vW75P;@vJjU6ZEx@
zk(5i1wUo}U6ukIF;%01 at d(JC%i3js at Uu1v_<y;Zp<f|ApONHDdQlg{7MzqKw^&|ZL
z3P#OW;h7Rsl32%-#jq93VI75 at ROQI@JU{tgV0L8GxbETp-?K8wxAuOCl at 0$3crCj$
z<h$~8@$%)(qVLsuulgw6l7~n?1lJ}w5OA+p at z-O!JpH)2^F?sohJ%wGaae|Y&pvQ*
z!WYmBu7sbma)jCZQRZ>4E1u&F<QeIYY_ypRe#5D-3)O&QLf@*Oz>nU3CaoGefq}d6
z;T42K3U=-lwpvaTH}<QSz#C;H{m*mW5_XwkaYTZ_KQ#_ at r-640dQ|441V=&iPw`FY
zpUo+;;_5V`*f?QxjWP#3Wt8yu8WnswaM(&?5#p|PN)u=2M;007nD at ciH8I~$tlRJo
z^~fhV*CzR7-q$ARHx^bS;%RfteVljA&J2aCIJpROFk-}V8<=bsa%2bWywIF+wc1~G
z8 at 4q(PjxrslG>FCZX at JvZPjvqf;^SESZvMVUcvsEm7FG91^I5dd9Y<Qpp6yagL`&N
zm!WPoWLyicPi=x+!1wJg=5F27tJbY76AMEjzxLcv_riXZiT?W>kr&{b7ZE=o{=bNK
z at 0TWhu?hA`bI3xYG(v3z&xUAET1DRW!2?y7T?$Hw<9vJvy+A$vSn%BCKjwEv8ew}#
zg5G!AuPIU(EEn6nYQeF6*T*oJ|Gv%(zB0%vHMqSpgXY?f6PtKOk@>O;IYuI}hBI$y
z)xs9HnD|}zUEzm=<Rp)t`4aSg;H`(t$+KlV7A@=sk3!c0GuHPJSaZM+SE_^`aWtK_
zVvYqLCuxJAqaIE?%z5xHen`G$-i`Q9=#hENix*`tnrbh?H?<n3#KF&q at 4q^&!Qf>>
zu97%ka97M at OhK{cC&7^-C;hMAV#vpj5vXTmW)z#3s_K1Ac{{@W!^Gz5jLkfKyo7$;
z at KIcB!m&O}##ZyU{d$9}Kg%E;Jh?S|ux#tI;2ZoY%OKo`XVdcC;sW&B96o$G0YR8A
z>y5o=$8q9svCGF=wz;u}P%8XB*>v+2$gp2CZYT>^p6vS`@s&SiCFb3k$jSUbZr_!>
zzs4=d`@L4~nuFL*ZsfJN*Xgug?Y2=zNxy7c1*;tUt=NA*az~`~#bKX`b<$k8ru|lK
zSbDgjpvaMnHTx^Db+$=&J^KRteb-8qvsn9(t71QFdIOLH^BhOkRJ*Q2M>1zraP?(%
zh|kfOCDNh|MTn`W$k1ZnRd;b*YSzJ+*IhF{*$KTQ4E=8!vlsn|8zCPPeiCc$Tl17U
zgui at Ep8ZG;))-hTWQPea%K0+;cj^%N5%7auCGqVMBUcCVrmes0SReardmZ76=~tcn
z9sZBSUe}dZ=*!{N|2PkRZ{#7Ls~9dv90TGT#(M43fkS{z at sl0gghQt9GihtDA|vSh
zot15fb#0nCw$6lh4t6Lb1+Ch(CP!_?n+j!y_DdsMHlz)egcpq;c2xM~gd4^WyOPw#
z;JSWUaB(F2{E>`s$gsokFV~zuxIS-9zg;t=4U-C5qOxy-hbTO|p(MP0yjqQP!ode3
zucI#V;&cm<LkYY;c;<6~-n^LZL~w37dLh@*CiBoAV=ru@!QG1Ytyq{ShTntfmC94J
ztewMB*2iOmSg&*8W3S-YhkHHtb31TCC5$$s#{7utejiiDA>Ohr60=4%CEt``zEuJH
z#vr&nPGwXV^sbcj)rmQbSv)2Cb(JKmD!HA^B at 4yuLbHm$2{9N-abiX_&bf-Xt}kL@
zV>zy;C*ryus{i6_vQFTBQ03Rr2p?mo)9;d_L~!>(3G2AIM4<l5?sYfCx+_*jpS&?F
ziv|t}aW0$rN^YEaHqR7O3M at bycjNh4tta{L&0s#jIS<XxsA}x%lj|#4A2C(1xoFYf
zH$t0CWJ?{DsP_-px&~Q=;v4W~4DvUDcX<eFyPsVP`1#IN8P%A3_BRglRqU^6AvgB;
z{IR#tmmrtM#K>_BT^2I6oe^H?XY?7@%zD*ymWg?DbR)lhXn*KY*wUx-j=(Qa>=#Fa
zE0?P~a>SO)X^QS{lZ+f<DMza5SjQ&d;#lkwmq>7H3Swk`MUJXg<mTWeERBbcMKb&b
z^r$!ZZnYE`<C`?Nd8LWTi-R`e8i^!E1N>1|suK3tI(|KPH;VHYZx at 1>J+Ceteyl35
zOU;;%|Cv9Tj}g9L*VmqWOhK@}E~JI_VRbI-5*K{M&Q1PDz`4HHc at A?(a~g8kq(<Aa
z`6IC7bwz072ACFSk<H{R;t4Y(&T|?299F at t*h9n)?2o!<rg+X<j$A<C>38~)df>>^
z+Q*&eU<dg+t<)I>4Cmucg-wY67i<bDAfpuX)0|t66O5HT05;TnG{-(9?!)n?=o5`e
zv=4XV+=P)rv7DOf+b|9c2KA&WC%DR%O9iWPcvTVmao%4L=Sa?9fRe;wKZ2Y^``ESi
zMd8&y?-dttM&Q?bEYCpJ%($*E|EjtP*YTxK;Mv%d_m~F%NPycK>3NR)1l;duU+_7h
z-s6+^^ZWCDvnKE7J9)o3llPnb$Ney-$ogC{Z2lvk3bD($M+`d%{s6u|{~$NvyCFRI
zhMgQ%>s~xpiEk5Z%_tEQO>~Z(@pa)d5)z{3bQ|%U<{@ra4s)<rQPCEcih1`{yk{fv
zJ3Ld2wYF*fZpV7JtT`FFS02$-Q?>##k|xR_*Ikj;cT80{zc(X}EwMM6mt=JEgs)2$
z2<!*U6|lFwj(e)Yz at v<7HN>Tggt*qa#~b)2de;~ibMQ{gb1tk`D!i@*7A038o;&fD
z9y};ojdk{qDqXH=@SA-fd3892>gjBqO8!ha(HBX69QJ|n3a>WsvhR=X?mFQ5Rh&ba
z`&Erf7VOjYN#Hlx;i%&Ln_p)y39nApW at U3sW80;>cFYVe>>S|3<{_2;YY)4P+^_Yh
zTi;lyGE`Oa6 at +7D_77PGf}x(cFS#eXGDX|{9#=Q=%(x%&&7=cMRymj(b0nrA at JzDa
zaTwfnRrqh1_%HTi6)vyM%FD{+Kf7G>UZS|)UL>l1M$rT>CR2iE_?mF!V$A80o4AqW
zNW=L?^6a=qg?}M=UYwte`6ZOR<Jfk5uaCVb*t at 2WornAv0XIYJ|4)Ye-uX+<Ip$7R
zC&SWM=jV5sm<PRVVr|zFCc>+OtN|fYB at BtV(z(vUUXL6PM31)YaUkX at iAVYiCmmc=
z at 4|nOoL*yB?3J(y9 at f-3h;RG3uL}Lvdiv03TG&c7=qKXwCzG#=E0)f8?cdhHo)W(k
zza57aup=UNfU9$!$2|_&OkVA<TOOjcTg>EsVjbTCT|hou;`MLx46Q`Z)1A1+9O59J
zpItkVw~cLW&MB7PJH*~gowjFzm+&QCFT2$FH+&Q1;hv8`Pv<utj)|9A4{;t9w{n`n
zIsa2k-D at s_3+}uT^eN<|1iEiiXJ5!U at TMOF-|$LT2jbZ&P8fWGMprQzYY{oF<w=Gk
zm#|K$h{$msvsE&ORYg@*5&e+EDz=&~v9tl_X2J2wh|%IY%t=S$MuB4^$8uc at aO?<h
zXO$rzVjo#+2#Z_s-w-!S<T&<8q2H=eSAhTffSE}nm~euTL#aZ!0r}!#<4$fLuA;}7
z$2sGNm7McLr-hC#|L44**<&tIJW~QWitjA$wclo}w#L-mkG49UDF4|bXD*#rrSc+j
z*wu!Y5ksItxeBEk<!Y1%5L>Vh+gxlHv-cTZVSi=#JN`$4Zy^@tdQBK&F_Yr1d)Lt$
zz<DQS5^PNBM<u(m^bt)s9>qRkh!EY~W<_shQg?IWY==pkaxT$FVgJ+FUk<DIy_DEI
z9k1K%sh{~BD9b{<fAa0jm*T6`R?c|-8c}j8Hz*eUbztIMwppnb<OmhnsML2zECkAb
z;60>xk2Rk6STj>c58~c`=LyG4(dLb*@7YwT?<2Mh+)R6`vHc;+N|dP)SQl(LfV$kg
zKJ2Tpji;ud{s%brG2SZ?Wjc93l>Z`e751FH$MJrjMP17i!7pT_cj4R(uO{$|V8c|U
zei~otdCzz7o;4Hi3ELRjwM&?z?-PisSUafi4X at BA3|q>w{H`)K@{WFGuCF%#Gk&Wf
zZ7dP;YrwA!xZ8G;@6Gjn&oFS^NEgO00*}=t^ntyu_56A8$=}0vzBo5F)p9~LINz{z
zR_B=73Jh-j{o4YwVlZckvyzx!{k*=Mxsq0lFTq?~B~7wi4xU?kf-b$IM@&pQ!G|`!
z?=7%zAbm;`mc&?|KYyI5;j5y3I$@_x2JUTq at 7SBr<Hi0GVp9?C!&-shfrOkUaI&<|
z>;=crsV-Iik~dCR2JH>r$NzpKy1R3)`(fG|aU^cQz2ss8)kr@}Wg<S}NLMNHu_-ho
zEG5BfM(E-O7X4%w4^34m8$M^{<S$9QjPo`|v?9hgv#Zkj!UE)uC|2gRT~t!XHqW-K
z=&Atrd1CzTe`}v7b`8%##^*%7i0HdBN9>K_L^}2GL8@@3%zk{GR8 at g7!aMxV3U{yR
z)8Zjhm>U0I9cl?Za`+!B6up_ioUZz8GyY3zs#i$*D)Iki)UE%FhK`#{$-2s*Bdc&7
zm00U_F-rJFeUvodE%8d#ZP{YvfxMq}EH5d}7=7V-0=X`5Z6A8~**_rn_HMQFY~_4q
zl<=Dj_w7IquP#bA`UBrOl&z|Nz^#%mH$}?be*>4kVZ|lh$Y6n^GP143AU+E&;Jdt$
ziv`XS)fddXz|XOsu6K!cSN`fx;+^QUJNgt+e!yGDXo0<-mUIVlw`M<MIhiySzQD)@
zT00lq96IshIj|8(<=cxVvB|Xrn+!bqN#-ck&6s><Ns~9uP1*|%g-Bdy2-opz7{tEi
zDHgo%{|lQeLoAL5n+(ih?gTa&Yh~acNZc)Woo<T{14G%$c@*E{Tuj|&_pf at yispM=
zfez6@<d17`g1b?$tLH3uSh2qRY*Cw_tDpMhv%d`Whcbu%y5hs$&$~MCO&%E<2+cbD
z)Qb7NwOG?4K9s3e8hF){-#<%Zyb}{*;+<O!TxCj_<8a)@JgMOB%zq)yW0gk!;H!bf
zJl#d%=s<{>_Y=L?T>y?(9r|n%c?Mu`4$V=YHFe3UPgwtlu5XWPy59d!D+)e^dCOyH
zhKQteVG at z2V;M#U6A2MfKH?P13{KHW$dgLK#zprL#>O at nW5BLl#=rqX<sx1((^ZNB
z2A_nD38ZEx1f-<P at A)3s>74KR{jtaE{kgsO`MfW$_v`(-JYNd%pwJ%UY%wSoIk{w1
zN_4JD3;WuZWd(FCn;6b#KY*O7Row`lCnzPc!eIor75<c*mb+ebG-4+8)RCpqGe&mg
zVBHKkqjxWI)dK&h0>_7E<S}|D{%17mmNKibpD&A6mZ*_;@qAZqmMJ{H#}E#jpl{Bo
zv}nuoF^HR{1$Vuc%;|K%-{ZD#{w<yC-G{%z9(G6&mwMb!ZO?Zpd`RP!PZ_du&z4cJ
z8$!3#8xw$-HYxUN9zx)vI5Aj#u_to)KJF|(ym2<UE^=W0x*(2s-=+ZQ at S9aO*hEvF
zljl4&Gavb>WlaWA6cwvf at -#x^Z$^AZxknyl at 5&CjVKrlK{~!;!WXFBTb%K)%UBwG@
z`!AlGE*%VxxeYyk?E(F!+vAI5tEfugIjFthCl9?^q-@~f3#hANW5MZ0U>R5W&3o9)
zazo^-S=OY;yU?bTJ!Em(3$A`$;8%)kp&_|6uDKr!ehT>UkOOIhE at 5=XH+b*hLzxf#
z*E9TH1C<@z>b#!v=j$SGDmE?l;RgJ-88HqG(bBBb1*ue~qBJY>uP-{PMGr8s?y17F
zX;BXwd~>bv!*Df6OGC<7bB|G!N0oZO7o#gJORLCbGC4P%yh;~7`7Et`61?)sUunf}
zOO`J9+4t*4rt<k2PpW8f&}Px$@4ldab4U4ieGkqrDY{$!T(LXub;mRAc-9?taPtRq
ztcI|#k|y_jRb!5TD)pVd<pv$k7>h?A4t-h-zVrEK!#T-RY=MxQ+3n)m$hq-m;j88t
zCG5ZJ=j8RN5XV-I`gMib(~dF1q}T$BvW+=75?jzB0xq$uj6RF_wc-#V&-Sxt?+z*(
zap{MYhhEh at CKf-9?Dp!&c0o4UrMzngwNepxIa3)Y&@D^tsd+m03nSv?S1JZBXD;6z
z+W{=na_JR{oO{iAE~#hzCQXKR)7w4McuCwOUI}E%;x7+ij#aaK at Se5A@7z^~pWau#
zz|J<$^@O}K#3ub^8yoVMA@<ED#q8xLiS3>P`DaR(%42$0(UWa#%aduW9`QH21!?Ty
zDos~6PtL~MKbV~BsbOol-)9qyk~w6pvK1;`r!sl<qCQ_KwXI7@;_zHKY!cPhm4_HS
zV3>LvM1mL@#y;kQ_ff8#MZVmw5;`yD7_+dTz6o|r*TyGu->jp}2i5NKgNHXYa2u>L
znHQpFUg++0tx#m&-^SD>#VWD|ZQTaM5AUE3Ax<V+;mFTa)RkpQJ1Jen9>J=Ji#>)&
z(8!AdM_R0#I at aPko!uRN`<s-IIpOB-&iFH~5$wkyqv7W3_xWds7+LdyMRDG=rgwKp
zW4`T4<cdT4gv_<GZ`QrN^)0kZOYO|J-!(_TpXwt~DdwTB8aO;od6l%mz&ZFNd&U75
zW)t!-lAMycphY#vv5q*RTHuB54w>3(Zq>18s49H3NqJUi at T<Oj9dkT{a}Mp3Ej)$%
zE|nez+bn|V+Y4XH{j<QA4g<R&mobDtV2k!k<1S<~g;VJkN>B2V9Ic at SW0Z*VxLkPe
zUBG)sA}8>1p)csCj4w$XI%OVXe$8~#=&$5<{w{;<vgA+e<vYw07sM4N=6PIVm5NYn
zKV|9?P$zpYQ-<g|)lKBf3+-}HClmA1GC(tc0s4vebxOi2xfgpou<tJnF$Wggz7Kx@
zwz6~L{_w7Fe%CccruRvVhZKcCnV}g){!BBQf|z^_)~J>ut>T4gZHbo`Okt1WcO1WC
zR2{3N1Z*KCW7XW+bz)xa`gpEn!}NRaiJVIYjIn3nV}CsQt=`>zMqr`jWW6)(HGi?K
z5WdAZ<ej?=ROsrz+_cm3KJ{u^wHN0yUdtY>hQH)W_^M~3tv~TroHHoXDH&|Rsfsg9
z=JG&CX>|Q)HSn@>BJu_NNby`Tn^Nn({S`8%5tp4u8C<@=*f?fB*mapY8QC5x=q)1O
zmj9Uo`8t=+DN5)%O=T=A65r>&yu|Od=<Di`^YAPx5r6FcNy$G8rDNrhqt{O<Ypt4M
zz3b%y=~-(*`sz02`_qidxG&#O)}GcZ?+(>3sJQMO_HCc#wUN=U!+UeJ%f$*rCffEY
z0x7G)n`tXNJk40xyy%U>Qjw9)4`0^1yQgubVkBqn5$@r#62Zddvjy4i``$3p1bb<1
zNbP=eXl<{IJJqM;yQ%9IFm>ym_->v5+db-+q8#f;do1coJFLuDAXDUvu0$pk5sYim
zxdAHl-WrbBFYLh(1AAw3Ua!ZzKJ1*=ZC%P~|6rRDFPcYjx+K%4v-+S|pG#QV4g(jm
z9p!dz11pQEjXCya<!Un-+uTN;Dx~|YnY*5s7n8=@4Lv=<)c~&~{Bq;W`a^{((J_=O
zb~J`u8#afe|872|SC-~$BZs(0!lgYrlr_$>Opto+aq81^a%%tA4b-)-GpWI^k)Qg4
zfx37hlWM~{Dw4zxU3GuaiMdqDo4qP_ at eMMr#!HpDrpm6*sZRvDbWK+$73#gN^CzC1
z$c>2CLmo}U$c6&@2C{=tK;$`+D-%AreB_UviFvGMlQD*Y&()O*%$6b&uayPdzO3?a
zIsC+0T#-}4%@AFPT(-p}rS3%~z({s0V`LA1<SwT*UBQqcqQ*{7$maIjF&)!5bT!s6
z4R=Ri(djf`gnla$P+H6*qhH#%SJzTtzWf58*ZBB;<hQ_F=2kN{=x6?ZZ%#00o|i(t
z`qR8k%p-k8<|LV)ym}V7bNyJ<caB^8yOiKxhfBJyh47=z_y)vYZfzO;4S9izOKOw0
zEpM-##;b>Y*V1|o{bFL%!KdmGe~6eyWd`3M%1Dn@>N6Lwk^Z~QCh%#;Rzbi288GXF
z8|U2hguWt<bB3<cCEh9ne&Te<Mt1~pqGCTacio_j;B8IOyf0m?&X-ppcL8#2Y{0m&
z5IJZl7P-sQeWkbW(7<T~9-+Fc<fl@|IBLi^AJLF;VqVDM2a9s9ZrUgGz2L at _()$iF
zG2b4f=)a9Gmd$Xx3Ouamkl&?Z(+Zm}_|(2xMWe at GUmwzWd4Q{?`9*Q=CBGP=FOC*Z
zo@=AyieiGRZt4Ah!hdAmT at o!FEq;E%PrhH at U@E^BGWxF(SM=Ot_D3WMwC=fF$O?Jx
zEwlu3g6b#Z^CfpHfCCIaWs$mIbWSF7I4Rb<=71r#<ISL6^TBe3?A6SI`=(_U%zCwL
z(?d62SXK>;@hUel=E8wiS;%m{ndipF(?4#x^<CMrTFj%8^i at hr%`xTX1dU?-YUkRv
z>66gLGuk&VBZqcGSMioc<Z77CHuV{lo<7Kv!aq-Bgpvmz4pmI8$z1pIcL%elGTJ3`
zQoRd%cWKr|^}M~MzEBICsZPiM<@AIMfcRY38sGc{n7`n2$ynb)77VeM7nrf`Pw7%V
z0bCi6wk{Rc`<4aUSUuK%-Gb at tV9yE2rJwkjLT1pgd-2HoDqY(!A3VDXsDA)U0rJ9d
zw=e at T=WNn%A at TdoZs<2_nL=gF-1J$GdQ%ru$C$AP&PF>;4`G1a1vyAC;9SFz7vQlH
z?u#F3xOWnz+#@_`i2Q=Nr&2jZBU7qdwUNg|<X6n_W!xQ7w|gL5f<4>X$RpQJ`<wBe
z%^^Ca8M29<*7V#8Ve)OxZ&E{+!8bv6X~8uezHbnE`1^7HCD9==?!3m~(+6BZZ&S}N
z_ttUxHd(`aPXGH`MF$|q5Pr9fZJFeG1^8wKz90F&7JmwUkS${s?Q=4t+Cv04%_026
z0s1z^F6P%rPGkr9#)G8=vZgD{758rJ%MLwO#1-%FOFOSbETqErP^P<z9CI)4l?o0j
zY;!UdnPqL at ZJ$QM)`$1Sdy{vDymlG=bdh`~WDy<upb6ig0Dmq?RMS5Oa~2g&@`WQk
ze`7U>{{){S{O%sFQ|iY5kP#;EUVx*uOQC^}h9(2Jey~3+bne%Y^A7S!ZIm3?hTEZk
zNrmk)b8I2}@)Xc5oB+mxaLMC$5pzuTyNJn?y9%*(=0a|>NM!Hnca_!VBE~~=4A{tQ
z8&mJZ-<1y=ofscDF42!_c=FL;=YAddD|-;z>X&{Ru^2(I9p`9Ib`x~$A;w(#Dm|Tj
zjbKk~{b{e^u9ohBz2k(fj(L%K1O8CzZZYoLM(`-!Ex~^uL4J{%Egj$WS$DXFUwE9V
zKrSZeI9)C1%Qx{}PjUXLsNAKs)gk_%9QUT;mxdo7KLJll+u8Y|(+uLg at jbwwaAGa}
zffe-ptRT(NzhGPg>zQewevrs^wm?r)x<r0^HhJ%7I-T{FNn}x#?x|=`l7C<=){A|j
zYl;p*X84Aip3Cw|ZhD`D9JB{}N-^Z|J<tIpBt8h4BnbQ2>&q074Q13}<Wp25FHf1@
ziRg8`$oJ&L$1sTy<I<yZ#*dqZ3VG7bpLyaIqt9;Q*Npy{)uM97Rhi+#lZhOX8LoAR
zrQ~v&!ACowkB`4^Gc9RVEs+klVjqhbl@=9zq2(l&j};Id4a4Wj;j>$6RO~8--(U7z
zjZ?pw4xG^attvVXzJ2i{YCL-eYvcV(=5;!Hq7WlYxta(zpr?|=^I=cQxHc}GPBnKa
z at A{xzvvelPio4z{;}*Acj%zc^ZBcbG)SK at dz3YYRb;>(ba!CDMPn0W`&UgJ5YuDeq
zRMY0M&C?#ie0zp1o3;k~%Vu`|8GXqpWR at k|lkBRVGFFLLV3}JvEp2)Z`}fV2EK{A(
zg*~vM>1p(J0<Ir}Zu^(6gYadwx(a-Ye$pZDnGQGz#}QYch2NYuJdeBV>_50_UJ=fV
z#|@%^3{AKkaZ;t at W!7Q%)zxw}H#xYL7p_?(;~s$@q)>F{1&wk at a>Ob?uDuN8RXU9E
zKg_7tx_Zo_B|qtvi>Dk>9;Qk|t`@&ytz#;bho_ZV{h4y*i&KukFS`=wYLsSj-6NgO
z2;;ZE!~OhnzT%_A8y=t0>D)7Hz9Js=H7NPhO4qt_%~w-B>giM_EyN5epjv1#DF3e3
zI+HPlv=lU29f)V}LfnEsd^2Y<hpoF9Gv2K+<yYKy$Ye$NXv*&>=a|l+d_3jnpVVQu
zxwX+8oI7y09Os(7;g5|rY4P?LuLv>WeEr?ZFb!AJ`wzu!ye}WuQqi7AJPObcA)*^h
z9+T#Bg+}gG9B&)ybGb4W>;t$uq62$+PLL)`h<E`x?4?ef(zIppKQ|J70$o}?#xHc}
zl)=eU-oTg{r4+t$x`pQ3w|b-!9C`5LM|+~+7q$vH1&+*=5B&o;HK*8WM!!`0bEza@
z)pzcNtwtWOdXO(1x-9zv=&XhW8QI9C!Fak{X7q@$zXqMlG}y+r`Serw!yXftk}<wC
z<^|K?l+T4Hl!xaSl~O7bcp-YkW at WxFq{?V9HAqXi3!{s;aTkhUM<VBP$9=osLf_?k
z7=7p9xM=)or4r at GQ7#x?0)LPy-?=Ckjz5ob?b2D}&#<Y?VU*46VWy7rCXde+a%&^R
zcNgP)Lx>n{I-R<Ln3Xa3%Aci+$9-_`5#J|JhhTge$`;rk?t(Vr{$nVQqud1g6X;RU
zpG7jnIutU$g&Y=Xl^N5j!&KvoaIG2lw>o2uQkmn-10!!E*60W=jD8Whjh^>?6!ly1
zO*a(!rH_nz!{^~JlgbEqSDTJL?ed%7^AB{|5)RTw=w{NFKbfD)`n at hq&(Wpnml#^*
zjE`(LrL#_ at e62I6r&%Fm=%3lNvR}~j8sd62gE^5GajvpIvgvi43r4vbG*r15xw*uF
za|O1*mfh8e2QCRbCb)(1n;lS}@Gj^<&>aCUBy0=*kPUFfyo9d{(IHG5H!AxdH~5wm
zwJ67g29Xl`<U7DD$Ybi21IYOT{oqnnt48tR%nFRDI^P9OKY~$FE~VnsM}#7_xVHNk
z{A8L&t9|E>*DNjMPF1SLtG2wredrtUc!koBGWaUE4|R*jYdQ7fzP=?Gd#5n=z99Nf
z_c%87XRs1i+45Z>X}tq at Z`s^t at FX(tz|%lg=4sZwt|qI8YonERt$h1$IA36K1HKgB
z%D9%h%RTmWmEb-F&MWR3;$9}-jykxYS)lvp&SR6CMlQTe<x1kG$`Sw2XjQt_F$`js
z6it7X$PzBz!(+m=<G5BKduZg5gbS!Qm98T54|A`I-PZJ*X9w)U0b}cYuE6)8rbUHV
zn5Do2Nn0`tekd7?Rw9e|2{A8xI<NKDr=`Qy^IB@)zwmIndkJhFd{z4l3ptPZc6V$m
zd<u56a;Dy?f0embdSqc;n2)w8v~Pv~8T^Vx-$6bn`FR<-7yG;9o^?La|Djv1`a`#T
zBC?j={wLkC%;rset#~7L--)>@dWzG^T%%#fbH-%LHtd320o*KWCFdgEZ4dTJhLRs(
z!(B-7()b~N1#Fj&`4-zbJby}%k@|3=gt-R)m^$7F)~Y?Cg)WypV8=urCSW36F8q_t
z5PI${S1109_@(1N^nQqO*<^q{Y>!>+GaL5TWKrMlIr>Gr9~1TQELu;*Raf%b^|s_r
zeZOCu2cOLXugSzO&6yhn?=)d|gx_>2d&_pt<-)Wf`YTsEy`0#w=Nz1{%XY%g1 at RLy
z_{f)vwC_WQaL*o_mPPEb5l8OXV>vovkBuK-#SFpJsY{f=hZXrx=ni0K%huhdJBE*2
z-Qeq}fG?xDCSMY-S>^$JId;Z*J;8-$XNXjYaaxM!raGT%CB8T7<j6}@%gQOjH?$k$
zJszbACgp;mD!LMWA5L2&!RishW-p9HJ!&?mMlO;0T!vj3<HW6uCljT^hehLQ>in75
za0R!=w!{8)n%FCek2&mV at B57kuZByrD*bka#?n&6=FDMIc*)rN#RO^iLDt$y8=Hn*
z`(;`1_x?jYQuZx}{Ba}v<YV0b`B~Y<PhnRJ9t%<q%;CrQi?sP~FuFDYqxCx3v+1Rd
zzS`xAzAE?B>(&05CE9cHq}VR}Ug~hfbQzLjA5*M8`F7G2H7otDZ`ro%)yv+UYd{YB
z<d-`8bjyG4Gn`X18uwtu>2tUjzUTtHHy`~`rTfTsiWgO)jaJ!SFN|ljbUfboBfRg8
zKfmu+Wx?0{hqgH1cfv2<{huQ3{9^9ORfvhnAE5MYnV4e<J2Ko8 at eL`&uX4hM!Xud7
z?+|;O&D%o)`$Rd$kO*!6_WwBd5zckMk1sk%^J63I<A*5?d+c;7=HdYlp=stmJ=b<g
zY<g at TaNXJv^W~J8Tf!w<pPRryz<oJ05pPA8Su2%d#zK4-eWEy=-!1SZ&ug-xzciqG
zJXGGggkUQ$ahpDb+(f9=1Mz&fwiDk-TtDi(eqc23cn<tN;4j~lG?BNbDarYa%C*%8
zzOM<Z-q*1C0ieX+r0GNacJ<>KV6i at 5Qg~+swr&gLNE2PvgjkT6ai0fZr<Vm(#UJV%
z>{m7(b-9RgPUqlYLD|4e{QvbVe7}_VF2J|q1LCue*l)z_lDRWF+_Y)FSeA$XAi3=(
zd|f8))g^q81;3Vw^FFgsr^V at G*heRu3^Db$%IIjvap)b!pm&(Td4kwv9xd<4ny>Mc
z_n16$dulxMdn!C-Jw~)&5oC-CcjW5r5)YN{R+~!T!(!q<+rVa6jcfxW4V!YVjF!@7
zTHk}17*G|7se#{RCFYF4!wl?2#A8!e at tg&+cT>s@;80{zM|XRfdZ7QQ^GnBl2k at N9
zwvLe_PH_cz76bV|T|dvg&?AjKfa?r?Lj1@)tjF&NehsD~)CqqohG0@<rTBK*E+EDQ
zI;2wp{dUIhfc<`N<!S6WXxK4(u0uXQ>v73j_rbY<Z{sai!Il=pqOHrhn&OCPT%<Aq
zuXCirx|q^A@%WTMn*OJ)>$kM03rI{D at Tu1zeydU<d;L??^F2 at 2lZHO3dS(vEKOl-*
zWi(w&%NVIhIMcMkcMisKm#8M;jHu5q0+<FJ5nr%x_q+zbygpvBZHJTQ+jh8zi?lC3
zI2M$a?Lzi7nbD#i=))dB4kVOSD#U#{a}V(s>m&Fb<q`b$(FlGgkpXT2|G`jGovenR
zb1Cd?g?eeUUUY4>hWK1D^=OkCuPTgr;;&T*dI&TFR0Nt{L)z at H(^okY=SbV8q3szO
zv6!UaaL$Z#IXFJpQ$qZkUY~+<2le9p<$5`Mf%EYnjmcV^E7Z%-_O*T=Pd>-TbIJp;
z`;DN5keQJW8226nt#dz6Q<H4K`>OH2hfs%%If^<oG3k04%Ggs<m7tlRMn+DRquwlx
ztxSv~CuTKl0^ib6(A&*LULNQpPxd0V{z-!Kg?0Ez%FNz8tqv~gG15}R-Iky~NgVRr
zj8Yepw*dQgk1xkg(#ftG)+7{2WFOQb7717dW3Q3ea*y{YK0AVU9px at uhZq)i7{`O$
z8R11JU!%lyt?Jh_i<>dc;;QFuh~W3;LUzw*wz7w*c-UL}tc^?=$_bomd^7A?e%~TK
z?Vvp{L}goT6*3hJumJHrLf&Qg!6-Uy*1L at P+!Kf+TgpJ*kN9i57<vpNF#V1;IXpWV
zPfwNoOP`NL#OFC{u|7!CYjo-!9!l%KpTx%bVm}PODN{3ip0<&)Ukbjp#{K}-G6knv
z)Z+Ioj(<gb<okWl6WIfKeA{Z^-W>DD9X?*tK}EqQWzqISw1$nVdl}E1k1lfh3|=67
z4>2dubJzpPdA|?IzIeor+ at J8z5%t4P*#sX$JNv8sOXv(NB8xyHJL2|*S0DJ^ZtyfE
z=*RZmgYrn?Pegd+>sVV6OVbn#iu`*`p?=o`)dHJ+F4|@#=8vKU_5s*Wh+J<`I{lGQ
z&mr7%i}-Y)zISna5OfFV0nlymC(1^dX|j7}4cXld$lszxJnX^YSMkn$oRzkDsH>LA
zq=ZZ%a<oqPA@=f;f$fU_Kzj-CZqR!G8wOaEUbW|SUah44ZAT%SUZoX;Z%bda4p7hI
z_bgA at Wao8@PQef0OCP_8?n@=mS(xl!Y>dbM%S1N!9khDUyU+t!A})0l+s}(K+%y~G
z&zHBz+%%lsh~XtZj(@@LiHUmgze{BKBS%4>1Fa`{JG>W<J;caIqF2cK%7QCymBROX
z{sixW{PaBhV at 2rC3h)^fzPrFF&sVv_kDtgO_=Xz1cMDyBpE9DmH*Z`WqO$vWrQ(^N
zt!2J)MJ2~N3=Br<0`Aw5V?QhSjLNmzS-zwq?NS4Nfc`rW>*s6V&AS|-StMyPkTyhY
zq#*&Zk1khHUzKeo#_Oev&^NPJ5py-MS5>necs3j7YCsQxR)dPrC&cF~2Xg{)I{yD_
z58zj`b*Q at -=fUsUG8+BpjK4HG_q_*1e5R0TMxWilI{O<7KUvJ5%$Y5Cj*RDBeatg*
z#9(}=2wn4c)M0*KjeM)W$Ydi^6FNmTp5H=We<-|<{m}j;{_ni?22&HAWBYvjAw?)`
z{i|_Ywf&JEJ?vsl5}DuMJrq43^9s<9- at -<Jh>UC4gO!NG^$R`>-$DoYjV4AZ6mY&r
zKg<B{fZb;Q9VQ6#ZXx(-22XZf3;xy at Cgf@cr=yQ^z!Sg2T$T0!FABM5;TwT=MqC`O
z9R!cf7F`2xYjL at P^$l1!^qCCpZk@<R_#O5vX8NpXfEGG=_y}@8jS~GzFUKxI{Lmoo
zsdnD;l?bSZRGqVYPGm><2+C?U8_$o6Y~bI9m;&UZJ~eF_3!PK%6sBxXwMgy7w?(*g
z7!`DL=h*Ag=(oPfau~K)hSrdrmnHpfIezz#e$JD_7TKR4wdQ-L-{;MZ at r>2)U!8rJ
z2bCcyMZwB}8W)t|D@}Z`k>9gR2pe`#RHi at tOCbj%|0Uv7I&UHW+9kFZSZ$v%8OSwe
z?jC`TH;J3KMJ(idiB<61>g+>K1?&Z8WN(bGSw}G8k+-CFJUOD)%8lq)6cW85w!Lpp
zm)s4$RIaPiWRHm93jz!px2wQ1i(;PwUR4}5*Asc+*!IrbXlr9)9k13S>b!x;rLMSK
zq}AUjI|mc%I_(1Rm-p+!YcC_tuKSuu&pS3(-96%rFH!RbOm at x&y`9MJ+<EAC5|<kn
zndMmk{~zqpqPh0RNE}apUh5#%V#rfRKXLk<{yugJekNL8O7J%H|62HIlma^gxg%O%
ziasJhj3#d?t3u4EIBPx1%UBD^<(38P|3Bi|`xB!uj#KoKq_<Ir7`cs$5o1(F*7bnq
z#NYDelDNIIqj|xPv1#7A#A#Vuqv30<OCY-Bq*yu+_uTSMPn_0igCFuskx}?B#ZVdI
zlnlu_TuaN(^=#|3MX$pDW{8Y9uOsJowulB+mv!1!Yf(0f2Anb)V*7oPi3|$7Aqk1$
z!Mbop1lw#xWqZNo at yVeaRU@St{AQz_cc(Lx>_vf_f7?SmoXH#M5#k*jSUXG}D)6ZE
zz?zQ{YxMRHJynARhH6PdeYShi<hipw2Crh#3HL&LQwL<Ebt3ITA?_tM>~rD#&s at MS
zM+5)$u>!tvh%F*G5i?cy-U%2+-8~Iysww3v2?d)Wb%)my&Tp6Xl&7g4IDGG%=drMC
zRz~8HNc>Tt=m7i~mr6TRvDPFgWP5>WQI-Jt*>R0NnpraXXdlV#Hd at yjhrAZ6Vj5tx
z)ZyKhn(e&NfbVx6Q{7!|arDs*S*Mj}A3D{0c4YIExPYpi$AH5)T2ua%C1ly}(jkN5
zMJkg{62&dw?5NuR!#MO#c~xOu_`ZOw?Z63&&fHxz!~NYljo&vt^;k~>p<mL&R`9uG
z>xSJf%|ixnHSP)CWTt@`5Ox*MO~<{~u-frMfu`M?Nz8%wXP<2#<8T(@ugVgT+t~RX
zXm>l-YrzV+!{m_(-(m*uZUpv7WnfwwgM6VUBJ-j`;Eyf4gLQqh#vSYFzpsl<;az&&
zvHmO)1)zSi&uO)}P~N(oT;zS at lDuz|<<N<8Vg$yCCE&}%780+BeVc2*w>vj=-so4h
zBCpiYfXh|*ijnhI$+ at FB(23k|xk~oX*kjA7<2+%DZkG<ckjVC`aLuJrZHZ^TNVUs2
zREPb*G5qTBYr&6?A8g;$OV&(g0KaPBK_adLbqAnLc<`q$A#H=W&62UHq#b4|u#Xe8
zst!W0gX1F7j^4>mth!U^>!275zA5=uDV at Y@U6vQI>?Y*s?&o`qX^;9M56#F6i0?=H
z9{nV0chRP&G6Eh+YzdgR^H^|4_lqV;%G)xpFc<nC$k|q?B=Yw^q9f^cM}L}WDUru!
z!mmHoKPRHlO0Lbjb=ki-IG3FjA?YUnam|zq{$b~AjVL@%u1}9B94B-JuHA_!{GF5^
zL4AiERcWRrq`v3V^iPAj-2oPMRDEt8hdlcmx$of!$*-W at mw*)=_fE|A+4)k?4clkg
zqti^Q$g`{PE;s!fA_@!0{Sm0Q%~6qN3MJQ;r<p>W6m_Sknbwl>6KVP|P`75!tPte;
zRxRtVYek$jp7o9>6p}iUP{&zEO`0i)-2Y6Po+kI}Qpynb5KaC!ft=ryrjI9dqw{=(
zJ=#gHOj4ssj5biMR at -L`7DqI5wmRFSFU5d5+U?PFft}>jevQ{L!FM;ricZsWI<FDF
zJ9+N_XRGs at zuo>2{_{a!HD_zxzXprfg>Gj9EBO16OHxYJ(=xkY`$mk5N>hG{9c3Ej
zj(hie>o%?r(CrK}L9Zwma<+yD#wWh_JDyC{xBLjOp#r(J!?OFOh-*Pc`Yf&c#Cu-j
zY|T)o4Bjg37qs?6Hhb3j-d9a>o;gI*i#Y7WZ|%|0ziL?la(UO|J at W0ZqO1naRv>wA
zj(1>1+5z&NK~a_ibq{g2PX6ETfBL at x@_(YrsCKS^Jw0Ryb0Pf^ke;~I*;a8|q6lB&
zMzML0 at 0IHws$}vgZ6xYz*y>-lwS?BOxdM!d9czFsqS;kMBZnO?h>h=g9phUjiT~$*
zv}G;g_%{Fa*PcUZkG?EoKc>{H)fC1w>Ue|U%RZ)zz&fo_rcZ;+f5+~g16^@mKvH4{
zVl(n0Lc7wOWv$9WVl-MEaZ{k<Oh7!BJiLw-gLgl~c)N6%BvHFFv|-Y;pfGt>>6#A&
zae48hzv3N8F2X~I(W!+m05DZ1css%OSnY$j%z{=;iEt!1xkHCM?^&fZWcEpH8!zzY
z at 8%XF9*}JnhQ(e#;V;P&tlC5k(?>4TME6G4W$cqq5Pt4E%ey`CB6Ms=gzA3ZR^hzd
zIt`}`V>l&Hop!)l0o~}BAR{xLzJ&2LV`6-PS8T<;zkKv`>vk%yP6OUbd_LcYpQkVW
z`z7$UZn_2QEat`BT5oCMH1BJP?%?$sFkYVLmaRhU5_{%~WmOq4+S0K0x{9Vozfg4E
zH9b_bO6FFnd(%`IUH^vWTHM#_D4dV<FLEOo7VgRDPa<a*_#+oo;85DZ%VpbT_5%F3
zKjz5sQEh8~ntr4o?{@?5b`$F>_+Q<&b#jcI!;U%!@(qVSPU6qZcKBqB#%<`?K;#dM
z<?Av5Rkpp;n&n=5n#Y<cZCcC75z=pig@)>|+1CgC6?vYKS51Cv<y?VPafCeo;I<7t
z5j at y@SXoADRJ+PQ;)se9eMNPBU4GBr?QPc5?HeFV6f#DejBDs;TF-IbrhxYqP at j0$
z1i7g765+wH(Z>2qAgAwi9LAcI?tT#Mj(u=kC*=GR=vR^7gO}H21HaX}^Z$R>M)4lt
z1E--Q?}d(hl<2PORKO*l?_Pxdthl!>hF at Z9V4vTOHEJ!%kJW1P$U~cUMr+ue6S<ur
ze^i8t?E%1usQI`!R>P`7G*^(Pkettky-gwWs37{kg~uUFT?uUcxCF7qx%PrES&t!X
z?zvLV-&Ef}A?In>1frL;Gvq(e4>fqc-0#RK{ov6<pKx9nt>>5~bPSW%%gObyrqc%O
zccEXL(BY8yPF@?Zf;yN!5_5_*_T-}Ea}9|{AP4T!1J at iFPbz(R(vuP0;}T$uo`}?R
z25ajk=7CBg*?MseVqP_pt)E`;P(gN1r+^JK>qW_S+3%hiSi^%SWvKgt)(4-&`~Eh0
zd_RtX=dqI;q4}Bc^I`Ay&tgT}pK7 at Njz93wTzafki5(Gqs{-F&gf^EhSjM&owtNg+
z=7{*L?Q6Vy){Z)6?L>^?drx%=^qd<%o?O1qQ2<O26>JvbL>Vv-^+Z33*s+I!=fJe;
ztS`D9;Z(Hf{ED%MFCjWh_#zY%ou<Kv`BjQ>2wu}<<K- at xPv_&OvS+(1$$jXjqDWwi
z1e!iB@|e<{O5)@`vN(0&k(1X{<Ql&B`dA3!IVR-BsX^=C2zP#C<<BLP_hn4p_bb{0
zHq%8iXO8oyNUrWMrL~+V9)C&_pXW*ogQ8?AQKiqE&L4UaGpCZdYrK`#5a)eHYq<L^
zw0ZpKr-%^+mgO6sN;#z?djh8n96$OR9W`7HxnX}k!NAKKt|q!BBCqXyGbrjH+JnWI
zB;^BhC&m!!+KRfW{48O$R at rEkM@f*TGY<09k)Ws_M~6_avu-}88S=|I<c+n2n^~DC
z&igXg+?y9rzjGDzmrWQyK|!&`J)moVt9*nZcnX@|=6|N<i3yH at Q`gQ6X08i;LJ_Fu
z at 3R^Qg@(aFVVMeTe+ at El-)P>^J>Yu=NxbAfl=n&!d{<!n);iB6_`c$IAbg0GjeL)5
zNx=TP9iGRQjS7w?OJvWD;oJNA$Ft-6siRvw|B*xDM?*adpcffeWu(a-H&{6%YjJKL
zuyz>eCJc){L4Jcg`1=yvGcN3a90qL~54>#Heq<TgFVQEv^_hZMA(+omsQc#8P*VR>
z=A6FEuptm^DN>*H#gSNvY>E_nE;IIg$o)4Gi)-*fal at En%zob>2MEzkaD!qSU!o0*
z;_X+NJ8lx_ZudFkCz>%fN>t4rSvG!{#)`Z$x;~=wB6t%!Lqr;{v>rA3lIVB+Nk2O0
zF=MSlf8x3o_|MM!U^jGo7WYhZ#v)6hm;WW;vz_7SFDd$4Wfvt#gETiQhH8Cgp)Y6Q
z*>LZXgkM;_k96`{)0h|dPT%PLv*JgGTL;#7ex>F`^)&F3u5<m<k)ylET9IhMUbqN*
zVu|ft&xRn)TeYI?&Uvs0Jg!YuHIt8d%tIXT7BVOCTp^?9R9cOR7VxaRK+)QHLuoEY
zCZBm5HUq?uIQLkOiqw+r`F6<XDJ~bC_!=X?*Em7&HL$m!5$od2ZI~wWCGy-Y^#8sz
znN!X^@0o?~N82vq2;uKJIzlJon+HeULAi_MD)fH9S)Q_J2JYz{@kSe6^wt2U{~X!t
z&wAN!2g#K{){%SvEBF at w88d<Hfx1J-;^rwPc>lUF<|fYjPQFvzB=6u8-U0cf*C#5X
z@~&`V&X4B|nbB|i at E!yBEyn+5;x~wWeeB}4A+laIz(4gJo)G?EN6=T?u{i9%@=#Ac
z+U15bKKo>lCi`Vk5T_Y<TNaPDZp8aZ;uZ$DoQ0mL#a02GA&F5m0Bd#!#?1{6*tiHz
z1~5XTiI($no)A1dR}ZWiYAm_LTbGfnuSnViU(+G|^C4ID&rI-f at A{;x83N!#+~^fE
zYK4qf;gK8Ix^@QmaD8|!+Xig(uVJHY7nO0=bp8k(>*tb$7f(Ae#M*;2nfkGKpZakA
zxQdAb9&R<SL4+K0lxU9>`b%q2Y|x86RV5Z*Bd!6zhWf>M-GJ*lT-%FW(Yhdw_7;3k
zj$)1+3yNJ62zne?JC&d<phTD645~J^?NuZG5!gkCs31*S<ha+UK&N6GDCTJ?;?%Ks
zUo%SbKT!<%ADlmsI2;ta>V3>#XO3k%Gx*b?Pk5H1*-A9lJah0#_M+WNe6mJQ>-zi-
zz&As`pxXO<V9VyU0iPuq*=opUt?*Gf1<duo)58qbe7r}ycY0EXNDzhg at cXPMbv|%K
zIlrI|fv%4yg>Fn?YxTPsXxhA1REn73BClHTb%Gsa#5-P at u)`%?K|FnX=OFs3jBdB@
z#TqK$G&|?N0eWt$3vis0I&7`HB(9oP*uEVs#CyYjmt+iz4NHdKKz*RP{Y`6~)82;v
zAhthe%y%rg2mHd(8c%F*lmA<f|E;C-fxANf*Ax`{z`p<dfACnujT753i5thfd||Bb
z8m%MotxSw1 at WSS`B<}5z<@4H$X7dzh2GD$R_#~9U_Wdu9nmWx)=-87wfa!p|*S%Py
z1$5m)54|%lKn>>?$iiQHk2t?a%9UJDjQ%<(B>jN*`BNKjlR=+7o5;U9hr75Ax}4>o
zAdb6_SD)eF<=TchYasK(XK&HZJqFkTOP%=JQnEkR+5g=R57*$`Y-Byhc^hd1%()?-
zS!5kYyxd5 at yd+cWd+>Q?VrJ9u4T631<yp1x!>QyY9e8>>pKInRphwBd;m1uK`f;fg
zI!sgZLF;|MjXj2W(~R|`wuF;dNA^SZh^Th#`G09i|7eHit#dBW?GAwNr at GbCw*?ti
zLKQ|EJujs8d6kyLgk>PEbG=eFr<%SzO2*bn$o-AP2co->VO-9VJjjqOn~8lxzZb`j
zy|xxU(Z&B`t=-odOAYyR!-_j*vQI$19==Z!_-^ckT#0e~xBuVIM-|YVLF`OJkbMeG
z#*|ptIt!T+ at Q%_YPkN~63fm5!`D1k at GG8Unf_wN)+NFQ75BNMV_C?I7NV9gcogdQy
z9w4;6yu}i>P#16izMsyHr#I7!+v8UU()E;%O|iDJd2UUT?ee^cl9I(CZQqqHOA~2k
z7q|TCuJmu&lz-jfFZR#gRKhr-rPwdj^{sa_ip$BqgE<M`zK57tCelrk_UMAW^N$lh
zilV;d{*I##;la}7Ne=UCJnZ>L`%JGDLYCJ%3{3yXNAAVq0?79ge+hk=g`GEA$~fFV
z?5K`<!QT{?e_ijNEAGyEhmrWp=}WAh_zaG{30;t+TOaU!Y%JrVIFr>DHlO;D4rO)G
z^%0F1-nXwneiPWZ5F=0<P!$_Hl*xl#m^T~ysg#JjM0di at B$zQC5;k-$pZ&>$-_2jp
z$2QLGV}Hl-&-l&3xf~Bkw+Oi(^rzk+`A*WZU31`9z=IrfmJ at 7$oWq5^F$KCY<k0q+
zO>1H at Oy02LZDKl@J-iOl)#Q)L?oXaU_tDQH*HS%b at LWFqb6G0WA=EG#!p7Z!`X$M{
zv4y}|vhV_!vVLQBe2HaV+^XNGKGfR>d80NaPxaXo$e9!-qkoLiw?&X|x|%7PO6LX~
z0;WXmmr;3dB6o0TnhCKFQk8}|E0j!)Bk$_&=B%>`b!MQ>{nPSjL4 at Qg@-$7<bt%e)
zvi}n at VKwB1(@SUB0u&EU%k00I9j|<`M$`Kvbt7if&S0$1jG3+afswnFK9Nf|(EWl8
z_x!tBV*BEBGZ~6hrfo|AqwURL4z1AlRYP|glyWg=3cg97l9%%U_>p>xpZ%7?kICFp
zPcTc-o`?ATE*GgXHZ%Zh8R&k{q<iz!p5u(8Xto!;pGRWm+-i^;12&q8IjgLvMkeO#
z0uC$356=0KMZnpqV{-PEFjj?Zf90+c at A~mPa=!?1o6rA`c?z4;y?J_+%u_>|Dk>?~
z<*f0FWc$z%6Zru2;PC&6*OX#@Lx#z8qc1a7dLC2load0QFP)04joHqiZgRf!8gib5
z0>h!Kn-4v8F+=#ms37Cu at q5=f-62=#0iv%2BISUvHn|dbtCPMLNs(U}f_32ek%Yg2
zZ{PF5$kV+YO|bZ!=fU?>@H?=mWHa+bE#QkgVPjqjzPQf=xEo2a<IfP=zo*=`gD1o@
zJn&d9WW at QfJ<J~ypnu7@<rCT0Zz^+*<PM>C!MC)Y3Z0t^f2?uU4>Phb21ci4 at -F8U
zfoE#i-#cxQ(4(UdjzMO<pA!yTdj)>~XYNh=k-qxhb8qYfv2g+0WR>4eA@&@?Q{YQ7
z#L<}39vx9H%(Z{iugs43O10{sSL81v*h{;In<eqZU;69 at wy|mTCFPNbzb=vwuj2%h
zIUHg at zGgH0ku_|XzJGr{Z1hJ}=^Nv%z{~<(XA<&%65s0vO1ejfyrS{NQ=Ii^Q4h%#
zAlpAmClef&h-HhE7>^vLjr1Avs-o}Qbf7l(Okf at dGv$7P1ako~JfRVVi*kj1GbO{w
zMGL;N4f;`Ca9ekCkml;|zGk)&`8$zYQ&)uXhCIHrAA$b4vFCVngX%j;!kI5Ua%GON
zt0Kfviqs^J-t2iTEkEaCjp~JuqKvD#ED&g;8a&F_-5#h5V<*+x;PeH|b*pE9Cw&hm
zfll^4!tRD_op5FV<458C4rD1ko`ar^)kjo*lPfY<bE((-JaO(r+v8+Shg}e5TyFvm
z1w96u3|a>Ikv#+Vui86cls_#cvY1MHA(!gM+E#romm>B}G2IORYt`H`_9x(y5PY5E
zL9yYg3Aqe0 at M&yo>t~Yq5)tJ1`_Qi{^s9yRtJk54epQGCh_|Kk;Rk<|Q0Fs8jggZ0
zH-en~Vnn~_(Z7TjKW=~AOW>+y$Dt1~1gpK at Ge+!H(*pK=fjUGAS*uW`-JNCJuw0JZ
zKN)3*!FL=AGt;&)-Wb8uQ!$@rUH{xazwARr8q?O*fN!ucSKUuy40Yf?uAsj^w=XAr
zjo9+M;G2*Csih64Zo21Njb19Mu3H43&D at OC6-OK@%#D79S%kXjx^5X_B2)BLb4&2O
znsa);Z}iCfNOFxvxMMyeClz%vChtrO at b0m1h`0~3H1-B#@5~g~T7iGjN8}^tw|<TH
zD8PFZ+5*U!SBMdd3_W*P9ohGdtwh}0O3ba5m|H6$53NKD+$xTz{UhXb7e@{V1zjV|
zm!bx$Htd0u<=D?1My&i7yiHg?-*!~HmlQpi_Uq%7QBoYw?o)e4L#B!f+Wf=C)3s<P
zMv;j&k>Pm at RXbgRdH(Y$19TLnyiLx18*)UEIcnpvKQb~pIpTb`0y5xRz-0#RndffE
z&u^iBK8>hcB*t2i6!5p$So^J*Z$qZg1IWQQ4oqkd`&GhIy!cMpf#B?|>dIwmSOJAS
z)5t5x0kD_Nqn_pb4eMkcrR&ZC-Ge%2hHRq;4#eUb?rU2PKWZ89|3k^M$R}_f$4VS?
z5&wB(W&tpaq}FnYY@^Qw97CV~iqp at pU_$Qqvp}!YL1cAdy4S264I>uTGOsavtg|V7
zR~}Q!L<k$hY9lnC=LD@!RxL09i&)D{VL~T(bk;t)*JClA at 6nF_bIPvxUoB#&%Xl5|
z`6=;O#A46QE))rPxr~Fe2E5}A(}umj2EJXjPFdm<l|^fUQ`r+k+GH(c?D%!BxOZV)
zO99sI_t3wXgJPdr0(?d6FUWWLO%+-di$!hLTqcy4PtS?T at F=5!ktvB^`5E+H{6YBx
z`#rLnp!b6BxP<s-IPJvoxL*%j648k|_XYR*myrp9HLUN4J#h1#^>{xQGB;>L4E+A?
z?M<M!S%tB+3gc}RjXp}dHDW+)nx+5c?0Af2^d}X_hQLQ52kTNJb&B1`1kG1rZ0x_T
z<3;t6SOGgQsL#)of0gZ?7PS83A>dc*)3jZg%=vJ!!Vvz=b?q`>?qeMxdYUlYU+na|
z(7<mY6#LvJ<b;SHO at MwS1u|<V)^rnn9M|^anyu*;Y;}FlK4RN}_k0xNKaSHpoH2n5
zMRY%+AZPz&V2|5&-Y|hRh5W9Uz?ZlJ<UkzqM=Vqp_*M$`;`$hiclu{PQ$uVh_s6%y
z+#f#`7ZoDLjNna4Sc98oV?2qiCF}mkb2E+3{hAc9i}^e$@%atz@@RyAi6El#>M_)x
zVij_h*@CIVHdm at aL~>ka<A2^HHgk4AuKTMj66u>a!aBnFmu2LAf?~5Xtp=-$o5dZm
zJoofg at Y^VbZ>GAN|796usV2G>{?Ack=Sf}!iEIh>XENoAT<HDR0Y~ptWYmUFZ1M>l
zy(yY0vN6riQXg%K&U6WW^FApC(?!t5DQdLcF%suVxx?RbR1lZJ|1W>bO3#8G9rjrU
z_*<5G=AzA&rhK%&2;Wc*dI&xqHNLa(-kGSY5tR7V5S%grs6nLJLa>&!_?eLRMBAi=
zFLW+^%jEdwqYV4cSPgO<tFcZzN*@hqPl`Z3KIroOc8ad`d+B!cGrAu*Tt>TUu+v7D
zjD at DHaJvhP*LJU#9{Ad!-YTchQNd;4tKxm~Nd3>wY0{Qt_{!YVMQWT=I>%AX{qQx$
z{W^~oblI;@B}nl;*aJUBkA>1C|3&<d&-$d8B)DJUH+4c@;0=&_v0oaGsQg at PTTkpm
zMAzc1uN*$I at prstrkiG9&wm4$oLJ*~N~7w-_~VF^NV+-}3SJgUVv<7;AJN@{vG>;b
zOrNXJF$x(4@>RFc6_B&miQ>rGQu3gi1m9h}Jjzi;OG4DY4`gkJuO%7lxzO3gF7AR|
z<{jrg_gx?C^?XK!eY7;-%h*_3fX5Z)b%kwO8|wnua4{2#v3P>Wi4%Kn8z1}NK4t^6
zhv*Lw^Id9n5kdk5KRXn({=<L;YQoR{;ANLQ0>R53fX&cK_Tlg^Zz8;m{?@)1^ZYD3
z0DY*;)DGRI#8ax5f at j1Yx;Pd at Uk=GaOlTdOaz2gltA#@o{EB=Ry({F(?*loftavx@
ztG1X7y^1_1DYU9_4!J%<%6=apa{a&gjZZRNo6fs+a9IiZ>C4p`<VDb=b6`KopV;3L
zJ$B;eGdd<?{l*oC`z-DmSbK7ZYi6o|Mfj_0B_qT6T!$KKqSMC`b9FDU+)CZ$IED>p
z{LrM1V>bM$mW-XA^rvz-{izm%Z_T&yNWa7cgfHvXGkQf{O&j!CGl8%8Y}hW<9=hm+
zLAgkvbC>gGveJ+jXtU^=azl*<>(OduW)1NxI1bE<r!YT=PnC}SiC#><uc%gf`z(eZ
z?=kel!gZ1iE#oQF?AFl at tXO12w1Ao|>9irfN6&+w5DR}yQWxskz=NHFO~<tjR3qJT
z&$kNuhvUSr$~i98kV9)`il+s#V)$0wM-e|O#F2xaJD4_?&*>?2it8YYcxUjj8)0j>
zwqJpH(VI(Y^Tk%gSu)=OdvZ1L!HVesAD&&7hjR;^xa2}c&AURkApaL~4M0b6LfDtJ
z_2I+*;vBx`c#mNVaGSc1g<nE!`jxY0kvb%a+ZG*Hq;&ZlzOYxhwjun_|MAmGB7QwV
zu^Sc!R3&Z#HaK$nxm-oxSVTYc8(Tl1<+l6w<)1YGhZcSxSpw__W5^yFzCaH2?Hb^B
z6<$uKfT?_{13Ld<I=P0-O$+DsX{Xo&yptU=MZ)|v?6XL2nqa1%H-bDV`JLA$`S|q`
z{Y&CcO`UyPEWm^pcHUh5Lk;{^M?Q?PApdHc?k@>aCjEjN?Bi{W(dTv8S+<`b`R_n$
zswU`(O3<u*7pj_+XW_qpw$QLIyXw_Nx2uk^*BGPnY=L1P^V=fMYh2qYan&n}G*v5<
zR~|F4BTV`8Gq@*}D(=b8#nfe5H8LOfS19kyGJsY+JD)mD7jWA=RNS^8G0KXOC_H0Q
z8gdO!&oh0v?}6cleGiUC?Q`MgtrY+CRLZKVK(FGe7ro=E0+c%3^Ej2qmQbhJB5t0C
z%Jvud#GYnVqo{+bAlE^wo}P|-3MSs6Q;f1=WCg23tX9JVh9!@Mi8yO%LC2mpb^aBm
zX6dY!7PK)xQFvFIFsJEl$@Y^RA3xX+{774z{dJ-(PDT>SA at L9`&`X+-C+f7F!J3MB
z;KtwkLrCo$<g<XyF*i;2 at DbP>p}(Fj`(OHNm$Qhy9SYifU2RnS4;^&nqz+oofo%z6
z#UYW!MEI;AIRuD~@~dVNleF*)tS8fqorrHU?;SwwS{mw12jzoifM$a#K~q5sK?MQ2
z4-oS#b2$Acdj at ZmMiKid;sR`n`h?2CM(8P_AD*wqx(3~J^ab)=!kWE4#{A{^eFot1
z>mxe?4+_$a`Gdughp}Hdka!vQ!cMk+l=vM%XPDtCX49*sU7r&_{T;!3E0D|feay4l
z&|`1MI<K6ordvP at dyYbuOCM~AY#cO1S_V5K8wNj*G~=1X|9l31$f at KRPyzHR9Vj;w
zUrgqX%ax#5l~UBlna7;q&B7cw5Lp{JpJ0U{_Cp;g7NiHJ39=xMO1Of^Q}(@(=_c|R
zUVY*3pZy$o;lnu6cT9`Rx5h4o>}-XH82wkI?Mf7O4s4T!U9!qXl4hCV?_3t4`G)Mj
zzWS;@G0)mS*OGpH{Q7_QD}Bkf<6ghsfX`Jw#(^`ZZ(L6SX=BXmpSR0GG)+Zy3+Ic8
zzPt&3Fsbl~C;tIH{oZMHTK_Elyu68L;olxKzlh>=E6Kk6jjcQt!ytYwZt!kt6tFqv
zBu*uv6l)3Ek-lu-i*sU}Yfsz>`8OZBwpi!8SALT at rkS`liK_-)5$$0=0ACZtqN1%3
z!$xfI`--Y=D6bS6KFY7E*w at Rog^D$0`wFUlaGn!anf9^HbMQ5W4&e+_NzR|^0RBb?
zQ-S01$zv0aYj9jWd0dC%D&(g&DYM)S=Q5C6;s|2or(h2Kju^5cCJs3~7a}KerA at Y4
z6Te<~+9p3s^dNl<@>{Hs1i#h&wExhj($!;6JcIpBZg6S$Q%?D%FGUAAr`(ha*`bIT
zpvqSp#(n78rZQgp at Zy+d!Rl at f?{UZu81wMq#Cf__<nZdl`A5g~7{7JCC4m)!tZ^eS
z!f9U>#%H1{e5gS`06hfy9%v5ePEZkO0^P=ndXA=44PPP8d)*?>5BHMiz2 at M0;;=W$
zo4n?dXNTcKvYF>~KY0%Coo{VP$OTSr$1rk`yN&u5;e7mfCF;?1A-)n+3)%!)3VIAw
z4SE#R5dBV%*{he_KYR<v8n2W1U+M5Tx!22zvV8a?xexK;PV6;VG?nT6FZfC?65x9+
z&hIUAes3Q6-bg+9UV&=jdj&-k-zzAY_+CLV`QDx)r$1FDRZeoZ;h8eX!Zn!l)sx3M
z9Gh at lHF->O(7_%|A!gNiKd~2^aeR347;#L9#m}S~CXdT;Y{7B;<Z*>xEAG#>3pU0(
z{YxqY3dG(bhgm+u#9=S{BpLU97R(>`A8cL=TOHz?z$b$sPxeXT)6`CTgpes(k_(*T
za;&)m at Bn$BT>#&nL-DXD77$(vo*>5fn`V^rlEIt)4qkLyvjKe-g_sG%?@>a~QpSZU
zWc;W;uevZzuOw2_a}siSt7uRqo2D1Y+%LIYLEXiuTNOAYklay&k5vN$;;X%C)S384
zoiV7(I9X>oD1-RrAMt$?b?X14&L3Q^ka{+69yDy`4R&tcIQTi>5M)~ioppkTPQK^*
zLHXuQ6LoIh;;a+z1^LU#4+~~utQR=tT-fpi%jiqY86w|;*T^w0NWL<X&w*U~E8;7i
zHok<?|H&)g^pwJWAQ^iTxQkeGf})Cq&VG2s*$)RqL5d9Ir-Sas$=e9lgX}-rTiuO3
zcXZxFdz*I~<;a;rLw9!Oqiq<=ap31t=&K1|&!?xbCi+Fhkfu+zFTRCgco!$zslU^P
zHKGD*L?zY;{bD)lR0L_v&pPYe_(z at ZqpqUKI!i#CnFF3 at 55!K^Dfy2&yHF?E7j=mb
z?L^M6#K5#e38>S<S!c{2b#4z-ANpXT&O`4x>tsk<^DYwqIHsSz%`BX3&t?C=bq9N+
z$^5x?hS&iU4BquvQyRa?@vi?sM)H0IfJQWS<r(dYjI+jFofG^YcK0gi;((_CKR;ln
zLT)RD{NbRJ$=Ze7qRr4N{RTgP1Rt#j?A;&85CfCP825H!9aCxTy=ky-XPm8g0(#YX
z`6A6dY-i^jDk5_T>xY`eJT~RKT)eCGJPX;|^dEKwBG=TQEi%Gghz(G*iZ?sM at sVyW
z;xvdYQ1jMDJ4mi~fgZU1S#+}zxr0J9MwPZ4d5m=AIr=tNb5`+x?0*@=FJSdYlXgC=
zN4yJvvh$G`fcP8Uo^q_|CnIY&^XxBpiYLm^N|bXa%Ig=PoQE=r<sL>^GFfg#xn#0@
z24&*UK<@EGc`~kG;}MjV6X!Q-?Jp3y4ml6hh%wXg^5BCe7a7Jgn3a-*FPgE(A(%3_
z4m%lxecJCeW%(AXDGW9)qJQLY&jbAqx+NL%0Sfhq3kr&TD;>F%B#@tEj5kjR%#!(J
z4d*nHdiKkJeV<pO0e%GR-`ER~TtoH9#ZhEh%DH9>CHvq- at D-SuW4nvIDUBpP*(23H
z*wu*qdcYk$*FZINS*SIj^-oBU&-#qEZTn|hxw~8w at zFM7|2HkndYf7YeaACCmdfoa
z<hlnwzZST at z;JVvc`0lBWet>X5A4RyYwsuByJp-wQ}l(xk_Ek3jUVpmz&@~g#Z~BA
z1`&@}aLa}|FW_9&iYqwxEArE;WUpqu{lF{B#KU#_A2|6-*C=HSekwY$-L=o)rK<6p
zege;>AqR%VaT|3%tpLs>Vp>vD9>lqK9M|^Gi;lF)9JWtOqTd27B67tF at 4nLMRn%>|
z=+=y7^0RXHvXi9?bXDK4IrVkMzV4#YC(Yrtz*hQT`E5t(^uwc_%k_ at ZIlxjy`|hVL
zr!6TaU?qs5n>z%ol_;AMaXbx?QrI32r0HI^^dZh^Y^o>r*Whncv2UIVJL%Nvuale>
zV`mY6eK*F!XzBI$*Fuldtn)NEQWkLqJz|q>%kNz6Rq=u<-Cp=MJ4}yruGwF`piBx&
z(I8$s%Jv0f&9`%2LOB{TaWU4i669i4CauIeH at R-&oN{iJ?&A>6ZZqnR{Uav**RK<j
zBA#f+cu^)jyk*|7-M^98o|@X|65Kn0y-T4!4ttk6ww<a~mbn;qugAGe%E4xFb34Ul
zTXC%+ITGhm_3xlu4||oxs;4Tg7Q}KYlOBgoG0LfbS~5J-{q>3eVR0Tf*$=~h0)Gep
zo$l`st%RMz)%gy;=V)16!#(lKEeB%J?|&or<Gyd{<kRX_#QNg+VY)S>c5DE7AXpxs
z&Occe)^)0kXGR{FBhcg3>#wC;`k&|fQTOABDX^p<HV<)YRk~PE#I4Z+;Ci2-nsu*w
z0GrBVA*-n=#v1qWL_3%ev+QcYv+<yfy-d=Y3&5%Z4Fk=_`8b at f1>Fu>4!RYzqKipd
ziTK8qps#_xw!a<tM%)@3$|)%`J%E*G>c at SDq4%h?8n9QAQAS`ZHKbXl>7vZh at W&+I
zg82Jag4Vxk(dLrxW`KLX|2kL8TISa3_QHN&OJtB<JKCn4T!-GXO84r4Sm=&_;Uzo2
z4;TxmWBCHef;jf{Fwp7+owR~6Vvj#SOC~S|_Q|5(V&B2sx at q+CQaN;9jj*jKg40-s
z at hO!a^Z0GdRp0_Hzk49oKX;gqey*8*8*@x??sLq`nz<u2-cfDQkypNR{D$M&6;~a1
zLF-m at I_`iT2E7ex27loD_ZWS6<G|U2eIeyc^g8+-hb`sxjMFP_IEwba9v#V*ISTfl
zja~;T{q*zbx9ImAxu2eN(nIWL;0xZ41E4ja>5t`~&&0SZ4-5K&*h(wHrk-mid7pTQ
zC#E}sG>%G!Ka+2gV5}L~ehRp?@T;sM@}WSBwW2jba+ANT2zJ;2l4ocL{^Z!d1c;1(
z%*l>F&B<r~G$+R==j5LMn3L<Ab27p?C*Q^V1AZfA<kXY7H#s*6Mtv;G3ee4<1izg(
zIWM>TF)vkQUh-t;hcPD}@jBsfC at f`}$nT<wy!^+UtW73!F$;4s-8mPxlevg_YIe at k
zXj~KES}M5)noSL}e6o)!+xD at T2LGhA>>>S8R!SXB&Otdxe;noG$p<i2o`pZ(-?3Mh
zQ at b#x9*LHc{CjxMmoa{x1^)ZX;B&~Ya_gTxF`m1zKlLToa=zRm#rz at nY`KnnBp6GJ
z$o;tQ1%i2$2<%*PoiQq8Ww5VN<*<2`PKR$Ougz-UwPUO!cQd&bt<pc0A_qPYnb+de
zu$5w76JI1La}({*W|dMEc&{g*gSDh&OwQvi|22<a{;zplMEKbs^Y}f?J2H>S{3Y{v
z-Q+ypf%7`d-*-Xvlk at fy9FuuZ=63=pncq7>D^l9=AIcgB=JUS&S1`9jYwRcoF~CUK
zPcY1qOouU_>ry_)eOacDF~=)Y?!&w<iqQ1tWn^X{UJ3hU0r=#jlI_>Cca@>NUZxM}
zf@^w|Qi^{rBWWG49eX#(VXkM<hDGE$Vwuq=nBUi(^Lq>I#bkbaFDPTl{C*b4>IGL=
z1yla#`JMI71Mu~6WM;jSuJNyjK1a%I<sjz-$tM<L`SPg8p&-ro|AKBwj`1JW%0xA&
zZmu}ehZue#V#wU0IL*Wk2|r$^KPj0jBIGp^Rlr7af(>9aBv0cCq2u}+^F%?68&er(
zx?b*|ZpusPM}EHn(_@@B{Y}VY+3-dYWQ^ysRz*ix!`w?naa+c6ypRZ33qSDRVxs&_
zK~m(4Ob%Yj9<Uz!`{>+-Y%akK5l-b?tm(xbK7^IHRdK$zntBDy5%80Tk<&n?6ilo3
zKIKu%zS at KJfq5u;y-KpYq;I!Gws}6*+?B8stlW>>;q5X<HGKKqJ&J3}kY at rINzmsa
z_x41NF?`R2|Fz)X^3X7_;GD8h?fzWkwM;%!?NJOpdM5nYj~1_>CBQAp?@XnmoW6XH
zlzGCw6cv{bOp<brf0GvZ2udM4?|{#@#qTT9&Q|k8JysJVb2GbKgk4(p%6Eh1#eTE|
zJ_mV2w_F;KkMb+n^#u#gq7QY5OBJMah~nU1wGP+;did=J(TJS^KdU3hDJGkq6ODdT
zK(3Qbs{qg8du;C!;G6G<e0RUk3*a$W+x&h5<-4I=EoTkFb;>Jli$Ar&ho0mGXyWEQ
zA$H~zQOCSvRr|d@;YUJn;^FV0NSW|!j$O0_vA#uig<lr=Ppd&9dv&dQq77r5kzcq2
zU3uQv{V5$zettWp-AR8)xsoARQR%p`7kV<_c}D7FbZt~T at -<b~3`EsOuUj7vUjJ5f
z<oXvJQp8nPuh2VkL91ZvKLlz5Jpft at nqHCtZ2WWAQ<v3KwQPZE^a&x6je|D-_K at kK
zN3QMEa%o?qyZly~f2t|ZZ|9^<e75OQicZwG at LyO5{!Z3`)6gsb!Ru>?e-&iob15VS
zUTrc$r<0#jg0j|Bo$?pcdrB#AsFTK at Nhvfv!?_0g90Q-S$s7aFhqtgYU^ze!09pa+
z03~)i8)yxv9kdE`Ai8m=k11pZU9L3MU`%}Jl!@MizM$Rq at C?EO&ESEsZ}E=6Zq+`)
z8=zm1E_7>YSr{<xh4O$$ag%ysU{l$`7iklHv1u at 2UXZ2$xgPs{;WMNSpW3ZIu*C0s
zj3X^_yzZbL!87^r?O75N5E3^$fd5h>NBvqM;<XdiF+^8UIu|j&<h+NT<=a at RglYs2
zC-y`=d&t8ZIB$9~b~tB*e82ByUe*RznRPlN>jFj{_?m^hA84bm60z7#(A|*OPA;er
zbT{g0_fU7GgLZ&sf?feF0qq1W25kdPZEXS1{1|rIT;QYSW9*yRPx1VI*h65W=@t{*
zHFB at D7IFSJum}DWZFtkO1AE4Qz+NM#HY8jm_b^rTG0`>1Lf1VC$hfsh at qTjn=~Q5>
zW=Lc&z2N at 7jm5s!L|25=?;4=8X?Xp>R`yJC0lxPj-ldZImDXM^OGNH#E5;m8-hw)z
zb8KWB3!k;I(NdcfeD^l?)ghDP{CvuK_)EUy_<Uc!>@>#tslDxCe2nvTi)7I8$6vp-
z>=eeiIeK06ca9%1j?1I!Z>jvhskt^e_HXRJlp(;}-sInjF`a%Z)xQ!n3$z+E6LY85
zIWHRUT(-Xs=TdJ;{EvbPa8EPYTU^gvR!imqqyFzPkNK&^z9c3^Z{IqTkNKa9eR?X9
zec&&XhU1da=U&e5s|Hpc@^Rgp7or-c3^aR4i+S<2b6%L7^FryI7d8JeFP{BlUi?4C
z-aRg=YVRK}O-iT63#ip(g+NqvP7FkxPT2)BG9n{DiXBdZWd}kkAx|O&GYsf#Wth7#
z3@}$N!+_is1QNXAWQqc&TL%V2($Yjgj-vT{uMPI}JkR&{`~LpeueE3IJ!|i^)@QBt
zxxPR3m=|OYokCf}0oIuFB<4ptnGZ}o#(>P72He|;XU?J2qCAT-A7vj(F-ix at Oq8cl
zW~2NWC9!)m*=mfpjXDD?J}vf-UY0kB#`s?HeXZRTDwAgMWKt3K(sbB<FHP~zpc&+C
z{Vf6Z6_tMlZ0M*5c4BQa)~%4)35fgGdXhSu&nG+)WXOMQY98 at lpPEOg+Xi~v`BMFg
zFlIIWThT9weq1smFVdq6_wwbcmz2?wL>`f3<F~dGap~kb<`9_|wm;`m)&HJL<o*gb
z at Bs$iQ<MSo2pAEVQ}|w#J0 at +I3)`WC6+-^_7SHx$j#c1yI(~0KnSqk%9xoBz0_CqL
zOHuxUvJB-#l;tRYC-VyDRcMD6zpvo;O8l<G`EMv2lO&k8CH*&1-`kicm*MwdA-H+u
zK2O|yL2wRpY$f`<4{Mj2^A?LWv9|d<d4|%`If4`5OYXJ9zW_O=UdQ(%T7qEW@!En6
zm)>!Z at v;47zKI#(|6#sW{U7JsC3*a<Q{?|qO6MlbImDbzyytxtIb@%+4UoMMa^YFz
zU2Bg%0UsO{*^k&fU?*tUTlp_ at EK~B_Y{VGBS3VcNCH4b|yRb-AoDW<lnv0PWn!Wck
zd{`3;5Kq`OS?tmkcBW_*sn7Wc^3BL&he5N2c_i;u6X>d0t3qxpGY>jytkJ;x0On!!
zX+p1C3HB{YI!^>lU9#@CMAhM19-i9<Tp8lCQI9yNNR+sKCc^nDbX4Esxr~)Mf`yFh
z)p&jf>{xH$d{?u6u%2thJ_9^$#C+Vj_5k|ed4fR&KeS-%?ZMC=1ZP}cRmq&8v)u~|
zMOXv-6IKiQnFQyL=&NAwI$Jq^x6R5QAbu2M2O%Fe`DT-G0k4n+Uasg*9TIH(&>=}o
zNh#X?`=E2$O)xPozR2ox*uKVk6_>pZeB;>)%Zf3qU&pQe*pK^>uciWHA at nZ=Z=5gQ
zn*C{Aq`zVAHAY7d6WcMn)-}l{LeF81N}LeF?i0%or-ASH&nr|9V)CE^`QGGQhu=TB
zCRHIOM>3DMoh=^(u3`yf1fR{rCwB?z$-a&KJMG7cG(9JSdg9`Me<9W<R%V0WTfj)8
zcL2T at e$GU0gAT<2Y)>ipI9GPvQQKrbi!{9n*h_wjr>z9%ipjv(icyNN9;QQI0=yt1
z4-(se?^$;L^mbLSeRqy0Mt`d?7P^Z@|5(KdtY=Nn7WfNEPE5p$u3l3o8Hg^(xz{)0
zq80n at 0nAZ7+Hxg&VgD|<>SgeU>^d<_u5T(P{1T_$r+{kkjQ2P6K at Y*~=>Hhkn(Z%g
zTJZk5=&|0xXAAl}KN#aQ0+V+jvW{2%kpX$+3{~n*HT?~#2jxomszFb>t==~Q_>S8r
zfy=zD5%+3PlJ%k%&x9nvuOV87`KrKt1ug>T8SHVo;Oji?icgq4v|q?GF-zb>w}9u4
zJ<$E5 at _z4QZ*dI#OYk*&5OVRC(kkySCk`Sms)bVjIrln||7ak3RFVn)!GN_xkMRlO
z{nYQxzci&wK`tOYB?&W}IZFKGstC5GNuX>2PBG^Ki5JPZz3Qz#5vLJ6Y)z7Ku8<lA
zO_I5k2~6$nD7T{2BF7wZogu#*@|-=ggPO`Qca6<;)<idudCBHEgZ+x+IXhiXlR34U
z&ZUi~#q>A8<JtqPmY9|2nu`a;Pg(K1mF2U6AvSp<DCY0`BtLNjfIF`P4SfYY+*jZQ
zzY052l*hSDZ5^q4uMTS<)BMR)E;sPvUrlsG_mFud4N6dAUXwT(CwSr<XWkl#MEvAv
z|1MuSiwU}mACJAJsH#XFPhaBY^8C=hOVQ8sDJk(IJo_{EyZ&A9<*hq*l|%UE<?y?R
zCHmR#hrko72J?7jMDFPyVKV2u3v4+{+VBw#&O>otk~R###wJef=@#gPrOr{Tv1Mr`
zcpv;CPZ!ul+{O+OH at Bk&&o$v%?P=YSdTvfTWc}GzZXWdgS+?WwFEa7><3Bqc)&)h*
zQJ%tK#k#`kgzx(FP$XAWZ*(GMqvN9M5zlgt)hoW0RswlnV3P$qQLcdvNSnNYU=lF}
zHedpBtZ9ADll%vuulxk`Mf4n at kWXXKSC2ye52b@1rL)B(|6KGDl6&s)k4>>sA>{eZ
zz*{L>ZX){LxfP~Ze_@}F*eD!fkk2FKO1EdIl&x>O31?TBzJiPxY2QWk(@b;n=X|19
zShLRr%#b$tGr!Btg}*ipoXO4PS>RrZSbdjyDi<Ho at sCaG-Kz}zm#R*%GI6#Yz6+eT
zj2)zZ;cKr2J<^aNcG_}7wK{{V!cqP|`^UT6=7WAI*VfOlq!l^uOHhJFNxbnJkkxk(
zxe;q^1{p`J9SY|#;>t~eBP^z&@JuR+)dV(a7H2QMITU>FpWg|Yk9^~oQ#yM(j{g#i
zSGV;0p0K9A&!_3aG+VObNAQ4a!}8D6!!|G!+|DZ`W8H4?%?EvC;Jm<51wXx$nsGbw
zRm`?7koDU##B<CzFJF-B90j%`cs$H;;O(S6W{Xej3lV)F!#r1DJx`yKUp=;izJb>=
zIYeY#@XU%)><@@_P}+RbVr;)?>x35UjV9~`jeoYEU_uq(Kj-iMC&=*gJj@?A!l#lx
zw_CnfK?ed~1n-4aau18W{Ci;Co%ttxX at SK8`Hb+M>A<VBrY&LlNCRTEV>~yZUNLY=
zPd6L+4CD+|GyGHLyyT-a=J{xhg+6K{G9^vib9XNBWUNdK-O<ESw*KFM)eo8`whtoP
zrs-_IYQ<a&z8h^r{a>PfdH+pdrW?*&#MmjG*atl+{7axGg>37sV!xfu1u$(p`QLSH
zMjboZu@@p|CwMEm0X_(IWUbh+fz=Zf`?wK)Y0`*wlf)31zK8wH?+dhhF=9a$LpPH`
z^b?W+_~HU{SQ^(ii_ at 6+0dStgh(XW-v#^lU at R1>8Utb>NfY(CWmuK_Znb)x13ekpO
zyE&<V#k{S63}b_S27AAAyFB(4ee^=-+sq<KBmXy+SL($6`T*?P2avz?AxfQd&zdog
zK6*EWbslS2q`fdnB`ywCUe^16Qh7?#ksL<$Cge>FV$w&Ij0L*>6LUTwe!BKWoZa$x
z2f@=7^3=S0p_dV#S-0=s_IGHD?;U3k{~wqef9CjX%ZzL!x}`x2vBi0U_f~ydC5KIF
zE%DpqKHFx_6MtX!Xby+Xd#Wv%&ZlAqKHY3qM`58}>!_T at OFjg=<6a8b=KMC~J^gCp
zE%+^FPHsi4ceixL>})y~@lMwm<Vjyp0BptwdoPiE0gM^ru#n9;9!h9oyw;~}c&lYl
z5OBHz_vDDxGMzTlwHh<WO7J}3A9#)X8NqU(p&zzi_ufB^aojW4k4XnEaQs*h_?02Z
zRds>_`1X&$-=Mgo_0eYV79y#YzkI7tY*Y32DCNa;ZGGcz-<cudj#z0&D135;t6>W~
z7GCqg%4r<tH;+^!UZacn+QFZj<X){yl21OBS~2OJS~ck at sGo`%gg%z|l^Q at _wXpL6
zLlp<jvqY!j*gUb(`^_o;KTj9vihxl;d;vWlw(BwGQnId45%@h1v{K)anc8hUnW{17
z;`*SEn`98{RuFGW?<VAGBtqc4#dzMteCS2|_NgBce>?X at Djn;+9`7te+#cGzH5;}a
z<VXSyY$thhndaVMRUl_CY+&dUXYz-S)$I7RIotSBZAkliY5xn_thp+*zrC*-cr1%(
z6KvW4K`i=r)QR5nl&b at N^?2uL>9XnEBa$Ms{sH7$0?r)Pj0pP$Z>)u9<WxJe4Zb{W
zjuLtt at 0!Kg229RcDj7OH6Imzi+kH<V2W$(ly?~E+hOBvojuPY;uH^5xo4_xmapeT}
zW44eAf$pUz%<pt&*gwx?<JrP0`CHuu_StI73FtYqHVsY0lHA0bylA5LG;BiOlaj>d
z!Iuj>_V^YymYjomSiqUjV#<Ghq!jyX+xI at iFAjN`;G at D#ZxfTXR%;Sk(w+!Wgvo5r
zXfx9-8~dxylKY^coCRv@*^N$d at iGl`=!4ipTj%nbT==(%?Us3J_*vY*wLKjc^tFt4
zRhmvI{^Q|si8I3Nkqo3d|6^Q~%W*Q65FiMyn2-O$CK$TI2l at yme%up&)aA!qIF>JJ
zu at 5!TH0s#K(}E8u2=?P;UOwoj{l)38bCe<0xl}XDUalz)0ai`+VB$$fS*myT;6`tU
zIn|VH+-O3arWk#BbdD9z?M~I>njY^{pdMMUhLILnN&X`bP4B?;7}D^Slpz-KX_uaf
z<#aV|+~|(?rfQlYf7-ZPCYHOxHtIbt4T^?MdQCUAfYDR2Opg@!-~X7$yAGTK;F&WS
z9W|*I$gN_WXG2d^EftY<#48c!SvWFYT-)uRV_5TI&L at zu8crXCJtTo+^3$EP*uUXi
z;TH0~Vop2CXUf3uo_6TLb6=shVV?es|L!`XkJ2GOl?=F;YL14*$u-j31O at aJc|!C|
zQr}D42J~UuKr1BXF at t<hHZUwYh_6C}>#J5-l+q}}`K~D9W0LK-hs=#%4%)+C+A_f7
zrcMOGuY4)6z>U!pL?6uV>&T~te3?D=k0>4d(Em=y_VsfbT at laq6c=;u(|$YuS>%rf
z=4WE9@#Mx~%(*?ty_X4ngQ5Qg at O~wIY8v=Tz at 2SEOtpcm2^=D0>=3Ao!0Y8~-#BQu
z&?sGwlYLw&)I^3nW6z-5>{*g`v5rdx-Qh-xtc$y)PhnlDW*FTUf(G7vrp+kp?B!IT
zt}FHi&hOAmK&IeS<7fciqQ-UAJT>U3Z1fDywZ0XIr+M(IMB7EbAiW>?D-m1zcAeCU
z7*#cY`9<rR at j<Jg0BfV(nXE;Q5nw0AKrY$l at f^pS(IanLi!-^XXDmj0>NyMlyAbtt
z*|dJTrFX!i9kfzN+Kf^*dVs4Lo%A^3(0fdb?$@f28-nN$akwJ>hMWt=X?LtCH$-Ck
zN9v?i>2i|O#gH6HS)jp^O6V=oAIFHV_F at U&rS}&1Ctd?Z^QxmaV{Yw6+grnH7!CSj
zw^X>%N%XVOOXf?{UDdc|z_ at 3kzifHsz>cqG%5YvmVLg-r+a~B^`Vov*%WN6--d55F
z$a%pb*!A#B+h*;{qJewqDE3f{Bfsl-E6#yOyR978w|^MFO4zq){6d~ml=WeJh=C%Q
z$`*W&rNhGRTbAkm*h}US2Xh>AOEnS1+cP0V4m2&VW<;VLr<2jg)s(4V0s7qJuS5T5
z(F*=@nf%>_pxa2A;KjsvIcASg=nKkJS#Woa^?jaTDpPu@*?JcF1!fT6Op>c;G{Ua`
z9)3W+m4tUf?6PXiG)}KCgHJ=rkYdpX<Qnm7Aa+;CFtC%@;D<choHi`Zz&>BWMO-X+
zmu;}oM-tx$*ph0PR^6>flWfPKBgpcP`;qWeGr&{LK>mQ`Q at +MFZQA9KnrNAACu>WQ
zu(p)1p~n!ymh#8Ab$uE1S|&laSOna%%FuK62D^nb%x{LxmydqydL|24<Xdr18D0<F
zlmg=feKVtno&fwc%ZGMOzaRM|2_L}nhQudk%r*cy&&aRqe+Oe%Ox}+ at enm9lvj?0{
zApT<~`3AyQ at qgnSr4%_Hkr5&LJMsz^M32KK7PisBs4#=62z|X*+7C<%AGyl!VJ>am
z2|Sgu;jM)p_N#Ot at D5&}<h>%U3^`Bk=`khAR~oW)EoN?!Gj57 at C67^k^iL#ynJR#c
z2pp-jZkvIB*!f4=Z}8i(Iq&davi-cJQt@~3x;X~_eA}9|r!W5CS9meQuR!DstNu0J
zFZY1SH5Yp(bS1EB6FlvH)UlNRHh5n6mVkFJP3r~EUue64^UAd2INxbIpC)H at BIX3b
z7n68HJNRuGY;^VZ34)sq{%{2SUkZL=7G%;&>?LLVD%t1ZjXW6>fWDsNDCWnazx^Ql
z?Ck&78*U;a){uKJ?`A?bVMcjB=Ibne3Hywm;ppmkEm9F9lT<)oo9g3s(};W(hCv!J
zt>jvqqx%h8K`d26>6tk}hJkVHcP~l?I9h_E23_6=Ek^DQ!*36Q|9lb8_`^S0h1?yQ
ziBDL*y>m*2n#TM#Fn+LQ0z+=v{_{gx4{Uczr-*+CYm5f^2W>NSIAd>t-iq+OCfG`2
zd8f&EON6|$oF$Z&Gr(}d9zA0X?}z>t=kzw0L-^i{5(7p2?^UnFWvG&C3BE+181oTW
z0n`C}pT{I{?pU9!U0ksh^W at nYmLBGV9-N>DMXxAHu at b(fEhgykUT5~vftr0UL{HJf
z)&)<c(_Z|D-t*k`FlMmtb*%E<gz??P`gi>?-6qIY&{fpi*fs$p9KIjG2$w-mQ_0fu
zN>>MD6xe at xU8GHD8?mt{un%&``s!TE)$~i4e`1`n;D6K0c?EG{IigdDZNfR#=0wgg
ze=}%ZNND}H(_!VNI+nJ9fdxz(H;m~_tfBV+&#2B(%^c(eYJQ+=rrIEViaLw<*oDqG
zmy?c?mgzb%R?9I~h`E2^iwzlctXw6a at Lqc8WNWUg2x}lPYBub)E>0ar9(I|Ra#AkJ
z(3yd22W+dgZZ(KY=H$p#KD|D`Ac34&{Hz;z^u2-7kKem#TtcssF{<(8d9XJyKX)Kb
zqLsu+45O45nK%ZmiLUgT6SxCdG6O at R*6r|5HBpPN9mF?13HtusH5WdP#20_hs!C7r
zP;9&caAG#>Ve^o*Qwy*ChWQXO9T%!cz6RX88yDINe4^HzskqSAY9I9!Ud)C)kU<th
z-?SL>a`A-oJk{E;1$Nwwp*fc_F3%<SOSh0EbpZJR3c%MInE=>AFdu&M4(Q%sw#iXv
zF2SPQuzMQsa-mI?HVE8HxBkPpr at -8r_C2Y65_=x83&Vf9)}6H3_hPNV$F0`rvl!oL
zay}BLnRJg+Pd-KMZ8jp-_8cV&GTa<>DBYC~b;gdFAOE-a5C7lZ??}Xd-uiF<Ir=~T
zW19Zv#kTG=1N4kfA{W&u<Red!q*JSbA9Q&8x6dknEGUA#$m?bJAWcB-&>b~t*J`XU
zMZ+G`$&Mp1=38^wxMdO}aVT)vH)jKne$xk^)@HQJtb6K_A}{5J-K#{5DnxWDZ)|+{
z$o6kTMZo^5ZB_99jrjgNLLcMxByJCROb4l3w5P`{tO-&0-X=2EW9P|#2qqB5>j3-A
zg3+58>sEHGGn at ZwtmXJm7LGmeRUy9rS(AE~F5*v%vCqXgM`4_!Fy_!>6aQLQ1tq-i
zlgmy&p at ZbygATrX$+9*Uo4p+8QOg=gY#n0pu(wX#8?eAG$J)49JV!}M1@`B1_FYZ=
zZAE!wF<#occt|AY2=pY~G-xx(aA1R-#VrE84!A3u2YtgPp7pLDS^)f}3(%L|L_ZRo
z_UkBj2~x23IRf@>$ZM_^oNW4A=OvQQjMf1!r2;W#_20ztx|p2X9=>5x!;1$9)*LNN
zBkk4MO3~I`Q4NSI)wWh5 at 7YoYSR$FvT&{<$=4J0jIu0?gH$<_*tf at TkF9B~e(on6^
z8WL4r2D_4H{C_*vs~Cg3YT}+W9g&F!%2~a^`&dKczkAa=5WIy7yhU?I6xvhZ9T*f-
zQB0n-{mMTa6jSLpaZiFKTSV|s5*GKbf-kEn&1{S8&$kPSe}+>cg05}LcJDx9vmto&
z&HcD%AkXmE&4xY?Iz0uyCLHo}#qNoF at a&*>pshUZtn&`u{~unB?Kt!-XSuMqkZWX3
zC3#QrU1VJy;BA0B_&IPAk<Su-OV3Qj20vnCdTgiC^v*k-O3ona6nO`N?gF8Q4jd^Z
z=LCOwLl$_d{Sx?~(696NTGvW5>6%BSbSCrzEzsphtbv at w%NeyIuT7Rb?xc(-3yPRo
z?6BZm^M;L&d?|RQ#ZgM0C;Eg0<?ZJ?=g>|3E~!wE8)O)JA9 at 1y%_o6}<o@*hJKh8v
zD^I+!Y(eHqgYj;xLobPSKrT?t4gJ%yJ0<eCvtizgMr_`T5RXQlS8XigWd%h%_$eJ*
zB<46luQz<RuB`DWAoyNK;X{r+q6a+01K_KO{b%|=uGJjKv=ysgY2e%oT-%lvRhO&%
zH2e2NeE at xY0pXkIU#QWbm<i!TEPRVT2L4bcFi4Q!h4?j*9ClB-x_;q!&pm%47JAuO
zZ<TF;iiFQe%V2HVsml_7t<AY?*I*g;@O7?5 at B#6(y}!kR?|2M+o*3V<kj0KQoTt{z
zc&Qt4m}3L7Wz_?UWnBY1s76|!(Sv*#J+o`MZC;rP%XQz(YuRU7t9-)96g*MO6jdAg
zko%XrgT43Md}+1un2BROmdPnaUY_K&s)9x2{t_MZP$z+{dAv8>UG6A%X><U80qX-|
zy@`%}cxRz~yta9BpO{nDcYss%NFC~1(YY7bzJ#2<=W(@o=Ar`l>eaV7H`}uZ^XfKP
z6MK*7BkS7B at t=wrvbi-(9_p%pqJ}Aa;u^D)=zRJ&r^<STzM)pVOFeR*$fN@=!M83t
zB`K`W)!y<bJz;>qk^RF()z-M85K&)H$hE$uwD%HC_8{>C;AzzKON(P7DJ7owml{4?
zRQt@@M{1v6&tqe?=(JN69@^_%OIlaOTJ41#OIi>3MZIk}O at Vd8)?5r8QuDWYx1M!5
z8x&LUAn;cdqc-1A`h1 at m{7((~9R5wNxrDcxsH7q%!B at ZgtdFMm!a~i+r_ix-yl=no
zMNR;CTQ|-O%xgcU$X2}NlMvT4GT0mXLl%D|v#GUDZndNtL%JXvsI(WhS<(vWZQ2W4
zEpaM(h`a}Js2RL%VdX!btTm9nh*e4r$5eE=J%GMrpG9{F>JSSNj97@}@XZHaTf%b0
zqP>OV4Mz^vK{<S>ZPe}@<XPhVjoS0X5=wE)9r5dn;7idefG+IGV6;J0V at N&SD~eS<
z(GI_d8Ps8(A2k->IaRMS40-;Nhen&f!to8-_0G5mW4dFG!n>Zlx8Uzf<WpF23Cl;!
z-0kpJA$g;M!FND5dou7x8)7+0jwuqWN9y?!$Ht-2)*RF|gO^Y0xch(LBcpB{8^Pn7
zu_w%+#%+dWn!z1u#6GZx(5Ss8G^2wSDLEuBRB{?(vo|ygjEqKS;B969V*tI`(8fbN
zHNHnPV#D_)!$xBy?eJch$l_5WuNC5fcSzmkm_sB^9Q%{EiCzvHLz!mCZU!HF1UOT*
z+(O7ndBG<r8FJ;MgCD#-w}#5@#X4q>&QQ5kVNa>gP(5bxdDsEDZ}RyB;?G8Kl{_ba
zf7E;iaUs3@%d`oxb>;la8a2+%{L4}yFib at _(uZ%BWDH*_$wK_;Ash#(h=8;A=@bP+
zbaQW1sIwsB5Bo=g$bhpi#jw{L$l-LIZw)(~nnd=iz^eCd0V6=n`2)ut937<pP~OJT
z?tT<L{*k~J+x<ul(;~f8B%VD3Iq!1ddq`ss6ykgvj;-)-|KY=hHP6OAQRCy at 1<a$e
z-b+NUO6D|+gFixW at Vm>&`OlH${9-&gKON9}33IcU%uR0<q4hs=RlzT1K9`Hw{`q3N
z2t0y>M{?i18D==Wvj)C>517Fxl=Z1-D_1cWykM^|PSx+`QV$we^a=^Rz*iQw_4!ZB
z<J;GeZ$UrCx*QLRS&)W(NRD+Ow^xXJ?|LtU&bbq`KVNDDulpn$KNN}Y8HbDneZr#&
z0oxNU2OAlA_9cxnIeJZxqj(MEa>Q=O(q42q9Z6ScM(W<%@(cKK?a4h<A#@+e`^A60
zqY*k^^XC4*s!h92+PGp{A$$@m)2zhbC|IbKLoQ3FbNKKvObU0TftG_X9(vJ)y%F^G
z)q;G)aa|p`<Td-(0lz|mqtg5p_VnxW*!e<&(GTBkBVw`kJ&_6ef1|wuv2O>9%$)0Z
z{(_&Jef}Ft9Td5*0PCK*O}K#g9Q%@dzQhI%ej#q-WkE`ZC23=uIZ?r4c_C(n)!`a^
zL+2WR2O#ub$ns_V{@Iu}p`A9Y#a};?hx6c0E520<S{5-`z3FUjDPRGj-#7Dw7^fBX
z27;N85G*xh+ at 51*>nrR<92%Lcx+{;$Fb?jp?<^#_*u+L)Cp3Z|`a=}EO+AeXQh5qF
z*x)bK=)wW7U*G#mnifaF6c4ykWv_oU3*+)gaIH3%5_*2?C<%TexR#eEzM at fvSd;47
zW_s-=xf+O#f^E}4bUhtMZL*sll}m-lV-G9^TF6x<RriI{R;qUN$u{-eH@~Q9GbN_9
zya_uIbVzg at _6vjWUWc(w&4v6)XL{UB(mQHtv#--`OR5bv at OB35#W%F`6yk5lJoF9_
z=U`4|L9bxI{5wNM<}BB!=#r?G@!@54NnwtYq~Evj1@#?ONwsY=A1dOcQ)0AFd~raV
z-MA;o*MYredM at zk8DtL6$gD9yH@^)weCbQwgROY?p0z6YI<;ntIx{)jxEa}!>1Vd$
znH)S*if63sGi~fMTj2`^*&g47^#u6L<#ZOOT%)p^qe59*K?Cl`lC{>eBLum7 at cuf|
zR~W0;Cq3G(bJr~>8f~EJ(e{m#M(QM<J2o+MelE!;;w%7e=S*+J^^j*50B6IKqJ`+M
z`&c`PeZm9lJjpA;Okn`qn;+dl^i8%Z=sZg4db-^A-x{^=va07cEw<Tktx_H*d_ECa
z(btbaZZ2f^*?~34wGm%0`4#l_A#yru)AX>HTHsG%Vsq7P$DW#*x&U!>mwVHB at V8^c
zKGlp|lpccoij3INM%GY#18{mf%5i=M=X0o(91%}U<|gc<wVFa)n~!?L*fYzivus@%
ztGlUvOpjwd=%JnPM(lSq=NyR!ezPf&_|!tynt}5;>R!`&7Td;eijJjgruh0{LyvOU
zuu^reVO(+LClYH0S@!IB$CYD at IyrKtKA_^&Ayv2Fr1N3dX1wzv`cDm>S%>q5IRAkT
zT2p5i1(yZvef2hePk3d%I?2nRfUp1RAas-Iy~uNy9BqfsF;&aSFeTzzac at 8N{{L#n
z!rqJ_?Uf_2+irF_=g{HaR<^Ge_NL!`r`N}Sd1ns$&TYYE^j7o<Y$9y^4S&{;cgCrB
z?vx&QA39o${#;6(?akn3*BYocs~7q0(r7m^S;-XkkQ%N6ZM;oy<%c?RBF0F6u9)vR
zF%h&<HNo<mM8CN#YETrXgl)3(+#Z4QfH_VDUJm)ET<U0(yM at H-6aFn=f5M8RWmEaU
z>}ImY18aue!wC;b{1FIWv7m%qt9Gz!)gCqm?~s36g)w_Q=a7G`?Gxbd9rABnC1*y8
z_}aSr$A(+O_q!h*cbPsvuth`ms6T)IkcQu<1I8P)s{88 at f4z?)n5Wq5$)3MVHrNQA
zZZ+P!`Oyr_ffYw;vG3avKX-?dhu^_R%&t24nCKiO?&988?*7-it|Ar~Ff|NxqUhr-
zu3Ewu>@NYoPyrngDXWO?%g4<D`#5wsFH9(?<W((CbwE!k#JU;^o~+`4MUXf7JeN at o
zE~_5YP0`)<UjA#&V=nn~E05OO2*$`|V5pFH^iq+IeAbS*nvUf*v1>HJ+Q!^GTI~8S
z>4r2L)?v*+v3t}i+fyBgOFt5LbkiQG1^Z51nhpF|)B&qJZu=5orf(-Qr}t4uJ@)Pr
zmwHDv_G1(FwhG|6ncSmn`M}+>a$|0TmkEme at dn}ZCtR_=xgrkI`aNZRx~=yilSIt1
z1bstq>{o|aC_mp~UiF-EO7^Ipl2y1SzoNdyjB`rgz2*PIF`fE0&da9GsZmPDX=m~Z
z?1K|elqae1yC7o#`{E45h}6G(OJ^L^JW(F?M_zgOJhNyM1s<n|4vOxc>qjXopKEh@
zD3huu{&1t^X at BeOPx~9>(R$G*?|S-Mmg|7=?-^oQuG$(yXVD_$Tok&%HxBn>JFjv~
zSOW~hhf73{D*}r)HA0T)g&gr^QrNkZ(gE-y_0-jX-x4k#)KeNq$^8j|J2urh>NF)B
zNmOC>V5q8XU+Ao`^83FSxxl3Z?`&$svkTd0>)2-->0)j+F!5psZOjCGB!IdV)h*f|
z^&gQwbe7JL<QpdZS$*n*lqF<shQCB5)`v(oH>$`r7i$=e{4RAU8#_wCD*+oEeBsWL
zbe;^?>N+g$`MAFa=X*MU_1^r6FR>@j&9=O|kORLh at SS1OAcD&s{G at XLJ`lH(>ZKJa
zy6m+ACGs#l2A<@IxeWO(D^X`o3duznVXh$cq~uGj_92?!C)~omCw;7veMdgO63;|I
zcbXn}Y*Ssp*@Vl^m}MD*rJC!sbxE#9jeTu_NBU?h_Y=@qodfy%X15IgrzCyo*XE`C
zc=%YP2k)aYj#dWivA=r3KJz7bC9HYm+;h7#CMi7I$gkWQ!~GurZzTBR&PniUGZ800
z(|a6z<VEyPkCX7um-v@)ewsbM#-8tE&u at Z<jxF-ysGqc5y&k8!7z at 43P~HXatT>&>
z93^(1VapxU<+iC3{u4s}<=XOa;6pLhe_oT|8uF>F)c0M$H}*IS at -94|6^Gnp3Fm-G
zZ>=psd#{Acodt2SmHJWg%mJLM3nOs-I(uD%Ye(_k2xq~&UeEzP2VSrq?YLZR7^-bP
z;{KIX==Dr(vCBEMWrY3ycD5~@&NG6 at S_5#rO5-#u^@m8^o!N1GEAYEM!59qN&FF*U
zz_%wjD915oCwX$zah})%FsIM6I;&WD{4oPheW2K52=qnXdoke0gffEDfIL&S-b<gT
zQ0m8Djnk3*ht&qb4V;6IBIoXj<B!KFrq1z=C4zeL{0R8aS_?T}tE$xt>Wf}r|A#V8
z1HTjE=ZQSRITukj<7mQRb}qsGpNm6=gZPmw#j%_4QdnOPLzcK5sk{i at zT4s_M~-mS
zhzz(B$jQ at T6)4$r;EMU|8Nz+<g|>n5j%NFue8OuSDVdTnkV_jpK$;otCVI_<(|lof
z;Ia3vt*T-4{a0xhPR-`E!M&7LQwW at i^ZZXcOw2*pb#gf-j-+h`_cKCQ{k^dJ>?Zf4
z;7dyG*=2MoVo$AnD`bE at h)Gj(a?sbEk<bMu{DF5xLf;uFB{?11qq_t9rrx*mMBfE!
zJ|!-HJi0ab5LFE<x^&pf3i_XcuTu_aV;~ZCXvAEY_`q>b_=C-3+(~`xC=1rpTfsAY
z;HrS#rwBG01 at l&PZQDBT+jv(B+6=!;#L!ngLi{;^|KOn|?adaU{XV4hP!O4w at R?G`
zKw}FrcOdUbI)?vKcmR4UweKOZQ=kbs$;3%Aq>Jd7hZWRXW=Fu5gmd5*S94m2LYl8g
zzoBC`oPKA0oGSP}CYu5-JJrZ!&=;wT^mFpK)Ge;LoC&5n_&QVE`U`h6UFGYP4Diea
z(NrrvMEVWB=?&U+jR8I`{q}jBEUE~4?M%o{JDdg3&%-~6&<5IlLrnJgpNK35zO|L@
z<0iI`cc71tv3>j>M>yIOg!xZ=3Ot4%m}*D#i!1&5E*!Sdd>XM(lnb>@`IX>QNLP5A
z;0-FiAUa7PIjnVEY|vcg<f~S5>Zn3G)A#WeUn17WLN$~5D>h<mvEMlh at UEW-zH!10
zM_Vv51EZ~1sN1v`+Iqw_9pg|PJg&`lq%ksj2bu2}I|~K<Dm!-nVaM(mwMMcZvR(pd
zi?{No2XuFXPb)`(qf2}U>7`G*VcdG=R6d~yyL5WzP2<ve6CP1 at So18?rOSi|+Ueol
zebeKwV<o*0G087-guuir2gGz$a2f1{XF(sioDr%n_&P;{cGrS-4}f-i>`kz_{Yu7w
zs^JAPb#y7)r)IWK<!I-RY at beoW+Fhh5un=$(5>5F=~nCn_Mecvx9>V#9_;}AHXwf^
zq2D5we&y(cYb^c3zl`mJNwyDuqy&yq&~MJ&?_=<N>o!WxqhGeL{Q{b#x<`@YiO?tA
zo~A?oxWdCF8MfJ#OQCCF`@?Oz^q8jO{~PVLfOe0vw3`Lmz5c&wHy5<qc$aq9EoEs}
z2HLg!g?5{#X*ZXp-SofEuH{eKZDDCQm!;hj(C!dRyC+DyK)YFdYyTp|a4bO|A7%Ua
zrX%bxblWlf%QW3CB5MQa_5v*d-F8vcIq7d^h4kN<Dez_D1z$4pZJ$P;2nqgPg?(~2
z{ERZO{?ztA18kXQ^!v?edOg9?>yV>9xES<G+BXT?d)&Gj*ZhiJO^3aT`z2_6-}Lz0
zWXI<yC1A(m8+I)If6%B$)iiCEPnQo&(I|8gYVg7b^2GOdrNtcH0U0qf;ZF7-_Orv#
z9kr({DM{EQFn^KqC=am%B}w*r#0u8aRhy#m+cN0^yvun$N~y?0J&FAtJiskdj_L(<
zL{B=lh{%^--;E+?-Gm3pLEx<dPp^kg;@V2#sSDD$v=u)Tj2oK|M~($36YfYmQdZa!
zw&>W{@QrC}DoWY7 at L=19l;yUhlpxy|b`z&O!;D<Dkq#mJ9?Q4nv(IkAxfS;+QI?{t
zLRkqctupriLD1vw<kd13wCy%>4Qv`s7kmKTcp3C}3*j#k3H{oUi?P6iF-1j;HXw%-
za0OYq9spen&*XKQGFoO=qCG38*XLKfiQISnPr5dY54QfHTEu~#d?M(vgn%s at Iz#-Z
zOvy3TjIn4zB=s4i{81ehA-I=`_cv`+3EG)UN6m<5GrUwAvw~nIM2G8&RWgo^PUje@
zJkd5_lzpJu#3_MY#^{|Q`kb4);tfU at a;T#o`G>p;qPg!<*^E+gJiL{z40q5Slxt8#
zLu|(f+$|gnqskO%GiYO!QfSc5LW~H$jr$CluhNdeo`;Gv&WxF~-O@@gKb;@JAU_*R
z@*3FIeeVXpY at KeQwr=jOZ0KEGI66P6l4I5$m|HxvKp<i+cb0qcqz0{OrfEuFL+lYp
z$}k=_L0yP2Jg-fttrzV|?CE{wVVP8y2z^lEIL3TTdhThrs<_aVhov;+Dd>1AqbDST
z^0-fz6WtBuCsCi1wosA5-OSdzd%Cn8vEw6Dk+cJL_>vXhM=2=f>;_8HYz#e3pZD;e
zG-k-hFkS@<lD>Al<)efheoVUTdAGwdIsh at D^Q+>t#`}vOHY4`9NODi~SWra$Ylv4>
zO?q%^Tesp}f$;mk4vfxr%@6h}I)iSY#wZJgyd~7*=*#_4az<J8bAmFYu1|yaO|tJ}
zb5d;B>v$dSXkD|!@x}Cer`osi at K#(WI;qm=#gY!R at 8op*_V&5Z<?K79cxN5^PAiSr
zF7OQ(`Jdi>mu^3Ga#ZW13^RKwNG`Khn)@~6%H)X-!JIoD8D^gn^dDJkVwvhnqbGeV
zhwaN3B|k)WqkUD=?W=2hkL^pkqEImY%LTt8<XUc|JAzB;i}JYjZ)KYibCE$8leP)a
zHqdp;f4viX&^J@>{LZbSY6}D0r2FVkphK;oy0RrcZXx$jnV@}PTc%fji%B3cDpY=)
z9_qW9)$p}1p_IsharSa4p*#P)%jNzhmrefFmo4DikFdU>*Bw_gbZ$hyauD`0p}#K7
z at Kalu;ixstaO_9N1zbz_gTI_-kM5EWFr(auMm4GZ<F<{(4&{?7!DmeTXro|kba$$^
z=p8SiG1nu<5gmFC`mPiBrc!IKS3a<P>aH53VVoG%3{D$$0{8ZiJiS<l)>-F=r;XQd
zw1ikvl_7piCS;S;srO(V96&$(o;rwk8A&`{W`86w?6sJWBsZisfUf;u96bNy6U*0V
z9FMP&IUYutgz{e)A67?#{bDnZ$XzS!$nV#@5&mS2khw`bVFSre<Gg9N0GGhb&8s!^
z0XKy!pDKwy+}DHXaVOfTWJ!N?Lt7l}NtZ(oBYr65njb={Xf?+QT-Rw{7g%yKx`dMp
zUNV*Nl32%5 at ZS`PD0-qTF1kDTAXQ{NnOc!8a_Q@^M4!ZSvGi8tz$-{9up<8%T^rU~
zbY<nP4hxYxxN0J606RK``0+~((RHEi$VDdn?(=L5ef_>Qp00&!1VtfTR2=vQ1wF+7
z_6cC8<3A&qCn|d__OgSBoh at MVp&o``xEE}pcXjl`4ii;?{c8ksXg%!7GP)N0^?!d)
z{QuW`Acyb3yT)nZoC3sv<<hk8;|^dOw%yN7B-eu?8hz}g>^sJt1!&L7DI9FtitlR2
zd|HV2mBYWk9JX`YvyUGEJ`L=DEmRFtz(F1W=xEvkD&p&JdiX4E9)yl!OddO{ANeiX
zNq!rCegDNM8C4VUuModJP2ltIU4t*PJmA5EVd|7=y`yC4<>r%ge{yKj2h?Yja at E(2
zp6vDDGl4UW9NWmPeljD~MCZ8l*_(Xt(2_jyYh8%NlSOrt{S!O^^s|DxQ9JPd&AyM*
zCVcZBd~4gM+_$YKsiF*e)#<!!zJ*{!%*lpcD5CM4T~8JD4iou7pd5t^#riwOc)o`H
zst38iREWKS&mH()_-Jx!NIvM(&@K5oiY#l|rrPm`G5am(f5p(1|H}W?sDQqt8U1#U
zsy|acOGbF>>Hhs<x_`Co7`GFC<<Bwx8}#va$N0Phc+D8&ae4?o<xc=_mB=eY1e=`6
zoQQ=@R7i=l2f;VgpzXEGjt>e6U!5ocF8Sf`$gm~;;&4?+_^|2?!?5b1no+5Tfndv`
zE}pkrTg$V=mmfU!^tCs<-IDZYawj~Xn}p9J{BM#WHxnA{qwOAY*g5yG-|`D}3v>P`
zej`qmve>iH#y at -!`^J-!-&6yogWRB|WvrYlMl1kgRX3W*H$$$-MVT)>Pv)J=DboL(
zVDwie+Vv7EANB;rtbdv0mFxTzx|pN%2wed^MFD;9whG`8beR&P!l?SeKR{0f^0*s`
zymq=2<t*O8?DyVH44VP`eeg+|hxt7n<y>I!%j3($uCd_ZQ`&@&e$HD!sZ0s5{TAC7
z(t7B2BU18Uk806;@ool%SoLGJyt<iXzOm-#=>|@^2f0 at ZdMbi1T#duVG$co+Jgjo_
z{kN}?2RthL{uq4^->T%8ly0IESEr at W#OIUfq9GeYcTDuagIUNULhPD968&%RK~LCZ
zyi<^?t%~S5h894t1dP4ed(h_Jc~Z2$8L=uuvkhrR_%jy54qV=hJcEs5!A|0P)BhQ4
zm;;*YWADQbMleMVu)a4+j-1lnz+N_|^kG?;{B+TT2Wx|Pa{|2NShKeqe8`VMcDnk)
z7oWqf_}l9e;qcRi2gVgm_rZtPjBh}EHS}cpK{1agp}SJl79!W`<6L!^-x*nskV|`+
z;;Wq;*9|B~r*;2pa6STCL?)T%nD;%-&3s at a$W{0IqTVe2D;;lPKYCOie`GV(YTNqK
z-an$;8lM<9Hf3r}l@{a-7Ve*`OLgf%J+;$y&dC{weogW;C0G>%ewO7QNqjf;-O8 at P
z3$}dFL@#oTUrA6qe?z at otox<o+9vVjXSDg{eE5T1C37Yy=HV?XikTyhFkG*CIUjVX
z8!W*$kp1zxs|>Q*e#9&2W?NKm!RKEdus6QG8Fu{%8FI3hv%kmL-`f(93+zcT>!%4?
zy1EDQqYUeOIWHGJeYrU^xtbjG?~x;@J7Zkbl!e^TaVRrU{v+0!EsFIC*dE`aNhbEC
zhrM?h)+@(a*1Of}KC|{GPv=8?DfC?u%Oo|#ExfKDYHlKPd^h305a;cIIPW_6V*SC(
zMjtnO)y1P8_kMdB(Np9-g}gxUnV<fTL9V*T7xB5o7pD#RXe(Ud*K_<a_#c6%Ui+;b
z-#-R=sa{QZZ~<#)!}UeLZh=4Z)Nkaz%!OV5lZDU2w;>{RCDy+BRVRK<8-3H`>(O`e
zREzCHlda!*WVU67D_cw+TSiM$&x;WMG5WSguJw4h5`4p_D-DNk<=M2Vhv2tv?Ft9}
zyW>}*OoVk{NZVo{zU1Dj(O7a0z1#rute%B0=pB(*{Fq1uTlVzYm#7M;*sv0D4)w;t
zji-#xja|m!jVFym$HW|9wtyE1?WiLDElDb3$G%P0k7VNimJrI?%tXX~`HWjY_vKkw
z<G#QA4rs^$8^Ik>Z04(j18Sr8vqpnUKF at GN6=;yEJ~f1?stlj1h#%SQeLil)r*fG;
z;iafrqAv%=zTcz=(VbnsAMd^cyVn6a^Q4Nz`rJ;KejYU6+{x{oy8et(+TpSDFaNpW
zP)^l#!$^3h=N|jZz5h5QckjvLM@@gJ??-OVpY^r>xB6~6D(?PAFot}VPyMC7Az;^L
z;#*ya?O_t at z{E_lrWXx8 at D4CkBi{TM`lJx!3tYcLw*r3LuyV8_sa9l6RN$I=)HF4w
zI7dv{U&fLhUwND|I<J1QJ at rC}akwDF&{Hikrn<LfZZ5Wldp)u;{nUkWW$JpPEU)qY
zuGCoIv)13=^`UF^v&hABf!|K#0P9IXmvcPzDeH0Y>E+>#)7SHA%E@(|n0uDc2BDY4
zjfU{A*Biq47WnB$5}WdxcK37HCgM*B-5u8Xk>8Mab8k{)P|P|HuezL3S^1D+&3=K_
zEO*Z{E1<v6#Xd2TVv)9`=%t2~VluvC-%qW at L??)Sf$Z}Oi4268!G-X3)LX4l)#K0)
z_d^{DJ9wm%L)NbGLCGe!ZRj`nw&8b^N6{+z;?=YlS9_p#Tp`(nYZcRY_rD=_L%ukS
z_GI&x0D}QK+=1xscH&PFOKs{DMAwIv_sG<IuFh*LrxU!F+-rZ%QP^R;fE5|V?qBoJ
zu8^eh!z=9f(T3y)!~WR=ABYrbpnl{Z<~^`Qv<7c=>>lq}^GDPK{+}NB`+Gk?pM3Ok
zN!w=+t)tX3_i at pho1wEHlgo88I_f#bl}j8Elp4G$^o`T)hyUD!6LQXSDyo_E<pn<Q
zgZR6f2L;DbS10mu<UVqaQuB_ISR~H?_~mv<gz%+)JwYuMx_8lQ at qDqb^rn%{rz->}
z@%&EsRrX4M8CR_N!+wcwKs<jV`rF+*40sPIbgX at dV+}rKGp2b-+j0Hh;G at cT3JP}a
z-eLHY62Ih99`OqSAI9<yMbefOb70>$`>+-qpoN+tx`u8TJE0j1u~Iet&yaO`!#>#H
zf%gDeH5~n%?&B5|`NIi1$Vd5OBfk at PafBz$gWvi1oC??!2UCwrjlNRwraRFtE$-zz
zn&DG2!?mD)H~hT_UPlFJ<{Wn?r~Py?^09VHMX9;)gC_VL?0=k_fJIV;7>7#4JXG+{
zBMv&>`I=UBkHtH1qJzX!XfwG)KTtgx$tj)$_5u90EsPgrAA)!06;h)u$SV(334*A2
z`*wnr2HC98zcnh7*$#W!#(=ad?*4UaHSJkL`OBIH$LAV?Vh+?jCIRnXJ95e89O%Ht
zTZ<SLcS_E?7yf4Rse(uNRIY#b+9Jp+$=UfC((pIAa;*Ew&|fCQ-#8g`o=nCdpapfe
zuh1NA{I36Gb(-F;57ze%rxl|FhCAUe-OmyG1pAy}MbX5JsN}FS?P;hdfY=he#x at k6
ztA)MVwh&mqIfucYK>o^}M{?Y)xdWdx4ZF9%pV3=seF`y<Vn%K)(bmr#3%%cA`aT!!
zH-`wDi=>9{`;D57`q9G#BLI8ZjNsz&>)0DS*x1x>$o!^bp`#uCzTYPUc{B_jKWKmt
zj5%x~_fXHeiKS_7oz}E at o#xbeqV$c&trw!|j2GZ5TlZlEa)y15n9yo6e=F9@<M-Qn
zz*b?5#P<feK(j+nd_aIf@&n=hOO2rtyK-(V<DxU<i6_h9y9pl^XFhzGClMzD{d?;q
zt7F4lS%xt>tC;G?k2FUwq?t_byVm%GF^XS9{i>=?5qa6G17l=z&V`(7z}SB5-)z(H
z)a3i|4Tyzj0>+Vx5Pnzo at R~Kv(hlhQmZTIT?_ at D#>>WOOMs8dEvV5RsUN)ZBtumbJ
z`OEW%z{f2!tGTkn?AVc9rJlcFPaVe`u at T!?Yay|XZD8$xtrytybHq-DYp?@S8v~YI
zX$c7Z{d7RuFK+}S{&Fs0$uD{RZ-f^(&wwXym at X@)%Npp_o5=YP-CC%X84Y~vNGsL6
zvYNV({T;2MCAdC-Yvt5#at*pM*eN%3L0+U=FKHDXcwUOUDeUvhDP?v!u3v%w-5Ey=
zc;6m;6Kjubg>4eKdFDLlC>pxQ58vU3Jdv2&;Fs at p7J%1{X4ijht6C6g@<?6?Kgax6
zB}Mg|zr!YI`~5VV)8spH{>vNe`5E>c`G4*{^GhCkUg&ZT{q+Zq)dBlA{77iYYyXC$
z2X>LUM%BXC;VAs`@?Tv<&KdaaVVzpf`qdwWe}$q|gFRt at ilqD)UHSVO=ak(G@}+sI
z9~=?bG%7cL1{+!tEhe at sc8x-RaN{UGBQ9T!|Jdj(=q^=35$_^v&7aSl!!zsfOh$Rs
z|EL%J<%l4A2cw!eNCzaxP!Ydf7=GIFn;_+h7)p)*C_}$Ku`oRO{dz(J!3&ssC-vZy
zp98;hOB5^m`=H!t(0&>SerN9AA4##v*Qi=r5Z^F|et+zPBngwBw!NYWJjZUI#nf_2
z&29AjSM(=vf~{j}IZd9SRJmtp at GdQF8+=9ye>17A_*o5nzeKqH9&AIMcf6i<{lohw
z32otj%0(R6A0<yK?wDP3DGQ?%EM?+bUAgZ?r!z_o9X?zzz>NuhlGiO=&b8X)^p|6+
z$sAdx-oDgd?YE9n&Gq*DJlG5IjMq)y+T=5Jl*ROKnx;Bo%h5=eZ_qj3$A6;x=8b)<
zS-{y#%aY&0nm7PEWw9W+wH$pM?D;R$5sy0ZQAgr*9bW*)o!ASf>)7xI^i4OwQ+x&8
zPUOt_j8Yl|KStP&=q${i0mcRTi?=vNW)Y{Dwc8=DtSQu9W4|YPbMOV;*Nl?4l+jRG
zo(WWm={?wyir~j+%@Rc=ixS>VbbODonzqGN#72`b>5_D?@^J<wG=1AC#2BuE{#6L<
ztV<a~vnw-(;6E}nrxZMRkb95AMC^EiF8Fevf-J4%b(y}UOA&WrLaw4p%qL>wgr0}Y
zXNicdHyiaPc2-d}gjeN34war?VIVj^_<sg;3wLvl0Ow*l&qb53r>~7yPwk_`RmHw(
zkSpPvhj(NWx_s{)$gsfdXKD11&H(=#U;*HL=h*iJ at iM7)QyOhrk`KIgg8v11%kwST
z3|(&x`+ZY3vpCRe`(z5oFu4MKiM^1S-V51pFM}R8zF!?(4>|2BsSo<l>x4%Ouw7}9
z$+hB{rMkk;+-Q}{La)5+V8m-1?QbFGY&Ay at j0p>DcNWhy$o}!;J+5V$gRgWA4o}g0
zx?|7}^!^D;?+thKHVswl%mwd9<R2?{2m5>H^lv%*Qpx>W)4!kR>e%1D)4zX*&s+uO
zc0SR=F|x6D?7&%K*8{!7Cis>%EuBsDVOVpm4zu8EU=?hHKS{D<HRAPx(%#o?c~}VE
zuaRC3{dL3UdBKMmEoa1(*j>KDFin$cX$vq`*AYw!*vMP3zO--2Ey!A|&e3sqN!*D(
zpI*T!- at I5Fw5B{KPBTjHq1DNow{!<j at U+k~gxdNePbo_O*)w3m^>4%XI6vTh6JkD;
zm%UtjFTLyCMAW?zd6iNoen76 at +o8-6Jg@T;BqOFiZ>}Gs4$+6_3BG2`f><U`XY*Nn
z`TWyvz+yc@)|MRony9T_ntN#4M{O5DR&IcuxXedm-*Y5v>^<a0S at o<^+RxSU-tzpG
zvUvU*xrVzOX8ZiR_t?2vLS$L!_P^Jv6_r|F&Ms~uU5XgRVc<py6AErV^~}86UM^>w
zkq>;*1H9yJT2I%+%jsEE?Tr$j#Vs*Dh-E2zOoI5r(NbLt&)ApAc?NmRYJ7Bvzkp4l
zG+@%|(iLI})=aENpC>;o`m at h#HqS?&@1*pgS21-KbQ%t<G08+M?5#u&jul9V9fgA&
z&6FRdqhDvdpl>-#wNqMpD|pEmPl@#-s%^YwV<r9Tls?7!Gj!oQp at Yn1Uc@@Fh+`x?
z9RCu01dt?zI!FJ+K1a8SsdMADL^=9SN&f`e8%+HzE8QzUq;WLYsMY354N}Cshkxw&
z7QER2J)V3bx{foG$)#!;-2v#u9vp_w_&lvjK8~DYM(EI>Q{z~D=koNPL!f^d^k{h~
zi7s#_i?>mV`(-TthX~g?uzwzaue=pJVdR8}9!fp|pF8L{Z+Z|O+w}Vsj}6_Ho+`AP
zK|7}je+9iATL%=TnLbMFU(i3YJT~&vL-xNGT_1Son|<_~59V=-J%@rVJOy1s)n5BM
z{IS<3`8%TUuJ)l{Tl4YUv2Pg35PS=onS;s5m6!aEW}m%=<$+hyh{c(>^Iy7IGJoh#
zsg0mjtSj=kcn at OVv8$8UkhK)+h;vH}^$;Zk4MdQbpOFjlIL}kdzD8c20>nlg?Wjk6
zt?X|lbf5O{$cXv=J#Q&P!q&68&m{(pD$x+78Zju88OF%u%WndkZB53kIeL#l_#XZM
zee`Z;5BPo^-ybsBQQmDzD>b}Kay-7FdsbV_G1%+qvXw2_Ms6H=AJ(i7!~D*wN5_Lr
z(8nm8Qsj)>1^(bB_TAWwSq~6B)8lC+wv$?w#1IPof%_>uqjC0l9G?FFKYkPA8y<k1
z1MDJNN9uX%jx-}w<)k22;Cmo%C_35%YOnLrue13uFBO>&#X?tx--l|)N4LgFuX6<O
zFRz at IJIVdHDVg&ZWdEei_=a=S-_)HkYc~0&<7s%0C&4Y0VH_E$g+IXZ4A->7UZ&{R
z;Zv+0t;D+j at jtSFFTm!MTP6Q0P`cEm2Re^&^6mD^84u0=Z41fM9Dgk`R3*(u-%+mn
zNqwX)#<T>oLG<f(#Eu+Ad at U;*JF!Q6{L&T&{771F@|wf``SWgDZrb?}L$pc<9m=(A
zt=PvJdak7<%{#9tZQT)!aes}V)=AmRfhp94TvCN2#lTuK at dtQ1$UZxOg=k<d_5X@?
zTDgUkjmj6zfIY_yYy`B8x=rPVq;FKxTSI3_E1**u^j?i?3P%L?h})uA$&A4PRq>P#
z$p2%{_&0E*;^@KQ9pf4QDUJ!@@L|h!$V_A&eM*h}TsGM_cIM at tK?{{kuctJ0HvH8i
zmLLzcJu8{P{5e5qB_D at Q_=I5GhBl2JCcL><7wpUdn1hg?0)_&mo3xWp!scyFIMBRI
z9^X_X*x7syIj4(BK5*Z#3x3c?fWNd=M%U4=Lod72RYn&tz3L#?9d#MHu_~$&^0Aoc
zSy3K<{gKtVLT1qUj36fUpsOq-H)_zK*P8F|7A%rlyuJ##N_pru6WKcaD&p~V9VA~;
zC1`zy2g!|o1bI*1ATr3UKCB<5h at CE*Cm*#zCwEIE-fH2Be8MQX5A4Ig?(omRJ0Yv%
z|5Zh*hX%az=<_5`5|Lv*lo6T!)(v(I!n*1`j=7rbGlP<29oQG}#fAga*T5Rw4~)eT
z(@_6EupXS4xf56iN?Xy)0<1^Fw3Ox1u>Nq{unv6Zvzk&~y6o4I{TZd`?{(FYy?#tZ
zEwm$kzP}eSfkTj+4pEVs{<MW0Iq>Gt=eHJMkN5)PY`v?CDKd}gU3#!Dv(Jx>koClS
z0<nZY(6P`RTac4*@3gM^Bb58m$7G%y#`!_`^wtb%n}oEOGeG>eLBobKyQcNvUroFo
zT|2F}hMtvqed2Y{%Wp$3x8{Qmfgg$aDW(PR|A!A^lhC8sZbEE6D@%HBf=+|U>Cp7Q
z5KLbmduNFm^9s>&Sl0$9iSswI=Em34w>{(})|uF at n%b!&@T>R-d<|akx5a3}Y at Ujc
z5<%YB(7U(Ue2tN5#bf6=@NJB*hc0lT-R!-I{U6aK7eY7kFM<j1SG_Rv%amR?Ifc~=
zBPPJ~4*G`G3llkqr)6>HR^WV+r(k23iH|9Je_Agl0ey<_zm!SH(o_ns8u*dbOuKV4
zWa}D2pHvTI?E{2X+4fn8|Fzez at R0?^&}rnqVk$WqOx~&*CIEC*MC5;I3+Sf~$C!6O
z;K;~7x=cjYe at a7QW!N~_%ne67*=rt^tp1L~#@1~pK4MPmIZ`qtT5|`vl?U*B27bp}
z185a?y8u&s24Y+_L59wQ1hWJ>;-r9r_<E^9a75vxk*_s{7goyri}=ulwj+PvzTTB1
z<)HuDB5_VHe<pb1BIgTKt+bLqbHs}46UbY2fj<-Ss<wHJdp)n6+0i20*o|^K4k?bU
zIA|Oa9QAB0(nlDF&k(mqkz9P63=>P?)Au39Rj7rYLr`u$PriA$6nU(AIR;N!+WyiA
zd=3=I8Lk~H9o}6sFkD)q6CmHBwoWt-yN^(yAo;B!zjo8Hlp1lto9=kX<3EfYvNo at w
z6gQ3bF}nGS21Dx7zfZ(rE_OtpqJv1DMeI+L)M^QGpS%AXdY3_xYjMb<3BG?p5!EMI
zKiO#59Bll at rq+fJhMiks|2r&jBl)|Unz<(U9QOt;+tdYHgb at 0aJm@QXrl0*C`V=<L
zS5q@=AoZagM=GIfB)PuOmqMifrP*9x at zNFhm{XwD9Fq5`sg=Z~O)Qflk1%J5__P8u
zV*vfd2qKA|eN{E^8pa-#flj)S-wUyk at fkrez5ju|5j+CEsR4B~yBuF}50j5NrEHyh
zNM6GDZG^|c|4xv+VAHY3j1;*vV>faeiqunMDcve?W8;i}rEalp+ylFd8_^B9z_%Us
z at 1Z8pKIC<b+!12gq?3A(7`gaukRknvOfi7G2@^rcOR0qpxNLZ*^@LP)zmcaHu_S6n
zniAEZs~%u;S9x_$Rvu}5EW_)C#{8D_#BVUS^Dm11^JI)xCM|ziIcNsn!40kW`TB4+
z1}m@#`Q<Xu_E%JmoB;1`$pF@*1}cK}VUNz(F`L-4GPw%Or3PSh?U-H4|4G*Z?D%2|
zGH1NhQ8}*IR!;0=|LyvArwn$AXyo(wDPw%LUJ!w}lEjHPc3vc6Zk8iXw;pyy6)%Zr
zMV?>yUBsu4R>23Ef{k!M at HOlN631@j{RO|%)C4-pnZDOQbq{rPPkOAWc3A)XPYU@@
zjtFvcCUvAa4r6;bNg@@G*MjbD!G|>d{yu_Lf;cSV!`w{96!n*2Tz7Lty;t~qy-cHJ
zb{jthcFCRS%U%7PaOe$OLFZ)bSM at pIZ_(6 at cr2NB1ewS1`PC8K4*chURfIAf at 0`Tm
zYNR4tbg-N6!aM4*C+>R2Ev($J6FOQk#x%XngxCRHstI$n$3gO*RpFT$JlmM0z_oI#
z0`~{Fg?JwJmG~XjT>KtPwcy^VHsnnI$UvSacJ-WQqRS-o*@B~aGY<RRIBe3_8;*jn
z(3`C(I`(_9mYBXvjC`b>X}}@DQHP@*M<dpd4wTg>+i at Jl@gt67&|j&h=rTMIxPmiB
zib2meMdIvlux1eqJ>=IDX7XnS>`#6d2kc^a at 7@g=BLj)uMjyKhIMyn<8OLtqBW&5E
z1y)8j!EV4adFJwz0&{6fp}8`JjU$&<P1U!3JL;=Qwn>Ll7LXk3B~Ow#*u);`KE%LU
z1>NTJc9OrSo>OW^9Q%;Sq#iPwhKFiR7g#%sX6k!C{>u4+faFzc2k(L0XabT~jpR+W
z<6MF~-2$>^n%0qiO8OY%hunWuq%>&w()MqM27R>d7^}%DXB_gq<qZw4x5*RaSBuo$
zf7 at sY6+#atI$n+aq|LwfkScq5hnQo`xIFVCercE?fnXfBip#OTZ1X5&WhN<Cj%&@~
z21d(6iSs==<TK#pd>HR#Y7_&92)b(gX0Z%gR2&kcw_PBS1|=$18Gc4SN9H(=lST#X
z7r)C at v)4q|gO7{DI=C1Zu4H^B!fRqW`y*UV at _@TDa<NE!uV0aB&L!kctHM#+iM<j>
z18~$TaM*C{!ck4^ukXMHwg&dP##=##)6uJH&g?O*?VQEYZ|dUtF~CE^w>02r#8KA?
zy(7WoVE?D-fBQq%n&)C4m8OFqu4YQ4nRv%;JO?~@;I|>h0MD1>unrC0I3kbRBZ2S1
z2XfUT7tw~-FjvZP(9o^CgJT|Ws}YaT!H`_uCw>aA3F||yI>d+$O;WE4QcSBoAfG3B
znO4i=CRfT;?<3Z*xkIiB7syp#D&(;bd?b$>3qpN+QP)#Ay5(`>UU*M6;fY}@y5{1b
zV_i-=X~gNxAu{NYVz+QfQLj at Te{Z8pZ&1vt;@)d=)d%13Q#xvV<D4nJ!Oj%$&aS+I
zzpMq|wZFI*GRfz!&o0Uz+W>pSHPBoq>f{Xl>eht(Dg?XrG1w&ZOnXq|sYo`DBzPLg
z3z at 47r+>&1`7Fw5Kdqkg!*i~{1200Xzoyqo?cJN{yMuG@>EwX>at`qLr#JcPc`B;<
z^eSgKa9^J5RL?oe*JC`2p`+`jgY2_78ePD>w_VOq_cN<`erN7!9>ltLTOJn<uSEJn
zlKQ4G=}61K#_l%#u>ekSk{Zv<YSY_i&G{R#MF{$wv*qzK{w`2A_frn%4wqiy^Rwc8
zjH^LdOy<RImZzcMGx6#&JJvn6&!+d-tX9Do{Ul;V&XPUq)nyYa;TLT4d^^CDa{zIO
zuV6nM!x)0+Uwu(JKrMoQ#U--mUEz at VNyZ{Wcc_8nywNJ>7@#|!;gu0+d+(C140ynh
z)yAJ1ZYn&Bu}m&fT|WUCjbKX|d at s#yXNm;-n4!GSRuI2Lg|yOhzIZe2nR;M+1J at b+
zN|$qhr)@J}kH4JKBTY}~Ue)6Hk-0y45$-9SWNjA0W^a_MZcM`F>W|m}GoRo91pIlu
z>wjDyBsRqaH`+**x5PZ>7G!v4u>`rZjWS>WtB+wmJf(JC09INY!Ae8D6aVA?hRusZ
z4Z!zL5vZL{7S%6G4_!y(+`#ICfx59r5j)-`!28iY*n+q5vfG5nfn;OEoU6-f2do)8
z9wK;W;5Ws^1XJ}cZ|toi`;`-zsgSe3>L}&PNp8xH4?*uw!w(63tW)Ls`4m<Pse4$x
z=$=rmy+r=`4KYvW*oD3g;w1$|B!6X(6sSg_Cz<(qXsx{(d$NV<cBXO>7b=h2_5iLw
zCLQP0EYwMnD~3MLe;0bkyLiSu&KuGp&N-LUz|M*vOLW~k7kGuC?UZV~dqD%RZ{H5o
z9}HY+I93=Wm=PfXPA`1mgQR-?;#I<f4gF!my^HQeKj;s>$ntLOz)d_JE(bR2VnQpv
zm%JmV?h#rGC;2YNfgdnDb<ZPbs!xf%26kz at 2iR)x59&WRO?&LKQWN+qHt%!)Ip9K&
z at 8Hqc1AQ-H{tE>%!rM;uy?bV0*}=e7hBG}VUnFaT?<GP06b(l_<eW#amk7=y+L=K7
zLhv54|66q8nL7BCT;+R9OK?7bHeA3t_C<0o`JC?^YB*UQZs-Cp?U9G`vT#FBC-?=$
z)b-<D;2Glf4zuH5i1%TCTK&jWj!wMmYaCJV7pQpknci102N!^UA2?54t{ETnX at hL-
z$G=eP;jVIa#VsV??(7=Q2c~f3RdrDS=h{mjNQM6SwZ=U4^Ih)ydM^#{v<&8{J-RTT
zUjBa=`}VLV&h%{$Ef%K5T2QO8RYXOl2LiRO+u8%Jb=gQM6{<3&X|cQQ%DQw{t@|sb
zl7xU})Q~`c5CY_g5CX`-6CxF?R#ICL2!*L3Ap+HwtrU<d+xp$_BzE23ckT6kf8?6U
z9N&45&*6UV$LC7cHvd1?>0_RDjg$3nZ6SUd{0i_>L$98g3?7dNZ5HmnVPCTsy1`Gi
zA?llD?T_VED|y*j>- at JtFWSTT<gqTE%zlgHynCDYsL>Di)9pf)sDG%ScA0y8>S5%V
zx=H-WJ95DHR*3aa;##|>)cl6c2i)mC6!N=Iyu?c<eqWbNnQTlPmxP{%d{aMkymr~k
zopQZ9_o2f(bxlUH{tzyMtUt~~tXgPuxRS2jvi&>pLFHZk0dTbKTiu-WuzcDBMQysh
zkDaOTaw%u}?;v_z^;7u`yAnuzFnLETmnT!JUz6)L4(&r(Rr^VfF{11JKb`|T<iQPM
zV-k7q1oRSOCt7-Sa$ienm~v!JTH>{H5m~F{Ne at R!Vg|EX=ap22Kc=NxS at DJzO}1$}
zjo6~yiH;bI<zU2_w!rpe8gC74o|Q-AIU^r_EWH*IAzfX9`?FgIvw|PhR(&KIe!$4n
zR_)Cnpp3hu4#FWlo$$u*k}^8v+v=dj8!j(-+d=>TKX2y$*Yi9))wLnusjixzQ@#CB
z1 at M3SKmB*TzD?>2$HW_y-ujRT$6-5DE*+cPcSgs+rWW*aW$l`W-IYU!(TB<c+BXM&
zZu}(r3-c$x-*B1DG1mIOi at xOjhIdnpwRGOZ^l<~>$0qOn+A=?{dgUxF;m!sV;}H_u
z0X~ZcrXFn>zZWs$<C0;-$qrjd-qW=OB*)@#6_MM~j_Auck8|8UWK6P8;&s**a{HCs
zaSe&d8TRZKaQoGsd%688ZoiPk7<r$g;r6}PbNk-wxqVzefq3%&;9D;P_k2ZP3g+dx
zOF6D^^ilDeV{Qxh;*&(C2P!t#(};C-#FKC1FaTJ~!k!@guvG_Ng(+yNb at 3XzyNc9_
zI)m4~xwFmu$(7h2`*KW+IiF6TX)!o05VJ<rvis%zuw at cFNCSI6b$tFIdHUjqZ6}j+
z?cW9MhV5Z|)0xZ3%wdMhp<z3mYKL4QC)_>;*WY9H!Tx_DJSAw8xQSNau1|CAnMW;V
z#TOL7>Pi;3*$$Fty%iY!2%a at Jc9^N~JPW#V1L44izbBpc*}DG=lQYkzcV-L3Y2^+J
z{}jP)I$tOMv8D~$6#K=ggA3nb6;9dC!G-XTIzAzJI?%U~o5Heemc|kkeYUM!o<Wro
zE)!sg7e`OMK;ld1V!mu8^9Ax%T<Eb=hrwl=-eaaJfb&11StO`Pn2q?IOu3oln)^j3
z7!oM#{i*N7Dm!ir+aij9TRj=8?5jY`Ti$4;e_^b0vKBeD>fL6MiDwDUj#X-mu}ZoZ
zc7Y*h53%3DR(DaTqHh92t%g6QK{JCnf*3p#xb!Wlo%6sM)uscdKzy^J{Cw)wHt<^7
zk(WmnFRVwt7TBv2cJOowNyw=J9_nUAMOn`|>M;BiR$Pnu(JldRa*i!e29AmS{UN(j
z%pcXvyvn9~%YPEQzU`E=M-1*=_+1lrOspf{oIis)zGi{jq{-&Nrm^eI=NjCW-yCrt
z*W?G^{eM)bu>Vxj at Kj;+MsFQlZ8P3|ANQV1c-IZWfe9H0ZA#`{pH9~htMb(mJ3|k6
zOn3?o&-NYXe=Q|_V<MQB7c1^lq?l75Mmy{xeU%Dl#WB;^**DH;XHRR9%$oKlFbAj~
z^ois0^x#XjBjDOUo>pyTk((5DIE&&d__X**2E|v;!oNg(yDJ^*(ME-|$oh3!rLT)E
z5!5;q8~S-_ at bN3qj(W7=AlFaZ{Wsv<VH4{}IXXx=Uc0v((bLc`XS5G97A`kRyiLRL
zU5|6T-9r8%+ljtx<{0UljMVou|6QxYCiNAkS*(5hdP_U>qQhZL@`|0hg;UvF1F)|s
z+f~OuNZC3vt>2^_zNc)(_m++HW5>JA3d at F&UAFxBI^-{pmq~=svslTkU_Lk!0*F81
zY-HS&^CaH0S<n4HkN<t(w~Ip#xJ<^fB9~zZCju+M9J)V7{9Il(Y~f5*ic;S4iLR(k
znf!R7=b2nQ{<a{@WxzoVB4>B)qy~I+^}rw><SBxrjsqg8KrE6XzVS4f7usrt^-gfL
zP{;Xy at dYmicrNnfgUOwvKl1X>4<5!l<*^l?XOEDz_BcPzQHgPSnx}NV?|Gkm5L{~T
z$5h`$f6W7q-~18Bb>ta`sXB05Xx;treY8lDL@)5?3tsoc1Wd0w#=iIEv2l5+|4F=K
zzpdHhkD`xk-H%)@g;+<sNu7H8dn2V_CG&>qJbOQI$6As at XvtSL9mdUj$je%ZK6-DN
zuKOH?-!gCi39d}fpiCcBVm=*S6pnBDpX>?bi;wN^g`B+f6B3&~?(-|(N8m*N_-N>9
zB1;66N;2g4Gl^^7bW36PUy9rcV$x^!4$qv%rXvT69DKU_+v>UeH6p4Ed2lLv5S~kH
z_QFeaSx-Iu;mF6<bEwsvS_N4&o5X)PQbXb`#nH0XE%2E at zq&c;|2AZ+P8s)X<i{MO
zCCw&bJT;BYu#b^Ge&;y+U at rnQs5~TtkL at t&zdSAP%vLj*qazdlG0hQ&d0D(Sn_0*4
z14}BLtjVwPqdd?3zZhJ69~;IAa`W7Ryt=c at q7Z3UfFIPLfR1AbIyZh)I8KY%X2c10
z&ZyjYB*Gn{&1w}{r*8q)P|x-<290q~g~pivC;WWyTZZ2`O?~<x3m=)L{?SZL{e5Ol
z=e$>NeHo6KHQiHvG~M?v!@dq%a$Tt=|NhLS1z3-691?%!#~7I3G8M{g)!;Tp{9z_j
z9o-XAJBnOZB5mjv_EW?|WmC135j^dZ-UInkfgJyj<mcNM7Jl8?HB=cZhE496R>KoW
z4NEOr9WTb&@?1`TIrsq3AIDZFcgk9n$%c<GS6jlyvkdv;R9)D^t}FhVelg^KI+j4N
z0sepgJ|jFdx-0%X<WnEuaz2=75ynOZvAHqf?Dj(~@o^VV1tZT=!fe^VZ%X>D@@#O$
zpFrOmMcZwwN?xNB=-vZw&l{bNO~0vKYW(zf0{(k)LEw=5nk9S>Qx5EdAvCa!#F_5d
zA at j})$A2=U_}TmY$@=xrrlu4bvDdk7MMH<usQkgNI?>;UTq|@OW!_r2^uEag_(l~Y
z8~yWQF87|mu_nUB2CnH(T)*&&TnDhW>fsmDvwgtumNb8tcGmiLjS-xP=LI>53hRi*
zc)%>G7!yPPfQ{}@o7*HaxK(;XpNNrf%A;$Ad&a9+-F}%?O1%-2OV at 7gDh|-7W;T$R
zT+Pk7;!W|6^eqdHoerC>csV9Y;1(2(pL_3=TCye(++la0+2wg=)TqR~d2IZ2(5Vtb
zRJK6hCl<7{HULkw73I!Dewn<HBmT#L$tj|MH6Xm|*vFi{m28Uz at a4reEXmjx`p*73
z*~@2342;URBc=z~IQVNj#Oh4MTt)UNkS{{CU)HB%h6Zf!>DhMK?}-gM7~a_>-HP9=
z*&`6WCwExnS=5`GYO0rS*$(!zHHzOv#a&C%<gGrjX0xDmNDj`Iqwdn6Od)dBNkaBc
z48Omr!Cfj8O16D9!Zd^5vjzHxn9hYS)aqw)!Jg{Mohc4kRrDM<%f48Dl`%zs13zH$
z{V#{C0>4m~tpd1F17b4!aV(YSB*YK-aE`obM-hpwn}|#pv)JgrG4C+X>`Ht@)SRVh
z$XvCf%VOKv$@C*8 at d)l)xZWr at vo2Cl`(19-<#kTSQTixTMt?I(L3TNY`Q8E?$(vm-
zZau>0a at QIAR8f~(2YKBze2ej80yph0YFV?o-?VXjeDLKL!PRM!v_~I6S at Q2J+Od+v
zc8_fgopaj|n&13$a53Vr^0 at K_gZml%lrg}5{ASnriQv at VeOi$+Au!P5CPQk5!Gb<X
z;v?Mfk093p?4mbs2Lmf`9T*{3pC5DN2~mrA$2VmOAs at Pct?|{ful~H~$vHnSd-CC!
zmcBh>%TnuGjVZGPH@;f@%OZcp&C=w#quS8iMrZP@(QC;HrXO|s&(Q2v3tbGH_&3aF
zPb(sYPb(*0hU^p)a?^QXWgzvptp&2uggLVFeZOUDfCn<}xHK;x_>7l(GMWDgvqpu}
zM=TOy7j<T<hI)Cc`qrWqb8Z3OL$z<!;@t{?{=9f{k$(;Y{8r;4WwOsK^^bGAlk=m_
zt~-MI&zzeZjk>j`O&XHB8<*kyt6aHG;n>TQWdTJ at 1&QmW at 7ysf-~Z{+kPoqrgsrMP
z2yQ9JrA~SrxvmH&+0T|>$fk?u=fL-~9Wn6>9Q);+RMkTG9B-Y5ta_%cj6Q<nvm8bo
zFI||8{fF)8A+v>b8dV$NUW7d?sxGIP?9bUij<eD>GvfJ|`WuCAw&ANX<a}P at b8KR<
zJl9vx%Vu;q$M-)99?dRW8J!1A$rQ(FIc#X&bF2K*g@#F$_nfbzQk^R(_nr&(S4J61
zifu;jzBzUY-Ypp_z5r}bq`qZ2 at n5*Kykd(pzHT@(JjbGo&)KYJ;n(oQ?6|bx(nMY<
zzXS7&EKcHYR;mKW34Xq}(UQYcf>$1SK{#3IHl8&ulkh8u?bGj6N)h!4t3s?~o9_|u
zTVCB<KYp|4D0OBtax(QjOIbE`Y9lVxQ09~(o|r9BUx!`49OtE}I{0co at I{<FV!#_p
zBIsh*t3Byd8NW?25Yq!W$H**>$nibK=9YZNZ(|m}9A5HlREN~vgM6IP_gyQ+Gs_~B
zf;v_oCGK<1%R)Yzd^X#Dqvun~EH`E(YK*dF8|xu+v|`=;3h`lBH&agema*BU!-#z-
z#~M`4ujZAp1rw2?C;bjU=9a>y9<EXG>ai~q)@21RQTvXtH?x8^)?Zt!=~{ha)5ArQ
z4R!Ne><!4cquw?Bu<M5R**f-ysS?k&vUz?d at oZi1LGtW?+%&{(q~+T(IPU%d<mb$!
zWaD*-`pxyeI`*dPEM!s^_cU_%96&zLeUbXU9>^rU*tRlaUI8^i_p;C><o(L`hY^#A
z_kWM)AHe<JH#577)fKzd<Xv;ee9pVrgf81Cbc3;yhNs8aQfdXh=ZsGm*5Aj;``XHp
zC(r=d{|w`#N`t{S_>ZNIN*t^A9y=7DTUJ1DRa>@4Chq8Kwt&m4BB(n{=hNNH?6var
zbh^3%KA-xOQ`H)58<5vVPakY1c|lIVXVZv20eOm7%gVWXn>HUJJlNF*DW`B<J$G+9
z)>Ajhcacz!{A2A{^Io*MNp5iDs5-}H%H+hh04&Bzo`J}pvVQ(&@UJ4jCXvmMhfhbJ
zLVtU;WYKe-{p(SG(f)r!o}~}bUZ3FHNXK5AkM9ZoUc0+bMIB)>eNQtDRAJaZT$>>C
z79&@!7`a-^(47>hpFGr06!0DIK=vvPlkQubROX_inh16Za&)be$L(utkM^htXDf~u
zIdh|$@Eyok5hjOi9`R<d|9*kFx0Q^GfSggk64U%TI$-p3exu!u{;not0quUK&xa~a
z{Zp*$7bSADmeZ2bw;d+Y=|98&N)<EpAH=NfbXeZn9V^p%&(|e8;^qBJBEf at +tPc#4
z{ynXe%0j;KC*~c-_{c^cnL5Z&YS`W!5;59P+EYUrHZ{Ojm*bQm2d_2e8yAVAMPEM)
zY!h%(3PZMkzCn>v7X!QWcqLEUY;01^1b at 0fzaz&193NFkBj;}K7TX)aFSxR|EyNhI
z0Oxfca{RwAH$E2|-lvEy>^qG5zHwQ at 9`!pJ&AX7#WcpRC3`A_$AE_g~;CJlR3a0V2
zf*D^cuwQ)J0Nf^WOaY^ONid_A<n%g&I3hB~9Q2f{&s#3!%00~5{VMs at l%iK%w>%6O
zGj1Gr?MtK=I=&FyKOc25|4ZoE?6jZpt^>$@I09K7I4X7#HHvXE$UaQnP^zXc#5f-o
zJvkG8?wPfSL)G^cpsqfPUD>CE%|^)!VLx+J;9MDW?=tq>`k*B{5JRru&1HKrSIEK7
zn at u&+oybS{3U#sP4XU$e4%N}KjOtRp|HB~Oe-Ruob=Y?1w+gDU?Z`hPuwdH--ik7=
z&d(9wpI>7j_+&*7%{T8XbCm8h?_091#6GrVyX#+E-FAEH_Gdfn0~4jleR%Ey^3z~@
z5nCO$ox(2Ya|-mwt5}o!v7hbwJh_wj2<0aJ<iw(o1~P}Ynu4#!DBCiaC9rAuk-pc5
z`6g^?Yz6uoa;wpLuD=zdzvZF7snFkYx&Bsx{>Ggr{jD#PIxOrIC^zK`P4xE9^TL`I
z9$`ytCZczs?>vmYGYfs0;rdn&`c?yD3^uzGd at kV`WL(yk=pc92$CI2@|7teMr2_r@
zq8)k-eCj)ZIU(!F(jIS{R=93p{Mr0J6DsNa&rgCQy7Vi&-?Qe-G$TJ)>CR>3*(4Sp
zIG&x}`#Ql7Va7d*&+~AP`QP`Tj_<t(zR#(nz^9(GaWTD1&Xe|FkhjUN`VoR#{fzVj
z*VnMOkI<cV5s6<CUW(Lzv&#D(J6FCo<QOA7h)KMz=6=Wp=K1ARZErz~CUrCHO?rzf
z{@8GOcv-CSYh%T>jekBX?=ewQ=6<T}f)2T3O;pAO6QyBI at SU0{JN`2`PTEzbuBR(5
zfbWC;v8i9!%nZ<vF!w7}%O4^+TbQCIBV>eS#4f}-fj!Q#r^9}h)bkltzIQ=;Ikwe%
zA8$AHG*DH0OU94+T=a1JqCbQ0`&L_Yq3tmI7-IepuuGg_+(ei5 at YH*_>X8FLCs*<G
zJY}^0^4KQ*<$y^2FAl8l4TM*py397)Z$KwO4!NR at tcn>%Y<xvu0or)z3(TES;o#*K
zx8EP7 at 5pr=TaZPL!=HbJ{71VF;r}m)fBCET|1XX*&S#xRUBa{ABb-^iKoO%?-|rxH
zsCMGhR;y+j{ENS+C{aznjyb&@ZL-xr2fmLhc;4VhIgTM+31oTjozlB84hnGm7tHq=
z*xusKe}!wlK;E3Ve>hRrBAk<wvc%}y?{}E6wh-U=C2u+G+;#u*UMC{&`1LxHlML^N
zk3Em-CjDF387W-jKpz-`et(LIMBeEpVY~f$P at zk{=+nr!rD?#skHxn1Dr4Jv5CeO7
zC3LtVdB5iD3`>7uiC%7`Oqzo;Dx-Van%6o?MkDgF(*5(ZGNZ2u`ZpIv^xIU3H_H*!
z^l7xiBIyHFn$oN)jdey1lfEm_T~SgYU&SPD?$m~h8lEygf62Xv=)9uw2gv at r3}k=0
zLOz6;R at hbvF9wqYEKwFO2mX?P*rp{)2Yi5czC?Zl>&sUOx5(z#-}-&O1-|UBhi=y{
zp*zt(&f7(>yFzzxF{yb%eV at u^<S^(9pxZ`H1P>L~F7cs+wXCA0BDx(v<gf*%kN8xe
z=W_kYKzE at Z&EBNHbix at xVnkTg6y@4WBu2y~k0=<<iYSiIZc=@I*j*^s^GdF at ge$cb
z9!_KUIRcRfF>pff<FHkybj5tJx_a!H*+nj&`9-MP27!*vag=#DyXDA{P2^cSa(=s1
zYxCTd<C3ta<SItTQ_eK7g^Bte#2nu#M$E}<g72GXB|gldebROC4X)&yi7%D-O21vr
zD<IshKSc(lIAFintAf8Zu3Crh{SLq1*))AODeL(3!0pOyH|fy8s55oN at Ig+17p^1n
z&G>X#zi?N~f+Z=)BgkkA3I2e0(6uf=(ww1 at mX$t&xVv6o<RsHTW=Ux+2ah>yvyu8c
z7ze;3y!l3AE4_J_<E8POu&00t(ZMJARLHJXl{Mq=1vb9jg7^gM(!z!K9{ck{`xNUn
zQl>_(^3 at N?6zh2f9IuFQ(M|Z}a=5vxgv?z;SLLZGea}wq;3L`EjA&J>w{1q?FF{{e
z&<0=Buw%MnRpr_vp1Gn#dOvXOHY5Cbp#cidu>s9+rVrH$K8M;+UiQDQMXdaO64OZh
znPJd at xbxtrA<yFFL56F^HXl60luZX&Nknu_<@TgRjwfrjTo*E%A-;j1c-fePRm at ME
zF9hv~zIu?Sjnp6c7+4JO5-u&U-zM+CIKM at 5k?_AHxku3EU2?=i3GC}&W7!<b2d`{w
zn=J+L(5vPB?k<Tw<`sdmyI_2SyG&BCxiePQmo%Z at a3U*{#Ci+I8JD|jI&w2<GTkO}
zUXXphC{|`mvOmB6cM=`b#aM;o-+daPoc^P6d%z9j_N-R_zidVQOT_f*A09#8JN?vr
zXI!glEOGNQjs$$0R2V-QOz&#?IT>+J?!1{5o8wTP_X)n at 7IKmk-E{5u#Q(aYJ=98z
z*MnoSv6QYIZSYq&mL~U&9$A*>#Ts2~d|#>hhh-A;lL}mzw6a+X%-Q|4vhiE!`949a
zX05hi+G0ull-tR|NPYP`6ZeM<F)uM=lvNOWJ2-h-<H*LPGI0WME=z)iBD(ORZk`&p
znmFjdy*PH?h(6iTxGFgT9LlQ3Yso%80VDB0J29^rlIKJiNM3B%l;1+E^;d|w{!$p<
zcw$pd#L;!CtZloyNgW?*9SFWPn0&cWw<5Rkf0W5To&u)5b47dO0G-pgBKZxJ>BUun
z-2WnQUL?Qp0Wd-E^)$NNQbzAirz$ps4+L%XT1f7#;N`g^{lOC0%D8>`V6YVXipk&=
zb4U7@&w-7yLZV-pJ6e{kxLqo2|B3j7mWRxm0H?ui*aB`Fl4p768Dcx$*l13E48HZ*
zn`&Qc$N$L2ik11^dew3Fei#w}Td+Iu&%$^ngCD*6V$%9mmCs}DE>SI9%pY8Bjeps-
zjoZEw6W)8}+8>1t at QD{lKP0~Ok_JD-OT(Z3cFChS_BVbDi2<DooWb|Y`0PZ|xFqoX
z*jz1em4SZ-pN|Q67k_dtY_(@BAwS2}vu`aOJ1bn>9RD(~pp)M(D;c2t*R;E9`u at o1
zS(B_XqDXW;VQ18)4THWax^n|K!L!_qRCb-?k6Oh5`;T$7?Z%&=qgQbG=CZjsRDYi<
z9()5m4u3TFO~O%D8BzO1iQvbt#>*bSdJ#bfu0EKw-n0?=;LVbTPzB_e#XOEbo+(0Z
zLy`j<u`)mYjp&U$<OGHO7AkB&u8MB_?9kyB5-tpk?PQ^z1y1w|_+TL$=-EbXCB`-8
zS1w=D0e%X>uMl4a at s|U?mPYg^=2OV1i-M%kjWD;<ad^ieRma*UcLV$gpCVVmEBqG)
zuY2NardOU3%{qQY6sl+EO)Q>NQBQ}=#y;}IK;~IYxF<aNqRh$VmlLB550E at aJU%-U
zIr{wNnQCdZfxj2uv=z3KIgpurNxnFgF&;Se_>oG2H$&{tOZ at L`C)Zy^PM>td`Alqz
z-}1BT0nHx?m&f$VR#CvoRuS(q$}r6~fHJJYK5t?g;acZ6g1_l|+i~t*iT7T<>jC~x
zgd6Fe^3UhWk2nmJ|Gr<#FDCcXdr${rt`3fR>R=!0fbfmq^X~cFyTiG6-}m3&jk)-L
zy&H8hgXGDg_#v~gKlRslw;%>lhkSUE{6?7 at xnfyfisfsObfp|R^^3@(DI4#2uX5b*
zUUmE|>E|1d2_k5zpyrNBBZ)nI{hVzTwHp26nFu9gqMJv3qcuf~A1k at OKb*AxZtmFh
zjk7-60{c}kmw)nY at CEFi_%Gip|M36%-WlBY^11Jw%6+c{Hq3Rv!X<^B`=SzlV@{99
zcM-X<rVl<htS^JWT^f4#68R0=2-wnrfkyrfGh$68G~xguySA{I at M(5BM;2%)9ovg*
zNuJ*W4ilT}C&05T*!qAA&Mee|`&t2P0`p!Ke66POWaJ|)>@P#^AI at jb_3bh6py$ev
zQ%-h{e`=<JE&~=KSKS7TN2zT-qqq4nI@?OdgnXVy61p(gpf4^BSaA%wOuj|Fj9h|S
z;P-0 at -_l?F367b>GOTlT5nBt6S@{t{9jj<H$~nKR{7=9#zXObume?19GT=8-U>t$Z
zj++CJ|B-#bDMP!wh_)89TI)N}JZ<=zu?y7^8P-K>j`f?<0>Rx;VAZc_=&vH*5s_^z
z#Xj<O5L^e5*<5R}j(w`!KKS<DuB=kXMoZ4Vbx1tEDe(P-=Qljd&J>uFRVZ@>6A8@!
zljOY#@rYYn*ldcHU>m at g7H45Q*HRFiZ&Ak=4(kw))&srv_sVVA?<RD~CER$F%UWP>
z#y5`tyk$1CAF%+Y;0u^H#;F4vsiH?7J3)QMQbo^fTzU~)57d1DM_)@a9uu4z&81DO
zpY}THCW39Drcz>XMM!uimJhkUmTF+b<Sj9|;5E36`5zeBH(w-pFr1GVNh0|;;G;jp
zJIza at 3yDn#ZE_qK9B@;u`dpU8lM%bpzQw`@%EU_04vCY&cy~R@{rL`A-LaLqlo+-q
zS?}K{eeb)r$o%yBG_1=%;~Q at IZ}jSheFDX#mgJvyhVZWg%m4GlOCe*B13ft~BYBtQ
z66hF-OJ{m>bZ)<yme63ofp-*Ykgu43oq-O`Ackv9!aU0m4y{af8RL_`R8SpOj5tsS
z^xZFj3B3e<j%Ve;{s*9=KHE`7IOc?N9W~IwrQq0~5%UdCNAt&T(k0NvVUOm{KL-6{
zwzr&T<SiseHsSHd_?K|=r;N0b;th?6F+^X1EyfS!6kyJL7C%q at 9{Dfzi(IIXxq#Uo
zuq3W at cgky{wcjm@$R;wx)GZu-M>XM2=xm0bru~B6(+1rGxwwHb<ZL*f%CGobp4dkJ
zc=x}3AbuCoGlw at Ij{7zCd(XW3y6WE8%c=S-6{BCTs?)Orlp0t?Bi7j~@VSmdUr+b$
zj}B0YEAc<m`~N$i^AVXFq;d(aEA#FH!#|Peb6%e5K9XOHeL5r#_8^HJwn*5HU;_<4
zMcN8&w0(j?yF39~ff~Mh&pG%9h4uCu!D6si*9^ZBo-coOS)SuGu`yyE9i1=d?t2>d
zU9u^-`?&UB_A~=L1%ntAYLusi{XJifI5609w@<7JiBp4<2=%C9YB46U{`%FWG_;w7
z9h+(sR6KESdXpIIFKi9qBGCftdAv9x=oIlYkTFbTWUn2%(RJgaGGIuEJuQpa>t~pQ
zvYZd5<hY7=fUBId|L4g?J0S~m``OK6U>Nl~h+Iv414{2ZfMpCL+$-c5IC}2cmvHws
z183bzY^P6)_~$FK3FjE>TeT at Uwxa}lNXwuTzh}R(V|!%WQ}4MxhhADG>~bAU$>Fv4
zrgLR^ASD04KBGBxXrw0Wx!9BK5|^Cl=TEJ7bwz1i_aPo^i|`6!G?lO!cFD~e#J7 at p
zkw4jN<d-)g_bF!=I6&`mu_+xFs^#^5`dKB`UR$Q$G2sbAJ5K?-)J?>mATKoeHpo)t
zjLNUp=TgO`kIbWGtl6*9$L6T;VrnwBY<CU`;oF5ClAbzO{;H^Hs+1X^wjhS!I#&jj
zw|uh&;>jXLikMR5btL7JUq`HUzfd7)qE*B`=lTM23+z|T8Nys(TpJA8J22methOwQ
z?-+JQNG8B{OMLmR1bUZ;KPOD>Ea%^`7VeNim!ATRM3=mRe{uqGzQjjG$}V5aE0ni#
z at l}}j;?kHPelv5`r^AA85jd|XFt!Lbs*W4?i$nf<o1Gwigv?PZ-nG at RgMQV4g^V=p
zL8i&)%190T+?cC=vGVVr3|erDp7hrBi&%qT=jMSUxwoLTj at YMqMdTZZ9hq9ZBZrLV
z$T!Dcw&d__h8)zP;iGOQ=`N1p&J~Z(gzKx)W+Sg*BwO7eEGKO>PaLI}!|sJOKAYdK
zuHZ-5Z-hxb>py&g at Qu6F$(<wC|7iQb2}$Z)#9}th%H%gzZuj`nA-DCBdiRt|Efto}
zKj3*b{0wsPeDq7MZ+YyfBUb1>u%$YT$Y&T9WFGkz_A<|$b=h at 8IGc<u<i=3_*S=dt
z>XO(<?cfbnZvUnE-(&B;-c#qfM`}gh7;~x_IudxUgUTY~D7Ck)N&iFLt*z;IG7V#!
z*4q1v*7Jr3Beb->H{))9aUiem)W)C^PoI3+ at c$Y!Or-z**puBkct)0e$R8LOyNJY<
zz~0qBeSzF`-PnGGtzFm&e8l at 5h=+|#d^$)TiSN_*=G?7U(vLCjc2$0x_Bfe8n50K?
z;0L{LL<Ya+w6x)ty0q_Gtf_OLXM+=Pr`eI8Iv4wh^$7GO?c$IVpOfai*i6Y3vgq8H
zT4VBe;_w5O_MqI at lQxAx0b6r6@r_-8t>5Dxv$AAfSbxNRBW)PlQ;<Os8y#fDGlx8N
z7Ie`0AhFreosq)nS0Rh8nlO9&p9gE!^uPLF&PX=DoOc9stud?^cAMj5Zg!<(j;IaF
za>>K)xVreik at xc>8r?xf-Z72(2%j>sjPwVtA7`Q;rxQHR+?soyft(<?E^u|pt20o>
zhLK^PqtMG$n5&1JyFM~|$LTSTe-h*5ny^6zydAUdtuD%(aNLWrlUEJ(D4288lOV%3
z*xuM{f)7knorfH(hgo2`LLX~%3bW<?U;UOT<)1_>QG?^9khdoEo^Pg<y&7*nK4<^e
z-T9j6d-S+1J*BQqO!}Z&)m_e0N7c?KYRcg3o!wLpJ%s_zU}Onw(Y1}mZ5FjE*|H<Y
z^=?=(sh=OKe(m2~%r<rvV`1+{d8B^T^zIho+m1jVNW!zOhWXf3u)Utqq(5bTS*taa
zGyu=o)h~tY^V3&(jO9Wmlan^UJ3^0IFQqMU?ZyA>G?#T2|Mz9?G`DpwwoVrD!D)+K
zd-vGkTl`U8%Kwu=4ct=!Fm>RV0T+i7Ym0K^Byg6;kP9^lvd%h`sSIT at a%GBdA-41g
ztl#O-2PO1nC!f~<UErqR*e?o21^S*CeXl<}1HP(*@TuK!6<}REDMTM6IpTY@#J);&
z$$R=3c~3XE?>gloI^M~D>jY%s9_;5htB9?yEd}#{YMvSX)5BQ1ppPQ&K_*ipY{&i@
zyA%2nxH0UKgoak7 at Ct+apyqJ-l8FCQ>yp6s+)DcT3fB1t<T||$EFJiD5U;P5JF#C0
zt{udiGNHokMmK*_CJrcw(GSe_$ilCuF;@{=5ej)&*P8+Emdz7}m4V=mY;I~odsq-V
zDGF0VPoCf0<Wmp+e>H3{eayPFE719W07ml(w1bpVr(Lto<NqGEfN~<wVf~UeiBr2{
zPhL{UtNaTf$B=sbYqK$$X-z==E`eMl at i}I>Bsw?+xlIk({2lh8w;=QWr6MwJ<zCn4
zX;#+ at UYw|v&a at V%{S)6=$kY%y0r at Nrh6pDR=XpDrvoZ8QXGOVEWFzS-a`B!Nly at pA
zFWLe4zJz+l9dw+D#P`&rE?*?NCwyRs at A`dN5p*&s^{u~_8-J$gfsr3bzF5{QtNiGP
z3U%1i-f_|48GndXND67NECSY2c7<Wq36G*3NxkP$K4|+vY#$-MaQMNm3V#HKqs#Ex
z-0T?rWTR_E*aT_oM{k4cjm$TCZar$4R+jokY~f|begk<I#`xQSi^;iL?`X?<=;wFW
zPV;}Rof8Ip<Lp>*H at My=Pr6nJXFESdT`Wd?0c5j^QaYZD>)7kxXn<ucLx0X2&7gBe
zrKpFeNuPpzX!bc1Bc3$b`_V3;h||dTIfk;$o;Zy5tL at 0PxR6)9*fTbOc~QFJfbpos
z99;vuP~1z;aDDgq-RA|=I$kI3N#=$ytWClO#5>Mr-0<fiUe2+Av at _;CQLo7Lxo{jD
zkW-qj%*%F7qbnE}^vw#o!gWyCfH_t)u^ivAoWt70$DX{PK}>zY-Swo|C{cyN2Ti`6
zE2|4U8Sq8P#6fkK&q-hV!W9=_MgNk{w5%@~E=^t5Z(g5;d{@9R2UR;P at h68x;R@;S
zTDu#0y+;(>THb-&dKSt|i|9OBq+OQw{TW at _gX3e-8teRkJnQkL0gN&Ewb3DPG9nhz
zuQ^C%P at vA9gKcvNIhG}O#&6TUx6VhsiokKEfzO~XbS{yNv`%2KbfNi?iOc6Qk-P%#
zSRvv#EX(o;R>P5vZ?EF=&%H4LE^N;lN$@pfE()r(r~4npv3=GAw!!bz$CcyHFCA at s
zN2z*zG|gJcPM4|}<lRO5uwV1iMq3%Sr<Qb_gJ0RhGwCg(%jX!!&pHKh{M+cxk%I{h
zPCoQ?0pV#`yAXbg(}-96JM?WSbs)NDeGMzHDwW&+`6j&^^Hq#ow?pY`rbo(3(oE1J
z#a3X|nUicD1FSf28mo6Y_m<Do(=U^2u>Az*Rr?##jNs>1?N_Ch@$_3WtP1Scq?KCd
zM9W+q7gWs0X{Bltj+LkBt%2TSY5d=St3m7PV2 at IVqy3!gwglEai1n)q|I5LFDFUWp
zZP>25hj0u$*;J+XzDWG9!~a_E|8 at 9ZgJ%=0 at G%@e8r+O~GshdYJ&*NKqHV&t3Y at Et
zQlM<WA%Igtzct6%gX1O~KaP7E`B(8Ruj1T3+`E6&f at 3F^itGGwUX1-F{#OG1Wd-5q
zrcU9wFOH{UU&7s&2EQ?MM*e45qctuTxR(Z-NG2E7^NuE*u$8k%eO1W0QM*ZvXT3N+
zjydRoAoW6Eu{?8g+)U;>;h21JiE0(N40z^*%<2-%fqK-lmCnVp#gH|QV|x&`p^A~i
z9$6PLZY3im52=*&X}XBW5}3<$vP!zB!ue62^HHzvB8uKf)_K^5<0b|PhcRqr9HvIt
z6`A<LVwo6yqnF^H`%Kia)T-Eu&(3{5f^Q at BS*>Z9W+rPj^Q^2kwo4mPqQY98->)V-
zMEtK at chUyNt!aa<r+3P&ooS0k>(YY8$G6O>or(3C)L})i);fD>OYI~0&$VmV6+!Lm
zo_ait;{iDCd5_fJd?ADRgYXjU9I%5Wln^_|NDVl$$bX^VCyp%6j*)9nFS0t!i>i?`
z_}E=L4v|0pc?0qpd;>px0K1#{vHYqzz~)?}u@*)p5*cm80)K`P at _gxA4HaK=bAFXq
z-l`Yme4^m$$O2wjH}om+X)=1q3Wkq`F11H~Bk@|Ougf+o`x(`c|LLwcY)|H&8G8+O
z;p58fSxLg(kmdGNT!J2~@Ya16--mlH$@kQn at C?=`Gg+T7&SG7^=YKC-jJp3bJ00%|
zU<`8b^01>!X+Vz9hgO4oLh7jC*1gkOGp?KA|2Ah^-yhB3eoAPj3$dLkc$t;P{=q~r
ziYstW-l0tT6l^)$?~EpN5u1+saKbocWFHU!&j%SMhk9{*^1bp+&EIVc&tCe)G4*#D
z5em`!8$%pb@*7m5CNESUjrr?|1Nbc$88^-q2C>@(nWHM#@99(8Fg*7&8vJ843;BPQ
z>-Qeriu#f51!u74Vij3yVe4dwo$qOBWa5)=14mPZ_fx>hmt2I8nK99wR4#PkmC%V=
zIGbD(^xCSsZRx4!7ky;?y#2%`=Q{x`-w}F5HjRJj@<vwbE5m#l_1MSMkG&snxVdDf
z=UvNV at UE3SBVFbAB(*wLfBV?dQ^z!i`qvj<ZwcSGwU$;$_7k7Ezj#E+jThy}2pKOQ
z{j;hVZAGwg-$%de9Vfd8&uz>!cKb*j>3`%~mcIyDV=m9gKFB-EKE%6^oyPeRlKgj%
z9Pp1O{7N3|8e$24q;nvzO$p7UQIAh+Aa7<etJx!rKKQ3*qguMTe11WcJ_|Z6Sv!T@
zl!Bf at 4H7=^r#F)G$>sBlqV$b8KS^*P&?}xKW1oU=Ba at m+Pl4<J+{@F$8>VU0<i4-4
zt^uRcNuGn_i^<xF{+H|eaA%p<7WA3CMbb?fh^+7NeSo8K7uOe)!hBk*J{qjb^VY!)
z;W()ST({eP1O2mwXE at aVR-nK*s&-vTvkJgBU}NCNVJ43<7;8VRCHrYl;JsN^wMe!5
zSXwpg2HDK>h(E4`T at ALjJ0f}<oNnM8LcFp2<7!-cgDRsR&<@U5xN^aL_~IL#v3`B)
z9Sey+BBU9z%Wh|tPzn32CR)a-oCi2Rmr!m34zO}>FxKw((1+ at rRRkMIY!P(Fh=Gs1
za3Qcm{A&L?evkdD5V}~gGyM_5_hP{qZE_V8+rnKtSjcRQqi at N2%p}b}PU6LRIjKX^
zbmXBmrql^*g{t*O*xOh$Z$r+h2M$NuWb8T00H1+at&FOoo^yzIP|e?a7o&r65#EJ^
z*b;n+lEdr#2pbA=gd-;BJo<<mbL(diZC at i;J7$pjiSX0|Yj+rPX7{|hW+T0G2QU|N
zb+o*>>8nBHwP?o}A^kw@>e^e0bwN>GfHk6QZxx68G75X5m9Tl|#CFRU^KZ3Qrd~yS
z($$G6{KuI^C8|()*aYO{cEla6mP>XHO-xCV*$2TVIfdli1+Jz5db at j>$;H4%pALQH
zJg)|EHdup5yv~9=M(Ur3d~RKw&V$?{Bu)o5rdx<{%8~=aX30TJAc^nFNy(89sZ|>)
z&gW51$VX0a_(kG9+n`G%CDb=ZJ|YtWgJV1GbG}Kd+~ySU?_kaS!SzDeRD4q=^e?jJ
zWuZ;K0XNb~ONYFH5znhc99V;)BScvA at dDyw659VMJOO{A3UQR at tyh7&H0<pJ1}>N5
z9W{y`^0PpHxJv)XEal%Ctqc*4D8p{pUg65!!F;Ceg0HcA>T=XmRZ1On7;O{mdzKF1
z#>6|X%J-vw-VZrO<V+?qh{(4$Y!d!9a6D?zceE}!Wd41e?GbtF!jc=^uyIv{eIrNA
zoV>;R?7!gICSkMTQtDNdU5c`=M*re)O5jyF4xOzTw!v&-8zke*W`f;*ALKE=rL7!S
zUxjcS_i6Es7&qW?`;MOD`jWH}nP-Si6MXNNmneu0mFrXR=eWQp;&+VS5BzD4+^IF;
z8;zpxg|l5>!q+Du=S12^%|SWN2Z7V8 at nG{j@<;5!5;NT)Z-q_kD&*Z7p&D{MVib|L
z!bt2f7Zk9qk~YkfXF{(%&(o3EI*(4<4t-jwn)(~$j{)Z(eS{6-^imSzrDMljtE05e
z4Y1X|z|~hV(RV3-=(}iZ!tu&zgD&5#vl&HPoz;2kOo2L^Ga(VyfwQl((e3 at 7e|hS6
zMiFeNUlM#H=7egj2jBrC<$*meANCi8w=Dd-WkI=?LSHLnkRJwmLxubY;dpdE#*4Gt
z;`$PPYsB(REK0S<p6t*d#=FMz&U>#32^>LOG0M|~_4|hHB>21JuoIeK5A(J;DL=5j
zYPn at +wM8SW-=Sxbl8TfIV<3quTdsUR>hGTK$qK*wJ^Wj+GZCA9Hgw!mhIZ()2I1GR
zAuC+8u>05VzeL)TJBNBh+^?Dc7r7JVz*vO7UQcYEfn5AoP_9dk^JN$tM&Wp@?CTuw
z{4m7z4;Oh3<P_M4oxAAW-gUy@)q9cix2J*ma(AHm`tG^DVtUXN6m`Y44970)ei+9B
ze8J6N8i;Cg4x&y<`Tv4n_J-|H&pGM>`pd=XMZf_Qyq~*+;Cq__<me;YogW7&Tynau
z(Gbjd`t;rUwJ$^)6v*W}hqy7=k9liRsuA_qWypaoXHiJrWN=Wn^Z3f#MuPpABOC{g
z#qJ#wb0!Qaz_&$Dwl!h=Y>6IiI}vsZee?j~cI3X*&An&eCTG`^<UJ$lp7-q6 at 4VWa
z(ImC#chn)jB68b=<c^4h<DT~6##`XTr)11RMty8PqH at _44jpX%M^kdN2Oy74ORF5N
zKn{=>(w-i^j_q%8-PY)>pBgnr${bCvSFrbK|Mf`rcmsT+Iu`k&!X9;=$9*f)tcP0U
z_frP=h0EdJGZ33jT#W!R9)dY^j<q+M6;7kKBX=!0<G~jLy)xqz{DV5p6w0VtMp-Z}
zhu^Aqn86o&?X89pW0;&^l&u<n1$V6;^L91KCqQ&pTx(9Nc9_XK;{S?qp#d)gc!_$M
zMi=G@*RO35%FPo6uu15Ig^m+ww`S$`p*oMvU%Cre8$*gLGI6y;Cgv5B_elSme?Mg+
z>p%GEg>zmT(eEr9J?wwLk|S4fF)CQ^BjXk>wd6G6|4!q+#JxX|`wFf?PBsSZa+rhm
z!Y2v50C)u5u-zb!1!62s)X|_?XKmV-Z53=6b#&vA^X9ZKT(o~4$sIuf=M0;{KI^Ud
zT1wA~fH_fEkMkoOI at s!s_-4ei`klgfFbeH=$ED8#%qzN}28^jV%%8hPWEd0rv|-Gx
zx$>5@@3GC755X=Ggtq=Np{sR&nici4&#EEM;%xBQG at n(Y?ZI!9W^Jv44f`;$>vs~n
z{<g2Q!rUf{zjVZ~qsU`}juK$|ePmqJhloGPq*@?@ucu2Uw(;sFvdH`me`_S>oYIgm
z_$`5lBJ)X*+6CJ;)9>+dkbXNd;+^xpA!9W_IdYKnTeb9<1><7|@!ym2&NIf;PO8w~
zW#EE?y}=`oH at cydd>2#zept+RciXr-9yuqnxpuY$l^C+g7 at NdAPu6J9T;Sq+<-kF&
z&S(ODqBP_go0z<d!;izaDI7=Le=~9*OzP?)a}QZ>__v4+yFwARj*0a81BdQ?2IdLa
z3q7&J-t+PjQ_Vcqju>>#XSiSSn50 at 6kUs(3zHHMYB&UG|zGrUkxON3tPr|WvoXEq8
z#qim!nm9KeOgKw6bkh=GIQL6T(JI99!jDJz7kY}S^Z6IhR~00FX^wI8F680-Wa1Ur
zNS@#8vZp6>+2YBwl7HYmL at S)1^ZQ*hg<Y=u at I9Qa$e*P05;TnEqi#XY-xU=)uRf>r
zd=p}Q6%|f8zC!1X8<FwPd*o*H8RGkd&*rX-=`07fTuyZD`*YD=z#AlYjnwdu-}}xH
zE<YQ85?H0_ at FDb7ZYQziqTxA&i{QDn$?kH|@ItcxxM<)p2Hftt;QJlbqTx_-tW`9;
zoNNO{1A)5WSq at cdzSPL&Z;T>76`~KI4>UNd!irs=^FMBCg1=!k*1&$qGO({&N*U>{
zO>2*We at F%H;t`7?K7Y6r^VvdT!{cnWr{K?C*-{37bpts50-)c3Lq0NY-saICQuAZ=
z=ki9syL)XgbQ7OP at ts+biMzIv>wtOAlpiN!F8CPcpM0$OUY`l(@}}Su7M(~nTNm8q
zwfUKezr|TDL~Mt0yS)wETBYo;OAwF`e;nk|use80u50F&?clvAgnm?Ux4p<3)BRzv
z!cr<y%_8-2=WdyZzd~Nzc2lhq5`Tq&Jcs!Eur(l731zxFZsh&=#&2<4=Y6gf_JTru
zV};$|Enk^KNpLTa;SZ5H;C3_d;~KI#e at TJIU*f4Bxsx?BtA(>86QBJ at bB0>=9p_JZ
z4*nGW$FUWYO89g)5xd3EWsklHZ2Wc1uY_wyXgiY9AWcVZ&h!Y#BYU$+Jn+cDFe&tx
zb{C!832eqk6Tui$g9*qV!r60(y$OA6Mgr=-iHx(E;Ma8xq3`FX{b1z<E3NaFwjh>i
zjkParh4Z>bDmHJ~Zk-1kjBna?>jKWEp9WtY{5E8KkeGNfK6Yb{7Vg2kp}1K3Nf7G%
zHdB_|soqX(P(ekoujIJC00u_wU&PteEkV^IKl&UU+2X(F?)a(D at qN5@mLtE)7k>)5
zg!w+#<^Nb7{1io_4}w!SQ8*Vq)jhCdfG<64FSk}cPoI)QPK-=6<Wpv1V+%VsV&xxi
zF6}W=AET}6`2Cc-rx@{T;(d#f8eR91SU)z`w~k*W$oa$Ha6HTTUGzqQK3NNFRuSg<
z0(F~4N?U- at I*dM9iRYvxom8LZza-3w+wQ%tSbaL`XI!s_PC@!d7Vu>8*k)oI=XCVs
zQtS9nsVl<v;Q1OH7uPY+#j2vD*q7s&ma6M1(l#OHWf}U?36#f(?P+XH*f!(-|H1Xv
zZ6~1XNY%A`- at 5%cE+Tx at +%sx?4J^S+9w9mrw-(&w=J1hC&Tr;&^LLFfugMZr;F-fU
zn8R5GY>s)DXNdpc1X)+feC*=?>Qg+mFY(v;_%))7Kwn#PQ3u_iB3K`zT(Vuh2=nku
z{*{baXeVRoWAK9zn=f=HsnaPO-xs{?gsV%_K+5P+Z##{$Db%%)F^yp#Q2K=R&RkX{
z+sVbh<;cJD$hG(Nb2?()NaarR|0+-OJ>^+Ffw|OE9{9d0f*tpi=WEiJp+laM50ZXh
zO`a*D(?{x3&!etYG?@#oZkbynM|+lOaxE5qg!=L}6X7JP$w3{PqomFa<T%ckhso8K
zQTKnqel^aSFvg8RT^_mkHJ0ejSeJ`nb1Z{QlM^Xi;17Oe`hS(X_MUQY299_-w+7ki
zqyMo6okZW1fU8XY>NA)-<<)sU$H<m)vGrAUO}D=}I?l@(P)XK}taZro at iFkItqGkj
zf36N5`Lzz-4z8~*1OG!L+8FI&E9GDE&7 at VpqUDU*OH8^4{54+)kbfa!ZFheq{2ZrP
zmEWd-L!)O)OamK*^Dw5ilK5rnOhUnDu^dKZ1bJU~6Pq)$gx_qx8hkcJ`Sw%H68|%&
zKa<~(>1Qh~1tQgqGGYtvE*f=~nCyEwyhFTW5dF(c*YkX6Ib$jT-h;^f#3xSrAI72?
zHtPFm-~ges4tnI5ti!h70!Kk~qrzCf&+~3v#W=+Mk%?PtDP2NAEA$mSv%#WKtJYa|
zRsuhyU?fCm^7!SPkA8I5PK(^Y-ad?+R74l%Fs$23GPrU8AH>be at x(twY;KTw6T|5h
z$Q|m%TQ-aw;cO^VTwUnf&+sFhJot3n!gfwpJOdk9p0^Lw5u1iuC9v!?lCf0L{)x`(
z8~j>JllWeu5A)7>^zmQixj5KQ8bWpSgOQ2+5B~jL==RTHd>b|$qjdB`+Ur4Q(0B9Y
zuzfPCY?(NB5`Ia<_3 at 9x?g9G=(LK-y8iiwqSaQv;IiC>kN<ZMy*%Q^{;I(F6guW%E
zJ4#CF1@^1=*ztzL{>0fbEx at WFCg+~I$|7}zdfV+#bFsk<w$1!gp?2C=hHpZ-7u<tS
z-8GU=)@_u%loc_*K^w0DKNRF<lt1roS;^YK%}Ga6jZylNB5p2vK3ZYhG1<<nS-AD4
zj=oIg(KCz0z)-Z^Q^wKgzi?$FwsAum at RnKcGW`+7tG++ at a)h%h|10BwE%90R`7FJ!
zl3++C4fIj?$MTRT`3UFV3MPKbzMR<F9!2cQ&vOX&$bK7`ISvO0o|J<Fjfo$+>+gqr
z<EJEX^@w9z2Oft3;+yBC!{?sDNQGDIP7dp?05%Nv7x*`U8MI3{yHG<@hSz^<fIqH!
z7Kde#1Iq$l#4Dp#&W{H at otzUjd3<=nMwC$@M;_6!_dVyWuC%!Vi9=x>N{bcbyrr-X
ze2lm*hoVxSmMbXjRY*@DpVzvGOlc3ke_cc&EipYw{49UCz9zrFf{~8TkN)PGfnckB
zs1aZSt)Xd&0?F%&d17|bx*|>J-FI4_PTT6;|H=A9S}*6Xx1;S_iJw2{2y}EGuHCak
zb4N7^vk|wH;~T`@_MOGLeWxOhl+X5$7LYmi#Udgv%H7KMFa87d at eHXCtP}OBH^yFq
zj(-s`t(DkzBBu2)wjKGO3XIrx<)5klfZV at kEp$5ML0=gN{sj1R?WRcs>Z8y5&RKZp
zRJ at aqceb<rka-{a^?g(B%517PC?)qU<a_tLi;JU0JgtrJX>~mayPR_SwRYf^YWs>*
z at 2{P(1i{bi#Qayq+4te=4Z36(q5P{!`Te!AwcSc0ql_FR$6;3h4_4F9%LBE+C8lQ*
zpPT46E<MxS6w_zF<F6bqjm{k(Op%p*>+>n$ak*{q`FtW6y8HZ)38DvqkLP>HEkuXg
zgE5&-xoDAKO0S|(=kty4-`JazI?bXN4SjQ{vc5McvrqfzIZY{ZM007anfT#?PA~(U
z4`@Dg{!IFHjVeZO+<wgpnL8Nx0w<$j76aGeL$~IC9n?*mX&Y>1Brm*3?&R<u67HJY
z95&=2=FY1q!vSoEaE%=KT@*|=cU=SS{fgWJIlK*XvrRC~p@`D2D~_s-DHhH+yS+sh
z)CfLRsox=W`pnF?kVCRp5gp!hQNqN06B7<@mheyXqel7;a3fvtvln{jz?OZ9C8laU
zjkSd?Ch@(@Km9W}89E8`75Fsl6TxahF6Q8s_}+4YOJ0%7*w6>AhX#6WO?U=4H{g at N
z+VJ=-^pC~6L-za!mgXf+$4y^)_Q1<ajWwU!YQ1@;+MKG*`s8m`Rh~+W5%;RX^fO>*
zh$vlMy>SKNQBJO^JQ76L8h=3ks+lp$UKP%z#kPH&EjJJ3{N;}Wns*Wy>7Ktc4ZDzG
zZKs_MkWW*p{&Wf4;HS3-lKckmBm{lt%!JK612TeC*wAQMIpyaS{Pu~}!Y=5fBba}0
zfMa^Ehr2XniVZnqNuP*}OZ*b`hZxIOeLPqWj6FTUQ#_)eTi7+QAB<Cv{2IHaBEJ6?
zGmgCg+j<Mj|6j3f+%sKl0Q>{d78^L`@LV3p(e(fixUb&hk%<q++Fs)@AmrRag7H8c
zU>7Nur;Kl|#oXT^2S09T7JoVP3Y at 3oU@x$3XyK7~fv#2cHJ{Tzva(gD09ZD3l#M0Y
zOk<I386#;mF^1{L+5UgkB{=rUF}8u!ePrA-542VzUs@@iZ}zzmBOYyzQC>JG4+eii
zHOJxasjE`R8jDC-kQZwq#@^!f-NWhV at 0UY*z<s2WiHEK${D=Pe;_o0cES4D4+lH<y
zk2rI?VRv42>iDfNE7!&YOO40xFlhlI1{vWa<DP$pX&PYO_lNx{?)e6rIYp)hR%lga
zEzM+*HXP9WWjo2aN6Ptp&C;>scg~$a`(I|HAKqpfCI%VP4Ig?zr2g1o>~DLJSH3nC
z-!*sS$FL*#M$O&*iNAXL-Ab<CUGc`6ttI{LWH>n%1Rmtt)G%FEgWZYeBZn?@pzevk
zqWvx7qi=pVR8aJ|Nc&KR=;sH_1EYWWBbg(Y1je at XWRvf)VJ>pX2O5($B0kRDVWbS3
zb0d^}TFTAJa<<z#88LXX;t=-%y998*lM|u$_CvHW$DtdtU}h~{VsgFGzUmad1N at TH
z!EqFjP9tuCmSMG%bs$F3bIpJy{*}$Zb+3Dzl5}6pl8{`kqJyDZP+s7rn3q-tB4@}^
zJmZ?(nF5>*cy9a8ODVbV3g*FXt0ryOgGGZ~sFw77$eX8m;BV+fZUop3PjLIl!@zMR
zk$z0#!yF!ca!DHO!avAc=sBJ~`Z~*8jZtuZhtrT{z7~#`n313A1#rWk2dC9jbO#s1
zq3b<Fa8AC!qA^J^J;15%cPTKhe9ho}_+Puk7d-vw--xA`((%4}wyETa&AH>JqwfQT
zPYwJYXM2<{2c`-BQq=#eB#*Ht9*QTKI85wv%5Czmao(EJA(Tw2&X|b3gs#AtZ*c+3
zjeFuImZOef$C4Z1vwMofb<&sNTkwS}aV_%AmNvpAd~49>JR?<Z6W95i$GJ6;aj&Oy
zSSs+&7C%MSBG|4Bgnx0Up!7vyoXwaLpLm9y9d+h>G2vT;A2V<wo8UB71deI~4lK=B
z at iWsRsizDBb+_6EG`Fq~G~T-H&YYolXUwQ at XJ+Z$(is(-$6^a at gbO;v6K_giChI%O
zl#ZMv at g(LHxG^zwHspRz&inbvCmwbU5>5d4u1I`p8~hUw6FvjX(X#@OpJBz%z;hul
z#)_XW?n}wpgc#~3qkqjsa5s+D_#asM3}P7XJ1e}F9FZv~YxTwi at rs+pa_N5ke8`bY
zCYw!7h)>?3M6BdL$n$o1pNDw}^#@(YfSi}WEZ+|HxpdnwUrp+8q#sy1W7y>;5*wYk
z<O#=d*jA7m-R~$5xH4fK<iG_E at aX{iUk4t2Zav3wJAA^h#lp51?!`WVca6Lgm;>#q
z$`w~uomz2`%l|RK at gQhyX5^zvT(SW8xdvNJY9QC%<tYuZwP%XJ(_MtPihac|5Ii37
zjrvfq(Nhx_Qf4!eb8|)y5S<J0Gg0g+<o_*+jPnVQ>49T7#x9dp^Q(vsu==YHk}jHH
zt1n}3`c;zHqw&_pZ18HCz_+H;oVQhI&L1#K&NGP`^J25QdqX*F6wW^ooIc?vy0|aV
zr;Feqhz}fjGv0TCQxLjL3jA)w&s7qc*!&WSpZYcvIQ)J5H|uopxt8<5$DB+!In*1b
zYD&Ptq;(~Vw5t%)UTpKvlIug~&U=#FyVYXT1?4$P`P(N~CU?urVD~(Tvet4O0Sdxv
z8=6J-12SjA-yfy76gjHGp0}Cf!KFJ{=cEFZp5xVo|16)_q#&DqiRWh7%E6~^0moui
z*z*#^<+s9Lb09Y46VCR_JZ5dqK>n6|*d|s8wUKYm`BO~olI^|<cF<QuXKm2aa_2MZ
z&t_&uJ#%epM8*aQPfGj+`==o;4_pyb!@-mHEBAwc(X}bz(hWIm;XD!U_i{d99h}0&
zpCHzh at T^WuL+ttW`Io^L8ZT=FC(nw6cIM?3fv$e&S0=RWsB+uMAmqkem!jhS<9#Q4
zf(j>q_2eC;i*6a{({^WIcJ$@TH#fDv(YMf!`E;aL(`<=<9x|0WM*JLn2t9V{+{T|H
z5z$L*guvhw$LNDp;5+-bPqmi3oBsv+{x0H2L|l7Kn>f|3dLrxH89fpEEPq;0ZQj)V
zPxnc1cUYNscg1BTWpzblToZ*CVlD&E=hq**4`V(XjPbeV4oAE^^qeZ_14Oq&{H?PY
zd<R!}ilxRa at vXJ|XTaf;gZ((<83#uqKZ<br;QwYK-w_-okp*HaFz-PgAo*cJExS#o
z4vkb`i8^SywA<{uRU#Wp+N~4l6Vgrj+&tceGS{`7N^2K_Q~%8AwAp9M(gJ~-oO{8@
z<*v<^NBU=5gJz|)Rr>Fku49o~z<0SMGJj-j>)JhT5 at T3}m|Mi%lJReOd%f at GO;_J{
z8&e;?_Gx$?;urE;4*gmmwZGO!`hV2NA=JkKUnS~eQ^MQsqu?X_g{zN3$TH2tnGprp
zp2D^W>&=Pb(g?1eNF5QqX+r$bX0jH|M15W}MdXqE)0XVDivG7g0<J1-<uy}yk|iJi
z-$)(0CJuiWxP&G=gXCp7HEfO`IXzBbOYjG)MruP=p*||5lC{U=vhe&7W$GI-{TkJ^
zpm3RG*_yfir`JsMA73-pe{xM{e?9z?vb8mC;IAlV?GZQOWZegBNfow- at V^4KqWy#e
z!PB0ktc)1rPb0hnj at A7B(xA^Os#4#&b}n2>>1mTt&t?NtsA6*Bb5S1Xy|j547!_QX
ze+ at jS*FKHNA1MWAHnX-J?`UB5t?kA;8kj@)Z^m~2to)JM9w}1=Y(?#?BD5!Xb-&Jr
zuM$3`ApFwcKbaH}+g9NFo;djpXXp}v?hZH4w}RII{F+Im9Y-)Pl6D35x<RO?^O=|E
zH-MAKcbKEqm}7HIN`IwxEcy!Kv!pXm?7m1%#kT?@85u|a2KXffa<iI%2g&!|Q_kI!
z<F72*wQ+}hP;+(eiCynjZekU(O64}@h5P{l=513B-iI7ce#hweULE4&j&b at sY(U@)
zt3(XK3bkr)1u(-E{5MBQ&YGW)Tk9!*tt*rdo1;grNVh{Cy-LrqUxm!jk^uYSmbu7_
zdPH{Krw4x5V&t%8>6d8-9Ypugf1_!~N#ue(%-m#tVLoKeGIN-7%qz at K{sp-14z6?I
zx*=TmbF5!G!Qu5Ir;|!!*kf`jdHW;vImyFjdc6PU-T{HQuSgrN>5`0X%(xaD;ZQ99
z?S%XKOX?!YhbHgbPhvm197WKhgwc(*lbq~yT${nmjP>gUrw$F9Tud>x<*g>ZiP^6a
zF(>F;M;7v~=>3m6HN2v4Z4pXf98NLUV8a#oAE;J}R13`_?NsyT+%hHda8-yN3bulW
zt~yBUu!z?BSws)fCef2?Fvn8g?=k)7^?Oa<iX-yo at mW>u{L4A9zwK6#eL>}S_`VA{
z4CWrpPx5(YR>k3ovu%jO-)ln54%QKylF~ol-mep_otlO3sAbL7%9w9T4AHs188q at i
zKKw_S7}&Zv<8Kj%o%4N0g!T|}PZ7-GuIG^_j|TQdO80>W*~C!F<g>dFLmnA2E}J$U
z5cubW&ZY036~bSvqWU%2!6y>N4~g at qQX?8gqaOJ#Nj%?oDJsYa9aMX7!C4n%2=Kyi
z+zk4)Qa8~_&p_Thi}({AI5x_V%jPWd*Mfr#+##P$2S<fOKP at NAEo$=L@>V=Bqj8Z!
z-mKO#QS@}PaF^_lsUhIRMqCnb=k=+`uFU3tS{L6v><rfs+*p5kw4&9rK)e1Wme{Ty
zMtd~d(>adX=Sa at MujhsAZZ%?^1a{@YN|JA at 7xVLEL8}pM;PT7^WIm`yuJ`-&@Bxu|
z`WGH>_UIGkkbi{H5}S$WQDnRVH at 6u0g~cJcR!iDru8y!Y*Dv_~+T>g&1M*y20Ez4H
zB|2%VDWxu|b|&yn;MpPkI_@;!nbL~j$IXRLDH}G8eekg>1TCA3gqLY0+Em7rp^o=G
zQY1+t80HP?%Gcq~tARZQ at u!lcG!r>CKCpWLF(q-U4xE+x*0GH9I&_AuJMGw)Q4+SA
zvqjZ&@ruafg?Z)A%55EgU<Uk3h4CBC(XhoWO>Wi$GkBQE8#AV;Y~VaW-ro+_qdYC)
zR;Jq%t~g%B_ih6}<+hM6<She#2brIQ at z?$sQ6w<0<K`y&z5oT}O>S-?>muQ^3ia?=
z-Pok>UJ9A-LsCzbi#hqStM!;x6<SN$VK(fFXot35rBp(W4d58`zVi~*6vDZ(-D~S>
z!8^B?sOCP!@q?@zIm#cDCk+)!_mr%9;7|f6Pmv3vFMeHA`{-bPvGV-|$l*z4Z;qR%
zOBeyK^9P9ARyj6;H)M~nL6Esg>lzQ)jocue;M%&g+WI at YcYgr;-QN9+tF5u?y!&qK
zzXZR3=OM|!^svz2-Azr(ZNJkKY=*E8_`dGQxM^$1vGs8tyoUT+#Hl0+yH=fb&Wq7s
z;dDswo9u$_HHO?H<;bt{UDz++8d`~d*K6}(%63~v=kAa-Yd2WPy|{0o%Qm2yn}_Sd
zciT-v!j6%HyJwlM3VUGxmr at hR_0hE3I%3#eiEAH6{mvxqLtXCKB@;tteY5tCEq6R3
zY&rJh5=Q0QG{E<3(y7u%PBZQSOW3EZV*k3um5^nVlkRZWoLO4$Tqr;u;&Cg=wS1s4
z>=#-I8M8c6KQi4`&popj*Kd<)$+N~s!<I*@a6R&jITs>V%RJ~UkW-!WNbC+18O*{T
z3b`9~a%Zim|MUXwO`WjM?&SYQs{)?DLim;>oDLNBlvcVck>i9~i at 15@40Artt at T!{
z_mCBA7NYB--)=?TM$`@ALE-HG$mznwhJ_7_A}q}r%(D-OkfXC~zD~YQGsskdi)w}3
z2XekhUOK-S-{vbgD$H-m3eLBk#Irsi?SyxRDc`qj<P{>`F~jb{H-{@#K}{&z3mRm2
zLOr|y{RVjts35{u<$PRl`Fz%@PUqu at n=e5go;f5(oo{XL&#@;vv!EkCMB- at B|Bqpv
z{X&}&0A95#T|}2z1G$gvqYsVA+`#r+qvO$UI%h6sGmtACav{H=sR?U@(Z}vgZdOq5
zrPM(mvM+t+z)Qs5I<~{pujqGr)%H6*Zt7UV`0(!{a<bM5PY5n=*alzmE|ljSxbI5f
z#~+8CYV4Zf|M2zhaZT3!|9EMUu$(EH;WR@)QaWrBnw4ea_CQ2NLMT@>lRNFkjJt&F
z)=0(};I3dWxHyf0+t at ga<6z(kQPDgs^T-rta|6L!O_P(TXnvpXYgqSv|9+3pAJ^kL
zU)TG3U+=@~@O(XAN~U=i>LLmGxD>o1i$gH0twt%9R1yw$uEOEtzLul64uon>ekKWC
z^i8*}qk&T=YG`foIRH)r38yYrHe}=G`<$C|7wurk at gQ=@;^6C2|5hNKni4AuIpZDU
zctH0if2w?P>JH3%6)u;87r+iGp^6;Kg5rWtQwGc<(9`&?blNfx#6W{@YcFuCF2`3S
z-7#{qI^v3zgb#t_VE-|m#8gipxhvKyn1B<$Q_NMqh(opN<z0L!;zGaVC0$6~)2(3q
z5(p>0wJxOoJcEe9%AqR4g at rZ&Zk2sqTPA}CS82H!X at YIG;D#Ff*gJgVv7HZ@?W^DR
z`+pg-&#izmMx+m&o3>6=Z;d<n5%?OWLmzF54G8Twr-t^ANLOem##$rz&RX8V$lAoJ
zr}eP+39ZcbVE4Urc at I4qZOHM1`%;dc`rRBV(6yCWv*^=2Daji>c@=M)P?NW~tx>^z
z&<jqJk0Dd0yT{u?aE--1$fwb<)Th+3>}ryKAliAn9GvEIlG9!6dHS|u19FlGta2^?
zs{LodE0BGUz;>X55A&!Y8=P<t{HDsa(-B*t*pU9F?|eFG!(`znD^rFa_stpc@~VTc
zk6;xJgHz;}1 at cddMzo@4U<$$s2PQdgxeI%Pm#@k$=X(%8x4e79IY;8L-Lye)W_T{_
z5JHy at cKkpt0FqPpF|~UsFz)TpJ9GV$ocvS+tHlo<Ye1faB!M6Lc!t9Tc^yK4Ig9dM
zOmYN_lX6r3vkbs$BGwaSsKmI{kGbeBSJAhTi#TN9TNA+rg`DQ#W{LtYQ=lAtOKDuy
z5sn7DOtn^Ka2DY^jvX9&{~1MUcgT~-MYPKn>YUGHNr*`ZgnsAC+MV*vEnC)QbWPvB
zN9%HNPM?*TqqgRqE!(E|fb3fa-;1R;R>8TwdUJJGh{v)-URKnAHODUVxu@&e@(<fG
z_`=|8A+{gO&FLmrb>v{E=3*mwVB*cYN|?bGA8ngS5D&ifEF3en)$^~I)q=0g4Vcd~
zB}dKG;ONto)SGKDSB`~TFcvnhv1l`6JyWnQ!a5%q+4kFt$Yx=bS_7PvVnOY<nW<Xj
zk|La^>W<CeD*VK(=F9Bc_|f)lBuCucCK5X;p9R_Z7;JKv`Rx|qgvZrU3cf~}<;+``
zaFtiz5nPRWcTM2et<YHY9_afm$u5?e0({?Y5)<9=J;4nNquTQEUk;GAfiW8G1ss1B
zD0i6lpYRh!Zwm6uLEJ#}H&c8ko2z3@;6cnhUU5mvX$h)0r~{v&gp6yNMeO(sU6kZT
zv;R{dB>jwxXTS at 6*jGrd(a!-kVZFR%(~iDE(&t at UDp&D2OHNy#f<5OPurSFUXQ;Ui
z4JUgzl`e;!yagS|r|gAz0mxU#eKufJM1N=JCEHv0%WYMZf_EDAqq%Eh&y(E4n!C03
z7J-nAjYFS`1|5E^UGpJwSF4ae4Zd~MQ#Ijy`!ODK?g0GmZO*zxKD}^a59f1)pM0|d
zc?qMxIm2uBDa}xtOOOwV*iR0688JRJtF{cC_1lXa?V~wLv8Gj;mEce7Otkd7rw%m0
zH&^YY9H=fay(qR?To)4`lZf~^`&V at BUWEK_8#@01yukwz;;wK_it`$I7ktf$)bNU~
zTkGk^6pa5I<ONK at +J!5%7brGpUMAloXhpfn_e^l=OXPcie{FP^k}`jrh;gOHn(Mj>
z@;Y=3SJ>@H%*XV7Xn$j1M*+76`X~N{b_ucHg7=^UdRi~ao^H7b{r8|;nqE06m++9X
z`}@I%xe9o>w?fRv!yvQI4asr at IPDdL3ljZ2ozh%TTCQMzQiz(s^>Y^G>qj14zeo7>
zaaDp%W^gK!JPw<BASbMYjt5`lXxlgjPR2|}67rpuaS=D;VzCThTd(YyU?9(o9D*FK
zGvl8Lqf}GO`jRKzy0{W*0VQ3a*4zu8_t0dkrq>LHr>>=G|MjE}HqGZ{1us~sLVone
zQY%|};phLp_|u at T;je~|!he|FPTC%48>PNbXt|<HoKU%<$}+rZ2W?QqJgs-J7|ttV
zW*l?@?`$V*oZv0c^iCh0o77}(s?1}#dKglEvk5V?#tVhQu&0G2m*or_o*i{}pSc40
zM2u(i&|b>PJuAAb?+~sMa6iVH(PwZ?9_b@&pXs8)!HI$K^{;yRej;*IwuzaiRk7Kj
znvn|ho0rMAeg7k#A6BJy3?l}m+r at IQjIWdb%{$aq!Pf!z_N~as3m;quY_y)TTdvT#
z<Enr)d^A=ZMy|Z+h`}a(0D3vf$E?(xg&moFCUWsXo^Tf_$T$Hxh2#YbAC^(^Rddls
z#H%-R>Q{dsC9&r4#H+U)L_R{~Q~F+>$lq1nH6!zCH2mR7+)Q!uJG;Afi1uI(X|lhP
zK)AT;fJv)2Xg8dbtQFjP;3YVN=PqJ-MC&k4uR^RqnW&j(?1<$UJ6?y(rjSc8Zwxx;
zdbH6JO4G4oWcJ)i=pV%PU*7TnTq`d^=a6`01KSnnm_k7xq#}eGm7L^&3~8C3Ef2)}
z&>;HORwdeecn7sfC|Y~VTsb3Kz8DzqGU|I=zX?9^@Zm}-jALBA#W9~hCsZ at ggj^MS
zyGzB)bB$u=C6n)rP|d%aLN&juLMyM8TKduU-{$Tm|9R$C_#(^spV=BjGUPgtfkX5M
z`|lWQgV6Va2oFZb50;zI)9xVO4QxS<i2~Qr@#gLd&6*|7f8v7J{|k^WG1vC^&VYO<
zKs{^$F5qR7_tkY3f0=!ovmN5Q)pRnS>Qf`m>PzBR at w$e3oI+xRh)gr^2DpG~z?D>g
zp-y#^N#R%o^V at 2PPXq1fn3$Q4xDm7`)pT&iT6#T`hojkf53y8K_Q9p2Z7q<D8}7?7
zrx%LgUuauF<QK>-t9eB><aon6l9d&|;zoydcEX-HVuC&HL&%ilVFLs2`#_B$D?|qV
zkvXpF&H>o^XIc7{dRmRV9tzlmsp<8&cATp5{qUc6^94uBOPI+dr|DUVRD6dzYq`v4
zz`HFA($uON7P%aDh{zmD$KpG~SRcx|*~pb(`pg!|>WU9-ABzfyqoHR<V@{3kkmCEK
zPgh_}OA^E(o_I^2iBFL_B6e9~Z$=zh^o`qOeu^9tM!oPZ$@dC8a&BLPZyb>gQ06~E
zD}RPPrSlKs_i;S#zRsug&=+m`q3lnDyzg)xbN|oVCX|iV&r+4*EybmuIM3ogU*jwn
ziWYU4^)81o- at PEu=m7_8LFR<h3GJcA3rjFB029-xuzi7csTWIKKkrC!I}T15;5FRL
zCDJ(_ZZEDd{yW1~E>55K=vbZG>=nklxt)_#snk63o`~|!an_V^sUcR?wMqOowZLRk
zlkt+sv>jU=6ERj)c7i9I)V+JAtrh=sHTNHc-&UUCo`&%p?Gg5hdW`39Kqo at nrdN%!
zUT#=;rn~ChS0h&5Pws{d%dGP(MLa+&;sJE%Cnolv!cGnTw7YoLmrK;%4^S^(wdpWN
zml4^ASwHw-QU#Im{-ezjyg1utkyj_nrY7S%Vw4c0-zNrtc8bV^ezf7R^sn(ZSiP-W
z7<I{Facs2<qmH^+z$NI0`Kzx`!3bi2_kMu6GS{ki4cxK=7&_oZAV&ov-%Fsc3fPn_
zz!*07*^X7x2H<Nv#ir-VPMSE~+^oLjlTr>V&$6<tO70+Xt>-Tu>6FU;Jc(rzG-DRi
zkv=F-x*}^H-y^vj&1-^>B;JuIn1wk`X+S<UR~>vkQUx>TYveZ34N2~PhVk+{tA2an
zjO at y+ZMxvDV_B##cW}i|U6J&l9^-ugbe9%-t!IW~KK at 0Bz!m=XxO-l}Zz(pMLti at c
zGi*onE%>4<T`Vh%7fb|yyl64T$2KZn1U-$8j%?02;GP+*9Vrq`vgTTDGFLcfS$Q*e
z;{mHlw2sOZJz<T34T}j_0!~J7782}6-;-k1vt at Z7(v`@C25$Wq{~&b*{N9`L9J-Qs
zh?P}q!DHCP%MxiRX`2q)vv{YlZ8F<&jnSPvzn$#2satMyX2C9577~3lmzy8z){(9H
zj!|>cxeC~3vw<0$fWB at -T<$HDp9xtLX)+ at gfBRypfy@>1g9_%gYzi^TsILpw+uIjU
z$%cN^Ce#$2wpDgy(U5UI=%k8-n&M69uW_)0#r2hAZ2)EoK1t-tnT#Bl`yIo0&TGJ{
z^b2OQzSJo1pV&5n{4K8?LVNJCnp{J|&j%#WSuMW_-)t;w>vdRviFG~J8xx){@yGg`
zgqgVJZ`E_L{m+Ey*j{RvPs}#>VgK8$Gi_yC$@zB;ekz?`D~@d*!f|oS)1`uDqJz7Y
z`I<syKWEB&$n`k4S==(cOmqhKET)Cqlyo%ww{bx#_-ci<47Rth+wZ%ottwSD{!=}U
zeFvLi6W0HN at AxahEz+*$h9rPD=vS5FNQrbDbSq)h&E-U1BW+u{zejsFMs$Z`q<#v>
zne$0N;~Wv*_i1R-(af1i)^q5q4Kt0_bFf$B2mClE%8`iYeUAAdO%&IndTH{(CMvu|
zNEsc8{B(>D!;Yi;l9AbHlS1&9l_FM0rC>H)<QBnKSBO|r#&LAcM1s%8cDr0H*zI@<
zvdTCjJK}$IQ-jdy-gS<L7gbn4XoDYGs5vqhd5=ka2=nF|?1zoJOtxPv!Z=Z`V!GL}
zGNQ!FUYl~>;=mZVU-8A>C9tD(sR}x4Xyz%6kJ8*Yl-<`QH*t1&B%@swjLw^8=bQ<<
z*iSBJZ3 at g;`?+-s)aRDB!8h911^ey?7$1^>Ti32~Zw9}c<$+84Bb}a<!+ZbwcFO~A
zMKj_NA(u4(&zooIBF|adF4WvOZ-X2JTM6p at _<V~))Fjkg{bqO;+SGENX}qM4ZHU?1
zgE0X)I5(P{oKhWM!S0bx=6;dUnj5<NLaJYVr`wVy<jFQ#3xIEfpPuCX==gz^t at ir{
zka-g^<xC*_A*3Ax7n6kf9ODFJq2=ItEhYMtS3Wy$!QM>x-tTGg&Dng4=<KNXmq=V3
z{AL(O1Y;Z%k<;T1k?O8iu&-}7kqy{6AcO4};0SRI;=gmeKIAm`W0L>RvNe%w1!bhH
zc=zPth7!|+%DK;tya2qF7UQK!a5 at Asfg|4c3HIF1|2=osdG03Rg^g?m_j|Z~MgbFn
z{6{Fa3FY2o$ntyskedI{RxV;_<dXDHqSzdC1D`?{t)|k6eR<Cgm-Bme_|1 at O5T~8E
z;j~;QYQH~Qup7B$GD9?%$U9aK|C`7>TQ19z==rYSL59$re1q1%^2~j&vG4`@J%c(<
z#Q)nBAopdEd#Kl8PFT7!o66IDy|KZ*n`&L5xl|-X3JF`&<f2yS!-zMY(vl1t#4K)6
zXlF->^B9k5N#?^BQgMOp1A4)3$VFLbi}zO=S6BZjzd_DMY;rr=Lmttm at lWwj6fyt8
znC=RGc716?&VuT1v#G~BR?y{JFC*8JgBC(ZGl-dSJ4bVyp5eBVxHC=`ayq?1WSdz#
zfUnQ~8P1^(p5Q-cGeMUXA%5nLbIv^QD!2qDntPpdE!svd`R~9usri&Wbz=i*lQxG4
z9B%(AYb(Qb!JfIpYoTKX_KX7_t$?NrQaPum6;xjhu^u;!&a0`wP-x)if?W>dakTX%
z#GABQb*_QH`PURA)29<`h=I((c%R?eBX8uCc_0p&lv!jGY7U*SRfr0L{Hb2>-HK_o
zQ|BC%V at zJl+AzMCR}&v0xBza(`a33%ErHz;zVSoQg;-f`5dM-}V1K}$#H$(pH at K7L
zS=->pYLW{D5A8qCb#IAMd~xO##0T_<G9BsY--a~>a{asClAP`@rviiCwZ5pXmTbTK
zt!k?%%YoPl*ckDj=R6O+E?U!Mb>ZA2V^o1BO{4xcU_O%amkKqp{m=tMEGD}Pn4?51
zI7Tq%3tbLJ8KLXccWn8&KGq1?EtlAIU^_Y2SFB*Btb<(>c#pwxo>F at V`A$zImK4}e
z+N(CWBfbK8?bZsK9a99MvZQoih0IN^A-pxvmzL6{M0Z2Z*jhYi0%at6=b-na=lJfs
zt$@CzzL080o}Y1u3nydOGZrGt6Fr|-)R*M^$KY_<kM?wfl~sjAuH;7}&%MeK?_zOG
zL9T^*E8>#8f9^B#x1c{X2sPKQk+C0k!xDKH!I{jNdVel-DOd0kp{y+}$ipBM>}@R-
zt9T?{Yqcn=RVDaDUK(5J*dWSdx68;ji90=~AU2ma at RSL|YLU3OBeS(dvEg7k_CJ|)
zNWO#5p~RiYE%*2>_(q!{mo~EB)av}E32LekoEydPFS)pWhddm>qTk+(bt1RO($7Oa
zq6<c|j!$gq=ZH*ndo!_DT|j&S#^K5fz(Zrs=tjLAMLCaHQ(S|^Qnv!wX=p~zd3Xst
z4~Q+R;N?>S^gA(CbjJ(N2w?3i7w>4f&7r$HF0tnfu=j*bPC`x#r(MgycOBLB>wt4>
zx8)!%t=m1Tulgj`R5mFOeH}8W5ZthRT%%*%#5(dV<XO(|0iNA3XEJz!M`(kn`L33m
z51lOaAb5=+cV*EA3Uf78gt%tRGqWGUkAyKz#Z1r$gs8um)z6T5bMo)(_^sp19P#Y_
zTkxF=365r5Drv)p=PmsT#=Qu6m|9k373ibg971=gJxm}ZHU(jnL1O+N%+C*$HFunr
zj7g+FQor{Zoi?)jh_?`mPQ&kyzI+?@zi8y`Aa;$0(Q%=e$lK^|-H1i1j1D97*bw}|
zn-)X1fGmJ<KAzaIFrV%uc8&=S>p3Eu<6kN94Zyk(+d_G#89LPDmF~cV;r=hU(h2oc
zVTk5Da$C8tZN)f3a$6C;4PxW?`+PkA8DR2c=#PPrnRSB4?|CYiSu>pWEVSuRTRpK2
zQSq?h!1g4{9x8?&c^p2 at kN?8>jH|-8MZNUvsD8bO%-zJ^MfaRVK0s=yT1nMs_P+B*
zccvLKF*wC5w`7ck?brVnv1cP^eV6oeIudvjEt#jtHCr>Bwr=icXoufVXrKzwu1gSO
zSbPw%dC+TO2A||+IDYUs3%g7S at cJ>sRzZ*>o|{b7S(U15p;NP)-puLNZTV&FS-j^I
zrE==Bub#r3i at Z6rb@pkbzDzZw9zO4e4ve|v at 9EG{)m%wvXM5(%(~$M*Q5Q<oMJ;r{
zZkJBPS-c9n82r?TbI at _~`btS#g{~asJp}m?{@ut%VbrtBp~o2Qu<e2et<e#PoV_8Q
z*)!GDIYX8^>S;<ov9Gq2ZtX?iD1p6cDGg2+`Z{!pwM5@>Zuj4W9Zs|HGRlkG6 at 2iH
z^D<gBVurUz%=no)Qs5JjJ{<~tSdD`5T7r45@}vuGCwAFC#@hZissp^rjf3w6c6G=K
z(TbQxXl?@)mrR`2kRFU>&BJ4f?fIF5<|;+Z&t+8nh*ogSTnk>(r1SZPnIS#khkOmT
zyas%qi_ at kK&b_g|jrY7rdz_ndT!&m!=&SIb$J?5zc#LO7oI3PB3pi(fagLod;Q+EI
zn4sUd;H6W<-1;43_}JK?(0ps5vz<&M_lL9ft;YEhoFBvb7fR?CAoKq~>s-Iv=mvXU
z{IOQx^%hV$13M8n1TP|;19 at p57R2lS1b+hTtNY=H%Y%$l;gqkz8MaT<ZmSSHhIq#8
zJG19ZPK&~QDiLCMSld>KD>%*!JMfIsjg=U$r9=klt7Xrb&_Cntr_e{0)2myNUz%$|
zo+^wd?0obL^a|L{f&=&?u%#XvXyP9OXG0_T#=G0NG#O_H{|UcS6S1cY!Z3H4>_594
zf*<KHM{GTU+|P&7qWH(?S({27FOYuypc%(bpik$4!#RN9a_#E{4_h9<9#=tPmI>!D
z<k<?sCj`#Xj|k^ZHn@^}Xa05Vw4&-t=oKXiMW_P<@+xJ*E?ADmaL>mxg?t;~pT>Q~
zW)=%PYZd!U#0JC8cN=+AUX#5bXr at y{=VkEQ%dWhXD%4z_M)F&7?xOr(!)Lu1F%j3O
zNwh1qi>F_`g~r?}h%?XUj8MfhzqV%2{LHHG at U+(9e<F`fPjg1s2Ke^R+*_$R9W`@2
zl_}IXe!)D<%r`5T1>10MJ+Drvv47z)$*SUwv5K)I65HbZO!6*w<R!EIgmE+#Yctj<
zwled4x(*BaCVw%J*&%yGdA%gppg-;qtU at eoA>_;~<IBF^La+UHxOZbE@~lji^}h0~
zFluTc{BybB0tzMl6E>-@;4f%&e%GA5JL*@Z^tib><hw9OFoL7-ooaf+AC-U4m6s<8
zHC<n!EJy5%@&6y9u1%P?ssyh<=WIaxDcExb*ohMo=JB at _%)Gy0d7LK`YOXxMH$Lw%
z#;VHbLJo;0Djvte{`cE>k5h at bt_yKDu&pR!27W_dSm#?m;xiX{UtfHNUiXT-T}9fY
zdn07JEf^ECf(~3!?WqD!sM=34P=$IM=PtfiwXyPN;7A65e;sV}6^!WS=HAu6m`QuT
zl1*aE2ituGef7Qq;J+rz_DAN*QmB7EsNq)vTarCFgvd7qk2hB$PZP0K=-e}b`HP3G
zAby4BQ2VmA)~wKt-W!)q!g_}HXTRy^rHuN4tKrWrWdH3=-Zv%ZDd=YK=V4sCf5SJP
z_<*H|^^6FmHgs*_euunC$QlV<OgJeE_UPz?l1uP&6-Y-aCT+)l>~TFX$-B)-K9}b>
z9Er+dKjfuapQ~(lhs}p at uD>iMc_oQ&XpRHEq`ibc6gKQ(*Ll`##8(&DRgvLs6{KxE
zlgP$OF6P4z5*cn at O@lA?(o&8F at kv_bFw}Jb7iOK!soSz%7#7oKR(Bv~)2bK;jP(G?
z>r&;rdE;q}r;tHM{CLSer9W<lu3QwNhVNTrtsW{`71L(qri#>*qOF>n+P6d02%AAr
zn at J^wO(Xm6dEd<gI<I_lgcr$;{i|)|#u&&ZJL#L$gWIXAVsI?kwgfyN8sM|f at RHzb
zIe}wW%<yC1JwtHEb9%t}Gzfj@!Aj%G5ZLCQoq*UHg5LwaThKoNbGl6MBEG#HJip1n
zO(Ukkn(BB6JAGJK8Dbkz7nG at w*g(!q15R{xT;J^oV?fn_r~R=GhEt2<7H%%e>{zf+
zQ$=JSx@*;>nU7QX9s+7RxD9tyPg%BRz(DIc20*;@YoD(k5xidgx)QvFN~u_%z)g!{
zk9%NjLyj+Nez4J&<xx+iVPA^<!qI&i+sWv|2H?}X%@r!(_`&pBsLY(OgO?@Wf%g_c
zcR}17H3pb+3GoA46Co4CS7!;1(wBSayPaseFRAoTX|Ciq1Jy+r`m8+K?3aV at Yi~=(
zToyG^)+QzAR26rk=+flReO4||t$&-1O_)rcm7sS#gk1C)#`IdzAmmBuf7YwzGTP7@
z#2L8E%4;#ePrrt=8LHhJPoC-bEdI^OJ&q8>DRz#B9pfo;JXZv4UplAX+RRZ{jT4fr
z`Iv*!mT7p6r&<>Icef(1&2h<E@!D=hiAMSP0_4>hU;1nI)Y381(0jJzKig2F6F-4?
zP6bozGMc-P<OB;stQ4NDv8IPs+A^7%N9U|2aBv>x7#E!-IP&fWj5)J_*NW+8#%S{x
zx+45Fl^ZaxWlCn|x)3~v!UCJL5%IKLz}=Ru$hP~F<NO+esiN1S9qdE at PvT!`>mMBh
zNRHOMCE$zjDfCcVX~c7=TU5Xe?(5KVT01P9z1E*Nkc*8KpA}%ty4S{#W8 at q;4xOPE
z{5y#oF^-L16Xp9i#F#fBXFB{yJQM6O$IyR<92p|a3Gr_WHCwL-R0B^hQ81O~ujK#O
z;bOAYY^=n%x;@Q%ZE-#F&EMYT8-{T!40>c3k%`ey&YQt8jrGV1U}4$_*L0M3FLF}+
z$d(zn<$+eNl+2fdFXZJC+#vdsoydUXyz at 9O8va@-<hLBO%a_|K(H|z0Hh}ki$3=d)
zIXC)&GaJ#uR`Xwdbauf1e;<vw`aga2#()rgwB$efXmMma`e==_kA6HPOJa3}cKEp}
z=_F4v>GQ|IAHF?Mq;UBDcOOmjft*)+Y(Bm3%G=*46SUw2znphIVb*{l`g#1LqH4lD
zY7ktmelfvj4-`C?78UJ*epidWSVeNvv;9(SEhqg at -f}FL-ivYO98dLV3<u6QudR)L
z6W1p>B%3R6uN>PyV!NCYTQjN~yd>4P=%0`?dR%oMP55D-YtbcO+_B0Wl7u6v|0Kr+
z&uNvIANN^PIJ*RmX;GUEcn*zg((s&0Y|HR|GB%j72G6*)5o<EXH)EZGbraTNtn0B(
zw0mQ0XvFi9u{NE}qv8LccPH$^xish(iC8ydEyvoJ8u;Yru!X=zL>X-F5PMN%qvd9T
zL)Jz5K6MuHFgMUf%BwBTv0!-S(shv6^W|-qGC4-4Zj)+*jEDR=Bvyy~f5 at jIc05??
zTY#J>Q}22rADfoQ3z*;M!FJZ=xgC5m9>j(y)ciIEI7G((1oU%FcjSmRwi3LL_hCx}
zwucInAujEJLczS#g#UCO^>bHnOBmKP9p4H&y}gH~`6HGA9Ph{ZTUI at 1fPak0i}JKh
zrN|S0oTFYPF_%#a;9HsKErPEww`D`-EdZw`D|_}X;=*^=6-|%o5rb~90VeU6_OHX(
zdLYtt&r89)RS*d~>~9ugTZO+QYy11=tnDF~?_HT;j;n%s`#NwHm^<xKPvqS`@hj%5
z*1j9i|JyOfYJMA6tw^|RaNia!)Z9!eT02=1vg6v56K+$UsnvOhgI@(Fzvg`IK;_ob
zP|btf0sS^@sOAd6hEI{h at 5yNrtHv1<E>|nIdK*5(yZC~~_c)v~(_?$Fe{=dyLpJ`y
zEQ$2T-61mnSrlW)#Qdzq_8E#H_->RT$6UWMA$WKhF!ihB<cXdat3Ui+S9F|z7-LK}
zZQvV)nqNF^&=tXFaY^2W|8ar)Bf%o$pUf9(eh)z%LN at Sj0k(yFX9uo-7h}2?<l-Va
z4f|2vB%i{!3tHE|jr at Kuht#|nLut-^G*oq^u-TQ!g<Yp%_fpuuo|V+!O@)Vab%u}n
zqncMJR(1_CF6}3T+!c_UzJ<K`E#Aplvcr2a{<9czTL#vN at aamb&yspb(4j8#Wd~tj
zUp^%13mUB({p&+r;JW5CN95RmAHy@=B=a+;IXh<X58rddenrL(j2A(4vYj#O?S<x~
z1ho^_435<nf)8_7$ai4;NfW#XoL3m))EKjdm+ZtX#Ae%<(`>G5q6dFDM!_tSBR;5s
zTdcY`t!RbuQmbPoB|}Uf!)d|TTkU*~tx*t4mp-z!@r`s3c)Ih%J-kwaabxdsa-&80
zOd|U0uw-K;uuiafiA>NjNtuWb{WVHWuoJNjp}UpfiX}GA*yBRY$xV-JtGM?yV6mtC
zypxs=&La9Gu9<~$-gG(K`heJfJ!>$AGc#jFrq%~!?DzV{ehUA(olEc;%<(V%a#~dw
z`+wnnFs$)35qtyw>#LBJ;8#Ffn*!Tw^?!d0_zRes8^Ku)9)lqn^e}LilU$2?^mB9W
z?syS>>$fp`dZ8n>3U<TC2%U)Z`;9U>dSU^sg*{4h)kyraoI5Cw=9>@if;*1IqHlBd
zL;UBN7z at tPfn=<>+0B-tBhqvNe#N&hV2*BbH)0;Ln^Szl+V;wG=@4FG=oyQcm0_k`
zNrP-t0NI9l;&UJ6g6j2elka~EGX3ylJjDrM4&awO1AEt}qh$+Q!uNiU=<xVQF at qDh
zYlf3BwqYDXJ@`9T1Itj07(E?gMw0%&;|}y$6PY9J=TQ%cb0PXL%Dnwh*%h}hYk-km
z1|AaFwOQM+1o;=df!87RT2CS88>Kj)#~kX-%^RrqWb7dre^5_o!~Yn;81%Ll_JbO#
zy|rZ`<l@=AHt7C?6P<O`r{RO+iTopRx-YSh+EPEK<^I6kA0^|+#8Bfc{XjZ$XVl~+
za}I!)yEaeC*)Nv9uJ)>joeH^N;A2_N;xqzC`Frg=*fB9yKg)lP;PULdowkTO at T-HL
za6}lEyvm9DW3f{kO#XQ10YMz_74fJ?V$ThM{RRB|*I|tyK9-mM2~36<He!<_n!m-?
z%D=+qg}X|=6ZKo#kwU{pb$^Tqcme7J8P92q=QPH18soVZ9GOI)AhzBX9T)NJ-VR$D
z=7bZFgS$7j+YG?j)DW9Cz5zZk`zfal_95(a#Kw$%4B5lV0MnxyR|d{c;0|CX+Yj!4
z<W>hZV34%E;fX}f!T1vZnK~Z!lPz>~IJi<pd9p;<Kv;fELCwKRmkuh)dQx7g1m6j_
z7`UKf%T1-p{h&w{On7D`){~Cy+{`^Yz>9(WpB(k-AK-s}iih<cFU(z<qrVQX at nw)R
zBzNE=-zlyNU^f&OONKQbS$4S at eq#LB4 at a>f7$*_)iZN?Wj=Yli(**lCV)*p5);#lF
zc at D?OJHa{K at x4f5-NM6h_?Lbp7#U*kZMzD)TZtmN_!6(kPYvIn-kMGLRR$Ju4bb87
zPXq^T%Ghl91A&>8L#7a?kAsZ^zAo5*Upi?^7VJOR3_EGlNUqx=CW})6-%5?x^c1kM
zm>13sbZ`@aqtFxVkIjg(fSYYx?dY|o?6oaVeL%*Txq8&~4~|TNL4tlB?K at Nz6M2p^
zkIEr7PsSQKq^d-&0)sMT0_u=5M$Vv8t$B{^Xp_jZ=(g)p9bK(r#%g at r5A-bjzFWO$
zb64u<w^fr^U(^fu!F$0+LTpG~A8^&J$%t_*<CP5TL at qOY6F7LuH)Y$Tg3tp-*yF45
z935f}%a;8{mxlamYsT}kh_8w(A!P+-s30v0yhcV`SB~o{o!1e2{~+z`3nMY8JH*$u
z>BAbY2hRi60N;3j^c#ij|3yFb2_kxC)!fKNhYRcw|01|!D{_nAIUg<gyK1-dyHg*1
zcM5pe at ZH;k1hCz#CjL$$gM{Ckjqx9It0R#21 at v#|0|a|GC)^yy_zp%~$^?!{<qGV|
z!VeS9-}6ea+<Rf`IdD}?S(*JwI%4(;4fgIqi6-Q at e}jmrTAPp~iC!6AG)bA8ZNmGj
zmAB;v`EAZcZV9K1I)q$?ndp0V`WA58Yd#H7DNCLlj9T?vMz`NHu%Sf#y9-<lZ-QU{
zY9!&pp2ivKh+8&neI7A6B(LKn%Dc0`waJ<~Qnt{vB-DB>ShGwEPVAfZg1je#C3yBd
zmqT~7bMwG!a%{wtx_D1bjtM5)Bd9a7F?@0GJjilo7z2P8FG+S+Y}8XZscV!^a_Zmr
z0mtxW$O45En$SMZTeDpQ$$cI5oVv&Wd(->pZ0e2!oQC&XM7dN9?EbC6nHCZ!eVl&v
zm1kimZ2v>O at N9RUGUrw3mQzhs-PJOsbivMr0l_=gXJl0>nW at aAde~3Gj?}X at i7>=B
zNulR|O#cS?3K+!<#Pe{*hz2c}A=8YfpvN7!G3t}q$I0o4bM3XJTDm@&Y*R;^xBY|8
z<Y)zN0-H2I?}J?pe4_HC$Y$X7VG9N>>pbFr_gjB!O%|sI=S at zx^z-W+6Gv^pQrOx*
zS+nUctR1*1fLXGC>6uIV+dv%!jHFdB)R<S1 at fzF%@#b<ehTZtU{;KmC822yQQ(Y|Z
z6{nMHMrdw3;x4B^{w)}e{%`r<i()b!^FBje=X$6qVBskE?{2;eF8%r;@RHLhko`2j
zZ-b6-5a%Fw-}JQfr%T~GOmQXlFV>&ov#<@ADCAe&0v<yynUicf{*_1hD|^2neIGdU
zXx}TcZWik{1^%%t#Jw||sn*OxEMCh$(UxpY*}j<YG{c4(vFKyubzDzmc+5MWJB|oQ
z4vJjPYus&z>!uUi&C~cMlerZ73*s5%YY;<vXc}<(=1h)W6xOGp6v4*80utZYeGK<~
zFZjw}^_onnSFaFi&iq4`MEJ56<>DQoj at 9@M1Nz?kSi`^l`mfwv*HUZCM&Kvtiub4E
zn>&K*ty!w;PAt(oZ$}QHy}!dbuzE9M!ODPnZXLLU`CTUXiu3sDt!Ss&)REGdhy&If
zO7Fb^??HU-3?=l8R*VahHlmZHVcaSub0FqVpI8#RGzGYfDJ?pp<Lo+0>$uzL3Y6tZ
zFUgVv)@~9fK5&&PrY~Pgq`{MdIcph}f at jZLbe`7vXVcs9yhc20i1;90d)0PpsKGB?
zY;q$q!3cDpMA$0^1z$M=h>vAe4Cg6prcku4&aAf{pl?5E>+2_VPZb4A+6w5S3TAc&
zY$n5$Y1y!nwc%fRkE`e0rhX#->})QnEAkwwb&poTys#ej1<`jg=2G%3 at ax_i+jO{2
zl-XhcPb%!!FT75HqhK}K#_aKEC!^a7CSh(~51;gU*bUeBsj)7{qQQ0(mU?XKv99%9
z58mH)qKmyb3o%D};KidcN0*VY5Vk3b*rdTX@$yz}Xtg)t8A5;gwSA}tW63QgGof*7
zS7-~4i*ekD<F|>fNb>4-G;va)Gmc!ca4I`~;sEdEjrn5W3)pS2z3?vbNi5!um at jjt
zYY5ThuFskvfW1`bwS3t;YccE(#y-fuPuu`DA=%Sv%TK7Twr+i?_7er;lgKMT?k>!;
zvmuwc?<Us at HRtk(+~SiB9NNB)+Z at be<KFY0SZz(HHt at E_3N=IXudfy50;dcag%aa^
zUqkL;-sr{irQrYkp6h()4ZO3NeJAuT&y%RHuwe%kPwL0}BXEvr1dksgIh#Kd+`?R8
zGOvc7dIWWcIbwFGdois;x$%rAL(v9l&rXaLortGk-n^EeBl=Zs7_M6*coUck_#|$x
zFzbo_Hl%XuVi%;<XA^V=_pR%3%;uQ?$X{`a#y<S0(2E;^XV(mVL?7hgU8D|tIc+UY
zjN+4CTsh>Bi$cw{i|~O#H@()2cPt`0I_Bt&whD3`(J$Kt=qr2sZo+pHOvax<5x(<d
z=!PE;?~iPkX(NZzJR>K{)?a#$HYyn3HuUf5`2Hi%$JA&ai?MwaZDX}~+MwPmQ>GEm
z9VA>Kn!)?XDSV9nnc7FcN-d<3kHM#kjOEw*<ib&3M9hYB_u<!_{gyS0zJGEea1oxg
z?r12TYW|uYIr%PKc`TGp at oGl<+l;=1w&4YR^!8q}l*k%*@4tEMIWkw#<*17&Um8B4
zT+T_Vgy891qR=1jkY_{h!I(n#VO<BFTA~LvkuqMlp>CYdN`Y;m>Cu0I{aZ7<#!T#X
zn(I}>28`>`_Mmfo!!0NOg!~(n<(lkZg3j?oLaC!*Ybo+TXyI$g0yq4hzLwdrsratI
zykSCl!PAT9CA;dWI$%8$hI&Q0*S90rte$;-1BpYn!^b$hn3SK`I4ptqF81Ht|B?F{
z?2DTT9 at 27iB*kqZBZgnD$?ffs1IN{#EwHr!=I4<MACn0=zQ&2Nt)`>pA<LHJSu=x-
zV^uc2s&s<J=QxhH<M>lcQpxeB$nj>#d<R{-tSv1n5%@Q$bM`AGhdIO_1KVOBu`f!T
z^08xBbRKzISWJwo(b at vtoO$Cbe4B#!;7Gq6`hdkP!1wEO5H|LDa|(SQ^G+S?VtvSe
zQLbRdM+o*ycWjr^;87sh8oJb<_#ejF^aR^BU+hRl&Z%mFx#4Bjen4!ZuVJiu4S3i%
z&Lj$Q0hLemG at sN+6D=k0yuA^2GAVS)z4T>8%!AiQ^}fUsoy3oF2OnDYa3E~HMvQ03
zQ|@q?lnGhGjxjHe+|$>GduCy*Pn!cf{aeB|qN`#I81(UtL%UMo8nmmIeTETF;Hq<;
zyM2P3yD)lg_D0~433nZ0=giV^72s!-dK!Qi++xoVH1Fx=dk|c)*%;dneozuO9?mgd
zKtH$x9T`||{PV%3ET2a!?DR5vZ9(a_isv%5z3}rr#WmO``M4jG at b73XV&?VTBu+?h
z(edF_;I}$R%<$!v#t#qEmkExZ$V;M*fL37M>R0yaVBc<NA-oIGZo}gU*3;#%hZyl+
zD*ivg_nhZQM||tYJl6L;I1#qib-Xml)?c=nSnL+_NjLB!O at ue<g4lB9zj6A`xE?-3
z^4-G56H0KQhF*Nf7=j70w!1DC#nWreJ>#mU?u5^58}RRPURTE!rz~~eh?p(>cjSj!
z<J5l_=KiVwB6kM*fDaek5gpOcbAkOtEVeN$n&9mg)PC@#<uZIirE``$bt~_F$U$wy
z_T;*1S~2v^HcH(g1=ipRtl``I<2iz#CHfD!W?VHJOQCBml{1_&_ZA1f`;+&GeTT%k
z1HXZ>`ms=~(-kp2pK()A7Ur>U&}XCGzGH^p1!LEHkK{gJcyOFw2ESW^YA>&Z-49zg
zi?tW!p)PhpuUgG30L~3q3djrn$Oi(Pm>jXm|A+@(X;4Js?_!VZ9_hsoH$sO&E?Fv^
z9y at AZxJm2_)aLGbar$#awisBXMr;aXHf&GwIvl$DKCwHz2)jelz;)os)Om;LjSK6*
z8-5rzhjzqe!RCN#r|^xP+lf7bvuhxaGC2Z)&G3MIDQTkAtRwCFwNHeafe#0y)EQFN
z%k%hGFn*f`T6meHFI;}k3z%MFzj^K1foA>{f`I}r_D)+_$YJ!2Zw4v|cFjvgxE9fd
zV%y66axJ}h?*cwYUMl!xM2%RAVHf1`=#&DNorXA<V8itgEBs0-yMpzVqi*jae#+&X
z<pznT>RioYiz|<UgXLJRTN^NA)h?$<+ at SMc^Orf|oq8eW%xwFI+<Nvu=y?i)*SHOv
zP4By0iDM%9x8%Q_{*HXt?=L#r+nb;M+1}Xp at 3=wQ0q_vT1T*7PZYzZUH<)Hzze8Oc
zsAi&%0^b3A4_8blQm3HP^B_M<U4ue8f%#?i;mhZ_X&77ndjI3xMDRo1C;F=0pXjT=
zff)%-m?|K7eTfcz`7AdVy5=_+;}#5;Bj&P-|DogPP{X3T9@)@Cst7IuoM<^tOo){k
z*SPhPxm=YC|0KgH^ie{`P=afMfv at Z~YjYj5wQR%_e&q76&Q9<IxAjD;0-T;I&S%zC
zU_sBD)g5j$VoK3}f at qzc3D$2o?O2I8(H2Tvtrff?Puh?Ly(!*Y2%n~l7Z-Le)sv7H
z2HxiGY?TuGtou&bUw``3$3K6)YD689WWGtphr9reUi`*j&s%+6y+n?<{g}BQv9QHf
z9q0DkTzR*$@u?agp32`tvq#U$zZZdX1 at 0Ai2-u>jQr70G7`6K<97hz<5ibAf_upVa
z?Cmgp4Zgc$R4eUAEhO`ATasUHOAGdO)UP-`o#q0o^Aw(01N%0fOXAiJRIa$7x<(BX
z4B5*oxM6$rp1XumuYhw0`r^Cbu<M76xt3pZmhi2pfIF_3rgGIp4(C1V^zDv}S=LK@
z+5<W0pKX|Tv{W4IEr(^ZI&x{^pF9X1>J~kp&LBF6_fEFnbW}0k at gva>m#nd#B6hWV
zhf910quh(w?O*aT>3lEMK#gx4yMGb;xy0{<d90lEzbDaM?z?CM`A at KA==oB9HP3|q
z)P*)Eb4=$+9EeRZ*Hgy6KhPcy3U<k%PZ at 40n1a-vLQXGol4+K2Ur_tWO-mA)pCG3O
z!k-vO=0n6)U>-VNi5T|%%RHUFr at 1kCS);z}mwl)7l>>XO`To~q`h at Ah1HWXsCUp)X
zHab(@b<Bh~tHTR#rmm;6{L^mm{0nbP at xOFqqQC0Kc>ng${<D>#{in)p*TsjQ%i*4l
z_>kJ!t;4n3{r80S_tn};#D{$tZY_>my6bVg%YQGnYuRfG{da}-BL-?ay?*dB(YdQP
z{4;E+u&358Jk at 0=`8=*>;Tzo**spL+wC%xompVow)I7XptEcKv*E?*8tynyUi at BBI
z*`NzO5B?CL=H6Sd;YMqJKpi07Ro>;5#jXi<)F1y-Lk(76o0yyTCRY*Mzg1N|^8Wq2
z*M06)&+9mh?@S-mDa#B7adn)Usym|>4S5hd;_kuRfhLU23jc~5`TiL<7}#q37VYY;
zUDN^{cQVE~GA{ofy4%Lug$JZ!>2s$scB>cdwmHPo=TCdlp}YSe=dMP4L^Z(nRSp}@
z^&6^rx3J&Xb<_*|VyHI*-m%?(f2i^Pfly=L(E+ts>T?I<su{=a{w7 at 0-u)2U`TnWc
zuI?UytyzWrT>q?4<JEH8ZTj=Ue~2buecAt<?KiPhkc<7#*!?}W%OyJ0>tL6Wt=HY%
zke4ujB-1TeS74nimIh^U^(z#mKQ3#a_FZk8SAy+CY>Tl@!aCoUQnH&)Sb0v~ws5$6
zA2$v1_X68aVCo{cNuf!1 at NbT}BG#FivWi<M)SP<NR)hbb;9_jJw8w_Ib;$$b6HJ_d
z at elt&)IOkR*O*(pwS))K@>WMF{sH543w+G9e+Kv{j^1eYFTPRcpADO`2AJbtE#M^@
z-{rzVT;7ozyYbzcUoMhklYSR7FBiFRR&<r-U7a;Ab;U=eIajOw>q9lyb%^mS?beH#
z7jPc&oqIwx_S49 at CXH(ZM&Sz9JFzapTA#-ZZb~m5RC8;pE5)k8@*sF~ymM^1399Pr
zN=Byf`Ox-b_$^xoT{^gxyI0!AMKq=N-)xW^2LHuv#P%xN-f+8ZpSXHvHCH8VN4*pt
zEU_UT@&%o>)OB(A;EgtJUWQP<7Q7oJxPGOr6z|)^&5g?TPQ20P|HQC{&LJ3ZV&9Y{
z1*z!8VpUuN@=`{jPUQZ at 0YCouFMml#-ZAL<ESCauTlIbMr_BHub?U58bI}*$EI7du
zqEtVab*}G!KcgTzbsfj%pGCnwY}3(C(mN6^1|JkMMed_<lqSNxI3kXKZBYh0eYX+U
z|L&h1P$dcQ*Br=etE3dFGoF|5?2{Qu+&;($ds$zOjD7B}Av<pQOz5LLDUB`gY?Jtb
zcfCB5BZAGR`pQn#5U$m^G|Q5B-@<Oc6*kx{bTYRISm+ZgH5VuP_a9_n3n^gVm2 at Bv
zzEXS}^y{y<dAEKf-xktC?g`!9R^nLgt_XeO4r~R`Emm<e at x2#OCMk}~ar{Seovk^9
z{PTwH3a9 at z@zd_ZGELroj{b!`Ht4=i*~a at 2_$`Wn-yf92ryvx?{=oW9Y_Z|6AN~%k
zOEGM*#BWmUP(==rwcRJOy>>d{iEF{t*y?`K at x>;Rt0B)K_AEr-9)!*Nu)M9rH27)9
zY1w}3f$f2cFOCMnkDCmi3veTYO73aSFml?IhQFoi7Y!2bLf0!)U(s<~7fa?3x1Y@>
z#Dr-&5{070?JOqyc8SR^vttLX{~mdx1;0a1IE(tZXaU9 at u^YvYp4};dja_4v_zaG0
zm$xlGrRs+*GwID-*DKa6_WAD+eb!kH9W4-zc)^ddW1AoHC+FDI;Q9xjKYV+JKYpUx
zvmFs)UJ at k@EvNp$`uhS2r+bg#?$ZB0hdxa7f%t)Ue5ZgTHU3z>@40}Bubhwp=iB!U
z?0c2rVdjhk1LXQ_a}wbx-~v1Ey&<@X%EdYcSnxDk6RTrIx8?Jagi#Xkkad77>sv*t
z<cdtM6AjVHL{Cd(`oJZ8cWFWHgwxP3t9`?yA5U3=G9ykHT#m_e;*KTzwg+5%DMZ#C
zY5Mcsjic{IY&YIr$iBPT`sm#XTRHv>cw&G4)IAf=+eG>d!CH`KQpS!c9Po-9C=)gE
zz!zwFD?+?X<Gqn^f{|RKZSW}$wsW<FAF!K=Y=o^cGob2~KAW196XyaUSJBoix(dFY
z23`ris}6o<6<B>$!m#Nt+gijA+$wNg4_Dl3*hu(1bF at mXm;*l(Y*gS8ofDr*cwtG-
zi7M#RRhZA#f+uq=VxQOI-WAZ{0waiQ7iS9rh9B`)LeaZv=E^Ji%wEDH2|l&$T-cqh
z`>+6)I3)4g8v#t<2;HUw9yp2IJ7Thx at gvB4{95=C;I(MZ>V|DI3FpNN^MYBN(n!7K
zEq4Wp{bqSd5%X_f!}5^I971+Y+t=XPiSM5CNggrbx~8i;lnT;r{8Grj8EH)I?rHFo
z at Z<-{d&TT~n{1`nPGq;6|F8Sa)sqM>Ta&qheOHr>JOdbOwk(O*mW*yo5DOwk*%SE@
zS#}&xS~&Em{QGqivxhY$z-2r67x0}XluKr=3 at 7zrV$0XURY*xWTi7}>{a<Cm{Y|*P
zdG!7!_Ws1t`xDvwoBpr+i7aNh*+UNqH=UCwbvI4Wcz_$<E8h^^-6*e&Xtafkr30l~
z!~7*873 at 6Kx-M33!982gX-_3UkF at T<{GdV%PaNSH=xY`{&iX!X`AyyfjtG`p0Jv=u
zLw|oMi-kyY%p8sRPsRE;xI++&2y8ap*G%%T!1szgo{+06NsO|s4#(<oof-BD!ogmL
z?fv{Y$Rpn_uc0al9|Pv_nZq(ZWM3A40spF}gbsx5W4`lQBVLqZEE`XCp}{c;I^FSQ
zHSF5#jDsF_^KAt_Hir&8%lbRUCFA*%$b0|17VpKjnY>%@(5LjJujO4EkDE(-8tyLz
z4js8kQHFOQSEUY at 6Fo}Av^*g93tVB7L;g}yR%bccKD%RdF8J2Y9MMq6`PEZRsC(GR
zx^)v!=fL=Wg*=Dtq#sd6>q)1d at 58U<n(jtg6OrQ%F7MFFwy%6jo2Br#=gJMhD^$Ra
zcMr=5FdALZB`!mkNP})PW|Nxet(@~%PGhlnl7DtX4&9$)6*YhldN5cbD#(!dBuVIy
z9K1VLF2ud!9wpjDDetuP3Sx9!IPHq)asHxo+zSrnmlCvDCCr-|*m+*XwJD#r2Rtz=
z1e`{7Jc0Fh+|wO!ZiL1n!(zhHh@}}z6P9``byym(?8c(QQi`Pviyn)5MYVS*-g6V{
z%~)T>GpAB&E3oR`eSPp<H at w7;#yHY|<1Tn-vpo#;c~T-x-%avRxq#QgdR?xGo+d9t
z*`$Jt4fD*soL{lb!s2x$_lfUtT-G!86CvTB1-~LVc%jGUfHQ3nIjv0N>g1+DjYocP
z($*rx<|F5(XBqTVlJDb-J>6V|-H3c{6l94Ew4X%Z$+a6Hi$<-qM69&dK?eWb8N&gb
z>oLjN47YBhM5FvW!MVPiIX>{$II<{5*W&|2E`RP9HTb!o>8PRGG+j5dTC+`AP#IrV
zTNSUj_58JMD93oLp<0oPk)gN8m$_=F0$o;+%9f4&y!bMltJY;<n~7K3wqq^j5-!-i
zHnsD5n}i&TFUvcPytOsXV|YdpdrxA#I`6!wptVP^&jx-g at _gLeqRZ-F=<;~A!MbdR
z<MOsjluK8l-F8g{o>tvi;5YXA6zUWtemIDck3pP!%bN?j4YB9^B_|pGq?4-DvEma?
zhOG>cCq*c&`nFVB%l(32Zc#sBoPLVtbWuwA!G*VinP8LDD|J1`zU-WCE%X@?6(91^
znLk#BM<w|8yq6RF;T7gx%@w9r^ED&EJbzsaf3e1#!$Vxuqh+(U8ryH?=&)SJvSf5k
zw#ibhO<>p8wPiU4njnVU*QfDhW at wc;k84lk+_KU0E7`SK^JdNgEDgB#n09>5uk2#Z
zsm<XIVaYRO##arGiCtNp6JJ$(c3JI!by-F2DK5clnrz6^!%2#-!gixBpK8b}z}$M)
zH-OdxKV0M0hn$AFoFCcqyLI{4R>arXpN%KD(lT8M_Os#*4rzQPd|XO0PurGIIoK{3
z=)t)}=wOGi7IVXyh7iWq9eb9ewf>}2T1z?oE8f?wvgU9G;%jj1h^`phx8uvPy<b=4
z8_-$`d8IGD3T3ZF8Jak<h`bVivnehL<tq0|&nw2-;3dv0!n(ps%D($ayeq{k-9Ft*
z!j`|>YdgC}?7`7+QFdNO>{-Wl-vGNe`#lY|uW>yMEZ!+9$8Z+c1do1qEso8O&92tO
zSGATV<mmFTy(7M6c+8Syl?KmfLwtG?@@1s&Er`{3o*EwW!<o=~7Zr#z8Ca=l|IF4Y
zJ~2%P-^LjUGd7HSIrQEka_$af_8GRL;uC)4+(`-Z^dH>Yq4%!f9O2Pyr)+;fr)+pE
z8~f+scRg>rjr~Tlf95XYZw72P#V3Nuy{EwYIEH&FwEsdTbj+Mn-9MZS?Z34X_JLj9
zHR8k5cZ(0ZOT;Ih%fYpWC5)SbyBm30imfu(HfuPh(0g5b at s7%sno~ZuM3x(9Gh*5p
z+dgNxT)*NbIm_D-U;|Exlfjc>AH4dP5R;B;%o1i?Cl_(%XGXyPc|&V}Y<KX7NLg3p
zWJ`DII@%E#-i at 3mWAEV`XDg*slSr&^_mpQfswEg_0 at EjP(;`A6nXcW+T-Xd$am^vs
ztlmNJyTFYmeyTLlN!BMgxJNd6PsS{6Zmix4yppBu2C$UfjRKSGAb8G{mlT`^YrETX
zY>Wxx((NT*nU~1~+lR6&UE&)H^xW0~DdNS_s9(XIKGc>f0JkQ4&yd at 5@O{zB+kTZK
zF2&^liA(XzUKO)4FPE`rxd3Bpkwd2_c3i+5^&R|k|8{8tr#<6R2YFH$YdT1H*mJ at 2
zJ_G(eA at WEAlPc0vQga!lYQ2f^sSNY<HENedPVgzPS8t~Zi0@@+`HU=AN9Qo|*R&5t
z#TIj#2_L)nKagAE9ieDlpIl9~I!0#H<5_uTqt!C5?pUu|+tgw^;Q(TJ>`3e;nL93|
z;+ib8nw*EOTggMb)nD<@PMa{~Um<v3h at a(^V=}r at WFb5*;B+Zs<sI;AyS~r&Ao&7;
z0n7QXbF$gG(A__mAa1h4TncUq<V1FTpPLI??H0$|@E^@5GRd)Pbmg399X;Y3)9b)p
zw0JUNNIDJX3f7+7IEqIpmG7q}f#+q>a3x~pL(G+QA}I^n_YRgn5pf3O8Q^xR<nP+k
z4W4_J=Sh?e-wpU)SDPKLi84pGdDvDsw^ue}TjkvTbdlpV&thyJUupcb1IM9b#f1_Z
z7HpDp<dXQ)@}&4vas%q{kVKkNDexudAPY7us9sWHxoIBaw2MpuRkQ2mUxbIvG?s3_
z5~J&iKc};UKejjiRH|{xXA4?GI16e+0wmfM;4Aq1??R1i`GOPgzZ!68=fi+QiyE<*
zoP2Qn7U)02gm(j&w$y`V at TJrM|An?2P%75?U@=#*d1m07qRb1_x8=@!C_UM?cN2S0
zKi83brI4v09CAI`{Xg{3{la(^PeUbP*@NX2<Nzk%XD$5M6H*~>Y;`0<e$rz6eofGz
zCBBu}XsbUdVlG`q4D_=KX7v|1Hsnd_kzQ$xJnwkMlhiNSK8bBokBCvCMA$CDHn{Vm
z+Oe&~Hu(R-)?>SHbX$jQ5_^N=E6H=n|G;xro3NdN?Gar65ZlSvcK(lNJX5i4$MLI<
zX9(w$$b`J12OLA5i8y{2JbhBfGmzK8qvm*z3PXNmVA#Ny)5uG+HLLQb&bssy{cJ?Z
z*)W%mfhyiQ$7+K05V#tOSUoWx{j|`Q&T{nqBGPo`rA4`K0XNQ~6KZb#2{CLT%Yg?}
zPod>IHW}Fe(<ZnjGJcYEyaG9U7a_L;IDz9 at _`ATtw$o;qk=vIJ`;daaOP&NjCGw>^
zdeD#De1E0aqWvz$cvGC-2>yd+`zteZLkl~zfOp(Ncr at g{P*a1t&i8UoS;3Lvo#k`x
zP at Mdi0@G8cF`j|Hd{F(Vsrni)f6dcid+eZXDPHTqQ=SFh0n@<WTr2}0yl(1NduGCJ
z3mZFEGO%=^q8nU$@+7Yr7KhhzaQ(0E+sQ4#wh*}hz^j7$I=Ej#ZZ4$LF}^1OkI(8d
zC~u6f={Ef8PZ55r_Y!WHcLX)7ZipDXH(Rb1OUD6|q0PZ{V~9?~*4;_)wdbS%j>j7O
z0)p9&w>@Rfe$MjI%^1Em%Kf0}*@=I+i|~eU&i?hSj$x}FbpzW!-{UASoNju;=Kzl3
z#CZx}MPoKfta+%b7 at xguPye1ePYfUY)2f#yO8Xifl^fiNZ-yw_nn}#Is2+W&##Ze$
zi0>wt#u!x<?+06riv=7>8+!S?wYE}xTNKM97lS&vfI4BXbA-c}6vdv?!haY8ohNGe
z8pgUn!kIxa0mywN&kzi7&RA9WPq}g-xW0;A4j%`0(M?aV=>iS7O7jL}@U6tTBi`Oi
zc2($~4m)l1oKD`CmVUH}0O*i)&>^Awk+QLvQrIUg4&X>WnGen{@_ytKTux%u<sG;m
zxfpO=4k;V(PGp-cC;3;DNv_#M{8WwF%dD@;siy`AX5+f=*<6!^HwC^wgBpI(kf1!U
zJTq}oq6T{g^tT$Peu(b`KOW{9t-yy)f*yE;VE5)5aeT^fr9c4x%?E@#&oKsiBlrWB
z974OHvA%<K+J8I)oL+Rapt<^**K>{|36}?6BJG6Fhs~aLxZuC;B4eird3Hwj$}9QH
zg<%O{BnDv#;V2Gc22f`3tii8XNc_LBH{tz#O~eKSTLX=JpN;&T at bil?{x-|NnHmZn
zm9|>`gwRTF<jW?U3%FMaT)YeV;m62Xxz at MDzJB9z$5G51Mqsp6$UB}6U7GzSf at 2jl
zAJp;Z$WzJu0bSgHdUA-`3lb?{ioIh7GEx4y$eV{8kd8^jml`XBkAu|9WO|lZ>X+=x
z5T63Q)*pEpZ5g4)L(R4dvDCW;euDIQ+0;kgpUSlh3%gq}*Uu6(!$%)049ks2|7*p1
zDfkUB4tu|W+}5UvRmlC5%uNoJ9mpEcfonjsse#z(hi6$Cx7S+`^J30(dmZ>1=yUQ{
zddk6nr{kSAC)1VYMw-Y{-J<XjuNTe)yfrHxeC+l9`elr{md>RcRu<g at H=n7C2mA7@
zc!@3oobnN2p~o+6#dm}amjf4G={ND74_iOre?k3pi{k%$)`3lURv=?;qH{Tqp0$&g
z&pvA{@>3{=FwYQs(X1fyywpJPjR{Nez0rsx(Dv-<7gB@%-ItiqYn|DtTG#+8Lzq-X
zoE{O5d9!g=5F3k#m~J|Hs9|!<v}E~O<rBa}o&~o&<a2A83OopAwK>2w40$-*xohB?
zQ}7OUMB9i>@Eb1pkFe&roB-xi0?gPGz-G3~*HW8EJ+S2l$3CZF*=31g<z9JrMBKpc
z_cx}-iyt5+nY53_8;OKdiHhiMn3jou at hx~Zk+U2;%t<`trxFo=Ne}Yk<$wdM8S&;h
z^4?=joJ80bE}w+1<NI1}cSQ1|++$}y#eZlMg}1cKoqS8z!|4|m^!laryxA}8&dSq7
zJ~UT3{|DkzqMJH-ir}&%%ss7F3hFH`HCp^&!g7(RPgl at GJMX!br<sx%EZD?=a}Rb|
z at 71&+BALDS24V;G6yt+BC-%htAGq(OO2p|CmXh2)=woY8Co_S!){=GvzKR- at 7kO<U
z&uxaSS#4i`jG at u5T>Cp8ET|v;7r21NpHW}Q^$kM#{~bFdlfX~0ALGGd^qbO+$1zuB
z+CPM>4}OzSMMtJ8?m6Uw6g<|aCmaRG+-M`=DS(f^MtoyV1>zR$(~y%x5z~(OZ>HLM
z9vn{KFGU<f?}i-5Z=xK#4S08q#|{tZ-^Bg}K4Rd3vJ4f_JInnhV?n$(iA_*!SQ+U1
z?Ei9fW9%fc_hVsuQcX}>FO7KlO{ETW7Rbw-9NjBFf5g!(J~#Y$Pj+7kzDq+7xe+X-
zVp2AE+H~>^p8{a5fn9^Gqz>a8?99aXOzddX<CG%EC at SXFca{@78YjSMPvg7+&hkk#
z@&@48JCKDZxr6@~w%>(Ryseb%<M={R9C*EbkY^){16e;Viai!jm;cYPcSINmpohMp
zh^Ec~?+2{Kz%J^0j-aywd|b(-{syyw=X`@x9Be#aq`JQFwXRY;>y1wvk)OkaoTB3i
zKOlRZfZB%o7_aJ`mg&eL*NEb=KjzQ<0Cs;obZl;cc41C;nJ621vny;}g!9VfkYjjK
z5%N5h2WgtYNQ1oECE#)?1u1$5FHbHcWkfv%EX)C>lRS6ARjq#(>{H`$E|>ErIls`<
zt#`h63Ezr&Q4zyD%ToxWim#IVCvBzNd|}j*S#6QrB9vi#u#rkqX<^qxYyfa~;E6 at v
z$l?gt{yQsx<Je+<9{VMbp)xw8oP}tEwOGG{brseDSl3|v2G$jxMkfx8<(?d(*D4u_
zJ|s&fi9Fxd^<1T;KeEpw%gSx50&YEH;kK at FWs}^5@~A^9%$ebFMHDw0`CZ1NY)8$&
z5PXojB1ffl&$czA{0H4P+8SOrbyZW}UtK=0Bv?#oRM#ivs%+EJz-jQMEettm-XJoT
z%OO&4sLyhbiPmv!y=lRHQ00sN3;a)5&Ls1f$9g$$a954)Uo*eU?j!!63OA at bz@r$R
zhq%BjVow>Gy|tudKyX}}jW&5aax&qD2NW=u!|nJ<)`s at fJhq7V<v4w-w-Eo{vVP at j
ztvbR-4ZF!(^le!ev7OLMWi=gR={g?xO0D@<4aomg<(ojMBL~1+3|U7JU3XC#FrgCL
znDaT_Rt7kWXF27gyhNELx)r^m$%r>FIgYp-qSIV11*L4QcN_^hgzu4=zaxG^B1 at Z}
zMJ(`Fz=3De@>z&i1oxH1Wj}HvqYS)4^6p^G!z9=%X>1o=tx)<b*m-O=2ev++(xi9E
z at gP0&zT-NdQcnZcD)7_eJQf4StQ0(FFYGui3-h{l1!6iy*~l64 at v!MVvV&4q)*~01
z(x%3Ls3LMK+F~Wfk}8x(x3v`II9j0fn`+Z9KL-wyJlHZMgeR29|CsA<v9kGlo at vAH
zfmiH3Px0`3zL$s(5*(mUadINtDShOCtA!d5{v*aiA34ZrwsuoLMYg9(%!!<H7)SP^
zY%L2-U1hw?!F5V0&3LbN)klK+5#^}z^T7A2?$1Ga_OX4Y1Y=bi<PVze*%;$U$M}8P
zTCdIW6%Ds_^l;vYH04zwJ}>OE*|M%>rH)D8>tqKDQj{r((+v!{_|OY7(oe7En1QmD
zb)ml*%oe<RUvTsK4CHz&Ia2x8e|sG^2(%*-cP&FdRXNM%a~0PqZDrH)2ERhvt0Fur
zyzJnzORCZTh4)~*A at W8bxYh!Ff2HPi7ElK}5jRLPZihMqH2mavZj-qZ-&eb^q)V at 4
zyiDBONB<FiQpjvR<H at _>>)1`cAK$E$OSYC;9tP!%yg=Hn;BmBB*a091A3>ju;VB3<
zftS=dFtDHCG@&EC^S<)r!PqIGU7cA)jWdtBb^#O8b at 3$D1K8gW{*va6 at DBu!g$~w+
zF*^<1HSa2-mwwB;7~H!oE4VB;%aIe3LpeIz+bWLbacZ$tVlkNWz~hr+OR{3!Qcr7J
z^t3kQ3Ds6!f$J at 6{<2|Z5!R~HWgSO21`%_iMwH|6m^I%c5#Nz%Ey7a5+kqJM9oBj_
zuU`%3Ima}@eN=xOb`Hlx^8MboFs8*5e2+6<9r8<Psc^!7%+AAoemR(@+AY0=R{&f;
z)6fpoorV>fW8se3n5VCkxU^YMlbBbJwItr_)bp at 63~~B9Vt*-R^JEZQOV0%4unoHP
zYVndj>qEc(&hblbTkmuFF>mx)`&-9|54)+oGBLLg!oEnZKZ@;vqCw^e=U&TYj+Wn2
zL at A%7>#1;$dDaOYXRJ><5+hH`4xkRxc-a^$vY<DemLYzJ?g`H+(Z3l_{3~w7#FwwE
zZ{9`yLBBYw5HZ(k;6&?zaR-0RsV|7$*VY0(tcZ4Tt8tg(|Bpw19!ujnBo at -G1aS&)
zfGZ;4|8e&2aZT3!|9EMkIGrV+<uaXsq;_Bud3Uh8 at O0~3G=WgBXbNfunUzxaol<Ob
zAY9>KV?!L{u#NLU84MIe4Ll^P6cG?6a|eOatPm!7s_*lC4gGZA-~01 at Jbu4F_PDNH
z$M^L<z7EgV^A&goJk%n5=hvflo<e!c`<DrpcxWj*H}t%v*jmQ@%4!h(3o_T|)_m?J
ztP%0RzRK`ytl^*`l2|6e7t!Qsq~Zq~u<igiZI=XElZ$BC?)UuLWzx{@?4<1u#5jEV
z;2qz5p(C8ZMD`!$0iQdV8VIbKUm at X-X4cWI9>mUd9&I>-<hp5uJTS`ftpx|I3f%1s
zcQxT;6_&Lnc at Fm6MceJNfFJD1rDLJP0W${9MY)9g4LGpRSc&ax4fw_C0>UAu5bo{V
zmNng{2*ztx1ja)ZYcp#QI?u?2bUbqic8f2eN5gJ5B^|oZ7t8ZGV+dd1gvE#v&-2<(
z&b2g%Qc<sy<z&5mRaA{~t2}P9_c8BYP2`m1O_Ll8+|Sv}{uJ@*=$Es`xno(+9RZ%y
zNWS&nL9|tFB<X*pR at mr0SMlcTf$lpYcTu`?w<0#<Gfp1X>dA<Cld%vRg}9T6RwFs?
zwVtfu1j}wMQ^c;E8`_06-dlSO*I=#nv|GkQcOx;{u_N{DeekXIPsk<xq%-qo0T-B7
z?owa_!-28>`~;1;<Q06!i<FVbA;_Uqg7-|qbH>>Iu)H)O2V>$#(w`_L;l{-LGW4K5
zk0ajYM{o!-7+dZpU^$bZbCB3f=$OcZLHcYCFtWwqSVZ0f8kn>(z=DsY5V=+?d+O&!
zmCizO+S6p+Bs_;*VwsnO%u!h~{`bTWin+T4<(oYJ3H0Sx?>vkB2{<OfcKqCFnA>U_
zZHNg!Lf at PKo-V7HV6&&?vWz|Dtz|EGqhCEUlq4D=IlsZTB?~Q`u2`YV19unEt#@7)
zp8q|UnMVqU{Dk$h4_t6|l;4wi4stx=IaSPaCf>J)B8Rw($svwB9|TuJaIS+i!8-Sp
z%2UzKx-P^uwCSv01-_5xzeRA|%yS9u9Gu1D9PFitJ$Zd3(bDJn28lcH25uJbAvpOH
zqicv#bd&ZcWtPiWv!`f9I*m%cn4=6muTjDF+{c<7r|!JQJ5FqdSNQmrs0(|-s;NwO
zj5Wa~<6WtE7vd4dyv at k<49=MKI*BVM_>$R6JAc94IXE4>l+d9D5zBBPg5W-!z&>}i
zV*G?ejXlQ9mo`y`?KR%J1p7?v1aBM%w&WnGza@~fpgX_&dMm*`w-ymjXXyO<A+t_~
zOqLA1(sWXmfQ82#JdlK5u0bw>h$tQA3Hb2Ax%}{TDVMBIT22&I=;knlt@;4C5t5}U
z&L~%+;9XLdIYNRzhb`?nGA}fjSxzGURpq&gr5>z?Z<W|5zyZ?vlgRXw<k*HiOTcw0
zflt-r$&BU#U)G2(>>h}FKwHIS-ow0aBY8c5X`Q`I1*{I4pMQ}{=>7>+s0%wVul0!Q
zPynl1>z+4hWp^Dg0Y!Apd~e$y+Yi`B$n!{yvm*AP^@usI-(Hn>ZRY{|z3mkgucrg`
zmO&Q)$0FvWf*Um1Gl|N}bG~}P(a>ED9>xofI^bP*PuUHbU!7NgJf(a52?sQ6sc(n=
zg?G1x)VX{axLiko*Z&;jN49mlt%1}jiIbR?O&dtx^tS at fK=Mi%<Sj2`k~tjhn at ig2
z&F9fp;9U=Scj=q*sz4SvVU=XwAb9VgtpSlEx`bY#@w;@Pu|;XE<kb%yW#=7}WEY+-
z7qm1rPtPEI+clZkKZxywBV%wJZZ6D*P=)0K)YXno2kC!)-!pkWfE`9|oI>D(RTGLt
z=_GDs@>GgzO93{BVtBwhScBB}ggd0YP%Gm|Xj#gXEPu1pB~3}1UVn at hv@|0(SQFMT
z#P@>Nab70jTur#m5idNu^9gcar!xyU7o7iXk-|~WrkLX-)*r`TME(|X+*wLwE3ZW4
z#TAp-sutwJ9a+3+pVNmNN7>e>77jl~V)8JrPh`Ij4Ac(DzNMY7K~K#kdg{O)b@)JM
z;6FqWbP*@-nDcQpasv9vphqF^R<$((<CNgklzE7e3cSa};1C|LXu>@SZWoCLamG*W
zNB%?L{jp{~(XCEBJ{|c|ES<o&ARb}T2I3nS%q7nt&yp6c(P`SuWrW8epx4ch+nvx-
zH)`80;;4n^FQ$y<H_(_1#C_~~ao>dM_i6`Mvx(nA#kwn3O`gqMr)B=%ldITz_LsmC
ziD8phAWkFY`Wp-6d!=l~E-;+JyZWOnC>b_7<zNnpeVDsl*z+gi?%>bISOcdkaK=4j
zkzYhjWOl;sKX?RlZ<)D&JnROeYjo5|vqv{#rD}kuxn|Gs=$^m8@(bd(f>~CDYT4^v
zd5Bs4h`+!hqlyhN{4o}pwdlQ$&_#ZqGq(I*p02ghD-ZE<0n=u?!n|YGE!eAn=TGYa
zMa(*1uk|A#oXsO4z(&Fc*HRd{BWGQfbH^I26RlW_wW0&&g1po#YqlwYt2=<TdP|E6
zYv<nxXD_y}MVr$|PKm7J=Do-jLI?idLgJyr_dS2DJV at hTD+!hAUj-j8rG!phJ5+6+
z>M7#=V6A?o!-+goA at 5#2Grzh!t{FHiEplSAWD6KQ|MwT%*V%9F)I(oXb3W;Y+=YJh
z7`Tf~q(3RPXuJbi=1MA4ju^eknTRtg5o_56zKD|%0muFNw?ptRlKFXZD*V+iLasud
zA#*i}3+di6-`E|u)MQDQksLAa-r3~&t}J>uEQlG4e}0O!lU!Trz7~3VT(VSf`Bw$G
zc7gkvC*XII;J?T{C(<z<-J^Y=7JVR9^o=D~wq;SI^APf*pkBd6-#+M^2JWYe`^-jB
zCg!2vku$0ramX&@YE%xAIH>~>kWnt~W9Cs4a{JaX{<kUkMrG$uoNSciGjOWrU>##4
zcVC7)8Sj6SiTQ$k?8Jw`25tv@&cu(-MV`q^gGFvEjnu#k7_4*e?|z8!>s^q8BZV5%
zGbw1{X;tShVG0(oNhE(^P<4Qo*fqySA|_ZTXlpLkru0-rRt`TK_;*3o1XVNS&T$QX
z99Jf%kyVMD5k`x$H5uIS6?anUB2^-*DEnqiIpWWX!9ib^eRF#`{NRT-#o8zMaUk>U
zn~%80rHK7r at lAb>?GbS8muBDmyqv8S6xPOC3$$wgDBiJQKg1Tq0RLDZQdo-?WjKpO
zIV+5pGfA#?#1GsPN|ed)gC0V at q-<b$jDvZEha>Q?Ju&Wr?RmFM%V4v}T7`MiT+HMh
ziyeNG_!hYr7_KV#IZ|yN-N<oxTA;H;OdhlVV{94TD;cX6ytH2hUrYjG#=eLD?wd~g
z<sz2DDHG>EmE-zw1>)tH<7a}5OS4>ek^iws5qEXsYh6y_&seDmWI4<)dA^DLHz8j(
zKJd9^n87t1^6o1hc=l&#f1fa8WN(mBnB}@M9sU!I>;QSrGr$<up<YP-6q4&I6~|@=
zM6eV+rL-fV_uE3O#{zSv=PIt8_&1T$;qxdZVkwc^0qgge2l&0$(Vqx5_^#!Y=W<rc
z^%D40mItL at FAGu*rn3nj!4PB|8LMCL_%}u1J1%3Bm`~YY9c)o4_kB%Rljc3}eG$K5
zhPjd%^HOsu^uX7-Ne_Hqh;8*m{o?vz*j^J at W4b@9nD=;wcIt|7Yni5QT)AL+vR!PN
zbZf=iEXBpVoaYt|Igvw0rCg*IOhJ843p?YaL$AoBa^#MD`L3e`TtlJ=@C$Jitc*2z
zKbaS(zinJs2W|myc~c$PdS`k{zQ0B;&K{oJrj-FpA(K``ga;Yl%tB7|3>tWBEArFq
zDY;xkJ0RDUGuP8@{2l6DiF!Z6Q6siG3VQly%Q0snS21wkqFO8RoUqF&<R1iYeifVK
zciaJah>3OS{Do;BjhVzIM+KB>9qe?wLR8z5FFHu{0GAixX6ybKKVbYYk6g95Ab-ZE
z+I*5=%l`s6YaM?9#nhYqwD~st{1afuId4Br9U001_U|LaW5e!{di+c}tM2S?Ea(Fx
zvE8N#r?y^j+p^u<!N9kTc<Oov3GXjtI~h3nNKUItcTOw#@!k+OO{gaGM?y~JRgElF
zC%E)vb<ZG?SKb;+%I>$4l#j at Cf}_aEdSyzE0Gv|DTS>UI!N~x<z8Jp(vQ7g79ObuD
zsJkc=>a23uuj^J6H0HKQv(;3oS8dKCKJ|$2^;uC+pWD)ut&S=6!u;2+I at tstttG%`
z>1o)$3iP=x$FgrOEcMxga>l#;Jvcu|@|Ic<r at _r7c}zW1$^V|)WS`|j_AhQ>jz7vA
zKSgW=sk1MuSmns={l>bwmV&c2ta8|~4r^Vkcj%j*4#ejcUskdl>>O6@#cX#hK>L{>
zU2hh?!P5nf)fa+ap29yjus1h1Pqnn^W$;i0DMFi7CjRl3kX)}-exbU%GF<1+DgS>y
z%gJyPRK5HqU)LgW6u+F~C=eKcb0K&V*k{+(BHrP%)KlOCnhhPGT>KpLc{Sn+_i=a^
zRj?h)gp>UCSgV<1IXITd_(j8W&%h=QUq(Q@?OCrc%2i(fw5}0P@;nON$6)yt{7C<>
z)}vg=Q8*F;ZeGZk!{C#{x64u-{@HxVQ1ef3fJZ|=ARh^NZNw?C)Qv9*9GmQfE%BXz
z;ak2UAKLy*W-4UP;fbMbsSc(NGMy!PuB8%<OBw%`Uyj$Jx19&k7uRdllglHpR=MXp
zt<I at R$-gY79sU}vo~@o-M0JEl-<7R+{8}~S<DH at B!PSuakHH^*()4*nERYg860z<v
zq03#$SC(<K<iAakt$H<y)GcE4%g@>|-iRGe0z2G=TfWq1v|Z%=JM2hktJb{!(Xy3c
zD<O8r&`a8DC>QYAuPi&0G at +RTURC&To4Y+GH0PN-+q0{sNoVU=2gHuy1HiMQZd?!N
z$tIC{fo-;CE}PVUF6uUXgq};@(*}OB*x}9atyX)S^h91;<imiU7e4J6*xV0t4`6)l
zgN?7T(N6HssB;$DHUylDSkqxY9hq>7<ZuMH{TrHvab=o0NkzOV{Qm73_7xtj1TXcB
zmihzn6(p}`gYcD}M*kBhqC#i*sbt7~9lR|-wU<4k9`Y;UYTi5aH0+s0;3p~Tks^=i
zj!Or(<uI~NC3UR49NgCF+ld^NLm$uUc-BZQL>;lnbF2vg at xoWSjqYa$|Ml63C}N&1
z9(wk{v-dO4E**V#neQUV6zM~rsE3Y- at SG{^?IR(ycv!Tk-dV>(%vg_l==P#4#Fc$v
z_lGX`7V at D08?d54)L-u8y`y)s4Z>HfCm9{(hNf$08OaS2n3;MFc|0Db`o|aaxIBw3
zS;rpXeHp6oP>t&MW&HhJ8N+EF9gIxZ$mE)l+C#v(a*#L0Z1gpwOzNSdyyBU~mQ2iT
zqxmfF%Ai9oV)6kL`0j(fNCo>}4)Th4&~2A9fT{R9up30roM?}LZm6e}*nd*^O7BH?
z-Awyy-CP*0n*%Hd^0)ocT{xjR`=!6P at pkZS<yxD*JDruk?KS%fjiI<`)Lx(!tQt;R
z6YFlzAbPZ|_A>Qp8m-Sd at NA+S;G;_Otl&k<9cS?$SmyG)j at Sv*Lc&k&+Q8Iv#7KyE
z(!?XE<A$CKW-Y<|_#z)vH|$S6E^yTAw9kVJMlI at IQ4rQ|-yrJHJMkRk{|t4U>b53{
zCyfQ?7w)YyOL<dTni$N`VcL;hCvV$%0(v<xKH?_NI>D2`V(ymzlC74uHOc7w?f7m{
zE$VcH<Pb%E&{$V at Ks@belKpL|AZJAlo!gwxJFudrk!;N?YHG-~bVW^lZgYWD<*Ccw
zy}fjbI!tF)f%_pNOm_$Ibpha+?-`k_vvdGAr)<)qFOj^4$ej%C(0z=box##WwkQ)3
zY(g$`?CP#4;DsI?U*gdXe(5d5Mj-65HbQ>ZLWd%G0mX7D at FDpW?0A+s&o{AF4_?f>
z1UuXK5+*OfV#w2Zzy~E_?A{YLv?bd|5T9R)F)ZWKgcrj0^nF<d>v%;#6vlqkND0={
z<6Fxn8!b8Ig at hY_-qUxG6GrY3jh2<1cXQ at 9*IH!b^QYt?r|j3a=SE9zKTqOzE-I`C
z*7z7}<~?n!ocAQjGdaEt{%6U&r*R(o1!B3e9s{#O@=KEW;=)bmx<S8<C!+THiXuWo
zE}Hn^<w_?_^4hKo2A{9Vd;~U<vYr%H?Hcg5tWh-Qa}r at +%?=6AHsV;`P?<%&r;L+J
zR|OX0e>QY;NwPHXbdJ}WSju3 at 6h&KNtvfD*+Zwh=I_2gh2a$bN`SHKGyx64%W~%h;
zRQlN2IrLHUOM8mJv3r=TQv{b8aF0?@+R9fgeRP?oUs9AX8CdRYew#3(@@2Y^uF~`;
z79~ssXNHnL>wHG#-z*)pQS<o2;Kjy$GX9)%8Mqg|P0hkFxEFrOKynUw*2MgA=Q1b>
zV#0^0nf##lGAe&d at Zi4`mBD}M?F_^?U!qT<pPXA44BV%ZzDC`EJe342!sVrpTdF&6
znCFbo_ezG$a+Bl)hdtUglV|yQ=EIgW&W4K_Gr1Ny=5mSk$XO58v9m9+j+);YUwn2d
z>&V%D)?u<X0ADh_M>cw2BJLC8J~i%>;=Ux#;}^4*equ=^94_PG({RuIJWuFR;h6I^
zgZqGWtE6h&STSnf$Vv at l4)XJ0LB8Ft{p^Vh8?v@~E`hAIL~dXipGXgrg6|jS$a$9w
zy4jNZ*FHwhW!yg}Qd(rki>0;D6GrdX?4Eqkef>x(Y;G&(6!sia#AX>WznPwb53`3Y
z(pi+|gGA<r-L{nXFv+*f>7^Qn*12s2;KKM6eR~nX^o at MG&PBt=l~p$C;~TPMz|Lb$
zbzuJP?N-4ik9_0M?=9fp3_-qt{D7~(vz_X?H02|V!w$2-k_f$iXz4-ApZM=H`u`68
zk6=tTkUWj7Ti_rg962tMljBkX>n8P0JMtQVA9cTd=9zi0Z<NjKq_XHM+<i?6z`z1G
zVI{msG_iqr9RSBtiThf11zieW=xC1aevUQQrRlRp)zpsWsf1I)_jMY+cM`ulQ3_pD
z=YLK2Hqo=Dr?-G>LoQ`!VBEN|0pGBXFgkdVSCXKLlTDGlFgcukm``%i=7`$~_zLy&
z72@%}0$0FS;QUA!l at Grm@}VmSHs)^2sqrP0$->C at 9#yE*ugcS at gYe@-5WNlgOu)R3
z_$B>@obm{81l-0L`UjD-q5s#y2K396T)|Pi8*((i;BuC^h*#Ko8 at 2+-#{_pluyr9(
zZ`7g8TKHnp;S>3E`AyCl$b*PCKs%qeC{I+u?&1*WNe&C-;maKaSF0nEZKVxd6XdK&
zg8kZo7(d73(Ct=ceM4)_9-b>jnG7C*(btJCM$3{Lh at 9`6ONTJeYXt6^;fuJr=hOG$
zFFKYg*;x$xQyy?D9S^<@*nk_<XdRTgYEX`#Glh_^nfe$v$BHr$d*w~&i{QSAK>Z*d
z7=8x$k5X+I&sJdXR<1MsXT9FoI{M5imwwQpIXEu=Nd?Nwv|HCawzfPS{tx)z8DGjj
zNxS-1!A6%!N6+;Z8eNINo;5fN5qBQX#PcUvca!-2tlfO^&Mx3&eIN_Xw;tWuHPdM6
zAok*s>Fh-C<0xB;37%+9nic%E*k<56fsY_-C2y$QiS at 7mv2r9&9kKTmG4<O-aL?ej
zT1&R1UB7RD&8di!=(g{0m@@x?oCDTkUZFf0xDhG7t!e^ndV*fu=a2i4tANOdyh35m
zWi{gMua70;?Y6jYa`vK+Qzg(o&-dts=esW;=CW_TSlq`i5?|+Bb?g3S!)x`98sCGq
zShhykV=h5GRWY(oG2>%U3^fEsA@=(^2d)R!*YG6{09#`4?SkH5WPE5zj9oF0w5ctY
zoD<cOedJ?-u6r>XvS>0nW<B7gA?^QQZG|loI8??zc=uPdE8=Z|&yA8tzr5O6E+~Wz
z3cTQG<G{#pYXrEIbgm)qSR%{JfUOhtw-)DG+2Eh)YxFiER|8)paa}QE3(jZg45Rj`
zKM_}PdSRuY8*&5Mcbf`1$CEnk^SndC`$+yT<a?Tjn7AHw-Zf$`84Ii<!47_V4|bbc
zI-2?%IVod;pF}>oP?Ec8l=mgd at 2!!sqk6B5aO)zrU at _0%o|*81*2(C*pOJMW^gMLC
zTumPbyhgS2V>&QC#tDp;4U};$_~%3>zV5U{uOipaBACHo#*QQ<m|p60l+TAe<32~?
z at I&yU6nJM4djW8~C=b at uu>rj{d76QxM|?bk<A+??BCg~XJZbo!G6^m;=ZoqqpJ2+h
z9CPqN;-_KCXGHm`G><|*@?e#_^}8YG|LAwLOrv_iv|UHW$!~w>%86gcy+$$PF$(_U
zDEM>hQ|(kIeM&Tq=r==8gtpNk|C=tAXL{D?|0I029sD434mjyzhss~xbz8rnG1Sr9
zvEsbBn%^dh1}>-ueJ87>lGt|pKgN8RQu9g-P1fYv;F!r|{j?IUsJfU(Yid#UnvK(I
z0-0;K|684vp^jpp at 5KaMr~p=4c-xR(aZP%9SO-22<Z;HBKFMkqpX3(!9squ!e|+iA
zVlqDw->$nqlX+yKlGAoEkMQ#he(s)+2BVoipE+3!nGW;v(DS}>7Vn}GW9Mu1 at hsXf
z1^DWV>3jUv at 2x+EcslV#HTIM0fqxn{yPxq}F~+Ei<S7$n2VaJc(@yn!+Iw8(8Ua~j
zkSCDw|CDt)c2?Lkc?S?z4VGU at jry?v^&4F;q8=(@X5zgn+OT2YLCn=d{g82Jly?LB
zAZ+NLV%|@%klfrW$y&zX7qjHWWZwSwxq9&C7w~@)elH^bLbh=PM!~m?emkcf{WE;z
z$8{!_uDhkhKo6$0()JW1ayop+ZKIb^so=bx*m<=(BNcJ3EYzXx8n`ElMXC0MZ0%rD
z;AtGovo8d;r!??m at DOxB-YEgTSSfFU{G7wi8%)aXLtMO?E+PN1C33Zv$jPwH+=gts
z1sHKjo(cI7BkV2_avoUD;n#s5Fk--vFnJJwktwhg;a5!N)8Gnj8|Lbdv3~*hXp=n=
zxi?$k53ffXhpej^EXsbAZnKC}+AY;7=l#EVvTmIYYibi&D-m0?{@gCMn)uH>lh*0(
z_-6MHls>NHBwIRXiY=3^HIxy##KfFpODEk-_PeW7RRV$SkI2kyJ=T}MnQbg5)BiN+
ze<pe{@lSFH2KM=uDzpQO#JzRDUbqkTn!hct3JKrd2kgHIw(*V>2{>FxzM*;SKfob<
z7kJPmE1Ic(#7g$F$}QldT$@gxUfX`DL6bA{4~vOaB~PXcLND=aE^D;cr(`6z2n1I6
z;3pVpEla;w#fpl2F{hQi>v$1WN88yZ`55XTJuo?iUlw`>nEUghd`g|C*YwjBtJVp7
zE~dl(&}%IdU!PDMS*yLuPDg&xjAW<a(d4nK?pc?A*?-DlKE*1<uY at gGQD&~r*-81V
zu!r>%JzYCikQwT*#JW8EtNGHiEqvWsDM##XBRPED<G{B~<~m~M1Bbk9$cM~J{%?|X
zj5^;fgN~-A`w^q2lapM!YK*Bvw3Fm`rP`?K?q+#~8M)aaFW4c+Ltd$a?_~(~2)9fY
z&lbb(p at qEhBx4_Cv9qbcZn0bkTiuNW=xjae!qiA^$6B-tllwAZhEU>X9dXbu_`6QA
z20Yt;>o?c29ND$LNsuul374e#kd+$}euW?B>&i6=KfC at oBb!jVctBniX3Bb!ceHZN
zV~8WLbgXC|>MwkUy$5Xs*@9|cAsOoD>(8D+duET;uZpe^>^B=oTRgN=o{xE<z|w}b
zUL)7Xi=ng2b|iuCE6QEA&euq8PV{|eKtyHilD#<+#JRq=plw95=qA<NEprxP-1%i+
zkhUf8&Saa5 at Xq*3g6(rAkg?F2RjP=o*nd_{&%tw(34i9_mos(pDKK{Z9JO7 at R&O;@
z;4`$e*-rznI&?XSp0gqo*fw=W8SGwqCQlM#haw8;K5A;`74ltpK5%=;@q*Y0ly3}?
zUFO7)HF$7Y!lfYn#Vi+-bBFv7?Nn~xMbpP;D#&r<ufV+aU9MF8)#bqo*w;)VlUC2G
zM2rP;=aB22yT|7 at 719!M;Zs#&*>fdy;qW_)MjXXrSwN9E?IoiolhyoHms}^7`QZFQ
z!~+P+!Bspj at QC{vOe{9|w0&}dFL6KN7a&(+q2?yb0GU4oTocuO^x!g$if*<%$|?l^
zNl}8bWv^3}nIE_nec$y$A^V`PwYx6(HSQ-tMQgHb>q0Yg*J^@U)f!;TcX at qZlAw^s
za1{P0z80)F-BQi}#-a!j=^rwegzc)#Nw_N3ztZ6VuP}VUkbxl2=&n%LlSHb8m75mT
z%<fZOzZmn9T-qo7+0fUx%dz1xf#h;dnDk=8!n9>egAK2hf{Q`*O;KOXqC0GGJzoDV
z*l_)O;!nQyWq{AZ1JO at GjzaF)MNT(&8e*o0%qG?lw!dNf+s>K#S=hgc{hQd1U^{~C
z4Qy{%WZ)2$u?AsVm%vV6oDjuPSWZ>Oas5{)fyGu>PF8F&_pyd{<#HUB)0H2Y!F{GV
zom};4moT+Q%m3|iPIAk5^&og`Ae&8b=5ybx{1wj|dEjf(w&ZhxJHwdP!|ylyvTRSo
zJa26!u!!$N)<x_J{K78QAM%@?`WadB%@6MDFc(N~vh?_GwEQ44uJdUn|MQvuXGF%e
zTIPS5sFrVBo<01mMm?=UfW9}d&p02pJLD-gKJP{9<a+08ya^=UAywi5&Rf5YbTnk!
zwD)$Hu@>gN_g;KUA@?NVE#^!A%=#%GF|)|;H11TOAN-d-p1R%w!ck^hxj-$CW+NBe
zono}}9{4O*?{zxMvUHmCaaE9m@;TX<zf!Yw372T(4U>;m#EG91?;kEg{KS;V&xJj`
zUkaNq#-kp>M|~K7!}_*gRABLGDUm0!98=PBCeBEwp_>u?3_76?Fqc at D*43wegM1zY
zE3|xBX0DWq$N2q*W4D}!Z6XI4scPh3j~ymFup_WN<fHGJfQgr^Gl4%SPI4^!;Q_+o
zFl6>%-5}phe3{}t&x*hd+gHdn2fP-G+&hHd4fuXzam>+IemyC#gY`V6UZFSlACoM(
zbbVZqQYKzh?<nBJbiVdDxbJ|WAUrWT$eV at Jvst>e;8R9lL?<{?IOW6Oibc>pDCCJl
z9!ua`7gk2UOnihyhoKF9^z|vQ^-XjiCwe?&nq16x-+)6V-Bv_6OqlZdz^CieTo5=3
z{W=TxcR+5<g0H1E)sAl#ifR`&MZc`pi-LoPUqjvWwf~$yaMd`mPx*6EU(nAapUWWj
z3&fKql=rp#taJY#jAbhjvtlCnaf~g<0Vr#9fC=-$TKK4{P`@WD_mMhDsKoy1N)7h^
z+*tuRlT*GgX8M5~VCQy!RR%nu5m+BBsecy_yafl%1Xq<rgCmx87x=Oy+&4n>x--~U
zs3u+`$Ncwe^|&AZC*8w&7vj@(muTei*)P;};&%_fpW)jY*)1&VPlo>~0&^+snq2Vn
zfb)4a_`h@)JIKCgG<;%Z_ at N!<1N#kL+>Al^$|~vvpL|=uy@$ExUQWeKHS&a;D(dB@
zS(2yoa*nHxvx>6~?XVFFhAyjI0vvbXc%teYIo?H%+uBvGrQ5vE7Wr at g_KU5<Xq)uP
z8iC$gL-=CvWU}<CjNxtU+?L{m)7oFAuLd_6a$_VUgEKUo=@a^S-X!lb$#p?uw=m`c
z%=z3*=u9d~(K8A9c|A?q?@>+`Y#=_ at ix4B8&&`sF1-;O%KOp<}b7Z-meH^(aJy_-%
z*j$XXY{xt3gQeg>D-o*#%EYSI476&;1}0Y<)(O(TNX(dzn%Fsnt(O!8zZ0pm&?B?O
z_r?_h*P%~Vv3kh4&im)M<lJ-j&*hSHBctbf?vZn^-9Ps`IoCgWt~<r;H-t<EzjsBP
zsN*O5%U>WK6zkri1gD4!7b<#`mFbJL&Iq=G=!rp%S$#Vw_NMDa3)I at m_~Ob8v1<4q
z at UJgTC;*W=`SvZ&#rU6)kgqNBT2T=Wp2`A_pi+gp^5wh<3uqFn%s1V<H9<!Ke~x;6
z${dG2T?Jgi``8|UkDp*M$GF;sikXrTU7uxenJD<!=B#0U>6Z(aw{Wx-j{r+mylcVo
zW-2dvY~&2#Z7tzU$DD(Hgn7r`Fh`8BW(xiq>s-ynJigxIDz?S97xuZ7H|t2e89DE2
zzgZ`HpLHc at fAC#gm-vr7ej?vhSR3gbd}WTf_~ZCy(huZKWPTuPH*AW{WPKL(cG?J@
zMYf4G5TsE1GWl*d(FXQb_+7z4>i0I0#Zx8opzF^O%cEai?W__M-qw2 at ar?OaK9Mbs
z2v3e-Zy1T`E5~zd>E>N66(!^LRk(KLc9rbP2^w0H)n)i<+<_AR#LnC9u at Rhu_1=l~
z{*foaRqQnE$rrs?UP9GZK1xjudH3D9$$Af9*(fr<;N6&CVxI91d3P3{4w;{cZK&L#
z5i4~spXVFjHzg+qu5wig5X%Ss0nZJRuF2vnDHk1+Kv&+QM(_<Q547<r at g0N2)+JOR
z57}|#M4iLY=A6OUGvo!cdce_Elo#xI^u5{;(SfNgkUds^sYUL=yh2v4^CX at BaE3x}
zE at qWSW(&*YABK+UPT4C}4Y0hy#g2S=Xj4<Dq`R>5D#4J<5o10`SW!$>-|_9^to|}L
zVv-{--m`t1mT$0RA<w`J&#9IyR*@y=$L0m!AeOz*T<|xm<HzjuJ4qUnx8fYD&Z5nk
z{c^a&Az#Wu3~Wm-`0kQ}Dp0n3a3}lVUIo9F%Dk4epkc@~FY}sY!BN<kTtkO^>6YCV
z#9O_fmd;*PXMM}k#wvWHVCjG*h1_#nAGS|gl&uO%S`&+VvbD|7i<4kyJM+R+#`m=A
z1$B#o+%NRW5wkz$7k`z>pJGX}jt`8pS>w)O{Y5U@?&XmGqeTXbwxxutus`|W_+=db
z631mNC8F&AIKC3cO*p>qKaMX;s_N4S6<Izzkh>}&iC`<R-Xn*s=kIaofBx@~{y(w|
zzSU*GIxGvg(6s1zZ{!8YAo*C42LO1!6CI%rzu4u88nyhoxN^8aG<<APcPm{dibvZk
zpznT?DkEd%6_c}a+t3|-g0s at cEf1vmixtBKkvo#4kx^EGw|ej>6KfkjlDIWhuA4u#
zvI6`y=c#Pul8t$<6#p^qM}*ifo~L$I&Yw#704K{3H at Tb4sdL_LDV?7Q2UYCNYhKD@
zP4hAvx!AuEuyEmlO at 5uP4eU304Wyc;cz^?8lRso=&EQAOc*GX*j>s=GGW#npcTR%@
z<Rzn|ov(3nCQB?_LCrSgTc!57>dCwc-8h8GMBFcO3jvdNm@*OHIbsXMDQ`?kujtNJ
zy<a+Zcf}LPv)z>N9BoMWP%inR0#xF0d#C&7M>bnBu?~e3x#yS!<(VWhHAzsWW1C(X
z-M)&sh8LtK`N?s9BFbooj2uGp at DAKIO{8j|r}GAF&pftQ>e2htrl8$Nw8Tb2oktGg
zj6aI;o;jG)NL=c_A|v55{$gYUvAHD>d=<Y^37IA#VT1oLcWvdg1n0RLSIgkGhcyfT
z+{DefHzsf4<xR6HRjXDGzb{hp&z~mw{dQEQXR9Wc;=Zj3MR*1koXK4qyqmjbVbdmV
zr3&>rO`JBdm}?~eg=Lr02MftD-ro at WqqR#1az8tZxfomptP)=B!qTE!3k!<wY=!KB
z{X39xfU&&Twy?VBj;j*aen;kQyes6XJm68+`q$z;@=e@@d7EYpfm>(cV9^lnx3yOd
zd~2FIu+PL9t3Z3s8it<rQ!#ipNsPijaQ{cxuE2I1xd!E#O3E~#{;U)4_<@uuNKX2N
z*%Y86`IyZIiM_)eLx*o%_n+ at ZUoI#3-ryr#-mf)5$Q2KZw{EdFM`?()uERSfMu1ae
z)2rwoB<?pJdJzw8`s%fqpq!wai&Ynj7<=O9n5)-Aw(3~;_f3A#)$3@&^#}it`50o$
z#e`E&6d_H7Eu!2tG(Q=~c85ihyeD!AufB7L^sV?R!j%awmbkt72?r3b6oEJ#t^hbW
zf{|+nhSGoc95LNO=EYa*ou#{!!mGW?ib8R(XF>exWND<<8i{pa_Kq}q%nq5MY=>%8
zU#cVek~uLzRhSB0Az15z+<$XogZw0`68~Ruo|>tXcd#m*YL3p;e%&`LU0M_mp1wu4
zLZeH0-5Q_9$mv+;PzSY5THxvHsEAv>Vwor6Glu68?3G1qts-@$Qm`t}J|2(@>*9-1
zw>OS8k+pAq67sXBA}@j!u~f00*S4kJ)^n}jp)Y?wCg4T*re?y1Yw|n~dkl1a<oggl
z$e$4v at cK3I*Z{|hd><C^$e67z*o{Lym6kevzo@==<Ms>S+Bpq;e?GR~VypM8u^68;
zT2ipB!FCUhAII at hf*oaPJy?jHO=s1RHH!nEgksAVnaEY at o`Yu+Kg)=k;5)NrGof1p
z>y7*jTvK+wK$3yja?CfmpZ$z+T~K5}ePH|v)WB9sL<Jg^{7tV6e%qa#oUN2H=Q-3(
zh}Z>uY~T1|Z>3OYPLC|GWFikeegT8G{pL>jea^bJKLX}YoxF$=cm6V8P4aNdqrI~4
z6ewbomSGMe`AL>B`GVukYv*U&F5U*-Z7#nhSw0K4!(7I;Im3&l3&8_~oY;dKz0w%{
z$(xh(ed&j-cMS6sBuDqL`BV_*(fuRKNUjsF4e-s895SB_>H|Ij?@J-(L)bZxTl(n0
ze&c*HcM?C!j5bE^?m`Z~pG0N)cFbqHclI}%(3jJuXUL$#&rjpXz?-gx53aDal;K}2
z1gE2PzH;=ua%Vp<CAH={-VS2xW8GE61mr+B%i!e72v21On{ZJUn2Q)b$O7AUm`iTq
z8ZE9#ALW8fC%T+h2GNzQ;ANVCJ~uQ6 at _A8Uq&b|FWr~{UMnqqg>IJHh at TiuN*`vC#
zB*5f<Vv!T$;7P2JS^l+)oc!v`I><GumP*Vy2cpN=)=}};PO`0YNzwNe<Qdkt{PQ7K
zGkyrI9l1J+f!Ul5y<Z}SuR`?FH$|G0^UGKDh$I%Z@*j`ok-l-gSd&?QC{4vG^xtnS
zU3E`uWTDM3rVDRhRJ0tFs%WO~hzrM;PEC)(9GP6gPH!no%c2V+vt5<oGFDuSgKRhh
zeaiLXhl{FHCF?R%k9%}4oE-g>JQ~=upG6m{XAjIXK0omEKQp280Y~?!ZXoxcS$#Fv
zJE$CBqvFjPf_sFG2Rh;Pj=r(it>7n(@(T_&Ec%7C<@GL+$vCG^dVN+j$N1d9-hXQF
z+mHXg_+1kFd+sK3)}o*ByDry?B8<M9rhz-iiT`%!j*k!i!D}|n-!#)Schi%m7gPZ(
zMc<w4NoWJ6jlzH>SH$cMhCC7CvpXdGw{y5}ny{=Lye_0)u{WTNiWq*<3^u`;6fpa0
z at Xd$+ro**YNgFc9(t#a+nzTE^DcV5dk#Vk&Ij3NUVc)>)E7?r`N5o(t_jb1mx+ZeZ
zxp_1~MDf4F&ZpY>HEb{U?J<Y{Vvo^@e1cl|s-PjWYPidJQd1V`eQoxFXd;)(L*{!2
zzcwc&_vygTq=XwGeEE_VL*x!&Puo_^h2h|1N|8oyt0`9^Z<2&}V<hIXj3t>a8OeuF
zwkhzVK^^p$kEm9A3s+(niy%Ytdg<Q4ZuoM(CVVX88v~}HoiW$V16CT`LQ8<<F6Eiw
zb1 at M+#rQ^MO$iwp7pJtX<*KOap5R75-qG?5L264u;6`f!okZ8gDJgMxXyf`=^-!uP
z1J`V7oHcq)p(q<RViiA)QrT0ud);N2o7uQAuzO@&fSQipT6POL6U*BKt*|+e=V4Bt
zpBeo1i8S&&<V?H3yo-5G&j$B%AdBqX*4nrp&)`BAJl`F2qL#5;Bmb!fxZu6AZD++Q
z|02ZnAb<9tOw?hUP3Ah}?h4}_Wo+FBcm2>!agPTdIgy53PfrZ$Gz~QBYr+)X(Z;KE
z-Goo6tAjeUqZ03<dA*IXc%R?Ep4#stVFTHC+x#oBjgb5fxMr_cHhc$PVVs?Vuc8aS
zdSDmc7h3ZId8bPPJAn5FkCpH&i971N5~#964(1rRYWq22TZX^kX>H#lQFQ-qogZ}q
zd<^z;z<P+7x_=~9;<Zy=$Q!VaAV<YQb^>q<@564Mq&-6B4$)EIoHhdYl;pWuRFD1l
z370Qy7vTH=HUU0#8wWWigmQ4kJ*fo7TMfJUW~&&!(sv%OZ<bm*#$yfrZ)F at j!b484
zKpWy+x7efLn+n1Er=u>?ctS7^D{Q}@?7qlP2O9&iF%c|{XC!h(yK|PGME_MWu at 6RG
zJ^Dn%phFQe>jp6G;M19Pm$%(a<Q3h>@9yh><&?mV|1Hr~QQmjp8*KPdI|xjT=W4oe
z!Wee0u;JHSdm^_MV-)#?xb^m{BA4wKT;Jb!?dBI`omgkGZ-$@kr09_C7it2q-5UoT
zA{XLz*P?B~u|c&`YUJsP^6!ODxzWBkPH6jOXOVp*G()T76%!s*RzGh5bqM`9 at S%~-
zklV`OYj~S?7j?F=+)hR0{UYeq+XD{)KVK|w4(uj%gSoQJeh%euzGs3y`0CB08oQ>9
zzDbvb!3Iml?3>XohIeX(ue7a4Od>O8<&v=YCfW9%Y5nJYh3De?i_gJE3EV4ud7II;
zn)1g56JYCA%M-z6m>6h7nc~55q5$t<jjfBsL3YR6v$?eW?FVhr>uwXwF&O*c?JZ<+
zsWM93vy}AVn~($Kd)#B6 at X-p!_{9c)Hz#H99y;(5_&1I%;hD<Y5#yg9mM7MSKKoPt
zf}BWUREIQCnB^!~u>-MK at w=s4x9i&@moDY`?Lxo0Adhy>O_<kL at rxGwB$qMY>K%M(
zPD)EH;oWJAp`$|!f~u*k=JG!J=Fv#46nSw`AA?o{bAB_akKCz?=O0U)0)4Ny!&(-a
z6RLPB_NV5c^iZ9bswtnX&iip|J+U21H*GgCK2OALK+g~Ijs;$%iQD1Hqw3_*Jj?Ra
z7UY+KoLkM~HP-;ccT)4PG+&cBxdIqMgLA(ee7ixFBIrEgG!Eg|nZkx2mby+CbF?a7
zjaXWNn3cl<nU$hC=w at e+RJZJrpSXL~tf&RKXG=)VTjZd_HT?9;d--LT_tICy_c*IG
zS at a>q_&G$VbJtk!*zRDKnA#3bpZ!_|%2JN96oO;sq$Y84{`4&QVussiBmDFcBPHnP
zZ$})24XPeov#Y?9+7}iPDGM^am&srKKEsn5syhsx)DKh{`ZqJl?@gV1d;kBxZzrkl
z>AuMf)*oiBb)OrjvU{KpuZG-^2TXGfa_<>=AKIP-7SkZA8G=sI=-X$BShjdAOSz^#
zND=0)pEbBXhq>Me46RS_*N1D6*Cl+c(~=qFh}5!%3?Yg}@R)!{K-kb80}M_%u%ElF
z-~QY4ivP>=j#zIqap{{dhDw07+bx#{%H)Z>5A9}BChj5Y)xSRD-Jt*b8Qex|=D%Gt
z_P<=yU`_hBYr_7^HHFrH`~G)*|I0N7jQ#f!d$kF%M#YWJd5<B^=p6VLXJ+dHWOsZ=
zeHZ6#Dv>UBYH)>YYhZ!g6cQe}#NTk}&z1w2<H94c?)K5)`xP;Xe{wR88CGOA8HkSE
zuzm1qV0CcC?s$TePrT=9+461d^i#FCHUz#l;I}A=-*bQJ6)Mgb%=K~Z>kmsCUEE$<
zQoy6cUlOM4n$dWTynnPTV{EF+5^isxP7XVJLmVkjr;Vx^yxOPvpw^>nWI;g372Tq&
zR7X%wXtO0^;hAgi-<vpaJ13m24Q=jGEj;t%;d?U%ZY!#Z??@_3#<yM8jqXpk?Y}IE
z4GYwbQ>AKc>MjYT6t;5GgOA9zf}@_^@`EBKdA>`z<y$W)jwjOP(7D3jewN1g58sa*
z65(%Gnv1rjW+PWN`F`Xx#CI^)ON3^N6#4_X{zbYF&tfyzo6JS?mEbq=3a)563taC>
zTavF at 2<$)l<t2s#vW`OTf<8 at n2<q?%!&jN;55CEhjm*9 at _{i?~p=(r7;}O)OnmHyJ
zyc%aFbz=kn{|B{kL!@3Aeplj$nn&s~&N5oJ!GXHTriK^EF>dew)F-)*)Tu`oQ-%g$
zM{Y3B{yJ3B1AgW{&9<A081W9~nB4!up+B=Xc&9Sg9`2*J-6ZWxn}(-TGZE{)pfL?)
zJG#n`Ie(ODZ~VSbv-KkB8%>iNJE(SB5_`{Rc?5yFWL4wOqiwxzl^@!|)Ud;*iqui<
zxc=9`f^leX-2XS=rmu{a at 7PO_GXgT@N$~C7Vr-ac%)2VUq5T!&-w&#iSbd`$oCK at p
zbPZjX`lK+|RPt(&-~LRfWT^gkJ+Sb7z?}Wgs~I|yXY!Rkli3M7^>rzcj~CT4*Arb`
z;^qF<ng{n9-S>*JhH~A<<V9<c_jjn~cfH4X==dfgM_-pP^_9##r&?4EoAwVRUN894
zA;=iZ+vz at VQuT9H_7=#swbZ3S9d8(Rd1R9j$;mz=?`Be$z(EXuZvt|>9r{y__0P3e
zg!mu-#~^E%g1^JFLh!6B<T*s9rKFS?YdCm|iN0C>OJr6^_^RaO*nxe at kL=)oCNc at J
z-{q-BW-8X7pVddlF5$wij{Su=r|-M-LGyfXs at gyyzjfV?C9o++qwQY>7Q7nVm(@KA
z3b+EQy2yvVLKl7hipcv9jOj;L1$fJwohQfXoE^!!amr-mzj08+_kN$>FmQv-D=yDA
z0d4dw at btBDmu;)#dhKCxGl2U_wuQ#E+rx0Y0(hg}13w3T)NX$==8VlcQ0I3pFt15F
z-&;sqWWh(8w%wW)mrY3mq?96{hH_Aa4FdoVQtW-fM-C at 6R?#Lp6`qd$bO-%I>^bmP
z9L3!Ahq)#$JNSsWchC_yWHxYBjlc9Y3iq?q2X%4X!C#Ae-FOen1^d;wwYFclTDurr
zA`($V at Fm$N_FIb`$(zrrQcJN$u0_2TFnLa^@Z8_vZ`?P;!<aV@>`{IM+`$1sH)Ztm
zv2h>=OX9NN-_oGWzXChnf%1-}u2YK88$Bv;J|tO7QTOknyb8K7^&s6t?6c#3A-EGu
z8Ojj}d2lLliOMaf!DkA)^Ok<Jo5KU+_Q)}Cm2`As4%~9neQdNWa{I0O_&VrN!2><Y
zkNV2D+~D@|54P{qUTxV;>mzzOHOQY)v*u%AnlG>wMBeo+9?IZVg9p@&a|z<AV8_&;
z4v at Q06i-L@Ik%X7!IOVz2-v!__~smf+hwT{$MYUH$65)WFt|og?kc&1_klf0Kr`}i
zl;16R1+R|aIGETZ<Nz3c74>ot`6eq4wUKWDcZj{YxKH!p9`Ze8EFZdOPvU*wS`ED5
zEsmCXPZsl at JS$>{?PgwYaLyqa+9=CfD5x<T$aP--#CWO0w`2e(o6-zk305>a%l3lS
zG{1UauirVu(|5w=1Y7 at vIj|L$iRyxD5B&yNZ<h7Q8lURs=rb;tpu4pi`@ct<g_3Rs
z>?`|(l8d>(rXn6fR6lzCui&>qJ`CpG-|nwhWNo6gm_xtj_R<MtO+g=nzDCCDU*|b`
zH|DV?xF-V(l1;V~&=D|4Z230eaWdx6wkmrz<lnV)Qv4INddJh$1^R@$PdsFU9K6RZ
zPybbBCj2*$*A0k$Rk5;oz}5vm2QCie<H7n~Nfoy?0#p6QSgHNid~f`w*>BPPtheS*
z#s1^8EY6$EF--m1AWNTwJ~$qjMH9wgP24%cbBY|6z_ik;@paIrVK2757Uvxz3Manr
zx`ltPdZD9Sq+D3JYOY*2us`RCfn2|HylVK{)0&F}T}$gM2K(*lO4wwyLoL&@hE4^B
zB44%)^6YllcQVf8`~DDx7+s?8G28>Qyp*@}PXezCj?>xmGh1r#EZAtx<qV!<1URM)
zxq;|p(1BBl4h(GeKX}#1qp2M#otH_lM@`QJcx(Fu-{Kpo@>X$^3LIwxd%&4W_)BoT
z+LJ=ez#PQ<{+-Dee--|CgiU9wK1V*#)0+QVueGKH*0)x`_EZFYbxC0To~Y>x*x at tm
zfxzEM*2JQplkY4<A0Cew_7v!{AGS8G at iI1L%ZAFLCkV@^i#CsGc?_3#yHqCronpAW
zZMylHdNrdDOA#Nhr3v<*CS?o^MQ#Znv}fvYwEsTnVcw|Ej#e7qN=?sTI7Et39tUqg
zzK2461^V39Pm!`Rx<3ThqXhjyjQ8dI^?gJ?N1d9$?@>A8OZagVu}5d2KY_asI&cJH
z;!JLtn&{Ptolb;&4O|4|#CY3uV1j|O57C`PEHufniaK1)^8_bb+WlB*#7JKTZx3>d
z(8!HS?P$^>C#8;uyy at MW<t-Z7<Z{8|eCOq?v(+fKIM8Nag0WrhttE8 at -7wvDm((SR
zfBI<6$QF_(#lHoy8DW#{;9WX+Ah)%Fw40am1Sv<<XR?tkz8>~8Qpeit;V9pOz!sp-
z5MCWc><?E1L at N&Jb6fLBeNEYY!WbATgxpEa4bKk{VeHh~x_Fm38PGT14iF7}$7|T*
z7o937 at r$+Z at z>NWBJWxgd;gg><hn$zl<iC#7|@>_q^!uNWe^=HpBm_6`)A(%VQ|%>
z%_3X}cmpF_RBfzAro36-ZS*a(r(v#Z(kh3+1K_H_z2GSEqzKOmWD*y~I?5oZv8aYC
zX6BRnXx{C8kd%?+tF?7mJUkbZI;SomCa{`rGZ&$~vMK|q9cKz6vpNSL!=g_mULbiU
zNxu^LAlL2T6`i8~!hHcExh~L#9GSs#2l{Cm=1And-C53_ at 6JJH;U<@uJ3WPC3HLX6
zy(1GC4w)*Cc54AC7y4r=b>22RK!owRnP6jyO$24!06RtnV#H9tL>}ngfMc7r-%Z!S
zR-M&)EO1`-QH~tgK9l?!uftrwO(oaHcgSV&7Y4KAyT~^d+R-+`_%_T_smaB>c5<!#
z4&Dd<fa^=9oU)yz)Az5?mFK{2mkRtu+TX$J1{(qVf}{`lzl(Xk12|6Acq4~!P>9V%
zr0;p0BR<x at +NR{QJ=$%E=^$nFzc5!Q8bf9B7l?AcD^IhrfJZ%$|5OHYLkZ=J-S>~$
zynz4b!pE}hrd5tL@&0 at Q`;L4!yIyM(=rQIsEr?~8)7;Z!UKwA at Nh3DVXL8wMb2WG)
zz|rL?1jeLdXHj0ipcnJlCiq7m(r1W{;n}zcbNxA9-C#QNJ;PCm3q?$CmbudX{a=+%
z$@;Dwd5X(PpWzmh{`;*J-+|ap`41#lY<BXvHj%3^?y?N+D*Ll^dOG|qu`UzwuYj|B
z at o3KDny`MkBYtM(wJ9`ozHQBi15A at 0mQ=wx^tmP8Nh=PP=e8nmm*+dkk$3=h7B^2%
zd8Y&Tf7r+1+t at iW27U{yPaozoGT}8wCVVZga00POKS%n2Wd^6Z_^3S5oWz<-t6BYY
z(q|1+JC#vfDCa(pT-0q6$h;YJG?DQytHxgeAJRL4evO8}Mc~WlK=#u#UJ2aP*w5RD
z{XEEoUG^~Eam**MS>kz5)199GoRZP#jEe-v%wVH4HY-He?uEJAWWO5|JTfQ1=zccu
zmpfcW#?(HLF%QP|;(4QTW#FcU%{H}J!aGjhV_!m_^8BYDqq%YGJoACTB}A^g<4c=H
zYUA>VT-i`SEwGyU=nq!nzl1^td8(2**041eIcfjr`rXX+(uM-yvpU(ij0{==nGPAF
z=u~3!z4X$cE^uSxGrVE at 5<y#Q8BcHDN9GYyzkW8NS0f*X+M2}ME>8s)I=B}wuGafQ
z#*ifft5mth>w$byf%)Wj$S;Je_b#@D;9 at NU7Oj|_j%O$!v%#0wy?*3T!gKNeLEgR_
z_<7Ae-t#rhfj`+wwx-_pb$=gZ>>AXClyU at IzB4QKTqAOrPaJ?QtLAnzRs{~(uR_jp
zauAozTgk|5$n<DKOsxGq=G*e^Nf_&^d1m`L9A6kP1M(%qD{*5 at zzocxzuBV)Zu*@Q
z-(?+!{Fe)C)+O4s<27n1BwREC8Ml-&0%Ljwdhk<}PYdD7`~y1Lp1i`-AA$2|UceE8
zkNI#@-<^nMkdOC*OZ6vkSCP5(F0d|t5c%tfaPS7L9$QN%jeR|^8r&G~3(J1!!FD5L
z6YygoK5Qzx9p!36JKR7_8F0*gH?4VG at a(RA->RY250%hK4?R!xbnNfJKAY at g{L1N@
z57B7lV(!VY)rMG^vjsW21mJM85KgqzZ^A{0Wnm{$1zq1$)m`Gj8-dXOc!wH+*;lT9
za|TNp>5%E;mk29g-6lsoJbj#+X8(@JzeiRhF2CvjZ~N6q=sMD`o9 at l?HXHlst!o08
z+?j=by&F2yXj>9}X;RBy^d+XRLSOoW=u5pGgASrA9V)P$;Psj%F6Wjr-g_81(fQYQ
zrp~+D+5f_SwDTg=r-95_Hw*!b-1m{TX8OiC`+EcZX!Gl4wD||kX!8%z=1UMS8@}dV
zaK&NxpwZ at i&^I^#rOlJk=G#0vh_7wS8O*!Mys5~~fHjGcu?KNq0%bJJC3X+{!(#2z
zb-Ze(eNl#?%>h0r53mtT`;svS-VLsj=r-^bWkP?3Kb8mH!@!TI>cSVO0>j)P=wa-6
zbkg`ttP4Bt%i+-P8NJP_!+e(Y;)ipDcetA}JO2=6K<}?xm@$0)&jOE*g$Gv61#fW>
zbnvuN{?6M{aad;CdtSM617zf<*=k`~uafwohaX}~kXvL-Q&WuEn7<+Opl;xz_QgJP
z#9OdAeZ_Dp4Zyz<dJ8ynvW~&dUGIM9#{2JVdhpJ(tLC1p7iH2Cj~|e=6miG at daXPy
zEK3?a=7W=?GCFyutCdn(%Ln%5JT2BvDxVLT%fA(Q)@nO%{XfbQe7`K~EDy@^5HK5a
zmYm at K#`n$RiF}&4pMI at 7^yyyhf~ZU|7#nCK{V1!->C)zF?s?_=z%Rz$m*Sw_ at o2PU
z9=)<ZF|^=R5=)<TcbH;t_Nd0Ojr-H&W&6{PzxPAZj;O4`;fOD$Ci}kSm%RAXsW}qF
z6c+E-P6n=2Ha03#9`f=u$0x9dND^ksqZXZX6wz09tmc0#pDkEWb(In-KNARqiWB?!
z>F?+8TNay=eM5KUc&++Qc-6dtenb>uU7b?PY7#v9>x~6!N@|E-m1<GFrL$a3lO%|K
z<Sw|(cjR>(JEhs!k{@K^E4`ANPN`~Gb>geTCCfkLE4n(4aW!2t3bszQ)@VAWIkpY{
z`lkQ-rc*(A)-dw_qfhwhZ>ss4NOjXGP3OY0Rki%|v!ybpVAYvYvGI;!ML7MiU?cnm
zJLK0z!Pb0gq3Eh5^=!dE!jW&bm)7r1W<}*Rv2=9rj;Os^tSIUo>oj7=`QLo1B3F>J
zOGRwh$t|zC9BZ&vHwS|sGImN+)4KXW9aVEnzm9P2{S*Gr{q)}0waC?1$I^k*YOnus
z*nkfQRa;a+#?!#(z=!vaNVN+2W>=SWeJ^)7lg8>ag?Z(g-SSh|FN?e&Ol^&(krOj3
z#@}<L#H^LKMAlwcE>O#q>@AAlSKSM`eO9%g`m%~_`A#pD)IZEGxy5{XN0indoJO;f
zZ;LCZuf%&kp^hB8N5%l*Zp(=nds{+1besNyuF_&(8usvQ>RoC#C8H-(Ih89DI+8v7
zzYWR~saOZ8?Bt at bI*!rs0ZU=n!aC@;WvI}SOds$EKE<$QXfUi!d(~M!S%-WZ2Puu~
zPqS>tyO!eND2r at I)Pra2mx^&b>fvQ_9c2nKI^Ewc5~+ez7Q}#QYFN6rvWfpX2s(MP
zG`m>ShCbC`j>dWSwV~kD{rMfl;QC#lc2Fka?DI#2^DZtBPUs1wS=&;nBuZ8pop6to
zn{&|bgUT37@~|i}1MkJwQiw7o55K!6mihlK{zu_I%7<%X+m^vcKa0+wjh4DpT|!^-
zX0%f^zE`|1lT~fllDsUe9{;z%FB6CVaZ<=#cwQYHWx?2Cu8m#ZZ1}9-0gkwVb>LWz
zn<j7Gno7sK;63ziTo?Mpg=4*#3*v!SlbqHCsYR+rn^Q*X;-*Q(&fToCNW`m}H&iMT
zuE<R2GY!yjmirUln6E3-6Z$EgVI}tE(0RgL2XOvyLP2F0Fw}%=<|wXxl(}|KWoCi{
z*FJ=6X<R$ibpRNYGF;PyYxvAHCi`R at D~Z^PYie=LO6X9YEX3Pk4Mn`WAsol+aC{E)
z9>OV3o>75!J&NZf<2ehN=hWby{f$>}oQvZ!(J-AqH*;uSz}qAGt!2OaQuXp5wzdAL
z_k9 at iwi3KN!-0AZ<k7e++k}K{+o6Q7 at t%E+{i6L$zOLJN54iGRw@~7ED(#HZHm-NV
zSLZY!r;m(XgxsUZg`DgZH*q54+HN6^Y3R2AuaUla(;7AcTe+UfqGfZlQpGP!#r$f3
zeev=w#2LHx{$1oOUbHkTGpHIoa7&#{Top~*ROX_%#{=~m6Dx_zKu$+-<u&+?>O~#O
zcNe!@lLX~mzY?Tu?03qfI_GXF#-KG4<EIGrxk^zmoxIdLC?ixAlp)e~7eu~@as at N~
zzzB?Q)m$}GZz{^zSRxvREWcr7Q$R*j?+f1aaa*RjC^joFUt_9#33)`S5+>r^`{XC6
zwgzCwT+6qWHO>)b;GQM&D&Rr`;B);5b}HCIldI^HwDIGo=-DFI*hEX_<nw;9d}&v<
zv at i1BOo?BtaQ~ecSy5K<@M_?EzM)>kJks%KzNTyJfyiDj8}fsu-uY105?L+O`fbMg
zn|{Za3U9gxA7&Y1oD&JpEO_4n;<_-lM6wt+7n=BJTo&KBxC7^u?pXZu_ktuXDmRzY
z>KS}vScgE;{(YGA{Po6sXRVhmE)4t|uQVFAmEk$_M*;|Dbo&KC?M~z at j=G_ at Y4<i=
zq-C;z?VW<^8DCJwH3Ry7ty~mE%l7Wueojzt{uo%etNJV2uN#MHne_SX=LI#sC6saX
z>obiOt)PArI1%3Y8v8l;22<Y{8W<U1%)S@(%A6XP)UnGDbVI1Jf2Qers%TgLaN4c`
zesg4p-7B^?$R^ASazv;q+B9AJigsP;yt`|_eLNy>oZT-r=(;dZ*7Ep2=+imKsVC8n
zZI$n46{d91l~^0dwyLw1)~}KTwYFsi-CL0r)H@?f`tkmvX*$h7aj9lRS?c!;|J>hm
z*CL1I at XVAx`oJnlPQ0 at xJKuR#l^?cjc)8!T;nN}c!#}3D=yIGdS=F2q>}=KMJ8x&?
zuL=q3U7EEreR0NGBbBRlX at 1Vi_j`4ChVyD#e&hw|GHgpU1IJ1=$<k8)ANjwH%^m(V
zjJJpT{yym=nt|nbe`u+*_4|^|+GAqBXQYp5I;Y<YdyL=gmCL`eJa at QDlPvEIt2RC-
zZsNZvYLZE}xq{N7vZVIY$n`ko!~SNhb<I at d8Pz(|G2OZg;EyPi=D(cPR34O0(>rsL
z_1km4JD4(ucD($agXCmMrH;`*h2_8>m_yZ3O+!_}_ar}w;!{s(k^=O}>uE>WF-IYA
zP*Hvj)HJ^cYh+UrODnHqX~T}4DJJ)mdofSaJi$#x9B^nn%dsn%S7rxZ0tRXKSKvsY
zPibUv<)O>4R;u_$O%Ar1m>1N1<DDEnxIpc4!7F?{C&%8AypgqElUZJl at te;J;s8_P
zEP|}DpRHaiwOpqSaa}jo!xp6#_1<`jzR5}wX)D_zFdMAZg1R7ycEmqLpXjRF5w)VX
z at R@C$g>$_&LJv4eVi|7DqCRdcf}Q`yGgIl!Jd5x=CtcWXky~qhC7oC2Wy1fL-D#Vb
z)p(HjaS{qqJ{N59hQ=zc>sEoLCs{YU2>Edm8^H-+dlj5d<enR&_tbGuj^5LUdoDCq
zv9~uCIaSE{i`-01&fje#p9ZKxZ&)HwkI%yP(%qz;>&?VUE2#L!s%NJC$z6BO^Lwfb
zcuN!WZ0HZ9JkTR#*sA6IapF$fig&0q>O15UPM at r6$=nfz=j$SC3r*s*N$UciZ>-wZ
zN}q_$7}^CtxBLCjZAah#Q9$NB!`79=zk3fc{ln3)UtTBm0^89SC_}|FQ~#Xv{9`D?
z$;p$b8kEC`a*+3H$osKP#x?_6DYofydz_q<rxD!NLB*F<UV1}pP!U<{<0Zm|-mS#{
z(pWJ!6Xj73y@>J{nELpi@@x&rx>vS!<-PLfyqPl1LYX)L(?)<5l$Q|<7=zC_mnx=&
z#3#o`-?^pd4L6n%zne$zF|DYrvCN|j^>GCCfqG!-Lp}LHeZ+Oi(WVX0dUOq at V*Q!J
zb<uvlC*+bh4UpaT2NjIsKGp=hH*#$ra*f2b59-#{p>GT~Vr?RRmD_r}BcFN4?*IM{
zuBqV}3fISZ;n{V#2Jd&?|Hh9-;sP$GN~j&A&(Q0+Cx7>SVcH*DJU5@{{vKVo5x3uH
zMEROY|BA~VRABBF+1ljIaT!72stGD0GO4(7@*1o^XwPxF$YC!X=KuZe+vqEC8Pb9T
zg{-9ov0#sFgMG2g-KT(KTONn}m=@RXvtF3mi8?r at g|1jZ`Zd$f(T;Ixqzu at mSgT0i
zW%@GuS6s^IaT6&U{)5MFPI_ZfT(_`?lVN)mc3M0a$Clz4;`aTOtTgHncwY~*ny3c8
zRHNlfFJ`!&!`k_^wvhFXrj}hq?@n<b_Q<uhePqUiG4MLZz<=t0)em&B|E~XO{-Xco
zFgZrOMD at 1{JnF3V1N*eWTT^QaqO+>?>s1SX6^sqOEBjYS_<NxX^HSEpzcWXkI9J^%
zM*qscLfzavf2v9Eafa~m`O*VLemyU!I~_!)^U~0d&~+ at yzjl>>A66&TKm0*Uh1)*^
z9~SgI-miF8fcshO#Q#nA+`DL?WbHQilcu`M2fdT|)<3wS;Dz^A&8^`^PpkG_?{nJ3
z=#i>P#{aeazgh)u{oGoIc(Uf1IS;-^O1_7kL$J}vZ!4q!Iaf_LGdk{nyeseI1l`$_
zEF*d6nUksc>wRVpfot+=cN)>Ng}PqZ|N0%->@SFa?ZeG%ss9zRORk at pOZ4N>GH~VY
zGLSr&(6imTZRZu#G4f0xZ^x#d0)jJwZFF_uT<`#VZQBcuwBIqeYodR^8gKx-#dd5<
zjep=+Hm{y=TaV1MsDur6g5}u4 at FVHEH>4&)F8x at bx?V=@aQ+0mQa$fAb06``jmZ|K
z{+=s5e?bX<ie&kDO)cyYTdXO>2ba~yKO~;?0`Ywa1#Px}VI9ih$nNK&Fqh)^{~_$#
z<C?1b`12AfdmJfR$uh+;@$!_LWMpOa%zTu_LKH$d;dmfTL9>fiPi8UhaMZEEfHB5k
zjByi?o2ZB=pe3`%8=$Zp8;E2|g=11)>i7Ph;jQ}pet(?TIXgS&d%l;?_xt@^-k;A$
z=nC7YBH|A-$wkt+9sD4JqjThQnWMAD0|(LLCI=rKNbr}<6?FX2>LvSoOYJegeeISC
zz4r>dAO2;c;6*&+JFpLNuso0({A^5Eau`3)n&FhSK<BO;)a_6%(2Y@^XRgWbhmY+_
z>o9C^!1(#U{Hw~p>x@=Y0~?ze^phpnkACP;UPkQ2UDAmYWrA_2M<>=VyF_<MV?21@
zt``GaKMTH}Bxclf60g8p=DXk|^zDPm?Bg<nU_aT*pkv%*9za}isXOd>#Qw*=<iGG&
z<c@<)FhH>1tY+c~m7pF)s7E<$b1_E5zJcz4J#eOlOl(FU#4ZxC4>H%wr4#4;3%{2#
zx}rJ_cz(;z1a~UvHy at M^JXY$+ZH8||`7iuUL*;pdA$GSGzq1|R#9mGdo-`NISBCzx
z<g=at;77v<)&Uq#60bIv=)A$>_maIpa0Hmm5 at 0q7hH;TFWZ~^WT^}9V0W5P8Yy<|e
z67et%4(z4V at s3*z4zmpSV&(8`rcC4^m6kcjdseb~E=uX8z_^w^Y_BAC4yuIi0|q3?
zy<If0S_!=Ld$K0z;GV+%1H3XYtBb5jD9?$MN3~m*x at H3(l17ILc!(=^16ahVj301S
zmkaD0s$uL^mS>^gMeI0W#E=u!lVIpIh{J;UU at Eul>5qTyBVg)~17L*q<4{NFq)E&M
zqHl1NH(Y{eNLkNgo+uv8M+}?9`^dq$dnRJY!3MGWHRMz!b{*t2*+_DK2m}7-!Spo+
zd at YF|9jyp|))n at aMvk1yyO`L~kLv~w at F*9PiG3RJ#%l>Cd at xGzmc!;bZ}z=<5FcCE
zNUQP9|1?DrTj%6tU~?UK;lK3d4g=!z>>%R;9Bmv6b{gwWK>+a0r2HrEm5I3B(_}r6
zpJX^vmmHGy at DBnvsOc?Ua-g?iNkh-!B?o&BGPcxkbFDPat!7DKZ>cnH>|V$_)jPk#
z`q5x6M;x$lNypUzuT-<1xp%~zJ7)^|w2sM(jBfx}r~wbvW{pA|$I>~D+{q`f?}NTZ
zc#9*}QLb{}cSl<#v=i$qB3sT)vo`bL<Lh+>KAa)Yiz@$VkZJ@!pwH?_4%Lghh#v)6
zLwc{1T+WEe<BN4^)s$VG6{Z&_tduVKC$UQ>xnHq{AqMzL=+(!;9`hs}&vL^)^BQd+
zwi(t3>~oz(f*1Wu?r1{t;5*IWyuJ2OXHCxmC*)4Y-FudLh8i at jMJ%c}Y-!LPH>2!5
zf=gx<d{2tFHfs`WZHKXToRwsle<V4IP_K*B_GNjdKV*o<?ZEE8x|ubp^D}CcqipC{
zCs1<JTv9HbsGQ9zp`M^wh$ZFZzRMg-J%evK4;~WiueVC%z@>Ftn+5)$i-Q)Mx&-#o
zPIHb_GxLC;(h}vSv)&T;1GkW|%wSTT#CVf+qkcC3EzHSstCU at JGTE`FnU6>{UgfAO
zauwTZ_ at Fal<KRDLu8}I;>tTneeK6k=Lj=G|q8&A^uqom>-^fXbTSj74e}s5*AIbEd
z9}N at i`ie=ZjXkoO at j7K4>na&ng>nY?TH>?J#3(EFgbgY3!f*M4BNoJQxc<BAE<&Hk
z(Sv-uk|Tr11%bq`05L~Xi4Aig5AqU&+5h@$a>hFREzygkpRYRlnG=mXko(OR*C^Xr
zM;)(ka80+F_^{(hH6q8_2fMkWZKyBC_m>*W=fJrbIGcgv&}4@>9d9v+yRlYiL0`Yv
zQttQFm-ziH`VH$BX)~2tKa>BK8TqiiDwuxrwe>&fH(-ZRwl#^^kD9=z$cng`mYuM#
zNF8&{9EyFcYBKcZGv+($6ZsVB!=;D`;IA7z0vbLXX8``F%t1dx6P%74W4Ib?5_I?R
z3>Kl^j4>hWU;Rwj!V%X;81m{xTBuAP@@B?)2f1(A3BB6_<RTg+NgW>LE*l=@x$hPi
zxuh)agm=gM!q`^BPri`TfPRj)RZ5jJbEHbIOsU45*qrWiwWJNUa&gu`4F95KJ?#HU
zxX)uSF)Cmhp0W<FiNJrWKyPyBm*lVkSDKRrm7sC!-{VA_j+1&1<nve6&t%qir8!Da
zX)Hvalq(Zhw*^N at dAyo^%bTjmJvX_gjDHb+b+9kP_hU40ZcLlm8uCp|nP41rL>jDP
z5AUO}(*duQLgqgB3SSmtIbt4O#TZB=+wlB$o_^o*=J>wSDTg9b>vK`A5NieElHKJI
zACyQ}YZAB0x)c45^~Jeh3WK+}eutfXssv+#`dH6k?x+R(K}URGD-upsLHBmg{|3G_
zz#61le{{@A<h%Ya=4gZU$2Adyt%5-CMEeKH|L*K<m@|Cn!W$8jbp4<Sak{YIGJE7K
zNxRpL^Ge{Im1p!sPu;zhiAMn6N|$I;?XoD-l;IfIal#Pq%ODscxGAhn&zbYcdPbGl
zX1m6a@%2JH2)<tMs=w|=x~*8U9dSs*Ek)d=I0IiI*=Kdfc>c=pTjYKp{Bks}rfr4(
zv2%l at ib`oMboe)z^?ak{g41y_ZVVqnumjP8CkYM#yvOdjh9zm1^{!FY(SrAxd5icM
zpvg_<JbP;B7vN`t-I;xil6P*g{KT#uY!JL}Zp0d^vq}9+ZtP-maMelVWbMZq=zec4
ztq<pS-pu2sGW-qJ4p}s4`f=>}V;Br(9q9}BRdQ}|r$M*pVI6)<BCoe%pTJykUKL5~
z1m7BO-fN#CVjzV7tAEM${Ki<qhsxsULbntLhK8MLxkG$uNIRH0O>kSaR(H&IfACF*
zev^~7H`fUkSy%2bXc|Blh&Of}G0Q<qV(_b524VlU{zw}p1Y;e}Lf-L}>|ACH$}k2M
zSeK=QFC+6_l8v>b0&DOtrY~zqyVwcVQJ{CRG;Stn&a2|ySm7H-fL&OLXJ8{NmCO2A
zWm6DS8#Mb4?4sbqu-<rs4!wut=1rl_bu9x;+^GLyZW{3``FRv<`IYef@&I4`cH{-{
zYCNpF&?UY;hT%hkke>s3a%+<3!ePWHA^Z#S7VY*dL!4V8EBHERGx at R$B!>qF`QWDn
z`$?NTE07CD<|W6vc*2I59kZjQ%7rQ1dc at 6J58BybGB_Q_e^-cqjjdVm3G%;cNK8KB
zw?_7l%SXAYCd4nH^SDxTg;S?33Uh|>PjcYx5<{>S{6g&PWW6S~cF^e$pr!5T_foRn
zy$&BBlr3kgNqGZyCbr6xmeuY`vPU_}!W_-So*=X5<GnKHT^REKSGlbMIX1cQ`}zxy
z<e=}w5a`P`2>MC6KhGH1uLjYEy&N&=GsnLDLYny#&><J=E7u*EH%~d_uBk3nYcAd5
z_R&)g0snDX at Sb-i@E{GqgLv>iub*v66Gek}EW-87k!$^q4$a-k$Vm?Wxah8BR8OZL
zh4?nu|0gsVBHQXi*>d_sWZR)!MZ_Hy>K`nr{kh63HFdHv);TOF&AbLW?2;W%-r|a#
zq5nT~tb#6Zey2ALx^*Sdt@|fm_<;BrnWF{UfGL6<ot;j6_vl=UQe=pH2X+I8zPxHD
z(E-NFbiFmSuD6yh5yCFC-3zwe&5L&Jv);~+3=xLR392u_cmzjI6NW5+KOSf>EOHuX
zXZo;|?D51FL*^bMXI!$pIufVx9Cal_?Q|w1)9DQH`&(Q{c&lH^2%TU(CbHgU>zf1@
z8+pO at GsafeY5*=Kwcf(*?y!<?Af94?F}+ldZwnFQ4lyo|A->s!JPCZwjKJ->*I0iP
zyhYY5%`OhXvegPhypx%IA2C^*a|Qh!$Ybd&L>|j`CsdKWe>jQ?#2hq`xlEnyTBK<J
zKg0NA0+WB2V5q4ow0jbGi%$s8LX(*3h}}qHS`J+UzW#U2x9BfJFkc8(%uIN2V5Hw1
zi1IpvSXwcmUo5WbNdUd>SiHTbNU?Eknk({P!G~ao1Nqpf#XNd{P(kRJzYaMF7lH4&
zLe at yq4y@%24?8rG9c{gab#nhhYYy-oKOrvFgkW|$Fg07ycD&<Qa~`zOc_!Mp2)<je
zv${7UuJs1!iSls%59UoBbUk%tB(~=vBa!QG4WuI8ZPocC|Ejij+bQYpX=LwTxTFv{
z1^)1_x|(h~v7^J`SLg5xf*(-agw<qi<Tk+{?mb|^c4MyplgjH_guQ(`__#2v^M3Ra
zMZ|AA$$m;?LdP0R_=#2q_xRE*Tb8&Q?~TVe?6pd{dW#I}jc}5ziNviK$31MTf3VK}
zy#2vCOZJ$D*IL_t;+tm5HJ3ro@)y^Wbtf^zJ=t6U-!4*CF*lv`Bieey8bxSG5&k%M
zI9n8C1fg_b0^$%%S$~ht+7b7mWfdKVXTHK3mS?)itC_o^^%~;JeU0%7sQtifMcWa(
z=<yGj at moQjCvx258?bMragqrRP+VYAB2UY%Wp$?Af6oUw=$^z07lyp_FKaw>Dq#eZ
z%Sq`#`NDv9FW>+Z8603E$#;7(*;oMnuYvG?Sc9Um_B`fU%j8JYnNBl0iUnkS1E0hD
za!X4wliTyVnFjZ$;nC2)l#huuuU+yf{Mdd*ec~R*)5 at BOtj#7oj&iKtb*FjNy*-=%
ztFaJ%x<#OeX0l%rd5r9j_xUR9%lO_f;j8YA6=GoKNj_ufS;$B16UiaM*IRdz`3HHo
zM-gdi5gctPo6OL--IZ-1^VWd@=l_axt~nk#%F4H<g051Gdh%VugCM7372neIr~UVb
zO%LeeVVXeRR<i%5Ag1^t#M4^D%!f+PMc}jE_m4Kq{gc1hgX{M+uTG00J|$%(@X`2k
zXLj|@o!Q7?IjO8Dd^>akz$rSgUpE$@zkzWi`U1=IME*y7>)c1>S4Y`rQTA^KalHfc
zZGBk;_MJGQ1K61jK2cqU9B8j#%u#lcbtn9YrP!l at C4v7z4Eaw~dG9~uZj$of6j$Aj
z_bwjlNBtRH#^7G$dE85U7@$`M?h1JP-?1NS=8!qd!=4=Pg*a&!k`OoTpug at +y6vpH
z68OD*Ycuy#d{1SYE7d$tp5@}%1my<S1*zsa at _Q!NNZCwTz#TOw^qq(8o?yRV!>52N
z*gk5DZG+$~Sq1kuqT|_gSuo^%cBmgZXxf2q(o<Bl{uAU22;U)gV4#2nJSPmuH#Z}9
zF{vZ)MEek*_at=6{W7joJMZ#=- at hqha5(V04t96sSwoHnf`>Xz{0 at Ml`WU`vEgTiW
z6E>HQVC8_Dnjek&p632!-O2rttR=Q-`0c^0B~K#G_H!~lcQ>i$mW_fTTdUx$!TsDg
z=J(V1-GtwDTn+Pk1%BVc?;5=S4e6%_KWj6C<+{!~{0M#zSgz8i?&J4><@)kVR~6&y
zaFXEnNZp{fK11 at 9+s|)2`IMH?0~0KB1bpA12R6eNgMPRH|E~qWbp--DXEPpf_|=hq
zLH{)RDQ?%uJe}H!zDM>AbTrw5Kw!8uvVOrP&>?trb^?Pv%NAS$kHg>-!6(HJ&4SMe
z=?4{Zc at X{DXp^$+N5uL3&yszZ?@Wvi_^w)42ZpSD)OYo)@~M2OvR}vl)?arnZlK6Z
zK2YElZL42GW9^?Bw8~V|gB%C*(0|OjohQ-Ss+oRfc%y+Qx!{o%5m!&6|BQ^z@%_Pl
zxIT*VN=}|-^tDxPBR)l4`@IK;`r#u};D6hcNmX5(K}BEerWE at 1RF8f;c#AvcB06q6
ze22DgrVF;MqT9C#XPsl(D`$LV<mL>- at +c;LNkNDou|$ggyd&GYuo3hz*lYl9as%=k
z>)CaKh3s1BUXurP>?Hq^Z<7Y|*}Iv2D%zycES#1?=8J1J`zv7RGMVdQg5x87tcb88
zrxD>9 at 69*ldM*I(P4e`XvCE_lb4mr<FppEA-`=&n%A_UZL-)Zi2k+m^WAtc<=}CAY
zU`ln2oIS+QNekh5+NDfCf`5I)=Vvd*kNBa6yjF at jEBs5^pj*K{uXIOz1j1u_%5QP8
zH=-W?Rm`3ZEWF^2-}0$6U>a+!&CDFTOYpVu at lo+&58UytSh`lEgMX9(`^qfA8yE}3
zNuE}ZSg^Y%)Pt8rK2Om5f_ek at Jc9uYnU`yZPv at pxk#Za2!`wO(DM#5#;#)?_wf^Xu
zj@&&tpv^m&cUkxRm28JeTQKHcVjBDIX#YbOfg8s&kaev)`_qAo)EJ8}W+w=L2Y$K*
z&(4;nu{7=}*pKamCh85+Q>?w1uTR6 at GK?-5CO$%CYa)ap^S?5elRDx4$8-U`^4|S<
z`yF+QloLFs)yOHrH{Svs5Z^WA0XT3c0kK&I_G2wEdNH#5&t4L>IhoYMbq)_0S~CZ7
zL{I+-k2CN$Q{elcz41TLwd3b-5eH at Ne&{gcK!>%U$AWD_(BdjmpSgD)rbozcH0Gtv
z8pf9SA3Byp)|8FW;D1NP!(1la?Y38N2YbPK**AZl%NW<$WM81#T1&{<b0BZzy&Hrk
zrym^YyFyZD#FH*HWs!Otiyz=Xt+&`Qpkb+bje82}g8X==z++<F=q2mN-+XTt{7Yl|
zle3?doUxR^e`+1_E<&aRtxp*)B5^Y2Pbw=BJO+DyJNT($>u%I>4#8c6e>lLOX4!-M
z+Xr!d80Q3>>ye*2p5)+_UUDv at 24T1Q2V|ftz<6RkC%zltQ{p|RH|7Duq~1X=NfoSo
zN`-TA=>gnRvE^lla87dMNCE!2-Mia&!LqZa8|bsIA%`}MR|eM*nY7gaoRXY<i1Djx
zk|`&aFn(gXVdBG~GZ9~^&DMBV_&)ueZ<5n-vX>M2-Il;@gpXLitOs-pOgHZ9iGLrl
z$)Fzs at vZlen@MwW4gbK&SaBE0xkzG5AV%k1&bdzb#Oq}wkM&R+-vxMmkyRA_7S`e~
z3D3YXP#M)iU}_n at fnbRxTJvXEPqI7%NiGhQ9S)sY%Wx6&JWJu%1YOI^h1{s~*Vx2&
zXhTyWWYaXnM1j7U#PLA<raH3{bec$X7C%+pldTg&She@<W(UC&!cT<w3lZNhT0?v+
z!kuM0<XwZV{Pt}3c*Gq&Zds1};JE_iQc^_ZO&pPP at jQG|G}TMiL@;wxO~zZILTr-w
z;W=1u0^BM|uKNkF&5(He at Y(63&o1BF(Z9R`b_(d%pGhbD72)4xF@#4WwkAg`4Acj_
zA8a*0BW~bmQYLi50ni0Ed*;w#f^E0Bt~AqrJvVvz4fS{Ca`5H;le3!%A4dFo;J+rz
z7i=WuFh0X?6S<P~$*hS)$L*ZN^hv`*eNuD3PmVm=C-s&;^@)dj{Oy at e$3ce)$bXe#
z-A&5<2sw>l2Y8$Cx1<hp(;R(6bd==(mtF^bJS!^)|5fSvtg*;cJ3d-`tku8|<3wMq
zC3Yr~tI=4Ad{i}Vam4025Mx|FVU;n0jzT=~sCzai^zl4*#0w>JpOZ*vTh?SO7+)pb
zJ-!xwv>Mo`67i*01M*X>WantcPRp^#AaAYYx5$#oS_3^$EU at CUJdv*gy!Wpo`GN{1
zDy*m9QD-4{K}J0DB*%nt*>04Af2KIy59SR=hU+-iQTT?|nc|&a6&qWtah`|Yz#_tr
zuo-#Jky{gfks<%NZq9=Y at DY47p4BK3|3*1h$5S^;p*tz=&#bxV at Yj0a11M1<XHcwl
zhD7 at yKF+u_#K1{~Uic`+ at -cHMd|VCg at au4oA9+?e>`M9q`I9TVhWrnGFPH5h at v}@y
zR=aD)VA>7?d at Hl8Zz9)P3Ussq)9RZPe7`0c=w+o_y8oeH4r|h|7F2adS!euxEFa)4
zr&`aDxHtD=_B^(niKDbn5N0KLZ6He#+mX3QauD at 8gz^w`S{vt5CzwO{0NA~^$q+l*
z`V18~LqMe&qX>U<v35^1rJ(84PIS58tmOz~G%41OeDD}Lj+`UteBWGz+&t9+f9&B6
zXnPCM{X$-E03VksD;JD~@0Y at Qg?|Ws|Gy;nP at mr72G=1*jve>4%(q5SX^6v}VfCV_
z=>qJVt%OgzNM!a_@;%Dn5iw9DsqM`^9Z#2&vVa+b{LR=@K1a@>K-e})Ts4{&=+ds5
zQfTbO&Q*`biNgK`y>#Si_#Vs5hg@}wvRif^%7yN9H2hD&2UtTGeK_=k4*A`o*A@^P
z5 at dFEGS-x_bOG8=>?nv^1|MPQui08ni(9O91J+dNxh=K_bPHc&mDLM&5c1A$&ku*A
z5eKFjd`&XOovbA{IyZNz$yzaOGtup8{xL0munzi>rPAZhM3+;<hJNV#*~YccgqkVD
z2dv{{{$J$TtPwr*`{qyizk=t6Zf2nxxBv>VhP5Ov5Xo603>g<=&U4Se8U?=DvpqRR
zQj4+p>~H)3Rnq_6r2j{e{<pleL=OJC-zs9xx5 at fHpa<r_D5;%MNvW7NzJ#^pbHSI@
z|20YJ+%O;5Srk~O{zv3Ja~1q{y%75*80UGgSG+T_mmTJOA=9y?zz&Q>%;Qw at yfIjk
zW(G!rc`o?=bDx`68q=LS&<@@Ahe5-P&8c-iu?fPChL|$j>S=>>E8-L$hK=+HM?P2%
zeQ2eG at C!Qd4!MM1*mgj0iIR8S1-=wG<%>zOBEkOFWYjxaP*^>hy?-#5n*=%~zRnD7
z6CJR*LTqcTA+$}tLB<#{6%d=%2EQome>%{(;vS7-e<Wi~@=!f8kDB%OXq#PZ`9rFi
zk;YGg&HH}eF}!m1U-%%zn+G4%NXBk#i8&g)^WncdGr}u at cREh=f#9V>**SxH)Vstz
z#VmP*22rozHZs5IHw5$PFwEzC*HnhCV=09>hs^b+{5{d6ZV%?W_r#@ZNlcTCSAfg<
zvA+m03F;A(ph1)`$<zS*#>x+D;N+XKIQbVp^l#vXKhS%P?KGF8&WI_wv4z9%`E6G0
zF;cchwwJx}UZ0Ju3pExF=8BLCvOe?idq$G);xOjMD!PQM at xK7)j+{!$;l#_7|NjuL
zWXqD at Zz{abLDsXZ4wO9Sr3_MvRy*Ppjf?6%{oix>1D|x2B93jR-|g9?J>ePP*DR~6
z0uGvMXuES4;Q=Eb=jUZ8Z$nqTJepne(6h)hOP&ppF at Cl1-vPbFnX4RpBbg7?BnHie
zn7G|5*<Uo=MgEY_pPPhuF~~=QTr}f-l<4Og^mF at 2Kfg#r_e{p!<?w?sC*{B<QjNGw
zpkYE={1(~>-S_2w=b8(Uwe%ABTRChYe_BiaLSIG&8N1W<Sf>xu1rOHgdomb!xjl$S
zb_aZxo4E|%Y?Ls*|BxSU7!j8Nbd1;;5BqtIe76)am!*GM!^wVrki-ogPyA0;N_WqQ
z#d$U2x|K}RkZ)OJh;<g?ehS~Rwbn|iy&HVzLbkfmT1I$wGOmC97W}&Kt-slWb}@8$
z at Ne4&pGDFxd@~8(tHIv$unvKd8Dxy_7DI!KeAJ%rPGS;g{a at MzOy`4kO_ttoR~BiL
z<2$oHfAl->QEPF_bjTa_n2jxNum?I(ki|1(WlUU)^9>rTwb9h4zj5!+JH@?uhc(s+
z+E7j+x+$Vx{EW~mBPSih{x;Nj7k1zu5$mA<y4WiYxs~ok%#m0kBVym$$H+-4TRmch
zRPj6OOCk}QgKuj-<eqL$#8~e}+gsh+jg67OtrEXa!5t&~pRGHIJWKQ|j`s$0+3}#c
zhkX4;XrK%j)+>CQF^|L*A#(bk=;1y1b1x<ByVo{OHKFxM@#|_y>|XE at D$H at TiK!<O
zdt_T9Vpf3GZ~VyCU~R^Ci5&em-+put4IJ*<Qo^iX%aJn~7}I-v$|JnPMY4AtBYW3n
z=#R7L+DH47_;fVhg<dZYdc9H;Bg<}1oSROtzOW@`z#a>pP;i!!*Y%K>A(wA?nred&
zaUbHpL<9d7WiBG)K<))skKF5G=2|&-mqT9=sja{4-fn4e-94DcZbTaoVXoaB?BOKV
zUq&1qhb*rmviv<A!aY5M8G6yb%CzjP`l875mKNxJbkGmyV|{<LZ&nTefVHt}c0qC!
z at _hG5`$lP(eASCMyJKpXeA%m(_Dv-8^&LCU|J<oF1HoP?{^!0kqmOL<=b8)r&+R&l
zYdiK2<@k%>Hz`g^t3i^1{9Nh4Ic4+obN!9A$SqRg&}AniK?Xn6g*bMw6>MN at an0zI
z5*pZHgcq at TlUNmkKMrfyxv-TiyUhb{9)z(-Cvw^d51LG_A6}bR&M+UkcaQI<xr4kS
z{ignJO2gqR0-at}U^iKh&86XFeZK#j_*atk`TqL5 at z3-K+2J<-+qit-O!SyvUgVo>
z$a93BBXf#iPr%Qm6B~V(7W~RN61!2B1UaNdfLMCq&lx$Klf+yf1s_uj{^V8gF_jFT
zA~%-xAIN at s8unj?=dC6(Hj%e6wwufikKi?S!)7v9e4{Ob`XxX)bX^<E(v4O#{3B#9
z2mk1pUo`e)>lN&KVT}BAiRj!NYtyn8*xuTS{I0nJ`6&^(l?(U>{-(Y$_v>3dQs0V^
z`a;J{_!$<7CkmYa^!*QEN<626AAL~AA#DvyH%fC~HcKKrF4k$wyeXKAb+k}0AAEdZ
z;{5lfR6UQr4si4}_{I0=Qir at ia8KPr$kD5PMa?n3TTVe9!@d#c3_Km<^Zh2bfZ(94
z@$OZ&=LuhpwaFcA59Qv4%)HdPf#3qT$>bSx5d6dM5FKL|nd9e>r!n1jlzV~LVw>v-
zf7rRpXyE<|o{5h+dDM0S{p!tN$BtNRz@?lO1loRJo=c&HoG6=(+k|J`ti!vNv_lSm
z%z=I5o}{cMAA(QAcYY@^PYM1rsESIn?Bx5=dgOL#fF58qbxsz`pK6OH^26LTVw1PV
za}Sfb<oqc|ZcA1~v^AkU!~Dl=dl4hzS<P|Cm){`1>Upc*nh2Ag(4C!;b(nXa=D%mO
zGVN>oEuYBbf=YtN1O5jXfi)3K?1aqlMYNvi>Bbry_&SHoX&q)Tek1t4H4(vij`}y1
z0$UeH at qkka9jwRNLBsaD5O@n;_uW=$WCz^`dH}vowujK*2)+)us}bxJa!QghA>T-d
zqw^8lVKgvdh=V)BK&deH+14xFa=P3z2>6Vk;g;Zb62F({(Gmim$|Fb#6arfKgNZ>|
zytQ2tV at f$m?3IP+pDV$&#ysTk6jRBTwa{^{rS2Rmp_1#tYr=k;PxK*(={wz;)Th4r
z1$?~os7lM)b+zKjZ4tDHo*Aoqsi9XTlhYwg{=B?K#ByR4atdHqu7 at l!SEL)xXr_a<
zWe1adb&zvw1#|vhZ-!XX6~wORnnfWd3HV>cD5biAQ`Vvl4Bud`1U>=$wK?aV8uR;8
zU~hAj2f6tZVplUJAf86mMc~~?Ox*5d%-8oM)sT^YbkoS-vpQiV^irUc;aQNC%lHRK
zEJw%^;QJi%#BZQUhdhC~rK19n<CK)OxwQiE(hH?_7rp0HVaO;S<VIR4+og!e`kwKD
z*EB{0w|fw}m}oZ=KdYt{F?6j<fx(SoV*S)`DlgXFi}wTDY7LQFv0m0d2TAz2XuMO4
zI85Z*O at qJir$RUJ8~Pwo`;)*ha-FRG2{xA31cu>R9Fog6rgfjEaza(tZ-}YdN$D;o
zTIHSb&i{ihssX>NJSJG>q;4G88<}yz8h0_qxK}b{oiAv_+T9CXV+`zI$Q$Rt{gPY*
zh_%%Vo9G4avNtc`+Ok^LCcyPMqCY|`%a1Gzkl!)vble0bj at Z+2<Lhw1uWCkgmvTn5
z=?hNPh3mjTiJ&in93fFo)4_KXv5%1ZJpeiEYJ@=^KUu$ley2(iI&?|!3;a}%<KB~w
z_-2qZt4zNmzhgSlgN*2njIC>+C-Q>6D1fY+D&@Fh&#5Gb0>%dM;V#CUtm>|1HTax7
zR*rMDOwa0hLV^6+?Wj*J^6%!5b`9sxpCSzC{@qxFd@=#uw}Mu6DSHgK4)O3A=5jKb
z{w(T7tZeYlJ=0Q<cds43iM8mz{mg&SWSqK{tmqMYd60+t|7|aa{Ck+eSkoQ-42{$>
z?>8WR*o!_%M!iJC;CkPN&A5cBA~;;={i-^wig1 at K;I`jg{vRe6c at 1I<kb6p$cOSFO
zjd#dK0iQX>4|?xL{QoB$_k_Hz-(*dG!0o~&^O{3eiX994pgXfyCp+x=csB+|l;<KN
zu`$OWhjJmoTVI4P1^TTAF~Fm!pyU{*wvGYg<IZ0o&-k%5dxW}7#CIk!6{)~!ph1SV
zDnNUUew}}%L+l}lkq4a3YGa-v^v26rNBsKZXIls@<Gy6h3qr|)D52!l|KYeM4C00g
zCAHTO%Y27-CDOfvj)!%Ky at hAVJ;>}#tPckbuhDqt-R$VN+?RUOmy`><LJ!*77894W
zu|Ivbg&L-3I-N(3p3jG8At%h+91V$a<XwETgYZo^-$omCPHjTT?4MEoQ1WOhfLGJ9
z4j2o`o*oi6J~*hMVO?7Cw_B4X9j1t at LgM2=DLQ(Cry`zooAD6%1LS^&Eo#74Yf>gx
z5T6o^Y_=kN1NH7xX6Owtx at E$E{qOH`XCs~|=3+GV=VntXD+A|0y2r3ek+=Ewnh58x
zwZJjZaY>)!-T%U`?WfjvSo-C<4h!;ilo``8SLAdZ&iiq$!MP5xRwVl);s1+sZ5(79
za;~|By at 6HZrW5T)1lVgv#KrV!D6olvdot}-mEgU4d(4#ei?^YTAw9CyX+P?`8d-W1
zvS>1~TYkoKGOEzD$NCQ%dPy0N72?!Ne5K}C)OoB*YC^()o!aB`fs5=ia%r7$Axr1E
zO|+ki7cJb8&8alSaJ-OjCQ_1Y{>rnxFW3?1QI^mDUZmTRZCOq$lYGT#1G&L%heF}c
zQ0kRemcH|fXkoCNE>(p4&*P+mUpZ;)7u1^zscege(~cY|ZQzBnPpY)ao0U65mycG*
za#BsPWogDV*1nxO=sn^s-{N||;3ZtgnM;$>=pwNa_T<{$7~C(5c+z}OvGKQ)pH&DY
zb47(J#l`{YXQe{Pk~4)G8ouI at DexmCack08-%*PC!k~bdF!*pkDN&m9BAy(~{nxAl
zcq?lbO4Pyt&B-ezpnKR{J9-hjTH<*V_R?B99B~mBQ`;psD7mDE${5KFTtT-u89RDR
z>B)=5G0k~XGi2e&9gxe}!^HQxjQCzPTWe)^w at +`3mYgk^zqQsc+GHu1(;1(9bZdLT
zAja(`;(tYNdjhtJQ&=O1lA8o|$&byOa^s(!c2<S<@kO%|HaPd1`moO}V(nFrYSb at G
z2 at 3dX${sGTl6+I!o>``pq@}25kmv8n2VVZ2TDhE+r3_-FsrSoDdE+$v#S&KC+7E|5
z^h!wx_w~5CabXhtR0n<fPgjbLHZRqr0=J>{$_ZSpf34SmYq?j-z<w{eED3UTB9$Wy
z347C)=c_jpyu at A5NQQWGVu-rK-GKN)OM{;=M|f_7KXRZo3i$#<sZW!yC_;x<1tV`Z
zSx-zn=Vho%!OVEeH23UeXT%$x<w5LOi-31o#!`|T$I at CCy|k9Cf!uWS)x2JM@%G-h
zxX^9vg_T!#dDW3}Y;m;G`74sw136TRojN*tow``Fx;|d!ZesrL7(g8Ss;-Y6xy at mV
zjG&+&hfOWk-C&lzI^4VW)!d%)#fsjdk$3TIVhCbc<2;zcPIA;$QYQ-dI+fh($$LrB
z3w;eKPj-bL;=ok#7&{ztz^_K^!8n%Ocgxy-lTvh+qY<55Ar~nkkbmV<x#S8JF+v+<
znjId<9Sz^<qojY<Javo9eG&OFQUC5mtZM85L7x9h9vzw9ajo+sx}?)eBi;<K*0mEn
zP3v9WH}!N}(Jp#^mU at 4+PCb@Yspjv{V{A*baT9yom7t>nvmUm<(b~9iv#9o~*SylN
z<}6IVTHuwwXAE1u>@ict9_ZXVtlYUH?Q5s1x_k=fU at xyS^(>odYQ!^Hh+(<f<~cI9
zS=xeq)6^Z6WNhESx9U;;2 at n4cE8@TfhzD%vC0d^}Q>Cb1k}XQz(S!VC*Xe6w-=QeX
zr4Y~0 at J<G+y+3~J*N82Amc*Z9^veH}=(-55_l{M$Bm+F^FWB!wfB6!zgGxDaI^Vqj
z*vvG)s;+jcd at J&nF!II;<VtF1d|j?1FRoS7Hx%N8$O{3RhTbFn=I)yu4O#bJh-H<y
z^?Uy~k0|Kip=<7917n^F|KwC#0>;0eEu-U{km88+IadLhANwyi at 9+8}F~q6E`X1VW
ze3ldb4P3~+?n*jeS~XPkuLar{XQ!*K5IKOShkdvMSiaD~Cp`nfGhxq14kgf|tcQ+s
z{z|gFaL(yIRy%NM8a(q)NeOA|;HylXU-HvknCjTmR#P`CsmY8zyA+tpd at 9hp;@uU%
z+(sK=pZ9BYO*I!O!b6R&TZg$*Q at ktQ6VS2TZk|4vXVi0#`!xUySjNt<UFCLq|FL6&
zxT;HO{b{uJIQ$lqKXXfUfu0e(pT=AWey11mQ^{$Z;V)AnX+Vq!wMf^UfP5*+8HmUB
z^t)8G?PtO>)f~q at Q!UF!T#)Oq-~U~mkk2@@fvHm}>V#anijCU`?WxI=IjOcnZ8A%T
z{4;rYrdknNaH;>>Qt%|sIzi{TqN&-un&3BD^`t)VWi4T+kUD|~(|{J+gt~7L*G(Ol
zx)<?y_aTpt?%TI<_#j4lXh9QGHxdJ*T85Y<uuG8m(Dr2HXuWBp{DtrST)<%3{_txw
zN+BN^c%{Y?(;4^?reS?k4Yjj%E(R*ap3RZ7`l&Q?5}wiH83UflWmn=q#n5}tkpI%n
zjS at HW!L8YjXH80T9iGj1Jj=>wtMP2c$bX2di~sUGR-amC0+v!e>{{;8Bh~?1ch|3R
zSV(A}&lX?u$O6qGR%Yh`OGt37<q40~-k1Cutrme^D9PDm+}od6IvVmhay at Ynb1ME-
z<OM9&*j;pNEl<DplYzrtsiI?l$jx~g`xqUSy67-3ZqcqxuSMCsg27p{oNX0?B7a?E
zrd8>xC1r~dLvd(*|Bu>4tfhDO5#EjOzGYYP&Xanyreds11chYWpDy5gl6nojN1j!s
zi;6kO;hVV-v0NiytNg$c(x13%Cr at oeT<;ZQ`xCW^YGsl^b#r-ff0j0JdI7;7t+>fP
zi0 at 5Z-lUGVDqR0-E>kF{eF3 at fU7WW+Ts}X-Sb}n#@0G(=S$X{jw2Am;P398#bHuD*
zsnaGJkOQicl+W08wp$i!Zru){Z;lPYT$J%6lB4;aLmvINw26WX)>OsDxBmdv>L}ub
zB2Vc<eWyg<0pG{;okC<-E;koylw+XFBk|?!Rekj<#`l%l)7>ZC&~Y=ZTB)+WLZE9d
zB4xuKt at D`d{hePU^bmK at AIFUKs`Tb!P7LPeTgFPXt5r}z`fu8C(iTnDZ6;<Zsk18G
zSnQf<E*a at _4exxDh+Sg|5$9_VM+arSW==voZ at OjsRJ!K0>Pi2hPsX!rNBa7_<q0>^
zAFnh0!B#6L&SuvMbtey5S at _=WKYwqePuU}VI{T46UCfl>f<B#nuTQ6BSVGXR(NrM%
z^~bSg$U8&&^&t1 at As*jz(c#(a9khV{`3LAMn^!hCk9&*cFu1vj+(VybxlgsVu+K7m
zR*pU^MW4N=QQltVv5L^NS;@Ttdi#vfTk8>p(oN!^HMamw^4K!Ir`1_?b89j0{CB|B
zt(ZtKwwbSpq7hFZAMphG`jfSZ>=?)op8=yAiSyg|-vhBkG$P#^xwp)(QQXj$Wp(B?
zBcC6kkwqhI=>v^8+H!<j^_R9h!L+4#@Oduu;UjH%0&U50pM)3(Z<((!^GAjGlg-SZ
zvNok-{;+kZ!z+)p$J;UXZvWK8-46LvdnPgM at f1bVq&<^H+7pE`ekSAR)`2!ZrH-RY
z)XK!!g!V}pf+hALUY2(m){D`eN`Kw$1Heq~8z`azdf{W`yq{CU`0O197EGt!1zxwU
z*8o~CVMqDvXyh%X63i9TqpW_4O$qCrPO)@d;}FXL>tk!CxkxK#=^%GveRqQ{R=6&R
zi<tP~?;j^})@90mLlbQ*=hVCCsJ!Z#-AejK_!P^$@TugtpOm9S>`f(|PVW22(4Mn1
zbkuRnyci{i$obFlr?1v^D{;@w0$JU!)NyZ%PCar at P;4#<&%pnA)%p1EMmTey$aXJm
z=A9MSa#Y4$C_6p;DSYpEHJ3lVdKUSuf!+cBJa~`XR~=BNjlV+PC*L!UlpTZl?f9OL
zPOEX$AqIIh9rvs`Y)y48uG7QQ at Za%j=Dz3DMSFQCJ6^>YY=r&;J_;_nwb2sY_exbs
zU^@KOcah(gZ1Ev+97n6om+r1F>W+1uhkf&VUe=8KF8Flg_w)CEPb0b#>rdVG3ANxc
zcKE)W{e%pd4~`tTkia1xa*&~|mhAq_(sR<d`Z{sGaUbSO6`zfLK<!t_QToNGmDaDg
zDdgJHMzsmoy;F*LrK#Ubp1GJq#%jZ1j9b9|gUofI=hXQMlk(b8uZ)6Ox7V|DuN>;l
z-QMoN{9rxzam^N2UC5?%tCTT%MQCoG=Tvbr+F5OS40~+)44ip2yt}QwWc)R8<4Wnc
zXx(ba3?FTQ%p9}gC91u{-mPTq1+L>C{fX*jIFIiyQU@<@L%7flEGJK;ILoL^bPv<i
zmiWAx{oM3 at r8{MDbvl(^R_xPwG*5iVT%ajH?hyU%h+g>oz;?WH$#74ZG>*4d8uvmu
zeh1(;^w91lk^uihmQ-_|WF_o_ at AyZb*7_%($~>+Y>~nz}4PRLzr|^I&2tqFGh6#13
zPvGJ-;D_zDB<XG!Vqf`<Tf3~%^xby~s at i(DKT93RKIor(KFXTVjhM2^eXNB319&H+
z=dz%)v_KpUjKu}elvY#5i9)R8hDj>sTUyP)nuykP0aZF6Zb}T1#<^gfCEw~b02?0)
z`3JJxicOq!V8Dy89{Cze_^(;VjmbbRPGAK*PV$B_*YVOaeR-ENeenMTk>$3=>VtP)
zayntj*Vc~t2H3j~Jamu&ppQhJJ>9t!YasIBYRNO4y_P(V&e8AqZg5cA)%=Br5TiJ>
zvedN^<*g&}@$nsC4>Ema;hY at r(>oT)bgG+Fk=pJGA0qrG`~TLV<v|@fUS(*I<ed!v
z`Xg8960-h9zOhK3`39pyYYMh|zrMp6a%HyF%+XBHndWP11h1G4!QY#6gWLVxTJt-8
z2AveElv|5ADd>k!uvc0jcV>GxzS)Vq=rzry)OK^RV25=oC#(^9>s^AF@|Vh%3ig$j
ztCUX_yDBgiITBsJQdI;So30^_We98pmc|4d!$n?8=F;QW*xmk<Ps{z?PQ@<cdr($i
z!7Ss(tym+^$borY&F~-FKp%1`?`ebdx#=YY3!k}Ewn6flS%zGKxHo1JbS^cd9*{}C
zL9X2@{g#3Fg(-1+8ElQwQHJ|6*;3HcZR%ZG1l at G0VAx-0h73}V at 6g$+k0EFCWcc^y
zNw(4J6_LEP$T<m~gS}U(j4YQbDd3P-Y;#S`o*HwLH4ER)n<Z^tBQ8dq;S_VBES=6p
zJbr^>lQeWz8OBLyO2NLrUHy1uiQs}HgNhI}3+2{SUk{-~9p0Qrk(l;vES*+4r1MxM
zI{P(pA2^-xi#~shZgI$wh!IL??-Q%9Vx#D5WyX-R;3{k)o2 at N^oy+n(UWdQ8Gk8zP
zBvQ>k^oUKj&i at H>9#_)57WG`tQDZHMOx)<I^={nZB!ho6t)C1%2I_Z4dUyOTtT*qj
zd7ch)O|d?uzRA*)Zy|o(a)G;_?o?nZtGk9(v*dg)aw}&C)88a3#)JvqO<&nu!tWS>
zPQvo#lGL8uXEMIiW8D*g57eXWg(&+9cLCG(eWdM}cM3|UYL)4Sbi7p^gOW6~@2F-+
z|HV=PWKM#Y0(K7d=m{EaN?SI{B$vIxR at jWL8)g53T@>RW$)hsRzrg&VpAC|9v at u>7
zPzfEmy?MnK6XO at PWQv9F+BLk(Yd;ZL?#e}$qjKverxP+VABWTi9g%Irpz946%q0F2
zNpCJm>a8T>elFHuM`cM6C($qZBI5O#)SCSqMcgNnc2Rya$yuzl9mKkjtJoC%Iax=c
z?|zB{Y&dw$BZw}TXG(1@(jZ=B4ERlTJPXfTX!IfC8V<cM^4>FeuZIdmp6BrJNZ4*L
z?~Faq!0wwV1mC0e*PY!ZGq7t1HhAR%bJMdraP>j2f~88)s(vOnn7g4{#*4+XF?crl
z?0?M_OWx^0zLoI}_UaYeWi_m#X-uC-&ryVj{TKbQofVrsSzr+<n&hJ1JBZ_+DMWt<
z61vjt;2W?m1rCP+N28+xQ3r{!R1uo5aD`7=^^gxRN7*x(y$oX_xJHM&rdutXvo7aM
z*{6E(+!0Q!aNX$b*3I2<Nwwlznje^agL1#!i1TkZ#?v+I!@_{#o5m<pI=z?Q)_hnI
z{@-rS9_BlT?5Xw^P89zCI3ZuM&tAUlvPSnxT2EmT`b{{+oEI1*4fEv<e7>%tCwE;b
zM?l5kTdzYm86$;HFI`7vliWrmE+S3x%Y}F>x>sK&7KF1Z9dV{JhPi6&bxRt1i~H)S
zu-;e~oj6*gqtqIMU^KILHaRu9^qABmblB3-L-g3pJNuY-*#F;mzHz)0n4uxMbo8UF
z$Sp%w$W3^#A9EAH52XFZwO9Kco~DL9H4}FH9L$Z-y;hA9d$DqKKCZJM_X8(-JAc+B
z98VCPBgWdr`g3<2y?5FfZ<*-hlNRi2!9g`wqZStVm$W8hErvc!758)T<lNFLs<@2e
z$qJVyQ;y^q*4B+!Tf>keW#y6#+46-d#B2^9K;G@%0?DW5Lf}Rk-2-HA0E0ntj*oM?
z=%O%b|GJNfgDs#HX6{VqFBsA=b5zM|(dI8ZX8O*m<fs?5Xp?Xt_BCi4_I%LJa^`wM
z|IN93mBTEh-R5^>db}*3TY;mTksnG4pV~eib3^&~I1=Lu=kH0*2rl$?+`~M*HqlrG
zz9w3dW;??0=*Z)WXBNX|PtG0CeN>TsMXN)Z8r%ylV}s9Y(dzK+(6WiBN6=2_+Hw6f
zbG;U0P<NXvQQn?8|4H6nZCSk~^2uNGHFr5!|4#fqKLdW`9k+9V-R+y7j_ZrJ^KgB`
zuJ%($UZ{7UlO|mE<oC?~SD0rnG5=p at o^3&S6^`;yRvPpF8Rpq*%>P}?v%jD$)%~*e
zGyh*^p6zD-A7q|AhO&z9msLgn at 7hG3b(WC-yCTW6&LNr}V^Q~h`aRH$N?SZO1b+US
zhP1IEye!^fZN=M_^Of4`vbfkV=J#IvVfF4kGkNEDr?h3_-SbPRn6?OCU0a}iNPTyb
zMbkMp#BTJ<p)ZUL at o*a&tLeC{Lrl(G58VtawVL5eqwURp+U|6Elkcr9y0!>W&uKZn
z)9(0&I>W`lqj}ldQc>1BPuUxIuK2G+bm-Cr`*WxF)0^Pe95sIm##9F#panRWEMY){
z9=5|nR2h{e8{~G{e!G2(E_0Rp99x=}{RA@)N^fIK%iW;+3HoXQ#<d(r1&(4IdvO%u
zD8*5Nqur+B$Z;++O9j`O^8^=+4d78qIY}(U0bHvysWiELseW1fQvXAd at t~O!@cAk+
z`p6}<YXI_PhWJQZ1Y}F2z3g<FbC=|VY<Hj9FAF)X`-uIJ_aSS50uQDw=e23e5U+Ij
z34{7dvH^4$t-k4OP=tT5(N{ULhMb^}GyI-6u}5O9TSxrJR_x%&(VmFGpU^hg49T^9
zAMStVxc;S|=-dA0dC`MshHLN)__l~)jz$=?EmU0fEp&hi<>&y<smRr>G?y&N>dlkL
z5jQuvmy)DFCzjw{Ci)Lq=g6F4nO%t<Vi_<f4qM&2kRBqZh!k|TsOOr-0@)FJ!*iNI
zpJ@!g8a=x}6HZORUU3ZfB^^DQ(rqEMJ~l)He|~jGLaw^ziKCJl`{RP|g_7MTi3|%}
zDAuLOIPorh1fele<@pS6S&{_U?xQ|c-kOdm?1PT-*2$VESFD|B(D6kKZDRJ*Kwid<
zz>b@=e&_~Mm$gBuh`r_E)Xvc0LG}LkOJ!-SJdT`To`+|V-0mK)4A0Wkqh2**L)7tO
za{CXg-KYh=PZif+;zaz?mEIL1-;QYDkFq?cqW#Yp>-g!$N>8N?va$1KiBcA$tz|_(
zx2x-P9jt<0KLS4ey7RLbei*WHVh)kR8VP^@j8TJk!Mi8 at Ak{c!_Gjka(b^}R2QR+8
zziHj)@LviE3NTeHUI{(UmPLC%e7v{N-|K3ESBB=KBJw4~S%a?99cxnL>pXjE;%tt*
zx^#7F_55&UOxSwV?Zah|4^s$Vn)|UG2jqkj#5>S`_@>N2?xByM^F+LzH0YlrhG&vJ
zTbpmxgQk$>5Ocdc&|km4#~`(DBfQ(kR5fC!S248Ki+cvdwa<kOEa>Z}mmlM3$b4)z
zpsy}@zCi0eU%>AM#5_xDEoAt0UqUzF7kq_5pMOI7v9*A?kDTq9pO_2#VpjYc$D4dN
z^cB<3j`y at l$O#$acZ92D-eJnpCNlRLQRjb?aaJftP3I_tx^vTUY((ypgNycR4|-Sr
z7RA_sp?3zqIG>lMJz&-P>VdCEj2K{`@|{eeLyPqT^@T;?;V>Tav7Q_oc(4Cf&0^SW
z2N0L93vu~=@4b<#Q*ZFrIb}^uiLrh(6Ecsk6VFRWq3%m?EXMIFj+byO#PJ%AmvPKS
z3=i^bj;sv4sxuB24mJ)K=tXyN5|R76ruhIn>vlf!yw<=z_p(AcX1qA<s(xX*HJq&&
ztYW8t*6qLy%F!=3kSm#-?_e)iLLN#f&Euq4!!ZX+$UJcHg2-{FLOZ5=yNEu5?8V3W
zoCTWQjQOLqdrYH|PqVS(2lzVDl(u6yp^pXIJ at OB2r=vk53pk4J3W)6U;nPH3rNi7Z
zPVI&)k`MVgiD`>m_8&HQRNfu%9U2?>3!(1Jwncj0UEI5CtWzi-d&ehRqg$NXV~_;N
zgzPxfw;S?8jJ-7wIox=6WucJg3c0(Qzk<)Ikk4lDeOSA4pNH>9nPY8(ToG~Svk_hf
z@@w&bBmwx&0(w^8dAkvO=yH4hie;os at ZjP6OQLiCmJbCY@8Na9T9I{yyrV}zK_-06
z`ijTo8BNq<;O&r)SJ0Up1OA4uimNDg%a%1kj=hQZS-`V^Z>8TrE{IV?CU^>Vk<4)8
zzGq??eyAj9n<`b at l^v|Q5L7am*g~{>V#Hmox$EliT$nLWbzwDZXfZnV&2k;~yT`Td
zkhka&`WjT7Q+G^r(3dad3nlO+=&N9!*x4vI7D|*e3Qgn8dd8MqH{%=AILOL5r%J&`
z>P%`n4tZ;cJ|Y-=HF!Z`K-_d=uOd9~c}^))N0p!x^%*D8tyLOp#h1P_xTVL%h%dp<
z at kLvshk~jKRt}X3I%o8l#$j9??VU*3-~%4xcNp*Xn4DVcWeF2>ZZX->bb_<4|A1zc
zrhS|)=E4}n^B=19$ill$_uq9U?=tJ2i?Oc1NHgk*1jL3yzoQ?=I-Rrrq>US+gKdb<
z at TTdo#W*?EJ!nb{-FjM}(pMBe&Gdc8Al at 0p^!-$Ct at y>J+$XBQFNUAiPfJPY6+iBi
zIu0^dX4vUGmHvDQ;=<~*_81*+mS2^JQq+7wF6!yd!2G?5em)`l#?i;tpCtS6%~3O&
z$ahf(8T36wzr%+NyVM at z@8y=_-6)C}kS>fFnZJ+BR~d2>AWLhqaNXJqvIfPbBrD!+
zgS_7X>>~24Tce3xO%y?5PB_=%zi<09)oZEhjvw&M34S_!JhQ#?Zf&;ChW_Q>PTiP?
zr)0fs4c_^Hj%9wg$a?w at sYCEyNFTkT6*0`O^cE!NtJB9t2c~HaK631_A9$Y at MSO>K
z*Lg3y`tRy#K4?$%7hoNE9LEG46LCz!+ at YrBAZ~9~L6(yVz6rHsoFw*+K6Xk_6Yv$e
zk^smA`774(O(V3)_x at S*K}Qc{ve8V=P~^9lw3|aEN~R8ICt}(`X8`&OablqjK9DJ4
zqr~rJuBq0|(2MeM2%K1!yg>Otxz}#wVUChiwJDp*!9T8=oT_Qy5I#pvbftcJCl;<#
zc{N(OkFI+pM=3uYI%!pJJ&DmOiyNz(tddlj);H;)ZG^4JuaJ31f%jwlh#j+FF>-dj
zzh at -BsnYTsVzua@8wls9$Qp=u+nWku^D1<Y179M?k%4_<7_z)q(z8_hE%)I4oZVCo
zgT*OwYD;cHpS`5am~aT=v7DE`EVnZr`m=V{UMKVs`tLh+?(>+tmb^LXqEu=U__iF)
z7Yr|PTa?lv at 3>BQ4t~0lyQFK`%C4QVrRx1L<+9jyH({^7Eqim!9Ob`R4ZQiwqPqMB
zk)MbzmYfypx;=dI5^{|2VPxjbi`1{S9&JIhju*a6-nE)8(8f*3#kak=xi`ivO!156
zDeY6HHQbO=+n0NrvVptN!Pb~UD_t{eZ$+k44OGsJMAvlW;mW6rO!MgCSp^LZ)Dew(
zYb(C>6XGoAh(>=T7iHX$-{7I#F#;!B3G$&<b&~nx&C*agOLbkp^J><1`&V at U&)Rjv
zr!pZ2e!v#!j^%rz*)s11JG_8H)pppVZbOE3wdM+Lf at tA48Q4o2u$OER8U9EcdQa^n
zD+M3A_NCh1H_2QfHuj(l*aagKLtv+ at -2=Z*K`R~IpRE2j+WrG43o__ODckw!IqQ5r
zgx_E`);`4#acXPbLF_#u?(4A0lXfaj>FGS=P~9f+q9U;Fy#P!?k}N-A106E|$(}rI
zAM0I8%eh45*d}dB)|k|Cx{|d0;zrUoQR-Ln8^vh%E10jq=a7EtxXz5Bi?=+h(>9*F
zqerhTu#^5zF?|Z(v05?mD<mN1UhKQ-K9}77=yjh1vvrrM^==S-WI?>d at x`S6nDb81
zY5)6Qt<YIcApH!Vr_i`}wj_hcf9y7QURq-Ve!uNl3yid5tZX+OV`Wn@<EegVJQWsG
z(6+dI-z}Cj_&XPwoath2H^%a?V=ON|M%rT)a0M7Qw)y9+$ym!iV(KxB`B7pzM5A6Y
zQTXN)<eSuX^s$0Gld|RQO{(SSQz6EuC0GeM%6jO#8jFd}gFjfBgiA$O(j4`KJ!_~r
zZ~l{(G|Z9Fgm!^<siCylk?`vZMQ)QgwVdVX=kFc;{Ds_RM?b$N_C<fR4ptFbzgSNG
zvt7mg*VzZ?f|0%`fZpNX|7z0y<g*VvWG&f8n at im^;&M(pu?5-FI2my<<h#(F*Cni{
zLl&m{Rhc3o>*WkqiNBX!fxp9EQwjQqMqjX2r|wXi6Sz`bJDX!h=GADYbLPXET41)p
z%P&5k7_tyLwE?BESYrRx-H3O|zD4p!pC4_$Hy2+fW%ggh+TCsg-shJ$vF02maUtfV
zBW`(4VhDK7#h#xLJqqF*4#Hoo-8=8MwB#603$q{Z$DXR|f?u{er+KeTiJS!cjD at g8
zmH5P(^KdQ_XUX1h&5$jX)IiTSx5K8X9U}F6Hz-5Y1lgu>hnFa$UX$`qk1+)IqY78I
zsSN51Pa4GQN7n3@?8`{5>rC&fdaslqe^W%S0a)i&kHnGxUk85d+;Er-zMPZOEgvH8
zM+0zZli5Tk_#yoBpi7k00P7P;e~bJg9Rzb?Qo`oo0@}Yl+=Klg;OQvXX5=oZ!D&9J
zoSdV3CuI)o5v=Jcgub at Krv>eRUQp~Ndt(yX5nP+x3;E?)U{3$8E$Oc~+EQpDZP6zg
zd<(3C5q^Qq`<UeYUh&xC)ZW5`4Xh9^IpUSx9ZIBZ_u3*{=j at AE|B<oRUcJ=Y=-|f_
z-tJwPuTzH-etgW{_Uh;MH7AI3fvqUv^UQh;u~VjtOH9b0F6I$mrJK2=jcC_P%0kvr
z;5>SWpSYm$YJPBCa<f;L_*}hGbZ&XZsjJIkV7nuI8*Z$6XdH`F%HCp5He;v2IBLpV
z(`8E`54~}J4BIh=7aU_~e0U7K(B`pa2KA`)2jlmOC_M=I&;Qi!y=ZskgLZfHY3;0c
z;p-x#R$)$K{HQ<R`#OGDi2V?>chc^OF*GWdSDRA(q5;sWR;OCGl5t^Y`bFO!xlfV%
z+01>6o8~#mXUCwgYiNKzeeAp`{skWKGR(20XPsKa$RUIE4s at utL*`8^9s34n=mnnu
z*bh*Tk at 1?a^~XQ*89C`;+RFj$#nG?{F?-o~r*mYyZs(IaZ~YN<?ie0J_Hf9$>B#%G
zH*-4HqwQ8XFg_o-RzXHxz^nQ2pI7s}<Ro`{?$dT#?$d%n<cfFfzXHlezDev1Uyg>1
z5JvEX3)Rq*rw^91GpyHuM>vG{keh;$bD#E{LgY+g(DJc}=Np>w;&fHes?L7P3ky@^
zC8~6nvz}9jp8r<?WPM^&ZTCL*(^lSCtrT{FQuxCZBu8U?S_V5$9Q4WOIH`-qYBMA{
z>I3*p5Zz$LY8 at p9UL)cc;DYDx=Ez~sNy~P{bqdz4W2SZ+{H5t%pc^uboD12pi(YV)
zfw;)XeLeGptfAp1tCu|E>w*7LG^yb2d!eft!4Svf3tl1hk~QEN*xK=3#h>&TAw-V>
z-tA-PJGSqMd8x5C8 at ShA*WGj}<j9PzwaANH2wU4kUXAo|^zA|LT&W35v6kkMGO<?_
zEUq;lf&YhwLpMf?O|1v*)&2`R<5+P%ZC9hbq`X*ds`lC|bqPzo(ih=flvRZ?6x#e(
zYI_UO=diu_74V<1USbEGItV%J96ufMd at Y_$2agzr{;GjbfQI}g{WbU&@#BCTS;CG%
zKTS7R&P!X=rcIaS at pYCw^v68#aENU?_^Bir?M=;g?d$a`@bw^V#9Bb~MIm$xu`giU
z!Zo`gODL1`1%)$o!QdnB|IT;(hTc3HIYEHcUa=ep<ir*KhV87x?T9f$p>*jcW6a59
z>~;9xFE56P3jjaV$7JE`eG=*F!jt9XKGttir#XzC;zP*8(d3<np8r9%ft`u{gwRI1
zB~KD!<pXOL;(i&tb|7>%pTM@%){3Yy;KMF}?msp{CkDO1#}Cue;IHVHDt5Kx?CQc(
z6(~O!-(8FEf=40GqQ7d*waho})8AkZ-sxehM!ub4$;0ni0wdGcDf|f|>t}#H5PR7&
zqGLxaj3ut}VI6l8cw+D|?>S?hz~13>jPSYFa^3A at o)O*7-OEHT2w5}4!>CDBDJ3P)
zr at alCuO`zD+kXM<9g|QmJK at P!G>LEFxBtlR)D=xmtb6}GbpdN!6Hk5rciY3i`{U<L
z1XiW^*2|D5aLvCqa-B18B4mv`avx*&JF|8GYk_B6nCD+|Tr<y;>zsKm%=5U$^S7Ai
zza#fwLtZ}byq~rb*~5P!u8Z~UxSzhQhuBrHFZlLn)hzLx3fv)^tQiDH;?fgb=AsC$
z5Epo?AJX$ys}}n7ZLyfrwqU+pJwf at 4n%|dwSH<@g9Wx0N!k0*TawYGIQbn*K2ndZn
zPjrjWeG#2h#LyT0Sy_-tyer<)pl*=$u>bE0Bsh|KBENW-k^B9bS*7T+!<l!XuQ-%I
z at GZNYSR}VQxlhWu`v+u7lwkxvGV~=5A4wW?lp2m6d3{TKl0pB-O$PlmV#tV!nRhmQ
zxCV7-0%m^`;zn*<*B+Cv4IY{$TgD0r{)65~eVv>btnw3 at 2A7YeifPC}mb-50E|X2!
z%bqYDns9;2I91%akItW_ at Hrb^DLT74JUbY?;~Sm7(1p`;CL~bulLe}qUh(RiW41vr
zluHF&6{(%-4#?oowK#QtAr&JM^zXS=E*k~D4Z78q^yFE_C+HgbC at Wv)O^2{o(zI+f
zD+D&1b-C^Y?@aGuu9u7CZ^+S)b401cRxLP&eKLQ=MtkbpGPT}Vq8>_wj@;Q(ZE!XS
z7`h$vj9OoB0KX&jY`?dD%EDHsSuX{jmn~iVWiNa!EWIedfN5inFzDsA46oPAZ*4Uw
zLfd7*?LOZ$rzI@)^+X$Y9?#R>Lae$z=(jh0Xd2O%JPVyiAHllWOa14mFJCKBgjU=k
z^JBpe_~u6<xnvR<Kg1LK(Y_tAgUxDv%n6*kalV4{_v+Y~c(q+_P^Uw;uXOGN)(m=g
z{}-S;3y>~qE at h|K8aW>j|0P?!s|vcYea3YX&G0Nd^D;+{XL!wd?)dG_=-F)r at MA6H
zW=on(Sp?JTzd)>(ZQ+ozUQ`);r`q)R- at sL98rV6w_bg%pr=p)*RLHA<btwycBXo<<
z7vg)UM`)^ugSeF=*J4g4`2MfFEA{Qh!o{^ch4*A=#ApAL?whn><7<SzMLwErhVH^Q
zKE;$1zELo8e${iTWpQ9y2j(Tt8RQIJpifo6Jg;OegN;qk!@LA`u#T}Sgoi$jIiV5P
zH$&ck8}am<q4O06?0W-a5+3>i at r%M*2A%@n^=me06h<5WOIbE>{H90m!B%sf%xhrA
z9ki0zZ<zZ%k=HfHx9Onc9plj}hVIx at wK%1xK%;zGH%3P5XO&}aA^rp_POM8-nkv|F
zqP%MwRXJ=k*^*>Bnt~otvFYQf(7gv7jwO7AFrccP^bOX_b;GluNBA$v at xlEsaM{;a
zSH0Vte+Ag7``4u1%%1+VFyO#vu>D62%~phO@`i141Fqjd+gzP$neqZ;(~T7<?{inV
zxPa4Q5t)>%d6HV}uc^fLK>A<OPS%D8{eU)4NBygeMLSwVI-5oUS!zp_L}~B)qy_85
z$o*d2SK~hCk^9z(GNm)HGs!yMxqKUNZNRRT+SJMgB{Jm%+)w(`{a0|GgZt_S_f;;{
zU7aG`&nUkh<-daRPscj{gmGyU`85>+BWR0>lM)PFjDub_slbcK;0FoZvikGMDOiJB
zR#*8eS%_%{n|8YO4%*qH)?b7EPij!Nu?*BUtPj8skTJFA`-KqM2>E|yZ<UC3^Ocr9
zUW_qWHpCL5Pp^}?b8rms<FE&*Yh4Y5uGF!wl=w(RI^Zg+%#V3Dyj9|@75N<niWzm&
zOLe9+dOv6m^e{=si^dp#4=jkU|H~H>(9dr-6MTCV at +0=g#Km6!<g84`l at dPV?PPX>
z|I1ym508b6_?GOKWGvF>G!WX|ER`tz&t1&&@9K(`0dtzw-yc7huTd at p#$C8BUna|S
z at KtZqp!;N3<XC#EWD9boV4o;?q+G<gVC}~<w5wv|nW^L%f<X}mB;Ga_{fTDgkJtu4
zFKh1pg<fVjXf5#@Bk<yn(Ar!Fjjieb%RAFX-YI+ZolYgIk9kMwdIIO at KJ|)Li9j|_
z@|!H&XlMO^<1!8lj%?#`)>RyRIIK7{#&*_EIDW)&1xJsufb}zuYdHFG^lFqYVSV*>
z#ByPEeiDm(l!!+-dwqVTBvmHNfuCx&@)cc3TYhn$+OBA=WtHO_CEF(HXQAv09HraN
z=zCG_-p$^+54UW47Fhmgqp1u|k4dZ7Z_D5)5C=zL$|+dC{T*U&$*+U$AuMQ5eyv3D
zY_&<Q+xGEVypy8a{7KgEXr^8JWCIunvhHYb^cZVdy*OKNSaDpz?|z&w<LJZjBYt1Q
z`3D?Var}heKjVBI2Px+U4jYbNa13H at SVnLKj7<$Xh&tB>VURc%c!M-sjG&WR_`MQx
z)&}a__g3EC=82j!uVAgVt6g7F!55xj0^A3L>o)AVo%;>^4d$mOgrAnvM|^q91s-36
z#|za|V(!#Ek?B~MR{DdEQf0lwuNVAhoo5j2XHnjbZ>7S17DRYyVTfS*DZ~Usp4V>p
z7RIwm#Xa!bLrx~oMNNiDnOpNsA0DghZAVP^c9OGLvvBcnFXhDY>P24So^DM7Y!X+S
zy*88eST?J7h@<O0uGV?<dfhN;61cv#S5J6_V=cv=w79LON?njp+FLkICp%6TsP)>t
zVxMpGmIr7K1=VPNWUogVwM-tw>r|jEGD*qWFK(ChNVc`^SEr9Lf7vccH7P`vAa!>9
zQwothNM#oX))a(^Fa00NzC13fs{cPVahV)S#3eF?VIs8!L>^Kz6EnqeB1A;F;jq|-
zsZT2TJQ at WvBFYs8W?_I~U{;oaQMM5`L?KHgQ+8!?*c?dB6k#Ma?e{(xtiIpZ at At>=
zkNZ03-m{;3me2knJcYm{*<SFK)4{uv`V`Zy;$IxvPHJp4HI>No2>uvYxFvnKZq9@|
z&{;c4&W_Kvq~mPA1=_Fj5yz56n>g{EpIa`_M=THNGIvRUBwTI}_HqZzeF0~aJ9PKj
z=~Co7>b0y>w;>w7?)I at BQ;CBH=tL5lvJ+ at bm0rj<Pd4OgE26gHKKPXm9#c-qOpE+0
z;a4@#yJXns at u*<Cl-k1A`snG8$lRgN3&ldg<<^^mbvSqGsckk3#m3z13HVWUQ)$M$
zRf at Dk4iEnGiuvuZb(+Z&wq<*lG|5$FWjgCHH_Kbyq at p$PCeC{Vrl;TH>gk2BN0D|x
zL*&uzG&NZcyIx-PXs_ZS2lw(}o08h&6(qjla1HJA;p5QS+KF%5FmHPVEn?7->|x|x
zP}#W{^L1)zJY;L(>(AW*&-?+yyeSWL;0ymD*|J~;(joUaKTu#66L>ZUyxC at Y1@}5l
zp&y|GW{h`Ru0f-9mv9H^4fe2q&a1tL+GW>KyX{TXm&o_k at cg3Od##U|{42@)18#Ka
za$?}{1>!1?1>~Mw2Y8swp9!>|>Eyf(b0hW%0UJo7HkIS<Sqndu2?HMwhAj^5)?-Z>
zfJ<y+gC-HL8nX`RLI0QZ?N8I=AMer#HfB#gc%RsuS+rW9QcboPpnq$oOR*0$2u;Dz
z3l1^WhS&z4kHFa|f<8<Z{M<mk^`VZ6smbe0Iy93l_FG50`2P9P-1@>bt{015Qa#j7
zOc1L%l3L?Dnbq)eu2{{;rm4k{xt at nR<j_ovPYC(@mobkOxyK-vzR<hzn!>m4;g`TY
z&9z3p2Ds+IaxH9M3ZtCyt);dIbdW;q^Xe!$aP*dPH{iy3P6_^+rX1jEU;1m>NVt<J
zlNaUO`8sT-J<3dXL77#bi_?>|PTBsNOC-;`B+o=`lymmiQ?mWf*5*J~at%|?80G92
z_Al6V=R-!2JAk>D!8U+%khZnd6Y{8ZRcF>Ep(Om&_$`pf`C<+YI{E3>x5(&Ngrk9f
z!k?!2))rY8aNw>?&!4+|1&Yp<p1RIsO#atSs!{fH?8}fZR-MFoc6#9!g<r_Fx3FKs
zPtPPi8=saZ`M0ej`A>gI@^Ab1(CpX{6DNSjlLqyh+_-)wSEXLKKlTNlbnOc!55(V(
zb>c|_8%$iKKHkA%W*L>TxV){PGk842dFdQfw*ENX(<uwcqmnR|Qq%kxXDSx9^mLta
ze9Iu;3~qENeS(r94*MGTz8`sJQqccn^5l%<Swu at l@)V5ZSps})I8QdobK>7I&Ys#?
zX|!P^oll(|nMV^-_aRR9iA5?o<mBZJy-eNZ$X{yG#;6X2C56&IL9g9Sl(7F^r~FbL
zb&%9)x*5|#=KIujDg*O3L?1@{XXxdIeBnqJAU*}YdqcihNq8Bj)=)~nkSN%YmV}q@
zqmnRxR{99$@*I_k_*A+O at g-C);%`6~JN$GEkq6oK30*7+uY$g-U&vPY;)0&kd`>ET
z8sQtE;ElL95An$vF8CSuj0tBM;QP~|;F;_}8u5`+DTY6arbCRJ9^?xe8Ue$}N2LYG
zvfbW`$lgHO*h-WBRi!{4aSb2;eya)ci2qgLKUZbr+aBgyBfbfkZ~c%<aD6WXWrLY<
z#gaO{_z%(}N%|=YW!8~0UqnBxr`(8dE6KO0c))MrnStnMi2oMQBEvI4N1xOU7!GIH
z&_SX*L}YrzzXN{FEh<u7o~MN#i*aW*;P%YWNb9IFwd$N>H}pLuk<$<#paD12hncvI
zJsEKgd~K?s?-<6dEt?&=A9R+R(6_Xdd2O#7ktK8S7Zs_ho@~GIRNl`1w#qOek~@)n
z3rJ~>w!bZ^*rMH9SN$Y2VW6n0;@L=11*@C9S5>f7i05prE7c%=4e^^1Q%QW6R#Xw7
zjhI at ZQJokt5k3ibxxaLbs>C%s-Tno42SV`9!e1!K^ZYzW`hvXVmGCtCF76%@^6z!{
z*uTis4;Yc2?<ok9QiUZR;i;XQMEY~u at aIeNxy$W*5~|K_(Q+v!uE#tyGI`re+{2|L
z?-^~lQ;D9*i%@k2_yo!8RANBh9ZcRcCERcc$=j|CpIl;K@*-579mzYn#Hc#QmN0oQ
zm&^@Uk-R@^!)KNlnY;*9XCDpM3q=#;tzq)km&^;#CV3mQ;V+dGF?mTy*@N+3z$q$u
zH9U8qCwx{(0n)-qsOsEH>LKw$m2FZPQ_uG$bHZ~-J-=zgUoI(R@*)IVZ8-1CC5Kfu
zb~lr^uH=pIOp>=r8$P4tFq0Rds*{JjgG)Z1QF26OXZtaE`wxVLPcJz_=6*4J29Y at O
z2a`~Bw}{kD;>9Zaq~W at 2OI{0ClDd1e;Vvb`OkRYl0oHI{ml6|nLDw>M*Oa^-o;463
z{$h!V$wxvmt`|#&$8 at e_es}_@>j!Q4*pf2t^1;WSkdPXz`gCkbIa7xPeR>vg^lv=r
zAL3k=-8tgf(sFJsfBzP_-5&XD*-_w>YoViiFLG4bQG|y_LQUi-z+z_HW%ue2OQJT$
zl5^nT>yQ^J3XQN%s?On`z&<eAO<ND*+vVyUuSEjwb>Nkofmd!VgshiiwN;fgWKx;O
zuZ8a0A4=H-H8-p3bd(7C%+Xu5-{F3<%F7o-iTIKRIdG{Y+;^#X7xQnqkoRc3-z<L%
z at An#F?8PGaE^U-!=`rYGn!Kv*?%au`Z$*gtR~E|$%n^>I$8%e<wb(yl*guOR*rmt0
zF7~k`RJDxi<~ohUI~Hp_xAWo};|_!&?R0L7;%S-D5fe&JGi6BVWRD3)s5-*Za)hPt
zL>vf^?38a6p-&>q($b|72kft*eT3+{jp+-CXVCJ_4ay2(<%Vda(E*aLpO*11eLI3?
z%8<~VyQuW-aJuulGH-unIIE-z^08qeJ^ftx#LB8%gF)-A#D7HGT{?K~lZmBOxh*B6
z-|=hXN|!{K`S&h!2TCG*N`*{+N$6ysMBY_Doz!wfrK2M%_)mc25BK*CjCDb&i0d+F
z{uCkPhiaJlK%C6QS~3?4O5;Z6ZgYfhX&kpUKsb}E4-$7mIp4B4Rm-#8%7h}LGBKqx
z(zncvb1 at 9-Wpd<b5<jGc-A--f=u&fT(sMW`gUZIp%X}h*_F`4SGl1#J5$BuMMRy(G
zD*0t6A<G&yy4<XaqqPC4pi$2*_lc?wINgqQ(N6w*N%{DwYVyy6v{6e-p?gcKn14RM
zbbQ3=ts>+RSuCX!B2HsY{Ynt>B|k!b4*z6A#PNVMSB#zHY5%O09dVqQcZ7V&)fOfX
zJL1?#9g<SVh-3CaQ9`0N@~tv4>05g+`u0|NausAH0hb+#T14UtaEH5SqZXAV=c*Qj
zah2thB2VzO&CbY+Zz?6>S(35h%*!gD<l$rLei3?CvD5fv4VcH+DP6ae2|~yYuir~x
z-Po23M*#26X6B~G#PRx>SGE at Pko^K8kM(!i#{XG%#xR@=Uoi4Oqm|e;d;YfGI|uj@
ziT_c54EO+%r at Fw|54vs+bWAe>wdc|Y4zJYX-hO?+$b{<$@|ci9nLd*gaO1Oh#>VCY
zW?W)QL!1>0xHMxao_9<Nyt89<h`(i$BmNwoNuGb=o!jMzIDF5t3J^Yz=LN(G96A*t
zcr>e~0T(?2xzU&LUd&GeO^5I%UiGblPW%@xkmE<5mq2&-_R6;s9qHjX_(asR*8Q<+
zz{c at bVXR&SUfZgfkm-Wl^Sx59E1<=XGd++06UG%H?>K95th?z$FRIQcQ1BpM37g#D
zKe5wi2}5N8T90k;&kH#t*trGY#H1zmPvoCY{0aQ(E27A_MZ<obzl4mQQoBN4sQprY
zTpJ;;)6P_!)sB;2RL at lW{Vb6$)JbK*x|xcDx&YbV--q*@)J4hak=CK}V$vS#>J&3j
zeyKWM at j1c>Jjws4FG0OUQLc{F`>i|q^1#Q0hs3=N{RYt1*(rcy<YN{RS|s=OfD3Fl
zs{zAko30PMfc)B~B?FU~@STAPOz1o?mI>b)7!|9BymTt$TGNS~<^zAuPs~5w7OS_$
z#p+F$y(%C-wo27IIZZ5r?Cw#|r8PxFM;ZL0S-?w6h;FuLWewzdSG`4Oj`DQYF3kUD
zg!h-Rkq<d at gc}Af#^#%vye at UU8QWzy#rAgn3EKG<PQNKN_IlUvUeisj+$>Xr*Ll#s
zS_d8t=jA~M*VpvXE=D$Oer%qpRVh!>@@4q8d%%_}AKC=G;HD%zF5KxH*5*Whl11*Q
zYnMYWJliDoT7+}qP}fq(>}xp&GA8?C&T%GO#9?T7Ti#&CPR1P-7Q&(bcV94XhXzVx
z^{_(<`%URl14m- at 7|R!?RPd>`#pWR%WlG0bgRzI6jP$1m{kZ~JqKA-KErZNOSyYap
z8{g)!E&scIG7hm3Hqq9lF7JmN2f~$BIcbCYj5Uo3M_H3&vF9KYTecw$c9LGP+sL^9
znfi5c8?7RyKWnVjn8V**gw2er&Rv1TcE(j_+_j2X2u)H+^i4B6lL_y!RVFF;tNH*L
zS at U$kaGyKX44p6fKKOz-gJjT$J$^gi8)w1Q<l7q9dndjpGa=^{mMfn)8MIODwJPZJ
z!B=imb)eDxq&Sbr6tcC1&&A{s651!`DAZMDO&Tu8+QW`|n$DWa{`jx>eD=40#eZUd
z`B(fVba_VVW7YgsUjkWA;4OZEeOfuZPd!=|e6gW$n0LCN&hMkaMM&F7(yV<p>47I+
zX0stsn)8bPhZjweQqTkY?Y*!iA{YD6VUcqCVWr&3>~+(s2`x{$j``RoF!$e)gvT#}
z at 8HBPyVL$iY1j2g8EhV^5T+x{M5sWR&~=?or;kR;yRO&&i#}2BK%ew{(M3aviH$89
zGMz~~5uQd}bHH!98CpR{3e0qs7oXt4 at C6|^rPWWQb*rlAFobH%@nNrHzSZkl(0fTm
z-SAT_uv-s7&Yyl?Lpy|Q6ho$n)-B2CR=W<hY<%AAdt^P!U#nC3n%1*m_v5ii2wPX#
zv1Zu7YGdNpLk7pFEi%;}eE$W$8M8V*7T2)TPI6p_tm-XO;%&n=tqdC_QS*X4!idcT
zUSnl8kx$5mr at z5_OW;e0;n#2ArG1k2m#&2=-Zrr$-ZtUHltX;2Ue4>cC at k<XG;o+L
z4Qy=B4s5)d^Brs(`)RFxL!%Lfy<IsRE?F})+JQBq3sA+#{U;6cPO<N^Ti^aGjRubu
zGR;rlGu|cdt9JkOzKnVQ>aTZ-dH>?C_fY12E8dSn*M8xOHrQ&-X3noSap!>t{^w%C
zGXve^O-b|<@XiQ5Nvwmut6H*U(lcZq01t1+eV!sPfL7ZKdyhqdWn0L-$>QHDmJeQ6
zB}~vN&ei*P*ugKn%@gj0-x^gqPpdSKuH06sc!QHz{Vx0ng>sbDXF%(A<K#|=vdAeR
zHG3f6GKHn3&9GgtohKx)<yCjQC(sW;x8&nn*<Ka-j{7gp_fMYxJlI@!+(F5&7*q)_
zfZt at l2>+u!ob;8E7WgKgcavW>2pF2kqA$@Ay3tBEO2rpS<YFxsHdU8EcjDofD<_k0
zvZvoFan{^iIU42HrT)e*JM*->2)vz$l{-k at -luspK~KKS%cIg&`QROhc|3mEFC%I1
zY(ZMn;HPUo`w at 47GFFxFmK*wKhyD8?&ll}-KJ=sJ9VIlU>oYxK$Q<*H^=Yu1u?lkC
z%|(5g3H8REm;J&PNMMWZ(|W)=f_?0C;NI2bF1j8;#<XBH6MvV9Z)W1_@$ZDTqQFG~
zGrR|a<W2cDW#FP9MeExk6 at e#OBN at Ae!oKs$|4dEg+rfjn8z>h?DFI__c%B_cC9q4V
zgRqDk&xX~v!3aU{YWfGo>Juv!tBpS>c$SrlmyyTp{Zk at +`s490BcIuK^Ca`)7gJZ$
zmNb%9XUIyX^GN!oA-a0HWVI3Bk#E)+D(+G~*Lc7q3i&;JU?*jvxJM~t9qy?}R&#~k
zy0Bc#ft_~ypZu}gugr&zqt`UhJ6{WsT)W-c&DQ!{&ppN~;}P2w3%!MP3dcq&LABi7
zZx+I*d1>w at b8ENlQQ)FYgGsky4ZM6RlUIf at RCY*x#hVw^Xuv-!jMdi{#pW3<^F{Uf
zdp{9t_qw;n6Iq{-6 at iOdclci0ylBV|`~$Jg61YfU25gvqrWo^jw at KclXXdrVRN}x&
z6vZby1Ty{z<>ErlHrOmxg61<QE`(2LSI+04WBrEvc9||sATvnG{((O9YS?2f7F0kE
zznQM3rVQ|~r>=s=*u67Ptc%eTnl0d$cbU3$gcl2*fsnI&q^`aHsEg?EE at JX)IIsTI
zHso>8_B`ajjkaC>kzX+|o at v`GRttvPo-neXpZ!PM`JB-sb*0ih)S#HdnKV*Y&_C*u
z4!kl_mwsd%9wT-A=kL1EzcqNiW%`)Mc`{OOvpA0$q-S#;jEw2yf7GiQcsNq8k<=@g
zGVo|*ezbqrD=y-|zbiA>*&}^y8m_B7;qSUYd*6#^6*KRWfs~PYdjt~9`?LY^NWH>;
z)LXzg^j9AXm_CX}>NWg7>II#h+k`S%`0rW6eF3lF&Pd(o|E?SJpun>q`M*I}hR1~G
zA)a15OYtnj!zXj)^J515fVl4vcjwB-3+vKZwV-jf15aE_-iK{>!X9NHvE6BpB=QE_
z;1I3lG|qRaJpz2*f<0n>)jXqOw$~EiSHV1OL!13OZkFyClXpFnFI+`<<v%2<1K{Jc
zIe2T?I^b+O6NxO5J)Foman}+4IMMkm`ZsLws8t7npMeH}da(9~bl~4{wlo8F=!UFv
z#1ENHIh`e#??_K?^!+{Xgov#T9{RSvHqTXw_$!EqjKtR=z7BCRCmRE_?Gqs5pDyk}
zJ!bHZH1L;mOrFNli)HjRj42ZQrhL!DuCF|0U18u$>A{n#`4ant(QjK%cvH~XnKIN3
z_!)jy25Vrys#hc*Jr}SSSpyStB_-Dc!31Up{r)BN`5bgqvXslgvl&h16LG)cIZpVO
zLzB20 at atUi9p5rV35VY4%g8xR?4 at qNKbzYtR&S~RoIA&7LB>2hucFSmux$hXd&JJt
zrVG%kRY0zi=+~wqlp>T6eZ&BxZ6M$%IkW$DRP1LPSoK!lP31S}!$$;mMtqqoaFq<U
z?=|SPUE}RQ-9C60;PDj`{4mruX4N`8!Ky6KGUa16==Vxn&ngOKH=>>z2EI%nu%P%b
z;v4Wi3~lQ0XwlwhHt$v2 at NBm!rw}-DEkYy0Ake0q39kitzQD5;&*vz+zVElW?<4*d
zp51tM;fcYs2hUzSByA<0_wcMh8%1~u at D%3CecV7h)*zk?nwPfS4Z5N^{W{F&DN(|K
z0xyq#$O16&*AUkX#}7XA^1xg%y736(Ab&*Wl4f*SL5KcxCS=8aho12!Nz{!d$f&yD
z`JT+D5A5zrqHT9Ppx?<|2m8dZA)zu88O~LdKwhI3z%MwX+Z#>R_o{hLr8tYBtC#T-
z_`ap$BZ7*1XZjB0oVF<sWO?QJee|OVHdQ8czOKAK&$#9ll~$R at g3T93{<ogL1~Qxe
z!!``a*-z?osUFfvKC`=Sk+t4Je>S;IA#l{HdGlngy at Cv}&@B)6(pB8=<M25AKkL5m
zkGeU-_X@^#31@<tj_mtI`K_mt;jf<OZyxT0ct0!eMJae*X|V6X;J17sgIhX6p2FX*
z!2M=;k?<QPGcqD<$Ul6;RTJ5m`XVvlGC>6?M+>n>E&zA^Oq at PZJ2|($Qrw%QeJPQl
zEqo at BSo58rQ=1_WR}q{8<JvY7ZU=l at Cy5FzAiBbm@Iwds9xA^XwlmgxpXi?~R`k~n
z>nwK`gD-qO*D%q{$R~jgsr;UWHSm^pV$+Sp`4xO^gM8&Z%aj}W^K<#yt0ev#&R!CB
z4~<sIpVzXE^R<KI{Rv-t7NK$mZ&+?AdhoJ`55G)?Z`6;d3*~!BzIGz}gzzVnPY4BE
zO4lpS0dIorlj0oj5+C%OIY+_2%g3IEP5#CI9U2W at DP(Ar- at y0g7|7D}_2q2hF+7?q
ze~lt1dzy>X_u}d%-;2D}*8IMQNPnn=ykcJvk(KlPw(EDL{rNny9)15y^icYOl&!41
zr~eFNKQS!JgErCj;^5(M?zrL5a|9o7tr;54w5fVJzPlJ7)@Zr4Y*<$uysD at T?|As|
z&O&Z$o1i4{LVLP+zaYbJ(`)fWr at a1%N<Ip(V%Kcw8i#q!ATl)m+LJ145$+}Oy_v`f
zWy-e{F*syamWtewkgWs`&~<^taaSVmOp+J#HC7vv0DFq^m&yA>oa^hv2Yjmosv+n0
z>WFPQf*T}^W%$lsjpPm^?V)Yp2t;not6<1&Nm`E)ur6#=KnFj%D}5NhApG{O&EU7+
zB>eTic<{ma*1>$6if_L#eEEg=2Dt#pzdRZKM)n0&V at ZZx1atpA_%ZkuxMvpD;vO%H
zSiiHVzX-VIK4Qn6DkJj}u=c7vB$!&#1Di7pKk*6tVV6oGUWLp&bZ`2>ua8(bTL6CC
zH4_uREFiY$`~BA6=qB=M{0qzGINrPJOr34rb1e?%ZH@}^UYFztIj*^U$aT4B12aiJ
zNA1;V<h|1yX|spr_pk at wA!)N}t~xVy_rli{X%BZi>w8HAw*!8dhwF%kd>iEV+?xp9
zv)#0?1hRX;t0v}xH!Fw!N5XXNM4V>_<c%iMz9k_ZehViSKyP2X*@G6Mz9FK=Pwr^g
zcMo&_z_)tyZ0KKCK(`vQw4jHb;s)}CfK5fsN4$j_bBPSVXn}`$7}jag`I<JnBYq=D
z`}1PNJ@}1?Hw114T<pfLLAkTdRlXNDy8`csm`}T?(61Yi16)`o+_6qOTOcR$L-tP`
zSOj+^Pkp(E+{lqcaFQu=eF6Lv3N5`=x}Dj&S9iSZx4s{C2^?6!MU#iLzzJ7V(*h(G
zzJGUHFa3RP3rm)n;L^|`qtk#3ruXcdq?SZngDeANyfGG!7N0}hSon&o#GTIfue9{~
zWXE~Yy1gBA_y?5qG3>w;gdV++-yvtEqui9BuN_ONoC~1wu=Y?*{)v`eN1a9Ow|>&w
zLy@`XSXr6!+=lnhQe~ENx_Ot*u`1{U)<gO`R at si9;g{Pm>z*YUX?DcpwYTv79`YPR
zo(qUKB2T$xEYi**-$79=eU8<*^AC|L(%UZ?Sf_SmE8Y(oJ4<3QqmFB7aXVkq6*#b}
zg&hW#ap7RMX4#?ExA#tw9t$LVc<dSXh}MT5&eh$}=Qi$L2m3W?($Zj@@hkSl>lUU%
zE}M+se!6?lx+G!Xw>OrB4$={nLUdq0E=<o$uvd^O)^5!n@(U7JjZ|aj?}2MY2I at 3@
z-Sbk_7T8y=LAjp5T{qqj9ZHI)0_k|AjH8_|p?gVLDns-cJBPLfuI>CC`h`bV%1JpQ
z^AFkYnA(!<&Bebce~8;8-ZwrhXaTQ$AX{}YXhG(~HQg%b39zR`<hvbMwbdRi;_pM@
zhlN^KRIvBzKsg0pjks%;!yZ`4_CLf%|36jyC3kxY_vRP1(xr4B(iXv2X(V&^1rOEW
zpX_mO at cEG&D^YZ`v5Xyktn&EV<I at l?ioZ5K+4W2R#+9W>-9ht3&vs0si$m|z#?Wc7
z6%{@B!@`_yVZ3Cpsw19dgq^a&pq;c4_Fu}V2lO1Ib0{;j&Jx>7`|~nO>4u;ttOX_R
zXBA|=V#EeKYRpqN^n>=ezks|Z+C8%+vB9<&YqVc<9=hHqri*Al*EIhcsy8W4nd+qV
zoQwZ<wDyQH&PfZeOl6dY_-`ES;L9;41s>T at q|=$9?!MnEUJAXOBwDGV<EU18ndhZy
zef$!3ex`gk?ED5!>`3+3=4V&wx0mxx^RfuP2YWWQO0OJyq`M=YE>w+ucC9i#S*<*(
zGjg*6s;)$<ytzudxk^4hY^&67{ar(5!S-^2_DVE(i_%90AzxPcZFl0IXpR=d!A_U%
z{O7#Xfoxvfp9-F^;h>7Il04D|wRTNZnx9c~2Y9-Uv?@K(DRcU6sB6hxdYO0Y?Ks%j
z?CkrcBAkrhx}PqOOCF!w(MuQMe<-1!niX2 at KYwMfV=I;XW9rq1^y#guVK=_;F(>-@
z$Fr$jNkYuSD^xa}(08ojrB~sH%smly(~=TbDLbci at BKAVwDVV-Qz4E*YG0u6N?L!h
z$9mW{%!Yi|=fvL9{UF#pGJ32R>+u-ys6EzWEw1k`c3|N=;e)Oa>n~~QH9qL5ppChP
zP2W9}N{K9H-2ht}ASs at Cx$x3HR=HCyx!VZ5bAJobj}l0S^{kzakhXpQ-27^QHf5mc
zs45MXd*q|9Z<XnaREmjiw0u(1&Ro!`U<1TG({L1Lkr4H2i)S`fBi at ZWMoVS#)$Pud
zwkfU(xRI`4?=0}wWV%<GFl{7EAYo_l&RJ*|Z7-?p>4q(pJ=}QGf9aw<uw9oj&``>W
zqkD1o;XG0{a1KeoLf?xy2aH8K4;2;c5YN(C_F3a{&0o(QRngx|Is119^&SX&dVWz2
zqOPEH$1+O_d|WiMvUU#Qym5BaTId5|dq1LjET*cwy}7z&JK=)_`xH9sL%QqKhs1vO
zA;H0#Ly%F5l0;}HM9Ej^EfUC5Mri*dIAD#NC-Yms<6Xb?Pp;BJLDGd|I78ic=5{vk
z%&Cgn at e*K?h}Ytrl#o at 5(7uVX21{CkF3OoHKOMGq)B>8=^Z=f$7)WJs^0#aC+hyW$
z@>JNU^Mb94OrKxl9{Y=^QtvZOiWbPZet03Mg#}-(^+rloG=TfdEo3k-%la|y{bt<D
zd~z;y-VIq%)byh15oc2sgv%;mS5X4_J%U$`u^w8oyITWY?gQ|#E!^uqPzL(7fyk*X
zQKWRwms(HGlNB{_GE#bwF52r3+&q`|bIN_B+j~7|oQ2e}c*Q7pKWpr8neGk5SGU_3
z>$=&XLwl?P4$&fh!&d*{g-pH6{+^*kwZhIbGX1u at lvB`W0DU>h`bp<3$S%DBoAb9N
z5mRzKoL6WpT|+f}=PPDW!2x9{1JKWz)A*<D)`t$tUid?S?KeTiz+?NE!NYXgVAv8x
zw+6Zieztk`)uByP1f_D!r;_V4_7;1W)hceMdZ%Mw#2lCtl|l*KKd$PII*8{$m2i9J
zaQghsNTWy6l8|Pu5=I at U9*y$aT7|{v`6^`AW(1U7zU#OC++Nget{#oD|1<3mq{UGA
zpqpzKW>eEBQ{pF^n!8`dJ?xj8 at b%o$pZokA=f!KFf*m!mPesn(2KJ|9ZQ+hmJap|l
zP!SG0qp(dnz8rUQ5&SG4*_tE<?gn|^ij%I?RPi|M$<I8dVQ)_>(l48KLp?v?l1bU@
z;<K<H_d|BPtN#@5?u)ra1wAb at 0YhN_z-9vYYIPoi+-Kc0sYHGB?M}4w^89q15xaa|
zLVxBjSMfgm7BY}j4CQWtjf&0dc$MFx&AqvsA}rC~+OrDYvL=<!*WB3JguU71z5ZB-
zj-}f^^MQ^k6xn+8<?5a`Z#CeVP~e(tgJNi6+bE1%vRWSndhaC_tB_4&Et&`%;ve79
zi at lj_t&Gna{F>C)qX;y)ui^C-$tXRQK-=I?Y4jR1{W9j~b(f7+cE~!FWMOXiROm!}
z;*xg5F#lh;dv-B<QcKPS`1~$Ly_%+8N1;VU=`7}=s16yceDXfnsojUOQHn4dK9bVU
z6#y4IfCs+X22$9`;zZ~(3FA%h&!ie(44-&eS94%zR61}14}8TA91|S1YT!d2HjW0w
z1fFs_Hl*#lQV~wKv4nefIi9g(*A$YmzS2wR%Y(l$<My(ihV4W{ykY#wc+-T#Y-M1L
zb<a5i;(B6RYBp^>416TZng*DooRqtt1|44=fd_{1irO-=?sLtXz8gjG(zWo%K+ZAZ
zXJjVPD<d|3 at c*C_5icK~zvB7Zo!&VFrptM4Ijgulv^B8%id3xe2qu1ZOgrLD?8B-?
z=ry#B(}M1GSEN6v4eZx_Ma95A%oj-_xs+A(bbU8o_FMn`Epct1v0{4P&59ZDW%_ci
zeA9Q(k()*C?!8ls`hqH<HyB*x?w9L(d-FQPLyFaX?G+IloR1#vyHN4cry2M@*H^Xq
zKP5)gvnD(n at jXSK(00~|>DfinWsYfO3)2BJ2lkY((~%bVQ`xL6zyW5lW+!CHq4PLV
zAg6^KJ?0}A;|vz(fe)r#BI(iFYd>_bi#{AT8uR7hyi!f2t<<_m#ki{muVPN1XU8i$
ziTm(sN!KK&${`)(KG(<c$vE$*iEeRUmWm>0^w;3sf^Qn;-cftxAN$TYvhM(6-9Ll>
zJxpIP2Q;|IeX at UW7Qc~|AkKHER>K}e^(cjc&YL2(7VP=)C&Bg)d1rGKb!zv~Ri93Y
zKkcf#=%{`<)A;D+TwZ9CqWaVMX}q&ig;ni7x$4v4DcQo1$3NgqV0|wjaL5N at 5$rjw
z%grRX&g{?7E at OwqLq<nJKihaEmv6A7QiL9tl52hh8~%aD*2Ix-XZ!cVwgJ}UhAzP$
zt^50qZBS9thdSUk9Kw$!{P_-?0fbk!8FU at scUlj~juSZr+-X|ifmbL(pR56GzXUv%
zY`}KTVv{7|@N=G14{)NCU5nvc`8BdG`Rl~m+yqC+u1|P|a%OC~X+5VxMk0)Vp*|b7
z4v5|CFxbI1J8DCxL9QwddbrcN-Udxb1iyKVTnlU;x=F%id0w1Z8jCY<xMY_i$Yr=y
z0X6_%nY;_3(>vR%o|Nr$McOC8xrr at s;7X9;hTOO-`~*1sL~v%%kCIruf(wSCm|R0)
zOs3)W7?qD+qQQTC_i5PxBPokA+Tk+X1k2^Xr1n(tZ?-bl^}einR$o&6KCe5F_m{Km
zRC6owVGA3qz9yH2=k!nKAj(B-0{zVj`5nwR at Zt)GNJ+%B(E`x4F;}I6EWh>Nm at XE^
zKPG<aUYg5R^^?Ay6PSrlmzUmvZe|f}o}k at YSsmx~NfqqX!Lm&@>}OBmn$e#Vuser;
zQKaVF7{*B<$8E4Q5xM(uMv44|tAY$4yjzJ~+A#ORbDC=Typ^#U*yocO((MvfA9%n8
z0wu}Qxr~twUx~F#@|F{L!pGE6>RavdHr|&(zXCp_Z9<m*o0b4clT2`TUG(LAyhFF0
ztPgS2d*9vq)LSXN9vc>z)vhWoT9XubvnlPIft|tF&;C#lY&F_zScXXwACpBDf8C)C
zKETs_<Q6HdvE5 at CpbIE=S?W{OaaODq8(4YIr#VX8qcuB2WQqIZRXal&ULNc^yDY_8
zn}RyLn7feC83IkkC@=>IubH~+bUG_#r-nHbg}LVOe#9p?{N30wW{E%r+J3HByK6JT
zOz2W2i<9B6%II2+cO`UEG7#njl-ZoIwr}e{-1UimeSI&hXlLgPjYZYvi22F`yk#If
zUC0g<!?voXp2!qsIqt`Qo7H!qzM?OwZUN@@j!iP^KE`{`-pKm3FXdo`UCa8-R^ymz
zFJleZ8XYCbbK9nMJY*|#OtVQGr7r1WHL=eNy3r}TCxez?=rEb2Xj3o9HKe*`8`41k
zyYTggETJWHMS~@1wXQaMjj-wbTKe)0KEfbT!{@7Mr86D7(Y#ux^f`EL)8V__n}$rT
zi+97%&08jSOE4=h-VB{cXZm~Sqjyt7w|?_J#k&~<{a;IlcUMEMzmz9W>|uxVl6Z2K
z$dYl^(Bm+pAY{s|H|9rLkH&{N=J)(KL(NY2epsi7?~|9YjJ#&=_&Ssel3N3Mj?O56
zd_{N2AZv$3LeJhL7xljPBRw~%nJ!+G*<<SYYL0sGqaM9-ySHJ!G?BwjTe;jNJ#qGW
znKei`#YMX)qenyCwXRe+)#tr;iM}Inre;I0<&(uzd&+w9W~djXcjt8j|6)txe^`2*
zr|1)VOZ;<D&mNj1uqTee_za7$cIQzG#BS_UthJW3TNk~zkDG0gQS0?vK%Y|f=-10;
z&DKX_jG5l9EsB-1U9u^TMRxPBciODy at x3!-(E4p`;4N40%tGE$TTgz-;H*^Gx9AC(
zV)}S-Yj<GCE^_Bk(5v4+5kATKJ!1PoAHV;mM{Gh5{PX1hcb#Sndt2+<{Ab0r3tPL3
z|0Ap7h at 0uWS?OXA{9jH`KlrRIsy*yaA!p~zzlZ;JckSn4B1 at KcYLMK-QMM!&aL0Sc
z1<4aN!P8dQEZJiu7Fhyk_?tEKYq{8{OrV?PTKL~mjM4Z@>ea3pJYmz(91(wPwlH|m
z8c2aR?eUoQgFkY;O~SfG_IhX=3p5OtD at F8|l<*DkmP;Omv#=gIUUWaLL5TH7Z&4mC
zstH+_*hf`;Af)8UXM!sN&F-g*txB%axZ-QxU4dP6=7T?04pB+Qj9_1p$Hq*tcHNW@
z4er^qODqYiPEhIag&?;EE3$cc#0I6nd36yl^QN13I{wo(ryloc>$}0%th+%^JR)dG
zs#$!kr}XPWTDWYNs0L#yY%<Vl%elcYWqzVtZ65sGL}2b!)__>}mboIWhkYy7J$5SK
z!i!e5=Np|KZW$OyI<2B4_eu|@vDAC+tS+lp^*0L4Des0&p*HKI13z{@bFgmXwWOKr
z)_s`Zeq|zP`l0odENMs5543vYf2bA6v%+0F?gk~pe4k_;)JMPis(Uog5R at r8k>%`i
zSeePvg|x+guau8Df<Ee%@^Oc`jn)%fM_zYRhW(tf<yO%y1Fzd9TQ802<#q4P<{fLw
zOc24lo)C&4sj%UEI3zH%&LRu_ol;n%V+)0Ap(kVvO5p8sY2n?a%+?oz+^yr`D at yX{
z5Kp)``%Zfdx10D#EmxZBi<a69PV>_f!`Zoz`^dg?A;tq~>#drQKtosHM^&GB#137d
zf|JgKHlNf%M(sB*%WvQB`LrANKT8`gR~X{udHDj+j6II9fM<}i5BJ1ntb;5=njnju
zcZO7fD!(yCBNn>m8k%D|4f5DdQ#x?y{8+c#PZke#8-puBM^u?w0#a|m-ijFX?4i>3
zqpZC4Jop>>XpAvav~oY%(<x^s8tJjL(CgUEdc3Q>y1Vnj<ac31h?KcY%{KHWu}=uu
z>!;lG@~-CXX;abO0-syY)0MkIy~BCxwp?$8MJ`ZVB(Rm6#?w(sUg~zasw!x}MMq`u
zq;0t>pMw>wJp7BpTc&u6+T at 9^aD^v1J+g7ekOkInLQE_VOZrJ&a20Tg?^e25B!O-(
z!{;U1o<T`Z_F}KXx4KW&RoCS1u&M-|%PH`}o$2`amN6T*G|bofE1nloGVy4cf^~c`
zx97y7KN82xf6UuIOXr=~B;Qy at NqFTQO4V=5s#!W^g6Qzoiovk;6?S{wzQHhdEY|o3
ziQ6Hk(7C0-yKJN4#8Krw@!{YK?~<#z-lZ1#iT#jaJlvBwp&&#SXl&XeuDO1K)w}V2
zz!FLxFj^lSs at rH=T^eE*dd3?b9TK#hJlc~mN-Y<%L_Mm}<x2TdBMq2GDR->c((m0J
zsGzh(a{o at tW9m$k{Kh9#i6~i_zPO0^>&cYA3BChI*P{{^vD4>gt<6sCiLV;7H^gTB
z!ecw}r&XnzGsRDPu?zP)?k}nt_iUo0etFm|5tVD*;Q3Xx3jVFaxXbztI74js-%?`R
z182!i+e20_?!Xkp^)8iwjU+x*mfVdZ%Ml7bA6q+d#~BXFSa)$BP6%!m=^ffg9^YJ-
zcNBMnj^gfS^0s!8JI*4tmXUn8w at -vrlDl<$5s8y;z|)itZ3GTM{dJ&46$2LW8gjE?
z&Mf;_PgZ8DOprBuB51;yD0l2sRyf9SCyRC5Cc9mkaMCD(T}^HlflqudF>uVk4HAEq
zL5lv3u_aBqpSYQ&T$$ff5Zu<<i8h7!)=1LW>7*^vKkSvmfEi_-Red=Jk}yvxbi#zB
zEuj6s^4%jHzR~u3fTJEyOvIW39EJXE>epeuu1n-E&&2%L;#ISX2)z6koCw(bp+sCr
z^0;PO)vl1~eng{eqt7|ZH3sfVwlsiVItlnEdxFS9_U#9#ckYnew{pl6L{r-0XkrTi
z_O>LBr)?9-znEyYcaL{grYW=*`S?b>ixD49%g48K9 at Hm<>=J8~>GV2fzd{TDJ;tjv
zx8;hPIAUcnudG%CUz*UF-(UkgnaIndeBj&n_P~HkrXmBjge#Q&v=+Wz8;KnT;8eh^
zum*&zXZkYgdGX1<g?-1)E8?pr!q<2ITEeR&{)*jQLH`5Z3mZw*E?;vKuDo`;YkmgT
zfHu#DfX;#Qv&E(z?;PChgEZfz)740O4La~AZ)<EfS-sxZ at cw%LJ at lCwgV%AKR~_7Q
zS6;6#R;EjtZ-BS1z|OW$$3eii3cyMSv920KdO<~ERDHtu#x-1w`98~RlZ=0noq~F?
zX1x!Rdc`VbI*X~p^;{Q($Hu=Xs1!wp$lx>CrqT+I^0XaVAM=&hNuOX>N;2LBWA3)!
z8}Gu*_2cn!yU_786@&T8;F_<v_5aEdV$EYbA%i^Ka-9`CqX~)R-PMv<t8A9aI1;ia
zklx0V*6QFV)rTtEa2qtlbo!L*6{Ja!1{-d*A|K2VX*WSV+%9mc=zEXRKJ=*RDBv99
z<8MzXz`A-SUgca!VSl>2!oF{CVEdyqpC7-U*`G)Dsz4Fg_#Nyc4a1VGn={jWFS@*g
zIc$QReiiuTcL?rA_c(w at i+}kG{^hF4z$IMIfu3pZN*U%KV$b{+ct(@&5tnZQPc)>8
z4+7r5j{Mi-lb<;;g4e*;;=Rj|%L#Uo_M1rCu31*t&m`-)zl^bojr|JQaYIWT!M#TC
zsFFbKfF#g(uL8QX#Y1j;bAUH}Q*;=3)dzdC5&yQR0C8Td3iWiL- at bvybC7xA5}BvB
z$y$J4-{`@~z_|e15B$)Vk@=ggXjzJ&Wre|Vk}vE?2P|x&pP{CDs+XpDs;f&q)#K!z
z>O?bDYPlwMqbt5Dvni*3;y3iFI&?y6?_KyefA9ls>an?$XI{+RpLuawgP*^0QpmI!
z{Zwh-%}4*id7#N1z`fJH{7|lUP<iL?HhLNGYSvoV7SM>~qq00N at wI4I`|~x-;l}~O
zs~`J?bb}7umzDV&vDwmhUiA^qjy1sN8dV0A(eInDYC+ic%zTFua>hL3z&?ZvY+Dse
z3en!joxhWDg+Tt?|0?ck5x!SJZuJcKhrfWX=!$sF(>5_LD<B7hvzdLs*Zk)wehvC^
z_UCK7(hlH7?H4Hx=}%7pReBYDvwZARoOT at iCn@Fw?^iA&Z6kxHmjO>7OWA$z_+Mq@
zezbO}U%Jaa%=tB(8w7XrLR(GNLY&hDwk(zd{(}SXxQiAq$k#qvM(%{0 at p8xGSX1Mv
za?(~;ir14acNh3m2kf>M{^Q;h<dCznzld3 at SR0mW@UI9ywuijmNWNhn4!Aub?>P4x
zKr46-^%R0<!G?V-3)+WoWvr!P7$yl}Q=qmbJ5YN8G>$f*Ul`|KuzwSM{|R)|u?_>Z
zKO*fB(k^A=EcGF2gI{?#-^;-IsSyP8-&xbfZ^V2xd^k4gJJF~EYd6XGk$B(SJho7I
z at O@U8Q~E4d_h at hZS;dMx$gqa|dI@}v&ySa9`s at ZSg7+Vo_o7hzPxolNcfi&Q^4<BC
zrbA)B{e1ok(Cm{gg;pm<#s9&Ip>l@&=yMaabjyUb0YAexZ;NXx1$&8*dHruttCaUZ
zZx73a)zYAJm1f*0(Ako)DiS_sMb1wRUfZte0S^%S7d#}$$EV>QsKI!a(sEX}axAO7
zkNxJqs8jz~7aMrr3slKkrEPbC$_MMs^SPV0d44(9i>7{(>%1#0Hx%~slR4TRb$xl(
zp?Y0Ui?qDwRDJpHRkSIy#pMEb!s?Uxxjbop?y3{K(p4uf^>$v*Y+GKh)W=nNZWlQP
zO}jBW=&tCZvNEJdS>dpMkz!3*NBY_mA6;8;==;EK{o<=V`rH#V>?#Hb_0juh*O`;r
z<5csaUCjaA`sjei6nxZtEB8)XyU+d#@7k@|^QE`?yrluj6nr7WKX{nZBo>BL%n*g%
z4m_dzuUMF4K%Xbl+AQ!Al~qpK2Mbv3J*OPYmFnFE+(7^Cfj|7ycJ_)!DfM{&(qDS1
z*T1vr4<6kin*$t6G%B-X%zl#Q*~F867{`lil;7wj{r9ioiCRl<zKiy6{j>d$${9)R
z9|xXz^bzmGa`<fuO~6`&uX?Nx?d5Cu*YNj=cv+z7?|n6VCOmf&{OPrzK|GX%zg;az
zW!8BZ_u`PB>Y_{0rAj*Tl7f!9lt_nP%BMfR)J8{lDCh{-rBhRoBLuzUM13~aeh_5t
zb7~EsX?-dN4-&Fp4 at TgLK|*&Lp at l_w5xu1KupyLHw-_>p#W^kTeX~(4ig6Zq?`$=2
zV%orVZ8f|S(`az_Y<Ma^Fx2zv6rQBXoN#90RM7Hw_n6-GQAUNV<9T(c=v$%9oxd-e
z_eiIVds7?mtW_QGZ0GOb%`jzxhRZ}TWfuISObaQ)%l}jUQ1_2AI7dFX?y?{9G8c)z
z1nh_SJ9+a{iOr)!Pe9K-^3j=A$dJESLF|J|H1)*Zj(ymc5qDosQ{63l`3K$cRfE at Y
zwg8`DAHez3&93TC1;63}Lr)AG at xd1e+;$`E=Clwwu at 9~jdv&Y7_o>LajBm~2K3n+*
zy at F<+eL2 at a^Gg>0VpIB^_OjrPQdmp3%ZlIVJCI%EP=S7aPtH5v>NT+6>QG at tf3gh@
zW`;gff`8CY?jA2geImyhGOCpm8ZD*STc^;zN7m%F3itN<H0OXmcU6jZo1rh2Q&Vn9
zXWa+Pe3<A_<uv1I1KbB)rJN?Bm+--LW`6czJhIjYn3J1m3wmWAbi)^p)^be+8g$(v
zwj`hmW2?w%LAlG2yTP4dANZgr{_zAM%J(^m2b3<!#NJ|{u`ku<yPP&_al9%pPmpfa
zgNBv|e;jJa!VI_DMr6=F=!0w<?1xS)0j>AXkJ^Zhs^4{>(<a(QA6%FWx$cizeXD0Y
z2VWWRACl8lPvhMEE~h#0!qp_aU#>kaiFQu?|85iVG#|Cn!Vy`TZmcs`@V7t*rr#yH
z at 1VU#kI+lExypU3`O!)7l8703kVS%AOj?Vp+;9D|3H+P&*;L$><Z87zZhRQw&vP5A
z;<i`vP419G1Ao3)4BoBMHnn%_?rO-`vcgn(gIdVhUWZ-P*-DK#Z|hKXobvuoqbiLB
znAE9+=)OY-7&c#F!#11h*&wg#-C3bKv-fCM>dvENPcGQn(9f-qBy;uOPrf1amSCR&
ze*zqk<7L5oJgz-zqd#bkl9T(YD<um3uoRZNG4~&n7jz5g9ye!_`>Q?~I)g at nN5!h3
z*M##7 at S4dco$Ah}1C7%d{lls5_(vDmqClfV9Qj|v at 4%b%IoGjg8v4I*Fq63?{@oLz
z94gOk$dwNX1ZJXR^>mN>m>MQQE;(z|8$@?=vdX8b;jwSk3?HB5h8tG!3nw18C5^fa
zy5%#r6Qf><Z8i+Vwi)hD2CoCWC1LE!8}Z)Tq)}g|6z%M378 at BmI#K=VVL6l`E#p(W
zPN2OigH9CS at P_H=r)1P?sPi?fEe*mq1eXo-1kHw5LvYtO%pkN`rf$?fq_aI5TuW at c
zP*QQPLz}4~HXk^)Om$Nd{rfw>H#PGh?>X;<M;>)qbpDofI?Cballflesw%s5Fo+MG
zFv6?2Qepi~C1K?={EXuP!g*xg&xy}Cl;RAn20!8&cc1$wT{8YCyE!V1#LI62mecV^
zb;-EG^5}W#t-bSP)vBu}=z=YQ)NS0|AN|xw=2ZNvS4+KcyIg!IrbV0*(~R at 9O&lN7
zD$b2*5DQ~2PpG0&^*B#6qy4M&-1-Do(cHAe0<R`gw(F6{)JGbJh9OrE1G7fjw<x-P
zRVjA*(Q=2{dDHm$@n;{o((>2doHv=T)_wVCt}4rItxCA!J(5nF54}0>C93TGJpN%z
z#)DVpI`I?SBdM~cK1$S at _wZF(9{50Y=upO-=O4XJo8up#tYFT|kdf%)Ck^o_>E%SK
z%rh~uXWm$!;w7aI-kj_5`x}tqeh6E!%}ee)&<S$jAEKrH`1at7C+!l4D_D#9UJ;DH
zPuTUnZFTrg)jdasv+tTUA9Rz>IWpkGq|A?2jca;mOkaBPD8QzLVgDMMOl;xwWt^9Q
zhOP7T;~HAe)*c6ae9$Hww at pytTQ%JP8>Vk`)p>!gi*wY6oTGx4VS6YW+MtIq4Ys2s
z4)_1&(Ex61sLyvjM0j-f-s?M-4Id_AoEOmBf5g-S8{ixGHs$U8 at W&p<?5{MOy`#w;
z;&>B%krRJ47}p?hL{n>RYahOc|IN?wt)6axU&7=Gde{QLCy_t5zwhCBqDKPXF0DOw
zp at Zc`_&&q;tsYZIUYzBr at Z~0d&gZXpC6RYwX)U!~?y%{MH4Qlp`Kb4X*EZMCwgWJG
zIe1TUhXz9DXxo8#xr1*ht#|gm!1z%!WmY&9@~@mNNc{L<lQ;YzPM?@4>PtGmgq;?$
zc4J>p=-x)hGD~(*9)pj`e2+}eCwC|Ar7ZXzpEAU;3&*|BX(xEYxM1)nwXF}pzfp9?
z5IPO!xp2f5V3;dlX`JV{WBk&c(mQGFUGR;&*5mAf at 1d?b&(rngds}Nvun~A4G7)+3
zL#tyeQkEx6Xz)uD@*Q9kmDmmSV*EEjPc;Pf2_4#BEbkn*q_R7n at Ej#uQqtj*#@x0W
zIyR};pTcp=!PnOQ>~?$4yeZjByrsZfoP)I2wh|xML`HPdo*wgL-FD+6o!9Xp4)iAs
zt+(s-gxA=v8~|U3oVWD}=vNu(SKop2>7bdNxRNS9z|92CUu{1eAXA}#_&2aOHeCZ=
zeNJGRbwA!Sa0iy>>i9T+U{`KmZo*)gLJl5LW at ikcOMn)$7XMo70-X`}(BZOIr6`+*
zI?^&x4*rdQ?aoKOcKEG>JsKtO1<Ywd_9)=Y%sljEolggxWoU(+NSv)x1#Jd5L91A}
z^9Au4L34iJ?gm3=OmlwcZm5gxd|tPC=j2(CGa&fjdC+crHJj}98ps^x^`)o$=}+!t
z+P83%o!FR7sdY(D(6Q5yr!JG>2leHo)H44|&d$R>J7$-Rng$wA1?XC+r#25T%iDli
zG at I%X&&Ynu!Q45B8;r!?A#30tWh+s33d%xm6!|YO`4^J>u%Ud|h3uj6twJ*Qb|KnG
zo>=8sD-c at J>&*Oy3k7}qQ~sC?eG5WY06a3)fd%`ZD&PK1^{DH7lLl}`AmFGV+$Bh>
z2|^o3)=X*@qCMcIqlkS^$j$m5-&DsnG;nH-=-*-oq63zOdx1l~k^O-(KCMEuTV~0;
zQ0iHEL63GH<37@`GgPprkM=I0y*ji9zng!-G_<d2#%#cA^M~beEr1(l%uWz3Dea*N
zoCJOPpGA at JtG$+XU2 at 3sIM$K>P>27vr|)RW6NffZALjqU5C><?IP#sGD}agc?Ges$
ztA at xiku<_1cVJ~|0SB4eHi`?qmZP0lhHYwM&2JOrcJ1mrQ1`+ at S(t&so`F8-V3nK&
zeUkGJne-ec-D#n$JI}MWE0w+PAN6?L5YA8Q9P~P3)ngs};Uq!)Ic9B`reFN4F3?Fv
z>KbnAX<dJ?6PdaSm_9wNYn;`9x*j{Jn0_1{{&(jg|2oujoeF-1+Vz0r&<tN`PdX1m
zkG$P38TX!z=4|uy at BHOk8E^izG~cV6&X?;P%=kaEasCjU)Ip5dmCP;piWlG;^j1)C
zNJH0n<;Rt<tN-6$I}VDwKatZ#wxnmaQTOQC4kcLkIVpdzueClB3>LjIS0*l0R)`LJ
zo~$q5ZoXg=v>eq^(|k;qH`3=EO1eH1<NzLMY>n^xE#(h~A5(hvz5uzi9A08mX6GUB
zdK0%hU)oP)`&1$SFVsD2xx<g*+L1h>py52FsJBGW0v{u2{}Xv at qL)BiI9Ep79FD?Y
zQZ{(Pjo=9rncH=l+P?kC(*k~0&2!4ZxxLfp)WF8hZ#+AW=)A_)Le2_nvIsB~ALqnH
zK^c{Lp(NnDg#CW9#JC{yoVynJ90?^C{UGq=NdtQF{T}4A)Vsq*^5$L;s)U2k?GnWW
zyd?j3kbO=M1)GM}Z25hZ9iZfMx>2?}=y~xo%C=bxzDg!_%@OH8lOBWr@`~NC at l5Vk
z@^4(qSY?*8@~I&u%sF+UNm8V7N(<3hu*PuTNd<Ps7Y_9M;R{DT4)5?eBfb5bcdi)z
zz2R2|-&|68IzjpfZ5H*yrXXaY#_#XTOTKWmm9^iYWrD_1%J?WyvvJQ{NyQx at XB!0R
zBWq9t+I!ZxNI|7bnZ*!L)*d~h%z`_5XCre~7vP+>$IHhU07qzXmcsuFa32L^bHWqq
z2wwNS6FJ|pzf*_L7zU1QLK~_H_>Qv}@`prTgN&D)_wmVW_)eHmW-0eETNV(!1~|0u
zkQ?l(-L)l+i at ao}_w6M%vCGgt^wXy=^$UsloYcoY#W_g(!QV5^?z|VNVEn^u+Q2z3
z)^IA|)3eeFyXym|@l+#yA~~NRJ6SErv7W;F1d_i4_RYS6|8tbna}rPvGT$7j^$6~?
zkgq(+m<*)uS4mlf^8^yiQJimKZ`Me-4}B>ox)BKb#fH9|f0^)<!)CFmEtuR9Vj*mk
z?t?AQc)*R&CSoNb9*6jT%mHlr`yL6SAtNI at y>HLvRw3jvLe~2MCW#&zhr2$^{b$I6
zsK6r#3s74WL1jESX!mJB4UB*FuqyqI%|lV7?e$}EZdA~Ied)8l+iIl4U!78m^I+CF
zC!F<RbgS^CL!H0iy^eFbTIE&4#DC(H{1v~%N%|}PBj*r_Up(#E;j6iHZ=htZtjo^C
z9}gV<EB?oT{;&9-T}y!*t=|y+Q0G-MGzPls7u&Gsh^$8Ye;r at 2q&beV++lfHGFc6l
z*NBV;Uy*VKd$Wa-ZaOmy>9dgTf^-+8W6bbj;W2b#c2~Ni(CbOk8Nicza$eczk6X!3
zGo at Po#nQY#HBl|Lu{1PzkK(aRs9W=*AkvcVbFS?xpO&^=khM%#fmS{4UEAn!?~}C#
z-rzPuo6Lkg55CN2&A`S-9M2A3%Ma!wO4!2K(UHb8)S3 at -yq*lc?&U<UaS}0Wtcc3+
zIhBC15L}OafWI>347I{~hCV`_e1P%Ndg`P#PMk{TyHqgy2zU4Rl7E(A;BDC3w9&!C
zIOK8bVO89wAu59^+jM5Q4uP43zGp8D?BB0+ID&EW8n&1xxKgPTzM^DZ?o>?eVdZ_E
zQ7M(?QDr1AFRvCF9qdB_!0q)X$XVWZbk=vu1fB5Pj0xXUGM-4OvYXvUi-mLW|Csiq
zPum-M7ryTNhJBS0xG+iRQXbgYp7WzV{`Q1Iz{uCx*}fO2H{gDHc)pLFzFqt1L!5OD
zz!T1}j#59+ZUH~TZ+xb2?)1ji$038hs_BiOFGF6DzXtSVBA*1fp71Y%X at -ZTb+e*;
zZLQkBB2ff<!4LNm#@Km~!1PYUr?8xLM`?>H65Gdrv?et31V0P^a3|pDe`CLEGox^)
zuI)RTY{5B|5&y?vg~C>UR58daVHXVlqrTtI%bivI<o=bjQ^olt#JT?-!4Z}u_ap-@
zxF(7`p!IsOOW}~^^y|6mg{gAOieLYJmi(&J4Lo6V0H2<NT5Bob4!y!wu?@b})vnT!
z^AY}k*%I`tmB<X9 at 51@k()O`$UD&TfqltZ=r{e<8OpY~_*l~`&qfG2668~`EBYu14
z7`ql at X~kH~?7sLP2ahQB)fbM-w#o%QXY&OTU(<9gcp4>S+_y`;^|*I$1_f`J)AhRY
zW8%+d*1aFj;kG;HjfYC=IY*`3B4_G3<_tbEa_`I8apGe3_I@>6>SIRV9)$f$bVmt1
zhj|&kOS%ZpVR|dUX;zkRUN_`Md~#!-EeG$8?3<_IGJJb?<lDO;!+Q$*3ABFj`r5uq
z)Zt&@K1KY?L^TutH=zxTTS4r;PuGGMr6zNN{HY9VVQhz7Lffv9a!<pr at NM_Vx7~>v
zrk*bu9I$)@4hEh#ZrMmb-b4KT5CzlEm4xrqwquz8)V71%Q3FR|*E`G|_zP&}J_M!*
zeNAGy()yU_PF*Q!wK2F_EO<=|VILxTFah=<!nm*F9w6m*0Y~YnHQ1%|j>CT~@VR<D
z(|_dQWDU9DE*QSYmJi=!<c at +bp?#JFIuUkRU|S1kwygS$Drrzf%lCyT_t9#b5qV^E
zysCv2sZ>np<YuwTsZz*6X6F6^TfDHjTLoGR^tXoV5}~d*NqE#<(s%Ta=wJt;-V>--
zM`&ln)+lJgy6v*A3=+4Ojaz0b0zB8j69t)%cza&6zrJ%SH=*rI=G~Y3qV5&sSq^wi
z`0cYuo8o&1R&Ep8b_d?9OC87u>{}4rta_bEf5vX#*>)gIP+{mspEO&@J at j7xi7n00
z_uLOU2k3fhq+*mIzIEYSKBlWKv;we8wxiIJ#S{IR9#U(OeU}e8qe#In&>~}C_j5~(
z-bISJ?5@{<4p}*6f9stM&SgiSldq1P4wyUXydvt5Dgo<eFF7x-lK-$_D029YBxe*I
ziTm)Qyzu(&nbHYoE#-+3 at Cl=leExU`&PJJM2N?@lS3cPT8zE0(KBB{!PUgZ_Io1)n
z$MDCIiS at 3w!`M+s7S+_10vp2WzAM?qoDA5zpx38RO>~jhai3F(Ci=Qfxjx0~IDA6D
zUh|a_=!O_H8sxnJKPfniKsTr&yxQS@!A|H$d2iRBnkgCS*HM-RW4})J(%&$4*V2Gz
zeNOE^-jxDc_G7?fiKsJgq|VV8r;g5|)s&G+1|23!68=TD=S9$+(uo}_gwXlCnndfo
z&JS^%Kx4!h%R0<Qiio^#yXvp^BLoif?C4qw+x*6QIcUlaKFMvtxoUqAudFGXCuz%0
zEv(zey6Z0!#n&~n`VqfhCxgBt{NW7u^$3T+5Q23)(bY8H(y-aNxA>69oPLofS*|#L
zRGHv(IJi{0Go(^l{vd&+eNaJbgDS<Hkdcw?zBs3xQsj5DE5+|}Z(R_Lz{I+Mb+ThY
z)8>>|<lg1&+43hrm2=d9r|$tK?h5kZ-CfDat9c-&QP(a(5NxOYAj&t|?u~r{TPF;R
z{_XRCLk9kLe*_XL?R;rKbHe`R?<K at 7-!}*JgE=D987F9ieQaHR_X8QN+no#<z4{9u
zdB}64-V=*vKS*S0d-hE%T2Uv8W7_<Ir4 at vTMk{}iPWj3%>iTCtYS9m at Z^+PKE#^Ps
zz;7w!La`o>s)F8>5kJz9<1iE0ty-Tc|JJxwIxNpD_%>mAeD`317oopYFlmKOk>3Gt
z2F=C?vb=!Tf?n at R+%Tp5h*xC!n*#WQmV|F5wjcfj`HGd`X~uxpo=^6^{oy!2`90Q&
z;C0#0+wP6?b52BGVhH?1?*lEhht{VI0j|ONMx8EVH96l&IdTWNq#HS84}ym04L^$2
z(+}f3uI>CrVP_TL+kA$uH&&eI>4&@iuy0q`v#_&X;d>+O+0H6O3lBaan01;2ykS1^
zuZ6lZ`*M=!<MBotqAticlXH=Zh924pUrm?;>l&q~H=*uV$T_XBu?i6PWZD at g&iC}g
zS+LIcYS;^C%VDG~2c|9XC78An(3U6DR!;IOXvY(e7uIwXbj`+iRCt*{Z>^(N)9*4c
zVHse;8o-39 at Vlpg{q%JBSCpHiAxBlW73O*axgW;B?+!bw+5p>rn(Y#tl at j!G6z=Vu
z<bMgIgieGt{tW1GDapRDlO0Fk1%Vl|)$$oQf45DJp7v<=+^Jrg4syrNr2V!`8HvB~
zBm624Ju^?%^~XHs+XKMt{m+v5Z~{Jrb8Izy&};kdCttxF__$=C-QN;*BXhrinUgVM
z1LnRi>^IEE=#lvt?b{!Ar?ZNczOq}H2>LnvPhUOdn-(^P*h>H%_70xk at QlGTn$QZ+
z|L1(qhTTB at zg#$sd4Jl*BBqT=Vk6VWFKFYrkv5(~8#n$}8`WrI(nuROQ1>r*CgFLG
zX+smnt}pKUKKW;i<ywf$Vnp~BQ@^9Q2=!~i;F~GzCPFqdw+qP{M4qKCO0?yS?^6<W
zEEU2DO!_;5T!yynhW~)`CV44S*Z7gPCNgc!#&_3|w%%saS>i&bt!Zd$D(afZ)U|}P
zh5f?C{t+>E2kck5H~59U at j`tWzBPh&XtcuK6kri;9ptRspTpyU2fkQ5>`67S)fGwh
z_#4kBVUB<81dY0Ne)g}u^RojdTBU(C^Q8S+&<8>DcFd<ztNmUgu&g#AaY=s9%}o`M
z^T`Z|qf_m#y^tHAvn1GyowS1gQ{Ht)MR~0K0E)s2*ocKhgMi$GcvXrU^?D62HrRdH
ztB7rbt01C_y at VKIp;<tM1%{=#z`hGuP!Nz}j}k>C#DcV4m9jy~Vh2$X{eJH*#CXql
zzjN*%_nhyX`^WE0eP^C|ro1!H%si7DNO+e;kq?p}OEeTFqpw2FA#|!JXw)~X#68tu
zo$Pu*hDi1R>xJQGELr^;kZlcTBK1wfP&OxR+4LdXuCl<}M9}euv-D0*mGu#Qz!w88
zKO7_cOl4ZXWu}q{U-T1i^b-ngqTb6Ad>@NC{UWTG=Fe8(E=(ToGasKob&i=VX*gjO
zR{z#VSl13+Wb7RF4bmK{P1EW@!DOd~lX#1nS at dZh-oC7#&=ZdxTiAH!+IVAH4D1iG
zV_0EZN(P5XNoe=7$>W90m3G)H7v{C$UdWmW#U41 at i87U;Jma+G8EI?YvfF+?``yX5
ziH^8CD-~o}i#yKQ49;2OqpFYZ$qPDFw0T)*^ZHsV`yl9(;kL2toDh4lQIIbfL%uNd
ztX0G at tii&e{|0)vi$>yKDJ7XS^a|OUU|eJWp|M8Li-$3S)u;1Nr&q_;nU(M10gCUj
zhADevMK8IQfb(sHeXDb6NBC}$XR*BFx!$Lc8@?SOi8%5V_C=bGTzf<B;|47)Ej{ky
z|KfyJo>+Ql2;MQ5e>>zst|+l?t7)Qa&G2~1cS%tOjPRV~n?+)L2N|D-C-*w!r}(x@
z;rt{d0^@R{VO6IO<WmQ+*N!<9H*$Dcct|AldRb(#awwcTOXcP)ZIARG9A|UowxtMf
zjNB+_$~f4~$}&CTLVg$K2Gwh6xbX)KC$%($%KkPYkt>1xG-&Dd5c%Blh_JbpS~|M5
zbg**O_Ts~=Jej?J)A&a3N6_OdN{I|+)5d<$1!3MrMkh11In{MA^2o?2?9r_1GXU=?
zb_JOj=Oe6p#BR`couxHsmq%`8ovmm66VxkvwkXsuNw$-HqZsog?;zrEEQl0mLS}SC
z1X&m4?PBfOmbF at YB3lnjAa|_V9O0vzgK%%(e37k4YBbMidUx<W<j0?UIkYmkXC3em
za at S8iPd(c0P>r>bxre8a?v+Wp?5~Z0UZQJ<4202Ix#2I^bK0Yo at 0LCw!aPofu-NIq
zt;H`2SUIIi645Tqd#$jF5678M$S|Yvz6suvG>vEDMTFv9tmtlHWW$nt$SI>EkQVnn
z-!a19 at Z^I$cATk(tm#i{db|${nMQei2ip&I;aKn3pv?`1+}kES34POtU1LGM+=ty0
zw<VA at S!qp$m95kHDo-Ou7`aDrokSF2ObeDhvQS_Sk-C0fWyt#Igzc{3voEKuxq|lw
z+uhiCM6~!-4%WrrTg2Z;wTfil;Jy~sb64q&?yl116YM(ak2z>m{d86i5D|8;)3U4{
z`t+VtNNc at r{A?c%_hz^QShsc at W$&0TXV*KXSR*|b>EgX?f!*A&dhZzTcvc^1?s)G+
ztqFa69s7}=+Yt6{(N>JNsl||QALyg)!wwh&?6qS+U(^TY;izvu)@}4NIXmY^+KRO}
z<5fkoYm53w;ju_LD}x7*Qmt?<Sj(GzTHah>>3|-%vyidr{3Epf(Cf&q{je{U(Bq%4
z_1Ermu<1mL-&(Wls~QrqYhmmNM#$Dd?D_N1PwQ<rRJ+zpWA_`^hqHI&a2NA5_Ucn1
zr^)Y~XLUbk=WdGxEL~X3Tq at 0IOf-CHcuThqut=x8#(j$YLGe37cC7hpC2$R}XZ^a5
zVxA_~t|KL^yL~0%RRXn`H|%5Aqm^}l8hE6gYxNW1F6HoaxEt8F1 at _`U7dZ{*s~S|X
zbhjNzv6{?nI3 at V5MbCaW?|E(9%$F)z$Fvd2THS!qQ}%?hkCP}2Ig(?#J^Y9aL(cV+
z`_eeUM8Qe75k!t*?<<(fuqKGdd^rJk91=RZg?NX(w~gTb$st+6H<E}`{Uvi_v3`*9
z6spn?$Pv2cMTCW(NFtoSv%0EF!*E_Iwj;|Gb8Qtd$SjxXXWo$+9J?da$2n!}oqmL=
z9ZIPM(ABP#+QH-i8rW4pDZs|J==sJNCgj1y6fgk>00zKkKtI3`7zfw_e*-1~So1)4
zkBWQ(^ac6=EFI$kOTY$j044yAz!auc3pU^W$--fgFm3j?cluRbs9#Z*-EDoFdAPHr
z;LQ4x({*bO9BKQZyYS7L?%b}OB}ZR~FI~8??q=@URrqEqFgdC<ZE8|$8k^Qn#V4Qc
zxYKo2poz`rKaW=0{hIY^V(`0Xw!wLC*W3twy`rK%|F2g&^VgRYwr}dre!H at y{^WXm
z7xvPX^n2q<^g3NhK)WmPf96W`@m8@(no`>Tq>`+9aQyM>>!<!PRdMb@$JPz%OJ59b
ze%5u!H{<(lQ>2DRJ<o~e<V}-(y?A=Rzpwc5$JSkDzONPxaeQDl;G{61E^Kw3zGY|R
zz+Z!$7AKgD9pl_SXwhcX4|Yq%zb#+wd))bP$PyL3aowCJ%>&(qHLb$r8Pk^NC5=p&
zu3lC+RPU69*I#B|&APU2zEeu@&A#bJ*1x~}(BCT7^~=4y&uP9-P{rF@?wY9j6e{ig
z_3Il0Iup6m+uFo!uXYEJzxlO~-?^@Ot1L(P?(DEW>pj#vv%|j~{g2Usht|Dtk&jCf
zOZR_$z~?Hbb%{%;cc7<U)Vc3|y3+Z=ZI8jc_){|yy4|L}Og#H?SqMi_BQePBs)#uK
z2y>U3xbcU(8HdbgS+*%1$5_6PU~Z6UFuAxBvxvD$Rw!ObeH10q<Edlgdcy}oSJr6e
z3fje0vWZzkHZ$vqhS?iytWfr#I<CL`K@`W~o2CJd)9d<9o7AE|W#Z#u<E^^}{>AF;
z2+OZJMvWc!+=25+t>b`x)zkW#-kzdwR5^awXT^URXz`2Xh{0uJN15LUbeSXlX@($b
zD?KY=lbdt0pJ;x>vPB;ISI=D%wr+t}uuI^E>={1=9HF=Fkh^W#mLc+6lecJ@|EamF
zz0WUL=X*v|Ufr+lZtW+H_bZJWl($VgZ~kKO^jh&}uP at y&e|NQPaJi;#`rWpsZ|*lf
zo~UeSnRK)Bt<|-sUDlUgKOcAXUB_2RiX#Ds(y}*@6B*m0kI8rJxp>NdS5e-YeK}`*
z4;GyFRwP9U(hf=IoFK{0$D$KvUEH(Zqi9#e{G5HkUIhokmVmzmdqvv*I|MwPqUEa!
zdaQK)h!1lnizm_t&YGAz*3o6bQ}!3{qR-wentZVNfA?puopx7T${4XPMLIC<#>F}E
zl2nU`1j(ndch9>WzQXhkONtqqSefUT-gUg+o<`YM at waj&WxmeR!$ri4BmF#Y`kOo7
zc2N=6mtFV23yv;X5}eoWd$sWCHqgP=@4td-qZ<)???#LQ+z5B6KpU^i$Bh`Qa3fZ}
zZp0QS1pd|cz5WrK+(<3Zx!H}B&eNsChUvjQ71$0eq;>vgh(`kpft^5a8vn}7|J03a
z9PUQ?4s#>s!1AGPM7Bymd<z8xH at HYrzJO$&5s<z`y7ar at pWfqdbyh%D_xSI7DInP$
z0wRYQ^j1LL!({VxUgt(Gu683OFrT>y$meTxG}&diliR>tVBb-9vi`8UHvV=I@&k?n
zJ_>j81SXq~5mO4C?B#@$@iD*Ky{yIUUOGQ^?6wGF at q$<}p=ACa?g*UQ(z#>eRb=+X
zN3q}Hem6T#>*9ZKKk4WVzev7C_|z&k&ZAf^qjTG}>D;~F_lAGVB$Ba+|KWR`TbF(l
z=xNgaBRJ55H;8$rg(Xu at miGJpH{}l~Uq&f;DY6!8>nXJsWmS=H8l$WJTyK-%p7KwA
z`w{QYacbvBA9Ls)HK}>f;Ci8~boPeJ*0s^*NjpxAq{<44nikm&uAcqc$@jG9!A15B
z!X01#zQ8T?@Pe`KC35BczS3EntH#W}w{Gu*SF56&znc5>x9i(4B`*vWXmWO5 at SHiy
z&S;deqDIP*S7ThOjvF;yf4SrG{^x%mUPUX4Eia!sw7~zCSL)zidQ8)MX{*Kmv}#X3
z_Pos>^j1qPPS!#;hJS2s736ws*d3`p^avU;52U84tXV_)Gu1$i)CgnjNaz+ccnJP~
zr6NPtl`dlc%N(ZkHopDLh*8FwrrwtfNK+BxR8`!8Znx;KcP!|0-(xrVqM&NY?;FB8
z+t2J+J}Nl#P|U+O4jyGQ7IfT;KUXtm=7f=ZtbRB<Jz?BHzm+6bHT{dY5gP|?S+(>{
zuII#)|7m`%uDtkeb!8!N=AG%0yFr7`y*h7t_(7BwD4$U(`(LPzW9Jw~so(>PKl%5E
z9dn15D at qh^f2h3BwW_53t#9RprnSXIPp!L)-fSyD*su9FR+U|NH2+e;E1OIIUi|qt
zi{7r?Uqlww#pnAJ=Rfl+IZA|&<MZ7v6+QJU&VIA)Ph%m~>S9i*H~UiR{UbQ?nk`f-
zWlE_J{s{C#*fIFq!|yqz-n)vbt172jDweY{V?l0>4CM>OHvyD-tB51VJ>uM28O{O7
z5LY9>y<5bSLSJsInOqer$nBC*tz(Y~@^FVuz4r;Pu1q4xEr<PN7mrzjGq*KcEaWwQ
zNN)x9F9_9ehvvvta<r2Wszntj#9cS4u1f-XhCzQl;wzJ=X3sK8z3(*Q$RR_BrPK#@
zqb!?v^P1Q<d17tSy3X+!VGMNTgd$vu at 1i{zC9ydi=t-$VE>Ly1vMJ4NZ>nzPDsFb5
zG16X#G)JIZyCy<zPPOdW#tFh58Af%OrNQj5DimdsfIcauew&Z8Y3XK{RlATs!;vVH
zxY;uX337!pPEJh#_S4rQJp-Iul2Mu)6c4&BD0T30<awEg^AMm1W!YP2mZJ(qx#E$(
z6Zgc7q2Na)N4|KAtD^QH!Y%M$4aPa)iV at KBi*?Ups-?q#H_wky&GXHv=E{Z0yPT&`
zO2E4nlsdACo4p}i5Ns_*{yr#g6ln0LT1ppjQ}!)2W2*0%We7uU(iYnxKSz<hN{lmw
zp;Ys|GC?lrYni(Rd6t4FCn-&<9 at T1_jkx!qXJ1TdRwZ(Blz4-Eu^ryVkWiY?2#0hb
z&Tq^ZIvVd1pgb~O%q$7$JcN7?QELB2FVq3@;h-+!1c%Y@<theYg**o5h%R~+g0EsA
zU4Xd*_e7u*>fVo&TN6N|ju0<~`#z8(%$+aBJH at LU@<sSwD5qMK!;sD)k-kdIW4dJE
z-F{x(Z{Vf>bMW9tr*mFjl%`La0RJAU<!&L{Ub&I`wo>YDHPYNgX^xsv>H%D;Riegy
z&NQmUnF|^!knWdwCoLBB9pJ#={%x*GOsP-p)TW_X83q2i@#>TkUW~g0`*!So3<=9u
zoLxvqn}E)c;ukh)#m{+lNiyV<2p)DLZ!yjTR8Y<38<0m8<bt6z=;Gx)khtcSKSbVA
zw9yE({Q&5c2nIc`Tr{d6)WK)yGx?PI!c?^L0h|obC0~-ntHXYmdanoMhxn(07n;A@
zpnk_sU at Y=c_T`{oiuJVIrFr!e^v8Jc9dAV_!z^$v*_A0zM!O22S~k`qt}mrY?}Cgg
z+Cp9(#H*`Dx>l9YWxEOIM+h&(=MbgIR6|x44L&F+O`1$7uMwavKBMYZJV#v_3h=Hd
z&LA;JTY`FFkd{PHph6puj7OhKpfrOx-0Y3xQ7^ZtR?7+C3H<U}h4Sh!=-_up8tnq6
z7VYOdch@}CL-Z4*qq<AgT|-;M_=10eAU7=mGJ{y$!HhxJe$++wi1WfjoM4POn#ytL
z*9nw*eL47#cDCUNukMP(A$<uu-kd>x$yAHQ=g0$Pu4$$;iQfts+{bDi&qd!iv?;_G
zP*?SffLVs|@B3o(gIzXh8`E)?NhW}<5nfE73~d_w8y0MR%D6c<U(mVuzQwr_{$acr
zH}ru)@2O^$#X{(xbG=;4>W;#j34zAQzX<hE=7jVhQ<S2tj%a^+NSi_ZZAE?iA&q?S
zFBSE_7k%V6O7pXblcSQO4Rlkjj*V1{2gZ+(OkUk33GV63QGS`(9n~(3yXXfs%i+e@
zx8)E^kJIsRv_<)9O5;A1YMweD^}CX0x^Q;33;$Zw6L`U^b7lE^0A&f{1S<_uM|;4x
z7^)?JMw~Lx9*Q<CGb<2=3bpM`brO9-ANMduqC97v(w4M>p2rpkpaV2liF=MJ<UM!@
z>bM?diKEmxF`%1|Hj+iPEXo3%zaw6{D^r||K5zx?mDr at E6oI!mi|OixF>(vW&l8l!
zdk&>u74FJ-Jft*!Ih^|HAjlHWf#xVmGu>hW-n0OZ^3Xn{;H?wr+>fybcd?bbp#LX?
zMqfZ2v?IYqjQwX&#x(S$EHg%xg1*y-YH9l!Z8Vw}L*aj;N{79WJ$sCJxrmcUsS6D#
zO@;&V2&XiUrBt(966PhH90}@TF8WDJ;aKj8a|vr>gsq?nZFq8!0QpfZYFF at NHvSz8
zQ4a9B27c*osKXqav?a~Fm?fwaTLW&kdpE*<M|oFxY1^_eALD|zP1?-0;8O#one_yE
z<0Yt<5FzRq|A<7`Q_y##1xy6Ncq;Y4IuzqGp)@Bkt{lBMLBZNT6;Lf%<>>oFn4_FY
zwLGfl#R+#i9slKkYi?mO#v60!MU+ylUxlN-^>`r|E7if+eYD2E!+R*og7JQEr)k<f
znSR>s<bK%|$?Q7Wj2&Bg)^i3q72@`sJK{c=ubX&PVa|R}Y{<^tbF5?W-y)dD<DL!X
zI7dd#;AB-2&XHS$bD}oNB>fId$RQw);2gV?sCV>Md_VR)prR(Re at 1o8fWy_W-%adu
z;$I-OI+3LX>xL)}bR!}SqIa~4ZOeG$OqIm00kpIpz8`Insii&9BJcX{(fP&ULkr8a
zVWwG?NhT<pN#>mxlZ;x4Sw?NjCu#R}Y2f=oz(_V7fXhI}Bv+C_EWJ9vz=%6%%Up^u
zF9koiUP`IjE{UkWOd>lY^PdJ*W_7KLENJ)s_2sLbq(L#Iq@`$bbSpFVNhD(*+j?Wx
z%eLcxiweCpxjXJI)fRepktY7e;zw~e7OUfK%zBh?Z+25?<(#%w#n>p#;mI+r(0<dJ
z?hxJ5oA>`)a{+h**$2*sR~_w_TqWa*tFEy8GFDiNjVsX}U^hy=PYee8h|4D>VLjv#
zYXlfGc0-H+V<xcB2ry=fYmES7#=qSNz#CZzQ|GfVVy0pZVF&r0KXfshg&8wX;NQgJ
z)Q5PP at K*qv0e at gLpi4tL&t^)HcPGFD{DI!|v(1f}lnPyXUGT5H{c)IWhY|C>L+4*x
z$;JhpJ at H>4ekt4L#q9jO-K#4J{UE44%Q`{th;{z-EbDmIKJ{cv!sINLCoGg$2PqL(
zg|%c0<cSG{k3Jp6)I#5+E}e)&DrgWmEA@}INjJ&Wq>s*xxZ;0VMf`I$VI2*cFq5>>
zu&J<*E at 0)S5n=w9&vt0n&n({o9{!UdV|4P+gs%l;h`ny at U4?u(@(0m+*`>Qj<zGH%
z9`Zid@?b~$<hZu%Ne%J0_?jpcn~rg+GS&j+!aoT#@uEypt15(JYCY-8vJT5sB{}6~
z9arMzD0cL+4S#*Y!QatyzIYh^+hR{^@s>o at vUYEFEpHvHVaJ7(Kl;xfZMXz9HnL*`
zqgloBVKj3#hNI|09|aHw#ImMc56m2u(#R=*K47ernwbFu0du%VDy0gkQo7S#DSh#|
zI}!N0lZ~U?i3D~BV5Yx2vGj2#=e^y@>E-T(x6+;51jfNV4)G?Ab|)h~b0<NtD at M4J
za+q7;t_L`aRD`Vy6VPGyh$aVssn2O5OreSB5KT at 4t7SB~2)qEcH_&8|nkHU=8uraF
z&jU{YP904?2l~|`9M}VUBj5wO>LE=Wnh-}<c4G27O#*@I%{1XXMmSLZgeGn7U->*`
z9;EasfDHRsO|YRtDb>$Z#+szwIWR=7jMdMqjx&|l#Qr6<CPzQFR$|J|uY1z`XOl$J
zWO58m#_ywv1m<!HP5Q>sWH!(liTq#CBmiN8D4Lu_*jkviaPNVCZ(0?NG--l=4Zg8`
zN|S8h1?)GaG?DH{yuBadZhuCT(MZP*X^)Ggi2=&ykVun-N#Gxllz_4(e~90k$A8M~
zk2x(nF4$q6Vf<W4uA^_V`vQ2ikEC;G;$lRTeNHq<a0LJ1_rIZPCQbYeXrg!TL-@{M
z5wQaP9RG!wCRM9w!hOsq^?+v!pOn_~Nq+MOl(Y8FXyW at hc+|!x20++6nizS|L;?I?
zd|>k`zXSeT(c}bZ=Ye)hADV1khCJb)pU5Xw$$TP;=acaS=_c at rvxHB&qhPP&lYR|+
zGDOBFc5!@?dHX|I*mQTUK^hxA_WN_$N<nXcH`+b&`x20DL%aQfCT4?Z;tKdy)1;6~
z6DL>r0}0=teLyF7)3-Dkf_MS=Mgh1Y-X7#X9%1X@?#+YV0s7(Qpe&7`Spu9mCnCch
z@}WBp at mu+1J1`UcoA`wPfAZ<iJT!jZ6=#n*6o;KBGTl;kj>F2K%$Z-cb`I8ibD1`+
zo!wK~%v8k~gzLtni%eyVL9(`Qh50Btd+qtdQXj?`D0O3SCdS&ps?)E%FP(h4sWe|L
z{w?>}x=TfkJAN*FyQ;^{j at 5Zbb@6XzBE2RZB1ZJsE0jcQZ%~m;M%BCp at v%N2nTiL|
zrmP+Ef{)7dPj0mDkHYbf`pAvB?niE<`H>sr-bd~M|KtY0J_^TP*+*{7$v$#pZ|x&D
z_Srsivt?0yuB*e43Kfy}*g+>b+hb?To!(<-=N5;1{c(@4D*<ydfOFwNOD|sn5l1Iq
z)bTmTk55>rw`1=RVAE#PWXA&b8}|R#Yp&hSCqY0LFrMO*CYX&tJz(p?CkgNy_AQ^J
z!+srp#efI=O1CZ5{)d<Lq}fZ$e}nnoSZ3p6-xH1>+kTF}I=}OiSLg12@~U#^Ck-oy
z8oIAEKjFS|=UVrlZmykk>*gBut(%5cw<-#(Dz_Dk*}koiOylv1r7NFsfyDp;eBiea
z=yvB5Da>-fz>81x=AaECJc)53NpSnaT>|`D?aC1QHe)`ldH$_$(Vny4j`AAwbK2z+
zdBaijH9s`@Pae6?FMM{ef#ufggDWbcb}?%LY|L($m=ruMe3QJ9_V?o?FB*S5`%J_7
zl%Tm|LYj*f2>oZTUK1K)lq~sc{kdf>P4C?DzMdE+bZV^mdF+(oTw8%-;V+pcd)sF;
zT6*0ZJSD4M at zcCxFKx3|*Jn*_{d(8)k>@M7$m951mwtJgd3>X at C1<ehj!}_M#($Y1
z7nfb=qa0^ZBat=zwjyWgjQm@^CHdda|0SvK$~K8S<(lP&r at 8sO*qUi}q0Wof1%5OC
z>f*E07yP~du7$t$tLmB^E|P at 3SUu;nA14~*%}QG~VWQW=wA*4%tXt&zj$L~W@`|^<
z5xLL&$9zxsnIcLs&spT+Dxy4H`7=cGoo9<&-De3zUrhUA%eZyE8 at 6m+=R0og^406c
zt=+<%JZYk@{W$vx6S?E)`K(LC8eDtPOnVXS?CLIZ_HcC(%@fd~dCs(m7ErGInIab#
l_lcA6k-h!Ii4!IR-%PMKUf{cF^Xm2MruaD7uXLPX|373~Fk%1z

-- 
2.18.0



From chris.lu at mediatek.com  Thu Dec 29 01:29:59 2022
From: chris.lu at mediatek.com (chris.lu at mediatek.com)
Date: Thu, 29 Dec 2022 17:29:59 +0800
Subject: [PATCH] linux-firmware: update firmware for mediatek bluetooth chip (MT7921)
Message-ID: <20221229093000.25369-1-chris.lu@mediatek.com>

From: "Chris.Lu" <chris.lu at mediatek.com>

*** BLURB HERE ***

Chris.Lu (1):
  linux-firmware: update firmware for mediatek bluetooth chip (MT7921)

 WHENCE                                  |   2 +-
 mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin | Bin 527150 -> 527662 bytes
 2 files changed, 1 insertion(+), 1 deletion(-)

-- 
2.18.0



From wenst at chromium.org  Thu Dec 29 02:12:02 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu, 29 Dec 2022 18:12:02 +0800
Subject: [PATCH v2] arm64: dts: mediatek: mt8192: Mark scp_adsp clock as broken
Message-ID: <20221229101202.1655924-1-wenst@chromium.org>

The scp_adsp clock controller is under the SCP_ADSP power domain. This
power domain is currently not supported nor defined.

Mark the clock controller as broken for now, to avoid the system from
trying to access it, and causing the CPU or bus to stall.

Fixes: 5d2b897bc6f5 ("arm64: dts: mediatek: Add mt8192 clock controllers")
Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
---
Changes since v1:
- Changed "broken" to "fail"
- Rebased onto v6.2-rc1 plus v6.2-tmp/* from mediatek repo

 arch/arm64/boot/dts/mediatek/mt8192.dtsi | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
index dd618c563e8a..ef4fcefa2bfc 100644
--- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi
@@ -644,6 +644,8 @@ scp_adsp: clock-controller at 10720000 {
 			compatible = "mediatek,mt8192-scp_adsp";
 			reg = <0 0x10720000 0 0x1000>;
 			#clock-cells = <1>;
+			/* power domain dependency not upstreamed */
+			status = "fail";
 		};
 
 		uart0: serial at 11002000 {
-- 
2.39.0.314.g84b9a713c41-goog



From wenst at chromium.org  Thu Dec 29 02:15:54 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu, 29 Dec 2022 18:15:54 +0800
Subject: [PATCH v2 5/6] dt-bindings: arm: mediatek: Add missing
 power-domains property
In-Reply-To: <6576a435-dcc1-af80-bbe9-dd98bb0d53e8@linaro.org>
References: <20221221034407.19605-1-allen-kh.cheng@mediatek.com>
 <20221221034407.19605-6-allen-kh.cheng@mediatek.com> <6576a435-dcc1-af80-bbe9-dd98bb0d53e8@linaro.org>
Message-ID: <CAGXv+5GniKdzf2cQfmc=usR693gJDq26kvgoUYOjhPdHFTKx2w@mail.gmail.com>

On Wed, Dec 21, 2022 at 4:18 PM Krzysztof Kozlowski
<krzysztof.kozlowski at linaro.org> wrote:
>
> On 21/12/2022 04:44, Allen-KH Cheng wrote:
> > The "mediatek,mt8192-scp_adsp" binding requires a power domain to be
> > specified.
>
> That's not true. Before this patch, how does the binding require a power
> domain? Please show me the part of binding which requires it.

Maybe this should be reworded to something like the following?

<--- cut
The SCP_ADSP clock controller has a power domain dependency that was not
described properly. Add it to the binding.
<--- cut

This was discovered when I was reworking the clock drivers. The clocks
in this controller were being turned off by the clock core, which would
result in the system locking up. MediaTek said this was due to the power
domain.

Regards
ChenYu


From Deren.Wu at mediatek.com  Thu Dec 29 01:49:04 2022
From: Deren.Wu at mediatek.com (Deren Wu)
Date: Thu, 29 Dec 2022 17:49:04 +0800
Subject: [PATCH 1/2] linux-firmware: update firmware for MT7922 WiFi device
Message-ID: <009b012ad3aaf5f8179d10367d4daef8be084119.1672302474.git.deren.wu@mediatek.com>

From: Deren Wu <deren.wu at mediatek.com>

Update binary firmware for MT7922 WiFi devices

File: mediatek/WIFI_MT7922_patch_mcu_1_1_hdr.bin
Version: 20221227123154a
File: mediatek/WIFI_RAM_CODE_MT7922_1.bin
Version: 20221227123243

Signed-off-by: Deren Wu <deren.wu at mediatek.com>
---
 WHENCE                                     |   4 ++--
 mediatek/WIFI_MT7922_patch_mcu_1_1_hdr.bin | Bin 137632 -> 137632 bytes
 mediatek/WIFI_RAM_CODE_MT7922_1.bin        | Bin 823748 -> 826740 bytes
 3 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/WHENCE b/WHENCE
index f31fa30..6786787 100644
--- a/WHENCE
+++ b/WHENCE
@@ -5539,9 +5539,9 @@ Licence: Redistributable. See LICENCE.mediatek for details.
 Driver: mt7922 - MediaTek MT7922 Wireless MACs
 
 File: mediatek/WIFI_MT7922_patch_mcu_1_1_hdr.bin
-Version: 20220908203203a
+Version: 20221227123154a
 File: mediatek/WIFI_RAM_CODE_MT7922_1.bin
-Version: 20220908203253
+Version: 20221227123243
 
 Licence: Redistributable. See LICENCE.mediatek for details.
 
diff --git a/mediatek/WIFI_MT7922_patch_mcu_1_1_hdr.bin b/mediatek/WIFI_MT7922_patch_mcu_1_1_hdr.bin
index a95eb351d843b805440300ca66700e61a9807ac4..4e5535a9d77c23a9d78604687175480182822b76 100644
GIT binary patch
literal 137632
zc-oAYQ;aYSkZi}cZQHhO+qUhQZ*1GPZQHhObN^(MeY?p$4^^G6*G?+U#K6SF$i&3X
z$i&RZ%3=s5D5Ibpi4ckK_a6ZNA;L_A_ at 99Q{4an20ROxH{{{pA=s(Q|0Kx<Si2rZ;
z&jJ501pGhwf1$_?b-&b~Surd|9mHt6E`=V;`~@OnN|CFWmrrI!?vY+M*D(iOhxG-d
z1%59_#ra6C47TRh+gJpuTtv2B*^gWqmYc?~Fz-W^SfNm%G?%fll#^=rj!o!(dAr(S
zg)U+Ig<~7w5r<wtNmJZN8hJQYukPqkO8Zxcf5xy&5-$l$XM=AtV+Pyk0y at y1v7XCD
zme+lxn*Q0do!`{@*+MyJ$yk`sH>qo6r7B8IxW;E(1gEy*wYy=WnS7SY+_a<nYGTJY
zX-N-Q;+8)|pOfq9Zx*3ho2f1~I4Zz})fdhJ`iN_msP1AnipGmd;Sd4a7+iEq0JWhX
z<<<A)AH)kr9ru9<PoDLoo*RPnhPW}P-^jXVYnjWEQQ5LcMSRl!1M_*1^- at e;_n_vw
zas^uF%0y(#;+~8=RF)!{xxdFwo?rnHvx*H(xg%U`WWeD?y at E)tDCA`CyvihQUzmv7
z(aYmXy;{El?UzCr<sd?uLy?QypD|>nKk+9BtI$?^?IA!Ad0tb|j{PKGLn;|6({w1Y
zFxy!EJC<MwedsE5?TJvr4>8Hic7HTq9_ptgl&5N4g9}WPO at ztVtDQxBD(LAzlf)X=
z^H&AllEt>r3CcL|&mm#U{;}P#A08<pI~T36-LTFvf`Nw3TW>G^qX at dKH_?^J<ku<b
z;}B at w@Stj{(kQJ7T<y_LHLQyKvN`{f6Ngx*J5vfgpn{$tr0_|h5@`zTPLXJ|#rAKj
zScKP@&Z?lVCnZNo#hhl2m(D20?6)>N-6{}LFT at heRQ8dKh8%s&*(gEo`~KRlSFc>1
zy7m`g{b;Hn051tHe at TM~FKU)B19cl%mjGa;-iHi?I{FYaq+I!084#SS(mAi`&Y;#0
zxSy+hBlxq}r3S)#TTXvSI|*7LZ(gc}{7cV7eC5!+#|I#9-CA*ERmB;XVUy>2D9irs
zo1n=0WT8&Y?=nSxRcaC;*{YIa|AgU at ooO{M8`Mv665y0Q!(oP4X>Gp~5xU@>-sZh=
zln<pnV%P8cufXI8DxLJgz^CDctv<hk7SiHUK33_gM#{o3e(l!Kf=o<=Vq&Fv=C-(H
zFtxo at y07>iHpS at _w7y-auE0)5;B?4tuewuyaI<7 at X9`~BWETt~Y_Qg{&YByk<Kwb#
z7h=5-#0F-^)1JBLz at pJEisc5tzmrsnB$LN4H-?4!3>2bOE`SS^%k{;9CLc-4>`r_U
zJR$O23eAW_f)S<yovv%)J}ina3wIc at u9+-K9#%_$mUs|SKCe=tgz&St*O4bs_+1|h
z at SkP?@@G58k5OS<8vS3fwcOS*$I;xuF;JGmN!m(Q;)AF9L1K=G(T-k9JEJUTEMe{5
zeyLL|Rma>{TXq9k2D-ofceEh7_;ul|*74TdCa44iqScvKz5HfO@`%Jj7_x at kmlaoj
z)HUym0F3L~{oMxd_H~N5z>TxQ6;9i|cQ(Ij37iv5K<`yWQ(Cj!^%tWKqPXxZJ}nA_
zVyYEYR|>06l)q2z>Q)?y0xzIOVlro9Js9Qac+P#&;`R2X+h>vjKPshf05!B&yQbRv
zy+i2d)VFrAm=*G}bm<EzUTE&4P#a#R!cvId9rvd*7V1Ir1X(eXM(SQX<_q+Ci~7#~
zrErVpm^i`x=OCmw;R~>1sH;9~m0jiHTZZwU`kYP*p^li;8Bvsp1qzfevbMP+q6h`&
zx#Kk=jkOO)%fnu|?BB<s;mEV#{6Ql!u=HCpJ;+`(+NU7 at RAXMD?oJsFqI9j7S_q|k
zKZPCBB|)rrISh)t8+pn)I8nm+_s-0YwwrG<`j{4PBDHRDvP?D%KAtNXUEQ~Kk2?rZ
z91Fr_7a#14ocW||Jr#T*pW$|d0>nL!)=vapM~J^AN4(kL(5DzAMrjRudZ3&Klf~g3
zGr#7Jc1jYwKpVSydFt*m^8~hDI&Ap~ie;$?Be)zNI=-idn$@?w9<L$mY{7S7Q6>XE
zt^Vq005u|GN8UoUaC?}^TgGVL)b at tAuvvrYtcG8N4?T+Zad6NBzPc$8E7%;E=_b+X
zjC5K#_S+rIsH8ug`59fiHn2k&0Ugs6>p>W+jOU>=Ir10Wcw)4c<vPhLLN?$-R&h`u
z&?KN{^zkCEuxTHRPB80l2|prR+AW-S2}P=uJ25{D8H6FIaZF4WR!VD0Um)N|{b#tl
zy_J1HG(N2oAS_7u45bg+0_koy{iN;^bv)+gn`yU<opBZ8P@*N?I|x at F;v+N@{%NGo
zymSJ=c)}tw?ks-sw0)<gFwkPm^nuTOafRew4~{VvZ1E6=Wh23o14+t*|9ogMMnk7N
z(JwIndW4(`QUOx0>G3|h<wHXif}~%(6N$OIT&KdwN<1OVxWVg+ELrI%m`Hpz(u<pX
zY_+0ChrnI?KQ%f!Tr+|M-jIGLoZrh*li?(g>7s)#e!eJY(_*t5Ptutq-H*I$3ICS}
zqOui&l at l?2Nlza`U0YEBz=mNFTmy)^?BF=6<;V~}Q>)l-Ll7;6Msebepg5Yh!bUng
zHztUw=94wt=or=3j-X`>P at Q-=oqblJ&MFyFc{t at JO1AQemBaZdqBf%<QhcZxr7bP!
zARI(TKz!eY3HRW%^|Yn6k(3u2S;6Jpn?~u6WaMT<EEFcm#k|mwFN*i?lyhWnC%;1%
zY~+WwaFZ?MX2SciIS0KtNlb=Ya(a4T1HgMc&5T{G2uW8WUY&V_q#-q9>dwIYN~go)
zrTTO!29tBg`zB*c$_G<TxWtyU+=2BXwYEp;miV*gmHjxVOxm&JhtvCUUDUT8i_w=Z
z5%BrQdXmJNE(YE^t^>)q$VTEExULZfk1gap%1Y}*!X<mMi;6)*kJ1T0)0-7lZ@*2X
z%9-WP0*o6z1;~R^C3a$7(k!p6Cw=<`QYn1_o^=#pItI;?7_BW<e-IR*sAqp>X`OQ_
zMVPcmp0SG3dW08RMUC$#8?|{XEK5GWrQ$HJFCZw*bn~q4l8K_vs3VjCuXE>z9(7G^
z-)*r*k;Wg$Je*K#x at 8E!If$y3_)4kSf}~YLg at EZ9Rmpu2$()pScCXgjjr2<aE38}d
zBcEcE=Af=-z&0G$5to_-j-_iJ!n9OupbS;1GveT$(+UtuH|0`YNC at 8vOvo6MIdZ5!
zWeH;jE4fI8sx&Ma#S3GK4qL7&0EE-jYGP4zKiBetbs^HYq8+e>@G5xUXSA~@^YN}8
zEW|Y#{QSP?eHvYNFxm!sF;=~C!1H-;>qHp}d)4H}8uLGsu7g0ec3ES98$$ikUZ`M{
zFfnt)f{1r93Y_ at t-oC$z2P5b&AJfr4o)f_D&$qRk3#tt=I4b6+{WUkka8v(<Wc;Yi
zpc|WO?{l_M?|=DQJDqvfWOE<fn>k~<;^3Dplj={o7!PP^oFU;2z-h0<OjiPZD32|x
zg7L+p4;5p;SuiiJWw>(39VDkhq17KFvNP@|LUfNBn^{VqZQ*<dJPlS$p~-t=bt^qK
zNK+M>Q24~Y*XlJX5^<mN=62>F_4t=6G=i&xy-hQyUk)!Z%FvUy3|3!!N{5R**&H2`
zIPz&m*3MY4K{6gWYtBJ}>zdU+e~b`Jad5*ZLc^l#3Ya at _LzV_LVwFI)suTj(b-*Y5
z8;1b$X4MYA&6F3Rn8qk7Cm(AykVtmA0|J%^eW-mkA(_RN+G5kf<AfiQCWu6q%S7aa
zJM@<%c=uvne+k+9;uU!eBJ{JFNP(B`H7rE6^5Pr4K%)cNmGn}DX>S?$nDeqsKb5SC
z1ixbG9+g0uTfZ4#G2g`;Jsv6OK+RHs9n6x^`?fsLTAHbu90 at tZvuM{x$NSziinFVe
z9kBa}S;rdm#5Zxd2ea#?HR^$vkt0E;pj`>5l-x(GqH-9n=C2793B3F{O~nQ03w#%U
zVKDY&a`S`%0)=<)!kqHI;+`pyg6;cQ;T8f#Ss5u8RwmyFE99FN1zc~?o@%srhy$t~
z#>G|}G`knY=1IxgrM#h=3Qf}PpPA>^8qhY1Qj_di0RCxIqcP#qZEWjBCtK*R&@%!?
zFJ3hsv*gAA;O<==@c-P!m;~IOe1&(V`Wdmmp8+#L-=hh~#PU%bkLqqmf_8?3#G4<$
z{o+`8{VoJs0!;|4SEKWdg90v2yO<|y_Z#LjQuO1b5GWO#3Wi7%-+91<S(WqtWyyqJ
zZH^Awl68g_+lx6xR}G>)xf#r|LI;vVBmy at iL(nP0wZtek6cizIhTZVJ3bbZ{j-^H#
z$NT~IQu13mQn0Q%J9#0KsThg(Bv!0@&2$;U^(}k}JQ90_dMENB1NS^uNnQH;VW)zU
z$?)mTFu`BvCZ3$er8g}|9Ha)1I41&?K1EBp8z1T`QqCaYMNh%=XxTnG+L{h4^k(;3
zJtGtwuxk^xT0g^?q2h^uLJ77-`5rp)P9y>Gbt8c39h<!X!5;+_a??H}e1*Mjez0*f
z2haOo_L08Hq;~C?5(OZ$;+ at k1zQ6AkV2+UYTL40pS0*RKi$r*navRzfr!Xh)&~@K-
z2$~sLC9PcRqg^YgEXQj)BWcnO2TY&@ZciqHA2Xhv^ls!2sLheYWkt4O47CMhscA7t
z8VkwvKeZk957+XHLgHK4Uj(Lv<z6AfVTAgZ{#uops>ryLi<NHkpoeC;+tQCSl&B!i
z(X$jtR{#gF|F$8%8}E<VheVtHjA}V<02q3psm~gpO8IB!>~<LQjPjQUH>Xj<IV8l6
zozs=ui{lt(e%O{BMTuJygU^3*Sd;ft{9A(5K&lZ2V()#oGRqjK1Uujq10K8wK=hAp
zl4x>LBi~M}(&#E*3fGF at F{`t*+3sd!ZAzxi`f at A=>vmbb)l`~1hPBJ9a5<^`q*uP#
zAwedGU3A}MC;@@RQ~-Njn<m14)usnjHzEK at F-avO+yW~ZF71fXS<w|IFq_c6d+(fF
za>s)GBEvpVID%6&&_NB0;PvsSP|EJvE8p<^A-fMBwnxgCJ~rCSm<RgGc#l|13dR@}
zUST<p48@`5CS&3+)?7;eKsFwrn at H@WhMI!+Rd#_wsjFhZbHVh#7E`Tz@($MR{xWEp
zS}*hrh9UIG7ny+)M9!mEidzIoL at 23|$j=#3caII*odcjNp%%tBpv&oZ?t9PiS3}os
z6%Lg}UZB?GM2I3fG02f!+}XD at qkHim_Cg=&c?65?64%tI7!M)gC_#?*>f9FsgyZ=9
z7;n&P8|JPlAXIiy#wn__nzVp2c+T1kC!`InpQY`H?KuckmxZF0jmw{!0R87h6j{w{
z{7PgB;|M2L`dP_sPAmyhVX{y^Da9YELjT<;GF?1o(SfBMiQ=hKtXJJd+Fmt}L$1h-
z0z>k17&t6>ez$-4i0MU$RtZ!tqlDGu8lau6ne(Ufn-N)ehFyRGvEWEv4rJ1hS~(d@
zpY17u_zo)ljXsF%IVC|5`w2M?7~7nCzVv}V(~(jQNb-{HjGA at yxgkW)CQ{0arZDg?
zbeqxf!Na=mT@|v5syIlFBY0wtj9!EdZ_qtgSt^+e5CC*4!voU`truW#_W4%yg7eId
zGx at z1?fO%`hE*gq at xB5GT&giKal}=K4d>F-&0}{Uwvc=a4cK}(!dC0dq=gAO8j`W~
z2cr}BX>LwM at tZ2b4WY>OQ%DsKnMtd5H;4`e&Q0Rn{YQlA<I-6(1^&R_mJY;sXSG#!
z7FZi}6#y~22pO%+xBdD!4`42M!uEo3#5|MG{>?#ho`AZ;EQ9`;N3RC|`vUk!EG&30
zZN)}LoyYlvU at Nl27MUp@d!y98{k0{fKYw%I=2_8Cf^>$fesSD(q2*MT=9r`rd0a>z
zd6Y0Q8L>L(U^lpRD!zZafboM4UYwU~(+dsTtfGPw$e+1YxfQB63nrmpyY(V~rcFyA
z>PLe at 9v9x(=yX1?q)?~HN%v!`mP`s9uyB1E2XsCa5JSEgN1C7}JI!#-bM2vC6vI_<
z-`{n7n=zI%xOb0ID3 at K9y`d}RHt`_0IZh7{#==XB;TNKT4k`B?siu!~`0~48E<kmj
zs}Y*_qh2M5hAp^Juq*lKBuxIxTszNtga8Hj^w5o(Fpg0tpwi$P(1saUj(Uaqf^Mw_
zJeXI|)NVc3qg?*U#7Oo)Q8R^<_096R*MLa<vv&nj|HS7+L3>(4CyTicWq0g7Nf|9a
z_4O%PkwCKQK|sQ!vO57|so9qPP%pGw#}Ow6ytQ1o4R$Pz=wCx;1t?Rhosj6B5U8p&
z+L at HYgg-c$Zf*|#Y0`RJD`O+(;!$Pta;;fEVYWY1HuDm=nLLc!rNb9FCgM{0z*|Bc
zp}Yt1gOz8ScwgR1Q~r2S4X$*nAh~m_7ol&=(m(X at Ez*G?tow3=)u`o@&YkX^4`}gI
z=w{>mJ<t?M&AVwMLyKqu>+Bamg<l&dz1%LIKTnvt<N_3;TM;(1ibA$jQ-A at syR$U)
zadan9kB?6*o_?PQ_(<(GN;EsG6v$O~kINN}CHLygg**|XarQ^-4E$_9JY{6wzj6ob
zNch4Qor at wL4VYJDjxbc9YJBJ>rLa#IPQ=o!e(<2691&mV$OFD=PFzA8Y>VI!epma3
z{w_-Gmn#grlQVAZGp(D}KTOkFhQC9xo%=#s9W7sd>DN#deu$)c-&{zi1^upIv`k8A
z%-i^C{dluA3Qs~Si8QWCuiHF3-cK;Yhdz$^WRAh;(tkoFq5zl<K<`ywBj83g5KV(g
z5yBj9sR)BmvYPb__}RRZ8Ch*;Dha9^;TX0 at wPT*7#aTQ%BmSFK<KkS1!O_Uiziqcc
zURg2MLmPHW0vNt~!Mn_;U!qE<zwyZMsq_6LII{ZBSFpOK1l$%4;116DGlgf<<$s~Y
zb4v(|Zy<oU!H1CDtDW090UN at E=2$pqMraN`iId8=K6|1)K=dyP7;DuJbTdN7jBGBl
zitq~FdzRcURDeOZiW-&h5nnZk)@BiQ$TbPy#q4Ig*V?12evwoLVq3DXccs?^wo_!&
zw6CG9qpSdTwmrgvVlA2Wu+lw(EYpbKkCiH_y3hGHtpKUX%nsE)alSEITT1$)?$HSR
zpE<nSbDwo3*?j*(ER%f`tsU3~6ao-`)};U+i#*|kZ+SX8%(dK+voNxI136a8DFIiN
zIpj5^Jnps{Sauts{3Sv(K^ktmv4p2`K!m>!De at k?f#x$;?|Krtk&%7rXW$@>Usr`_
zP1lByz1ivvjR1Xwl(b7eq-h%zvSTicrrGTCdDb*Psqw*r^~-p5SUQZ$gpzG=+PdT;
z71n2Nm^03K8i1<I|JmoT?4W6w@&VW6 at N54D6~Neb{@G|25k!?*>$PUamc at LS46^KK
zdJ&=PlS`4^HorCoCM7qwA{Mh|V-+6_%OODa5rx}DqB)FHNs at Q6Wq$BDqxn%cx)0<>
z1Uj%tCL&gZUl5=aMJJHjq_~3za?L+S^hP!bpNmK~w_6Y&U714?hRcvZBI8f}(EE#-
z_F|sw<)P*&P;_s#<Y`3EfQ-%!t6U+Th4&XDi$P>B+QY%?u@~vscE*-%`eg0d8^Mm{
zfAv$Qa{!VDM^b3cDa^nhTvmzE0myQP-LR*mKM2la+uFc@%ar^Ajg}`^+NqudBt0^4
z&ml`Qx)cnq;Kllm$*vjo+C>qr<ZZDao}K;~B!mD7O~eHPsL=pfPJixV=FmxpT9udb
zt6oSbwc(mSx}10b49ymRok2*51Ay3T9cc^RqIDPb{>5sHVYq at -cozxK(bOO{${l_H
zEK)wHVdjWxIhDG`c_A(r556|H&B9r72L9O52UoCMwQ7a0#!)$uOfmU8W((sE?aRo$
zRY1>QpA7}?p$@WY1*&bqif0)ei+Q|x&ljlF@*30-;(z^}vQ<cB?%SkR{S7_MC<-~G
zj;revFp5(dKvYb$1j%5v+FO~hNvZlcNHYyngcnHijb(LYEHQ1YQB|7RQyGipfJyQ@
z at g@Y6d>cGwU=rgqC%UuBk){Qt?7Rn}l{Y?SDme_$+HjXTT#&rgOuA+!Co*4V<nia9
zB*f8;^(;bZ_t4UR0xph3h3L6#Eux5$?lQB|Hqllf3nixQ%Xh*1y|zR3llNl};BB&<
zG<kx|Z$~W at 7an6|<3rpMJ$G;g3h)qF8bD at RnL%|B59~VJ=|$qhA(ii-ttVnIY?bB}
zeIVbQYFfBi30w2+UBcVfUEOKNtw-v at I>V#Ep^Jzky-iASfM|V&PRBTE+l8_G=_>kz
z>Gvyv8JXKwvQH8$8 at v_a^{Q8aC6qo&RId6d^eN*`@6>x&sRLLqt`Zc6D@)4Yw#XA_
z*L=mytsU~21d{obGG_sxTeB*?yKr)Y<)$6tl1KM67rvR;VEjEVk&%<8z(V&m_b_Xw
zV&Y7ZI*X at rmZlH^f*W3aT!=k1-)F}&H_RW6*(2G0+_1yfCaVCy-84rxAHLKF5mTE2
z;E#sav4fHtZBWu>YM$rm%_PrM(mexJqV-3k*e#e7?o7^$pwuF at 1r2Ywp+9Sd9;5{%
z=u`dJdd>!37zC%nB|y3BHqTf{mdh#8WTt-zV(w|I(KPk~TIdFBeHz=FVlLzLBargs
zyV>1|PH6qw9365N(i6duyi6h_Q7oRM0p<y0-k1G7o)bB&4}G5SDi$$_DqslyBeZ^_
zf4c+ovXXWFii*+4?2HV$gszyTMCE9}EMcQSL~)boBUQ&6^(lR-U;>S#47lnE at YTII
zB?%p{oDtLh7z5IPA$fMsMn>p4+yP_7e;TJ0B&N&2E+mW}oDKSz!$t|Z2gr5SNixLp
z(nsNj?cbQPU|iHRu8}Xx9-FbeI3i=wQ=d(J=NHrcuck?>07JBbA${)-Vj1)b{9tY+
z%Y!$y*dnG3dG{iwZrJNvr=g)a1(S%A3JlrM>MQ#YcNq$5n<n!!O+~^1wsUw(4-`)a
zJQ6Y5`t|%(5KXM#>nWCD0>yK&t?KvU2LFg(mp?Yo4}S<H4oF1P4<gTrcG}Cho=NfY
zLAFCi$oY4#P17N0ltD*&_|%a`c!q8%;iw1S`5-dPM)k5Kq1e8?Fnk-9PjGP9|51Tb
ztf5S~SLB3Q9>$;F;CHDvOkZ__c4PTtTp_BJ1&Wg)jj*&DE!bJk?hllc at VyVxfF7is
ztDUpXTu;>;Ql_Vc^*G?z1mPZ>RMbOs7`@#XV23fXh8{Dj_|r`&AwkR<l|)Xkn}{UU
z-)v at PJTJRR8ZXvPr&qu~9 at GNajxWP{gbogb)Nsk!N8pJtP%maF*0$b-=9Ni4RvR-c
zMJ9Ai;x_tWUom-vm5|8zgeFsG%!CwS(>@UH6oB%deI?=Qs*j6?dl-y>cxsy*QLS1I
zmbfruRF~L at G@j?}yZ+`_5z8Mrk-T3A5g_7R^Y)M6ij<B`1}}1fEs=y6S&ALwO^3m=
zX!icVk(Y1!s6`e>dKKytp4gtMPhcXarU2;{r>)1<Y;AD$&VfRKR3o>_ZP!8OgUBEe
zKAR&OY|gqcu`3h7%kP*WQs(Fy{F_!vmv_~H4(bu&?ZdI7C!_hGGlAw4_}z1 at CWzPR
zPR}kkN~ZUnM_Oumr|*DbQBSJ*B7F_HA{m{{K*h$R8B7BSl#HeO?hEgp#3|?DZ#VYr
z0p*t|vLys)?=$XqSr%(mg*ZF3GIMZy=C%UNUD3`}`S=b7JbjRF%^dq`c%(m-^Sg9y
z!ayza`-F}h1M>=JF)O4mOE_LwFq8Xs*-2p+e^B%pL<Ihepi<V4CEFH6Lw&2277$DL
z`JqY*tx!M?1&uxrfM&*-s>TP6WY3yK>Y|F#!eX%b2w=BgE52t&V*A+}yv-b%k)S8$
zFOk)z{m}&C`Ti^!{N+&9C*WwMe3q_$JenyE2$*>ETd6w!9#Nx?LnlC9OcIfRC_YUx
z;iJ3#GHXmf#JZgvS{q5%!qwI3zDBnpYVaQ`!{1*-;4<Cj;9du4C}A5ae)dV8CEMq;
z`q16vPoczY3q|c#bI`Zamlw1lEUNuj(3G)}#0#M$vi<i%JchM_9h`g45A>1Q^iQko
zeIMD0mFk{9ruPLF&Iw+6M*%CV%5<iBN)|&ZiYJm7oCZ)0ZiFei|9d at 1@aE%Nt)jy9
z=#=#a at jdYlUqx+}`rl&G@>=9HXI`+$Y_`<t#?`AuL7OK`gmvE=ek)vhRhHOVITI3c
zLEtdKqS8&sV-=w5k&09pMsk&Z9p$jZr#tV)=%MGW&sD^M3DZ*Uo-rsp`L+bla)Vk0
z3>&8GpWbK$cb^r|xeCqHFn!HGLz@}kk)+Juh{d3w*9i_3TNt&-n|kC%#Oerw$@Vhz
z%9?y<12KTeqVpqheTZ`Xzh5p4!G{4BWxiiHAI-NOh`ub^n;w4{qhoJG4NiC%dHHfN
zTips<&4 at V?qTRnFnpt6iu%hg~zVTZ;N8S1S2}Fhp$GKppQ~4<I+W%fb7%DNReaAj<
zBC_%0g0z7~w~az6=r8&EU8yX%e=D&m(FOetU}Nia(%zlrw{n}1gjQ#@zAWkgFaf;r
z+}A1c at gf96U1$GVJ*RY_+<U3DPFl~Q#$*^Gj$G~JbnCTMzLabd=FAVNc(F2Qw#_pe
zXKTl$PL|rO0a~bZKC-eC8||J2Oelj)4}IYaeYarG<U<#<Rz7!pl*GDPDe$mGSx)MH
z3d<vA42&^@ZP&!Yd=MJTS~=w}85;xVAHK;W2A8)y_*B5j>5PWzVdMG?L>^m(*%SA7
zj#M+`cj?)j%mQ;!Va1H)mK&RWX)H(@#enGstHu}3ac61frdSYD(oneHarwUW`e00o
zx!ok0yH2C|47h+l<9mgeEmKlpv at jmK+xk1d<oz3%e`{T!oWjyL^$2X-sz+(x>q~C>
zCcG_CqGGQ+svI?rx&fQZ_4*S(k)6kDh9sWe!e2XOa5GT5b2`(01ee$#tlB^oC-Yf?
ziQd=Bm5Zr`w+__9$tAaXRY3gc6O0HG3}GUUBRNvAGyN)p=s`9YL0`FoXbqy20RtXX
z{+{Z_hK`m=Ywu*%;SuJH!JfPQ33dfdQFg-lQ050~;MEvo;JvAKP>kqgbU~UXvVlXs
zaM*TA-mPAdy;zA6HaSyAH!{9N4J7Q8s;$as><C4KxmG?x#^saN=i+$HDh*8xfA(ei
z3W)!GwTZtr=~MlR6zjjx$6!&1!K0F{(pdH>;IMNG5>U$RA$RA^*<@sNew;y}_0*58
zO9}Y)?=~=9SXO4`{}ZnFQyLP!6RlZvF5sA&M_wJrHBem&dC!y{Yll5#JB_f8>UA2j
z98<<;p?f<fh(%gcHLOyuy$YG}mSC-;h(4%bhNMd_?I4abVcSeW(a_5)<6XT_d%g^L
zn#ciy*_?(O$gd*1vzASF*Tqo2i36$HG=+74G_sb0RR+q|Uc0XK0xGa-hI5e)aG%nQ
zy~Rv(Se<Q$Tplh(J>Jc^U<;t)*4cs1TDm6B*9))c$8CA_)9RJQb+})?EEp#QO>6$0
zu?UiOQc@}bYHwMBl*;~*-cgG3YJNLGra~O at Im;=SRfQ5U)wR9iPK>H^Avs}i;iRUA
zq*kjx>(*izqu%yOJN2!Xykr+IB5=wCw}z3dp2036lt=uuZu?Fi*-GOs_OQHpBH+{%
zI at Tq8O#AuMN{T5NmhR2uxUhHQH#pbz!U$!e#5v~>fRdjsu1HpMeD;O?!Cm65{2Zo>
z1Ayan3E)o_^`8tPS=y6V#|O9hK!%^>$BMN)p<pGkATs?60Of9UKX=s0=Aym66(^jk
zpby~9 at g}hTrwPMxxNGb$-a~GOLkD_AFHAt8cm~c<Co$HMj>RS8(n|JtN=VXlksR#_
z$F+f>(CkIBV&zk$jMs#&BqBuQ#eQHb!xVqREOX3wY6c_CcS^ZfSmZ01c09PSZq!g3
z<{`fzWaMR=SP{4_-F0F+mJ=wL7b!r)98v06Pf>uS$YHj at +6rB;^|wj^b<SV^#;fMY
zN9BRU at vvCuZ1k24AE`#@PzEF(i}gaXi)|c;o~@;llvg`JE_eQQG7kv|CaDq=E77RW
zLY6ihw(}l5U5wehseW(|wbBEPXo0 at Xp;)P1>=+^Fb}EDs-pT{JobiG<EM9n8jA06e
zwHqup%v$C%EC5ZT1sn}^pgHKF-Ib?s?AqlF;+f<zv17nf76G;<CxEbK0|~!(mlcEw
z9=(IKT_wX4{RO?VQzpRAdJjJvB2AxlK#iMiVyntCbnnO;zt#r0s_w>(sz&<tA+NTk
zq#T{xqxNiU|2RoIb*FLvjn_P-%WCVDe(}W8aFOst`j;-tyDyFj52A@{5XTe^FG@!J
z3W^)}@KJ^@?>wy(Exlwj-ITUz2GH)bpo9qn0oeaWS5 at Bw`Qa{XLQ+j%BEQ<TQy%*j
zWB>Jz2DXfX;l@<1!sEVnc=ez<M)YPmWevMTY9Ib~x~SHG{_Pf+t9LK7X^WF1bl(n|
zrsYz$|9pjO^Sw8xSDaOGTin7&k&YBRW_leB523x+LMe&9A_p~p at G*DKxAZT{J at v(%
zs<)^Sv8BGtk5a@%&!RUvv7x at -s-vv7<@_57syd<lyp3qc;z+{{|M4XH3&6Khhe-)i
zk2X4ir-aLNzwg at w2LUdya1WJxzWz4OAV%0Jq>Xj(g9RGZEI;Nn!|`fOF#R#!yA9KX
zz`%6NLA$pyX00ZA;@-Y_K%%N%-jK;N>SXao(+Tb at Mi4t@ft8i-cs#b7U_+cN-k<FY
znT6<<kiXgW)tVPH9=4TiQ9B+zCjW)R$KGL4aTC$w)K%QDpf>qZYOD45q6rE2ixfe#
zqpkyK`~mqNVI5F3#YSu+KD at B=JIJ*`qoWKw40#;s^HjeB?{($16Siv^(*lUf?tRvp
z+3_HZ-y^EQrL~6ru-*0vV}pboOw<D$SuKaBs#r<UzO4k>F!{g`!b-{UvOC_)g^qnT
z)bX=A6&mEoh3G;M^t!BikZ{{N*OTQW at Et$yIsM#rL|&S2+!@1)qxnd3D={cKvtnrQ
z at b>Wz2&5TdjsB}fR&xdfhrEYWWH5`4Yz3K*?M1^<TKRO~H7BfIGgn9~nD;nKB=YO>
z_4=*HwI_}BPM9LEo}5FAB5&%)HsP<tlATJ%FC}HB*84Ig(pfjs at C%6F*i#&wx#zo!
zKvy}rp?Hq1&N3@*r-H9iGI>z1?olG)Vnf29cx0a#D$%mBo8&`#F#8?su;$&g{#LO<
zph#z6w%Oo&pk02x7@#^Q74N0z)9Eg}l6GQ(5*qSh^3pC0Tk_mOtvY^duZkTD&-45-
zD;sX at a9WYZqA0yhHrLf?8;v!pk5tX}*kZcxIm{;O(p}@uaiBq>$*1o(_qEDR5g<C@
z4|d;4FS0ONoy!H$7i`SGc>wl&?nGngKOPq%R64 at pAoDq4h1vKfEs43GJ7GW#Ov2!W
zHEk at 5-X)KI at a7w&)KKA3ZD-`Jh1O${Y1Ewbn$L}R)_^Ph`9s0<e|Y_zrEty$V`)0B
zS1jY2$G;d~4IoECQo<@%>J1`<(1^;fvi#x5FMv95$VtWu71;VpK`>L*VfexXG9#l*
zAxlqYz+g1Z{=d|67L1tH(?CIk&*Ar!<|A9{yK_F$=@qi3%2ftrZ0#FdnlUPgYpQWW
z;~Uy^3>us;<-z7RJ4n?lU6{Hhdqiu#kh}5pCp4ESip^i?&ywIIKqZI4lKbMw-^(jD
z8=$?vgCtjHtv;Fj^i^93xmamGZo2R0Kew<kh`^U|7F0T2Jr$T8#~^J(qS}S;c%8gk
zd-|W(vvNgxNH=wo-9kfNHcpmN*a_4hKa77&M-e&#A-u#nvYGj-+L266Qcy-RVt|=m
znt)p3*lqUq)wJ1acf`|soucLr#HW6ihGoS~JiXX%2cqfGTs(tcq*9^@pMv!%3j$ao
zwZ=nzDL5pGTDtBizk-8P3{aE=fYjo^N=!VKyP$f`7u*o>{N!i2*s|u)65>I4A0~=x
z;TO3TM7whyWqANN;aje#7RyQ_ia{_2I}T*Z>1I8^Nk^Oxyo(nWph9xdXmog{kY6+Q
z8d-dSm`3nB99z2G{YvxPd{EQ)e8Y!urV9zwu+lyf7_eBkIn_BRljcO4`(m1vPu&mI
zYyReRcZ!La8`*-<GuiGHnSX`xUPfI;M9^~UYufHPY&FJnW>wG##?XjU=#8T&P6D`u
zn`W1uqDPQ}UpWvTrFLu+BB=_zM~qXbw+Oz>SP3LqCbiKapu{?cAtS8cn<VcHHGk!T
z#B6u$^KCq#yf=ve0QihwmZemIB- at GK`bDWb(!n2vK3NWGO1cvvPzCqB6#T;e3A^*S
z+K21}NOPfHOK#z=h&7+jGN#DFKRsSyAL1Fp0%|Ta!?EmfnwL{4%re~v!WaLPUm)Ug
zI5f=yc(I}t;UP6 at vxsja2I@IK+vdmVQw<wJhyBF*?Ln7mWA3aXDpjS8s?f8*XBc{W
zB?t`c6rEUS(8p*CEm8B3=Mr}Ao2mnP?&CLdxKj4bm$(k|$Lm+~(p8BM5=fqvuS-Zk
zQNIThlHRGOJy!T07#vQJ;WYCeg_|Eov<y+DRP+}P{^=?;^oUg#6Zzz?MFS{0fYxPs
zkSw!%5t}|NzNZKjoOXad%+5l^FNt%)SSwYwKa-_oOSt6kr7uTX+G2TCSY#e2{g_*$
zj5O9z`PX#mLaYYBWshRW&#9$EN!244QQ!C%MJ<w+I#?L;O{+weIU#$m?tLMpY%+ at z
z%4mC0y3y&i@#Vx=WlNNkcT30+w|2hl9fwNOL>n|oFwNu;wcsC_;F%QIE#<X584=@4
zC2^H=_Hv;%`ESWN^Fqz7cn65kmeM6t<CE34U%l|Qx4{-_X1CG- at Terzsnxl~mdgB8
z>K-ZlFyqR*u(nqIMOJ8?#y|TNHE;_{oI+2w2tvOqFYIl-{j;KI2*Q>?hzox)wr19d
zApOmii?v-v{it at e=@x_CdBC(Y_pMa9jZHf92mtL4ezv at mKb8-n%~HG8auC4l1D}cL
z_GK`NeFnR2jLN#q16X#}{K9o*_fBg#ZwNIC_kElMvlS*&I#tG&Nuft!ki$V)8Es7>
zj*nWu?kn-?BTxVcC5OKngrO+7X$DP7I%<oJSSi&9<tu3}4c{O%jaUgdqDRlzO}Wk(
z+r2F#<pN_i at 4c=wRciP`X6J9pwe}!N<F8o(g7*=3!Ik3`YgTB6e-7`}foGO at 3Kp`9
z*AS)L#=Ep0iXMdily#$#ZAz7HVIw8KXeg)Kkx3-yuAD(JjMUhCKjEhBZ#*Mb#vxTn
zUx&a}ej9{FgFWY61apj-IRhM!L!V0s)A~V8>AvSW?%$1uFPiS<5{bqr0tTJiqOPkK
zeU6Tfz(vIiSHQZmri+*_XQsXJtZMD=kunP7Obpw-H`qyw8FI6<H11R`e#ox*IF(Cc
z+JI9DU$92m4n(OOaqB8 at Nf>ez1CiDO%pIgqqb(_TtAKwSQw;O8-vP5uo1&JQT_1G=
z<hkC3MG5hw(oMcqp8RwEF0DUOxFxt49P0$X&FpTh4z8JWHJF$2fmd)1Nh&?0$kgt2
zJ}+Rb`D=C^_UnXHlVpt}u^W!Oj}2)yj2L?l$Ya3J|2DB43MLE at p11B1^pSws=#TRn
z_;J#Z8PQP_GOW&wuFs~{$ewBBYF*TKr6L9Dd?1<aMVF(CTZ_={hz-W2oGhRM-pDsM
zU8>cH$HNCEd``57E+V~O6H6?lS&iMgL$9jN-G#2_&;D|Mq((yszABHn5+>Um6F#FO
zrkqBk{|PgQ&ChCP(WGC~h1x_#vp&=o3?Wmlz3xp+A92P(iMCCnV1+F><<o!b%`!05
zIY}WZSoRUS4;~$mAn*1(9=&;{yGw|_=XHW71ym at G6M*%x^1+eictLiE5}dJ<HLeiZ
zc`I>9`1mMzXN=cX+x|jt0KNR^!$ga~<nvdCm5r at +<P#dFp!&3!X_bc+TSqjk7~Fd~
zjV*_^^I`XT721BP2&-o}Gg)4~xauGC!83|=iEgt-x`PL``MEEu#)XA5z3Ds?g^hzG
zcj(Y<Rp?Ht(Q;8x<)J>%vUn{5AyC at -0oB!Le3^L0fYke8ugRd2Tg{O8WuEYCWI~j|
zQInp%q_INSb_~nF#O3*#Mlsn7>H;NDWOVduyZOhA4joTslNp<vE8z?3p{VC&PAwjf
zHHGib@{w+SqT!5GtLwT8HoI=<RhKis&xsmHG7kVDLZ&0 at Y`{{HkFD!bD4yTU9UoQ%
zdr2)Pk7#-RJ<V#nZ54DTbGHqGt at o~RK6?2k`{qnLh_bQM*3wWco4T$-DkbOfP}sx2
ztMe3es){umuEtQ?<H?ExOXpNBH at Ku`ovTm(XRd$?lO*!Ap~s0v#MTx{;K!8pBt<TY
z&wtiXd@$i_<vDl)Oz1a)I}QOt!@jNx!$-mYD+qifnUsbVx8=;VIHBu0Hr$m~+$yZT
zdhbr>?wa?;3tMPnzo<k0B5TCyCIj0=al?EiW%sPlY~kb-_W6Kwco(*y^KtcCCLp|J
z27El+Oi;MDSjY+aG}AoPU=8d=K825>Gq80HhjKxFQP0PqbIODU?lH9}g at 6SkSv%CP
z&Zn1M*IQc*E)!uQlJR4&aq)qy2q=*IbpbS9;SxZzXPAi%CPOIJL8j at 5nNA}iM|X2e
zuI_9(F*ixPt-mat)(iyV!eK{@et$)d;lyIvz~iI%ff)EpnP*+5ob8C7Naq$VPDEgJ
zRmOXWYkL6q)VT}2dNvNV7SpsHD*@U9+wc01Ikd!)3>72&n&9XjXT9VXnU^k=CO0(C
zO0#$t<K(s`IcjM$t!T|npUe4?V%-1-Sg}ROi{nWVk6=3$UM8SfPtp`>>@wsEnmhD<
zlNE0$vPn<Lb?FJYLsW_%p|mL`bR`eQ at H){T-C at mGu3=e at qlxA)-e-8>ELC>WT9+3a
zO?-AeFWBv|5U`t-&#(+J)f-;<k;_!VJF^fASCaX6DwuG(p2{T7AMW;xRk|M{#lsj=
zc;&4j5AAz~Pbl2KJ|=ZAGSB287Su32?rL>d1{m&*S=;FZH8n490f6|B1scJBrvmV|
zjnat~^GRRx_cu5rNQFf3)*(Dw3+<4bzH6AHx;YDwOMy3943fGaS%%x@>9-#d<yy?_
z%zL707<<}XN%(B{;n^OF)jcKNIV~R>HDbHR9Y~F4{!hOf`xIp1_WGApl=_M;vJOSN
z7AtSW7??{jZ<McN1s_yYo?#}&f4X}HwjkNV^t8{4byd1&nM>&N at m1O#ah`0{R(w$c
zPeWO8)nlZ~T$8GsoXt(_fenST!~6sq*R^hR4Hjm-Rj#`tS^nYk?-(zcG6g02B at Ayl
z#e`)oC=4j98+4{CEez4Jauz2|W}`?@Tv=iYyDof24ftDy!*_w^v;oDJETUxh7%U~9
zH(`!43)q2s(uD2A`x^Nmeb>^_;&uV#KF4h4fVl|+uRZ=N=Ou|V`fk^O#o@(bxJW>Y
zOLr4Zi{vNLN9P5G7GS{`7-T**z9=vwXs6Fh%V4~YLo5&iC;z}~pWQTAFU-jqN^d(i
z6?5Wg_}sW?+@!HuVP!q6j|$n+IMe-r4Xe at B5QJ-x8GK^E6G&aE;3w>sF2T>Ut^7-p
z?U&~tU|ikf&Hy~qU2;)OFP>EFv~F}g`Xw}sx8ea3;Q(;B*b>HhTQBupKTB>yka>hE
z5(*$rUZ$__X_R^R2*pmEUZ4>;0Sv!6r1Y5ni;UfScSx<!NoW&QF;4zJOx?MP!Ju%+
zZ!5SYMnIgEPxSvz5fLz(0x%n{8w$(%cf5KAU0T_)x`DK at iy&2 at eofNYRZlmGJz{{B
zbBMeDEwooZsDHd%qzi%_XZYlFBu7TJT#(ftifRyvE4q at XXJj=f(%PFV-4kd9a%tm6
zkS8x2-2P%aFCf_F=ifAPI)}3StFzv5vY+>>&pNHfbnmzL^_EeFBUjmAQ|)WRD9r2+
z0Jj19jXcx|q1|<6L<~&sJ%YaR0Q-C at R%eJ%N|vly)@HW&?lp*-;a669M)LUf=<%+F
zYy1sQvM--xCvyRxA>(0~3<b5Vd29$_e{2s7B!X{{X`1(^7705sXL;t^=)$*?Ae6W4
z8s-#WMyuKCzx?aKbj0vTlo at i^a5IUnni6<Vfvr6<l2$q|rK#hvcntYBEno_o+Wm`q
zhTkV^@NAI#kreA#abWQ at U;MF!EN*g|=3>plzLwFxXfbmGjM)B3dKv{}0|Bi8@*?AM
zDn`Vde^KBARJYTlKLr}9k4`LvUQiV!2DMwTNN}2*kuq$rT)C$@%ePPMrR_Sm;nq=n
zac{S}2nH|eRPuA at 8QY-p6Og|mWdkpt9uELmG}-b?BbBjnu+q>_hK)cUom)tmj3A$R
z80q7Ski6<knHoUjbpPgrZX;z}HXeJ)k-I0A7-TJD<TQBW7HkDv8eEK_O}`0-Tw~eb
zhX%sY7+ at U{&lT$P(JF6ZS4&r2HB^PWEX7+VcQGJfs?w3s<;Ade&(B)kMmyGgp_yi}
z#=lJK2^1vyJMDd+FXRWxI!~+pXkPlD0zwhL)DHCgpE`D6p(0-4_X+HGd%dFCs~8ce
zo}Uroas_q>Gg at sB7t`khbE at sQG8yHf%BuQG<(Yw`a5OpUwx})u9r|oYMD6q?Ul+6^
ztyBExBJ3ycQ_Z^CTb#fYty3Mt6s4uK5`iXb0mkWl`QI4A>t5gDasJu93!IhFP>7el
zH&|9$>H9VC)a#Q at qoxl4Q*RbKdhB1^%m$Q;F5MTe5hyBxtccxn%e1arbMttMs#Sd}
zc}^l*ADmyUAydVY-l!HjdYmL95BQ6hePaH2#GszL`|SI2X5Svq9HH`Z?qJ`rm@@NJ
zBvMHvK25X2EDZzh at WJ!15QL~`FG&n&s?iRHaIJ0~lP at hQBi4h9WKOV|L@{>Sg@@mT
zLnmR265IB(9 at C$Yd0^~KDG1OV3Lh-iX{%WBy?}1gj}8G_6xYy$x7l(;{kWO>Mz?av
z$8U?%DM_eL0>2<4DbD4D5oFUQ>m%gciqw`TQrz at 7(`^H#+KK_YfbU-T$PagFl%<0S
zXTl8o03xvR@)FOYc|9WwCa-UvO@(~?c_BcOKV9L8E9^b4bE2lf?XjjYp&UUqCGw{N
zxgl~PTSn&3fz5I26j1wT6`*D1fspCWyDtE>v<^}Vka2xGj^nonR<(sl^etb(BO*Al
zoZNCrdc_?;nzV7Nb`gSWm}QEUb+pTBZFrtXhg`EGjIk=mPOP9c6pFG&c%>{c&pxgU
z(VY8M8K2z4Wd1cT2&8LHYC)f)YTIR6i?iA;9)&G8Xmt%+H`%0LO_|*Y8Kg$En0BJm
z8cC0)mXgYZ=>Oyis9704wzeIN7T9awHAk4pb9$mdlyVTE5cKl&i&S>x*6mgDYZW$!
zW=8nl`Dqe07cTzvz4vlmgX~^2I=iKp0)(Mzi`!DIoxgQ3;CZD1i&lE at tgVwKy$VWG
zIod*ky^@wmnR at uUc^>DdlZwQj=AYe{;3XN!;f_`y9ld$_a4Y at v-a9azg|*8AY5DN}
z`0=w!5^Jm0zm|os=inGEv^J69waBL&`@E<vsXq=<&}TGtktK@`PZ^}V-at_uZ?Srl
zDrJbxaY1t4{R^$f!^>Pz;%X>mL|&o0d)M1kpyodQ=V!GL^Tw9IfDk at 8xT<3ofAM^j
zo=Th0{56uSi2mGU-wf3>wykHwjwT$BQ>%H%stV`zvYDbUT9M{ov`4br4E6+XaRjwo
zg-yqr)F=!tVVLh#o_n>%baQ)(OAHsIWsx5^DP%{)Td_)C39jnKg(rd#DkGdNP8-PH
ziWO96$;%}ynp~ZSOLpmBd4}r!Zh&k;W&Cazsjj0Uyq*8_fv|qC+)?)TGqR4APM+Mh
z2zhhr6;xAn{c6n7a;Q4|7+Q<Um1axo)B at FCFpKK^Qqh-cC)Qqhwnyp!({FHCQyMYo
zpUH*#m3vLj45~IKWhs9CF5gDbGFLQ?X^lmKIPcJC)gK^-Twqx5sZ8NPz`?&dn++Iu
z-w*_wR7YAny at M*tDgwd6IA#oPY^wU}oi=sLIz}`wN}$HvDO!b*Tv-DXv5Xlmri{!0
zd|wF%k6vks)OX6<)O$>1B_cJN;PEsOTenT7Hf^YKB(ser%}{-1)}AYL8p2SWzEUL;
z{@(OJErG(5JdCCFC0}chqq0cvhNWzW0Iu*LJov6kQvOBsmtbbBdY}^3uJVm%LjeD#
zHsD6F&$0H$!qU2pk)TLgbi#ZTcxHG+)udfMwSK`ln^J2Wae#lBAt>q`iUFZ=?Xs?C
z+=$`mm3sz7(oW^75#@06L4~$z583kl*iN(?l~3#ER?{=Is8jzcEg4cA|Bg3xnB^&0
zBxByR-V|N2OZGkkv#GOFGLs8^mYpzf!fe|`M?HKLtd#Zr!F!4lYk1EM5|csxcA2rH
zH*DI1qMxZBIcM+;-NtI!(ag?SS;3N(bB3K+rPz6ZbQG-nJremerZy)-A-e7fWi%O%
z6b>9|bJeY&`h!_iS-?|cDG;KWrMWOdR@|no0(%5Q0$=v~q^DaS9EV?UY!M?Dr6qMQ
z^y8DaszcU%DJPnwV<A}htFiH8oRX*!Q9Zul-lGZQT2<VOm%pAouTCVegBU6ebWobn
zv;rfYOlZHswY`10w$C3C?(=$SQ|a$bj(}*@$+8okBK4B_?~EOzBn*%d*tZ_lMS^*d
z&x}DHuQ={Dj3DXY+bih3jWV!l2hWuk8xX;2?RBaA(FI$wY61|vq60KB20QLF&{Uo&
z6X*tqCSn2%JbZSg2;Cloavg^U;88z2Rv+-yoLiuUpN2HPH+#~YHH3L?K_%Uak39j<
zCm^bp$p0ToU8x<5dul^L;Wi5N8quN!f1<GiFJ=LcPlvG`A=nW>f!FXcBiHH<*kW4j
zDu2lVd`oyM6MY#}6kVtWPkWi40IS2!k-i_?JG=Yl#KEU0(jx`=)h?U75-{#AoGEs-
zeAbry?dE0E26_m$ec){b3BL<n_!W^Ic(lO!rZj=&YK2*^j(Ptp_>VbckeK@%?`3%8
zuhAGm%a9yr6zxU6GlzcOxh)LTEOd)}!c<*(gBT_bohow6iQ-uWleM~kI8`2lY_TvE
zzUOiaN*xTivj{7{u|fL>kx0RUsgOatPXzzlO-=8Trme0w*fUb!G4s9V0FXJ)X(5_o
zG){Ln at I^XhMX4+qNes%_DCv-}25|5G_ETEoC4M6CBG=p}ttGK*h>ztWA>Jj_C<u0*
z!pm|+F<XDyJD7^f^em3#WjpsR4+}(k$EhGIn`|1y!_PW9*S^N4AROr at yz_E<Xri1m
zY*@M9Mjf3dWUbNeW^Z2b;Z&KvgG;|o|HSnd!hv0Rd>$T7)^E-JRrR?*ppeyro;5TM
zu)gP06Z%ZYyWbo#!lVV}!Va^LP;V~F_??_R{1V?>?pN4;g|B1zORFY8EbSX<r9C++
z)jzE*c*GE|P@%>LG-flUc(oPHt<$69yy=8tA at X%^$=;e=9NDs!H5O?N)1`T19z6(Y
z7$!-c*;?mROI(mAI+miS{2h8J+)}Bk4^nwQfCn<|?K!D97D<knpB1V31?5Gwf7C at h
zbU0i}EW2WDglWQn5dF@$;r{~zK>WXiqGw`-Agw4c`??-7kNd3l_|bsAXwbmNtt-8y
zB7C at c$&!w%@M5Uq at XxJO&hvfS28cwDXML11u%&84v-dV<>51#GBxg{N*b6F1`1ly$
zXsy25F~BF?QHKGzS|?EHcuM-6nPc?;S_L!WnzuN05T6RQ5&}fbL~m5SxU)!zWKGJH
zsoHQ&wrnAHv>~_dS3b2l@?>zAiSkm{7T>^$)Ow4rXO_QE2|-GCq5(D-CIy4bx<Mg<
zt=#KB0hVGpg;Owqw^Kei^ftO?094=Xm`oKtM=l(aJf5PY6jqB-wx(9b>%o?$!!ek1
z&&9V?==05XZD_zQb)*y)U(#mMpJM))e{g57-b{8{0`i&ZY+A}qC+Rp62=i5LZ2Od)
zumUr4hM!e=KS{Sx)aBNTqej06?j36c2dix_{e3P8q|>)9yLd5+>QBiQX!>QJKGY=%
zw3w}>A1NUl0{Y}<U5fx&w*q#!E%j1zjMdsvfRH+^EvHb5QMb1|z9Ek7037n^Ci at sZ
zs8WH)t6WsMoOqZ{X$kmY8%FvLtol0a6`<gDSUVZy61?A_5g*&?QCO6y&uNdfCA-Hs
zN7gSwiTrpjmtA^P_TM at kt}`$dMq;B*1o@?8o9KkD at uPPXfcZK-KA0Ave}kxog=?XD
z^0IDG*K8z<3JcY?>^w}z^QkPHs|siqPja&g_LN{eP`X$L%-P7S<>7^ngo?QhfKYNV
ziRBQHx!A&pI+h at 2TdpBS8sYTQk`R-d6HuI09Yo8db6l$p#6b at IhUmcXcAU)NS+SR@
zbNlN@?YT)TP-mPl+u&)>3-I!8n93+o6qq#Xfdq;_!rz>g?zRU&?7tVp<{6}ZA2ikZ
zMl#^`aat3tCqkn&ULx5r<vIwdACjl-ldHliV>+<I4ZJJDz$(vt%jxPd5dyKwpV=Oa
zB}+=uFXTY{um<ZHjYlMJQLv9bPlMFP`O{JTN9J0W4SW>524vQ<h7Q}T^jb?*P?e#H
z+nh0MQ)yiK&mEd%iv<{+bW(21c}J#>U0)#oA%6S)lmRg1?)%@QBGiNihVj}=8H$<)
z)Cgf!lG;t;J2i_)bom=#)3%W?Ff&3{W(>MqnbyEanSSMN>}aTmM7YfHq{OpNthJYq
zv|NhH*&v(#n1sKGL#1gSxy!CK`@3OV+S`OU;Iqn4AZ&2*fqP26$ES!^mz+@%!+Aem
zB$jg%@aQ1530|r^++`$qls86m_nfpGzYZPVYg$}Xpj?N<ghW&hts$=8wB-$xz&J>6
zVA;nNA85>yu8zEn8<ut(c0-7ZDq|@!cwm(UBy*kQIFdo08a9~5J^wt_55KOcc!q|E
z->&udj~Mx0e)w~NLG&_;%uXe(XX39FRa^uX$=m*sy#3p8#UBmCk=MqR>l^m~8m_n~
zaNrHv)-%$7Y8595$vujZ=8AB(oS9#5vn>LWtzY2N1auGgi|%@8!s=9!Ff{%GTU-v>
zov@(uEYY4`K-P*yQL;#}z>s=FzE+1bs+d!JU8l}EXt+}Zr`eRp{-EY6>t8IAoMZ%*
zi9^umwr5T95KzsNzmnNuu{yxzL5*uvA@~VNdixKVW7HtsGIbBZng;8Q$zVkVOG!XK
zz_jBQl{W!ldfV}z84noNmk31~XMS^)64$&;gPa)<?qZmpuz at YmJxSE?GoB=i`D at vJ
z7pA6`20FT;pp3=auP`5O2}rKfYsagyi|4o=sl8-;@{J14b6Wa9lV05u94mh{6Mof2
zd%N!;q_1m1OaFTVe)&MH_5z_^_{}UmmP+KSl<B=?`{r(6OybkX2YvvMR$USdkrv;&
zr~B=SV|;naByNf-grY?Tn#_DspCkW&@(PSAQo6&4f^e#jx$bgbsZ at 8!zp~hs;E-l@
z&P(K8KnZP<q<&)xXg(|+w5bNJixg0}bx{{W)y*xmRh(|wgCX5gS$nUfrMZd>LjyO>
z_2a$4WD>es`T!Z;j(^Px4s!Ti6~zbGNlteQ&vXLKU at lDjy=R?dL?BAUj!dlywR|K<
zkx+*UW^?T22p?Hx!&Uf!*dOA#n#fNV);ei9U6qr$NI+MnfTU%Flsfatk1tz4iWV0;
zLgD-`6e}jB`7_J3sA at U~s89_KV15_6x<q#Wav0JJ at YDC8YIzmN*5_GU?qo=dZEIy~
z4Z3K;tw)S$T%|SsLe_de=xcX+`M9QxG~*8BJ%iF at T-0pyWq2ZRzpVPOxISfco|J++
zD(!9^+Tkt+VFv0hFbgH?>!caer%-e~7vrzG>bHbl7*L6mwu<E~btXX8fFInxVZ$_E
zvA31YK41L^6RkYS`#e4G%gLicydxRTbR<){wkDKF={a-n7!Ep_dUf1S2fU+PHOifa
zq3^VnW?e&wl>)_HWItg>gZrNt-48mCOiKF#;9&aEM_gkmpcnc;6IL98HKge3v#Gq9
z7M~ZKor!sVsC=<g at 9@0`kd!w5g%1We6-AZszqd1r`Vlk*n_wt>I#=G~sV7Y>LTGe1
zb&~jtX0gY5eT!q-!Ob2!{*eWH*m1X`1cF*s#RmEWn;h)q at ipI~DZyQ6O4I%+ZLRNt
zfl)KeEvX1&tV3KNWqDAK4G;8*-&-S<ih{(I<|P{;V}nZ6A`0M0S^k>91RO0fm^S*9
zw~9Q#+l;W%n%EKaf|g&Ryln+X^8npN1qz-0m_`#=y at cfXBNkh_`2Em at Uf?@g$q~CX
zTejwqCyWk=@Yo04TRaF723|NUz!pYKD5~;7P^eN?@9T2X0v}s7J(<lWUDZs?k+i?i
z$D2i4iB>vqMv%JVInWl!yP at sTmD7zSvO@b!r#MQ0ub^-9vG!&aq&k_(OlHUpMQ`$+
zIl41QN+6vEv at KW7#j-jUW|xZ)f8R!{5 at Ywm7@ZymnXvZYw{0h5sN2h`veD&WGtMV=
z0}S0d7Uln^jnMg(+y~UlGzn at Ms{lwn4+C}#CX5%MVnzs<lYk<9=i&;L5hHk9JQ~7u
z34oGqh)MfLY0(%vv3}35By(-SGR>qty7l3=ktfgevNS6pa>gaLryk0!iEiX~$B#$I
zK)deE%kQ%SHgr`wZqWkVm2pK&_Q8Cw3jnPW>ti>MoF0T-8VA1R{C~8!1qj*eXd+2b
z{lFhYda<BsOKN>gvkJ#JZ*?~t4tU5Ab%!MIg|1CtxoC*);&#^U;sqhNwTsynF|P3%
zDRSoPWhQ+oh-1HfEjuaUfoUxYuWdhxv6+N+|7Tn1has?x&3<fhkaJ?RHyj-VnIm@}
zqJ<F0w3*?{slgC9>putEkgKUQZff79Oh!NL%YUNFjiPwo`@=EsELZSG3OY#rV|mbU
z)JK4&@z1(;JC{7btUzXOQ%t+TZY{>kk1AcT3bfzWBfC8}={E(;D_5Ep91f4R7jUCq
z^s*|s_ep#``=k{5a|b5}4~`wN>1DW7|KA6xO%f;B-#Dof*^SqR)<7;U3N(9tRbBm#
z=d|HlD}kR>SJ at 2WN(2?n^4{m)E?;aOnj6hdj;O>PQF5w4(pb9^ydoN$vRQ%2r4k(p
z1b2Ko2xR-e169dpfZSJL%qvVAKN{2l6E<<|K<n_pKCnfqTj?C{m+PJ!JQ=`RWU6{8
zJh5BsTm=0VS2w^6j$Nzj&o(({f1qu;b>H2W{yyxj`|fY)o+umsnP3EWwr21U!N8~S
zp>P<?=zFWB75f>PkGX;^=6!^ms)fb<K`9A?$9O+2R+soJcING7XZ%^mN$Gu{N3Itv
zE(6x1)Pb-{GUv}obZ!$EXu0Y=3fk<*Iq$_o6Vb$DxEbFTlp<-wCT8yuCaj9|S^&XP
zaz<l7?vXk*NZBaQrX;38mw`;~&*zKZ48gqKL9eB7$D*!*J1y_fBPSZi%aoOHWBZgW
z<1Oj`J>*ijxi-R4Q*m9981^GC+i49Y<-EhILlj)z&4_J8_sqpZssBj98fv$N at AWO@
zd at 1F8@2V+zr7sR)C*G6a(>;`3cHC#|Zi16-MD;dA;QfDZ^7V>sMBzIM0|_haH*lIC
zvQ&(<8;U@`b*^zSJ~*MV&6Si at e4Fq|CN8!JydABKMx6!=Zxt8gT1rZ~Q*1H=)$GP9
zC>RUf&}b~2E%EcMT4yzR(VJ?CL6woanZ-~9&H6(AN^^gmY9zy?R{kuCIkeib$f&6S
z;vHR%i5x8phxnrZ at qC#K>3>#^&_LWulI(jI)bH3EOV>mpU6ICH(1M2rm4jCt16~pe
z<W=S#N7Wuho at _?qtX6lIF(|~WxrpC}1YLFGKC;$*Whl}A(3P3&-RiV}X!s5Nkb9{q
z6ywnUSyy5BToQ3P4!S8fW+Dya at lW9^=O!4dE!>$kRY};Wt<q|aN`-Vkh7WXkjD`4j
z#I?YBgcM9$|I$?uoJ!Usm8#F}E61o$rIbtR{?P>l`xUt`50H4?G)ye(QOvj#bEt)e
zGZ33W<Gwng)K-AT%YzZK&4%?AHzq0YVcG@!iPXGoIuW^U4f`w$rb7|}h(UsUeSE+V
zgL_h6u1v4Pgt*7ua?fY`|0W5;$uGWAkxDOYr&c;;`@i|`l(ZxiaRD78*dFC5lAx;4
zysRiusX{qS;*(3lu6Y*<8dS-9)$wCIq4j;<^bq;0zF403k>BzKct#WKwYm!9pe;Cy
z8Gw?1B!$&jj1%kLmmY(#A%Pa%Z~-6e>Z%8)!;__Q0ojtGVCWTa9ocXSvJqvP7?dl{
zPH;l-Y1FC%*d8$rOl0`roFD*fI0O|J?$cfuJ)rAN=m0%r6(1|9FS{)EF06^JoRZlG
zjNmLOzdt_ at Q3m>;BWbKHmScfI5g0lL23#b`XXz<t&M#f!x?p}vm_$=>OJNx)Dsd*?
z2%9_7eF;g<l409vozO^sYW_(Fr&c*0BaYouObPKpj<61Phj9%f;CvQd2|Tz;OE8LX
zJ6ZOvcrNo=)@Tn at vGC>4QoIQQ+Bhx!(v%7+eQ!Waj)9*|87?IA;9%jxd8-8u3absU
zDuik&^?!{HaD&v&{Q!^g=~9$v`F;I<w^K*FU{YZ4Cs=8f+YYBE<1r`DKYtn&W5FD6
zQXPa|36rT1)O`FHHB=dM=@6qdinz#I)qCJo6Tks9A0Ddp+4$5WHH1SpYD6j>?h{>y
zv9BGiAqe!)p3Ez*&MOgRd68lgJ}Odvn^uEc)fzNYfyV47%=r+rs^8fl6TgqWFEo??
z+FW7QfioaSWoYXP at K~M#4hQ|mL4+Os7!~r}nzBA#r>f%Pk3+$VPV?fbptuh^Za><U
z#iTOUr&`pR`n$USgE938MHoxQqH0Cq(Gtl?mT$^9kodn!jYviDaPB|w+NBqrqXLX`
zKO=oPy{BjhZqJ|+jI+%i#+Je5&e=t(0G$4p4QGxbp#o>22?;vDd7^+7;3XZ|r<=>)
zQGDRZelOF~Sf{7};y&Sd^zwBLixjV00Pp at S#<@}{O9LE{<LJs2I)FYbA6fSRJn3LG
z5J%J8nT;^L)OSyEa8SSz!Oi6e!tf<~X+F7}7CVPaxA1?lLz<A+UAlROBX$gGQ-Foc
zmClQ9={A at dc8Z35i!?pVcy!Q!jtb5G6;>K=p}7|3T#$bh*(Li*Vb at PuSZ!~(VRn~v
zQUsR at 3VImW^}L8b5h5o{ll{9h<@Ze=QBS2e*W?~zPmk=S3)+t+?=|0+y-;}e>Db47
zky>i$u0DEFi*-b>+3Z^S_aO^h%Q1z#!@fq{akB8FkxY`H at SFX!WZstY>6YOuE{0bS
zj+&;eo0Wr at j2^vsDH=siK?HrOmhVELzgJnbF73+8*>`!hcNhRBIk$|(qs1F;9mArJ
zMRufqN)o26ks^eg8#%JxYj50DZi()*>@|i8fw#l>8_D6e at 7j$eMApB@?vE9I2pT`b
zsbuSLhmfCmod=~5)^?DG(5EG2#gNXF at U4(PATfeJ at VXaLTth_8>QGu8y3PRYqI7?e
z at vs`Fi{_KZ(3TQ~chY-r+$r8PY~s3P)W?wX$<F at pSRiuE5v@ERKR at vdzgSiXmkg74
z)fU<NsJccw^4X$55$wBT`mhr2MBj@$l7awH<3oj{l(rYz>3f%N=yBlB>1z0kZQcR$
zXaU7yxC21+a*YSl5Ym^L03>mJl<y7ZrAe>0w%DqACBJ}{r->1}p^Xc2wnyq06niXj
zX(-z!<zl4IgN@=YVWTN7G~*$0#=c at Oy9wfv36@?re|MFD>-we{uCe#AEJQ9=yl`>>
znBLmy^WTcb*=n@?%7g|4=Wh!Ysmq&CxHiw(#z6#_#Hx$*>h#Au=_5Lh%`|PmewwbB
z)u^!d3*obb-`5`5zi|$vwIpg7nlM0TVvG{NcC3?QHHrZ&#Mem5!RJ)C728st>6#>3
z!P|>T3JVm7C8_lnUm}61w>b3LiJ?BPf?NS<lf&)TP6lk<$?R3lHyajLA%U?QShpQ;
z#gpYPZ#)7Eb~dd1Rm~Cb;9OWYA27M*oVjJNj3>Z5r!GpC%=E1K;kguL91Q2Db$WV{
z*_VNaIrv888`am;i++83xUx8nIE}TWf%pTL*5=LXlq1oc4n}ODFfm3qwrkf~!mjq@
zno6=UVR=|CBZquykX<=tO9IBt$#z%PeLUNiP2-SI=mayvXgSc*FM}W(&c7XiZ{7UJ
zF4u^@-Wf at o&nfKl&82f{LM!#6aSD+sK*7D?n}8`Uw+`2_Pl-P#2LqHJ4AJfW^K-Cj
zL#>d@^%Ck?JJcml8LH#x8Kq+wa--2Dfd+s)^Kwm1Y*!`haE$T>UnWxaF10#Jc76aF
zy;#^mcdVXj+*<%W;s7X!z&S}{36$=UxI+RbCV6^qI at l*F)jBYRCd4jB!!7Zn?+sUj
zM?tueS}fDwR$sqvj5#wbtdi8Rjj at i#%*c5{{j^fh!RK{%&MmQXxLmO5Q90P{F=gRq
zb&&}$dTB^>)C$`8Jui&2<HcN{WB>w@|NM=6sUy3I5QUqk4{o at w4-Ed`<d3}<8A~k6
z0>xpu(uvywq2q=3m^}MC3?vxCeep7)SU`}y>mGHzGwO&Uk2~H1d{o<TRc}%wH`?Zh
z(K=PtU;TVVyfT*z-6O5zhu|8JedRmc(ulK_G3Iy|-y*y*^S{P|uW=>CM0UfeLs4C(
zXj1tS(fKNF8pcabmNjZ|!IFe2rorRjHkpn*pT)y;{XspaRYN>fexaY6+`mc%D=_D5
z^<F(*;DS!?Oj4Iw);*HlJgXKJ4g<b%3LRnbiYaeUejn3}K9Csaen9na-kp6cN8l=B
zjjX)Na$}P at i%|!cSQ>G1G;EbO`9Lp^f1FDdMMbg1k at GMHh6z`kJU+JRE at Na}3H37V
zjkM- at mT>ZZfPma_M1xdRA)f*{WWrqh5Ito2p|BsbKO+}SGr=278bZom)jVeG6`dP<
z16*4Af7-!NtsNR}g&SVmsCaE>j==!YH-OV-I1RBbWHW0~@51SVSrT2qT)auV#@7Wa
z<A|`O-<O3LM!HWbVjH97TT+h^NE2|&J}v2XHr+l&+;&D_nbjgsd)@)+=kjEE>`Mt{
z8AP;RRw4CU^T#KRl at Gz~8n`^zY>WAwz+V!3;T~NlC66&Ajxrc>YhG3ra;v+#5smb0
zV2^hS4vKa`hK~YVoqHK`CxRKd^PMVg>c_S*l*<HmL7@$Ft6sD{C3izb#)f8Y#e$%V
zfUq9m+2SUV;30i0n<LsdbrqJdz0n3|EAzIBvcp_vCTSEYxGv;Tj9<);$j;DG*gVXD
zHlIxD3PdH=@@8las^`phL}{q{0C|g1DW}yusGgDmnDRAK9)SJGbJ1($^+Y^Ug1 at bR
zvlKg^4ira>qxs3${m>o}7VF6Kir17*B4d9#2Rh~20Ma-e6`$>Hnlpk6@^RC~vLhq*
z1$6E1jkpED)gfC*K#UqOYB{ZPYGnI3N>PqWxh=6FpR9sYfqyV1GzTNbK0LmSF%XWz
zZWawgOZ%oD6OWnSlm_(X@@8{VXh+fVNx^)>{u<CZS)qlA;@h_Z9lqm;ap<Rj5(Ssu
zc+vSJ*F8B~=P=+#0;K^8=;)S{Mz+j;1aT)KG at nd*Pugf0V3N=%0DMbqjm0PcgY8S+
z0}38EWPhsLv}K_Bj*skT2A_7-veNgGRk$wr<)xZTybW1MK;cwVCGz059Q%L85SMR;
z)vqskVF7Na3xMz-o<}7Q2lXn+^KeEUh>aL2PM5wcyCixh*f0TNz|vJCY3A-QRL%Y4
z`{t)J))Y at R+*M|rVQjZvrb^o=3GGB`LG&QDX5ZgNriRPj+f!SZio;u~<2`!?9^z#k
zaGqX`pTz(gI19}ee7t2SQz=bfIOcbXuGdITgXyA}JGu|r<Q9ka#N>|o6DDT0Hio|!
z`RrYGklxej8Bpx1tyGkM<d375(EVg|n0Y3M5znSsx4^{VAls7Iqr)?a*Y<IKy_PdZ
z!j&nFhsk+Cc at 5Gbf{nJQceJor%F%5hE^S8GFRhh`IHC)fUumP%&I5+~7~ukV*w-RE
z8&1LTN|3m{{OBY at XG-e4iIx6@p7t$OIi=QVo-15c)6<gir?pv;DkYSAS?jqtg_%1Z
zh)9Bz+`fuLjBUHZEHWvnId32 at 0zq!{-o00dD`B08lx;``g5dvoT%g3uZ4YE?v8nlZ
z99gHAAK%$;!L5ed<pS9X<_-f2FD7DMQ1s^(;}|L+>lKEvW1Ce|_n~yDe+g0+|KtSg
zX9tNA^kK8K#Nmixq^e?#A=U3GN9azow6L`d?D=n$yd<0fUSy at Q9>h5oPP75B9<%ns
z at 6t@b`Z_fw>Yuj#nM)}sR+06;(vgMnA0c)}D=124kDd1|(WZHJKXr5i1c{Mxs0BkT
z-!b at e(JNR+g|MmP<CUj#$#yn5662~4Kz>E!%E4E?7(DcIjw(u1ck=_?xA+=o{<%_7
ztce2DQ3Ebe4^XN`8GAbs1bmAOclyjpgq*S-ySmVm<H526DB7Y8y4;a;tl!H|szXQT
zU*d>%j`{J&PoH_<Eu;gUO0aLwp?<Hm%Lu*Fso8p11T-Zcng8#GXcth%jp!!=;U?X6
zFAhdmy?UJ)Ka<8$xo~;J#P&-@{X2*rsg!8qf;ZDfGY8)^kAD5RvD+7!e0jqd-pAsX
zP}oPaUe;d23vgl51_ at Hv<wDT(^D{M3Pw#?x)8WNiRp056t8{;iy<dqOETZQQTLoCJ
ziQiSo?(+^W^6y#wBH at Q(30tw at d;PT)7R6W|<c at yN#qW7hsI<((Id_dDNXR}OctJRs
z{IxOsF*;+ at ujEU=J=rp1>6<w+p$T-f`CX_m6%c(LkSZ2^(=oL}9z$}b-&<OlyWwZm
z1)(*VT4xU>5wg$Bc at Z9yv~${ETv9u<M38}{E};btybme)h9i#qvYA8iPdWm2QRB?u
zHGilHhGCXUAYlg4(@Oo(+LysIRp-MIpXdBGWZV at 3{d7eseD*cJhO&2#zxl{JKk(af
zi|<PpwA;@<LUSvOE;Rz^IuI8VOnfg0zMRQ9cyvhlEy3(3=%VGLBq-}K{lC(je>V2(
zK{>4gecoBxsd8o*SX{<*&g at o@H`a{ysVxPDGK!z+`?6iYWLSpb%^3Ug at nvQ1QWHwf
zhM!bb)Ml(@0rcsvfiK>pT;1>m^=uP$s at SEi8lDd$3rfwcP<&AL6 at 7ru1@p0QfvnHV
zWAh`RK8jB*X?V)B?bSuVL$gpxS4LVIFHP!7i6}{arB#7pW==9CVItv))Z%4n^ct{9
z9o=1;*j=s16Na&p5jd*tXjE+|(BA0rG)miTUz^93u*p%NDxwvn`9**oUF!N<qHG6_
z at Qbu$ksfjD<2A<edtFmpM{j=LTf#R}<Zt+EgLZOK at LS=OXuk33B+Vc?3w|w{=jdMs
z;Z_rQ>+W)bJI;1d?*dM_`m1V}(=Kt2j<Ap4VjemW_4aChRV=J4iAXUGK!4f`MtOaB
zuU;Fmsk1eXW-h9QRU}T0Q#6K<xZnF2ynIY1me6A+3feL at V4klVqpBrgX0z6sGD;xf
z5n*eRRDl^<^Lc4+oi){9%OHtd?qDW?!+en}Q*j5459bFo>!ZJjGJ+c^X!b=KE~ZuR
zREjmL?jqP>6Kg{h;~4uMz`Qrb2#GLx+nMpO(+Nj~zVmPnJN#IJ?*N2=A6yx->4I$y
zOT-VG5*~0>lz-N;qS?T at PoR-{jBK9p0n8HEb|OqR2#YeN+x at B3=tEoT#8@&7&#X|;
zN#4Hz=!mo0r8+yz>a&~|%hr7xOvXKNl`}p6%>xeXjj14nX?zfx7D-omW&r>(MT5<9
z_K&!<mU+QM*%y>yOVI7Q+3VM~qcu_;7(SXKaKTIPhB}_v%@a05rO%|a5LO^Q$@wZd
zmTHp#z|n0J!!Rt28L<A^`qL*4ps#ZnspetZq}zfDqm}43Vw%YqcvWSY%|#JjklRUn
z)7nv1+%b$f7+;(K1o=Z%geERO$jA at jRjK&B&AJU^J)bFR(xZj0da;MJ%k^K3YyqGe
z*JmJh%D_QaLcEBaJKgUeVI91X3(z%_ISQ81XU+~v#R{usrblLNEzR9gb2QPV!Ipec
zZU5O^hb`@O41;+Rw{IuQ0?8~m8W!HbOlTR!?{nUZE*4cc-P4^ulFQxIDq}f4O7waN
zlB8;6e!GEeEMDixzb$<(2K@=w+u3&EDSGTFYs<~Is%Wt=IPHCeJ{GYlH6q<HQz4Nd
z<{_(+hG7*Jc(rlmIY}F{{gDf`V39U=em2Oe9Zfrgyv at -HTo#QygLlAspb7IxbG8}!
zTwnj22Dz|X5Y-vW`1IYoZK&=##Co+K3`b=g+R^~kF}8NyX#G>V{7U;RSmO#V%7Zc&
zH49=jT>0dO*&|uvv7+c}$0GTYDWSj!^^)eGsG-EFGb;lwzW=|56WxylTUu<_PfYhe
z8GI+D>0jA1_C?yB7;k7?Q$W5|Nu|E1>C@=J4kp})Sb3&*_1y=dHM=P61otzgo(5qh
zH;)PA>ZH^Guk6R4w-Gc;3;9~y<%{m!MQIg0j=2pv7Ir3yK3ltCzaY}}BwMae;^8>T
zXZTYh61=#Qu7ur_uP-M at j5yiJL3Th#xu}zdq*r{F2@~$m)m)2JsLTiB!kc%U=li at H
zUCyVhH*@Dai!$mijg at 8j6bTqE%Pp|vkOKVY8)-AB<NCelA4ELB`*l~`(@4yY;!Ror
z&q!K}U8a}O^1DIX37IlEKB1I}x=~|A+t(P?yj0BVy!&T(F==ys!1}-0*|jpa=O|2~
zD4J05iPL6%i7Z$W{LCQ#wRY*h{>OXcIXzq^*a6H_kJKH%!qh&EIuickR*}n&8P_7f
zrwnudD3FNZO$zR*{m{>luZ5n1CZ3GKB5gMS^diV)m$B0R&z_QmIuL-bJ8)2@;R8N;
zU-6j*<Q at vnRY;m%UR*19!~@Ncj?CtE(c- at c51*4za|{RHX=7_pD>mLFhz~y=ZsX_F
zELBCOAPg(Rw^+(jVKJ^uQ|iejOf$P`nR&@Yu=lfe at +Rv;0paR?NZ2zjw);)dR2QsK
z$rZ|hcS1IbuT)z~eJ_(OLKtGF-LmPQ=5(^AvsVDHf-oVTj5sz|rw5vdT9trSp{Elu
zcUsMc-9;-QA?>7&y^=QrD`x?QZT~r?A`B2uyZhs+wmp!9d at iBd6M+p&+ at V{ClZ)Tp
zh9G~L;_ at H%7G$J(9pYm}*AtbSKM})`SNqiXPZEM5^GFZ=^sl}NO!s}gA;nn`Y1!-X
zO^$z|qdzqDaZ+E&^wF_*kkCBMRy{a2+O1*42|yD#MrA3GVc422kj at E-tt$bzzasxi
zj2vWhE=%{Bv~8#j<>>OwZ=0VUqRei7>F^eYWLOk_bH0?k*q4F8JsNoL?p9W2jJ;)H
ziqRz1;|~ox;QbPF)4S&k0@~6ze(8_f4d#xGVAXV)58dt-82bs#mS9arx}vpvBU!X9
zR4uA=&B*!=DHnGbbPmD~AW>Fv-F;xrrY@#&am10k$SAO{F6J{2SY}-_pE+L0;Ns&K
z@;k>i#wMvoZ~L?0N1ev9FfsV#Gs|m`G#*4F#8fxoU$>ZtzP`q%^#l%NP~wzY?~m<s
zO~p>*Y_IFLTtLuEep{juWji>_l&^kBAHgb9dAv`AR;t1+RFopP+OvUX1|dg2ieDZM
zL;uL6%P#blR`oq0MO at L6EmY5iwb|7{uPl7Z_TkM7?$4<^*bTvrWzWO+Vy)Sw&b`kl
z$TWl|r|ou62xD$9JwhLwaM)B2{mw6lN4BJ$vx+>(6B2_3HapMnO_ at Lo5)q at w0Rj06
zHMy1IDL0d5HMBxIeO&S_Lmej_fy5R7I!?l at X6L^LHF7b(!4=@tB$lE&qt5*iTt1nF
z#QDYd_Ou*7Xe45^?xQ at 5lVzLt_%St2f<j(#v+2<4WC0g1Q4O1Y at XJ){UR<?oH06FL
z?~uq7I~U&bvielj8Ha^kx<P?3(u_}}b1(PB;4=T5&cz5`i-UJy|2U$xLyWt+nGO^>
z3uWl#n5t?SR5xPOGix)a9>;ZG!L4}Y5P}L5>|TS67BdPF3y6$bXfV%?0K_#2<$S16
zBzUqeN#du9Tb4_mKQj}#0O0B1Rlz>lBy(~D>J8L5TlCv*9arNIAfU;?Kb1};OD=?G
z6A;vfMm<sRmwys at hQdRsq|!wL)R7G$e{xJ8@%^*kKK~(3mOfXGMLpJW!nAn&|10R#
zcR1qNAlqe{&ZU_psEZLw9Og)kq-V6fsQ_jgjNs^+rQ7vl<0Q4xl1e<LI}woigws>!
z^?7qkso*XWcCMnunbsaIkv=;P=7#Q01?b1Y(<Pxd7~Gd2TwGIqMu=Rsod{R?hj{hO
zJl_5j%9(y&#KEQ8_OYZSE!~E^rH%u4(u6Gy?vZSr<U}d=u(}aKg2f9BR&w<gtrx|g
zPBT<tbGVDj=BS!f+QdZ>n58wDGr2V0lm{j(eKsV|0$$L|(2zKa+-AP8{3fSQ$B1cI
zr^r{W5x${SFk<1`(d5mN4Hx%K%xtLkLrjs2qD2q(ODG>ZS6VC-_grPeh&5ewD62E_
zUaD5M^)bgXMK%2p|1xDTf at d{xTUJKj+*Y7Ae!P)SSxB5(X-MY`>uon2uja`ja_z-y
zI4Yi|9A)LHd8RAEflhSeCkRRoNSqmFKmv{?<sCWx10svyfQxDuQ}D~gu)PP^%Mm2!
z3BqbqVII4PK*`4-Yt3<fI{;6;V0v~p$#|r81M<J1=3tNFP0D6lB3Yu$pvZRw<QwUR
zA2YLDf|SYD4EmN7@*Z?S`Am*xn2zSVZqu;GZV&G&@^7f2#!mDDa8D)CfYI28wdv$k
zXo6JK3S(RgZ*T#kL56eME#l034Sm>a0TC;Z!O_zc+)n1Ih*E at QbuxHl95~(yHxJ)m
z7cM&s)J?UhbTky9;HlVzE#>Lv5Dwa}s>aH8W<Rn}$`9R^Ib(y0l2!uim#M>%y^PPi
z^6`N9q_wM&(0A|6N^|+R9s#Ykm|@0LQtPt{{+oUJD~IZyOoRwm<2C-jnTfj*{E)BU
z02%pdhVLSawsJ$wC7_22Yox at hj?29$f}T}IC|n}$T_jvaDaT=O<f3Bcxl{hut=ed?
zxdo&HAuw81>p*#jxTMCILL|WEkW3T^{&zp%xeAjlOA8~JcXbxE6v8R-ON1ZfC=f^+
z^+nnjY?=(T%#HP^8AK_JCr+(lUe?0D;tNR)BfT}WGgZ!shSaeub?me^F_XU3mDhK;
zQwV*yYaPz50KGd3zwm>hW+#23?CeqGy;lWe(37A(^)O&?E-EF`X17bhqhI)!1^BBX
z1z%w{C=@DV6WU_rhq{ek?HT2CJMiC5UYz5y0kPLP+vzD3nyVL=?#wKP4XDvBuGTG2
zR?ykNfj~aTbnav!8`+0`&oB_v#eUk*$zcE=5kuZlwv7dTENc)U!x_lF#N!qlL5j{0
zgouXoY38*&jaM22H^7&2<;*85q7YL+uDk``l|KRegrZlM&XDdaTNAS;7U=y4$z(E{
z6ef(2YW~+6lBGHvD&G2f7{%S18`Mjy6~9dM?*hHl*K2!1mG|AdYS|bQVDN*~%2vTO
zXf?(Fy745aHnc2RTVT3gH}NRLrup+lAMgLT{dNASjQf_bt10F>k6qX8sM&;A8_IzN
z0;hjqvmr2r(V^>@6~79GF3%+6Zy(2bh0aFi*zft7jQ-Ni`hvs!jFy;YcXx<5YeMP0
z2>Se6D?jzc;Ox%YoB5d}eQ+i6!Nc=$Q5T1&<7u(kdM$!yP@~BRoY5eqIGh#QxXP|`
z)ZJJk>7sznkTppj0jr_2Dv4nHM4ep`yP3od&R~(`K<Sam72jIhbrp7 at sz)Kk>hl|C
zJNsQF082Z9Eu}4PL9m8_bEzne=JryP*#pirZE*IFcqlE|TXJRl+Nl;Eb+wnd;UNk4
z<!GIgfjrB1k>p#;w_Kgt$^aiq7(OV&<&c at nF_8lpOiesq#A8B?4s|)2apuqZD|abs
zZD`wG&R5=c?;qfpKHk%C5oR+BP64&2Z3Uqt!eVrh2E%QjT)&nhc*B1aQrve8d&!~B
z>18c)!u{Y6z04 at aI5Fgo_)^rs<=ZhEXtE%`oKauQKUb{1H<uFrd1vLrzx6*B`-5~!
zI&bt18im8JpT{UGMYo>c6QmXLU~mB&%TT^hvkwB%)EwxN=#O%vHC%a9K32j-^>fUg
zhnfkDSDc|MZzZAyVxZ;KO{@>$dq#uQ`Z?O^=BB=<UBD`^GQ;U7J2>X81R~ZmY*3%U
zt0l4C`J<9crjmA<j6S(4ykqIN_#@zBy>|p;_b at vMzOa+J%e>IFv~QzB>+dYYM4jH<
zg41{kDf6Yekg_}>;%CI5(U0jEMj^1Q#60v=HFh453|HBCCL=3^=#Z?D7BbuH`msQW
zl|Q~o_Ne(eIYc%)|M;s(mF_}%ilQz09b{izmi004iG#HH(!a}8B)Q!5g-LBk^T3d!
zn>Ge^52X9xr!xW-#aevVzEca{Djz*9)_tsw(=vz~J<8v3kX`Km6*Z&SMB;_lq{7Pr
zBfoC__Ui^14nHAMZNOt75+pl3pa?MAz`ovNUns}z@%t1d<>KtXO$`PSz`k;;^Sff8
zjOLsO=yDNMf%ZA_7^Q+TiJhK}z9NpO=q3;^E%OADV9Z@%y&e1HLMR=fslbbwbE?l@
zhFz`Y*r6TvuWs8_G%wj+7<|+GLNvoSY2i>gMLC!2c^)}m6NLl-<b#+!2Kc2GgW#^h
zC-VNFi&zQYAo!Z!;eHV3<#L0uv{{dU#Me*YpL1jCLaO=HGoVr20sMY%ft;WakDxR`
z^b4mi<jG$6sJD_ at 7&ihaF!`_~OB)(@YLf%UBFTCZXSCCq*M572qC0y<bq+Req8k1<
z=W!*i1<Qk8qD-I|)MS0ue`%zCBX?xG?;yvnN%p6Zyjjf}ZwlE`myD_ff3<1pnN(_R
zoCQaus;c+{JhG}+)7Tpr>{`gCQO|h01K&0B at MCKR>AW$Si(EKF161;EHlZVX6P;I?
z;+~VYKMQ_??#hM1E1`Fuq$}KZ!iOUIk*hkWVPmI-T|%&HBva<z*y*4f!u3scW|k>~
zdP#qL!Yj_R;sh|c<cVEIIL%zr at b8+vutG7!n1wjo35v)=Q{CZtSC$mK^T2@;s_t)&
zy>=X#-CPZ-ex=@I<A0fRP~*KS1(j+R5R$HQB-<@77hJ=blC<RibNge)kz%2Cy|P$R
zZP9_}o{fpRhqcuI*le!^dB7Bw6?Zj!=*0h*U{Sgo65YIi_OwBwsLP>LJ4EcQZm;C|
zx%}$HdV$j{b}?hP0J0 at W@#S1!sgL^)wg?j7+0Y?%1G==pMLQmT at 0lMqpS~2r|HP;B
zENs>~-ugHFz=)eIVq97D-u2dM!z+u_0#$+e*fv+@^`F!lRme}=i?wBL<RsNR2h*!V
z+Cktuw6XSs?`{&KMqFRB_wwo-ZH}?p>$!Qt^0=tW6|HfE2?><w!;Lf<C1V(SuS at tS
z<Lzcj!I0N- at 5jf0tmTEMWLscKX2fJ<Q%Up=%Yar75<oZ`rpx*%5m?6#<8IPAG(@a6
z$u7B*2NCrbI?IX3xuVfWs~Y7Y+`mz>#X3i3jaP=Me(*{HD?~73XRAuK`m2~69nP at l
z(&M^16-R0%9sz`5`|I at X7N`(0TF@$keTM`wpNUxwM*D1eJn5>)3^aC#<sYuedXXBW
zjSu-U(f=Sj#BG&rk28)Vt0vh+$SC-uZ3t}_x+ut`a#xZmrOH5){W!~G<@T3`YlSwu
zsYmY-2`aJnAyycYayB*(CCE at 0DIF`X()xlqePJ^nHmw%jFRw-zlZk~(AuRtMg5lRQ
zmUk`ATg$`3#*Ik}mU+6P+*P1l2$p#OzBsj!RxQA}7{hcD@~DC0b6-N~TNePB5pD>D
zO}}pBt7nJJRjuF%BcesduZS+%0rF0E=RTeSpR?1?ZI^PNRln%hiQO|%bYzo9 at i4eI
z<pEA^*ZQzl)|R+_witzXu*7s3S0InG;&<j}2A<$e?q-MZgYQ2D$S81$2c(=iE5G~<
z$$el~Jl>ndD;KG)^NrASVRax!yq3%^Px$8J-m`fWN#1Q!qm+E{$GP;B0c<1Rvh$YQ
zKqS19_Iu3kt{$;P3sV#27^$opZi#k0exQqAwRk1v5i$S&R=RYtIUZ6b=H=_)C6)dF
zz#5}_?<7i9hib+Dn<xWKK;y@{tlLQAZxHIo*U7-~U(3lDefJUNV*X2N5;!T}Y6~t`
zJm&J{wIfhC8$eBI9D#CSo`w at o?sU+B#3~;+iei5ce^qZV2_nG;>qUJo#@5>xW0>IN
zz>v6Dd-;e at 4`0A=<BB#LYYnFQIRD2#N7^1Zfj3*;Z>bH-AD);Ige$0ElU0-X^#JI2
zYxnrJ0XGtJQd$9zbXZ0bmPO8_LZgUlx_?>x8EY}hum<2X_pfTq><&#cn$X2=u=v8;
zI^Gu0ATvsOGU(AXnwFDWYs%IKE9SV*b8dqUC#@o_O{R-P23iE;7BB at AKh|N34kk_?
z(h7-$<IIY}t~ITf<4wnNib&t*(YzM-p$Z&#C-F-CW>rlFfbV0%!iK+@!udX<jJk7G
zn3zXsNzp&80p;bm%(%aD9G($<p2pzX`u7HmW=`ho^u+P3FG0}a#`Nd_4aud1XLVr+
z_Fh*Cpfeh$RDWp?(N3r|RB}Js%UZe=E97pkV5l5AQ{&EsmlH2 at QMCWG6J+jvghNLo
zLrJA?q6Aoqc^N-7^mig+RKw7`<WK29#(%*CP0(nhoCN5RhVA$4B4<{`=2zPJMkxBl
zyu_{B!;LM+20nXf-Spgj;Fo^nCyO(NkEH>hl}aN%53v1^p$&C5h$@py1g9fnxnSM-
zQEHXO=yh4jC{{bJiwJwc=a9T2J)w8uneyR%Q~o^(4HBR4oP8Ke=w)td>+MZl8&GyV
zf%zv}Vi at h=f#+R(L&rLlHiJYzjN>C?suY8c%Oi8z;|hO^>qR*fhUtU-X#@T;fTqIB
z{&+N&(__@*JZ~A+jdO0 at gR&xVuVblR*v05<6b#g&LtcZU1D;y`!7@=Yb-Nk+7*kj4
z6FiJQABu-qVKTlVg*23HYXTQ3a9|aCa_M`%R05G$UF~f;%yoyCxX<dx|9X;x?b)Lh
z;>}pf`rh6R<s2b5%#qgSzprb4^<Ut#vo`%QMBz#2r64A)hlPgrA5ijZp`7C^G%zw$
z at 76<VX_??Nq!^YjJ^OjCdccK<ed=PqNBxLH>q+LG9*pV6?gDmCC)x}Rd8t)|=wZLm
zC?ML06sJS^GlPJ1hflUa9DWaYrkT0c)C+6ITcZtaARBgj?6uNu7jCo8BORDyu%wN$
zwHqJh0kDPzd}^J4og#Y1*kRyvI&!fc;76PmLgr}<(mP!{UZ1>^$7KlZgfh`bUFSpl
zWBJP`lpN7G11~!p5b$=Y9L%Vh?{@hu4BQn$3a0q27R5bTIc0WoKaNc6^xpwc2vm`s
zz$Dlr*eK%CFdoYp@>tXNI7X~<)nGt3_kyF+O_c`*|1z~p7bROwU<jAfrMhlAsh329
zm&=?gy)59OR;gn;4=^Umx`)CIpv6Isa4ytS{zs{=-cA^H9~Eqao~EkBijU^)`M<uC
zEl%e2y63YV^3kWrljH)YkGnx|_;`6<>4O(sg(}Rz(y@<4`;GH{4JNk=+Cj~z?6OA)
zo5U*G?KKSiecCLh9cJ54mHXCBToVUdHWUV*etGZB#~;vl?sO~(7J;=@rZ%9lL2jTl
z!GZ3T&bZEwqe?Xsb-G~E#OVo7GVuX?8n-M#HlYub^-Lwg(V@#z_LBDktyhr56iGzF
zW9?Rts9LgD+TU#e<Yl4Z6?OzB-4Fj>n9{0cm?mH_r&YO12b?d?3<-k!L1dQrucjkO
zWbJ%oPjy_!+~Mh;Qy332-|GlMp^{r`JE#5NPSII;RBE1Khv5yjIibV9<}fIgw(ZO3
zw(Vo*wNO9>m6-x}NfI2p{(=X6 at 0y&hc-P8QQ|ZPkEI5CXk#KDyDXY~_+T+=mDmWeO
zf!Crc7{v2v>h<%7bhRug#Q?(2F$4Opo6s`3V%~`7x%W?(ODk6)T4CNbChlKbm7{KU
zjLwcfA_%UBuuD*QF>c(9f>sz7W?kL(tZdAx5m;&`E?#K8yEsW`z1ZNod}*m@{#D)X
zLrurY6ho9`i)B334h~X64s0zJn32_rHFfrdUA>(`^0VlSzOI7yR!R>y_9?>mDGP(9
zmxIfgMFKp?iRxl86e_v~ahc<-r$F4eB@!agd*QF8i_a0S?yp_>l~wX7EapQ?eqj&A
zRs#-48&VJ`8ZJpqVp)&|rZ3+?YlanwCrx6*46+to0f0VR{me*D?Q^>WFINM972=dG
ze<jl6l3!r7L}(v)D|{7IcZrI9?1%|kPey$30z?Z42ZjrM?RX67z|ZBwow;!ap&f=*
zC>F%HGsZ)M<%RjwCeX-Xq5v~~iFI>NQv~kFxFMbW43jFYwF*fAa5X<Ret4dE^wFIL
z at wq^3nRThMfE`3xcCU)o*t$BM-9dmpKsZ?0E$8jC34z at H`Fplje9pXD<@}})`k%XV
zCadgsq5}$=fzlPnv0GHMBAAduI->xB(|pqhsO_c2!ce(53mW5=rL9rxX at fC7-vpcv
ze|rwyjWgVYseVzL5iJO&an^!_VzVtFe=Bcw>^-Y-u0COW;+I<Xf?8F8mXuV=5dE?}
zxX5_H8Cs>inlqv+yDRz4`z*JChsjGp>}fYMaauAzu|XnqCx&E9JO>^lcQwek%k%n8
z>C8W#FBt_n at laS{fK0Z$HkLO0?>BS4>w@|6V|7UmizZ{rA?h!YVtqfluDvz&p69*V
zII1?}Q7 at MN)5B^w7L>ZjJp4s1ZfzKpembWE6e^iLGOmS}f<19Bv;J;a{3*pct!$CE
zbCNQ{#Ghq9UIypFzDIS&((7!sxW<rjQm(|>3jcJEj|s{DjQhs>j8<nq5u|*lQMY)3
zNr<SGs~yC5#$U-k8bqn<TvlDu>Z<6l)lJ1`CIJxE`*Ja#6Jrc0QFF;i#SL-yP6<%o
zqq4m3 at Xj7zZ53pNX?hmEhRu?`PsD~b3j4SW#`e7O(z8DiDdV#^G*5I_GfD_y&YUUQ
z3VgW0PsDf=7K7zrtUak%w&iy3`J18E60-sp9!B&bf~4(8xs_zu+?VC$y?gCn>qR*T
z9aHGn%DCA|03S|-93>7UN}efW%swQst;5tQHB!r0J+OnWA148vnlabBmFSaERB=AH
zR-9HHdBbfc5-^k7#~5jnw2)N*x+&jku{0r at Pv#Fp6|hpiikXq8F9~AwB#ttDqG at N>
zUbs8Xu@}6ZD1O*qkuSt*&KAa{rZqwQ>tDcxjn0#%|EzOP3zn1-NPZyT0EmH56*BkF
zG}Y)3dl2TVvga3OgaUjZ*`wE(y5r(=@XfzBc{(M)n;8|F6xOl)GYN8*|IjsC{Ea%e
zrBG2U>;*JM0YHkoX6UpBzhUa~|9J(o@`8J5$GbRjL8F3M-gmW>pQk)*4*+Oc3z-uT
zR-c*hq3G?snGTnp`d(O=Be at m8;=Y4LDwI)qgFS-*jgx4E!b%M4ygYYo<O~mW-%h9O
zh-~y_)$5O~r#=OLK?kXm)=*Vpwl9`YjI$;MkZjV;l>_8)hDnG`tFppK2pe_^f#r%?
zr`PUo#$q>2QsA&OU%FUH$&knK#rc4W0ThfD>(jdR+Na|F>gM7S%}IyKjAj6xTXD2=
zNf0_W at H5|JX%IJtUMPi0%(WYq_>sCpSvu-7k~_q448%uQHkeEG at e|m}IdpN>NR!C8
zVE~MyRJVfG5;VMZ1lo{n- at z(ivN>qxq;r%WxtC%{*Dw|@lx~F0Gn21_ecn7=AleT{
z`12Zcev%hvH9z`NaJax{a46*r*^MU7h3ipTNyCXnSD3U2Gw~zor7Gh%F{?CJB{2JN
z7T_k-l|2}WlsvQ~aE9R-!@!q0N=FMiKuBAuDQ(9X8RU+6eX7R+D$$;Uy+w1p*W2r?
zm7YpLUm2(ZPYvYKW~(MEs)4~`$y9UMuG~={b<l}bCmfxZB^~iUZ4~RJ%kzzqX7gSn
z^er)9TqVZQsw$L$M at Fsur+H=jM&6q(;<G(6zizgQ3ZlMvF090(<#5!1G3<`rn6YFT
zSLd0 at G!mU|?C2hHo4oU)o_n)S*>A)mYis`$6!Rd+^WzMl+c-}j6ee{ezJC9~ZVG)-
zY3e9EF5cbiHUV$P)7LQHdHcfFJA6T0D8t+ at xPv2`!DXKQ-;EvLx8(%wQ-!qy<J-!F
zDVR2-i{yB;NZ*~ht1a4P2;8f+);3ZL&aDLQZQ`EFSrl+hzMs_$Ws6DTfKiqZUvSK5
zK-aWEos}-j;J<iHO3yEY<!1J1EhE$=Gtm);v%w13(^IRNe6T3$9P4VVjx}88op7UQ
zyj@!I6v+34!OYOfiHp0;_2*v9>zgE<_UdK)m~Qs~v&AWMH)+1h{d6~J$q6N?a4MNf
zM}M{BUD_ at qdT<P6l7uEs>idaPHfk|06dcm)`^k?_@<__=V5v7^_(Op2jRNB=io-3_
zj5_Ho9fjGb+#?!`OdBYaq^WXL`61q$XP#O6?k_YHcc|aTkbYg?rNE_C)z;bmyIS5|
zCc5?M9V-hs)KbZ%B~G-Eh=hL$Sl>D=8=vBKEHY2u0HdPvD5 at DoC%0A)^f#%j)Zjdx
zR;Cv at mUbG3YP*X3qWvcJ_-)HwvI~>O7LcvY>CFdUZWAp6YFGOa8PN7C!4NQ{W7akt
z`@GTRmDtzkaid8;uVfuR=vr*F#u#{UrupN0We1OVi3((sx-r|n6sO_>xey+ErmnmP
z%o0#34 at xtZgmZZ@T`36o`ns7a5^3P0#qxA*t|un4En$~$_lj{Mdx3a75C1 at GQjttO
z>DuCNhtu`M;cnr3AAbp~Q5Li|>AsXXe$eAjd~&Xii7<6BJr{{+*jWggerTc)n0nv+
z5!``ErP(g*IK+trLJGYAxe2uc^MqQ5CPX-lLYzu|l}hxYBSjljz;A!vwI`&JS at md%
zaOzZ(BLvHb1mIf)C#PiP&jRxm;Ydyn-=#DZ$M{Pr%H74vp|DT6Y8FuQAF=NHEd7Li
z+d|8wT(>?#j*S>!$@$x|WbriuX!$+3U(B_>k^TS&K={AT8tj7ZCC>KKxefE3FaACQ
zLm)U7ZPaHWmHw?CEQ1tz*dqvTNxCND%VnW8mT+pD;ui;80Ac!c?%@QHV0ayniGEbZ
zcOu+9e!=hHwRP-Vs1YEo&ox&|LDO@@hZ9+xEqYRA9<&Fnr1Mn1<40_U2XW)4aUQ7r
zP;t#nnr0R^eKEO;Z7Od+PR_Zg<68Vj3NfNqPlR+ky)xzk5B0Cia2(q&0g2q<fZsmT
zoQ&E2by=H;m6t?)Ti|Ap?(LPP=Dh{xoye6BNXD2Yo}?Uoqu;JIEvXpI7ePyVO3DM&
z-Z6dZx18(Nyi2OkHdq^=WiGAQeZm#3LNeUE;C7DhvrTAh79f13DlH0kxVQPDoTL36
zA(VZ%XwW5HFwqg?dZU at WrZVNJl@Kbl#pPb{r{Z+=e$)2%^PHWo_Mit{I;^&vu3M6a
z)yX2h&^!U<WLL+u+#)}4AQC!;RfzACDChrL&_!5(L*d4}=cl+pjxqq7ACy_M5}Aid
z`qeNz*Og1B>i$-o;lA+aXl(jXf?Qxabu3Xu&Mg&?g7U?Ghzd~iJ`zr?CMUcl5k6iK
zItP1anF=4=Bbb3rRJ)<IkVFpA{3skxFf;s8V49dJ31(2mt_QB<zZ6dvLL=V;QmX-I
zj_FteJyi)b!)pFh5S)(@K#l&sqGmSTby4(am|K?qpBO?=TiXTq<PdWfuO5&_NfMUs
z6<Rv`t!+;&Vlrz75@^H6&y+EIq}!F1Vtxe-v at u#V#~rWy2X^QKIxj)TO78Em^x9V+
zB%O!0uJc?a*Y(%l2Z+pZ$$pp*77#U_th^TEA*^1^SFytS-Mj;w_l5ix)aJ2_isQS4
z#|NKP>zN8nFq>U)IJrl9%8&Cr5<KD98xiKYt^4Qq2^;Lx0#Y}(J~;#9uyhHwxxR64
z)IdyaQgUD?d4Fb_SV9ViJ at F5vgnPDn$L%AY@(AYP`|vJXUCTd66G{Ya-Qm2`|8<@?
zn5TV|J9l+A$g8~_l7m9L(BY|(0{F#Q=r at kyP_!^=f_Gxie>On6SX?#j7`vV at qrKeE
zQ(}>aP1s>pB)+Z;6t;EDri28R%hX1WM9RF7p&j|W^fUCactFW{Ag1Z$mNSWS`A|cu
zezXA*9NFJ3hcy?>5YjMN9hgO at y&~l2CO_pXjEVblrT;j(`1?kzTskas(4frL7Kqll
zeE1nV5QcJfYap3B7M9ZoloikUXSS}*KeSXETVOQG{xtaPx<vA2{`vz#=ugJC(X%hg
z@&&A!JtRQMBo~P}!9P7T&STjO@=sa1t~;_R)ctj$o%u2oPd>xE2Z}a=5Ohq)gyX at z
zVeGmCYjL$j)9EA9wxb}wi6{8+aYRpQ-9X=3IQwF(`qRQ$^Wk^EAAAiWfw-E3Y2wX0
zoJ;fl`oh(*KQnlf44}>)eDP7=$-=sq58a3Ka7AxVX9wi>tg04va{bC*&V8>*kV+b_
zx1BK^#$Oo at U283?sAe1eNuYbMJ5 at qI{mn;2wGqghRE}FQBP#DE;@9`}_AO5ua$kBm
zR#Yd}p)+prW=(b9t-sAn$Mx^*)21Urr&O??W}1pSTiC6Cqx)uQ?}CfiC@^!I7yNbq
zjD8Skm?yt7cXDw{qWZlb(LL1ar3|D)z1ml3q&KDTb(W^Wq-4{eW#Q>hV|M5?8>|Jo
zr;?W<V;}P7Uw>t476P-J!@-LCXEalXA3Y0A9So`(2wD$Xy#8X%AIlVM5e|gS at WssB
z!^d?@cXnNYbZ3?UpH2n!XW~K}*m%Jg^P2mW7x;updenNu=Vs!?VCk;MfiewcHE{HY
zAjm=KA!ud`Yq~d?DT2;Ov4r;ih#Ei0cf47UTD(YbyrtEs>UOdw2A<Wm3_E49>tJdj
z at Th<#fQtcyK^fcM2s5QH)??M}^Ncm(2*)iy02UA_Qf;(gFG;~2rPHskZN=5AY&OgE
ztHR>VX&>hj`mL<`Oa!_N_J3I81JCS{XaT+k?mTafi8MJM7<ekR>MgwO;GU=0O}EG$
z!<@KARo<?6i<^GBQbaCkM!ORWEnD`^O-B+=t>EIq*;y<3qg-rHEiTX%+K at jpF^H4`
zV&R&w at Qu381ZEG(ShW5^-1xbuC#J?_F05&YjD7&9I|MV1Ll&9@*7SV7)`B*vODX_W
zRC^0PRiX>1pnZkVI|3oD8lSaP3W_DvD{lZ5n7~7VX{Z#-vT%NXV^yb@{d^#)=#7jx
zA5}BE!1GW{N4IyI9AVwTu}c8BW+el|W2^D5<z)O;`ZC3iJuqLzSOFw0`{-J^pKp>f
z6A4h;-*c at Hq;oMtPyT at T<vaGKTt20}Ua%I`r8fG-2(FDh{#rbB9L<j*^pV<lch`@d
zp%BWZl^)TEbIFOO<A?tq>8<r<%CD=V${QiT(&mmR+IzCDfz*K$PXo?y=%36ir?s&}
zfOlPR1~ro(*?HjqF9l(m1bIz;r;*Gg&BI?a{`&%DV4%+8p5o=+FrH&BRQCXAc-@~k
zOe>Tt${1dAk{YR=+zIQ2*IfaPHgFJ10(X|_gWHHq<vppMn at XP9a)nPZI~wpNYaZ3q
zOA7nRQ}As<>I*{;kgT0mOyD=Iz6aw3J5aP?SK_~da=xQ||9rdvZ)Wv(FeeZ6wj08j
zK6bSJ;E+gui&e4L{&|pLt)#|TOBAl)66gJltXK#yi#4v4ZLCZ^0^p$7R}8%*Vrit5
ze_f1=%&``3pHO$Sg>d!ms|obeY1*NUZM9T_y#h85cf1<oFJ^iR9JXzZN6E=hqgbfY
z4Stws!cbvTy#o2eZeo+{q2CfzeJ at UVld+C0B_tkLl$_s2X3|Z)t(@yRw|vo1e9+N#
z!=C3M$*e8JH!8J^OQUqGVnP#vI+U1y<~cfLlael0rtnTS4sCQZdT!H$oHU8TlZ9K0
zrL>C2B4{Ce2hX_c95z;5pI7YA<&TH0Js?HCjYnK-y%K63Xn8X|pb?%Qk+Abr|9)?a
z&`JXdvvk^_ at be8gDg`WwbIGnG^yp&~K#VT&Urp|-l~+oQZ?x281{P}!Nxgc&g*JDU
z at kpD0d$Dwq^rd+xbj43NfW~^4j*om<<*S`PQMBW}<U;u>{m2N5vs{@wLu!4^4&xKR
zL1=E620A#b-lj8ukW+-v^9Jt6FB#e?$+#qtI at L6sSld@74vR^nUuZ`TYE$vrT$)fP
zQW!HLxn7v4-Q_hSV<){!?CkF5)go8=)lzsb{^x|e(jDUx1Zel^PeUkXeAD$Jx5G$T
z)|{4ht7+eFL8&gv<HL}0=jKX;SlWhhgGt2ee%r^$Lf#iV-={!0MvU&z-OTu$#6F}^
zxn+M-p0F?sjN)-wghF2K$;sgl4;CX{(HnAWVW0tWzgV9j#d?3b7=t*`WIMH6r{F8@
z7?&2Db%6)ZUO>3-`mpBtZQe09ObKGJ=yaq at Zcf2;Y3mBV3|t0leEhOxDHtlQ(f^R=
zrAew3=*N167)jB!zcC`xF~rY2W`HrJTI4o|TJyncI;oHP%8F&~m6M{flw#%a#e0?<
zUHX?WUS4lT<)Asw9xujizvUH0zRQ`vXB%&ZV-lA+;&!ddiRioqL^1p2;l$o97o=ge
zFUJJkX9CO5Z^@dPI7{X1jF!CcE|s*r%eKi{W?Gt+Mi*Wh14JFuS~rOhlBCq~8>hLb
zI6BII^<rQyi`vu~73b}e9F7SuLI-s*7n1~&`3_Lkl8bF-Pv!6~$4xI%CsJ?QfFvGD
z%AuwAqLP>`)ENrDHu4|6vQ_TmRDOOSYcS>kUOjaz=j|Qhfu&v-_`|d!$1 at HF1)vm%
zItz3qFJcu<GL!Z!cc>oilBI03tGu~3u^uJbg}U0tHIhCzr`Wvs$iH!2zZ>Cp<Z$6u
z=sB$sCRCbRKY9FfltrPj`PGyRg;bW2SuQAW;nAJivw?#mSD(eG+IrMHluzOHnSI14
zk=jA*7!ZR)yy1&iX)@M+E6mDxag}5e at kPfyx93tT?>-Ytt-b>&=*#Wd0XIw=Yh=}G
zdc9hk@&y-&(h_%))f4UGSRCMa_8#o3W&1%S0Z3`P1#E}iEr;}Q0?=YKkk3YW#r=u}
z%VutW4;kNHck(f3&>As&?s#$yhn)3Qtrxe+5!ZC}41UEyR42THUNwEKFI+tyVqo{(
ziUTbqf_}u<+t1St-Gdxu;HvQ63UPd;{>Ds|apB;$*Eg4mxk?4KHHfh|xfkYJ%HVPb
z=zg9c<aY5_`XV>#z==K7Kjn^FKxV!6GRbU)nrZTExf6`^Ali9?!o%y22jyh6795U|
zI^X+h&|{%o8JZ)@6IsibdjXVSIY4zILcbxX;Mzf+I2TKi>x|@!Ti{wpw+Uid^<yTc
zU1vb38rS)AE#c at Miz927w_fM()p1yV(;F)`#wwZ at qJxzQ8ONV=_;!l2#W4aTK=>8j
z9@?{I#MM8=4xv+YfC3VS?CwNt=F-bBjwhRx*8NQr`9ITA708zQw_ at H%^b>uaAtc==
z4yreX?wCB3S7pah?mp?n`E at c@yCj)JxseSx7lEtmCe+f<_uaKGjVYApwPuojT?gdT
zYnvh|v*Douezp)gW`_9`jmW?EcyYCp2W0H8hEKr_Bm<AJ5<AXrf8M7lK}}%Gr)M&I
zhG=4o?|dARZhLh2>0WG2X-~62?wym?CSX+A*sP9oGY-lEhC%^Yc7^}u1Hbh940#9>
zGwPFPoufc(fs&FE0A3S=_L3B1<c7)md70X(!a9iA<d5CmsGZ=8<_rKf=Ke^H;^3{-
zF5?xH(nKu7eSCEki83sC_cV)@xteeMT%N3ZW^#7!<qK|{dn=LECbNM<_LRij4bKGg
zoS$pQ!Kvicm3gMddN*Ab_OUE?&tkmXoO_;BN#XkJbh~q@`QVlQjz2VWL}1)I4~VK6
z^kYupd#W1TBTK3yIDb9``Rv;oiQd-UL87`X=WD^PNC)L}qQYG0)ak?lj3`+pKzfI}
zj7z^rdmzbk*mS_gcU>Y6=Zhl*YIcm2xoA3Siwd;HSVJRjYZd?vV(9QUOo%D4^JfIL
zTTcGbZ1|(Sis4AjclQ{Ch~L^J?Y at yT7!qsBSX at ptOZ3=3%<I4tU20+z4Ee&3gBojX
zg7%3x<u|;xr$sCB20NAj3>!?rU+rZ7sHO9jwZvJxL}KsFJeXY0kqZ#Lzo!~i+QahH
zgdst?%UX%`zM=dBf9du;#W0~+QzY#s`UPa9BU9)_6H0LLsZ_P0^Or*qaUyqY%*jja
z;}?pSJ-7CV%;hv!!DHTPej1Nsu%5R8p at Rcq3B7!nJce&?R2!2zUU7|R-q2Z8{Id|}
z_GB_Li%Nx%vy{#;YsUeEoph5X?=d73{~(1BJ_=ufFIXg~DW&9*=<$K{Sl^#hqoxV4
zZ?Y-yhElG#g7C-JPYzlvI})bhanVVN*$dFToLKN1((x49c^S68^<C;KeLT5^0UPnJ
z!-^$(JZdbHn2m%I36{caf2g!tDG)|$1+B`7DoXksAEWp>njigouNf)Vp{C8UQLL4X
zCqAwHMgj)EwV at 2O7FCyT=k{T>q|0PZhc5`+4{+{jl#<3_uz=7qro>r#C(;Q^hth9-
z1X$t+42Q84=!mR-08O!>DQ7Md<B?|#E^PlA*FYt_I78A?M6Na1Z#<82xvSydjPZ3=
zdkwVg=HneIC7VEycX%>OK_+O-g_(%8k_rxZ{N9b>vNV};8^_*Ktl^|2PEj85E5$^C
z at T)Lnd`?`b{2cSS*Sd5qQT-p^V(;gmyVqkPUf5yamW%x$J>TgMADRW_w&`jmoEC{D
zF)kU8CTGGNyNCnlU$XWenv~gaCc*KNERI(aK at xTDxYId0xH!AVd<D9Ar;pL;R<gk3
zan+L|fx)Z7?Sw#(X`<Z;xrNgQ2mP`?qaQW+cyueVY=+E>;;{{188)ysPeTaz`jO+_
z?I;cf1!s-JlLo^ca#n|_R9hC!F$rvc#JP?|wi`Gte1G<cU-@@f*Mlj<#auUt at 7Kk-
zY$ZztLpN!9jVW#qJID-X&T5<PSCL>`R;~$0$(H~UJl(Dle-$y|Q6bb>I;E{lEplGq
zAJH}jxwY`X?pAjg3caB6tq0s&{<Q6uNgx7VbQ{ssEo>=kytEP`KY%Og)S$t1ui<F)
z<T)Np7jDOaMOqZ}e-n2Gb?_xkfQ5S at Q=z5lCbcop=^uF>MfsHKa<P`O5=<tSodR2U
zU;AhQD?`(t3qug*FbrrO80tdi<Q2WVDj!M2HT>zw$Z1my6>Lw%7-1e9t$2b?_5(c(
z{R*osp;hW&T&SxuI>d{8U=3xE1Gz_b>AWD>|23M*iPjB%p}S1q_s%Y+V?%#Wsj<pT
zPau>yO$X*4FjfcZ>fP<VzAXfldvhe-Pw-tdrzm?SI#y2{1W4yCkqwbpXfAD+fH5&3
z0J8f7zG<x#-fFhJN6`Y5KUe^^E#2~glne4)qscUlvcK{K<%99Y*p$t=R;&zv-r=*K
zx>8<BU?rucB`QZlkCYb<5bSHw(aZ>SYsMbw&s)AY|0!hMV0%D~`dVRIfCZ+TOGIen
ztd8i6a8 at aHYA00BIl{!Whh&FHYS!6{y`Vq;W^alYIb-^X3Yr-Xk#C(hSU2y+nhmsh
zjqu0pA+mqmVhsSRMq%D0eE~9Rzhz030y1jtNOyl9>%a%`m|zz5Z11O`Mo!U24#BUa
z`-O%PD1ux8_Bc&gSI)(cXZ5V{lwBx_%ti3^<ROB+U(1E+GogUdkxPC>G8T*H?fL_`
ze|T62LPJ1|v(X at v7R12K)z6$sy{G1J)H-|9R#;h*8qp&~M`_;X9cK57&j1UhC8VoE
z-vO1H5}$?-0FFP;06!ShieUDKuqDqZyApnNUon-%Mj#mCiotkbzsFRDhUs*3*qX$)
z@>dV^G&oT<^0IoK^S{Swy-Q?_N$30um45&`x-LlY9vd36k6JtFf;2WjxtGh;vJ<!y
zz+{(gEm{08u}vuinWQKU1f{m{MGHH(@IlNa#A2kn-_j>m5YmEQP&~y7s2*rGkWw}(
z)-LNS`bZg6O<?gvBA^4L|B?rFm;&l{PW|>~SapGAZwg!BesH*G{XsxqBi{2bJ7|SG
zAeISnEs<{94(8e{)|pFkgl>}?y||Pkrhu1uLOrmBQ}e8Qmob|ZcT^rJio=T<>EC1b
zeq5AnFQxWT<~FSAmCgM&H=fC5ncZ`)pb4ctsR at sE*g0d0_=eRuNP%4m5BJaejaotm
zD3Qto*oZ5I7E$JkRy^SRt(9%cX(8fh{c!~JHaA)S^+$X)4Z$eAJtYYsiWG|p%&SFi
zbwKSQI}#f?4rGXx)Zxk{N!KcBmKk=reTTzY>TVqBuyzC7Y%R+?CdtSxW7txq^z^ce
zQ&E}J at -Dz18kl!(wVsV+mwUl1HRkl*T*3o#`sPkPf^4Eh6oXnAv8ugPR#d at L&*Xi$
z+=o!__UfRst=>6}<Au=X<7DRL>nwF=$`}bVX*7d&X(6 at L93t-xxUQRiK}WKBX!!OS
zL3s40m2_aqGRN_)Yx(-ILS6fE)n*rT)LptMUNUoPblUYqNgD2D!t`gVXVjFuMnEj`
z$?cJqlwtAE$p6Y>Qpdh>(!b{ztD)ePsr#ZBTK$4@&8&7CUu82WbX*k69uQY3^zN8H
zh{*!8Zs7h;%$<G7Oz<Plwbr3Trg2m5+F!Y<Ce}`}+6Ta7f&8ai)I#J;jl?=a4TrJ(
zhnotk-<6{~L7wcDi}fpe^9+lR+x>KTcij!c=%8Lp2V&?CF7+!xm(TD at y1%5A-?0j^
z54+D at _<x2qPr}-j%kT_OFdP1M*&uwaNSn+H9zAhyfEhC?lcEd-4I3bvi*;y35b>C*
zm`EQFWoe*ZJj7jGN7}Tgse`6yUYm!y-Jk-F{CKEJQDY8Z@=R7sS89btVlFs~<79a3
znV_-vcKx#CV*e@?;hpXBOC7{?I4fzChBrSpoQ8R9)|HGmnDLx}C;D&w8b|l%*Z5)4
zSsTAdru^pFiGa^a9vOS~kb~u_>F1NZPLmEz%5|A5lpdZ}%2?OuKVbs?6`G86r(CW+
zo0G3BqbO5GtHLGdfsr-JmICmx7rZ`3=Fm$iu5+!SeJ&{=NxRLB#`o~eCg#q>5a9l~
z;-vkUpkOW0+MHJ>V;L(v(0>nUIdkXucC6^)d7_8HlY_mv{ur_T?DN$R>a&T3!JvN}
z7jU8dtE&<FtVMyV4-uFG6&?qzyG at TJl~ZFfpKBy)B_51{{GFfqkaO|=nMcf~iJlgm
zA!s_gG4Yv%+pZe1-!heN^o`zSNDausFuR>!2s*hab^gwgz28Is+xVBSmugZ_Q){KW
z<PdhiP912%L4u_ at kt<t4-m3r$pBKwi3^)VR0naHg{-6R~H1bxm;pY{_B$f?(p`SG5
zz3Mp=3%(V8DF%gxQq*O4`6Xg%YA1Y=;6;hFh4JmL^g!5{kUp%~&o8gQ=gm48WXsc@
zDWJWM0aOwDPd6h(H6L&Y{F^%%hEb|?e+E2*4g0kEhp!oZ%8na{D`6l4)sPE!GlF5(
zKx<ATw46wZb_0ehK8E)X-_o0%d#RU!yPvv`%*CW at 4Di;6rJ%d<Xkf<{xACm at mrM&`
zniy2Qkk!{ht?y|`L%q5XPyG^XJ at QGg>Gta{6CH>Tv}#gDNWi~8eVf;J<iZo6;9t3)
z5%8T1&6$+zK-Wp)Q?Pt({yBOKAkleDqVsnB(}J9p;%u^*i1pF*1cVuqm5l^PQj))f
zM65$xGaokPK?|@`fJu8b4rPr35NTR}&;?8XrT6jNfVCbstB9c0r0)k_9h-%CgWH8g
z2U=dW;|zzGUu=#!d0va)xtQuItPJAnpDXP8_!3i`dtkMxk1b3Gt^992aXl)X7D}#a
zIddtcbCsWB%a>E53Hg0loz5=tf#i`#g4#y?n(Fn<AuL_CH*<Pko&gH|0C7Cf0)yd^
zh;anEWp`BfLqIU?n{PCf8cGP>eA|-DU~@{Ge?o##lnf-z-Dy_Saxh{Fb9 at i4AaaG`
zW3`r|mmACQrqyF<;kod-vV;LKW6h65lq-C2K=H8w>W5V5SIcgP->>$Y3>%1!bXyS!
z?JEyy;U47vPA%(v=eOin2%Yu}S1yU@(jF<2d%jdFz=K*vqhWvo at +Gu+aSRb2NzowP
zLa$^BkN#B1KX-!lU*lX(lB$+t#`W8bj|FNpn_{(>0_85 at dYxL~8Pnd?EK0s|8LxBC
z)#!yz=AKC3_^MB4c at 0up;!$ifYB&qFjLl~&t`R#)%)+(_A*Ht`?8>(Xr*to<Y|wQq
zmdD^lEpmpKuRmI>YQy5vFn>E;IVm+O22rcBrdn9S5+vQ`zpt~Hr1!eyvZ-A^1uTXm
zbq#<vftT1q!G6LfMXuzo2?L8c3Q8XH;`Ks3l!=t~1I?8DQcLkc?O{7Crm4s`<GX*R
zY?|lYU-%6hgm%g(16*`Uj5-|0 at jA@iZ3^<n5pW%6hUZ=bNzi~;PQ2-vuDcajBbUP8
zv{=$(`0&K#KS*N!1whA;^#gzmdz?=ZMlD&ZaB|w_aZ{DiVM6E$5ai@)*->wI_8`-g
z)=_*p<k42vkK1CxwoUS*Uhdu0hJ)g!m76WlQlLvPC!$IND7FOyG%8R`{N7-`TV7ZW
zw3;<*N6%I23=YF6!02Z@`1x4ax&lSI?l<FJmmPljQZPd&F)o`1i-1pr4>>40rbyGd
zmy%h3RO&1&<QD(6uKoD);Pw+KuMeA&K}H6Y-^sdRg{cEuFcA@)i|VKm-c<AGr^UYm
zFIc=Y`2&u5gH0$KAyIs(jYnKSFh?fGh*?j9MzF9upb{wcc;08E6>RScsIb${#ea-I
z5$;ZYq7cs`pXxx9BjZfRq8ll)`1c at 5*5|0Kx5FP~=f`O^jQ+sfu%%Fn;U{7e7je*w
z{o|&)>V(a2Fek5`Hd|n=^fius&*9L4jlk|>zR5zr3A4F@$f1AaaRTM$2M-|=I}zz4
z7b(~&Znk`KkC>^V?lUWG7%~|tCM$5G;?+aN!5YrVF%mh at FZ1!U9E73=A83SWjx$;c
z1=vjOm4D^0YBN>e(o{W{%_7M2Y^LDgXCgH2PK03rN$3Co<!%S>KWZN6VI58-v>=Vg
z2RO?joF)MBtHNo;(Y>IAw^2WD6UTZ$yEoo`v9Fnfr!!9f%v>nGA^y$EGGrmgDTeF>
zjdBb9Wu4FQ%)*)9Khiy{^sexJe>4I5*TY=y9WPd+wJeqvgBjKWr}XC6T8$_Z#S;Q3
z&Q{R>m at K(`1U at 7l`G9RjMYooXPWXBf?*`cy#U~Hn-z|T8ax_$DG&qs_9xKwgI{s6Z
z)SW%hPDjtlW)GE~U#ud?-#Na745`bZYO5Z{@>D-HQS?t_aQ>hS1k`Isg{Dj-qN?O-
zl?XqcoLPdCeMNzs^p2!!EUv52XmPQjGwVfR9%53A{P1|MdBDMMA1c(c)gE_PZEiv-
zw9t--g)3FbOM-ls2nq-2cr+6Vignumor5Dy!me=1SQ$6<1y at XIsY*?9E?FWzJQY7p
zEYQPxo!d&uNaJmPF7d3+xyYndv(ty)^k*bothV}w(mEYD32(DBkB_$u$A^`ar&l9D
zPWs4HI$CRDpfbc>%p*7Z#$_erV;1MaXL}Zxq2_SgF6j3x+&KuUDXXuKBs+$kR{J12
zxybsBJv5aCFCJ*vm2?>Cgc^K2WZSq4SrqpYp^qz8(llq`I+&Q6L!}x=6859BmzrW)
zvhbaq>tTP(Q3<*v;&u9r9`xE7hsyLpd+xBER)2#0fPDcO)HtB#z2h at CYiw%y;%Eoh
zd)QEOJ0fX&r71Hr(Q1l*A8HKad2M_fE_iQPw|LzXPt;1ARHQ!!i+mP8`ga|-G_DR&
z?67Y`c4 at 2t+;`_(0m<wMEjMy at 14h&$ke5E1wCBlfB=EWGKWl=rosY2vW=}`_abDf|
zK$u8i>9U4AliV-`bg{-a4w7B>t;}d<_zmX2OVD9<_gDiY%~=5^7*oIfMAa`8S3ZZ#
z3#c3aK*ai?mtmh{tjY$*adu<{s%>j1Bk;OX{*B^v8<otJ9A6HbL{Cf#n>i#+Otg^!
z4$=r&%7^&hg?chGc${mOELBt$T(n^5;d!@)4ooFcMz*E&AD<mB0~XDhS>=ntTtZ^z
z?-kZj6R>RFu)W4^V<SJ~eHaJ2x>5|Fl8Uq_&oBSNhe%lUvQZQFuJpvDrUq()P{<r(
zZJRC<eMahM(j6wdYR9N%KB<??Sm#(Q?^1=ukRP0Rr5_i(vnhg+tlF-#9KDFOD(ygF
zmO95;?szXe>+n#b2<v$s%QbT?If!8v{#KC(hTW8kK(xW_OmZ`dB-j-CY}<j5c_C}*
zD0O&G_&Dvcs?BGy>>MVFDS8y?*UGCer|zt}4s?mA{$i^r&m`KZXHWocM*~8&3HD$}
zIhbI&wn~$gxub+S6*qKjbsYKXE51$i(DXWnOe at YPmI8+$_ywt9s8pdNJ4vx<j6zY(
z4CTas at vGJ+J)E3#@3B2{Ogoh>yp-W<(|_}0L!h9cpu3#I`4y^|n7uA(-3wEbN)tnX
ze`i>52jHc!FNETZPYnd)#p4C}R!vThX1qs&oFotD{Rm~sKUpmibp}es5KopN1NS#L
z<c7}i+KIVEHuVB?sygLGXK6I7>Tv9ivYCS+JE<1@%d1?Z4NPXtuQ$hX*foslRWM4g
z7bi9t5`f=?2dbuv0XNFmQ!$dC2Alg4912McKao4+3l*xh5qDc*FhG>A6Pf!khn4MJ
zO3<r;Xn0_&Q!P)DE^(ZTW at GV7RjDo@8U-gQUegVP-nEo<)PQ6v7tw?dANy2*l<Z7L
zNPjc}cQjq#m`ef^=#HB-JONIM>r?W4*Mz7z-FK6>l3$}b at Z@ax5XM&gg$C~SS2<*`
z843`7)sKd)v=u*gDQ at gCZes`J#13?R{S3ZLI%72qzKbztv}Gf+zTQy)cKBc~FHU3)
z*nHkKN+xIKsaLo6z}&sccmtXvIAxcwO%PZ$sRrb at +UoQ-+xg2L;m(jnGB?D3$dAd9
z=&K$PRyFSCrLJf)8Bw)xUrYI-$bK_|{b+x`QyojUo4DW|w9yeh4rq^k-choCv&AQ6
z)9fM%p`tL_B|gJ`OlqSw6=Rxy>ns*bauk-|CLxQWnau>t(nEe-6qY8+{Uv25!_hMB
zf<P0)pCFf+OVOq+<k)@4)ZrB8VKfc{tr_D!WTt@=kxP>#p|%h8sw=`)wuj~xgN=BD
zMyhyN-LlQmI6Qx;#fxSynSd2r^0^}{R=+ZpoJo7K)Lh<&^p{ANM|SfO8WpigJBzKf
zKhYap8DWLhDme&U2oe1Ocn2yW;YS6v$HZdMsU??STJM<QNO?o<g@&p@{?EdT{Zktn
z7F58u-RRbjFQ;n#!Vbt)JAU1Gy@@`wnOLo650XZ~J8O~DHgP?|LY)UBhZ2E2FG=Vr
z7`P?$5p`G*?Dl*HLoF|EGL2LLvSrqjOX(v@{)T6CXLF{!7Nol?>Vl5#WytONpl44~
zwi5Fyy0k3h>ZQ1}bZiMT3r>w+%iOrHLkezLIJDywhe89?6QO@&$)?UCo?a7qnvU#@
zeYzaxT at q1CYUfc_nGOqy>}mlInbapE$iS;E*^VNTjr;_^wqFKuei=H=oo%>}r(^F0
z)^q*PPal?-*vyKC*aw`)CiuGk?#9O&#ik({aSaK44e~2f7Af2HCoI*D4uq<hCM at _a
zUijgA8})|*U9!AHz6z<F2>x)gmI^x5ot_1?xul}>HuJi+XaJQ{>ZHSNL)y1~Z6p<r
zKb~{)2J!t{*`eajXK%KrtN4>9Kf0zJkCs+w^P}8jJb|`oa8GiMRLcxVMMvmLE0Zxi
zF6Cx%64RlIHFEzBJbp?tG4>A at 8W2s?RV at hGN?GwYF?W(wGjK%a5!f`qs{yH{YVA9$
z^M{NXbAaIb|MW at s11I61+%C4b(pa;YST&QJi3xsBpGI)A&M!s}rl$P*JkHYxlCa>m
ztF1_J5BEZyBwb|{YTn}{RN$#%WTJ%^p!1)QT)d1|aIc=w$v+1j(uAZIv9^v;e~otY
zuRj+lLR<_gxc at bc>1-$x>|k!bSkgNy%jm~VlJ?YvMuIEvH<S0rU=$W}c7`S-t(d2u
z!P%Z05S8N<8f7X}7Z)JCl2-&}!hH@(8h<b}C8GBPO<4$y7kazXiB);8cJ{HUtYqpU
zVrH8UQ#7+narn at 5tj{*?{?^z<QWVmxeXod>CAPMQx!ADkJ*Jm$6$FeF=#Acgg`O=m
zNng~m@$6l;e{`k|Yf%~r>oc>Ub`=?vC7ju$eOHOnTCpFm>JE)hp2(M%40gK;<V4A!
z5|I?q9k$Le7|<Ao_elx_RNihLY72+^P$nr$Uf=bZ&I0(c!vbncEc05YFY^&EB$E7!
zRmW?_&D$KXUI%c4tmK88y%^sVvx`!i`&IGCNCxP}$M;xr+`Ui+Xahd^;C0+e@$Oda
z=cX_Zbe<m;6-m05 at as3fkFd>c{))CIt1|YFf2zT9>;|#s;Futg7so&_hN;%O%Qg%I
z<!#`J=;Gb_<|wVHKTs<cUowYhRJ)@9Mi&~-tLUYFQN&Mx8l}*6`j}FdKn{AJWYx(p
zFvu&Swh)a$^rM at Vz#nhxHS1LmwYT10ZO}`Zu178)-8B)VwAGk!uWB|T^Y*@Anfvs}
z5zsO!b?)>M>Zi4$e4T#xEUv at T#aibg(eizatTAQi(Y*SQlkdlPrT*1~J|^;PG}!bH
z6DuQ9m4G0m6;CCeB10RL`v;OlrxtXSU}9!NDu`)=j8$o+!$~<leYUXO0QL16TXe_|
z^8U_KvG<?kjAlTD?gRhPd~aYhr1*UhRHeNQ#58b$a8134n>Hc2{;>3>ec@=y+E_3R
zvAmey923fM!zRWciJt=z^5)0C*1VMG@(jU3h*Auw8I!gIVy_SL0UmvJ+>U(BW;6oT
z*P>o9Ohw;DzlVY4ReGnllY6Jgg_aX&PB0lFC&I)yOw?=6$P++z`LfZ5rgEAuIN<bp
z`bey%&wAXHy~XNo-g-C5Sde*Q10WM3B7RulU|we_addRXApT1)DO7rFS0~lf8%hwt
zyx0~^Vb*x!0#cCocdzs-TB%}iun#g3F}B<+W5U*%`?qvR7Mv$u3-X-TwjQ;8Y;e^3
zQ2|r-^o^Ytoo-m|@=i^c4>u8t$Z}GdTUVelVU at cT0azy+3s<wuMF@<MwK(c6nNVnB
z%jcPt#CZG-fZ^uxE_K}W&LqSBD04oxT#>ja2H<=XTv9QYJr$DJLB^}3;Q|4&JZo&o
zoffa1d47xPZ=+XLFO_g2)&{FuM2KDH$*&vis3N~yK~>f<iok!7Ngv643Rmio at gB*D
z_EHxE8h~X=aPP at jKUJMbbN;By5rC5hOeC`1Deoi<n^*mv>WeC6G^T0IeH<7fht^HF
zokCv$eh&UR%OAy`>-d*jT7Gj@*!u>#$$@g`JEVk}qU>14gJ6-%v%OGpB6rN`-^*sz
zd`ma>vRpOCp9q(M^}lLrOA~}}N0_yG*tb0bPmppk$lcq+`~HkL&oP)Qg~&SF?n+hj
zSRSmr4Hdzn2Aj4neY^Al$&TJOq~sXO+#`B2rY?3DSNuzeSCoiB`wTYf>1}+B0F*$@
zc!WT=)zIZQFQxE2TCyER(xWhG;pintY4?`m$(OJ`Gk(6!3Rn=|M(kbRnTxm at xCulz
z-4x4cmRwc}vg@~*1L(NW=(MBll%<5J8)-~%e4UsH`)3-Gi0UYs$I-xvBb_Wzi8+5Y
z0CNxk|1d7!*<pTsY*$H-BNweA%<z<33HL8Y4$Pm=ldQ|hc?^4r+vjv?Z%`5yS;R0R
z=v85658ydXF;|4A<nLTPThynh&J(CiaOgua-#Co$rijPjt at r@E#!k$Tc&Bead7{6W
zCpaXlaRdqd&X%q?t*=2MO<@j$-?mH|cA5 at 5287^QM4}Pv_|H%l6SbyPLMoVUpBH#o
zGs#_oxuCQEoL+H+A7%8^{CW2rqjuwUPOdG&jRou7xcc&2P4AX;O^}E at Ak5XpB7F0_
zR-EnwH<-F`iEVa7+Nbn^rvWB-?Q>Vz<8PNPKF=hs)>rJ($ylSi&Xq|Z>8zO=z|tfF
zt3aeswU at oQp+7k@XmHV2U^y*CIp^af at AuH6?c=*}4A|H%oo*>JXR`~8D!a6uG4h#j
z`m`<%&FfPWH0suzHCa;k)K#agH+my+3sXW;q5=FW+|a?%Gn<qW)B5|@x<x(c at yoqS
zW0Bs(lxLA9qUYAQ{V at N^=wSh_`@vcCY#Bz>G(N)Pt%nid8Nc%dK$3&<A*N_t90o8c
z$?j(J?deek!Rop4QD7rJ3HQP&pO$hMnpd;E`^&ap9^37PPdkxFv^1BaHkxzEFCXen
z$|<ss8JXG;FxRyw^O|Xht$mUp1z5+ at ehtx&PdN%usqeNx(?0gNQ=$vS_X}`6P_UO{
zs4B`qSr`)ir?L(>R=hjIg_J0`8!o?2Q8l~6A-DWBR at o6qurB}9Y+0)C<tNz|Q>3or
zjIob&I76zaRTlZ5dQng>ySV!^)m8F~(l5w#Q<~V>32N5Fu%bHPT@?XaO3;2Q3Wn!T
zwZDQ)94W8xEvP~<7esgtHT(Dz5uh5<cfUCFrx&Q>9nie{{f8W3fjWedXG69<zeDt1
zL8<C+8OLbo?$=g0Imfe6{j(MbxN3%;jcWr;1*rjM<k at 2RX9<NYd%hlN-SUb3XWw^M
z9+rf&T7wR&OCSPa;(R+@>|H~D9SdWye_Vx?>@U7jDPMW(Oxg2UmYoqLswQOQC&u%?
zo-6L0GE(n&B44Y`C{YK^6#IHpd0jv4C4_XI5bZ{c)IK<+kGTS{P9FJwzOV4B?p`uT
ztpy$B#X*sYVJZNVNnv|EiKT0n_i_zm^yF90h8d=($DbWpk{j&zk|xoZ7FCfX>|Sk-
z+Z%=B<_AhHI{N`$J7!_)m}>Ho72ue+&Bzc_Jfa%cPM_8GV5LRNA3aDhsbP;w4T;-a
zmC(|DobSPt2w9=zdfYw9ciCDEn|`+ at N<MCl1?Wv~)uRp=ucDXoZsCDE at xxd}K1E(a
zuzzdQ)&=6UwEb6YWdR?=pYZQ8$mF2PBx;8-#Wj^D0T+J!@>byewz<Lq9T(3>rK~N?
zmdf+5U%QVzM|p9)eu4C}WOz?GuDnrUrR<ZWj3Sxl4GY at wvz<DGp<cVin6DgzZ;BX~
zGzD at 9Tno=nAC%HwDiOVoBmAC>*-{#Too{wIVeuKjNQwE>Y;{_{S;X7X7bP;WY~vvg
zcP`X2c(l8n4nnY{`k?u8IOX;O^*(3&iFyPc7QqTX2ha-~mV<js=-W9U<SHHQ^h(E$
zGPW>=9l(sRiT6~1GajRa4Wy-^f(8$WOK=Q{p5Rl)dc#7?iXn|fOQ)P+W)k{kuPOx7
zRk%j7EGFU%p)UBr`g<5uz*bME0-diiAL%?m5WbD$+eMwyVXi%NB&3yjdEFD6icy~X
zXccNlc939h9BFpQlw(=wuPiDIrU-j@)qu1A*;BXSjcQk2C?X-K-;fo^P>J7ba<S>P
zierY!2<<iQaX}5kvBW%%wuMWk^V*|aJI94*GdvR)o7)i;2xMi1B9_ns(}J+V^-ho}
zOCJS4POK?%kK_Lb5y=F2j)G}5ccB+_9^mt at Y1IxNIu>FvFsY)E=%Ve>N1C9jt8O{N
zDI4}X5 at zJH_q1!V{5zoqqo0KMlW!Oz=TLWxH0Lx}g6tV!2_9*^W7;c7!=Oq{@b*#+
z=~v<!X?fb4h_Kp8oGoLM-(0cD2gGJ_1<v7aI(RBOhdNm$h6cQ63ekI~{GXgZJ$m4l
zsicmW{pZ3%W8rhW=!AESNMi6K42Hth!FZI4%(%jJup at xSI#+MXr5}FzmtlDEfFW*E
z#l$ek32z&RS%6ekIBBxjT(~({c06B+y6Nx8z?e24$OLrrZvd#li#i>}%+YkY5)N8g
z0R|Yvqfs!Qbvc+=DL;Z)^&`215<TOKI1p8t_ at ei~>A6<T6V-WeqHsJR3g5<+x7t`U
z(_tj;;W*1Nt;e7n!f=>Yr6!f$FNG4iA|jOG#w7*UhLK^)=gN!fh~N5eU*d}^`$W9q
z=26}8Q%J9FWFHx at 2)$UT3g3`PlzFPwumd-Zh&<l%D99Hf$2hFU&csS{togezaJ*4H
z-9N4WpWRh>AI))H_FUfjE_mqHy0N`lC+XjSQ^SG1PtZ70Di$qHpw+g((_~Fjh_$B{
z1uMBRpA^(%RGP~hvG!M)w#Obrifm5nxx^UqBe?S*NA7~gh)Wo-Eq*H8asY#scKOj_
z$0i`p4F|gGr`QTRnasJTi|0vMtn^B at rkV{4KRMvCZA1j?W}wOVlY at 0OmZxgzJ;BrT
z;tq()Bx8j+gYi8FS}vjBhn$s8XoA#~b6A-vVF5t|!nb-V$4%g?N}JwjODfUV=Hvjh
zYF6OgDJUjLYTcu6$;7k#oWZF35A>fihG!TCkMvs+Nn>*Z2Jf5Rlh|(%$YP at RT}xZ1
zo?SG&1G_#;7s~@a%)k`e)Fy(JdRgrH01&QTOad&+!rm+ps3pzdX0Dd83)HuIWFU$s
z7)N(yM%tr;1`Mn-II(e<!et0fh{4-PjWv=m-rTZ)5;=MpeDV{Lvn-$u;{hJjq`*P&
z4G12io>c~dr>2vPleYyR&4#XAGcB8|?uE7A-+79>oYR&!lL at C+&MDgtRr1gMPen1&
zCd3JjydH=MFZ=(XnqbMpwOAm2DuBIlBqH`RKe{mq)i7ZlqH71h%OGV(97(b?Ip<A<
z51c<A${>5^dWxRTa2M>m+cDVgfKr*#2FEO{D>{uTx)pT9mv5xU2q*<RxYF-|2$cU%
zd&i2bP5U(-Pkyrzp;-1-gmGxJ_c!{V*iAj;^{5?T5Q2_$nUWvb5-nY)65hlR<C?o9
zgTI;4$&neE at k?JZn?mLy3uk2O4(%K#SFny;HxuMh7^CtRFd;_N&H<Mso6t-fb)*>5
zJgoNKyN=Z<Jhk7Ial-}tVcHJEqJDZ#ktM21$Jw5++pm=gw>p^4b~$XV(Eq_lwBi5D
zMl!QT-=4ISwOn1-XX6jpoa*|myOH=(V|J7wi59h8IuKOYT{0LmxM6V%EV={7WVqpL
zt+bFKS)%J+77Bx~0k*;ebYU{$)GO(Z39Ob!Cyq#v{MY}HYTX0_?uJUb_9kGnk8bmG
z>$Wjb^5{5u%)X at G*y+q7I&2uj9tTX_Y>q`8&P2Il9W%AE$EpK^8 at lC~>SnK;4xg26
zTbAzSmSOdM53v!yD#&9>;vIF^*T2UFUdmIaaO#s!2fAiB)5L-SyfOEos=4O1bvN1*
zl`B%P^4iyv>T%GTZwiy9kO!aYkjFnPBr3)O4m4n{QaAr{t!jZN(f5qO{_=frgE91G
zN>L9F*i7C1no%1yAoX?KN$=SZ+6 at rt5m4F&WV2W%lv%VLOJShxh_Fa_GA9E5^!zFG
z?!<za9a^J34_9S^!VVRoZ*Mp_if#+2UA~#tA)G*t)o|L1V%4x5TUpyl*9$Lzev_P1
z;5KOfIb5;t!4$7R-OH1p_ck-^4k&386)ymuZ$pVe`%__SNHAOBIHHdk?8g=;3S6v3
z#}HCRbNljg>8$3E_rb9)_GJL-_<t)6U`|hcChBoBz;eF^T>Z(hHd;f|esHw<&-3oS
zoAG**1!7RTL48$K!nRYzw|&gF_60ru`eju=u1~lvBP!1F2dAGpP(+hzJRAF0us{te
z8KgQ&LbnXo<hn*C+kc~(<>!RrKMS;b4koyS!tTNUN>qJ{S96va#oUm<hb~Xb`Fm<b
z!o!e&j=mS<Mwl>(WjS<QTOWUjzN^g;`sbFfQqs#|Iu*~u*xxjF$oFS$(wTUb@=P<{
z{iY at qZ}v{20kd(Qa|A>jjMnMsYteu0bU`{A;7&vAtL3|k{q2nAo2FI{RaZ-0%Q}iH
z!ZK9U{w+fNURd1kNON?z#eB3+93z~4KHeWFojF}S;=n*@K;FWoh$~GP{u7Xp?Sa4n
zr<{T6ZrpyqhfN_F1Z97#KM}J7=};fGR!Kt1V at 7WX+YPNN!~xUr0-^VR24WJmdIMC-
zjNniBT at aiMP8*5_*T1Lk*r|96(F9$A=U)Cs?kGj7VU(?x8v5pM9n7}tIdx71*swOa
zd+BP7Dz|65!@=)f4KWwi11 at eLo<`m}9Hy|HEm%=o{>aMz%|^-XFT$n49d+s<Ew~_;
z2-8ity(WmBV^8yEXl-Te+nrx01Iq4S7I(D;GuuzdAn`R?TBNM4G>1G?5!Y=P+u^dn
zvt+7r0s9lFo*IdrZwH2zld~wks0`#51ay+}N+zk`v^$dsI&0R7cP8gA1!TNO{4m_<
z*@vo}YX<n^+<`(H&s2#idMq1Rh;lB4VMM4X5V-DkwYds}5i7q7_vUpc2%XH at JJq0M
zgeFr%T$o;*?1Xh7(luRA>zz(!va?(TWDeZjgR$B3S+?}TYn|e8;>R at b@i5W$dHe!D
zGCpCzzJ^*xjs-RjDWr8duhMJBT-~yk$sJx~qrrbr?=!ewq85$Y1yKi4Vn|8&9{yHu
zi1EUgcr~XV1<k)yL*S7h7i-Q|`*RN{&=^sA9p~u1#!!JCb8pi4SXQe>kK@$M>(Ck^
zB>x4o{j=z^{9_i)d0-v4(^&35BWU8!+O*sI=>g_hYrburiHOi$^3-h-6pHLd5#rx1
z7~j_2H_ at iAxFz@G8(OtEPAXKECj;#3F^=e}Txvx766iXD3zMRSypW-;&sQkC_JtL5
zgE)a!6Gd-+BqJFYqKeY$C?R^H{=uh)%BkA_lZ$$4On|XtkX(RTv!C4d-4S9M>9`a@
zKuNPM#+6mPy`5EAwW-$#q3$$MW+KAc#*ja;$G}i$z;rDQd>8&Afr_R8IDP-QT*wF3
zqTv)4tJJ#9*IgSJB=P(E(10eWDpap^t91WH7*1#vq{}5%27ZJff$>sOe-k&Zz*dug
zREKX?<d1ZvJwgIZ;vo0u49m_y_<B9B`0+rTzhaN5#HbJ#M<jDZX%DAz;djMu{d0*-
zXi){BQ+JMaPAIoQkz%`+pGYy}_LEc4BiV~?$JFjaLE-2Io<ejGc5ZOlbi;f3=VDD-
zKo}tg*$YOYHm$!D at iJli#VDNx_|>q%NE+B%91{fZn4*E`^~w|Z7-Ld_ at qaT;D{b#<
zKq|i&*CV;Y8yM}=G`Wlze)*e>LxP{|_Ko;**h5QPrYedTn9zb3tH$qV+m+pQYT<T+
zZ^B-9!U+NzBwCw%Mh4{;;VLvF*P~r<LDSBIH}Gj1aTiOz*PrA2;7qm1V`F2QsgGtf
z*`V(_=qL?AQ3(mzK3`esJ44a{o70m~d<Nc2A*|&MEd!EZe|R$~KZCP$1S$L;?Onmg
zb04zQ*hR}*{otE9F#gV{Z<jWrYBhq>yU6rSQ2%WZ#rnR6iTClM7PHET!zwUk&gWw5
z1(CFgXL=un#)xGS*Z0~*GD(WU)Pt3=FjiTjo_Vf}-fvE52CL(@jI0oVlWB%75PLf(
zlG$qd6A{g4AE4~Q*%m7aLB$HVXthWn(sdh<f9;r)vwa`bFolaB_<xoc8fu!-8Aa0k
z=68eaC;=Q|*8IP-#P2RFAr%HUTEpI{(&SJqt2I0-0myu|M{3KqHV6J(=LsJIV539C
zcH3^|W#mX-p4<g+(Ifb*jgt^XXbuf9;RBi8x}z2cph1ge_U`1(XB%*H<`9*!><~UV
zmCT2NNhch{Ts9SF1kLm_FRArf7tCU2xF^HkGPb3#hoB+G<a*w_BD`{t?U{mwr!KD<
zI?0(gENnv#5OSF4kiEin6yoJQ@%q5=Qsksv02<kFho3vWh=z*79<QJt9|g2UCoSc!
zKvEV03G^p+yQ)ZB^&!x0m%vMvs<u))PLgm>MSr`2c&S4}J?#S6UMN0*D6Kn%y5|rn
z)qwxr*mOt<Z$|UYiCEeQuPQNmw-XvZr(p>#AK0q1WG{b9a1A_0>l{y48S<Qd%EdpT
zA5h(0ro}g;o)G9~W|!rW7T2pCIF((4%Tr0CD5ugAihAy-@?O6z%t-|+{9^{$Ovq51
zV<)JfyBs<=v=PsnLdQ9P`3Mhi4e+Ew2ii+&Up)$%xxMbqSqsr<YM#7Id1R-u%0zL>
z{Z)W*D~IB)YxEfydt6=~@HNm)#yfbl?~x6BNID)5 at Q5S)zT_L};ly&kM6kJYfSEA9
zj9M}q1X-pG+m{Gb{k=r8rr+CM2-o$`-pHBx&c|NnV%zhp at 2eVK7h^+vR7?f!Ld^w5
z-X1BHk{&dq&S4VQRQ3g0!&m>9X2HopFsF&P!riN|4uJ+2_e;bah*$icwOA&e_}OoG
zrD<<Dq4l$y3ZGYdjErWUQMhE!{B6CWve3ZGb^{JFVLG85CzK?!VG{;Q2_MNbb4OH|
z`Alu*P(eq(iIFKxa%e7cH)^2eZZ-wwy=kdb7I;Y_+jrDrQqFGcBG3j<NNHUQUEt)f
zR&o~(W}P}h<oK7{oh0ok2TjEfYB;Tl69~gbMPUI9u4U9XU>Q^T94}mB0#$c8eAE?o
zU^y^tVFMc=YsCKq`aavC*e5n<L|a|co*9jrC<@Kd3z>$aKq7Ep+p^<!PHO-RK=Z#s
z$AEz at Kc2ryoax(3pM%zBcT at uADwcqmY?6B=4^ud;-j`sj&25ajWHO5J^L8Huh(Csx
z1lp_L?OSdizA;;V4xbl%-%T{zf89P9e#~b(T>(5GI9Dcck5?BZeq>l^8kvEo(#0rC
zNkuNFz2cIx(?5V|<9r`=f)O;0l(Nh>i0AMn(xVpS4Ei(g2YxVEe|N<B!b+n`id8Dx
zo0YxEaJvGfbJa>pC=t?MeSh{RLTV?RpqRNUb8eq?p&5tb`zi$XQ>_{rrvMSc{7HL5
zG}w#+&{|#Rvrn8 at y*g(=y?kyO1<3m>pJ(6e^y@|%04xsZs7_Z~Hy<Fy<sBvC<Mb!5
zC-i!^4Px$c8ZoFJl(XWPNd?>Y%EH}w!Q02v3dyo5n(}3i>X<4rl`=gDL8ML=Ru{y*
zR~`E+CRA5YMj1jRezzaJ{~^gnS>{*UX9?@gP<F+i=#|7MC1J7T%!|7KwN at tm5}SgU
zwFTu8e;aQ at J{BVYQcRCQGhLO9Ex8w<MOnPMG9RHA at VM2S#kh02;VTbpN}EA6cg>PK
z6?uEu<DWJ~5Ky3+rjh?&+#bot5<<}J-sGDYUOqqlDwZpc2C at w<o=^jJ40gq7yIeBY
z--L{N-4|$u`tooR`+=htT^_c2V8({FR7hR-9D+4a;wrUTMJTRk<&melAacn2Pp-JP
zr$cXFe((9t7O(GQNh`k~bvUj6%=ZL5v at 84n&j;jUQ(Dz9Djl}5sPAeS`nS$_VQ>cG
z5-b)$s1c5RD5_69r>(@|5pJZ!#Wc9Zy$v7NLXJkLSXQE5Zeim=PvDlThi?kHOeDa`
z%4XrEOvW>!Uv0OZJnQ_kfTVR8 at AJ0eLZOr*bq@`)Yd|&Ut-|mLjq?hi#lVUX<qrGT
z``H5xhJ6`oi1(DjFYK~<^ph%Y<CESCkxSH at lZXe@JIDs4T0L0>RlX<wj6=(|x0X?j
zJW1kd56rPc^>_b)HJKlxT9 at Umz(ZXAk|iy|YPq~7V3LS&DeRS)vIn at -u<3)JzRwy^
zCS;2KM2y;q>Ga=^4n6d at 9%FJO6Pp4YX%<W)M1vltt)#rhbzBjd1_8gJN_A+3gck1-
z2P!$tYcVM0=kxw7vS(VnQt~eRVWA|ErCIH?zAE2#rMsKy6ijjEvj+(}T47;2E(=)>
z#)Xr5zSKkO9ie(ra|tod!>h6!gRznok)Tt(2ZrDR${LCS;2rWj{6;tG2oJ?XuGi0A
z|BVDh7Uq*ok_LxWpbs52^yt<2l#m_2P**CSS>*VKse69Oy=MR5GFvD$tXkk??wLoW
zR?24XN`u18jbXM-8%Lq9rPGyaLMKKBItZHD&|pfijTEy^V^GV|g at c7%`)xQ)T=c`A
z8a+p05<9T@$6$vW2_AxS$ZG{se1^8&Zf4hm(cn#p{eux1$Iks?X}u}yrW^VYeiJTz
zN|{`IlpKx2?4ZV$6lySRL39h8zF8w>TM7EfDM<g*K|hjfOu<Q1%x8}_fn<@SzU at gd
z|4O{|gr%A+qKS**tjgg4=9dux*{_uhq#O08@?s*^O5qd#^@9l`MJ!67I>-xv<h``C
zy9l;13Q$wm=11x`L=d1}@tNBPtrG`|JD3=#Nx-c2_w^9xg$LL`YVJ}SepMZNOjg0C
zX(IX){LQ?2rXojTeUoBFIjHB1!-M9mJEyINluotz^(}ACaT-otrra{B%hj(%$?Ye=
zE0;v}_k7SrfsCt(1b-i>w<IS(AN?jZ=%66>C9GL55NDVFH0&HwmtBAUt&`xXTvVO|
z%%4N5nC(5C{bZwshKR!sYMnY{eaJixidUOSbV(;j?Kj;XS+5aB&-6(0E!w)aUeAlf
zN3Pe}zfqVs0-0Diek6A)hz=LIPGP<8(=_XTP|xI*xprZRd*O#Q7g89M#?>9Qa@#6T
z$IRn#a;9X at cl-e~3V1RZqAU0Zzm`>fOL4OVc-A)MXzO7SJ&j6z#hU5d;s#}Q%EPOQ
zcH$XdpWI*AWPw6;+22Jtq9Z$b&5b2CXC&tDwa$MvT6 at mQ0ITM+vfZdpUa|mB=p}SV
zb-8+?iWCeA@#(q1(azKl$k~jTbs at 1o&!j*i7#G=9KqN0#;dk0l+X$a8HcU(ypbF&z
zI+sCS#(KLWx|=mgHaOuGmsc*!tBJ|hlpYDRS5@^z*k*KWSQ|S)yL^qaLJeWz_)gCD
zzxfJbB+-{)F-AeOE^|N)3nBTDJX?vGXPZKIJb%B=wOTLhGTKk%DXkuP<|?1&O=|NK
z-Go!a=c;-e(cDAL#h;I94Rl7-oPU4yebQUCLP}0o|FQhc(#xM?JG(bsmNaL73}m(o
z;LndY=4waI%LQ^~uNrm=y7bCQG&QN!0mNx at pi}^Z^X=JtP*iM(BR_ym!u?w+dnN3j
z!O(t(F(QB+uSCBdN6%SvTJu>`#zeOz(B at vWY?*%9`l8mkYZNqzJ(v{xVK8%rZI>#f
z?h}7=Xay at 184C%<-Bt=IQ7`GtUa<V4Hv_b0NmeGZUj0lCeqCnjL3W>s+^W#nL|HJ?
zGOO(Geyd37Etm9(WH2%J&uxffFceq-+NK}*p5xm|L9$B1u?53(sxy`~*e|!`MfFG8
z3j8t2wBl<93w(YR>>KIco1S<<el88F0Z3I`U|j{J1>&_v=i9?;m at 3Mpm7nb+r9vnK
zPS|obT8V>che;<&i=c7e|5BMN*R<w&Jtqy|%2;xAtKo#qk{db$Y9lxvI at tEX>z;J$
zoX-v6I!t~1W4OQsi*f`@69xWhzFCVDZ{=Hry(P0$l<yq+15j*Hr4JXvRw?kpXf*{;
zifjr3DkRVPA(`qclhKq5Ol&cAs;|h*I1HV8itR2)3_i*{GBudvY+N}$Tl#U<O}g at w
zwvsQq4NJkY9cD~Ly4|VMO|6JDTI4YSs<b&3`>?HiG^>S(xP0f$6i)Tu!5fi>C`wc<
z&?y+Da|sv73u-7KP5q~7|D5s-%XQwIG*`<tV1s0$2~|A$^kurrTq6%Guj41~e{=H;
zOg%W7{9UnI7-4SevSjaGX at hBryBHBJ1fblW)sld{I-~^sjw#m{{krggv^L*Whc{S9
zEH#69z7ItPrlK1()bjjqMx-5bD|M$^8ZUiL_QNaBtafZVXb4O8J at q<AL5w%=L4xo1
zSS`g&m;6$p|22ku`ZcSYAXy#szv4>?`GoZ+(gFp*a}qfCO7bAz3P5E~BGQ0B;6*og
z$igCN`kh6P!9kL&RoDGgCHRSn(Gev}Q**VA^W;jf67Ij7Fa~rEja6TBZ;}u!dI6f)
zt}_t=DgqnPs!enfVJkRb_ZfeIG$~j4%g_P4-4TN~=KX}Kof2M}`&jOhkfo{0)+K0H
zn8b-T&uAj5jA0Pf_~ON4Cggi&FrtX*XaC7srB9 at sztD$2b>c+uh$$d8nFvuT at gPw_
zS5O<ge;Ok!@B;Y3JOXV|!+Xy{Q51x{krHp+3%NiYluqc3J|r;npZutF24V!eukaCA
zI)t)^j}nGbGGN*jCx^o=rnIvv<Cc;Wu>657y`XUs*{H(fgjJ?>o2sVP8?v7*`rBy3
zzNJoHRZSwHrE+aU+n|sMQ79}RO&3onOhxzdvrA3!<Kot@&(E=&Ux!6cQ1E*l(F>Yj
zFy-BJmbOO{%}zI<`Qbrj9)~o#3d_+b^3Y@%dhKeu<wL<H#mbJkOK#jl?x)u3I;k%+
zSFUCKF2}{ZwMKTQ)wIDaTNRIBW=Gy_$jx`v754Zc-gV%Wco>Q+JRBda1!I*g&h at lm
zzgc at 2H)k}b>5&4SL5+3!ObIRI;+`@@P19kWS>5CQ9FxVNK&7<NRZ&CLudhLQ!d4-u
zd~34V8(uKtYU_dYPVGxSV)K;KZ3*%#dygeAvxi-d(NfcRo-a%zmZ#Bg$(ovWyLJu&
zx09L}m?4LSleoHxfoK&<_n$=-o1kCPvqt!8v+;TKz?Ydo0vN at 8xufz%18Z8f&;a?M
z-rBjrSf%_7OvA$_Nt+!MV3gGJg_W6 at SYvC$WbA;I^`(-3u$wr~yp9<+khFJ`1?4(#
z%B+q=w5vxI?B_S<DFs$$2WJ2n7*0A`cmlj?ZW7Q{WZ^;Rg(#%yal5Pe5Ak_d$fEB}
z9Um5|C{$a)8=C-Ytp2$!K=*y4zpFyESwyK2FjMbQD*pp)37KiL%@q5;{rgKchq|%I
z;je;Z!KkNOJCTnqVxopHK`hUSh0sm;gNsI4<ZRE0KAqU6eHDkk9bcBDml~T(gD+8s
znH*oyn`F1fld~X<xS9SPUBunILqH&&1qUssVO$Rm8xAnY0Ufh62g}Wg6eRv$D3%j=
zBtxL;fSvGUIn&_}TB$`A=g9UqjK<S$Qo4J8FGj;n_xwig9;p4pA9@=NPQV8sO0NZ$
zCcI=~d%{Y|`)STX0fW at UFLp!pY=6tB at aT*?&4wprUx^=4Noz+Ce}7r8b-AF>E70O<
zYBr)bBUHkyqXK%!L+xtWegt8ve$i$W{#Qd{kmZTjdVchG0L21Y$$uL}o+c+mjMdfZ
z1k6b6OI{Tkn=1EeeLYn}mAYn&cHq*Q1;a6OA=V|ekDKWps?VIcKvRcj1QcqyJ{u*1
zJjG^4rRX?t;SP>=hzj6qsgc-5gfUR(0GP)Jcx!S<%meHN)$A(JYQtOuqA55Y5>A3S
z<oY=^L)|bOgNAW82k{i-DSV;RQOd5RewbdOTSVQkApqW$QA<Q1y at DBzr?xp92%eh%
zXUW9z50?AA3v%4RsD|OmRR`Kb5*3DFhjV~-B`UTG&WPI{5J*_uw_=8>%oe(|H_;LW
zfn`Io{~lJtX~G at g{J)CFu)TJ-1U0*XvrcVjU$`Om;Yj9&$Tm}0Q#M)^HKrP~3;&vl
zvb;58uD<m!bNXvBOwYKBxpKS0B0M`ZR&B)up%HWN=rQ0^73v9MbZgnkLnxzvW<ap3
zyea*nxR(^fc#?Nw>5+MpjGa&oaP*VHHo~-7i9AM_S?<fNDTvHW?pmz;GQ5Qw{pM}w
zYn^&Y`1en15~_t<kCLR}X%sNcVwZUWeI$?6E0tTntrcp70YDY(=Yi|y#BS=ANcUde
zz{6{5neU|v!#9#@*Jnm{)~dLdM=Y44kwVZ?@@XRWfjHp;kWQi5D_y2c>1S!z0fzaE
zN}T->U;Lh^RX>@AKTPKMcND?&%RxEPTt8Gpx_-n|9EU%M(hGMwOJu8;Dc2b~>LM<M
zhCExLP!*H00One- at q9GP)P`epq3M-MX+WB3pjEWDHW_bZ69J5Wgw($bWLW*%nS*5F
z*#ha$iYmSrQX<vwCm)j at Frg1Yx7x7{Ur!SXtGWJ+y8Ly(<|saExAeZn at Iuv`rglx_
zbl!!-YKQ9A#?1Sh4#5XxS;zbST$GRGB0wf49EtC{>4@<bL*~sT+1*mKJq`x{@PUak
zE=HLTTuwM)z|jW8P$c<G+A4GJ at Let^o7B$@MeFb0gTeEZO=#R1)lH$ZM^=W-(GD?)
zd8oDo0n6 at VmKNu!ImKvFs;G!QC5?_xCW<sAiq>xY`ukdV+cxly`R>tOuLvs;F`%*l
z<lzUZD(v1+ASau%t|h<L=#z9MF>dFc;$i_SZ at uH;nZ~N|UYX=38<Rh`1n=;rVMuD0
z`#`M)8^hKz{#8&U$B#T+c5@)JCzn2me-$^-e at vt<5V{{D*?5=aa0|y8QK#pBOPNjo
z<GTn6Lj%uwY7nDfBkkoomRPV$VUUM&8&tb9m!KyqYq&%z?_S&RM{V;EL$1;NA+I?1
zP(b;*Rr<b^5z6yc>-<Q?`}y;9;cniiVO{uWDM+(ek%y7i6b32&1cEr~R91qx;$Nx_
zaB6l3C>iw`6{bnQdj3u5Lno1ulw6()toqgHxab*w6(~TN>Q7LM#hrveD%=h500}xu
zOZ-qN=R$|ok9#SYX4d^A_d$4lE`NlxD)s+eqVD=#!*Rf-dUdNk%_aff=b2}^d*4~H
zeSpP&sv&?v8e?+$m8+@(X(=Up&rBG(Jm&q?EhB>%#{}#!i&jczU|S61cx}mydSwRO
zP4jWp7oc7YOK<eZY50N}jV0h7dxrAWUGr61#i|3SVp6jm^giI3Hq=a|t1)<q^6sJ~
zv7$l7WeaDaY^8_s)W|mhBdd%Zf_^6^WJD+ooq_(q51;hGgmQo}Pi6lDJs<_8u&wH+
z&3O<4#|>7NhnT{Yy!b*%I&GfhUbkB}$~iP(jbe#1XQ|1D%j2ucBb#SOt8(y+DXz4Y
zQxydRa=`q%3}qprtR|hbZ_OYF&*-;+hbNwE2DVhO`_q7|<Jk_T1yiw+s5pl`|D`_=
z=`8yYo~n2!;txnwT*=FhHlz1w9~LxFV3e&OeRh=+RFr#JMOS7ihhkrxHKOD$%I=be
z2G={;_jMqY)ji{MnVNG#xZ;PI>x^69&oc8_8p}D_5 at NEbRh=0FOD-seFuQfz$tilV
z-8!5m379JKmy4z#fhV$Ho()Px!QWKOPCh`iZT~jTQ&4D93G+DRV&P=bR&3B^=lNh@
zM7{%uijLK%)dOKrKhj{v0ST=(lf8DlhEkGLa|s1S>MfCk2vB8g(F+ZQ_kxon$9Ax_
z_!lRuDj97O at v<N!&lC}V!X0s$4z_?1N$@e619?mcs1@|Y??3oh4XN<Y2}UgXac^(n
z3J?@Pu$2@%nnfUA0KS6}lMQrQ&e=i}Excoi%2dy7B^w71yp(?=A!%^1ZQ2N+FGJOY
z2$m%s at VSH8rmxf{@NA={-QV1aAua^=8z49?s~>#Yhx&{CrW+iLcMI8tbH`?~@nfN@
zaH()-jkjkP!2YZ!FRCocEmSh$9p*5ijLIOSsoV}_h>}p0nBC1M^F0{ZOuP}fT97_q
zmy&5{-oe|!T&Bu-V0OOYkU;=kJ?Ibg-0~?v_*udZXJg&8;LwKJwXFpd{>2F6bKG8e
zBy(tH?IL8O!Agv9n{MA5>93&lz2E9QYnQN)UtExGigz#&L|cwKG at 15+;fAzLGd6t$
z=g7;Z>1jV0gLo82;a>FOf{giI9z at Yu7RX4v&P;T<{RP+7oi?dU^NBi%7Z=Ot-PGe}
zhJ at 1@;HTMxmI3Xo*a1on_Naq>PYjtCoN9NhA5O!@Vlr^ZdWHpC(h)DEXAN7z- at bY3
z>hS1a2rUQGK<d<dvdOA)XXr5JS|hq%HxfEy`Pzu-BEr(pQ2i)kq3^XG>Z4zSp>!rF
z7&3eg5Zjl0AWntTm%3~eah%+jSk+0}L1VX|yK0+2_-OkfEMkoRTQQ-ab<%{^TDfS?
zB9a6hg`z1!)6&yUpe&{D(Rc)4joinKu^|Q#yH_cT5YcV1QO}dmS7yzW1+G;Hp0n>m
zlwIesYxKt7k`JV8nu6n8q(i@%iT|?du at wvkBnv%wHD1pac`>N$rXyNA&oNO(gP<YU
z<Zk{w!Q-Rh)13AFW-W?>r7up2$fm}Tbdt5ggpVNUt&h93cVErJCv5;P#FH5xvNc3r
zBL>gB1d}N2pq=ai5rAhZJafA&<QxAuS<z9iUR$+zoWjF2U3|>NlLP);#2|mZUHV?V
z>5r6Q@?3nCEx5A+1cwIsM0w2Me!0rGlP+=uEU}#4tsa at wi+3I#y3*$#ZBL{x>Tv2;
zpGV;{8rNqvk{t*vX&YS{AD04<i^>kiQ$OGy`6}lK+}nTuqa?i}KZKUFF%0cj0GWKX
zP5Jor)})Ro+BED?&Cx=lMuluH1AmJyGno-CW4=L;=_!&LOW?aA^PC`8WB-i<uKg_C
z^E6cJrqpVD=F8;CRC?H8JaLD)_QUxUzkWp(^>b|#iTo|EzCAq(c3<pT9f+-P4xW5@
zMVi;p*TQC#TA5IG at k(hb$LQ>DAy5#qu`gXM0BU~Hde(Unm;aN)_77S!I<a)@F}pC5
zAVcj^4>@w{KV5rs`n|wRaCo$K`4Er|jGLEMkGgea#@ZY7rzvLs_Sd1%@4lyT;4?;x
z at 0*3XT_Tz99PM7Ln>i0gSGF+n9)sD<*(V;u8lKGfNxGJ*MIZ*PK{X#PsZB=V-R*BP
zMiTLr*+8E}kjSau#bJ_O1NY^$Ka$XkKFPE$IUv1^(bDLPoaQx62Q);T%m*u@^;g0(
z{HZCmHF6$KYv}dM4*yNk1Ii9`0W3hm$Z&En7iHTb#lcPwrGI|w{PC%zv-=M at 5b2_~
zv-tQHbZvH at g0l$F>u8g)nTRwj3TH at mL6*sZuHi#EUk=xvMOUcwdt>)2B_qKh?-i+K
z?%N at 4=)h}cvv$oykLj9 at kd={e)Bh7QqaCTU;T_V3`qJBQi3RCk6EOfVFj$e{`uiTO
zEhqvh`(&m%^2L`EA5{Zt;~8VxLP6mvM931;{9p|$2$~QRe<FFsA>0P%cZVs32F4oG
z;eRZMyi at C2=6kTaMq&Pt at 4PsKL@2Sq#pQIO*Tot468s0ZYjqpSxjW at 4s}u8;61V at X
z;;Iv_V7#Qu$Sw^SIC|^|mS{Rl{WrBm1eGq#s@#sb-jX$zGlp7WR_%B`+#@87*as+f
zHWM}qJ$4#+x%y!+&~~5GR54tIYngju?nESjg9rFBttGy5_sxP7_jFcQ2Wkuzg?3w<
zKXmntzPO)gnd97!<20vZs|Qr+lrzZyoWUT1pjv08$7T=JB%5hr14zYr#tkPT89ios
zY!X!&b&T?HO?R>hP3xZ8XTQ#7-c)@25(csM;?YtcGGQ>a30J;|T#iUCj}X`A1lev;
zu?*EQ0^$- at u|`s9j0#{y-b4j&L30Kd>dh9qu^52TN7W~xpbVVNu;<#CEx&Jbl35Z&
zY-q;ogDl+WSKN at QR^jnu at 37#H&KALxLBuno_QnF9;Sp|UM9A`mAe*<#?%?sGyGTWh
zv?Ka8RpSur`z;teorY+h<`Up|o6_uW%r?zNNA<7-^?V5!{kr)9!&Nm;N%=n05pcYC
zBuSXf;+6s#*QnhH0n3CI<g<knXAu6wdtNZajC<LT&alJ4%x7q)RMLW>W{S;xv`oPJ
zxv*r|1+n=H$F(lj-VtsgM66>qiDwO)inxdWCv>V4nu2M~?*jPInM<ojwq54nq3Xx~
z_Z_f7YcKmqNRK-CMSh4d<AfBrRrqzfhbZ<U!hKW?LtbZ_S_Kg*daLf=g#5=W&|Z2w
zeW=pqa`}<%A;LN=CVY)`w;1Qb*IAw=J+fiQKY5C}%u^~keb=@}@YK?U57=!Xb^3<H
z+}fg+ at V+A`w?dVQ8pI8#{RFl&Bzw%qBLFcZ;u}-zB9v;Xa8Z<pxg|*GL$D8$_Zmix
z$#3i02$Z1p5CRab(z(L;kX=EFUcsZheo~k3s(wi5^#o)5 at Qa<_;GjSl`-WM5ghqau
zn>#*lk1Fx%-A)wSJB)mysHCNi$XKBxFNjOPG${f*L5YvJ^t%q%(25CMs1fZAQJlGy
zpgrge7G*7NHf<HXg1(Ol#ihrC#*5&CXXjO8grrxSABvk<T!xG2Ntb!k2Ch at 4-p)sA
zFr-zP2TZu&oqQ#43WJ!diBHeg-J7?Fj)C5o!v~7(BGUMdTlgbvY-t&NDIxUJUb|N2
zU8H0r(^9em0`T6ntm_u}GThaCE1DDKW<p36-*1SVF3k0zu#VxsIYy9-wax*$P+iY~
z;&1&HNC!>CzKnB8m}?|Uy0VXB(#+K at V*MC+k=7n-Z<?;5KQH}hWNH*_0(TBk#993Z
z;weVBN at azX)X{mx0XT9dV-^08U(!Bwq+6=4vj6ZhE0R^lY|mb9G)C)l$vMDrYEV}G
z5D5dkW~z}zg0?kVc#>q&M5-B18T!6T`o6Qj3kc)_9Jcv5JKFS8)Rd2SHgmdMZTnAO
z^jYdN-kcNXkFJw6lUn!nD=1;LUtK=G_q>x3ov|CzrEofZ)t`}tE!rxo5T+-*wb4*t
zT~G!2`<k*9D*`{fO%Z+KyN!=QA8rt$qK(7jinic3cuEQw$mGWceTpEHN`t1!twfwF
zo9h42&`qd<D7b at hIn5%evfiy at x8qIKn#zIrjQLo2_ at tdHIp*9Imw?u-tr{70U5X_J
z8RZ0HIQ at 4j2aKi4Ru#9IR>-;Vr84dU5KM~er(iqUt4R5TCmjKT)N|>2tfX4#tb)<%
z<iPilK6rk(50;3<Gr(kgl+9ck7H{K=KcJDkbrv7^+vez at HY6VBua$&-*HU;WIB3oT
z<?of~%XhQvW45Y*uWvz0j-z&Rq-%0Z0xsM{+9IN%J8U*jPtvr_4A}&Wm&-Hq)37=S
z*(TA$faLwl02#GNPldGQwdIQ2fC^i3SgDzauGh?eUh|o*Ycc)o5pk6otUb5upQxY(
z at -ujA5BB*?uQ8aM0SBZ%9Lc>%$|%$W6c!k(t$L+unjAO5+-c!au6QkI5$0vc%lyw4
z;}WYvAUH6;zO?8eec7M%G!OfZRcBDax&F at rwLnoNg@ftW02-IEAAC2x@;!<*M0{FW
zFkOTwCj5`o!N!a2S!AdL-gp`vYYonT#C$fV!=hk%YsrMk47V$Vg)?3{%4YpKi&8(3
zG_LmdzQ*I}f(WY{<0<(9)5B0IrP82n`FPi6 at Sx;G`&k2ZZ@^Yt_U~(aiM;<O4_j%P
zS)B9r39mwRt`Ghl`Ev!W2_2TOUoI=&!`TXBf^pYi{S#fI3sbiJFaMklH3sT2?;j0W
zWIQ&xdx2BK4PpVgDSY8!{HkW+T-Qpwe0%=j0lkP%+Z$O|b*Ug+^1cePW;p2ADLy=N
zc>`^WN5wokzhJ-f=s%tay&shV(DHI=A(Q(;!q>EPM%D}skFSM8LuJ(H%kH6;Wx%T+
z>Hsdqr8q6eg>_lQsWFL=%}rezYxzP1s#8YBZ)5V#$|5Lf0ufM802-H?X9w^C3%(T|
z?w;F+0d*eG0o27Y0{;CLFXShzZbsuQ(O4GM!n}RThuw`Z=M)Z88m0Zr$3l}-`CqF+
zrvW-mm1f>4&@x!c4jyj5{Ki=8yEE3q)t5<Dv0Yyj1M0QAsC{rTL8V-XrthASGTrJY
zaYF}MZDmjlFbX5+c8EFv2Xfy&WK0$3DTbb#t5N}~Wb_pM?AKs8eNyqG8mUqB0{4T3
zjvwv6PGt6pKSFt|(0LBZAFw53%qhbU(~!pQ`NP-xl{zM73sOe#bk!1>MEhMyYH>3D
zVjG|RRO>jLiE7j=J_;QpvY7i2p9>KH%<{obZkb&ucQwC5QT?w37srrWS1}SVp261c
z?Wo?2D!7wObpD~1iT)|h=5!f<KZ<TGcg(;+V~UM0bF6!>m&)}h)aOntZ1aN4o~qtJ
z$@m9<n!wt9#8c-^DEdobg0BXaBKs(TK%;MMBI7pjo2A&!yzOWO{87x#oPn-uY!0iG
zW?gS7ie}e=9&j=iAlw;(snIMeu_s|V_F65WMX#~^hG)fgb&@&lt5 at obQ54?2ADqF+
z4CqX=hrJ{5QFfS}56Y4r_*^sw at fdvx@O;c7TV3D>lvJqC+4|}Z;v)JqQtD3hWzLHG
z!@wlCp#V8H5hQP;jU#acS at K}EEm(R}>el}ltlFdG;M*ZodGg-xEeZe-RJ28Y3;FgU
z_Jv>%x2&d_)8re7V6C4U{gx`-D6E7q%er!?j4+<rC)1jcn|Y}z6bv51C?I at QK{AfU
zBlIr~O&%KpHX?4&Az~mfpLm|Lz|N|np+hIRJ^m}!R94+dR_L_LDo7p#-q4X#^#9%5
z`AetoxdAjpVws7nl-?OI1EQpqz-MHsi0%yi4BcL&vlL=V#U350#?aVu7q1UE73o4S
zHA)-Hg<H{tgw|SU;NMDVxiu)g+P$Kr3QQImR*g_?qcP01d7b89Jy3}FWgLjwA?0BZ
zz}Qh at Jy1{l4~!K`Pf!T8qi^wiRg_9AbUR}?6UW0{7^RnX4Qz(4q&V9;6=#CSA>vi)
zJj+~`e!s(D_Jgm$LxlJ`-%Mk#CAE<;Aos(dJ5mU?FV})Xvn$w6NtfPoLA}Ve9vU7U
zb@#n5{99U(M-7`)6+5$$z<~s{th`uu|Ep-bdP#rf{l!x_sEp{%2%6D at hHmv7XE7VI
zot++qXWRaTLj>vL(0K)68=qU%w$MNnh+Mqv at n{xjOxB7-3o2Y**YU at El4*K{%_(X=
z#xqYrf;P2`P*iAkVH7ffaIGQ=cx!>2t)wT(C<85 at 1^IFBzkh#f#^+NbMIxD~1lT at y
z^taKqf{I^FUDZ;8+32C&F^WyJFBlsJN+VSsD|V_Q^6Zw;>)3#gvLIta@~|Rts`~O;
z*()0il`I1jP=~h7sK}@|Sl3WQH at gcv3c{U(i$|-aN<8`M<3)Sg5F-SCEM%{A9IUiV
zvX~OR3dNF=O}oEQCjY#+NRoCTEZpvONvx$b&FYkz?g0eu6HgJq0MvaS6DGxC;LdGo
z!oT86w0&$uaCo1<zy+XXojM}Y8nZd8_vPt|SS-n7TE|&3aZfv>z9-?&5*(DF<ZDEJ
zXTyEj7)7K%lP<W5yeUpI9(?({6VHgU<B_Jz2fu7DI2P~#={-QM(nTB$0Y47R?@6t$
zO0&q>BoPq|@tUU@{`n|UfS9ef>9?gsY|}(!eVm<)PPcpe4nbbP0R1P^AbTZXg?T!r
zoCXt5R0Yn`B#P)B5ZZi603<MT;z*-TBKmK`y5hQG-#f7}+_?Q2tkYi8)r?Tlz2l;9
zbH|7_Q?B-`+CBAW>=ML&caqmd3kR@<xhCZ4Kw|Jac(dg%Nt%GcL=uch<KBW2kxP{O
z7GJVvMnN5!bez83ZDvh7KTbDs8&14+bxhRCKhcs(;<Z27xH{gXF}xIn{zDG$=BmW2
z1}{z3we>QMG`sBDLtG at -HzS)7%5UqWMZk!%-x(3Xj==T6w`=Rv%0lG0Y|2mA{}>S_
zA%RXJA$+n+!O}(#mIqT3Sx~<9{Hl^p)b^~-ISeha*;0C_>5bNF{FShd*(2wX;Ab`s
zx8N?Vw~1BFH)>&Y@!R68W)y~(4SGVsh|r~7h{ahBqWT+|h2 at F~#19D6zWF=(22loU
zCSt#~ZfCD^NA*6@%c5AqN>Al;C4kQf98C;?5bV<OIVuOjX}HzdW at 82?TzQssY?fs7
zOSpJH=2q1IxAQ#jjZq88OG-MWLEX<(zshB~{iKYP)D0Q8>sdEIa)&taMQ#|hm%|TF
z;)i*(dsuBKZU>{M!OR{v{{SCyAkaCBMr=tdGlUI8&9O<xZ41FZxf52r^0wkJ^GjYW
z6CR at ttpv!X4uU`$3`=Aka#A&GS;sqZJfTi)1J?y-ViB&K at xClxMuVi!y%7a{3a1mG
znTsEkEzv-W!3HXE4J$u1<i)4CdRYoh<)W-?AGxMU8Ii at yC$cN)LLW$MXHj!D&}#rm
z(TLJ-Vvu*N5lfK at 3ZOMbL;wy_4ma$tgJ`ueo^O(V21j~>wv>oVMoKUZe}>-tFbyx-
z^C=#ksCOATWi5^?SL%t at ua%N&o(){~fE!t>F;O-jQ|oU>r$6G48Vs-r_FDM-ZWr#i
zmP;)cqGb=E`@S3D*?Rb3ufxK+f;%{L@=^^aR62H8mgIm{PMBF$9v<nki&9rnD-YPs
zto+g8^r8PS{uFpX=e~1;Iz@`sW^0;!?bZ!R6!Ve*m4Gv#9*3cC11pR*ZYh{LY<`&Y
z2%skWbi`4_I35WzafGlHN{fQRST82K&-soq0kpE#_qr;Rb+*XUkqkm*7`)IG<hO}B
z=LQZp&AiR41OE*pr(ehV*qmq*z0=VPapQMNp&CFlo?wRc{4B+<%RpYmDYSmFuyuEV
zX8rVYde2YWWX;lI^1j(2&^ii4bV&@+LFP?URVj`?rf2odk+UnffNb<01}*(<S5_7$
zPi*epl#PuV`DdV^(Jk!dd~o}s?o1XMy5F2puA2E;IYdJ@%2w7s^~@gX5#RTr7iFIr
zDvMs7)_5T at X4zQEUQj9;(Bsqx9fa&vI(6y^`v1%<GVY1yi<$L%q59%+ZDGy+*3}0k
z6QC5k|KvI5E&9Fl+ni20TWqfLx%BD&vKS_t(lpw?TxKQ{uC|n!b^jqed$d`@4NwjT
zLlGz81;Tkou&`&o+kQH!^%>ywD*%c9H^?v_=ZRf?Fq_J#7>_K6jl!>Ze&K$WsQDTi
zjZy|9G<+nd2=jLVI`KcMLgS{A8__Yv=6;uvAy__s^>?pAPZ%??@u`^d;h7G2;TcH1
zY($A+Rf6+QGPx1=b8eQES$Ti<)OEQu$L&saYJe=7mF7~IqOU}Md~%CTPixgtD*!&^
zjI%R)V)vvp<p58w9hM;o3Fqsn8^!jNh5kxriGnn|gHCh)e~T4=?=b8VZ=~JOyTRx!
zl?lTieIVidviF?&upu?PzEw6 at zWXYEO6~~I()V)V$qv9 at LkMAcOMnR6lkI#s(~Q6^
zI917BEgw}2U1NeHNET?@BgqpM5Zx!7+pSa6!)4Tj8qdK_iCT at chik3)aEjeKli{s+
zVaJQkL|0E31{?7l??X2)XHuC at sdy0q7VA09Ln!PVL at Lba{0ac&h$y6M;7Xp*Ch&%K
zpA~Z at 5?wT+uo_>^D93oFG(t7U&<0beBTu$rm@!A~#joQ at 2Auwy^E+4;PjNscKhcn!
z!5`~Tf+BqWd)N2HU~olY*cw><-I3DR9y``QGgG?A?;zbea4e8=pXO~^@6_PH>t&f~
z3|;7_=@=keVN`=F-@}Avr|RkLodLmmN_*!T^?w`dv%!~<T*%8AukWd1$8(VE+*G-e
zO)F!!rtymSA at -j%dDQJxd8klvjt{G#2Msj50VE$*)<B}SbQoBh_Ty;J)xFrziDWH~
zG4Fv42yZ)iz$+f^pBHX1h8D<FKii+3hPUU%XgD#;qHby(6z+9kT=+j}BBKeBY9MX`
z$W(ac3B6`I6H<a%5JCG>j5OWaYVR`hJx1R8^0<g6<>_|bW*nkr2{Ym5F+f49jRDi5
zHV{NADphB(gW&`=5u8%V)~A*#lKJd at cG%u;AqYJWkjJ6fF)yL3b870T(~HrpBDq;P
z<0FY-K-5oU=MZs$*<39AUY-1Pr5bBo+Y6nmbIs`+escwqGz-Wc6f{@Wjc0f^=smU6
z204Y31;K`rD*Vu6^C-c<*Y<wFmL-l<mf!RRx^`8%Asa&=B8 at El1&GiDA+DwA;E#b6
z-9=@`9txX6;J5aD^igifNR}aAIxu at FIvZi+uULtk$POpa0E*O={TE7~%v34=UrpUT
zfbK>>TAIv>gLj+KIF2Sn(YAfWc`w$*FkNi;fVFTKHP3+zc$3l()rYH;ktotUoVwF8
zU^&Ba_b<PP{VSg~0nng_XvYH;U1<g2)Sx-m%K|z}u8o^5Q!|Q<N7k9dq<qm8e<yWn
zyXJWihh+0^WfzQ4lD;;pKvfP_PmC}~;f}-^Kp6+lZ(d7-^e7mZ*r!l)=2K_N>LV<%
zW);UAw!d^aX4Ecd)4uyYj{R`hxcI1;`cOX#5jd^-ll)|R9e8N0lY7RoLHq;HAS at x(
z#+8X$oAgRpMR+5~kuCVN&hOj0N4ouR=Ab<WYnGakP?z$M+M2~F-+XcuMZqayLCZmo
z%dz{ue9bC_e7q>U&@0*EL$EyLyJ#{ufcrN~wuj;~vV7WiAz0pBctsiVd3lCO-%ty%
zz+oIUrA*gf|9`oA?G!GRhUY&s{N6xwEPQf;scWSv;TckpI#JCJupN}t2t)?5hMvqU
z@~`VE+E*4M{YgV#t#Y9DOx|A1GdKOlZF0`{eMIUHj$KNbJq`>84&9oCDu}Q3`Qq{F
zHEG<k{};#(j$U^Sku%kYX?yrcEnD5?WuV}{+=^eVQ}t8Nfy$F+&`Gj6y+kbZulI+f
zq|=Iyb<VuPE2xpcRD4V0v7d&^8CF5LUVc#Def&6aFFJjW%uhmS1ikz!2M>TDKGlj^
zcnNmqvSH6&fP2+p{Vm^1yVJ_rmi^{eeCTNGvkhb;x}0XFhp)G4L{h-C2a^(j-DaA^
zq(o!Ie?X-y8-P~<5%2Qe>!vJu#1JGfz<og%Ss(kmGI&IeS%=`YNZ+U1U*(TPV##k>
zuQ12AIj?xfH&07#G_!SmEA1*>nm<WW)c3lG0=HLzqm7}aw}^-VlxxJd&J!Ptv&e9t
zAAY)K<gJ2pn5?N2c=MiveJpSWua#Sw{QgZ)p+%kE{!|Q9NyeVsqVZi?{wrZE!5$E^
z|K#dJN*e#anK$G0z!^qJNzU7EkIy1TT?3d0lU5+Jda9M`=09g(WF>;_y*3=W7nKuo
zEt==$a;ukhnDFWqCiI>)dYh>nh%7W%fx!oUZm4RVtTqYmVEc+SIr;H9i+M(K`7s7(
zt;mjY#@hcgW9A{>`|~gCEJ_B at r)uDxLl=A-;&T5aELobs%%XKKwaFbc6+CGv6SFTK
zSsu?D%Kn_8Z@@hJx=k9Q at Ke~OVZp+E5<?EfEKzvY*lf(e0ek)!g>xMaMrLkxbPet}
z@<bply#%ES9S&7id5xKk)C;fSqFU^PPEz_BtGv;$b2f~KT?>S*MG(Zpg~Cx1FEX2b
ztgDNJ7SwFtA=3omP6dhuRd^ta;pE*Anr-|OfFAnWpnjbkPZ<dn?6npdtDoL|8}d*8
zRFRB#jf&- at B?@EuGraWSEMj`Q(BpbbuM!#j8KHgE*|8g%WxsC|SW;HCd8|YolWg51
z7c$||muym}y`q$WTKzD!7&$YCpOgDXPs?}%F-!E12otLg$mn&<q4(z!_>y(EmA9oP
zl?wxyRm;;DBg1v5?dh4HW5?7(KC!H}@q2-xG}n>27uGPt-W)(sbQ7Y$DbCY)cR-B)
z62!8A>5>BSKPYW~_$=x<t{A06t54$J-dk;pm?bY<%GI>ETbjR%2T*o+56_eR*=c4b
zlOv3~;~e;0ApoL$azjP!#KeJVl1BY}A~{8)N!}$aLF=|_v}PD;9aM&{zDhKw+dT>5
z-Wt9W7waK>w4pLT0345YwgH+_0+d;JgqG`+uUMn70%P%;qJ`|7E9^l=8gqzlM+1dP
zq<nKLine<jGLOd})sRmhxn12W=l6?8 at 2BFwd)N4}+N|Xv7wiyq&~rF}ZqgINeR0pp
zTRAp}ys%$HV_S6(u|sP at 4do5YdW>k!%aiD?<>IxXs}3vU0TZ$;SNcSoG-#KaV{fqN
z>=*!~sUM@%+A-(mONYP``&E}@rtb^;Rfa$tv|7-UWMjitJG#L<P>gBn+VPRaK%;o8
z9`BDTzN*OG#JF$fs&bp8N$?seIgvPJ$r>mvmkrL6^2p80kMi^PmkR%~^^^nS9I$gm
zd*qKFbTi$dP8sgIbUyvS(#VJ at _p8RVmy|;IE=#<<zgQ|O*Wy<&-M!pZXQu$Fm(AqX
z86 at W-d{}q9E7{K!*+CaC$JwCjy?E~YzC)N9k`vW{T={V39!=~eS#yx9?~)MCQ(oEa
zn6rmxBx4h$|7EveZvzvU4IEd_eRVksH_YC2=OqT$U4n?2H^vsGmjNJR!J*40r>kgN
z5_TK8s`6j>84CE{m5Q?Y+opUY$j4`Le+J)6F0qw^@zqVIz+Y(}XQRm at tQW2G3YkLf
zGQC}$^yB{Qg@{?#r`xfX9mLqakvwmQW?Ua)XJ|U;497~kO8O*~sJYxj!0w0AAy7vt
zWW#;1oB2+FI&Tqi6GW`4kjeJgaYfSi$ldZ<1aVMb1Bt$hwXY*N2`~Rz{IXu25 at 7$*
zBRkzvIUnrCK?c}me at s7HASG=+AKl7a8y(YB2+NiQ)G57m)}WZSBL_F!0%4U}j-8!-
z@<CY*$7qMsw(6WKadfU>H2^yzKCC(L0@`$Qw4TTZme!UzOWp%XLX|fu398EEjHA-J
zOCEAOqlVRl>;{znYZ`GBE4$eAb<nTrJXI`O{H~_E-U<Fwkk4<6sfI!J^U4pvh))9~
z6FKj-)%;J)x|@fQB;EV(GiAa-X*He{MbH4)FClOlym7fq$1b9^*HU|pXBW;~yO^d@
zWwGjUgoRCa{?v#xq?)8q=W9*fG6+c2Suf;VS1K$31&{goumG$IywPF2!x!k(n#vT7
z;9^<&shOQHO8C7J%I6t)ulzSgoX=;^<OcZ%oXxWFY8FE5x~7OgObT6IX=|njn2R$^
zO at j}ou#33*Ybv!e1Y+vw4Csa+E{tj!HqEjhJeMl7h0 at o%Rs4v}{_QP+IMCQC^X+(t
z8#fw%Ww$EkasKAV)hfAg at 3L8#v%U#hHdC_8qH{lcc3uXtN|SumBDA-39xYpiWp&{Y
zLIh^&3LB6A(_DBzInQxSg;n<Oy!NM|&T?T1XF1#S+VTA<7j^XCAH-2~u3%2)eJ7S;
zwR>lQL28x<9;)sU*Hd%i&<w at NAMPK)o%V0!wi&OhsZ--$FTXF-KNQuxQ9Maa{<5mn
zAg5ChJwJz9easDbq2FHRA*9XXA3a;+uyH!<ONrMBT~LU7**io3ZH$)kXqbI2<Q6XP
z*TJrL!QqjIL-3AIb2s<Q!QMOAXKjBF1+3E}S$&~I0f&5vhLe{!KYxpJz?mJ|DGe>p
z7fl`@k<Mlp!krZt?a-L at 4E4Z6my>V&=r2ySLH+dXNRkCtQ8%Od+eyklFwN4KGOlvd
z##GOeMw at s|^|C%MoBouOy1vT0EUsqB__+LjqS*f!GkXEi1hdw%8Mv(c7F0UBKLiYI
z%$UeGpHa6-Wh|jMH0yZ^!aW5;(q2{h1RaJK)GaS>DUl)uA9X*xQAzok at p4xRJK#FI
zek`61cM6odUE_c~+x8&s=gTz&i!R45<Bs+iC(U{89*P?0ob`D}(EYCFDM`S<dy at D+
z!-U7Bn)V~<c;%=p>p3yM^b=(0J>J)`u&ShvoSy5~IBLSt3R at 0QIz|2u*2%a}a}EDU
z>;zb)uW*vm^p3dPdOV`g>|;28Oow)uR=1sodLmpC%DieK?1baDPB*wbg{e-%KM<S_
zk|8*@s*j?1+~i+TZk;@?4&p~68#KxG3v}A`wB!jd9mbWDV%BuDKB3s~>Of at BdH&_5
ziXH{ESKWp1R_jm+EpL;R?OPciwr at b|-kRi;bGLabiQPEOk$WIRC`*KwYjUylC~H$g
z1K8@?fG at uEv~NSj0fA)#r?l0W2Lo}Lyz;RY1aLt}Vx5--#az_sT6eAUI&aC60it_S
zHkPM)5C^jdN5=5FKJgo;H0^y1rFh+B+7Qu|1CcqI3<?OA?L%(-l}W3ZYzc%C2MSe5
z>A68uz8M-^A{LGp0752veT-~5#S;8wdfx+r^-J~iUlZ&3YvF&fg5ca|q6hvJS4(So
zEd}hgdYG#r8vQ at pBY46Y0m>qhyE?r5NY3)cvoVrT3Hg2;kUML12ltekDmyydM-Qhl
zW#y^aWm2(PufK5?S_8FFv*<i9QTgmf^WFwR6&Srm`Sgha at m*?!hJJjE>=#`IY#xS2
zUHzug#rcExDw`%#zCL3DJ&A*QYv|suS~oK$ULSNb-;wv&K}P2;i;VdpN6|=Ie(0fL
z#QK at +ABi+mnUJveMHP!3X3k0L73uq4#MH(RtMM8Q+ahN8P}cqX{F(y*b(<N=@HLEi
z5{e1F9vGSU8Z+(G0{cRTe+pX2GbYaUVZf>xQaw9?@iQD7_{S4Vg_%9HdfgID<j0$)
z=B9I<2Q5#dqcs4vBhsolPE&yH6U*OToO&V858H1i4W=Q}Pl0?bP+gqiA+l at VrSzAV
z$yJr@;xQ$VI09MKV7}tr20|WEtx}Z-*pzs@%UUb$lCFkqDGBQ<8_yg;7Rn>#kJNPb
zl>7jv$!B50#-IYs(R!9Fn*@LLWC;sQ>K+Um`cJ9+aEbj^L57R;`wBVQmC~-0Upno!
zN?76M6ej7o?A#H^MtWocC&wjx$0g1~{F-%t(x$~LS9mRG1*k9%j+SVbwy|D6voLE_
zMu_Pq+>LlP0e-1$a-k%wK9g!Ahp%)_I703Qi)N_zrmbpt#f?U)q*{@E(%}mm)be2x
ze51-_OIM#pkwfZgtn-(4g{_Ut0G04hq-P80kl?5msF!qhLE$HES5<p;CPm}h#)sK`
zEOBGt#;pBTj?$tj1+3__{YfiY#(8m7?xVNq1B<H6)nP8;PO=-cV3=722Vw&T;M90#
z_*Uv|)srl9{*cMt4t?$dXY$WtbBNurT{#C|{I$SZb#?t%KgKLw&8%`OPU9A)2e{?F
zI|#Cu<RJQFo@?L`xXcD6Mh|?AXFs|MQ|4{M9_l#A59Pa*`#&vreXN57Z$_y&ZY(1n
z(aE9I|7%_Tmo3{ZJeT_f#RI?P^cAK9_emSMAVo)Ys_D7YI at K2EQh~5pir0A->m2kP
zBe11a^8VFEgaB)HCk8kEg9_*5*4g45g+#qkUDaY|t)o4Mc&8QP^yJ;-{F5bQqYpb0
z1-DlhIKfs at ZMA)=1p~pt(5x$r&kul`;eMN(QfTJn6yrx>nbD)MyqWsGNhmWLKuwt*
zCM+P1Yv)>SLc9FBrb9l&dshYPj#TP8ZN=L!(v(SydH#%%^+8 at wwMy(s9PC}n4_Z5y
zNU$DpTgWj7l_>sPx_87;&S(FreBalF?q%ZR>snNr7`XP+<nGsazN80{8H0Oid_Pu4
z^TV?TDOb-BsvOPtdg)p<#C#zZQ-A9<PXxemG4%G%U&P8COtnOB_lAV+9)7Vj at 56iW
zAnlsTz$bB58fVf?x;7?^W at Dq&{`BN{$!cq*B}~J9j(tQZO51ocWaYU-TJv3tQrMB$
zd8FjAsQN3yDsEM*0P%-=uG=8O+yAvkowUe8VxWNrehLY at S90e{oWPs+oBrcwat}sS
zk&D8yuF*s%DsQz6Tz;mPg|^rfemKE`$#fm)!e^XI0Y#2fbftHJ?BPU%rOpXJI%+6n
zpB6 at am7uR>6D<yrt9+_W#GMRrygKdtnB&u3q<t<zS=3KA>lJr$)y1ehDsJ$q+)Cb$
z!2YUv(YQ-~ShaqOUh!$+s(KwK15#{;yS4yfBQ>xlO582tkZ`#NgC>w-LlE;4NaS_4
zuDs9?2sAq`{*dFN^1c<1eBqi;q)DU~SZEBTip}%p3<pt#1yU{Bp9{k>;%FX0kz5bA
zvX^T6+x$bQSzo^e%N6S3%<C>C<SL8RD!5_>rlWs?=OXS;-J=?(V9(f!5zVs3v>Z(s
zkiLD0Ala+#jM{A+wf#&OQ)L5KZpHi{srP6=H&GylF?r*0F)fS1{A$svd|`o*ZWZqS
zQ`CD0Q4a|^h{Bg<EBT+~m3ty?EdmF6j8m4P&5d7XEjvvm&2PzMP5as-Z}&smG3zeM
z_s6cd&*o|_ at bGgCvH_U%Du at AF7FTH8FIfVxsBjK2nDEQ!F-k at oCl`ayMw<hhjy$m;
zGT<T*dC-4?N<IZe<U at pUnlToH{jY}gw0S$=k|q!UY0&_sB}3!SJKNY3ac at t-Lmu>w
zAYSidHc$}xkCfJ4jXh~@-b3=pej5%>f46O3&pP5rc};_k^LAk3N?RM`<8&MG#{PY5
zrIl%}(QFD=TO%jQ4HC?n!dv3XSeX*!N9{aF_UHTAC at d|hMvP%76QncF2xqv;v@^r|
zyToH at qlo<WN?zlwBNI`)G)%Vn(;j|2)u#*Fn!geZ*Rb-8BghL-*(&=HRTyT}tf==Q
zpEJ38ixOs9Greg)!Gh(Tv1R)gBVPc;*C$qC=ggOEsuSa}FynOkNn<6^0NlH6lS8{=
zuDq*voS+Dt$w$&CL!T7 at 1wi`0j!6Zp0{>!^SQ_%Rg~){-yHFFqs%mHPGREAlEpsqf
z8<}BfR0;Iv at B`B4=nEW0qhp2&=v>LM8bEm)*KxE$Dzyq5WlM3ofT%b{%M~EVceRcD
z46$P2ape3t#QZtK)4`9LCY<HQ^=m4c39X1L7|1NH^Ql4{{h4 at kP@xxWuYX5!o0-Ay
zjeiGvz`~Mu(FBFN8HOBYGaHx~g}E31Mq?6OALA%pm9kLOi{sYz5v-wU1n%i}$7h){
z*zw2uD(l;_c2Kq_m8NvzfgdxytThkMh~Dsf%(Ck37R*hwADBOz&b%hveO~eK|Eb;t
zX$RYk-YWHk*hkcQp7ber2+XHji*|#KFrjW at A?MNZ*A$*-VltR$Jr6>fT&BcEu-qTm
z4lc!VjKL6zR=NESl(5CpG(&B*aiqEF>v~|yLqp2yR1Ko=Q!d(M2=%>%$VxFmhHBoD
z9Cu)}mS^5aj<e&~c!t65vwzvH1ddubNHKp4`Xk@`%(}jHsJayLVY3^V6{{sbf12rr
zKBVb2NGkFc)VH*OjpSrLh`omGYCO(QH+V5EW|wBi{eWvL{cJ2|sg1K6lRJRd%ncBk
zmt@>LX+3u!uP;-)+|(A=-VUD{+FMnG+d=!8HMboEb6)q=hnb!63)SnI4jTgWf3~js
znPkb?Vnq5 at GEH~eG1gVbB+XzZ+ZL4Z3572n5(zH_Mbd^{onW+V(`XPkyUol12U6g`
zx&9c!BM#sfVj|s(uk)64lc)Tp(QBG4AC2`$q;D8IAcas}JFrGa-=_4o?z#9wz87is
z2HM?|?V>K&BUgrPVq!0vdIQgG5~rzed@@Wm=^v4kCU!xh at 5PC|1=F;0)l+H)KYAC<
z8Di?Rzjp%Zv7B}sg|bZ4`;Q!r`W)H=)Ngev-QW?VIbYMIQ&87KC1MHR*u%nhZqsY<
z4hM+siGbVsNe3c%qpR4os6lbfCa-R>m-s5%y3<&IROKx+7hRX!V@$_95Nikc1uFv^
zsK3ci46T(+Zl8MSIuB0^R+6$b2^_3Ll-ALGmMP!~{Cs>V>%YAHJb`(M&Ix&Mi`I{N
zd$$O{a8$tpdqV%!R(es@!t=St=~7N3yZnfmiCR#c*)8$f0?b1F=zU?p2Ti$wAx1*w
z%}yGgfFV-<0r5#b><ARAO|9s(iPk&-fmpE!|0lD%*JPnfD50DnQnV}rwUp)IrHEFE
zki8|OO6H43qKSRe<7X2Vp`r=pK5BEXf|DOl-ghw?Z^-{bV_AgKH{7NO&`15dKJp>L
z2H?_{>ITazl1}SbsOOq&Gp at ZQ1B&)#@P%S+D{SsV#c8XHG?nz=GOP!G0W_~U+~-S?
z$E0D6<(!5U?_#@$4FEglfHgN56xCd9Xq9z4hf)hWty>eE8gCGph_1_KAiXvDdp3wS
z6{PEZZG<~L`-hW4pxt7Hk$fO!nk6%Qd<6Ym$<(2t#rUyVQargA4U=t at GU87m>GPXh
z|AHuBMt+!6U-%yp&!`ZH50`%1)uCV^Z?t;~G0rZ_0g1tVj?kSgunvl52z?Wh0(cSF
zx6%6y{XLvr398*J?%RMyu$|o`I`Khn+gP<4Hv7#kl$wQ!*l|1D(i+U;fXG7sUK%bj
z{#XLd<i?{}AX*&heL!7XCd1+)#yzQl0jz-HX>SYra!t6hL<<!csN4j=O#hwF_~q^#
z6s?i)unBqMXZeWLSILk=KL`2W8NDH2_LgRUvw(HY(Pz-lt-WkavQYvlZPG}kBBp@?
zmh~#&py;md!T4V at V~r?c4LHj|Ul-T8_yhs^?)BUys$nMjC4b+DpiB72g$N}d at sA<X
zKu?J!o4{;2$V@`Ow~&ZCpR=CJ5YnKF%9S()SFUkxG-B3n*^RdN0mb$0TFb|!-7q+m
zZ*J}<ZLTxkGLpdOVfGkwL;6?SS<HDr+`sn9A{m%?gIq!}&uQ?{d!exPnKy-Tq`PbF
zTJv;BT>~o5nC at f#Qmq1-DU@)_+lzh0A!dq*iIKh}+ at 9$7tD{8r8##vm`E at Iof(@`7
zdW%=>6kSq;Yhq${{ImNKG-#|(H3-GLf$umgBu|3i-jORAk9FdJ|B_&krcS3}cC!})
zUNpM;A&Zq7BV$MK{hDCoFx?)xKom1b_fh|GI>=Ylg|c|&q)nG*HP%r;JGva9P5h2u
z9=X(G<aU2yW;vqLZ(}O9={LK;*Yt%F%MHtzf}iblwd-?6E1HzZkOx$e(S5`EqgdZV
z?h1XBR`&&a%}?;4iGe?4K^j=ZYwOIgoU$na-Cg*{nD-Cry4V(+HlI#&)(102ALQV4
zpIS>YD5S_!bHey_DI)@KU37E1x;4C*%Ovx=n88BUVuh6ufUDujDkDU3$#o?PXF50<
z$_`p?P#LfBOu}xVTj}f(ch)B(1#j&D71{%)y|E#to5+QU*cBrL!2M3t^Ecpd=CyyL
zlI_G~Oa5B)tuqP!#rRof*ll$e at 8s|Se27v?Qo+bnN9XA-)d4{E97Vn-Whb!y0<Uiu
zfczN?Dc+{Xlk7ECOB at Tvgj?GiP6-d~NZ9J4Ozcswh`L~<CX{Fiaw0GY4Sms&W^5O4
z<`FYTm)_=uZs&R2g*95kE>=KwvosAR*yx6F<Jb1I<~fdq{_gCw_q5v%{6EYnW5p|8
z%o#Z2nWsAcaV<?(#swAzXdOXwC9-?=x;^oZ*EjIGO3GVbqQ5Z)>Qero1!oO>-jqH7
z^uj%92|p|V=W;n!q1rz{fE+e!*7d#-B;$zilvrYCeg2<pU!szZn(a)?KxajMBbF%H
zk|o$n8e}Pn7&*W`*1R(Xf~X|8x8OVzVOj4KZXA*oV&o!g>1SE3uS%Y!wr!qidun#l
za`@bISLoyFjJRny67EE|CbS!U at mhMa^b-O8%4(~8+1q>#Tuv>j+_y at PCcQ@pu_WB2
zViIXJk>#oVh$J8F``C`IOQ{|H5ox?`=sIVIHe?=tLd~b48P$c8!2H4xwR$j*|836*
z$<t32%(1#Pdb_i+P-pB3NmM((hUz7_#oWs#l8`qt6-;ofey)WePGBfoESYY!BN_1#
z6ue|BIqZcd-fhfzZke0fp|^jaVi$j=Z;=Mq5#`G5NX|mpNp}A`U{dJGmP3iq9_7Vx
zLwY3eAyFY0>*$Or076W!cJSaG at 3WVjnjUcpqI)`(1m^cw8}l#_duHElf4mao6G~F-
zAnN35`C)m~R28-9w#28E(*qJYGSOy_hk at 8jd_mdoRU?nWJ0Z~8$ZX4?5XlH>^*U$E
z2gex%SO*pk6*weKQ)RDb?wIyO7o>$8=>~)o_;?4 at gqi{*p>Rwq4wUVa#@Km{D5IG#
z!IU^zuPB_kg=nWn2|7?bgG at X&>Z&j2I{=zh#@~G*D41$?c6r!m8^WiZ06|)Dl>Y;>
zoaGdCeU*Kl{CBIQ$|%UJLSzX{{O7z?f|-l&FLp4t{fH}1Q5o6up+4%hLs-6jfb=Xd
z!;yQW#w+tBD>QX<^SrvBixrr+TT^t4S|q^@d^T7Vn(2)k7*9vT6moFeRP}7!AH6b<
zI*6#Izmc+#9=lSntYMi->UzN=nlU$abxzUe>-Xx>y)Uf>l5|$zcPmJHF*Z;MjT2Pu
zOk;7Fbyf4{4~AN4ks|bWRMv4HvtOj;Hf^=)v37R1jUwsLF`uI&Q+TP^Hg^@!dk`T|
zZo<*X=ebVP&zXcW+8A@!BGWkXa1p`@v$PTCGvdA~5mV#CD=DvfNFov{q4}x#WGdqy
z^wqzY$FTm(6Lhw at p&wCOnU?ZMy_rC2SplEH?bp>Kj4|y<9zhQ+!ncEsHsilR^k+)7
zS5D4E_MT)SEuvmShOE)0{gae&e8;+-$X^2 at UEh=GnbtV%qHVq`KT?6zvNe=w!$a7A
zEX-7A(w=C1kQCT#`KWDW{l<iin`LeuZde1q*~vWzI{!$(-VC+yU!LQ$x<Ef7eE+Uh
zzT%>CkSpUq%3ZN9gxy9oWyzc-lpP+srmf=)%Cs%COGtELq>1fm&Cc=5Af~KC&THh)
z_Hn&zs6pwnA`iNmBM}YS!8pm6FakX$ywe>IsDP`j#X?^3z9rQ9a6^QYFakZZ0f&>o
zvT2D+FHPCvDTvNk`P`F4R&-bo+a+F4*hI~wjEaC1zR<`U&ud`afOgc?=q&m>tXnoh
zW6kxnt4=dFcM5B<z-{k)o$Qp*Vg=i<S>}CV{>51>tV?C)^UD>5nIo*!J>g&llhnnc
zq!v@<J<gTO at qDzkH<1ud?Y;+tS(R7-^%hi- at V3?RV+z1X%s2MUR_ylD6jQmJt~tiB
z1LbN(<{#|D*vcrVyF$O`(4U(y>c04e7ea9#@<vNOC>8z7!&b1!upRcJ2>HGE#xOU*
zxsUq~9ZEj(TzeX7 at P)D1r?Ta_q=xBR^Rkz!YMPW9s6HBdFD^blg=D+rm(NIlzzGpF
z2Ya*N^Vr2^<-1`eLFC7JI09}I+=rvCXalfOrHyQ;p~0}pB-CCxya3#mGPW~Xw0z)5
z@(X~#19~fNiRF#^v#_i_JBAzmV6R+o{a&IuCyIO^fTF*GsIsAxjIC)SSu~<RRzlU@
zKg21Z%linK<S#e#9A_;GcDItNlG>QFU!FEB6?V4h4-g~9HpjAy`938C2jxS%tRnI+
z*BbxdtsjY!v^-t#juB at kSK8TAi=PDAlPs#2zsVvR(HZ+6cfnM|O*_j3N`yqwsf(Q(
zSSbU`2KErZyW5P+=$9*;GlS{+R?Vd|V<pbmsSz%?cXcQQ3zeY8vZ0laMC>fT$RbO2
zstD=|(i#NMk?Rz);W=r577kVfeUgegZddrLMjq$^!Iz)|(#iGD(>HU9a6WjyWkIuc
z%R^-qMrBQ#fTRA at JE2I)U at a`y$%9qUFX16}i(-Dh*1`&F7&PP*LUHL+IY?62w47N)
zbF6Sv1%7ldMPj~APdOVv?3+`urEy+2BGKemZcg0`I!8d_%(r-hzX`qgxIfR$T#D&V
z)+!>1rMpCgX-f=SO-2hicH7B};9~p;_jRP2KTn+IbH1)Z{xHMUT+fRqI&}`Lv at yOP
z*6GG9I}Wk97>c!*?RqkFDb-Ve=tp-Lhsc9<LMkE{vl}C^Onp=dfcamgcA%(5#W9e#
zW4K7#sjO8n__l0B9IV)@{jw_JmM-(b($iB47Lmw8e`^ipQE6gnz~Fs?|AxyEJtRY%
z5BLqGdefa5LKY;kEh#69lwcx_M6*Tt3Y%%~2dKsdBI5~3Djkud#*AEn&MOenU5B at 9
zCfw>-!x^(dc3!)xmrQVUb$f+EbV!ocCq|{sL`8G_iU3#q;_F%7Mv%8_pm_4-mm-%(
z2L-y#ssVTcJv*#ZZTq0r*BJ({bO`JM&qhf^tWqAVY2N9s+pqItSjzzO&7vArv0f<i
znlt($(<{Z`m<^oYBpsVe0Suk!HhmcyMh2X(3-;)eDE)MS$GlLrbS-b;ea9-4TGw14
zl^`!N6tnS<CuJz6v!D=+KFHK7oP#X9e_8*`UhkdzXUt at M%gO+v=#WzSDDcpy6V(cu
z5XQY^lbno`F=|{>4SuqQ-_Jaa&%ydiwDfPs!|-GQ$GO9`1);%*SEbXR=9C1G86?t)
z%-ai=lBM_mA|x(0@%*lS;fk5J6(JXU3hfa~j-)wR^{KX;vp-tb%f4u%gAg|m#a-=F
z)VygZn-{ImG3J~B=Si2t=jyPm_d604f_R&@^#sLhzOusjPInO25->a{1%_)HW!v at u
zgMz^(R{cMDZYX`{x&UHan{f6PR)e{CMVGQlIs%ffP!LckC+z`uVie<+6MW=Xi`B9U
z%S85<cU*ap1mPpnKf1G3!cH_b?#0`F>Pl7>X#?M3FfMQpyH&40egIu;5f8_ppKWhF
z_SCUz$v+FIV at EsHo*!V%nI>FD1A`};R8(5P!!gG>d(Vv7gTJ=y2#H9L(q~eKmp6Mg
zDSxGS7`qcW*x6dv4a&s{6nuemR4Z?xJZS&~%-2)`S7nAx?@+sRw#0LExt?@vhD^>)
z9!dHOkGG9*%HhyCIEw&|v+&QHu~r?Ob?!9#AH1U7&XSs8<YD5gP_W{#Iwsj4D at 7WC
zfHJ8Xh4;N-ZME>-Op$-{MT-qTXbVMpw(7%c7RIU#N9=|u2d{(|gJSE&W<%!#{hZcV
zuhby%@&a3`A%Q*=MGel-H5^nG`0mD7CX(4eLZPhoI{lbm!k*O^|1ZaIf@*2^x?&DU
z<u_i%LEX1o^@7{{TOba|Ay8u1wx*S2?DhESCp`vq;-F<X?EQuVodkRIoTLo^W(1C~
zk0!}4 at Mk7|+c9}E;b6m)BQiA37n)fRN407T4QMOc<1oV5W&H4ox2V{7;7 at u=Q~_)^
z5A at a12>i at 42{xUfUkfNfDx;gILh#+i4z2ao#D(HiEiP8bPP67{_181~SScB@^r4G5
z32ruJsLVkS7I8!_VNj^0%>&b~Dek08EE5lKZBy|mW=uh{HCd*bFkI<rUh^5GBvxo{
zfl at zb8_j=qsnGD?*n9xEGMlk9(;yV1Nn`^^w&t(>%F4o7pM#Ya)i_}tkap%+&y?Q%
z!$eaogV*2dYZSWa%~M!-H|rWM70PNef)6uulbW&ip|K4!F}}AchZ=lB<XM-P9B@!}
zqF5!WNUn&O33>hU%h<r&T-G%pq{w<I4`n<d-L?-wJVPSBkT~oBNdNUM;G+gWDoEcS
zfUQbd5ApSA1W898jhtErx+}0|w1)o%?~8{ATu639UNGC+205;p3~rdnQ`d0#>-X+K
zux|rMUZ*>m{J;n`<t+dK*tspK!e6d0*6J&xmZ6d<p;2qmB?pmP5D#B^nz-28NZnS<
zXFi_>Yx5}pRADbWE9l@}*==xkxhO^vnO`duI!mFXQ%u!y&>WDxTSb_fuzq=i4$}@!
z{@au+U9%7P&374Rd|~&`{0gL=(;}!6goqZAYJ$i0tG<<Iif6GZyb5TVLJ1-0R<s0@
zn7&;3p5PZIJ-4rcd!;aOfZMt~MOVSizMA+<Eu at cq(X97*iVEWPy=Dou$5ch?1g}s=
zCF!H}f}(!9Vqt#KwJ0Kct?MZ;L?WK9j!xwvFJ1bEHN4;vOa8{nd7Q1;-s<XGzmEDY
zp=>~M&c-_dyG at UN#IYt1vr>V=Pa2;y9VWTUqaj-xLA)3#+ft2wFJ&v7K}4T}`!Quo
z+bIO~3S$&r;l&tFf=t3i4#8#`<x9eVNs<g}npI&-0YRUP$_NQ#YD^u+sbWtl<N~dh
zQ-1T1*g9DUK#D}cW)k3=HWaK#w}KWfUfr$?7jzSCb_aC=?L0R$dit{3pUoWg7v%hH
zyc*A7PwgCpoFpH{(p=NNRVwNVg;nlTE=gv~Ge at U*aS;DE3uY<=Peq|V_|eu5N{2I$
z(svRCfGf-41%?7P_;`d6dRYV9)C8qm5$H~z<^E-l-1uVZkS87sLC-e<YZLFb3@|(6
zm3oMHcv^>dhUerTIJFr0)ke_Q%}qqHk_NzJ2sy}ik0CdSF8HJK<X<+mG at 1$AJW|OU
zl7??J=Ly2 at B{$L1<Xb98a7pYw#W=nlXwdxE(mDnup2oS at o@S<(9spg;Gm~w+Yh~d`
z-AE3!+#AWTP1 at aWNjr}`EP;*&Aqi;UNIlw0FV#C*6e4<terHMn5jWFem7Rg2^H0>@
zBa-X|yn7ydp(h3OE)_cBcFBa_CvqpKQz|uvX!=GLQ%!-7u~7)f;8A?#PLMFxJKy1q
z4Y|~w`nq}**=^%|Bguc6#Zz;XnOiEDz$uJFnYK*kKK27};meV8oS8VmVY?)Rarq8e
zFp?G(w#fRp^%KnxsFm at v91po_wkmIRXRL|Dvdv8r&5G9(C<?9zf29CuI_y}P;ABR=
z9e(#o=-r*n+qzCAer0POpFwaw*|fgG^RM_ at qlAx4tLl7V>X-=UFuz%UqJUs5gCx^?
zHPM;`tqCiYjWmT9S}hJbv&)bQ*(w>6?PKe?ADc%3h9>7K4E_>%HJ}JhDp6LVuHvB-
zJ0Y#vb>+mx5w*P)3e4-5uhn*)C10!<WKgn{q2{TRLliO)9G2K+<W at XUmfMRV9I|uY
zhWEM9L90*qm1Kl0!52Tyu|8D=&>xa66VVH|T>zjG%_y7|GE)sHLR9>}!&ve8nKu?m
zR}uye>O$!m`kmu3$o%WcGDdWUK$&Q)NRp}fvEvLG*R;(Um80c9`zHBp^n1vp*Z4IZ
zKO`y-6#@)kka*<@&Lc%=L>u}QHypdAfJP?mTLZad{;bT{+ltufGUQ%?rLEh?d at gLZ
z)<?(5dU^Ohw<?7G84isX?yVUT2Ycwof~7my5oeSEzYOXX?kU(RrC_)TnlgKPaXxxq
znK}8~tb%1iGC>SB34?6D>mK9OtdL{tTR2GmbON~?UL2jn$o<{|$04+XDEx~UP0Ktx
zy{emD6It)~AwGsux55k;q6vEV#!myuzLrc|&WIz7bp)d~Vp`l+v^I7N142i@{gxv1
z3|@X7xv5h8CP5h0%29bdIBKLkwj?arj|T%yh`5$(@|d(hEZLr?Fq$%v-DFOgP*3`o
zh1=x=vadiGMWU)&XQVxL<8^3`63za(7mO#w?Qp>;`7T=Ke~Ln?N+qt|L^PGiq at s2?
z+zmbeY#|68FcR?ullRI<UoMd}*fic{eP?uZpPF+JavN9&1o_}t%Bah<73n<H)Y~-|
zYL7R66+UlF`l=zA)-ljur52Ga&>i|dfdaxlA5k>vN_9Ev43hcQ(3(>Ob!T}NO&_6{
zk{6&j7M=0did={ZRKa%~z#+0S-QXPwy~3qSk?|`q-8u-q$_H>Q at 2}B7XX8~v0U$>s
zazpOY4+S}zF*Ssv23K)wC0#4G53#VAr%I at GB2A&`HTqQZ!Vrziirt(YpOzbLDW_y(
zCUWI>ziB+4=#TCrON)A_*_*0Z6`+YNHGc at R((?DTG{f#ywh-1=h^$i4>kXYB@~nwK
z)J(LzmnTWoycT~u0(h#cjnQ~Ac&etJe&@F^b at kEt4SE+{9#duMBhaNWTvGA^fbdly
z2i`lY%LIs_#NZk0DsqnU1+vQY!p}`;Lbb at Ea-4#fW?VE%EHR#c_x`EVz?$AGX&i<t
z(YlBFPSti}hJOqCU}Aw2#LJ<bG&fDrZ)wa7YY+%il>aWXpx|UU`ZHJO<L6$77_3sF
zA0k9d*#%`wn$Z9e#b6Cj{UvI|z=tca$81sGmCNK1j}0+4S{vjaHQTfxQ-L0ah^(j&
z`6$n^-+hKXJjdgTcsbYNoqJw27$W9}PY_B{VsmSF2q=cet2qGd%dLu$D;$G at 7O!K3
zal{RR at VOzIh)?j~DM?Uwx$AHykzXfYKU~JHnBW=%umF59^j0(ou+W<{v1X{HKY#iZ
z;HP+4%m<(ceOX^{A4=<aDlU6u*@X$EpP?SHm=Y|P!5~EC&n}fn5>MTV7QnDgoaJBb
zX2xd;@u!&&UH_8v2VzO6T2rr!yNxL0Hqje>wc-CD+<a$>a#O=-Y4PZ|!>zBCLK4Eo
zTF(wN9#KQOim>pQ#SQ3~O+Y><EG=h|^=_Fny#>bGhuuBO2A9a}Y+!n2(FxmxR3&c_
z at p(g15i=^_o}pi|t6m^vJNwpLyuv+qy|^GIW+WZ>D}svvJ at d#0rr##+NP%Cfv3mvo
z)Z?4_p4$!O`eyhjj>sWc{Leg4i!O`!1Jt5NKrUSB0W0C&Q4NG0CT37XdV<Mh&S<w*
zn2^9<y<Dy!d)P(n%&x|#8OwWvv<GD#mGlAt$mR)885R4?gPZA0oMmwnng?a>&&RSF
z7t`Rv&$cDV99Akwv#6q%O$j(|c?zDRtm_?9dpy1|Q6t1HIyEfhb8tII(XB5!EYWS1
zX at mKme}C0WL*sA(iK+q%ho%ygw+pLz#|T_L22E0SY)uDjtj at 6(qgUh(GB{BJQrzK8
zbG~tv(k*{+NNDEl!w_};e1m00N}E8Y4_m`xGVGOb>^*@8vcjtU$_D|eBJ{|$MX!3*
zSq*o}alK<~*iuoQNO&AnmcR}m#n&O^cK>4thN at ouQ+T@#9XK3ANUW2~PgJ%RUzx|`
zp at q%SDDqCP(IU4_4q_;c_pm;*nRLY*R|_rw<F*@0EpPp*0rqG&+7@~hz3}-Z4Vz2k
zZBUf_teY-J_<`qb!$^FMf_3oqTpNB-T6KQk<E&@?MbfPHvAT&g=q{3K(@)=&Z+_;4
zxSX4~xzDB}|HNnK{}!(7SB#`knl`C<bibRK3Y^O`aF|<;p9M1E0o4W=DoD(R37J99
zpRyrYq7|_!$%9&CiYTp_37fpwB`gSvYF_ at i<Nq%Io}=I<N6zz5Dqicn+*T<qHwOcC
zje-n$e at P7cyTCVfHD$qR7=})eTH5TJ1Xu$iysf;o|M at 5e1VF8Xe6G@5K}E#$2w6)!
znU8a*S_HK1&`t4G$=DwIUTC+XPO}1$k0bTJQOO)q{Q%vDc2_DpL{9t7Xx8N#!^~sm
z8;^XXOe)(VP*v`U4 at EogsHP12KQB+YebS~2BC8ITpwz(!-$}9YrCW3a_`+AY0YeBz
zo*9ODw+QCDlH!FmTe0x{rvaZh^et%*?p!%1CP_Shv&CP|7n4Ysa-jOWm{H>u9PL25
zv1jRMiEoxn2T}D3fNg12Fl?!=k^37ay=I8VEHFxJAk>i*%65 at LLQ%388Fe>F7+gj)
zEou1=rd++M*yKWTPd>M-<s_t*e~B~y{!QO?L~!VU2Y^z_S(HN+eHEG`SMe^qZvutg
zm^xiWrI2T}wLg6-xZ0X;&G5NC$da>^l4yl^h%*V}4{xQlZ;ee<jq^&g?EF~m^(A-&
zyOn3$om0;Z5b9S^s9o}4;gkp!yE}}7mYAj2ttO1di7L(iiFp1Id0Dau?CZQlea2My
zuB2{rlkNE91m~53FA>q~A1OUNQG5QfM{bx^Ue4c~TYMp&8q&<-=n;7%f7t@`CK0;$
zvP at 6C=uh{D0(BFqmu`BC$7&f at m`fTTj?;9Z#cbHAmsm;_KafjIT<3R)uL^LVr6fnO
z at p7dH9x?IPbSqd9c{37dk~O|oD6+xue}-&?jx(3msIWBF#HgqrhQAl>6n{a~dh83h
zI;v01!bSs-S>dO}H)l6=Z8)MF9Gyq24 at ra`JJ~;JZMpwJGKgZ at u53s(3<gI01d3aT
zKL<_BCa1cdRNn&OX`-7s-Y>XkyY5s|Ac2b3A}p8894a1tzX?uT;RE5Q)Vn<$!IK1+
zs}gBX&e!){KKRJN7B-H_7#@$H?iB{1i-j#Xf2P8$9IUt#C!TZE7fCJV^NulK7Q^Y7
z!4HN~hBG?bEyM at stvnpNvEWr}Zr=T71~24QKEOhMsII(Xr6F)s9H>9YTOLZ at vH@Ds
zJU$+==rRuS&2vh{1{>{L-GLj{>1?^qmD<6pLptzEIflm<m_b%P27QK*-)IIjeKL8g
z8s5J+)$HNzdcxjbW-`t7rq6hZq8;>jdXp*&>hT at iQg(3Sdk%so0}k2X3&PHIn<P|_
z%sFg at K8wY4#iLcYW@?a%@<+bxFmec+I|K$*xdN*PMKVM at +mcu4+|cRFU at x_<3~TvD
zSG((hxxkDt*c#@kOd|4w{-1^3P<1l*bAzFr>@d+Y$X9DaDxjFYji0>YW6RDN-nsc`
zTh|ueXDD+?b)g%Q$;GllB#m9MglUtK<lnVMyu07sY*Tt2B|2Y0r;+hDzmz%K80ScR
zP7z7Pso!2T?Sa62LcONV&oBih;nuf@$hLo93q8^Yv{<%_BAs_RCLr<EgJ9J2%RcPZ
zLVN&;xLaX8Aox}rfu6c9{vdWn3MW;2+4pPw%qFcd?YXuTKZ8LbYdzJB$GYeWNF$5~
zQT3O)<i>?sqh>w!+`OCtyWImwJ at Nh_=*ueU>4M`uJyswdbIT&_b`(6hOuRaQJi-@;
z?SB#ihnJ<Yrm={Bt{?_jogJEMc=d3Vlc;_kQSZNaJ>UKsQ*+6Ti2{(d=is~EGJ~@#
zKGS_2zbBu|ElW;n`A+>Tkx<4A2ko^{1y4y%e*IZu*_9c4ezoF&NEBW<SE15ituBJa
zW~O+9 at sp&5GLiB3fKk2YKtgRV%*Ugik6<j<-M3fJCE#r{A;N~yc||x0naY2x;s4<&
zg!Y55jFFMOg-}wXuFtx#O5DCVcVmt665Oc at jEUsrSNes&i1EcY$2=oj&ooLC;I=nh
zou%u9LLTYa+X24=FV&-?)$h at 0#*9aUVjcR>G$ayy+67)uI96B#2>}eos*z+E?Lm95
z${u5+shY35>#8FYIr6vYH;h)qfDx|SfhYfkK?mEQ$~)Y|O3bx)-)7g2AQJ|NFhlSA
zidkk_AmS%+XWQ(?=<w<ADml=2w<Y)bNx9UNa-VE5L}8zTxvKWr%y;!kz}^#X8+{U_
zy$$4n-jD=sU%+ux{dZ}ur_!M`-Id4CK1ZM=G>56640>*8 at ho+a_XFN46`x%-C*yCF
zKk=s`s3yp7;kbj}z)RrZS}`iMVm-g#L>+<%h+5l-!5Doros_JXHd99DRb<#^$`Dsp
zFfL?ZxSe|ZY8Zt$E(tGW?9QnfU|I#L&qm_>1d(MH$gziSX&hn(^etDA(an%d|C|#=
zIex^^9;T3R3taM}ai9Qv!4BLQB%2kIJ+NY}=M0C3V;YywQ|HN#rC1GERlyU?slH58
ztzkz&hTijY at A2gF=Coib7=?*3U485^0V%zRjRFFW*)tqv`diGUj~`zS^oe&`mJEus
z5~v5Trnb0Go97|-m?TRVkNc#0ouM3X1e9FBr}YHT4MUBGh=|J_vLkS}q0B7sh8MsT
z+Sy-9F1&6`5v`FjTTqV;paKgLC at QB;`Aj==rr`l{aP>t;@*D;y7Tu|(kSvj?dL6wu
z@$KUQc3Gg at vryIeAe{_ at iSyr%37&KDSDoQpnG%yLCdc%rLG?>K$I^!1-6w`tQ(Ixa
zDOgI9BT*Ntv!ZGXo{)G>y0HX?e*IwUOVT#8x^eLc^bW(Ss;@AAc+!7k8XJ{TpAuYl
z?LL=S1MuxUTmggBOWBrp>HC1vvZAMDKyN2|Dw4J=;Xm?p$$cl5dlFO;9cgf1Wfq7#
zLX?G~W6Nq^`9Op(@L;TK7~WMI5KtBV#P|;JH9-7EbR!eMYP@@ggO2En=&8J|-!=s<
z32x>zbWIK1Fmr7T?A0>`AUt|%WORz&JR|!4?X+Dk1Z#yJByFOWgbi6R-x<P+wb<%Z
z&a^D;+^^ADj_Xs}1I2-3*d^00fU9VJ at a9|RbTe1aQ%&%2`rl;e7GpA?8)S=G`{9p&
zkaGTwQlvdABSJiuzkt1&F<6tN7MIIUGHFzlm9m_f8w<2iU!<6TZo}5evW`Fb at 430r
zpMwMb?ENHxML>NtZUR)j&&WDf$Dw*T0|GJ&Go$b<Wbxe6vqY%ME*qNTrbjg6v at f)Y
zTp?E9I54ac;Z<><;CX!$WaG1Ak?Z`<*+8UKC<RG~2KECu)h;~Yq(FcCihOKDNAVZG
zV=bGlwW{KtC|h(##>h5`Bg3M0`<R1<ZMU08P81)0lr~OVm1qvGVD`LFlB;Kzgs&Jh
z<>>sZ8cnH`<giV^ot%jQpaWh^ybLdQOR8wF1>1H4@$pBVx=Zb7Ir2{ZPAQM(xkSbl
z;(vwjYOy-UFlC`4D&h$xDk4uZ>>!(p08eV&jkH^tL=n*hT`Kd%R>4<dg{qC$M`9j4
zUfS&nU|B$hRhtEY+3z6y at xd{-YD1}(MpGdR)EMw5i`>m7GWGqf6_X&rdgf`>tga1G
z47!2M8^8R(+lt^&cDyb at b(L%w at 9GlW4A`y@;~#h>zEA*IAOVA&N9{PL8OJzDOEjib
zi)7-DExmco%g?@jio+MDlmxtvWB*LYE;GGNr5-xqJ at NB;lz^0kY!4BWP9T^_q%K9Q
zxCKb}tNGnU4o`rLz(oR)vS+C1h<C$Ecp1(88(((En!a$5=?Ppmy7^yMXf-nQ5Hr7_
zrAWK(NHdVv4Fjn(=V51#aP#WOA|p<rFxN16Ycppt1s7D5gxvD`XCI9fqI4}GgTePd
zgJyGa#B=nyuaSP9tpr>T;!J at vUs`R#Sn480^fv316IkpWc<+RFUNXXUp{1O7=O6eh
zv;4R0A?<46?us$enYa<8945KmW1{&<y6!5zcPS>&pg!>r#9Sji(?QYjD;|w8YVplT
znRrl-*6BSv=_iw+iC(rC;hg^7jUQNUsw+^tlcDMXKF^ik{DkQ{m)jd7*N}$wJ5TsA
z8ZMs^<t`Y2Z8Ss+S2(0 at b<k at -&$ssO_=xeTbG`s!vkxP9T%^8HBv92tZYedBZx#(x
zHIXxCR7 at 6!(*|yI4<?qy%v?}MFnEHJ=68&0_L_Kl0zDfzVP!dP(>4b6lR`qw$Oyio
zlerp)dL~Vfj{c7w`}MTi-@`9gr{MXYdL`6zba)BK(Jp3?5wM}<EXq^g#Y8H$4i-z)
z*7F at lYMzn$gc_VSqEm&RxUzau8W9H8H1;hQS0?qlWU*PSxJ(sA1Y8XOj+hzKO!^^z
zjRHbfgA3&V?~9}GAHC<udg+kK(MKc$T6iNL5~w%SdW`~|SSHkA1&CJvS84V*xO390
z&l7{rN=t4nQFoxqz>c|v)8AFN?JToRpNrYcvud?<;u$^yhv;o|1pP@$;Nh+~l)$TL
zKo*k=Cw|9Ioe&CNo6;md*&Flyxjy8v1{kK|i$6gZZDpV?0cA!zrTN~P@`tmarw!!r
zsJDNqi_gW6P?tX<k?TT&OA`hXjKF~oqx<wG;3KIWAepp at Jhl5z?%s5hn>HB6*t_G~
zhHkd7qj288OM~+u!fg#qfcIpATJlqSI!neQYfv};VF?6z+J{~evrj`*qgRgAq8aWR
zBENiMEOR}T9`_^huw%m)%MZ_mrYj?UUxZ*Dd{=#uB7sqgR}uSZ(vs?{;Rh at C1V%bN
z=MmM|C~@xFs|s4?DLB#pr(BW7WoK!9$U&XLNPxwrcuZoHLw!AEES5BDaz*U6a9$1<
zf=dIsigI at cK|R-b%>Ehg at M^v%xgaa6RwFU9&Uy9suyx?iC5<`b3lu5-Kz98$B1CK>
zHn+iDA9bti%&y=n;?RVmMAszxJs_byY9}K$qSbHIXS at xA5Eo?AQU_Qm5F}82gGXy`
zcE at a~i3iqrgoU3Fj&!<1z|i(4aDV|sVb&zx0~paNE=#h^2eA9kCG398^s2(aPD;mV
z0#>DOGnv1%XtK(`mt at RMx604A^UR8Vz7PD^4Ayt6j&opk30|s{$$dM0^)aWeLZ&V>
z587r7+DXr-s1~kwdtFZ&6sY<H_n=&wS0xs8G}LZ&TPvpnvs0;_uk};4m-ii>&Q7$6
z+JXXyi_7I8juNhkgjqM?fu>%m at 1{-n9{sYw&_v0E+C(@cNe?->65F)dSqg!p%`AYl
zdSm4v?(df6epf3~rAPdaH?lfK83eonN at zb2@koV0*mxN`yN?<oudIJKcN)j`?n557
zZ)Wu^1Q_*Il4L$f?JOf=xUD9nd_{Rj?cam8|EV#Wc4rk}zhAmhn<Z2byhFos?~)?Q
zZnGA at Z&x(DCC-5vJloqkb6?%#WsIw8t)p at GnAhXe=V1Lc at XfZO93*csOq}AxSdNg^
zSa_<EqHX>SL9JRVO at Rm7X3vpljtE{QTg)98cocdu1i-iB!vzaWfc(hX$Oyll4>S_T
z3 at HS>A9tQK&XHYGMJAja`&OcL=%VUFRi7gPvT?=aA0+>8*9S at s^IVifBd>=`my}x9
z42Hu@)#uha`I_;rB`E~&x!+ng(6P~kW_L}qe!wX_C7>5|PMZv?eGFAsh2`p#q(lZ5
z<2&==qXC<sJoXc-J&1#wHj}<?l3a`wnRrj6h~b3iZ+>#0Amz{`U9uCxZBq`{FO~zp
zPkS+y(pf?Ll^ORa7i95lZ at WPUA`EM4G+mQRvtPAP!EN2S)KY?#gyd+VT*TY7>VmcO
z^Ryr*!uIO}9NEWdF(x>pQGE<!uI8GEz}{F0TwNZUE}$^}0U<IBQ($l97Nbl4kU+A?
zB6aj_Ose}B*gsWms<BH0>A$MCc&omk+1v#tOrKd&8g9q1&lTFiP2V?HC}a7U<y*L^
zgjlb!Xl%~Sm--9~0m#U=ql<ZNL+TZ+v at jiWD4Vp$zGFm_8VWyXZyAhS&BBAZ#?#J&
zkwX-L{gU7z({uAj`P{Z~0Tqr{)w`gMn>Muh7G|8mmxDfb<E4dLgPb$MuW&z9Ts4(n
z(~1Z<4XrebYJE8EgjKBWR at z)_)QEra7-}b88BkPdkn_&^qa((w{>=Pt^G4T9abMC~
zC3L55g06%n5FvpP0ui+AD&o8#!K}$%-ayv|)e?(W8$zL`I5+Akh(WefaRVn=yw5*x
zQtV}Cv$aT+a at AidR;MO8)CRyq2_YP+Oi>_Bi01{qSUK6M5d#N%F?JIK8)nO^xQe|l
z6G}9p2RGA++16m2*9;i=mi!Evxz$vAh at 8t=pvWQ=-F*-u;5j74()-N#LG;VBD#d~Y
z+F;p;g=^$fv8-BfdUa^=-Gf7ajxE-;>mBFFrDM|sA6Q=27|`uSz#eF2D+$t8Eg8u@
zDKfP|qi4+xs>ojT$)rmagFF}*6mvo*4InEFGBO2A37mp!Z&@P0 at O@2qMkMN0gi7TJ
z8X&Q7(5SFIhvGp^c_BnJg={87MQq9=(!8xNC%s{#ba9sr5pFk#ah0~z8erk_m;;RN
z!nImrS*Z3pD`cw?{@xXx=7 at XoafM7|w|Ttl_*T9vf=R`l2`;mHtaVe!;3{~;tO$vi
z#)=h;fF4>C?xiGv;mo{{#q3*>jK40|pouF at Z@VLDWNXs at 1D`?+0mv7N!VTjl$$fbr
z#H{RwKb9sQ{M}bRxotnxhQ<jI%eu6KlOEY%ux4wecfrT#K}#x5hTc?-N1=snmjH%B
zeMOvPGG?b0hz3|zz8fl>sq5~4xR6msZ4F7NN#4_>nUgFVuCWdFnoAJ~koT0JG)~cq
z%_jW2R{HkmB^~7;3Fp?voU%h(SJgK-BY!wzIVHufW+!p>W$2mrE1#koE<||m7J}}G
zux6AA{3sAI?5us=41z>&5J^8EU|m(&U5~Ayo=mF)W!qidurtN%XGw4YZUA%{9%P|y
zj>qup^hzX;lCG1~xzez+FhX~I>VEVe&jZ&dP5e9)*ly+MDcQ9GRmHW3SM at KSD}(#T
z9xgB=WqQ9V9(7-H5!XVPQ%yIc4gUa^1Ok;?63-`R7mV`-kbSMZD$b5IC^dOot00ef
z!soq`I10OA=f at q>I+{zfhI$=`;Q6$GLrFB1Q3~!#*|)9+Rc&?PF->IalWtP=5M$0w
zkIGN3OWH<(1MEwtn6HzPX8%J2I=M9N_;%IOA*w8L6R#3k5YBPYoc{Qx9KhV{LHYEB
z;sj8wuxE&5urc-3%RVs%g?2{$W>M)GWgvDo%0yAAL*(l8I`}7RYM=T^6$O3~wo!>U
zi*ScRdqgMBER3OB*k(3p at mF*(8qFP#zCHWM?_wL<p$rj-k8uXLDzlUeW2+EoRFpm+
z)S{!*<Y-_zNz^+3VX4$MIwjFanKdS7^M`m_2#$v{IdyAq^h_y!KyQm6d|$#ENR`i(
zK}Je*FyN*%5{%A>DTTCN>j<f$8!^Q>cR(NlQ7%W=J<q~B)q1k}NG~9tS762Ak6HMT
z&yM!$!{zSD5z2b6$DR)qPc#oNu~t)R6jtq<ZC3dGtgui8g^ms^u)#X`pG9M*L5&@d
z5QZ*}hcD)YhL|3;G!`ROwncAY>vElHd%)@6iG!v?{Iyy%^yC;xqa{-EawD-;`?bHZ
z5>6G`e^EA?M$=o~a{Vc`Thg>CFLIRMfx44esoWk)^V?fiTWmm0dOwoD4`?;6xp8dH
znN-|=B&Q9vq>gyYi5HR7=DITcnyI`4_y1fA3b9ca>;<iB-$hK%B`3*$Q%iu?5>^fa
zZF;vvk1z}){4~wL?qmwMD{#`;c at M6t6V;Kdk`f^B&i}Gt-<zF4Y2z{HejwIhCa@?o
zLTaNTW%o at nPt+=iJeur<8QHGitBq<8-Rj)O1!~LECWj&zIh}wI3$S0iYgn}(DA?!5
z at nF!0-m)jE8Ac2D7PN$6!~brm6F2<=W;1I%FZA|L{i<C(L1k?N#N at +}4LG}@t2`eI
zrsHHb8COcAM#T4JXVM at F&*i8#7{llP>Y!o_I{GOJlM#&f_{zh(Nv93^)N;3@(&jJl
zGJrh1n2|4o=Dt&T>v^I#HJyrY+)@)iV+&0Ya*sk$`MFJJH#DFsdPXC}(OqT9QW)+G
z{r0+6mrbAo*BtxSUN>mXCeoPZ>87877J at _P;JGf%a*9i~Bh(iiD=wc;ko%O!YJ@&j
zA$`%c;V~Fbkw0g6rb$KiR+lT6%^BT58b at R!q59_9lVQ<No8m5BJ81Wsuhv-_1kinO
z-jFcwEpOpU5d4V0X7ZQzAq!B(uJt at W3UPW)#2|t^R<T?rusI76lKFk)`J-GN7GGT5
zZuD?Ojp|_p1Svva*H$piLgGp2CCriKx)T4oWjggqw$t|+mhP`amXe(281CqyX_(~H
zgC)dOaivh7tA;nGz_ZK=FhyqH4na)TwU7EEo36zoc>)k}<E)-1hoi`RWoZ48wG}}J
zNs(y at UMSm!GzHaf^@{Juh^OW^U^L{pK6SS!X)G7*@_ZqGN<!ChL0c9VkR^BmgD^rK
zt>OZAVL#{{X2e>mibyrI4gKd16%e)wxu8X^Xf~0u89g3s3_8h<$K>)OUrw%20e8D7
z2JP>Wqz1W(O*<1nd!jgM>vUoY-eVlg76mASer#vy at Z&dIqE?XtW*wfM(nWT8NU3uK
zLJIgdBi$SVl)*v4$YqLa6m`$Wo*??UbrPynv$V|RP}RPSY5oGDDKIKL9ST##;IW29
zo8z1gf8i`<YMaAG1hltCMLpdkcW1dAED<RgTSP&eCp#iIZr)TsSg^ftHiFHwIUy%I
zzHj?z+afgS=O7u^bd<8YqBH4>yY{KFU|zxb$-s(<ua`4M1{V(J(Wp!c9Q;~Bcg##U
z at KU*Z1^>KGyE9(i7V74^a2bH at hAME8a2PcK@y5a?drzMcz5Knu^{kaS>&-$Dc`Y=O
zwBM0Hju<F#|GrL|_E5KzBY4Q68$}vzLWr?yECo#A?mlbWR@~hbjAYf5t)4?yqgs0?
zU$8RNH*_a!j?g?<>4604LDJ`@0hw5ZC$Rglx7n{nRwnzg1-0YsBf4?86qHBBmL|S5
z`_l6kW(vP57VT(PoopyYnnA8!_05!=5U3n0dlj_VGF)x*sOYB>a|E;`ye|G))FtJY
zwtmu9!3mc`D&FeFn_w0Uz&NV8kd8)8crm9gi<}{3E`6Uw#=05y!C9Vz at SuJWFzEO;
z65kiB0wE!fbenYyRG%jE$bGH=0NKWpm&^amw<EJfq<7Jkz?A7Tpx)xqBLZd-*R-?~
z<W))qlDkb_-nKlA{7HbG3jnqKJ_aIiz)}9ecu#Vym!Rouz@`~h7r;pXJa4h at lm~O-
z at g-sycT(wV`91&(FaROz5h;|xMkNv_kNydLp=KfBzlQ8AV}nKKEt!S%X_jxP*wWzu
zEUSz;gn;F3S-DTm?cw!Y^2?%SmYSR_D<-dTy~{50Mfzlm9?0ZC+-8;MvH~c|2LyUo
z8659WdlH;a2$Qtu#ps^vr2y0zPG-waUk;AQ^|^%}^A>>f_enxMRyLX<#9E at 2vwX)`
z6)SKmqm5<5bf>Kr5zKyfl0gSgDQ{#q#};<b%h1W);3gT(z8<14R`O4PmQwO)LEfg+
zGq=0e9C at M^kUYw%tJblQTY;1~ww*}CqxiHv9nQ<ZE;%i4xA1~Mtep)T9s`Qy;Ot1=
z6)oUQC^&RP(ELwp+UAAAyDiMig9Gm7>eC%rja(bxUz?XbDdJXd3h{jEmL~YWKrNm;
z8p8$WoYl+0xrunR+nr^fC9aTG4h-Q58Fo^S&orwvP%Ug9ZDa^iFFk^7S}Z<O<?MKp
zlY6xL$@>s1uOO>SXS8kL4dI9y%jRogvGfIhyM at P`19wt-=F|i>&ixwC6s-sabN=Q7
z@#zg5M2k5oM4Yv?OMmsdXOx11S^ZNqxN~Vi6fj{-1zJ5LDd<US>B*(1XH)<ehqAm(
z8=Vtc{w6)icakivX=j-0!hv``y2s+P+;tHc5sGg^I~(_<Y3$Y*-~YKQYXhFp<n2Dw
z(XCo*X4Al?W8MV)1$c}Rze3XpWtjZT2f~+6HUhI5N0PNmHSNG%$BTS}#c*?(vaOTU
zLywod3wwALKbLbp6T0KX at 2r*=AeJi*9 at aR3uK*+KNG+7?UYLrL<Q!}(-#u{C2yuUT
zy+PBNgG65$I^gI`B7{=h{^hV`R0pOjv#NGJ6)?`B)ImJC_a*(vl|Nt53W0 at ft@>a=
z?=iD8aqwwwUb^<XL_*Izr3V3}2ziss#FjTBlG&yVBu^KMp;9P^-u_!}zG7N!6-;;{
z2=QiPhTF8H2Ym`t9kNl7J2|I1s;@QIU0 at WG;so<Xfb6Tl3s0`9dT7;vh}H}7awQK&
zZ(1HcS=6^#mk5PcZ{qc&wQcqdJ>=@Pz?{?>Q*hR#K*Z_)lYBLW8`FAX4{Kaqi-LIa
z>QXo7lr!%Kwa;-aU6pI+L_1y0LFms?oM^~sQJh3nnK4bfqbtG_EB%{J7-qzcxl0s=
zupt3LI1=V!G$Y*C*~wYVMuE6XZ`PN5t%g2&G0l*9=z{@*PIobo!=A_Mk9)XNa at CFw
z9tzk;$r57{LlL#At^v2&%|o|aG{1hj^lunFp7gZSGhYlGI(8u2ahl!wTD(B#Ko&`B
z0w#u2oRh+_?X?h^k8HGa-PcCtMZ8q&i*u<tpE&HvE*f^b>p+w1o0gIxYWrRgf#Pzw
z+cZLWPJF<G9@>&}+Rm+lC;v#NK23^_eds)YrHmd`l@<SgkcRcJ#E`vQP-LY91#UF{
zj>WYsddbkCLzHq<xIo}J)&e@=Dl;|YQQ4fCQD&~xSRq|N?IRDBg<2at$Jk$AyS_z{
zXPRR%A$(@>W8A_8!;)S;E0wc!2S_kGa|9%xwc=Az)F1Z&6LsDOGZ#8tENJ1Bv-Rp^
zb4B?hFaxDL%3%#DzwqFC^R!VfHGz99H79{9$EeQ<;I at 2U0c>P(`(?#tZV;B~akaDA
zp>zZHlY^X&GUk27kEYZxP)`D^(hLB_akl%?$P|mn>Yps!O3l6jiw`hL{Ym#HTKd6m
zjv~+{>6l(s(ooF#9 at rTNC(;n)=e(22i=I{|X3*mJzwhQ-ED#YliZNlqRvO}D5&dl5
zE)`RAt>tx^WAi%p`<%tdNw2_F-fv47iG;Kly$c?6d=y$LF<7KLRsL2$x%?oQr+yRk
z_6%4YOND>Z(#PCRw5<S$u at hmsZ$LMSQN3k7(YS3u!RO$*L(dh?K9I%O#*4U05KR;p
zQ!bx5f$@+e%$0>oO#tYE*9yNII&E5ZsBA=gI at eWZW?lBMJ-S#-GB`T*N_)bGi*0NS
z#dfcvC0GYKzDfEIgN|4TS2-U8<`&5uA$g^5I{u0}bg2g-opW7n(5%f6TO`wnZ61Vk
z-L&1Sb978`#LW;SIGbg)WJc!;1}5m=1poXfcmM at J`oB15w_(96M3DCZ%X}0{VX&qA
zB9;(zzBP!r&Qu at to#B_2E(P0PfKR{PndUHC*E%`G?S*WWao6J!gvzuVKH(hN7qS^l
zt&Pl2?5d at wp5(|ryUtuPA_ckm(XnV#iLX^8B-=s+KA|L`hkqlmxNcD7kB;&Kmc9!|
za3qly0Kvz)B_@&S?i=QWMN+Ju%}8r-1)_ZXqe at lb4jQ^S(wPpyRW!D!09XQApp`_f
zsUsIfxkt~1Uq3|lQPj#CZ5$BK_zJsB#IN)YngX4Jd2q?*D$h)=t#}O(XoX-j2+pS#
z(Rk;thaMGdE%~_hdP;B>7XjJD+2YRj#;k=QQ|B1DJ*<iqy3s(Q6GK7{xtD}F?~^6Q
z*ik-Q*HI^zgGq+6J?p;`Z*;AEJ~q}3UIyb^iuQnpTWjD}yYZo?UL5|z{G)cd)!hMS
zIWiPkW at m#F)klkQC0Sd>I27*LVPZ%Pg+e!%Xh}$@^Zs at JEKV>}isw}tYpy7TC^jxC
zin8V#1tb3>$h%(8eB&gywO)Djpdk_I1V0~LXQ at g;IwIZQoJZCH<ZxOSU6<0S(Ph-a
z*+;ue2tI*co`j;XS(y;KSKNID3o#pqRi+F}Bs3cp`0Qmv3ss)a3zEhEU<ADJ$^xg*
zpCc8kD)4aNXX~u|%w`Lbw6j<s4H at QV;I~DTh+V2hLOqZk!8;n#*jG&t#Aj*_wjHam
zne)($V28g}1Rh!Pq;fQgcmmprYy+Hzt2%U-_xsfUUf8cavL%d`w&znprm#_?QFs-b
zgoF%y0sqVW&!h~&vvfDsBKf^xDAq5TQVeH;RI&yGB;i($dh8FOssH2O?bB~jlIy2p
z=*Fr|lh8iJT1j5sw6+ZLDR++stI96@{&(=}oO?(mKXQbWA<A#mblEB)R)&qVpSDBC
z!5_&pd at wVM0S?a!-QF&QVZ1pB<FUqm5ZBQlS}&G4<q*+P91iv2EIV_M8&&=EBv`v$
zU-#M8w6FQROlx<If?-4gSK>UliE^BsC}J#XeaCt(eHA at aD+3s@Ow`AaSj>SiYv$oQ
zXVMBCP{$@u0(IKGQD_G2;s at U5SY@p?($;xkOxn?+9ITei?kTGl%M)9%tz?!@D-JS}
zvcgYE|9fx&uKiBjOh~p{LugDZ;GMtzrt({`{(5f7!I!d9*E1$a)v6hxRsCUfWxJnu
zJLgzwjC4gBSOr<NgOBruBHU%uJKB{I%e<RAP@~^;+T*A>LSca{G8g?rmn7k^-jN-C
z9vSi&BPgpNO7n_SoCqK*vBfCZ7@=FDS0yrau9$`Xvd#n35k^7bjHMr1m;J7_e{N80
zT5cTUq?qeB5uUD;n at 5T^&V<tvL<8*PTN>K?Y&U{@<6M at Oli{>6vFmav6{sM3_n;f=
zb?tewtWS;guqb1Ax at BC^$#8Cj#uW8D*BC_jsqD5=9V*E19xU!bE=EV9U&H?NW0Swz
z83E-&xb{*aYQqkkC@!<b5Irw1l>DwKeSe#q`zoA9OE2vZ+5nLNcYa?Y{Y74D$TRG%
zM}-eK_esqmJQGo$6$?d93`K_-3+?Pv>1VFQO&?II1C_J=VcBkE!0sEy&6~RK)Ee;w
zeyy+Jk?&Gp9FYbGcBze{I8Pcz602G_%TK`!x&L at P8zeTCjgLJ$bx_^luF{To-;8Af
zU57p_3;{nlPiZ11$~|N24`pIrt`E}l;Zx|Bq>-E5GSwj&%-uH<AoNa$oEAkcN~id%
zQE8E8pZX!{2rl2Li9SLpc?(GRtq<{+F~9-M&pPpEU8@!XR|}5OBR6{!?B}{luTf}6
z@!#8OFyUTV2_~(5jjic4(@sS1s&k&K`uG6F$ubiNI at xFPZ<w&mPLA<kng{EU;4b at p
z1v-`^2cL1zx`Y at T^<cGB;mq%6UTzMwXFIvW@$qLR?T-GXnp7y#brngE7mFwxfkaHd
zLxkGJOh+(Ac1GK5NORd)W|i<s^AUvynFOqolDDw2j*80RLrzy15XYbZ;yQYqtChrE
zkuY^n-$7?S&Y-2pTN2k at 2)0Jj>Vffn0hd9OLG=Sq^QT;p)|e3%<YV2bE!|(fc%H<4
z0AlVGbW|Oj2-uvm;_9DuO%5>p{|znrhN7-vtgp7}WT0@#U9$HP9+BGYxo?Y5aREO@
zemC at kwye=FeL(Q02>fKCey7qLId!5B#MT~H5M5&+uTfuT^ceb0t$8Mr4 at 9Z)d>%u2
z;Zi|NwdJ=ol~8c{ltl<m+A-ONL?$oD at hD_SJrb9e6t8n7dIaXpqwZdjVWQOvtQHu<
z5qq^OX?Iu(qQ|$rwd|f>2rh9;+ItP|=G)_~r*1kypX&f6RR`4WGf>|~GKVaY8s`NQ
zEcbY7tl&oW_@|LmbF<CoUH7(p&OSh7v}<S{uF;xE`}-Nhj+Xc2_iD2LEQC%8T*Byo
z{K)`SKXzlL9{caLI}#6R(i246KBlH895{aVwC1g<Wy1K7uLpRvK<Dwr=y1aaqpXLH
zoGNhJ?i`f0<8KcLf at W@vA!DN%M04AK61 at Ut5}ygUB#z~R4#_<)pEpxh*h3DbC~c$(
zexP|!?RH at LY9~evK=j}yg`jTXsrC+;Zf$Mu5?2~9G<|Z{pX35dS<czN<m~(zhn_4v
z#W8~-cY9WR^W4*b0pKYZXSKc6Tp&!Uf$@ZOFP<a3RTTXWd=NG_A*_NDP4*Y%#*0V-
zwd{Y3K>M>2)cxProC}3zq2j{SQ(DOC8-~!kUHwy7LgegiWlv+CLBN1%E*g%i;k?&}
zvV6h=6m^viX)O6=Uj<B*$R&w3^2~#ZN#HLqRfH)x@=<<VLE`EU`HKk5vq|^A*y9XY
z75HRfP+B90dfJU#ySs~<K?j^eL>Dk=UbQ|~uGL7tjnVb%TS5y?xkhIoO?wP28Fe?I
zwwfejYjxd}QFUX at Pp-V?*B{hJK6xNqIvB~e>Oz%N(y7Q10#8um$!PtWd*1fDUDX-r
z0l!YH0Hc`7Tr$2`9pjgluPXa1PX}UE-rUbKlt>pF;ztq;HX$W_k)-(w<+NcfbPEP@
zm$0L5lE+h^6PZIWAiNBlp?PRc%1oqu7Y%_S=7sGm*&=?_F*#rcjt-CmnvAWHbR!3v
zDdxSCLs>m|^Yr(1uP{fdbK%Sa&F(0*wfHeru(%YXg8kvY{VN!1Q};=sGi*W at s|Xpx
z8+1|s0_?E1Y>2|LY7UDUQ%kKm&s3`QKY1uJS)7_ultWeFZQ}dUZ`6;~y^upssrY3@
zQq>oOnsdI$!|m7x`hHUqUz#E#>9BWR&DJgH_8=F(vpwN-Ti%kXdD~L_h`wXJ7OBLO
zMZXuB1d!GS00ikOPYdZ(hOdzT5a%h=d$m$H at kMJe1_2RyTl_0wEr7*BAUGpp>L56S
z#)=J at n_U#C8-*m3izcmfnqc!cWJ05(MLV<B!Lrjhs`LN*cOZj(1b_`@3`mPpv{)Ml
zSO72+gO3t!2?wMditLV+ri at P!a?TAf5sM<K^o?Orf7A3U%M^yRo7qDPS{M3KFiKM!
z?S}pJM0u1B+01`uQ_4zCFVGd)K}yFSdJMM))ir~}Fg$+Buk+`7n;D-+()`}#IJb$0
z0Wxw3tlq%gDkiun4OExV8lQdP0q9I|HUmWscQ44nIL|goKCNm=l;Pv=mJ5=x?f->Q
z_>oEZ85h?32GNfNu4~fmjD)=XL)HpvlgN6UqXG6`=*ZUpe$lk=<8b6+JYZ`&^6Y-C
zop%<Fh&t%ZNwwE5DxbZ!Sc73P0=k2|4gqUnU5LDY4aUNwVeY=JH0=q?i^hW+i=d<a
zywHpc2fNC<bq*>ic#%Ub6C>gu;h`)gjX#TswhRq)Vor{h_Pq{}?L6=gKr;OJy_T-s
zrQQrR%A|rh(SRorheD1FGaiMkjg3;;e1VgauoQ2iTuzY|Hh)y*2uf@~W()HtSaHm<
z)Q^Q@@ST=t1RUK>m}M-QH|chPMPr#+k${2zs2igtE8RlgR9Z?G<G at +-MVo3-Aqs67
z{HWuBrI02!J8 at e}XiR4UN&57SyIq#w>)?t9ObAzUuDu8FwJNm?ovnX2JD7}sOo_dx
zQe!>jKV*DJnu2C)PQ(F*iVdIg=Bb~iURLP$W(S4M3(8-qhFfI3r}x$;0C*G)b6xrP
zWi~Q#YM&Cb_-p9|*1pObo2E3QD}Y&XCZG*7F<N9-c!>}@{Fo9wY<GD|T1zMBu>BUO
z{fgJErI};#K(Kr)_J3~#zxFG2_n{9&i4q!ooO%q%f&+AwaH&xB0W|{I-*IbY=xEhP
zT{%k8WKA{sAId*NUJ~1i9C{~4AjRvCsbkT3mi9$>NCSjfrI;HU9gY^p&Vw}8U(gU;
z`Q#8ltBV2eMA7D&og>B~4|ZNU_vF6=F7(o%RejsO#z;E7*|(*OM^eu!&0XRQh_mDt
zcqQmyClU-R=gU#_aHN*$Ks8R%iDrO83g)}u%y4V5C?c`Wq at mu&*u<9ufsKuf)FJw>
z5=Ws#3}!%`hQgz5K}%5eS~`}{K!1aoutQsv!41iaX+5%$AZX85&@?xj;rsd!nGpXs
zR`D{PVQ~3fP%b;*A<pLJR~~3rwzA;{)mX%hK21f5L(~$dU=bP at FhW^>P4!im`v$U0
zL7 at W4flW1LqvAQKPb%HZ*gg{YswOM21&+nEY=@~c`3MLYk+F|nZ;Z*Ma)5CqBiQB)
z^3nnpP2W_QAj=#iVzHL<89fDR?*{C6^<Fa?Oorj9C~B82DHR#<B at 5so28ceBXo~mY
z_UddFUx;u^*N<WCo6uH59gZZ&xFuEo>^GQ>zg2Pb0%oqN(NvOYVdM1O0VSCr<v{-c
zDOp27vtUrhJsB<o|GJ&r9}N%CG_uimX%oTKee<~=8GYoZR}rA+FQv~>bB^_CgGB6&
zKxLbz=iOk!@-BYi&mT at HRJUgI5cgY~t at AgKyqokF9HF12&qp=ER|39^fQnY=B+2?I
z(SYW?dAfh>y~9+|q)cobM!4ga7B3$%3}Z!Ii4G6H+dg2HrR$IA%^P|ruvNxw$_!Im
zI<=*E+Xjs9o}(^YX#)@w*}9K%W-t^rbO0PBq{D>S5^~6v8;e3qJWuNVCLr+1EQ#P&
zPu+~JOuyWGt<<UIl at JUkalm4yM<(*ump`RGFGc$<o&V~LWZ;NUIYUv8u1AKP<05*g
ztcs~4lr}o{B{Iy}<+b+C$Ey&&Jc(cac1x_!*>~*F1rNvfaeOVcV#b}PJ{6$&IBMQ|
zm=Siv<z{V|ua_RPw!U{Xpd at Q=-^2Qy9Rqh>yg$pPSh6J*i~p(CJ00tbn`$2Jvt5W=
zcdmV0kSvq4RMX+g at UJ2nV>VwL1~KDW>_GhW?=bz3j~-;NwR!Url at bhr^md#d(uZhk
zWwN!ZTEFJX-dzLPMw<0&Ed-yPBW8Ef?V2Mm1;ZSxs*+A5BA#<H`yz;P429U6*+i92
z7<R{NvouQ`@+;St`M!epHzMNQlm#f<nB<4!M8o`Qk<n-OSst!3L8NwdvHFhDpqWS?
zeOWl0alr0K#YY^Ef5Sx(b*GU+$u+?9E_B(*H%g6bwd-69_F4tm^NE7Ry#dd&YocT~
zpuqbewlEWG?GCY`#o9o4;Zrf(j(lkGXHU|A>6FM|moucsyUUupc4PZzNm#L#(L}OG
zHFz{;v4%WWm1RM$22Kmab8R|Ka~m*~hr-4cl+y3;QIGaV?)*_s0g9BSJQkqQ3i$-G
zVgPBuQ0$^cEkw06JCJLC=?~%y9Y(iX1r8A`#AA0d7!cmbh8yoD8&$N)^tlvh>8ikx
zD)N at S+r2GLTbS-iwY|)+ at EVaF&f<Hr$+#VC$O_GwD9 at 9eXS`P)YQo*@vm<ZlbAAdd
zpesDg{Moho<kCAKBD%q<8lvX at AQLp2%9kHU1X>2I598zZ_!0s_w$qr57tuM7T2k8$
zlNfmtqher9YXos`@f?a5SQ-Or*eNZHu(Qc28-$c5rF`QmJNyLVT5D)2*p^{>;n2{w
z!)Z?ner5)Wy#m%Q;?x`nKS9sY&o|qN0;ClbN}5$Fy5v2|C$fTRjQA0S5G^~Hfk&Wq
zO98R3Owei;@cr`WWb0ZA6`E_|@x&WbqRl`OuR}^pXS90qMN2X5djF3YqJ5EQ{8P;3
zZlYajjVWx5(>nEv8PvkuYFgyI(1eku3DQu<j;3S%S>65YMqUQ~=OJhyiK+_QN~VG?
zl?q~EtrV=f5GZPJ7BHuHL<9L5Ybn;Ine^nus!jUP2=Ic+_XA0q1^{(>tI=0S^zaj`
zy;=F<s?WYe6Gs0Af6QTA7vVy_^54&Wq=+U?Q|o!+%<zi?(H*do+f>H9NwAH3W=4j<
zEaD(IKB_12*yHxY$OLtqmngb9#abQzk~!HS>|{@;vd>08$s7T!j>s6#uF*tRp4V16
zIjXx%B{b90Q&jzTIabgke at PJq;Wyg}fcflKoOK1GdNKK|nD^XUGx^Xs1&8e7)yuHP
zbHSG9LD*ahNVdEl_}a~yI4)feIspEpH)A>g&t$K&N26?U=~<h2+W-WOcjwq?-+-6J
ze9P_M#|4nkQ at eMFWJ_++(V=2ffyh2rccw;V0q1Ib!2)}vT~ih~%7 at YgSJ&t>w73Sk
z0ACliNPS0FdQIqhG(GQdXj4L9y-Fg$vIfpY&40nd_)o(L5iudLx22mWM8tP)t`1C)
z+t`x`^S07Y2$+!VV;~+>7w1!PJ9)rp#eNg6rHco6Z^{J)vk%lpFNP&F`!KzrBRN?^
zo|FUwYP%K03{v#p@{($X9Bv67Z_L))O$8ynep}JcvB(TsYFr$I2#Q0K)}KZ57Fxs4
zrODU(6}l1|%O$`q!{7HzVn)wg>VEK1ZDcS>208z)MgsWfnqX*gWrRX8t!fz)$A?u|
zXvRP|d*<Ue4HRd$RarJRS?=pI`-puK8PCYY2*1SV1By&7>_juXz;CMpUgxUJ)oGZK
z at ETv~2f~Msw^Zd<qYDH|WU at KDLT4Mi{VBo?8%3oOpi at FVdA8FnwL!=L6^4q(K`@ui
z9oWb*d}R0h1rY5Yh5N4HVSa^EdNkl0&H-2dxmhkOwv=)l*+W!)dXQ1Iq#otz55OS(
z^?TX7rGW#oJ&{)7p(_PNe65Q-OD0BJqL#j>?ADJ<5s5^eW8rt-${DUXgl+LEZ8+gs
z!oHLr%2bZPo&1#KYFk$;t3Papf?Tz8VT?OG3{ffvas>DPwRRwW5#2^krPlS^t2soQ
zeiY)Mil`y;JWx}f56EivtIVv$z^C0!tlQz5XX`|1l~nA5t!1JBsJmxh{9Fk(n9?`9
z+US5LUKx at tlt(==tJXvbV3QG6n&Rd7bvjq^Z&gFKAM^|MI#jLBB-pfVSiWIMg+fZ+
z;wFXpUV8K532r5%V2U>BRek$GBBQD95IeI%g=F0w%@Bf#qiW}{-B at IMT%(DNMYZ9R
zI6PCX!3muk5bka9z!n7cj3o=uF?nyUM!YXX&hQZSQug3oo_zANek5L3oE2d~>G1n_
zxd-DrTTvC<8vty{DRe<L5<{O+GQdAm+N#Enjk1fQDPMtB;dsdZ$(>vto{0|b6V|?x
zu)lMhFs1Jq+h$LvyhEaryq9-{)yo0b29|o!kw$5rAm-f)mo at RSPmgYESGMIx_VFE5
z115<N4<3hqh_X4+KJj=V=}HCMvruV_$gT;w1xFK12D=dc*A+dV$XxM8H!0Zx+0H-o
z7oXqFGK^%OJVYR1_Curw-7E*_z-Cb{%XsN{picEmi$ww^l9eq+la1co!)@`|*dHeG
z`v=^QP-**40e$6egwsMMb3}6z8!jON0BCzwR)xp_U%#(M*B5Zx*SkZ0gZjeQ(b|AY
zXC|r5)^U)$m5l at R){fx7QYTs<%FnlS+xN9$VMQ!w<O63HyJXYHPNvX<zw-1>EJBZb
zZy*@y3$|`t25v`yEhcA=-gST4R@|b*XNRK`ik5!uQ7Vrr&sOxxf>NbPRfR4b(!e;K
zD|FAN42y3tqDackE6r at lL1%6p@=TwPq at iJu5St^JEcJRkK9+XjYkN}A3_X7Z!w9~3
zey)#cc&ve1DO7Yuf)K9I at R*h;u==6sBvX^_^s^=v?23VhVtNAicM(cJtbh@&yfmR8
zGGFx6mjO`$d&g01oD`}>*vMh{d9`l4o&;;QKG_pd26VRY9~jhq;|j1-B;?aG*2xD1
z7tG9vG~^W_jn<mMbwkftuJB&iht;K55rrhTcK=qpu<@VHsC#OZ(;`-ky4hZ at pi}r5
zfn!Uk37*$e*y&?J5;HukDPIo2{HgHH$oh@*jVgh{FjS`k;2Pp50^JS5wMuLpEo>;V
zqRxF~gH})2LNy>Q72%NuIvySvFL8h^cv~Kw9oExJWokXT5%QPu?SLCia7PMU0}c0@
z{H3Xrm9wHvDD1{1+?X#LELpscdlui!(|Jp at L<ZG)qiy5R>Tuj{x8?o#ii!faz<gtN
zad~)ueCF9GM=%?}-x{ilt3zwu_%goouqyO+ay`z)9a(uDgwYs_mJZRK*cWxmn+Diy
zQ)A}?cRKmuNWzW0<$k;35&qfplV>kGfo`Jzf>`w?jg^*tlU4qj)v7=1fnG)y!IXjf
z8Y-T{;zI!mS}Z>}ntQ-f>YP`x=G0|E2gEjjd?R-p$!y6aOlJSY5wLt1s+sG<G~g|z
z8aa>Bc6)kV40NWTL1O*Ja;-TWgdTRJpS$1wTrIl7`(JS1_o6XI`rp#(%yv5unGI$9
zqt*_jsLFqCn}YFbv~8C6Wsy$4KHDQT3*&NK85*@U at pWi#R?Yh=M7KQ;!92~U4K^e+
zuZchD_+tXxRAG-zL7rmbY4KtT9`eoy)DX65MiKyS7R;(G1B$nf|0Th~Hi at +pMGh~<
z7&mKknBM0vNxy1)7Hi*q3nr-KOmsP5#=igOGbDHA#9r~OINy}e4|d<V7v=4>U<WWD
z{uur9$*|CIZJqB+$ZRng!4{@>vA!f83qHmz-t(Lu#yZ~S?o at GtLWC4#499a5kBTJ#
zVHkpRHqwxp4hvh&GsB-$i(34|X_~N9KN8&ay%F4QPSa(RvVj#ZbAh at W@9WyBSTC=~
zsKe#S4P8FfO;c=SM&8-tGxHis=nB4X3nc at itBKmxzWMJvB!Gf*cC*|VTSQeluF$D{
zp#+<Z;pY at 7RUv3YUfL{eLzT{m7Ft!V#@B#Jbkrgmmxa$;#dm6U at c~&DwFfSY<E30m
zj^qC}x8B3hs26(pw}ypz93U4 at XTAcTh)GJemqA3^Wp=!7ufjk+YG}d+Si02^J)x;d
zq$Q8hnG`s{ZTe at s0=oWQ2$Ol$ssbkK7|{7V#}4q!-Js<rY{PV3>j~gYn7-PHkuxvK
zWrlE}_A&E2;$W?5D-*R9om$G}Iy=th-x3~FHuLh_s~3equidQ(X9D7Zbzd2zLnvtB
zol~ZgO*j>uU<vi at jgNs9%a>Z4p0taF6NXw9Q_ij30Qx_bY9X#QlXOr7tkM{I$~YMf
zAEDo^!y%Z$cy-qj81>8`YBGC!cq_C}JIp%iotOY&73qONJATHfdm4BAr+WJia1W0U
z(kUrcus;?re;0 at 5x{9))E7TcX(!s=5QNA=RoAele+Ym>Uj-BE)DWe7()@2Yz0eod;
z!rN5Sq9{X_5!@%g3nG{I4<pN`U71XkuX_KI{m<fGI at Oq^!$OPUi*EC*lYz|jv*lvK
zy5e+Ce)G33S0oY0R@#Jv*y48 at 0R5N>B at Nnt!mcjp!;6kSfS6ajP#I)K8&N(#Seaz{
z9i;g3{nrFATNrxcBI^XxUy-v|T!m>Tk7&G-dD+(nh#sKy2#H5)QY6vX$)#x89<aBV
z_wuualEvSjAZKeGNgNPCO_jAulyB!^vh;^as-zhgWAW}WA!3SOfHX77GfCay1`mU=
zZqqRvL&r9HW_v4`;b at nN+1SHp`K1<@(p at _Zw|E&Ig!IQtuyctqI!jz2|J5F{A=ihM
zGX9Gp=Wr?_Az~ku=33WrmX8 at h_fM=&+ey!ZUi23+-`@UMA6=N=$4S+ at k(Hj^Vrs(!
zLvq4ZhF=iEE{mP=?f^$S-{xcU|EFh?>WM*h?FZ*aUb$t9_f&l-x%fRDkF8NpRTDeK
z1JZ?U7O|rWR_zo$ebaR8k_7Up*y9k++y at +2<<XlX0V3Hqy4%JCQ-oqJRM{REDzNcK
zzu26%2GMj988hjsHh<9NHL9EC%)@Bbe;GksgSE$mBbRS?Zuqkc)phMZ_Vg%w|MDK_
z9N7T;IE7@@5m2oClG_aA8S^^eXpwlMt`5X at 6jhs<UxIXRNF(U;)43sZdBL`33)Xiw
z{xU{ZE15<2E-F#*1CIOOgQksOI8PyqZm*pPAR^jRTJ^ag*MqH_8Z8ecCCK73Q4^y?
z+Hx59r9RCOymNa!CyX(G%!dw-*ckIX)LMYjn~TaASCgNxm9%ZEEFVK^)z}%|O|i-$
zC=>7T&tl39I at negR<-gh3^UWgzU#fyx6*h50DaY~bsq<m<WrVM66`rB<C>9({<6wX
z844z^Pu=XN9X&|=H&?*R at 34mr(#8~Z*2i;*VDol+H_%`XwKDUxP~H|$?Wx+}<^JkP
zzsBU%NW+I=K;Urd(8yha$7nSrDE?q{mO<R71;I^;CUOkehvO<}M5)L%3#w_$M8;z|
zsHP{|>tONeQMs?aUG1R{tB9vNFM(C%P#BMH&$0TifQ`&*Eygs^ZCY%PK%7Zomn~!S
zDe&~=r!y2lgY at 5fGU%=F7V9ijyRl<@OAHP-0kKaKwPf9NXOHrNLjOebEjdIzB!B@>
zjN`+4{yR7;E8bLcwo8!#^979tyRY?7_9r>6r$2!cTrjl$vugGnN|j{A<{Z30_-L^<
z1J(SRJa62tulS`(qA4@%a-am~pk-;nLIUQ(VB4aA)tEpVufLSpp5jVZw922!*fvVJ
z_C@|Ni+WLrznr7Tx=4xF7$!0FTwMM<e{zgWG=?Fs8F8&wCwJ&M_+B at U96P)R$2vcC
zv!0Osc!A?(QZ_@#vE%B+u<sMxW&HO~!W_gS)S`qs^8<m_5?&14#goiaPk}a&u#Um8
zv4mY|4PHLWCn at yM>j)a(KYMW;tam-Ebn?U>r}$5>!5L0<90Fkx^@8A0b0bw^!S3WW
z!0<PB-flDD9pmU9GfzNPh9(_{mHo&`CAUSg6>$OwSYPKs#0Rz2KrD#MeyPUZxzPp-
z7CeJO9nJRO-vT6zqgOGWB&@Y>7G|CBALBC;L=j0$DBLXNH6paew865$+b#lYsEb~7
z)Z$JiDs2hZPdvXiW!-&#4*AO}*{80=g~BP?NGe!}RGFd1CikLCPor2J-9Iq0U2;wn
zY9j@<N6L{=9Hv&42>UbclN3B;R~ZN|9oJN2#HpeX5~I0WNwl)$Ecb-<&vBZLpY7Nk
zR-O=}Y9#9;sm_>67l{`#tome)pD1B5%w+7qHJX1EY_qHjHGaJ$Zj5cSW#lO^fts;I
zRL?5U6JtD9te-9_e6l!<6)-gZA^6~6(&CyI;mwYv1+7ByV*;E;uyp!;t0XdKnUSGV
zK7rLLg=;K`0|^z!;0}xLJA0mqwPM_<7nR;R-~`K1chT?+P6%zA%y^RyK2*faZFhd4
ze0F(-YR-t&J9HR_KPKhcuE1|^<fSFp!Veqt5_O5Ke_KZQ3+WZD{-)5Xfbt+sesjPn
z@*g!{EhUW^>AI{PieE+qCNgzT{zqC-Nu;%ubVc~9qscv#xaKC#uG!BBimGTjsgCKF
z*72>zrwl%bL1rDnAxvvB?E<g&a1MpCrhB|lF2)G~1spW+oWQvVJ)b|H-OtW0Ri1r5
zPLQ(aMLoh+5@{pD<Ta#Kg0s-~R1{x{EhX<UmC8qn4;#mgR2ZE0%BhkQYb75_u{+|T
z$N2U&F6j?RPzqcEmZMt~!m=?KXbNo%T8K2Nda-aTxm&W}ZMeF<x;!bs75d6-*d5nS
zKEt(2Y;Ah*#viEO8FK4zksUE^Tl?+MbbNE!-9}!tKC9b2&<D7uRK6iCU9W;;zO)=P
z`|vC$P!b488xS-i^1%F#@-z7C*)=%|{CRzz%FjG?=Gb at jEPB6MsMsM)T~q6_*~C%;
zEb6eKk<3~;E;m;hCv!$rC_3M!<n66$gr|zhu{j$uVIisq4#~X4=tg?u-nPGmjn)+)
znqMe5Cd_@!QMS-`BCjUTPG<phqeGO}WpOy-FIH$$O4)m%kt>WXz}&`Ryoxt`>-zq{
z$bndf$B3eY`>{>Y-d!wVtFlv$(uT<(m_35T$<7mR0mJGg?q-?ONZHcde*iPDCXxv;
ze}W4UkZ)w%*p=d$NTw%ly4NnDexjO2o#NP;cS5SzeGjM?tB at b%J=-_4_3DfbvV2|E
zM*;EuxqYapco_B>=E4~#hWw=-(?=7x*;DNtf(S~9!OT)vOtK9f^Hc9GW%p6Te(I{%
z5=Z<dG~tuk@*0CygqoO1+6UYS>deYBu?b2)JFgGW{s>5BwM|ikIk(lGA;%>12{d!f
z8aIs at e=X5?Qm!vwj1TRZnyrn*txY?KYW$133#~4wA?0?D@&@r=dag>w7Ca&!KxiZF
zhj77(PKb?ozIXRZ0}hzTE1LMv7&`^6(gn9y0cEll7t+vARived@|A^sErw^D=c+=P
z^xuQX!r}ZGNGYqt-Q%kwP4^cDXmF9LmCHl3AL{NI)3Hmw&E83k-rs9w0n}2g8IbGS
zCYagXDkY^?3_Fyf9nma>(X0H+id2^!aj!>-ZD~Q4EESpN^;m7F=IR=FFOw4#{YLM|
zby}y4LsqTw0FCf1Y9<?)FO%iBgem6=_aw$Q$sN%`+E2Nm8{y0wD1e0P0gE?IXVfdX
zlBk>~{?!#wEvUu5?;blm>|Zf!c=eAZvvf}{g=4Q}QrbC~NZr)TpA_y7=E42yT4uSg
zBjwOVWJqE1g!yN~se0hZiE=hQU=MxBS^h<-HOC<yqG%#191HQ1^`=!IkO>-9UWQ(;
zL~@JOvZE%$py%^>#>4)$!ShuT4qJNX03r050GbE^D)D*^O<=mKX9b}~M9S%^p}TUk
zhSJ!M%eQx_-T=jR at B1~gZX2N~%Q>{j^4q>SBK1@&)9pCftfk0!5BO%!WBBw|rPB|V
z+8fZ^7W@`om#~8{zm-tV-i&Z{6zkt;@A;B=YMi)=Ahd`Xk5c%2 at qD+c60cyJllKnT
z0Qu$4=5rQR6s3cJkdJUnI@|{<Lc3jkZ(0o_0D0v6QkjWdAa~WR%{-^)K2WKKs1ZMo
z*hGyuH-rSE_R{Ce?znn{u&au>K20&$^yv))kk#>(k=!V62=Qw##OPI`gjW6BxCr{7
zP}~Z2xMt2biJ$KJuJS>$H3UeH8dI0h;TbKC(z((h$sO)~TrOiIr#Rwg70I2G8B#%6
z(jBgfz->TqxY(Ps7xQ4xMe>I#(&u6N_y?X1%@^Wj?dG4<{dSiQY%z$9J3S0Q+EKrs
zrf&H%!sp2;s4N!8721}OSJD%+QFjQ>5vPLvxj~-vQkH;wkW8_mK!PH*oy}+SM4($0
z;Fc!pRq_)06@=`njv~(Ne&TOMRPJpHOegV3SIyqA@@ARMKcjVl<bR*LI(12sEpeX+
z)k|kIs|F`9RYv)JA<jp9*77Q at kI4b6ns4d6TFRU>8F_MhfIZp87_tq6*%=2-)35<w
z<{P?^`tP6mBw at 9Ql9W-qUKz$n<AS<60H!&9Z+nC)Jq(1GsX+v5A at t0T1u}BuP0M#x
z2=PI)Nu{)Pr>yjj4W}2ENRfYe(fWJM5({YGi>=V$yv(PN<wZI(I#6H2(?)1>=gNLS
zDNUeYy}pYUaNFG;@hypNhVfVDvsERlL3cV`ZIssr^|#UT3-8(nc!H<u&=LT?BG`4$
zPnRZLZ(2D1P#>=;bI08_J&H0Q0c0HaZ+3?p8M}5_W+>9KedU>yX#nR)cxP>0DH~O^
z^_ofy0|Zb;s=50CWB1ix<-b*RL|A6Av5$SC@@x5M_;Y2_4 at 1Y(-0BMh)R$Tnm6|PX
zng+HccCvGtx60P%T01^B?jzR62M5oTh<F_R!ZQG-wnvHkb93?r25AKdW66(4)fzjZ
zP0Ph6=^OW|LCEH_3u9g<8Incw9rXKmbbOsS=BG57PslK>gl=Ha_7v*e-!jjI;`P90
zDwIoh?c9JTe4n;vfqRPNq?-JP=v^<`lMR$~*jDpsOQG^To0r0)H)`Ys6$wF&Qy6uI
z at N*w<$IVte0$u_P>yob{s+41g^&74n8_is~5FhQ39Hhf8SaB at Fr6KO7cEict%d#F5
zi5=`g6GOKAU~&Bkn!1mee7<_dF?rnb8j8*BhLB|foethO%({gvHUp`a`;8Y5t1U^Z
zP3r$+z)41VrVrGg(Cv9woVWgqA|1}dW&&p#-vw%%haF?81wKWeli>%cC>eRxz4<UH
zFZmvRzPwfJ{k?hB`2{*O1)?g48W0;WTTGmW5<78dMb(a?2r~%@t7NLRDC-16g`Xy$
zHAUY2^JZL%<9uwoCXCK?-gMqn%!zR)=AwD1iBo3(LS4DLkslezFor{An}u8hZ~BAG
zMJq*nl2S2@(RyruR`7RW;dEOn6QUpI(QSj+9L_h)IFpLB@~?5c<+|>b;(fzGuHE2$
zHHj<c2jr35_NOkLgv9yOEZW`?=}Tt!sGS!ObvfX0zWavZQu;?;Yc=NQ9;L)rfDa_a
ze80uK1$99ecnhi2E$I^$Vai;sPNHRvRnGBIL%~r6ID%d6?Myj?;BG-b^iT)|O1{bu
za}e1quxB;*D({f^uLqEKY-UX9a=HT#>NaAT37hyDPi;4$eWiz|X at 1EsoF=}*)<OKx
zq at Q>w?W%pb80t92*b^)6in0v$F=f~FBgM=pa>?m96G4OU%O`_2*_FAWi8{kyVV(Ub
z<Rb=A%6{bR7M0fq)~ix<N_`(T+anLWVR!HN$fcOvQTkT^o46vACSD0nA2X97{S8|y
z0Bvb<lP5ziwZ1iCSSl8GajwiN8klkKU(U2Cwg}PAtUy9cGA+Og9PhO2#*KVXAxT^s
z?}JH9^Wv(oC86L|i2ry^LF%lALI_9gg2xd}xxd}mwUs%Wi~Zw07GsuF#fSl7<`>8E
zW}b#@x=6*t+PvU1Q*68Ezb$0be{IvKUd?(7zd;d5Ei7${XH;K~aU+;VRllz25^)E=
z8pR!Bm$N2uhqaUp1_;A at T}>)7vL0%;Ye!SduX%BH{+~0T2ge&wuI`c1kVnQO$KcAk
z>9YJ#!ZTJTr1|%(A(rrMbB+i56&uLpZXZg+IPv^hDnT#hNz|8B%}luExk)GKNUY68
zNTYIrDm=#iSIbi=Ri~B<H9yVk_;!BycoF(WwZc{TSBLph#hX{CHV~5>;h>DNq at o|5
z6XjFB8C%_g%rJjOQyUozJqw9SKRHLlcx#9UuK}LpY}KI*D0&$DLS%v8l4)lrC#o_s
zzP&~UQR>qY<e}gQPa>N0`;&s+#BTn02vD-aGkNE7DV(p7DWUGD>f?rq8J&L;8#4S8
zo20<9J{2%oz%TNru6Ifll9zm>z&*Bzd*$AcsSct-xR2F1m9N^)d2b2WhhDm~?jj7w
z4h*-|e|zJK&+lwB;DELKs&l)erQ_}lauv!pLEX_lo(w-CftgEQO<yzaZdjVp=|v+T
zY?0Bm>nkfkg2>GctxMi{PJ>j|-hx;@j5bF{&5zh2TxTAhlB6Zju+527tg<r%Ssb8X
zM=~Nuyx5Ks*x*~dc)bFMJ2S5hEv!$ctWQM$H0wV`O?PE*Af!^1aB3B~Im4+)+CSV$
zSR!2f5keP1<vRCT>>ChoQJK%l?K*m9(F^HTR1TaEKmr=A2iECDaQ*eTs_p*3NONDg
z$1~3|xc*}9+LEpeQG9+l49gn2<zAM9IL#ZvY`sSTs at xY}MwzU;*@Rds at sqz97*ff8
z1;$D_<x#&Yqqx-H`vuL<f%QE<ttaZkDui|mDI!2KCxZv>A>p3sK=q33&|KvbXL>Jw
z25Pxy1<_)d;g;!*=}fAQs<Mk9pz;h;jIoJNkq at c#ZA&<+cgt9hO8v}zx-HEkOQ$p9
z>`MznQ}8$S0!t*bc8C0HNQZ>bVH<est46O2 at e&XunFrEOWeYV^>UQl!^vh+=U}*BF
zuCl+?*LIkt^-;)UQRm8NZ%q<DHg{{jBwD0;>u7y{oMm>xqft~Tle(OHG$DXq`u=|>
zu0x+Yt{K78u{JPq-TXtm#m}CgllRd}C18OqlF!QkzrR01HLo>OXbSoq9XBj|pS8kC
zDj5ijMK?@Lwegtw#_}|J69d<`Aaq<K31E$TutnDp{7R-mOMEwsO^2~b|5u&|yp+`%
zBu2G+gz5UDn-DEzR{^F&_ at j-!Wb6b{s at 6C-Kin6NNDD*Nk0iN{E^LQTX<g?XEA_44
z=H|7{I&3hnm8%q{r<Q+X&*&=dx*uujmIoZbEsuhdj=ZTq%y at LXV?OZ>W?PVk=08y(
zoKEAKOfsz^E)}KX19pS?7w>Su5CppEgFQ6Yn%{ArU1~a54#W7Dt2bj`b)n~lCV0I1
zJCRt-#SdpUsyqT*DAOA9?c4<5jt49Z<}8*oJLQDNne)!$#wm072TmTk1pT%xeml1i
zS|m8GStKdzfuU(}Pqv=Pi9>W|yOvwX&ej=MB(UwO<NakV#U1U|3QU6#j4d&`CQ*E$
zl;aes-<4{9pc1JfP|Z<hEHVS|b4vq3PGg==Mcyi-x_7X~T2nONM0ONx4sFti5>fsB
zXI8*yVKq;XcKjgPNU#kFTCHs)La{(u>*Erb&{UJS^Z9F2D7v|GXNuuND`6U#Ah*{K
z`jxt0m{BL``!E(MzZE?CQuAyg$`4R4Me6<0(x@%U-3;INs at cQQEvku%gw*$`kE=)Q
zyho7;QoihZY~?Q(!sgX6-PhUP&HpgBk+?r957t#L0%Ba1FOHCQ<Z(4VZ{#=`gwhTb
zz4(oyluk~f|G at Z6kA27Jn)M%5d5udExLffp`+HChEUTU?z_SpcOU_I5Tzby{#%ep-
zehAK1=$%kikZ<5^vq~HCt)mB)#oL}tF^&buZb<DnAXNLTEBDz%oGiMWeWf;zLZM at R
zuaBOzv0c(Rs1OmNedM;8w`Z<%OsorB`xAUB)%p;R-wXYzb47jVYgRiq)r~fTHf<G(
z7BO3yW<(BXm)OEfLH5(NJF0TfT$pKS0;dY3`#hfqWgV{@#@3XjtQV$jWwlSe85`4W
zR0F^qFygqwL~UMJ at qXlM098gYX%5LaAxrgC2qZx*Ypl*=V$}t11YX_5WxIK_U^HQ8
z9G^>pJ0#TcJUFogMTRH4*CdEVWRs5ge$B0pidR^gOGDO-crI-#`;|J~u4%4ZX6uW!
zq*Rh%w>2Gq-fZU>^NBz}#7Dg(RAhR>;c at wctXu&X^FBT#vIxyMUXonX4B*$Qy<Alq
zIopGjC2ssigy_mnN95liVO4(1sYptj3=mH>#R#{y8r$@Qm+bz%Pw{Cl at QfPy{9cXr
ztc<{4d)bQh6L(^S><jjnE^$)nwEb~K9BdB}`5dQg%sl{2rMo(6kr1sI02O$EPq4a9
zUHvE#c6Ocf)Fci>r#wuq>{M;=!cNM+ at iDp`BhbLs65%I}($L{jGfOhBS->Dc_AL`@
z6WJsDN!Lw`^!+jn at jChB*ec(~P7W)0*s5^^*Xz`41t6>I=SLSXd{(;7=qip%KVAl3
z8!i&j^1x81Ea*+H_09{PIpjAqvrFKtNLC?etuvs7kEVh7jR<;Cu+3pS*xqQu>9~<U
zkxm(j3)r2 at gfsAn*zG{RgXJ0^a3pm`u@%lezZB(C`X&i9ospz+hFVzo3MaSY%dvTU
z;<(c_(DcZ|Os;_KKR+i8lgkR2%@q+>tL>t_=fRo)59~Y+qwJv1Flndea-{0(u9|=7
z=5 at bkcW{|)J{=#g<RQ?RIIwBF1(1IG<AUs36m=a<GM+#~E#IoeF7q1mA0+Zla1gqt
zb*Sj+0Z*UUc0E8sU{vr034P<i+Ssv2MMF5_up3%PO=8eFdg2K-({|aKODTtu2QhZN
z$N(a}W at Aml?QPeg5;v-um#wbLfs&<a_K-~>iWW#E0ky&lD+B+<q`f0(Jmp!o^RPLB
z0{K3hVfsCi<~@VOSK}QNFZ)i$&4lL)(G4s^%dRxH75Rutd8tc^n~paHMd${Va&IYd
z4U)B at Fr7OCjtiZ>sa#&NhXIq5s2TT8^YyYmCzZrI=V|VNy{l#XgoMM^>~fq7?J6_-
zki~`!sl>-Cu<^J&VwrOJTie@)`p~|E;D%RxdZS#xcN>2OyU{j>!htd72CG(>F0?r~
zD-LYwbj|_2Feb1;+*HchA|_dUH@&T?cqX9Dq7=J6HzEAtVjEu1?h?cJXkv9L at 57?V
zq)()KCh^}lz%)5y#kMJN^$J#MZ4N=8chyuM_7zx at -Ai3b;;DU-X>*>8`MM2OwyYFF
zy9)mbFQFM}88tYTv~p}p(xMvH++BJ6$I~@>$i#!#Q!san3S~^zuYyr<+harPsP_VN
zf|6p}{%Y at j8ju1}YFNuyzn3nnsgA_n&IfUWlUjC}MeDv2FXyS(Ma6#AKyw#?T+X4A
zZw|)~^D~>!-R{I#p)Sg3TZUGMnMhk(H4WQnf+jo9p`yua**xEf at _*x?D%A&)JORDW
zL*YCd=V)GgN(gC at 3E(aWK)p4Bl5#F7m)ifd?TRi+(=*!Da5u;_<O^%_q15v{@5!S)
ztHYv7=y&vsx<~ck6`dSaoWD)me|g<{yZIgeVbnO8ge at I!Q)-v2_d0oCjitB%*JKb#
zjbp%J1TBHw_IN2K_ci%18{f)Q7hdMe0FRHvQ<uV{7Fgf&@eTS~GtT2G9H9&LW!d`h
zg1kn0|5sduvl_~k!N2BoXuKSbrCgcD4 at 35#iY7p3)%ZjZ2Osng)k=;cYNaW#nb?|p
zPqQu^BCPP?8uiDRa%OHM7FfXzv0xv}71hvs(~lhFJX@~lBsjE2B^@K)X3Jn`Q7%}S
zn<^Naga&SDDEL?s+D2KAtbr;yYopCYHrW+Sq*mH-3-N5CUzzQ^JaN)Y7Fyp%WFlB7
zyycoWHqt;l0(PjjgM7TB!%WtQjHBYsr_DFs<y<HbTInm<*GQl$oI%+)JUN#H60Hh<
zEvocRq4=YH(uiDggFg}|JxEHU5GIpX=Vq8pkVsC913X!&ebjb=p%7F>)P9xJvhvM=
zM{*099iEu}-4-ddcOW~VX}vw=8P>7jOmlY2$4yTV!pZs?#&2~j$K2<I{4p2Fb1vOy
zoyltD+yU4e@%~e}d*ni!dS7qX-s~w95wklv>3-CQPVpnZ%Vkr+DE?q2JLNEvcg=Un
zs>u5!z5k3d1%}-EfC_zVJgzdfU9p3!BKUn$vGs#y?N<QHWy3h)ab|Phsn+T$ECyF1
z{+`Iw8M^5o7aZ>JI-K;7&j+_3e#?+~WuFuxe<WIo+KMV?E2i2^G${Lf))dxIi||lS
z+T~=arx#}mRjhb+QpR64DGSVt#)pRD%&3rvPps91cVBx~(WqJJqX;NAeA}iDfgujW
zIv8>6xsWPk5*SUn>OvUhRFnCmAUzpYaIG`Fh7#YbO)C-NVeoMWeK~aShEqYdrPG=D
z6PD#)QAhdl0IL^!L)7J;rz*6c1&$o7BNT*x0!PLb4{jjj83CE%lW)29Jj4$%QQ48@
z$b6dyj-Ub;3j*8zbr!}&93~ofEBs>Xes~o3{cmUa!1zbiwut#NnSD$lf!p4j$|2?g
zD;9#35HxDIGfR1>KMyp*xstZoilr;@gsi~w?%Ztzpi- at FWu=bSphGv_%8I2yzZ)DW
z6hzJ~uHS1KH|zVdxm^V&Q-CAWvq50HBx7m{a at j|5vZ0RWGt`AtPV9B51eC?2Gn(P`
zER5b^O8K}r%M-&qSNt^@qaW*i>f2XC_r<Fn4`2+0*0r^SomwLG+Y$ult~|u!zNEic
zgrKNH at h(?o)8ZSP3}+($1pw;}Q4~m`lbS6xyQ{Dh_pl=1^4Jh6f-_~f;A%}n=9yF6
z4Yh8YBn`|%OYwQ_g-nVWb?H3xZ|r<Eje4E`@a^6wKDm!r!Qo3jl2eK^dyC#Cs+Uo-
z)Y`yg>AgSriMg$wR#LVHA+8lRiVQoXa%B9+DvU{y!czc_>q-U!?4gSR(Ma;A2%7jM
zRg<Eem=gC=<Q5|^#@`D=_bk5IXUka#U5eQ=Q70__X$l at O;>efB5}XUyE_dKeo=PcO
zD%k}y$KJbbB*sKs_kia!Nk7qw_Ec$;=&=L~xHYa-g{JYNbE=^tPlE66(7(YVbE8Y<
zAXdyG!Ps1}6x#Fkcy;{~exPQ4&LR-=Rxr at +u*_CJ3>r+)QGKeo*&?LzxZQOUEC at Jk
zsVn$d2pDUx_nM!uE#vC><uKIv_CLoyW~*D3-dkhE|JOL0TXB$1R4l1hyn7f()reiv
zoI|R=6KdWVGa^z6z}uzF&2*W29rP2y{a_H_2(bM6yq*oZmJUcx;TLS=Hc*_{ZQqID
zOQz74R>2S?i_gZ|<bGzb4nBK}$G?fSwb7l%P11tkH at m?IWr8OyHRhRTDc_730FO_U
zgWPQk1B#aJ)KeJ?kCqodlD75bQ?@tO(2EMNzF;PGdheUvL_VLr{I&rNTq5U2^(y?p
z8kcFINg5|<rn?Frjs_TzYsAN?r=fC*_J&v?lQkj8_g+NUlA8f)VLpFgc7EC_aKF_O
z;_eB&et1#5%(e3?zH2NtCch5CvPBv}OFuw7NY8=MlSt8SPrMq`j`!le(3_juo~+n+
z2l_C^@*fQV4c}~8<P#>ma>AK3UB4qHosYbX7q&{Q0LYzV;kK%RqlwqA#O$a3$g#(3
z|4l at N7TV>A#X7KOYuEXD<N4|-7Y0t21BgVl+f|PQKv+-RN-uMx;kPAz>GfeBvO8qr
zdN*#O7l2ZN4m6p;kIm&@HxM~q>45B%q8Z285=nMlqgdkg4dUl^mj|~K0=~6MkS-+P
z%ZV9=)2L@^``f(g1`LY%Iqiq6lDFAW{g5I6&5*|i%8beB6b@;N-SQHyL^?|6TD1Cw
z at 6m)s-Ego#O)*L21Hvcj!dYVUq*QA~Y at Db*@Lgla9Op^S@`n<E>tJPn)drE$X|itc
zpt^3ykR(&`h($TKvOxF=Ycd$0t4>DV)=g9>IeslMFbm9Xb2HCe{pE^x5j~UjD0eI_
zhaOmOpzSXAW?6DIs|-Yb4`aHA{z}FEV0;DE$t*>GpT=FlNC9c}|At+cP7aL)?c5=G
z6RSJ+;5l1}@3<UvhW86`C8^mF)xu<ET}Ng%{vUcCyUPh_cOoP#Ai5B|J0bj37k2$w
zLJz?#05JjC5fEI at hfo`s(Nra56DrJ+m02yWzFMfpEw?_7GdPOnK=(sJ-+DGo->yf*
zk!<nfV1>ao@~n?UeS`ZR4NZiBFm(^~R%}Dn(*6}1x5a*MD>4pj4ZlEl8H4Pz)_Np3
z^+hc&=JSt3Ms#!s?L`bXG+^-5juy*h9K|o1xv+-kLibF{R&drP8 at L5I?n1rnQ?&U&
zy6LZpjgfOr_;!Iori%Pi6rh0CMTb1b8Wk3sRy=kGBCPOylr}=omUv|V1wi`0@<W^1
z$6HJC6V{WFn=xj4#?kCOf|)6Vz>Nz#&}FW&s+JJyDo`*JLzWG{l`<h};7m&xqDESF
zQ90W(M~Ke@@p);M=>G$N!j4I9mQVXWomim`#vfLZ)P`qZy;cNW_u<fHyVY0-y3k>N
zzrD}EiH!#e3c}bA(#`dE)8!?K+{`jxJ|owL-JAOW#d_ at pcppOTSBYRM*HUfyRWoCd
zNG%*C($J1H#-3rcOlCvIu~S(xRONVmArR_Hd$}~l(SY}i#G9*nE1qWh%+*F+;>6>C
z2U_QBnh>#e1QstirGt*FUf~B3Tftr))9<89`(koOf6Yi}fw2t#1_($0Ye?0VRKejL
zJa at qR05e9QHLPBSkR6(uv3>(Qo;k{2!l}){1}$E&FB3}$WP38$#&}dsS`1N8A>!V;
zRaz8>S0!ZFNFHZHuS{j6ZPyu?ioG*oRE^i`9m7e8-$gT!S$a=wRTAOrw1G6|+h#kd
z1dFxyX)!uyEwm-^c{X7vn>!rX40os8j;G%<IE3xa&ucOTm{@;~I3O`M`R~Eff0Rq1
z?Sih_mLdDTsbl(R)||n#I97>~vyqa)Mu{}c2X0qYh{12t58GfBLb8V(;4%b+GC_T0
zVBSGkQn>M71Y^#2JjS${{^tOlBEWYIA<luh at E|f+-;fr=mXQEGo{&>QS)Dqryk&$Q
z_Nxl*Vy|-wQ(;yiaM(E=(-=q<?zU--!Cc49XM#lm--Yw}>5`{_fTiTaigl50ir2f|
zTWW}abpdZd#%$DT7mrQ5B$cv0*v5E9o25A}wDRG4_(PYs;w at WMm3FieIu)k9$kOd7
zHP!LAr_<4E7wVzD8~+C4rUffi3?}IMwp3w(HRR0s)1hGAmL-R{L at hDhTID+0jN+U$
zRH7y7hWZLdXdEZdwKnQnIW={d*d}J+^Wxs7WN9beBmn2nx|fsmYAaAS#Mfvuc1O85
z8$gqRm3Njf at pw(sq!As7wHzTn0<i{D<de)Vx&LP=ph4WWJ_41f<zXk7a-fvSkVRC2
zd~h(^jTB36r$gW9Goyvjc%WnP at R95y>BY#hYBm=mGU~3Zl$|?k(nsVBWSm5jn#@Rh
zUG3JQ(MCi|0m&A0`|QFm|MI!4)XTnIB%L?uux?#od1_VFkP!j(ixVHL#JWE70ek%6
zH4gz|`njDq$C0S6i4Fata&9*T{(`FEP<%%U{w?qiBGO+*O~Of$+rc`j7HOIK<o~>{
z?TfN#id`QF;*o>CNq1C*QzhlBor at s*7|}mGiTMZ17V%nufP!=MbOoaIQFX1>dE*vN
zGxDZRQNRFPy6V=LrVX-EI91KMCoFN89J_f3R`*%eER(8mL&jF%BB>}JR9tX_7TX|X
z{7BSbSF at Y6=2=H*D#6(IAjl5 at t66JY`8)06CbNCwIIE!vMraOS>gR{54Yq9U$tt!G
zTA!)p=flz{)F=?K!xl87C6=#4_9IWOBU at B0xav4BB<a(wmG>AjRV at e&J}?5L7m&5%
z-z?6vio8%_+KZQ;CbkI#uRlOvVK%d}GQ#?_-HRo){;5JL|D4UG0;Hf1t{YehlwxS7
z`x4F!0sw`08(u240PCAaj+%@Pdj2qNXUjJnofZ$-3yJTS8|NXvzX5q6L2&CXbiH3d
zWup(kpw&ecQCv#}z3`u;-RyD6+82p^+*Pw{$+G8jxz=h28%O5_S;v8m5k)BqY<#?{
z^z2CC&n27cZR at q^|2~CEZUb>~lR7j{HR at PbnBuWX*}`mXJOHo3uvvl1E95^pgx3y@
z{GhUqluJ2+W<-Sr0haT`)CH_anUZPB$b;%-5)pdsN at 5Uxo@`i+rrr)N5f=Wgb*<uu
zkK`=_PAZD4mC`dXh7wx(?vy>AS&KkPy^_Z>N+31$%;YSxU{(Q*8Oo3k1?iZ!9nZ$x
z{GKw#OflaZ;_{8st&C0t0iFa>cWuJBrM8S%5xfaIS2?}pdxK?nW=z8vzH&@7&P3I+
z(unO12E1L-9*op_n`CS<Pf*dj+b?B^#7CgZw5SoIDLAR`=xgfm);&TzzmPK*a7BYT
zOmY21`(W;d24`>3pMCDV&(gINV3AL9$dtg$!``##XLq%&M>nGV3{?-;pYs>pZLBeV
zX`1u}i&Z^A{ew~mG<<8_C7Asvh|YGV+FWo?+d#r(gkUppcu>}mp6#T#X0B=1&$cNf
z%F=ki?Ll&6+*KW&k8WWIsQ(%Vo)6wZ^F}#cDmijR#u-R9>XSh=rswyov_n!Grsx0m
zke!%;S0KP$z7s^#b>#mML03=$*@T2~b(GW>WtL%qf?o){4a~y-Q5ak$u~Q0rTj<vN
za^qgPJ8|jvtZm_L0gP=)mJqg`{ud`580ojJsqc2*dDcu3_`v-<vGwkSbq@<p%ZbTJ
zmWJDSK9;A;TqYe!O$B)G<&C5U7Jg|HEf6T$?|_Aq<i`|A^b&}0b+1^fXI|WR`ba2p
z1=JU(ez=vZgcFMN#K{7!nUi<D$c(~PT0sPG0I}hFrD_t!>1tIHFwqkkmI%(qG2m&l
zTh%T{+h4bcDiIdF^AQV8brwOkL_G+|Zh}R?)Qrleb8Z&L6r}i5=uR&^0O$SygdT!>
zlCqbS8C4wGNth}z$C;Xm9|}X0FLK{LBmq at ozy-ieH!IGB!r}~RAyYB<D!cxe#<4)m
zzl)?x;Wxq=r5=rOF-KDgQd!1Mscd at i5iG~Aq*l2|($Vn<x{p1o{*PQXCiLNnAtVg4
z3nfL;rc=_lVi<z2&ImhKWxeafNAD1esB5yr)8s0pVy_gV(3?%aP8J6AaXNyIUU<w5
zZ!V_vfpb<CJe6F1TMlNklRB?+C`KxyatY0u(|Q%t*Y+_zU45pvmJ;t8us}5ejjgMy
za9!;%m)0Y$3oy7UpzG9n%K at vTBWmd$wF&an8v1em0tL^U&P7TBRwqYvoz at 4aC{Dj1
zg1pahgB83ov+<@5kN$j10YUz#eVfFv<Pz~LhOyYSvJmrLM}Z at GZ#c?@Cmk61?_(t*
zy2c|!Y?OzHS79A|*Mv_~a*@J6Sk+9V$8B|NQoyD^9bT at Wg=89q=oR<dN6k at -k&KVr
zMI|_{AZf^$bDdFCq4bWlCb;<JCimr~L-KqQ+ZLg!RAGiA`kqVS9A{?#P+MsMIqKdf
z5lc9X_*uQ1HQvz at 8+AqzlWFd}ZSY)bf@(uBI|q0<Lv|X}K1AN7u-f9E+FoP`ZUG|g
z7Ort}+Qn#F8Bgq1SP7x$UO(;loP99%oSm07?Z~3ERlDgEKvVqoDt#IO+~#19KeW}_
zGT4!CrtrZGGuGiqc)PG{h$nwZh1Bvur`YGt&<zJBG<&`-49l^&+<F8!(%eSLS_`$i
z#qx5T&JJ?-r3m?qV{2ok2Sh|dH-wuT>~G?A)I%45{x1OfPY(C=LlOJMS1Lr|CvW2k
z8-daOMn_5gmm2Axz?y`<7KhufkyN~<e0m}r=vG1-iw2kPPzVwok5(>BJXuht+w*Uf
zmR?|#ewUr!d!9Ku(H^lpoT*Qm%NB;vN+)Bwl%1t~WWb-WDwk7KC+p}7^TBcBc#u{#
zST#0tjH+3ujyZ at Cr;Zl#TusbzYqGTW-0kQa@&PeQ4aa|naf!5$<a?0iTgKwxWv7`{
zN06NA)yqb(+U^(+isI4Vg!wM)pT42f36+{dZi14Z^&QQ71sb+tNxI5o9Uvp1i4~-2
zRe;>BZnN5FjJOYmf7~q0o=>qeed!O%Hzd`hl8}tQ*8VBu*-4t#nM+R0os6WFf7`wU
zsSZra0<f4M40t1>B|n&YjrkW$dwcQ4*QeFrOdK at JBFjA@8c@$ykt+0tZX*k5ccAN?
z5##eI``?@*NdX3Z!=j3N+#3Akz#OJGsE(FNX#(ZJSin|nszfbrt^6vgI9 at Pw)1cU1
zUVTdR1~wj?6NiT<R^}yQ+mvv^Vay;0`FtiC5s=+idO<T(D_pa!g|K{3GurYkDt7a0
zX70u{xof)3^enok`Ldc)>?*PQK64{kX+g|jb*-aoab<N?AX7N;F8Fhw72RNAAyR;=
z5l^b)P2J<f{p~awgam%TNR9oLvVXP6E=bJKbP0Cnj96ZC-t*TA7H*+>R&n*$Vw8wX
zC+pSlEX5cF<aa9{x^of+$0jV=v8oji>eA<ncf2>Oh<(@VR-%wJufGQ)SB=$*=;UW~
zE694J5~vqHGHAa(KAf at c-5J95^Zn at 0M5=c`QK?Y4+ad<<Nw_&}33#MMxc>g;sYTs!
zWykz1IB<UCvu$GlVt0E;Y7(&#tr~L*WBwf-Y75YHq;5$GiMAdXrz at m-v^t2Rt^m1!
zpEhQ;^1LtPVs2GJq~mK&2`o*~0J&x$kg%)M`aB$D*M?VrR_B7L7uL_uGO~emQ8auY
z$}DfFWFtk9t-)Au>0wNDS>bFUV`f#PZR=4ov-KQoH~J4v%ko`aj9bZ^beL<z#<|WU
zoGeaR7tXf@*wfQ6+jwIjp)ee>Nk{RR>wZ$CAhz1;0Lw^Oq5k&FT&uFEvz`FPZ#6tg
z5%t%yd7nq3{pU1Lu$c%N&z?cN#hmVzY;OCPCVf=GgzSX$1p#jx8^Z*-crc-gX@)#E
zK*M3CJXBp{?`ILL%nsfTOIY)cZqSYvAm1?-^C=o_S6bK|R8GGT_Kz55$uBLK+JODx
zPKdpP?8#<0W>$_t1O1oK=RkgCwibj+KjlJ_%1hN34Cz%*nibVA{~H}Uqyx3-c$ywv
zOo<L5wT+nKIBNm)G{igJN>EjGp8+eBR+*$!f!2|atfi>FkT;Q2-hpGTxnrMt18mm4
znQ6=wAtg=^K{S3b2C;-VHGinK)^6~{c36Kx*qBwT4&Tq+3=A>IRkO(BN%JIDTk)V`
zG>!Qp(o4^(vqya(;Z*)#q`@|PYER;N=r>yo^~97BP(1SN4Y at y3%@sk#FF*8|eC`m4
z?TsO)cbgb0t&bkctGfdY<E&xYA;f^FzPtzBMGVIGM>9B>%LzNjzyrIx!_H2PcJc6)
z==3mkc~p>1gf^b)q5S(qG#37JjnntxBwh#HkrhTvvojEP`6Qgt!VP$=elf>|qPFp@
zM%X$wf2GM^nC7w2&KiGfMZ(64oRxza&wBI8m$cqlfe0x-)=~!t{#Qml-RVA60Xn{X
zZba(n+(ICnbvn#UzCY#mD_Aqr$E6N0QLbCZJtpvxZ&1(T?Q?+$!CSDjA+ki8dfZmr
z%N;48UCt=ox|WV#;Kiqq-j_hmEVg8jfx9oxF!B_{b08gT{=tJ?Cun=Hb4ObW`#Www
zTmQ>eBImP;aZ=jbKF at __?IqAslH at OaA@^3jV=N1_?g1FmoCPRgz>3FU`6!HS+pdsw
zCL{z+mLX?*wcO4qjX0~S<uCRnWvX$U{p-`p{*HYA9;80pSUDVZvsTQ&5&QXGSm`3<
zzG at u5Zx$?J&neJ)zfc!owmFO2W#?YEHV}1J&nBGFI6gyg#MKRJS3Z4Ur8fkMT15x7
zdUok9J&2vHz*@##fDbU}XE;<`-zb&oh*9O^9GXWgtN<PRH at k*H at Ee|-`9y}r?S=Ff
z*qwmdmSTKbOK3E>gf;%>1*{X;F<C!B at c<JB^gmH4$Hlmn9M6*axL!nc>3 at MI+9ZtX
z0?)5+8=V0(Pt2rkU3yHPaB&~ttGODL%v^eIl+qcg%n$<7S<#Jpl0{|<>b2;jTnHK{
zu=V9<pR>cz7V0h0z)aqb^H4KpmY3)EoM8Qi2ErnKc25gS7&BsY9n$VZJ!e9er8{Yb
znuVsiD%;}@-}6z$Z(Z2)3H{)O8P3Vb<Z3S?7xGT=y4m2FjyogDZu2 at M%v(oG(KYQG
zY&mZ7!j#5Y>9le|_TYl=KjZsylUW~)x?DI+8RwH^k8_~NB7tTS4Pp{=s=$aR%&nQ(
zG%(pV^gAPfO9S&+T7-1Q&<FYFcpgTO;G1cacx>Vb!7E(=r8eD%Lu>|bzZLmBOf~P-
z4;chC%nBLd$q$Il^>S@<L|vxM1wgLAykDot>0C_h*W7Vs2B_Qi*>;n)T1AjloZn~%
zR}a;2Z}OmffYl99-SP}Yzl at y1zr#pz{X+zIGE~GvvMz<%<x_lISnF{x&wpQ?&vnJW
zh9x#V8fDbdq<mbb1z5E%C0m_n{ECz${`OpAwEDY9$lwci<eTqKe{;G=aCHwO0;Nfb
zFg{D~2|hS?C6My{03$R7__-p$d*#M;WRiDZe1w~w6#b>VTLbYyn1y9#vhHa!%4K_b
z&&{Fw>K;w}ah@>_$@30n;qN0Z`H?I!Cy|ud@@$P|zE at gR9h0B-V20?QXV4o#HFGRF
zoD&(XZc9|TM>0cwdi%8X^p_5 at O$^gmc{Rc|E?!d3+2)8yl4P_$N_j!(aV*D(sk&-<
z%uS+fSj5J3yE)OaUU!1%()REE#Q%OLE#a)b_54isrKSeg9?2n3ETPehmmHKOoJ^X4
zo1?J8mmts%oo+!gy?X~+&g%^F6#C3N0EvEO*j~;K*-a*O4xqBzaPH~g)%}cb?Fk3(
z-t64+#0%M6Btt&IhO4fK#rnj*1%U4#eOncUX|VuK-RT--0-+kKi|(K<OWU4j*XP=a
zDGr(jfCVk4oKw%N*^V*+PG7UWgqld)p>eIg79iGJG!JDEgR1sNHTUvP7I%`S&fRs2
zbdLyb+WTa^iIFw^R#<2`ocLF$t&6uE0<!$X!&kp}sjfC#XQwkYvtaMt^C=dv46)Co
z7o>2(1tt>|IcKiKXq$zwWQXbLYN9Pm%3J}wPUH5;OF8<jbc;pmG at hYJ#3)m*#GzNm
z0O}QOAjpuHWBa37Fb-ywNu3TcwpuzMgxu|7s}O=*#rIm`UY%pJ0zybdPJKHon1RHs
zO0Vf8=n8%K8)rWe#xoB=3DA`Fs^YF2g)>_(1;QC9*AieN)KEHbBpyjIKoRys9`--^
z0Y=JE+H(Tvp6p}YY|t<iNORyy at to`*w*2hA#$YJcdp6HEwbYl%bp^K^BC!W5=AE4V
zN`Kj}$vy{+zHW-2Q?eP<Hwa_uXVIf6UVEUlPgv#qtz1eQ2WpsF(k74`eOS~lF5D%Q
zYwY5yMHm3(MD2}7tA(x^azn&6Po1Ngt#f^LB0Ej%1=G0LCk;pVj?`BhkNJdQ^G=!d
zITbjdL;!j`qj#TOhk)<Lqbhfd<cVxn!oY0J>8p<zN0~`7ZG=)UCzJcK_d9ggo>B!%
z{$HGDiu%Avg>Pl0b>H5>mTLCwBo}@bPF-GxOQlLW;2#xvl4&3?By<kf at 2?n at jh|a=
z<(IaVIW_!YL9`;oU)cy^R{6mT@<<Q}=Sq%BrPk4`-i<JDW|$w|rI604*R%%5QDsHa
z$DKI!ouEINmfho6kH{%(02k?Z<V`mkCcx27|Jp2EO9G55f5+1#-CB-jj?t>>cD;>C
zLJUVJ&#``6_CbfViDNE1$45^F-Cy47s<h|JO&6zL7Bz-NYo=gxF;A!m)QGILS3$<Z
zl2sr8akh++HrR#%3u&u@=!Bm;v%8;FkURg)-DiP;dQ&5zkyQGkLm_i0<M;N8aZ%`J
zKA{`}Co2he2R1G4iZS;4-OIEz^dwPMqu2g1S*X+ at e~^NVSLs_``VRs4Vo3&SH)fCT
z at RQV`(#Onun&R;OzZq&5^-sUkzj{yaUWy2xyspaZyd{3ovrPdu%t9gC0~6J*YKAWK
z*i`lk0xRds90{?s{6|p9^HpIGF7H}SaK!3UDIC^cz@|r^Az20y1p=I+aFX%18<k<4
zoub5uRjNK=rf1;%T!?_s_8ZFs%&tBubL1i}LsM$1qQu%gt?3C}Zvw?f{?dn+zq-EN
z5jq%C>g!4d at Lg=_b}Ilz{FcAQWSTERx=zlz7fFoSMYWZFwMP&A3^qlG4>BR?^{kLy
zH4K;dHutjrUh0Jl%gKp!M>qkqF=03EDY%&dpG^+^Telu--&Li17x+Wu7iaP{-YWKF
zX^oeS%|lMO_9TyKY`Mm&i>!Tr+Fp<{{rvgy*BbikaE*eoW^_kz$0`hj6jeMvP>AcG
ztkYX3%s4H5NTI57;y)G|{EF1GaEo2eZn3HPGetp=|5=9WP0#E?yx9ke&31J*-5Ak;
zKd2U~Yd>$W@;0-qM7;F!T03qWcO)D<lIIxsZZ$|m0iYwm(jTVXH!w0!j0!knY)qa#
zL?2|M)@^?o13(q_ at QI52PqH939-zEgyafHNrWqCk2-?HP-B&ml(U^q>0MhON2R=qF
z5eYp5Ve4CX$B=F~js03E#$*G!MH@)s7YM{;!M*1SRnp`BR*T!Why@#ANx!(OC5S4}
ztay)3BdGx)1&y`+8CS#)5~~LM#DTac{{5DqIKco_B!~-=%47Hw=rYK*T8iI;7-!wr
ztt9tnE_f#HQ5x`nGpmiI;4>U@>A&&-YYjkaqCa-*+bxVc6>r6r1A+UO^u}fq;sb+*
z_#fI8k~tk9!|ElDm0@>SAZgV8OV9JaWUADHJ)zRSPB-c0vWJGQIzAWvRu;gTzwDFc
z;%@;Xj+6v0AFaksrnk#%KntTkczfJ;iw^5j8IOfZ8li=GK%?_RRBnytIw!c$?F_#2
zw2*!Xnvh?9_+lNZ?AEh%b~Fe$O at E^t8?$&)P%7AT?qYuIuLhYZrjAZml+VOHzCu^K
zhjSTMUJjM!S+o)4e_2)4HazvLtD@?ni^=4%^I?fQ!KR#Wa;%~vPv*vbpY<q`&5$Er
zDn^Lz+~)6S-2t~*^ni*~(*$|Gm52xtt6ZbJAE`RDv(&QcPM=ZGRmwEtWzBiSV>?#o
zq%s+wM{lQdiu7T_$yvkCMMt$AvQ_z9&~fvdfsoBV8OHM9wV8$6sXVcE`p~s#x~Th9
z5V|~#$SKB(*PPH&|1B`_V at c2JZfu>7t^um{oRQTLLA*y25U$2Y_~?`H&4!Ob?2j5h
zauni9;ja+%eX&&p2PtsS!;W_4Q<0Woeh3Ou;hMkpt?@Voe$2^HeEUj<-zj0w>{qKu
zv+Xjew6HKd-7BVAj(22bZ~y^WT<MG?d{`*RRriS9N+fj~94+<oSvlVmcoW&+DQj!}
zf2Jek47}Bpjw4MfeXoivRWToh)p>W%pNkNUY8hsUQPWe5WnRsWuMqN58HDz)dFqr+
z>g4o7!%5(;haivUzS_g`35P6p&!$2F^_JA0)}lrRo5Jrw4jvOJx8jGcJ<d0W{#%#G
zK<>+i>)X#y0R#iAZVNf&O8lpYzJJWFnlW~kH?ccX;`1=<%~R18U`yd3z+>3mWQ at Q7
zD at m8~Zp9W%cf#@N^8i~l`Ab)o_rkU6gHml)PV6(<V(|69+we_edzh##3yGT$EEaq8
z9kU2c1CT%}`%T=*J3jmSeQ}KBeGv=JwRgKrO<%G`^FgX(S+gGTbR4-VY7 at 2v!B_bv
zu08h!X5*w}o4SwQ|K!T#REExAe);zM{wK>7xT=tMa=4y$Xn at p!0}u&J9O*z#LSS?M
zvYBV~dQe3BAEdLmhql-@#&)mD<1t&ijkXZ%$%Wes9rr+d>COmQJ0THH+yFoc>>#U!
z0V;Hba74f{!^;Z4I{42r^CLY@`9$W23+<Y;z_YW-M|D9Q&*;}K&Qlcy`_A_=!v$_H
z@)*$W#4pl7{m+YQ1532234KIqqPA!IjawbJPHgNSo1}*V?n!^6XLsj$^I#n`k^?4m
zraW$g2HXD3Fge9)ixdXNAFn^6&2~@pSDpge8 at TQPU<}F;=PloKlu7hxqOx$;4S9iz
zabp6%BR7<{g-aV8;Z{W*0wze at lPEr^kL$&xUsjXo#6P8<H@$_RDzK5Y5*aop^wfnK
zw-e~&o53q<Wu(>+Y#r=E95`RI5rD;LeK}rBRA4Y6n|>x5oE4JmWVoQ4Wjf>Wn|f{!
zVHhT|NB-i>lg<>G>Ws;ryK+#2@?&|t_73OIP}NN-Ihk;X6;-jXl~sIWMcEpI8ylGf
z<)40a5(iNqJW4>AV0;hEaI;vwl&%(SIlG;DQ+=5m*EDNh;8NxcGdWvT*_Q^_f9nF3
zHj@|G{S2nPoZPd?@VM$hD<n#|F!9 at MP;!YwVdI9uSv-k{^hZgeaetUr+G3PR=W2 at S
zo2{}+XYEf=Y0wyD%&D6 at _6yPoyOui7+(5)$x*wwT)?mDXxRej{yt||ae0QzaRlh>2
zZHSjN?s)T7zB#_Y<wn|0i(g7%!=9<Uf=R at r;&D=ZjiIHBHlI9~j#GKbygWw8W1H{h
z_Y}(xBy*0Nf15y^>kh~m_;IwKg}Q90GgfB;aysxxBLP&ozFPO%dbI4WQWuhFlk&u&
zVEMSzfo5niW=P)A3QSZPd>*MOjG1t)EKwJlmjUTFdhpM<zHQ_;dXDMOZwZMv&>Bgh
z`HgREbO6JeUjO1!^2=&(=NcM)ar)JkAY#sP&*f32BaoUf*X0kHJmeuMnCO+PE^z+a
z|M67k7$Uu*f~N>^y*K-$gspX9Y87Lu4(lG!^M7QN{EA-!037RqpP1g>mS=7*UiLz{
ziFae#3HA(#Izr%X2e5QQ8qn}8Ocn|J8*1&`D&h0%?G#QH4{{}Nn$qn41uZweB}`Z-
zRf}5fR+n~B_c=w at +JoENaI16Pg0+iI>}sWu`e!d=Q<rfe&NhYPuBNwoIrusHc4Mar
zubb$=G6pZeDz+FJb{a at E%o3OtzbonKZ!OHMuBPI}o+&J`Sr!Lk`tIt$3OU*BXUIg-
z<e=Vo2$BPT8l!NKyc!_-x|7}K1>WUGFOHKpub_RWW5HNlHa=-jI)ykv&LWRF!rlAO
z9BPcCF7{ctiY!J|*ewQrcJaB!+>KfMOkNsK-Zcfuz=lfXTnyV-I0JtQX}3q))oWJH
zd1WVjHFj-qLzbms+bmcP#ixc6Fkd=S;H3(;@pVtmphkDUK!FX~>T%d1xQ_;y6 at y3B
zdW_ at S4>hUMS(E?s`asrsuOuu!(68YjHDt#NwFLJ);EXX1NXU`S_1!Zu)o5kzPSK0f
z^`d at zS2#4O_N at dL@`#lyICb at pk*zdVb138q(##Q5sXRgb>iJ79Ip3X4-0kK{?_?sz
zpPYVwl11Xus2C^xn#%Mfbj594F7*{94R5H~d38Z~ewA}{m8P4pk3_1a4~P`_J2|S-
z?WmM4#VQBf8?m2bvQUeNjou;K=}>mBQMM<`>zTmjfRvMdwns4^SWnFdRailQ{m|cq
z2hMgODdOs^#+6KDPBss!+>wH?B$6C-yf2A}uP{hgaR>@sJZO5VD{Yc5ApU|c9GJ=U
zzFM9$LSdOm&TL7r(2s;Z^_os>|0@*Y-^<%F#Hbrs`{i`@s*@vcp%pjh0vggyABKF#
zh=5FW&M@<-`#}L;teyO*yqh_ at J=R|rPQPm4A%*<^?WY2>Ru_WoY1tvfQ2QKmvy!o+
znHQ5-TWoQxOIKg0kAP at _5x#D2;?m)7r_PvmLtQj?WF&mysjW|6p%SOa6a9zRZcE#Z
zO_6WjeUaM-cS}fky5ZIAhiSs}Zk*t8w7aUJluR>BYnt7(%Ti42GwH_{GRQ{pn!$tk
zjCj<eH~S!u!)FtdL_J09zr>wlp0a_yaBz&|gg at 2?4gxwNPS=86ka{%wOH+h9dIG{5
zmu<wo8{J}E_0?gGGIlAt*Wr2y04n?ur at q(CyA6)Zo*d&fRMSsN3#9Qzdf0r3sVPyB
zJX~vOY{Zv?H)hU5E?vlNn{qiMuUN9$LOGGUuWiC`k=cD-!g{MR<C&2JK1YkQScS;N
z{FLlY$IDt~Ax<ZHUjGf0tj?M at bP@Ix`9i&eWQ*|r14~g)U_z#{0xH!V_{3MIl`O^z
z9xI$JLQh17z|OZ07Q+V_K7~3GK0A;T?(>K at y+`AW%<7zPgeVT&twg7i7$_ZwqhX<;
zb*qn=VPHIvhs0jFT!AN&Vfw<6ybH3I>t%7`@=J6xHFbtB>es{zbDM)k9%BxJ+`{YR
zGE6pSyjxHr#5ACAby>fv1%g;&Zw8_6<+Gd#Hp7g**Ji at F{S5!jsI;7_9)p5OS5_9^
z6_a6gY<r5}o<+MIREL#=7M_RyIa*<itHwhS2VuZW5zco(sS##&H5;N6sYsP0I)jtV
zzujhV+)Hv;qkhrHinD20ExEBfq<!ngQf-}F>Y>sw{;oY%nl(PfRvLTcgW6aORp$fn
zBEdAob`;g**NVZxo7lTADDZ9+ek>WZ$Wp1B(v(E^uHJ`+{T1<qUI6Vs(U*CGn{W5T
zZ~4|)6P-}b`$-c6jkAZdb8}QsCF(`J)V%$cnca!jNh at oo57^{3GTRXw at m8xh6~j6+
zmS*Sc`6kNLs7yL6vi|GJ;jOt-i&L5jZ=elF21aSi2Qf#H<QdY~+3-wQ<c*H-^wpaH
z&b3zBdp`UYaLgC4CPDHl5cted*Jr1N$U#XN!GtukmJRbo3TlJ4N?s4m36XJKsCzU+
zcQ)rrFc9!3GWh)^yg8P(XB=3qZ;jz(C?yaTbeIqJ|I2;LO+sDGWYa{WurU7tc_cot
zapsqXIUg#huzKL4;P<bOr_3qd#Azp!aCJWH)5(BRl+{~JnN}U3A-f<yxUg}SD}5S6
z8UAXT_|KBtE!&zTISq<69}z~2vz-D>3$s{_S~NVdCtU_*g{-6f`1>|)trRz6!7I*u
z3#GkgE2)E3v}v(j91sYs!+O*Z0%ok9F04Z&;4W#89uwvIAV(i)IXrjw$Xqj-GysiA
zFsmMEN3yS at eaUuonXuODDNZ1drsoF9QWj6jGwEq|)}C{M4x$XTxAD&w9{OnR>xsn^
z!3bv2L`v|s8h7J7$FurVKJDbc4xIaeeDSvh)~^I%y!dqRVOGSMk;%Ddr at M-rjUB(t
zM9Y*>URNjEETNTK4L>ATGLIPxkgc#NNSThhlLaPC2h4E$hI*`qQPA?}9NhQvAd&|K
zim-zZDi1-_zmOq0**M;JgQ5W3A#`<l-QAZyBZXZiIWWKsFJl`lLuRX7v~HyC`k;^t
zaWCHF7WqeZ at yYvfJ7V~WwY<ny&pQHk&DVH)1Jwhl&=#~%Rg+W#hhi}S`2rIWC!>qC
z7F%JbFcMj9aK^K1PAMC^Xe=f5_p$$j22kxrM5ZzNQ*_&q8X;>jHUumx^kwI;wT<4(
zqR#Zrb>$PM7DEmZJEoKCbqL_-r2|H8bwD^+K82dn<K}tJ4*ljFs2jX9E`7 at WUWqSR
znzUklTtNdG9P;wyr$MtgyFQZ>(o<Q9Ad;#Jf*+5_RP`jhIuL0 at NNA!9nsmw0Mvj)-
z$MI at YY9FD>ws3=zw5TGA2Ovoyj)X*t$?)_lh#tBJzZE0dJU$nH^TgPy+W3Y6dpa!R
zwqc8fWQR*ROeX7T?dq-S5D?EDA(=h_s5xPkv>%ODC<r`~yxDdHR$Y#idpZvDv@{}P
z-w_RlAvt5?9l6cn9nw)VS|b_5`N+g?NWPyi^^BAokgj;61E54M5G)JYhs|jgV=7KP
zzHt8=A0z_D;xBu8X0a<<t2UxF@@E>&3MzIJ?)71O8_fOyIj}f~v)+@;VCcYiqTMPw
zb*9$$6K2zVpvx_{&QIC(y1Hs2nl8-7%{czpr_s(HXs>~Yu&`eyev;Cxb#7^(P~nS?
zh4ALf$opP-N`gEUs$2+R#6nM;xTk>@A5>vHc``^jQ#N1AIO)W^9L9}(&`S1QfZsqO
z!n_(4tYo;Gs_^(ZCjBDEyN}LjBU;z)JO)8 at 5T_AdsEWu!(0uh4Q`-pblY~&99g;f?
zU8x~@l=oQD^8Y2k`THRE;XDzuyb>&b#KG2)mz7l{ut=wRI-3O-StDZ|Kjo0FY>*fg
zexyJE_gB?dik+7(ZI%_J({Tuf24I!fuqCeTYxcOTM+M{APOtJEKk|ZlaVtYd^a|^D
z^io at yUKe~gNz!(mG<c8K$RTRq0xi&3jR0)=+P0ba&?=n5Ts+Mxsvos)I8-+rm2A3u
z(?Da#S5jDAws=|L(D7D at b(9YiY)}xmyk}|4;oPvXM|2Yu7flIEP?F%}%%<mG9|Ud*
zQ>S*BhpYNaSc;;eafC2LJv#0kt~hvN7)H&b|In}vTtywP_#~rkjZoUtCQsMX<fG+I
z+z@*shn~VTrKHYmTsS?mbVKM=&d;CMNfHo at mpN23YkUjyPW<Ti!s`D%s9Pe|mdL$$
z_uMv at +bz1%_QFY=ek>Sko^@U+>I%~!_+ts2Cj$92(;_3CM4exF<Nu>^8{$hD3ol=|
zMLqcX9Uhz<$gU350&x9&q!nOR=VsK9vfd7!Kzez{A;ky=p%|n<fVHQNT>1Eq{e-<_
zRxP?UGQ8 at 1Ng3Sgg7tZfmQltLx_Ty}3AACME`2Q;$#Ml+`&?ER(ICX=aBOSYciBDi
zBQi*jD^s*+<&$i}_Y}>JJAGhUq+s`(Sfm|e*JR$bEpx8Ldl2yhOL(5I>olLN0QOAZ
zSGoA}=RHPfHPDaP=my)1TRDffcVtue6{qBT at 44kWVU$qI=(?)m;7iWF3{ldvAzJzM
zy*8>L*Y$!@@=5XFJoJicvt%>|lE~P8he#<jT&!j`<UowPAE*y#w4{_i;ag3C!k%&z
zWeDu4^4nfSf}?01*k6=ZlIGnoh at x)rcoHtqYVo7|T&!&un5-}WL84EKg`-Zd$MncJ
zNSv7MV7aVlcsLuUN at j-~H}EpSB#d=!+>52PYDXX3e)Pd0Zw17<&C!Kk1&{aw>=XHi
zPsYqwZy!yikJM))=4x2IVG9rjI0 at SRuv73T?G*|s^dSR1U=Zn>zfo($A}zCF)!*6W
zQBFZ^{b0Uz*8CXP6*3Hn^Td#ZhyqNF)LxlZccr9wxLW6(d~n9kO>oEsjDFJ at LOuda
z9F(<i$M=B#=AxMQwrd28<9&nkqYzxf%0H|MFJyjyatm;tx=jxVis|k`O=4^##$vhx
zu8`sjJjLc#ifVW%%Jpz<0&sa9<xg0+i^&obrm8Wd_}050(VFSCz&g0nQKtWc6Jsz6
zOB%?{PXcd3D5H#PP;wgnR6y>`jg0jd?us*f>6-6ztWb>T2#1ORTfi^BRP184bPJ6Z
zfxL-MozD_Zezy2RCSKf4f!nbfo5BL_$=&1r-^bFPPEmUL<-tScB)e|p`AkfJ^N4ZQ
z-7Dp9nN$ph-~LF at m6k!ZU&e!EDvpFemb)U4rkHwXf$fyBd$@z6d#C&3ZsG-1Xu`5q
z$MVZ430Gi*+wH^sVnZ-|Sh*ffnvwmQnFGb&yYPWs%it7o4YPsHcqdvCm7xW_nG`z&
z>vKHBYW#u${I=_UN4H`T1nG#<T^Yj2J%*!v;I*qFG|$4^vJVXn1^Q<hK5<#x>@tcA
zIgI+uuArM*2P|-tvkHJ>tlD0%ef{Gl12O1aP?dPnA}FJ?$m4oZ-P{bHIDox3u$^~S
zKy!F1!+=JANx22t4a{;|H1pSfnwttor~37HpwCtz)|t(3mdO5d=}&h?5P)5(iX)rh
zhD5iQ5;OY$T}HKF7#Gv^mBFW^FFTD!*_xj(Iemq50AOKYmK?bgO4SvV1t`wGTK}eb
zCEWoc*rD#e!&o`D$}L8Lr7(g19C$STO@|zDbljjFAqP}FP5Nzj4TO89s_lt}SMH=)
z^pZs<+*?WGh$n-Pc#oiHmE?B>FlYpZVfU_;-?<5MTL@~;gr+=Z+>wk)8~ppC6zuhq
z#O at xK{Wm9>t`+lqg#HJ!J^(hhVH8GnP1IvWHeYO|YX}Yl_Rj7NkGVS*FNo2<NhSF5
zXW$WH`K3FPr`~p(K;tvEKGhMCa=sf|ofny&N4*wvD<uGU#WODabNWX>fZ_KcG~1RT
zRyBPDrvs^FL&81Wj|J at n#{Bem_Xg9udtlD`%qiZqx*D^zEMD01)o0j?MdXMOnVL;2
zed3#oiK|S(_YQ*#rBi+z#{&Z3=&Zjr^CzXj7oqS)S{wtVc6BFls&+s at o0jOYS$^&(
zmjpwY3y;5|8uVGG=?8gp%I3i71QW47=B|>?mv(+_vdE4~R;rJHaTm-O5+PfUI-XGi
zl)BwVERuLD*{91bts7y6i5ka~BoAA|UPQK=PDCpKb5KW*IY<;q#r^pm><g;{*Hba-
z(o6n2QpPm22^~|c=Wa{t`2<s9(v?{o&0AJoN*Ma>>^!iI;w9r98QGb+Nw at J#Zc`Q@
zhsqYho1Gu$w=)^aN)#n#IX36+oHVs4+2o{8OM+tKMjOe%_?r*vI)OQC+`17jEa2iq
zEn&<F$=dN?TNWpN?N=9P0n#hz0aq^UW<!{)^WvRNQddP5bhR5r-4EF&Gi(X4Ed<_?
z#Pm!h(+a!w at 7wu=E8|CHy#j_6qO at _$*ifa=gb>(OlUZJK3wpE^!LxO7Z_WR^Fw{fz
zshV%&M;aSmUBfKEGM=IMn%uX{3{w)}W}HAI5ji^Ld(?(M!&&RH_UKX6s8drOaZI={
z{xnnRiU-#DR6srgMYl;wl5b3rQ7AvJkNnD8A)eh^CuhMr3>UyXXY%!SLe25KydP*^
z9FX<PSpbjL*Z|(nB at 0XmY*+Hmf`Szq0ML(iJ<q*ptM>h~F8D!oGiDEH&j5|5A}aBv
z>je7ozrcls$kqd;2j0WcrK0FfaoboECxbmZRMFxDc*4yheSFg`Ht!ZvZNz>B%d-f4
zcH-%F4`mF at Mpjbv@kP|<7-Cu^!k{(mT-69)Q>t)V9(6zG$D-dx6_(7($5R>N6iK7{
zFbCEmixGx#K-+5TCxBd^2c)yovg)MN^1Cc7aJ`-m<kWKj4H3uQ+aC2O{LgREPgT0i
zE?qpnOw^*Ks!jovH8wrrna65Au67!K%&o;vSK=Ok2`H-fRH&8E|1GRi-yFZN?)mLu
z3*^8Pb-b%;!P>asG;H#oz^&K6A7OwU<Di*iF84b1n>cppF1srBmb at m30zwHT%47;$
zmDYO}6E63Wu$(?57Z1yfR^MOxV>)P-vN##&W>FHn%_73N;$jq?@vknB41_U<@Fsg_
z+4!i~jfWdhDM4}`8Z!3^csRQkV(5BBf+-8qW_6f5yiW!1l|nr#NE)5dAWy8(NS+Kk
zXI#AS0|Om%i4_L%YpOgZz?tM2ma`ZBljg366Foj{?@hQ>VG#PxW>;axr at LyqkHH0r
zHIZr%n&bL6H$eTiafs2`8|e_=2ItM^bQC7#Hpk{i-gx?wZj7{m&<jjWU`_uVY#=n6
zDRg;ns_?nSoRx8+ce0HTkxj%f_U+IL!svTQEvg3z<^*$#u9J1L(7a+g2JDz0(z`Wp
z6510TB4+b0SlO?B%2Nh)JTF=8LueAWANXEi>nCF|{*Hxb+81hl`$eV59YUB65L7v#
z`0 at V(d(HD=Ok_fzpWYZ{T|=85CQpYhO)nr2QH-0fCp9wmE!mK6bPsp1j~o9wsR26s
zW8BQ+*qvTGJ$R$`W-qTXnFK-R&>py=2bo at F=x8i at X{+M}a^)j+UjMJnq4GRB8+z(h
zzyf^xL?QC5PyCwaxg<Id?U0KMwG*!QI9o;p0-TygMJn~%2C1Pok2+jePy`rMbpbIp
zGr1(;MEdDT)jl<dDxeGKHU7h(3HGCZ_&%xp)1nuwwKJR|PxjYME;{R~@Rj?G$LsY2
z%JO$L(^`*t0vFGU*WEb=J3`bH5VwK<J1XJL!SWrpleV?wy<ruOXNqb2jP%?<wX at q6
z at JX=6r*==Oq^9aA;M0=GVA1TDbgRzUv^^%R?j6U(R0YpNLb<+6VqxNI(~(`73*<)N
zLBAr4voglS73W<H69gy>=1bN$uQtvFJRe>D>0+}szkA{vVe)ipJ_tkIN!(<{`F^Fr
zAiC?3bK#+8yPT<AC7${$E#oRQS|^}IY4Ayya2Gt>@R;reS84+RM{>`fcsSGz+}JZ~
zNxEfO^}S(?+AtjQ=T=jRkoS>eas}nVu1?yGdn+V!KztaNIo{3#cTp4Rvn&{$hE|hh
zR0w~6DTBlYEaIG>s5eN6k at 34*tClgRY5MCR5-{(x(MPb0`?^a29)!`=_UY>bhiP@`
zcpesd(qx)9jNZtvO=Qyn6eI{Y_}V%D7eWifWc+5yEdT2=M8gSkG7;(F9s6QyZ?B{2
z{oYFetVf`?Kw*udp<Ykw#i?+6_~g~|i?Ub at _g+gWK+D^8scyEYso1i!J!yGFEZFd%
z>a%q-I+*fA|L>^}Ci%*3Ki)l|mB9JtE7(a5$&<>Jy%4wH({m+4+9!FjxZn>S+v!#x
zh#Z6K-%pOD7KBEjyXn0=xn1l)J$=xpdCO_WY368R*ul+xKFk`k!RI<bp97uquc(aS
zaB4fjRn#5M18&^1Jx7D%v@#l$%ZCi7=Qg8lTiBK)FvZqXA6rAiD_To>MsKyE4@*()
zyfiz*`;L-Lm?PanXP<Y!1xs6!kTOCuKe2hVRh4W|z<Wrk<@i%e(a!>fassJ<AgDwk
zp_VYF2Fb%aFvIRK&_2T$+{~eQLDcND?KsdwdGm*a3wh)PT+IDJNgOMQNBcsa^AHKZ
zlnAi5^(6gkI8se^x{f8f9fa~CR;ac|YLj6+h0w-+YMo$?OsQHuPnJdB@>4{YpHuXC
z3WSz22Y<0*4V>yetJ~xp><n5Nm1ONBOug%zn6R~w#uwwvfOP?B>c{$Gtwe?le>o&!
zIUz4l)CjtX$sJ~{9dTbHE9z68PfvC=`X4#_OorZJ-3!^0Pbw(m)`wa$y{j@@>1~7R
zplfHs=;T%LsmZ=!Z{Z4mY)muHt)=S8nAjlj0jd>>433A at C!4m^9%Jhj5V?YNHiL>V
z at 2ycTezU8`4;O&xDKjwwn7f#n7jixtKwDZX9?ZWa9>YJ3#A7%4 at Iz_ZOU_8D<ZB1|
zd_v<_ONRD|^Z;#@(Z<q|v7&c<!Pe`M;LQs(7lYaHSoz+88C%>UlSE8S^$oYMSkS-L
zMb^grnU69d@@Ai!TlG^-S}TDlR^=WeGOc+1meyJ7*vERiu*-~+{ach-ML$1{IujOF
zX^oD=yHRK3?+Fqu(zRjJrKnZ9uvjJtN8K6x@|is*9wngQ6jpUI)N)PIFb at R%0eNbc
zF`Pd6f2C2UP3>x*Vv+lyHiZysd`Mo-*nbal-L<y3`aRW{R!l}hxckvGmR?!;L5YZZ
zhucky^~|E%PX2$BL^>tW<Trp!KhkO;yTU|8S)covodzR&;(ln2EPcg~MYT&iBn*B>
zuzba^kFWf)!i=8EsDX$*jxlJVY^wxb{{^tgrOia`>TS$?q)K9SV=~{4%o$sY(2)@S
zFggc`YW<*7M#tc|#=`s*?s3_J^~+;|AT=j at FP_KhP(8m;1QFmJNE!v$ktX-H!c1H~
zxs!>n(#Z{lBQJh!%hr$b{McP-y%^4B^a8_Doy~asv4>%;2J at QzJJr;y1t+`HWjQL8
zB26MC_+2`T-+V?WZyN?zQ^{7L-|;=_Q$6LEsSXgTCJ0T{cWvjbT`Cjcnx>{HNKEL!
z4qnJ{G!3A+pLzn}e<~dyavJC2*8WbX{5@>hKipBaD>^U-5V}rSO9?xd at R>x7u?d?9
z!ooz^NNIL?_GaHIjCBNoT>H3y2)Lq at gpp<$xx8^S=uihe2{#R8P23T&&_Lq5FP=gh
zutR(vL+l#TbXI-NlbWr*UvJ^B0<2mY_sH}|W*O3&5N`ZxDq|3&(&z1lv}DF|gwDNQ
zWprnf{3}9?j1QH{OB$@g=V1c5sir|h5ggBx(BzDRwjaU#K=KlDP6(yKzt>pRGLxDC
zlr6moX=3{QQm at V_Hf1A7su2h^Q`nWtXIkZM+8~_Kc%xX47pe1X$naJ7-FrFqxaa8V
zGVeg+PoOJX?5 at M2St3-H@de-Pm*v-!ZwU&T675`u;1O}UoJsvv4wrK$Q};e;FgsVc
zs8K93-_ln9^3jvUDq_eS)I5uuD1}s(pfQ$+_LLLbsF{^{>v-M5n`&&%RH5seKpqwR
zAA%vv^L_NY%4sNyWX$8~RqCZV7JG6p3ejDS5aYo3^unhP_L1aXm3b3=jS%$~fN8*H
zmGlTxt*fNC`J7bPqFEXOiXq;euZ`JI{5!N3`QBu2l$f%%DuC5>#qYS-9F+{8wR2+)
zAN+ulNg+^2U8xvBxnS#(J&Z5aaAb{ym1BKGpmO=knjtiwnl?5|-qXnCltoBV&*A=5
z<46a|IB0m}JJZ(@vV56M2g#xR<+j?C$A$qDqcKcZ<ysuZs5XH$xicy8Y$PPnba)f<
zC8L5pegdEp(n=zq7~y#*5gIn+<wqo)JvLtLkGv;Ful~vY{@-1Cu at A51PKFcy*9bXn
z^2h7nVofTyd+I8(vM2R at Re)RtBtyb&5TNNJ?MCWNs-cHGqXjVJsQF0{ofDWx?ECw$
ze;F|2@(T2Nrkg$$%<%a!_ at 6?IR{NB0oxFEf2?Lx!j&;J0)%f~sVc2DS&pPK!|0lv=
za<=Mu1k>~OamMnB9=hm)pa<=?HmX%EN~pcoc&$fq<(c8`^w5mBJxVh}LaG{obiN}R
z%FONc`tHJ5?>@4#dKyUaWzZ=b$M$R43aCfxVvuw+j6>@13yHbl3{$xw@=!;1YOnef
z8&H);)U7I+66N4U74QeFvLTT6bDpYUGq@=i8K_pmSW<-a>6_%>O^?Hj5uYK4J9|OV
zn(ZUE4(6IJb;b2|KZ>K!mwv~97eDi5V>)xi at k6iijqjP0c%ABbU<;aC8^(4^zY=Pm
zfxmy*rO+@)FfoNj?^8MLrK4h;2RMHW!CwwgAGk2La<fos>cUg`qUxQ0jKUrRn6||)
znsGxlX?E8;No at C65Mc6@E;qPxRHG4jmefazTFMaj8<L2vP!~BO+S9Fl>B9ces(os3
z<HBYKM#;^Oo7FA2o;2U at v)o80K%HxC?Nm&eG0l;Ha4I1T_zMn@>Hm)bgcU?rLa24m
zIamH+lm|O?$?$~TeJ at UA6qq!TezhHf*NArSov2=O)$;&WUJ}v0>Q|q}^p7!~Af8o-
z3%FOAtEO6n6-cEKZSf`Q at u#Gm5~_C$r=V9W>7O=iW9zGilN}bWV(DHZy+soCT}7|+
z#4?{2W3IO(vM0cRO^wk>0 at EAq)ipo-K|qg`(j0ENlj;U&)SAdjSV8Rnzq at _E@Wb`8
zk=Cj4o2paVuiP*BvzpMsHZC6c+WtGOj7wgaS0%{@u%Q@<%dX&h>U2L|k1_wThYPZS
zy$CztP2n~c(7f<mSx))`NwD>1Fy06t8(_ygxV at t2C_%mzwq{n6V<aPMzI)Ptje#B~
zMBPbrzvdgQ6GSo;tnK$%Ah9f;wif=T4JBuDT;=zsuluovn4sC5zkVdzE6`mH?A>(W
z1l{07tvKgFJSXQHc85Jh+-9hMSMgD({D!D&w9J5E76$;q5yi5}AoC-f(2P%TTYCme
z^ryh;S|+j)fAF_75j&qHceEJ7$NagshzD3eMTbqz<KjW*6vO`yN93+6)5@?;yN;EH
zwY>HF2<y(#=-Yj3-1uEe9>6w6-WmbV+QFlGdN*FT(Nukw%h2pLhOlHgXyv!~81N~$
zlb?YW&dsp>(5Y at Rf;D)*;90&L7g{~tNZKxipjmHqUL?(vGzlvu|B12~gUSu8c95ru
z|Go!FKcQw*Kvd9u$Zt<`{YTWyO{OW5nI%&i$D!Lj{9x6jpF{tlHLy%IZFB%JN!E;v
zzP;JPO#lZ#_`m2e_9-^?C9nXN*0T8a4=AOzJcUIVt?Jwwb!HAO71QC_ikdV1kc!x%
z@<_ew?0%)^Zz7~6nn`(6#_J<_^!R|?;pyX$(53LPJhtqd{P1>6g$m2TaeHS~VyLfP
zy0|dJtlsqc-2Q_NV(uS?iN1C;rx={6#e2 at lihp+>ufu^4c3g93f#HR_?q-$CRd4Z}
z_uslT5UN0PLCWE%vKWlEu~4YC)2Wc9A at 0Y;Wx_=-)ZoS4dKkfn+949^l;kT8NrTv5
zu at L?nOlM5Ypqh(c%UTeA7fT$lSWeMqf3e8QNaV&*Fw6dRGEC{FtFDl}ctn~H%7Q8-
zLJ_(u0hRv&-7=2pL_<scxuk`YF`wkgDf5U*f9>us3z)xWqEGVO*{AIqw=br#zxoo-
z{+;V`-+Q$2LUwlwd~fjah8sxl>)1Re#0eKH(H+$5HJ1V2Y!hFkw1_#w$6%|Ay*r<^
z`C^|e+PhMJCQ%&tvA;=`+CUb8(OF0fA6A}ZZ;Bcb>xnI%j;@t#@!Ud<#Ypg6Vp!)N
zqUe^o(Ug*4pUSw!hjD6KrUcE;b1(DGl at p0(S6190-w}ikx`<U3bqx(@eJSXqyD&Q_
zIFq3f!KrOMlm-?>tz*|*F7F at Vzk2}1%2+0TwLRI$`cUjMJYJl0kawMd8!yqjtB4!*
znyd)tY4?F-Uq*N|#~*@Y(@@(R1a`N0yQ_Is*Q8sxyR|#cdJa(dhc*Z#iZZ+D8{bkB
zMeVzVbT9L9;#kW{Gtp?a at D;xNs2VutE}kM#6gQiPFgCf(M%NL3$mGm4(j(5}>j#lo
zZ;Rh(3!w&Cv8bExh06zjB$;zdp4^<~DaO7sSv*|ju(f!V9DEUoh=wSy{a<uR;cvc!
zUZI^?5e5yQ#}AR=GBI)XUi?%6?M${FhjPJ|%o1DOMtG?RW|--YHKc?9w5WwL?1!gK
zxt6Kde(Ws)^G1`kf+$6OOdv(;*{5WlU!?RF4H5f1U<RJ(FirIegQ+y4>z%j`jb8t1
zV7{fFz;}Usbxwpe{wz`sZl?#B!05h+>R_LSpyQk}^Lr$!(BQ*<K2Bt^@e$MrPR!sv
z&<&DbtH)9esr=5qk at vBdm~AgVhIsQymmiUy2H`1EttacD*gVQ6v3eaQe!Q&(N6267
zxM?LBRZY4;kKdh{Y}HZd=2hnvH287Oqu09VID0aui`W47G)JB^i&FxR1uy7BDVVpU
zABqOPCO~MD8nR`{I<t*&YZz(C-9bdg6*x8I#D`gM=wc?}0wD@%reU(uIELyMHQi!S
zQ at MBmZPL5Ra-tne0+jt><dEOM?)$EZV|`$T06$IY(J-*V)lo~bn0c}WirZZ=z9-uE
zAx!xd<gJ4DW+ylJu1Q3AQ_;pL at R<G{D*uCaT_9e6MJxxNy<?Ki&f;Ky at 9K<aQyDF$
z%!unWf_S=i<1-fxB(y{FNO`=VlOfh;2RxWNOn4ig8TZB;Z70!QP(R%4g77{N9KuUc
z4)%VtDg8)elY<#{@pZsP7&5>QKxor!rnBKM_W%@8&y1tRE{jy0_}Y_tL}Sc_<omI6
zvbAn at Wd9IliRz@mGfEeB7)RNRkC}&|K~`cwu7hvV?$j8R=M at sS%36kw|G$s(XKJbQ
zxp6zZvTO8D at h{vf1<ztKR^G-?lC*FXZs9IxX>_$Y2O_#!cpWz-GhDED+c01j;u60P
ztNlD$TV1OS!3U&3QIB>f9e8{IM|*?+&oG`}3V31U8)(_6LQ?Fpt5balKP_#x(IF}(
zqBg>>Lm+WQ at 4~TdC-F#C=H{$_dkYGUsk8|BruP}^>jKOE>}@R^qL1P7w!D<6#^f`m
zMrKIdG~V7PCu`|&)!W>@;+IZCjkN{HQRR6VW8YTMzM%0%Hg($gSE9lg?{f_jV(tI$
zrE8 at V|3tIOAiR0ol%=5Ba+QZLDgYwJ;eArZ4#=zuGfB$i=Q~(e4JKWKAsW2*E_3%8
z5#8aagdn%SJ{J(a*<C#?^Ur$)11Ze?lE9-jn;z!GQmvBJ{>B@#&ztzkblYsYNa>Fp
zA>!v~riLwsR<=1F-B5uUPQP<zHWzAM(b2wH=K&F~Syp#XQ{S&gSNRjULik{4SE8B+
z01Uu<;zgVUJFTA&k>=Gh5q;Rr473cn`Dk4>%~?|kV17LNS(5s7J9$E#rdBjPSlA>G
z0_l#{g<8C$NFc(Pp|rcmzbEpFU2dUy5+ at LBfkTrP{sLaN0~|)OE3K>mHX1Q96nl{!
z^7B?U%y>t_)m7QA-2rz%^=)RuFe3bo(l_sIvWN;)euKm*7A3R0oP3KDcTT>Ac3nXN
z+?}eIg&4W1kQLPVHA?L5b7}=46{G;(VeX2YBzpA4WRLnYY-Ii at Uc1Qv-U|p>Acm!Y
zYLGzn)0PYz4k7VS_HZ_c#KH~ZZTu6(>#kPCTg=@P%hai5bo&HV5s=vIs_<i6+CUye
zEIozy{wwmKn)iSeJ+m$j5xU at YhaTG{<IN0Ld$-(OWnK1D080^8GmjF=VOF{&9BrzB
zm!FFn6P~^~+a-T;qnT|}?tuyYmqzQAM|dEj!Etb~K$6eV`K?Jx$Y~<x;cX8{SEuJI
zl%rnsqDP(ZxJ#8ZFuddelfz9Kp9bL}2q@)C?Fq8#RlYHzw9hq=J-h#Mh|7PBRrC6Q
z|2cDU?I_kCN%p5Ibh}$vM%GiE$?IKB?^tTc;t5*Dg|nXGWyRk<k2TE?UrmS6Iy)<F
z*mnUxyIS|spA?>wkw&QPY^0OeN80m}(R-Ou5aX{Y%(^AE&#@9OD|<sh-zpj=#+17I
z{j$OL{?q__7fAV9uGa~7Xl9o(59mLq{(_B`?4~=62N*uFL>;KL0qZAEl2TX!i3%pQ
zn%lq<NEOtT6D(~BaT`hg`_J#K*<+ii#CUDCh20-ua9Mh{D|-|8=_xB!g1ox%x at sAd
z%EChb2!Uc1zv~=G8Q=);rh?SH1H?^ueN+~$_Hg7HWq&ryka6LE2J%En3De9xapNT_
zp^J2oELz;82MeQ9TuS0Ovb9v%=*ZCji{h=h=$`~g<0$QF^dD0q6UCa!>--Uh5 at 6Tq
z&nD%X0%BPjBSW|J*R&!y$<wM&CmC5T|GCr$Hpb3VCI!d-1KUbK at VDm3^JR$O+i)GN
zrN1C8z1B*>wJ}1v(TN(mwC?$g2j6Mj*&|M39ywq<#+VXpfD8>XuxjD5&M!mKO3pTa
z{3h<W{!SMO?b#SMZ|PjK-qg7q7~T at -?d7s&={e?Xpei2Eghq7Iq7!$qk>lUCF=xqF
z2AbJ2nx!&afe=;s8NH0bHcR-Vb#|kAHM7hVw2*CXiO!sOy7_dS71}aT5WFmhag#e?
zj}&T~UNS+&_i&m}y3}l0a$=ze1>?Ri$8!XG0QJWmw67R5Fn-wy`SX58`@06~WP5#B
zjv*}On0Ni(g}73Svfx|5Si$P$6F2K0dKX6Bn^2);HT#;NN~haR^Sc=_*BT6pYt-tz
zmcxm4b5+}JtPGMAz(<sKlv^S{tWrga(+Cj8)}RH^>5^7A!g3(K&su7{)`+G~(^>v&
zzfw9wLtaR7$FYy9{R9l#7A8gCH&OBNGU+m5?m4hr=0uszv(L&?D=-HKOreoM-qw-u
z{(#vO5=}q93(_QFqF<`3vYxE^o~o^U+TsrQsQT~zak49lEN;OY*6KgKoG^v&i>{)|
zoy?#5+(9Q8_7<1(u#_Sr at 0^^=43R`DQfCS<nv^rNEH}Va7JgR5P=)yiU{V%ZYR0uv
zrzXD1V3JaQMb{5UdC3R);dmnJ$HqPd&kjr5eLoVk)h?Jalf}%OJM-vTNe7V}0!ov#
zPKADym}JvD_o6 at T287>5aYW){h9#Vx_9ga%@xlb@&vLen|5uGE(%J%5y%CiX_U_3#
zoen2KA7{u&;i1lRQfy$$3numx40QRpy-RCd7J9d!yuqb9Z=p?r81l)&ad4Q3VFxRX
zspsWTee=z-4)*psPr$D2gd_Ck7g}ImCHTyCSpBos=x+Y~+AE~<s(Dp!v1KA!lR|dq
z80yW5S8B%fDDoe_=Vtn_GhbwzfMDG353F$2xJJ&VE6Sz-#QUVkX4eT*c63)I0d&ot
z0`;&S3O*%iyH70nPR_>}z-c8C4s#KDfLo}s>bb!cEAPXz7~FV^al;9#8go<f|N0L;
zH^Rm+!LilvTV%~P?QLj4BFBhmdnR(Rbty>kQ|eLHVnz?DBd4GybAls}nTv}E^A)7R
zYU%d4u9ou{(QTK-5GO{x;<q=PME|Z{U`$8(JP9VDHd<?HB1`4kVZ<=ZD$y2#r19+I
zf2~hAmDrk`z_r+77mm1dITtN=dXStQacB63R)M-6OJ3wuafyhgwSe%B0_Z^r!hhH(
zn3^QJ@>!gU`nv7Kq*9$cM at +2!uhG(tHd36U6a5<g#xhAF`7p{78%vj;W9B?RU^L>k
zj$#rhtc<QOL-s%+&34tim`Xx_Gfi94F;y7DvPfM+nEY_A?}XbnfeE*n;7z>5EoG~|
zoVi=Q^;?bIpV#j0BWL|f=SP8>)L6i$|0{W|5T{T%0Q?1Z0ZHxD9xa8s`b3Ic2oIQn
zYe|+ePLf29UqIeV;<l>#dzb`pta+T$cN+bfiMv at A<f$!lH4}UNT2v6*hmMSec6~_i
zzPnAFv28;o08xeL#5(+UM at 8<|z{rl!zX6 at 3vUu50faz8#o~C{r0%<Buddx#Lc{fie
zBi~zOvUG&~(tz%Ij<m!_AN3sGX)+|ucIO{Gd7*oF7}~mR@(f?+%h~>>)>pfxAp`S4
znk{7b&vDso?(K`>M&SWz9vdqVQr`+F!c{W{+T<VU$y)|5aK{Q**HPw#Y%Myiua*Tf
zHa|HkR19i}I-B#jE}THTMXE*ToR-(qwgh|nr)Qfw0vki%0$z|>;*MT^7 at R#S2ewSE
z;w&!lAcpbE)6TGA5e7j*+RB_$S^O=J{q#Dd8QvLLzdm~lYm5R<m_qA1zkvB($ShAE
ztw}`%aj4odvcp+2i8qAGZn9Q7m_K=xS02kv%Ap;SZa)SWqish^%(4 at YXN!`=?V}ES
zgy<-nNfpjIIn}0`Qri3d>6d1y5jG31qeKsDaq7C<T_%p|=Pnhalu`rxFl#!J&Azz~
zmFujR^ujbr{)0FrTxk5~n$hcQE at OAr7-5Xc-KsFjU$&J;8H=H1t{m%c?Gg)C1%xd~
zq=B#`3+9@@uqzs$H)h8XM7so0q<^wronA;C1<$TGqZ7kYPmJ!;1Uigz#x+t(7=oX%
z&>xUtlo4T>X$^Vnfbb({iXiQ?pC>~wc%_hhv#%Iz0=8m{f9|RmAPgb8z+55^jYO<7
zb`c5*_?E;%0Fo;8_w%RwI=`R`o)cBqw>?+ASW--_2bvn+w`^nu%%1yRnu%($tM5nX
zT2E6)IU>$I*S)@{lS|#gC~5A^2 at J(Ck)<0ew_B=#p2JaF?De-Kv(6Rp8*zPT8V{;6
z$_grCN4}yqDIlbs+gGaWQyaF6p*CJPf?z_gBU(;b+m*3#YXbe)l!<4tqH4U-_@#fN
zpsJl6L)@(Ej#*$)t8=IW!l`1cFtsqB{TNc*X87Ru^lw2`!gQtSKn3 at GQ)YMolx?=U
zkotMyT at a8%FJ-rHB6MZe-PHYM0#j+10K9N_BlK~!*)lo#BI|1+pVF_#{o3Y*34d6_
zGbyr(X8#g(!*2l>b8Jg*p2K(V&sNLb_;kE)LnY=J)RHdVGz8P%@MfIP4 at oi9>~(Rh
zr|+j#Znxk$p8?5>dfvL4!fw(Nol#%oP at Ep1gJU9G_-Ob00$}cf<d>~f;XtN$AEJs5
zJW?DzqFwmZ)V;@)tAxToaA^Tc<qY#giD&nzlCZoLeZ0;j%MVb!w1N5nF<+pHIaq9}
zjL7ZzxmArGiBL0ANR!miaO&oSLekU*v%UR1J0BlmyM(au&H4{m2F$@@!L{)$(Wcct
zMtC_7+-b843^Ilw?$37S^V+L!HdXQ}mlbODQ#%%=1UBfN^mNZ at aGrp?9l@`Ogc7w5
zjFHR|k($j}Bn5$5(tPK^j*SX62}(ST`2qIwU!@i%`@kic&61!yfk$b8E~J<*GcnTm
zRH_p5(4L1pR0Sy$xb!#;l(9WZw{R{r=98tAV`)Cc@;tO~pMWv!9wFLc2h#$%hj=Vr
z!U+89S5PSFf51n;|F#i&nnQ}|PW;7lUgdb=lf*mX)mV{O6CJ6~Pxqq7xQ-$Xcs<_i
zB8Lp}lY)7iJ{+HCYp+ at 6o3cH6eMW!oT-ZoaQU>Ms?p8~~GvkiYL@{WS>W#y053mCr
zbjZag4ER7fM=u+n4EF(JhGX-R+LzJ<s4brWRWq`9;_;K*SheYikjNe|OGr?D2rb{g
z39<VRF_ptXRQEM|sq6b(vRVDlvK72<9e(o2DRB>7%}g at 3kUMdfXjn*8fd#XW<zQ_j
z1^YsYdZ+YKECIwvPanlT2stc3C7a9Kr4|d7hI&MMllnyV^sk-Bf0&G|08>^F(umF7
zy15l@;2Ilh%+yF47fx5JskXH>VU_uk7vpBJaNToo<y-~_El?5i(~@xbWgtB(aNrqD
z(GmdX8(_XNTmt}?Wtq>Z^YAym2m8pXv6=zGRo_|yLT7*J(jXjRR7%_arZ$J$4r{Np
z9FV_imf|soQM{N%oobYr_iTD&$wd^_jP at 1w3&F+120c0j9_3_m`7r}B4U7|~ER>U8
zG9fQ(nPHu9lEHc6O4u5vPrm5kyh!bP%wES0;7I7`HWCw1_8XA?>swwT- at -|Zy(^w7
zwZU_hlUO-kMp>Muh%sKfs#d<J0s2C}`H1K!&AW#&A;Y(XMtir&*6U=TQ(!o)t{MLl
zfSA)2I!t7+rBj7Y$<BU_n+~&qIE6mOQ_XkdiJsKe78}bD#CDXm2GLBp3T&e|BBg>M
zNT at Q*usZtNvkeA916}16kGl;*zgb|Hl+%c)hNwwxSNa%NMa-va{las<;vR(Xpvc3(
zXJUO{#~w5|=uYy9qQpc|ZXzX`dJ>gdu-fdsi%lCxl_6r5>;>RhF&5SPVieVg^@E2(
zIL!G;InBWxPPaba6NzAd(QPKc!z#`s0`M=kYa~P%AE5qzE at ViQ!M#-CAh!)397OlU
z_hUMbt*lWnF0vx6S0x3|@zW;H_?jZBH>wXa%_e+-M|L(OND>+NsFst2iA at -TMMmDI
zZM2F8kDl%D<j0OSMs7HCWPd)Bhe#zTYmtGGLRpJ at o%gqtBGNyye7NS~ZJ=zaq}MPb
z!mio^EKk~{@50emg3c0*zo4v&H1H<%w$3?vg_lEqBPSPeu9yviS0&N!{%9#Xd=|aE
zsAd(!ospyQ?fe<v$gWEzC|?89p0m70ab5Cu$Cnv1;tV_IkOksx<Zx9Ks$OXDqO0w7
zzSch#RSVDqN{US5h<y$eJmYXko2+Gp+E-FFt6mVJwhUdc<!vn;KNYh0jyu=v3coIC
ziVaA=FUqIlibLFaJ;hWpWvR;l+F}X9OuYaBVWh?o!-6c=%*u5c^hcg5!anv10(#{$
ztTrAh<s=~cTA^X=Y<X6vhXQFYBr9ECsTW4J(C4ULyg|SjRfWaZuP$RokG;ruVRjpM
z1MM!3r3hAP;RJRuBi)E15hQnG3^-j2!!ziOm3`KL2`acqq08?_UzFKat7Py3=PBhm
zanVD?^pGuZ$V34<uX(B8V~f`15D9!#^4nx$J4rDMZ%P8 at 2;u&DXi8jzqtE!r?B`dj
zf8a6-+NoGeUO^EupF}Ws!nBrzjPrjN(X>)BXKibs(L?e-o+k4nL<@kvVMbU3UJzqF
zd)zO_zv%i|22|K1Y9_k$&?(8~w-E5C1~6m9l#7tGGDbje*&FoN*AI^z`!CO=y8-LP
zJ!~FQnCg;LPOaw{jbJ4TklJw+<4hcPf}z*YXmoTFN^L+gbj5jdjPV5eTh_e at Mohz5
zzdGS$#HLur-{OJlJcq{5$%?lh{oekOtfdL)Z+oY=e#|%an(w?N7{fi1JjniQQq{j)
z2WJxCwpl_n2If(0ao0{GD!fY(#$!2u>q<n@|I~d?SN{54q*M9FEt5YgU^Kb0%R0gz
zx at -ex#MLNPccKf%FvN&W?q=#Hp2Ux)i<zDXX(6aUQOoR&C?X`6ssn1kFfqxPvX<fF
z_0L3xDYen`gj<9&NGuFO1do|pX_V+dy_0uSfNG{!fH%xpsW4r!FJI2SSn~da9JDJW
zsJdZPLs0Os&n*WGV{Ss>9uYYP$>if{edKV at a)g%UYjxQ8l0)J6h>J*=%u9Z0(|Dt&
z=Acdrt($4ja4itD#??!Fb25;70*9kigo=DMfThelIwKgn9)OI%J(}h at w+-itA3>Wu
zD30(Sd1P1LU!USEV&-JMaeET>n$U5Z9H|-o`&3c$xQ?>^xO}?}FtKCay}9!;iowR?
z{=X$SYVS2~e%agT7%x}u7E%4;e+-7>BVj<dtikH&?r`uk(I>L^KOax1O;_w3)f!Oo
zLudzUN4Kx_ctw?YaUNMf_YpS&ac)&Ye$@EMi$FcxJXW^#vW;N$%dlp}$JP|3dq+%x
zmq)mtg;gnXvLC?N#)48%Vl2-Afx=h6T~g-BU5L;@YE&LRX(zf&#=Ma$3f26Arn;ed
zi+FAKLaBFYr2MM6A~n#hF2L_f+;0DP3wAOUuY8jJuekK1=dNJ9TF+33A(O!Xg}QRe
zPSGa>w<&PxWV)FOMBr;vfWVDTC;f?+I+O!BY5 at 0F-qR+U>9%FW+#3AeqR3Rst*Z`)
z5Lc|;f>$5p-#EqCb|<pyfO_P$wsy__9f93A=(-FC8RE^ShU_|8`^6DR*Xg5 at oE-ep
zDrrKMB!NIg-qAUv63ZHjWahPaVUecCXzXIrkqJ(|pdr%tEWKUi>{EV3m<K~>6}DGj
zJsC4Oc7x1!hxB0dZKO5i0QP6O!&Zu&NP+WgE6ZPRM#zo!13In60NLnwszSLo1l`F%
z#cY?Q^8RX!HL2mfl|nT?30s;`Rzaev{90PQl@=t2!y<H_InWGJZ?<N<6pj109^QpE
zV8N9sb5(H9<;DwZ`5oMX;koFWzti(%e(#L*emIK4*MeqShlNZ8aJ~<&4s_9$AtWfg
zjmt{kFnb(&Ozb+D35eRqPX4llBnqSxa*`RA$?YDsRN&c~ssVe#BW!qN?w!t^^5Umo
zb?3tv;Br@#K4aOu*k~7WZ42-r5JD+42yZ-+YV_~V)jj3Xn}Ho6#_Dsn$1|hW_8kRM
zpIbRm-DE1F+qN3eCQO}#A#YyJb0nfU>uqgjrR*};5AAEEKO{|6I%RX#%nhw&-#B>-
z=yE}RsZoeXe!qQUtbtbnL7XtAaJQwsYZqMe<YUZ$XNN`+d5spYMm=Oh+fq;DgV@=G
zK_`iTuToYtxI(_HWUWYF*`I_|M3oJv?zhAO619?V>XR=?TD;=tlvYWZm9?Tdq-(LF
z{0Kkwrr{{x>BM?~cKCFEJsUIDO&-}2MQ8&paOj*O>2J*DB~U;WrpCTC2 at U32QkB}*
z|4r9cGmZ78Oqg2|moF!q at hy62jsHB{2WnfQgqgj}*FstvS+3<f0itN&boHR6SMi;7
z%3%>XnoPw+&mhaPC(_UXSJTmOR?HnooBW4&aoTI=OTPHpG$!w%yvy>e9M#E`TFfxG
ze?MgN==O48PS36R7|Not^I1mGA>aN3in)i>T3 at _oL4tc~h7Z!>b=f1CfF02)XRJTN
z*CEddTy`|TSh3QN;3Xb(3?@R9i!PdE0Y1o#Kj96=Q}x^wC7`Z%KKpurtpS8mE`LIi
zo9?L*$9)BHMP0VvRqxMqOLLmPJAgpg$b<Hu(QHdwpA at u|3O4s88U<2>71j~V8a&vK
z<fTVM6_e~pur;6tV$sjhCYAfP4a5V?ze7{x%pw at oDoGIK`o)>{+?7JhY-uZml>~o2
z?m-%qss4aV%oqir*s at ML8KvClX&)4oW&UTr(sH#tMrsyehONA6>Y+Eol9{AOxXlv7
zu?GoTe2DwxIoK76c?hOAj-ZWrB+Jp^bq6SLZ^6?U?r0U&ytM!0>HB-EU~v}`ufBTx
zukS|6^Bi0!fm!GPf<0`x)Ba>%pii8Y0qNuOhm6<ItW~N3BKV8EseW4g>pWDzcKW59
z^WDA<A|Q<S&&Onv#nD-deFM{=M%z!uM5jFY at R)6esix1ECX{CFzZ4dJ#Z8bL9r=#f
znfDy$4pN77bou0JmkU#I{42G_u#S%RC*FFxGt<?JsR;`zbc$B96gNSptWe)_*=il~
z!=^+Pmpw=^R_b~5>m5j^mqJ*$QHENQhEln_;zGb(&~pvZzLGX_e5UfdEbhUMbuXM6
z!hU=wT3W_T-RE^etna^e6vIdv0R&6Yw;qRe?LP-C2Y-*XG7)_$vLd{j^q=jDKvM|O
zttKOg+T~TOJ7}w7WrS@^&DLgPiKXguj$-nw*r-VNoI493O0s0$s92ycwp)k at dX9H>
zT#XxIURW&lI9oRki1f60#m5-B==HL=QvpM&aJfedAoA}`=R6t1=}@9f^{o12*`pyC
zcK0qGP4hb<jwSezKUQog+GTd2uue1)2I8b9w)&Xl1x+7bp|WyJi&vSgLYymmcXjwf
zn}hA_GJ)_OtiIDS0G3y3RU{FK#zhhksuL~_5zup&NIF5=l!t<LKOulPI;!#fnIZ^a
zt%>vmEn at S{H_en=XvOV#2>cHX>0T}&X}`WMiO at uPe(n)h5{aj6Y?YLv;vtQ!Tb6)p
zR)~1F8L(w_EQO6Yh)4~6ha4%L at g~Vs7(bx3S4g^ThTdOCU6CkLM0O2n7;%3wf5iUb
zqgpF!e8Fx}5ZiE3RhvQ5DcdV8pkEzrr}ReHD;Qmd?QEfSwTbH??OJrgf^QvYx8&Bk
zVR}*$dzQf at 5DuhYhukHd9qWqplgYuPihoW|FOog{MyYn|1D6~%RSJo+z%vf74?%hn
zk~Ve(Wdapdep?$@DRZ`e$k-`$FTKoxR;!UMA~{>`q%Q0+ZCJ7fm*tmagw6;>n97y~
zZgE(UxnLwn<qbcI{son01HlqC1VVC2;^2wKex5SZVm#1wpsY%jj9vGM2Nr}kmUz8P
z_t(AK#h4Y$@wEZQ2Hp3ehn<`e)89GE3|D;iYb<acNLX|;rayeD^o?ZsQcW<O$CTxM
znXla%Dkzac=<K at 2kRWrH*>z{nPg1Hw^b>7Ga!T|NS5y1eq;s1~^^pPQ2`?i<JCKF~
z6YS=4^AugF0K}y=oYhFLd at I`J^WKR1`($`)sGPY5O8f9x9o~gVwwAVT0&K~u28~7b
zKL%PaVQ50-Qca~-FuOP20U?wj(Z2F*D(*gQZ|lvs_9s#5Usb1Ly4s7CM_{rn#IrjS
zK9ZaJe!pkA?t0jD0zAQo`z|xMOq!u;h%_D|-rMwBj`%Xe3}P#bzmF<B7hy2Cm~4|P
zv2vCGc>KEv7l{HnkXrf_Z8H#D@>ff at 2>ALB)ihv{6p*3~|GG-3Ll!mOUg6-%jRFG!
z5C^!oL3K5#(RxS`YFVO<i}zF9X|!b`?@@dl7IL{5Sf(!|fE_zOURJlCtUMjDl>Trc
z6NT~R2!5z|Y>y&zDB(DgY_>Ezwvcf{Q at Gl8Bxzs{p%7ji0yz+mg%VnYJzOdIUmVGO
z2f-*Y5gHwh!hW_XN(10?O-B&wy8rs~^XE#&i+$=$9;erdTV3HjkpAhJKLK#UQqf&&
zn83B`h?Z{rq5m=RY(8u9;+KKw{8gT;=2mDx;~vL63k~P4sY%zd|2pk>{PpMP6NT5W
zf#=I6g5;=^T)kW|f`KixI-rdu^3*tNvP*f6ZjGr at RFAdEX$TqQUXqI>puG4yA)e&1
zyk!rEJQxcJ^U^jACG2V}GgmSL`ynLTbDwR=3zM4;cLI!#?Z6H9#F91YgntX at w{SnK
zzd7E>5Z*#1)T^R5Z)m-{;zNa}pupF=c={y8G2K<hs1#2h&^wHB7-`@qQ1t`2Efd$A
zD{K&r8(xeL%G$ao?%mP<eK|h@{P$hC<5QStv?x{mu~A<~Le4sapjf*1O32#Ew*>NE
zAtBRuS9>?lU&PBimy at k~zbYKDf=~D!XMnski+v~0Dt>Sw)~F20ddy)K<}@;B^87!X
zNo^mSuQVvH!NI?CoDV|i#nIk>Hh8$4zHEFzxooF(Ua#N0`NILXKL#)re$@%2Doi&q
zufXF<;uw=W)N>E*Bd&|E9)HwGV4 at J`nLXZuXL|pJ;@@gG#HSI{ryO2jnb@(w2O)|2
znjqw`&2opw8t-bJ-uXevKq~29vrT7jA!ljxm+>|<;_oe-i93C$5dLwjSY|)upqHSy
zRS+o`x>K%&2WgGeDz!=Fr0%4{(51rSq*wjIl6tnGS;=#n*v9L^QYG`5EA8AK^N}c!
zyBO~Ld6iV~!$N9s^Nhay;sLwC0;0$Zn929dhHuow)>gfb<2~to at KAECLfH}6eatoU
zjdf4mM=Ez&+x_o^2V1oEnUMaR{>}(d#LE>A5i(yqxVCVJd>%yf6twab<yt)VQZZ4-
zp~>g9UcB!h+f$vDPJA at e;|Oa)5kl56;2c`E!UE?q>g&Nm$Bt!9W91gYbov58WJVjs
z8_-fba|;V|Q8(OnR_yCD0ez3o8r~?fx{QmxUKP_1JtS417w!|52D at GlEQ8$#R)m$q
zTm+b&9H}k>4bBp~n*9Anp$8AyTwoAf?20PDRb~D at v2OVz5^f&--u!b=40>sl{LPJ8
zbG^s6;o)J^@OvyZG8UrP8`Zt-U-V4;9lrG%)(|3IZtBtD6ioo|23CWJ{F`%`$<A|&
zLR?xsi|EV~vzfb)*?DCQZ-v;R?oC3tQFuFj9F(0<l at vIM!}87!?AasglV>n~H{LOv
zcR=|KkV8AuwP$Vr;#Vmo<L?{6K}RWTIxYJRs{+|h35>y^oAk2f;d|pkRMI5;*zUCA
zbWr57tXJ at m5qysQ?8KX}Qn;988h*Q~&IjhAR>8V092mZ+elBRt4++RlsUo?pLQ-)A
zGD}sdU^QMmV(P`hJ+VQ?|J(HOc}JF^TvNsF8Kzls^#<Cb-se%w^C8n9Fc3D&0lUbt
zeo|cH3cayr;Hk<4eJ3SWsiM?5;T#D+agc>_6au0!w_<eCsG>=+cNhHIQR~YUT{hP`
zX(GdV!`||)-#PxMRsuB%u;H`3z#A7oh$VuOX3V?Mo5y!{hYfKNIX0>KM{eGcM{_O+
zf<iMZ5st0&qXN+p^amMU(G4>HC=}}8m$9hWlUffXc$)U=0+$AwJRroMQ465LV+^H+
z|Jl#l_w02y<T+6P at XB!!0k;ju<pvz at aLr8*i4=%GCM_3iA$abs()hR`SzmV|1Jcg$
zmB>eN(+(BKq|2kU`}OrS)P9eY7H1n}D9Zw81Xj&<=r-3EHkBKzNUU5kF7gwd!;V<D
zW|6)AR)qws<b#U9ER3RbCgw=HctM6p`A{j}Fi at roFsKc5hiZMrs8OxBEwI4u^v#Md
zApgP*2U%QT4GzCP3DQg%o_V{3@$8dpmOaB~8~`ih!87bnfD=r6x;R)R07LG%sli$7
zf+S0siJ at o*3y$uNs2$LMW|fTrqtbOUoG-a?Xboh8iSWFkkg@%@81CVZLTpbAQ)rl^
zQp9!>$DDW&81ND2wk>SB{YsK4vZ36``6B_2^7?+#aOgIGyF;tj1DUmbB%xHxbW)GM
zGEKb<x3X`d!J)b(VI)QSAUv<i+1F&=z)WwhdyZbgOIg1{xMEky_0Y8%u{M9M>U+nI
z%5A3$nM#haZfKp1Wo9;o##PawT{F58iZ`>6xU5+N8^sPRRT)(UPAz_sozNH^VoAVR
zUMV#Azku9xScFl489yv*B$w(K))mA^Akr3cQM?Q)lGv8r?((`!I2gI5`Eo*d=ysuD
z<$WMw!gDJ$jdJuyYBR2B9&cQ}?@p;lJBI{PUsSaDLQv6V3<uMIv)?#G9%SCYf~57~
zWFxCvlZ{T)ATKR2c<Rq{HVpi`E#jqKYpJ}vnY>q&)>0jff0)PCp?mK(Mc4N|c((JF
z<dHQG9UGi27ImAnc!dtDI!y<mpD?4`#<`i#l?mjUoi_j$Dx`$<NS1ZM#yK467nK=o
z7p?vU5{v^X15xr16qDf0J4o$~9tH4e5~Gv#O`e7QnE>KA5rg;(L!CL*XQ;SN5clGQ
zrKi%X^kD!%6SIy55P9aT1BK$^<$Z&(o&n3%d8eJ=HK^7TS|wkIJb7vGJZ6;ndpBH_
z-QOG2_G at n4QFV+;i$vty7(iM^uiP4lABe+J=9}vu7Hu!F2#oz-I5l<PTws~eaMVQt
zJP|(aPsndF`7h(o at diR|@_)NR>!ap_VO0G at aR;6z`FS?;Lk!je3wF$YvCKchhj(ba
z&H1!sOY&<(8Ev=G9FAPg$6AIt5hN(i#cYV|+s1KF!n-~2Fn%JzEGoZoE+P?>xM9A8
zeNgkTcx~{TN3M3e6Z`<V8BiI at fVH4b@2YZTpqltGfOBnB!V*niz6o<m2y<Pq<(fx`
z;sj6CdWdHXb-q<M0CsJ~wTAacJv~)SOsA|Pa(w?l&Z-FRRjWW&z>_mzp~TS5s#kVH
zyrXnk3^)q|*>=tidm^%ggX)<7bK`@lq6Ru9T6f31wvG~gt{DP82Gma$*x2i2X<0We
z!I0s|{btcE>Szl at 74flk>*ctAZN*3~#No=iCt^o}S|+VXipHakjdN=U%BL_}+$j~R
zyKg0R*~S~l-;tzVDg}2~4HY7LdGr)^*N(sb;cPNc-u#;az?09fbt)=cxt8P%BX-|0
zug>Wi9X}nxI1s- at 5shH)9XUP5PZGR0jWn(r4OWioueZ>R6(n5b=cLDLRaUb9Lprww
zzX_~$Z390i`}UsoY|ZQhtDD_Xbu1!VS7-4f{0IoUEo8XsuJzfoQgLB5B5qSs(uR%n
zwAM<5JS<xF at ezFZo=A>LJTX0A#zlMFTmEwuP}%d!)JYzSvud1&SppwZlzOba_e^Xa
zx_}k!DPc4Cta>kQQpAkaCop5rc6Jo<hkZtc7Z8KePpx-K+g$OCdH#xr5s9ZHc!LMr
z`uOMePsYnp)%h<9KkkC>r<>Bap1J940-7Oo=xbd|Dp9((KSx6sX~{`CQ4d9-g8(^q
zrpy64(QWY7ZQI$rG;%O&60{+Fp at q(DVM<5QY2b0_rMBVf?6yBI at 7Jp&;IAEa{aQf!
z56U|V=s8IyeLvQmyGyDl(+MT=jt6aRBv7#VaK at hEyJTagvkU(A&^u4&$T0~il?#q7
z|1_1H9m9f=!%0<o6q!uW7`tz9hW7_fY=+tYSzWV9IfE-j4E^AuOfoB`ge<rW0(QwQ
zUoHxH>i;?th1~-oN<@TLX7S6YEa>te7)-<J3cmsg-tY!Kc$ofuk4I at D@0Qpx-Q#9@
z0qJ$jmec_vk2WK8$q^II`aHe?j0^a4;5k-UxLaeEF)XOS50+Nh*M#PJRkVes1<!L$
zO&-BnuTd`Ju@%3fdg9T5sKnt%%a)`nmFDF%bb408>}0Z+`>C!!{<9M%y0+Y9Xmea8
zF7J*iYkbBe`GOTM*>X%%8CVx!AN7y(K1 at LKzw<ts)QZC9Fh<icf>(Kx#7q!&qR1L?
zt2Z7dmlBPOqZFdiRD!{-zTEjjW0HMNwlhKk{?F|E`CWYt>dDZzCxmJUPbXn(rRNre
z5uP6t*(i(JMo*XN*jcR{2N5f5QG1r}D*?TinjhV%i=lL$LMD7Q(t^clz-KZKGRHCC
zk*@*mV;!2PE!Nb;=Q$I)z_Ug0#MRP^^1 at E9I~WIw&+hM#M&97Fa<J!KKtF-Nz5>i0
zb$|{7h0kQ*Y(Kcpq8{iH$CGw6WA^7D<EUZy$|b4(%NWjpOEG_SLv|kF>T|&z^}nrn
zM8k01Xx_E+MEFXJJP{r_GH)l)6lkvWz9-Ol)-ApM3qui?RHn7CVzgo%x(6~1x&2<F
z1b>>lb^iML3~4cSe<5$i2-tQyU3->(8xSZX+qK8=cD$6I`O4~SlJm@^lI8(vvuEYS
zNh|~PP{meC=@9-9Y`9`<dd`+-$MgOtOX at bvC<lk$SuYn=#>?{6V0OlihqRFZ4CRN2
zwn-gKk5_`_#NcQY5p()rjVfKHcs&5*=hVf0S at v?R#>UST?!hqOfb%2G>}Hp12OmDK
z>S|axIP<siT~6AC61%jpoC$E at F9oYxPatb?+y=s&#?Cj~(4p`Vw0o}vG645KZ2$f%
z2Hzz*yg_K8wd%^`lg&ncY5u5-Y{kYjChoP!u(vW)hJqJ6MR&KNA{fr){Y4mZD>06w
zaEM>@qKnhJh!`=&gO1YfR_7M_$>A*HS1qze&fj;~2nm;)AWQwK4Uc>#7~7KhA?Uv;
zn4#u$FRHTnHeNpOZP6XzXKBY9yZR^-m|%X3>zeWk at ff5I)x2XB%?V-^G&*6{rnn$a
zSn23}n)FI(aoX$9Rq_DW)wzysuVFq}z=L|}e9IlF)6?P?)2bIL`o!5G<A3LnJKKGM
zSPT*wi+2KZH6wL<pGQikx533hn2BgW7 at Z2e=NjT7cj2-%^5E`oz=Dm50I;W!V60ap
zR<h?QPhy8e at 9Co{2Lo-$@BZSOoQr7b$qUtgaC#;=&zZ^+6U7CiVfxTdtg2VeR``{*
z5d3v*Y(K;vq}cEZCmn=&!Q_2j%Ce^yXJL<Bn<Q%cw*baEP^wmzPk at bMpKYeNokLK&
za;T4~n4cCL at GS=t?RF*RwS2D5*h9qBvd~GBNs$qs;q3$3w=%6)hcdm{M=bP+x_UW{
z4o4vny5aD}CbTwX%uFh%_kkshz^ZX)R)bxRNb@`XK=-|H*PD*x-~wsOnuA4XEY#~}
zCZ;ez^?01!UR~4g`|6#k{-uc+I?bjrPP_<&1mLzHs)}*4^b^Rz62?wMZJNQ?K`r{;
z9m8ZuIhm%+^FAgtpG<_QJxfxhy|r0(gWv`sB8|b$^09s>y#4A8fB^oMT!)mlwMz@`
zNIvb`AK9_=>?3ld*jD;deH>{0<gr*c(JnJ=L;&W5Gr#1{)h>wAFCV(y*x}o>I{Sme
zLT at SpwLkw>VTLZIfQX^{TkwT-!07&GdkrobwTFRfezxACTi-ZxkkJOVrLO-x0PI^)
z=}4EXhmq|IeZWKYBTC*=zY+VjA(?vBiUXl{Ri%s_pbUFPY%z5}Jm==Vq at +X;5PewO
zeAC=cuV2w4o>@}X+styjj!4^`I68^`ty53_U_x~-BLOmqNqup0q(~e+Km{tVJ<2Zj
zg<H+ALjhWG?Cm<C9GEf|9DcLqV3Z};54j_fnL$7c$G at ISl8GfaFJsC}po~)+U&s1Y
zUL-W&S>Re!mW+^)mVYiPA(?MhDc)tx+y at 3ckx(*f^iP6iyiHwW$^4vj%4;Iq00xbs
zmG*jd*dco)^j}D>^q-R(scEr^dTLhC8t_`Zs?sp=Z6L7Sen<3A)`+ByE6;)=Pv7b6
zo$6v at YO99Pd!a+7 at JLy-g2yf6Z7G6V)iyq+c-+K;LnmI(3b1!RKPV==E>><)(mznC
z#bKq&=Kjz4lRWj!zMUGA-LpVu6+EtsHMq?QKBRtowLmn3ajj)Eue`V5VXp66sawuz
z!ePpUCqvW!!VMXqnJ4BVzyIF-+S%ZdQySI*dLF2mKUPpdadsBrDwQ%ftp5*UrCw>-
zkxRNZ%s0E_3VhcbOBR4n8E8w)o7{%YF`FSl_MNtO8u_q at J~TWtb)jI7tc*zc61rjX
zF=m2X;Pml?`FS`#`Nup#QMC*ySuX{A=cD}95q=7jue4VDwRorUAOhVCd-8VCoeD8K
z#y~{O+{j{3z_t~FYsC?;(W<prcqOa#MQBy~pKd=EaX~=C`MW2mQrhove%+sTRD}5U
zi5KBC++wD5XWO-esxfhlpKFnjs9&jJ4ZYc{AhXrBCE4Fdw4l=xlBo1Pk^g4YNfE%{
zz)?ebkPVzYV>Vw7Kfc|YX at FR6<Gu}gl04u0>1`CqI?UvISqX}VF>0$*^5t$!lN7g+
z{s#YzZppt??Kp{cmcl}!|N48RlF^}X;F&t;wi5(fb53b`l54>e$(xa-#YQWbGIQdU
zik7oQC)XT*+jmYSkFBc0uis$-5Vml4-Js&<MboGbbHTuF>ntOQ3E at teFq%@d{%{oJ
zG5=ALn3(#g at gaueY-$m*l0PnVJW!kp_vfY-0Tj^G7vI;TCl$em{%q4oQ}$(&B--S|
zL^&8_GxX%b0e#yiv67 at d=k3imJu#fENqv4y49A0+ye4#mL5n0pTX5(FXi3{BNG0Y$
zXak*Lk7z=zWDgQ_V4|MOxy=Lrd~x^JZLl88k1<GAjTN*!?~_(VxUO1*0Rc{u8_Mi}
zuxNvRPOG!4aYSh#aQR=vshQ-H##a7>jGMFvuS&o>g0M)3sU+|pi57M9=jqE at xtu-t
zy%>h31thq9Dn3}|Yny at K<qOC{;t8tGk1|>h&;CsnzNVDEZun1!pd;hb8g(SxX|Z2t
zOr5ua`2Q27vSJGZ>&w>W8$`F_>1s{WG0QnPcD~1p_)eQy>~{Rj_!14S|2U#g)zB$B
zMdYu^`uC`c`6t8PoZPOYrEwUf*_;CMv1>KOy0G8 at g=LZpC-QGlEVW?s7m|)nqk2#7
z=`3V|BLbr6<bVX-6tV$AdO!3>bGZh2Cy(Eq2A`LjP)+t5<=&Y*g2z*!ChFQp!%o${
z3nN-RS3p*Q_buf>%ES&G0T?q at OGN`!uFm}7 at ua?T|F<>r$|a$)wcxF^Yj^TNb{HCY
zYKj*lUm};_kZvxZ2l;^fRMV1OjfCAn=?kfQ6U<uh-U3 at -6|gFcRQUb>Hr$&dW;fSn
zn8GmO3b at lIB|#sI at ZDm_2pbjFKRR*o3|J|UMI0K5kBisdHH=fW?-0hFt&A?UNJ*0#
zu~VnoP8YU0whu?>WzI{}jDJsO7*V!;sWagoQmgE4pW5~v)Pf_H5dpWW<AOf5$@;D`
z;-A^vP6~)IT=-bz6VH<9!RdcHSj-mBCx8-f$?{NNHiKHlsSByr74N?pHs=u&-)y4J
z-1lJgCqGoip8oQU__y~f&$opPIyhIXq^8|c6)#_SsmXq(*K<8uu_p@(RuvDnH%Xhl
zcxNI|#lC<hH9jeVTtJVz*XC^-E+cB;NnF16NizjtRo6+EJdw6;8Znl?Owims@|EAs
ztznNhRjIy1HP00>MwQmhQIeUu+SR32&OrPM<MWzdV6w?0%E8dG^0R-whummh^5L8>
zRo)kjOeaeK9a482bZk~(g7}Nz^o1jJC3yY396&$@_8~iOQFhK&g~*zRH3>hB7k#Q}
zVIT-_^$@i+t62wI#ZUm&^V*~Gx+58aS)^RafcY at lu-gDY_OfHbwIyyB%>5l*Jo)hr
z&jY*g+y<TUeXEl2fDq)|4TGm at WKv6aZ~HgnCy*0pR9FJp at x^A8sd}kK*;T%J>b+ at z
z-nHDs5Lw^1X;-P2obd5l-6tJ*?3CEtSPLPVk+$<g;G<V|vW_Z114R0t!(!F~*Ob-*
zuLBr+h%Rwit*hpUb%CU{B_*Au2ESPjo7beEAdoo+=?0itFeHp?kw_}ZQ`?D-7b>~c
zN??B_yE99OuObwETDzRQ8Ccj$qk;Qvpy(^lTsdKc;08@(G?9G;F<v#j`6GjWp7PSM
z$&7u7Np$SE8r$uZFUm5gYs!xFJ)_42;+q_lnyGKnQTxX0X^$6Z9I$!v2qo=V_;q%C
zfywE at Trs%Ae%(yqhUyp%J&B3ZRECG4MMX~{2u+v}-mj-{O0kQGiV3omm|LP^bC+;V
zM-+68F=l?jOk at k3GWGG`B3M<_>a(r!SzSJ%sTOXTBSGXsVj<`?3?Zu719zng=jcJt
zK@%r}apjzggDfN42FtB%eKQm`We<l?FDw#V%lt<=?8A5 at ygis|QJpdqn<^ra>61I>
z=!6opb(n%QKb?Isi0G}3L`(%CtLn`e1?8c{OxB8zLQ|Q;MHE7C^XP`ELN%9GIn;sN
z+St`f at gP<0yA8<q`R%n<rbz6vBDE@}=ol!lI at d$SgY{EB5cfUFy`(A-Sill?8+oW<
zR=?rX*u}%9Y_x_=R#LEx>`5Ijiti5f9RIlnL{Z76G$|D$hO=ik5>yFa6ruYh?>lPB
zKBO=?_tj5W=I4KN#__cHFx9gnny~=7Xz{jW{TGPQGlh5OJ%$VTb8W%e$)!6rjIAsE
zYS-3tI*~TGDI7S6-H2FpJZLYHFzq_6A at yie0^Engd|z+ZK6;w#Cde#qW-EfCleP_I
zOGPKQ#AK+y_N-=>;iYLG^7#vzaCW$4H at U@<BfKc_3fr9MVe~f~)`Z at wiJ~GQQoc76
zUCxUMrMZjf(_$t8>skbUs?9%3rQa0?2CZL#evHT|qG>&c$B|Bbu(bT{rz1m$UkBx5
z?!;Za^&*Pb(7JqQ_BFsX(8{grLDUU$?vM+U7~aj=#bKWYX-osOicn)e@#!=#$lt+C
zanhTk(K?&6u+ywy^z8iiij)Bi5>QpR^Lk+`W5BX5JK<&64iuJIJt}P5BBK~@jdQ{1
z>j^Aq2byg2ptq6+1iyfNbyhh<=K+(R33+8DtVG8YWm)*u*kd%6pt>>Db7gR98n-tq
z=a$xFO`E0}+QAQk(j6j2aMTdLeij)7Id0Uo|BmA47x{^<>FaD0p)6Y{+YyP<4|#B8
zUFvu}T&rNgS8yL6@}Lc46CmGz4M?}jfG8^0H}o!{zT`$!y>PPLNM&dRpR7jmEFYkC
z`Z0<h9JtMZH6 at gGKHZj&ug(Pb=QgyXcL>M6?ONBJRBv9Ge#9y+oDLBNe*+P2Sc9Vv
zOXqhYUUMw9%s9TTYAVoH<wTG~7~~c1Vzk7fCb&P4k*QfMB3q}YG%KA7FWqt&dv4;!
zeM-6Q`e9^tfSN?<fL;)Jn1YK()mrI#5qTq0BM}&zhNp@%x at ogler^4SsA_Y^aZsHh
zzQ at lL2?%LSh~a8TGT$ZO!H4jop;#(g_3ChmLj8r%i+Opqp`bLxZcZsgHq%qm?n06X
z3|>PG&m(4cZ;_ARDsW-}s38wCRBuOkx8 at AIS0r6^FLqJ^9*ZILA}`|3J?N%V##zN4
z==!B=Vr8+!`95CP9x_sa_!$ZKbucc!;#TCK;L$b?Mj^e at HA{=iF=xO6q)i?<*{_TX
zl#?|!gz$o8m08ort?I~{@!*O6*cS(oPOfjLVA^L%4n0E;mV=^!YWu}6P`E7>CRzi&
zh0Oq!WOHe-2mg}1r)44F8LzVYeW7(K9V)p<7GSiy8<8cHCd9`6&Q_G&E6vAtsO|Wi
z={1-TmEM<f!qG+u&5T+9A3{fD&>GBc*K|iR%PE*nlLT9y0jxWWqJ62wD_e&h86DuX
z1Hc{`3yAeJKJXUpxpey)<88qbv|yeP>${D+#$naMXnx?16$@P4=r)ea561+=N!pRF
z-Cz;D!T8SRr~83GrOS7Lm7EW>Qq(X_6FKpM0!ouboYMuoVplYkG`X`0 at sl0)SAnt)
z>xq(WJ3rhskW5Lon?NIfdGFi?wAkA*<nEw^tY;Km+Oh6w=Czts^z;1BLG5t#>k}X(
z?~TSfP0eC3Lr$$@QqDF$<c|$6r~wKY_2yl2#bIJ{`1F*zM at -l4Mi)m&Dsji<pwSa}
zmz(<xKx{$<QVsO3iuXHle+n&?N)OmqZUV|yXQ1cejV6*enkb~1#|vASk5?9U at 2F2Y
zmQD@<i5|#Bj4Z+hf31WJS1Y{mN!5k8*0oqqYIR_4>ASs6<sn*Q8xRNBY9)f at VAYq6
ze;Kkm`inoRo^G4i#eoQ3XLe?B6_Eqz398Rdk3VWLIGJ8PSu+ at ZWGTDqQk0X6IpOZ<
zY9&glvUT&~Tve${W3k96q--(B)0~9g6*iITmpp}`gbIRTR at c$BE8}!WVLa-VG8{TV
z9S<*nh;zcA@<knCOGlCFk|Noh`Z<4t at Et6*988T;O5Ft_D0uo4EpM`QhcQv%-N3C7
zC~ek>@HluJ1bQfnRt#guID&ZmJTocpz)xEsqO^>YL4U{=x(0h(sgg^GW-iJ&v12s6
zni1T at U4vBeFDgB){peVY=miSIM4A85yMcf$tE&f7-+JW~2!~oxNmVRFwGap{WvUBy
zzi7q at VAK(vWRMfz9dmZ_MKAx7j|hCK>ksdITYb2pF^B87*(?1YB-gQY?8?GJXhzjJ
zFy_c!jP<hvAe$kc1v~UYpIp{BR at Uq>k1}h+wUq(Ih0TT?@E at C)tiQN&tE&qz2*v+P
z<$f$fGRX_*BYX{)4IU1-1)(5JMihD*5yl4S(nr)%(nc-TtCFbt46Cc&-6F(#m<A%R
zO^B5i)3F&~<rcDtcvF0G%ozBL;}Us8X%8S92zM)-wojZ$Z6vK`_{pX5J9!2Vj==@)
zMWo#l8)=-ZOai2DlL^J>t&!bYvYVwvx5TY(44r=nbYgTYhu78uaZXScV-0N*it?nj
z at PHV{OIZ^YX)#tHa-XzNk=!N6 at -;1!mR1tz?DVxLlfm8^q^ckrY`mEZ`?c8=h}(l3
zj(MZ?&;SOzy8YtUwWK+s at fDc=t+Xr$U66u9tJKpjyU!dACL4H6ffALZIUV9(tu;dW
z*bn_lEBN!R!HrFiYR7U7umKD7`xV|RL*dQ$vL*be3J8yJ=1BXR-6Jlv`0<odid`ms
z#VC|29 at 0t_+b|~VS=%w at meAac`}*_(8G)3F$;tYP8<gNwr<E7Hvb)7Mj>!#o_)NWE
z!MUEp-O~VXo)EB9<LeY|;?K*=kr<m at 4lD&l>`}cDfMS*A<#z1GJ4hpNt_>HQ+`q=%
zj>E at JGKjEXEY#DM;B^m)k6frU*rK5OCxWW!9#2jvruV6OCAm}lXLeUzHgwY4ddX9&
zxEMD4&3&|jg&%x`mGs}tuXliZW+N3hIAOSVlYCMl`T=3qK;Tdl!k8<uP0ne&3dhP5
zq$$U5$zLI8oXjE-_9R at mw`NA?`T+Rc(BOjWExX+3E)#kvqTwO)EQzpB;vY40rHVV|
z3nb6l7NH52;lv;iL|5DIYbEjK)UGpIG6cnN;8DjWk#p#VzRB*iL+*7 at clo}kPEije
zxP(z~jA9^q{bvS29ZlA!Km*(~UvqF4u&h^@-x`dqiCW>jmT<tWNQoSV)_Ax_784&4
zL>MYQkr{Bc6sN8tCD2-ao{G8QDpSW-l)~^PkH$z+{pYjf#I25WoVDOj30gSvT{P6T
zBov!r_tRI_YedtuoKz&~g4R0Jpv>0J4{ppAK6)pa_q{P=JAf}D8(Z}v$E!OcSRt2k
zAI)m|=+sMFc-IrRTOGJN$*ANEZvj*Nq?#y4kE(f(Uktm6Y=-08u8Z5uBLb$#dH%kY
z7_0wh2sc*)kN-_)F;BPS-%x3Wt+g)le%#RnqtmJ1FkjiA+9Y!;xrVi6;Hl2DM)^no
z6~sx5UC<Rtv<o%9Ja)>)r*(x3J8Ww=j-(RZUGI;wT+sY`OA{%!%HE}=N!)PWIFky8
z;O~J!3gQTN<YbPRt4_Y-u^B~>LOe_j7hB>#=wLs at v;q}XOA$#``~6sdqOM{Akf`yt
z0utx at O6IQV9*;RnlUld??TtJ3J`K<C|J876-&I1zY$fmF3*5>OkvAv<)@n&n at bgrp
z&p!8CKh%LwYV*N94Ar;x?-K`gU*G}LZ~P$v2zxPK+TGNiB!#(s+UcWE-V4QUUS~YK
zh^lQ+w_gN&b~7}Zy+H=^Aq|CH(nyhRK>bxQh*!B6!m!wEbuR1Nkrp%Bpf+vv>6a}2
zEZHb9*aUFPwQqd`v`BcA)9z#GO|`91vTTpHgz(?4s$+p4j+7nNFhzgYu21ANWvUCD
z^X$Y=9-2zX9qe%(Hfg9WkZxuNd at f)UoB9$c1nC9Rp5vgPZ&B*PZOHzHn6MERvCn_e
z*PK}$Z{|r&HaH6G%aYGRTT}Bk`?twemG-Au|N3;<<i?P?aLDZU*O6=>zM~>NG&_Gt
z+i@?28jUynSnLUHXIIZYZRn3WlQTptw7eH*K)BJ5-|Elmu%Cu?u&Jlxn{6GspApcO
zZYA9XOlD{}<aF3B#MoaLREX!O7t~cy!#^>)*pZXfli2Yppf7{E?9|B+Ov+x*9XBmr
z=+1*^(~^49v)|d8x~p5Rh2Zn!>$@xl?v&&&cBwjJp^ZiHb>J+W`^Vd0<T%EGb<tpp
z%@UlVHKhHW#nwg>@AFo1aIc0ktNt<6WD!p+n_(Ol6j%yEc#0}>nwdTwg3TgpxMvk8
z=B?eqa$%DSq at 2Rj){KCF9vy*IkjqiB+Zxp`{Z9;{ksR1 at FG`xrd&<~p$*CLx<8+HU
zt)Gx2xM^IX*ky>><i?`0R$Z(N5eMG7yQbs4>8c5oy8B8yry=N=v#in_#JG0{e;~zj
zAd~?YuSaCw73U242Tjnr>Xx6qvBx<!9Tj>-w@`u&8sd^cib43lAq&=GS}S(Pqb~OH
zXkUtD_XjEi`o}paE=cc`HB<{!M*k$-XBve&IpXZkc%bPjGxn!qR20Z at 0S@|=&b`0@
z*@t^qk*V@|_I>EE0K*OB0ri+W&IC#P0I|rQz$h;r?{r0AEcc{tlMURCdwfAD$_;$;
zR&j*&4ZfK50<<`#EmH=BmR4uUvFAR$;>~JY6pEd6R~Li*D-`b$>jnW+(*>gOS#!q9
zw=tTI?02tnIm;&-x?PQ5Y;)=2uL5qEd=9=AWmcE~2q7YkV*B^x3f%l(8!G3kEmq{p
z0L?x|0fNu<hj5!dp5O*~*Mz%S=<)31g!DvhFr3=~1Y^5l>2=BmuRBo0O_`VR-gyTg
zs%&iMKait7h7b;_L^bMKuLr-}5z->#LfW2JLsg`=@+>DtjzD)BzyC(hegMvODazuQ
zoQtQdTAJo&dUF__=C|<m3M~cORebR!K9Deo+n}aF4SbUYOF_T<#kF$2uKMi|5n%*v
z4bew%Vk|~uea!jEKVDl0=Md1-1&Ay&tIhL8U%T--;-gk0No9F|v?S>?gMs~P4;N at t
zSgK~H^L?fY!q^yAZ^qtkTtBQ0qRan{&#p<1^Ucugt_p&w7>HEpA2wq}JlRI$FD8zK
zzu0v(hqgJ)^%||Y$6?BGQW1@;D-^(%<U&?BT=XqvAaSoOO&~%=d{P>ABrom}V^W`J
zKhW_VLc3+PaXQ$9ukY`LAkxz<6wfI!JZtbNo4)Wl>|~M3UFQ_+Q0=O$AN9|CpaVjz
z4cNB6t_VysNwsVRhwPGUE~a&5MG-RH+k7j?FdR(SlhbFssD23&c~iA(l=Iy^9=HSM
zIbjBlHE&TO=t;?V?4P%;Xp5xH&5ntlkTN)Jq}4?GW>(65AtN8-B&UL;pKify!oWDs
zw4g?>vs$RHhL(dp8G|uzi_ia*7C>tqVv8b))m;bUvnQ34zPu*ZH+`DJY3FY^x_Y4+
zpN~Ayg$<$u|G28f+8$PE#2Vr1gfMtW?m`gt-yZ2G(f!kGC*?ejXPmR-Oh;Rt*23{?
zAW$lj#XkEx5Nf>?TV*kKd?W^ggy-BNQVBLmDLAgzm*}voSs)%J)~{vbl@?eIRP71{
z7l$Ec8VCZhd|O8TMDvkP1|ehQ_KlA4k{PYVmqN7+YHSGi{~gfq3!U)-*j_4K8a`Cz
zAP2CJhJgqr=A;}rodw7`DIgk~y=-kLx{Al_CL$1LgVycUt}jwwDQo(Um~N4&8Rqrv
zSBI`x>nCE}=X;=V<tE5UY2?@+pg6mXGd$<4PKJo+B at pAlci>XxK_X2i5CN)p#C+5X
z!_N}Rg=!?H%xq{Wpe~CS(O@%~z5 at XdufbE+tB$B&OwHl^j{&G~%h085)MoY4{|H1R
z;D|L$W}+tGY82yPmNLudJ-FQuTyOcS1wW0|xY9`QDVuhS<8rM+d2{q>WuI_3XsPdw
zy0r7299uUBJZ~>OuLx`- at SRQH>knabhb?L=u_Q%@vqX|#7Ag5F1tf+SBr%ELOHBFI
zBuVNx6s{e`+Rddv$kQkDrxSlECZzwrUrE(=NkeD|IW2ir4QO7Y at p$rVKqs+vU~5pH
z@=H2Qf-*vooX>d=gznAcJBJk|&v^*|M!d7nRdg7NWW_oW0=B&mANCI0WLy|pu;?A8
z7;(CLIk=ma&qCfXfyRo`d0mc-K+fM$yYmjDW}Wl*!BU*ln`8`QeIfACT2^*hHIgeg
z+qy;mq<-?Gy-NUn((g2h_;cmxeSKcg((1n{!c?mmW)$3jgk8K64M>MxreAdUgSlye
z^U&k){$5N+emv|QpfZ~2JcG_Ht$f`I0n`Z%JH<b>Ea+9 at l?8na&5O&3D37$?$UM~P
z*k6k36^0|uFv)9$VFj}o(~LbD>M-{^cV$#gtrMPkU665#_03X&=$p!)3K7xxidv9r
zI{Wf}WJ~jEIcBqME=qKG5MW|oxyp|hIEV$GpXLL-z(?<Hfa)s3$MlyuIh at cdG^K>m
zSgB?3;aIKBISf2<@}?yGQ||Xa<}t;^jv{nb`;s|gc_^!r at B^CWVu(J47B|S(;%$p%
zL4y?QErTgL-cad;!3k at +O;R7N;xTlnEt^GFPid%yjfDIn%cn)Y<nHXli!Znf97$<?
zVPgawh16MWT`}$NWoOJ&-A1XRw%cA%F&ZT2XJO|SHUGYv>^|k;O|2XHI)yl(<s}9A
z(s<qSe2?-xhf?<njn-MBd~DM*{ekiD;}Qmai_Qi5Wt}e{h7oqTWqd+_0@*%x2%Ka$
z5^Rr(!R`#qoHymCEdOqH&RD=*LJaHT?MLoo4j+QYRpzz8a9`TVJ{A5J-@>p?CjPoj
zi+@%>S|Q?V54(;l$@V)`;FNQXMyEd|E2_&ZD3w$lT6+|UQ{3mW3h51TqxYsk8V_24
z&^Ww!@bRKcQy9eBLr^z^!Z{pccDd0$`uFmPi`*Q?3Ye(#R_0)DEL#C|glO=>GywYV
zu?iUX<4ukRUz59$IYrsM?*6K_TQ4$F?H%x+^Op~f3={qTiB9ET%zvLNBM~df{1^&I
zA+ZmRKUx&tf!C6urPRzSAk6miG~Bq%`HEa>js#pQ4mG#qnny$euN at oPhx7U+(BS?h
z`vjROViC{Tnb*v8rDZ^qf0Q1gl`8*2gBy?^v|`1JjchrrR29mI7&Or^F%PmiD at MT|
z?whF>EALdT_<6*pRZ%NtzmJO6LZ<kzT}+*RQPk!$M!67>A|Y-}&_4T3Ve=zZyn4YG
zfQ^<_l-K4*9<2*woNee};pkM+TK8wF;nDF|VUuz{Cl4Jb`S!7boFhsoN~2*<TLK~%
zr at zEDff4+dL>dIqCvpLP8V`|jStYTm=k)kxBL`NuvN(vs)a|5`=qn(U98!kwSW)yu
zKcqaC9_RGNy;R`1qlJfNEnrR3;t^CvE%%BOmG;L!Q23mQjpe*s5gIZ+g^&1pt&9V{
zE7Y`hKLt&fF~35VI<U9cr|^fo0F$bgoosMiki6A0v=Vo_26EGfdZk5K=q6>VFjDYJ
z<TNmRq3v{$jdKoGKg}-w#l!PHL{1tdI_+vCq2Pr!V>FqK`z+PKCzY9feEZTuVlQv)
zAhnxeNW{mCp3=&^_sy}|_6jtE5}y;#r!a;f3Pc~qx0}R1u+qHr9^E{V+x-F6m{Rbz
z<1imj1i3wCy~j{uPS1DP#{Nfn;MHoIG{H$@?4aPB!7f(J+&Uz>Q(*O3&^P=b(0Tpp
z8NJgZF%?KJ_CwAwk at 9Apq?od6Ye6G$k$ZI_9Mn*tl`I5ynlnwseHx~yXmcCl`=Elf
zGH6mQTpE_Ydk2|@Cvv?Hm^4N9Th;7ojNs<!MfhA}?q%7dg)uYw-oFC`UWu=0MFoIr
zbhdZy!(%}-pdi67cVB9l65KE&^?ph|bC9**u^!`_D?`k|1_~%D-+H?3QH2=AWJVjB
z$G)0fcZcL6Mf%$yn*y;G>94xJC#Q%U`cQ9Pi_n>)vqqO0lI0BJe37eeD-tS${}W1w
zVhM>6cc&XEE-l~ee|j8x+IYsga%^kub%=_&0oSXf$J^o!g2=XJnj=Z^s6*ePv9}5@
zZ-A1_4TPP`qo`G_{yM==f`!VZ*e*Lvyl-gi2LvcllM9H}Q_39Na>@y+1r`x)|CeTi
zySdkhQM;wC%&~`<b~Eu+`jl0_IDF?y_EBef5E2cpj0e_&zMers%CMM*>Kw?1%@Dy>
zbLmsxC=lf`@uYzgc&M_MMo3Eyq>kKCREAXDSY^)@$az*<i&Vl-+#stn9===s6&hyH
z2zu^LfV!5oy|f3LJDT|k>xkHkcmhnw;qL+-O3Wt-OA{y2EWccE9C<%pbii#AV0tC0
zT1N0*2EA&TGMue=ceQYg=xM<w-s0#BiR#Q{--lo-hZO(B5~GKQD-Geobo;>lki~%a
zG#{@RZ97@}nP{=6Z4HFjdG7a3&v<6A7-B2#Qz3Y8<zGB^<DDD7xI!bbKz;|pMKllH
zKhxFHt_A1MC1i8K@#g0+^qwmk_4e*dFZ(Mja+iPF*YmC-2&paEq^xnCN at Cyh5+rxl
zNy(a{tybl7i=xg$+|2M!9+```jMU6|aiY1h&^@TosA3!I4#`5}gQ^g1 at g7~sv^JeL
zDD=mm6npzZK|o#{io1wpvw8lxVO=rOcj!XG1QZja|J-D*`iI}_`!)2Swp?UQfQF%a
z%P_0`nPE`!&g2}k{4|&(w@*zKO^O+)VzV#i<Eyg=Vd>2w2j0#Jt($Kh!HD|ih6E?(
z*=3+=S2HlK!d2a3MdBwTM2hi#PGddZ=Q6D!a!PT4YPaTb6oxGd(;(94)^Z!k1he3Q
zwi+0zOUZ6>7u88rn2SmdIyXbm;eis-;xCce<WrP6xac1USZ>RxW<%_l*#nKaTnlt{
zS51JK23Mdxe;o0MxelI^`eNrdXvy7&EPCyl|A?iwNSn^=>fJa;)~_8SQCrR6=GJAG
zLa4QVq)(aTG)lJ*VJ2^pOWlGUsYY at H1qicid_QD)1b`%b3f|_#*ipmxDg?o6Ekdb6
zRm>ryf6eWFs*d&o>>LqgeLxs@#2E{f7I<c(rTh?6*0|Rkvp}Z4lA__{IX9`?JRMSe
zP{m at 8oKsU_g`Skpc_X3SMo)xiU_8qIA`q7=KKMqBu<!a0@&I!*RyTEp6b~O;TYB0n
zltPH5MtPcNC1R-q->8oXFmoCS`Hq0}bH6}_k;hO`M-K2MD?ktU>@H;&n)N<C>xC$A
zFi at 5=rU=hwN5Q0DDyUz2|7FYqW^%PsC&^#`9FwztMXaDX0C_wS9>7-9KAn(+aKzpj
zewYhxBCO~L9zty=&pryx|A$KQkBF=6&@lHnqF!$$_9RS5Yx5!5mLdj*<hI#T>mXO+
z_;W-&op)LD`KPLs8XR4Vyh^hg?|Ui#QVxVC4YMo~9H_T~_Mjl!KJ`isFJ at Dj1%S^~
zuWReC`nG7LI=^$40{bnUx&XYBMcWAU$@J|Z!---LoyrF at bV|eaexbz>bzxCD*;RO=
zjW5U^8(_B?`${Ymk@=ikb}@WlyH);2vlp3F<H`lX69Y*l!`n+Z{2dV@{ySaz4e77C
zsW#pU`1JY|E?@b+=|%3g6&(BHEu8z28cyy_5tUy`J(q%edny+Du{DAJR)20&^*C?)
z3+*h_)!lpDNB%>s^&L31obQ at b!|JIw9I?uu?e`kbj{`VXU~sx;n+_-*YvSl(<`PMw
ztihJrIXWHR2Li4f%U&eyDmCqp=G!KM<fi{D{O+JkdFY~pOJa!)BIty$iFZr1Fu*?9
zWE}iUgv3Kl9^&<%5EKGDJT7KZ)3^>#OGdXFP2p=L_a%&uUvT4 at +B4FMopr$kM$cPk
zc|LF}5!_mjG83SHNZ>VYAPXytiRuHJ(u1kXBJ|f{@<GV3h^L&A4%OvI$)Yth^0QcB
z2v%sO2Q1p+RKrhuSoB{aPe2I_LcQ)zliSm`I&embD|C_5=Y4=NF?!HtH at 73nO&Gl?
z at a?>C3$C`2Rp7OcZO+tA1O?(Dr;*7?U5_aX^L_AgMYDlQ!XmE_R!<@P7VLE;uzHiK
rDpRctLHz$PcIvYdl1i;^l`$`L|2jGj74JCTBU!FxLzx5tFF{(RP1td5

literal 137632
zc-oAXV{9%Au&ry`wr$(CZEM%IZM?N at +qS!F?AmsFzT_n5-%ak5$*jrD at 5x#$Oe`!+
z+)P|7OsxNvF^sUBl4>+kG}7;X0R4v;D+%&{0tWQI00RO2 at BaTAFd&fsdI1m!HV{za
zf75>o{C`K_|7-s*lzCz9mInZpBNDX1%=Q~HnDMNiU}EM}dCK_(6c&`8nf3FX^RV?e
zpCCGrcM3Gz50t79>+XF`#o(&N6dP3os8!*48BB`{zBI{|N|h?}S$~&v(;eP$i9IfE
z);eu4rA$BZ>;pX$Fbk>aN}9-{562rc|9F<s{}vIRGVPKjO2aeQ5t_|fz&E*q4|Zg2
z<Z)2s_Z+Ebe)Mh^G`D at UQV&@(7bW#i>6_T7i_;RX3z!xoXsmkg{x#E1JxynA-qC+C
zb6}pbW&|#EFBoRb&GQPdh|;bDXi5x?3Gv|cN3wxG;9DeXx;l(u at S{^XMZq_P6yFfR
z{56d6?*9x3K7zEFtG;=T8D`2kEaXV{`SQ}-PBccUWrUc?dub|W_~`YpaUH+UOZ1g}
zQm7?ndN$OR;o)?G2hs~+)Jw^}3OdWZw$OSURMqp%Azuq;Bz1!5kpgo4g~>v-_75)P
z_Xl-qPZJHcURvgGm`ScsA^3A}j-3D13E0XD=WA5H_!)4`H`ux}nKg!O*o#QF=%IQ4
zyH-vekUV7wm{dzzw|WS`M7*nc=5Xm=&^PVsQVTr-g}Mu}pd0)3G0%I=sxv{WelF#G
z(akjNBSGD<EekcZB17;Tp37x!ZHVX!Y1IllSnt)M_ac#vXpj`%5mXYQfbAv{*UF=c
zq<3?Bka6(Gt--uIeEh4w!q+uW+3h{~WAe9en8y{GcC_Rl?QAB<sf45>P6YDIoe&DJ
zGAO;vctBRPf>vJH!<4>OQW*_lBAuu%=h--L$Y^rv9$n$A+E%`Y#%#!Wj5|*^_UJYw
zKY&Z8#p=n#9La}#mL*S_ZB<rFjJ#1C*PP0+bS?|op!!`z*rd`XypyTj&KM=rtv%a<
zDh}>9ah<82q$1_F;dpi3M$NriFeeUHSJH99 at T-z#Kf{$5zP()_lj}t7i1%EmqJwiy
zc5;ZooYD%TGzr9i`l99Yl&oZE;`qdS=N~zx63NuJ(Gfd3Qk0?ipS`g$GJF#dz|3LY
z!=&U|UShSdf7bLr{<aW@#kcUasq96;eI*n$WQxk&a^M9GGgJ=$RVEi)q4Bue2Wi`m
zfENWRrd;;8<d4`y5c)Dyjbu%9iRWQpyx<k6!8Y1Kowyio#i~_MxP(G>LD|P)AqsiB
zDnTCiEQiRWWPlzFrkL)?%<?cn-^AnmvoK(&yq3~aogaWw=EJkNbV~s(y9!e<u77xL
zgE;f>#BKqdhq3gDRGN=u)6*D<s+Cy!hKCz86BM5r6*%fknTH>Z8M3*n$90;@_>a#s
zt-ZLsopJkmh}cGLvjt*Z{(!z3+<o1p6Y^0(OXnFCe0ron3LW>Ncf{RbYFp>uv*Fs;
zAZZ$9x^;QfsRB$&PL*bcb0Jy>&6DZDcb-F8{{UI8(s1f9vz?TD;X}MJT>dFO#daI}
zCu0AaD#Fvrc5JmgQMp<)`l$4i<r at RY_TMmRm!s<rjy{%bK+&t88FHob8{?USbvPTV
zy)O)s-bTQpN1t6Q2ctR|Uo&njLN}iA&I2y_0us60>Z>b|-&K%$3%1Ciptw{p#4)CM
z5y4UbYm%HA$HkIM8?4{YLtCDFkSH>bFJ*{ln1~nChHT>iiUblO5#B92UjS$Q_hgk8
z^e3V_4;|iDAJQdv^u#!RBAW)}_lFEpeNESKCZm$g>9rhKL`W|*m%G7ZCWyyC at 2Nj+
zslcODbhlLfhK-Hf)_M7=q5;bN8uotjMpZH<2~ZEgXm91es!UvHuq{+kF5)F%a{ZM`
zTYna5Lh&q)A%^#C2+)cUsMQd-Qu-y^uLw=<rEUo4U2Ub4a9?!eoyOB~wS#Pn&GF?j
zMY+Q&tb>N3A$y0NB~vx&+Cvjc)FHEX(6${P{Il>i4f`p0MvkH;PkG#B?}62?yF(p0
zH)Ww&MTDaI6i@)LgT6If<u2uVp$U|u|4z_Yk7bg8-vpeE!fgA4yO*8+NL$*+i_Ktz
zYnme50(s<W(P<~fthRqC?Pa)?eT5?-ALTe||9evU`yFG}#Rc>qQqm7iVP-7>GgAIw
zU;69(1_L$@8389Ay>)8y5+RB6?9`1g)wnx$7t_a|-#1I-&mXSbpw&s5MVME#e*r;e
z82e-Gp*V~L?HL4qYZd#Q at ED0l-!#=p;E9B`C;GVI1}o7cq)ZK4HNdr4g}I)g#s(fz
z_xmO+Lt~(+LIzOf)RUxaH?_7tPd`#;zto?~*&LR at F_E977qs@H2hL#GR^DcF%xr6i
zMu`uKO+id3&(slzdsffecS%C+Oen>RKfQ`8DFahJq%rvVhvKN1#G`9lY!hAvaq1$L
zr2YQcrxN(-e4wG#{z}tIw!Uo_+rPFzrx|u9`0Cd46BN+R|0Eia#%oz}`!bjq9xBAX
z at hfa|UgGL#jS!_ at 7dLT`#NSy;U-}<m$TDmqRWs8=<2vyn>>EGyR$P(liE&y(*P~@2
za-oE%CmP=o6^O`eeNFil2*7y{cRoK<NSrVs{hNu&wTqP=?6$<EVjrvGy+|D0J4AAG
z$7 at p{;w;B1W1aumw|0#*2}DuS$e70T*`5EQm3ofv1AB~40TlG9UjQ6P20<I7c}kxx
zN4&`3Aj<q}3B?+nu5pO<xx}iN0+i4<d+|<(Ir7j%pqZ|2fnnLO8oWRZ7>pt{=N)pA
z_CHGZpbib1Q-8!Y9xGuzOe*SGppZ+yoFlm(m0NpH`at46Tqw$`A8J0?J3lYG-A&dj
zRntwb`g^fQ*@HMbnJUnlsjn6dbobc at L$v)<eo&-}jM<M=<8e~HbC|4#yVchlTMUiE
zDn;opECpWpQ}1LV{!I at 6f?VUex<?-I{CI26*+ at jH76fxhgp`r2Mn$0#R1Z768dK at v
zlA at FHTUua_(&1pfOS$9>&`tKeTKf58oCcgN%ImFOr{CqoiWRTVeyGPcZ=3fo3cvl=
zOk(Tp>niRq`iB)aHI-cJBI*Q!ERpQ=UBkkj`AwY)mV##B`I)seOt{o8l6?oXLfs%A
zz2DEC&V13I`EsHyAypJPo^HxH#Gj^o&Dh);pR6la!^S>BiBh(r##=oqqIqrY<3u{I
ztlcqOp63DYC#!}-H)eg~*H)IIQhhL7?P-vS{Say49#7u4eQ~ruWVp<CxPHJfU0yqB
zwB9Rqbq^usaJG2J<NJLb9cJ;0G9iB_VQ+@<_TWRhW`yHITK80$zq}omUUC$|FbYv6
zPzS%L?()0LED0->ZGe+$fzOAmRHF^k`2h4UFnc)$i}hsg^zHvdaHr=Y7Cn5KFHl)E
z1tA^AEh at C%fAO?Ux{iX(23i&b)f>|<_@@1W%`AwyR_IsuEXM_~+Imr?<W?^y^l5O*
zF;!=sE8`<uX__Dvkf4<;=e|;G*BQ(UwJkw|B3zjtw~oN0+_;4D9pR1CoKUH_Wj+EL
zv{`!ik6vC0K*9>rVR(W{O`h5Z$?(gbsw4iG_C^qY<M)%@>2tQ`%Ia;|Cg0za7%~~Y
z{*fEdAI3MWjZw$N;L+UwT?YhD;@nXdhVVno+w2&ZZA{D^@gO3q)I-XRr^PM<8H!=I
z7ngVuHvbT!t)l^jL)|Qb_p1qd)6_U+wn<}gs8KTnME0FLPr%O7i0IFE5_utR8ot-2
z{TUlE>~J at c&G~~w9OSJdmT+Gh0l87Qotq(|<W1~R%K6%WU82i60aBbI^W&159VMtO
z+S!($tt%kCk<Jm;n3kek+A{o$L-On*>M(Uag2pJratA$9djy(I!gijM-8s1~>E5!o
z#^GldQw<HBu~VKwF3T at c_1e+|7Tmwq>!vOya+IYn#^1*NL$q{JiIqnx7_}tZ7n$+L
z`-SG+t;zYi0zE#!j>P?FP(+SUVN}=}jBuIv_n>-$_Mma58z(kRM}}3BjE;kgJGs3L
zwJEy$AvI7b0&TH#D;ogWbF(4ahb#)kfz-Z7=*-ZH>`<y9oOaR<uLUndOalZRy{yiK
zKA{2K(H&Ko77|UKZUmhba#k{L)kcxZMFJSznzOaHZxHVz>buwN{lpND=vI`QyRpk#
z7xfd4>}VUdx18~^z6Is3JU75(DHFmE<sHZq8Ga}tI;T^UiSdS!{;<Yj(eVo!@~aEc
zM8UkDUtN<RpKJL<m)s2H&7#YhGs8h7oH<uO(_X5$i%cjc#W8;ax_urtMFJRXpy?TP
zR>@l0AEcVkCv7_&6AI5c+PoiICYI~N<+~dDv|mdt*KX)6%%K}}nJCn42l0!DBK#1h
zot5CiMc4j0DgKNH;S0$Mtyr(e-WCMhR#_iuuPDF~ZC-xf*LkFZXw#i2gmatsowpdb
z>zR-ikjc+WEp@;LRpSg-pe%4d<n38t(dUOeMaerqHNuCYY$g2F2PR4@&LvXP$U at FU
z0q;-1M-thD7cd0T&C_tbdA;PG$ifps;Egq3m^Ne$PwZ?A`ekYO39Sm^r%<$3U5nc8
z>kGPLe^mLh?z*EA*4gaSdQx$ClbtHW0pX3=YC2;?W-h1|_)-bt=K41H2XTYPloJ&*
zwQrq(39T1Jrl#{dYJ{J6G`dC0J-iTvum^1{qiNU;riM at 2nmRLxtj&sSFP(u+3%q#Q
zKT}`fwYOzc|0$;(2MZ*g at y2HFX7aE$F8iG~OC>0efr}j*@E8BSOcb#4 at kFRSv0$O0
ziffP!DxUk+e#+%O1~!NB*wHh4NOjYW85t%Iv3$q2iMAH5V`s-(g<TWY+BuR7$5FFE
zjO|m73t)3n6g^mn8D7<PAQ}DKk>)oh-ipfiMfOwE;~i2QA at 19l6|jVN#XCl5%f?H3
zJ4*Aw!!l&5IN2Bb?DCJ*e<Al8cB-`qw;g!m<Iov0NE@#(#yQ%gcde-~_Oi6b&hv7U
zJ?{j at zD#-Yx(e(-iG-4*M|cw<M%5JFsYs;{K(Cu1RchXsCK^IXWyp7&H-V$iYOWga
z at u-5iKl|Z6G$CrOSF~wn(_ZVJNpcpgEsGnktk;{LFH#?7^*5dEvG_+SS&6i#%j0xh
zomX!vxP*mmevChaVbeN)xJaSb50j|!&q*i-7TzYAm at hC=OttJk`|!9b$M?b5pspq%
z`0!z#hGX+Oqn6}BaCSK!h(1t2Ca;rsZ3K7v6_?W+nQLrlz^u`hASVS5|5R(dDy=!V
zgpwyklbE~K&G?lXiKPvC*Yy!SM$xRWgNFmoj-*KJ^E%oIR<80(wem~E=aG8^su*%k
zKV)(D?mHNE6eoEQxvj$HxKfAOuCxv9>YOU6M?|E~I9f_%n%9(;`C3f#THYBsLRD+b
zkqm$q(P2_)C*7zZo8-0KSa6~ia2b&=qOIux5!BSk5cTO!MKEK;RfCE{x|TY3|Jl>2
z#D($3n#z0 at WOr29VDt=6rBZ1vSd at HOfY}MXu_85!-2jo(o>X+uBzkF0Qdd<J^?1H2
zA>#eW<F&4c_r;Q;<X?7p`%UaSxxT3F`S9_>12f!L{wdGCxiy&|H_=xB9++Jsc`-)n
zHMd}DYmQ2ztH_dx`)W3)B}Cs~FtjC$ePYMO0Kp=sp_>hYI=ptUMaK;s*FLE&OvIT#
zKXB07<9)s*?~dkDq=0P$I^8i+U=XkGol{du^v5{{p^ffJifPKgMEjblt at fs84tqIC
zIODi-Y2R<IEg(Bej~HjfF#7h(o-r<2Uf%@ZC6aYG&Ez#<8CetTVwCOJ1wyw#fzC5%
z9T_R|zAwjUO1@~(#!;LO9wl+5v`pts%2i_s!V+C;i`k2;2s^+Km)jU%O}_&}wJ(j|
zbu3$CS-Z=27R#JUz=OqG_sk^f8o7?1(~s&xeKU-c7DInCCh8M1c#)4mc;A=&JKYv>
zkVDg)t;oVIwf&bW*@~Dl&mvLjg?7eYTKs~MD#T9#FbCuvq0+44q(GqDgXdJl|Mf;h
z(f0zl`xIQ9BNJ;wM&VL}LVbxO7qXij)Sm-G9XeKjfJ>}N*sT(AIRCa>ku7D5=Z#wG
z)<UDeO*=+FA<Nt0;bH*6!EEonv<jkhV`3hrx9@<&x{(u-l60ci%ZpvgLix8MTXtta
zu8$doPh@=7Y+Raa>PwkJ)51bIF%|z_(I7GD|Gngza;36O##g?UmGAIDij;!#yc*MT
zj0md|fH52zw5P8LEwWfV4d9ra#fuWp at 5>+n@;ZPX^TiKw$DLjIUOi$BK?EA63)cac
zY{M^=ut|lfNQhUws6t{|>3>$reDs6iHPynv=8ld}ArnL1Fw-FkPD*sY*m=dmeeteE
z49YrLAn6m9k9qx~^T<Ia7>r5&(d&7}0I?Hq>sMpCjScL<VVCf^3u0!^HN`dL$Q1=!
zB{HA6j at ShR!zwSq!8;}k2w(z(ZC4N(JxZy_y30SY@%veFo`~f{#;t0HXDtz<8m=hJ
zyHJHYAKx}UjQ1!-*zS1jgzk5T+lQ;>r?KKl|N8G27<Ey|x>XB)6;v{clDQXdb+QYW
z*UQ^-=?~D9du^vjNAekT9EsVKNf^W`n2~)og5{8L_I~)RDbCx+JBD{4>k`;oT39No
zTnBSCF_Li;Z<-vG_am>m$@ZS6u|RwTW2 at NGJ#{1#T}r3ao+~Zlw)b>{G&PH1s!vPO
zTV4C0Kr;}K|1&05O!C16zoPaO2fK~L4EFSe0hZUFMigylnn|@OIWl2!4a=4@=4s_i
z(w{Mav^W!Xi*-Nyx7|w?cf^LMnGN&(w(O*K{Z7pHRuXaixIZ_HKO9Yb9vNd_a=m2l
z`Gfj(j-%m<@ud^7(|7H;De<mQ>{OHnNBqp^c#O!<jOYSkT}WRQc2$Z#L2Nf_N8HF#
zIp+AbnVf6($jvIhfh*^<2`iV=hoBk2TCfK;VFT>xYQQ%5rV6>Qdrkq`@jmdx?$z6D
zL^n|K$ScQ+V9LU6Fn-6$0bPR^Zp)P+%TQqC^n8a#ZK`JpA+4j7AdXT==m-2Nn+gUF
zTa{QUlyjx_9YXT0KOQMhj})}OC-r#nE+wBc-|lJR(5LwA7%!Jip6$p<&=TuZstA%Q
zC6_9#?Dc+_Fr~w{r=Ej6<tAVrv)L*#^hZ7ZElJp;oN9~`p)*F3_jc?7auf+<_LfA_
z$q1LclXEmP)>Y>)G86eNYf2z;S6{1q&BK8PmzQx64}P4jf_Kt&eTti!1W;8E4X**n
zFBmF}>_i}%ktFUJrcC&{&ov>lkag7$se5^u&?^P6xC=p;Z)4wQJSy<FWmL~y5rg5$
zFv_h7w|Z?-Zl%sGdkP||c%R`vj8&U&OO#gPiz~YnP7rA#&v5O<YLK*x`4M;T6VUFi
z?6YNB%leffP!)dH041BZL9u;5X!}5G9JWnfAP>w(KR`{c3BT8<Rl&~+YD#8(Mu^!K
z3T+Bog}w=(p9!@OrDqj#hhAEB8S7{rec&hX%~AU^F$h#26 at _-Z9`0>VMlMG|_KkG=
zq7Q+#u9s|^07wj1xMprG1K%gN3GJ=%xbGQYv>BE}-F>1PhYR^TZ7s?>RzU&;hQqYR
z1g=$h at XhSVQvf|(#VldX!_!B|(ksYQ&UnzVXg1s=MX(bKWX6&j>JHvBQGa#(>*qQs
z?Uq5m<B=gqxPZB(WPU%B&myz9*mjm%6MxB#gX$wcwnZT;+O+#=zOP}3==`_dZGfk#
zefW>I&{cF^A>lWP<3ZzW>kn^Mok2<P8JkE|Y#_*o461_b3HijMT00!E$WtpLuZ%<Q
zLkGE=Lpt!1KFdy%s%>qBE*k-{^h1`$4C*JLw<vJbue?%>8HxtOqdiv&o6Cp<@jr5v
zrzuoCu$3PEsbf>HI{SxLES5gvx{QkZwsi4l-A)$0X&Q|;vCR<KaR=7qoW!Ruoj at vL
zrNqJy+2}Fy at AAY7*BX|EtY>_yJEL9vOc3;pNEw1}$98@$8q|FY_@=vs#c#MwPv4_m
z>Um<um+coSe}=)2pR0d8j%OCl at kZDy_<;>wAa6K#`bY!H&r)au0caFfe(NCINeNo5
z&SUE#O=!^HBH47hmuUZ*k`Mp{ri%rVTODsAY%uhB`c=^R_ekW<%7^p&p|cF9$y)I2
zl-;l3sFUOVZ6YsDsmYPLaqkqfR1rIwNblnzj#J%YpATVjz!Dhm(Y`}xgxg_`w*p{y
zSKk1Zuza5G;&}Y;<$%Fi+=zCeZIzg*5784IX1f%*+Uj?R=<Cx9gw1fjneBr_nsL{5
zMP at ZkTeMdoG;BE1(O=;%>y<{1Yy+s$@_ySD#>bHa(Cgq2P~IqWgr1Z%1Frk~0r0<$
zt*W63pSO&ASCxM;b=c);@VnS__UG>&JxFCSI_gJiJ#7zDzO`oq^;YF<+La6(S|fq(
zDY){_mW=5B#2%lb_zgp)wHsv!WWIMop=ZLu_x+?`W`*X&2m51Ay84!p0!vjKO#P0g
z5A$u;k+1xGsLf`EdIAd<#d0dJ;D19$q;!!bb8TKxxf7ToldHKOo>nVTd(NeEmGt}Y
z-g!?YAMQB#o$XuX`Iw;Zv<8J(Lqv>Ko>yD79grW7iscD)efvuQqcc+U!g&FN_~h=~
zk9)cjBMeM<uvya}P4Fb<0bXOH%*Hw)fnaO!)ID0E)<g)7!3$D4nmcsLCpWD=ILcG|
zwbu-jG?vt=rLVX!@A}`=8mTRBlZb)V`4{hrCa#%aB)BtPeK_p9)W|ct!*FBO#CGHn
z7ySBPJ@)9DwCXA|-%+2?brup*x9 at 9kYCFb})1Wn2*1H+M{++(US;pE=F=uB>vwzj7
z@#txcctm|mnN=+cuIG6f>1 at P;{AGG#f5a5#WINhsfpaXO5KYrY&(*yXkp-f^A{6e`
zC;x!~BdW~^2a_>DokLC at 9GsQ+eERGcabC}w05op2+|6FlBNrRH<a0yoCWhQP8-e3`
zDr<_bkqY1G;&MO{`+>{cUQw9KFtvLFH%NaboEO*Q9O!TJfmzGC-?B<-8^nBYQPfmx
znNA;m-5zO(Xgc<r%Lp$fXm_kf=X>mqr+LopMAM$xWe_&un>$M4_49Xl?JGq!#0lsk
z$k80jS>>52X)yQ)IE4{^3`6&pHZPl`IVq%u1k9=*K}_42v#@8>B!Ql=78Ro1$NfPy
zgU((ItQP^f863~-uHA|pHfOHBJOtv1G8if~<zpkQ!>|-ELF4d^8Ze-FDR7LSJIo_2
z?&A?$yMd-biGxAXXt7FBl;3`&2}kMCd~n!4_6>3h*M--HuK<tvcwK|@j*h=Xgf?BU
zx{ihJG|+R%hmWDL^JA0l7&3XoL?rPHS9+6LgJ~-BZ(+)h-{A~(=rcW5#(d#V|3z7D
zFi)8w$be=Wc=X124BPNYHbPFlT-WhG;G9sx!9p6ORvyP<GH`Yxatia*JHD}yVwNJB
z)->b*!^Q>3{HxMw;JWBs&-+5h<LbF at ryW=GoFu|IA3chJUXRz0V^E@?Yy3c?=>IY%
zC%Zf^^{)vTyhRq)TbwEv8WP*tLmw)o_YxBf5Vhu)oD*sD(JYo>nwjsQj9o0RZ%Jgx
zU%6S0)jzF2RIB*hHzq39YaLjqcn^wV{uT&D0Zs_9OR`K`H8^91CSEW9D9- at fjDvqY
z^-x7pqrZDKtrI}35nunZVtfAMc$>VaU92bHPDNgE@(Fat*bGTC2P8&?Y>-W_95A)c
zG at LprWOwvG5@s&P83h&Gp?!8-hqV&*^_Mpbtz)A<TnK1C4dKd+#Su#wr;Nl8YPF<{
z$2Z9|7cBxBdMOaiWu$R?GC_CX=+5b*ibhHNLI=_r^sve%{^lHT`SS|FSc`Ok3y?+C
z6I$AlVqyQN&wx&UxVrM})cbX>)Q)MZsjrIJm(M=DVaS61iup<pSD!+O)8(_9J8$nG
z%p$pm9`A8;RY>NaE+kgf1&9b%YvLx2I&-7gk{r$`Nn!N$!c+L^1*;ObL$0#WuwjcR
zJ`Va$Qu%fW7Pr`Wr@?hJZ(EMApvZ)G=6T!~y>XeCb~;w3a6N}?5<K#?<fLc+X$^X&
zwVIJqf8 at 1&MyiD at 4OW8MY9?QaxbnmcF!gw9Klb8cpSWGAU=+%QWy at Rav##C`R1mLk
zDFdSi4QL;E9Q+XY78~U749b*V++LN`ZS{w_iXd6AqzM_Ua}k*(Uk6}A-`@*1jERMM
z;vzH-YS#B5L8jWvrLB<N3V%!Wgo!PMy~-(~Nz0pJW>(+fyZ*La4D=MDr^`bpW1V9E
zHYV_LW_?sUu$kTzlG#|)B5)KDA7>+=1LHlYHU=XZFlb~r6 at RX%Qh*tM2Bdl4QnIQK
zTlpRg;&r}?+<o)|owiu!;@{*hWKT!`d7pHiy)-h^wIi?QTs=fyq)iK~bw{#cqo`vX
zW-R#Oa>$BwiGIe?e#t>yduIO^bblAp`8?7jmko&+E^j`q^yrxu7Fa!P6G6M4T&G<s
z#6b+ucv?3#@jpp>c(*rMQSX=>Yx7fjPFG2gn-ft1b}_3v%coNdnXS&q<{{0q=S19I
ztOQC92etiso!f9XWHnqQ!1fSCt5NDjCpAX6@%S@=0e5zRw=gwAshm7s&5XThpY5to
zJ8pPO>vO<*cE<)D^cjFu*M22oO;<;mZjufUtR3m>g%hlwPpySwfS*r&)&J%G4c9NZ
z-d;~KC78_e6>p?uSs(Hj!l|lr^kQKXO)LW`{u!I9ntl01xgTqYm%DNpO8z<|&Ap(l
z0Va{ROYm!p$z1hcmteRuPlAcliuvq;9<SdF*1Ecf9;1X44`U_{W1vPfg}`5kJ~3Y|
zq#mc0P_4>Dt7y!K%hu?(C-%DV^t7=H*Nz=x{(drFRaxfDGz=Cx-LT8vcp;zxx%$g2
z;Ee^B$To?q_`Yr{1vr#2$+}y)<mWchyoy*h+DB-RPg1#-CU7+3Q`P8W!m=a-G+EQ)
zvpG6sGlwtAivazD+WzcAdK6~#irM(CW%+wbN1}|y5f*M$v`|rFlj!<Ye*n)F_oX3Q
zXUf;c`9}v*%zei=M;9W=0w@|qcZ?g4dWm#m(eNsMqRQNSUJ~~i0~8QD56}H7sVi-E
z9q$K~o2lU!9`lMxK at SPG-6xO>Z&TT#MAqV$#T$#5^BHg`72+3e$_153id_ii52)ck
z_QpS0vSOegqM0B at jr>lftc>i=l+ohQSfmkh3dSQB&kabuS{T5{x%1*^%zG>|9+bAF
z;)Z4QWj#h at 4Rsk{{@##&<^J#x0>sC0iNae?Za?!I&u@?gx#sttlQ3@$&jcG!<~!Pv
zdQ<&4UZ4IgIMNG2xH6*3hMEP%#^Er<(x6iVh6xqZejmaDf!efSespKBHTy<OyCi?c
zhLd%R1rxrC<s@#}ChvQ{Vn2H>GVeLxm&DFk7~yvXfICtY&$%*379F0NDSgMLeU?Yi
z3q~jUE(&zhx>I8gio4Ng*zh(}x~&bj!5dIz$wXl@(CUDCC&1a6)FELq#J0?y{J`g)
z&Z-<C9js_S<~nO*Vztclaaj!q77W_YRKs`Kw7R!0(iTllrSTtR$pR6MRb)X!cIC9A
zWVEAPho-Z5N+0NfrR^EW;8&IMR7Wu}ZrjhF8pE-KqN;}X{%C#=VOzd7)24bZ!Act{
z`l(vSa4v&hCrAzik?cb5;MaH~u8YitCCulBf at oZUx&#7D0D}S|dto$wJbda&#yU0(
z)T{$+6^4UKe`|<va at 2Xl3MWQ8@vnT2ywf?`7YH#9QXJ?pCSQ(A3;<F~>97!wJ?9qr
zO{A<F#iCue_ru5sj~n9FVcUBZ506OE3M-|5$Z_k~k}HKpMG4EeO5k;!W9uetQb7W;
zROMysWz6R9OVjQ2ghyb$<=`UY^OoTqa3I7r-)w^y3G}mxS`}4Y&F%zh!K94oe9%ok
zw$M;n*$~aDD%6T#x6KW(AN_167xtY=w2ycmzZLw at 0UXZWjIE!`b42<3v}VyI;CSO$
zm<I}ezTp<K8BlkP5QjI0V=EfvyA-sHJgoHCH49?ApZ at u8M4BZkadhY28Xq#!oX4-*
z!3tdMsAuHr{7#IRbKorTPn~+@(M?bUGNDBD(zp5qNVfU!HAF5(O^ULL4|%k(#y#(T
z_mO1Erz?07ismp{%GfhK*SQvB#o`=x+#9LE0 at 8=K>V8jhW4J4^!LTh+7h3~H)%XKn
z2 at 44x<Eg1q%mUp=9JPU4_(B+!s?17h3duoq at nnx3I5^R_eB~4KIv{o6h^HY>+gteJ
zb-QwR1L%vas(WvyZ8aK3uPtLm29piS)@pk&^H0;GDpQ9ET2Y_LCcplg)wm+^TA>l=
z3qOB|PhClF&^k89kY-AIbyX;5lD?ET+wIp7UT^ybfw9u`8KRF#ebMwW9!r_X3pId%
zK8OJqNkt8wX2n7V{Ozx?m?h{~z9-*eNaMJM=hNcVXwReujz;EzQ7|JLB^S9Glgygg
zUEi=`OA4|imz6w`#43uMj!>aZB8<I_kO(ayxnO6l-y!aq>0S9mwb})R4k!oFja^Y1
z!~K8QY4ySbt=jCND>yHu(z6z3=~WJH*iIXNuF`p0->UEpjDaNBK;}@PSJP?e!ENCa
z^Jj?UZMtYK;Q%e2N4lWn1_Rk)9GB=X7$`dQfggcR#7y%<H%4d+C~qehK;{)k<l{uG
zj%bK1M<a#p+264qS;6vjG#@w5fSSnmpOv7E9-R768iM+E?*6GEmxwM7RodFA(m}dI
zU<z1B>LmLJ+~5_7!-J9A3(<>nItH$rfnQ#MmS%{MWIUKqL_T~fDzotuj&Ntiu`ew>
zP)tc=j471pqqohcja2FU at dATqx2;TAxi}(6VE-zxc}mtb0I5>JF9l>A3kPOlV at A@z
zd%e4YTUw1>+t$c3G&$FiK(B5`3Jl?&`bK=CIy=VChyI)b8~G~mfm$;RQI0}I2;`vP
z2-=qXc-{+Ck{6F<i_||;pUW1dK#F*f)05$@{w9@?efo{rzX!n8M$(`2bB$S{5ASdb
z(C7e%05}_?E4n1K4h)e9pqZ&zUvv>`8$a4mk&Br28Cg?n0e_nXI{8QUz$_3b%wlva
zsD(tU=_Qqk$r$;??6A6zgznFnO at EpFW0moPa4?{B^O?SYC=eYcrgpGT)j*E(sjw~r
zMNwx)6_&^xfzu+&yeL}8YPA}Z$cz at _j$5=Y;aB1%noN0wkHSVdT$+(w?=y?*W|lCa
z>DGZ>?@f+Nzhd(;9kMjx3Ph^rTe%IqIP1X$LS+n(g6GTEP9yW&12bM{W1QMWp>?Iz
znY-G`x9f<pgyX$No%WDQX{akMA*^sZ0)F9AT(;zAeCVMmY>)$ancW1WU^kT=iw&M`
zK$1V$?~~MJBxm2}cZjx)5=Uqam8^mVKXtdIU4_gy7q(;xehjj;()V~Qu<}wzs*ABi
z04xlu9&K1a at e~JVLU^GTzO40mT(9i*;6BG3M>7VR{3x^HT(MU`a|C3^FNLFG00C0`
zinq0Z?eFo+tpyyU-oN8c*Yh?Kugi?COT_y>2^a+yxG+LL2|u+>pG at ZZt?<CC<<FOj
z%fDLaj{_l-Ph1??(iL;t9jM`<dN>4#o8J_}mMZN^?FP1#l5bW%&uMMVMEl_x(-?>B
z9Puv)a|~}kwG=i(O`l6Ll=Io2PTF#=66Y}TRq at H2!a#th{mL2It&kyZGrX0~0A$H7
z^qfjRxyJFqC&OkqOv4iDe>}ZQa=UcylZT6rsM6IrnHXduLA$p8Sfe=Kp6o=vSM+#M
zg}SUCC7~7#L?JQz%+cFQ#KsF$+)R(;{F0{>_ at Y|)m!9d`bz~OcNy*2X9!|w>ai!{q
zZF_rJ8jQ)4(s3`c?O^75cZZ{IKlH|VFq%ulDFQX?ulwRZ2K1q1Uge0+KNu+1>57la
zrcb)42cDTqu;hQ1-*;5Yx)&w&S&OHkXD}KJ1X(p97NP5B(|t$rGD?jL+Iu?Yx{^J(
zfg5|eAnbR<_Y`~O8G%*GAJ+^=Oxi+BlMaz*2ztoQFEK;nCsRgXmpxHDTzYHfQ0N(`
z!DaFKZ*oI14h{3*JYX3;L|TSTBhl3vHCdzK-^wn7klf_>cC=3$bqC6Tdo|<aY5Y(+
z$z=9*P}~ORc4vrKc3)o!naKe3QxpS^*~40aLOvk}$r1#rbNmW_66y?q<_?!^;GdPV
zVtKBX;}onfKesygm?_06V&#4~fA5^z)<l{+AIq;Ff5O>fWK3fOZKW at q6D8*-NstJq
zd|6t$NAyS!PQX}M%U-u=%TI|-CdmVzjDY=-_^I^bVo97vp8l{MQ+>>;LQxw$L?C9i
z9ZfQ_80#EW<FZZMQ%RlVEWb<Vv4`6VOgExh10~Eq-B*@Ju+f7bPq?5%RJF~HP5(1c
zH<g4~fr!ml<19AYJx|cY!0z`mUIJ3H at kY%yTcQ=?7qpg0B)9A?^u&R`a8(N0;jJQK
zh0F`vtGjv%W{J;TO%3ZNU|-lK0nDv<J6Z8woQiKx5C~q^^9R$=uy4-zg{NDBSu*SA
z2scEk1P2?V&9WVR@*M*75a5r6gKuBVr<l#tiL&bFumSS0ozm)oSZ4X})K30YHo;9y
z9icTGj>&8;Q$}ztO at QZW{&u(uN~B5n)<&Nr81<_?odA3u)PVV>MP`l8E=7{C|J;#i
zk6z!~HU>U=bSItWwF)=u-0v=uCLHJ}IqT%zJ30{vG}Q-}EJS|PHP;ZnBZXA%M2Q}P
z{VytLkZxACuG+>8BH$lH5c3 at Z@@z68w^BA#UZR8onvpwQKwiUC@<%HLoK9nO?$^N?
zfprm#HFE*&ilW+dE<Kqg0)Zar?`(CjzG3jDZ>og;lUra}q|?NhKMV0vGy>MV*T^se
zuOWZah%f)U>nKMVC<@A at VaMM3=rLbRy)5!~R-nD8hSJZ2LXFvxlaIo(i(eE0gDVpQ
zf$qF>?~Ck^!Au~6Y3zp`7Bs;IH4WL~m*eU9ojV~=$KSh!4+$L8UdjhYn~HCRW8~Ab
z%?&Dc`iUsGiE^kuIj-;P_pgVc`Z41kEqK^3hTA-g)Mi7_`aO^p%)4Dt8}^dK)1I>e
z^^|H<DTBCNR6xmULLN77L|`|$P#)D>2hr4n-|@`Ru9Dqo#8e0*UIu=X{5_#X_cZvv
zJQ&T2`fbCmn>Rd*aiztFZ=-MyAl9GJBJ=F)c1zQ&4^H=ukc@}pE4St9Q{x_A#@tga
z$trWaHlP0&6%-Iq7)bHbXq2Q!a``8d<BPq=b?0&u(J=Ttw}?-d`|98Ir`8|r<2TYA
z4c-vRhsM-~>-SnXe#%N5b(bHpwYnQ+-Uxwq&55;`k2eTb8^zsaC}U?V!>_ipi@^*(
zXQNt0xU!oO<2u{rm2g}<uB6)6X;&q}xZo)a<>VwlrFJi_K;%0(8cBG<6993R|5;t~
z8czhfU|%W#UJIA{-%#`li<&Ql{ejT>CF at dxEAKbmuS!u#95uq!Vin{dNrI-qfLhD)
z>Jys#NjI0aQ^7-0gIX|GVO6?tXpV2sC4E9z)Hf;`dqRY^Z1~=+WDL=CPE;`-aK<@M
zkClAW0F9oA)rS}VfVYw at shT|h470Jpf|BYDo)0kq%FcJaEApO@(-gVSfNr~vkMV#V
z#mn^fXz$9P&_w(wSpMvU#okE*B4wjVibh<7<lNsqAq+W1sSmD|#+EZ&T`#C7Iq!kc
zr8qU8iipS0zal-_ at F&V1vWotQC1y5#K4N~Sa$OfCP-(oVI(x9N{c-f=k#nM?v%hd3
zO at 3Fg>w1qFK6X-=>}LX~?F`!vJ<izE-m&=eMiwXCua~EvC_FeQNIehjG6zhU1o446
zJ47WMks;^K?=_-F<35Yr-FX3nlb)OVaSo815DZifLT097T%#J-BT8OJK34Doj%ZnY
zDT=qR;b=WP`zL(tF_1qhOl7&afup||-am6IwZ2WnRLVn$`UA=WWJGc>wm><FiA2Z8
z0DTLEzu-#uoLTbYPRvk;HxQ+|@^%LWg#n5;H5uAYl2|rF1~g at w;mHwm4fd|WGah9u
zc%#1Sd4W8px%}@zL;0|?A!pVwgH+Yc)k*ckq{IqC{wBRw4zl`r_fb6OrhEd%0Ruc*
z3?Yy_=|tb4GwfQu)4u^G88{kM_XGqC7G`>RLm78crg!4uU^7dyhBnS43YftT>re<(
zb}g#;ejT(fA~hCE7sCL%p(j>upb5zK-?XdTRThN|)^DEj;x1OGu;Ik0E;M1LqaX5b
zij|<S#OR*7#Mw at O6kc*Cq2n#<aP4i}@B8l8Fvr}12lMG)p48#(s|l;7f!_n{78CvO
zIuw-- at B)@-W}e;5xJQtVkckT=BpwAAalYUVz2;N8lqEe0p2LpdY|CO^y6!%vbUG^0
zL=exrcd{vNPQv*$8*v7inX**0{jE}_ at wG-1(z|)4FdVwQq4APJW#@~gb=&PD+_YqJ
zgA=y*uB*kp$}0BaKZ|uuo)*Gf4>gZSJl!yf4dF!w8oCsfAZOqU at Y8{d5afEvi};j*
z*E&d594kR59QgDcC8Q6l_3kxJK5icJ>waM5mkNjAgAKK6XsCF-6%(-P0q4TGast{9
z;)FOa6LGTk9KzdCLphOsGg}ZxdoIlp3I?~-5}=yM<4v`llGoSa^s25MoFqJ;d^UF5
zGvD|^m*?}YI(gm^JqV4a7p4G9Ny at cmII&c)v7F<7_Bw5oW9^QWGu4(*e}#k?bmFXa
zmL&gu_Lhv_iT1p#zVlkb`$fTN(@}VG3OSHEf{{j&=rH6D8IGhwS3lr<aTpW)s-ust
zV36+x1FGbLUxzRrHVi#L+lr{0TG5(=@vHr=6$I9iWa^IyLc$J12xPYtnZ^4sL3&IF
zn9IjS)-m=>%dA%w#K#T^;MeJ0Jx;e)MLTtJ<T4wr;=z&i&!p?SRP6}L$_!cK#oCkW
zo$fOQEmnMJT-7|>K$|Z5P;SJY)Z+sNW`wjrfct_;b&L5Lm^}MA4R-PU94d)79vQ0P
zPkgDN8J%q#zcp?64YMnrV6C3Qz>%42ZjON=-$sK9#zhX_5I at N!ej+^JyLM4ved-ue
zgm;cpSyjmh(0gHI=Mp7lM(ibF%|qCFR7^<Bv}Vb=A!nt3ZCyo>MUByOjqPS at AdUtn
z=UDcT4Io44{@Nz#agVQ;O-ISf4F2~a(1Eh+;2l!IVM{C}aef1gbcGGX<T?+yN7u{*
z3drGwe%}p$)c9;wx?x?wT@(vD at Syzdtf7sHGRD8SJ_7pseNq2aHbW#z5&0~!v_L#I
zExHt{ekF-b7gBfAzre97`jmXec!CDn#$ZQvyzP&5YBxV>T3`jAJHULKi94UCo68{)
zVkAnn@^!(lI4V@)SRz+FbIiOAEVt3sU{fdsla+ZRXk9$_uA>gSnYz87Aff;o3nYm}
zh9rY}L|5P@$@WB7k8VOGAFOoTTQgP_G6hOpXIS*a`hv5EjOb7>z~w#ANh9V#m%d!;
zfGLNoH{<=`%ZNEX)VYFsOM=;PnB+y)GYFF>aEn|Kdc_La2^j6gX&U(bf31j<0lRDw
z@#~E0M$Ma!E%!yi!IjWjZn!_fxaM!#v%jO>LrV3o*}%8(U|m2;*h6v`!`>_ynGqlu
z3KG(ryBG{xbQQ4W^D-w_ZTEW- at I_T<tmmC*<b#JYJQN$Z3~^t-M!r>(cw0EK4fBo}
z=9`MIYYS4rqup)%X|DY)lqS2?BkD--mJ%j7+{9(I$sQ!Y8&`C<y1&TQcEWt<LN7$t
zDbGJv$7P~CxDfUsBvr{g{ZOzwM-8Z|+^<DhrQYI#Eg5(3^HsUKUN%|ZMehR6IU0uw
zp}8%3yRZ!!6f`yjxRxLH{~969gKud|bt((oPKsoaWSg70W9mt=5}0iKHKONX1ZhEp
zTlYUs>T29J+~U8|de`3_9JuW^Ub>fv!?o~e7y6q-pHtdG*WA|ppu19XVsDDN;_H}b
z?I>Q<RrhV8#~IX*Jaumf_=+nu8iJ*zO8rX)bB($tI%80B_%AH|x9)~dF&C1lR>e11
zwrF879L!ykwaED??++3?gYF}zwaA2-*LpTtV+NX=^$q{x+OZ5O&TA6~yveNGvi9jy
zrm>YOL(d<chW<N=Qy%rsOnLR2cS88%`atInMr?-J<;j6gvMy)(LX<w*FX*X|eNz2L
z%-$?CM}Q6lQ7KLX5z5if at y9y*y$$^~%wc45O8)9R3IN9(NOksTe7h*LKq3DlvP>nx
zoq(qjzA0YJ^6J^ajYc*jm@=(;_QX;)L=($JR~Er!Ggg3~lQK4&%3I++lsaM#&iJtS
zc7o$L$8utqA>+ATb0Bv6I2&9bt2&5(!d6#)!Lc8ep)x*8Wu5MhWqcS!?!d_=wx{3E
zP!@^puo*G7#wOpN7Ra at U1f0fGuK&Juz5IuUhlBD22K~Sp5WxYof?x^kfeY<O{~Pvu
z5wC(r8Tam3cDx1l*Na|+a-ALrr~4a!=nc(|;4s}qR>4fDFKrq&cKt^WE}5>;w?wgX
zy9E1_{RFxHcf3uJHP-1(d!&Q9D4{UeM~eqjHjxFj6#b)-wGN3=EQA5lpch&3$XSX>
zYX+I$Zy9Wl at kFLD3NPvCk3-FKRzdVLB7H00w#`*>)YK~wD=<z|3{po8v*XZQR}73_
zVecrtt#XL`)b=%%nsWxm{gp+@(O(pc4jni%U=tUY3yC>vj;^EcGYPC at k54*nOhTPl
z6!^MtoHqH8E;)(}S?Nks7cU*yAQS+PO>$UJa`Ed?N7!hW3z^>j8J?c+*qOvv9<a{A
zH^pi#65KZ}*q*nvT!gfx+ESq|rvXJBuvifTx*CF}(d|O9+D>^TG!OJJ7&g4 at PgT$A
z0@{#RCQ>q*&A~n_xNBApDQP}DBt_c}5aWf-fXviy^lP+1ojTv4VQLS^<7#x(US$6}
z;2Ab^@a+{L)>n>48~R}mm;%f93s@=%?CpMGyr?bsT7z3$$d;20u(+8f6v-bwv4)I^
zBLahp*rNotY1_)P1$LX<{UzvA?>_5#+xwTtzSroFTkw|45ob at Cxgj4BD9Tbfs%XO=
zL}^*?*)!kzOe=neTWER0XrEgWa5|A%)J&@>2m^15`HY=%_(K0~d}M;>trQi521$B;
zVC at Vl!;KyC*<ync(IuMgP19Q`*bEp~i}_R}lr(E&jOEYQQt$L{P22LWkv3^?dklOB
zV?r9R9+<rS62C0RNQ8x0$Gq%BvXo}%JCIr#Bn^Fg3L|xEvPC6tfo5d{EHdu6$io<=
z at l=ns8CR?ZcQ{Ueb<Fz9qMQsVe^;O)Rrph&Ksi*xiL#}^{eZa;;a8Gn!DL691^nCq
z<*`|E*Mya0r6SPBh)^ATukgS&a{J1 at i~^{J(<o52CN($zgY5Z&7K}yT8{BPLjOiwS
zpi#(_r2mc0==h4KQ(Ab;B5w2z)23`d!6~n~xMmd;#EERHfIqn4D0_F3;F9`b`5fGK
z3(#fWLAXn?s-T3&ZTnw1ZUm`lZXI&#wANleuL+UPQi5^hvsBL7nGz$K5`A?I;OaYD
z_U-t5N{&MkV-hyoEA-Px&o~W6LX_fMiKoyb+B~R-plgAQ{rYsj7`dgL#F=8olV^#H
zP56$y27%tdqy<=rqw9kMZUzpwD}FB<tsh%VhjO(_vJ?OgQqW`iih&rv-oO^?8VS{C
zIm%gWC_^B<yl8*j_L<84EWwN^9VZPGA<>v5Blq;*E%R(g&3m||Jxo=z5S<3<8_7}9
z$!~;V+wHSnnFQM)i{cwK={8!^Ybj#~hXMdu0EL^<4fcsR(Iwcrw=yHBBJgUG^l=Nh
z;Eos7btPmtT;bNT^qawy_o7}Qp@`9$ZY{4m->>El&YKs0h%u86lfq02wI8Ek>!2Y*
zTz3QR_w6VKEH>k~21P_yPbt{gH|tRi8lMI=IuiCBF1lEV-A1SV(CUtu*MgZ6QGbBy
zPWnGD9_>)H%G))dKTQ5`2n>2hsErhJ2<B;osk#b~(D2wR6T$-2Z2bCT2Imf1stVO}
zKMEpHD!Y~<6r@=5-YM8Q+R3-K+LWCnvyMH at NeG;qOUpiHWwX?DZ1}ay!6l7au4~ya
z*|g8POBhQS-j4fMPcc8pxtOABTL`8RX72_>8^n at z_X)1VC)kl7r<H}XgK+|e{N{Jg
zgnvBCyr8}N4~`}VISn*SWco1~Ih at XEd8PF{^}k}~PGQI2Ltjp{iB>4#gN36%bEHS_
zo6_K0d<D3{6D05Gk=2jjGf}bwVpK=(!QN}f$yl0mLA=gCVeoz7b~aoU;OQ$w=!&B1
zuUIV<qVAp~t(Yp(A#S*spYIrfZ-{^=Me-*IST+LRIiwAVo;CJBWoiHJ4fu>~sdGzl
zspBz#q&88x^I4qKt6N6f=+-eMG^h-NTj|vyu-lsoqEx5ioJ`y3V+g547UVc at QzD`A
zyUlgWLTlq at b6kuxSzY9zCu59tRm*(mjd%wb?JlRGr70x|$oft|$P=vO{2K?4W0BcA
z8yhV%shG<8E2>D)R~_0(9#x}MI#a%SRhT>a(JS-d+qsaf3DjY<!HTCyle&35^tRQQ
z8|{^OB8)F~S!0$k*3Xm<djtP at KC*@Y)g>nd at n147^;J|64a>l%0E;AOxqgniI;hfo
z{92HE;+0PZu+?ylU=a+3ob`scSGzYKUGGD33x1HtjhoA<;1(<=C#~>s{RDf<<|>Z@
z%b8HW-TXLJwF2 at w4QqjYnno)+j0hQv7XN`0gK2fT8kE<zGM4e8Gu)_(v at h6#ybpYd
zi|l3*V!}#d$7I9ypFGHz-*6a^xr`?ue7tVEW17mIHg<>zWK<rS5W)bmOHo|8yepnK
zC2ro6wcFCVZ<JYxwIDVVu&-+{aUNYA;&d76-^ZGViz&PQE#+&9&fSf4DQyEn#k<o$
zc|77 at liXSow&`MjzX4}nX*O{aEmqH~|6)saMSOIgO at J8=zu^5B$j!a{@a?ps2oY4E
zq%JQb%Fq~BaqWK)gl2=2WV!qmV5}tVMgMN18j>%;DdDU+`E}<szgJ<4VyWhsu=L at C
zmqq)HFYw?^qAWYH>ij(}MYcI;GSSrFZVz{Kc%)cSxis_fhWfRS`V-1z5u%F at H^YlF
zGQC3&1c@~tJ2GCq>w*G9bT>#VJ>eSN3)POx^ukB}tCM=!q4lI;amuplnE~{L7i}0^
z^lUz)lmYLvy)BaRt>{JZP|m_4XmlgZFU1#>M%*lDO8IgDKqsw!csC*tHX$ryc at j<k
z<{wTQ9dpo^<aOk~Fzbbcy%V+^<tDj3Ypo8`$l3O|ev%0 at q%DmAqslyCfzEP$jx;vD
zCWW0eZVj$y`)g*kDp-A+3y7+Be3r487X2A~j|&uZPoP!m8}IZa?0qWgSVR`|SiIif
z;d^^=?3+`uv;WEk6s(SR!880T1xl*q*kr6-Oy5Ff^Rhi!b}C;|);;xh?!+?Qr7+|=
z$Afqx$B|!mfDXt`w83JPf1GM|6LE~(JsWFYnnp0#$o)aU4tk5z at azOCVhB41Y~6b1
zB4H0PQm*M@&2jS!o4y*%cKHYR-=0}1$oaH`Z>ts(CH4qEd9D$M?$=x<-&h+Ii^~IO
zn9!Ruj*OuOZPGk0TV1yENdQhpv3+*h=`j(7;`8^KG$0*y`i~Ju^85NE at KfHErw;Ci
ziXCf-0{0+<#~?Z|Wwa8}d!cUo%y{$?7DoRA|33i0=R at CszuZ*B(zF9K>@YGiB(08}
zTNYrFsvSahlGakj)UcqOj=IM5hZ${t$j{eXw)$R#F!+A1liXI^5^X;eLS~(U+!5L%
zTn9CkrxHx`Z$p`)V(~Y%TaIIE=;_tUl5}l(LpAUx_o at AT71}1cq8o9?w~7~<Hc$=h
zx`=93c_6B$n5e=(vAVW&94;V~tO*!UHJ?6oz9fp;iM~m7Z-Hq;)?J$d>=p&p0y$pi
z6G6a|6!ac%Hq#a3_=o32b;l(X?t{`T9nh!3pL>mo$ZDt=*338~4T&6wV#y!&@|QNZ
zX#pgJwUt85Qr{__JT$^;6TN;4UDhTdN>ip*iaE59HO!3K_dcqUv2FaSd#&_hIl3cC
zD_qoL)k!W{$1xkCzsS{em1HbPwH}x$DA<}r_fyj3KKTM5UF#_fkt&q82=Hn&1UGK`
zn+I5gy=p>_n1(w^2M=uF&{i|@lFn~n(zM;EF}v1wiqH!;LLF0xC`*BV7x#k9csyn&
zy)+ArG{V(my9EoE$eW({>!ic=n5H(5h!v8-xwq`YI_dCbc6~%+VcB at md`Kj-YKtw|
z8PVFu0c%Q5N;1+ks8p&)Vh9FTU}635#_e67F_4Y$ua`dlGWUH->83 at 62!?FS431*#
zrWf|NkmuHmUjaOvJkmM=cX+froco~tqTqNJ*K1W)W at 3|Dr9pAcK$B-~{{9Lz87!A9
zjE<JgB;<HcMeq~RGY{kLk$6qveJ5*M8N#<S@%r|E*VXF;0wykfQgOz)>)*Ry{6Y9+
zZvj0!x?_w{Ia?G00e;ro_Co*plcXLgh__2KNo%8~MR~-FtJbL3C^dg?HQG&d63yNb
zj9+khsm9V`#h>VFf%b_=@sm!h3$f)H@<ryb4)>;e5t@^lIPzGuO&69R7WZ(YrC|+%
zb9gI*LRX4kfDl^&2-WW at Bv}IE>JDBPXY8x3C1Wj=IPOMIotQj^A{o~IB+S0h?E(S)
z)q_?EqDp at Il&6H)$7$cW!U7jMb$G1Bc7RHcLe6RXLnp?Bm`@01+QukNL!jXQWkIwZ
zJ`X`_+Q2@;6DLNTv#8FoHwu2AfE7z$p*#Y_m!ASpcVNzdtSMb)@5YI7==NB;7VvBV
zcu>mvA^uZaeJ0eoF}RSy3#x2vx%vO>Q^>y1R}j&!pXN0NU`Jij2;)WW&J2~SO7jUl
zcqpLh&K|Iw0!qU-y-NWc(0G}pGJ at c(F4)KfY()L*p18=pDAXwGIzS!O0xP*`=_Z${
z0HN+YMzHL#)Km$@j-w7nt)&{I&y|xRp`dYrGUU*>>~-d-pwAfyM2UwV|F%TO2<!+~
z6shBRFojI85YYs|3vSvGCmrPX_tO#m`H!@y)Af)v@&`v})8OvPfX%d8@)RPv70~_I
zKO!oDZ-^1gN9^MDivOu!A#!iXiL)^sDBg-96X-S_`&275#2dQfi)MnODT2rjIEomq
zwk^u+cOT|O2x`)SBA|V>kZ`#*$@IFq8$MUIGvV7cVv)%!E+Fm;f&*bMRvOvP3(=;o
zQ2oO&a2q`wUh`L~vEY=DK-nxCA|ej=6gPKKr3ha~I<dh at n}mM~^nB8GtvfCN1tfS%
z8}VLV)yYntM;UI3WULW3c1oW#JA~?Nm#4A1q at lmeeeP(g%Q}9O$>4vCE?tJl6Gqiv
z)`!Xm5)M=|zi$}J@(QffGj+69j*E~WSg<#V+G?vN2n_C0F*TTiB9k?2^nd3XR~^Sl
zbFL9q)IjtisWTL`46fsT?$^6YsA$7>FEARdR%f_lIZu22$7i$*5pz_d at proM-p?n?
zj+~Og at L%I3ue>~#^4HW`KTCGzMq1Y>f0|_LXyqY`ro)SwGI=O4LJrnDMf?3>S=%s<
zWARE=Q^apa?l|Y!Y-ff?(uk&3vO|r2-0Ub3zsmycIAk7V+wIhmD#vRLek`VeaX>^d
z5*~cbAQZgILCP7nt~9{dc>+_t-T0-;kjQx5tZQz2?)7fRVe<knmw|<=aP15#G!8Ls
zD|7enxN$09Nt~F+BX{)czlAfvqHys?mpQrgQQRif6a9+&cP6B`5XBB{TO?Umf19H?
zUM$_ZuTflorg&}R6wS=BaNX$va_(z}1IceL!cRkZ1$xo<WhjH?>sfGFG1mp}8!C$)
z9^{)53tg}h2QgGcWJp>?qmLe$Z2l;+DFU9Fu)_w4p*O6CD%?S5J7JR|GPZIs7>gJn
zq3ac%_>$EvL{4H{#J%g@{>*^Xy-7CLX_Ew}dXc|7HQa(v)W3!6Y$1>UTMQ9;mUPJr
z1|i4|7`{Ar!WO7S?<T~Q$%D8oLs6~^>w8tPR4#qq<xJ2YvnFlS>z|w~c+zG>34JRf
z1_nUwhn(~PGKIqs8$rc*v>yt+dk;LWsO&|9cJ7xLb$#-RY9G-_rD+YbhbjY~q<cU8
zv at BQyH3)Ip(gT*oja9a9g0Gr}>ht;j(ZQ~yC6l9G6c)-aEET{?^Mz$F_a=}o+zb3~
z)5&?sxv;yaQbKqRd=m?d-L_gFsB0P-73nCbiWu0Mf!7htzh%Af)KR at zzu_A|c2Y5$
z9hsnul+H<Y#1Oi7iWowRowinRM7gI>Z5f^QY%yW`KAKNas0+_ak=vXc6u3#rAt)Le
zvf2!A^7y~8+$?>1gDi&eveJc;50k2(%F?V*T}z^rL1hBufhR`(>nS?wL*k*wR)E_s
z6J at 1JksFfDyTVoa6-;3WojhjF(uEnVv!b0;h9FZ%tzIjr5dfCrxv48g=H#}3uKS3H
z=$rb at U2-VZgzXLu`2fBimY5=VS8YtdzH(X!oP(}Q9Fmi@*A_jrZ~0|4;2TtFT5P~E
zUO-a`cIy^kn+%eu=!5mpo5J>+%^sVihyJK_?^1IO-I(AGP-bFp=dPrnWRv*lFlqTl
z=?!a->qa7Poo?n@){Y`g%QY8b at 4PyA-YHr`1QP283b at l#Z3Pb&NCDg%*e|$1$BUJg
zGCWcvmj^yBH^_wk76C&kP at PK_mMheKz~x%hHsfv#@2<KP)I&zANf}Q(zT_wtP<*vq
z at kKh?o5+-Rg2a6n8f-d7k<60eLq2r96Mx3X-%&YpuF(UGIu7oqF<MaaCUaIcM>O6y
z^HBI#B at g$9X&93xmPNO4(SUSDvN5<bV*%B7;hDF!Oo4U=e>@&%sqgg9<j_!5rb|RL
z=Vn~vN)Kt at l<rt2wERsG#CB1Z(+J2ZiIc5biG=_9OshFJf0>@RMW5+v$|o%ZRNJ7_
zK8>$RvQ~gk`1%XI10uR>3v3xft|EjqS4<Q~^9v<yElShHKTbPa=<G7cWdeQdCQENJ
zpmz^zeaJ~iuhSET%Q@!Ras+n{EY4{#Ccbxk6I+5%stQH7LNE|hF9SAlCdGcXOBIHE
z7^uT at HS{TQ-XYd^kk^=~5f<i03&c>-M?qv0fzmj=NFQtyr}#2fZx`$<_C(mWzu8h}
zu6gQE(Z7)wo(UT^5101CgjtL0Nj^M at AY2kWm<}v>nlMtin-FeI(yO1eU+`}<s>$Cl
z`0OuAIzlY1>osonvCxoYOazd1EFpXDk1_7B*CZ^rE=t(y)<$50HvE^)#r6#6#HR$H
z0F5d3!`Q?;qNxJ|ShnE%_Y)cL&%ofZ&`R`Q$=a8XD}>i`n_N~U4tb$DMX9-`4sdTo
z{)XS}x|>%FD3riAUSg&H$KBupXm!SPaw;4OX)GP{MZ!-D*Y at tIEpJg{<lYC5GbLa1
z)3YDm_BmV;M}><M1_pjae;h2<wxmH&qHndvAdsI8st#!^;(3#q;sYo%AGl_>4@~o+
zD*VRG(N`R9JOxW}W`7U|&hM4MXL*dNkyfBno`3o=Fo<;YRmu-9K0ZtJFZx-8GC0-S
zN<gozMiw{wPdIMyNDyMV$(K7Q(*Kc+KhidhPbucg+icaRQxV+kdigZ91+LP&8=RLw
z_IoS7rR;|0KSvhkP2Euxiv5%|XMvPvgeXl5t<w<|7pUyIZwPEQc2<ng_QkQ=C_LCY
zf>Db$wv*?e!$>ltO~YkMk#e<nOvLJo4jfZ5T?16_5TAr?@{~FkJbsut`k5x)s1mj4
z3E^Q|2T}aDLArz8ZhBucHb2RooB%SQ;bDuRj`H#if#QMQ^F4 at iy)T<5W=1{A7*8pb
zLtEX{<{0<j!S5`0S{nFx-x1Enw_45zru#quY^(rz94C4*8&)o`K}#d#x_YQWpOG8S
zo~+YNKQeu}uzq1~sT9i$UZS(M;dcXu{TN_2_3!yDyu$pWQsjDRpbooiL63%Z7i41I
zjEXKMxBEs~Kj}i#Q{wx&f>=QEfmv!L!k26`na(v$<%>GHw8wt!?BG0IRY_jMe<xKW
zfIXO*RBR5MLVpH1Nv-D~J!cpVC=c6!m=F{DmGZ$1ild)<`yRG2`CYNFrHJ5_P9#<z
z?a(J{x_CFEMlKp_L)dtRSHoHB=lXX}QLsz9pWrM_BbIY#(+^}RmHdPE8kJoa(K%{m
ziGw$b?>B^U3hq at m;VDp%NJ`jDci=%j3AZ*^+SsM?@mOo=nu-5&V<I=8*+in#(GIc>
zUNPckD1m97taAWeEsCdk7-s_jr+iVn3s=pdbWzMX;<aD>^J;TeLd@|kG&&D8Du7Rm
zzLsK0({IK}sVw9~@0R%9nr(V9<z>pk=FO7&z{n%n>Wy{-*%GhH=m9gxM{KM&OB!;#
zx7_7`E`q`Em)6idHKjH&Z<^uD{&_6Js%p&dPos0zT`o4?W?0b3OM2-Xr<k2*QHc}j
zt^<Sa*AY%qg>+EPQlQbT=Xb-{Z9}XnHm{}ro)q$0j3-=LNFp5rdRwBICwAMVsBRu4
zhd5xz*k|bgOZ`8R{MQNP at 66KC-HDYR1+H7AlJ|HZ3uO9<2MmMfetpGJD}y?9TQ?<g
z1BTY~>0>k)BN at h1{4Gix*4Px`UzD|}U?u0PbP&M#jnz1~!A%SlE0T(9W@!T(<LH9x
zBvJw3Y6=c_b(wwa@;)R-tC9g=0^*2CIoG`bnlI`(x&nf#p>bLt(ZjCdcSE-H^j{fs
zJK<PoYF`z&SVQKz$toV3GzTX*<;|9noHsP93uT*`>nn+V2M(=XcBU|X`V{362 at qlv
zL1dZ$$>RyiE3X2QaB5o}+w~934DtkwN~vkk`$n+_=jY<eIek))ZKLMZ36iIS*LsQg
zC4*cvwn%%wE3yVMUn{^L{QFHKmtQ+cztAV%Te+HEy!clpYkC#x_H!aS@`hCK`)vkZ
zH8 at lam#1bSB${G$uU5%78z2yrHV0c_=+WBfmRUJTr=@u2fHY5307uA@`4|Y_55|kY
z1WSuM>;_D6vE5_MSp+5~<jT<KW#iaLpV7`Ibl8}5uRKI}qXz55mj;T2K!f*4p8l5B
zz)O+!zpDXIDK^A;okAErP5e78+Kg+#z6?@qE%nusD@!{C7?IReJG%R5`@}#k{$-S<
zrf4ErU#yq|OX>Dsb;A+c_=@QZ4v*hHfTPb!w=rFx=V*ba!DANb^2z_`NJmm7ewyN2
znA%Ec=R&^xU%D@*j;6MaK!5i#Joz4WHh)3yctl5 at 8>c`}jX+fi26KlQqLzHpbpMW-
zbS?31J|=cI at o6Zplp~-JB_HM39b#7V%9(LY$HGNQqAbwcmmq01ucOgIbuFIirvsC=
zgG3b?IPnpViA^L0LCkOckf6%Wa<H8b%r3Fb&(GFk$&*|0yztpq1%u|vVNwQn#_nuF
zdHnQ}bEPU201Z#r<Ymoio7B at NWH(b9Cktygb8<tpqMd}GfWL!21opYSx3P&4hHfk<
zlIXv+ru?wEw798iSjAxDYbIlMq3LK&JQs?|@!Zrxu!9PNpzrLRDI|IOBEl(;lD!!t
zLXQzhYP3%8QwA at H1pBW+Zw=P(rKX%p9??46lu^-29}@!#Xh_HR>l0(vMGjzc{cED#
zm=AlknR6#YYp?qXr5wfxH&bd<A`ga2#|L%x&c!vC$*nT%agPN}l-jB#Fu48 at e;gC~
z=Fl2bkJ7jl>IWX+c>wgSU1oh at X2?#5F-vr#OdGVWg{m0TN!!qYS>@u5a=Qgm{imz4
z<BE=UdS1Wr&Ff7K{xNv)wrAMo3Pvp-=Zl8^elJRHxT^-P;cDhi^Fj>XU*W*#x<zJ(
z=dk91W^qbIOyf*0<|?M=g!Z$hIkN42@}^X9jFi(1HFNK{U-*6{=PlyMC#=%cLyK2;
zDAveowQd%VnB=c5Kk}n}bGHntg;M(>222%m{JltGIX{<0WgbRE*_`^^$8 at P%uN?22
z`pIu?LXHi@#oJna8hEC73NKak@~BfhAw8W`OB#$9SOn<%PwS`(vghzkDvs;?+Ya}j
z8;OE`I`|sWq at utZmBp+V3~6y!Ya4!38IYP)rV|^O$B7I0=cnH%8YGVM(!n_pB;UoZ
z8HF(xP7p1;)IciqB^N$qA<Nod4HTLTt4t at m)n7JCL@%|&-8gNX(Ai4<iW?S?;T=Hh
zX<DE08b+#A8Se!C at G*qhD|+4t>Vt<eP>adfdgn<jTqNxFFhNj3z?PMSpy$r6lVI{0
zLkaj;7MbOu>MOuuu*6EQP0Il*u4z at t@q;i5irS&7&*khdZOhJo0lHyx8Ap(g9=b5%
z!$nYQVklHHfcIn8Vs2CKtfRb~t`=h>VeDs$S)oE at _8QplOvVwzFg-{ZOdV)h;;SNN
zpY)cL;oa|xs)3)lH)E`z`&av2Vvhzkx`j~<xIP+XD%N<fA|GHwW#|i63hy|THI$BM
zt0-x~PQWI~R+4mT$+tC)RpGX4 at jg!j%o>~*N_d14bPndgiWmy;sR>~o)vb{X1oq9A
zvDD*_T7pca{Ui{9)e3AqwyjD<2c!B&+@&ce%y+TcT9E{uJq7L~q*w+)hHDOh&lcOG
zWG7^K?zzBp|7C|uDt`<Eq-N%U<|})0=^&8^6=90 at dM2FA{I6eUlu>RzEAZ%Dj#*`!
zMbmH3)=R3YT&S at 9D$IJ+ScY~5W=zKLTo<gpg`fySOE at fJvSLzNI0)ljCkg_lR8xfZ
ziP14J-ySY~vP?M>O|c2X0uSI$T>H2_nFc({JD<J{uM6bt#Z9 at Gdzw&(csvNQ<XJig
z&J*Jv{VJOa9zzqR^z<jaceH8F*{i08LmtBNr!AK5+<}dQuN?D719qJGc*|q6qH>eq
zjBm1mi7!enAa7`#s;yFM;>wCB!rz3 at O4H7^Y(0%<Kp5laq8Qa6)50Qz?9Xhtgvpp$
z6X2e|=>T{+MK(SPJd+KLr~rPKgH~<^GoK}=W{lveA|MSJvJP^zF8^MP#G`0~th|lR
z-t{OsxiC9*^4Us<ly*6;h_wNKM;J6*mEMh4qnG?-o_r5e=USp|?Z&yfL0Y)l*Cu6H
z5#rKg6j3)Xn~<n>sJ$<8p)V;zgLr at EKKA|DgI<t#i==0QJcx`?H2(RlLzoZ35p^*F
z+W|$b!O2ZOU|-y_rqICut561*(!K&iJ_bOSj*!%XGTD0i>d^LG*24xgt${q$AN}62
z7A5BB3I@}C6%Dx7pg^N^B2eMxmbAfM$_v`Ip8)Kb1~!;EUAKh%zBb^<R1QH!=WeC5
z_e&qW&8?NT8VA{ec~ecKS<|0b^9kzU&fk;#Uo=V7Bna48n8cYf7Y+XHLc^3nm;7_3
z#jr9nN!+tBWutd=Np6-RE^B0gU$D==V8?<X1I3l>@6%I2U}0Co^@3~PgVE>~%a&eC
zkwV?0ko^V*zco`tah{*7+?z_cf*|oNQY}LEu-+X#HZ@{Ccm at QJAbU|D2pf3D{7^5V
z`^Y?PZuKFAd2N#z7rUA`5j5n#b<`j|i5(%=OBZwm#@sZ9ID3YJT}DDKa4(%9iO&=f
zbA9jH{;J>!=iUmDqEAR#w^mDrZ- at -F6e3moK{ieqwd8c)yW+)Rx$9=q&TxV}T<_n(
z*59PEdkRQypssmDgWf&rxY{*Hp6xR{uUZtuRxLettm5^MG)-)!3cwJ--yF`_BKbnf
zD2^SA2=HvxAef(VqU;Dqxho9?e<644B~ZX8UnYvhy*VuO<%F#t%E|EX04ym|s9QKd
zx-y^w%$}?VkM>)d>f<f(t;3o1A_U!CWMuAm-Y;5kkey<9INrh>>EE=jR2QB5#b3Eq
zGv+KI1i&LP={Arf(-Z0h)awWhOsw}3s$@TPMdiM&2c71AABin-O7T0@(a?F}VNB0O
z-K_nBqu~~MX2HTPNe+_IJG{!eH~MgsLK}8kVBZEBY)u>x+9s~i9%@O>zNo{-3(COb
ztfBH8{~ZJ{!gef~wK5T!*T^{r-DyFHKz+C_Du8E0nzn7ewi4iHQ0Y~<CSYB1#{e+g
zl^Gji!)xaMU?|kz$fZ<G)GR{gOH%Q5WtB0a48l%C#=Wf_sBhv8I(#rjrikKF;6tf}
z>=ECsJ^p!2_YqMMosoVnEZ}%}gH9 at Kk*#@xnIk27s^XfL<^%5u9XvgdwWaW~fLqgM
z80oLL4f!$HcQ3DU?mVX0hPuCogirzL+d0ghR2*26 at I=Tjj;rf~lqZwV&gGxD<rjwf
zSM;%P9xdEB(HSJ0KMvRiMt9h(J4t~V*nyFOpJ(pJJ9z;kP;B#o<BJsDODme6TNNxr
zT|V at ozp@9F;4C2)%kD88{&F}6991=7_NqhEJnz=ijv|{KpkV~_vl+gc%X5KPVf$GZ
zp5Jv52VI8f_ykCDPjAMpK2-bKJ_iYdcaQNWz;HdPRG1oM-f&XaDm0r>+7bsI#@33P
zXMgNtPZSH#bKv9=o#gDutJcQmzoPTIuR!TlG{_2v(h;^p{X}V#=jQ|u5*b?iJ@|Ja
zo;6s9IWKBRHQlpTLn)9eqgagb6$lfu$5zM#i#f$<UH)kb$w3}%e|Mp6fGG$uyLTsx
z{$Qa);t<?dYOR|$Q{m(_BRAA{-0xImRN^0H2|Lz|VzF&LYiffZ>ID8icqRxrBldxv
zF}FC~QQ6vLiSv_NK*j|9)2 at 6<HcEGp`g at _1GW&0EqZ0eR^f<&db|@u?9m`p81(ac<
z+i=b%y0w0=tnTaxq)4i;LrXwSc!Z@?fCN4rW1C+*gqN5>xB;qK^64PnZUU1+mvY}s
z)<e*RSMl-H<dtp&wqCQJNM=LBP})ad)3L(CpLC&^`<nY%AHCCVnM_iK9J%W&I=`l}
zngyG16jfBTMerd%mtkPK{0~6Nk8|9<gh9X$6IvbnKDv!(Y=;x;GV6S$%BdinUo}3m
zj#gmT%Q=eCIY&OF`5;=2vp;DtOlcneYD8)}Gfbzv>_gf)P>WXlL5i3YH7;X==K<)W
zrvNUR{qP*D(I5S^(b-oC>G_Tub{$3e9PCvDxK4?~ka`NEBIr{cMbg~x%As_Ja9%0z
zgX$(728WxJ<}4y63Qgu49t3x&^eT-&-={@S^;SmFb?Z#9GA1gIROE{(Joz!BqQ$Hh
za81L~3#I*U9yhVf#pxwI`mZmU+IJKdeV(+AVk67Aw6tq30<bnhs?HS)7s(AfUyG|}
z*NQL*pxb+YJps_cZerP2H~t|p*%yhJ%d0y&t0GKgWp6u9(81<(jT5Vp`nM#NsYG=g
zR4hkAlL0ZjE`UnaUq}kgt2K<?!%r=%E}jT^F3CFlXEd;uCq;#oKHGZRjNFVvuni8K
ztsna($|>}PMGK!T#hQGOMaSFXkK!nOgz_M}a_}3;NFvh86>PlDIEi2soyo%v8B{<%
zzIzP!K~YxwOQ}xt?6h$9#xf43im*yP@!x8_cO&LXcVYgBt2Q~5|1?Z<N`#SAuP4Zk
ztKJlBpOO4cJ$9E6Bs=JUdOL%w!Fv_=ZMLPt3-M21$T9(s-^FkUSVm8n==TAw;bZL$
z{6udI#m(C<y|)@r`y-v1TLEX%gUOH_oPr2-JU#Ba)b<=bI0~ogyNJ`nzt7bn;L;+z
z)%6e>qYg_x&2jjmae3m>F^~kM9c`n at mhRNI>yVa<OAJT>$T0UeY$mtr`m?W7i-PE{
z7pa{E7$9`6dp1WE1Oao5K&VNQ#@U|mz*qUTS0WUqcp}BvHZ0N{T)QViTaMC$2YTCG
z9QOQ(TvphtG}fhMSm&0VqvzWuS1=xQ@=ZSvx5Wi2MgJWM3R6 at +sb9>mpcD?o<DbH{
z)!$0(JWPs#A^xkA!y~3Af#xwwx>0QGh;t}zE|WEe*1Q6g!L}mN>Zo+sO?w!fT*>{A
zIiB#ty25=LnY*OGg_)W^(0}a`9EqW56=;8Dy=Lto`}^z-{UxNyB7<WO$gqlbqeLo~
zd?dP at o0QoMj>pu@>!T5fOLEFVs6g5yYaHFliNi{TU^-={^W6r7&rFN0gc>>smb`SB
zK?1Til1Z$O`Gt4Krt_LDvRmnXNYlgjp039j+toIKh^M_?zS at 9K(!-K-!;b;a8ldOa
zz}C^<F*fpRR_S{O56o%ItpWTPGstlI?LE<**~|56Vg?ZSM}m&w?EGyjHo>2D&k_4(
zh9b)(PajZ;6dG<{4Nt!QBs?|oNaEXKMka?ew;gwX=*ulp+#fmUrcWOQUpNPiOb++2
zNgqPlr1fBC=2(VBt3;Kh549BIAcSVKC;b|R$jZ<uw;ynMvfv}jG~`2N?am4TvLDwe
z4SL=m;uIQIf1^$V4m(eA#canzDJS>~dmX(+NUi6fw&3dyW!m;Ws+^TzO7|dp1}UO6
z_0h=ryxC06_`Q~`IrM!#rmMdi$-IGB2K;CQpFq{onK2hz+R5aH0yOhIYep*T1EI#c
zGp|Q<77xd9U2H+Vbrh2!4aC#ydAW44+Zem;zqHag62bSAb<bqoJ5Q{1rS{ne9CC$z
z00pd_-xHazplamM+rK%5^WdgSFM}`(PQvC#zm1Mm`LV>TfI3N?u!ApC$h0UD!Ly!L
z2Q5Z6eKM>%+#)l4OmvA;+mA)NqBQziS8!5-?zYi9KCWpE7pVfZ<#6Zt{i<b*HcKxL
zG{Od|h;hPkt0!KYKqrWafZvM)P<!=4w5j7NWUcb>s{)@4`Sd`*-D5lU<Vf-QJ0?1G
zEdu&$DWLxgDRfU%@go8{b|+JWjk2 at _H*1##&ZVeTw}Np5Y~Yb?K*$e4_a4&<M-r+$
zA))$eQ80U at 5etu&X&@=&>h!K+fn{S!^Hg#7wp$pf1xg6t0e%#*ZmA8#fKoJ!;>oi&
z7siR<L&BTv)U=9UVQN at X3)lCG)Dssj7?p%e_8eB2WYAq+?Hp3cfv_{2_j|eK4tn3V
ze!Op74e+52p~GIY%D&z)<;ACzl<=TJqK3|1(iW_XnbOtE$M7k8!#7YH=_=Xg7VU9t
zB)W7!7+>@9|LzKFwje8FgwS&Y*$Ih!q1HnIE*Fkc9i$?Bbes570>uk>{xg}o2UaF$
zL-}g6h&e!6+?&2HlFBho2xfU#&!_hD at xkqWj9<Q3pB?}Et|P4#WSm^egP3ay+7lY@
zZ%SbH-_Lmi-SNCiOx01(F-*3gzo7SF)+X?yF%xG{bu^GK);(_0r`w*Q$Hfw!Pry}K
zuBcYOU~2G at kvPoe2wq?*g&t?-+w3SLPk_vVsqVp-bB*!p9bi^B%ILG>FIq}E5nIco
z+tk%N=ey>UC3tRrg_5<+_cRJ<68Be?#Gobbbv&&O8ib(3Uq?iv6Z&zF8vOyPQ6HYI
z;`>l9iX2NN{Bbt7fD~Q*;JX*(nR0q4 at mneHO9sXkH)dyoA;^I8607wV+!-SEVu}nW
zaO-A)$7dkQiMDs^EW!H_LfmW#svO2|C|2un5<vgni#ClnAxY2{r8xWjWran!mw~!3
z-)Qymbz!I%ime*#g6iC;d0|A682KD1cZb)c03|4(rS_6aV6YNh&V((H6L26VZ5NZy
zvyo;sD_q=7hpzi>r&z4n7J214SzM1fCK0{`|Gka27we^=)z7+O1T=`cq>|&W%+!Qi
zwmO{7>FP<nug0U4Eu5r~bQCUCu8%?F{p4{)Dzw5c*Ou2qAlv~OR$GHf_cEPGg6W6O
z!MSIsdTlJK%j)4p-UkdvhnN<g+kIggT$^moiIoai^lI(N at uWVU<;P-bz0IIca%%07
zp}NoqeTg^Hp^pwZ{eIB%n8P(6(iCFQwA`Bq?f%7RwyJFILxJ5Q>2V>@)gn<agCo=t
zKohdVYsy{|3U#KURXMCBFyUlaAD!*ySeA(27l8XD at hmyV0fFp9q!jl7Ot|9z?tGfP
zu{dEeNshHAyDu9RYWCKjG6IZsVdEK|a-nRI*(q at _)z=Kmf_tei`A*gSi~q=`JWW0<
zIP1nWLEonis`KWB)6jNOlTy6z9=M9hgh(V7-B;EB at Z5`AC0Lcna_CVYTVzgz?eAh+
z#cM>zFdT)_FB-SudR+S+y15#s4fM(Lu2m-`CbMRK_HCw}aJF0|eJ1CTAgOB<Q!IqO
zsoHrrO|H^R3osoHr9PlYWx&LRf+p)}!QL3r!(qu}rF!w`NW-!q;}WFeTQ|sAG^#+{
z5GAks?y{gGeUHwctyBb$F<q58iks;IN67>H=!)UZouuF3585nG6{ObR=661zX`Ttd
zYF+XaLE1Cc;sM6rNaPfilfso_v7hRe&~+JF8iuM;rr+uT;LtX%TeXx+ at hbns+gHL?
zzaG>dMNB0EviQUfT|HVcx76=}^dUXusal0C#8S5Y%=j|Ih>2|%I}BytCfnKxF2x1m
zC25u>@V1aaExm?7`nD5SGVD at 7W~2xypubIfPg0#<B<6$-EP1F2g~SRQv<%2ST+Wdm
zgkJ)#_6!Dw6%1wGwcMJ+9+Uj4eO3JhR><}R1)^{NVVPD1DP_Nm>X)E8T40Tbf>@4W
zuDDIYaX92z0w{*9D8YJG*F=zaCABvNc%SY3e%kS(?-A7IIzvhIb*AdHB5sebfr5N{
z#j<?B8fjE$n2N(X<FbgBr6sYlz*Hr49QhgONfe0+h&f6%*z;z=vsOP}kVjyh6MSfP
zp#f9J!%(7h$Z#dt22k<?>{Fq&R55dN;Akr;e>&r%M0YJcxeVu- at XzzCszfbJkx7#&
z8&}!>Aw#zh<!iK#E)06!Lhy;!1*XG at N$@iz;|ajsP)_0djo_+B!D6j^eBg7MM+Y5a
zx!(Kh*4btbbi&2NaU^D2wr16e=~`N)l}2i~@UpoHC`RkK(XarO-$mT)vCDLNn1m>?
zqg=dXzEq(q{Omlxz6`vKQzk6vMCs9mt9ilI4P1X|RyG?=VXhvfUglEkmqAlX$RBp3
zV?J{yN=Zz{p+tP9Znf4+S6kwd)6p~B_rU!GTfZ1%jr?JE_Fqf!_x6{00~WH at O2^D`
zJhEta9mO&?4_IChR`UJtQ)Os|Q9l at a`u+n^TPlW~2D$c&Ag<k1=}k|d-Z%VPkXo;&
zz-jJ6P<IF+-fi%Ra{m2jv;a32rv7w>E&RGaj--=ZifYwmv>1xOtscNs7}kVVgKphH
znFfi^`9Gj3K>tAWAnZig^xRJT)(H$wNV{iDLnyPE_BBWeIaN+J*;?(*Cpt}4xKhbp
zo)c-IDkGSQcwyHhS3#&Y+*fiE9{jL%-?b%zuXz$QQ=^LP^#tgXUX$^hP%-G_Jj8-a
zdoE4a6rnT|s~oZeGixUp#EzaKX~w)!usPoL$g~?^FPCA&l{t%t;~Sv4gep|P%=6Q(
zl;02OREXXCC9`Sx=vD`DkopvTkoNV_2SgsuCGD-$aVHQE97YYe8DMyls>^J at 5Pg1E
z&G>Z`Kugwvj`K{-^D;_>Od;>ARVAiAoe*s>2%a}nFC!ZyPTmVrT)~wB-GtUJm+}zw
z^59i1bUD9*<|BMF_&5HiFtnn#BpH@=+IgFTiLQBByzvNNM;Fh}_37;t_D%#5HZxN_
z;5Wpdew2$Vlobnk^oawG7bE0EsPnny25^c*?`<zPjx$-J3s70Bxr1h#A;8-NN{eAf
zIBFCPE!#n$0(S>U?0G{RHj}g77j2+tX+p^UEn$^6C_D+yNbQa-P}M3Z3_1PS+~k&)
zjm-}6F0HPB%X$t<Wcw$=ad9}=Qmcts^F1}(@ORE-B|+?jQ}ZkFVYW~hjA|fznO(<u
zxo4Hyo~?phGwBJc8`te-Y%yOoq|CeCY_Bq!D#{MU$#-1iazsD$1`J<5VcepBT$Pju
zhsU#}d*HZ(?iAQ+*_GzOpyIu8AF{B}d`1}-ej+SBx>Z90F+xTe(mE20ApLqps7(vJ
znk)<4k%+Zd9;JZeQKYbaol)>W`*ZPt^VS`%xoaWLQ*W2fh?Jow#0&uZTj-~E9vo!2
ztTw8jO`7iX0ouDlF0KZ5vxS`F7icQ9fa(9#Qd#e?EVA-VNqQ|(6YcUCK#*g5Q#gQP
zrHZ2}r%IQUUG+a<jKh?HO?+Iz(?(dhIvyeRAyhxpmT^O&bQk2B$P?-Ris61VJFLTL
zamqEs753!b;Gual!QX+&q7F|(VmSB5D8_f6G2cxjPn!e8ip+aC{d9Z+GhNlbGk13Y
zBg$>>6Nz%s8R)g)$$6Efa at u^_Z}6V2oBD4vU?2qM%fFR40E62UYEnQn3EFUrOH_AZ
zj7tQ+1#2VNt(^mvlYEAo=rNJ0Rq`ysWktWE;$3I2Y^_FeFJDl#1-oVq-N<Mx&a at Fc
zQbd>&Vl*NFd%W&g%X?@~852`;J>^2b2qL>gW#2kSg^=V^Xr&RSancff2sp$Q4q$Y%
zVuVe;>>9LWHMBQM(EU>`_F`To52mJBytwPHs5;N%<G(AirQpBnR$wVkL~&%97Vr$C
z=-WknqN<M8-iQ)==28)@fA*j~riAq`m{_-8PMII>t+8Aqj;KJ6n=(R>d$<W)jbvje
z%%|u1Xr-}^zc!{5KAbuPIE_!4KLyv~XH9tn3i(zvq5c_h)!;ZLlh5>(#ceF9bC49|
zFsYVZ5GT%joY^frUf;}5{($Mx!ho(v5{wgBv*NNc{+!5d19&8)wo)j8jw(oC=3~GD
zY;QPaJ(uyTRpn3G)ygV~qUSP*b{1=@-lZ at Ys}EGIaCha?y>CQ+_x%jhR?zZP;bAjE
z%RnFgxKk!3Xih0|1WfB<Hbx}Lmqt=IT_58C!QKp<7>guQg#pC%boKM=^8L4Pcsi_g
zyXKnalt)+S89V?C_Yvq6_YI_K@|_5ej+;BX8y6iXLA|Hwh}y3#!M^8JM95W_{vFmS
zMR8Qzx}?^`)$QA<?~9sLXU5?0jS&b#3P<n_cP&WW;VQ9<lW<oLGm(v=+;ZK*j#>I0
zI7Ro7m{te9{KZE{w at lQPGb?0THrjLI;pS^5pWEiQ4gT&0 at jrhP?rS$l{f3fs#{QFt
zf>=4oFJILHG}S^dm7Ez*^2TWYM`6&SWALDF4t2AzM%w_KKTFH#5hv7^WQu at J<(2Lx
z|NQ-9565`^<3DGTEUr;Em&a)8T#|uf$%la<!DMKOA~`$^)R{TrDq at Dhy0A3Fp*q}s
zy(>5UFvhIJ6eCbRt;f}Wa%$7WoaI;+r>6PEt+ at _~-gRU3dV}sNG^DwLmN+)@i~Un%
zYxprQm#U$S-CRbJ&IkNcBmXh)?f>K&7lBrQ)E7|_T`$8ii5;2)J6&&O&~&FTSEWme
z<qjn5qRhV^Z|~K-4qzC!&j{TZ_}J{sHpr<_ at TxGh#v-`V1rNuD$9HCD|7uX0<c5w3
zX_JcJz1)UK|6q)CC<~5zQ=UfyaWi_~ST*|pKMma+r0yEwhgH|15xGbc2>CN+cJSsB
z;nVtqO*yp>@7zkDxQ>L$!+Y@#iyP}HLrkPD1v*x^*@9<6e|hGhG5w*saRpY<H8+?;
zVsgzvcZ;U_7Gb2Pe3v;*7 at V;}c-98WhYwh(2L;8#`GH#xc&mXtMC3<Ad7P2FBk6Gg
zTqbrwwL_}ak}staKL4e6$ntx(Xz<DMgdCpSCAm_xJnjz{piqfPawtSfx%5K3ROM#O
zA}z^M0uP1sqfmURxFo{2)mX7#_B|8L9|LE^Y5)^ZC{1lZw@)`|1q!k5jf7sr#<|ly
z4V!+PIA2wD(Ek-)aHR~iN&%#-f&XBncgMx-)(H6ru>J=T9XFkKFs974RMvtBM(Cd#
z<iB62OEwkyk?1Ltgl{Qc6 at j)xQb(G}!Na^=We?xDI_1%i)8VaNfLH_a{;?0|e?N%y
zR3`C1lQeiPe}XYCGvS>3Fq>#;10BM*pG;Y_c*`H)8;R7R+Z!xh+~qBTG78B at 2~&T{
z&+U`?PR}FU$^=~yzRS)&NlKa1ziYwLlt^0m=m5`vVl(!9lp1i}*Vo~^I=y}FGuiXi
z`WO;pz>5-(G-KpT-Jx3Eq8kG!F@>|%5z<Ih_C|RCX;Y=P2n6k;VT_WDAJ{mx1O5SH
z at X<U--Izwb=Ppv#b$tr`rvtS8a7yWgW7uQH7K-f}nBplnv*v1_3v7O2Pk9mbe(oRQ
zc);IA_oO%s8}|pff{JK|VD5^lEgh!nUHhdQUa;TikwbgAQ>5Q%fx6cUZw;FVnD^m=
zGl%paXhT~G+3n_bvOvXr=m4(L?-LddC}04lZxL#gu}Emk&vTkJxxHRT9)-44DgCJ-
z`wH!f=m`;oPoS~QTDgAdy`lAl^*)gQY~i&2 at NA{Ons}b3Y-c|wJI}`i4?eYZ!YX3L
z#W3K?r at v%8M<wt{9^pBoZBdjeY#Ku>!j|%m#Db)tK9u0{$z%C0%K^-}M~PM%tH~X}
zfkl2bwx^S|ltD^g!s22E*7QLKsg1P#oPZ;)YMVUu;+Zv&{hT at FJRG*te~{0!&O+w|
zR0Hn_GOfT3CR!b7n}uuK_qe6;dO_bgvVG%^#Y#1~i8ymN6m+8p6gmlF(lB3Y_q99t
zfsSk at 0O^sdJfZU>!yROivVJmiByK}}Drn at 05bQU;qiRpv$1Ahoe=I1ddiuKoh at 0*`
ztiX?|RN<v8i!tuFE)Vj-&4CnIF5$`34+{Z<5Jf8YzySG4<Td=)9<K5zu&`GVr4<J7
z8JS=i9bXBFpC$X&mv{-w5ptR&Y&o>8;Jc=rBl|{GadB!O&7P}XC0F#7*}?lwW<}@d
zMd>9u)K8FKnC_cPn2DBZ=Qs}Y(L{sFf~)3jyJ7{TWAd`ufe8Cf#@_Y2^;6?e$aQw#
z-eEZotSvR<w>)a9j=iV7qR!v{=<^1ts#CQ*_V=D(2V&YsJ3K!I&aJBNz`sd3X6^iu
za+X(lx7+pj{mM5NxUWIMAdkArycNGX_#ZPzi_T^8_j1u!rOep-;bg0eISN&Z3yXRl
z3hoT=T{rWtFih=c%Mp=e7wh<se*zN(vp!%uMDGtGw`j$@L6}mI8mT4`?v?T(m>7;D
z8dV4T>bN9M=)86yQz7J}q%$pQqS8^}Pbl;ad=b;gSr+OD=WH<O#xdw<y%{o_4T at R@
zv+^w)P&e+{sm$b~%>3=V&DD>6D{b(;+hbnko~-je?n0&RkR36Oc*bp7cA4XA^Q+J!
zG#OK;b{b7_Dz>J%{h-6M#;bgc2;L>>62#=vQo+q2x-ZoIKe`SMNQiJQD0UW=`-jA0
zxb1kG<K&GJ+Nr<!7!*R4*O8)qoHb9}nP6FC82xb@=fiB=`>KyR>80O9<4UZUU`)Y3
zo9|b1)G6hp7jR4^mn#6%O`;I4K>WMtyGVuZ0#hn-b6PPny2G(7InJEAB};h&s-6Eg
zuaL~r8rcuz at LVw~z#Ii(iojzwtsrx#5}JoqLhaFtwM`^5TX}b3krD5u5G1qn1GbuQ
z;YZP<PJ5;t=L6thb%Xqknv*uph|tzncW=}pSGt-tOJH*huvF1F#2yLM(?>*YiSuOD
z@(?N34hVv7VaF*~tO1C343g>E?=C0~snHj`{6Yg at gSZEhW4+0fYK0a|aYjWn`F!%O
z=yS&7Oqfwc{>h*kV(g#-WMp2R$R?-}Q_T~`&sUXIlk>v&s$jC>PV8=EcQ+3C=-2)&
zsAd)D;T5aAD9}Y+jUM7}FDN}aJcKMfewJ3l^>B~V>55$6*!_ at kPddJgxA&!Jt)SL8
zsd>MH%+2tAgF=*53i-h3 at TZnRY5}p<{>1#jlQrN&=C5xW_+cA3adre&jpFuSMaGBC
zKqP9~- at G(d4RfYPFr3Ml9Y2^;O(fwg%mN3E at -i<4C`N)E<>4mLZYF~i{#%p9^Y??;
zRGgKowD~14H at b(fqKOQ!U753QGMhtluD^)u0xPz08@}sBn$Z=1vJZdIMHycdF}gyQ
zFH6|f%k}Zy<Lp8Ev>w0Q>e{F1Oxx|tU{qzYm5zH*Cey;`4!ug$bH|7~nZ?H0vb`_^
zFTlF>tn0{5XD{Lc4o-K_qU<$*hiT&7{;qj}T+O)FmBfBzvStaYE=1mNZ%tD_8F)lw
z+#gNd$*bc(Jzx~@#ai_&Vk6?4Ip}NQjJi_+*LF)}7O^MJ^0rvv`_EIgS?aTpBgNqI
z80-Gs{)+KFs<Deg<UaFs6$#w<@uYgN6}8!DJqaVO0&C at 6*lt3Vi<OTcK`fgl#0oi9
zl6_RBx*OMrmoGNbIrhO?pTU*cZJSN_dG4tcmCvMh^Ns$MHPUFtHFTUPEPYO#9IcMM
z_4ciAwWsWR!^Cvz>lBswt*|b8%Q2NWi7MytB03a(j1h9tOEx+#>7IB~8#cG9pX#r)
z4&P&(L3b~ZA2cBEx?eh>2IOlq?VIA)<FZ>!N0oX6`??VYxCrW@)kmem6|(my;i{Vw
zQ$rNz)5!nb^rntCH!9FF08s5C56b>!`OgF~c^c&W;ACokjlTP3VVe-5O=)OBd~%HR
z1~91!$t$BQ)n9G45*8Qp_%@80SR#3y?D~np;?A4)o6kdMSfM)Q*~N2At5fQTfhn?|
zomm at R;^n^dD{bqJ1YUjY(3-oPqXL9`k4{Ed0FbrLw>sCRKcGCSfWUH+dc_|Xg0@`Z
zf<Fg)g{(GKpyU%^<Qw6?*yE1=rs$)aWog(g2vfM9Zf(HNqOSP9m+O|+SjP4?1}|Vg
z{wO^D<wXZp^vQs2ydtB5Q`=m{#l)iNxrhh5P{7f9QvQI={if-HM;mF&IlaH2pIu_3
z1lAn09sN at wjJi8I-yoVW4n3}|q8_{}@g|tNC0cVfz4uYw&N{K5LKwa1`ut_XVrQzz
zZVNF9Ke_*R{hB6&dVYiLZmzS1>}7CE;lJYTJDwt7_!>}JI6Cby{BDQDRgx13*Oszi
z<XR9t7Cs^>W_fRg`O8KIZ`z&Rf(fsMD?m^Ju0s1LQ-aDebIpA!$AUp>-?yS9Nu7~<
zdY#}R at 43VBI)wU>aEeq$XXOA>ZGI!l$3MfIX?jzs0Qi={dkq7g%`Zn6ymR5MdHJ{Q
z^P at u1d$z%zmaXP05#;H0WpOU8FmXfmX>&*9Cq_Inm=O7QU5K<{RY)n=JlPY3!jMD-
zJI{DwUG-%hPd8WE2M&2-;tuznWp-XUt}j#V4hgF;E6sGMU${k}>rZ1Q4g-MDG?XLK
zo{GR_TR3*||2A+&E(F?HyoPE!CpHN98%f8fGP&^f-YYPWbWQf-4b}DDl1xQQi1|o~
zPac}2n}I=z*RQy8s_E<As3i9QH!%QMe*WbBl2y?f-Xe?VUAxOq^*4*bY at Ovt&Q4rL
z>F+V*AfDP)@<uYc<ON%sp?NV at O@7362`rrt7YsDo(?1r|Bxh5uH~_(*g{wtC{lN;Q
z2g%pL^gA9JRxmgfoCnkXjFjur!w~`^9P1YL77d;y6m?_azXk>XZ(mymI#1<@=3 at Mg
z<k+DQpN0HUB<R?J<)vnLTz)1=;vz@@OiE3x>+Qs3gGpL#nB-D8y?&bZ>H at Kdigq3b
z#tUZp#x}JF7pl2Yop+P(Y~VCl48nsu<G`2prVVGJFUvAVhFUB;n{eH0-H4;`x(Q4P
zScf=IqgHQjQx2yt4z;aZkSliaF$5OxW at P(lr#)1F^r38_fp$)9UIE98RUj<G;)|y&
z{@Y<oIsoa+BF_`xEJkQ_1o6ODvD)j^LD;MjnvC(w_1>W357sX_rx%X&`OQH}HeycO
zX}*TRT;Xtv@>t_1<@0s7lu&@hpdMX&*<YcapiG?yrAo(6`@Vk-=?*egj++ft96%b;
zaCNQ=!#YX-Jkrx3 at YD@%BF0iW@!pA%;>ej<lm~jRmVmlVfZ6};bW24L(^|g~w*A<r
zAqpl~d0f<GKOWQ^EcddJ(UZEzr>Dj^w at C@8uYFD7=8>elaB-O*p6#=`l3SL?@%ft!
zks2CG=#U?%u7fN3=o{Oo;See7pzHEg^;-m6`71Y_$oKghl$hlmWBN(>y1E4W=%~Zf
z-U(tPv%%{dV!Y&O^@Z!)5}BIKI)s9SGuHEZl)QOAxM2*qZ3*0$ARzmgB>kzM at h0MS
z4DdEjr*Eg at GK92x#$c;`V+Xt~rd%aR*nvGjjBk|oYgQl_stM>ZToxe3gt&o3P-Mao
z>q49PAUiGIC#k2N0{Sgiq=i|5U&tJHo&rdf{fmVFSAj;6a%}_IpF_m#m%xUVsR<Bx
zNwdD>$#8sNa8slmNOp%)%<OYc at k6u4KN?Td`0#D$x5t0w(~1ySUdv5qADKm9I9M$i
z%GcAHzU2m4&`*xVI%9R4oQkL<>N*4BYIznxb}X%th<+z2R6G^fh4b-&J<H$rvv9gF
zLA)ic!;4%m)9Vaq=Z^u|f9?f%xyWUBdvYmmfsZNzrS)o45jbn3pmb*w$vS_CJ9PHJ
zj6l{Z9pwmlOcFA5(MdQ)Y}|1yVc;)x*wNh_4vxSasT4a~eukC6!&lbX)BU4xFJQw9
z?`aB at LH4hifZS}#4=Db5p$HaK$6C8g;mKbV{6bFf*$sMcM~mq7+OgN)h7V{)n$#;r
zIhB6RK*X&Td&eB{uLz*puzc|B_ixkCizeZ+O8)@iezhB%jAl%l)(1?7H|9BP<dXA6
zVcS(~4=6+0f{(Y2<M4 at _0$}Hn*q2`PL9Ow9IJ$sXh9(1mZ at 2a|(@}5pv=!w-fD`hT
z?U0FGQV5=q6!o)f>pAs~Hv`+TsnWORusdv?I at DmOKGX1tGcPgS^Hc5G7NMt;bug{H
zk2-11z%S`P2Bl)-XK-3a5(zGFW6dC}QZx3^#|XMc5=2iMuAsN@?(;`|38mkfWd2qU
zD2k-hSHDf_-RgG-!dSej7=ODBG}UHBL9zR*FI8e#8<XGW*FS>9R7^fM5b3<n{ID_<
z*@9NE1FvH!NK(r!3;)q&qOJ3U-?tlozZwl8x;@exLoiyxM7|mLj8|J at f@z$q at +}e6
z`;YdD7T^d)f2k-U45=?-P=!u0GZ8kWQRE#00ezw8(fe+G$%FMrH2yxnu~#JKc{6^u
z5m+JlKb|PswaVhA<3ci(4KaEAfG4~TIwOTAEK8>Q0d+$M7>c(RP=?+YnTvVWAJ(0L
z!PEv^u}V+SHgrr- at tC>Ent!x@=GLJh2i_L*FDTqvmzdp89O(HJ&{37p>m^C9(nXa!
z%eIz~{x0(iPoX41DL=5zz2>iWEtrou?B=d={XqxPkmMa0Z^3svIC6DfIh%nd$xaZj
z?9g_RKB&c5%lSpY_vr6 at xd$@);TR}$+=~CqeIjw%#&Y+OEXj^-xLw7O#FMay*>6;v
z%i;hiM*d1N1nEOIN1<2vY8u4xlc?dPa^~6HSGFFXzA{*`@7`lKz!(<fP8P)68Pw8I
z6fC85fEGrqdafLu8{;LHku59piNFG1>sl at NBhU|RDy?(?1wi`0bpBCQ<F15z$YoBP
z8Wyt6^xVwZ>=!#QBsCX6L7|KOuW0&tuNs`&<Y>$?qIx$NacXzNeo>=vTwdvRQGn=(
z+;&#bOWYOYc5dY!2Pj&?0joMr9qNa2Yr#QGP4s|J>Sv2)LCv4}Jg*NU#Y-AFf?t+&
z9h+U8rOAKgZr<%BGL?i>u^k&@O at V{QCCz}khq8l>NNzT^z&h!fH=&&2X=iLG{bqER
zqpSVHAaL{tTAX7mvsj^8ST6D0xxeB`MtpP0((S^y?)MJqt_f;u3Pe7HoLq3h&d<Q>
z!Vl~G3rU at +`mLq|EE`5^pa3{Ky9joqDB5ZuKo at TN0gT7B?I8OW8y(=qEzZ+|6~-lA
ziqF)opIU9NFN!pn;g7vlk7lievu&|DsjhR~Krr17C?`7xts&>4^u{gBX*(EC3Wt5!
zKfRq5AmujLEvQz)>xbgs=H>A`BWtZrT62G-0<L`NR7`Vz)sae|i6(_02y_6!!IOqj
z at rI&)JaFfpmH+=tO;$rTBI^>d{NnZ;fkMe|z at b>5e&`zkrkbq2m(p;Ou8$cyOXc|i
zw2-W<LK>`iL4WYq+%QJd_J-*0u1-?I^UZI)JYBhO34{0baWMLy)nruLrU|+6*>Po-
zTM<(<i0w*`?eDG{wy<dx^eqQz|F&H`CCGK`!zhLoW~RhT<H&{Cm at xqcgS-edwG44s
z at H=M&paHFzdi<*o=m?zfodAGFUZmVFBDuQ}v}Yv;uD<Z8&ecsFA4SW2(wgx&G!5ak
zR<QGB#h)VHT;DxRBi@&*Z*I47mW}i7oW`Jw?tiqJo0eJI|LT=^x#~$TVn at KgtuLX2
zSQl<sXP|t$%VKN(-|;Pkc<me;hT~=afy_uw<z{Q<%$NN~tOt4I0A7hI4-s(hy2^(K
zxj7RbTcuZOPbSp|mo8WA;k?{J;ayH1N9E%h$=_p!3b<fH$^lyKZZ9B!^NdK~C8Rna
zok_E%@{o&ck~ngs3gvn~Jh<BG(A4bKu$3}oF5H%8l3}6>>Sh<Xz$8is9;mPOSk4Mj
zzqD1(^qH>U`GCRvc_xo4T+vzfIrHdJLmGSuZAlxT7^}!>NH9Xca2Z>owelGoq4e4z
zo)f%^V2m at w8-ie<;#X)CILnPmIhA9Mva+*Sh<mA(fYcNJ-BqT&In)fAP>|<mI~o|0
zz4~Wdzm^(8Im`?dOtO1s20CV^uZVAGdy(btb*i+X+#6oDaRYjBjJR|j)^f<*HGv|6
zlq-|kys%hk%$STXdn*J)`>_ZB&N>Gl$E9|xhRtFM4Pa$%X=X~XaRVKHk3?88ap=YX
z_v1GE(d3#{>?(Crz!wsTfDk3&dX0!}QhY*Ui)- at c)i#@#8b9PnoE9KQ4mo`0b|9D8
z_%yUkFz!e!dxjlP5_6Esr+_qJ2@$dEWCwg5*5R-Fz-Q&M1)-hw@}Km19?APLTsAym
zlX{!9{vr@*=F}MJMYQ!5UoJ;RhjO>IFlgB-rU%~@WmbY6<DVk|IZyb&zp%}ZtI*n}
z=^qhs at dhla)U`h^)zMZ_{sA`&pF89K|B7EHin<^SVaCd at 14m>i!cc=;L;CgM=U=U}
zTZ4e3koF6b-RQx8IKY2xDc3%>6My8b!lsyGAF|{YF)s0$Ar|rrW`TXlRE)89sTOOt
z_yas}KDrL1=uCAeLw0g>ZZX+`UixSYj%*dZAmkJI&XJft3xg1xiM(`l7$`iGiQ1E@
zE#Vt11lUfv9*3Os2cz(e>JX<3^Q<HM^Afmpw9A~?WgMI9N%Y+&P(_}G26tciT|i`n
zMh|AziUJoEj!Q}mN7P7{ZvgeYqot{Mk5EVckf&?uQ(ru#_!D~x;w&~3w<V$A*5~H>
zQnCrczh0%y*q50y&w(s`4PET|B$P{6D5E2h>;bHh^d>I)V#a_q4gs>WRw<+&x?X5h
zAog;a(c%f>Wr30-Hbyx;qfQ8-*>F;q2<1EF4xIhn4zQfQ%N!L(Sg^DA<~vnZXZlB3
zGC~mHq7r%!w*q=vWYgRmVdt}w$ViXn2Yx?g at mi#|<iw$xY-(XsWO5FJ&tVoN?d;Rd
zr)`l_e*Cw)h$uE2PPU=B<i$Y$cyPb3AQGRHI!P<JoLr?s^=UB*#JN<J(YLPT2E(%b
z at y60*v+?vjnycx<L8gac8Euw^ENMoTLl!TaF`GrhDHj?~8DjZN39!Z=7i7uwMg^r2
z!AbX$)HhE`!{2&+ at 9`n`LM#mpcl2l+0(`4>Lp8LN>*0I+VoG8vY at cseU>eCq4C_0(
zFz={hW(~xP2*Kck^?Uomrdpk9pULhp7*m&z3T^_|U4IGf_wS${T<EiTcsa4TV7=Aj
zxaE(*?1rLk4=y>t071Y5!AWv>3_Y^n=QJb0_gvaNafYf%1hTm;yp}f_ZTsOeZc;|8
zj*3wr;3D}k9;e`uW`1vPBi9w^&S(D$W5R*)d~y{Q5mm~;Pl9Ygi(*sBgO6fmrSwyX
zootF%e|rM1D4GX!F}%X(sa3XZtR`um(vCI at g1%jdHvYTlE#hSLI*Cd at 8mO}#7=>tr
zM9vOneEvtDBRO-=dLB-q4vMU)^zU1E`~%*|9||F}-dLUGdzZWx at q@4XTu~Aak+xEd
z!M6uxG3mG7S<R|R1t1y%sNWfFdBKi%m^eSJMZC`X8gons2>EhN9)QLWrI3zb>eA~1
z2cji`<=_9$l65%La4dvN;LB&LbWfn;!vl7Nuj;e-mn+Uh;6>x+tmooNPxZ$9rnoq2
z-_}ghFCfNE6X<>%f3Wl<(PexU6 at 8xb<HJ42m3p(OjHWo8rwy=0W#x}hW>jVsk4p+I
zNtGk%LwSI7Q-U=m`v<_-?qQFg^I*?+qhyicJ^@1&90&dBsHI6tVWK at VLsk0?Ri3h;
zcnMrk-p$8dn%WUi^bWY)%}ZCIh!nyCU0v4pBkpS_6dkWh_R8*cjuR?6!B?><%{}~y
zJ0?Gy!#bYcXdFL5alEJ&=@l7#mO^Sa$a at ru!i6?CGoL&bM)_U?s58b3VVyZX5Em}W
zeC}46eZoCRe)(aBS(?B^8<{i^A<y#rEzbfBM80Ty?bgvFNyTT|&}|Akr#4d%Cz{X@
zsa+rjH@)lh8HPsrwTU~k5!0KXb$wX8!JRCgM~zm=m+$B4 at m!<ub5znomkbkA;(GZK
zkTWybTTH=i$YXjY%4=LG0sgV!oyIDMCzR0A%T;D_8_?r_W}Fhk&>%L9Q+O9?Ta at G=
zxB$TgZ0xq6U8yWy=Qtl03Wd}BMOiT_cQg+-92${xYexmY4GzwD-|49L`WZBahV%Al
z5-b&yBlkj=<hCN#dJ&P8PA<CvbvlNpp$&Q_8B;(BpdBtO2QXY*lcQdWL*s60KiNtK
zM^gz_cSTyUJ0&O-f|O)3#OKjF@*hJ5tqdm8F#e(2{8gFu6v^Lb#hAHM4$I`)@lWV1
zAkM{Q({lz^d`sCL1mR1;H8Lw!`Hk)}tWQ1c;rLihl7r`6#_p8qn>sIDX+b^27U1 at O
zo_8Yk=WQG!ePo>=#=jz;?Xg9f)}9_7<CNgJJ!j42%|yz8C8(jOiY at v}rf*Yd2+Z+>
z7qHR1JZ;;#=l{T*B8<sV^8M=PP`A^JT;=LWIoPCB=nc27?<YAw?4+M%qwtaQKw>GG
za0Pz5TJ*%SFIfErUXo6HzyQ^Abmt0!-V__mr;SW|Cd5NoEomX8pOzN??A(}w=-1iM
z(v at GCuX)z{wrRby1HlH1#i>cMdW}K$<2bJDCM}(`a@~VI;blPJvqPD#{|b^Zd6_y<
zrepZjNl1pP>R&7iQp+~H#V*X=uPDSlIw6RsB%+;V>fyF~XvSqKZ<6>gw!>Jyok-u-
z1dnl9=`S<5ATt3LKM3;Vl_|m$7uwz%hhxUCswz4$d66vovmbt39w)|2s;hs`USi?{
z>h?U-YE^zFSf2h(4?T}9PQ?$MlLQ)1Hq8lR!a6x(t5?YHtai(o)u=XiXOG2t!}bej
zICi?Euf43WEJ0*)3iTPkaP%&Y&?5eqM#>{oh3)aNg5CRQPQH=|^g>svxYYw7q&Y#Q
z<8==};?w at cvix;Dc>O(brp2>e2+hq7ZCQM+ptJ>G7E<M6LJKkNntz&o#ks2zWpNBL
zBP@>mBK43ghSegIwO}-uK~yoJ?XiL>L1%Z{6_}+CY&CJR`WXt4O6PZ&*iWY_|Gnq&
zI^XZ*!X8X=_WzmD5MC3Hk|?5QYp*(707be8)dG1sk)CMJKhSvSUV%uUuK9ZhH?ZFY
zSZOtXs6fr34!p4oS4s$O$30&;E>#Y1+whpEtA=B=_<3R;GJ at eb_omjK6LkOz@S4Lw
z5O*MK+$!9SQ%gk6fMv|N>6MRdZ`#50ohRFO;+RJb)VJb~dtjz9(bDEgEZ82nB~m|0
zJMZPm!dhn}w#*Xp0uG4afp8<L$l{Sxq9CEz#T$4ho1rT8a(s*7wC2{BNVbHQUCJFI
zreN285Z3 at 5YFVdoU;d!)zWW%p-Vj9Wj77QjFgwQvkXyrlA9$9sw`4oD(OPO;W|%NO
zgo2O|*6#moh>htum~gkK;b^Se$yLLZjcyxqb5Pu~Dz=^8j!#tYjGcD_xC3(S)`7LC
zSz+ItVLcSB?-Z(Xq!1Xz#Lx1?t8sLU4 at x@(+CUz#Et!Lo11i7|ZWjl3d3bK4bx6v)
z0;o#~4ENZ0y%C>G?}eg_H-<OE-#NnM+5e(h*9L7o+wHnkQBT*NY7siElMbKpZ0BzB
zZDyrBWbsba08Yuz9Or<GBywggSokym4lu)px<M;~+ch4=Y75T)Z0`Jd44ckbWFDg#
ztRV$dvVmnUmsldjM_2fgHAcTS;BV?pu`*IH^|Y#s_}7;H^yWc86<1j+xObY-%}Li8
zeY-U+9CBN)=J9#nC9o#u)nj&jt8Xkl<PqR*r5p*xFr8!wd)+u5k94w*ykV*fl4TuC
zG!(Mc-0BlD$d0qUzfh44R1>@XW|7_4Me9a#T{jzAcxw$zBkhjOUIs|aW;p3z7XCoT
zprwcTtS{K_g}@}6;Rue`_ZcS*yqO%7i^%4{0+G96V=JJ=_<;<I96NN+3|-_}^!{Ba
z(}@7y`msnJNWPm>w9KVP9Il!PYb%)<6CTwPM#nKeAPRNZoZ)nzfpQsCio!jJCCo$+
zHxY#q`B3718jp}L;JEV~C9}dcPn>4GKZc&mXxlV_YdT?WVQ=H#jXrWE;9_&kl at 8N}
zw`GU~99D0pdatv{MgSVt8J7i8mu>0Vz0F%_)d)p2>mLpKlj}judg0L6?vykJlY>yi
zSK<Wo6VV^&_c!WxHK$!y9VOrag|6^A+UPgj6ZkSVHphRz9Aa<wG->|bC4qd<{q`u;
z-*MY<fD*<{8OI{|)*o^59|PC5YiQI+Xi&mdAI8}~7y%V!YthZv{VBMZz at wJN1E_O@
z3W-7#zd9bQV|8fjAIAZde;6R$!p_8yFTcma=3rVz1<1Y*xH?z%RP8klFgq;Lwg2nv
zlF at CPg|aMi#&@dYh|(k$`L&)O{C1&p at YETf6nGFAM$M#SwMiDNlS5Q))b~l?- at xX(
zgaRqd`ektNP#ik|Ynjou1<rMGiyqVichbdjG6Kr>zr+e}4b53%)b*R|yORT;mS}wG
z%W}V_KjB7A2qO};7PI?+6^jzAyeVbY(xQ)uT#|UzSX&3h{DFB}$ooc68(25U3d-`l
zawQwtAMCz`<JS*eMRk|PWa!n9^mj(Ga+vsU9yk|qYSHIIy8l8sG%2w+Cf4E#16gZ5
zQjZ1t_^_1C4EI^xSYhM5Us3Ve-nWaM_TMt&Kd%ZCT8fT9h#YHUfvk^l-BRo%E}eM*
zNCvu!sTSgAM`Fcf=am9(USIYMl2yc}aYvbmk4RK*mKc2|NFa2-ORGP)98skA8olK~
z=4paGYHVcQNxPx<(A)8fj#Ki}SYk+`Aj#n at BC@~1b?Z6_X{)ck#@TQlxf>rYA=2jY
zLy^DVLMz}hIC>HOY%%rqb`H_#tM)OSSO9c=Atw=j*T0zcA&4$}jnh<^Q;11sA7uMl
z<g!m7DN2!*{(;%8b9r7)EWwsdq<Lq<eP&hrVut7M4Yd~%DF%unms$RvVLLTWZ>CD2
zpWZwUxWz6c3JvrE(vhPy*gAmyN&!|7a>mojO9&ef2#F-rz^3B`y>S at F6hNCf(o8Bb
zX7}7z(9zD>Lv&lhJ;v>!G|#~fQ}gYz&e6_Ku6BolE6@~T^RPm@=P8C(i;$R_6t%pJ
zKZ*Ko6%rWDXv)+HH=9ozP at Ua)mrjRul26YTNurn>6P$>KBBz8YAa&8jWctX^SGwBX
zGnt=cZ#Zx5Qby??DgWo`EUk>}8=e?U?3hLs*q}yD^i|53K4a7)ps~N|q3bh$XxRXZ
z#>W1gmnVV4Eu`8;JY~LCYEh$q`=|m79??DY!&gYYw<kp^mR5BrbEZx_;&xjOsmHTc
znR^?+fA`_PW~x933d{dMh?;doBY at j5S~%n(F5j`Q2kNdpbDdTiRT3Rr{b$p`fJlRo
z;{(kwe;1kTr{iZ<4asTaXx at gLRCDuTeO#-AT`2WTHjLF<A at w;gm+b3Yy4bas+xRWC
zEUuv$^-nkYjy at u19bsMWI|~?cOZ9+uT)XkNP=Xcdtma2Dd-oRXsg2huXGp_q<`FZJ
z=TGrJDd5?%Dlju)3bn?(=xavn;4_)_9Exo{!XF~J-kc^X_4lSZQBxo0sJRT))6i!a
zU=@v{Iy at 8fiP_cjrAIXd;=|vuK&l{tQ9&V5LKMTZT392`T+hG)p+ZYO4X?+8glO9f
zJ;1I1Ub2e!S28MnDyC5qZ~@#ioK22%8xT~000a5WRWyoi8oGT2DyAaP&5gkD%=7oo
zyA3;aQ$EeVauesud<n%}Liv=BmbV+zYF(ZUQ66#gNs6+VHmTM>a!kaBxsO;bw-1Xw
zrrVC*oUOiR3>%}AVFyWZwI$ZwYhKbc8+SiU77!+_)haC2H7D?`2^<;0Hx{0!HUXy5
z#4I(yfok;4<-ECi-D}=ShQab_v4{eiWMAE>+L=-2>|xFg$UqZjkVbCk3%*Z+le?b<
z*LQnl%b50S7|bw)E at wpKIyxm5{7doBp*gSQ1NUV<OAmsf4{NPy3NXepCLjn0Wfjeb
z8M_-tnh=%k$9Vtvz8P{4JV&QO!w1F825E8LNMN`#fXqE4Z4}ecAGmnUVEQjD=lY>&
zSl7yu?h@;Fq at niYvz(WYw!>E|k0{yiX2DrWo6yP=@tX{wTB!U>=AUc^QQVIaO;D5c
z+=B1XUA!d{UDkmThO?~jUwM|`Qze(0?G$GgFK`eP9$6~92r5lU6E2j2h_$CMGJShQ
z+O>U<Q+KR~3q_Nwu_?;sBZ8G$O3qIcvgAv{?ON*10x6vQsrm%(r2q1gxoifcF}#SY
zm#5NXy`v*CfsQSK2j5UVR5VT}xvdf__P>((&cG8_k*VNpffAr1HC#LP>&+qtxEx$V
z+|0n|=jA>DlW0RC=$4RF+(mnIbgxiUJH9!{3+tfja2(&qiKq at Bm*YupWi_Z*3slvw
zqdyS2^2gC83kEoghr|v`VD-W?v!6yG7a^p6=Tmdcxx)eGpXFn at bV^U8BAG+#uT*Um
z_Iv<dak=vHL%pgtkWn(I7-f0Hx_xpGa&Q|Bs=(<Dj)i2SMN$$+i4VNJzv#Xn1Am-y
zi^+O3vubu$N_CbcCo<FYrH8`Pz0Vvh=W>yK*m~l3b2V1GIF~VpwWEQqiCFRt_T7f5
z=8- at pw+WBnfJ5ai-}HD8g!1}(n(G;MPh&bN`YZ<S#<d&G)8_9E%xI48Vh>%|HgChB
zF$k;%KFK5MgrdJ~8aT>()YmASzMzAb24bjdGVEt3FlxQaLYUR?81>;Qy#IN1+^cit
zMs3#ZO!C2!fL`@KOS5!GwZ`u&tLTr(6fF7tzA)*)azC}tvBfB<n>$T{f_Ql86Q_5_
zk25Pw2s-ViETsE%S?Ydnvl25v;u3`ebp!)40geO(GKC at Bxk2@Q=9BBw7w$sf*8%>x
zhw1TOf!mzLFPr~>k^-a<eoCGH3TJ)V8`yT2o|0qfni^y=F6$em<L|c=o at _TRYU<{<
zZqojA=&Uz>%o(i%E7IB at 2P3ja)QL0!A(I+;ZJo*l$g0>!xADSME6GQL4kB4;)|S6$
zH+UySMz$S9Iw#qq?p!D261Q6d7bXAonb05k0fsY_gJYyerF?b_5-(%zk!v*^UNTV(
zqMQ*VBPt*>wKhL8f}_Q(Owcq0Xd;}gpchKAQf+#$AVrhvzi_ at RFb6h%uN(&x at XKAe
z40y6b)hov|{O<ojI(|yeV3}qLTMNSUqo2XS%pxPv{w?)DJ1jp1p0#;dQj`@2k>yZ^
zhaPD_G<%|}dF%^PHj(=6pV}Xm6#TP**$8s<AX&rul##mq6$S-a?oQ`CFZ}U7CTg9z
zSog3AX5#6Sf0kiqsVqQEex$|&nFF}~$6msi5WekYhNfVHE!95nu<$Y6^m93K9y6IH
zJUyz^N{<xgi+4M%rCA(m<#6l_9h;8pN=^22S3OxV3TQ26x()PB4U8zNW?a7_FoQXu
zFiP&{B32-q#lqRRxfp}TLE#KOxnu3$O;g(npI?+OJqbg}KSm}rvBfuy;NE!~e&2}y
z(E9VFgG-Bt>o!A9D|&t4m#!|2e*JJAUg3W4XK~t)U$#^+OJVE%gpOLnLn5h=ao$US
zx`@@fX4^@)s<qz-d!Q?g;Mt`*_;2>{nxAbC`|++6_2awIV3yOHw&)l-ZwyMo{jQni
z1tiX+Etkw~skcqd^-TCeTYlA>>OdjagECCcLwPKg7D`dO&72foev0W6%s6A~`VzM=
zOv)-FC<2U&B0H}jr0!CS2gmW8wJM|tWDj9UunZtb(kX!y#;H(V(r8$C>>PgRiCyn^
zGKI?{<Y&mbJS~x4b`7|azUVEY`7Z`NIabG@*aHlwsvY0ZCHKZ!*YsQPd2cewO at u$Z
zW3=c!q#gm{P}A{9(JIC)UfhXPGvk0J^fV}?HVc4956|wcS!V5GnD<RxYP{k7tGv8w
z76kBV&5*2Tp at 4dkdzG>^Od4my2LvseQD%c<PHr#z_A9O?&?cqY69S8dMbY8Q=uyN5
zwri+57_2e@*JV at OUSOmsl-@=tfvDeVpzl0uK$hN$udu1F76bOYu_+3UG|H{cVF^R1
zX%_^g#&2)2$T9r~4FcBSkJ`(YCco3lNN+%8 at k+sefIgU~)~o0x9dBvM=)AF2g0V{+
zu2p>|ZMxKj2e6Iyz2Kt`+AMMff5~tgoZ1RNLaGNI<qG0^LE9gxW38h<<sT$X4m>Qg
z_M?EHLWeKHRs%?9d4tSveQrbU4vVZs0>1t;nNV~vkfCwOb4>B$&=%@%m$3BtZ#75w
zLm}>N_Z`h|0SopF0>i~o<rpo?DE>eHY|t-Dr<&F;#kk=a0Ov+L=V<zI?`Tlh{74-H
z<w}FHjIM-sbW$;Jla6}}i4rZ~3IFI1pl<@+l(7bwkPdg~%;b6Y1ks65KjSub3lxW2
zMRpz(?#H*R4Vs3C8lDw<Psl$|hK`C8Cr~9GQ>m>QVD%UUUAxE{wqe*s{$jcGtuw`+
zSC*_(|2T9&f=y^oqk$^i_C<v1I=M0YV0K3^r#PP6DRcw^3n&+;@18LI7_RcvQWV&3
z85~xROsxYxZofJHg_nEfNOG5M&OJr1KOB at ba=s!3g)Th!dwb*)v;ChCM^+gv(K3R~
zWQc`nNzc%vLjgi-$>m3?6oMIwwQXG)m6^pes`{Ks{Z&)MY`^MclzJv?qj;zeHac!b
zfq+{YBop#hHm8wX0+42xmY~8EtVvUHun*SJCt6)n(h1femZdeR(+S;M at Y0na`2%d$
zU}vG3x9T-d;Im5Cu>MF`ISDog9A}#ajEq-$EuPMJ^1qDN-g#ALTAA>PSk7?Fp5H<{
zvro|U!-2Je=~XV)A<93uzktr2PSB{uTPD4_N4=Zpi#jg)#C%*$vQ$C^5TI|*y|nP*
zO_1QmNz||P71AYZ{n;P60bBILzx7t`x`t7t&S7Y^J)MTF`IAP_&V(D+TQq9pRSzWR
zAzdtdAh+<P^yW<XU^lWOfT12jP3wmd_o)!SO=I+48Qw6C-RdktT+8<A;})??sJ}dz
zWsQ_9NB)6xa<v$me at a>P3_f2gEqNGfsUw{E>UVbWAi)hOBTpj&ro>RvkV{j*s$Hq_
zPDrnZP!&~3pnOFm^si9PVnh at DjW*o%+QmBAkEwae@?TC at Lz1;yy9nKTM|o<R`YAT)
zUTq(ulGG(~Evn|eYSm{0R`vQrQGI1W1%VHf36jj_|0Wf78JNZDkRr%j+~!I{XOK1I
z%>+P7-*G0JJsT2x7m*d0T#w*4eVSbnw*IHSO24<?;gzVdgS90y+>I6{03H!wx_7Qs
zElINFQuQPTI?Tbw_dlha;|pVrkbaasHWrh|F*0{?RsEt40EPrj8`>wevnA<J%(3B|
zN_)ebXVOmC*v$fC?rpJ2>+-e&F$w-cdoLrlm&r$j>HaSIS;``M^JibTFKamk^?tnP
zW#SyD3zT4V0)sHPgXKPhqcd_!Tg}`wj7p$W130rJJ}e1yd;Lo*SzECZYv$OPRk)I;
zcIU4s>U1i76axhwDdWs}ff`LD7`Tb(RweRif!3C8O?adq?e3=5e~#oDtYj~!mYY$f
z0tl!<p$dzYoNwBCRi_9f89#xO=*#-Sf!%QLST*tiGrBAq%A_f_h_*7Ny+e6x8Cg|H
zItEPc7^K-*kc!&}_;nu09fO6b=f6X(1Snoc0 at lZA=sa}s3b-jc?&(z$9UgD<(x2Pv
z8D=-a+MSAp)3TVXo;NTT2z2lhi6-B1><j4V28KhrFt8yO59Vf;_xJ6K;1RI0Qx$R&
zABjw69PCn-Q5bILRrhmRf7r$gtF0PWP*&qz!(=Hd3zCdnskerr<%+;gkAm$NABXoM
zKGlu<ld`N2mp*0XV2ML=MZ(BRFR?EB$swtr-m7f2IreU~l;A%HeK;<ix!+)lCSz4Z
zdU!V8LqD~(Rrk&U2S6|$Zz^4b%AY~hs&%QCbf at bt_~CwnsK%v3ntVo?DZL`a+Ns^H
zzYP at kU;8!~@Ct(ZF(xwygC?Y1Rhh|oPp at RDHj{d_7tFh-^s4ewT!uF9ld4Vq|Hleb
z4=iXH^c{1FU!O&`A?&Bio~@m%&oVC-ie&|fyUs+~bcVkWJT($@@c>_ at 5@{MP7cktV
z57LSqv;g`ONn)}h9ECG?dM&wM3ieN&?MJQjkK4t#bTa~7lh{Ox-Vr->%^w(FUxbae
zXRehGOnhM1X9R(v2T^}Djr;qBmvTcWr?G{Fd^-v;Yj8&Fgrkl67RmLmjvA6bTTBUD
zzWmZ-!yTWh!m+pCk&mv9A*D;<$j$QA@&_cP*E%Hv<&mxrhDBR~-RC-LC}1Mq9WH}G
zMqIHCCn at e7VpIn~O119g&C*u`BB8o}aKUZ`WSBh;j>^ciy!x{9d35|`Ki6+R!SF at q
z$}yNXgVHt-pDa?&#%g`bJlp}bibHcKz{SV`X2(8*3`k(W8Bm6Ra8>;?ESs<LhUno<
zeLQfux%nHdBWto#JDgZn at Go?9wQzNaP{<1Yw8}Vt0LONgO5Am>>m6v;JMJX0R at tWo
z)alf9+QS-QKK;uRd5$6EitcdWFP(8L59ctKJVTI~5A_H!^k;W{N9JKjcC$L=%>J~4
zG_P_mf4*7-s~QBJRU$-rS$;nFL7UwaqS9#WM$bbmKVH_l(Q4>Lcp7-v^txelOae2!
zhf at YaH@>iUfm8BdIq&7RFOX+6c_puT6Le>?w_H#7;`P4UenEveAQDL;6YOSLc_Or<
zc>6aBfhh!IPaJPOCGR42{>e=zwSv~O*0KxMi7(V=oRS&Q1$oR_GRLGOpCVeT^1~vX
zd+vuo_fIw*w+fcRJvgF6qBlFmlIBXEHa;-rKSR2^no^)a?T at 3)*Gnrl?eR3=d2+Em
z+(*1xJ|Z`jjp2VFgf(60xZW?L(N(;pwP2+OQ~0ZU!i=F_lCj2`rXp>iH9X?(?ok(S
zPe9H|UXBj;c5CC*esi8^HHE7U33}Ga1;D at C4<EP+D at V$Nf2Y4~%Z~i<d9j^ib_nkr
zjbjgjMrCSu0z<eDFH%njPfx_7sqxw+Sy3(eYMj8=&tJp4yEk05w>ot~&J!q0R7o3Q
z6jpQoyT}TDDZR#0hCzz+kA}9uYctG+<-<k!!}P46Xze4@?m&OrM@<xZs=eOkuoQAJ
z$FYI)y(-G~!Fq9Y*Dz;f`njWaX_Kd at gi1!{Z-#eR$Har^@JpoJx$V at ITUrO~l`Y?>
z%PAvVWxAnmT3Hg-s{qN0Yob!P{C(Lmuah~!Yx9}6$f+AH`-;3Kb+J72AR(M2gQW~o
z?=qBgBL%A6Zf51>yHUx<tb{nuk+W|tE-LA{PL_grt7Fn}7WUa}jQRsIH_AVtH3yzM
z!ZAo<0wKe-0ecs_xuCAzn{U?X>0BK<rj4K+flUd)T7?Ve at e0HK&`VrW=i1Rh$$}}V
zLT>;eByYgr0X=E86gLo)A>7HW9xIm@{Jj?^<x{k%b9)WFMFx&O_9(upk`EvGWS%Xr
z at D9Nw%fUa!gj{+q|GUvpf9W&3o-f+B9L4RjLDd6IM5ps<7b=$ow#VLO)6IY-sBbN@
z5r#wYw!e76?$LZ4X&H4cNhSA8qzwh&B$w!P*n~iIF_JS?ObLl8Qw58DXRylIHm|q~
zhr66Mu0dU7-CW_OEY-*3mf62LPJFt at dnxrqk5bFe;BZ1dVn|WWx5F6`9SjZbB{4Mr
zH;w7N*+m0LYaT6MYUg86U8S#CVf$pL<L;Z!p9)6QF3?>dINtZb8pc?Px)eoz2=|SD
z6P8OQK0ZIn_l^q*V)MR3R$7STM at jk=!L at DXqpecyjQCI>mmQp%!66yB<UFJUHwzS;
z<1sc at HB!F8C{Ls7CDG8QaLGUO{9<#sWK#@kxUJ_c5gr_s+;2-hkVilkN;q8cBW<zX
ze5^P|h~Q#vQ;`5?lYP$3C6Np}^bkgwEIfu%sQ8W!18M0(YExG|-fM}lw!D;&8KrKD
z!w+u?b90##B&zVhe*&@1+O*SCUAH<f4NpswU=$!3o56hq_E^Vs_PFU{Unl*yT!<1>
zxY<Z3xjuXc+R&p7M>xhMHK<r0>myCeUtAt(xv`drVKy4?k@*R}vJq&Gm>lH8qp;T<
zMrVP8mk7pqs0mh*A{~Yv<K+GHE={9#Uqr~l$XHNwW$6|11$RWqZWB>@D9cG^Q)6Kx
zbplf6K|nP9fn9j^;}Xp8$T|2ZqX+Lmj=cLBC4~ic{WuX;B1sHHzSIFnUvu#|qq@(s
z^A=A^i}q-CcH$VFdiTs%K7W<_|Ic<L&^O@~itb%;EOC}V)yby+ZjHrv`Hh4`s%!rQ
zzB}H73c0jD04m7u!ZGgVxI{9P?#OgcPJKNa98akg!Eh6z`5Pwrs2T_V1Byl1ZCwOP
zLm|cIE)M!|V6seI$C0jiV)Amaj^@^0Z(%07^&7<hpx+P8FUIt-->%Q+alWm1jd`72
zp*#p#cCLq61o at h1iLKxfmbuKJRVV_HK+PwOY$5J;HLveaCp!z50qt#7>aFBr-gA;@
z-b4J3nFx|bCCSC2AxTqX*|?+A1`QMB$O%Tkds&Cb at uzX2nrsMoEg1-Q;=gpxid{QJ
zMUlr`U=TDWeO>oOl%#yUpvOD6xO7dky|=0|zhia(Y5ueCh}=57K{WE3bJdv*pQ%R)
zlobg+=ji<ctYT5RC~TkaTexNs0ILP^iFaM2WVS75q7O8Bolr0o9#%CjlbR6w3tm-%
z{Q+Rl7p$E0uW;icIY62bs5O&FKTlj(+|3T$C+86oUzo)<2{<TMRos5ey$CVXtF_;Q
z(eInsk9FWPb;E&?8xe|t5B9N2|31)P?K2=hh)A&2nz~N1ER&Edat;een5B=R8_Z4^
zFpxS2V$>%#muB{tD$W7J1gd$p*|GjWA at BN3`XGOY8O%aNS5vz!xJrJ-<8zfLVC`v2
zB41$t1S4<&v`F4hhlZ6DFtt4mJ77)d*PoG9HK{i%EA~XfYw)y+lYUror8v$Q;YH4N
z-TVFHyukOBB2q46)R6P|p$P07)D39*VFSF!r3&6oVAT?16-8VNU-jXNaV^Qv8G=T(
zk4#YHT9GqgudBhrGb$R!!LUfiFp<Pul#F!<=1tP9{w0q2zfUDIa at dr^&B%gB%5zRb
zLR5X^7i(x26i$m3sSr{x`<LvG2C9$IUd>-r1ZIaZj5Wnbv#|i{{FdG7yQ<N?Wk+o1
zRclbb839L{oL>+JuTomRrYVQ*EBF~ZUqnT@?l<{q{>T06)WlMbHFSbXr;*7WjttG*
zBxSwn+N1V|$LucA9%o at b&=L2xZ!;I^JEcJeOEk~NUYJ<(fLCkQ3HobvGHnVLyQhEi
zd)zJx4}_U>*0^9?4s1vtNc~N6QVugH)+xmXI8OG?8-m=rq)S<o at VpMOh~3tdlrNz%
zT#RrY`uH0HLZ5gBLEuZUcl19S57v=m5E5}xfdsT4Yn9!ajqriv7jLt&9_AZWpZ~4A
zrwZm at IM<ks?^Phk5}o`8|15$M!8PI%4!z1M2X<$bt;hh(A874;ICfhd4L`(MAH1(X
z<?C5e0%R$mQ}mCZ!v_9=6?C?=%FYM(o?o=X-6XrN;VV!iQxOSmhDi)L5CK{pl&ahb
zR6LG^Y2{B~Rn^_0&WUfmFV#G>1=RNl?7y3K{&-136{@J}=}D&;<5G(MzF9-rifdm0
zYn#cs0Z9?561Vwn_RdQY5W?a9prj0yzAGdoJztt<?(3ht2LCMD=#}jEj6|vUJjNM=
zS$-IH345joZmagR^t|o{VrU8{?TlqBzFBj%#ypXM4;bpX00B-$W=w;|G%R8A)Je%6
zJD*RmwgxFyE5^GO!p*eV0kD^(A<tMqjgMtU`}Uy#&Hrz#owuz%^U^LFm{_ft%FeSv
zuJ~9IkbI~{V5i_mB2S56a`ll*1^zAb#|=#DESMc?F<OR7TS8iWDlrJFtyUc8&d`9(
z{(;-w8}-d^y|nTEinbdfX|cy(F#~(){JPnP12;>lNYc+&OYkp#niZ`hi*=Pc$A7wq
zJ~jZRf_3aWt<X-9>~~7=>87Gs59;VrsLlW8d{T9=EK05fzWP#Hi`hmfTeQlYlXP&1
zv%jvv9|-}v6Qw<RPr9<8fVBjUx*5sP{8(h^3TkYfnu2*ZC8wJV(^Hw=hG*@5_>4(B
zgOAi(m0ux`LH{)do^{ec0RO`fj$FD|!(p0mgbCs<kW<tA>&x%2Z4EjvYTvVc(3Hm|
zd5bQw5qtm$ZY!Q<r(rGZ?+SK6!7ejSaDLj;rl)F_JJRM-QOgZ at 4Wn+gCEe8L_1yB?
z7S0nGVL^Adj!8iRZ_PH~v$V^XtpB9!)}<9I-kS1;674=28)r(Au!i3 at 9F)+Kl5OFf
zxk;4aY!T_EL{)^~uW};oiFEb^rbfEJ*FzFW!cpENGV>t4c%TFys&?R?0z<6jH2hak
zBP1KY0iDoT%~JcE`CaF(mwioN_m6k>a35<g>Pklb$yR%&F1YpUQ#VLGf4()=ew at n(
z!A1>HO_iZTl at tm=>~8N<vdT7-dx5$-8}@p3Ez#Nqaya%@uZ4+$-qF4bSVs*i7cN`I
z|Me4G-sCI&mm44kDR$$`>qq>JPi?rS^Lu36*O0L~gLN|E0ZIlJBzH0w;M at W!?w-r*
z^91u-pPsRY3@;pu0_Uvs{HK)3E^szify-21Gw at 9x#&CJIvm05LP at m^0Sfk8wi*?Y3
zL7XW)f$U4)G)=aK=V#5$_5r9_c#oc{61QTHkHRwm<l!nTph7ixIj!UqSj6$*Z%X|f
ztD)}_hZ1#4_bjRVS*2KKN8}EnBi#%-1ZkbctY;TQoWv{Uz0>o}V1<M at bN}n?kT7GV
zJ^aFfY4$ZSETniW&(Gxkrhux5ehtDUNI{0D%3=Pnh<PxA)NEbvc!F_56v5Flvv(6q
zHv+R?*QC871{8hZoQ;?7OXCvBeJVncTXF{R5RwV)dYu<^j3QAf9`l{BI^&dFW)fKi
z>ghYpe?u^)Mfv6IdFlxTT77u@`Ho%X)STk7=BhU0F!Kw#(}G_VRNifqq-8=~kxMIf
z69pH8>ISpW1B&Z+56ly#Ty)N#n2Zr|k|;IdC|x8-a7&&0icq{J4#rjuM<>bN<@&0c
zleRg8S&4mA+KrhD$9upRB3>nDWUs}9y9lP7o at bd+kLW`aO;>qGqNO_2 at x1Cxt(st1
zi5#6{n_-JE^%+gVc=r&0q#Bb(fwt;%iAb><5zglg08j$#x?FwsaBNOztF!M%vpruz
z?z?{Qj;>k+=dxWP#~QGf6qFO^;FY)Me>IA!W`wh>;>MYX$@lx}u^n{?hKIz#b#jQ8
zr-7d4j(goS$dyo<E2(1!1sE^q{CqfS>f{*$zurZhsQiVy6(M%C(~xsQohHj+nl^Wl
zLVd%;(!5)m;M|+i<SOgon$|E5j*ricQgY at I^eDjk<`F!_Mm;*iTxd at sl++JlN!jbo
z at q4dPvOK*D*F71-rP9uU=&Nkd81V@(mOe^WX*xyv2V--rH2l)uEm9-Lc+r5Qj+pdj
zVnV31$(8vq5=>I<?MYlVXz=PsCNCN>3>WKvZeS3<^n-hwXMpR=D5a|MWLk^+MYHqy
zx{dkUn^E^_*xdwbn%;P~;m|fv-XtbnKI?YsS^PiJ=aeRH0Yy;wv(tEd>Ig}d at k+C?
zW>P`A=-2cvfe|EN&UplbOERL{Y1Co#I`;O>0XA>X(dvRQx+=!KZ)kq$wtgd2u{lXA
zTgFKpOv!X24%Tgu`6qO9N;iaBMBQQ?H9ao-`*9%!3P}alG?VG}l3 at Gev3Y~l4W<z%
zrD1^!0J){f78<*V#V_N-b6{j04yLhEnhp#xE}M7&g2lVINZ!_aC5oL^kZ|<23vWE>
zCvLN6Z<Fd?<V=zGAh(ua&~Mlk2KBPCzfbG^-wc<5L$xkP2-Zq)s^01F at bq2YqC?7j
zrbUGEAZ}%lG@#7)@o-LgKUOsayCpuS`C!gbl2!ZT1U|yMn)080!vFgFuc>g|^CZ^p
zgg_b8nIp<Mbl1gr>WuQJLm|Y&6OqsXbv4Y!LC|N}Bf!bcNy+)ucmpN9ox^qLK^Ze@
z8#G*Is at Qe<wdqYAT#eTTBA%0=Thf@{E=gY_<k${>XBap8MSLC3ta|q6>mAd-$5&1g
z_NDawQC^`MTAz+budjpp`0?(af5S6Vs1=f#(yk=q_>6h-#pi`;@NpRMNucu4)3}MN
z^#H9X<VYLcHOltiMp2uhXOlRZy<PCAU&G~5=(=UaPBDYFgnyicGtIOG?N+FAKTd2c
z#3_DonF$kr5^=x{Rp{N(lz*1j)Gi1vT<GJXc9=3RiU7p$Co6g$xFJWMK<cE`;qHtI
zt8r;iSHp*`gwLtmgUPP+SWEzPht?sBm;UCl2Au?G3G%iM+?Pux$ai#!2e0c2s>rRk
z&jlb*irvS*U0wW_5A`z=Hp+5p(mE`UQtNT<L1OtcFY-y>8F6mqZwik2>g|znZ3(Tt
z%vIT7s;k54)kY2)aGadNdU=sA&3IuJFIP<!`A4b#H-WL(xJXU*MuS(3LBOsPvZBSR
z^erd<gpK1HTkz#kp~{Nxk*`bDtgo%_x(m<7?Rb8TSEqE{F2S^7s~uo7Ab{H^p{6j^
z6Wxm4#$sr_mjvvQLJQU1kdxi8T1ON-Z`1b!m-H?>-C&LGv}D}aR-*j7+gebJ6Heu=
zKL<z!2Ms9e=#0(Pu`wk!&~5|v5Vqx at QipO?bV*p5Q8rBvv&L)A2kpZ6nUhhO^&UB9
z(V^ZH)B$riAMSp3gAmyTD(GwiPISve3k7Sd&LJp?_xenR{qNT&n+(mj`_5j~PQ?0#
z&GrlicObjWF`Y^&m5=Q;)&#(k;50d2`d!QoTvy2<KmOIF>YU5TypJ6Jt84g1eoL~`
zo3HPtg%)UP$cF*IF1pWPT$`!&6r%)~ojYnB;03|==W8;zDHXtV!(C(F(~}3^x{TXM
z2*fff<t8O6Mhnjc>p2|ma#iUO{;!7AlrE6B2b6}i(1i^A%hVk0S at F<8RmScK_{L~>
zIKK10%k4>95M4^X&lwEVto2F>^yKK$NNG2_>mS?MUbqBfHXU!GHZaPA+Yr&s54^!z
zXewOSMf8>cuw&etUMR}A{#PM1q55Ok7<C(vR=2RGh0*;~7;cSOuikw3O8vc at f+F_q
zAnX~G5 at U>(m-XtEZfyQ;bf3I<4)DCsTXbctWdIUJE8wSf`V(L+q!Jp7VT+`9wLU6B
zx<WoXG at MX50RyX<o|{m%QDLb`N&Rzgy|Z-LiXNoVpS^~$V6BAk_23N>(2t0k&bJvJ
zLeW&87P(DKE5<m{&17A<%vqF!p}c?wL*?SzHpy{t389>v3VfLZ3!{##ddMrc0Sq|@
zRu4ee#vR@}jg$0;@Gt2~oLAf0>i67bJ=cFA at yD*mYoPK_hFiPN at K_K(MbvA(HRCyv
zUiRf5_SuM*r>27&rA^rLY*&yRi(OCPQh)*sRVw_BO8##9>^_lCcNt>uFYznfX4sL5
z#Ew-!D22^&jkMe|MDT?OI!mr76sYfq5es`CBuu6Jlr3NNxq0Ct3nE!R<o~ozr at K{F
ztMHg~Ny&R1(>H0()W_*SmmK>v#KyQzom0+qiil|^p*LmP>lKu2Wu}HD>bS>0a4w1R
zJ<3j+Y?n at M$<$!x2Euds!nMlJf3D1Qxk)VXg#Albzo`7u(P at KVx4>3NIi{N76x?`M
z+t7f~8_ji?_K6hi4>ew<@V$UDNEyAeAILy63L|a)#j!gHeq5Rg<GKzs+pef5tE3UJ
zeH}?og=`8;$>gdioG}!;_At4 at ze4y3n}<%y)<5--v85BXLYUCx(`Pz?Ag7?LBMK)Z
zuDOrMv2?C0k^6jkfFA{N{#^|s^e?SZp?Ty|N<UL-u&^ZoDG~BUVM%JCmqKOuHefG+
zR1#1`Qw&i~@Y7j<?jXp5ZgH04>sFnQLMBz3l5<IP5YiFqH}0s_0UB_^vY8k&i-8~1
zozcEmmmMhF^>`qMa`>=|1Q|I%3THB4crb{04?Q-qC`;>XHPy at cUBA`E()ju9`cg_p
zd}4AE99(b#?51dqNX!uR5qSfQOvU&7-kxz3Tbp!WP3U{sT|-s0kt5z<i(mwA_|-%f
z9a|Mr4K4qWV80S;ZPBz-Lp+Zr?aoz9qhuz at 0-F407hd%Kr{D(}M|=19Di|_9VIoVP
zjD#&FgCU^CPFB)IGWdc2DOFLjE%;KOc{97m{|lY<tv0~_k8FQiTE3Qpf-bTVZz6y~
z2UrrN;TZTI+JxEQnvRMj`|@n&q5g4{J_5&2Vl{$R0an=l7Xa~HE!$`hxP<L7CEVVn
zj@^1|DHX)rSn^1gKephl5ym1}lVce@@pY*FG$t^TZ_u|_av6t+lpu`SGyNnGM?ADg
z^n|Is*@`@>k<}}SnXukD2l&1`cWTD#RQlQ9dE_xWZXV}ul+U7hP$8r}b_vOcjOerf
zk_wIyUNW(ba|;cmEhB8^f3fq`YP$^dXfcg&Bve}^fWS|HLA{u#5cO-jW*t4~7n&Xi
zkKcFy5amal9WQ3aDy9hA5=b~|-f;{n8)}^;PvchI<FYh_HwG^6rTZ(DE7<FskYn$G
z3|1A89Q_1<eVmGx`O?CK3C_lzg<==rmtQ(gca^a-*|YaGY$t{k;#9nF`Ivg04yt&=
zgsQBeiF=Fbl8UQ40`WBsQ3O>moit(V8L1q^9d<`5L8%f{&3WnmqxdO%Nyl7y?S&Ix
z(e8ydX|&aX!x&!Ck8<16GM#wAgd=Cju$C%v4u>0qqxRtQLtROf>S!jTlCGs`-@{M>
zx2|5Ktp2K+F_N5|6RYg`Of*+DQ?7ASJbeUo)*=r?qm*!8hkg at N$g<G^ark|24nvK@
zibR6rO)!Zq>M)x+S`#ip*pw&XWZtgud~g}NNVEtv5rF$Hni}J8QT%u>`fv25u5c9@
zPJ#tTv8#Eu5mee9pok37O^xEkzEHECf&ju+rkWX&GE^DFbKFqcC%Mg^qA!=XAd-Wf
z)tnqyoQK#tKsaN9Q`j`?J~Pj((_Xtq&b=%Ct at xh>c85AK^-CbLHj?FZ9n(uBxZvHZ
z^edvta~4~X`&9v}YZoAm%MaxtLL*EPi^f*&<Bu5<Y9_fm!9kDYdLkQSicD+=v!PM*
z=|B28LRbQ&VOKO-&mJ`fkBiBeYn-^mS+UJRSU4Xzovt>)JfmuoT+gtzW6$#@Gqy42
zz&8TnU4A(SoTxHm1a<jrf}m^XlspCIyYGx(hffEJ-X56SE)izIoJF!Qu5v5i$_T|$
z9(pSTFp-&fOqNS~{o_GS-C?x1<(hDF-V4KNM1f<my(Oxayh~aQ8^+orChP?XoUFmt
zyJgZ*Z`=V1*8H^1Q&{g6f&^7CzY5%-{?(9cPIl<c^kJ~MU+4}klew09Zp)}zoHcaR
zUR%|=WN^Y`v~$hu!X9xVPOX8ageXi#!ZP6*{iZtR(F|`rPhL_Pwl(M85Hy{Rx at a0M
zFBLf{4!vH?Et~jfJ>Ekw;S;{lNGHsF#8Yze*ArLk_&-1v<lN_CNST89$D0jx^+-7G
zPIgc`uW}$NEj*bSM2m4*H!;9he=e7jr*RMpX%6p=aOM5fhC=Z}#Y4B=*x>8PX>~v4
zE5IW at 7LE`zZ9sX~!rBvY)|fBQH<b?FEZ>Oxcc6eZl!}+$t!S;&V^_XnVkS*sXJv5b
zaDyv8hB`!6SB*EW-e1rt7yXB$M6h at bqxjUDH5yA#2^-lN;xXnIOw!53Zs;bzc~K|9
zMai<3^dMA#eP`1=qa5Xa-QkX<W$vdfpF0X3?v=VEdO{cib+O3O<|Y#IEE3rb7}HMo
zPfF9)79`-ZeG0KQQu<u_GYFyCo^OGE@$oicI+v07UpJ!0<T&ZiK78nsZY^s#U6CAA
zH_<pC&Zf7n%d9sg4*(5NYu5*(KbLH+3kwl$VFhvVV$%+Kz6cL6z;*VG7K%lV6v}(p
zBk0~}ByopCCCR{5aR#>)HEbC(N<X~ZsD+TLVl6}~WM-WP0<yn~OlN%$cxSl8O*@$p
z9G%aHDfGgg>$_wGyZj^#wg%%N)II0mIqxz@<A*gKpfA_B^KJm`Ge^Tmx)}D4d&tMM
z>SPBZ*+GRc={?U4&+&}T(pa=7MwX8$^>@xt3{_0Sr$&W{gZ}@oe8cdh#rlhhf6Ucf
z42S#YMZ)qzvQ=om5TVWMtdq=|rn6zeUvN)Js2^X$KaGzfLVOQ1bmTpWLFFPhYeQ1r
zHu#FfU&rLr?u5di&zvw;?D#O$>?lZp?i;71Y#a#=^?{f8>$zhg-%Eg5pd{zi-O1Jq
z{USMVW_8QhGdu{X!IV&l+@%|A*_NvXqGMM3F%|-EbPj;cdNw!7wVUd|%Dl_xua=y}
zH6jd!guzqnc+&DG5M6m#E+FHg;?dJ><RXgK0%1>FN$5lCU<s*Q6>7^A9#z0I+W-eZ
z_`h~~K^>k=J+p1z7s<1q>!4{V8B$)JbId*?D+NdG0blXo41l*n6rC%-goDLg^KcnS
zqA<+)&ROLB at nGf)|I$+7&ADc_`Rb&R1AUgI4>_uv#fEM3zAgRJ3twm-l`-MFuHQBJ
zqgD=KT`MaQvH|JE4Jm=kWtj6e4ljcx at N&0aOR4ok%iKWOB(QlslYx+D{$Eowf%70U
zCFtCPC4aCa+wWsb4XQK-mdmE$wuUZ<h at UkT(JI$aWxKw<Er|>bcjGYhh?km%7hol#
zK-rd7Qp!Y)oSo0YvG72zFHn+*PK+cQUUu>(9{U8Y#fVk|EXe-IlrH^vm{nXD^~fD<
zZ_as#VC#j;gRLvE*l28fO`=Sf>+QDT3UapoefYeNiOpwiqUzn7DIrGcmq|Ke$W3b!
z$Es%I_;qVX7EICHcz6TS7WC at CmUV7vHIe3lM5;w^DMC)iO=dzLH2&G8sMkwyIqZq9
zq_C{7)%<Ya190hZCJh;a at A6!NT at eS6#!wN`?+8!X!EmXUAnlD}!k>y%gjw(L_a*pI
zpT^zB?cC1=?v=|<UntZXxMb~4c-Q)$(ihT)mXfAnB}nH)hzNovGy<T^n!zU~I{|uS
zzOZ<PF`mQn<xi{b;MxpKkoaR46aDUJ at 4nhrQnbkX;&iWqQBudZYbD_zWaaUGund&l
z_4|C=igiD3YPVVKm?&^=3F~d(iw1O%P)^(*>)m<`DF)5srdKK##BNyjm$@|qj*_ui
z6d0XA_&6j<j#^!UUa#lUwnYP!>CRBmW<YrZ?_lWaPuiCPgq-fn{CM-hL_&^lc5r43
zY|sk~yLg)F_ldScuey7pz1+U){AL*AilK6cTkqWWkLiL>or)vpUkf`;n#~3UqS|Oc
z3=M;W>IRgP9S8>GF4ExGYyDDLHzcy+l#5k^#XOA<SB!6UN0dvQ$0MPh-Pt#DUi at Gl
zltiZAbYB3svmSYU7y?{HCp$?ACJ=A8ieQlS&l}umd?=PV>4mX;U_TW<D^ysY8p^N!
zUgecJOO)DXjr)`yPupCL=mo~*_i3ze_R`2=p$k>LJLwuBHX at ovwhp-W`L=x%XwUQS
zxoAM-<>SwBly(&5Rro`l@?*99Tq#(T+$Qn7d9Msm>kafXT+W&XKO)rAUDG4diy at +$
z?XVBc&x&kr3op=)KsF)%_s{G at 2;hnEfHVhVZ?X|YvjZm|^BY3~YS8ax=A_ti`Bux_
zb^(#xhF=Y>F~>L%<toHjqqAfoW}X9H_2~?ZTdYg>Rv5N8aeV+Gw}(dSQx*=;AfKdY
z>nUG0tBc`cHz{j#;%OluOXSbUgaejZ7mbA at +>LpD#eW&haiK9Jv8FFo25Hit3)fx*
zV1>r>F|IF-B*|A<joJusXV=$V{<Ne?!KR)kMme(fbDdnNN8}I88KdgNRqtxH9Eo$S
znmF~1hpxd%yA)XO7tXgMf`G^)V*lg=J^6RdX%7{+9Sq5*29O$4gTG4$!v-$uV1AB7
zd4%V`Itk2~V|@u$IwmxEVZBkfgw|dmWFO0^_&`As;#qGTJWK`I*a+Sby0oKRYBLUO
z(`JoWPd~<RbibHS(4AzA<nnv?9ABYy!}NJ#d(wj{NP67X!cz(oYjOR{^iy-d7j<h_
zjr*9=g=9k1)MbV8=kva0LL)sB-pa0udU)o6#GZoXZ?{__$7oW;k|~zrSNlxI8!yZa
z)U915zcx^(nsI<wF$JBbk>E7<2QIL<U@)-y)6g_UbwAxUU-UkQygp>np-RMjXRt)#
zlcH&K;Dv- at i%<6`q7bVp-2tBBJGM_$<E&}^L$PW;{&`K7*VDDL4{3*buR_1R*=7VR
za=0R?fH=K5^&?jnJ=70Y#Z;;*zd>jxuVRO_i1TqKk5h9 at VSfF7!%8X6bA;y2*O&bj
z-!2LV(g<NtrTS#3V9YsU!`%tMe~Axr1nl4R3m2crJgY<~QoYgo>-56s;m1nDeCJ;1
zIhBX`#nLGCxfawo296Mt%p|`SW;=5pa6wN}PxVP)Zp|lb%7TJMcqHa4qEH4a-u~A9
z2NCkr-r<#Zxq4oY1ot+%5z5T|A!NxH+`^~m;}>?-5gRDC<fFg#m+Lz{i27Rux+scy
zOOq*l1P?4)M#bRGxw*?4+T=9pY!<i?c%H^OYTd&TRhRE%Bbz0saFC|mJLeI&M`YcU
zvF6@{>+r~sPN_zs+@?xoq_Dk##po0rTHRUvDm at Q^c6yG>F(&sj`@rtI`9M6`1F#XF
zT}#g->dFvYT}D|wr6d?O*R6ZzVRO6g%E>&**$z-j@^n~9t&xcjk5(yXdcH?AzUD*`
zI>L0zinX1$Zo}iSmE29+BVv2KCJkU@!*!}5KUx7U<Gtj1aLq!-#j|9_5L;QGYySv0
z4q1iE-NmrEfR7mB`(yr%B~Inld?~(TXepO5FG?6wQ`z?tfEF&lt&zV7V at o|l at VG^L
z@;dBANt}!L;O^~qovw0fp5?Y~s^#Ce%+-`Mu#DnzI|kEep$OevAw~m*1Xy5|SN>xC
zPZ29p-x^-`L<ETTZ_KPf;Y2VidBq`AH&zC4ctq)=I#EZs$7#;=clYtHD@&@=+|*aQ
z)jf+-QgWnM<hcTIHgMJ(w*6amu8=2t9YKjcrTP1|A06h)wsY}PK_SYY>AT;MjmpR>
zF6C3^^8ez~2u%#`ikKKq6LHCV9lu{^X*fh7K%)*j_W{{i87K**Bh0}f+?{d^!L$hG
zT>Zqc5I5UZKL1}+fT0;T=skBiQ}KxD?GaM at tS+QJGb-}(ry;9H(1v|TZ-wq4;12kp
zLw$-3W1)u|0}ha_(I~uM4D&gR_Ay2rV$<gJE5w!F-c<+(n-Z-5bkptill-!oIKV;C
zx=X2saZ;_OCV?y}5%pKN&Lxv^7b|qUQa+4+gP at 0^NlK$N1s{OI04k{i3dv=WWluM%
zC5$emyvls6yxpYrvLO-b8p7v1!JeekAv1qey*Jw&X|2v?1~U2VPZjB0+w}Rj{-T8S
zIdVSM0a51-*M%dj9tV-VWLJ^Hen7Qn>H#RV?5Z}{q-tCKy^T#Dzt?Sy95_j<>H!dp
zwb;YmAgnRb3JWhg9cwd|xm=2 at a7c3e%<8(;(dNI4^MHHeiF<c%%~|2()32_|yp>S>
zPzt>>{j$Jf_k48^QFqK0ci}Cyai6tpO^Wrhf<@7)23q6+Xe!K_jLb?9Eti5VXKtFZ
zmj)d_uE8sk$^AEe?s2#?%q9wU=okyfwT5iu8Al8Pe*VzL$qjE=iS%<C9)r7g1~kb{
zClo(5%j<5vGLIEY_|)os)5JK-k_IRNCl)i``lxF9TI!3}PLsX+v#_=NXOVjc<?7=b
zI&ToP7M`kwgo%ZB9!)7Hos<cLRg>!v#&M$ud<@N7Kk+cIHv)^{zP}GXQc^9f4%~5p
zQWnM7*=r3d=?meJ#K<p{HP#M at CI!-8eG;WR^6{|b#k}oMuW}4YCIik&uUDD7s;6n3
zRmtrPvUA%dg6k!jRZ&|cCz*z|t(}d|w<v7Np+ at JSaK(7fuVs*zgsew9F{Ka*=gVOl
z at gUdQCq^^mySHMlG^$>t2o{N!JW@$P1R8Ybg(UotIrDCY3#N}w5NQ56+Wd$xO~#7I
z*$y?E+1hy^E&H+zaBrmc=am^K1KrbNQ)`mGGhiTL09wWp{Uv^fO`irW+xLY<yF3AB
zh}Y=9i_nMi+r-um`^*50IK{Mylc}MnN8-$e)dHzk>Y9=g9yp=>F$`IsFE{SUuvX9`
zpTkXet>3;MAiD=HrYH|Y&;M7$;s(c at 1-8gcI;t|!e-em#EKO*^%`oFzuRhq2ice&5
zfx!J}mWfF_QM}5oSE&P|hCIK-Nsf&9U?}0GUQq+#QxPhngcia7agrGnpJkB@!6tqd
zu#Xa#Q+fhPQrd-Lg6%f(RY~)55qi8{x05pPbi~*^lvo;+2tAu-qx%NyG&(yIR1F^z
zQ{$}zL4<?~K%~gd;6^1nDK)V1fu6Z8Hw_<OC#UjSyu-9{<$O=WUlpT~3JzXU5n&AG
zawJV~VvZS>0lLCJTn^Dvl?u30kRgfqz;Se;GFEWHV2aczq3%W-y1ARJr!L%X5sqbV
z!A$f4<H2&_9&f~%_L*Sch)zD$d{EwQBwt0CgI=ubeqB0VHZYyL2$Kby<PO-O_a at _e
z#w><9uWdXXu;<Zydvx!~nSN9Rxm+<et+BC%STnp$(OmlrC+xBu(!p8j&lSkvo4GA3
zZS6~*4_vle%(ZBjfG-LUdFD|@{;6?x0bY5^fIwJ at 3GObT%j;xB>j<|}&kw@^c#fr#
z-V5YY9D3_=cqL>L(qT=#h`Gnr;i<y^OZO at Fn<8-Mk-Io>0au=4hRY$+>F1pwscd6*
z(I&HjE7dn1WE#)K#Il|i^Ta|dPAk(;G>ZmU&y1HTweR)bj#>qa+W;pBYCPR_DSFbJ
z>Go>Zw8x_TYX=5c5iVNPNa_v$rn(|!3=)v7K84f~6p!>1b0_ERPFhiGCrrdMiWSEi
zL<c(1LEH3t+LVqgI<G)u5%kOc{~R?0ajW7FN*PT}V%6J+cm&tHm(qRs3zMKF42k?*
zm5(J%k^xnF^9+O6nYIc)04jvwHe8U1y5MgBPoS<_-No|))#S+12^`LMDvpz+gBdXV
zJ{(y;^MaqVhk6Se{qvMWSBKrAzKiUL*{yfdwbm;yS!n*7tR0{L;v*(u?|Wa#KPoA<
zQmJ0??WrFjTA-0hIyQ&{m-(R~=IAR`mpqkW^Bhzc6?$V3N!D0#^SyjCWQesO>j6K(
zG*Qn(1`Dqvi+&Q&wnMgo=>bI<^*iBIPOz*i?MfO#{g|bpyM!mM_d&vZNpX<w0WC9y
z)d-zoN|Ta6K2Q%jEHZh+I$Dg{Q9aQbXQEx^1_s5zrL9ZA at 94ON*y8F|rntFra4z9Q
z_$vDa1JX`6`{s82Z;TCA`Kv*4v{c)q`U|hRYC589H~}P#1ZL7K%<#+6>T*Y;Yh3BT
zYpt2Jx)tGUIeno0fflnsoG{j=QWrYnwWRV%=qt|D-?7R%osia2btxhKL6oe;7pA01
z`>I43pMy<NS)4FmAT=+H&&Nc7N`8(fr{I;lj9s7*R>o$Pa3KROjkn|Kcx*4BPWHZf
z0(<DAiw3TNymI19_)t~I+ at V^6MC9E_(DCg>M6|TF{c*<z0ZOY+&%}yO7>}O0%Nf;3
zJNf~|j_7_Ug_(-<iIV1fm-q-<WO;fawlw%T|9eq1E*)PX2y5Wt7gRfHCj;*Y-L(*P
z at aF%Q1oAPT)@PB6Z51jIr!v#0)}lfSO{VDxbEk*`?nBGOS0_hBgVL7RcL8*?noVPe
zig%&^+Dmhl2klhV_L^N$;5wyGmy5EgcxQyO%y{hhbCpFehW`?q<GR9&Ij=SX5Y;@D
z`iWY-C)MbQmCN%`y?o4oLSn5j40TV0N~oc_&a at c)(HJg6{(*Ne_)$g)y6uZQwNuJV
zX4}Q6rSH^dj!99K*Otq*7fwQXfCS&6Ee-d3xIY2phvu!Nk<dIiVLec77W{#r-huVw
z^Fz~R?XPF*2s2av!*A6a at vwT+ym^Au>%+t!XzD_Fm1kXdq at VT%lO0&56%(H4K9U{P
zFMA%w7={(T${ep5unWR)#D at f{s)T&b#}4sF3wOvV!db(mLB7e<c}zpGDZv=u6f*za
z4!dEkpns6&KcWC$yCX4LArGn_`~P45C9jFvd|V&Vn>mwq*+=Mcx}f7^MepSqbzt$E
zqbN5d^VRS=32&3)09O51PUA#sbq({`lynHV#|oJnVyv7YVC^c~sS^h5vdC|Xlqy>|
zsC#bMsO7`s^*c;Tto933W_xD at S|-7JL-YIIeW2`oxCy|<u(IiXb+&QKykyM)SX&xQ
zcUAZab>v<WYWf989xL|E(=_7W?RUh)O)06jU5gjpoyP5LY^>n(6z2Hb22K<Zs7-ti
zmS0?U%EAD-fX;-wej8XFN1|Zk=U%)$O2aau6&D%>zuFf>><MqEQ5hD#0V$B<`@gR0
zjWW3>R%(qvxzi at W?;Yee^DpQ9MZxE$+;zb7?Y^+#eWkV<^j{O8`y)^|=JXFX_RgtD
zQ?^5lX?vSSzAsI3z`to{kbB_A8t;dqck}17#AB7<yd3|}N0LPwOdS}Oot>eJ8Y(GF
z^ocBV*rvhW!eR#VwBjzo+-QadNHGgZjl$=Rvl)h8u=?OI4`-(DO#7&<AYla0Z|%}K
zl|U7N7)DN6*9A|eX8$2;E at ML8YxsucS8O{A9+UL at l;Y at 6C2f%###7T$^6e2m%|kc2
zYT|G<#I}e@#{Rk@{m4Er9T#CeC$xyi3I$+Q5c+*n*r`c6yRK*Q*F=XcHqK(|kr_od
zlr6s`iDV&k%?F1q4x^w134f|+#_<FX8)-^*lvJ?&lsG*qlh)W7f@&WesT5d*M$-W#
zGq6PKojY6e4{7?@+3<v|RgdCjkNCu9vGD+UwgH{YRS+pw9{k7P5P4rsLp?B+RAl}#
z*X#Sc?7K at 1heWxiaJUnlRkm{HFwEOK_Kaa#2f)H0GP<SB993Dco4 at yE7J3W}`Ygr4
zfuzh!Nw3rcW`Tt+?nZqJU`*Xcwe!>}$Kx?M#`q+*5C1R9%R0iMW<Sz`tP-xrFAVcw
z?t20?uY%qUS-M^~Nr<b`7p}`U9OHDiLUQn{a1)k}o)M!0M#8f2Gl|_cFXGM at m)(y$
zxP(%f59Ou$h51w40kCuHPUI`xcEaxP9Qg9Pwg at gJ)`~$OVG at 3yD!^~G@;3!v_w5!N
zknl<lU|puvPrXDA>8_oEPl9MV+ at h5R{GVBE${R+%Q<!@jrF?H6w<wU)5mj{V&a4oy
z#rL2i3+B6<yr_Jpt>sNxP?qK8T8&CBKCJ>MxK8Rz?)h(cIuR^6d$RpqFhCbFwpj;1
zb>972Jtqi_(G$D8AJmLKo1I$*MUHS6u(EwX{%q8q;yIEEW=V*tPMTj3+5g{S1{1&G
z0-;$>LgX9X0PMzgdV;GW_7<R{=BSpIujn;+KK?tbq{iH%^p<w82UGC<h0R?X$3U*q
zs`h0!kv#m5w;}O;H9NEzW13CrI7X>lJa}21^ipTUWzz0P6MyJ9uQ<|W{fLoc%*nd#
znH?uZp=TB?*t)sLvA%5~F at tXx>-bC<jze-*ku6Q}%;p#&C89q%EWhQ>LNww4dhO$B
zvF{3&ZNRQC*o#Wv6N0lMA^rVH)w1eb(l-+Ev<5eDXzDggB$=vmb0GY)97zg~EQEi)
zL#>hjz7I7e%;9xSS;4#COOW6Mk}t)hNGJc#nC~m{;=1P~*eRY!3;fEvUyK%+ON%b6
zaPK2U+8jreZr1_`Hjn_o63D!|*?QpM#Ehpc*!tK?MKea5oEee*Eau<ecf+{_{QC4X
z*gcI^8kOhNrRbSBy?1SeTPX}jv9G!hT!ayTq{>Nt5qjFamiC>CVGC6H`qZ&+_3S&;
zyggV~cv$Htzpai<|MhbC$*ODLqgcRPb`qII*V#irqt%MCz|Gs8;BfO1IGE^j*o1kB
zn^@4XRHl;DRLuYf?i!rKgzmbR at p+*{oyqfGK}(A`q7$-SFC6N$Gs<fnBNH!VZ>Vih
zNa5O)0)^GEojqD+u#w?ss at K=qm6VDD(JB$&aOF$x(()gV&JL at 9vbDe~(hFBJ3aXU_
zH43YIT3doyNq8*|Rv!482>M-nz^CX5w|0zg9P=`nka>-F*r=_;rsVG>qqApN2ieVx
zGT;qZXi?Z2OrsgDS3-JW6kNmVY4lwha(JlDe#m=6Z!5_BRmTTC2`DDNL4F39&*!tA
zGf)q#jRKO*i{VtHvR$)U!YKZBh3iRVDt-G_E_r^~fp>m6wc<=WSWy<k8J^NkFn1^g
zDUuZ0T?H&yaXP1FHN0rbsp-{nV~o73ngSZ+o;9E|dza34kN)i$S`GdO;s$C6kf#bm
zR|p-ZeZX)^&PVWng9WT`*6pxs=y>xDF$pg6qj##ivuh?1jhh@)0WxkvmKwtg6=JO4
zyzsD*P~8cjR>b6=mcAAUAyXx+<HScR$s#Um6_}F5I_iB3+up)Vcr;BY#nEi_$?cm7
zzvBmyTWD(nE$-Xc at u|K)sfpNjg0yi;PegUS?m at SYg3fW^qhffLU`3e%6EehJOqKu)
z^o8nh<H{jMkmKs3Qz->VAlBoRaDN_Z<7c(HAEL~<75J*uFuzP7(uKv at ZH|KRaTI8d
z$Nb#j+7PcU8g at qlzswhNsD1E1Y+$DP6^QIaoRG-_Yq8d%fchDhDP`3<D7wkaoc}2*
zF!JMbQ2(@~R=-F8x!AN_p~GJp0#1`QO!9O)YEcz422=f0(q#Ejc&c}`>wmxe4p*s>
z*dVWe`<Mxdy&%@@5}-<(RjlU%$Gv#$WHF{4vV8e6ONL~{2{01mae>j|D1wI21?m0l
zJz@*>gF=wO;C`m))^?K6H(=_h(#tX$0QzmuVwI1)vQyk1b)K^)WYfh-0O7-eKNGs0
zj0d$t13v_v<Cv0t!Q1fN-FV8 at k;b}7PBkdalIK81!NCtfr8;(0nO3FInsomgq9UMs
zm={(|^|W7;hOfL8dFhn3z5AY6#nHfPxXKLY>BI5`O(o>jl8e=yo|nI_t5>~orimie
z;5`;T;fxjshOUCrmHVt-?1dZI0dz{IR^RTTti);jR$pJz%}G3G9EoE<uQ7XRi@~%I
z56N2Zg$D^Z(6BriCg=N-qa_B_%)Cv-6A_>b(<uz&WDDY}r}gh!5pi1|6~oKZ_IWB<
z7>|}nG45T_7goZB8Oe4wlTl^mMYoEiqvl#jAU8&o=tq}onf|m8@$e;Fxs!Q@@|fg$
z^xU=}Yy}6aZl7F8N&Og)%viU_6FH}`R at _1@*9)mB?FHd%ohK?WNg#*wQGvi|CoNX9
zx*FfHwRcKWYBiT&SLwXzNB1U#|DI^<T#B~|@C>hz8FOm#((ZyhlU&w^1jBK{Gk4F^
z3x>=!j{oHYrrU4+)MI#ZpI(aAi&##R+{W5>`&}}ds%QSfZ(5O$m)+=Du=g)o(Z`-O
zt#&QY&@`YsQB&^kTSjv|z>#*LDfkW$?*F2dnXs?$T(H5%q8I<4TZ}SJRmki*#mEO6
zd#H0GFc~KV{qbl_*7;&q--#G)^RqM0vYzI4!=Gu^$&0wSWbPH==T)nCsc7S5jE^0c
zhg-rK?>Zw%v}_wRa7HXid}~BO0>{@x$}M`*Fx|rvvVUAM4X*!>^PwY25uHL}Wv(zD
z20vM at 8MlB{wx2-&OG=}5ml+ at V-l{ky6SMo6&hnSv?a12G>7D6PGlK_q43sc09-TO9
z#G#%H1n}Pb+-Q^T8Wkovg(pL_=8sLh-(hl9i*eSCN_9O!vkmLNfqxFEWE-h@^MS at J
zG|!qO$|v?~t(v+SRShYCaWxSXsaWKUiNmrvK;7{=TqVlUP^2PQv1!6CV4cx;XBO5g
zPp)l?I$ePgE3dnf2-#sgA~?ksnf9CJB6gQoZZu at CXdQTB9Bq3%yg%h4dxvWLEzmAv
zztdF^sO|w8rc>|qJxZKarmRJY#R0Y6t4myCz971u5TzhNAD%7P+*j_3MM1`sel=X?
zwOiIu?hF^z*w2?k;m6*(oo9(Lo4>~bCM>1ujwYzYMVF*j8<S>42b`dy2|!ytf+>D7
zqjb7P{>i*kljYC0K3$y;nLTTnfn?@f+Dq)#=McyX;L(@gmuvm)v>^6ep#Q8Y$vt-7
zo#eNtzAr;V0MYa14!WqzzkIVrgNYMZ<=MKCl+vHF7>ALib1AJT>8w!Sw2-42Q$KT1
zX|q#=9*<WJ-wA|F(Nz8)?ax}-tu>+_QtgVuGx{?nMQtN`NAamVLi7t1yA~#KDlN?L
zcqYHx48EE)R<TI;9_H*j9h(?AXw4ghLNawew?l=f)IJ<@lz|(cwoQBfBmnfvR at 4zR
zz=HJMH at 9ESg`UI&&pCs-A4WM$-=78j%;Z4d%P7ehrN1Z-a1;Z8hP|k18drdr(tp0h
zJ1+mdPysFomP>8DTjxDCi-%uDi8lR(%i}Qk8D{(tU5k=)<JQ-WU`l1`&q2at6hQUB
zMP)x-V;`4O)Sa#2GV42Y(4FHX$ynE>RC?%WJXh1=mB{Bdk9bc#S&}eFwwH3WA6dF-
z$sQooy}-7(nxcT-lG~7VTwl1O at Y<BUmNzjVp#*t)OshJJ6w#LnB&I8wBv9#MQ?2xk
z<Dvo$r9pXdT6phYQ7)NG=k7WW^-OQ4 at k9MeFIR}%a$m at 7@T at Pyy;SrSL4}^+*@pCf
zQ3qwS at My*?e`VDRC*M09gw(xM at gF4TPo7B=V1239xbCa|x~EddZOTIOrm-W^U=ss&
zU5h~?E&d5<_L{fq2T_TE%9e%FB=&Xo at OjnIDf6`8T=HMzk5htLtvo>WYyD~VVHk}J
z3^pUA0>awo1fUkjYQ{Ygtf*USb-)@-UBn8GRw;z$<v*?pt#KG!Rq0sZ$dyhG4=KvM
zE)3C^;vO-^;on<|e9D%(vpxF9ezqgefPBgZ4!ii4S+rEQodFdHg1abx at KYI~ftN?r
zCB at MfmJ5swujSm$9Nfh at hQs(-r}=`hnw9!&k8XlNeyH)(0&yw~V!u~7 at HC)^Ff8vp
zBb~<%pN7wFcvIT}{6MT?K2NvTjwnbet#$9YFy1yf9YLp*8)_$2mmZ!rCD{wN7szFP
zs&0_PK{@>?J1Z98=cRmW9xXRR2JQZP(*G^&g!rZ(kvRgvY3)cyD~k&{)DZPmDdqoA
z3(V=q85#>_wXFbZA+ at i1g*4k$@K<{FM3=L}xK=(ncOrgmUhov0*`&yq4LOm}SC=WY
z1yg`&)FK3}O_F#B at u)5t(Qn_gb>)Uzo%p%?4bv9zn)4>8J^;?1h06sqA>&Z3Br&8h
zlzwWQJDsJu*V-$c=QxvT at y+3Mr?DgME*JGcpErhy^xoRD$k1w(Su6FF+6=N<;N(x=
zP71{EU{WH}ZZ!W5n6OCUwgL$iLhRE!=;OI!ZCNe8yzb7CJXKcj+TnxjFS)MgggA at T
z^48%CuASY?C?dalyg@?r{E*;UTH|mBJ3Xy7#&<>;-`L2<Y}&4EcU?pqxh7PcNy4y9
zk&BuiSl^N at x*IvLbg#9J2_|H78xe-yj~I*zkQD1*iW1UvTxYKJJXlhp{^52|B-eKh
zzO&VJU@=4%Cmd<~vLE`S7(EZ7ia$tWaH6HX{a`bgq5}E at M}g&AF%JkjGXv|CE8V?T
z>yAuf)7pVySA8>_E-1Yv9mTx*RQ7uy<|DfL#`MLy>PV9fa$-jbc}v(8KMs>?{uZa$
z{T($V?A?TigX{;$QoBA9nR|WPKd+-xy6~~^@j2S9kW8)_xS$^)NX@)~t2EYQ>m>LV
zSLPe3m9;H&sRbl|;88-P`+`Y>B~k&L)xgEFWbLYpCk~||<<!G6zK;lEsJ-=j-Y6NX
zPQWN*C>reZv*SpNQu}dYp=FMZIfAZTK)~I)HkZ3l;L{vMa?}WJl{!u=ou_&5k>}uD
z+qntm7=S${N5*+1QVL(0VD4IYCeRJ2h(%iXkodvLFmr$*rA`uE++T~8DcQeBB3y!$
zdB(lX{hPG>amFWMwknnIFWb`3HwDy5J^>I78G$44Jr|}5(rna3A{XZ$l$>KO*mo_Q
zjcl?Or_Aqj322nH5Tt&~IUg0z3c0*nd{!6PuAT0h`o$gIdd3!ub_08!qjtGg;p4!~
zq!Z6f=#Ampx-o68@?n|@$VmUi_&;EOiw79^chqC4zDmXTSq{ZN?5BkwnNX|lco(UU
zwz*S;I`4yx$=Pjb;IvHC9VV6HEi%5%icU?!dYw=vGmB$?#5ME>cO;b5(iVjW8cc|c
zU{tCSI>f(no;n4Jx2F`+2M?O=hZD4hkXnO{-eUjF7<W4-PVH}%_y&h<8yONqVwT=w
zgi>w3#49e}>cBQXl+&AsfIV9ccsYL%{T=aqVWFr^tb!$@ab%L2qh7)az?dXEwhHgv
zLM at ep#zlWp*9AkeGWYKiMh!q(=~QKZSw=f_D1z$I=h?{vt;ohVqB_WMdxMqln-S-y
zKJ3xRD(pl_`~w3i^!a+Lhz4w}@3>HYO943lWJ9j6Q=z2+H$<mrgaR*eV&&uUFl)AT
z)x;fs&e+x7KaqBY8EHCbwr>a8ov*XCKD@;=H^6xPU-~dWs_CpW4wXE`LMCo~l2Vap
zKwi at EW!UcGT{nPv&oG)x&3?N_!07yTUiyT$+wpN{4RMaUflqd=HCv6g0ad<ZwQod@
zfsRf{Ov>y$_=|VZH1fQ;+;rmQ-%9XJDYjLc!bMslhcyck6Pf#qOM$ZD`idK_g?Fi7
zA~ZBTP9ijtEEy1tghW`*=PX*PRQ%*88eh^(XL-?}!?pbhYVMI}B=7WNjw6&cYT2|=
zTWpiC0|w(EWhcMhXbx;0UDN>-pQ_UF&}WepaMVXRCjo&(9tZelXNRLud!*6K_*N3;
z{Pt}^;Zks4sPwRK%2g1N|KDas_sl1JVpvZ#$&{Br3-dwHgz at kd1sxC;L32|jAhlx+
z)OYN?0S0C(HmsazM0P%n+-?q=HQH48y~5$8B35?LY647?KbBBEG<%?`u~!vRZgoo>
z_ufITm8n1Vy>~0U4;%{XeM}<?I*ZJhsX%hOpY%sO<h`np{H;I|Lhl5fdH;QSH|2Pw
z4NpL3;}veukd{3#0;uPLg;i9*Jdr7`q)sptGgOgtqS$OVJ|l^DP;0^goE<g`<R*>&
z_yK2yUC9_R#0jAMSJ!7Vu;z&hXJm0}PJd_Ed|jCwcB`EsN=8INHtnYA<7ZICG${89
z4tmS*SW_ASX*+zr-*ZDQ*(2Ef51Zoc^iov?Utt=~DGk?nY=iWkS&SC8^etWgY1bNd
z%W(;q&)iy59TcRLW63`XkUe%Pt{O#6Zsa#Ocm!YXnIlQ-TOdvJLU2U*dW`ClhzXXb
z{c3EHc#s?#^h$GQ^xwn;x}0I6q4oL*icZi$RN at H8{v%&)QdRG_++HT}T+v7~clRe@
z0CI<4cyiRmx8<oFrsGq(@h}G#%mnH?cGo)|7PO^}&8uw#8LZ(sV~CoIr(jdU$4?6Z
zW24KjZ#gfD!V6deS00>h4|eQcprt%s7Nt-~UY3n5S?q;c>`3llt4#HHAzwHvh<a`F
zozl8l=|gH~gkZB{v(-ywjt0L>SHNus`j<*-gO=Q-kIl9x*g)AvfU&YvD+F&#<2|j=
z6<{=c!eXF}8*QO&$X%5bgZVHSm?5i1K%MDDM`Xk`$Gv=owx*(^+IIr9ybuqw;(d=%
z4U2#431))3`!yb1|5;Lj$vAlibv3P}wyAfBg%-!<h})2ze8UheR^Euq9gZ>R(lQvW
z_diq({2bJCrpw?EYqrN8JI^E?VZK0iVRawh7xNaV7Ud&3gy!6rSNDbI2Zd^_-KRYJ
z1|jWP;P|@a?rUo0|IiuSx)gevJ3*y(I8~DjHkTZY_5)f7_U%TYSvntPKDHzoT-Tzx
z)i0kkHvZG{a*`0KN0gAx*|YjoRe^}=E}$X^D;#73dKYm^z=X*8)Fz-h%y3Y+-kotZ
z^&*6g3J)XGNQ=^ZpOV)x#F+hoHcMz%eM*Vz+-mzUI9lM5)P+%|r&)z$qhC<EfL4Kj
zOG2n@=mqZR_>|MT?ijsu=YYm008~HJ071B^zn_)?)*OchM8sOJGnCYGT7-dH`v@%^
z2sL<w2Eg6^BS6i>x-mlpWWfuK&~Ka}iTef}YClUT!o(O0zxcAJ35vebW#TnJZ3VBO
z!U(aT{jr=DfTeV_*opO#xIg9Ch$Ao{0sBXjjeW>iZGMLX1<-D=3cAdY!ISE^ZEDD>
zv{be1Nn$!T1tC8B%d!M{6Nu2>Iq%?MYifPzRBF?qXsC~;g9<-07NZWGb{#ex++~;u
zda?9QKcz;6rF4-hdrgcJ(A&vO-OxQ5_kqM3mj2~;v{O3X8erCSFDdi`wtK-=)j}nN
z#{34K3J|y+gF%o~{CEp~e3k=$FPc9^U)#s^7Z}YaTo?E_k?`}4HQQ@;VlNcjNkyMv
zka>+eIHg&mgK?MXUg={a&eGQ&Pj=Cd%-X%;rDE8~5J&SJtxDJbkk9=1X;~#FG?~U8
zbLm6i7CMrzvM%7oQ-9rHCD7g)SjzhTEDc8+7dI|jH`frx%UtAcQ%{A~c*%eEhn^bg
zpG#>5k2(E4&5`MoAn?X^^!P?zKn5YhQu`epAMVoc at f6!VdL;nT*>*=3mbluRzP_i`
zfI38P<w`5lTl!+)ks-ja01$bId9IH_)4%{v{rm%$K=<N_QBsUo^9f50wOQJ>Y at 4^i
z&4ysPAX<HKO=D#qLozf~=*pOZOfOEVAWoUc&&J;`{vFMhChS at U!71o+=7dfkA%X{{
zw%s)bKFIL#*nFH#7|e0=p#|Iv^cr}nxUeW5^kGoNKPsk;(U)jMk#xupv2yr^vGEgK
zs_?!m$_Rc+y#TsypVQsg>iy#<9)o&K at VR~Jj$SYdj+=Mc88l5KvLqXV|74+N<tHn$
z=G!R|84#-gk1Ny!aAi5b-nTl*^d9<jx;uk^Ef*QrZ69J0XRcV^TH3jB#dq$4Z4Mmk
z0Eavx+OwkJ-9G_~dbR{kPwpxh0~IVBTMh%3h1b9`nJ at QFuLoR`06~JI5S({c7J(|-
z=-gxbgCjY;teyQHN(cEk?|1giI<SqND3 at Ps^K)1e<UEXrs)T|#klE?;<8!1R$rEdZ
zIag!Zpw0y$E0S=_*en}JfHlLTS^LZD<Qa&{JoG>dS-q$Hg1(e(IAA$9<!kG08$%r%
zF@#QmV9FAD0COU at CHp>Ww~Sud+V)j=qC>v{Sk_<sD(^W7ytDh{z^hphdlx(xQt#+g
zD*l$lBV#(_E0E~|!rYr&i|7q+ClrhydHu6}ZrT3$t)Q#g(AWFMEJXXf-h^cbi;G}J
zcl0{vj;l&jgh`>D-Hd990fuQOl9cBr3w|uTtFq)RG~*<;_aE~sGSa~4kXo2S;K~90
z5<w8NipwqXWw@*CCyV1z6g6p#Xkc*f#ES~SpwW0{0bNpO?~c?W;p+Z7Ovc#Jyb5NQ
zsArfXsakg%c452ub%QS{IMX$}TT>Rj-V*#5%x$k at 0+1a2$zgG#WL-^(dKhiIg5ft1
z6A%yhMdolOEOydI2ABrJqik&a(VHEPc=ALy{|kG05+HU-Vp78NVT_ryD>Hz&iN3aJ
zI{IahCv^ij!ziagPtR<E|BLPnE&=aspkpH0Uau^5{`eh{I%-P!dZX}(6YP;(Z!$Ra
z?l{MFpu}8VJwdenfjm_67o4RjQUvuC?0h=*X|>=kdDh<!xQ8gz6ivWb?a`RF30i8~
zBTC`Gb6ZtSF};6m>q{BQmbtaS#`*;8zv2Z#Y$KT5zgvoYzY_^7P%(AwMwYauS}L>z
zq%lBb6qfV5SW;EbIFai-H5i>2l7339fF`pn3{5 at 2q|!sWMLm$`1+v8VWON;+?_rTu
zX#5_$6HeGb{f$hvWI0*)N+-)`l%3t!ETHYst3PK>CGLTg5uJNpG76H|FEI=2U`07`
zlKp`_+O{eDkgTlAyVI^*VV0DyA-wAKDej!^$yl+%a{%~ANZpu{kcG=x!qajt#V<%k
zN$b~P5Lk#N(ob7DJ23&i=*2GkNdix(1@^Z;t|lsC>$ah2bH!UPCt<nTUn{EjC<JJ5
z2l?+MpD?#}`L4vK?((%+hszTzg=Nh?oqEt(Z7B9-qa(|_sr@^~vkP=Dk*&Sc6wKQ5
zOpY~@@DY~8YMrModBu}IY4$~Lv#`$7c*fcRe22)RTAcywwiEq7dHh1j^h$63?&tlO
z5PzlKpO=ukz(a?JT)FwVJ at NTjO7^Re#sd3MDQg$mvyHEtsG}H-U?jgQ`9A!_w^6h?
z5zq%Z*I3i<4 at pxdLb_?o*|8Lh1l2T+6JL&-E|D`8;2*O>S2`d!!5%ob-*NOG6ku`W
zryg>!$g#0OnRO2D0B;y}V$oEq1vtKBj!?8NIRI0Zo`g^0n{kbVhSfpfEy`3xQ~&bM
zxFEch8!S(k at LU6{^|YhJbge3>G6sDJm~(xIhxbZ<D`ydC#8ze(7O)T2=(2T(iunn_
zxXBK(<<Rs>Jvk^wFg#|nJa-}0dBPwwp|MGEsok#eTJyi6y3UO_3s|+c+QE5hgMltc
z0dz2Jzr~VEU=K8`n}qAJI$(QZr$-G+NHhJVczMo_q#z#~V!n25WfyJ at nNhkpz*_wt
zy>X9(A>q9IL;(4={w8;26(JqmDFB*Ze~yWar*aC+mQASUF;0%Xg at wA+3NY1p`RKk&
zGDo9fT!Q6ufj{vOC8kp#kA(zvW3rPbkfD)%Y*KYBxB;M);)G)FwM`pOsBv#Gp^4Xu
zr<5+`+!LWfznPe;d}G8Y_RPeCF4XgxOt3=(Ha^4<9_Cq%db@#<wGqAg!{H47tF8`i
z3u5G|#|zs}!R#M7al2^AMt*Pbvfr7MejhoUZZ<A(ETyF_g#d?|b6G1dLe56k|4GmA
z^Q3KJ-yGFDxi60Ex^8DcV_W-+Vzh;#;X at 1(h4oqM7MSU%BL!)E3=})ILn~I#e}o49
zZJ9LUrkhns{T1KKSUb5i%l9(rVEi*+A|)0vXy=K*qEQB0xF=TeZ!d)Bq9I>ugk(x{
z!O+Q+iI`iC$YdT;zHle*)}Wcudo8<y3!Rnrh}qmlJc-(L3;fG1lma4^i11YeK%66W
zbPo6fcfdPT6tF1&!M!^FYG=1&2d%WQD~|{rky%l!<_SfRJb3?jr+VI?J<~eNGAic!
zc!c|%qR3*@@OsstI5yey0DJmBHEMhSPZt{e>?v at y?&?_PM?j|MnwfQ-nsCWgnPRO_
z#O$9-<)AGMr at r36>YSmOcgdBZ|G%t8(ae<dw2i;qhX}TKC#pyu!@v^j6(sKKlD(Cu
zlC<z-BTvp|CMx9S)vrhNlyr8l#0J+6De?4eGOY7lUKfPI+ at 3-LJfAlU+wjP<`bL^b
zZNP@}i!<bsFW=$zT~ZA3p2-U`e9_vZxV`>nExcS&yA>AdJ|=lD=oT;5u39-<S1bC+
zwL_{n6Z&nJV&$?l1s7-&_^WNJu_BoJ1$KN7kQcRF at DtypW^6G%+f<blnK1ur*Ph1}
zAh|s(Y|%m9{nD#Qv3fk9kRsqoZX_NRu>$2xNq?&i5(CeBS)%#|_CK=!(fnP1c{`H*
zmuu;<#-#v9kU1^dHJT@{Cmp%}>SddYaWe|t-%w;p?=d+NX-jI*g81F<mpzKZcTO;#
zI=nH=hVq8}P#V;GVlJMW30jPe8EkiL8YSs$V?W?r(7$<Im at PkO7Ay)+aewc&k~M~P
z&3?-<zncHLT-a+8#=*hYd#su<AMes;gNH1K)l37Hn7RBbjMb%fTwqH1Y9MKzwXAQX
z9n^rGGj0ot9DNo%$;8?xX7kdlX6!{K20LlM!0>Mmu#zy=$7DFOY5uwm`W0|`=3kf3
z2%C!RgvmFHOVj&3$49-S<Le05z*ZbIhtNXt=c#t&l~$#?-xpxQoE?iuIRlzfMA+`c
zAcP-xhXDwaJBL}r$JNH7h;`AEo8`X&2O#Rou(1C&CBQzH=F;Xu!0+0Dr{@2?p*N3H
z?_yLh!$oZMqoJO$Wt<nO_>68384x%AKw$ZaS%@6x`TQ==%!C?K1p^n$4O;)akWpKx
z#R7pA16&4MYYgwaa}XvT!jUgpgWTv1eV67MCe2&v$ovDATo0*(Do6X<sQx9jGL at Qn
zdU9?mb2MlZCFXHfKspdIx0xXbv}aflPt3CT^w$)%A^HyU<|ZBy2QKz?=&Bgrd~{96
zWI?UnI!($%QZ~W1wkg+{)Mzit43$iJ8_ZO-LTBr}K)^NVy*=mwn=nnFB$zXM<N_tP
zYUd8r0M&&}smtmaz$I&pUA*a*?Qt6O8e;I>;MC)J*Lb5h{wW$$h at q{DZGV;ktmUk>
zczlR=ohx4yBJayB--u`7!t4jm*djGD77rsgjd>rlL!2Iha4WmgMYeD;zK-U#dXvV+
zSGS!k^Sb^PQIA%A%q6Rg#fO;xG9w=`4G>**@igJ=*gCwc=5DaOY<{z}=4LwVA-*2e
z2CH5sK?YajsFpcdmcFzn^hz0ez6={rHTd3^cVwg9RbAQLiTDc&J>=}Hzx5DK^1ZlQ
zco-{ixXdZC<50=Fa@>CA&<_5#dvHf?#E*r(6O%4}U9i~4<=3adv7<v6bFzk!j1!`{
z^QQiEBn*2_oeWK8<+bQzBCI7X9hTq|8~vHzv3$3!z2)4KsFx}SL}41OUQN;PDC<pV
ztdESw)V*?Dr-C at pJ42etC7JX!i91o;AZGd=GX%hPll2PmYWaF)Fou6~BjFx5PJ8%a
zsA>=$24%nYMkg<XsAm+cBjwpa2R82r<v^F-tK>pGtYOBV;dA=kHRG(Cif!;rwv$E{
zW(F+>#b^LI=tLc|6DWTOz~#gkK>|t&CkwEROiAQHV=^b%MD{Wb)!W{SvBb at VsbzkV
z$gJ-TCFgub9uI&{kABQXcBt`Q=JAoTEJ-+%x%ftC!Sw3m*=7L<V+da?=jtC0Tkmr(
z-ibr&xn)za5Aa>9NS^yorwU`!Zac-BB`eGq=&H@%?2^*$F!bMepT!%TD(T9GP|#l1
z=gFR1s_r$Hs57gA2m<<cYr;n2x+YUst#&Njy6YR}6ASuNzex!!gzpup|JDcF1{w3i
z>_vI7BpF<B%4DfW<Y3p6iUWpuJ;{zxd4SPlDP%s5>uOyt`^E-=JB~sh?)l?8<!i2H
zS>i!c@}QbW=rm=)VPkgtAr8b)LWtuhg2fYO2*8VY%GAoQ`UFN>DRXt91|^a60zxN;
zZ?t8TDa-rR at ZGXLbK}S1*EXAUR@*&&0n}(b+aIY6osPO at HS@a~1_o=it89lNDmJ0e
ziH*3NeoK(!D at WqOMgq!WAh-%4q)()DHsoJH=zy=1w`1+^m3C~3e2pz&?GHnm)ECCz
z8>zg!8`GQjfiO`pC7Ut-4zrD!(+g}ml4&4at2GWJ5!TDFB)bGwTVO;Fj2XgXW6Dh_
za>@QB=7dV%#!B~%%D?`CnrOK`K3b3TZ32*LJfD!1g$ZR4xZluqVX}$zL`j|a$g8lA
z{(_Q$np{-*M}bJ}^I2|eN&o`wPr{SwESjQ^=W!W#@_m(h7J7g!g9=yk;%I2i+h8z<
zniaL+_J{b-*z|YelhmXxs&EF)3_;pN+%;z|>e^met-{Yc{g}Jgw1(f>5-kAe8}T{t
z4Q%%S#%lQ$Zi;_6CXsoogjs7ym-$Vh_pWQ{p at 8jxKm4>k$YOwg5~MwLN4=P61K+V{
z3JnvsjhBE%msXl+bGJ+Gxp2tN+IWBE&ulFb^&gidv*UU|ldjk%$kf*x+^`-NA(&ZP
zs^`2sdana;(O*p3WkmXgvriox=nQ?!G at Dwbl(RW<wC$Vy7_b<(;s}<~du0G~1dQxb
zG65QGfc1WmM3Jt=y`;6J1g4C})w1@)Q%+a>2oOV9o!D)hS;c&MUsM|fyfy6!K21@>
zTErkKW-s`>Pod)3y$LL+!PsGh0rwB(qjPqG(eU}-*tg5ix*lt{R0dhn(_;`r$DEC4
zl5BqeBss-6rf~6cnP*Ef^8W(I5+KNoDsHXm@>pW|(W7 at +={)SitG;VTZyAU&P=w;}
zL@~{h2m>D0B9SBc^N2Rh)Tx9V#|52TFoP?&Wy6#`QmojSDnHw+QIMAbNZY!m_SX!D
z(D=x8haqHyZt)XEafdC2=UShI#cEa8hybVA3odatFcv&ZZ2nv<ACIlm5S7<v3&T3{
z6Sv_~dL{XvBzjq8Fk?UOY8K{0GMaS6RhwMXtSlX8e$9Dt?L{e<Yi^rUx~-rxeu%7~
z@?Gk6-6DA<{LlD^DX%-q#yU$wwbq?AtK8L%I`fBqVVvr3?f|D^q*xHYErA>Y0p!LD
z8Rn+JtL3!vfH>-lNoGgw`)q&nQ9}IU#fnv{Xgc#SibH_z@!7r__|--K-$`|G{Dzvu
z^RNHj{ONFbAKOv1)clEMQdiXhBLPK92%`m&Uc5x|0gb4uLe1IoCRh$WotQL`wY1C3
zIS-;<!)a3ivTQp6M!^(vOM*5F))hXun7@>&P+}q8+bnbn at vIS7gXO-Z!)H-}HL+JK
zcfO}+08K at DX|vu%fF?vRGqDGk5F5O$7iOD+=`W)jS;RvPM)k%yfmNF^^pR!R@|});
z3b{r!)~*Eq;xC~-Y9^9xBBxzL6G&3tlOfsOa{oBztDoJIY&FR%j)2>n*C%VseAZ97
z=^aAgcOOb*Li25Ll9<+Qorw0}h8>3~;N92v- at 2duQGFs^x3egZr%kQ`%Z$539lZV$
zEW%fz8PUl}+=n%-dYyt>dxCIZU7@$5 at 9-X1c<G<a*!)Lj7kQGy3`|62$zBU96%$6l
z{wwn at S+2eWvX*^V(uDs*2Rr$*i^x84HWCVqG;c2o(>q at F-m~saUr%aKwWCf$avZzt
z&u71(nY9|B8{B|3yl}%#VSxa;faho(zPZ-SM;>S$+M^G$IAMM_ytO|UFr7a+Wd{Ya
zEl!i6A2P#MmUD3F>V_9AEIIDrV$OFLS9#PSpPpGX;}X+iZCRe*!?rW6+`&_O|CeKG
zkd#XCTKQ4so(KmDqLggefL9L$6LUDoUu8s*@3F*t?xrOvJblu)FJFvkMGY;)Y at M04
z{X~HPD2QM~n$#8wIohE6Q4?dbmiBK@`uk6JeUA1Hg|5GAOVh at Y5%u9mCJ}(@56Z9!
zzSbqI@%DweyJbf~$QwSFl)JqrVg0~ug(uOV%jBZADa{W3aTiy+4YwkfEy>RLL7>K<
zWEC~^PjLDEA|;eFm;;?{Nge1eh{)!ptXYo|c<H4J at Gr<*Z0#~4am6;sto)*Q(WWkk
z=W-BB8`p^EIHSKju5is<jJQ+WB-J8m#ArisbNt0E#=N-G&;oLoBY;b&o#)nhoVp%$
zmN$~cc1TU4O6Uzc<{j4pKOye(=lDplR<<fAbW=UXWVClIXST0QrZ|C)FYA*Bj2xGu
zd%U0`4{xS3+s{j077DKP0KrNfIxj$%Dth#bd675-{<tKAD>R0Y=764-M at fiK8Q|nV
zv2qj>;&Brq at Fx>;0eLtrXmX5Ofj{oh*|Z|^J1`oZ<i>S%f>=<QCxdU&C9iVieL{eG
zFVV&?m&r{+r{^nRsw%zIreKjuED0pd0;KamVODSlhpht%$~nJZCI<9t`*T1?!w at gz
z%#L6F0Q{kV-zE0CNVkl4-Dmx!{rFem{VqGL2jrJ@!B=wKH)!*=XNaT<-Q2nzz9A{@
zxX-pH*iATIQNr2ba%U8S$}+c6Zy|Zn&-Nm^eH<QkslhhRVP7H!*iecrY#H!@)UoQz
z at -5j9ZRywYxM;{Zg|Hj4%)m}cO5qHTRhq;&xQ1tBJUuo()}@I<4PE^?zS=eXDaxZc
z!19NoXi+9cD{$8EceLEkLdk7yAOz%hydp7lE at Jpu>p#`~a%<1ru!w6J_8i3J#j59@
zGFSO!^ZVe<(F*0x{4tAqSo0YGG at zEwu=yW0mHx$*mQlai)31Dk*I9s651~0N at C<<p
zk<Ml+x(dG?s_P6U)c^`W^}iCM1?O2lfmo05kBxtGkp~aU=tvIlPUaxS at 2+|vl{ard
zA at iSgN~7_ur>Tu((pjQUka4!lk^8JG97?T&+$EAZ$2T~W!R)D5x3A^G7cgKp)G{0l
zCs+h<YGJcY)OOc)y>m2eINQxoNGw8w-8CF-;T4k<n_7c&gp8otjDregtRkC*p$v?K
z7Z(4o(E at A-*WK|P9L!??zGSh#Gdl-Nl60VC{8AuP-74Wjn1UkfV4J|V4G*Q`Pq-X8
z0q^8&hOCE`zW*|Wx>jZd_4*1~&WqH)i-RX8S&M7b#iDui1Cf2F9=0V~0m88`lQ670
zp0z&XBIV`0X?T&@U6eYBhwJY?aC6N~Z2+juT`Xrg>=2IBSf%@5j<hIgUKRo|wwPUy
zn)_l<K7((*2)J3Puao?A<t;!7IWF@`-kIhhLC5)p_95%fhsyDJw4pR?ksM2Im<L`2
zQyu#9aA*-8be-LG^Q4D4{kjmpD`ua1@>giHjymB~Sz8A;`a<GQPb?eeIROm)VVjXB
z?5lUK)<r$0F!P}g408~YEOerH;IVmf|AOMzTotXRtA30uhV;b|uo#Bb1}vg{wQ(>^
zVbr5o&F(oPeqhC8&U2UzX~vzhq=1Zn#zgb8oB at hei?jOKTcuN0CFszV*UCGi>Ju-2
zDWFh9S+z;DLEk3bG!{ae*XZ=C)hnq%Y9TfSg<>Jz?auHIJ?i_H3av|lubP^@GkVf9
zu2{a0J*fN9rRd=cIJ&pR3M=N8zq9%R84f$6NcpE5>Mm!>9Mn^^>5pKf4<a|jjvf}Q
z3EpGhF2Ai55YOG4hAES8RfHK>y9XY~0$OtgN|AQEj*YphSMXbA6I1iZcpLqm(%86I
zsnXKFcj<*ksy(j`Ih(YF9Od;vGlUC#lc5&LEyv;K%^Ej0-1N!v%l8feed89q4A~Lf
zTy%SmR;Q=-yWLj>uNTYn^1#;s$23T|lIHKz*YRV0`Y!IQp!)L at Wf+Zoj;-dSs1mpn
zn#5`A7-HqUuV}QcBc{`?j_LI`n)TXr4H;8Rpn$xzeLk^sX9U#5boBMJ&NB^l1#oL)
zHmxnO=?fgaK#LVUL$!O{UP_4K4?7;rOFrR4=h%S~x1~fMlC>TPmO{#A9Jz5Vrc2PT
z^e8Hb=oAPc#KXtYej(Jz>}3fM)2BggHY&0|BgJqR)H3EWwnaiD`}^Z9a*$f2=)`uA
zDC`H4#XH8nQ at Hdz0#=;&dYUDo+Y)5~M8CSYsxzUM6EJU_@;rYk3YXi(y><lu?&tys
zVe&9sPo|9Um^DHeD_BHYR&<d$)CP$+G^Bir?x)lHS=qRPKel46aod?IX?R0TaDloi
zdS5e-W}_m(P>~gNOR6{zW}!co{<=v$qzh&Xbhkbe(W0hnHqvt%yBC(Or0ST(YqT&m
z8QOe9lsGF|cxf{hXvJ3GjlsMh_ at LpHped}U-=Fjf(lbjfu}TPstN6V850mX_KF+|7
zX_E#E)i at m=sH)9eC+hF?$c&eyp~!RZtm5MlExb}A0nqUZ2n()n{Fu4JhQxS)h*#)8
z%xD!UxhFVeLA$elUY(YFP|_Mani5-X$%P-Ji0%xCXiTI2Z{%875wm7D*oLFLXSYpY
zUHv|AMT at Q3dU*C`Rj%1xhSa6+^l|&a)r<&7r$$%^e(2Sq(V-V7{v3$;IUmexex;(x
z at F_W=I5z>E-{YQ^g}`3MpD^IZbqrT8KQkZ`o_hlBaM9jdL7T)nw?_LwRvt+6wTzkO
zefzK}UE2+*W22Xa>-;Us_xwi!J{YMxp*|4ydYoIOXB_>2KO~)BYUd;e^gc;i&oO0>
z*r0X7$wyjl--}fs*$G(w2y*ZyaR6fLzJr0Tg{|ZsaG87pZ4dLV88_ at 5B!FGhtbqx5
z68RB4c3Bm2UQGv6Sc|#Y=+i+Vo;@yoZV4*>ynA%El<9m<-EubRDS>Oo1u&lfzJ5N#
zv+a1+67j*sY=O(et~s+_IMeHZ3qcfXmhwo4SexMGlr5$Gz8{k1O0rMN(l9``U&$Qw
z2V&LH436x<kq-Gbd-r``O2)GVo(Nt{hrg(`er7zZbQ1k}^TzbU)3j+VKOv8R38#n1
zN*o2w(>19F6>`?ZqY`q})&)PzAiu*)Y06Lai>Kk<D|N7_^IQ2!JdS7ns%u3wzS~p2
zWHmMQqm*@?ogar#O6uL`Nhzl<em7;rl7?g?kOo;+m05l59)Q9$bmfelp14x6L2$An
z(h?8Dc!O!~dj#z=#vT7+KA<t(%wH-{jaZM{G?aK3^=M7#ylNMH(t;aEf?Ipl%lt}u
z7_kA<VI6DBb0E{HMDZ>Di}wS-|ABJdgxxNhdF1(*C~>U;UKw|JM-c=dxzu(*Cl(b}
z_EgE><>QoPn{>eq(#x6vx<s3+4L!OFNp$lHQ&=DFrUu)8Cp4^ZkE)4$a^I%W)MpG>
zFn;{zHMC=;(REl+%fs9y44mF%m7in}oBe0IJ_*{-UHbK0>No`3sUfEmnH;MAb9FaL
zz6w_!pzncfY8axt5tyEIgCNR_{vtFn0FpTL!W%&1IdT+{gZ=idcp&t|SZQ|a<JXVT
zyaI)uw4hdOOx4F2AX&`%qfraZP_xO3W`V5J at iJE$y7y6|sIR at a^WNl37el{PD1a`Y
zrii4n2{nJ9dPy7t at hfMZsg_k3N+$4av(rd*mxo&Cx#S@~)K0HtjRz3GN%?w!J2H8u
z$Ks|1hJ&D2FZ2p-cAWXOm8of))o8nb?sqG0yMU7^Twey3G{lMhiqM^0OnRXe+c6hq
zbBD8873ixTGS=}oxMh<Aw3ua&BaZrtien3hY-3m8|GJ7}F at 6`<V)6;z%zDk)oy4cb
zs;&XF)*hii)frt=I-(wo$B5!xbcRkRv!sdlm3;KI4V+Vf3-O!{iR|$}od{`^eZYEO
zv9U+}UpHy`%Emgwa#Wgt_WWjn?HM+!6aJ}PW-|)$KRWmXKe43D0I5X_lkS8(fK1mX
z|G5J<Nc$nZ4~rdre+Q0Vvn~5g87!7v1wtDkub518!I|WW%#?ACk%fdW(HbLUbOI^V
zx<2;B7XB714Oa_|9+1#y at yCc9Gh54%xRwMT)#Y#Pb<MfiumIQrlZue5w1uOzBH>Fk
zY~o$42vPaxq?Y$F-cl-~bi<C6N~~c5<A_40=OZ&S^tgvB-5YWpsnkJ!quPMiP>iWR
z8e)!)yh-8Z!D_FJJaWJGBCYuZ7v&8-$QbQz9dl|yKBg90hW at Qe7Ny)$$)G<4U1OBA
zh76)?ESW($%IBffRGIsrGO<}YRhy~QKsI^Yh1DBKc=?89M=Dx~ry1oKK;FdZSH;yT
zC>`~Jc}NrcLFqb2U at n-biS1dmofPV42dA@+-h+lh^YIE at UisX?=ItDYFp<YQSMQT_
zzEZrgfK0C7Cc0DnTLgF<Fuk|Ra`t;!r9tx3VWSw)2cHHT+8GMis8tQV0^;0=LjXFn
zZlxtRR-yBcPqwg|V9VmPeSBKFG{b$K+lmd&P?j#ld%;)|k~5 at xocij1!^OlKV1$t|
zuVd5ez~2=wy4fIW+!SxeC5QU~O4tKO$=#AkeJioFPT%V at Uwo7rMJr3GET2s~u5yqE
zRf1!B7fUiYv42^;duJekwYcM!m7>Hm!AI8zcEk=bU^cZ1_79C8>6Ww}nMKPZz39m)
zQ7;8rt6sz~ulHxgX$FL5j5{W5Z-n#<QZU3HcbW8vFX5chnjLnkLj5uep9?T*Lw^L<
z at J$^TRUiC4`5fJ};;3oKoTS7!RA=HEXCU0f>N_kU2iiaUN;TNUchNM^Go^Lu5so_c
znEMN^exgF=0yz<8l&8*Y;v39x=HAatId*T6qo0!v4<n$twUpEqDWKh^l?DZT-Q9<`
za$0ysk3!e>^u}-BP;+}wN`9&LF258L3R2g&*u+8s*V$#&Pl+sVQ+pNm7r_ at 7qOEW<
zFC>xJ32nKW<=$*=p-y^(F&;OgUvo_6=bTct3=Q+yjLe`yr|D74*TyTi51;qToTzT?
zY*&)MEh2<$cQ(bTmC^?~CMt%w!4FZ2dXiQASbDbw)uDu8v9kWmd!aLXzpMLD4Stuq
zr3Hk^_N2;)a{mzW77)*nTzY9XxNmQXMADu<{|a at i?{B)cs_B@=SE$k#nY0<Uplalf
z%KBtOVh(1V0uQA~xly3px_Nxm<TyE=)0KVUlFQ at jKUC~=?5(f!eEZ)iW&EL|5|xDe
zF9#$zjrpPj8~_5fVj-DUASOmhH|F8 at 7ASya4t=cZ4IIC+tI&(HJ1D6Yo?3-<XUR%O
zw8+v$U>Ce at qKH<BAeN>rMg0sPA{;uP at a_M-lX}@r31lzE19Wm$pFO4 at vvv5J@#{rS
z0U(!V3Wh$dL&(HsB7Zcx2?gU)&lwDM+_ZgE)032UUr}~8r$>zfzg?X!>akDyz<1K{
zb+9A3-2`1^RlmC(j*H_+tESl&H6pF7PmLJqJ;m*vP2^+^cl<P(U<TaxT6Mmxd9 at e#
zMO_B%%;>?<1ISQ>0{l4da>ZH#I?WDiE0Z7NgFrgxo5_fxcP1Y{w%FE?;4U_m?$*`A
zgir|x+P?_U-2NE0Co}>}ml{vow)ve at MT8lL=BlPEi$IR&f*E)o`*tgDwuJphy%wTt
z`V1gLE7w~WUeLc?cfn at 5xc%!hk9^a0GHKt|9O9$YV%j1I#=-|^=Sd{t`G=e0fgFJM
z6)1@$NcnribdbAY#r2z)42tUUF{j?&fon+4SgelVrWEUZU~T8ytgAj1;|b<k*3Q*U
zE?l;Xr-+IvzT$IOtjXMnFX-DU;v^NR4tC_GnW5W5fJGI%{mO<8#`op`hcvH_U8>sr
zXS*eg9<l!WK7Mg82C9rIa6p1-!HHrt<rXtzO6zaRx7(&yM(FmiK5Gfb%5q3K at z0li
zEw0?b9AA^nHd!q`2?c5$Ttw>MPgE&(+B&GM at kTmbI2zJJGgxO9-b6@*Ar-s&NL$bQ
zz$F*zzJ6y>w~*=9zfFHto|9vRbINY6X3}cD<+QY}!t_SQqwTLlJbPT3YP$e{c4z$v
z+pG~Z%Wfrr>3uLY&=#aJ)23$PW_G{ChWm}}RU*BZHS7s5JC~^hk^1ocB;o at n&_%@Z
zoLK_QZpx;Ogh}&SvO3s_wJ%!I&ZXSHu3_Xkq~my4ky6`@yEx(>MgX+wA73~ibp*kn
zv0djTZ9|mQc$|jJKu1an6SHu-*W at 7s0sc~5Bg#ks^K at w+&T{=m`t7}{j32T{%UHLA
z#_zs!cyvETv#P>e<hMP;SVwy at K!I5aFn}|f7Fwf)tabiAmXDJ=gBYvm3r=!v_fp_T
zeMBHc$VFICb?PV&a4}j|7>Bt5|2QqbCys_*kRCF5j6kpk>cl>cS?ko%Epq$P;Fuqc
zWst8r*G9Ys_EtZ&2o9A at P+8;gxoo4^OnIg+MbqbEFKE;+=byZT-G*k_Bb}w at l*pCk
z_|I{1hLQ-CAmz&+0>P1NbjFmWvA)x4^R{%aduSo_)4&w)60d0>q?byP|1rfG_;mZi
zeyP+ulMSp6?qMZ}2aIQ>;`iyNg2LCBVe9Jv=|NxvNGlUxIFC_|&#-;C`Xv}D8KG9K
z{8Z-SY#%Wx^@w&3^%@w~2#WEz^&IN&73A79ha+n5vL|%2ag`_}<u_z_l_$*a*u4O~
zBpQj5+dOj7SC12%Mu$I#Zchc`3 at Lzx_<-)`vDR9U0OF)@?uEQi(56jGMFXi2vk^(O
zi?h5xYwjc!_mv#SW8v5a3v6wywkt0J2G7sqBh>`k^VDB<5HogJdErx4^%GY%!-#pe
z6xnshp-<nUB?&=3jW5y+p^SAg5l$_Z>Y<m+TmXrAQmrH{t^igEMtj7~i^zUfv at r6g
zprZH<<zOiQKY>=G at bE==zx%UCncsa-e>A8)e&ER{o}|i0kmK9BMqM2P<Cr~Pz{}R1
zd8Z-0!5-85B{J8x$fem32VLnoR&{Z$h_RatOl*A+4lj%}a0iJ&vS5g1lJL-15GkZD
z>6!!<cowARq7z-IQ1xypX-rf|L?{<*#Tk5oBiw!V0%e~J9skQvk#EXPWN@@<+}>8l
zcop(u7oi;ITGisT(Fl?h>Gae9o%x^cMi=W~2pI_vnY)8S^?ZLEF))E_dC}eXHuo^;
zN6uaVsUMp9`CjKkyC7|7Co3L;RztrU0OFJ&YO01WAxJT1vF57GufGcc$;Du?-xs%l
zE7{Ee?TX}fICk_m$4;3E|KuYj3d9$BV=pG!x8?EiMy=N0!`uK~tHEyES24aDefqBT
z&mId0=jIAQ0E|`O4BUq9?qYS_{<^OGs}nO|8a(rk9YArIqwTiiS`rUj=q57&+8nae
zbmb+{%_=t^N;J9E@?q3ZHs2*R&-sr0ax5a*Eal#t`iZj!>B3X9Ws at 1n&kVRlsn=vQ
zzABQM%D6yymf%`lI_6m54$Mr_Za53JI^tqi1>v>!e5Rl9?KI1D>aXWajrsX+yjSsR
zQ%My9X(o^Nh691>R$vG1QltNFh4LDJ74{o4FTNm7(;*hk?v|(ja9c8|g-eUn5D1hm
zFMDtv2_ejQ=r~Ya2rN7g+)A3W_7eYoc=wR9)>Q-mXV)tM0=3TyQ)a50gv>#{L0(D1
z`ukW}MC;jTjYHCyp>&5;LRUOPP6<jzqVVx85^&s5Er!}0%7j*7+fhnGUDVths at RjD
zbL#gnL$Kqa9uGIz8gxNIMep}PGfOkhZ8dm707fv`VYGZmEDgh+XAv}l?umCY9T(zI
znhOKOv!<newtU5NC-YSz4=dO;7m)H|J_&<^4;a+206GzG7F5i8Zy;J!B=;GC<m4S^
zz*V_lNAtR+e}hKhA&a&5z3*Lxq1bR7woP0*fI4h(BWiI&SwA=fUh0RDZeTD<>ryVU
zQU~o5k)v-;eT+;Tw1n1Ltc~Jv4+pbHdA?~HR)^S>q;9L7b{$g(6=SB(7f0If+iTuq
z=#I%?`QVHRKRd*FPd}_($rQdOD<{YgUFN(Frl<~lTTDt-3_kEdhc(m6(I5LY49Q(#
zuEcFS;01nkv4&v%12wEY_))&()t3T<=euGAWF!0r<+R5x&xoW*9zn?6v;BR_)nyV$
zYa6!<<+%0b#!LqUJ!Bu_z5}%J+tb(VP+(<e at pTa@bDb$>D8B|~Q_yCt#V)aa806{8
z(pWCQJIA^UN*Ni8%ym|Qe7Z>yt*I#&iS%|@uFMio9KaFIGC#5zNfobOf>Ml%Pitaz
zA^m8xdTLy~-tU8{KCUTu at xr57+CM*tuu3DrJ=AHY2G5EK at d;>m7gK9XCzin|XbJ%L
z-T;2 at y<t4R9yh<e1jrRqrRwA<evT`#)@Kn4u}xY-yTQuEa|doY at hO1LfUgJ|i4vn!
z*87*3FPTZ%J2S_oshRdz{g{SDUCBrXpO!#${aN7vAi)p`?gTT8njo10C7eE~(b*_h
z*tQA^te>Ze-M9JM*i68?*zKiH!<RNXEoAlnA?>j_#CraeP4?g|H`J+h$lzfQ#6IPM
zP5c_~j$j%|D}IS`T#~eS0c3yX1cVvqZLZY%$}^(Q0QhHCP`jQRJ4jKVeMKj-^>0{1
z|HXPkQ+n$4x9b0D8 at MDXKqS+OA+xM-i(+}ii!m>Y2oU1rW)kO-w<ZK(;*pyXG39?8
zH1)N2u>zD<DqDuS(2CJx*c+tniDb`p<dVfe&@=uMt|6{1?JbuA^}9TREhhdv22^><
z^tZ<Kuou4HI#I{=3!xbe>RQA6eUew%>bF^Ow83V%m8bR`9pLiOpE@!l;Z1z1d!j-t
zJcBmkyvtIPNcENL#QDJYy&ml$H}YL5PVBfgTxsyGeuy&CHIRRL4(3L<fi#`E3kv4E
z^eCicsF%NY$BHfd{2QF&b9If*ODlxilk?wjv8%I)k{EjTP!zsB%L at Rf#Mx<i8Kf)b
z`xEj5E6!@#MtNL|NfkJ<!?d!EKzq7K?^M9+F&2h}=kxpsAnYh5W*}fM><o%S5i+-3
z9${QV?hGvwKin$fw^9ny<J(sBlw^`CNS1aUj3a`yL;%UZ57&|*IZAg=X<Kk)Sh(Z2
z40=$8J-`DI{%@H~0X;M}SQk#{s}<)Xw`lQ<b at XO-0f!^wkVroJyai^rvG-J+m at 5ib
zpUL&Pthk3;WHFFN?LF$a5&?awO4L+|oQl|ZSVO5~c<u_aIQ-<OTyqQwFN;nY);Fa)
z)Vxo)r)}sm034-_s|kM?&~*_>UsV*nN$*ocii+h|QhUqjNj~e&{9)@6)Jcck8&vf0
zHFoq)k{2_c3HuU1n-3T}mwc-u2@#q+<=YdQW}ow`<%zv_CSTeVtg^v|gPCN_dL8R|
z at Kz39BY|7MyHi>X`XB#Sv2`4G8Nvza6Zv}JIwjc6?^y15d5Ta;t?WMKeafXW<#8`z
z09+x(uGc6$J_^$~64Y{dSRG<SmRTlWQnW>GxB&1wR-;{AgLINvh<Jx*p5@<DG&Hab
zyK9hxt5LxjCoSqsa(c}RJK}}}_RxLE1?`U=WJpVIN_HY|FdPD>7?-9hb0yAo-$9uf
zx)sW%ua+JKm9LVwYWCWZu>)K8&KpIa045)0$hA#avE~rUNIcneC=}&%OcY)2n@!6}
z&=N*-3D@<ts8UPBG#*{aJgXl!gn4LOj{va>xZ;+uh!%l`G8&aOjcfXRpxA&fGk!Rj
zQge54KQ>siTL8gh;d;2GDi>Eu<Ce}pkFh&VSq*bahPY+B_2kORy14%$6e~aKsO9lx
zjT5tO at PsxF%Q1rHNz2q!LqYf5jk+hJn<~+T$g99ricD2-WF+_I at aN(HjffA!Gv8SU
zeAnf*?;N5n12Um}P(V3VTG7uSPvBCo$Cg#%9UKbo2258u0TP%WRf5f!-c9>Dnup3T
z0o4`SHq*%N<N7M?PytN*4L42PU)m<do at Xg0Wo#l at +7Lo;hW>(t|6-$PB2w{$=yTVB
z1ZHdo8GiHzFKxG_W)M=l3eNjUkF@=H%V7<)V<*YK^N~z<3I%U5V`(z`!rGm<{>p-}
z($CqP(j>=E>3^^4k_=ZHEWT?x$y?#6hd0Q$tbRNd3p$pv1d6XLlO2auJ(lwC>t at xO
zMtgHf97rFCXq(b#wP31yq#$LB-W%jaOK?b)V1XV0g0#|t%_KKGEi^is?C#A=2wI>W
zd$nt}D}Y4aQ&_exLKPhjIu>>;5FEH8F!Vh)qQy~H&ZtPe(LH><Qg4QS08s8|F)%ZR
z at uo;kCeiP|Vlx{EU!_O`LK-A9c~?zIqi<0hji&VrU)+aO2tD?P{yKLO&P|HBp*Y3M
zfY%ZAZ at LAoYMiT2B^l-dpH$S-EN&SZ8>ThcnXDXo^2zv$psT$wl&fN>UHo;bt}xqk
zrnF5UU!Bjn-zpO*LdbZ*c*)wM3 at b(6Y`Nat?Q2Xvso^9|lb;I5SPNJkvJmHe!orjS
z$%v1tdQ#t<^Gye4pW0H>Y4-tihQ<GWq_mXGou3G*vcp-)o>V0cRu|cDFi}y?=Il9#
zU#lu5%Qh$vQ%opiOR<Z;w^Lr99M$|63B<OiRRsn`-i;PwTetFpdfseRof{L-5e9Qv
zOr^qqJ-_tDBG1<J&aT*#SUBiYlX)pt at 5cGOBZqHO#?3IV$1ASL9I*?iyp&sWVa>fA
zmxyVY&9DHG=F!aHLI>%5d9n2Qwy{aWIzIY-gr@}`LRCGjSC+Eh&J at 6r4({NUzrKTC
z8vc0O6E5u<2ATXu1=v&88WK_StfmviqI*yfedAndrA4X@?V^G08o0#EgLvQUU04}H
z>`hHaSRCJ0viVQ}IimX+(>-7gL>8j$12BjhlNcC-F|(Lx5Ha_6TYnP5cD!o<YM2XW
zB7p1bHl56vSW@$Ce?)JHcHn~YV<?3L8L#n4aUV=i6uxZiK4j}LaBP74Ew%zjieygo
zwi2MHkk`!&Wa_j0oMhm5Li~B2PWli;m4&%Iw|rF}*J-fJy{hu(R5s-=^1APfh+FXZ
zuB at -%uR0ceCD=O6fexJLcr-6NLBK0zK22LW)^E&?70_^N>f~JBLT5sPmw4QmTS|ss
zEPFj1UQW at 99`0ZrJLT9i+3?bRA)m2 at Y@DB9M)vwQlRUPHahelL{#uSSk;Bhh1m#Ug
zEF*Ad^c0o!M2}LIqp=7tM#7$Pv9rE77t2d)ujolQv$!8{GLzs@$o9^=So2K=dToW2
zr2g1sTA8;AJXv`?TcSeBngQxlf5ouV#<y9Rs55UD1S!De39ytaH0&OB8)Uv$%f}jT
zk}J4G53&fdz2kLR_O%CWz_zBe^z_rhrkLQX#=N#S<l|NP6OK+x2dRmojhuQcD+szP
zUyVC#5+T-QE(JjBX2Qp^G`tzczP#b%^tUa(RB`0wQQVS$ne!GR5s?;-iNlfcNbMon
zwyVPS`f1`$=dJ&>8&oW2r9Oy9Efae9 at Ixc*pEq&rT=WeRyD4$f4oCW9^W9}i32LE@
zQ1 at pRpuiLd$B||cs<WbK_Ge4+s+!vE256qnK9oe35rDQH#2{{C at 4cSjf6MhgO1?g5
zNUK$kLA_W`JxpHcq4_CObedQ4PR&eYa8+;F7a4wQkX%(`VsA$I&(d-E-pythGA6?5
z)a<N+4PX>G&h^M?TZuaU+||%ctL_T>n at atf3nn0HpJm8{iOY7xjH1?Row$y#vy*3A
z&Xua*Z)Mc>1(Didl2+fd&6+_QL=7n<%#H45{G^s`_}DS}w1t#^3V-Hg8r0CVB}hjI
zAe1PMO^Oo{0I>}(yP78(W~Z^TpR)H*3+Q7&snI<NZ6c$$EQy`6+^WJCBt#kwAK}wY
zr>}}a&+6FZkYm^A9z5oT at yGs}udp-<2B|m?NVu|6uqlBur?dt+b-y at teBOFXV^i$J
za>J2hMRGgN+pBj+K)%;SfoFqwvTI#v4S(nNj>Ccis>%6ZP|T$XH5g$=pFH#*F_3ND
z)nBQI2%-ku{nu=5OpUL0j5-bi7i$rKRUhMRc)U+vw8t9%^iBAv6$%^pT!!J}A7DJf
z?KV?wH#>q_s08|2d+$u-<^K|`Cf~6{g*yQI!8VKIo`O7u at 5By6CcL?4g4gI(XC`|r
zo|2UVeV(WIri4yT5^0p#sF&|?VKwg|)v#jYoO(yb(s&aHrK8=#BaZ&+*?O_l^sXa`
zn44n5)(KYw5A!kWL<;s=x%%Wz2kwNkB}#sjtJc)6vU at 5m$9_erJSk<$-LKIJ=BWL#
z)?v<A1&Qnu99Vu_AzaO{0;wN_u|Ghjsdm!#$OXwkjGF}Ca35);*lLlAO&WPzUFyew
zk<17F+V{(qBMFFMgcgMa;Z-YTQ9XN)dU!_tpxfe4O9>F0S13lO?}e at +o?-O-2a><n
z!i?9q{`(P0Qfbdn#iUAwHN-OE6A4t`O at sTD$_Ik3VWI-aFaU}N2qa%@McIFUk0$Nc
zI_xuv&15*WWnZZwxMG>K$-+=+r<U*=J2jd02nHoKArrzStIm2dqI4VcEL$};G5u;2
zrF&Q9U0m*{9NIae957ZGw0=oM6^ryM$rT7xB|y`!4*J&ZFU-68@;1ov&ccf~I}2D%
z=2OGKC3RH(8)5rW_*t=P$bN}Us*n*+S=GtYoz<ZA`ZtU~xf?6}V8W4=njDnv{detZ
zDLa^zsz^u2R27xt20^J{sXcV`g5t>`{YCvw;+)Bq45?&K-T^*HCRJA6`Od-uckU5H
zH<MWxZ+zjaleieCv}B;PZF%7%mzR{}6_wtEUDk)&b7W!E?KeQwZ$FNsP>7886|Qwv
zt3aC+iaj}2O)c2W#*Nz$g6y0rR2jOR*HR<Uq~(>Qe+R|6?nBAQ(j at G<Sn9YZ%fo{1
z%?68=<uVRlg!zNQ0LT%CKiYxy#b572M)9XfTC)jeC+oL^YGDd3Nv5A2POevrAuDQu
z$CKk#c$9MA9BwFsAd_$gRwryPd%hf4#u`e`_lusvMg#fF&Sn~V6Pf7jzEj?(CV9uO
zsZAEA93Fw|K43Akl>V_g|2(zG%Rgtz;qmCY=Q2+Hmmi3v(`Fp>{vW0dgEL%!8OB?3
znlvsHRT8e{1V9?o9yNOKRrsD{w=TZE)QBL+1&XyYGEdvdAbtZGMLUM;?EMw4vGZ?A
zwRm(H>{nnIj3jc<iJyJ(1J19$BI4;#A_;qDBh^~=(t8w_YvdN!S3<6~-O8N-&TKva
zJ$+>zqp at nYgi|Xdz(*SYiWI$A%ne<)^83xd{`BWHrj~aUCy6h#g+9zu2_AI)GmR^#
z#|BVAhMMd6_qJ`X%H~=~S at r2E%PF)cO=jBM^w<!i00Wi!lM%1kYUD@$<Frq3P_Nl?
z5#4s`#H!Y{n=?Lpa2(lv at y;s3q?4}r{oYM)34>E0MHw>xQHkk~4!HvIwfdbjh`x(A
zxj+OT-^`%jWOQrz?cZ#`H5*;mWRmhi>*d2IV}|*F1IvOPrj|IE#I+!h+H=_NLluf~
z|9O~{^!=N5GZ>@kL>&2fj;$SlSWgj1QZ3qjsH2__z<FD}(qY9y*iny0;&nB6<hKY6
zn at Kp(4~@YeIJit+k6aMWY3q0*l07$I&!^Xv{zqUaJ%cNj=snD#dDi-g2^Mv^oBolb
z#Ih=oZE~jH#y?}bHn|99xM%kt1yPqtAZyEb%o2JwdR1Oz+W8;lG)rZ8x<+Bl;@FHk
z*`C;Lri+79HGJB0HS*t|B?`2RI<L~w(|9^x08W_77f;JTw!MNA=I}rgNr<9lsrl13
zheo3Lm;g|q8bk*^xezoyzPa7|j(PsEh-E0&uo{aD8L1(mT{XwO at pP(W!%veonux9r
zlY)2A{^iCPA5y)gJ6=f4QOu}a${1s$s3~IqjhpZHpjEUI>WqC-y?~W?nuKy2PnktG
zIt+uZz at U3>K>iPCrhiZIOw<JKIT<?bK*z1ljbmx7_NpVkfrX3&D5`d=FKD>(T19Um
z{Q2PM^*1kCv<U_2w$f;oMfO(LEFibgL+IPjm+ at r$Mue_M#ND4HHF#|Qo6BZ5Xyh4<
zz28=)!l?p!2tM{eNYc&|0%rRKy>wxK`#b%l&f<4wVm;oLn(@!d_u9e6Zz>Tk1+``R
z8xYfhd_8i`l{6|s))MA%N9}QOKFP<SQ2E^}*j>s*eDubsStm`Ia#Z){N!QA5>%yO-
z-W1HQitC?Py;$CgdWn63!w=jFa|Dk>CuW0BlL9Ex8vpG1=<Yna<2hf@*I*wXI$s;H
z87pW%K>9L$psE14k?O`Y0BS6H(DP_3Uw&&6?34<bly7jh|NZ#GIdNT$L7QVEelR^b
zI%wI|6w!`~bh|-_Q~UUBZ!13GcBwR&i{Q9HO}EnGd;01ZS(Cawk^?&j`JSK2-1;3E
z*z5;oF92Z5w?80eoxTI)$YLCA%z0t@$@w6(2!z;~_vFev_(d>VGp{C_pWQUaS$~WV
zW!wix?uZ#Al!aI*iaCqtPqCa~t(_2Y&aSC|A^Sr0;w#GcW%{fiumd!I_S#w3WE*y`
z(vQIL$)<_fYpkdbprW>JvcTAUQlzhpA;l_$IuDKzORVm_bTkaZGouYo_Kv;vf}Vgt
z3sKJ}x34Ewc%K#UfSpaRZ>zW2K?qS~J2J_v9qAKWCDNpk9dp}?;2A$t#{{mLATso-
zUAcDLsWh;(s01lWYs2MPG#g$uMV{48$AJ4iuCJ7?`<)qTNsZ`74x#9lR$~f{oo~J9
zW#>zn&n|K7!_k<LyM{+yVG at a|?}n3OQ(`Jx&XZ*BWWG&3`dSiq_#?DL=twO~0<u7V
zF0BsVjzaJ~nq0E-*-C*3aBm^=XD at dAH+FxL8|KxIZ%d?oO2z*davSXdwyU><zEzUL
zy@?s%5)Ro;x7f`vgeSZyn1Z8!03tO9!^D<hx-Xw>YZhW&Kqh(+!wgehs?~8kg3aKh
z_d)gk0=n^H`hVc}r8TOknD=Va`mG<}O8(MnrPyt1_d`fxkcb8%azoahN}M^_Gkv2H
z%a|(2tweftvmnI>fxQHf3ZpD#enO~8nQq4kd$m}D`|AeZd8KJt08ULdfDd<8Y5rLy
zCRi}<!-FKvXGhRcF`C6wA8}+SDQRCxuP1bpKO+FRZQ=3Xv$rImA?NugPLmLi>Lx<m
zmY9AObc?a_$QrZ98zMM?PXqqo-%DoQyPm>?%vJy7Pfh9ml;OrjqWjywNQpdQz}U0p
zSQ%3SFkov41MVSamjJ++ at PgYRN9KZY>hI=<(H&)6IYTW;)H~X!O!3VPlP(%K?D1s!
z at Y8Y=+KM+o71mUMcivxAP1Xy;i^(cM8vm5kV$dj&cMdudC%1J>q!lg(rFxY}k#XU*
z=XL2sRRljdoMLdLrs>bGFllmnHGF9 at EZ2UaQ_yEsiN8%2nfpJ|^5`(~5^TP357Fi0
z$hDmA9j$)3+1{3CY3FOHgPY2B61c}eCy0Yep7U2I@@a6T<hai88fEgFDLVFY8Wlwb
zwbYD($0$<EuS9~7?}w;iI8Rg;PAEkTE*ADu)1o<;qWAkRF{$Zc(udp`ax2*mTn*o(
z{bYYo1j!lEzZ$Of6<W$QGxe45l(aKzRH_Lm>l`|S_MCd?>e$62b+R#ND#S#(wmCrs
zQWCfrcAB0Lb8_^!P;K2^eC$`^uzW}%A6&qVe-^4cTba=U2!lT?)#26OJ3th61z{!Q
zRCnMz<d!YX$V+3Q5B~~wCO{e4iQtMdTryH63pGobtpTt64t{{=`f{|lL1q}eh^u7i
zHWyzrge`Tj^@Jyop*P#i!-GZXpg7O!dVN)1a$9S|SHlQChEU|2{deMVw(8s3YIDwS
zSuniEAOs4h&P-b~VS;!cuFpotP(HROx%H1GO2Y!2UE!Ea;3BW-rkNob%)$!3@^y1G
z?#l)3zR>uZeFm~wFMtn{a*MWG7KKyueer_aFo^mqcJiNt-<edSsxeOdU~OLLiEWME
zw(VbchnIbVUFC<(_ivct<+%;?Nxjx at au!S`ncyjjD=H}9Sr6w2;BI#ue`O&R&H`%o
z3;RN5S#*5lsWk9tSZd?fd*JaXeZ>r;i86D;eJ?+u>|DL!1aupQ3ANTmS<-&%mqw$B
zi>yS~{ix^(Vq723SHv8dJCTu2S%=ckhdhw14+Uk*TDNu^bkBNC(Nb9IC_}W=xxf$S
z_V4cjmv;QhZ%2=Q at AZ{yGt2#za!|=lMrVi812cAq3m`^*(5%QrR0zHRhUS2xD=-1~
zT5|SUS<g|dfh!73AGOa_3j(={DbM~*hW>B%5rjb6cJwsJQfmLCIm&(Oo0iVa$AtFN
zDv;{X2>5SNG5`)$9>*zJK}1~_x@*bT!&N&YOy1 at LB#CZ^_Fz>HTH34y326Tcdb97n
ziqt9&<;fyEn1WWR>oDS2!fa?^&058eDj(;?nK?tQQOZ=29V(&CRs9cRkBIW;6!^xZ
zR at 7cd4U)~rMV1 at 6SP%#6g|PL;$+KOipKc&-BM^;fwd_RBXPH45oItwMQ~K^XYoRj4
zrbCXxs*X}Btg9I{NTlJzjD_Y1_iA!oG%atr#wfP(7Yd46Gizv3sE%In89Z(5W^urk
z8+O(hc5TmcYta9j+DTBG#UmIOW_0}6$z9B<fephaXQ^}d#5<@Z5Zd1*81;pHwzRkA
zMbQ8=+&TV4`9qz^&#W-$!0LpHK8zEfCU^}64W(^${QilnU#9?4XUMFILAP7Fi1VJA
z!s!K2<$>C%*eugWp+={lS%v-0bS~H0(M`|KHq?OnB`*%>$#hDX8=U~PCj^g!C}*XW
z{J~fgfQDm!acw`iwxQ%^!(JO|y)W~@tQ0m}X6HtgspX^?sI4HWia6PK=?OXm2=YKv
z)*;V=sO<xJ^ooxRCsDGoE#w2uesl6d_!;os#znB at w(z5Ebp!>?e1u=vwcVTZ-R9%j
zJL4K*kP*3A9@=aGeg<G0>?X=u>Z5K;8=n>w$yz7hCetNiXG~XdeED1LZldxTC63i#
z7b4*RJc|aH7Q@~<L|#tk_P;)Vg+!7Oip!W&WVJu^(eQjI?)hM_9X;P^OshX%eiJ4m
zB|`a;X8ST*VwDM2iY at Nd`NWtb8z%7 at N<n<G6>fs^8n;5z)1ir!n&1oi*xDtOP)xc!
zfW6E1;mH5;WYg#o@|dJp0GM5}*lfWn(zOSKr|VbNaz=ZNJ-AsS1}F+y1qr5P_f&?~
zR+&+q*-Tz2$OHAy98Q!O(I3bHzVelXM5n4zd5^XQnCwjBD|gN6*<R(c>e(Jj8=i%D
z<|*utt#4u`MOHLm1PTq;eDBO0K}38I at 0P6a@T#OINh=<RPSrl-k2>1<0<g8C<E3Ui
z+pV1;rGC43SgDeaHWxH(b{tphs&098H?TrFSqKcsfXY&~G_WyfzEqSAt-^Ig2vXZR
zcSZ1lufrq``S_;0Ns8=7 at r6Abue?R}&Q;vIurlvBpZCu&a4kQc7*2M!k)GEP@*jvm
z1)7(Jz_QfF9=(&yLYaS4xVdqRrGjXgcNoed6KZZqbn&_|x^0)xGwF^96)>~p+tJDz
ze)_CTh%FzW7+S){?Ma%D`YdD(rDTD`Gqj&vMZV$yPdj2gLfZvV+q0jtQ<ubrQ~@dM
zR_7a{7%kf!V6grvRyLk88TH|w-fzZmv!+dHkQ!Rcu(+&tP)Q#IOPK=SR3l0*s|oZ}
zi6P0mBDHj#7`{?j)t0rF<~#$X9O7pxTCpgGB%+Ov0IhIeN3?#L)hCN#l+;0vbgE;b
z_q#=F_g;Zt9T-q^v>@lxj8E|0A~Z7;8iDVa3QUS5r)F|2=Jm4PS2KG&ECzg{T#2Kr
zb!akxzwJK at gig7e&vS0RLYhg$F?D6vJmoR}FaX{}^%7Ug0&8;In_N2wXF&z|P6ES_
z)T6Shg{%;J1()ZN3ews`M%XYnMoYiCzjDn7Y^Z%c#}U at SiS<2(z1+AUSlr$%)iSsM
zM1So`KTt$?HW6z3uf#nJzx0 at k0;7|Ybd5;77=EW;bl<nMPt})hHurg505p}V%-24p
zp}rJK9#ZszBW at 2{vD%i5LnYV*(Ts?Y*!ir0 at ag$>8<|os3b?EpZ~^kvlF8GrkRCQ?
zuXS_-)XyR;^+pae#$$><+j|vPr}rzWxS7j-g?sP=mRiF<EeO<-My!CaVc<JVO9b0D
z!6DpzYBL_<DPwvJu#TrmRfXpDwh*sJlpo3uvGUH3I2JSB at lla`muCu->Nv1txBTz4
ztV1`ls>y0vI_FSa7h6){k7O(ObL1FN?`Jl%g69?jjeUnW)cv}(UPJ5OBn#9O6?b>K
z*Haa2_kK$_7Sw>{Pa<@``gK2}1Dy at Bd>j;ojWSMVR#Ya;c$mnR;M8J!tsmZXcE>Ve
zI`M18DL8&+s0QjEL2_2F<D4WTjG}1huK2r1A`tUfMO-*+?*kWJmBugia*QTrevJfY
z+UW*vvY_Gs)+FjmrB{#O-a4wB$w&Di7D?~YIHq{isO4}(hT1-0k-`ugO2O at PxI$Pe
z-thmeI}TPRaCy+QS^8XHTr?a6`t{g=xMX3JIab%buuWDV6+Th$#AKVKllxR$+U7un
z at mI*Plpze<dTZhYzzX3#S~z}F7()J2vBuwz{oAPBES$1b-*c5F`Auf4OjZgb{#%)(
z5g#&7dgMTUO<bV7u1>1g5N4|JbU%|AgLZt~sNppWMJua6z;|?m>pMu_xjyl*Lm+5E
z+%2eRbTY|kUYSZ at L6_q$meX1>!gDh?u$x(3GKz+;qrSs_o7QPnF!s`J<dZ+tY&D$i
z5lvUeWQ(eJcQY!I=(CO--G)PgU``K`Xz8MULThLm2(<6^g10eShV}gi8qh!v6D}F-
z3gbgJ$kDUi1mv{r9bZ(Pg~kFhfUmK%B0~>^mX|ej#WEEMmla}IFsn{0Gl^cBmzrf;
zki8<qEKL*--#-jS#-szXwQmcRV40fVT0YPNc at Y|Y(p#r3tKSO^VZSV|m5@%cOj~j~
z1V<O7wvN8d+6ommq;Bl4Fuizm>{8O(nA3hwu~AHP4e2CT5oIKd>CR6naH<HS-rY~D
z5z7n6i4(H4n=5n3TxkZp at jK7L$GFRZYsPk2?-WLrOsoQ$`^TXVbUX04UQv<&JB+SP
zBJ|(48fyckyLgRlWLlty at MIIyq{QXu6T7zWg%`8iy8^p>=M}DV1~+R&(pP4z(GzX-
zjyU!ojI?S~^d>Luc)x?MpI6y$KQtQ~u(PU|p>(t~fy>yl$K!YLLAKau4BOb5#I%*S
zOW^Zm4E^TL7^lqPQ+4<2nDPWHo)4gcy;j0Y7NE{kM4x^NbCQTsn!wewGCi?+#&TnW
zv+C~~_45LR=etc6XrkL}_<8dQwER)k`uB$>RVWBL-44ZvYxT8M1N5c72Y$?{cSB19
z*=*8V6Rn3(mFbM?yVjj86PhY_vyHM;0?;$G90);dagi9dH?9G9KmMNd<%1_bC#nPO
zl`H7^iF-Z777aTnFQ%XXu7P$ivpRp0blrNwAOdq;lgnTuw4eo~4 at uxk9=t8m^rgp0
zxm2`GnCMjSDe3Y?iuJV5Q6++?n>O0h6D8$?AFr;>+WKLeGTBH8h{1gvScM_WwLu#a
z<4f`w5yFO|O^#?Ba<!9DdD%aS4|VjyfYg^}S26$hgum5zRom^FbNnPyuD`x);d=>}
zMixy~d6FFY%L*Fv+<qE8<(4ShBz~a1{oR at o2#F>fIz4yKe_Dy9E7%Yugb&DTWcPMg
z{qoW8lFAF%p3uK-wkyf6lCrB3UYj04kPN&_Lv^lN(LJu(0h at gT5w;JqLMY?6T1d}6
zlY7sEXp0Kqf<i}13Xc-u^VyspAFwI>8tZ9=wiRo>aN at iBcAJNuY(_RMLB^sDAYskn
zK6-dVs>`U|!-j0`!lqqz2dO)ja0BpZg(zFy81?Zi#z|s}8JK-F`n{rG%BN|uL=%VT
za}&AdsyTp5t^8519W!)PpbtZ<u}-QmU~uq#3h4E>P)f)Ss?uQ3h6}%V2|R`e2bt7_
zlv7}>kM$8P<GDTMN|!*#bJHjZs#<MGj|3)#8MKYJC_nmkOL{|3Q50Y|aira|R+zB8
z at jL;H&x5fdX&==_I`-h+f)0bumz9Z2b<AO>ZIfVn0fyAHaLeW>Gs~?YIaY0wgF2%@
zPlzqB!veJ1SG>-7YrKEbN$VJ&VkTqT4jjD+1QZ0Jn^GXX*AYiLp5_4j5z_Xg^gBcc
z=}@$s*Kgp<OaMSF-9tE`>EuGDRrBLda+_|{GE`p}tWh47r5J}T0tS{rwGC+$j+%B=
z4REA@^ihc>4 at P?0_Xfrhe)@|U?{-~dfNPWD(g9nmaY!ypgEe at VixSJZ=}aNQv!0S9
z#pfA&D;^T!lUy&4(dSDxk0jz5I}4*>lg|IsK@&;Q%JMeyv4|~H=77#(y@|f$<mnA%
z6TCVxX^(6FN}ow)tLV)bz-`RI;i<FOj^*dTELN|pn|o!Tp3X%b&%vsYYN{fbI7+ at o
zH||B#E|ZTmxl|^k^{PYBuJYiVRSWNNyAIdLWg0{yX&)`Q8;0&gJy}Y^UkjoV8%M^^
zH at 6CN35fLbrS5#YSu5_8Gny_C`()e2_u<O!%4=eZSJVTm2)U0#)_BM5u%>_JZc!Kp
z;LQO}^B at YCevaUP8&vC-gZ at r*?LU-K&hauVZSd_|BrRfOz<U#eR*U~?$W4B*Od#;(
zBU?QUlyJYM(bhQpAx0O$@@+cOmz*ZgVb}*(u*br+xlllsm2*HdN80rFJc&-bqp8df
zM^-nh+;sm*lytgN=DsHBJ|u89i$u1p0BE<DwQg|JW^2-b=lIiZK#lBTOo>F~!z^vY
zoJ`xO&USnRTCBYzTs%sYJEV(VS4JbouMV_y7<#f at 9;on(t!mC6fh$?j8}#=7LMBP~
zdMC434eXmj#jNZHG^oRPBoUW at 50pDl?%)cN^E3h24R|Su`zcL|A74$)|0L!74;}3(
z9<o6CqCfb0uKK!g*-abo>Vz$HRiEM<xFyf%3j=Jop2K=L0*b_2*R}!cXp2TaGy^!>
zj7PVV at gy<jJHfZkt$o|pUEl$eeSaNpe4Eg(C!{~e4XnG})0#4?6hGLAUGGojdWSS(
z^50V at W}|VGd)oNl{omm11TaN&yB!Pjb9E2TwmPbqZqFjJ$Q_zezy_tK0)iHR+0Zr;
zz#JK?Wd~;~n1)#?$e3-)Tt%~gkaz|6^-X}mdj~ojQnQL^4a4)0%}i+O$9+cjdu3um
z__%e5c$Q>y(f)LRhrY3SeF?=TxGPa^R>U-o<J&{rFv at XKn%JKW!U>#>8eV}ycjjsP
zusH)Q3ewPFE^L-Ii&mc=0z=B?Dsq8Ohj}x5XzI82FE~TDe6|P&R5&C(XWpS)cC3^y
zShiDH%)s0p*h$8!)3Q-MHF at LFk%>}cYbG-;6LM at i%|fnn+JeLFka2FYsHt(T%dM9p
zefE#oX!CKl>^M)QCbT_mW6tv+rxej at F6B?L6>bf*nz!;IQ0TSORpsRu56dSP>8MN;
zYY6^^(XUvmd(bkJc-+zK&y28369j~FhhpBVXPVDa41+NQsHW;V-U86(D^DI(cV0%5
zE at N1>g5|y8+X7)F;sZI#fwC{}v*IHXR}fH`&@c;0cjgC}LbJ_TpU6{EN!CQzaX|e_
zjpy1l>T8kQYHEu?s%MdGquD#LDV1AJq?0QyWA&&yB2~VFFF at -Vdx8yun0nN{w2+xU
zU`ZQ#e*g*R&r`+2^F+dbl5_!VniQeb!@`(hRcn#8NtZc}KkQk-mN9LS{7xW*UmBmi
zlpU|WM>5z$hDYWv*`(I7tR#F#+ at Db<*wwZRh?_`&L-GxCr>&J*(dPUNwoPIP_L~fV
zNLd_MC%ExcGw7$fpHFw+w25wF=QC3Z4AGTV=1_8de&|zdbtRuy;IJ~g+Mkm}RA`IR
z-Gt~-_Z<0V3b<|4p(?MNjD%Ojawwm>XXnw^Gy-nuU>afX86aC$@lDW6umyt*r7*VW
zMI<a|Dj(zi)-q%Waf at x>*5exCSA&?~Y8?Rqm1=1SFwLO(6$!Uck--c%y?pc_p8V3r
zDKYJ%V1={??j%shwqdT7`ApN0NY|h~0at<^J+=FNu~?r%>Iu_D3bmUjDdN0WLd0`n
zS at cyk@SR8Y;b6`zA61|XoF2U?pFAPI=u*{GmD!oul#6jCAZ#36p5CPZQ8bQ!G0JJp
zh$xEOB7xM<n+kZM-{j6=9(oHt0}udP5*AemqBtj!$og~nmAn5hg|0ff3ls4fUl*+`
z$&bMGO at b=*w4n($Yc9dwyCg{xErxb1-wU15W(b80?5AT(q<msPJPX?GUZ895!0+#u
zQ!}xwy~dQi53-6 at j~lW?>N*)rcwgHNN+AXlCK`b_h!YToh at 0=|7O8{f!2j#bR$Het
zCOk_9mF at ofFMIv<v|Soky|Z2c;I~Y)2+3zd%vL?Nl{JqDb6l~vZ<`<^Hm`hfDNrhD
z1mPS>=o8n^uBNV=**8Vfuac>NWl>fehQWFKZ3vI%gi$5m5oL<C?_m%^?1(>y^7pQ`
zRopNbtD^IJ1+cdcS&$_>Rh40L?*&t%^^ACUWN+K}6`nGW9?M^eLBIezg?cI3Hq^_Q
zndAi;8)ld3VccchRuo?iBypk7WpNOvQj}Umkr^do00Th$zZX8qt6YvaU;#9Ubwx|&
zbrp+CAnpj}ZQp8ZnDA)ul>t0J^r`?whbC at A3rn*0CPa-(QuwpH=~Y)Wr5ZBkw7qmm
zO`2O6fk at b23cak@s{}1M^42>&A`dToBDP~@s=^vu(tqqqpq4p@!(_-4+)83i2D!t6
z1_0+Z5S`uSAVrb5$?Hu6^4qvzaGkZPvbE5&8J%8-7QdC#y1)Lpao+uD(PxE^?J70R
zmNs1PxzBIq#>!2F94#8*G&h5y)Ik{qkesoL;h?GHfD6F)_I`qMp?B34K(JVP&db2A
z>`)#;VT?T3uH?ldfA&F!<qZBb4ZT}2Xj{YIp@?IYM0<pCMfN?-1)h-<uOwL-h}c97
zt!_q<|CQOeNnkdTw+Rzw{y+u;zt=M%4}`{QXm!g`Ucg~0^D$q#7nmQtCTNu^)H5_x
zla!~F%HQZ|6yFWV3s(KxvvqNt?DkEGtd9Q>C0v&u>V8l+BALZzvu>l!fW5C_lGlHu
zxLE$u3)SR2VC&AipA-tU#ezX({nAPy6I<gMSp{mz)i~1Oaf&Nx!fG$-HOec{2h$mh
z8SO=3an~?D7pKNNc)h|5T#9?>kEhP_Iga^!%;jQHqytDDDfSf}8}>RzHoOuy1EB|Y
zE=f~L at VPH{>>7!|c^w3u<}rgFz3%g~q|0F5X)U%@XTquH{nFN9PCAvsG&@7{svwn1
zJIU97_#$4AWPw&3XGa*N-td6)N>1-vep5HoGv5L^Gzr7!xn%>LCu^UWyLeBAPdsaZ
z-VXj9W#!B at w6aLC|5P`&=m#1If}O}OsMtL<-_+^%h<f%JzZ9eK#BGc*=)0o8XpR-p
z)SuZjOT#NKCaT^Yle$;PGLuJ8n|avNdFt1OX3Nm5Qo(yaAfeepuPKNh;y=>WKeV?1
zqxf1qGTbr$f$Q+|0YPIXmZ#tg;@k4aN6sE{it^m73Fzhn_RENchsKnmWHwF9$@`;d
zg{RQJM0+sktoZe{aYP~F^NMBN_=7-(_+bDj{y|E(f84}CPMf0BekWBl1l3R0r5h}k
z+s9)>QH}-LcTjt5`8V{g^Yfgm98g;&C4LA8_qy~KN|q1y4Vx=CQ1VK(lv;E4Y`A^V
z5YkCUu7;3nQSOFwNOp3CB%a)Gsau at a7WtVFUr9!v2Y*BN-EGs{=yvuQtPR at MmB}&u
z6X=$yxwC^)h*@`&J41eF{|5=H+#jCQ1ulB7G&Y5;#h<T^E}xBQ2k#qXxU4-a*e|V<
zU!g%e_L3dfSBAeUhbH4^aPRTYr$utT{FgrV^4u%5^Ci5X_yW#%rQDooqhZb?n9%CU
z<&hySQAEX{zD`x(vhEldJD79001}_24jNdJIq>*k31M|V`}v^8_okn|$LYI)?^|JH
zR#Q7y{10fDKtzs+0+gECbe-%`T?Wq!-+R#*u;y*dfc)Bcm2+58E(W^rf5v0>ART)P
zUKq>5bn%$B#}8mG+|_CMi(lI2VK!=IIw1`ryC<JmbY#V_Dciu`1~6tz^!q3sACi^s
z(uWIIehXdVtzvouF4ApX=WJuV-(#XC9u8GIbBCb3kGWa$i}=?RL^Q>h#K_TOdf at 2>
zWJ#N3&)+Uh6&zP`k$4b1`FCAE=cqe25;6PJdeW74vJ=`pC$k`V>(=yit;IT_0|g((
z>8PA8879QQU!|Bx(P5L+?9_EjURGN8h}$=m&xezZ$cNHfjGOC_1|xX$5y%B at 8X{s8
zoaHoWaaLi5Ksz|orlO9+s3HXB#G?qutZUSkU1m*|a)ww~nuym>*YYC~!Y3Wf>*XM+
z+>3p1J9>kGV2SkkCTx2<_nJu?*-`55MTK-%&en485yCm8k*t%fvi?yZK0`J|%3%9&
zGaWJ&)vhhKO$N2!(pw5%eEOFMiWZC1wyE&jkPU7_1vzhz{BPk6+6Fjg;GkZ*T{K8j
zN+nW;4qgEW4)EMaTNuYL?q64ipuag#mK5Vg9 at NSJpthE8(wb%U79F=QBdAYsN!fuc
z!#Nrb=?KGMnPk=;p`3cW%+JSH7yS14lA7J;4cWr5u_g8Dl6m&Y;2d4ueTy*P-o^|W
zq#4h%L3*XcFVXinv?3lEgx7tktS(W(9a-1iJpPhn9U<~ucEMg9hB65LmH!diZJAVj
zL<CDhEj|ry|7Xg}2$n%#f>76Fx4n1 at cl%Y33(%k@#xaX2(Xfh$<Wg?6X__SvV<Bm#
z?rkbEQ$V$HuSuFe$$>W^WSe#DII=HG$Q~VDj<<w;kUnKU9XfU^MB6j|gU{8{p8>}B
zaAyNe$-HkDp{AzDG`L!aFy;<BgI~i-w?5CWrzY#5#uCnG9g`=4zJ=Go)O=d-=Fy4~
z&Nn*ti2y|e_$h;Xt6V<L$??1FeZVXO6Vi~NC<^46zPY7XFfF?mK;8Ak;gzSTe9sw@
zQ!6*n^BdPQ4MKZ{aKS{kDDI<-x?pyWu&4xkAJz3Dtbp5W`Rq*g7U3NyJs)W+s$_Cy
z6mU$5_I*J;602Ne98$DWG$ZR(jHeu91ET;7vt at 486h{Uh^JPKH2Bzr|A(B5DM9kV@
z7D%SNU?u#F$BKlHj#O?oTnmTm^SI{Nw47X5b$cnmI=!yTAI7!4zDMkI$uJa%HejFK
zJ$f<Drlj~jOOo+E13V4jT{qZGPvUD7=oSo51^u!J(hw(9R?j6Tl#DK(>@Qb5S%(JX
zeIfm>+gj@|6X!Qg_7u=NARqcKxnv#0gQmKB6yMtmTX^{3CmAk1Y|;{sNlkr7L-~a+
z)JG)))|{=nL^1~(^JMv+vde|ZRl9fzMKokeT8O at r#OE@=`x1r6|M*Db8TAle9$vnl
zc_MbPFrb3&mMzpSGKxv&X{x%Q142LLp+>Y%dN8ZKl?CwObD&L(3r6L4&HiSm;?OBb
z<gA_U)v_?_qM<p#JWW;!US9<XLuKj*!a@!;MmSQP5R~$Uhw~Zn2H^M{1Kx^a8vDKQ
z5)>+)WzA~S&1FeBTb at c-6IeTWPespF!EGf)v~=oiPEQQ8Gch2|K8`W3u+OO=DRx`l
zpW at 8Z&8*XA at 4$AYRjCvzz;V+cAAaIKukKrRAp at +D$9YZI44+>#?OkxM+*kYWpQmRT
z9n-AkjerKzr?WMov at m%8)84fkTs`5qa>+L?=<`eY^1U<L;}jEi+XF>C+ykxd1AvW>
z`1FY_TL`FvQ}E+WM{}%L*#j4inr#J|iH9tT6Hsu^Jx5p at QOpV1ibx0KXIPDsLoqkK
z^|bKaNi9gb>gq6CWb9GgEO3L6xtY{y+xryn+PbJi*z11{J~&k-0*ioQf>Y#TzwMlj
zCz5dY$^LaFre;TGKiG0r0dU|?*8k|K#N=DZ13BlS$}6OttG+_WZYxBc7Zh$u<*V^#
zY!WOgKw)so)Z9tMX8$BW%>-U~F33m!Ynqz$5+$x at 7%}Ln3*H;qOV+VkDHWlJSFPLm
zsrl2!9HacREdjBrUHLTxI;h*);_+sRQZoQo+c at 6<WbI|@H8+hvp`lhZ4jy77*R_5}
zZixAQ4<Y&Z(zMiO3hjWHhrlcX2xW5UK~pRACLlc3rC=Ido at Pd*zPlg3YTxV~?t4){
zUWzl~HaAbLXKPu?9CngnQUendUaXRVDZ)mD(O#eaEtU=-JmhKEPq^eJE-8vu- at 3v{
zTbGfa&RV29P;WsW8uS{$CcpP{r)A;CkLy8HmZd$!2%z64qF|G`*2iGIeP)tA{{`vN
zd4|%^l<~4rXYQEu3k7#l6zL{5DQ8g_Ee4+K%AQBfNM at ZAcAG-6X<{n%bkZMgI`Nf1
zOu|}BO3=}DzNs4UjWxj5mMcxhtVJRU%CGFlq$wTd>#k8lp!iu+DW&EK{lN?bG^<6M
z(TcG`g;jv#T$-XjMH}%|i|ajh(X7e3zJkgNXUVd-x!pH{6s!GTVHmeZ_y<H|*%%`9
z6vZy{_r>v!SV;O*W7dwgeOrcejIhG4dt0^^*2or63q4OK8Ij)zQUWiUxe>mgV~_MQ
z4*aABjc1%R3|nke576NC4*zNZf at AP~-1)D$pde{7{m?nlQNq98vD5kW>OjI0GVcf6
z1N(_N5YR&{t4Id8$heYTgkgXw{}Nq2Q0-9c8l3}uEZpN8#+R6r{S{bGuA;^~dy**s
z!?ray3=0BU9dp-j1#CulY8u1IbBGWdgSQ_s;sS>=+<x#TyKDl!jmV<lmn;<tN*2pg
zEHkK`fU!~EiFKb%lc&aS74TbrG`;LWyJB-c2aqxUz#85`zsMHhmz$+wWOzj at tIsLf
zUW5rjS}}e}3YjS at R}r%PfJzCb-DV__xX;yU^-o{?t~PT&;80tZALRt(?m$-&Suu{|
zo>1gIH?keZkUE6v?pqGG$)R`?ohNidQNMTzery6MZzE6janTc=2C0M9G4;%s*kUZy
z3Pwa?r7$Wj&+IQ~4lh#WUFjOHD3v6l8Gzn~#dSoUMx05_KSF8&9k8o{29k(ug>%}j
zeL-OjN%<0)jK#qp_si)`IK?ct at EoPP^~2a~w<)WIW?jog!$g at s7^*)8Buk5}J*$!9
z at TPRYxGrQ)Tp8sxU3)6Z2P<M`>m<nPx8GSP$s3Z=RQJGB*9I{{1x2e+Avpv86-8Lj
zJQ({DZu;|AlP7Vs$DU#Ly63#GzyqdQjjeOaDv9$>5^m%bAM#1p_Dm~}Nhn$c_#Zkl
zpnUa&=^k1&<MtC_>7p2|&YVn6AhZgkc7k7u-L}~^G4qQ4Wv~j at a6BXb#2W*bS9;aQ
zI at tq*MZ!9N;b6vspfwq~IAGjN@%>5KY-oyQ%&2r?u0 at SK+5L{3VC6z`*>8V>V^^;|
z5);v-?I!DY?#h;_nroF%iu~=ZB4m}&R|5|F=ItV8Kec#(p>FoVNOu(v!a<hh1k~?}
z&wB#5P?2R7y!!0eF}5eNs(1Ajj}+iD?vPLOF{)2%Bk+C)=IjIibVZ>fR?WFKGR*1|
zNvbzOWq~AwexPq_W^Fb=w_EL9J=+i@(tA{AR4VMMdyU*E9S~KDMUlC<q^bvo&cUWn
z+r*@mNxKl?uPqw+J16ePY9$2nl>QS4(d471?72)2?*^#GDn~i(=)J;nGc at wOjKkL@
zx!1ugT#uajLeeaoI`ztiG&c1!f9ARJu*1GJwNYTL(V+>5-4)^Xzs$_*ebwgN%n);u
z=^9eK^nZ0EtqER4e_qU=mjnP;RJ6MV(1OUgc4xXPT?dxV)!rcat#fj-$7;xz^|^Oj
z026?rh#OBXFS0nVwmZ}+_z9#<lFLGxCweO3f at IOO+*-P&>|{uIGxpC=olNuZJW+2M
zMlO2K>^05mS5h}rnOh)F2`>p*5(W!oZmOz$6*g6njV~y=c=qI2f<P>;NkMPPK%A-R
zo_uH0AZ&ySMA^Ah6%(uQgPKcdMUH=k87bA%<~?4qT?6$JE4DZ|1d>W5FAu3VlTilL
zEzvy&6SpXYHe1W!%tSyII%4(ru&JoJM1z;A*n_A-O7MX at 2>9G(90rVrA)2dWpUA at t
zB37;>9+}LkR_^xnf;Rl*1i^xkm93KqK<Q!W$#gX%PyOG;zQVkA9S)zW5sC&~rM>U)
z%A_iDX?hSKAV~ki7a$50$5I`Zm|gCB5x+#7YC!O}DtPSPUE&zQzj4SrJ&A^+(kh0_
z=Xb&jwW`-_{{=Qx00Lg`ofe`~1T02^u+%6-4%2QVZifW0WUS|H{k8&0FVP<xA)O&p
z4=oR=5*)YltcN=WR;~fqP at 9f1tm%2#e2<dtvM6hn(5dG>2P<~5)~f#@EfX7lbSw=u
zbkYSFG}b&~5u0wFTw~Ni_ at Ww$#~%prX)M^2y6WZaD}*hy257(x)cMh1Q<w&NC~~rH
zvWxzL)%Olq$keX%Jcz_-MH@!fgk23ER71$|#oLGegAGRlBBYxE(ha<1DVo|%FIj|<
z+$xI?-|Xte$i|2r-eh6&t+>Cy8_9p3QldnQMOxh5=s_&dI5c*Ny}s8Yxtz-$R3u3&
z6feXZ6nM|@=X)REaK*}7Gs=>1sN};P)2KsCU(>C++bM29>8GZ4lvF3DY*tUgCPG~i
zwI*7GkBYUmwe$4aEatx62yfTqs8uOSP6ghfIuQb#s<({s-&~y%OUnRq{l-=YRxC=S
zbH&QDjS4N4FCn0LM5eZTko^;ZUd)3aRK!1wscniX$n&>}D)sWdL!!S;NE^0}ULYb0
z<KZ;Kw^qOqg>&UR(r}B4Mni1ox~?Ic^UW+jNgJaTPHDUY+UKhdRgRqK`VwabRx^cy
zCH<fziY<+eQKMe<5ee*G#t{+}6^R7-;1OCdhUxUH!d)Y(GVIuWP*^2=VA47+wH24g
zj)Lv9yyTq>K at S)is;q&yOCZFwn!Pj|5_jU~U4I(SdK7)>)=o+^b|;IyQJ>nna)uTX
zyx{cyVBGpcr+OtN6t2IPOK3=KxvYinGD(#6#sbt}5$&{lkKNN&Jw?6W77zQQR9o#T
zaB&)4PXSW58Cd`5Zib{K<>cM5Yn*DJ`B at F_#9S2 at U>Vm_B8Yya9e8U?&Warqnn#}w
z26d6Kb40pw?6UxWb;RCH_ZrMC>I%3EJy?(!s-G`c(aR4VvV9!R>q@$u8+I=a;=AQb
zSJ3$&)dbBB5H5`{;+BLPB>A}T%vr{MBGM8)VPTL)^aoV16U5W5K-7DVl77?w at 2PdE
zkKwh5P|ApaPFdAn%~IXQj)UZqOyz+4thn3yk%gHJl64(?Y7+C$(rvk5BOk_!BSQN%
zU4+M^Xk!r1 at APT7ATaWdFN}TjSkpkFrM8gs5tXC#t4u#=BGXrJX$`d*8nazY at aLn$
zK2fyG?&>aP)8NVD3FtXJv$B>Ihycu%9T%NKjuk4sda=C at w_Kl4T=a1F<wW^lV_!Pu
zID%HNxBXN4HQ*Q8ori55&UT?mh15|0ov*mQhs#pIk7j+wHR2eS?#}^KTBn*|B5m0R
zSSM&b(*X0cQ48lz8v at csqKoUt)9?nk0Cj(=V=y~a^3BU34Odn?s{-mJo<A>vaS at f4
zzCqJ#;liv03y(`TDq^paJ&<rH7s8h3<(j+J4?$X6WJ9B`DC}!m;ILs=QuyVWOsJ|p
z83+acMT2wH+ovw8=lr2ol!mQ*0>Ace3!R at dY8ulK!>)=H<05T8-|re at rz71bZcF${
zKc?LI0E*e-N=L at dqrfzsfl}jeeG_(5BB*-YMF#N!h_(egyhb!C^@0G5X2Rsq#b`cW
zZS<-UZ6=b;uDwRXZkvwAdo+b$0bp+l2Aw+O$=o?>9~v>)7UEH3N500?<i+5}i3XvV
z(6ku%l=f`vW*?@zm!!4&RldRU%gdkiyvgRmRhmWp7f~q=DMMUMc^p&QEvZotV-Sh2
z7hosp at d}!RC305d;n(HInMxu))R3^KvY3Me_*;Xs%Wj827H?#EOh&~0){~`ZW_CvP
z5phI~1`F2L$$~7#7P6(aEkK+si+)t%hEGsv<!aA`MsusVKxcp^!#FZMbeGGxqGq&B
zPTds0%LAC{a3&yr&tTHMgJ(ciVHXuz7Q2{>FI>Zd)E-uO1$cT{8xc(!vF?KRdsIGf
zgS78pCAHKYs269~^2J!vb6yziAI8o7fE8vT2y-Fm9St`<&o%n)!^6$R+*^KK^=%)G
z39!8<z&0ZiI|oE=fu_FR4XBT)bLT>#{`_n+r+=>j-$iE7v>-B)xdpqQ=4hNaq`l&N
z(4H<AB9TY_VOq7JwO1h53XP_dJ24&(BpyBEoDG?n6vEMz`(^cP8Ixd{YxKyu?$qud
zDEQ!LczzKC<8R{-6!oYMz%*v#V%0irch8pn<?+_3o=I)<eu#OUr<xrJOKmS>zlY_&
zaCGJ-jHaYm!=KOjyyg^v%=}bv at amJd#BxJU$+j=YO~d7Fv<>~VXlV|Y{RPV2gH{|A
zlwd=(VN^nNVK)T{(#IZ(Lse(`u2Eid9ZIk at G~FEZ;j&rvL8qCOaHK#tN1sXc8fMad
zkNorvSl57}aN{D~+*rQGBXcF5t)`XPD`&dvJC)$0+yRq?g;crg&C%NBvR|p4ml<3Z
zPga%(3Z(TV>n-KaArZ6cEPgnF|1yEc$#;<l9oPK0dOpdQ=M(9f04h<3Qwr#3s=JbG
zh9OcD=#tmy*0CiMU+zw&$2%j=+em#uYSWv1-cc&4m${Djjf}{=Z&HQO+*ZpA3*job
zj(p~m6*djNI_R4eKr2j~&N<ZM#A at H=EgrjPIE#Yf6y9>jcR90nd&TTf#_8b#{Q6=g
z{#ih{toPgp-nIZt_4CX?b&H0lRij{%(XcLw&%>$+O*&h%x#X}3Z}$$B?XgfU$G2-Y
z!&%6d(Rgg~#=E=#dtZFgMNNk at QsGs}K&pDvL}|)=IB?FFJL81bhFNkxk{GS}ghxgG
z#r*{%9c0`t=AddruKd61(&oZyOSCZca3vFbAu}))yi{aFpK++9g4M!>gtO??8b)VY
z(}ahh$I}pqlu>xLf$Slx>v*19C_ng_MFtA}+YxuQl1!Hf>DjQsZ<{5$r>1*p69iA8
zTPaOT;JD91m5nDSPKK&+%bAs-bg%!9W^ebliA#5@!KEqG7+?*`E*Q!Oe0lJ%kX$w3
zXHyk$8@`2w^av6y!jYY at VpsHFLP_{t$Av#cC8N?}NYGn;B*f6^#f-Pe04fct)NW=$
z_b>X18f^oPt0x)!>|+ox%?C>xHeq#_N?^`*z!a!|aGrbmdA#pOguP(+Y_Ik|^WDBB
zADq}-V-~01hDACC8()}>nu_ew<$<@Vk8OYZtf1qUXg$SaS7yyOt- at s4V0)H%8diA(
z3Cptvy7L-Li?nti?~P13H+Q=~0<BiA5D2TuP}pFz&_369Wi?YAr<qxZGK)t{(yG|E
z^sIba5C?g$Qhn#eKLHlnu4L_7UOE;Vx9Ze1L`w9nl}RERw)$Hu{bn`QFE$rUcC8HC
zR)JqA#P!D-54aR`TK+tov=f`vo$J#y9<=I71^j8o`@uXKyNi8En<7sF+aVfagd8cj
zPB#f5ssmYb7in4({7CxDA2`!bKwz%(%43oIQ<nyLoVFK~6&V6b8K at SXzU0ru`(KPZ
zW;l)c9E7tx#3^PM0h?FGsToeO19N~wY&iJmr0aYMT2C~y-Fz5`Ng77Ny4RNJ9aA?r
zv9FJ8qXr)L{$zySA!*A8-Q^TrISfmz;?U0iXY*oRxwQ6KugH}s59$?2K$f>h4g$;<
zoYhXeh#1tdhE>A<5vh|*b1 at A)nu0jEgMf^HnoJh?*j_eAA^z<TkEd$sFdiOgcI|*q
zxC49?{EZmcc?nceJ*$kAh(7Tdj53|vGsbjQ{v5gR-l9V+;Z*RKg6zSk;ZbZ{TDM4?
z8?L-N&ose6CJY#b#H8OOH-dW*?rB`L-Ts>2d|~42i>^P367)d{uQJVZT$!mryGKEw
zHJU73zO&Gf=F6)K#$13lfmL^`(LJw&=u%QAI1zdvl=v<l at g(p%S`x-G|6koe3viXs
z{@7s3Tk{*^dn&_Rfg(We|BSpv59VEIH?xwTz=vDX_{o#hUIPEvUdn^3Pv~(@DBCdh
z$}+HLw=oaBgkl-DQ^!^bcY2Lm#mfb*bo<ed%^ECgyIgePw_{wF({Pq$i=xYakpGRU
zzEbxuv5~kwx-IB%bKnF+s`V_Aa}~jWiVG(bK9)u8$8BHEJibgKpA0H{iWQ<)(;$)=
z;eIHR*0z(or0dS)@Fy+BEmbaV-3iFL7Vx_I0Ai02ieP$N9{2Pj0lNo``kbec^-mQ3
zK?g at rd{*AyG!;Lp?u||b+|^I#{^~gz004}0JbL{L=w~q$;fnvkkYy0<Z~=|P=+^DE
zdKW}9w2x5lAO#G01RtsGY`Dr7zC=qCYr%Cf|0w?Z7C9<~a9ja+-R1bmPZM?b^qlCg
zInuvX7FdMV)U~jdpW_Rm9x`CWM#n+F&#x9_g%(P+gI+UjW4}PEe6sLzEnifp-c2)q
zssPT8EXp!I1g#*d+>Eum`?nu`p!(z<+StyJfw>p#bSJubOedkX9#p8Y?p-6oS9&8X
zqaCDba+nl<EFBp(3aLGQuY0N}*^|~oDGnE?I;ffPn--4fYMMv*_Ljf3h(+N at Ho1fE
zpu^Vm5uUn-Kv8(q+a3U?)2M)srYa}4o(i7c`kot+bCa6b>D1CDzpFb3piFX|Q>%6-
z5d+e)%#7lY3R`YnHgxP~{Y<}kmFYb^SD&>Ynx__aywW%v at M8int|6eJb|I&v(72No
z3!z)eUa1}aMRRV$`Y;sxf@!yqX@}e;D`J9Kgcmk#lg>ixR93veZHlRry at X=)>Hb%3
z3pfR$Rn{Em1!N=i;eIf2F-UF50ZMMt#;&jMF#0-~Mw{84mulntk07eoG7;kspL3T9
zUm$Fa9VoW}k}8oReA${7!|P=wa<5r8_U%>?g!zO99V1#GKqW(cA%YDu%K+Aq0r<Is
zUNaENCth3X-<2GM1Btca2QHp;oNc%`NY&ZqmgEK-u3~Lrqc1Mf*4H$(Js4OD9)x0v
zNmzu-p^O1Cx{KVWf0)~%MhI46k-$%EU<2 at oS|&b490?K80iSlz-oThgB0PNc8k|$&
zvkj{}sg|oEQHLVm0+~5RA2kJsq4<%Qn=gE`2$Q4 at 2XmH70i#*HYb<4A;hieZgf1VB
zQW={R$hkCHSBTS-=+I#J at oJ&riNRKK5&?dFs^kW3X;8_95aVQ$`2Dw6sjPk`Q+x-*
zTUf-5p<BLw9%SsLP_d$wABhORM=__c+V+hw44y<*RHEy{)LC5Oq1f`63GVi=#Dl)W
zM9XjV7<|!FiSSU^#LSmEQXcpL$#GQP|K0PW!}l!Z5rJ?`&^}9GV?6^P!1%a9IRO?^
zBvySY=Bk%@Zj$9$(tql$wav$U#~XY!n576N05x(gDq2_25vMoRZql9rb!XQTT#I^h
z63mW1h$5K4q!DL*zz+kuW^vIPKF$pcj;Jj at jUQEVAu*OgbR!`6e$H)+TY;K^LJC6?
zpTuP|SqmXItkmaj)}%MFDb#SsM6h=GAI{DyqudSPGhkb)fqFY&5l8LrKI}fYosC6A
z+OBv>RJ-QO0K>8~LYfHstJ5ugW2cWUFI=m!#OQ-<%gOHEs*2CLdsd0bYTPL!s9Ev~
znRg`lNBNg0gD!g5wu_{4sJUZ&{)dp=Gdni}I^NOA^5sLs|8vNhT?Ofh&)dSSxHI9Q
zGI}yLiEODV%c8abUg at 6x--e)4jTq}-mL*{Lg>3<I3On_akW52Kql||iFrEB3CYtPl
z{mz37Gyg8XBRF#$2h_v2l#yNGdtQZ!<g2}Bv|uJw)yCD4P_N|{&5t%csX}P6bjt?6
zOiks<>4Bwx_P;gIWb##X5^ReS?iDQ!E<o7Wq(o(@T4tl`H~6QH!0Lv4gAT3|?}hq%
ztlcDP*YXu+t at ZLC-%)Jeh%aLB=CzH)bZO6z&@Ehfk5rsh3RBvh<Q!tP)s+7;rc``D
z&;c5N_6SzGVUBm~N?mu=a10aeeCzd-K1}OTgT{ZpPD%zrAx5=^0Uq9qPHwXeec+Ty
zP(@Z?D7c%Uiddv!QT7hmrZy<7<Nh*+EX3VUTV||d;V$gK%oCHhl@`049Mn#UAM4*-
zJXx))a5JKJ-ULHwNGGMd_H20Qoq%6Sd$6dD3#gQAkSmj8Rl>z>xR5sB-mgX;mmv67
z$PfoD*VVbcZ;<kw(s*musLK~Y&NFHiE&Fj|I><!C&xGA;=zUYk(qU_s7md#JkQ*q!
zy9Xr at +{+_ml6GgglM~Qt{R+W7UXl|i6r(x`WfADSDZ;*R8OBzMfA87Agl&}8QO*s#
zs*j{<mRxZE4v!Tr8c|yDqUQQp#)$a+FBpwH{bQk=nrVD{=()U!=ELOQBhU_1F9o4e
zZ`eB^Ci(OVU|&P^@Rm#(EJ)+#J~2}yIuR=%U0J at b455|u8=AaRgg*Z<PiXQtkRI_^
z4<<qmR&DDzAa(ML_=**12l_D7u_SFT5A<=%!cgi{+Qkx9qC2;imC51hZ?xXEz{uJp
z02OGwJY5XulO0nL@&ZSr-lR=a^Xb{tsv&k_G#XCE at 9hpMNFMY<?pi$7q at v)r?fGn4
zr5_R`ZKpw0s`~`Z6-)vh02LdG*sKW;`_V7$T5lX!bxrJE2AVo5)SdhyNxD|cxb%MV
zAs_a(KiZq|81lO(9=dT^b-9_9aj+aHkmgWnV%4XhrqT0Z&~nFL64)p9pRc{XL}oXe
zuQlCcw2F?`#TZMZJc3G$o>)Zddk&*xzEEoVpE!%G%ng(gv+X_OsBwE$I4Ryq>R8np
zFxAHCU*oMIE$uJ|<$3ZkSor;qI|E1{7M|_~NRoOB#<gIOXvoP9ZW?pM>6F6p1z9}i
z<>~Q)*LT81ga%v-CSJk2<LxTq&BioL`k$)gyeD7XE%zEn%?s7oRw)z=!@|4fTx3Vn
z%+yeVk9Go(@6!F6bb}i_>A7NZ(U$=;WF6kqW_z_*1oX;F=`w*i{=kdwyhP97;B&Za
zj{HmW{`KKHT!zCK>WpyO|3s|x2v}pp%gq<DI9z{OQgAPoCjSKlmry2b;&Z+dN1J~O
zc1sZ6N~zSIg~oWU5m<mhwn1)EdtZURu!tu}1G9x6J=SIfZ^5$R*<i*rI}X!18i!sg
zo^`?IC`(a#E$!Y0dGaa`5G7v0xj6|DYU<aUGFXbB_lY10jQD<udoIHvf<ICAr78|`
zI~^fmH%VDk3uo8~!vabP)+fNn##uz9k>!yQE#V-f+ObU^jgqe&kkS(TbMSK&^`aKS
z#Ew-&>75WzTz&LxOwduDCt;(7lenY3V$YzABGB!x+F0O3ZM%!HiNU>LEStDr#NISd
zaQ6!YA$`P-;+54Iep1F{OJ=!yhw&-aA5K<-Bq<kL0`_WWT(eL=v#yL{_iShOe)@({
z-gr|qc83vwJgD*^;Q;<MweTm4pFP}<t#m<W9mA``kd=es at 9gozCm>o^TBgF_9reuQ
z!&teF at 4*utmbVV?hjYMA?c`{BW3BRb^7J<c&Qv19RgQ0m@){2)vx7l_b at DzpCw<O{
zL*U at Ux;vC?`sfvj+I$|8ow(OSe03Y^nPTF~ExU-BPL}aJCA-sindLprC}RW$b{mPp
zisdnC)b$zZAG_7H4~YCdWS4SG0yzQnb*}85^?k;ph=t2TV25_LPW at RsIh*4V6|S%Y
z$zqfD(jWiik1vW5gLj1M;M29c$~R|Z7lZ1mpEN74W>Yj8t-Zb^neT;Gg<9y${{f$u
zat;SLTJk;+sL-E?$<kd5jP^<-(R1~96OhJDa1f4PpGkBq8;M9*Qf=O$@DyN)?W;%n
zmP}A^d>jOvHQJVdS=+LvjL!<FiX7wZ2krOCgXFybgdZ%7qn(sfpzHoan6J-=GGq9=
zY9u^8!!3YZ31Q)y$=q-He!tV{)aSNK_lfFkeRKr#a^f2h|JeKfEG?9?#qv0y<KV32
z9fc*Wu?1D&s4ilwauWuFwB8ZxwoRrOI_-XAx=XBL6pfp4!kW4RyDqD3T-ml;#^%I*
zrRTJcZCInBir&Ev-5#~aX|fLhn2#gbu9P?=6*dVKh>!9GbGOy*<K9W<Q%eNISbv+r
zjwQ5VB)g_zxv`sIS^hM7QYR=@)-dvmJ;Ci*wU1Ll?@(5}J%aDt_jDDm1FV<yUEik*
z0tV6+x-Bh_7U&WCk`p;Qo3bkJq_|KFjC1P2Yvh-R1nr!VmoIB4KKE>Cek_8o(>Li(
z&ooRx1=w3WgHV(hd+eIhMbmolg8d?70y5e#c?R87kA~fqq#j8gm3F|E^C>cc`?fuG
zN{@T`@Za8Xd|&Ww1zprd*2D}wT#vhPI0AjPfmbI%OonEDdIVIGI(@!~Tz<;jLHp?=
z-JZ1Gag8q(jzhETll{@>17P34{D-*X%0_>95{Ah-OKuK;-0ckl>%Aaf;1Ck!f6exO
zC>+=$HUU#Hi6&2QD{S*%tw-*c%4vaV5Ml57togCCbwU!~{(-#o&G=Dqk|UdbVwQFq
zaVK=+(@+ASQrt|EL_iUbd(cnCqFd&eIQZ328oOVKb>Wz9My319SvLqbCz4%bM+#bs
zjW!USgaww7djYJcV4?d{$0LMaC)hkW5fN9_H<00=-Ja`{hqWh*`xJ;6{k^HyY%Pxg
z3h68nX7Ztm)JYF+fe*ims?Ts(-%ig%CSM>D6Fn!1-)s_ibZZmDq_X$)dnZMLI|=#S
zedtU!PM2r=b%?ZlR9_C&N<m2Wg8j;jHTJgjgg~<=-LU8tqJ?qI@<t0+hK2xPDVwQ?
ze~b~I?v3%Gytrr(fuCw|Fw<$J?f4#X)Iy6ZY}6;_C}goE>9zI;<*|&?ig9QN^zh&W
zX6#4J3;>UmwyWv={Z$3ZkX(?&<BiLzd8Boe+|wy;KdaTRz!Z(}paWGUH90f_q%-vh
zaWUQQFBG5_ZX#{@3wQOH#X~Ik|GcMH=z<yWcAC^eRMcIcsG*LHuja at yE=yUO%q!@(
z$ih>r+|KWUzHSo|(jhZQ)t%R#DwkM+tM4E8^M6Q3c+_k{P4|qXV-*uZN=-9CUv~cP
z$}s^9L at dLSrO-29`b0GDN{wUqgy8-fxYL=v4d<x#^R7Z#jm$oJ51Wjl4Sv03=N%te
z5KQY=o(Z*-a;nZ5PNGRjtgMIfGdye{VN}X{p<?d3v_3>&I9D~*GzJuQ4{x0+4DmpI
zHfMT%9v-)0i$di2wj2Y<9+`3={hd+(5p!iPr-~~CSX<8LRdMx*=djo6SEw+O`Kz(r
z`DIYJh}@ur at 4;hzD3PWF5Ppmq^O1eOZaetnK&&*#=P|-CozZ9=iDvga9zPFX-XZSd
z%x9mmu=HehXq>3iZFmy~BAVY!FvEjx^F9=ptj=`n+1TGj8xW>E8ajkL=)Lwi>+WfH
z{$pKy{{bCLESh9M2;TsZW<fXVm(kIoF4ENVXs4=qa9ZrZ4Vp~+x1<2ofuPFu#@-Ii
zXBm?4oUd2O8e=)kWEirId^QvgVkD9;$eXBy+QghN2CMm9z<}DeFt7N(F#GbF5#!&y
z7N>^|KU``Gz at 0N{x~qKMu#hw;ZLU0r(O~x3z=XwL_SB=V0`@`G^tfl`(+8oO#mKLL
zsvIcWY|Ui=bAs at uceJEC<n+#K5nNr|7_Fo3)Go4qLe;Xj33X314?VVLuqMO}<39aO
zJ{{-=z+y!<$n#RVY=OpJ{4Z2ZCGKjaI=(?k8~(oI+|7%Jh}kKegcMhN<O%}>Uqml5
zFph1;@LfK3PVlFq=3gjf=ul7L?dOYH#e`w7px0(mDmOwG>s%u+9)5EM-9QZdJjO^r
zCL-9KUu<t>4$Oktj7f;Tm%Ev|o=QuYl at wc^Vo2WT5Jt~^zEe`ahI}lIDm at H#Mz;48
z<9D8Zb~r1u9Q_~<Bs7XC4XsW?tatycToX81Z}@O at vSDbV=KUN>I*hrym-`LJb6?XB
zd*toicU1raTNIIevLIMn*Wv&yEF+p4HBskPh%<;;7Q<O}{M5=GKq+P27z*JK%do9d
zQDi818RW|60q`HbeO at jImorLm3ChK+-X<(BeR|@?%?r1aj!El%q9oko3xt at ohTp%h
zpt?SUXr>|pm_Ik<aV{rxSjx)Xfgx;@V;*F?-;<rZE at +jpLSloEj4}|wF8;WSymn-J
z>T0W=JFtVedpU-|tU(Aiw!mdW1ckSeUw2lrPLsL09KX%5ROF|qToak^fMAq1j-l1E
zhH!V-h02ozn)R-N*xe@(%WJ)owrn)sR^~j{WjiLyh`9{sibpe~pyt!ubgy-h%|y*v
zHlw{L at MtE~l*l?Y9yZ53*Ds2H7TlgFR$qUgWjU-f*|~GWRBS=GPn5d|Goth#K8h+X
zPEdYhQuGQ>ftV3KJdq;RIvX<heJ?El*s+XaSZYa!QGdtKH{sjao(L9l{v6;at~`z3
zjc<}=MH(^7r7Qo7WOCMsKa<S47})|Bl)uB`r=1ZAGQJqkV-zNWhsgB=u?}5h&7fX~
zN)lMg%OE at AY_$z|nLF45dGm#hjvz)El(scEn(X0Cav{C+EghE>+Ra_mGHVC#>{uD8
z>`-LEMt(qc4Ktb!Rs#$PVE%sYp9dGQ7bI`M1tm+c7)$M7fh;J=;kh=jw<%k^7VH77
zn!Xw9J>BgcXy}N`#gSu83s6Sq(I~!&wHpr)vSU15K37m{#!B-8JrAKl`ek&L`Z;QI
z7N-Sz%=l03nVwl4bk&>i-yJL)bEI6Xg at GtMfP%zMiGiAuBdO<Y>N<%nshd}5r)GUX
z;$=H^Rwwv!cV6=^$5<+nTavocl<b6yP9CPYv|Umi_tL6oVx2?GoEUQ+Xgr6ro^l(Q
z0a#n#L((%BgIcs({sliAn;pr4en%p#edz5jK1(_*ky<mjU_}~66KV>kn<S1($@9f?
zo{%?*AXhiEhH1$xLBpYl#3 at Z^&~SvDIGGGEbYH|nlV%yMS{xe_O`vfA9jivHz|6JP
z7xtHDc{TIje8RhB9bZ7|ZXdG_Jv`Ks+di{DxzV!YASO>DVT!^8oC6HDgMzG{BwJrz
z{1NT~bHh`|?D(?OKn~Si=9;;B5LKwKSdBaWJ65Swr=yAlPgVX$<>EWMf$EpsF4I8F
zK{haP1ZK3!rdh~}<dF6rKQiBs6BM#<&rA+Oh8vgRE#Mh(*K^P_g$_>WZhUFVbJ(4K
zWW7=F10Vx4+j_d0BI8V-tpBK?ubew#sE0$YrqbpauzSxJnNST*-+3p~TaVsX3opSs
zKu;-&RBnMlMlyzZ<K2XUA at Wc43MPnVJu^MS((oCQAI6IpW~{3lzM!F4acdplp(;BQ
z{M5UzTddv0X~kB7zw5fVDgN1l2LgC(-_5gd-D;xPvzEgG9!icQWFQBonwO^=&blkI
zcIORiE5?UUm5t>4kzr(=h4vFi02odjUz)mSx6kOGCMiI4Tk1LkM`Iq2=sD<#5gmJ>
zc1v`+3N=9p5a!jrU5T;`;!+a5T>8!z+1R5}iW`OETE8e>)qq6is%WaDH*@WQ1%<a+
ze~FKISGH6><rPGXYcuXZ3v at u=)$kp^NN9Y?ji at t<rK6YL7dHX0RpSr^!DqZfPDdtU
ztzy;J%CLhw!wZiQs|WiCkD+b)_k*LJq_6y<_y9TcR+`v1d&;8xivwVG44J<`IbY@|
zye&4}8vzI0VxpZ*bKJ at XI6g^69XL7Qs9IeVM=leQp0E|7qt)@?1zKw6fj+P^xrDI=
zs5kl`n|fyEGU9MFwZvv8H9}&+rw+d at sf?c$u#s`IubmWmR%B8_n8&JqQGYKEeDoy0
zZ#(FJ&>E{l`5nA`K7&t7evy8wpy=s{Yxqhxs_C9SEZo785o;6rDM8PD4N*MBhTo(C
zeM{D4$=Ti(&Gn~w+=22F(muwu at Vcc7IVF}wiFdoE7CE($4bZLouDx~W8tP4g at Pm|F
zh<G|a8ZI4-a|ZjY*q^(3P^PS(g#37op91f+UKIKCfvvxPe>-8?1MV_i=qBIO)MGe_
zx}uPTC-B)s#E{s4MT7+Ed$fL8BcPCcR=(6~Vlir}28k-e_eSwL#E#_cQlp>htEtc(
zlM1fHmR`yL{ZE0 at IhJPDf1P3!oC9=0DU7_>Agy)_>Frp6zO?GH*^=64JIi{U+<|p!
zhF9#G$Zl@^%8#g_V*rQ63G*;{ETi`Xcl|X`rNQ2 at Nqx)@oy$*tDd}*%f!t4LOH;cF
z47DLN<4^Fd(Q+M at Xg@z)awCHcD77Ye{E`L|kYr3RlEqjG1TaTJrIlF+4SNq758~eS
z3~X$8c}sz5RL(RLFL1?eIJeVzPyDu7+C9xeCl^H6%F!^cy3d at Csh3<9)*0zClkjL1
z64|XnZN!B5maqZ-voM*raE*5&dsxhkh?5JGxkJ>xv3un;+MZd0JHi-wtm#$#YqwPI
zo+u?5JM6Yyzk7MC?z$oOPz{<cUPBJ=-7Nb at Y>&Dl at Ruf;yD at p6J-;=R%`<)D(!8Mw
zG&ocDoo%P%006t<o<a*;Dj=n at psq$Jk2G2B&N7r6h$BIYtyraWRk#PLUoRdTd<D>>
z2NsO)<ZWNTd+g_dkz*~(rjql0S7+>!g)ITKpR|YIn~739imr1{1^6g;8y9FrtIC~P
z$#?#Hq_iroT?kArcn$zD1uCyyw(bX=!D1JnLNJX!IffG}xrdnJy8p~RM8X0z)wmKR
z4cT6I3;sOy*%oyThLy^NoXl}9reQl`p2}J)Npy at jGHL@Wq1||C55E?}%Pc3dQO)5x
z!qLF=t at 2$U(099-#CAVG-Btf{Fwk234c*Dp?AC2p%KHJ&9$yi`b~mGv?r^exem}xj
zweDj1z4@{af;%X<`?;^fun4t%+PY6}F$?#7vZ=*Y)KYL1FE8edRQO3DFUVMvCIm$x
zQIIWS>{$5wYc^lsQvwYD5R&%3RwsV|$Iu}S>c+26$)!9$$y4 at H^0^+mhd%-m%}(TB
z(EHduu%%~Wq}M`GX5<qaLI8|U)D3qBqRkd)DUfTi2u^~zs0<{}F-Mp at Q>djtqi7!E
zZltyQw0;$(ZAfKWTk7;~HlkVS-m$z;yaV#^#J*OlFf!+~f%F;`fcB2)nA(|yRRB}y
zC2krQ0X8Q3aXR|uW;E2ESkGI4>8z9^!`kL7nV37LogStCQ4Uu#BDON?VH-tt787Bh
z7>12iu09wTHIl9gnLxy^*|Sl<f`LdWAu`AR65z`fZ1p{UOeQX1D-s~I`VondsxBcz
zFgw5RT3$Y=_%RT>-Fxd%ReJA8Fn~3og;c_mIy{adZAbJOR<vHJR=68o6#JhuW!sA~
zX&Trpu7{~xLf1f1v#D1a-YJ4Ex>W&?n|e>AFZ&P*VZgg{Pg<P?VrFrgXJ2+2rH}r0
zwXM_1XEe<WGcpH&oWm?Pn_ytCePr`O>T#Boe`o34k;HinG4b0*Q$dYV=5|tSY8Ow8
z<HhQzZP}^KZfiPtE?U|4dV45C#{}p!R#EV4qYirH)<;wkG(5g4rE{KMZw=UNodEzs
zzhc*>rc?Y$3oQAa3kJZ*Uc_5OPp4M&k;fk4`M0WywQ|<`l<!yglDA^UAbEEs7tu%x
zf*7-Dt`$Pe*%x1VHP3{aIq?C;hiX+a);M={UrJa-+P5_9Vls;@3SsS<=TzlCJUP{>
zfekr|0uwmQADo}<R%^LA&r7_Fyt~JtofokW#{e=U5LvPv2Qr(CcR+UUe*jSqwlvO8
z#?hgmO(BE5+p`iksBXy}p at Ohd{4c#P=e|(+Ai}1$oTB1tPL2|?_E*@5G#am{T(e*^
za|~KJ+Tp+mK@>P1s|i8;Sjr((>gz(2U4k at q23@+L1U-|KX8l|h#l}@rrrC*p*n7Al
z=<D*s<mCN?q=mLV{H91>-|B^TBz^3hLBSeJAe(k^>%Gu7>bd?8 at zVoQi#mptk6J~9
zbz=wpO(+WFR(rxQ1!f|$Opv?K;Y_QSUJU6gz_BBHkn2i}&a5+71IOccdSsN+qhlU2
zRT`{Zc01 at Un#<bNs$@(UHn+<A?Zu`>SS77%4`70wd8l4 at P!l73iQArR at m?>g&?V7H
zQQ?Bwo3wbJS%o8RsZ>ma<xMhNSsDFt?{bP}dL^l$J3$JssrO~uMwYqQh-Wb=H|t%h
z*euQ(eq-2Fu`N6b)Jr<c6iZd8ssm-p9b&c0GS+*5!x1AEL1{4FV1xVM6SNMC0+7hl
zTCpKU4;xe<RLJfXT|msbXJ}Iw!_jaZ>(e^pvW#N#()>44)a64j*T-(?m{?Oj02Rc{
zR5fS1$1w$p$5mTpL&jsO{Zk1Y5`C}?dsU8e2#7RbbS_;&lXT+cX5OclX3Ia`7j&$9
zVV{msjikNGL3%BgRGNQv&sQ}25qXI2N87A;|Eon<lrsl*E1w1<yrt)Ok5UbPyZgQ$
zUCYy^V?}z`j(yP;!`NlU(tN-GKLp{s+1Luc4bfdol{7n&x&k5EloeF!jG}6Y6#btr
z0D0^qL!49o;dkT&6=_N-ifD at NlXVeNgqeQa$K2+;g)T`qW^L6otZ9n=9oKyUT&Yl#
zCGBBAToh&|FCun(WQUMX=HCmMeapT-LfzFjoqD3!9ldI$5qkdfy{}1llMW%S&YfFe
z?WJA;^(vX)A_K7Xit-4$ah4>;#`05Ov1<&_JI1w=i=e*C!+74~0l%bqcLXm{dd70+
z9T4SMqMyr=Yhbh$RH=b0`7{k=A<h^Hfe{?8a{4uPPF|w0w_+A?DKGLFOE<G&q-4UE
z at j@b2Ac_ at q>&nRR#*Q&S*`y`#d;&4@*DWBmMb4KU>3*IIwspg$<FcmsZTf46*quxh
z1d`rb-*-mzcEw+1D+w+yHiwca*redhtM6uOU;*)27{p8zi^K$YzQf at IiO<Y81pu<T
zGTV&{^4X0)62YxGdT(`|L?{N36kayMRc}Dd<&u!FvbV=G_>QMn<ocVnWu7xEYOydk
z+&4yS$gAy%P<L}sY~ip)`2Nkr56SZ6UMl-iM&gie;e`oF3O=Sy=B6HQ7>E$#-3vZp
zz at GN%Gl}60;3I(a{=rLVy}otvO##Hv*m9C)CRxsRf#AG#_W6*>eQF#e<>InMB at J=s
z>EoYkJO+89m&`r_hh~fBReo31!+O=_er~Xv<jdrDr)^b0gW8i2uUFr)v#`&8_AYlY
z`2#B*QpmM04QU^d!^hP5?F1J13pHe-PQ1NLjf%RbO5&q_rd=<u%Y^2{6`B(MOM6At
zo9I^r;yf9M)+X2wE%?ZE7!oW12v8_78_+O235Y{#psJv>r-~8xoPG+zcSQ{<@FSTU
zUG=su=`^g9pqn6zR1F;Yqj<ze`hl+qZMNj70771AAN&4S%>5#ue~&#wSj5P#*r>z7
zHQQR(WO$k)C%lqe`0k=CRCM9YCCxsCG__$bFe<*2IGxqWkpsa5Z!B(2(ttuiypC{g
zk6;NM?~JOFHw-V4r8d~J(ZSom%93EOBz{MS2&;zMS_TB2LM(&0BrX5XvQ_ee#ua8|
zpBOnqngC+2RmJb!<-XmZLl^A(O|@h~J@!o|!bFQv)Tkvr+;tX4LLi<X25SH|6V=+%
zKXwUj*}6x+?9~{4NOJY9T`|{(Q5ioiRI5RN6<FTUc+$=uYa3xTO76j3qEp2(YAIGS
z5b}1&ZDsdGR-!<~l#=lar!PaCt6mh*mmRRu)uF1h>`qN2=##)BrqLxkzKH>8_K}7j
z=$bdie4#gT${)1(j+*$oI+q9*(6hYy#2Y{361{g$AJL9pwdO2EC|3N|X&9G89i>?X
zOZ+`U1C=WgBg5&5WyG at yUnEfOsYW3qdx7XId5e6-cJ~M8_J?ou?PJV$8?D^c(e&Hs
zThFBT3~%Ad`lQqX1usboZo+OG{s4vUHURXlU`IWbG1rk<9EjJSRrD17VAoP`0`b05
zR}i1qANYBT`6hLqlER}ApaDyUgQ2-;IrZ_8h%;m*QZaB(w(W<VaUlCE%8$>{(mu#)
zY_iR;M(3})A|ko8*SEuh+nqZGRN?eq8+Fd8a%p|`ITur8rNtUdiZ|{rlj5d$7${>+
zP+DUkC8cl7v~c<<1|$=7$g at lfGZ>udTn&pkS=Nv#%)_+8RPPG$>LBcy00cn$zccUc
zG&#N)&2#IsvLcnMwmaawq^c?(B4u=#I2~Un3(0vp(Sk6H*Vp&><(Ov<k4$nF4g?$D
z8?*AkKuNgnlWuL?7Qy(`6&+>T#xh6;N!-jBw-@#=as5{%C^@J7NOaTy1>E6IEW~cJ
zP9m?HJXFnhEFW_PzB(6{j={OxkCESN!v&~zfh3um#4dLDSZ;Nz229WTmd&BWxCX54
zI7U$T;U^HPSOuWv2(|eRy*<a8=fPoR*oiJi0Mm7AEFpQ0C8~E0;yYkSSG{g1|Bhmk
zeg8&mE;-2-*$2RJYDT4$*g$B*cZCs%sJlSAnj^{NW(b3e?^+H)ZLbao<(u;fgV1u2
zrOi{e1Xtdz;D0z=&QOVW;2`9 at RSV`*H?#;uHKI(2u+Dai5;|4Q3<h(41lQ6Ows9q{
zdG at W0B7cf=B6!LqT%>hUuNXiEs0i^*ao33ouq==Sjw5p+h3OCV{m;%t+;Qyew_2Ld
ztrY_kKZ=#YKL}Uu&#W30nFJF5x}=}$(RTTC!7Np^0rk)@hgZC)Z*~K`A95Q^h_K3-
zSOSo_3gRof2GZHMo^=0+ at d4$~O4Bu_Q(;YXSGzk{VCx^G>&bV*P{~8EQ2|uKFxb4E
zxWUmJ+eTHqOWh}`fH{(r6MKOIj|`KnNoBTvDQ=0VRt`z`7WB7xk{UzN?Si1;5YlgO
zi-v_dk3m;8eQtSJyO9}-roaa<%;XJL0xfLpZJ56J-3kKz$TG+LNw@;8h{*eV&10<J
z@|SC{^3A^=E&qN&J`%X{^V&5PZ;C9x*LLlRijC^acM+Q5+jTT`{tV<Q?8&j{@*}(O
z{YBX{ud*H~O8=~#jmxTuye~0dZ^#t47I+NWX66 at 0>f|yldjX>&6$no%7+={<ZCAYM
z(Lq3#?4R#PP&C}xZmv-flJz=8ekIL<`(K at 5E$Mf=$H1`{?IdM5h3xGNEmz8AQ2M#X
z<TQ#Crd!jLSsftd)n`>JOMHYn^SS at aeS4MQCKx6+(7_ at HSYJGcn*O;~_OuAesdhdN
zQ)&F#cfaJGi*JjLV9Ii>hhYHdeki=*zx??$^#Fl<+_^6|%z>eRK`>iFr&oZ}Hfo0u
z8}q2bzT5sUSu?}eELYiO&g4`;wWsSck7ep{r0%&Q at MyU6g@+D}+XfbbXIro at +wz|r
zIB~V+v!bKEANffz7k2XN+s1g8t0|*W5)LdMm&|r73Tu{%r<FbEfwgwihn{v$j)$rH
z_5l6>QHo4~$cQ&wJ*ZW`%0-s{G+SlQrWVcAlccwa!eR$OT+CzgvO)+5+wp549U>Hk
zJdTGZ8)*ou at u(|9%x5(44h}uALp97|bF&o;cY#^a7%wUsgcZq1jtlZ8vBHNa#`mJ9
zX8yo(-Idka*%d(YMjdB(*ejyePrT$Yqg*4F at n7jG13<ZO- at 8toTdyaM93paeL@a6^
zG=&HvI|3d=n*_B^<=aJHEWd46T#ofNg~?{><$1E0-|yqzrP`+mXVKX!vOP7d7-+Hg
z#%aHD0~i+J?)QScMhQ}qCBOY|R1 at _{(J9%{NJ_b7rDpXQD7cc!z^{T+`darCky0OI
zEjkkGH$)!T1EvSW+;pTeSlEjd)dO4Jzki*d#+;G>v1IWvhYK&rZW)#J&-_|_7U`#>
zl(H>QFa_3Tx9f&NM>QohV1v@@t(iAssYY-M4pHH3vh>O4T7qxhP!pQJu4p7uw%b;+
z;!ey%q>6}CzU%aE1Lh)0&lnl4^Kqq7eFPa8)sni<G?&q1b#Txp&BZ`yolB at z28G(u
z`Vb1a`1B>4(wmH4Cs_G;G#<;EEMIlAL-DROt~E|$S#&8#Z<gis8N~X2=lm2g?MZ~*
zVxojaqnr?K_1T6uMYz^A5a*}LbjS*e6}9*&Yq`m<2Te+dQ;-8auUSi&8W&?jUkAz_
z<>kx*@cSSHHR#t%t}}_Tb*ncNFeBPGzF$IB6YuDpY9awCB5tLLCTbQg+A!#px7*Yg
zxUqZ{DR&iAp$hnIa(aqYitjWaz|`5!hs{G9EWa*Or4dw)klNq at 8D>~$x^jsd48)sC
z<sy96*>>)Tv}3x1a)`2Ep&-OMGPyW{+*Wx`Yv`P at wV!M#ezRkatb-tzZH)tOQ}byj
zLe=I~yldvmH5_Qop>_H@*#WQCs@#-tUifh_)<&Vj#fC7t!Anoo;es{6PJs6?bq2R8
zU7bZV)6kIf!JKic?wm=LPCvd<S&BO%*%dJ9D}(1&=Q;=Y3ltJ9Pi}=u6SZI}1W}1F
zGS=CuEz<O6su>wh=~H&JcYiTSwcM_nU6gm!!8l=TAq0f2a0VQw5$<7P(jFGp at 3uX}
z8bNUY&c$dWWqYqPW!F3}E+%j3feqLJoGMrBpx0<4vT;l2?j!jebe8Y$H|@41U~XmU
z&ENNqU4f)r>SJG`dCOd2R7*U6E?Ehkwj at j+uP`{ag1<ZnlQBxpCO|6=f!>#4>gnaS
zBtXD`w=j(i55)g>LBmu<R&zeum%RJNwV=rag?g)v$8WWYl2pMJSQiR$2YI*j at L2v~
z^=V|&V^-gV&y?tZr5x9l7&&v2ZHxMe1}d7kS1_=P0+IQ_fnpjcy=z`+3rkBq!Yb_0
zu at 587CcA=55$;2mHaf`~f`9G^qCnc0VgXlUpU<dHO!Sx5coNCxI7lEr0xi_G?lfmb
z{$DW89cp|W2nnbXbR_WK;lsThTjS1Ho8C!2Gbw+*uwvXiOy%<Tldl$1d#-SSCUk16
z2jk~$jwf|MEROWp+*LMlXAz?-upwRNTYIzx-MnB3NI;xQ)b0{_H}~e?PJZ2a*03Xd
zC$wYg^E7}bJ~Jh at N^Ww)4AcLe&+%squ{AgtO at H2|Qetfi{&SITM$&lKGU-=$i`lm_
zl**igf4 at xertylt8-W0HdI9PySAn|u+?A6(FMOXya|0T++XXnmpHQ at V#x^je5s3^2
zFYwU8=>cAe`XE%!>e7k=&Kkf-ed_9)kufS;jvtH%Lb{WIw-`_CQ_<-aXzRIKJWc;1
zKSx`<L{)3Aau6?IX}sofYw1CR=BNrPT-d?+|69G)kpfy_U~)hX_a61w_1$aH at BU}U
zK~@-8zr5^UuS%6Pw(r0LnW*CXjzC4_tL;BoET6kzF;mt#V8|pQK=woNCcgUq_t&;x
zDR^nbV~}5Rs7&Q)@7afRffABtDVHroL1|360z%j{<f|HQ7po3Ue@=`DQ9e;r2WGT1
zhn?pRFhwJ%DR7X4 at Ty)O4m;o$ot7*K+Lt&K!6k93wmfoYsG)nqkL+Z3LhXssvk4KU
zqZ-gL&7chTY7WfJxj-X_Bqtk&w92ESg2doT_njHQPxi<F<WP*`W?f&`OJVYPNMETI
zlk?FHZI0}mJM|yeM?>u7`z93$wPu~uw4JT(mt~4`s|c<2U<>9f*L`fg04DVoAi^33
z%D?iJV+SR*OW^!QNbFzL^F4D|ZUS8%ALho2;DRn|r6$dMeXhaet0E2c9(hto3ggHv
zaF!X$bJQxqO-}NZI{@YI^Cx(zWTocNFSUJD=~gq?@DIqribKsiL>qEIgWgf-s7=l*
z-1yp)$^fX>HI|HWzYW3jzB3!Ll>)FRJ23XqAFXitnxVd3u%T-7l8GkzD2wv?iF_ at u
z?~G!<+)1<Z<}n2$?{#^6Rm9S6&2HRzg_rSv7~XAYp3A^Br7f%B*R6h-mXATWGr~8=
z;(teF9&1l`ESD_|J)nBVV^19m4W8oRjLQt8nX!WwUiT0ojOJ~&dx*?P_wavv>+3|c
zW0;J1YlQ<Qk2SOTN9KU}gU+C*3vuW2Z{E^6256T2o;FglB&d at Bo<cR?bwJnv2hyhb
z2;-j?PJY-v`vTczt at OT`U`$XX2 at PIR*4q#Rx=l?j48-+5 at j4+#G$M!VFi*3NUNXKC
zB&V%cV?V;s8oET$fu1*8VZo4A*|WH=Z)svSu}jZ|@FmYT{~76xLoB!&7NHB!;qRt(
zmoL4&<aUrG0-?#j<`}{^_T5jpuim;Cf^3b7sg+7 at MfbK%q;U;8YblD}zVXplU;rpp
zKiXZgSu(@0J;@cw{u^ZgzAS(Qq;7k2#C6kqlgCoC+veVCt7??ldH2bF73YNfbn7L*
zyu+Vdq~U{Z0o=v0WUQT~pc0#ee=|aj at E&mrrA-rAN~V>#a7F~_aWB>DC$xp!ySvp8
zp}WXW#jB`{XL-GSX2tS5iit}i_F!s~|GGq3`IfZU{{QpJSVG<P)69e#V_?O`GILPt
zPXB9{Eq~}c&uvi;%-$z4BuhZz)14#)@u6S#TP6_8Nh*<v5>>^HXt&5%vgIE~_j+G$
zCfy*n=#KJCW>_igryaAE?jZfeiJI`YwWr`w?jj85M5M4le)hZDzbv0Q%bB`iDn%?1
zyB*1h+V8}wlF=FTe!nIlslq|9n8C|Y2)XvDk-9nj0Yqo>{6J|d-Y$tVjs*2>noI2B
z%SC)y>E(Wu|8YW22N2Z6@$vm3+ at XVW%>Ny1Wlwb;yRL-GZEnr72SouI(3AD0RohHS
z-|T7D{47Re%pU8%Q-T&D2T0m+W!=jIgxM#=Y-z<1R#Qi;QzRENmkX5#U-<83dNU}+
zxB3b?Xb+uO7!AE^aq0+^ENlsbq&%xmK5HyX2fBO5hTc;G_dUPtdnz40Z_I#ajIpFW
zh?hdiP$#GSp^S9O2p$`LM-jyN*AbVld<H>FECsp{i5$3e)|gKMMR-D3v2L#?MkY5T
zLu+KQ6C=PCZq^f!#gj;Z=1=U0Xb0&1i5I7O-(FWH7q=9ajRr_wBRqi<@$F9}+{yz}
zy*mQs3#*nmx9Am57zdOB(P<cw=70;%soK6$I;ymVzC}7jK-%WXlfwTW2runBhYS+)
zCQ>llED^G^2NwTx)s=9z*aEy|<<bgu*2UW|{}AO`v5>=|n&F56RxVbH!0@`i$Jb(9
zN&~@hg}kc-{-h6AE;Z;;=l(*S^Z`?Zx`ZoOBQBN>eJ$$X5`aEIhGN7(Rk!(sQ7y$f
zkkr=8UpF7feS}q`-XA^<Zmd+-@*t*ZTd6zsh#(8nKDaBmK1$y2Y<rT`0dTmg`{iG9
zZoSSB#z;s&-EMEMJR74~I>jnZ*KzS7sJ%!%5XRV7{7DVk5BOQ-FYyDeQBS>1d&u(#
zQqj%dyYo$5%7TGV!F-h}7n7I*)P(NEtm2NA8vUe!jQIu^2cXRrytjnoiZ_PUm};)9
za^g9%bnv*cR5cn9hu7hz6yby9=gFlgzRaQU?GO%8sPHo0=c}hSG9%-^^at0&i<7v_
zJ8~0XGw+1xvK+VoQ(Uw=a=;;kf2M78)jEUg?%PlN2>dZ#xg at MsM_|+!Nw5|AjmCOu
zHXI$4Ui6y0K-u|=du%MevLbWk0pzD~-f4pwGd_83h9kr{a`dbq$c at FUaG~D at F9{pz
z at TyjwevYhD`)~OtYxJqF;bGz*w?9iTcg9R2pZ6roZ4^=3w!?@5?14~%YQn*K8B1u^
ztmd>~d<nZnB~^r1INI0a&={U2#{WAtOfJVvQ#o&&{2?7mAS39%SkNeA at sB2qkq&_`
zp&~v3`A3+w5AtZmde3a3>8X5fpgdDo>Z${Dey`wkTJOa=7}#It@(V=6N#sy6UfD5h
zT-u#OLXWZpomYr-5ewG~o_f%83(BS7P;aEcYmNXAg>&%~K+Y!v#Chh{zJQRLl}NSh
z?~v+W$oH-*hd+ZhbAzRr%H*}YP8S at yX|XVJS*IxynR}LA#Xd<M@?QMEh?!C{F#L0}
z4xez9rEZ67>cR=xeo9I8q1a}m&!x;nRsf=x at m6R0bQ>j0%J%VNv1=oc=qq5K*vO{D
zAYxwjc6y8ew%U)Rb|%8%q4mL!#CBnl+%?A}pRKCSSu;Gywowj}@v7bxPs>RTcG7aq
z(lTu89k3-IDLaYu9DhA^y|}TY8V)wQ=jQF2qL1+5v8yviFM%mb9tU2bmUwqq;_M|J
z-Ig^-ngFiE0}NDfQdR-|1Y~cRSc?J!v$D0^b6OZwEW!StU<OPC*SZac;srP(_N)4m
zD4D`utQNy}U8dtok2E0(B1?z>YSOwVLOjdg#DJTHK)AdM1&hSGtr#<6f==C2JR#yk
zH<7WVC|FYV>s99!se()-#NwtDg|(nUxkn5G=xdf%7GBS)QJ1mz7p4m~!uZy(>>?#q
z$C|IECki0Gz%j#?9!j8=1`uiH3}O-vjrn#y)E{8v2X4Mw1(dOZKH}NfZA!!~ZhEPk
z&v5z7ICnk at cU~h!iMcwMTzBVQb0+!QH(_zr*JNUGQOu~2KqZcVGrCn!ggxP7m at q@k
z*WFhG9U%Bq<#g;Ld_CoD&2Hf!7RvOIh-dk-qaq3GLlR+OvEGYhHB3YamK8pCj-w6%
z<~t#fW_;@Ag{|~(bU{%HXz8C3GznzYnpUX?1MU=g#~Ein72Mw3PihM~;h3CQS&-lR
z%Y at VCg+muN22PUGP$68%i7`TlN2iV6<oG;d*|+!%e^CX1zgWB$NJYy3QQ%L?mA&`<
z;f~V5L5F at iK^^V<T61}ncG|E#tNvU}k5*qC;0ono#?LapGWlSte7c$@te>2yK58ij
zrX#H12nzx(YNuSJ;@3Kpv%qkt#*Dx|02Lxzzz7_P#*kQzfZr?DrZb?mfC-1vkQ;TI
z2!kK!^#-tyWVv-IAM$JuMa}5%ZeS4MP%B$)!17*8!5AgiV~!}obXoM}*8-*|O_C>`
zux*jBGMsO<>r_vgkm`BYMJ?^;f3oL{Z=JSQ1)1yrM4OQUb(K^~@?P9h9GFB2m#qte
z?QWu;8a!`jTL->6_j at X%^{P{nlRd+}W@=$7AAB-)$AyUy+P@$l;W|BgNOmsw+FHrt
zQW^1?m65w2O5m|F2fEubB)GS`9(CNlw$dFkQ0yd4T1E0sTXG7CRLt*JWUinKQb*=`
z1MLldp5o`wxw;2T;>~$A(4!oN_;wpxZh0*2SKYH__q>@=Gi7O-9iRC<F#qHjFKqW8
zEUfXXGg5;Nxq$<(+_Oh0FWVYwix$M}nr-A6iT+hd(*a)UbRF4k3;sSSx+Ly^1D%58
zw)-7ioEXp92?NN+cnxp4>Q{cnMrfD66%vZ9bmHHfYg$tzK|C=Qm3xO+`i{56Mqqq1
zVAkKy?xUs2Ip6dzelAL=m$<!Zmu-^&--HK3Hnb|1f at JY;n<EN;KAIqqueNC%J33kC
ztrMx_Rq>2wSx8^YYT at 1>V8&gMN`lgruefq=l%w-%%z+XY&CtIp93Z4mVL9X`@%Qf>
zo-FmJ+&}l{dJVroGzutE$MC#_+ at Y)fEZ at Pqqe#EGDD{2`JJ{yNFUVcv&OZ=OIa0Kn
zLn;As1#uZWLaH5gUJ<Alfu3Z;0~O4JD9PFb5|Hx*Q9#kkK>9_(8Wpe5fxaCpQhXI1
zoDhADU6ktuU%)ZlFX?qGM-T_(e&c9t5rH61 at OuV_{=ZqYsgqQmfVCRn)0Eph4V)po
zLCYX1+WmIUPoeDNnsI(4nIvI6o{z#fLsq*hRYNx!!rQw&9Bz4Gl$!3RF%_$gtLFs8
z^Xtc&6n3S;IT<P$x9E2-5ZfGQ4}~5pB6<DO6t at vEBc5)je!Pcsp1RAU5NiRWaQv)@
z-NJ7&G98yTC9y?V;d2sjJF1928TcHI`R@?gI^cj%G+<n}MZG<DK9<E)glo>+NJ9l0
z7CudfucHR$|07 at qX4Y`w=5 at Gj@R@&0mfa<t#nYIBAp;}pVLd_Du}nyawz7mk0ouik
z>KM900!MG%wz$Bs>o;^p5mEqFxj}xt%NDZVLeQj~e>fEn9eS}4FH0d-I{!>@EcC{B
zSe}YpLo5UtT^seuz_|0#ybUuQ3X@~P)XH)sJi89<@g{T7_d&fI+drSI%1{v{4|J7P
z;>P`8LBgDR&ZWX_tme(}qr9qx+KcA*;<kNu at P1HlhFr>{u15;bb$)TZZ=VrP(djE-
z%;r at sd!}Y5t;?!l`&BQ;bQN>uc?X8j!bRx%4Z$BC{|K6A5$#LfO_zoViCm~z-a}0V
z#)>j#`TeTMQ5{WzgxeAfqtxB(v$+v6g!X0_Il*JGS at BN3t!TGGm6D)d5~l0{94YYj
zl6rA4i}Z?U6eEwf1=CBZQ6P0<c>w`2ZWq{#Ng`)ae7^y98DjDd;auP14X&?4Ex0?e
zG5ofCAO;0AnF}ybr=EN8 at +@5)ukh@}`zQnIXbjry_d>16AKp8naB9NW-gq<@H&fE4
z>&f;j^dCEp2MS?UJ~p?1#MB at s6Tll<YySQ~Z(#y5+S-TK{@i^EC&f5%qmkDV at THE^
zV|n96iX9Itcnw#6G%!Qb<VkYcINP>1J!;%73Xf<%%xE}Ce-8nE)jeu6)7S!JYKtb3
zaPBu^1@&_sWEcntY>GfslZXr_n24=8;?6GlM0Wx;Ym={ZLiY3~%KA$}O9n23Val84
zg?c0#!G|}4>iyVbwa)r8F`*CiOy+A5j~ub2o4ul7L1H)V7aKxle0}^1E7Zq at e_k%m
zG2^u?w9Au9yMTw<gzx{hp$Y6k$hDEm-}D^RfJit6IWsKhf7NReJPN%XtEc>r6vjB;
zGoQ5?lG^YpL{LM`WDiSO$Sm&I?WPGS7hQnI!H@|RQD1;l2+DmF)=wBu&h#>ip2BZ)
zDhRon{msS{E6hh(v8C*|Tp%bk6Sc{ahO*>YE4dFvAlq8$UiUxu6wGdTV-*%7!3|7(
z;;Fs%-vz^@_}V|vQ^5-<W@&LPGW8?;+C%{(0FGBhzip91aj)}2qN4uDmT?Z(9v2WS
zB<*gJOikr|`KM||PpBCu&>Ub-uoEx|qD0(_sTpyRa><ZIusJF5)U2wHH`B_+wi<qM
z!!h1fsA38yVE=5A-2CxGy41{{n?#5xQWZ4GvDj{RKA2Dr@`qtmCTK at s-|RL at ii)5H
z8F at A*HF0`6<6f)a&>~_hb$iXmBBYca?)nnFw>4cpwWSEqt?gtnf{~%l%l-K~8To$M
zY<NrY2>B at p!wDHx5PW1y9tP0RwTI6609Uz0yH}g+nIP*%I2TWZa`1vgw4;zb4*j2C
z&P55RZ at nQYpY9#d35}CB`J}E~g+1wkzD9E1j0%K7I7At_5C&Vp=MX;6$LZy;^3WZP
zC(=qET^X+HEBe!JTjTvJT-&QeM<_|kgx48sqhiMdga*7fJn79(wdEI&6sAfjXJd at o
z4MLHYegk(xHHRT_H*$x?+)afaPCtSZG+x>gu=_9i%ant8ZR6_GTVR+$Vmi?%mfTtv
zATADaFNubg=h0FGHwl2gTBw!iqSC^B=(I2y$J|-a93|qS{5o0cc+`Z|X4PCK8VkEu
z_K}bUJCJk?4Kv?G3GzK9Y3=p*VVM58koE2EO5defml{=E!>sd}mcBX}7Z~8ZY5*^x
z8;^t0Aju}lh!9RR^`_t1977t>Z7DSaMd!krR^=I}*P6qIFERM1GpR-fv4P)U<N-MP
zK85uKpIk1pgA#e=j<DWG`z1(lVf+3}<d(a>vA`ha79D^{E((xi at -qqKhg)Dc2EUx2
z at gSueT&~|Iq%oQ?OKws<gVl#Njv>d<y*m8LK}A-=pI&pWLX!)J;WBz>c7>z=mA at Y>
zkf>9EPV^WQ&3I{bWqp4F&!+xj){=TXRyEcUD0mU`NZ*p5EBsNcBqWmGf^<&WPz!8W
znB=pjYn6SU=>&uCo;N1y>s-9X-7u;8K%VCLMrwuCMhJ9xlKdVHeY_)PS<y~}4Vuej
zAQ0q7oPUxm!r;rd6M70bCt(5hyghN-y2bZCuT3gsg`bx2u<ky4QnGm}bkX at uuJn06
zv+;VO;>`- at SOrQpWj=MjfR&4wuz#M6a4H*X5=~F?m49(x73(t>l6wK|RT3ALyxW@?
zw=|2mp_^6ZsGn)e%e*4^SRZ3NT10Q+D{xG$a1^LK=41^MpydJ&r-Be6^PWAbcR?v3
zA80J|Ru at s-b9$31ikCsufn1sfQ2rgTtzdolhV=!Ddn07j^NUn6UDF{u4p_kR4t3uC
zV*%20LXL(LmhF+pKQ56t(FhrK^^n(ra@)^(2YMk_?9%~gAaXUj*YAbfoPq{&f$^@n
zWEY1|);MvgF71ZL(8qJ6bM?*(i`fQ{{Fw=!-0qU+6dTz3X(j9fxw at _ou~DD}XM at f#
z|AqpT|21l2(daKMtS?T at SHMaYHlMLHjAzm>yr`fd_m?_>N5Ok%F&ah$ylMIQ{=rM-
zkJ-7w>>KpfFvsp7IR<DZOIT}OAjKx4uW`p?!v}@4oKmr1vC1I-?F(|3pVN~}_o44X
z#oUf4_Zf=W&%G4;=L}C*&z)&uR2b7vnLEZ%a<UFL$XL|S=#eGB>H}eTnDapG3q>`4
z)QH@&tu7Nzs7X90^g**7Uy(q!qoJ8@`LdCp61Ye8N(B}s7CSpE9;Pc6C&bqC9#IxO
ze1TSoRT$O84QjdV$3irbpXsW<2pZX}>iY|+x6q<yLfRt2=;Py at a!aIhdN8z&B;8$(
z35P+#i0O|IN+(ND*drG at khA4Zv|~632@?E;c-TL_exgi6 at Cbgk*WMB|$Rcu0UVc*{
zWg4w#%)~{xboJj8ApDf`)-(+j<KN9wC at v@D!T*t?{DO!Ct_;XqJP;X`SF||7e)0m*
zLBo)dY>eVP(UVIXoHtO_GbnvBbDCRJDY;u-BWC>)eD`fL#ZVp8FUgZe+CX}!Xp#jy
zn<F3)$&fPOPQqW6vJ(v+(aJ>l7rr<irj?|IVw8zuz<xqoq=u-CLEDV0w4%UdEzCH*
zOgGdfBuXUT?8JVa=A^-DTC35BkcQjs7$Ut|b+$e<{>NH-*=GeQmJA1`GPLU5Os^-!
z;u*BrZ-6ui&j0F>WmgyjULlV7PQ;c}999#M4DA=g=O=b1iVyA}Wdv)+pd!?Ijl``s
zMWWp<!i;WPYr660&45W6Kpn{tuaQxuX|<r7;7 at 6m_hH}M9!7BNHcUn3tUoT~P^co<
zd?14VhQu(_B^y?RCK;edJOrQpUB`7KADz&K-YqpRIT6w|$@K_kaCrK<JfXH0^+d<G
zrCTFKf7!xM2e88xZRVtf0i;Z|0UNujoyYiRLq6YdK~&3B*cwm03IT9lOtx?R+(Y<o
zsE$5F3oAENdHQXh;zoIcY<>s4%ciqW*Qv!NISNT4qn{!HQ~kkO1UrGg1U2t}3OEv!
zMw1WM`POU(z<q7QtB!Q>;VhO&HRk|zyJk6DYVf5~Y==d51b#^Wm{dD)W-zkr2i^dS
z0ZhQb5+JTb2OXqEV-s*B2;|Flh~zQ6%}fdIP$MLt5(4#Wx+-5wL{IEO;velS{Hy+B
z3|<enzwrjZM~!pYt0x|OvW+53{babB67BEq@;B!AtrJR$wgp?z)w4FQfkh?p{i_W^
z>rFG$sQ{YrOKC8k=(ERFk7zeisp&cf&FO-p9CeT>gxXgXQe)rD*{7<@X!DXE25?{^
zi7WEAL_2!trUVwZGC!USLy&vlE~H6<40 at 8vDgkFPh4otpb8B(?(k`n3G$~;i_aP#I
zyRU2Qm^A`h4pjwIp$>QG81CTHxK1H7Z#sjq->mSliA_MAB&A?Kp<Fg4dacM+=5V#%
zvUJjqi at am<7C0W%d+s>NGfg8vJeO!xI>}Q*^HZhomiKVb`!+5>c|;q&uv>gztrSUr
z^0HnUw0)QKFKMAcj6U@)bJ$AHztLX!Y{V8^?F%Dvx~t90;L7q?zk&@w2hEtEA*WXE
zQYGE+{D6hhiHT(?)j?06%GXluJL+pq+cr8_EpB&I#Lv+=sN$fvJ3u_>M8g%hnJF^C
z>glEGG!DFN{m~m~{~`v1m4LBvUsTWn-#xC%1k=FP3|C at Rf^eEK|6JP>aL;)bfy!fW
zP4)|L`=FalSkeuN56?4Bm at 5v&7Q at 9dp@pX=cQyz-riOX?bvdXK#Yl|Av64K}`rl=6
zZ<@e1=)e<(f(1X8-(%w=S>6U0s74#Yd3{PU`ZzHSeU1ZNECO|yUE41mv5KX8-08Yt
zZZgS4E)hP=Nc5oUsfR at 3sLyWG+zMxM-uY@*)H}Oucr=ci8EJp*3)0=DJ+X$dpWb6v
zWZ%e^{<4_JHcu;qbH6<2`<}wu7<Bqlu=-rj*EOml<wORvTOcx1LJ5U3A_-;=O0{Rc
za0m)ZGkXFo3<cfjpwFX8v=5iZi02JRWV}G}-!c)DfrACU&Z2>w7=Pae@||ZXDQ5=p
z$w~yX{w78}677w})kD9OMSTnYzho-!eX12CjT$e#F5WGMa&G6Q=Zb?!<05O|HCC7F
zc&9`Bu0=_*dj|Y~Nb;NHp4JC+G at Yf1<N31_*N6IjA+Zn+QaPlN&v6(SqV+1Cd$F8+
z+8Evy8kqi_I9F2G*{V#)lr~b;3h;XB*U4!KVp%&Ur|ZYJ>!j>Jg8X|M1A9YTE!j~o
zDB5j1q)PntTNC;C89&$Jlc5O>P0A{97FTHEY&w8~B>mQcMzPe~cG+`Eg>+J--9QyF
z$0Pq3Lp%3{c9j)krJ?Nzk?0v-mqJq!Z!)rX4ZJIU9UNC(sC4ZGp6ngO6%U0p7E#=9
z$<w+$Sf0?pht&_3fD)*`w0RK7*hN;^?cm=I%L+G~?*>v*f=W`-{OjQH!ODmI9=~P6
z7Z<<M8^QOsU9E0zAaggJMfGw6mW)bDDFpKG=_oSt#!s!&G>qWcE0l2m6;hd7SDR$p
zrdVKMn5EfdRA4A`mIu-w*&CLN(!ZP)tey3;pNpr1#oySG%WD4cR at gbcE(rOQAXGpI
z)nWyt?C+2-WW&#d@~l9+w0e3pLIK}F`T6xDGAh~nd6#{m)wt4KvT&^V!noy+NECx%
z^Ml!hw9X%`3SHLt?Ye0c-whZ94i(|7Stb<uKB^TVg8%4O9z9_raj2(9QE5=8gBy~N
zr=`yhc5@=xtoQxvgl5dl1AAIGuN?KZwRy${RRSTs$*^$TJA$;_v+$(>5qPmh2oq~|
zEYCulU?@rCLo-AW+|8*H<*tt!Md=sA0ehx2jYE)95pR+avfU->m%=jn0U8FB?DH at X
zw(EUg2JQvJvG^(@R(L!?*8{ZY?ndgH1gC7Tu+dBJwrKmHzevKa<4Q}`q(j(Nyro$<
z+HCQu|5p0ZXxQ|%R;{G9&Ks7UUd-}Q68>n|^OIfcA24{pIYU5)e{;D|p2V7v!Q^8#
zT4NXZOwxonw;0%(x{W**;YPtJUe+-bsjaj0Stg=-0N)p0LQ|E~7TseiX70=kK*|no
z_J<~$9iW7{jnJ{6R6k$- at g)ltAjSK3Xg%*)P8Dn)$hFJGg7tS3`37zRR5zDmvc9=5
z!+k=I2zRWt!(6iz*Y`xw@#zCv{w_Dj^~mlK#Dvrx<liVawx=yu%W$9;m{gt+FO!de
zj4YXz%8N#oT3C-Jt4-NpFDcr~o1GqBN&6|HLg2VQEx2qbQa5L}SO8Ik%c?LEeP8u6
zJU&-s$x6;+(Xlu$zGon&N1F;?;gk><ZdO0p>IB5R?A12(k{J9?Xsv%6(MK_gW`FWr
zVoqPgLLi>)1|FCt%wx2TU0a at 0<1)!LmOD$870LFgkFMxT<}yK<@R&C6{H&9>l`GGM
zc34{<v#4)K_$1;mB8qF-n<8$V1RJUpMaj&yM+>^@?@I5He|4G{@8x;G`G6a~<cAiD
zU3S=rSo5 at 5Zc}#<#KZ%KBL^a={QyGkh|s&S?i{$Lv^zkV0xB6Y?3v7h4scFT80E8W
z%YFpwx>{o at T|{nOmiiVYq&L6GqCg0=KqM_DvJKJMbNzXI(EgosVXPV)_PQv`x@*7D
zh7c%{HyB@`_<6VxX%Ax_xpI-jUB0Zor~xmU<xb+7Vx7(IIlD~J?PrEtPH)V at dx6`(
znXd*WR5*fT=+wZv0>{kii+SXyNY at w4&*@f1VEq4uu7)>DdUPep<Xm!<DIgj$g`t`z
zrsp05l<XjZa3iWRz<UB4hb`rOOE_apAcg2N$z7Thi5(IQNHU7Gzh*KK*ggq+=k-k%
zx3UDJizBasEBkY-ZsdgHyjpN3S(U#G9)>VmeJ`V{F4Av at w}vVO8)@QYd(j1DNOnHo
z$Oj`pwPr|$8Zo;j+eW9~NzyQLWoPwBK~Q+E<Y+*TJypj7U9c2%?#|E3E%$p}7UTw+
zR~TpJB4Pb}jB_aEnT>r4#<0tM5bX)d1kr;6d6bjw+PO<af6I;z?`U=L27cfOvhD>-
zINKFyuamLD at 5Q0NXUmf+i=53;^625xf|0SRjUO5n at MVE~WfTCMH~irs`sG!C7jz3%
z5Yg@{04YbOQanR5lFTmgo}lwEE6med52?;5t>Pu%XF|LXvu>YjvO^pX&(B!niz9`!
zwp)=%vOPr~aIN<`LusE&?Mupi)m1kpAZs$RT1_Y}V55LeDwBc)n=W}pNKdXiLepr2
zynd*yVYf&QOY>vqE(nI#z|E~A$ydp~PKN0xGW#YG!5d_)%pk$!W-xCv;D$ur^5MjF
zLdcWVzDH$YEhHQ3a{umA8(L$_lX^LtFVZCIHuZ at I6)Xf=TiZ=YR_Xu5*0!Hj&2G8n
z`jTe?qSp1v%^14jxXjmT8@|w~y5&tD8Kl>0i=}|OsI4bXsjzQ7Iy+=~#}NH<HmXB6
z(cpURHKfkVU8&u(cVlKh$OsO<=!~n}cnme=o~rPIl?F8M&2m_B4oDa{-eLJh5{Dqw
zBGi*WbEl>$?q+em4+LdyNvTe45ps5|Nn+RtF{`;F*@EL9Yb(}b06Skq1tHPY9o<2M
z-_4kNPk5rG#wN;sN$A4idek`+yS{!zCOjzQYSrs+Dicd at NN0QRsri1wR>b+!HIqZ>
zYQ|8{x;mdZAQg?_i+WydFgK}2--~>!69o)(#v|!(r_U_q-i#h2SN8s at Aoqce!D|5~
z`)-O)84xv*w~mc+;*OgaWV19N>w&q9LLit91^NhG#QBKXPS`BXf{Flk8H&BJQ==;w
zw~Q=m7j{-SV}^N#pz*8)cQG6UkYeEsiz>%q0u^pADrGgSrosv#&-*C=dDiBVo62C)
zBcO+c4vE)DP at LtN!{zma%4pP5lxXh1abU+0%<;EL<2#NJ!0>OK0;~!G0q%~Yx(!-a
ziqM+QZ)2T$9(lB$LnSmys2!@rViIJ$>5dgz1 at Pr%LT3EkqUp4~YDxxb6~(x;w2agc
z%3tTf_jrs30DvkB3wrNBI2HNrLsPu$CL&Ml<Na)qsc!<qf_L5NfVYIcs%nGkol}q_
zhY%gLgB?%``?}n|NcqR9yo4%Ad(hhDfsN=<7zExGG<cF)x%|~EMVEx;d400almG1Y
zRxb-TgFeioe%cMR;kI>pihjpaf at havetc4V;S(H1!G&`pMjcCyXkOr*cp!cX+}qtJ
zS<$(VzF?&AwU<O68Z1uCD4+UC at K~{MQntTGqO4WOc`-A|{#>G`rM>DHoM;GwCX&n4
zdn8i|uL9amZSc*0m}l{db^&)QmSFe!61acyF8c^S>NH_lmakCCKPpVn+uFRPw2UzM
zf|-DxitZK{dSNONUdR;OP*)f<RXU!u3=glR_4y!ZLX?oE74%u-EO{GQ0;>Z0t8{h8
zX9Nw~*pc(9p`2o*S7}^?B0fw~zull2bObcZQb^h!&x>9oJsTYJAykTlpfNkwG}MMk
zdKU1g+LS7fE5|IZ!ZCAlqg};VdwtYamLZREC8i?(Fk7=P`R{@GiM{7VOm^V)b#r2x
z>h)3kd^@?J&mi+VEs at r>MCl%U(GzjQP#JF&S>vZl{@ODuaN8!>dJ3dr|I9Wlvj<Zh
z5fvU<lN0!6XMfMV7kOUoOKS8GSaHFFM1VsSusZAzD5J&h=d-}T7A0~PELgK+(u|gd
zwSzSDghS&Q4f0iJqf0)z(HV{83-4lO<A+_4M_t-T%1L%x4j8b(D*+_mn(%Jepvvy2
zhp=nMg~-|4)Q|uz at v<?<bIe$1fqjlkwooRn*M<dJni0#{*6d-QQeJlMMOTzOccDjx
zsX|kb2Kw!dm)bD7UrB%e6G~1t4>>yC`K}(4Vr at Hr1s(Q_*F`rj1LOj(4(Xa;H?To|
zT&tWY6*cpP=kt_lx{E!~eapsF7qT2vd->|oDQ$8C>2jmT-l;gVU)t+e3Z=#^COA=<
z;p<k;G2=uVW}eZ6(fFJ^mMUIXOu`$fiD2!{=NMtZ at s5+_rzcN@aOGBuoQW3xK4KvW
zAM%aSIsP*`mXl!W1vje+D*1C*g&mIb-<?7Q8%gH at iVxB+3r!o+c0EXazak~A4Uil9
z*Xs-ZP#Bm-!`_f<S=<nwB7W*6VB^j!M=^$<(izXxLk?vo%NZ<`1mb~yynA%@>bh;V
z33)?Jvkr?Qwt1Lg2`(=!lz2<>()65?o1?!N+X~>KO53g^z&uuwQ7$}E?G7^foU_Xs
zdc0>~-C}5*lBkP}VIW0eC8{0??jh2?+z-Xm_JSolqDM|(38(UDq>Dx09V{gT-nLV2
z=|NWI1~0F*2|%owIu^C6zZ}p9qY0YKQS at N4i3tfXYJ{ISn4f5xDS9 at Rwp^8ACnE=U
z+ at WyS7h$AJx;RzNt_W=Vi$m1A3Icr(JaH5V8#yP%2KQQ(!}j>8wuq43QEZ{96}DJd
zf0=D)KV413B&O^`M~3?ejvhrDfm4&{K&A$2J3SU at Zk!tH=Q40fCnLakFeEWWuE5u}
ztWG0>V>!jcikl7hQ+-U``LH(91UPT)UxC`KOuX+8L%y3L=wz-eX!q=RqAjku5IuXU
zVu;ZnTivyLwhZQTobK^ZU>}azmhcx_#rSAuf&Od~deIH8fTPjc;8x-7xYe5v7o{_D
zTa!RnevjTcAO0DJDmMpTP?#0>9+|3JIM};i<Ja`yP(ram#Q(!%W`hzg9_xjCc?XJt
zb{yQ+z@*6ZV^4!gltF0yt*&Ib$auu$LsIj96sV5kIiV)i`g5ag!b?N1b#AZRT3PNW
z!od>puSz1-4jyJJWTh*{9J%Ep_%wxfD*0gp^X#V^a=oI`OC`Kd;xmpu9D*kkTSP%p
z&ahQH2U<ZO+H};})aO5Pn_k)hXsy`pyBvJo?A%Yr#SuFMtzkFIhe%S)#*ygs_R8gL
z3G^IZgQwNpg{07e)SL6Q56SQWi1|R`7>L7;D7YG~O7z^V4>I2)=Jr}9aP294JBnj<
z^_orH!#{eJe56C|NR8Z?IEE-$(VwCx0K~d#A)jLfY?CMg_Vx{0!SMRBf#DUPdW~-?
z1W(S0H9V9es%t!gn2DNL%od`rXpE_lEug}Xdib1buIGs8#@6>=9 at MutnR~$F046<W
z`(tLUp21-uT4lEyxke-i5tFpE#;`&BDP at 1&gxj-2i-eH{TztsTj(;M#A at G;#iGinJ
zU!FvIA%A&<-p77}3cjDRs?1~mVcbUtnN!KZ);-QIY{nI%zpOH37rC`0&&IZsL=|h=
z#@W|;$*g~VWky8+gc~o8mCX{K>*0N(d>cP0Hj>ci)sQ8%q3ytVK+*FCduBQ}Q7yJ7
z0aqYPDUmOEIc~6E;|G&|_Ov~Wy&eToNj^?wgLEUxjVC6$&zT~bUobt$et~z4R7~Yk
zV-!cGw-<@<t#~ZY{>wNIZSpHAf#Ykw at _z$?igNp=rmBn6;e>vo54|DnX9WAoi at PW?
zT;(bhQmGF?{V)mzx1p0is|;1-^HQ|F at u3lG;af|y{7s8miPvU|=q_=?z~K4D;`KvI
zfm0R6t^9tZNB*AJbS^}WH;e<l6IQ#tQjZJL>ax8f{mr+1^v~jT?>mdAy&7QNNOz9J
z$RV%4Y)<{tk$Vn#75isx)hi;92IVpk at M1ycz&i2BwTMVh0qCCDE2t|;#f@>HyJ2z8
zY=OQ(31AEa^yDDm|Jj`4(px+4*JHM-Y<^4R;N2wv0O=`xh>*?NLyd5zNM0V;qK`l^
zet_E4R7`)f8{5q`mebt$mT^XaTd7EzY4bgTq)z>u(-3~i0&vVC&1J-!0oBs$k$p}k
zhstWaQyDm`!~XZQ5RPXPkD4LD#F2s`fnYy#1NekJKOz{Lq!%a!vd6cFWJRUMz80Ik
z3u8`WPEY`05z?Yw;5T}1lF57aMV1O^Kizgng&42*ov<2{f~!|6x|J=IJ1Sox!-BK(
z?SU;-I0-{rXe;g_Mg~0nWM)AlsawICHTIezHgS^Sttg3%vjla?0~LLZf9~JCT2781
zCg&OJwV}Zf=GEAfTiN=%>n|8#qHD5u1hnCv>Ry7F2m_PgLFf#D*m)4gxh1GVhIOGp
zN&DXra%z_0H183s!bK~r5*Y;E2&al017c0J8K}_bz~vzy at pDEzAzf(j1=OHETzE9O
zY+N8)aQs<cSOXMGtQa;W%Gj6IsMnQ181TBRxEiE7sm*LdE+xE`*D?&1VqF6Jol9a>
zFh4V!m~4XPR(6-+%cJqgFk#Np&s)c^dsY;mZX+?kk2gvcRN&v_Lvp)$%tjdW=nd^6
z1;h^ZsY>aErj&ZpYkC-u#NgX}%=Lv#HYhYE64z{0jR6WoXZWGeiHJc|5}v)ghC>&>
zgFFY<?-HW0b7Jbf`Tvqb71oWCxv{O=*R{1x00%JF2lg(S_EK2xQ6*zgPLw4sRRB3&
z<>Uf|Rz^}P6)ykT?CNJ7kTV!yvB3M6-&Ho_wK`*Ba%sx(S_gWvfkERrY$onCgrOMm
zFKxO|9GvRz5UpIQ=VN~D#lQn_b at w&u#CBPxDDgpA6v(;Wmfs~po9uUlg&CP|WpxOp
z>KDL4O20*>!zKZ#<ey~AM<ci_94zAm;|S&WDnSoi3Vf>)r<_U2t;LkCWuq<8{RF(8
zk3xlzHLc#vhyBa5UJq#x=fA|Mh%Xgd<!y1N>HZT4>S2D&;XUX(x9on1xI~4(*)ma+
z_2VTC%zrm=)>Eq~a>K)y@~XCV94KI%Ic`1L96M130Hb{9gB_u)25*_r7y!tXrR at Iv
zQwz_EsS3_IlMQDggathn@~0?uIQkP;C|(MNvQh+u at 8JZot_lVzpX_@8i4#o_seJJO
z09{fGGE}XWsH{_2e7btwpzl<(+u<eN5Y4EwM}N%`giK9fn?U$x(Dok%#dg_+?a|nz
z(zCp7tZ-#J?^f&)XQBpp19+}q#c>KZlVG9^-#vhdCT_)cq;iwS!46zmKQeQN+-T>w
zq|lj!XRX)$3GSwbeKVs%l&fnDE3YyV6JIr9G at EsprkRt)j#>%}1eyz>YxKA&jU4L$
zPdf#CGwHSjI&QqQQl+r>=u!F2c3g5TL{NWDXaQu?{`-$Slm#*l>n*iJfI29g)ZSN$
zVQ^xrx>EZAj*==NVhlVB^`U at F*6!6Mi1`=@Dd)xzNww_^b+eMhC`#a{#ibUCsTEH^
zSs?|V1!&i3P^4tvwQwFicZb+3Rja{or*th9r$Y^gTsySZ<a}@=i$PtN2;YQpZb@<l
z^NxF4nXsw8)6M?idz3G*gU7`F(@BUDq*<;I78^yA=Rend6h|aPu?sTXvXJ<eKWK%v
zKa=C*3-JfY5f$P~z3(I?8BZPziB{+2LXDXDnxNwFANZA<SO(oPzW7`!n|@z1N1j+j
z&oSvo*&yICq5?s=<&hc$iUSL--wLAvSNk-A2vWkcWmFXR7XagR;ES#pAAk(Q_-_{G
zuwWyr at yK^JY_3-p|Bo=3hz6~L`vp)ltT((w_!7#?_$_ at y`-V}(dJ@&b$Z-xTCWjB-
zBR0XAOQ%B&C>i2A%vcvGO2~`WujQCIES{{N`HT5S&XLk1EGkHt=@LQUQe5pb_|H>A
zUHVqT9eLavM92c~%5}+>c9T-^0N?^7 at K`T3r;vH{!Z=#K7liY``$;m{PUoE*Lw+$`
z2wy<%Cq_T41+&%Nj|68wFO^mN{;2}@dXw`0Z_(Wi<O<zFzDEz~aE*}5ei_F6D;?r^
zf%nrs!A=*=J1j8T>$JqL&X1oFR`J8-LN1;|NBj|;W_hui5Fz+))yw8`gsXLAs>C!x
z%_w)nInePqrtZn=z2F1gu{M;kuG}&5LhfmLs`dS2aRud0ju%jJ%QY5k`Fmdpi*$FK
zA20)x`!9}>7%93l{uURi(AJL#dC3Syx5$Z&X4;zFeDv`Z-V at Hap{h%yTP;!Jv-W4V
z`>jxObc_ColBx-N`v~GiU34=efDM(S=F`){GrmuBWDRiOD=DC7;A`ED)gd1{xaV(b
zcT<Yy!6Zn)<v_)D?r>mIRJJhFe+2B9(ROpac$Ju`!20qh5%PUU>gcsK34!8dk1J^l
z`9zMOflou;wtaua90`DIjb|o)&0XiRwDV#)yN_rx?M#Hv8~}SF3(2yy_u`q4S|9$u
zkbD{Gf}UCQ08)|F13IAY;xN=`Qe&8>?pp;ca<^#%)d#!AC_cxEoWoq2>~0VRWz6|d
zLd{C^Nqn(U<VigAS1!Zo3!Slib{qc^1pkMCEf!kuEt6^dgKTH|<`zOsYiJGIY?Mq*
zZ<pWHy at JQ}Z&;HU*eKb_Ip;?_n9v~~;&FjhjF1D%``jjrVD?_w5Ke&0TKd2#4cSjZ
z=s&L|#q^Fm3 at W^e3IT$v6h)qjaj^Lmzj7sq2c;|Bb${zLRa3{WV;Hg!OL@)fyWD~y
z?GP1=W>L_hmYCD>a5++h{CElcli3tbnW+c|NtUK?=MZ+snU-S2LO{dna;#^v?=cEg
zl2n6!hen#W9sqwU+9 at nyzMUp6^Vr7i*{8e8J>t~JPYrK>anF2(Glt0n&vJXN0&Jsp
zMHFD=@l{LL%4M}l&uL*mb6Sj;0c3)$0fI#=F2Pm;V|TLSfv?wx3>olX!I5T*_8o0I
zx$Jb;ApyYz?5Eq)^JaCl;FM8#7)di68nFVlEoykpa{X9I>}hR;Arp5ct|B_W)cRfg
zd3f1IZ?HDRnOC(W*3)-H;I+Qh+~UmbN9PKNNlm{D7{=IL?Tn&1XNE+LT7H2F!4fsB
z-QQ3YiB`z$w^pFDnK4j8c|2gzuOF52&nm7tF9#*DT5i@}ReA-j&7#ozCkyA_MX at cO
znV}s-Y!0h2!oTV5LjI*>a&~uW&!$TOR5m!$xE=lpdNQcgZ#JwmUWxBQ(`NtCq4Z5G
zNHIpx`emj_ynZf6)7itczMLTni at 9f^yM?EIi*p at TIy93o1LKEJ?N$cZtozC{gHv+Z
zP5#~O_5dpAo)<4Im8p4G<abHRKpc4my=vcVt8M}a&}TzcXAao<W_C&6N+n$+5DerY
z_R$BmS2Ptxy^{4Sr{9Ctdl(L102sR%W)AT0|9W?N`D*@ZcrYS!6~)Y++_WQo790u@
zk*p3G1H*u{6MPy0Y(kXCIbd9puy;hSz9A)0M-e&sm6+!S#N^#6FCbvtA^;#z11%rn
z)T$T8hsSITV8Yn13Qs3ezqoObX<H9AhFNT*Xs1kguoMR1@?XDLXm>~+Mof@?93hj*
zTh<jhKU~(An>6mZ&PP}PL4fT}OGVGI&S%;`yzX1O2G=-XAq5<(FKZ2JxjapL_oo#A
z7w<2zEYqQ|GC+rcn(Fkp!&azdmcO1ScJ;IU#u|J^R#rPLQ^`0nD<!J$=$r}K({RKz
z&0d7k!L>j^yFC3mrg>T`@!!<SOKXjCdn1$dlrj)S3y1p{$hyfV<+7*rZylkxxMl;t
zCL_iOV*m?4^uJ+#T>bF%R>EA{wY=H?bD#C+NW5d+s34g!ZaF#UKAY8nQM at h|*yi8k
zX@&Cif`_0K1?9QIDHkKIFD<v^2<f_vLDDp$^*gk)B(Cv4+6cTO$4!owvo23-aQdnD
z2y3&bF^h+_yC99wx)u`7?f>b4$U;L|icxD}kt&?`chH(FoMa^~^#0{0L6M at FGOzRx
zzr1`Mk#rIs)(&ycPg4<dC4>XtUat14`b?4ifwre~Q5KW}hjbAm at J5W%oIQr*(oj79
z20oUU{flU!$=d?TV|~oBC|;BResruwx~$3}teg74P?qf7oXDd{aYX2p=Eq?LO*C=y
zM&OdY<8-oQXq`5h87(D|m}m{SROmlONIKz}^EL>{>~_!^`sAuyVVw at G6@qDCVx$o>
zt}T<YQTMyXOAJi9#wlN;-&S&s(@S9-((^`^=vINSdayWtF~|4H`dMHH at -g3B6FiPA
zb*nrnM+Z2dFIogak<h4cGKdkWP8!oXpq#m$USP!@&@kS^eXRXvZRz{y5g{vE-6~5b
zP`G)dsO*3LY*i)_RImX_9x%|XQyXy~^<wC=%4W?L@&tDYXM_bPI|!tMsPn<^)E-yz
zlGf^}Rbt{P?yh_?Kp|_Qx4XGv at M90qu&U)Xoq?wFbNF#V`NOvmE5pPu#EQ1N at BBXl
zcTS;H_K6bH9OfbLppLB9|9$G8EI1~ZYUwizQ}P+ysY`$7L at Wi;57>TIZx$%%_Jl;Z
z)*yh&ukle&>9_;DYQz~-rV7%0bAWF8 at -2OpSYfqK{93!d*}x+^+7Rk-BaB#>q7fZ!
zDG at I0-R0Q(_OK;~P_t2-Jz at 3-l{#~j%?<UYOPB&nh;VcoBWG~qtu|0U&#m)n^ju}m
zHRLgY7NM`lo}JEfN1B9)X#&or36Mx~K<-m)7bH-0QU|8oVgZEc1{YOB$mh%iADC>r
zDFH8U4UdYNa&s)l)V-6<Q}-_X-^f2;l64v=dcMbbDaQsw$0qBoTg09=++J6~dt}=c
z>`nz-u5#&4t%{VDyEOiVc^axmF~Cct3Rgv=nAwRnRjJP(nNrpZkgQub-@=3;tHFEP
z!Bo1cP|k8YCz<@^h$?GWO1-Ps1B8$mL9k5Nvk>8Zdbf?BsNaVFq-O!rH_h~%J;92Z
zm$;eN1>F!27fVcA+7-`NV7nAKduO7R=3rs6_b{@s!MBEm0!E%|qhMu9((W at 3NeR7<
z>i#tI at UQ=B=;me>|EBYOCD-Mb)yyStyOjTXS`=8ERRk8W_1-UnFiboF6#CO@%B-~J
zgZD;2F7ne#cTCcSv+@$c%@ZtbA?YkYg-2QrI4+#X=no}JlRQ<6n&au3XpB<tM3kc}
zr!jA at 3y?N{`>Bc{05TU{Z^h=`_|qj#&V5`hvYeNi6IiqWCA+y}8RPB8<%AD)an~zI
z#5Ub$<$D#dQ8jK&JQ(WddSiwjY_UGC&uGNl2w$|jj7)@jkFRGz25MXIOYT!#jmlM^
zk++42#h%newp|h#wC>J~d5Wph;>UI;s%Ibise*>9Q~+$vhxc+m+ck%*&JGxLrYq_Z
zz5#X5<%(h+=+5-gPEKocN}uHr_<}qLAMo0i at M~y1kv=%6h<&he3|jb-;U;;l)-f1J
z)W+v}Q{eKaW1<=VYjC5fR#{9mPq)}EbE|u%m=$43A^n&BN4`_AGF^g at f0r%b{|jJZ
ztl7}bs-x`A_~29i7;s=~<4hQ}YxGl;2hQTf-SnlB&WYa&oU at X4qW7Q<pA40cr=*nx
z(Zj0ry;BSD5-+FRl>Ub?7IzGR6;ygg#!ydEvTD=XB=EHIkl-&Q?=nd9p6H!z>;s$d
z?SMmHR+GUJxOR+hDk#-A%kt}7B30Bqy=mKv4l91!zPh8*>kR7sVT#JHQTTr>n$LO(
zSS}TExXs>J^sc`etx3b2#VkU=tONn at VW4?|{QEt at X7iA(js3es?c?=dLEW*15j+2(
zn7uy^VZjF!N=7)dTM(tX;KG$H?GUu+fS9^x>Z7}7;n~@m9m#o!lh#LSiphxmB;7*l
zF<AoWV2SS5R+-FJyFFuQT~Xxh;~UR8mu^{>pyH%PI}D4g(~JqzwYuRrC!MkP at F3v^
zsLPH9D!!7Om|d_eQJtJVGiT&;_BlzIvod#=IXiUjm|-Aoybr?!R<~AGO|nB)z2^d$
zspLxzkmG54*GUrdkxu+`5oUUXkO`0D0Yyc4ObFWsAXeK-BPmsNUD${TG6D?wvLAjp
zO65<(u$?cELX1)3I**W9%oIMY9gprdFY;JW!Ii+7X&FWjZLb)K!2Vv at Q=BtN|9$uj
zn5#=!sm7H;^`Zf}@?2|8YON+aNf>n)&-*5LMD2I~Y>^v7C#PkJKO;K%pE6Xb`)*E*
zZ4KlxQ2ZEREztd$0^J)uI2HszpgX3!=8LywBj~v{wCcIN*=QlGb#Peu#-XB#7OrH`
z)#1I_TSAei)4&%vv4-jlKWDBEh9<j(!>dWsVV`6qFTg`ZHskV`vF|)ySbRqZfYE9x
zFv}Q$I}Gp?W*djh$<Ml^)^#m93DixHMX!9>TZBuV at oNle>lcAl(fdT^ha=_GHNM~g
zp4;KAp929>xkm&-s~{LVrTTCj2zjhZs0s3UdUP>~(H5m?#|7J0Od>KXdWA8 at Yfo4f
zJ(jVNKT%@I%#Hfj$1oVJ=nOG|I(cHrrBKwE2qy8Vtdt?t#_|d=u>+MMlRetmXsQbK
zw+yfW5}VTq?qr}5#D7+)2uakAl=@#m0H?Up%s(&>*SZ(&x$y#GNuqi?4Q;@8KSk8@
zN$4U{W{JeT5t%^29KZWwxSO5i3|iqu!9Y&sBRl|~(RPt at BDUt*roegdE>&KA6c%6L
zfCH(Z8q0AS60^emExmM+=|)`>4qk%#MCvAQo~0c?b2AN&cU3Jww8&VshA!Gyt>yRc
z8e(j{YL9*V`%$5dqsIgeV*t7kAA~C>t$1Q<IvWs&C__wYL9+1h)pTT`O9cNL)*IbR
zBGps6ly;vO{u;f$VojfDj&T<{MTdAZxc}6UPv1h2H;B@#F%S}n?+kNwLRLTt&4TX*
zXaR{F-(b%$&$V7%ZPNmrlYAx(5Hm5n6`YhYGjWZ%n|!8(JEEI#!byD0*WfLSG;g}|
zV+HWBXNSlbZ<MUsVwi||9LAxW7nbGmWF4T%bjz at rsGT;{pJ6f=!YLN-vuA?C>q%!O
zbxb2r(E0YI5MC!wrJH7;gW=3)o74SB>k&U7MMYL3EEUUYScQYn;X+1d(p{@tesrL{
z|JUIvbwd_|)otN0T~}g1{n|ni^Mx;1euOjaa=&p{2tRnsRT1e>Ek^Krs?HV?BE1EV
z7_Dt+FRch$f0k}A!TF;EO;N8#2*}o`JYW`{mlhM3>LGu}TwSv-G7xcxCyqcyrqWOA
zG6kVL`II&GXmNNm++|ZP+pN)CaE=?X_V6W2d)g)ug4D{yYMHq12aV`%?JS|2sl>bq
zb~YNi8RrB?^k+iM32sNSgcX$&(n(qchDGFiYj3AXpy7__&}6wvD0x3z<Tz@%L>AfC
zdjG5)t5V(#_C|vn2Lzp;I*jRtBHaI!ga9TUvw1G}=kNjqtPPSD`AK!}D1(x_@`(`=
zRLRvNw}`?_9fg;Uh`!3$<6`Pi^J(DD^I{PHLk(UV3ZU0Z$`ukR4&nd<ntyfcl4~9m
z?Mu+b{<N3RSUy9X(StVuk(47CDW;Snp(ZqP8}t9H;HKWp#Tv2RL}?ydAt!wI at R7?!
zoQo at JB3iWx^bX&;{FbF*y7)cJOxoFzh58ZyEkGa~coVEu>jKn0m0Lvvwde`096*39
z>XvhVr=bbS80TyAF;q`oq{`t%Q}!V>Yorb3>}z%VH3%#dpLmAvJ#XE~%a<x at GyDfH
zq!I<}vLH=ZNdal`7*d9%3n4~Bk3y%D^{qn3hSa>vLo;4-V|KBx5zrVvLqp6eI=%zb
z=;|=ATeZ#tvd)L>Tce<;S0mrZX+~kgRii<$@G)Odb}}b|4oAw8)*Qkp_b5}}*)+oJ
zM))e!#WqD-<~`s~I=R}A+z`h4Cup5<1J9Y<l!j_mRVraptXD<x$v4P9ylkcs9BD}8
z44Mx>$oZiW>fC?q>v9C3m{z2HQq^*dzW&=8ZwLz3nU|(82^(y%PLfgt)W*K4 at Dynd
za;|@KyhZ_SmH=yt#xXxu!0*tYB!YTuYWa_8W8bc=_Ymhy`{ewt!}_V at W>qwz!C<tZ
zgc^2MRZfzrJ;ejvLIs9)iTpMNG1h|mi0yL9s5ULs0MXqzzmsy!6wYYNL^EW@@Px6<
zi(L4awq6Mp$Is*JCN(#9iO)pZx9=a=tAMV-Fs_cLL754|F`%yh1Y)%l&&FtCxqmhQ
z(LG4(Ob2TJh+3^JDkQ4R3!_v at B4!Ump+5lD2ue09BWpX at YuSF#f}1KDYSbIAggwV-
zKvP>Fk3c}Ah(BPkOPO|512BlP@|Z&HL8qLt5hkuOU<!0WbD3nh_k-*po#?;&=uC^x
z;;-XtBy%(&ii8%IFQX);V*=FC#JnWX?(rJ9c+vL{&>c0dgkiu_T|OqM`NvGnT|yh!
zO at GBqCR^I{8Kp28)qe^J-F#^C2ExBRxIRw5J%025)v20g2kVg2=-#ft9!#3 at s)VZ)
z_gq<1*tYWT5EQ8Dm_CK30iSj>hCS!8lS*PW*}v#-KbT<e@*M0yuxHPkasWnkhhZIU
z=6rR at II`bl`jv|>+|7;<)s2?liYCnVqZI*etC$OnP?lfNP>vJ>C2+|%<P~7&el=f9
zNx&|Myl(sl_$PBNdEtP$P=i7YYlpob;@NKh;g)NDe`wPQ9Z;00VEK%;>qgB?ba9D&
zPNvr1!zk#mH6H$Yn-^}MG>b--eHB2PwIPzIw+>|_1Y&O}GAD+bGxmH?eL4L+X7amq
zGJAT6TOxJCdH1|gwiDOHD%dQ6<z|QUiJhJ{-;KV*N64rsilGfm2#NQ(MSjNi?0hs!
zWT<}iuck4J>SGTM*{>Ir8Y((x(nJpzg#v_fsw5R5rBA-(4$A&}SccAYkJJFU4Nd8~
zhhdW&X)!xi{|x?q6BoQHVN3!y{;Kt!9_UsP7!W7b=h82#Dst((vkHSSy+vC)S?Ryr
zKn}6Bs7kfJYkGnD_9#kZJ`u7|>ytr$Tz>zE+80PF>T8kRl)H*%W6|SmVId1X92H%?
zIYAlLn<U(0`dQZ1MxLfnJC$x*LZE at iv*U|$&WD__lIt`;%NllSpp%N|&Rp5YlP$uu
z#9e2&3Pxz`+QIDc7(rp%uxh=a7Uy|agwhe}8W7{ve6KgGL!hr2xgwzJC&P<LFf!5|
zD at 44BG$~r7WE)MreJ?rsJ`<}Nnt59#+k-#HQufWC=~58Ma_Wbhy;EaHy7G=Xe$t>W
zf$%d`6)-?d=a#)&ygLWxBKQ at S2rLuYCIBaCu}m&GEbh-baWp)c$(Q2aU5WW4#n^EI
z(#Sz13pmQC98atH(=to<<=E>jL)7QpP4WE<BgU*DrPJ&$QAD)mG19nc2A9_OZ-Gvl
zz8kr{HrMf|M*I;zN3Pa_;s$ZT3|x9IBBV}$nLON^<&!zLh{yLJxQLTDL<?iCNa<Tr
z7?^=`Y*DXE3 at xSZNTv}Rs9Zg~pzDFiqUXSMdRH&r;_zi0KO^n5e3QH0VW}uM$Y3FO
zWP4;0u(g*L5*FHW&6&dl4nO>e66IBU#>9#81#w&Z?~aYO+LzHiiPu|kFl>!jf_bsK
z0nesJ{vQ at H?_WAOO3%e^$fRMs#`}dv+cH|;I`0()(=tnOpC}PqL;HF;DavqyZR2`5
zPVcs<D4XdI4E(P7o05$Y at 3-yJYH+)nC>wTSd;QeXVsUZ~rJo%7m@^u$tNQlBpBtF8
zU`c2xxo)zH1}gC?dbXK-jpA(^1yNeANOkwCT`KqiX4Li9EF6}=(cYV?`Gr`_1P~R#
zqB$tFI)%Em*>qW&bcWV-K-b-;O~0CLGtpY95t?0C>{1cir$nRLg0VYD?M!HQs$d4O
ze34-$-g_ at Y;}F%Qt?})(UGjms*}|<!aj5mAIa{}@m&-}(Gz0y#YG&883Xz#15b_l8
z&sA at hOTfU6hflq>A?>0k>|Zcbu-Ai{Nn~Cq?Q`1)W+gKyezOq_{D~$nS^5OzD<F at r
z57Uq at 1I(ZN_aT`hJKMgz=;h%ay%~SbDU~C-t_vAo;UW22ic=0b8GQZ=jG($r5i7VZ
z*A}1t7#{Q$P$LxLH#Pb#z9=jH15(tkM6{b%)SV{dOI_5V{An(qNJcV{azrAiun}N!
zIR4r5X(;FBGdAB@$+ORuzR?whvlvGRn>tvZ+fz`|<jg!;8wDFp@@OWqVpoq#5tF>Z
zc&hmDGSiMq>5lqXa?zLy2g1CseWkw#rNJ@<kA- at iwPe^u^Fq}4XUg~Uu~L5y<6Lko
zhg&80D<WIz$ll74%h&s;4M^$lj`a7Qw8*bgFU(lEfxPjzqZ(f_S`e%ip%3#est#Xh
z_Z8c8=kMz<?PmjLWXt496A0|QU#|T-JqTc{NE&p5JrUm12qXVe`;s)K_(`P^;QID9
z_nL9Q@|c)1 at hSxrLgeeJ06iI;kd%<}GKb at C4ONCjqUxF_3<wN4o27MB_Icyp80x&2
zFsG=@m|Of-kWx=s8&2!mqCqBOE7}hQ`oz(2L_*Xf;TegCfvJ6Wr4e2etPyjy9UBGp
z8s6e at yv4OqC8$^{?>$@mp}c28=pU5$u<&6oHry;*X`xOAbZ%0$ZL;T+<V;^!bqGEj
zyme<*Fn=YxRn9SZv%T)O6F)7nw*zL`$#pfA5R;B|2z#=F{x9EKR8zuPF@)~8Gn`p0
z9G{!zzYm!N=`RI|r3W!nkcEFkQ4bQJoPZZuif`heBNmThbGaZ?fyoyrC(+;cL{&Qd
z`Ke$-b=J5x)1U=*a_57N)or7~+`z0TRt^*ssn}%>#F|~{MdrR6>=60WQ6<wCDyid=
zZ)!g5Foi|Wy2u0v+*v7>p!=MFGGjrnTVB2mi8ZR*n%(HpsR at s!5QtTFte$b at +#4Sl
zkzMm}*IKCD2-Qyz?vd}a0pNuy-)a8t7@#WZ!rM~qCQ;BrsHEW*p2yX%+=4SldU_R!
z`O`ft5AzXnesfh&knh<oj9r8lGuJTv>Bgk at g&JBL_W-SZdFQ12MY&SytqTZN=Rv84
z%ge>749LS(FEoogB_vBzV7dd3?C at i-_H!)4vm>8i^Nb{JQ<;}Wl~BZFv12)5vJBqD
zlJev3tc|1T=EIpTEZ+gX+>;XEdVc5Ub!S+X+~7g_c4)&p$DM7HKi?PswKJ5b_P<Tl
z!5B3~Oys*XTel(;8!tC9b50Md&z&k7kO3+DKG%YQz+;tQIW^oN4F(s~VpZoRL8kCk
zYt>aoTbClF5pdREb{PozefqU6NY9!5DCv1^CMc=v;%sLH3<)taPk%vw*s+|G*68hv
zwr5jGNj9WnZjbd>Y+fnkZgiM)iLHQaEQT1IT$%or01+E_4RPhlkvDJku!q1+j{kFK
ziKhLcg>6H?HE^h<0>hx%2962P(RZBxUyP(EO-1X*XKPbu85^tjOhUA|p5$6?&DW8X
zO5DpvnMa5OE+hW*8mslWYn at nihPu-H`Geutkf4*-mVPpf#s#n{Q*OFus0hI~J-%mO
z86*snuRGny-8wiJURG~Q87zA|X{7bWa1reOmkxLb^yI at Q$#9!NWrN+7 at 7-g~(15#v
z`F_fEya#L}-~gLvuCxu$&*ddgo!?Mx)DhbcY>$GNF_eXv)W>O%xldn6Zv=9(oV|nX
zyc`N-ELCHo{?ntE=wM(u-}A-mD{J5#8=b#t37E_Vi3GJg-V;yc72~D-dM(cAb%%Lw
z52fG2dxYk+3fqz0j_a)N^bOZUs!O2hYENDW1d!f<k_piPz38mRb*cDHp776dXlqQA
z3`p8uzeA^EJ?r9Zk)oIEq~v1$51T8#xNW#tSYa^*KR&~fZu$sjf3gfPB~+R-yuGQk
z3!he7LnsP2!<VZl{8iEv0zvtv04z{ao|>+MsMt&9+5fMuIsEjcjP%TqUP`!-QV+g$
zKc;Yg;8`3~w1201x}D?$9ApRGahpqZN%pebQI-^4sWU?o{wHHPjz at uB;R8Dv6sXEJ
zHNK?Fk9D%GPX;iH?j_nveJ)v!+Ag#<tuOO&IDT95?FTgP-ka|a?+m_{Q(7`jTxV$m
zGY{O<*Zfgw)<i){Vl#?wE^|NuW&T(<*Y;d?x~)VC+;oxwKt<lp49z&h{$(Sy0tsAz
zb!w^!=v3z=qOv5~o<ln~Jpx8{KYX2$a2JI#x(u!n)Tco%cGIVW4Mb)(XKq#ad at 1p?
z0r`$W8;z=G&#*>44YS1>7L}#?Q#{6IP~u!xkkujR2ycPH0hsOQIUN1hRw22cN_#d>
zTV7^hog{I)%Ui at kt$$1H(5**)|KEetBAT|ydwnM576;<+bJyzVn|IT!hXD_yJR-O`
zZ%u>VT at eEq@0fluR|x|Wq&rge!!a1e1f(uKx+RB;Ct~}+)<yZUy3C2zac8mmB at W(+
zv at foYSUyoBmnvY|TevIs-5mmQ&mTt8?Gd%(&TIu3_&LQB5-vlt_>*o5N%Jos_vaM)
z^)3zE^y$$-zA<Bk3$@=Psl56%l}(!$LhbN*-4jFYn;)d%wtSI{7s<oAxND<u&uRlE
zt(%7AZ*@9deJ at X)bJW&uz*G|1`O-Y)ero#8JR=?SCi}9+GVWW>s0~aWMvjJ=XTj>1
zOVDg6_jmo5R}5av`lAyecm70C0q>#bS!hM<szh;h2!m|F0kP5g+mZM8_ze6P6 at NR>
zLFeZY@?z;+?3gylekuP~R>a@$hk!b&Cmj%ixY2KY>y<?vzG9JxTBwu846BfU^stHD
zJEoP-dMAxQB(AV>4P?SH5q^#BufZ~i78pm$=gtfXEUY9HSI>VvXwo8G^jOWojpwdz
zU7RjPmrcXQI`IIkJ#*o8myL(|U|{tHQI0{3q_l$|jlUJxEl^`F6mxh3=oRZxZM1*(
zI=BfhvaX>Nnq>mibNi4D$rR7Y-R>OpZ)1YXnG2sMAL&w_8FWlmX`ksHeQ2T+RM=^x
z3&Vw;aqnbx;&b&2j7PLocm?2j%8mjmSf?v|jg(^T#&<K<hJ1tYw0}|oHbA~B&joPK
zWkbr*0GvJ`EZPjupK0wU-D3yWB!c+uk`K{w%wJ>G?B_hSKc7%80H9i8sNCc=DGN3C
z=H!0>1ER&kI(TS{4F$<>n7&0GHM!mBLqv5++C{l4Fxaz#UHmI-2~f|qUrS#OP_9S(
zpNvMaVbrz$W(w!N at _jY|*E;CS^`qcSDIr{y3D&!VY#UDrT(<w>igMX(4$hOAHN19V
z!yOPI$7su!%y8fAs+mIzLJ;TGieKNb9bgzQ#BSyMrUx<aWt8&?X=X#n2~>^<$Z}b(
z#*DqlU;VnyS*NOq5HH^)`th-*ii+e2uF at oG!nKv>fgTE{@O#aVvks^-^obYF$UDlw
z&;7zYq$0y^h`g9G-`00ka}Onu8*ihhS2e*0LAR{^j=HE_pQ8ceDVL at wI$FkSt6|#L
z&nQ`@uTpRS`gtotafDC{MbDg4UVz=)r%XO?Ce?T&{-!S&`0*=!7E4+s>*M7fu{S+M
zjjsJmA)Vr2n{d$XO>svV96lJ-n<+pML3c<u>XCEWG4#nd7xWW?gUlhy=!^#L<K8WL
zj9hrR7D?mbQi<Gu%3M!+Kc557i$(z!w=4$j7?bm~q7p-%2xhMaTinB at MuEwdGn0W8
z*4UQ`9g|}BWU|STu<M at d25Z|nTEviFYrcfSINGejw>Z<apN-0aH(zMgTsk=jW>J=9
zXuB at w6jNE$+9En?a-d at QbRq=zm{FB7EpnUX_D>4O2=<$v at N4gXkJ~%7+Bgv2|6m(@
z(&{sbLE!td-^*t at n!0xQGqd(P5E;}YjSzA at EH~|)8FMzr^NG{q(J(nc&wEgL;l^RX
ztL%$l$<ga6eq)>WOTc at Q_+EZi5o9v|gln at OjiLC-H#$^cgMr{PnNCCrA_ajNEZwJL
zQ~K8w614FGRBr~Zrx3Yi?8}S%Th(q3?LRQb^E at GJ_8el#xyrs#sz}=7dL>8 at s<lll
zN(T at sO>8{zp%VQtmLMIPn;8 at Qjxt3p9)5#pE!`z at P{NItD(1T+*517N`o4heoXCRY
zg!)$pMFNXOzRXu3Mo-4Q(<SP6=z9-l_y1FCW9>n+&(tCxCaF+oeWk5OKZJMkDQ(JS
zGpq}sz!QDqu3Skp<KG at l;~;-%WH&Tc5 at X-2c@r%5{%9osxn5If3;DYyOcp9y>VODT
zp(-BJt4gP#f>2iE=y5!{)>(F6WQ<v{=kD(?t%M=SORk;P7gEIiRPFzULI#{D)e$4X
z(Uv2~K~(7(z^}IMZhsisl+ at zp_Et_z5Fg!t%nZ-dCxchXR3+%+?9ub$B)`|N at k$=}
ze7O;9BEZ4_Co&`@?t{1HdoeyQ6ZF`Pwn;0XOE{}v<ucc%0_~2sJgvaPbSLN2IUu%-
zbGrdgFrcZ>zbz&)2RJ36 at ygp`X*`00AarLZWMJOYRYlit%7 at kfssX2<d+HHegRMS?
zDeH(S!b+XOh6az}7ZCz%VZL!{7E0aG`+ys5weOB<I;bg_tLG@?eu8D!7%}U|`_ds3
zm71*6Mj4q|b`h}+my6Nm_p>i at MR^5UhbM7wN!eJ0-5rY3J;go#?b~_J-%zVJEl4_Y
z=}}{z*GXctsYvJ?b#-?Qh1P$`>t+o<WK=;|%!qnSkGVu{k|`9`pl%7Qs2fzUa;maF
z3-Y8%S5JFCH%l;1T#e)(-+>m(QbxLt+8t-|?S;)vHR11!TWwbS{6EU{wWJ6JdJvT<
z!sK}Dj-u8MZY#d+q)J6tdNxxh`hi~1C<&57W9|>v`j<M8Q=@TIsr{kc at D$uTa8f0g
zT^(4e*_%OH&~_DF4r!^@nFgY$_k*RnTJviTJq;}H=HgasZ%KRnvOmNuezEY*btCX-
z3%9Q9@(>ij1xOq~=V=2k69=4fM#*98^a1O%ylzQWEA#w{ME(SfveFu$C(lL0R5WV;
zsku!^$s#cfJ-c{b*nQu0XooT#jWH5?t`+<hcOUgVREuThI)d_2wQc at i@XR_MQT>WL
zIfW|5i=)nanGv#x at lSZmuKP^Z0ZGyv0y(DW(&cObVM>0}4hT%=1uv1`eP?V;Qf4?Z
zFRvp?B1-bZsu1AW%J4{^#AoJVFR|VR!6Pj%Yx=O~zA7^BaAlj2-6o<Z<*dSME{uNd
z&G7<TocP&xv8k|BV(}1?-<=|zVo<AJUOKk~?xw6Fb>p}3JYB_>h4D3X at iKhS%z8p)
zjHz{u5T^F{>M*Jis*HzZ&Uq$0t+MwGt^mt55NU+&7ALJke4=<tctvIS9vvKb4H}=1
zU<H4MHHCtuOABo2N at mfm3fCfFZx<*j<JJbr5VdT)w`)9H13Actv*ST>mYbf^&|16f
zZ;YSQ99b~rLo{Q{Vj}<Lnx_S4J=-edU#Hq2{6&u($s7zTyoR~5iENdY^rxvm#jrI0
z(0CKo2E5*+dqDcm0uoSP5QV>P`CI|TgO94*I~2$%{6l2csySC2 at xut+Nzb3B-GkMK
z7vU(6j$~SQd*ioImt>~FKr{c8JbCnn-+R)daUwShuW{;n0D7~yINK95oaDg<gRDOM
zC=KZoip3Ps>tBmG+3RxxhLBHB-jQ2g^m?p~IJ)|3J_Nh2(;(jNA89_4KJ#KE$UwQo
zm5HGo9=MS`bxw&m44B*?PF=#cFYt8!!$z0Oa)^MABe}U^EBr`d0VvkI_IY+PW2r7>
zQsvv*i#aaPE{=Gy9X465r;8^-nC3_aDoh9Q#xwShk;4+YB$~vVDB1(OU=)det6HRK
z-?QiodbtlT#)E|KATMTpHPra!@b=oBaM!5Dd1jj8F^Z!FCbQ1Y-Af+utBNldz(;kL
z9yxR_v2l(iQM)hk+Hk^re9)p<<SDh<d?Oota#992<X|{V4n3 at 4UH17Yi-(YM?J;3H
zZ0eXu==u8V!R;#WS4L5LsPfo<eCZUIW0VHs!!U6QE4zVzpL`8HcRMUjvlM|1U{^WM
zEn-!xDY?rb%`Vt%&bJ;<AG(e`!rde<Q%q*wJKb4G=vss?2ekU0?mAMiqqJ*GNX!oC
zdrkvlR%))G4TDvY_U7fl at Ih;2ZZv&V%^L-Z?DW5_m?+h{X>Tcosp^-V!F=x|b{xNY
z;d0=|oD`GqS%#+Cs~2;?cZ{q%cd6lBaa#f}mZS`FM9z1oW2W#l$b-qQx&5&ivK-;X
zG1i=p4pUx_zMkE9)uo+CxMZ7seZCUV8}T#<-O_%S)H_N7{Pl(QQbkeR6LG|o>{N(X
zV9e0Y$N(rP*<9Q(;VKk$&WY)u06;^qBctq9>DgvwU;mAlvyd;>k_#IsVN&gop4BI;
z at Y`26w{VOJ`HsC8YW2wHkpZR_xeh%enE5Z+ydfb3WBjADD{f>OVhA4U<+vo`A_Wry
zcv1c#qmW<tlm1*u22+pW8m&E$qd+<M8Ta8Of*wXgIl!S{S-<ywJ~=6mz#F$hY|bqV
zG-;NipDTcRkcF&YAUo|!`*I1|rH}p|O%Y?Rr|+IWzLaWAvJXpJw-%g^TZiP35#Bk9
z_H#(sEb#<>nY(t?djk_8QjHQspxMLJ5g`whe&-%)v^sG3+?mitV~6OxyZfvI2%qcG
zDW2@#!gsj=d-$iIZWoYmz;dN6kS at I|4WR6OA5E4ZI~W4%j0I=8f*$E7&(h)d{YkMm
zO;yV<XKO#zl<zxk_#Jsfs0s4_b@}0j9Y>KBIxijlNioObyub*g;}ArMm}S{>p25t5
z3g_Z7xj_t5oy1z#SQcwo{W?yD<JPR)l`Cg&$Vbt;$h!}`X_iiMXp&XeNXa^HwEXPR
z2kzHlB#0d&OEDXZPeMQ3Ix=`XqS4NkG)wSEvR__4m)!=#2YB`Q74n2ztP at JrbO*H*
z66n03oA4=&5GrtAh>n;#Gust!<W2B7_yV#+x*FM~g8s3JZ_ at EK7)rG>o$T%)Zt&l*
zaeKtRjw*g5CjBpGBILFvUhJVY^0)CEAUdbU=g{&uca}bL4n2K3ZXDuRd~We0BcW6W
zE3r+&UvJJ=fWFhd8vXQ8I4!g5`IwlCd9%jK_(Zx>sE;F=EVoR?OJ2RzLKqe)R-zFK
z$7Jb$xd*RGJ5ItBC~j8{bHO?)&KRS%30OG8VMl<;h2WTj)j|epuD)+St3<$}Au6U5
zcq- at uONriJubzs(hnpBnB3)~E4WA6nnBZ~N3)W}b=@4 at jy)Qkzkqom0?}bf0PM}`f
z%|gWad9gakF`boY&d29$Whv967X{_$oO1Rhr6vIyvo;Ct)?~*BC!R(i&QV^VM}dMV
z=zRJ!Xc at A<CxBDf3WvYe$GgVwO2)fW`zuaE(XjKu-&r#oE)%uSK&o~Yr6Ol2x+;%W
z9Zk!Jy)wwo8TS4bO1 at fK2J-U1FR1r-E=%_b-Av}%t^X3Q(~j9B6jGkSLeYIYEA54!
zV$NO@>Qx8YRt`|A73aL4$@sFRS%p^$h;2Q?djkg9h~$W|lfTzq7D&u+>~#uz-(a-L
zYZ%|uAs5H}9Y!DBpoM%MY*2JLWjk0?;nUvG(>q{#8`7>(yEO7|(B*+OVWx9g*Q&6V
zcaY%K-{K<@Y*=Dx)AFgaMYIm$!F3L`1sH0#%(C9ix?jZRwR5}vBId*3RreLrlEp*}
z*=`vxvMe?$!ax+?$RP`IUZE}hin8`Ms3fesg$s)?+61X|4NvD83Qnt;9!~N=6AcEY
zh`w&5KaJ39>%uJc^T91oA>B3lsJI|kBp)6UzG*M__zt&WW!IeC_%OEED@=pC1oEs#
z4+U(~n?+{CyTZPB^1W^m?^1LsBlhw(w){@1$cpe670fKw&Mq527xhzL))BL}uyv6_
z+lv=Ol0uAaZ7?jw5msPp?|+)B^N%2JSl~x!d{aKt-%q|$^+%RQ^oV4eK0wk{z{u?&
z4%p4MH8a0;c#Yad3j|y(o56x5`$xts5GTu$aBAW+y&In at _2t4)1-y`7hAztS;9 at Rk
z#8nQYWz;{QW!uu@$S73r=UUC$F3PkE=oRyrR~u&L*~wz+Fg*mO+<F7ZCoH(aW-aA=
zRi}F34RP08m^%7F7=rLXa11vcpr|<5_j(!`w*+dHg>@cudS~zesS~855zpBiek$nH
z8J;Ml6B at 4b*@v2(uaP!4Gk-c0aiYtumNJr1ry at Kvd6@wMbkf9`^@jSpnhdR*N{dHY
zphV(9F#cv14H0f!OP at RM38{PSGTFEPtITESBBk&_f+b)q!id(lR15AMBf0F379~A@
zRUwu8Hiudq3pt-$`dq2Y8|<M+BZA^98!6h^=|B9uZDPAWhpxcLE}B1;DqAD at H5Fgv
zbfcqZgG;|*IbWdDviPP)yl_#apRoFKvF+XTB5iFEDtY)LITQMWTeg at MIYDD1?BTY<
z)_+AL|40!_b4zt*o&-d(*encDhWzqYv}rD_JS~#3xK$VI5eX?*I^d{&!Z>jU)FMJ6
zE5gEAFzFxpqZnmSR#WUO#KBJeMl8cr6A+GRW4wKfK<%ssy&7lhiGd3!p9?=D=4sTg
z){~R|0^=*E%i*O*s*)-6`^@WYmy*8T21g-fmm$G4Ss4Z-axNOkoZRzbaYINX+<MsQ
zOM at C<|MD<F?>*sOoeS4pr$n*fA$9}rNkJATjc#)_!z1j;PL#C$OXU@?3C*vFg_IN%
zOo_#LewA};suZA4T%u4lZFmP1Xs&oAefByU7>pz{U)zM7vz=s2lS{oWe99~AUvbyW
zHw6Z$wn;=7ioT496+CB?%n$&UArqZ?I*5l&I?k<ckj{g3HAm{CsAC-t8k<pU;=Cqm
z8yFtB>NC$=Of44FU%TKe;KtKHM3f=1b@#Jxbg&!c%|;<JdwCrR$jFr}%E at aSxm4OG
zJV@?*EqB9)yY<<0k6;3HM`?a3&xhUz)9qps;kIjZSputEZ%<hwI*n6DjLQ}@<nd0*
zaxyd-UX-phdDKUC5&U?H99Ufi=XqhX884C<<cjW7VUZac63t;N{X=F+880&|O^D&|
zT&}auw9I!*4$3cjsh#LuSCH^160jXv+imkD$SkW2meHCf+z3Cef88jXbU*b5 at y66g
zQ;1(0LAg%h|FYGHGKS9pcq=%LkRN55b;20l*tlE!Q{00<U%UFOTWhLl^IhrSnXdWd
zt)@xdNeAQB at v|#bM?9vRw<hIQjzGr~!xWt=_;bftN<LZo`>=$ST^`&j`;a0d`ynZ0
zfZzFxsJjWv!Gv_>X=Grxg$04BR`WTLHg)Ii=q)1lf;u^8Nuwgd2mQbG3erO5DbPBi
zwicp$>T&1>Q6&@oq-rfMCcM_5FA-K;(#M3gBk>q4#OTuXZ}oM{rWYE<tubKrbR at o5
zh1bdcKapk62)!A|as9{Pvjcb^_GxzIa@<YF^FvVlZtZ%C`7yuoGQ#s0RTGvBc>Cnq
zDYf&kzWLTv)@{!ngPrv}geexm(f&GNOvS6%C6+;`hW8>;UeAd(SjLToa4SKw5O|jF
zd2D=G20p}K#!~bnP{&mDYR?C`n`F?P_7pG(OqEAW^SP**4P9_MvW{JCcytRoYEmm1
z2DR#JJHyp{$$xq}wm@)ogoOJT&K~5WQ2*vXEfA1qme1a#?2H}4Sfe<W>QGg&)gjNg
zDB|(x7mTL**VD!qC9#l*WAMd^vO;_tTmK+^9iw!5oWT7O)K^B}3z6QcXGwH9z^cuC
zaOTb{_~N|45jQMKZH<~{|Gal}E<kBbhjb7zAL~UaO&%{#tOXg48=C6q5qO3o;-Jg@
zOBEA=;_J0eo-gL{r+)}{<9yAi)#}tbyWw2R&s(UCp{E10K+8k(!cgx$$-!cOo`;|e
zJ-~>~O|de-5Yu+0?#NAshp9#Ti`JQy2XTBNdtVUJM$978N>>AAitvnRVSa{<yKRaH
z<NBQ2D9j$dks<_&7fY1oC}us=)|DYMx$KZp=UBOn*4shqusIdY(i-~mKb9a0toHr!
z#2{RWl$dCJ;o+XULwvz$$8ps5FzJg|2NYx8wvhA(j5KR<y>{0N%?_&GbTPjVqoN95
z^a7(JqW;ex1BqGjIX2YJi0JwUPORK!x;H@@CDB6v#_jqP#4TTgL+7UG{D)YVppPt%
zsAyz$MY~m4mN=+iBH+?i3Mb=Vg;c4_tRdc(%dH>@<-~(ANt?a5d14m>I3ts~r$^>*
zo)UIXmF8hz*+Q|UxTNM|MQrr_V3rf)R6jnh5z#lb9CZlZE6AExten%h0wm4pBIY}8
zsoVH at pxAb>6)QvT1ACyb4$g8M#u}<Epiq%5{z<JqA72Ii5uIE;$^pE5r#pl4UHTb#
zxE$Dyc<WBW@;TbmV^mBrgP09mG5X|typv8#xvXvJdUDZ%%DZDzebJ12!SDb%2kCy`
zH{x}Ya0|cG?qOmvzU at s-0o3yYE~^cGAzG<kD<d2o31>Pg&0#+;doqg~U0sDHSn34c
z0_a3XP>S~!h-lqmCEbZx91I^TA5nM0@~N1D+bxWtJbj6Uf9{xWA1f%u2GLIhMzw~$
z0Xg<4h>Rq_X|isz-&7!et_9CX;i`@shQGQqq5O$q$Jl(sCbpeM<|s+xQa!A#M~8=G
zkAk-6u}hsynL;43hP9isAW9iXg9np~F1eRMM`z5?;~X)|aE!Bq#0;)T0UGRWbKYod
z!evOXjU~u?pkA8gab~GtL5I*=2Bn at th;2TGW#=P6J!Biib=WM;HfJK|SSZbc?-whc
zS6n8>N`sou4UPd}&=_BN&$T$_bU3YXC0t^0ejD_zgkdADH?AQEKwKN*xflOTGB4)U
z&Ppfe--VqLrtJd+ at r`Ve4pyPteoa at H=4cF2RuKs?>jGM8zC<d?s1(n5U*Z;2=M at 5o
zy4>(&jE35vW1N+IYgd+ylP7(1mD7(L_&|CFcoesNlP>;A)@#ob4AV6^3<r)W>GR+`
zZik8_L|tS0Gfz{kBj3n;_lsTZPQtG*{`Q9(L&i?-Q<g&ex%)d_tc#JM7yr^H>SE#<
zs|3#%qWppsB*@bP+_M2ZV{X%QNEU1+t2mSb1QiQnx>hcED?ph)3W{+qoa6j|)4|Hc
z7zS{F%hOGg{h3oaJcHY-uk!MD0KF at qhSIpa^3n}rUM!fGt>C3MkOzkO|AoZ+`~*6K
zmE!?!JJb7509VE>jk2Z9+UPh2<H`BPeFY4OaHu9EC`Tv}n4TiI>bJ*{9lt%cMpS4-
zPdu~odi{iKX-_}n8Fgh+|KSPcLRv;SA?yrvc<T8M7``y2!BRhW*zWy#i`Fe|V})wk
zlYl_Iqm>x7lh8+D3g#3$K;a2*KwQ>X7i56gJ6Vk_f5dB3j!=)TFeBb=v5N$T`)QF{
zjk9?mdDUCnr5A!!3r($IAZNq#Yg&wj>ZWpvHU*_i56W8z)GR$sFLlz%?mPxK!}yPH
z>LNURyn%7n-c}CoEMYTdu+UbW$%@{5Xwjt|!PL6Y)ix=vyEwP1xTFs3I0ENy at Y?|M
z?Iv(2He6Sx1so1UUdwU{!NkIIE1S%j?ZG7)>Ufs>i2s1#<nD_#A2TAwn?S at Ut-)-L
zvjWJT3R_OrCtpnUuW1G07(Xt4l at KJ!fZ6%WL;}Hqf@^QfqT9R4PnqTUw&h`yqi)Nh
zQR~t^R}Np{<1vblT>j6^%Go#!EGtpO3Db}@@1mq~97kihSbIdvh7+$jXJ<@Rt8-!v
z6_izvVn=(jZfaW+*Nfz7Zlfe^zBI3Ao_wERYf-aT*4_!bSFaxXjVi1evDNvN61$)X
zFcI^8-Rew++ at Vq)9 at v@x9qUqsVGc*d5qfUHtB>FAngk`vSDERdG!=@+`zQ3Ig(Q_T
zMm-i|4p>tV_co5K9*jIIJJTACLGtHjpzxfLw3x5PklU{V6<ksvk`}YaWbI?N4N6SO
zFwq|9KwQ&1#vt33)3-L-XpgB84q^Q;@&ypWR9*F#dxPw!faeYPzaAsLre9+wsQoSw
z=7eCH)EH9)%tyrgpc*%+_0gl-^Dpk3)9=`YCY(Qzm?wG;b*D!F;LwR%(1W!OGnPTI
zckFW)^`a5zQ<UQ2aPhq>2`*ZAC|!SZixEL6lKAGq{sy&{3!;7Kk`&&ead*AA0R7T;
zG)bc12;lb4?(A!J;sB|ytT^J24-7?^qD87S#=LE`G1Q(nKTJv>a>z=KGof_nCpCX&
zY3?1;G*tFE#N?#_hLqmRzhOtSjF7$`dDFwDPSM`mwXsYmo((cyS0`Mq_CyCX)AGk*
zJ(z8p2H;O5fJ9DRX0h>M_zMs>07u9fWqXdYne{i<->~*_ZgeMgphn{Kr at oHlG`uMD
zbGG;`4sSe<d67<x=!4W5wJ%UfoMuk3=OPYv_gNa3_o372z7iE at d5ptkkgR~SPta<?
z&&Vj)N7Y3bfl#QqbGzUNf%OXWI?FXQr9N4{9Y6x`BbNZT-Oi(gQ+4{wvjJr1{ax|6
ztag4V4C8X@$DvsmM1cR!ti(L7F9P`hJw)wsM0j6c-SN%4v}VM#1>s}otO&Cc{C35x
z+^0H*aIV;(Sj|_I_HaFoeN80k^MM4TQ-9pri7F`i-A1Wk1 at fvVM`HE1&Dg`HkzxlJ
z-8wVUOQd&TNn!GkaV;=mP5**6nSbDe+(lmawYyQqtDLczIjl8$bWeZX>UUh`96EV|
zN<5TPYI3QD|7TFx5D1{bo}Wwo%O7cN{^j#1 at Kb(^@+{Kl&}GfTtb0VZ{W%0w3b>0q
z2)sdw)blyF56-%z7N5#a<JCy~k}LptJ~bHkBAdrtsY6yc#R)mRhksV&o~?ERr|i8h
zSp&)OhwXF;W6$-OIC3jjy;{HpiR{`;H7MN3K%rVkASCzR8$g?{XoNn0zW`Wwvhjch
zH?f8v&*b$457{ieFY|H`))&=zUlum{6>mm<J9SzSz8`MZ3P(x2`;WjpC_s~%sfrSC
zVS at my^5oc at U9Yo71@jdACG9Jw@%ip?t_rgk$qwLsnK9VimJuWu3{Y#RX^NnDz483u
z864ZZL?K=ySe^I?GO=<?I><``Y)$e}F?Csv1!w>=L$gVHJngpk`?W~%q=n9m`jFpa
zOutO*?lAtzC6lA3KH at JV0K7=SZs#aslw24BM62g~p5$`yWT5MXv#%&x at UP%^ERbL3
zyxZ=VHW|cx!jGSGT*jc<h)V=>LGfz5Mti$>eC{TygQ>LHnL;O0&nW9`Zgz#~3uRcL
zQ@}@KTRJYt*BH|hZ}}_AJS2p!_Fd%@Fgz9*HJ}Rq68<(Jpn@;BRXEKq?_C}C&D#we
zVq~Y?b%O^$I7#fdETcgg`)Z<uz*#AbkTg<rSZexXbjR4urfyF7rEmVfJ^+B(RfcOp
zFD*a>kw!Nr*Y8TPOATNDZbp8cVDV=YXRJRa=y*>&6A_XycODPYErmjQteM>-)Zx#7
z9M<EsMdhUC6qq%=RJg*NCgX3PN6#|d{o|cNcgmPK;?fRVl2iHh1LMY%q3z3YTcUZ_
zP*1MHULi`t;;H>jZcV^oy;AKO3&tD>EqKRj31rGE65Lr(BlJ-!9a83>$DnRy3EZD#
z5FudYE358h!IUu7O}TXQGEojeTB1zwOtGB1fEveW(gQiCz at KJ1_VAWDuYed0Gv-I0
z-QQ_~t7>i*B0xl=6gw#CH{`tpxO+F<qElqM*SanJm86cpNVo}O3^tWsW<6cL;Zv at K
z-QDZdVHB at v;*mtygFVIiiChm-I&za&tc+q_9-BN#Mbj6hvI|-c8h>irseN&Dj9$c)
zDzjnCQxP6D67=8EQ-TA_{Sn|cTb)HqGYY&Zoek$!8=6>-kSbCl&zhfL-S}nj)nS at M
zWGMJUtv?)0Q#hH~y4H at Amc};HLHr*mh2jv^StTp~R@|9KIr?B85(E`G*?70?nCg5w
z#7hMP^j}8*0VqQ23qhc3vQ#TBx-aV-nk9hAhmPcPrr=MW(uWURwu;n2m_+nh at N&q)
z;(uj8%c2jT7p{dcxmx*Z{Y~5LmN(t8F2jkmG>J|zn%L@`%rr|=$s$#T*tBO#d1KUp
z_Q*o)Cu}dcv)fk}ch|Ml{>`$7r{&}<U2E?Wj^~5V&x)U=ZK{VBy>U!l4?{|D7LZ59
zm#*PBrl9}6{FLEtnWGD~OQ3%1WNbN}#@Aqq!!KK!hrQ^l5xlnT at hgdrbX=_D%>uAm
zT!;yGG%AQ?J&G_%zQ>GEJ>+dLk`!-~LA%r)!D1u3&d)%|%yI&Jc&VoIE?cG}c=Jtz
z#C1VrEvucpJW>(`PIJP_rKR~CY?zp-0T~3;=2k*AdkNlisg9p#1^3?e=3LGf9x_TR
zRinX|orZU!aDVm`dy=GOd|5RT?jMVngF1&ATx#K)^a!E`(Xbr3c(;D?awDu5 at rZ8}
z=$Fp~B+^tHQw+deR9#a{wY~mC+|Wi!SJ_c%cG;Z0N?3LBmNrBHmL;zEpPXrBhBG6D
zEeYmI2xhq3#EgDh2H?$i5<A+qjTMOe!9a^JwKrf|MFO;u$*G_pP~hYJdsQay0_|DT
z{o{KxYpt?d)Ym>uy_rQF0lgjE%xL7$i`0`=T?4S0VS&jz7IPAjH;myE{!7ujvg=_b
z#U0TSY^9io_*7lqc=gyb!LUG4_khb|>xMR!_*Nj1CBevJy*oVRb3hA~?Q}PdP*+4}
z_9%e!eY~e!#}dV6d#~L^=?|8f)PNG-AZ(QH{^q-NtP_(hl-{t5q(}KEQI8d+;d&+E
z6p_vaPvLznUQdz(KtKW=!X|m{W+wIXY&UtR@|ZJt)%!KuS7T!rYex(iXFk1}>4u!A
z`98&zaoK>}lVkb_sO``_jI7Q_3pHDMNK7{4YqH|AzCk;#YJmkYJnuAAa=Rj;W$&2p
zZH^lwEyaV{3xrO{TjChlM+bxgMekRbuPTT`eNJ(&x5GzCQ9+@}+96B!TksKYY5rIs
z?rf2m>j3w|i)mVc(A7FdL}JnJXB^xZy=S4t{ylxqEB9N=w94|Hxo{#!Ye^=Bu!DaC
z$x%a`Mj*i1mldP>crG9^3DE9Q=kpK%&yvFH*<FOzDbXVnCA|yAfDmETVDr%pM;j%A
z0ZOt4kaL)W2WACLSo$n;jIwTGPV3Ja^O8HBg6*1bZmk$g)^+6axf5AFZYKS98F2&n
z!8+xnbACuY$e-uyw)5k}w4RMx2HS|g2c4V{O&)XTg0Sr^!M`;Bu4YoJwb^+Z*deQ(
zh48X7Dt;c=HDH~K5Ki8h?KwWCr<L0nv6kY=tR_^w?Knaxsn9k_YmQVBWSqyY7SdcK
z(c=4em!P3<M}J8GrcDxo3vG{~-*Y_w|COI_E{}$A^*oj*Zr*b4?900529{t01(dYc
z?03}Iha3SCbU%*g?8NafH$&TWMYrRp6UV^>JV|yK*BGu*>EI69q4ZR)2Gih%#!0PS
z$L)dWPx<9?38*i#odZ|j<;w~eqa9O8g$+MCF_$k--e?taA9G}3+19(7fXD0;_c0g~
zuhNPS-auSIJT^$P$vdA5Ku5wBwNFY03;_oj_~sBBA3N)mEudy7vHcP=dnm!B2#gF+
zQ3z09O|>9J=`~Xczg2hzvRYyH9ZbJ-+o@$2eeH{M)N-9ra?ZrdcJ0a0)21_IjWG!^
z&!x<;O1rL29K%CkuMfF|Mk5Lf7O+j0fE`+xAIOd$6v3DXmYZ;4<<M`Y=)P2*u$|;#
zP|p^B=5mS%P?vsqWl^iImUL^3=g5qB6%n1pY+g~<!Z4^h;)UvFVa(09#J4$UO9;*3
zV}_*g!~wN*xwlBJ{b{$O?C~tDD8IU+cUilBEPR~t^y3J<#(0XbpoQdVvpa8>gv^u#
zHon2Ty+5W2Q5H73u2~z!axEx)KS!cm4PCGCq(cI<bk;$Ph#LLnc`g&u(~~1Hq at ea9
z1~c6gjvBIi9L^S4U5Z at cu*a8wY?sd>!=^H8v?2NwLn4C44*9%jq at st%|9{GXXSnCY
z at 1{L{?Ae{ZC*a|wHU!+f=5A*X6`;+fy5Y9Yu6Wu}6i&@(KS!u^U2fBevIL?A?ypNN
zut^k7Ibzq#xN_k2M#$%jnMy&20pmNbaXQ`ZNtY1n%=cPqtrr;p+szoLFA^&`HZ+ at E
zWA$(vC{5!DvK2AEnt%MxYm>?XczN*xS;3-n@#h!adX_LQ6BJLQ>MVpW?dg8lM<w^X
z-h41}nqeQ<UJ-pI37K{s!_G#WJr7OEg4XN+7%w4OQj&HAWLge&K=7*T&v3mZGmjs3
ziVgjhvV4G2jDwI!b+6UXyKudL8B6L<u3lyjsYp+ll)uKUi`Aivv4&2ZZ~|4Gg+Onp
zkF<dSEkS!&R4=olFM at HbjS<yN^b(W<FFq^eW!eJi4Uy)GN-7ooJMF9Vd9%>gLJ`jL
zr)i3f3%MwHteiN;Vgu#lW8T*>G|W%z$t}`UjhnfuH}1XgL#;1DTu$H-`eiq<raRa^
z-`HuZTUfsvO at bj5#KHc}HLP(k?Rj6y&XcF30Gm#Mi6DJfGPNbf3hMq-{3KoES at P)S
zyoKgxa?nL2$d^{jgpJt2b$n%}BMZ4Bi}O8(nDN?9u>2qLg2VV-JwnywFeXb55s<cp
z0lI_<ixjNG9FsxB-q7hF4k0&NRRI7rgbRzd`{mAj>RZlX>4ZF$7r_8VQ_c^I*WluU
zRZyoG5GXXQpKSPRypE0Ehd6*BH))ct)mNDNuYg%he<;`3=_9(12LzQv2qZsZ(X1*~
zvMgMBNFljPEfKolDapRAeY~6d`Jc|I6h0e=<7W5SWAA6Rci&5nzr2UlwQA|J#X4x4
z^Tw70AAWuVJ`hE_u at Zzb-|qLr at PR#^*~}O|t!^PpAbSm8x5~?gJqF%M1+I_rH*0)}
z;4iRd7~$FwH-=L0Y4t&+TJRh at g>?dS8S+8>eTZa}bn^yzUDe_mzY2AsNVn{hctH7^
z&~X(NwOa6|2ENz-V;qLL8(+pXJAWZ%J87)PADaq99Ik-YnQTWH-<9<uH6sZvB^M`;
zAltk!5I5RVN(wKyTRAX->5XTX($6$bimiGoR{8_W!Q&9x%pBe=n?AJ+6K$d?4$i4s
zXd!slTf{9lMa;#lzcev0bm99*k at KU6cCaXI$3^3oOSc>Xz@@n;)i7yFX}o^xAIW<j
z7&;qq8XInFV2k(H2Dd#zJI<Tti5$Kh(YE<=OT=|LIhWjDxwT2<28P5LtEo*}J(K0f
z7q_tDOQK!0kT*dJC`sjA$>0(<CgJGU at 7{csQaL1;P8XAR6K}N^=6+3zMaLUpI`xX%
z07_<xBl(N6DoFGZ<B_^*lA&4ER$twTW#Ka)kN4kk0^ZB-8i0#r?2 at OaA9SL%X6n3{
zyGnFPyxBRMS+rE&5j{8k^QjyID;T$j at Y2O*tNRFJrJmX>0nxpcX~g7FaM<!li at 5}9
zm<98AvF!<;0P`Se8_=?^9}BH at BSh(dx^=#WZ77Y_bg%8=lY8eN0U$U`^|X+{im#+l
zO)s1*Cg&!Pt at V&k3lqD!V<Kb2Q)L+p>RMpJaPDaPZ9Cgs&f8dVYI_I}VgiI&Es at Jr
zR7Seh6Me__?LMo>AKuME^8P1%2u2+7w(IFp1!e&&m*eZlr&0!zPHLSSVga2DRy!}X
zFD__;ZEh at C*JwkrzseGDJ(V&eLwswp_6LJ^Pq>d=nL59ETNZbUEL}JlE`OP#2V_c<
z!Le&SJb>+z4)|lI+8p*eHTQr0m$C%gj+tpUIn2x7mM(|!^vp&Z*0V?hqkpcL^vvvL
zksk-O(4N$ID1cbsI5!j`T<wq3p>eVvJJoLm^vyvv^0DXbh0G*Cw$B7S{IHksuipT|
z+ASgLbX~|OR&B_CK=|NHaD4uP^8`=0iQb^?uOY^yTH0uh2hyI!<FJ1zt>f~NP4HcV
zRX07Lxf%g3%RQe^mVOcXSOlqtl1=!-Rt|TNxJ0|&ovQr(h=^u?j;=X51G~KBNybxn
z-_YBU;`xD1fUeRJ+x(s4C#%3Tg|<@?$l;q`J98x>%GaU1k3f}Hp{a{EC{;vBi;^)t
zcEi_H>5pc>BEP)FreT$BQagF~UH~hD5abQ01=_AHec>Uj#-N~bad`aoc$n at Wep<Ww
z_{lDhDUkxKt7rGxzS2Nvk!2#KwBpD`Vze5I6IIKc;A)lboW~C&3Mq;ImgsHmP}7{(
z#itx5iehP3WBr`n$}P{o$+`_AS?8?X;qBK6vucj2hrT0(bA;<36!_xA5D-J)xVSV?
znyY at 9J1iw@-INIg`tXH>fCj)i1e<1MY)OAKc|tTyAdns#Nd7T?CL)6gvn0xe-F!&F
zq2yuWy34 at WKuaMLkfk;sOMf#43~qz|>7o;3V)n+!^V<u0HFL`Rs{Y)S@)V~F^vuCW
z5(8<6>G*1|KC$$;My($x9_4nNuDr3gsj+puQfS0!T5 at A?QOVR4&@(R(`NuV))|%4;
z?-Qt!xSQ8cQErjHY;GLkpVNNQC{`y{=!^9)R8*3C3;|rU1ha)A_NCl70o1yQ`RQ+D
zI?lwVKZX&Uy-0B7d(4SB^Z$aZ6ED-i4Oi^v8Y;sR4ql`=9ePL?mf-y~gas4aLjTHj
z>R2*tG7|fm$5{v^glGXy=#$POivAks$Y(&fCXr8q(Qn!9Ys-wSEId9&Ki#e6#!^|c
z(hWYI!0!ODhmH?ZXafaf`@L*2MoYzH^n)+<bB1smOP(Gg(zW!S-^{n0mrW%@lf~0>
z76<U40KmHr)Ohp+N-r2!zB0^!)Lodk=QKP9(NHo7sW&+6%N21q|8#DOnBjP0^p2kn
z at Q46#)Yy$CmYr0xn^zF}$k(wo>E86!4>$~SIPlKUEI$P4aCJRYssEx)0|e~>gWph8
z_w$bT@|jE3EWflW$8voCtMeD)Dsgyp0M^<;0U#>x9lT{`NHuH*#31$>pZcy7eZ<Z^
ze4c!A^H`iW5XYgEnJLCK_s`(5wJakOtXZJ;2rp2UC>YaIf9z#6MpJt={^re`)`n`e
zeo#)J!ltB2hdUifeM674fvC?Nz*D1T?!^sTX7*T!biLLDl7)$X3$N8lFrsKd;E6eE
zvh at 2$t%TdiM)IDs<mrMb|ASFH5l<P2YCpnOX at Ptli1p9dp!8 at 374`3schh$o at rEHO
zY4t61WO-jO%#`w8B1mJkQ9Ufe?<0%3TOe^SF0mp_#e-G=axWF#jKKNI4nM#A8%+NF
zn4MqQxb__OW%&pl5iMEx7|_e$;3Y`)a9h&k+N=k3FhG_);Fsj`d=c458>Rgo*6B at 3
z<CJKFnSfd}Dy4L95+UMR<w)Na?O!QinQ(m1?V%w;;+izQxu)Ywfz>DfqZMhfOH;CL
z?;yl_OKNlg2HG2cv at dPG9MbyziUF8}#NV-q)Ztm{2(1!`zx9V{ph%IACGRGrojS*#
zMa8R&tqEc0!pO4;>@>(Z at Eqi$8hW5^oix>bd3~RNQry&SS!;wWrC}{iCDUk*13S;l
zLb@{Cc2Mwn*L2OQ?}MYgr&@S#?rdu8Z7_>ttHZ*bMVHLF<=qva1UFQ{>F%gkJ04)7
zF-P`?_<W_r;Y%+6wnyptB1y>fqisW{`&*+QX7w2*2f2MP0!HOJOM|EYDuUKC`+2g9
z|DGMLVkUvHAm_aevZ+n!+L(!zA8_5WxsQ+M&~omQv&|G7b+o~S9tQ$WJ9*r-yPd-|
z-$G>RA$$%NX3e|r8J(6SuDuNl(4URxqxS6pXNWS6j}WvG8u1&!>8J8gc5iuW+gBtD
zFFTPBtkNo^?5&shV7wv%?G?nsG+7O%4UhZiFxSY9&=O2k_h1?w6aGu$?QWee7}@ie
zhwWJe-k_1LJ>-l1c?j-mvjlp;QYSE*nd*V|a;hx_gX_6nia208$IHD)W1ecBdKXy1
zkdag)no(DDP$mk3U`47GI}s389~|ZFgPIrCzK(|sivkL(MqZ5Q?U|yP<^76ITEN7B
zBh!y!q_9aQWTy)sihDp5Q5ZHd!nLSLZ3|u7YPYC{KYq6NO6}CO at SEBq9G^p(!-oeC
z_)YgIT{J)cmE&a&=2#J0ILDCir!L8zxb3#2zKzyPdm|}Mv<9-sW0n!Hm5;Nea}&4F
zYC1db|2tT|;TT_3TQn935ApKS4c`SBA2^TEHAse;;4UAX%Cya7zPp(1<mnIltVr9N
z`oo05JR%>52nS)or<BUJTL52 at cm(eM=mmp}mARHlTWpuLzWyWBB?ahhQg}&4|2fls
z(~Jo;8%{kA4_ at 2bpccjUpRpx!AzxnlPOGl$!HV8?cCTn1INKeS^vd(l_!-$o8)V#o
z!@Ih309BFODH_gfm4eMvlF{-iIKJ~pr%yF at h7ytx4w~p3(6;eBsaJ4L1qYEZaG)<e
z<G9egj;SdrS|3UikOw2pA$%9LWJN`0%<GQ&QGI|EtB}|ipU8=7(gY`Vs@^7L1|#Ku
zHbaDw50#p{#i9NcfmW^=_YX58YiGJZ1LfJyq0I+W?8gffDu3AZ%27{!)!zp-;x#AQ
z=ttR8)1Pz-+`fCT{MC5x*9cgyPM*%Y8#P>&h)!2r`lus7oiPE`z7bpc&oT$4M#bje
z?NAhB-;JKlVog{RKjuV at 4>3*6?XLUxKwJX9m!Dsg--sM#A6$$J7#tujYhy%BiJUMg
zAX7sDd4m%&Y2EeAXruJ$vQ-qChfqg-gX`#C3HnXVJ0P2bVe&lIHBHD`YflV1`-zTe
zpQ6#rwObAUzh0qv3Rdf26%U|8ut|JXug>a562mRrtdl at BcJxY@LjU89UPoq0NpYG7
zU7}*Z>g*cpoS*4cCar3 at Yk!$$SK3d-lxzIF5sYq0RK1wC5{xjph0u{(D3e=3RlgFc
z0)#)Ard)oP1(!vCQKLSs*MD0W3xG#(j&r9dpGgocYKW+A>Fa+E;mw$UWa!Sy)?(t_
z>=$I0*TQa+gQC3zr}!eydbC-m<3zR+vtXtm4nB*tPd|HW5QFM{C_s4;9&aj4j*}H+
zG-DLq(@Rk)<!6fidGLPtm#$&HRQQYQSePD8J|)lDF>+nl>iJ!;B=(C^{NX5w&s>Xz
zVm=#nD(r<*1TQonD<<#e!PT4db>E$sW04LTI!O)caUccJtP(7ZnZ;OQVaL%6wBgb#
zNJ*-)7LO~RbifDIZ%Ut~gknrB0lqtwUGUgY44mZd^t{F6`R-~%VxZr$FZ0RSk*f>c
zfx25&CD42~_E!|P#wXM%<(7O^g&wi$e0EMtT4EG>kv#Y)ypyS64<P at TRNG1LdgiO$
zgKfHtGPMJ|;*aNr7ZQm>qBH4$#f-q{;qo0d0Uma-H_1dNRCmJ?O8nI?wyD~0<Px*B
zNL3L@=x6{@d?bWy*fbO*cY*1O>}u%188bcEtJeWFLx-41c(oQl!uT|((shI4D+zV-
zRlKFmtxBd)V?a#)a{c@^GB3ktxK_Ia5X$yN^yl#OO5a9nZaXcF7GpjszH<sE%F~GN
z|MRsT`zH3-IH7)rM|g+hN8RF4T~bU*Bq86WUJrSs{Ml#>-ZLLdWfnH*JaeIlZk{`D
zj^~eL08KpT<m>s0>ul*|OQse!=0ku5MGb6g3c4Gzyni!>jpXXd#P>GMJS?Za*7;wf
zrJV6=sMkDVqQ$0q%vVM!BTEK%c8a8<7$8(r#V>E9&QtSG0?Cj(LaVmcxO#)vUMtn6
z+NFnu?CSz=j0|X;XU5KEwGpsuH#Gx-K+$#p>&gn;O6K_v1*8j6?&u2BmBQo>kg+~{
zD8e`;5Scx{^U1El6`PszMN-;~FQjEZ#2cF}vD6x1BQ|HV{Du*V2K9H)9G`BU_BsYq
zyXxs<5yFagfVvT1y~kj{)h0aTAMf7%t1jfGvm&)d!&XFx&SBby*L#xx8`PP9_S)Gk
zlBPLZqZl0u4FgXt?QA>$-*IUAY}a8o!rw(if{#x=49j5LT~?LGFl%bI9gWxn at Lvok
zjov&r_)P0u4NySJf6*CiWIp~9dPLZNw2lE<dg>i*YoJF<5GLb#CL%d;qf=X9(Si?+
zl5E$sWqq^t(0~FcT5c(zUmpY%>Q;AdaL|dX5o-CJ1o(AgNZ}iZlzvqURwtxcn^11d
zR5?LqhcC=pkibPVbNENje;tR|6~`NIxW{XQ6NF#!p%qQ$jL|Eg2Is0i1BK~_q};X_
zc6d~n{~Sh;kZ5Z-8nPrb*Gs-;VI>2~d9 at hpD_nPvEIyc=?b_E1KYW1`qpD5c>vn&o
zXH&rLVUqwPm<T2HCcrKZ3>XE#PF4%7-D*hWf+87MbBb4$zzC+C!<;=x4UKLtVFwLM
zdne_rH_)#yPy)$$4A)5}9T~?3-K_-MOR1?d(4O&8iq6_!w`FcmlrVbo96t0aTXZzj
zbQTC&pd_1mjHrC=O~*$P^Ov&M_Yxf>sdE<jj+PT-Z~C-0Q-+#UCgh*E&SGSyvr5El
zgka-B^w+#1W-k!`kBs7eiLT&ywTv=5=c`kpxcx{Nv|X(t9k1eCvt2wWQieIymy(fT
z!!By_`!uR7C|r0t?UoX)m1g9Uwd*ZBC47Mh%0;<~=+u+-Qp1mj4r9X!Rf|B2q at zM6
zjw_Y&!uX%;!9Z-}xdXQHHmlfTb6BvS5HMSh$2bnaq?rKM<%pf=v2kM2rSW>MVkbh=
zMkU<q29nh_=*&3XvME5^AUpU`0*m&lX{mf5j5S9k_Pg}F&GWC`u~!tRINWTq{^r5V
z3#X!Ugxx_|;u13D at L`9U>PZ7)En>&Q0GqAb$z5FYw at X__W6QDX+|Bc?MC<&Ucmp^|
zwScawJ at E!}?48umP$J)>j&>H)`9dvX7 at q`%9>KN$=l{WYncyqB at 9&LNlF$4Su{NYj
z5j2lm({46kSao at j130$>(jU{Uvq$ve;$RaiD2<=yF}vIX?kAeq-5RxjHb1ZSAwrO$
z7z{^yH<h*pLW*ItBHXZ~{)#*J32uY;!^U)+^o=D>BRw*bITK4+VY<Lg!ma%I at j(<I
z(u10ylLiqeIa;OssQL=i=-)HVp9%WkD<Z4KFSnQ?-j_acGMHc+EpPaP1IIW_8uJxt
z;To;Cf6ouDTH%ca=HX=XD0mM=p_6 at j;bJKOo-o{;<NVB?s$`{27U>JjFo!oe_Wd>Z
z71WBSJ|&IoAk4&glHXW*=N=|uY`iLR+uw)2C^WW{50IH4%T1XONjI4k$h00)u_Osb
zh$?jEr`T20LP1F^{^t(GwF%!R44(KSMi^09h|R>@6|!M#)w_#3H~SJ0MMbCL9DW3L
ztpMp4#sO4>^LnT1GV|l!)!8_cXxx#=|12rfIXp^jC!$b8`RDf#h|V*S-gs~=M+JaH
zM@`l$_7j{Anv8{|*BxOz6>{mLrqXbou)x75rN_i_S)}xm<WFGpEH31S7uYK^Tg_3W
zPCKjT at HT$Cq?EFX$X2_eaCw&md`fyg;v6 at mo_-%s%l-1WV**qQ9JL`1T>d+#=A5wP
z(fUiC2I|c533{pp4Q+6_c7^K!dg*zdN+;7{$=U;r=s%Jv1Zw#YH?3mIm{d{Kjvy=s
zGkW4sLTMjkre!Ob<6%jC6?Q;^bheG!#)9(ZU6Rl^g<N{iYhwiGcve!u6dx(fYlp!Y
zg}epcJa6&wCIc<78n-G(?^H({8YyRS8dT<Ul+B-G=9dnr7RV7ALovyAQqi7^KKPp8
z&%4PEnrbUBzb?o!iLkMxg5pJTh7q+!Hai_88`}7nhM+Br(CO4IJ?3 at 8;<gmtL}ktz
ziRS`9cTrrC#&CQ6TdK$GGk7_n24D{O3;ico2MwkyppQ&=>y?1hFB<ebU{tqR<%P{@
zbEMhdDh?59$i*H;lWAx$fQ-RznrIGA_>f<^=osZ>p^jTz<<kZrs~|FH9o6k-Kw=FT
zA8+|fJGWr~8b9xe-BO1#n}G^^<{o0^GQMf~c(Igd|NJxfeF_Q?+vD(Q;l)6fj$qgk
sT^R at lWF?GzShO0|3sQL9%1sgol{T at lv(5 at _XcBN}oBBunC7keipI&Li#{d8T

diff --git a/mediatek/WIFI_RAM_CODE_MT7922_1.bin b/mediatek/WIFI_RAM_CODE_MT7922_1.bin
index 262aadf4b2fa943bb8c90d6ad5f3fa834db74102..c78432393370c4107854bc8052177c31fc6e0fff 100644
GIT binary patch
delta 746526
zc-jC5K={AJqcZfmGJh(|vaP^S)BM;XznF&<GAHU_2<A3#QiJeOuaGa_VRH8jV_F}q
z%k_4+F{})(nnnOH5;(?A#89_(SRFaiixH5=L1Wo=yUVXLuMqm9?~lBVt_TUoln}A9
z1+N1YK9o6k6~MpmcBld=h;x<+C2T1^Au5_k->lRPqHs#{g at 2USh*oc!=mWn_LgUa=
zzOy9 at 4$4XfDOruavlH#JDc2I`!^3?^0J$7j)NyhVeI<{_H@*2ydC8hM<?F#|3g6%s
z)V at aGY@CGbJXQ5%;^sI2Qn;^T%uJYp{_U2ZkjnFMD=D9&?3~TR8&i~xhXvAIj4OyH
zk_dpoH_!KoD1X$JDJEviFQj6U8;@^z+NRKu#;^TfuZ%rYm!RFxZj@%rPuSA?v0LKz
zoD_(}p;c%n&PNSXSO(2D=vX9YshKb&99QFVW`uEje4eUKvXjh_kBdsRUm-5Fna09J
zLiF>;?LYE88t(g|l~DT1SGfH3k+X at ClY#akq&zX&ZhxtSPbofZDU0Dnr1r*iOAqMc
zm;|q67!OlB)=)h`0{TouKg0}dY>+|1TfXcf$g67SIgznpF*Dpxl>gjA=L#Y|&q#ux
z(@c3-aEMU;&w<;cH(yPvY#CpXHAbM1vey at tI)nKj-10=k!WqO~ftgz3Jy$IkoN6=k
zbB6W+RDUk56f}nqVq=Ca7%eLo6Qi{YgF9XdyGpbH!o(M`)VtW at JHA+TPf=RPG9Ljy
zj=uq%GPh8AYMabIF?4Xqr=!65u8i#aD^`Ym+~+6V2qGp1ULrHpco{I%rsjRI;)-D2
z9(xz+npxp>5h at vy(6&K5-Iek_Fis|E?*22Bh=0N>m6%hf<+>nxfh!gF at I3a!dV2J0
z)T_p8csi;Q=6Ewo-GMY+_UenK(3p8C0w_02J(N`#4%}FWnxd99-J?wpLPY*oj5_k^
zRT}qy3aES9%T}CP;tv at N7e8GK*pau%j1Q=X>%dLzsS0bRjvBBpV}C7BDidDGM((2?
ze1CdUk)*2f{(=>b;eedM at W~MNBVwVtdS=$E{}u%#WJ>ysPw{*iPk$0OKn1$aTK==E
zMHk&DXAc?;jn2MyL&V+#Yz7!Ow$(7L&7gz)d6Ysb>HzBKRjm)Y1SKGa`F~%b*12F0
zz_D~%x5op%rSF#c(YN8~wB9qq7><`ubbnF^KEy;v8Z$SUUq4}p+&#*wkrd8K38lF<
zhCdqF-m?iG1qce+QZ8fD7`g&&4M?X12v)l%#%I(7RSv=`wPp7Os-%4}3I{2UXlB4%
z2{c2-V9MfDaE~Ofn9cK;-C$wC?n26T at oNQ508Err+;o{9iWenBHWr7_EQzjGT7O5G
z8{eW7pUtXb1+8QE9N=5wtCH9iJ5rfWy(+u4a#U~~;WN#%;dSH>`k_oH2E at WSSPA6W
zaSd?Wwk9Wl5#Jva92#ko!N&HkvvF)`kZCwn0*sh+EDd1N!;p{lfSr)Gld1g6exX7r
zO;dLSHeDc^Wsh{#fZ*oa)=7Q6I)8{V+aqiQ{i|e(@EiY1Y87!C0=S9WL)}fpT!O;|
zWDeMJ%_^|VH>oU-e+O>VnL^2V(Q7NR8C2|yi1yU)8USiaAuQY_Q`fS1#9B$Je5Q&Q
zB2M^T+k)B`zZlM-yPs0PtxHz&f1B)c#o at _OpZ)81$X@&qCyku!^|3rRrhf^{#F(!-
zgz1I3^+Q#FoYvqM$-4FMXynIXkDZs?WwD|(#Yq at 4o&OcP?Op$aCYlo17hj!T$xhz3
z{&%KR(=-ygp<rhV%pP+4pb3{LQH{tgmnn3IrTM3d_6;gzpFno94|>K+`moj$_Gbr#
zj&1NERG$_{BVZf*fWM~}NPpMx<uAlwEvYZ0Gkca^ueU%tn)geJ?z{u4>Yi at f0Ar7X
ziJ$F-py6_b!HRXt<MT4m>pKW{PGJWY0uRYFMYKd;2QuW{6WV*o&Os|?(?OYo1XZzc
z^pNSQhVvz2RB2|icBxSY&EfL~;v>I!pH32)u#k(v;8lRof60_OFMkb3!oL)wB$r1W
z`qBsgyoDCBr0MM{EAN_k8s`sc;5+jaki+GuaVfWaXmyUpR_a~-^EbG4(*T=|j!h at e
z<;X?KQRaYnX?UF at t#g{=YMrpC&Pp2!wBC1 at BtHV~of}BNrrcW+w{<Rc??Q$p4FNIf
z1RBh3{_O}a{*V4X|9>?iQ6Xs9w||JHy2vuWz~imP5hDtheKv;`im~ZFM*SyBViYN$
z>GM;X!5MotvHxpvjV(o$7Z5;j5eGmh(nyeR12IBT>z3+xmBj8h$#I8ZPWEIaf7IAH
zwvPa88Op<_nucf1QWKR&^79lM=S-xEBx5f35G(XH8pHv|-G3>tn?8&zK$6m{-F}eP
zTkCgBFo2&>)_*(6iQ;bMcQ0CQyKsvlU_7_+-NA-+0q>l;N)M|((+e{elvEV1JP!D&
zA#T;#2~q&NVD+HNg%uE{u+IrH3O`W35cxhD`QK9_{%8 at Kpr|N?lh6V0;(uO1D<XAT
z`fu#t487gp_<vrWD9kgha|N%nrmSScLk_k?r+-${r*0P$IZ~3cI<+&P0exRiqEuYF
zr-jW!W8>JATH6imS2COIiNY(~hP`jB2SynvFPxV7O#z)LL;KiVTYm`<Z&y#u-be%l
z_)g=Xdk*qA990vxzMlt#pDhL_$ha*SE%)Y^{$=<9Nq<Kj9OKE4Tr2^N3pNKV8ZdCc
z!jx&IF;-B^9w?OSw`}@w;Z<tutp9-tK7kj7LR~@YO-At*hN(`N3$4~O#*lYtFP9+^
zPEwY9^Up;Fz-4?Dz^h^PR=veD22URh4 at ly!U#`qv-|EM*w#(Ra*R7wd(>(sX_H8wg
zls1rNEq}(-wj(C0 at haCHw_O{1$L1EUW)V&7sp+Ie$)=8iWfOAu#UTAGdPEUe**KUr
z<L0X@*#8_Vdki7Zby1BO5g=!4o9A7B2w!bxjzkXYk7slThwJfJ_B(p;4 at 7i(plyp{
zmx*T at HpfJe^Wg$tyrluPX0Br|6)(tGohELVJ%2%Tixzq;&bR^@f9=apyWyMZUW~uB
zx}uOnv31>Ul-%i9!I~^_l*E>NM0t8c>d4-5wf0AjYt_wXG+)%i{CA65Y_o7Ih4&6B
zTx7ZfjseFofjm>iZ2$n*FPfS3%*pEY_6c^E6D*yOz$N==5?^;@^?1OFh#WS?q$YLE
zt$!A?>TSy#{cJ)%b?wckSFPN26xp`k{T<<?*FtR=*qk=;)9!`QKk}a_`8Sn6ze%jy
zzwe3|RV%20{dvH$p|&ho$UQJsvLoc)fx%#~?dwP&G3xavVwlewPElAH*Gq{ZUSkD=
zpR7r(89TVNh#T%n(qWU=?)?@wwB^{ePk)Q%4!j<41*N3F7_%KJL!O25crr6<3ndJQ
zqF)x{Z1WkCOyxX4BC6ZiV7u!us-QIEarx-3JYbd;$oFA+RI5-tg}w)c2S5- at -pthc
z_{PSC3KXCVPc~gWjZU-+T$rL at tKDNJQ6>bfi|ZDMRIx24Y-~#>)bGr+uBP7NZ-0F2
zDoMW}KHX<My}iqW2Y7JwW>aj`<0rDHKdn|#f?W<)o5W?aI3osGX at 6&~J;77v<z&9Q
zCg6~f=8+m`?W_?Q%7uKvKinCJtz#fpF>MAX423kkl8^eM$UB@`Xox|y*1(jT_|dvT
zxIDQv(x8BHXTX^xc~|ppcd{`s2Y+s`(3_6l_ADZB)FH!eC?uBc=vE$e1FVvK$Hw_M
za~-vMkh{%7*R=Bj0}VSpmkriz1pC1Rm#hq)`q0y3b1%Mq7QtXTTPuBJg5UTT=q&{8
z$Kt55Tgh}0!;tE`q!|-ww^K38)a;#e(G12}L7-cQ=<#|9(!b5x`H3D|RDZ4{2&z2|
zLI;l$@sxH7A&3_%2sJkg34ZgzL{>|PeE^sHTzNmF=s!wLAgIAnvkONEB9F+{bT!5{
zpI94KdT;o)QKb$ly)CuefR_~+AuB}g5 at dO|?^TdJ*+3cD3*4LdC+bnyWpRhbiG1KM
zKU+1cD<%(h!0hS`=9X2YwSQ4{0$rjYzIDZpKk5SaM?PC-HhZeDMxyU~<t&=rU7ZvX
zD3Hg~0CH}dQ{`qLjE2KiC(sg1_P_XMEAr{0-Ot_))S<GiUn<^$w4wUE*UW_D?n}Tc
zyOq=yfebKvv%`ka*EFlCDL~R&fr<hvaZMiTtEz}cLe21XY2h)E5Py|KSdU4~1XO!L
z+|Jcx+!;E{V1)H`%<{@MR`H0sMCr1J-HYPhd5!pqJ<S8;STK9#u97!4(qmyW{>fND
zUwHAuKS65fM6{vlygmgm1*~D9PSD+rX2I*9rv>DIyFBeJ=JdYy74G->-R^)w)guK=
zx7LjzCbDOnkm9BEPk-F+1Z-Y6-dPV*eVCY0Ce62CWy2lvZw0aybE9zgn~$_7BxS1X
zFjBhmR;<pH5UNLOhFKF9t_(@3-5c!84kp{0;6-O|3t_1Dq3)IqSePgKuK$d;8f%n?
zl)jaZ1{3yuN2kMgPfS+KxFW~~(x={8lco_(qHoxEHT`I(%70txuViBR?cVXkm^@<-
zTM)|I#<dj!4xIDyA=kuoYuF&?xsIb<?M}chcA?utlScO?EtJ?I<KB$7G$*FYz`3b3
zDV`vErJq6#=F<oHy5T9D+movjCguMBBu7!c?H>sfY9(3R<kuN)8^GmzObE!w^XffX
zL?WVYlX)S3{C}XWKl9T<W{}hbtF1(qt%yWOxN$M+hjaBTp;Q7urWTfeLBTs=Q3ru=
zQ}FKi_l&a)$_^q~S{Cj|L<JJKH#2O6*7NwY<N1V*b#uGkjJ>A#kr--&1YF;~N>?xl
z^;aM!u}$69i^DI5M1b_d0ZIr}m_F9?(efUY`gwR|+kaba5d;WF<T3QCpDNIfbG at Ko
zpPK%*NFyE`h}&`g>waM)rT113Ok^fj;uxo?Z)Q>x-h?rok^D~_wij25zgH-JUcCkE
zCs;+;rB6l$X0;AVY$8+I+JxWvYw*HdVyl){2Qkl<wF=yIG+JiL*{SbhJHtz<?l(2W
zVbyBFcYm=GkY40=2F-4JYQbpK0o-Ux;lKh??Y_>U%m#5Wg>)qlqvF`~gy#b<3`TVa
z;C+*|OmI2&V+ at q&5*U{IN)f%Rsoo?NC6@*WH-Tn6SJpAF5$Mtc*>Nlc>A-jle-%`L
z{nBa-%T}ep_$G2xHwrXr>w5BzD}06qsCT&)Sbw_jJ6VnxoXvYUtz)SmPl~&FsmA3+
zWBz6SHizIPmxV>#g|r>e=XT~_N$cQ&(f3 at M1OaJJLcv6-Ag>+5zUrUAmq<%T=V!0|
zG_a&L_ab+OZ71HecmbsM0IwBZc1rU|<basi-7mT|+N{p+p7R?5!A`;0rm7-yY4D$C
z>3_DaFN^2v&JPA<H^l+QNi_6gl(G^H=o&TaO8W_$(&-$S0aKM at na;#TX^f!TFbR#d
zlmo8AI74>P!O?=W!vwxfiXiMPhLV+CDt~EITFS{L{+=UXvisnd)@Gu%`1>W+UjG?I
z2gV~WP2E`+2iUz1Tz^*{Uo0+_`#)P`X at 3<$dL&)>=mB2%dNlWG2%=b%;fGx53Ox_H
ztsGYPT1^`szN?w?+J0C>u5c_k1A|>?zD22du5dfb9uptOup%^5nu>{Ump(n*eA4|!
z?bw&u8FwPXYJ`h3MNe4}{FMqdBs_L)0T)gREhz$l3=|%|!*s6e*&}m#<W$xEDSvNC
zhm<WZgqh<!3Hf-=Q$~WAY_AlZhbk;SrK<INTNT at 8^7<G*`Cqi~3!YYT&BdX?5X*6x
zdW-!n35_e7TSVfIiiTpp&F|Ec>~o>pn6xk$APq8DtZG*DWfhGy`Z9JU0-14cB3A38
zge9eypg|VmGo}RDjI)BeknDhraet+Scm=!mNpRFxazqG-og at T|Zm!JPa_nUiAx3HB
zT>R at B2ooM*qWox+rbn!*_5Br87E$O}nNGhzO_H(-=~BTt5~gRPNya!jur)36 at K^BZ
z-7Cqqp)jcOHEP(dH5)6ZK(R&5wdyR$1!^g1omdDAt6F<k;|sdB?L0pzvwt>*vB~N4
zgaxI)NduFAZeR9Ew~M^+jZRMMx5S74hd5Q|mZGDMK-Tte^O^FiQnfQ}rSc-!xCSZ6
z`F65U*pNS#yj&8?Wpe26WAj}c_$R3n)?axapWo(L{cG6~1Qm0BJc8yk&n(ts{03Cl
zI8mRq-@&WU18xE(lKeqkKY!8zq%$I4?h3;ZhVpSV($bI$*+kLy-dC05-cB9n-Uzma
z*s+IWC<`kj#Sc8b9w-|&ZZBpGf3bE62+;Hr18#ELE2%*D!7HW93 at O)F%Cfo08aItx
zfa{%9Cc#s(0?&Yv=5J`a5iCFW&Rcv4^qU~oj0h#YZElNn%}ZLAMt=rXQ;i&V_(VCv
zOiqk5PDo?*q{deZ8hD#c<I1IC{n3yy>+1ovKbDK6BmFshGCZ}%w7yk}E=J|cZt*SY
z1l%T^(RP>oZ)j7~gaS|u!|4;q;TgEnC at tgL3tz^{qO)oG5Q9;irbSi4C944rX08DD
zoqaO}y0ibq&D?+whkw9_FvR^1v^{O7ZhpS at vJoevsm-R#iIjwRFAGp1FB$6>ghg`b
zHYd1KviX}YFerxj;xW!btjkSbMiQ_m3K?+R66qGf7%Y$;%_lLV9A8`ygYru;^OjTV
zZ(eIDAP-NFAW|ebO$I%ptclL%uAgg}owaojukYy9ud0X_qkl08V?Pk2QosBBdR>;O
zAprn_e1x(jJP)T3(Z<2!>4!YCL$-dp*&g4dH$;a$2*N!1 at M6)Zs1YvFbVXFCd5qhl
zUC|L5mU?&QGuFhIY+&0rrn6s at yr7>Nyp?og=%{o}%TK(a$^ww({`mb6hCQKSo}R^t
zy12+f#Jz1q_<!S)kS4$Lew7?M`4euP=kF%BLJtZ9TTVAwPbe%=W-uDIm)^@qs{PR_
zbi#S8De3 at Hi-W=7eV?{;pA89p1Lc*vMZmpgMHA at QPXIAZV(khg=?oOi)BWMVcus~g
zq!XNWsCK!{5o at z3@X;2<qE4_>i(yT4wGW{?_E&9?pMN557{wEBZKReL0G4RjWLr=*
z!^WOYD;0rdAXXa}qK1>PSQt#W(HL-U|Gx at x`US+tuf>RSa=_0}L5{DxX8$g_Q>dnn
z7WZ8J<dS2OQp_bfyVi$MU at VGI->Cd#f8pmGd7U4fXQHLDpDv4k&w6|VAwDADObIx@
z6cPDq4}TlgnafyCWj6{3yTUEP37t88S1N275I!iCRm}q1)m`C#g!!OHt}xjA=3Mk{
zo+#H}6YEMgk($qOZv$z+0kHSj*X=hQX at tlGR5kzD>EucBxdKu*Y_ip&iPPdmL^X_~
z*nyXAl&|Ure?Og338151HTsZ(&p85z$I9&aj(?fHNEX+&1D;BVP|G4}<GeB4N-lb)
zAN|2SK|!}MR1&s5+bw288H7NOwa^IC!avx)H)`_q#>aP=Rbgir5<HzlGcifuBx`w=
z5e+PJAp(XZY4;kl+(%QN#;xg)zl_Ime%Ish{sKwfWi9 at aFy&4*@@za`%)X~{4u}~3
zpMTo-F9`hX{<8FOc?JBZq-qb>aON#C8}a;T#_mS}499cBnl3OJtON7D;S<)8qX}2^
zDuL`jVX{`a(JQ-5nKL=Iv)EyRi?dnXeWVEYIPJWH81kG`Mw6Zf6yj&OgC6SXyp95Z
zDME>;B#*9Z(0pd at ifq8T`?{$vH9kzkZhx+!)#5J{P0+lFAIE{NrAQF6&8lTh%bR=y
zq^<b^E7gJ)r|H+MnrL#-*s)%g34}Pp{R!0DgR=&1&)1Jl)Av!<yUcAcUhTDo(2IUl
zdXI{H*^Wos?cFLi;F%m9O}LVxW6fU^g+$J>tbF6hQ7YZ4WAjI>d3`!Kt^sEY+ke)$
z$is6Eg1;3Be?suE80P~i1|i3$K88ejg)5(+QPSX2g0viJJ761XpBEWEs6-Vh1wzlj
zRAhu9UjctAo<haW+4YlgF=x=fYirkbbmFn=#ooAvAwgzsB}T<OdI{g~T$b!){_*v$
zK9`<H{_8xgKdaWUiQ?h;XwFlvsefGKx$VJ{Eap*CQVhuM$g`>AfL^S+ek5WQpl?`U
z at CBT4M_@*8PZbD=)}id5M~{q8rGoqiF7wrwtAZI4?>pU=I#ouFewOO}w~Dz!-43{2
z6r%dcqLM5o1y<x)Wo8hO*COKxYh1nAtDBBy<BkH9g##g at n(4&_(01Pj&3~(hSy7+t
zN5&S!Zyd1DEYx7*{;C`v>i_^n2j6a7hx!>!PC;Xg6r7brB<Fr~**#}w#2TAbStDQy
zOC?OH5MG+bIQDvXU^)`!C at EpGdOLj`)iCSOb_&H at s#A1~?RQZAcu^^P6n3GSDZ7(-
zUNTpEs;0D!X1E~c?~CZlZhyyW#^Q+H4X)jrdXk7bG1Psi{yk_wb at J!oW-ytkq={t*
zTG-UC#T_70T#DYtnh7QCA&WBecJbSTf+dqGN0SvMBhwL?4OA=`&cWAHM#2JevTGX1
z5WY-V0l!D0j{8w&0k4fGXu8L-qcrt#_9Kx$^8ZuYrvo_0j^8FMVShDUSOV~oPg$kp
zQ>Jw{4UWHoMakN|CM`8U3{(9Rh9?I at 4wHZ=Uj1zh_;lI-S%p++LkJI&XzzfDs$IyP
zr&Sm*k%l!1 at c{0a`VBi|5oqb}=ipCWY-yp?qogv9NTFYS3Nc+pj!A%gLte@$Y82cp
z2ZUj{Kntd&u%h#nnt!Hkv`pYv@|grvc0 at A>Oolwe-#*Bc!Vl>zaWn6~<5eZ)=FGWn
z&`?tzsTgd*nG4&K*h;aC8)1xOCF1vXD+N<JuPB-2Ne}6LVm4T(HxH=`o`8Kv|De&J
zhB61Q-9^#;OrAh#?VqwmoP?@ip0WmJ|JHlMsYhlxef+q!cz at Hms@t;h#RXqCxZMcu
zjn|Rz)JMQB?qllw(jr7aicO2CA!^*>dWc(=knT5x_bS=BE_o+Rg?$ZpgP>wo4{0G_
z`U4WjzY|%co<qH`vn~>}x;f={wl}iF;tdk*(4uO{Fm9+2iz!H-K6}O~uAt4er at E9{
zo<fIBDC5}q-hY|Q;RV~_=&qcnH&L-@*c1PAUA2nl>loVlQFbSUqUa4w+b__(6?t4h
zU6PYby4IHO?aHRyE}m?Zd7yk6PP at K@oCq89e|;5po|FwqIQ5Hkvxv>1j}9bV=?lJW
zq8iJgDVs6?xojKY#qBoWH6GVCZ{Jsw8dK;wqGax&B!3Me;l+RJHik^WdS_|H9+P{z
z9hu at J;c*c=dYG$4bzk~J|1T0#g8^a$Gz`}POo<!Pm}l1 at Zl;7>Fgp!@o;h5fN;4K-
z{k!x{4?M2*e6pgeE&Tg&Q)5`~srIi{JVC}@WX!HMgtOE`>~A(_#+40zDTBvMISFSP
z6D?17HGjnS8&gD676R61KeS8nuIGmaQpL)05lQ+?9_ul9KZK6pIhFBt)X~qbzU(EF
zXJhU<^`%c|bJ+vt5C*ww&U6kXO!p1tYgv7-ffBVqxUa2$H?yhzMNbmUed7t70zY_5
zG!Rz)bJq_5ab1_hpm}sHK%KI!U^Zw#4fGeczkk4q`0Eq~wLb85=Jp at 6C7Dm6GJW(&
z;Wyb>&VS=FPs0tvH82O~MG3jpu^-TF=huC+$o-7iK7xj1WhLw)ry6S9j?ZD;e(dXS
zrf-8xOEdZp_tQ&vMRmLr+j2DuoTXHnmh>weG)EUNbCwy0OZAxpd$u^ASQm+ea$QUo
zntu%>JpycQZoO!>Pg?bKX3h39#YN&|ae`v+WMM6pJu!MdM$uVgh~+%F>|_5O6d-o<
zkiRhtr4PGAQWS`5=F%w};bw4*Zl514s5M7woYNT{E&ew5<fN=trUdgn!WQVTaT+{+
z!Dul$?EZmJ7tBW`P3DNMPDtm!BrDJZxqoVRRZHcGgZ&{zkkeK0+ZMfe8PFn^-8lv@
zQ8Iqk8?0bYVr>f|Q)eNYUp at IBgoqr~_KEFr0(DGJaY0vLm6{qN6R`3?l0QH5_y<2<
z<1Lui3k1f at 9y-|;&skG69!uOb5J#uK>MdtZN8I+&JZ_)-LGOa_czaDe)3El>v3~)R
zkept{IniAt?MufyLe{W8ZWa}3X<92Qn5+xCNU<6*HoNermviu{Dy=J7%R%Nz!5+rA
zY!TxAL*z)TXbhV0JZsKBxq7Ax4UqyiBH7m-Yz<6h2C0!s%(T7TN&LvVS!X(y5ux2}
zRQ(v^7=Au60K?vj8BSR&&x<k+2!EZpZaq+^I=s{?uOpQR!QTXdRrsHJb{TGCFeZbc
z8H*SMUCYc6=<ZO+7wKM^8JosYS#=f++I!<-9;EnIZotz&z6{<B{f!EduHELa>N+?9
z%uwv8$HI)yBztX8+-w}CmKrOWEKm|StOCjVFPhwPuZ&L3WIcmJUe12_Cx0%h*J602
zv`>Xr?(pVrV?V#~WWH{Y-c*~)g)tSCd5!Vd?he0uc*k>rcJL_e46wzeybWOxCZFft
z@`?OK<+p3MkwrL@#@u(wf1iRKASBKYzMK(})3nq^m&c?3C$H~8Wg=DrYtMbv=O)8%
zDNwl!LG3;3$XXfxucZ2Tjej@>XJ3>YnG{-+i&&}t%4zBTY-0)+jez;^&Vog33OZ2R
z?sRiLj%XLFc+9~f at H(}}T>wX4yvT at f->hj8l8 at UT6W#AHYo%@bweP(P>PK1h>K2eh
zf%AH~eTKNISOno4SxU=zJA!_zxI&aAo$-%s0IdaVF8*Qln;*ER{eRSVqvdfR)-!;x
zpgWpwii{p@;-M^S7q++0A%MkrHs5feVD=}QHc{8xj+r~~y>rHNdA^<x|CP?+km5b7
ziFXg?Bfd()_w7C4W?3j_+85;~RK%P()xE^ow<>!GTRILI<OOm)=di%U6t(C~wyZm0
zh=IhD$9e_|z5tMmZGY2J>*|~2e9yU%Sf5F&Q}Y|QxRhA7;jrmn_;o<l(HLyG6Q!Td
zfaQ2FcdjJ<R;?e#!=rq0$Yb7OI%L2RPU)gZmn-6vWu4&V5fVWA0PwTh#;wtxHyzrZ
zU(8G1Z3X#3zHZ!>t<&_}dV~<<tzfX3d at nJToy&)TjMv>cEPwk$W`uaPmT(Xn1l8;@
zJG?h1q-6saY1MFT(yry7ByaW5R^c5Nu{E;ppAFr&Ur>O{<#zod#L`7YCi0HaYDmUd
zcVqr(*Fds!8Y@`<83UHM=C!50J9R7VrwT at wQj}>?&c`s*mpt24^+?@F=+xhjE%$`N
ztnB>*(V39dY=0oqCyXboy!5)n(g^pK>6YyqvJ73>eis)~4U-aj{4bJvE<x`gq9Fk<
zsOz+cI6e*j3Y4YW5ttjB1CV&z$++wUraNvrh3d{JmiEpgdn_|dk)H!1GTk8+L$yBD
zJqZBGR1|YvF5>3Jul?29oNT9+h0GOcIOQl3pgoZHpns(FyCg8}6b<*WYhj$$i~wMg
z<C*u3Y8W=wk<Xy8Obyf$d~rX1&Rw)Bc_>Dy#Bp$7S(eWxqAA3tcWH3t9rY5BINtwd
z{sR|H at LZgw3#8Fd^$aRd`h|lIa){pes{5C2Ox|ZeIieyq)ox>Y77K1oc at it7eY8ih
z|I&6aYJbf>`H##6G!3ATEpLVUnws{}CY}qlWd_&X2D?QeMa^fn+1c;GfO6E6o!*5Y
zd%ShFCjUu`6`-U$i8P@~&9O$n7COE>Cdn)(SwC3;zxO*<|FOHkYpb;;$1e?yr&Eum
zw;-<H3f3;UeyuO2GP3_fQH%X;Db31}xSe~2nSWD2ZKc at gM9$b<{<U6YuaY%%?0%F5
z9FgXx6XparzmhPwO;mxtH?!@*&w?1=$vb0X|D4%Z&}#g-rf-2>GOY<cn94zr>xk>#
z8aulZD`rp!doZh?&xdLkN#Nt3|2wNpd8?EY8G3|{R%I|8r~{x?`}-3;BvD3^yw7M5
zfPY~BZ=P>*&_vwCYb9YY87U5r+~oDF#V2<n)L=d%`~Li2{48GAVK^CG`mr=Ll~b at O
z*F%MgNG5h!`*PN;YRv;>oDx5yHpl;d%SgRD<ZSl_5i?*q*uUEj9DL!*Us_gnAmDsg
zf(D--$W)zV<(wKtS5lziIOWO4f5y&1gMZO5i^K;MNy!!CPW?7Ch_ocy8e9n-XWC{Z
z1LB_5-6o0<a6y2W;|yI4fsgrw=X`TZzhl}RZZ2h2mq5wN6bo7^F{?49#^@HTC+;xs
zXV!I6w6$AK?k)xW=_u66P*GjkNkl?A=X1jn69Z%?OcVbzA0^-zR`-oDkE?du34h|j
z_KBG}5m4Kd>T0C}bt{srwfDl9ZCAIg4Np5u;$embr5nbei&@a`=4W$sZd1ab6C>cz
zNjfgsj?bZ)$CtFGa;GE&Y9F<yg8~$6-)t;o5yTkVpK*!I$_mU(SQbHic;q??b&iU7
ziM=DYl5v5~=Ry8!m7xK at iw-#cGk-Uu3>(9lC4^NkJ1wlMDof;;HwGioAhJ-2O8jJJ
ziV~<%$Z7CgjxM?~uS>!!<E4MgIA60XGlnb-Ty6C#N12LY?khGNs2ec3XFVAjAZI>$
z+CP*z9S at NB0a>>5St;MQ&rbUl`d8s`)tytBN%>O;UR at U+1nAv4kGEfzD}P7gn7oJV
zrmsg*fT)mmQBw0PGqPOH=@v_~G7zU<jn*=cK at 5uri4ubsquX)A_=7m*hIA_{4f$9e
zB1S*l;`vza+Ay2uOF&;#ZHK3u?FR=nR}JP?9Gm)qp)Z7b;UmrbJG?7 at t)=DvmIQmY
zAO(e=Mkk8eSwY(NYT}V<I)7if4<RKY0oDf|yJF)G?}NQ7$Y&R74UD22vJHeu{n6b2
z1H?2F-1V7e6 at W1tUQ@SlW=El1h~SMaC~Rv47UuCtm+YnPINj;FPkJCDpWK2W5k9yp
zx7nZsgv%S26B=j#EHRw;BA(-M)0Qf2{&E%o*VuO+bd!$oIH0ZZ;(t|S$Q$|D0<;GH
zBl!V2o(li`!V7>qN+t9DAD+ftoU^2l>%y0vW>`W$JTQf9 at 8eqnLMo3u{r8<Yxzzep
z<|`}SDYZL~l|{-&b2$Fh6kVR>I#<BK+scFRkx9=&q(O8R_+4g=)hE?`i~MFWJ5P7B
z<C|e~1uf`MzuW9*DSwPInPZID4rXQ<7OF|qDZa#ZdW=!dBHPD9LlTJR-I)F&Tg%*g
zsew-^XKe_hFVy0HC;~<iNsf)(3nC=XIN--vrW<*Ae>2b4pC+?O{tzIGi0<CB!ep=q
z1!ple_WZ at w?NSQ>`A1B$MtVmAnYAmI*N+l;JF9N;(4P^H{eO9z`>(5CeGOoVKa9qA
zHtzof`mr?jn7$V5_3(CnX&ky`1tGgk+-3Epx_6v at u&58V4pc&I88mDFIoj-zN_TEi
z&vV%UlDzvU6sq#5nH`%T*LE{N8mS`zJznBPa8saqurg(x*cWh+hVEKUko+Mn4`kk_
zvPXuIP|W>SVt*81^M=RTCexbkQIRV>tSYRJ)=5_Gf*pjlrqt2oXr*ks-go2M*NMr{
z{fis<W&H%#zU^yC?No`L4_|pnNR7XcnOWGN6%Wpka}3E_h|3l(&pYOhh4HC4xc=iI
zl=w5=In`TBLGN0w8;o5b?ZjzkN6_?lBH!84;chy3bANrRn9|uG;ucyto8Bh;Cf6-K
zI!Z&AwY2J>B~~O at O9u(v){8};>OCsJKI9$QkLUgpI!xN`h7ljzw?$YQbvp=r(FTu6
z at 80*~*}=gF*a1wo4PuOfwOivvrdlfo83e-cq-2-sA+taF)MWKd%yM7Pz)}&C^V!~8
zRWzoHCx810;2Q}@5lyVshlgZ<wnKzo2m1+baECkL_p&Bw!}EU~THvK-3oC8&EFq3i
z$*CqV8Qb%tJK*p$k*v_d at N5|*vAZ#c%o7d$80ZO*0#&b+%cTQuIcj2&PwEULB2>f-
zy3grQSk94VO61b@$rYsLB}&;Tabuu2C0QW>N`KpQzB}`76pBQ|%)JNas~hWH`oZ-P
zP18mr8T;T9uM~2$$K5l}W3 at FX=_t3m$T3P at i@sZOGu>rNw{24v)2IK<-+Kx?ZIQkx
zN$T^bpU372I{aK=J0_=o4#`M*-jUfP{6=ewITBt@=;(LIv8GhR5E-%D(iLhUMG at E5
z_J42LF{5AKAqL;Sva`DUxxC|>(ROg_KR*(kdCF}t^_o~^Mo$uPRyEF at q>QG(C at 59~
zaNVO!uj`Rd{OXVUq4J59UIq}&HTf&tkhD~n{Y++Uf at Nh<&Zt2<N%M52T0O|Z>VeAJ
zHr*4Q5X~x92jA7_b>So9p>l|)MiQA?sejL2XV(<NSC>A+BVa%*QUJK0fK8keWb~fx
z=){EQ4hKaZif>^8NauUoC%y12tz#nYb+4ATT)|}9khCJQ>ZpllXso@!tDGdTo0V<l
zTcRB<-5QXU(%<t(7$Ime=amJD%)r;Qaz0x5$m1wo%w!>`tYGA_5D^cc;wk2Qqkl~y
z at 6+qK6;r~us+0!SYeEYf;G0QeFX?6POlwkR at _$5e1Z+|rxm^`&V`Q1=6IsD4nRhrd
z*4kgmDLp^oC=*n)X0J^SU~DlC4vr<P*a{0W{q`7adtWfP&DKNiQgrRB*Hhb$$nmEt
zirM`gW2lKVM(&7aZ5w at 6H{`a-zJF-U at s5FnRdu*uMIX_#T|P0S;?<?<9#`0cm%bAP
zbSQ?vpb6#TpEeY77Orq_V9>UKpy(cfqEfDwRd at Zeh2cxwW3Wz2p^+~~b|xT+K)Muv
z5J{x<FM=v~anD7nxZj86nj+)MjMJBz3Vx$vuo_ct$eXW_PIDXx!bEMuQh(3X%!uP`
z6glYDlzjc0gO&qvWgNiR@($=|*JdF^@bLfBry2FQ?KF_{dd%5WV_5aEsZweV`mYV*
zR)>A1ZXZoSV$}z(C_Ph6PMFbordZ at +3K_)b9<Y4MqiR9$sikG<-cE5$;pL_#e`Xbj
zF70XGZNrY)ekUBphxX_*w|}VC<Rb<{U`6J-ekJ>E=K3)69#+ at 0C7~`qQtxS%LdVvA
zv`Q?ox3=RUS#0Jl7V5E2nBUh#K+^G(dSCY^w>Wh8wV{HLkEPMg_8nzm at 4VXvwZy~V
z%J%Owp+tbnXN|?Vo$Er?mU4iSyl9(!x4FNeF#{hfLO?$u9zysO?th86i81qaViY<C
zv7gsHdcB5wCq4m~R0lT!*Akti9f2{dvI?+Tt|-5sY5L3Yv8m+9f^>5*#h0Je99kTb
z9Kvs<><1ABKdWg%su~oWS|B=CVO6K!@~PP7h>2?&qqyEIgiEBpB~Ii^zqt<$IzNnz
zlf$+yo`DEk^*X#m&VOiYPxy$0B`BRbiAtEkDCimf%w4SY73<~cnT2O&-I78`*G(ld
zM*;^-;M%NviffiqFdGL?iwqHCDtHF$_pTO3K!@Id=m4$`Zk4Gek3yX2c3y~vs~~<r
z8~*Y0tz6fBfh5h_Cpmp*pF!R<IMg<?9GJM2W(!<o=Qs#el7F*xzjIR>yf6jsRe0)B
zbvI&^6~@@=RauOrLx#iEf#koV-0p$+p)-K=U8l(0X*J(iD^ZW*O?VHXwy%!!>k8Li
zv-&t2d75DOnImCOUvp1a$nb@?*K}ViMVt5U8a8s|x;{%J^W2=Y3;iLpt?<1paUTtO
z2u- at oItgU<i+>d`^&!CYiyrJtZ4o_d9if)%y$cp}9bdwWblxbpCS&c*-*$R(KY-40
zG<0r;1Y}Guet!}SR62xklp}YVp(3Kqx}wQatMY4i+2C477oNX65WuVpsIq*ps)=6e
z?91X-kvKC$L%D^2nF&9KD<b&X7m5n!g51m;lS*3#34fY$WNVFfP}%b6=Zb|@ruK^y
zr0u`4B3ZXBGmxh`qg|!K8jUFy+FbwLyE1~J1lvG!5yoXWqe#(DD}X=|aL2e_&U$#G
z5X<S`1b-Nw8Y-rrf+Z0BJW`$vbncm{S*@F(@RZRqw*m`hms^>8juCZTvsES$F6}m+
zab}2|NPkKJn{gP;5Dv)u?dXtu&)eUv*R;SAyKYRAaCiv(=x_j#FF6PIE|yMq7Z~N$
zGuVbPafQqxepiZ>F`pPzZOw&36j__Of7HRawi^rbO3_^oW(j$WZKlH19Gl4kp~WM9
zrJS>Ax3}|r#Gfy3I+UpCdK#ROTb*kLqeRf=YJZpX(M0#xVA;;Cr%xEtXo{_gES<<3
zva6~_HOf~8=96Lhos7jNK;y0=%VfOPQDT?e>&m at WC8<?()*qP6&|k6QC=<}(^K40&
zikA+dM5t^3wv&FfIzdH&b;p?0vvVSWHrr$6T|80%Y{Nk{^;bL`!HD)&vMHD?Do}1(
z#ebmRiNfG5N+mI;x<V70qX~bQB+zA}!I`3<>DshA;Yc$*G<OnbF1To_)pMb`STya^
zQExb4u8fNX#!9It>3fIa6jo!sXfT*B&}0_V+v>1u0u?tHx|3oxdb{Sn%Wtv%lXwb<
z1YsqC;NG|fMi}q0Om3qQr%{eD_)p?e4S$Cn{GEbMO`=qZN=*OU`P+=k4d|DYEZ)bf
zY|QC#?pm&lp#|i}4+^+4FaADE?^Kw|2iG}>5EE0mquwQN29y71V!{hgqm82*AiGuD
zHyJBrV-|D^#&Pz_AsTuHZB9C#QC2{NPv6CcHtyGPbQO at MKyFI|n4MfXc?8yCZGXME
z%Wu|7d!K9wI at foybMmI4ng=1szU;KN0dW15*^TVO+fx#<pLD%sm>o%kkIxYxs5}>_
z?eS?XK$;A-!p>kiCtk6zu1r$DrhI~8xL)jiZ{TZEE1=F)H)G{!rJRxw_>#dwv&Xm?
zDPgQs+$0RfTE76bxIW0ru#%kAn}4bvx=ae%#To7Fx8;6aGFZsl-$z%=Kqt=etl3=0
z%)Y=o4y|J^FzyBb<BD&%c)$bdw<7T(=`oyhFai;_<lqG6e-f1ar2>I75ej+Z-Q3N}
zKm{b0gGyicGUu^vH1$u$!PyaHE%V^nkgRjVi+xBgy1-n3VU{5)Je$6QFn_r>ZU9ky
z&06`wb7&y{w5t6Lf(VK?ns_5}fl!U#qL|*F3a>O%)et8&9(q6Go(%0RdFOG3Jy91b
zLgwEf>s|#PNIv0Z8a^iLpfd*#ZU<k;m;~;K1J5g+<Yjy9Orowu<#_svRS^F(3CFn<
zn`;?|nviNl at LN4@9zJmfrGMyIS_W;1YTk*qyfD@%!Ae6liv>!jxJ>3Ij{6-bm*Z21
z@|D$d57HrY36O&^YOv4;d5rGa+-<?2jf`k~JOx(3!F0BB?&G7Yj-boZ!wRxqESg!7
zci?*grA;G#=ir)tY-}Oi#Bxrl#yBE4X~#-IZbCFRCyiuE at A9oL&VR%m9u at VajF?rh
z$J%rP+)|jkY73Z>c8$yd8>N~#QqNDa%l2=bswn(uNGeC~85F*)kG&lbZT-O5o-IzG
zLWQ#|u?NklYKag6cP6GIi~$;E2W1h<J1$@4-U5g%yG2;)nM=V$;T|J5*ZWfBlYnxN
zAGNh=Sv`QAZ2{c?xPOfkCe!rmuk)oh!N$SLH$x|Sc-l~!aaYYeMP}%end)z(IMd8F
z)pdcb?+3R~ZPqJlpTB6VP7dnvY*-$FqyEA}YydpZYP(;l<O|t+3e_LnSo5eFEMVsJ
z9_X;X%{mvxO?y}EQZz6g+INh@<AFVic;_(KdZ(bZ$%a<_D1S3Q=FTO5j~7XmQ9`Y7
zR7bpq(s5pWHYc8CZ<+{*-%xL?^5T~Ghw3+}?jpPBwKze)`5xX!B?>b0^}(qkR(K-I
zz6TJKcKAeN&P%xZ{lo6y5e#W{X57=Qz3-Nn+wGp at _f|H9{zA_}!BtHG$&pIh^RhsY
zLAT4mJQJ|Hl7Ifoj9fEOF*Vvs=JV)N__A-bHAE2GGS`3ZAI<w|+*NvnYVCgCQ<Y{l
zVf}v(=$>pyTsFsrbEnuPJAn?vwwsv!7kD&zL(h5#umbDj%@h5e*+IPk)xDyt<tGX;
z1qAhZB;SJ{KNf9%3{hFCnos~_RZGp>t<Ram`9LrU$A2=tb5mBd=H7qt5oz*On6+8e
z+ag<2RRR~k!<6hu`cta)H>wcU+n4v<Ic`QK^(NYI#lS|nr#y4ldFVxv0Z^64GQL;Y
zC}bkfgoTld(RITniY at FsQmC|{2i$BYsuH`_KEV~KAp$hnZk)DE-?S~FV6=2^+we84
zLyO%)h<`ntcpF_>9qRCtnpud-I`G6<c at Q=fs~=s#(Y8(lgS1aLZdk71yA-cQvI=Me
z7V|md%PdKRZt9kDmULc5ahfE2<J^U_d0Jy#5CnVf;czi6o;Z7IKY!jylIW2<@}<Q?
zhpY=W+kF-kuMSSy<4q=~JB*TUg)>w<Rv{#3TYspJ8NXI=2V85<lAZ&w7>A*u5AWXF
zB05!cm$(CW5cI57rdv{e9cF)QLyujD4Vn(^GxUfb1!?v)n#|Qh)l!nSX<fs_f>e at 1
zvk~=2HtmO-6{x=c%oDA~DSy9K7LiI|(AtWdTKMBvgluKs&tp$(T(+eVzuS7Y5Oi4e
zq<=CCF$s*b&2s&FvKDYDAX2cf{TtEEr?3)Bfq0#LBerpB=<t`a1F_?4uq;<AQla9V
z1$|;%-b@%otnFH~`Av1a05*}U{yc8k#Gj3Y-8zq-_(b~4!Y=x5>RTb_>bLG~(Mn(a
z#3hllc=E9CsLE3<#ZPTOH_q7U$yrO14S$-)8#WK_kW|Q#aq;isVav_hK=03=vK7wL
zI$P_^e&-4PezYX7?dyOihH}*KT#=w*b!Ilri3F#43V+BWwk&a~D`|DerbSw^1GAD{
z&m5^9ml>Gi8aWm!14&LyVYn|NdH7Utwm>W4l03ZcjKjEiE7^KveLJf7W&!+_oPYKC
zL0ho}olyO-uj(neY)|7%m=vU)?Z$Z=kYRV??uzy6c^DZn8+F9*9;bY1P;(1P@@PJl
z^|z^wa)KkW4wlU?O`slyKzCpt67w2_ICogevE^L#wbP9=vT8 at bz+9@-sSgpR`;GUI
zsxs?q=y!P`xBv%uK0Uv5fP2e4NPoYp^`MPn>ZAgH53?87t{1i)$_VYYP-SYmqiO)i
z5QNJ-NatPf_n^4;d0K3wo|S#NBP)3OIdTdroNA{A>TXn-WjX+U=)%=n?>o6zY{ffc
zxQU4u`5u`dfg*$mlX3q}7E%uV|9SV)4E6o^eN!CdYf3krokbaX$=e6-w}13sN+&&m
z=iT~KOr at de%RBHdK(>k%J_+IQ4N)-IQyWeIUd0r{uvgXN$}z`pO6QYDrRhsTt6nm2
z8O=u2nT|`UjN?wyhW*v|{Vs7cM{5y9*=LIyhUGQD^aas<7yK at MDK(Xx>)&!|V!>XX
z>}c29qZ;eHFyL2-BRkQ^N`E8ahW{a|9+f|SEgOq*5DZ_`ba3#N87jNr9k1RU95{lz
z$4ZMNaD%K4v#u}AsH&R%?nU>LezdpFBV`kKEysUpq(mE<lN9VBf8f_8tw-p}*PCR*
z|8>yL%E?;wW5F;E(Im|tM?x-l2u<PHavr>aNZ{Oab(T+fARD~l*ncwDYOLS1 at Yrw<
zXYkG#Pu1$hqhPat%3k&C2EttGC$Gp at imAD?YGcP~vS3)X@%bjoU>Z!=2lehdL*Eho
z{<I^vDHB0w>X%~2&1*?K|Dh_Vs~x)U4yz(-6Iw0Db4QZ>m(Mso$7T1ZlG9<b4!cl=
zjNzgWX+`(716DyBRDURdx|<Nnpqvg98n%Q$8ZLthe3l$0pnM=2UuK_uN!iYKBy at M)
zzfIRT^jSfi|D=Tpp}BJRvdr<yGnIsjPT>ax at F3!QA6lb%;U2!iTJfrEgrbVq!D}2g
zFkF%}<D|ivtUf;ZBR3I(=U{tV`tl|8N(F^DJfb^Rgtrhvp?@kyE5MJh8iN6?82(>j
za$-rru)x*Q#XqzJF3YEaN5jIj2!F$kYQ$e{6PMtZuADTcgT2d4Lv7_)3hn85P}^2J
zmf4GOU8{McJt`-W4qMxvsI5N at sqJW`=2^i-G_Yyl8H=@E0Amxl9OKGBZwP>m`mP8u
zb0W_r5}j}vVt*k6cLy$LLw`MOI{R_|dsA;sViMSWgw%W%6V-L7F1~`d9aGmV3VN_0
zs~Do+<wO_<uLq7T?xA5m>$QD=ls?{Uw*kgxwP1p`0dK*ctbE7baRUTII6)%mkA3KY
zyWl?c3iGJ$5)@+dYIxJ2?1ydKUPwt!T2Sk2#%_6%aDQIy{bi9Od@&BxW2~mBx5R~k
zsMqmB6ll4KIaaTapeJ0P_yW!bIyc#0=p&%FSZkCMrV7TS?Seg1QW{#j_4BiC*=wtc
zKnC6(g5^vX(>ygE7o at gpH>Yr^cVwa32c at 3b8yNYo2d-@=w_a%H3 at KXsCy>1*p`qd5
z(m8{R!hezL+s#_;<VcexD at HV{rvZRmdS(8!2cMF at U~67u#$w?g6FrXZc0YFW*jb=S
z*Gulr8Vr3wnehJ}ruM5h41iHbJy7#;*fX?EAe)S9gXx}9sKUlP%%>`?Ly<D*mEjTY
zzS!)a(R34Nf%N!|uNPG$8fL-=`es||TnK+DOMmc7+7;^h!$=X0N;V=S9Di9GUjn-u
zIfQAoGJSRU9giAjy2Mdl at N;H?5K0%{K}ekYbOBg4bWn;z=x*MZ_Xspt$JL6OpIX;|
z_0-GB!$dN)LfCyHNH?2)lZWIYCTZBDSb60>fBPBHP9nD5!;1hY_k{9&wrc_ODC|5$
z41ds=0w(bkY_7%|7|cYw^U!?%r|l-?0j at AS70xA3Qnpd?8ISNgB7Y%+;m#qeF8|iq
z`=rw$8T6H0EKskg;7z=8(hut at r`JfybUlh>=oLLwTkHmhT<I7jzS>J5bvPbnn{;d(
z=8t0UDBA^J>|5xYMaUD^6(Sm8<5w|*D1UVYRea3o&pP at sQT&>tBm0|)S=w%w*&zR8
zyPBUazxfswKagl39|wn_XEj~ZD9Eu24s%K6&q7Kw0gqQk4__y0UJ13qK_y92WI>zR
zgn>q<Fa)LZ+I?B>_!C2b4TJim><B4|`r|$VPHYTzXK3DirYl2z^dG8Qea&c*s(+f!
zM|?Z17|>^`hd95YKKE`sLJ3oG;7t+6 at 5+k9;kM^shleB?PWR9F5DNFx^?E##)AQ~h
ze-N~^bTCd26CL~(xq>M=0WZ9<U*PGC!2qg3 at x-TCYC6eA*pLPye^$4zB_-R9e>&c+
z$|QafDT`2n4eelp!X=gpxxpcJ$bZC{O6yyq{>|BNJiQVEqOtM4nkRSc?aVa2 at hdOn
z7Udl3_>R}ejn7$$akt$Q91QqRYB}fOAO>`4`>&RC4+kF&+SMY7z1ctBV90JJ682a)
z#a`vA`PdsRl4!<MxoyN7=8ZK%EvNT3dHlq<m7bo7EYgc1=lZsXGeb2M*?-=X2QPiW
zA%1Qi2#mV&_jj0%Z0sf3b?B1_w>P=h^}Zaip{hxOy2dAfRVtBmW*^kdO`dMYAzvxJ
zmdMchSgde^ZThLe3>PH9M=DR5GTl>)=9tEY{0_-eELlxmm6W5WmCs5sZ}y9J9?*PW
z0mvK72#ynpMmdqbrV=X at D}Mk5K>EK~KfB8f&Xy#*owIQ=&?X6ox^|XlKoVp1(TEk+
zDpn+Spd9ahDeTt3;#}zzoi&BJ=C1Wi4xvm`zJ^`Lk%B{pOTl%9Kn=tFbVT2F2Xf5_
zuV-f#by^uow9?prp%W(2+%6D-^TKG(ytRne8N+{yu;aK#*G+*H2!SWY)HHuDJF~qC
zQFbcDxG?pDMJa|E(gyKW$v`v05cw96qYcS}<9=Wo9|r9f(b!_#mAemQvc*(G0Dl=V
zIm)TkLMEi`K5-a8_sM at I;`0l8KUXq#xGpFrvK}ul(@Yy=R8oZoD&nP0=E+F}1ZGe0
zC?+;jYY}<kNvtEAAdko at cVvI>x5#Ph<qNi1BEnrBB3JK(`cUHx69-4|c1_=T<i%=x
znH!R<j#UE0(yB?i6X>tLUoKVzt2vB&NIJ$C4n|?){F=?Biu4y$lx}e*MTnWpUZZ*C
z${1z64TkPDz+7TEtZ`b)mSH6oa<UZt*E#sQEBjwpemcn1gfEl93G;v0c&Q`TcEo3h
zHDWIRW0os;^TUDm?AFupoVUYwn3E~=UY2WsF-`CzLorckk1lE2;sJ+fT0~k5p<#*@
zyyq&%w2a at 0u2<IehxwoZld=CbP36a5X*x-bP#aLW4p80~6NSaFUk|aACAcEpT8S)3
zm>O9Z-JW>{YPt>oTPc56+0bj0C>3qT02kSh!bUznIeEvdkS6={0^9RlAbQ&BQxmZG
z>W9*r{so4+u}9*=|NmG1{xL$>MTYF4SdnR}EHue8;=7ql<4~(Amw{huVx><RS5*XF
zM2L3<0to&z|NK9R$eAq(^Og_1GP_HdI)TUGLw9%?VH_=q+3|m)x+#I1>u;~MiAd^{
zOqY0GO%_4hxz?GmH%B4;pGdnhpEmkH#*bO!$M#`(c#D0ANE6<8Mc-kQiSj$&|57ro
zX%ps##cqolW+0}*>>aGT87nr&;0_sIY5vg=y>AEN at T%9eRDARuk8yBh-9%0b4)Ei}
zzDLLG0^Y3X%i4dL-=(WjL!RzOycVJ-1^vZAy4b+<Rl6hQ`3X|{4V*J<0Y(^Nv4ER0
zU=lVyK8zVRhZzBy8}2LnbWls^t9Exfnxj-w;|b^WGt+9#T4HDMyCH#4<Nx<U<UMGn
zOv_>ou0 at FJa=7yw%trOK(7Yy@{Uje|7Q9((%5urz&e(rEN{Nq`xoQ4S8FnB|PyP at f
zJ+l*ieis_xjo9kkv!C1zURrmzFZJ<tRqc8QjrMnIKg(-Gc3JJX8gnD}bcl9}5rro{
z4QSo>ZoKQU2n8Ef0d8QvS*eWMHUI4wCOihog-QW`j_^mv&=$l2PDS)u%ZcazA3&_q
zU?zbiCa8ZZnojN1jXOq9NHvfWD+2)wO;XUXh8 at Fb_YH{dThj<TnF5}%7${bdO8q-Q
zObV_p{Pm}>Nja_=`6b!<Y{n6R!STf+$<3<`j)wS-1Q-GUT!pjcA3<s6Picec4g_dr
z127CkXN5Y+{qdvaj81sMW at U)T{69c){7+*bR_cFP=}e&EK(};fGzXF8S`<BNQ~>Rb
zHieDoD_b!0SwYfUv46X;CJu`|$<st~e!!~W7=krC`tC~=a}Rv=VuTnbHKnPLHv)FK
zp3Rz|&Po}Y0^?Ztp+kA&ZPE{8=kz=J(Ys%iwj+6{DNB*Bc0HLMTs1Td2$5;kZw at 5f
zq&0u%!6dqQzrG)o2lIU{(=kMkeXpdA*Dr=vk;Z$}xec+H+bHKdk9RI({Wn-A=w1a3
zzCyGo3?w*=h?Jz>+f^=S;|(Kc*4XwWf%hqvCKBCX%74b;v&8aAVxdWu(W-qB;LWcp
zNSB8j8x}RkpZiN`WLAmN`Ucz1mxNtDI%a>W4i?wQvYkD7aw)wNns~cfV!n*_OtyAP
z*|>d1X9u!rsXch-tt#)*0`kJLPGn*10QtJWU%U*bKkb~tM5kVJi at aVC3=kO+lr-HY
zno#0BW!k~-eFfCi+p~Nv0^{FJYr%QYt7IIz6E1V~|AuH5H#r~H4zN_sz4aiUk?((|
z^wPL66OebrKps6_x)>_%&mj)?Zzi1d^02%!rpYJxeeG at pC#7H4e4gl`dB<m^S=1}{
z$*pTVgYM;6Jb+F|l#xb1w0R?uX8bB4CXSO8U<6QCF<@EtDB<<7oyX+fSTfIN3pP)E
zO(?=^x#LQgb3)S)ZRGXueMBsP;Aem1Ymf^;R!@Gjm<+cP+$g8BtdM{Q-8W;P1l%z^
z(KB5h8R$OLwztS3tZLqWf~7QGCe*y`M<q3XkM=}G1{gc{k=EFdMgMWAU~W*Q at +(BQ
z&aoln+U#z-!t$Vo at RU0q_ifAn%O>_!hdNd-Ao1_V#P*S)q6d*^c~&soKwN+DxA@|U
z(_Yzy{q7${);+tT2#J8C0LO6`T)@yC48rQA>)3?nK7UAmv618mahL60 at cv}vQ0o_*
z967Dmj5twLr50u3lC~TZYRQ}w!qg at R?~^eAA913jN*2+}U`;rOL}G(6e`aydg+cSs
zG}yf|0<2YZ4tTJU^ekd!-ROVDUBX}UZs}v>qMp!I4<s#8UUy%-0*cp8JJ}o?6!ZP%
zzRsvQVsrsFvzWVg+cCenU+!MhYv{TLW{f+(e))JeV?X3!P+c~}zCpmbpb*g;Y_GC8
zV*72UOTTUJ(=HL{<Ng379%{iXa>+z$x27P18k}jxFm1`auWW@^wKjikY(3^(BJ4 at 9
z8nMV=-7*Bj8&gM{U at C!8dfGK<!*M9 at RB0LuC}K&9%qBcG)qY|fY~+|bnxlQf7emS_
z(0^}Tc$Z*5$h614?Ljg-4XHxme}JcFsD3<e+%^mcuMO|o#<|GiZP^B`{`UU;?}?Q|
zmShFQ&>`~D%ImtqoaBEA8OuiCAM9loN{Tx at FKQ#pC5~CHOHQ?JOC|?>*{elGaIVe`
z0!vRx(D(uRz);zM?zIhFN^t6i>kB)q-$3OK8|H6KIpUZzy77pwplPb2aVPY^NDG42
z!8~Qv6d2BcyWUI(P-f$LKT<-jO()suMQ4B~^cFEvLgKZj<f?!E-ypP!O5o(760Cgl
zeFRm1f$eK0H0ERE$fOM}4meoquD>?y+<wZ8>))B@$dH9n6G6eD(|Q4NT`5%jUb5FH
z&<@;*hC^VNWW7>U$(d(#95g14fEah3H6h)eUd0t+WCk8F9vrwyH*b09pR2o(*qi)M
z5~=rHcuTPb_91^ZerM57TA97CTt$I@?{u<Fvg+F-yG?=Lv&{vhr+87rC=%qfvlU*(
ztr#&bI0Oi<+5?Ag(RuELri$|Z$#V_u#bF0{wn1ny7rVP%?P-Z`SPuTZ@<eWdcE=(n
z at T%c>JWXd?MM3Tl at XJq*y+N`3YdpZtD|CxjuC7%qI3|A$8$Pb*>tzKPb5 at LZpPUHk
z7y7H*U7OTrGPwHj7I}6|a3MqdCZHYWOxhw)1R1-U;*M~$<1b=WZ;mXjzmC*oxzj9r
zdFt at wxXTw+=01n$Ox-F>y8#fOS^vTt<qQe<8aIIBcqbv;4?IkMxOmNY1lxfo!*I;7
zq5`TY0SJHgV~8$y-th*f5WzA}9wUMvC7Qf=2KWdPM|E?_j0(PkML98kg5@`DX=r*8
zowNeH6+~BnUL at A*72<ft&(+uoSu01xuVvH&&+l=62weH|r;#LC1XYwd7<srvTdJoT
zHjZ$W_8QqZ7(f6}x*H;R2=Kp#liiMuQ58Y&g~)$xsD!s?cZG<R7iD at 7xrH15NZ?gl
zq=&sOkmW`H^p>QzQo$J2|8H*y3>Jqntn9#^yMzw|Nk>LbPGgPOU=1U8fzpk60sM|;
zZ1lJMCCK<qIqSQnRPUuDY3_QMzKj?Apbcs5jpHA*4or{ClZ5`;nCx0LcU8xO_Mt#M
zd0>D0MTsRaVn9b5O?|C<)peGwbT-n~XZjg*_s2zZ1NoeOB#Iuo8iqFHCYXDJ0HCD}
zPi$cyBd;stfjon?(~Vg9J042KXR7zS2{_mcLUHZ&0yY}yo(aU3-8_;~^5b^=G*2th
z-tll1)Z6YFOk!S0>@eMkfCqX<c=@W*xfXx%ryQvJnO4$AVPhRfq%3rg%k$k2y*rp3
zRJc?v+o==Idh~Z0F}uYt%zZNwxPxJ;z0iTT7KWPv?^e(5JF$0JZ^Op5&kMsz$jxR1
zy(wVn04J65;R2q;qBDJq2)<KTAyuCJW<uJZf&l!XkTF3ZCAP_Z@()GH at LHkFFaCd6
z=qR<ur_Lgu4DO`NI3<C+Q&fQje6ke{mS6cgj+%IT$*7$I`2dw*)rFW(mGO)^GmRG>
zi<d6&L{!~5Hsuxl!v$f^#{w`$FSck6-`T?$=a6_<kPvGr?$&-xE~0{$ovp(-O=RWl
zsf2elUD<_q at jz~BhSsHIbN=si9RYvf+zTG=ByGDO*i~KBdwh`J4^T!<`E|;wZ2Xf{
zCYUFm{MkxpZ6TKeKujMA05tkQEz&Ve^t1b5#@gw&BCxzO^LYOVs?xfYeiJED^+CM<
zL34VgmqAB{|8#r6)7}i&qTN{+$`6q8;w$JVg=@G{9_daq%B9Q at 4rmyJF!g_il;=g`
zH8odolzCJnXu at g!ZVi2`jOnylZiK}(T$ax-L5z&+&|~~n)`GBIxiBu}{Vpl?ON7HF
zQ2KF>w(u?r*%zBA&1^qTmUI+2yA5jEsH&u>v20g=6j8uaEj3#To$)0r75))C<x(bQ
zA7wpNKRw8eu_Mm?II;u&I`@B}RwjA7Hu7(iskFj!{1~a+f_)gtNCfGgmUyRc!0KCC
z&PS5>_9&Vm=#Q!`GUAmxLtxOc5d(FTXGd5=UDp}>@G(pqb0w(!uh0}lTX`I^%W%Q;
ze_XE?Z$aFJiAkc{Lpzn;GCHf@?C5`c!mgp0YB~k5i=dM>8la`2PM?3b2&q^fAb~G0
zF4UMGbIJ6z$l~Iz#RR+pdOTd-=aWl($jQytf>!q=VL_u2%&{AVIBWJxi6USDFra3N
zfELj-gb_~bfSWkc9TEJPPSlTLaHMrESa)fH8Zkx-)Il6_EW74cCZ$Iv1t at sLwB(bP
z4L5$Li#eiZ0Hz at drUidNh95}%#~(F$ac8*p%G#q5&NUDeexBi4;yQaugL)#0BiVb@
zC}rFXo*!O4o;=-04ilnw(h*|5ogOQH1%~L&G3NYFT7k~$<Nlu=|A?04+Q^#>00Z_l
zJ-i5P%2TG6Qt(AOEYKH#V3ql-$A>e>rQ8vY^{U8h at dg)kW8!~ZhElIjR?>Hk$r$Ze
znRp&_j86Ajgv;<MZW!yL?5o3e^J;iPim76=4mOl#UnAv0BB>i=T4X@;rMtF7)ye3+
z<t8xJ()Wt?X#LFwFzEn5()wbDf^;pL7k(88ZhN%}ExN!*iGQmc4y=Ua*>V2?(eRIL
zvOe<cL5T^*FvWk%_EX}B{g(~w5+f+6`}M6hTjN?)3?5^Ha#8Woii8Iz>fqXFnX0ZL
z2pj=mvy<p(-F8BEb0Ri7H3FBoE)`w-M45>vaGWn*mKY~7JFkrMI}TE&4~jK(kw!+<
z!VRe*)W%KmIci&GkXY+o{kk81Ey$D}d2%IAS$6W!)Np^H*L<5N%M?IK2as5g6$^=k
z(L|T~c`-$_A!Tks8cLumGjG*@CydK_L7+iefgiAtLgMlOwnE1&@xATx4R$&(u2rbO
z#9Jxl>lJFQoUI(EoTW5lrM>XQtI$avZ6maEQrH*YP0dmj84O0IsU9ehuOj{8GZ{Eq
zfAs8Ax$}QuCZGRg1PyQVK*+PuS(?oS7C?g<ky!%ZuudaK%v1d9*6dyadrQ|L*LdB^
zS!v+26)s6p?yd;DKR|<3J$4 at Y?AJ9%VLL2yinj*&AJK;gE92O^TEQ^ZoHV5|Z39az
ze*6LH0qt#honRAFEtf0pEXPvT{0R)kuj$cj;6r~=Da4*U=JuG;09!1r_)+Z_7^a!^
z5(;2wl^(9pAI0|<{4ocyF6p#Szuo*?l;Hrzho`$N?}MM=!<oQ7*9KHw8Fby4$H%}%
z`TH)%5RA44D*FYQ5Z^_XUteg_1S`WX?*#I(HrxwtwvO)&l`9l192U1t5)<T&(7Um)
zCzpTdJO6P}E}7Hyq5GF<Q<d19-bB3UQr-len0t7@*bhvmKQAceQx5fZjgLXMVXspr
zKSg?eKGt11t`1Wh5^xFB_%FhGu&Uwqf?hMrgo*GEJ{|(oKGzYI)(q=|ca0~O2LC&s
zH7VLNXg5L%#P}+pWLUEIR$a2Ir4;JMNK=2OJBPzvI5g<Gj4e+U+ZdK_|L4 at HSM(Nw
z)cF-G at e@Cn-M{2qRTE;|QZKa5(Cc`;&qwbxG#$j%9LHV^%AM3uF#~fYqo>6Un7rm)
zpuN%a7yhmLU?T3-Ud-Lt%Gu4b*@aAtQ%u6xZAw?u=EKP9>r0Ij($KfRtGf2n0m*;y
zY%`TjIFt?NUSmrgN5K9~<6z_$S2B*?W|VCReewvrt2Fuun|f-y=R`YIDRc!m-FgjH
z<S4y^)OP0HBVqPI_~O&}!Rg#)Q>85K7jKhAUEeQobuP;6uE@{l)_1qaj}+5|xL_3d
zDGMN~UlsqECOj2;5U2~Kc%ba5odJJkn21wK&>B-~274{dUC|)p9#=FE%vbLAEGu__
z*}8~PEHgViUbue0NT?`h00&w<pPjXR+ogyDJ%9%WM_k=5Y&GW}0tL`@4Xb<5)J~cy
zW$Ip%GM(-15ByIsEC<1R;G%OcuxO%cwD2#&9;Kaf{3}Jg&N92a@?=I}evy9){cDzi
z&$npslv^B3k4Y?x7J(soK8~LuGdd|YjSl!H2gdEG7mZ|KbX5o}(<1YlWKMqndIFGF
zWIhiyXE>nCghH7{%EYh at ynY*${j~Wdw!+-ZL&*^D6Sk!3ZN6r_X~jynzhoTRwx;~9
zcp-)e0t_Mtsf%kEy_IPYUx0s78oz$s6K4&Y4hlY9N&BCTyAc?A+DRiF^7&hlY_x6J
zQa$~BilMsG(5XLRo#iy<g<z|-SsCLl0yEW-TD4_g#WP_bpHrohvd|k!3azq|M~i__
zk?7esRnBNlzZrH?e~ve<(9Jl|muO2?DaWI%6cu~cbpqMmRV48>ln;MvbebJD8Zd<<
zGM8)xO~o at izYk%czKD9vAgAK_El&4=1!_YYnl#iB4lZ*sT^>}5LxonifzDrRs!J(J
zQiKz$+NYNPlFROAz3f1`BU2CU6ccI`MqK3Y$S<~2*Dm4PVw-@?u at _@On7ar8NQB-m
zjO}?4HjqCWUxVdbDFc7AZCek{MCx}L&&@rsWmi|p!oiRaUS<bR06;{x`TbwKoIu`-
z97HzG2u0=Hp#yFF+nP37*UOWSQcX2<v`7^+T0fQR%^s=)MV8cn7L%d6(*XO(B(`6J
z(yUE%E^eUT3lLCxrTsll&sl?d2HdP-+-GpD(2s=76g<sbRZ)Lua*TLzxCEM7tfe-P
z0#PLjWvNa~yy#mRpTh)9rs(Huxtsfnt|OtP2w5bKkg}D*h`ZzS8C;8hz4M`1n>0?A
z%3 at 1Mo#PTSnUEtPp}RFn)=iZk#C0p>Vd#>0Y?qTcGOG-19|;?4k{>bY#SrR-2SR>^
z2keZe)x- at V{pNonwO`((@NVw8Z6dRk_+918*k9Sl-v at a%T*Z=e1GE>L5QSDql8=|A
z{xi1bS5X+;TFIt-1 at VSKxIEhL-UDhodPee-U9f$ivm&fl&|=(?J04U2Eb*aBfeTAI
zJ$zJ8LO;EkxIJJI=k(8n&ye_axzFrLN_FS$D=RL8&RT!Ey}Dzmm?72eZWApqtd_mA
zmH_HI<nHa--emA%^P&^LbpG!^V{{M1$W~a+-SiuG at 0yop2gmgGt-GuU+LIzcGAqRW
z)JB*pr{|iC>Nc?~d`O8U0)mf38nx54>}D2TUd!+7sdayN$-$P&;{k`#HGy{uUyF^y
zsf~={-7|mCWxdv`=tC>YZz8zbx<_h%CvUkP-+u+TE-qzj1iUmNGbZ1!mx>zrHoT*R
z&bU&Y at V+WcVrqVG!yQ#)>=VIfK>d8+^%Q&|y^O at b=Vegt>XOAdUQ6#SRW(SD6?cul
z9sb~k>m+UZKn$TEADTvBi_vwLETDoL*?%h4(j9+h_8;;nF;@1jh<?^e_ak)o^ntAK
zDmb&d;$H2$5X$#8-W$v|K1}!^tyl&Ty*-`n1WTY2E-lM8Gdv}R9u&K&YoN9RozTUL
z at g1KubbNHc_Ai(M0KF)-O}RXBmRMzObB at 4)&p3=3l&IK-+<Pb8&Gjlt#<u#*Vw?#K
zOzVF>v1>W_fxkzX#~E#ih!=_cP!oxjA9mWsnXVv=?hA}C_9%ZBzovd>3cz_c`c2~L
zaByMK{rY&`>q~`@j#0&VyqVf*pNYH+*fMcS&d5CDGg-gf?N?0e_?PgDBMY;FLV+~8
zQ4MwRCJ%CY)@s*=lNHlYBXU#k_oNtVwpD-NC}zwx(gaom4vzW|26hqEfe*#E at 3)6N
zS=e>PD3Cox%w5f>ro&jUL1>xWEn!|Zt;4Lk#lBTSD1B9!b+)G=72W#&Bv#`XA2b!P
zu}Q02(0)q0^qm$}4oSCIskHaM7y7(xa^$wXysU8j#Oc?P4?b#3)$|WE#Fk{(s||nE
z#GPSv9!?Sj6XJ$WdIXYp?SuMT#R+YIqL2VRZMhe>^PWPx6khkmAKwk$V+3bP9zm|&
zw75{eT2lo)e+ab)TxCFAMy{5NrmJi-ynW9vkZjn&2)>(PZ^LP>usFk=G18Hg<@Kd>
zuPIz%lr|``%WG$5_VCz^(a(d%^gDlDq at 3M`PQ9?s?=8$FnaUfn7z>>FylMS=d3y+|
zxsn~|ghu|ctdlL~<d`6Txc$L^cHV~(gv2U;QK$9Ui8_Y#w%^;?soyoOZ~>Bc3$iPr
z8Vp>gY4mM3(Wwh+5AO2RFLe6%UQ#%>fMJpLvXq3=C<V-tkTN<@I)r4R35<U`97Jpd
z1_))@Qr=BPU>}`4c&NEm|Cn2w-`<Sf4W-dR<PrH8oQ|~VbGZ-BI2XfcM{w!H_nMqb
zq`X$$g~mgJ?!UU!Zu9@)yZZdTgYCy4UO8jNkX&_8*tzBlwT?QpzzmV>C%J#2pFt(~
z<Sj^)*Y=xePGUzp6!0u=V_|>Vm>YOgWPYf%T9U`@pk$SrI7=T%XhF;RPYJ^$0)p5j
ziTUOT<0cPg at hrk^_qwpj2N>tGmSPAXciK71v`B)(CpBa(12{hZjaeg8EXd<^tf*JN
zH6l|ves+S{i42<Z-O4aCOV&NPbX`L6Xreo>PTE<`uJ_+3u0i{BO6PxPGd4P+-1kvW
zvM}}f!f9So>;DDo{;4NzF?$wQKN!zRPM`MCMP-5mnwK5~Mlli(IOEH{&-#Xewm9J<
z*(zz6-|5swNB54B|0qQW3u%pED7xl-<JSDT<W=GF2%$Ro|He;+B6Y$5BR|}B_RMY8
z(r2)9Bxcc%CrDswim`uS4oQvU0s!=oO}4iyE2$Lf(<GWGz7vH5uqhxrk?$CVwL at 0a
z1q)_(f;szpu1q?CEWVp;a_;Fi+Yw)o;l>dxm!ua^bWE)|3o~*CG14(91mLw7<b7EG
zf{7jE`o at P4xMB{%8h?LdE~o+G0s=QNmQLt5dlLum6jp%9rGkGd*NrGPM5QJG!`r4{
zn|Lda2U3h9!|^a-xw+K*vbC2Z#t-et6wy{lBlS3;*GV!eq_cj&9V%)uiZE#~@SMRK
zyklVXcOu=U4Qp;1et_)DA{FS-Xxdcd<}|cH3XO+mC0K%kyE#VI6zovlegGH%x~0lc
zEp-#!>hAUaYvg~9?7D>PH3KeypvW8O{H8x(5!n5?yg5>rIesScb^oC{I@!xLhrT$0
zascTH-2i3B*Lh+S at PkK0Pk89k3!qj7+cQ8~zELZ>zPp at M%ROboHj1 at l&5P>8w+-N5
zA#fSN*%_DhI{mT~Z|WVaJGCb)Qu?VZC-Mw_eZ*}T_bGpwKJ&Y?S+RPv+xLgrksoMf
ztS_tNc~_9N%$%I&!wVBBk<s4&#b;C4WBfG$ndu{x2r_Gk5(ijtFc&qbelcGw4#>q=
z>}zhN_5Z_Qw4EeBLa!TIc9l5dVQRA at 2{|%ADi^RL!l0)g?gg?`cEnkDr+e=*LskQ7
z1LMU!8i;=__#SebQe?Y+v(HG2#)pd0gS6H<sc|&<ErRKEBB5(`v$?ch`Je4>`{x!f
zL!byyH<$UTdyq{IOaCNn!w-edvxbFRY#-%`M;!FGnN4i%+!O&ldl==Ex-nk9<Sw;D
z6d3YviAs*2HJVP<qk<%$sAVVemP#XEw;)Q=q>6uTNl~>$5NOYqtKt(&4_l&mF+)Q%
z6U#^-o-YYM!MO8Lq7z5kZ71?&2bbf0lkatE2DM`z$(Bq8p8OqH-xUmvn at k;)X|^~i
zkaz-Cv19|AH-lVjxhLRrV&p4R=nM_4ef2HjoCVQT72pe&(dWtpwnp;h{R?$o?$cXs
zc at BS$)$#L9mmqCq;37EPXI)biQ6W*o$qgEY+!kwzsYL}qasZUWfgP2|$PE0S1m9o}
zX$yYCnlUgj=7>>=F2hvMQJ4JKu2*xNC%rZ`ubqxPRyb}-WMr~IVJl&%4Ith*OTJ5!
zb_o}J;6Nfi5rHdK6&c;Ul5r|sY#1VIS37_IC+VfM;eN1wrFW1i#8cvH>`eW2^fHq{
zsORzrN5Bhhw!5n#sBV02$=8p4 at uNjk|4q_3mCj9-?pN?01a8`x&C!(4e<D7&7N_m|
zU~Fxuhkh9^wst^{)3kLJ&DX_}o=y91g7<6Kk81NygodKlJhhSr?_6Ohi59`rVQ7D3
zE0+?TDNpw2&0~J87yrQ<n at W`rt(=36&)gc?p_yYxrmD;9n_70GQSPZ&tQZxbxG_&I
zNtJj7N3D2y!*&^WW3Ut^8WVch6KzRN%yyp&wd$El2)|v-9o?Qx5QBe+F1$9BOL%58
zVF$91Ar%i=a%@v!RqfzqJ|pX_j at Exa#4T$GT^$@e271HQ6%dWQ(<|y(2Dmw}&30<)
zn&7D7?=9}DN_gpt@=Z7=Uc0-)(oCg-%_iivt{{4-CevWC;2{;^D~0n!FPw#an)X?v
zr(Z4AsfRaK*HR72o7~?3o8pOj=7ob}npk4DMrzXq*Rn3!LuV+={1CG26`+598=~`r
zsjDQX9w)7|PD&~b?7ukrRTG6EG9zGik{V(;N}2w#edM2!tf80JMt(?p!ZP~IQqu7q
z7w$sCu<#2zDVJPR!-Pj)ST at V)&0F_dFAjO;p&ER>E1uiR^}rdV7(I1&%LCZty{nX0
zBG;m-(<<7uXs`&SJ5pvL;b?y|f{}#QQF8t56|0pX2;&eS@)^H1QVCuf7|){`KM{Xp
z+~k|Da}ZFMFY=%-k(#O+CT`)|T>`-nCyAU;|1&GHS(J#}!{Vh4-+WNpPWUdr$Sju!
zX(<!Q{T3+Le`S^bn%4Cvrly1}w^rnlQnVPEUFck0V+ANYja6H$Fo}O_Ms1=;jj0He
z;7klp3SaQz5>rzRf&_BIxa+t|H2`CGh0kE3A;K(Ghewk^Yz<^W4ebAl1bR at X$g*&&
z3UB{MgUkFZR<{&H5q;craV30 at TAR#CZJ`Nsp$_g9zFIHwRyOfl$wIf(Bus+DTnHzh
z6?Huv`}VW*zw<EFX!?Ig<vSB?`+iOK%0Wws?&xcTXXuebzR6L@%~n_6izTug`<gT6
z35$@nd)e)e3I(Hlk4eQ<%5X#;3C0A(5;}46`*9${&t>9mu0&tCvD;W_EJ!${<*hV+
zQaY%C?i~ENW0DTU=3X?od^A^d<ES-`3gkw^h9;-upbQ_pmbZVPP%yMrR3Ha6Cl!Ub
z;W>S}w!f+{)%nxG5m;vu%jn8UR46i%6f<u=?J6b<#qO1RP4iElXLt4oy1?24d=+*n
z=y at 6?Z1lLanREqTZNIA%rnTANnk24V!l8?A&z8dTQOyGt8xS#VQY;r6#JGQ>1BdDZ
zWQRUG-!^oO%Z7h?wKJ0{F&<l~LL&sSe>MD~&LCK=6eT?FWY~Yz`M>P;O)h}G8 at v6=
zXE_D!#;eSWVLX0qxUJJU)yHZr>=#s!!G9s;_gO6(qQ;WJ_|OLPcQ$aY0RgzXr=&Gc
z1`4K}4hvyXmvPYUf+oW}0M`ACNALWg;;UXb3JCt|FPMJ|?{pP}_AREUvxnrhbm(nO
zxhS}xZ$88xxe;(|<n#$8bS8Qu0kz+O{58M#cB`Y_9j*d4A0XAy1HVbV6B<>QWhV=;
z4UDDZz^fz(H1HaJ0+k>4E3a1Rf6z23XpmyF=oPr4*e3n~*s^uL&*_BR2l9(N(2-C>
zU)82~LWX}RXxn`M?lg at Fh|7^RTv~s$#Slti<~;t+<El|R#&k+vj*<t!CGvcoY{$NB
z@!XIiYq^T1S#uYdG6#Lc2Ml{tZ6Y;lSTkwx&}-UP&)s-Nwr#qOvjhfK7C10J&Pa1S
zdCjS0fU4-;m7_FDEPs@<*%Rzw!ic~SoCE?oyP1D!!p&!gmaH0LCXA<CCk}BbK6V);
zhAw%)Ym-kAD8MHzX*#M?y8xZ?inybqqEM2V_Az*u+IZSV;*<Ekv%j(zgtq+jWlaK2
z9Q1qDODPElllf)-ib(;ng3ctKH}3YoB$}DLSz<)$zs;nTuOfVJTz*2~D~vG;?s*R{
z$nk&0Vo#=A64x*x-Pd({H+S`*n&Gw^1R_a#DD6+Sv;g;uC&?6R>mbwcx=bOLEPHd|
z-sCJ_ZLg%;mXY)%R at Oqz3QH;W-E9P8EREdmuDvSL^O=hlemD;8!Dt at rg+JY*4;6cv
z at LB=}J)dXixIoE8k6V8-OZJ}k{xPJWmt%kF(AFPd%Y3JMOX!3;HjqQ>9OCm902)G*
z^_2p_B(i!}iJ|$jaC7hULR~IQc>ct1r|XZAa;J(a6V%t}PJ|!5ql%vU76L~MO<1Ym
zkMEPcY&yIfQ3RflZ#g>Km_dSuc}u36_8D5NW-y~KX)dhh#j`(ZhUjFhau!WISipa<
zw)81qRgj at Sx7>>TIlgUShwL|l;a(deKA6~p#%7Fm<6;pTjbM{FS at 3Ye!Y2UYfu8Oj
zclHRe_47}WJjMJv>rfi}qSVqhLNIIo!GSvZf1HjVTaY)^fK#k)Kp<0}(6c&@cNfPg
z#m1sReu2Yor56P41IB%zkVg$7%}sw at x;AhL5tuMhpc5lvbquv84pXmvm{T++dE9W+
zm+`Jbh_%&XHX=CS4I{}So at gJg7nvAk{cwo(z%L$m3cZ2<y=I5SdpAX&jg1zQ0zP=n
zF`8<34?ALBF5SE-ISPn${2gw>nG71tTm#_7NbziHg=nDOG?qeHMjGkLpxu9Xj-&wF
z+J9C#6m^sRhYKZ^qnsS%kqzS)omNL>A=GQ<TqNS)I*PIV01)^ZE80mh+HS&0=Ffp+
zcdJITo=18DHz;Ua0faOB4F!_D0!!td6-jvp!UiL>5+#vh(T at 7R{m!Gp9HQ&|n&V((
zys(_oF8bL|!@OAHRxynk$hChc2(j?@j)yyvC!dAy`Q7$|F+Vk`VpcEeC}FIuo1)aI
zTs?VQWByh=a*#@h5aKSm-WK)!6T=vW^OLr~gtkh5QrF|7iyj9cOK0Ktcxf{5^xQGJ
z;;09xmN5}g2=q{S3&kQe=j;x4dx3iZs=));pj;`E3`*VaZN1Omz#4z^+WgdG%iA|1
zo@)NiiPrKAlQXMW(Q#M-SLJx+!!4;4_PbGJ<+?OcS4_W0zQ7WOoP$H9C5YEtG%$-}
ze=S28vf=}2(astz2~Oa(rc}=S)nKCXxlRnQ){xFXRphEDg&KGi(I|q^MfGCtsBa!>
zTesKenbQQLRf}ljFF=1MN3}r{E?QtcA|yvU-B5YFP77d(I-T8hV`PS&Mf>!y`$sBt
z*lCVKFd{Ep(1B!h{XihY at X9X1U=nV7 at 5NjGj!jAa$JqS3xO}>rcY7I~-pU81g(@KL
zTle1KsKY&Q|GT=p at y$xSP;|cG at cXeeWOI^_obbDqJpgv`(0+feppuCK4|!>24Phe`
zq<`7U>&7VR8t{%7jv!q at i&<=k(qJ4g)(Sn7$+74Wj1^0P-H5TyjeB922`L>c(}$N5
zIkd~5zy>=|M{~VYZ61mX5#~J_e#+BxZ0fSe3bRJ&0A=%9wRC2E+XP<?j8l4$OPUc=
zx1ZoWP<qtw&{2OO&}&vISohJ|ys~@F>-3ySfz$9Pd!->5ByLQt_h8ZJapGMc${cqj
zgk*{zFc4rhra6gYycI({j<-ZLT?d0x!t4fVuz?CT9VT#YYRij2k#4fNn+7dEZJExA
z-Y{J+Rr;b+{SAice at OSYzvat+75Mh)(2}tm??M7H;2eJ!2ir}VyTKf+*IkHwqhYx8
zAW;47ssI4Y<iHHQj5t13Hs2DW0cK9AH$SIGm_TAW+%+jei&*iht|y!l42h_x?U|Nw
zwJ;lO;G1R_AK|boix)di4x*e9PqtkI6TH!$B2Hx>MHV1;TzDO>o%nN_;NQ6Sj4{L1
z%`DF(PW*on7^C5UwgObj_W4iLbrHLMLVCuBilfE4JFKh;rRlDt`I1Xm?HC=vbLOHi
z*o0iogd!s}V{F7G!LR+hZ?%4C<^{JRwW#;uoPbnmez!6_8JdNEDQO)7quvdWk)=a0
z^4*kla%%4&pF8X#!GsUM3(f4TyeRykmbh{AxrBdQe9H&b-M_Vtz{@97YUAHG5#T)a
zmj&BZJP|Mk_uxiqo0R1IWESs>1e8{#rwS3*l*DN^eM)M<p+<r`$M(aZv2`3qHQ_u2
zDpv)m?`>YoI+XWRWX2?hbbOE>dpll!+T$A*rmkaXQ*F~xC4%$)Mhd4yWFzY$a?2m(
zp9p`=;BC`Bk@!@hCn8@#*KL8V1OjP3K)0oL{)+qseJyvGnER^{q~H>BgyWO>Toh8Y
z_RMJ)rb|;9g_jW}QBBdTv6hjXfRrs|1+?IEPGF2MC3PQN;Wb?~dP{VNSq3#n5j1Hq
zQHlHIQLld~!)Spq28r$D(a`>Mhr8Ho;OTz}EtX<}s3cPCPjhd(gK&oMziEhB=rq*$
z2hxPYj1IjVXY_+6fr8!(vaG)N<)&@m<uCYl7QL=qu328d(y2xY!WANOn3}n{j!$sc
z^Y-H+^O5G7qiYd!I;`v`cuGF-StTBXT|VHjBO%^Lbta5p*Xrq8nCgrO0>~#zT~L2<
zT#M=Y{si@&C|+FwSqxV_n-awm{IvzDnBxMtls3twY96<{!+C1pYPfMt!{m}H)@ihB
zygEk91RPX5)Rhwq37BF#5U at uq5_}ULDl<r-FV2;!ZX!WF2zLCQR6}^GH_sr2E`E&4
z#oC7e*TV+YzMHkzmVC~s)HIF|dnbQ@;iD at wDRH=T=4ve_hI<DMln<(;tsc{Ex1ile
zAsyy|m1?k^e80vJN}c4!xdv77r1{P2bD6 at X8<FP^3MspyvU{m(b<Wwu|4^{pRAs}c
zO1CL8QG at M!wnxUzt^lO;dpq!)Ayk54_&!V~X!hZ7o}V^smR$TZevoIIWXpeyrtgOP
zT6(j;qxxlzSN-peLcX`Iii7rFT0F=Su)aH{KjT$IRHn>FBkawdPm`k(Tppz_D|g+I
zp at 2%K7oFQ<#~NuA0ayZIXe7Irt+3(GEqkr- at NJ^E6x;FL{UuuJwG4LLYWr*XozQ|H
zjH98y471bSd(Hi!Kw5<th&X>PvTgt|VEo)%*TNKP1*HbJFXM(LlG7fUL?sFPn|RBb
zwAPqsHBKN2yj#H4fv8BKe8nqig7;Y-b6&YgoBY!2G!yl0j;c;3pEG?2D!I-T9B;}p
zI0$v25M$Y3o7vm6pI^}(0mP>S?F}sVF|wmV!L_>ymIf=+OK}}mANGGA4iU!QZU4a^
z+ at t+KcO-pX#^`IPz>CwdRFDjO=p#S~#A6U=0YfFsuez-Ki`yTJex(FJ$PtbYM^9<H
z>l7k2ogR3`sEEoG|Kjh>-~GC51Ck-m=4PLQjJ5dmSz)Bmg299fVUT)u<{B5>8PT6E
zj{7y7H`4a(ie~UyJllU?K)8a&hq}z<EyJpXbvD6cU>n3dQP#RVO8yd30jPL;%Bhod
zVvKI#)CHA%tShjT4<gUwF>mXqeBYG)39^|)rlM;!2cXr!O(*>t2rDZ<NE2mDtIIqQ
zs&Z^mT<A6wF5ufXcb51j*ignJF(+excd!>%u&z4YkN>tRh$?@a-Y2^iwPW$=re33k
zh$X{vpJScP3(m6LEPYlT><w&r_5{-CUMektdlHsHY0Ufuwphahy2XwRxIz1}<S%Ls
zk6hM1ioM78RK;(nxv>bLU9TZ#s8|MKRsq!PHKVJvjbk^-hGkY(vA!616 at 5c^<>1*D
za%y*oe^r27j_H46yeJJL?j?!Hy_oCYk@|jLH8vlHDxwL8xFV5ybm{OG7m{SeAtRyX
zSd;fyx)#r98lQBqoFUTTU@|F_MDRP^Z(~D&@p8OWWbe at C?)Sb=R?cy?T_xhBlfFk8
zu6FDEzlTw|HZ~SmOrS)s6tks!^)IN-)UcunKt|Q1+wp&uJQI<uZ-s1e>C<*CalFL*
zhy{)~0lpV1JD6CQCWfR~oIXl+TJ40U^o+%`a40bg^eLHL at _@*CTXB4zLOQ2rI$813
z-mDh1-Qhu5lP at AGfm^xgoy{sr at aoAf*bkUX-}Rrlofky;E|(5JR?$JOrD6N(V|Wld
zf=q`bA_jkoAA0Tdeb#Waa!VAw&y(k)L$}Ww8EpLtw4~pJWRyuQ at m?-+*+=PGYZS2s
z(zRbit`sA$jBP9HE&n`T+gBnPjL0b at B_)ilRiJJF`mSJsue7zOjgGS`$MQxNP%A4Z
zBaL7rDKfY417~H<GHWHl3^1)4<R|lKXla%n(XD at AjLbpw1?Ej0u75&ZkCz*x10uTc
zuY2~&QBv}+RxH0O&`AW=E~;4AlE!h?BkEI3UUQ92FX at _;#NQ{e+y|N^2 at -A>oQr at Z
zn>J`DDZQt{pplUUEJvvT!bNJy6qiH628yj+2+_TpdvRcYoys(o)vF_^42jr$lc32b
z5bS^68N*wmx<dd*X+&1ypo>9!)1KTN!%Ry%MWf3rFahUICjne|qBBJgd#WD_Z|hw-
z5dHp%t!BM(D-c?Z&(3+ed;vrI8&9#8v;J6w3(Q!4L_Cw4aX~d%x at e$Q)8QDLyhp0l
zv~baE>j>~4aKla+QY0*<`y8P~iX(6QIp=?mQ9hg^;a>*Tp|Z54Z-VB}&wkra*=Tt}
zRaHAorky6FybP8B(&FrCL<!;z!wA4d&lHoZ2%tMdCeKt8SUn#<L*cx!M<Cu-Ru<|X
zG~-+)Z%lh(;wCQt#ZXOmdBGi~(ky;w at r`fQq>$oHpJ~P=yHh4CE&48xaTpq|$~u48
zA-!pGIBOpL*kquOMAun}DFL-?N8O1xMdPG&%2weG0(LT;YU?$XovoCv207m?y#sAe
z6}5LFyPc^95jnH%`1X}+j55xK+T7U0aWegm2XaszyyfD4NV*rf#N3G(;M2Nm_*-k&
z<+j*N-sTci#vqx^<3|-|V|KB&F!F!uk@!y$f1WEt1Fg8Nk-Wv*$^<1n(wwlAqswu$
z%^#`S1eC9SW`mu$&)eXwL5V6929r!{Kh21*gK34zZaq1h!#AC&Fk~&@Ys+8ldQ=(I
zb+S(o54})q8RKUG=;Ss?<8*^&(7?UY-y&*&&y;r=3YPt()e1bYY8 at rw<$r&spL&uY
zm3-dAz=g6Gs3h#2rY>ldg_`ZSSy$iCBAb_g&YeGkXOsl`pKww)V-s%6Ec*D<75k5h
z0K8b!+Sn$wk~=Wf{BO+4c;0{93nG4MbrMkc$h?A~PPBa8dnWJwbWj?U#Z*LwBls}d
zY~F%pFO$dgJ>Bj7LwsGR<ClLqQ~os;+8_ml3KpMYY-++BQE2j-Ji|Pfx at d`hJG0SO
zb}T~ZHMFL=7en8;EdSJq8WI!o9(X|)uv{u2>U at U9BV`lMrK|<f2#5Zpd|=f{^8#U+
zFH|eYxbI`n1+9U-li4`-IZTUGc}dJ4QJR1a*Vb7F^^H_2mCRq%a<qTD^9_^@xU~5;
zj8HEELBY1=PT>!Ln$WyCk>KB+$RsUgqII?ruB8*gwGH*SzjrjIzK5a8 at pY=Hv7!+m
z&z8QkHt6a%$KqLLRByr|u$7oHt?K2_At_#eK61 at 2MDqWwntjX|8y!>?j%E!M->se}
zzc*i4|HcJ57I0A6uqb~`oYQBR_aY01e7yw2n4<6v+|(-yDoP&Jw%=$yu3=P2Y^vwP
z5vC1ACdEfzr-uh5aCS}(j>-!>SjW~=WQ at n3kB$6X(AAk4bzJ8JCZ;B{b;={P2ITp^
z)_dkSSfk3Hd^_HY>&O&_fPX;(9yxU^^N8Dknu$Vq=N1BrY14lgnv2;Gc;6`;EtZ1C
z_5lEEG;unEfvAQ<E3mK*`x*rra|9C{>G))h&lN53g at SguykxA6slW>GCAELW;o!sx
z%wrTC3h8=O8z#Eb;{4&}#BU<)R4M|4UsO5n6_0ihbb3q+d;M;2g>sL1&^7<^Ow0=A
ziPHu9p4X&dYt(;(SGt$PB9+q+xglh=bb*g}b5n08MO7D!fwQ%b`I>Xy`>pMx>^oy}
za_6m2Vld>9wXJXLnH97Zefq&xwBgllhk<z~dddjTAkX)uS;GGudU_QnzGv~3!eibi
zNjoQ{0Mb3I at qA@W8p+t|&J|95i!lOV?l6ULqHqfZG{}E6`4BGyz+v;_E7zEFiG*dA
zv%}^OM&jha-<_^$%7~ykT_vds*7@~2Ho~|yTXe4Fz_>(ubePvp2H*8#Xo)NzcD6 at r
zR9OQ3W*+aKN=!QDzmL(d(B~~6oDqgV!Um=C)Kq_fLtJWp<A8F(2x;DGi0LQ%<F&P+
zT^pL?MJRu7y}ZwIeC&$Gk_?F}?8y)+h_#eQ>B)|apBP;FpuEMoEQASQt_(bIYyhmO
zBW9^nP{;1&Xk_nPtb0uo at dy&=`D)~N?p!4$E*H$obx3ArTkD96KWrl7INbqNtM=Nr
z_iw&*?@=8w<n2S~FPMI|5tp|$ns`nB&1^to5FUTm9AvjC0=(eXX-A-_c#dCKaX*8?
zw^f9K{o-bL673vK6Bs1-RVLxMIj at z&J;2YGBzM>^pt63+c#`#K(?s1(;3m#QUH{?Z
z<SW at zNcu?l43$lbWtoHUZSthLwm^vwxr4Bw50zQUiXD6J2#Ig~CtG|TXJe#PeaB^0
zNNaxsli`FbSKq{fr~Rp|(7*6VE$3rl<&z4NKgdM>8VSB2J0lN9&d~8fRg;k@>=E~4
zX5Ql6Vj&+&EYeEr=R55C42!hgPSL`!d6itKR`|KXcnQKSta2hLxae*+d;%U`!i`4(
zCi0t;O3lvX^J$lFaoRA?u`hNw%%?fJtYUvdfq;wS2#{&-mlaiT#QBg;@cxnC at v&AO
z)`1b*qQxMAHYS!;Dh43{9f*njH|w4WyG^UPF`B887I~JC^f}?+PaH+>ZF#%ST1QUj
z5I|A;Um2;rO9}m4%<;N=M9 at E{r526Th<7rRMSf68#`gK!&UmE}pyXK3b`1|ZO4NS@
zvCHBCSEIgH;C*G at fNrwN+A942Z0vCB=5U%^4@>iz;np?^yB5a65LbR^;c-4mS(|d!
zVmGtq*0X>4O$Q>puj^kd1jvsCeC$t~d!W48aNLNtnlxCA{O*u}&8&S;K|wW8`Rz#{
z9T~}xUgD_OfOUmzG*sgw!FGF&q%nWxj(m%mmd*Kn?#^2ksx#`cyMDKt|MYs^HG7q`
zm)$;E_#^CHqqd?;(_6>vJ(1}j9$SZ4xf=NpBsj|Ao+bv(mF81R=^NwoF&Yl~fh|@p
z?g^}-?z3tdZ757P6H^lQ2KI)HEQJR>-)0Rd4u70n=Gbwm at fs!;lF2d>*i3&*FLJ$f
zvEH=cSeXhEj{pargH~iy&<?ZJ$;Ud$2*9-~;?D$QBU9H}*puWzU$LVlm&L-bi+x>7
zh-#a?x#Eg0kxHR`x&~4AB!mzlx~5nawC>PhuQe9H4XJO81q1c|<uTtu+|2PI#Y&Ld
zDZc~Ge-P44 at x5L~3k*?)U6Fs+JC<mq5{XRBI}Hb?p9dJV6*c at P=<R?QfLz^o6XYSb
zYg}-SJ_D7e5q at fR)v+2W`@TG<V2Hd_1$1F(*v1r5J(zn;(KBSupUuio*|VXfZB)H?
z&F9xtq}O)GUL~H^xKnbjJ;&blPPn+MXMn2>!t#c6u3ci}6+~F34i<kW>_p;LY)oG|
zjX8bdi>Jx)Tm0U-BVsu33j`wqTmibsMLUJ+(Y#u$ESqs(k%eoLdj#q{t9-we?JVQM
ztvi8C8O~J1yov|g;n{IE%5&30w%5jzMxl*o(c?ro+k=#@*y46s&zfRx0ozYO=reYg
zTSIW9Dak at SJom{0Y2bg?R at nK-Ycfn(k#Upcn-p5#B(&k`mu at 32zk$Om6JS5-UgfVm
z0)lA>2Y8^u at y`U{txm#+LB1%BttT|3>#!zZzrutUH5%j=p!`r!9`V6c$fnxyZF_P{
z<UM5<Vz%IBi(C#v)O+3q+W9dF(!ASH&X)j33Ye{swivWh^Y(v3oPSZKV3pXaKE-d#
z0ov4Y^bn-4U`!hnR)i~+!In2~fp_-!2Mg*vNoMccm8n}(+S$cv18;X7bq<g-s&o(E
z;N2z5wN|H*SRq2J4(ZK~<fV!T$s8Dk+HeY{A8gIhzIQx7N`w++E;j_I$yMW^fX}FI
zc34kS_Cwypz2ScjVVfV1pV1q{`8 at 4*;KiDHDIh69Tl|x?o0g*^j-ONY3=xL4RIB2d
z8Y8Fm0ga~gZfWG_c7Fz~WfFIyu5sGQzjK97-K++1T1LhRkwS_OnO%`SMxr=0oB8?F
zUif0T>c8WeW`zr^^tPDU(;ItL8_%AY7>^d(c5E)GW(t23Q8#XE4?4!|wK><8tBmA4
zBX~SF$r&eKy0E^LbWr+ihQPe!#6kC^_&(CUcyp`5VIGq=0l-+(@ypH3E#F}NxXyEJ
zI(8ceS#}W|euMiM_kC{gU*~47 at z9@&h<RW_v-?nUWiRrsHRo+Wwm29ptVGYEwRWsl
zOsJ`8tC at d#to??!Kb*L$zyBSCw2rIfB%U^&>1r}tcHdiR?yrmJ=0zIwOowvlVljtF
z&*RKdHn8ICkW8U1{+rLrLpiiaXGSznT35%}ka)<Ib4ZNgsN=(K{dGY-^=;6|R${6W
ztz&dddNRGK$xu*+q at yg8c|*uWhm-x(!%3uy!Qp at MH--IgcLfQD%HL~=Mc5J6QBqvT
zdGC3x1^ADo8K>iE^<Ffc>Rdbm5$z_LhM$SJVK@^^NAg-Yb at Fy{_mhi}>&mDw_<*2l
z)*RzT;lh0;Gs-~b8OX|A3px^A8Qt^^(n!N0b$?Tk%Xx8D<9c2Pc|LE2*J-oV9xe%s
zXYYRqto*kpE`75a?M&IXZ`QAC-53ha_e~%_*hdj#xZem!+s(*9ViZX=K0Oj&X-2K7
zSEHN&&t86uTBaFHNiz#z>AE;E=9s*Y3G^#v7Qe~H_Rp3fS`t6$ksbuOHDMW1({7<~
ziRJ1jK*)*RH6=R6zcP^3W$xxe&>IRGK0SZ!<M%f*01H6$zbS6PY!9nY77}=?^nf4b
z<&j1aP}E*W2 at 0&S3!q?nTOts#JCOxC>i;7I at p6<4?q&BE01~s at z$&TMaoL%28_$?u
zlUbTwBQKRskwN9*fl`%LE};T~$}@RqPMon{aE~Xg0tc5^t^^uZMua at H8_BaGjC$HT
z$3LHc2|`A!IIn0T%ptbR$z)AXfhz7-0aoS5LCb!=cc;!#lc-)HM=hm0gBH3)7lS>F
za9es0@)lV}r~8_+EZovVNSa+h@>`-U6fQufp-9G3I1ko#MnUu>DGE&(`pg(ZP&we4
zzb0b%<h5xam3vq at xllfl0Ff;S6<7ag+GLV{sE{<x5M~{kqK5<gdA^nUIv7?l(zhB<
zJjp?URivKd;RUz9(vdID6gj0N57?&4)icG`BS5S<gN at 9GZn@(-z4f#pW$`ZoXr;>q
zigpsPSyd^^a&uhDz@&`25wo at OLBDx-#!9$29M8FSGBlC%St}6m=g(}=Z(gmOYBv6V
z2Bd5Y32qTxi`(0+ at Z#kQX){;)2j=DXwnCQqndESqjtrjFDzE!6cyHS0#|o)utR!E=
zM<d8orf}hVIIi-szTGY1WA+3~wPjJB3C47Rr at v;oQ`&1qEH)Uz`4xHNPnNi?!M at wV
z`pM6DvXl#j*)R;#AkLNmj}r_=?O|bm;?%4u>)_bOClaqWqN at Ya_;RK?{;&^2QD4q1
zRS-UL>tYsH#*_pHMz%~lJiTi;&giJ?O6_r(+pXeq5xJIm{OS at ym1X?-hedxxkol<l
z3u0*1!pdbhVjz-dI3 at PfO=dwpi>N}Eq5oNA{Q*lk-#gX9KX?`rJ-50n57S$Jr{V19
z8Tx|3$f4tLUVCjJ6YQaE+Zn?C97XEUWO`Y!1Dm5&5kh19N1no-J0tU%${(=yIgBIJ
z5B_mEsm;%{Klu9!SjS$zk{8{wFr(eDpCmK9BI6)Kl~tK(CuaF?&RP*PgM99mZ$u>b
z>W7TR4hn6;!&UUE85#~R__(frpHrY7(RX<aEm9?6CPwcQ>Vau)9^XtoKaxo92wg!d
z4Bc83zvXKx+Rw_?xmfK=zL>0mviysTS*>3GxzlpDt$W#7F7F}wrja$|MP+I~b}Xr0
zoz)&$b4QM!cLPLZPoK+DjZ~3=<iJk89X at w&&1j26owqGX_}b;z^PDGtX1;V{`4lH8
z{xW?=L0}7z1ORFO8Qp;GQ<Oa1>-hV$=>*~+a|)(FYXlcT*<p`YhGcyxft(L+vyZUT
z`0O)zdXz at sSs=wN>mga>z7OH;<@Q!9%*(0(cnEKbUY5T6FSl#2AG-m-3oi{*K{*UN
zcqg1M6wLzFSBW(O-|xGBgtZZ8+da14f5;|5NKBOy7b!kLzwHoZz0JJh3uxRJ(@Xou
zF?1$?z!WdYlU#GXlZFk at W;I%(jKd8+nPL>JsL4D^s^Q`@;r_WCJH(i&Tb$uCQU+ at z
zlJ}n9Rl7*+q{-$%@f>WmO=slm at HRl%=cJ^Z5QzfR-xeg}pEpi_gqT*Kny@$aHCLWP
zs?U)4G{itvEBNI0G>CH2tXs87E&(8NCw6wi1<(tU(P1<CyJx0kLj3WCwsE+c>9~?W
zMsEgC(=Y?k>)yDoz!&{;ZWSn;3Fe^$FejagqNffo&qMX{J9K*37BNd-AKhtX&DW&-
zvIH4wKdrdg<>?E5GCUvgLJH33Qt&CPqoaDs15n6hSD$%{<VpdX(lpQ~%Sr!>P7 at l9
zktc|}HB7;;EWF-u=e)?-W|eDCPcMTyn+bZ{yev|Qh`^m=EhMW-75xE7_CxI=|3&A&
z_*cq<+$*Vc5eSl$^jyF8DD4z+c!lt^6U06h+=aJfH>?7G>8=D1NA-+k&;D06P^LL9
zoc&Egy4-Y|4~4%3#mjL=oUzv$=dYTb`$DXmPb$4VRM-Zrv{uSw{ee+<ULcqMlpz=|
zZ=`s$G(!uvEffsXTuRGN*eI2w&68D{9Nj*e4a7I(*`iC>5Sa8EruLXDPds6-s1n;<
zfa5QAng~XJ)p5)1c{hA%={{mmk14jvN+3tcA4UrU2V!cz(F~8u2owOFB at 6Avdh^pD
zG at g!9j;c}h<3e)p(*Ubcxm#5hlKgRGMBp<|)Y*1m+dSE3tGSXV*Zx&wqm3Lv1=-@@
z-i4QslNss3v~><7RB!Vg4HlX}xX1|<in>;Nf?}J079zL>Mmlbv?Pja}(-~#iyrWDd
z6lNz_c?_&|NosTA#N<+s^MCk2SD;B5a0!SWaUl at F1%sOb?@))7!k-8^K%E18wgh6|
zHn7qd at Ym3iq=o_qhTfHHpRbJbM50_4_orozdWzwZ-KTxY+_YzSl{tTf{2e9cCN~px
zC76tVc#97^Ta35!U5D9g+s<aKRub?`j+rtvAT?*&!l|qL_?rtOoOY9`0d0zZpB22H
z7G2XzB$l at mdfL6!48%z}?|wEy5{341F8ahEL*5gP(nk8tz4WN&I=Ln;Jly4>l6AUm
z>rI<#!i_uXuxl^NK;a#JH~Qh%$BQjm!t&F9L4#18kST77w*n|iMMc-qRj(C8!LXK5
z6t&VKF0|dNZJR<j%8kPkQx%K^KY|vlXrQ0%y(-{w>i+u5wR4y)IaC$*OLI-&iPYNP
zt at XFVUiB`5VX!AZlyy^<Sx##?W at kk<b^a8Xel*jT at X$V)nOqm_kE#%wc8|s3C7mUI
zJq^a;Li^F?P{!3<-^1%N2 at rvKTb-1n=P9NgCk0rG0EG7x+NUF>Y{J2Jz4lEAZnJ{G
zIg{=Cm?_#fc~18O`I)~Ey$Kj)=L~Oy@>cMBy|73TE%}oqugRRv2LjCJ@!GPUq>)24
z at f@K>@l%OYH*v0biiY}?gELhm1+Juj!eU6&-+Sk`R)c`~E^SEq>D4mXY=hL1 at F3Sq
ziexWpB$QE(-JsfO)oth)l(G?ngCi$z1wRkYaWDXyU!VtTzBW=-WDx5Q2W-b1OR4D_
zd1O)m_&s{M5_46qTSHuyrg-_kL_gaQ=szJOu{Cqk(fmOe_O#BZxcy5dUzu)y+I4GW
zO!vT<iU$s;*XKxm?k-{KfZ$4XxH&XU>8`LUy(*PYTQ>+Rl1 at P6?)fhOXL{;{9IgsH
z)+)WZ90m+a3pLTZ806^o1di)}KYk(lF{T`Zv?I>8R3~EimgQ<8mf4ST5Jo>kA#>0C
zn)lGym&mC7&|3E|U0^aU;+0B&+Mj=s4iYhSev}uhhfpM{R{k~$D}+iF5Bc>tx*zF%
zhiq^2gUry*(|^WSG+ItPe<ai+f4-yXXecUN*WpJy!)3QbJb>S at xiD$mL6-ZP07Qm1
ztj2&;I`y&ss*1}%=G+Or at sL{3?0oS}YyzFDZaz$I7tofV6u2w|ch{VMOB&yeRqg&I
z{p~1}NF>1mjr4NN>*7fuEqQjN01lzYIAhF{TnXsXv<=kBz>D2;`tzj%;4QODQ3Jfp
z!RbF0YBMs%HpnJE)&dHgrZy{sFwU9j^j(w+%Z9G%7+l`Oq32oG>bP5o;+sdOY0y$q
zpq8gxbk-#q#|L`(F3m!J<-8#B1Drhg2*(O2sF{n!JoWVc`xsU!cq9tQoF&e3{Jl(T
zNIOWM!8L2wyT54#!<f^m*LRRCLE=^E{4#lZNf0-{Z`hws%1{- at 7@l;iA%vK&c{+L_
zdgF2;g<ej$8vvZVcF2=PlJ&Zdl<0s_HR{3O9K*1rw0)>MvXMJ~v3<4UjBxB+IXYqR
zxs~+i9sjvG9G5>Ftj;44+V0=XaS+YKIw5ay&eNf*DZ8v*TTj<b`u4ahK#?&H^<`>5
zZxszT?9dx-N580YRy9GMySqWPRk}nNUo6KF{A>BIi&ltHhYy~XZR*xK{n&^gi?}A6
zjSBa<`x(OO&#Vi7n7Zd)S3=JHf<Vv%iN4;?o}j_Wr#&ElPD6pVxnpT@{2QH2<r5>o
zf7<?0z!d%#Jy9Gy7M{$hJJJkuD2w=g^u`M_7Z)MY=!~$-?i!s`GIxOe#J3q5JHEvk
zlX0{xUxnRuUD_}%NXwtxxX~F{>P?69^_B_i651-?WxEQ0vgW at Nllg>x-m{pQq)CyU
zwDo*G<W{k0gB6HGOts8k!o7)ymgY=`hu^&Ny^u%y^Y4}le1ScoV3ut<-x|V*mh?Jb
z_vs9{;#QETd~}(m?7zMoBxn=1hU4wwU7*s;p2DUYoR0;7(1v>=N1-cq9plvLagwCA
zpA1U0CwYy3@;R7Aky6%K-6qb7pSZc+`i=3vv<);Wu+)=m?8xp==+Tf)omI3)r-*j!
z=jtYPeHjZQM)^X+)bs#2cc~{3A3&GUfKFG?WFYIgvXmEUY9orkrl}Km&XtTT>n{+i
z_=icQ0NFai<>D%Vui#^o2Zzwu$@$@LrJ;X#VqedHo(aGu=*6~p&)7CB7OYV|AxDTJ
ze1 at u6+=zohS!3k2{@aaydR?I<LaHH at LMJlvvORr!R0;!wy%D#S`Oqv3&h&-CBqsaG
z$5({&GO>9ki>b`F{dytR-TCe{Rb}IbPP*(h`7nEn&-UL#mU=~fp=(&^1C-*VHKq0~
zLlz5vMLyvd+AGk6Tmr=_&Bf=Yx7LMTfSG=B+xtSeOvfQ)D`dA9!@IA(224xRg_mDe
zr%}AaBiCa8V%Vzhig3<xoMH^_2bYEfY*{yaLLd0Dr14M|Z$dDwg?N5R>-7N#z0HKw
zc+qC4x at zh$dAqTU?f_k47Lc!`s)1M06R0tNEb)=;(Y{I{qo)F4we0kk0?wW#BI(oA
z04#Z0Qk75E`6~zY$JqlJKE{48);IK!kQ3N%ILMj;4JJg5BcKcwg*1l`2Zzol at n&fW
z{FG{oxCOl7)Lqcm|8Qs~0HZlblfIfPfxb{d*}#>%%cl&`EFt2ez%lkZ)1;dXXNY}&
zs>Erq?4cNmC5COi#D4EQtv1gej0O&cjL+(!IYmyqxS^YgmrC1X1VBky=O0E%t&&*m
zP`@_gb-s@<8aHEL64 at WPAXu~rz=RRDNmlRvDu3+(p-G78XccT~@G^BbbO6jlLHZV}
z->$H+3uC){kZz%UFkV0~LTl%|$|~f43Q4)^VUcKoymn*9Z0_?1u{`Q!tE1u|+!D}f
zJtu&l%m;G)M%OyQ!jo_1>oM+Be}o5wz&NYv<ZF?Gy_mc9QNKHpWl9)LFZ$sj&q32u
zh|xZbAv{uBPSgCprzu$QF$-cJxT24bpppjN5~=zn(YUh~eC-BW&7<n{tMl-G$k+&-
zZ=(ZIeOV3)8Za>L9$J3{%Rwt2ms`Q3qqxo<gwGQ3;qwE;U>GMFyaU4)Hh$9-tID)-
z4#i_$>_iHtJLI8slnFAjbF;xOW1)yEVk2y{fF6>@7QVA7iexp<WTIRV)IrP<;PI1H
z3~Luw{OPf_`|9}W5B!Z0LVFE=zi`A3yVzK2qxw&C=^V=&X=JZ70i<qL*BK3-{BsWx
zS2Shpm^D)r0v7l(HlW7@(jI7`<lk3wuS)IG6xaR- at cCZe!=J;oujth&DC#|H_A<^#
zg4wO5yhFUXc$artDkk=*0m*||FCLh4JdSf7$50p~&+g2JG at w)wDnS>2gsfur at b-G!
z#wVZ;ugw1$UO at QQl18mxp1*GV-4B3?GMgcK-77Y&4sH7mD2Jq7Qz(28_ZqOPHSkqf
z-S}H1i%moa0o^HCvCOHntc7r+005BCwN%eUZ!|i}cyWbds5OBr=X6OlW#qO9iJg!E
z{~E?dX~U24>TWV&B_QK}qKuTQK<DvHCe_0U+*KdLbPoL)&nk4Xl=1_NTKrH#XE>qg
zURjOB*!SY&b at xSt<;_55kZYim_=D#a6fI49Qh}r4v|V$GpEFpTXL0FB`v5njJDHn2
z?%AVgXyF%WqqXgj`1O4G3(kk<v}DEGs!B=_PCkqV<<4NN at T|#yTkI=ZqjDyMn3y>}
zBF-7%c?0BWm}D;9MT0W6T;t2Q2HrAWpnO_&h4GLkur8Cu9o8<*DFG0l*>iHgZ9dDc
zgY)uIgGbhmI4+RsAjA%BdfD3hpc5)}4fD)t5#}n;RsjW;a*G|A`lku+AS9yYHrlGn
z4w;jlpMTNjJNv?a(<Qn#j>p;`dBbl&-fv(iq$8F2<7qiE8x$BO-3N_2gJPhRgEqf#
zg>z+;GQ(f{)m2Da;?}-Vi~bT##EQoQ at Y740P;7vJBLP;V9;5%e%fN)bsHoa9SZ#aX
z98<agDAvIzqz(?^zg)<o at m>EbV6YkvVH(T~-BZfp>U5fay8uUZ#lw?6X-Qt~i4$L$
z$(?%h{S=-&A#Hj-w>7iF7Q#NZmM2!wBPp9pHDMgZuTnjQbOSH`V+eW7Bjeu(1gm^k
zVYGwfmO%>>z5L49Ce=aZS at 6piE9nv|X}l*nk$?g*)G&HwBNyQqZ2 at jy6z}@1uGmeU
z4MDin&XU}Jf<0A9$1%-zz`lBaU%Z5L0KX<ipQqLvJt-wK>hl$<p6oAvrvPxM78~ef
zv=gOUAvsX<AFle*ayPoPx5!0>4SpJ8B>IU)@5VFm(gG*J!gz{)c>^wl_xfSpPG94G
zM!f6+iSY4fyZ~FpYK2aa!J!{n@*|nOn~f|Fe=x{@@>5v26AcGo8h{$A1?BQ(4_M?w
z<jTu_^V3W;wI!-J)+NYC5U^U!Na^7Xdl^Hr;XjR$?S+w*rbVW(O|p(oCS?8zeD8YR
z`cagNL$39Xg%~vpi=;;B@@2U|ceDA|CzSPo%!Zns?fE|W(~40g^E|`cO@#u#n0&-x
zH_YmP{p_pIaWTv1>OY0B at C1#>H%O9oA?~ucZoa}f*;1@=mCsYPknEfD?Q>b|)eI{H
zZ42QtUJ)a{N7n1(Y?IHZFr68!G=cBv<4w%0p|TtRo-Ms>(<lG)mzi?Y1W1uV at z@9j
zqSHoOIIAuj!U?D4UIJ&Zwmqd><0s!ipUotH!VU^QJx-LZXF3c$9>U=V?U0hVnBcd1
zeYO<w<^NqRxM_7B=mT|cYhVKn8$Qf{^YR&(h at ik$Yz?B}{dCSA(;q4kHdVweE>lr#
zOrl1L*f5F~Ip4GPQ>pXg&VDm$ly(W9MbJm*T&IebX-uO3xWu4)v>`KHl_=x;2}^W;
zW5pJv!zWndm*6uUXCOkpb8ni^vS9jIp`PIT#{tu_5JfqJwE at erl5Dlv<Z)S(*H7%@
zPJ-z}v^G`HpM_7Swj*7lo~Al9qhI;vs at dgsVQCX-Lxp2^hsK*OsEiFdf+35v<IG=j
zK-BM7vMF5a!4$#wPCj~6xkm9 at jx_Fn;r0HVKX~ndUSG=$Q9H3epCHPw8BC-`V+Jos
z-xfX|d}A`Ri>zOQd`jPBGa>Ed=0ZTken`ulz5^@F&$A&iec$D0=VH?s7s~!jr_e5N
zw5eF5IlXV!Ev(!<ur$E4--$g at y#3J(j4#6S*q>$!83zR&(~(JpI@!bY6z{r!?4hP8
z#IVQL&D9$*!GUa>QAqH?L}tr_Atz%u6J8zp+T+Xfh_o}55-J(%rixzlI!#{dobHC6
zIsciAaBDcBp{z-*!?mXf{F9l<!GRIdf~p)V)a{~qbmVp}ZJ$tLPrr*?%_#=}@az}O
zJD$#2H<vNw_k;DU`$X)2{+?WaC6%%x9WZ~$!vuV0pO~U6`bcFcoX5fOHd~5 at b9L*b
z(O6}te+^nLA3<l6+JR~a!dMs0HmFtVab^f_#{*sZl9$WB=#~<H=NihQ4%CFd+D`cd
z)r)B(ha7sr6yD5S0_1BnUwUOpFT~&JCbY(L_HvArGVdvvm-1<25HuNoq|O4A7Sp=X
zI9<cN86-PkH+M9PE(@>;ujJ?2Jli*3qV~z-1^C!a&bUQTd}(u^6qEKMcM}fF>g`TD
zJ&*va62V-xi-zZoH~DPJ&c9M?sR4e?8;$cud40Kew4Otr;xUgTIA%(y#Ial3F+o$N
ze_Q~&;wlHVsuwa^cV&rxKuV!Sm|tUXPg79a<(`vwEsOcxW+}C*cxe%w&5kxCz3;1e
zJ47+6T%G7w)fc at 69qOI7q_&-3HNMnO^j=d|S{52BFE?Iqe2Bc~HWBoxjPph2L5tsd
zr}#S7ExtIkV;!5ov#K%nAs*oFm8<$S at D%)Gt|#Fk=;T^=k(Wk)8eCC at W0O^5GidX-
zVJiG$Et~i~igM at B%tgd6dGfWvy)>R6Y3JA^epX)><}S2EiG?qakVfZ;9fD@(_r4=Y
zZ6<Z at nXeROC4J#>#ETkqT8bZ>J+15k=sbdW&Ht`8p|6>J9d3at)?0fMDqltEsXf at U
z25Q0Xu_iR8W;5=8UrYJOELkt>q=NuNOp3WCLlxR)O&OZ1s at 546uGzdrdLc&=BVNMQ
zg-zF3A at mmWw>Vjca~1<^-$dhCL!}Vpxfk4=O1cc+3Zz5vEw0 at M4`8wa|0S@&Tdnt=
zEdQH685=!cYHm|~tB(Aqe%?qtu5(*8<29PM|CvbBV8dpAUw0+KA9KolZ%x?{Yi*r)
z0HZyPmXGRCrP-Xr)~8QlaEKltV?PCsXSRMrKY)9Qfe3_ZkSd?@@3-L}l|sYQ1gdTZ
z<E-Y^o%FR%|K?|qK$Kx_lcZJHP at _hnYr)<jcL}&s=OR2To6>#Se<1kb&i{pdR}<x6
z72TurHnW0%hY9*KiY9u{0}b^EFJ7#qASWkIC(}L2(#`w8M$!<a$)$YA(zZFB^uu#y
z&Li&U%LRgrF at NT=#BM&Q{z~HAIa=wR#j|$0)anKi%MyQG0vY!OWmp}Z`6G4Qvw!_!
zG&9(Jipgc*9(?PhfQE2&%}bF&hnqCe5Q5D8BJq2FU?&ycbzwjLk*==Kajs{&v at Y0~
zdQ$CUrEvzpN=o)>?nIg`rft6BO~Z_)DUA_hRoyZ^B2XMwbq3n#DbE#uk4VAEdg}j5
zDKBu&7R4}vlbW}U7$gKrJaKPz8F9DuGX0|PIMj_!;i3dsN4sIxgPpQb*D3P<{(vZj
z%b+2D2c$EI9%1PMb^iuN)HOLwh`WFA!GARbD6cx0?Xa|z^Px1Urdocr*q>K$J9dKM
zb(j_~fSetRDX;VjSGt at +mGVNB_l-Y-sWj<WW^CH^PR5YPB2Z2nL5!vL-(nOgP1*L4
zP1eK6A}Pbp&E1WbY=uo`i!94zRPCCL8qGg{{<5)&dGprKUsqm#=qV56=0$C)G8TS}
z&KrPcl_&*E)~SUt#>_BAHlC(O_}+-*<n>tbegZ?n7$XRI`@|bqEw_w(rM40aXzhTK
z=4ONmb)WchArJE&8E0F6O)4|flt#r}#g1)4-I$zh7+%rm){l}%Iv?FQCf*GD<$%3^
z529_UWx*3Cd`BbV#6x924yP)20n9=#denC{#AG=0J)+4mnpr8&{(axc#1%xuSP0tg
zM_~H~W$SEM--8zIfNo at YGaGGr>Z2y*b|74tCXclzg<366TTVi8_ljv1renZ$U+;Xc
z04kC08_cZd(ey~YQh9h)yvYS*j{0kV`OUCQ&2&=)hYoB#OaH346RUhU=<9KwdQkU=
zD#QgM13Gi02dfZ757O$F%nM7xU>vBX*(%L4+>PZB%}Zl()#JqZa#eIkb5-;R_Z#5B
zbU&%i4PD-2xXyho`lQYLlZ5b+*dC?eLR?2~0rdWB%)C{U&$vD4m at P_CQ5MX9Qm?Ja
zy}v~=s>wsJqV6K at AHF%hMjkqXDA!D0<J4F3&s5+n?dF$y%wmj~;P+xO*2TmQM-y|V
zUY?ih2L+QIwP4y<qVdY^-Ar)qp{}FqsKqz+(m;P6EP1;tE?1OQhn(5{DTXl9w$(Yi
zMc*MLjDQw+zEkNC`@uSjqaWUXiEgXa6a_K_4BW4#Xr3qs`uIUH)}|0TRWh9=dACot
zD>(1<lh5GG1V^z8K!8E<aT=(devuO<*Ppi=F)rQ`5eaGNvHO4`fX(~BlM(W(@ktKH
zs-q^TYln8h#ZhJ-d at 9BWkoBw3$l}}#)SAs(pQcg at H77T1B=qmPe(oE85<sf%sgusm
zA>r7t^6l|2K{&zocG2Bni*BKVJjM0Kxc>G>FRCFTW6F&d{cYDLSckIXkze~C<3JtX
z^iYOUC|5Uf|1T_pL4~BnYfK$w=n=1=Yn0togx&$<g?#U9`l7DGyGKZ5kotpY+gap0
zm)`qpnaj*l-DeF_F;WD7I<1PKB)AiW4_+h`HlAKzu2;~&16R3M%&bwXO|mD+1Dv5d
z+z>NYAPcngOyWH0_Ab>27YWRyg-Zv8W0r(mhcG3w6BagQEm9dzeg>k79|v|R4eyrq
zrWI{*W85*EyDva>kR!%-6KMmZ_`yME$T2uvSqR2dp9fknuOc&lemZYl6Z~wT-q0nN
zRc8uic3mfd_#TP4&`UsPZs{<Yd9imN1fznIb&n(wj4_M_!iLRcO6wa7;0pVU;qsm<
zMVS?m+%A_?!yGS_Vcb=n&^LZ5{J2hA!7)c4&9adQs}zkC2H#g6)&dwHGK=<jBln3T
zSi4J%K%q+d`jtd~E|}GJgBEE}#eW&6%naT9X-yj5@#6~1=?Wi~<1T7)sH|ivBycO?
z+X7id<&yXG_bCw!v5b36DN03iWPb2YP`Ipny40MFo5q<OawPU;4$UsN8pwVlyNDmO
zpJzCkYOra(*#><th&(OX0F*@4EBG!I5n`;nUbmWMW6iUFIaZwA({yOb5Uq<$8A`F;
zhN)3#5~j;~V2_$gFE7J?GaJ3O+7-zJ?0y)cs@?}I&58zysp)igB*}|nv0mQdl-$P1
z8zl$l1FZW3Mhl!DX2Hh`O`>{Luz;TQ*yU(^kHlg*o0dAR5gb{j)yxNgEw!y6h at Qpa
zJ4#2vpm|w;JAZi+Sy@?GQvUAR#>%6{IFG9DKyX^TRYdYCoom(BP8DUXnuhPprTt(e
ztHg9kv^0!kb$^;davpyhvX0l at fAXh#xMDp}9W7D)s34+j7(@4F0@^j@=aM#*ihwDm
z9QdaALIC%KW({t91}&Fl-}cJ4D|bs|;FEK=Tw}(6c|5LV!MuoLV(c>;oX+e&4bF^5
z{!MryTOAmFva^q^owGyevev6DiZcj4ZI}^3dn&UYzO1{Eez3KPf!IMQNzm5v|K+#%
z18S-GSSsp;0p;>5sE<nh&8MzC7O$g3cWE-Y8O8$|Xj%s7r_zzUVoYm{ovew+9$s2t
zW}#Gn#BFSa|C;ZbzUI+JWn9+fe0U=Lxe<)jCMwycR#gx?K at 5yTo=>H(T1~pO4c-on
zkR)w$dB;!}q73wn<du)bWPXZL!!=!nk}YA%{Z7`?8&Q5MaN{_bz-z29k7%<<C3?xY
zx7C5bqcaoCMioecsYO2_ at 9m}mK;sOB=Suf~TY$LgC at q$SsusYk8i&gN&2doVHSoT0
zJ}7Z#JE;o}5`stVCY}wb8^oFPB{FExHh;5}5twlxZc2;3=znNkhdu<+hEokIsc?M%
z+;_MJ257$|>eN+!DLV=isarqaF(l0olRNJS29+|1`~^`dd8Lv>B>nI)7L?+KWyg+x
zwD8h9IcilU;Y|`%>Nq%Fcxww^q3veY7?EpxqyX1CTg413b#N9CEch3ge(s*IqT|11
z-<2xpkRb}9Eh=<fx2?;0hTxD3;t>>X^S4)!+n>!$p!U>5-m>N9*<$l9w!JEOf}a(C
zbO$*1o}p1CCs`QbX0-S2bgu-(8&2AP08a$sH|>_Y917BNuU>SNvx;Uk%QK?vd~>#A
z9~0vz3tl*f(3g``n0m7?n~wW;J|r;)#|p3K40E2Wk9HD_&&RBVAmQ at +;wA?JBY>>`
z=KESNbdLkl<8a}fsy?yXbE{5VmZzG7Da6t&6(QO2#*-#^cs!U|y9Xl+w!LhBxC at QK
z*1<6|!2B)iTCrwI4GQfKX#7(TAKT$H(u_Ob^t;+2lao%k;vxxaE%J<@C7mw2tL6+a
z*=uOXkGx|*A{sjWYtK8O0bu%7&|N^@UB8Fr2I1rKtX`OQ%vKvhgTxrCCJP$wO{bc#
z2KK;G{)P6ou<KocA^iY!kid9<g0R=owv=4SnOY)%=LrC5=ZL!3e1yaQ{lCr$rk4Bo
zhSAHZpp!C~-CdWy7H`>@4faVcy##Bd-tcTZq(khJ&L0JUE21BBFr%2c*i6jC(^Dev
zgH5=vSs;<J?Xi<aw*P|0TBzicgj$tK9(gQvSMN3C!Q+?}{xTSWw=R8uL0mmAwQZvl
zw&Zh9j?99xJ5bw+%NO=|BUW7<RfOr`Vd?^5iQA<uO->*QVu>oCmBT`IvKHKp at V!Cy
zYJneP;MJ07ZFWP>iDQGjimgky4&5(({#n+L>Gsd<3%HYnf2*Llf`2UfypoY1fK!_Z
zoog%&$$802Uppz+W<s=olWrLF%5A&P$+_Oi%!-Y#?*0SE0bjEpwFgd<ZT*RV at 1cMi
zGuIAhonvr-_zt?_8dXfHCoyBMMF;?WgnzPyjXBLvtuKx%gvH9?)OTXiQ^1Y!Q3-BZ
z2p_4GUGyr)hZkiGN2PB8V<n`cNX)nfD^=+2E+{q$=;U+1aA})=@xo=~{YyZi0mN#7
zvZ>#VZT+~3xJ!P at 7YjB>fa`kfqE|ndZ2^;q`t at 8-x{YUDdf7O#oG#k>R*gqJm$Yqj
z#+X5M!e>Krnj{cpi|60*iuoeZIKB?N3P$bI#_{__MiVNa6v*MR|6ks1MDw%FyOW`?
z)}z?%A%aHCm%2ND(7!Q*)SuWPIJA@@RTS%8(9b}7A at cz<X5c^)<AEbPjN7dE(Ir89
zz2p1S81k?Cu--GT^{txV<ghDn5`onS<?e;O9>#^uIWbA(sHC8_t^7t?9|g%>p-UEi
zWFI&BzOc4L#Ual0Y4j7(9=q0tPsiQG<jra|Rq{5_e1C<1u^?5CyrNJeDlN_uX<;2v
zPTKHI{<H5C&yMl)e0dz&(*G|x3cL^QWTilou&mPcrUFxSc+6Ns<gn!8S3Ks%1#Mdd
z0LCw8E&himX9Y|70Z&5h0GK!=s?Aj5f1A&^OfmO&Kg%pxUkjEP at t_2<Gd%I=n;Q%0
zUOfdOW(iM!1zhHw9-fp$#bB|bkFs1K74`1 at 8o5<Md17r%Q?VwL1p>*i$uNQqQ=#te
z*+1>n?z!E6>3oSs#Ch+WXo9nY5`<dWBG{JtbYzBnpss4kRR3AhI^k7#DFo_VS{pp7
zD$_jVE at 4FiSuB}*F=q(Euc}OyHg}UafU=r(6CYuJk1$7uowq at 0@`!>ovk@{K>VQzJ
zaR+5!Zj*0-F|$9o<f6pS2#=u&kd%ujBqH9J_n=n{aO_&lP8>GI8a;qI!9>dY$1tJ$
z)d7nsDw8Hjys+f>r^b!`SadF<YP8rXd$)!d{ac;8*>w;THE<l|LReZrZP8CEU at ZG3
zj3(-TcKLM{;fyNs`WQYxJn^@;j!CFtuaep>5QYKC3+*L?{Pa9y(+0&QsT}fbBJTro
zDt(IM8l$6w{AxstRR#@c;e<CZ$C#%0aRqbfJRRM11(Dd#Xh&$%j_QdhK>u>%J{6TP
zpl=&Fq1{eLa#tX<C<7xmzwAs;mv%Gu=`#0!q~;~miSEPI4E3RfX28C7gib{0roE(>
ze?1;H<8bO8rs~CL9f1GsMMV1w{}YsEn6ZH0reV<OlJgX=Iz?XnJg5{}NBd*Up8bfO
zzl^STKk4c~F4f<!fn)3H^9 at C^QK?jod4(i$5z-Dk-d2!9`mu~n|6%gHoCQ;NcBrU-
ztsZ*7(NQgJCjj)`M}4m+i(-mIUEqsn%LZ~=3-nJcG^=MeNllXr{-RsB-&(nv_uQ at U
z$&0%uke-7|%yFydu7s^X%=tirR}4()sitp+ut;(-M0yG7X0Y`ouYm|8sRN8Bw{~!p
z&QaLt#Qi@?3t*aP$Jiq$$h|X$9%FKUUF~LEPs%Aja at nrF8ibc=yxb<}i~Ig$D}oF9
zkY-62>fM`;7uxp*hJDQRFA5CBGLe66WbZQnd4#7J?pVtd-)`4<Hd8>IoD_k!DUZGA
z36h^&`Vt1dq9%9h_~k<WAO*mK9Z3|Y`LX{JwV)Om^@rF`;oIo?0AJEUU61>J7AD1b
zv}y6CxXlStq<)Kn-H$u)|3Kx56{QI$*vE*PEaa<Ufv~{kg#IEqONH#<EsIlyRbU~F
z5*Q0kxr=1Klz(_EGZ>+NERr7tqBJ at y9hXP*1jyRxf|2%6`b?4r_1!Q$e!S3S^8S!y
zFwn?mKfFt|fM?g`$Egu(kaBl_jOsjFBM5=1F`HHt0QpS(B(Uu0!SG}|8g@*J38MU;
z8s{~}o<984W4S=r)W>z&jUm%IIHUnSZCM&+A>RPd*;llyNJI&Ha at C7~G^sSS1=8Q}
zw1cb9nm*niJ5D%-F^6I(STWr-K`2;MB~0bpW8iOO7`MExhau6rD0`!S&Sm-%CZnc;
z6u6oSVjN&u+IqntMMQIZVIg2BCv~;fva_2JIvAg_xrD(J*R*+(Qzb*n%1)J*q1nB{
z??9ddqk(D at 0k;2C9BgP*kP=*Vch_7|baqQ2j8_`5KkrJ_^?TpKVJCPJw%~Q`(I6hs
zVFnop$r$1BS%k+1+Wv-ro1AGq+}1{5t$g2Qod*BG{rjaV5#cj?ucq@~kke1COo&kn
z2GINRZrnT}J<7o3BI-F|*a3+8I?&+10G1}g%L97B$i#cZhuT`L9mM%oq-whT-B|V(
zln0tD{e<I9)M>f456&|~YwXZ{3{S?m;^-$9!A066I+!yeK1Hm5GE+#yM4aC+1LKGs
z-L^z>BUz0~^J49eGn4YyL}^5Xts6uqXlIU8hcayc7wl^WE*VP|J`gLl5~TA;^f~2-
z_y!26#x5BF3)0-oYDF<121>sfqL;4qKU`7jCQV;hsb9GtM9SW1Y_B&nZIRHwFm at E#
zmdL12UuNpa{N=iTmzW8&SJ>q21k;=EKzUT$Sv;eUj35fT(8KxE6l(tl$#h&$sOs0H
zQ{cEZhl6K<A6BNlEd6)Lr$INpB^aW&f2D3?;XgF!l at in3_{+RH?`cWa@>fo8abLkr
zr&UpSHz6g`FFEUFZzmdHVkdI-_#2vAK=@WV0yRvYRJ`whxhQLy?4J5DM9e^XyA=KO
zEc?jnuO9E6{=u>4qB;l!;8r0TCe(Nixz$9`TiE%q74pSU2ddoxgR^^Xu~fn_66|ga
zK1%jl(oE-0-A;@{xz}(06 at UF;`=~np=iXR7eeh-&tiD~Gk7sy5`H9BxcN2sN=LK=y
zQ>hWrD_XCAB47j}1GoJcb5Y}oSc34y_aY3>!NBin6cTX*6R_3w%?{JdjIpeEO0ris
zfm%nS>o-Weaz9OP*<BGL8JYqOLmrtehL{e<mWDKf%e>t^EgB++8v at +NU^KU`E0Gwh
z*Yx?$TV-G8l80`G_u*r-;kp`(V9ZCSSl8R&P60lD^6v(i89Ee_%Se!fzB#lDF=mIt
zR#}A&v%o<|rY>_5k`_MU;?nOUW&5Tt>KBjsBCoAAHtmb~3N??lW+es8n|ICJHn|Bk
z=SZ=218L0HtV?m4LK3Sze;)B1T^887@>(qpdDN3s+-9QRXHQk|AMBw}+O0z|KIdNh
zF7Ca5S4{%4a+Q;8r-N#f(-BtfWzr=L`jQA-CYTY?a}uD<`3JU0P(aO*cWa$A0j;IU
z1UaX6bz8HDWE>60UYOPT(8wm6jI*4u%sf=yvZ_bY|LOMX8H@*as`=i&c(er4%xh1z
zeaq@%33&eBMk78jST}w|MENg6j|i61XM9?J-g;-LgrtlR1Q+gwa6Qe<Cz|Ln3q9{v
zy(P!!-910en$s$8WEsr^L|jXXgujT3Izc6)Fz?u+#sAjap9Qc at b#*a;my;*}HI7M%
zaqP4m>uCPJfpFNBi}Cjrk4heZ>wY^lMP1OVNnX{Cc=V*lU0^_bP<#a_TZ3=WK9*a5
zCURh{Ye;nQQM8CsfndA;n1!D9N%nP$(8Z at T1}scmvQQP{1 at IC5UrQM0fdr~orE;38
zagmN>^XnVCrE$)rD!o4dLa?kIVd~GAsm~6ar$KVrS>X=V8urN_%7&TYRz6}Py0CMB
zmveJ;5<h}GQFQw^U at p(ocKw1&c=-%}TdgOA%X~G&eIzfL9Ub~da#qo$&;VNn*<o8h
zTS&cOS;3d;zrCie$IyD{2ecEU_ken-qr#98I?>ENEe+it{$z~b)s24tW8~aw{j|4H
zhR+HQ+h5#Hp|!9=ApU7t4(DB0YI?g$_9tmrVML!+ at sHk|$Y9}#)Qzoqv2uogc3vcs
zMYCJSsSlQs at ciL$N+fdcq&H;)7I4)YWp1EJ&hvo7ws3>%kRY&LRy-gsf at B#x$GgYD
z<g_Zj9)4&WUf8SGj&T)xj6X0;R^p>H_&bGNPSwD%)mnsl7$wt?PLjN^7F#k?I>m83
zWB&x*p}xdP>=8Hh6PL>2-PQSjT#F<n{J2EDwjVBGoH?QBtOO!CCwKz6iYXYQl@=<)
zd at kf%mst5r^^z%wSy7voG^q6|vkq?mtN+nwdL69xq}LEOwo1^6y>5U^oko(p^GW)&
zq{}j0A+YSI1pMp8(2N|lr@>E<@dpeHFRsn|BPXig-bIF%%1*A6R~4myu6?T{%nJ^)
zAyx;Pv?Ea)d&-yIqpoh{;MpnUD-zr58F*{ASlf#e1LrntC?IFYNdegEQ^QwZ8kPEq
z)=;tYy~o-9xUaoi3lOX at WfR(P6!t6z(!u$zDBQqe;!@Gr?v!cNM#*348I7GZJT0N1
zP98;G#8x6Sr at +B!ePdyN%wH*jwuIEL#7nd>Z&sd3Z0UvPOnB383t@^6jCDA{WhnrM
zF1L}okNgdjU&zJLK9rB#`)IAegpb5~w<&%_{bXSq?k?*M*6<(ztNrZiBOLn-P3(0&
zvcg0|9r}PaZjqB}k&@aqcS!-r*U0aiX49g%484m at 1UxE7VQ>w9sz(X*oTGS8>n*es
zk`I2dOaum0+;(vnJ6{aVs4dD^d4dSQzgt>kJNut{(tii4 at dXkR`n^eQLXQvt8CoWR
zLAuc$^r`?yNGdK1?HEUFNRXhg&y45H-p3hC)4NSNhZXkgsfji|!1at<0HJCEs?(1q
z{6|oNFvO5Y{%>o4<~7t}D)t)`P}nIkq}pP%iT#Kdxo-|}8RXg$HGn{)`*6aB6KMq;
zdGWXAI%E#w6~6;Lwd8l_Zy@$az~|BDSGf0YTa;szI}EYGm#R45v1^(DMd)jr&75x`
z>j6T$0__<SA_i&twN5iV#C|Kic~z4PHHilw40JWcSx!QKI}h5j1)DZxJ($NZ9L;cd
zgxvg88>Z2czHucRu&|M75msPfxK2QWl23<J7TUMkzCZ~~`KGX_CD;fEExG#tx3-Mj
zxXI9g^8T at i3?WhpZfvII;xr5+{u=*(FKP?aB4o0(|EiRoD7j;#u5+4?^__0WHn&6J
zv`sM?n+ubFd<o+6Msu-;>|m~Igl)X-c|rs<VIi!zUW3)@hMzT#<iQ>UU5?|%*IATf
zWItx>NbIch0a&~t!xu1mk%?nJCl-M^_Wkbm*6BB_9xI_X)vm>$0;`!-xibKUo_^CP
z at T@~)ht0nel1p!-C}M0(Ys_h|m22K)&Gr?#b)M6I!j%JAQ4#uieAX^szl0$d!UZ(<
zjJcqH3+sh$1ZdLnwrXc*fGv at uL=e!^YPPY+BMQwb$|^!NrDwCp`qGDQ7CMW|@jWdi
zvrD{o?bCri*Oe#Z+spdRm{^7=gGZmL-96MWHEbxl5UAhlDZA*-UxT{R=5)2%c>Bko
zf5ZBJ8+SFo5CoJV_(?o*ud7ehsIzTixh at GAsi6jJQQyN--Ea3YUWp*&d%v)0ao{Xd
z(k$t}7&+~md^ZuUX?z;wCaETDU)3;c<juYBqo%kx)RKyOREuhUWKCpz{hDodxhKk*
zJ(oP)e^LfSeE3vTNKgWyJJg=;{dlsQ`}bLYsprn6$S at OzDA}8mracWi-pSnRV&ed)
zU$iufV;<4rn}z<UyG<D4GAJSl&|>Ld^NY({O3{-c;k6l%Y(FODSuon)&PxQqM!(I<
z8J3!K{58A=?^GUYE at hL5zsvlYTJX3w4yRu)$1iv&(XfaHEJ`Gw81+Now^&^PW~5qw
zXT^ZDN1w$bG&NxdJX4j_eJxQF<@fs`*MS2XI!mlR%nLX2d-1TCUh#<l&N<|OFPt!$
z&TrmJSW;&C`FnZt>91uMtJXT%?q--RhdMig%Z_Fv?XoHXr at fxL(6{T*;Y)6)U4UP`
zV*S;HcF91lDQA8KIh)T96%&(42&`#;6ZmK3{5GSD>4RhE)Uyfncz#_8#Sh2+g>9|{
z<uzHFKf;0>g9%u?MhS2#g2B9Y)0bA=BINx_s2 at aE3S;<peYBtkkN1y at eqU}vQBNJB
z%XwsfzZ(^gIDT$v at iOK9#6`Oipgl9#0#C+jJL|y39Ugw^FI<Kif2)_BXLjy?+ZF<+
z+I=ku0)ugg?`2AwXsmy?)UBAnq-#>C%E36M6+6)#TFy`xE_D5Xt>Ohz7$ifnuff~`
zPf>GmlsP)*^SWAOv@;r0*?N`IiC at 7d(4|GKy%Zsk*32r^S+G$FGh8!hQ+ at pdb?o((
zy1)jEWIwXr{fLj9;z at aod!-nEeyu0cb&et`zqT at d+^BZZf$K4j8i}m5rMD130LA#D
zitHdnZKFmZArvqgg>D7t%X*ouIM?_HvE(t`ar(CSQnqY1kfyZ=ooe0i(KC2i3tP2G
z)RIitf>mBhX^3{X3m7;~w#x1;fVd}uKQ{~csk!Y%Uo_FvK^9 at a#1}AsMkx+pM(z!!
z!un8up1t^t@~4je)+!M<0%j;lw5RxcKHs>7+VCVc3Qd^#_Vprh<6A#hxm4+gJ?SQ>
zYjib>Vn;NSsFKWBE%d3#uyqNuoT~>UO!lBhy<fUznmJiKw2m|JSQ4VVxP}PaebBX@
zN=hehU2Oq1Yx;_R%L%=I2}cZ7RTa408#tauBU~SZsoGZ=HGJR()}b7V2>Un(d68Lx
z$=Rv&!}9p1X?eBuR3vLvRBc$j>^)!Ri6Zb4OKImPc&kFOst_|Oh_wvZErs5PHg~*I
zBC+Q*Bh3n+cMnXZ#>qiF*Gg7auI71f&ZZJPHXx5ZacT#F>Zss<s{KocS2 at RysF#?l
z=yCl|c)eV<=_NW%8w;~m#JJ|ZIRIaP9<YXOC|^{{0{Qk(^EuF=Rf{WP6H05;&YKeA
z6Oq%6|5+8euq0S*AgMfJZkZ~)^3RiVP8X^WaM?#PGvu!hIwFtN#fZa=JMf$|Tr+5<
zR}gF^X)niy-*1e6N_}U$g}&X|H3@>X9ZWA8p+;tGJqdlXbN2%?pur*l at BDyzWXU7F
z<cteQ`Yu{iCjt#JjZuMyZNGgyyHg4}G<%KzQ4~53Hdzc2m2A*9poNeaTS{T`M>u-A
z-|IpNxRM`krwp&0az=J<ulWE9c8d$|Ub}X7qAb=rv0xT|a=4tqUJZ48NfX0ve*@Gg
z6ce{P&PGWH3$Oy!X$^)PF;;1+<i4ZDbpbE;5d;jzq8$ci*L`Ul2B>K18PFo>SrQk_
zOeiza%JgyiDbS)=2En7<waD+T$_NDx7gV3|El;6qVA(uqu1F#fH;rI;<Awu6zQjQc
z?Q9~4w;YLoO&n9qO9RBOb at PK_FD2)yIot32$e-zcz8YbOzb4DkVebp)mIZ-2508(u
zH6M_~Xv at ZrCNsX@00=YpPpNOH+nb(ybhAz2VMj at o^#bZ}+v8g8t_7MzLioR1TrgUQ
z9ek#7qxNmRZYXfl))Kb#4d-)!335aQ$l=Aa^D%>eP}SV`T;<L&7n1>Yhl<UsZ`~K(
z#%?t!>ZdWOd-8!=x1v32l>~B!f6;-{4T at MP3vgQJZ3iddb!iDgJ;XtXSF&rtu7mD#
z(JS>$sp}kmGc>$?CS~lpNmy&~xOMA7S|Hvz=?IQYwWNAhL`R*^=0i~=0Vsw|Cn|Oz
zAM?O}?nt8Z{70L>Kkiywss{rC^Rjn;YJs4^5po at km_^}yD8=2zUe6(d`8QSwzD*)s
zc at m83zAr+|!DYcU?GcUJ+NT5q!*)6rsKeXaM(+jpPzm+_kwHH9t25UE1kG-?2MovP
zRU at FotV^uSvQ~Hqn~e^$QH*R<GO2<mb+M*@t|8Y%cP{mms)I`%$Wl#K<-Dl-C*o!q
zgTV4GZWeJjH-f2O3!P|9rAdW{SGj3tqyk&Shm(rgnc#e-kGhJbg9eJ=MN2?@Bw-Ng
zthAEG&ep`Sxls%0zGo2~;6GC^lsl_ at Qpo{(Zh7nL6(ppK8c3Zul%PHPr`I|7aAGun
zc%jT(y<tq<$-Sv>y#YJuy-f^FK45J=)0QYd$lm`3AWVt_#E5k at PIWT;n4G9TgxJgJ
zq-2IAbOYr=`3n_MD|A3950S{k!H-)QFdK}$eLvrX=#@b4h}^d#5j=M#^&L>%TN$56
z6qD#~Gzq}eNSU#~)L4(U-H8fH at P0>s=0iQ8nQ&Dtl4!Pwuw|ax&k6zidgXPlpC`i}
zZk%auoI;&KzqPW at 7t4O!EF%hEyvo4Aw&HiU&tn8_&8k=MscYa)hAksbwUpBiRoVp=
zfY7Qd5(F?O5AOSBZkzdC<+M70WB4BzIH`wR>Dr|0(eI<x;SLq%|LIl{+FZ+j{u;BE
zuMf(Hd3$;R2*D{&75XX}*qP4$?-EIWc1kbAvezs{X~tc_atfLrwU<y!A^y$3C8R#l
zvtEM1yCsNaXY<1rW&PrwSFBDYQN*@1;(s`N#c^Mn2&2gH_LE1->f8eZ57p>_;Tw{l
zCz?9+bG84=i20;NVu<W-j*EVO^=<@|@>DZ at DVzxzccPm0MT!&o)QM$0rnVT!Wa;?s
z*w*6F2aOl*h*Ecd4y8{!5a1D%e{{II>zZ5=?V93W`T_g2^Wg}hrNuZuvPRqXZn3G1
zshC&u#lYUhc}Z%s4dAHV<$1HAfnfy`^HvbB=zT7lN!4d{#&6<`jI=|4BtU`{P0Dt(
zr1FJ>2v~)u=*#fpD09>Z-#`6ixv76IbW8FtobwP_HEFXc?hJr%)AOLIm2q-0ctdMe
z*sxfw0&^+xchVqxhwo4E^2d+SG>MeOJYVz8m9LkJ=mOc7Rc|=0cK2xUnFaXz#ek4g
zN*{l5u_+Rn{C9C!mB8_TZ?KyY)Ni;b92c)PO#;|MSD;B)UOakvV1TwI>@i|;I`eJc
zyxmT;T4G;hBZ>Is4lHRWsZ|?PU{b4wb3eqdh_q`6usUM+ks+*@aD?8|SyXDB>EzIP
zA4OU9G=0OCu%0F at ryb?3zB(5qKmTB3=28DN>C>Pz7RDFcd7W;5rP^fj<U+M21~f<o
z<K5;Q9%StOa%;v)VkJK%gij2R?}vN5OVJFHi&yll`1$d1;A$dgFdR-ehuki;jyOUU
zl7>zCIJ;aCpMy;abWg7+!s5A$2rj0M5s2QF>4nuqCI{BDlo_s~k+=^><)~l%Aby&f
zu&%n7eOsq%7+6z(5B$<2&);EUuy7r45j+ciFAK&bRp&$>{9i*Kql^vr`+2EqaUo@=
zUi9 at Ay=jYUV)15&CiUpROlN)fQgT3Khzb`sTFaQ{5(Uf_wM%?p*uiHr2(oO5e-{0p
z&H8s3BRK6<13c;a2C6+(LxSG8!qA~ZsWwDa45SHk=nN@;2f$0mdI7Z_4BBN&)T|v~
z00BV$zpCbSd at 8E?qRpYP9mnGUI-YtGq40hPZ0x%^!3Bp9TF&WbHu{Y9=*Rw#u`5ob
zb>ALp1uaP`p7;6m>jr5a-1rxx^9vVILD*)IEB^Sp5m74vjFQrm5TG{vQ;_j3RWp28
z+xMt~`{j{OHFKm<fA(gDwf#*d1hN~%JWFjKqPJbl=DWsMzq_1M?|(1SDd}f?T-~pm
zB~Gz|Y7`de5klAKt{;8yC3jWb#|zk2!sx{_xlrUs{@<z3>!@(Ft%^IT7y-fT930uy
zwVpjdrlac9Ru`jtcoM#kZ^bAK7LC9I35Z<Rd|TaDoWT+^e}Q?@Iz5 at zenZQunqa-<
z at T$V}51Q#Ny`xGdO-0ltdRjwdDZhlME-hn2X5IOTBB0F361b~d#jqw$26syItO|H6
zjJq;{Mhg1J4WXgAHFi`0tybwjHVhJSUK1zDdZ`+!=BR)W$3Zy6-y8l9VZPza3c5Hz
z)eM{|;QVusf2OqSmX}18uyekUs2->l?0Q(C4*J}Eoo!3zy1)sh55HBz7j+sYxNg*H
z#GUV;$^v<A#Ry6a?XvHzJ5&47M0MF>+%FAz$sP8)%*)_Z%f9mUJFSDvT7QxDZQp9}
zazLzQr{2X$W+N7wPR_rXgO8HEI5Xq><l)n3AWR%>e<1NiBX{uX*qS&&Dah}2J`*|1
zSbY~Q1UR*+qzEzr)Ee)K7l2F%70e)BvZVzNg84>mAEm$A-6b%@eu{+75Z1knD=ZEX
z;;5POle6>SfuxghF#nZz3W7UVe*tYF7g0|88y^u^yo0oue6H6LIL#9+CT%f-=LK}8
zL<f)3e<Ft=#GwvM<Wae$I at lDKkou+hd5!50x at I+85rG%u-3|Pbr2M1Mu~I^!O=!8H
z>zp;m%7aKr-R;F~N|Tu=s;2+>Rd_7;K-xM4Hl%UD(0)9|2BF6Ls;61Ta#w)$7hrHg
z%^(#&3rze00T at mldGwVwLNv(+#VAhyA6ux9e+k at yovSh)j(tLdEPY1wpG=oaqZ*$D
z%?i!uml8ymH^6i7sYmT)-yk-Kg%a?*NYTeSD>)_Dzok;|a;DGwoGDm`#2vM(8?3mu
z!~4;m$03NlQNB$)PU6dQJQZ60Dz0dAJ`lEMIiVtGXau`G(=Bk{3gFRjUh%>-t~&d2
zf5gNIuj*HODKez?XQKfSkJeX2c5EN=(AqoBq9;ma&0<z4_^l}^)<&&QU#hzGxY4~u
z8GoL)jt{%VLHgxUyZdGpivRe5<n=Bkx9Wa;gyQd8Hc#na(D&3MF+1C at X07`eJQ5m+
z_*UmoxFH`9u)YzJ$*_xcU8wbC!2i6}e_#Rn!A?uEH}f8pf4~s#W(KORL{>dN$Vp;=
zJNeZ3+>*6yLA`aSKV&+l%Kz8SU=al8yUvzgCmn-_S-<58rdBa`itVeSTE3i(FeL%d
z64hP>9cqVdR+*hVlx2HWS%XuVjL at 5F{@k7YtIS!m;t`NSoemLr26ng__x^pvf5Tvq
zIlgTlIWHkQD$!Y1b6Tma;EW~qg^u&mOv(npeiAHva+Jn@*nxom^J3L2TsV!BOW9Nu
z9Fa&Ids~^;SM8wwFVpk(;_xxMi{LLVrPN?|7p8Or at e*b!jM+iOkO=gX@*X6=A6AEv
zLbt??XBh=^?4k>?G3t{;IWTWae_OwArIu at LJ9)It=PHLMNd`VdiIELr$2CWr1?W_g
zCKt$(+go!yPe9V>tk4?DoC8dp^hiCOAS_z)n7=~VEZVtHjilZNmf6FYJ)|pogw5uO
z!UbG3P;OTstLbxrKy1G!KtVl?yQoK-Vn<g%tOYUn$`4;DG?5~$N8^jAe>x&~epLdi
z6<6TFW?*d at VGm9U(c!GOcl)rxjau1Qy(z%?t)k<i6J^E=vzBQzNxYcFp%z2=6>Qb=
z9_XDy<*ZT?gw*pPJFIElaJ-;P$+f9c_DF5>BGCbalwAEL6*gxG&D03|pz1{@vSjG`
zSINMeOe#ue4%3NSmMYv8f0D2DffF|!4IgT~qUs}p7P!G(+?&IN(e&9q8ILG+1kkqN
zZM3rD$E<mryfvX$J(NK;(eG%m0?qSfZLa{}Pv4>$FdXV2yIvki5a<H;ZF{=x4t^&<
zTPT*Nhtu$I)y&45_^c7w#E#vHt%i at L8(ZeD5a7UaLKEsyrpp~Of7pI(2_#U^kX|B^
zDh#4_Xi{6$CZ|aD5$12J2e24~r7Ym~MT`c`OIHAEd>hvkV&)!YN5cOpkneLvN{>`1
zRp$c+=lbIBY3==D$LRN&t3UMLQB`fyUg)$KtFY3%q~%{J?nd)plk6i}6BR>2y at A~8
z#%1g~#>1p)!qpm>e;$-gU~sbywq--Tcx++oo(Uunw#Nps(V#ufbe^)GyLW~5*Tg9M
zd*lQ+Jn+9jc-lJ^(M!>T9-7pTI0=(&Q{1|A-Kzd7gT|P*;0%gkuKWID8*7Ra1*@(<
zIv-oDu^a0z>mm4@)*d*uilYA=h(VLhd at H<vFbfl^5DJ-%e{j`vuES8Otatu{IQ3zG
zkMj-6Y+cRl|DzJIMujjW1~Gxp`2=m*R=GD*4d%HeNn-h!c26Faf(Nqa(H5I|X(ytt
z?Z0jN23Sk}R{!Z8jt<(DtQZ>HWM&=}n;J*V*AhWCNvcJA3lnes*;#&Yh*!DO9h42$
zB!^_?cA^gQe at K~xB~(v at VkxIdcdw36qR5SMsp%K?YfjSLJZ=!bHyb|EyoTO7nMghg
z&dl?MsE>jExLQ=bJJ=62xVQ9D?tG#?=sgfM)x^P{`p&eu at d#64obb$`xXigE_{6fe
zhP4h+Oc*wzyE;I_N+p-q+=Zd%tvWTe36CSq0P1Oif2Zu-J2HA#cf5e7yO^(;0evG$
z2N*QMv?pJs at 2cJe{LbuQdP!rZtpjGGu;MXex^%7F%P2FGiJM4Pa%gUx;0xszO2kO^
zB-^mdFy6GwnUr?K8HRY%pqefDyY_<2mG3QLtd>Y4VLQ0W)tZMv(q at rmTw;7dL(CaF
z71XD8e- at 8GGXVl4t#V#YgCkHwkChjeuRit+z&;I9ex-E$D}0;Txsc at B0w$IlO!o-1
z%g at cV5F*Fl`Ai9k3{F*$NI(+umeV1jZ<CPX6+uw4+tBtVH&h#r{2XJvZ6~bz<_Ahl
zV3)RbuF4I=HWuqqWC*2wc+D|(XBgR%1S4*re at pzkW1t2xTfLez*x(j3D*CN$g_~?r
zaoE9xSxEU0Dg98K_Tzbt5X`_lEzh|)jMqjG(X!B5YWgPGcrR3U;4lwE7Revv{;M;M
zE{JZT-1-v*9*Ua&1q;?w&9S28NkXlBVb#fzYz5qDYMUe_K#jhSlIB=S!ihNN#9Wj-
zfA9G2TJ;{l-sByNCRC`MA360(Q3OhD2Fu5dxocxfOEWGughIVCh6>b#+-EGEsya20
zZN&mX)t7}*BH<<#>d?(PN*S))`cm`THgA${4P$)9{?=k$yj8D|w^Rl(c^Lj55vtQV
zV<kpYR3F^Q0G8Wfe(+$lP%!dZ7 at LYff2{>o-x~7fU1S#wR4ZgA<1{B-XB0&%o#37I
z=WsG#D<<|wWvs#Hh{+AWQ>0aS%vh#0kU$9 at 7u4wR>@<TdvSFG^@Tggj#8GfJq|=V*
zm=t7}+{axx3ve7bh;2EC^Fbka1rIP(H|3VjReD%DiDHt{=1cuzNx}ujIj(C;e|_ND
zEY|Yeu}86{=D=@tKp`(is7R>ZX&es;4Pz>VRaA+x5pQNGVdz{MOaTXAavWS1cJFlE
zod4DrkhuV}gP$K+s+^$z?Ee*`7+=Y$CqV4$zeX=x*xRU>RK#W4MZJvET>OL~I-zKV
zZ;BspF$%73?O=gMP`(q}riob_f1}_m51Bw0IHG;C(|Z#h(8*_X!xNYtbyb{yNYw87
zTWkng`4pqh^pkD{aY(zxRx=ru#gXa at hQ+o9pG}x#Elh(&%Mhc!kJ|Yu+dJ9-OXy88
z;0-h{1R!RkSa$y2EDa&opEt`)<3OP{Yw-mh6o*$_3h=1(Ef#?R`{@Rze-BQmPr&;A
z2dD%h(g0~I-)siHJU$ZL+!n35X>xf(VC)Sb7sW&mu*{vS4OZytN}(bX2zL?5+qpxH
zIpg)#nYK#B8MWx0wptJncqGYIl at Y%BFY@;fInF>Uj|py)H4f7h0m!3vgKPk+ilta~
z(d^mLwkKIsSP5CVGpSM9e|(Ww?w9W6{(-{siP_lBVkGkQE;I7q^}kPM+UZrnO;El0
z)I7LUc|?5?+>_xxc6<Ce_?Q<|MnRPWmM8?nzM_2EDx*TVBi<V>W;i4=geCfT`0cyB
zzXVle+b&(4go<2pPvt1U=+Z!O3!hwRK%5$hA=1((2Eeh_a$4~tf0hJu#(<z|d-%iY
z$PC|L$6Wj~{i7-t?sgMdMDNuzh4#%F6<O|ToIeCHRPW5_H!1ZL1EU>#>Js&)#;N&(
z?-Gy&f$hkq!0^#OVoHpiX|<h;AVr1(jB{<O7~Ge&qM%ja7ujcBho>z49*<0a)w80=
zjDKP{36CHh(YE1jf0c%&2}`j(mc{ie1sA3z50YETA=R9tq$;o&6mN3cXzj0(`=#Z6
zbWEu4WlR6+$o_%lwgkLvOT0-vIL6rrbZn_;0q`Ju{0}oolqCe&b%1pLz7aVhu<QK&
z1NYaL(~M0LH4@^BIBL8~f&_(B^`m;6i+4g~p^VM&?ObdTe`moUf&Q&&SUf^R65=^w
zgl3nQEhx*LE+z_++C at 5=&+7U7fMuB!kwzZ5c}aHvEj){O)^4ZHx+ht4M`~5Xj1%Yg
zn9Fdd4E<|x;%3TZv5tCHv;-r`<iZXP8dF{_7pO787{+t`h<N-fGIoYQN=#a`#BUiO
zwvLZLl4o5Kf5>gpUxx>OlQF0)S+ at 9X4$aSqP=$!}{ZYv*DD&2S^ONRZCpEu|xo5=R
zW(?Tm_YcxHYPX(VFhyC>y)-Kz`<svBl+=)AkT&vLY*H4#T>r<M`UYW_#w}3YlzjOA
zK(dFx{Ui+4!BxIII7`FA2BPk;#0s4neKWEgw`mlVe~OIM{+|*VW?emP=NNNS2*VJZ
zMho}viq^{c0Wzu1{3m*Oy=Zr@*|GfovvbpFB~-&QRe76-Fx5oRiE2H=??|NPXCaQU
zio0>5Cv==lrCzrmt7rrp8s^<8+!oZj7qSv0X`&NDt+vK{5)#ypJK=B at H^>rG^K3t{
z5KYr)e;#NW>(qSD at efwJhc(={J4yD6-VR%_V3p3gU1}m|A1~*SinB<3Kg9l-Q!lef
zqn#A<6Mxv?&+#JX`T~3!ty~<@3;>932}aQ<dV5C6dV*@6rI*3-ZF!aMo!OdwT_-Pw
z25vk=H$P8ntNJXj0>+R at W()b9=`|SArFS$ze^Bng9fmf-zNeSC|Bb;Kd_^>;n;I-e
znfs&K!e+f?43UMhtPPa)@IQzp9*nqV)&@(Xzq25kFZPpuW2J-^?JgGU>fP0^AlJ|2
zjKRRw-cSbx>Vjh+PxH4HI~9re?00jKiCE6_$)iHypm~s|4zo#p;#qrfN<$?r<Q2l2
ze|R%w``(G8T8FMpg=YF#_Te~*cQpVt3RQ%TWaOLKVxg9A%&YAFM<UTPtj6ycynf!`
zpVB_u1D(GrQ#zI~{B>_DW*PUntzI*^kTG%SmJd5}Kk5RN73?7A8AXS%MJ!|o;>jLq
zU(s<e4umpPK^7I-(Jg)0$Jndq5#?UAfBY(ESe0izIUbIgGi<|`e`^=`N}$eGmoQ}!
zMl;A0j%mFyymWMi&2pF^gWE&<UifN0KNv;hdQE4sbP*m^>anSGv6Q0T>@6i}hHd!Z
zF`!SURwQOfR#kW7DAj9(tjc^EB~3(^l)&e&S`EdWt}k-F`+V*?m*K$c=ERnkf2(0a
zjZ6%R!2Gza<=|mJpkV%TiUzq)9auY^u+5Q*4XiB1R8&Azvh8I;EV;@!XM~nfI$`u)
zx*;~%U4cb7b`Xnb)8q3dAH{RYzf?y9bke2bDau7i_LlG+J^Zg7$n??gGc?(52VQhh
zzzEs6XS at e@j9!1VSn^Dal?_eYf4PL<`Fp#Oa3Z;OGnD5EcOy8AB#+C?U|AjO?V~Dg
z9J=1at2(U)awKHMYYr*5sx7xe)A&(k+QGAN!+o|_rsF_q{6CO+GYs-k|4Wtacl<y0
zF*8xghQho%{Lqv=XYPr5715dhoTavkE1#QV{8e%+kk2`ic+_9Jp8a%-f0xU^{hm!A
zb^d7^No)<Lh5M18sRLKuiB*#LBOn^E7yC9d+|b!g5a4YY89CBECyrYGMVX|)8Z=s(
zP$u|TH9y_LJ>-I#LkW6JGPNS)%2!{^SE!NPz?PoNDg_26yZ}H%TQV1 at TB*jb-+&&7
zT;t<5UMy;XeuW-J`Zf)Ue<moE{D)-S#Zawtk^L==3+PANin#aCEqBxmKmlgTu5Dst
z8dT$NyIAK>ha6~{bT00BMxJW|v+?)(QzGLE<`iIhU=@C9qFo6qCS6jot1T%lLY`NF
zR|90Iba at kEc=uSneZ4X*h=jy&yg at MeSuRoHTv2TePvkh&f2o!*e;MreHxT;8wkP)!
z62Abdi6kB(%;v*UVzVlvKt=ha<V^WhQs|u~y&sFXGKuPZ3i6`Bf*xtJD$#-}L7#%9
zm>ecfl%;pWJ57T6k+ntVG`adE47H&BA+a7za!BQL2#m;{8I=9r5TCU>CkmG6rs3WV
zHXJrDz~_h^&xFr?f4|kG)RyV_+u2&a43P7Y|A!R4%oQs9=t~P at 8GLQ#bzN!eJU!b|
zOak8lHqyvlIad5rO)`W_W(v?kk-bjn*BA-EagY6gs@~;=4nHRnF{%280&zL at zte7s
zkZbSNJ52`!ABnd8lOhr=UW8$t0U>S^(~KF~jCuv(<jrdPf1U7&NWkf;SB~Uk0iIBa
zMdl?ku(zOmd0j=yav14S%I9{7Gv6qbW<_kDW!AC$bK4>m>Jw<Erc^`fM*(2he)>pS
zA<qtUZ9od?b<?lhe~eW5&?A^76}0jv>YOie-77Y9#s2whB`Xf78 at 5xsMKszeBD7`@
zil>%UDM>a*e~#tRcdzrQu8d^jXNM%=i=%=a88}TCJp at MIKoUw>IVD(kxaodpR#=W_
z9@`=JkKKWg?7VQxk()ynOfkaMQlW8g4+pyT{Zb(+vE@((Y@&g){B!E(WkB|iT=2W$
z4bug!sJuKwxiE1-y%DQ302JI9R_6qII_lw<UuK4ge<Xo|6i9$#Q*p-rH3?uHcl;&N
z<n}K3<HHkG;(iiMcnfKWdtbbxw!z0uk>!cOaGN?5Y_ at Cek|}|4NApt=m at W)6LQee3
z7;_X(7uOy20Mk{h<|Rkp)c(w}oM4r-$Pfdt5k)?bc1B)bn0x$+*qb-a>H54CO9ySl
zi8&w!e~(Y{Z;MuGbVql$ClZbSF3<~u<MRqQb`Gw$%F17~+5z76wsjkf|HHt*2IQ*}
zAELHMw!)?*8fJ-NyfOT$H+V2eUz^z>{Y42jV*kWSW524RImG}!ws<Dxzj)2Z?asGn
zfa4y#Zng+qFyuPQ-_%h!O<Sa2>}n4wu+=|hfBV^na2)5BAMLUETJvHun8QOvo8)v$
z4eoiy>OE8Yh%4Vbb}k5U8BLc1)!5}7>XmP2rj3aIk}N33e@&?3mOGo(XR=qf2#0eV
zyla|$-Fx-?(noRl&z9Uf{ET%@2dCm0%vb=>=d`0h7zggqeCNtEMENGGbxPj8mV%^O
ze~1hu)4M72n_ZCO_4S`nG9T#OhKa{VuzcY4GpC~j10TBlZi at WO|3d&?&t*=cr;&-i
zzaA__Infs`=AGLFA}j%=_--4OR4_P=vYhT8BjS%HkUC-hM#UMDt4HB}q>_lPLzn#A
zr;#TlG-+47sBSs6?tfm0_$iS;()gi2e}?gHV^QdslD}|*i~yZrRqdj+--Q6Et4ys)
z0b!O=Iwp_6^5m>6pS#`!{RoD<b{+G6R>0ekmDflQg6rDz2OS9GG=2`vxhG+a at rq@>
z(P$VY9Jx&7dFPUpwY!`<;=XyGQmpo<J<vw_+T+8<z4z-M0cmKztpTweaPP-<fBUs@
zo at xn%JjiTzS5+6QYt{VL<gQhW61Ic=*s>my2eZZtB2D3&BQPO=;td&MumfmHQR%ND
zlheeezjDOr82)N|<a at D<E@<PWt-?y(?MTU319kiYW#65<0)~X{7b`+!5`0U?B`1-m
zgF627R at x@Cf*^7a*3(itqwqDRe@|#NWzqZ}4MJpGKD2LG;^@osL0=v!O2>Vv at nfJG
z63qcxHX+od*|<RQrK}>bIvv^IU_ZosvvQ`RP1XHk74eqLHHHPE<fCC1mKvK6|8}d!
zUusi2y>WfaD?*nh#uDt?J)93SPdI2M-GjZ>juSYnkda4$j_kPZu-hbye*t6}lJ3qx
z4nW1fgSkZcgS~Ho>@Vw1N5@;(otym7_ly~-ya&FSb|ch64+~0;%088?8;950S8mDF
zv9 at S$A?>vJG at Yb2GuZ9{RF$1?Ru3}Mi6uw}6Nm2#_x%O2c+X`aXQ8>ET>EmeuSQqI
zf!t;PWV}3ZrDsoDRQY@$f9|LV>0+9KI<)^oqq9s|d at c>_bAC9h13kgW(y-L8Xy=oX
zZK|0H-VE!u#i8{0RA3baDKx+>>;5DR at OgoVIPr1w?2>k9vgq$AYx;XiR9lD_ at RW!-
zC3B|SvYJDPNp@~VP^>m|2?LefxNteVe8NV8oZR88D?&O+cMwnxe=E<e&A;k=!^tQI
zwg>%9D at d8^$!{0>Q;|yEd#RIMk&7F8cK9jF?vbfE300ro$cglH`5hmeW+V-wBSdO!
zty&xHle(NJACqbtO`gHFvnlq=%tdmbO{<U*Sg~p3<*S}qZpuZQT8|o*L?8ib%2$}|
z5?_*GEqvBg6|)sye`CkycYE!C^34EyUHIjPqGsme7E)NFouHD(Jn9+%I1Y>7?A?Gf
za at Bw}m<}o!ikw*j{Ty at yfC-Q>$SVkV`(=p|P5sJq3~34gl~YUM?#(!vho+!kai{+N
z6H<%XPI(jwU+D93d8{?e*ti2+0}@p%-eFl$1ri4pvl^=-f1H-EXErl(ZKqPf&5pNo
zE+a$g?Rb3Ju4f+RlX_O5KBy0S3`{a@%F=NdLZrxcg?>tzVbPLTBAQ1*S<SGd at JNNy
zSZ<U}gkG)f6^KCC={H5UR*y;e|0w3PTG#OQ8~Lc2(M>yUp^#Ub;S8h)3`w`$HM_KA
zs&>2k at j&pYf3!@g-OIBenU`vqn;QGsP?`_0$ez0}8z at Ggpk_Y?nlN&*7E}UoLB6I;
z#zgAQH)1({ylQ)69667A?@2<~)Hishc0RBe645WG7GB_YaahhJyg&DhZ!fsC9Ru;#
zbkdN+9tILq7eUDmUP}`UL?22aDdVnwFgLaTpq+F3f0X(rO;1-|vyA0+x1w;J&0VyW
zuw)KjUqGB2;UF}N^0N3|*jb4n!LvxK;>e=?7B~u=xSWO<EZX;cOy}W`&aBbhBWKtX
zb%fTa<v8qFLAoHnw-EfBhq}H{68URKQT<k~VOeFrXLlR>5MIdyf8nlc@(o&++GEB!
z@=*oBe+~Af$Zl~!TkL=W^6}7<0=|`~-(O*0-|YSQHp}W!0 at 321zT?D~PogzH8$YV;
z;#z~%5$Wf5PkcuBV?(R7S;Ok(UuSkA{0XOK`RbI2J9vf7=q74ty3R96*WlCek&_C#
z#vrD3q8In-w*)IDBM5>{85MuNJ!*c5RzuxOf9R3bWi1OM)0GhMN{^Y&a-?@k`Om}9
z(NlqarhJwzWyU%Rt7dymHfI1jZ|4jKRI at 5v_!5$8>H)_&uEcpZuQVUAX#5b8&Zn;p
zXhn$+JhpCzz!|BJKAmy1Qi*BvuwM5&#|sye>{3l`06`}Si;69n4p~+cE&=68MI5&G
ze?m3gxF}f9w`kEl^;kuQFrY{DgVee(NKfR_7Wqqy`45(vGB5#dWmp>tddi(=bTjqh
z-TyHe{Wi_)hN;yGGVPQuP(T<-!6S`nt>81-?zlU(M#Lo&x2jDLDPNO5Y0RFiABz7u
z!*@-c9kRvxZ%tULBCEHizURIMIz`Mre{!#(#<&|H4{!rj{7_(c%<bKuZ*u}YTXBJ%
zawsqQyuU*`eeCeq%0#SEalEyBt+FhvN!*Ha0Xc)?)J-izn6Zm2m_@?!3K9tJ4^j4P
zTqv&POjI^!FsE22PJ*mZNV==PZz*<^yCruWc?p7{BPCnukz*Bb+WI8!o#Avef0u0C
zhMMtp%HauYJAeU%sfvN|b}s=Zs!x at og01j|)H$mwqY9=a+QqZtZe87?l|f9{OSJ<h
zaXSuwj22aHg=OnWk8{pZv0!_YB1x!<wsXzk723Hl+A^3~Kz8k#=Ldnl0MZf*t8Mu2
z%W*o3I)YZhBmD2n&;N0em*+THf6HHI?H?hi!{i!{mvooG{NB}0L}z9t(^wD^XNK6b
z*YJBR&mb9T$7?tRM!teMPaQ@>{az41%qXU*>}N<Z{K4snkZ2HOCn~7kk*&@V at jwcd
z at l=ojqjH`+dvq0${sp%bYO_!C-(YU`NvkzBzcBT}3?Bkquh(kfB2(8FfAj2bET6ut
zDXL4_ldFLJc%DLXx^<YiLTQyj61Bv)L%yulgI^pv7~uePEt#R(05`VxfTF=V0ghd~
zV&r4e=2{<(vWab7^^1A7bTe#{X0+BksZGj%D;}i=YaaVlxqNE>U7)13vE6`Jz9CF_
zd(V{q(NDa+4sse=yfV!Jf6=)oQ=t;jm7L%wss%?hw5gZlZ{O$4?T6c?j7b{VfwMj}
z7N`f|?`aJ<KRA^!Yd2bk=0S^)7@*$T-bH$qSTU%Vfgh+8rwCla@>cN=@acHF8KJUp
zoIAjnQjpe#q4pPs4}%jiJD8<2xVM_*By;+Q-ulZ^(<*!NYv<Nmf6Nw9|Bju)N(LrO
zH|pP5V8*jYDg&@#*`w)iwnb;-`K1LxeKMMw1qS!q8bI__Kv}J_mN9d1-A-z>mvHj#
z`4pq@&%tr#3UAUGDnRrc59Id|k)m!+er{A9YW at SGP#)H$27c9r at IA-@PUM1e^71nv
zXN4s=L1l44RSY%We`}TWtqf=jsYHokv@^!w1`u!P4zWyICs$zLWL{jghO1Fx0$-_n
zw01<`|2E*jY371cuQ!K=oMdWBTYZSA+zkj!yXbTKY1~#cB_ie77b+O>%?sBaseMNX
z(l?)qcwB)9Do=UnLuiU{+T}ZISDpia^=cGHH>EntHEbt)e>)~DFZ6|#|8=>43hLEA
z!bcZ at W&9ZOSK17;Gtw-nuy@*06(ARl+=oJIM)JgHJac$XQ?@A)Gr4mzG$ZALe*#I6
zq83O&CPy>4R#A+V2?cyPgQwQ%yO}&Hxz2MFi)<72MK$N%39JpO at bdfl<kkk%GTz&=
ztghH%R9p^#e+Y6iq!3X>%K4!L{C?_kokRlX$6E!U^5U^e_#>-89SGUndAm>535%|S
zMTK(53kBHY<=dH2B-EWGSQFg-pFaTaN9cmYiaWRlS?hJlV#ZVQ3bcDGjm=p)vdJvT
zd{QaqC#n%EBYZqNL=3Uc-y30_^c$jztSB(-oc|u%e~?`;6y%R*x^(O{{^27ymbR41
zdOn^SgGgz8kM0Z!0>D2Jr}9o&h3M|P>DLS1>C_Mm*RtqeBv47;O-THTj%pk7de--W
z%2ZO#|CQ8xdWpm0njABl7e#IC at U4`LduSxuf`S|4oTyW6aq#qRA8-JiGJ+I&H*+lt
zjAxgNf4D>dJ7nnUAfc=s&liPPsR~8jNHK`{7IFwC>X;RriBRbctrvg?!VZrYOgXma
zs9%vRhxAFfDop(*h<6v?%pRsl^{Gp$kfDTn4YdrL4B(j>ms+7t021N|{|Uj#&Mm<r
zG)?f8DQJ!-bte)sPV*JVES;uYz}0Y4yibU&f4GsCfGF~t#Y~Jpa(maL{x|d2D>7|S
zgxVp+aiTZn$HW9)M!h^ZmpF&T{0eBinS)X!T)7V6cS>9?rP;xAGNlOV6%`c37~ZS3
zz>6kgJxx}98M^MtY7QG=wow$X9BSUdvxl**Z(AV3jXusVYaZwE{wt2>EGvLZ?{PN0
ze~!VfdE_v!p$cskl$hsDJH*B|CTe*I8-E~2IlZ=Yz7{?uesysdW|DS{;!r1I6}*~i
zFyY#3Xm<C__BrSa1ny=$hKp?<YGqEwn&HLl5B<8qWAo3Fq?)5Aj)akpp}*x<ZLVkI
zM11n*-8>}y&JiX}0!M`rgBdlU>U0y1f4_6Pu3V`ti^VF`7>VFwd8?WTx$-^CGJaoV
z|Gyk&Y;>y-0&0eCTSw=@0JU4G9Uj3vNy#Jz7kAltwR-Sk$7^U?`SM7cVV*X1Jufhv
zyP)ZP2bYpcm8REEk_}a1E&WBktrneHaMl*IJOPt!MPtur4p?#}DWORB(P+|jf789n
zQubu-*Ltn439RYd)-KN88_e%>W{3|okFh{Q>Yz;t at 4Tk~tp)$eS$A)2bh8~%@=6B$
z%h}ol)-sTgC_$uOHKN+qxcc2RP%O_A at 9oySkv8zW1)0G4P_0`9vAtF3p{U)$gKm0Y
zz#(h?F9O!Z at f`FcPbCT0PfFpSe}O3UuOSoy)ayxzk1<7jZvQ1wtUL$LBhK+lgic#0
z`+n<^&_$A>QozK3sQ5S{Px(#PmCnN)%x_rZLtn08iy8A7SOvCRfB+*)fE2d(g)HIg
zEY6Z{B`#I4C#uNeWKFiOrxP<6ysz+?P(<Fd+2!w!4aTfKIrEdOvDX{lf0k~TR at Vlr
z4u8!09jHw&$k48AoT~(&HbB|eTeZTsFof>zkfK3T!}&)}4X5|`-mV4Ph~RHmfu$Ms
zOTw7TresYNkH4hWy8&VEN~CoC+5p7K30x$xY4qF+D(<%QfC_kZ%-`SfrrS_^RudL>
zl~C3?esO`*F$*p at Wx!<QfB7 at kFls(Q`Q;~5G~$0>yGyl_&v43zKY5l~MG)jfZ9{Zi
z*#^8I#4TH9O~>hB)H_~rLqTua-Kkgt4jLpX8%CYltq?4e#ud9LqJK;9CXzjo8Xr#q
zt>n7qxW#@9@*gy=Le-ykvL)P5TQ;o{YQoc#qay--Z--TBRN8d<f3rJuPj<f#B_Xu~
zZo>6YkSVyrza87~LYItB1V}~UP2K(0Jtm<uL(sUuR5Xvt$u*-LCYq7C@;XGAy;D)I
z;FWnlcLF<=<AOo`oD6w at CEgHptd%1D?+a2uB!Rz&^@!O74{PrMDMaxDlW3ysWg#b4
zAZ!8l9D at TOg;3oce at 8XpLym<QWX)EgxAB<tLwLf6ghQwgSv6k__lIBb at iANBmI^zg
zTniNMCP82190-1ZD)2X-HD_{ge!e(7;+Efh9R4AS00ygi5~Sj4TAlM08LUc~Eu5hN
zu<GXBSR}=;kAWF8uzM#<F|omNDEb=LHI;OnEP4u*zy#wof62(kOox at d+KV>bscxc(
zJwa|dpjqlny~@8@=&R#^yeYRV`wnft8U`?wu53s@&e^2vU2-`+A*x4pILm|R4l;C0
z>5P&tm9^#2F`8pn?S&G*l`G`_huzNARhVS%PpT$2N$?VCm;aTutF%U5x||pE^!hIb
zVJ~XxbH%b8e~Wxh>S%_1Hwz!X&TvN+puwlIW@@!ZT+GhY0ne-`Cv{o)s0gNrrX7B<
zt%MAW2R=Mr0T?<8<jVlqw*952mTYJM6K!3DAk&4>6(S;GnJ)ysem5dQf=iEy8FNb7
z;+K|iFy<_n=8+aypotU5Hcm!V$?%K)CLv0^(hs8$f6K0|Dl=>wTB2`)2qu0L<v~sj
zv)<t&_d39cOH^?$erv(KLGK3jA6}QAM&VG*v=#;}V4V&lPB2CV(!38X^0zPkFO_-c
zLq;O#3UEAI1fD)FaVZ`uv9+?9-+KI-F at dOb4S#aqjBeBNu7<^q at CsXUR*`GdZzp8u
ztnz)7fBX400*@I6Tw38h4~Rz5x-VxN`j(VVkuXx6{)CMS>o)$>88g8@$Ajen%WU>=
zan!UACdh4lPdH-O)hma=er#*ryr)?TV<z5kz}~J0(ph)n(}~OTwVN(f%*&j09Xjfi
z6V)J-__asasR&9k1D{ph7|(g)cze15I)nb{e-Px#`z85|eNYhjqvx-K7Bhn5a?WrA
zS=ULXPvi+ at 1k?>uoYgZ1GN#@FA-2Yk;M^vd5pNk?+2V(2O|5yJ=gbP0&U|8%ODX#y
zL+cvJ^X8gfkxgAyTEY9qOo(}NGdU%zWlsmWXUF+0Ho%k-m(bCJg4*y at jTv{i!py#t
ze}K+iehweEA|?A36<vXLJxAD9;RKUALU*C~qsv}K7d{eJ$`k1kq($y)ex8`^nFl5p
zumdM~7c^l1G-D at v$Y`+%-U{5PT|Q0=OnB>cTJ^$jXqY+>hReL5Xn=mn9s2LrRSU|P
zr%E|dfc6ZLYd$&36Vd0XIO9sdX?3c9e`?Aegl1KwYqkNb;Uh%1;P(GPrj{ETCE*G2
z$Ng}pkS}IvFH8{79K;VKhR4=^+p?y8%v0{PI<aoj^fxcFyzPxd`TpX$-Q}%eAZAjd
zIq!W*5A_AT)O3pv%*N&%!zU=ecB<Lz>P0I{#YqS+UzIKug4C3BGe&B!Dy~l%f6DYV
zihr|_#IRgPut^6P9(V`RyD~5PDYuYPG9n**kP5BFC+Ljr{mPA6=#+DaDnqKor*n#z
zuWgeEJ3p{ktCh<5D~WzRw*VX_cj=(<hqBh`X8AXr7dro}fhXbp!-Lk2BX*MT26Fj>
z8sJ*I{a~`6K!v3wdevu>d1(#Lf28^hbNfHYp;P%ANM|*C#HVPy29f%IVOsi$s_I)I
z{{DmPiq7K+VuQyZudl4du<ad9e<TL`G=f6;N-dh~1GHe(57I at F*)(a37~PM*sH_Yg
zY-9b{g>+tP&&t|Iv8VWy1ieb%;XW6bZGc`UoLiw1nlw<?yM%Br<fv+Oe+j=pSI&S`
z>+SdlEw|~pUFXcZ*d(oncud~0U_s0ZmEqq~x7tN{N>O#O7*D?Iz%yH$MRIr28%Io}
z<kPvs8TC#1Km at -t@1~Xw7zOz$8!=OxHKR`j`q_a+Yz%BnAF_0k1zNHxq|PSGV#W;>
zs1Mv_Lk1oWJaa>G&ns~?f4`*x+ADIF{&DlH)i)CLT$4N*y&oYR00a3~-QBZ>8#lRk
zR-!A@*Lrt at F6b0cl#|El!x`vU2xI=Iq74``fZGcehSE~kg!;4&O9pS|4Y8sLM+pd?
z1>}c>Z<i$UzJnBO8kapL#M&a#P}}}(g<F`&t5n~z`A%Au?5_sBf7u<whd|<XzcUG}
zM3!B-?kR1`tcP*dTYC3fx|k;;-2YGaIZ2bBjE=hg%H>4&E^5p+JC8~L6+KAmpi#Qs
z+W2-Zngc(AS|{M2_0Wb~>IghF1(3V{G<0*f)3Z057NaS5N6KJD>~U*e=j#<yG at CmP
z6?I0Tm`;=ZA56uJe at sVgCes@nQn4 at 9yc-w*p6;I`BSpS}-9%(m<FR#H*>WGVN`pup
zta=Hq_=gigY}~6m>wH}dmJ~c-QcNI=!%MVVocC2>n3b$pK<05~RQJn;!;x+J6Td8L
ztw<L%cy at J034zM91tNDF?agOtEtVjCR)~770#?^SU<`F*e<Mdis4dSX0{rT)Bdc;k
zNau4S9M<|!ggEm3wya~diYQ?_`8lUq%dl at dX)JAfODJ^eQw4>}N-OL<ySsia4LLZ-
zLT~=n{ZoFF;#qLTM_`TiytA=5$*_DUxjHvKcP?Nka4PuNb%Wg6xtJjfVl-PzDcCV}
zhk2=0mg7TLe>39V10-<;6E4o5d?Z|6ONLD(T#APeK6eSTQ1BT)8WCa>d1m`8{VU<4
zsfe?<wVHW9rZ4m}fSMTd_*&h-Ees#UKpiV#wnFmg!#{FhJs+HeXL>}wYiZ3bO at Kg7
z&UV5aHB-G(e$uwa{-Nl+23p at cw#t_T6p4|qgvPzze=EoEzl~&S(+kJi01^7)KT~gK
zud`6wUF{$K1(Y}siB$V at WO3}7)3rwj;l((4^z8hzOfOw|9|a7dU5qctdLfFIxZYeI
zYs06i0jfDC=o%Y8c?9?gU?Xs33kC8$ux$mU&52sDR0dmmSM0xT#|T2kAnamUjUdZP
z!a;y4e~&eg4~OlXQ-hzwP^Ee=*DX-NQ|UunVnsGQNvdlUM}Fo~oYr)8W2~7O^BA<>
z`@{&@a4=9Pr9&zxVQ at CP0yv(pcqqsM=}8LkW at DW(oUeR+y*UuNGP+$RVu21b5+4Fx
zQUkMNDKeru0_oB14Hw%Al0fXHCq;01yDM;wfA78d0Xqf&hjd#kk{&9gbRG?iOLuZ1
zX8 at rKVyC(NNG4-ZxtVdv5tr at HZs;N+8O?VLxUw&(8x`qBk9re<_;9g5;9^qP+f~Z2
zbj+&gY)6^<hlOBB0eZ at t_IYF-{WLSsIPe9Rjk4s|NIC=3^)?J%HkX2-4!>0u=0e at 0
ze{y4|Vi&gNdWz#rDmsROinBsYCiL%j20-CktBm~5$O_1tI(i5sW?L}PwH~EinDW|1
zCD-cE2NQ}lqV#MWGbvulY5K(M=XGKp1=rIzE4HxZt_FCm9EQcZ{Z1FTL%Moz2@)M)
zie-axOcV0LHD~JpBg}KtGQHQs(m!?Oe{jvrF%~G`CrT)9gCbOo`hpXkr{x{HLJIxm
z%*ju51`a@=>_I=2#q_d$J|C+Jvwy>vr1L+c!YH}aQP3Z$5IaH4@;?ym9h%&kkd$^Z
z{A8`kBqj#t!zWGPjSJ}<C7qMS6^lQaqVM;nd%)M)Od=socL%nQXSq*Y-$*7Me|VoB
zv_<j9E%;W$DY2?HwY;vOiT-nwWsS55Bsy2T)4fE7C}Mn^ZD54Z9e%*?&i`@OLJ{b$
zMkprKMU$}1r+@$qavNk`gS9Iy5sx526KP|zv5!JL#+n!OBjU$@hznY|gJr#OPB at 7U
z_-Wr8ohuziV67%A`aJYXhLPFie;n8VUW>7=^$21I9)f(!_lR+H)%~QPEPOP+nmR=v
zs-Tt0)UxO10+S21Q&gtDslT}ddg+(&+*3A?@~!qD|HTjH6sf<47X at HYp;i~3%cFzc
zD_%rj5dvZXNQKn^QXdY8%IGL@%WV)_IKu^V-2f0ZaUS{nRI%uY>aQKHe{mO|!G6d$
zx_P%H0$dy7sRODBwk#9|Y<_Tq5~DuxRU-J>rFuocWv10Ah!TRFrPHv5i+UAwx2xwY
zsDw%IjE#&pWIv>h1ZlsRZEf~Sh$);v&JaOjnefpo&Hcl3P7eSbOU4>J=czEg$du;3
z#2(f$@kl at zB8jLl;ax7Je^<+w?X^}WgG3r0lxI^wj at My-&pGd?__wD?DO)p6WSBb#
zAng);ifY&iYpM+C^7I^=NO22X80~D%I7>)Fx_*r`<V{rME>&{6x}VQ2%Q!2}o#WH%
zfkA1sC>U(L8PN2EJOtZ=(`6fDj;YS{BG}Q9pRwRNoPFliF_t#tf9O|@V<f~PgaA at e
zEm)5LMcw1l?dfEaX|{kC^@2u&-BnudlYuM(WHp<hcv&8D_1hBcU7(MssO)9P<XQd*
z;3<mH#4JyCCc>7|6I2I|wX|I95Zi(<7-O6m35&?wdSGDIA_VMb!`BlQWU2}h3sY9U
z=?t|mlv!cN5SQmafBDr0ax6?^>a_Ksk^)7(GWI at UY2OxSc5V60r=t-h+%U?aoW-sn
zUwrj<PDHf{v$OH2Lo=->LfsUBnwW`V_J<b#!s<&byeYM}nvE#b?{1^D4jB(<{_gW#
zS?n1dK>Nm2H7e(j_f+CpzmVunYVY<4o95=~b73Rl*W?54fB2usPxfsM2%0bhkJ`~e
zrxM^F$g3rsP+g<KOB}S>Di?hj#?<ZRTEHOX6Qf2W&iYuVXU)TGQwv<feu>>pr#q~`
zHA__jEhWGG*2rXV?=|n$;6SI}eO*b~rR>oue0UK0XgMGHh&=sfQOBe5qpQvihTP0X
z0Di$#@}}ySf1jLVZ|0-3;K`+QTmAgd@<p!i--(Z$?yp0$rH**|eda*ETUpgDJQ2*r
z*W%S`p;+@*^=Rbx3kaR5b>`7X5Oh;EfLC$X&~U|YT*Xps`P?ZcpgF|ced?2{mhG+O
z>IqL4$Uwt3t{S&o%0z5k1t*tKy9u6JUbEDLyJ>QSe?{2ymc3?+(k30hD4D&?<!q0d
z(?+xSCv+KDe}KRlc5gxqwV`SKtNH~od52S?$Uas?o;pnC29_u73p$~eR6$?mEaooU
zMK~o43`$_kQ#ECu*$Pd@#-ip_4;7P!tNYKak{JAz>D0cwfEL>4OnSIo5rn6s!ACtd
zx7B}6e>xJg5ZS#qVCFY%l?gN8bu=It3s(cUSmZ>AFlOd95e4ArSV*1Z!xGq2%gyPR
zq0P&1!;v3`z}*<;E=c at q)Qf}@gf4>(9B^{(#BlK!Gl-1ehc1O3-}FVCamZxh3IgQE
zjv<g?wa`7Qs;QPca3Gs0K%aU)Rb4^x(=1bKfB!GR*<j;rMxB;99%B+Hx9=hW?{)lH
z|EC+TJmIKf`fK$QDIow$F7Ls*1=_34aq>P|I}IVo#BBj}l_}JZI~g<AO2dX{@j;i?
zfQs+N5kwvf)_?-L%*!1VP-KW!`tyb`9FRFw%!jK;9&xeqYg_fZiR&R at LqSHOR&ZEs
ze_z2>U?s`86}U+`m(4Ozh2|cb>RLJdLc|8+zM(?~egNBK(0Y<VNZX9Kd_!RQ+Qe|Z
zSgrJgx;;o&Y)tRvAE0G?tAui}_#c*?@jPkVz7vNi_b3C3Xo{{6R1D++9i>BFHDudg
z3ldUGH&2Xxjldc?RcSh+Dqf74s7zM<e_0k}aCPjhCUFuQT1_Ex at vU;WVKaJ6$o91W
zKtz6Om#{RW+ai`{Dq>V-t|-3|Se|!n>|ua^J762FDQNDeLlX at HRhyV>{kV-wGEs{d
z8jbSvHkWO0EAJ2{1&Oymg`36zkA_V)eflN{D%mz6h$B=Sgc89mVg|EKry!Q;fAEQD
zmfVKd9HuegFXJBIYe{+hxt3<FE>$7*(Nc6K5#Au1D_}Kt4w9aQvJI`?t69yKjk{`<
zZC34>;Q$NXGNV^drMmfOKWD8CJWwrGWN*Gi4ve_}*VuE>JDKk#(XrNYb;pBGchqv;
z2v7ep#8xNMvb`x(x=E at _L<3s*f6TW7a<iQ)Mrs)<e=pzUKKes=0T_UibrWFL#4VuH
zg|flKtEjR>npm$*x4csC>T90i9CzouD=IQpX4X~*uaXuPRP+2s<&&Fozx3m6clnX0
z2zV(DZSsJHnNK%h at tlo+Z<lEV4zqTtp1rh$>a1fXMpu&oPxvp;4uj#ae@<D!67ysP
zjfYQ+u-v|`bJB4t`SaE%0Q3{*1{kgtj3 at 0d2LuTaRnbj`q=>GN#pU2YKyYxs*B%V$
z&%Ub(e+rT6VpXD%#7Qn*Bg+FPYs9bdDVjgBvQy#J-nJ<q{rICzUe|6tmk7`lKkcE1
zSDpI_zUb<zh8~?+L<Fv?e|3^gD*Y0EB~ZWsQJuf&aZPpjWD{Eikx`~u at U)7BS5;*t
zD^#Aiz4&PLR#-@?>SR18TQ%_l(}$%9gyC?xI2qQ{qw^(X*$le+>$fG3vKK*PyGYAX
zZ6LsHykpo#wHy1-phtr}fU|%B*ZUyN6WwzMKCad8$VyLhg{8zve;YJGL;}UtREp<I
z$AC%ARLsO*3_(iaLSS026>`+Op~i61oZod*s8QDy=hPo%En-pvL1P6ojp|*=v!;C?
zdl`Qz#e$3&Bhk1f at 7x-v4vaTPahx%EO+Uos+|`4e+ND&^EcH0ZmjTNeb3<^98N*w4
zlJU at A`*;Jy6mgpze@**GZXdQg;C?`HZ<5iOo1h9Ev7Ckz6{%uQ;=wY!pNwE!%b;a9
zyiDx{{I`fOKu#MPv?xSm0HaxFDpsK5A4{3-B5R)Wkjli-Z$26GUAAlfsFa}xAU#;s
zChzuLZwLI<7G&SD7|&}QE*SkdMWbr92a^6C`sW70x{)uqfBQ7{Yndz#=w8|FQFZz}
z=iH2gbyhhBxYhU5DL+^T0hordvUG{e&W#`j(*4B!f+OFrvs$YH^U!O+ZP{wyJ-**d
zX9*Edx3QEve*~j<V}L;RuGf$+*;|z_fqkya97?L#Ung!!RH!}%DQU(SXB6WvTLSM<
zOXcQIxLr_ee^Loor4*+qs#?^Ja`P>}JAQ{<=pf4{?s>>^32(Fb#xmK0822_%kg!gH
zKa{?lwKz;4UPxKQwq&4?Aw{?C3u!5Dz%;}QvkQ>xC++dv0k~B-DHJy#CR&j8`sJpJ
zQ)6*I_Y{Psy(4autmyWB2KDJjTl?X1%5ApT7<!+Kf5I&_FAeC+N|j7^&4fGES2Hoe
zwq%w%otX%B_MFzs)^YfH&ti-ZapmhX<5xG$!Qy_fs%iMI)cU6rzQtwAnNi&SQoRI|
zmU at AXKV}J5H?U^$1=uhK&NZY4?VJDYNlG(#x)gFJHnm9A*vAr_CXagprgPd<37!io
zL_t(!fA5kU*XQW*7F0~M8gd{61^Z0hVyG%Ys^D^R3=x8Ki;YB`IeyK?Zw)J6uFYrz
z!uId=RyJfGLazW*RoILIVU7wK5hpBSwZQzMLK1ybI!RC3#;}fK3cx5u7qDM at V<KW1
z_weUfbIPlJBl$S)RzHC(eepI<%^Tm at 0*JYLe~cAv)YuOJAe#aGYB#UfbnkJ7zs)%Y
z*&GQE<8EmaIqg3xo%I0;7KM}F$t<X&xgYH$CDA?Xo{~7vZ}^zYQ$C}0%EHt7R%cjT
zwdIp~sX!9V%N8CQ&Cg%?Yp#nO)KNX_ao?%H(^r8}kJqs#NIUR_;R}<1dG`hm`(V*@
ze~(jt-g`h>_k<`ZE9lrrUsE=sgK^U&OPCqlp>*hpbUc(MMt4b^kU*=xW3)Dw*RnCo
zAUcu_kt{G7gou2{<oQ#?zz8##Lp!bdR+dpp at 1Q17k1*G0Mv(U0laXujh+r461rd_p
zC(tULVYh;|6Rcl)em at F`z8oDu)u^ige~MHB=cXb`$11cfj~DASaD&~Mdl$X5jIMAO
zEhkjQk7hmDn>XtS?cop at 19(VCuWWZPVG!dIICLNfdJAgL<H<FTi;usHFb_N)V?jih
zX%!;=apEo%p;NQiSj9kBWlUD!)+2>?6sf7((e#jQwtsg-<GpZ$lX$(5$j=m<f5RbS
z?xaRt%x8 at YHF8GTk>)nsfO4WED4s0NjIhZ;$`ltQ48#0uuvDhWlJ2kFJtqN4>+Rt;
z!`<Sktl!4fKvJ%mG`T^I>Z(E{?F=6kp%|y`FB=8|uyq9*5bf(zfnNxU%7Eo!0y{MY
zO$#XBhOP(g2#jTgMEIL5K_E0Te+bmro)>sgQ{K~s8fLI^l3~j?cf*@F>0t+ZoUjh)
zL8jXaAxuZKNyB5Hp!EfVM0+FaY{j=LrjWdLbIIVCx1J4BSVI;C?uyh5)9zMej~TMQ
zQUHnoHcvn5ZlvsnNa&>zb?}xh&?w?8H^RY*J<u~ew(Wtx at A3JWK&w+ZfBqfy=(bKm
z8cLGnji<x?ivIuuK>WXeq2n*cefHPs8Qr`8po4bkaVpg_U8e%aXp4GGu996R@(4DW
z5z2spPgV*n*u%B*+fqw`sf=PtzZ$v$soH0R-Z_!=buHxXlLeoLWT~Dr$XLFBbth%T
ziAa28UwSjbC*BJlKFreSd45n)5PwDMUbGIyiL+AquSRHzL$1*!oPTl{Q9+>@rTH<+
z44}_4DDJ?qJMSGM?g)qC1 at hcEv?yZ5Mv{3X14i`XN2tVD>R3-Hy5O)Z$E^7m9`&&f
zyiApNOvxd5(zQy7K|k;>{2jm?99tJ;vuPKaY^SJMe)*kH&uX01STt2()qgViE|5`8
z2X`>gbV*dJz~|S<qHt)+%@r-i2!+e@*Zp6 at v|MY1fyegx(Ly#VBgwQSsDRbvpEN*k
zg;b<wTBAgD2<~*raR)@xfns0#sTIH_jh~q8P!Yd(``8rsf7B!&R90TsJAePc+02gn
zezvu>)Yce=bZk&)nIx0m-hX)u;~b_7`Qsqyz!q8|^buGPj%cw=O%W1l9TJ}=iX~Wl
zX%!ADq~>7=Xio2=1NoZnUTPX;0IGe(UWNu^4v_(J-jSFkEfu!0iax=uoY~Zsd3{S!
z_U;Htm+M=(=vN~B;rASC4oi>u<da4)p|xme(OJ{vs3YD7ha$c>`hVfvLqCu^+C0NS
za5^Gq?pW_$EXcO<QY4D8M7N*DW2M)>VPp91#W(2HV?O~u+rmrx9E7 at C8yCYqZ%yfN
z at _gsxSB3xTWm|yO+;Ma7N6bw<$-;&*>EZUE8$&b@<-kgKy=c_%(U4;D4)6^{M1bEb
z3hP!vXYk`mwbs4Vs()0ZE#YC7;aGrtMh^Td8Pq=khr`K`IJ*vlW73LkQPdQ6b~Q#i
zG^h_x5eS~Wtd!U5f|iH=1`Z{Hv9M5ps2^Xp(2WX!fs*L86x0V%XqD`|NB<0w`u96+
z#c>9@=}dS&yYh4m!lj$4x7Jvx?sVV*4)R^n&VDcJj~e2Y^na{8bPN;hshBUnENN)*
zx|UwasTDCd86;9W4*I^rWOuRLu69VM6ux_>rar=X3Yw3Aml|P~y)$IKNF_#(ZS)UB
zApkovup5S;61#!PWxKs_jr-)p92=cY??z?9#R`s7*yMVAw09jUOE~2vNGSDX_d|Lz
zYw#OSTfU)2fPZ;?5D<_UU859J_c3oW-#G#;@hYYH2^&$_NNiDo^QFfuwySHk|4!|$
zPZJ?!p#}<y@$E^SmgVgVQz`A*+Bv{&A*@tc4lKfbNCZi6QPOUrl7U^Q7pRYm3|`>=
z7l=of7sJoH+?Cn_UJqV0^9H4rO)y(Ay_~$6kW6olKYx#E9$R_bs>t_PU&~QE3}2JJ
zbuOk+P>RH(M!g|)N}L}eq5J`GSY4(zq!6OoHV1~1-GG-9h5xQyo&IStY$rBC5idy^
z!HMjIzv#t|DWeVfRU5zu-{T%8#yReDY}g$Cs==v<OfHIV+fM!LlTPw%YeZl(%9@*r
z3{+<D`hRFCvJ1C${@Y-T23|?(btEVSxCHh#%-jpPON}5+MBN7VG2Vg&u;^|iWGy!w
z+D;S>yGznH=B~_*)Z93+n>>SPx7DSo7HUg=*+D0}N!nbz%f7(Cd_5uph9l%|G@)?*
zHGQ2O0n`{y(|6E{2z<vds=l>{!0 at ET?p)515`Srd)wI%)MgVb(5o*6sr{b?|_Q-jC
z6J6A88c99}PGq%OP^w79?*o`uo?w{FPk+3~zn<{zJ&^aW<n8Ab6-ID$9cRTNa4r?Q
z>+f6Z^i8?n_JSTgA0e9|X)>_=o4KVyu%QZ9KjKiQlR#{)Jla|B!&y5I1lc4Grmnn(
zDSwfuS=#GrH&8NIJb3U4he^>bN2Te2x#`*vFsx4VokWxihvaZsy`;&*7l2l8xfem(
z<L?!v{OT>dt%sBkZVipwFWf+s4er;PM0ULi^6JXkBFqy>;$6uWf+JJ;gJ*#g-2x~f
z6#>?b6PK$&pyzjY&ncJW9fyB{MW0^@V1I)swnDrcCuHT<jM5St2#{(oqM8h}TSFp0
zhPHcAtuw7)avFgfyy(Dr8Jv_-uuk1Chiew~!M%4^hm&H`Vc>(5_Q_hw0r1g4v%aWR
zwe}O&SLuknzy`;y(J6x(z|Cf2=9|2&#|mJ*&i1T9=qs+*U}+_1(H36cY#p$7_J7mp
z`9j~tgrWN83c55tq8-NbxWO?R6S%R{=Z!e?MiGD&+dO&yw`>EnA_;N%>suY}xK#NX
zeCm|AKNtL;6QL at qu^|Q+x{VwG39MZDXE+UoEZ at fUH=ALUjAA1u0Bp;=OY!+ybbO-V
zDG>#QVQgXGDkr28Q?Y7A{x9%z2Y-~r*N<vcYqu)D4<2YZXYR3m*OIjQGvT<fp_jxX
z>$o01(FH3Y7 at U}P3jEQSr+KVenrf$a?rqg<oA<m_fXHP;#WhQ-z at 9?YGToA*s|wtM
zkim~fSJb<MCi>cC4Vvt?nOKaY)~`l8KVw)6ENqA|?Vt;!RIw&67^m$+_<xoHKZFPm
zq&5u_4o11_3jG2@=$zz|F~gLb0#B3%gc;LkM*?Azw0IwM-uX at Ilii_$%BN<%@Vw^w
zXjc;xH2q9#ld2Cd;!KIo!vlBf=@oA*R at CoGsFf3sB*%WZz{eOJB-REjKYa6$W+IR}
zZ*QRS$**fncy;X)jer}L6 at P@#F^8}X(9>xO0+%aQq_u3Ba;dI;E5Zwt!p}U;oRRj}
zSau<OeUR@*xB67$_2>kg;Tz;BS^LS5s(s{4Ny*d)pLmOl20$Q;6rl~QiNG3faOKgJ
zX`V|L3WxD=EcHJAcgUaUa(jl)0}O&Y9ny>Iw}YL<!e<oZH+6Q%jDKOdYQ{Lt#yEOK
zk}F^ooF@#aZ?%2DO^@sxwP2*Sd2_ at uaoStc)`rcl9xVHlwamy8l$*vIJ;ClEUf_HF
z*>gcDpuGvmN=-$D6?3!MP93Te6UzxIZK@%MfmZY`cD7l0OZZANU&O>1-?ZC=`!GbK
ziOui?SQOwJNfrzQ;(zO7fE>0Wx~go3vlTb<8K02rAc8=a9CYZtRdTl0%nB_wo{RY+
z<*HOyXtb(tNt;QZ#~5MJ3Z#x%g;8N2Sc0O6PS^|MQ{>|pXxU99QSXB$E0t(J2!jz;
z0_Uf)YrNB5k$diC;~?}_-`Jv-z3gjIxA7#iW;Uoi5WDkI*njN=(`$2z=%qW{=Z&_4
zQTVV{PW!k;ad60JDozxq`IbTQ-ulbw()0?rz<SF|^LtY?D;Lf?hpj~znW0pu*NU~a
z{I3!Z{T6+pg6yQvjT(5hajwMRwB$TZ at k4Y#YF=o$gI0%!-oZMEG~t{A->O=OD;XD<
z^aleaJdfPN4u4^Tq_ at drl|Fr(YNbwVncD)mF=Ih;b;>2yU^fTx@!%*1)P9Ig4VC%O
z9)oEs(gi at Kaia6!nI=->oR>a6mJAjLjgVyr`Y-MNq^PHP&?E4WsRQ}qTXH%EEy`Eu
zF#ecEbnF*u9Aw&VtGn+71i(c<Z-j8&y_CDnGhJlXRDT&9<@pU=-~$I4=R>x;!4*R3
z*=mLK;WXQG+c&iSv_n`<KbQ19vyn<WqV~jZ?tz6KItFwmu|;w~4HrT at M)G4%oIDDA
zvw+;6iu at 8|KTbdSe at V~rI@@}Rtj+LL;JvcDZM`{i6t2X&h5caE^E%K=-^)3=hI|Gh
zh3b*>`hWZF#mFo|tDG22 at P{=SL0`xxG$|P8_`$>KN<-UCivD*;+dn}pO at z0}O|cR8
zvx4kt&qr5?R*)V*A1{~w%Nj#hMpg~xY&$Teg}70)GgTpwlwkXqbK;x5g1BBq<}G`5
ztLG&*JG at cB?g^U>m46*Tj-SU}?44 at FDnNiXpnp!y>fGTQeoQZf0W{M8ri)04y^@H)
zQ#;Nsoi?qz-JpDVS1?E!`yStZOe430<so%3UgOWkE0-t!MK9w=^*RAc<eFsk*nDt=
z%NR|AFdrLQ@@U+6qF-FoP at kzXz-$C=eI0jGXGr$PPT?d9OWE~?p6Oh5X?X*~>=o}m
z*nh<vUVLjPBe*nq-4K~3{#=CCseo*P%i=V!CXr!Y=Ssoz8PZw3ubyX#9eLpl**Cg1
zymkS`2qQn_Pmv#+v&y^rLU|s!r*kWsLHb&RFrKSa_BiY*4{|b3Gwh+>1ir|GOm|!o
zi%+W+F!OAXX&84?#Pe6kiTpFRN8nvYjei!b6u5S|{H<A4cg6ZrYSfpAJP?mB91c!~
zfj|HJOu>U;k{2rUkXjCJI^JA~D!*?qKP*F&>IX);cI!vVv{(M?uOXRC7duGZMK{3D
z({1WdgG_-KuRNd~?9E9|cwAW!Q&=Dc^@TtCs9QM|7SS_;YQu8lXQxU{X;1iJReui(
zkrZxFKQJ__Pl~kvW<KGfZRiISpUS8TNGXmsGr??4+g~5M4w}f~=MX~Df^~aYpSCF6
zE8LLFQRH4nmGzQJ4wU>>m$fTTFH%%8z->*&D){CI(dU|j9rVkL(5iB#{29P_u#WI5
zxYFb<&1y+k$b;=4D_BxOtBbg%YJX5k1jKom(<l`k<-Y)>Z7>^0`%{679)$a)c<XRE
zel0{M<hCH%6!yStI<ilkLbX#)Jd0hUo;HS^0~iJKGn#%g9pR*6xMO~e36>HeE*saa
zqt*HTF+^g(!jeU8L<9Y=0FP-&Cty-#B3r(gf&78#Zq9!9U~&pDWhFLD#eaE596eCB
z-Y08H<K8nE!|fjlqGWqJe}vbY|FL0ATWl~j`}9D)42C!$#s&<)0;)i6c-fEBG?t=m
zD8U@^I#4LRGZ^5SPM4;qgU163d0b~5EwlJg!V5^(-xtM7==&NwlBybF1Jz^GRLhn$
zLfE#^9~e)uH4r{GO8#{;#ecR}e>dnM_0*m)EGf||(~dTauYq!Xd+n<lFIRH+&#po-
zyvj#+eHs__pLZIQv2=jSo6gU2<t^XNRcN&z3Y2PrtFY&DP(W_Rs7^qftoV8fY;S7d
zvk@<ZL+g_B!9QvXjK~|UF_-?IGO$xhUt<t&xV6IIg&5NMUwKNqk$(Vz2887G(6FHY
zIJiZhfHdToGE)i693w7E3kQ0_Ps$hUMr^W<&XOpqqjvW+WlE8817}@nGy`(zL`Mv6
z(ytfJL5P at OOEw+kG)hE~U<4v<X4 at oP#Yb+!)Y=bbidhL~*GNU~C8&5fXd)kuY3T`=
z)8cgh#b+{=6r+p$W`Aw2&J at -@*|(2Fe6W8JcO8<S=|{jNKAki;d at 4y4P3AD&gnXX!
z#Vrx7Q-!dtCib3I8&M3FfmE^G0CDPZ*0LiI^CD90go8By5?i&{Ci|U4puc)faTS-I
zCQws;R`xo_`cbgp&npmWYQ>+wbbj*F(Fjlw>lz?ph6z{r!hf|E=IxQ895Mh(%r%mD
zgcn!EcCI0wo_9-w-y4mV1r~xjK^7%U_^G#i?=e(;zbuO;FpqSA2-BK#TOH^hGX_MC
zwrMJfNrP%^ILi at 3PR4Cj+gmj*xcS6u(IwWRH3kDW&+>1`*L<|{n=aRWLke+Kkv9b}
zhJ(7mv4K*NJAWSIw00lqIP#E at 0rwsC=6oHCe>u7&uZdJ0d+$Fj*qf}Q2qUAUT;ntB
zE8OD1&@bfsraIAYW^RPsDYh at dHh<u`%`R~MCj_kSNyL3(q)7P|!K+wltH&Bo at 87UG
z7j>(jTH!boMDXpo6KTS}@*@T8pq~RfTOmEO9d4wAKYvL6GugA}A at g&Vm8h6UlQ7qR
zx%HwIvrxf7<G23Knp}s%oMmoK?w2l;h_*Y+PmivYlqA(KrJIb(4lz2@=Y;V(uh3^$
z;A`Rx2EL+he^{2C)!e)iB0pq0ZxoId3!b?emXyd}`r0rjhz;+`A=_EajgmQj6ERrs
zpdy<BoPQBbMHwKDT;#nz7(HED?qNwyX}QEFsFNq5?PhMTp#bebz%jip43RJDfkJ0D
z6P?2MRQhoz$VxY*-qj_9fea<o9|w!j+*u94EYdeeEuI8xv)(^r%mId03Tfr+oUyGM
zUKAk9 at cp8N#aqkum}~GnPF@)rCmI{r*Z)Be9Dhs>{3Mt!?tu0C1*Etac0HO~^%S(S
zK}&vFTsSECTn at wzYxkI)Ve5Q`@!5W at b>mPlC>q*;n!k5jM|T8ai%ApR;RniBm854E
zLL^$F)Kd_VlwHxj;hy}{47bqbWmB3?O(=Yv?-UYIwvLB+(a6l1DWVQ1c?$;zTdX=t
zwtx7<8W&4P1L?xhDfhS4`xS|DOl at 17j}MlFv<w6x6AL{m=owjhjZV>Re^NKApeCXQ
zBv(lT at E@JrgKroO)oMq?^gKa?;xIVoj&<7LJ;1VTiMAb*AGYM{AE~Q4ibs(_KlIoZ
zXFau6ss2oZtSpq;Zw;fWx&iEu8;!j-YkywCd(tRSls}_iIbAs(miF|2wv4m6b05vG
zt}MN0ImkK#%;STvxtN;jgHs!UG9;oL0x4MF`3Zj)e!?pCFRivq1P{DN{U>t)5xTm;
z2b1%isMbY4vD at ed_{x-TD(ZAdY#cSO_^_2v=OI%dh(N}p_vGD at B8;H$90&CSsDH at u
z1Gxfc>le!BA}kMie!b|^4Nb!}Vgn=fFYEz<8KtQb=^cR$dhL2ySL+I9h03%238|a#
zR9zeEu#Qxldl{X0lEdkc8l^P1P`887o%VVYroiJU^@IO0nd|^qV;xt1RD*MdXf)`-
z7u>oeFrJz9cmx5CEvO;_Mh;LfM}O$Z+x*J`YX~N6^E_HE&E9i<ewLi~`L=ujTI{H^
z&79p74dSt>wD~A7dB5Gv*~u>lX&|R`1{ZrxCBl2=emVM5Nhn3m{c~Gex==FOY*=&+
zK8jg);3CAtr!Z6b_wB>ko0?2=i6N)?i;LL++zze&`>L`&-!ZHpfCAlYWq&9%fWW{J
zRPl9p{3Yn`1Dub_aUUZD!wCGVADS5~z~+_m$<neF+pS+z0fM01;*aj|=f*`Ev;!{O
zj*_<?o>2Rc&jptcxk2T{L$qSl5IpS66boC<kID$Xhh`&YTrnAsKvN8M3Hn at YYo{n)
zvTtUR5-WoG*9uCo@%)Hhcz>qZL79kjhHPfZO55M$PM)xoHCwNG%a^|j^QJ at L`9J=e
zI|^EOTiU4P-WIMYcy|)Xw2Oz8p9;e^mOVwY<=2?TFrp+0f)mjIKGc`L)&N3~scZe@
zG-uZLO^~5RmV&+dJf<%RUl#Q-jaHl|`||UD{}KMNSivhgXZU}CUw=hi0@^WJe#8V0
z_}lkZ+t$UyPl`6?Ihmrhr)AI)jMt-twAnr at 5$?RWtl at Rv-DB`8)}j&-$*PJ~OJG9%
zDjKk51D{|^{KF&Dhkm3-OI<pps#%Sgqr?q>5E1rJalL6ZWPV_<t>k>O56%J at 7=K=7
zq26m~xpQWbfX_6Mo_|mBx`0iEvyoRdFSVmbYbDd2KjxP}9M`jcsL3ScTg;6(IpB9{
zr0N8YLkq|uMXl$E2me8L$BK1T<o4-M#pqfhq8_KtQkwI5luxjLJ(`Ji4-;i at z3EKO
zxWM4Oe!mmJ==HAW_2HwOhk8-%8ly<Fh<sBbVgvDG(Q}NC3x7~$ls`LU%fG!v2j)P8
zA%bYTOl_}WNddXNatdR{Ha~%$^i%iOV~~DF+6T<AoubjF9m;L{V1_1HkkcWS at A8Ye
zkp4au3v^YsP+-tW5 at qka#)#uhO6cvgSB#nt<^v91PW=0G(%Q=)93*${UX)!XE{8{t
z%5pkK@)EK_W`B~T7Z0S+9VBwK*cbF+I1d^h)5<~RbsF|kK&O_&enXm&5Z!s6wfr1>
z at i;ZsHuPIx3mfgWS~f5p+8K1PvI2)3IH5CJBXPOW1Dv|}c0UGS*T9r(M)>0{_`4r_
zSm0>(fDDrV9gyGsZUVgl1vuKun**`fPjg5LZ&K|K&wt6}&&l3L{)(|4yAmna_LbVi
ziCZSZrNPcHbkb_=<7JcB<u&zT+~az`Eou-otw1;eT%C^Ct!BHqO4jy3+-6<Rqn_-U
z5s$7+a4_x8xra3ZPDL#OevFr<U(S++N!(2*0B$<x`w!s}xW)=!08|JAjz&o%A9 at p+
zNS%K27=JR59y(lz#@xpk<l`z%l_?uyF0_u-+oxp~X0X(0t*=wY%S7?#e?hRns9k&g
z+H&5p=%_qVamWM75mig&>lwKBG|P`fQgWc?nRkMpeG#0EVbS3LTWczd4{t?Q9qReD
zbq*^^4xv=BbE#Whs9lHm{eZ&iB0}sFxigCi?0+^+Es<%5?|)LgF>BG+t;8tB_}r9=
z- at g&OOW8^>X`B9rB3!S^#tV*JFH><H=IR+(CF<(ll4~ndxw-W=wqQx8W=yIYgG21*
z%txQ_1^{21rqt2OeoNtGfW_fOI%&iqHP^Zd{eT4~2mxBdW);9ye|Rs!TE_ID9XOqv
zGk?6eTh&<rkA5_I{{6UJb=#O;y5=85b{TMkYmqAh0hV~F-EqRRS=}EPUfESb0{TL=
zDpPVN5jF<y)kLhfU;bpf6mDSRqmXk_GoG6H$KdMiYJ!&-P1DY5aBx_L55a$erRuQ~
zDoCVT41DjS7moJ-VYQKZ!gwZ{JIZRrxqqSwwgSAl7dhAUlfn6g*$Lqd5$9C$54YIm
z4;GXg&Z7P at cYugTWJ-W_K0&b(Bx+VLJpELnvcWwVEiYf-m95&8u93CnPX?FLFR=xU
zZ3qsLM8y_S!huSp^pVyZ{eMcRcNd-WstS$N?gSGE0UUF0R~tz-VLYY9(w2x}=YLA0
z5JAIOWh}I?6aIH7?-hZ~*+fL*Md=>zb61%58~~Wj&Qts(%tuv?a%@;XON>a|nfzYN
zD)xC627k=ixk9&4uIaw!;@>fELmW8{8q_RN+4&Qsre^H$_cm25!qE#mQr)A>PtkS`
zf);pef7v`XOBuuo22%%^`=llk0)MNnotyAe5-wxLm9U(@DIv1W^Vps};8}!!tZamk
z6RoeW$ZCS`i1+SUgIn}#xghZ)`4kk20Y~$XhPs at DXdKRFF^?c4kDQ-6OWh<|(ojdA
z^I-6XIYZ4W7%8tyu4@$Eo)Jcg1snXJjCzp>Xmf;ml+ at i5ht+#C5ZNO^f`6VP9L+aC
z#RO#46>TiYcugQ;uaVCR9Pz#&Twu0L2Evkp(<P1GCb|95_e?>Y9FYDa=scH6<Y{Zl
z=(^Y2FH#wPOfVY%aS<|f9Aq<i(5Xw3htp`CjYdQ)pRLXf#K~8e3MBCZJW?zVt+={u
zfX{l?gc=!FSy8kNe?|m?N`J;vn5kPO^1~6ZO1 at e`D#?rUBXXsAXDk2G$#_+O|1&3u
z_{5S$C%sLi@$$f6E(D=v6biv0AMwf+e1c&bT2P>0WD>hVM#wvYj3R^gtJiD!^I!3t
zhqRxG)saqN!kn9~BnEc}B2JtWUX`7%q(0#&InaqBN5#9z5&FG%@PBXt&}^66gTURV
z)}6P=S2}^)G|=}Zz2jGVEK_>5sGUTTo_#ubL=~M6m4QWhX(eKwwtE`#G>0Mb<M!Up
z at O)U-b$3yf-*~hn>PAZoVaU at v+G^P0o>qj=K@>8ny3ef at thqG5Pu5=nt$nCry;I>`
z=F|d+F%;~2C_&kq&wo!8tz0f;lU$LbvY8 at Lf(xi~5`O{osT$4MR5(m;TCbotpzS|m
z)_8RjD!g;)N2jp<j-@{YWDs<LgctP^H4{)zjumA27BujmpJh_rL7P+Uo=xF09D<8=
zT`%5-DMm5JX&}EPT6<eM(Pv3|yaDE$Nj#vbpSF;o>FdxRaDQ3oBGWW`4uqy at ZrC>C
z#?-Y3j3ZC8ZXF;wHBWqsoDS0$Mle4HZi_9HAiZmC-BvV9C~VW3EcEwveGuO9Lvyzw
zU6c{0uCMM5VJZ0<{g=Zqw9q$vtaSJQf)8<hLJVFF_3lzhgeb{;)=3pZ?rmux%o=o!
z^3RtOnLz}@u77?G{s8dYRj6($w6A`B93nNk{yMM at Y0ySq<<BUuq)v;?!1_``rH`rb
zW2y-R)y7v?7J{6P1-<$c?{LSuuOE-1AWYLjw0 at HcTY9JViCK^?D@^HD^JM>}uJIxS
zqS?o8DG0sL8<~=^MUftA-3zn=Z)cut at d~Yi(Bpz<qkl4LWX at Oct^l1b9bh+0`tO(C
z*)2Woe8>p>Q at oaFU&OrdCS5ywQ>F{(mOdWUW~)&BfC;$PppsqJvRPY at q-mS8ISW;u
zCCCDeYq1=uXO}@Cldd~BXRu}^4uK-{IGZhyku8HT(Ae3;Z;C{E%MJ)^7iw3`4l`<@
zgxQisCVz$N%+H#`JTw>?(iP_O=0d(awf8?yPD$KmU%;f&<^E+zD%%IHWARp6uc(q9
zX~cQmRz?Fx2>RJvaj;}O%<9XH1XL>OU5U736+)bX82^7lEzdz7NJ|jd3%*$GbZK>C
z#e<_$flp+G>t$F*GNJA}lsvNYM339DNnVR!f`1M{7<N1U#zqi at sgy5uZ2(_jQoZL5
zDn-&H18C<7^mJY#B8Qs4m>@)D0(f`gJL)>ZL!A)oCP0ip4r?S9p4?~ZK(_7&urSxS
z*Zg%_!v&gkyQ*4E;MlOGffvE#;uai;j9av9P1aF+xy9iY^|9TMLc=r2qI|Mx9onZ<
zr+*Zgj!NqNU!M4J{Xw=NH<k38yX-TN4 at F5uTSgrbZc%F=lU?6W*W>aH!Sx@|xrQi8
zQF(_kUA?Sf3(DQYEqplN)Mwp~j4426%7KvGp6N4Z9*sLd*3U$9V8?fEADRJ8Zh{E2
z!A03H2yk&+!S83W*6*2nV7A3JUjhWA27j%pIEn}8Y+t>7MkjEj9b$x`xJ+h}Kl=|b
z^hfqZLc13{O2twPN1goL(y5zR7g8AxNTsh*%KSe$(?t+Ib9_T;O=KuwJ!!={w%`^@
z)6y~5IojAAO at obqTV|-P%sgL_*&mz__M;=<9!4LiZTM5M4D&D;c!PjC{ldR09)D9!
z08d%$6XQ)()Lj|p2e)|t$SI^bDi&RRUVAm+g0emo(^W`t>$0G1u2=9^OP~`fFSDuA
z{hLUSD>6T622%52X2J2u1FHG(S;odZ7g2aiaM3`CN2Qt~aNwz<giCPH9sFR~zfe8k
zDgi5LPY<3201U6Fd~h_ZBc6u9YkwZ*9=}?&#}$CDyvVkqOMnsPF~uj}RjO0)mM;vL
zO^QvljL}rByRRvef5om at D!n9Aq&6-ptVy|iIhf(5$h$COs;)Ct?d-#Wm3JOuaQ5(X
zlwwSo)@wfUYN-OY%!GKM{{z3qPgZIIq%BhwVK<JC7O at BJ5%lpzPne1dLw|3gXQ+PU
zjx{I&iq at k^@%{Of^jz^TM%NTWl=V<HlwH&s*8#gR85fG<0dmrd{++>;2qj=^*dFuj
zn`YYoda3+*J at MN}AeZR|o4}>vxoNmCsyWE?$Nc58xN`(=2aQZFKoMFUH&r-l#<Qo5
z8G&6jxDC;E>UQAdbsyBefPaa$OzOyjdO4(bG)BtToJx~Cv5rEG*j7t<M?IQ9?Wfk6
zhi6krT%)I;z8n*mFZ-)?tLaY>s-3kNkk}i6fGRek&@z}Z?%M1unT>qW$z=c48<DF)
z)e#S?El5>Eeus`0^G399gYBLOMpQ^<7>(d=8&o;9nnu!eJmu>%o_}m{DY!aG-5jLH
zZ>r9o-g6Zl>0S;QOq{IZ3|PVa5h8I}Xhn5KIE|FQ-*bZ;KRh1hJ8)*|E8#ot1;WE)
zpY1=@$N8C&`@8E%%NBL^nFd>Q>6GI at Cgi`fwE8bh at o93a^c#sABU%;kN#`aBz3f<l
zRsG%qXJ^BD4Bn1><bSW_->@&=t_MO<7Y+p%Mq!x~${pXENN{%bZ;@uvq~NWHOuS^H
zm~L{IXmO}4FZMCpis`e at FJF<@iMGE*>J=0~Dt%pl3$SLi>^`P at oE54qh6;w5J*Rdt
z_Zz-V%hq|!w-NmuqZbouCG#SjO}ZF1ZwY9c6)ERkE|U+jQ-2ZfkUs!2=%4FQ!Zkp!
z+jE_)ie)84K6ipZy%`4*ySm^rSs3H;@yFHzzKWc`ZxK+ciJ(%9*cbIv<%5)(x3 at eZ
zgM3`NiT*NVO(!S(_+orOO1m%r6s``|NE?b;VmaiST=+UBTMzKCW!lQ%?_c^(dvNF*
zKXiyD5Bd;*zkhW1aA_vy#S(%M)k)1}t!0K$E8QnGYsq~W+9giT%Tpq5(G-2W-s7Zj
z1JkTkY!%QD*&o?NECf(A?LU~!H(1_+duL0|j|<^UP9f<q-WkmxUL)P};qc6y{^`>x
zPx}BdD8+xM?yBAZ)~A$=tVT0S5HeSJY{?YY5pO*&?0?Q{$P&BS-gyE>iETs|-2P;m
zg;GV5P{HqpSOb;N)a{t-&^)<KJ|jgkCSH-vPh*-c=BI{^6Cth*!t&I%u}D6xtj`L3
zKN5q`6*=mlB*d_X+ at dyAI`pS^jz$#h%_LsS;)FQeTJr#<`rnKBc5`R4{``Q`uzF&c
zLAi!J1%IPsGqZKjfQZ at ce!gqP^t)f8D=@Y?HuhXmM^k7PlOw3On&&hQJT>Vhsr#dj
zf-z?8LGeuHuUE3h=I{53{F=mBUY at rCkJwZv;l>c4P1ab2!QrP%!;3&;9p=hVs_;7T
z{~HSbP-Nk7i;1ytOd{u8ShDO617G7k*srRh7JpPerY`q!ETn+5ai~*U5j=Y1E+E#R
zfpk!`hL>AbqtDY>B*5DDfRPQ5hWua4Jz8?jW?uB!bq5Lvo88PRbO!;uHMMgNSIBi3
z9o+cL#yH8!oObGh8zo9ORq}P at 0631Sgo89P8b6pkd#H}Or~jyXhA6~_ at U4!bTu6&C
z9Dghc))+RQG at wY8%daRCSwMcPh2wo6^R-m1usR=w1Ht2xyD3db6P<Ne=*LH`ySD*m
zffkm>1anrGW7}arTJb%=Ud!BWlG$osI<v6rO*6RA`Wk7dR*vJN)wY5_UL{X%*8o=2
zS}>gxh)<cvLrv!I(4~IuGy#~h-G}C?xqtYGCBU93PguEfEM~PVXK7b>)bhD>3JF5#
z=Xh*aD4yNkNT&@&Bn(F=Fe6gAwH_5+eu+t}`<EItjpYCJXO1{HaHog|DDcaRoc?DL
zl?q8VrovDC^&RZzOE)DS<CRnFRQ at _PBUU?*cEKGQYne8`Vxo7whLV(eygV+UWPgUa
zRj6TT*qSAK9q&W%SA6_HMJunp281$MP1Jm55`UgsK)q3?k&JApI={8c`OqFO&-rH(
z-lj}6+2~i8BvE-ed~6JF^8<5KOL2RVY7aAeeE_}rR8~MGR!vri>SVZP=30{HomU-|
zc$2Kn6;cunZA3c{9bBFJTt}vn^?y-Zha}{3i0RG$9IkeVvf{ng;f-lMr-91L<4>Vi
zi!PW#_zj1|8%9rJ&yS!&(X3}3)&z&r^x0QfJ1Pa1N=Q}oLirOL6y!6MjI{ju^VZ&!
z=t^gZap-+`$5fJk|8CnaSi*zH7b!{wsI>Q0!*JWWiU!n6SYJu(wY$MVu75RKi9fw8
zrNn_FWa}K2O19D&lfTAAHwG02q1M8aGMWcqLN0c51AD+$_|Vmxm_>7Pkr!y{e9y9P
zP1@;-35(=1b;Rs$d+z8)mM~bOWI-?VJWTW|5|{N3#K2o8&%8louw-+WbBcAL_#El%
zaC3ROC>A27H0tgFx3Fc`+<#=Jv!~yM8T?BTZ%*Y}b9NB5xEj^|kGq!i$D5BC3E~%Y
z;v}+-Q~{PV854IOp);Q at asc65XN^d-d4m&DOCJnhyXSBIn at kZ<X)RfkTy0qsH_)NP
zJIZiM>^z>-BP(A4n!kP~1ZO`AFgZ^1z#v!%RHkwVtn36uwQFnppMN!>WOI<HdgfIJ
zN-9}x)|07VH4E7-kx%m_h$SW2u>eA}@N3I91aunBs{22HFJH7iS)wLjNSL%Ds-z&R
zyo at S$K!(Bwt*IT2rfl8R;m?XDFR~VKB*j9Q+uH?Rl_9gUkVJ3^FSZQMlzyE{NgA9&
zH7aEvOr at rY!cMw0aevu`#hpsZOTp+@%_9D0bYiE2VC%QO=a21A3o|Hx5AaUSHZ0-E
z&LJJkV%aSV(m_~867`;^c at KZVDEdgSLElXYG@U+v>%&CYel2HzscpC`fD?4A%?Rcy
zZCsEF4=iC~HFahbGH>28y$UGqVObkFTn>HOG<Yns)hQ at -2!C5D9>k)}p_+8?a|qWx
zm~xO`dx*WR5EGr|NXjY#q&CZ8mlGg{=Av;+1|@a7(^7nu(rEsA-CnH{$>6Q^t;Knw
z-Q2;3<8-5+60A)D&Zy$yJp(~Bdm2u&4v_|^CUyxCemyUW)zktCu#xR6xAcOzI+L at 5
zmC%_&Tf`~xKYyZ?23y}>aW(PBYa|spZ|8&B4%mJIEQ&)BxskfH>AosJ!MNFZ9_sJn
zOdFtj^^Gs!@x#{C6}h2ib`HUcfHkqxANn9&t+~!3kg#J_N3VKIVI)g5gurc6WGu1P
z*W?uAYF3$^<7Zm83x60cIO2<1xZ?-MiXmh|4RrRsDSyXErN)Hb!@8;vJFUREe9cgm
zyt!MT^tkQ|VPU$Rx$y$7e at MWBG(TF)LA`CYP>WhZ4i)}!zc2Vy#r=rmfz7jr*7z2o
z4*WyeSWeV#)P5SL+G>#=rm3S at Yiijer&eF>94!T$!-|5D0+rPhwgBAQ_`>PX#%FV<
zu>sovZGZM0-WtdP%-L4!b}nlM<oUtxkSS(*z>K6F&b_-YrP1L9O(SP|p9r_xyLYyg
zT5P#Vk+VhV;l_P-7W9M)){o{rbk4_o(9g%POhYy2U>!flr%RCnbg*eg3Sf&BxW`!~
zo9<%$X{JZiiNtX*m)%$<xsBgs*;gOhs14{E{(m+^O&x(rp3|@FtW8}_!Mz*Pj05YE
zR$uywQYt>C(=2z8&w#^t-fs_q at i2(u!~Pr^#pZX>St+Lw5+TB2GA5*qkv=J+JQ0GY
z`HjXD5jJy=pe at cYFA&6pGG27+V*>Z=3*w5h_wGTY%CcMh$*fw at TppT;)aSJo9+KSy
zJAbVTqshK-F224{oW(4dyg34K7J|l_u!W_o|KN!3;?G$LVF3j+b#o{$U4uI1VclaO
z8+!)xc3h|0 at EDdG(OISGhb)+0k2~@=AI#SkPgtIz>1JZht;P^{$;ueC=eAA;Ep(^#
z*|wB)7()@Vw!s%e{6#dxsiH4%t_%#6OMfNc9iK-yYqd)LU-RNd?~&{`8$%IZEGNDx
z$ZDL2;E9eCjx4mt!dkw9j1lHx#A)3gy$D;xW?B?%PU(rKJshjCl14eV9mte)MX?69
z1m(ix+SFemD67B!EZY;7mif3wQ`yP(YR`2cRZD0_vBWCDlfDi**7l-;>OtZTwtsbu
zqfRg##g3L*EWzO4g(7_mibU9gr at Je%TA%Y5qVW|qzMN9<Co2AX3IEl-={_(|0i*6*
zHZH_QIfA&HIf at JR0-Sd)C}fuo{w^cimLgoZ6Tkj0P55UCc#lLb3P@~GEl05HvOSB^
zNbWW0vkx6-xYdn#^&}|wxV6Y9?teEnQgoM at Tgojz;)WNbdVKRih>?P_QhOcpGJak2
z$DDB9vGgRIr+_Q|kXRDq+zo)nX+b{3?ceXgrEL at CJCY9dVI%1owff+Vt^AT0<cY>S
zyZGkUiW?UVZ}lr<kT>gs+hM>DUKxkeNUfs~<MG#iH2L~Fe`Qk5%R!J_FMs7zBW!m~
zj>+U-lRW#4JkoKKtKjNA{yxl(I$i87*NrLJ91Lc`^X1`|jJ$BRSeb}n7RuoY<qLk!
zW_!WNP#tCE`$}=4tGz*-MM}KruLX8eH0JI^PN1o)3fVugBB5uPDznDbtFU8oq_EC}
z&e_e5ZmtEI5-kgfHW4zHf`8umh{2s$gKb7%pSWn(>GT%SKRMFjZQ^(@-RnJ434y9@
zGzefdy&nN|6b5ORoL0rc+v~OpERDnDX{IB5caL3Zjub8O at jw&;#T3%;0qxK{$DU;e
zQ*U?H!fAIY-o#_TEt9p~{u-BouHvtX;zBQ5sd+G}uB at T1-%DlyXn!!oP}Odesw1#L
zvG5^AtpJ-)OYd-|{i$JH8+MG_ms7Ztq1<_)X;=p#tG&Q+{MPoA1e8OzJ*hBkS<pqz
zlaTIuFKl0ot`mavF)duUj*F_Lf2DrE?-(6A5k`B&2?Jzoc+##kPWGi%65n at T%r~_7
z2`gZwK>v<E;o|@my?^UqsxEVd;+hyrtBC^WcxTRHB)g+M{B=TAS&p+$*XZAmgfHL#
z*WgTu0J_f{W|b5?+VyG51zJLzsn8d5I`=(bOZn-mh}1&birHK_El3*yR-zg6qk_d^
zj<x)F&7p%?28ctNqJjrz8wON<z-cUL#a1B at Nxa4!0=WSd8h-?fgDZ06B at U%+hB_Vy
za;l0aH<FIMtj6ITKOTqN#Zco at 3%9g}fC8ifx9e9%ur)*S#J{EHL!r(1DOT*uEX{SC
z;U&S?Wl<q{{#TGo$#wA1etId<@V_Zocr1SBw#JSVn0PV16y%<`IC9M0W%O72BQ6r{
zS&T#qE^zZo;(ze*wS2*bJj-qvy(MmNnKQ9WOTUXRU at zD`)+aP*vMfnp0?1ejMqerP
z*TTV%eU`pXn_1l5wZ+RQvMn&4ky2r2ZVXH?jxA|)=;E6U&2EFrEI)e_#7(bT5p!2i
z3<x;^7GLYSZafmPiACfR&mUf)TaufDYOGzxa3biF(|>ndI0#Qxc>o263o>-=EB at aa
z`*_62s9XRMI{<mB9_57nJ1lPhezr)~oSb}H^=Muo=}btr(a-*5-O{faweCW32ttdH
z0)7nr6YkMg&t!z69sL`7?U^1b@~=RY4&N+diTGnb$yR5df%uqSq^~X^39{0nFbJ)W
zDSN3)(tqT+kXsxP_}-=b)Vs=ReEI<R-(bavkPm#dEEf`&Y8{;O=d52jzorxb1?^V!
z1A?QBTETAyt4mx_K|ix(vPlI(#q1bq&bfOweU4ebmLwI})aC-kDVkT_2$#a4kV}@m
z=ieMboc4BAqNMeO>`&%uVOqHz1aH){G{(CAKYwvH;1*=`6gQt&A`|nZ0Y%SA@&*4u
zV>nN~EH(LP4v{g-ZPyD6D?|1aQ3!;M-X`M2t6e2ly40ju<k5 at 0ALZ9GIk^rmYeaHO
zg-h9E!vTRNB`@^_%Jhxak5;+tBC$7t^L8?{Lq at oR+|G_c1u$7t4Dw$vE6RJP-;4b?
z$$xuFn?O9ObdyYUg+0)!ZyND7+MIrZp?8rqsA9DSj$K+`n at cni3}6d#mzK?vkVh&N
zT}fwAlGbi>Jm;TgzeU8yUE-+P$1>+MbbovE>l5+~3Qh>=-cXhihMn0f>#;xS@$U-G
z5ldk7R>+87(Fru2jG38TWo~v(QWwAEhJV)fpK*50u1>r%*uV`|Z%AusVy!V2Slbm*
z+aR)M9mIzY;+ee(1bVb+Vn2!Gq<Tr&*jwz>2!EWFV`$o;vo}UEFl<z75wzo at zkW2&
zay0U(peVR{V{6CGB~f22RF^Cu-uNURG at B8n`|*D8z)dN?46g`r1l<NPz<ex}7=Ixw
ziP#4a{bSI|)74uQd9#MnitA$)n;>Q7CKe>^G_%^C&Ju?QMds&3Un-wG6=tD1sHvbc
zN`Ghm(Osg^Noq9Vx_2wfz$aPnCcZ}fT;Uv8hsBGRV-Z1@?Z`?zcsAY;=7&TUHjC78
z7256yv46ZA)%=xM?>rXjA0N1$V}I<yEZ17TFEyR(6kE=1!=^lTn3?W2T7GKfmx*_t
z0QNNmEV2{Www`}iKs)qYKn+MTxzw5b at tGEB4W)U;?v<V1${v2Vhrz2Z2`30jL~w>~
zVOm65=;{D;FR(KO45l{pi(PDrO?y<?W#I?&B?l9lDd^(>cmw5vTluvt#(#^RUBx!}
z7snDTW${`G=Mz9;rM`xR0{iE<azj?t=P=GA&qAXt?GTkM1~-QF`n+RwnX~0VdnJ<<
zc-O)Ke*MWH`|%{ndf;j-`|JXg@@qSw_+8qTI4)Q8CE0-phuj=1MPYH%d}`Ny;B`tR
zmk<3Gb0;9rDsX*FLZ~?Mj(@)-JnwnrXZ0UnL||`0s1F>MfDs8J&YGBnEECeG6`ce2
ztnz54rJZ2P- at PBNS5|?X$Ug#y`?sNMOZ9`Ffj0mu%Qu{1D)ttHvUgBIngdw at K(p6V
z?JU7;u;g=w!1yOvAB<C;_P~D_#y_rOj0WQTAI0pcF}qq3^}qPjCV!B(h`T28fcWd1
za7Z3wNGNM0ors}TLaTXU_6pf}J{N at RGJfUD@nJ at _I{O^)N|3-XnPK}1qw9PM-*x$i
zcy=r}%yZ0+T!~ajuN6NUaY8U(Vrg;AlKnrAR>D8+n#YEud);0U3{;fJ?}%|q`|4!4
z2S1<twrOg`7KFKvX at 3ltmLdKQJDCbu{dXg7CHMSBd4M|`f^NzBCaQ(uMhjL72~A+^
z)(X)sN4b95rqw*4(&E2_VtgReUKjSrc>g?#^;<ojJENlgOrLx!^HGeOL7TLGAlwp<
zAuGZwhP1mC!hzHYMap=BTz~tziD-|zu at eino=)1`+(HvQa(_(ayg!%pk7H#C{+E#9
ztMCYJtYFJ1m5esPSQ9TX;ry5kb$Jt1Z(kGR)X at jFg><h%0ORJX&XB}N^B^XwN#XJs
z_MQUr?#J2#{fRdO4%_!p)1 at Nmgpn@{c+LLtQ3Q8bK(2?Xd9Io595XTJ0Q7Pi1JS!y
zgOO<(-KPlHLVuO(>hFpdw)!Y1xcA}>1>ly~At$GTGfvkYRt=em3LS)K&xZ<A`c^df
zleu)%vrYW|y{`K22bSie!cYQT9B|2$tv5Sxko%$N5sDtkn751vVoIY`0dTh%Jw?=w
zm5}*i_Q2THY6(eLW(ltKaEXN}{!@J?-M^XYo>4%F4}adrkO=lrmxJ^3BxPhuv`Gli
z-8Hq|m<^xWjyZ9HQ&Q>GA#rLmVWp=U7HnEVpoKP1f)F6Ry>uPNi7aoo!Ct4DR?9`%
zVgdV)@vUtisDi=icd$PnYTe8rCkqnZyzgkh1CzIry6Bths8A2=Xq~Q^hCE5$i%y$R
z<P#OCV}DY{E!UaI`pEg!>G`sq&|Vagx4~|^+M}DjPY_=bjFVe2eR3+%$%G704FFl?
z+q74WHLu1ZY-9+BLZNqbz&VWP^dFo*=Rg-4|KkgdUbQq}F0FHliS(nl{<z<qSENWf
zhHipwKRE$9rebMsNyDF(Yi4uZQA3YF15yO*U4KnjgY$trA|v$x87y!8k6uT__f%dT
ztuDp$%`3XD#rJ(Mza*IU5h!m-Du#Y)3#;KgMiG{<pN|0T at IR~opFm_rfikp2F)BwS
zE&9KgbuQMe55!uwjYan(!mzVK2DEb_>q!B1LU!I(0qbe&8%=Bs`f5$PvY3^dv?7+6
zs((Ia%DMlYH`LUA08J{N8&DT>xV-QR_?%KCY05)#56HzwTY{ScVFR>FAdTyB)6Bc#
zl@!&Lz<h8!DAgZ=88+z#5xY#maozOJTPF8><RX;%dh(s4kyf!rZs|YYfnB5 at S#95J
zkU7$sun;V>-{TpLsrJ#dx5mNo`bS+VB7X#!!$jQVQ5&j at fE2E%^V~CtD2%>xrZtKg
z8vP7GuObB~NIrt%sop#|JWVuV9o{I at piK;@C%jzV<=PnL-vU-_!yYfHOM}SwgN6CT
zFs{OMF_p=GB<}xj1KfKQ566v;>%P6<FRcDPWwh)0s2D}x*k&1h>e)1itr=i6BY)2<
zne9f98`qTSW-cD3VkC<IOzV90jk9abQcR=!qU_#x2 at bJt_-$;2DapTeV+mGaZz7sg
z32I)ar{n%u<aYY$Gnk(&TI3;jD2oJkU!NxMkhV<grTlPXX79lK%?Uc at YeD5J3H!O&
zPiPq`gkm*X-nfhe-kP8X-?9t#8h;P#3CUN4AZQZN2D at Vhz^hV>2c8_bP*1q$1<}8g
z>BZI~=u${$E~@pOB>A|r&DpLGY^u_j%^Jg+eF<=YsLZ{q)6pPb6*9sO&nx{=kk22A
z7K1;l?qc4J-RV517yHH6R>~4v%-%8g{Z{joRl`X!>?!FxM{4nY&UodnN`DlLGMx5u
zYa-E+(q`~%h9yub%cd>hTVlG??+c~k;wv>4gPv3R_D0zF+X(?+*IcK$;+olPigt!F
z&^q+<SOLwK800HA$ch2IAA`p+|8Ugd<?@>{HE_eq;%q0BtPRyYWk~{_thE^FVfAQa
zS51|ioS24@!Bz|E9UO6u|9^$X83Yvj(~e(y8J;OB*d0QIXk2N-8on;Ih&*-93kpWT
zzppfiFrhJYg%xCj{W#=GYSRg!fCY^%>7i;%Ggulc68K)fWu=YpY&4`Y{02Y%KTP2U
z?q1F9hXakWf4C64M)2Bx2?aV70=9tN#7)_^sjz3T1LMKct+F^#6n|dg8H^xXu}sf{
ziUp)E&XfaV%cbR>olB6 at xw!1>xs5J|dvWlbM at Y1RDD)GSND&Ha;2Qz3XFY8h6M4$^
z0~Y_af1QnoYCT~h4AARMs1ey2uy@;aEo_OWI$pa3YBywB@!v-`FSLfQf>E`#=si>e
z?NR0Lo at huyPZ&U6iGOB)69j^j0K9fC?$}~TSE9kPz;jpnRgJ+?fT+W(moXFaZ at 8?|
zPDV}bfq)t>oXp&#M3$T|w7V7<?3aSujN_Am+xV$Yr32?5tAV}4^8FE2??#SdOYwln
z0dmLDlBK^3nFF1m)eBGd;6Ci6P?m(v7RRb)Z<+>1VScya7JvCfZT=1Vougpl;6tM@
z{nXcuQtGXz&9j-VcgL?M2Ix11$*rFW-P;%3kHhl13|Rnh8?wymZR9?Iab*%?4CYH>
z49K+<JJ}lH3|7%db(;p6%~dpiPrM>_2=T#J(t;lJj%c9{gV4|&Is^!r*mE_w|9}Ba
zywh<s^))M`(|^Vk31HPJPlJbkZw1;?c6xS46=q|R5uE<yKN_knG<B(xg~?jzn2>3j
z1&x*NUCe4DXGc}_;qo?xdiv#(_P-c~Ooh3t22*ysptWSnig90wwV;rY(>sVkqJwcN
z?b^|m)~C5MwaWt#3}OmvA3$iU<d}-b*4%(}a%87ChkvCFnPbpgfJ)-&MLVw}EIsj>
zDE*J_2fOtn7o$mPLF9XN!4)c$ka*yP7;S1j<(C0sP_&Z$Af^C*NlfX2P at ky!!B+~Y
zzHCJmacDL#kVob|1g6<DoF(WI2<+YP;4aMJRv;(h>3FgD&3v)Epk`r9P`Vl%Q}R at 9
z0c%aNJ%88C26ELi#_20|lQ8ERD=HyCKYDNO{E!yp=-~H6)?f`TIJy`Si1r3i01n3Q
zea`DT0M!yz&~b*Pc^x3XAR71+jC0{C<+GJuCf8|E$Qg-IV}L(%O<~7numm&O_;LSf
zjx2x+S0OZe2_2?`-<ORlgXiA}?h2U2QL+1P&41F7I*kKyy?D-(un0LBn|Vs-U$*Vx
z_yxhoHfw_JHA^|Mj!#yu-&s&Zk2)o+)Ve3(LS<NgCrK{`gANDgkmT*VMq&mp=nffx
zi$hneZdSX0)8y7*S=ERskh#U!F?;o$$I6vtiok+FG`GCXFm7;iAvKVJ#x32jbkT%^
zm4D|)%Q8c+gi~srs^+Gx?&18RQa%6=K=8ltt%Yt+B06b;@(O0ljy{|Dr^W%b7Qpe6
zTdKl6J&ybedlDi<+-n4f74!MZxT1KwZdMmffj7lP))Fk>p1B+n!oUSvE16m{<>^}y
zhT)!?KuT!~n2<e at o_+w-$M!P7M2kc)LuWPt<5++7$DUe$j&LiOMc<{@Feuu_p8zj;
zzryP9IgfuA<pRfm;`(@W$THWz0V8d&8A-9Kv$KHPrZY*fS9$Md?32)woMVF76dOGH
z#>{0`ObjI8>4cGfm1)NK{}PS;h1<Ym>YA5Jk7l}pR4`B}{#OtIFzh=D?I4*yQ&v-~
z;=X at lgx$Xxk>m5APnDueJyozTGATj%Y*9$I>}_gYL#d0cB)Rk8p}$YjklbS1>Jb$2
z;xkkX5s;ppWzmniX$w&>LzGt{mVq1JKoJ#<HTPTeWlLhAvo%wilnZYP%M0Ec!jao;
z0S=YC$U~c})t36c>)j{;^C<lM)T+%Zj)H$D?yt&D`Ixf-1E_)XQ?OHc1xe}bf$&7!
zN%=W!{GEd`5w?x(H+)YgcM*~&0X0LPFeieDJyP8~)C~qM#~5jO)lIUMdtbdpb(DFY
zZ*@2<0}Q(NfG3(4j!-d^b>EGierMS+{4V_Lp at S|BpeiG7D1&HG6G8+<8<6 at cJcNJu
zX)YhD4%TiKi#SohN=nyNJ84KN#XR*Iu}C3OJ+`ANj_U2tgCnkZBn@&_N-WMjuLVz(
zJ;4Lo%onN1Wt#9uJHH~mXSQ!3%yPlbh;71 at k1mI>Ka!AHTNL+YzypgtyV7pgiK8ji
z1&LrPon^XQ9-Cu2y_J?Hc>ci!hx>m`5^M44d1^9j`)`pTYV)@E>PhhT+ at F!gtva}#
ze22*dQMt&wp?Wo_f(We5ku_(2&Ol8tEDOM~<@2>wpYaNwTl+X!4JnW7EmM0Fhb`Mj
zevz4m<kDWzkNnd&T0_G~1-_0!ke&R0_ysqbD^xNx3g9ozy{|)<<TAjQfE0g8(k+-L
z%ATJ)31SW01bJGTZmCR2b~2+`8wVPNL%-i7=&Zv`#1#MJFW?nN5koIb&^|$?Sn<99
zPTc;|49Q&Mcmh;oqZn_A%wFPOThu9SddW=oTkk_Osrm~QJDUueE<q!w%_10Az$?|h
z1bU&bc5GS)SPA@$wlR=iA|ij3ayNaN!TLBTx;V5to4KBH$H6I;d8tEVIitlA0C at 0s
zyLE!mKD;?&uV?lA&BX2Xqe{27ti(0=T&d*fH1}ua2<<vNwKIw~$oBK4T?457hsTm0
zK_Nc|afP`jj{u!o at HYlkxQ?Y!I2AJ+`e}uct(iW*3NAw-7^qWQlu3VVn2E68&Mvg=
z*n9vr@(Qbt;xNY89Q!Z75Z(2Pb75e(=Ezn2{ogO*<d1NN+Q9Uf)drrrpgr^=TFzYh
zFgRQvk+M1hn;R_Hhp)MdR^SO*9gRGepnm!cH?=}0I*yt6R`@}jP|L-85D9F}$Uje{
z(0dtL1oJhn>pBpuguQ=XCs%jb!((dg-gt|Wj9Ii$BzAq*aJnTztt{JTp%z(KW7pdE
zHNG2E9m*_)$zxuL#W4~3Mgug?<5MBwpQE~M5N)bq`EvBS6-+ZO<>H-TpQyw3>t!m4
zAW(0Cs3Ub-1lJ?!hf#7raI~*h$roowBF~v*_FUnIj8(oB&P;!Nk?adM4`bWo+R~xM
z)EH6kXW}_}cr9xl$8$-u(KYx}EXN2$n`0>5y)FWOg;e%oX*l~IWB_(Xc8O|p720G2
zC|b*wc%fvYiOZUxZ<7R`uH&r4qBTu4?NrseQfJ}N_6*Exdy{R%K!lzVzmgJ%zHCre
zOmBb?R-W650z-d^V3_d)o3WqJ{Y1qO?VC{ExT}246z6iCeY0QNSd_KIDA-ZnVY7X@
z2pE}$T`8a>61#`H(;mDKJ6vVaWqr%BEm3&+dmj|mhQhc}26aFAn4h*?M{NMEs0qst
zk}>y3nhzrcuUg2)3oZQsN<{A(*1EcZEmos1cZgcseY1bSw at g|%t;^i`P}3f%0sC-2
zc6*#SNI&WoIk}3-7&^0}PBjATfbnipAsFUgWFc%7sMHnho|2fFdW at -qF4mvLiRMK!
zNM_Hi?<6kNjVe0S`b_M at lEp{ivl6Sl3XS%za1)~>CUq{#-WEr<%mbii`sk<Tzi5K@
zx<^64I(UDtaPv=Fr7W|FPv>=9A$Ftc8Q{-3%H?4w+K18=#pqT{*&2gyR${3;r{GKg
z?P87JaW({cG^3+WsEO=Pdjr9);GQHT3ZwIjUu%?XDweR<+8J)C4RRB2?#d{0h#3xx
zsH4KWa5`#OQQ<uw*G-|XT;0n2=2s~=xC}n$#5I2=WUbyLitw?fhG*+D-4s-!)T&RM
zpZa`FZYH-d5V)KjUYF{hhMmA*f+=36oc<p|-nw-OM>;J}n8vQJeIrm#NamsN%$5Be
zu}g2nPYu_yw8_F^A<>pgK>Ejo!(v>|V#AFyC`*X6{&R=o0^M<<m=uG1DD)_r at u$py
zMPz at Z2i=a$k(r_-j>Fr{@=y07ziJ|3bNO_m=YX?0F6tkIFPW4=*Sr4 at LBSlf1tA2F
z(DwfH7y!U%iVUK4FQ#RTjr&-9umR<a2#g9bh;O#kn6p$N%IdS!S-$i|-Y;nI+IMoh
z_f6Y}qD*V|w`wuOBpph-)IHZa`K_ZHT>gLQH<+hF=GD7Tg?*?ngW9J!Ugh2%4#u$@
zE at Bj0)@g2aUPLuohr)AS?6KT$<(=8X)fGzu(yY?8Vvfa6ViVWZOQv6(lYy+C59zxg
z&1}CxM)y*y9x=VfjEw>NnVET8NE{wp)R0}0+C(wM!R70;U>ZW)dF;JfcrH;5u$F(#
zp#c27C8hzFn6#_G(L_&st;t^7+973^$1>qj_fAkQL!{le+_^(}QfN>y>jI4D^gH3?
zVtogOhICb!gT&T_YOW2@!#Z3ukOt~`v)?duQvTBK`WXZGBoiF7p7wYFK)R>yDzztG
zF@!*hMdnq2M*yscmh{?mvn~S81si{QRG%^6aS_;9$oFxWXS8YfhAnfyIz#62E<Rwv
z1uE4>5Z6DRb3!n}9j;7D7{T)Lc^R&E%G{-!KJ1ylUdsqSJAzcz6_&U1@?*B|>Tt-9
z?c&W8)$^w)1foJ6sHw)de7Z2^G2DGWtGQ&^?Fb~h!ovSG9i4Xf_Ys-rxhH>1&*V1@
zkj_11QfcSh?Gk({sDiVUvk?M03Z=xDfl*KV{vHr(lODk=SV<N8fd)Gij^jW`mReN9
zqs-w`pzb%27S&IV%c{AH1*EPm^Yd0#8D~dCrWAO&*Vo*+ylHAER(?7JWxU4yK*LgC
zP_N(DC&kN6x0BKxR63<VRp@^z#1$*xfJ*dkc!sCM&VHjc8_IttBZ1VyDv}|>){^ec
znIuSUXYz2*Y>4h>d_U+tF4w~DgLnMJ%tP`<8I5`_rF|ES12i?+*-^C&Z}W{X1$}vd
z7^dlSLlQF-F-m7NLY8v+3hqG0{t1t#e`s2}^JWvz2`$gQ3|?uYGQEG3?OBo3wygpd
z&{jVAi9 at 09QeK<cn>+v!m$m at k{90z>yNImIXmE%y6}${=2VM4bV^IyErKQW4L;1mm
zi}ZVI0w*XHVUS0Rxm!*puA<4GZ;}y7>)lq&a9?paiuSv&#?nIBPfE>`IM9$oIPi=s
zXVfnC+1X9qWaRyHwoZQ+ajrRUf(X<iXaJ!j7ptTTti$y&t1OFh)sw0AF-_^G%^37J
z_y-(nij#f-Z?KQEGr==yoKcsMdT<&!Jb}|#Vekz}u3wI>CnRqXS<BE!)PZb~HW&nY
zY_h6z%*xB*5V7+M`PjIlu}|?CpDKoZo~>iXrXUI`G#HDB^?`p5GD=J*vQYYKPm(F<
z7HXz<^LU3fy9R8CJbvaL7!%-YaFRXQ4+B`Ht>PJI(d}DqD{pr#Rmc&2Z6TEC_ShXm
zkIvY=Hv{r8y%{^W!`1}BpJJK-N$&K++(Kw1DvvkmINB<wFZSVU#pN^+uOu)7)Da9Y
z3hfLjw<MUPNvVH*$ZBR_{Dj$z{L?nL6x)bbLd&0jBVW(7L7X4UovjO&Ae35)_*dSL
zC&AYwlU^I<1JY_TpO{^NtG^qL%>BOWtScI?mDs(ChOalsOaH#{(+*DLRB5skjObmZ
zOACyVg={2TEyL#xF0sA}k7ooQyOu`7tRR>jS`%l8!z_O|ka$(x*dq*T6~{^H?};ZA
zG8-hFEV51NckvL)bXCHZ1eS!m3hYp8pIp7^qL%CSaDu-Qf6_RT;0({ewxnWx?cISP
zwN)npUeT5~gDDUTx&)TBwMf8Lq*`f1w%2$%15(n~h=|PlJJD}3?PG$cXM{(yc7W)4
zXtVX{XVrf_4xs(*vH9qv5KRVBYN9v^b!C$rfIc at P?s4^`&Z>dTct)B4c at nlR2c!^-
zk0D~Ys$t3A)G|PF5 at H+c>dovTy2!o)CB8|x_J0x2bACg<7M1cf)af&vJ2jY!#RhJi
z$+H`b$GJjE)5b}J2nrL6in`-v^s3~Q19s!;prC(z`Z837Y%?YBqX6YI7>&4$>$w-b
zWno5O;Il72mG5eqdY*Ye;?KV`6q3)0YWlkEE;{Mp=4}~$zxGIAh2Q7p!!UkhnVU+P
z3B|~>!#rlN>l8Q`fY=Y<y;GR64lXPZu3Z;BW^irb#%MmuQgjE-<YPJ{=(Nu at C5UX9
zXoG)`Ta`(DBwGvDmDg)Yvxs-(X3aoO+#I4v>#tOu!aoE(6;^`43O-MLo^0c(!?J`T
z_iuPd=>C*d{rrA>pXA1;4$;WVzTCmiq1ip#t}Z;(;<jFZVrZKKt`hi6L1GDe?u^a?
zSWN|QU$@B4#Ak6kflWG*2h^{^?xdezj`@EiOJG8KcDxF+Vq~YYZ1vx at 0h61m>JOpL
zJ!b`$1q4{X?PGN}2r@{8pxa;CoNk=gm6kvy*e{hsM at 12cKTWW&R9&{f=S8MR*Iti=
z+LCh;jWdY}*cP`Ty5R#h{PH!Vk3HS^rqaxOUi<FD7!2&Er~lS{!kgKeu1B`&YsG)O
zAG`LSJqgViN{wvp#gYET4`ws55;S``^S at a69`q=hYjzCo*dUf}n~yooVsZ8OH-%z4
zorA|nr)-n^*}~y?OcBGLJT^W6E|&E{f=VX0k-}}sls4AVcFHoDXO9$>L{x-kAx^CE
zw(lZozZ>s+>|8h#?6!hC-`&FEQ;>g*{`6+SQr$z;c1KDtJb37?^q~LTjMU<)==&g)
z9Z7sQdpRZ(j!Z6LJw+;ap-NQ<-Xx%_Yn{yH*)9oMj=-N^Fuj=Ds6Nnv58q;mD>~uT
z{5(JXMa0=4O!VurAl>GZZ7aFw6db^>X77MXB5Jp9dz+OkDq|jEWE-!fo?3s{0I&4|
z+zFQR(R2f5;F`}!>%S)k-_$Y8kTTs$sOkJ5emews@|8)eO2srWS&O0bXUZyQe at QWq
zU1a;sB%g=P5f9yN|IKaeWbD6jmQdK)iNSDJq8MBd8=1E05I}+}{j at 0;nP{Y}h6F+-
zl8NEIWoi|vf1*|VO0^5jHp_o5KdW+mS8;0#p`ixY3$2`oryLG(36r#6bV!J$KF~Ra
zXCx$nkZSlJGXLUx`R`Z=08rH&B5pX?<~h?j<uM|<HsP(y1tZJf%Kq{G#X#O&Pz5E&
zBvZZ$Uy0;b;aHK8Z*MIugjOPjE}1V*JZ+dma?DDsn)`#kQSI7m7pi|VHoR(^V6^Lu
z4-bHEbZ4fe@{%NGG3k$5ZP<&LSg;1QS=EdSS{_ADM47YyrQJDpger6+^EgGJnqYv-
z77G6Y4(yX-qd=R7mB^Aziv0x1Y7 at -d*dcba1wRj1J+q*wD8`o4szl(&WH27w$!HfA
zz0o6NJ5BcxB|_kAR`h>woGR564W8pDa^!zh>>5&&U0#p?dVGKXEWsCuBPM-zT;u2F
z5t at GVE8!?lF&!#NjOfwnKNY#W8A-#&@03WJ#AmHCBh-X!NWf_6Tv%}9N+^JJK at z(W
z5q;6?WDBv9cpG*+F{#AJ9b2t~bS3**x#c~WzIaSZF^QKSQ_6pF9%&0W;nmRx^oH|k
zuurO@`^|MVj#*KyktSL6?Br6mv~Cp`K_>R9$TSA8$!ldnlas3Th|kY=gF^D`W0G at J
zoc_VQosoebP4=2?bWc8vyIFA!`BLQ3QFmW@`XkHYvqxsXJnJ?e?J(Fc at Q5rVS9Mj(
zBj@$l<QtN0mo<Nr?6SQMBIL{nqkQU%-?&-*ld<qMjMbTHJtvyq4DgFoc5LM)Zu^)^
zBWueHu|0;6^l#?8kV`Vo4)mww68VX_oqnM^XgjTsJPES7WXCs%?}hja%1pBDlu&oP
zR at e1{y6boNdfZb#5>X3-m^PRmV(kK2Ihfi|WqIBYXgGhusS{Juo5tJuH<00B^6!o4
ziOws(r>wr+;eKB+32D#p?g(5^^Fs6 at +A`xN#(jL7ie{=_Yql2CX|0J%j$`IP(@J<U
z6a9o*qFUv4=AzA`-&#m*fpDV(!Q2+HUFa5V_t^tnlP9Xrvhur2shJ2H8DC&g at hn{_
zCEs-iRsnyUko15 at Csl@X_310)UraOf+z^kSvJl4j9{08ryE(k;EF2^>*lS8g<04R|
zn+ro#YOYM5<f^>h6QvAWZPJK-hP*O#&s9Cv9E!^2`haV!es}25jWG!o^vXaQP|QQ_
z381Y>uv&+3Xz{QFx~z!SSu59jE7ug>$x5kq?AU*{tzOTfo%a2cS5!#@z9Hc#*^qMU
zP!-cehYPeaPI<N{bl};cU^aVJEx|~){)wp&=leswHtr;i9h$ybs at ae`n-{)=o(DB6
z&aL4*;w|A9y3zdwDG2#|-VzH;hfh|HiI3hc8Lnsq(T;fCg}!Y{dP~YU6&kJ?e^sR?
zBXNJ4TGw1i?T8nk+=&#me$GsL);)8|E=P7Pc7py3!h;9A3n4E<41ie&!Mz2sDt`}%
z0BH##B7hH at d=)qi6>l0p5`FsM<$#$Dhl35(6#ns##v_M_-qK7y;lvuyPs0p7|L#gK
z{(D`wsiiKRO;tHgq;VbK at G>MkRvhq$VB&wbm)UVevH`b?3u}12m1`O;_af0^94Yap
zh=g75eoyAm#rPmfrd}4vC!Nz(*7j!M)>I^xWZ4q%4dZe{V{8UYV?$Ft1RkuxXhNkv
zR-Yp_W2{wes>_Md at x!&MY+U5Ov7T)#62>JdZN)PKf?tUwAg at vo4H}qCS<5sqqRf9+
z-y^Z<hP~%GK3e-rx<?8F;)kgg3wP at Gv$ue%E}SmSq6%RRb5MFeGx=RI<z^-*ECD?J
z8#?WGWpu`$5p<8=kO*P-SVco#--CK)VcoOfXSWtjZTP}pk4U&Nm?Q2t&mdw+CJsim
zErcB at A$XlJ*B4;{B(SIMl;G%`;R%05681P at z>^DkGDUcawNF*c?=|q|x{@4iLncIl
zK-RRcW+~@>KTgq`W(ILTsB|9-q1MxCI%g!R@?4?LbcJM3Cn00uGm`+ at Va9(_HLXzJ
z^K+5b(J&l>CVw-gr`1-Wh?jGrEB&ZCnbF3Y(f_=GH9psmfqwW_9=hND8kBzuF&qRx
zfflIf5Lxo^MN_m*V@^=&2mCsz-_G_ at 6@O%lv?ya$TVh0D0jIt|A){d`2~uHY-I+P$
zc4f=iDZP05g-Jt+Lm}SMk)&kG_HpV**`>?>J9wj_z{UQ9nLIw2bJ>?tiHBG!mF5jL
z(@OruEcU^TPpEEc?zH4!ABKMhXKi!Db9+&KXf-S7{v9ZRD_z1<16es)@di0gqq#I(
zICrE;w}V}8su6Q|DSW2amz=++YppOZ**3nE-k8FK`L;nywo)+ENOCl{d7pXgul;E8
zXw4`pxz+^7kyyKBod!IKK`Kd}$<xkU$pG?O{mvp#1zj&V4-M!K_8or~h&Y?N1<{fy
z?n8wO*<byQeLg>+e3z!dz2TAdnPOC28oE7p(lHODmyeN2cP}n2yYN#|lVs{hGzibJ
z4;lhD>dV7|)SywR3Sj8QtOdV->5(XlCAvm)G7^a^f&53hz0K^vf&5kO*G?oYjD6be
zZkBuMO8U}Q)u^?@b9;Y}=P#D1gNn1l^By8`WSs{uP47KOL`uClR!Nbio>|i5O+`@N
zYDR6M%WQ?k%C6*iCpcXj3-<lq=e6Hos*_sGk{vXc4k>jgsj3<%xs`31ef6NkdSy*^
z^g|n#hG3of!CvI{P|YZRn#%!S=V+Z at d>8p&4LBW91(Jq at 8Et>0cR4KowNqO2;FA$|
z^vu(Xot?W0CIyclc!u;BNQ8f7$$I6yR^_x8-**Ds1b?Z$h$5?n2oMirJ)6o8T4uat
zJ*KHToN=^MoGsTIop1n}L-N{vvmv8=G+)Y~M6zuP{hbXxA*1w$=eEsTJ(0ux=xGjn
zJk+s?eUd>5tw4V`K+m&^=JKDa6Hp{QYU-ehh at PRa?C!PTV6Q#{kyylKW$3uL)Og*1
zHkmP6n`f3B^9X52eLD8mF#Pi9K=~YDy?9gdR at 5d{Zixn8w^6TY*cA15ma@{!wN%Xc
z50?;r2O5AAg{5AP_VDOdpMK}aSGyZ05v7YD;rqOOL$-gb4+gDi$U%{LZ73!VbZHZR
zS?zwNnOuJ*;A4a~YQ2FzdYV+;D_f~m6vqSe|7<C|#OpPEO8vCKq5XTNGH+Y!L}l}Q
zG}G4lFi_6OlnCJ3!1`QKgJYavaXY6MO*;R}zAZmH5E-1Ewhm#;lRM+5aYL)6`r5Iq
zZoQX5{fB=A=MMNtl}ZZyd0;iQ8fukSDx{g1Ua$bU!Th7BHW2KvFNS<+Y~YOnAC5I?
zfwrGMT2k7HL0V5)*M|u587!+B(tTp#z2PRNIft~>iWrnXgkGmI8EUjfcgwQRgwBq+
ze==W}?}xv;52kSuxa2z=bGljoM_i+Ldp^cXqt<_*u4?yVQ>rcoCqYgqUs<u6pvRXQ
zhbvh at Yn9CAVdbaJ=pcGWSmiFiOU2SpIiiVRfUP4;h>E2()FNrgu!g{Us8IM0i-TL;
zKnT=N0Sq%&2fthxlJIBVGn48=l`W>#5~xi1TXjYLzdWkKYx+HS`57)7*c0aR_#!%%
zmtTK+ZHH&xc0 at j~QmcH|pT}aOc2u-ZE5*Ck%28-!xRCIo_m at PMBNJXd9?CQpRr$Es
zyJq@$W}4q&<(<PjVbU$LHTZz+fv6Pp*gy^YLnr}^nYF9k(HQitXoG6cht`iOZRQvc
zpKFG=7`Ah9<uQ1+XVoG57Fl9l*Kng}(0YH<gR_R;=+@?(Qv4LyR_CyZ%4KtU>{-=b
zusU8BjiXxh8EzCUZRp5K(Ix0lQhOo~rY_xSH*nmw6=w&A4)8%6aUn*c`jK{|Agx&{
z07Fu+<;Ya4MuJzuD<jfuYybh1z=?|9RmH8j{nF1BdoHGSl9x2QgZ|Z)l%>Jsw*h}f
zVRz6MW*(xKBC<x?sda at yzV|W9bK4YtZO$|^)Usb1IRQM at K4fl`rqfr2=K)ryH1mhA
z1M!8PXev+a+u*qqhVTyE+ht>xPfBTxAKSoV1*}C6$$38*1_JMm*G-yC#a^@`lXO^^
zD-D~g at d%zGICKiC-)zz4<BPhQF`R#M5zpSy)Y9{E!@+l=fwHlDJtSdJ8P|3q at azYd
zr*>fPmWlc(xLlIsfCxYF{S$L97VPfnW%(`Tw<E!V46v$GUhH&(u8Toig~x*(b=Yad
z`|kjn&+qy1^z?8zlT3wr!Q^V6SS=Em?bFRH=*M^3WD9&Yd}3OaQw2M|7hHc&c=Ktd
zzl&u#!sw1~i at 4G=_#QRln=?~9Nu&4Zn&aZYdXKy at 6V+spE@XOnd`w1rGOx7Kbtxhy
zNZu9Pa~;up$zNgW4;voO%@62nGm8+HII%t<vfdE4UN)s{L^DDX<90vDB^-C<KMEy8
z1`I=HcNAeJc=#RcgbdiGc_4p*KP&k+>vGfc*+y<*O2 at YtIQavKGWN;pyrN?Y?15C3
zP69Kb`*nfB{*QWj!Pl2JBh!b}E}8$Xe5)SAl8zj2fP;uYJZlHkT;TH868ar4ZRn2+
z;REfX(PfEm`L7HiAOJ{ts3sNYm@;!Gx?V~Ha!DeO04SI9Ku*t$|CN7U#Ly^J_}jZ)
zZC~nxDVqlZ at Z+_*qM>0VTe1cw#K$(#I}UhJ6V?rfTL3WZjiGf*4MV(xPU*?@@hX|0
z?BtW=zYh~-T5J<!f(RntO_W at eQ~ZKRfSWR7dQ$-g>Bo-Wq%Sj%g1wuUom8J?qT5By
zfSEwJzd;+uCY6efSLlCOn at yrJLs~yM=AC^@%y5oioXF(hj=5Z&C^|%e8*cU%apEf_
z(Cbk9fOglayT-xkYy22xSj(H|W)#X(RC8sV{(I;+3hw2F9=X;9g(#W3yhfr{SV&%n
zrf^u1`bJzOB-$L&g!Lomwk+JrsPo;DSuSA18+hZLJGMcj{fvK$yQTOqUUslnKt2gE
zf^i4&$6X~yF+uyDDG~vis_ra;>q^w;xZ&FXJ||sUs>w(uj~@Vxu$E|ACa^A4Du-dL
zWiCq7)8!OI3oa7%==f>58W3>58Ov&m=6CheMfTGZED^6WY#;JsGp~@Lv!|DkV-Wxp
zRye`%`*F;zDj0u~Wb*5gDL88q!_qW9GTVH`l<XL~RWPZHp>ui@&WkZyN1TdTNy%fu
zbhxFs2?p~Pnb5_Z>hhO9H35dsq6a4vFJopI9)C*(qg1i-V=~kv+6jPno{Lc^tg}%$
zN+WSCfiXr_)_OHX0(O16y7w{hy#YAVvRd|0Q<P`f(ZzpX-G`BKpW|{$d>s4@%1P{4
z`eFKs)Lp!5ZIcsPG1-b1WC!h at 3ijs0F%x$WH`Rie7bBguJ+FK1YX%xM4=Vk0G6?5$
zn*_+q(ow(hA0XM10*C>@=@iB at YB@>b54KO#uC<z#z0WX;`<($b7X6ojQ!1bl4r6FS
zj^*S`!tZ}LMt>XuIh%>Z#d^o1PK?1c;>OS>1lsvfmaCTK00 at 7`5ZMiCSxRgdMBjYj
zHeSzyM!HLB#Y9LwHHA&9eE`j#6mI at B2S%oDVVEhN12Q_|K2fj0=nA5t6$6&Xm7$PR
z&?xLhz2$ErgR!Q4smtY#J5MR*oaZ#PW<Hu_&MSWftIXB-5&4<0o)yI-yV{Crw<pSE
z7!BdlNMKwBL~zW4{YLOhAarOQ%d<AYWL$+%LJ}m`J<@g(xa0>FWtF$kicX`LMX`+*
ztoz3%N$dB8s${h-$L$I^22OrVoi)UoUiKPP+m1$w50~)!OEz at K!6A6r&)WTXP>0Ia
zmQ;T+^&G7;>X99(0bY4)E^Z!(hm36*?^qpDDPAVdT*7zo;ED}Ox;?N&#sF0?v5tfZ
z30(!pH5`pFY{=A#{9+;jA&_!5M?sw{yJ}D{(KgK8X`hXR!nwSoXnknXr>)M3>G^p^
zwsJ!Q+<ASRtc&b5C+fKRPTEyt{>u~PW+#6ML|bpx<I%kUYOVHplGIBQ_p3tMR}Lwi
zJs0pB##uiOLN>C#cKxzjgt=T>@yqE(bNSW6M*^dhJ+F;CNLta>s*jGTk2I_4=Oags
z5pU`53?nOEPirLahd*2tcClT9a}nR3Qo6RH&Kaz8(HXRwf&b;5$0&z*U;1VlRlk25
z?iJ_v`PgavP?yG0S at Qv{4RDp3HhWor3!Ju$gLA<tjts-zE3NYE=Q;zMhgP;Gtvng<
zrT5Vwbt2XwIJ0>6Rj at k&o{}(AoQ|pGbv(y4bUG*%+clO+mM36%*!?3U++x9empA8N
zs7;%RA&wo6Ze>oeISD_2WvFi8{Ud*?-~Jo2Wvo20fT5;K-CrGrNOt%_K{8!xf?8>A
z`$wNu((iya<lz!3u3SqmmRYvwAIIvZ4Z<8|fU^Jvl?Zlh<~k?J0z;*)qgRB82j(Le
z?XU3uRGs}eB8&KCi;mjm`_eyvs4sE>$;|M+t5$R`ZI#>vc+r08<B at Eaa4mmzG6rT6
zJ;W$)wI?I=hBDT6k9pe4;h%g=P!lQC9Z1bqB)mki1<K6cZ}}645U3l=WLfYI0Y~)1
zN#>C{;;BIO9u6yMc=F81iCx09%W9SguBaWg>Om;R1c?!41uuJTNq#D%)|w*=<b;Th
zCtj)rt(HGenZ+6y9#RXLJ_djN+uGBLf`d(M#@kxNVO&CJhF^!R>`$?Oz$j}CR2<bQ
zZ4BOi8tTEfe9!;F0Mm0OE)hK<Wkl at fP|9uKPW5g!h(pLToe+et at -WP^XR~4<s(_y;
zNiU{SVDUr`hR`icoPH~95B1>mkL^<2FKF6 at ErJ2c0{mw3nGPQ1{nmd{VMFtS6WjJQ
zUR3`!=-pV$8K&-MxtEou5&Ba%Ta^TxfBL#>>G=w$U^Oy%0?i+OJy4UHHNp{5*p#Ru
z9~ndh2i=fBVRR%E<>zZ|)6hy^Y9)6RT~>FzgyYraR at NifRs1ao<LbMUXa+T8snHs>
zT0a%xpyot#A}`FNn3aExZt!kA@@qkqzg`YjF9zrgFk&{UOIvsUkiHq=+A<@{AZ^7I
z!kma&fsmPdpJ-3)WC&AAPMXFP&I4IP6XsR6N1B7ME`5o20vu%64cxiY85F&tK#oU~
zbp|R$_QY5`$&nJ9EuR^lVvS{Y&8z!RF~RZT5aCO}Jh~mhUqOFN7Yz7Lo)+XSk#3}Y
z-?>czwybxgQEBR_&52BdW_ESC1F=3xM>_T>cuawYohs5T6$fCl5OBE1l}aM)0n8qM
zA?spHWa4LK7n)eO1{nY{y;KiIP{{HVjbX22^pQ|+WF&>L7ebU?ybY6Vx=qSm>BwPj
z9si$!lW|2JmOp<Jd4cJ?CY^_coE|jNmc_k;r-T<E%8zs{1>E@{DUZ!T?IljTF3-2X
zww_^&gYBzx(IlUc17^Mtpos|zOo0{BEuf)>$S<DUx75{5XG8k(QQm#nYx}P0{%>qG
zF at a~Sj%y6$0Z1^V4{`p>hqeM}>^t1LXt at eDJkdOz6KsD+lI=W0p8mz7C^5omPObBZ
zSpGsJxWO7k0EKIlBVl{B0RGp2Q@|pI<Zke4-uIvd7&1!jx!=<O=QAO7sn%Q_ruoxq
z%M)l4WPj38>K>}IA#iLsgtu&3=sXXcHf4m_5?r0of&r^T at G%LNSL*Nz`iag;od!q^
zU}k)nwu68Ad90x>FLN8-qXY}1&f`oiya>%SKMWjjn?#*Fc_9SoQt~;F-Nfu#o2AWI
zA7<HMZ|8nhJ65z{3W=x2XEI`YlyeXsvbPK7_)dohV68n^{LX9)L^_zZm2OpQ-Pf-_
z$nrwTw=6RZZxmgBB{;`ee(7ZXY_AOcYaO^(U7UZ>e{nr`V%6n4)lwncd>2Fsh2GVN
z&ky52&*B%P6Tdm0AcV(4r0nm2K=lpFp?MM})nkK9CMebQL;7J&$-a%|M#}X6%mtLa
zIg5At&Oh~o68LE7iBrJzKH&eC8WRcagdI at ysz$p(S%A+Aw-vi0IjJj2z}v^>bj>6p
zymWv4O_6YqDGG52S;&JxkI|A=OnlF!6Lv$l%DWqPL70_10I<NJzAb*Fko@<+kjOjH
zp)+juW;$K+XC3@<-Z at 9gX#Uzx2(`K~CdZa;{sbNSA`8e6OnBU5J+U{t<<_}Z?zBO)
zZX|_DsGV#yM%}pzK2{gUjz7WaB5$$}J}ZBfhD`te2!%iHd`5<x5WNwN#ZdPjh6A0E
ze;uv6Nd~xqv{U}((iJy@&NAe`%@0to@~jgMcDKGuC1(t?f19F85H9>_rrde=gdHoh
zWffNubqLYFr_(h+unPQ at JPP`qxmT0{oKdDlW$8I>ISu54M`Pva<>O>MDKvx)?(~1}
z=cINmI-UN3++xGai$A#k%}LOURT>@Zi<i?k@%{b?YEP%h&j)Pc>RX+sPQlEJQW^YN
zwG at qWosMxcS@!wjwE%KifMjLb)+(zv8yfSkg+MnVT@~NaX>|p~UEKkY70%djfM~bX
zvgU*xXnyOxM$o*cdztJGYC|+vdgy;DPSOZq4XxnF5?XBiSl%+hzT_^$xs<gJ9(e3C
zeE#l at hfhdP-cTmU&4_QB$9BGPbUL5_cz>va^zCD;uyc`;=v4J>k|+wOne2sBW;;EC
z(-?b|BTE9dy8Z0P=n?3}!u at 0SdzA1`gxghH8nA8jMj0CeVT>)#g8DzFbFY7RJck{2
z=k1Qjw%tIiLx9&2H`P&&)KQ6bzM$U9WMi$5bU=085Yj@#bo=!>-h^NM#5NFTD6h~L
z5j~wBha>uF8qpAmyVK++ZFr|^1Fdg_OJ7I$HgRdXm`oBy4H{P{BW1kX_P}69UHk4M
zHG)~H4Y79jS>>_rJ&|=I2m5~toC1tF&=+H~67Ow3jNai=|2SC7Q-ahM8F>@_-;?*8
zq3Z20a>A0~OEU2H^%=D!%JZchq~n9H^KVerhcO-?u)p$KYH+GfbM91bGFfb~Zgu(j
zN!w+9xj<N1yKuKL;n$!B126UbF784H02owj2X-smu2n5{^^RMt4i|sq0U{%+oqCYe
zw<crBX0;2{uBlH&Scqb7s!5*mj<K^`9UA4kun>a(Od|;M+>U8yzGd6$NB{X&_FwR^
z<;4$D0o5IMEYfFDkB*XpGeuBV7f9$2kri&qBAzW|c^T>7KH%ni=um1)hVrjHhcvp^
zs}VNMVYjdWiT2lWVv>K%-bvK3C{TK+`3KSy at V*))Cx!7l#k0LTlg1Z*V>PIV^_bI^
z<zY at imAsv2@M!vSmNi^AT>Mp|f{5Cq?%Z=D@^P)@w6(F#jK<2xmrzCKmc53iPAm8+
zba at 1HR#6zq;?5n-*S;3z6$J~qG<E@(QSm(*;^vMo2f+W*r#XMZ3~a`fE}wo9IYsr5
z3k at IGD3ffL+%galu4QGzmV#31ODUp1R>H<3R4vu8iOeue9~6Fck0y|gS at RiQV^ek6
z?YEW=L8_6Fkw|2I!;@uP>@=pBO+MWA*;Bg at jf0w5)BiuoYwE2e=*Xlhf_7uhH&zqC
zS7RLVuv;43g#mxX9JJGs&eLm;bU@?3=++ at t`Q}GLj#F}&AOQquc^UY#@%)g-Xu!4l
zG-{Le6Qqh5(}|cCh~I+iX0D9P2YYV5N#k_bxxIq(D&RU_gnD%7%RLju3o4p0>OC<p
zkl|0+z}(;5FG|QS(e2%F at Lq~KTB2lS>AGf}{)^eo3h951Q*$~`z^C*;Ct`8bwW_vN
zTha^8?0&NKW&c}1xvIqLh`3>3y%jExLuC!q=lN7*Ws}%b|6oesNgu+AZIHYAtVKb?
zc>yUF-QBRw?)K5q+lU+{P{gdgL<f1K5mfdS=xJf$;`W6V>N#*YxWH}{avu&?dlJ<x
zb81pV{sw<tXv+$+*UI_$Y)s=yA4@#^<9qqLbFVf~N<=Tw!fN6_JPO`1uV>bg-J$a#
zGOvZrKIaO6_Jy3{1lZl+1Q&t;!EoYIKOh<<qS`AmBR(_Y3pFkM`(VZv<LcM{=Se~p
z^4GJxmJdi?VnRKmE70zv3tADH&2gZ*(s~!NL5+VqzyB4q4iH)P=L}!*WIDJD>quA+
zx<ss9!?C?&gu6RL<1O0yAX&Y1M70F#;xzRC9Yyr-(Ob|EKBr4~xt8a=VZEblzTYd>
ziN3*h09~EqTaKn3>KL@$Z+`efI*!0e-i(oE4&F`YJjX(ej~veO7;P9qe&oT<y{Lt>
z&CP$2=n%r?OR- at AB7^?$nR5R2Vi_N|0DAx8BB*Sxg3-)OwfV(tiQlOl{sqD`90nT!
zy5$8k;m2pM1tcCj-8;mPp_stG_s3C0n+;ZF{7I7^(sQ;6ZRo;0+h|O);fVP3LuaO}
zK(>VfBLc&njw6s}Bv+1_;44zEM~hCrA5(vsdD0Sh<F0KILu>h)D(e1XgPG_pf&m=x
z0Ei`gR at xN=?1H|Pow98BO+ANE`FIQN6Gch<Hm=(oP5l(n<up;b)KikEl57g${kICr
zdah~>9XjK=(6lXlkyzR}X8*92AKGz-Jj|(^rgii&2||qNZSGIOHe}8JgkA1uObCBS
ztj%xvh2b0%VVfRcQf~bdUQDE~j_zV?D9Pn}JE)bH>_b9oK>tPo#aT at OAUQf{hVa-q
zOOkkCkmZR~Y*{5ye2~G>lxq>SXdedVuyNMpjz?WWCAgt?9K2`|S;*ImW>K(o)TjR2
zECd*a6o($$+(G)PLak9#w-I;mvCn^KOe}LK(5wJ>VGF*-01HiaL3H}c-)?&`$qyzM
z2_bx6CqcemFHVJ<U<x#r5g7Hzs#O%x{UKn1!lld&v{nWBldr4$k-Fhk*=wBBoN^I)
z5Xt%w5S)KwEy&qD8REiMxJr(<L)<DNh%!}VNTLV$tUptY_l4OnLwdPh>Ro at QpqE>>
zCmh at la0{Ud82o$DXuT*a<D2^WB-TV=S;bPPnLdv~I>UYe!}9h#<2?AY#7ov at ShZv0
z0+#SrUA5w_8mE_^p2{hc&GjVO<rxhfvz;Rd_n%5o);}mK#J&25RBCz=VChi4FvfSC
zJ at P*_tV^ABtAIeV61#fV<F|iP;ypX$8V#5Nm(2Xds9Nontmgj!v(fq(!gYKBLG9*H
zHmcmVPUWd1b=X+dR-jmMtd^yqyEZZUAeHRDZI)&&9z@`xPGL=1>VIMdG;ed&20JSd
zZdpDWuc`q9NXxaEz3>hEG}Gi*ae=TB*$>OhTe(~x^+ularA}2^iavjHO~V+Ck3w=3
zc1)qaC4U at lx6usA*zn$F|J(35{*u|@SEO?!K)R<-dDM2!z}_$tqf*eXnf=}xg_Bpy
zKs){Ga(6^rxaB!G3?|4 at XVx74xV~lE<_aEHyJ84C$8Kl!QNe%*g(tUuqogGF at anN$
zBrpK-;?!;X<m7`ADnEbKLMa(;)!CbQ_+O)>5Z(egfY`%8=lX#P6Vr8c-j$5pmsvAT
zC=h7Wk!q+)v5zK}DSwmPacPr8%v%;D!>3?4$Bq=j=}eu5+Sj^VHZ9lg^vSD)mo6 at D
zQASWW*V&@%5Yx)C2W5)-)P+*kVJdWrg_g8U&WJ9+=%C#XYJ-1X%sgh6nJNag7afd)
zK|m23m+$i3Rbere(a{UjkZV_WHk{HCnB4Sr<mjP9VBLAa;IV59mY`-TEJaPAQ)7T(
zJeF3}$w}>QkE^K^0r{hv at g?}OK;g%4ldiz_Q1yKncT)~oyR-i+1^b#1T?G+I1%>O-
z>y<c;moS2nhSh)B;FV$aNMW(f6M4YHhShCZ>1+<x^;VN2C&6}Q=U=DCfP=f>?nU$V
zMS|C7Rlno6VhCX<<fHF~9B7h?2+1Re=N455xG{r{VA#8(f&^=ojHrKz^M&YB2(|4o
z8eVwgGO>FEheatb+N=CyEH7Oodkd~ynKe+&cD~nPE7gCm2diSEhy4}ZP`{8@)v2^-
zd5^cmI1pG~;{wl(``xDJy8u!+NgTrwUeXlaRXC%eBYR<`2v1n5H7ln`QAfbbxYJHl
zGc~>guq1LN`WW`fE};?r(9Ov=eY*IALN%;jHrsq1-d&qH$SAd;WhQAr%sZXM2oWNR
zHH37U;G2J;Kg8;>^w-X)b&_QPOR>GqSDG{U7};<hQe>!FW^g8NA7rpLCTcZtI&7J=
zH8&~7cyRY8fW^jqD~-|dcb;Sd7_niG_Ax1DsmaH3NL-IhQlt?lvN#Jf>PrJKhG^+B
zV&RYQ^uFDQd>h&Ua?d<0+`ipj at p~HWblqt}m=1qhElmgCJZuNJzLnPb#g`V;e6NDq
zBQd?f^}AP(MT($Y1Gl at W$8?7X4V^xovvHVN9p<k;*mo8f_~-U8GzEOnY>vhSgw$I1
z5`>>ah=xLwqq<xEMmb4BV&;~xSF_Fx&sommpiVva)RMXuAsmHsVxb$$hSgE;BfQN$
z&7yzwXSKK@=U#r`bBny_P#RnNh at aS(9T2D%WeCWh79$?*c&_IwNNuvNLO9fQarw3y
zdL(3gn at CiZn$`*>JrsEqbc{eZCN<s`TP--Yz3yRlcy=y?lgeW9MG-pI)e&Axo7T>|
zJ^%KAYr)@I6pV`|oY at WejXOPlGny0YC+L6vPMn8Vs_8n`xOU~<RwW#K;St#iK=mGA
z1P-${U4a!Btp1GIF5{St0WKa7XpH1^`LvF&=qH82N5eO<ZCH>lAjalCR~q6=?4ZWw
zO|9xwrwl)!A>UEaCRQhXc*bX-Nf_e5X|}bk&Xb_-!Ow$CFmK2la6$;y7A(%}q8)#h
z*YL|`J)V6wlIb#Non*7iL%QPpH1ZYM%-vq23IS1X=Vev^8sc#=e_2y1i9Tp5c9lmo
zafpa@*(w;p=jQo~P-5K7W#;Pdr~BE1M9S^|a#3_b^- at v&qOTy`jZdElB$RQX*%%NT
z&uBkm2#Bp`SAT%io#eQk3$lUyH2;6Db at 7O`!7g~k?5}kjZIgO9P+(!!3W|X0!6x+e
zU+UIeYuW=XFRG)ig2^BrB(G%%JQonUOqJS|D{|lYt=wNhD*H>dxNVB}>T1gkQ*7<Y
z8ll at TJrh8=`b01tZavLHzHHDcf`CI=R~{24UX{B5N32OfJMpZbV{22%h01>@mGTT<
zR4d#=u4bX0sB1v|-<0VGi!mJFU+tG}<@!-2YYeI%_PJSLDY~phMqgTXaP*E&r1a*!
z(qJ{TX!@*hh@<B`xdrs!fj7UN{fv1|%(OLk%D9N1siQAt<WG)1g7BIAfni<d|83||
z`FCMjqZ|~+**1;ktw|=2?W2G5Kv+YKP1DXKl$xNJRZNg*G&ldG8Bg8`gLI5E#@)5O
z2$!*VE=yy1HrE`e($lnIA5nVP1f~30mb9yV=vRUTXY&CtZep8d<ZkNqd*&(({BZ#M
z#tZIGk)S-K){T-)g4e2ASkZ4A9pROV)6K%~=Lo2ElVW4q^QeD1dZB-CVh$%u%easu
zUzCVU4nM(#m>@$k#@ipm4uW;x95}I48CSxI0P*NEZDlk7s|D6q52~i-CDN@|Js&|{
z``M}a*cC68+M&{iyJx_!#g<$#&_ONW*yy7BLPd-=0 at K(w4FfNbKQ*VIS~OvMv42Q-
z6x~_-(>0>Vi_*!ywj_Toxh4at?To(pway*`lGe!CG6mqK`(0VSIUmxtuFL#k?})LK
z?TZqm*(w6U?LFybBxS1PypcEaGv_sNkeoo=jsj>{Q8R&e!C~;x0dMCAM+f8Gg%AKq
z3he;R)Y*w7 at XYIRi7!~(5jJz?R#jDJc$srdul7E(vH0`rN(+BMN|GCBOy}t!#qRJU
zQA#S*Hhmd5#k+GR?%Xzxb}On|+j<Ml_uzh_wzvh2rD5BX$jTft+8FrCFXqo%XAJC9
z>MS^|C{Y8RpX*2LEo<^f2oQpqX$}odazp#N@}QwB%uJQ31$L6ajks}dzt})LTUS0f
z^GHpBbmo+}M>&7(8D3{Lasp+GEO#a`<1S%I3M}?DH$r65^=?h~<DDS3L~EO-47$VK
zHEE43vi3wML7m)VV#RwnT6);EF^mY*g7Dh<(K^AGxEk=udwVh+z~^;DHeeE!hz;av
z6+a_P8Ntr;Kih!HBMtnWK2_`Zo2G at B*+B<EX(pkAT;+d4bJ8fE7;g6#A%RKdfMY}k
zy?+jcd)S`8{Pkmr5DN_r1W-mqouyJZXL?$;m5I}=b+3)aeY49Gk0+I#W^fgHY<G$L
z_Jo28sR=!M>tQgcgmwj8Ivwb1E_R;e8+`ci{!W&mXxh+Rw5cG^IpQ2EfMNJLpnb<A
zaa3-Hg at 1oNAyCK+iZmGD0{A$i01(Rab_X!AcrJ<ZrTKAb3V<9d@<e<HMDlV4ZT)tu
zul63yGI-#fx9%-SA{_!A*xo9;D at 12x_SGsrP|PnIotK7mG)YgdL!tGi(h1nR*1Dr<
zCzts%vcRWs1(732c-Fh5N?Cjlo)Juza at Zf__)CBNVLb1q7SDB*8XOh>ZZ#;Wss*S2
z{`q+<kq=#(7K?4O!Ompy*%z}qVeOaxRKt$5C;c at h-^0S;+2Vug#?rNC{SzNdtvO59
z at -X$mnhMFs&lHArtW|_eiJ1?DyE$J~-tC8TeCwv`<}1>43gT at E;p(F9@}n!X1NS!w
zXJ&thP?$SnfNYwq5~4KGi?6Ty7?hXtzcOQ6$R0sSK||!*!uXk)Kn8M3l)^C=`<`OV
zp at IkoUsC5nZDCqb(jU%wn8>EO^^dBybSmhL&K!`w9(MAy=>v%}Z-W-vES|Sw7GV16
zA`0e^Dp at J6Uc-VsM_U(Y#~gC&+aD7KDLa1~IY;tgG%S|Dg^6bzFAG$MA8$xo)<A<Y
z%#X)MucdFO%llC=R6!$_{|IMwA_FqOzI|~C5|lF3LybSk<&MBUf+3BPjO=KcYEk;(
zzn8;*J^#E&HVs%<mmQ?#653<)F7CiinqX9-4`RPD5B&p2WR}A9D+fG$3v>^HANYT&
z`=+Vy09^--5zq3r{4YL$-O8#*B|>Xf+_j_x=<nsyZ+edaa{Ump)=yJ?x2>#nOZ;-y
zXDQmXsT(%tvYRt5{fo!_ER0V~^Pogq<aeQ{^=5dv4ZOF*_(S^#u1g`n-TDC1J(J>3
z4D3FG$hZFtgchVrLG4>x>MqYp;X;3s6#&^q5UP33m&=!EZPeT=+tlVTQX_C?Yb^2H
z5+%Y+aOj!(D#&0bFY;JkOIbjrVupNa_a<D{=r!lRf2MA~UUh6baJJR;>;r=0GL+)!
zD3`~J$EK3qhe(cwMNsgs&Eo$Y2!ZvpI?P|+iZ<fY_!Q{}GKXv~+so>Ej^KY>A at kY-
z9RFf4jIe0PxL#>j2Z0_orJ6fjo^abh?LU at X^Ihd at y;&Mp=%&Y!Muef^)Wm?Td8X6Z
zu}#5#a_N*b{j~x)A=c%czcvWJJV?pQP7z2W*T7K@!<PIlPY2<@%@S?9A&y8s>My^+
zr7(f+{+m!yP`oQ&pi}}E3M_y8`@Vq|YsY)z0c?g6gmn5B#LamE2GzP_-R=&_-Rq9j
zr#o14k5%ck|BqK=&+c<+8)DJ=jU-2)zSi4msACzk9ycoPi=~!l$I>%OfA1EE+%&k>
z;lCYeea(}mlT1|GQXgI+J_#YH^wHncc#f(h5agseb)mQ}M8v~<y4rt?<-t1WwrL~t
z2UT^E|EIu;OWGe*nJ7p(0KrGu{-r at +b8iG=9o_?@FcrRQP_b50^B9$X`lt2iXE>Pl
zzq9WZTz at DR{kR^gfc7SyP&fq3r`L<<J5LUwSi1c^yL2P`5f(6 at xotAGWftymU4P^7
z^L-c#j$I<pQ6Bi1-ui!!P6?2uT#o#3|C{P%E^Zu_LLc;(7XwpN)<QvwUoZCuM_UF1
zd!)NT&%NPCwhnzG88dCDs5jQr6)l5fupmDW4eX7OzyHV>u*D~-AqTwVGB~N6<4zvn
zi<TS%*e~q$9$`dezy4~V at h0rkjieGnn=$L605N7l>r|R0{vv<buPT%iXCU^Ft(p;l
zX%icK$)!r6S%u_%d>Luf7$f}VAiU?I!V+wGsLah+`-OhcUA=J(&v*fCz$*%)I at eTd
z?EAPZfIYgKJ-(4<AOBZ*wFpZmQq+|mb{VvHgcCY`#7pej?sPuks`kV3rPUz*X2enG
z8s;vof1)e*y-k17ADJ%?5wA;Zp=Fvf-MG)Q@<hce>XKt7 at Zd_ci8Ej>wMYO1K>WXr
zg(ebS<{bkQ<)6!b`RI?cRg;lTm{!}Cz4hbj=gXh?T)WEribPt|TSg`)!EZG!nQ(Bq
zD4t$uKjTyf=~JlT%^uvZT-#)@%5%431cz$7<ww*dn!*NviWV+^3Neb``ZWj^a0FZ&
zgF at NGFILNzH-~Wj`CsBMGob1y%ch^fFs$HXK$p#kE0GmQ=bIrIZ}>L8*oe#`SuN)#
zJeG#roHzFNh<(pEyC*CtIn%rReLVrM|1p~5$#v#~P>0 at m4s*$vi#G(uxk0tUFGpf`
zQJriRJ+O!W!_Z`Z52~wSWjJ}&*Bt+lp&}U3Gxv$gFV4TMxm@)xHZdHGA8F*Tn&ox#
zmb`H%LA(bb)>&R$O*ZDKdu#kGmZpn5Aq+A~+sRS>Zd+DH$waVjrAQDeHM<y1Z at h09
zGua)*A_|@s4v66!HquQ|9tQn04(@(G{^<mNew7;9Z7kD&$tiEPg{o0Ct0+a_9#vJZ
z<rESid`p#-M~z=L;Yl0!6ut1eAzKiaJEkIHk$Pre=$;OH0Z%(d&Xg$RdCe1~6JAL;
zl$y-1Cj=<TT>Nu~bsYQ``o9rhu!0LmCd9TUGFlg*?d}{@VtQw;ONwAeY$Ss!+G@}q
zX#_3?+>*b411l!|@pOOP9!_-)oBYids3%ssR{zMA<(ZL88_de%o3L=ACK#_Z3tJuN
zT44{(G!&=6uwoz&Cfy0;mp70scPoDN*L#W&CzUj3jiS<JO at GY`K33;jq3dvt*D+a?
zIB%yf%b=uB0|kS%q98gNFPcezifY$|!K=fJj+23Z|4~LO-DGDUQ-fm?6b<`2A~kcl
z6ezOqiyK<c5rB^snT-w{{XHmAl9Z^&MH5jM5=|-U2N^rKc*B^-74GOmPf8f`s(2?P
z#DY}F8_{EXAq$^kK3Iw4iid-i0^;47ze~YfB;P%srl<D>D at t%Xtwm2PtMpP8*j7W!
zZ}V4w!Oc2L7GZc|on)l-;l4Vj5gRm at Xul{<@6-y?!GBrm4d(Xaq3%Z2Zc<!=sxMsp
zgY*+qPvLtNujem&O&Ps*O5!LB`&onNxXtT4^8#cnjq>IH^#t9ZHgv#+uplP$U;T##
z3a12qS9aXSj&xt&N_Ai~%jmZYdKzhU<?>U1v{Ef at c%RgmC31v08d9PE5$gICa$(zQ
zkwvhgkatc+UyQ at b=10DR$fSg4L0x|zSSc?`nRdP?wBs2RU8=wdMXEC4p>UG_)#acJ
z5p0X?>AqHSU{wucVwh;{Xjsra1QenUQJQo9fEV%G<?B93TWB(z4jFVYN~b)KZ^Uqa
z3`Tx8+4(q2_UC9?t-^k{OH(B&*zcbjk7X=q39{3E#D+=Uy~QaAD>r<YE?!EM!^tVk
z*Y!iSZH6BhpGF!>3n=gs3k%v`bQ}k%^Bx at xTL#GzAr9;&?dCNK?kia_!l+?^?^pSN
zN_bz?o!n~@<yAQUiiPMa0S(X0*wlM}@r<b>jVeq+Ei}%x1)1#k?ZoKXw8+M#;R$FZ
zR5_*MYC>Yzm*`{paCI8S7<unap!Ib{I7=N`Pnx7|A3NsD?2cQ`NGRo-^a;{|AAOVR
zXhyomvZXbae8hOtP)58<rYPiWsXn{LhRX!=2u-I|V*38{p$H{);t4~KgG)4j><&b8
zm?Ox*sozD*#m_oGDjd<VJH2&SFH9F{cK(`_o}o9UYF2$O>HM<HA|c%dpFXK0Q#9TY
zmk0xe_WpzgCRu-)@}tT-UbAXAkdM+Tbiv8<MfzIMru)K<Wj4qU-GDN5!CF%e2(#G1
zL|w1E1rP4bQgo0=1zt}}!L+J>fv_MUlX$CU;jn;jl-bXssUU2*C#E<QD7Xe35t;-f
zhN3dB3(w5WoYF$s;>y7iB906D>h=fYg_xpgnAs1}vi*)4orf+qg!h1~MeFRqW9bXD
zsLfoZPJaV84YdZI548*RwJhuvoBtQ|RT#2#Nu(4>kCY7eY1aI3cb0B{o~i>_e`EFj
zz}$R6b}zpsHN$b?`nHGXeOag&V#YFehfP)-WK5|}WVJS#%5b{5Ump$h!0Gsynd|ZG
zEX at 9{OhMIzUMwPGEJu;3ITpx&iDp4T5m>Gv3dgyKA_llZ^6&liYp8;?Tf}8h0Vh&P
zv2sG+H at BHhj^5SnoX*XEi*rQmP at wR#-T(Bh6}8_ at h#G;+rtDSfU#B}x%^h{u6fLK6
zLxLUWTQemrOssQy&=F5K=l_3 at rfX}NN4ZTmpYC5t^7g_gWOV?dF6ElWm~7YFxYygl
zxDFCA@~d$G2{?Kyk6?x)fz>=rR`+-LLT||shS2YUKdML^o(=AQ@{jR}0=|9LSq5Mo
z|MzfyOYbcUENo0kd#aZ-28Oj_uX*0!_A6O|Zf{A6Bs<!KE;tfbvz6sn>7 at b*XPXA<
z;?syR+=Lfqf4GEl%E9#!=)Ut72#ud1bSCioGc|l#%5>*j6XY$8C!)&OL?!>@)zu;b
zdr&FQEwxXeDe_o<I{E8}wC3l7ue$Y6HTQ)?@csmYsBJs at 83sXi=x8yXsiw32=UNF)
z8F^-7C%O1vT+voEKJayj7AKm_ZY^@1m1nE|+k=IvQ>2 at 3S@o;Cvyyqz-o$gPl^trU
zjITYjP<PLVmN=uQM%nM~ENo_TQRZYe&PT2K*1_v&p#y<`V~}Vx(@)0jGJh8C=(KY_
z?oV%dUkcyHu$7Fq5!86nX{2h(5hdKvp2EWQAegha+7C$E*Xw3H_M9MoOYN}zgk}Yv
zTQ<u3(*D2jfw)D at YKvvp*Od8Syw6ZH6${j5OG#Nk7Uat<`c_n};RWKtr~#IM;xpp{
zJkRxF*$feXPuU at O(f#)M`A(taTjf+ssSW`J6riJ at s|u4A9nCoN>!Vd{i$V1$$X23!
zP*Fsh+;p!F=eB8Om*K0%7~$rh_?F%_1Gh;!a;o8y0`EbJu)FVg!2Tfq7tlw`YDcRv
z79IRu;yaAM#9wK*{;a at _e7~M=H4=Y$>zQWj8I9h5M at rQ_J9Il|OYU$3duogu(v!m2
zbmj4GlsxI-MfcV#KTh3r6{%|yt5YUPNPbf(#}e^LCd}VGh`OD+QcKmHF`+jXQ9)G0
z#IOy~BsT<_o5h287d*+j?uI#d$E;f`SFgdnC4%~F^j9eiy+)^N&q+$xL?Bewc`!ub
z|IImnX at L3vWGCYjMHS8Pl5?<%q;{Et4x8;7q~l=_Vd)mJ0V`=$QDhr2{ZKF^dkhqy
zEN%Ja!>U~<rXyrI at Jtb1&g%c*f$@YuLWK(gDd=RR`wRp<7W1`C`HcJxW`4x at 1lVcz
zjGLYFtVNt2z;Ne4ZIG|IabG7RE^z&00^aq1(n^6Xyt}V)wjS7E3X^VOp%lZ%h2;a@
zU?XD(7H4=4KkCi#ykd>d3{gpOq*_+ohr}Xa_|=AZvbISi+g?fry^qZK%ulipT{6JY
zNidVC0L~37VFhmm%aV!f$<E%SDJI_}(Q8+F-{;yJ at EbCh(e+t-uOjNPR7wT-m^$l!
z)n(at1OuF=b?OKne1e*aCGmy+-S1+73Q at DLlvirSCe5s+M2HuZ!<=yPTb704k?v}S
z<o|j)^}5LaJCzHZ at Fo${Ap#*F-=PE0K6_3SDD$SRCcros;JJ1ADF}V15dv=59Il<r
z>_iyCv5n1{Rl?$GJ$0;`!$3)ZPL$|>()Za2Gwy%5dwcq{Y`sqTqSXh$=Ds$iID?Xb
zRKP+^{-0RW{xHZG|DZT3X**IDRaTlvNu6z>?F?ZDD{fD)35DkA>gMeQo9dW6v-a#y
zWWE;ERERQ{sv4JC6tx9+^IDGi*NW@$)vxQ?C1}CYr^0PED&lMN2R(e6Cijwmv4J`n
z0#5=a;5R>F6++*_^X2t^;ItNC>oMCf<3^321E@~Gi}$N(iLTWetMXH+;wtVn9R*3N
zWG at QkFK045hXP!Yky9BAkWu1CwAA0LjQvY5DkOeM*4~{<G1KXbgizLOq-LwajHB1b
zNn!MWS}`y|?ZYp<srXY- at 3Pc?W%V}76&FlQC&K8pL&L;rw^si^K14a`afh0>pp~W_
z8kQ8gU<ia at AhGLHs@xg$hcf*q!S5W at W)_H^`<;60xB#Gn1H$hs=9)AS;znPq4u$bF
zVD-)O3$ovD3Pf(Ris?ho#G7r+>2e^sE?BF`mc!O67P)+8psd3Eu-ol_22b{V$Ynen
zx#(j(a71B%O|hLpRM=pub63Ih(h?-wE~tcs?Qe_G6MsOY5tN<I+uS)gb2zEOlX0oA
zbo-CDeWm?CV73S at v@lN$8ubxsGT<3qdZI9?euJlz$|AGPCI`(P%lUI{fehFg*E%VY
zXUjSdM0%+?jh6+PmoJKcJ<yTAmwKYnLre{&+a9E8bkKNgh)o)U!c9tHNIo+mGenz3
z at 57WfIb^C~vVqcui<vinIiMX(0z^*ud#m1Wy*%VY{58?omzja^d<ru-c#jA}5}keQ
zv;F?Z?UeKD93EwQay|aK7RlHlaDbbdD5X5Kn|ueD2uO~1kbByHP{O+0GYYN*_iC#G
zaf`!AkohK0a*2XgbFoMmbN&1asCEYkoQ3mdK9T+wL4i+cngnL@`g$IT_O^h;11-MA
z?22cPX*a%4gH|kDJ-^WKkh=5D9pMM0+}p^cIsQ2A7#N at M?MV+~LVtL*u%>ev?wR7P
zf7VaOeY**(jMpQ7Hkl}smm_ju+s;Qp-Vm~fjQeX^C1J`Fdy80Ep&1l)Y{9N4?x>8-
zO8r!SYfs2lU%u at PlMOxL&gxM{iC|d9kB_4VJ%2?s4Ch52-Gj>9+PH(f!tv>^iIJDG
z$4f at 93i)ac+JwL#Y*AXE5HN7!rdC40Ba&-eO0`YGo*HC-0-9;YPkOi%$2t~#-jHof
z?_8#&sY$>=LN~t*?@t*>R0Z7g%J#q#&-IuT7%MLfaxk{b-c=J2?&Ig`fcOmeLz#Nq
zI25>lIMll(+ at Ux`un|k7H7#M%vbKNuR<K|q1vdE;d&lPN6FMzRW>4T|DEtW%>CX0X
zgw_-c&qs)V*-GqauA;OhrAX~VBE<)^qQ3owL1mWSBGR1XzjVtd?E(AtDqCR!q!Edm
zbrZQm9 at iRoYN|mY7EihZeo865wrK>{w8y}mxO=ZDT8Q{Q_mIT#oV+9PYGXDaz_W*~
zMsRMvYHrVxmOdqJ923|z^tTn-8^Pb=ypGnGgybQAKnxLyEoN{sVTg&52_pk+gN45u
z!466T-ru}>(8nz|K_A;(2*@-LNisIiSE#a(>)lxNzSXjuv=$4~fooPwq$H{BlK0*j
zo8BlCZ1qsLdn4b)NL_sNFFA#3SavE);3?`NTa1B2d{7~Tu9p!|-YCkk_yLxP3_bTN
zQo at se=(NHAJT#ylX<dl*+Ww4)2m130K_cb;17q>GC7t>I^xKeBBY~eELx`W33<bJj
zPxtd+vyJ(Y>}BjQ*zZm{XBq9bWf7`(61;NbybKRmW3uGds17<Cr=;!rOu&E9VRUsA
zp^a`JwTwQbY&@vwL(bK?s1G{icOES!89PURN3L^W(_~Qq_*5Wj$irdjvomLBKFmTa
zmZSX8xPx$996Sv3X4CM7tbu+46(H-GQnj22u`a5n=#GHgO6?2(V45%LtoK!o1nkoi
zmssv37rkQ&gEcr#r+=bES*GkdCq3r``LmZ2EgJ^4XQLgP$qU8+fKito6>-%kkqLT#
z9yDJKO^dhYkxU4)FW_!mGAO08%gTTSuvzn8ySHmZ{7(v*q4yyVLEQ#R3g0%%hscGj
z5SHi7XbvEKDO(aw9qoQUY(@egTq8<|1ptHCRdr8gf#aL*vmK6UG<Y{5PyWkDigvs=
zhA&lQHsRyp$s8)qkD=45P>ym4PK=3v)p`|Ixx}%fE!lxD?;actP7s$LY~(nXydO&c
z;anwkI~y;|j-?OFX)jsV?`oJgDT*`r@{wk3bdwm-En}fAf5ER#=x->7dAUQN@)_}3
z8&z6l%Sypm29 at 2a>UclpFK-+sPDR!L#tuymRS)Rv8yjr+GHBNn$;#x-sp0T{bTA$c
z0SMJww?_dkg at e$;axq)KoU?$G7Xq#(OP^OdovJ|8<>`&3-)hH)hiYiHP4T$5(j8Ve
zQ=<Ha1PM-dFeId1+KDQ^U|si!V0a})_-vbr%cdY6nf#t2{Aa(eyH8Uxqixli*}tVM
z;`+(<Kl at 5TnZQquawvnZy4F2^L~rvsGQe%akQs;-!zFZPr?7lC6hIB<G<^LL1FQr-
z4V#6R4ikh(pKqy45NQeV5nbeNrCDBu%BZ6ab8H%Bm_ITa_Z@{sT$D67i86^ajzTrA
zrg{9+?v?9B`0hS9djM2C!<RCw90))cZ^rJ!4Xjr7dQ+fBRl`>M^bjR~BfCk-t}A*R
ze~D23!{R|#`5;GnR{UW@!By1`Sczc;6oVl^blCboKWnLt{J at t0B9;QE6DCVXXZjMa
zEd%Tdh0DMH3#%wwR=y1pyX57}M3uf^V!`RHhSTEwNQV-5mE<{mW+0!WsDu)m8Vy`%
z+C0kWaFVaCkx?)g1o8)ebH5iUM^qSA<L)8WCtath0_&Nh^NVBO=ZbquLz|C1u=-C%
z=rlSloFFfjc^y?fPmme%>lW(e>+zh_oE{bnXYe`QDeksCCYZ_kfY3Os{On=`Bm%=^
z(#C#2YJR2~_WXnfiGz5~*QPu)$Ok!g$SG+>viB`Cm8h5DlQ-&rO=u|SeLRj<=5G at 1
z&M7ruK3Hny#w}%k#j`=blN$Q8jg$6`XVDM+b6Wt1$Ol*$YN{6;U&x?z9L%T;X41l-
z(}~npYUALd&PCuI1d}{8$+yzGN?vfF9DfE&ZP1PyuI&#`O1cVrAFlDxZdxwfk!qYh
zT`~)NZm-iJx_#+?aOGvwS)=Pac~L<H;nzlg;7`aET??-D%O|82EpLarC!aVni$Ksd
zW9OQx5M?oBlV)Cvc5=xeOm)8BVnU~sYE_pD{HO7jsZ&}=)#{{}i=3o^qHqARl1C%S
z{{*@?8*+iN`9sMus~+?x&5w!y|B&UeQC-pX`ttC2Gj48w0un*iXs!&}UJ<pdyW(S3
z>q>bM>XX*w=j+C)o+>V at WO*SMddJZ8hNRBw5}&Z|m11JkDJ(#cAOR-7Sl}De<MF!#
zGS)RGBS*WQPR8Pd8xX_CNons at 87yjunsa&@8?DL7On$Kr%^3|Lqv69p0^8n6y#nQ<
zP;aIONQo7H;{~2vsl at 3-Rr=^6PZPI?Q#+&<+RmxUDe?0&pZ#{q6fPae6T(Lrd*(@O
z6hNy6dz<aSjP+0_3yj}+ZLpqjF|}*4kf*fIopgb0EDLji$O&RXO;g<<;D+%X`{=LZ
zTL(T_Pj7g{H2Chb*;UjUr-2ODaia~5r_ohV;F<V;-jFFad>J8Sr1+PmqmQRGg;-L_
z`-955|L+^ym|;S)O9~GuEVxZxTN=uo3_o$S5j&67 at 6IkSu!nh~x9UqCf55aOypza1
zo%ca0IE;0}@<G3fSZk72;k-wT&&o}pMzVqA#SSI-u~v*dF3<O!&qIF-{Mtostca#C
zd!F8Z9k}n{7e<Hy(>m-pvt-d-)-mQ6x*(^w%VGev3*1HcHB)Jk>4p&+PdJHhMRroJ
zBT-OH@=(l4O$CrLS=Ei>@iT;xXR~^yk^;qkg8Gx>t5W1P$Km?bs{?A$Rtx*~s*7P0
ziyU<(tyTCiV@^sW&wUazt{dm9mT_3Ud&yCMRDu#csX-U6NBrtQNi8MOa^QT}D39xP
zBg4*G=3qBh?uNzP`F&b^5qVI)PKrFC9Yb=k`WSV>43d0`W;!^-!S75 at Bl5FAp$+4?
zi at H0yma0P}_AL;qFmuj<IYpPN?Du=)Pd%y6FEkFzNrn}x6rQ$BG7`#7WgEx;Srw9h
zZ6G9(B0h#)wE5zZNJ9?lR10Z)VxSQ$J!w5N<Mgc&alL8qP3Nm(A%uaT8xD?i3wEko
z+2Yny9J5sdzUKV)GUP)sAOM>vJ_aMTGB>P*c{?bQzK{!Jo<Jq(B71VbQTEG+X%6Bo
zFF5yu0)IaTEO3b6xHRh~?dHk-2|P)E`y~&N{K!+AP&Q85#5N>+b?D8g=KPyUdN5Nv
zjKV~M&RBKp`i6y%#FU3;fJeg_`@(CBHoCGyI9wXljj0I7oq8Y&9FJpRV>?gU_D^PX
zn22a~SZgWVqTcdLAwCCJog=g|(m27WTbQAWp`UaJF&tPQ%CA?ljRrdy at N6W1gnvGb
zFY+`!)<4;C<l+V_R<Ik1?dx{q{Z)^Ilu0YyH#L8v`?1!89N36=7VI{##1R(R0|Hgc
zv5!;0j7%jhL(7xX7q$fXYvb5I9vn<o)v}pe0+TLK>LE1fXUb6a^Z`#i>CLEdU=!js
zZi-~xKs+U;E`yho#qe_e7fO16(>nS-0n)nVoj*Ux34jW(p$n$hsi!0`b4E3^3ytoV
z7NIkc*aD1n4>l_Dsj*=8d#@j(i>a!X``g`K at s&I37mJ*3XbAd{J6gOZF at QC`S9x#o
zv3rb#itb3Qzeuvr*_I_Aq#eH`RrE;xhOYj<-BTEzo`W88;44hdpRb^QQqd|~DGe)L
z;M-_2ewX5Jh(SkU3xrwSC@{q#p_56stxfilF&Dg=FwE9<SaJFHzE7!UK94@(?7O`}
z?ZHu!83Ll?$N}mV5Sox#-d&=FAAYxz{u=ij?bdtjQ}(9dPZaEUmkXlLP3}M!2Xt;2
zVA<{$jJslR(Wv>;aV+eAw_>h%o4CMF=KEmh64`xV&v*mo-a&UR9>^+Q#pZmG!MQSO
z+haOu+2t6e5P>vB{l at J}#}M4<)k0m8?jEzi0nk+9YEkoxXN%-&{Dd?sdd^GakC&Mj
zaPv3Y@%w=a9Y03zU$~6pLFw<*Ht|rFJ}0;dnqei(30-)&sRk{79oTq!_q*As-+xwQ
zmR&1knlqA#MnAHFc|(bk-GS`n7 at RTpfAtAR(zkekf35z>U09Wz{CsUYVjxyOo6iC%
zXu<u4ye+28#_$>~?d6nm_U6&IYTrVX7_ierxK%Ag7c{z}Jw(9)M9TSlHlbQZ_GJ{I
z0%UAx5?E^r#HmGpOWPsIm7J!--~PC8u-4GHz-&-DxUuNt at fK*r at c~h<<_ at FbWfqYd
zTZTj7())aebJucF$_2_?qzgLDg6FsSKj8}-!=0W<H<y%xRd}+k=opb!Ku$}6^_6m8
zXb1kEIgbXHjC5`Z%+*4G+s|xslfv2}R)uw6l<I-%WI%3z?)4sAW&Y`(b&0lytILZ%
z*rD#f<+DU!H+{BgjjWm$Kfxi(38`I1cgeP%9HXhv$}``dTw2&pUP2!%3ny-sqFhF9
zL0|6s%LR~`1by|3Lq*im=aO6}EV*X3$58wfCO8w84Z|XQWcxxMaH<q}tvBCPe8#y?
z`g$up!%($<peo9%)}cRZM_pK#TCJXd?`Ob2;FiU&uaV)~S*R*x8B4t%?bu|DSe2mJ
zdqH$pk8gz%7D#+p2OiVqKcDHz+3x|Pp3&YFDS*Z&`4RFaB at l<UWOX3jQrD>KS*$X}
z+?^V+952W21b=y#c`9}-q+RQ}y9(U&Y{kcNq;QmfhckUTa!c2k0L?ryqn@<lY^f&d
zT+(Am2!q31xX5<dAjbLm3v%akfNndl at t{)B0}mjm65>s=KiW*TiMOzNEf~Nu$?lcm
z6fA&_A~jKocfxn*U1BA<U*u!J=)5jozk#8K%9>_by!%B_$rQzI>*!EEi*Z~sgM3|z
z!`WJY-?+Tn+lTXeh`YnqoLuYLTtfn?k$|;-+LNILR<jHT9R*Ae!ba^X_eGt8kwgZS
znTvDq><MT}^*jhq$-8srzNT_~CGXK|aX9<e)BxFPL)qxPvF-36B-)`OX=^&ug_Sg@
z?PWJb@<^SYMJo)7ynixfXY-y)oue*CA&YW<{HTSFuFR4^4i;E8`nz;rzf67wBZXC2
z-h|-84R{tOjEWf;;ID19Fg3b2-rxipR*j9iRNGI922a^TN0k{DzgKK}ug&Y(TaWyH
z7UlXJ9@?r!0SX}9bg at 3@o}GyE(5 at u!E!{M#+$ci_-Nwq3ij1m}F&s*oif=`UI)7e&
z-`o@<gRTJy#IzuTNt{m at BUlhdj<jXN2pUIuI=6c}juz>bCO!WeNtU3CM-`ZV#qKBi
z&&_GcbNaX at qUx=Uj$vH2D3|_^U~2Eoq=L06TOhAMeIxh5!nH0I{Uql=-SK1w>Y_Rv
zl?<-Hs_l;WQ`r0uDFdD!@0BPLB4U+)k!B}Y2KhI=BO?T40}I|8lb>hxY!O?=5qNfw
zg+me|&CIgFg^pk|R*d0|cOU`8GCbD8k(!Gg77x*Uy!?-ev7zVA{Q?q5H}Ab)HwQl5
zYlwlfD%1d8m{sxRkuu}MzHmK+&;ACdUNK&@R{zHO9N_2;k8VI|gncQ!m|tFhX!*u$
z%FT#vq}>rg_~X*)(5akW!v3bRKWmyOdr|kYC9%_W_gJ7(*6mkQkDNC{Eu31zd!HyC
zgxod`%9|A*Vm%j*^PDAPlaH$$LY%qyph-|B1JYK^wsq+s#4ox<#{!(vY(gD at 1X>Sv
zBwqhI!v2=Uy1@|vnUwk`b>NbJ*^gsCECah(s=~Sus7NWVqe_2PjXkcgPedRkt3Qp-
zZWJvtaZUTKIli-}pCV^}xhqv|2mD4uV)ola!Vl!Zw~ztXC*)VBZ+pT&-weFPb}uF$
z at _2o?gNrcvqxFf#j)DE$WjR1cdVAHYp1r$>i+KGcjXN~cVIDK@)B=Tn!wlFOaXBW%
zz?jH}hhaLZcd}|B6f|kD!>L=^V&D;Z{?yqPV?e)Py>8!tKc)Z%bU#wu?cd5X)S1qp
zDM`vspTEruLzRwxS_4JFlwCOSqjxZIIpCq0$GQbNz80Ju71mFx1Qr0b<8&sR%p#hF
zPsgkra(mrwe0!OZWi<<b6^OSgBdrIC!Z{^6WJ4*KV<+iz*DbX-T*}=DTYI80mEArs
zGI1u^P^P3w&5N_5(0yA|v`FTv-<gi%y;H|u7Bp4@>h+PYC}SmFWF~cZQooN+$o*o+
zy_6e|y1D%OWesi+&}GAxlfc=`SjnkG(G!AheW&v;*a7T35{vAAwDGMkp6ZrtRQcl+
z1ber7g>5LxoIDC-^JWRqh(0C8IMReKqemff^Cj&ZZ+R97TGsY_Ud3;v!v>Q#VEHt_
z1NTVYF||H<rAU)1A>;*H<T&c?)vr at Phwt!NCON{J at uKg|<c32rMEX8Zok9$K^rlm+
zSYx(ihC;O{!CfYQ{@2Rl!_KiFtXlDa<}pMZuJSmnyDV@!XZtv5BH9ChVQy8<Hjl#r
z{xni-k|IRY%G}l7t}B58qdavwIMl$?Xzv<u%a4ZJJR54tEm(mOi1;^0W9sh!A(oYu
zeL!d{69}S5)|`)HAdhSO_BxpC5rqn!$26?Iw?OE`*96Ib*fEf%mkOJ++XPN=kUD3<
z0{n)M0MI_p-DvzY at pOW=>~DRjO2Mw3Y66vg(~rUPf$x<?gpF<A5H;U$wWyi>{?;d6
zPs!$?AxDav9#6fltq!<LnCEx>&4s1n3#`I%xS3M{i?4 at -H9SiLf0`Q+qD~=VRS+MY
z&ct_{{Q$pz`)iSC01KirAOY8LYxqnQi4_Cv++n62GFssr=~^!VkeZ)Z3n5<xshO>k
zJk~$t=pJf(eUJR*>=yS*HK2R+OL<Slr0MI at At?>m6TJ-VfW?OLkQ0&#W{{T96GL%T
z+ct;-Ubs<R!^1r@>+u<yhGW$W(yNu+W^7Bt;;b}(!Z9}>E&8XhHm3L><EF#?ry;33
zeltGV2&tgBl{f5OpcIP)of^MOjVP~cEtqk at BmynIUKFdhHP5~=%4WsFY;LL~ceXWt
zuTWw at CaTfzh{)b-&MA(QCVcAFTJkccvy6a{7?V#GDt{?-)Br%c7t)zJ22~b+xv1Do
zZt!7$Vm;+{Aqb#MP7PBKIRf7F^41-#sQw1_8$G1yZd|t>Gwb}@lUXqv;ON~^)l%qL
z=lkPFY`0#CrQ6 at X(i{A!S1zLptB#OcR-g%9lE3NP(b)-^(P7=Ax4|qE;_cUM at S6c{
z9>_geB?Jc^tR(zmLg^D#rxE at Zo1$u^EXQ|$G=Ti+g#t05q3LS5lAEf9!W;w+uLT0j
z at o+fDb*yhI3Mh>o^G at -*vgM<?Af`ovuzAq(m%VJ&p<lSf9#hX3g3Vx#^QGQn;ImAn
z4LR!?CD9U~Z3muZz1dMv`xOeuVra9O?+n$@&GB=Q<v7wi!g>ae4E0G3HKI)H=M%<%
zk?c39OF+6dH!#Lg7_`~7KzFTw0}X==;N99SewUIT__Z^>4Y5XT)>s007>I!9LM~CC
zzHo>!A3Q~o>HTF+oOO&wmZOLs*nsf-d%<eDUIX;F&anw$cjR61W-)~#9O;_^YoD|q
z-iadI<blrXbPu7g=i+>vWaQ1|s(jdgfDHF~<$tp8Ka<Z!H4Dq!;di4S30n57>Ww7|
z;xXU1KcJ3zR{O+XI`7hP7-LijxD{d?KqGhFNjA|dCA!doM<lak@#oKr0T<P`g$w%U
z#b3d at FR8S`LFm~K at dXvi|0{Bv{nrB{+17d2dhdDnpmPQyc at Ii82AO%9SCE%~3Cl+0
zF2hd?M-*(=^hSU$v$O*jt#M2mv7Y!S&CC0wp(Y(m;SCw!4Vh~2rBF5VZ at X>Z?MK+K
zo>o<frDh7fROarMlc7 at a1|b+9z`?h+&XL7ecT!I at m_trwY|}vO12*#+7;2~*M^7GT
zlC9Hcn>JLb<REvQs28+^DEn%EeaFCWfLN~6Y9V}??|#Cz!;9g3^Y2-02Cek>E0Hr)
zAqLVHFg%PV#KGx{DSlPidzw*IF#s>4%nJb_k<r4f_+L?Y_5>DWEK}v1%S(^gDRbR6
z$2Jc)968P-dtxj^TD<x5>hY3&?}!18_JV0_GC){ICs{AaltYORnQB6Ru8iO;Am}5r
zctxm_?5FkL1z4EQ9gwV^FSBf7hX9m{e*-pdqJX#`a!y#uEQCx4??_Ver#ri^^2}S7
z5%6dDa{MiqgL`F=^Uf`its$aQ>cj?~|M_J%;_rT1j`lYJKb)HEAK;nX0txXI?a at 9B
zr;V|K=tcPt3O_LhkgDl_y+r5seZkbW$3lT;Y+4{5P;K=YPNU>a{$f6|LGLXDO%4ot
z{b7l3QhU!PCF3^Q$;2g=%-_G*EC<A#r1MxC-v(A#jMd>on_-=$Ep3w;RfBEM9$$J5
z(x}$Ldh}|mN2MMM?G!tHIxl$9^G&VQuoeu1TdDEK+A{polTe<22Pi?J+|59OXK{^V
z*+PB<JMP_X{^Jt&Esr?1yZ%3HyQUMvAb*EHW7SNt)KPoO13<2!yk7T-;#s4&#2^&6
zc`2S3Y7M0T(!b!Oi~`}Eg}c;@WGDOmNovg4w!%-Ka&OI8%50jE$9Ft>F$1RG*Pw34
zP0>jT+Kf^TBR9o=lN~%A7&*$yJ-&1PMW&(NL1DO8kt{Q>`?d4n;8Vm4J@~0bSgSJ9
zS)Hsqxg-%rWbZ*+Tgx-kLjO$&LUr-Ol8e}!joYueI{y;E%i9}={W=@q*22Ge*5mWI
z4~^B8Eko>^tz6D|SYB$GCodYb5I08GXmA{Zo8bz7LnHHl#A|U at 3YCZ6y8Mnhs_qoY
zuOP%(+cQMfNw|?QcodmjS(6oXUn=|DJW?`&D+H2vdjvV(q?Flk)RQRS9Gf~Cyo~Is
zmWytK`#^6QRw_MQlI)#Z at in#xq`<@&1nXBD-E%y+==TtUgW+va58~@;`BY<MWF2)U
z^A-W#<E7Jo+qD?Tdn at XAliSqYpJbn^opQ^Z&P-%=B2DP>b>Ep6o}n1&AbGfs6x%N`
zwHR*?_J*hWJLj3XCE!_cE;lx{xUlVE0Ehma?U!R|{a=u1Xl|m9QZpxu-A}na_|MAD
zgTIfS&MhN}lID!qUg~QSHv1t0U7rv3vSk*y56oPD0BtT!MzHIPrsF0A#Ag at -_>PmR
zr$Ib6Rbjw{+r7)nALZc-X at 5aOtEYrXm9=nGlMt)bFeH%Mp%NGbZq2donrfI;S|trV
z1M2Oj?DjNgYxgxk)0o16^as*9C)JB}#gRnC+m{9tnJAp0<oGrM$U)f3#;h<d>I_2N
zawU;}{gp{{89+bNF~*#afp?qPiBe6Jha04cAl)8#=20#=8gbfj{q at wIOmgJ{C=j85
zH~Q0fis%Ge*JZt#2)mlIuz}u+sBuodLGl>t at 9N%?RdZ;hya4%57b`MIR_#~HHdc$3
zLkp52oB>{y)0fZ#P-&ET4HyXzqb}h~ggFs^8mM{eiGKi5zFa!i at wnXr6b~b&Nw2fx
z7mFGw<F#EKb-5Je>y&rdb33-E5DY1r$Bd)7Eb}@^BSOMhND9Pj>~K`PR7+t`Q#d=k
z^eMxb?n7Rvr_}aJNvo-CjD{n?=noTE1(G$b8Qmw+lxQa9)+r-iRjpEXN_xRfKP&Wq
zRQg7HIM2w{7}u&Bn?$+SiB<1DJh#6~1<U39_O at wT=p8RFqDLYVw*r9k?&_;BaaFZs
z#X?Tuv&dC9pQ1Fiog$Zof2gn-1r6lfR4~zwx?8H=`dBrm|9`dq!7b0c;pT~*>#ya<
z#;AF=vd(f^qxOj%9LW!nUY%@EF$q9_yhjnU4NEw%_J%+Ob<9^R67rve1>GBjG=>@u
zJV+!HfTmgPKYjtd(;6vIO-+|=`2`;r!P#Tk8*pwPIvHF`Nd~Q_Jh7ZGEgKPrsFx8P
zuuQl}|CyN7ip9cE<lnMBfK=|~7l>R|FAwdQZ~cA|%B<F7D?LJSxeI}#Z+Y>5m;O at z
zi$OX`VC<m^&`YzmYwchQR<#^d0gguqnYw>oYxvzy(ZK&-d;de@?{6-f<zV^|obaJp
zT4BHZ?r#mFNI)(L?>zc|;jQvCEC)HYvpTDpDNr`_ue|l862)K-BfH_PpB49oY1f-D
zCrYmn<Do<uS-caaS4(95dQMt at 5XcSeFqm+gL!RJo6IP8P1EEt^yY+dJQxbQxZRU%t
zvepNB&V|;8dWt34o)9cZR_Km5S@`O8lvXiDcC3XvY+&2IF-3F_Qz!?Z{$a^-?7|LB
zVj6E%XCcE;y5(eqCI^b}U#6g|Kqf)B;t((9+;E;=ZpJ}Xm%VQL&W)>o_&za$kZYv`
z8OXZ$p^#K`xK?rs<lZ78#i!&FZu+_=3nmfs>}|x*#bkI4Z4ukAQ~8Cq5Vfk)j+NI2
zHyhbJYOay9hKl>E8pPB0{0Zgri@!t^f at e=SC4;MzUFzR)Cym>>_DKC)vhRretlRa8
zXAqh&w(Q3Oek$T5l2Pe at cL;i&b48p{%Pf23yZCi1QodGJg<3B{6w`@>y4`pH at 045}
ze6i|M=rgj}mqxzcHl6W0<~W}W+9$@Iy!%x4_`+O@$Z29`ejHU6-2cT3xtt0LM@!n$
zXW64c&Q)+VntL)exShjD77 at 5d&mgo)OAUz*F%wsSFIucG{oo;gP<iV5dQiLBkSq<4
zH=AXR*F6;#6UMw{d(*G^6aYv^ve*t?D7k4(zW@!4ad*Yk7|r4|jYJ8QX8{z#Fo-uN
z$+a)AkUS7hFZ>p)Oz(toafr*MKuNFw8>Fv%;eT!1aN)4Maz<}qSxv^E$?x^*SWa<4
zbm=-~R at H~n(vh2gS_WtgzfepCezEXzs<BmbMA)e5QQSGAU2`IrA5>{n=@ka)Iu^vJ
zk$I`NBoJ2T1uOcmi&%vPkvuLt#j85 at Y_A4}?-b5T5s!Y}qahPUEpF`M(X9HL^~^2R
zq?RXpd#pcPUX9E6Cd$JEJN>t9&{scnB41lAKW6v7wTtC{d#g1p*uRiAC{$kDz_=$=
z^w0oWS_1qfIb|YPhbEuB>T>)O2p`N{;!2vE3*T)9(kkRkdb#qn=Xw<yg_OxVdVHUH
zIrD2U2Yy&;VUKx?({bf4K+BH!^gb1`Ac|1x-yn#yHh>y%AZ;`bm-Qs(ZG3bzpslR@
z?g<+;)~l3%Ko*Rl)9HsFt(s}}$NV(Ub0X-bRt23drV0r;p4ImAh(!M{M6SQa%pUv`
z_ElE#>*l*Y5I%C!?O`xOEpd!Vg1ZpP_veA<xt@<!zq7lx=nLEFWl at 5;$={xgD%Ea!
z-O~n;6|^}C(KAorfC}VaDZbWnZHShfj{RLBP=9NG%X!W?L43XssEmzWrHP at 3<bt+R
zN8ZFNu%O)~RSQOsa4eW|bti&DTC2<aQ=US`146ee0ooI~n`+j<2JbL%=4&;`4B*um
zNN??mE~TydI*nyVUg2NpZCe4f&Ou43VHW#$e6Ym|sPf6AE~UH}dVrO^8j-H1tQWdj
zz at ChMS!|6$bL|<bwmPn}RBqLa35Q1V3$rKEPBBGmSl-no$83}|u{zTrJE`KdA?Y=z
zl=_Aa3p&ET<Pe#Gmha^@du`>avpP-NOVv}kjI*Oae7R~`5Q$dl8xRp#`=?z^uWQRO
z3K++)-z*(s(T!NypS80~A2lWk$Is{JL*!Y1{}gsYpu&nCoHm-V at 8ajbQHjsWifc$`
zo?!Ii1QK^fbp&_t{7d`3?Cb9vDwrK)7pVC)Di5I5gqzc<)z2L1gM!LgmGLCw-e=Sy
z8Izd32ekeS2<l&W_ at CN>cn2On at LXGX`2I&%P9#nhzsA+Thz~$+r#{Uov(q1ybk-n$
zVNi-!J_1Sk?jl35VcEI(Y^WhitNy5cy2znQQil&QLMxM<e8Ir<G9M=o3uu$$Wmqm!
zMQOC!bH^W95a4;^C!O2QMbY(6mOn;kDXQmokr>H|){}8Uyo^)(oH7oo{%8?gx7VNX
zib6|6_{3Tzm5{3pV={O=(E}wr`(%25p9RH}(|q7)sQMcG)O^r7`8JNw;_LU0{^-o4
zLuQ$ASvO9+gSR(oVI&iokOVdS&1DZf72kt at D@b^KSiCKo at VVA3=`Vfsg*q|9;Wh9$
z0s`gM0g)7`WOR$$EOvl;Z54S<&m5YJhO6R}KsSklDbIZxLl`Utd7?Q){>Kb|_%V!{
zhh7Sl at D@UF>t&%pWO%Ml8{YVfBn?U^4DqWi*jVI6*pS*M<7t0zgh(qs?oohVV3aR5
zli5SWPTAuk>vr at c!WczIxkGM|RlcACYWTq4YwnvKhTq5N at 0L{JWp$W~j|_a8GYNZ}
zlNm`CK1sHImKxhT;OIJM at g4tvu0f4RR?)ZBQdRyz4twU+dl`&8Z}4>;3~#<e<s?7|
zMv#DT5)S}4_bzld*`JmQ08i^s|0CliaQsXQnebTi at K5X%GI#z-(M_A}qL}LbfZ6K#
zDs4Efk}j22T8q@?^+=}Cp}_qZyp0q-DKb96i-Y379f-FC{B(9QO3x~P?g%^ZF0yFg
ze?keKSn1<b&1N6cFfl21FlS6!Z~s}}s1&>2L?y9n=|C^cdd81|fyVqTPs-okz5Gvx
z>bp&>8bI!J-FkXqfGRV<#PG$9=XP13wnv?hN0uO-D5S{!INWBUE%f3AAixd*lH;#1
zrWTt9<O~x;CL1j+U6+b~ijPjO!2IvF2Zp4h?Dzioah4C7n{t=OcH3$bW!Q}{r+jsi
zC?vfjofQ at X8>oMqKC2Ol&<zkSG^RTd67}TFT)bH<X^aVTS&O=9qJhC1A&_lt^<q;t
z5Iv5`)nli?DXa5RGm`{;fAq{rX!pfSZNy~M14NW~Eg{ca&{Z&h-RH)RP@(7UTR|$P
zJWG$EjZ0i~@wF29G)E_`x4wzun<bviVEA`XISSVvW<TN=Wu>ie<_DOOr~1hy*L_)}
zA{+Z*JKfhdGrE^gC<fwUOnU>2Uep4`sD=2>syUSO<MeTK at c|S7yMJbc(SsSD$AQ at _
zl7Q%J at w_3oTz&L^T#)Hgf%!X}LapAgkvce!`to#3T8#uU;Ad`7#zmHWi%(2>u&3n6
zptOEqf at ViiU&p<#zTpW_TR|w4cyOHA4JRk(NyXTmeJ`1zh&gfeyUEE<ZbH&f<1w(B
z0Qf*mqDV!hJwFZg6je6-R(Bv!C~9NDVjL50)x)(0A4YY5Df&^ufAsgC*$-UmurKY8
z3eC6Hnfb)>LTkt4?Sn9%!)@3T<t-p*miN!2eJW#_0;4yh)uK(V- at 0G5dokvU4G_v?
zh<*pjw&sgpn?zNkRk;!TI)=UIL5t(7g#qdfaEt*XKYg18baaO_uJV*aDwE^1*_ahk
zdFt7PFvDYi0SSo$ry7D9WdD{m=GiF?K8-Wxlrj`Jm1<`y^x{V+INqns!*qu6DXoax
z(~5DmSiZ7UT_Z^bQ~mMo<5^XH0K52eptDZ#(PrwEz<ME^RpSQ(1}ouOdpN?8?XEM1
zskYA63ecRbWQSfL!5G2}*T#yMD2 at S270pMv;e(HV7<=@iIiT-wSLN(8WA0)}55rCR
z776e-6x`rJ!u^^{<rprcdsIdTdS<t?Ope}CU>xovY%piS06mNM(hhE)$ic&1?{!(t
z at wee{-Xx{*{eVN-jY+G5LMAHvkext*QSXd3!kOSeS`l0H!>5ujQCwSAO4k&@`Jx4d
zlv9v at cuwb8F-EhOGh5i(bnv%b&|ijniqSsW3?a at Th<=4Gc{(_hgBR&F<ZJnNPLzD(
z3}k8jx-m5BZH&FU at c^t at xW8nl+7^5W+1!)tmWN^yI{bOb$(VkQZc28F3FYVS8?Lx@
zFv9W5c(v0K%KdTx?LTxGNPf at Gi&{XqccW^5BOq8wM2<n#kIyUPmNE3l`a5NIw|=f^
zvz;Ya%X9+8K;k7QcwPxTMYb)=t;<7`6j<a{^Mx1NX8!S-!#|Rdg$p4arEk!pefdTQ
z^kx?o&~f!O5|oWMXfz~^RYq4kH1pq8UgZoHNBTyNat9g#1G|_eyMhC!@9kFisfZ(g
zFI`)aLgecSd3vsDIOHDDg%=;Yx*^h~BIvHc1-{`f{z{QuS05*+_e<t&!KIRX at TNgI
znylWvsKCWRv(tbydER97nKOJOcl?jCdYsGnx>tc8lSDL>f0$RTb*}Y+9T}al4rFKj
zGeoAl0uyclIqajA3n#*|zQZVihlJvP8F|ICirjH`9aE9h**%`E>#!!w!hD3;MU!KE
zViHooJfnNKq}vP4Y9_3pGoTGP!eLgu2~A!g97~Z6#W33JkVz7L7;MKb#kP(DqSzG{
zyL5owj+#1p=;9et#0XUn^{iAD{@=%q*pn;lV!e(~e at InJ90xeXjL8@}eN;Sup&t(S
zOf#f^gwW(eBUoEtKrJntl1;cJp>J~f=@#yY5%FxD#QD7|OA9ee(w7d&CgWp10hyVG
z1 at 00oT&B*{OfEEw_oFIqroNyL8|J{TT3-ssuChFju#^h+*#oJ_xIe!_+`zVSo?}5_
zP_~R at sRK9m;iTZ)+!+PYIN}d~F>3-w?*^k4L2f$0bWDUd!A#zXY}c{cv=@G1B24AV
z`~3rvk|h&7_q4ztR946}=kuMZ894MeQqTW9KK}4;A`C at L)l2g5XQ0c0W`fI97mI<c
z5BVGG+_KNutIUOj|LrnYvsX9GfKUCoTv*B^!m;HM?>%|phW!w^j9o*2oot314Yhap
zS(%kcOYcHhJp2PPFk_ff+^E;v?(`7#MO}jt<X}0Kt*Coab2OlmC=QjD+obWi9ne#P
z(YJ0sAke_+$!sTcSuM8qDcSneB_$Q6wY57Ze1!8 at 1X(x(pfflfWI?*%5Xzq)Y1#@+
z0hMp8)zaiCn#sP)+&xc!Bp~V{0gGpwt6|>ZoC|cq^6cxTE7}!0d;Bp`*000D9D>(h
z3U6&M8IVU${$rGNzPE-!$=WL+SUB2DeD`T+TS0-z9>P7nwN;PB^B`1PcD^3#5l?|w
zmBg2zJkPuY^a?V_{(WY)mkP{00uiz`Mv2>Kd{R);fN9n+lF68VerPddIP1UZkf-6X
zwQ1)%zjymVZaP-Nca6Gk?7poFWKFs at qaIy}G8zjg5cU^-c~rV_kdUtlm$+t!(5Cpg
z7gp0{jUsRs_y_v`0x6yC{7e5Oqr4x066ql0COjz6)mx$a&&`4TR4;#c+Q>y?@OR97
zfYwy}vFFP(&1;2!KZ7(A at K?Ep9>uC+^=N!YE8Q1-lUUUayQl3o!<4ZA$3IG*GsVTS
z5Mqb5G~L at s`)Nm0sWuhM3e=jkDQ{d!h<h5F6svMlZyUricE9<5HCcJn<#(_=7xZd-
zt6s~cz|0!Hz22zX%!bpJwz!1rV*?~oW?z%YhKg0(UHRdE$-oIOeew!N<b|%l9E-|#
z6mgmLoY-PI^9{$DH!{?VHQQ{y at ZNMR@uvq%DghB5?N9W;OGRw)pgG4Gf~I0E$Y!+7
z=!OuffJa;zkyGvCJKTBA)3Cw1;hKg<uR}yD1H^M}olf__P?}IA^21JqswnQJBUY7V
z%4Td&s`0gdUL_HPltV1y9VLYxsc^Bi-`Teeimt$VBqGiIL`l<Zl*_^d;$@-MW8yU{
z_VC<sPMD{ePVz-;DmYg1!EI_#33%kkr&AxNOf`d4xzj*^O|Mvay at nkRMWCe~b=~2d
zP&=}6=p<_5Tu$)%6l}cBe>k|skc`d(0ylvaQ{V7^JRBZE$Kt80)t;-M*4E<$(M$|k
z<__>vCdzscz?UvMXa*IN at JANIKnEmoLJL@W$Qc~?;n_jv*DW0KO6^%k6%q<=DL}Hf
zVP(=eYw7_YQnF>&I6&Lq*MjD8L56b4;UM-rR1?CbnM%mWKxi5Nsl#YadtCP)5K%Ft
zVb9 at z<({~0t?6^!kYg^mt})^NeugcPcbc-MfhIZ9BREUKRyx5vZ9k=gnxC$OPq1gp
z1i5+D7t<p+E86EBXaP9IQ;+swzbBXSUxEQ1=e2GMSWI!|K}bhAfU*b+E$8s at iyvC2
zbj+vZFg|_br8JI$E at rxOi3pS{R*nqxQbHMjz?*3P9oP%G at LTgwx2lCayp>!%ZEFe{
ze7;}Ph2)e%<fv>z0c|GaLDq3E+BKqTV8Q|ct$Ls>Nb*^z+f;+*YmG6v4<VIh3j7&m
z@`%gfbr2SN>$nYZS-x9$EI#-kv31obhx;6>n#*YdQ{S=7V4lJxVc2>pb2V{m%fK3c
zcvs<iI3sD}8`1&OV8Y;6oPRn%pTb- at P4oSRycY@!or6~Q(cQ5V%X>6|p at boh!cie9
zgR~+%OH*g)yHFua5L#VeD#65yt?4-Fa%SKKRG|wqUeG+uO~5}XOj7y%6-gnCzSH0#
zTrIp=2{;4M_c4x{0j!D=AHNaAr(y+vpj2sw5~K>Q(n!uoTsPDYF3+Sab`<V!CI+?-
z$Oo9nRXN*hfuArFhuB$mr_4FswE#<q9L9>1ThotN>zF-G4y99(2odEf=~Ue!lWi$q
zEQvK-!ez+QUSK^Rs#{3-5}M6dp~RCk>4I06&d?<S`~`Qq*9&($%ro#zA=0*g>CmgR
z448Mr{HhjvD3*#Xg<@bBn6DBP?)}LRB}GMZ;*e>oN3Ltq3CxcTCs%eG_mf3)D&+eA
zzguior@#m-f4L>1UGl%9VlXT$S@%l|mIAmx1nBCW0moZJ72<|#{lP4Pe=rY7*#U&D
zpq(qooO<SJ5<(LOquvJ|Jm=_to9vrRvE>;JT}G^W<q3#63l$xbEHDPJoXKpP%Kfrd
zPH{eH{dWKdK={96470Pj#LE2WbG1%jGvY)TTz9e>;wg?jthU;~gDAgyF!^1l0?fOF
z^Un;{-p7;euxgyYhLueA{Dm`dkIN_{PNlfI2$T^E={Om7HdNmd;!qGPn??bLf862G
zmXW>S<>p9(J6{+8>O0_eDo}yyZpIT4U(B4uNnI<@C?yOJ%dbN at X&<P4hP!Us1T9k#
zOGI>990^&$RoFExm*Te^qYx5|8IEJ?ns5#sKtV*EAJ6}pCIE>Vp2FxR>yCSz>u4wE
z+H1q!d+C at y**I86|9t4<>a_++f4wJDYxTB!zPY}r0}I|R&M_UW*{^?=*eVA6hYs&0
z+_7slynercCmq-9>r$U7Z|veYU9Lj{MPoo}by&0bHMP at hTc9^EPopfB+Lw}tr*?#Z
zh~Xh%CB0Ki9f`U?7s7#POw$e*#UlD^a-zbxy5{9p`I^>lQo#RbQK{PIe~+~IW?(^U
zeNcbHSY13K>OA@!Tq$4)SudK3`(w<Ng(ZMBJ`Ixm5 at vqe=BoR)?g*FhOf_Q`fNKJO
z`u at K6bCu1&;|>Nu1<tH|>)ASMubpc*kHdyr2|6nz@~hkv6xnp#wXj|$c6+}t1#ild
z1 at 5tpD3!xHe<+exR+y)re+W>3qGb=*$C0N#x2EQ)$K=`**JR?SVEKzPE~@>!&(^Wc
zVQB7k;p<aVs9fMGjwG%jElJ?6CZUNUbgLzXpoEeVNbB>;c6tpr<aIIs#*YdD|0Pc`
zI-AQ2v}ZLyeT9%>QdsloUoU>{@uneGsuqMnC*P}bWA2A}8M<lte-1R~_cnZ#s%k8G
zNEo#KXbg`ZZ!MDO{4`(LS_yK9%3oMKjcvWF0~^!rS%|laM*+XO1uMH(DM{DdFv3FP
z;XeAc1t{;2LvE`{B-)Hj;<DrYPzwLDSIbB0D6ux#FmYtDn-$&3DQ)d5$wMIW{c4j7
ze~DZ5#L5e2j*=_je;N%1Qq+A7Mv;VI4p6RU%XfqM*bAnPePQ}X^9;Ckr&HEvX34t;
z=4>@P!z|HtJ7)-s^}~CMhaH;b9XiD+f-iQaC~3uTmRvRl<EqOt-W~4UwDd%@Xb<l+
zigXZZiE%FQs-J*XuNmTCjWi&S>r^FN+D1)S?+<MTTvyxVe~ubzdfuPNV4x9gx4$;+
zjs!vJFS!lct8C?gAsU_lHgzgOK#=|$@;hZR+<2m~s<=|L<WePk at 60*}k^D&1;6zgt
zvX(x0HS>UIrNwu#zvX#YI*P3g#6PyodV-<P)h)VjHHmLhU~;WYVY1x4YZj1FnQr>F
zr)>EnE?YAUf0CpdQnPtPs%v at icJEaMRKlv%C9LRH6s=Mh|6|R(MyB0esC)Z=q^erx
zeo{i1pHBAV`T at H*I|vGX$IC_J@}c4g8d*F1eq?w|4!xw#b$SsKy?zj~hw0JkR^OLX
zqNle`Ok=JJ*>fm4&0%!oif#mksB=+w1YoiJm96f)f3ox`WZA5{^S>2QE!fo%#mQ0(
z$6<6u^WH#EHMQqZY`P0ZMChwwfX_bu4kVC4s`ZdC5omte(7RtKnZ_M}K>_-<tkY6I
z3rbiPR{sO8xj^gUJP~TS^e=L`L(R#7bK>@~(i;{mq-6UiNakv;davfSt`C9sUYO?Z
zV#08af1zj!R7T7ikJ`{+P0?27Vh(sU at J=O`4rxq-roLpQP1~A8&Zc}W_1^eV-AVf3
z96CkDMNapgY(~RL50yu3H?XcZzM~thj`J+pMyTuZ5A~+(qxf$(Q!DLqOee6iEVUt8
zSjoZeLK5E+4?g??-y*|DX(PaF{;FG*_sc=$f8`s!TFkC at J-<BEv>;{m`1zJpKTNR5
z at 3j{2X^Jrrw>YXO?`EK)TU;RFZ;v+nuD&J}D&bgY>y at sk6UD?HJNygWZedX-E4JW7
z<WPTa^*LE<GqQ9l-bUg|yeSQ_6|(^vzNrn>>71)?8^|t0w0a4a_Wf*0pm?tSzUJt<
zf8Y<2Ly5OHOW^J#8fM_i?+<7Z7ll-B3X4<TK?qxqg1OqdGeK|WKVFITM+QlNyr%ZM
z9yKT3SZK}g&saX6RwjNrFHkl_ow3{|Uaeq}s(E27vh)gB>o9ZklC>%OH=h}FYKV9h
zg}i&^nbV>C1?26*z;8k4ndfDv(&u=pe?EZ1vwsjBF{L14PNHW5u6AS~N<n$({>1Sb
zpcqIp%u&;1Ryn(~S8OKYP!Y%Eoj5ntt3QmI;OS2(1WY-}WP_J+#944Rvw#dI2nn?|
zL5CW70;4$^fr`@JyaA0KOmS*uzpU&cTpTUl>>rTTIOVjeI{@=LkE&Af<gYlue;L0w
zd`bG?YZX at uhXnD@N#F_xgyg2a?lz(4&UON4psE*VTQuJj{yvS{>0cbDoP9EQUVR#|
z at CV%ijeZbDU~xHU0aM}IU&kmdE(gHMumc`7DtBY>`PGbxpGH}d!uP*#=V&Fq8$`mf
z)@cuCS1*mteZsntO!Z at n2*-X}e?gHb!Kta3=K?H(2&R0yysZ9zcg;!7qJvtBtJ)Qd
zJ6{H1Y1ro!om#QG<@tqspz=1}KD96$GeQE=gE- at vw3Orw1g#M-p4H)_b6h!6+2&_$
z>-w}OR5x=`PUm$-pJ!C>#uso2XVa=LLp>R2CR(q&VxW%3R=MHJ3fer>fAGE7Dz^2N
zu7;Bh*0Ii&F$TPUDV$t5+b}DdB9|!ih=APx(yEb#5nLfL7%fPWVuffyqv$1;jUQ^m
zHhE1l)$sG&n<&Nij;{QxR~>lV?4fP63C%xqwt-+WiS7w;cx|jRe>Fs!uV8e<G}EBO
z9tu~?3P5VkE+pC=PSe{CfBTEXIItRVI|Y-GrSC0is0XWQB{E7wVZ?VS;K6%Hvjk!U
z&BN}W7F=E<F&p)cGseUdExFl)d6^uNY_q1_9V;mUdXmVqH?og`jWCe6+7a<eV6tb$
zGd$gezirY9%FNqP#X~1XLQbUqF+w&0*GsgblANVTj^kcp$B1v4e}%k1*-joR-D8dJ
zlGpFAU^+7n2BIl6JM*EF<)(i~okFY~0XXMRhKX$ojw7A=A#^idF}{p&K`Y)4soGn=
zxV1kW{m}MK#vbCW*_-^ot^>LjWVVp`n=3kPckRQ(HETEBMyb(4 at g?>XFB4=+D~p4u
z#4>VcUCtk`^LjVCf85cT(ST1?#}HpUd)QqHf>XjtD_(BW=!=A}9Wlgn=iH%?&X0&E
zKQNUOeH+B9N^Y$DYTGJ;pct!11T1bV60a!3BVUg-Acl at b+8+HOdhxl722%r2JpX3V
zYx)vyw24QD0 at Z#y-TxTP@*|I!B9SC?O1L2E$<`M&5qh%qe}2*VIF7`H{!rehzZj*_
zu!rh}z!%xj4C_;PMV4n+ at e2*tHjt5oM;@?eMv$R^jv{(y2pl3rSjVW|QQiG8J$2pA
z)zc7it2b^8#ulwBr4RaEM}sr*``Roa5086QeOn7)Aj<Wif~X&dQzMMUnYf at -D2S<t
zsFg=J(~Od<f4-`XA!l-}awIKgIfpMSoBNxTWu=z7Pw1#B*pybMe)iYWa3sQ<sYzN;
zORD)vJm!f*G_RMVf{f)R%Z{Z<VbZI)v|~>Yn#+%~@H|UQHO9;8UVH^Zh4$=?#j7zs
zR4Nh>S;`t+V^UoVyVk-<Q%vrh4bLG>3gcL$kn&WBe><*9<;=mRC1h4R%|Hg`2+r9*
zM%m&{j_B%PG at FbHf3tHCV-gF}{6yRF=D>K at IK6qWL>e1Cfqz2WwixW1X!5yyXKVjt
zY3HF at CVviBo16nm75L^~H#^Q!4QlJ=<e2V4VRIpb_5a_8!Tmcltlg}PuO^AmR2*<P
zP^6^Se<$(XFGh2fr<+d5OiG9}o8j at 4Tv|y6Ua~>y4B^9mIBK409fC`m#ACyytZ+`2
zmJ$gAJwr%^NtEdRhM^)V?JOiPhAa#u!D>e3>ZKcO8wS5pcZ^4pq5s@~YthM_XZYTc
zHcj)@_?rb3Oe<CGNrVel^q at leQ(5oLB1<ovfBKl-Rzw*kO;@=<aTpM<)hX at Jsm=Xv
z$rKRql&sy<%gRm-YI#{nKps(S+GVd6VC!%Ea5yfnu4>N1?dm(Bi&35Bl1MxD=wYzj
zt4cLURU9bJEM)w#*+|4enu+e<US$1G(mk!SP|FIiVm-$d1Zn;6vl$rDxVmYRNZ}T-
zf67&z{~%I~NNWqf+!=W+8L3U4ann!Msw&D}n<|1c6VNQcu)r=xKzHjJc^2doS5l#v
z_W4Z(+<D3E;Ltr)Hu?3=650>Ph)oS}Zj~zabaWX(sKcp?B)a5(2(u+;reN)xOsh4|
zXTW~&Kg438N;iPGWQ~Ej9q&=%y&=Eie_g#d)Zug4n6xomdme=qwx6;r9s${hMtyRe
zL_qNE?2b)qSz!qZX=T%hWP~#?g4}rpiN((L%Enu-5-p`fxy^t~%KdmwX%7yO+p7$l
z@^$&O2;imKTS|RKa?&^e!&|9k<C<;I$W-sO`TY~uRyrVPKQw~Jn>;n;nx~6ae@=8z
zQ{HFo0#JL{AVoLWtiv!c!d9Cph~W&GQ+(+iqs6X$yJWZ??9Fq?oil>>nblc9FVQ>x
zfuS-@=MSFiVR9|E?w)L+6bO#{vnPFDTbV-NAlNux8XPCnnqd^c;&z=UHib2&_MF}i
zX;Y{jXbzCis@;N9B!vMD9rDype|~2~$V<iv)jj=%aRUETIxMBngI>+DJUmyRuh9c}
z;w>%96#W3m3nE08t;Qy%Wogk?xV!6{Guq2A4|Ry~MB at M0gC9;cb9)^TOL89V;E)B_
z2r*S4xcV~JzwI}bR`U{OO4t%^zX*~mCRs!S{r+;DIJMekUrGM8lqP%UfAb>EtuC07
z+8&J!1muHsr#GB3IuC|D#}eUVn`x+njkAGaAXcPoF<6OI6T0 at OjLI=YEZ&g{NA9Me
z6t;F+*?;`|f8@{p5BLxQG*v?!cEGv{<-Zk$^Qw*3|Dg)i&ox29XdhY$2hO&3r-E`m
zA{wqz(UpC_1lHyWlP&pUf9uvgdJ}^Do`LYM;;0dFR&32^$Wf}l&k_Jm-p_)AS|j1y
z?LtGOE#NwFpP_QX)m65g at L#{a+bjf(=H69uV7wYfQ3Cc1XFq<L)rKv05iIB-_(u08
z8;+PaH7qW&ZpIh6KOTtz-?D-`c*08^X*Jfs3!!jdW7Ea+;Ld#9e at 1nFDCKk6dJRib
zROxMV0f at YRy9^#53J&p%$3YaFl%a-rnTnwRF)A3UE;ukGFG$1V at va-hCeF%eNcZzF
zc|<SRTw>0B?l2|@9#T=)wG07mQ*QjMQOe|rW`2h)1suKF!^~c5kadU2LR{TXUlz2l
zFTx%jeV`9*?0|zQf3Ln0SUiN`fMmqu5-EkBO<!B9_sr%^aRxV~RCShDD*ztl!<!r`
zz9j9>98Bb$!pjUU5o$PJtpf~ln08}|hYJ}odH3xN(qpzMIvdz!*_D|*KXd}FXYXdm
zybdt7m#xvGz6HZXOM6KTNfGWb*^tYtvp40!2k+d%`qU>1e>-9At``}6^(Uc at rIR@m
zC_|4mV~5- at H={r6bb0s`DHBSRbJ9&))sEM~NZr^tHR+=Y2#sny{revHuna*2PLQa0
zy6S-N#|Y@|B)6LM&ApQc5_%bXakiUa|HqpzK3cehB-5+kqwTTL8_W4IlwXePp8Kg~
zw=owqq8RF6e~W!SyYV>mvQV3nUGAvE8>4GFd-l#klyrV10{0Po43y?=0N1lyQ#=pO
z5i+a)w{8 at _Zhe|Z2FtOTWE7N-0K%5QxUsFjfR}M=svdM*Nj&$1)EuC)h1*QWMO!IY
z^nRV-(KwXV)9KkpP)J^P%Dt&&@MNuUUFh{n_>iL7f6I>?IlE{Pl|mGWe?|ajN8sz?
zGxiVS^K~d-(P}I8Ae2iXgyfgO17e~(m*OcOgXmf$0hXHw`K|&Ph300h$HdG1%jU;r
zP;F0zw)*)~k=m&4>J~J?IE~~?QmC#&k~800$zG*P{z=3j4Q-$otf7Xri;pk8>u)Vj
zs<Q_Se`4rvlt=ep4&n3Hf;Pn1>D`7-<C_mbQAR^sSa#BpEeS%+_mw0>9Ow1ma;)f&
z#(EAC!k(a2H95J~b0Y%*br9)Hb293Lxggg{h0#hv1iH5e`+Mt`jgs(jUpumV#<?;K
zHMWqaLbZ-QD<sqw3*iN9qR%!*G|Jox229U6f1`<j${wtaQfVELi53I!S`$JM)`GB4
z7W~xev=WSX$p=B|h)1BMgNkU?6z#e0OsZ~aHZy%&IeLL^!7A$-W<ecsQKxgC?M$l%
zx9{gwqzI_wcb at k}RF&D^*}4#6_V5Cq1eX0J=8|x at -VoO?5E1oF+pyE0hD{7jcwmO+
zf2w^-7DAu6Q at Wj<oM26<5gd$0pVq~ku^HxU7^4O4BqK28gAVpiX_Ylu8;ET2gdRD1
z2NUH5TTLf#Nd+$RY5Qcr9|m=24kZ>R$u!Pxr^k{&UXd_WZvM49EHe$$jgmOqrrIC9
ztS)gKaE9r)Ibb!zfoe<#-{eqPYI62gf9mIZ508H<3~qhYS%PpoVlq06<14d`*@~Gi
z<d233<Rdid1H7C-`j%90`swY<<sxEU{1L`g;j(+-$1hP-phc1#U!KSD`kWvO3lx>(
zgQb`j>JHoHSj%7odDGo9dtVmV+*I{upG=gmgh0zSS0&^%1VbMjOW57)gZS||e at a$E
zwHiP`xgoOK48TEtmgl*gu8MmKMfDuOYDgc*fnd#nf;|KYs1c=`O0u6j_Zri2MwQ+L
zk`u+?(t0oMdx{+rZfBJ3Xu)VJ2^=WAR5~9 at JZ~Sc<Rn`oI)^1Mmq_S#v$HSEtJxYX
z3VTI+98$@c+o`-a53+2 at 30ryWf9AoX2kRF5d6a@nc&zGfbSI}x093ze3>#UdbirBb
z3t}td1moc-Yltg<L@^KUmjCbm4o*80&_pIY5|8&aeK|z&h)$u4%h||H&sZSV)IhJR
zorew{53jQYAnX#!d&8U3P+44L)<xVoOb$m3ZDA*jf1P=PD{5E<P?X<0f4_$6`HeI#
z8G3SJVUiL<Vcb6ymrf6Rou38 at 4denJo=`nZvzwAx+PgCeV^gP-wML&jl{4PRFWVVo
z43mL`>;CC+L!{I4roJa8vre8>U!mnKdKkS#XB9`aR_Mm<tmtz*gYL0rvAS+P0%BSs
z6^c}QLa{bB;Pa3Jz6$o^e_BBZRD*`x<YCl?{Rsa<i%Mc`Oa`@Xnh!um!erG&Ru;$x
zq;NF^d+GtnuGK5Hvydu>ks~4a1(J8&W{kN%IUQxy at jh;sr@)xu<z7Gpv9D&C37;&C
z?ChY-kp?p5`z(`@tmts at 7tgf++%-1**5hB?8%XmGWI7xMDeV_{f4R<P1g_|F)W*AE
zghRE-c>O6-A{A_MgX<K;&-xZor#$LjB3v%9*KR+V+~_%Fdh<Eye9l$7D;Lv}#d<nO
zenj5HX{2ja&YknCNbKFrf&9>WG#!&mLVQ-HPSU&*%!r+c1M0k75logiCm(~UhE#eh
zx+KY$F)C2eANXI+e>8AicIwvW7^ps at E(N%MzYwa;$z)X{$UVc<pKPL0!gmve_d5_S
zU}YV*soNlAFw`t4dkecuJGDYNPF at -5&d{Yn5H|)-zlI!;j-8(;eD`8hYVULO5B%D{
zBKhBJ!k-OG!?zrkIQbg0rd){#MgwAX&gs5mGNs%UxHp^|e at RaCzW{e5B8M3yC}VGa
zKSPa3VA?c!>Be4}K%Zh|Bb`X~(efc5^k5`DU2QL#^4CPzuNYJAhp?=q0}-CGio!F7
zdOiH`r|FD^4+<t~2T_Aw%h*-ELP&+n(q#Bp35pM4q>w4~1XA!q=T<=$og83zoAQsf
z`dmJgU3zYse}wov7R$x|vGs99#hmbDf`|V}mwVKpD3of*$N`lY#A3;VTjfi%BR|-z
zrHEmmoSVR;WzF81FG>!h<I7BOMzXmzsYLwiL at hGSM>=>U5+-3mhdz{+ve6?dKFQx3
z+4r;ipvplv)lM?v^|R;c7+<6Eg;Pv~a-=qbcdzzBe>%m<A|1w#)r1r1D~P=V?om1-
zoYNM>`B`>_bjE+`XvAJIa`u)(7p*L7kjyZl&$uskh8OUyyr*LAKZO7j?0h9qrv=K&
zwBE|akekW{mfmU?QH44;hx!yGbpe8jK99xL`qHb(-uI5=d>lyuzjO^F^m=Aj{BGio
zcgn=5f2+OcaSz!S{cpxwWmyM)3Cv=5K})O%P9Y>CazK5sM*Jop7$r01*e6P0I~6zb
z0U~vsKbGm!O|4FCoTK+$p^9%XP!;t=Cgs-%LHj9E05!Un at e_#8wuil)GOefM?^_?4
zq5suZvWx##-c=sB!pC{K at 4jJ;2u#!LRz22Gf3mM2U(c>gVW9DfgxtA93icA&v57%9
zdJDM4wFp9?e*{?s;3!0Au`RMao1n3MQ(6>wGX>+*4YS(w!^Qihk#mU*bzkbq?EGg7
z3(9yiNGAH}C%pd-_zfJ;cw7AKt}rd}Rmld9E%GtQ=ZbUKjoEr0)BNfb87e)S995^;
ze?aJsRjN~8Oq#*tn}!1QljHoKCTRrYeeK-2O8w)$xdq-fUbwCf2-1Sl!T+vzK3Ut%
zusYDNhU4!by*|_St5`BVsOJJ&upMp+7t|#C$yf at _`@tN$6RMf58Y_5*QLr*OB^q{G
z2nJ2*K9)OAue?EJ?NG1_UC at xN>#(rHf285vICCyLngi1^q`7^D?!zD?u|$z+avB0k
zd2>cB&BM*>d?jJuaX2sdZClS{;&$pkDFMhAY{Zpk>Yc at 5*|o#uH20Awj!uDk+LNbA
zFQlO=8#U~zL83W80`{EmpuF{46aXWgx1wwzbB)HRlBLx|)=jI3>Rie;P`=f~e--NJ
zMLSngT4vWZFttB}g5kTH;Np(#D=aum9`1>{Gm#z^$;(`~hI$Iczr1t1E1m5+%B?z_
zbCY%}t?E_gG77u2VBtB|W3f9&0)C~X<q!3MlCY!_IXaL%n!)<3^@MO#jv$3<Xr#Ef
zT)dV7;dleld584qis`Pog&`2Nf6$EH-X_X$^CXG<iUU+Zw$J*zO=9>{A7hulMp4ky
z`c#fGk*ge&O9e{69tdjAm<@*E2Z`#cDNc+>oDdM0aQEbYtJ!FK&Jv_!)2qCzSNdC$
z&IqKLgXZ4n-5Kubo=_jm(Dk|t37k}LS_BujBZqrNGKDTOU5{BrvvO+Ke;PEZ7QCyA
z6F3SUl3Q6|67Jr&H;l$Y2Ad~}b3WB8Y^Ooh0~VtDQv?x<H<OcFYGW|CJHHV<5<;KR
zzIiObDe)2G{qV9H$27{tsV-N4$~C_ZxHK2ZwfS>K9d_f{n-nUuIa)FCWe0rJZn5wz
zQ3WX_$VW&N%&yGKSkEFte|y8s+(b+t1t62eXS?(G6nMW=!Sc~vX+xIGOgRzaPqth3
zbRs0^4f}=NH)iCCrq}jdt6v6#3wdrz7m<C|z|1?q(lEc6*)YT{p{pU6KwnF|Khh?e
z%#MLJ{Mo1h=R2*MW(9X0UhV)0n=QkV7>X}cgbmMew!gBv9D-S7e`D;F(`rPw%HyTa
z!^V=>v8I0RUESV;#T<ZJNj1?@g~=XlH6$)GTG;WBccN}c3$06r=J=XZYJ9Ze^V7V(
z&fowkwk-Bt)7VwBsbZ9uFXo_Sl&FbN7J&+xe&$JaD|qO<$#~t6BA9zKkoas5czBCw
z5r4Y~{jBy3T at F88fAIn-I3i#}I8-=a?G(|L##Ts{6|59|Dou;I4*)Qaekuvw=>1y&
z+e&T>`OYCpqMu~=7e at PH(vPL0gNkc>n(PfeiO)SvBF4|kK<`x_;$zsL^yCPD7`^35
zhZ+k7*AqJeCDT>9^E=<-tO=9yg#$wJ>u7(=f^_JlL?u7*f1r)(AJ%g%7VaGv6U*W1
zDwvH5+Lr5gO<*dr1wa4$*e?P&PQ+|4s~=h!Js*eYB at 8tPK>wQTxEOb%UpgiTYrO&`
zs?&64*Q-x(OT50KhSq5mqxYTnbGBCighj~tCXVyiiLf)TbWnrh*0XD1SIxE!+x_<e
zOQwt;kDUZoe+$+?mPq5w)_*@I7<l~;Y+l>13ycSG1K9}m79AcAmz|d1Nv+X8IlJib
zk9sU5)gl{2U9hnm#`w76K+=P#z;_wxq-Qs}NVP1Rtiw?*`eAg(o&m>nK|!5Cog4<q
z099-2O at YM;p?^0YlscvIc&}$a%uXj;kX#l58Yt%|f9Jo#CIO=slkP?btZ4 at lVa5WJ
zWC6kqomQsA>Nav(?mJ|8Dk|Ec3$T>PMe;t+UtQLvM^vY;2_t|u=1Fl?IGdUNaCnb%
z=AdK6yXG^?HNm$FewtxDVKajims<`t;%3f;f<RvD6j1BWKT_c=BME=Dps^vYEDE+S
z+v$;~e*|jMhi}BfQkt37_rGR-p9*LU<$Qs4+uWmGe8Wn0ejvt<Q1P=fVe~*R{g>k^
z1zBv|%exRxCmC-wDE70@^ySz0&<XqYMmQ|*<}YND()?5?h*x&XN4TH<2JE`-Fj}~7
zMx7p}%$~lf1v|<(`u}x`)z1Pc#z&Q5G0;}fe{i3cA*YQntOu?&c?XqL25M#uGgwP>
zu5n~n{;M>W6b+J$%q9`q<+8}2-%iw1cfs0Q`3<p|XYh2Te<t#`yr+*!DTe_c;AG0K
zfS`KQHC7D&M$9$3ynomi;SbM4%6a`Ug}mJVfHYh(W%7kV at rVSPq?NF4L?L at QYa44B
zf9eJ(Dm*10$`hpEn8^-`rw%?yx&bS2gb3pMAKK<RKDQ*l<DA7Qje at t50;ZpT2)Tgl
zHB3oV)74AX3q|wI^{CMPIlTbE#lYz6_P$W6qhTLZ36h|e1d$)Cxmn7?fi`3II%9Os
z9oK3xHL%$Ve_YUI**>bR?I=jLx|Zp;e at -5!35cDEd#%?$=kQp)N#mYcKR~X%6>S}6
z4||V^hN8Fn;Pe6z1qU;k%Eg$|iD`LhIM_A at _E$P-XGBWVr>9`JIRMkoLkmCH at MM?2
zn+uSMjAjwnd2~&<lqcLe-etVJK|jILAkOs?%wIfjpw at G+ICW+mV9I{CfKX<^e}Pg2
z?r{2tOb;AL>tHtwEkdPsM)og9>l|JIq(*+T?cA9oO6$qbbK%G8)>#^9XUKs&N818(
zapD<by at t<Yo1~4Ym;oQbO!Zcm&*n)*U#bt_7)aBs0z{kdTY9<1Vn}DLgLY<6v=2uI
zo3(LkT4AG~*sU}zf~P}_&3LYlf4 at p7`JkBi4KO0`YI-*xVbccP7qIj*UbfU#O7J*f
zP2L=EWyWf%d1%nlwDX<GS8c1^QFU~e?NUw~U86l_S0zvw587NtA7|y4^y|%j>j<O(
zN5<gj00gim5%P^6<>?D=MCh-6E1!*8lBja7=9eXu8LOiEAp<VNR#!&+e*>WgN6?;=
z_Y2LM!qk5}?xJ~eT}xGhMLpZ9Gea3)1Kd1-D;}n-4#2pV9 at bm0FY%Fxz;XzGhv$__
zlOSwdPqMhW`jPcjl`5523`I8XWVgLwf|%WHwVO)EdQASWTEh$=5ofK6>+Y_K&sJnK
z#rhXW4rzPi=7lvC$^yVFf2XV6%k^YGx1y-u^2G|BL`=8baPNO(lXiDWY*lZ}i_*gE
zg~f2cA$iM7dVtNgZsHpBM<YbM at ins}RwYP)I$tvnc9E|q>_eNknavPU%tx$Pbaq4?
zNop4}kq-TBl$<qi*N`J3`CfeQtO&q3^TdJ|ZHV2QxbQBm-7%ypf8MFOzr8N6O+4$E
zBAobKh at U7NC@JMXj~}07Zxa?%T3G{PL|%bxvwU8CKv@}D at uxJ180StV!q=^*)R4$K
zl6vrFL4QB=)Y<`Jz<7iCna8s6FtZX{90&vI$rWBiy-=qCP$dT`x3r=_UdF69|4!rp
zuvq#2#a!r(br~44e~o1jTf6H%4!AQWT|(C7?1!WVpGLs{)ZY2Pk;<rE)EE=1u3hg5
zh`}mUwDg+Zd(C^s91pVE0`{7yuqdnQR|-DK_8;r%hpq5Ev^rX9<cEDp at uq3{j~E^!
zxg=`=f^WVa;GC#|Yu`XJ%0>i_S=_j^w0<J*F~(9lfRc)Me~iXw1}}uG7Mj4K0-bS<
z3fS9x+Ln6VS8qsVASPkR(;FKsAk3n{69e*4?~_oi$p7|>dY~0MIJqurgjRbZ1ND$k
zRxR6(pp_Vh8mEdSWJS>**flh!h)0xgDy|rz#@A*GYy?UfBuwj|M=Pgq^Fdzqnuclz
z85}d+3uWkje+U^U#SwDlY;iA%=aEw7Z8%dsR=0mVZ33}+v=~WG?;dI6(d~qc at ZkL|
z;Ink$Qrw)(%?Hsg0_sN0?zD(Li#ONRRa9v?uK%~X8(c~=jP{WWe5974np+H%5n|4v
zZoL2i at KSK&>O*A0oMsavW_CH5)Po%V5OT`SYuhRmf1Sw*l5{;Qg9H3TeS*3GZg)`8
z+;^{5-Wt0}e_tNEJTItxR)%CgGiHfQj#dre5+2SvEm$doO!q at H+aOo3qo(vE=|QWv
zj7v58$bM5~J_A*@M>vr-=}^;8PXU)2Twus9mw^6#*0BXI$Tg+xj8p<r*m;XSVx1ef
z$M#6#f67_slGsMF>jYbPA0%@dW>k|sxPs$I5ACr=)YQ!#9q)#6%188?U=(~IhBsGK
zu0>alMQEDRKg8WX_<Lv`5NeTe-5jRu7GQh4lSwMAI(h&K?z)LzW?HYTj|oQA|H=~}
zDV7;v5N9!YT%Q-t^~JxlpJBCcBzc6aFHbw*f1q(;lBy%d84DAEjhfw~|3PB;EGl=N
zg1H#{O8gq(SJk{+c+MvkT``;cbkXUa4gkq}`}O!Ic_Q*C=|X7$eRAUwxYo!OFPe@&
zqB30lY4{S8?lJ26TqM3r9{BTa5gixlZUHj4vCA%Tq at Qw%3vqiIUO5f9T`TnIe6MPP
ze@=5sTmD&h#A^$oZ<T#(W&=^hm3>-RX1S1GKEhFxGg6|DbxIPf!pqlCrc>rEtBVsd
zM6p3`Jfs^5o5-4`kDx?vlVZjra;ar3AV(X*H+O>S*|3=V)CUi77;i8khJ#Eti30+I
zY$28K1k&g+#aYC20d>y~4iR8SNyMY1f59LTiXY1;6+Q~-RiNhP%r&jH|D*A*={@DR
zt3Wa}pAvSWqN^?<;_N&E5{6GPZQL7+zr8S*{_ka&*OukwoW;D>w<Yh-i18R)Q;P}t
zJ%>x10n67A7}RMX<fDW|h5{7%>tgr70}V*>q)+LPfRMO#(y#Skaq;<TcTnU)e`sw~
zDmF~J$c3PIB4z9MrRN_Ci)%S~$F`A<KG1v0f%cqhdyH5fkl;QNStpyV at 07pq);AUI
ziOcpN_Y9Nr<i$;6e{A30E1X_KCBKcc1)jsmDFt)o!8<)+tj+)7^bA(X{{crDyDN at D
z>Vpv8CQQ|IC1<h+8?tj&R1!LLf9I7;r>;)d`idUeH6I at G9XqHec+@k>&*7DSvG}?m
zTPPK#Z!ylZ;*vst0UH>`dnRhpMwMN$U`I2l<S;Jb9l*a_pXi3<#~1h&&5?UbG{(jx
z$R75B4w8`BK4=yPwOUeB1M64&uJtuqqQrf-g2KSd&JE7 at iVQ|e$nH`!e~;QDc=M>9
zyRzi2$iyktsLt`XBSB9i_E&T~9(lvcg8oE|>!`<Q1`*(wY#0rOODYM?)nE!^v4EDb
zhe(e~T+UEjt%%Ucb6VZGbv4`Ip%YP_SythIxAg6kv1|N at A_#xul>Ocf*%vcnjMJyc
zc)SQK0;-WC>Su?W5Fpl_e`d)Y8#A^l*^(qwtZsshe`p4nqk~XghSnCaHoNQGQ#Sdc
zk;XkWQT8#J<qa2^>rv($t<E039rye{Z3PTg*U$0;r~9 at r#lEdTU4tIm3m3o5>((HJ
z4n^Sv#~?QR1jv at GuZ&!oMijXQ!jLb{Y8~d6DiJy=)<<F;S?duef2_>q{_Q?~<~#5q
zGnKCCq)D1rcO6Xemo2iSOxH&Q^4y~BEC?N_o6N)xP6J=rM8-X_SGKE-@|+)SSLUpo
zOO6zgF+Fb#2cdWl|5_cR9l&d%DG2+W*uo1hY)$BaCzxIy2;<FLV%$5l?v1;`WuUWf
z*ep0pgp2JiIZ`-7e;{XWxf3wpZvfzZ5d|V4B$RVP`3Py9n9ufUOz#g-SlIY?ErHLl
zzTSb?2;V3hvyz|^zI-1g5?a~NMm}d~yIOHxjEE0JFFT~o`F{URp9ueFOhFur2WauH
zm5Dj3?t^L)7rAIlsc$DS(xe5Va9P7R&7zsL9p{cdo{@=5fB9(ObnL#@1%nPp!7yP?
zXaX-t#e>P;gAgsjM%|b+de9IBDV4E9A}fp*WdtIK(3^PBTSGb;Bw9pVsHN92S~<Gy
z{$5IOb`^Qlc_A!Mh6Pam{sw{W2IGKwIj|^m>p%l`VD~hMZKA>LAW{g7>tAinor1QG
zuy#xL6oPZSe^c-TJ^PMy6D1WBH0;L2ae#Mpx&viWDmCJ`C-1$PIwu7UoOB~(2};PN
zRT>mnxJ5>#>epcU4_f&d=D>Jl<eB5!{caxHL&m{9FMKTtXu`#m`Whs%4`3Nl$hPw7
zh{o at P8=rk<ru8p9)jdNZl|jicTKu2<u2dFTS0D|of7V1hUm}5+W(A6L%EvYAv2sQA
z3{)^0pM3*n6)%8bEW{)-^Bu~frnz-{ww!ETAO+^^YE)G^>{gD`J>sHSVGnOv`UiEw
zNeD at XxDx1e91phO{{-LGEAPciAH5wIIqgL8=<^K^&$(qN at 1*ZD8O;fz2~~DeVAO*l
zr?PA7f3V3vcN9oa^SZNI8#Ob!e{RMGxMdxKEx&t_dz-Xj$lKiZe#y<TZ8D*w?hL7e
z7O*XJK$7QXu`P}J79n5^*>i$*2RR+C+$X2eYKVUf%*(^@!k(P&UBsA9tbNI0#y2P*
z<w0&ua)Mli&jDU%w07gXO+e}hhF-h^sKxpje-z&4K#P<VBU==i6^hT*viKYG at JY5f
zxNnL^WB+#Mx)LYkK>d}dZS-%+yQg<Y7U!QrSV_Ub)oHK2{it at S{df~hL3}>1<mS=r
zu4r7}pBstmntaCsgvi^jWP(ssj3NhRUGwzODcBi3DM>%{E_F>+X){n-*pPZ%;PIrv
zf0h|y?n=2Ewt|NI+9_28Mr_YN*0Kovk?=z#cYU#3#IaMH3+Y%lwPs at l266n(tr2z*
z2Xao at me*e$T$VLf$lGZTmh4vTuK8N2b>;Jri-zT*I^QBGz0ApX8%#ZE)=e_8O7iO1
zMaFr4QL7L#2D}qNuTEU1Wmy1DaaKVge-VP=l6RksuYb1fU%|7geez->mWg}oR$0ls
zhv6fUbwCl$C;|zogt_VPCho~<<SymC21fr9=?J|<jn?3((XnC?A>uKwQy{>y`AN22
z{J7H%Dz)9D`*1Pt5HlQ!E<Fij>!cW%|Mir$&hX0#2N?P_g1wC;A0><S1czO(e+3y1
z?ffqvgOd}SefFpRrbMzWgqbXB6T?C at 10xc9*N$jrKg)hSBGDY`58K+)f%Qu65S9nB
zjOIv1`2H-H_HH4x>Mm#O@!dkFLD0iD^VBL<A_y7#(by9ZbcdO^O<!?zvE$|sP(u;j
zz-rot&^ykqRPf{)lv6#)YR;#*f8z at mJ9hFy*(w!xYj}@Gh``xCj}`jPHc+0nX#PQT
z`-HwwheKA;4&h>UCb2=kgn1q)c)?yy822{X=#xBm3Yez)gBOg<mYvW!pBy4!<Y;s-
zF}^IxF~t$8_0)V9sXDWQ_$nUCr~%R)IODq?lbfkD9nyz|l^jcjzQ#2be+zKAx=Z;+
zjEggaL7mP}L~tR}z==|~DrB at r&cmJ}_0Tva8hnBYT(b##S@`GJdS8bOP}?L-B{EBq
zrqebbC!-9izS+BH1-IoV;|mm`q~E!4hKYJ|F!7dx5ST?IFgT1*NJn63qLGaRzpytC
zwNKaPs4D<e#@3+Q$%rXte|O+3 at XRDHk~c$n9FS0C3%!{0As5vLGqwuUaS at 62P(1Ct
za8U}Nh5Xt$>As_&st4J?Hn|R#)c~)}psu^P3#YFv{fMBVo-vC|=D;EJ=uIN_F`Trp
z2^4BVqqfo!;Z3}T$}5LI?puR5n@}27!DOe>g3r@~y#l!(FOi;ce?=s1W6n&zTjV^U
z0RP~Xx(}cFk`5)qseH*I`U|paq&vP|jKtUG1ub%5NscoHR5UyqTwBY<hfT1H5M?SK
zpj+?96M1SKKaI0L%PR-79VNQ1hA8k-a1t+MHzX<u&gC1l_uMJrogE at 7aQ5Sda~rFE
zr&DGj950==de*(ff4tsx0OM2D$636Y;-hhYi9QHoExdwYiC8r^HrbPdt!zkt52EyU
zm+%ELXYB-W`BR^X410$VnfrB&2mr}5hAJeX$+i)qu1A;kFiuAJb_#>bUlci;R&z+d
zuu#G}--B3X at 0U)}yX~&lUWnkn424>GeBR1ccz4TsMU!Due|L~$HSau)p)H!T^C_4#
zzH1A2A^x}PYXXZf@`Hgrq#O_^P?xSHiy at t!J&@e0<w=_cFSKgY;6zNghMx>Lk3gFl
zEALuc0-ue0(|8o}akVk(ckhHv8pKC6(oH5z0LxNN_eNqLl#&XH`UH_bE<#mP5x$zR
zQ^|QG%S~QIf5Kj02}-`5(b|V5nFrRlk!sHj>3cP4^gp2;tYZu#76!wDeAsL`-ocB%
zn^dyVCa31liYQFZHm+L!+!xnf#vqCZX_QtGn22#B4 at l0B!V&Tkq2&%_UODH0Is{gf
zA$Q5-1u<pW3>^ZGExN+zKb1WETAz<57W!KR7O_^%e>)_3IugLl5H(Pg_I*=f*|>pi
zO#~VUki^4scWu$`1+{d at 5eyBG;*&fA$M-~-^YSTSwr~#i9ugfa#E!SQ{x?QybT=f9
z8wgsVq$MX07f<Q?C>H`{ciZqsk^i4U*V8P(#mPlniz4wiBNX#9W`2=l&#BVqw-;mi
z?GyHYe??s=s1~81h`cr}K*LJ|@GK#|-VCb1;~!zlj?TaMYdzn+D|4bP-LKT8dZK)Y
z?%()hAw(!%>l%3B_$?T;=0#DjMq8vP_YM-#){5CY+u({%O=EYPcE at I0`GpPG&iLWx
z)-Q;7^$1}%2Bi}s4B at Tc^|?1vZoCU$>&j-9e{r8$0Wr9R#lhZy$moFdf=sEB>M66e
z5dgVh;szw at t;=j_`}Vgm^Jyg^aheCyII&LW+zN075&VC+V5pl#Wf2}?_R`}E_?tp9
zV8DJtU}{AzH!bqKN9FsDgg~HWm0 at _FjK8q%YH3nMfWE*0&-6P=)r$mdx6Psf!L)7s
zf1nHHH+5tvk2=wm=Hzd&s*aJMlXA1gfGs=srQY*BQhS<i7{MhuhIjxzT7EQoPL1Gr
z9~S&@-~gh%I?qGSC#<jm&S!L9gY{<EpO2ZCMn8k)EV~Ik at T+{^de>&tUDAwWyINzO
zScTgU at PWz0G>=8Y`wf2BiB-KUrpR*-f0Hp*W=)y%dyDA5!P9!;>FI^zi49;Tj`s^y
z`+gX at 9euEje56wS1qvqHRs$4}+^G5MD&`*9&2l9vz=}{Cx0c`U%%;wGOcl(u_SR62
z_rTp;N9ZK}y?+Z~AhU4xnO6)0z%r>aCSi`)`yLKih at f`B)Ak+IQoX0I!~A_)e^iR_
zS^TR<rjPvR>YK$K)2OO^&#^PudbKw-u~JJhBaP3?EK`@}P6$Vdq>%d(A%l1#-7e)A
zir+i^Pv$)Npa6Y51pbo=Kvs>*$guik{Lf6ISTP2i+{Zde(yUD(r;(VBm4d;$iXE==
z$~<CY9D!ZAs|dy`cGdP`qmSq`e{>RG(TY1^=N^*6t$T|vMGxUX?=GZ3!B*)lCz#Hn
zjzqhI(&A626ua(5hN;povbxxgZAB-mYN(`L_bt?E!M{Ki<%{j9Ru3zQ@$+=}qd>+$
zXj>*KuQ^H1CyDc*=T~aJ{Ey`P^yhSv*C)Z59rqn=3wW;sM_&ewBw<LCe|O<REv!&g
zwo2lsKz;wSbIW2^%m`$_WgI^d-c|JBZkS)(YI|SQ at 7Jo;Nm1Ex!)PcmX&Qrw(Za06
zjQda>R%=fpnYY<B1YzQ&__x57dj)(31=N8h2XBL0!aIK0R8~p52Eeg}#&RKS6kj&g
zkT5)6;3G9k>nm7X78UfzfAaXDnic at ROEO__))el2d-9re(qB8$^8Dy=A2=3Xr?hla
zOa$%loC26kM<Rvk<@s$5+mSqO!!-1cA4enemxWLy1bH<|mLrcrDLLZ(3Os?~M8frg
zSrknUu~IZ&LtBrwR78hwHID~r8OS+LADMw#J6_9GTu~fmH?qZWfB$kfgt~%(`;LHk
zD~M=n!rt5mJ$-hcHTg1s-h!ySE#E4%SWMipA8G<M%m>do-Utr5e8~$qQR6v>Al6+f
zr~?FIH)HLW!J-|2*%bxEkt&I+%9@`8+MoxJaMe%@dLC<?wA}XdB3cw9Dj>v|2y1oZ
z(Iopbq*Ntq#$x#~e`Huk-4u!ZAoQf6XfKjRUQpEq2g_8LPzFhOF}>P?n#Oo^Um_?&
zW$nYz7Ap}+qTKQq+}@c8)R%UY(JbRa&Frl$r%DLvid!~pWL$W9x#e0NThN#$<-EB!
zg<dJ)@xwO2HYA{==@d{w+m at y_Zm3~llBv0BaFlo!8O*jbe-a6IYr77zL#I0^iR6;b
zS_x at 6TzEDF&FStVi3d`4c0%N3_6MlPUa4%ARF`z2%tV-3**Jl^Lcnz=YXKU{<iEl7
zLDOl`SeThtBTp|_Kd-68e{@T&)Vw2cZlBM|VTaAK>R<ZO8?9%HI0eoVO?REje}2Xe
zI<S(VHe at dQfACKA!5BkV1ewjLFSIi8^iWX<Tu1UMyS&<YH=4QV&&6`f-GG%pOcl}^
zUUv0MY%nSph=4kKjfh7X#0VzQ{j3b=P0I*+^m?ufRQx8Ci-Rqx1<lY#*pa%NHbe*L
zF<CGJUy(eqoxU*2vW?&&Zmv;7_4&xsdCB|U_hB|3e_X2JS`bfR&Io0Lfe7%4M1Fdp
ztZejOU7mu2kQkLhZ*qi4-RTBf5R8xpQ;gL(V0^-u7*57<JI?3{rZCteNAQqIk?kIx
zu?ApF at d@2-j+7^`YmCdlxy|98Um^SS#>8Lmr!3)lseMpZ at n&7xI_L}6`e!g?$AkR7
zrk^Tvf9}-O-6|86^Z^^1k=b>#-(z3&rPS5$QZs7`NFpoyeag_TopbG4XAT*GzneCs
zv0%IV_UV%!%SJhSZLz12-k at 4DwrTg+U~@CT&XGvY&p$0>Wgm!aUB-Ntk-q5<!_vn<
zNaF194~@pR<Rgtzo#^AckMoE=$g8!$$efSWf5nTZQa$)8=(U{&{G0<T<JQTECh|l=
z{tFPp%9&6m+~}BzJY}!CzF+>68sk|n{r893z^zs`h?r!KZZi-r+@^npKR99O*Lo6w
z+0TPIQRmSXZj at aan8}xgS0|v=Rm)2ZbtDfsq%?d~nK-=!&0K|BNjMs$yIC-z?+Ujx
zf1BZNK;Tf;lXya4IEPm3DrCC}+c#@on>v`Mf{+?;yrrQDXgE#sd9-Afy%_){AXyPX
zrKrJ=mr}6Nz*ZKBc#vuej^2BE7Cg3`sw%68hLJ?yJcB*6icwtBt?nFm&PnhQPB51T
zxCV!G#v`Y|tO!0Nnc~<ul;?Vr!pu!bf5rM?BXKkNP^|(QP8++d+^gNf19^(Y)I52T
z;z+EShvllz>}meKA9WiF at FVIo$*u`A+P#E%f6P+?@wFmk12_4x?;Yu}<oOlR5Uh+m
z)yWbuYF}1W){k#h?nw2q-(TP;ns;c1fD1sME3bi5BbaSDcE;G>)Wx at d|3O>Ue-#5_
z;N-7(E3XW(Nvvp+H^#|(;QknHr*?gc($x<Yfg8a2#p*sw75QGt51Eyd-(AkT?^F?T
zyjbatx+cZn-|{l|aQbtXcA6{t&=eS(A`O7hq~d6AVx9v2nZA506vlUVp{!G`iCFZW
zr&qJ*SXkcXibO at x4f(AUF&K2mf4=CagHi~^?v#Zk5Msl7aCLfU#%{N~itbaB2z<Z*
z^YWjxgP|#*Q_6#R>vkENCXj*x0T*)WA&*`xCb8+14os%;yjiv2cp_D4Q*6iT*z6*@
zdOUMykK~+FqL`C7Re)dF&A3A>>`lX%*eD!HEm>&aUpP59da(h>_|}dae=WwF6`-4v
zDOmozLY;n;Ax-o6`v20>t6KcUvF-ERz6 at EkB8V)AMwNMaQ^vGGA~A;T at P+p!h=Tb&
zs9 at i}2k7~fC!tJOnioFx&7cf;c`0#?Nj#r+eqVDJMgkTPyA`0i?Yi at gjQ=~<rSc*(
z>J7j?dmAj9uTrc(V?QVof8HcfB*H!!UB6FM3q5irqVxk+uE7W?^kSgq2+KEgiM?=o
z<b)-rI_%Rx@`VvcwlM-?6(Sx`X8uvpr3(M{t1ReNnB9oCxSdzB;jsJ0MV6S8?rRJ;
z at bpc<nR~bJbSA!;djYzKrB3?)dwuIJ$ysYxMor`StU*}_tw~TZfAA8zonWtVjxo~_
zc98U^oLQS}(>mP!a2qWGi!Ueh1rv!quKkHyuL87?L^wwZ%DxS)rCD`l02I~CaB_?f
zt{d$}#2W)DdMEiA=C=O=dtAB08L8^^VoK at nqFTC2Z+wM9U8-k32p)8rjh at 2uPWdx|
zzS^B7YmPxE*~lSle_Lv2YI|g3QTBxx(%E7lFE*${jzzz^8Y>Jt+t5Ad^dia`q_&el
zAuFfC6zAkeP4H>T@=$n324$PXrf=?)+RM~x`x~G6mW@>Tdr=_DiKwoNjtAMIf8S(e
zH=rEgqF{hoi!l?3s9&(sQ*O%!ki`e=g|cnjW2`VGW8FrSf4mTYqLgwpD_**9$|A4@
z|5udnKH={TPk*RhQbvMnAYtrJL;yPBsODWY32jTBC?rp?I15Bn&Nm)|b6~>l<N`)W
zYBe-;V1k)}u*mkQ_Okn}`Z<UM)n9L#CE|m)va$_2+8)?aI-SiQ7PH;(Lt!?(Nu#-(
z|Ey)Vx|)k>e~N8#t!!k0^Y)1ku^V^!S=uZfLByIZhj6XU+AAA86Rli(s1no-8!&{&
z8jMWSz;F*kQ^jT#9zdE_aXB31S47?pZEaI0O*74cFJfpQY+KZtZExnsf`3BAnq7_V
zN0L5Qhh0d2R<H at PNGIU6-t8k>XUXRl%2%H at aVlP8f73X|M3x->W#{eOu>ErHlf>zg
z5iZXc3s;ED^nN+#A3T{s?&pYcC?_vJZ6H!JmnB*G<8D*^;bCTfW_VPN3TgSvjX)t&
zeOvUm4(d~(K?uImkLvM+29Bs-jYd{F&WeQhvoxi;0+KA>PAs944ti#YSIx{ta|7XY
zkLlEIe?2V6b}wIrv4M)UJ1MLXf%vH@{<p95$ltu83H|MPAJ0ARhM(hZav>D}DYa8l
zv^W-L)frc?J|WB-GSR^cXG#1+Ef!(1h;20LJMZft%*byRX>~xgP7^n<+^Ll51oxyQ
z5F&hd!VcjE9RI_N;=d9nx>SyMrk{Ch#qpQie=z!Le$PSLxiVR)Z7!NGxEBJPoBv`x
z0~ms^rt$EOz&5`E)F(x?4vh38J5&G%K={AH at bj*R5x<?Z0~ziZIj1sf^^Ob~3g&e9
z-9{2X#8(UdMJcbc4@*bW@}<(l#BWU3D~epj7qJXcj2^i44N^}pAdqipS#QFE7ncp3
z?x<U2u73uD+k$#h=bA=D_L_AlzEf|eke2_M3Oi<f*{I!<fG}6=v^VVMKWT|vf9Zds
zg`vAyVwPpqHUfy2J8)rrs=I=fkhXxv45 at W<z&KpleB>7Z8gCUlM;ARz8WEVR<_7ju
z1YOL^Wb`UwjF!F+1iA<$Lll5uuC^;Efst%_r+ at E^AC6&DCsEVM<gNLj&TJl)V|iG_
ztSFbT_e2%uWK!qS+5`4}S05ON<o+gIS-V3=IeW at 7_`Y)4sO1sPmFEB0C|fZipWcT8
zg@`nrbzwqAb$bx=F7k=Jx^TwNx^?3X4^+S4A_S!OSI4vzD8>>7=f<p{zovT}iuOHz
zhJP(2+&Opm{YI(g1%sK$9n`uY^jhE>nK4ZH-J_5s=gaGZMkhWChN<*7Q0aeXBx+1P
z2`VLO;(yref(dehgYE0m^C#Zp6?<(!XhhGNEy|<X34y0WZ|=QHkFt23NFP5PcN=ep
z<{^H?LF7!wjy&=_6qH&*SaWLr#A&{?fq#tTtptMx1Yn!C`z3$`tCSq{r{MF-F()7x
z9}>4ch!g)0iPJG)TK&YS)Nz$OSfG&!(Q3HAUJni-c~d<)@EwmCr{?CiMO@^mFBlZG
zb#-^hrEhg~#`ck)5Zv<UzkI72%a8-O6>Ie#aaYf at A)$mel6Kp9%lbKHHC&K3t$z*|
z1 at L-Ynxgd0<>PO&7_R~{%4 at A)B*;3{(1LJ((sWA(v;@Kje&a0vquafbuh?o2E$rLS
zc?CIm8Y%bH2t%f{hVse?iW5liy!J}&=oFN>D(e0xR6-il_KzPT>ktYHO*uSN99)Uo
z?6x<*deh|0^E}O8LR%9YP|A#TH-FT|V81#ii0eKP3I>h~+E<HdEz+2a^8_eVB}Fd3
zTuUc>)6K8({)v&H`}!wQ^MefH*1-qj;RJm|DCwh|@y;d&%zaqdr?B=w#^_29siozB
z3x4SSMGR_$PZua{n>|-1tE1KB9zeWMvU}^6i>4kmH5Vy4F6xMi-9d)f{C}`skmxDF
ztxj4Bm{WOK!hsO0WGO~jl#e%!ihcNZY!$?bO^z8GU&eQNdY+g&db;>4jgniahraYg
z9oPpJ6hJ<dr?Z=L0ZCPV#T#ZFh~xqWF?vY-)y;qTGt`cGIIYZ?jp{1N>BAF?!p2Sg
z>3+fQ(y3|o#>8-Ds4SD$pnnqTOi8*%Ez^6ul=|c3AgrdC%?-tsf8M*XP-!vw(4NiG
zI*zqHXoSn4x6PI>8;c!zY_V)fVwmIFM&D0cF9o;<hsZU7*JZ4cx2i^%CSyT7r14WQ
zKc(u_KYHgKaX_)FQ?w&^G<K2Xg6KEu5X&H7IbVT8G84!1mua1N$bT}sBcp6%NkW%c
zl*HT)HV>B`xh_Bu(jMk}Hu2Ks)ckR;oW|t_^l=toesMY$9?>&pMhpgdmr9N2KHmq!
zu4<A(2i?WkCe09`-Nu&k0fcXgJ$uia4I&OrdjWeR$8Rgk?wA*Dl$qh<#_}mRDC32I
zXcH!u$fbnbXyAjyPk(l at 6?se at Q&<{WuZ+UPt?MhK6QE|xW~ukA=(!A_4+KyhUM#)2
zRY9FjW8aNZ$sDF7f{h1e3x}0<b=oVwWLb;2>GwZR&>LAjAS;lfvqn_Fwr|7qM2@$_
zj>0Dvn>hyYMageDiQ1<06!=0sfEBais4W8ZL2_E5krZxtiGMfg1jz5>D%}Mqj#E+>
z!?PF;V~XYbDQf7H?Q at m;u`<Z0yJafuFFl16Zy&v2>5T@&$YX0K83r)7g87b0NW!Nw
z-JhKMfs~Mir=Hs4G)as_Ve909snCiwjSe!ZR>84vwMoQN!Cgszok<GZ_NRFJ(Q}8L
zs(T-QvaB!;Ab$l`a9vXGGV9yM#hx!r28ElKebh?|lWc-{^;^@@LzIUUys_#3Q>4WR
z@%k;T+^M#lv~HQn?e#%=X6^OOo^H4*Th}lixa!HjWOHQQgfxg`=MNs!HY6;mWF at C5
z!X2%y?XlvopRo|Q9{jprc%tei{cWehw<Ow~b1;$sc7K#o2fyZ!pPb;EC7z>h7o#mP
z at UKSi+mr|$WfedJyNF@}`h7&50A!uAm9P~|m4ryWnJ5D%vSR^Tq$(k_Qz(`!5@#UE
z9qWFd+tWEu0%1+TCgq at Ltu?wmcWhj;v2iGeZ9Pd(mmS$za&gwe^>YX`!v6A3ApZ7@
z^?is=9DkrVj2e;CqdvDC3OzVnt+$<>GJ#$gTqOAfWg&GJjAp{Q%{+E&oj`c|T6b)T
zo))81s#1Hl;4DZ901u3N0=w>cv{}&Swb%*;E7Y0kOM};T*YOa0X=xB0u2xTeSN&}&
zT$ycHuPkuoC9Yehg1xEkU^i^hUqJyYzGi?cO at Dz>1}b>UeooAjhE(~+7&Ko-|0n#j
zWktmo?XU;gnIx0sTX*qgG&r&ejzo2dIp@%<%grdrXmf6>g{b$?PYa%4wY*b^?6>{r
zId&dF=F0lcIo}?6*|CnYCKmKXpGwqJra5=PyV&PIp3`cpE+61+PrZd+r+(f$nHu+)
zxqlrfOqPx`4ip363~5CwO}*^~;do1gpY$ZnXVV4ysoHdIwJj}V*OlCFJDCGcgSHUj
z$P^z+?0 at Kn-T674NA?Fzk4c}3j-drUB|T&4hRN9iMGlt~V4R^+>Lr6eZRaaFB60?M
z>icCwUqHURB?=I;02t2&*Fg-~y at f&=bAKC1 at nZ;IGrvWhIFj`qxG=}r+O}=zt{tjf
znpP;uX|CjvgQ)fy`x0c6Dp4>`i!++{^efS`owd0-5UiPxe|@pU(%)KJa0)XKN@|MY
z`;z7h>G=n?s;nPzX1UA<38V!!!hiHsao$l|Z(#Hfc0_nur%Z&loaO4Fpq1k0O at HG-
z3ag(XDTo`prXMey|Ln~ne9fliS|V#%V)R*i;~XC>&=#$a8P!Cyv=3E*amJTWVG$$D
z0Zk|Vg6eCA+33C*xI{Ro_6q*FejSzlSbCG&k*jLPNMI~uzkSycu@?MYr6qN~OFsFf
z<Ky4NV`!z%q at VUxCoyArW{T at X+JDS;=Bj3|D^a&ZZ(6vc?c?z#g7v$-Y*$EP+2&A#
zL!0!m+&5eWNF#dF4S&4Sugjoid(D$@;>M$YniL=X26D1xs3`df4-fF@!C0~3+1E6l
zWMst-L-`eRxEEBr2(~)ZQJ&voYrz^`5AqhBvyC&A$538!y73*Otwx5;!+%Cobfk{S
z*^2U4+ONGb-y!#kBs93*M#Gm|9Uv7_<=<rhc4sw(9mrJTds#rTs_OxKLM47lvg at 1K
zKb)BW!F~jAja4Cdpqd~WW5?WTK~bXC%)6wO5#Co+*>qoN#*;`CP)c}I)b<FKu&3NK
ze!hpEcX;Wb@#;&q$HRD}^M4rvCplJ$%sjH`k+rm>@@OsN;QFH6Jy|p&@ZKEP3K<~r
z{Q at PVtTqv-ikKHAUM*YdWtXz55!)_|zPQD>XZ6miJM}B^3#xic67bTB77);ub0;oB
z0i|xITSP_=e3yScBhiTb)#P01>3#sus at r}nZ)_;LVBRh>F+>8$oPUZMB$lpoH-1#9
zu&K*Ffk7;!J{9c5qT8Zl#qV!qp>P;T`bwOzoGOobpNK9+A?T`y!-6&lqFa7?;2R#-
zhuEk0>M%HiS7#v7CiCWNIms~a6V^zN(wiiMChkIre%tE+_j`SwG at l1cExIf`6*kz!
zXowqt+g592FsT9u9DfIomWi>okx%vH+R(e7uAJqQT^dvQPR|$PE3d#BJ?}H+mAnV=
zk$lw_2HnS~X3|gb&>yMFZghNVaBs`5^!3w=jLZTI(uw9-ZuiPd^-CLqDbkSXO(Hd%
z0XxGS%N__ak05?ICH=oRn)Tkb at I(wpUBjj7ah3}(DytABo_`APk}86|l_amDu at 4*1
zJl)gbK}^RiBoig1 at AQm-90_N%MfsGDIN@?>2@(9&;@khfo6ZFq<69Mm41sG$Be8dc
zh>vQR7_Xgb<Is_ivTEVb>872S<re0X*anc*>73W1wO-ynF!x)graOHqetq+{+vT<x
z;l^)}Isu`=^naBHB1fC6jw~2^d%L~BoUC4q&`5fppCA3hD8kI!wsBGVv)9<}PqwTk
zzm!R)Fz_t4W8v<#!m?za?WP=cld9Z~Teh{zVI4W4H{!CP4Pxe|Cz3eJ2eRr9hjr5b
zsKdymEX&kHuOgt$`($r3*=kD_$BU%;;8Bzt{G%RKw|{4 at z3lMF=LuSBU?M9{GV_xv
zkTO_ZB*n?Ha*gS>#neR7RNNwK5P+fTj+!5<MX**{7RvU2fXP&#OEPayfwBnF58pH(
zpQ$Vt`EqFQ9wfcTYH#Zd65k5wyj03QAh`ZN56`pyO1ZvXwS3=G^)D#hcv8?`HFrK6
zTcHF0O at EoZd7Ku0K|^@$xg5_2s7V~{ZjqKcWn{S(nzp=%wp$YbnQ|1Z?DIQm)RNi9
z!~ihMfWP{2+E6D21-qTgC_Y89tiUdR%#aChJfpwXeL)`<%_t7I6HIU?>eYdPWf+1i
z?Y1k`713{ixX}$x1cZTcADQBQM=JqCX0-kXuz%ij04N1eAQ^xwtyfenoC>H|g^0cM
zJRyPcz;!1#qv8)d<t$>r?8n&+ENXLq2EMv1Qf#A6!G+H<sGn|gd<IQhBD)(R2CQ5`
z<D9M^?p(|$lt23Fz*;G-3q^3)PWi|Zi{LQ at iUNE}mPB^R<DSNuNNk={$0)I{#(^Q4
z2!H(VT=(a?Y4!CHCTs6L_R7y0E1f}*I;MR>7Zq1U#Gtt$CtMi)eTo8g(7pm$Aj)SP
zn+I)YwDt?*3bDpW4iX8Um#Qt at 05`1Bd9KvZ-Ln*a23E9Wx8=g^`TWhCj#<#M7{_ba
zC=!UhBKH6qtBf5<PYgY|i7*@o^G;$n1%JK?przol^EnRe!_q<w4D-rn_gyGwcgs8~
z9})3O%Yfpwl?T$4PD=MJNteCHa!S<9kYpb at 4$ic+e>=5g6kwC?VN^B=0!L7|oGeHy
z8Pt;pcM;=t5m~bG0(`63Js3ZiBN{$jCyhg(`b7kevsnHtC{$9B49JzG$rDh)-+$yZ
zb+pJ;ZGIOPGh>TmI{~`D7t!@J9;PSEd&vqfPEg07TA+X~cXW54bfgAxGP(r+gB7v@
zB_v_85 at xaUZmd^5wC0NILCa)lK?*mT-H$h=D|0+T#dV16Y5s|j&{f48*bkqKm6MPJ
z#aJ4Bq5$diWaZvG<Y^~Gl$?thA%EK<6lSb?o0FJl4(yp{h$E?{i<cAw^83oo`;CP+
zuXBxreHro&s at BslpK1svWDjk7p;1f at nIg3x*br%u4l(>X0B`uoRwPPc4Fe*<L-VPm
z;(<)60Y$>t3vmxhH$fvlfh`;Uxz3wD(>Z}hAlSBSLC1dh3)k?pY-K09$A6PK_<Y_Y
zfezy~_9;9fG^&V3 at MBH!?l`!Izc+aBOGA$}+-c<yOl+=?RGBK5(b|Y6rB#L+ak;Z#
z4<y#c?|$Mt-~7Zbs`D7z9>W at oH}i`iY}0?Jth;*pq4pD`T^^D+;$ElU?CeMIlAbu&
zt<+vG41=B`kuP&*Tx7 at Uu75zwD`X7`8xefp$bNC;BV4 at A2<Z_9X;_WZrl9bK_+y7X
z<Ss4dSaP!T=7__2r%8JoRpJwq1Wpq_sSC{}C%V{8Nu6(l)r+lFgPeJfHVVLDK>f|t
zQggn*9zLWy%wLoz!O$nKGWpXQn{u1f5G!~gOuoRIFVo0S38rJfmw!kFKsdkZL0qml
zChF)j&fmS>U4i$|RKYo0SL}C}du<jnF@>d at sd1`|L4!f1Ai1#ZPC}zP(+SAqP#?sQ
zO9QNlWh~sq6R||4DUoeHIn)wIovWp|mE3FmX$OM%ntxDj1nX%oeCiANjK6x-0$(7k
ziv;N{{^ANX;Xg-T>3`=`Hfe?-)7(cOutV4nNL?MdnHOAjA(r)XiGgocUjG`N4!6MT
z@>~!;uCE2}tu;zsU&zy%0c2oFqDoq(O&y4_sY}l*fLa?EUPw{a+aE$G(DY3lQZ`NU
z at L`)BxK$WMVh5?NypBvqy9?7AbPY5h0VzIVF3X9UccA}ag at 1RkBAtdK965*n6r8^R
zPD3N<<ZhWaRxuwCa7v}-kWai}L;xh*1{?3gL$3*hWu?>O`n4Vq4s&-5<C2G>MHVn`
zFl?;)<ZTuDG~t$i#RLzCw|@%?`?NDH at X!CPTw4hE8M1$QP(LEQFv8vyS(7OL9fshh
zTWU5K0~1;cgMTZ`=B87-9bXd`Gb?9SB5kbDPE7GPMJv_aqCkN5S)O5RKTfMVS+SX*
zDw$kSY<Iy%R`s~;Zdf9yW02w at j<H4*lrzipOCG1vTBGAe3biTAKclITQ0H0U2_N@`
z1=>N;%=G1%wgD<Xq{V|FSp~iD)Nl<bXl`6s2~xr|oqq>j%BR#%I--B&tY4unF31}j
zehNwdHnLO{$3VpOO3uaBCiE&;|5iyzZ$vuAdMO~WxuIb at w)fSlxuwQ{Fd~{;{^%`E
zWyu$uUQef&A{590vBxNS3Fsf(LaKk{)n*-yyE0xG(p|zcm?~t*BPVot9Lk^^Kp%N%
zO^|m{qJR3B;xiwNq}Z#hpl}#d`DU=uwE0aEr!Vfn6;9*XMuw at PXb^{KQXT{g+?%MO
zrHc+oA|uhEn0U!VIDat9%GTW=9<UK-%;k<+Q2f>GGeG7P1BLA1zD}H4#a;n_yGf!E
z at WEHr&ttAG-KO89d_GGQP-)-W**6izZ4(RD7Jng&05+d$cq1oj4h7|RaZm`6&lGgw
zUpMhdX?KE$<63G0E-DM%`1)W*os$t5J;Y9^r$K$1HS<+kbU$FFdh4%QM=zCyXp)WN
z_{r3zw9{W6$A at i;d-hm8D0kp~tI0XJZ(B?2;Gh3{Ur$T6YAQUw2F-VzH>i at JrW?J#
zM}J*=bZoS{y0)C}D5%E-y9!ACHWER++-74H$#r=n-dI?6c)Ttm+mM>URMwK>H`}~9
zlGOFVSkT`3KG=8UDF7Q<#NS9VCt6v{$-jd0Dad<gOFSYd+3WgK6t8khO7An1wi5##
zK$8SqR-8Hvv)1O_VAtO|YQQn6FIrJL5r6C<840Vh{%&)?gJNqOVQ`9AZUkg+HlP2i
zB{kM8jl{Q%7nVX_V_VQsBBM2K;SjEEZblL;XISmudQqi)hA|cgpOA9Yie$(unZ#;2
zKWYv-hJu4SW#jJ&yNjE>b*P`?7+q%~Lr=*xJvs|}-d#;T$^~9e!|2x!)1j4+Xn(Cp
z*rv`g8tyayAf$5PE|odDoUS~j`E;7f-Y^|ZzaB+fWd?0#K^{b*9aa0O_|wOp6*Vxl
zB-p*U?g(fJ5-jh$crp1SgJE}XZmv<8xvX3->FLtdI?SQC%}dj=j&XtpL9W8EGoJcO
z2tt&NN0Gg;<``mioa2uq=zyWpjek(X<of<4>-kDp^Yr{IcqJVYceC`%X`atJO0f|i
zIe?`8Zu(81kJ4*)u9lSUkfGSmOOv-BJJsySBfB`YX;l?H%OFe9u_P&=8~0JU<rk!&
zIJ?fI6P$WpETR6~7MM*QP?z+s&;ll%7TDms;}~}0mdKoCGWIr^zXcL0Lw}%Ap~}mz
z(ChN=odQ;51_^UgfFDJQW98V=n0!?;K*R8fs=WH1i_)VNb7(GwG at uBAy=ZHpXc!Gk
zMD5GTKE3hrsF|;a2HcdFMr9XRCp&oH1GC0W${CvvUDbLjk)!EI%g8?txF*%aU{#7<
z_YAxtqR%bnzI=vd2mIXT at _!7!>9d6wtf1|UoV~}FVaYtdfVXSOx#r7BRCRj)3$wKx
z+=Hfa6+QJC6crMQ5i}0aUiA at r53;9Jwkl}MwCTx^Y7F-R=_-wNK2B7;)X#@sgx-xx
z{-od<J<Xt^DvKZxcQkVG4N<Y7fnSD7davg&g4Vc0_95qwpWP&u7k~T}Ew7-{Z7wlZ
z3X6Gdl*`ptgEfDik;BNlYcA0^f!5 at R#Wq}hJITA_Ru~a$xwUjI&YO|#vc}JZRF*5(
zG3bWi`2SdJ>Qi)h at 7~CmOFTv?S&Ph~=_G#Ol=*Za%H}L9m(u~uubk}*&gkHt-N;kw
z`8L_4cB47!P%Z#?mwy2bSwM*0HC{kLF?qAFvL<nq#jCXoq8~#zYV)_Fc>YTe)~qr^
zLzN}&8|=A%JZd&J9=TQaIa2RnSQcC4DIZ at Dev5m7YEHuL!qHR(qbjWKoFWoLcSleU
z;yW<TJgZ7eau$U9o3<lNEvHedsmQYSV<k)`A=lN=613n~MSq4qh!Va`LWaJo$sr^h
zZ(Zx9N<Maiz4bi-wn|Oc+gRw9)1<@NQ&%Q(d_CHZ-h;Eg>~vfof`{V3G1My}!}{hc
zCotlFu?e#%T#QTr+Z^u!({6<rw>hk`-A#Ev6=KfkP(z05JmN*hj>lQG{0<f+433}J
z>b><YfY!B}=6{9H^5wgj(>{E!D at 2l>9);gg<VRT1CFWrYoF@(%YB6EsR||y&O{k at j
zJo=mB at 07~GExK!@A}yc#6kZBeT=~HS9M~fSVqPf-frpLp8R>1%rUUM9fa8QlPMHKo
zxfM+M^_jY at gd$@Yb^BxD&^a#wKL2Ss9JIHuG}vujm49(Qd1eg?P<)mnh9>j)elm^F
z!=1J}p6s!qy6M~%tR>Xc-gwzVB}Qrx-;{+FMOtrx@@{x{2tT+=S}Jq6>vCQ|i*qRa
z(zeFd3*A}n_~y3jo))-IrHF4_+==XTSO6gxAZS-oAC-hwS$tm};{bs~?`sKe?v*sP
zuH(_baDVu*Q!hXQ;Lj|GtGF<)LEwsMFUS|Rg9S at Uf4K~}Y`-;^)#HdN%RWZ9=~<%P
z6M~&uX;$BA4F#s at B@bbDE<Z83a(cH7rR1Hormbb0_Un40n-uG0uSlX*26G8FV6N(0
zAj=>mxleu+0wO<Owk=L*@v*d3$)11)?>)LuK7X+hSx;xiK3GXfy6kJ!1 at Wi=JKAD}
zec0dedPSmat=vyQ^^i!E(8*M95Er<i52#B+ at s8byAolGdGM3oWq9d53xgA;EojbEa
zj;6jujW6G at 5(&dDd=6(eRKpl?7&yS?a%Dt?>!Y=vp6V;^9Zkj5&r=fylb(8~C-r_g
zcYi#d?`ks3QC*n?T`}@V^NNP`MT3tjN(&Ro7;0pFK1Z1$%mEz*EBuE`t~WqIjivq;
zPyHX$&a|m at a04_e&`;_D>k`l`5r$DFBY>^IcV+=u-+o4?;cpI_qkC~a6YX{CoErLl
z=XKl!RQO;zxUNqRi`^c1XB0Dq2rSkIc7NW95`U(7E#+qbN_ at Iea~cNY(A>Z>j2wCy
zG*rI{5*I>KfqW-iTa*+Ese({srM@%2x7wOqyx_(zFutjELyeamg&@{wxoTJV`SVpN
zHL)grD8<_}OHf87{u?xu9C78Ne+sP&&d3W2m!(Mw!xLS{d8X}QhM&ah(k&g!=YKMQ
zd~4Y%KirX3)5-j7KmuDjw%FWNj6%-oT_SaI<31Z4g>Y~7_W%@EZ1)X0iP0uLXZ=Q?
zxqK%9Kj28I at gh*P5n!XWXcMV3F+8=|rg%mSuvL at JoWuZN6wE^1L at uS4mREIR%<PCo
z)cd)^_}U(K=8=vrf{CBKHmV(-F at JulKfqG|QPe$KF3Srx-g2t)S+70|tcV_k>YgF-
zDQ{Jk{<j&;K2mcQsT+bG`U9I3i|`lZD=2jr(gcI|lf$KP#jLl{DbeF0Rlz%%y*KCT
zdAz^T!Dgo|q6^U6^svQSOIkeT+Pyd=I+d<z$y0deWi9KRH~|+%2vPvWDSsNkdXm8<
z`zeP>Q{mYFmHQ3xLT9dh;L+XW|4u9wC-`ZVY>0NRlLN&x;oHS#DaKo&5Fyb8)37<Z
zm414PpfJ0$mBO~}56?Z9%-Yml`89-H!n~h=R^o at 7CgjHr4^p?9enn3f)4B8*OqKzm
z0wHr%XG*6iGPzEsIo3o4^M6NP1JD&roE4oEv2_1V?Tl{ms(TtqG0U4ix$lQh3+nfN
zX>*jwv at Fr<0N8e<17zmsg?HfD?KezKs-t(>BC2#d|05f|teFV{pn%Wkk!Q)zBeBOS
zUJHQIEb^%XG0Row6>fTvTS>10%>+Uv29|93=5!1oHfn^+0aH at B<A2T0^9i5w at 2aC1
zDGa*|qYo&66SP)^e-V)iaM%I&o$wKLbW^)2TjdlhK$nMdi%gw}NC>VG_mZn07-~C>
z&E$$k?Q#cBIYGBLg#7otkbqqGX<^R(_%j#<(OJyZS-8nxI<MUiYb^b!O(VS(9h7GC
z!`kFw(gV_0mtr~{dw*H=PKE4g&njM{5qw)-h3TF=gCDv(ZWrUnS{>a6aB%<Z!r;+T
zhx+!lMt3*BlkG^Ewzb<gUop*vm3d~1`T<xEE#qfmUg at I*gfjJbuxR^TkZ;uJ`@+5E
zas#;3UwW;Nb)%=Ro6iy?M>LD{Q5rlAr8?P<Y6^PPb97G7>wm(a^w4HUTnHX<kmQO@
zv)o-0f<f@%=b0M(a0z4?sef`@pqbSrdIy_f$7P0XHBtdF8(*8B7QlM+eU<SHC&>t3
zlEglFi>elK#+q$V6$1ZXNlbfV5ej7(mC6UelZ9Nc6^oe*82eTu>bq+6GR}O(@3)4+
zQTJVkyR~8Let)ky@*C2|R^PDZm7CH_7{Q}x&;0)yEga>}y}}Uqjpk*tK5ug6OeyDQ
z3kd`@%1ZPWC$4nk<e9Hb9>v$q#^@D)c4g&-`+iE1 at r}r2^QCBJVpdYT`&II`*mV@%
zw`teNQOvi}x?JNRWgx*|E&pS>B#wMSg7xPP2ikAZhJU?TH6+0Oelp{|xNY|IOF=Nt
zjvfIuZWy;Pawq`jrEdTh@|;W<&4&<vVu4DF*Y*r)q}=gZ-w#B<mmE9_C@{m^P1Ce5
zX&@gYt9?Jjt$5ietXy1S#H)uSAwa%V7@=_-)!<PXIblNSwSj<~q3~qzAlZ}sJHlUI
z69`6{kAG at Bht8^Gp41DMZ=1uP1~_^bScPzXY3*I`mY|xfDX=j+$Z?CPnX1t}1Orrm
zeuW<QEA-qO<_A;dX8!<-kbk*sp~XCiyOl%hbX82mqNj#(S#bhQZY-3rsu1z*l>V(U
z<~_R06jeuiqXz=6Gx-9HaN?VC{zA}`xJb`Vvwum7{T73 at AVL@2SULIVPyq}teLePQ
z?6CK9efYDOvPDl=45vFoE+`aX_s<U~x>)K1ECrv5Ucr04Sxha<R1s!x!d)D2TJ at 94
zgFRcsZy{XWcdjzG7CeNK+_?~49VQ-ZgNu8>=w#plx^l$?6j;oL`ZC5r?)hAgD>Y&j
z>wo(zcZt%<2c`wS))-<1-|@K<bl%8?!cm(kk?#@B;~mR{<wJ{2wmb{9<~^0ARMI^h
z|3HfC;yZUhK7C<?`QvIUEKSfb_pbsCK>7-0F;C{!xMx02jH<!w4rjXx#YINC_-kh+
zk(Q;@%Pk77v9ycfop~#>&s|(<{l+37zkhixp?Ao9pj-j&=#0Hn!U%1bF-Ya>#51OU
z(KB|TkgON%>nt?c6fF`A^UAz;$Qox at U(6HR`$4yW*Yp8*)hw#qs7NGm3(NLfsrV5_
z<V-;$eL7cVW#-0^_ps0jjp3r^+(>2JE|bkj8Vv30G~1^loJZ!Z>T6zgLee7>2!E at x
zn2qlVt~c)g^@WluGla3H8RT}67~07{R_lz`8?R$krh->W6^N$hIpry8?TR{keRl-e
zKsFQjw%7Fqa7jket_Sj6gOR=|9ObgoxB+<^N32kyl>&)|COTQgUf+8x`9%Jnq!k5%
zDff|@hF8X7e8m>C{YyE!^{^~hx_|Uz){QTiTNt18B%||36E3a~;E?s|y$fK~{h+e`
zZ!Hw5?T{UC*P*|CSC(aoe-BRAjSiH|TBnRN_<DZJf7Vglt7L?*4Ua{a8QsmPkt+VR
zM6;Ef!$^Bib5*9AxZiX%wcGjw`}i)=ZH20;ZdY}><M<(Z*8khXS9fOmhkwL6K1*`A
z^Oa7og5=0 at A8E$m3zWpSP9A$erawTVGY6Sq^2- at zM}r88Oo62vABElm#Ffv`@!w2n
z#!Q4ruxGzC9iZK98J8DSEvA7BC^~LY)Ne`=Ys**i(DEgop`2l{@V;A at YP0-<5MX29
zeeM_p3_V5|{<G4lijJx(41eCEM$r&uT-Nn_Sk*R^HBFGSiUGt5qXl#_I|#v4*6!l2
zWDTw5HJZ=^ltFN}u!N(J-?CcNAht;FbMXNsAd`#;lwj1xy%>OXr4bWlzNn%`7!w^C
zt<>CIRN!-{Icd-Vgt;sKKBo?=l*&?dp%-2go<F8aM_sbM9)|X=iGN_l@=bHTO_4s-
zdSV2kdH}3>|8PMGrc5#ZwxUi!?Bce6B4?4lGUMQPEQ)ozbm7B6*3w2}-SE1PTM at gG
zp->{GkS?y6W82SR1$SH*6(9QgBAI0GGer_3*kM;@l(>||7`8d_bwPddvzcoy{ICJc
z)n2`0W~BWP1JlGlGk+&DKs+Qfcb}xBe|+-f4v%w!;C-4_r)=kcS-UdA{4tx01^{F@
z2A5y at x(H3T+UuWbcYdK}+l^54yST{Pvbby=`zjpTw$+GUlVjNy{R0cl$H7uxcpZ0%
znd{e4%-AB{P>^DW&eEEoODv0W!hK#U))cOS7T&t+KsE~_b$>JyAok<~)OmU8>~3*C
z?nO5O3^XW)`<!`<YvRE9M7r0PEdvJ(ZWFqY4+qIaSWXo~>-_oj1D)Y_DImSL$7+*0
z2%sxOr~xi}&mO6CHLdj{t)bD--X=i*J=ktz8!Rka?M-0{_AUPI;xgY^Vx7ACNYxNU
z`}rv4Rta>AXn%CA1O9YvMeE16lv-w_j#4>NNvppB`^_}BU5FWBx*>2sdZ&GSfYRWZ
zXDK=f&)v*F`BK+Pteh at 8U9gQ|mS6^&hD1htQ}g#*FO0Fna#0{S1b>fypFGLUzf=(&
zDUWSI*Rf$H(z$NIGfAAVSSv|9t<Yp*bs#Qmpdf#u7JsD3FCFXVU0P3HCEees4E#Mw
z?gwmVDaq}DWp+Z=^{-AeZ4pk-7n)`qpKzH}{Ab_I#o(Y6K|DV#@KYz42!=}#mm(Co
z7^iH&@r#F8q<f)lXwSE<^J%!8RlgLGL(3p&hZ>$$BXHrM7}P8WG&Zdmy$9uBNmg;9
zDA}z=2!B5W(2vF5jnheG$4Zu=RA40A=&EEv(W2fpsB8eqTzaH?Lve}^HH#eO{%7WL
zGU at sv-j}~XngrV+Ey0A3Ct?PN=9&0f(`Ol|a!T9-DGZodm;xtl*Ch0b5m-v8u2y^*
ztgLpgKk>>@Z2b*w@&~*Nn<HBVwh(hz5IqXXBY$8~{B3fvdt8?;)hB at +ng9OWD!T$X
z*`G2Q1 at h?tGn-l7l*9B3-^3V5mp`;4W3|-iv`B}-f+$cNSgM+M2QU^40Md*_qGc$H
z*4AE{w1aGI0ge*fk%v<h7BWP96*Bwl^eA|Tzn$nFh9=yu{x6EhGe$pTY*sRM#^rQ_
z`G1~PQIdB18S#gLlH4<FEBq#6Ruh-6sbLNh19{bT?nm at i?(ztF<v|=5klW|al+$>X
z%h$5S@`2;Eqyc(hUqFQD4md9ndKFcK4RP?rZG?2R5li;GP<W^rV&wJ<q9R~T42R1o
zCPP!8H5}}*g9JBmdW#(6_mm`;1}ego(SH<*4niFm=wo66`CvJRHc(vG^yy^iXT;<l
z`hA#aLMxejf|m?E)$)Izc9a{$n=tXB*#<(Rl|?i_XiqYGc*ovAe=L+$&E0&h0Y(6=
zEOe$)0A_wcp!?A0Tou7|pIX%*3d$h*%|xMD$q at Pj2|F1~4B2KC=HQ`E$O+m#=YN{L
z^ib3*6yB5YSnfWACKVAm&so#c3W5D=Gq;_wr#zo+{?g~a*q}dvh7o~;N!<o269Fd7
zW`;<k-M~<oin!z9HBY+;Ib05jnfAMxKPqr72RMC4 at YVBFVNZ9;4$ze_z|wJm&IjKw
zkemtDd31_5zPbh3qApYTBs($tdw;|{s`(FwNTe!LYXn&JFBx#nUf|1u^QYiEZKT2T
z$3=2vWuWv5r&nNmRB>&F+01!N=^%LMZKdCgD)<3CDl$V<YU4fMdzj$_`=r<?AcPlj
z-j at n*wD=ePlk-EjBo$~-6q*mBG?i1<X3WnT>I&#gYn_3T^8IGMa+X*{o_~+gd*eks
zm*&{+d)4>ekg4Fn4#$OX2OUuqkWEDu(36%Vc4`zYc<Y^jg$M&)Q0`|IvCYmoR0;R*
z57#qG#1E#wLuH-0zcRbzJ3m_NzHqAfV@$nx^UZwrs6Rn1&;T6*aKR>Ly>|^cuBpo?
z;77M3je@{K6sx|r-RJ_J0Dob at Ig2yzyChLIq6!T}&61Toa|didcdtMgIW#AIn$?u&
z=J?-q-TWK`zf+-lhB??XN7=((Gchs)n`7Vf;5X;2T(jCmzDcv-QKAO~__cxrJz-9e
z2m+7;Icd%&cU{Zo-amamEo5CSvXZkVWjw2i)SQ*XYmdO?E*&x_yMN_>f`3taVB>hx
z5)@k|v*MbVTiz%)oHJfzsQap_IPhHp8rxIXjV~zrhEMJkL~Gpugi~`w1SPGA#d==D
z7OnumMA_Jp!PPMZ5;_f2FMq9fx_&j5SIGS(Kh|5QH5C_-6D|CjYZBj~O-Wenn;K4;
z-!kT2h6K6erVdMKRevx&#^VWlfXLtS7wJbFz^zDst8~DHn%t(6oq`}u?UGr!?(FV%
z(*6O8?N>i at OY*eed#uO|10rqo3leWX&w7XDGa8w3j?c6a=cQhz;f-y^E^lOcITl4Y
z5xiCp%_?4VXVYn}>H<q9aQg7OC{AbOvk;s%b6#*!%?Lgk6My?aYXgVw;Z54sII<W%
z|Eh#wvxb6bO+#*52*-AWVd`eOGE}GJ4B+OK6+DG8kfu|@z)6Fi4e^hNNZ1Zx2ntqe
zm^6S$YaGpkdbW4z2s%E}uCdzXZiTH{!qd$Rarv)XL`I)i-&Uhi{!V9RUNZnv9vm8h
z_aQ{vW~-e$+<!F%+#JC!rOA9dg)n>516VT#dM$l3Q$w6o<6_($qqr6VQlCxzb(-MJ
zf)cJk@<KDK*Q4VcGw8e>fe+dhxnB22p4?%5P}T$1#0O48m@}jL1{7qdrlBay4goFm
z=s4CmUJryK at U>ZW(0$Tmf6Qev^G^7KErq5{D90s9Tz~pDto}GKV$+Fv`hATx97Vcb
z-j!s~b{31iXjXe+m;7q0T#0MkKw)EkQG~$-`pnW5Glbi2j&pl<TYV_lk-}cjl)x9R
zs8DpIiQP)8ubC_{XEuE4ctXbfq;*k-l`2NQP$caIo=>Ykj^LNZ-4YpP+x=C}XTnU8
z>FP+8tAD&cm7GcBCPkrbFNNR7ZRx5oaloQRvc;sQ|Hv8G)oYq!aMhq!y_COPk5i>B
z4KOlCyG<$TcO%|(VG|!EU^uHxtNUYEIp37co at eKOpy|~qIF_mMKp>%C6=ocao~(2l
zLekz9{cF`QZF1y!{9QsKW>DEyQ)dPNr}pzKvwxw(2zY`?%`^{;u0#qkmRfx25jzR|
zs=(bQ!gRSqK<h7#qIi>{XtI)S!esdTa~zI889z&(g};_ua>W#^U?cM)dmGWX1k{OE
zD?@o>+ed*r_4yE8FSQu<D$}97<o44iq$)p8IG!@E$hQd#j7c{ua33Dj(1!E27wARO
z%74Bk5(cwF3>TtGiJqx4!T|!<7r!u>Bord~!t#CKHAVyg=d_W=YL_*76Vw$E6M9tK
zgqG$0K4etB`@BR*(T>zJx^s@?dJxsVTBqQx8QN(HT{_-AC#q<^a3gORC6S)`K5jdm
zX6I!?x9J4g?~bRBZU>u;MQh?x`8kL(q<^~ITO)62`3C<jFWu-}E0Ca9p>*Q6<0)8>
zzZ#SVR at 7;blcs?rZ$@%BSisuoJjXa#C<&z~ryF7QM|<0^J=x-3SKi}Affx%PgqWDI
z_b*DWK7dO%rbAxzMH^NnYyJ@}B at gV*`2%IP_2g+jnb*EY{$6#bGLqCjF%sM9Qhye3
z8eZ0vmV=^l?q$>yA*-=gt2hYQ6C2p at f~ZJIYz^{$Qz8b7tvhElB4>B;`>OLfrEg6D
z+enK7HFDD5qC|(74=-}hhKSngPk??z-W~pDXWs65ykXT3Q%PP5ec9I+UJVoWbw3tZ
zC~7yzwe>%iZV{8HyYsO)LKq?6n}4oo95f0XNry#kXMFn&WmpzZjR0|W`*zckTQJT>
zvrCIMB5Br8|Hq`hdx1wusrhXS?0RuUc;n*i;}B^8A^#))`N at pKqiT8%zk_#V2_n;?
zHP8HwGGMSg7zqIImmH4C2&5aKq`&zk)g->rrL9af at qul5Vosfk*bBFW>VH>Zb-O8*
zkO|*}b>_U}I03_rhT`8HxZ=+bGJQ_wBH^<5ZKz2XgWq3|&nKU?aW|3z%qM{(1h<{X
zY)FE9R9HEXvl2~ek2 at 2c;n6fAcF`6N4sFKHI`4jrfGp{F65JT#s%C7n$~mb~1Li5L
z{NNl2L?wqD@$g;~qx*VN27jcbEQdff3Z~QI$YMI#6F|k?)L`cTUH_0ndRi)6GP{cb
zma%<o^2*92s=ke|{l?r<UgYGwM#FjBqYMdvOd(1)19q)nt8Lx1Hntyi7Bz~e$i??$
zCrm=K4g6>fsburg`{XIV;(v}Lk#f-{n5tE;8|fX+$y_T!H$-6ds()u{{ZF%jRl at 99
zvlqY~ZleEgbvzFuL(iHXi-_b?DZGty8cOBCDxI-y67DR4QAUI9FT*uIze2qwJ?6Vr
zI85gt(Y!7EB8|h<{OvBS+I$Y@>=T0VyENRO;)rO<_=wtPB`Cj%&kk#6Zm at T-(Y)&x
z<m^xB37bZybypkI?tf=06$GF8<}dO$+3w*x{6(sRdn09C-!ROmm~MAHW(aA`OiFZb
zsdVF;Pd`<k0n`T5Js?{>K4J>tEsuZPcJ@|iTIy+Z;`sj*#|O1To_cVuS;5;w;UK93
z2TDMaWZ{bIK~WI-4;}#Mku<{V#~J|E?l&9COQNDh5rx<|JAb_AuI)AyI~H~n#C!*@
zvK5_9w=PPkm@><<?-83oVbOC8NlGB6rT!krl#I}~hiGpNu9nM?BQh-$n=Ha*Cv_>+
z!uJ}{>T>U?EKX51RBqe{Nt|=HOfckf?C=Jx at mc4U_<?leNm8WXpSVopLEea!XP62w
z32)f&$kjWS>VH9)<UBVC at TE4gYG8m<eXu=OyqP^_w^R!%9~aU5|KupMs93&pjXY4K
zH-AMIH3Kg)f2CVTLxFFUbXjx^wugPeM>2wf$&%{+H(oS25fyqH*}X$<84l~5l2#-~
z<Wj9e<nhZ%rXWMdSeA(?6Cd=!Uyzi~7ww!cHSy?8b$>TzQ{$$k;<w#%x=iq#aQ(uM
zhI*3$Ej+UY=QeYnOQJr4_dS2+3l^`?Aq=#L%(-I3nR{N+Fd at O++D@eXr4&I~A?f8#
z0S!wrxTH3Dz2QnH{jGT65o_u<a)RGKWBrDWNg?{{?r&tQLqy#E(#HBHlTGRxKowKO
z8=O_0x_^8IM**^LJ#y~Sn<S4Y>C)f%KQpfZ+BA+#?+9jcDY9hS>v8=R><>m at GqfB8
zgh)&8<Hh9ETGIr2l|NMOJ=b{=|3q>I^ee at z5VrHr!&&B6QCwGSc5n1!3Cy^IRG$in
zKEsNvVv-bZwYdl?&ba~99uau;ud8yO2 at k$sU4I*xW3nUwiUS$XaG)(Uhs4AknjZt|
zn^XRR^XdP0hK#(q^5dco;w|l2b>!Hie$8IIu!G;LMXvXkUiHGQ9g1rf(>gAw&l<P}
z>)JI&<1zXhpdjADGwU`ogs$LO1M&+f`ZlQf-!^21uG7S1IF&%dzdupZwRw0QVl;c8
zt$#0UfvCO<uY(c4em1){*n}M=Q^Wm48QBB2FRZsd at U$~c#IeQ=D5L9chVubXA- at I2
zuFf4!N`l%)d`q~%sMo-iso&O6If=L{5S0RZat7B)_GrN#_}iQUBIuY%4_V!1@`NZ>
zHi>_sJ7nxT`dwr15FM#n6d%wJ#E6{K>VFx2A2nSvE0fLSzD?_Jd9?Of--d_7g6H$s
zq&;+ at Oj)j>vfa`q*9v}}rM{o30pLbpGb8yKdxI{o=BL3?BC|_b8lBz9C at Rsz+<J0=
zxNjp*(KRHE-$~9WFOROmT0s+i02p?&zsat_zaTVPZN?w0JEA2QvFUuYE-d%iG=EQD
zx1=4+!h9DGQd|~8$o`+(j%$)V`Ssx$vu-N`5P at +=2be#C;eQC6FF|g37-StK;m8iJ
z3R8~jp1#bim8QnsR8d(nzy#%Gd|xhS<Wuw at oDmwSSl|#dP-M{oA?6&TNf&n!ra7E_
z-y;2?!F_AZ(6kvt$am3sZ at 0*zV}Hz0pVo)h>ne$5#P3vU>I++58S_|h6WT$3F%j5}
z<Y~{?()NZUEn5J5A?`UivpJcTuXM at cJTjqf@)qv<r5RUZ7LZ*serj~K6eSRkw8yE@
zl3kv8Vi=nk7lDel>c{4NOZF+cd;3G2{FB{YIOKLxL!r$ec6gj7S4eT=BY(OpbhJOX
zz}-r;n<R=AhkyD9Ns@#+;N*p|=&x*4E<)G4oOYWXm^XN9JyZVjcwxSciueU-cLij=
zf at SwbGBq7Z)G0+0wD at 9^`OmBq#?#B_+XiwcN=mi*N<sN<ij{_Xm8*QB`-;LQ111aN
zDi-mzD1y at B7yK-M;8$+_y?<D(lz`34_EkG=&yDHhu3H35n1~c6I*T4N-EmEp4yZZf
z9<scRhwk!(c67E?1iWJEHM_A!bUbXK&kl6&+P|ovlx#Sw__O3cLo&2V=zv%+y|W!3
z9JUIxZk;cqNfOM|eBx`6ISFyN`R2 at cl)xe%JhjdBlvUM4NlXni`F}1-1SWGqa3|A&
zy2$B06!t@`-gRLoA$}UiWYD_%hfkVPf%EhHaMT!$Ra3NozGTj7XiSa!z=Zk+*wxIb
z`Yk)EO*7PS#ewWPC^tVTtw8o3d+g?4x at YOdN+Zs6+{p5eU`XW`0KrV|ZQt25CSi at f
z4>s<6tq}i|K5nfKn19x&)OXr%BV8+FuW-X!+xyo;2~U!hJv*Hb+5!AAkQyxbj%1T{
za`2JoMz7nQemQm+e2BS{q>SMqZ<af?vkXX6Wjz+;4UP|1dO1-A$dsYj+w2?T=u)0g
zn(b at kMf0|tOQLicRG at gX0zkM~*BMIeELsT<d*17s at a&6Hl7GK7&MwbDnBPADBX7T)
zeX9?~^oxyh--U^MG={;NW|b-L1Z%AFhSsX<q#s~_r;{(s?0ajtyz#>XWP5oE0OjfP
z$12sd^YP*Vh;-ejPxZk$?UV at -c=hRTJ*QO8PWQ2^Rdt}iOwr}p_koSU0mFF}OQw}U
zGmKMs=C&vdlYi*qbdhhqTb`!)Cnxx|r6oOyi~gy=|KbG=Lj6euPOI_3L2Q37E=h{u
z5fX~>|H1C(RgnP>HhA4f&xHa+Q}$}j+U<{>;y+zYAVcT0`y_{dQM at n(a$q&F*|R+E
z!KCknur~i|KWH|y=3Ox`{e3EffF1TzQNdC0x38j5fqyw++W%xa#f9;|+|ODco7m=&
z&x0gN!f(QnQf>SECQ=)D+)p)9Dw0);Dc*d+c%PduQ}dJLPun6xNT^){u{40Y8V8Oo
z56o|l#ZWU8_gaswD|i6Nqg5hd0q%4zPZ|mL4>^~`<6}Xj%AUO>_}(;Nq-0y-1 at WgZ
z6oI_^>wnzm*o;8J1sv(H6VMQ|HiWkH7gvN`r;jTQU_LnCQh%yDotF0u%ZQjbP_KYa
z>up2h2wX<MQ&xdNf5>Y~VWrDd%3P*CH{EsCNd(hF&CE3eE0N!L_m!tY0<6XO+WH_t
z0ezJJXUZ#Kw74d<fsCHDEZhqj&2d*gO|)&wH-C~RHYu3?Y(7{Tm7(O#lp*_QLCA3G
z4(NS-KH)5&tj8${9uJ5TC(4dU6UYSM^USAs@&TYI`}kEMi~_?RT+bXJ=dSvN&#eB$
ze~aRj^A4dVD at a4%5Xci(KV&?#qgcE~U_?XLrhLv#z$WNeqGC8J^w`I`Km0?_g>&jN
zQGd{hwlBw}DXZ>}%j6_Ldbzo=t~=`D7GXa;l&M{%hJQ=jJviAap0)}mHSAfilD;|=
z0Y;ekVTLCLY`(VVi&0m>K-;Oaq%=(00#bvkY46D??KOQ50GmCdL?ek<KK+FTGY~(z
zPC)Z<VKYZpEG5E;J-U?BFTJ5l{<3>O*MA#L(?YwEFB-BzPmda_Moa~8yRm22jQOe$
zTmil&=rCy-Qt8(fLgOj<bJD3aW@)I^i`LBeXZ=IjEY8(-iMhsiV+7ju4H#la*xj?G
za$My6qCZX^r9qv9LEFD>knnyju=7M%$xUR^p(ZcPSl^M?R6+Yd*9yb+8PLB2Q-6Xn
zZ~Nzox|uF&$mPFA{}*@~57h8`%ECmSj0)Yw at mdAJQl7@lzL<WmAYsoHtJ8Z$l$uSn
zE}{&Q&$5w1E*r5(veaWY(lR+M#aF7zg$gtel#Zs`VJSB{Q1GaWeutA_&LQ_MWrd2g
zg=o~cN}GuM?j!dZ6?JNw!6rQ4{eO!Vs$i%%<<r*b<_Q7DnSb_^0KNfzck(7--iAf@
z9%!a6W%XRp$_ki7rG~jz2RlU4TuZhpauUpKx at 8C!5A4p0zQV1QPseDX`y9^p1-QQr
zwXj4WdV^l(@tIutP-1xvD-zrvxc~pi`k-sg#_Yl+U!!RVp)&Yp;Yj*@H-APMlR;@<
zOR9tqNJw3OboO;j%Pkb-np)ihXcKM#(zgUlBSKjrrR2msm+&Z>f?QdY0p1lEa77Ds
zI}t%sx?YF|2!8me2K5dV$o%D<ph`7VbhSQ#iRjB+t?f|T at Bt&$G-zAmnpy2a7O76Z
zL5Qto1okfP9`t4%q!~|yV1HN<lYC%^nMtkz%UIcg^@~{P-{6}l&il-ap|hu+Dz5y>
zeCmCYLN^dw)j^W=(_cll#GRh`gdqCD!dxQp^7q|b8}uL=X>JZYWlL$%4tjw?qpWUv
zD-Ig(eN=1VF at 7q{s>GEO16MbKJ at 7#nCGk)abQ`3lHz83kLFR>8Zhu)PoMU<N))>w2
z!gD^5nO<gHEkJ@)(>Hmogdc{DDGAcc6x7<!oPGNyyqvR~kYPjF%p`Xo5<mn-_%lMs
zkEdeD5*%J#4ZdZ^S}Y9CFc_7_p2=FNDKkM<7q~@3#Z7u<bclURy!;SSfMxWjN{NTD
zc8<Ql1u}_FeLX=83V)I;WsY%}fE-2i$ef~_dk>A<VcgRTw{FH#BYj4k72j>R=i%z;
zO({rIP~FkTZjCMCi#VuxoMCf;plV!8BxKBFqd7`J+PdS>Zp1qnzBRAy`8Qc^g;#|t
zMCEQ(x at rkH;MWB+i>zAL38JhVL$EDt`Bu at 11?Q&<<W~AgzJKXFXDj-5cR2PTTMNC}
zbR9N={6E7A!UPh5TSpVL>>&@dGWzX!vlqwZr-LgR2~qp at Ev^6uK={9{T at 9HECS)Lo
zloL1h7(Q3CfYZ48fLhlpVx(quE_70{fgBgrWik}z6<mp;r+z%o)MaD__9yf}rYfi}
zH#*Q>#X<$e#y}{&Xn=pSDm%E28I#ajpG}>J(rB^Wq4o%G0t$0g)u^jMP#>x_(FOhm
z8;GNIlkR-Z at Gmi$GmrEC(u`7Td-bOEJ?v`|Or6jjI8F?&#@l#ILF{eF{_~(sgTMiA
zKc5+*S!jG>ioTNzPi771cs^!6nt{WtG6o$HsUS+rW at zGizej&n6vBtO?S7SyduqsH
zm(q&1%sNnPR`sxq<h)QI^VxRIIJA#~1&b#C5{X9mI3sox&tP=G at VLd<NW3$+Ka(%K
znyR`s<iFCyIQJ5DEK9dPXzEPJEG^?@f3+~zJ|4iNxqNXBL)#jDjU;|?Urd2JtF$Wt
zeXAe05Ya)ri>!Y`{$wTe=9HQ0Ty+{{9#h1(3gRfAY%Hs*F>oucY)?WC+-G-4MB<MA
zEE?Q4O1l-tB~gb9_X!FZKQ(~ItGdlD#qP&JS+L~#C%QZRZWw`V at cXJ8wDG5n7U9Uk
z8tuqm2EM>bjwiW;9B)#i4gP&sC<zoe?3VgPT~m?oIHG at LflGEmzV-&Gg)Z1`o$UBP
z9))!_%m@{6Z+P^6?A+OBQqPUzQVPO&<F9{1KWJ+gb*Hx3ysYjUD#vhN5Eyi8R6m9F
zS+_fCix|Z&oVy~u!A$~l?@quY=)AtopLa(X?ikcBYttER$Ck5=`YOpI!niK+YBi=P
zP!9XB&s2YK2&H>*CU}alqGu#J(@m;tSnzfL4xC)fK^UY+JWcDewIoc>MF0>iU(lIu
zBEqNWn;TjHEn~k~exm&@!j2pJZ!972we(>}9oUt3dqHQx0T|OS`{}G_J7$!L-uwGd
z*8Ejdqwn(Kn~!hZKpXUA2vl7b7Ak<nwN`J<X;pvDn7TG4j-9_@&_p4qqj|OcXFD|%
z0K;(3(e&uA)i)+|wq977PU;rZyqB-Mc1jEHcGexq5i(UEUOa*A2-xdg9JH1dI3-3*
z<Q2p=2-S3>-W#lq0%s#XA<$7i-i&c=qM0l#>9BlK>Xtt5bxes?(s8ejR9Qe_JdKlY
zx}JYSc2RsZu5BU!wxtV)q2*U0#KdyY>p|wf#Td66F9yOr@=>H-B~2LdXkpgs;7h;E
zK+w8|pi&?Ot9u3+H)tD_qg-h+1(or&Vu+k$<sr57js(f=v=IIWlkX?q`~5*|7h}N%
z>CT_HA10>SZ)g8#iM~}uWPnRazk7};qK1EsnonH79C#Fq7#wD`riMyH8r?UT4GPF*
zi{;MT`bz?!(N!Vz$2&Gb&JZ7qX-+CK<nNd*O6BFf`gG?)RZPX=yI>e>*AxQ64NqzH
zI2Q>LmXcV00`utq8gsxxh9yN<?4>ZnZG|!up>(X8t5`48w at Ty8onha-G(4b5=yQM1
zclNl_#t~K(kF)=a>S07t4WuatKs0Lc(0x-wY at I9=M0h5w;|3GH<C=-Sg4Fl|{X<zn
z87>14v6ZDJ6;4|LQtCe6vn7qnmx~BWp1f&9<@4^f4(xwIvXpVVKyJjk8j#h at SEWK&
zZ0L87mfxn9%iR3Hjqf&2p|skLAmM)$>1@(dSe8q4@`Ty-P|Mc~-$j{;laUrq%*J4d
z#JTn#-e&egw706=ce+gh4Q$P=1v+7PA<On$cM<-9RnMt=h;(q-ucn&{;#m978~<1g
z0ao$9(MGe?7xwYMRc3Md{4HslGahnE5&CU4>E3&48UUe?fHVr=#rKd<)S-W9I!boj
zb?>cdxpzzrCi*!^zJ@^rY+hB`_VmQ at Db7HVp?R+ at 0~{B1@*C0kGCPppNRHu@{YsNc
zYUOuYj1&x at D1g!b2-szLX(HY)thQND)@(IVqCeGPhvq$pHFJ+R5(B}X_-+<upe3XP
zDjuy}-|YiLMPoE0H+s%bG#h_R+!1EMexKc5naN{BWO?m0y4>Y!ZEu-`d=GtRfuMP)
zYNyb}RkWjCkv3y{S6l^3YV at r;&V5>rUns-;Z(K#kp&oVxvp>g87bcKj#cYxXQm%zC
z<7-vx-u($vYUbK&Z+5b_HsM at XLnYz`p3Z?#1w_BFH!ReYx_5xe=L>)P`BK5}W9M_7
zl;i%dws-!_#=7lVatYK8=KyUbj(h6wF at C=B%BQGTFH6l&T98OmoJ&WUF6M-fs=jYH
z?A;HKLb2u|%>|zQNFg4<RL(=Uf2V5G-FBUHi`l*DOq4!W8Hfb_e_n=-t<-Orez7E;
zG*3%^gZav#(y|nK+}3}cik~^A!>DOgJXM?wmDiNcZCa1?IT<Pad#8whvu1&oNesxZ
zsWw#pR&~h|?k3mJUsJvjC~x=L$9F`tBui`W?C)#Q*gQ6bgUrfq#`rx#ZAug2qnN`N
z8~xP0b^=rdbHp?-qM~!H=`i;V3ETIsjJj03VKm3E;XB+;ZTEjrcU=0dpgzJS=E$Ij
z at 6s{t`#mW+!24u#+<Gd7B>DQa7i0Y5Jj=~IaIRnJrF)NK{|KhhTf<;OVRa~<e2CVK
znp!-b`oG}q<15hfjeZK}fozUZ-6YlVNE#pGZKdIVkilc^i$J;)n6<1LYIjU0+-lVf
zR5u`HHKEl0lcj$we|U1=;=Vza9(OD$gM;PSVRvy^8QnFK$N*UQ1)mrCGGk=Zx5k?`
z*{*<=R2klmk$yVUL3|h5ckRX8m^-05b{b!lN|GHe2p9xaC=<Ru(s+(ShxA}W(r{M^
zV0v;WeF-m0^qP*M+~=eeW|sIw9?>@hS}!ug>}SRHVFG`Y*CDxfgoP@&omY&a3;N3D
zfeau4Q0AC5xWgjolEx4sVf3w^W+BTkjWbEx@<XRD*@VIg5LF!0pyyL6ukG%=u0|h+
zZqsLD&;bP<$~)Qm5s4LRQ#|ZOYAn~=kvro**BX6K7|bBf!C(nFJ+R^mXx(RvlBow(
zK0-0Z>9K#X-t+!Ozx36KeB+JmQn+3`VNC73mFXoVSRUoi3y}F#n{=aO{Oh9iwHaj@
zGLkDrpsCMV%@7%lliB?i?%0UrDH%5Zhb`y`Ik(-_;v$JZsGn;%bFbH1;2Jfioej<C
z{9EX9xtE*BEB$*erU}5%RLv}E_LDJ+kTZwO>~nunK0Hm73 at xUwT>-tU- at wxV0&4%t
z3`()e{>2#RnmQtBe0b`_UhEhr_$8XtJ+zpEz~*QDYN+e&?i=cgVQ>34)ad8_&iSv5
z6(!M0c2eZaJs^N?5QD_>1NfLmmVz%>JJFOdZ*++_qRM_9V+>wjUVxRQiywbGR-$OP
z{EC0}vmfIM0Y<!7R`~8y*}Sj<MzDOXX`5~@V}p<J_WYy#dCp4eP65q+t-moUe3W13
zlb2EJ$3ijU-$e5Ca)RwV63;o1hmlY$leo={;~_ChWu(C7;p_0i)f-f~aHIo$dpIzW
z7 at 7tOK&EuB`XteX{27De?STX337S)ee13nEmQYc4BbGEAy_A#Y(#D=US3NLxD|H=j
zxG}sE@**lhF>x;2-K(LWG6rJ#lr~<;ydfP#YJNbD5QFpGzj3IrY%{o(fu2-{nIi{w
z_n0VSyt3f{C&i`~G^gWJ#OL<f>7sD^aJCDF9giX(r3StiA16|zL>&L&>D#SY4q<;0
zKhOM&rmhv94mCO1Mw5|YRI??gBy4D at z_1>TiQd*Gy%lK~v`qM+sepOfmK9YI4Vye8
zB+376o;X*ki0 at 4I>?RUeBf*K-{9C?xz*kE6)HqgfK5)X$^U>WxF5=D=3Zgy`0IEg{
zm$+4s9tr#jBA#1 at O4K*<l{XOeKbn7Sl at 9zT*{Q~c`*<uEYv$Do?kD3BxypP|nrQFe
z&XY%g^f|5;^st5Y=k7&6!OdOm-UZu0J8;&Bu7LWH at Ah+Nj^SC+%}*-iG!#k3+sB^>
z4vOx*mks5V!(y_`ol%cx=KV=B_<+f*6Ljq=SW|)5PvB09rTie(FGJ-ZuEu{D;FL&j
zK)F{d??At1!j9fp-E#2KdfT at erB__nMwAaO?||E{26u}47IL$D9Z$a-21pD7kcvm~
zj^QZ8*5b95;FL7hkzOxX6GFO at 80q2%KcpOn&|0bE#k38rIu9~S{F=vE)<&3DE6Gs!
z$y-$5BOkpsMRHRH;7~5Y3Os++uHrunK98|5O-+K-!N9fGxNXqVtE#0gqWfFlP+Fla
z{CvX-p+X at 9TVP%<VfzhR6pUC<JbZ3MK{wVAQR4OvV$n5E(Mt)Qaja+vP&6%)WZJ{1
z%4m8FL3Bctun{zL3zooaNG<^a>Zpb++G+$H1LE7 at Y#xu$5Y1H_AEkfD7|SYU_%3H*
zp|ljWu<;$X8!5)_|CnF0N?a7Bg!n?$g!W9?pndkMdsYOyOv`M~OdRRGTb045uEniV
zVA;_~_bJ@;<3)@P8Um1i<i_dMtrOcbxNq{rR-FJB#7^4?-iVs*W=i)sb-c(gj-bde
zRWU&K)9aTbf5p{@8mxbE0Bo?Ys+4EIoM|GA=A%LVqwCt-%_x(ZZHS_H{9-8s1UsqM
za{E>YmpB(2ls}f$&`6SL{tdJUKMci-iMFbAW(T;%Wh5S41f*-0uF)eWb`N?QNNbfb
z14e- at b!T73FevB^v-=+2@#Xfo;a=_`R;}mv>24?mrZF;}a0h=?-{a&FpgqApP6y$2
zsk~9wth at Ey^3%XvWlb7JlKqebNZ}P9_ttg(>F<QEp*MaSfpO3e2wX0J2wI`0yaUc3
zj<295Kp2M#4{tW=q<x-;dOp1d)=9SSjio30UxFw$%dxT`9g(%%I3!N*Gus2Z8KRwt
zBECF)77C!&2GxIQuf0FyTHbX2?Em(z7*M-hEGz5ok3RQj0q2!ug0ae;+D=qLn8XXx
z`|V*#?@%rv0)`+c?$m*_^Jp%hz1DgG%N3aE=X321?bi at F#+TK4tF#W4)fHMUNES(p
zw%erSq`8XwjA(Hvlv9sEJ3<mzH6&Lv?$)=n?<yJZ4S0WAme#D63y_|B1u&VkET}XK
zuRL;OXQeC103#9d@{n>qVD)uqn3x?ZS|S+bjx7P)#`3a^tc_Ad#L?d-v5JjoNCy=X
z;c{rub2RjcupGsHQh>;s{=f~S<1d^_rS<+n@$ViH4wK6HHF&qh7)NR)@zr<${%39)
zthZn at tpb1UQ^WdIi9awx{l1(_EwR}Xl at eh7sHLp^D-uC1lEmm&)vdSH^}S`w4lP_+
zD!$Qx6+jIU`~wix|9c7 at Pdtc|y1lSCvl#k)(m?#^>_U|ykMwLrhok3uGsM(am%i#Z
z@$gO4vIktEG<Z~4n3wHV9V1)LZpTI*&zg{V?74rcH|O6dzIS(B6%2-ra%Uf6Jk>a6
z+5H^@AHq-V0H3fQ42<@{t%kuwCK!H~%hzW8&@$DGj=VLnmE;y7fjp45{9+BDv<S}d
zU_JJ!==fU^QoXOF0P95D3X$f#hMM>a+nSN+TmB&i^sgfsqySF8=F7xe(+V2g4ohw4
zg86?LK#xlY1$hj^zkbS(7Lj{6S=7Q>&hvl<gC5|~?Xe at vEl*^|^k`Ua7PYkV#BUfd
zp1)|31_{_W($3d+H}Th;%(Jhei0TBD1ZsR<VmtE0&k5poJE${|hI1w*fOY`O!9KaU
zRG#m7i8K0liOhh^^+ZY6+UFN2G(P#r|K5MzF at 2x{Fzu(E@)7kq{L~5P7NM!DCT)5L
zL)Z$>&A>kCW3ePejp*#CV96|+87y{yS1T>@RN&EM;+S*w`SYQ_YY|KwCz7L#TP at zP
zVrW<Hye06z&PAi3LQ!B6?5{Z$KX2P7%`1 at n)kfWA3sE1r{(t79Mn-1P^m+I$fy{s0
zbxu<T1Y2po%I at CilN?OmA4-QMmWX(CyNAmD7%Y>V)R#-9hNNx00l$KKsj@`Ta_>VL
z(iVz_GQmmD9?tA94!+PqKn1cLFZsp%{Q)7HRx<hxEi&?_;+A{uRCA<h{C}F5)4Ogf
zzduV<k7U at z$dRt7Ma8cJI3=Cbyi0#HOT0e6M529Yv&+y@@Ne1A^V$Jw`gUnCMC7Ye
zy+h+Zv+u0`{S8jk-^_Y*)2F^SJcLeYV|tOSWq93_<E}O00S)kt`r?SrHAE7jYpeDY
zZIVfT>6wa52Bgh at 7UUXm1t|K0VfVb|TzJ1G9D3Kz+owVAoU)xaqpM1rK4^b+)$(vK
zu)Z?DlOSE>p(s%YFrh{A(xxes#M}4rF3liPh{;tG4K#UXEPhd2gm~8k*B#PP{G17k
z6veM-5;5C2z#Su at 43@3XW)8=w5z5&7jr?t^{7<q89SWbSzQWyWx1GT3?W@%FyKtA^
zhNbt7@}3p|cODU_Y%Pcgl&^n5Bmza8lzOa~pLeE%n<<!*oDIIFoo7mVw<XyK*9T;-
zgDCI$u}Pg%@Yc8^sc_IL#segu_mIVkBfP|h8?5?-&}0p3u-E872Uo2f;{qv=V?zx<
zH0OrNy1YjyhmG}<mIOrrci- at LoThZ^xj<jH#^q7|WV(lCw1r%gYp{QX&$%C}^lb#F
zyUIe}=2E at 1@AG4GNyk^eBZq%+V~#`E0X>QvRG%7?pc6XR1EkmZ=qscJU=M+xDP*%$
z2~ntxx|hyBZY%O(a6u;Y^NRS!15=mprexQwktGouBhjA>3P4SnXNq9hbmTHW6z3G3
zXev7ivs2<c$Lk at SCDMNYQCi4!`~ktdM1eyhV20H8lF>K__Os&{RNb}Q`lTBaZ~+n`
zlXwj(&7Q&{+0DtkyGNS?E(Li*R9%t2wz)_$I_nI$zbzkk41SjSkJgAh1NeJ+y$%(^
z$#~_MDaa8 at m%6}>!O{k1IL1RmG&}a(Y+tUc*;WNi(GftE$M1iV?tzcvi;5uwuhm=z
zF at AM;ToX~sBRh1eOxLOJv_X|4cDg4%Hc~Zy4klh_`hiMj?uZTOc9HE@&2Xo-WOlL#
zHd52)y@*fMcG{;scO-1<q3kRiBor8r^@6G_^Ir6*`F7u0+57z=hJV?A6~;L0Hdaa)
zvTVBU0oq7KMs9x}Mad`(- at 0#fH}mxZ;0aOGxob?s?6^-nNqORYaexBGl+NhHh|JXx
zT82=T(|CwaTrIJblhZ&0^T8NbN8im?rR;y5<9pluDI((Y;8y{pdQuWIS)_%>^@E?y
zlaRn-0J>Dl28qM^_Iv_eS=dOt{$%>pb#foEBIJo5xAlLY*$ryQ(BS7ghwZs*H*HY*
zYNjRFsyH$wZhxj<>sCYM^DlL2I}{pS5FQ32_trEh)Yu)~CRl>VQ3k9``ZOt(xwp(Z
zsXjJ>ai2x*EB!7Dd|R9-FP*Vp3fBHo61qL^Jd!oZRnJeTEZ+8q!m9cBdk&{0utt*T
zA33rffi-_`i0EuTpK)TbiJF1y&TwTH03R<^?d%bZ>!{GlDxGUE>?NG){S-={Wsw04
zqEc8B36Gm8Ov)M%tUXTyxm-2kO!}#9s0;7%Bmz(%HR}CD*$8x at tX=%wMe8|6pHOYg
zWGG{&=_5g_t39k2q-kE{;x#cTZzA}kvyit%r2l_16jh(8visn8&K4q~mGzccvNxU?
zvCTzCXW4*Zpq)k at XXCzbj<U%?6x>ud<1vlE5c?@kzxR-wk2aI9)c3SfFtYRwsFV#h
zYMbJ`T<-Gljs+9}2$oLR56;~dMuU*MuT>at%9<p2G}AHVgJR9&#IhYM*1jDJD*6zW
zO<{kX1hvElNOeu_GACYLZ<Il~q#2VbMj*CZ{12uiZ7c*NrpmnSY*&brB%4vm)WxlS
zKgEVeuhr+iFfe`kIoXFTE^g)0(-U=A14I6`vA9!7H>F%;o#5}^TWI!Rse5QAHXPI9
zCZLwE;_0Y1B4y9_b=ZwD29zPs0+&5)=DdGpICer+WlPq}OFQaoWfzH0*u}WDr;<ne
zT1+4p34Tp|TnV6K#)PRmeq*H)U_roik$nv&ssYYQT|0>g`ua5)L!Ud4Rn4#6FW&|3
zt`pX)94o8TjsG;G_;W2SS!o|gB(|iJuIhq;4!UY*rKFh at r){b%<Nx$z0*DKKL!5tb
zA8{v~7VUf%s!!$?3tYJIIz&*XK~MxVIZLHBQ>GMBLI`&iT!N)m503u}#{Y-yNU)*#
z9mx(gYrC}u<rMS0ieT=Pg$>HoAo!oz>%7j(4btXN8GVCocT?vxT~=L at VB^)J;16{r
z)h<CAxsUwe2EI6KribJINqceq8b^NxJA>{Gr%(y`Am4O*tG?oLFnm`GKvm1^i}rM@
zOoejIs_RvGJlCyTS&a-`%TWhlbzB4Q_+hI$i113PB>8G6;#vzmW?Vj{uN~hD2<~@E
zu3SuKb#_NPD2g?$2h-g{^i}{)?FMHp<?e*1<{FgLrSQ6e^c at _ovkNyJIU|3$`bum+
z5?|Zf!DBT#TnwlypqJXLg~5<lMM^;QL$Tb`M^_|iIEdW<ryyK-T2?{h*Q3SOxR-Ja
zJMKrL)sy6op|~PDo#qI$(o^K<QkMps^jY+UT{<k04L)n{p=#s5afdn)AfqBcD(ei@
zO-lls=wXFNCJp?7TTdXNrBQ#pcgWl}53$7g>t4Z2B`%Qm8L=wu#<9nnD>k&m8FsH?
zbU6=>ozE6{sIh-_tS}OIb(6S||J1fgO+xBskJG{ee$~Syu}AZE0bv*B?ZoWKWxNxP
zU)T{OW^3gfb~J<Jk~r?pP>0Ejj3tRdh`c!AmJM>p5zeHtJdz0Pml=N(_>>QSPNz+_
zjpILiJ+=x9^X~L))_v5rLt+^y-P-n#k{nO_nbhx;eft`Eqy6hkHC*o`QbMup+O`*F
zaW{i&n&Z8cQml3!;N4dl_`oQelQRwmLkK_Y-hV{Pce=SX6ZS4gtOz_j)IwaEX_0H$
zkv5$3E`nsbT4FbuUl)H1cgrDzZfIX%ifn&U0!FzRABRN-GqxzpzgaZ+uaxI?>19eZ
z2zY(IUa}JOoBG-HwueX9b>Eew#fBL<(1b72T$uS)HEPs)zN at iS3j~eYnu?HrZw*h`
zFMFP&mS%eS0y#Pw3+Igo9=-ekrDXl|w8Zluc2~n;9jgbrbcBEIKZk*DrEM7oL>z6!
zJVFDl6M&v(+2Em<<uv_-r{o=A-hJfas}nUOYdF4(7rYLKruW1(1mogn()NJP<SmvT
zbU|vrZ<s at UaLoIQT%C)3S2Il_9LRx?LJ!?IU9nWi^FK!r at ev$ZSZLtYD95j}`}C9U
zGSdUsDf$HvnUsIzoPpxg?J^-v6*B}^0qaq0!+!vUKa?T>p0?h|AR=>sI#Gv`8s{jJ
zFe)hbkKVn1o;&etd!aD=^F{f<my#{CCA+8By)snM+oK!OvXI>oE^r&my!ZrhZ7|mQ
zJZoW0ls_bHs8mDw!QX14ud!}+r!o2+)TU{yY@~3#am0U6hGzg6uI1&D6{|(ZPNQ+Y
zK>6@?w=h%%?e at Cq;{6?f-Nq~|a$A8p?XrVmTIss57JlCjUDO`mLf-0|2Fes?y=Krn
z@##`dd4xD}0 at WgRA9i$7Wn4NKmC6|~LS=~81nLpI!<D=j{}BQl%lXcWXA!>Wx$N(x
zCf9nclB<8>&D`2Pp9nG1mRZ+hX!oBTktIsCCNmlZz~rLTM&~`0q>A@%LXJEM;!0z}
z4QU?7 at o0alK9_jZ3|a at sGXDi~hs;!&pw=(u;Ag5YI-Sl2gjsg08q^`Hcdc3gwcg!R
zNFm^QSwR2TT><x$Q^fXOg+X0S5kSl9r{4DXvo3$aBYZ0u_byf(=}XnT#z)1Xci3Zg
zh2 at NtC&gMFyql#~Yk{N+fx_bwtRXM%2}-Xcg}g|G>$nNf-0xc4O<K5d{cRiOz+Rr!
zyMePDT|&XkXHDc5fS4ou#mlJJt}Gp;X`*XH^bj_TS5rU9?hfn*MJ1j|6rU2e?h2xj
z$;^K&ig7Y2zv<5Qz~%SQ!1&;BeX-O+6`^pQs~~R^)I;(ppzz&MS+ at qG`G-R^!_w%?
zWek9PwZ0-%WXC&faNxQg`{E(CZe%1JUY6#W_awsaDpwQJZJm~fD3}95`LgI3>g7<`
zmf-lq$ite3x2<)^#&7A52bM_Q^Afk%!D4 at WcUp(rmaW4%xLVOpDQL`xu#+EW%uxB2
z*gLgX4J1;5mal#xR at x)!dmMm#Uk6r%ggOGM(|_??Ku0ju9r0sf5TXR~3T%a{WxAlE
zeuy7IUvlxwHnX(pd~T`hvQ+l40DB%^X1wJ*jQEGrQpAJ|vOT_fP23RtM~e*-0nUG-
zqK!VRd-U$+mx(4g(;l$MM^x9VT4t{(P_J_{NbghHunExu8A~C+&Celhbf=1~Sp7M#
z4c-14w{G%m9GFo&_7c9`k(s72+W;_=L;8V%UBCm>lu|li{#Q+`A%l8Ei}w_E6kcBE
zR-OE*T}*4+(hRVTJ(s?vVR9XWxUhe-CAlg5bDQU(od*mB#%%GsuulO%`lC8VY|T+Q
zD!iK0vt4R|xZ{5s?bG%mR4AsIzTkU>4H|(`aS+%l$1w#%?X}7N(q?rsG;$zUooiji
z2bO~_J_J*Ufuy0I2;8uOvvR{99-i07DRG##4>6%anDCl+(>`fW_t%s%gXw?mU1PJ%
zYbAmpHI(3adzu^SX>Ic35H{u7xAZ~Yr~CHdG!49UhvklqigEhR=}Z*8C#=Tcz^4=Y
z>I7!9F>_-1?A$`a%LWl#+e(XiSz?4iF1|SK780>s9MK#RjPkPX>``ALe+pLLyr?X3
zV=X6lM)aUFSqT(KtHI90t%QG?)Z1Q>wJ4Z)QPt962A5s<>IL(6gam!c!+JcSEX&^2
z^;$sKiI|vv?IHfnOU)d-=v|-cf-(_Hsac<)#oq4`R#%FeTMn+(O1cY7j`Z+Gus4E`
z8ZnC{oXyd%n%CXU|Jo32rAtyI&#?r47H?ly*3q;v&!nwjjFfrSWLAGRB8r*566t#x
zs~{qvt?YV(Qstg8m?7Z19-joVzytQx1$*;MO~a<M3Jo#SZ8cPDn6|0qW30{ybf~u|
zd4%3ly2r8#zJl^VP7luMBLu8pb(ghqK7nYL2fHaqxik9`5#3dRd)XYGOoZ1dcy^)w
z)Os#B3Z~IlKj3f5PbPnzq~KM=G0Kj<uI4OvGjDbb3CKxT5qHc<hMptw&CXk9J&ajR
z0gO^6=pO%nM0;~QcoJBv8!bB#G%eA;$eyhRjZWx(w&Ks0AicN8w)vh3Gw^``-Jeyx
zeCnViO~gFcrutTz>$svtpr+w;8xkH*`&BN2uQg)Onc*PfqdI at SBPh&4 at sPPD_`5y^
z=JOtQQ4S{teTHe&%QUA|{V(;SI;XFGpwlAdq5t1Hq~nahwUAHpcQ&=6kS?hCIo94w
z-e|Q)_qUfeh}Cia4t9!v0<Iwk%#L!sa%;u(#&7=RCM}&`f|+!U|AwPE-^l+CA(@)P
z#=E-c|N5r&S!{n_HX^WG1Ul-rsQW-yVNAszTf}`zVi=_dE^(+6Cp6 at H&#FQJi!<^M
zN?gt?{iH4D at qlPx?s-qhB_t<K)E<Pfy!rDL`hw*Bl=~+2dfck<oE at ZeMmd?7R0){q
zAF~XYH3qi6C2#T1?}P(FIJ=aYxnhyh)93?{L0-Dp(s_RotTkI#zX^8-S#%}GHu#|)
z-Efqx#j4tLd*jfW`Vp-m26L>lE8cbcHG>q&_cy3A;+x`IS8!r|@|7^fv-E+%`5A`Z
zjpg_y&ayVI at 9+r#+=S{U6~IZXShFSfmDGhgpptgQEc`93;XH^(u}(O`<Qo*vvZ`?*
zWY at j1_bh)VLSLvVECwj{$1{@BRiFp8Jpd=;W4qY(shnPpR&2nZN$T3chmBP#v`8D+
z;Bn#s)lQj)#A*%g$?x^qBAiTyd&J<Ua{n<Hl77dhA-}M+rxYJH8%U>EPc;7=Wo2=j
zGHck=X+F-74=IN!_FXTWpplB~?l|Bva1`m+1H^w20Y=jel4PoVZ{lnjkGYRd<I at 6@
z-$5 at I_yX}<@Lk|3Q;$i{(3wKSo==9*d$-^wFp2l9RhRD at y006R$nc(s at 6O7+@SH~B
zQbqn;f{%I7jy`uWxa{VUR;;y;zdVtNzmCoQ*#ZQD`9`5}WtADr0+O2B+XZgg77ra8
zUk8731it36`sddf$pMPIIJ6(g^bP;sDhkam5<*Xcoud)f7sS{y&<llb^NP2$$T(;@
zi?DkV*4qS6WnGSVHuY~70O3+4+ at z*+`0J^J-cqYd_bTv6HH!Ls5?DeAQwrY5I_rJp
zr+E<wuTKEWGU(hZ at AC|8_{e_Tf%bpw)2e^Z!)W+Kcyz#*_5+-%+mhHm>X70^-^}bu
zEYAEZVQ+I}*jtgq$coq at _oGVUlbn4KayB7n5*jU6k&N(Y)-0yTsdw+}K-4Dfh;<U?
zE7mq`>A at hryW-|bAdPi7h_ne7oVD673Ol^Mx&mQs%^^0Bk2oRs9557i1Jm<>G2nmA
zI{FvQm^hO>^kC*?1VZ|DOB?el^+r%KN|K?s09n?oz6~tZgD`-8>Bj10K60QH1lbES
z{HME1Uh!*Rv!njLQTcoT7bn(he_(VDImU2^N>-%Tz{d2v-gU-LFXV3-U;n^jR|I*@
zr4bsHfSUK-)0Li<Q*Qsz1UA=(UM+u|+SqsxXoEHoP;$`Yi9aE9L%ay*7pX0428rx7
z01yN`KT*A<3NL%E(uqg-LEBv6x+`Y at 2{88Y>C_8i@{O?=1JUlbuY9GQf{94iN^U*I
zjN8&q6{WJ8O-udweNP-2nl@};QiS5q58BOVDb7}=RKgCgX$)VOH4%vEa%z88U5OfN
z4N<1^xWHOL*tGTSqREdGE<T^<xJrd{O`i;07mKUhDT9uixf>=rk&-P{zeI2wnyOp-
zGZN{UiQv!8tA0zITE<$be|L{*pY>}?@1T#`FP$opGeX~b9F}&O)E_+k#fHK5)`7U&
z at VTMW8d7UJCc3Ii_+GS}eye||Mf0L}(C&CdVrAc$;sz_#*J`<e-Ol+9+rc1(-0Vn`
zs@*^*n3>7}PWIi(yvBhXR7YiY7dgx9_J5Ly)wMeZN26Q|+)%ckp<|VXb~4?GfG63g
zUIDnAbI1^l<%gKX6`Xd(+grWmBe5j{7J>;tf=I8&>6#YUdER5n{D6O%n2)>5I3?Ex
z;1-&7UKJf*9pQ9LSGpxIoi<~c7+#+sAA*;{KoJEr9LNnGldu_L+aFxSem=R*WCIIx
zb@;0MJep|T0M(--<o<_`@-D5J+yT$61C at v{m at P}K3o}dsp!fFpigPSX7f`{FRGJIg
zI}*;?fz3kIbhT{K?0|oiGBjQPMy)dmON7tT>|DLtn=Rg%Ji>ViqwRQ*ZsR$MLLwcm
z?}TKc44HbTz-+IdUV}`XBoL$tCi*ALxx*aX5w~>89;qsGbz#Gyz7W|D$PjY?kPi8M
z{=5n0_J&ponRfj-vH)Egud)6h&nf)5itxi736Qg&FF|T8XT5*GI_L#adTD##qs}s(
zt}$TZW~fJ*EOFWk6_LR-A{E-aH~tVyjnxUU!xx~lbM-&m1Nd|yJh2Wlm6M1dz8m_w
zA95<>*())Xo`G+$+&9ia$tG9Z3$x6JBNUx%1L`&MD!sBEJ!5)k2YF2{3I;okB&a7O
zqUSbDI?wNturPmAQAud`=jf^tCAM?fFV;e3#lLb|`J=;u5K26)W1vWlehgOm3};`z
zbcDBp0#x%+ddh7n>%}GB$njXR at C!d*)niF?h?T-*basyENY5;Lok1(ypo8^2b~?>$
zu2TpT{<w)pJ9Qm2o10NXz@!MiYTgY1Y#EaUw+?<LJi&jvYF$U&xu|~k-r>#gcL%1#
z?iopY&=+)M#~R$E8HAuiZeETyG60>OkRh2bAFczVB~au87KYa)@%u6Sbdu0Ik#L!f
zn8bZYSx>q!Ecl#^0+X-TBQJ#()yslHwFWAXa~YC;i&NCX9mAVzg!oWgl*C0h*Lokr
z4nOny%aDH}%(WuJ4 at AJ3-1Ax4--`l!+OPh}hg*M?aU8W*v4q|j#QJOO>{;D-LKe5T
zON4{_-od=$hlVsZ0G^YgTx0Qm8rt(&2a%%ngfG|2gZtAD%S~JX8Z+O;flwhC$K!B{
zr2_mKBSkjKG7aIyT8C;^cVsPxOPmDb6T|*Rk9U9GgP-(!JfmFu%mr%MC)ewlA?4%-
z=r2L at O;%QdmDSj5>0{grWFpR+yTd$a`tx>b!)5zUy_e=RVhr?OK-MCQE>4 at MR6=VI
zUjdz3*6H6i;<wdXektnpB)V=kS|L{3C#navSxGwy=!}utu^DQ_QIIwX%4%xok;Yq@
z>m+~QxvPDaTo&~cuvgLK-hU5V9v#}-VA;_V11cVt9Z$K5aKvV53F}ak7I3=Kycfkw
zqdjmXUs$)A0=7Me1Gp_Zb611|y>I@;mT#i>naOumItWha<D&q#hg4=cp)n*l6u%%8
zeU<i&D}v*(;ica1M}OFf=vUl{W3|UN8K8g1KmskKiPC%2DJyET!~zQjS;D(}UDRm8
z=>hMS62RRaHD(h3Z7u$DDAz;OG<C~sGD4mxoplas%ik&<ANoTA8$Vj9d6f$p!Du<3
zCanyWXshCtf4?;A)1E(7r#vE8uptui at g8Xeof%J<g$}J;Pnv7{Tp=t6Cc}71)A at fV
zaCXL2M)WDr&y4iJPUrV6JV`#$QD7mJ;D`ZA|EDcXxtGb|wDGE~yFa#lP;DowySIs1
z0Z<jn+X&=BcW(zED>Qo9O(e#mvUe}7*3Jxc=>hPtsbs~t55zHtzWSITI6xFl$s7ux
zA=25`SQ14fWzH2Q9k5ugHmSru;N*XN6@{LK4%<abq#hkQMH(cxsZlV-?uP<p)ny=J
zdgX*xK{H}Ep|~gTaF%i at yZVDh1JQl30OdE29+OaiuCVp&@Rp|z1Y}2habl8naF~V5
z1m|*Y&f21`fk8O)HvQK|`E?d%az;<AnCGd+OY<|=$uGEtjsh%sdjsoTCX#<l7mu9$
zA`vVIiLzbrQf6=H1$-tV0J&yxK6^%w4dzYvv?36jCyHAXY6i9ge#^^Yn)%HTBf<it
z_J`6W8}5Ys>e*l+36Oqb)k$UJn58E>yn&J;_=5_>#GQPXQX%PmI2gwC8SXN-@#XTD
z|C%3aLE77e$Ga*Ht!&|sMJ|8O5=H|1BtH5<0EPE#xy<0W*gE;d05E^qIt9OhqkbOJ
zY=_wNqiq5C47Stc*KFgKZu|>JBwP2SgdIbo9~E!A{%{wmfF~e&xOByVmapXiyIEV+
z9u!F(vg)Yx8J?B#(i_DPYU$k4l*&9#0zeKa6%Z)!U)VTS5xSvX=2m}w1XH%i=lDjo
z%#0d2QH)|Jqhuc at H#J;x%pGpXHv)T1$V_ZMpca=#sikXDJZlsBT~$ZIQVTgBu|370
zTaA4S1`RD#^v|S=<SmTr13A2*(M(X|N4qZG16<UjLXy9{XQ~7f1qsyfo`t<Xq>$8X
z^Lq=pTu{C7Bs@`)@ic$AUqy|`w2)}?Ea0y6WvuIZh`fU6033u>2qEa4q?u_PzuIwq
z^DIE+3UqWWq%vV;Ll+Mi^{(Y;2>}bAXh1xqHMg1c=JVU#SdR&q0zj_dilR)~doAcN
z$;LqSzam(1ET;8JU%S%GNy^49e>Q7>UNLa5K at gUx!nzFu(0hLrV;?@)y_Z3Da}aGd
zfj4hziyye-npv=|Gd^?54o0m5)3|8Y$1>4Eym?bco98*8@@OJlc=cJ;s^}P4-a7RR
zH2a56N0b4x3hf at fw4veMVwkcb1I)?5PLS?b0e!SI&+#>Q#rAQE at 93?gCJ;EY)`0{%
zE8bqAtSfqN0>^(alj-`)zYeZOzSg)5vwrXzr1s!Kn16*3mwL#VxF=SHO17oDMbcEz
zj#K86V85RK(EX_anK`Zt!ezU&60d6zevmm9L{U8#SXMs~w#*9?o#B%LHc|s>Q-74<
zzRe5jHzaVINBY;FUrI-i<jgn^U72;Y13K=K{eOux6h(hJj}dDR2qEZ;G(tGgs#))F
z?tbNi6TmFyF!<Z7bAAC#HwN0Ix!=&S>Gm$S886^EyEjz-^QWa<E6%8 at MAa{@Bl4cy
z(w~ij>Wp;A1?Y-dpA~QxyS^eiS7k0N(0t`$uYFnugrLAm1VWWev&(h9UPbq$*#BtI
zD?oxhu3di?=>4JGZn at DZNYagUe(twR_TZNmd1w6dCRNDCMCu?J{F_gB#8XY*n(D*L
z*_@&v9WBt|-9=uGi?{UK&445yKmTy at wG%(a0{cGM+E#BtvdEz#XeTVx)6x!tD!I?Q
zb`&Z#`MpIUNoN?WE@?A6J}IsEnGF9<ux=VHHtK&E<8#;+FM~%aEc~=vxk)ZB6B$D~
zFscAQf61qmrUZ3D%VAXEZC8%52OPobfW76l$;*v;PzgTVGlPp4oV`G3pSCMpwjuhe
zm6ZX|X?2PnfM at ZldL{HZBrnG~F3EKSX<4?K>Owf$KJ`99bo~ZW&(jxSi}Oa|%HZyN
zT(y7Fig?tW4&7GOzqGF8hGyJs_A<fyuzPhQp1BS-r>l7PHm`feK<A%1C)rXru3q at W
zkQH>#RKvfg8C>I&YWV*Ow|Ua+H>^b?F;GN6g&}TXR&wIruI$TGfjozHIa(!eJ9RLy
zBE*a|OXAwNX-}@qK<y+*^*(%kEv8-$Zdrd^8_}8A9rWu7lM=}f5||3>JL%s>E3&||
z@(=@2!j8<PSdp~o;@n43ue-QSFX5sY5&wA^O<N+Dq-Q#z5ymAsCIo!4G;>;taRE74
z^sq#XYEh4F-u1a^^92|uO%Rcv3;4|3Tlp!^<+7LCj|C`V&ANUKg1pDLUW2%{x;}qK
zBnn(jEN0W9Cn?5CGyE(XfcOv`irD3Al3w at BbrPu0+j;}ALM>KMB-BCpJ%YpY&Rx!6
z^!;j|O_sgMbwwgKopB8}3%#c=rOpttgzDhpcf#hVT#onRlEr?f>In9l$e8mX_UZIa
zC3oG&;Dl?%86eY%H5uHqW?~;%nn-^EHVt(Znr1%BKcuRS)<d%#p5)j`-1DME{dIvm
z2Y&={g1}GfNtdvz;j4og$%l}T5e=~Qr|Dl&ly~7Nh>=Piofd`K`WdeugRF*7wrr&r
zMIxu4w=0aTZIC6R&=p|_4xn`rzzV`4u9QUR3snJ<FRpV8l8~~ZJQKa at -{ya_)XyO3
zUKi3+hL%?$JK-ewRa~T*u`FU3wR38$f#<8(Dsbiq&n0S8pDMhHussY4G;IMV<OAJS
z2rc`fB=#()g?uli{GX)F at s-peA%gf#3~QzTFi;rg2@?uTNOD3ohvR_zB#|n&HP at GN
z$h5aw$;8Nw0^3PTV`ehyn}~nB<zvB&@<4}mgdOAW&gF8!OzJ@;4?{kCr0D@$=Rj)T
z93|qE!{8{bjK7?hMR~n241%nJ+vZHK^4x6j!-&{>kyUxSd7-QtTU82wMQvf~rthIM
zHp|Fs`;9JlnW+Ky1#6m2)@Q^-fp-cT76dFtHpb$ynL|JJIDRqJ1RH<&V^|ZRkUR^r
z*h*p-6t?UapZgM_b)!O(f^TMIZunu$my3wC8P$Z<yOP^t+7pI~1f1xII_#(rU73&I
zr>*9g{qF!woq8-kUMRJ5JHW8vVeBchYZ at 3hwr@#je{2cXLQRsEjWyRWnFhj&ihYn?
z3JJLs)}Z7C9<Cd`O0$1?k4GeZm=VdW6s+c19R|!0h9=bM<#`ZH31e;63NoCb`Qu}A
zq20+*u5L6)r6^lR6 at yAFG&5r|gkaqVcFjb&^{2S&wM}hHY3O^kXGVXb at gdANfn*Rs
zv9i`i<p_}u90`A&p$c}ecwp`@exF5qec-3J?f60lUo5t=_SJu9{C;_rK+snzG*v|i
zWzic$28C+<IFYV`Tk8*ERN8B+D4s*W?j3}eq4@|muztRBMFib7xR(p>ZR(*8`8P>B
zf$V0N3{-l1YY~^p!eed`D1|NynP}TFg+9ihyk0g75Jl3_;x0OZ5uPd}kN0Fg&i$Xt
zW>qo^jorn~5Hf$W0|+K&=>Zvs9?zQj))c(`<Lq0u>#WLO<U4+%+Ziy|-fRRte(QY;
zHTCNX?Qhim<i*{t_AgZ(sEfIp05*V9?@vXVgpRN3w}W7;#&_)cTdrpvM-ky{GX}YR
z`y7e87R~xWC at nE8m;1l75ulv9@>|Q6gZ<P`6U5)PZ6bfm@`DImq^XzVJtCNDF5P#(
z7oXT`XmN0s5>Hq67+EiT!tDn?MC%UCmN~qsOQvToB^;juHdAmu1!{7Rg?Y~DUPtjO
z-X<dVt>YM#IS{5?km~$O4$>wa>^401*dHpPfp(O+9-yG<?Yi#sW^xp<H0kD-`kgaU
zK>j at TzgU04RyQ57r9EZNg(0x=$(<=<BAZfhbL_K<cgi63KvmWLXM=sQ;gF$l-r^Lp
zC>*XWAX;QX8V$x!NBK{f;1s26gACs>-jM-M_9UKx2o~0o>FQO{+DL|Gs;4hiYC3)v
z?ecp8Ia8 at Vc=*n%y~m;5i^d*OHFH!1x6G_VDo=m#o6UP1dC-bssN3v01}dylNDlvG
zLUF5vHr2=k32_xBaz9FYwdBkEt4oK<$qun)rQCl_cFTys1`n{W6Y3s<06amMCv8kO
zID^f)?;C$15+nE3j8_}4lxg;e=+1&)bMp^_{hWP$ydf49MYH#v^7Lb&kE!SDk>9pP
z{Q7 at 3@nPyf67peQ`Rwn%Io0k3uS~F*86=7ZP3#yM0@^I`b+XKMC2SP0irmzVfR}I|
z*yOBKJ);Uw<wP1y!1sbk>4LpHNxjoWmr`VU*J5(j&^Qa4B?|NvYwD>pr at GodzP*;d
zHGFJR*WdfOsM>Q|{c*Ga^r+MSJ13ifE~kIoN5beoi+GN9lBVl$<rB};e@$oo*1gLr
zpe-L~KTt_QSsQk}n~LSUaH~|(A!#UlF`rsUJc#-44;jYDu%l-z4cM94m at H%YN at N9Y
zv}*vC)|q3H_GN{mDuX)lFg)FU*Ha{~?{zCwvt*&i7y#(H at B*i1vl at 4b*{{cWdm?}L
zXKriBaJptn{On`Io#$6gTvglXHJoFT<Ty}$7umCCS`9c1KhIHxCV-)KuwoUWxRh^R
z+kv}24VE2MX|(IaI`L?OL0>_laU4^7M%*KS!;(n!)4SZaucECCW7 at 9yM<^E-p*a&}
zoFWM_-I)4BdGIE9C-EXy1p1}%&p&@WB&2B2ZZJMRKgo_1oXDLkfh#f6VN>aQBoq*Q
zpFB`cBW{5b!a&5ApKO>9SPRk~o~*9Ug|64r at gz_aJHh}4$RFDcQEkk6uL;lcopa>g
zUt?E{Kq|y!CH;hpPP6H#TH4Tu)p6$%SvM!gxAAbEKt!cCFh+J7Kh*6rPHTTG0A28<
zJ2yG*wl%n>x7*y*4rQIhlDdRN|C%_M>EisjgNIDH*uYo*4jyUc--}+n!A93he$xJ#
z`}GaO-6YKkqWlfjxWzFnWiU+?nkp&i&ZO#j$$9cTxf`W&<E35Q&DuxwX9Sqlc&89=
zb5U&+wqrJ5fgG^N7T%ktlUINCfA%Q at Cx4ix3eUPH=7mko^K`f!m|}Hm+$po9Od$7l
zA{tLoN{5e7uwv^J9W)ynUWRie%+7 at n6@aV{AVVHRU0_Xk3R6ea<Nb|EvtId{gXel4
zBaH`)SPFEq!DV#g!Oa~IDrXwyVXiCn;-<F!EG0*x3}&VL!UFga&d7g8Dg;P-alFL~
zkaNK7P8U-*o$0nk3=74;h0I6{iLtV$XM70JT}7jl6apE3#o_4UJ7WI%h;0!cw`%e!
zaTJU|%nW0assum6ta(o|<1MpZmZ)4=k at Av!&n|?0h0_7S_RAgq^ZWU7&Da~i6y}?>
zv99K0U*bMexY;cbn;U=5N9K5yYO{o!aARaNp9KBw;qIu6Wei?$;I}mWCH8&rcVF^-
zohw1Hf{pMfMZnVG!dVH3Vqkg`da1CUw&tR}=#i5!CPxZox+)+se<vp<)Z}Q$zPRO5
z0p>M}{Hyb}>C^9(k)sFo at 0JkB5%hkTI1_8ld+s`zHmxTLVqAX*<203M<QP<f-j8Tr
zlzjjwmw7|)UBljd;*JqbSbpzm_oOPBA-1Z<6+Iz+*4ZdrFyeIWriIRd1~n$ZrgmYb
zx*!*|fhi at L|J^8bjhG<Q6~@pAL3B>R0dBakr<!fVdlJy{ANYeli_!0ed=1eCOsK+g
z2AL1GD*MpvVKjeY$7hoVE)vLsIXdA(Cqedq_eDa%&#%E}{40fhjG+R+)2Xwq^7h{i
zTAhb|vNXDB8a9V`Az`9D5ETL}V2+-fLz@|?81&U*_9Q|;ENmzo^cUE>zqA=-a%@dU
zD<i-eWQ<_8ftSA^S)43p9lG^iOq8)lA_Lu`lH`_?%JhFb4xvCaoHNRlHU5l(f9iab
zXjo<PuEAKhvfy_tRb{njJ_?nXKlTEV<a!2P6n3z at 9x4F-AmyWRvLgv(zmE-|Yw=-j
zkAKtxn(I*1)Q75_esvK-plp~{4GJj=oVs6(Fega#^laiO8SS86+(?^kCz%W{-|`hj
zsj0-VIiY{$7JNb*)ccQ+ at VrpK!MO>x@(1V>`7PbSE1YB at e8H{TFI}IyBZ&>7Kn>|m
z`ykfgIs?8DaM&Q~o;WxI+5LjQ`;gC)CD6p=N%2C|7*ooPVOm!uy}VW?hQ75EhEnOW
zy^zUyc}fGbE>Fru*)h^p-dUb-xc9$MP_#`n=2?Ha0oe{AK7$I6Kz#(GXL5S*GsHTs
zMT8Iofp!(%8v|?c2|sleZ?wv%ameP1yA0%|7sVH1yu2>mIQ{oNCvJl4fU<Wxc0M5Z
zNE7Z)%W5|dECbj<SzDt17uAyexbSl}G8eaAQ$$JGdG0g9>pja9=}t8RIhH%;*R(f*
zvO9k{#ufwzlBj6iYvx(xlFta%5d%b?)7$(^oCc}9qjog^t0Qv1+fX{ER|uNjeA*k3
z#r;e?|B4#^qovrQw(r(AbJj2Jjp27cOK89PKjrq_NTK5j7F!*ah4?vSNcss)bD=Eo
zd at dKhvdM0SAJv?lY&S1GfH|`{2)V&;v3!5>0!Dt0k?GEr1UduhDWC^D%q$(;#=?_=
z6|Xg52tVThLe=IUDskY23UJvX=OES7!}eE$g*#~Mw%)1Ck-Q;cqdBxKcW~i7AB@{Z
zeZ)?7?-DZSBTuRvw1~J<vZxBK;4lw+-RhzGnc^YFu at O4MF`^f$_ixoK^M9)cy)u8i
zxpDX^?<QV>d<sL44K2gli^-3F-h_XA`_S1x%Na+vKQkL)!iu2wkHBV7QgZ!Hn6*3O
zqRq9Kb6qhDxng&J?s~rE_ECwefu;x;y-;rlpj-bMBu{iV?FFDdmEiv`bf8q?M?hua
za at p3KY4^xhEW4w=My+~S9|ns49_N2vy)Yaw5H!Mj;`aHD4Am_;6^ZHt+aX<l;wo~b
zrqIz=I7Q|YKJ`xe>-58Kpe6^c<*mLj7f`Wdbf2mrV?+x!6{o7Gdmv7RzJ at On1kFUf
zOGHU*E4>kWkp`rOau{BkJ77%xbj_}p_%=H=Wp-rkJ<%q~4R<_-WW+$FZ at GVdR&_6v
zdRX8lb3c0>X!ArQ2Xy$owK`WHb?T+{jCNy5Mr%)MYVl?oJx%Hyz_~4WPE89U<^($_
zB>DgaK>EKDW1Xe95EmibzlX$e!A+Sk^K_#^uDZFl+QAZTU`lL6tQ;<N$blX(=3MGT
z^8sK*G>tN7{S|AANIp`DreL$f5iCr9bem#nZ`PdrF1nnA%32rOKfQl=9;KTquy35L
zKWsle!N*-Jxp|y~S_-B@*#1ux0CLl(!5VRuSg&uD^ZOT9-FrOIf9l3-YFmA;tfRGd
zD--fzS!j=p?aAdj+ml4(SORLs9?K|d9KoIHxb%j4L2&TYuU~rkw$S|w!3TbSFl(${
zInETO;Za93j*}jx-6RbZLX10?>3i^S34=TRzhvy+#y4r!8<0EznquPnz}zsbcaYlz
zhfaw0WYueK!MBZd-78D^a|?D1f){dLDK_|(#Bia)s;}6cc*uJk;xvSZQ5 at jsX(H~G
zb&J>Uah#Vgoz*45TTFuq7lx#NFK_Gb-+-1b2u8<CCp(WQrFg$L4i)Mv^y*O_(_*2k
zJ-LqS*yhq5u1?l1JE>-0%2;(`GjhM6xoL^+lJi;ssisvO%^<4OV=<0&;}H|my{pd|
z7c95?TAz*@on-h%Dsl#u*4 at u-@CR at Bog7T;-9Nf10Rz`<Nm|OZyf?dlGxffp>n%3K
z+}$_ckI0A4wD-dGDM$uO1@^^3#17{lFw3?5f3~Lp9N_>${+FexJugD8%WF$uHlaG$
z_ at O+Ie7+%B`coNieYffoF>wBD at s`N~SM9Dwi_hDJF$g#Lq~)gb9O at +LiD{C0tJOYf
zBAk*V_zf=B(UUKa2D)Q^>s{Seu%|)X#Z;ass_QF^VD1;X4pU9uIZbUB___dM6G;Zt
zhT7PIx3%IGO=(XqZrvCA1-D at EztEeO_5fhySC?^D<Mc_qQBRU(u5dojX#CiUwh6O_
zfwJF)An+2M&0XC&RG6l&qNdXdyQfS3)WL+KwL*`{=bYSvbIhoJZg%A`dagLHc4eoJ
z{F3v2KAN~|MFfNyNV=O~2VL>s>Q+tMg^qN9fwWeapk?A#e~FU7u1DwX59C{jf`E8_
z5~L}iX%n7<AYpAaxHWo5;TZ`wWGT}0l0%`t{*P`O-nvSE-K1HO57YbUJkZzwd;=7}
zHNc=Ve}+Hcfi|0eAZ;SgZgeEG$_B4 at F|(~@-CQD+(ZWOI0{dxH_F at Y%yY`@NUoNj*
z>x3OAwyjLnYqx~ynYtKXTYU>+TC%pjV727ly$Ob$jT3!WpQ&$S%S*iSdWyUiJ{^91
z#XP&Wr;~q<%5o%YV%}X1hEC~r4hyqwBIN0~5A0U$#BIWVe26JEVTwxg*S84k4J*A<
z+);Uu4a6x5;@K{A0#5$Bi)t>)UI`Q7#t5E5WR;Ja&UNOA*5fz)78lf6Xp0`}6I`>o
zHb7)UtP1Hs`e*XJn8Dw%#6?wOot)qhlT_Sfl}f?*tZF84IEf262|KLBz!1&k-upa6
z<bmqH`25X(W)Vl;?<|-cClHI~nGqv|7I*bCF<k=IHXq8X{^_ at VdF3w-(D4u@^h$XC
zV+vD<adpoD-J*owoo^dTW5>X!Sr_&;KAxQmNZo~!jy(PmVY0sQar6GBt2O|c_s048
zZ;I5gC at -Eat`jb~QDQ9tuP3PJD~HY1G|^!F2z*C>Pn}n#Sy?55^37?j!M|#GY)v20
zSW^#7GJRVQJXAHeUX#WcQQHOIfoeh69Nj^ssQkmrN%4P5bV&{j+0n6;8&1GuJGNK0
zH|0?|KBDL}Mp+L*t&#)cs6544h&)3iczKET)Vjpwg^e{QCjjH2Dnpn>ZR?-f-;*kH
zpE<jKQKN75iVDDS=vb0)C3!==8ObO*SN@|MLMRT*`P2|#c`{R7Rc)ZjqzZG-ReoJ;
zP at YzR_szMHr+?q at g|tbb{jzN%(Y5s(#p)x~|4BWS!k{-bibKyTQI$gBV->xJd|8hL
z?+S85ip^c9w4tn7x;c6P;TeP1bJ+5A`T`k$7;}Dg^Z7XrTgrL|Z_U5^w~t0eSDJ8Y
zHtQHWM%I3vgQIe9*!hxjZ=lj!<RuNh(!%*y9*zez16Rit^7j~wgJeuc1m}tMR|=!P
z%YAyCKM)gep4L8;2mow0v<E&d0&3!*Z{O-jiK2tZQ<1v^EO*L4zd<p%U|X$45ER3I
zpWd|<fql82!f<}Pf{1hiT=lznwo+3xof4 at f1xITZqqy}4ZP&#P`?B`N1Cy~(^$omj
zGPzNkRy<bp(W=6B(&O)omq4R9UOy2t&~{(8yODWKeMA?h^dUd>M+ny(3q_}K$G_t`
z0B!A5r2b9vy`d+~A-WS>8XlS?N7hb%!K*#pt~gCmz6x6#ZL^io5r`J}hJom-JCPuB
z7M7<q+TaAT>xdb_FJXcS#RuCm9^-KWdgHv=U*is3j?!V>OFy0=53AZ+8bZxhuK#Yi
zks7w>p;@p3H^x%}<Ep>8ds=?XF8P>bX!l6pvOWB2RUL*!{Ge`ZLh8~$l?SMQ+R4e8
zu~hnzdWC}aE|`#6P#WMpO$(x5Oy<M|S{Cm4J^|_!!5gBwTGaiqEL)4qD&a49oY*s~
zK2AZlD^_0 at d?Ql9)9;TSHxNlRVuAtWa&13Sk+L9Y;i8F?efF`OZkq&iP=Zh?($Hn&
z!bWLcl?@vjaBEbC2g<&h$w|V0`YdHt9%t8g3BZ<oai`ndl;1>#e`STPOlA{8tO*^g
z0&<K}O3JYm>RkAg9NEvXC?B%BLY}@4V{J3Ut11SGCiAZ*sY~&mHBm~ej;TM#U)`OG
zf4NYi3Y;e`W~g~bf1(&56+`s7N>&6Zx3GV)0I?=?M+RwGQxN3CxP!ufpVq?{dIEUT
zGh<K9REe}t#$|7J3d)cj%TTQIfY8?HU}nbkN}RwMls3S*C*uLsSrgYzipwzH2w3hZ
z#`NUr1T#N%ofX#tnLg17RXAm>afQbf at iW}|r+g%g0ZoX$F9o~iDI@@R8Q;?U)_h|V
zFgeQ62hEdn-TOz9Mf<pa&;*5ryT~UVWDeBp>FpTu?v6`&Wk1{xcj_B8A>F9C>gE<T
zbw#~O(s3ks-s9%_wmR12KzGRN#?wo!wAs_TWHyWI`0h9I#eqqnknX9&86FN1ZM?Ub
z9LuBI0|+=!+{$(C5^<*lz}yYlX1prlqVy#x?x%L<t-n0Q8frCvr==$mJ|qpS5C*^I
z2ZI<moP5Wv)Fp_sB})IHW`X`cCsN{emxu_sh!@lM4aJ>U8Td?El<a;yYJ5>)PoQu1
zzN at 5JUdAiy8xZ?5FLf*8r6{()>An)yzn;puES;k(w--sJ7HX<)RU~FkoT9dXyR(U$
z{_4D_Ce7995v-ekuEF2*^h{|KG`~!}h8PoU- at WJw1keXoVh)0PQS9EyRiM4iE at +$%
za^{rwy3eAn(LbW&03<&~Z%&EId{^&UgL5hcurSP2D~}Z|G%eil5!4HbTUlkYRwK%w
z|BCg at h0}VBH*TV!rLsdnIoG#V92>-)l+~)?0tk+RW)%2;CkcY!?DcetQPygK!M_j6
zQ;2tBMDQ=|J6q;4936hLhuGa{J=23;9?_R&XFlQm_{|&~6CxmBUz?Gf_^%~WczN&i
znR2XQZ-3Z{Ay#^*kRTGF*pXhTPgyW0MNzQm3R@#n$WD;<_Cf)=L at -+EVfarfpXxRU
zl>qE3?I(kOTI3)AD;&{8iT6E4hLFz47-IWj8fTw;v&DKplf=WC!<_!#yPJEwC<CfI
zCCfDpJUoLsn at orpWBc_DB&+(Aq)A%LJDBYMN2~FH^b5JlU$lWfpv at QfW0aF!DZ3Mu
zLt(+~P-Ae6$)4b+8oJ+7iSM?bqwoJ%RM%N^_n*ao06E>+ErLMKUH<yoOfcxM8O{c#
z?OTiW+uHY-sNV6OQnd}bldnPtG{#1$+$d}E!t{VW7Nq08#f>&VzUYDu0&xIgjwDBg
z<(rMuXf at QAxro%&G;M}b-DBQlFb=z2fBtGr3+h~i=6CIQWW0vkvua5tVwKMLaMyTq
za8r7J7!aH^Xl!=|`K(dLb}ubOq<AI4rO$Y)(*lVd at nN&z?zPS_Ae at EEFI4W*gYGS+
z(4BVcRJ~JnZOhYnIm~9PeHGUXC`*4<$W%Z9ZaHXL%&-4zK5+u2IDl#w80sD5x+>Yj
zI}O9)j$C0;A#TOU*d@{m;C5~{=j2X)CE8$rN*eCRsZPF!9rWWr4W!F<*l%Kc5&Bu}
z0Jz35H&TJIqMAd<IlEC!re)qS$IW`c?k9$AR60@*CV3ci;Q2<Lr#f)CwCpjOUog}B
zjvv3CgC<}2-t(;-e9PzXpzzvFzPD2k{x=>TlzSm~u6_BS7(IJ2X~p`79)ozUe12Yk
zLY)Q?#&<z6f>4J4MxmDJ9MH!G!6#J4u<G0mAeZ8`xaCEsZ_9-Vkhr{j(9$_I$6`-D
z6x$Ed`WElC47RaRJ9inon8Dnxbm?EeYvhCn`4QpQ!Iq6Y(YO;jychkelc6!7&KKw!
zIR6EWppM%37<*<>y7lHr`_$%7|L-M#Z<1Ar)L_7?h2db at h&d^5jMpkg04=jp<O$!a
z4`=w`AuKZ at 0Hh^2YbIYVpK&DWW^Db8204sOmr{^G?X5c$W{&l>&7NUZ=!YaXaZ&xZ
zyo+n~80Tf0l;9?_hx^-py#WsnY)*)Ap$W5lH_BPRw$1Aa&82DWLQo|- at 8*|(AXlLq
z^YnWY1t69ZJlq~K;)vj*<oJKT%6JsoG)2Gl3mERZtX*}$`*i%i59WZ!sAX}*kSRF^
z7Dnk8d<TNJZ4lgz2WbT82Rd#eLJ#bwl+<Q0G$@bZ4L?t;_EiO9h`FpPnq8{hDXSin
z<@@WJKt#ApNJ8;*`5uzbZZTqi7 at pzIGb)+<1e72&%!z_T$MefKY90je+55K9FuN4!
z69tv?y!<iLeT(jrx81q2atD*fp_!#ChsT|VyquoyP1-%ve+Nxdl1;?NnzxWgoOvlM
z7$3RDTpn!BwA%ICSpga3c1w6#z1ueVpsQp~kNd4+T~h_l%$uY3HM2B-Wn`(}QDof5
zP7>~=Dtckr#LOl6p!@XA_OM0GB(c`D1<J@?cnq~pn~jq3zBSUa-8#Hd2w*d+9jL=8
zZ>dC}C{7GN6jb~SzR8tG-VdREpCCwYqh&+YeMzu%%c0{S$?x at 1^SZHF3Y<AzDhr<B
z?<Dp1uaz{HnHl#&KFE%LH;yeqT(^-!q at rt)cg_e<TPap~AcP8qAI!2RAbB*Z4YTe(
zCILYDych2|wZKM3`AsX#a#U7WDs;51;>ZgvTn|A5cdApy7nZjzq6TF3)E7csAH8st
zEhWvENfOn1mn_n;htHvX;N;4 at Yky<1t=nI{U|VK02me$26$<cwldkx5VHCT~cp;Vi
zIc`^q^TVD~tHJ*|>#k5*$_A5(c~k~(&muX9 at PRP;-@`MDzTOBAO4=9tDL-b(E}K;K
zADjWxy_W)FAyYw{ZOPv+7R*<as4BWOJ4kd-tk5c;E8)5!UEmT&ScGgp_&bxN2u)%@
zVr;hM$Tciq%OX>MhgaFqE7%?K8s==G^2GoTQZF0_R??)3nQZ54YP&5DNYAZ6`~{Cl
zWxPQy>xq3v`nB^I2QDjsDpJxxY0#Hlxe)59tRE({s%ZTAXTT)F6`r?LF>Sbu=~S=*
zjWyTMsswaYj3O15&kmd!v=3$4)q$Oio0Ra*5(@8tZHTLXOJ5727F4uWVHy&(Z4soH
zS9}B;9tWzWnqQ#S&_vIy<rD7k5;9Dz$x!Y`_}sgb2{?!7PM_+cvNz+Fda~#c9Ue-`
zlzh+9nR?HM0~>OLYB2|!W)UweEj_^OwKUfxJ9=|7G`GU|*Ev2>|7Fe{^dJkm%lb|h
z^+7wNvi(MXK#l2O$KNU+-!nBGJPn>wSDn=gh_}UeQ`7bi_pNTzba5Zaj*Tw1 at -Re0
z>x#cd-V3xdvmG_|StdV|(f3^QJ5r#V%$RbAFF&c_cDCNnCJKZ)-w&5b&=!+GNfnL=
zY6s9!h(Q`^Yk$_V!i42MyJFB0ZIJF^XQ`+M^XsvHx&_BO|368h<Lb^s$&<gvOx_9G
zMRUiZjNcUge$4CRh+$NC=jqOqLAGv6&XX8`_^t2e!O4%yu!)Yn$Nnb*kUkz$Y&CjH
zLHnX-4(tHIUDb=pbG~~9_Kh+??ldcpNz#8 at 0g=i9n&wliMS?S)CYVb04s5I(`Ps-`
zv+B=(O;rg at 6Hj)*eDS8EX|q{O5*u`=N%Nv*5(X5VanvbI{3kfLpn}Eu9bLa5QY2`0
z$2w4_`~e(gl1V<j`?6*DB*+<5F?&O<IPPF?Q$kK!J_KVVCc}6ddX;4 at Hl@P1^+Lhp
zwy?#<3BU~T1gj_|d39AaWKEFOhel!c-Yuhlb7y|J`2%G>Y?CBKbb2kl{dC>5JmdAb
z81Zkk`ZQ8(`4rIo^iv-?1WGZY(efx}GyMSZl6H=YAYwH|)LL1IRX-*U^))x87$t!L
zM?qNm;R!B_b=(|y>|Um+<@>eE6%5yjeFkNqlq#u}Bvl7Dro-uM>!hOUDRD&bK`GpS
zv;o`_RQ^DMAWY&^`==ImVuVbdLE|T;Z at m*2B$7H!T3tR5`&~g%bhdTqI at hi9)73 at t
z7*Z((vnN(H2(7XN-mI64 at q?C-5ORr|-a2?)qHMNWp*X$EpJx)uJ$o9H*FnzNe6>BP
zbi^he<3|)d at _2Qp*ra^RAOp~kM7|h*w#*kG!V#~6 at +(0|_GMC)GU#VQQ8!)fs$v)_
zaD*0LPNstbgbk4qzbE<v9aTA52UWZ0bXx6CP}a}=pi*t)aapmQ>pYDY^EU#MDX|Lu
zE}Y**rtK0l9~PoNH}Wj+8LQYdyQ8IVp8!@Xf6|LcXlnmx*qR5BYL#h=h at wn?jr7oH
zIBRB*^+r#kCiHmmg!2be8Rw6Qe+f<X4TZP|M$3PgeR^3F;I+<5!*;ziA6iplmUB}6
zoYY;(07<nN4*Qr(1)6A6A_ at OexJsOYZxUP^p8W&peTusTFd3-RGU>Tk)vkdSP^sk*
zZj$QjfOWnBTWuxO%{8~(Z-d`|hF}2pAu$!5uRUzz>_H^|$!f2ZoMswF$R$!0!$KS;
zyh(CS?lx28XLZyy>d?1BRD^8N7j^>BGnekQyZ{!AK<+t2FMME%--)VrX8n^MOcxk4
zDoZo at Zt&FTx}|PMdo8Zp%J`%r%Ls)cr_Q3)1y~~SP;AIYG3 at 8CS5{7cr-)Qv|7e6|
zFy at a6@#j3MZ?=i>u>38AY$LAR1qkHP$hjBQE at eUc6Uri1ZKY(v8X?<K;F5ou8-5AJ
zAOg6&CbmjktpTU1Lv!a%&E=#^T~XU&8`#xxAhgJ-!jI*|EgHqL{^GH-QZhX}DYmD<
z5S+?$Rf|D>)4{$dEbWSa*8lKEe at n(FejMk(Kursl!-cODZhaR=H5QCv{6O&tZUQA!
z9a^U3sr>of_AEI~rJ}7kXp9gb3m1XR(nw5~{U4;8O`j*()!lA at kG(p1f%EGB^nzC1
z`a at lVa<1mdzI~O0kC+tUv94cT?moUcgvf^BxWJNRiU~iewuPyGoTP?Bnqj{i!UT7`
zNxg|4$<U at cy`RyHWsCO|QFtg1Ek!(}H16|BE>iFAa6gSwvOM~nxvd`l{Lq$qb+nj&
ziH%B)vHT`%2?5Q7y%J|&H(YQMk*?rdxMIRt5&4!uj>)L2U&Iy==1V|2 at y!2Iu({#<
zn;a_os-hh(0-Aq+F_&m5vD4 at D29}I8N!I%Zjg~@BbW+2kYU%@+p^g&ZV(ljT_w@`~
z2b)<^3kKXx3?Saz!kw?%D??SWWNOr&V((=pV_9yjFsdE1GzlGU_e&A>p^0`Qp61R^
zAxrVh!4d9dH`Y+!gwDG1u=}XNl40r|E?>+iL>y%N^tpV0<+*Q{O~?DbS%N_-1>P`T
zS5*Qs;;vdfL)TEBP#b*1ezUCuw(Fw989?#a>}?@UMS*fe7<^HkQ!a0w^ag|Z=y6+-
zliSz_1Ok#)7v%usdU-wa5*d>n!I~X at wX6(M&(ud7j#~up#(^KKC2Aez^m#a(+(fJb
zej%Ccd`yXdSezlL9Q}9ty{^B1EkB^7P>wLJ=X!*CNac+C=I1;8sBxXj&Z3ni9$?Hu
zL_zBAIZM?OCN426q+{YM`92X69Ovn2^!p*kPZ6GbIEKSKGoJEE$`@Rk_(eijje7Z>
zjqkLy&29pJrvYwNPdvKlCL~v&17*1{*~VjK#1>tD*^ll|#(!tTA{sk&eOzI}kzg6S
zuHm2rhRuxB_h`k@?Y|%$DS&-5i^!pWeU5An6HXwzOE;u=_RMZDY+^LeH66EkKJDOq
zP{MP$SGAHWRI<?S)(nD+=JNmSKfM??OW(9AkP{ykP%I9MpO1ti>YU478SNB%sEsKn
zuv;;I5~Rc5)|P)5CS&Ej69&1A%+Z~-UM&R%&?;&G{;6<vtmju#-3`y<x5f$+eVlT^
zq#xUD2QaHwh=cgmcGkefP{-;sf*VY<)=DG44BuQPFgNzWk%?Gq@}LVKHVI(ZHOlKo
zuH;$plVBFg5!t>%0~iskPx^9ZG1bglSg4YJ_c7`Jh94u?@XZc->Kyqt$}AAU32xVV
zxiVeOo1cgxT4a;ATt|3oC&^#*aV5y at y^@|t{(SzzT(!KzCrLf?ksA?eC3V*<Pr*ul
z8r-UvXYCrzO at QZ^Jez2u-_#sotE2*i5<o`LN*&k}6icSA8-+fQsC_P^=!DFriVV$v
zuFGt_aoDxrDp8<$63gIMtW+1Ar|At^2eC=9at*UNL18l4zZnl3s1&XrKp5<)$6FpP
z7LX`leKFzfMd62ETc#f{ZqhB#XKf9CmO&C>@G<&mEz+k?jhQ!oVeRc^K7afc$}A&`
z2LD>1zvAjJFEr(pv23U03kbb3owI^}gmaSYzIoGa1E8sTYxr$MlXuP64fNQTEcYo|
zA$p2BTs78P{-eHlAXYe7s984Xh3=F+sb!Ibb~LOi$}Uw(t)~e0ub1SAyqvPc9hZ6f
z{vHwV!U)K at d<0hjd5$+2{LP_NyJ)tee6V2b7S+c{HPhjSiW!d|oVWy}?bjZEZw>aU
zwa+XuzGx at eKW0_f>=h#FfU{eh&L4DC2M-NoA)0(hh7)29d}*$^3)C{XvYef~x!0?J
z!(C(NMBNSl>x~NB)UvL}Y#YhzR{2KS73}bZYzWyR(g99q-!T-POzHpA;$jBEZbbQk
zdz$Y<^lrWXc>?fg+_nw1nuDf)1$}xZ?QYtVoDBLk?NLX(%IGh>bWvI_k{kiuy&P<Z
zP5t1cy4;(DkfVDtM5ghH_^h2j)e#wjM2^s2Gs{^c7{(5N-R*n9luCbnj$W`t=&Nmm
z!mDAYo at v+nnLZCL3)}o~H3Ru at q9JjK0n{%kx_oy5<Jh at 0_>glk1wwv*K>IZJ=KCYo
z>PTVFbC0{eK*6AQ_9_8bDF`I5sj48d at 7_OBu$!bb>@tjaZ*wi~$Iw!QNTN!Rh$)T4
z#5!8{$819U?KCvUZj_G2Zmhd+qJ~Ue903l-IlC(64e&r;v|p34<laZTP4J`QBIjAT
zwianyudDrB<TrKns9{@w86jh*(s}5t>&z8;luH;B1MWaEOS!OD)w78f@}4#5`l-n7
zahBfI!bjJo>C70q87lt?1G4GjF;9t*w|fGiXIx-c_8X#r`D;E;oaM-nX_3F{Xo~M#
za*|A5Q81z558rt;7<XAf%zrEuR at ZGSfA0`|aDQ;fwn0)yBYbFor at KAvLqHVH3Kgb(
zOFM=ZosT060T|AtXtnw-;!K(QrUD+DIM!9ApXV~k87QuE3IPJl=KonqhS?fiPwcEJ
zLn at KBZ>o=fZt*}n$TIxav#)W<WXG)?#dTkHpWsSJ<(Sce=zsaecTuc(GyW^o#~6(_
z@^oKz;zYz$6g3Ecn!DlgT(64;(+ThGKQ{pSUVXeNANi=%Nb|$-NN+H=Cu~<_=iAw}
zr|hn}1$s~puTf+Ow-2rDKmyMk$!1j^gWU<{j1u_>i6loS$&d@>7%ukny6f6fM-FK>
z;j^!IKjDxW4WR}F<=GbizyJ3=y5I+QW3RwgOv_jT0sXaqLSu~S1I&ZY7LPh8TtgDn
zt45$`vDkn&5GtWLf`(ZM3U*yms<L12BCh4M1s9!2`pWG(NmAsgwVe>5$MSB?ujNd^
zja1V_Ic8-IM|ik}seUs)Idvn~l&nahQo%)+KTXt1#aw6Q{7d=gX<SX&HNXlbk%mrV
zSjrZ4d73PLbrv16S at Zh4oLP5(YaxWR_hUb4xFIjAhvjQx{bI&(ju_+sB%L2ECoKHL
z at eA-c?P{@Hf^{atRqQxm1X)0a!OKsv0rzmuRpS%I=&CXD0?qi_5UTe-BJk3>Rly-{
z_ at OYHaIbf%83yLy<?g@%dXYohSu9?&$Ts;=cI|<G*ffQPxY)Fk4DanQ?;YIBbs$#+
zt_^cr4{z63LZHda`hEMZ&LBIbTB9MgxS#BIFG}0nSbK7#-g3Yw4MzofymM{$)ndnk
zmw^<OWuahO6<e92SMt+F69k^aobSk3w3mo!)H?cuw~Cq9ITMK2arORitwy at T0RcF9
zTUTg*DJv`WMONno;i|og at exqG>On~@450M=Zt^=wX^?4OD548%*>G_SJ(F$gmT~wm
zCC0B;Fa)=T0!_N8%$S<H_Q|W#WNRu<aaw9%67Az6N?ps4eLs{?Yb`_XY=vmh;$YY@
zT7|Iu2bR&UQO|hnOTV9FR{oxRaq)sA`aF?;S`#Cmuc_VI%N}Z%X@<}HM&9Ar6O`N!
zH*oB==*QX|>y at QCVf60>-e?2jb&r*y<YQ<jcbca1VG at x6`@-C5-*Yu_wo%N?<RT)3
zE4i(N!!w|ArSuS4Je;HZe!!-5C)<bsJ-3F(N?jWoCdSxL=C}<sUt-=d<w1JsA4E2P
z)0z01BEu{qG%x<&9ezpgz#-o!HY62AS`D<tow3YBofS^Hi#&1GR1+3h+UrO)ir!SM
zpD`RPNlSsz5D2j#HTWki+w;||iakma`bn2*j+W~d(1aV5aMjX3s{ME)aNabCI%A;p
zHhkh8NnRvtT-RdfN|`DiThdpi<;Wy|9WDFWomta}m&z*E%qwTdMbQ8>!X8+ywXsqE
zK{R@*p;g$I$Gld=ZA#F%xl0c2 at PN@cJu3pCJn#&M>H=9oB-NF$sLASTcfSvw&geS+
zYT!p=xQ1fj&7uOYF^bXzZ$8tnwVGF(%U5*lXXk5znz+tmn0;-r`A#kD#CvmpqS?tW
zivao3%!e5WD4M{L>QaUy!mjgueuj5~YLqG^AW7z|#hI=@w4ECEuY^NO!<PfQv)AOw
zd`n{N!<j-jms7CB_!;ox4th|Gto*tD#6>y1oqC?LcqMp33+RA4^QBW&Jw)X)F!4L<
zq$)aQ=sQt>Qq;M^A*_I)ZjIP~U#T#Ws|bz=FHa#BR&|!MvOt at P0W-}-PAVnTg!brp
zdHq at oTMIubNMfH;TO4BVkHSF}5hLtFCoSEH_`;sr=9cFIH%|a;`9X{=pk3z1_=wsT
z`KO8<(-_46-^mGj<a0@)BgLD*#6-~49+*B}DJBHDF>Plh?2$gk6ioYnC%~gc97)Tf
z>KdX&pT}S?QrgDw=dPBtf;3(wGL#_w76jRl3J>IZwCg66dd01t_M{@1*g--BRzVgB
zebH7hWy}APPX{q%kwJV*4KO7Koq&IEGk|i?Yb6CjjT>o}DrH_YdOc9w1ju2yV~Pn<
z;c4SFI+-I0O>{BncGl~Ehk>J|nTqNi>;%%-^!svLMGa562oUd<$C!Hgf1>uti+PTz
z&7(caDh_1j$F#vU-p_oY#yI<`{87+@)%s`3!BOs8W{T2c&@*SJj5uqjw1TH at K#Qho
zxybYkp)Y<9+5K*5^YQBNae#@0*rTVGbu7QlST?OlC(DuecFrq*<+8j!4tXABMs=I+
zD8Ele9ldzx7IDz#L1S76$N%XZDaLva$dq11OV at 4Hix_alf2Vrf4i}qz)juXV0#${}
z{BM4owmcZ)SQk%<Zx;~Zgi<cYIY)^*s`F#OI$A8?qKm&12`ZF9aT2Tn&a<jA0VJb=
z(a|mJJ)f~qbEnjQQq7-WZeRTqz|pwrw$~gah-qHzkip)Dk12Tgc5Fa%Y#Oj!5T}t}
zIlo~z(pQ#rv=Qk72qi%Nx-1Y5l+T^=dc22 at +=Sd!_8u|djiVM&jyi3RY5Cg&nuXj?
zKi+Nm*B$$~zBU&|j#tc2oTM-lzwQg~01huFzv37JwH;7 at 0-arOu=&+rUhc9Lu2GE&
z;}Z~UZuh2R8x2a_L%XeQHb at nM9$HlY8@`PI)@F+~=>(vvPUgRnWNRTny1`4nzT&SD
z)t*_S9%--jq5&aRL``Dv0X6iaDS*ElF(u~;o>%>Ig33JB1`!6|r^bW=9g{u5<JaT!
zgfVK(6KR5fgbzoivIwbPAxA%^0M)NG;*^!mGFT3{AuN;Lg`(IG1FPmh_BxKnFQ)2$
zmja<tIuu-(+&v(!;(a at VXaZ4x%b3H5;#CH<o8|;-5A4M&;<#p!jr3MN)9IS2d}1;U
zXFyJ?xhqABtWk*??RfFu8H^F2C(#ePQ8wzDcRn|N;_uVW7Xh}OQj}PmkfLmyYGY6<
z3Kta8w@?W!JWzX~Yq~+g6(s_ttPtt_R#ER<CH2mxQ%b7)luT_RGN|`1a~@{1bKN-A
zc6i-mMn8f$1#cWY`knUt at F2<MY=bhTin{w=LyDlB37V-y-U8A!1qt`-tyl#evjHWJ
zX%U-$tOL6A*6IC4gm9rvH1M_^wjQi&Uz`it_{fdAS<3|-r-cJh&G4ScWhj!$FKjQM
z&Xnp7^%4>J6n6vj at 0t<rn1=zeY7D0=+ at R~8HShG_`USkPj2v?|=iMEn6AAjxO%}Km
zZBQBh*JRi_C}%K{HPZ3R`#3#_QKbq2d4@)RE1(Mg#`_oQ)+0fUXnPh)$(ucmJy##c
zxZ`S)Fc=g_gNk*x71HQy2g<QgI|1mQ+2ENcvgP21sI^{`mBCB3au9aCg4*l@<uOlb
zrrC01S!bNvmnUhIR`0m&56LF5q(H1jTh1!gDW(L}0$E6S8*=VNV!o^>GqPd6Ww=*=
zwrDVv#$f5X8XuM0HNErJKiW4Tl(ppDgEfB=Zl!>A!!4tk89>kuV+<{&Xe#n7ZvbK=
zMFTMo4b~_Pe%8?XyriJN(sXjTeqQN&Ldl%=k!>p##D%MJUL!xl0m<4go-<s&FQNsm
zTNN*R+u~2f`8Rw|@Bn_-b*Ii~2mxk)E8%16k*H4+-K&x;sDa^vfSsS$`gC2I?&^Oz
z4A!k;0$}KST8=mP$IfJJs(e3m(>uR at +6SRj#VC6|&GNB~#gD-?{KA>Y?($LhZWya)
zT$_Peglc!arxoQQDobu>rU?N-$V7)qSYUA_ at R9Ph+aETY=s(^MV;rLh#xX>HXup at p
zJ_XG^qpFL^5?$Mt3v{B^k$533hpUXf60~8rTIMOIg*9Nw%|sJUlA8u6<LE!7nDUBY
z!c&cnn88Tn8Z(q%c;K47gYYd(nFx?vfMpWZQ=0xktznae0KNWd5>xXBMPQjLyVmmg
zY#MMFb*7K_J=#oYFs$ox+Wt&`OyzSn7!TQRC at w&~XeA<@u1Il=Cu61^08<Ue3Zz#H
zovAaic)A1z{m-s>#-kG$!>IdfQ%C`H`@^cU;mYu|NH9BBs%A;Mpzf0u>9mOtJj}KA
zf{<1>iALFeX|N{+;g(Bm5~e10e2!#{aghO3$>JgEIy#o~k~a&^)W@%XG$)290J+=|
z!a-_Tv~Cq83)^y(D40k?_=K6~yMahhIjP^#7`R71S+a{!6G+gLs<9|!utGDAdN)+h
zk-nxL&o+XTPi$xBC1<us56(~FHt0ZNT!K)lIY?C_JEgCyyB7<lXp5`|227);Gs%{^
zJ%o{sDCf5zw3Mh$t^Is|-OxSwJxB<QU7H$VPfc-WC{r51-k)$ba$v9H1Lm!s3LnOF
z<p%_OMj*YyU3~KmVRAIgPA_LrF+f99X{bQEZ?dfemPcZli27DK11J_s^lk0IhOBhv
zbSgXA-^n&h&qMUXgPQdh4Kn^nG*wuY(+iXEZr<iT^m>Bq>A-t`Vc)QbsOPiJ*Nv7y
z^uGcHOk+x~4zgyykQznq7Zq8b)+YD&b{cDiB864vbM=zz5&4z*-r|1%>KFyUjPn78
zMGa~g+9J(Zjk9olaD)0m9x5wG#RRAw3we!$5SE~-SH&kumZx1bd?JcEclxN3gv|+`
z4RAk`?9bXr4~%YqUDvXacqYPE|DXzMEvub==mOs`j*;rM;OFx~MNJe~>pfh4;Hg*}
zgg84G`p~@(!)KLuJJ<9qbf4ycZ5%QLOm{o5 at zWA9o1wAYZz~20Gt3+clsda0D3^o?
z6 at lxQqvA_76$HJS;AY8Omw%ENbitkIXmjNKz8o%BSCa&PhhB<$&b{`5nf9&@1<&gw
z9<G?`^y^T at i3!`iqgj1UB;AcHb%rl<fa{JLP8g21AGi0L$Jy*HP>rdpn}$7gUWp(n
zNO523cz(5|kYk~C(S$9+)48AYk~H(AnbbS6Wj`h=t0K>e;`v}D8Xk^idI6352GvdR
zOd70}?K?Sti86X60i60Z$z9ABbX;^h(jrQasv15l4HC_%;7u5`Ogkclh{;eys$Y)?
zxb$fc5xc3{6oxRh%YlpYGO8GI4uoEL%yAI<m_r-wYfS)Dr%r~EkiQ-M+^`Yj2}R&U
zB!K~{Pv7TfR at E+7BF95Umi>kxM+;%TsoKX_!94tb-j^4(6M9<k<~OSl at v?+0ttI-I
zxZh6-*xIWOw#1sU*uJh8O|%^Obhe3JDcBcnTSL#MHZN!zZ4yLp>=Q!vZe at P=09pV^
z*oTQgcvNSr^SC-k0r_b<!&3(o4~nT>mI;6a$E#_dCXhXS`0(*_<%OqYy0iX;*FIAb
z{Y;F1Got;D)b4g8nGCaZl~5nxL`ZYxkz2MqRor_wSAIiIn`p40(r`>FB<}FrA!^s@
z#U$|Td-Ko?6}rFaEDiQ>OtdQKy69WZ?~GM8?d<q-hrhK- at 3yRcjS^a6ALADburnhO
z$Yx&cCE3s)s`3g0Ki~!l287dE2ks#e2TRa at 3+wgyNTcp(<8Mmrxv$;c+j}hE4(~+J
zyUZdVFD#OFVJ>O*-VxUW1;T9+(dI`cDmr1d_#STp0KiFvJ at XI%ar%m7;yPjXvG?WN
z0QehbV&u$3lc877qG7V<TqsvvbyIFBxB~@L4MI0Qsm^fdY~}DFTzZqh?pFT{i2Tui
zq?zOCd!L#4)76`wjM9}cIlQrzKgOGkfFg>IB{`BXX+MeD+{WJ6=r)&ceDKDKe8w*Z
zgwkyuB=92F7boZB1It|+90JbhtfHi<eG|Y?Du at K=ja-2rU at _yvkm~R7hs92<^-3BN
ze41Wu)2v^0ABoL<dmjAc+bhTO6X2wO<QNqrUha)8Q|$GIBoBYww6v7)2FEkZxo$aU
zNDIs at H98k+L7Ui<7`eFBh-*0?IhLpGy?(f*V>SAa-@|>s1nRy92bCNt`d_(j16)U5
z<u_Z+mGEv7aEcIV at adB2R^~aqQpbSWcH07Z=2tcFK{bBbP6yy1r*r;7Dg(}cBk{Iv
zg*2m$LaVpdBq^zJHJrry4ir at K?CP!tpESRqu;i9A<B;G(tP@;f at H&q<>$T^!rKBu4
zZ|aeYyV6`t4N?PoOiu#(zKd!cu-M`-c?KFvyN7cqK#U^HrMW!P{LQ`zs5r?MYL;0e
zW|Ao3P%Ol02QA9+<2Y%YLiQnluQS}vMqOmT*5%}utem3C%MMqS58!!!taNOEEGnN`
zJECptG$_}h(Rsu_b_qlO&l}c*>RH*$*5W$ZK$NB`t55MG;r^-1^jSZa*wB5L6D$HX
zLXDiK7edA%z$blv-o8jQ7ASTSqm6?(%5DqfcT)#(uEV+$s-paurWU_{k|XiLDTKts
z at k=k$iWW at n84>AD^Wlk89$G+r2wTjkZIBhekb*lo6$ZF=dqV^<0Zg#T-)5R!?VDdJ
zH$m-zzDc}r)!fUsnygAZAvXd%)5^qw0De*JFjMBb6tLB+%rC-lGeDH-tW|p8T!A8|
z?H_4(*V(MeOQB09e_J7cK)+B0#edv`jXgm-3ZP<<Z!rX1*+gaUf`;R<|B=jsz<&4l
z+YIb<ddcb`Hf`XYV!;}9vrig0mR(+BfpawtSOoo-+gSly>1Um_!x{>}+K4J`GJ>l=
z)+!yhJd+|dt?UdAEXX?`OSlLk8>lwJb@!HPIWurRHRog>2v`VzLS}iWgs9f!_JLM=
z<37dNe2d4h7Zn>Bzof-*)FsFhdfPG0fQk_VArg#|b%Y+9Rq=PcigZM(z40V$Bo^6V
zktNm5Dq at ymN=SkpeG_QUL#J9!M3)Ju>8RK=ZwkvhQ#4$yfMXQQ$^hk%k8O_q&Ne?x
zjz>pW?Jatwl(|)Zyp_WHXUt)>WJvFZmuasS4+4CdzY>wz8)#%3SXLxZ at c5q$L-vBx
zMS{|m`{U3Gg;%c{Sfzq-yFAoHJA~2u?n%lO9VRw+y#aP;O}F~h{X;u5k*fhD=_y(s
z4Vn^vQQ`LHyNi+Kv_<{7Mc5AMqai9>+0-A)SL6<I5}pTt`EC;AdR`rA5R0zIG#14h
zi?>1SSdr2}PKZJ`#MmB~zum3|Kz4quOmX449QvNIQLtwjWD?pRyr=yeC-fI>Qy*R~
z?T{Kca1rQILh$0<8*`|~WjxL{5`@MU&kkVho>b=~ZQc$#BUcE%CQESv at x^)>`O>?9
z>j(dX^<b5MxnuPo$13nFWI%YQ&qA;bg%0`@420;z8DOax*nmJ&?MK0Qg;`3tGRBS{
z>3S6R16)|R+64^LqV2gXA2JvAbUo(2d=d58vla~oNtXR at y%&2b!a8f6NH|pQ&xcgt
zV$HwJc`#@b3j{wz8m#~`9YEfsdsex$rd=s<$C7e?0*NEZgR at jP-Mc?H^dBCC008 at e
zKP6r+tg7J3#SCDw9w)*sQx7bO82Q(Z?1RZ>my^ZUqOan+4BwMM^RI(@d5rw>-^jzN
zLgGriTMsgaXW>{n1b(tr?pGO#duV-1^_K_q0 at 8^om84rIWPTyaQmNloYb%t-HQD{^
zhAeP at X>VeLyHgC~nyw0lvu-TXbV7z|V#U)f5t(~d+ at r3rCuD<a23!f|v3-nK_*Mk;
zKdw|u5r{--e)(FU;b$gI{K_mVhU_g%iah;hBFjLsN;rYISfqT0rQDVsx&0d?`}7>u
zK-Z9(hQ?1T#MNBZ+&xK4+{ua0Q8XfuezfL)YKoKAFSeSjabP~Q+HJ2h4Lze#HHu#j
zT#zz$X1ciMm?$}4YhElHtaK_T&cK|TZL!(8-E?=ijesq~>N2?bO)DqI5s@|6CiXx@
zqAAJDNpW41OidP?{r#m5-v-<NEy78)6 at AjX$f^y*r;i!g2Tav8p{KiN#Jem4`MG?5
zEMPfXSD)-7cUcp^5&uI>y`t+*JFMb{J9q-5^#GNlz$5FQ<2YwzS at B9L4PX|?IE6<X
z9|XyG9fnwtl<B_1PQ(;Uo8G9<a*pe+<_c;&CC8Q}y|kfTcVpHZ8 at x>6`v7f#kM`LX
z4z{~1o1g8>)ddrMFq+aAX)~&msXXz27B*ByF}&&;-t=l1+EMXD2s@*HT8I*rJcONZ
zNU~|59215zTgkp49N;|J8*KIZEyCX`u4T|A6FH6w3~m>fKp)xqRocu9yCm2hM&|&b
zuC(c(*EmU4%lY7?N%H5#33a<t2!h{lF82XXVcQ+#(8Jty14~1Y#otBJ9_D9%UUBXI
zdm|&`ax7<j=fBL)tmB9C<uUDe;JH7hAJb^6gVBbSC2hMve{$T$7?R15Tt1O&6KV}l
zhowj|{gwy_wbCBpgxaBS)E;76GUxy>0MkB|h8)nQ1eM_PL!uh^;vE^kleLT&#a6H4
zg*(_8+mAJu*0MeD<23KB<gliH1&i=kSNv2LeX>i?wTxHtUhqIsvIW|Lp`*t{nP`2&
zJ9z_o-C1=JTN at 4Qh~z32ZLDncWtU-H_#1Pjo2+wmjG>D&emS=5>tS1cE_Y-SnLYPe
zg=O>i*VQiU=5W*nz8Ru9XZqnf2h!By_cpZkKN0jcmc7$<)Dm{i-6!vVd+Xvh>vF>6
z?KC0CNKt%zvjXYZR~m5fJ?1Gln`<YDe&aCNaZFZ1u!n3LF(BZL(|sc&_8K&d_5~ds
z-`yQ$?n!RO&TdzvtN=PVtRcWVYfd(6s16i?T{mZ}03E3#$Mvh&0U&)iY$iX}suj*3
z)WmK-8+Ny=-}X7 at LBdXdjJE`{%;*}(Jt8orDigBiVK=N7Z2vmUcWf$6wm45~Vf)a<
zk9`DEg}Ho;PJKV2HSCC<Wh7_)7rWXiRIf%VJTBkpREt_4uN1^6Lv&l7F{V+#@S2}i
zm at u@`s^SMkXSCb5LHWlz+ARh|T;T%hQUOFUL5G=P`9~N_q6u+-_F+lBbw5-&{_XL*
z|J48G=8BM6`NQR1>$GN9z}3Q$B2<N#{qUX~1XA~2bq|m3oKiRoTX(mp3{Nbl-aIaG
zH#93x5uw!V5t??|u6L&2y;2Sxo%ltso);2SX4{{Tiayd}mp4Wl2-_`Y{qg$gEXlET
z1@%vD&Us89wq-|u8)XWsQQC=Z5TCuk;{QWCtAi#92ec}+Ys-LIO#xWrCJenW2>FvW
zU){S-We(wjZGrdx<NDDJKdFTX7~cD}g#RL6Zfw`uk~ooT)wQRD+4T>-g6yD}Sr!xQ
z2M&2qgiG{)H>Z-rbr1lhO7+csgy#dzW^2SKMbEw$y-S~e<<2?K>yd;dV=m0m4zNV>
zROe?rEfwlec+27HA7BY4ny{m_<dd!l$th&gc*<(x;Ztl|`xSCYYNZe=L=&9{<o(xO
z(Yu(a__#W^3%TY<wMtRR%x1ov+fWk?&1o{ELc{_5k)$atoj|-8u;Yi1Hw73(8Z=FW
zbi!!y?&8UR)k+01X!@$p{CbNrPCg#-YnTDnWqXlWo4JSfL$l~H^(lxA5vy9=FV=V3
zGVODe87s%>fZvN8>;J>2NQgY=D&{l~y(O+^%>y~U0(@tq`*VYHf!X8g2c0)E>a2Z*
zNA(gLI;AI>5|Q}1H81lN*t3%>FEZi%e|DgtF~)O$WEBo4<4ihBt?nG8hLM_TAN8+Z
zA)Ojydo&PkF>|VZN{p+bVj}y%j_BykbHkoG_WJIG at LcK*Jf)rjr>gR2GABWDUo!>J
zlVp_>z6OTSzH=vd?=?en|394yqL<zbPwH|#4Hjh at +3XL!vq1sOx;!(QxmoZL0EQZb
z^O9$O;OCSY at wIJR)~vwxKs_TLpH=0qUYwpwRwxmJiNC2;c3*ps59soH#)ykzS)ve{
zW(&zgAGed%fcbDN-XXeL>LWaYB;VYO55?s}YKPVLRpOTwuB$95eMxHvrs04wd-XT$
z!T!I($utv$pW29*Kbi20tsqPfOMZR?@L_y^Zg^auDf2C8z_S%!{)XMrCr;eR$nv$&
zqUbO>s0n-2qH~{dHBHLy{Jr?j-78mbI{B_ at hoV}S$4Bv|VK)zDSQ2$Ij3n!~+Pe+%
zHX6I(+y?SGG`jAx8Q;RE9qi9Qc#p$vz#8Y-or}3#={TJn`pzXRVa1uQO0kIar1e*S
z3Vi{meK8jTSjNgpsd2p}zMx-4H39Im!%hnhj$jN!a!F8!_r^de&lvprrsWOLJ~k*_
z%q^yF^CcKzoQg(8+<r-Lb8_%IA3uW}i6E25 at r1-}`yvdj13L?HqAEuNBN-z44UqGU
zVMREe90BkjO;Wg}<>=83t^?K70SI7!!lyr2Hu`VGwCTc7meN3BxwLTe8yGcRl|8>4
zb-ryayj*MVZR<K+TqiL2w$|U~Rm?UR=6YQF2C^ypX8_`DKSSj!3<Jx9#X8|-4?O*(
z@&81`mxU^Ug)P1`>Smq6(Ad|=;fMWLlz~j*I}ts)b$a*cMFVtdOJEeeb*yxM)#qRG
zzK?2XFZ0`JH^rnG?d&Eq?tt?U=$1IQ7k9+D6$20W3(i+5{F0#h0 at 9q|$rR$Oj+Qxf
zk*Y45Awx6GYyw<qNw=BV+%5j+dh4Z8+l!H=Jix9p0Vpj>7eG9f``Bf`4#$6HuxF<A
zx+A)aQ}AZPX}UNn4+jln62ZfN+JpmPq})UWMo%zOEE)R3{G(nj=L;ZPMvndcue9n;
zXgf690cr||wF2ex;YPvhx|2~G?Y}$oy_F8h66bj9RkKP0mR%c(wp2=&<1YJP=T4U~
z(ZQ(!kY09z at c>hhChYVc+VV}O9{Dm_#jnK?{UWmeWvAxw;GU#LG-ykI0{#YInRO`N
z`<j8sXa80~A&*)Xmehh761$wRvQN5Ye=E78;QTPV>{8mZ^3YS1>4eUHu1T+v!WfjR
zu_U;bVE!5S*BP|X at eHr+uq`mKfO0+pGhA3oNVVi+IeaRu*Z2G%XP0Qoh!-#15W|zl
z6n&iJ8%)3<e44{k>+61hu)=I at x$EX0 at Hs50&dpYbD>uIOTg8yCLnG76nh&_4Z|e?a
z>W<b7Byn4dKA{QdYnGeaVeeuLu`kl-S+k*b?P>|*NjYdgC;zf$%Wy`aw6}>AI<%oi
z*t>+kp-(TR7S}h>1L-6|TdqUSWsbPr+L5z>T*d8h1mTmdk49X7t;Yr999M{Wp-!D<
zWzWPgR&0kAY&4RV>~k<ky)tw{aO7*b^f at _=99l at Zon);4f0j+cNH{{^fMjhd`kKqq
z8<C237zA=S`%-hMMEl_)1LF0SH@;waJT**&IPtp54-))rLRl?-u8#y0G|1Uu_~0A>
z*|YY8h#82T8Bhp+Eo9@@#s at HuMfss0@uN*hk621PLAz#23h#=8JNevP^mHBvb-evO
z;|B)pAI~!+cr=$v0vK4#oA)~<&IPw|6N%;17k6^i97#!}Zw{XC(sn@*Fn}n}JDaIC
zk0Ph;c1K(GgLMo62 at +BBwF!4I_#FE$mItK~8^C5%OCNQAxXwjHBU>&$Xsypm+$)J7
z>SoLR_Kv&f!$}0~Asye?wF?2T#Hq68T#}|Btp>G9Rs256TctxBK8zHOD1~ka>7efH
z7+xNd6c1cm`Fvs3SBJdR);W<p+Doc^p}n>~!Q5Z1w9KEHw$3lv&vgO(fe%XNd;#S@
z2pz;UGz4US@??yyXo`ea(;ePOjlb{4cXMfMZ6AjI?f^=nj{xSfe=@CX{qSijR^R#{
zNJKFWbMk9-NdPQ5X(22ad;OI#vpq8Ton6JiJu3w)(N&yyf0yKBE&uXc{KtdZSQb<E
zRW`~IbOC&{oN?wihqlt%un}K776)e%VF!|sdmDy-&5tBdI-oPwn(g4}@_j-{$efv6
zDJ2;tG<GZ=*h!a%azLYCO2b2l7}=hNu{YE2TscQ1qj5?dDl`^HP#nBWs5$#dMreyp
zV<fKDmjw|dQg at E%N4m*obibXDQd at +yVdxd#{C)Oo!HrM;Hd$`k(0m4cFNa;Ts^3QY
z8V>V+H`~?dqp(#IB~dj*I6l#>^lX2;Ort<9WhmbUv;z2FthR~E-<RyD=yZ2=G^U9r
z>zs2YQ{-(jS2-r;Qr~VR01H6$zcgz&YICDbMs11_4Hn1(Jq1a3z~IcC*YToqii3up
zr7_|>dEk~D#3W|09PNYwg?irs8fCY~ga)qsN+969f7Hl(3u>}Fm?7U1b9T3icreN>
zhe2w*I>JB-QA8igM`6UUzhP_U9E>%=RW4Hj>v-1Ixt3h&S at pQtj}R>U&f!5l=*#7>
z8hV>Wm&jh8 at 6%-`b3xcG$(ddXBvL=yz2SiG0q($d5fSz{D`+0gitCC&JJE}KTQqHe
zNCj<Ke>a9iM*$$pK2RVTy|)@-z%XzbZ7-CWWxhY8jNX}^H$Q<>0W2)jvE`%RFM}Q1
zrHUV~OBRi<`5C}Tx*R+mq=Fe(vx)fIq6j<rYh2V&wM<Y+DTe=<48WrP$wKuUp1cPf
z)@?-~(G|HbNJj)u$H|65RZ?ppLrUfQxkUVHe<nge_Un(LUiwoef;$XOvpuGaFyrzf
zY at D)dZDR~(L>u1h{ru*8&_>O|M<!#qMrnM-wX!KEjuwvN4DY?M?;191%=1kn%ctr;
z9Bem80I1sV+eh+Y4x+{&bA#LBs!?EYmCk(-5o2Ba04m5&#jDV+KAi}udP(+~>@p}{
ze~KoGhf+%=FC=HoZY6V+trwKIAg&a;cw}@^Zm|KZ<dzg;Z!Ffk$q6XfR2WCCGu$dY
zM`a8E`^^;Y#PfeK*v<w|*H$r7S&7FOW+*Cm>yF!!op70FSsi#j+W;RgmrkW%oj#?Q
zC at xl9rI?4)KF%_D<x_Ic at dH>z0)Sg$e=lo^l)0sV>~@|7N0dlsPRL5iw)xF=y7<s$
zHh*R60mMk~az%2FU7pB6rLsY3 at p}oNiaIx+9dEp02{&i)zaEQB3ZIV<ej;sWD$fV5
zeTni{ehS(DoH7{A?70_I5E<%URwME*rsl{2V!pmerTN!gUb;tethmaCq7vLoe;IOh
zH~<*PCwLvpDsT?gyZHmtj;r7^kZ+{x6!zj_Cm-y4Vu80YV5NGh6BLI>da}ivvL*UX
zP{<1Oy0-^B at s`nLRy at Z7Yc{{O0l0I4p&1!(9jwHXNS6=G{=|809bc2Ek)a)p-_(u-
z>P%kkK84R-F~PAJ=?4>T&XaGif6%b$&V47b9O=Zumcl>)(*usrqgEw5`_YFhounLw
zI(?U|F`@Fmhu(M#Zd-=bag@#?u4-C%vhR{}_xb{Ae(EqJO=zR>25U~ZYnBdrHV0^M
z&PXpVCNa;5oA%@XYaBUs<C6w at HX}wOuL!<K&T>@Re>nG1AG8h~n}}Qzf6IUOjY=^i
z6S*F^7>ObHx%0r|v{xkOyPQa?tH=Ty>9nA7AInhn2B at B@xkFw#ZW;%YR<QxqPAuA4
z!@EMKaCJL3;SE69x$v)B8&!EyjpT5`+0cBk at dcP^Un?5do2wD%2>3^KDCCj8nS+sI
zDg%=%T=Xhz10TPPqa*d?fA>0?^?u+v3V>Q9wOEKf8RN{$xzVCtyXpVHt>H(aa|iyf
z*Q!0GOhGtyhmRgyfGPL=W5Q`13|Ye|I!dEmiMH0&x5cspJ`Mf#&#=%->9r;~5j{xt
z$B1Eu6oK_(m7w)P7ha<DQD%3VolE(OQXZ7c`WQx(ZXn*9Tdi!uf4!rieAGtIaHf&j
z+pd?4npe;3daj+iKt9)H-0^aDaD1g#w6w=|f#6(czFE*6zP2adFm2_O+(-SX(;xmB
z1oI2sT<6K=r)(uczgzyXv_)SM at d|UQRu~I5oup-}39&x=d1 at dBRYH&Rrn#N?r1>2O
zIEfWt%vPLDgB}k#f3kq2`}$uOqA|5kPjnH<+hGu;7=It}aOW3p)PHgnEXM=Dvt7`>
zi?s~J&yR}R_m88~ebZBFfT|M>jX~R>xuQ;qkH40eA;vf$6&!Zc;cXXK(m-a*Pc+{u
zu8q-~l_8e#eleegVpbyIB#AF+dBsM}mjB`=rhGO*)&RU9f6KT)Mdm?G%@s_^3?zp>
zZ6?e-e2X5P`LhHC>lOSVLZ9G)a9VbVG4s$VfIgAdf8*s?lU8>I>bXRJ9-ClPMogAa
z at V(V$eRfM$H*1>hNZ&BwImQ4F0+GmqsM<++`!hA|I8KpzSLvOrk{irzQ2BtE?k+u%
zjM<yGCtc!8f9^rUyx?jndtK^5QtQqDnBU#gcbl7t1!x0lfV3wP|10j(wv|$d1l*K4
z<qu!ydNlaN+<=l7p55Dm;;7y4(_7;TWkpdeAOtQvn|?bvp^C_YK1oRY*!r~_u;*iA
zBQq~ma-gmkBq%AqExqLA2or!WiK#ghq1A9+0Fc(re;DkIOpXk2w<y at qRMOub#du<1
zBUs)o=S^$)N&_lQE%77*ugHlarp<qUV=FRb-#pyrScSSW03K*vU6XP?$dCmFlP*@d
z=p%6q*0!~Eggd{_%j+J98G;r8gq`{#Y#y&K?yISlG9Fg#Adak*FCxyr6BKZc at Ol=v
zKlDXAe+9FKwhHFG%{Oa6UTMz!kb1X8d0-8Q$%8HF{doe`oImtG#eS-%j1^(-Wtczu
zQ2Z_Ppz{5ktf!+N5Wjwd1(6#6|0)b+74`^DtOMB{c;Zv#>Mut#Gd9BDX*&jh1MyB;
zk?*OkKz1qsaa_gTZvyZJA at go0R<w^U7OsHFf7Q#i*z)Y48>H(&If-vef%ViJkghOe
zZyjYinlv51L}*wzQx)9xf<A0hVj>aFbF+C)Vu16f=6)&Thxj!}W&s=4VDKb|c8EOi
zXvH7;M8?@<h9VpI9_7#n5iCbZEjIcss>aH)G4K=9;7in`Gpp0yTdkm=a6Y1Fz0<JK
ze_Sr32B{c`cQWoZ4_;LjQi&Be)H_)Ci(HQ&w%LBC#WA9(5FQe**KM3L{RWpot`K(u
z2^EyPNVmn1B}{KTe1bO%oDLUiDF%osoC(g^$_}uRm(=;E)qqTP+>|hXr%FS^;-JyP
zC35*B`U0UFtYoP4xKM&q(OeF)JVX7Ee;(%MtAQbPu`2gs=kq0*RA`k;(+U)L(yK4e
z{_!osi3^+^xbMwR4nMJwd+PHe2!rok>U!h`0S at fdB|_u=uy-CC9G!umn`qy2ZOOv0
zi}wux_EHFA;Qz21^owW0bkTPi%yR0SX}$k_kbAJtfuFsj?If5gdU8k^+M2L7fAY<_
zM at Ux45>$%Eav45z*FH`km-4I#OgRNk+WWB|P2TM7`tcxH$8N+p-5?iyassbbqJbCq
z58r00VIt`71>m!GhLk^#;g#f6MHxE~zd>Wx|DKnK>|?S?y6+t<sBBNNK2dZ1#X5 at 8
zs?$mM+6}8FjvWL*(L{{Zl^GAae<5Ae?|9F}m13W8W$>_&M3&-8O(Kc;P_vr9LA at S5
zu*6|yqe*?2?Q3|ntsesVH|l(2LBhPm`i$Hd0z<-kKBdvt)s300)^MmELrAqJ>V<I8
zmKf?<O(y~VHn2tOWo%goYMENM+i(fGGF at LHn>ToqEs}$-qXU`E7CW?lf9Kwiwmj|c
znmbsVOw2`9JlIDH;KUy}vbfDIY9;Z?+=F#GEHSr*$Q)6z7n#gK5efs-Y7by$uoTcp
z1x%zRCU1*Y0Ky5Vt`E;S(>D;qlQRcA6myodDOZhzy>V<yRf^)tPXTL+2si%zukjee
z-KxwMYGs$8+&wp;$<7-ie at r;oTIeZr%de)VxxNYjw-5`+q*M>`Q5{YG-ot<EB7<Tm
zM~iIJisE%g?ovasC_$<AbqYZ(ZR>x*AZ*_6)Tx-J#-I^>dR-(`pmyn)lx~^_2PL;Q
z2RM0PFrP4|SspEJkWnDFe9<(NY1tN;o&+igAV`|7NyP^MD!aZwfBMOQ!#7<k<rM`E
zIW=Q;px46Pts at XHJB)xmv$1dgAI(oyJcB at htphe?FcXW;#^n}jZr`~iu~%{X7ASC7
zZ&ZQt&<LvH87~zq at F}BWWWSlpfCb6hb-M<G;VIr$8jjOO$^Mr-iDYMV7L?$ou*Q{2
z!kBGKGhi7Dr2ekre+9iT-#gDB&{a~iJkXH4Ww^SOQ&Jz8Fw46a{?Z;kOuIf^$Od|{
zRD(CfWA at b}TW|aU)MvZD<M+6U@#}UX9pokGdR{34CB*2k0O<l_Z|0#YQrN$-9ZflJ
z^UHAy1+ZYQ1gOp2XC)GSOS8dVbTc?`q`iw#`HY_@{Fv+Je`Lvc{%x}R#<hnk^+>+g
z32HPz>}x7I2SUdt>lRLl{V{-HkJ(gvIaX~=;cB$T8#=_I2W8ulGsh_#fdt$%1#hxd
zZU6G-kx14XEd)P8ND<ta{^k^4LD9lnytPeyDV8m!%;*g}q9DpT{j>Gbh>kkiPVgys
z<70*Poau^^e at 2RG<3BjEZw8B(d?ATg<fNMCmd)D{7~~!<{{3#OUdMxh at agTSJjGP#
z_2a^&q9Zo*m+1|*A8P21tk*Qvpc5aCj?ZunCzfnHf+U`7Z`&gxM*F;uA>EnbOw at ic
zJe?aqe*Zj!V6$P*4cj!3w`3!YZfIt}&Zmwy at JzFle?<kT>g*X~yvJXA(C}-G=z72)
z+c>fEK&Hslb0hY`#-mS48%Gt15kn(xW>7?yrJaQ3f<;Z*Zh|Km=iXJNRCK*qcPDg)
z^~Y0h3b;efDmhVRvtq7mTI6zJmAsmZX7!;bqXe!+OJPjdqxd+AlEOGH6wgN&NW-oV
z(F2Y$f1EpaeJZY`BxbErb7gdnm_ at O8*1tif>~=ru`1Hws>9*thfdrAg7z1 at fzY`%=
z`lwkn*f#78ejxQ;2G+gcDwUF2)azKMn4*EQJSs!88pa^XE7>^B(MGKok6QBL?;%XD
zJ8|BCx_x=WkcE%mSJ!Gd5mc9o?+dvbh$Z$Cf8Eh^mHzMp-ZcR|eqB^9c1IlcjMH=I
z(E=g>XfO_61PRl*>Jl!5X;APz8y2hUv>D*L#28$fjN%258Swq+bW<ybobpW3Yen5~
z-py~$F?$Z0u*nX&o~2no))uCGS-18DQe at PkPwS{RSth;gt*J2O&r`&&lbBvvdgf$r
zf8jPs^CP{I3*3yZr?0Rrsv$pQtw424Wka%p7!e{(3~2#d{{GEa7uoe*<e&5r;7#{R
zzs9w$^{rGT_Z_LKs$6e5#;t=0tN#43^$CcLKjuHAZy(PpZ?Fw~LP1DpB?@rx&Lee!
z=V*SuxQNrgKh6h4o>CyAuFSc-b?DIce~rbx^#GXw+lG4bd^rCv;EgCPWK0@#{t%ql
z2_}tc)c(-S9_O&r=#15HdH7%Ih_`?Vr_DuhcLYWKjH52J#WVuhFY*9;yt86)Q_ca3
zh1mnlL1Cwi$A=A57^>HTT^Nl^^O;=8TlP{Hn~IPl=)lYt_T=EEz0d7YJJvqrf8P>l
zfI7Jl#=>e&31t_Y6SiI5d)SEv+tVdwzgyZvTJZQXK0f?q6-0$ol|S)ONN4(&g7Uc1
zCd<YUfpu`cWQbw+Lu<SVZ=p`_h!{UDDXrll2si};X3YP`Ko5b=ZpveFvhZmZS-h}T
zBP~K>klWS+@$E{m2KqT%-7`_Ie*~E~U2_&F at I*yE0_Fx~3^&9;sm1LH@}kNc$(t&g
zeBQFsY4vj$8Nr8B2Ct|->di$!+eBixbu<Sx(~~wojR#l#uFwrs?9_r#TQf*zIB9!F
zM70`FIqDLF9%Ud5&7qawc3gjGsB#*xoQz)|a_3D5hy1WApa9d)N=;>#e-E&_OH<sK
z$=x4&EynZcIV at n@vKTSU9|F~a)X7 at EEpZkK+XYr4y*FMU94fk<TGxw8v3!ieWEC~o
zUxjyMmO$wfYBMK~;AKgK3qjMFBvYDhPMenILw^E*<*@eghqOWy5NhGjYGPJ at wu`9e
zM<ua1CRQkgYSUlpZkVDBf4--RXsH(&hx966<`PDpGp&3=zTX69|NqHng>&ZU%;zr+
zP!-O8=)8KbCstua>&t~PfX+q1#@%2x^^Vlye#xKQrA=DB3ds2JL=_i>uP?3gfFzpi
zzsD+udK(Xqp!6LtO+n-Bj$tfxYK`}L&ldL6dA9j|3PWXC0*hD+e=lqpM{}~~Pm}|T
zL{1GeFl_mKfkGmzyU`X!vI0b at VYZSAAP+pQamz-Qis~mlMONGu>PQlOK`a`6PYnR+
zB%737y}pV#3KLR40q-|%e_CXfWrjf%<wKhdVjUiB4`i~0Js$o%Am>l<B<66aq3Rp(
zh{I5fqW0r3rD#U9f7j=W`wR|>F<xwKyyhSWouAj1@@`a3MP1nPV2^6|EB5*St*ZYO
z9KrQ}q8nQppIY0qQ3IpSnIynaYesZ=2Ft~!DMOm>=RCqWA3v+A0xFQiT1!A(jREp`
zF+T3k>=LOn{1w{wOV=KQoB>ie1hgjNhz>;#-G=ro-Bo-?e-R4TZ*`fVjT<<2C^|2+
zVfCd6O+xRUq11JYKs*-*9N*_AN1$1*Dsle(pZPCW0uL@@$e#hmh4$uWkwo4qq!D#r
zt5Wx5anv|XJoprVPduRe+IoyP37BRY<2gw|Bqv)?P_o at BV3R?{kZ*eNFm#8waXX9d
znY!y)ZL%$#f195|0YJILNSyLkKyuNj{$yjgI4WnolMdvC1-&M$Bw}_ at 7Z&kF>M0__
z!wMl3XP9S_qj^1giPCb8#3BSRmi*>gNeh$LL at loZ72;+vAI1?Pd62 at u5BmU|dQ-XJ
zw0$Y_z3fFMB%HK&8p748YfUrV0R*JZGf1Ep50-e*e?!;SlgWNDb|tk?PV at S$hs3*K
zV;Fk?NnCkKozY(9P$(|F01y$ZwWL&9TQ_Ps+f9OYi;%G5#mDZV=+mvg(CN2sfh+D-
z7<4OoTM&J{zJQ!^Cv$STMNvf1y-6|_Rrq?BK)rA)v*aPAC}7Rw4wtJBXD|u;uu4|z
zN&+thfBz{IhDQUSn at amSi%oFi`frSb%}5)Z)(TlpmY5}+SScAA9p;BQBog;4)%i7T
z&7<zx#Q?6OIdik}x}_kB(ydivPOrY29Y*i3d}=7 at WO`9_gm`tA=I;OR4e-2q+`z^y
zj(g<<SOXodix&1-iY9lU;22Ui-)J7eauqWwe~c;89YRrZ)UwOE?zt^EKGjJSA+FTv
zeFhCNv(fQ$Zxh;@)Y((u_fUVXXu~Xo<o4TnMt&=r-`=5CjW-U}<}Tvb1KhA$##7EQ
zQaCu_h*eQXmmZjLKDhj|H{~Z=F%kq`3(u1?5m6!xEo{YK1HR~|(@S7>j4Y%-n1mdi
zf5RP>FmgxWdUqW3*^B1^{c>L&7R1%AM^zJvj*cy*3d>2wfQGGSk;ahYxS?cE9uFL_
zn67gxF^01wEIvSau_(|gg%iitb}K%hktRr91Ta6_69fV%+(DKTlYMp+J5M)<%YYII
ze0M!Wy_UeUoMax5sY)@_O^P>EXz2$We*lr5ez<P2X`ix}l13Q7v<vDj7B$QAYtRiw
z_Uja2Qiw`E8lP6GksQr!?xErdGv;Vrz-Ga7T6eYe6XIz7URL=^IlZ=vZrTX=%Xk$#
zWZ3@#!gDdlQOCTmfgz1w+_2*1C4AeB5~k#h0T(V;P?-^U57jZc14t5|Vf1%GfAe2W
z`&nqeM|o{oeJlgC>iv2QH^6w6>*y&HOzeggB|jDJU4LLW`bBe5Ag?^HMJU_!x<o)q
z!uYp+PY!z9D<FEyDJv%R;5GCCcysVjVI8{eAO!DlM7%CNm6TW5zcR=9?ZHe%;-~#9
zugWX5gjAkx5>YLQh at y>VnSGqie_E9CF^jjS at JlUQCk$~j^IfBd-Cx#YXg{IvNzn^B
z*%-5!OTUo6cFG{%jg&Nf^%APJ_A&N%_|Z!5ayVE6BzaZ*40Lz*;THBgqzZ#9dQ&-}
zE9?oW<>jbLJP~TB&RF9xHu0>bVKjW4^_T56+0LRQJCAeEeF=w+Ja`DZfBAItu+1&V
z^JJ2;Debk9v~0u^N54l+iOc?-Gs2vvdK7BnYVn-Wyl82_bAsWn^3-4^ZJY2=hWt#D
z=V5oPNdku;lVWYkNn<^Zhux6j&0|Qr#XC1d`A0d_nY4F?XzOp^kS*HWEKOvbGmxRS
z=iqdKb-N`SNcLJ?j`_V)e+JDL88>MQ at P{GjP3B#?E3G(D?3Z<fz(0%uf}PyQyumSb
z>jE8NY at 1k601@(78$jGf6x;!o;)O>ATkpa~Xqk?nmnXNzzG=P<$I$Q+KwAQ?gRs%x
z-p|siWFRyX{Hnq=!o?tqgaNG$yf)v6+oE`;i0XKIekkq%`44xoe;{d2$r_ZEhKp-+
zj-E5V(nd(I|7YtPVl1#ra1(X`i=%r4Q;ppuf^>9-9lYgyv?&`;e>0M&VEAR^*K5h!
zpwO6otH;V#aUaRDHiqX at duI4SbokUSS%xNNE~m%;j=i_hTCUWZk)mAcfztU!K7qSd
z!?Ggq!f5jPT0GM7e{osVn|!)!jbzOLsErKU#UgqCQb-0%r+m$N+r&@EYnRXAbdl?S
zE}~yT=j`vdYQ{Q`8(6&i4?PCMvCR~oW)<5TBDd4yT=%=v{rg`qi9a{oA%+ta2tlr^
zM`Iz#)c<Tn<<%xQvUCs3BQC at K{?zE~D~3p563dR|?!GHke-}A7p0z8?2 at YL1^-LhT
zouZZ7WQ9o29mN&R4%>=vXC at ejXWvp-Ip?9qMu>Cu;)q7T`I$kW)v4(Yl^z1|rUhPT
zy$1<zRL@|cRG8 at GKz1PzuTs#>g>#xNMvH3huYv)5hqY$lYvtW*`El#(N%=AEAQuo$
zN&&QPt!^LBf401du(=pmdtco@=+v3$0mtAEjyy8OZtRoTi10oEQ^OMOoxqo&8ypnJ
zFm?G?E*83_Ll1fQ>SCxRRp`U{;hvZ?Hl?P30WzO6nJPpt)PHvGr*^GymwV^_DeiQz
zf-A1gy*#74h9m#6|MB^2?R#5d%{AhLx5(6qWsomne~MYaIGe-LSq6w>|D*$8S=7L}
z%Qn}-LjR3I)6{8cn)j-v9JWbf1%AJ+L7Z<~U#QH{*dWr!6-#-ajFS~E4Ue@>NAdpM
zf9&WHpsgjpxXecu(?LXkz&i}!sQXmg==&Za5Dx|Mzxk^m14kQ!)Ej at 8RJVqy{ruB-
zSK%5_e=9nBrFNH8snHS at 2LmBqm|L4iq+;Pfcb^Q2V8oii!Hcb(e)O1x{R7dL%J2d;
z2L)PjXYoQE6F6G`Gy8bkD?2BK8!3OAsDa1}VZ|__un0~*?9T_?A4%Fsws;<8*%x~m
ze~zitQjVSu<}+<5b56~1_?@UKUry*^u!SMHf9aHF^=H)=Y`DKV1tL<k<pi-5Vxh^?
zUXqGPO(r}I%8z1|5pg${ei;hH^j1Q*Y#ecnW&XP|W@)^cgmHR%{y$-lTJx+V{H{YX
zk0f|kSHA_?+Pe6fGd(AR7VM7DENK2FgZ0G^qMCaJCpLG0Ph{CP6zRB3n<%)^K8E~S
ze at o!c+j6_Y2A7m8{(;PK&4AUK6(CP;rD9Cz31bJy{HhM9Ai at D7Ql$Gr86&7l1yLqm
zS&Y+YRLDxd20w?DS~PR$y<$aB(#uyXE}7LOFZ?Y(xI;K47|<^)Im*#Gh0R3fDwm7>
zU86~fb6Q+~ugwEg at 4K<S(#7!6we+6ce*)XwM_47!IJ1cs1e3UCqG4BjWJEki(Jt+i
zzA(gCO+f{JB;l0&RyX*oJ92r6jx*27VbU(W4Xd9ZEiSAa<kNHZnF{u~Skb(BwLs$^
za?69}PKR5a>$Lp~)4CAH(|Gf{2;JLzM#Lw2>m^tG>A~AlbEo|)!04K<v|hlJf1~zh
z>oHk$1jeL{F-&M^AKFQ5DyQ&0?)@L+-=pPjFSIgT979;7xjF}s*uNr$nm?oCuN1fK
z228o5sP`I20>bHZNHQJY(b4|M^Cc;)1gX!_%1lLt{bQ>{f1*=?j|7`+be_d|7QTn+
z%#`X`9z}+Q(+y(%w4ENk^+}9^f1Dl$0QYOBh1D2 at f90fM>HaXGKx%}a+qyb6oe<lA
z?8|a_w8FAzh#HMAmpYq7EIl7%C2H}l65J?*%~)QXTr4)jCQ^)cU_7pKT-B)FlF-*n
z&ShAe-R?9MzT_RKeqqdAcaSFi^w?$7wAhB)j*Gi$hAmOi6>D2I_f*oZe>mw+Zoj+H
zlNgGSo*j{QgmzTVE1cV<n24v58>)y5O7L+jq&A8GB at IG`GnkfoVuDnHt(wDRLHY>e
za2b()HDLkM;t=Od0`mhMkv%)$<Fv48yXu+H+{E6|SnpbjWAOV9|73BiIPK=9A1uIf
zEF+ASOyqi41cTz?WUaHde}c+eWQH|-Z^(3iw|afb<(Z5TJl(zPh`&u{RJv at VzD_p<
z5p3!wPtT<#SgcUa+WpYh1^GTKV1n&2t{S0~{aBnhK>ssYX1^Tv$(yS)xekG9{@rGN
z0V%!=eIUfc019t=rz2H at jBI2dDU|<PM6r{n8Sv&~wAki9%sN|Hf8*vWe|di%cT9yn
zZJj^6eE%}BiuVV^@2_oX!*jEDqmb#g*scK8W{n?6 at CDX>&noRh&8JO^&{ZVm^=i&z
z=%h0;NE!y!n_ymI=>50&RQ|sj{cP&P0Y0hZr9~R$8|qlE3zlI9<H5!_HM~lRgN0>^
zALa{Vg^d~A#lK9hfA_y89u37QTR<+c0PYLe^tIdhIaE?9BKrUcwdi`A2Vs#I3}goz
zdT!3*U5`mpanU#KdeF6?83sMV>G{WQ85>glYxRlZTuid(jayORvyWcQrhMP%WNC6(
zj at S(dgH0&o5r-M=dhh1TzIFkR01-KENt!U>67S00_cbSXf2r)?>BNTa!q!IJJdHGK
zh&;6N9YeQ?UC0ED-d;s!I8B;l$4<e2%J;Y49vKM&k-qZIH4+p##YvA at j}8dHOJF at 1
za=Jt7lIqI&+bRJ^ba>+xZ<Ji8hsHi&@{tPr{vzLI9OHH$u04v!ad6=q27l;$Nk+#o
zLyV<;A7W-re=x$Ep0tf9+SO!iFS{&G0^bE2gvL8Gg#0A{k2Lq=>&(Srv{n=SB!GUi
zWL%l>h3#k;>fTb$%k<gt?JPyRg?o#qc*Q<qjL*F;Y>ev*M-QaKSVaPEcpwqJg~F7^
z+cTUA3cE|AhFc8%_z~yaBs1}cv*u;lmz-C`T`r38e-D0R-6bXO{{i>iYhJcf2nm)l
zL3rlx^S)4v&0M*Yt#;5(g1?S!zhyaIp at w<Sam863 at gWYALkHGju56gl0}p}dN1WI#
zkl-YH0v40L1+O+?9>;rTGlim3Y;!Wx1x^1B at 5;rq^fqh}#u at CjMc(ro>4$elWdj{0
z|Cjc at e*)N*uT;0KL%z`Q8NtU7ScQ^0p}mKD*L0AYX^?~z8_Gv|#h!N8cp@$&R95Wh
znC1-q3u{u0WLK)A;)<Z+Rv9X{6)T{Yfm&M>Bna9|x_j%!p9$M}sDD!XsoK=4qZAIj
zhpNj8DfGO4l^W1HPZElQZqsUEei(jH=l at Gue_l2S755XGsV*6Q;Ib$R+?{Yj0O$Af
zDJ>@UTqHOXzbCrKWupEgK at 2+}y2_?qWg{QB8gYe6s!Nmkb<?z_g2?U#pBI`rjjd%T
zlH at KN<U*;rrO7hS^3;nHQURm+Xdv5w|F7p7&@jqXOH3SXr{vtX?}j&&y>6IvY4<kU
zf8Q6DB+B`xi!xhWPBB3y=IyWH<n8*hlyUzAO*Koh)K^%{5cR$k#htC+IdS1_C%&CK
zG7FRiSqp7?7l3 at oZG_1RAd&QTGXaV=&Z16|yBHBwO&*g^sA2!*ovc)^gsXXstF6&*
zLz#jtsGk)RMo){pL&t2P>aZ50)lbBxe{y~Uxg|65Hq_0j@)a8A{^&r?2R$2wKRmdR
zEg at DwJJJ0kCFaU~b?{V9MAOCuEfTE>5iu_+qKb3jXPB2IY#{NYM-BkZ=bm2>=FnPb
z>o$kQH%&yiZ;-87Q?fjyD9IB%EY$+}DFW8_B*);WVXQmyZ_^4A$dT2cKa}b!f7pLx
z`zvPJ3>u^qBKPC at 57ZC+uPvM{Ki?jgUbV?7f(u^rR%WtIJiV5 at +|<^rIQx_4BlBlb
zIEhHc<8KDGNLaptmj)Ae1|o5<+`39(VUmJOS}jcs3nH29J5k(jxHk!9Xrey6K$aoO
z?dQjljW%BT(~DN0P!QQ9L-u|}e`(W6=YhpCKS7H7sCj#UN-%|tl(T8d#(7q_`o?<V
zMtiHALthCCPxH0gLZ%n`lYx*7H%#^+6C3ikOJpj4SnB_>80Z(46{Ne9#;t#CddQUA
zEE&SDA_4IEFP#<IARutCDT at Sf=G`v(shwq=nN3AzzPw&yUGDtMh#2aPe?tUij1+^N
zIoy(`|G8;iqdPlKes>Oacpo{h=*MfHSE~Fm`bf^_6{P!;#Jr-gf at m0-{h1c-^SBY@
z at Z*e at Fc3}kAH at -*Lvf+rBeAHFH9!abB(vE-60ZKSYs=nrO$>`#(em at f$?Qr-axBt|
zv8e7+mRET&&|>?oo&Dl!e++sI=7*wE5%MnL%un+JDoo1MIsK}*=O>Of8)WeH{6!VO
z2Tkc6CT1Mvk5Pi$Y)DZHZw%&n++BOr)`rUZjo{G*+Q-ULnAKDaDqY(>VXh-A7*s46
z0hH<267NiCNIVW&{#2jA#YpgN!gr-rvjmZxb_7^dY#2+V7;KxJe-7Il(q^gNDD1uV
z>0VcLmNG&)?CNC3edm=RY{^~hfa=a?$4|MAa~Ted!S_r4`_Xl>)?dL4=rifQg9=uJ
zjhqJ{1~8%0_B`-RaPU-4SOUT3G1Ng7QP0@*dORvS=k#UH at Uxz2*5rnHF`fXxkgBoX
zHCEKA3jUO^k+0$rf5Nu#o8v6T7~Hj#o{WsW=J()}t;<2%-;SLB+fUz+Ro%l0_Kqkz
z&t9d^AXmAz5_*H2ChV2cLd_pYso(vmv>Om&Mw}9aU<uOvFfn+j83V2Ex$O=e^K9g&
z$HoYNZ*#BmAHvu}Zy3DqXBO at -AX*-r4Ai`^>_xW^W&c21e- at F)0EKjf7&a)=t5=#<
zrMbor$89tvfQ>hu(p4a^8dO1iS{U at ilfq<6d at mEh4Inq>y%<PNDCzf_r}kU0C$Jv(
z2$KJ#D?urH7-c;v6P+1lQVLcBgxSY)(NP;TyHsO5SOG>pqx?h=UQr8rDev(JFly++
zad*|6FjFSTf9)@2Qt7zo3i3*|md^`hWpP~m6{gSQWg-atGeFXje%vZABi>*mV)&vW
z(a6}#<<p!r)V_Vt^$=ezdVAO4;TfIufKwgL)1+)4^d-8CTS%7yV-D(9m0oYbbsTvc
ze_THdBtWBF`7&fg*R|z~zR0wz4?u>BBes5j^=d=;e_<DLLX92&PF3OQ7E-yOh5XhL
zbHrMAK4fMh)!%2+ at eA(}s?A`O*b|>~3%|q|i=+5Kwj&pCmWBS;c<cbq0S12!fdmTH
zH22KK390SwOqVK2emLPYE$2w+0+3oaq~Xu`O3x!y&&@ejkBQ?{y{O=CDGRy9=25$h
zqR~~_e at 4ex3yeSONNaZPmIDzn=b&Ir14(FLqb&E&_lJRM#mP-D*KQ0Lgj-U?Y;GJ6
zQNlz1hRK~C8ixL`wU!&dak%CUxN%{{a*;IX0sK at oDCXPjzk%zbY=QwZDClb@^^4zF
z-PEYjL0y;O#uCEZaSt$rkPTv}%hnH>3;JfGf23jLY4qY=0;*QpNnX7mZ3Z*2MzF3P
zqp(;f1)rOc``Ry)O2sS3KJ8dGZmX5KCXAZ7MjmPq8cx!#*3$R?M-_XI78jQ~@CNOL
zrwsW82+BAmC|a7|<%Ys<&1((=w-(+*?;M0&F{z~pl0EM0%1FGqBKbzb-cu*Pk7M&u
ze~Wm5>TD=W-7^8U1;!Q69cag#_!s1>rvtR!SE!>_H&t at 0+^mADUb=1$*6*MSZDgIH
zoOwZwWiJ+3mum&3r~T9l-UH~v at eepy9wXf(5l&P#wkHWs(Rm>9x~fYkk77bK8i~L$
zv;7|xViCA}m-}OJ6Ls0bkYuFKHH+$Ve-S^Pu9wOk;`d+$&l_|k{_>na+o-_p+(nvU
z@|Rc&Nw3}^xSij1DXyZWnQAc(VnC+KuOv|%MHlE?)y#iPyEiz)4><hjVg#Lu(kUIh
z1z{+Ib5Rj^N#9dTseR~E$dJ~!Q?h~kaD|1WF4On*+z+(}Yx?+PWJbtn(g6YmfAFq!
zAx91siP|+Q{l2w3Sp=x~y_Q8BA~6CcHpvvjmC;QqUobmM(Q6?3hCC^9g_7#k{3?I)
z=Z@$zf59w$Us2QH)}f})ZhHWfD#L9Fc;)-s@*j3(uh@@R5HWsq=L(yhkDZnA)Y9=A
zyE at Q}42 at -GuLM$5iO}m`Sqya9f0^csX%VW%aL8fHMtdWBn3p6fFnzMg!}q}^d~et{
zrLL~O at AQ`Xv7FJ7qwBT>qNs12=Q+0hm_4I&m;gs%u_1D at JIwFdv_XtW3mKNuxACcw
zA#f7oIK9_=yShn)V(`-Jw)QXF*{yF8YMPi%XLEO@)HFSoQNbS7%uLS^e=~-VWy($-
zWo2{)-`z9oHyAPBI&b~3${aZa-^RW$;UC1>(l|!jTq4R1FLI{jL!7YNqjG%0K;1zt
zz~QKf6GJO<lng^dzjo}0kfU?V^m_(_j(;Ekjt!q_o)i;(0|T;&cf^61s}*$eRc?K8
zv9t3l;N-uV;ZF#wG9~^|f50xGl$3)_4{s-(2^x6VWz&Q16!#ZuY+QREce?xwd<K;z
zX)y!urIegH&Hmou0-0~6{VAqAb$8$(h9QMz)Nv3+a22q!t3orVOo$Et)`-n4X6Ak}
zOI{W-A#WTapdb8@$Rl^d-fW+#mDVfFmaJOSz($RfLsHx92a!3Ee<i))NF%CPT6{+r
z!v^L!(CUUnPyOE>xC&>l4(npvdMnuE$)|T;8Oc61lB;ezKJ5CHG>(lfxUamGErUs8
zhsq|0Ka=<f$Ei8yO~{a2R>P at iDKnm=_E~a+gmO at Ed3^mT$c2 at oH4yM+gLc9@B)aFy
zVxX>%)e!c+gqhM6e=7`l{tB`MUl#}4%?yPQyRHavc8kNJ&DBGB+i`Aqs8yvMlll$}
z&10O=bF!g6&|4<`6QQo59y71AFmngsKniJudJK{#Hs!)y+N`6Hd~=1nqSM0FNl(nK
zFd#1bM(N(JGJt+vXACJbPeAAF#1U%20bdyjsJcTmLnk44e;Ee=taE6uzLQZXaw#;R
zIu2y_p~*B<{msPFcuw5hGzXSZJ1+Qxg}etAW!|DXXSyyK_^|XrEQ#cl>U9fpgj+sI
zz`Wj3b73WuW27nnw4+vef11wWyP`?belaDwpcfjaiWgHt?P0^c>VwKAnH(xEt!&GJ
zdNZ<oY}ckke^3#U!?0%tWyTWW+bti!7>RE+4`z+&bNFdTa0jGN=I%)9Z}uIM9IW28
zRjSkq>bc;}+Le=lRLH;~38DpSctWp+O)7vVme>z4zOxwmV5P;fR!`e?#6x!VoML+W
z8Uv<fA`Dd30|qhRsEltzBC(Da5lco%mr6>8 at QdW<f6`**?|+=Xd_VC}JTVwb{lGQd
z<T6N9>h-*RV9Hs(!MN;8HX9`ub>4{eOz`qiMxqBsK%XnlKQp9)z=RvXgcv3Mj3!_H
zLoU at O0A8w<fOVSVNaV9ETIX3QHdV-zMbF at M94(oH|Jm4kCJ-x78$HR$5o~hEwc at K;
z`PguCf6h;`5SH_$?lw at MZv;vcl8lBjO33X!Xr{%J=+4UbNmG(GuVqev^=0Z6ZY0V|
zP(>Nl3FpjK_?u=f_POW_Y4%IF{oy6X$LbikIi#o1)2j*#T3z~08qb>&nU>^&olfZ`
z>Y^ZHeAhkn!|TXl?BBYie3wsDx2mVU(;Ck8e{;sWtNULnp--U#S)Tq2Y>3LNSz^sp
zEsTg4r)NApU1ETEb9 at EG{X(PN8OvwmM~QL5G%QW1SW^tf&4 at b-kddh)6{Xibz}BF*
zJpDCwo-4hvx$2J_6CcC3vdE_{?BC-H1#nydXsiCQADjK%^D^wO`T0kx4CbcuGT3^K
ze;F>qJdl>1JDU6?_Z9JV=7An&pwN;uus#M`l+R8n&&#jm at -ENB>c8>&QHbH|*8nV=
z9mPdRi{}eqQ|T#aE;tWYz)m7l2Ll_m2vj=TEczK-0TW0p50vAMN;>=w6YZcS3WT`b
zs~pCRER5aBdtV#rqi5O$x6r)vZ23que>9ZDz~M^}gk=D56Idhz0Qp3%jk9ST8&iu#
zOE=g~=nsL&+MDlM<-7NscEUcXqlMIth5IgXTZM;5bALvdYIV2~=LU1OV3Ug-@(Aq%
z$^yfeG+A92WdiOwi)-fQz4feyu7(qUf`46_#FL$liXIr>SvD05(FOh9P=RfefBg!g
zao9kMD;CnQdO!Z*q+qoZdS4?QnjYmjJBCo}v$dgyU!bw~h8Yjh)59%H0F(`k=9lbK
z7d$o-g<j&ZUGD-vf*WTtG5~ECJKJ0_=Y^drT~pUUdmR?;Gh9$|(L(lh(H^C^E|uTG
zv3eYSdT;$GHzc&S7xqvLg7k!af9f+$qClU_&{`5>%p^8_JkkV$Nv6Y~x81oXxV~LX
z(W_jpQ7iO<SG-6bLVg^9ug;Kal-w1!UE4>7rC0vX!41*$@h?J at k?$uCz at UsgG+m!e
zq#CE(cn!@PKKjA?Zp-0?S`Dl-Q(7JQCy-t~pHM?6rmzv(I*>MLH9C4*e>|I|Jd^e#
zl83s{R>1f^8s^}Xk9`s6W|@7g=mSl9`R9a|St5lBKRhV-%ut2auqyl6dfGfVvLgqu
z;NoYK8$7J8!I)|`3z>Mc58Zg=PDyvzlqP_O`rK?hKb|IN at 6Lzi#o>8j$}XNz%cs)#
zBC@}i4O2u4@(EjZCTII~e>Kd_rC88*g9=StZ_<+O*m`{2+2~{U!li`E>F3SSA(@mg
zNu_ymm?HekxyYMg(Z;RByG at S~tUI-XeK{0chtv)4MK4<~>{@|o<cY{}jZFOvS!%}O
z>*5I?L5TLZ35dTV1nNSUmO4_0F8k{3PMu|@PFVwCU3$PjBh=gPe<fP0s%P at pp<GRu
z8-bWcLkZGq_UEh-IsOWk3fN;bDEgd}Fud_F@^BZAxI_JY>~trvECb)4U;XBO0>Hrz
z4I|<-C0K74f<;C6Reb-8R7MivY^hL;c(_#YWx+6&xdEW37>d3^ncQLm_-!n21Q%Sp
zKn&~bpv03G%c6iCfA==8Gqrq3t~!J(;d2F1V!P1ei5oRTUh76zLu`X;Y{dD8k;mF6
zG0vg73cz{5WS4BVH`zb=7Kv^yr_`Pw(6cx;aXS4 at RZQ?x{c&evxMD&Sx0b4LOtoKy
zLMLI?jn8be;elA5<_h_G8qxpBglnAP%QI)jp|TIk$OGPHf0%<oF|s-!e6p}e9OwgB
zHAbc!X9Mpw0noXpMF<$*0#q+Q*E=r^W)qRTycFeu-Wff;+?4Dcx{PthvBQD1Gbc&z
z<U`g{06XA%a5)ZLez9;HHW{GSp&a;ht=ZzHc<?p;O&)7?&MO?v>{rVC at rPO$`R=qt
zqzV-*Q)@v%e~2~JYF|Uu;fdH&Yj$h8$cM5>7_UUtpWk=9Cl^=vXkGv6990ynby9z=
zVs_Tg?F*8b!*P2Sj$R%d+J>nxW*k?#D9|=m(cimD(<+XIcZ4zyG;AQ&tim16aVLZw
zFd+En1$8|?YV*7YF`VJ9 at v&R15MB-e{QYT49&b+he~LmrIA((GvRZ}y9|8XG8UQ&e
zW3yPiyejOX3?})n{AWRwYNoWvxpS${x4%DJs-ldpIWWIOJ5)95nj@`z8^n0+O4}r>
z!lX$HyDUX{>Scd1-}X*S8A%eFNSOlh^_tc!oGOVnjR4JVx85pNU>1pXPv at g5WFc0v
zz-eKge-u%C4~e@`iOm9%W#2HU6QxYJn90S>0RtKN(M??z*;25E;qRfr?5#ZrR<Ia-
z5U@<W=)>z|>Zm-guXgy=NRgmQrzG%F7g9g3s~(``N&PLf^sxAhUL0hB8j%kK^&|%J
zpWy+JJghilI$C4p*@MlBbyLs6U$bkUl at Z?(e{B^IsuJBVDODFTBvCN$@(q`UDoYWn
zSFzX}_!JLQMdsVWigwEy>nGhOaGXp7t!l}w7Br0?57Rs1b#lHrfBRA#PBLog*8U4j
z{C!-^cCUI9`!wLYq}dOOaV=Mw_f!U6D2#D79?+ewNp|zWuI-*C&UheRUj+_kPDiy8
ze|ny1QsVj)Ptk6Gc$>n!(=I<{;)>-ncT{Lfi2~hTi(Rj+fH~{nHekL^gOXJSwsT*7
z`!Twc0*3ydKBGx)LKrg~B+lm{CLK{lrH-ezQ6bp_R+CO2FRnjDB_F)W7e9IKQF&b0
zV}Ev1CBd))NqDJ^+ZBD+w0w|cDlib^e_$+pqSzLXp%F+u<(A>a-sV)&ok_3;3{l|&
z52M_I2P+0(A|yJqG-L|DrHW||PfXHj%|U;b6P6DGq4Tau|8C!R=Sgv1hQ<1jA``!z
z{M5q6^DQ&yAAxIsSjJ<59p?h>(n7u>qMbqZ$_PwXy?Y3GfysN|odxM(_9Tl>f25sJ
z&NmWTiP(v+rS}*KSU+(odG~~ax~muult}C{P$we|^#t+~0h&N_=%GcBL9#bgI*esX
zWn#kMNC!%$q}7YUx_zX>%fi(veVXdBhxSp&7(duIwe7F+%~Embbotz~mj+7qC6S$e
z*|VP~U2D>v0T$%#_UcvR7OEdDfB7BIQpa2{{ez!3cj{yBt>m6*V-1EGI_t9sJ&Tn)
zptma!!YDtHr>PU<NA$1uWvNSe!sS{Sk^a*TlMRcEz?MHwWDrg~N)q!;`=)jp*coo=
zYF2p&HlePyS|rvm4dCMRN_9ML!^UO`3C4J?P7Do01(miJN~WxCU(DsOe-aXGqxqBG
zx_Tm!RpdrsMz4eNh|aB#7CQaIKt6PgM$?)B*V?|gR~|zc^3>F9+U!7JPbTrxn`lvE
z-{E+u2UvUAyk%9jFVRQiy?mZv8`_6xdiP2l at p<Prs89Lf8V>;(AtnGEjb(F~%CG~{
znOYl5a<Htv+^5!rI`^)Af146g`Vy!t*GkMEdO73QZB_;5GvD&g0HmlS^*@FhjNC-I
zn2$J6%N|SzaGcQw5e_z?Z=-C6l6;EAmbGoCsAyfqm1mD0b#<lq+dUU!QoI`#4g9Z)
z-53t#RB_^>BRq95(F8ewZYnWIw_pd7D<YFVu!6fqCBh1P-l%Soe>?Dx%K$G^Mle8P
z3aX0Y3?LId2?s8zHU{4d{sawaCecX`WfRl>U%mB~-!6192&_5nF&~7IKV4&uXaWr|
zUTgWLU2pq2RBlxvQQ;bARrjBq#S`Ms1V1HxH4*~Y{nsQ_Hi}lW8tP!^4~466J&&GV
zEKMF$zFo8pf~z?ce?uJ3Dl%ojNk3A>pqRaK+;mG_)H2n}nQ*^}6RCes)U~Z%t<JA?
zbgQ3SfTOvXT36rBL6DD$l7BP<k1s9m)%o~+$8UH+J3R+rx at +VDvq$?i5wfBSA3HrB
zqB2$MVX#MlA?Z~=em1F;aIYY+YL}UF(VTi!KF_3Ujj*Nhe?>R^weQ!37av>tV)RxI
z*_u7G*eI|e#=+G!!^Dq+F6GdcnoAgPLkth+{~A=HMdQ;e1y1zo`K&IKXE2a}b295U
z3|R<NdKAWHEs1aF7QPYxT(Is8Re)S!)DlkDIVSQ@=cFkuTJljqH_Odlk%>nca%am&
zO6&`)t9eD>e?s-y)k%b!`T<L%*TK`_CjX=opQbV)INQuGtq7Y^wVXk0z{e+LjM+~e
zVS(mij!HUFJ^K1bgu7(zCkJl9-7TlrsFAV<9PC%~aK&lhV6o#zwZFEZfk5V%5qJl>
zTrM7iI7lz%GP@@T*u2k=H&nKDD!&&$FA;;|8=_DRf0q$}s;_rXIjc9ls2r%_GS}z&
z`NSgoih&CR;b}dQpHAx??)U6Bp)w1DcX&adcla}6osJv{tc4=<dMzA>eA|<EnB(+a
zm_J1L;(H})+n4Vs>`(A_NnV4hYEg3MsY;yEd|K6JkO*HJJb-a)IKJTc4c4p#ZHGk6
z+rO}ae`SMU<;TqVAV at +6wA_%6(>S^LMft`Yko#^-9<F-;g3zQwd8V3Ig_^!)e$gB$
zMFsN at 6(+K#TUjjw=^c4aMuA%kT~HaoxTgAKKM1&SST_>_s at N1i&K$SOzU0Gx`OOKo
z_9VIQ-97N;JQMy4%7P&}ExfCnGv`Ag at Q>%(e>XzwEN6>wv|K()<D`+tw{4clTx5^M
z^c(Ta)yl27w2T?aR<3qfIl!)7WR6_8E9UfZ&W!&sll-M8&D;@hn@?1<lNQi+R6Yt&
z?8A#Q{EQv})&n1|D(Q`sIg_R_4^t_02CUtAj=anM<$lX&eapn4)|iYk*T*&_c7<$o
zfAVs0>b2cbKv`FN1^zQClT8r0JE?<Kr?fn6>JI#5$@o}8pDvCNx>7wU44GwysY=jA
z8yij0M}Kh26ey8kzdTphUa$Wo;Yy+GNB>KhorxQT!GyWj!hHuSb+2zkd?EqU#T13Z
zbeKgURlMLa+J8Q_2I#_61UrbaSQ%7Ff2qati2vy_MYphjRs;BZeE%}sYDbbp{=xEP
z0E4`Esiq-{iqNp?tZbiO at 8|%yN~nJt_5QidVK50wau#VIFbM!7DDk_DV5=s!M%!0f
zul+T?jJ7B?TErNMdzehup5qkgvP+k3KZRvRIePg`1rP730NwINN)x3(G?i6we?u-*
zdC|as>oFcx#NSg=znmDN!pRjpakxbvpg0E8i`HllxGxH7HICX2RioqbGF*vo^F%J+
zH+5k&{;uJOS&HjZG2AoR0OytQ4tBz>g{vl6?q$XHGDYBBYVgh at a3bREaxus=_`tE}
z`q3=Z&y_}Ma{2C{x=9zWNtdp1e+>Z#j~eeK*}nI!K*%&;l+QNP*Cu9eqsKYx5k+Ld
zi0s*mUz9HOJExp at 2hh;1tg7j?e0#ZbUj%W6nqMYy1w2FkIY2>BC1fFAjY~ev9o4$V
z9tj)x`j$znZg+vUaC`n#ZxUM(@@BJ<mYI%AwPIhuUUX~HiSAn$+KR_NfB8|`{tvfR
ztmdb)<(}vK${^yPMZR#QT9bz}!=%@!R^G0oSsrKisxz<0?#{6Lz^qiCt*6)(4#8yN
zTYVFt{}oZK9J&_)`Co15S`X)|!@97Xi=u?`OZRo^42<vBi-ltCm%eQzvI2h<hpHtX
z9Z&;?Y;9*e)16{-exhx^f8bbYNW at t#GaecU-Xs}j;^!_on}Upe7wO-brswCC&QJ?I
zVjeFo!#*+x(p)N}(*PTwMkNj{tEmmS<bwhG98~CreJ>*JuW>XA>0YRPlyi&L;jgiP
zzbhwi6bJ=^(F&Y?FWC9=m2di_=K~@!$-ktf7GDOh7oM4UOM0fQf9T(M=Ct~M16j(I
zp-oozyOJ-=V0#*j`6Vy7qr858{tfiK1S$aOeSmFCjrq4<VG|ZLrd!jIU4D{^e-nyg
z5IJj6fI&#?^*6}uwZL2FUnX{Dozv=Mj-vsyU;Fxnnexm9RUHEzo}!@XE4ILihd7hJ
zfdRda^siaLEuY{jfA5T0TtAI=aiii|ORT{Ja|h{4Evx}X<R3Y_o=r4w9#O at gCqVp8
z6j1G=lTj+omNPl-Rc=)Pa8)b2$soN at K6I8j=}TmsWK#en01H6$zdiKe{2E%E1Q1u5
znxT518za(_gX-u;Pgg(_`}M}jw$J<C$|JAOdX%`}U+kQww(q6z`hPsI<6R)@$v=iM
zqwgnM0l^PoC*>;Kq|LFZ_HWdRyVZHgipX_Cfo3!0A`^SLjC at eA8H!{&xa8ScBRG;j
zri;9a5h@~yM#L=0KwR0m-d9u*9WtOqahKGw|6OBm7udL+5JpHv{SS(FR8+wE4YgNY
z at E-^uFmsp!+X#7Jg?~w<0D>ldpQ^(eIE6cxsb*=W&X~~LA~}Sy4pzYbwKsn3U2uB1
z${3VM0*ok5HXo33tp*m4c at 0XL4v_|u>3;wn6Ep?gmiYb?c<{!@xy}>hVzJv*ZXcL@
z^{>EM=}$oN$2#5t2xCrD4 at m5jX$y}9*&lKS+pPgBIajxKO at G0p%=7tyOF?N#IyAb3
zB#vfy29L49$Yw<|S&*T>hCx$#uq&@TL>-I4$|3m3wvQ&e@&?JeN|Xe>Fs=GiioWnZ
zxz~JcvpyNHb4+55=Zhj6GVU9rhK_Pe9lXZ1 at G47M(zN4y1xYn5-ujHVguaM$#AG(`
z>`$lF!Sn4e7k`8isORd`j%aSq=u)vW)0;`geCWnH(n+!Jsi;;Lh1%dT@>T{e>C@~j
zTV7a`PV{yCTs14(JbD45vDv#j_nT*{z+&@I6)n3jk!wp^$n`k at OE-a^`RD~ofbxrc
z=-QtFspw1$f$@e7)_00VUp2iteG#(RtlBrTiYLXuA%Ak`d8(?JOjIkLcUqDZ#c#U$
z;cQqxWZ!bDx)dur?hgSH*_9KxZ~OL4BJ8J&L*E+nLKl29>0yq_DN4sg=r16GFlS{P
z5(Q3gF5yC{s(f?w(=Z&Fs;E|Q_BOUP0)`lT!K6s#qA7Huy|l)E-`<2OGDYBSzZMKQ
za=yv#vwu at st*zweTK$ZFT}#DQgzG|bW}5_ at ER?@xA at f34l<o1psgc at 0dcdiZoiwi9
zD-6~t9vBB(g|H)hB`{YM<f;8nAn+Bu;?nP}P>J3fwu)IDhH+m<nWJD85l;a$!s;zj
zSwt-eFIji4IxAN6L%7gX{Z{#OIeDkOPr07UW`EwL9w$S0evPr-cM1g3j+sL@<TuUB
z$-Qo2py0bFv8p3vqm=L_ZSwZ0iAqZjTD9po3I*dF$FH1yN5`sdLMg+y%Hq%#_QOjg
zu0lgQPK3vr!6*wGfB-HqX}_|lt=Qf+dSPk5t^VjxFJh7w@#-0nh at sMl-}|S6qFT%P
z=YPiaa*JKxrCY3~B*=@aB3Khbdhx1xiDWOfm~)J%J>Y?4S&#b=3ElJW3aKgS)gqD5
z|1OT+#h9%T*mA~f<0Y&}qgJ-P2b#Ot`lyB|Lgmr_khh99)Uis<!f85#k~9w0%_?)B
z7>Z1p>$Mo;DzbFvoX6D at Qv8dejvXWR&VS4-MnC_{<1V8YUm<X5G0zMdFhun`4-=P3
zZmXi}BQQZ6uuHe>2RO>Jo!B%vFjPRKCY-6EY at CC@)&<f at apE2FV9fH$Ou?rkPwILC
z_|k$LhgM+OsXd#tc~4t`#*0lK?92R-)c#xh<OKm0F?If66|E<6Q5LpOx6<Kl;(yx-
zLqENhj|7K{{OyB=z!H^HZgcjjX9&=a;_ZBGU*tr35;cEyMLJ9PwT`F2;UM1e>1#bG
z8uV<@mPkF!uJ0dELOAz5X^EDnH|?kz4cZ_93qPG{v&o?84}5W><}3-VchYmRSaLX5
z-+9?Ti6L{)M+2>5<NNf{=)##Z27l>rQpo9DA74H{78O`k0T+1pp^wS4^;<;#wG373
z?Q=_<g(va%0JILo{@QL1-fJJwRz%?`L?G2`ub`jjF+$@U%EptOmB&*hT7-;B{tH*$
zgc0hgcsib-I_Jpp*2d(o>VolxWD~C-7^Fd at h$oN6$3MGCrppHcI43&cWq-!n-ba>Y
zl75i at MgdphHY-oDnX*HeKw9WfF{R8J4cB(78S_(v1L^-(^)Uj)u#AwI2ElXoP9-Bt
zn-id at f*<uc*;~lz at JY|j#X$~MZ=de^EY*j8Pjo!P_YTb`gXjh~LR6z)>dQ4<NhqGz
z#X~GJ{{xDZ8d`}%A-=G-4u3>gY2AcJ20*tSpX8BMa)x{NP2DMvW#$-7^Edzn at 1z0~
zdR at qPVyo>;(?w(@M=bFUh$i=wc~j7{Du01zdr0!iglOKpgYCChd>4VNi+{JvP8t_%
z)3u<-oAKu9Z)R--vA`}N&3*TU3b^+4NPYnZS5lUocnoBiqfVk&7=NXzxm at xS#|5`g
zVzHH=+$ya{cO!-D2Q#+uM-z%Htw~~9&yO~zq-?(k!cPe-7sPC?g}(+YabtMSBIP={
z$ARJk-wzGLp;)IbOnOW`f!(tmN)S^7u*SO`(o#xpnZhBi*l)QZ1B?sKE9$T2=rg&=
z<7Axo3!0$Xcp9QIb$=mRSc9j$RG at qQ$e5o4g})KgR24Pakgt`LTzEchY!$#4an-j!
z7}EP<3BrHkRu3sC&v)24OXGR|4lw3r6Vc6rl4fUESsc_5=MNd8*jAt&LXJhW^tG)g
z8Z|ntJv-8_?uV0>m5?nEkHp#*mGz2w&<ZEOgvPS04Z<U}(0>+R@^gHGt_OI`IVEua
z6n at TY`IHKWh<o*~T*+$Ur#Qr639|jtjav~9`~W+%h8PNurd!h*ep6(2<=dw`jwd&=
zXfguYrU#JS at 1k<2g}_f!wz7;2XVk=5*l+#Gsq{O)Zj{V0B|5b2?(Ubej at HA?_Ck#}
zTOTgEn3)kR?|&@-0$Ug`=^BSP!{5-6JFxcERitH)C%}tRE;I*`9YdFO|4olP5?YZr
zkK|#ZNiB~ymnTGa1GvA|``AMXm(h?)7R~a>dEi&4OZE_iWi|C(REFsGd`-%^GWaZO
z=XisEtAxe<9}yhvzOJyOn#X+lBQ_6>QBneT!-39$(tjB%^HTxl2-KudNCGK|->(S4
z{S?V4czx18U|(T$1QeP4L`oNXc3fKtxX<5f^;ZE}dOMkO5W(OH-&KJBslvz%dCRx&
zDTacK`z-WT`4PMJC5-v5%?x<Uq2Ck>t4$(ch#zrV^(5%eo)bG&AV^yo9`WQQktV at q
z^5c8OLVpeM)lED6tcNx-7X<7qh!fYe0N!n}ie03x|J&=?)Ue%;S^V$0h9HWH9dPDD
zsKcx%*W-9QXLQ7JWWBJucc-R}5CDvc{*L60GukP4FTbd<d^{WgbAAN at Oa_sf>0ho?
zbG_5EYd57?K5YeM>fOuUkz)u-kM5@=Wy*Vcc7HvhI at _%k#yYT6Kg!Uf+&=J%@Gs(N
z`H~Uts at UL!K$$2As@{hp-2^<@4W^W!B{(lpp|>dBAUN}9YF8zhJt~VB8=W}^CdD`i
z-6Q^9WrHH9$o>E7ObrKQ92xeb51ajkHL2t3Ue?@R+>upbPlt?{QcqH^JC9BTLc$;Z
zZ-280UGF2PutQqF8vb2mFtzW8{*S?Y%68lE)t3$hCam=~1ii60ES3TbBZXFLF6vRO
zTG4}pNB*3>0X$mj0S%e`PZm>fT}8KpQkbEo)_N7`kk)A^dG{!cRb$t0Mcv_`7hpGf
zm|2hv=ge^-_yf%`J8;8)t2h$vPl&!-&3~j at u(u2y?rQ*NhUwUOv$%l34*g=CTaeQ=
z6>E1h3#PbU2&}=g1@=1~J<!dhmVt|UXT1BYu6*HqL~K#wNe^#EfH*{$c1^NPj*1)@
z@&gCFfXl<Xx{NJ|7->&%6bYn~QrLVJ{0nbNNRX6c4#^}R4lHRgA&ctXQW#+Dn161?
z)NC!#DuWO}m<@gT_J_DMcFt=dl0)gGOAr0N21ze18VQVr`zPY+#U%Ljp?dac;CqrR
zY~wUQbA3DmHp*X+Azv0yph_*7eUD~hSm&S^W(I!XvcAg9_tY?qQp->Mp0fCU0$P4)
z?#!Py+(>VRo{VF(3_^p<FS>bt?|(DVqfwAa-e{0GCoX1?b6%$SJa<_jA=3X%{QBFn
z4OqdTdSxso<HVU)8%qFh)izrhofNhe`FS)|I?0L0 at L)xJj02uhOmLCj2qcPpqo}IS
zN(m+HZ--UN_EH#_aY-+GTVH21Vf`5$YAJB|4 at f{@<Shlvhy|5DU!lMrp?{OfUz%xD
zi7ko{G{bvqnSNdwq6j)vY~tRm<`VijDfYxe87(<eSylnfy at IWL&v}oPFwJLK!?doY
z7uR3Q_GSjhjrxL({9=fz^)7 at I2VCx233N#lK91T^#O3=J#<;t>CNMIeNDgt{EBLBV
zEcb*=Pg^c{j<1`@C{o&T_J8`=un&cISWL6EG`qJau at 7p1`m|%dm6b8jse?7w%nMO}
zGVuU3eM_2E=op at UEx0CnLzYabwBz<h-f&^*+O|VB+%jQ()!5HrejT?j#i|NG<-3==
zCmqPd?8})f_l(%p(I&j at k8bz{S_pHimYWa9{&3_5Vx!o_R&ohzdVeb;2^9tPD|I+<
zlu2~9Tky3%tLU;xeVbxT-|x|L6Wp95d^|$<7{7SJOGX}bGb>5UmjdzILoaHGk$O2e
zD{^Vz{N`9hvCE3?*9_Y6l)6e}#hy2A9x3GJobOfO#uo)F^YE-1Q7eVrg9x=7gwCck
zc(Cu^Fg^@}M7Xqw+<$XRGOwcHRGHDH=pugI!YQ>bke0SGd6%f7I%jVS6~Bgxw!7|7
zI;EaA>jr^pcSyONOAd?nDV5S|CN`3Wrg;kGs?26X7kr=6vZX;b;jg=ExFdIwM-I~S
zlm&<#zsU{zr&axke^0pS3Wx7}`L%ka!?wB at jbr>$Qm4Di$$xfu*CO}?q3!qbk8&G;
z3+)Chr=qLlv!G0oGGTrWdQCw3=X(Azf&qQPT)a6?AFHA6`Tyh<$qF))j+O;gEiI{1
zc5|VHKlYs}Qn)|A=BmF67zCqNGaaM{QWIC}ap{=0Mg{<zIzwYOcz7<;(SCcoaquc-
z?SKvQv6PZt$$yR%jY3Q1SDW=VqQ*Dt$@D6*TX$Hz-1CQTx at HmfXt!QmVt1uHy*`0>
z$A{j|Zg_ci<#xywUkaKeOG86QIna1j_`u=wEih07h`~bXgIWsg2Xe3DEk&wM67URc
z)PA3J&|?c8ZWbx9LDvq^xs<e>lO)csEo&CP?-6_>mw)5I2C;F_&WNu;6CjuJUHB6$
z?jKIzfF)Vop;rSmtgJDIdY+HQR_$uXGl}E^!0GPrgc?-pHx&m04c9v^O_HYVS at 5k%
z>fA&sfcS=Z at GT*CE1*}yEhUqI3Di<X7PA_*{3tH1FVP4X at 2dH-j8)$eMM4BZThk0x
zYNUNPpMM?kigz%ZAZTkyiAzD2`G8RA25`|0bu at UIYdA#u<^Gf|V at ctgzK+p1k-V^|
z^afNVVpR+<wL%JdDE!JFZ)|t?-OFu;Vv8G9^V4s$7JbI}nbV+xGQ&uOGmvS#?;;C=
zkHCq{vdthrYAvo-c_4>v at fFPMx<)<@=@?9c?SE685>i$`dRKn7Ba?6qqpW(QaW=$w
zzv9-4VE?`JXjBScDy`yd at F1^(A4 at uSFWUn%z`AfvUm>Y;Pf!Kj)}pp=oIS(3q75T1
zW&RiLVp1sm_bGh0j||E7@@;p&a(}$PK|U&qMi=34FOsmBt;0<BM?p&T6)p%J04rH_
z7JtcJSq~SKg`JBB`M4NJ5tCb-&SDtD(%4tcGEPgr(<^-o*vZ0|Cm*oY&}|!%&#3me
z=Yec at QuOl?zAL)Uz<a8t7M?H#$)O%gd%V1}p2xpW=6cWCEsE>?$7F4T)+wesko$mF
z%&e|oi4`S!hQJFKEL9Q}s|vNpPDu|qO at CnC#%ov;9)~d2ey+MbtznPH+9--L#vG1j
z?P3Y+0hi)|0&rf8I|?r-TYcBLoiNZ3m6C=UR?PpB&1;Gwu4(|2A_M{kaBKVEg at 1wM
zc>FTXV}=z{4`|!kM<@K0M?L_>g_j)aItA5tt%48ZKXsFckr|)po4cGB=S)%xSbuAj
zMCY9#XA97RckI`i&lKB&-8=kPi at ksZeajhE^sAuU?-GUO?}8zwtf2Vk=D`fYl`^P7
zA}X{JC_*px50Lz87AH$Yuldod!1g+t#P>}CA2RN2vMb*}yH&7;x_tCYE0jHgtecp7
z1~LSK`w<dv%0jY4Cg$Oz?Y#RttAC~Qv?$&38H!c;=fc&HL3KZp?@6rjbr`S5jMnU-
z=haP{jnaU3Q?h8rg|60ZXnoMa3(@u)jWR?C@^(%YzPe at P`u>6UTDC|u?4oCf9d?jA
zr!pDa^K}n(Kqnl$l`jUQ at 4DTg^GP;bekC);<Ab>I4O#TAGA$!fXASy_f`1gtC@(K9
zG9LWtx(fMa)C=4nzbNQ>&g?7X?WxlfklJ&d(|_6X8j?Dl%j|+!3S<f+WlP=$DN+EO
z5PyZR%R~MN$7R3ikq87hu>#NrkI9Wv=MBg%u~Izn15DXd&QM8bzNe<oa3aoJ8G4?R
zP}kEvbd5lZ{%f&hnsM#;V1Hj1f0eqTXDq6wGf#5myt<=C&3N^d=FZw(sgQ(kD>0T=
zi<Bg1O9o?%IE2!|vQSKW99bClUTG`OKKLC!wDbJ|M%fY(#0p*8R7aGLt5fp%&VB7Q
zRDtW72_VTRWd;X09cGcP$l~pRc1Fj^*wzPJ!H@)!ND~*pyX7_qhkt;*F$%q67Von~
zJ%QAk?)mk_JKzuO1T7S)B;dc;LUjthQUilxt$@67mvpJx9vFCh9r(5a`HN4_jUFy`
zVt-5~W(jVdd|lLgP7tGG+WvtBRba&Xy-^&3N>YQRJ0i#vo6RJe;3r?uz>t|%`HDQf
zjH7J%s71`8pRKj~g?~DH9zqr+c~NkWp|WGRjv?41N*hKiI=fp}uysdDL)=-oskXLA
z0(UH5<m8rh__Dx+!(aV~2yj>@GVaA at Bc%^c&d+3FcHxeUs+XX at RC$%T{lTNBUV@;@
zo^_=nO1)WCtZf66`)AbAV81q0K2pm%HyOp0gxq%sBwV&TLx1!BUy1&jB0Vx^WD{GF
zr5#$XA9CV*xZA+GL at Z>!iiI1u_Rui_(pHb^(F^so({VwYX{S9C&Yp8-k2$q(pocSm
z{^mm0Vce!#^Jq*VBWs&|MvzxnQ0I}SH}xxY*AKTC<_o~;!pr`qm8DfGmTbT1e5hl@
zAlMJd063?C at PEKEP~TgSu~p3k8c}^jRnEIH$nWZcaDT?bv5z!o<?xvm&#5A{04M{N
zQYZ|6VYIu(28pQl+tSHp<0-TrD at wYgff={HRH>Dhx+4V)d1kT8aQ(Q*I<;X1CvE`b
z`AnP-m{i=kLi_$=z>@J0ug$XZ17d0%K$Qk}RqwkQm4Eex#uQ=C`xNz`uM-9D@&!`T
zEokAB%J(j{H&#X&3YtBN-_hVar+kJQrs%0)G}y{DVnNBp-$#PNwT><tZRqZX)b)x-
zCfw7AH-mqNlj!8zQ)O*Qq}O6R{z at gO+o{EfpRW!t;U6V-A0iGv)YU_&y}~#=BaW?d
zQ5Z<7x_?F;5+b-4X|df9osQc1R9J~&f83^1r at GimAfzjE^n0 at kUrOpo4b~&Sej48Z
z1otvhFt!bNTTXQbhDJ&i;b)J80gcPqbCsveh)Rx!)2t%4IMftZp6T<>-m))R66q)W
zpuAzO4~`2pN=$olC+&#X$21v%M at 0&u;`rv*s(*n*=E;T<E6186z9Nf2>@DxXyVM?2
ze{X*~M{+&N(2@&#Ph<E-RBCj_n3{ZtEt-I@!l*!r%9Xu^&IQ-7?U-?g5GABV>1Y<8
zsXw&6d8$eNE~1OrQ0)VlJ~2KpGic&_X9n`nas}wzgBx)d$g$bwPPfl0E#x;~trBAh
zG=F2eFH?mOVlbH^HpNMRO_NMh(fSpUkg=9*ag%gS=3yO~#qTWN`x+{_qc#Gm*cJF<
zl_=#Z6N(+mv$J3vVwW^0X=*VmKV8s>QEt>>z`EYI3VVT!2bp6Y!AFx=F6#i|qdFTo
zWXXxYjg;=0zgNZ>6)=;(5h${BbvZ$|;(x$ZHb(6_w!Xd|f^xUT)L)BsFnThL9Z?iW
zQ?7qZt)mw<&}VvHN5vJBB1H-_l9--p)^$e780k#|e03?(ag;oWqRIf-pAq=5`gxv&
zavqn}5>fd!Jokpg>JnLx+#E)jHpP52-aQ9ts{@tdj^>t4mtlembvPTpN|<x65`W?2
zEtdPy2W^lJEjdkRCF-0p at cP;@qaFMy|DTpC>mF=5Gao#o@|A6_U}C6BQBtG7$o!Fm
zIiqpF5yQ|19-;UjZJFupxgy?_w4=f9Egq2zICmx5Z+!&;j-LCwrNMrCbcX@@wv7Z$
zx_1+<B@`UrO$Mfv7!Y;7^rX>0Hh-5)(ApLdg&Dc?xB*f0IQ19I1~kAE|2$p2-%f!K
z at hi^iMub!aoBhfx;3UrV at g`u2C4x4xBh1umCPP at BiufHi_PuIKeLtSN%^K3yTFSmk
z5FOMpND<zDj%Q%&1{nFo$;8e4@;2U#NX=}J%w;lbT2Y{biU57+P)SgIf`9pA7BrmN
zlInL}wbY-lVxTXCS7}94y(3<JkgVEXr(2L{C2S;*X}O5$J{#~&CcxN-skW7 at 4jD&u
z#kUo=;|6zMRB^KBGp7tq_5oJCE6N;AXHnbaN^CO({EYykJC#2cH}M3jaUp#+x+<%N
zgRw}S5KpCa`Nv?&K13Gih<{rZ3r0bCB5JjCH}7CB?|%@r3F1Gkf^hRX{n at 4@9~VoH
zXAkjw=u_{c7eC0Bs<b8ML)ZB2y%?<a_FS%8HUof?YrLE^f;F7Ep>Omi1^0*)@v;!s
z!YDe3^({!4Qc(gW4^?>@Q-O!sj!}~UYCekruRN;P3-ciLYB_1XVt+_2GZ0><%^NUT
z7A+O)1-`oO(EpdGkOa^G&0 at ISUt4P9qgX7fJBpVb?NNe;94!o^BfH46XD|eMrNV!)
z;>)F8?7MC$jnnP^)np>!afA_R)<`tOc7uK8yTO5?i}R?{ty8*BAVs%nu6q8MLpyz<
zDrao|uHir;w)X>lkAGhFZ%K at ffq&q)$t+WOu4AOG=$>tb(x9d}V3Hdy%R=7Sy}nLF
z=?CrwWDUH-sFt`V^TE{38^Hm3$+!$~^-U&8vY!DbRD-iZZ7-pX at juBD`>)*Z<?3$(
zG<A&qNNiZVqM$LSc@<#8RW$l=+C%}DLYP{m_pBA|N^)xC`F~TBVe_VpoB5rq_pI)w
z<4YFo9}VxtwSmFka{)ftFYoWKymjzwv(!$q!ZoQHN#MQd26iF7<zqvs at e=*Cur7>&
zLv0lDdkXiKYr;g8-TD_ocMmN4=lhA+1;VcwqV=7$Gc5xzGr at 1$zB=^G*1YeAWbgiu
zHEYL+XV^zAXnzJ5=uwvHdoyK3t3J)^S&i?UsktD_jd)P>cqZmU4ddlmQNSlj>1Uy|
za!^okzk$SKOWU2Zhw$<Oi{LJB&5EM^Ij?FGP<sXF)6Rh14XJFV6y9!^x*QmkA0NH(
z1ny2QkPM6ac#y%EyMp`JNr(6Wp(5lEi2E+i>Ecx!fPam;wP}zC9qlZ8W6QOYNV0or
zo%m-$Aq<`$L;Gr92Yo{P7XF$!m5>}Lxz2NvC$UPWM=$YO5;RWpNZ2D{M3e#njd0d9
zlzjM#Ul>$tfX``3`FBbqC_f5yVwfC=+iy#&tbb?vB7>jXzBAzJXxwbv%XbRtOp<Q(
z$?+sdmVdv|cm at 9mL#aY&tD+yO>Pj{n{<kfrE-wx>y92R&XdO#|BVqUnjKI;lclI|-
zUwnT>V4t9={kp-by{(VZl*J01(UV&v=;XxkCgxULSwZ7GM`!DF)n9gJ8K%aR7D|S-
z(6Qrzg|u5+)WE at 3MHebXb18}7a~pUmGDoC1C4Xol6|W2LbM at NewcbmrzM7i`*^2b1
z#?76F$4g&~JJ at C<OOM6g at 6Rw)mtBAp)H1ff)0!DPPHfdc1(eNnL$k0cxzqSSesi8}
z8-nBpjF{G6fT2!Vknk9{Y;V3HVbP-Y8rm_$-$-<dNBE~FK9%H0Uvz~LI_x&dRbQxl
zwSOw+&3MnYc6nKO2%xW4yHjZ9X%&Q<(HRd+21xJ&VZdR{BTK_0e?N7ij7}B6$tobJ
zL8Iw|zrBvp<PReaA;6((feI0Oa*Zn$Mt!3YMc60|Sq;a0aORyUVEMa%he2eyY<APY
zF;SE*F)c?AM2~-R?6Q7|h5S}&prH+jE`MSCl)7nX*=<DT+s47{D8xf<U-lHL`Pcv|
zcIiSmS+qP at R`XuvhUn=IvSd<B9EC=ej$=qV-%BGKO`mM8=IK-$Bx8#&F3jSSKM;y<
zRQihHCb<OQ>4<H at Cp4Q%+J$2abpiV!9YX!R=-?2J$~>+g;g*P5ZU*5(@ynkw;C}`b
zX(YdMYS!2vdp at e?sTNuT?_y|Rp&J!wWyh4pDC9r+T$`Y^+5wA77#liitcV*@-b}86
z5O`{1bxY0YqKgSkMji2(UdxFsO78`eko*&na1kUCG_AYdkiWK3JB_KD)g(ZO{NEMK
z0sqqia~-xUK at PO$K?WP;u^{UlmVeFRt9I-nOR`nl<(1RUhtgxuqnyfm0teEXf*)+T
zB;SD1RxuYj1{afgQIBDEQ2;4=2Eu;dj0a|DOEmsa{wBCLDI?rtn6eeSAJpGHI?`{&
zsd{b!N(|2xv1HxYHS6$k?{yHO)D#mvs^MnloHYwzSXu4P>+Aec&QXBZ2Y&|T0OF&o
zL-TJdbP`mGdZ{Hpkzsy&5E%%5zn_YfZpG^^Nw3iU`8q3bZOejRs|W8E54g^>W0*vt
zp7dz5l-nWWKO_MHj#N%<jj?ikRnSXjP{TH;w%nr^P6U1*@moZG9Vy!rrL?p&xn?S0
zD4O)4`xiccE(mL)!Y1Z&lz&TU-Qbr>@87G70vUt(b)@m5#+53w+=!;xL{!l6zJNib
zG%lILiYsvLD40$C<05_txadJfOpyarxhDY}h at g=Awx)rH8;#iN?krbe2PQI^SN8io
z{mra>xu1O4X}p<h^mYFC0BKb@{tAKdD*a3ycbP>2oQ+EbqiB4Eaep;>DlIQMwQBRx
zLB0RtXw;aWBk=GW8)cx9rF?XdgLgTkF>e<q>A}FI<Hl|ZNuR)eoWum?gFihJTDfkH
zO4QvXkfNqOn~0oN6$$%4rhWxMZDF21#R(a|0~!ZTDn>tML3^Z25GjRgCjW)4=gh3o
zC-`R*V1o1*Ee(ztx_^kK!sG&(ZSGo>Pa)8PDR+mrfw!~>p9z(*_1Q6MRa%f&%TM;m
zA;9j%@ekH<kWuyuwq_xJ3^w%Mr>pRQ^7 at HOneAVfhiTm9YL0cwU7~*o^iNHX0rO&X
ziy(HtuWI^-n8#eEY^lE|p$3ynNmUH)^wJx64O at i>n$0RzwttaVNl%+%s64@>H%Em2
z=L8~Cq-99>ZDJLIfsd~}a50JA?J;r^giU$iDiP~hrE)?ak8`@a9cD!{8JAG8%KdP%
z-~6~70hPsf4)jrL%G-($Gq-ZqOLh at c5y|WK8lqa0r%L5I_nJ=4pR#>HZJTh#qQ&<d
zlgNUZ;W6Z5Nq>jgACPG$i?4GWKsxh3UC02?b6Cx_CPy@$+a7Y}d{i#Pv^z!d;{~pJ
zP@`_0ZIvUPgjgEbaQhRnJ5um3ros at _oBkpbNN?88e7CkDGG*d(*7#Vd{`TtpDIn4t
z1TnUEitD56-4Z*f>XfW%LM7R5xm`|r=y%qi7dL+%e}88ViK0Pe6 at 1?FJ8V9q45G+A
zuJ2R#N9(KD?NTTVVsS{?gS{tW8-vk6nl#ozAZ%TyM@?Ne?s->uGX6l;b*esHXV$=p
z1YER4B?pp5V}t5>(3C=&&s at +~SV9F+9JrDF|703N&~sAp!j52nFUSU_4&lx$+kuec
z;v0B&R(}m1n`$dlQ4Lm73roRiHVvP2c!i+QPea}b+Q(X|Y|7$W9VzJ=={a+RC#A#m
z4}x1<?xDF{R@~SUTNlab7N`h;;l5%Uxsfehc9oU&j`ZkMuRW+1aftCP$=TBRX<Rc^
z2%0xe?kQA at Kfkl-r*TeYPTP4+n<YpAvagG;SAQrsYO183J1+m<z~HtR#*@~k0;%w$
zijzbI!klSfCxp1U1PCvuw???8>@=2rjMBaqsBhze)0FRko|dbR6*8 at 94r}?zYQsW1
zA#lQ~lM+L0`xb~?vbN%X#&ozT2k{RGxoC$gnY6|>%3u$#b)UI2M^?^t+!!FM&JLEn
zbbojU`K>l44QmFzSAQiA-rM^VqtZ%msvrn-5XBm2#49*s5!6852531Wivj=<sv|Oy
zaZ6a2Ak!BWF2OoOW(&-aNm=Z+t#xXA1w7sige9t;X4Kk_dM-wm)pg1v65?;Al_{@5
z&ctn307!r49(byvQ6U_Xb1DECX79tovwuy&q2Ev{(HZ3MFG^>K=ui>$Rbfx<k3cLH
zVVIuaMt|SgflxkJF&wEduwvSh<NT4)pOcn(P2%OTU6W$q(QmaCb0C_~(y-CBP at e8I
zBJ=}`pQ6;|T2kn463WIuzo|4bOKeU0IK2Gge?lpnanUy$FG%^@8*Z3TD6Pu7L4W7=
zgDg-0+F)Hm%^;^_T)`*d14#w9{>7R=sAKQ#yTnZ?9Fu1y<-LQ!X<E7RKIISOivT#P
zt}7XRFf6#ASLeOOC*Nd~uNj6H`gzYj59WSV`Y&son@<oQ&%0Ctb27F5Op>)4|IcJg
zI}ZyVdaP!-0}u&0l8TuvXjO;5;D1b_tS=hCNY&5S+q}<z`}fMzLCWHG{N&D961c}(
z2bMd&<sm}+mC<*s?M{+lv#Aqc!xR=pMQo>DcUJY|+15gKwH3zmQCQGNPc|wq?C`3G
zIA~zT3EZ<r7?#pjCq6DygIVvQs9{<4J7%H$N at OKW>Lg&S at mtxCrZeBC<$nfkV|z35
zUlLJ$SCz!DjaIsF<`Dp{@KOD)%pq_{Q%0H;pfRq$>IFJN#6^|(kj<$lvA=j8?Buk2
z**CL=2-58jA&Wd{w%ugaWastfeI-kkz=|V1`Vxx;B}Leg3MLPUe5g{KjK?)D7S2d_
zwR+-!I!o9DbYhw-;D*|jcz?|Rz`!(i{9V20*SB at Qxve4#V`g`Fy2;BduPV)njMm<&
zWZL0$ON!9{D?u8}1J+5-vmkm?c<mD>#C|>#xQ67hJoIH!xww$dJEk%Raq}RZ5kh?~
zE<f!ZO1gCGoha<})XDle*z!Sjw!g>jwhWGg(*%68w&H4#B7vws0DnT^AjuK7jPL*Q
zQP1``GSS&_VT#Q-AoLw`d-JWpKl0I4yH(%hd~kXlp3R4@;399t-<D|?Y{8Hbg13rv
zTb=YMnhdo#zDDq at u4+Nm@b3nz(2fm=sXvUFtdf!a^9<!gI!G!An^Xrjyiu+}&nKB2
z{i13Dn$WRrKg%)!;(wM{<%Hg%05($KhG@(TtA2zT_Go4Dx$N?%1}QM|1f&%kfByJc
zU9uT7SSW`rtcl{f$I#*LacBkP;Ww^i-pztO(69x7RB3}5L?>O~2{ih;BCz~k1V?>J
z6`q#}`<a%iPkkis``By)UJ@}o+oO{0V at QP_+^!RVP?$fu>VHz$CXGOA+)s{@abEvN
z6rGX5dMp2&Pw`~RhuRix<~KhvcmyR>WcZffAmJxN;{M0w1~T_e&OL3r^H5*O-m57E
zN_8NKCS{6p7RtKgJ0*ER71pI_ at kM>FjZ!nx5ePjUL`Q^7i%NYO2v9t?Z|FC~O_t8Z
zO;}iaTRKXuUw_UWqNqSz7gN1^tw`r5H``MnR7x?^QDiJ%E-uVhN!keYFY at oUmn&}I
zlhja9iW?KWfoKz*z)5%co2*Tq<Ew*^2L$=^3g&=^f$v0w<64%CAmxy}6J;ZB!kvD1
zRoQ1)G$S5Ll=sXhsayjACJ}g1^{U*41`!i^ZD;|7Nq_lRz#1H(8|RdL3xnH+QFF*!
zFW1n%kw1Ux1((L#hKS^7b!D=O(2kEG?E^kw+*Y#;_CA;#iLtBDv5i<2lX3$s7c9wz
ze*EfFg<Ezy_K4`;5keZPf|@-ir8bl%sPB=C=ta_kICw^eb^ZF%{=Yxn$^|wExkWcd
zgGJikVSj5F>&rg~Xy}Q0ll!J<9}JZd@<KpIrbQ5L&T$kpnZMIX^EM#S*WD<i84Urp
zxN at wx&%-dh8-8uU((|Q22-^WQ{vq^PLL=OwwnhbJDrBq_4I}Agp~8>yF&mgd=sm1&
zxKS0;P(U?Ov4JaPaj*;yob;aaiLZ*vYWHK6{(o9~rEvCl^An<#Td_#NconemFm-tV
zXR|Rr)+XGOM1O&<RmGu-4ScMM7F;WX6p|S-!b^a#QfaJIhsBumip&)<LK!qe0|iRz
z+H%nR^WcXxDqY-iE40l)c`n{)zY-!)A9IsCz^yq*KP0r17jkn35M#5nKQorK6T-R}
zGJo6ivBd0LN;C&MXD?s>Z`YvSJj{k4<dsEK*vM>?6JebMhVqbpd8H at 0PV((|h9j8D
zAq<8&CN1c1c2|Bml{NRow5V$+4-_HTLxXu1xhhQTXdF(3+0=b`Ljge_R%7L#Au4>l
z+0A|Dda#|fL^7RG{!kr7!(v9sDa)NawtrK4%*}hNh+ at s~ZUT~+L80Xtqo7Vd;RsEZ
zVLyt&mJ8rXuIWyTK0I5t5K2~aI(}7*U`8wHZn6WQ(_)>}I<!3dmC?W{B+jl-0>cs#
zmw|<N<OXIPjVXE}is%RwrVaAFerRfmmzC8n59wyOxB=$uA(AHH{22QyLzW(mUVmo4
zr)pKU9CxdND{XWU4wI1mm>&Ia%)SUhky`_^#0by&3Iq-(A`+8}jTPFz-p=fh5Rp*v
zqrOTDJ1<!v6z3UheF&N~Fp1SQ;n`9#vELu%OL@|QEJ3$S0GW#L_{Yd!`w8<FE^&IG
zXG2sTZ_KoMK8bNsuM(Yjt>n;S4S%e^rM#DhfgG||pFzB- at q4wq*ZXax7f;u?e=`~4
zlg+q_-kgEv;PEfAVR8hk%a&QH%Z&;~$t1(CHYxUei_t1h8vj}yvs7Y5!{t6aXNr|O
z&XdkE6<f-+Qu;hj;g86ku9 at L*vNT&jakpRb?9+<%CK+&3z>w2=Ynh&1{eSScZ~R?!
zhftw=UVJC4<1w9SKGT5+o3(36n>X6TIt70n^cwAp+Foq(=7Td8g=0*W52;8YKeH8Q
z)nmlEws8?_DrfWY+-KlXFwvOo0?^gml<fM}zC3#cz<jh_umP9!aDtj^f9aBVgB*t(
zDq*<1+2Cc2?PJJE at e4h+ZGTcvsk3i0^CzJspgB%afLXTI6Qpd0=C|Eo<EB*+d_d}O
z5CggNap|{mZd^;1S4XfneGKsSOU&=6b_#YcuZn9sknsoO??Q;Qdk}^tNVP)s-8)rB
z0qx at 7xg}VDD}8&+l<lo_M;iv1S;hs-;c(Fs_GTh(nuL`T#i3 at jZht<&58q7Lo~Dbe
zDK4=j7e3rZp(UiWq<tUbOv1<k9O|*6#h_r!iF)?68<vV|Lvo!7?zr;w<s$9!@!2=&
zGI$~76e|anq`F+s_Yt^&zy(%Pqq;YZp&k`s{uxs4YAnJH!lY2*h1+n>Ik}yZ^y&9F
z at egw$7sYex&Kbq9Ykx+;N4Ts!kAFWT;78VR;~ZQ4PVr0QQdOE at -3ir7M3uEP@w<?9
zKmj<rpjp35b=J2*I7WIR{1x at tN2aTZY_x+X1PNj~9C)u)Ki|}?>d#Y4XRS8nEbXU=
z6Cp7)lzyjhFnM$qozO%Td*=P9eAVLYa{H~9ITWfu(?4nb%YR{4#`Nz6lRO69n=bz6
zTN~7va_9t1YByQFMI`f%l<&dzkr>%ICdFTCsz*z+8Euxklftk*#5v3;Se=%I_A1lr
zaXcJxywC~#uRD=ZbWG=9d&va2-jT$g?Zb)WYzQJDa##wU5?$ECkkfpzB~ir7U3$u~
z4*&#zu{}f2 at PA$;C8pE^{-YU4AoK{0jDlwOGIeoOcWblHYsJ~5Qrn=FV>Y7Z{_BUT
z^Mx9IPX-b-yj!_pF-(4a4I{Ay7hvLWnU^x?Ia2`OQbcpND*J$hH(%t;CP6|npJ-#m
z!f<9>QL>0O at PXcL{7hf%J>>Haa8-x5d at e9*IAkmuseg^%3DC)gq?2K(SznJpAfY3n
z_Pr9g%-~@U<=6~Z<<<IP7`2Bcp at vH0jfJO;+L)mNu>=)J0E#bMD%K*2PD72NYO-BA
zw7hF#pJK!i7e7F&vTWlW$kFO?WH9N*0<z>?2u9Sl_3=fnTCmDGtp*_66U)StRbyS6
zZWKJ<YJcm+U;XQiH!nrN{14-7^#g~mHQv~=UwU*Cc#&EKrRqs?iD<#WSC#-sgqw|J
z&>o&O|7vE)&^akLAUJ3RzC6CKxH0V__1Qk;r@=J!z`*0LsQ#h0`B^rEjgDr|mg<u;
z-5SyQ!!@kiNJC9CCUmWGOmqQmXYJ~)&!B2LYJWxG7MFG#Od|znovxP0!Eci^hcG56
zLm~uR!$h;|SH*#+dR2r78ex9+C`HWIN5);s=UdT6{lI0f4+iqdXu;5LLI^%NFwD-5
zqvZY0(fNIbLnwiXXU^Mowv`Qng?>$x(iPpXSUhO89%k0^7S-^~H at T#3v4fGtm7l>Y
zbAR5Zl2E#g8;xj9X7*)2#&o}_W0ycy<=9rxp&bV1l2?h^E4EH^<uiWeKKgB!A7sBR
z^LDA}aFV%hvM!%;kSOhd5uAZ}e^ZA!pxHnMm5xT~u^~0KjHvC0^Ep$F at Js=bFY^Bw
zB}}enmMAZzY(i66A+|2c6=`&|DcdcKXn*7we#wa at a+w3me?FY9r1jsH5nv*~8gxv)
z=n|wMl2$l!um=vG%myxEhp{~rW-<_ABa{YaM(I7zhaG0aH=Li9cnvl42NfKrPsM1y
zbMcqQsrBSl_Zj5k@|%@5m1j$b7zd?O!X6-uZpZy~uYcMFn}>3DFmyp3HzXVv+<#pd
zr6TalpF?;KtPqQqqX*!Js~E(yEXS~6=y>TyDN4(?pyrS%rc>B!?^}byq6jvu?L-T`
zv_-ROlw*Q5Avu*fS2U?!J1IQxbg+$H3qL4D3n7rLzU<6(j4f_LJ5fnl- at Jav#lL#O
z$^l$Iz3tKL2%012|E$Jp=<k1{pnrFoo)Qiq#rMH#i}-YJl6>8StEviKnXwQeWGunA
z*HRWEK~}#PsJeO~(WLKgUL5ozvzYptfzso8>lOiv3`g)z_?Cm)Bf4N*GWo8t(dDU1
zD*=J*v4ct1>Z3IGW;I7A8KQ$fQA}0u7V4k&(=KF?cA%(o*4P1+ at FLRX7JmwADSJCn
zuzRA<@FmkR?-q<bL*cNce`&qRDNl6X|MEyWlVN~7&5G3m%xH4lfaAJ{Madmx6gmVY
zg$O0ec7A}b*;*LslC`<?`Ws&36;ueOzsu!zmN!l~3aJY{G at bbxh5Gh_j9bp5!-B{1
zjd4yEc_sH^Ajys;E!Iz(;D6*Em4Gj_hDznUoTM4`<(<_z5z(8+H<Lk;`GEHcDmYSU
zH=x(j*OHH9vMcML;#wPM6<%@i+~EWk`KjIo{1Ml!V6I2W7C(-2?06t85uUYE!@W1d
z{zUHurHAKz+DYw~o50PN{KW4EGPt<*>J*C4S^Zm;c!soULQhKvE`J;c1?dY~i^ssL
z;8s~1^I$ADsS~kMi{gMTB$!^|iXG*ONjWj)tpZk9Po0VZ6-tjIwV2;X;f8aqKv9)5
z%kJ;yosLeAO}CaA!?}{awPh)V9vT5s<Ato}J5~qc at sLr9<O>tEx`khb{hUo5GL-oL
z&~^C6nS|9cw5db0$A49nGMD<;0pNB@=#+_YaAsH`zJ>%qEC$A(=vFf=8|-d$Dpe1t
zqh!F{;ydT at UPOrCl6$Zj8m9>3(V6>eB27%kV>|s;Qlok)(g-{94u#fF^waH}C-~2}
zI99n6-RELPxMY_Py4nv|I$vf!SgMk>EhUPg!_mm0w1b)dW`EYuom5~C$ZO~e0d5Z)
z9x7WgrK!BxhQn0k-U<M7A%5iwCMcn(NB4u%ZUA$k^t2m!_!DLm3no0mo3>q29BX!H
z?hyx+(<d1>?8$mT_7hr9q8luFnH1E)wEqgG?cYC}XM5~{eTrKt?kmO#URM#O8p_{&
z^+0$Pj=8_xb$_U;kZ?KMaJ;(G!gu>dUy*vBgU+v^iadRner2Mo!Z8- at C86?b*=&5T
z5%LC(l`{4Y at F-sXR5+f$USDt)_kvzpfWRo;x@$Mmy6+^XfT{0INK|Xd=?Li<`3+?w
zON#ZcxnyD<FBJRqL5TITLdwn%v{f_yq^f<>DtN?aM}Mi`LR}>D_Hfct7eNeV4ynRq
zL53>G4;N$wPSkBjjbg7$1mcAtKy~xaF&NMSJ8*I11DiK`hS3+f(%aEJ+k=iJmxZ>T
zt1e5ZHPT#?{K=u#K+G-e1WD~ND^gNuBRHPI+Ujpyx3Vu$_p-!zhBwqNJ(PKK$_In?
z`Tl3{C4b|(t^B-d8*R;MFbNd at onh=wUE_uG1Q*zJWSsHx&h7z!fjf)j#i_~)t$z!3
zfYvCxp at HvtX<%Rk^3eL5dscC{dZfConrJ3{obDfz3EFEjA|u=w%km at YhnK#Nc3}RU
zLX7nI`O8y#S#qmU{70uWz(6$T`Js at Lb5cMTQ-Ar30RN0o)w@&=ZN%+CLVg at X8QO<9
z;}BWBN!+KHMiIqy`(sgiZd at 0etMdjGAt<4YpA=f7P8>L%vh7~Ory}qg5Cj1fMB9i+
zt5gmP`t`5Izlq$0%uYiHezgOkmU at vG7^v2gLp#dU3&--0D`K9#O{PD!e6Rpe9)NH(
z)_)WL7YX$jW)bgFQ>aI}yfy~z{?Qg8&EHMfi|LKlG|JJMHw`=3pFjR0nDfVCG2>`?
zvKe$2EkU+wT_;1w<`gHIII!vtp$<J}9a!jCNFYp-o@>_l!9y&~PbBNDifOG|ANEg-
ze}nI?tqWsmoo4>MNC?}+iBpqUL&#K!O at A{5{oSq(v>5f|t6aFi8iB|Qjb9CZNO<P)
zl=rK%ad7}+0~!#ImvVpr3i#R-qDAw2wE<khLAXDCl--$17>`$5N5krcsaPQ at dBW0*
zLz0jz#AGz1^6vet=loOS2IJL|m67&w341{ekUfc>hpkO8MO^zfFj3n&>ps)b%zwOR
z|M|8N4I>M>iHfpo4}kUQke=0zx|lrIH!yb%AhK^6Pe2d){J<hgBd)mcr>!l71$!mZ
zwQ??!6$9nO*<$&V=tJ_dzG+Oot<7(-NgVqdjjRV;uqYngldA*nsi2dYR{XK8W(?*s
z#b<k1ktY<|;2y+5LRi?)R;m?Dgny}*+YlTXxFaH^ovRy0uO>TVAwZL|k&`l+mP3i9
zgMm`jtJ77>0P>cR0;qfUDjy(hb+=1B>VhYFEDE~%B-8fZRyD3N%5oRQ(gYzYD(ljG
z!Z=NQ7R_hfdg?1R%sD%A6p6_FvC>S1`7$L1_kBQ&k*37C^1LZ{l{Cv~x_>_l(<H)E
zK%-`&vz3B8>M&0rD3h~Bz?^B=M76JsVMUn64y_7o5M;>V$j)|ID6rhQ%LIdpm2TV3
z-W3^jm-FOAOZz4bu$YnbatBIV_+^2%3{rt;LoT at R3+bp|fR#fu(9BszqWvKMSbs#A
z&2G9R&z{-&q}+S}@GwYkDt~d>@vTpV;I$x?&d`n`S|GwvVGN142HS;HhEw`!<6Fio
zh~Vy9_0d&%&4+`Ru)@YL*6viy-8d&|4FsB~V#VePJLvjbv}?~x%HF_}v;)?=>uTGt
zyKp&va5#A>1{oV{CoZlw``fo^5NULf?PItEi`ph_+0!6?MaKLpj(-jY%9|vv5C_Z^
zXdxKj1zqepFIjmAdk%G}_dd`H&3G2;3dIbKE~33}VNqTrRMwfd?pTBPm~gXANWb(f
zO_c$)5YY3RW{>C-hk=H|C at go@34 at yMt3lSj%RPkmhM-3c%bQ%N?@Rs}OF#CNs9LG!
zoBf at 1S<&1aawlbppMN+RG^D&}I`abSXBU2|Qj_usL0#w;x+P>6EVj~;C;=$2g5uD>
zU&SrI1=aaM<}yBv5!=5%@j7Zn+k{PAdxrlnTc$JawrmiEgk^1I7M>#RkvUXUoGe+i
z5Dl(isL9l79MZRq6D)n=nX2ghYH%7PUBlrNRu6U`*A1m1>wll6a{Ze9%iEu?gNIM(
z5$gq>e&>v==bD|XVFLoVB0EO+Y_;>21WH+Rg)MybVEI at NEat+w!p)61X%>YBU at k&Z
zFt&!v5WPENxGGhacns at I=i1q=F at tzv^NG(H6 at KS}><m!oAAdMSf^gb<F)bTKu>OB)
zJ#fJ2oUAU{V}C#*OvS)&L8(-)R$@$PouPHCn7oi%7L(Pe(v!X6F?qv24P%Z-Q%6Dw
zCHaF0w);Hoc^5)D=f+N;{n|DqRsk6y?+wh2sa>mHx5X?ozJ!H1>1CAF{t4=h0#nf~
z%B2|LXfh&FzpZ%ql`D5wvzhMxou6zVSaj-Br7ga#>VI~;$5e`cX0OH1K8LlJan?9Z
zJ3Vg#`IQ%A;fb(B6+f5XDOplM)m=a{K;jegrW{rme{@XhFL6?patB5y)LN7b<}2A6
z5KHlSkQWkTH;U?c2au)VS7hj6UCC6DG(mAdH^opLzu4bYZ`rM}BVZ8>aAaZ_t9Al8
zago#@MSlutzlQzM$8LS+d}g%!qsk*U{6+Zz$0b5t7cgFvg>ypPs+D7%L;hin%D3xm
zx}W_3Y*ny<wR`b|p`e>51`&aAJJ8jL_1Y{(X!zFz-hQ1swA9{(&(}bUA at nv<=z2`B
z`X_*?LkoWVp6<Qos}PzEa(7Bx)a|uF6K!h6wSO*lrSt)JByP~BuVR9ag+R6T{sNP1
zq#-cKf77bbbdS6 at O!$ivi(x-LwA7YPlf3 at H19JAq+9|c0NQn9mfJwnm`!x3i+nvxU
z2Q!O}m&I7OmKa%-iit!weL}qT4iHnXneDWnWaLU1L3{W0=GDi~`cN6^yI{751X0IH
zqkpB<^UTvtbOz`Zk=PMxfkY=55j$E-aBvJ)mA*vW4N(ivDaStOeL(a(UY`p`Bg)~P
zf#zTDx`&vK%~;VMQyWm(H|S53kEqsIh2!v_`));3<c(p_!XccO`v>Dne;vYs4UOC1
z8sbsy#WZr1=wact$(%Id_h-*e5yL-bpMRydvkMO)j6>w6Z1~K7mQPx#6+XW58a|zg
zPe>^Q>-9F2#yVLNVp8M^o=0!R6ALYx_cA2qs+x0iFuXHScn|cXz#R!;;#}BojljVy
zvf<8*dveeG%Lqzt%%5opjKSWu<Cv~DL_fwCn)oC%M^wHe-U?M<1y}(@oI|#={C}Ki
z>G;`+XpBtMoEF45F6N2a?hqP!Cc%4BKS=3dKpe|{LS#ss-IRM(-;8OgkG!(2oLe(S
z^6BvTNOj{U5vXA6%Egq=aYRD}`;slpA)d;5Y<5xVP64P<_2_?rfIfRsL~uM8k+*JJ
z0X(e`LLg_ry>9Q3*Zl5I8>-!R5Pv*EKp7My1zI%|1*^?yzF{r*i$FrOP?>syPqb)9
zYH`FN*u;m>FJ1X^B&SDf$<3b}QBH56Ur}-7lJ0P2HY%s$8jPNc$49(xi$$VAD(FW>
zhg-!301H6$zxcvQ+lD%rE0UBdvItI<_loY*Kt+*9W>Xo3ZId$Mp)Ne2^!@NX69|7P
zJRqYiLbEZmO4kA-v6lgG+nM_|d>b^7Y}3Sr`gx6zZS14P$?U(?L8^R&YeWN{f*{VL
zS0=d^(&n}yv;ZF;#s>0jX{Pw8uO^A)*Rvfj(%qx;3#YV=>>H66zW{J&>WqEf1iT<5
zkLEL$fJ#sUHJB^w$6n~^5s09{{)>NhiHINu3e)zE21{4fJThxiojXjOBx39DWvS6V
z{MmRsbHC4tWX>>7iJ$`UTTOOqCObWh6Uih3#LVwNSoIyHL7GKKL&}l1ypIkZh;I!k
zBWE(2xw;m#L4mgeD!A<q8cLxBtUHSpvqxzS?C3G4ObM;xhp~d;8P;$qgmi!3EhOHy
z3xVb`#qQ{^nF6myVu|9Ca|Akrc$;gf?&Wc557`+&l16{!zM7(VMg6#qbW%1et*d`A
z*1^U7(+VI#XF#zG?itF0&WbYs_!j7!zc4H#V<hsHzJMRPySU(LP6W+QO<Wsc+LFR(
z0U2H<W?XG=%fO_3k65=OD58ILy>2xrDaj`sv&H99pB%fv03&CXBb;g8yZxr*+2Dp_
znFF795hW|?n()ZE9)KX_%yQ41bpFjuLQ2bRyJ%t?2RC?xJQR{VxL*vX#1;Wo9*?Y*
z3X$DGMkmt_x$dF5_8J~^`P;Yinep`>2JR^$(DCb9$-&7cRi|!xRB?YW#j%*ILVPu4
zJ6hZE`4L4UDKB4n)E-(z?uROm+wSo06mt;*r-L~g<Gyn2I!zCLS+P3UNbi~xzUGJS
zP$cn8B$aDhjP0SEB?(8KgL-HcJ;Hy_0744AE8~3lQjdCUNRz~qx#JVS*XdLaNEI`l
zjhXuqO!0$b%IRF<7=(Wx%3?Ffmi80&_|nHo!_R16w_g}C?`>%WgnGf%!Ui?9w26h~
z2AXmI51=<NZL(P#{YBihMd%Xdp_kaK=|jvE`gOF*N_CGY9AZvPU=RCGw;F}L?w>>R
zm?V?B0E1wDIz~v3K8uBS9=JGCDamhN*FC+|_H{by<_dlp(U^ZyE()WYIePcXcJy at U
zMuD}EI}oDh2H0kbNd36f*fL3Rs#V;_Yc4*hrM=mI;Fob{!msg*60jS6heQ%~h5Ls7
zrOkB{u8QYxKjd)x#@S1C<@Tx;Ra};xVnnRo6Z3eq6loL1<m5%jFPzS-CqQ+z)M<yy
z2C2b;(&CDQbliV9au_#LD;Lj>4GaO)4JMP9q~TI8W6w{ig{x=s#~K<{G6sRW)lrq%
z_HdCb|90cJ&Coqq={_%HTA1w~)^48q@)N$*;+VhS><MYP{i4e&FBH&}Zb%=z<0pl~
zHO044HBZfUvNdPn`R^r8nF%kZMhnsS_X{3P6#!ckT7`cF?Lfj^q at 1Wkn^G4kgj~2P
z&0$cWzMmFIvj0@~ObP5-&%w$+dV$RWmM%D0!|9q8rNm8hp@>NQ8*Hf%3=yzF8x@$G
z%<dhJVIgY{QMQA47QJggzT_bUb*FR6pDEYh14;mZpnw*0U-KPsyd>nSAYzXLS?IbX
zNy!wV(k6dbG28){zWe%OU?MnK1Qp*5&k~CLeo9Ex?N%A~7gBvv?f<*s(^Yy)BuTmE
zMxuSa8yc`qic!q7-mt1z{f<Al at W+0*o#AA3grQ_SW;+u+<3?>`%%2;#8_28PlYemq
zLRJ=R=+sgZ?b*zbJR0k!YxOQLb49oHisa0VRV;sGX-cS_w1QQs7(y$QL}zC3A9f3S
zC%m)3am#JvxID{XJ86EyakgcL(e<`~gFd^{PO`|ie;h!WE+N=2RonzBgio-#RY>5g
zT`&yWLVqv9GrG+{T~@Zr=|WL4?4+tMw8J(m^EjZ5U!;BxcLqz#e8P`35TH~j5MdR|
zjDdf?Ly;y1d-z*pyuE#?a*#LXC-cX}<YF1xtU|6`QaoCNp}T3XRJ26tPCYjQ4rWkP
zNGAJ=Y9KZYqs&uT;fgG2?YZ)%BGV#Ec34^tM>JCE1lSqtH5~h;w08t6c|+Dj_<+yH
zT|Yu at +lmajTc7gt1b2u2J74{psu)tYnbm*fa1?D0tnp?2H`2jrJ^S!eZ&gES06QO~
zhtHh?6_7 at l&6dMAZ8Hk03u?RX&@QHzW)X@<#6r}b7$k;`zwPYE%A)JEA&fQvZmH5)
zKlyDFa&8m~agDFDcpHv7S}z?0DBnQru4K82d){EJF;7scrLYUu8zfb5hEk$z?kj(}
zWviuecny!%1ivp7 at QzE0=TB2$a+_#Zvx?;@)~p%#$hc<Vh1BcCwv-)_ot4Ge at EPmB
zQhYx2hMWWizogK;H%wTRs&c4N?yF7LOP&x7Fo;pCc|OKVNgWtkfKQCPcyo{O;qY;X
z7|=obj+1(v1$7Y)1EEip2eK-O0Dph7yx9`Ur)|YJ>lO3%<|`HEgD!gOy=xrxZ~PB4
z0g~_qLH}&{>oH0Zp8WNe$P)yJ7u-!1MVxo$CrT;CbY`oJfk8$xL691<wU(j%(LEK<
zz(I<jJ#<u)K2UxzEYOqdGX%E_zB>i>jPC|K$#m{C0BK3C{5 at 7<@nDH$Lu!A+yzFfN
zn;?@WiYRs*vcB=pfpLOShP(yu-m>0sy~LpZqqI0V^kGbi1kxy9*_DT+95*S(?NCM+
zh<1*UW8lyS?>2z5-=nWm0bU%MuNwxL88xUv4(6!7Z}c9)L$NhK2Rd<xbH*YT6*)na
zX8hv!%58BZHi~C^1k)gL)Ixu(8R3zD%gmeOW*dAcQ|{$*w{A*Rs)9R4J!)8|cA_1*
zL-4Br&R4GVSq5>Bta13vA!FWweM%zi&xtrhO7!CgQY>wxUB#XN5wM|VHWM%Armocb
zaGtG&rZWl%IKRxDuLVwib6KrZ^y1F_(Ta+;%?~OOF+u|t<gcvFnL>ZQ+**v_&WHyj
zpp{`@rsRhaL-us-RByH7C~JgQ#5cC|HyREeq(91<Q>1gY3Z&qW-=nu>e)+V?g*I#O
zw!C$0mO0)B^@VxRhY7#8ok*k!v2aBj#90BMF3!i2*ePyJ8*;*AAJ at Z$tc@}mt7STN
zT8>P4P7#?;g{1z at D5-x9OMp;L;MJaulAaIAC=H={P`3@~b?g=L%A&Y#O&lHZZ-dC2
zMGl5z=X%WYL~~93<Nv2xYe;L*Qtu96pB(}FkzJpTPtVJr<e?zm502aSgWCoyx}i69
z2NJ+vwS(pgnjrQH_oZGSRAv~sQw?E#igde>ecL+`<bK6una6*m_w%c}@?zUVtb-T^
z<Ig6Ga`NK<GRDd0=|Ti%c0OMizwtqjFn4E<{gw#Bt?kHx`oimJCDGq7Wuc4Ka0>Zt
zlaSKbXT<j`43tA$T3flxxZOP1LVy%HpCWoPDw-~YMp4iM;+4)23u=|MC}?fP3iwO}
ztU{y at T~;NecFunV0C8f;sU!NZn)Vxk;S?heN$B1FJ}+Gc+$!?W6bo*bym<WwyLjrj
z4RWKk2ZW64-u*9Xm?kHa2*IM=$PTKcwi|_3U~{%>M)Ax?+3TgNjHnMY+u1z&q?XE2
z;IFeVZ%gHMz?98->ZG)rw~b at aH#%MK3(qOTP|S`#6-<8~TKY at tF0YUOqz>=WNP8O8
zxIk~de^apeLUR0=oti$nCa}#r!=J9yqrG;dHE6z0LReB*pO8xW5sCjdmjT2N`0ZyZ
z_Br1(4yIj0H>80X0j%xkylDahvrkN5hLJ at G{%r3f*AoCqeLFIOfOkEI-LvHO4(PM%
z1bN@)pEQ3H(V+wI%5P<z`!ctX<tt<?3NIhpki<NMXfmAN93XE?pQw&81e-P8LWf#q
zrER9-Vx1QE*Uu#8d-9zRi_QcmhJ5z_7|+axX6D*9U}y+jEaq4d1g(&d#y6dCJ)*td
zFh7Don6=$>OD@=~udo!K4f5B_1^~Kk$>G#}Z~uRstg(|k+~nj{5z@?%H&4h~Be>m^
zh#<|uFhF*&g7!*mgO+{K0p@^TxbV#ngE;oVxaWgV5nCB@=jB}v4|i#-{Owvm)RTyd
z1!PD+$67?hdvUq7xb)BZ?wz%5XgB;hwM1+A%_L)a`AsA!%cBB=x at u&39&F%)Q-|NU
zWIunE&o=Jz>c_Zzmfr;I>5~9UWJ#4 at WQEPRR}aF5XUv?4ESh%!{V&R4%_xP&7y-Pd
z_mXPWjYf6Mz}O0480HFDu$jr_lKx7RLz_oQb|WTPvhAFhksc-RpCFw{PdnHz18;_O
z2{}yjIZKz5=bdJYy$gqU&=7X4DTm-WnznzhfJDnou9h7)tHOs#Z%JQHsUp;L$jUuk
zQ?$hqZwtJ9<8vlu$art0sueug158Y6;tunf`wxYO88Frj=*XJBqoZvR_zaG5J$?zp
z*8XqeFmPW!=wNt*BD*dekCHpTk#B*+w?pxQGn7jGh-M4|-$Ca_OcDJo#jmFBovDBF
z<N;Yb$x>@|bDzfmyz|O5 at _!30b+-H1x*`Z;jtW;v8_)h}F@(eP*oLYmrrml^8=MO7
z#XtJwpx;`I^01S at +^KZstL>fmc|3L(^A}z7BAG#R#riypfmx^|Qdfh9O&R$JYb<=m
z4Y*RG#K-q|LdyI(wl_(B1!l)-beVt3Kd<crJdB^!Qee1=p5sgY2J=;=QwQy(>Qf>D
zKr);b3$1sE3B>K6rhWbH at -c%>GU!i(j7~0}R~Mxr)>JA?aKoWZ!O78t+4)Spm&)t%
z=vN5V<mm(rG-~6{kWn2~5yHi>@I<HCxV3D!Kqp#h)zPb?1y~(nNY*dDQN4d8s}WTM
zJqUFx3 at x5Vb%j}kz(ekaioRJjP+(3g>1`qQpcQ^#s4yG)z{2GuQ8o~U<{^+#MZak7
z>La4w0mSGbxYHw3<tf50QM$Zk3_i$iElyHE;fF^&r^09wSrdPR@(OP5^FTMNohL!s
zbR at e*+Z<eR`8|pz at QQw0O|pLy;vz at MmvHRL+&Uh)(aSI`zm1~aYU&+f8Bn#yb&hd0
zb9(-&S2?VJ)=T!i?}-Uo9`xct<5YZ3;)Z1 at bi_b3z_R9i;4{}_;^(XGg~&#hednnC
zt}f%V{Xv<RdLbPI3}6$Fvae&Zb~JB>Q`%qW7yvvL#$Z!fBqF5<Gnju=e3w}46@{aY
z(-nwc-`RV?2DK;~bSNq=jf#YoDo5r`7E=wBZ$xtH69=VbB1{&wWnLV!T-&XRWKFS;
zGy2K}x&iCS<&0DA`r`k~M$DAzuvN;>#Eh}uXZ?53sr6;!PTHQp{h*F&&wvSb!}R(S
zx=d-j8VtQPy;<g at OEZ7;g;X3GgX1QebIJP3VTs2iv3Hs$qCZ3tCsU}QYVLvlM$e}U
z1zuIV9VAqt)b-yz(V|YU*!=I<+LuSLka|;fj5Yj|R<*FD`(k|Cp!0I{T)C&K1Vd+P
zSRHD+5*Jgxk{0=aP;}eZh at X6ps=<nj06>YjBwy;IT*rK#Vg7$LX=5zP2ly1Hn!b~G
z%G_K+ym)){XH&OZiww*w%&Kv6a544<1?(di-NP7SH(Q^--%#yWDX%T(v}LPj+l-75
z-rj(=BX9saC6C?DY(B^bf;*dK|G%x{u0-#^NVAW@)Lwg?vcH)Lo7rfpvzzWd!68!d
z)qrWza0J?p7MFi8_VEFsh>A%o at f1WIBQ#}o^mAxCOJ#EGrU3 at uN^I#DqdsGd;tzmI
z6I)A11YW|3 at Boxw0b@A0Nl_zU<qG}>VTo`9=MTA?{<hP<bR(%zWXpULvNIc>MeM;+
z%&-z}29bHa5QzY at DlN{WX2$E{A7Ksn{g(T<M#^!Ixk-P~0P7VqM+HxP(zUlOmKy`6
zpALilu}}})YI(}Y at a=9$xdjgzhchvw!D6!Etu*`&ztH)Vpvx?R7IjBf2b(Z)vY}X*
z&ww#SO2D}xQG5jdqH=$~XSd2_G&KfSzL&*pkXrt|VG?_GGFNO9 at H+)}JB4 at Jd^myi
zwE*<j?>v9m3WO5>*_f&BaGlJELURh(z5a*Tw0*S^5&>bPJ0ZOcGO)b2vUkq!ni}z|
zLsGVtti<}E84*g at AKfx^i)hwvW`!2;xKa}6mB!<v0PM0*JKtv1cS0|MY4;g_L3hbJ
z&RM~is`!7F9l${{NLU923qAL~3~#$y=3!_1I^2H~VNcOBz&Ui5JBV)2NTJv<A}Xw#
z4c`UK!qnuuM;#o7Z*Q<k0@;qtLx=SUD+N>8bUL3Ne(ZZNu5kG?Z2yUju5mGz<I&HT
z_!&1$4EcS47@#`3F3=#=q?1!cnNe3F5DGEs1E|EHb(XT&?<S<P71t=qbW!gAwjH}B
z3K4&7Y+DCi`r)D5*Kng*%#EUUPe2bg^>^;wue<9(^u&PDk!xP4lQUpUt6FW3U+rKo
zQ_VG#vKX7N6*TEVT$Ymv0zjushgyThjyfKF_jY;5Ns at SHYPk)F&N{z{Aa}kID9m{R
zk}PsDZArmDjSr9 at dqiD%%Y92BYi{c4{WO0nj;FMk0w7r?(vXG{8!}KVbR7m<mI*qi
ztD%bla-DJsM8^CyAUEUqh1NivWVMk#+$>-|Vw$5+;yvGEq<l7`zNF{09qY};t<L`$
zV);Ah!p4<T42BCn%hEkEHRiXo$tD*LdaOj#F;7x)5LO|;9VtSSdW`HN>?PN;lhS{8
z%j3rzcQq2;$L71^x<gYJGjh2pdzaRJ{D)og><6oSwaQrUcG8GtUA8O~4T*DB9PCNb
zYTlyJW4hmG_+BviLbCcI2eVO_)1#e+`MFPAU=ET$mj8%RcG8&FiPWL+TreD%6&ys8
zNjVf-B?Q486<jV>H at N^~m~HA|+(&<hIvW5*`yF#X at 1mACWluLfMLoWN>7iO1NmshM
zuWq3omcyrEkv(zq3$+W6TpFm8ag3$;kyE-tzrt%p#A~S`mlIAPVNHzfr87J?!iblt
zUr2~qJH|l*Y{xW8d;D5X^$xgjle3PCrSd39Z#?EBY!q7#hz6-dfVRQ6GnRj+l;??y
zfl<d&1K5PbN;1$NrP(WlFXFoy<yRzSwYi2vJn*y8eqe+_5H_x8{s at r%wPJ%=1jIup
zNZ)Iutql!%vRIvr5c+p416GP|FnjJ?9#^|1-CbBOY-r at L=ebxdH3su{mbusE(wlD*
zu1+Lesixg7Ar!cBf*g?Ter12cACkQU!P0W?pehcG)CefFfcFEAhxi2}>GIRo=4E+^
zPrP*(=VyF!7y27b`1RpJ-uxU)7suXbzKA*F<@^q_rx>Jz)oSQu<wqZUmbj_bn&bc)
z@>D2%9?L{RoK$B#tYl-$t+YV9dN*Fe9w!YfAD(kH<{p!Tq2Ce7RhNHp{iA1kIJ>0z
z4O$rlkB7GlIV>qvK|fOD#I(nqKax(mc^Ur at y6QZv{L`K5<#0 at D1O*F5p#k4$Fa9-w
z;YJ05Uagv5Nl7>jIgGZ3Ofb{=_RWend5B(a$ud$eMjen!P6y3Q^(3~+P!@`bVF(op
zKSdsk$%CppQRmj=sBeE0Q`94gu;UWbZhjP*m3E7E?ZWHJMI7kd!Hmx5Lv&jm!opV6
zz{C%HBnI9^Cvug`mXl{IzXItA+eUvXrFHqFDDZzy>I1Aq^T*D;GDw%Y!uGfD+L0mS
z8pjxV|Ao1r3c1E}vJ3h{$n_5kdS8pIz3le<V9=h)+?;}(++}|i8Z79ytR)^(jMCC@
zJDzZ#KWRT)ve2CMAUIpp3cRA+K=wXRKh0!rqr;!T$OS-%Ny9_N%q)5MmH$4Q&?VKq
z#H#K5VG4YIzaW(7wka at L_=0c5BsYooF!A%kmEUr-nenEwA}x-&2<tzFU^hwDv7tu5
zpU^?;%nf<0M~8nR^EOg+6df#9=T?(b at Sxrc-~V9>jRAY at I6V`5<e$qqIo=}LThv^=
zw<Q%d at R|f at FATJE2&6O&)V&zD?^xB)N#|L#*ZI-TkO)*F%G=zS3Q#B at EjK&P*UBJZ
zdH|FvWLIX?<GBwlJ+vXNB$JSOsyDSnjV`5Rj!dEfb;Ez?b|W+3GY=5HQ#rO;%xU0o
z%r7SapRX_Nf7@)ioz0Br=Y#-Qxsk~wjo4$d$NSulp|=;abE2C{3Y8Ui+KH8c64QqO
z%6XZa!gR3z($gp{!x^Lay>G`20 at Xi<ysw_&emy1B^f$W|O}{96B3hAiWw<j=HIi{~
zo&gkCm}Y;&Jj~_R=?bZ+>^-#L>OnAz+{EJ*{Cs6=lvHDG$@d%S9`A<nsfm1PiaCIK
zH`Vt($217eOoa~#^bX;3q&0*WI&SBG>_sQIglg_v<6Ha>yPE1T|HX+#wV`k-CPTav
zs;JqprJ&QZhFFLl*D$|CavZdJaVkh6*XoIQbq9YqEp at u#XQ)V2D{<nRrEkD4GgwjK
z4f<tQ(t;-8PEl3t|0!ucC^ckRX3OGew9L2U<zoS|O&Orbn;~L~hz6rD)m09nTeyxN
z>nnE=J{dQ3f0IteStDqVTsAVw4pOZLnr7(hAZXEeyiALZ@<*1&wW2-oaF`thJw%37
z>4$$}h>aVJ6inVC7+LOsqxA-5to3TO7D{^OnhkveS!}&@p_Gq=HzLR~F!?Cf95tHp
z*i|VsSfE6ToY|mpo;_5Ojp;bc>g5bGObRR|mVhl?V$NJYlIZJ$pYW91wqYEDlTnF9
z)h_`NJw}+&WQ6mNn9w-lcC#|I|0c%eUOs;~9q}X{YUwt^KphOGWU4PL72U at u`6d{i
zZ<un$9h1dJ$l7uMJwqBD*%k1XG7uA%{7(7B)F>PdI%JUls_Bzq(TJK76!qVMR&ooX
zcMSd*#2E4&LEaEMpY1v1!!)0SvKmS1a}`?(gE~eAToYxhf at GntnFn^l>uVTKmiK?S
z+0!py1~dh;;&`4s#1fdyG*bGJo;aJ{dyg4V=8>ruYXP4k&~}<=UP0n4W3{tE>vgcb
z)xCY?qfj$fajtu_nn?TSou3TlmcncF0A&ZoN60cwKpoc&eK}EMooULOc8#`VWsL!-
ztX7Vy6^=4-Q?ZS>f_RTMX79X-JYauF+ZlOmi~rk2M<&bNt`ExKE4s3$`kgmsz$zAE
zrjL}}`uk<!xcQ~KzY3KE)hPGkY+8C-f2UTSj7jWHI6y~tt)|qT=e3i`9)RBK0lxQl
z_Y at 7wAuPNOJCq&tx=22=`plIFhyIBjDn`)4je4v&FYD)loY at P#sI_s&Hj;l*c$(G$
z(YY<%4$-#x$S5SICn1lMP#%=$bW7l(jFmN~eiGUFgf%3M$kBa83Nl4{_ie1la4NFf
z9eTcvn|Y@#od~SmyPL-L;V<PN*up!2`x7W at Zb5d5+~Cw<UbqGqt{H|g5%};-Q&H1T
zpHAvZ<VYTxO*-uiq0ofHo;`n2^m=(Z&%=T#v%ZsV`u%8l6L97$mN4jIELyaoD2ufM
zGP at iErsGX5zQzZ-WHKI0OXq>OeV2c+S?sZ)O{qbqH96RqKC>N1-3kM$<R+f#4Vg3O
zF(nmC`fr4(f&r?MHu2yt99$>l_CIwn5hOr)n}K~-&$9NycKB at y+`xZx9By7A0oV*_
zqgl at R&<1bht<g;be$)>x=JT2$ePkF#MkdDkLJH at N;*=}}2iAB9gp&RivkNomztZ}^
zp-R+;{89Y?7Cy_9^A?GCa!h<hg<KF<5)aARz|qobFVKW{jvJVWy?aaFtrtApSD=hw
zOZzD3Xf;P+9 at O4d5mbM~1~(bTcMfdrHx-YXF!mzu^P&Cya2JCZI)ye)b_S!D3n$eX
z@*+iPdwq=*f~E4^#w(W4hcR at UJc<(@nhvVpkWxGe;u2C7HwWb(@3X|caC#C@%n($l
zYf7SmH5U!BzBRr^gm6+F9x^Kb(WC~jV&2X()XCQ{0p?Du#L$0DE!=cV+sZxi4}xTJ
z at NX5e?u+6*I25|yLUz#d?ah*23DcVKjKWJZQZdRgb1E&U!=<R_k`3RC@}v~QNqGY!
zQN+KlLX%?K>ihu;a?elMb=WgXWISGf55AOjq at k2G@7xqRq5^>RUnLM5`i}&@-pyFQ
zH)Ax%HO8yYyIOyic%~m>c=~Al=LHo1$do;}-P5(hP}P9iQ1qJQ9yp2Tc{cj1)A`)s
zA)|X<=c);ZXln>b=D~wdp^#mgy9M5pr0UNL5NG4uSlLm5s=L8<rQlS25oHXPzeYDy
z(<`bO!YcI3GlGUU+7h(v2s7d6iC`Cp)o*T9IMCB)R}6nqq*me0mZd#@yDPK`41X^s
z7A!W0C?awMKlq2c<p0%Exzi(MTwiqMUL<m at -7khW@;TLWVS(t|jkU;S3k6uq>Zwv!
z4b?9sK^0yJ^3^%S!IJj68!f|%_0*5iWd+wF$-b9m3>CY6)oQ>ANrc31yvww|wtIQQ
z5~HTq5JG=k%3Q$KRNDh|xHwb|M~zBw;YVvW at WFme27teHGY|eErZZW$p+_5baRX!*
z{z~XXK+$+(@Ox^%NBA=yQc^b-m>W#jdfZG^XNH%PPw~S at Bi;n)YR{-!$;PO<fJGC(
z9M`uVJrm`Cxq0KL_GKAF`PK3HBgCxX&9~cFG!1`hhwUzKvFBn6-;<TCWf;)|2xGxI
zQBTQDG30D^d(B^CwVbyy5VGC8KVD5DiB#bU8j0<hGpui at -2gi?sD>%mEVcic`|=lj
zJE}~`uS%qJn6Ne4qp9XM3s%`cFrs4W44V!H6CqFQH7uG6HEjBA)G~D9YQx768fc}6
z`C@;p?v~k#t?wIE{GDZn@)#9xyu5 at LOt7@3F!pd-c_R=bu1U1;Ow~&z&@zA>c&2iR
zAlK^1PGF5WW*wvX{vnd?>=+%v^}_70U#K0pqRm4<6~4=zajp(iAfK&SHQFN*_ES&l
zTZTiZn_oB7FOqtWU;-`s#*h8V1?J#q`Tu`?RHA%FN6_Wj^sfq#MF1f9uqL-iH)oCF
zcl#3lp3v)eC1lX5*)9K~Hu7kA*<au%3f|GQ?iF%dqabLZYsx at ++TfRryfA;r!!|a2
z-sTMtjfWf?<-$vDEPI5M-RIK|6<*0L3Oc!+n)nGDRx9W8f#7xlD}f|y;V`T?O)Gx`
z(7DWbKKKAs$7i9rr$iFJ87UwSY}p9Irrn_6gPV(^JK`oCJs at lUW<0q>DOzSQXZkqF
z6T%Ld4#c9g-acxhPoAx*+C%z%Xll&9B_A0f_E{OLyMhCJ8SzyDPw%-Iq-!E0h=`81
zf)}#wymhdwneYt7+?&!H!EV|h@(6#mkgHMUGGDEf{qd~;zp3n0A!}6rV;E$vFNiQ1
zsO1gzVT_TW*u?Ar96%vfJ`XwdhOr~Tk3QU8K2R!~ky6vV3U5YA52<xYogR0A4VSzN
zOdVopcn$-%`(59j7ac?ru8g^fObEk+omcJynQcYh-ouDb59B|ra{Rew^hkdpzu98w
z;sHk#C@>cJ$|DPvPBoX=F9eF*A*&#$wm-<m^bDTzF2Z3OoF^mJ>N{g<rnb_`%pOLs
zBE`O5MhIN#8*xKGV7>K|M)P0FnGm at Ar>pJ$A_`KUb0v#}#^JDWz_7uMuI2 at Un^4o3
zd1}DpgRz4~WMM8qWvVf_8^nJOu0Vo<8GGS5jM-;qYZ_Hx3>m?A3pouHBRBSu(tPy*
zrZJcJ_uQUfX}&oH)>J%f#;$mW`?aqD0u4MNDa80=6ha3zL4hArVFHmX5U1maroK!G
z***r<xKlb0z+xn}89#>8&Sp0gFXz0Q1hg#W!H`?DyQc_ at V+xWn`gVU%h+6~evGBAg
zxKef#o=89CGX}sF=H_4>#gIb>?VMR}^m;JLL6LcCFh6ZkjE*7uXrdt<WHovUsVO<s
z>cNo at _Sf)J&Cv1=^oI8^88L`3#yV-r*ij;i8~P%r3mqpXv6Wb7x)b&%yt=yi0bx~O
z8$R$epYx>KtNC!TCGCIbHr=X!nSwJ=vc2Yy^<3mET3wqRQ4<=WuA_M@#(@N;l;pRe
zG#C2ofnm=~3pahC%*F+kCVF2uNmcEvQW23I>(xzIp>DfeU?!(>A}Z8on>d37^^aO~
z-H?3?1F{O|CYJknx7WA{4~UQT9Q~x!ymd{w#eeFU?<X}!GXH;nT%h7}!FbP}stZ5l
zu-8ZgI?OqZrjsYMzy6c}OO;hNO117?8pr;*U~s2X0yhwEZwr)x07(82L{fFhfPKQ3
ze4^N=)mB3Fo!PBxXr=f)25uhk9kEL{kAKgpS`0QD=DqiLe4y`fF!{J1#XbpEsvAv^
zNeoFcbLJMBS_*%!sO4>ZgSc|QcyNlVSUbEAZ?E*<A;kYO8Bb61)l#~JzgPB?=W0Rf
z9+(x(;=Xi<ImY9*B4TJBXQns=QIrEQejQaJP$e;|p+OHx?@!c%^-mMd`cJ$wkSKL2
zNWj5viwAB1)$Vs!w&yFKe7G3PZx<jgEk~VrHh-ZKNV9(lil5)@1e9j#kecnIDSKQ3
zzV65e!F)~Wwi}w_n2tk^e5X1*VMEe_F{)7OI1j1!4+E<9{|Z-XE74>C>?M at EDX(dm
zL-0?b7V#D^#VU)&@>{O$>*#ei?%J~d?qZgaZ7^ucdzG5tLT;5vpYox3R>QUvSpA*#
zaAM7^WgveJy6oa1Vga|$c|GboCQ#WH#VnwI^QKWr|N0t`XdZ|)+GlsIO)zfK%p}Ap
z|91v7Z7};7jy&Xr2;$tGy7sdbt>mT|A(<$~6e6ov;3&8(&Y9hL-3lMPmJ4O*matq8
z|5^A2utndq2}z{QWov;IZ at ppb_)7&LrOfO)S8spzcg-h($7+DL|EPi6u+_g^kDCF%
z`u&&L at fuwE)1QaT75dBo%F}%XK#q;>u8Amli|XR!9X{d^f8X2iPHVN!=oCz<P3cM|
zFRj`fkSq-r=t8_GQp_uOM9BDLfaD>0XG^D!KI(uD4*)oLFEJbx{*md)QIGF70&({M
zFZzGi7xBz`DEVbF>?3R+%&>OS at Kws$J6UIbhN^P>#{{N}_m!#Fra}?}9|7m+TfjXc
z1SNkt41L66bv)<MPv=GOei(6Ry>^8wX?r>Xtw0t>aB_znqy5GIqXv(t_U2KYeTxCZ
zQFUr;c^Dek|B4+KXy)O4fJIF`3?MAQlzV?%41uW?=RuUcNNp_jKiiVL(PaL%{S}21
zp8i}+j9Oa|3Y&%pj`wLjQgFNIjx`{i!WG>J-iXT&b5;)@gweE^M)Jc~H`sxT*hAfY
z+5&OG5$12BT3V$=6_G&$`5toIr~Ieqn_4>g!DEoVgbj(^gt);I>hrPRKa&iSpj3b4
zc!LUBiuSyCk>{vXDe8qj=*g8ckY5ZW5{w}ItD7`YBdjiM7>phal9gAO1ad)_m4Xi+
zbE$Qlo$Cd4d at dCa((<up2(1MmIg1tTH_y%#>5-W+Xh-A_6u6HVw`(W>W|=gLE55sQ
z!qsUa;H3y86GGj_lSJ#`?HdzdM+kq;@|i`($T{dzt_A`+U&XU5OG{2~sAqS81WTY@
z1vV8iY#rtanu#@O9VjiI-5W5h*P^JBm9hHmWhh&p at fT$3%b>b=(d at _y99z3c1e*7b
zy4t2F3U at G%5n_xj+TJzZ;b3)lR at eOY({C)fVQ+NtBJKX`hn(+(;FnTe2=0IHd^7?w
z`;K7`iw7`SgeMV-44lGWz@${4TH6;%Wa3A7_0|;p?FKtaA8_PL0XxC(-NN&x(ouf7
zxn}?<3phxonI$M9*vDO at H^fu1Ann5Auh{~xRoZXmq}IfMA|0RZobeTW)t0;Vl+h-e
zjb5PdA&?p+iShsqX+Y)N^00qqO6P{`*<aR4^npvjTQzFi=Rk58LzU*@kh<f%qZl?=
zr$nRVI2IW)AM&mCzQF7Avs`8qD94AWa#d at sNxc3wl@U|BS7`BdqnO-&2**RGz<Z*D
zB?}jSC(T5(zwIv8yV0<e%xHjs(Pn7_8fj*k at AdUUeMC7F#fR6cFgJe%x4XKznQ%v_
zq#u!gRtm7Xq5dNieV?IY8M!g6;s#WiKJE4KH^7~DONYKoMm8Moe{=B)I}Z|v9lWw|
zPDz}LalwEpD0hu7w;)N9*<L?yqPh at wIUY%|Xr at 0rd`=7l`zgAsA?z|g>yyxZ8lxV1
zbz8zBHLRQCW`L($%z%F(TrCj03v=($P537ye{2PP&}a7aS at Byqr$bxR=4f6+Wif`0
zd%gc|J5ulzw-KoFVC8p~@UeZR=G|tz)iFwBdvuKwU3%Sh8o?H;c{ZTdx-z#*d;CML
zo^hPC=mWDvMI_~fp26C-F$%5C7eG;Q_`JF;0lgRjl#QtVwugVy-}ZdY0Ce16<KxtO
z+z!Thnmv*6EAYU;!?I9tbhulUrAOa~-nCbCT}qjq#k10DONKAgWjX|_!Jch<%o&9-
z8Gn+n^467sm_p)imx#wv7-_jE90QWGHwy2{PZGN3$M&27fjH|`Ao|`i-2Xt^UJ2TR
z;Df=vDPf8-BO8Ct4JWQtm(J9bwJl+Zlz)lIAzyn3CP&kU2deE84P2}Wj*#XpvSPuP
zQr?i)Z)qm*FN*rB`u}(xHi4{%AJm3VKiSyJ{SV6`mbym^+ at avE{;EiwW0PH*VaumP
zv%QV+T*u4I@%=#~0tlf-rvTu3*?NLPhNnYtYlRzqm7ae%vnEGJO0&r at SI?(jyw8NX
zoGX>0O`WbtxfaAj12kGo(LzPdMPJX`TLnluy$<{(M2L(k8Mu@~J;1x9r1Yan78sSY
zp*DtpppMra@=L<BIY`A)7>u7Z{C$NwTS_=(2swP(9Z`Cd<jAq6YfQSx^!y0^?mi)l
z4z*)0PrrZR!$vk_#^Jf#;zaf~{qZ76Wjy01#sJvw>)E$|yn})~y>Tq;8<jOaX!-JE
zuwK-ZcE1etwD=eAIJ($_74Rvzv4snQ at PX>!7Vb-9Fxm~a>N+jSutGe!`9j&I1^6=p
z`*1;0k2|(38wMyW5pgvRf#h1BDJobpV6-^BjevieA1SF?A`%IyuvUJkBr%SXFPKg~
zHk(Ls8nXS*UdJLJ>xq-dZ0{@eD{K5k$GWe9;-dRj^;haX(wS}0hOPCZ_?u at G^;5{C
z+$3LGR)sS49Ax#~IFsvC&*!<L%qHT$LQhVt$yZP at sFNVD5LKEYrIFL5LZ32{@<tdK
zD~^9%|5zSqxxw`1lwZ0DB>c=`F|79Z at nk3YaHXHB5!JO(MLmQLb0xw6vv!(b>W8_e
zjn<$rXK#n)=ezD1tccmkt#pCv7!zD=BuKVv?|hWZm&ZvF_dl5|w423780Ro`1IAn)
zPkrKuMB||9&ohPXE=+eg6ab}Vg%H~GX0(5A+htHM*$!;&qBJ>!7H}R3!*}~~*}``-
zZe at g(p11;1Ao$Lb0>Ek=K2`S_hc+JPVy*NH)YZHV at XzF;bNFC|H;+rSE&oc310dVc
z35B%#>%NnKu4EIgdfkOOF^!(Yc&1pl%oFbHjGfA~<43XT7BujPys}Hg&>-aHPyv6>
zRI-uQar=K!-m=;V&W^;Ck`M88cJj6nBLZ!+J*z;n3unjYHw<~eYoU`;Q{d{2xUu6W
ztifFrSKGR&^;#UCR}wcaaGO~>>_)GZWQe83TZJgAuVj~oZ&%=H)uIaD3Q#Yt59a`^
z+Dz(YO)iNhKO4J0Tj?TY=|Y2YfX;s?U=v%Mz;tuif~GjN%e5>*z9Y^KG<PHZAW*Wk
zcix4mwrv-QyGS>QnmZj^C4 at YR<fcL}($d`0RcH?rn6l+7u{LSNp;~p86>f=L at br{n
zj?4Rxrho>dJ`43()}uJ{RLWawvU;vJ<})!)h7AkP@;&BID;&UnZ+X*yOs0P_6W{o&
z^8N6pgQcxDwBpBAIBxi4)il*iG>+8QTY>&4`)cpU?q-1!s8lxd#ygKrj2w)Eq|%nA
z?ixx3Im|;KQ(fvA)=Pov{Jlu440C{C@^Pi72apU^^_zm7oyK>*;j=Qq>w1fCB`A(B
zJJzXcdVl*1`5ovEV8dJ?ecpcyj;^aJbN#VYfjGL%T<P#zi1y9<7I at p7u}S9*17P-O
zZYFd`0p)88ROvLrWC<C9q(YYvMimHsW3}!cAX{mcHyDq%1i(YTKO5=c^EeY^)n{Cb
zID2)9I32-bcC1YQVve`+{QxOA$VyC$>Z+8QDKA0Krhkd(6h>P}_WFM at w7#4P!}d2{
zm?MBU*rVw;L#1*=hFpixbhR2U1 at n3(1vkes-eYtQrTniSP;mf_{=0cnHslp9t(ktj
z at 4kTq_chwg<$w5F%-C*3NJ{y5)P{&|nsT>8&ulT_`W=y7$V0Agzqx8zsF}bgSd6Vp
zlaq&4kDVGliwcKxGnIeaD#d5aGR-Eh+Q3HCUe1nI5;atkoI{O6Y#nhyyo_{Y`>?8<
z;9SnYpvym?IMjQ_LnX}EdVn3HSMU%nk(`K_n7$_(aZ9{i7aK_-O-J^3i11ohn#qtb
z?7fS$JC;>K>3evSh`q8|6g^RVt at H8Xq|{~ygBsSgv10gDPY8cygDFC5^q at DO^e-af
z{AqPw68Hm%Lt6vgEVAFs7tDRA$|gmilr)rrMfnl4<nH-nVbqI_6xjjivmta6YiD-^
z$^;uO^o1)BRv8J_xI5>%#I^5_9w&~9R|#d9xavzp0T9`4p&(C7cio<>B}Lau7^!E`
zX0)YPQ7Q^vFY14n*`KQL#2c;Z+xG|v(`=DZQ3a6d4`2vzd1FN8ta}^?Dd61**n at YN
zPLMEy!3?qUfrpQ4X%5yA_0PW4DKSmS1N?n0C6SQEX12ApyU9ptuK8x?Tll{ldROUL
zIuC5CzgSqQy|jETp&Vtn?@gn$NV5T43w3B`q(;!>g%W?{0rr<c at IJDh-Rf(xd+Ezz
z at wlci2Dbo8E8gbn<5Wj}e_8imUB+P`%1w5;dz1~kxcaI5cOchXTM7`2bKTIK0O!NF
z*;a}zf`PAxHHme*U=2oBKB<S at D>B}m4K+~7LZJN>w7=T6Ux^44LJ^!hE-7FI4q)^0
z_rP6`uI+zdViCvuL?Y}~{-sy{GBGPMnThwiUt|&U?s at 0-P(6{q?db#qBH{HSpbckc
zn*#kn$>J?~%CsJGKB;;~Kx+J!w2TMH*`e;n(9P(lNwu8bYR=0dy@<7C-c&I9$)J`Q
zhUi)ikm<<+Lf^jC?;8-q;UdMP=Rkco2y_g8<*a{r(63&4d&WK_5tJ68>+Cr}<1-Fv
zL(gMM6V4yP1>qtLT0Pt*FP?3L@(*>Ic|&m6y4GjdVo3{O1)mz2y~iKI%T8{qALk4H
zS=FA=gpV~2I$+Rx7=hWe8#3`%uyVaS#4Z4Km5KTyo#KAnOo9cgi9PgJBL3!tanAv1
z>nnf#(5(Q(8|L&wG(pmd`lT4cSS&OWK|h8YIV$R&&HX7KEYD{>B)~lkXRFFDw|w}+
zmPYz>$BY1pj0Zy!MMHdrO0q6J74~Jr!&>T{4ytjyw!F=3B3!!k#}N3n7I~Y)JwHx6
zsO at kiNF(C!9~qycdwE6TYTqw#s~w3#q=|pmbe)<OS=d-#fhHMLG_rY(pkxH!B<7qI
zy1?l-MFe=VK{Da4XI^RF(9LoQOJfYli^51}aR_HSt1X7@#AQn>%NJ$dH9y1 at a4MZD
z6fJwuwL#N%x)z?_VGO>hRBoe2N+gU|r(F59P3#2W`N}36E{5|E%<W*Wo)0o-)&YNN
zfhY)fhn}3<t4EQ1QnO at V*@LTEEt-u}`}aV8WPRuH)uve|#AU)eS>_QDtk+No!`{!q
zY4;Pu#C8NZjqj>7<j6u;k9rS4%bN#TLOp<P)Hojfk|AL>1f0P-QI*!mQ&!}AFg%Uv
zaJWKZ5jQzXr;_Z)foAy#r!3wr(Vl-eAHOwYSA at y?(U3c~<1BYrspWJC2jZV6=={At
zZ)y+fZhLwhs*`8xL%1wj>o*ocyIN%j?C2q&>&nsD#_KCieVx=McQYJvQft+eQDWI@
zaBjv~8%c2sy5`UEQq<!a&^}b0#-6i*w1}RsQ`CQx1jec5mbWR1&4-!5q8xu=5~$!R
zHxtmY>wx~H<FXv%{Kf5WfXQElRi>RfazQ7mvNTcOi{A_5Q&Mg>vZVmfS}TW7z`n#s
z)XIU8WvA9yMJtG(V;YbQ?_LT<j~9S~$Yy&e!gAvh>Z3pT-P6OCQlT%uel%M&{z4wu
z1B58FOm3Nd{x at il^N2$^Yj%Ge3V=@z`3XFuW5jaUC^^Z<B?DI;z;p{uISymXotkM?
zXy&qxQ(td-ZvOFf4z3 at WT-l`!kcWwF$wVaYWAQ#8cG<bJ=cPhxP|m<tD6Ts>-gGwk
z^Hga69M{S`a`eV6M0&4)0AFkLzvkQGYfsTKG)B~GT@?Lub5sc5yXb$C!Uh?VuOfca
zz0oXR3S+>Ly9%|@S%?aX_1G&Y$2!LKR- at Wvju!OXDchz|YHhUe>}`SC2>G^ezWz7b
zyTA3hOPD34n8pR`RfpB-{DrxX_Xv at JH@T2|zF}mr!|;2jZNyV9q#WRLN)C#-F6hrr
zAVi7L;i)nAY0LuO9zcIN&1PZh7MC||1h3g=UiYrjd569Wq&@?0=N_p at Jy0UvJ%9ct
zD2g*&-YVr-f+~Ym=+ at g|6;H1+P8FA75SIa9a7WoSI>%`rb8t*vd;{s)t98PY!=Hxn
z)4$cNR}JqMGB?L2#>4Q}-Y7lWbVwtvD=9TI{A~P^8nn53QjLGcDs<pGsfJ`b8`E)u
zBKxGE1bl1TCX~oiw`K(3O!OR2FiIHc{br!=N4En{@t}&bK1KPO6g at D>lfxecFN9R6
zx=$UO=EX-IPm(fOcE$u!8_eW%;&A3|YY>v5i^SiE=jNV54uK%7OC9t#v4~$r2Pnb;
z^jS)y3qu~Fq2zzQ{;EM6LU^z!&8tM7iPwtVQjU!Oe{Pl<R*4VHs at IHu`H88o1t<tP
zi<QqL4<{r!A|W3VB(r<Un%N0e1}wL at O9e^BDwIOCP!@m8nEa))?lA)v<LAgm0<Os=
z&wh?qXR*xz6n0DC at +lekt1)%cUd)eqp^$Q(b~rSSw3vVPS*HiqQVuoCnaJ9}X at o({
zP~cw>Pl1Gr)WZlAJk5(mtxcOW<8AbL+;Dns)iZ-A5 at pkF{24#VzF57!5?R5&NkNn!
za%ex|v0`hjf(FroxnRw030kT43rr7AcQNK}f#R;dLMIffgW0;{;qGo)u53_q*e!lY
zHZOP#*EfHvp?-pJ+`z36uX>01T^0`_4Py|AJdTbH9_t=o$b-*_^%PMKO{5lelTOKX
zB<moisKP%GW21jlcB at D5r^gV*&m78xiW9l7e8_|%to2;k&4(3-(W at us*c$0u5LLj5
z?E3AYLPS96&vv|f67-g=#<;j1-|6ftxgDgCsz85-PHPT_vD!f$GnT?PX(dyNj1rTr
z&9|d1%?QUCJ<v`)jmLKy17`ImAy0}=rBLZnXd+vg*(hP2k(c8~Ze2?KN7S-b9dtow
zewdWpR)y3Z>`c9sk}iNOf|q2w+4%^JRvk?wr+rjoPvs>v!&NQ(jDayT^*EKtvB3M-
z&0K!~HsMA+e^19rzI7$l;rv<Y0uXK4HnsNH+0;=0X?#||2dpMTpPJ8Q9bg?KV6q(;
zi1~zUg^D)1Sna`b#y{L9r-67 at 5#nBU)F0HdsJtn<=ZIpwB3ogJaW2j*+uplFslkMv
zfH!zaW>3DEoWE-`Zn3Em at Z!AGHAq_^$ryi~SzcB3G~w&Buc<&HMtjB%L6VWP>IgL^
z<XXek7tgU`<KgNasE~>d9~_c_`RXMXdWgT^Oq}N;I0u^Jl+Qm$Zey_8+q|&p`8uJ$
zZS|V^G^I;T_xn87<Ru0CA)U~8CFEY6ylQBcmAbsiqEqO=vs{9*a^Nt|M&kWR!bpFF
zog(HfdrJ}(u6)w8SCaS;ShTl2KOy%F_|fS|!bH at Fj?=Yio#Lv19+4J_XBTtLofM(A
zjkGkrRN4i34_v;hfo`fm4fjBipT{ZDaa_j`Vd2S<U4Zr~ov$2PgLK}M&Qw6u*iF(n
z_+Lb58>tE{Ea at 6FjJ0O5kV<Nb)$D(wU`1m2U}YDLnuSSL2X<cWZ4^FmJnCRCA at X0@
zf7&5a-90aJC(RPRkeUSW?wZxE>Yzby?aFyRB6njA7#U~KswkAK>xugX*xiYzj`_Jt
z@^FCO%5{eCRkGs(?aTgeXOH|6QZ$;};VSQD8%e*DXq}&?BTp7*-CqEbs|J76lb-!9
zyF at oLq)T026jm+qenil|=k!Jq?+UxB08w&Zd2<6iW4j*2)auc_X-h)WTVTK-LcjoB
zDlxRfV_BvF9vlSarjLn0W~7dJ(^o=KrO(F-&!P6rkQc)4(XoO2FDar#dpNPmP`AFI
z+i^?I^|8SpS^b?vaShGAtZIM9l&v0`@6g3DWrXnjxAwr`D0;Pl8#>#2@($W-W$2Xj
z?cqhGqJ??XhZ^&E!$$Rewe-UqzSJ5jl8wl{pkg7pku!0TcDhWwiu0NQ9J61m^LacH
zZJ0uS!xf*^xL}k^2-$HAAFa$CG&AE%tx*&k|6H$->yWd`J4+jtptgS*<)j^Zm}{dM
z at O4l0P+}nv+3yA*vtF&g9FJ!5RoToFYt6`Qe2xX(2=Mj|r>wXesy?von3gQ>71Z>Y
zaJx;-dVhrfW0nc})&><uRKwW>qykN%#tbhV;Vp30jjMmn;Z#5vunk=m4Dwaaoao}=
zM~&QQRVkc<8uJb{y|91skH7YQ3kbiF4J>?CI0U$81-VeztlYa5ADV*M07Vut0CZk`
zL5!Qzh>|}YXX`Hew?CNVUKkOx5eyLQs65+6 at 0F-euX~b^HLB`j4E8JjC7OF+)4H8~
z+Z(mR)2lM(2F#4nJ==)0m`vA%GZvC2i9m*9AyxqSfreqg4o-hh{z+As1}8${;&f!^
z=wHQm0Aax*o7LXo!MebgSlF8Dg8gLU<#1q?CTd1dk*Rq?;pMWP<2 at k6-oOzq%}tX}
z9ZOo}28>i2dtOfw2u!91_EpAS=EXVH^+-SKhq#Bky#g!>7)!%Udt2r()$S)PDn#bV
z%)+_T;yg*HmXm)Fr`|8Oc&a1v0Z at 99*w~oiJ%Lt@^ps`!mWk1+JJ*dq+h8o4wZT<#
zET@#$tCX3q0|_qQZEJp^EMyj_sBl3JDv0;I>U)00qY!}_1$Xr~SFc8L8IYvm%lif?
zMHXluX%{XqJdLGVtw$6{GwsommALPgQy4oZ9uP+tC3t^<R<lxjMZAXE?j~gL9Yp>5
z7d<7X)K<yw6Cs at vGd<KcH_f;+`=hkG?QvBF6q|}hI%_ at H!ls7%NlY-;j{lb6h1V%y
zota2t)C3sS?YW5O)%isT^1+T8nOBtrmJ~o?t^(5GRCwa%?PlqoT;!D#V#v+ZYZud0
zfzj}M7m0t`7V(v0Ws#>NndSrEq8FSao5*YEI`YJ+D&o=aJb7nVQ3P00gUbO8Q*`Ku
zz5o7p1GV=<l*V;lu|=BHtdHHWwnc>ZrUc;{87TVSV!G!KIJsBwoPkHB;8DcaQyTr#
zA50S1J9FIzf7GA`kCsr1J6>ut#7)!LZRVPkt$%-g_WGjtSG_4*bkn?gjv*A0W-`&C
z!J7<rDae<obR_n^S}ZeqCJi4E`HV~ifZ4RekxD_s2H7}wS~IthQPDrxz2#)8z%hJ#
z&rf){c7hdTMxNXMJyvm5j<svIo4(hP00lt$zq|5w1>nfM>asH0X28eTFUr|~7{H5u
zK{ppW)mdtPZC{RV65-2|*MNU5<=pSDmuTIIy}~bPcHo7mRa;}DeZM~=4i6`%7Y{0R
ze)J-tW{q^p`;NOgClB-L0{3j885oShmxWDf>HHHBW@$kWgv>LW&u#Xt_<M<3R9V~r
zy$vGi)G5lOh+nkQq7wb4TGn-i?ovQ6#gBK8uldh^Hk|Hh72siO*Y_1^;Lwc;rST!J
z?!AAL{xRPw7SQ+0xM0-f&C9ZTpj9aeRS=~4^1p-bP|)%bfFX4}6WU)p-|B0jbV%h3
z`Enm1#^O&x8}q at q>3S_gA}oCFVd<+Gy2XjxWv|3!iPz#D#j{q_<w53VpHGNJkwIsN
zx?GBXj?P_r+Y#DJGKPLHaXAl6>Dw*-xnj|Iqdl<D#*AgaFB`gm%i^d+hNAD3M^K{l
z4XT%P#--Ayt>-!K$3QuyAzkOe^aODc5p8!zvh(Q9NFG*fhtLaFuPec@;I7-YWJP8&
zaNM;FP4A8J5R864jmoCh$t>sZ1>yn(hv3D3%=d8CY0t)Bb68h_)B6pxxh9NMnI3f+
zeD?VGcXGU>Ap<zd)Lx1<^tYpNU*H)nqKffy_~H4-_x}n2+x<quT26E<+d)k)c}^R8
ztz5{0e`4Z6%r2JEfp&pfeyopR-~S%&<vu?QEW34+7n;|J^5zylcr?`9(T{TpnTg4N
zgMM)|l at 3OU3B)JJdeTbTjmo#J&2MNzVZS!L0*$z+l?flqe)C5fZhOX=N%Wg*S%a at t
zvnQX8mYI#``3IkBh}omPpkhUsu|0fxYvnkd<?dlKkzClN6%{D5;oid%xj{b~ywXGS
za|^Z~IU~#8psBM_lZh$J%D5&yPo`{te!N*H<<G8m+s|V&u%*1ty6sYXbOwf(M;aCI
z$21an#vbmYY@=#ujuYX$XzCx!FTLDbSh(W@=uzTfTzTaXViM;WJa`0bU<=KH1+p4q
zcg0O)V<n7_(VAY0;)4c;Em%ULEBIE?HkOV5ZZsC20dmw^6TP$O;UZa(bRx%p-OHgo
zdhKpG7`W-A)dTJc067%InJ+#<5CQ8dey0AkQ8j~owo4Uoz$#U|n{Z{*rp1pO0V<DY
zNRGaWm>NajupW+`K2WaIP<0sBV7V<KP-8xM6&P{gr$c)ijq!OW?|kV_(aNZkx@*VS
zv1I}wjY|SP<-HW1sjH|aQTwTXP9dy$- at y!nNJAohVnpVKxx$a)h8Q#HSxH+<=J6KZ
zyNZouU-f9x at 7opm>eg8zls+p^GmxZbYr7?n_};SB)FD}wyl80+^4(DuyM&cBCYAn5
zF^7zpUV4de$j&Q()9S`!%!!R4;RUNo>3#w`s?Y->LpYjr`OLHIBjRU&WgH!#MHRU?
z*RR9eZ<9AJ`ckNzgccN1gv>=c`k}0 at KV+y5NEJG+Kfa~ljlxm!fUI!!I_hkOLS7nd
z9CvfWx#<b7 at tOC23&I8#Oa(``(umOMKT*=#aF4UB!_uW_!3qI)>XykG&g-;si9cbU
z`gw at 7@TRIt;7iDA<HGQNL`{Xb7-lnYKy-7c&D*El;F)+l(LX{`l;lBqwTx!-1PkM?
zBKLD9^X^=6q3{A;SE;1S=E|~_RtuFv`HD>TOY7uLli_3xPW&sW2i4zded|P8DVdTn
zZ{h at UJKC@kE-#zI(`nc;3cwk3Q)kh(zz->DL8I<Ff_|kJO?zN}YzXsWWOFV6%JL3C
zS=Uv)1${D<KpCxpF at Ui>k;?N>sd7S6w716d^X_jYY{mrDd7eW*lR+9xKq#1%4MvQI
z9{-x6nPm=}({64-)(J&4m0xV#|3d%o9TVkA7e^_Rdr5Ijgq&fo4{OuypvS#SY#ER6
zQ$<<?^AfUMg?+_;JBYPJNuZ@%WrbSc6^X)8sR&5K5(m<_y``CGSWECVQnCiF=ZNo#
z#Paz2G==&&9s0t>f~vt(!WO<dSWGKJ$ffzeM(Kr$CASks&A?la5>xphGVD8wZ9Eg1
zL{+YZ$bA&&>@{t*r?^R`WCIy!m(;qvEyplRHn>bUfpX4&9t^dpTK7%Dz-NQY%Og*}
zq3^~%mN$$$R8PJi;a$Dse(b;-iwx7)9aL&*^M$j_!C<ZBHk=pRc65MOOq8UUnOMvL
z8d3Iv<$Y}#vV7qm3B287(EnN%M&|ne&Yt%=F7RVMfryVLVWVO0{r512#9xv7RP_XF
z<x8+Ef~FFG3bipbPOi-2S7VkX$wOu+*rlW at 8&GPYXHrSV)o8*siH8*#3`mXH_7xmB
zGdMY7u%N`bL37&qH1|Vt^vD#KnmrV4P at z}nGNB?wf~%$$6*)<75xbqf5>6e4!F{?i
z_OkjnF5DtRa2MR&wR3S-6gLGif*oaM>mjK1H5x8|Jcm2}?5J;MJ8eQ!Pz@$ZrW1hc
z_42$~OYJX#ahJ)%6oz=``}>t03~Vt*!vC$fGf}_B(hH9OqfW4j;5A=izclOQSpn-_
zGCRS8{e>sIj=aQQ#$A|#e^5Ytva at D{yTG0%0aPIl at ru+T8R0ZYUnKaH=5K&UyK{1V
z{%=2j_ at SS0CpkKNMs%ZSla>f(HjuG?-|<IS>%%)Fr%YA}{bxG9?Xo3r^d06L>t2>^
zE__sM({`6j^FLLkoAUg5`tf;bU+ at Zi-ek{TBAUsC&y`(#dQ_ThhQU*LzZZ;Yj|CQW
zIP?z0A2N8VLLf(E-DX-gjU}XZp<3w_;VzPY1_ahYrb>y)`h5rk7q%A<AM579M=rVs
z%Vy_P?mO|TG1?2otnSRF7uAKQn70IRylBXpQ$_A at ig0{q7K|i(WgXZV4`+?$hbG4!
zbKQ@=F4K|7fOn$AiRseQ-uGQ=y%quLgjBr382hPr1VGU-bir;fjTavU<hpn4nd0Jq
zw!JgFFG|6_?)Te9Be<DafKvxxw5f?Zorx*a^TxqW?pcSbR9`zPeN?`~JXKD2kWq@*
z{vPxmGp?SHI!bw~750s`A~+Mp6+MT49653bKD(+E$o2H-dDZ(NfpGyO?QCx at m43ea
ztWT+KQ$;X9zJ+w{Yi8%tCO9b1SI<j-<Azt_Ew7T5&;A<JqpDE{1~QJOv-`t|8gZ at z
z%F3OLyPGqVdZ$-#OwvMz%j|S2M=z;f$4D^#`flH+)!WY&-xJ_Wfp4~9R#u>~D)nBZ
z?mlEj_%|9FHbHf|52#0*&?PKX1FK+*@3Q{pIs)>g_yHt;A}$%%dC6qc!{_dQ=qwT4
z3olU(1K(=<EL?*$$hrhzwwz)5s(hG9V;&4s)HIX$MEYJxofkru1Hc#6 at tx-Sbd%Iy
zxO+2g%G7O%4)Qm03CHGGNKEdIodYQE8k}7U2A%HH61Pp|v^uFWvf(S_CJ^t|?CEt$
zOL4{!?^1M~O=G(XK|^M82KO?5{|=co<Gqoy7&*JEXy-k&ghwG>0vUQa64>W4AN_#x
z?5QpA$50w!T;bFVc4m;P+yWEN`dZx?{``vIK?IUu_J7T}RN3ljyEnCOm=gezj()~N
z;6;W0mhI6f9&j_d&*lG;Q~xukv0}kLEZ%|d!ra at oR`_c$oWw!7Z2U)m!=q2QElI-y
zVpJL{0Q(mW*!~%(lcXOw;Z_aED+?(+H1yL~8<)?#dWDU-qkx_H8=C<GD(`~_rGH^<
zdMsLhU;=^K-d0|-;>12wz&<suV|O_px2Pfl>{^&?mulw@>g8ZVaVn9%c7f>*5DOCr
z7z-F6>Mq>l0IBcgK_--cxWTDdWMYrb-+sbK`-S%_$hN}ApvkRSU6~Ibt0r^^lb^Aa
z#F)cz90O4RA5rNSwfl_P%>g0)Ya$uSOq>(vq_Sq;RJ_capsL1jjhI6i-S6DZxK&0x
zZ_{Y9zQcXoQagptY9Rqvr6dSqZnGDpFTT9~n*5T2;|@4Jm%Y}1uX+%$WykCftFcC=
z1#;mMMxnh41%B!ch-Or{-nZri;EK_iH|J-7j*2vM%YkZ<U1hV6+6RXg!$?~+nYbF`
z)qZu!tH-8%Npfg at Y*o}MQ=|%c-KnlWQrInYo+A%I>Ntz6p!D*95rIoy%TdsIrTp>W
z(cxbggyq4dMbB1$9e1*XejW1KwwI{!a>|~DZzM}szb?7OGoxrKoI-Hzch6)fT=+PY
zJkpQ^81g7?p5Xu1LOTD;)esg7x9mOwDbnAQK;5|Zds&8>vdumR;H87g&9&3vjnikf
z526X at vzLeGRB5j!*#!gfpZ!rCwpn`u at J4FZr&_g(CVmWmmj~chi*97 at Rbcq9F9(_8
zjWA=_*w*s<mM at p*h0Kh_=QO9MG}?%)<9^WEN8k!kMNu+P+d;~+EzrcFvZ at o-SXhH3
z;HSF`V_YP2{`8h at F*zN5r?!2+gdDi+oU*AfOB|GR6G)L>cvYXUC~{1Xt7ae7AMKjb
z=DXCThJ^`#waWpD>Dp1HX+*iS-3V1`+eiPKM;r;zKbP3QVl?lNxu$Ns425=hjyOJs
z3y=<(^Okt|3FMd#14|VbF|cZYNm>TN5Su4VVq~0T8*$VTLT1i5_W0f7>8~+(5sW0_
z5!NQVbaJ^ms>J{OYQ>G~6-TsT#;OVPl6B;tCGmNG_=eLe4%K?Mp_cO#aox8b&LrtW
zomX;;TA^t4{aNE2h~hM3CWPXtj{i9~nE8=!cPr{UVC>~w!#k+tr;5F}HB4S-X!k-V
zlgUd@&!REgj#*pmu)3$ln26HTZ($LF{ncSp9HdgcKU&#J0P8(c8F6Is$20{qio*0d
zvJj4ca+{(9i>kh`M%%Roq<DSo>A*#R&9~Tww;a{ECI at 8vzV43&t`3Y~uuDgAG+vKM
zZF=G0PwaF8MdAN<p$p!8k=x5lMpOuZUEFn#AqOFKFPdwYA5i{s^*p16Z1!VC{JY<q
zU{tlI7BNPMo%R(StsN8LeFHV$_p?+wM4#V(81oZi2|!MXSW|>(QS3+Q<Ep44H|}4W
z at pv%-lrZ%d<fNNJ$MZ{P at -+=$-6%v;=u5h}hIa+r)^LzoJD5ORFa2rzP>70|2q4>q
zWP(w%x5prf48*SC$hU?Q$5ip1S}yPU82UeJ6y}4lP5V%`Mg4?F>Ny49>>5`KYsdV5
z-Gx$or+j#XCRNl3$kE%9bmOgce4}%ySb}Tc$)4b-dktY)-A2e^P*&NGe|&?Be}+@#
zO^z{#TswVhVj835wlvx5y~zJAx{J5?CPSq_8n}n1(Hk5qxO0E7x7St#H|S$K6x%x0
ziEiwiq)w-W$;=&CLzZ+J{+SrQ4rkwgz%SJ;Ye=8I9%P{V3aXBhU>mfo@;b0+wj^0c
z;R5{zI1A*Z3^--TIVN<`r^lzx61)NM(&^4nC^5kxFHgpB4JmO5#yFoNXLT2h4z(Gd
zvOt*|^UhTPd3ilbZ)ID67O7j@*|J^dv35>1o0e!oK9M8n$`uMj%@k|(MvXszoCkvL
z_O6jsf5uAE%VG_mDBs|QL5IOqGfBa<ZiwU9A+tI&?;{b`bUiTPw4>b%EwlT~Lep_~
zAQ&1&RNH~*+FvqY&&@XWGtlpbwc5-4?s-=0)81YM1VP*x_<`Ji9$%und%R{QhTfDI
zTeBPfb9~&TK>-a(-{?o<w#in1(66~L>@9G0zu9KV@?68XnZBy1eRNk!5%eO`Avci7
z at fIRf%+(x&4ZX|6VhX%Tk7$D5D;o{tpT+r^!qqO!j3Q$*`<^YFQc$Na<CnJYz{rML
zo-wkf9LvW6p`2d|OH~y!+(C9?m^?nH at QcmwvKR3;nYmIUJb~F=_Ya<b;FLde at yJvf
zjJx2oshjPxGFhTZOtf!z-Z$pH$q7S?IUNF)z{`TeYpE#w{Pcik(xWQTIqVsqIJL>b
zI7BBIb|>2qLAou1vQ|bu72$hB7l+f?l!NK)|HZA$arg#A6ywgwhhh8SF<)3i)msRH
zIGZCSaBRXPPi!ao{%+ZS`N<&hu0R^47yTn%|BTwI70GQyGY|#l>GOeg2n$$56_$c^
zLuaDYcX!UQv<Cjs#A?C$kn7vypP0IGSN^{A{Jsz1`z`1Ljv)A$<Pski?s?v48y)&^
zv#ztgTk(Dr584Uz)9@(ii!LZoq9*hqpq8vcyf~1^IaiaO=<|brKN^1^!@<enVvoU>
z1FjYvJR at J=SIyJ<47m+WLMiq>D{sM9cz|l#oPn`udv at Bs`q at XjW!-p(49p+l4|tUm
zrF(0B(H$5UrfnA1yfDCB{MY}^G!(MJzT3sxkl=#%f?U(3&=?6EIRGmkny<6a4!5xb
zi=Sr9_<XTcM2 at z9>tpq|o&wWCw-Y5&>A3;&N2rMdvaICSACW)1irB>28<&$t%zOO7
zT$Ca_c|^5jI8`aaMSNXt5EACGb>(wqDd%TNB|mb6iUtEv3jirGfx-X~K4Ii6`XKWx
zUy##Q7uO1d$lp2#U26+=mFGV6IBHE0S!u<D-Iz#&Nj;Z;I?B?BO^bb)1V4mveN81U
zN%~|!<9j~|q02m)Nt9548U9k#0`022a8FM`kxe11I|?rG90s<kV?F~e^1Byv7)Uqo
ztSJ#7m|96My|m)y92tY3W6;FA0dCjABMygLO2hMKAlzHrDAon)Lw?mK6SG6sH$s6k
z$T()1-6rdQX_cZqA87-c=?P94MZ{>9E6gZQkdt`JKpYcwThrgq?<~^1Rak2v_h8=e
zx^GszN)OcU_S%&V&+RoaGGuH58z)Cfz}f6!zJTjCm2RoJt4E`5pHtWbN9?jw^*xHq
zk_fGU2`bDsJhar55zj=+S%L=+gq^ng4Lf|YFLc;{+w}s3^4LJDY`<=fB at V@D)OWZZ
z61kP`|8Aj#0HK)YblF<<KRT?0#V2{Gqnz1B_6Bs~)(9dvF7we&xRwrq#GvsD)aHop
zdaF(2(}z?-#xSOJqng*g-(*Er!J%T1-*6WKL at Bhu&QH6+=D?>A6$rsq;P)zB5*mm}
z*BL#3YD~?1S_Lqh0t&VXkCL?%lVp?Jn3w#r{fqWpicka$GTqL!c3?K#0LVVRcgD?G
zm#9`xuYh$KJucvSg~74a(aB8VdH&k5%~bR^*IrP!wz_<Zq8)wK$|oAGK!K%%WG6Qh
zp{W8$luK`m=$xA$L7%c2D3;aWR9r&H(v%&4R!|@&mbT(e8xyno7B!R=_{*`(8=yC{
z3$B_j1ks4tX&hO2ukZ8ca?+_AHu<?%wiKkAqRzM3CXOA@<%~W*Vm|}lsQPdR9vTAc
z at v_~HWBbI1Q;)2>@Q*QO9e>+IlJ;xmwdbL<hxBBx!u-G{MNsoUI#sCLlRr7iD}j at L
zwI-xpvu+(GV>U93mHbmRDzrq{aD~F!CO=5CyZ9t&w~*Oh1_XT)H;0_?pu+)JX?u-1
z9q>U;n%Nm*1E8KR7{XJnir-cYKG+~KmOeq3r}Ldu04}}4No4Abc^vA!vFrBk_n_##
zvS0raW4!_0zqTl*JQLIRww_>FYnrEjGWf%f3C#jt2~qS<Q84k@*w2~h at Hyw1Tqm_!
z96_)oNcYPR&g)uCU`>eXWvVNPfMD2?VjmXwh+g35OF$!f!0)~(DH_s*a7miEzk>5{
z?{>lnvKu?$W8Sa}*-;sJ`%|mZV2^!t{j-samTG>Z<SaQ$eDIN-Eu>qgPLgYX-PqVy
zbv6{zujsi=#Jim4<`3e0Wq2i5F>iZ<G4y*f-i7`&0+<ZOw&)7Vi*Fp?0$|}I);-N~
zC#p={V(p5%D^4`_Unn_v0#}X}>URSlb?6Ld#Q7K`LasLArfYIy$f^mPw*F_P>b*97
z at yk)M146OToqTh<UwC4e<6Q}V5&TRoCy-4828NsN9~bnU_Y<qFRIP#T8z=>f&=O4a
zFt?RkjTB~s7 at OGAmjF{$1=oVhAiQ53&DOzP(bkwlrzO#hf_ZPAlyga&ID5LKl{=*c
z+e&E0s`=a|I*z2iPWzz3H+(7)SosPZHShQs;2++8JQ{(qWSt2EDz*oIi*+LJv4Rb1
zR>A_%tFN#$br>n7++^Sl(e-T(rFu?m*Blf_W$nD6k04Zq!FO;sHu{}JubEiO_!=~a
z)40sTR-r%Hm$eaZUKU{=l2I`(wC at 5X7j4{u-D<rFV)bP`kf+ at +vf#kRtuQ?$FVVF4
zja$p!CcwQPpk$=>vYq08F%~sP8IZ`<%Ph=ijrjIocg<cHnB}nSWA3)d{^<QZxOwh|
zUop2^{qe6V3o}6N*u2_6F5%nm;XQryWYM9QYJUC_pZrqy6?-ANUo=H!p;{FL7H?7b
zK#vV46Ow2_rX<osEj)TYhq9=O6V3n|d;tu9{TIAZ5_IO8+9<exGnZW08}o0)P|jh9
zO(FqQ%*HKPPLq?xhU at x0SkDD8IW~4U##+K;BB;1;ivS=di+hHC6p)ln at -d@kk_|Z5
zEnEOW$|^gE)yTP)cYn|_oT#c{W#~@QV6nV<O`0P57`sBcN}CU<g&<)?cz1rTAiaLG
zH+*Gv_S9SaoFx^1;Ea)rzN$8<MOt-H-2Ru7lTf$T&8|v at PVK2Ga62QD=~(WbuHypj
z#ZxB at Fu6CKLc%?-Jdg$*d~>E_iF{OzqhMck;<q{bh$Yp}Eu$SH62J^*60UW|n5Tiz
zB+w&`o%#a$k+EV-y~H5s`W})5iiz*<LE4j%){sMZorD;FKD+q7SE8IjT8z7c&o0`K
z-wq~jaf*CEM>N4_IJ?GxhzF*vmuJi&oPS{om2=e)-U~~PA;lDr`vc`#xKv&Jo-D7t
z^s^xTEp}=q)}?47+;<O?t`=w6Hbhw)dj75_+<~#BhC7V(=Z*$BJH(TPj58)Ce|uD@
z at S!-}&?i=Z7nHhIc+<*Ye(xOO=gv#6II$G9Fa1Y`axsHCImq#8H)2)XNrlzt=|kgT
zP-|*){ggSsD^=U1aAegE2cE*9bIcuY;EJx>uAkWIwLrAI9mfI5SCALsFwbEQojHL0
zn$$^vxGRj9O-$ULU9RF>yCZ1YZ8;3BY&qqL{rGBs`UeU+mi=^WcZcUSB7 at VDqBrr_
zl~>@9B+}cZ_j+L`DZGUH=?(rQqVJLR`g557o&vN?8rVaEc>YsoPELksM%U_Yb>el{
zdCR}Lqie?pui(@KKr_#vNi9k`6Hbr(DWfp$G(!}rR<h)L|3xY^;IKQc{-dGic$N#)
zO%Yyy8gxuq9|H(-5sS(l)jM}!GE_RD?#h at Ng*PYD0M^|`ZrPre!(cU>v5Kk89BX{+
zY1oN^9-d6MeM#p6OJq+kcSy$Xqe81~GuC}#`7 at 55k`(l8OE<=SMmNsf$C9|hj58Pu
z4*S3sGo at UO*0tIXlW#@8Owx73POHsB{o_D?zxZ7228KXI|0kfa^bYLZZZ`3IcwV9&
zz+pQ0<f_LqrO{I$9MaYr#AAKgQ+?Bh^E%v94SsE-y>XRyM at gtZ=P%oo%Moat(qhWb
zt*(W*V3kuXlg79iv?OR1F_lgL((U5I!+_LL`It<g)sqbv+o$kKSI*u{Alrn$)XoNf
zorKN6L?7dGY9fpVCkm&sc7^k?Q at zQ?h_j0pIlJ$aE5uXG9`rM%>9y$MSpL13427Ey
z?~opt_B%vFq}=+6Y}QXl=d<BTE*$8yuF?y_X*L{DGxU59<U^cv+N&jy!n3(~ojmlS
zY4ifod;i;7CT%4JH#}o}y*?|N@!=|eVWBeUQQB2(+%?ho>6TMqff2imn=0?hVw;}=
zH$d{)sXcu^a>OS%<`2Z15nGM#CD274 at o1YzNheh&Ra!CD*^T)BNz2!+x4~eY=Ssa$
z7m)kt3;=GQ^E%Hlh0`nK9BxdDTvnTIhbu->Le{6aknZc;;NPbhJ`XaJYza|+2lE|a
z_d{QzZ<{{Ut%4_dngJ*1H=he=?+EMA1UxJoM~P at vv$nzTEb at J*emj$&#e~1BweeX6
zRH%k_-K9p_ at gxF;nGM{298b)ZL_+j6CtZk{Q>ayaOXNsFgD`}?&8=`PP@;~hvP8&W
zV*336rRY=s>b;>coT<jN`sYx8>HExpgE<t__pwGq`@n?p?AtI%e^03T?VWDsS(-m3
zf8~UZ>-VrEmq+i!mDcnb0`MtQ{m4~)JOhu&ryR+XAx_a_;0HeQP81Rlvbqp95OAH=
zME9rEA{jgGF}m;{Hw6Xzz|vz5-wQQnF<%}V`hcJ at hmGh@Ru9oI at x~#4))Nw+Dc>5k
zYx{d4#!9GHeR6o?18QB`bmcUKc&e=P<OaD6Wr|djd+Y_T=DpP9^oHFCxSx=9Zfs`$
zFAD>_*-a#!EEMI`hoDb>Y$rFzlV`2fttFBPT>ylqOd{Pt+urHAB2=ggl&)m&3Svjv
zsCsB#7CfoRt<{WI!BV(??^c+{0C9<~wbFd3vVbm`1;-lG4m?0BTGFzQg^JG$6c^7U
zb4kzYSu8sdU4W!m{&9%@@&3!1=Ic&x(>plr-MFu7&s^U>Q2cd#MdkN!t5-2iUdAm4
zS6;`P^e6Z=iK^HQTw1^>NI>KhCFLXBL=q}&Ev)YMBeq$=5fpuY>Aki>w5jaM=rr%M
zhz+=`8y#9Qz<Kh^hXf8?E?%-u?bpN5%8Zpa+!LB6vELe}{Jf45tULx(*3hgG+WqJp
z+uORa?e)O~PyaTPBIl at 08F{^2w4N0GRPOrM>FaQY>0|ZzgCHje^|@jWXPGW)XT>cf
z4;$mod;crL^4E!fUQA4j;O$)0B*{`F`!4czjW+|2viL;0Ng=mC^W`{QXe%c8OO!<H
zZH2>P`aQ5ak=!IRhakD$iCamh5rEOh!3jevDiy!E4o<*67-P{DntV)XV!F4*!1P@~
zCsRsgO-Ly<3aR*3$_Mk^dOsv&nNGdEpsR at Ki`<&YBzc&Bkpwf3UpB2OMxM#if)u6@
z&F!%v1u1EP&Cf_kLFt2caI{4`gI}Ezo&qGOmw7ex!p_=g3hAoa_pAZTFaupSp%U?@
zck>#Q=DPCkP_9bIISwt!_UdWTe^jU(EOr_q+lw*f$S8ODw>%iZa~N at xFi#|eg at Z(H
z{_)LvUoD`2HS0Lz*p*!dB`LuY^!+fN_*3IzPa_MzIUJA&#nxAoSMjwlVQFm7re5}A
za-~wom5J39YbCG6$*9QHcf7?}EDu*QKy&pITKbU!d3HS)M>u|Vcmv6bQu|keUn=12
zK||LMIK(;r-sa{qW5)mTMwG)Q)SHFy4Sio0CV|R-6>-*bX%!+YY3Y6-GM7#1Hj5JO
zKhUYOz&$F(b&fxIawDGo%BEn!xhQP_-|n4l)&R34*4T3=RonB{Ppw3QerqBI at J8p*
z<69~)h at Zs~_%&01%JPz2lpV(mz%k~yeYx-aV9rlkzC0W0A<>`>m|N!aI^^V;!sISC
z(o{%)U&HbP%^6!6Mx93vqU`&fg^8ngqKqFCdR1Dg-|jc!r2knruuiOq$*XZPJPe2t
zoJq6IJTM5M%j%~!$KD0nKV3?iE1D~-m5kMlNTu-Qd<JJY`(?^~>2M<9S<_8vxlH{Z
zmsuNk<b!W_VL641hiR!=MyKvyc<_C4B1?vUW1J6;bEXqdPw7T8FkGIqIaiJql<cS8
zl>_vvXCt$Cf#+4w(ZBAtESb^r2&yWhkoH^0)GlNPnQD_-#KL0aw#hy5NqKG}N$;L9
zX%31|I^~*kH2j{Hu2is{0g&jA1bao&b}uVHT03Vn0Gk&t9gdVIaEqJ2bmH_A&<SRL
z6u-^$gAL7A_>VyElpx7~a6KB|-}<ye9ezDV0jhq32BH`qa3SP%FWw3)B&7n%7q)CK
zE6G5=vezAV`xxT9o&{9vQMy}BrYMSv$p1%GyF<R8(FNbifx=HG8GPo%H|o!Wbn%+j
z)wTed4MS at +?q-flGC8erY+k-~WO7 at 7Y!T>3sV(bpSjV3;Biu&OqhK<Ny9|Y1FA8Xj
zfB<aoX7m6WJ`zX%>Z7E$;7ejdB2Epv7$CIeukXK+^-3W#XRGv<*$>$Fc~f at eQOzW0
zt9x+iiOY`C5qs3YSD^F##9=7k6rgh2GP!2c(G|R_M;TjltygLaDZGJZBd$?@%~QdK
zWa*Tz;<hqQ|43k(F?e>4uMfX!qt at oQR(liR6WO-WbSC&^_~PTAcP$45d7B)KCd3>W
zGXUi7&){<mWYahgUlGUA1P-7+2xEWgw$17pyqKPN<+904TNHT96{xt}ORcpK9cfs7
zyM$|dY%f&k9h{S(x{-ol at P_DrOlSmMK7<RE at o}5qLxV!^2x6vnoToFa*!sBM-0Hhe
z397%%Y!sTu)T<mzg(Q7V^Ef?6#~bkEXT!?k+45if*31xdr6E4&kCEyml(?Qji4iqy
z2<1XG#OBbxPoFRiRjekWd}CQ^f>2pru_6G at w}CC>??k;&XiB*$m$P?&VSrd1$W?DC
zfdw=XtM9D-#|ULt*KkLQr98gTy=?QyK~{1Kn-`33r$llgvmA7CfYkq7;89y7`3;#F
zvqC}C{Ak`H_j&eXZ0VtAN!DE2<kwBt);NO3qUZ1-S<en5Boz?K{(BQfjzctNuwP;o
z;fa}9u`O1cAXnfDyf at T;9&>~RKuvb4DQ4qnE+T?SW<(Rh8Rnkowi))hK2-a0)g((R
zv|rxwP`idmnuKTfx({w1{48lfZp_0e)i`{yQCG1F_$nVo>EYsR`XO8RXeBnmfjct7
zSZ)@@umda>i+Suj2_VtM>>dHSZwFWzfv`zW3y_}`KxX(^!A#|U?ZOU%)Thie#**dU
zEdI-<{UPIjhL((1<Nj+i6dHsr#@!6tD&1whhgmfVC!y{H;@5y`x3+i5O|4j*w~hg#
z1_$tDTZAs?_a&qsjr{7jh@*Dlp;I%9`HkmyWF7z#K{t!@4?TUs-X_4<ktZ+plSzY2
zJq<0y8F8wHN<p-LZPvQ9U=Jh=FIUE9e6&&kK&u0?==4H)YUKY9_dMQg)f&YdwER{7
z^OG5{RX^kkIbCI&fC=a8wtoZZrj at LItvJHXmRof214Cx?R(tMxybk;t3nw+nDE_Hw
zw)sJazBGkPt7CVP16j6T)M4`zO;~iRts&05NP^P`_CrN~LYf}k$Iz>(KExRd>MRpA
z{U^z(6K$i<lb=BD29oGI(1N2yARTz1RsC*$%)2Xf=`NJ#(Ic*JjvKh}2upfAiOqdj
zJ^(=a4LMh6BN<RCtPsD^xsA*3{E5oJR<v`Ba{J$N%|h!0zbie+qP!SQ4K;6jUQtg*
z?*iKryd<Z8PzjT`uc0y8t^AHdI%FDQ4^)#Gs((;^FEoOgY!9W~Q at FGInzO#QLoqiO
zboN`R2(cR1DQzD})N<Fau;@(gHvxA#!d(q4tGIi9GT!K^()Y7%`$3&iN8sVQpn-g)
zF2h(eY{`;G2Wc4^7cduV#EEC5JTXS;BBo<<reZUH4e?jC&$ooi4;i6cq|UU=N1dbU
zF!*8LSi<Z<;xV9DN$vffof>lgHfww70ySpt*8%l|p|yPpE{}2hra2<I4(5-z)s#NX
zZ<&Ol>ljnE?w;9jp!jON at GmqtaR);EO#Q4m at p>@nKWsJ%Q-3+C%_`Nj-)oZaqPgf!
zl5UKDL3e)~ExYT0!{F0ZjPPU{gORrkZ`O^37kD8HVfIR|TVKkp&F_drTVkhG at _Okr
z-AWU$tL<tX8fD?>s#jhMUC7R4(Dp`hdv^QS#6!nh0Yc%(t)iivzRDxj1J(^Cj0E!%
zMb at L~cN#wtjcD$cvCEOW386t}7!w5#qO8Avw2;1r9nJWqxH<?QGb<3V*WG31VRum-
zg~Pw)wy#x^mqJDMUs3_fsMD$1S4jCUB&Hq!6Mn11=a^Yu%byn!p at Wgv_E40+B&CNx
z(PirNUH62?rqePh{M&bo{y~z6S%J3~BwCR1KVK at 2x(}1k0H2lCOYonBU%q{K%t2Ov
zH8k#41Z;&J-vwm}X>ggSkJPC@<sFUk*$aC^L4AZe at H0p{O36qD!h|P3iw9--b&|5n
zw|Af(mGH%m($f1iX1R%$w<yuCzxT=-MheXfB%ZrYZBV5Svirj$0^Nn~5u7Rs-^$&N
zuI37%^~?Sj<C at kN!i^%DUKcC3Pn_w0;=W8D3VujPHeYUs7>H{J{&jRF|JUXAX?$T#
zHaRnwF7&`h&w0jLr$WNzBri3rPGDoSMJ`S!HgWYe4nu<j{B5lhc@;D>|8}8{2Kb~E
z<fkt4S4S(ea(*C<W&PWf;1~~dj9+^~!GCRDyqNLDeij$ED-WDM`rY(V`OhAIdA{(T
zJnv-Kp2ru*6>)q?%67{c?pv7&yMSsc)pT_C8&bte3BpDlkN}>Fa3U7t-TGuND5SDd
z0!9dlu%wpeO?IQU*Op?LN>;;Ol;28j78*1?IricF->~y8;j~}-!hHZ$quF<CL3E#9
zqVM at L`z>2gcjJZR#B&5z20s6PhCP7rV>*1k?XWZOWODn|^YNiNjX^lg4~5XCpM}0h
zO#%Q at eSB=aH4o119zPO#h*3)Z4b-Omr2*;J31H8%=C_rTls;9GB=2tg6F$}Gu+>^N
z;;M;+1>`Z~i_LpjYY;qBd#S*=q~Lj{GL21kZRlO9b&JrsymB1*%Qqx{U8F<5W??=v
zP!@cqEJ7_dk>B_7o#yS-_l-=4&VIk~{(C8}w*>MDu1ye0o?G<&2o_X6V3^qJ+W&{@
zd=VptWbSeOUmX>Z^FAP#1gYFrWdJ1s22i+*I&_&xDqb`D?T1P;BT=f-_`Ou%G`!pD
zGxBL*LY!4AsIVMT5f#dR3 at y=V^4o8hd<0<n6~17j-9{U3uTUFUvbiS34Ldp^>}nhQ
z!B3G&VBqFq1Bg2lb(F2|XUP^8df~D`@99kPwet*7yaG*qnZqSGlM^E^)RU^VFyx{Y
zDKzJ?j&Uuy4p2&&Hgv1RuC0P at W*NXtpx;jY>AafVSB+ds1KrVos)Th`&>+F_T4KRG
zn*=5%=&O$#>vFLSRt8@~xN2U4)R!i$CG1+9<=OBC&>4j;SoBS7YHesrW>j5Du$1V!
zF2E?90os&bc#xreetys*ururrczCKqqH~KZE2!|c>w=sh8w-m~lRJ>?s|AoGKZe?_
zEklY1lM*F45^Iuwbp4o8s%jYyrK*9jft3c)&JOhEw_W at F^)P%qCr+QB`WOob6)-oJ
z=Gkl5%T$xBAnAPp?JeSaULp(o)chTNNe|uPH4u-jGSjWg4yh|#_TVbH(0RuPuI|tv
z+Gu)+-}MIgcasMl%p^lvyVknV*!cyU(5t at uMKkIAtY<oZu#^4BH$uLNd#+c1gpVgw
zf3JA5O<P3f$<)7dJEVo|SPkvkzCl|1b}u=|A&oQvsr+Y<;brqc&}dTJ2K9$+>w9-0
zIDu+gBcT60rF={mi&;y`;C<ozC|s#?9A*kx{GUWcN<q0tNtwTVreVxbwRZG3Q|a9b
zd`!rivBo)nAhdJxTDkTAUGmcfFd#;e4blCjX086WO&#`^P{^F=B9QGeh0o~Tp_F}|
zf6#HSOxElO3=<}Z#K_$Lmw=g`?`!X`-|=L>Ri6wiKPe(3I7y6Q_ECQDU=5&<>YLKH
zQC{0BTQJVIdwsCAwJVE{j2tV3dg2;0P+0mCKA_fr)}Wy=H at k#cI!~(R$2l7|0-6H_
z2ZhrHHs?LC=35Xh;2sJ5bwyQv<3*WBktaF3ew%u>!guV89|RsZFqxOwCxgbg5 at GPI
zJiL0!*p2Xg9RJ9&{Wa^3ayp)rhr-#;HBW?rN?sN=$Eyv;mq(td^g|PTLmzj?hO_Wl
zG5kq?`I$MsS0vx}cQg!IAFcySj)p at pp6X`qGhM{1=WX!V`SJRXr5NBlJ1|$y)1i*V
z0)}{6(*!;Q?pmA6pv@>!VFCcDG1}SHjn+h84)54BlMga9$IfWKSCI_BP3P)i;kv0!
zevActPD0n(R2T-Y6Ww~5kUF!R(WX`<*2<rM=&+J=r%&_8hP!Pnj^l at kZ77jPl0dhI
z%wy6gbLs&&pTc9+9k?Y8 at K`bqJLc;Vs-`??3r9mtc=@Vb)Pk at F*27!p9g2AgBU`%%
z2C>FMe=MOI&9Zp!<1)t?yC{f#O)=&<fJ0MatO=?^5h2XLUIZN`5AD3_$}ANN!G#5X
zi|xR3&ldC^>kTM=^N8c{Q0<<Wf$UhP6{2J*aIuLBLTyEBA~<uuSdwuJP#8iK7t}LC
zOPIr?0GKWf?>4n at Q=5p>&(M2_Um}v}eM!5XOY>=FCWZlC9GhNzPRG;(joB>CtBSpo
zQ-nxvV6bo)KtB}jtOc;z*UAdE2h#w5$8zx`v1kq**kiPe6_Z7CS*Tz+3h0u;6yjp7
z)@Bk3Bvf}9{ZHsEGMWfq#p_aiVDwwDmNc^3LDERip0Z+Hkg8;*e{9OvU`s`C5qT=r
zlvRyc6BKgktbDM=gsr?{C}lRKfmG#5sAmA9y)GOG0eD_1Ne#neya?2mnrzg6MQo>3
zR#MDOd%QUqm39=4bTDMRID at K&4W}>14 at o8z)$0yA at JM9&%;e7A^HtI}L|27-`t(S~
z-ZHm29&I$7axJe1lt~|H at 5-khjv}RZyt2vhW4ucE4)B>H+^pk;ZB(~=FI>_PFeSBa
zv+cHK?uBHfM18U;Ne{el6||^-&!o@$n>V0QKVTQWEDB~M1tFKtH|&q7QkObvmlneg
zj(_UX82c<_T69eBv)UQZ``0KaAgA%p!~Oz4!F$AP2S8ZQLIb%07-!aB6wFO?-SRF+
znkkr4h4m5Wz7j6XPe~D&dcI|FC^;39(vFV78FMzNOq-ptg-E_6f|pN!)k)VogPAAX
zr%>`&@AaE_(1}2rIkGx*pg=2(^p_Dc6!F7WAXvyA=RGq%RJfMbQ?nY*OO{?K7v8_g
zAg<1bHAAyOjskoT$fp#C|0e!iaYv?Wo6&36;WrAijz+6c^y~jm?kGGyiU~)%-SF_B
z=SX<<V$NVh_!V=(H~Wx(@-Y&ds}Bqi221|jbs<gBf0<2#z~+`MXK6(^9K!&j=AW3b
zVapmjIymf3m&wwNi48wrzw7(Y?@SY66g1 at trgeTH{c7mn6^5E7RyH8$cd&mhFFW^X
zeM}>TZmy?vy%rk;HE`9TX_g1pKBjsjI!WaONq;3Y0&O)73cAXFT;0oQMqy(hmob@*
zBsC2=A#rd+&rgYB8qc~rceNOQc;zyO`53-KhS;xTWi9$zZf!6&N0YN;Hq{OBV}JQk
zuv*<obgliWroD0(dLec{k{5anr6w%vtyqsna7dqMghhmV;|+x|p^c!zBG6r#4X;ta
zeUa=#pSnjg6R!Y&xE7 at 0oE9LeMttb7!o*O0qxA!+^d#OwA{KnC_~Fn7pJ+5T6s4EF
zepQ=$IyW4T+QLsP3kF}<Ey_lA%Ks4;%fv2#1182w2Vimif>Pdjb~ToXXlbN<62NY4
zy)%dMl}>(PP!Q7s{S96)sMW~SvLJ)U6L^IUA4whWsSc=ru`VivuD#Ipf at _#kt~Y4r
zlQH{YfR80NF}b14{_9oao>lfu**ioP`~*Q{T|pi)JBjN?q`KPb?mw*CbHx)?q!$;+
z^U{*g#uM49t_5Uo;TDMysJpdkt#+uMgoD<)2&()!>kv7dREB*)@@RbKS|!pPzwqS{
ze%4g>rHSl+$d^N~|1o!c_z^0T2mLh_V-?Uy=v<*;zJL752eiW1E4?Y4>xL&D%t<Hj
zmt{4OOHLaN7~(5Xl#J#u*^9vB`Y3fITWn0p2IIeqXH&Y)>hutLq=;U!$YdsCPab{I
z8Foy_mK|^y+DA7s$tD0u3Luh{4Ztd~0ECpYj0LHGURP>7kAlZFT3DVy-iE*N$&$n=
ziuP=5&dU8|WP$?k;xOxNydo=1w#<%K>P6B5aDH4BSm|ykDN%+m4Zl_tgA$B?!}sM`
z><`9fd$CLatN{)N^!S>X-9Ledub9v#)=sj at TGM`C8qL|52%HCjmu;5p{bIZ2SnmJY
z-q*2z23w8`{Q)uf#uE28wFhIz*8vGuRcmcNsl8|3O%7^AXvKWhlebxV`&PoiYU6w#
zD{*Jf8E7AZGH;Lso~}YZcrQiOR4G;L=7RT3tViTvQ&u5`Dw&~V%ZkIsx%ms`Q?upS
zjVkX_XZS5ehY$fFnh#>RU^C#wnX8WDH!N;{_!t)At_1?+(P{g|jgfN<HYY1e3vQqu
z31<D{HUQ6&Jan<wU`_-Zgoc|>=g_+T6qZ-M*ZAvpNn;vbi*s_9SYJSS3h`kSYHv<U
z3kzVe?_1 at 2WgBvt@i=A_e$UBbBSh2eCn|io|98~y+CC7u8?P)%cJc4FO5Vg at c0~t&
zN@$^LxVbl6q1IV+FZb$}cCqAluuulf`AKzF0g$PzoVLZGVc&#U$R{?(#QQzp#e7za
zbi at 4D_^vRG0@#~`@>BsMu(uI|p8@?Zc;5Xco<HMo_jAw!Eg-W?&_o!1X(5 at cZX3XS
zod>SD1Z?Zuv<cH{wk4(PM<mf?m~MlAJE*ni=wRV2Wg{frW`9je0@&D^wFezylJ*HX
zQWH1-lpsf#y*a`=jNXq+Kd#2t$#>G{cQS`vy<oXV^V2vt at G`_X6p7HIpB(LopzL}E
z+R)mikLGvx;A0f4X$r=m1OE at CtB=hsn6}OM;lRHN8fq6sOWKoG*B{kglzJF{sAAqz
z1_9ZxC<qxap_K-C-KQ&+b~(gdzA!>|U94D@*<Xn2TDLXUMh_&>u+>aO)U~n|Y2e<0
z2)P9rNEml7S?TV1TVyOyB#Ut(68CRLQB54Lo;dM_DL61g>b0Y)CKq3nI&vtnmi3wE
zddNxsL{JD9EQIfgu`@MZ#{HjvfQ$MAs&2XZzf{poNye~eM+qyf9-%~s8>7_5stmHR
zm+!IH;e?M*pF0p`nz~(sf94lKoD5V;(1#vSq<3$k1Z%66W7EZfG at B~ZBJP3Hs(2(}
z9-$A;psQi~+qf%wgqk*TpU`>U at 0w-}v6ZcuV?7&HM(c%jd2M4cwk^wlDt8l=KZ>Rh
zU*_&Rwp1fq#nS-_RsQMR{uK^HvI;r9E_VPA-0<g67fGhnR7Mn0a2iuec$#$~&jXyY
zM5@*dfw3c|m#(c>@pf at JeML_Ft{SM{yO%u(RzUq{W1pzi>2e1f=ETIVrMBP}?=5st
z3S<~EPZMji6t1<h%kkiUCurvs1|+7UA!&V8GZi9@{Urx(OPV(_QXRwEO?i#&e6e_E
zhC|r`me$k&)>`OKICSkFrsKc23nK|avfJC_B=ghR01C?j@}oy4onj at iiDN7$n-}Uo
zCGOd=rGfnpIQTD4TeAUt;^gtK#=O;}WiaK}+<5e^r!4Fg9Nc|>)!kn|ru;75aOlcM
z8+8G8pGI{t_R^wCs%g7Gfa&X1$xO5=h^RUHd2k}fc2;rXEG5eI at 0S<D=!RVz*|AAo
zmUY2L=Y%;PPoV=<{ro4DAh0v>d{t5A_=8B<yr<bA3&SCIo`u&v&j^w>!mjv_if|Zp
zpHl^fcp0@^5$%b8#nhD;8bu}x)y4m2A>h%WUZnX>4<-_%j}~FyK&B?JWMCE02saxG
zptI`kf{fTu+opP~cy3T$m8Ko=ES7*8vNt=rm>y^a#8X5TLX8Gm2p8^_#)kDR(t5?k
zHKZ`}OmX!}Bx>J-Ns?L|we|GGl{D&kG!~%+!@vqfcA0g5pyf7Ru_J-tGH#rmVN>fs
z!se9&2%$EtCq}Q8CQ6EQg|m3tsX=%_Rl0)WXrr{ujkN`k*P;r`bhu#WL0FR>I!?dJ
zKML1=dnJZcL#b_o@^@|pn%S9W9->H-nRlh%wv!x*#G!aY=Kh$t*7l60<qvFYDN@~{
z)_ at il?SA=x7d71Ki7^*XLc({NKKe2KfB?up2_zzP%{svvmX~B+eCqe*_k8i-fv+}g
zD<^IQ+R0^Mq9r!TA8qwc&SO3_LWjydFs<#T8X4TXJnlGFTdaVM at JNZgf`KN~r+Hxl
zNGs#mf?xgO>aqPI4RKb4-Q`I_$bs;Ak9J39UNc62)0L7>U^m;g=WoUWpu(4|v9W~@
zJ}e9~+{o60d0awyTOI<1c3|y=nnOj->OmC8a4l?76$xgd--Z3&gZN-`1{1F$K%E`@
zywOFe)r0Vv5Yf_3BNTs<n);5|D$*FB&6Tnm0WGA;FeI)a?x2$Sf{ja8arMNn-i;U%
zKztN`-=mcv?~H`4v-0)8SYBr)fIU!5yt-<0Uc}<qk$q_lA58c%X!tG`O4?9eNpd1W
zf}>_0qhmw?o2{q^Z^1M)xwT9V0kQ)CzS+feAk^##TTJW=77bqO0E7kfZkxp1dL0*W
z?{6?!+L_lqnUOwg3eH*hl;a8D+B|roX7o3I{*ErpCtNu=8OrFlHr7c+SnT)>-+b`S
zES<{I_(7({O<`J`?W2wo5Ma6Y1bj)?vYiXeh^u;!to)a%mnf_Z>!E38jUv@**zqFH
z7pk)lX!<##UacVF5lqRAvq2vrZ at dq7y!~^t`DT+I<<n!;(4)7i<{#KZS3!)TG9QG0
zV<*I(!9y2%Oeu(9&!P{G>}`=eU8XJ5RW=Svr%MRb>^KeHC=xFUyAcF$&;gk$4xEqv
z5JOQOM|j{+_ClB1+R(m4_GvOzqk^DER_#}C`w5YSEDv}-#j%r;F~<BTlp%9J$>KVg
z9g)vL3~%Xd2`a{7?h9etGh=BQofHax_XH&m7_ak^JA06dVeOiqN58DF`YbbPz{2AE
zqnHPRj2}CSde}Muf^{xtl9i9xIjv=jad^nJ4CWhI!6PK~#Wqv5e1fZFgjfF|s;p?x
zG1_wJx`hn};mTdpv0f3-8ACer78SV>;sWB+Pp{{U+(8mLTYZD2I8Jtf*CHT)DbwsD
z2cZ<UvpBmJw5=O-JZ1>hECtk~zc0$QVKh2CU90O0!!&vqtYwvdn%DAgO?;shxT*x0
zE27PvU;@t|ka-nb-cNVjDQfaE>Xc5YW^Z#Vt&z;J>6;Rt=QNSRXlSgdQhF#A(dHUm
z)<C+406sEu&-Q+5`{J0dUg}_f4j2`%czXNI=X4q at BAqRsoz^B=dA*gHoB-OF92O at T
zZHq3HG&4uZ#aP0+X}AWGH!-qXV{1hR>iy5?h0o+Kq42w3`~)^<&o`~!^uUe$>x=#J
zj8t5-A`2I(<k3x=IM0j7rO&NsTjs{gXzC&2$>H#5y<jwG&P-7O(w<I#q&@A3<b%@M
zVFst<d7+QeEWXSzCplXiOCxm3?l$5xEvSFbwc_sZj3SnmzMUDhLs&4Xir}_e<>jfA
zPt_~Qb}pV9H|vuhtVXs<OmtX`P%!w|*)-54CDg(BJQz(nZzFJhtgyWUxxz{l8!!c`
zYZess#CC|gWdJR9qs~)*M{XXLyp8aP{Pbhw&|cZ7P|!jdvASQ}Ov3i4e$c!5Cr%WB
zWCsN&VWt<ou4e)cF&`_*cZ}nuoIW at eN0<0ZcFcau-lHUpYDQz03*G5KCBWz0jCO4~
z<66Khc0)bKmCm<y{TkfVIGHzz(&<_eGQCs9_GS4jF#P^~UDk<z&^#VmS7or$Xa+=@
z>2L7YlXl*NF`uM7e<2g2xMkcRCcu#*+#e}D?up2pKHU_Q3qy*?4W#JR_|ijMq2eV#
z&XgC%f9VZmh=-7^$G}|Itgpv}R3uC6r^C&k!7nD>Y-Z!M(`Wz<K=QwtLVf at Q2T*+r
z&rmIxAkcQU8i7z#MAQ)We>5?iB<9_adxDk#_OfF*U2=VK<u6pvyQ`=Oy-Zsgv{P{5
z3k+=uOv{pO4+xc~8{=t8N~^NGH&RI65(~=*<Bx^~Zwhc6fDP2l$kirVn0jf8duC at j
zw>Sr5w<?xb)Nk^UqkG}kxo5%`vTHIUn`Eb?9KO}wAQWp|w&m at Ke~(+5z9MSF1;B5e
zCGt*lTJm<T?`jcua#2n$fJt{SjZaTMen54h?km5FcfN+rW<9yB(_GXwsTms=L9&2r
zsEUruIKb3gt$-``4(2<ilOoUx)k^8)Gg6BZZkd;ha5D6CA|f3mmS!@H*NN<2h}ROq
zGF?0}ms at -^Y^Zrwf1XF?$G8ld+R8 at R@9rFtX~3!vrru*{a3X%kOK0g5--pAnCVM)!
zrI=|tFIK7VFav+_)RF{&Z!(zIl)!u7KlwwbefV48O7Sl}h3+06oJt=wE=qqPZChd>
zDS0iJh?$rhmgCJkfl05+?Pfanw&tiLaQV3 at 0g|)8@=7yhf7>3ph8m)?<hzA+3jqvO
zc>RB(s-AAk{<PM57Yse!jI%4R%0N9k$joAR;wsA;6Q0?pWq@<J5^_{$Q;Gr;sG=eh
zzm1wHoNkY at dQu*rwUud_;KSOn*Ci`gm|qfC>o;%B@*VCRJs<IIQ+5vVY(Dcew!7TJ
zTUZdRy-7l_e{*~@K{S<`Rhz7d5+H2QOsY at m|Bcx<FS(U6tw0ao4(oi-+-I|xs+}ya
z5iqG6?e$b{ugwo1Ujvu2d(3KRG#J`+zi=Ll at Nl48@VcXKysoGeJC2KM-2z#>LdN+W
z5fG}G$$+d8YX+@>n_t(1oz^A7qxY8UR2T$v*`9*^e^WWu4%$S(?hFCjIAM<{xLtAr
z_H-~*G#fl_M!t5pw)#3<KEqn1Q{9Q)-N$%C33F(wL@|Yon_G#fo@}eDSS>G3GF%D<
z?4+&ojSD(j`v?oBxL8NyYi4`CuJw_2n%c_E^(W!Ox5A0DY%_;Swf?I{d>0`_spOMa
zg$Q6oe<YlVpu7ZU*~fY0nQK>b4MbR+;dK1;+N6MFU+SVDrEAGLDVZwe#P!ewdf)hq
zcYD7)Sk54r?~!4#&FGv*hvQcM5GIR?PP8^hD~Y0>HlLZ>7^dQYxuyrhBv?~fd7q_0
zu{gEt^+vUkX3lQ%{tGA0oyq}YQBhEzJs~;YfB&plFzMV(qU;^rF`MT~n#8JJ=F4ZC
zYv5!)40q)e|L<R)uHX}jsf=<*E?>&9AA=XX1sV`GNrN5qk{czJyWNz9-1G&zS0|mK
zWZ-bIcW>$&_*E^>ot=6csCKC;UK at J-qT2IDE3Ht<_GV!un&BFZI!@1neH5*ZuM&CE
ze{c^T81Rmc_S1(INm-JhNlGnoHC at 2P#$_YNJhZGUXo%$K4mSpZAma)gENpcJ8C{~?
z4NC!7wF94~_f%t7fPBQS0m4(W?&}MjV7=s8p~_^TH=7;H$fhbWM#YOR=tf)HpYwxM
zA=zsScm9%No@??fAZZY<K)EdxxfA21e+d5|VnK=A+6JA!#%xtNhTFSO^o6ixZ2z6k
z$Lc_<%aDe4<GSTORZ#iV{RypsQHV37hApz9s+5tR7g|o=X>%g-T7;ph(Ei>dyV+c`
zMj*J7lW@(*k(51fJ5u3$e%HD&(7So4c0^e1n|J#}Uz!o_;wibH0CE$2?>X~Df40=*
zK4oRAJ#d$s_GD+1KS at w3ePmMHe<{HBV6Jw+Rzo?b=m=xy=SATD=kk6lkV3Hqi&c6u
zr8 at riICIRJ%QMSv90eMfD$B~ztSDq&*eivCXWeZ+%Iuebh(_g1y}ZLUND`)i*7#*5
zK5W6eeetxH6u0;Tvtf-4tKeWaf1{uam(u$Na2QNfwnIFA#X|iPgBxoeepXPCA270O
zoK^==BVbqo4h-L9xx*M5QD7)UuAsKQllaXh8->rBG-Z9*Shu?Ohc~W;(P{dTp$*KM
zQ1A`3oXtEEn5l?ZQvJa_`oT*`c{LdmK^f)afp~@UUIA*J at 3DLIIxuoGe+vf+QL)tG
z3zSWB57`WnV^FGGX2 at OS%k-QQXs-4YPn^a+vR)}QP?uVGa?3-+;=^lRkWK*RxDV~%
z2_IW6%nxsyC>!C%6i}A>8uV^r2;BZ%m<=D#lA`;ZXeGyZPK8&I2IQ_tIxWbEs$z~&
zYzyp$CWL%flVK_XH;rMbf6GwV;B`k<9zk)PWUxJKDb>V`cVFw#?Yq0RjMw7^FR&ub
z6a{#)vExemTZ);M>(o(44BaRN#P9j0MLKrKFfs{}w>SsebI0wQG5Mi^T$xma)H8eh
z5 at T(};H4#rI&j^bKo*_(dkqx0wUD8CuiD)2#5g^w^}sWy-?dj)e<Q$&Sc_I6s&9NC
zKZ9|twdt!Ii2_>~*KPBpaPuG{850$_>92HXVv5m*s(`sq9E|I<1CI&^8Qd5i;u48I
zvFbC9X^)>?ZWqT*YQ4T{w_F`qj$As}Z%WVD=%K}~#MluH$D=K~&8b8x)AWYtwHf-Q
z0%3Wf34M|t&?1ZRe=b?=4_5^&x!D!_%;cJ3Z><O@#t$VrC9e|PpoU3=Q<$Aj7i@{D
z7(t7 at Y@*KggEOBJY6V6!NVv9LUI}jB%A~N=nci=$>9FE7N)fc2MxgJ(ZGfaLIg=V)
z5FvSycNw94xVXME*@1jP{Fi|FbKV0=icY|pi~m;WF`_SVf6KU=D|4S|d%2b1u5Qz4
zu8~iVvQAziPzF6pr at oRi#0Ey--M;J24}X>12-LBk?ISDYt~3K*Mq)ID3jUuo at SS)J
zn8rfO8;#Rp=Q;^riF7FIo1N!P1`&YHLVc#`LOC*GBWXWdhDS3XUSI6K*})?PkU_hJ
z2TVTTq*W}{f2R at T+f^?G;iBZk&K(+9)ASOQZ>jap)i*Kz|K at etU}u$v$H|@4AQBef
zUfjF%qBQ5OQ{0$#LI%JgdB|aEJ+p#CWGNEYj at 0Lp^t2wN{i^b1tx~XxT>zGgb)ojO
z#@KPq4sx24dAHZ5zFPyHGSD?3cxra_Rm#PM*Bq^Ce_`Sah|yLrtVBp;dXkpn!<`5F
zuFei^pMLm+Y!RyX(<0%Z0dYDwi&0M^lcL%Bg0L>|J&OF(7Y^}%XGVjKcgG>S9mLyH
zA#Cs~|KVx1FB<Er+->p5x7wcP;?vo`nW5SeS{Mwl{J^Ev?qe2Q8j^bwM-Z|ct!;Qa
z0lC%!e~IOoio0J%)Em}Xud(?`CH19Zc)GvA%1;7$Zk_K9a2=bLmog9TPg|eFwT$it
zsL3hUIe&3=c2;Ze&0gLoASF5Elnx?3VfqBusP~pPiG=`Gm0kVE-f(o?c5aRS4_bM#
z>hDj)hTo+MaUZtJp8iz%eb8WGJBU)z at fj+Fe`{v~A_BM0FZv{!IaB4;p-tC7nPA9X
zx=y9kK at u)H<|Gpqty25(W@~A|zFu`@gP&3;TxP2u-!3Vtug$~T>h}*_)Jv6nAnA<n
zZ2Jq-1gYIDMb5%8846MQv?D(JT?|?{!}ogPyZKHj!A+HJQsyMNkIm-uHIA(_QSTPk
zf4QUM;(|Zt-s!V_z>m<7!#=*HH1D5{>cFAj&lA*9We(i=)HB>vCIDm51w?38*d#qj
z=N?o1t4aawl|J^S?Xm=sl at DL4*0xZ5rbx~UK0&N%SKJ%KNV^=QKGkRk59lhvJve!4
z53hlJ^$!#2+s4Avnmd=Rr(F+wc<qVif6$ri(^eSB#YDEl+^%b=szd#%PhZcUUFS^A
zRZ%yjjZnF!`?5o&J3<I<Ofysl#a=V5+u=*e(j6_9>y-3=NFFLi5GcSIv&L|Pz<O`>
zpZaiF%g-{k$>mM6dmYX;)7V)i`~mo4B!kwO6cqSzfD7YUCW&Xdr}#-r{-O8Ie^uTS
zHe20;firzU>7(=i)b6uP=ZBp~HBZ1oa^*lT at fz7kNPu;>xC3)sewBBB^)+sfJ?hz?
z+lP05?NOSaT6Y at P6YpIv>`F4I7#e)Vr*pF&C?g;O;zJ$DLKi6L!}1<CvA91$w^)Ty
z4k#Z6?dgAMuSzKX(o;#p8K=?Af0>6w!BBC8DVS at ld!w&T;c*a7YOGw^XkQo~_)-F;
zfBTq@$oNIPF73#N1ViI%Ed&~E)h3PF|LUhq=gH8-qp3>34fDF)&h>QZJgm?`Wi}cJ
zn>Y5 at b7V_tB|Zg&bvR(Q07}T_iiGxK at _wNGlab9)tOTN1!|xv at T%T(2e`&RPt&)6G
z9oO;7>jOzW1coa3x`w0Ulahp>#M$8Q{1@=PLwrnO0u5{J2Hq`ioy8FJ`6bhwWs6B-
z4P^O>xLm;$!uL+Vu9Kd>)}8&>4N4dbW<L^0;7I`=rut9GO-k~0cJ+jqbq{w%A}Hrw
zR;PRrH3kxhChPx9QFWmBe||6PC=Nru>-Ab%d!{NUtW<IDmN3dQ<x*<E^|r(mud&eP
z;f2;zkIgoT(8z){bStvCVcz&)Yg9 at 2c4tTSwZB)?;5|tVZfB- at Yx=F2<w1hwKY($U
z!KY~q>l-HlRw0EKtr;n+-*^tC_z%0nzV&f>!<j|v5>1YWOycU4e;8QNh$%GNT7#iY
zNrtrRbU}n7X9FTUgHnj)wvLP^rgncJRq5wFT7 at ar$_ik3%(bu49iXMzJW9<;+0=(H
zG#I>muR4cUo4wS4I#sL$$_n>$b1p8+ at 1*ynln2@;E6AW*?0mK_Ne9V!uK%Wmf#J4o
z81S%#&LlsCkSG52e-}D*P#yJe!K&O071)e?j%3d#%(YQ4Emp_)6a9Q^UA{!q^24V~
zbQq!|Wfql4o!r!Ug&<|-r#aR+AOa>CRemJoT2rO=r|Gbp+Z&sCnA{9C9Iq7qfJZQb
zc!6cg<vEpIhrzK825W62d|7*eaAeZgpOBs9a#<gU7_+&of2AbF77=;roGa{_O&8Lh
z7 at K!;b%ivp8Kzi#SGmg>2qox(uSE#7eQj!8Vatw#VfAz$4 at N`XAv`6UvWT{eFrpw@
zk0#OZ3|zd3<a2{uL~#oI;trXBOln3Aez1<5b<`#hyQc{u8w{JHAavsv%H7UWrblw{
z=q5ASof99ue|d?bMXsA6!iMk%n>cb2B$FU#Hn$A`Va7rq{~nT2C^&8-C#H!D3Hab-
z=7x|M1UK4#no+TerJIqlFG{=l%y5fUMq8%uGu7U3og^E$CT at -!IvGoT0&1xQ!n9R-
zm#wPZ2b}$_))x=&L=_RQ-XrqQt)wxm*}d1vpMv;te-<=3ep_M;;!duxhm2jjmlb-F
zwngcL$OxlsSisi5yT<$K?uPtGXke)+`RlFyZ6A$3Gnkn;@dRGil$hOfrD+;6qk{1)
z at kNZzp>w5h&=v($TXsaCIy!duE(29{BkOx){q`02ZnRbjnA;wa-=>_({qrMe^9i4d
zmm5#`f77}4?zdQ*B#zZ~m5E5-+H{%R?c!9B at k=(_fBPt1i8KruxUw}P5Q4P at r7WgA
zei?dgi~JoEt at R7WMK5Vg*V~R|;wd~iZI!?eWLWY0vwwG?7T-Tszsfnb>}?^jyXLsf
z4UPTy6bq=Z@@E~)8#rQ5d7+U(h at Ve)kC}~xf8#LcA*bhr-uN;0T=+>x=yW6s|N0ZB
z5OX)diB$63c;;8$VIY6Fx8MyCeY#ZUKhdM#(4`ucGjx!CHV=u=ndkl?*=G}O(G(u<
z1anI8(1>?`?wrz{#*q#!o?ajvu(FqLs<GFjGQK$!E3l6+sy49Wpx6PF(!*Or*Q(f2
ze+Sl-$tbeg)CZQpSUt8>D1mi=D at Bey+R8)xUO6J3Q_EyJo?Nfxu at q9CCp}mOH>i+;
zw+AVkCMgcK;y3w%M__hlWfL+cLU)eDHXF!ZrIwHufBP{d^?O%cUF#x#zV;dBhgg!*
zd$0?;Zt0{>Rx$o*C@!S2iTpV1HCM-1f0ajyok(O?DVj*1%UO4Yf(Z5Z3(bJW)6uSv
zu>-^ay%KymOhnEy$}lZBbTvXcDlfm<>zgAqVqdUgy<Q?!ct<+4w;pu5#!X4Kj3_t2
z^&>7TPqKI#xGl8LuCi9~@`QaJO(*GmKlxFSY6_ws`(gmcMwp~avQWfme$Q}pe_ay7
z3x*a|EV2Bf?#zj&UfX9mO}!hTF!j1D?$5!Fra+oz(tJWn*-(e0`%(qS&pBz5Cd&gs
z<oz*SDGX at L2+|SR7=S$&dcEwoh?NZu1!S!0v6{xI!dd}=bc$?+zu^kSj%OIm^b3AG
z!mR}5CmbFqzvZ6K-Rl$EK>1>$e}s;hW5AGMo`Wuf(0||8fKJOq)pF<2lhgFaI;_qE
zv1g$x!(z-h25?waL%YvgSJuB}q7Z?Kjs1+gQ6U6%p_4L)Z!OyVNE7DDbzNkqQ;utn
zZ%#UFt^Wf?GiL6+gv0(Gb-_9sd_A;L7<3-A*S+%l`+Ss?1CMpQ8R{0kf18~J#>B)L
z>gILzqChpS9$raBc{}C6?Jtk at tG@|HJD#1;2sl82Qt_-}%Zrnpp$eu<t8%0x&%Lyy
zO~rBp6}l&u%lb3Xn|JL6A at Y`zeA7JTUFwoBlIBG>Jm%!G(JPEhssjcFA&$4|(_TrS
zOZVRZ$I|QzpGO^if6KF-f90?Hz0#*U9_ at 1q_Qf|m&!UU+a5wN1bSi}=fOr%{V=(h5
zaP7;Tfmo^U0u0=1p*2RxUMblKPq=@?qVDK^YFg^S205ywE at FT9U}J})!5uyV1<+x#
z)DN`IsIvYi3hKHQCK(k8r#C{`QDy^z(z~$mmR$dd?(XQXG|q^+e^%L$Yl(q_T;LhY
z{Z|}zECHRK)MT2#%3(>p at XjC~D`qp#F>bhYF9w#&R5#s=WSqz#LZMp?@e$htl&)4u
z&+hmNldqVxw0BG52=x<Oqw>!9h}*m-=*2$x?{|u$P(y=P4W*()hTAVHcBf!fzc!xZ
zJN1*AEI;cxQZ*0Oe~;m?gmHh{0tawvk|rT3yu<L;^RQS9z+Io9cZDPY+oQ?|oPpPS
zuWd!TRc5qsbz1qWEsyroIV$3&tZ%!sibNZ8y)`Y8=e2`r9rp0)G-yb^j2DtQbuDX6
z1W$qd^ED!tOdc3-StJhCOWo?FO)I$cNm=?4WB$W5cJR5dfA?dDp`}c}Jd}a?K)EJ6
ze;kdX98MEe<-<NF2qBo0Gzlss?}%67%X9GXD-aAne9>k;>P5L_32NZfSG%YN%JveP
zXIAR1NfM+-u_n_Et5On(PRyvsSy*d!ws|H>=0yTg`s|wCGVL!voH|SZNb^~19Pa7e
zvi8`?P_82ie*rU&!(ew*Gb>~RB=hYX1P{Df{-oAyo=>8m(k^*gNe1yg7DY at KbiY=e
zotw;a&N5*#hSiHVYI`{qn|8akEGjogs-e#b&G8tee`*<AzoB(0I~G7QgsgLhyT-RW
zS<5s3AIw3=n?}yi+Q*JdpdVS^To<s>Q+3zDDc~mte~EPJ&NutPovmqn^6bq4^;*V*
zsLg4iIkMdGG!u8uL_{2TlK>cxs;H at n2MCzl+d#!W?PG;G)D|F;%(@g;f&|})?wYzE
z$-$H-bx^ha(&59(G>aAXhOzA(%9HJupAr2Go>wV81&I_>i>SBJ-kU6pmArE`F@!Q5
zA)JWQf7(WdZ_8CW{pJu|MongEN4f53G1GJweq#XrteBEcBv9hs=b1_~QiViWBdbTX
z76tBw?P+M%Y(plsTGkQId462rOL~9VEq#^X0c9xc{pt^?PpdeIG+hXEf}0d&t+*^5
zs at 0M>=h-&ilb_qC2>%XUOlQrqe9x5&Mwt}ee|Y)zEl+R0JuK@*hk^ue;lisl6VV(S
z56TjIugDwR(EpLl^rg0ruS&FT*&$vNiDjNOLOP(}&c!$^^Gcj`2X>(Sv{QuFXOw=v
zRsyIOOKj}2yJKd96}nFT2RB!mIXEA!s%>y*xISTTkZlgGH*0psL?>uV1R<>Tic*W)
zfBDX1z+*t$9P&!%?T;{oV-UT_H*ZhZ)O>VNm`4LUgogg`BNRqZ%CuT2Taoc(T{#ZW
zHL*hZ4-Dfl2+;Cho#%M0y5NC;WW2|xy;4Gzf*7|JI^1=1%C$Dr*$y6T2+J%e%kR0|
zWdnuix{r3A(7k;&ky6FM?uh&Q>2Oc}f1*0yOA|JIs1B?LiDW&xbfO#}2%9}v51~nV
zCn?<JVnSPu95FHqG>yI!0qz+km{RR#bvHpH)1husCJ|jX;ZczR3d0GxslJLo{%tw2
zrseka?UrHr%8EgodX>e at jD&xd!z*EsyCjc`xcI{2tbv!cOW!eT_8%mU{LHP(e;Skq
zn8DNrNaK{3`S$YygRA^dI>e53G0Ic$R{xhs!xcDK37P$zcEw9FJCOleQlX=Zu^Yq<
zZz6n{cmC4SN>Q>~wyR$79=zc?JiC5`=}<g(ekFKm5qvFt at FS5$?yz*cVHu#&QMdU;
zNz%_*U!7n_Edy4y%Cn<hEgOtSe}rgZ71v30U<<IA8T4%^gLo$=U)TzYnMs{UtVbI@
zo#>a(cFC#<i+vfi)<zQY^G~TsaUc-5fA+t*am$>*z-YljA8~NHu3iWk)iS?KPBz=;
zrS=U1Fo2guVFY-4FEm+ZzIl$<PW|f(3&PE`)3XX^bHQq3+Rv|aOPSRCf0s^H(uDIJ
zr!IoM2_)mnde-Mf!i()}e7<Uet#+A!w-mE}f&q1h=s6dxU}szEUtwJcK;FTM0Qk|(
zp!|8>@bj_-?N$DG^>i)wb_pia4~?-(t~%Y<t&;?x6SP%qhEEEWQ!Vm0k>BC45-U^K
z(0G5Utf+D{n%>#x3Q?LKe|%L7qq!tlSAgVhi~Lr4HUSlf{aV9M_>C8bT#Gq7++abi
zD%X1axu?`y4K+8fj!DWB@>N6xUIdo7!(jOIfw$79=2aPdEiDFyM2%cGZJ`C}!XaE!
z2C{d;S<2Yb)}=9{Iefyx at 1`S^01}Wo&&mMwV3<@+ey2m2EJ$l5e>t0}`h6~b#I2oA
zNG0CW%sXnRnwjkI#l|jvv`J!`6a8D)1?EfLb5eqE%%nzXoVt_{MXuP%L?)u<xU{47
zc&;=^3K#Rmc~n(#OjDXl3zDes;%xC=@LX|=OjfrfF#NDYA7QLnB5+Angt7rqk_`n<
zWRQDp3o{a!(D|rLf1{J?*E!A;D)OlXh?HviT=@Ogjhj`^74G+pY(EEtWJaKj9 at g?V
zr{DFv1M7D8mVU&OBt=jqpWkkRJe8ObQ?Y#0RVLO=9K$_>uzm3CBP{efGmV5bdyUwl
zHrOrGRY-9`N&vms^MNse42r2k(<1-!KZQE9cpqNVmCFU;f53l@%DDiFjSU$A5*|~#
zTyfBm{v#xr)bn!D9YXSN7TD*LYyuEIyQ#%|;{=dexa=LYS2 at j0Ris0aV!5d8sTCg%
z=kIfsZ1T`O{DeHGhzH%jM=QgPT7sK7)zNhf`7fx|2AzT=&U3!6Do=|aoysY|zP6WE
zjE}e at 0aJ+~fAb?}Yc}z4@!;d5AgLM#IY|IV#I8Y>a(fQHj=l)Z!iczw)GM#amha<*
z`o<K at Sfk3CphGlp`EFqd-Q-Qw8Avx-=48X=(HKG$W-K6vjQa8$@jv3`+O90MrPn5&
zti at 3a{Rt=i`lmf|JtCWG&DSNDNV7#OT=?dCRt$9ve?Ik at nd`LlSjL$Rb#T`NJk9TA
z;HZhPTi4D$@T}Tjpf at UOzfXPI;H087ly*`Bzzs&il4Biv3^0uIGgz<NR>oT<6bd3_
zM6PzNfVc*rDPtB?@XHFUVHqbHccGL;n^A9GA@!vfBL>Vau|Xhsxf8p3#sFkr at buxk
z0e0a#e`dLZ8Uf}4lzZiQVz)sN$!{%BGKnt}i#XzhxFewJ1P~hjqu7FEK;$d2!Y~fz
z_W_56zd(Dm@!U*A#z|?eQbcXA{8xB#(|Y_iO$Ti6#})vxOB$fV)$GR4+ap8eK|44T
z-iBB}!fdf7h~g%X;w7fC-4ElVbD3HYw<w<Wf0eh at iVo*_B&E(0%<dL at ZFj5$sGaHB
zWa at u*ZKCJTM{8bh7}mvju<CSegmFIj(lm#@U+}nBr+{Qnraq);*(KYzXajuFWsuN2
zeCh)T&eE?A|8s7e{YB-mVoyzu*n`@&UERTJOh7r``eU*it=o)G5Myo&iF0v2m`x^}
zf8ZlN-7i$fdzD`trpA<P`(F34`#sw??x|?3J1Xj&V=Pjb7TZCkx$E|wkd15u(?m$G
z@<WW4>1NgB8tAXqifN_gKVL0DkAp0d;oh8v`gDYyrnRQZvJ`3>!mM7f_z(G;N?aP`
z&I&#+A()oHL|Us1bZPAN%P$8%xE9K~e@(i=qFw0C;mL=|;~+NO)1lX;OBddTn#!-a
z^Mv7CW(69$II<TATL{5=MN4fIzKP7~2Zhc}8YkY*2)oz0%en(>-;I*6<YN?FWZi}=
z at w#FkEyL-JqvnJ{X;RZY5!uUjqGTxA63>kZ<6N`_yge`bzewOV-=?^NNZVDTe*;fI
zfFgnf at 57fG@k7w+i{dETkTOU*mK}Qk{}mSV>qldFd1$wsrMO}nd2<;!pr{tK-OtKU
z5~ZR&(A>cZQX}BuKD;2}fl>#I$sn00P%h_0n`=1TK?)sTZ_#O+kIJI5GZCf)4$8+=
zz3?L|nB7FvV80%MW(5x1W|kDmf58IvLxzL~*ZbXCMD&_`I<7s7u<p2{jj=t87QhVH
zEV6!;ZP-*O2^++U_v_4vn9U7zQt({oOC;b_P9M+GSg{5zYGOR%iS%Fr)F{w0pCRET
z-f)$L-(=%@RN+R&5u$51z*?qwJc at W`vq+Txp_4P0__doAzOlavO>X8mf72Caw&Uk-
znn+bJ=nGMs4FO#!$6D&^YBJWe>~_$Zz4L5KN%cXef$iNpF1L0;>bNV!2zB?k0>1C(
zEccqz*!?=@ZVBFVObXj5BwlQC@~Es}(ENt@|IBL(-3MFles at 7`g7sx-Md-T0pLx+a
zs8IJURRwWa-@~P at 8}PTLf0+V0oBw^q|5vJk=3=(SR0M$zhLN0_(xv2k0sGa?7H=UP
zY0o1C25=ai=7lLtx<)6VS{UN(Qwd4?Vj3%78^;-EQOU at 5NNb$lP6o&XA-bAS29-qL
zUrJ{393B44y{?nuNG*K4Exxoi-ww$y-S&&pqN at JbyalXx<Y!e-f8gRT?Pkx5CV|$3
zN}8X~QHylWcdabUuJo93_A0EP`Sh2|vMYDaTKBJ?W*r<}(@^5_!X~W3EN9xkk^T;z
zgim_PU}=FWe(8_n?5XyKxu|i1BrbX_L^lnPWC%qs+<Nk9#DnJ`mxnDVyU#m35Lt at 3
zl*TZ>C;%f!4cY$ze at l>chVZSLgV;>+Qm9iF9BRACj-j#rD0%nXU#G7QaeQ=vNqKrb
z>A9DXrkB8OtC6@$<fTuf;w~O9&>Ajxd=FMhkw#)FjA0UYxyFey6xmwNf%-^hqd}z!
zVryf7EdQ&cV?cpvJ#crTD38SE*X=?C%Nmdm{i?xY&MRtuf1TrLL92+&c>~*0eF9)$
zU=EAZXLQz=Uj)Lm6)hl_mygj>&ASs>Y2#ZY at N0rnPW!Z4(h>%1Z=SdX0$o}pzBjmn
z(rZisP1V{S$5$s|f#<Ff$TP1EYf^tZcp&~vvd++R1jlpxP)=#f^(rS~bYLJwi+#lm
zi%Q`6Y=luye*nm4|52gsy>NjT*1J82DJ+`Kn9g1NF~W)T*L@^Ne>Qi;Sf*Ry5;RL<
zTFoJPBCY2Y4x>Fzxj31!z^Lh(^qpQg0dp;sf=?t5?;wZ<ipewsq~(muzndvf&v^`p
z!}7FCipL;7eg|Sz;@8vZ;v%HC<&cl0++-^6NR8OTf4r{WUwuoo2bRZIj#v8-v$WC(
z7x1&$C|XqCkYPMT`yR`Mrrq-%2x*LI)vi<lyD*AZeB-IcZ`e#x-q|Y2osVIofDGYB
zokvHVN3Sx#0fC`1ts5M2T-*Xbde^lMCGz7Rhwc#faAvaYy|67T5oo)JcJ+4UagBxM
z7XxLxf4E^el6G03-yN^8V0L19bb*fb&P^`FvLT<%9LDXH(Ybt~p#<E>{iREl3hKkd
z?1dC!4nU)y_R%7!3VD7AE?wlg&Tw~6%q;GroXN%A84)F-a31s8h4ip9u6l+Rj!$e+
z;wT7eT1Bk&&dI2MDRYLd2ZZAsua!1)D^j+Wf5R5Hee!>guMRXVfWlc&j1e@!DoFEE
zSW?mJsw2}6KglOa1z=j6J`RRWVCSjDufL*o$%gd at X`2S{u}-)8j(80hf>jGy?=m$q
zc63!jOub!UFyZ$#nIAsi&uQ=gRL6nMD- at P3s${a9jI`S2-!{Te36ccJiInwUC)gAW
zf0k`8zQ|c at +f(T21dPqlcfRk$F=dsb5o;?cxwQH2^!Ts8Df>ZAyIWEWAEO19lGAqW
zFFK=V2Ht3al=wM%I4c1R`MpdG0_*<&JrjRqv>Iz2D~pN1WUTt`iVbh~rmx+FZ8ATQ
zHSZ>n8dH8w-N)CyPwQ{?zoj~K2(5q?e}7r2gTm%uMcc*bP}=F4Dsm-#jWi{vQ<CAW
z<<=$qpXk2jUE#BrKKnwaQF&i;QGY$g{}*2s2oC4I1e8})NK#f16jmH9%$A)YG;}4I
zxEO}bo&65;*4H+*xAw9~Q9sTm#SH2tXZ}i?R#t?b^um`>zuZA`#@hHL4g2cKf4^P~
zBOY)*Qg)x0iDNgH7UPSZwf=7(4=Vc|H*W)W=<Z=rQ<}Q^4O3pb at TYul98+}^Y8SVD
zoRW|pKFedSC>PlRyLyMR8={xvFop5-*Ao_<_H405pywElU4K7cjE-J!8sU(L>NOm@
zPzjxV6%tjA|D4ded^}G_cb<_(e@|+8wXi00O9?~9kf7^#Vw<80dGw9Chi+KR{SUQX
zc!#g#Z at mn#g=$lOiM{){6iefI;W7Ss_Yh$s>oW-vC at KF}yX;xrD;u)~k%Ky1Ymz_+
zyc4`IGm7*i?S$&xSv;0;P%3U%QR;pm>G?l{fH)-5bA8w96XaayV?M9gf49nx&f^ET
zx3QUdy5h9xH;~&5Gf`~iS at s-X(-+}1tQiesc0Dg*V<5mXkaV`EkXlzCeixzONMZf2
zqYY=SjnPjCJPij5*5SZ=yhB_dal&rSwGfn at TF#$aW&vyI1II<^Q2d!3zDB*=IAV@(
zLb at AAux1q(t3zpi!^c88f7r+K at NSgz-QM=l24wCl68YFQ>?U+=YHUDFs7#*#Dz8(e
zKoq#Y=aau1eCpEGAd@<UAq~`e_9Aw&F<LKu$fC&bt}*C<gSx)S2VEzV)CJmrFzu8K
z<}IA5w=3W)cX;d at eRIh)ep6!{H42i!6M81CV?u~z8;Qt_v+gdCe`!{SC&&x6t8X3B
zQ_S}%kBJrJ^)Q7fk<jUT6k>bY<6a2Q^E22FTt`U_yi&)E!8)TQI{>Lj0w+*UA#vHU
zNOoDaRQ-(DPm>WkPdy@=6K458%RE15C#r1Ze?KirS+A;{!?mE$v8Kw+kxHobVw^`2
z))R1zMkyQ+yQJ-?e|PRO)g8ypyMf2-+}}vqg|o;UYUqxH0KnFlgY^aQ^4Zx7t1P3S
zoZmYZMla?rKt64Y_5E1#B!YZ9W7`8DFh73w->Ba9d+(8?o#oipKH5494VCudC;A^W
zJ>GM9XieFNM at F_*6(de^2Q|l3%x+n$x+WY!vt%;y{2z8jfB6+?rfr$w;chJ)_v=C$
zj>T$rTJr0;R1eCM&WytNrCi8InBUM2T&H)*Lssg_Ky8`_CN|?O`-$gZpy at Q3k|Q~>
z%%HK#DNUS+K#rKQB24_QxSa|{dIm3-hfjm-oil<h&ay$H*rY^+^)oK|2LY8Xhb9#g
zq9PcSk;Y~Tf0*t%&K)w8pyc36=35gcU_XMwt%)qP(=nh(7LVOl3eXqyrnFxtt}_2-
z6)6Zq;`=+dR+Xw3&I30uO#;|X2P at 3ArxFpm3j3c|v+*Lr96mU%6p=81HVj$COk%Cx
zsoRjaCV&f~4PZ&~y%DZB#{7?Yo$ZU%H3$SLN^2h`f8(mCZ>!it{R&Yo^KrQY3K=Xp
zqV8v2>0lhB`ENK$aNwjlC_g5!wxP%l)K%mlCB(E-5>J)83#}?AGnRMd5pIC>-IO(l
z&M-AnDdRgMwIZ$^`cQhCB<z-$sQB06p)xiIjOVZ7BDxujk3%1h{N6|qfghteO=-S5
z-q70Me~N*@;DP`2AH8PSxB3faH~&x;8q`&htr>RQN#S}N%*%4w#{t;T;r8n)PCZB%
z#A0&chxWo5g4*R?y>|n&wEi2Ra-7KUFg>`g0GpQYD5uL?ljLxD%O8HXR$}pnbm{g$
zMwZH-Ae#`N1vVh6CyROL;KUN!GR-Lu{n&DVf7J2(&|#Y%6(zUPNBTIqFZ0Cx&DCGI
zaKx$RD3|hn6}r<NfjI2OMq4s%S at K8n0K|N#&bi}jE$mz%E-~*Oyq=`ev^d-wi=;!G
z{Sc$c?SN$T9XOzzOpcY5DF_7*p`a5^;Me7i>MZN=h~8$2M;r{Vb|>sBjA`*5z at ATM
zf2dl{OlSR{O8`NOG at BX;OuMu5bV5k==N2*NbwKl?ozFDr$iXqr7g(n0>hUSncYH>7
z4||7>+KJ!4Xkd(hj)#!NZ4X6_(Z&yR<YuHuUohBBH7n8BhiO$mhPxFQI`roO%fqXB
z?pE)cmci&gr5SsecgI#HWgvic9>Vjxe;eY`7k!@t)4tbcwXTXb1 at 3bI%B4liRXbEs
zOWFo&pV*uvx^Zrf<nk2bu%>gtHciLviJqt*kE8<}#>|Xy6KLOwtghr-Q^qnl#QXyC
zyHIXh*O6o_!WfMH^RR;I+f3_dzj>JrC#bk2>dzk<+;(>51X5~X;j+`t(WMq5e?Q|v
zU8A^Ew)e(3<*3SlSPJ?za9wGWqIt2{qgR6LR>p83Y>=vMSD3q?_<4=fS2Itx42<@g
z+^~M#+P_UU%=qY<+PiaYQkf*iOs9+NQ8%V%0G{I<UueL?hIEWmy)Nl69Ie58>+*Xq
zrx%>j!!Ir3lhPMQ8*I=_z117Le~v*m=iZtA4~F`u{|T6i^^MT=H-Cj9U0f;63)6vA
z79uSPTmF#)YLTxR-Z11-ECV*K?VSfe?OmH-&-tSv5p4M9mdzC!%g)K%`+>R1v<%vT
zo}_!`r}tW-4;}3CqMtjI4{3e|H+KDvtR8pHR`XU;5__5_DQG-8 at G`7ae~C+fkb#Cy
z>r)idPq)L}QE{GH1Pav!Um2pxWj}NsFYcrzUiWH-F2B|FQF7fl|JYejsUm-VAA)el
zmC!#(-ejaX^oinz(aO9jT;e}}NzQI`J#)N2)>P}qC(e=cxP+&Fa3I(XQ52H*4mzTs
z6H!`+NEGq;>o>U~Py&V(e-r_Be^M5K5-~z3o>NB#M;;+z_t@#!`;5%zLZJ!xcFu5b
z>%N`$4 at U?0x2;7n>u}TiAc;}ODo5K#eee17#i4%r<DuLnHSRxxn{Lssioah*+z;NG
z9B762ArZ<SmK&yTrE at Va>`a3Z6)~nC8|nY~wPwM|lm%vQYc8i8e*v1=-#mD_`{!q>
zed<XbgQWq*)bug$yWzYNWex^DEy<dN3UC?oKiW^5Wm^t1NGtKgW0_t6;PthW{yi$B
zsUi+P(H&ovl*x`NPy2^B*^(XeT`G5JD#cPv6yjie>+3jpKpiiWoQL#?W3Xi#nmr%Y
zW`__!wfM5K1FAQpe>o=z{oV$8-7#t5scc?G2*JeUwgjJEEYT7>HkT*E=gNovuk$nA
zS at N&}1xRbfj*KyXW7F{(n}i2!U#;pW+>*rmL=dymsfk@$eBd99RApl<@{Pss(tH$r
z8RU?*BV;ALV0S*}<g|(DhE8Z}D*jS at Kc&Bj3fQZAF at 70;e^>aCljF3U>ky82P^{dD
zfUq%tVo2iW>%PkEyEGRR(3-qVlMcCY-IXu9CpW|9=hbb6J=-}ScS58L%~9r`T^j&Y
zGJz3c6l%tuVL|bC&UejBgoeWwSzB57rFw8?<sosvw#pdJaTCNiRh8xrI$eFULS1aQ
zf_P3<oMR*_fAPYEXSpY8 at NM@N+CaiyO4R}1e&ASYjKt8J&HlBI<#Yd^cOMhPt at T%=
zy^K%q!<s49W<73jp}n|qE1rC=aXDaDtq0 at G`1oWo#%w;a+D2{aO2r+Y+6WG!f`U}N
zSK8vLE_JVv#4v^8qt-m<+8p<9&dN)~=sQV+Ax>Oyf7W~CxQ9c2Hn_;DxT)5vRrsI{
z8%%#@%;hnvI0V6>p2cuFXvNVa4nEpgrt(UtQ4Lspw*&SU4erD}=ighipf65}&_GaE
zt(%XDK64s5&E`rKA|DjLikA4!_w9|!*aC}T56F_uj*RTe2`hita{()wj1^s&-}E->
zDZ=&>e@!U%=)(+WZ!$7=?4SntLN1K($e at 4=Esde_Y)4y}I8Tq*<-0ya`ahi_eF!wa
z6g8gdz$;I~nwyZeAO_7~lxU{AgY_5~K4n at 5Ootu^7wz!!;J0(USqH`hH0q7i?RAdc
zSopn~BV)vl$2`X*M=H5+3?200R~fwXe3Nk_f45%5D#XU;?;^wAjbVem0(fW=UVAq|
zcISr7(@N at UvL=@~(w}usVU;7Npq*By2yK^XR*R=oSZO(N3=r%{<JxxBz$(C_=kHM$
zI!qi;v=`p^tQ|z&e!V6?ahFe#p+{!T3|EDPYPROTheOeG at p<yrdnu_*eFT-{7P$VG
ze|O_?)+KeP`h!$Y(b*nv)kGsX7d7CCE`wBlOltDO5}(|_;TXAS({C+0Qs?Cf=wTaI
zYt*YLrqzFBlv!Tci=#CN%j)K~0;NtZ0}-m3Udr~HEo9&<>6+`l!SXd1e?Hf!`q9b7
zQVT@#W{DKNG~M9rtnV%xibC;b9vZ&{e at nAcS4|;%hiM&s&cD<0cg4Y)oY}-H(Y!OE
z@!jo}jFa)IYeJS-M7n7B-dLfK3Zlr>d9NU*GfI#dbqhOnELOa?8(B^E{VzhKr<-%v
z9c55oGkIuc;P4d}byH<8*vc<F{<7JyHBTV;@xBYIz&(v3nj&l8mZ;afBYOo`e-uHj
z#-g8CUu>vYB-ds8S?CpZr|v%STU at uE%u3gvZ}FMU)x5K4 at R<Q&wQ>YpYu=LZd3ano
z^yR}TB+q>L7mdIGF2-$)iMb60Sy#E|uitkx_%uRzVCq%)+pSOfZX@!O&2^xHKO;Dy
zr3vb^Nh2~~{_?IO7(<^cy5o64f2HK7e`aEJ-cvq4&{KN=T+VY*oObEBaN*-qL&>f|
zpglC}m&;~j-XoK7jXu*$<VlpfhgKt<%Ei#>L3{w+7OL@~qEF>>K6+KjYchf+EFXQL
z91VLe!vcJqzu&~BGPhtWe(Sq3cvmo`-v9bF!iOHh5+Vb3Q>O$Ad6E=^e=3#TKn6!e
zVIY$dH>%1hEtP8m at L5v{g)gtlq?Opum6jXZ*sYI<k9dP={iD_ZJ7D<G5HvGUo|as@
z^Ou>4eB5Q|*u{48!m9rBSOP7-2S}4|ErP$a6`gb`1KVA4HXBO<>!Q=4LQx%r(tNu9
zG>FEH#o;VI{z}L@!U^)Ae at 4AedL%%@r6vkTHkdh4brT)Vnd15r5$!Vd*FOU_fdilJ
z3PiRaGr^}ODNcv2LulUqQP~dS2?U8O9Qbx{-cu{kx0l at E(FSqLsN-?gosZ8QWo0aF
zY*U{nc=D56-9VTb!JSQh=Za##R}f6{h9X7QuznF>Dvz89h&&g#e;T2uLQTCP77n<F
zNJ283h0o>t0^<vqNHEn^99VuTemtp?N~lP_jYX7p4OGJYGEiw$?TY&&)a=&sUXKf|
zc;9C(oOHKB!2HRH>wlHuU5Ukc07iT&KgOhQz3#MNaV at H&i(*PY^3<Itn)0*{yCz`I
zy2 at R|z at j~GMz9!)fAUr`t#L|>*5_Ek*687`6mEHDYEy|vUO|)DjTlV~-MlSNuL*Z*
zw@!SX at R?eEc`wUJVxr!0rfu!IixWU)Z_H0gretXXYkZf%|5TU>!M;T||KQdnks2{n
ziIh|X9g at w>aQ+~E#pe8~jTpW7e^zvqd=9sHOjI1L>Wxpne<1Is3={bA!U5inn)-EV
z)*7rVI*=)2k46=)F^!>i8BuYVAGLCezOiZh8d+a|>JXiTFO>yRH8N<lKB+Jg;(D#o
z3_*#u9;iOu0;{EJ8VyI~&gqV2VPsmt3s+qm;g2>C;2zj#-ZGSRR0u^I<hTgG$pgq6
zToR=43g&B)f0x3giCeBT!mG at iD~rg<sFUHw<bX42+k2 at UdkRXhmnmg$kL7Q29w=D%
z>cQA<Ra9AQtQ at NL*jlQmeeh=c>1&NgV1Q!$Wo7us=lYog3k{0)>2g64%(H3G<B1F{
zQ!iEq4<V!ax=jVcd*ihl-BH)FuqSD{N%Z*ooxgNle{N#EQ#YL^eQg(8#_X+ve87h!
zKy}HMFf}6N%f;iqx9}1d`(k at CPvqzOXHpO05@<k$Q&~dD<*lTqimD|zY~33ezS7Sh
z_f^yDK?y56Tu)DOy6OrF at PJ5z!3s9G54WG)@F%J4t%vOwEua4jcfo6xEEy%lULKDY
zCx2NDf7a*@Re$A}&{{}PwDje31Zyky;ILsjvRCrakQRpL0q>H)2TJC at d1$J>b${|{
z at d_-?dIf+&#{gvnt9DzLbyak3d6-Auny0Us#T5bDX8M(eiq(-@<XkDSVi;j~Q^HT!
z+`Z$7;<{(D?iTkr9C1_Jj!RU=p!~9CXwHY=f1CmltvWLbGHmXYLMuHApAi-(<SSpa
zvnh*i*-2L{9N0CUu9Hkkq41y0UAI+sKdQDj4%sgut>fMScH>ygJFMT9x8shmIWLT(
z*n&D#z-R|?Tal`4gmjTE5ng)`^qh6S>#qld5HIy!X at TDZcy@PH+0UY2pls8$)+Q4l
ze at MU?$DhLQc%^n{TbPC{9%VPPuJkr*wNh-ax8(HAWkH)YwAZrO%-}ft3MO%Td$93O
zrT&7AQ_+4C1?1|P5f~*y6dp%V_>jV at Vv2f}MgsyhA%|*n0K`K{cqVSCwdMgsdLaI4
z>>$7HE!;=CXOx{CrG69GOay`jbQSu{e;?!SxFwC<T{Q7$-+I1a|7XrR^P~fAgRcc2
zMJb(EDKZ{qTyq5Zu at u|R!bYrx^KI_L at 8OGIP@9_U2rUNge8-qA<It7G3nRcMQ0U`X
z!FK^=2R9s=oy=rTV%DSE=hXHmW`COHXXXI%YGT`+Br>h%55_!gN)fHfagO<df77K2
zoBQ_e6%)N>G*}6V+vS2FdoXx2x(SMopse~`D>$Cp?42sDHbI!wG7D31lGy-&ekxoI
zsTseGVGN4kb_+OXKKaJGqpLWBWEO&fZ82^SXoZmYewpis6b<MjKKi**CP_A>zeN{<
zN&v?*fe4zFwuf6M+C*I!1s7$(f8;XgLsa-_opEN)$_hsHhq)yhZWXBB8|<v29A18+
zE%W2di3f<HID9M|V6m-mGm==(6$9Bj`egWkK74SmPHrPml($DIW6m}gagbXYzuux~
zB7IJbpIZc2Gd0A3TC+>tPtm%A2$oWqbZtu1sqIp*Eb~`e+aqWXpCr$Re~e8*1RFzK
z3?;)jE!BkB1}rtz-|<KNyb6{&jhTEf3jOsiF^IN5J2eT|Hlj2tS-^|B-a-l79&wYi
zM+G;bjaAFgeTF{XEB}S)<rJljs()5PhiZCt!82$(_x%dtXu1_b#tQVbr|A=}H4pY|
z_6<ne{Rf*m0fD~Y_8jS|f1jAxRo?>&>0nmSZg?=~J%i)jtp4l~?Vmr802yBH^rj`;
zl#iIX{LxAoY}oz>K24&OF<ydPIaY%h>au>*PYb{+4ex+5)R(7}^i)3cJ2oZmj?c8+
zdTx`*10Ui^RkPiXs+r`nJA5d3!A_Hmpw8{~mz-6q=?<1z%bvJGf7VCj>cec+-&TO`
zKly(cA at VfI@J70$`w8cZz~?e?Q+Du;3u8va8xfB~zmwmn at rt5_P5{Y9vS`O0neSOi
zZ?8X80}WBv?4+3v)n`lQf^LXl3nI+ITvtF?ra at 1{lJ86wS=@!q&&+|7Ko>9}Szw{b
zc0NR<$hm!_hsDy)e`&hyZH;#Di<mZf2SJbU{zOGWI!zDC<VGi<A^1G1;m?=V?3T=h
z1E8y{3;!e-^pyGO=?&5N2P8%w7PQII-RB*~<!eO3cL-_LkMY2u)HAHey$oOxnV>|i
zSj!{%8pVx;Buw(~Z?EimQiYahPV7_%Qf$m62Wp`RK!FnPe_l3MZ{RHSP+T}nAH3xq
zz>y~FOHR7aYcR{`;{?RdGj_3hyboS|bo8`FaV&tyUnqrF=7JuxieAo(Nc&pWUj0mx
zEo<Y>{R*04Q*DdI=!ER?1vTUmYzFR(fN#oH(sg)@YLgtcaJR9d457JN8zehdQ^R4F
z>R4U5Z&o`le?t;IZOnMg^NZw?>9h6ul6Gq}r*nDc#eM at HLyr0eWs^Y3Ajs=upfM--
zLv2z@%hyl?V>FaGBl?1i=Tvt#?By+G=qL^E1}S}x*X-l2e#ZxeI&gx`HE|nOVsBX8
z_rT_zCLXOL%C#jbv_b(NMnJinSToj}hHH>=3G1Uye{GO%a&K0&$K<X3=V-L|0_|da
zPid}WWqXYbG2)d at phihJ|6nt>lA|mGz>E}SsqGRt2;9=W`<Ktwdm56(Q6M1L3TZ<i
z0}hY&7TF{526RIjr0szVf};<ctRJd(z_lBX^s2yNQz8HaN!lRQZHIac9d%6jirba|
zEiXlFe}yn^2TL>gqZ58s0_DX2^#Aolo}y#D8Xt*5JY%}dHY at ndN`^cBNUxw}M`YXb
zC5A7)U8+R(meJLf;lO}`WWzPL>=k9{J<^=HM_|RHzM#c#N=K^Z8MkW_SwWi*ho?R9
zbuHU?ljulL_HpX-ft*`$widLOy<6d&{5HzPe{9;MOo&bkO?cn7Nw5-vi`^rx;%s%c
zs9_1oTz*9h03AB+R`r*OPEn$LV9=5LoJ)>Gp2Rm*Vo>MEQ>G~7D~?WzddG+DGYPQP
z8*EasnJUIt8o!0i^y8 at nGaot6fJ^409Y|-L?G~nY_BiJ^A&$`%`O at Xu<4YI1t2C^)
zf4hP?{w=RS$Pq^6-lRnsE{gR8OfVQ`^bSv&G_Eet#Q9zh3vWHdJrIlicx$Q at Uvr<C
z<D at yq0~|~v_mdtJ+zcKx(IW`v<e{j%NxGG(>g_P~f+I+BTkswOr%f7Ywe$J^61D)u
zsN{9J3-I=Y=QFm5(Z(QOm+8<$h|DH1f4F`@!w8C`8mPP9PkX5%;Q6|3ij#+Bp>QK@
zF8B1hD3(nnLDvQl{1b^MSa1wrKsK|1!ih<fk={3J)RT97WwpvlNRwww4f3x;?|VUZ
zwNu`{B*G at jnJOD&Scc+~RVHZjC!n`mr40*eBu^-C+hRo!WgqLNc52r98KL5Se{kxM
z(!ScUJ#F%9+wvzfb!<JHe38L89tLLR at IxQqb-wr`QQKuV0N)6Ww8=*yb(~!JnKq$M
zzLqE3HR#Af>~6%k<pg0iYajZZ(W^CX#QOdsfb*ljjKeBOoAQBKl=$Vf+-x=4Ct885
z0+=qABSsje00lt$zm<yF&jx4TJcE?x?SEq3ck<zM>)w7Hy?zS9y+Cbh`nV}USX^@W
zhKpsI&XjZ!-^1!AO07jtHYh?v-kmKEj5QLZW(V{yh89F at Km+4oN0e5qGMTa*5|d?;
z^%4yKg!>oLDX0iG$t<tOXMktop{?2mghF!~oFFEUi(#uL^g>a*)+Vj%X&Fc1Cx0&)
zGb?(xJq3}B&~320ofsB at U!2DW_N6l6wT$iC78Dl|FGw8gmwzMn9&B{?uvv>gDFBny
zaysDX;=cLSW=_?93C>T+rA3d#Rp8N_a%;!k^mnKQ=Y`$nI67p#vmql7Ya^JU87W1}
zQ{@lVTU`Orx>SBcn8`1g5&$qv=zsR#EU|yY8zW)oU1e;7hZZ;H9I;;7XI!LrUaDI6
z?aFyMNJQDwxWpMCzo=`3MFOp`d$DqrI7VwDr^#q*d)hYfnhB>WW(@y{c?xVnzAF<d
zVFl{m$o|?{5ISB22n&d}^cTIIvvj<MQTQ>EVs1hqIn|t at Q<>is2cs#2mwz_9k#saN
zvdPhEcCUTom4|B at gSqHkP{a1r%3)La9saEvPc-9Nk4%$tW at Ljb^kx?KR`_BTgNMJJ
z7d1~b*7hEKAryA*-ZO_1z-Da#f6`5I01xPrt@!yamr9pfP_I6(6IsM+piJ?+exg+{
zW=-eC9w?c$0rHdVb|BrY`+qPhMk{aTPUp0 at qSA$SEA?Ni26smX&{!aE(&uyiIqLtX
zL#O?UrC#2Ap1%<*H=^+<U8b1Ip*b?H6ICVo6rC70shwrGyHy2JCkMT)yCWp_s->H?
zY)MMVZtxejo{8YGGB{swCQlY(-*&3{e4k?s_W+&IM8`_Gd+kl8 at _*UeHHou(c((re
zVs$NWEhm0Is&_esK24@@2$SvF>ksI{F0qK9KdCcdwvkKCu4e(zIhh+rI`l01K}T2`
zmyvi!Vq@&!7p<=sJ9<wHhq2{9?61=YS?u#6U at mTBXUY;k{koDHz6~PL<>Mk$m&I3s
z at 4LHsgPsLzdYuCEN`H)>M96k6OLC>5)ba&0AXA58%wrGg(wtZ`{KsaurD~wFT5uC@
zB)Aw{v&<J96CCKzwYja42W1YtWL*!wGg#G%bF#O_=XiiXJ}?{rO8kU!OHTk7v>b&s
zW_jd!bTAmE at G(_;2Q=b0l}d1XwtACo)F_;k){B-3zzhy%j(^IZncu*$>Y94-v^yJ*
zlqV#6NL{v at C~|pst8Zl%x#Wvq=Slkv98MuCnWoo=vlZoIgIha%U2p6Xp=k(CfAQ%}
zTof5loOL0h8Xm2W8JHJz3La)BCcV&X9>IGvTV<=2Js8v;`<d3KJQmDwFK0jzPtV(-
zli|K_8#`8s`+u;IRyR9^6A*H1V_;F%8s~U{b`cmcFsbgLtJEF`3N;{iLt(tlYC(is
zvE{udGWsLIjtr1n-XE%sXwbeWqkkjsU=S1w4kF6P_O}95+2>G+7QQXc$`l;;yarc0
z#2}#RR{g-RLDm{{ymdV4f;fzYDAy}hWQ4QfFzLz5_kWCA#%}U)c`K~X?$Vp at Wa@jJ
z9iF1elL;D|EHJfFqbc8On<1hpH{F&;f?mbUQD|{sGAloMv(+v35-8H#Iikg!VulJV
zn~2U=mIB*JHxH2g{vfaXA0ukCsi^MBQ-a}YfHxY8O#Q|{Zv at Sj9ZEx}=iksP`j&3b
zsV`Y|KYtx15)lK~$r&u2A=3-?Ak1zzJc&}zL($$gsOC*ru6J at 9CPki7liYn4jr@%T
zBS7&a$Au}}fETf+OjsJCH7)qM at er5b>JrGfp|86U+^#khWJ{9`)kddk7LwYq<RK68
zhN(ppex4CXSpT7$af?k}zP>^S*^e4v^u4CsihnLF7X^USzh83MlnGFki%<k at xL48U
zPo#)d>2m+t)`4OjyB&mH!8Bv|a9}_x653LjR>Vuy5?!uvNy8G)3`~U$aPZi8;X0-N
zpShDoY6jF@>TtBx=|>IKM|hPrfV$)2tD$2PGfoY?IGRn>rx`!2I8 at vCC7`xF5`E>=
z&40!1tDuZj^0%`ug*P75GsBF*gBSKeQuV)G51sAJ at yFC(bZO at 1Fvl;DRUw#r6n#e!
z`GckIU$k-03QNwYTv{`|2BfH5n?xl6Ew2N4RB8RC=!xuA>{Go3;d>VjmmxZ$vYJ#I
zkI>DrzN-Ew$jRw(4yGw_p9<kLOP3WVM1QDN!s5YVFU=UUPZ1~dwa|wTAcXnI;9opP
z>w4!<5X-In)XxAsgIKYYfsV}XRfd3ErM}X-7la~?J6GVYa~fCudxOR^yU28%kwTk}
zc&v^_ql<psY#$PrbCx!EB~;1aeT;{d1XY=Yg-dCf2`{<>kQOW)a0*2<&Cb+*TYn at b
zfGP_+NPBdwJdIWTc&l@}v|kVKLBV$1pFW4YX2XEYt?{e!Jr``f+9+B at l>dZlT~|oK
zrBYj;7)6qM;4Lz~@*FXh#_I4yAJdK4kBvq02c<)blVm^ss}C>1Lz|nrljVMW`?%T-
zizFjAm>&cnBVZVYqm-q4P}Mpl^?$QW+>+JvdyRyMSg;j66uJ`CH1J+kJ(Gu(N_byg
zFyla01(nu=f5-=Iz>X8#$gm9>RLRx+Qd2R1KyvqI13>jC5%OtC4CLx?_<Q`C_X>up
zR}6hBIsSp-bqehkBi+u;N^yHsMn`6vm!#HIuH?w{I4)Y<47dr9t*uQl2Y+>*3tBwK
zTSxp;<$Is at zxE0BW74RM75=Wu8pgOp-1Qm^B(SznMT2!UBg``OgL{{*c2Dxl^dFN)
zNLN^T60gQnc;Wd(jC_uh5oz-J?7*%mBNAL!ARSxgjt*nm-7zQcVdjbLpCHU6AGWmp
zAy^v6tymm2QlC?m2+@`e_<t#e;1K!SD@|vto8_G)03nMSLa-{TaBWFrfZTma%I(&*
z;<_f{ha~KT!l4rUYr7*ww5hFpjfTB4!)u}olWpor8Ni^O%}W6+lvgtx`luEr{xyi4
zK~Y1=MxS`Bey2M&ofC0r%c$x8%(-z4!p<lHGf5omgd12z;|5m<K7W7X5*$Y5eH;b0
zjYbzrYJxwjgA1rBhla&~K>__CFYMa3MBYAC&|FI;9zk<Slp^_EXFXsXFYRem)u8^W
z>T2>C!EmdBBE5w+WwP(m*p6*LgmsS%xHbM;UP6>_2f-&G?r97pMv<jxZtkygkvjSi
z1%Q@>BXZPZHGj_ja)0fvhpqU*!E~r|xIz1KBH^vUd9taL*~K{B?NGyG$h`t|+kt^&
zb-G7T+0Ck!+?CLS<|PFDvv4UW5nP}I{h`<%uQQg%{0W3}b113gl#rBw?gtg&S?>mO
zyhdD|OyiaUB<mggTd#Y#PfB8Y2X+}C%ac(}DZROFB1(=9`hTYO=<rH00M!=;pJ$o6
z3HYku7H(}h#6P|d&*IJy99M>$u=YuSePKdy=G&7S&p_DZ0e|f;3o(F$=%nH*j(=CB
z*Iz)NX!!GViigwsk(W+!L;0wX9;Q3 at k|>mzkrHjJE!_cZ+5fW`#E%M9e_jBm$9=VF
zXl936AkQ3)q<{I=T^R2P<3zkFTKT at _L^G6Z&=L%u$20UCKT0s)GXFx)<}+EtGQZ0X
zU=R<2u!GF-JyY0SdE#(0R#{1NECh}98ssuRx&d at d<cUvn>n`A`*&CqybZ-RguBFq)
zJh}BjhA`Vn^x7b&N)eZGQ!N3<a~S(OFnF>Hkj#{9QGaZm?cRAsU(T8di`O{y=(2hP
z*X09zW{SyLfPIOq8r$~8(4u6ifrdE>H$ZEi_?bQl32O at NIKQE%yD`UJkq&;+e;|<b
zdR3r-YPC5IiiKJf@<xvr<<9a`t;0yx5HxN#+al*KhNW^JRo<nR#@*DxlM!w(M2Peb
zsvY6Y+kY7<rgwBtyg3$=VPv2 at T6Ki2DM&q+t3{qAHlP{-LsvjBtohi2!@nF3wphLY
zINGIhpU`(%6X|(NuQ at xkx7KDY<-TJjoT$(a0xX1~shnuR=QEFoW!A at -jB1&7iH=YQ
z+k%M?a3I?9+g~CKzr at P;Jaaf$-;IJ6bTUIYg?~*7{j4LNdj}IC&o0(I^-i8Yw3%Es
zJZk>#TGB}lfRnGKC40sfajTrmO;o8rUF*Wh3TEAa at YiB46fj&zwYWZYx{bxps)e%K
zNmd+SU+ec)^4i|5IF#VJG0vYro9bqm5EbfJz`eZ7HY`QO7cUJ!rN+hfrSUt|3-$i!
zX at 9{wCZHeD3BvzggP~zD3jz_9X?iy%zKfLa4W9ifJr+YFC~~3#;>6rV`f3{85idg-
zokkxN%LqGh3+Gk=Xu(Gtg5<}(m|;6 at D*OlUvv^4GGuytOYO^-uu6>?^zUbCx7mdTy
z0{>uV9C3-|w<kQS$1p(~?@d-^VPX8iFn=UGgX{W1Ij|N0cq7E1sb?gf)ouGJkG{a!
zsGr#LwP8QoR*Ow?cbRA&hYQW3CRH#ilu^7jvM{`gP)gK*!zLo%1S8(li3_3?;AgC3
zhKo@*&)?fA6jU<IlEwWtzqeh@#$IwWjVeOcoXMcmXWK4UUyPx4ORao=SuIRH$A8Be
zBtOgSZ#JP6BHxG0q%hA$e|&F9b(kS<SogtBI;wdqUETJlkvx2(*W~c1=PXf@%M<$F
zZ~(eK_2FxW8j77?t~@J5MD7gij_zZn3$;Db_T(g4;pLt^1vNmFrkvP5uSsi&teyCf
zV}40`!KS`Y(Mv3qgHZZ&t89^T5`Tv&OmnXw7MDw|mwl at qE^|7^eXq4PBjq4~M at 0R-
zeDb!RoUQSYVORI`lyPdQCIEy3(C1F_pZ?}wg2PSxa4};HppYdUH(wyItSL<(Vvc7w
zg6#2tY?!yw*F|17XQO~g6YgrD-Ec1QK7tf_lxKzsMQzj4VJy(M`)^O(<A3#+f<zE0
zn#JNrl&fc}9L{p+f2T at V0`8t0`bI9PwepM>dd|sB;9$$*kRnU#xA-~n=f|z4z!VOq
z3`i|>sbmt^jD*1n-n)IqP2|py92T6 at kG#~NtC?|jxCM&5`EEZRK^s(FXvi~jF<g$L
zs;zgnRimX<xTO414qADb5q}3ymgdR57$dI(T!|lB%X~y4Ki}}LqnP|+Z&pc3+~JVS
z>N<B(u at 11c>u<)*a6nPS)ReVXHIT8Ru%QVvF;x0dGtn1*_{I|#IsxD=AT*ai<&+2H
z*a<ie>;wV6r#LSNwjv|NO=F at x4EmiOLIH{S74dofyvXS6>>lUn+J6~F?vGcNDcDer
zo1EE4l8HS|zp82`-*oEOFJnE5R~Z&yYu6S+_Sam52TbqlbSD4gD|vbHMvGxlJy%zS
z-DUF8VSLN8YdL+<E#*vQ^3d(qnNCt4iv&B`INytIsEy_jYn at De$czARR=hV&r0o{L
zM3A7Q-0G%sn<kr$l7El6*Y at c&Cv+2|9JTMUM;$T_7R+EEL1PlI8Q8Vbv?R0 at 4pxUp
zx*&8Kt`B5e)B|N*U3E0~JKMG4&$vEZuYDs|i+BsYGEDX}AEb)Y%H?>39-0yfP|YVE
z5gAqpI^BLyZ&l%`K{d<&Taq~=5*V1q*SESRGna!z44H9qg?~umFw9ZfRQFpdUtvI1
zzP|qj-EHYn05M<(4|BB76GPhh-!OXYlOAi31o5RHd8ZHr2W(Op5JM+GcScI!7hnhd
zwX~ZFwM_E;f2!bNZX<Xc^^x<oR0Xb<0P0_9T`5nL4ia#*Hiyo2i=^U&B?CSNr)P7G
zA-!@ycwG$;6 at MOZBDjlT|7oF2sT8DtzuiEZtS64Y2&U?CO1S`Gg&|5?Ex9Oc=4dXF
z2AMXT$Z9FGKSBQpu`$;W(S~>Q_^I9xE>_;Qt4d2WrLL&bQyE106tWpFulX&I=C`5H
zHyb?3-C`tgz$-aWlPAxi9(FbhXFRf0bh23Yyhhw~@_&B<pAvEv%5z-Ib at 3MwGoBVG
zz+qlu?gBDMRPL!^^}fr<Ko+e|zq#3olT<P3^oq1Y{J at X=&u3&B9Lq}{O*0&+61FM3
zlpRo`+wvWqzALmsz_{=R%W?RChB|dvPXAEEZ=X-=u89C{Eq1R9OWe!bb*-~!`%0qW
zbhR2)3xD4j at X}8g|N0)696Rq6l6R~&A6C#iFtT)+M{J)}kjCor5H`y)2wl!E(0DlV
zMUO(*bs{C{vE-=Y7|ZDTA+vj(#Ss;vuTG+QAw&zpGDgZyRMLX2E+~w*%ost(I8XTR
z<9R%_Vk~q1);ONIv|6tn+103p0GnM3DV|B59Dnx2f`FezYPGIPwIRua&Mw8&d8lhf
z2!jl+YY#z0{ew?!zwDD`g9lyn`27Y2r`w4 at ZsCOdOU4XHhrq+uL*Mq!{szePJt^M>
zIlJ{&Ql at NglhK=lT`39b3}MOrI2zw*#MTObRC%+K(NM^!fG?eJ*5%~_W>3j9on7`*
zoqt0Y+_Y*~=~auUb@^Clu?+zG at P&8f!&Bq7(;4v>mv6Y)TxV`(iS`*Eu(SRlGYhz9
z=)dQji#f2wLtXBMXf(C+6hWgH1vd;=FalUkz at ScoJ+m)j-lQQjGHt1ESxTpF>f)0M
z$A3vY_nz5E*2~bw3B~3C at fE78tZ&rLf`1_oLJmCy?RWl$FId~{c694(_34WhirU2X
zLcU9kT9&&~407wb{n~q#X3j8WuYqs5#{0iY at t&Wngdg$|N<iQCaa8HFQF3UJC(02*
z{384+&|3hR<y=VK at hz6|4Ru&>q7=Hk<@Ty8v=s9cNsogbBxiRC@=dJeo9Frmihrn3
zaPz<G^T)Ke;DYgiV=x>jrIs1|Ax7<#SNtgnM`&5xZjTRxoj1~>^$!8N?&=FJX=OzR
z=aHbn%UeL-WZ6;Gs$f+K9aP$qzW9iBFX~freWJ(ZA=(t%>>??v?6n&Pm(4Ac4`I{<
zr!i%(gExy2zf-l%0T9BBH`H-fWPkAP+msEum%xVE?D;TvRbFei6PU*oaqgzmV}cS`
z&w^4|pj<`=i4nCr_vlyN+!zijGwVu=xO}6aN(&ub6_46A3^}H=SOt+VK#*nYKji_0
z7omD(Q2yN4bD;*f?Faw2{5!JSCwZE`fQUuYHs26iwyESXFtVEpn7 at hR_J5stD<myL
z^1nsscme+4;)k#Su+s%=0(88SwF)5m3EL$;I<QLTl!oK``uB667M1-esrFJ?pmUzx
zEe<_SPV<*P&y}zGyZ-dy*IfBBsHcRwYjT8Mmsgx*Y*TkcX1)PKL<o}LM*A1+^?lJA
zD4Sdrk#uY#2Gvp<S0x6IXMZQdvu_hJ at Ot5cdWd))XngT!4xm3>va{S<j%AxxX+HNW
z4RqjlO+rKAY69vO5#UeV3v5LU9KzFp**}b$!>vfd>^|@V7*E3ri0BlqilxzVX|?Gk
zRL#TFf3B$k#x#DU_~VI}^SF7URDU@{VUOqzuAKA^7EF!`8)F2JK7a3H3uVzg=~M1`
z{phd!93$tAd1kJp1z+y=xeY>UkRKH=Ri;K#*#`TbX*p;umMEa2P*Z~oC4DjWQ>U_k
z6`C{A&p)XsFj5s(&eHVQG at aL~P(_hU*kqb2UNa6PSD4?^0U^OeRyvsR%K#({rv5hR
z{m>9A9npoKKET)XLVup?<QGQCed9UKga{+5n$Vf~cd78fEZ04|-F|sfprzfW)s74p
zql-zX6it3XB%*Mu(03qx&5HdzUJ_FS_ISKAos~bjm4c&TXo9#^yKV)OPFX5(^VYXq
z5p at oR9PEnJ9E*31gmgw#UAqEnu41B0d&k-$|D(4T_%vIrL4TFF6-f~uBu2msw<R@=
z>v4gY#I%Lqx3PT9xOOiO4-S0RTrWa+j2}rqs+)$I%njp~$uz8Jq&M!>E=NRMEW$1z
zxhR~ROQnQQ&HLk$n9Qi`GvS;}@o&NC&L15bobK02^2a2*7BL-xHNGxl4@?6)bh17?
z--{xr1$v#khksa-jLp+E-z1o&$Z+gI2|zetv7Zs|B0S-FBjmQrO56I_XELa12kBe2
zAbK6;s!gc8?+caJmG;aVWl`c at d9WP~Qm~+GfP@%tb|Y(D!maE;%GioY$_JX{O1I13
zhkJ+ijM-Jn`W=s6jZh$G5f;P*nQ?0zqe1Jsc|C|NNPm=2bk;yl&iLITLYp2vo}Y6Z
zUL(S7TaC`clM_SV(G0uSW$d7!4!DKQ!yeA6Gt|*bKu@#wNql9O2H2TqT!A4P$9}H!
zqu!;zPZbMSB=xdPszJV)mJArta6!0TUND{t^(~V8QdFD4p#C3H*o#Z42CyGCDVK$U
z5_1_sq<>4m>~$Ya0rVdYl5?CF+cXPpa3EKn4)^k>wei#Q6jxkX3X<BhwN)hi$`|O2
zJiHDyLJ!tGdS16=?*`hk<X=sB3X@{nhHb`=a%TWFFf4u)n&y19i^wADWFo%)A#3CV
zCrk!>E$5OMRD-aIjqkSb*ik7D=A<(;W^F9IEPt$uf|i$oU)^v*2x7W8W#9lx01pW-
zX{$AQxoL}DAwuRV`G%x6<74k4NTN&E!is!)z{emYE-;@W73 at WWpe(FiVJcd$PP7vp
zVx1~Q_rwkJ at nLcZe8%cVyD{r%F)9Bw|L%~AsY=6v_-4aU`>(cp#3_<~QK)q-l7ywY
zKYs%A?a^+fO}KHWp8oIHIWZcp)XPKgA5kYZU at ri&>#jjIuZEyqsAXECK%ssx#Wu?L
zd9S?bKmzSmD2#5(NP0xTbS0-VDDMC3XNvhWSOIHG(^eMnwz&||I>~MhYR?8dex>Cf
zBa1LIpYn&Hi<)Lr)6K3L`cS*XkZ-5>z<;X%@z(2_dtY#I%S>jcb*{o=!dgc!1W%T3
zimBxpp*BplxkAO*5j1K{P<ZRH$2V=)T%3Q0tS6uW8!_AutIXQ8Vyf;<9d`vcRhG17
zsJ%#%H2mVWTS9r0pv4082^pGQ(1 at ZZ{93T9>{qFNQK>%{xocV>kth6g#Zb6u2!CNG
z at FdB_xeV1IBPy<=P5W90V#HGm>k?YOOd{LLlB{i at FwT$w>c0<a#0KM{tce})#c8vX
zr%Bvd81wjjwBXz1ZK2t|_!hv(<qP2N0#v)@`rC!gbm+rm%G*cU7K_^~<3_|SK3FZD
zgg%63zgZDKpPAgN6rR3%RV&;5l7C|kjTE30v7#l&{K at R|zKBd?hzRd`X}2`$MA@=n
zP!u1uAI3~e4E$s-fJP3_e}N2H*_V#=Rd#-R-7+%1;)E>ZHM5i90MGZo4^&uGl+UZd
zr_ux!BL!OjI(Pa&)kPDwOLK;9tYo0-n%obP+gK?oh9WRY3?4vwXYGC4gMaL)T19=H
zVK8~lB71SZ84Oe&FtiNlhdE_+g<*p-$GG`Fg%|uuwp>s!@TL_Ni&G!5JBIgJ2S+`0
z at G^<M5pfVv5`Tz%<r8%7+2#j`g7=~+%e_2&ya1Up at yYMx0@*!`z~E|3!GLfgkr at 17
zWf7YOnP+1g{{2Zr_HrL*QGdvz8LHh|mLz at GvaZ9J2LI*+;_q at ro$)5nPQio=;wKDB
z;=1Ro(t_imk2P(3!7D5 at 5e`mCg7hdH-DgknmE8M4b$26vx)d(`<~_eM&xQdHHdf at 4
zZ#Fk#zkX&XF=Hq)u>|(D7>6MRN_fdz60OlYPJTvHLwd{Tvi5I|P=Cz97~6T8j`uWE
zkE(jGoin&^W1e0BI5Ij^^z4D5odXU+W#ZcJZ##a_RS7sam~~TsJ<|O8?b)%wSZR?W
zQOC${DHy|5gQT8SX6f;o0?OD-0-=#m=gBMT^czWV@>;0M9cD-?vhzh|Tk#LB14utR
zsBOZDAhdRd8j1JDdVd3 at 9g28J6{l_i>EOq*JW9W>@a&MY at -D|66C~4fZSlG2I6a#@
z>pUo(4L?$`ePImY92D>;Y;Cevn=kUv?neBtb~{xUOt$Z*Ep02NBK&#7q#~;dMj~M>
zzg{Ta_<n&-bW|&3Anu;*fxoaV!;@mQdl;C!A1`6dNT=^@bbpsTXC+Jcm)RfZu&D>(
zt<6Wff^lMV@&b_)`+?pH(<*Ccw;T1AXACxkr!L3rHXhMrT~&3KwS6e2YwV>*MS;a1
zm87-qAGrMjLc*SWRTMTHQRQ>1tYJacYv+e0f(k>+_r3~9Do*&Psw`Y<%`@ObCYbO@
zRNJ*<_V(pCd4D?v-OR0 at 02DXRpPJ83Jg^`*MUOaH)`LA`Z^6kNL^Fy at n|8L5baW&s
zp6N3H<EsxeaX(~<LND-iM1TpsCgXG5CWWNfkX!hQkZ&i7lLG_!V;ygA5pT<PUf#+u
z(B=kIW)y_(*lUy6s|6-`M~<>O;{l-yFw)NMlI2!m>3^-3ADthf at EEw}xPS20vY)YV
zuf{z-2H)9#g^4}ADpYv?W5?#05NphUX{J?2j at sQy!i^AE?DMePjAx%jI&MP0CC+e-
zjNQ)BYdsljhu`^$@E5X`EF%p)YYAZsE0Nab$L4 at ie<GofiWBrOIY%CGN72s5+=8i*
zck#ag0DoAtP`LCOQ>{5EGiwETP{_p%w8y7 at -zN|h8re6N^0>xtFC7|bGLfZ*+}|Ks
zyO3hWWKg2TK*|~`Jz at EcWB>Qg=n(ajajj3M$V`4V{m~lCqT0@>ZTznZa*v*dgz at e6
zr;QV~8OLJ8L-;T>qs7yPwv+!QJO#cm_nX0`OMioe#f8dJJI=nM0YIyGC at 5!9foxwb
zfo~QEzX~$N{8~_%U6S8e%>Si7vDY=fE4Td$1vV-yCMT7OrAs*hKLf-U#-e+J1}oy`
z(YFc$X`x1GN2xbqhtP6$CZ~SALJ&-JHSbxFE6>YiY;|_~q)H%5+`VN1fDu5-7Z!gl
z`+u7=aF#KQ7%>MEAeI%KN7g;-sGP`wk$V-PR9LwQF0FWr&yF_d6VQ8?Xv<fHm}S%>
zUpJs8v|o)FZd^WF`FZ|yD2^V7+ at j}Xdp1r at qZsu!@I)p3Aa{CVWKr9%b6O`8d#?d1
z3xAD%U9wQJ(VH?!feIkEHdo<|Q+z9Nd4JVW4nHeMAoG`!)?4nb>9k?%`Q!Pw^xFaX
z`@`1)VLvo~seJcwe-Z)IS9(gY&n{_0Rb-xy#<1H1Goyjz+C;!6u9k5(=)7HTH0Lr>
z!Yw!cp?BoU0;)A5mINjZ{Lbc!$0Q42=~dT_IDLyL34;l1Kfo?LO;bqTj1?T~xPK42
zdd5vv%}PUWrY<m#;K{X5k>R{3&`wYAA%PUbW!<`gTxGssRRN2VL_Rtd8wBP+SXLsA
z0(wzAQ=&K_TX<p#x^l{>xf+RM<0=`4%z1jX#M&OM4V7HXKOw`9&<@@a90Kcdr|Wex
z?ywt=(+WiSq%{2ra9ynK{DYc<Jb$-ZoJF#JdPc9#HS40val60hdn-J_Pq4tp8_rZr
zIkRn~XQ04lm_LNcDC at dR^<jY3YG<+5`NSHpw0R-aSiT+yEF^arNtOi-YL#=<$^#&E
zV*3WdR$O<KaVLtZr<V`Il<F=8BYp3|xk(U&aNoz|$p^6^)gvr^b!McuVSlEDka1!B
zwdMydaQe^p5%g|Jbp-_#@m}?zd6qj#fIzjUqO<6unDT?Xqkb9m(-6`OH)_Hh*dklp
zHrTX5OIj_z3q~nE#yDSh5v|y at ahC((1&P_s=*%4xrkuYTehB?mwS<l;$?xrNBYV%H
zl^<0sxad3yul!srC-Ew~cz?5vV^s7hrEV_|J5N%l*hzwQDuX@|_P&Q~o$N8rh0Yi%
zpR&WLATDvuEyfu5=FES-a<P2a0yL<<AkFO*jH5^#of-KWcD^iR$=_H)D7P6zT0r{%
zO*x7ZOtuWyX+d;LU+Q;h_E=4jp5Ge)#wW)(1lV=vk|(|i>hHJpeSao~P0fJCqX6+k
zNUn23F^;_sLf%2$dA;bL;ZFP{C?gmm8PZ)t=8at31cCp*%!WCa5@{6K94Ap=+vsoT
zU&3UN>#@p at yZt=olcX|fXY?}dRC$!vm at Qv;z=U63JDx-;)mn_>gs4)~^^X>12g=~Z
zHo5WLn<A8~H4Kh;<9~3b=RG-sKPWSABU7GLGAk`#^T at E`(N<N|k9`cRf^$Ek4&8M_
z`2U6!f83J_k$%)eA?M^CBd!%eBQg-R^n?kTZ55M=@?89=|FDM-xY`kV>!=Y4TEj-$
z`R|)Ud<yum%Tpz0G6)Z{#$kkHlV<_B5o^KO3Ph3+f^=y(B7f8#ZNKw}B4k;B0 at tP|
zjF@$5osRv~&O7E`<CzvF#M_VRonwwc9{bzP`cqW|dbS|Z at 7-rn=toT}H6t10F7dX#
zY0EpJd$-?xD>qTJ3!_U0BJ^fssni$d{Ca^<gL(UGM(3Q;K2UN at G;d5+*!hMZ+E6)9
z%vvW*MoXi&#D8C<fK-GmR&H$jd{LnIn5gWT{GfZ{pa?iDCc{p&BV at tTVf2sL6@*5#
zu_+{|`p5KeW)GA<UouBaom10<^<1tCqW9TYfmG6x-w3b<-JJm!{CtO|vkLgb=S9y;
z@@||*ke=P2TmEXwOnLOjIM+|s6EJVUg-fIyCo3OOkAEjQv3Fr$Mw`)j^X}%J2Py0{
z7A7NjmmNzG+CH+(!}-F^2+l at Hv1YI<r;nN9Y?Mt}iByK(Wm-9{kzu|B`UoGm(01af
zD~k?=urw*Q$y3?kzVVksAf^b4M2O9lFJEt30_(?DtTw*xM7nIIq`-dz&)WOPu=$;?
zUR+C9jemb>NVsXbw0Wk1Mll+M8v4A4u<5-VtY-ovaE11Y^gsJuYO^bu>>EA1DZWNQ
z$8(~KJKgR!7;Jd+h<6H)+F)9S8@^Ct81GZ`LwqVT*IyutZAjo5EB&^-0eezIo=XLY
z^Yqkptl0CThzfVJgpNwp?N8s at 3@Y#ecYKhdk$+*`!^O0bcKYpLU;&jV8TQ(c at n(lQ
zC$Wd>rt84M-fV9v<9tDH30VMe=K0UVAiobM#x&F%R~L92Yhf?oO&HsD+VNuwSv1|v
z`J at Azr=<BnkIlV8k`DcWVhPKmQa>l|mcn9J`h%o8wLVH0>kc6Z`W+>wzibkqb}of%
z4S&acP_hE)lg=h at pP>pMiXiSl`<HXf-7m*rXaB|&Ta-Vv%aKn;+9`z+r5tkxwsmpU
ztkFeMVw%*<x3Yp;d>3jXiMLlro`TT3J$p+EI=t;^j1^z6yoK880->9~Ap0mS5er!#
z$DgZFcguY1WG|f2pEw`UUfGW9FtKD=<bOM^mymuW{i=zAUj52F<+>qxf-|kDWFOCw
zd>YTX&GasOB;sWxJXG-%S`%PYGU4Jz;B2av5L|rnrG(v(oOWI|=7noA!{ii3XmEP8
z|Ca-<x{!Xj5?P)=@(6^rZGqq{t%cuV*{vqeJWUjhR8(Wm?H9v)o<|lVm2m#m6n`%t
zvt8+^+_ at pYg4fyhu-xG1!q3eN18eqY7G6E_?Z%aTRkt_Rz8+2bqXfPxxNgohQdqu3
zV)zJ$<ZCM at L+d)im?+_E$iA$0V~kJoVwXaa&=O)YwpOFY3Y^(ce}O=L@`>D}M}De1
zgcDQiZ)97G5R9nrAHZLXp=XOf4Syxngs!_CYzUwcoDV_p$E&=6^yHies4gbIW2(K4
zoEl>z)wI-p^#L+lps;+G;42~6ucel557no=&41$x5S0k$Y(Gi<QCr#$PoE(Gmz3|?
z0vJQ&b=T{MDy1XG-}e6WSpB45<aC$Ut11>9kV at wIQU9bkb}?Hhm^+FcjDIM|YuXB1
z?>@uVF at s<Mu2ln2Q&Vl!u6`@k_7IM<B9kbf0P0={`5=XF5DkM%`RiTQJf-n^r^OVx
z;s4ayI4*zD1-OQ*vr%7>4fMF(tw3Fl0Z|2-7!ECJAC6&zr59OiYlc?0htPrUWtTf1
zdSo=6l5|b7^fLOrsBpzwJbzc8v5lS at k;_iqStw-M=T`apr!9&e8kqk~flaQ=ZerN9
zs!9i^$B{sUvSyZCVRrppR`kMCs3&Lx%-+iL;K>H?Up61zvD^6yn>pL+=F8T8L&35~
z*<eo4_pGqhlL~>35`v_<jRq2xeSt=2Ju#E{crndjfg<BULMu8yZGZZU!X7j!EyT~+
za+$Ou0*a?$+nG@;Oxfezz%*FSDl2mos(M$MvVDM_)Y?o2sQeq6*iXSh2k%?C45u+T
zb)loX<v5X1FGaR0NHs`UgmJ6?fWpWcP;h4PJlG)}X#c;uDCnKV$_u~JtEL6N$`jRj
z72bVe$F#4Kue{c{OMfQ)l|mQ#J=~H{pz=TMY){>-_KVf5jhq8AyfLC{K+K;JnkG-W
z>S8aXl6&nhtw8q-;TD2x(k|q0clI}~a4KYmg^;BqSnPf_Ji;5eajt#ahzU73mF#7?
z(@8%BkdxYiOfKkBxl68t3Sw52warG#EiK}^7<9lvRRa*>P=Ei)M8RCap^fe)#LBpV
zq<qdE5ny=NRaB&8P2weo3R?$B$za^Xp+Afv)WR1fXjg=b^fA#Hrk1i)?U^;SdE<wZ
zr!pppiB#gq<EoA~Lb{L_sV at RX&6V4k!V49{_gx{DY6 at sfI1&)8iI9H1A{vkfqqtcN
z`+gOORrMRztbfKuJnXiC%nsnt7HGlN?TbK`2Iw4^w}yS&a>AeE75OAAJae{81ht%O
zF&g(XB|8v;&E;U<Ae)I*V6B-^4Wb_Bv=%m3YQ`*r0W6)cS at Ba7+7f>M;uhL}Ov4(E
zu;?L at Vl_y3pc>3?My6leno at mFu+h7GBaUM5kz=<s7=NUa^x6hbDeZgE`R&_k4v0F+
z6Ad+>W#}CWHcT}RgGT9Dw308<J3qRDjPt*?{3WOnJu^Xu%FS-k_@=Z3nFSaZd}?ew
zvAVXcI*&lI+rU<lhDM0;KF~4B;sbf;IvUH%TGS-8-fmw>^^K-_=fw_116pdCl;~K1
zN7 at RL4}VGK$`{GQDPGZ+0Gna+Zx?U#NvI6OTIAc-6n>;@VR!*+AQHxV+RClZ)UV>V
z%HeDvx!Kh8C1$(A`YSV0N8Dhq+_wf|dzMp4(;!+8Cz?{)^40Gw`5p69D#UTRWVTN5
zGOOlb_sN}{m*tGc>m8j|&C;{8OTQSa%#0d?Qhxxa1!53h`xBVIi&XS_J>=g#zC*O7
z*lb}!3r*6o$!zy}pn}k8sHH-TmpbMYH=qpJx3u(A3<<h2$+py at R!!ikMaMc~CG}FF
zf16Al*8{0>h0fckw9uMl2&?6=yGlw1dXI**pU_CoHJOlL7GVEXl|#F=XC)`lO_)^O
z^?xJSr+320N(F+ZqgK%@axf?d;<<Th$-Ifinv%u*Es`@~l)Syu at z|1W4c;pBS-``W
zOWqc+<Q8lkm)D0U9T9YO*O(-92(P+}In>2HC}FhGpGrKsx*!j at 5NxIe!aK^uW^<`q
zr&(j6A>t5j9Fwa*H+U#SPX6w%k-tcf%YWz_JQB~cF+F#{%xgz9;)W9EH}sD%(6mB(
z;;<>W%|mss4&JV;XJ^kme(FfFtKTc at p<$$Z(H7(QCq9Hu+!~;!bt5cMDixk!<(1wf
zm)PW_<39&FTi4I`u0rz;f<?Hio4*C=cy^0Lwzj&R$r6}4{IgJT!u>nd*mdlCn16Ew
zTM~&4f~O<9u?Q#2x;+P$J$XYJVCH4e2Kg>KK?O}&9=8Kl#c+2A-Y+}AJpcsrMdj1H
zyZ>vNu6O<W<>xt_J6@|KWqMm<W_GxJ3l{>x;EsW4q-exKsj#>v>HwH<jkIUdJV3|j
zqBVFikhly9HUi6IDSv&VHx5A;7JngKjzKp~O}=WriA*6)w^>?ZAMwSAbmpZY9j{Pc
znEar6N|*a8OoafI^LEXRv8Xfe{rm@{w<r32nwTX8AJaCRP&|t*rt-%>;pq6}#(!UI
zO4Zy{EDAYaggQ~Wx+ at g2Mi$5DU4I%%)z(8s#t~LiO|eiYPvJcwdmL6zHGigzYjri^
z9vu_;zd at 9bRSFIsU9Cp%^JC=j3$f^eG1)aQ(ja+oRJh~Dc3sUYM3xfAaI*!@@U1CJ
z$VfrMcNwH%my$^Ty%^SM*lB~J(kM5jlykIQ7CNarS*>%k_ubo7z8AV~$rB`PY`EAi
z)V_`%;2#^xIjad>5x1(~gnvra at AEWksKE@+R!-C&=w&(6C%0|&lmZm9WGe|e{&Nc2
z1Bg8NZ@@kOOHnMn2<{tMX)RPg6B^zATu3s at y<+N8D=puwKeh;xK)R|bhn3u8$UQrU
zGDYPF+x{MTlqH{o at VM>1b}4o>+m=j}`KgSRki)V8>g}9=e1!-%EPo|~%wOy6LfiC>
z$swRtCzFtYupioSw_b(a{`6T1R60<JnPIU<LcwpF*D<I{d`R6lO!&b1F)p|c)K^V%
z=~awXZ$w=$2e>oIwRvUb^vjqepA$#hqBy3r;wg!Kv4mpmZAQ at B_{@}MpTi_^R;pq=
zt!{;U3TRK6MMqPShkr})NI1B6)2PFf at 4^o9b&wvwxkj_>itOMc5I<v9BrR`&tozj{
z>{@&OCnG-DuW}nrpPn<O-n7%k&JW$msG`A~xASuENeobH30Jm;)>|GOjYoj4#-pZ-
z+3SzS>uJ4Wx1gY`9v?NO4+kH+BhE;-_IcelW5Yk$2Bt#Y#eZ8yeg4`$eFePVmeh28
zJb_BhObU`B1XP>@W)d$0YCe424>GG+)GIQS0*wooN43;h8&2@*7=s(SjI^N&&O5N`
zrS>4VS<1a0X^^MYNKjn7ah4-5JHQZCs*kAtAhKT0IV7Wz7P`nP>q|ZC4{g7Ftpb^y
zh43|6Dp6-0z<;F|R)L2DgRF41r2Yc>j-<nR|DL()-2GH<r}qkY>(-!kHfy6xMh7o$
zjBr4H{cwy9)b;4m&M6og5s_G at YdkhVY9qaOJy9MP085{4t%l+)$KQP=D{an*%B>1!
zk_S)j#5GL8v;<0H2 at 9?0`Z at VKq+M!MLy;N6SnO$itA9ERz${7eeJR{SmUGe|bh|H{
z=|Qm?W^+7}k?{&)BtR#Vug@{WD09B>tZR at PTH%3(8 at +IOD&5&KkN<f;2}o6l#LDx?
zknA^JMC~FuK{zBS#v1n7V^0RdpRH?=nyvp=&L-u+IC4i<K9B*7Ne=H%#O*Hnhkkzd
z%qWgslz&xkKwQqE`}(h_WICk{u)v$<g|-!m>lx}V<LiRb)g2B}G*N7Dh1ndF(aK-w
z;rd(N!UQ;}@Fja%&~>zROH(RQbhL#O!@6r|^XZdq_{;aSSys}!k-7C2<mT at LH?*pv
znlMvht|D~fpt|mo8`25_fPTvTGC at U>jtr28N`K}eF#egFs}9a8=cG at Euzx!dyiT>v
zNCT!XcNUQ9Zu3e}(v`av61eNM0O{M5W#$E&dhn0kU6F8=1;N}t<5Hijj4c0vNsc5(
z<_t>0<14hGrAW)1)RXaj*0JYT-V+j(ihjU(I5AJ`vcZt~ki;T?1|buEE+&E at VnWPw
zzJCJ~&A>+qq-(&q<W%g>eu#-|R)GyegK=re_3T+yr=!Wy))<IP|9G;9jozHe7OEn(
zYuzd^H>o|^a}Jxf%mn|uqJnbN0CR5ajjxl at u}Vf%di>U0h9WlSLVI_u5y1nc=q#D$
z$DlfJQ^HWo_El)|VrKIN=lRLKX7D~DvVW1!&#sG*V!>k(5ioL48Lo1>3{E68It<u5
zf!(H9iJEXnjbQA2fi~3z>mt*3-TRxkwx0_)$3}emY9a!Bp(Y({;?L4pN4kwWKKgzK
z2+?c~;w$@`MN!iov{jL&x;>p8aaPCKYuj&#KXQ%?L;!1GgMau{ZVMe?*(EPmIe-4e
zJN!c=OQVOC#^$t-edyMY^3MTvdy=LMSpvEM%N60!kLeu5cWkF!DZF at z`0~R+3<g at y
ztobf^u?NYlF!i3${kdVgZUfJz=IjAJFO$*R<3D at EXCG#_EO(KPAjWcNtX+R<2)ca&
zx)*0|Nk~v8DC&{*KR^sqvY47<dw)SGQL at ikQ$hlG)Yerol(<gNsL>UfIXD0CV at eTO
z-=4&dU#7LFhm$*8M5p15=!LhLLO*}0j}$6+MA(7*uL+$b(!Sz<MyWW7fe{>G&mdPV
zHSu#pN7KZfOE4%m-05y0-Y`CdqhLSDQ(D3)0R;|jrQ+oW$Z)S>(I(3(*MFcS1J>gh
z44EkU7PD2Ze~k41)m{^$x4nef7?O+MfwsPuaFFDio)CFlY$)P^_uC<%E8wT*3RMQ!
ztypNPL68|Zl)M`5W*<3WOH{4J7_*IuK-KX$;9FQzv`R}`{Pa}#sJnDClid&2j0KKm
z`WrIh1{XKn8MpPQ{<mbld4CHu$fQWbnE9!Avyfg<|Hs<RU4jqgIfvKO at K(Ecb~l<9
zt$f~+0xMFjLXxHCrU at uOg~GYsNMqlJp}65DAV*Ywrfe;{(-hSQ^$@G*MY__<)kP_a
zr6|>&R*}7;>Stj_8m3<?HLgkd5}+}Zv<*{8a9K}9`I at Mbj6ucP#D7wX6AV-SL~I|6
zjAy5^ra=Uyk#AxW9GuaCC5;qJt3NT0mbh|g%*VLBJWX{@`y=4Kcmm!1RC7}&Epqf=
z at ncWUk*2eLRv^Ok>=8j8g&*?Q(6z-;eRnt~>-xQ=SLa#@)#ICOu at CRVFrcr{b791U
z5GhC!`fY_9<|fWvbbqiYTXLbBrG1Y*Tg;7d!Dr#e at 0~JNjOLBg7MB`u;rB1zop#yg
zRElYVs<dRX%I*zwKR#4U5;a9+=_5$hW9j;azEIvhYN=ZO0BN=DQUw#DjKqE^#X_Ok
zuU(K7^c#3dPcJ4d&JPC+0Kq=3Zu4)u_JzgS<BBiK)7Ro9h<{lsDe72shk0zOXW|DU
z)Xh_ at NJM;9VF(cUIWxrFm9Vrh@|ugG(u!9LxRTR?;A3BTuLlWf|Ly^_+|#9J+Y9HT
zG=~(NXL)^bi_I=%Y<C$#k=dJWpd=Bf{`-<wRbqF?#9l-DOH<_cLN8a0i0}^b>0K9k
zg9S3>3m+CPqJNwYUoC$@0coOYv%DHzI~hKY;l^?<H0|F9)pTc6OF)9tzNoNaDEFdA
z{pm3pb9k~W)b0rl`9prYD-BbvWRpRN;fE!TkXe=H84l7B`~m4tvd<d(L!$10`3Z&;
z#kKQISbLz=Hgt=X6t=wqiyHsn1$POHPf+v2WBDdc=YNY^%K0mUu7Md}t`~dkVD$%i
zu97`zE^Ux;LIq7&YZKg3Mw;7;!}A%SZ%c?B-gw6PJ48tHe77Uy#sIa!{x37L-d_dk
zGy3_652t21UBIQLKAR3g3uJ76+M6Eez2TinOh-nkT<SVKwfLVUU<!_eIyUIuUbSy%
z*Iv_Bp?_ly at c~Sb<}2MQc|xanC|n9dTj+t)qYOJ at 2s?Z3s45 at RMaloX!mjA=TTwO!
zWCq8Vos4C%>ndY46pDdx15i=FU&`XIYNND_=!I;NB)*;mB$@IO8oVWwjSb8qlII at e
z>0mDtaQch4%Yv4klpQAQrI^C_YG<;^d3?mysDF$0o>ijaAluQCj8;97qq2SPF411B
zHMz<#luZB8S$Ws_jo>}!hb|(jr<e@&QTIf+e58$tH+!W{G6DMUM;s#PZqZdMeTHSd
zqUQAN)_}Y%>{HDp4<1fUO2<OS{;C*$v^#GEPI%yXOr28bzgY7~A(Y6v7Xyp=gEi_`
z%76BWP;odRyU5ACvbhmT*rhaT=x#^AfK8vj_gc*IGpU6fmk&<IBFX8|l at zSIpUIl%
zT0`3AYhDl??nxF(TN91Zmo8sC&tbD7g&}fg?dmn`S&~VswyCjsp{k#P01-66M$27>
zZ&-}mxR&R3wxxK#)|HUGw?)$aXxzqMkAJ!)d`QW at h0^z6<1_0tjM4!%L?^CDEi&2<
z>+V0kf4JgE$7X@}aqJ55pn_e7^z$F>+-_jDa>Xd{O;P?1DOgmUAI)O8L)-m6Animk
z$Ohs4;K2D<*WoL^*FpWTC^U5s-zW<w5MI-Lw;z%zdS8zeHPyn5`$i%4mc2R?c7G|v
zVO8qkBs0lqX-&fG?z?Ea<O&8xJkaCusR>L=Pcc~_NERO&u<*@<Ep$FvaLWu|RDF5w
z_$LEj%ER9Lgy>0s27 at CIHL>L+Ob?d1famj9QVCBwz({&G`YK(v>l&eA^fL=1%>T{F
z30z<9j-+BjzlggUDvoj(U&m%ez<*g4XP5RipRS!&#EeT|Wv}0^K&W!-vCDaRTE=e*
zRDQT<Ff852s`UzsUm$nq#Y5)PKl7!2m{c_J>0z;S`{07KgbC?sk|F<h8+!>=-;%47
za)HTG<K|7^+vRX`AaumgyXmD;4%Hu at _l4?0475pNKBJ8VyTU_buyO2raDQ-!^N%{T
zBlQ(vy6GaG)!Fu}uCF8M{<Z-%nAARmZT<iUaP|Fs1#`rLW!v|)CyYQG{+Uq{3>OAi
zMP0;zn1uYqL+nhjh+T0dLIq)t1FlWTiYkh-G|vOnd at 8l4l?nh5eO-Y}lmkPQnJFCI
zz8|8Xy5&x3I_i{bLVC6A1b^we at uve!J8&*TSkC at MmWbLN;1DGUOD97!c9a;H0?$E-
z-aqXMU3kE*K@;a*046x;QZ>V?$=)xcTm3`}(xlev9QU+v$1xK9eHrqvpJ4~zbOmPU
z?GAIVQFaJr<nrrLbu?zu4)|hhKnIcEy+Q6Bx(aLBO7S+i8+28f_J8s<c>hF=G;?GY
z at nXzkRcBl+;UWJ~6rgp-5Zslj-J=<wP+LiXyO$;9JPRN0h3CvVrKWr#Bb3XVNn$-c
zYpka`=nSylRP-cK=4M7EBT{$Q)2$B{Dbn<XrZ=ZBE>X<el?Mtq-8_(Vm$cG0^V at IW
zT@=?kcQn_uN!D%=jeqGS>FjV9c$@Pt_7G3(4Y5+B!EM at n&c|=1W*Wedmg`w|`mImI
z5LS(Dr05M;YV61t(|2Y^=0`!KM-UM#itYJNeA24tPH;iI4<QX|XjQgAW at coG_c@X7
z at WG)LPR8%dqa=uW=pHDQHq8J*kxszZJYLVk3P`cGQ;iMfeShJ4_j)|7Lk3g4>crYG
zZg8oi&ibsxW9)7uw2SLDI|7&?rt^&CD<&K-(EW)6qlQ%d7}oSV?BZ8CJlFp~Xbue9
znJaiWK8*7_Wr<-BpRuJmSli%fEVhJ`=sD+<EI`>gVrZn?pmY^!O}e<YYRG_a&d-DH
zeX)L_AHKl59DjISc+zn+fYmAXLYm;(Q%|hK)U|XCwi0kKKY64PDtmn{OwP5taQIz*
z+XRL}`m`jvBdXG at Z1+x7^1>(xj08&t_aZJzC4M%YDAg+O`rkjuGnAPF)_{X{`&q!m
zcDOp3<|oy|&1AG-py7~dmahY|TA-5$Z~e10KAvN;{ePi_KlEC)UIYzc!%Uc>A;k3$
z+K$N=SM%14&IRSs4amB;I~z&Gp~gQit@%4gdRK2A!@iH8(zv5=2eSYas2;H|X|pH*
zilCLq9ilL%jrT*mNvyX!U9=kBX^pUzmUYE`p8%pg4_wUJ%T-Oor^HJ?0?c0 at -s<_@
zVg?-`41a~zJ0qv#gtf0&X7%t#AAQY>gqwPR9hQSs{IDFvO at GWf@%LbZ83fVYlwIGl
zCC&!w(QysWKv^eJETp4LfnvAWq_QJQ;1rI3rT(>^v`eKhm_gP^0vq1uFhYD3ro8Yi
z?IS>|eqIi&LfK953!8`YMf&!CZ4m$pK=r?}lW2E%e=2_zPZQ8wlbtt$4UZ;25!z)d
zrF%&VwcE_<*cH9%pm99?<h-&$c0T}TCD}g#{8x at w+*gFf_B?m9!2+f;Gf9wD3JAYA
z8+l_CB(({>$VttMP}=ik{n}6t<=H(Bi4wpC<L^0&PpaVNM8n^mH5hnC*qOj3I4<1S
z!Buf6IlX_+c%Nv<oGXI5yrlue%|c#N#b((x?I5ZdEF4Q9P3cKI0DN+r5vVuy4A~)u
z>MRE?A?ti4Oy-mJ3d3zNMu;Chu_zDLI#v_OXEygs<apIBNT^o}TIu-kVQy)T^e&>{
zdoSONQW)!{!f?|+&xk)a&g#d{zUl;Ea1O6p2rz%xhdt at Ie(SC0JxjDMbLwNa=59 at M
zh%(|^M^X>wcq<>#-Kv%pOocHbsRzu*D=x7)71Q*si9DJdS at kI&ZEWW(iLdMYEo;-h
zddqa(Sn>6OzCcp?XIS2dh0GSyBLktF)~+<UpM7>TC14VJxp-ma+YeG9;+cU65e?L>
zT<?EcFsgeD<dAe<#c~{!g<x at 9v%x}=n{Vx}V;O at fKioO~Y8Wtk6mJyK1s49W)CpAp
zbsr&DesOa1vWLY~N%)JtTVdNZI63P9#To%?5ZDK4aaptJ{7yjdW6;i8d*O=Bx*QFb
zj&tq?=&a^naU==EeeAk~6J`cmG}))#&2 at it4=DKgR}nsf5wPCag=W_3O0^GVUYFZI
zo|sJ=?x<RLQUJ)y71Ql4G&&dhJb*t&{ZN|+1fp*ES0KqieJOptAv^RMP`cxSEljH@
zCwzqhz_ReWaKMi?Xi_P2V^Un}b?5y(r|qks+FQ&IXU~k2i46wNfal?8aSks`H->+r
zBc6UGF71!`^rB3)5KJU~U{*oGZFCAfpO=_J4!KN+mna>!@itzz;r{@7 at eeZIV&Iz$
z=Jqi15_cdDS%~P-pQKGLEM;%zN9(9dSB{ascClT42N at Y18j|7|Xc)TY<pH|dj~SH8
zxNij2edq|CY?ywz=r0puL&f9>rTu?U;E_z>&=oz_U}1FRozq2G3hyXsR_f1C*NE=i
zWi>=}kg%wMLNAM6Ev;eeEWCYP{lzYJmB3KS#svni%xxdF7+k2<R5<&aL-Y!E;Z;*s
zGCcC@$J3*Pd!66=6j*5Rw}$ot at 3P}E=bRR=AutN_if)0foIFHc#V9yf=8%6T!ZKcv
zxMN4V1IH_!yJ4eb`HW)TQnMXfP-B-+{Eeziq$sMrjK=b(rWg2(xVzN~36LZ%4c`O^
z&cSg{hx at N&Z~j|Q1N=~Nb$#S=CE8$^9ac2W1JND at h;8DU{1s8l7cHR;)XT9J$+Q-?
zB*sHi$LCx3Q1w}c#cAERzX5;OhBvLNnh(c*YA>#8fxPS9b9%fNs{cHj7P!vUTKYR!
z#Sr1{V)VceH)bbFKlSX6n-pd9spj#klbK^h(#(0ctPfJLIHhW#^frHRad<Rl0}=5D
zr$tJL*wIMhK~Xz;rrmV$Qg^XrX%7aeBtvl)y^DI%2iHIMy6_T68ApG7)ew~B)!nme
zi7^xUWKIe*E)^5Rz+I(hEq2!C!Q3iB=({N$lYI@)TsWRuE>V+?F;Yh<J-f6ap#IL*
zSdo(k#et}l(&j&a(T;yP*IJs$DTTqhCa*hDf94(F;d0~Aj^Ape{!Yz_d at Bo5D3H&A
z7h<x4$R0lP at F`1M0E~Y^$(Nq%k)o55g8+N?bK at PcURHh>ehV96H6T_05ueWgH=E;8
zU{8OPtV|m*AiS}mTs4!}D3_>fRQ5&}s+_1&V(t#ur44Guy{k{yLQeB>)pcy`WKEOj
z6|l$|GrScjC1d%Qf6TD<L}a{h%#$*&;He?I(yZg;Y%+lUm;irndbFhbZ3pCyv%2UI
zu>89WXo`UA@%fZxHSa#h5I2Kzf&p2OvoXPQ9h}`iJ%W|F4X1NX#bFmt#51Z}0s?=j
z(ukLJk5jq5Z;rSzpK2u<l;X9<wRvpU8Tx*(d_v|gEla4<XPJ&0O|jtmcU^Tm$X`rP
zOLYc4?MR{i)8l`7yc!n>yIHYzi8SBTYrD*nON7zO-{ODnlDS~d5oruTT)4QT=(fey
zSaQc+vt`$U_BGoD{YnL{qHo+2GS1!)cG_ at zhCe1rS8!lEV&n}tAd|d=Y`BU*>HQe7
z1?~s7+zgFmJR2p+n at Tu6{RdiZ9H0y5#AkzB_eG!q#V>ywx{5|xLCtQQ_9Kwdo5b%V
zKQCU$lpzKqP1=U&TriRlH}5~p@&EmQDD;CTt|;~O=cAAQpes;14)$Lw at 6KF&gEbuj
zjzJg03nz6r9e$-|UmAREqu at wY-XFrL(CLH6^L_GL-R*_GX<n+30g4V;dAj>MeFB~r
z-32g$8<Bq-L<meQE{NX`^QM}1bt98^xF}14zV|lmC57$72xE1`fJ$)&hqG=@MS#OY
zX+HYf`EKdNPzKU1OuE0ceVr0uz8~%Oi%BuEGT9(T*Uds3f679Y7^3+LLs5d9>~n{G
z?fX+akxdd*Z5KQ`N16zM{%ojoeu~MndhtuOMxTG(@$#GH*9L|yDyX8P-$Ij_7tXz*
z)v1+~u_M{i!tSA7aii5v4J$lv7%+NA`Q at O6Hluoq^~aM({@gZRFj-}BB7G5r<lKH&
z>Xk4wQ3msS!EWb><$>^s2Mtq{DsS)M*?{zI;<0|r21oK&>yR+E^U at rGd!fn+yaz{V
z&!B&=$n85kZP9A<fHz~XqYr?AkfhQ`q6zvn`jWS1%W%8a at GcYy1~o!*+?DErxF;)t
z at tKx<LxReYC=4;BUW5s5tLMIZ=OqOUJ+`$Sy3>ZK2kshpsHZCST+SV~=-Mr&z$z#R
zDQD**emoOcQTF1dEbcaQ5_(t>qAr|U``3SO%_AgH2<pIsE=)uJG2yh~dU3&EG+sRn
zN^D<d!8AF01DrYAXM9YC#(4$a<5x9+lzc`a){awAu8P5CvULz0p%y-In>S72Cmlej
zB!Cp%S8KdJ2!Wcv9H)vu&351s3^M~~+Tl*!CJz4xD=}OXTI0~#MUDX6&)T&@1oeLc
z8GBz>&~L43v5eT2tKA6c_J{E;2JcR8Gqj)CVRgoEcq;8K*R9!@JYyni_K`WDIS6PZ
z{_~DUyFz?I$Fsi#jXTo$N6NlWvX{9vXLux)O4&)eh@;6`!3#;sNR7isAwlyquWeg^
ze&>z9^E?0KLle+%>K`bOaFqO`UwMC>2A^<RHAN&IbFVMS&1uAz at Rs0p`#4#Fm97J^
zqMCC7)0%P<K#K{|_|x*5gQ`QU9|&a)Ei=!^wkiAkAwAfEQ#Q{_u=EVHo#V3Xe^lQh
zZTd1i>K^6bTYgmy@}=hi6kJ*Aav)9bSk!r1s`!Zt_+X-*M;B~etFwg_wBCP9V!N#I
z|Ec7T-Lc8v%e&R$bQr4d5AfD+d883qMjYl_G10ev_8sJQs<I7~x>q+EwO<avNx=bi
zAoB1I+Cwk|&rMiiMj^vYSKcVk9wNBp&zC<tWc%nKi-1Ojb%bkq5QJf~mib%WAAC~v
zs8k8-Qyzf#pL>b(Xm?iGU_pPhpH;+7b`9#X&b1sI?+94yF4BNEfN_kGF8$Ldlh26u
zRgZ)bpxr1k-U#sh(`BCh{z{^NsL}bX$~j@(_CJ;;RLIj}o+YBgF*oD_gmU<?Is~Ou
z0Ua%A2lIyXjjjXBjb at +Toc(QtW;f5mryA$agv!%15}*#;+BB_5?sb3OZ-teRA`kLu
zvG*5&>3 at 9>vLr02L%A?APMQrH3sT}o88HG~TtPfTv9&!!Zs(yN&5xM7GmS0DXT?rV
z$4kr7V>fu#HSXn!?=`XmPrE=jsk|=(mxi*9^;SurE+_yuA54+b)cx3CxNjBcnLUAA
ztz!G2e>S41V9(?W#yEfd at zk$bTv-zErxL(uHtC}6RMu6w`2YeU29uBzDFoPhcx;W<
zJdmMdDv(ykh=3q0IH?CH#O)TzbDk}+sJK#rwN0}N!@&(7>U+6P03tD5((YTu&5cn^
zF?@1Bm77fS_0Oi*9y5lGk~uhjpPBcMv~TkOYx|^aZi^`;&TW5_o at Uh<f$+?TeLwz%
z#sU#O3 at tUm(z<VL;-J1DF at G<};LkbQ0<oh29RP4Smc*qEj{c;~eJ|KwVB<YGdxEZi
zHYsw at g4t+6jl!q|EjX<X0NsnA+}gC?C*>Io>G)i0-$>1BH|e#<ouupD at Z*1m3M`w;
z8p%XJCWr=((N2HEUU9H6nPu_#O!n~#A(5*HmFNd?t|ss-J~h|rngaM3c5D{=0vky6
zD<heS+(VEl4-4|UWY^Dz55)1nvnJ00R<x{9f-{gKjvAPPyRPfPAUFJJ*~a|D!_`59
z*Vt2ZDz!nN*i at 2K<rx+f4$vjf1Ob;v_n2Pj4kIwe>ED0ijQ8nCPxwDv9%d6>OFfd?
zMvFEc4>3V_Gz5eCS61$H9K=)2K2l at wL$)OpKk<K?@glg04|$=w*o1HC_oqh~yCQe&
z$n-}~Sw$nCwAT%2{9=E;ZD%&v2XwxrP{y at 32U6*QYl)#P?>0v at R1+Sv5gv3HogfcW
zXIe~_<7$7ccje)%`j~2lk-I8Z-#4Zm=ih2HoxBp<=W6<Gz4a?X#*ny at Uy+*Q&B^Sd
zIl9%TOOv<!)SB&Jdk)Ndb4UcO9*-I#U}F7si}!w~wtC?RQ+YIV&9HK`rw<Lj<r^g~
ztwZif*hA}P4>=#fhWHK~oCUA%aoZu==HO~-A_jj0;W1S<DJR0ox+Gd6<z#kc+IU>p
zAVp5p!R9WKik}3&>0pdv$a)qi;)yBDq$B$epqag<oCSxEy_4mcv_*$l(t<q3gEqh3
zg)57DlZ}a}FiEvia8WKZko?yyz}*lQEbNZ&x$Hi<HV6fI${&v5uyiQyE2yEH2(ov?
zBfoz`q{qD*nvEev>;JjcMlG;9yT;Xeq9W<X`B*{<b at Zu|BE3nBB=gV0Pz$~%c9#dw
zGWg48l^vS+t;dA0<Xk(+CJwA`saJ!gn6(BKoiit72tJg?_MO-<!R=M6$g4LtT)oEG
zEC{(rhJK at B1FDS1Xi(d_rxb>wB|g#s*fW1jM`2Oq3d7&}uy4cHs_B?0&e{C5vEkw-
zbM6XJ{Ri*bmm!?IFvR}I+<Uj;tkWx4c*=ff!jru+UzpS0sVM`QJ%wjyEL!B79ve=$
zB7gtx#RS&g2Zd(U*&?A*?>%pka$p?3lTSL-WB1NbH@&^a?~=-4%2N7kL$XSuW<q~P
ztm%c><Xk_ujNQ74OsU_pCt<*@ve7CN4VkG3kCi1#<aJUI1rvF6Nw3g-xX46k6iIYF
z54hb&Aa&$~Z8SP}1=fzcf{*8SBo&#4k?#`{E54I0z<<(c(=Xhn|6+6X-1Q~I2muz4
zG2^QH&8af~-ndbceel6k%PzVbGfRIAZjXZyJP>8gArr2vg{W}9;cns}daM_A<ALlN
zIB_Ndz(aF6_Xsh~wuf`avw^;Sx`r+dj&$am72p*7M at Cxf%U6Dr7IfUjxj}SAXf|t=
zXg{CSGiPE73Tngtk8Bs^Qq8VcHFV6|)_;qZ-0!n(l<q>3Jf{>}X;&2|<pzHc84sMn
zUYEp0c+5omr2J0_tt+8Y(O0If4kRd`w<>fDLQ-t8gi|lb3YHkNK$spd#sXL$ry*XK
zAr|7cI>l}(Vx*uXlU*kh(P><u@@ci*aps=9*V17Ksdv{G6X`~{hod8ws3$^#yysI-
z&W8QZ;~Y_SU=Dy at wrGtXp}c>@`mFA=jhQI}rrurj!8h7<o8$eYvpQ`YHkcKn(DoHb
z{VB?gM^>GRgN#D99EXWMCd_7Mz~C~nah#K;$YspH22558_z0z~7v$5A%T;?<wIu5f
zYS&3r7KS)jLORAtF8_}%a8xhk5N)h}4T;#f#g9 at yF7W=m5&QB3z>t3dZ<;(EiUBh?
z2Y0HI>^<pUuzf-gE!u3>w|K=TFRemn&lAi%@XYrC!F2(m;c?O|kIHPl+)pDoXpUGq
z=^sbKT at esQ|5*SJUU%ym<5;tKzN%|80`Y|8aEb$ZM7F+MdCi$C<TJY3p5fl6_CyYT
z>0u;R6yYTnB}`o=+c|##oIP8LsvgQ07`l9a3YUS4x at sc){AHu&(BKD3Uqnx}aZbZI
zAjuKo$Hu(tRJmDRbvL=UddKaqn5n*M>I7!;?LNE5Nd1`A*s$IL0EN38-eskN1-PjQ
z%+^iQUBs-Q03}X6rUohj>V at a-1_igZIMj(+UMu0lmj1xvL2rLM|L)^$W~Po{e5A5e
z(%NwWM-elqKbjzg8KkNy7~b10YDRgx*v%b8nr~F5I(WiL0}l%lLzV?CuT;}EGZbaW
z4#jm48=(!hgILH(@Je*jgQLUIGA<GZhuk{L9+((Cc)yKT3}&@G{KlXsG3q1U1guCb
za{)c5j!RN9)_{NW=R(^V%ss%~VA9?6)GI*jlT+vR(C9&&2d-R1!&I)>PVZq>UAuJ7
zUqe;}s*1DL<r69dCaBDC&43Zrl=iCV)26mB{hVbIYbsobpLz%<RvL!bC9GGL%oDJ(
zFx=wSD1Yh!$&}8ads^}&AC8St2PZb7^hTbHyK*V^7chTWjN8e^a0pX&Jl~z7r`Hvt
zbMzfyIEROFrjlRs_=R{!i_32~S=WE at M5tyo9I$fGR?<)vhygGE8TiVcWtQYYlCT+r
za9p%Jj8W$Avs#gqWcwiEPrCN%%cdFTuK!sZEY<GjBJ?*jW*47%idv_J?6Fs(q(L6U
zz=O>4w~T*?<0spmxM<a(jnn1~2h{*$KD~Yos7)UsyS4tl!G|xC?Xjq>FlTit#EU!n
zy<T(%;=(p at uul|qw4*hWU9eDT at Ja&StB9cDjo5XylRsq$*2ZqKRMF&d%x_QD at Nb?A
zI4>ariqbqWKt)V*Gjn8cyr=T%K#*n?K970c?@)iwPh(R$0FKk9S3OqZ-K{PR(3Q37
zNUQL?R)huB8SvRzjT-R4#5-)%Gh<`=qB6q}WV8VwA9)NTreJ}q3lmDbe#e0bG93?3
z;^k2_DCUfZ3G0%_Q at w>U8IhZgu6{F!CaR`};fQ<Zp_y;5Su&FGxk2=dl8)+`k{So#
zRMmgCmq5?<u^V-c2Per1^gQ-#!-d8Sw*XX&?KDU)l$#97FbYG;cSmR21?1u9KMS|<
z(m{9Mxr-GwY)CkPIX`&Z3G)H5^?SZ|u at rLro^ooo2vE*$NEjMQ?x+`vmhUYr=j_oR
z2<pjOp`b_t&X%TwHhrG%xp}~QyT}P6WSW0%M>-`i9S#F~KGTMI$_P3Wqq9e&<fX1D
z3e;dA1bu?vRv^VElQ=Q-s__)}Yxep#H8Z3p<$X~RIR5G!2E)XQ0o)U}>W>PcZHd4F
z;c6s%uR!1xd3j6k at 7GXKLbYsK5~&;Rb{>7@;E<1R1U=xJUtZyC^ncb#G1X7*%_Dz_
z=(^z~tTnelWu<VoIvNNT at quwD2T$mQIbw?#%@c9%bsXPcaYv->hZlpJz>#SRcoI;Y
z?3>&`HUIo1n6K0(5_i;A=iwAf<)c=LKF*>c-d%xipzo2>Uiue(D8&@G8J%xeSpxTv
z_1E;AD}L|1J1rsb$huu(j%VfM`LBO!pCQ3d74bwdT6G`@`zK#q3(L8dEQg`-QlU+H
zl4E<#x)MX|*&5O0=(<Ad9Tun;0qsIQ0<;8stjVe#p!=nr#7dNz75kpb={|LKTZMZs
z6g6QAlrt6QDuRWEv$%olKkJ>HUo&13A=7$a647_V9y8kYikgqPp!4Ulg&=?Q`}9MW
zj-DSbOxwz=ZD4H&=;rGRUG!GvYATzkoWkla0p|Q3EVVswSrB`|hHf1vR(|O>K>Do%
zR8JmMiJtGKgOv?v$Huq-yoPKf^4gyu%dnHTDRs1;I2NXH^oa{XPvl33EPXAh>PGW|
z8_#mIS`-N<DPDQPBkS8!zL$Tv`TH*s(&*%OX2t8(wkKVh!g+Rpfj9~3Jn{Kw3T{&6
zyr<c&YdPo&u`Ih^p#%l`{AR!T+XMgtfE^}h5kE`^Z+@!EXHCH3`@JUuoH3#71xEOP
zoLPH!`C%rCyGddZ+J$6KTTzqo5U^2My+nU}HV_$f=FX8AC$%y?HDZ5qC at B$9?3S%y
zsS*6wPy*-R2cZYVKMIoH_!&?E+(`Cf0iM0&+&4;p03iri$PcN4>-thuh8i4WQGa;m
z2YOsb{DcNr%Yqsp$dr-g?i${jZOvp~f;kf=Mko>I4+!CeyeBcykGnqtQ^4w&;#9)7
zs(Tn403%mm{{`GoPY8bsLGvS6CqGrEXRF>@1ZcV2z`ida4W#qv=?m-!{tVu>J2Gm>
z at qR;c;bE^H(2igq!;Pvwx}EE{7dQ6nSI88HTnkUa=Aylgq=X8qaU`WO633ou><}AJ
zBASM%*^I_I8RC(a9CT4UxZ|fwsK9gkk<D3ChyaKspUq$3U_pNdMfVso**4*T at 7Xh3
z;yB5o-uQuzojU#6jl9$i&1}Wu5t(ezb*ARC06sH5vZv2f(_nuS*XOhQS-!2GpJdr6
z*S#>3cL$y7E@><NVZuI!gHw0N#XRj!XKy_<{I|B<6mY+_fO&TmL+3xTDlADH7(@&6
zT*DF)9X0yP+O>a$G|FAo)JwAYCwe{H?%Mt~Z`o!*6H#qcT2e!X4(g&CYq-Vq?I*Bc
z?}{coZLS(MWaaPr&}~eS0Z2wbKLLnK5)&VZ!`S}WeVKWBYr6axS90Cw%K!L>O+b^o
z`Yj}wdtYpBVKM>%f;Ot9jz(nS4vxxK>QcQWrgmQDX*z$T)uV3+pK8`6Lk-3n-A9)k
zqv?J%ThaDbgF{g@*5;Rs@@4X33_wYm%2(sXQO!Ak{IU-sGfNQPN=}CWx|YHFk$}(D
zEK7(QMden}p<REX8}-FtzHYE^P=|xbBZWw>YY*flFbdL%7$BP`mL3f2)Nz0SdTX-`
zR&XRly?1|rN4Rhbo(<8a`*0IK^o)P*OItc7=jJ(nXsgk|5kfKH<!IVC^w<pThTS_(
zxJTX;kLQmL+y5a(zV$;?JNFu|vX}HXiT(K-g31|u36e9RC0gd!FXc~{JP;0@$xOev
ztj44(E$Ta|Xsv?L7YN-ugAGkmy|Z=NkXM~>7(0I`F%Ja`RCfL$+qAk6;GfQPoB{k<
zI;R$)y?lnZXw)1H8eyp$1Yt6`;&kl&ylm%bG*R)2M+G0|Mz>})Bt%N(wAfl7%zUyr
z(~^9ze5SsNn8c3`NdZh)Srq#PR`<ocy`WS|V|b4pE_S8o>-%NO7=XOOU6eh&#Zc2`
zT)BVtgIao*K35?Kcnl at u<@n3e*l5XXI`H6Anz?ld2#f*^L at Xf#`5D8pTsZMPsXsHe
zlb<j=uQi8Q<tL(bdX){fxa*k^fHH4uJ3Y|jrGThoA%e}2FhFg39E94Tt)%eFzEn?q
z1GpET%IN_ChXuMZjS)d;(<$FQD3vG at 6XSoK1d~e6WA8?yNh}^JDu)jNGb1Y%4kr-}
z-yJTJEs2~U<s0q7PFyd$Q`%LY8FbE~gi`lW46hY}mfk1MTMT-2FMdGnzeGpig4tA=
zI^locH_ac;6y0OVO&&qZft3(G$Dzuq^~tHI`z=g79A&P=7Z?jCuh~+Kbu^5tvekdp
z?2F(rk5u-fCP9&7N3j_vzGcsmRuu-%QR{OF3vh?Lka$7vRrDBlDEv4dS{MhO*RX~a
ztpygbTzz}Qm&w^oP{vIbU>0KEZu#MZj85xp_XBwtDtSAn?P}YKlEG4 at A7!L&!yMVb
zNG?7Vj;O4muU~}$mw&WoG2TLeAgO<Sl8e_u72OF%rZqg<F<OA-cb1amPyb*T!9SHl
zg|1LH at j1~ukH_3{1Y@{S6vDfsIJJ!O^VaWv(w at ZM5HOVr=s?b#wj^g4`{*W+I5%f^
z-dsMtAcT61bSXjo9F}eaL8moh2~FwBZYN4^54e{#mz6zJJ+Mq{y4nYZTy}q`f6dpj
z(n9bgeXM@@Q&fq{1N|x))71DTwPJ0HQ+3~D%&&=8kG4710tZWL4z-mpz}#j$<A$-5
z*N at _77OA2GHp{+PJMq(=P=p4iU_-JSP?ZQ7&fs9|0)=n-i|;(-0j<%Xb&xlYE^^y%
zf_iKgovo7a-t>FJ&+|<R60CpmSNw(}M<oATAcj0shNzJ&Ly>qAC9%J~eyIO%0oYFw
zdu~f{$M$%R`UL!7l<R|-WNZDd7Q4Z2!=YBCDfi|;lKsu6-o9yy;KLLP+HR!uKM?wY
zZtZg7$VnOc?0+)%&-9hVKJwISn&k`|+7x7lG#28Z98j5wAI`WCnVx^7Q5~Ke-PwN5
z`)_BX{SWCA9+SH2ZV{Y(QapmS5u%c&=vOJEyuh=-%z`1e-<vhzHO&7^O#}<bZYn6<
zKF}U5MS!2~PZw#QD9p6115b)xtlRk-T0_~ak(HTx1GN%P_x?10q|6!}W~~02Gf*0X
z!EyunQ>znTL^42B at Ed=(Rn5LVC&Fak*J*gvx6dvPccBI&j^3Vwu2rRCIkE*uyy|Vc
zN}Z?G%KRF3BO*Fw>8ILgH0Vc}=~K9Q0TqRk%G0=Z3pe<yCTfl9Mv03P0k&FmLQNf$
z5v+kuO)yW#IK`&6Mr1_%E6y#8^1eY3%yZCl$*b)|4X687KG=T(RgGV$XMdxg5LmIr
zkRp__(^emgl{`~F)-v6g-0V6q#;Q9(d-_ZkOkbH_<yeTEpHq8B-E{dbVrA&&_29Hd
zmUi~qRKMLX)$YIV$#6`$%FjMAY1al65XS`z)_0h&TEt8wTI)I$C{p4yn5`!6G)$5S
zIESx%x4$HW{`!9lG-lSl?;hXe(GKsC at pF%*9f(3(`eC;6#N_9}#B5Jz;g$T-RdW9K
z`z2sUbQ~O^BBJgO=jjL5>4g}ECU<daDx$a#8Q>~{y2P3&GF%7p_cazlc9fvNsJtz-
z7=D{CHRtnU&y>3tFdDZ{LtwKFA*`@j!g2|KA`wz#ta5*ZiNV(w9MCBlZ8gA!=O>KB
zxVjmHT41I4z&vY%T*NhtjiN?q5)N_g$kbaT_5PZ!#SlTwP@>H9S3|;vOG|Egxy^Xg
z`5gm1s;flpiS2cIa5pAo=5L-oB_px(q&j_<a54V70C`28!XjwX1G+YrmCuy3lBkUN
z_Nls!Pf~ww-cx)i at dV4c9j7$3GoVT(w{TD${%NF)3GILFhwPcmP=l~>uWA!<U*#jM
zC~7$AFr%_KcfM;+8r9FsJ+<Q^KS=`B3iCK-_7qQyj`dGm6ty3+Xj$kpv^W*?A1v>`
z<|R1R4E#7?4M|X}U65}AeN}ZNa0c6B2|ibmhM9ks)@Ki_AEvq{2KUHcLW;*g<A+Bq
zZN8vkdfxX5+Xz+AKh;!MfpZd4B=v)V1m<Fh3^tLCUq|YMcD3qh=PykSPs4Mw20w5!
zffIBy4q~$<5Mwu-{mcUi?~Y3c#nttPcov}MPmy#I4=2O?@@|P8ZQ~FWOY<NjQ}%v+
z5d?pgIeREM3AKW$#Q}>M65wZa*{<EP&xT6 at Apxf{(rbcWv`7I<F4+d^e?nt}%Z3Em
zED8Z=q7ltUL%mX at A}ur!;xF{<a`h6IPr|L<Q={sbW&lzV=QD0T-)H&tj;B_jrn*?0
zc(dzZn)zOqCKaR*NV(Go=bg$9QRpo?0=9oL-#UUMh?!nJ3bKu*?O|*>vjtQr(AfIR
zbOC0t<XnW%ZqNu!Vr}2ZJuAW)c#P#*E(St at b7r$1BEd-8Wk^4VzU*Gk)*BclyHsaa
zY)y{viGqnl!~*OO-_1&uKmVq6nGIQTIx^Uz_g2DASkveFizTr#Z^a-H#VmEGC}4l%
zNCG4}63H(+VfgfLa(T*YuEp^X+(T0Q>cy>CVocjI;>&VE;j^7&2eMCLD_wtO$ng}W
zG7=qw@^V?|Z=D#QcWKvN)~|esq^f}cEZv|*QhWJa+~T-LRlSA0DUtK+o&J!#hkaYB
zs%=YM*79(;%0F%Kx69Acy&=JSJ-~lScPQ&L;b^h4wvHIlNjb)#;NJ9)ht}KX(+;EW
zbn=IjcNqBdY*?~>&7Jm2%XgR8+?YleW6LNg2>nH+pb#p<BKQ at p6Ri?fNU0=j3la!#
zzL&;E4@|N~x>ef0sp*3sPl?sM=?2|J{*Yo{Yn7*v8Knylow3euFFaEt^;&-?PtMkb
zfY#_#a21_BS1|1M9o|s>+`*7#q^aT7mRAB|;^nnW_D_4(3niXB%EczJD`1|pm7F5s
zU>(gMPzyO6Z<4Es`Q}*bMaW=D^~8+vrxlq1t6c{$ah*>vS$%a+`rpSH=Bst?f#M1P
z*HmY{>|MkW%<vmwem92)7Z!i%uf9YbwIe`2hRbObny2H)V#os<e4g(mn-y2$A*?e~
zy`U#=vIGnIEnnnVBgyi2opPIe*%(^G%XBazOKR)OK4BMJdn*z4sPV6m>va6*oE7yJ
zg`0*SBuAnAg`$`M(<b{di5xr*=1qA(yCgTE);Q%Mwn8D1b=~CM7qoxVbTT8+4!JWb
z^<n;^P%hd8wBLQYOB*&pn4KMi-NOKrWO&Cc$`8;zanc&OcbD$XwUHLcPqexI!k^zb
zvPS8F&mn9RvphnNhR(9a;qRw&Al;MLli3}MXkmg%)WU at I_S;~?E#Eu710nKGTC9MQ
zz6Pfk&fFTevU}D at B3^&CK<DctoGH8Qld2sBESMW*yjHyvn0JTw)Y8p&6U%CXrcxDl
zaAOcG*V{?*#BNEZ={rXnGhk?lOF*bWA*vuD#h{bEIb?w!z&IQ?e<%|yH8FVbAsNL|
zEydLeg)=H*JIm2Iw$&28&u=$e=uB7_9T3h44(R-`z#dfSas7X(3VRc>ouP(W^?2|Q
z8`Q_eMQb#~<pd40LwEMIKoAsJx{%1gblp7wNmr>|;rNIkFQda(Ler7;$E+RR_{mpm
zE9Sf}5UPf2j#)N)j%Y^l$HURSVk61k>Ek0vjEZEQsCZu3?9o1?BvG@=?CsidOy4d^
zl?SUaDugx7!aIMn_~tO%l7}f%IEt%XFVlO#X)w9%X$ee(l+m&BY+3?*U1H$2mHkF%
zrgrP~K-M`Bh9a8_#_9KWba($#z8GvgRg<vC|0NRQHhhrB59NJRC6dI9pB5iSN8;X2
zI at jQtdi#UEF1+?tY#{VD{m~y;E-M#*Ug5}%O%&cgRepbDXdE2SCIegbI_83;{S7IC
z74zi($l5$dV5~#e&?eVW0wa3BmbB2~xvH&hMhB(L_g&Ttx$uYMlJ)CuU9A}-$P7*q
zb)?i((j2Dj&_T};yfVQ>P^H3*<|b+ZkVgC2j&aqLQmHvmvQw{*6}e&8m@!3SjJU^F
zO_<^bIiY{WC^%|F$7o;+{U!kKUb_;Y76!ilFf4~*4Y0`mp3FfFZddWZYDRWjYWW8=
zLX=?dF5^MJWT^VgTy0;-X at T8(S!w!fc_f#mZyiRjBQj|;LAiF?S#ZxY!hslNQ6}~g
zEg*o|<?Od?!Uy>$@h-J>#0o7`6oE@~Hn~nh8Et<Eu&Z4ssdz_sq?;K7`qh|`=$P&Z
zDCRBJ@>V<_Bx2_{nYZW%6g(MtH04hJhvU7rT%7B17bu66)!5vtYo{U9hLO1+Lu8^w
zMMQ1?PNIuR8Yeos_6NiHqkCnyMzQFkMW+rY11*M&dc3}^_EKz3lHvKse#9;==PZ)X
zQQ?0w>m}v9SB-TbD}|c_u*fB5R&pg?-M}mJ<Qjdt_I!J3{ETp7&+WOhdbEY-)(Tmw
zo~UxU8&fWFK~m8c0>@)5#Vh+GACjDvngtdMDz!d4qZrEpL19ezT381 at r?x#3BsY53
zRX`b(Z<e{6e*_kCFK;=_G$uHfxW_|Iaru9NJ^pF;!)68d=8*>dM<PZMYeHrxYa?R7
zoAhKa_9mWwi2<n4cqqW-zBSv{C(u2x$$~|UCsA@>abCu`u7LjWn#6i|#Evqw#?uR~
z<?o*cAq*l${^yHTS++7j+0*)fiYD>-^FOYCc~#WD!|t~+q5t0&H`^@6WNZaN_@;kE
zbNnGxov2GjTnE>pxxdR7%fv8a4iL1gV)WA=`#D$W`}z8=X-IlWdI|@uUcO at wzhJ`v
zct}KnaF}r<o6uV@$O&j!j98Va4@>wIgogUP$aM&qR-TgX*`IG&>yChKgBet}xA{F!
znH935+v9{T3A$WuxtuJ~EZUl_R&jr)#h`UL)skBDYa9PYnqZ03A$Co-4M}ayR!&d*
z-*pq3^x)1%#xFegtg3_k_~0F<J#x6I{=e8*pIoABXWh9sj<aJOg(H|&eu>@)+Su4K
z7DWsoh+0HWJ9*B=y4+$3VKj0t2TQ2nP=p(dG7$tVcL5xJ(F2^E>Da75IXi!Jgz?U$
zaU(Gl#UTK5&)opcE at Cdi7!#>*KiCQoyDz!`aRtGN99f=3o5Z!hX$rrLnXz_jrxP8(
z_P9XA?p at 4~EtO>g!a62PYcyC9A_a16+aTV7UtEQR94{$c at bZaqnlMw96lC3L3e{E=
z#+HccY`#aDy8cB!-yUTd^)P?WkBDi?Kd=@#*}HT)@2LL?Hi}hsYFHJHvup7_<Ma4I
zQ;&Kc!%ssyI~PPwm9xJf&LC-RlroE&f3rcvYan2n5VuqG-4?z0ey<ux$MCZxGTE)z
zrXcz*#wwNDxo3tU`y)u!Q9e2M4C))vKZ*Lne+ML&wv>%ybjZOCkB5Jj5oQwJ%XuBE
z=ak3lW!!{p(x~ixBVa-;TtBEt)T~$EES-{@$6%HdvjiANMaeSoqG$=k$Yvkl7x^EM
zET3AdR!V)S`@yh;Y2ajIY2_67MN|^AToZiUQ!wm|sR5na<rG;OoRXG2$%tk<4M}?z
zI`ZH!;_o*Ob1Y!nTf2XW`n2}t1%GSrnGHx at QjKkfFFGSw*jUEiV>7Z1dSCiMrl+iE
zjFec$H98j`m*;>TC$`BY3&kXMn31(OD3ZHO!|9p3_d$$0b*7Gz*=5m}&y*j+%hG*J
zs7iwd$#?tednsSwAI%O~JBVSTq|=C)%R(FVzMdB|iY@`CLM4Bz9ghtYauV@)@o<Ub
z)AHr|_bXr#BEaapw90j%I*V4##kk{98JG|DrnujP)gq5W-VnCqWkhJnU+ToLzwRB8
zsA7j`$oQmm`Hk*1YZ>0SI&PXG at Kh0d&}$0G16 at q`p at 3|G!It0Z$+|lsCsP*#lQE=O
zy$p_O*-PZGzjJ>^q2d!Sr5>jvlO*ADtz|rY^0xlb!m9EZ@{ugqK1d;9Mh|kEnwH1;
zs#}l%h8|ZLA#?+ZBb$GI)|mrrm23RRJlOIIEV(JZoMv?hE51!cwJqxxnPR9#+)(?i
zN`+L0)FcTBP==<=kKoK}{82-C+Pbf8gQMl5Glu&CJ>-83Wg(;#(Y+&5{esMv5+GRi
z^AKtcf$kAm*^nq at M~3;?Y1pfF6u7Y@&^U10Y!Bn(CwI8RC1wQ~@(1S-db`qPQN21h
z{_`}6n6am7WWyiec at d6SV_PbkuSu)@t?Hp&>>m7o3PxT38ds=EWI+{{C`2S6k at kN7
zN6WtJdoF*xvpww=sOQ(PP at mPJG-5&l<#ztFm#c-1FpXxMYc+GLTC9qGegMkp*usG!
zx=4{MH7g at JKHw^PufdSR@;O at y(x5h*IP>^Z&CVUHoIjNO-}EnLx#A%FFUv}q(Bo4{
zW}+l=&p7~wV%(L#-?zgvCM!3PwL9-kGQ~fG&jWvo)-yNM5$m<FAGJcVN6F3<G!xYj
zNMAxr`^y%q{x3k-RTmZUJps5c75cEJaRy?H;RYmM?#)%(t2F2K$I%cjkdaU>DW%_I
z at aEFHcTsfvdQ)}+&78tnMlK!Q6vc7bdLXbW4^K(G2YV<rsc>!}z3-(rx7jy*$S?nz
zuOfe>XmcQ)gFQUmz9jXT7I`F6@}_{P3p={B3VBDPOX&(w7~}@rqGl8fSfQn&3zu<F
z`Q1_t>~zXB-+UYS2dd`Y7t*}Ln4c2b?O0ORSfI`!W`c$tHU_D}gX{`xN}~CMy5_&u
zx*__!r_x0HC7#@l72|*a+l+U3GXUt}0d0Q~YZb;;(tfmL<|QgyL*C7k&P3o5)i+BY
z)ti#a?n3~rx?UZ~DlGJYTm;5fXegn$W&1(NFcj&u_ZuRF50K<BhWN>Fd&#HqL@?|O
zg6}o~A`)M6M6PedE6~Zx^BuvsrKdZtHe8GqxVNg&Evz90$lpW=&hW%Ch$vhc6J~#n
z(BxqYDm5!!#e}ZDGP6DgitqH-)qag7b19KUWMki<5VY-*&+yKu*D5^oqay3~uD9f}
z%XzgmoC(=Mrh-JoJxE?>5(sxlVI?t&`qoJ7xBAU&(nGdb`Y(aFx~ijPwK2x8m%?cc
zIHH3^IM7`&j%t>`6YSVu&vz9NV~~G;=a_=GzozI5s1h|)9N+Cuh#5E^gAv9xh3$pE
z0#K|7PE*oaM<JU<_b(|5rAz-OaFky>_=x%%AT;oWh)P9mXBlASN*17QU~J7~=<9#X
zmQhcMYddhwjdIOr(msDR0qv+uo5M@&Bb-R-G^-W+SBOTSN-9oZ2|P;_jQ4-GL78V!
zJzH^=iCh(rTgZhnuP0m+vQ1)-tFT!aOgh!@QE6VVZuOx;RO?xdK5(AaGu*ui-z=t1
zU$4*SRW1RWO=9$x{ps{0Jsxxh%!9%gV?OcW!7gG<ypWkbJ!dOABj)h?42uJN!pY&&
zer8<pKI3kB^~4S}tm<rUN(g^4*mr1Z_HaANwqE1*V9HSV#lZ^8G-RXSZKP-A*3~8O
zT}boZ{`*HJF_#?<6F#yXqw{rd4%OzeLk;q10D%4CiNt}%2d)t*H8@;wL9zPjq%U>n
z;HOJ+83&m&3dCPQJ9arxf(rMLVS>25MCG8}#bIpF<}-fh)s#T?+%|u+A7qyR{qjse
z*gZvA8d6fP{Yyk!fbK7}=&gPpC at L;p9BV`%?XH5ngi2bKLLI)!Z|sxfZvehFTCB8D
zm)&;?H`J0=WD1pn=o)r2jK44p4jo%s?MX1pfg33drbD{DU$4w#c=u1I=sy`dPspWF
z!~uxan!snRpvM1BhTnfg9BMfA!iN+O#;3>aN%7gk3b~*n_8vA)(wQ`PWHE@!c3u|x
zff=VW7MP1{;r(LI-I^bK<pO~UcGxM;0fxxjKkwf}az{Ijh~5CQBSrVg(~-SP>g-vC
zGy;2h8x*A|rY3$KCKG3ZWu at Sp9j}R8gjs?J?Wys&`QBh0)S`bMr}?OZH`>vp?64j~
zr=R{ems~iHys)Sz)6?_oT_8cvE1sY+KYA_;ePOg|ng>tbB_$0!?I+e2+f*QPO+l)Z
zTo%CFO_PapVl%E{Cvo=z!G at g(nFD=gCz?%B)Wd6i=DVFmjL!7^#SS3WBvBCd$}s0)
zwiLveG-d(l##n#*K7~Z)$Tck&fBA4NQPeY>4oE>AFpe}Hg_{k0 at Q5=x+Y-GCqVik5
z(TpZmWnV~}yP_YkVsHGAYc*<l&lq^fs5?2no!)Nw5uVv~vj89tJy<53BOTKPp&*~!
z at KB#*IR*BBs+%;_gRkHoU4tCE`!<(0;2M6UGsBm01*LzKA*GL&ff9lgxMq}Q%B(t&
z4(jBQn at n}c05lU(e&}g8w72m-E!x{>%U(K}u&vz{V39<Xm{fu``SO?Jkp^422|NE?
z$b(+@!_dTD3Nb?p5wEsZQbmy2zXjn_ojQT=?s8Pf*VJ5ej=VU^(o&|<KU+B~Z5|O3
zfGN51`;LEqJ(YWxmfG|AXmqwXj6h)*G-1;1Vr8Bstmh20{S4yXN<1iquLn4>=yh*i
zT8kDRybMOHk0 at v4h<s(cs9?czF>_6ADq^KWbqHn(b|9YBUA;0uBZ55oC!EV26B=*m
z^*=IBXgosj7?6a9^Ato-)fzZoIr<P+fNbP!L1=$B7wzRgYYA2`ULH3<?rV&CkTq!o
zI3p*rKI<3L35PcAp!-v6J$>!=@Sz~Ku!E>YpJpCn%5Xz1&yee`1L<h;`<#qX%3K4(
zLmIm|bw7TxB(t at UF@#t(JEfE-2=F7RW_9Uy8vKmIkWtG2j9 at I|VTtSj&uTHg?Ur;D
zM67>@ppSJm_iHv3E}r~|K+T3KaQjh31)cPo-mzM&Hxc;>okq(dY(VC8 at wQa74O6OM
zY6!wqx2)3WS-qYw1U{+TO(tQ-GFvTYUbc?*2fL?o=<w52edra$f+1*byiJ+O4C;tw
zu#j7se72k1sovi at ebj$r9WS8ANQN<%{$_vh)dIN*7}?aaV>>n0-%SEYs3e_{4bbLk
zTmW8R9xdgxN^CzsG2JUw(s4=r127pqNO{`ep*esIWXj{N2ku##7lmV3z(pLX6YmrC
z%va0*HxDQJ(lMpqd}@v`D0fso9YB(TQ{JuDXweKPE#gg;K1JkMxh=^F1!vkkxaxmz
z at iW710deR65cEr;jvl}Wrh_qA$df;WHbL*<p&38awW5d(_pQxmWe%1WX!zkIy_BB>
z%KYRQHNNDd{+_M8bfw8hhb$Z04h!0xXZ_y7b;99jAbBK7NT_V&i*{FTCrV~VBiEI$
z9O3CkQ^+HswPK^uY9g1JVqduSmH>bAMj_fov}^hhLfqv!(10Fb(44<i3n_^5L}#x9
z`gI)%SWCnI+bi&dYnyz`ZI4ytJNexhoN6}&U#(`vF4*!p2YRM>RQh3U!ew{|#Hh~*
zz0q%_j(O!};cKEU1o`o5W6K_U7d)aw59$%gI#-(}Y)ZJ7;;SVCQTI&anD>7_g!@4)
zK3;JWtplWDLVVRZI#Fts&+qOG0W}YlrhzzXmRi6+FI{jX*ySOM2+pI17`M}hnRCTB
zHgw<#@+d1x&ke?V1_N at RRdft3`SiIhspB3-Zh+Vu9>?K)bJBhmFqF>@*Uf-IJ>;D|
zegPkYG}&ZheQgZcxzE~clDU7+CJaMON{wg3gErd7q`;*6e$}h_>1{`&AIwDj8WSKc
zoi}~+>b}6;{U{S?=r{hq3qLm(?u;M2r)UJ+27ixJGNMV~+5>lt5Q!<0wOg}NDG at 3u
zzq;CWjz#fsAPhtmMLqxZ9rmk?irT1Kp=p^UJt*^p+n#`TtnkH7yaj(ix=@=_lziNS
zIDfGSf7Vx~6lY`eyEp-#$|)qi%#4;5HnL~=B at Ky*28Pw_9Blo<$6ORu+v|Wb-n$@F
zCwXgc$W~tEa_R$5zi*6RIe{b7jk!3U$aWQp66DLqX0}|4OkeCc=csS3+YraF`g9?(
z%>mcPavT>a83Fs-vG9LFXQ1#ff;*>^>gztg>cEOVCM~ma?wmB<Y_Qq6AU&r>u(-e|
z;q7qj2>iG~*NSe9MEl#-ya at RuFQKbBC_SBvsWizDYe~pp%aNY`RCHQ4s2KAifhm6-
zf|4PQxmaw?Ewv>|iRtueHj4N3ya>fS7tIZ!!aXhvT-dG;^2C4N{!>64zVO!h*Wk6(
z1V2m7tH3a{n^oj~w}lB?q=-#!Mvpjn?PTw9Q?T<Fb0b2uRwYX4o~YGkjNK+Q9{f=s
zU>{mNAdr0%;l(*iEA&wX{Q*2X#U$veaT*Xt()Us*gQdk3$a0N<hAfb{bfJ{Sf-s^E
zh*HEpn<r~NAv1q1sT=q6ca8ZDY}is=#^JdUQ-kht9$E={puWjMVCa%`j_TE9L&1^L
zJ-aq+i0Ys72C>ph3V- at 7sL9T}`fzES$g}+ECeSSxn&(XbOSsSXiff3LsDjJUNd`UG
zG5G)*8`sRQGG+1Wl+;)iU`z{dq8SamoE^o0yT&e)jmv-dnR}>!T|PIG9Th|Ts0Lml
z|0mGz77clcL_d}h4+3E|qE>M3T99FVdb<BEJ^o5vrWj(|9wCG&x<9oBQ+v<LJO7o-
zv_+Mj*Q at GBdN+-Gvgr`&1TZtkzYMd2icx?~uyoJZ>;aL#VXf27v1Xrqklxl5rheeH
zvd!j!nf!m=?k%;z{-dLW=i-I;f)i<4OhcPoerxas1U8i00}2HWpOAOVIfDNK-EoNq
z<yIBU+u=V3)kMM at L=ic~F56mFY_l`dytc4PMC+4bm0E7Il>gjJ5Cy6G;_Vv@(~=lK
zIidtoPd$()`gFtI#Ni_^Mn!sk05;rXHHMb%b)$du7oOm80H=-5_`rd`I4ffrpn_}1
z%;Or6hI1LL<CH6xAPAi8q2kO~FE+^h%<uC+)<oKMbH1mh>-3B>uyFItBJ9^UFxNoW
z60hb0pl})xS=%gyhfS{MhTe8HX at R)ng04Ia?m7hiGC8}kJK}{xfQJd~v~1-|CfdyN
zbP0cvka+Lg%6&~WHGLT2bc+-#1!^0n*E3D562?VBMv-OInnSjQM<K2^axNPm!>Poh
zWEWWTP=+7MR>M#9!@(Oi+fBx;u#|iB4=x0WtT%Y<*?eBhpdD=&mwlo9u*1hRjv3l=
zm|>6G!Ve3mnr}Rgh4tV?ablsl_<Rg0<M4k8xB7p1|05SqzHBxV<EyzYVt^xSEetL+
zIr?)eIm7^ZN{6;rX8ky3WKd=z4##AUg|s9%Ueg3rUPimi at eXcRg&u#ug<~NY258C!
z6YMZ16|Q2Z1sJ;4EV at ixbq+j|cpkO4Bx{)L6N*)pZyoA;Pv%joBjyc|>T(mK$+~}`
z$mCH}b(NsR;Xj#-{IYfm;RUZNq_hc3SE;P72=)4YS1ZDtwlQDnBPO!yMlz|EAfd7e
z9mLF;%5XGZkx>*OCU}WljA0_OkNMF^wVLQ@*x^F%(e{s(EtasgmEY at -ruQwRohvCd
z&La5&*y|Lx4h3xQwX_AYNrP<+cVT}cD#~AiqpMF{h?P+Fyen=)1+w77mAESMKM?mc
zVLY at HEbV)w(PAtm?oJm|z#6y4O#j1peMh4PyCu}(nXBqUJ5ij~@}O#RM*1pE;Gwl>
zLPc0-uOe6MX;QUhwkn~+Xy#kGfGN=I-`@{>3A|^nZ7gbq6F&qFMe4ug(X at ZQ_$`)I
zb6O~wkPO%Qm$jD$^SKlOFj(_)Cwo6G5#v|g0p?ocIpA)o*&3m7dCfM85aTB(c3we>
zQ#`Ryyc_lE06&dIoXOdjDv(@|VnR-3fvVWtFgk@(aLhM4PBCy#PHLKMc-jaGZN at m>
zHyEuIW;9<}G23m`rA^0NF1CNog8)3itF?{nMP(qgXWJk}yph@=P1o*a)Ns!eau0=w
z4CRKm|HfA0^}|5Ed<Dci+(+aPIaRZ!9isd>7LUxk$%dW7kxz5ihr7B5^d6>b<@4xs
zac=!Uo4_mmK4&`?LO`8ESHkUtHXv#Bg{(%imJNm6)@y{n-F>X2+CzU9yGTAy?1e_C
ztyLrzL?MPU^F2PiUbCbe>%%tic^h(3dxh%4%FD6 at iFw6O-^FI*!!^$8%N9?Dm$KHU
zpU;LH8!o14?vNg%b_c`gOvs%B!9dK{J{Sx%bmYS)QIafwaJoI;Oa!#+v_&`mBJ|kp
zqH>jI!rU6xM($QITUUQLzT}Q|_Ywm`MLQMo&kGE`=l0bwyt>}I*j5u37j_^k at fG}A
z5m?jnZTw at x%NqP(DWgJ_w+h{F&<}2Dz-Wa2MuHj%AaIQmsdcF?gAAjB{-dM6&&Hbu
z8%18avl`3)NLj{ug%RLgpiIe6{qW3;$<Xiu06PmnT`}yF)mnellK=%k`oG=-ae2II
zR~_5^;A4YN`(pU*x1h2S86;8`u_hpZSmQ^{gJG;>b^t^uDqM^D4w#`hK<!7FGw83=
z_w(DF->Zr#vSrgD^J09VT)mB_a1!5Z*4q~h$zZE$T9R_pjxnXNpw>~4jP98=@5P&x
zpYN8IB_!-}U-C8{2v#e9S)inZs1D|NWkWaUZ-avvC`2R+4Z{{C at v7U21*<S5b?(JZ
zTPF^!YeFIbj`}KOuy=8Y2Ah}n$D;%bX{PUYApDI3&zzmJASg47#rEMlHqB=GoV}Y+
zT|jvl;=|CBa at sprB%_8Ml;w9&IkRA&!7)3fSS~m|aSV}C)g{G$Sz9>1lyy+{L?r)7
znoKlTG1yt=cJ4C82>=&DnYe7TTFqIfhC#tCl5fGVkzng%)uE<(jYtK|dwrN3&k82<
zPm~9a5+9vGuZA^-d%OZFT at EgMH73X9GL)P8&8hV$gWu-0Q#CxB&J9|l!%AKj4irB*
zRDhvkaiJcNK@`7#QCGd;e96I?28Wsz%5`q+BK>{p86AS0hN{zT%fS$A*@ZYJn+^`d
zrm+W(j{oPsS<z?^fBOD3q`-IbeFvQL0=*K}#Z+gtWh*ZZv>_*Ba9LrJ!2BeCKXo{5
z at Xyw)LAT3Y5`5DDF{UYw at 9lp+%o=TxLXjf)VsnIUy~?_OcxnY!n2X-sXgl#iCbIVb
z9x at Z9Qb0J`QJ;f;D;<c`<gRLtMCI9|?HXKFuQtogcQ0t<gJIK7_y>8Bel+gkmGe7r
zoWzv7SBu;5t5%@?X?*zBTnA$v)6lG9&mC$9Gnq)SR{-LY8*|1>H;^6EbTwJXA9E)7
z{BIeAxyl at Wal3x5!@#Psod~U|A(mLOR?zk)M)4wCONVp|@D=xcEfEk`f2}*YeecK+
z at RN-+bq3Y^d&cr#XF)#i=)GFH#fb1tacqr}0*xzWVjrlxl+8y7#xH?Pch|vzmc-SS
zH^^6O$?eL1+#^WWrJQ_uV?}SoO<QtzO>7v2-Ac%RtnKek{Ul2+Za3b8?g$NO2p9CO
zbHMV;pUZ38FVjDAqa8*RUnH$r)f(jvreriNWy{o6Z+(|QYX^)G at a*_yM~VKg57jkD
z4FAyYAc>Ed;jd3lxzPv91N<k00MxFwBFW;X%5+_8!<_N3`^o&{iO at p}@&@R6rWu!0
zJ7oiZC)kB$L{{aAtpI2mN>P7{V&n9)FUIK!R at H44+ie_{%>erVHqDkL;UzkowuD%v
zwvvEm3BPy!!VMMdak0v5o}R_y=Z#(=V1Ww&niZNE$6^h5nmvM^&B7Sj5VSrbeJaSs
zs_j?IEoVOZKAU_DSH8<6LqC2K-mfi>R&(Hg){a&Vfhk at 2J2II|M*V=e9mqSNL41;L
z?E=({{)JR<Pk8-xr~m?E>u3lygR5fpBMIq>oU48HicR;s)4ene=WI at LkBtI>Ey<zO
zSgBp28v>|vLU7K3dm|Z@*-o09khRQ1Dg<`XboU~D`*1NT3BX=^%o-9LZ|o;*vG8nv
z9g`<BIKVOuuPtZ=UZ)lx2h}-3wqkY3YY#iZSI~@$1423FV{^ed`VAS{al>O4X8ybi
zK`L37ayfbVFiU(!ElNA798<AJDt)E6rpNGJxX?lw38U at 5jvH>U^effRwe*`<+qI{L
z04|v-3>%+&+{n7<58=3<_qqG$BSWiy;McolPmxf9OZU-DJAeniO$R_<B>5WMwQBBG
zdS?*BZ2hKIf#-PD+!rKJVkEd?(H_x0`b7`526O>-0+}n&S%Tx&j at 7NTi=sQAqL{XP
zY at 4?_Cqq5{k1(VqOu$z(DDyWicEO$|&1WbyAs^ZzB(Tm}mY^n-8;%l^MEH4s{lSfj
zaM~CXuGL8aexZ%TLCCsHgp$lGwZDMkH3#<_nt+=H%dS)&#n(KHta-Y;K_7wVHd%&B
z1k3&+I8({R at EBvNZz;f3mJbs4j|1pG=c!2me1mb$*s=^%Y^{!GAsKJ>{QNGOwI^?8
z8<s*ZK*-FvFt!vAF?}!0zv~fyPfE_fdY`hF%J*c_pLJl05v`&(09_mo(%Sp!r!;DN
z^dBZnb*`O`^STp?n~4v1b8}3Y%YWFqZ(LamDH6hoV9|v{^4O?qsuk4Qos(XUoW2`2
zTtC=cKU2d6=!B=?IVh4<pM~Gw;4w0c+G0I4l95sB at rd>uF{T%*2~vrFz6yt~Vb$06
z{hkal8v{eOITUS at BO8Oll{3N{hlDc8sD7S~qL(T!U+MRtG;SUo&z%QI4vvRm(Qh+|
zq;EH?Vrz{Nd!U8I%73x%(2&UJQc`Uo>w(L)xp%Sh`W_pmH`P^R8t{>|GCG$jBrof4
zHs at S`z}>C7uD1$L1?ruD!(4$|3vyE=$tR-t8VwWlF6m(vwqTWekD4RFv|K|TkOs!C
zWz66d4p(oX&{!iEt*>rz_cXa>gSpZ<Pfs=8H|Nr!YfK#M|E+Q$GS;QE=RxiK*ke8)
zfMRuUEwS?z%kcX8YQYxTc;o&lWTRQ*e=op)VPcDpiB at T;6O!$Jqmyh<M{0KJ_gO~P
zQ}MYoU(SA`hBG#3rW#@;Bdc_}Otry4ZjNi}!^F+*L{zz4=N4oq2cb*?6?S<S0q&z6
zUT>_P7h~`lBf5-z8O+9W?HDUJYdr=t7Ayrc^elPMH6{wu^dbz=$*kk{_|n~2eHcLm
zV;0q7x^M6e(bLj at 8se9Tx;My1UfxCszY1=|&xg{2>@Gn1ktwvp1VH6}e4D|**Ak&V
zj8gJcEM%c?4Ei2n?ZV(!j*)_fgw1Eq=5_QyAPmrWj7B5Fo at x~x*>A*;<&6hUjI(7j
zO##dLG_$kgbKwhZI|WH8s;T5yIsN*fum-7f7V(WJQJS-V2OGUzLOdjml;I`)_Aqx_
zcy>IJ%&(#O;eO~+<a$Z`+CN~BVf&p$!+2|sK0GvJZNHX4c9zP8gvOR2qQKZ_`4oSU
zz%rMmcfr3E#qwc74X20(-5lH;!MS}UW7G)b0)lsLZ5m!xU;io)U{mPESKP*Y61J&8
z!8fP@*K*;1$LJqHNt?K6P-`ZTx`UA4pX;g1Xb&_Vn3c@|dth+0_K)CjV@~!Q6{%m{
zLjQ=9JrGqNU^}d4M8AnT)x9XuEB9FB2kCY}X$p3}X?YgSURAY}YZn$nT?iF!HCbw^
z+?rwI-sXr}Kj8xj3pi%np8o&_Nb~waQ+edOSEm7g&PWxTVvkP-MnF;NR%|~DwQQeH
zF3IgE9S4JPIxkXBHJ*1dG#u3G?oi>=QPHLX3j4qVt4{^_-yqOVvK$mkXRewVs(VDv
zI7kfayNFiFnWT?6#^t!{vr3&S?vLybnFE3C6Gvf&lWj3nTLgoE!B$R~!x|y(bix5A
z4Q>j5S4v#uG=<sXJDRR<93UHW at g#OgU>Ri<RwV>!{UCP`*##*%$FsHs!DdR8KWeC~
z8oCP_Hq}wb%pceG&lbF93l#efAP7$kh~RPEcZ_*B8%bqB(pUQ)eiW_h`+(^L<=3(s
z)R)2E&zq{>66 at Q`wA3rRhi2_1algj4>pcN~$_O#YNd+>JgRx}B@~+Lh1yW)f+>@gA
zw9%Hy+fmj^9Kn<~0oZlzxP?5YZ9eTM)PcBlNtblLdj0rBTgj*k%T1ReaEr$pOY{55
zPRNNxh*H~yHa0nz=np#UdgAv$17FAmkGU)#wLAd%2NeY*%HYWwe{3`{dXJvHj)tLs
zg)CZ~fwvx1OR_=u7U)fz^9`W8I;~8&w{3;n7&kujvBzu^*nxdH*?4H|kwzy|KhCc9
z{03}ec+QAc=*>;O;Ra%7&m(Hg;RhT~c_a`D=2vuAShQDY at 6IZzxIvSPBBRMq7y|Ey
zkSG04-i>Wg(ryJI2kh9d=uSvBRShP8#USn}q=S>nlh%_h%q`($ebgMetua}h)qVlr
zB2^0(Q@`>p@?dN%!nlFuio at u7EPOV_wtctE5>rK}X><AyE1w7b0!_kA`yQL!)<MkX
z3CAHs;@n2U<dRiBQb^dZ>-UYhdneNpx+4giqU;YvZb^CvssEE(%<+Jf6ASKt{9TQ(
z7f<LM-l{gLWXGH1vL!e912vY_%s9k<uz#eDdU*vcFKgz5O*@no?__$&Z~uFcj46oV
zO+R(`Se`#BQ;e+k4%G at 50rV$=SRxOIWn$b;-lkOP1<S at O^1jw9L-c!D&w6N9LwN7L
ztk+!$=wcGqkkg5FiqWZ)^C0Dae68Dz4XK4yiGGc-Lg1=X>j!s-V5rGR{#JYoPbtT<
zyewNbp<sa at V8C8ZY};H?P-I~1y_Q-UXoor~Kq-Pz>3L@$oPETXK;WIluHQ|K8U_XA
z^&SZnT?%>GmbrPitR|4)hfUQyb7<-YY##b$a-|0l*6Ry15RXUsOuI6FS(8dZ#?(|Y
zBa>qQ!>eSFzf%Cp9|jI6=!`8x#WDjx^-n}1n_0hL%_$RF5 at Z=Z at heLX9)^Y#NG2=I
zJ^Cj}6DF_PSet{-)yCn!+6*ak;#B{nb4Zx`Gn^|)e#|t4c%5_922G{fGtfAL`Y>#+
zi}l=!zIt0+szBvz^IofetEZpe+6EFR2*FtUmoDQK!QP_ta~a*y@`EzU8c#B_*Z?8J
zX1?de8I#D{T2QtNRi~{V8DPt6YwR{%LXO`xuYkY-8!#Rg|7L8XA!qieo8F6uQ(&uY
zobD<*CO%JRjO}V`INDKP<|r?$mJxYi-(DGh3(b6n-y}1ZLIxdwsiXA-%!lWpaVTgN
z=~8-s2*Tkutp08?TJstbTZmvY*&ZBTi?1BQ=3tiZqR(^M`6dE9-ln}k+<cjrYeZDH
z4q{j;uSI)oW#IlZZ(P>Rpk&lJkrdHkH?u-iSppws1Y9VMv)AF=P*P>ZUcJSBjb&$g
zV_j&s;@9t_)pFl|IsuTW>ZVWwdpNyTTIJPyNi6qla-4%OpV>l9OO$|%d8OF)-S at AB
z{8ee98s3k)=U;{~mm#rp#~oG8mc`87lz>}i=Z at b?d>guoWiYie6`QzIfsbsp^JF$9
z6Rk8{P-0e}F%RON<(YHK>bsviwz^B>KELKWn1%)o^EnlNz1<j}%F?N6*bz*_+Oo5z
zWiLti1rTVMX6HVwnZwgF_vjk>Tl)?IXsp}$c3mmUk#S$>?79oW*g<Ld4M~kXugaGX
zm00?{a=IFRg$D^pg%=gFhLd&seTB(ScQ;9G+%h{k2ilXk<#c*_PASmr=`)+9`S8^d
zG(k4y%J(dPRVoNc3rqR3HSU}v{EZC@<nevIk3Z@~rmdSd7y%e6F+S>cXS5!y{XLuo
z#j1Tuxf at 5_*~H?}rp#h#OZ1qmAP+%BxULolP=mVS=8xy9P<5UsL^Y9*nItyc`<yuR
z47ftQmTMak8@;Zl<fLl(Ac)tfZ0~we*%E9MqGhCigeO3e$0ly2hs(<`dSp-?(4d;h
z$eJ>${N}S;1QS{_Z53Y0A~Lo_=OUNs7=H at Eb0a5+wRokuc9Hk;dC at uQuUKghA~eDz
zs-uC>!~fwxG^I?a06;CIo|{|{!d-u=l&e(jnEwp>cnhJ4BDf%7>#6yOr_rDkS>u(|
zU8~c7t6d7*-q`dWPZ-OK1ecG$06tEm0-$Rh{2J6I4(diqB6CPxlD_4xylP8LbYnMM
zb%VN~vU+Q0E5LOBT)|tBBN^1qvgq|kfjUqxtedfyqUOTtUrA1U73t4syMoY*``r?*
zRo at C(vJD_afIbsU=0O6}*{bJ}><I;x5!DQT{r49e|7_0&2pK#;0Qhu8eC*Ti{4ZvP
zkl9=AkSpEdDmhOao3wKl7jVxvr+s>?pBuUT>Jq}%Y(9hY81>#&`X}3?IiUQ6wvVi+
zA6`|j!A<QfwH+ac?^J~)isU_wGM4*|C2^8PXc+?Ub7HcM=QOqDO0Cx5RLBWgLoKR*
zJ)HO=eh4-<6Oa|LRtzK7UjN`|k{s4_%OTr~23 at jKyz_fp6+>G#i>A{t7(nQIjqn%e
zulJoRbpNl15?0p$(O#&WhapDzd%I<ZzC?o3Nr^@I&sT4R^L_EoS!vW2=n<mEk_^S0
zlOkb?)u;gcBi87c7Ljp7s_kh|NjTAeXOUudevlTiE%|vD(M+8tMcWS)OCx&&9wAzf
znJs9BjJi3SZ=H*&0PfN$&oSbMRM~#RZ4YhNf(aNYVI8^-#M9R}UK=18WSJD71MTc&
zppgBOgu&q&eQ^ifA<d2To5Rb&UcKwRE#ey-SMMA%$N|>~Z?8Y>7P#u~EzYQa4w<D7
zopED$uxdZNk$V+V8T#0|SpS(-%B=1ojFeFlGOq5DT!losR)Ui at g4LIj_GB)~<5M<7
zo+(4}9K-F5_o5III*`sp1 at s{heSoW})Rygah>*6F0H5h{PNGqC$az?_qSSF&8}nNf
zjv;vm=dzlkK0WVFXHB20- at _b#)eVHtDbyd-{qpQ!{@CyHunU!O)lsRFaiM7;wF}zc
z0&6^D({{dbts|kf4)CV5XNnV%ZJN(#@L^5EEqvVm+ at Hh{`!i?uE%D{zECo9kg;x)2
zT#sG=QB*AJNH6S_{ui(hfo%HORN|sW9WVT8uv&wbb7=n0i&0#d*fm{$PoDw at +UC~q
zn4VeRp+cUn7%+(670oODOA;3GX?{7W$=5QUv%EnEcT~t-1QadI{G{y`l}Kwip^y8w
z92pFkl;99YWfzy0Sfj3q^I*R2H#o{?{$9BW8dHraIv4Gg!u;!vzOF8y7rzROSUL1G
zAMLl at cK)D-_(SgG^bf^<jQ23 at U5F1TL*F7SNMdbfv+u18fv?ShUNd8?{()UGjc;jN
z(CSWbd~-BzKWH?B=2l9sDJieC=mZY$(rLIEXoPkd`glHf!rq~Az#D4CF`mm6)eC-n
z&9V-UnU2o~FB){M>QeNy$D<6b0t7(Y8CRp1*QjAX5AQcH!W=n&BckdUJ>_wladP!t
z`W<Le{4Iq98zb&prPyBRC}8uipWgd>UYPxgS9?G=5Z;0fif(sx^l8mDvHzLcCVXxU
zRcd1^HKAZDT;lu{It<#l1w18csO}XiCSK(?|KUB%ynsG)T;q08qz>0#ZtbL5SINv%
zK|U{eJT=He9(fyoXi;Qv(CF(0rXA|;<Uk7D`9Q)Q46fH<lEvc`PN^_V at zsteL*<dP
zB at z@XhF55|cEalrS($|^GEJ|{g^mfKjpm;6qz{ktL`>SxE#!!507go-D2JQe{isC#
zaqB*=hdixBK&ZgmIO^*3W(^ERw8l|8tLs;8K?bO9x$I4UhP>6!2NFNI-H*YZKtm@;
z^`w}y)&n2f`{isRiL0Zk_lnIR!FYM at xbeX(4wTf<jg73MhMhzBAkAOXgeeE$H&*G_
z2^gtR0mlr`hHoGNEoFN4%G-`-A$Q9{Wtjrk*paYc^6-zybaFuubNZ9Hiv54H;P>C<
zdHamaeyomv+E~Sc%oQn`<#)L!Sh?vR9$Y3igLE6T5d|XB*p6v~*HD=y07=P3v7bLM
zLPS&nsGPCp8CyhS;tPLMsaV1rX3F;Ut<4=L+7|m5lX$s0LdGux_(3Lu8odc5GMoXK
zzm7adPY?8GKC%}PgOS?w#5gxwr<dqe+ at C>9-tOCfrxCW{#bg~_&l!C!Lb`d;`k;lT
zSyPy&(^5(N=;Ol`5ZR{>y_4?KvNBDH_AtJn?a@;F+28Kg8Sd+$L<a!zGrkN({H*!<
z?oLtlqcZ81oZNN)geOtT+eU7qC*S$;2Tm<s%?S|C=maGdI2maT>=_8AtER`u3Q6b`
zqQx<P=n76F60ToCH**@;_|F-t<F%ZLBB3tdj;!RZQ0z&Uu6@`DQ#YqseB~;YKjar~
z$G@<Sjh&o~!&&p|3<#pGRTRL<xi-IWInv}h8Hw6UVC!wGTYvAFOfn637Q=0EitO*O
zbkW85*`ZQ~>3kEZ1HXYndq;Kt&HIW)FPQ9q7j8*V6+e<|L8)h8+*w4Bj4RY*U88JP
zK>O(Q^c|ODFudN>VSV#<JM*AcpqfR*9JvjELF!sXRH(h7mx-KIv4ag$YVd^sCr4ci
z3}C-Gz|YDWWJu?l6h`6u7 at 8H&E+;I?r$Zwn3}WPsAhy$96DtBO9XS$|Gq{AsuK09+
zr7 at hWUT6f0Kt$5)I`b`$F4%_iD4+srh55^EDF%KV1XmW2;sG+bfsYL)ovF*>wAAzn
zb>kLB+PJ~dk4p!{_1s<9NV|WqeVW*H9Sqmq+xg_aSFQQ&U`PrkVcOdk)Q+gPGMc<k
z6o`~FyI+Lf;>HFosLMGiBd$+o=oBM=u4j!%ws;C=rcDA<5+ju)=;+g1pt2P5H9xP_
zbI%=4D at MLR*^Z(AgyI*TWWu>jrdfm$y3Z0Uz^;?T?!`frY!$WR{@%9Pz59<C(U73}
zV_k)YS;rFC%h at orEmzp%Ai^FV;!sZCL-lC8F!{SlOKAlT&>od^xzRiE#pr~85W6<D
zAm)3&<jnaSi+&#B5MyKDCJqYL at utDS+N{1APf(yVHzp!=NY8N~!#Q39 at 7s+l%59vO
z*Cipr;zq0lb0|e8M2FSJT%(G6EXn7552$~1(7nS-)k%F{DCZI6yp?4p88~}@#2bEk
zRR<AZE(|B`+D^Q$J-rc{)7wUWnSG>?#n(U2tzb<C&sL|sG%Q{v)#9%X57xSyphL2m
zpaV|~-e{%i5>KR67oLstF|J*eEG#z784d;Dt!uq)42kBPO3I7COYrtE9`)0ne at N3-
z-B-cYKs~<Y&a+|IoIoY+yFQF%F<=M*(mgwjQ>Q<Rirp5wo!`XdHs#lU`|Djjs*DBg
z&F?CnS7|E_6;3-C-y!O}pW at C97o4&?8MYnNP1Es;-+mJ at ma;NE>8vQZR78joK{Tvt
z_z4&|a13HTvVWZle+-RBfWV8Qn`X@*o-suVXdSsHF-S#m?V0bIBWZCX^jG&oX^by=
z{+iOk=+%eCk3k4usvbdqYP<|TIS~=;!aEB}T$%&A6YcE8D$kJ1WtI at URz(blB7(CI
z>cSPLPUj#8RgS-f2PF)gOoo-1{Idfg5=IAcHMZ~e+|&ToMiR5`qnPE2v{1*;2f&OH
zj?A9b at 8vVQZe<N4r(}gLZN#U?`5TC|d`Hj&zQ;u6;7h2z32E+s$Od59^l{wZ%?zz7
z4xw?2DF)jMcOrFLRHZ}FNPDy;yx(IDnptTi|9?OV?&Szosj=1%*%g_r+8Lzcpr5-Y
zMRKwjg*eRm+Fj*(qg(@Vaf1|mmW7+igxz(_we27+;B!QMawqo#wclcL^IW4Bep at VX
z%?{EYQQZdq6MAlcbXZNhowqn_<kk&m&BOusLIzEo-Cgl9AR?79p3nPn1B*5-d|GIr
z1|7rvb`?g%+8R0q6d%yU=20CC;239t>H$vi=QuH(<*nZ)RMrBMcz6~E70a at UFkSpd
z7HOHiP}V7Aw(vP2DQErM%1 at pM`6F5;CSG($3~ot at 1jZA8b`T&wY`D at U@4tYTE1Tud
zRY}Z!E-!Th?MaS+DwTCdvb?_t70}5e&(g__i8HVlaiYj8O at KWKj}}lmaAA2<{va at 3
zD!wW4ZCTCdG!*p+xW3d8lW^~~;kjWE0k`O{qELC0dCjRWeqP}#yiAM)@p7X{vfOdb
z1~qVBIEgKP4eF7>*!-H*>uP5#WQl{hDIB2Pr!EP}i$Om1Q}vBHg0JN`5+Nzv6H|RB
z(%PY6BM=iMcWQh)b!*iVsIprx^Eg>7!w~X(g?%pT`@32^QMK2R2Is}1Ps(57+0Vi3
zEbOk7yrkrdXB}glsS?K3UMCwoGV-g at 3S!O_;~yt~W{y`2AE6}uw)4-ytrOY-B3F0U
zaRXF8TMP0__L&t_BI<D_A9vqi&?WVy78~>9o=$axdPW>6@}8JnydFRCZ|N;qP-6p|
zOZ>7OyZS?a_f&H at _Q^@$1n<*+O&?>o_ECkYI4(nCbd at 9%`ZgpbI`?c6FE)RAz)a?C
z9I%ytOc*9{BgiY^M;TW&P-5$c>BCDFFF>w%C?9Z!WCF0~#pskk&?>^j(^lLPzwT~`
zUs3}sAD4|RnSqXH9+UdN4W3zjV<i9M9;O5g9!my4(F$G7CftxZ`a>W(o5p+p%BXFR
zAaAfwAVR85%e`zB-L5*OZN(WM1wT7Pi9PRsSt>@PlE_^*<;7oX$UrC%d3NfdDHtiV
zsXaZFQs7|u7z-I9srlI|XA>@nk8wUb&K$)_xbhlxqn;K;JQ3~Ti600L;Uh<0V4bVo
z42ZW)P5A!y3(<lJ4jb@!N~bH}6PLsmstY>5sK;2;C{$TaHPTCJD5Ys~4Cx<uA>(s@
zg>@ACIBBTfozEL`ARqQsMDy41P_$heioTidu4)@=D{;sKxyOj-Ho``+@&WteUGw8*
zY%N#nN}!**i~p%)=K`J~d($2jYz(sn4}C|?Th2a}IZoiJjA?Q$g<XJRAh(p=&|B{~
zGT%)F4mNx*xTVfL4Uq(suO5(_WdRd^EIpA<FZLl+mR$8 at Ewa_Y@AVUek^z*oWM5i5
z%e~j?6!Mwcp+S}6MnkqxmMpir<8%I+qPMi6nB$q;$uZv)5m;{?NB`~obTY|jg`6EX
zTYg`J>&kK3P&~0CGyi525x89S_?Ro+{^yQX at B%kM<b1tO4~xEUgveW;VDBe?<01Hj
zn*R864rw7|mj>wL%-7Yd=un!@g7{!dbAuT^v;o(5aQ`zrE#5U0ap8u(K3a+~Vh6*w
zXYOz@<2gCne3Au0PUvSsrjYJ$7f|K#zHQf(QEW`>wYihGo$y3kvte3;<!t{s&Y1t=
ztXXz?42I|-(0uskJ4U^flp;EREcXt=Lq(G&?Z2d5<sBbuJDw|kMyj_Oufuw_FCXd>
z8)t!TvS=c3{aNI3xgANzkfg<kx_duk@{PQt>@YMTpTZ0TI}NW%whq`X7rC(|X>qO#
z3*A!+J3Mxn(ykZh*@5Z*QA^CaG6*xcT|v{#cjFMWH at SLYLfY;O2#HvKPNH0xY=phm
zvSzwVzT4GTZ4`5T`@`YLrv-D(Qq at X}U6ms4B`;KeRIxQ5Zrx*EH?$#<fV~f6)OgWf
z&%}%qG%K5{s?+c4x8)3SawgZeeGt&B%*XJ^?MBDlH41JSpy;e7B$*=da<H#E58XU`
z#vc>tYh=45uIZijAKE2<O`R;f{lhK^-Jf6N6a9SH#<j1u5VKx4ICPap;z*hKrF6pd
zje%=7u)WYb&$Z;&@R%XJAZw1qS0;|6(k6yqfPySf2n0xF1ig-csy00ttB>Z1s||zf
znoBk;JMd>J2zS$=#(g}c8HmmgZ&crriYIt#6eX7J)&ZF(1Mug6JaMl9(2NU1$Xybb
z!nR5O0%|}v*T(FN(HSmZTo_Gv`mYA_St>ib+Ivi!^V~nK2xIWdrcSh0(gGenn}CXN
z{u3HWoqHY53(+WSK7LHKWoW~fs`F4+dDn0&{iw_zsn5fRd;3(Oi66t~dCZeitw2pc
zIp^Z`CM#J)%b7KQ*fC^e#(tx#Q3O-V$w|8B!6OZk1#>K0_l at UhR{Ykw{NBIy)1M6)
zuEr=G=tex8Kc5Ev){=Fc-Gk@}#`K;=e>U{3*S?nq6epO}6s`p657K?q-ka{pF(NS5
zc$8VE2Nu^RTcIAhZ~yGXj7DRN0neZ=OY)pR(~jfSxR6hONluha99{J=a9_NMwQB1Z
z<DD9r^>D1P!D+MwB9dS{2*Ir%^H`Z4VZlB_tn%|%Icfz*{mAs|ckr7*=Hr?uz at W_I
zD;=8ZIHiSSN#_EznjIoDuq1_cvp+CR^9us`Lp|}OgWf;2c&=(oByYa<D)&}^`a&DV
zb5q~opRtsG(jOL)7`#>+ at 5c9y52W(7OB!o2sX=tq%8_n|{3_seAEM9zW6rv;GiP$@
zUFpW?k+V&)F8kBr)yqcB>$I9agwqU#ciWkh?8KOCLipET3(qEqOjkNQHd6+I;fsmf
z1h988vuBw2??KGgKD}nK=Z{KlY(3VYM8G;`Ty1 at S+N;@-TXtf_T&dgLr0zaLXcqsl
zWVCFIm9^G#f2i&z!TxozNrGS!%|;|q-}~{eHj|#j9nkiMmLVpPDOUCrDti88Nwg#}
znH(r%!r6fB=zM#lssYO_A8<42{(5~dR}UlB_Z_dBam6{5Xk7%0{8q)3^7a|;Y3<T+
zb>TaIL=d?1F<kbR?#x%Iqooye6UE5so9L-{f|n_i3~?mvg=`*Y9)WQ&&U8QSm=Yyd
zO^BUPzs%m+ZZWtM%xtHbp<PNcilB4ds_MZG3p=`jM~iIs^wG?cIfnQixx!9>ejA8q
z(tmN&WB-5qVac3q#?^(i%$BSf#6fL*6qS^J7!=v-g~N2&7Pclq5cR0><zr8k7e(>t
zaPb0qqiel5dPVZ0vHAh=A2Apw%|dd*R at i_&SmPCH at -?G&0?%QV9tNA}A<Y26j<ACa
z#XGAbg{Lf>;dT4pg at QS#-W)DZv?$4E?(F$Kdbf6YFz3kd2Cbs>xhQ3$kt5hHyP|S`
zEYE#g2qCTcwD%YlXZFk(ANco9e7unIA~N$MCoqLN5 at a@cPDJx1qkn|QjgzTUcpo2!
zAWK&f8oop?YJ{<Ks%#muYXkhiy8o at q)G7E=Opx;#WdR|klO at w?RD_xT1x-7wD5)*a
z66ktnxx1Wenl$7BK%b$9a#mDdzi(K7pX3iv(lEGFouI4n^~2`ms%+}J>h*AfS-a}}
zaG7$6(-|0!zO`_CcO8%I(>ER^07j%PwPM#7tZ095b99RvvSyM~ntKY_2%M4gQH at EE
zRpjDACtKyp002B2^<3$x!F%VY^Pc!>3X5d$L5x%_>bq`5pS)-C at x;ww_U-w9%9WA^
zS{>Oc!@mKRzUbVQ-N{lpT+(ABE%CDG?K}gjZsaEX%G!pOqfRZ<h>{n(2ckV>%2wuA
zt0S4KZG+El8%vOCKqc+pUbjML?Q~T^;I;(H*L6CNc?CywQCi4M%*$`uGlT}|abdkp
zH}a8@*;)d#&2{c)B;YMtWtujBD8>aZaaNKt2nZ|+psCm6k=wB&(U|Hz#>x6Z0RN9J
zp!m$bTh*vXK|p%K3l at pSk_~2<s%>Ti{3-|TUwF4TR(34P&Ft<7eXo4kE15LBoH at P|
zFGl;y8-!QY$ZZzq$MLzhd;tQ9pDpT^x*fmc)h6%PZCRW;5{aI`dL?RqF<glu3V~m8
z0BrT|72WhcX^d9&tVw}I+?G4#%VG#?5J3`f%y=~!GNG3R2J#?Z9C^|5NoF$$4+v!M
z#T?)o8Dod4=R!pdvlW<$EwQ*HoEpbG>lJ{klCNtMzpRvV2pVppGc$_7JTa)3=CKj4
z9}-(T^36_AL7WB6AP1v=t2^5=9?a4J^15BE7fb7y?4$?cIM#GD31`}K!9dTe!9fDL
z2pidIa2{PRh}sP-Ig2E3X^GkRb{8wh5BDF3JlRs|IA?(v1^DvLkJJR41>6#p7 at y}w
z%PxQo9M1*Qg!-f%O#;6*ci<)kGo8XaR=OEshEl)>=G at -$%?-YPrDw(<>X7yx#52qT
zt$P99g+iX2KgkBDs9O7Q5ED$E&5Yzaz-qrY at d^T`rlc2cdvcH#u|RG(a`VMdc0F}3
zRGogWKWgqxzeTg!5Lg5)?LA^1*iH;}Je_BjDy|Ez(W?8cufG3hO%>jvhQcVxQu&l^
zJYQcJTyDL94<UblCQ8A``8*+mG=UXtAE*vM(5IPqY9!qmZU1c`A8@@V$Z<_?$3m$c
zYA`G`Is~EhNmm`B12}Q3^Q-iJ64ZRRihkGsY;APlW`+=Z*<QJq)V*se<#v)*&I_8s
zhrbEh at H}dI2S>936u#z$!yYvyn7c<;d<{{Z(?5TC!iXM!=Gw<(t|M*l>GBFT1bt;6
zT^>V?J at 68ZlCO&~s!@@4?1_VN1zK%6LaMj}$+pPR)MD-E$ib7?T}DjgD=lWKCKme5
zNbFd*8^<U}F1trvk6j5*l;M~AhgV2tN3h4A0r)doimSR4oAZNI?(3mNxTli8>=c;D
z8R8IH%VTAK3IN1}SE~#c^MRDOO~VQH$ySc*@Dk+Q9ZtmwW%CtTx1VNLsb)aKc*F+4
zlb;Jt3%sg8X5RiY9`Bgo75CDhVYpu!|9VuQ$?cmrbf^=y+9by7(#5jIa!v*@3(@n3
zBeE*XFa1~d$dC4x?`js!tRXPyTnn6#MAdsj-Rhfv*9cGW?1v{MEDi)FV;4}7!;+1n
z9!piZ#Ml2d9>i}>2t>G1ev|~Bz#D^qXC3Gp{`B(V2-{P`V)kQCL4~1TfePw}@SM<w
zIi6(#pC1`keNkUwFMgbnhW&Zr+>>oJ)K01=i0e%niX5o{;p_ at fW~juU-X)+8Zb5F5
zSQd|eNl6knaTIjZ6Bxya?A98V(L9O(CqTWX^^%i`gX5Wi9}ooB_zwO*rz^TT9&mx8
z>F%Hr1Bj<Fkp-nAu4cPfKx8o61;SNFx*%-cp77*67yr9#p9<#Og{;Yz>Wcu)EHK(T
zs^dSgq}V(^)H7P?IimOU<ut`YvHpd>gBgf_y}a5##|Qvy2GoX*#b7Dz8?41W#FxX{
z`Y*dCHM1#g^<g(ei^<8dT)UTwV(Y1q_DLb$6>JrjYBtD~bF+i-;&x^6%WIj_H6GBi
zR<;p42QtIJWak-t5fxx5tw8d6Kq&+H*5Wlxpv7NKY<QCDAXhzaf&CcN-Pv;D%-1=8
z%n#L;aGtA~X~AjfWT1h-+vo>li-l~e$$XE{LnbrQooeqPj6y`N2V>OI=7xBGuv|Bh
z-0_M1Cg4OL|D95Nb!*D{BaR>>q>(eYWKysx<k7cl#c}YNNN^*MZ~@Hnm6|IFbBK>P
z!`roj>g4qP8E_Z(brM!iaIOdGbCX1W8252s1EcfvC!p~rgQJD-S2=vY|02q^|D5N9
zNgEe9_pbJQP5ETQD at p2uy1Vh9l~kX?(V*G>nmSnSy2jUM$jNx846f(tDiYzL&4)sw
zfpPfHL_2yJ9^{=vN;O}Lpt?qB=Y0c@(@Be!8l5-{L0^#?SG%7P<?at86n^V}g>o9{
zTZ9NmNjiwoFnCTIe^9?yetY6%$ic at F`<)X^)+m}Tkvsl>MXhneTnaR=yCU#F`dJqG
zP=o~IaAG=*QzL<f;|5}nX5NOdX!@II7!>h1de7EKpiEg_0bV6iB;`*HqZaL at a27PU
z57AqWqbx$`Le(Mf-(ddGk~E=zMW6IXJ{PqEWa_8d6{;aAmZK*>2Fj=ui*73Y5gy+>
zYX5i6Y7T};I^M9g%D^5;D)qUhmMS-+$G_>ES})q*q|{LBHajy9X9{Gk?&91~4`iwj
zE3aM`l+<jS+fH#SigkJ+7HS!yhsmXP(xwQTHHV1hydymGlcm>PLm9Sz!DSwSU<fT?
zV`?(K*5QZA7oou1Qyhls<)0>S-DPjOKZcEpg4MBw<lu+L`wT8cc_-kY!a)~o#7I|{
z?4^O7X*rFULU%`HscXBL<liHk#<md_nXFY5MGLgMY1r-W>{Gr at R>Lt{Ek~n{%2*lI
zKft#;3RO&?!a5gaW)OLQ4}hu3CQV*TVvq-il at 5ug#)!>fT05XMDi?r}FEbY~+zvn>
z1ubkqbvcHy{y`4K3#l(BTK48^LAbsYXaPD$6(1Z at uLle65;dCNsa2XV5Yrg0<UY1a
z_fZ1$2O<yGvfbstA*Ya9fR)p{u_`pCf0iI(x<B@=k_Ms>@NLn5xQzR5fSwd~k#QUi
zmhOca7FFiIkw?ar02=U>lPN4xi`ehIgQna&C=NW*FL5_c=zYnZr?mW&8aD&?yUS{N
zEt~hvUZ;mD1WbcD*EeE-VWO*}W!1b~AT<aj4`vL;r4BN7e08s+_`bH}^3nwoH!SUd
zym3+0nR2&9*47SxsrQco!UPY+n$$1fl=-tN at Aak)0ZQ!TAt(rHnC<0RD8*ptv(L*f
zf=0D{-|KQH0VeVz_B&fdcn%a)lh%&ALTdl1_?u{aPozJPkMNCAEFcj at qd*x*>l=W3
zbF<|Ss?bf;oU8{2B)K{W6`cg38n87S at QQt9_(A;d!G@`S)^|8YEW6DIW+a?Oe_SHD
zvr67{wlEbZwY=BURR`N&^7MjfIYP!4!6n;`WBVM_4Ygr&X;L37zo~6WD-v<irLaKr
zcqQxPN7JT=VZi4uCfSWd^@;-A2lDZ^mSx`0;P%${FbYX%>XGz1Z{RQz;SgGk!5eZ8
z6XNbRH at BOAG81b8ngot%{{&B(`=WMyih$4OffUwi0e>oeKUDMPvbmL*LN^`ohr&oi
z8Pf)iajis=4u)7v7`?-Oqplb^-a<ZKT165WChdon<5i9G*Xu^}LzV%Oe=hu1t}O%=
z@%ajk3qsKUPS}?r_1NfC+XNmxColj4s at v>#6MH9ryvNIUIo;TCV-_%CPm5~uHT1%?
z6rNbSAlUf)VqjVg=)bmv%#CmEJk3BlZzH1Ug%72+bFIfTZ7p6m%s`STRa;-QCw&rq
zTIM(<`&vengKYdJ>->mY=0$#6lW-Gri_;EW+1LdcRXxt^<vm7nrQGGaODiD|`@j98
zM2FCSoK?De+_Ia%-54FNn9N6H#8Eni18fcqdsnTRx9gHYwUuKPX4g~D1`x*e?)Yrf
zb`932WFk(?Xi&NrO|?W!ZEPw10 at 3kfQkmDpaLzEvsF^$hL%1__lXQ1nzfYRFXc%@F
zm!@^R0zwFXX>Bb9%+P at u2r(V!+)WFe>~#izZkcwFsw4G8$C1);l(;i50#msHc-0s%
znWtw`fcBl6#n{DfyW2gmGnBZa7|F7Bo5WbM11zvwqG1yYrEf0R4%0s7<#Lfp%h*Lz
zDnLF5ehq~#!-augh5t((3G6~)eAEdk0XA&)QjHB^o;}5&Rgmdz8kEs|RQ=8*s*tmP
zW9`WE$nYeu7gG8WGb8)Bo77}{A*Dbni6gzvVF_t($GqRMQ8H!2x}^k3uo#kb-YwF8
zvbv+>9%f8515#2dve;f0^(pZrh?%x~$MM9q%@pJe7)|jZE>=`UWl&Qz1b>MhKLM~Q
zY at 3N&gnaA;ntX?vX>$PYWur{-)@$c~17$d8S>1(Asj5**_P|4ZMR(~w(nmhq>0V^%
zmX^Yg{eg<7)I?^H;Af93YSag=#I~T#;l-Eozw;-u2c`sJt4r(Q2qSPQOembOH{ijI
zo{$eL=v*bzskiYj#JFSm$fsjSNSJ!rq6^p!UxY39_hlh0d?Shmtf>zx!v>#!lXPDI
zJn7=5;_8T4m6xdPh*63E&2c0l#H=&L3PBj~KO2njp5mX7CT_H3cI#G^&M1SAtvwdW
zw+pvkglZdC)WEMu?ji2etO4jz_c7U*O&;wAq_7b4Gow3oe0BIGGd at RROZs8i$pPIQ
z_%wsmf6^4Q^ia(pQ(T}26Amwbm*ysiV^om>WyJyBQ-<M;tpO}4dDd?0ZpHD{+8bB$
z^iq%gFps4WW4(*@nBW2p*{4*sgv?z4@)Q0QknrO)@?XPS!vguz67Z5vh|<Jpl+^(4
zZ-uHxK!bl7*=^W~U7sCfF1X$(6CIyw^*ItDdpV!P!gbf6Bh(eiHgjx$W$*_}QPgMP
zgA0DVXUP%CNgo?wE#snneI552GFui$A<8<I$(X&NGLZeuG<nD2rVze+%`1@(Z`kfR
zpWU|sPrbBtKmMV`$Ng7})SNdZpAafgsc75Wj{J+~4d<VCFlfO#qJ_-NGiEJ27X)Nq
z19 at +hYe#8yV#a?dbgi?0`*ZgYrmTjiVh*OA#ff15Uy7&xkZS1La19Ck!v6R at 7W^Yx
zIf5})11=rhDG$or>D?mwhD0`5h25$z2UegJ`isWSw2^vaUX>X3Pt=;uu5 at crNnx~V
zZfgne#ppHGvXNEiodK3=i_P84^#8WfSvmmB#m;`N;#5p2=ip<1nWE(nrKgIjs_zH&
zV%HzKTOM*F2T$U%<mDA{DnOF1+03xrBmKM>h`#MClxKOqjPgZGRmR(VKg)1mTEveY
z3?h$u-k at CBaQ+#~p)#3Iyj<I$-A<*8%)@PAs?DS`S`)yJ1D at U2yT81CD<1O2po~jg
zYErtZPq!eU5BaNq6bMy>FsmPuxJHANbO&BoC9NN9a<bkZ2BT*SOR14}4sB>^_zr=2
z`y}+wL5c{A!w{JBap&sUL$U|?r3ZkXEOFFmdQ18S4Jz3Dn>K#{im(tv98`n*RJMP<
zzYn=+W;WZcd&Ib(T;q~CXOmEX(0q;#F4Hw!hh&chWyc|ZH$9$4L)apyl8D9#K$l7N
zp-B#5h28vFrZqXCM{u&j;|d$J?x=1bHmcCgiD(J>oMXF56rH?-Q at 6*c)MIGtq{<N!
zdGDjH)lUi(^xxft0#hUwydE-xleMnWa&S6Xa>KPWSCE)hd6ecX1f|6xud)dS_&|ZK
z_3*PfstBTg<nC%N-V(Nw+!RYRmUn`v(&&rFdPV-eG|Dd$S~N0D76>PbqJT~0^XYb9
za3YMg6v5~?icyEM|G;}u+ROv#b#KbKyE#?@H-%y%Fah}~D#f-0KnchsBYB|TqikPd
z)e?M--T>IY-GGk;eIZh}J%@O*ieoD`SD9{ng9gEWbhFQN*l!;UAQ<`O_$`ewH9t~g
z2ip_%=&d}Qwcknir#15kt<eDXwNEy$Rn%2jXe3ZSr!&Kch=+4gSTckwPk*dq*`!%s
zYZdA_Oz4J<yxD#aYtJ9iONGezxobIYFVPo2R``q(C1A2pq(VY|wb7_*e>x3 at Ft`v2
zbXTW;KXlZVGUyfR7+9gl(+A)g<~RS>BwghaAj{}sh!Z+B4HJfw1N{mAY``8zZVke1
zqQSJuOq2i%RLh8ug8k;Tu-U9;<%$`JvQGr$Q~Pim8fJd-NT^g|>KaJhCWEXyYF2v#
zbR at gzn<)?Ed`QW_So|35@&%!UHL4%1#Hf0I;xJ=A1}}oi#qVq*XME9u8zd0@|JK`p
zm8e*nsRmqY>F=@g-O+-?wR)V9O|utV-g9+f at 8i#R#z^FhuWV<JnMcUqT4MGs#0VzA
zR?3#Hh8NqlFBOov)FH0lmK~V>B at 9gZTi3rYy83KtGR+ew&zP<hy?8tACV658Z<;iJ
zOR}J^8KECl`tFhRpVJ4Se{qNvnHyhiqTqShe1|1QSAhO|Bk2CN!+q~bmf2Y|&yB})
zpPG$KSspNu1bXly3A1=8oacw+ at Y9nuL4P~I>IUh*LQgXX(lFQ?Hhko3a_40ao5~P@
zDReF=bSq5+h7Sp+wH8}RTes_>jmjB+xHV#L5_4^W&;ePTlR~bT at Fm^ZlOG^k#UE)c
z4Wq8VWg$KNE(js3R{Dzk<LEUcUxJ=BF2cc$&7p|HtUz9HlUNveYN2ior2eFV8mJ<#
zjIV$f(OFi~yDy+-S6zxpI!hJ=I|TIlM-Uoq9(KzJmb+#DD(cgMRbVC5T||d}&oWd>
z+Yz~pFN2A_7q3Jyp?%|uHHRAdmED5UIzr+_eg9ZB?~DD-i^N7%U~Wq8!W|o>Y#6B5
zDakI at eoikYHvaurc)jX at ebVP=-&gARCNJCPZ7EkJLJM#+I3>#9l)$xP!_S>7V{?U3
z8`V+@`D^6GTOVF5yd-Dsd;~Rr5(nZbQ%l<A7v|r?-(Xc~1+jcbzDxh%pnp3I22`2^
z+iaXe8T_X&i{{9X`am$e=O3v;YvcUXo@$d5Pr`-<9q`n8EU<MGITI+b%QR(7Igf?d
zdbw at dCODk|&tX!}bYc31Se6XDBp6fp`o)o*8yzlDR>zZ0CAs-_DBa0_bt84-%|3HE
zy#(}F6ENvSX#|ZB2wqf1H6-pE(HCzngh}N)VKEb@?l!u43nPvKkG~<jT?i%M+;T#%
z;j at w?9W`yvGG|Lbuy0j!|8+$MNzkm|48ov9q=&t;Fbs4pIS}5vrIeZgtx&0q&Tb~7
zu%)~+Vvx8{E~10^UjIISQ|sI}4^Ad$T=7c&UciBX!sNH(Tb(uH_nK;h;?>q{3b-8a
zVLzSK$vi<0XojG|Zupxio0#h$4TjDo%e2T>RdTAS{m^g=SYp(=^oW`jt!zsXl%oYv
zQ at lm(CQW)01yhRLS|u)l at v_0*jvsaKrSrT6;I_9i(!f#>@#5!yZo1VhIer3|^n|mQ
zW<_0!7U~2`P<GTCeFr at J^=-<nD61@@=sV=84Fw{ob&XA7m8anA@@YY*Kc)nxuW--r
zvV1}#wct_3r!~+jF5*lLY2Tg3`eB#Z+|?CAw~3CL#gS+gyXqp>rt#y^4~UqeEGsxt
z7Qpx+>!}QEq}TC(%jC8j!RIv$X4tOky@|ndy4~&u-I=3625osiPmq!$KCqvHx7r|v
z0QEL=e=L+fB4s9 at WVfp~6=-*(AR(JmB5k5%6`DSsQmYyt$L-7_yAC?RdIqekhFvlO
zIeny-q&~z2moUr(w8thjb=90uw2%ayY!xbQ5*TO<0 at TQVS9leZi@ISgm*F!v<7n!p
zL7zp}plXyjixE}1o)<&SWAwVow96rKMZIB3H_Z&8sX49fvpbkpxUxx*|Mh{*Vn>mT
zxx0PzcZV5D)I(e+jyXRqRDL9wz2k)yJ!{K(NI`17U*11SQ@=L?TmZ)VsYIVf6|hTt
z_ at Rx=LgbNu4t05|MTZ4*q(zEhBY<(3SDHLhumT~CrF~G^s)1W-fbzfEoB>+<5gz5U
zJPK+Zo#`=t>MsBUu(=KsvZBOiDcM8ssOMg1EqN~1fy41)y9L*~fg=Sbpjn~x=%e@?
z&F1mzXst6~K>A>9b%Js+ESC5`VxZu*xTw>6kK at ySZ{;w?EBq*e>Ay(_ZDeE5^D4}S
z&g|m#c^_CZad2B(I)x%{>J=^6h-f1~ng>0PTfO?UqDU2^taQ3s>wSzsinHc$St0e!
z^BH1fk8pnq(q`^ez=Djfa1i<u-;pWeL0m{DXBDV;6t|Q<;<J=wab*uVaUn8_piqSv
zKWnFd_Udxyt4e)+9{f8DYyhByfLR*`2Ivz`+Sy&ItH|Ch9!!6c!H+ at Pf$6=*Lejk)
zfw at -(HyD_$vVU!$lEuQMx!H_8ts^hYCTbrXyEBn!ei71epf!)JNto2YZ?sTJR}lIJ
zi&<s4^TSO at TrGiBC92J#1X{i&9$}-rcijqqzl?9UYJ;@Q-thfLkGM-!ZUK}hTniQO
z)Pn@|C|%?)BQiL)Y0l2ZRXFCRqQAc5_!nMlMfMzuVdg3*Uu<?!dZyc(mr!=lL+ca~
zfyFx|xl=%mWyh{vKUC-3prDjUq?7aPm1q7P=);m}3J<nQdaKd(u0jTYwyIo2KR7^t
zD`)B+>Obo!z9eRDX`)j|CQss+{pM9HCEc44PWLt?JOD`QmNGv2k7B+xyVdODPo5V~
zt7S(L^RNbRXE-%GyoeHk17H%88P>W!wCCi4TUc at zw)u2bIg$ZvGB5nQnWd>=sSD8G
zadc*-sE<M)Da|;$bK2YVaODW at Qdh!%4f7Yq9Nxg<y!mQoakHE;L|cg%6>f5NAb@`&
zFI9`ctU?kMRNmhnIs+iXVY-r5H{;;XXAu*E9y{`4x}0Y=cUO0c$fw;QA2h;v(j at A4
z)rU)QUL*#KYdeJyTo{f)^P$){sAFM(0Ci4)HgMZ)rUo8RqI-6_11%<SGFGC0-5QtK
z_JW at P13>)0D{fnIyxroHM!f*bZu(ly{y)$*z`QWFyl1$P=KT93k4+}LXldChixiCn
zd?lWlwns6heOdgslkcRRB&tb<V01(Y<}t*&|4YC7Mc at jtQRoa5_H}S0T>21KMaLeR
z36`ZgL<sNJYi|TFH94dA(qOCF@#ZcrfBQBYe39Zr-q5T;R0LpA!p?S1C&uU>p$`Eg
z65yrv-ifSk@)S<)q@=-h43fM{K}#4-B6kFYJ_hwZXb@?bz0W{FB>J52$j{NjKT?E`
zn1d*!gm+QF$@XK+bIbQCQL8y#E5;1FZ%wUDiJVgwC at Kk_>^D|HM(ZSt-D9aae~4Ix
zibN)1cfTi!$bAZ<hMFAU`S03xbA}@;5{Y%8+<I!HDRboYMRtu)PpxK?z<A0_d+os>
zfhcK77?mIp(wpi-Mz-mqr|((ZajzQlE`r7J!rKUF4gm%6XS)!+)bF;P(4YWW>s#(X
zjT~EkuII|S2kLRw?0F9xmGO&Af86Ft1gW)4xB#qun6jPaXMt^w-OasqShPBK;*}eJ
zIk6<0?51*mK~Bfpr;8K5W_odSmO4}63v*1o2C0Ha5R6>lhIMQL&5h~2vDZG987piV
zqsgP<2_6y&Fobj-0tR!a*_tfwGg!J*TeV5CDqFWsrj|MD6=8m8VSu5$f7b^&mfHWz
zT=>9_Ab#LEkX;f}7lfIhQ11;%A+ZN{yWQbKW?e}6Z(+{N4kQ%lrD+FPR&ppR$MWr0
zX4kW9_$4qL2L0JF_pYZrH3?okWs at 4=1$1I_r{&#>t(k6p^Oo^%Fd`ULRBUshgmquq
zOIO+_1qCzpM+10{t)Zj}e_K&VTrz4s=kEJU*b&^9m>piHvj;}PL>kQo6jc(ZneF*v
zoS`prH(vLxAp-4w<b<o(IA;*lk~IaZn{g9`xV1BHv9<}mmp_rDtH1o}*W1KQp1aWp
z$LN9RXRlJ!24$ye%UiaqnDlJxAF`nW`)8b6E}cs<av?k0h7L^!fBi&Bwz3Vb+0^(b
zK#n-$oh;CJnYsidU=g4Op!fFCDw|jp^xLkL?gyH<Ghj&lo|+vbBd#MesGJKX-)L{D
zSeXY&T>v)uzKfjC+`@-+<=F+t;6On=hurJV9BEcqM)ip{uS_BIza)tY?)|NI)6e(r
zP;FqmxVTth%wj5Be=Df&+`c2_MdWq!{^!R$9m*g^2NzQBzkjw`V37BX?!B<~J)lEe
z{k>oN=31aaWeLs|?-?|~rfDoqs9`Pu+(lzuBrt+d{p+jWiG|dR=pVVq%Ua($7P*pF
zFoe>wi{ZHc`JwJW>1XBil<@%KH=_ZkEj;nN(mWZbuS__>e|W%}J|jC=W^CFwteNuU
z%plX2yIw)l==$JNA-N}oU&`=+`p>}nFO)-lKMtJ*o9)&*`_hDmdZ$!LHk0|M^VAs}
z2s{`9t=<CJq3<`Q2NDO&`UtMi1yyk2`BE-4JNI0~$hi6|5c61kI!Y(n;bdvQ5&8z&
zyNkvf at h@Z*f7(dXT%%1RcyZyli_E%@gE~qaMx}0Bf9R;e6P58-MD~u!XUC=3o#31R
zlRULUV_qdQ%TlD!$m1Q7aHc;So?#T1)Ql8H2^(<|WdP at 1wb@MxS|3bLVS7XqW3VIz
zRM~ZahDc2aj?^$@gkl8)Id<GF>%%V7TEhlz81@^Yf5?dEm2jGGf4IVOu83?k(7|FP
z(X@&btO*^$Nr|Ib9!DQ5zy@|!v}ne6!MRkxy1?2F)<DTc9_Yw8|Jm4b-2v`&=@3m6
zQWxd3lMNVIo$g;yKXS}Uc|z!T(eEcE&}ujEJM_EXTX(_qSi*#7yO>fYaO#awNdWvX
z+knk|e;6#wqzSwuHE>V;en<ApHS?u1o+0w<J8OQy^jDnL#oIL!*$}Ln=X1LZ#-m^l
z+Lae|=~l&T4hFyDhkq_)9WS|YP6Ax8plBL!IPNsE;q0h~1>rxXDq6c}#lKtJNd<uY
z6+)${>cEzUFrXw{IqMNftco!UoqZX~C+jz+e`mM6Q(Ol_V4>Q5j}&J@!;R)1AJ57f
zk}T3jTGsp^$W9Avx)*jJes2zF?eB^?Lf#@3Z$IAYFFRXN2`i5fy-L;vVMHTx6u{{a
z=cof2Nlq<)s}N2GJ{5A?@-lvJCrBD%FX>zdXU?`^UES)_jaeN%7tK1`&}o413tI%*
ze;MmlVe`!t%2sbXH;vWJe2igo6lQxck)E_Bb1p_BbOjg$+&sq~mR=gCI;h*{T#649
zymLe#cuCYRc7~FDb1kD~GMeYKu*e>3c?}%5;ik0g?<adaWEWVP%@R45_O=)y?h;@m
zfo?h65*diRT)u1KO8rp+*J8JL40%ILf3%dp;zVo$xzi?Z#XL}N&7){JI(E0Ix{7=p
zvdTqv1vdGZHBnF>@@fhQM{gH1D$)I)wkwVp8 at eiG<{O9=ag6%<eJ%9-3yi&4Bhq7i
z+*9Hw<orc1K=^Qxr5_D)0%C{L(idzf%QKYFq22B%UqU_+1(x{gWEROF)?L7mf1GlP
zz{EK-$HpI<h{=K)D0X$t_YHx`geS3ukROtzZ8?4Yy{AEmrbY-a_WNHB7uevu1}f`w
z4ly7+nuNGo7%Gt?|4x`pOUsops7_1We}o71#hj!`NCq5t=WdgKfvrjf#<t}HeK?m2
zkY at Epkv9EmM!Dj<^%&TD7_{V~e>sW+A|L2+lilk1wa84bB)jwHW1?L(RSg|FcowFj
z2fcFk!VaFnoR7Vl{uq-tYZ&Re4=Z`aZL47?OKjv)F)0?FlfG)wfzQij^?QMd?*!SP
zesv1KG)=BzfYkt`(*m<Mw4Gy!WId?e#Xu<nO-c+LK%HQ00DXmk(}Q3If5YPIyPjT`
zQl5NzbK6^=ApxI$r+Dl22J_|DkAS9b*(%9 at DjH~3WmDe-(vpJxlM9YTNRvh<nW&>N
zG-+*XN;)k5+UT!I9hu;GsgW>$rQK11{g+Y-x-Vp3Q3T#xcN($*rG1t(aTy6L_zT at V
zGoS?JaU7*Oji!1a^!C{Le~3)S37}w;i1d}}y0i+jl=%15mJDA-kw=i3)Y;W%eg at sA
z3%BpMIf}CJ?4!8gZxGs=rv?OY3^``6HF{=A38K~pa}h$_x1Q4O&rs+4xZh?FiLJ*j
zBcI&9ij(q{b{WZlda*Y-h&nS<C7aDR4_2awci+L at M7TwpXvf!ce^(j!spE_}4pCPE
zF`mr9tVsK{l`%FHKNJa?#J;J#XY(wb%CutamI>=8rd-&k%@GTeGx<t~NETtB9K#H;
z)B#WsT;<RO;n94QT6z&lj))3fS%`2NaL0h>1QN0EdbA>r><|)QP>w=&CCoC0moYnw
zSpXF{S0XYL3FE%7e|mkhB=8yL;BgubDYokFGd?unD--Qzs!jasO7I`1n3x_36$B~(
zVy5o%$;s8@?$^y})?&^nKi#Dc9|-p63CCK5p0Diqz(jJ(C<$lYOz$R(VjyI=;IsxT
zmyy3SfETO_3_Ux1zO!G3F(^vF{^l;M{#Vbb5DIlBGY`=<e<o2K2>{yD3s5)+37_ at R
zX0HpX&aG2-QJ2`+{d>iM+-<`FC#K3VH6P8Be1IqSf6+w}0JJ^1a$XZ~JBaFAFyXMu
zgzZVeNYM5LB(MB8evTM~>aIawrGr*3BLZ72>_dOy^Ilvg=}|4W(j;+Rp&Ga{D`u-r
zy6r9P*oA`Je?5HOy=LF0Asbu`bP{T=Msuw#GwD5ho5PF>8e-hB(iYpH%xQd4LMGw4
zdSMs&F>t}~NHzMGI-Vt at +;k*b+{_4g+(vO9{2B)%<dRauyNW*@y+VP%`-yiDXPe`f
zYDU9l0VVmXzz!uHA6^phJP||(Y=fG&{!~lXTU&&^e{=*7q?@1;cw16S^OAH2P~cl^
zloD1lOg8K}8JIRlL_q3aJ^{3ITEHMka5NlWwOxuvja(39F-kkMS_MJ_?F^sarpZ0&
zdbR?yVuk9^Yg@;s6F@%O!v!yvKMTMy&(?F-1c<z*7f|jN+b*WGnRBv4*Kwu!7wo$L
zSbJ4me<GK5*Aa>|k6WEYvcH`+7WU&+&UR>s9>i|82A at adm2uEWc8mrt2Qb(_g$@`S
zBa55;V3mHQRSN?_zOYB+<1NpqGlWioh0k(Zdie!VChs8&z19TkkZwfs_{+WiC<780
zi=zLf=F1%e4DgzM>izHYJ4?d<Pl-^=s#E^jfAh)2N7$B2uMXW%Oiq%K!bolWs94&Q
z{vp8$o*(o&W~we$`odhU30{$wm6oMq5*a+z at 7VHvv&gvozo6vU)($Kd`5<EHQ}Ga+
zn7~)MKOR29<X%(~sa{hQP4Jw`>bkPCAB2VuzIWO>30eeA1pG2tqR;hSvO~v+o_KHx
ze>nB{KH0;6kd&e1Zu?C*e=B}iF_ACw9~W*YR{VGR2}$bOVUwaKGK*g5Qf5(cVlzO6
zERyz~msp{kieU<ur#j@`ZmX{+UVhixjJ6B$NW$<s=9let89fz;O$UZ8QQEr6iErh9
znhu@!Pw(V1uM0{34FIxdbiQx7<G+}cf5*{q4%ym0StM+J23&m;$8pt{71Pa at Y7Q{I
zCGuP}57~hS4SDdpfcg}%&V?m6uKy7qYFI6e-W3Kza<52^dV3mMF&W^)8Csl8Sgx;3
zT%MMnk4U+hEyF$TVqAT)R(&%XZEpy;7H823tZn0-9}Bg#q=;l#3RdpEJ!*5=f9X;C
zSm`!i-^2uxwwRM$Q#(WM_*9DqV}d$dIH%10dSoH#_;~ngf7R|}Tz at G}3!{mWkzK<k
z_^a(6<JL+PV)!SS?{&G{z}PR_HcFAUL$J7XnWHv#CX+TJ->P%IYRr?%c8ODhZ>uC#
zjn`Q;3XcHRJF*Mv`^yf;NrCtBe>u(m5jc0vHlEm}*i$M at KuD@00- at ZiYl%4ZvsdKC
z8>oQ?U+ls7C)AIsq^4!CJxRRE&0{pG?~j|N{=rej_sUvBMm^p(qb(oV2CoL`Asb|a
z-GQWyb`gV at J14uJY4hO+^yoyz=JANhW%c-X<e!j<$g^~(Q|^oNbB3;Of75>embQf_
zYc!a=1pWgjA=?&SpyB3iy3*+T34LI{i at Wly5i7?jWP5d9<6nwSsc%EA)D|A!r+Jj6
z`#GsvF)*BvSugiGPi`o}{jkv2feqM$WNV7<=Z%At77s_h4FX5+Vqf||zTej1D4B;R
zi!3-)Y*2EC6rKKrs7-Nif0DA*=RbNaAvVUJQ4hpUhn_M5-^w=MI@&Bp$kU*?01j!D
zP?EbB6&^)TVuV7L#R!8fA%mCn%nOd<y=D1&|Fdf|poKg`vtR&|LDzkls`1-B*Dx!(
z<+7`Lu=_qA<KVdrV;S;0@!*pd7S>P#MA4E`pBy-xpxQPEMaZ>)e{KK55PcitKwl`A
zT(m9}zEi?ZxKuKne|_444tFhLRm1hAQ_?hm=I3U8g<UdKr at n>ch*>^ZQvoDl_9#y)
zap+OcCL=B6W?$YMWM5I;f|>m}A1+A=GDPq+%n*|6h)DDoIn?}kfLZ-H0Co%oK);4l
zs%UB?0x`f_MqX#;f15uk^|X?pM#`;pMB{#;1N|Mm&~BZbOSjy{we{N)#*B}{WUft{
z!~(PWUoZDzrb&G-LLZ7_67^)R2u>IZKt^Y#_Os4&dh;3d57i+g4bq8UB3bTp;)kRZ
z?d{}-BaiZqYQ;|E!5UJ3=+mwTq=ISLJxWrWOH_oM{K}che{2?tLteB69MES|8hwy5
zxIL-rR(6M#OTfxdcHn>-Ne-?V=X at Rh*=kslQonHg{vjo9gc|wO at IDV8*8Ik``W7gw
z_KEy)i5!})A?l4hQ7tQ<zK?rND8^6gN_$ROwAoSm0q*TgCPFv at 4lXd6ebiat#Q22q
z>hu;H=<I48e~7j(m?X2uEMe!J|HQ3JNneQ)2)mtL1f!G~8{fioMZmZPKp%|ZDS-mB
zvZdHLig<!sL(sy{qSj`NF^8{jdJm`x(W&EKdW0{iQ3^5~Qra^Bt!wt*GQ#&~)R`xr
zH!^u^spVdeUXb>D;~yj}ePv;t*t9fspXYrbp at y=Hf7-A)mlLr at 2LKkN=cJsckp(u5
z(<}+h^_KC#$vGM*%5ULoEmMf8;Xp#IPTZeeyTsTVg3HE_R1v8ge5fj3C<OL at 4a)gW
zQp8ylGlMQtbumxa!!DVlc9+$HpamsPC=gV3^&i~}xF(znI}h8b42{?MVQ*TarZ2p1
z6VR7ke=f2ScfFR at PYwvH^%_0zUB_+$(Y2UnNr8r1=XV&TbMtAY%-V*jME9oS60Hv>
zg3A;a?Oo7Ena!m8*m(+f-kCShM87~F;!$VzU{X_ZgD`}Okhwf)GQ96g>!Zhx<dbp8
zJld;d)ZTLM2#YNJy2;eO5{@HfBdBzfAzY2He@%0qJucRj!VUUJWW1vsxr1H6h)vaM
zTE_A8o2Ea^yhX?i12X}Mbn=7c+M;rM^X!hIUv10LH^<@mk0qKK_K~_G2b=uS`$F(O
zMFs&GpRI3eqjZh~cr{Stt$q^P>K6MZ*D-HE9UG-#+Xe5A@*!_9wtn6y(@vwY at 8BRS
ze=+^2gg9nd=xD9_!d_K&5b|%hk&CP-^60~L4 at e)c+r;vHVw?T9bUB+!;sAW%>nmiy
z8s6}fd_%AYE-agWXA#*#G!~)i?FuQ|xf0b-s%^DVbZ?YWbdLvMY^$`%48HD&^uIQI
zHRvPJ4~2&uq!$0pp~mcdAUcOke6n08f17ls at qHFQVsU=T&52h*M}lA&Qm;$#b7_!2
zqY)8I9?6z^hL5$5mrO`mAHBx|DDQ<DdDGC*i-_|m=R1~F@|KpA=|Df;xc*@&M#x^7
zIQ8OU$q9p8I7-^y#CE&F+#N-u9cvjk0z%jAg>&!}S;4=2+p7^{Y!jgK8cbdte<R`g
zu0L;1|Jy7)5Pq?r?wD^@#tD5(wVrm(t1V61I^QqOb4A?)+L_gW79h$`Qd7>B9H>Yb
zY(OEPJt+GiN&;7hfrdLVu-Twzw=>Vn>-QIeBjbN3d^#ov1sJT_eH4y%K~PvHhw+5r
zRUtpSoZ#?Lv5=irtJ_<o+~~b|e=4`MSM`;E{Ggp&fr2e0L~d3uK6l90n%@4c8}qX_
z$@oX6yF(jmSIUuxD6b$O at jOn^k(vzk`Pb5SGi`J*JE`&uZ9u!o>Z@@YX_&GFOOYTh
z^bz~atstk#Z0<?Ll1=W`dC&6S<o)!+cIStbJP+qIF^9BXKm$Q`lV4)Te<2qi;JQx2
ziraSn at ih4{8hQ4cu1YxfX!GIo*QjK(@fyA_+fs at EqE)UJu&Wa9$E=agm0BEfKhQT{
zv;;scag<ot%exIOT_2jFwcbu^N<{iT<%xZMz~n4B?H#fDk1?0%#=TS;5<*QV&0|(u
zaAX&BdC8|?dy-(-fN;lce|ebcB$oo(kN%qv(q at 4+5gQ*%2d*?DrO9DMXKlLy at +)yu
z_(bP*h!m&MJ)?G@^>$n3881ux6q({keQV(!Pv<zOYSU{nGMGsA03?%Nyt#+_$1A?}
z%*6!NIYC9yOVWN2F2}IqkcQuw`y})Q5i-Rl!nBVEc^t{>WtvC)e`V1=D%m|MX9G?0
zyST;qUS2I69|IsYo3HL;$68!8K;$cW^(sW%ASml*LGui63nVz#TxtSBq-jybScN`1
zij+0hX{2dRJtTJ-98|60Fu_nR at w-MxsV=k at N72{zHo=u%tDbft=v7$m#TXp2`OY^{
zEs%jUO^@Ce*@=g_e=`Izg1#yQGZaLzBDs+fGsuXd5Ypyshk2*>AYCL-=?>bp{y{+1
z6>ct5jS6P52Xw at r$)DP=t-tolN<+4MVH!v`mN>F@>lGKo3+pwB{;<8VBoyygd1Uw}
zm{zHsksSsAUYbT;a2M+MB(p*(pPEq{N~5_s-{olYGXqcle at TO`=hn)QEJR6|M4nlQ
zNZ0wiRiM1Uo}0r->`FO)K)Buh^912uAevsY?*FE{y(|?^EP-><^@ubZA7-KR;)Cht
zeET~+oD^V7%AG_UFTzPc{t3wksYUs>u`d6$#W^%OiLbg9w-Tp%&UcH0Kzieit?$>W
zK-118^zGf;e;rAlLj1$S at C(#+{R2qisY^Kcm&P`f)<xhE^JtF-r;`W_1FFLpK`UYK
zSKjf(;Zt`{Ea*-n**D{YPE#|hb_n(AWF35!^?oT1OyoF&R$fzg6un0SsQBg$b-SkJ
zvZIeMQTe5 at rWx;4Hw5<?_{+K3u%rp=`g*ak86AAGe}Z92DczPy?mk5MAD1vrg4nu6
zEE_gjGB?*+a63A^l}b*}teGX~`e%vv4?11K)CpaDzCXz>Oze<`<*&i6#@jwhhtDDP
zaXA7Jd~uzq_9wjln|0N#wMBJ+S-UT4qNV8{yrWvY?>eOu+GJ|w&&nF~h-+G%9t5Kq
zo;tCwf2ktlM_TUi89~@9{#;EBHF_N68+RLMQTs{<)88|xyjz)eRrI+mSCz8hhit5o
zuU&(AWLS!HEtt(1Cvpp6gb#^;3Qw|jgQEzHQ((?uu6S*MEcagCLS6uxyD{BBArR+e
z71#q8V0MUwQOZe=@yR$fx at m0bQ|~a!xJ#<Re|GJ%05!x6YOY~@o|3Y88wJ7qNT(fA
z9R{GTEXID8w#Tu_0lJMK+Yfh*1hc;v?o}DQ!U(}t<E{Pc_gX|+N1%GQqR;4MiZn(!
z7 at oPvgt8Aw6y>=c`NRjmDVulQnPpVEWhn1*ccQ?W>0%|=0d(ZCv4!ItVsv;bd>xG=
zf0EOW2gI<>g{Hxv4~pa4V1);ekxEi{wy~pi(k>3H$$6rCx%G0k0tK3M(!^}Y)f7-B
z*PW6j-`i&k4X9oH!;0spYm3%Kj6s1fT1L?M?$8_%`=~N>U*vs{?)_KM_ttxxKlxwD
z#A8!yN_sR!_&G3HMJiTj;5jW*s*W9$f8u)KaQDTY8ku!d;U5|qiNW8aPoj0HWXdx5
zF5pH=<w8Wk=E~W#Xd9Em-$sDwK7V1i6sKIfeLJy^1TnZTm8MtkR~_kh3sTSA4v0j7
z=7GL8WZi~mGrh*Pn0%^4hCAh$QLDW?p)Ywhor^&NFL}l85N`nXv)?2TTsCu{f8Fhj
zAl(T;O4{@7L2(xj1|Xq%Mzc=H!eXBDSw)(X;}<eR$btW+GaVq{Ykh4XQlme4{PLYT
zIkeV(AjIa)Q;SXh+>C;6nlZGb&t&HK?=4p at 7n#SV3Vmx6EK1zmH2YCuR8fpARSY#%
zAmSZkr7avb%F-BF@>Z+rsoy!rf9tK+N<n##t|dTmSpoe$IMVw$x9U;=sFzTK&FXg*
zHsDIN(oOIYf>AZ8UQpB10ylsK>GgR9%;#5)Il=deBnO9%v|ZwwKXcZEP21QIx8pux
z07TLnT!35LF6!qBcdxj);|~WE+{>*ea$YY9kag0NavopAVJESaKZOJUf0<z!An8LB
zExfPf!Vy3a^l-4=tPwxE)XqA&+&+^UK6$=s8qS#nm6oZYh7IUGk{@beyyNDbp1Bd!
zWxKp(C#ummg6Gi^%>i?V$469pkm7MMHma7rnJD5q^dM~$jK_E>)BzHEeN=@*F0Eca
zkuefJ9Pv%i!@Aw^#4zA?f9+Yg*J9J`_Lc16Ct{4ykyu?<+Q4q`azTsvJ$Y6UANFZJ
z32D?CGl~Xj{aNRwX|yifu^W_Ju~Ly+uHtY#M^pL120O_OOuuj#iRqT(PME+!)-gjU
zN}`_Fwtp|OUk!^UkjYq98a74=PecGB5`rWxQ!8BEypVM0t%)(9e>Qy5dw3ZRUxPp^
z6M{~3TW=<S8a&#-gDh*Ypg&W(JDh+^^a?5g2e~<n!D|(Mer$g(HX`Kcv!zAmWkO*A
zHQ2^i!#x=W28GA@>OK&8ATwhrj)=W%F)hg>f<fqz82ssw6MWz&4e)xq%Cgw4c{A49
zln9*449^dLCe?LKe>FPT!Q&b<seFWCU#%JZ at -#JLWDd)QB-!IF58>mNJA#b<Cd!8L
zcWi~{_->J3F}!=Fe}j|&zUO002f at V8U;o{VDt6gqBJ+UDMrT|V4`k7l;3+IoC}Rdh
znX_4i;0PqAS*k<`GI})3&OgmJb%Tx6=v6t*)S?#=dK19ze`jCl3(5i~msyZ^XKCfL
zXrX98`2}$KDWSAU0G+z!gPu9F2>cpDM1eVFL3g?7ylE<vC}+Q(jR`ix&XYQ^I3LD6
z;5()~sT5Y<^Rr|Auu;<L@#lE+muy<vYWO7T{%>18E`f?k54as(niH}o2c?ps+5Azz
z|BnD6{x0W}e-xiWuM=~4hgq@;L!{B4^O`&Icf5I|+G+3OcSNDxAOdVaNRg_xGImsP
z(iz&w<?dqqQJ(E9vlmNETcH#Z#R!!Hdd<IKXP at p19t358lNasB--k;+9~Mj?4>1Tk
zz~mF$s02thfpoOec=F%CyVRgS{gdr;D*;W<f%N&Vf0AW$68A3hL^pM|9DXa$=WmCH
zhuPt4Lc$NfBkRe-kZ}yy(?)|hBts!q668=gq3NE+8w>hUWN7?)uvVSLt%<ukvqoq-
z19)RC#=~U3sTlTNKkGuC5e4VLX|O%?JcFhzHj;%ajfSBW&z-A|P8Y3ccswkpGo|Bo
z;Y6Pte|G)Z)tG%cZqGGvvDY5;4yWR+peY52O#Y~~k&ufdU8->;W1j65;D`LllBtjE
zkL9Dw-0O=4bLHT)=41A9aKSsaJlC6(7Z4A0q47r^ctN7Rhwq3*%57cp+HF_w2^Q4$
zRk3t&w}<T=)XIF{8&Y_xa4la+Ck1u`^Nm!df51&eX at qC+EUi0(=v#}@aCOR*Ymt!)
z$&V~zh&A+(i5@}e?JMe(Z at XrR)SYkq!Hk75xYR-7{|P#9LA^<S at EZjC+ImcB;T}Hw
z?t<$EWO at M0kTi<cOD3}~sLI!xwJjF&nz`GRu3%R|j>Oo#>TXU#nb1U>E0zs)hHW=@
ze?`%9z5x4jd1hlRGrQITZ!_M3m);}ya^#Jne|uRj9x;on${aIZStUbLm1`Z0|3{Vy
zmNSCUV&MX6Z<n&^fRwQUs$3iQ1QjUqYI*H9U$R%Z)-K^vX8k(&q$J^x5wIx`5?z}W
z_K$ZPT4B#^iM;jR0M~Fj108Bi^$ZfJe`lXe?+Ta`vf}U17>~*YC<rrZj*$7u)DRC}
z+f(YYxPsyO;1kuw(u~*^JuU$$2$SlqeMRu>D2 at wcl;!yPU at _ENgljsX*a7uy+A3ac
z(-!Zp#i1n9p9t``22p at L{6?LA4H3L<a^T4 at uEK3uJQU7H17?!u+PMQz0;XH~f283u
zK<Zl8B%(9nJxCeVaN_q2V~yQK4c)58L)X3|4H>ftCEc6?<Xo=;FdK|{8oqK!evg*J
zt$d?;>Q#5tZ|x`mG&BhSGg>7~^0v!7HCUD?o7Rr~Hi8cA^8T`V0VRMt9+s;$_e=(P
zQm(&)PqBCt20_(6P|nqL&&(~Le<Y_*r7~68Nv+${1f<gGuE`1XH5Xm38_xN*BglBg
z*VU|+NXvMmhnuhg?vR<Sebv%+{1!D35>K=m!1}RoaEHidF6$4&aM)gA|HwW$WWkyc
zNSz#5MJ8+Q+dVdTgYhPH0RAAZ$%)1Z-3S@{r?r&F=_Wy{5g90J1(;QYe{IFOZgGh>
zSm05$Z^*4GTdXi;I&&8XvhUW%9?bP&m`J%6IICHumz94z0 at qFH`^uw!_qHU8TTBAP
zX1O0C?}9(lq4(Mi+^`0 at N||Xq7ZrCt__tmGA8TtqWqzNzA}`qZ2lPo^OvU7OQ*<Bo
zqWp2f&((S8mSzx5Rx at iYf4~}vr$)ZTL?csc6LfoiXWFI5`p7`gEKr)!?JpKC&IC12
z0q1aS2E*$&RIG8(oXEgTBsbQm`|-gOG7M<nN^sr!^eQ^QbrFGX{?)A=Z|(0^lvJNq
zr2Tu!9Q^p_o^Ob#v^X}so6bovrPL*LfnltlOQSq7%K&{&I48Kcf0Q)Si0=Z=@Zhb0
zD}JrGmM27l(JflKdrsERU+z`}DON|WivCY&;4 at 2{51p7!*o}VbG8#G&YlqBqs%#G>
zCKZ~;m7D&h`9%|t{{9AoK*G&dnZt8um(gJn{XPojNrG$XA{t>n0nE9OSRcyloSHhR
zp!(7WTt8A0o_)-1fB(?f2`<-{@DNXoBXfGG(0G~hb)dNV8G;uHpqSPF>4JK#wvpy3
z8i+w=cx~tgHcp<ua5(i2e%D&!&T0)4J-x>AIm9Cs-NNRnCTfw at i|u<hQa#M?s*zJj
z!7X(=w6R>3<;Vd=P|^<vF!sd{wMHj=lf_bte3utS#YdY<e at PW{lO^=Uul{cAE#R{b
z&at)C+^W8xdtvI==A&<nfXWx+98b1mkXGv33)UImrNj((kY3=-nLz489A?#{i})^S
ze^@M4iv#R%LxhNf82~>5ya#Z3Jns6e81R03P{@Qi7$!DxP%tyB^go)mkHVLe4hy$Z
zVV3^%)dad!f1^LeO#Xv5EkfiH{yu<BEu>3X_OB*lEv2M#T6 at CUpilj+L_CdRKt1QE
zN4a;pb^ifGepdeH1Dv`|D473N?%)PlDyw#_*xsGbf`?GmqPm4fTrmG@#gjYDy- at wT
z6gO#G_?*JU54hO at SHPT-mV`A>w at kl+->H=83}#DWe~$M~DsS9{*O;RgBPHro4AYb)
zj>DiKxeiM7r-F4a-4;Vs0;C_xh8npoGp;7&_2_yq?h%9Xjr~7*slU6G9r0}&Jdv<a
zAvGAoaaWN<9akA*tL_P~-^v5?(VzC}L)0~ff-UZ6BhOO*3wFU0X_$l8eNazR>}0k9
zj&4C?e`jew#W7_}r6eS+?qajR-NIr0BADdW+dB{#y{)dIFU__+O9UlQlB0U9k`n%-
z7mOJAFc*>hyvfLamSZ!p!`DH6B^DxKpG)s5w{j<XQtRK#nuTpe7|0!36y3c}89LHj
zQs9{#*Krjy{q+s~Kmi4%_qoDcfi2AD+}^Pof0jd}qykC_Qae8WK}<M7>fXObV#Bv*
zR&I^dH!0KUH$jja;Ige>v|lQbf)HtFh{;g=r51tk6vG<16LX2zf at _knIuc&WTKVO6
zFx at HaYe!;1iFDD4)N4~VcA;s at bkx<TR1=On3e+xv`!*GFwxrzMAC)prJXD{ElDswq
zfAqKTEO1vwAs7-C^U7A^zJ at goQ7tIt#_wA&aD!-J<7cJM*Ne`L`l3L3A8ZcN5|m$5
zq?;F;<OwgEBA0wA?z2;tIf3_Op7tqss^%xJC`}YH6s?48V!7aYZ^f)NgMrm7PzYD#
z_^I0P0QYSzZ|gEn;TVTgTLZSoj<UnRe=P>Q at 2`W+m(~KGHVc$Ek=L2%!#<M`)JB-;
zwflM%>)%uP{t!=jo0AU<LqbfpA=M(+GWMMu;Z);s>eH54wd=a3(x2icY~MtbDC+~@
z?jPxG_ow;3#fpL0KTFim0!OxMOs|+Bnug7n4&S0t)<>_Q5G=G&0VYZ*nM{Yof1k?t
z3@?6cBS&8sQdAP&5TvKy^L<O&HuA*5L?R`_rZt*4?9JBfaJ{%Op~I71WEqVfss5i)
zMuj_<%H73tC%mbWM8~=$Z7T#f>U?pQ(<z{Um$-5!_D{0PBJ%vU88*ubMwkY2-+B`f
zZdGg<n4eEPElg#|qSyMbc<`Uze|m2uT=Z-Z%))Z-jg5+s@;nBsgLeewKzKuYaP}Aq
z#&Q9wQXJ~tlRk>b{po&M`aGNXV-{hTDtWHzUr8GTzA6?ed1%0<7*U{^SuUqXm)lGk
zZdK83YAmaj4sfv`@c#~}w$e>OBb7pnU*;JM!&KA`=Mi-TyzI4Pn%=CwfA{3Ghsu>Z
z?IXZA12b2&8~c>NF-DYFj6G<e&qIeK^jKg9+IB0wS*+~d=0UmBq&lr&pwr?kvIj_W
zmriHnns?Pq_?EBx3pEEApjz1JFUb*3I at Wej)3o-38Q{KPlH$!;fri)<8-go!-V^7T
zs?C6tW%KQ at K`G at pT-_<$e-Yh$5Tv|v;*TGDMB0`W)+i%|Ob0U<h2u<UwuxmJz4bn!
zG3!NKrlEfuzMI8c&y1bWOQ8<`jw#U-E&1ljHrvcaYUzG60n=oUegm<KHZWk$700xJ
z9a5Ls%qem>mb5b%i0$K2rH(Ge5O_Q~%<g2chosW5NlpifL@=D3e|#CaXX3(jWg5WR
zQH~4YUV4+;{Nc$ND|-c(Sb=DpFJ5g)N}GB*%F6VM;o1J=%t;hq6@%pn6NRLU%fS;V
zvUxOp#hORW>-5 at S-3k8dBNEB+$_>aFu_ha+5!<n^)~tfZhOKwQ`qUgka1a=KSE9xz
zY?1b|a>{^zv`2*#e=kq4 at 6QO|Emo!U2U)_~TvQcaVfS?Xn82Yn?4<D=NP at vjG5Y)*
zYSq*Cmy<zFaaW{Sof!BKvb`j0uNprP6?F8YcV0aMNdRsHaSd(Y59fa(YKBkV)^Pew
z42Z3Pt5EYFG#hoO{}_x at 8_vcT(qVp*+eps;IdTT<ag(u?f5FvxZG{Fmx!Z~C;I^Iy
z<fJ5+Y0vWfJEV*-W|_;<X}oWBHsMt}-yz{m1y%;D@{NBt8W4W@&YISvr$K<OhXgJ~
zgiw$m(5r{HgoM1Ab5QPwJej?t`V-*AGzKuea2qU!_?GyWL5$Q`nqy^5Y*!eS8*7j0
z-JfpGl4r=`e|F1n!SB-G!3yAkpGAX-4F%l64m8`cmm`@98GG9$;}~{B$p}GrtiPuD
zj at EE!a34;zg>C!iN{5|l(?jDO$hs{w$DLq?tM7#FJ=jCXDq)5 at X)wuwmBF1zL2Q2{
zYks#)Qtna!UAoWjmIMt4K&r}Cb2i2F`CpHOQ-oT;f8U7^Wq<TUO@;#x2AOF=patQ%
zGLyCaFD2y{q{*(F2Bs>CO2@`{3v>-jH~k9cO<p!U<Q=!NM%(;G)EH^YGAN5jIbp-J
z16wU>b9O?A0=}kL78~@NKGz27AAzj=q9S91TEDAvgqOZIAN>A}i0T*^pYM~51qt1D
z>H2P5e<R&Pqb9wKZ}&X8VD4ZIT!2U$k^pj25zG?`w8_2lMl#j+Ayi7a5X%^>=>+C<
zi^|TfDlG0T=KeS|CDZY&W=V-1Fec?xneBA-G4y$MxaXq;iR^8_PiR4$=l1F&Vt!->
zB_t0z|LnEUF__6S`uKbXQl|aki;w;^X#b&wf9y6Aet#2s7EU6QhKAHGk-c*(Y0!3x
zffXegc?}_!MBb7!a4+vUd~|X<xWH{}&(P?j9wk|LHSxvBcmyGa_{Rgoi5K9a_O7ZM
z>?QKApl6Nx<yU-v4MHQW+$GX?{dJk-Z=JS|L6ZXJ^^dtKK$=7QG#RL;x+!mv4~|b@
ze<g&Ly<KIrTsK4u!li!#D4;mnPT=!P;%}#HYqZ2G<Oor14=Q1z!9~@{n*kxTqnc5(
zS?SG2)zzB4ZH0gbh7o*EYu7H~YpI50Zi#lYahPrr)C-z69T7CkiKZG>WKmDDd7@#N
z$SoSX)Y#SU??+_yLz-9OD6#@(q<|q0f16D4PQa0XSae(iZ)1Xj&ZsK9oZC-7KIvz6
z_!6bu#ovf5WBOiopfv?9r+SYlSD_?^HRjmU#m90zj?Wm{^bFG+aoyZ%e0!`WoqD^X
z|G(oepkj5s5zL><mBG!#Fb}9*tWMo6N+Isz5$KR&MYunQ+MxQeHgcW%^yMuxe;J%|
zOfW1t{cqzRi}y6fb7Px}q?|BorCWFirl1GyFtQ>s83 at h9rWh{VnUrwg+3^mN;-8DD
zJk2+vUY?R+Beq^DS*;#%J<waFlPhB&(Kc1h=lJY&`p}K$!Bti>;0x>ZHIa&)(L)|O
zM|WAiNl5y!CGrd{xmeMQkpMk&e-I#GTGRO#GuU+t<la at aCDQGuB@Hb!_~rnI;_jFH
z|7lHJ2_ik!<9_CVZL^&bagnoK@$<rH4YxGGiF5Iyp)me<L_)Aw-;JH8*+Hh3W>kz#
z_t2chpS<nA5`@y$U?A!M>q at GluI8?uaBQP7^$_#dSX7YShp_YwMr0<|e at CWIP-%Co
zv`_!WBy_K(?m_?0qJD=e3+l+wVqgMjKT%z^Btu)$+$qA~I5fk0?+%Un^aSsr^Yh4W
zn^eM)hTqog%hc^MABqqhxI at UW{VEJK06;qB%z|`_Ee6{MSMAQadVtu2PRgu*jM66V
zxi`2ymNBk9{W4SzFqpc#f4f(vYeS>1LaR#7NS;v$L_*FG(`41QChrSouL|`{KE{?w
zrIPo6sfwz3M(a)97Z+iD%9YRyBj4GaUdj8~{P{3*g+db{9T?>A87|Uc4fjwJO94?3
zah;=5UFAHd8-!fglmmf1suKJ7pep at 9{)#K-f@&UiOX?dC$^`4Tf0?`v%!%|%BI&Lp
zltrZ6yBBwA+lifVPbDl59z+z~^(|M#a$aS7-z0~N1^qo`;|cTu<?S`!)4c_%tci>O
zSVH7Ds$ZeDI=ZSB9T+4%!(N3RIdh at K9f$V5naL3?MjiN_>KCOY-n#^(P8Z5PHdP`Q
zw-hapkvxfFm$lzQe}`MD5xwKr4t$(AYW#>ycpZ8kv;tc2w4gf|`^bTle$VLxvERrj
zSKv>$^O`GhVvvVS`q`9j(S0K`^7mBmbIWRbl&Y}*+l3Ge>2nCL*Kg`nbUVmuKF2d{
zcGO=WXyQ`f_x1UoTnli3rF~{=>Sv&Z3MWnw8H;eCd#w~+f2xo}wdyq`mxAR`YA)_Z
zD0_)itgDX;taFoa^D+M&RLAgbpP|&uD$N$M&Ja?DtU6Yqn at Y5W4$a2aR#0`l<sU2u
zeRKz8Bq_P+P6EKSin$yjB!871uMpRuzK3tJpHmtmzxIR)6pvZ&e3f*Kah*!@`J^z#
zUDNzpeQ(b}fA_Gc50d1^rtdI_Ta<ijWc}~S at kT{oK(3_BWe(XZSt&xE0UV`$vr{6R
zujh=(D|~ToJbNY_xUX2o_lrMvR|~BqmF-z2tN4e3Y!MNzfx at y7?0-f*F-k^+s1#L|
z&~ecXg7$3ZZ498vha96f0L{ovgC8K-X-~B{6J;ZVf5oL`7`LL)%4USFLuO2NL%_3Z
zCH+hHttXj)ek#Eq7M{Pmo~R86#4r{!`qSvypDQV;gs+8JJfwoJzbhg<wZ}oDu_w={
z%UD<<*d~cs1v2o2S&EBTo^ql&LPUXK?g at S;6Zniyn!XC*V)0gD!UvcsOS_X%iAgam
zsL0f{f6G^kAIM%!8J48NmvplNYYWn`KNo0 at aAyXa7Qy6WdwdUC_cQl+KF$@^T(v!p
zi0QbJk=mhY^3*?Fd%r5MSA8!&W|TL%zhx0t7c```Abm?~d2;_c>5Z-FU5RaSOR1{N
zVv|}5&o at I1Z6(E!+S%g+Ccke4!_mZAU)+L~e@<Jx!fkXO$U>bj&8n7mUjB5-b%I6*
zubdBN_h>P{(^_)GTzE+xDIs#wd4l>$aKzDB^@I2;HC2_NBw25Bj#c&7_Ujd3iB=$~
zALf^{Kn`X1v;rGa-=ma1uJIc!L&$hv_DrUOWLgbqFQT#uja0pP_6gWx<*|U)%=5i`
ze^L1eZy at F~&-harZ9`S*YQw?b#7YVr9kK(53~B!APzD-sQmXbPjHO&vx<!D#Yq|8i
z4n6Z_g+D1Wh!l>a5Irs2m9|{vpJ>)?@zy2yNTSvktNAF?vuf}Qx>b6A at +gl>%E7H#
z#m&YXVgWthjCy27zr`e;@UF<-qels+f2b~a?urGiSfIB)zs&WXu9kzOtyQeDiRGQu
zo)BiyiGoVq9ruh3j{l7=FWai8Ao}AExznj(SIo*}gRm<kfxG>t58Tt5ZFs8)W7<$|
zj=J^N`i{34IMcJTuXUqTai44?_ at v17G4F>AAF_b?$tE^B_1Rp#!w)BY(8-nbfALub
z#o+tocqD8Ay?mu&+vKDf3?DCRHalHnKA^S^8xgVqW25YcBvNr2$zkjYH6*ywRBKxa
zksRgTpr-gr<v4Hpl at S7=zMKsVR55`;BBKKlpb5v;e~Yw=9mV at BbB^cd=Rw<zTsV3f
z1!Ls2xJczC%BOa#+DGFsyNvj_f0(}Yke*gXtbUOA4iK39vXdE{2$@RChV^;s-<fYl
zP-Z*j at j5P1;`=L*f6pGIjS{^t?7_DhtpNY7sQVd_a at v~9+4oHF2!a0m${6Ge6_GsH
z)s`d}J#-wN=AwP7450V^qubBD=Y_F at VA$>daJhPR*e_4F7K*LZI7J56e^YRi7tw9S
zcl5RcM$SCd3mVpykGk~^WxzRS^gmlH6C;sC|0XV4zcsr>a=du1>>>0MM4i^#1a<Mq
zZzf$OVaHXg1nIQkxhfP^YWQ~U;Jur;T^vv7y;$=wnhW8BV##Go*TD6P{*khMAt=v$
zHSKN<C|@c~<~=_N7U+|{e<iN&S=GDco#_Eq`8v94_+E$vBxm$eiQ2qexYl0)A#^D)
z$XRCEO?#j9)bu0pCaE`H0PrV=YxWFdh;>`?Y1fAZ7>v9E9)B=m6s`CATyp1EB6-Mg
zN&nR6(Sr^uYLUrafV(Qj9}9<%roCVRrcK#n<grqOYqex-;Klv?e{}|jN9|S2ib2@`
z&fykqu6^UPK{_vV3&|M#KK=OCJb>cQh0j92zY`xG<p{zG;dy&I4^rl++1OX9u%Pz_
z&C=PbS=TQQ&snzImZ70z;xfnMl9rFrn2R+Mr^TM)?W<itVlkJlI9|C*tab#<FgK{U
z9Fn?cV$MKe3X;67f1v6!>Y%wFa>cJ>?KJ<}yK&t!=-CPe>-h6$B`ata35OwW*p&SB
z;p>owP~)eP2WQne`~lE`3RdvJhA}1a)2YY>qPW)oOHyu%G3{jZDLFuV&X(OiOV-Hm
zn>68e9un#))i_!*;Ec9pL#w4>JVvX;OX3tyl~=E1(xxyre`38eL7B2cHm`HU&x#&K
z{r|yhKLkanZjU!{IHHUV`(*fjzwzqL7yO*G_cp&J6_nba#&E9Mt>R{)=j1PNK(+MT
zLNVWjS}Qh-LG!sR93%99KO^YkRSuAQ*I?F`f%4C}ulP|Y1$j&rumyoiK&!-Y^ZltW
zt%iY2oMe}Ye}MHQ3t*>t4%v5`$GBZ<z&<~X=Qod6nI;<`!00i%U)A^6htK3+W{b^^
zV%v`JQOp0aVoRC}^T84ODXS_Yn{Vg9p0Vsh08|A}^lI{t8xp=69YI)Gw>&uWNUTbf
ztVTA+T2=wI<Qmc6rh%6McY$lvh{Lh}Rula8WXMNUe**e(A*(_|7HbOZ&Wk-O`K^h(
zj*Dq3 at Qavl$5{<V+-EjwYPcDe_p-zNz?tHpGsfiDJz8Vh^U?0p&v4IF>sUi~=X-dq
z<5AooTPczEeBWm#osW-9Q_m>=+!J)nFz`B$#IR2X6tv#f at Y+?6oY#C8oF?OCgYH_>
zrjcRwe at toRXAxKA@1~^2fB8~#CIs;5tz=61m*;ctJMGV04VEGLvD^c&IoZ2V at 0LhA
zDY0k*EkaKcb6cl*k5-*BPfh$BuV3;y9O7U~G(UmbYF+h={%%Po!x<g&y?M3vNx2w;
z1JhueizOEeZq$~km_SX4^LU(1ABtH^=JB@*f1#Ajh&J~ZLS9eV{SwupwfX((wCo4r
z%Xu_?MGBhz*s*!LMcg!8us0*Ut)7bL%?EZ3-Yb3!E=i(M7~T<waU;HEGneAiC=@jw
z<;)`a`YmZEfE4?E%t(}_xj+LDPJl0RaOlvnErik^X at 9hya$uLuElpS`k-?Xk|2qFp
ze{EqM{>72hQ-zn<h2=g9ZHd@`S(mBTvi*X at 0YTcrJS34=UxF!YUxOC79q;-0Fm=mb
z?89s#9~N``XMWojpc|tuM3i)!&}wo{JpfQDW at Lh<3kznrmYuutj2~lcd%iUo%;D(o
zg^~&xYa%vec`-&Fdg3x()mIehzFWLKf2;jm_~^9BQRK|X5II^FmClB9F!FSS8?1zH
z?8RcWMYI{z2 at OI)@Z%8!-uOgws6V at yQxkGwG$ifW_pI#uQb&-!R<5DqX8cu#?%a-?
zS#3>=$PAcwVqu!ladGZn?zXgCd5-eNi-HAbIuHTXo*9W8`18p at DB1TSEJ>b&f7Mh6
zwQi at 4mjGo<RWObaqmd~M`fT{|OnmOkrvSy7uc=<+_&@;3E-0tmyz&8mC`ai4!JL$F
z4aNZ!QY6ju?VGUM5{naBi!VV at dQA^sU2EP~|1h at _c6$&tT}mL`lg0BlkDWkCI12Lr
zWnH*s3dYSdqcqP*KMfv0i(>Yjf4?mVC%&*P0LLP28JGs`{hnM^rL3+kjwk*B{iuEu
z8mc!|2!56eW|w#b&l{1|ABy~%wz>aUkMB|5Ssxfvrf7b~hu(@b{e2P;s6=8}X&Hx>
zpE}w7plI#4Pi+SR<|}g#mzZ=}VD_$mIlra3BBid at vtan$61Y-Nm at pyde=saFIrr1g
zVCC>i=s#}hu&2(eDLsi&ZDY&y)4gx#lmb2W*?A*iYR$>f`&iP47QUWS^2VDhLvoVc
zChS9j!WKI|)_7iGfbb1!2o|~(<2SyrQL*)GoYMEh^=*%IUd^C3WyjY3z(n$dxPg=C
zvCsI9?tUSj7up=M+uNlre+Ys&5rQx#Q;<^)Op4m%>C#?b-OWzD*IT`V5vu}jy`i&L
z+9>}0ol%YNJSq2;8!I5v;hJ<wi-R_rq(26jjt~hejxlJAm@;F2I&E1bR_o>yVI3$(
z$IKt<8NsBIgtigPsh`7yw2mLVl8~xVae+bT?NMWy$A{9McXVLee`Z_CXb*G5|GX~Y
zasV&@(hDk7V;0IMPbD<~5(!^ZX6=%n72-^Ph>8{`geP+Be+Ls$rRp&n!$lQffj*IA
zVG6B`RoBKN0|(Xr<fA($Vji!!wl><f5_C0*F(;!2D|I$S43Tm6<`RT1+SYaPRymhz
zOh+ogoToR=r~rP<f3i4Ze)wM0I%-Lwrcf{pD_E+Xs~pGA?}FfiyO-6Ie=LX;Ef}Iu
zR>uRQ#6NnYC9w7Wf2MK+IOs2b#P=y~6fZZ~sc2nVW`1x|@hN!zdGrvWP2Ap7`wp4S
zK})hS6TlQ&=zke`ck|24_M&<c&6co_eUX=TBZy!7)T!72e*urd0WZQ{Tb_s7ITO#Q
z{T>;SRn$ya`C=mZBrHaoRtuYq)Y?DPy0Q#FIW47$DNWb3SLujrgfUBQn=(mW8DInN
zZyKifcKi=Nb0r`jn>KYG at Y#dSzZ>2nRmc2S;4<=+38pVYQQ9Q^HC at V6*n4;%vQr!o
zs}kAwFluKBf1EDlh);&=L}hT_FCTs|jj(L7Kp>HQ>nODlpGb2Iwn(mY{J{>WkR{EI
z50<D=$Moo*8G#or;1>9r(UP&0NXIIrT&Y;w2M+LKWXw({Rr?0Sy})@xz((XSZ8cIq
zMF-!iFXB#vyE0Hj5P at mXSMPwtL!#Ms@#*I+i-c68e^sulZ5#Y|<7bddiwLT0#%jUI
zogdofQBlJ<15;g+Z_Ij=(Go`P0zd=!zbl8t+c&A4I{;r>smlKZ7 at pHs(x7S-+xJ1v
z-+#3mdXi`4YYYoitlPWWXx!W8+0Ft_B|7!*4BMGLhzXsulcp)RTq{uU_D=blJX=kx
zkVs9Ge=~^x9=Y=en_|2G2|)J0+=1@>B!pe5CZ at y}zX&_#qM&wDK at x~ib8{dHss08u
z`Nb=VFHp(e8n~NxxxxiWKDQ?b+kGMhQW=JCLXluuvIark1F4IDkMDrhIM8J|6e7}%
zUgi~a=D;J>Sdpx~AA<**Er2)?uw4NFJ>e)=zl*;*#eb{hX={9Y?Nmpoh-U+TLO}rt
z!8r3D7F}l<G#X~B3ZNS>iJEX%11rT4;HbMqpC<M3ug0sDNb`By!iJHqkGz3Jm at q&d
zy(@-R69yjLhP3Ve%2l7o8sAgPnCN*DLn`$ug1k#*AWWW+jVyO$j#F@|6CChgfr~e=
zI9aO;Nq-RxG`9VI%v^{2py_4&u0qm=ZAB8s0yLJRsi<;}<mr<XJG??J+VU*&=5*u*
zFR{KLo(~RroU0!i&Gvc9K{Jn)@tQHSS at sv$&y7x1%DZI8hi>U*520yd6zL}AJps-2
zmHYI;g|v5H at vp*oLYBa4<hPh2=F&YLcX~FqHh=aF(+mY9f$RQ{&g5lXV**~|2t!0G
zX|+=Hc`YDJpbJ)G@^+%>ezsOM at H-3#`DN00D7o_tAg8q$nk3~X`{on0)P(Ixy3GS>
zLBl2fRK{m2k}mcQ;g(bQBwsQb- at c&AZRm0rJhkm9=Uh5kdbgChU(b4WO8ZzF1tg+6
zkbh{~b%umUw;Ii4l_3AFT=TFvGlKJkmL;_R75eYvMDDuhM!XrAeCH}ID&m-OD)(gd
zbwE)0*{`?=L~#!KrHOEIk*v%l#W-gxir?XMeaN at W$)J;DI;GG6ypCg41ckC(Q5&=9
zR6B#5Sy{v;@f+@`kDfi3po(wO^M$G0J%872Wn?v_zCXmuolDQ0C37x@&5(joz%a47
zPKpj at EjQ!UDm6l<af?hMe&d*vizP$KCn1ufK{@{^q6E0~Yx6M$WWZdXx(H30;Ixh0
zai$U9?}U7)il}ZTWOv#vHBo~TRJqRu^n_vewg-e%vR*?VzKWb^!c7LGtamy{r+?>Q
zrr9Lot6GXo8;0Vjzm|MYMwLk3?p3a&OEj*C9~`t39dM2)f&Mr}$?>6ETjJv(^hju=
zimduD6%rLDssiCz83}A4oub;YVC%l)=gnAJ0yR9}+1u8mot`0Xr53RgI&kaH|L{1n
z;LI05?(JsV9q?{cT+9-^0~_`yNq_z*n%~M<-vc~^Wv;E)_n1TPr>&_*O6n^ag4aVV
zvDgRmm&d6=Z*2R`XYgWOmXQ$HFDPs1u*RaoNTqroZ62A8yiImWT+<3^O%5{q6i>+b
zc7^BsXAp!y`?$9MM?!#MqgRq?hLv%BOq-k_ty%WYl`$B4;zUl)oW;W6Zh!S}-V38u
z=O at XpVjtmod1o7?3ep<L{B+_s1hOqt2C(@aQQ~|jw}=2yxe+O+=%W#K@}6WD%xAJw
zR_4HS5PB0#2HsqeOyD+IQH&X9SF|%$WzA&sw~wWk2u~`2n|DfNv$D|5dj~Fc%e9jC
zJ>i!C at O1zy0(b?+wKXt!1%C at e3ra6ZGnRlgaodff?i4Di2GIi|k2k^a6DxH4Rp8C5
z)To3xO56T31&sNqq^xVkRyTX)csJwtE|Ru;%#Z!<Uk1?7#N6;M7xn(ka`7K3#Bt|H
zG^%sH!OZ=qN_4b0<NfIVBx6w3w_!ohLWv(y;~-Yidsd at qeWd^{^MBu|uj6oiW9nb6
z at g<d8lu)&ry`W7zEu`>PJ$8eM(w+)6NT4S at VGZ=95S$M-u;uHUWnI<$Jx4H&F~HU_
zx%B6GD(oXww#OJUT=oK&A&7vy58^-8U@>9FD_Ipr5f<%gI9*H*%q-yZp(uuG-8B-6
zYGyz#=84E at F?{QC^?xq_O3p?$tj#_>O8~wLP|V$l(F%2+ZR at 21)Iup4fiYmeSSSxj
z!x4Q0d|TsPZ`Te7<sl0C@;nuKJ`~=GvG1*U at 71&Q>+N8$4yH+#al7MOaYCcqt8 at l;
z{EM5&?9Q|K1Da6l>{R#rGqI#BHh0K3`}$NV9A8ODLlxeVp?{{UIBF+g(v!w at LZ)B>
z6+bg%ysxN65X^#*T-IsS{=5XuIexSRcK&`gnjh55_A)bpS~l<tzNEoJJ%RBk#IK5<
zWh?<LGFXMHIFvkBfLe?Y6)IGGt<lnHD}757#LV=-oWI9|!<t2K^Ak&X*6U~jV!fLR
z1Jr0bW!=Fr-+xP at a_Mz||7JAKxh9ewQuCQf9v02JefmN)!2Dcc_YOc>LW7a+!a9<Q
zs<-B5eE=jkVda^ig+%xQ=GN?y(>tU+HY;GmU)ND-0I;is$8US at PDzQ>Rn}2xxB9>e
zKsw8~kI_FcW2W<05~8dS63(n4qAm&dN(uN$SVL1Yj(<nUcfDYg?_t4cEX(1&7OQ!v
zRejXVq$?w%>z9tqgd&LwYEpuyANPAxA@;E-u7GjIPC>WKix-g^;_OYsBrn9V4jyxA
zzm8)e41LniC}@JKD_PyCEO$so0|RZ=#>&nXG`*;vbYOV8C>1*A{}=y(V61!@*TD)q
zMEDd+?0>tX<z8$_rK+k#1&dWPLP$2co%J&~iR*q9cXWbx^#evBg%+fsIlOYK at RmFH
z5=S^4_CA at bpq7UP_qev8R~>|6UNS-a3Uv8cz9U{i&eS|W0{g_@`1rS;^+Z1*D5^Z<
z2AF9tzf%&xqy-ZX^B9SlsL8<T^#vkv651{Yz<)kjLmb at 3fDuKL27%3fp;wu4ai2#b
z>cWKD$|^-Ja?MMj4|%>C?vw>?!UAv6dW87Bg6#GqaQpdqB{R{wNrMFDzQ9<>At=Z)
ztidru`RY$WJ_}R_66=7B^ZM?i&AaA;CIJIxc}K9>QNWOwO7+}9-%2{biI1{kiBI_>
z+kY$IQ#4h3_KSoU6Cu6B+kH16%0ntUV#XTJF_${u40}zaNMJ#f=OIKRqmqThPbFD!
z>LPK!^1(|8rxXmhfVjPU3{3XvUd;uXgle39&xaf3Da}?n($7)m9Rb-K1k~d5`6BL<
zDk3n8*XQYli6D$*ku>(hQnEC at u4c_#8-L;?w}M#_<79yuBD3SKg4f;-poG4a42)d}
zF-3!_7Rsk(ZminoGmxD28~R^y3p_*tDl^#IphzDD!fCfi^M!C}$*{9ko0wdn_}vPH
zITao^0 at zlmNPx!qywP3(Sba`th@`>Q6zhO3(zV33mhLyZ<b(>cus2e~C11?SAAj$B
zU81SDK`=<rqg!^TZJ@%7T0UuTK+RD~H6~&tonh8~EI1V4aH;B^p?HBJuW;bHsUm!;
zQ@*kGe}K$?G*-YL)09V(LyC3!)1#hlwtn#u?D3hmUvkxaaa4dBF*Z~0-Ln-$lwCDb
zmBtHIl^g35aOOisGH^aNk^GYGiGRtrvl&O*SC(9N6n5 at +4^0ND&>8)Ey&BWJi at Z>>
zJw;5MPW8FAzipF5N`Fto(_VveUcIJdosOJHfK~UaXQEY#({ra0QO=Ui9OoaBP5}2r
zpSRmBQj)$8#oEzRh$~}?9juU(8q9C_RojLz&H)TTJ6)iI52f--jMSrua)0_M4h49#
z8wslfl1{QMfA%s7S9-1XF_V=o!iuL`dXP)VkD%vw_I^kYmaED$Wo<HK1%Z#;$b^Ki
zF`#&R#*ba%K~?_M9C<9$w-aC!&TPO99o{`;qoc&W&;D~{-T=M+1<Sk**VSW*yiqki
z70*H!nG3ivlGbt_qDB1Cgn!%@nfW`zNan$(d&%olzfgkenvIT4Y&{wKsntCP at pUu4
zNUn*3Bh4bDck#Sou}%W{hii~_`gDhlhrBpcezZyH;OHC4Vsb_xh+;#AI1wPV&W@;o
zy|7T#ecH5wBk7Rg`xd)w96P at 9-I(!$Te?!6bbdrt?VxG~5_o3HPJd?Sx#U*6Bt<Ti
zXZVK1OJ+&z?OK#SM?IQXB`Ly<6JO=FT+I3Rx6u?WCj|cwgl@$OXs59XFNZ0MzK8el
zU9lN7xKdH%^+F?T^7cUFBu&o6e|JbjjTsa at tgCb3`jqj2Xju%BI|^%rm>;%p%L{*3
z%1Z{qko at RQtcO+k%zukE*zbnp1Zo50#RM&8M2jWc2vuklqW!YZ1yepeZO{-*M$&=W
zZi&|-YWvWb%4`mc*zhuMao$k5^y1fmz~v>8gR~DPc;HT*bcK=`9CqSg(Afg{qoLt@
zG33k`mawMbVoYUG3vuosc3MI<Drj5XsYSX<kbcKg6jleM$A8Di3*9qhyB1P=2E$~_
z%y2g3tF0~lB}u?RIjL}e?mjmR0C3N(Q=Dle=8D+FyqJ~JMTW)Y^3XhXEGutim>3zX
z1uA>W;0<OX!+ocy^fUSl>0zbNYurQF;x>2>9b7qNUKJY!4bYF!J%Ycbu`S-YRUm#%
zxgMt0FR`#UG=FRycpxa8<O0^H^&!6ePYsxlXXL<W`H%z!f(I0}DVJzhRTZSZRLsTa
z5(y#18vYW3(TW%RQ&M;l`<ja(7i6H_bsLogIa;t_jqQboGb6%3Aa%ShanQV{q+uI;
zJoqV+1x8@=>e54AcnL-)24D#5uZ^v+V~aC`9w<gGCV%6^sc73N%D{q<QBs`Bb)4+i
zqvuMSBfdiy)g$^Pw#(6hDDI-NYZG381R5xI@$*pZpf`JblLYDxNM{N#7e`P``JM-@
z;QxSvN!{WsKlW8`O>JY$sbF->r=F_6i at ZMGEggCA6>2>Bk_=`CKkbX4Y)KCwKY4wf
z0+c`nTz}K8;khiwKvDVnG#)4q4BW~jq?7eU*@zxA2~s_h1FB4~500q4qOGS*MX7Jv
zTM;{PhO{vE(mPhkJdxwgusa0gmTO7yZX>m9%{^v(?5 at j(cl55n0vrm at S^X%s<}80;
zcLu4O9tcQDO6HyNA%Y`orRsHAb~TPh_6kzK&woB>_2_`R*Da%NhZ*^IPDP5 at bU^gr
z(#5Qeuo7#4N6e2B0%@_R-N9QWIr9z&AHV^jYXWid7wrFdaVj<LBLy7nLK-=)rzZ-&
zCj2Sg9f$)_ncO}%KLkuqZ0sX|W}4bS8PkxF?UYI~QMh3V7MoQhg*ewJ<mqmFY{aY>
zJb#!1KW2hTx<P;0iAF}d|CF^UuOF>=0a8!pQ_drSYWF$A22iyzL8%es$w!SK4{};+
z<7qIp at 0H@_`Qt`Ay7`)HpmfhR{@NPh<biOSE5V9uoI-_atYx=Oc{imaQYget4=*_H
z;VS#1?smh0%&>TF72nT>4g0 at 3yA|T+r+-(d8X{di%^RIIn9(?bQ9EE{3VgHrRCNwL
zuwVWEoE__ at c&SblcO?xLPMv(eBTFcL7gRT#f^w>V`xWw?(*}eXzYFVQJE{)o_U~Ap
zj%=g|9>k!yvvZ3{@5g2y0<o!O?DTAw^dA|O+<y^40eno=#(Fq|Vd^CzVq|Q83x5a6
zk?7pGXD-W$^@<`v4gm@%ayYmc+l1P#bO#w)X)g_bla_TFMaeX@;%>KK*s%Ph0aywG
z at vU4XniiQ~1gf9w{l>18=O)E{43UAAN`?w!QHb7W8!WMb7vEyZtfv`Q-z>NRFiv85
zS%aC0$tN8!;)$VD?1cRglj83S^?z1MT*kk;2Q5i$*d}<o|76E)SVThosk`EcM4Td`
zm*hkbUV;^1DO~hyw)r^86dkrYPmIO!tVRQIKd)q`flD6Lo8cmg@#=O9iV6-RNT{UK
z_k4aLQTQ#tfzVrYe_>+<P<QFYA|+ at P!U$WC$!7aLGwpPoDP76_3 at XbM|9}4H06|;d
zy&)QwHLb8 at T4f?7m=-{@-Swr5?TXVN>zWbMtK5>mKck5JpYh8==Js7kd(G5n#Za-4
z`-!#$=L-eDEcxMXoa at Oa9|cKBt#RcBebQ_U at KwS4r`%GKEimC)K+}JF^Y7<s<QbFK
zzQ)VZu?P^Io!DVB^~M)o)qg3Px#7LA)v%vf{L5>y_UQQ9e-6 at gd(G8_kH|_fF#lbr
zP&A00Irxi=wqcxLV+vEJj>7$Du&M^X?;o<8)Jcqa(pWgx4fBAN{*s7JUFYcfR*R71
zkl%m;k<St86 at d-OA-^`H1Hn;$=pd+-5!lCeST6y7C-+7$x9lMhGJl>-D))bodZS`!
z1CupkfC1)LnpKJe=A+In#j8y;wqw~_;@6V)+>}Qg8-LsFgCu&Dk3an$Ah62 at _R(+=
zQ9QfOX|xpCSubSudNAG at 6DXH^DDb<yPdB;kz-Vq14a}L7Q4 at _(0aZ>L_E%3^QS6KM
zJZC#&bBhO5>4aPuXn#H`b4O8bePo-uYHxh;bXKB=DWkIERbWt$SGKm%npCPsRlnMg
zG<7E-B>f}DbIuR;eFgy<|E^?R?t>HD>b$AoRX^Ue+*3(S#teNF_lAvK{$)bt8GGcV
z>l&M7>%c<v-$b^bjHH`|-4^ACxGf#T^k}~=>Ab;AWfbhPAb+F!Z<{D>0$_>^ry3l1
zb&pQWG%qXR-8~DXm&mMnr?6o$R`|55A*$->lizwgJ<JSfri>*e74MPm7C)Ry_o#Qk
zo*V~P`H_S>`@R92Y|;y8n=s?unCEkH=6`N-3mSEF7c?2%^)uHIE#aeQLyJbeJ{$Rx
zBrdj6vPC!(jel;w{C`KBDCsH3gZ8oEz&$bhJrB%dfzp)(FhFFmgRBgQcAH5+b(+m@
z?AYfs{}b>Hoi!ft8Fch at QD8ZRu&5AKvR~!VhnaBQSS*ADeK7BNr-N~*!*@e0A$7mG
z${{3rsYm$pYglFLm4}`=Z~huYVk&EUE at S5LL_xoKjeqid$xaHag>Y2&--2vQdRtG6
z?Ck~{_+-oNnx3IMCKPx^bmyGTd at I5avKi9SZ6Dt_^H!QokR)hLWOr$8yCTpc9S;S$
zD*F at 68{>-;{HflMbMb|u$Sk_Gbq{)SpRpTVEIf_=(owUoxYg$R(*~@aAE)~?ZHyUb
z8HR=qd4H)L1Sm5y6xD|NElSt4Fl>vu;Wb0PEgx{GCFV;EjW$z5kMfU5wMo|pp^XGe
z&!}#@)Ow4g1wM$r57=#JqqCCnZbl<_VI<R!lg4`Q5FvbA2_<rVzNtSHWIGoP&zasb
z<;0TxM;_e^sQm7`00?^4hPU&!jLTvbH%6pvXMYu(xqdUoiqbTVe`hp9&fyV%mRJO7
zt``$xs$Ynkf|~(~eZ{%f*@HW8H_Mf)W7E^ryp-$ada#R7Tf$ErAaVB9udUPr%c`jx
zP_}_rla at H#HQ2`x^PKSO%Djo27SzOjymp8FTuv8DDx<#pe!t63Q}iEoghWhuf1pj_
zDt}TkSKEx`dx9SDV$Cl&{=uDz<|k1Ur7?E<*t4k<5?Et;IY|veJX!WMCsYfqsy-!w
z8G3I1A(zYVmyYK{A2%x5I~Eg)#Cb}4I^h2UOxk+j)s0qI%>N?Eu^ZQk4o^k+4T at Yq
z`1rPT^KhejSkVqbW7k at -jyM$iMY;xk3V$G#$7Z9H;I>rh>R;X+hMvY^O>sS3MWRU)
zI;`n|Q8UV7T+Y7`Y!qi!u_a?c2SQk?xdow-6M}FDyP|2+Ofd<6=mtEA<Q4Tj;bDs7
zP|-+u*^YE|1`$w|f#;iYtE*QfE)fOWybc&`^oHVP;|dmFgBbZqRI}$zF?`f2#eWBX
zzp5_So)&ms>kKWalw$Z0=g`S-ve*l=I+j~2T_~Q?(rd34q$2MICT%scTF{KbuWoNW
zNAyqI5Ss)N$GS9PNqtFY!Ptxct)OwWwoRbQFib*Ni9zd%BwOdXaEs{qw%9#_geOXH
zQ<$x>zJe_*vxP=h#l|$EOPH^yJ%8c+((JAXyFlR;e#jrekVh_^kqquC>{Ax(sDm?C
zj?LFLG!LTLWD9&2 at pG=ioh-M6L!9b0SbDpCNyK4%rn4lj`g64ZoxrjVi<{d(=q0aF
zF0+vq74R*k*d9lORoIFP!)0G04_R`c5g>3J1#nc<@~g1tBMce_(m>7!@P9{(lTw?(
zCSt9a^_J~v!{r>=%7_7Uewr}~*5?!CrwUE`n`(T7o at YdWn9#S!M)pk$ztc_6 at o&v-
zE++BiooTn|7-+A^!WVa?NXfK)&T;Y!Xw#FT3odOU=;9VyU2aNNN6yT4uR=RYw;{QY
z-c_+xmXVNAWN^RNU*Vh51b?p?JeJd3tm`zD)vToS?AQbP#tH%+$aEz6)UOE~o7+9|
zVRsN%ZTxoKWxXk5lumPNvN;`2w|3xnL+BI>qy25#i+@&kU>3rL9k3dGZK8+}r9~bA
zw4GnW(Vv7 at Bg@O%a)2xslaNDTyT2nZRxXN2^fwo9ZPj{CO>zQB#(y2cn2O5d>05zw
zgitSU4seFVKbi}^h<NaLdm+ViAO`3(a;ZbButM6TM{@fg4_%RAqs7`PGg2kn=f7-E
zdko%9S5$=k*2qi=jkm0pHVv3v5`v(K(!$)J6mN at E#MI}eMqhlJNa2*B{gTrNjI30A
zxgzw^id{kC_`p|hkbikyKdM?3q^mloG(_%3U69PTva54r(%P8lO1U@<Qw>Bs0(h4D
zJ6$bS#lg_^ritLIB=o?PT*Lx*J&x0o$?6{6v5Mz-y+_W{2Q(NULg$YYD^rIfZxCFO
zA2n;{)nxTx8D_pq!})P0qG<soyGJc}V9s2dAeKL6Qk);3w|_Bq`KDT9JQDF$U4`16
zCi$I at rr0H%qKkHEn}n!0xEh6{%bkKbeO22c1Y0J+1MnV9P2&RvhQctnoIwO5_X=;2
zSh1(Sm);m=`F_4^|Euw`LZYQ)1;{uFY)!+qjnu{n*1L5`E&hB&Y+BiG!5Q_MM77Z*
zM!_>LT+CTS8h>5?GET>k`6nUq7;khl9GwnjYbdzcd&;F|ylSy;TmtPv=DBg!H1bWo
zwILB-pK at 6Yx>MHlsxrJGGjdH--oRUrxt at tLauoubhN7F?#+Vn1ibALlRS3R_ at 3=||
z6z>hQqOb{x!_UMQ0TbPNifWhPbA}6slWzx5$wI|r)PL7uR-U7jZl50hT_66-xCupb
zKa4fpG)Hac$^<nQ(i%dE^7T#Dy=}IUDuP%_4$K#HG(SD=@mf_Xul+&AdB{ZdF*F+5
zKznG}{qricF2R&wZ>419+jJ%IZs{W~(=1UKOlNu(K2{lrdNpXMxz_)1X9B(Ws|vL3
zZrl?lQhzYoU3&oE+XW>f4U@;)>-j3%!1aIzs%V`h<|8D5+bF5T)S=ziQ#py8nH^h?
z<R3JBRBzPbTa at 8F06hW0z*kro1Q;<;{8b|O8vS-ra&WUy(nu-|N;s61VQs<UKGI7e
zK?;U2OncVP=r{CuSjwtdy2sgEPu?<Y at I>x_uYZa2s%1Qsja1*pMs8X~Af8?$4-xqE
zPf)0v?xXBtg<L6`r0a@`tDMhcbOdu`di$`g4fiv#>yF at mskiZe^WIb{4=nIpwO+#m
z%{iXAl8_lZZR~dhj##zz#lb+0bKE+91V%xx+=r#?TajArlF at br7Q}L$ZCKE)-$dm=
zV1KuGc@#kuREOybM4S|(Q6~k;&_EhKtj!J#QoDGyK#2v0(TATp9h|2NHB9MXszUfr
zvdYK!4G_TTYvTnvRcjOi*c7i<lU8OwhL7Jh)DWB?Bx!wigw>7N0(OMk8g#ill1dap
zR>kbs%Psmb-fwnrP7TMZ<BVdCF0q0~W`AP|p#RE)e!Ufe3w({SIY at blW@oYTtGR7q
z*OD$Ji$;@KQB^xrT;11@*GDJ-!^GUZWW0i;?anJL(CyxVv^POvTvP(89O>1SQDMm$
zP1y0XK+3S#Z^!D_-5Q&ku^}09B#?Zh^`?`(m7n-{b?mSIJ9&apO5xsvXnp0Yp??S9
z1+8CJA5pFV0?Fo?iosUY$XyXIX8u<=RpTaKO-6NZ^-LlcZJ at mj@khqHKHrj&Yky7V
z-ZjM^m364MWcwX=_uCuQn<JCCtIo!Awj?L>O*~Bu9kLj)t$A&XIguRA!GH-7yOMh{
zIF4}{LbG4tCXRw6?&7DD!b$S%-+xRBh3;mGzf<}3A`-D9J}TSsw^)8j=UMBJF3l)R
zCCkT&=&BT>BY{^ASyVL2QY79XuX)U(nU6?X3Yguaaom8_9q8sO+bIxH9l{5*ZH4Hn
z>^@1!B;jLb`P07EmrP2>&Rd>qwq{<CToyM6%q&~yr#-z at dy5zTKmGxqX@7R|(x#=h
z-ZxlvJ*rRMlTwM?R|Lo%;0v^?SDKr)TM==p0<a7gozb92e|Pz`7fa(`2r%-jec$_;
z^Vxv3%@^AM{bKo at 4uHa}M*iCx7v)PwCl^IU_t;nopB6!Y;~aq@(IP(^&ZqZeT?L4K
z4sQ1%hVwVVJ2?8Y2DLF-k$=gE1x_l~LF)>ZZP$t%VgcMf>hbigS+Ar|YAeTpfpd8J
z^m)x)^h^mos}#+E^<_`$!cc2z523umF%fL+&7P$1&fvK9p17|(S|k_KFc}9VD=WBi
z#HZd6u+SAkj?`%IUV0^sy&WC2ql%j{qrh at W>z%A|l(CteB&W76=YO>Q)+UH5^K?Mq
z?PFxQ%08{>mPZFVuh;Gr1MzNLSVY1S(#rin_OBKp>i{}Z7mEd^&9iBZG*l!yux|m>
znR0DD-73H5oCLGcB6w!obbOeUzSIv;c>;Fu+%%<)c~V$$pJ^`rY2K7rX;xBfU+x~o
z@!fjoLV3gk%(sWVPk%VwD}34 at j#cSJ%iOw;d(O&lgi0l`hDN)c9-{3{v-xbSMuc&d
z|A2{WO at zpVelr^r-<|GX+4MG-FLT9VniijoPU<VCo-8X at SxMP&Lt-(sUA^#AfMrj$
zuAojBMP{ib+-Ols9DmF#iW~_!6lf9k)3XxXkQn6o!#BEd-+!L<?@I`vix2cYN6ryr
z34o<$#+sA}SVOl-P?G}l%PgA5XSfR{3nR}`vNcNbG=`O61CY8|{;E&A{W;u2$ymLP
zVkxU1NV+wN#t&R3`W;{HqwNT2z{TwgV`ZoPE()>)Z`x3i*2xvr7=S&B at 1oyrO#AA^
z(${<{gFj&6&3|B3GyI;r{K9yp`R-=$@hxI|ndwHOT{u6!U at Bb}Y`~BxRUepiucT8d
zTJR;;tJqEkIf?$WHE)?y1t0FDGJ6V{CdRdwdJnFfYo4(#*2EM%2o}dh@;e2nlu?S%
z&h`ps5otB*B3tB5^;5Tn#_r0{7Hru+q`fZI58Nb)mw$e}VOJ9U at y@M}KT!TnC)t$M
z$3Oh<$1T8o`ZGs1aq&`C>cRx4EEo7Fe>p@|RCA`SWER*`FoSY}TK|5c1 at 6g&Rdv<2
zN~|>j!wLcdT^r5CXWn(X?Ky8HEM*({KBk!RoRx>jp at XA%V at n#xlCqOR+cX)a=?=QD
z<P~ZaW`9k`%bA6Tm0eMDsJnMT^I-Fi6jFqsJ>9jzD`bXQDb at rtCbWqH<Z at ERw%b{;
z0D=qA?cvKqs7nsylgl)rb}F=NlTuPDp4668gq#X{9~4SqQ{aAprkXVwcksg497b7W
zB${|%LLA*Uc at 1TR0!1nHRyxX_OfbO?-h>@8)qgWj;f1QSu0B2t#Tf_^{J%Y7855DV
zd5NVu0JmqPzY-uD4-38dFK*JlfUV at d4W$PId#jZWzw_)6n!CtYbhQ3=i2WjFr=|&y
z+}OhHiy#kyBHh?GG3kPjDEeZ-gP<$#a6eKAtdr;&RBAyXu$&#rwwG!s>=F5Cyn)00
z`+rV7X}>^Tx-@;+_E&9>JE?_qEUBQE%KTWjyRzxCIwt?#Wz$n6%;*)5Z-N8S#1iDu
z0`b~==}to^AtzTPWQjAbM<d?7qwQm;x`SCX&a8lKy08Zk*YNfo?*H^Ipgx}nrk<j%
zUg)SDoZ at V$U7nM&On`)V!Kbp;w1(38>VH4B3r!>~mN&>*F2HZvKxa3~3rrpHA-TSe
ze=|TnFWKW98VL;?UG~3N>dXtdT^RGF2iDiPl!^9ASKTzzEktPJ0iy+)+}5vrq9BR&
zRA~w-KUlZ|c~3}2k>|yMipw-2A&LIkkZp-gRzY+)z}s*o8$nEhPXBr>A4R!XfPYtU
zxA+(|i1x<o_AOF!p>97&v)o{=$^_HPAxppC9_#;tDAnfQ>tX=Hm+W37Iw5;Ux;k+y
z-`|jO(HQE`m^gW;nmWXvVQzI3b6ZYz$6j`)ie)SGNgMe#gwL4E3jgSPF<>4~wJKhr
zhZ8?uzl7dWbhK{>B&duXF!SQ!YkvrK=hYQ3g~5~1n#6|PRMWic!kV8vXynEAN_^NM
zb>^8Fx5Mj&C{*uk`*tykL9LuIi4}E%9AIvDA{@fj8eLChbBX^uSbXyA=vb`2uuiQ*
zahA=u#zXMx<4s#LxjK$fi@)H;AjFY)v7lW$Cux_D&RaH*V0vBq&Ss<b4S&GAtymy+
z-o=tk!_TrF!nC?uZ|tl42w}iThd(hA1n*?=un6vku_cENE!fY;j162d7Kp#y3OZsZ
zA*r28)O11pZs-k+0uBZph%@Fvz%=D{uP`aa%P73M@`B^YkDu}SD%cXrRI7pUg%bDF
zF`jsm1l!~@Is{F}Aq+)br+*pM4B7?qDl_?Wqr+^@m%IVN>I75L26{~)Lh*g<P-vRL
zFucKnvM>}$(HdVe5FAnl%qPB8&DPI<0c?@<0ie9D6xAf)-u@!IU@<C)aVctE-%5dn
z3-UPCjS}Cz#?O^Bgw7m*o<cq at 5~=sH*ow|XOvA!*n}S#e0Yq@=Uw^Y0CHNX9ewEP1
zHFk4{Lie(#LVT1I;5lg}*h2QA$9ijr`b$$P$e}7^x+1*X7pFl}jox8L3>j5awW-(n
z8 at YF}B+>LfNfzDgg?q$xB^r&KXoW#1%N9S7BOy7`#dA$064h)P)(PgwrrM85D-q^z
zbi^s%o01+2S at s#>9)Ep(!e2YDLwnNw3KMFEcA5Al{0JoNc|c@<aT5pc)J~eemT<>w
z!S)+K(`A+^0TbgsGi}17)Qe|k|M?OBBuoYYEV*zYq6CBk>H?RJW5HGzd?Gp(otLvw
zb*;s+k<`Lde1-v|Cp_X~PJlYh=?c%{8I7OJ8L<kh6H9XvD}PSAz<8){xzMdSs%oC}
z$_s2vJqW>_NrQ|4kWSqL=M=s@<qzOF7O=#W#TikPmkKT+uS`?LxfLH=@!pRjRBClO
zN#px|N at H|E&jZGRqe)?&1E&&v2QSDv9RooRUJ<+1;4VXNJ0DqbHkdZh8qb;ap3}5N
zS%p>B3KLo-o`1fK395-OY0&dw2}Yqmt{aV+?bD;By(u1HN=m~s_do0||F&)T)0mIk
z{7P+Il#lukidO5#qiLB5W{Q;dXl7FI*_Fc*^h&uJl1f_p>@R5EtP`9^s7qSD{fAQY
zjQ09Q&XcMGB)2!@{dXr!95}L3*IbdfowcEIp@>$O`F|Ia at rWl>(8g{kg at Pra0wCXX
zMxMl9^*oF8FI;ORZD&}SKWWDKPkcnJgM(}hB&WvZe;_s=Sa4WQzPaG3x<?!<oaq=p
z&`oPtw@$|Iln_r}?_s2b(pS2yVEkRy#yOQKT&+DyVP>q-B9CqfI9*YVg1mP`TS3MQ
zz&LxI!+-Ha<0+=nvyh7!;roB=O`QHpiB=&RuY|9Vl63ZR<>(Gj`8pFCT#F^i6p_=f
z8q+Tgu96D;Tf$JCF1VzW=njuPj4`hA9noHu<=1k2N?J8o7+a)ex8h4DB}P3ro3y`H
z{%sWtXGN=p>5E4Q8s|mgm@|J><TH4hME(yZ4u43IfO`xwP+=(vhJ?hWCuCR=;xo{L
zb5}a!mQKAwV(%C4E~O$xsYH{i^VuC-MX^a<BJpGI{m=%*rum?X`sJX|;O0t^9?+%z
zN|w#}w^mNTkFS5O7yfY=8Q#M4OxapYg_3w=V0{!htW?IQn5!!(b2&O#UK4L(7R}sD
zCV#V>mneg<<>ARv-JAX4?Al)_GMbLNln@@^Q)ZP>xJCzA*T$(^a=LV_L=}!Bfy75$
zTSEQ*F_P#|9y9g at S&m2NQXeuSte2do^6RW6c|!gq1<wte{g9b8a>gSQiRsgV at pC(@
zXWX$^5QrmW5np}<pXLDdp{byu(OHiWN`DO5<BmPzfjL2Hk@$9aUgd;PL!PzdM4Jt(
z9XI;8wvlMu35b;{B^qJYSOTg~O=pSB!!@EuhE6)s)uf!OjnTm4YqvR3$tcKyoG{`}
z at FZMhO>Oc6`pda&bLvd)DZ~hj2q6F<c at UiDedOu?uAcz$c5gN^KPnnF$#{chu74sa
za|{8|6}4Il at tjHe`cb3|7IW0=o at GLBsNtLKG-PS_hjVv$Bfb3l8~&lVf;q7_khu7x
zG*UqG>HB{9ZU0mAlfhs8RF#h=Gvn|Fjj<=OvhUeass)&~%Lu5bIO!x<uLnMZ`-_Ux
zhhDm*xeB)!13E3tAOix7zN0bp?th at fONnkuV;Aj(gpx1NAwD0{8qPU~c~}InXpM?N
z|JMBfl(2T=oi4|Ui?FbPhC4vU^T-n at B|l-F0YY|KctzT}7F}dq0eH8^mBXRZ;Ko+h
z5nwRXwDe(zv7a|qrZFy}zLWx&5n0t1qVwND*Y|XpHaE4ts>z*p$dzn6ihpx)DqR{T
zoS|80I^1`vs(>@8ZB)s~U$tO?%x#>94Zg(FmejHi at Kl(|Mf-q<I&};^PU);#l>U6W
zh>vADS2^jMsM*5G@>EpXLW^ho8g%%5xg at XxoS$>i(#~z5>A4N{nB6RUD5{BlUt$oU
zfcZhw$`y9jHu;qztozm>FMo at 6o%MZJ(fTu${+77Vi}R^UB!?0mH{2-v&n}U%_>C~O
zeajjL0YKQl=AyX<xA0%;4U3pGuTZKAEY_GIo032^^B&S4xb8oYLMnb#VflS(2L<Ar
zdS}^2LwUd8uq=-0bwadmusgw|8fdBR`H`!uP+d!QqZud*(CUh4^MAlGl1&*aSiv at w
zgD>P>xf0=ti6f~O^45l!-pWX1%Ig+mZUwPBW2_Sc{#!pu3WEXn7X>i^G?p;w9JoV~
zvHTe9Uv33c*srow45~ys(rBIEzs7+(Mi;?73_Ve{+gKy8ibp5Z*gUVEf~Q`=gwl*D
zJmZ=@B5Omn2%@tvZ-2v2cV+Cg3jt0;Ev}(i)PsQkweFWN9d_g>liPaAmv)P9im+mM
z(39oF>&F03)X%bzFo8R%vm!nL at gjf=k60v at -H5S>SYZYb(>{g}%JfI&+eG+y{r{*l
za%K;`Fuov|ilOGScWj~jbE-p}bt0vB2HN{;r#pD$9~F=Et$)b`%C8~1P0dQMz2j%`
z<m1ma74>tFD|6%meyC&y6HuXQ&w<Uypb=IBHJcjXtnf)2wGCvC<5)=7mqRn(7|FoS
z#H%C~Y{MIZcDU-R-lO at MbP^1D at 4HN}i_i_{oF3Adf=1FcFqqc`lK;xn*8&N)vf)>u
zJ%hPbSNy4D5`Sq<j5I;1rFAQ>$k(dxv5@##?32fgeUdvEDkqx7eS<~Rbq6BALQn#(
zaiR^Kmhh<8d}MDTH>M9#)Q}*C>WQYz-S;bw;A at vC&SS8nP4J$ige+BFQ11_YIqIe`
zF2{4~L+A|t9|S0p*4`+1AC;r(_g{%wLK at rCQ4VFq#DC$l5^0icmE|d&ecXfTBz8g6
zPuD~I{TRIjq-o3M$D)MTTcuRLxvLt1VxI?fTD>(Lzu)5R1*Q1zD_w0~1kErhFUKZa
zU|Ao!3cxqY;}V_>FE&sdl^acgd!54Zykb(}B}#L%d2u7hSDJ<64U(r#rz**L0v$bI
zOfKAiSbwGgxA8!a4#J6k-f6**40OR at 0_*2;Hiv=VsNV!1+KcJ%f5pfE7lTcgt!ZYu
zCEq?E&5xzC$FsnFaEvTmI5Y3!S?d1z%Z+Q6t8o!qlC(0loo}r`p!)%<qPNuHM2<i|
zs|)@!J0yuuK2)*3cl1tpfumxqWj%CgKD!FcW`7UY9K6iTFIo^;#2@&SGS}kv{}L#i
z`|omQ0{%%E#)$EyM2!Hy-gdcBP8D)erZ76ZZ-d4(-w^`7#R{*o<OTKQ_4NrJUPqOE
zyX103x0a4!s_xl#w2S9u#<w at cNAqO2>>x%3TCFJi=A!~-T$_Y-%=JBS0&CsP*#2)7
zW`BS1<6Qpy$+>LfXCTWioxP)^p1&2Bp}Y~Aaa{HskY1l{C9Pz(p(>0gurIcm57%B9
zBW>SI9DPmm&Dxxo?lo5V-uTSGqB2#~v9XZLC$1dvSU4n8m`UOT&5q0!{aI$s!O{d3
z5w=0VLS__SE6X;YJrWLexTb&9h3`J6aDS^XmZ1su5NT=_0F7y%y2s?3PZlvUIL3_3
z at 8=gs`06KHT}xe<f7x<eBBvvLNIt*agsq!-Nz3yVslQ}5^dca at x7}zD1LLpO5oQi^
zvf!q`%jRg7-tNt7&76z=T^=z)o36r+1B;bmqe>m7L7?U0IIE;tpXO9I$1-R5AAgEi
zUVDSgwb_wh7jT*01)3j#=zk}0ah=7F3<|NvJCQJtqL*K(-WjUJ_`}!Rz0+6(#dY;u
zmk~n6XDt;x^)kfSLm}hb^e{YdM6#le{r=6PFHPk7UjGh%=!9Z$xe}T0tjRbzL=V}a
zm_;a@)lO?uq4QyR4LCMVFbx?|5`UZbMTjO=Af=Q8b3z6;d+kj1LQT1mr;2-*m;LxY
zQur{vi`ICSw7cNLUkYXSET}0Jk6U&|10<GUTp%r-np!QD`+E-3Sps5dJEOCOUzl4}
zBoX|PGpg at +!w|F#u}dSw7{$=<o!O!UtyEr~#{)Rsr{a-e&B!gCG=fM3`+ro!y2zSh
ztt>b6Qqm<f1Q#4jMTfXQeF!}oS&_g>?oxqULy?a1adcGZcv2%7e(B%8oa!teTcp<5
z=`Y4%iTnhIcsp?wQ0+e9J8?r5Iiwol&yME`-)5g>+Yj$W^y2f{%T`EJ>tFLit2TOj
zuLHTpey9*egZCYK(=9AZKYw4m*VveNU|>e+z%GGY`0B4A-{$esm~IziOabN%8M at wK
zM}v~LD5TyVFFj7OfTDsRwcq~-rE8bT{wsu016q~B0?l-?WQeazQ#IL%s!=LHbaZlO
zY2kWi_0u~seFWhjwgU6K at L<JT7`^9?t6YzQt=6D-s!&%2Hqg1}g at 2cU(5RW?^~whK
z2cd*SJL@|4waz_#`cZ{5sB6XA)GZ%AoMEjSpHK0FpIaS29|zTvoLdTQu+LDCrY;1z
zLdnEXZ-9q(yU6uosT-I+BI?YpLPQZ75>y>CH|Pw8_y07?xkAuVT>s)80Dik}(~2=?
z+iWeU1WI`N)8L-&nST_Ynn*wBNV*k&+#&*H;v^ma6d-7$GphSS2v1v1%8JzA6B*LL
z!)Ds>a78CamA|^wUuiohGw-Id8l5PT+AXzDr?jb?r?B7;_c}@yX0xwK%RlvI{bL at F
ziZB-bAm at RqX6(;){IuYlrtMsa1Uu;s8%75`g|hY^&mZ&a&VRZWLWRA=nQWL<$LP?T
zL_kDEPW{(V#UDe8un7Ee5F~Y{@;eXKK{?m*no*5{)MPo$Y3i#9T*lq}$}$ghQ=btY
z8A<Qea6x6$m>#$fl;XJWf_Ouyi=&LFT{vH60qhF^n6FADK_h4w*=n>kySAE)X<v-7
z4c5AYiZ5#N|9|%3#XaEwlTXxVlTi2ZKGAP~YV7*p2UZ}N!|O7qvmfL5{~4dLSy+#@
z at uck-{!Dd?aH335N$)wc-yl!DZ&O$I;7c+G&=JE#i-ZFV-(luABm=`D`id!${oj6&
zuUGNRf at hjT^>9P^kLFl4rQI*2&+|UliIfo-SatPBn12NL8X`WFL;={FPLO<xKeRSi
z-7X-Op^mmiDj`ls24lxlK}t%ATnixjI;N&L7&n(3Xv(Oc?h%8RIWLL5g6DRd6M9$A
zyDXTYd%>JmvBO_}t-5!Fi1_o$9+ZFMz-K`U8m`32uw}ClI;&3}&p4fyrmS{#02`%R
z%W6ZyI)6eq1B1TSV>xBn-wt_^T-I2<`Xj=FfZ-LBxE)f~lbQYM5lD*oJFPqjmR8sk
zB<N}+2i&M2I92lbMz)h`Zf%Yj|5IXvO$lKaU#UcL+oA;gwBz$uKKi0%u9D<gLj`Iw
zNJYYbf0gxNPISok0x3zy4QA_e^^k3048YdpCx2Z3;?dugA;9r_vSn+ALfVm$shMOx
z#RFJ^b6<&T-4!zp%IA=Po)j3jB7b(+-j9d5EukV-cKQoPq at Xbi>m>}L)qsGb#AwQ;
z1HPij6ocqhb>`~sw%*V8{DG%#)DxfHExi1>GvQUd>T^0{`kIl}9bDKZx{FMT5|v(^
zi+`g5r(5C-FCn}Ipu`{2UUwWI{d;V)Yk5(=YW`wp%8wh{B!r%-E5o(h3Cmi?SnjQL
zLucu8SrtL=!WR97rkumK^~d_E6LnsCo?@atgm}+u3SF<~GS}7~+w%=cU=1p3czSuL
zfu(qGS7a at 7=|XZ0jY@=8gTg4q>|)`F4}Yk|g3&{udD#&wDxGyyRiWuSAC)+Hcl-m_
zv~Y=I#8+_^8xymPhm$Ea#wWy$(K2 at 770lPVdIj#`=0XJE77wKdV*sy;%tFpF3_FsQ
zl=<G$LoM-asd{gKQ$<JHfW7RM>+BGJcs;!K+zVfMo9))Pf~=AX(j7{2-J?H2*na^Y
z!wCZwJf%UAyfg(fP9)F}J2JoBKgU#a^zEnb@%i^jwvF~e(xFPe|AGU%##(|$QG&yF
zLnv*pl*4bhfz4YpxWdLBq(6{)r&&jG&Avzko4YFJa7poCYPivR7h9$4d;>Y<!#r`v
z2NCW&|B;*fZ&ouL5Tz at xPoAqrA%7<H^`6Ctp<w(=Qz)~-SVTU(xyhZBR~jB2oXBT|
zuWG*1-eBujl3V!_>FD?p6lr at FYD3FV$+5Xgz~g^I4lM1+ZqXYS+_`Dw)08uzkBmUP
z>r`9%>VnPqxFCZXn2q!h8LOB)OoZFNxL4K6Po||OQXSBuXT-;ld9<fNhJRQ|X&$=o
zaD#-99NE}i=>UO}t8?0U3yzr8FlafYXvWOfso3dBOv-|NGb4QF$aXLlx=Qp)xq`+`
z22Y%rSPBzBvC}I&12WPl;1wTvRP~`uy@)3K!_OD=A;zGp3PPqqTGCYUy<wvA!UOlh
zHenZgb;q5HRR}>E$-zQ(`G2G^nFu=KMpQ&q#9h~jBFy;M{Xq}zaik^Rweh7fX`3zu
z3vC`5yQ+%QcPx7c<{A$k!lN5vV6BXUT9g0Y+cp4C5~|&Z?aI}b1bit%ispmgc1tdn
z+M0t9z8As8>_wZ<h1Ct>imH3Jv1uI~0XFadpaPCBc*+M7x+q1B%YW~)z!-C{#p`hW
z5K&?h0}J;3K+FF6A1EI8PU;|V5*DIF+VnU7V~oHLrH~%kcqZ~x{*N^#to_-P at u@ZR
z5=Pp$D<%WNtKF at A<jN3Qi6fXEzG$A%?a#+Bi1vW^k#bEa5`wp#lI^=Rh8vB;ZOmEV
zuk%X4;Hx8YU{Bw5F at JVq$3pR~Ob`;#AUwfn_)ks}>WC{|2QJ=;eF9+~St#`*C1_o{
zOQ6;zE1FMS-~lm-PcX7ik>{H8MXvc>e%E2Kzj$ucSMKm7*}2zqq-2sw92O%)0N436
zn#ZHbjtZoJB`2?Yay#gdQpU$@A&%1<LLWKRBe>UWNOUPxC4ZW`GDl<Sm3aG~gQG!`
ztwb~C?73AtxfqPWCy0L8V9JJe-4Vi#YV{rl#Y%~s at CyO+@u3E-cQN>l5`W2kenCg2
z at h*?U$R+j9L6m6;dopMP_(mf^Iq$v0{L`h&8crzTewCkEiGD&`0U(kXOzzokiLncH
zWBAYZfNc7DdVj(Kv63oQIRtK~({C*t0zD^s3mk7)QYJl72Av0xT>uU_av*>%7rT=t
zPza4`I`bY);#MkXiQZ;s96%V at Vvyq)(rs!qm&dgd08#V{rmpwUJOvRVz;FkvEIlat
zg4Ky9`&&Z0P}+JWGd0cBip4m#@M at r=`6wx19IHSGuYXK{UY_HA0)_hj>xRPSHWz!>
zaw8ov^6L31ts{yset!r at S7Je|wgvr?z?uuv%@dN0DzXP at agxTmG&ZZCm<C+BnlvB2
z#!60AR-egk+YwuvrE^Sl at gr52ijE=_$C1hoDt*<CP-{oMRrM)I*Yf&}Zsl7Z&5jg`
zxmtvwk$>);&F9JI9y;Ns_hkb{d}GAmn0XW1rMo)NZJ(f3ok&qACFAy)Ke{yHdq}hh
z>xJ?6b_hFjIeulrI&<CJ+)gBVJS(sws5&_oO=Ysb%fx8DWYacvUT^$`0c5>0H?*yK
z>$&#H;cE><nQ;}ih%%j2cNs&z8%QE{&|F(?2Y*@}X}<iVKJYnoPizs^=pzJhUZ)0L
z28$hTqWD6tI(E0?^1snB&8jekh5Fwe`r6Nw=X<O{bD`zS+I$&ulU-VV7{goiBz54e
z72aCaA|E9JiH^dO4OJ<}$%pC at Q0$mE#ujOczM9-P2^F5G+ at PlbAH9pipf*E^+;B01
z_J1*rmF&3w=iImHrTs{5Uo6lk#d4Zi0%a!^pu*A9-0Vj;k<v?e1wWYSNk0pX4j1du
z1SbqcO<Ge<GT$2x`IZch1mZbWa5 at teAwn;s|Cer%y0JccA*dYwQlpb;ao^iVrSaVE
z$)LPlYQDJw!-^kj%NRl?GELR=9 at A8LV1MC&so7}BBgD`tmUkMuk|TJEvmzA4JNvkq
zjdME+RHsH<z#4C=mGxaO!kM|x5u^{06Xk&m?sl#>y-$U4iRwB3Q463-$qdqqzAQ%&
z!Gy5Yyr2St7~Y?-C6H(<DG?bY%<I<_L(VYOx;YqZ-N?)!2Tk`^L=;cW at somBAb)E7
zxq-Fd=G$V|2$|xQdL1uL1<r;8rbs!lq!xBOiSrTXt~T59g!Wft`|{kquLmOeCgqt+
zuz=;=q0a;($}<KZ!cc)2|1w19G_GGW&vfHA0cI|G7JF^BQplX(gYo&!`&hxfvgP<r
zU+2v!r2h|!xs5`oK=nZ at F~e>lihtW^Q at S9r?|!{p8s3YP<i at B}6__fyOpKM;RB`}a
zztL3ea!99^x_HMhkR3IGiG$WTQPG>R9eBdmPXRs;XAENm!gHXWfe0ni`Uwm;0m91D
z{?)x;QBm0vNMW9FS7J!ow76b#ZkNCa4v__i=r!Heobn>7`(bGXk7Lhmo`0wPVTGOX
z8^K;>czk?bLrvD_)%+yt7W|ytmCXDJSChhN|G&5O)f(Z95Z%T`;7cs4D=9BLLZZrA
znzj?RpFmFBu)M2<c61ktxM`|jY29XJ$7H-Z3wFYfWwN1%?BWJ^Qm_Fu#x^Xo$uu)E
zsQgc4k;|X7#JkMi#qJ<%UVjM^Ix*%3NWIf-?R7LNqPr8r at pVNqtovBwHMA*yKH at si
z6j3_GLUTyJLXoK!PVdWDg=9x4R59bTLnsV5$4f2e2`;%32}VM=9y2tQfNi3p!d?MR
zZH;w?V^8q-g?SE!&5M2r|3#~aH|!ID#vSV^;j`-CHimaW^Vr=1^?zf8X at LUWRU=3`
zwoxo<t|C2*lA`QbCb6jrS?#;p-hN0{&2<0vXx?Bu+_q`af!{MZ%?&Uy1TP87QgKY!
z&S7ito*2e_1=g1M-10&BR5TzgdA5Q6mVhCfJ%8Pz#rYVaSb0Pvfe!CY=q$c&ZZ>>S
zaL=z+6)a!&kwor{6 at TA`wIcewMsb{@Z3U?i`w0FuRR9%0>c5 at 4Qd!5M2;rwC6Ln?5
zKsrM^*q%}SMllkYaxGW<U%BeEl^crOqoEHvb5TqPW4UksY1W%qZO81Hb1C*OhL=67
z*D-G;70BAyfcYhQ*jF9X?3WT1o07NEXV8{gXSBQ%eV!GC^#OeLxR!tK-<_W0Cc~Li
z(8Ct*u7^#&lVM1Ot1hvZ>*u at c?B&M=(`Z%KL^Gcg=Z(c!-a<$&1z|-HB2 at Vn_@{@V
zvWwQ9vXx>1Ks$oabnNaTi*sQsc$Gh*sd9Ln+6Dk$HLXYLWwd2NnkupHDyIwq|Mk&k
zmUi{!jhyc0KD67ob(Md}*(A3dI3^5kbg_x1HW|i2^B7ce8qs&0PuTs(;<3SEF{K1A
z(}- at 2W2ZZ8$%!`3_O5>Tw`X;@b#P>Vq8*D}B<di_Z5NBgG!<PNGVF`JC1y%v8NJwH
z|FF__?7 at 4s8x!gMA+h6K<FDX<!afRe9?FRPkCiIqlMgq|4 at eZt2CnA-0000000000
z0001f at 0w7zkT(Ue3x8@|jm5FD_l3r$=O7=s!+nJc8BeosLJ#GuftT$E^t{)r<bs22
z4TIgd10#>%dW96dk(Q0O+3-Q`pxR>(@9)d#1>tbj%|f)_906 at hWi=4v<{{EMXR>ao
z0F`G}ciL~6vwjP<#$1))E*(a#bPAeIK7F19AmMNWHSNPY8Gi|_yt95wV#j`Hd~mo^
zY>oOYO)6`{TBJs;%Y=e&dY(}Q9a#l~Wgf<oI?N|}MrN{d(_#4v(3yZ^(qk~l$cPYp
z$CjW8A}}Kw3)R1~u0JH3BlE}Q+%RHe^Z12N>~QA;txB4&is`7|N;*Fh;~x0`0u{j;
zumOSG702+FG=Ih78wlIw_4eS8`yAbk#Bk8SASDqtHx=r91UrH at m!N7&5%aB;``U}E
z3hN(wMG6|Qzz`(01{2$416-3OkR?*&IX%Gf^Daf9u>#3;I3OuCI2Z43nG~?>x%>pN
z*P!#2g_iAd-|v==ViJ(>RI4utv*#em%gUBR_d;KRl7H^Rjn1bpDNKDRG5=ckc0y9_
zY3!c)-ju9O_?SjvA~T>h-Om=5kfyA#$sh!~vfGa<l|P7D^*fvWT5hXT64 at 6L=&yX`
zT3XWMH?F*{^cU&cRu at eePLfN9S1mR;k*9A?{AqyMFjq|~wl)`V?@_eHKsubxn0BzO
zQ(I3wE`K&-E`sS?pM6w!{T5r;1sLS2ahGL-eNE5P*V}vc$W9dmgQ0GPmedw02tbQf
zs9gip*Xs<`9zI9Kv5Y{}E2yyGiTIS^rg|1Kc#9ACyjb0OP+`=QI$mqlIB5?iez-H;
zgOck5Xw~JmIeWRlccoYPO~z6KIyS1;*1ImPL4PnX22Q2Xl8%`5Li!0$7*2;J`le$m
zeQ=>FUX3eVHNRk@<>aUxSu5IdL%7pr(mqh?h;DTn(bqG#={EH?DyhU(mqd{C1BT7<
z`7T$H5NglrlCo3110McJv&iZ+Q#k<S7s8H=;41Lz9Pl0c^`2BAbYx44-ipG_TvaV8
zLVs5 at Ap=t$U4OVEWZ2-s4m$BZ0pAu5*InJnb`}R)ef`BEV<hFpch*$c_?Z&JQ2-Mu
zSsqc3ttR*>q>qTsE^w&_Dw{t5><knm&c%=2@~;_z-1x^}Gokd{m3BbkyDmkyWfj at Q
zWTFI%uVCN$AhV*<T8Blv_CfV_x7ImRj(>gN$1M~IW-Dg!s)c)lA>B_uI%XklVE~)X
zwpqo1IzRTz?Q)Eu(Pdr_Q#5_I8Q at VxAfO&rn6R^bq(4uR2v=OB={e at xzO@1C)}Rxk
z3Y6}j=_BKAw=Fg at ZS`7RFS)fo{w_V^X33`Kk^!tI7Gwg4;b}Z2)WV0t3=PbZ^?$d6
zFA&=#wHd at AP!sALV7(uZ6%+d!^Q$fI9Kp^Vv1<WLXsZ{xV4F%=3Wd~83h(^Yj99%4
z5WI@=W0|h6EzdF*M=F{RLfpJlQRZ|*Hz8 at lBc9%@UlasQs$+DwcOXp~OT&)B<>xLs
z?2iMrCVFs{I~Xun4Zgrngk;L|wSQdK&G}A`ky`Iqaockr(O93qN_CZY$*d&JoWSYK
zhS0IH|5KXJ9Z&thv=6<^+hk?sd4pyG?Mce(G)-*&f*vZE(QcW02*=#mI5MzS>Phg)
zak5jTidffl5DQAwf$pY#p&bh at 0cY36b{5ZE?z?%7V<~(3Q{s%9;mgZX$$!)3I2O3P
z({)^tEM7LZ_`bZ5y04F*LZq}1AM%`)gV`Jn9L~s3g9$0xNYn6Mi%_U2+yJ>dUs$3D
zK10-c6-ppA$#>*ydI*cLhh`W2AvhHUxBG2(UbfVmQC<BM5BD-m*UD@!PS-{=x}ICL
z<LH&WG{0)fiCN15OH}m-(tqSVhppPW`)z)^<$^MIwnmf{DKxiY^*Lef-2})fUMsyq
zYcC|aCkbPj#J=UJ2Q8AvBibp02|8|>mtUnSsPYu^^f$?nfqa>$!cz|Q4yU+CTTpY&
zA5o9m_!({Br98?&q7a37LzaBNKgD28;pF3ti%S-eJU}%fhHn=qjeq#-F=PYv;RmZw
zb0zWlkCln;8HTvBtj3Y9=6SPEXF?lz#;87x%KPm(Zp2d;Wl3bxf2EeJc at RzM*}#Bw
z<!enCpZ1J(;0tIre~z!-7%fp3F4~vW+e?`KL%qO9C-tq>;-26FEq+bNl}-m>e3=rF
zt5|+)wV2}j#ruk|pnn_EK(E{9Eh7IKC4<=1S0h?*0k_|qR$Q>Lk7SqEwo at nZkG_2U
zs;b8zZ0phxidL=i<hArlmU>vRmUxE%sfiG~ED|Hn8}36sn&V)df#Xm+2+-(b!yb?*
zfU<KY&(ZvNyj%yK8Dv!g8)Z$8&rqyrW?e8k4obUYG?$YDQGdQj_>w%;FqyDlLAHSF
zb$OhBaHtU^FURSZQ;XHv?9+5-K#!q+;{tybG4HU*8+~5&L<aTMR+5|o;5MG(L~a<V
zs9MxSro5-OBXdpiI|gK<g(RsAExP+l+Jv)Xet7xsce2Gc;#z7$R>x5CTC$luqkJ+O
zHV3Fz%Fp at C{C{p#A$)9-5IgHe?mXJe1vWY$N4)iI(IrhGcxLjqU9yuYm?BYYd;r?z
zkBMJt>I**CO>ei78R*$fH9P~sX+X{=Q{5dBQ7X<mh1T2Vs_ogJaa36!!vPHudp^1q
z;jr#9cg2f*H+(yq?eKd7bL7Egi2gBCH>e`%63Ovp>3<(}L{9+5`Qc)N6!!Ed^;t8X
zSLsKS8S5$Zc5hY*j7sQ?Qq71!P!-CfB^4>yvjzmM!|3r`uL_2!Rsm&MUP3%_&!eXJ
zEcsRZpwcurUfY%E%00*wq;AN#QodC!ME@}6Q7Gbslm;~(n;%>fs}g+~kvb}%m~nZL
z=tlUKzkjuLR)pNtQsHuaL;*v{Z?rYm1g~{;@Ea;z)_XJv%nyoh(cS1E%?dbtSULS5
zw*QtpAzy*AkEaH((Wq(QI!SrVV{9K(Ds~- at X~;Z!wMNb_<}V{08}4Dz#g)Cy3rRw&
zO}A3k(ZR{8cb9q{)YuJWv^`^^uXYt$^%zOjSAR*Y;BZRb^YBL<kX!z$B)D3Ae|hhP
zG7<rP@)lx{8_#mIn95h5&Nw}JzNA6~vcOO4o;d-nGuxuOLRs*w?j9>Oah>&f0{3^~
z=zjHcOI2cs0CfCr{EVHhR;NjWHo81vfUk`Ou?k3%+^?d&Q|FnG5*-w)*vL#K$<`m2
zJAY1$A1LLL8GLkPOJ2q^AOP;5Lu0cl&xO$QY`t61r at r~JbR+`WIcxstV-0)F-^B#x
z15S$yj)8&P9=WhaWdIJwpaWM$#&#Q))Fq$p^q(#5u0(_G^Vv- at 2`vcGM3dJQW)|$5
zWD6}--HNmoCn(Bgb<G)hCBx<PnGog-XMe*qm};K%>7S*Cp<TT;YP2aL-5`BNn;sOD
zm>t&?IW@%NsI3>SL_$csZYZBcVRKTwS?Qg_?_xsiI}F;*p;&g{@1GV+`rtvN^x43(
z$faC;+$u=^h$Kg^zoTH8TC%Cbs7M>_{*XK;c9cg2E>9SLUhME=%N$tn3IfM6+kZzS
zhVnCYt$EVHapA9cu|X=#ob3ml3858}*0;U(+#tpLb6}u|7<o4--A)4pj2 at sCvdr3J
zuK{0)7NR>`EwKZJwus?yY``d5Mmmvm>__MBK-Y;eZz4WbS2&P0(1+(l{ecw<==Aly
zYf`g=G9=i$B{xGwv;_3`d!9cT$bSbr!|CPeQiQQ_jvyxw&;Mh65GOnf)0VWxs~Z at w
z$H&oBd{pZohsQ6@^QPUz<LVS2bh?Pw8%~|&(JX#vn$0Ys7WF~|Y5~*bNsl+Go8j$W
zSnu`tflpEve}M&(Or;uQ<h;!AkWVKPd2dxN>YUQda#M+shn?Av9c)vxD1W92fpnsZ
zc+;Pp74K(TX<w at eCyVOwU;q8~{}=@@fX0=USqT9lP3PR19);xsp4zeNA;|(EZ_0=~
z at auj1H!u2p^&wbqf2>%YR|tQLAdy+1LVXxSZu`3N9D4mjjn}=hJg(pAWH1hZXG0^~
zTKJGsu#TNk!5>6IjfmjEIe)`;61AeHeo+hT$Zo|inVYiUr5PT7=__W#USxUwd{oxh
zn4Zk|DiYMqLw_zhWSPCG70Sz~fqYp@%(3KH5)jZk+qJW?rCr2*x2p<DF5`Cw(R at iO
z^u9mbW}%+Iw&QYU1gxHxN59dxrjA{F_Z#DBj{F~fhN9Y8CD%;MW`7k~H2l;w?|VnD
zLqbWV{#qEvAh+Agk>z*~vxD3J>7F=hAP3i8wQU(yyj}f+kJ0N6m)V18#bPm#zY6Vu
z0Ovxa`J!_x)!ef(28sNc#u|UOP2a8tGvp6tMWtnNs$q{cUI(mvRWfiG at rGXhwHjs;
zX0It8*T?{`lEH+mYkvYUMe<+rkJ~u)1ga+(NL37`ez=|)LO*38`TQP5EQr>IZ-;G@
z>23y0nXgIvooW-??f8DnQC1f>wSxq04No#itD$roF;l$Vv;8J`USyF?v at VSUjM7o3
zbRtT1BMXe!!TwC4?IWVfc$N&?1Qi;%M>uF3hyc6LXe9;2fq#+-s5-eDFHGPnAMst=
z)B><UNyeFvg`#y2PHic^pnFvH1^F5b0bgxNlzVUU31t|3-2yG|eF)kslK+9vapCJ4
zvj=aY6ZM61P7hy6h&UelH$rF!+%;#$L}|_uvGM*B{w^=Rz=~x&0o-az2dMzY?dXM}
z*Dev&7jDVe(0}8xeA-)vn!a~ZDvT4bx2%&$8mNF9I*EwCjXuJ3_OfHJ=yX+}3|gah
zCaTc)gf=<K@*MuJXHOIuyhrRR#!V9 at nrXbbd`;=!gYx<Y#o9B4QRJ%HU0eee5J2tV
z>BVPMh8*ot?$2eKC2Zxi*7gkfBzU;6PB1(QtA97n#ea5G#qbX*-PVPj^Yx%*w>3+*
zc7j0ZJPt|~!WlU(1Vvpfm=~T#{zM-otF;Pk>w`8Z;&dBkaBKr2s%IAgsbOV;R(0h8
zKtOW`v<i|qS at Xu~goUj-m%My0D0k<w(JJC#;m#U<DOcqo%k*xJ at fqt^2)l&vEPM)}
zQ5oxqxqp at QQExDSyr!|DW#cec><P6?SYYAJ&Tbs&?YUJd>9);^6Yz}Y+4KtWH?Ic(
zWSkaKa|)A+Ymn>-Hy1cNYHAsw90dkJ at kN4GenEN6eC45)aU0(yBekJvKk1s$kTXfq
z1pm%Spu)BE+!<u)Wz8e{9SoGZJ2=7(>kzCL4}U|O^%zeKPK_MINciC4zCN<jef8j)
zj$z<m-L=$>BWpHEfLm2f@&RqR6+!VmYTqs;Fio+NoC1ysnpz+Y1+JsMeq>e4u6h3*
z`1J*@NZRjL<onMwY!Zj5Q<r}OQTpuR$7v*Ix09WfZap;Zv3Xi_N+?mgxtG{gL6d-r
zbblYo@?So%^~DQ_-@*%u_Zv7F%v1erj)QX&$<HKtc`^asQ}~dedr%IIMTlE?5HkfK
z(KUb*zFw!~=88_4UMXNUVl_w?QWNHg{%Q`Bjbn6b-H#NKnDxPi{GJBB!723^B4s=0
zJW<B9V2+}6tvhwPB$-&h{xT%3lq}fC%YUfrl#$W_Kp!g&YPR4d)zUVS^4|3-DF`tX
zcX(2e<*vl&#Bw0217yc40lBL~r}b%Udx`t>Tq4Y?W_>yxy~{(V(-+#a{Xd1<NuAu%
zk9f9_q1g}=wY0hT7ACB&dD?SIuN$iz0Xi at r&)q|6b2f`C1 at K2n3w<I54^TOfK!4>G
zH(x%QoWT{`d(F!l(PS at -*1i9*SWmO>%4{%`^JE#ng=jtPM4pnDa)9CaK)T+c+80ov
z2AxHKkd86ib>3?3fRw#3wL>TD^yC=oGSc8~z#%?buD=8%IIjgcQm^dG8k1 at ty|qFI
zXbF!2$;}cPvngk#%Hu0#E|}LK_J2tm6!TK3mMl~-LeI~nD82+lhujM}o{Rq24Qt%?
z5B<N?Z4cB(cN7m*4WW`%=fk}M_ax at X#4va<IWzK}|A&lq&mumFL&SND#FH0SEMrnD
zfws?XDNwh^q}mVE#NKC{Gf8r_0eDTfVjj=P!|<#&@bcwUZ4*B}+ezv+$A8sCs`t80
z&RT+1nfcP!*G;3U$<QU=1pA(FR)_pw8%9O*?(5VnY&E(Pr4z_Mdh12S%fV9Z+>JJP
z;AynL&;sGjsKOint<d!%6fW1E3|1b=&R>%Gv+9gAXbW>!<}!Up*QR&t0EE##wM3HE
z9V=>Ll3w&)Nm6v&MrS=0g at 285SlLcGID8B{eo^;sX3RswlRQtu2u0lhk5|F4)wJog
zcgs{r8Pey>aMS=pE^Fw}sIufY7DI9}QD9^xV~BGOBhd}JoUt0c<z4o8S*~V}G3UUd
zaG?G!%1YBrUrW#Nm_fjZU0c!2T}P|uWjJ*+4%uBDhf*~QKI11Rbbru?PK0F5N11#Y
zqhM16F6YWifiUuXpp?hX at R5U;Qp)=w at Elp&!LiDc`ju#5;jA&o?u))}fkf(t{`+;1
zX3#j!*lb5m17sK=%EY>O*sr?Peb<ao6mHY$@<^o0@|ImpR7Q^aPTO|}#8yg>=kPTt
zAb at 7udDKR}tEEA!0)HyOSqNK&t%AI1BnjdS>T*8-Kfq)znL7(+?Ji2 at 645Z6ArYYR
z8_)l{=;z_cPbU`sJACq_c&wyq6YTgptRKZ!+;CPBsn6qLvO^N{qc+R at pDrj&6ua2!
zW-8?yBY)Dff<#V9M6`d=rWdb4+Y4k1%yvJ^H at gW7cyo77S$`M_pv~^7bt37_k%i*r
zN0yjdZlowiwnHDCnJilO`kbKHz2g at dyOiZY%N)+qAZ?@^4KN<5H5&x8hqCa5^LBt*
zYz;Q+NRvmMsTXK#y!_lrDiz^P8oh+q__wgpCoCHlm4t69#>*w|GCBk8SBwK)mMazW
z<=X6}#I5lbDt|L7Hj%keZkwJVU8P>b-O$l^xiuhzJ58$_m~+$8m3T2EXKo7q3?%hB
zi_0KyPW6Y?ZSpXMDQ|gZgtRhRN`QFl7q5mN=1k+{>Oi;CyF5uK%@+aaSc>~t53abj
zOPjxJ$@kFIH$1y!4*I8jI&OQ#W&$nFS)dO!nvwkD&wuSXunY!LeNis7!}QUv9!MZO
zl2 at Q<m16Jy8^}_NMiaby<oXxH9%OzCD)on{uPBeKtDzj~HwrJ>89QatehaUNO@~hK
zW1_WZ7rBK#5HkeFa<Dt9zVy$TUSe2iGpvhuD3p7NwzFE|uTLK@!Wzvn9xexy?!Jkg
z<75EH0)HZU{0C4|;{VRK&gHsZxaU1%@PF(#-UjF&7}PRyjt(Ll=R50l?c?u6D{KYt
z36;3hK{Ha~^YjZBS>j#GuejTX=dc89Uq5WuzDSrFS+CZ1D}oG*#{9zSA6_`s=~&0t
zgxD$;3uF8<4|^OGPD}U2?!<Z5Fe=+&dzqVEIDamNQA>zC3Vb?3Nw<Iw0L7>)D?u8s
z4guC4Z`f!}+-2VzXfCNK%zreYk<-kD6;@Z$xAlidQUQ)5?8+?umYKbcK)eF)Zb0X+
zyL7~)5K10&sM9247{Z?fw?w2J!mW59G3PcE&a5o#>d<*0vCDB*2 at CBXpwx-JjV=j&
zdw<_oj+wa~27m|<&6d(&?(K<mQ{~opb+PN{BLzXv2N^b{)m6I*NXE^iBu|Z8dySO{
zQ-!&*XPXljGGz=FhV1g~_~71;5<Nn!x#^5}IJYiQQ!GX28XsvItg(7mPQS*3eJYe6
zp&R(wr*4ibx0Ft at w4#FJk{tM=1o`LIhJT%2AOMc7mFr-(qS`xFU%$R#kd0$*TFR}*
zogFv$F^|~4dsh2qf*0=I4 at x(3w{BTw!^DUukONycni&F=zBCt0F0!_Vo(^^~<iM(h
zJ{Qv=yBqk`)hLmDTx&~;f13ff4sDP953TqkvKdL?iR^7{y8*!=D}St&?8HK?On+Fx
z6-R0?cYs&NuK)`2tk|JX3oSiMbvG<y5oUtHe+ST;R1cijL4e&eJITM?_vhqM<y#q1
z$d8=!lo3Mq;QY2I=Yp)BhTrUa+Ln8H?Jg{jzla;2dK$n;^I7DWt388OqK+?Irhf!k
z)u5=c9;Xz at oShowtW!g>23d)Qf`4zNJr}#)36@;OQqhToc6r6EC0twSl?r|?WkZQ9
z*yzpMs;<)E*s`)|vUlsWCP2RZq;8b*6ueuyK^`Efs?-$@s?7P<<q)awOWf~aUzOMR
z>EPrR&PL#$O|fpLKcVZmA^vAEJ+>2Br7^2W$NE>AXkgwN$X?@rg}7PwEq}}EfmK+2
zX-TP{r!;aEBTX{bmjf&J*h8Bi6InC77pEMVd-R#;6X>TR^Y_bEM*adYyN3El`TEI4
zNZ6Iky1O409lNtN*ytAUkJNAsSfObnK?tWMY`nCUYcv+K{9m(P=!E#dduMe5qw at tb
zKk^n`sN&e<b?McC5K|z4g at 07}z`ticjDwFkLJ&~0z#VyqRz&xt-S8bXDI43}(G9hi
z%!tyP#Z?=vxjv*|NvHu@(nht3#Em8Wr=hIr1j^!PtX$slQ#RI)4?aMVm?|EujK^M2
z at a7B>KbW4{&Q#(O%s-!&b<imXTNcoHp+b0mdsyhX`B at Q)AP5g5N`LnO^aYy8Z&ZAe
zvUq)3Us6Up@$skZ0kxP|txmJ0b*&I8IRnd4s$}B~t&?mn at FJU+?RjO|WTE5y8eiv6
z(HZw*<?Xks|FStRp5t at jGrlrK{J>4>8%hW?ws>JU6DQ}-`Q`k+N1A7+SE9&0vcQoT
zW=Dbv0#Qr1*6^Kw*nb4*ps at _Q?- at Of1}o9`Gq#gZeybyccza~SlnYj;-e7$V9eq6e
zngkijT(GUfSM^R}iB~+>K9rAh^=i;VHwR4RT5TO|zl=4yq|X%9enY0xxt?3t7Yx43
zrHXEy<)1>^0rw_H^@AcU_m|$y2Yi@~gOh~c<o?Cbus&}k{(qatb*)9@=HgTP9?6l@
zsj;>G3oUKQA~`Q-*yZy#lM45%g%W+M=sh2~n+(?}6r{JB!}#min2Mtb at w~v%qVT-c
zO!=*hcmPpp&NQzqkkck0vhy+HwK9TY9fQu1iUe6n#W!PB3$vn&@BWZ3ZaxuJcfF at T
zO~BJR^|R8~)ql}CqdJZ%KU4CBj7MY`|4jA4H~cyT9r4<!Ow at -IRJkT)hU?faSQMl2
z7N3_{{tg!_&mG=KGw>9hH`BeOLw`5J<tU(HOf3h7Vlif&gR*ZjfGkJuu&bj2X#q)g
z+_%TJ9B{tR?HRIPR6`(L%*gFdX;78VT-vSmWc(jvVt=$j(E6P$hCvB|B*3M=;U$!4
zhlf3pS95oy`F>Se12xM5A@;MhT)~@|&h}QWDo3gLn~e?Al>P=V0oJ{K2!;d&{7+<B
zEE1o_?K44RbQ0<qmjut=h|d|u369=mov7Qu9tP_0m^e-I?_`{Cxv8$CK}kv?-aVfe
zFY-MZL4Pwn35JqpxZbaW8<AQ?okizEiRLUo3%NFN>qsdoa^COkMHY7owMc#!3c+_E
zwV at isPoArQU|?J~Z@~X{Q{ev0#@K5S{r2+k at c9LGH=D`Z%jk8EE$fr?XIM79n~K33
z*kCviQJhcSGwvUAlWKqzR+3~_T%z%zislc>H-CU+(@mQJvWxv3?L0l?CPoGn9V3*u
zXw5hZ_y3mLr|>P1NuT>m&Zzb<Tq#m~m6D~ryJ6J#*28_2Zx=NL4YgBL49+CYnU<#a
z!h5oD1Uu7n&gzib=bA~SttNJv(9YW3hv&MkX&)Su9v~a}rv))_N at UTd;(H<E-hu7j
zJ%6C3C+7mfZrwR9wIWO<$mI!KyRpVGnK$PxH>9*U!Yjj#i6u~Ur6%A+BAs)7SXoA<
z67G;dP^)Rr!wePBImmr=#LRzVkRBMo?v!~zjMe5p_r(p~g3dXRlH!*OSf`RK$kezK
zW^fC;Zhj1YuwQzYv?8kygM;zh^;AHeQ-85GrU?NLK$(L%-JuJN#_EWk1C$f!GWMbS
zAPLvJ`Qi9M=udXD_XS^#msf=ojvWYx1i5fup1`(&kmsUM$gZDr<+NQNTIn1?L2GF0
zKlB_ou61)^MhYy=<?iWs<MrIbR~@TF1gie)riDAMk|}$Yh2CR=sQHs9R3=UUt$(Vx
z`aQCHDMy{iKxj>N6a!l_%x3FqkPeU$xA><1;qRhy0zbaet-vss?#CZsUJN4^QRW25
zBPt>)_7LbLPm1W7BCYLaE62}n*n>0+BNB(P`W!K$cNPJ4JZHiBl#Fd$q>a$9i1pO3
zAswIwu&U8}T3LMJtH9j}bb3Xc$A2-8xrRI_RxE^bh0K(v*B=Qj#&-Hp6Fr*bhvJTM
zE>r?UN`xFpy%~}UIeXn|VgRA~9)7fpp at b4iRmpW-bD5HE7j4PN>hX)^ltQR(IUsyG
zvScVpqxrw5YOCC9W)PbwJx<>iZOf6dM!>sH%2c4OnEH+ne#FM&pbcSkB7aF~2Ta++
z&xb$7ZIOX$Uo at z{aOJf|hBZAZ;F!0)nHj3guoezpbRnx7jY^ikfpJ5~*q7R&*a13;
zEpT!$mf^JrnHn&(Z`Tuv!#2D;i*(AIugoNWrWlW|2IM;1PP0Ph+k9K&A9J~=Ot&sD
z at H+n=Cubu5DDqpapj&&4cz<lyCp+>4n7mMC){^B9WHZ_V9N&sxTd4puZGQ$W7|G~Z
zeXAnHR5^MR<#$y2QmnJpGpg%KE{L_d1R|am_^C{BbbDg8-vkd5JVc36PA{Fr|H`j?
zJbf9VTWl-6%|YQUR5ORyi-fCnxGs(PG!1{~ns7P{EDXaXeDQXdv41L`rDeGZe-UyV
z5jN<H5nH at Q_?QD3COu2Fg&9;coyNtYF-v$(2y{%2W?UX~p4?+i^=wxBrF=}h%N<*u
z^XzB4pWj_+*d|O_E8?@c--83JVpH3>@48`M%!3nF at M*kgEuvYnbNNENTu~11r1qz)
zv1*}axk?J at 82LaAIDh^tApevCG&3-wecYdB3CZr(bt*(_(#zD-cy{aM9JkKE`4_-5
zC?BzQEMfR$h#MVJ{$Oee+6`;ZYm|RK3G|;T-hR<r?xgU?uT$S#!w#ly(v>@9i}NLZ
zla<hUCJqHs69M4h?{m*bv&qN^i1=XEe*Ck at hM!0!+YBZIoPQ6rNEw*Q8BOJe7 at L`j
zm$@&P%8Rpm^;BlUDO0-mQEb$a`0(qEa}}uFJ?n3v?;!0NaR(Y>NE;XMp- at 5gjvc!Z
z7cb4&+r7J(4be+*l-!>%JR*X>s$~MZ;M)zldHbG$RBX3nB!ME6!#b|Gra)EqxVB(a
z-xxboR;=qawSU0$*Ol7TbK4A{&4c;cbU$4oNFQ8td9X!DogJTI3e>%6(2PZaab-+c
z*mfDIA^Xl6EAZ88U`?KE%^#~fubO^033?>K>wOJ(ci!H5r~#ov<J9qQCy<;>Y*~8*
z2`e^FgkJOA@|+hRi8*Gr(9!~4H-R at yQ(FA}y<FDcsDB<z8hB?_b2*LfmWXAlm#M3}
z;y!dTIzDwSck#ZLZOuw#y2<9ef=`W*9)U$HvSk$qIJ<e<^IjR)dKb!)999dBTdF!f
z^EK$Yq&(e_J;5{R&l+4&7U}6|*8<_;UA7 at r9Avm?LTiIPFE+GS%#owzy#ozTM=C at h
z`q&YSAAfG4lO=74vSJ at nEDVg1wf-;l?Qqbghb`LVCf^BgQ7#`0W~^ipq4ia%P>i?)
z(`xn_KHp=5lC$t7zkiQ2R@;?HZ**)|WvmwVK^Ov)xZ3cvBMFp?J_RweK4TFo_^YVD
zO40}ns<l!X8{0bYT4%I~7|Ilsya{Qnh!hJMsDEOTDHo#rOEq at nj(JjUJc0m};cn2K
z&TOF|n8I&dJM+|orN+;m)RZp!p5ZCapzz7}tTHmU8-0D4O|)Yg5%%HuKg$O4unY?}
z9>+zpS1VSWg*6PEamMePKM;-{rWMWH*+pq)b`!L^Fn{dRMo6n}{EVx_OrHNhhOfE&
z0e|&G*!`rkVOpeB4gtEE4e;6D7fQTgR1Y3_&O_X{sfx}se}`9xymY~XNL%BU>CtK0
zeZkNH(MB&7A=<Q++O?L2aj}50an#uu^S^P*HlDk{Wz at T$%3jx=2R;c`-%rwoJV%Dq
zHp{3 at mu^s{$jueY@~MjAM1`$rPR@|;ZGWX%j3{)u)vri#^_y1E6DKw9ti_}8o1NaS
zOsX{?CX#qSQV|faQKdIhlpyY1-C$t(JUl#pkUw7_QSKy3*OM{?Iv9!@R{Dh1W$mT8
zP8}q;q>4tqVrp at 0)9?wQ30|sG#=?`v{Y7CKGWzS>Ekm1{UVhXd at AmWs0>B5Rt$+G1
zqw+7#7+JSS(QTUPmu>+;cZg_(PfbF3EeTyNDASON;zbQKLW9;fGcBt|F(l1QWvTZz
z?5=eK*wB1{slYjlD9C{)2e>S}+yGV}r4&j*;429^a`)D&Q^-Zw$Yrw(-K~&_D~CZ~
zX3eR_df-97^_Lb_Sv5Mel>YiYdw<g!O4=(qiL~9Nr-c2^H=fr_RUk+CN-QI|6aE%C
zF6+J?N8)a!tX?{LqiDZt=!-%!Pb$4+#NiWsK6HGX4!N7D0~asv$Po>2U}1yl1mEo&
zK_;MY0OPM6x6}X&9T;RGJ<gsdEn^$89!h%%++xm^(Mne!QWu<SHY4zEG=IsQz_>#=
zej$5{4hU`T2{j&OKx-E41d2mCU_Db}cQYNk4}93-26>_QKbLf|&jAUq$ZZ~q)!?%(
z`lTGa7SDP7$!z%+ke&P=Av9lJF_U{^0e1lJqQ17K6<d!|E6W at nBm?C-z~le#pFp0=
z5m8Kj)Jsc{02&rBeT3C<gnwHC?WR~@h*w>!#L(<jX=DC#A7UE`<0}qa*umtkt+>fR
zY}t2+)|&Rc9#`<szy#IMB*&#W2?qso&JW}ejKp*oCOdwnz{>QUiTF<BK at Pa#Ck`G&
z2G%4G0QIh)q&LTDf^_}K<}Cw?ev7%G9gTr48q)XxojBPW_Q|Rzt$+GimNj1+Ut_MI
z*40j8do}L7lDnf at CWn&D&+D4uDImC3OlWr8UIHpKMBu)fjX=x!AHK;|P%MCVMP`#y
zGk#X^V3x8UMW^3tQ|?<a9pR~^THzbBiFuL0SG`l1ev>AoG?D?$lN;7$>#6UA)TW2u
zf%gBCvF3sN3^EmBUw{5;qPBFw3JR^k9)p_f*p)9Kw0YKY9iETl0lKDLVWTw}Gs77^
z?y?|sPUh4U?Ux1`@n_VkH#D`fIGwT*`9keDh52Q5Lv1CUrfDexoGzo at g`kQisS at -C
zEf=TD&R~vrDfl at g<VmxQ$ML>_$u!b$9^S*OH{nr&M3x8}Jb&ETDT!aKnWA#6qn17t
zT9DUw+S#g%$jEW0X43e730XUea(=Si8%3cZ<=`THkftT!B+OCA``_G%jG%L7;oGWY
zJd+e-Wnpdfh%y>n`YPqsaND8IX|}AoaI65sM_RM2aA`r|OfzdRpUDH~@5SKtDoA_8
zyv(@5BqXT7bbpZ_BQA}HGE(B^x;<3l2_^irk-<WYs8c66cu8jmk$4$!PaEtC at ylAI
z$C{4EU_r$=P(P-)PJOX(HwGk+%RkUM%#SH{k=K>~vWqQBs02t~H=pR0`aJQtUwQ@}
zymu5ROtSAQ^Vt-p$Y|4kpHtRrW;~wwlQm5(gcbWQK7apot4jF2spT|tfXBDNEOeL<
zxiWuF%x@(zT>dx at lcfx=VaPc38KBO<8j|Yx(4|<l3bXHo?uVJ$KoD{Q3inqTx=%bZ
zzhLK1DRS<;6YBq2))JzC<qjljd_+7ej_?kqHg`&5ZR$=y05Ry{Om-g7oJ){h$WKy1
zz!^z5uzxShi7g0v?bWFbB7meQC;*vaQx9=5bYmHtg(`2*en32U*6C}ONi~b<g@*iG
zOHtXUfrQ)(FG9_UwLT$=0Gws#pRuV;TDRwZFpasyEKbaEyydJ0^7GU9){*zP at 7DuN
zbw(QqP@^WLv}d?TVGB)AvZ!6zKFlO8=u~%P^nd+- at Ty?rvM&QwvvMRytJxPt>rqt=
zo6Sn@=(lrn@`7h*S!gahJMt>%4D6V6!ncIeMu4rIvpkfQ*DHfhpV688IN|ruazOH@
zMR_>B$(K306*L!t8PZLTzl#l#r9ulmr*o%^^G?uk%kRuE>}S^e3Q=c at vOM^S*1z;1
zWq*nlwv}&brXMk+SSmh7h2=%Oxi&kCX{ySF8N1~Umx2;Fox}O|k4Sda{uvX)rYnN|
z*w|PsHI)<DThk#X6}ZmlI#k01Q8bNd1r{94K#hqdCN=rr5S1~5Ie|lME|1(x1}2j2
zY0ngXzKz?smZ5j!5+2p at R>G;{rlD}?6Mt}TN&ae_pp6v#PKWYVccExRz5otnE5U%?
z(2o+Fe1Ls2(oct`QmBYg)}8dzp>uIpTgFetSp1j#PJg|ZmE-ow!UGG5;}m`YnR0G)
z3 at AT>#keeK6iNf+!Hnyfqbj+%QL9OQvqLjK0rh0juNJUjFnJ;N8O36b48CBT)_<&y
zAS`df!<Tc0U^n_y1@~;+!y45FU#}+Pd2H8A%YGnh<GFK+2Y#o;6Cxl}#7tc~u3`%?
zcQhbX5k65M-pL_I(;PqsqfI)d@^ZYe$yQ`$L8+gG(L{GE(y!3deks3BfF4f<Y)~+@
z3pc*4yhAceM($U9Lp9#1SEa*L#($O9>C({MX73L{w1_0s%KG4lEk#(FB_*xwAM~*4
zHtt+O!Wdgi-EYxQHlXUcr|*fgbi}9GSnd~@tlA+$fe?e&p<{cpXwb0`cJ)7IFtvD1
zYldif4xxT7Fz<AmPz1sbFo4sKh_qSI^a`a^dL_jO=?C}s58x`}?_y$yuzzwY;xQU4
z2|~45*r$dy{++8}mp at uADG#i$TtFO4zH~`sM8!9a#)u);pwh;4AGEf(!l$>@z-)t|
z{^sNcEFFtOateN7lO9IgE56#yBwI(>q>dnN+TZT+f&p}0KD_<c4Kv=!v6j^6Q?r1;
z5Zm2!el-Ry%#LKX-S1f&2Y=);7uXsyKM;FrB5YnU)hZBF$O+&GNV4v&!BV*|!o{QJ
zk;0h{Z~2CLcQWZ@^c-&a(wcd9w!|s+2B1wmpP@|b3p)-oPktp`<YKOOQUh9S+*U?r
zt&wi5s>>=Q?L)o9`GSD7pX@#01C^4HpDy{6qqwFKh0dr*+I1D+nSYW0RUV=~&C78B
zk{tnoYZ2wqz?0P>N1>7_{WQ*?HxFWqBPgq`2ANEMN(sAa0PwAnt!ICfB8wi_6wTdt
z_-j_Ch<KA3X^bwD5MBaRL5jX3V^j*KP%U)EK!A-_*nziM3U*DZ12%<W!N9tRtuK|)
zw-65h?<}Cm%{Bj_6n|B|GR%<83^PeMcUVfd{0?VPZ{Q1n at Gc)F2FK4NquH(8F9@{-
zw3F5nYxrH!-(>3aKyER5 at IkSmG9YGFhElFg+{w)gybSL4Mrr}q3eT+Z86F>V2DWj`
zOoSwlL?+#s4O5Lje?>xa)-H+ZP7`j*<avYX#J7p~)ySCM+JD6h1X3fgDmDP|ptnXf
zQ}7Z9Y&v4vxSe?+&)@wtjnq{QLfATJT{%zak#`r(saBes)>maP+|R|W8I1*|dt$yi
zA-icdF3m^iBAaJd*j7+_3hA}nE at A77ZD2tJ2K{&4MS}=%PIdYW%SLXCJ_PE4)4}NR
z2K4Cv+n+9q{eOI|Gcv7?x&Zd6i&OWy#O5B%oM>&mayw}e%>b+C+1%-aKbTta)Ukmz
z=h1()E~gcPtamc-3m#0{vlf4(Q-d5MQO82(T0svkV}8WbkgHJ5xO)33M&A at vRKqQz
zfuUf~N8DP;+$6$BjY-H}Nj1}zpA1J at 1VaJ%fF3rrjDJ*{b<D<HTIfg!{%~j;bWx)H
zlOReOMaPype@<OuGXz*Qo6?*T4TND9uN!55Bs?N`%?wnSb`$Ta0a at x#0_uN>ycK!(
zgHeN&-Oq|CmU=u9%0A_pHHLaZ*PL1ucH&1B*&R6J5D0+pEuBf&D%<(~UlL$4BLnl!
zztrmCKYt9x8BAE}A1`bPM#(+V at Q!AFGh_G-leiXkoVx;>l_4#43P6n~!-<<$Jr(HB
zDYa at f!mHS(FvIQF?RKk#0)SdT2;P>gKc6#!4BS at Y5_w9e`gJ9#-846N*?l~C{Z8X*
z?|C(gu};EdKVULqk~hW8CRo{YAMo4K*gE_?=YQGQDVuo-oWHQ~%70YObYBI&3{!uj
ztkpCtK+3QID2_wI%I8WzDwE0 at NdwHQ>Q2ZRu-T81Sq)?|BBkiDG&UyR1yu<Xxeuf3
z!NUIccg2wVSQ)zA+^kCv&o~Uev>M$U1Ei at Ag_WTH=4U416uz%c+)(AsD4n9-rF7EP
zhJPr<D&aa`1xcYmk5sURPr5PN7&gVva(g5w76<x|wPdg+i<wxtF^717TQDb}mx3xk
zi2)=)i<9ky>4j{PxK#J!=etjQ`+v_{DIadoB at iy&@=q34u8XP}NI~Ykyyr2F#i<=B
zAdE(@6yWA64o7UmKD%gvnP`Q=Ml0bFkbgvHlnEP}sYipVK<JE$no*h0WYK$zG`TJJ
zv(jF2+aSX^ZA|g0b~42!mA>$-BfC~iR|!7`=O#v$K6vii_{O at Y9e5(rX;Wb0Jn1;L
zxg(xbWtd^%1>pUkGE%UawPyY}j;L<-7A}EFcUd=<`|*NsX*I~y4PcEKenr~VIDgyF
zF6L6Y$r`|5YIynu2LWDRx040c#H3*$fU(N*(%eM-`EakNB$VmZw at VHDV{rQ9r9{b3
z1VOkz&FreQv%)NL+w%N&hmAHdI^O|+iFmx!HLb;{m1=&Yry=rFD8xYzG!fkD at -`%d
zR$35;!8CLp2;y?{CrtRnw{jNgxPKexM$rFV)3BOfky-={&us(j8j(T(ES;_3Apz#E
zlU*DC{S56!DFC5P>V%Mu<L7knT_5+@`^O85Pw#1FK}=VWz#ybXSb%o}@FQCpSQ`C7
z?h2e=JFIT=Y}41wI^6`mFM~C36qdHW){1EMBdjH+EXIq`LSEh>wR$vd7=KleI$Fhd
z9PBoxtzr9XT%GG#e~Kb{-QAC`z(@!}^G)Ht_87W~?8`ue3UK~$0=&F30N~H9;O!a7
z50XhqVyzoX$}2}|(4!Mb_OfT?b<v2N*Q9JQp3hQV?6e8Ck#k`^3L9o$q#LaRh$r(q
z at G707h0YE@<dd9d=_D_ED1U+$Og7JbuhEi+#f+`rgK at k}x01z_HIB~WeTRI~eKMic
zuRKr*NM1?F=pt)hO3JDN at fN^Wbyy!SB1-t6%a!qwS^MZPi}EYq!`SDxO7g|O9xs=p
zn=n675NM5w&vPDFEFEsif35p9EhYF~5299@(k at ytan5)>yhB?$5r6ot3x`rm70icN
zGUlgmT!b~3RjX;C&O^8AM+{kFuH}%BTB|~w9we#Vhi7qOQ_nTZ=~xY}x!Uzt)OStb
zGF<QqDvIl0Xxv3jGpK=m;ZRA+a}x$wRQL1`0hishp1DorAn*c3pKZxDC>ubQ3r-m^
z7*jv7S_Z=59kpx)#ebAQB9lLd at N;WY0PG|(El0FBO}a)rXs1HaY=Ineiz)hayVNCh
zc`K5ca+Ga;F(|w)tTy_}%bVA5wE--NZGeZ&R%~~mEyrUW0G|V|$I%QXMKPy)*I0w0
zC)MAp)%)#UI*IKc0kB%}@uB%yEpuct+N6r>)S6k6ne5$>gMU<^PSUBdOSCA$=~|<;
z67*=1D8(S)K{iaAl@%}uvs2Hv32~5c(;^ja$|~QR4- at n%LO!eDZ1#3x5hg%h<tLD5
z?%e1HdCqApI?s&cXe4a?rq{&W!qy9 at 3t(jQzo4IP|1QwkPGt^-KY*nVL;|_1`l?v?
z2tq3NqRrSq>VGLJd6SCvFGgSb!%}d83v90X#>4Pe{BE}M)`+Z2oB(Z#_%BnqZQWr@
zSwI4lg8esWm8ccw>@gvAJ<#l2mOJSY*cMD9-ZVGU;#_3dgdx=ko=x9dH^3kz|NoGi
zu(!zldXDRi{=WU~|FVJSP-b-|=XK3wiwZL*;ZIZ;5q~Y~IQJgI%4Da9DAg5ls{42U
zWzYsF_J{bW1V0Q~V|QZF<B?(0*I+Odgg71j*~2|}!75LNNoMj9+q9F~K}ljwL4_S9
zOh%sl#7QzEa7Y7%j+xSPWt!>9Y-N4Pl<RS9s!cxx4`-OZ>|gd-38?U0S?_Z_eYYxn
zAN<ToMt?JXN3>P<Nf)sRxYJO}CoOiiK_#Ahulg<xO){tjn{VpKg?piZ5>&#jvuD5H
zSY*xCNOX3U=C|fxAJjh|QNawM)~uY&9G at QN7HK&2q+*k0SO}y}O(#xgZ>0~5J%a)K
z06|`3Z<QL))BuUS{+(c8+w|U2qVfond-MFbU4J at PWa2LfOB+uN1z)i^kCld^-S7-@
z%N9X-DZARnbA$a91qkm5nP$Y&;#$4b1~Y#OPtOeM<_eGd<$Y2^H;ELrFwyyI+OQTr
zZ|$epDxBTG58}6K9jp<j_ka#!S6pMtvMr{9Tz=v#6tH}9L<*dy<z#c~BS1bhyE9B+
zY=1|w^oJ`bNzqwo=B)|2+5Q3$MPdKjQDdsf6bW!Q1{zmguE<)$Vo<ZsH+PLRSa6I|
zc|k}Zct&XR`-1K$wY$3+?}Z7aThObC5P&^F2SQtOGS5(dFuy_n1`FNsq?Dk3%Shri
zksbM`SC8g-wKfi;yr%x!Fw(oiZp?QeHh<eIL0cOvP$fDp9M+i@`QL9}6BY~vV(Vx0
zxtCuZ6>a?Q523GR!e|Lqo)KpAPQp0i$=fs8`nUju*&6xh4H at Ugx-j#XXRp04OaXKI
zjYwJ-lJErn6bsp+bYO1?Pz;Ss!L=d{k;mAsw{JOaPHY at cwNVO*0|Fn`<J!GcIDasx
z*_}=Y9&$bB^GSF$_v-MDDR@&0wrW6a6Yx0jWiU-yRf4So&UKCq`*>QM16k~qot6z;
zl#7^SwnhT-n5>vU?lxICRiLX<xw&dR at 78qh2W#f`s^;1}`=>k->8?pAZ2nhKh#(a-
zEp~m|H;M_xxXwnwYv1n`x8X?wrGFB_M}cx=CRmZ3>7jOba%ybX;-T&P>q239;ts8T
z4x5M`|0gD8+8kno(AOPYF8O8j0GIAu6cWd*;GO9Sze!E~`WbQx>{4{EsCzqs9;qbb
ziOm8pBwd9^%C at k0grQ7$vK893>^fuGgmTlTJ2iU1N}5dL|J^WgS<h4SZGWuk*?@UN
zmOV4JY9J)cy-**0G8He>n`7hM=$mTp!O{!pZU~D$Q at lUE1BB#MwnXSSPxJA_{QO}S
z+QeiI45zo|i=azZU+?95rarl7jV%MUu<Zo?Dvyl1E>9>mBCpS4>5nbwUV!-=wlymJ
zi5)Eidf}EAn0AzNPK-DZet(?1R|piT2AhIPVHIHA!x%D7sc1{5;9O0W>y=ViL$XDf
z=Dh*Tm9>`FJ)^-pt_8T8UhrRW#e<jT3SMKb*N9NX7hzMSV!}&Y+nb&CVe=o*297d5
zMer~mNT_-ORrX*Hhz+ba{uicgQNm9HSgx72#JbO`7LkP%$ci*tWPhQe9_g^n>FQ>a
z#e=z1Saw?~0pKrE^D<N1>!MgGgju3iX<ZAY2~<B=st<~E1MP3kE*3aO#jIn49HDFq
zG=LdmJ|Y-w44s1}`@ei#0<pDf6PM6QA;A!V+f^n%N+}J{V_R8nmsz=%;!q>~x*@Gj
zl~Keeu9K!yJkL`O*?+=`qNKm#oFLg@{Hqz3UTQsP;dTg_==3fEvi(u=7wny`PwA6w
z{t#lT$nW2}8+4s?SSjF}P5ut;X$vm;+y}ttBZzYQHr=eBPWb9&QSP!JZBYj5TI+ca
z0Xd~mi>MHBh3i)C66OK|gSHt#&yUL+mZ|%9JE{t)mznOw8-EMC2g%`Z3i$@cLEn4K
zu5Y##8YG0hCq!{wRCS{``O7AWq+RFoU4IL)VXT`~d<#2;#*p`ZtFl+XDcJv1Q%=bg
z&unwW^{>6RjQ-=lv}A)JJok=V;`n3Y5n!&n at 4#btAID>z8AQ!!PoO|mvLi^SOb+Nu
zdQc{OMo!Xfmwz$@B*rjnshvq$N><Y~$wSEnlQvs2n2`Xd25n<|35CPHaKMYQ_mT%>
z%2xQ%;>ngExh!-!O9i6LogO9tq?FgHJKJF{zRjt2WqH5)WaQIhUVLY$p~wgXv)_KR
zokW`Yz#Ukp!Qoe<#q^!sBs}tARj*qZRLuDBEYr!s8h`ra0 at HQu${7m00u^Nl;7 at sF
zxC|#(rQOxp3hgSiR-!V%PBj3AKI8XzH=ZGk?nU|x6C`8qbd8P-ud~>K#lb-HIwJ9p
z?Ty5dmEK%;4ngx~zTX55ogNjmt~St~E$>Jp`eK(X`fFD(de1o7Rj*s<_h)0er4k9@
z^8)%RAAgZSVNA>y3`!!){UrFqISBWk@`a{2#C;_vbTgn*uLmDOqFP1Ps~J_jro4rn
z5<s2z&l#FYpX3RKs>o_>X@%YhYP=#~*vhMw)_~tEx#ZW7eBSXW5t|Rb!U2p6Hmy3C
zwZ`;lCOwLV-olP#J`V9>U5OQ1z01<++1cDHK7Xzok?+oO!UTk_nJ#}@Rz6I7+G-fv
z?q*^0PXwpq=;Rz at su0U!%nS`gEn*!YQBq7>YjV>t>wqb88Ta_5&xDjhyVmio at R6R3
z2Yk!@PvqP&xjoLmwXxP5`cQNw1TBQXuAgbuTH_s9>icdck$M!8 at xQrOAmFX$U$LO!
zo`0Vwr4VZ#v(N$Wm~Fmw9&H(qY4WyciY6T)o7o=T at A^fRv6y6DhT`8K4f4z}#HNuF
zE2KNJ)Ml&+vFG(ASYjGlBvgZLule4(`}?>bC at Qpge|$}k`88a3{L?2DyDx+t$ss}N
zdV<j>i|oc(QIWNC=@vRl9mXHks_aj1OMhmds|Rn`Ww4af at D=@~-+d9|5Lg`Cl8B%%
zc;O)+O-7ASbcy(?zKTKUJl_~<U?Is4LrpBWx^z#_-S7P2AhrW6rkC<e0ZEHMU5AKE
zQl~)#o1W#SfH!h(`0h5yDXk|TQQ<67_KEIxB{X{|e&%hDA_S0_;$@g$&x%~0On=G*
zcInSqaH;GB)llOA13>)0kMj7bR6gpUkj(R)AN-h+nJSA$taA`-Y{LbRC)IcuPG<C?
zP*(FpIIP0zXC_X?=>1BdYhj8G-I^<S)tu>%B%d)Z#n9sDId0FTdqQoS6*eXAd(YQ)
zK=MIO!*h?HpFrhPnsBX&@S+;3{@S1tDi43QD4{tCsZ0Gp?0iRm3-+k$$vAS?q#rM(
z7@!0p>&<rY9(RF^v^!qpKuC0gv2AZD6i>WdHI3BPT$w$ZrtI!>J}Z6#a_0%URcCqy
zj)x4%ka at it){;Y>vtU8&D(`9CHXpVG0)px)4`K)1UXkoYbND+#OPZPQ<haAr#!7$g
z`15E>T)BIY+Z?xCFPn#=^Gw16k;ITN9k2tiKz&NEpN}*#ROJZnAmZ?@T+GiAO2EqP
z7v^wyulC$NDSXJo-^Q5 at zaCJMl0%{4AEX`J{Z|hbiwj{~0sNM2Be$%McHzL}pI2Am
z)nRd$abet?FWkZ7;&I4jHv>t&dUb!XDMc7j3XI<nJzUo8(j-bsa|XxmlfGG2&D-N1
zfy{A`acV0nje;AM!|&mka|wTuXYxNz`znh_A%K5Ch<8Zd+PT?Mr^7zkk1xWFk)-mM
zr>Dm}5hrbAY#2y2+~qA;5oufqf!BCAsnD&rrkgvCx3BV(T2lo?{gL}cD93+2wNI<~
z$#lAp2QDmfx?&RMN3(JpU|hzBcZ^W0XFFu<$qXDLx=)RvSi9offteGmZ1f}Cp<tpJ
zZ?4_q9Z#g|4<VY}K&D*KxTR`(5!mnW(!59*xTniPAx{wjKY;dpov`gC8SFNU2US7*
z-m&+VDcJ&uqh4JWm*I(&M<{<T0#Z;_q6F0q at P<Ty=Nm_)x at AzuQY*-b#Agt_9bwov
z8Zq>zY^dGmmgp?#?Hf{1j>k;|Ei!&3ML66Ktez4MfkHH0_xdNQGaPv35aj;vmSmS#
zX_?wl4BM2Jr~7wilkoEvPjwt9>i2E3;3#p*;3!($?6<17JTkAUJEMP9I1578w*Lvr
zOGgEh(fuWxuE at B@+Jj_E1l$<p8>VxWVM~z}4=4qFQyYRln)D-D?O0dWXQelhlgNoX
z at y2t|T at QJ9@ra0OU*>rPFv6l9sN;wOI~5eq at F?!5o`9DYTTJDFwH)P3g!XcrzrM9N
zkLzo5ykwpE0|9&i1FwHgQ-b_kwc3WOatrbq#yumODkmd3cUz|Ve2Y`<^M6C^COQ%M
z1=_G_jKz&SAr-gX^I^iVx{191<aht>PhI;|Tbrv*Ft;R;e;J0ZFW-CbtBN*@9}}aM
zL+LrH^=w|iNN=Y%uC5(vmnB46V+Zby;=SML at -cYa(RZPh@>+k$wZg5yz}-4__4hBe
z)iAf?`I+Xr(NykRlRI5^)T409A&1=QJ2I%QOlQjQb~2YPs&;Cqy(E$XZkVer5ru>F
zoIWh_?d;L8t!0#IWm_=GnI)q3LPI35pPB4T>VGNYtcsIAF&9B!+fM>;jmNnSy&W>%
zv_o%U$5(~8DSdy#f8-4tbbAol$NIXfJN^l=NmS5N><AZPuczX$98r0hC2f2gttZgP
z>{`aVew^i)RdFgw3$e{xdR&kt#1E^GAiA)*tXqHRRv+oS_4;I19RJXym|S`#;Bm*Y
z7iELtC7D-ZL=9C2WOlZ6qBFxxtu-KwJVuEJ>I_{q(3yX(7QI+4X<ws)@02NK81<D>
zW%Bk{OHnRX)7_IF0O4LdTW1j;#oW at ZC&>ol-8Ig9TlJbVo}Vf!Lt|yMu>;+m6FW^y
zZo|RZYx(FbVK;Ba_&;G^YyC=kkAv=o>42gutA|kSZVL{xs-_BYch64glZj at hS33!8
ztA+il=k9-+Ks3-!h~6GpxfuX54UD}&8CkzIv#iD{qE0~_d9SU3zFhh&qALMis!q#x
zBdNf^%+)KPP~tT??zYk7bInNtiV}v#PDR>WfcOL1SfDNPGR`b7=T)t4bTAy-Q#^ql
zLAlOBiRqH;Bp*}J=ei1*D~vC25i5XEjWuj)6fA$yP5%d82+QGUzK`goBpqy90U%8c
zy28}DMZI$72fQ8_F2p11Kl$J8pGG7aw4l+`jBhh43YL;q(vv)nnyXJyOyb^ZdaD3^
zqfW*eCVqKO`K@=4=ZpAi(mMKY%zC64s%A{d&g=9N2)aaBV+1*YfaG&}9I=Dj3d02n
zQpJC+<`>2wb68ELRlf#!1Mo8S)5-?KS%PEBb~%EFmUr^zn4YPhL#y6cX}(T1^{Mhr
z`uQqnfVe?`+x at eY=a9?2C~P|K?Y-US1Fip7<v#+u$^CIgQ1F#cFR?0pusp~6)E$e*
zU>#BtqY*{*6cs_pdX-gya~cG?2|Ko4s#1Tc#RSq23HTwYn?uQ>n`V4abtI8iFcOs#
zRjNl6O@!@w%V`g0S)6PgDzMHqnv2 at W6t_JC@z*KN?(rGr646aC8^L6>9|yER31}HD
z(+p~o#CQLOmX!*p5-=hJdV|Bo<M!>E)d{Z%0ZCu~GV7~_eiMVn&QFgk>1WR*EKz?A
zY6hrFr5Rtahk2rQ$*k3!%KQ9aBe`W=n4rWqhu><L at k`)wg^WsCS32P5g at _h6?V*mf
z6}h9lAx6c at Zt_$YS{L!X16PLxspa)ErS$GQd<YbY%)WVgxgM?U0 at AmKwR9O{oH$n`
zs$F#OJovkVxeHM$L%dts6KXXb1kisyKGZCy0afhYt(0ie?<3IOmhRyAN6^I?*bt;L
zpM;Vma3BEJNNy`%X)C*+^3+Jz)jxb#V6jF0%F6D%2gO2mf|A!OAr4 at UyBv;?)}Pn(
z=KlJ<#pKc3Z;V#raFg60f=eO*0VGpw<&_??H4<dX$jb0S2>-|ku>%;zjU<0V7Ymdg
zWIop@*mh8}%xUq&|1r%Pdq5~y0*FYKj)Q=&GTL8-j9x5dXlG`1T3Ss*HC6psTgOl_
zmY!)11 at gRsU5%K-%|A2LbPPC-SjrfNLdKcB62tvp7N(ihzz_*Q+CO^xJ#+cHya%QD
zHwYSl&CvWHtLUyN)0%(kz#4!48jKi`gh%f$au&8-jL)`<$|E9wd~x<)|Dt*p{D(!j
zOnVn at MRo_ioCn`!MRIKqDf7uo`oqFTdO2=-rZg9TRWB_#gZgo=skic$rbVo<a-N at j
zugU->Q%jDw9n|*PmP_NaY2qj?6HbJRi4{{P-2HHORdo)8k(wN}aMXYLZ=pg^U`5_2
z{XX at jxUYf3>?Q_h1=8YT(SyJP{loB-_xkcFqK)OT+`w}g#I&llMFeffU`p>&Ke0JW
z#&bi>`#$tmyG2i?H_Z^vBX0GM7w$lfK}LfhWzVMkpM`yfMb^9%tYw``xZ=|(hCV at _
z8?UEMT@<TKHQp6Ps1tu7?lkfLJ(GB+U^s=ODlk;?)ROv5k?f{EnSrVA1^UM^@kvRG
z8Q;_C2^^$-PD{XFw27Hv#nS!}7c6L?M9x7S24dELH$3BH%ftNZ5xv4A)Y38P;d4tQ
zR15vB{v<VnL`UA;TkAooJNS12LBbu7xy#<h at su}%epr(>y4rsql~@l)j5U+yD87kG
zc3!j%Z_}J;lG0POH{IA&efTu$r62fo2Xg?ia8$Pp7I(quf{r$zD&ZCoZ3$P at c<R|c
zEwfD?2GM{kUxkT3Oph6++rBVK=cozT`}1Uhq!(B+xzCxs=rDs&%y0!}LV3b{;l`0J
zLo>VW(|@XD{ZoH9tciDpUSL2cIK;*`MWI$Egg+D<#p8q|1}|6i*F$occa(k})l`yk
zJUw-~DyzuVz}Uw{oHbJIMpzny3rO at 2kRm>e+G$D^hr7KACKJ*w7af{bg^*^vixnUx
zitX7@#Du*J3dz~Ia_L=$-ScT)jSFI06ly*YG;s}H8C8D=qs|V$lP<(Ek~l-p{Jvzc
z282>lIVPj}mS=KgU3LwSdix0(XP+v15)L%*bQzM-j23a4ks}OLpmYDiFsx($3nLCc
zWJuSR_H>ZLUiy5(m^goWFcRy*X0H$WDA}9TK3T|q1X41@^(=&+9whn2V0he~$_7 at e
z#}v!RlUskeP-Hs at vv3nA%XHXnGAAEWvei0Q1#g-Yw-!gwR&tzGroREP&5A-a*Es at 0
zYW`Df6v}cW0i4`sarc0ms=V{wlepXv`ftZCxbt7I4a}O;a~Q>wGqbp_GM#|LMTAb#
zNDy-7uz1vncvAl+Zz*lW{2%us_SMJV`J%b^f}MYt9zDa|n)QV#Mul=Rk+VF<0dvlN
z)rvFU)i;9&NP|r=BMFs*zCFE}8-D0}Ja>qSU)e=|{ESG6NHRn`@_44c)+}IViZuaQ
ztm(Bd7LZb2xJ61oZ{ySk3;A-oWL~jwbxWscPb_YTOWYNj<PecVwd_Q-Kvj6PH>8cJ
zY6yRwMy9fj_(Ib90y7tNlq}29IN{mFT3weXefXO$?sGWjZZ+QDum|%K=c&Ot7C%Kw
zI2n6$$)f<Goo#2ti%O2!S&=(sm#sJyhE%~G;{(`LiwBPk&BBT)uv`t=9mRp){8l%M
zv6)o5qzz%q1c0T9m*=6wMf|DJ;;I2lcYlB02S!6XfXoDq#Bt~Q6R(=D<Y)&;RCOPI
zERs8^d56aNU^sT?<8Yyl8KRx5DC?(U(`NHs+Ql=bM<uCQ5%7e)Y#_St_29uti%@~C
zP7k%^`U69@<aEqF at RjI5)W1{9AOH!2f~1;ES0{}J0(w`prZo0oxR=~m- at wa2R+oQu
zl?%8gW14C8)>@7l`)YyeTC}Dn;tV1(mf}!W-^>xj!~9e<CInQ=7)5<sz3sw4jk+LX
zd*-*0i-I~ee0Y12&{Jl)*Gw{c@~BM?R?KVrY8gvdoG#H_TX1 at R>Yc&L)Ib at bMpc3z
z(%S#oBQB_6_J+4o at IL}7Kwj^rY8Zc@;7N0YKqWM-mr5Ag&cki at 0zORi{xp9}dt=mN
z1H?_k&wz}n&`4i^j4y`iCA<{wsB~CP+U%O`gon+^P1Nz-o*K at Isr|^h4gfHegvu at p
z9eK3IE*%<Z&E)fAmct2on6EU&HB~9xDM$KoJ>ftM)y?3-Mm-0|wVSt!E#7|)l$_=w
zXC~#>ow~cvnD>az{L_D3{GnI$S^5tr<JWLk%c&O+=2lXlNe|`&pWXrO4=5sV?7dhC
z@!Th-M??$n&rGPb<?if<THY*VBl?b&YuYDqwk`p^t9T^!z(Yok`$Q6+xfVcaLj-5o
zjcURHv1^vs at N(OAtD~?zLlS?Ct=uB>v0ft13sp?Wgs86i!Wo;Xe>yNT5L_|{hrE{I
zY;m0Mi$yzR2H|zWalw2NPEkOfPsF>=&vE5Icft1&C^4P9hm?`Lq1*({L9XC06&O^<
z^u-uIr`H9^mZ$A;1WhT$xo1FLny+q&zG>CU5F71pO|Q at E5wc`-DaU`XE94dgDvq1S
zV3|xsb!Olyn at O*M-)68~C*>fYjsBaq0y;N|lK at k6S}t;Gz~EEgIcBy|Tc+nB9bNp_
z1)mjRcxDW8VMbg2p+r<8&WYv|;0{ZrH&P=4P%h#o)!LItTdNo%1kM82Fx)S$M1)E-
zmVWEiW}nN9UOU*!qGf*{YI{aL2rGHps3s}O=^ZCzo;Onswy{Mmm_l)GVB3cZB(+4I
zL|kK<ihPGC at R|dB*Bk0>=h7-EFcw6}UN=aQbZe?X*|lnF<B~rjhae1o^u;WYx4T`a
z(&EMsKL2R?A9z~DaVLxz_2>w3T5-C(!+gLzJ#Gu6xDH}Q&tHGz(N?7wumR0{dJ-1)
zfQ8vEkuat<!}xe;MIx}S=j0V%qcC?~FsJ`_hAvb6XyKMK1@@JN+xtjt#dKlocwE+8
z0?uq7TIjkY>o#E7N{VKAlT5BgC4I{p!)~lLgAh?NRe^H9*l3G+;XH~OCAAslawI_q
zwlV*x&zu!^_XB?>W7<ljtwDb`aE4ozJgnmwX!L_QuxL=~qG+XsVz5+^VQ-z~h`^|D
z3{mE}oIoR`7i&Tw<=)FiCK_Neu_X5Gj)p`b#Sps(X=!2ak2&JJk7fx`>ovb2{a(z`
z^42Mep6N at 3rVnPgRGk=<lYg?Ems4D1?}7YvxBnr3`V)Ud$H=I3`cT5l5UJSG_87+k
z4ao7`!a;cCNhTixJ)_;hjEj<_-ng{|G|s+fa@@QH$*y6}lsO*wj|L1p^iaRSr&jUa
zM_SusbZ at I;jXl(bLZecLYrG}Hfzo>UC&3^JH&Z{yuFGm at QTj&$Z>9OXW!gH~1`X|%
z<_rQ{F5rJG8*NrfD~w#luFwQzR1}kJNl|H=wJx^i2h6h%u{4&N*eAq%FIih=I$C=k
z3EFfVS-~Fv{-*O9;IXi1nE&MsV{LIr?D=I}!?9vbcmZ{CHdOMGVJx;`pbl2lQtzy#
z7J(!@knb?zxkHQ?Qk1jrI>34um4=W$5E at HM%sPLVIQT>#@0zB?|2xH;pOy?4I4pF`
z<Yw8+R=p>OcqQQ7qduZ_!p!<uqgSG|D&)kN8lz0onr{=}Qi30d)Y5YaH%sXYh#aTs
zU#X=VVTU|`e|F2}>Dda87$xuar;ywI<VsvePxrjOZ%f@*Av^VtO6JIU|A at Dh4sdYD
zmau<(CLUjkRxHDgJ#Ybs`xKE$;6$nEwf$c_dEi-Q8f at 0dfR-k*sWa+`-!myhg$4fh
z_#H?U#03jTbtQ%WoXx6rXO_SE*#$fqJw9JieSCINocOWb(wW8z)_J2NnpPa`>6#f)
zqf!O$g at w)3%QMY%qIbvJ%WkkC9%Y%~ksE(gvAc;RE|6~j9UyXrT>#oM6V*9`M;8Kk
zgL!p^Ltrnv*-kQ_bX7_I%aVc^HpZHoWVVYkV83AITe*REv3<C^k#^%gllPH_>}FKa
za8sb#+xh^Xn5PYj?t%(U8P3de`o1 at 7`byR$Ejb;1t`juVKcX*Gi`0jMmN<~zf9ZeX
z{iwnzxK+%qD(&l+7rFv0X4!%73tBB(k(k3qT{lI1B4mAyPa at BR`O#G3=9q)3bzEv-
zw06pLn_E@&o5Rf3oHv=jVxYCTmon&QbDt+<EKMjU93~?C)^RTL`*wGg$Og99ycbqi
zss1KB!SU7f1BhtL*a1D$f&ST7i<N(<9fD_a-^O9v>cp8D%sZ7gjJG6#Mk?kpyNcEL
z3U|7}C~IY<iD7#gY-DDkYH at 0mPjt^oq=?+Bg;l4xXmYU5!})waUZ7(q7<YHVW?8oI
zV}C4WZ7^!8_3p3Lv_vxQLTVcwE4}DgBL{N10EO&Wg26eb?CP+aT<qRn?D&5aFr;J^
zr;LI^F;{91snO|aYCtVp2~{pMi4u1bxqB)z at e4FJp+CZ<9c7Est=Zo36^4K=>q3h0
z;mQ*AhhF634%;!e*m6TfWH~-h=#!hLSrzVo7J#rx1x(G8l_S!`?(-`MN8+Gl^%G6*
zMTE3?oI0jKN%_E{RNNc^5Osg|O1Mls4oRVF3Jzwle|^7n7jdxcK4bgYFgPgp?r48r
z-vUk>wtLB|3w<Mwv1=B;2pCYk9AI53VIHjc9UX9P(#cXWH#A}~-?BjpsYn$9drv0C
z#x|g+q{I9QwO+yBSWP63E#rEB-CBxm>Zp77QRUprw`w`lx^O`vyyJgO*d)c;@4{y!
zvY!kW@;%E-QUWuLO|h@=Pbq5|;VmxCRPF3vX6kJ(ulGii`{bQh1A%P|YPzKwh?Dt{
zFC*L?!&v${FN&G{@wZ$Iv<YI}I&UW`rQwKN^Iz=LVfF9*H(Jkf9Y0bSgtSIQfkch2
zV#LE3d%NH?tsS at H75#rAE(*I9kfd_>bY6X1c$PzhSGXDbmyW(SiMhfgnWe16xrRD_
zpUrsa8Z49jFhLs-<ePr5rTU-ljVbrtny4*G5O3v5m9H0n^~mEz=2=0rE0JNt=wJu?
zTsoR6esOaSzj{R at kis{T-?yxr-b+FVUf<83I4ljITEKLmSD1hKZgT!3Oya_0D<+t8
zx at K>r)mzA{2`dtCZQIIco1_P0x~camjIkWSIIa4_;DD50nPy48ZeBxhuJ)C9NXVn8
z{m-1cSZ;!S$F&BOYva$Zz_79#6R3_vac)UxX7KsIo&XDvU|C~W`vS}^W%q_Cf*(qc
zG)JK&HH<3f-Zp;=3j?ss{e8u%vumW>L(c(_-o9R?vL<uBOP|E|7h6Llb?Nppq7o)?
zE-FDrn?%~Ue1R0Rb8paPv>Q8q^@-CMmXm{FbP+Yb;gGA0tc4e)`jR{d?6E;!9%65j
z2IXSfRm?KB=A=8>g+vVxW7~<}sWP%s9P5V&3g5Ns6&HWST<(ornRofJ{;dz&m)yQ7
zto*&jIG6UlI;F}83)|EaRd?{S+_X%iY|+3|nk8RGlq>n;oi1_c_rC3%{S>ncHA88(
z^jpk&glS1BlR)hqvfY*AHc|ew34(x=vY524*55;!8sQM%8rCvAT_sF!(;Fa%Dhm8t
zm%0ZxVK09k2o!**g{o0 at IWMWk?lzKb3PradCf+^<$A%FDFP+&hwHI#uGnXcJayOUa
zylNuyKdcJ0e?wtg)x2!nJdG9Hw%x_?0`h3&+Gpw#N|DwZIfpA?3lRceMU(Uz$`zyn
zju%TgMC*LBrj*9|Uao(9;Lj%XHr0sKfwp|csb_ycy|<REqp*>UmXIpNnrmLB+VgfE
z>qW1EGx;X3qSsNwg<EaSj%#orQwAS1^jc2Nc0M|-6hQS_P-e9M4HeH5$13lwp#s6N
z&=oy3d-2S*&}2mSphb0RFqv6+N!d434u<ZqEqlM>j;KA!zEq at OE%wQEh?FKwjZz%}
zUcP_wQL(1PTD9C5(n<l%`-*!035G4>98Ey&E_ at RorTbrN>(arJ^1E9q;3vS%CqC0e
zue*d$H9`S0JzY5LsVBZ(kuBTOs(#!L4pc2J6kl&@w?jQY77*ADt4w;FFyGOJK!1x^
zmYe8GsMn1=imk#1W)zxqgjo$9b)s?UH}HS>GqUzlkg{!aG?0~EF&As}IV20>!8%l}
zHX1RDQc2hQW!{@k at 1dRg<^iuUlAQ8k;K_e#9ArYyRx+C>@O>V+JeJD;vt!RUOwi at y
z75=i3_?C-jUK;5^V6NNmQEz5Se-csKseZ+Xm65!pOJZItVBN2k`L!`iYyk2XQc8b`
zwzZlP17jk~EwjZ1`yiI&a41Y~saUfq%Ww#dRNUo?y<pO-Wh=j67I}%ugD at g(jO4+#
z>mW2S1P~0y#Z at bh;C@!l+OvK^Zi9YkPK~Wc9}t)E1W{&_l(DrX#_Ffcv;KqPbAI}b
zV~*gW at m4%}Va={mq4JR+P(K8QzEgh{<s3l&1~O{~9j1f8ZG4xQz1W21yAbaJiCn^D
z`F}qRJ#sWsHAN3kg2`%Nrn8bpr38T%t)mhw6sZS~(Q;zmZ;V?``Qu9gkiHEGwpC2=
z?<XCDqK~e7vyXM2)S~y-AvK0QDvKU^9XhgUKoRFEQ%Cb+r9S*HRP^&BRNjAcw_Q}g
z?cBmav)di0`_8+DO9BfeSH?6*FaV)|l7(0GNc^=8x7e$+x82x}BpL!<kD*Ey4jVgv
zysw5IjeL=^|Iv!{03(lhm2561Sg7t7w%)%Tgagdd+5;t at iCa%?_Q1G}i`w?|@hjQb
z<=~7~Y~LssSDDZEml_!Wpo)J%?5B_~P*i_|p-m2DVoZQ32Pyp at SpmLY2bb53OiQmt
z8!-4)*7P@=u{QfKz!3(@l^@e|&_VE;IcF@%*c3O=v{7%T-9!&h+@!Rcb2#vEcunSe
z+!- at qAH<#atBf8n>echpfR7uy6(wT)(x#d&m2K{Dk5Ek<<i?kxY%PCIKY$p-?{17g
zLx9f9M_W0;y0`w87n#~wBc)7TdeY=FuHvu>%4y at d@i7hY6zL9mz4`o!CC^Llzr964
z at 7f=HeP4 at bT#D9+*xb)Z-QZ`O*FQ`+(j_S69Wvufc9hlA4>PR-Q2&lxDD~zzkhan(
zvG!?S0ixNh9-7UDTOxn9h*lRHUnl23*_$_g4fTL3Fa)fQvN)NJs)M|P877A8r?xtr
zEG2aYy at CE$9D43;q+D+9JJ){jH;<A4g0Ro-A*y}h1wzY;3ZB&!f)3qVPE73{mOuP7
zEhj{Xhz*;JzOS^Ja85nX?fm8tW3%qbdRnSoN-8qB88B1rsvCbvWwLCzYxK1ZuDMzP
zhc6gA9hC7uYGKb_!Uy4Hmri^e<!=^227Z|l0|;@+B7WD?-Gf0nOrPu|hCtrS$57p&
zle0gW7fcI at u*ch%aB)@6>T}gnD}tkuiu09Ad at T5dWXS(L$o~!;3+^m!@a$caB^|P8
zsKQ2jN5;n}pDTY3DD-y!9Hxe`a{loYLc`pCUc97*8%_w*is=n*NT1stfYEq;v<{Qw
z`Z-V=K^0NZC>E!(&q{^P$@50UdMW3RCQ2JW6gt$PN8K0gV3)DZEL9QF0o;MHTc`Aq
zB0r4R?6Lov{iJ&8hkh;iE3)OEMHoWe?p at k9nZ?a2;&y)^{tk;Hw<duTgaKPc?mz(+
z7xAfx=kmxljs~EI3dcH%nfI+;hvmYLv|c6-o_u~0+=3bk3s}dDop672l#^!F(aV2O
z0EddNFOs5YYYFROE at XablJpE2`j??qsjNI>rPL at _SO5s<=sYo~t_wOOS74GrMu?}b
z5nnNV at I`;2FpxAc^&UK=uP(bPZTU_lr;M);TYpMs*tOq(8ex37)nTgo#Qey|_IsJ8
z+hv8LO+v<5WxI|;dImJK at 4TJlSs6&5P37LPm!F#!iE9^oo==)vd+&JB!8Zi#v#uo`
z2*PtC%ZpWrPA?HZOM;z7V--o_ at uSK<+*5CRgYJKOQ;TyPtxDoI$sGR}97kDAU+*2j
z6#KD4mV*+VJTXQb7?W&a0!O~1CN0!GpzYAHn<zV7_sAZAY%@AaHK;9on^S1_Jftz{
z9HaK6Tjf5t6(*88v(3mH&+hZU^b_&FJ*q<ZbeeXeomzF!z#%_v;iw at n`JziZGOgS>
zW}JVF+0&ph5YYHju_Esc#^<>QOvM{>4lj{?42~Lew^VAmM&(j+f9HjjfjN}2P^Li0
zk4{WQH~=7-9J%4M8g1H=O1#d0&E0q9)X7{dSXf&y3Yw<FZ;t%9Yfb<i%4KA63S^R9
zwk9w&B}xt}C6Ue at 8ydDwCE|pYwL&BVH!Oc_V%aT!Tia%Vi_ep{)wk=UQ^Y5FtH0{i
zZh~)ij;h8AXMkKR(@uO~iQd6yrnQ;>t>&mQ at j>b;E!^+--6~tliB3IVqOFsv;FImE
zQJWnH)ITb0B%PB?W7TkVn3vIO29`-6qo9mc;#otD-E!&w*C%R;ufn<Pd3x1>Jj{P9
z>*b!rHmKnu6n)V?21={6TrP|m&oIT1l>30_3r`dBj;y(Xt4J*(%71=>aE#9FY$#Da
zL~WHdlMHI_fuOQ1-bY at 81o)=oE4wD67*SHQtKY1#O(Cn&(eGLBNWu3|p*@w(wXhoc
zk);Y(PIG$wB?kPW5mDl6Z-_#M5$%6R2UBsaTR*qaUi``fSZ at -n5COuH%SlS#`#cxW
zgH$(<8gdnTv^|i^T~Mwep^9X+f=d5etXZg5r}2QRF0W)V^85w-^D5f?93Ogo^c*%5
zkjo%-W28m28Sjw07CU{$LovHO$6C>;&rSF<c<lmtFtqQbImSdN2=9<ti at kq$3NGLV
zMgAmV3&|!)inn9>nsqWfdvTF+TR79^L!N$$rvga=u at 04QMd`{Y&^#Dz^4_bvQI3Vh
z9?90IV8I|<`UA7r7Hp0v351TT5-+O6c0XVr6d8ODWzwQqVD8M!cUfLQ9}5MuuF0UK
z542%i^FKI#H`|@U|Ae}GX_J3QGQ&%qpCQ(2tL~P9fJS7r&EdTxm=j-)zSda(lhO|>
z6Iu+td~Q~3m~%{ux&X$O_h^wPXL(=09OJv_<Ln}hmjQU;a?G_c1s8LI5JYrR?cKjK
ziMOAlX!F&c!B-gx^mj=jFB^l9$$(C^&VjHgI=NQ31}F6NIjxPWX;**#Z4NP at AXq5(
z3go3F6gY*{NA84UkYO at B@1te2wz_rCt&am+K%%NkQy4+sG6F3BuDJ_>y-IS8UVU}!
z%$%s9aL2tTV9w&>|0r>pUKF6I2IUK=@8uZA^E|DUHb1<ep=M1V#c4s_nEGbX8Rj_(
z#hMB*w0Cf at +?csrrz(Gfpt629na!<)wcZ$pL*=@KwlG{}1;+F@^=uAs{R}nAMlDJ)
zNQ at 9`=XTQW>FEtLZOYZ1(C9#TyuWJUyB);J>6Z*RAEF<~DSb*23lc%fAe9wK#LIz^
z8Q-K>JjejIc{Qn at ZtGu(gchV-w$v&C6OjpV(*DH>!CH~!WQ>101e8z6;P4)JSx;qU
zONC}@Elszq&KAZ;AYJf~bbx=A%{pKIjk|jOs{&XB0#;EKpm6Nn1Z*q_-xk}b at u6SZ
zIMxN>iyYtdG{_Gy#y*4>Csiex#uhc+yYnrpt(=!c&iWn=kYg<*MJvfO3PH0DJ^*9$
zmmg!7sKTVONz;FC6ReFxW#qU~qtTU|A>;@E1zqV}vtZC(82w&P9J&fzN%&+KLxaHy
zGz*`-)+cD!|K7=wXfQu{1iV#6G8m9`T-Eh>*2~MUDezrCV26Ka!$L<FEU#AOO^c_J
zFF8_;F at JN3Sp%##`Zz-^^94MHxy(5qEpZsqpIQ6cymfyizn{2-aq|)?AqJY{1`TRa
zmL`;V8OeLx&A4sH_H at V_mm3YaYc!=J(NeW+<p4_Vh3aq6rXBg27qR`J9FvEeoIQsB
za%KBQ9bZo$H|$EL`(qvOm$}?q!MeQlWQjNFK&Gc=cjhH17#R$n!hjlHQVDLwuF28c
zd8YA|erSKfNITIWTP<*e2&DJ394nVkGPpPtvbYqy!*%`UtqDZP at -~B5gM2H32ra_a
zk9V-Vvc`oROpL2Deq at ITebojunKleM*z8<#E;oZhoXEzBp9s=7G}qjA-1uAyK*$8V
zFC|vdo+;Z_-uSuF1)4V$8jy2jZF1w6I3_P7=L&yxQZ6^XKSEfD5#MosTxxt+&PD?P
znx_gJ1ccDqjqpU=MbiCNe34KZ-;DK?glVRj6r(G6p=Mn at y<-tlK{kg0y%{n9cqCu7
zphMIRI;wu{uO<0b$6g{DRK#cKqvhm_Pvwf5p;bPbBf#mi=R=JNdGt<9(q0IB+QZJr
z^M8MLhxg)VU43^Jp)c?rUeZ72iDq^Q+DX18gvrJ%7 at Dzsh(fMFcvblS3V~I?VoO)0
z29iHURko|T*bA1H2JE~H&00pvymNp)lqxK_OR;U6*<9UiFAetk#f_-b`GwMvCe2zw
znxTTR8s&hvGRkpxC&WnO<4(-LB(+eaV}O5N#jH?t(1)qOLF4>Ej+YD5abM?CE5YaK
zj^JQ3d?zyegtokhonekq>k5K|!g4~so=mGi3#l|~0gUZg!2OwJp}zUAlD%7EO{iLP
z!`nx8!K|({h2lhrV(UqgpU1c}yT2oI$oZB}R)B?%{btPbW<tm5yg*Kv@&BFsj$?l%
z;``4>$b>~QF$VfF)-Ji*S%dz8ZoH6w0?aCZ54xUiLHqboQT%8CM+cOtmS4UL4a>I5
z_H2J5sbZcvvQz<Qkp)PVNqS!6RKIcR(jc%vo73b4s#@9rIl{;tfRlM=f=3?m4WH)w
z)*E=SsGoOE9BZY2>gxD#>GQe{^rV0OKbO4}SP7ee?-p2<pqMu`7}jEf=0lqZBq(lB
zv#F+U&4QQ|xx0#KdSuSWso&aHo+egg&@V7CQO-($0h8+{P(EuvVQu<m>vd|9c9(kj
z at P7HO(|=Cf1I4oY>c at kXMYi>7*}8Aj`E2#=TL`WsDYxnbi{-5TC`5jaG|+#O+g}M6
zThXG^>4 at oGpI@RT6n3h52F8(YWVfya(5IY0Pk5(Mg})DdkoGX at J6T$!8bbpm41JoX
zJ%>vp$X8DPqR?%s*iz6U?Y`2?1ztw+N4w~G=vo0!n?}qzA_|#AqVR6-=3m$qsTdA9
zVrZx>RB)O<SmfDZ!WKEg$B2KgAM4GY!N?)JhpfT3G?`w3KM&}7Gbv=X3)U_XKU!<m
zTH+Tc<gw6mSHEV~l29nSgudDm_$%?@@bzi~cr-t(&%iebqnucm`|CNG<WZ&}ZB}^#
zA6-!gP7+Y(V4*}`@<!@WdyO;A)UTp9#N!9<lj;+Ieo+McucF;+E|-7tld0d%2V?^H
z$2ZkSZDFyA$w{&xVg~ffBve6ro6E~EpT!XI_~a+EL#b2ZfO|k1y`A(5ZSNE5Wis3p
z?-6NO`Dtxinq-!cPz)kgq(fX`S#KMHW{M^?hAYG0t>00wO{FpHV4q!3-7(PtPU&el
zJI}=gWyEt17rXdN(UX4 at -qcgud7*&1u!~8%*`!U(ncua1&*44GDmcv60rtSjKnyuS
zU|!aDewHjDxvT#<;}FIkwTA)`kzDwlO at PHNN$JiMqzXbMGUDGw4^)cQvEm(Yx)atg
z^;O4_VKP)@qSl*}=u*r+N6ceeuRsBd0!M)*2`)#dG2Ch_M9+UKJoVwShI6p!ai{9q
zMV*X<OUhYMi&2D&upxm`V02g;@~6c~4 at x>K`(V%iOD!(5^PuQcH%I&-uxh3ux%%a<
z4&82=#H5Sou#2C8QHBz5&Z8Ja_)d>oar#I8%jMEL-XTp|LQsR=bXC?{ZIO>qCZU^G
zdEK(%HESJX27P}in#;54f;vbzO6nd&fS)GCi6(+V6rNJkMa(>tZMaJ>b_0;JX~lQR
z`^x^xw>N(w8{2{aYuCOq7A(E+1`SJ#4w*b1sIBtNnw)Nk*A$B0-;ghl<$*a?ft31X
z5F|;pvAN7;J`Jz<#FFqDYjyuff~h2?_M1VS`AH`I<dJ`!%Qi(NC;)iC2yNbG0EM`I
zq~1*(t?|lx^QCppqH0zFN7>3au>tinz7wx*ERh9&{TIFV_e0s)ClpUkRtOxV0+~Vr
z8z4R-TW{kZ{3T$06xX|K&82<aIiMV49AiV^ZcAF=8X`5WIAp#))I`cvBk(}o2*{#|
zmYtuXB@}<GTz*9r{1*4kg---XZL5(ac7{oOuZbG6(qB-l8pCoAvT+$$82lAcqd(_s
zEDrExbqVg)PM_v}Mxiu-V#H2hd=C$oXBW-N_EEHE3`MyRZLI5veLp;HPQcwIWokoV
zK53{;Z!Esoc?MF7>5JarCbsW3cU7aiMVmpAp9O!(BJ)_8uIsS46tT$+(Cq#_`R>Gg
zHf2L?`w95YutHwUwJ=^3mD@>~95j)Jo;~bwFi(-&0!W+iC1Rwc`?KLs83M<?tcu*!
zXq+0Ndxe2(wyIWn?o&BBoobCK(37EXsNO>caYbiAds0-o<pj*K2PD=ucF`r$$MqKh
zXaj$LCozJ5B+lUZq`%PnaNA*p at 56RCqz!?~z1Y1Xd%8qHR^TF)?ar6<Vk;@=PzE+6
zAzrB=rlm4Ac at G!L#L$+-*B=<_Vs8sS`Uap>8MYCn2utw at Vp^>Ddn~6YY@>B3Tb_ai
z48d?t3A#U?6iF(9qyg|SCIN!=uf+k35psXdmt(-1y3{63He^L;%pu{V?Z`ICO4TyQ
zwbj7<K<>oF(S}L$+jomO-t~o+;#R^zLn?LanmyrdPm$uXmceQvO?F5U-Lj^W*>*{w
zt%=`qjm7aa_?dz??^F at HYf0z^QVSqP#6Ts`$3WV1HEf|iK(urdA`pxA=Ixxs9xi{M
z$^xK|(aA}BJ1L$^E36c)a9K#9M6O*Lv10*Mv~Hy>gn4Z8-3w1Nd&9TOR7Lj&1JmJh
zXH%^=XXWQKQawK-5XcQjR5+#6?_kdgs~W~cVOJok>LxEnL$)mJYY;|cn10~tyyq-W
zum_TY<yZYeKdFYodTW<C4x_F0G at XB55kFH4KvSngaz9t2Yh<X9LXMN78)Eu9DD^oc
z#2b0ip4MBO&BTCG;$7nEh5KGgx*@7rU=C?r+;eUnhGSqF^;5?``6_g4g9tuqOD(KZ
zqMvdE&QRR2l$Bb{*=|zc=Xg&N35kv#d6*$x(I06beO883tkT2lVe$Sv0}6kwXk)Tk
zM16vY{`Lir{bcPmBKRPw(ss<aN!*fjG?gU<66R<wuOFbUlcszkd#?bL4+*K~+MTa7
zjMQ^>IpH21hkG(QtUEXot8lf1%k$H{Pu)6{zb=U>^65>aY6Tb~>pjwAEB>ibEp)OE
z;2HiMHJ_{oC1{XwZ~$BNy9|H*qdcW)4(3j|QBXb^AH+&pw<MiJ%gynwZr%Qc=CY7i
zx+nJShpaMvNACF(Ll$WX$yPShnX}k4ea|t`1#OEdvNP8!P51g{WfR<tPCyMH at AZc*
z;nq9>>o at N^c$5SdPmuW8M^s{$5XCO9L5emWqSB+EWzy4nE{&{(tAl^}x;ho8jB9Jv
zNGiGL?bk#P5E0Vrl~)Rr(7i>9ovL&qkHm2lh|#DzXIp94`P5lLj}I3(C)qV}C#rc1
z4AR at Dx1=8A^a>zq^Eei;28aQ6F1|dspEy^ky`+(@)_m<>b+pTL>{Nyh!j3~^?8)rR
zS+`<l15N2-UrE)kKJtI&r+!oZ9|Cn-6&YWiPb~HCdmmpd6aCLywmrkW?n%$%?3oDu
zxq1v~Sjru_8+{}M9&3v`G>wZF=p-pkxO2!Ll at M^rRy?t93#zOvT6Wt{|CaHOx1a%~
zF;bL3+4IxV`^wR37^vmC8a7AY-0&uV=PO4A`i72~P^A5TR9t_ at bE<+%3i$p5VBM1>
zeu79)%_60*9Aj0zw(@Y;WWn-;_z5S{#^gHm1vT^|w~px+0}E=6k!~8yB*%JN7QMjd
zFBH=T;O2`B;Q_`U_zKOj3x+X at wruP+u$V0ZtP4VpUOwK-n%UgiyJ7;+NP;j59{d-u
zxaz>G;U#_k|9yY(Nt1xQv+s{IbFEED<EJ_h1rmQ|%_li{XMw`(QOO|vtoT<NUJr7&
zT^0OAG2Ag!`|)%JQ`OhTDtA7>P4j1dh$n$^D^8dfBYqfiPvy3ff28Vn^*^+W1k4|Y
zcIqoTv0X=&Wg^yScA4=xdVXdm#*yd%TNQ?lPB3(X+TDMx<`rS_W)wCnmC(Synx!GP
zh2v_EG@$hJP>hz9ohf*beoY{~wed&*TiM5j6VKX4`#M)=c23mD&%Y5|be;f4H4b5M
zIXt^?kU}wd+S=>CM1&Z47QEdq#vWS;tRr;=o^-Axyw_yzNX>f{R76b0;d1*M)fw36
z at h6{I(sh4Mq!ouoUFsOGmyy3h29iVS^ujpiPb?P{FM_1^pRhWKL2|1)e;Py5WU3!@
znEX^_TnrlKmd at EXThEC`3`)j&2hYBmsf$a+1E*N<!i%ST)-7vJ*{E%?LyX%dOvluq
zD0DSyE*?89<LVMqrUXqzZiK~I7c`U7q3)KAh!=m-XYM0W#o#nfF8Y)`{}(e{uHrJj
z+io!%nkRJ^oPa at gY*p}x8P^vxFGg?)Ez5GiiC%g3!|8Cn4+774YkdQI9s%x^;RAXo
zKL9TcwXkA~cxQ9QJ9-h{<<2&m^kZ8A=ar4E?@~NJb3U~m1cu$lDfhtK?`LB(-Sra?
z5i@`BrtEj>2}`h`jOdrCcGHFAE_ybA3M5A~l*!6%#%M$t&!pO8ZC_Q#sa<S&D;mXl
zKKIuuro4vxJ<#j!Lo+ST^bs0LqxJ0(<GINwYRJRqnBa$0*PF5}<D|fsJd4_&OioGn
z#!xEZlEGXd8gfE*`KM2zbZK9jURPcCX7PU&cw(+q&vU4ar{7l0CCMZ>_utA%DfmKL
z;?m$t4IZx~d|S2k%+8YqM<;zg(TwR=LZlfxSHdid=H}UGDzCHhS|-wfa at 5kj{JY{F
z#(fC at 6?jjk2UZu%w7;`TuG##3z1Fwi+MYN(9(Yisd_Z{4lLhm(C!C~itnJH#=+u8C
zu&kdohCLlR1k9l$^Stpff{c=(aaNMl#2ro&RJash<7h)t8C2p-CJ}R4D=vsDQ}FE`
z22=XgJ6hmJC(VsiY6~hCgdcL*sH#l}!YGyW;1Y`&6=K)^^O)RQ>(H`i7kL)Zteajk
zox4oXXrMVE%$)mbw7nQ0^Q~77*NT6qV^fanNKO%_wqUV%(_FB)oJ>3PKA{Q&+>Nnj
z^=>%>8Th_to#-t=<#8E_GIG0*$;nsr;d<qK=K$L0Ha|b`*pV&LWb92;!~idygMgyC
zg7-DmpW{X;rep08<&%j at 3Gjf;gQ7Rdht-xaMU^7eRD{W<8B!GMvC(8C6}Ep&28L==
zqGRSkUP-PYM`?ysuxgiC<wV9gn`eHWc|X{WDaz48T at _S+hZQgmEf}${0|-AG$tqW#
z4D%=UNG1dcyocaaM<N$(@~PLcFyL()FD#;r3B{o`*3N=A%gK<*b`)4-HW0QWiK7u(
z{wX`o at Xrt(r#R*2?LdLd`Tl=GHQ(1I>~sYEws$xv4|BlS3|u<4_wyrUi{bE!T0ObB
zP$(xK`62aF3_IMU#HMVu$cm4fJ~05lbOffG0&mOMnEC5U=!L7bM$?iGm_9`=x^`ww
zNu}UsrMF196ddsw$xnoq>+Qc*if-*v#82-QQ;TvdamhuIal;3m)U$sj)8f*_WkTnU
z&U`2q3BQ9=Z*;pR_R^y9l~uCoaQJxJ8(w04*pO|S3^Q%hq6v>jfehR17+zElch;U(
z#Y_`Cr-}3ViL*Do(12q@&`M<;S5#$}5S(ve3uOh?jn-kX`D=DL!jaD=U!>Qc(v<k%
z%9|=Eqk5`x%7;>=)BS(AyA*$8*`t1<=*ji74&P2)HWHR6%M514fPe@>5zZkSfK60C
z^HwX&;RFxRLERzU%k#d at qf+iQ^NGz=RYe<iFSl1HqGh~y8d3RTbwlTG?g?m)U|bXL
zjj&U^A(mS&JJCUfGrPjGX2Bda_GzfE at ne5SuUH}wXW6YJ&v}2ml=3K#hsp0>3TQQ3
zVCAJB)kP(3b7sBZ{|e49SWyIr9ixtNV;@d at _`8T47Fmv2sY=-p?8p9)L&uNhU?$wv
zQM*8|NJX;H>mA=B#c(Z|cRggh-m5Pk9&otZU8?_N`@QR)6oSJuNApI-^LR16ho;yw
z7EHvDk3q3}H)((9$z_}Vl2lpA8?v3}-Zl3%cSdYK+ea-rGqJtoCt*adLv~i{I3s at I
zoI4uv;)t#kjJRL~l%Nh+zpzuz$1*UtzpeH)a`M!5{{TPR8_mM}Bhe+7%5Sz*rgX9C
zWT}%VptXStH?yssy7tLP<Pr=Oo;5Q at A{}`rGc at 2@FEf98!{IIM0IlQR+pADQ)k%#x
zuW-7(kU^FD&jYQe#$b9J>>238r9(@nzBaejnQya2a6q5n<YaQt{jDHEWO9#Hfb0&*
zC`RK?h-<WYGnFj0Zk at pCI|IIayq{?Jou_oo!`0)|31R%`SXY0HZN@<KRb%((BiC8F
zV=&vk-HLzVCbx=8t3y$n^vh2i_t+ at M$=$K})bq>~H)WxC2f$y16(dAlXg6Tjv-=3!
z*7JqDQE&gOx{-Jp!lZqjMqTL0HWB>uNcYVH1=ybwAN0OXnwHemJ<RqU>;vWVMkHo+
zp#S-3AY!>Z13{{eV-B;v3B-Ak0sCAL4w3qO9T|V*k)i=3*yj<cqC38_086}ms25Jm
z6l8(~>&ZndKso2*X7&b|Sh}#}D=ag`Dix9`7Bx>RmeaufW5NwsbmaB|-_`i9MQcMP
zVtML+8L#9ls at Bu;6Cmi*bzFJv4({?f6S|?Fz`ubF0V`xVxbmjW2{kF6VG$BU?xZ#V
zdBuMp2dO-x{kqTlYv_l;%WxC_QZqn%J&^WZCWj{ib#B4qCXfVhcIw%`FQj-+!2v}J
zbaCD3o`u>N9lRHs-V(2t_G;%%Y4)6NWIbKP5y4twgy at ND!TTV~mIA=ju{AImS^vv=
z_8AoJg4y-F3^KA at _hp8j2}%xz%Y;9Wiv)k>O2ovR!(ox#F7yZTT|Dzuc<m}p&lhlb
z;%~Pi<iiW}`&6EEF>{<sUX;G`42rE(MD6I-lORq^h&~TrEe+s~b|iMxv|g;)O?J_-
z_IG7Oft0&|#u0Q$>lASfg_R8Hu|?$<J^{4s%`*xwTAm0FAo<}Y36cAvzLwK%#^!%9
zN}u`g#pG<A(Nm1TBr?W!qtysR01vY2BpYafY#yEO5p2kGgO>QBS}gh`Gj8WK;*}so
zRgvC6fGN7|9Q(n|Qu&~WQEZ6CoS`z4ck<t$MsX-)L*C95a$-w!J&Xe(!!gOe>)L6|
zS*`cf;(wZUyT#z at Yv?IT;}_RikHLQ=exitmN59s(7D~^ahGAX@>oC8pXO3WY%Z1#S
z*9P_Jy&8()_#}{)@%R7sOm|+WtN26U4OrvPfl{#!ApENKm4Q>_^@9rS*Bi;@H#Sw7
z4rsmlrx)`2SSDT&ycX4t$H7U7a~8=Wxb+rdc9nShs94xj<J6CM$Wrykzz%=-Ve(CW
zX(i|7${d9L&^_gNq=g;^n%P`}+<!!Cf8GfZvjY=RH0IG^?Xt%r$Y90r=!D)-O>Om$
zT1H<h=oc<UmxZ^Rflqwl=e|PC at 4bGk_!2)gW{x950k^N=fTkiFEyK!3KmSm=A^RwT
zA2CFk;5jazdX<(MXCmj55i5U`g-8Ll at K-lCRUHb4q<cT?VE_6(S>F-rF>57&`KwX;
zv&XYxQgZs)S}@%|4Pl4 at Yh<TW2Brn~%ZR2w5|Svj4SIp3q<IAVudpm~Q(!}kz-tQ$
z${Sb4r*&dctEuDSF=Mf3tKiMgpAoidbIhIYcwQX}E72E2xAnQxarb|7HIr9~?iER`
z<V=cs4m at EkPMTTKfRTB{b~SLTE#irjE;Pg4mGJ)Ku~^HTsgP9mBrm*}Y3M+Ar%<6o
zc_g{Hx4S3WtFKVj7COaqHslNe$lug5bDZd#G1(gCo3+(fFqK&lWFqa&SZ7Xt!-Mgb
zjiZp?z0CSXv)_}IDn5UQa1EaU)>cE8VV3l(X|ZlbJ4d<W3K*OPxV{|pvPt$&Oa&l>
zS?a6%=dnR9X(n~dreKS#1mx+ZwnKh?365IkgSkWlYu7*4iM<~M5f>4`feQsUp at uU=
z29ObZaQKMlFoEwK0b=ZL(sItYUr3y=qaojCa1`!+znphlF}Z(W7>6_R8k2e>38M1`
zkN7qT{r_h!pv&h6bX6)FlT!tpPu>N1{RV{}a(Ly<Yu=XSa3Ab at lFs)E(LII2P77>G
zF&q`F-tHk*kSMlVWqz*aJlqdMDom$nVbrZ?mpN03Al1!$V4Sivf)Z0muGtjJZu7?<
zkCBX`^uS2E=pKIpvVhwBWJNi#Qm0t<pVuXv9z879vkM!8Efn=;_FP!fB&OzZ_)Cgq
zfZ<^4awNV at i?OMyT`otvgd)cP9UDh8x2*PrM;O4!Wu*tc70l9_AJIibK0n5ok8<#%
zY%<IWgWP<``SsFD&Z`pvKB%6y%CXeukF(qeTPg<R67PRu2{}J#V?|MiOBUHho9bOy
zyK>W!2L?5`0i72;SP|MXQFwb*;0%8=sGN2Wj*h=RNjCwy7l7!TAE{53e-{RytnV`;
z>3|om#c1aFIyT+Cm~KMpm at lQP_Sb#+h8LI0i{1rbIEGTDtx~zG{lWHuGqdksPIh?^
z)5ir1zjS|AN++${vMm<O(-eb+5!rqK13>)0O~7aGWzh>c_Ms<PF(_YhrAj$%-vwiP
zwJtZ;NSxFe9FKE=VvQ(|vM*VyaJl3}mJeM3L`JPTgo%c!UKVwgZ#)l>uAlwEc_u+X
zGbrM{ud05JKKOir&q!>2mf?{-lqz+F`@c#fvZm^Tc-+u``qu;0V><x$i?%HJnwhP`
zzY{ywgB0rpcd95CgE;*PvMo)Gmi!`*#BwZx=80=s3TFmwBi&|lm8fK;-oDOYxc4gG
zs~Y64weHvOCoOyvB-n+$+4k?(y0M`EBu7*j(BsKsprEk0>d&HJGZo78wwawbRCY;=
zUF at 2OeB6$Ice=n9)73Il at YV*@Gs)!!KF;9tUr~tCoFciy;8U%>IGcARlhw;;0{$H0
z)k6Sg$d9<Y|2$80Sj4+vY9mpOHgH at hH`vZ5*anLu7IUzmPs>IUte!!iE4)g$yK!3^
z-s`yV(}0V&@~ZdkOxED5bBDL?f4-yln2sS>mZI%{e&{st34fWArNvVs%C~Ew40F2?
zAv at ZBpXwR5h2qKWqDh78u1|`x2 at S@yfU>)vvh2q^*sRXY7H-f}8HQWxAfV%6)t|Nz
z$cQPGsF}@h)TGa};R3kmKbF)Rd&qwFJ}M<k1pR~3lD^zR0)y(OeM%_hq!I!N^H~>k
z(~4<-G at y_pv$LMR0bGu);asHw at QXXhzk$@<J7sZ|FHcZn#YwyuswIUfIvh+9^9b`<
zyoWM-Jd-BN9T`Njupv>Oh{se3yGy60Km}Jxx%R~Ttjda6?;)orOE2T2)x+b%_&>?C
zmelNCWyq3lRYbL5_lL;=$Rh8Qk1=zL2=4NKNa|&H=-yrHI4H{%Ixb&K4HnSmda*xM
z;NJ%#Yu|zYBG7qI#HyJ!Fr)vf$vT^+bhe~5LadXJ0h!H4*!_9B6TGM)mP4Xhwpz|c
zzA9-#8<Y_p+04V!d+ at p0?p`~n=&C3OjCKP)|Ni{rX0gwb)ivhq^TpmG<EzkodVYC-
z4CuuOVB|2<3TB9GI2)+26g4g*kv<q%y-m~HKxel{?#i^HS94>SA&Y^>HLCh8iE<!e
zgp5Rb5^2+6VT9o4NfK;ODt37X$}(`78blX%s^kPQFN8Cu>S>sc!le_ZU<nZe+X0xR
zu#@c5nvvV(rhQihqqH8UnyFk<>9^W{=;@0n^3Cg9whff6_`nfQOxWYT!2_CVxt^{?
zSY9{WEI=_;l+J2><P=lB^>MK3eHFvqlfD}kW-EnTude~grQ$GZ;@n1QMo3&HbE1(J
zlvt!hMU8Eqi$n&eptD^x4<xe;QF%OHSvM)B_F?S(nrV4l)ItS6$$*B!*|QUWw(Wz_
zHyIk*lTX2xlp>^RKgty5uUqD0Z|RWA{qOWDI&a-R9A}e)Sf%I5b#1CUcVXA4ty{j{
z;#t6Em$eTz<Spy$c7eERz+w6TmV2Aq7X|8t&!OdWd=T$ugnm=*F08-khf@~^add&H
zuv7y%kL?ifkt5#h`P+5IP86Achrr{&N(sg>?r2)*9j2lW`<b!pal~ri0($^U`~V4@
zqSag&GcIlq=WgTuTGkxJgaT$fgtw03oLSKT>2|CiS5U?O9?w&q9z(qTSie3rY}t?8
z*xfyAzcmRJ(MR?$Bd1c$+fHm861U at RQdg@#Xq0y9A~N&}inPZTz5ynGzkT##ZXdkr
z6@?(>Gft4x#^nAfK0VHvQaf4{rVBRKMyy>^)@pxC^N8S<5X3o>1}RIIf=2=O4o3}Q
z*>pj$X13|r8y~bBNkveYIB-)a02#$*hpNr>T@;m|y?nX0QGoc=JIJPGYu*5<c5mZv
zFdxJ9^tq9djn5muA}G>-{5LkpYJ8;x(<@Q21y-HKle+>!o~L?AA at Vx5gMoz>&$a+&
zzJy4NomH9m%f4A7au-jcXuKO6GF8xH*5(pm;^=<M!A7!=MteJKd0pA=?l3)9JuGph
zOuCJM!mmyGka9|l>>ju|P<3GgdP%_{hVSPfrBSlCaoJh)eRsQmUBvXd&9aVt at B&_X
zh+ at 9W>fNXf!fvZ<M(g?K*hUm at H4E=$O2)aP!LTn;3>i}itNfy8Awh{-m9H;M at 4YZ)
z at 91&5(@Tb~o^zBx1tuCOS~Cg`eZ=!&XQ#*T<60C#5<5~#*IKzhN(&e%m_VuOY3`wO
z^1$-!|FX;b@~VV?05V#WjH-ZehYYzoEuDuqh$|>{E+c86-JLaVemA6e<g9eAz<;u6
zTM_=sLD%b%6_|vg^PjRPU?4Kj7muXG9sru2DN8OUy0ki~92PyAr-C`N$jE=yza3Ob
zfc+JhID=i%-t+HZ=2M(+gEmL++5)@fjCgxk3;MX#4V`X(*cd-S$RTB6r7F5$S(iED
zS8+RJp>TLb^~h!hsCuopdXEQM<*Ee2_Mb>i{1`|11#MAsgf={6^)%rvjGlJVV*1l1
z<r08Nz*pVntx*7f!sJt{cRC at le&xGK at c9}aqHOd8$g@;OJ<r*9x8ng!)#C`+D25c$
z!S=?a7M!tvsphq!u3ESJpA9uNm4N?8_}z`ym9zu&CfI<Y*~fsZgE#i|8z at iM-3y$s
z><#Fr<J^?iEv<$bF*Y7+t&e;pH3DA}PPUOKrMiHsN;ZzYDSeMP?`-CcaoSj2;S$Hp
zHT=Hj-AP#jv<hSEVNj9Kjr=kgxP*{70}7vW5L4rS9SB<eS)XRPsdBZxXT##X`#(B8
zFxM1|D`5aO&o at WqAKGNc=2D9Mrz9<6fo+J7T-5o*-d8Tj2z}(rE!?1YL0BbfKm3u>
z6KnQ+-+yxL&xDVATqbybbZ1g+da}`gjP7PVuzs%IDd^zbmthg&@_|qceY0Rv5N*0c
zL>mczYOui&$5>glxS8dt<x4=CQOHk~<TK+R9NMZif!AB768RnqefZT>&!lsdQ*;9O
zk2+KG=>^EVl!mnC%AuQ;z7KzFR#FdV26b9P&JJvmK}Vc37w#cbOZ{ihzx*CsIe)=K
zj2pf=*c45kMOipvy2 at tV=I!d33_sDj-Uu##!XK@!K6SBYm?X}fC!p>Y5nKySuyFwb
z0)#wWNVER9TfTi*;bR*e7YATDQvL=TK7KDlW~2{BzKbXg$~f=-y(g{e00X$_PdU1o
zE6I6u9GY4&%;};S!U0oDs7KCdO4>7Em3>Q>1dIr^e~agVleh>}k5j2H%lgba?96a~
zWC|oT<{Aj?-tW_vSr}N9j3oFHza6`F>yDy0mb~Zvz7~n->tcMEktXuPh6+TCLj*`~
zYYj#``Ipy{2q|E{Vtrcw8$m2oX&>TF%VN$_5XSRk4GMpP#&+=9tuEzydOU8D|7ik*
z0t?_7At=gelDHH;zq9vnJlgWCs0-|Wpz+`2Lp?F^b59%>kwTM`rPAbxJOhAHn&YvD
zylGM}G;@P4hdB?e^Q;WS0cVMUUJS2y2LlbBfkQ&+0D)iC)QH7Tw&S{00~j5)x at 3o7
z1L6p=Q#gCakxh!{*d)Ve=6Nb6QiU$uM06-6MZVn$dSt|xZx2_j%ETT3t~VZk<Tcyj
z1D9mE$nxk`QS3Z)?AG(t_pBu1mD6Fjh0d^veHL}tQA8~|g5+Y0TK!H=^9AD*Kru)>
zz~h0of9|NS<<8ie=sg5O(5_XkQ}FQ4B#S&VfDMNod)EFA&|Po00Y3S4bxD+4K^U7Z
zy8d0!lV)oXctl`!Utb4IHMqWiUmDF%I4^JBEX4;ej-9Gl)(t-5o%Fsc3(+Dm#3hMB
z)tE@<a1593oqQ;nok3rat(qRn<SWKBj;57(AcRNS_eSfGuQTw^`N6)_j=R7y(X*8*
zU^1PlD%@6^v5eu^wGFK)t51r*EDh2#IeWre0q3|MNaaxK at LncH#5YKPEdH^9<hGCG
zh>ax*cgcPZb<K>Mo)yDyIZDU@;qJ3`7gJnvV73uejzVXuA(rFlBPS}>7q9<TsNP+l
zT*WyTPq`PaAEMFTGu8}$%k~1osUQx!xSFk9>WBDPM#sZ2qR|X&x)91REPmGydUa5|
zEBwOE1rril8(a6HkmHMgGLVTy_fkeQhS<E=QKjkBcLG40OsmtzG8cVZHSR at g9ahV?
zr!uLDgDWN4Kn7wWq`93k&d^Pd6bLwc?VeywLK*VYX4QvCtY=mg5)wW$l|2`X9Ed1U
z1)euQjpc9HeD|Naur?K4T+nuA^%VsP2s#rPUbYUfl~=|IB~><mq)&Ifu{TQ#Plx%g
zmeT(0NY>aP?a)h1Ig3by#oh<yaI%-??`8Ro2DihETTsU7byRa=!w0jJdeaF3kX%Uv
zAlnMVV~T$qfuPk$Po_rdD&z@^=-<E8KuK^bWx=j5c*OwrUVw&=ydA*K=(soLby1q1
z+f3W*L&iEu>-t%LF^PQx2=K3O+p6AvJ^bxJ@=orFbW>>*z1)PAh-Z*CrJ=<zR{jKl
zaIvBBSa at w*>2<Pj$@`9nr>S0ZD;%r6#<+eRW$icj{C!?J6j;MpdU(UQ*FDYZ%|H4v
zL%{3cXo?gLe5{9Wb#|jaXU=gmGe!z+moVTl*|!tYhTRE&;~rWd at Lfl;3^B<czfiKv
zVZm at a{U&JDqWs42feueU7dVd<JHQrSRC05N2-m{K8%~=)rGFplBO at cU!XyOeJ!k~`
zba+Q7kmpa+NVf=ETE-BOT8qY3Su_y=6{-vwpuWK*&A-umFUV{VZFxq__OBINsB#~X
zteo9syrH~*X48T6S6jA$oUZ%w;~sXuUU%nTl#2c4wVH|Cz1Vq}+}PW~>N>_YLp}Hq
zHBb5lVD-L%LdyZp-F3)8%T9R)UL<-W%xY*(bjjFfJ at IFQ*0;y*`*<yA-+LaKx5K-?
zY7&w22+|l!D-GJjeH#NMP5-aN^46 at Wh}4loM?M38(}cGY!kE>s*BWm+i~=I4zExJd
z-Hiw_L0$e_Z7obr*tZBC{}a8ikLQ at 4hq%a at b))j%*CFqpM6!1t$lTV#ENfxyP81CL
z=SX at w>PGQ_mBQ99RK?wSk6t1SNu~<9bnOgY2~(C4b30OF2%ncL)(zRV0TX1;NIREy
zEX=Kc+iNsNt80Ck=5!7Ofs8K_eIor^n<)~@s)$oaO0k&t;}iR8L4vTw4@($xl8v&A
zL0_~$z+Vq=4W)%8Ynn{I9%XgxnCzbMVXH|*4}h76T{}Qwye7r#Qko{I7E5<N>FJHT
zhOxS?L4-Z(A0j};OrL`LIJE4VN!hptSUSXiwU_6KXB at 3hXfBX|1f?UDWHVivLpB<E
ze0j+|SJmicDD`n~0GCC7s6po%fF?e54aOsfB08gJx2M5#Qilj+%Cm^Am2UXT63r3{
zEV%p1rurE4GpTa3xhbTE9C!KQ6eAtcRp^U(@zzd>_rYs7EY|R7CbepC&RN?w`3;$W
zijX0Lv3(cZ>n??hV4$p9H)Vb-<*_Fjn$}9l_|89xkIT9<AWVG at cMgaW+!<}vbib)K
zSZAwj-KvnBDYm4R!HFLvy$hvR7n6WV*}!gw860yIBfh#oVS^CG)U#u($$2xqyn?$a
zh0XzfvchXo_URlQYwAF)vo3bJMQ&7o-FCMwGh3{??@;Ed^h*VYYX<%OohBda{!Ut0
zY>JYpd?;>2dSOny at yHUYw#psCZ`^z&(NY&$(TQt!Euy169I=@7xG2GtjhH|@4_zih
z9FU6=ZMgrAMRLCvkvS0<zF#*h{Yf|PlFc<41i>8~E#z5fisvWQh{>$Dp4fALQBAk`
zen_TlX3G`m$eg{MAvKfgqxXdHsp1?Qa=Js^N&BbT`|SWENfD!*lMved<_AcoC6`yH
zl67OzH{mm?WXIn2GsD5hWK(Ks848(A#eiuEXpIqjy?M^b=AZ2>0s=`ZAtRtWd{)iI
z0k#SNwRsx_a1ai?$~7DPXApaT#<7nc5j9j$L?1cDQm5gd4OyoRmaD9~m=2cLP&Un5
z;ZSWAUJvHfa`d6Bc4;CBAwg-v1vTB7iD_j%QZ-c8YtavVgPV`xe^qNV^SaA$`+%hy
zLA)}lp5%1;5&kA at QL|sfV=Q}fC|Pu^U}M?XV+?F4*Fwq)i;3x;B5CM<I}%T`i$&c6
zFwp6u>PZ<#6S+=A$i+(>Ce+L_CZ=6uoW`@WuI~o869HS8BokKEEC#FIg&m93diB!n
zx at j`#C2%&+mZ*m;w7+wVif@=7q8OCbjhbEBQuEr!^GAF+XaNczf9~CP@&IqBAFy6u
z=_3jrq~zTcl4CMiL#{o4z*V7NG0y_OqWL`!9VFr<MTyIwn~iJ03?D0D^%%r5Ky5P@
zpuEnB+5ojP87$#J>Ubieewz|qmBl0(<52Yy!_F4Yw#$>-3Jo-a0<Ggc{zX;f67_d7
ztR=kCP82)4^JtF{S|hN>_x~>gCZT#&Ascg!k0e0rMjv~kCbi~&hfoEkG;18E;mUIf
zg&~j<ldVWl2%Q0eQ^bntXT<WVXkzch)3 at aaVd-@#Z&yt<IU>e#AR*hz4-nn<4*}N}
zEgbT|FPUp&hD790M^B%o%H9GzcWBMFKe4))lTh}Ysj!hB$_hhx3vS}m6R_(vcvI6B
zEF9L0AU`mArP4}&Ts7>*iS747Li;Sd at V+y8vC8T4R^y$zYT?4J5AX0db9OzV;IhN*
z(W6 at 5LX2)6!`HDtbZwUBd98>HO+B$vHM4RK*=3AHVG*LXzP)0+mnR at 5iW4KaFPgnN
z=30Y1XTOR5&-~J3=cYQBRH5lQ8o+r=^(8t2H7~*8;aeqtb6GxLl?g$NDSdq^CoOnF
zkjfz`a+v>PVpx2l{hJI!j0V_S-au)>nWN*x4YCiQqqVcSuz0B}MhcbAPLIVJ794QU
z%j2gQoAIG~d7N?;#w%ZGis?j%;KtS at sXM6L_MpaRt<B}w1DuRQ_!tXZE^$Ija&=~~
zCn`p~g?5vF>{e!{!)?qg5P6E^bb(Bfv7eM!8V%VW3ZT$DX7>4S$kb`u^Dn|lCis-h
z^u~V_Td_B&50_lphGpr+W^eTK^6q3EJNGXMl|P%ij)ne)sHVvKWC;GywC$k{k7c@;
z_Qu((3m4;qpG=bQMAa0~ha#t`T1f&V<z&rPP2c~2t=cjQTmz42KAuIUHXDJ{CP3F$
z&+qy;)ha6f|H*SkA>aBPdK3}7YhlYN#>>Z{{d6S*k0&8p5e8m#(lF^YEMzy}?M*Rs
zIE2IQdSE0E%vcIFoTO$48A;+FW<uOLr75rhhAEbiXHdLaH4 at fLJZl%PqdVP_&2vZE
zQ+_IcNR0FXNPTJ*4IEU#!ouUOE?ot8DS!qOM*1BsN=0$;Oh9{Ox$(mbC!uH4wh7?R
z(P=ZKh;ZJ7^CY0vlU3Z at gIipue%gEQVCvU?^?eo%slnUfyP|HTt4x&JcmJfep(e1&
zz`BEoj0UwI7{YhI?810FbHQ6G%DFC`-+VlOYT~L83Aq&bN4MhJ=d;6ryYu>TIPPz6
z&X)AO=YDMCsg;Q;Ug$6+hhw at J^eNRfu6+GBhS&XQ3;GqRs^R2e49{?y2HS(1+wo0%
z-2gT0m58T?YYSG4R{C|++C@%bN&}=mw->7mxE4hn1$hYj6zpzK`i?v8oT_G_H}<f9
zSL5&)U6_wOO=h0IcFz<!P*C7IH}f!yNDME{M!V{rC=BMb&sjsi&0I79+KW3jPfz|H
zSLC&I?YcVQ>wahFlgsS=&T}7?3&}$GK^kMX&%$sUS4hK{^s+MiSwPYel?qBv8z*P)
z74q-AFR#A{Lu7{z?))@b5R-x3JXvRdJWrA;F at fy0a693=%MxO?Ny3Wnh6hzbwhLKc
zelInWQ#Z1EDWN(3m_Lz%?D1yE#|DMbPo;|dqsE&7cF!;&+6(Pb<S_80k(T0VY_dqo
zsGPN at Ozg+(yqjV~HrygK#Q&?pvyhGQp+ZLWzjxK-*eXb9`ty~AjJJt|za8j*jMg9O
zrHEoz<6egQzXrqjuX{R_HxHvNE)`+S7?XV1HoHu5pM~O8F0CFv6RprmeGUTnZ}?&h
zz0dOEE1!J;*u1JhlGUc?2^LSjApGi&!sd;pP-zb#HLx|vr?o$owdCk{9PLLYiE6b;
z=ZH?^+dL7MmH}l$0{O3CqLkBr6=&;1pQl0LT(TC9=1as!6dA386l8oI`1}JD0N!5I
z64}I^w~uKfqjgEKwiW9~c$JS+W&Q|%S)-{=I;q@#D5~btM0}RW(|GD+Vfy<g^GSpC
zeoAj|qLa@$1!z24Ub{qjLLt9xOEZCentEFZKU&i7{V*R*|BPX>5nY6TbyK1`fW3an
zli3bbOR+|BPjo{Fhg)*C9o%bAF0rJ1Wt|BCyEuunoC?KPlaZeMh?sv!IVa0FGHhMl
z3d8N1LVVDd>h6=!kxEVBNLdweo`?XS*kiAX2<nhfiDQEh8Nyk3OG&1>y=u;Xp2)Hq
zeED5~Mk*{x;91T-(s at 3AfCHkJ;C?BJ=B7F#;&B37>ssu$q{TJmzM^>Tfs>ijts+Mh
z)p|p?*}vgdF>|)o+*Vmzz~bybO^064!Sww^D&f`1t@!R?9*V3SV$6S{-}C&`uFR=(
z7j)~u7$L0tjur+vUVxsAjZxsmbnDC^Gt+FYRCC}UMWsYVq^?7Msx%Ly+3FILmqWC`
zN?^~8#A_|o(`ML)b#1D!m9!uK)WU_GfIZ>Xxbge81MHzM0d&eqM~jB0%VFG;!6RrN
z>HKW<LBhOcr;x+MkHvvI++6UYYmGI^{7m*)KDY&C^qN-Gx#{>ELqVHZh8uVKR1!Vh
zT*k(0kTzg)IqExq5?K=LPcJoiVLo3dFz;cFIObG`#2}a-ZJ@<qUtk*<ADu{~PruM=
z;0dZ|XWYKE{~v!RlEUdyyZyB*>Q11C&J4s(THxkjAX$t|c;IaryBxrhy8@)XtrlW!
zkYpDzkJ3X<dD|+fEzES6k+eL?qOp6vbmv*bogB`M%9Ue(uH1zHiDzBF_rPzoSXbCI
zBR}#XVnQu6u4yW(4xSTCm*r at s)cl?C=vzJ`1_TJ9IEPch(^F6)^*I}tNrZJ*L1wL$
z0YQyc<f4xpIR-HLOI-(4I|=b+q- at bHYEj#Q`VxN9e=!HWEC3I9v_ at kdV@2P8(l_+z
zK>tJ;uQG&x^o01-bZc8- at _YZ-AmX7??&%|Q9_Tjf{`SQM`+nHh-~%hO2Lur<$LTJn
zQS9n#V=gUvo`PFj&wLOGGUZjwyzBG>vj99~3<aT@&X*v_%GzgtrI(YhJMTM++w9Cf
zXps-a2Gj3U|J}qF7UQkJ$u(FQxzl6FC9(nN_2?acuO0rT;G%RucIM)N0Nv8MmHX$a
zX{to~`M40zi>%*$rTXErw4mPC=JFZiO!y3_MG8=2Irz at GvJ-}yAx;~^M2Pf5Mm>T+
z=hxT^QP4&nD18L?>E>n(hr2jaKa|{UpP=))6l{DJeXTzi6IH(rptvu9YF=W>X=|}F
z at i1C{Ovd2;o-9Bj7_#k?!dTXwRnB94y8L*Yr(9|GHF+exXQMLrRMvH!*mbg#;A=_d
zS)<X^)<>?-R9)%Z^RH0o;N3vy%-E+qcn*O)h#!5k-tidmS>U0Y5~rA=Ng-5eL&8C;
zHG1sF+T?Pr`N?KK9%Ol{Yx1o%?O6NoHQqOWUBu0pF8f7A^vEyjo*ej?K%Yv2Strn9
zK4qQc!m=j}8Ae82CqK8a;z6(k!TsWg6Mw?>3-T5cQ}9ndrC_pmJo45WyKMP>b0&it
z#wsc&_W{U`>|jP?%xL55mew4!%)>>S6H%M^SqG&*A7oY%WN7eT%KdGdM%$E+7w95?
z3_+`uPXHYs#{6WG$`-m0tt9xMLoq~i4t!9#$^BPRW`mlriM!;te%so$=89FwS$x4z
zQjxsmZt(QmG<OTTR$Ykiu1V$RHcwK+nkYvZ69x!z*^W%NJ1SQ7o)c#DHc{i4H*l90
zIvNvo=QOB?H6LzC^T=3inIrVoAI5)wbrOf7ycWD1UqEAtnRZ0V9(3JCHMikZliJa>
zRpE+p*1a!`%?5`F*QKxfU?)AN0|2l|Sem-4phqV2z at U?0gT#ewKTxX(gn0JunD!-c
zvqc at rR_VNVn@Q#%#W6(Rv`mDgzb30?V{n_vp{fAAYuw~UZ6d+WCxZ%^RN1C~Fku1B
za^=c=ypw3)fExc`RR`T!HK;P%R)nJaT*`zr<xyL+ABO^yl#;fnp8B(IYba66hQZqu
z9{2xmxdWd!q-W`LkW8y+S?iAQsLv$Q5;B}W<@vqgck>Vb5ct`C(Fe<$Tm(knxyyGg
z+|9cSOB6t~D)Ckdhoo<b!%SFzoLD~J0 at aJXQo;ht2mJ<EA?E;)$)`&g9`}z6i`P(g
zijaJ6$nM{_3>!<N0pM!Z+pOxGuX8D0sRSnQ>f=Qz(piyafR}VHCgF~--|xgT>>t1a
zq$PIqo}7CS%S5k`9|Iu!|7PW<5P7;icZdin4TTc9wzjo}XC%~Jcj$M2{Q+(t2v<sR
zMnL=p#!T*_7kf}>YucocOhleW-*C|&$hQP){`o}xc8=3M?a!ZMpQ?DWdcBKhzC+L%
z#U%3`Q3m5NGr7NwScrLTLg%tafFPY`6<hp?>*r<j^-^(S2RvE;Qk1-0p_f<pb{Y()
zKIy%f|H(hA=`3Z;DHM5sz>SaIS*@sc#2p11u)uN15EZC=9Q!K3!2J}w1C=eD%Y7^u
z17gwrQ1vG{O+E&!VMPPEt;+{>TXANkW|9&<8%PPt`w0t`CYmZ+ToBcPDw7Nr&Ja+W
zmjEE}o0VfFftejsd&X`ysLP1$@uzK;W|RrgU{*B)w>NKXyC|H0%qa<cKSd2)ArcYJ
zASdZ}q?ha2df&p`x$QoG_A4p~?{X&X7Oj0*T(6Go(~J55RbiIvLltEr(mIVDdx|<E
z*2!v4s8VVe>*di0<2`ZLZ%(xh>Q^Z>kh=$pY+09Z&~s?0j_EaWdQ<d80Pp3caCAXA
z-ZqT;bfi`z8OkbuRNM1%;iW;gpQJj&uuzhuRB;Nr at r<HOe3gAh4Upq~q=Nz%&#*v*
zg3T^=-0P51aKbtM)Xq{NhiQ2}=-d8XLRo2{@1=6F{K|6-4H(?gPtL?_yYp(3g}x@=
zJfpx2(N|s}wyH1%(ub->9uGSzC1y_BD6EOl&}bvAr?oeKD;De9u&UUMq!9NBGw*W)
zgAw#9ZJTyW0x1jR6J40|Rxzd}Ob5J5(A at XMWXR_Y_@1b4B|p8<GI>uak at 3_!(MYqN
zDl(_+*1%bI at Q*MR1>&T4___4L=AFd2SW4}%<rXS`?m3WiN^B~oZPGaWwpSsYKD+0|
zYeFG&0Ww*CW$9vk{^!}R?=-$7Y$z&pW7?NuzH-_M_X~AoCOSQWHNa;@6b1&MQAioE
z6E3hVf*qo>LfhSMi*7*6Rd_i+l*JZJ7%O_GLOEoQIdJVyWz_!8b0F;`gzUD~2JIr=
zq-hZq8$}^B6NgbynI*PYr0PVdyUr at Z_X}%^r+g%T_b-$}63W%8A)xDgK&zW-;fW`D
zE~EyvU at h6JGsE?`m_Pm2g_G;7wt5fz%+AchL2_WO{&Iy=Yske!#~9NxzE}2|Vh83c
zU=G7^kOF<ftD8x+j2kcx3htE at Z*)D0eyg|drTdV<W}jt>iBi6Xp<)b5s|K}ch`F8s
zZ?G?a<da*dkw&C}1PYeWSgIy~r820>>KCJD-L<;!0(l8Z8cDP*0=oR%_&i4HqERTm
z_*C`1d2IY-W=r#TkR-Q?of!O3;?~B1{ii(pI<W{Y>t4=t;@5P%Vays~9Ozy*kSM}k
zZ{xVC6W|Upt at h(cEa7r#4f7#nOa{DZ?l&cW+u6~euj+d%3|xN>jhW5gb96o04^@nz
zdlviFWSaba2^(_S;Xr&}CuzbJNn|OjUu&i9dslcaVcvv>scfi!Erc#9Xlg}f{R<X^
z^uQ4>%jg;mPRa{Wk4=g=ksZAf|BSw90qg at bmwvvcM7&yrFerO29+hAla=eUWfBc|-
zfJK-D^f$WuN{yp<;rmC at 6l|-8a~duI$X4WUBNR|OZ)mOwtGV0R8V+;n9M=Ag{GZDZ
z0ZGEUA*%x>7IjttiwU`Afxh2`qo2aA5>j)KkOhg at Cz&7Dw(xsk>QWp^L5f4K1$ntp
z;E5?T<x|IbOGc_!Z;8SJO9S6Y6a$ohscZg*i7sC!m3i8k%j^7tIOc!FTF4Yz53{k~
zH`voKg{W)}6Xljru=P(tJ`Zv(h>h%MYRd+9ZhlQtB!EQNNn*_lRjiz8Ql0|n`9OJC
z?iKW+H8UP^7L;coU!k9Dl<ER%Ff=m;9IC)Q$)gl+xR{2hZ5pd%ui{v9PK6DBXPvH2
zx56zR(xEK$3jydCztkbPWB#VCl5O^ucE-yEO>Sy+4KyW;ay2L1x0p at 5f&Df8ia5d@
z at GsVr{UjfG^Fk;fTIMW?rQvs2+o|V5BqH^sHya*`E-D#JvuC{*-bXRu$JN54<u|9}
zo;sKxM}GPNx+Iv|YOUm~LW-t;#T>MKi%I^k?{}0>3 at 0M12zV<B5elaefK at f~2ZRsH
z*4VTabrFJlZZyOJ2@@^FCfj&5n9?=&=Lj4RgF|&p;qAXn*T9O*ij(1bc0h&Mn49z@
z;$XSU^>uf0Ws>13x8eI-)Ih{l0+SC0UO)yfff3OH at LELFi?UHB&GI>a_v|uc(Bsq+
zIsdKwSIJRsmD33*ofYc$L8apmw=yH+N0YK_S;=DivWbfm%Qc*GAOy}zK?63W&AK+w
z;p?+fCZD7no$qMWRwk(HRZVU6t5~r&M+-GZ*;i^j at 8uvK0QAQ{YQj87`++%gb{i3d
zi-zrqC;@Z at dCGA+Z5?udWh$1ZLI>Ec;}E^v7Qk-A3oh9<@Ldc54Z6ykrxpcVp+zaN
zC#pO-eEOmR at S2w?ktNFe?q0u>!W8;Y4V)AQ;dkN|`Q_*XR6)rB;~r%XES%_qEbguO
z>iiV|dfX6<H>cXj=`e#%A7zHg)35u)tD>SC%DDCG%)q>acHR7cjh}ep)F4M$-l7Nn
ziQ7x}seIdsv|AFG=0b%aJd1)NY8s`FrJSP~)C&AQF~^sSwRzpV#;kiHo=v-lJ{GG^
zXHL8^>ojlw*ymjUuMjo2-Ep;UUb*a7=)`9a&5L$vfbrN0Qc!>F%`V1A3<R*p;TqGh
z`*A0v9Eer|b@*F<;%=Ou0p3`!ob=Q9S}`mEUX$<?_1~b+MP+MIRX_v{o1Gn7A<8U_
z3V1 at tysX=vmA-(4Q(cPKLKT%<Qi~0dtS-_u`dX`XXzIDzHkya_qSXPO8_Ow%2PK&<
znzSSw(U8$3is(*J9kDGug6ZXH&M%7qI)`C#8Eee~gUir=Vojr`S=j`NxkWV!vo?Xq
z_ at p$~p5Pwyw6`F3fb2|M$#o#I>FvL&m{!_FCDRSMmIoN81BKK_wtNHI_rx;PG;W3<
z;fHw?zT*0QAj~`Vy4iNrQ|nZWij6Og%wKi}Y1yEloVUAwQV16x9!qUQ$G(>pO7tl|
zWb`C&1TTYsbx0txt@;>?*euZp8 at PGuDw1fQBsv{~De(WjSqCN9U at X$7o^co4RFEZ^
z4XskrNBpY`c%Gz{wb7(`*Yl)wFc5!}4^?F`O8)&AAGtOF&+1h{)fnhMIn>=h1povP
z at -!4<lRBj9*&Im7(&Q?p0Z`+94@#5w>wZbIs=h0KxXTeJLU#sn1PuimD+A~<meL|#
zv5nmmqX}GX?WH+VGaUY&(V6RU3CWm;1g_Io6z#s{9(0tq9`#S$!EX+3+3Fy+*Ne+M
z31TnTErn4kauKE{w+fkP{Ri>wWt&r?m|YXHzTQ+FyGT8=AZsB&(QkLV?^<j*=)O*+
z!M|C5IFwoUFMU3H>M}EDDzZJdsb_1Zc|hTwg~C&hN+wMcZXFT)Rl-ojIJM~knDX!Y
z6);w>cyX$w%CX#>gJdPtNd0FruncGx=yiJQdksd7HJlqzAoJ7OZt?fOt&UN at i`%97
zT@^qf#2eU-6vu!V+syF<X67qP3aP{`%5*4ywN)nDo_Z7Xyp}H2ID6XTc1Wru^#U_8
zzkV~<j-|gUGd}Gx)p)m<7yIfWK$Q<g6z0;Z2eim}HcmGJZFQOXfR6t)6Uatc#l&?K
z0iUa)rS|(K1>qTtos<<3rmhCdi<Ms9kTD(GJ`nUvlSC2Oi at CH5N_ZLUA!3%3P6G;m
z9~oMzhDyGPHn?OwmH1JKSH9J9UVGgSk=vTbmCV3_Y5nL^`S at Vlt(o2x>XDflLIEY6
z#9&GH*PUYbntmfE$}mr<8jaU0K9$tma6~dayb!xynk;LsfN``sV6F2SOlDrERDLn4
z{nk!srYx$1hJod-89RN1mm%P)>M{F&j{mg3IzTzB1fiRaJHXp73^?JCEE?EbMhdvw
zs0XbO6NiPqFwDY;ieuaupn=s}(o03P;V|?%cjk>o at iW#-$D#SuXGSmAcNadfa|hLD
z)jz7a+PqqC1oPhP>2N#r&tcTCc;7Dz_xqU)4EXByidduK4KfV#m!<J{rVJ~8Nfz+F
zbiQbML~~^-E8G@@o(OwAqmOe9kDp)eMLH`2(#c6l%QGCPS!@cgy!wC?u<5fgtn;HS
z34hU%0Qe&egy}9hJsJN7^8bq)84Gel=JE9<=R6;CpmAnyJIm(}D^dgMZD%jK5{}NV
zP!(E)p$n3bs71cxPC<4Dn|l&}-Dg-MceevI*T~{V+B2T%;q|u<I!&jSO!9p-3a8 at P
z8=Zs(;>*L3NT$&`rV|JsyiYqU*+MQDwAPsP<X<Il*cbcH*()Pce{3(cM44tt^VQO&
z<7Vexqsm()1mINQWZRXw<LktDI*B^!cyqeqdtJAp)E0Nh%Zvp%1w1x?G8_><^V%yX
z_(zY&)N5RyJoqgdKqsxy7;6#;E|OdI6wIz_$9#*{ELhcdr?Vlnc(mxxUs!Qr;yX`O
z&vAv>Tn8>H9e!^1w6sj0(?@ZKZ6)090V9P7 at cY)zv>_b^d%BQM+&tL>WzfcjN|~#}
zMaKze0+rSjbtWs9yO*<nt4Qb<Z50(hR2&!ZLX>t-^|btLP9S#n678ZoS-I at CCSI`J
zm$^qKzu@^X>6Ln at DFI-VcCT=mBjk%kk60P?q}KY2IgIw81;H|<MUz9q2%@|Qoa&1p
zKH+}~yghUe at kF8%CODb^tb^mB^@F4D5-4rS(mHbvS01S3K*QXB-kK_f;-m$I?mA}R
zLfqc}R500VizNZ at D76QWV&7K#`_}^Jl9_|J0bw{^@+e1|-wA^aD5dBHSgomU7rfzM
zic3yZdnxDjO at AFjyWF-#A^)1>Tl9{sHEPKSF4P*I42p(#DW)lhjW8#Q#OI%3WXcbN
zQm4_vJ;Z&e9&1g1D?NcNvlkWVd4C2lUeiS+J`LlC18ZzAIc_O`*Y10mD`vq&s=;EJ
zKtJ=!G>3F$ITFdAudGD#)g|70&qzw88J~HslM4r^Ds66%^{!2uLnE2(&tSh1=xLN(
zCgCt7tL`~GD*Z<DaIlk#9T>HlpZbc=EVr^jE9a_^EEvOoN?431Uq;xWc09cc%!!wE
zeWjK_4m;&%7u33?fqpmwITZOf)AmvZ46!)*yw?QH^O7>Wi-GWrK9hZT?QW`<OG{k&
z!}^g79gc%v^o(;{&#f2XPkh!UgGAD+d7G`+?GdAM)YNHhIpT+3$&RF0E4r6>XK}r~
zMFq-R$O5N-14GFGr#`SqLW#g9ae#wv7w%#zMn|Y31F(JacM*pbytzm+A4ua`E*q at f
zk(zD-Pe+?hv1aOeX!sF}5(Njo*x`%7ykr9f(9cK;>-dLKW_ZvTxx()S9d_w`>#Jy&
zg=bOE$Qrn3jP|Yj@)B=QRO7g`as25b|L=98TdNp<4VL}wTgvh4Q$t~KC9N<YRPCV|
z44!K$@{{_(Pkt)swf80W9|CHOa<Km@$~nWlcy}4&4(XBDzSEjY9#E}s58rU<OI&@M
zMb#nCO8~ALu|P3WT9Qgp at a3cms$=Lj at _ls1DQx-YaoZRv_~d}gl3l0HKLu>ia!1(@
zbGQS44UJ)iIEoiHw^NE4>9BTDwf`qcZ(G2Az|seiHH?u*1+T6EIv50|#Pe_zesHD@
zPn{fpR)ln|0{OKK{PG-f<r5b;X5iY*h_T;Nx=%c8RW^+n^ng(E;_j1=;1<3#L`-13
z8mm=l`3oPsDuf~^?#n8;Si<@m83*L_$-PW}RV>ucE-L3#w_t~w+GFPL#}g_r!isb{
z2_rNBVVJT9kwwR3%C<(iyc$e~Hp5;OR~Baa&qk(MA8;fof at Yh^S^4Nkuwk3DS at JGz
zHoxZ|S){K@*!JOwA1 at 4-S+XN!k%o<vZ~?+M9mE(xhjnNDiBM44CH712fC8XR`*F^H
zj#lVV5e559Lzn$TyLxY`TJf<<fJOc4kh5EB6h8`INcik?DQe<+ohm&9(-%wHlrOzA
zRci9 at PY3!`nPQD;#wsd7a!Y}*De^+?DK9j83Ay#WO)|YHn$)2)SGn^%@n>yv%*$*s
z5PIDTR}!V>G!wFOMwc1aN|$9qH#}W`N6aA?m(e$u#V4TCuSC>#DHjI#b1IzFQq7LM
zuk&zTMGpF+b7BlBcL`9)6wz=$4Mhif^hCbGkeR5%5t^s^N06{+7aP?K$;~|_A)DU}
zJ9iZJBLct0nkO;a at Xt;n33Y9Z!nIp{@fCnSxqUk=Yh$3gDw3hdX!Fa{32h#Kx6*~g
z&4t;Z&NY++>#X~!GK`9SJMh{=oTRjujd7riQ1$Vfk*L=_S)|H8J5m!z&lHK-pHH<4
zlC%Y?X`5QMqVpX3HKUfoxF=|sukBdooJv$2?}o4$a9E6l5SFG_MqEme_VnlVKIk)&
zqz at y}v^dVY_s?mw>dr5lo6rt_wH<2x5;c(3m#<(*vavTSeyV1Cq0aC7bFf0pS?!`U
z^?v5)2>LPxmXq!VU#pS20#`VdF$i~|&V7sxAk~49=!O~%Gc?mEYC)h5a;)OqC)Qnu
z1Bk+X4v(8_i~=QIvCopUH~8$NavQ}(|2t4$QtL&y?nmP=(rZM-ex7rGS4*M67g*gP
z-sBPY{>#R<cgY*#sP#uq8`)PcVyNgEZ2$aiR`!O)dk4iT5QqWnbD|=9 at ML%m=YLI?
zGZv!KR8ut_*tDu%E^<mncGN}AiT)ytM at b;gUg?rq{`<GS#TSXanE}Uzf9q&gDHAr&
z`Z)j252fdvPJBFIl<s1GuzI=SeP4&$GQC>*rP0B7*G%xbXNt!1ZcbxjkQnJTZ`kG?
z{$n$eDRY(1Pd<j);sJ>%)ea5r62;{%=4~CR?MZ<6%HE at bI@1H&Wsx9aJ0b$(7O~?|
zdSDMObdS03YK|lQII4 at eZPum%iJbXdF?Qv=xH~+>Qm?~__6<gV_zcb-2rqJ at F~dnp
zn~ZG<XnGxBtVA7kp0W!&JPjS=kh-qc3)lwv at AW^I+))eVyZfC>FJ=aXB{~9!*iS?c
z74zQ#)QQt%Fz_Ag_)_2Gsq6y-fdx77AY`ANH=sUxoK$H4az4jl{+Jw<Z%MGqVvvwl
zr$Y?MjXs#64f1|}1P{hTOZKf0$)^WSy3hUSW^|A150#a{QVYVN7L3tK^~L7lt5W4#
z4q;=%zby9D7{NaGfEUG`X=N~qynyI9ruRfy!#iaYW-|n^jlSDb2XZi5`+$Yx9e1Ag
z;oyi0%L2 at r0l%TrD23o7MkAI%S%^YsBk+65_xWvBk1#ZUyuelRw?m;11QsJXH`_Fn
z1oM7d!@I>)IBWoxz6v|8p^R4xpK>MCCG&|%2nqT7>yh at gq;Wx;Q74q$>zW`ow|`{P
zMm<lapdg+1y+15My)=+k>~|ejZHcU1Bf;8k#-(VDJ24oIDK`qx!{N&=ni7O#Y^l!L
zklmF}OX_BSK*Y{VB25SbOLS0|B$es+%^X%~_0t`gGg*xNY*~0Ui$4o)J$~~o;XdQ<
z4`%lvRKrp^FXWcgB`qMuJ=W6*jC~o?Q2k~qV1bqM8jYa)OQ1dPQ2Wyju88H`Zos#q
z1o8UGx&~>_?y}K2P8V!CQyvC%>yecr=jmC<K{#!HuYtTFL*a8lKJ5pu3H1}#G8dZK
z!J#C at BXqhvGM&){&AuY_qp<Iu4)VmoHNQkP2g&cF_o9}{amN);i2rtqE;C&KK=j0s
zwgK>bVvF22Icr`hY1I4S?eM=@+8Jbfcn%V8vLv}|IYWUMjqK+S_#oZ(n$+Hg5rkl0
zzXipA(HC#dM$3fDm at 3yzh+B0xIu@hZp^TO%wu#01N3FGBi6d*gZ1o`UxeqsU>4_yq
zh%bqd4TVXfzD(2ur6i!Ut>qloN3 at t0#f-|~CURQsIeCZRF3FwhU{XM<gG^&BzNbwQ
zn<w<$OPe6mLPc71t-(C%zEs42>p%46>dilYGWXkM2ze at _ZjG!{*Q#4+`RRzDzf}d0
zNvPqR#MMb5hs|Dhpi>zL{46bPO9N)z_l+HP>d&Xe&;#6X1ynLr96%fH&dmKEYnWAX
z at gw0uYQWM_8}Xl6Qno_BT%-S0&-8V)GGtIz0xv;Y3((s(%4^WR04s3ObugisGQfC$
zc}^vYvg{N$_p?^f4hm)VT80T|I~EJ=dZjSEf(6CE{uLh|`2&9d<&u)R+R=9_9D+;P
zA_m@$LNNxab4R&hq4rq>+M<RibIF`G`k3 at hPmtzx@q^xFJIR7=0{}kipr$xl&Y}k(
z=bEkCFvtvLfh!Q{AAHylq~r(7$T={7i{Ko<Lih#!F_6!o79Hc~vPQx+4Ft5B(0Das
z{W76<_Apf{NzEOoW#h`;le|(M_54aX(1YrPzsR^NP~>hHp^`lyyltu!ZlB7_AF8nA
zsg^-_&==y?#>J<GqBKAN<aZJGqM|;`zB{A^;I|a at cVS7NrQk1<H8VcD^oihq9?2h?
zE_%4g0Y`_joU(cM+7OkC<De4F?(=gk2^_mq)@2;^<q^;n4;b74DLyWl?QXU~XN<Rc
z6M81(!nc-(dXyOYG*L+9D+z)E27kQe30I1PB$+7e3M at 1<RK_Tq0C5s55bdghEWcjA
zQ99;-dVzLsvJ>^vBXgl{!Zg- at i}F6(FH^2if~=0kw{7Ia54T<wOEDDfo;mIv#lAiV
zN64O6m`m6u1poy*H1^vBG=$Z|bb>c(dZhl8m8&T7*e`b-kjo`x28<!h<q2l2+z9Bo
z2^J_tCx9|sLKQQ*aoO-9$U63~4<-DbU at F!?5!a5Q*Ot`*+eG_VPexULZ&hci9KITr
zKueosm>-2HQqwC)gMX;Dy6zzP4<C~Ax4O?Vm39x2b-|S{CRxBn^I+QkHwj*vBDd=F
zw0tV2??p=U_fbl}?RiDlMmBL9mWAbeSZzhlmp`cJo#lY`yuNcL<c~Dj5%MV2Lurc@
z!>nYYb0zznnac;yq-N%S2{Akxi?}B=^36Jz)T0O*r2w0T0eK(RCe|}+zAv17y(AtK
zKN)xzEh at 1#-C^V};Supe0Y)_P7DjM{fCsHv|7rjE^JWVO6Z)I!`y3p~$%VYt*@o3-
z_)-wlnmin#3;=I2v{TX<x;mYyABdyyCWjT<_XW0mY`kUD11SZ6TMT at 9Rc)W$kFcnJ
zFjunX)RfZEP2SKpg)v0{06?yWj#<mrL@*2-OZ<){T*Vo>XGnsm*4HvGZqV&OGG8kX
zW5?AtlHvBs-~p;Jy1FE;4iPR@^|?aXY(lBo(kW5+1(MEgqk789lT7|{TNm#$dvSab
z#t5bDN0Zrkqd04S&IIc;pPQ?)d{PKp-oE_9Y<1Ohor3Zt1mk}z_I<(X>8*`k&!VNx
zu at fh2gpbn%C!O*6Eq&%M^|_4K$I?`ny8YWJ{wg#9NvvbIg5bib56x>9{K!9QY_&#N
z{+){VKoYKc`0_=Ii}UCHjln_a$iz4z3AqXr at sr%@@{h%T3B+;{gEEpP!7MM-+bnmR
z$ZD^Z!R286Y`W5o026RSv)JQYJ0R36{1vhlaP=%xJOh};F at -#6cu+J(((dKEoGqE^
z|JJ0t4){~~-o4g25{R+YBdfqNWoVoBFPFX<YZI~U&-UG5jkRT&<}v!*5SFgA9T-V;
zG?0Y2Z#<TN9GLfUnKID0u``7R?e$2<7O5wK#T!|xv?o2&?Wi*tJX$3Sb<xhPy?Tw%
zSElKhztA`<ckW&il0&6F&MNE8S0vH&cg+dWwYxJLWG<h6VN0heojqM1b?<COR~^eY
zYh(BQ+oaE|^*R&On3DEpnkF<4dZ*s?>d7lchIQ?K`^zFYP#*XPXm#FgzRZhXZu%y>
zKtFbuE!5ZIcoO`AsbS%=J6n!e97eM70+1J^5dNx&$GlXfnc5*P$1i#sHRt;FaKkA-
z@~x)l4-NuQkIho8TOu5}LKmQ~%2V-2Dil~%s-x<%NLtkC+=a4A5L%~j*!{?Z{0cC#
zX~{N!Yljs2+QRz_%<5(X{%nQEc<lm8Sq at m1bi<MQ`F=3gxVI^2yAPbt7?7oZ9U<^+
zWgowZ>LXlJ$X|iy>j;I!@>0Xy-Vd^uXINJ|;HT2i7U;L<CNwQ`@oZ^=o{Xh!2JKvm
zBd%mUq&^-3LiPcI&i;y|*}E(1P0>Bk`gRL{L}0Dk>4EAe-%tXV0T4Fa5y33&nMMxO
z-K(17vXyESms&<Y9nks&Oee*QLJ{QjXBDl`rsG2ngq_}Fc;Z6-XEmUe*q?piiy0=C
zBo5R~Zt*A*C8a{m@(p#9Z18vG!lw at b>FP1+TI&<05@=vF{=iv2X;RP at ap4vJ5Jpjd
zBw7z={+?^Eu7FoQ10{n#EL)P>l8E_XF6joA{wWRL`*XIqhs)fY5{^yF!TWk@&LX7;
zm>~he&zfaGDk&0Lw$IGN at 1d*Y#Hy3(LpiFDztMa5G+{_xbuaVlW5({nMb<(w6wDZj
z#{#)vRYZg+54Ag4<?2jrNkl<2%+gMOP7y9KlP9~%v>0-go^ee)9QnZ&2I=5`P;ayx
zH=TH0m5kBaz><<12e7lnr^&69d}ZddER^oSoevK`RQUWzWNe at B#hWX~va9cGi%2Vw
z;{R=#1OQPW7mdGeJ~o+cpcxi{(hETpt4rdg*X;sgl$1uB5hf4OlIDh?tbM+J&d290
z!ua`SAt5vc`d-(Fzito}GcF}h at H~e$G=3J4g`{-n?R>J7+#jb;7E$Sq!|}RkZft}W
zB^i+)L{t)a&{u>()b{)u+1b2*;Tl^PwB_}Xn4wCiwJA8F+JYxG$Tk{ru{0B`57n6h
zYEFttWliV_^_O>W<HEN6L4Egs0*k}#is%~QlNa019dg_(u=C>*{+I&MMen>Kat&#c
z4Dp_)9B83w_c^3A;TtZ2=zV>&#TVNUh(8;f6~&NY)u{uwaGeCnl~4}eO*EQVvAb;`
zko)*c4aHo~!;7N8==>bL>&eG#UB9 at zv8Pi*)(+UWVIVwbR5P!QloXMF=sBgyaRb4q
zLT;(N%w~_W>XExKM_`GmzlWL5wnIMv{;YS;I923B9Gq4)os_^F at K)chn3IJy&Z41=
z?n@)*jWcWTl7OH6fO4~KK at rx5nhUgDBv-mvo2xxFR~?ExXoeDy0BRqip^k@%5TAyw
z;nu(yB2Os5m3lShXu at EBdY#>}8#@Ecn#H9n>C8Lz^4dB82|)J0;@FU7#>|cf-DEym
zn`?Zs?Kakl-eSgFD)%zxK%oQC8FRffcj<?wo$X6j<)?Hvn|Lx2hl)o-H5XhgFkjCW
zbXSwIN`UH&45fh%DnsdnGC2Ds<By_owDHRc{`1B#u;FX*^Y})6R{ZiKf3yG at hjA_A
z?EtxBvb2NjKFm)xr5ovqgzStyN);zmy3m>KMn8xYhgG`80>R9R_*5}1sU!@(<o8HA
zhp7B4^cU_)6S-?lhSVt&O3$qzk@$jKxuwN(CE`9}?#F$=0QpJCcJHK(u)t(08)R^Z
z(a1_&04|mT?h;0VW*=ste>c`JTuVNn(jgYM7<%%Zq=qo#PCib8zKZo>Z#W+5u8Ryf
zxa!Gtffg(bWV|#<PPbYheobwkBDlcw0>Yq!=19iX&VA)6i+(sK%v?eAIV{i)G}ta(
z&08;KtSS|@SO(b^%aLL1&)H(tor^QoRHg5nhW1PKG7#?pj*aJ5e_4TGwh#0YauOTo
zNgeQQ&n1QSl`KB>OsE)cCZ=tUB?=m%MT7~+sPr7srmC<WTF4(WwBg&7J})%#sZ0IL
z1<UsMGeni9cz!h at elt>*Vp<_Y2J>|<2h3*<#KO~(RX_~SD({@>|ECKSiO7Atxm-gt
z`QH%#$!4n(U{!zve?{ckdFdOuFA42yH5$o-$_C8r9wFGJYRgr2LicPl6d9+3KXC(v
zgSu3+st^mHTZy#B(AP{ovdBI94M)}RMnAX1-LBC1pr5^#<5G5mJ%Wk|nkb8 at GPBSL
zk)MzuoRu8(<E*aTJNJ|X>T-KQIvM^GJM~N}2VzF}EBb at Ve=;v?8T<*T{zsa at 8Q#o_
ztCcxh24n~NN?VZUDPL>9UY#a-(#^x?f~7w6?LDiKLx)H~deQ)B;IdJ^mjTo=*=UXA
zsp15rPwA_5g6ba9Ss!i`mXllP!V@(SEFOf6`I~32wz$vvikH`ZUVV7$v)NPf0Ya6J
z=vFySCqz!>e*{(<s%W~im;PzinoK;)_+*-nG at b&tr_h{T^*)CFr}-*Z?JJXsUyRi~
zC0T_tifb#-Do!9;Deo)mK2z8!B(kL`4kspV*XncIgL<(Kuali#>47X}J`X*$JrWmE
zAr+0Z>S10b$7vZ;o?ERhRPH)}!3MavI{1R<hok#se`|P+n>O&yBP4C>K}6JndKg}U
z?~}rJT5$jW=m`A at 16m5J(9YQssgI!>xj>Yh>+xsi43%SN;v$(5FlpxvW5bouYTLT0
zn5Gjj(r_iA%sRMW!F_g76wSRpOZqi=B-lq>D0sepUAUo=4c?6z=~ZpK?dikDtZqO|
z@*uIre{Fl=u1|Jho;EPprPa at Zj`jzJdu!7z%=YX4#oA`3vBw4Fe8%K7UYvpuHq2>y
zb8rC(>+`aK`I}S}#)bkRlhwtX(^W!DsE^uDFRGCrCs9nx!gJKX`^#tjXgIm at 1HHKE
z;grD@=Y}Tf`3g;s2E0NXw7HkiTBBGbMU#Y(e?yQjU{Pfuo_0n_E at f-}C{0!-I2n%)
znCu3gyEq%=pnl#&?ZPDsrAuzQl at xYs!wO*q$b8iPE;`bCO7hPrjwryU;5&{7>6*u0
zXa8e%YuooF8iP->qfoNHvv3Y**7jIV{T;0Rrzmy1^qEkz$`^y*i2_=Xw-Y^xP-l(3
ze|Az7$p4_fO8qtk9P-<>r3b;a2KQVSpkufMkbk-tE~7Y*M^zd4-kkX0A+X*kz0d!D
z)B%@Q{*DL#=+%@J6DHj)pOmCGS^}7`)H-0|{IB`$5UXk&r9Nx)f{ZPA+KVe~tkLpg
z$w(CG?v0;We~Y&D?qY;yM-TWF)WZ%Ce^q$V2Ajnu>jP&m_F?yy+gM*sce67G9(3m(
zlP6TD!cJTzuHQ&!edHmGb`LpFT&GKppP8gw$Cdam;$NqOMYScHcog0fW~;`rnu%mA
zpfm#X7q8#=icw at qszv1VLJc87)W}y4pt?s7?X5w}=3ua(Cm|In3w9y2o0an|e>YSE
zPaAMcnDSu#$-b$sluWI>&cr%v5khf at bg?wda+V1KS*BjkWw8d0V)Z2sQ|Q<QfR;S8
zL8YIb)E)i6$!Xe5t$p$!poC)!aGe(i0`x|nJ1WF^kxw2s{bF{sFyF$=WWLBSZ;jPx
zOqpgMAdztzT^@Co+!_SX%DO{tf3tAY+LS at n&^L~h*x;n{$#1Ouk9P38Cf3plYoke`
znkpm8^9DTi&$*!G>8_RHyxH4jZG*^XAwG{q at qS=kXz&RUB_8|XK}JG_J{CeFs}6j4
zcU$&ryDSJESvz&4F;0b1Vy8xE$~C?@=bFUWY0s4!eVJhs;lagzg7DPLf9fblRjQCZ
zZ8RbD-c#GuF&k17rOVuYHJ$dewxXg=#2W?BsVA&plvPwuJN;--Pm~6=#dF;zhLR^v
z1o20;K&UO}%eG|7fen=s6F7IS;J1%9uA=Y-r6&kJ=m-=a)Ou#Bh(^>x8G)+FPk7*W
z&R<1LMH=d!zb?Y<oL?xNf6g2rS>0t#b&u_;ns138`Q<nxkh`Dhv_`}G3U><s(k7a2
z#F43X$G*|AZVPQ~?RbqV#J$^Mr%3v7e)tY4dJ=D?cLvtrZ{*_4$gAr6$9ovQ!WH?#
z7g-u`XWfD&MwtIK$iOj*$T#+HdMxJEPr at m#2t8dWQ(kca`vtnBf14b5iO<)K5^^l#
z0b)h?*XG5sP=NzV*NHPh(rLq%vWhm5Jbs+2;}Ayr0X$Y+1T()7M+4uy-ZV-AwT!;H
zRu*4|5x$k&2u0p4dA8Un%i*_Idudd~zY7hE*(fI-m+*B=9bERgQ|SM)$S?EIC91g9
zi4+R$I1-e*J*P1yf8?i#EXyrTvc0yVD($Dx1_%Yz>-<>;5&{ST!yD66oa{i|`71*3
z%Yn&!)|i+_V4dp at a5}xM at LdS2V$fiSKd)i{JNcm2YHZA|<kRapb0)})Q2yWBHd8xR
z^X0$DJxA=_??C4W$$h=WVG%aSxB(@bWH(rp3Zk(@29pC3f5;jh#ocaqm3Wl;aJ3Pu
zx_2S$Q}!@0VK|^>PfreX4^n$i7zwA>Oa3eUO6Y80H(ngm>Xo#RzvYYiWYweI8iTgc
zSJiZ}(&adCW!2>HC~oqt^HaBj)eQz-fA1qT=dTT)54ldw+x~YDjGbUbK)gGf4-D)O
zu8WbVQGtu=e+pF${k7s}Bl(Fo7Rx6%U2U2-U2=Q at owKj0y{SZVY+l*$oz#}Xl8U4_
zx&75dJ7QuWqgPU%4&FF#;eAYPx{L1BEP*XzimC<oooAr9Z(6wuWk%><kGUp#!CFS3
zYspELN~{<+1Xs*VYy2K`h-KKu@%56{cgU0Z{@)0(e+92R$3OD4t+t9k>d>F at KC*mn
zBWwO%Mv%-r-Z8`*MD-iSc(nlKZsT~C&S%)^Ej6Mjd-X^XHP3S;n6NUv4 at SH^BJo~F
z27Y<dxW^8-e(?Zr1g%D}MLp8#rm1iOjLf=Fxo{o2ZU45boCa0~FaT&o&C{D#p}`gV
zSD*iNe^={2VPG-d`&Bc`>75pegX}VSTyL`yEW8dI`5~y%{bua;dJ=0j49c-NV-l=H
zA=-i15S$0Ru8UFBU5O=co$_pE;kMW;#SwM9G;!2brOFMy;Tx=?YFD_UxSTr)k$?%q
z!<P4*e`C($`TE3AOWE?>##H*RbdVsTdoSi9f3r9jVVn)Wlcb-%i{N+R)ur6msAcAK
z{|LH(vqSk`iubZ3I at rQ{yCVd?$7d$?2=Q}#cBoK-soykWK5=X=`tos5VFJg<$<z|q
z>E}qQD(KmX(H>|m+%sxo8dxfa<p6}%tPYtV{0EfcR)*oLwxf~kiR>JYfY8<8adHo}
ze>dy#kzwJ!4B-oxMm&l`Fl*DX*oibo#;CtX_L#9F2ER`oxZ}woaxwSjx<FX^tU>T3
z!9)d`;UgxX4*PkfNq^C>z+XkPd^}tD1=4DY7q^WtfylV^*{<K&>3D!gz=G38*_>L6
zKvYcEDt^yik_~4xDfiioAM<6J`X*}Vf2I*`slQ6=zqRGaupL=-f*H}(flJdd7MnD=
zmD#N8Gs?^j1Qp^3cp;bhsv(i(o0tU9UpvtSOBH5^RS*m#(_`?lsTOpy`nhT+&@}N^
zmdf_cKd at eMVx?nKyARPSyvB&~JE($8Q|ie$F_ at kDUQ1=bH+V&*C2b13ld+XVe=vyE
zrZ71Bl$UIPPt7l;<dY>qA+=72+Cl|v%7k&C8|A5$Q0>r11U7XXCj6ya45y?psCU~3
zBZx(1wK}A)x$SRWCO(_WUg)Qb?2v(?FbHXV<vyWj4KP$3ddZpMrL$g5+8ibnS9N5;
zf9?pY{0O&79HKVFtz^MMG0wFKe;|iBlL4?|QW35^IxJTuX#tO=5TVM7PQ76-t>>qa
z5r=;fcCM(P27=Ow95<@~U2gg+s_$$g#^3}0HqS|EN}Pto?0GzCa8aLWZ5t#UPKx};
z?}yBDqX>3xIPKwI`=tiN#V at ynlJ`YOjt4>}j;eWaN*rN at yU^Zpbadplf1MiCKraC~
z&48_{Pr5&;PCR=wG3W(#8%zAjY=g}&`8b5-2dvJaL;@sEC;*P5FqYcyoo34OQ`@o7
z>I!Q07$x9>fvV at rG*C<~E-&Mn;5lU at aGuNw3~>Ewc&$q`e6XM5a8N;Ol1Tfq{=^Cs
zibf0fG&q7h)c|s_=dgmme<N5z?DqrBXa&;~d;ryf3HqP?x7F(CfKu4As^yX1Ke^@z
zM6jUaw$#?RWi~B$Pp>^pS!}4cOCkt?^G{AK<~$OwKCe at Ahhv5%Z`GUMFL3|yak?(U
z+<U7y@|W at kZdSmFCK{MrNu8m%SuU%H1d%bp*t-lE$4J4qj*qeHf3P{BdB`{25%EY)
z_z<+f*AgMF<8c;xAPVqUHh(=m4fzlAW`3n-!Y_dvd)^^3rgucuS>5K8nU^_0bdX9)
zI9b~V1f-=`vY9X^1rN>s)*?`C=F?Lcx_Bvl5q{L{Vif~Iw*??;TIsO!EgM*+;ibT7
zG(9;M?~m#%Vq9y}f4Z2mN<AMe^mVq;r_+SrlGaEtrKjG2pI8esr5n;s>y4g5kg^r5
zYp7M&yE0YV<j3Bxj+|I9OdlvgB7-ahp6S4bt8iJKBEUM~&l`y-MB11ry~)Fo?fYz3
z2?62Lp6bgK9gek2F-zgFt;}11Ya=7M?;rWhpz=F$hCMO`f6|#L|1G3R!z>#QSV&lR
zotCOXt^QR-RNy~e>ZE{m<a-LYFQq>&{zvvk#~lp5^;k-L2Zl5USc|)~d`XN=CMTxj
zjFxVf6(kMc-ac{R<;a at 1hb!xZw#Z`$Xu3y8Ip#nkr#-wSkF_V*Mq at u@liAi_5Fj1|
z9yFY5?AyrHf04u;brNk=Y*EC?<VpJ>spNE+`+)bC;N>mz5CMN<9^W3rb!;s#L~gW=
z3i09j20=eXgF6u at UP_aie-RvLUIc`E4co?@2G7HwE#z#TOgVR0tz-Q<QP~!1I<A2-
zk<Xe)i)yull2%Ec!v5i{qdKaa)y50Dkr^*@0N-KXe|uLw*Ga48KNuM6)tMgMFuox}
zvfMOaYRQBqW%gDrJFir;Z(;3c6u=-tIas#6R!wgN3WTk3PAZzFrzMQaQ<S+a+<LNT
z{q*|_3k1v2U@!o)98^5pSuu~|23HwAb_XZQY0}a~B)S}UMS$PAHD79EbRO)`y#chs
ze*cK^f3_u6Lv;+c!O5H4MYeB at JHBA@U!&bjd%RFh)lBKKDzO$P#pl-Y%+V##Hz%*1
zh<%XhxMUPj+jC0Wb;@{%KRcrhMyxZfLG9+`+rL$J`e+?E`v5h{<g2w3g9dj$o}Wd3
zv{AVLOPK#~NX9DNj3&$78SAHdg at WqEO)W*mf6S;($R&Lq1Vqc5f-J>mcXEo#FbNc#
zvTF}md`^;L0n$A()Cw4~qE;$1=^x0{s}}S~jJMhZ$9Pfl*KfYR at o2!{x}&XqSN&m_
zn^Mfo${<s%v at dt&JU+*TxA%W#tI&D?3dTucJ<8st6<Pqu{5eXv at dkk&J^UZ#u>|)E
zf0y<9R%dyM7`}^xbN_|Qyck&Mq={EK1un^%9rm8U=mspS#2+-H+x`$ZC=eKwb%@-c
z&ISNmY^RQu)Wg&#O)IeQwiXyB?4}1mP^gpPL{wz;=R5^&_$F(Weji!ur6`9kUF1&!
zZOzLus$#UJ{BKTHQRrky3RRfPaFZ)Lf9Pl;u)VH9ni*NSHI&PNwCJlbAa=G`<%5V_
ze};3Lf<qSf#I=LOk)htEh#hV72a^%zM)3ZHVw*6wr`e-P-pnly4vVVxnso)HPWoYT
z_5n8tphLEa;}*T3N)Y~{r-we7^$|}C0sMm<%a|eHGMytD1D)x0j5rL|#K{A8f4f}M
z7VG$Mu~$y#GllWJMBI52+h!<I+SAQ%H)11rGA+i+Wk6UNI at Ygt7Mu~632_Q=0ZkP@
zI0FpWcrF5Mf3qB^7?GbJ&mY0$r39&&G{IN at Qu)&0_#OJ~W}e$u7(jmixuUfWgY|qa
z_3%N;=4^ylQ at _lG;{<M at FwpnXe`upREHgIH!U^ep27SG4X`Ww|VxhG9cZbp;5v4sP
z2~CyX|F*54#0KZs9uUFo1{P{rHhmAgG3dTC<ffG=M`k0$9IbYOb(gDAVzZ~Xxl;9)
zT+|_j_2Gec3^ZezuCJfcCdQen{&w*s*ATlU`vT?J)l-IUx~6;pGGR!Xe at -O4efNmI
zKxHwo3ySarrIQK;u)mk-5Ej_wsD_zv^G#qvJPy0=wZ83in}<W%IU|X!g)!l|?jU$k
zkZ;}^n`^X}QS1;Gy6${*SCcb^R`>|67T)k*(~zLRUE(p&g~|}HC7JPNYEH<{nCrZ%
znSH3wn?PsRA?kL`*<e79e at Y%wDVsyDNkncASBdnhI!ls6xzuFA1_$_q!cB2je%J&C
zdmK0|?2|I((7<F{J7<B3<9tqsW<gcTJPZlYgG3}l>Ijh1HWiHj-D{Ku&9eD9pv1bb
zLaxyX|2m7Z)Az^ld>18u7bX|o5n6<|`Hc2>M3 at P#u`{n{wr!6Ef3F>L$Ld%YAjO=d
zfDrd%iOBtp7H}8`Y_w<iE-k{>F|OO<Q&IP{;xI{13xf-DeJ`G>6r{>;z<mPqiG{>q
zx_Tuf*67;lKVp)uVvzFZy@{Q=1qpxV-L+o0F}V0V5H+Pba2uDjKsv>&kr{UB*P$lO
z7asv)?Py9WTs}6le-(F|=H37ixMzSCj;VsJy{vhA$lJ1AyzVPYyuRh<(dTic3D5RO
zkvrxloMvb_lj7|a_^m_5MyFpe&verMI(&>DYZ<e at 8cT&6>whH2j90g>IjZ3 at n|*3a
z`mU^y@`^-u>`@pR!@_jR5;O?d94mqVtSFujRWR=z5n>S`e;?cXE6BL at O<!b-kxx0s
z*w65&xtcVpsg4S=DM$4{>M;$KZVBEoip?shRs@>LQ(vr}f{m3?BfZ6KK%H)$K<g#C
zd?R}i$5_MF{@HT>Pr<e5E|n6nwZHvI^5_g)sYTUSYPNHzvEIRfYZqY?RvJ8St|$2o
z_8^Pn8C_nme><+As?`~(IK;E}_j$8JSB!7gE|=_x!wIY$m`%!n&5EWnN%ptz#2>#i
zm5flPaGU<_fH1a+<(kq^Y)7|Q{07qEs$R`mj(MIa{GKC<z!L+GGYblIzA-Ms*U%{e
zzK`(#X-N@{#M{3XKSy%WG*wIt5US<v at h^}nh6x}Ge?+M{%5Olz*H~%ZHor3cZ03Us
zt-|BoPSsBszy6E%y;LBXHO*&}r0_j#Ok43-hx=Usf;VR8MB&fh_17x-#8{XVxJ4Ti
z&m8%vNO_26 at HKIZzqsE1J`iXlbRQr>kZ#4_Gyh<0wTLGGHNA at l0=<rbX8tZ~Zi)Z3
zpuH5pe@$YMoZQ(+&gOAUm%J4J^fi)V8px>c=R54FJP}t`6 at PCE#1YoDoF!c*7)a<_
zuOn_-ZlCiAh(CqJDBw;azE7 at p9F|fvi<e3tuH7F4oCn<0(rKM7FyhNKtnP4~6xTMw
zp|ywSu($jo9q&l6AyQnRfiV(B7#`O!-_&c;f4tfwaB at 002KdJS1xHe>Yc#Y27YpCV
zan`63_Fh)McGvw(OELLg^K0nm4@}2Mg=#CN?07i%DDna2k1~B%5OKx!L0v~0!g}Tn
z9z2e>4QuFJ at Csipx;mE!s}&t?Ev*-qyAJgTjqxPopFw65we?<~jV_o)${B?=>z*+v
zf1gq_P7?Ro8RaXgx3ulUF?`Ma9K#fRT?U?OJW`AhR2NK-gl40!33i?^u7#IHx%;rN
z4EizG7F7vPqfyqO`M*xbii&CF#%y;TrZi0^P7jb&7Hf(!v3LV;{}}X;bcFTCH&mqK
z7*3(PQ)ocxVwH4&Z5!e*4>&bFDSi*pe|CB4;xE$s8vu%h1A}k2cvziTJ6|~CU%#EV
zHrd;&Um|rAhaTiHm+wIABZPiM!?S2F0vy1q%Sc=uL<HH;tm8Z1kW{<43pTaMHv`+&
zzoOLN3c5)8rISw$cr;3TZC=qCqIr#yMdt*orPL_gR_*C|K#Qy at +#FLmj4du}e>r5Z
z<ttX4uP{CI`?b8mme*q~-`{kG-Z at z&6t+NpBy4w_gBsnMv9d04EgoV+!M`sU1-#UC
z`ICakR2OA*29RsD at k&<Tvi?}*7KKgJO at U%uYa|2Pp`D~)suB-TFFZz(3|aGPGRjz&
zqd`4sEe=31$j}uglRH_Ysjf~!f6%HWrlL1SLfa9?iu^v2CBW-43)B;{X*GQryKf<|
z$?*TTukgmGfg<5dXkmNkviab=tH<kW-7Vi6hH%=L4Y~yweb6)0c3lnuzW+mre#aAC
z=DRS~<*{01MbtV4I+AAM_!Pu!39MYGCs_0x(K&>D*X$INxQZ~}P^&Xhe<cC@>p- at I
zHU^gUHP-=g;}&1f9T>t}Cz5-{!V~ZpjdQ8M4l|+#0r~z>>15L-?ylVg*;%QoZ8_Y8
z!B6wBwt%2|e6nk^2iP_A&NlvgiRRYvwly$_9(HjnQSakQBX&B;68;ma7A5<g at _t$8
zzNY0(_O^e%y?($^htk0Pf8wrC`N%=bZ9<<er#($t at XfmQHoQXtwR9FXMTs?94_Pl^
zG!o<RO1h=)AJ(J1v+1vESN7Thwu%K=xs^L88p=gEmo;aoS%{Hk$OU9~E8>L%LKKTL
zDy?nf!@epIYvwl=vWy(7$K7Mu at P+;st5J at s)@upmLB~V($J9=@f8d%r`l`O>yQ$jJ
z{P=!?2Sluawi<xoL`-=zSG-g4udX7m3kff<e6(6F>=!>xfXq!)p?<DdMT@`%0o)L~
z{&8Y;(?LZ&g5L}YF(pQMaGpKTT`l-4DH}OdFpAFK3_rF)AVF)}6T1oRU~-?~i!!~=
z3-;RLAz-_?Tsd1Ze*-#;Xh}yIrp<W)xgx}!iF492_A&}_Coih*Zc~KY&pdF~b*}YO
z_Q0DMf}m{ZQ at -+#X2zWC at TgI^t#Rxz6Fh=oymqD<isrKzOfIPWy}N at -X<5U-C5+0N
z=9JduTu4(jXvLD8Kj+<$Vf`JRIXP|r1*^xasl&CsJYJChe~Wyq(LDwkQ)2*!ZaXB2
z1#Bk|D$_S^cpQS60998u?SX+f<Zm8j#zVASJREi>1BNl0Tp!*jK1T{#H`s;YH>Us-
zh)DEU8yNBxhFf0_IqG9jcS8GQJOr<?PeDm3x%8NsPyUU at Q1MMIdyRY@3$vR4)gIMa
zC6D=-3rUdne*|lSq{U2|!dht3dGboohcaB&&5PJ8$G8LToG3k(M7ssYp;7Mm^tNK>
zfa-_)+WPiBW}5M<R$CxJ29;BglB-B`(wn6sI~o&L>oCI-#D!!_v{luDZRLCyDJ1L7
zOJL`Awj~-!oik>?ANJ`0n*3@`@2igeeb7?Dp~mj7e<|<Jg+vLXx^LQfdGnX8;iU(+
zy)kZDLsTW~S%y#JZ56ay+e!U!QZK1V()<n3fp0O9)-FflA};1%9z2GQ29CUg7b5A#
zi`MhMi<hS~Yjvto({;OMJ~~46U7+e@`hzL#d4T$w{p<2V!9NmnIO-TxL60Rv?@^sV
z#5a(Ae}^FZD;Y4K=zlY}A}Iy5b}~jSmr)t12jY^fnuIbBWv<tVNydAOOk1k*qU%sP
z*N at 88mIo9m*YJbus;!7}ba^UvJz}t!8Cfe-Q0Z5A8%_n!k_qWhb0M1R-U2rFS#v3R
zw=%;Xibw@*S2=-tK5Y1N^vT#(FPn8Zeplmnf3uTUMz1<r!$tP>20WuP(W7awM+1e=
z at 7f+ifkb6DLegh|X$!+Cjwa=quq3Fg#4X at MO3$4x$>1faQ&gp<<F$k?kK6e;*LB}0
zap7q>uapjAz(|Jt2tn;tL&}W=Ntzx!E!fG*hDgP%NqC2gmT8|s$Ffye+p`;XY>V<R
ze_qd$$U-8Rfu}IbH0z|c!bq$bgj9Z!yscY14IjNH8|rDB89_Tdh5^8+iAVa#OhBy|
zeou2m8#lTQ6Y8KP9^eA^7qeKl&SWqjqdrt at iRM9B5IyqwrD?CAjqq%tJkuCX8^GLE
zgP(HGyLKsMDNg=eE_9 at r69_TwLf+hje{u%(YM72PYK#07NA;se(fz$Xf^sJbdBfFd
zE+bLdQOZ at g85ZiEZs^pVX$Q+M8Qt^`1f~t7M8hK7H;F6?Q<;uhJrU)^D>Fz^DGEzL
zFCXT(L#V~Q`q^g at 0t2N|AnRG;1=0iW_ZJ~wx<g3f2*xxM{o%vHX(#6^THOKte^>$o
zK`JKTG_YcE9dt;}@Ef(Bp643Jgd0@@1r(l=3!P&kk53&zHPJ0+l?F=HNbNXN*&Ojw
z#uek(d!@twx$XlMTI|M~q5M8S at KTx4LO$v&23xf!puip({4aJA6^>#Z{z;;JDR{sh
z>7(a$`0SGmU43B?hdR~=TRAY$e|T at q`5Z at EbXlm`Q+n<fYSEz at 5|Jo4_}@^{A0TbZ
z91w?lhZv&pc4o#B2h46krJN_8|0JBRqJ}w4$%+R1?lg&jZt=wZXk}S~j=7uXXGOQh
z!>!!!A2W85jP--2hX5`FU&&)RhrRG@;Mzp{rSP!oC!1SZ9CNSv^?C>=e{@rkz=#oi
zoCIhD>_p#E@{Fec89xXZgLcXo+|VA$ZORSdbW1}jCX6Zp`&s0nwyHG&!gfcl4K?@6
z-qPx8+j!oBaPY&z#V+!atAZX(V;j+g+bNoKY>up6Z3_CQM<Rq6g>cFak{lK)Yh_eW
z+_NJgG}<dzBc5v$@#`q_f6zpk3GzmqB8QiNBYusJV4tJ&)L~zncz7}@YMY-3#*x}{
zuMkSdB}?N-%|vuM;`Kxx48kbSRQjHu8;UgdW|)$PEzIQEM)FtSm7RNYy$sk%Vihj(
zl`C}l=Mjk1s|m)R{>@vNQlb at Cvj(tR(MOrHK0{gf&3j3Q at _`OAe=0P(82#phvSL$#
z1udsCo2h273xR6O_1*6Vo}(939 at 0Aee&;?<1MRqU8M5QhE|$90_L|$=K><YzA80f_
zf at za%W-jkFPk==jvI*MahAA(b`<PIhK_De^fabhv6$N;O^sY6nq!qFMB|A9c9E%<`
z9jg-LJW5h~gYD(@e=EmQi%Ru7f>wrnoSoFQ;_J3H0=6O!K-J_qIebFR#9VcfU;Wt&
zQFA0FK*9%jFJwBmczb>09pbes*+9_&Yg*w!MDi8~f-vxvnD3>1Ww$iGHK7qO2^jpM
zT_E{Kj4F#EC!ke8aFK^+N!{gJ{%j2GIAw39fOl7i=^KF1e{ev}hWfX+^p@~Jww at xI
z39csl<w3I(R=<|JP<StnLxZh7nhtH%|L9P^G&IUse8MwCfTN%S5WCJ^i#}Tbimzqr
zJSq=CXxK;z6DDj5MQyzIbR`!3_Xq?R)uKH;xX0Hgq-#{!zVc8qI<`u`qzZ#tS(D+V
z=RVuU9%mY&e~f0r?e+452-3_4uQ~CeLbWN-q9gTXHA51rjxvwMm=_}-7;o;b4x<;d
zwf8Rdnd-8Ybec)@vV{(#9-I`{wb$QRgR+B=BKet0Ej4{mW+TBcV~FM^J;M=@%Yh`a
zj at RV<EJm&wghAQ5rOJb~&G1$XxL?INs)K)o36Y~sf7$&zLLS+-v9sN#00MW!WELS8
z?BFBy4@|e{LaXQXZOkWI at +_sZVV)fBGHI6E`@||k$_ASR?BC&S?Q1)Uv>3pbl51 at P
zoYlPtX!7v0358)=TPX`|!l!!BeP3LSDyAP?9)#4#6;~c*45Eo)rronVsk<UOA&-eU
z)BjVSf71D#j+P`V5ws{P<oe8Jl|X9CCJxK5r&|p0lLy8SS@&SdoUN|s#imO*ByUb)
zzk_ENNQouHmYQViy+)gW!3g%$R6Glgj-l%cEzdYJrNkJ`ao<>i*^6o~OQ%nymQ(po
z<O5^lcOF5LQKCtZ(ElJPI<s`)R)GrCDCIVGf55_<vh`nf1zHx#emY4%jDP`dq>)Z2
zh1)H3#{`6hab3DY0#Y|xfMNZhcb8>2&Dv)Hvq2|0gD8W!$9C8}d8I;!`XLx|H!dB3
z1J?T<lM12h1W*I;Uv8W{NUofX)mZux!J~J+E(67Yt|w9oQ%uH+DK*jAtDnjcJJRbu
zf7dHqFt>b?7i^ZX3DYOk)r(u#DD^mmwQ6y~&_vg`j3ecn(A+A!Wqj>QOkrb*`w?P~
zC^pM6?LB-=z~Q<gw-vNqUQHUT`wa-oQy$Di0E&nYZ$Q2q31oDW5`Rs1sX+~{I<x}H
z!-lTnsy06KIdEPe?(A?Jh1y5VZ(=L0fAqf)uSPS@;sm6zZFNmEEOc4X3CT$eyRZ0h
zt^6%9_UqgkDEkzq at 4i<}Hd<ExOO(xT`=Kg*<Av2Vv2y+y;M?T-MGL~7Dv_1hTGfKT
zX?m<a{T&gPD!|eMVA<dbV-RBw21#7Q(EcIu0>IcAz^_h1H1rNQ-xjeXVUE5Qe~@DM
z+6%m};t$8-j0(-aqeGdi)ONz0h67`k?p)jT*_bl&b-KH&C{hUs+3eLj*xhSe%j_E~
z1dNl at b2}UVby%bYf#nIGUc`GT&ZJfJpUl~F7{O4QnFQUo5s1%0#O3%5t|FEFN9#(!
z$_+WHZ)3_8Ot*D-o^E=b*iryTe}Em!<b{OjV*=KI7a8c}ft5S(KpwsdOM^|b5k#W(
ztsc-CYn&7wZi^-`UXR5Q$pAtnHUa at d1~0X!^x`XDg0C8+EbGcX#67E3VvyLErn<@9
z@*5;Vn)#ERvlS<9 at vgi2>ue3<Y=2gajH!RBy7AFP=W1I_c#4H<(YH at 2f1LSL)YUhP
zRsSEZyk{A){cO?6$X9c7l%7Jwoq&@uEn at R_XHug{cH$iw{f&$)U;L^UWEG`cE7R_Q
zOMGzp;I|kigAR(T0)BW{unO5laQT<3kBVB`tdn1q?N<%;siVf#)Pp at hgRjjcABy6I
z?o4`WC93!={mZ5ZFJ|4}f7~ijU~?<oPWo`!W5wnI{3LAS^o+N_w6Gav_fuevf9Y8S
zSTcQGQmJ;rULb!gl(9u&!n9i2Y7&b5wVLL<<Lj~|B>cH+avp+=ICnMS89X*|P)cFj
zD1Vf+jl}+LDJp0rs7SP<Wrk6u4fgymvF(*sURuv=f>8HPJaMYEe`=$XBW4{c?Rwcb
zxV2A2EVTF!Vxtcj<p)Q<;GjQYpgb%VL3%=HYQp^Mx9Rz21#y6HJ=Ks1|2JfhYE^}9
z)qa>ZxYx5#NOuIOMBMa&MfGbK!;|0i_~wPBRNi-HmvvuOCVCHGo%;`)Q)SARr4?@m
z(2wA+YDqiLW^2Krf1H-BAdm^rvYD(E&Xh{*low8 at YIjX4S-&n%bT8y5Dv0pns0Zbm
zl)v-ivd!etnL$($FH{JQ!%IXr)%Cd<<h;W<S5jZVV$|)QT9baD*lz9z0bNnaA4fUm
zgwV<5IL<fqDp3t_`@aY~n at F)X73<Jt;dDw_g+Y at ONgx=We=d{O^h-G{b*%uSMM!h4
z8=)!xT&S-L4PS2OjlN4}PYhzG^n?mNwRZp|fgj82<3Z4_XZkyUeel9IoQy7ivnGn;
zXb77Cy(9E<pn5j;uv(`WOpcPuWsw at Oh^ws(Q&GpN8W)Zeh#g%NNyHcii^ywKwtj=k
z0g6ra#YT0ee_6O?#4i9 at 1Sk~j1- at F#^>MAW_Uc;;$NwL&tW6MhzO#+(6`;dw0QRcO
zyd?cV(*iUUXwq@$68(gSiMbpBeCjpos1%gkoY?nLIooE|L#|D$837nTTl at h`1qZsV
zYZ$Z}R+CM;=@8nBrBgxa;bqt_n_TIgjb<<9TVlXkf3Y!Bxu?K!J;OfHR at KhCcLis9
zj2pq?iHtMXBSp$CqXlYXB4-+v2oAZ32v3}xm-N$9a<W_DL_dR4)tF-slen^Y(RP#J
zuxOT7S6pviHLRR`_r|nvt)SP`tB<^%P-aHe-nIx!rk_TgXk)Ki3<N<e2LeEVvKVtD
z!Z1W)e}v`qZWM#%1skLlRoX+VY@#Ss(r*naL~x!J+$s$Sf~QBnJ)IWYb{pS55x*Bx
zv8BEAh at +k(O+tspU{`LRO+fENXX%<8^yJ4!jnd%O!a!uTe#O~WYN$lU$s?bq_ooQ9
zz}D$;^zw7qrPIW0?N4Gth!xMb=sDh5E1h3)e-v#Ak&o{UL6bf=J!sLCCb9=#EcCxc
z=r0<Iwh)GK1kq=MDh5!VvZjXm-ut&<@RiLQ|E;;9wI45tAw|x-cj?#qdvX493 at k&V
z at j-Zeo<RLBE0rjCbAu?>?;f}$XJDc2N{E}wl-?sV6=7lbd)x#1a*-x at zFpwqVStt|
zfAp$yR)ll>h(I!rcEJL at q7aGb1l+B=Jy at bsi;<r!ku7H3<jRM3{>YpAq$lDnkihMK
zbBugn$DG62*!x5ZP at k~d%d^(UxHEd|1Qtl=U(;fyD-om-)4ZoET2bEy+5*VDDi^bT
zow{`;l5?fNowz}<oOaD1-r7e0B;Cpwf50LSl_oa+5Lrt<j2ap;%d-{I9UX~>9Y at 0Z
zjssAE*9Dv!F*xY2M|ohLHMCue!XZWOIpQCBeiK<^`yqx%NHd)l8KBco;?yH?QN(o7
zIBDHBmVKVkZ|l2#zB$IP^-TC`)%tvq$5Wak428Uu2u+wcy-rSTnq}vof&EPle|V6-
zf0btM3b=}^(hc6sxmtraj=U|4&VaUjSK5u(Rlyy%e7{D#A&flWkt=~j0>Oa^A1-X=
zW212eO3e}1YeM5dA9hPKVIc4fC;zdnBoKwFqDF!s%HTwou7-{^lwlllNX^fT-B%Fc
zHdi|Khn at Fw#$}<CICFEYGx!f$e>w=)bpOp_-QpNGocW=C$|lx3&k_WB>r>pW6#*>j
ze74&#?7CodM}MO1W4aevb1d;5(#J_>D1c)mThvLH!HuY`2<9TW?QA+>h?}*-SegAb
zS{O(lvK;L(6~GW|WRq+#C5UFug*3+q{sLmQe`25ria_YonsG_Ye_BQ?fBiSC6nju`
zFU+lxknOKCUa>)Lh^~H699&zS^ct~qkZ$^&GC4Ljr~(^=)`q-x<~(@E7_*E6Y&8G)
zo{_VDe0L%a at lC9?t?`Z^kF0U`wny4E#pQr!fBd*ozghkLhadL&<!T4RC&|b*RM7Fa
zbj-U6Z04jy2;iMIZP82>e?Z{rW5BbsuOWU7CBTU*UG(evj-xc1ovgRbmMnmXmyu#X
zPugB~5iTwO#uyeny>$HSrNk2`2Fw93ZnpTPQ~XOwP!<T@{*q;;1$ni)_#9k~D0a at U
z==L4y%Zo;ZjZ5<^@5{C$6p%XIq at _U>op#G8?_f$Hu3S!4 at 0<@Qe;U}3&G}ILtc}n-
zWyPIV+T%!aRz0F?MH+qj&(!_*J!+^8AyV6PfEixFr`X^*#-V<fB=dD~`YCF(Apoum
zl4MBZNBSBmJI|Ix-R7O94>42JbB=!OieOk%9IY6758A&%{@#+FfeyXqusV?S*l5r|
z7QVK?BP(gBxdH84e~Y4<BLfgkxx_h+#)x^{Z7^qAEoh92DJ=w{iZ4e4>~Zm9vv_=^
zuNlMR6dV9gBzI}fZd&bi?VWadX(`2Rw$ji4Y%}v|no!0?Ug=&4G$S+d9N;B?9Bffj
zYih}p2E%5e9!VVKTRZiMXN!vAgk12?;4TRkQOHX at dxrWce^k8r*p_92{hmzX8srEE
z^pm$RTTT(E(%V~Bjg-kQCnBEx(D!#=#6lB*#pG at xGff0niwrk4agNtTjF$)9pU4X&
z0SC<kPqVetD|D*HFg=8|{U|=ri6WLBt}_IC`eDFiDIj1sX-~5HiDb4yyK8&8C?^ZH
z$}#gj|Ke(Fe}F%J5?WO at giHY=1Jwr7TVx3UN#>4RJYw3>+`7=U^5cF(YFzUiCmb7K
z1IPLD-Y2?E1(K at gm&Var6WMzllHMq+zW6#4L|gdiAe`z9;X@<J`-!hk!WdJcG)=%7
zfKYPf1=(Y*rql!3my5MLnYDm;YY`;eUG&D&;-}v;e<X`IIK3QT;hPRFYn`zB3&)~}
z$(~e#dhjWY7UtI$$~YOdu%K$9<pP{e+}!QJ*v~1l3#a||J}tcszg|A&|F2cxG#0}b
ze{^}8A6U^7eTAVZ+dA`@uot%jkR(%_R<s~}kmaf-<vYbW$=t>z_dHajtx2^Yq2t^Q
zLrLV~f0%wT{lDT?BrKz;<<1JdrLnD;q|h}Ad;}aCEugtY-3I5hDuHEG at 1Ts%R-GZA
z!hlLCC_dDgfLCeP86CM=?<O^x4&Xm&;#E2)wy=UOmT=tGkTQN;?1nSH(ja%~w*8}F
zQcG*03!8EXRd~)sQ%oc at 4Nbfv3F-6IzGqjTf9DZDaYNxD&{RBa5bsV%xFb*X-!_ at S
zt_ltK*BFeU`dyGTCfDD5t_^q|aYfd#mZD|+*XUjzCsB{8TCf>}J0;CpPvj%yiQ`|-
zOYw2}ij%HI!f at VGrF6d{$-Ode1|S&ibov%7j+-9s2_w{we{ZjzR8*OT_(JV at D&m7E
zf1+TQ%CY$Z$K+Fz8h1tl-ceTnL@!atn(;UO;K0j|w*Fcr3CME5(=?I3>%=>AEtvMu
z+#n!e3a_{QKBAB+GL<p?8M#n<lx9dXJaJ9fdx|Z95MPDcap-%FzB$0IMtF<SYeh<}
z(^OmU9=$w%7yd?AsVZufTTFLsV>vzwe*?RmkTCDD)kNSWj!F*D<8t3%)ZttjZAdOL
zjLcXZLhQY+IT~iXvuVMGtedCYg-vH5xf5v#__$RDaK}}$P3$)aRPLnt8RYM0xCz8l
zP9oanu13q|=xS8$pHG*z?-8av8NbVbA#<xp0F1|FA7MU4qM2pZSYqfnRNp68e+<9J
zajhk}a8w**%BWOX<aFIO+m}swbv>=b_4xzIi}TcZIPi=3$BaYKF5|afvh(nu9E{u+
zlvkH$F_iZrgoTt??E3t}AoKzT>ItW+`rO}hDdzqZPq_>30gkToE!2&$)nOMvoN#R8
zh{T(vQz*HH;K$^qa`GR;hg!n8e|3}5KNV|2lqWlKqT%^@X7>e at y5tTZLY@S;S4c at D
z4xYPyK at 8x1b$r?zi_C=Ty-%q9AC$3RO$pZ-)(8ac0<YB3cqO8sL=C%jg<79*v`a3q
zmejBQ4=F(2EI-GXL;XcCZjx|*wjl3EAlOfWoF&h29j%8)J1}y#_*^Luf8 at S9s&dh4
zJM6~PV+x*j#jcS?D)oUh#-#UU^MBm<WmnzJB1!$!PBb8-oa3$7CB$fetyNr%hRQBC
zz}d at +_OVe&TOEEa{a(5&v=%HN^4g5!RXmZ_`1)mpDTq1Kb*$g;_1E}5_M4a_Q$^oT
zoc|Mv+#^rHHq at oB@GA43e<Jpm;iqrHMI-49Z^h|w at PD4JW;pl_)8tWa<#RPK-$o`Q
z-Bw8nX{2%U9~-0Goh$GtTR1aIU42f3=)|;vN&*t>)O{J0)A#ljKByR8-GklD_me0I
z!Bu=OM at -Clb(#*f at 767-nsT|2Ooa^h33BOfGM~3iGxG!-KmB+`e~_h~8>1IrjIZQC
zSNK!rpDh_b at 6T!`ek(0IA+~37NkCy$HvGUr*xs9b<rlz^C^b+D8EO*QcYw8&dO{Yw
z;id?Ya#e>Y9Q8g$*7{nli{@3Rdg<eLF%+^O5;e&5Nc&EP0S6bSOF`BS;7^gS^az<^
zFLB8AO63mB;312Qe}8dcj$}5!NPrtyr<N2cam+5epI{XjvUAVU0kX7#z*o at _b!R!%
zlv1oRd{J@=&nB#{1k6Q5kASceu5){;&6bpfL>rS^wgiCRYo3t(!FrEr%gtC^xwx?0
z(K<21KTj0&@=Om0c;guXJVvR&OyeYXFAy<Cql<EBHc!6>f5aDc9dUAA43om?Srl(;
z#x2cqW<&KIOd0iAjcpIBf74|XDLlz)OL(STuVkDo=0zkJWZ#iRCRKp-B^?U`#9KSe
zU`R7K5P#ik<qvLKg%KVifPD at gCo;~`JVvn!R%?lO4U<aj*W#H+LRf4mG%JM~j*fnz
z(M(PJ`Dz72e{6;0EHC!L+~VUe?8AK{rx1al?tF{CR);4Oy=CYJBm*f`uNe!Bt~wDs
zERj478k*Q#pG1Tmjz=WOO>#E3)qhfWvfbIzzd6q>k;sCxkWGYOT1hmaiX2<;+%2b@
z!DklXYLvSMw<L6KrtD|?RB1*?<OS3S-nhRn6Ly}=f4L7+oG4rXeCfcg945Q9;3weF
z5FuJknwz}DA%si|ALfEiQ&uu=?b|ERqVpbZe$ti{|08TEph&!??Sq&1z~O15DKDjp
zy_E3{G2T=ju;@i*XP=`AZ{`S0y&PQ$IUlBeZf}wzQH&}M6sfUSb+h{J=r{zShb|IM
zido3sf3C3UwacQXQR8Qi>fOM6T28 at B)Hn&5{Gz5LTe_qb%!=!g?wt2elGzT)#;PBq
zy6DPZv5RJkY_HJ7dM2{@jLT+kQeZgJd0afOB5E7qY?nSaqzlHr6K7a-ti0;%@<;(v
z`5UcMnBaRZADOjI20`q({z~XP0a<`=Z-Y~Oe`&oRA{&dd5vWEtoVktz9PU{;18j?6
zBpkhLj+{933X(BBbd-&w^$I6_Lz^AD{;kE@?WBLH#7`@1u8ceVNb9JZ!j>h;7lPH2
zE2>{(gLPgvguO^<ONuxWwClPv at K_5(mu=rSH(YgxoKSc<L<j(h;ie1bz~PR at O@X46
ze-*lM$x3%aKn`l^VqAmtq9=Z+`}D<QxT4F9I at yU#U?yln+LXLtUIDG8b#U0~(!B1(
zt at x}LP!ke)zg%thR=~~McL3kMOk0FZ)|F^G at 1biJ^xjO2s4yCVasTv}r>({ctV{xz
zLj143T-B>!fvaRP>iNQ=sq;qNfw3|Of1{-g&QY1pwTAk(QID1dQz-JNn<)<qa+CU$
zIszLrYV at u9kDwu-vRis;{>f+D`+uTGB!X>u at IEZuEoRuYR3;+?f6T-*eT7mTC5Hl_
zS7_v at syq$zQ~uMdUBB(6StO*5z6_V at -d+$utv2TNKn|x~glyldTdXy`({O`ofBdgB
zH(adGPD}=fJKFO;VrBD)lZgiQ{<gA7A8)tY_qkHTz)$0s6mI6%KRMz5{eXD+BW5Ts
zIH>pb9^Xq;j%e>@>teyPIr=kF2 at xJM&EzC&c at N=#jC+ at 9i<0gpBfvgmAGxGi2JQw;
zRPi`9ERre#?Fe_7Dl)OpWb<b-e;PCJ{`t_S5d_jp<&(XV9I>Y&67Cvm)F<n%N-!|6
z93W05s1|&$!iJNiwIg4?_0sQB7Ut+(AAnuP^_cg4iP4xRd%S$D#nMH6d|*s=>*od(
z>PdphaENmNWX4dbB{x{L9-HZcGl`nce}qC?dAYf=puAq88itAw><xzYe?B*hN))eB
z#F^J_Q?(rUs8kTCTcEz9qxT8%M>uw|N2|9}S8M~yroZgr0FcEELJAn~lG2x16zlX1
zDLa at a)xs=IA;8gH8Qg*bD9H_N(3okn>>Pa*@tD(p27KPFGx4d_-5+;z)6C~2<TJR>
zxt3#hU&H?Sd)K*D-&rMye_R)c7 at O@kx1cE^1En}mJN<9DG-}FFIukXbuK>yvI<;iO
z&pi;5Z9h!wx=vfINX=B!g2Nro&02#hJ_zjgd58{;fz;hO{7vOy+o!Qi6YNR2&^SvL
zazVL@)ibUMlJUxHkWN2pI*_vwB$G3OHd4E$ZD*@47x(gfJ~c!&f6*3ek9EsD11p4I
zkp}!9?`JBUBD7^$!$UwtB^dFE5iL`;-*r}p$=$og-*2Z>bnup$R+i;GQ at Gnso}Mwu
zjrImU+O&nOoM+>CQs8$PgcrenlZO&*LsP-XN)aE*b9Mw&;UFq)eUCEW+RG!USREvP
z4#`d_BmSHi=UZ#-f3ox(H;4WgabJo^PP4lsj+nyau5%+8enZ$|6T=7DxI5ug)S$}b
zkN;mQd?J-<N}Oj-wEFiQ_H)ok-*#(?3R&j}X-BXXhiPk*zP){Zf(^(tqfW#8OG8<;
zEgiD$!9Tr%r5WkRzy8%%jJyZ-*8uFAo!nJi*vN!Gaafh}f7>bFA1f0`fE&~xSw#b`
zNIIXE=o7W6%`g)F|I7Xi>E=8F;K at Jt<hm^N at jYsff9Av@ZGP#+o@!z)AwExmm*g9(
zRHme~fUm9-`%pN)nE|XXSxQrkf(<ML#Ssz0Nuf6KDNj{XAgM+9YVrL9>HB0x_ebfj
zN3MSH?*6_#e+L at sVQ6Fs-xgYQ1<pQZq4rXWUne1k$&6asgoTsA<QgOHx=Ff!>yM3O
z3w&1y0iG>J|0L~lLIZ@&)1PYKoH1<HY)Gc0m-0V3)f*AE-(-CGtSSAzDH+!Ibz7Dp
z_4>q>(HQA}1V)hztaN9R0~esgIIN#Vo_+i7*iATye{E~9gmX9EX!?Ye1IDgrNNs%i
z`Xn<CKME|CE7`8_s at f(X-2J2Upf2f+BK!{du=Q&c-fEYE8!`7s4xn8&09`Jk1n}n5
z0%58ivNRE+fLINkSp3U2FWrOVj$?G7XPX7x5d at fxZN9!jem_d3HAlt6e%)TKgAJhT
zfq<MYe<Qa&cK%BI&l&|>8io}NQhxYIoJJ&3d}c8WG;5B%%M(8VM at P}~Z=x3KCr!7I
zT8wkjY>?@&yquB=@XzHE`(!lrRub#iv+;)JGaPaGqz_}G$z_-r)-4eB^Up$!PPsef
zFGY1+^wQc>Th4RMu=Bt*yRXl#yT=~H9F4p8e_w*rXG`F;0a*aYGsTAtX!SMu`kPx~
z#66^vOQ|-PVAt?EGy=PtVM`k7%m2lAZ8 at hYy-ZjqPzA#zm$yomTW+zC9M=9q`b-KO
zn4aiW6?pfJ2(Pkiiv_05WCm%0%e>BNkShVHJxNf}U%v3_X&C*2l`=lCsq+xpS=b!?
zf3-LJfTmXi-3xw%7~jRLyapogGak3G+t@$Xa2lvrQzj2@>FYMlmlGp|6#?ylu=YHL
zwd8u*obSFioPi-wP;w?u>O}neo`_r|@g+Ogqc#q(cmbN$rPF2_FJm3_(n6sGzGalH
zf9V5`XiD0V$HaA{t$E&2<U`oF*p_gKf9BV~iUB03cLX*&)F<U;!&IQ8S1q5Vv)FN&
z#Q+6B`oC at b5j<@dj&W4IZe7K2Gb#jhUN}T=TVw)lhnKEOKsp~Xp8V*ZCJ*){cpTbj
zot4z#vdSqIYKri(N2 at a#Lp2 at tN{E#WWdV;3;SSyDxh9ftU09VAkuxGJRpEx;;7XkO
z=zrz>O-oEPa+oT{Gp?{v+C_=dgShq{*^IxE@!=p<%oS}rK_)s((2<c&5g)w9&6}Y!
zwFQs&wqimSzr;mMy|Lf0vq8S9Uv5H1<j79yLv)S`Syg7lt4GAk4vza^7%|6HUSb>a
z?R979(H+|DRo?QPQCxpr(M#bLJI~jqWPh!G)n#dVcAm-5$!Xw%OeMb?R9TgRr|989
zxdwelXtW{?%|d{hh;B_(&9n$$`Z*Y1W+%9?eJ}=rLVaRaxc~Cz7L;__+pV1DIE-B!
z=6S$s8J5}CqaihTYc~W)3V=gaNQ4DY?!bqzhbWegFaGpWAfLOM?$80ED}~$eLw_0D
z&Jd8FL6u=zU||{Ph!GK3dc=Uc7p1i;st)7Q2^jx5BVTn0peN#A(UnA|Q`ZT&XhnbZ
zFjK*BJQF0|&*>EF0L%9ph)NP$qB(ucd>CDQC-|VxriF?twY!xcj&{uE3BoW^_)B(6
zZt=;MC9jmOSy4`TCedscY}YyNJ%6I)Avl}ElS=0qrOf~RU69*@sRb{k{Rva=nd*O;
zIt3E5xZSjO@&eyrZh3>=Y_i?Q3IwoZsmVcnK#}WaE(tVHW)*OC|K0264<8kT^s1wg
zxhkuw)ZRgyKq->Lq2Eo7f)>wM3DWS_&Hut?a(H?H!7O_F0o$ELiv&b5a)0NfUsjUt
z4E7cEje2F at jFL)evJi;0Evm3+_J}o+`>Ye>e&lqm3I#lgM}q%Q>vY<N>TqKj{8&Qd
z^LH=pK|HZ*d2KuF3f1#+f6hzU{DdilV03JOg)4D&H#Ur*Yr-5(;Y!_)6BOIP3(|Zm
zc;<C4!=dt*0*WZ+kfuh?#(!oMHXc$qJU$S$g2ljWxP1~4xYio#hU(^_0tiJfj!lPm
zt`AsvmF^%L;3Ns){&q<cJ%Ao>BufD`R~O7K+l9>5q{x4uYphoWCAc|<P;1DP^s2(^
z-?s;V1o|kYpUSdw%4-KV4mwVGorSYa&g7AAbU5R9E?HS?J_8jcaerMv`1huB5<E-~
zX7-#4z~se$pg=-aMb#PZ^flHM8(2J!mLNiHTreWoE%E at nD-LZss;VTi!Jo_kdU2oQ
zK6}3oa#m4zk+>nJ|1GEu>}Q~!N#@HPe4X{7dQBGSPhzBN3oV>8snZ)VlcEJ4gg<I>
z5w9Zy6BhH^gyQ}bQhz?LxHZBHpcVPc at nZ+w0W-aXRwkz(nJSEBB>NB0Lg5IXU~A0>
zIgRh6zP##Oa^4A=$S(>op++u}3k!*%B`FW7SJXvjn!O`&Ntb0l2G*U9GDwKuVjmiy
z21AhM$K{y0sEH}#E>w_!x+{wOXVQ)h1g*YmLF7!oP+~|;d4JQ`i(isgk!@y$I>WXM
z^$pCz(wZr`{D|dN>5p%jquAoCG!N)kpJ@}!axSjuP~hS5PmQu7Z4$yKghP`>jodpY
zp{67fvJ-kr0U&~JXK^1KuZuY8TlQ1(YZXPOz9l!swENkE63^X!Y0Z3Qj%5P29R_?3
zHZWy)c&XT!o`1e#)DO99d8LI~LW at R@bk3r(jsHU84Wvk~nos+hBR*yw9F(q3%+iLt
zrDpu#WKqeKOK{B=<*5M?0m^k!<175W%a at w&;C?xpd%r`5Ja!{IgjLgMn&T$hL#Q@!
zJ)Tg#G?j&l8R?D|hwP-Rg`%)=FeWG;55)xa*xOpuFMo*uD^rNVqY6dKG9V?S{Rvys
zSwn8bdD<^ywgI(E?Ee7#U&Y0?^Eh|=)RGELLv8p at CAy$fFyK~;5u}CV;T)<}*d1Bt
zji5JXOeD+@&{%E(g-H0;7QNsln4uzoL)rjnA#sifdrv>g{fd%3MrH_}v5~vqsNALe
zMJX3itbceq&-44|jv%)RKITZsI{xHz`ncP;W(;8_HVN}VTR=o-Lf{hLQS1iZ4T*!h
z<p^n{>^y?#ZKiwDx|*J>y9EYSDB{G!d>Nf`PjJE9*q>)Ia&!*Ca6nU>$9!vMOeQ|B
zd?~qCb(gu7Sgzk{9Z|dWN3<c&3Pfr~r|i1 at 4SyelpFNAL8#6hN=dt9%e7vZ#=79bl
z>MX7sM;2FaA)~rY{9Z@*H!&9}V+zYO<7W1DJh%@=>DKP#nn}}k?B<f$6UMBvoU-A8
zYn#>bsNk`I?cN?TyRC?V&QaEFa43q-5*qQlU0CYAB>BqLeP0BL|4n%7>gy_W=z5RQ
zW`CH`P5eV1(FuFeGGb76ENu=|y5O~wB4*f0TRVzDv7mO63u&ga`5>yZ#4y|upz`M~
z6^p6c7zdi<ymOJ-WCQ6e^H`;enSaOEU#I=LM~XOH&?~e}>)tI;LAZQSqZ4)&!X6Z3
z7!=0C|Ipdu*)L3Fl+-oS(ZuCVHv?UKrGNUjI>!Hy{TIPj-7J2fTbGg<09WGWkqay%
zuS9@(6lJpJws255!V$=;Zp^k=m6Ox^zk!`QW!RL*Dg|on+IbP=E4NdoKssWTzMw4J
zi$Xh<@&HH;{2UlWGDa5|PWb*HARBQy9S7?J(DfCLnq`zkSp2{UOP`&u=+V5{Gk<l)
zS*Q<KCJG|@$8g*97FK<UMcon at EePZnqXOkJ%ST^$>~>i$e17Mh9_v>p9Y~sI=n9={
zOx&=6E%giqdtLnvattV?KFru?HM1FLe!c!;%}Z#q-MwTE)WS?kEGTB|=%Tq3N0dOz
zXIV`_P0a>kKf+3#`7 at q<EC|&P`+rctt3PMNLJdA&L?<l3f$#SGBF|rs5ViLP%QJnL
zriW#L#>1=#_3pg>l2nlR9gg7V`@@UuMepqao9GLH&n^P6Q~lV?@SBCGo<enW9|LEH
z&Le(Fj^Dj`-<{9a%nGfO_NeeR)HM-`Bl||1mRlOv-2CyYUH`>;rBY}&Tz`f1$Gc%;
ztP%$)f^b|Ms5EaFD0az7TX7q1zcE-A1J;6WREM)5sgw^q(p69&`GVPh-P4Cm_~d4;
zT1TZa(+YBi;9~bHekZWKKYPHSXh(H%16>QYizzTBfI&(ImXF6^t6_u--c^wApvwK^
zm)iat`yM)bbQ35eWjNZ4lYg&c at JR;Dep-7FyR(fhK_Qsjaiw=S-Ov at D6RcsjJ6eE@
zU#>Lv&T0RIiCRtR{(;Zc1LR at Ik+9VD6t=v)6rYhq9GSy7o#uCZI605EH3{Li^%nen
zJ|_++ZT<9bbn#GVaM3}c>RaTIfG-2o`W`jQK-{*%4Y1Hg__En0wSVpy`cQwgS--NB
zzi}1_tjs-za at z!5vpL$O<!JZawHd`eBp8C<6IZ>6Zh>m*7JC0VYQ_xCJ3vJ5ISiH8
z*&??3l6#T5LT`wE<S+_<(}9NjwehNrlRctU*Bk3#DHOH!dsb%qf}Ieg_A+yiWE>?%
z=SU-uVX*kZ4i1{**?$Pd at k2Fa^_0RSy!Np`lzhpEFAK|%-4yF5wr!g1{6&dL=D5*Y
zW%=_Uw?8{kJnnEP=*Oy*7v=|)hABIZ3X$OpJ*d;N7b)z5Gn&-WB#?TUNX`@>9v098
zt$8$7Q#G}Lr|*DdY>t~t*uf`b65(fxh#{hGy9#LFzJ}SlE`JI5m(qm70x|C+ at wmu*
zKWB<g4iT@|M{oIj?Jc#taj`b1X%5D%f8Kit4=ba|@tE2LX%VhvZ-ZupMUb$hf`r$k
zdFn}qRE@<tx^u)?4fi?U*n7I=*qS})sKvY=r^K72IL88Q(M;vPP^(UaGnBm&iIMmi
zV*;>wFSK|s+<(#VkGQpHxyg4)GutpNWe;C622ERk_mC2NuT~OsR|V<nHDt=a`=&s+
zJRKDxAy&j|g*)poXGd6-oS65({69)w_oz9uQ)Qr!{&tGM!r_j&pL^pQ^BuETLE(Ub
zv=LE%OOUjU2Gm&ZR%muN2C_lJLC<_%y#!8WKv)Ub?SI#KGKX03O6q?nT*rj+%}GU8
zN{;x<Ve4AOkBt$3Ce0&hTu(?S9V`}9p=(0!0 at SHosznu~v!|(u(4mKh{rhsSEd>j8
z+*B_dGjAXwmE`0AI)61_+%h<1A)sPTdkpujGRLJ7*-L2}(8lRb?05R!;>Wjk;ESNy
zl1{gN+J6XbTCRT1v8E}V%L+N0WDuFB1LMIh^@f}{#Fw)632FkJ*1Uh5Sh*>PbORh0
z3wgga(Ja?q574rn5(4A at qMHQ`QHWXr{IWLNV;bo>9||?2Zscz<aQG7IW**)2Z)ZJH
zF4Zr&ERZEF9}5orYp%%2Zt*Ku52oY1C<JM>S$`(t1T;?M*&a|y>@Fc%k&J&-HeTlK
zYBy~bRQsGUTB1RD*<7;hSfZ_m&pDV&a&BU(4fLp3+TrcQdwr+ at 4=175p1t|R@<LIx
zQgHH!(U3`N1 at K~Nk{-{gb7ap5(lhR9wzQiQhS&QDjEW6Bl?)~d<*b)cA9PWDpFS&F
zVt+ls7)wEIa#(1pqB))(q$p<f-{*u}cwY!f)q8+2ebhr*#ZwbOb%ka`W8Tdiye}`%
z`4704O4l%C>tb9rIlN{L>P0$ZO6mAVLt1a^^I=h^G2rRVu;oQrzpzs-Y5wjegyO=Z
zluw==rQLrx0zyDjUSbdj>eRJhRxDP}GJjD==-NG&O2}{{@Ry9;&f_VcQH)RwWx$gq
z^v`KUG{$ygaqrW;bry+kA<>^kq1V};SG9T!sobBPbabij5OE<Q3me%B!#2Sm<5+D7
z*4Z0YjU^6mK}&2THDj(F$P>oR=zlSVJ!_w>x*@D13X+^}545B~BieVWz|3}NE`OLT
z34N#==1_zNWMZu6nI;WTn3a!3_^*pbAi|^No%ojHM1k5fXSAKw1VhUsIGK5&T;IfY
z{d5Z0!QE`@7eat!sS at K@;7`gw;o*3wpE#$zwD<o@?Ev^J?)IA_Q_=@<DN~D_`Gm at 1
z5htqaUruBAkKky;%DH^oY#pfB{eQPSU-kn9SksH2OYS%yrDi2AX+EYt{IU5=Npn(A
zvG#@L-yT~YNo<*JK$q3Qu!%NsXFSe`YcScV{_;w|->v9|SB~TJ=sTU~d*o;M?ZT48
z<?4SE^hy at Xysta#my``<_D+zNZXBv?-<kQymMtB6Sprgpmp)efToWXWgn!(A?o>;2
z<|d1EOVQ+<QO#frfnH<Sg1Dl5A3c{~YRztiMq2rv=6jG+CJyz1zn)D|`CYJ5XK^cu
z>Q%vPYPM%8P6l7#@sTwN)1+1OVb2JpndTe^R_?HNy?N|{j(bFY?wFtZZmAk6{(7mW
zG!Uz at R#SPd!DbMEqJoxtjDHEy+Z)lwYftNNO0A=ZaA|_!nk!3cW+F9Q%obQ117ANP
zE5K}ZlRc>Et4X)`%Z at qz9H&RdpnX}T<uR-)N>~qY@&5c$K7(Yvrdag#gF$9MH$qEI
zU~%>>#9)KNn-fo)|3 at oB{x9xW^+-CAJrYBS=;*aoQ{~WkxW|*Df`5kb&nP9+i6(6;
z at pyqOQ>5Mrh#kEA5C%kSji;ZmFlFQMa1<NTP=p-*rmPz*aLdi7BDUEc4cg7!YlZ`2
zo^58<deDOud*fhGBxEhgA$tOJ=q>@&+s)c2SlKJe*q42V4{a%;Ej|N+P1Rs{dt!qO
z^_+*vxiceZl at ERZTz`EL(<jRmwdV5|$nBvsz|ZMkbSn2FOf?<ZosGm$avEU1a{;#%
z51X&G|ErBgmIlLBhfgwMzu8;E4al%-m}x(FRfN7BHs at Av6<e=^%TJPY!dEwG$viUr
zedu=eun>*r1$VaY!(0n|9N!(38)zI#h;gk3Gk9Z4XmDZ`oPS;QkE(7Vuw7-Z-E{K(
zl*gO9V<g!9jZmfN{)Pqvz4iS2Bp;Bg5j<bFsxdF&E!5h|8gyzs!`!Uv*yMFqOU<yZ
zb%s}hpR!{i{|6xRs9V0oI1FW)BMJ%+@&UomkE$a%qNlk0nH~r2l<tC#e}+mn5z!!f
zc(M^8l=|6qj(-*`aaGKz7%kV#e>VrE+V#uL#4U6$7(t|9TNGjf+MZW;NYlvVDQ26L
zgEnpNs+^wj4?|VB#<t&S&`gtQ3$~7VW81pLpHz5x%jokv$BStk_i=f5x3JW7e#n&8
zC*(lq2|6^wtq`TL2-<hCWf^>e%=O=7XP)!*gQBL2A%6mjzY%{0%ZXW*rzoZqsMhHe
z-wu);(;lIM*x!%vcy+F#>|sw3k0Au8$lu0(`9QCHT$C}#P at BYhW3=YWlS{hf`+XGR
z$<Omln|IpfTxdt=>;P1uK75<53+%qTVX=xx2gfR1)~IT48J8`=<#-W>B|7|P()C<!
zZV(EXo`25A9i#{5F0)hd@#+2nwSUezb8rrQ&0U}`zM(1W-gOeP4CvZD13{S?-R0rn
zzUpM(Wr#(-zYZycVLPZ?HB<lA_bGpeYKnqBS6_N*+W88P7xJv6{klrBflp-eh?<*S
zt<Dw?+R-!>#HM~ahN&&}GAt~1_746MwdlT?{C`W6^(6$jDlYLJq!$$U5TvEOnAJ2t
zGL&15-AVTMOcJ)hrb3%nwfXqL+Zp%U%&~Q;V476a1J)*KDvz*PlG5r7hD$+}ds<6k
zU!G$nM*U~lQe}o?*;J<sY31Iqg;~ftql;2r>dTPP7Usr^WLaZE_m~uVz9ScM$^IvK
zA%Bd^bj4yR?OzE!#V4RCBLD{J^>@VWH}Y?c_xoT&m<4ywCd0eHB<*oorGm2q5c%e-
zioiU at t*Gn}0WLs4f?O2x4|2I0?r>q%Bja4zY5sEPMa-8NIG20Vt!i80L;w*Xk*rZ}
z@$WS9a|y7}`#(`y=jPws+&Pr+ACgT!_kRaoXUPgY_I40k7Uf6h5IPsJp)v0-9K$X8
zQ3PrcnP*5*Wh=~Sp80(mhqNtwEeKBxF$Vt78g#`;qt@$LY at Qw~i^WM*AMzcT;L||o
z7Yn`MiWjZeb*0f3V at Wh0?A_CkX4+GVOSA$>**?TLF&QkZ)j$5i&voHVbpAY at s(<M-
z(tfJXMy%j(J99I6J+}D at lUgYSglI5>_a at N=DI;QJ1sTL^V~8O>^dUpQaJwy4ItpR7
zM|Et(#`{S-kI3WEsy>1>`IWaKob~6X;LaAXxSF}ydrp90%BTYw`=o6%5Tf%=rjlC!
zn;6C+JC2qD=y&CpcST!>ZsMz0hJTk+v)=r}mMC;-<3xtsSh4hB=-kF;m?Qe5K4bSJ
zR#9BRL4&2tUgkgI8n5%n)_u;uTx(#tLaPJoOaJ9|%Yu2F at lk1qLo56my%S+TV9fhp
z4Z8KpRd72kzS65a^ln1P-Be?YfV`vZ%JRJYFTmMYvO1=-6O?kwy_+nx0Dp&CMx9%c
z<p9+QjjLQY<nb}mL6&<+atIy$ae}g_m_lZ-Xn8PK5!uEZQ7Ul$B&41m2=py at 3v*l&
z=S?^hR~eX+N}N68{eY&<bd>BVrsQp){fM20!Y#Ncu4qDu&7@|&-}?TRR`Z0yXiF`<
z@&p58hpU{(<19opu0{LwFMp}_q#Up|huwM*^jUqw{LlM;s_&he#<eO{u^ysd)JI@`
zy?|bides=-Nzmk at mxy;Yb<;n8)R^tgJOS;BO%3p<L9lES&@oCfUw<)%RJ;KhSzZ%Z
zL;3x{!{+<aZ#kgr$(-8$`$fH8{i>t7nV&1QvB at nAXH&9><~E!}wtr*H*9+DGGZZK5
z6B)xRjROUJKOq71(x2G3QO5t#8}lN&!&?n<oEF8~(J at ohk0yzwq{bPR{y)(^3Sw}O
zHb~0vqXOwn>GoFC7ow?Zb?wWuTSohuH3NZeD9FnNnM$J9jA{6|YKkwxuO@@pa>_vP
z&!66{{xJ^?(X+Mc at PD}JH7PNA;wr%%w{@0ukoc^OsgdohK4}41!|h_pcy at EO;xaeo
z*Ou4st-e;Sa6cIEn2M?99Kl1YDTqU-%MyaBOce#VKhf1!Ws#G)dn&${k~_$zg9G+P
z2~)Gw)I;paq_PUrRNnmp9wQlrqF=dzv)d*DfrB^jrBN?d6n`*J&XZf;r9G2-bFGvj
z#(ibSObESfcFx)iBdlDXS2J%4k*YurR3Zab#phQ4E9)m8<|u72?U9}ky{`}S2JdM$
zG^1s9(m#bCbZ at We%uZJ>a^h at Ob}-q_n=Y|Z-?aDgf>Hx{fX$H=&()VchJ*fIh at qXf
z4au^>Ti9bVGJl0aO1K7L$Njui)zam_*>mEF>oEZ^Fx^kd#r<#UXkTUB-LN(VLYJFU
zNs2mVQkF%Uk6(seeAABCxG}s68Shzcg=pPrcjuqp6*2>-O*91Ph!Eg#(a6)4)y|IN
z)p^i8$+;p;N9zd1;$4dvvql=r at j!A5A^S?^{^y$C{eN(Np<6RumS2GA`W$7D4{Zzb
z at 2B6c6FNn&D+XZaYw0UpI*Y^*<DIR%Wecs{SzEj1|1SsuT9s at 9KhdbWhqRTK(^kGL
zzc^WXApQ#X+iEYZqS|=|v8eQR3LN`I8}+J&ntXYBHzRz7uf!bJX9e-<%WJfQ5A)xI
zU{x;bW`EP>M at GQH_(;JIHQzmp9U{)@)75cS3%{5<{Ts#zPrpoh6Nr7ct>_DCL<gk$
z;h at RRII$J5bny#KqPSmbCSV+ at b)PWJXln=8V$7|-^42Egr8DMd5Xrg6mq6hn!#)z6
zO>o&@+o=~+nOC4{mRtue;EFt~V4 at 5^azi{#JAaLk94{1(rvox=h~c`Vc=joC&I>R3
z%CW7V&iw6{t=(g!{ak&4aQNr;6!~1cipyYpC1)Qm-iw?X&UrTawyhhpZxq+_ll0;~
zRTdSNM!sBIf|)i$`LY_2ZY`3s)w$_u#s7XL+_{a5$s;|0zjoA&i~7D<cR*dkaH0K~
zSAQ)keerd^x3o({Kmhq at -zsiC#1RL9v8CI;cubCj(WJl$!1X1}C)hqN@{@lcR^y)3
z#Iy=z8E<gW;cUJ3E2`-1!(1t)l6^k4=PYT-gfaWY5y2Dsg>pH<+XfU`0O|n$v}#oq
zaOHaZpVF3;=!GL_u1sH2_vbijfFsgzMt_)VOFD4^51;rQB4pg_df$OCW1v4b@=lkM
z&^H53g*l0xzvuOmJ1H;R%s7QwHr`#)Iz!-YMg7vHvRXJ?Yyc)yz&J#Hb#yeHeDfJ?
zETd|(&l!)Y<S9EyHknt<;mi$5;r98@%~v$a;3*ZlF_q+?@95>g+Wy<RF$A)eGk=+#
z;kVhgu`v?+g!-R6`q at IPeL9P~mHa=|2AeM=kEL&9pn&T69t#a at G;-~+PRun0ZS?`z
z{|6j4j*VSH$QoneU`u+pcf{)b$h(Rm$|yx`#svM~uSK5+WU?^@44a<Pc-5_TDK9X1
z=Y{Qk!p5aeL|LN!;FdQATSHX&YJb(r1l=qfju54w?9oaj+|T%;zheIHJ%DFBH^z%C
ztJsYCLy)>f*75DvhM?6IX!$V-{Ms3A^tskG2D!=gy!~@yHOF$()vf{)bp#e?zeoc=
z_}e|j<9({{3fUk{WOA at r0X@@@lwMLr95Z<)grVZbmmaatsTvS$)L#s_nSVdc^vF9U
zKiOl- at AxbfM*?TYc0FDPhm>sy@^;Rd7|{q(!|?Da0RV0e6a!s!q>Xpxc^7j~rlBUk
zjdE3HEd3f-nzHeo at Jpr+^I at Kq!J!5T5Rk?kx-6~vT_gOQ$-yPW4PU&9cA<M$5k3C^
zxxnAjx(qge)R>wEL++$BO at C~k1X&}q2wU06bLWbYW?tgLrK98+Uf~pU$jLK-Z%*tC
z@>(AWn`xZejrwA4P7j%i0l49(>es1dWem;NII>cSDmom_4m}UdWl=LAW?$R0&+$gh
zXe3}L<32o+hxno^5|GIalA8g)RR#%d-CT;JIlOMW=d}E|NJiP7Hh))Fu#=HD((7o{
zb}e;Cm*K>DN#$1Aob1&^;S!yM2MtD at KK808jK;FynYdYDQyoStHe98ENRKdggw2+$
zxJ at Z0xU1*VwZt>~Ont_|@Bz+H|BMP5;c%|puC6D9Y`WW<np^IKQ9s26J<LoWkBCxS
z+R*~=l2X1u!93Hg-GBD4B;DarwGg>e?hsHR7adU8y_Mkf>TVzCznq<7rGFtV9=m-U
zh*<5RcKIW?#U%_#z(Xgk=b0iMUC4ZVuxI96LI2tUxk1WZ73LyCbD>;3Q;IvPN`c?`
zZsOL-tNqZ^MKzHmupBj-%=YDnq4+0?ahXZn;3m&p@$Gw6%YP8?Xf;}rD$E6eD=s9r
zj5xwF$Rz6S&vh0<wf1_Q9neAShILC2ZM at Qq0@1A)`jpAPCdc{sCPo_?f1vvVdmvN?
zv8p8xR{-%A)S7P?f&bu@=%xhDMLM^OLhFk|Gpoe|O&1K*0UWT_j*MFUh+%2`$QdEd
zG2*A_s0*PcMSrFhU*y|13C~#spfb83q_;#1U_H?IT85&vbuyxduzQi(SH+2|BW8ev
zOlg343(*u&k0V-D$z at qF*s|n;-+OkbzX2TS^ueSKS+d6L5rGxFHWi^YZ1`n}FPjpF
zx2Eu=ZPl8oy+9>{wB-Nc0HPN3vxu)qV0zxVaGVek#D8dNErSqJ9rhFhwQl~YNuTp6
z`qsm_cA9aTBTFPKy0Z~Uh)mB7Q446(jFFlKGIdSyCu0pp&Og0>x4N6LyI_t<E=cRt
zlZ5d?aYuY^DlFKIdSBJK5 at VfPn>#aURQ3)i4x|5Av)7Q2M{9o<32VZo-7^KqC3J|0
zpT)&eMSm&v+ar`6pp(<)Pq=hs>h=F<>nMG8vvBwrgz;6>`N2M>@LG2zBBp|d8IkRw
zFJC(z6)~KwakZNGyV+<f7j{=e#tWWE=+8a9IcLyinEu;mVWxEtugxKD at Mcz*qu4C_
ziS!7P>BoevQWQ8}ax=;@O4pvWn7HS0Q!~g#tbc+v5-+6OZ)ODs2~=QlDo3v;=0(H=
zO-q at GM1k?q!B&|pdAi)))$gIV2u!K%WPzj!F*T~BzXb-X;qM-=I-$rdEgS=06jt0Z
zahlR~7dLd&$2Te{7!~vr5i8w3+<2fZrSAHiq>`csG#bhCE=3wC2-Wa$7Jmzb{pHCI
zd4H+NPPD-rMx&f4D<4aB5pN=qu9D4WK3tQ{fff88pO`#`a_5PF7rJdTMV&S8*C99v
z2+re}aFEVE|H6y#z5y)V8~^w#FFHVPU1SJbVmP*4>AGz;zTd$Ee69?kt0S<icc5U+
z%lc%uZoT~ya>v*Z;Cv`+_BUqkFc^ZvOMmj945$VeG6C;%VyCPgx^EjKiCK%VE}P3=
zIgJGz>4fVIgAnn*yLFqwJC<~*7)3??H0I=JcSs!~y9=hJE0v|%;*rVaioOMixKVrY
zD$_f%u|MtM^IKcp0r^b?<zN>e{+ZlBp<Ph(VIrOp&`2`Oc}&&@5ei0(c6yOvQh#l=
z?!aDILlV0=P&v7T5kj^oc1tuoox<leCM+ibC!Ah!@Eq_}q>1olKxgX=Q5uK at y6D>3
z#Q8<Z?G8%U^}q>1C3Wrvl%^`ulMnBizJX$VxvGqe5Az*eR^bxX3yszF==jJpFxUd0
zT(~W&Cr>J$W%PjhyN+c7ELd&*IDe-3IFSpHtZEKZY7F=^j#%JX$}xmGV`kuHTn{ys
zOM+Q0ZQ1M*X@^A(rQNbZqqtL;WCsa$;(d2_j$2?WgY^Iy8vYV2fi!uM(q3+(GC at AR
zx;|-h$|<L>C`5ZaLFD|BEkYAMdh1oC$Yds?SZQ}t${mL%Og(`u=`_s_V1E;Op#_}W
z(3W{c4}6IZEW`D&7v>Tta0v>~QM7-^lj5g21lFM}cFrDn97}m>LT6SUZhCe|yyF)<
z`zogvDi>>p_j*q~!Y)jV<wOIujJ*EdRcGg_IH9Fens&v-bP;p42Yau#O)>`3>#F(2
z9py-m<&_oN8T)uP1URTM&VM09gaR4R3z??cUoDRr=+bCoH1fcOh5>Ofp{X|}hf)X%
z-$Ybw0a&x(N-suP|CVdC-=cK#g(ZzFyS<9AR3wQ8Ynzo$FhSQe#bhUA=2P<lDIDzT
zQjS%CUm?R+p`gdrxb4<thm2ja7hF{!O4!blw|M7_nc9uXz<Cd^j(?=wJxx29KAMCF
z5hjm9ILL2Mt*P#MHs4v(MkwPKP6=#haK$xPW+2N;O>*lEcz?YfM{bsh(y&7P<<Zcs
zCi^A~Y8FagY9}<6^F0FmK=desv- at WYDB{)qM)K6$GQEo?2#-~{`@yr7<7;sz>a$;C
zwas&`UFMz+KyDLsM1Rfh6f7-+;J1*<1)S5DIQXH4&O)n1bmt|pYj1mGRW?QToK3L$
zV#tB->A<-0;C;yrNGlXaq at E&&GWh)02i!oIy=scd?CQdweu~3%54(dP$*(91oti`X
z2x?E9L>jNgO at 5yR7tm+eq8_Lf7SD4vbxHPb&laAJ+od!X<$nYH{@sU%- at m#5yvZ=o
zqh1#VU;XPyL^_5Sn`8OWAzEg`<ip%c9<v1ZD{n~Au;vykZQBwgCqFY!;apps7v)ul
zzX_gbQI^2%&%v?R^8+(VX?1*2ThkCY>C=Kj2Fw%LjbWW-!h=<2=6DdA-!j@>s`c^1
zKNll&kP8FBNPiX%cQ`r|)HIp|H+dKg9cC|@G&2^>#FBz{1Ud1(#oJb?3Mkpf9ofd;
z+T{zvXg7y_jqrp6D(o(<>|8yi9r_a^{EkXN6(k(sn;- at q_o!NY2b12a9}BE`G<Ooi
zfLnX2=AY<(Q6CwjKR;Jh=jf=+hFxW2Fw{vD;N##mzJE5OSadJJ7m}i*S&^@37am9a
zQx0Sr;QCf7XK^P9+OV+1(7e#XYb}h`Xd%kP^S=)0u=XsaZDo7mEPV!R<@+s0?*!|p
z>JgDtcK+;vU|kP!N4JOj>WRO>)4-}_eJr8l at O7%HHuK6<wtLFhTw(EX9pJ6&J}p!`
zKlpQ}yMMS at O!fVI9i3D*eTa$Cg|jixRL4%wFwH5x?TNrqEY3v*3b(cbxc5E at BY@vz
z<!)Hm{}jqIC|oTaaxY%iUN(g>KVLy!z56o<0-tZeP(lWh+&Df(I&Vetq9 at p}J9H)u
z=3$($%2T-equ3M=%r+MiW4vSzeNfRs%FTXSuYVy_KyNxqkN4~eLg%18A|G*7wdm((
zL#R;j{dl)FzFZ<Tk4MF!ITmmAz2L|oi*YB_VA6hO8RgAUrvKZIZ2>Z4a#Y0y;}&9e
zgx)`QS<q}MRc_mIL}FeW9C+2ShNLk_Lws6OA5IBqCD`eK_=Qtfe@{@EAHE4CG at D_|
z1%He|?Q~cVahZ3FsIx*E;+ZQW>S!zpPDlSv#3&E20 at Qe-$n!yNObLlrew);yx4T?J
z`0iQHEfWqPqRyGEKc29?M|Y2%YFu{_W>b6C5rXG at 5zAvE>Co!3^k|3ao;8ZXrV)?p
za{AZKsR at u2HdHXW)O@{-3#c&j&=6dARev&Bm{#1l at np!^8~=(7f)&|6)u_y-nqFia
zwe_{t9G-f><2zLtsdg*kFtxo`p0AE$-MLv8ww--hn$*){b*)m~$s1haD^9vg^^*rW
z1Pz3<B(d(Ak8f`-2>O?t59hdL40|uo3UBj2-|l-eZr)~P2;=9z>*@zl=eCYVSbxYa
zI^0LCrwF7+B}RwKrwZ3!_yjSzZ+*EEQL{phk516}|1v5yj1NJQL_CZG!rwxL at h_Ya
zGV@!p!gym?Rv1e|J`1r!PUHl;=KGSeSwv`JQ;v4OW>qTM^fo2V at e;0qd^}~- at cL~j
zxK#VagnpC6&E|r9)rNJPON!6 at Kz~c~Tr(b^Tz1-x*7iJ9b;?v&oA<}~g8$!nZ#RbQ
zK#-$*7zf|)`5>ODo3JWM_J;``gE8UMqebs~xMSLi05ov9ad07DqJ)z85?^Nbq{BG9
z)0;Edfq>!#nUsjl0($Mjpl+P2?Ey*QD467pAd at x-A#CWjV)jgm?h$X;YkvgafCl`Z
z4CMfggnL7|d9<CI;xWrim{^}>Ud7q>-)Hr=IC5rrVX2#(kzGlpoaYm{Bmufu7V+7q
zg7L1+80yIf_7t9+CkoMk9&tJ9qMHCQYrjFF!k#?qy6hcEK(9!}axaXwDJdzOzjlqG
zkFFB3L)n6ISEVc<LY*8b&3{cS?aY*B#<p(4u#89We%0M+?kDs{k1OWvy_fCwT$-MJ
zJ1a`kuv;5nsNUZHl3>=Z!=zkuGLt3m7WPQVP<D)ME<6_4=#(~cm+EO0nfLGpv(Dw|
zVdP3g6A4Eyr-H#l#uuPsBiO!$1wYOVwpd|CSY~vQiu&8yw!B<msDA*|!3Od;zgYx4
zQ#y_*K?>k#d`x<Ir1N91bpObYg}MaVxEVFzzq>P at Qh(1AK)<<F)&<6`<Pj>b%xmE(
zo)19#zYQmemmr7k&*YV>vqd(iNQCLkt|^!Fc%%*s=l1X#b#HujnTl%iYZ($8>{be{
zDx}3plP)`EzDFdzJAc665&;ObIhDtSf)<t)8=9#ZbSYNs(S|@|LhEV1Z2>@q_qkx`
z9()$j1qv$NRdTV6mI5R#Zb;ZPiGGNxvz2(m2hoDx(w?F)7iFA`JuLC@&%}jmkIc_^
zhNbFOl}Cnu6ddLaFv$XS!A#wbC2rsXX+bx0VTM%qSZ6~05PvH+1uM`m&lRkaof>fL
zsdg0>n6dPBB;kRmyP7`Cn(nZd?JzK}HWIMFN?E;?jxh^T{w7W-FpH)t&~mA34csb>
zfyR~Aiz5Xx9yG#OClztqI%^yruZ%6=n!NJWIn=EXc$GPJpqQuTM`UyE3F#a|%1#bl
zrr at F~hfiD_RDUWzWvd?tbsqY}_n&YH5qr3OLoX1*nYM{*UJSX at bm2(~_QTAldtdIR
zi&ye&Kz~g)Snq#rn><!K1MRWX&-ujo1s?k3`31_uJOXv<sahvDqPx|LOZHP`aaLbT
zV5nIw%`g5aFXH#c;aJ)b?JK_9 at bDJW2nM*2ioF8$0e=QqYR2%H6h&xfZ<1DsyJbh5
znuDq|rH!jHDW2o+rY5M%We;M3U9ElX4kjKo%_v;0R7uukGh{JNwLuv at UPH!Iu*=xC
zwEI-~px(>BBf%?<^X2*;@8Sm)9j7YQPAY*}#SQiLPsBRZUIKI^qtP0=3silWBhNE?
zDJfqw-G5k#45 at r;g_p7urG!$!i$88LhUuEY__J0pFZ2(IM1Tx~bziF}vbV0`<i$kI
zns}9o;5=u(n*@gE^|eG&ePOs*rwTouJWR8_J_im723lp?{<0hu%@cvf1cH(-KrI99
zyN7Z`+QGOd_=U<w7UkvxucC3Y&1f($M(B2Pd4Ir|vF|lmA3c8rghsa>cU1zQ><HAd
zPKIu-PzS$ln1M=AP(su?(=Y@^2$n~CLSZg-*U2bejSQ^E)^jEK_&RC4VnX;Hg1;=>
z4 at vU(8c$TJGbIr9YdGc(W#$ni;FSce?gD-Fnc?Hhd@^0ZrCg2;`>_g~F}+QoAMyg^
zwtwLbWasE)S7w%IdS4#(H#&uuWJ~abow@)$4D`50iF797?7j2!LGP^sC!IkG0hx7t
z6k0cI+V;&MPX3{G5G=3GCjwbQcOpBAS!A?z>n=ZoTG$W`1<Zp7e0htE<guY*PXYi)
z8%Mvehj~n#I#0al98pG40;7c!e}&h1$A3$SQPcMbnpIVoW*YjZuA at z;sT#R{S>mjb
zISboVzRT%$*>!D+_i~cDie_Z-+#8AVhYNYiSWe3!5W?Oc)ya_5wbv5=EvyZHI}A)<
z_ql{Rw%e;Urj`yAm(=g5Pg)=g#XgX at hENPL+j8yqxwj6U@d-xYZ_(V)*H|x?5r3x6
zFk at 8rHi%k*Y83jo?2{=dE?(5gVF=^S at No`AmQ at p(lxnY?NRahnrAJFtEQv;|A11G2
z{a)}XZ?(<UhjEP5ja+?51eh^rTWb+YCs0WfPLa}AW6omH$BP6?sz-l6U^lTgHfuwy
zEPM9vrI&BdD{pFY)BwEdDgm^DzJHPHqA85*T*MQu_RqPO6S at H@@-K})<3rLbBZPa)
z1-oJ17yEV;Om0NQ>B$}GR9U#K%yIlwLj4;pr_G3>su_jeQ>V>f71AlgqL9U>tIJu<
zxms#Vw6^W7Kydc|T3|}M`W+%WwZXp>I&la`dJtJZme2lx8m;%sNhkVv^nZ#m8*M&n
z8 at +64l^MR4y0UqcaF?{x_;x$)ytK<j^#yFn^Nb0!u!Y+)p_cY8=d&oH at gx$%P+wR(
zHWRoJysY1);uFK5z=n&VC4P<7RM7>bgQ-TOmV=PrWvi^Hm8fc0Lk;jXP6p}PzvD$Q
zIg0;;Bi%JBfDNY&Yf`9itbfJ&X&RtwhK}>zY3q_Lz4*>k%wK;|0uu8W34w4qKwMxN
z)5q;xArO;5b{0<@R73!mQxsE?dP~xUb=NN>i#@D at cXNT@M18 at jps;RJa3n)pHAYXB
zT$DhX()PNvc>a`-wF)m@@l9a^sO7(4c)3H|1i3d+&r|jqAM2MU-+#Ggr<KUq2R{J)
z6Fpk160sR(YM6bLAT4Zk18H^cW_$~XzlAuvwS>Jj0mO3-?=jpFJ(GV}yAHcVsTraN
zZ=Og(;UeO7 at S3dB9@h{l4m$<=w4xO=Ir{B;*Qttcw++B?^oFMKS{bO?I6IcwZfulF
zNqhA5d-$nNP2xDw0DnX;p0eAkTwGJXZ1YeOq=Mq=A6mCte(gi-LpV0PX|7H8fgO}q
z<)6GO#Q>t4d?`pfFV<3XNi9|)paIszwQ276rWA%s^DwZ=Fu`hoE_ssL7`9Nps{Nt1
z-)%jru<!yM0=?CH-*SiIh{=A9t!ENdu4e*lDg5$|`VWr+wtrq7OXVI|j}3(Yv$vNS
zO!!6F^O|={Rtl_){RV16WKA(;Q2RI#Y&W~~RrZKjG09KP6kc3dyR}+h5 at fRseX}j2
zfhEqcxyH(d&9)BH12dqlR*sbJLNykI1l5s}2&Nh=`8z7(Hu-VEfrP;Z171N8GMOFD
z4_uG~w=YZ=x_>;^4y}XGhCsrY8Jjc{khpMk2hfqqskQv197Lct#5GgV1Q)z3PJzT6
zj?tQ2Tw9gx;4V7}J#dbx1sQC~7E>?DDRhpFuU!O7X+ApORw!@EjbukNwU=7#d&bB3
z3El5h1S--Zcc?&_{NflHk7E7FLA=!x+EY+JSs?Km)_>aE=h(A!WrO0&-88`?^DJ^y
z72K$NFc_iylr&_I4>RzWXgQDVnYV+IQxNo+cwW1xfU$Ml;tR4DiQiFfm+f$$i9s;8
z2Friug<NF>h+CQq>gp}IU9}!SFiKap;hLoq;_;d->VM{6FOI45R<|{Ic9W4fUq5qH
z)1(~Bl7AMy05c?X%^H2K?J#N^+TeW%Un;|Vafk%rPOt6Rv`43i!G)B<bKi_yWFv?j
zNV*9|s}qNaxA!=t1u at EQpS8+eC*c(Nem>w{lXg at sh*Sb6amVFo^T3urpC7V!Ycw^T
zwT(<V?HMXQ<1(Sd-+KH~5_7U(#3s!LrjL}COMkxF_xWm-!)m0b94l2z1{PY?p<m_c
zmeI;yecE*amEbiyphwp~`XP}EL$*w4^b1KlnrZ)-CV|^-_SLRsalhcM{h#=b7k<JP
z at 5M*~s+-tt0ft69r*y7WE%M at H;IeU3$TPqPf8$J-=KnuSfNW|4JKz&u^xUmuwfxV3
zmVbHDU&E*r-gy;ywkCzXZ6*aU9t~jc@#YG!=^1))ZBSS%E>P~S4+-a?y<s{0eyDQ7
z!RCBGM-!y~93wJ*fx>@saz{RD;Tda}>L@!DW*R4&Rl=&Vg?Q`>Q=dq?sU6Xr$$KAO
zSyHigP6Mk&8-XE9J__g$G})ic!Pq8p0e>GwYjVqY!+>9LnX<F_5Jm)b8u*6c>z->6
z<%xgMlx265Nt6#i#(r}lEA=*411#kCj#`1Cioflm_5w3iUO%p3h(;w9AP)?qL6Yor
zk%iG_>(U!epIR8Lwa&p4@(7A$7(^Is3)DT^R4X}7!)F6;vqrt{7V5YXm!%7u0DlUQ
zyZ_IBe-(#6uh?$LSO5I?Aj7*)#XI4j9_Cxw8hw?|F-oAK8ih3}>Cu7|zgUdta>+pz
zJ{g&d9A&a}Z*B|QV^i;M*&K at GAqwkE7O{^#l8q={zRxp){^)N&x%<C#@7I;Q$<uhR
z%qD3+U#El}>{uvX1;C!)Vpk&;V}F=UA<UMBXhsC~HK^7T4ciV?f(w9OfyPCqq5hbG
z0Y;1S0%u<GYQ$ZLgNiHfk8Us1fDgF@#abYSLwMc{Sixx!4N&|bJNu~6<|`GT{8VP4
z8&>OUgSC))K$>2I7z}P_2m4gtfMAlDm?4r&<xX2QLwbeQb7jyq;y at Ho%70FI0b7KJ
zmsr9D(Df0r+|z*V-=l?K68zDCopDq|n9oa1b{Wb@)qm@|nDUxu(APQT0)QX?`i?9K
z!oLRC>2V=wC1$f4sY7VxD!>7EyNlcQ*ZeL>5?r`K>J$nukY-FLnm2w^=cIb^+HA8Z
zB)6t00OHD7y9XC?j`zyogMXCpYhWiNH%^LbD&W`gd`oBF*PcX^7hpM6W`xvggc-@{
zw?w5IbFE7Jp^pe~+1XqsW{i19GW4*B_-rxv0Gi@;*&bPi4e_~Mx_(0a at xcB{q~f7%
zM43b|l?RBWK9YcTf!1LtC^;g2;XPra$O6h$Q18U%*X8kwUtvWhYJW&{Qt)vpDYKsb
zUhaZg7q}t=a?kSVTBq=_X5-1R^dVV5({r^D6CN;%F&-oT>tn=6*}U_NLBhc(z4A*c
zEB6x#pdT~ApYD=^1ePtZ?_4Y*g7u4u3ma#ChMraMks{&f?SWj)=LtiP?fg at EGzY;p
zd5u<ao=I*!GR5xSsehAMeYI{(H}viOF+Clc%FJ~Ui>O_An7ze{@+HF=tu82|o+v3`
ztVt)>&<Q at T8o<IKLXUMus{MhSDKB#CP{JF-Q8QU+3}{h4Q$*NR4iCQ;>Z?x&MV`HA
zDpMa;3R!vPX>QLhHXLb7i_+jnbi+dxX=UD|e!xV~kk)~;&VPvI1-Ah)Y?;IS-*K4T
zNt9u!2iick;va6$$}(U`5_^Ff))QpeMpL%;TPIA^=iEW)n!;(qF+n69ef3U}Z4|Lm
zNdTJywb0Sm|D}{5xSRj3E{aQT7t#@ac?XlV{Q3{<2Fz^@lkxwSsYr)&!x-}MG;(hS
zh@%>E!ZWC$?SJZuYQSrP!q*`kpQ8Tm9yw$J?CkY<7lcnPoWiMkA76CRlLoRpy6Qc>
z94S01NBJ~AsN$<KJOfy|I-h2yuNY5t)i*yLe}{#;bJ7n!S&KcVth{*~iM%W(ank^W
z6AK#_TzlXUR4i~mBx%wzfRo^rJ{6qff|WIRuC+JoZ-1Im)(&1A(1!-^f!%>JzwZ~|
z7<a!c8yy;CfNo6Ip#HGF3q;yGh3IIX$7*Z`HetaS7ucR+9wyqt4Rh&i6F|!0t2b1U
za0E0r0xR`_(qtDkgWE5 at XOXP=NG6m`j**h;1a!#_m>t%w>Q*leh<F~veWSIXL-}rG
zBhOWQRe!S$i=P9ItE|7PN?FygNzy&XwAuDVpJQ^4 at L}txi+@#&NG1lIrd7>AJqcsN
zw&3q)byxUJsIMS@(}XWGI6%;KXwv0wk at jGOwf<S!&0#7>DnwHVsvtL(C=IZ_AoKAM
zb6h4WW47izAqnxKHY_OmxZ;fO6*S^Y!{A}yA%ANTY_qySVCilUAjHf$#nf)~dMr0c
zJyVQ>36=tBsQcS#d=%x2F|q~}vU*y2NkqKY(_cHGdvDR#P7VF{*??|qRX0F_d&yCL
zobnOK#jMm~b{YYY$2ITS<RGrO0Dw2q-eSglm}^*uib?q`C>7~tInTa1)OxkRKaN+Z
z(tqH5bmQC9lV||9u{oiVNc%w*$>$A(b_8(Rz&ni()v~}EH|#Yv>sd}s`h@`MBmkk;
zsL|bk*v?ugPv8<NGSWu?jtjF^uz_dtng;Ki>B^`wy5&ys|FzoG2d6Sby_(7 at v1s*e
z_-goX{ch&we^g8r@~zHwGYNAuP<rw`QhyLvib#^uK{1W)(q{sC|M0FU$;4kfDDH|H
zOa($z#DcT~DJf!C$5<)SdO&@2lZ-y7f!0+-Zx+$10}Y=A+zfmX@}nm%0IrmoSy?^~
z4V)|nQ_VbC-!wZkyN=Uwu`fy>pKG#F-5Qg0dxcFyXPyqHYb<;h=Q at Nc!Ug4>GJl=;
z1CtoPcdmRY`6l*aQhXoLXDKcU7q0_`LqYqkfix(QMSg{l1mN%kVg)0<Nk}}A>6b`@
zfLI%XngCs8???2LHN?+uH~?pc?C at Tfi8@KO0IfbZUQ*m(M12K at m-LWPYxa){o)^2!
zA%vhM_`y1(+gFB0<X%OJ)k=a%E`L-H<Dr6FMZP4f^(R^(f;x at +oE!InrqOG}VAUp1
zuznZA?@je*<$qs at 9d3!c=V15ZukdUi+0%}fhRbBN48SB1>OHV|gqSEtf$p%n at d5aV
z*mEl5f$ebke>$Q4eXn5X&F8HdJ>84+XF!9WLQ~>|AC=Z6y<!m52^amzB!BC*nR6cv
zemx0?_3_VHX()zRU8|oTqhq<-EDc~$xq&7*z&k*EJ|9fGz`qGyxdup5921|cw1jm3
zaEhsr0xZadfc+fxLG1qD)BL8$Ph;|fGNS=nY)a><INGPHh9EKTXrNQY2WiTbiq#ox
z9otu<{6#>5`&}ojlpJ1FWPd>5UPn5Ov$W&m8Z{?w&;PB&ue5-w&k22 at As%3z3EvWx
zjKwPdxU)u=ogpO@$0_NU+I#}%i8ly3Va+Bqj?M-+GTZ<^MeBL4i)4W+a5xzMXmv%5
zI!FkgNG+0a7~@Jl+m4XqkbdR8DnQ#ms^zf6a^~o74-lc!&Xf6)lYdk)()x*Z8_(z{
zI3VT!7;sM5$Fkxk-q$|7K5Qu3p(2>Ki;=4|_GnG+n~qvlyvpq-IAc5@?X?yVq4NOv
zv^+fz3Y3B*)yMNPJ(Jr4-vW(JkeO!vR*|gMYxCMV_Dv(CyHYCjLG8iRb9~uR)Wq=~
zJ6LvDS{C_S0}vJ|Y=7nZNpM|$_9L3l44IhG8k4$u&zVtQG+?wp1lv2B5tp>r0O~&K
z1i)wJgx_Wi)HsMb(OFTR&CM#b-Qhp5&NsyMETBpi+qaqC_H8{(+GI4n+%rj&gTVx(
zvI2 at MNue8oWkZ7yzhC#w#+yd`L(Yl(M#Obuqv8l%L3+4ph=1+{yg$$Q?MN`5G2hz5
z+%+acGqECeIElFu*lwvgzw-WQJ at ZV9P5ZJFiMgU4&1<V@)-TZjgKt~5e3m}<;{1#S
zS_eXb%P at yQU7G}fUUTJ%uAN!o98<f0`$e_lz2`v~T*qssG{`1+9LO=LWh%nIX&r`u
z4SVg_>VGBVn17n<?w;ye$S09u(G6jHT+YBnOI8m=3a8_uCOlbHp+*r`b{ye!5^|aY
zbj&KStX^UESr*^EltSH(FFJZAXMlofSR{;fbW@%3fOYiSAaU)Zx&=xryzCtD7cN6v
z5zCIIZvd_6aNd<CkMZO`$4U_UL)iXXTOR!Kz$)JEYkv!JrdHUxN?tOl=RRdYmUF4I
zTZ~7rqE|pd99`1W3Flh?4nXn0Xp!LCHPCT&wBPkVXPp<?4172i4*~njkmiJZne<gf
zm6XWTId?ma=}lT#!wC+)ty+xi{lTgF(D?vedSU5*7CKPk9bGTooc51qEC{=lfmhE-
z`YxBV!xlyOr^bKUII|0K8ETtl+d`Vub|BDCv{%~75K!_(uWuY<5sOH%QuoXo!3R1v
z1Le`q43YmR at 4%RP^*cQyoxPV?*Bk at cJ&T&LG>D0vRCvqF?e^gxz>Bt)GY7UziS~?7
zA{D?ESURlaOf at VAQWLLA$hIStG1CnP>9cj&-wAm5inM?3D)e&`;?#ofbNNcm9J(P7
z#;NZ;>G?jpB1W!$)OSg#G68ZIdMqK#du)S2Ni%bxm&%ggq4jcohKd+8lTVVZOC3xN
zr&J7};>2p%`6z@|yV0LliULx!r-Wh}>K_<J{m(3V6u53#{21(C{SGG8XN_o|d+$I>
zt6Zf3mH&URf!}`JP>qrvV2XU1L8NUK_Yq<0yTQ!g<md{~=0CK7{Iv#fYz#TA>#)vN
zXy at QGQ5WZiF$kEY7(OH${5$0qNLPaDBSokuT#$x+!I=+7W&cqkXapIa7^m2h)_9iR
zkE&SP>`)m}7W4|J{hXP3W!VcqJl$MSOWzh$U|fG~jPh@%Mzsq`y(yXhq#G8ZIP1BJ
z`GI)PhC2&w5N_za*VzXGO|-G)RW7(rf8EX`BpQNAkk#FCpfW0(^C8*g>MTMbKGRhF
z_4xZN!&HfN^cgL1SR-|Q9Hk`3XFDUhr!w!fq|w1vPG4v_Vez!BJi8Qx<s7m_RJC0z
zz;%DnM_$~W!(ik#KcE;sG!9}-JkP4NwWyxaMISKOmQap;r8;fo3FPkH3nu_bQ^ec4
zr;tVB)C^#mBCrp3(+G(XzoHhMXLGry{-}}<vhM$%TXPe9!_$RJOG}fU1TZdV0D6E3
z>DSFUqqY<0aJjZhhzmm;`#6N=EAW$D{YigiY+L#!L2hdYiM+S6PxZxcL)DwLLzdT<
z3%gZq+Bn%dGM3gD6dNv^fL_S6G`1wsZZZJJ$ClsSYn7JF%?D+YcD!JF@=v?uxfUux
zYc9S;gzk+Y*W#P5uP?ice8a9MP|U`wiV1wBR(&!g5uyFy`?dY?J`9={i;b`()!ctF
z?+T;Dy&Fu(lGZ`N6|GR67<b`VPH~bW%hieefCd<bSvvGlKJXsw)e>xIix*HD at 9@F1
zf}Vb?ZK8p8tksoE+v_?g)e9L;SQp=xn7V;V2{CADP+8FORlfPKdv{xQ9T$&5Z!Z<+
zjdxJ2YDIhkj|ABUS{Q*{3xTLq+G>AIWgy^@*rjNaSReg4BS at rszJWq+xs*p!|3N#0
z^mtW=a)XeV&2%R-_S;nsDF~G0M;wfKGm#lRAR0#K5&4w}(BUo%{kiU1(()+0KClX=
z)eg-U?rS^Qt^QZS-QD>Cm&VGchO_-8{sA!TkO#wVfTl&hx3V6?p*;VXHr{{r`d^EW
z6n=?m-lu|KG at yNipf(wmh44(!@8ZA93G)7L2U-zNsvvukjY}=%rwAVL^>0;wJ+go_
zr4zCgyQQ{OoVoM55{0pfis+J63N6?9zcP$OoM~i_2famX-kroy5I9socRK=%8)vY7
zhKWw{3=vgMmq at TR&%&e(LI{7*r8wh329Rcv%F5AzEc9V$H-)HC0um~8b;GFpMYaZa
zio}QVM6-#7R3DniA*MfUJ_v-VzCx)(D#TZ{6a2%JKt4j~k2_E6j7<HXz-=c-XN}pe
zA4LiEF&IgaY}3FuPM}EvAj at 8AA44@i(95j)-)-<oza%_5Ku)@>_`QG9DP)V4Wz;a*
zDC`3Jk%F8q8ZS0od=k-jsQuhi98W)|`jLZ}j7B1^H9FJs6&BkjuI?SO)!D(;)|wLy
zTg?&m6iC)m?S5l2&4x*|a?D>bK;2_J?I7?NsCJe7ufT^beL$sab5T+jz3ebaG`;D?
zU_-5(leUa&FJMunaV&oZXHJC*?UAGfn8A-JReD5aIC05iz(~xmnRmQ|g_B|w&|G{V
ztYeZ+q@;i8F;9}`<2NxE;L?|}kzD6YqMBkjYmV$qF509!5Xm>SM#Ci9?c5^i_tWl*
zI|L>0e>tY^y9hrjQB{RMs;Qqav(sUAvA^iA&*sC$9XY&PQ0IR<_Q?d2iCNgO*g=0K
z5|c#GO1?&Z1}jb at Lt(2~4>G36`0BtU|Dx83<A3zMF&GnjX*(=Bfos<jI>RM8C)7^I
z9ydALz^~VP&Pam=l;=o~S7$^PGWoiY*7ZO3Y>q#9wCve%cDF(N;_eHTQgj7V5=1bR
z_Y!GV6Q*KP8!3OVOQ`qHAqrJOIUgkh$?g6`Oyzy(`J)!$Nz{e;=`;_?{DZ|s4l>w1
z{zl-t0gb{w5*AIhX69CSYL8TyDtOa00#enG2RKwYf~K$y&OXC-NHtA0&zsWuEI<z@
zQ=#6pGmw+v>kaI&P%ZV%Wv55PIXA`-JRw2o0Y(D9$cKN?$tRa9$3?oh_PL_2;LfCT
z-&?DsJpRzgVw3^ID>_RU-);w at go2^BP0P+6?ZF9V^dM|QM@=w#uyq6)QNpqXQ^Cm9
zB&;lv?LBfMn?lACE&CPBoMU+IaUQ~Jzi6#l7glYRq~ns*J;f$w$eVW|EvB7Hs--yV
z2^cpP2R(mgYbcq4VFM-q=B{eROb5)%FmQrM$zAaLz{Q+zc)z*IL(b`x=#P;nEjLdP
z;3j$OC#9$0qZccrZO+x;;PAMesdwDO4r@?PQN~J;FFc?O$1=`^I)w)`B9m;(cfTZ%
zpi9kPw57Nhug6_sgGZ9%7wy4pnIuTu9cHKO+i`!dXIk1+>nrP<@`r5dHMuuOOjCFT
zXx+WEwFo6l&17Ue^{}OWMZ+4vIR?|pwmijzOOa=G6cR~J@(vr)yuZUqHc2jEi(zo<
zL at MWPQsitp)B|W~?2s0-n9<j-8U{*aE at +jPd$pA)hjawpmBS%MK=a^8yDItIJiFI7
z137;$I`emm#)uR_3(A`nTy4cQkt at b74<ITYSf3pXMl5dF)Et6eG&5!gI(aJfoXgSw
zv|5#tp at 9(!FESZqhg^L0+D#ileJ8JnDKI#Tpubwcw~;Ap`4>*(__e*XJW=WK1cgud
zJekesEo at d{Wrb%FIbwgh;7THLjEW~5Himz8#ORpoWb?74E{T?f6HZ|5;qxRjp_yZ%
zl5ihlb>`1pe^)HqUq9M;FFA}u2ZZYPUJ^DGrGtt02ek`2(*FhhT_ILQC^wMtKL&(Q
z<!^*r6PoN}VBFskZZL+5fWD@`74}BOJRKR__CDE$1h<!|J0=pXxDW?|p{{&$$tHg$
z;m9MJP<V5{w<ENdgI|OL2)8zqLkJbzd)KvD9R`r<-;ZTR$G1N at KnchcjOGdQq(Zsw
zs?V_|?}~bjIW!?T>R(hnAicdN&K#)Gf6i0;+SRCEEgiKF9ubRE%Tc~D at T+=mV+u%n
zmPIs at kUgyU49#RaxZ|B at Xt(PM`DcG+qqgh0io1~DwW>pP+_OD2tjIvdFB3#LgteB9
zX_X((<iN4TA`C^mRTZq4iMWyKzN<ks1-P9rwVb7HZVzBnBnD{^dSHh_Qkq7g^X2dl
zB9D?N3J+ at aTNA&KNih5?GvW2`;XT`dEf4Qzed^=ez5dI<*J^cC<9ak(Idp#-2|ZiH
z2J^`=MDh0knihv>L~=Cnu3(AqQv0s3&z`I?I`o=~HBT>$dOb=&_pRmzhCUkZydv(H
z1AGPv)LH!)(s?m-5J;*f7k`!=)f*G8yi0G0?^^3~rW%Buethw2tNl0|<2WJbPN%Lr
z5W5;7I3nyTypycb^@kp30Kb1<=gq8oZjuk1a;~`i9+%dw(8Sq!M>iZx05nyac-Nt#
zMLP3%_wC4Sdf@`zyMaSn*8`7l4ij*GV*E<&!_xRDqeFSGe{Eh)^4RsCeS%H&n!XaF
zD5#&#WU(y1CsP>4CYhoRDCI;!A`yU6?TE0YqU(#!*KEs--Ab(OdZK?Z_mmnW8!oJ3
z)ArLbz#7nP_pYiH0ajgk$}pb=j&C`vzOBHF<yxqB2QGt|4A=rV1~t4K+siRn#co<b
z0L-3XxV+l090IM;hMmbe`!iu!tOnT1$>gRG at 5?fDapt&?HC^+CRo~JONBf{I@=W{1
z099lY)f|+RM>0ehNKk(swzv+nYOgEM01sR_iL|@Is~XI5^1%_~M7E?mkT6H<2BYUM
zxR~Si%jNfSi-5p9NDeUDPi>25LO<jR%dOK`@wNN)89?!BSr;yh?}kd+)B85tt;V4c
z8Qtr_e(Wsdc#4FREH`;fjg5_Ss=L)t-;NxcB=6 at X6^)K$x7&XYNtv|cb|O09=nS29
zsW}4zZCA;Y_{k<0c5r^*@}_f~I~X);57wCORph+dhZCT{3wr_IR)^()2WZv;7BX?^
z<>90EA2ign>5TvxC33v4eG)#LL3!^@kx2nGJB(hF*tr{R;51i4 at v^^=LwcLq*{6#d
zC3 at n?oqrt(2+MzSZGh<BbSfq-K?H?3JQ?h-+7xWGLgj_8zQw?vSnYlpjQh<KeMIOv
zaNnt2N_^y$v|5Kx&?Y|R%kz7 at V3=xn^DhO?HQ8#HnQAS_PV|eJrSElb!KHtZtw)|~
z#!=i?$O#t(y+ul%x1;zjzLF0mK5r8{KB$Uu>`vN!zG;818ZUFu=ms9(!|^|xpsoaE
zPrB9RdnGj$mY`siJ^uo$hlCkj`}z{Y&9_?bT<?35&HFr3bFUzXEz|=~=<<49+x)XQ
z;h_NXDjB+{wnSSC*-pqt5eIW}ffnoY#i+|HYd7+~AgzO&gjBmp1?>YU#zo<YYAI1&
zU6(Wj+?Ril<A|mQCL-BTc&+2|D>rBdlH`u!jVNJx;0Bd`4zfdpL@<a9xtN4XLnCpu
z=h(H7Rc-dYW<o57Ty}+)oC+W1016|5x@}Z!GaY=wM#+&wF5ae<r^4Z-{n!Q}Lt;kj
z5$#*b{JDNY<e_@)J5}H&hSQ(v=HK-amr>UJXybqJQ(ON>pbf;W2GfFxUzxIa)|>y2
z!&|=TybX%ZecEG8MI=g_lC8p6I{8N)DQ4zBjXw%pdI1VWCz^g(y}v|1ohQ$ZDi7n3
z(KWXt(U at Gcwvyc%!x3_V at 8CmR;~yh<#n19cW;$1F<=phVsTDa~>HiOQ`>e<T(nEc_
z`AC1YV)dKNynJC7-sUn~=;nYNMtLwX3>F@>8oj{+^bl|_pB6z8_$!jLgPiO0M};GZ
zcU|z?DXJ=_`Th`Dv5nzm;<&4Ez2m78JT8`Y=;(FV6&%6691{CkO0-Ir68HeiZq?$l
zy@(hBaeQ0lVJ#*}JBzWoEW^=q+LHHJ<c5Ems6DWVPnZOezlsl_x}3iNE%OYKR=dNV
zAIfCMyjq_NB=$Kg>GIHu-fK9qt4R#Rijtisg!fajD219eVkMmd0_(u~uHyo%phqN_
zj`=ctgR4P^b&)=i4#fZM?v$e?XHizTZqh2^7Jx2r3XjbbL;)2UJtHEnSp+F}$02_r
zxsIwGoRclKxQ|C&!uNLa>i7a?Is^H|I2EZV=Q6UIvtcxea4z=7L%lBPYUb|TShxIK
z+RjRbRLb9b0%0d1eB%NcbROr(pcpI6F};}Qwu)~M91!-Lz)o$Aa#PR30bQ`t*-kwk
zLY9B?GE1sfIKI*KVl5|GD+_t(@WFo=7EY18PSs)5Ctm9iWebu^bhMD2pi+KplQSkA
zQH?tX>{)j&b}+)oq~gYCpRKR)CFg$lXB2x*=U`qJyW<%O-^a|(rwOJjnasyv7<X3J
z1&T$=VkDF*Bzj8_i5Yi3h5UF{w3J!1P{ucO1ab#S&^$rHYBfu8*wTGdt=E5IA^FBM
z*z~9Ejp0MYARB}%fLa<%vmW|wL%pI1vNYz6ChWO9_th at B{?XTnP`{;XrAkJ%itt4j
z`_(1r&)}W at ->(9N!?_EYAC;*7t^bt12EtKNQN5~<ppuijQCHW4vy}(2!(FI at f$Wq?
z0G%z_8MsSCMGq7D5;20#s{(&a<cc%KD8K1F#RAwp?Cc<-)>3CKO||(Ia{Cd(<V$`C
zvf&D(32^SO90?_{O|sf>uu*Fk7;a?<p==<u&&p()=6hkZ`bh=iGgbH!F172?)u%zx
zaE#`EGf=G#u0*j^*|_$gp|z at 2&c+OeiJE-KaXxwxu?LA8e-+-SAbNilH!Q=owwI$^
zNbQ}_R)JRK7z)T1dnjt`m)qrTHqCzuIJ44 at 3<?R4J;a4vP_x-)Jx~|2F)l4!l3KI%
z<fB3~Gf}tK9s+$TM$0eI?po9(H at L(>9&zGUh~4`bsL6puhiyRTgFvUbH`wrIi{%Rw
z!*a^F%rYu9wx+@|6l;ICZc5#KzP-m at 8O_qYI9o=J)(qylKIkcbMd8>rkTOEHa$73N
zPH}4EiZ(STxRRLn`Ich;TV}O at i><klk2V0XE}Ms9$68Cmdend2Sbgt+!xAqTMMl+n
z$O at VmnLvw@VNfUM?AV|n9(HZ9#M{>5b2rhoInxgp^#LkYZ#RF(!I}ng?TgvyYLlNB
z!}~*?lcxH+v2cOCl)vsT2|WET%O&igKZwU*qJxaYJHlSs6}~wFoUhDj%NktB_zMdC
zig^JYo=rbg{=8C25(xu at -olUj$d*7sTO-_XlwWzV>asORYRy%gJFa#auUCmrqMfop
z>7NGdPCUfb*>8U|7Wdal<Zztf)oCBT=}#aBfW}P}Z%Xz4qvv{lgUkD40EHZ;t$)MX
zsF9eq>_Zm74fQXPYJn~|Q*jQO<D~F at scRCUuD7N=&_!gu)DTfGnFIe6ibrGbQy+$T
zUje!-z)F0Kmpo$h?Ex$q`Ho^0BJ7Ue;Xu#s_?JNF#yfvZu#AUvM!_gz9p$3ykW&a^
zR{2|e9u`g2uhgt-nU|PWWOrlfa}q+cpeus+4 at UMd^hVC9$Fc`o{muR2QdjmjY)F*w
z5%!2q@^Dr{fl&Y(Q|SIC%|h}@2tP+M7+F*OjQR<obh?D8>ZZ?i(RHM1 at h+q1O&b?x
zSQAYIcCLRsRDU4+u=qa>XaC(C>>6 at gU0DSbK2bs5icY$O9pI2*4}6*UD<6-XBdn$m
z0We&_^+cjBz{^}B%R}i8!e;Ep92f#(IJ|L)ULp$Lr)_7rA`Lb^@)0nL5<(kp87RS}
zfH5{Q-rKRe{i~D<ig$=dg&7qUk)1 at 2oZPb=ashu1yq at h=|IXZ56N at c(8x2MU*Thw1
zjf6<Z$pg$J%^JY}TRIMvNg#hXYKeb2qwGfX+5KPj8*3ymnO%ozfF>FqK`UkeGsSD(
zS`}(ofu3+ffg)j{BDdfugfMqOjrdJUpnUQax2I=bb+)p--MyeeUAR}ca--c9W6sS>
z8WDd at U`teaM=Hq-;o^AK8@!X__j{BmqksE>=UAb%#;Cz|mGuP{SXB@#NnsE4QZ0IJ
zexT2h$=3*E<QtB9O1=w({6P456<fxAFh=^#nVyI%Wg3S$!ju-OS1KjOlC66VuvqV7
z-oC8M70;!BqAQYi_V=-Ob*#C78J8bnj_!ZBiqPxV*9F at o#9SyuV0W at x-puG*T+u)%
zvW%{oOnP1!CERw?-NPqEG<Vx_ALL2jhI<3JZpGsG-e?=x#|SnIlt!*l;c2DKWt~Jz
z(~|aXZXCQ$rtABL)G?Qb;alsq?+2EY)B1XmGA3T_6e1F{W4ZFj<jX-HJ+>AUZy$dH
z_zxnuI_bN!M5dHDCnX#Ka1T_br!1XZsr+2aXf at NHt#*z-{GO&%&x`npUQlr#nP;Q$
zBSr>~6+1ev^T-{sPXb?g5!f#qH=E{IC^;^Qu$Nr=QzPvP8O5>me`k#=|G48%!q%k6
z(9+CfS!!<i{X(3d5Qnc~uhN`Wd-Z=uJK}>s0rAutp&)zq+t`C3ZMe~~Uy(s^1gt<;
z8dSVEWd|A=0f+udJ%1|w$ZIiG;nqLfO{THLRIl(D=Hg;m2$Mo+bNor0Ot<zP)t=1R
zqEeyxXl4e~kcd%M^o+3=3f>UD!t4+qCd2AAK(J+OnFJ2xFxxu>h80-Qh+=>JZ3MxD
zB0K)RTLDmaW=yPsDL&rhEEGFPP%nT%nyVb_@<Uo;?lwl>aD{q&zP}k>tc~RYakW;u
zltd-eE|2_Gm60w*VMyOnD6+XGG<TXs22+qs<W=F;lxMICPyULfKY^kDEX{e5 at US=F
z=X<;fZzF>oB#l9T*i-{FsBM4GzUQ|;*tU9KZmrdoCQWh{^j6k7rQ0-FU^$fcBWcs(
z_@&Gtlp0uH$)@5;z>FwNaeFx9uf6M59!s-&(LqZ&H3(h_qjCX2udTI#0|@tRQlw%_
zbW07Al$ffs+7dr-uJPxwS6bw at Fh&Bf_=uTF>I0rn{2b>qG<VW8w?u!x$kJU!SliAb
za>w{&6hq8S$$eyD(@==!7Ic)G&f;NVo`by}t)U2clx)x^aI}E6o1O-d21sf-g%Q+>
zD10v+&yMbw(8+KvS#}W}=SLb#=4U66WFSO)Q`~spd~aJ7ti+6eh7Cx1+t+xMaFThW
z&#rcd8Ro#Q%h!v2Ha&lwQ-?^LwQNq>C}yiI9AHNE>d;cEeN>vOHDVG%@ez)1#^ia4
z6T!>aY<FJkr2Fvz+U1=|NCTbcqo2m*yT7U+AsN`#Jr=Zm|3CmjAXAMJYqyz7MltZ`
z4c#O#j-u5xw48wR?BY~iP3f-Va?6OthGHZmde2k at r{mkfuCjlDNV&q6=NwG at W-MaT
z8bw~GoVw_#by3^@_^%kA;qF%l)xT_6V*{<mMSXqZL}|g~A`Sx at PCJk*7+dcqHMP?X
zLgr{N)j5addsFWy*-&Cj^5FxdXoZE0a)SLMwj!$fK10*bz=CP+)r8 at _pM1R9Ze?>4
zdxjcm<noPq+c1BQoE3dyk7Fb#kZT^K3CL72JhS?+rm|#5;zd*2I|~5}tpLo8W!-ti
z{V2HTs_6_uQ+_jQP-K=Yr;=O(-ZzCGxtvF%TeV}QinKGuCc96HKx7?CUH3!K$Gj$r
z4JYeuWhd<<D$SZiua7XOivRkaP^RxN%K;&mBEslhEdqb=cEcIsl5Okx&;9qSyz!uD
zteu)EMdbjf+`*T44gv9oaPRmIXygw4kbZ}pTHY3UoWI#J(CTxg!oXSfaXFu`jmEEi
z at l!t06%cmrs&jg?wBdPZe;I|E-;ZP)TwbsE at V-sGo*mbleHra}hwfK&i>`5OzbBEA
zS)o<~z~+DP4kZLU?dFD|J at ZThk?mt_A$xC?|Fays=3sKO&J`K+kGQu|MCigqw{9m?
zUCd5xTiR)VsX_!BO7qma!SBrJ<EFUy_MWeYZAIC<?_enyv~->6)0fBUx_R?3<YwZ)
z5R@^@L9ALzMJrxnR?DB}x_oDUry&!6^MQq at 4B~&54>x-VLE(Yy*2E>8q&dgc=*@%0
zDg8bhb<gC?FF}?|s<pqnhgg$57&a*j=C9wf8lpDfZOkSc83P+xM&_n%jHor`ePIt7
zJrN&!*1Ok)5{i}qL7xim%bPjT6=kT~>Vj;RF(k9R`-u6i6Vwg4-k at DC4%XgM-MIFW
z*C>DAEvM=}9b*0_pr~|drZH{=r}FYLc%%NpmM+2{nkGCv1Qq2W_`G{rt?yVJX+JR`
zC{RnRu2y`_^oPUBCv8GC(Jo)GVaj*-4aaqzS>wzC)R;}AUtd`ADPKA|ejNg{7+5FJ
z8OjBV4?NT!Z at +p<(4Z4*d*Z{6ZhArdfIfdhMVMjbOkgYt_6*YB(k)C{FT3{u!lE at H
zpt6{!!Fq*UA~JxkQ!)=Jn-?)u-*fRQ at M%mCcq^<lLxS$o7!>|>!WtYsGd{X*?N=po
zXhJh!mSLHA<s0%|i&K-t3c+)fT at W<U;i<tjp-#pXDD(@p<aCqG+{@CJ$V<URc at 2M`
zpI|9r^C)Z4(9+=>6)a5lcw+){9J%s6d=?NVqmlEQ&odOh1meLKK?CI$FerqZVwL;j
zh3SP$rD7k;-F4|vxJ0`0-!1~vv&QR09UVoIS;`jT_q*E5skr at D6K*(MH>gj6f9}9T
z_yzv$X7ZQZGUuc^KT-S!zcnGwSuB4d&o|1re8*j&*9 at Xdanjy!{_?ScrrZSSh+Ei?
zP#rn8+_%rUdb=@@9S6e$GuP5yLF*O5A<qWBjQya4uXg_-`5U`hdzG<+M3MH%JDH<*
zBMa-dy#1|T8Ya#-@)E6YXM|n{o`_7%f%IKHO9XgPm#!g-q-e4eJM&ssbF_bt6pRwi
zEd*D$=ECGEw+&F?*l-3eIE?9$VZ=yoIb)@&^tf;1)$TN~gC*)dtZzc#^M7c>!*gVG
z_>-5B=#c3$pJ-K}9Mp at Xo6`#I^eW@%+b7=*Ex^s^h;<Eplv1|G^^J3!?i2=mJbDr!
zKi-XqWX#v+ST-m`6T}uDrGbC28T;HA_PK(VarMr4cz2rd{<MI3;R`a&YowabJxnx#
z4yFlYR_&TPYn0ES|0D%=|7xV&@Fj_qqg>UmQJw{b`*VTwlN1~PN)KMR>GmD{`N;O|
z>+$CQXMd?<lp3QHr)fw5-kEQikeFjn?p5x-o7^yy at Y!G7KJ$ZL%!q%1+k%d*4S}3g
zZZPLHgNI1voHgO56Src(Vpy@;ngQf_2ss{k at rN8APm3+NrxVp@=7 at 7u_b6$u%aE`<
zmRfYQZjAS$p>6t9z%%X->a3d<O9m%%e>KS^J$Knv0Dq^2C&zqAy3!`cajf3_klyS_
z29BCuiwfO|FQDy^z_Nem^&z6VbUw#F5mS#UV6qQk>UST~QL|Gdw%ohk%Y%U0N>v9G
z5DCba+dVKRuQdO3+3&-S^(*WDdulVhKbpXUZ=k)DUhvMHM2^3T0`5P%<@C#s?d35z
z00YJ%_^4k}=L_d7q#rXB-u$r(j~L!`L<Pl})yCKeAOsQVBbk50`^ZRR+;OeIHZgC(
zy5zNLWdJtFR&=L?961sISba#{zr;G`5A=5hI=Q at MAq*Pq+IlA8jI^>L=;D7%hEGI^
zx|kTaeO&8$PAztbpw?WsrO1msk7w_3^dF7{lb%HyR~C(v^6EA)PSM>6gB+HqX1F2F
zR7}OC!MpUX;Dmp5oL75kQs0$JPXpI9!-%i}NlLarJ!p&M8RfC$q#vCAKGlNC24g}~
zs}TUwA<E8i<UL;iD}APstUpgXS;_DZ0cBC=C>&kMRncB#t2&XOL)$}Jz2ft8bmqBY
zF}AfQ1G6mruYE>JM7sO)i92NA-IAezz-zVLTXj<iI`x0}_t8FKQW6Sy at e2y4hnQF&
zK44S28H2GIjFvS21y$_oa;RKXFl(TrvVvgNp+3zsthtcZ?MZwPcAcr)+drb8h(Hza
zQj8=9cEp9{iV at T?5^P7;4>)PSBiZYq>*Kf&aamJ<=q3iNK38U&)EY+OY1bxQum5zG
zC;bQE#Atte8a4K*Yoi9)0l4IQOz`Ic{y$Q(2*(L>?b8f&lsQFx5UTQ4C^ss?^N3A}
z#A7pdjgqjmH{;SBtYAZvy_?(DMxVpIfFG9e)RGxg>$+a^G}679Psti!4=<~Pyfh#q
zvYe9GfI0Br`~6l&itG1Cn_nO1XwBu{`6Z_&+sS|WSA_#6?W=?}zF?fl(XIrPa;m4K
z<aeX4P0jWOjMs1?W7CxZxE4ClAGh_j5wT0)gU6v%owoxRjWp^PXv-glH4=gciF7Te
z4%*zYA$V{zI`d4jdAuDjwy9Ms3HHz8TE8t)O^X{B9Vp_Bdf3SvXAf>P67Uk=#}5|z
z2<(5{^ggAOqUdWlh}BeGX1gA23%jt~RX43`-_9l3=}zJ}S&*q|xE#I^6|0GGhjj$P
z>GTCHsA%Kqiua_{WbKdu4*8Q^s1BYLSNI-)WA2n6aELnvC$qiTdDvKE3>@Zegn{Hd
z>R&(Npp(g?NLXm1-fReDX*=P$ycrA~WW9fy%XDCP;>LJLQji*}WGBgmla%|<c}XB;
z6 at pnxtJC8+ig{0qo$*2-QJ4nfQtVFK<|PmU at uf@^WN16kzOH?lBaa<qQSr1ht4O{%
zNYGs^Xp+(3BPQG;AXA|CbRTP^{%)277vy2+9-vns=8T(!lO at a16VwheWTEIII{AON
zD43I_{)s&T=wTqV(#H+|Kg<8RgEU*U4q)h%ha#PXLf)WY at zR|4c^jwG1qrZ9)162$
zwEV6(j9w$F7=!g}O?Q++3TZ}g$-NH6pDHg&Z1M3P8NY|f$AYrt{Tm6RqAiNAc&m?Z
z+#01rmy7Z=m%1Tm3s~OPA#UE?nJ<4?`nJoKxL__tVoN*nF)B7B|BQl(PJ(Og#-N{E
zeo#1ho|=z65*u(=(c{kr5@;njOSlk{flxLffz`Vn7(gCsO#X&Bq^&)#(K$CUW at Th+
zx9-dXQN><l`)xF$cw*#JPP3|V4n#BLA?4%lbn*Azz-l^uP9aBG?d*2VIpcrNDWwKx
z?ljU$sw0dR2?f2_(_WwNjwBq!d{2h&HAWaD>DXwvabPSt|6ipUra3kb5g-<zSZ$;g
z;YzzK6cZnX-=BIRsZKh|k`YAnYI?3SX4Fu|xPAg^V0j26_hvs9r2)o>#=%YIg3*W~
z{~5+~M736q56vWeC at 06_u?c^I*6EkxUzd=Zyc>G4`H)szK+VFp`DEz1tK<jU-W at Ii
zsN5C^0;o!lbwGwm>cCl`vFN^d`97^(D8F#cXId5-mjufyxWpp*yVxY?Ai}1CNOj-t
zv%21i`a~zEa*@;&ogilbk*W%15?WWS!K`IxbOO#kW^_MM^=^rp4bOilS)3<Rl+`~Y
z0ORZ>)H$?nba2}sbS5=0SCt`QQnjng1Wq{&s;S;M!&Ne%qBTeO9h;4_vTJsW*zPzR
z_uvz-Dtd-Vr4#W?db<QB at x9XUx#aII1$7;L!KQW=`{5M4H4O=_(({7k2a??5G!<)5
z7CAK98&cx2kBn<RT8w{u|4>jBf~4}{VbS<v3~}rq%skSH?9>{pxGwB at Pv~<x$Cnhs
zdiryNUIExdn+&3sUSV$R+}s|ycd1Wx-UvvcxjKMl7Y$a!hlI2SxkB8jQGkVDb;9hd
z`SNB~Uo4DMJ1ma1EGw$ejKk6yvm^A|qn#y^XMNlW3?65$rk#KK*M<uU$`0Sjk+j<M
z|8vVAZdq+EOkwO1{W}$h_ at 3})@eJ^l6qtW>gs3&L;GlHU8HA|i2TtE>!*!8kAhgWr
zzvOG`Suy@@=nTVkMsC%8E|+Xh%nNVIN%Ob3gwEc!(761Tgc6~u)gXOS_3|#_aZQ2~
zBUU8Vhu1K32orzZY=^;4%z+eX;`6Jc at e6|k#-E!C3dbbO4;%lNRuU7kHJA>q<Z5~C
zjO-GFs-nFr$R at 4Q!bKWM^q?i()>A<a5T;CAdLhiPY7E*Ch_sNYWWi)otHJ6xc(JvC
zZCOVWU+qe0!>rvNXGFegoJfLjyi3Y_K&sL&|3{o;iuHg0sMo0`DF#SP<2eCt*vSds
zUJ<K*f~#1ciLeZZFP#ku50}w(f^!IXjML%Td=Ig$ASz*RU1VwM=35Z-u~#5?N^X1{
z_7PS;(e{<5Zx5ZQ=_(5u5Q$p7bg<kBMTyb?cDYRe+^gBZ(DOHxK}H%kXsnA5c-?zl
zG()MCi0OYvEOT|AyUkn=r?`|h8UN7U(wg)g;9fH6{oWuxK!~KV`6n_2|A*@YiG at pU
z=Bcirh=j~W^`zB5I<cf_Wa=r{h_&Vg*}h-Nvhgu81+d{Y4uKag-&UX9AO6Ml-ealP
zy4JwCEz(g_B+-3Hc(MJb7m+?-ERq<qv*plojYfZ#uRj=T>=oT%rRH<>f)z at A`@GK?
zi at k1e2G$p>$4V>`J4zpe>7+o-FSN<(QqEAXoJlf_Ans5=$vU4NN4WhVtyre_Y6Y+j
z^oOAzq~)QvhFb?-U~a+i`Sy1$)2s{#4mtbb=+Er+X)yxfU7JqR0>Aa4$UaYX(0Z}n
zQ?P%wBnJ#a_;}^1N&rga0-HYH4z6CUM<&56FX>70Q>X|4fP(HX>9Pgij!q!Zav04H
z`Ii^vvECuM8}hwDu}w#kFtH_yGv$v~<-bL0*kM%26<mEUd(ORv!6!M$I@^uo{lyhq
z&53dY2lSkRN)m1+Kr8#d7qRVOypgIVVK;xUAEj1>J<PrYYU}u0g;Xp$WV&Jh>gFL7
z+*V=efF#^Lm35b&UYNoJ*b&+cx^lyBP(*I(n at 3-Fl+wKRdGnrQKxCbAx_X)NMj!Mg
zjNLHJZ%#m%Nwq8??l_}4Ejn7uT~MU-PsbI8W^t#xEEIay=e0_17;81=YrGV@!UuoT
za;f#R27=|?!^xQevV)G3<(oBaHoXUJdSeQXzZic6mxwvwVY3jBL_WT(j>gY<^sP{*
z#%#V^+7!u=Qc_e8)?!8OOsmd|O$cg1LnuCjtlc%%M4jJNG}91lCs5qLctNq!WqF_H
zMqmD^2U)*)DUl<wdFu2o9+5HDc*=ioz+_^$E-JH>Bp8U~ukiw<dqLbU_3q at cu4Q96
zmCFDqP-nWx%T6BxsS!j-3*49>4R1kAjPgK99VsV^x#GiiueDV3x61ME=*QGPZbhz}
zyM0tN^zXU#nRM>ZM3~#GbCDyO)EyU2b8b(ui!3ue&G^I!mqiJuEvLZWY%_mO4c=+&
zIGhTyZlXKV<_>4Ij(UgRzjwXb{>|ekN}^=V4PCp;X*2JO8F=FAA+VKatpx6oss^8x
zSbI11PkcCRwg#v6;*o#xJFX4Ve%B2s9DuIMO46R!8XHb>lt(&-ybhb~3oLY)Q2EBr
zna#s<N_jD1&(_*~F#e~QYJ7kC2CYBd`&dsAcRu1o7VoIHy6<^{q-=Xey+d?SD60;S
z1%<!CPC8iz`_8n?lB_ZR%M(}##=40oo*XZyWcCSvgfL%>45REN=>zVxlv8e-V-w^O
zAEegqd1u$nuI<t|@?`XFiqFMvKta7j0P3C`#K)Qa`#(tC6ed|x;TnJON1H48RM|N;
z8PK>6PAq==hhpryp0M>DSmnB)P{=U}4s1h1J*IbMW|G;^U1 at E?Xll_$Ay>qxG!KXz
z)j?@x3H-m`GDe}G4j_ADvgQTa#Qb9t#v9R$jdYUF5=BmIn779>lo+~)$WS!bkA+>j
zaj4~n7lRK?^jw~F366i;rk>i{;EO>l7m(gP^k!p-{I-Byi;9@`;_LW!Be;$Q<E%w$
z!3n7u5`ku5OJkuO%o*>ys)cLwc(oy+43I!%P~oIL+&|`TPk|XSY%Jr>w8VqlXXe9*
z!<=w5%8?6Wf;iVP;7-eF{8V3lXJ(vy<jg{YE$|}nbeX84TJC?V1{(LgI62Q&LyABx
zzJUqm1l)c%^8_K;f at D4(IEzQqq+9BoSDrI!@bxWl4|m_hfRbec;6Mt6eKAVKiW<9K
zbx=jGD at w+yWBLj`(qf*V3h9bNzzX>ER`hVtd3?1f0Q*-Oyf{8 at q2ZJ?Y5OHxlKloH
zm1<dz-E|hkt`&bATo8>>%0h#dN0p#Oly;#EHt2WwJiGHHjJZm(r~lwwWAT*u$L<V4
z at SgbbS=mMnve|B(x~xA6mL_Hd3Nj_EHm|gy=}hdCs-4C$*x%ubc=CT@@8N8tA%lG+
z&FEf3UhAA`M)2?$@1L=E64xjM#!?{_*ZgfM at K^*V8mWI}%B9RIjJ7+lf39wECupcY
z?VaeiJh8`>CPjWE&iq$jtt2Q&jK$-{Yw~8aN}JtjeGr&0n`K6SSLD!E1yWf|J5Y{F
z#Xzh&NroZD2^m2HIIR4!*9 at Xg{`mbUwb&9z>YwuHJQWwogP)WN$+@@NzuE7OA0VQY
zgz4>>0f~Q4EYu!Xo6^&%K}U0xHI`P&5SFvlTD$Yh!u$V>hBZpTTfddAGC$A{u0$8T
zXZW4CiEPT~CI<ESeQ!O_Rtefxe2qMr9`F;mt#L7sOo=SkzO-}x*egdn()_5$E6u+T
zT~|uB<Hi#liFOOW&OO0tb~#PwJ1h#U8e{a#s#1UCZaw}xyF4)kUFJ%8R=a-dSLC;z
zpXw(E4+PVQbqoTthncBLGq5Bw3<@SEgJ+IWbVUP}rB at Tad+&?HC$v~SR!fFpt;N9N
z)xDv#q97FQ$;MrmQ7?SrIk#>AEwXHzfgi+~Note7iqX!C&ipSEBNy*+>Q(4|7tFrI
zl2Ct$b3R5+Xq}e-#Dv(bD%C#)Wf6qt*1YFmAScVtA%_7V^(yK$7J&uMP;ev}HbG_5
z%4wzhB1KI{u$se;UOzW8<$cJ8%}5w(UQ48|X)ch<gh~I+x;q%_MrQ@&?R9+ at LMqGh
z1PH_?Tyfha>uXg%BQR0~rS@}R$7!1J1<8M($RQD}`XtrVzsDm-MacB+P*7pGi<tr`
zkthe7TBw_#Fm+ea8&FrX_>3!1fRvfDslu(r*IQ~80^PqJ0||qI!S8($7-%<SZ7V?U
zP>9Y+xou##)KLLP3VJ`;-L*|U*t&^*8!pr1TnIhn00hqeK&6D>`j{YLZOnjG&dPsV
zL#!$gw40*r`0hB{sfgr(Njn|xG#yFv at LS+U7C3P|(crsE)rgh)6R14%_>3gnl>`AD
zZ+-{`pmL(1H|QOUx9XbEwE<v92~&a9G?O$Av(-l%5TfE}W~r#@DFORBvPMzB<acK-
z2GInV0|hX9uo0cwF~5z6F!5$7dftEBr)wtKY*X1vOfqXW=12E3D+JYEyz}B-(ZB4E
zPJy8p4xGAyHTaIyv-6lBOiNiirzxg5?9%74<ie{YOw;XxXkk9}0kAI0j6guXHl!}?
z>MES;L6+;8D*#5SFPyWOkE^3nhe#MB{&d1X0{nMmT?8yA0g-AEZ-vmXp^|^$CkmI|
z0N^%KalKKCRF3}L)P33~pSBHaCM3?Yk^tgZjc-XFu at 1Sm8`lN%4<Y}^CbgODcU#5z
z(l_2i{8%d5dfA+Jr_%n24SbKB8aXE|y_d^#xWr!MdJ^n4Zt~&8LQDS^GxJ#*z2(cc
zM3<qe;vHWSG)6Ky*Z|J(l4gIPe6M}TDW~NP(n$nFo>)swKtFn37gdV at HpONW;1>H^
zo9ihV#lov#!%KptVGhJ7S1oOX>~V-P(4>{dw}JY~>9nW1&LImSy!prNrKxz2r6kVk
zV{k2HzV#GYVPaS<n55ZnU=AUN*)b0>pIxy0c0-C~+Rgrsnn at bo8K-}I*F{1Y!eww)
z84hvL3vY8U%;Ye_tV57PB7LxznEfl1=2K{=`lSonz=9Jv49J at DgEm!yIr3&LGI-pR
zB3yMfgv)}g_h^Z0X#-7Tq}x(RJM*jD<12i6<D7r!A!g={6gUhVZ5Dqu_$pH01cHgo
zef%Tv at CQ>X5~sRl>ac%o)oM7dZ5G5c0Oc%dAdBKze2^JCmq%KB25q4$qG^`A-O?}1
zN*&s_<W8jb3BE^fibY5SLBP6N)dELpF}=ajkirj2d{Eulsc?OSRh=-HzGY<oE$?2&
zwR-F!H12&o!GYvjFQE+C)cVAvg4akcVj*<q1yc#*hq#k_J%@ilNCbrag{+W;XH!QO
za--wAc22~a(I?aR;OnrO&rO*Led|uefhoI`9Z_D!mFZez+o5ZkB9<7xw4Oyw`2v%?
z-q-R&zdl|s5^o3kJ45r8 at aeK5QbL_K_MNBdJfF<&|FF at n6%&}8H0v&{=?%#}b`1ps
zt=!!!#4e}tVbXsOw~AE5stqy{&JY at TeD|DM&!)Tf<-zF!W)!KQjp#}-9<GNujSty&
zAx_+%K1f`u`H=<f35&;G at -KUS6{m4lrUcWD!rmeYKbZmDY^tYlISUg9ESdj#cV4Cm
zhxw<a8&p#^Wnk09uX|&+ql2CTk)z5{Yb7XiPW9!tI~RXoa|k0jiDK<b%bhBhGZH&M
zTbt?OGu?*lMnAjEGXVeBKp=x-kf|^<(3GVX9(X9CQ8)<3069)LD6WO8n0mI*l|+QH
zY7X#%!n<k-8_H4e?&#qO$D8n2XSy?}ZH}@0uz(u)RGw&YwmAe at Fq4^^Op=h2Lz1i6
zTikVEUZsB+s0oAe7sO-W$BuEwqW15`T~!{&4z8NH{p2}cxnPI_$TzaF0{%lFo{IDt
zD1dFgeds1{-zsw4WjcWkbxNLL)q~sBipt-$Sy7^cI87QXpY^?8u==-$&-&j$tNmp0
z7HctCoq2{MYwa<cKc2 at kSegTuYz8buRqn2L(6xUP{(_UtU*124!V at ATl?7-FlD0fM
z?pcI<=hiA at vNfk^(7wTL;jOS!m<!|WQ8?*fH|%6STSc;k{BMxZ#w_>NJ9?wD%)9p~
zg-r1D!_Ff2d$<`5c@@WnF(2*CSi$zV5*w2RCu at TT{ZS!zeAv?Buq8bWUdzY?lljZ{
zD@}iJ6m9YzoN`8Hqown4X=p(xt#qdem!qS3!k~8!WasEzC;ifM-phU+vGJUTk?91M
zNv!l?km2M|ivDDg4pUnfEoI-r at 0sD0rUJ4SAs+SM>Rzo at En8$YMW*=%E!*=2dCF0@
z3#zD*K9A(~E2@!)^Qs6ihJdhS>_9)KLG6DwEkd}4rLBMIJ%`cxNiKUT7CJ3oFZ!Q0
zxd;DbunVm8XT7G1;(I8;Jh!HyXnC9RN5k(O=WHQifi6t^fhn>5bX>tt>E&v4Ccylx
zk{ykJs=T?d_YSg-l26|bCW?iUP9`_ at +P*t9U9uZd{h(it`eU at nnG<oLARkZlZIypz
zS|gV>dF!^xUWqMlY)F6>RbP}3&MaR}@5^q at Cl_FId)RGU*MQq(lnF26C!My%&v3k|
z7Rgnl?%~w(q%B_Wk0&M$kcz+h1+zE+{w(r%M8RQ8D>wXyU&!KDg1U23u<r9FB0&}7
zY>&YMtWWE*X+ChH#5|cPP8l9 at r3rr_nf)_Akd8f&2%jSs$yG>NcI)RKs*YL&z!5&_
zTsO)=;~GbxLOqyvFr83Sz}JJ6P_-9Snrn(jMDzj*cyVNE)Zz4>+g|SMG75uRgkhq-
z_;rBLz;lQPK(2(Nz7U-zfU8$_ at 2{ADK-sG9CICJL4|Dz@!9fTMR{F?zRZV}tJAc{q
zNve2laL`2z3E}sCszK9fqS%ZlMPC>wWiVJ;QPC+6I5<x(m2}yn8k%*(bK3%_!PK5z
z*0B%!tqJ?90iNnX>j~aS%LTQVLz!<^=4-z<=j2~h+Lei&he#!7l*NaCZW+~DLirzN
zGyo-p&_S8xGgSwI86PaxxdDHM#+F7vp=L<=J{G#j4v34V7Z&iU^4K%5bITV<@RFQ|
zDN|v}-}<}VHnzxlbxh${p4#@Qa0qXVR}BiTy!#5#d}Q{W-rGkcdT#-09)|Nm*5?*N
zDv9$HYmQ00<X{&>A4bwd;8Y2X|01K0hXQhOT`PEdvCHV=n!L8lB7=X7)%}L|dw*1a
zRWhGPaiTb}&E0_w69mo}xD~_9-*J`Qc(kGknO8NAdZkgcfy{{X!zymv3er#q&%o_Z
zYGr-0q_*4uxWq2vn7Gocl7~@u_P{UqrhCuVgwvwQ8tYlIcCWnBkCbA+{bMBCXL6Vb
zU=euKFI&BtDZ1iuM-hL<rmU*2c~C5hJ-qp6b-Ia^N21=?YI}N>KO^!;UUZ%V>AOb%
za^fde0d}sqfyzE(&9Qc<`iAt~QO|GCp6(cMjl!xcCzN38&BkYlG4gxHp#Z0a_??N`
zsLb*~@t)<jcv)Y#RCoi(ZqznV2-?M*!h;#w;Mm#b!oMUz=u&@%u`S*6)2`x3u#A+r
zW|?;71mO7~e=79!FR1KUKr)qxy1*l^la{0h<bMV(Q3p%$$P<?Rze8784<c`_RK`b7
zEj`F7ppc?s;JWK8?6~_3*$VXtEzjt&Z1eUUuc}&MPOsWQU~c9OjCbt+3S;DhDksJt
zG2Hdk`*v7JcYS|DWA40Sd8WGGa>VqDdPvSw(d`+)6ODvbuqq_eMNKVZzxG(7Or(`=
z7M)ybZdJV?)6oxtC?7tzL$<S0*<()}!w7(4kFz^;ZOP~=eRt*vjLNcEi4i%zsGyoy
zFWXDQ(ZNUj;ve$bg$&3(e#1vS#^M}{oOLTrqY#@h<PCrSl{jyTjk^>HjD$Qq=V at 4U
z`8|NE7wgB<B)D{JBl4GrW!dhWdgSEfipKgcEyPprVd1<^>RE98R;umX83q??y`32A
zf2bO(A at Jhj>q4b*=GRYZ7n0=oH7{yQaXx`Rosx36WCx#JJr|VQz3NPR1`!ML$E0-d
zN5!<|5e0wbTf&Ini#P(8mvQI1Z?j$ID9_WZp}#GPr;m6&XG#ea(H~TI=cXi{?^)Fq
zh34scE*{_r)JE)Do7V?W3iV4+*GbaE<Bt4PwXf{<7XM{mt$*2#>K{`ti{t<^8SYbb
zmE+<u;s*`iHPc-t7NB8H*=1Fm5{@r{Ds>z9f)#&UazT#;xx`HqNy-On!|P(qG##5m
zVJP1mL?Rr!#3sPCt>-BGyqq`wZSM_OxvadE){5!Vg>utB^ge at 7VZ5NJ0|Do9b%_Vh
zr90Npu&UGyq9>7?wZ1|ynVk~Vgq$Mm$@`lmnG1=gFR`P94=R9P>b(LCEbOJBCy+?1
zmoa}T2tYXDbRqXUddMQFeg^rNozQ*C2>?$SU2P@~>Q9A}1(=gJoSWa0l8Bi!Kac4e
zR6|P9O#bE+dd6QHi8z)bBiT<gGxF>vP{9jd=gSpXSJCvhWddKtCS0wV6^A~jMW}Y8
zcu8!$ox;Hw2*F56)~jzhAYj<pUqyG0&^dpKCxs9fIXe7~+TBhWf=GL7gvAb0Q<F(m
zZ>PQ_vo0!jUj=4=zcuCtM!FfzXkBdday#v(!~?zb%u$x)mAC~Fali-zso|=0M7E0(
zUMG#Em0z^UM0Ce-bM=(iWL7`<J7w9GQCMtZDow4Cr7hXrH)@Ou45tw~GOsp0IM#mx
za5;Mp>+Ri at 0NQhqY(}90?|dKz2+ci0I<2!HFDAK)_*rpX&d0w&WT at veOhq<fkfy(b
z60y{1KWzYw{J4q#469dkeJrUO99eReuEZxs+?8as0HMsUT-822CNnr48X*FPa4+$v
zmvTn;OdRj4(mo^&yvhj1prcNpsU3fthw(k4P|B3a!T6n&=(NWzMPKQwqoOL4gLc!I
zN4z-v4~we*#XnzCyN%kaOK++Be|jID#Cl-!Fl~Bi?wr$&Z_+O1&y8Bl*I}nr+1=NP
z6_|HJi6d^7R}T^~0aGKc-T^$^qnue7>er%JyjOK$X~uvb0k$P!YWvF1`PY9HOH6>J
ze<9UOQq0_C2k>^c&DNO4okrYB=Ar<v(DCvKTDM7+r at J3qe?OPaniw_ehrb9o?Dr at 6
z;;jl`+Q{$)&9>2<o=W$#iBijp_De6<&Ei;dmuei0W<<LoIi{yvx_p|q`De<!`>PI(
zMRJ~X+jwow$J*l3sRJrakd%K?53dKCBxQ?cmxfAY8p?%zxMHpTY4aoOL3l((5}v;-
zJmXM;2}PoCV92JBbN#1^)0?!n#w=Y|Vi~bx6r$Cw2?njMmvS-4beG4iRsQCw+J~w8
z0)6>IiZW{7u{%V4^&xxRA>~@<7x2&p>h*83p&u#Y3<H-Xcfo=_b~%4j73t_TElCa3
z!JSqqT3=1HN7bKJ>n5#vHfwG^xXI_`aWK%on;Qp1atOsfxxD}dK>EM#69Q at hG48C6
zdyiBQ1it#eYv=lyYoz3yRjPDKeDw|WrB84g!yl2x*GMClzkus@^kk?b{dBEO&81(x
zjjN8}?ZfP5931H)C49PlN_Ikj5RBY-%0}NbaH9L|GCc*t7sY{ndT>5o at u?0XD(0FO
zo|oJ66S6XtFy5$Uva%2z^FvKEtd)qq)Zx%IzM0omlf>OkJ%c(<?2r`NB^;Di!Kqb$
z9s<OGD538OLr(Z5u=g(t^MiE+I`}|>-s=j51^;CL7%wPBQ%NoJBFQIzQwOMbKaw-r
zcHAHfrvt(-`L6E!U_{$-{lgV!4JgZX=S`}i9h+zsxItmU7U~(IvM9jYWqSeD673%p
zg=nuu6vz&2kzN0eBz7YOm7dZJ)!{_D2-Z7ofDi4^fs^*Cs`4;IQ7iTf>Vv7bE3(>Y
zt<#r6aT1?!oDCA$*^5ViL<Zb-V4TLBFwOcdn@=uKIXl`DD7Rr5?wzsj!r8`XPy!%a
zpC%v at v<$ySNNbP(@+62}CL{|%#xLcF+h_6wwA-(JSAl!bKGT)<d)_T%+E*h at yAySL
ztcTd|X7rgooKZr}qKvD**XLAGRt$Q_M#yo*yQ9y#)(g3~^YZb3+iy_5ydaY0nZy`f
zkFP$CYk?jVvDF2wGl5Cn_pcB5Z;XQ}c>RQ~5?2y(skn=Wvjs^H`KO%1_7=5qFfqo#
zVq at bne!i}~n|8VZ#uql_-~Rzx>h%{B)_KTCJ#XBVwj#X1Ob{uv{w374PU$38C3Qg&
zWOzZjkoTn6TM$}*^~@}H-GF4ch`K;_lG}FD6`JQcVK`_EgRzB^Eb0EXOK#lHDJYfO
z^0f{_;q3lQ$W{m#AUBHd#pz1~meD|hdGi3?cUK36 at v3EoxKVcfVy7xJ%xEQ~&k2?T
zwQyS}CTpAFyo0o35RVV3$9FPVAr%c~?578lBbgxDq9{Ut5y-TX%z+{>Rsk}Y?mq7<
z$S7b-i9z<QlzTqiJIf}?sMFWIN~><)-QQt0EHt4d{vAjb9J^nL8p(cTe8xA&?cnK<
z%lD?=i}i7=?mOH2Po9#hSZZD1)B<2Y5ju%wV3kQ%Egb060vW(gNCFZj7)qaN`*aRV
zOV9V59b#{Pd6u7UJ$w8U{NKk)*{AzI0>C!NvA#+vfsT2b&H-H`Uw$wORoPJrzA6S;
zSDPjObCkQ;@e61F at 36E~Q4mtmYA}<nw?|5V1{N##!_p>T$XO#x2T(wab-7>Q6Kw_^
zY*$YbPK%5$6NS|pW~I4#NyL6-^tvxLG at Qd1E(4~2kO;^}>yWK4UvsnyaC^lIdSr_t
z!fwFD91L_4id~tTU*Va5`WWe#DKmdlp3_1lHL7bhtjpCbi6}6Dsc37%lpi_$3d|fj
zB`4>1`b3pVUgfQKNTX!wMK6g?8g&_{;Cl>oe8 at KS46(VAjGwqZx>)n$qdx5DOG}FX
zvj*;e49sTN1`9fq!NGE{1pMa5g1Ai(g-E!fqg}6C4yua=kaI}Ojw6&Oh6c)USdJ^@
zulY?vAv?9~QQ-sXN}^rr7J|gz)Bsqf3}sO9>0eM9JEWVcw>4Z69mt)lx&m`x>GwY1
z)>!j0p{ea%iv$n`%I0QTCW0)jD$%i1o~YA*1*c_Lw_TJ8BfWrcU*|J3sxdDom8$po
zXe$NwPl_H7{T%9AtKXVQX~3R4C~+;2`GBQ#K<7s{cDjYfRxKOSc_<OlLLx~i>c554
zJ at X>s89OT0hptc1vRL`6dbuilL3X9)zvm~xl}zzf=f!~1v=o1shmj7~$uN4&Kx1)#
z3%U?Gc9O0F+GfxnJbTtYw3+X$Tlj!ebC{k2(p$$T3*8*ZXOP+WjssHA$Bb-=d1BIe
z!I~5eS8|ffD0e!0(C6zAAZo8Z<CkQLV<@6jPTzKB6ZJD_)jDC?(!SrLgp17myEF}}
zrCR3pD}wF;FwaNvYo4XKC!-K(y%8CIIK_9_O^gYFj)>c;_rk~zyoHvGFVf at SPW<^1
z8s}V<p9XR6Oh}RmoudHuiDOeRT5$79jIF at QNG^>L1&{N9RUKg0dk_Diknnic8eDm&
zwP62iW1B9}|FkOZE&Fq5!Ayx<P+Luc88EU5ll$AX at W)#zE^*EA`nvk at d_XsU1%IP|
z1qvI1!%(8BLl>2JuLkcqrIBr_qJhy4A*vnaLofA)iBU=zF)XvMLg7gwMg^J8!L3=5
zGzXMhl at brRpIa0Ckqj05!NhUJTxynCstO_MKdh=z3kGMUxZ8h$s{%keM;hHDiEler
zK!*UxFZax#?kyIU+U3(F{{T*ZTnX!HjE#r-5ZzPbbXi}#{fX~0C+kRF<oDd>tjQRO
zwJPM3t9mi>?nyVjCR#Wey+8o>)hbdhrQw0A!S#u^p$qB6<WJ7B%#=BUOyFkz*R?!n
zEIlwmO&f|HiGHFXXMd|ioo&$&48<QVogHYL96(yN=o>9gYH+I0RPHT*t_%qq2`cR0
zpX2{UplY1s3~y$QS=tG$9_VWq*c2D_R)OU#*yZ~uWb{bXFi0FWrVNZ3*f2&`8imRM
z=_TXtY+pG=@vcIO#_VK_3-tt^gV^|3bz$`}35lk$1<q at KK_V3Ez?P_^-9-Lrp(ga8
zH_ at A<cUM!WTBqee#Mo4SbGZd>I$Bcf=7Z*N$1pjQuWp#u>W9c;y8XTkogy$ZBcL}5
zSb7xW6JCWj0ux1K;af- at x2j*+{<r4KUa1F#dqa at GW_U|9b0p(p)e|zys at G_3ri3{k
zMl&BsR_N!)P-G}94l%v2TS6YoRRhmwNLM8p*mTEo_f={Q)f{Pm&``-=4vzA-3t*bn
z at CJ3D$WoseJ{nDh^m at 8{%Q>W(ZRv7t2VPUZVs)yzFCV*_H3slyUES=UNqHxa>-280
zTV)a7p`kiqG;|jZq at -0b4nQ7n%=r>~9K^Sp4TbN=UyygY{KGXGD(S1HGYcUCW=n;~
zf=R17FoDFRE?P~08i?7|o9GzfF{$1BK at 5}Lg#tIVf)XLb&<buy^a3r<hNZ&QRt4Ee
zy{ejtlmSzP`D!qnHlC>1>sT2fgWf>>Lv9F9cUo_+4FspLp#>*7rI%<?PPADxs$5Ht
z&Ra{ZDGU007~|vCc*YbQ^AVb1P(?xLNZ$*YQ!*+2!4XP-c4KgbFYewp0$W76%e#AJ
zG?VZBy at A!ct7~DN32<IV*6^yG_!f@#hs=V>c}}QgvJ5CY&tP%xrpuo#XFG3<rxy1<
zYV@%zLS2eE%S*m89ci=4fL<_pIAxrYulkoKU#$+ at Ow!+Eb^WF+_6WZ2<~Wi{7SiZ?
zAX8wQ2RluF-JU|+kzCAGsYoPC$J6CmU7=I4BT4;OE|FY|HJ!t`2i)4UaX-Ucl`fXD
zsD`S{%3;zI8wvKFa41vBkUx?{as7Ryda-Si5sit0Fn%Tp1tcXV-QQ~Obf0}QIUjL0
zJ)2rs!(&9{>)^X>9K93l at tN;%IY>I$sZ}M*Z(!<wf++ZLkQldN6WzL)JY8yZ8Kf+=
zJ}I29IuD-sB8Py)!I$XR1zjN&cs4bkvvU)HzLADaq|&?mFkcS!KO?`eM$J at jP|9&X
z7v_azt2dP^NrN3sUlNjEWYNvR<~b391X?Xx#xZeiYJK&8 at I6np+Y$lwtV8&qf#jJ3
zQ2JeePJl(@a&p4LqY6NUEY9l22HsC5kYsi&wkg7 at 8@}<0Ku{kN+VJQj2ePL0exH(k
zDRJK1tDPbhNg7sIWV&t#U-~x-R7Zo<B4a8KJD!ON1v8A1rDox_JUe=Md@$cJX{lVr
zz at Kyt1p0HZTpntfOLh?E3wm`8(8c!ztZMpyBo7u}dSxrgNzW}#VzD-Z1%GkU+dc|@
z0BNc#rItz}D;33sp1IJuL6?O(^KzrEcd-cyL4#sVxT#oy-Oo6`P?==$^^oi;(Imz2
zqYiaGx$%I7I|fo@(T3p%`eYcHbI~uoLL)oI;72$*vS=>2So?eFsdKR!QdepUIxD_^
zYt{D8)#yuOrM^59ZpEoO)~NM#j^lA51*^J at rlliTgFww>y2Ks~57MYEDm%+*F>vp~
zQ$Nltg-4w1F!N;pd||0NuGlqJm&+vls3HlMdPgMO-X(#u%(4G1_fFFw9TB+S7hOQT
zW;!^Cf_%qbzLiGEuiFKD=CWa%!M at age;Exj5H~C;CMZ##wW?wlGDdmZVD4Oi;H~;b
zF+J|75go3tKWm|7<~*2%*lZ5|n6_EB3QJXawtKZPWbx{LFu9U0E)frR9_0cHIm~zW
zBFng~o=m=etBGeC98<48X=8=sBucnq0?S(W94nahek0;z{J#ujF7YK8N7>|m&P6Yu
zx!1+_%V5c7H#MZ_fpPjU+WK5_s+6TGC9({K!zHF-cwEv0fO;qZt~m}PdxU01#2b`|
z_<<CrJ?|lqk)>L#2l8g=Q+MSTAOZ{uwM`^Q2#x<rX>>P=LCycL(-t=@S7g9kq5fM*
zziYRdl|n{G)NKY4;+CpIrV=!NCN4YG at cs>%&*iFdB(y0j_gsdC*VAo?0}nG%$vkhU
z_Irb`Tn*99!n7VHWp)^@F;#_ZB43H8Q6nU<ta#UV>hNKN2CVcXt2}@37NS!8$1vM-
z*C$U5&_k8QXZy&j&QKqlWMTQY91 at w{3h&p#i=cg5umHg-;YQX=^~=$Jd7Z$A`}`;^
z++1WKP6PN241A{vqV9Ydj!9Jf!Q_)_U~2mx;y<9e+vVzVK0#UNRcK83b5Ub}7Rtl8
zRClo<YIV_0S0W>@n-i;4C?F7BA}>u;PMh}FSb&!$L6%brQUX^US~F46F2^K#Rm-!>
zdhFQv3(D*nG-3Z#>nHSoR+1h-)xtI|3cA2%wt5xZ{DZnALdEBvWFS|NBrwBYq8IH-
zpVB{{1MB_7TRNwu)^?wX at H-rIWCMaE)}ct&HHE*n!UY`hfrLeL!9J~c-)BT6UM3Tg
znh~iYJEJ9BsSu%qb1T))s-wFqkYt_gp-{J$x>no&V|E!Zv)X}wxb8kuO1>ws5U<{q
z;!VKtg8;(wn^z&eKX9qKqJsi3ioc#1rzmQ~cb5+9AYf6}ub9Zc)mm)(K`Q4Kso9R6
z#y2cac{dD|P>QeL)+5{GHE<Z3Rvkc$83F|c3cDehuL5S=U)%!!{(@r{Z?^?%+{PZy
z2tjjw&_OCc>L<g08OLu?^h`ivyz7cyL!0mit;{K9?v&nhNL}OHy|N at 7*Eq>6&1yhd
zgh9nr<+sJ{w1%hi{4!9%jSc_#(2sL4CVWn7FnObq8U$KmwfcuCHBW1y`)MN#83_Sa
zjusQ!tTqJH5n2I#H!ZD;jtap3^5&-~?;q7<L#vl<p7SbymfHX!O+<v+%^_)CkMMsQ
zTz1m1gi7q{oS1pJ^}*mJ9nN at A@3d;EwCW$~ZU*#4DD%8R-Lb9?S)f3pY#{Ad7JBYJ
ziFRl_SUs|ki$JGtD)@OgGKes8rYt_~rc^)$YQr(sa=C?;aDDG7BE(y_^a75+5`oSe
z4^pEt&<6>BZvt$i(LIktO{Z3MbJe`67~m<7s5YVb6=zxv?Ar~f7zZXI{b8AZJq;do
zF*AL+GgDd)MHn at 5BK)VOk!gPlbTkQN$@N1JDz=!i7RGYNc_YvAHNu&u{y3k0b?CFw
z&^Z%?Jx{nTZ7R%Z3n_w6jH4aTZ8dIWEB*d8oo{@9<Cj!l^h7tfQ3xASH-`aH!|Sb;
zaFZ(Doz6S;B5gaACr3=h)g%`im78T##`8z2{+Hx8><Yw?reM90QD*i#)?q{VkO>9W
zpV!;?AwpIa&{w9jxf|o^)5i;+>mv)OfVXhUt83PbM<lDtp_hlqz_^n;v%f$Mt^}!_
z-U*_A<U?DCezL6;{Oqup7Iqpaf(Ym*T|fWzLRULmB}e{}i2z2)6928?46G>Sri)no
zbqqm0Xr+v^c3~$koEDmu>W@!s=rBsE&VDj!b!_(?AAsJff*PGHRCel99*7yHymcMc
zXGp}0IC13XRaVfc>pi=u%zjV8H at wCTa&D7<J&$t-sj$}8Fml82cBA5?M9VGl?PGzq
z;L at H#+u1#nb8zb(xhmL!Om(t-XO`TIfxxz!Ptk;@d56_W?OSK)+s3JLRO)FH0*V!-
zf}xb!cHu2vS#PPtgFXm!AL|?lX#}f`_DrX`aLN%BUfvNegLI7&`duxy8Rxpsa7GY+
zAsQ`n{w_6jN`opd%c%9X{ox3U|4nxZs~Mm?<Y&GsdW#s)c{uh#v36~mh|Clo%Ic1e
z<POZc0``1g$>r~=J3UHZJBi%8ne4>wFbky5e}mC5qV5zc;A~P-Gg>44w66%9xaohI
z98|Z~n&)hjyxY|_bFeJlN(6XqL$W`AOxyrDwq3QJaW9`^ON>raK||7}En>`Nih))3
z!y+cTYn~GM-{4(?{g1s~#Y3bzuu6f*-s<*(r2Y0<ZgW}rtg6NgYKr43wF(ryv^`T&
zW&R;Eu%ae`;n$FlTpHvd&lsWL?<=aEJ!1->@(egK$c@;WO39LnHWR*(rs9Tws#tlG
z0&lM_6^_CE3V~iV73GXx@|d!rv<>?LtB>ePzJm`(O(M2N=mMA;7g_Ug`kt%DXIGV?
z&kuQ`fy}yBJE_Ecv5Ct%kYJi1NW?Lq0j*OPMG^8v3;1<J*96s!BXKSs^0A|9JoH{Y
zLC)jUH&)Lnh4GqRAiT`qHpCo%uiIJwHE9ZEX37PGMgQHlom<>BCR94G>od2n(sOgH
zksW1pHb>w=zDT)ijOGGgzlwJYq9h83=iEVASRL|5S7b!zcVs at EL!E8DG;Ulg*(q9b
zU>e*@=3JPJwgHi{@nUX%#r^8BAcG5)67SIxUnoCu?bXMFcC%n)Y~+G}Gj+OEIeo<1
zi5$apezUC(@i1pwZ!prEqZ2dvTO{{Xv1nkR0V`GXN08g3HDbpS>`{0p;qiKrTaqeK
zpri=J%qBB34 at UzSVN&*x2J|@4i7d}$ZF%<A`(%lvC8tCmjC-0Dt5hVHy{+ud-m2%`
zhbGz~rnupZ#RSKO7#qHSgu?mu+hxXI7+_9gpfylZqu^KrD=$=PFD-&~tX$W`IK>2X
zrA%~M2%*?FM4lwC at _Ip?dti*guv at 6$1=pxITMiem+QysUyrQ-}P$jaE7pxiaeI|=W
zBfZ0!w?aSY+u}P{brwoz#L9oph6JnAoUM?)d}TL39n^Zk6~<408F(G9y+~)2h$_J!
zQ_5O}O*N5k5Xu-rqZ!ikYxPfdDJOi==|1Uc7Wgz&S|KEc9f8N(gXx4kUG98$F18AQ
zXyCl9aLvfS#Qx-s(K?rYTQ<gh3whb&Q_*@<l=x_kKLH_jZ$yl1Om}pz0=|Ym>ow1=
z&oHBQzFR}vh0|AmDPzFl*%HX!OBS;Q|AOVCIl=GWR1LjD6 at 7@hr}#6;>ZS%U9c~~x
zzzs@|bxb*D)*<Y<b_$&sge=tRHgs-wLWJ?F#Ko5yDt8x9b2xp4<7?J)#O{U}&c;?M
zd)d8PFq?K$T4U+)oLAoTaA7i$rleo3>b at Md(Oh%P=Kei@<n*lX(YNGF(H>32pPy6r
zI{o<p`k2!qLnrctFR0Js>9!zf&czF6Zf5>xH&V4t7-`A2P_oSOFb<8$>wPMGj~88r
z3Hh at kcYgGo(2#a<#Hqkb)ph3Zq-Yn*n?I>uT-P3Lo6)YNcRc>`^$MWCj*~Eb{gMA}
z-nY%8h~XK3A}%7d)$qW))=&WO*iYZfkG<Y0%QG??2f>8k-IXo>hLtEao!E_t>$Y_6
zFWrIp4}h(fo6w)|ta>t)F0BC<a>nr(*K#kFNG|hT0j{2x)cs{4Dwls0gbp+vq58N>
zPIEby0LEN3Y^WS%GJ+SohuL*lT&HYgo@(&I{$DnKaw%Ade?5JO3lffa&$Eb<`?z<`
zqrxvtRn8zxL8m6ln4&N at 6i_OUZX_ikl39a$35q5}1*F)Wa3|xE6e;Poli3Vj)aI#+
z?e+`fB-n#h%R67ps1<!#_Z*sETi_vC`cR2~ySdpJUMWT7J+v&`Xr*H?-PRir$i4kv
zr%>j90b#!o4ifP%F#;oDf4VQq5UMu2 at F@4+V^wP?U4k0gKlGD^8g{(D;IR60=#Ol@
zV?iT1(2gGH3+<Ch6#(^WE2gbS4&xMP_xqY<$0JsA%D#)^t5x0d_4YyKpa6PwfO3NS
zUKJP|pJU3?>qzATVJ2CA2E^PHAI+qQ0`{?g#%AT=>!U`1E~)_fTawK|w}3oQ%|Hx>
z8$v*6Tb?dqQ>LN>zm1J?2Crhv1oh=kI?Bh-oxu))`8dyQa`nH5^Wo5P>N2?7!$_VB
z!~1^&XL^?Z2K|3u_32)F6<FNRI+2$|Ty@>&Y0&HPag0|!%{g1fagC<2?brQ47fvL9
z=$s{LD&5{?e18zR;`%!H5*`KFcYr`B5=Mk%KCUT#<#GSmgz2pnvh9H0KxM{Ud=PvV
zIW$?@#_1pI;SbQ-DC^2sEjbY;9eHrqp{1~-K<}*X2kA@@tLFF>H}PvS<yD(J)gVo2
zdMN^Z#?w(hPc$;jywgM5J>HVXkC2mpv91s*8p2_HIRdJo+?(Y-j9S-orw)WdwCq9D
zUB?yWzI at rNq@im^tck at Cv92sKA>M5w;4K*C*^Y2?v7%BUlD*`%ye}aSLje3Sd+Eqg
z^!$2qv+}_fXZqe`%#%zI{2&Xcyk^3>kvU_|=)iWCxL|NT(Yz7b&0Q*~X(c>=iledp
zSK9=b at 5qQ3Bk~U>%w<D>z%<!Q<*El1GQy|n at F$Urpz62vI#gX|*vA<TYDYm`njvTR
zqYgjtSV)|Puy@({W16qewq>a8$*{4`l}E)DzSEY6;5+*c(+o*teih%}OV9zGw`?Qe
z_}6YCXn at W>;%iT9-<u~uFQ3(ahh6X=)ESLYP)I9C;y$m$ynIRf%lio#472&r=OIUe
ztPiXLu-QTPp00~bn&gT)FQI0h3eWh2rA3j`8RalGv;q at 3Wf7A8>vYZi6qG`NmHfB~
zT9|Pu&L2i*>dZ!^Odg0r;NVggBU%YVNVc7^3`(ojwW41OIUp?oY~kL2ch00_JC)@=
zJFv0!BKK|=nYk- at VXnj`9pn`xAnVTzLv++^0;Z>LR~zx=5(YIp*7zq$@wnnIbufiW
zirv at ew!db+?i1$B>95A1 at HgPY<PmM!v$H_#qXajw at 8^I9JdWttpqQxBgDr-&0?R{L
zLVb8H%PJ*?EmPp#rqvODJC7wdye+12FhdAH1I7k+3V>!Sw`jQ7(|@(ccz%CiO$WbB
zvpHcy`3b|h$~~;CN)Jv4kI at i(#jGI3WNaMWZjj$RfdGRyKXIfT#1tJ_BPrHHmLJx!
zIz?u&1PY7n1JdI%1|^wupd7#8C;XY8iP<dK+1qMZ9Y4#gRYhEXXoB+d-HMBlM~`1~
z04ha|Mq+>rF4u!-mNb{~l$s!M`6l61N(NEE=V{UA2SC$}&sG()9&elLT9)%M@%{g7
z>aZp}JtZru(eKb`PJAFzpS|IZitPX%5EpFx+Y$&=WqHWvl0c_ry`61PN|hgaU@(^P
z{!>QxkfDsB{f;qznN`AiD at A_!-c=4z5Rj at z$$`?}@{Nbo&R`B>mK?BOxzuYn16LeF
z*w35DbI(!!!BE!Ly6(fp0RQ5D(J#6_D3uyfgLUn1#Iw))YvFX_&IkW^uc3qxoqCpy
z+kb=Rgh?EuWKE0|fw_Pc8n4Bs2K7C8(I5v-YZ*%aMR1~j%e^MgyPnG5<J4P at yj4Cl
zS3c1sSK>r7c4UOM{hHdR;EDo$ic`1Y#;uf!j-k~#@9uSsWxeU7>%()J$w70m<nA~_
zH^qV1pOd2s_N%}%)Kh`rEX}{`WsyIYhl*)F+phu2LG}TBD#wr~P!yWz>!*BE5KRrc
zg|lYRx07{$ML<xfQY6zS{X4m#&peJz51_DUpxD4%Fv$TDOUt-yaT|J||J+sFK&UGD
zjF7YQmPe<kyFKqYdWLquIb`0fuh?JQbH5~|W}TE?ywpF+Afm%z{a86Z5r+O*rhu}W
z;ClYV2KIb{S}|Eypthl#SY3ZNV)i_SU(Jv#=oKS>Vw_6`fN&lSv-nXtEN<epmdqCd
zJ6NSl)NTD^Ss;gZ4JwCr9(X4!16;@;|M)h8#u#t}P5eskp6ta{MVuvK-$9gTt&hw0
zh7#UE*GgCY$7^<9v!L>-Xyubksi0(_K;>_+PzN62YVS|FJ?@F#x4vVHEqCD^v#4t*
z|B|ME>s}WWFabfm$%&a<nVu8zERK?`TQwC=(cD05CLO74vwu_w2MWHVyn|^`9yGUN
zbcd#HF}^uGUMg_yAc$#6)z$c{*ceqq$VP)m^)UH4);t*8s>8PTNpE$=+h*UFASEXZ
zL7VvZzH!fY-=?$T*&MYQAiTNqZ^9?BB5O~7_K8(Ie3>s(LWfx#oRqH{qOzf30$TM~
zxl%UF{@;Q>L28fsuNguH;FAQ!<^E4bLY#G22=WX}kDmOqL`Q228NC<LsHf`z+fCzx
z=Cgv?cDk`!9kf_k!9d^lWxHP4yk1N1MJ+j51Dw?Da26GAFKp)v!fayMhQ7xj|AHic
z`Oy5_ghnghR^%iLDd|Rw`Qug=ufB=UFNi84w)#0`XUeqilWYuLt9d$Nejsg2?|?NS
znjJ<iAtf5zPIB_G8Vfj;qr!mb;uP&0fe1(W$1_dHR9rE=A_eZzSh~v?W^_>AH?)-o
z^S4~g*yWWBd%rP7yfKul<|VB}Y#CO6q_OskHg##;Qxg${F*)jXw)i)qK?ICSwSa20
z5|i!imwTAr3YN20%ZO8`>yJu?x#^k%+Xk0XD>+Ogj8dm!!~wUb%uzLkl%HsRoaiA&
zd{A~6XJ#clPNuQg3i=u9b~p?^^#6i6rJ4eD`VTbR0iw|r!BoxATV+<QO2JEiQMwQ-
ze|O)qtTmDtBxJsWYG9*u&QtS&a50GeDdRaup0qv#l8$N2PVxc}6*@TAYwzn1<x@;b
zAxGWkRpn1ty|DMDbwiVQ8+;putfM*{2Hq1{dx);H^F%LJCy{IlMu`OWA?0YpGYnpo
zVoq(j-Ga%$Ht-Oc4O{Sq;INl}N;`bkzsvhPt1ssH=ubxdt2+IF;pjt=@#v6lUYkTW
z>5I-?YT|=xhY~HeAQrh0Pd9SFL^Jy|%HZF-)?$xPT7xKbqiRXZ^YH;~*dY~P_iFo1
zW98B<u=r$SEk!M;lH^swJKh3y=CRK!Ns+*#XKZ at NepHh>fDMaZRFltt*>vnGQQChz
z(q~)I60>;`Ke0-p53^;Z+!plvuDi#nB;3{LBG|ogq)QSg(ob_^#>9UD2l^a?exiUe
zDz>>1wPjnherG8ZhKOFU&Hp02*qoe&h?b>wF-(x%rRVoUj1*lNBxoiPs}LZ|$nCE0
zYd&=5NI=T1i%0w#vLMiZ&K9!UT)v}5lPQ-ECt#=E{ndE!o~RQ$^K_2Y3Fiay at 1*c1
z+hm`dyhPL^1>glrX&v5M9vLB`qk=hRE&l<m9s1*+hqnitvsN~6DJmZJ?wHH}Qp=O`
z$qtHfv{o-9hFibdz3ejQ4ZNDfqKF3V>MQkUlI~XUpe4{l#F*QEAh#Kl(P25 at BZ))z
z5;$0wN74O~QJYygY2HN0XhE1x;n?(y8+|+kgcz;^!__c?H+`Ot>(@)Q-t624-CdC7
zjY-(5Oba*y0h=D85^lgRgeiqm7Zb4ENaCY~05(|aFFww1JqzzaP2tEQ4qUcO-58Ot
z1IB7P=e5TFnb!<|0^Dq9^e!@T8l%;Tp+eg<2R=b1A9OT7wtvIh%|pNL6}DD%h36x>
zxtdrebM6b?l}E#O1gp^}UQW_;L2EgDtqE_(r+X$GCbqiT4|OZ%vMF{jjVvCto^U3Z
zewe*ck;;N0va;4qIU|}FLXdgUqph?yWqNJhuk06so<Z<`>7ZdL600kQfOqeMTDRCo
z`{nK~k<>r>@L1-w&qJ|`f;j)m14<^1f9 at +shidP$c`W9l%t>m>fT!sKiUeNYrDk))
z3iBAxq9wJ-pR(!CKhof!Cv*OKz$O$iNf#DvgNV?KK!<A?k1WPKqY5O4=6L<(8xnN%
zva;UezxnHb21f_;)&R?`oyfcgLNxh#cdy!3Y<2^3Y?!M<vSP9JfJxT$2s{t?G8HjP
z0d8waz3cG!rPkeoe}z`2Nv#z4v7FJmvK?dFxr$iBj*;}IX-IP>XWNBKteBD=x+P5Q
z6nO~C6{5a9t#YADjUHuja9Ci+YksuHRO}$RMbJur9eb6X5Xpj&Xf8$UTh-h^ZqdQV
zSxhna|21O}{e{|WJjKS6)i`h-S!GuMC+K=Q*@Q)fV9d-lOHQV3BbywzFdLw*o6?7V
zV<Cpl6wC}>6&=yzFskaPFtBVS)0|ztDL$AX>nF at 8NZbpws>nC>wLFI5*iyX0Gw~1t
zaXhGhgKk%SJf+(U7Y>@62EmefUoQ7opJV3RGV4|=<I+K5Em+gci3YKIk$$i1w|196
zvIPueV(lPS?1jdeF1vMqucnLn>z+ at cb@{Is+jJTCEv&jpV!Om>gAdes_zO61!%hIP
zQcTyY^A!|^h})vVZF^C*0E33v76x*#02hdVZAL)uEuMb=m*b7JhkW#D!IYAM_bTlI
z9l29t)dm|ofIU%)7cMzQj!#7{tSmuJ1hWwMXlU`0_q91#!<Y2&z%#}8ab96vypj07
z-N#GPbvBhqUj)SvHI=+3!xU7tYFs7*#m0tcC<0<l;HP~mQK#`!A#ky>1MSFt+^8pi
z=BU|u3v(d|Z)QKK+n%XcYvJLuTXUwgZ;!d(j3x#9XFS5^6juEm)q9E!AVc4|*l8Ho
za#KJ*hh4}kosC%nLWiolx|Zr;HUEvJ<-$r<*;z7`+5s`+XFA81Wi#U2=xWG#W8v@>
z9I|qB#a}apf1A<+NH$F@`b#ujF^xojiIbDEt9RDnP+{QSN|LMDI+lWh`gC^>U=x1t
zVAcBmpVz}6I_+oF-$HJ;i_LOJ;=iW5IV#{ohBAlkPGEdE_jW=rSFFJ^s-v-*iPZoO
zKr71=4Ij$Rl4MTCovw)0C|DCZ)wp3sg0x at prh0DQfc%{Yij#r1Sv}yXUFf2Jv!t}7
zSx53{D&<^C8u at UPu@aVH*Y~7jfl-JeieKT4(6XN^i5Ss(uOSfgIPSC>p*jIsSaQ>)
zngDUKRVli#9#=5P+gL!}9+-EtoHF3$8B~nPSO_hpg6q+bx-9dC9#WJ33B}YOm0v at J
z9|-~jssO{DyR=OZ at vqEq0bn$Lr<8ktXUmRvbYk?2y&Nc!YgS?ImR=0Ja&XtRu~J~S
zBI0kf+ush@@+fZ-F+a!#H<E`Kss$UtM#PJU-kxIie!^Iz9uw#jg26$4(!`b%|M=!+
zbG8<gGHlW&O?aqdjM%I~vDz+Cqw3*yS-0Us1Pbz<P}-zY769w<Q}xn+?q;|#ck?#i
z23E^IYQ&Ox#YmoawW=>qipk$>+sw_?C2#A?j<ONslHVBeGnU?)Kx0aDle&he>+)7$
zc4~@$ur7=mI1VZlJGJFttjO9W_sxolARE8Sh&T*v?G`hTF|Oq~-_sF;32CbR!4^TP
zeqAkEd=+5FZl98+luea?7VlgC#N)n)4{com0}Tk5V~(g&E+;Y+dUYMSSGS>}NRp&_
zx{|njG~ZWY^Y*21GmV}(byNv0j2G?YeQ@>x5RJ?m>o#64C^BaNj7Q*0`H%YJhVsun
zRdR0)F_UeVutNx*9>G<h^JD6);MgEsJaFgric<_P9!+`JrexHA++3Bva}ekNxM|ig
z^(|<qYIR`;Nz>zX`i-Ed3D_-wV$qk4`^SjGJsnvQXPJb)=AzXeQ=S7l0f7Xfe4ygy
zjFg9_u{nm4(Z_aAz8!4?(XMS)sPSW6&QzFf)8VMM3W(V98B(5|dDgkG@=?0h3n=Gn
zrc0dnCr8Pi*wycUmZ5DVZzdEJF+eg>TYvVJ$D?aHPQ-iz-5l`G)4r-P8=z1;%i9?e
z!**Q>>3YZ~4H}utidz;=JLeqYLMjK(?3XhM7nww``tI%qk9Y0hqLwvQMP~`-{W`Sx
zL_$`rLu9%&$^2Ggq)$6?<$ZU-4N8%j-*UXBZZP>2UM*CA-Hxx{W+H*i=(&RjAWXGi
zQG&eNuy9C7V1GoDX=xCHctCzA6jnjrbn(lk_#_NMHQ6J<E;9j2J(Un&&%(K8OGyy6
z8jy2w*cVKclugs(_%a$RRyuv}h}a*E at _z(VBDHHa2}Y1U8H?%Ge&z8L&vS)SZ1PA<
zuZqFqx2!FHP5f;%se4s59rr~#^-JN^ThK}F3sN0ZD8hFv0a3sb7<<>GC6{lU@$jJM
z5wnnM#tuG|NlgpQ!H^g`*$_c{meItom8niF%(E~vf~~2h`6t^uXEO8igms44TT-7+
z5Fa8$QJ19WF?t4mJJcxlCOl9PD7L4<rsCA at -?jRGymy8=p%e{YgDlS<XPV{`gDXO*
zwVf0n#hgc#2_Jo=<Gj5!*;~GPX?fgk&$dW)P;&n_+yvt6mzd%<5##=qPOpkBqQ-yn
zq!y2sm&`R-;q!aeh`56{9g-LTM1i`(ir97U4pO>qWwvSV8Dn<cSsLg~Rnd>4uU3<*
z55F9L)|WJS4%8g*y*Z1!_F#i7_DFDz?Ty*n7VNh{;A*KM6`^x~<q>tEGomLhk6Z)|
zaBX>t5o{yv(HBTj%ir9N%(*!JY+Ab{b|VaXkls%jd(oq0<(V?!(Fe5UoN+b7eBri2
z>tpD~7yW^<=TMYV{y9Z^u6>L^RC-P<CKmL6SYBpfN+ZE9J_=85J&G3Z#UT`pM$sHv
zYYOi9+?tQTW(jXVgb(A&!M_Yn#=+3MdSI-Z?v@{*E9hh at 3Yw9<@ja_@>M<~ls&ob)
zfrug2s<U^Tk1yQ&mUDXQAI4Z*;2&BuJK(F1#l-j>4*#FhCs~pA3=FhuiW`^0olJp$
z>8+Vc?-6$i!ojVZsIz6*Wc at 63k}%o)nzxYsE2EZWmE at ol<fMJ at xvukA{V44GZ*Jc6
za#mxVdD4fNZYK%R&z}QXsstb_dyfV%K3&gPk}e@;j9xGC<lIMpDP}ZA3oX{y1*c*9
zxLOh%-@|%H at B|$Ls&y-dG(A0^-Ygt{wgva!18<vOcEdUpbMZ)%{};S<<jG@>h5Lq|
zShpWQZM{)LD(4okv*2m0yEb39xON!Y{_*jqnAxY7<Pzno7VEm+TH7saDpl#u9-dvu
zbEtMA2bthga({3oWjX at 87eb2whQr73rcgPI>w0s%VF1nF%FtVt%L6PZ_1+VI5-(}l
z+t%DF+;Ll1F8y>bqGdD|jv2NE&OIstXVhtKgKl at j>%DVg;=h1DABN`6Xdn5M?niw0
zubrPy-cBnBoD#XDe(l^LGoD77qzT#!LZMtCeF55__h=r_!dA0Zg&P0c>dm;_l;m8{
zHk#Yj8mSy`6hB<Z!<l>N5L-Wg)Gh~K6iaiP56a(C at uK@I at _i&fo#7Fp9WGtA(u8Di
z$9+ixM+ze*>**`Se+0&;G=WRj`}#SXhw?7#4s`o2+m%J+BMwq#;GiisO{xo$V(I=(
z4NIFlT!)FJ*9fU->LfDrEfSje!(aEz8BLgU^d1~J(XK<g=0)IOUN9+tRz`^Y-Oc+a
zsY=n>UU=w%_x`Ro*XUTD|1G2;+6Bg7)avGqp&b+aO<}$ZI~>++0fKJa$A}DG;ulU)
z973T^8hOE=lA!HlmEevX*+p6RfXi8*B#GQ)h at iFOl2}rf3OhQ)z$h4rUEyiYJgAH<
zXlFFZogBoE+voO}JTd5h at vw}(B?JA08s8d}#P(G)kLQMe^^AjI0n7g at __66Ny#ej#
z;xS?e?#Y89yASrzEnuVdv+o0zfDU*KtYJJL+R`kTc|A?Q%xB4jvawn0FQXgz#J96B
z99I&;ca_a!hn=kP4pH$$)FB37eGmj$UR&krvdzO_s at e^tF-GHm52JS=Dr_XmUtSdJ
z)6QLK-0TrqVxTU;fekW+pK0Ak+|wofrVp2>t7pZ14D*J7xG#lICm#GY1~LU4$-&e4
zLk}uAk+U735E09XFOGy5B~h`Uuiz)60GVelV4(37<qhsdn<Pnb&@YCO^$YIFMW(&8
z{iF+&&O&5L_`;%pC)N}%%(#2`B>Bn&t_Tway8y>ZQrX5SsfL?*9B3UK4|h)7I;WZ*
zg_eY!L}C91)2!~AaoEiTm!FKg{OkhZL4aI*4z~Y{uAghN_jEsj=>l*xphsnq->Sc+
zll!EReg9>{%=ZNm&U;!>Ms_BbbQJ+D+?c>Y;APItLw2Wsj>5AgQA+)~{WIlaO at oSL
z)D{ky3rkz at 1>9bP?#7+E41(!lQL!0Wfi$H(j at p@sgu~W+*PDKS)dr0LJ4c}ck@%Rn
zlTx7YT!!|>>i?<P=(-vHBY5`GP(S89|0B7acf~E&^(WOeWhJ>6uIX5ssLYCY0p|OJ
z1cL0nd>tTvX6ZDh4KdRnZsaK5c%KnuWb$vdNvfWdF`0IOF08ZSzGa<mzvzg~;q7 at u
zX1&!VYwj+=Rv%&C at b_}|{-#2SBwJE|1PMj=ME<Y7YH%582%kjHtbzP?64^W=ERw3I
zbAN!cWTKilgwdI~!(cAVq}Kw!dm(LCQx<gv_>n$;t<upne#pnFUh%kn!ac)gcx&H#
z3=2zm2>?>_fMPiIqdPAL!4WKLnUz(6<R8ACz)`hN7_ZgXh*YMWQ4G_q-Zfk50HAx)
z<GcezEETIz23>pO^g2}kni{PQiv}4`;Z=Lt{hDBB009)ia&P6!80h?*8^p`#($zb~
zl9BCymV4Td`hA(dFhMmF8HZW8wX6F#HZ1(SpfDWvrbH&$jU(STr);Ke3=W5E>pI1;
zH5|D%NJ&0ZAzc$E(ov0azavQ?b%DHpog~&RXKc5Z_k&JByVt85Mzk9Q3<}ltmmIE6
zEerTA=dNO&FIG(AxL^U^5y`xH23{T(l{a*MW?6;#5JE+BkRs4$$U_N8s^V2Bi>X?~
z+XnasgsKC(s~6f}iu>@Z3iG7Ue at G>miOoCq1pf;sf(rx+H*fnPhtVdwpjwf)!hU3;
z_>CVK8vaS5OwkLJRN{H{3$`n1eygswNqjHhTTTdmJdh;hsd)i-mX`V2J^ktk?D|oE
zX at wldVG)<5qVrvR6v9(h)+>GB{Trh4ZBar5CWovpD+=-zB1<TTU}y~K#CJvZX^I}#
zfhvTMLb-pGR!67W$fh#p_?A?N<Esd>zuD;E&S}`5Fgn~7lXXF{#@Q1^s(Y1-3e0q=
zAnJVuAK6R$M?*(vQ=-4;Gq8XcZGO6c>2-X%dea(c!U$R7*BUMo0Q+e{Fj=lvPmR14
z5dJ`#bFgk<mn>jNpSFq={XXix&JzDUQL;lS8O_5}9Ngdc$Cy)8hw;RlnfdA3-~@rc
z=+m#Xm^lo(fXrWq4qCZ&90207!4s-tb0mr1A8>xkP&m{_o?uT_jXKiuqP%Z^`tOXX
zE(S7YPTxTGQGHS(FK?Ex>7<Q-l5MAMOk64?>b8;-HPu1i at a*x;n at O)qFDPfId%mBO
z{xe+);75gh!j$BIlki?re>V1P-UDK;F<Yp7Z1ZkQ*g5yZ9*A$si#93p^S_;T*So>l
zbWWZsw2<R*Vlw!T#7x>AhL1ph;UX$yigJ`50_k+x0ZBaZEQi`0;G69dh79I3wX)}#
zZrY1(0BgAUi79sviDmLoJKrGIX7my(eSPel<<uQe0#^Nw$sR*{jij+SI6K*&b7}xy
zkOJ|c7BZ4d;uI_xco4S9vJg(oyv;#@>dxyRkE5Sb)JH`+`PNATF&7zs`j<EOM_X7W
z-rAo80QF0KQU*vb0){H3Zp#=oJ^1b|2VgFM&VIfA2RSBPUrI{sf30U=qz}|1`DR`~
z?ZVg1qp=c-=>Qi#D#M=j_eou!y#N^v{RL{VqT=tSVWTFkM``uk*F|<X0)919Pj#mI
zqq~rByKhW)5%K5<nWd0_7aJ>}3KX3P26aW7j)cvk2qa6SBmheyqO*to)5ZBxsG2wx
zr>ik_43w>;?1}?Lnp)IAUaq|{_**i6vx at jjy%yLWFKee(!tmP=qra)W4+rS#<s^V}
ztb_TxVPX;LVPVS$>@6L`F}p#lfN%1x1K<Cr at 9#0)aECi;>Wu$?s at zex7yfUg(>+1t
zyjk7<@2mG<*8`B30e_&<vyoyn(u`avqPKD997MGuNywn>q4BxHvxqBNI$r+4A35u&
zSsF03$@Y|VgEjS)_XKbwWn9Dj<a3YIw5CwatgDiL#Oj at 2l`vSKn9RLH{e1u5@=T}k
zlYk5G1O^{f6z=?gz7bwnJN(5?KYKq$n at a!=Wiu(O<BWsRuL*dS_HY0aE_oY(7u0B#
z&rIlVWo7>BA?vx8Wy%42OqA2t&|eS}wE-I95GnpA%V|4Ww8wmmq0qpnxvD=43{MC9
zl?<=g9AW3dR&q-3csJVEU{`7uhmuv5-;s>7<<ao`H;0RVL?$uRU)8|2GI@%+eU6`C
zH>3>DS~&UAEn38M&Bq0mw-Mj%te>73txfoYEYbQip{whOOOjqBwMm at D^zmb%cn?(~
z9T0v71QQfNenDB1+KGLG6vO}V;NSGMgY+GZ1j7hBU*v^75nJ77D-)>XF3KJDH8WG*
z1FqQcLK_f&Z7pQ_Ww5?E{Ex*YxNNrazxqZI3QDYj^Z(OC=_0CvskV&<;j4bEGkuKe
z7JhE&kKimxShwITB?p^{2*ga#O at n>K-qP&~WNxD5IR!wTTU%&awVI3<B!A@=Q1DtX
z8~Ch77h2x#Sjq+>;yK-i%(unQkY5R&CGYZw#=7=@`&Cpb9`DLG%Wu+aK54jWe<n%M
zRR?jbSm!Cjb;h~%E4Xd=wBT7 at w#F^mnF;&*R^)S=4R)liq7+iKI&oy?XB}AH$)ZXR
z=~`(jRqi*}IiwIL6C|Oqi48jC*DEO9Oe(X*?(e%ywqGfNs(g{f$v04BH3wI#9@^qq
zKu<V-WpMto!p!HzsXbllxG(A5$k{Yh{&izcvaWFc?*^CjfQr8dd5AY2Xt%FjKl={P
z4U*4HLCs3j$yqPwmOqDTGZemqv)7TRCB+3;FCJ{#+XMxxBh<>XNs%tZaZD!mP)XEG
zlXho1us}!b{$j<?dT^V7r7yJ&HeACv(+J;xfqFxPdPi>KJNOf4^Ms$(FQzM=S3-yh
z1TSblr?o^F(+>gYDahnC$iOl*+0#-@;GsBVW1ZBV@=kngx8qsb=WYJUgWJH95%Hm5
z*VFme|1U$~OzU<R_G`){Cp=u?{rfp79A%hN8E6+wf?)))W%KxrE<ZZs8^)e7O-ufN
zbM1Q;<MV(-6g=tTv3=GePHNaIfCFdi&ZK<OY>Zmel$==?|4+CXLz?$b#Y{R~Wa)-b
z)4p}s)+L~ajnuhAQl!1c@&iPW%d5932olhV&<R>3<QH2y3`lUPewcE6Z;dkMu1MYs
zSz1XAHB41<znbLYwPyBb?WA&0f at u4HxYYk`yfr9RKZ1Y%2^)g8luN}?7-M%RbVW<}
zZlDSR1CGh}+v->Cpb&@9bE_x+d1|^4y_q9zs2AOb0SMzi(~CFP^V*DUjFOt5J-qn}
zcLM;))<P-_7SOfF4^NUHNkVfHymCf!KOk~~G;ZYH8cBJq-VND#N<QuDLEylD?NbCr
zXk{KC{i|#BaTL<EGmJM`16&ee(LtP4jd(amFI-ttoH9%ka%|lv_vNs|Ep*BM;Affk
zlYj6;B0sPnRohQf7W-^tNNvve`llCJ>qp5)U+V#8UH_4~_nJ1|;h1cpp3}uU_-xfz
zPp*r1wT&YuJ%kE9u_}7YYDH6jzRwrD>V`vjBpNa;!-<~IB5d{sq_im5g>^H2O|CJ=
z0Zki$!BP#a=YYbT5#^k9)uINoc(;5gNG^&RpJB=2NJ7&rg94sRYMRro9~1Ie&-mR4
zB9cdwE<=8j7?{2}-~>s>Yk=qidxsAbiV$+Vv?5aA;*iJB5c!h4 at 2$0eB_lNf7^I*s
zME=t at _Ikj=s(iZyDmTiy2D20I9LEb0ROZEVcCTU=;@_U6U^YAM7ZQGRiV#(IEUGi6
zYROMICw_At+E;A|hLktPu&sOSNxv8SsrWQBjg|xx)N1|fC7>PQu*dcv`1QmRfOZ+s
zN{t4xKDYG59p?{v8%{=lo13164+~YgDxt4&%Q~(iqQ|TZHDaNl!-URbNSB-#v|$>-
z6yv%Kv0@{*CybBz(SsPA5G=6U2Q=HcEb`si_SCUsRF*Tpc-+G3#;x`yiQb4aamqMb
z`@un}R1k|$|CoVY2}+L_BYEchCSP6ody|JfqmrjFlrm^5zu}61qONo^%+iC}TUI59
zy(JYBIL7f=q>{|J`Z$O9Jm7<=z$~A)CY#oSyOQDw7?IM_h$=OBs)lS_Ub9cFk|)3l
zD3CCOjJd-T0d?@^VGbK0)M80LU7emh$^+~rcv2_DINf at aOz-^Db%G*1<%)1NSXqz}
zTR!f_Jac;8^ua at aW2V^5Uv3q(988(mNgzi|!otva=9j(sap)~4Q%k6<tA*c_NtcG?
z)HVUujK0R4zuBLw>nr)4nmgY)SD!wG^Lo;{XlMpzLO$H{q$QRU#+I++E5tkn16(vv
zJO$N5X0u>jd>=~N^gM`^;~mSifc&99BBL^?n~6Vg5y!@V*Dt!;nuVei_o(9d$#a86
zt{g9D<{|D|v8R76uckJH^nM-WAB?V-s}?=Wr~&wzG-}M9D~>PoiyX~HeBwobYCt6K
z7gg at HkhPwn=M@{obqyUBZuOip5>3_UHdDv3HUQ$s7{;%V*YIs`>7~9oD7(z?qyoUg
zw*4-c%Z$K(Ge++(#)z_=>jTh9LwyC8m&fW)-5v{h#gM3{eZ<3j_plO03b{3hOBm00
zXuRd`6)qu{6-lqbMZC^8D2%PSpv_)%`Nec1sWk3i2S$!tGiYq<b+}f5_Y##E+J%gd
zye)O0y__7b<EfaG at z`lMIt2Sx{le1YH1ENCc3293Oy_Yl-UY>3M^~#izFX1p^!nIz
zJ`aSc9;`I@?Z_*i(!V*Hs0y<CpKrTVJN>HlEC<&5-D at W4t2wD%2R*dmd3_D*jx0zt
z<t{I!PtTg~%G;>_pU^sPuJrsbvlK5XX+wzF1_ at Oc8vZ8)N(&xC(H=Q!)IHn}TaS0T
ztkj`@q3<qPNvH!^DL&CEQV%daN2BtTZ$4q5hX*dh$Qt2BvfayJOqD4^e+>D-kjlj%
z{Il>>X`92<vu<ZQ at xt9J@iQom(bi%YH;?CM*hlC-uR1zU1NYsh-(pzbM_#RHXj)YU
zGj#!}z*+Du1P0XhkeuG;xK={`RV7lH+BC+0f9A+C@{CSM|F)HBk59Sk5(J%yQ%NEY
zD#&ttjSQnMo}90fZtdXtf506>V09tR3`O#2={tFnAaNhvm%U*#DfLE%fU(WMAUZYj
z>h*Z*Yv6U;NV}6KJ&G=#gIlet2+b)I7D{Z#<P{Uk>ZJ!25(8!z$fYi|gi3JA(Kx|>
zO at 811a5m%V^q8 at wQR@OD+trb`f$z$+x?kcuA7%B&z!9le($g414vY!2?pa_q)C-N!
z00lt$zht{%&m{VLpkUzb-09G0*`^`MX9dtF9Hx*xpGf%NTG9HTxPZm?dhxZr+HF=i
zpLCW)T|oFKn8L>tnsoMt^ah*a!OeJV{G)^$f3P<|m%1vQb?4Vw!vo2T!NdAnb5o-R
zM!FRic<2#M14NMe^3m_pT6IhL?k2vngXv0vP8fyz+(cxZgZsp~6O-`zL;PoMp9V40
zhre=Sa=#`)Am<LZx%94J|5=QnzE0W?X%s?vf3+hFmUV*MP at bJ#vX!@(2Ls#&l<NzO
ze{Kq!T*cZ=jx6g(1ob}vnyE=cc-6jc4z&=@|B{W!rPYlPsM|7g6Xhi$ZVu4|Vg&fk
zn=z?0$V{|uc@|k=P7f{~SoK?IdTbgZ+73(0XhYMOc$jqnE5OHorzP09{@Jm3#$;F$
z$t<9cO_hcqUb3RhdKlz-?y1APC1Y8ufAcpFRDL0lJE`s+dN!+RD|!U?w{HUIT}Y)W
z?x6&*3t)5S!Um2x#5{cOMSEB%(zOT*n1_q2LH at t@Er3KpA*NwC;6R(n$U5P|0)RX`
zMa^n-V&jD1%2jSZ=ZA&k7&F_LQi<bqIQ;ny&(IVBRG&)hb}8b1xy9-`p?Zpnf11JN
zLVx#Gr;(xZw^s+FV7g{TcimAs+9XS#SF7KQXN2`OpsYW8@;iex- at Kc60<?@xKTxMa
z)4R at knoACrL|L|hZk$t2QAn|y?%m0l?DVB-q7_rt(AGg&=a~Nf#!FeoCR|0iCK^&I
z>t5yFf_Y~L+!4>IA;f=d-w8Pfe{=eMrR~NQ!bAvY3FHBez1*_gc%yzAvI|6&f89t!
zokH(n at vH%vr8l$V=Fn{*4bj={GKnJR$$@v;3s2%NNKm6v^7jMc#e|_iZDr20vb><k
z3645{)_gZ8TNJr<JpW=`@2f2~Alg at FQZM0YsoL?iW^u*$+l-8;UsH3ne;<3%FC3Vd
z5W>YksQ{hiY!@%BHm3Bdj<Um+g1x5_kSuBT(fE6r%G3x at M-VG`6s8Dv8MU<zdtrJS
zPrjkq8xJlr(m!TqX=0I{k{$kuhBlo=xS%lASIvONcgE1fR}XDcI)kzFoa4QI at S@9#
zz;miLF&_;&_o*`QLMF6`f0`zfic{EnM#m6Ta=o^q7dV!t64jlau5i&7hZ)-J!A<VL
zJJ$!&{=g_#Qa$im)4{iambY3`m}oD9M>)OKtcy2PA})*KuBj*jF2z2Ta{Li|w}BrC
z@#G853&*)35ST5Ea&mbLcG3tGLE8iY8sYI78#2p5IgS^W;QjE)e?-aOe`5eBQs!FL
z<>$fnZUQ-1$s6p}W9F()eqgfm$iSnHIOv?xw|Nww=={lTeN=GVKcxwg1TkqfJb2Vx
zBx!y=L6=xLlm(+$%g_{}E;wzuC5$SwKm4-}PDA1DEMGEI8=8Ymu4*{!Nu{)3MW%nF
z0cnN3?X6kat({=Be{-d%C#Iz;l;NoLgVpLmq6i2XP~|s3InK5+Y}J|cXtW4BsW;6&
zg2IoZ7mR=>6{*pfQ74@!h!j24bTyaFu1h#8tLcx_(#lfNBeTsb#Sa+a7A(z9V9-hy
zjw4=mhf2X|k~iyQ?h!$Th!)s5U;zeL5lm(&gTS9!o8$RMe}2QQ?8Ep|geC=eak@(}
zkr<!c=9eZ at _z&~tA95d+`s0#p6B~jA%Zi^hqzn=4B^oYusm1Ol8s at eIup>n;6JNIB
zlIe`?-c(*P4vp{a#8iDN=SnHwPFHV_C3S{4@!*bmsrnSbl*3-HSoE}H>wi2K{G}Wn
z$=Fs;x)!asf7P}V*e~Tb07U(3v#2qNwJamELx4rD&wAjZ-aVPjXTG+sOk9mnAzurt
zJH2UOBcOw+6<y-~=Z5HKYma3c>8(i%_Eo1+DiAD|(VA%<=*B0N&>`bmq9LU7MQx)z
z)Vm>Z@{d2`cDJDwCJaSKQPOy3>vptPO0Kb%%K-`Kf7+^a)t{w)Wpfb3LA=(%^mZCl
zGGNtRsyK1639s|!L1|*1-aUin_X81d&*;IOO^#u~h1?Ca#&r2vTn$dJ*8l@`5-Gt!
ziktw6;MUi at +y3iq4^MwO=W9PEC)zAMuS9^#j2k}yk>%#fP-7QU!`RG(B=GD at EKA-v
z&e`c%f9Bnv!`LScznzJDsGmBR=Gl~4NRQiwP+fe#`2E~cPpaHIMX=QKSIb{^RanXJ
z6d~@X9!3O^6>$~;5y;as;5-o at odZrCl!NWL2R2jis at 8Dmjj5YjL}dpZmlApuflh%T
z(mY9bvhl^^NpVPUs#QV;dNI0`1B6Uk&iZs1e+s<C8%*dltEf6LjCQ1m4Z^<Ddc|f<
z{X848{t~h|4UWn1qPSC$xBs9<iLUZ%Sa($CB?uM!w;SASDxXm2^wvI)<UWeuJ$@5j
zw2HDGBDXfI>q9pWmZfim8#F^S8)=%^C0{YEOd6e++UihO<MA1l<zZnHhu3jm_0SY_
ze=HBn*@6<`8T%3txjHP$LCF{J80TFk_oNZlv%I)db*&$;OISvGz`o>I_8tN at 70G{J
zrfL`D1(<RR`B2<f5H4Q60_?62XHy%eQG!nkNP9uTFw7~;@XBq$Nn>M0Uxawktddd7
zauxT+y1531ye~bd`Ul|a6;z>Fa+*p&e=@$I5i<}x=58j7sD;~(2yyiz<@~cT*At73
zRN1${hyr_f&j|9M{yu45(|5Isu4^88M~tigQjoXN=o-MqKCTggCMR7r$a3!$I4Y6%
z%-%*xmbxVWQrQhSktg6C4rSR%fu_|h?FWd)pJ1Jid_SkjeR#@=`w at +ObX+p;f4g#h
zq(bx#K~#{9f?reO4l_Fvo17x{C_vhO`}f;#6J)&*fr$+X+9Y?pg(7EEyHK<vowatK
zmihWC%hIaAyfZ!<WJ61DY(9$L^+WFYke}rXz`*F)$Vg^w2g1XpxdW__b2XK+B`AXt
zSG>#uUZkpJV%l7QNQ at qI>!#Uwf2=@gcDS-d#wIUSf`aJlv*sy{k*<8YRPy6`jb2%t
zmeRP1NjnmE!jrJ3PjDzfZVXda$o(XcEb at j^4%eP5dZ5wSjZ`;ApCCVmqI#;+qF_~C
z&MU!Y9$j~DTbbb$w%bCGZlww0iK)s``0FA()3qFrIW^+gsKt|L2Pgjme?vQAE`ppF
z<|b_LTike<IDBPJAIvx78PY1^$;O3e&1E}<eO6A8r~0zus!?}w3Nf=OvztY(oI+IP
zA_{4deoMH{jIGFR2ifPz7>(t~bj7_k?I%g_JVY2))R7}HBR7L%Pd?o#{946Vol$PQ
zaQH*8>n*k$!Y0jT0>3Ine;htQDA`^-{=<#7S%wu{2^Bvbx?{{57U8!y_`9F8Qutnn
z7A6R#NhX$dU(Y6g7%}KF(IaV8@(6;NnYW2L35Fv8qb}(IC?a!7eC{7xo7KIR_050S
z6m5X(I>c=OMbtwU8~|#Y^%p_6jW42m^+vKN@>o1)z?GiN-^X`8e;;H;wmb;gVO3A5
zBr#Nx=cb)?7t~7?GKd85yxcaR$G#b&xmF)9tT at q#s`EHs&YhPV1&{$lYVlGj$@Ehx
zFAc`c65C<i#RlmoX|HrRE;@SKvQllu`v<utvF%jw6MQ`wd`|5cLw*-z{Ub2AQzH)J
zsMpDn{;P2CW6Z2fe=i7-`2_P-zo^f#TNyBl at J+Evw!5gUoNJGGCqr%Vf^1fGLxjf1
z1S>OsR<WAPX?w|^5d2^_<A<fijOcM~#c)l{C++DL_3N*ueaS~rwu#&;Fv#qqNsci_
z!GodTVe=7;OJ&~=_G|E;`iq=qFmc`<;FRwM&a}T+^#Brde;6gbOPw at Z;i!<(t5{r+
zY(Uv82+&zW?mYf3wt5d8#*FJd1-#-S<1r_Hyon#yO`u)j1XN{9C+7FzAODp8nqp)x
zP13y;4b{j!R;KtpXjO0E!EAscExnnL_)!lYe*>vxWmcv`-H8_X@?+nesl;)P*v;6l
z at w-yMSn`Sle?AGz`!t$JGrpfO)dv8oXdAhxA&+*x)Ra5kZb5WPtK+}gVyFJR7i|2-
zDNf%qNiL&>f|FhM_fREHCeL{mRl=@h<Ws=rr6!KJ{ob2Ky`5s&Rc$t(byL(h&2IH6
z!G~70JemUoG)!-Z3uXqQL at 075JC&p}7>0drTh^dQe?O19DgPPMy+$B^^s9z6om>|F
zwz{!Ti2bhcGJp?kWF!R(63V9Ar&4jZTK>{LELK^Whl^5;r9Iug!E20`87lxP?C6tn
z3~L>JKWGUUu~N;W8}$R;|4m91{WUQah+$O#+I)V)G?iu%Fd#<37k+YKlL$EjU$U~N
zZqhO~f2%WS^Y+$=2Z;Hhj>UF6&g))-yd#4d0fgTpb5;Sxqen*3@`qa&7G#k2$sWNx
zKIZ_*GQ?#BtRl7d!)FKf-q`51NiT`cx at v;uv>z5+z}}m*S{q~I#&*x>Ydb4g-rb6-
z2Qr8)tV>~ZOY7dU at 9cV&Yd=GCZdt?^mszF^fBI4CD23hN*2$BWQF3x?f*ueW4>IdU
z0p%~|XV$Z()ran5ucz;Je7<8E?>@gU$58W5?En4U5yekpX<%EzT;9FI`@j|QD!}@+
zf^!UEVFmP5CRVvJ;IIdnW#d8eBTMe{2j@}gWT3mjbNUZ5BLCegX+b?qR=An*2Z+5-
zf1_SSO7kE#^@&#ZF4yw4^UDysS{VQEo8Lx8QB21XNzJ=Ly1G`-XEuUO-<es5{%bQq
zAcXs;4gE?|%+T>X*EHmzoG~@(NPVV*k&pd(vaDfl#FS&p#z^sZL8%2xwbM_1QgsJ3
zkIMCYBSb at 0Pq!t)8jx499r>B~p~<_Pe}pT?h0%WNTqw<aMx)^l5Q9^P*Y{JIHcRxR
ze-8UVB&G#P-1M at r_2)o5hITj$cNt^G*LNin6RV`);}*c8Q|FR3np)Mcy2<N;KTJLG
z(nOzMW<2-sqc1SKUl*LqUnwF6HE_FWOaaEsO?nMbmQcUiG{nw8wJp^ohfP0!f7BCK
zB8Hf_b at 7asQV#A<d!o5`yTs!g=X$b~e9D?H5ZU)q=WyWPL#6#pHQqXllyg;xeSN18
z7PHangS$e<{2a!`#j;vD!<AGCs$~2Hwn?GM<5D#5XHx+ukFW(UC{J0u1ODsEG5kn8
z1qH?B!0)eoI9D<0kbg<523a3If5I15wJ+lpDB&1&EV=U2t}sHB+FOV`Vi4H^CuR$4
zRUmD|x7Xup^>gmEL2_Lcw%VDBrh6yu{991zM*Qtb`|Od#&`uFxwy9%ODWBOKY+f|%
zSHf at J6!BJ8ZD&cY<LUyJ0%Hmql`u=%LYJ+&r%<^6I7dJc+q<#6sJ-}Gf8*0mhf6>_
zsd1RQc1FdfMrG8oyP6mjK^cLnp4I!><yb1$x4Fj{Dk62rO9?iPJxQ#@60s(mOi&tN
zRnEsDTf85 at l}K2#6zs^oZKWeW#Cbdi+oM at C)Epim?uFFm9z1<NY#=LbJ-bAvjq7Pc
zT|k?y|NcRqtFXK!`OxQGe@^)msV2%zmD$qZEtzLZ+F^+Xw$3gf1nn8qm2LlInZK`i
zC`k1XJJ}NthYkg<l#h3F;CqmTHn^l*Oxmk78x%ek$=*7$j_16Y`l#ahE(os*v$)9`
ztJ04E`1s`F_cru{m(gmOS|%4cc+yK3K}Tyrp-OAm5GTl9FOtJle<MUnXrp*-fJ&kd
zs%rW~F)sD;X>4!0o4JY1 at egj$1g|)^k?&~r|7CU7-BUu~MJY(*CYvb_P2Q8)GJ$mU
zQ+0)Ic>YJZrx{sAQSH>`BxrX2r(sOC;1k_ChH5r`gtPR0#<LW8Kp7#ku>VqJoIp=f
z6=s2?a6Jg-%Cj1kf0aKd?_BejpPuTVfk>zXlN&OGgDph@)31E*nS~aa0QSq+#)ef2
z4<rW0Lk923j~Tr!tvjln+GjA1Z_A$tpgj<91zKs2m94&?1T?C;L-fsjdh%!hOF7)j
zT3my+7}8W{+_0I>80GFVzu=n|9}={_tV5#1K_Sp-$Ou_#f8+Cb+<*4mY~qAV1Z{w6
z;YH2mV4T4-=uFLf{@%!);V1L&eY!==FG~>NjCrV$mI}wv<r{uBnO%|iYDB14b_uZ#
z{zCYdzXk2cNPr?mV_K?19A84mp7sL&ID7Yu7CPnLHc%C3YpFaDKut!jco6vhvMN~%
zqTWY0+C9=jf80fgbP`=}E4=e!gn2b1xOG}RPl?O!`@#C%<~{{xCtL{n6w~yt)%t&+
z(-%9sF1p8%yA5Tfh-*9p`<v(o;s8eln&7xbo%;fAOKZArHo-dG8>q0tl;)Q5IdPbY
zCuOe4Gx8SNUG!re3#a`c%peZwo<p>eG7j>ZKU5u{f5UC%av6)o3Z4&LRH?SnRV&N>
z!w at -PNB{xktsiLV&hUA&k-*>-9yV~|!g>ZB>RZ{m%h!ILrPKfMEUk?6pur*{VYos0
zFoH)Wg_v at Rl)N^ay(bbCT|38 at tBaSMv{0$y^*O6~dkK7JGn_VU=y!`5;=HjlOtuI<
zfSBC-f585DFqKTN>B>7 at C;soY#A~m>+hYhrG*(A6y#?4{5R*9~H&Av@?LKxN^8h!Z
z@$nUv4&jfi!YY7tGk33cJNq$pU|oh|PmQ#KyzMD+#zK!caz`l#$wf2Bry`wkt_Tu*
z*sCwcxD2+Vaas-2?CST(T+>XyZn=wFH4a$Be{dQU6N^K))I8Y&eOnaoo#gxT6^eGP
z7HuZ=d!m57uEe*WE?6M`h&3qgF%qO4wHz2fAf&uJTzn1#J7trc1})h3aN!%^wvSHn
zc5yT<q@(3>GCRbn2K9hkG`>K`QSRfOT=Nx#B8Xek=vbdO>!{n{8{W4B{=BZT9_}1q
ze|G7u`+&Zy^P-4Q5FMCA(VTPws}F9uRV5tu25^Lh>_qqM64Q<&u8OYqMnny-KO|~x
ztq=jp=)S{o;V1->UJLguAanU%LbB-D;V_qpn4`VcQFQ}%D_Mn^R+xyIoU%*<ay5Lr
zj`#63tUV7yP8D*OD!kiEnO}_}(pWb at fAs{R6X0E;Ut+6!Db#L;dx@!@5Iq3td%gK)
zM&^SlPQ_Okx`fWQOWW?;gWCJ=*Xvo~ti at GKE6))AFa{GfDM;Bi0NxvDnt6uc>4>X?
z2H;GZMyT7rI}qz{|2mho3?1E*@Geq-QC29<4X88aW^{vN|MlFn?b`L~7-R=+e=)x^
z(R+LzOsk&R$VlYUk;mC(Q#R;+;eRz)fvl0+P2i7`Kc~emm#*#d6QErZmI{lcHQ&tP
zK<brx3)Pwa4_f?;&nZ15iP*7UL0<BGSQ0+F0hvLNgDlKN0~tS0qQzfn8c0=cZ$8LD
zvCsK%l;J8RU!c!YlI1)j1vmw_f7B9mXh{Eyq~ii_gN~LTyCO0b1Xb}M$01iXb9gzp
zBPY(^7rR4W6N60;*77mC_NVjyF at eW^I`g4=39Sx?kO9FVRlipOTA*~sF{8FYqN?O=
z&PLpd<2RHk(k1pN=AHmqb!&4>B-GLO_Xx6<K8=VAT9qCrBX-)QW=p?Se;r*jD?4Y{
z)&7VN8jL;w52Ot4LhUKq1y+<o&qdJVqZq;sfh-TbXA|k&&yqydopG<f9&T+jedme-
z7O{k(H?=hKcyt!4s2uQ<f>?vBbOqB?;_9Z{VDgpp+V~pq&JfrT9P=8x?~X(MF<%`P
zNM1NU2OCg!*AgZgTol-se;*>v!5m|S!TY~{6EcZGhqCdDf;-P{n^Re{h+hF~7 at GmJ
zoSo#HO}W5d4wW at 8u2c?=8U`c|-%*NiYZhFaL0vy9j<Gg9_+CzvM7PlAo|cbjDZeDx
zWMf~0kbp%{GWehIe5eWz5YNuXGyt0E at GS4deL3qJqPkdiretUrf0yLTrAX!x<S}Sn
z)V_>MXDkQVd$7~Y=2^e#v7;T-)7Kd0?!cF(GM5PmWusm_K)<>jfxAl0-{zSMc*wz3
ze=F4_wbLp5=?Q_8*$#h5yC^cO&-YP@%-?Jy<P6r58dSc#sQ;nbm6aIxqdsEq)(+z~
zhP*+$3SpjXMU2SMf8Cgnn++se)7k-r+#V$Q*i-d{{DOJn&t^P9Y{fb%i4!{wgrSD(
zF?lT~_{>>kS2|(_JXF5RYX{?m<{%U5T3)Gj-23fu3Kv#b#=_b&TvG$|MZ2(lXOKm@
zY}yNlfS|dgy#QGY5wgyY_b|wTK^o*}wi$XxdL(0RzU(YKf9eIx$JsgzyAh*i>ZbAj
z!>{cTqv_k(Km{#FXw>wE%d#~FIZXOhBYOi|4(@*p=0=;b=p#$-tCdcO24_DCe)v$X
zv(uyU7Di;D{Gz?JH6o#ve>N`8S}w9Mn=L4TV|Y1skt49WPy$Uah2{~5K=nGP_&W0r
zND4m$qb%fdf9g-42jTOb)Q~nFxu)t{n?vr(&8LTv`-$E*bEMXU#`MsEurMyB--(KT
zL2DCNbyD>aoM)gXm%qe+{j-ko>-4|4cw6aibvY<lOGaz~z$fVrIPC<FX0tS&3g4l@
zOQlFqfG>AtW-CqQG=U^#Z&f}<RSE!zyBZZ$$WGjJf4-Kx<KqFp3Anvgk>YnGJ at L4d
zCTKoGEbx=oH)60oj!J|lJ}D>;HWU}PIq3QTUD4s8hF2f*;}U~`Q%;+li~bhQs$!{-
z#%L1%c}Aem*F>Px8{RraeLtbCuO9VQzwlVs<O|VFM%776vRMJ@;S7-mxVk9BL?v#T
zv_n~{fB#)J4b*@RIhMu{;8<Ao7Z|Z&9MKWI3dYvlIxLo`&%lviKOczX at 4g{|EipUV
z$N07C8=Q#na6LR_Ib&U7`b_XM5}cN}zgJYb!%A~%wzv!n`3f8}mTcythP;@@jodQb
zo%{C?o(wQ6JSKY>%xt)Izs;}$yKj+9<FQ;6e?1?50q}ORDhBEvkVuf$9M4r-i?W=e
zrBRToaY5K=m=uv(Wn}3o at -7Q&B|H`myO_x3bbx&}niYz4&+ZM#E8nce6J<hlSI8uX
zbt>+}9?-*fLavMMitCedv5JF$_IuqsD3&ro<hCnuVP5#$?Q_MY%{>k{ty at R6ALzsv
ze;DAu8MC-E@)QOjzEfyHz*w6eoXb(1R5=RZI*_aYH>L5FtR>s#cGndy$UaIA{DS(P
zvU64E`W{OqC-|njHrKK>S-P#Y2a(JPba<ZBx`^TWrrMeZ+xNF?^#0VG29Aw31wJPr
zf*lhDn6l5oJM5`f^hjna(6_!dlpFIzf0^`}V>i`fyjN7{$R2OCw=Tl0TlJ*5QQ-?1
z|2<dnp}5wY=+N_l&k2{NWQ!0MaZeS~{7$Xk4uJ`c4c)jx48_^jT`H_Peq^j at 39b`=
zDHS{JBjLYq==pvR67)h%`V=Z=Ha-zN@&H7T;HpeQulH!g;zALK;P5*+i6R^2f2pm=
z3iq(29piBrNcf9oPJWLR6z=n;e%Zktyz0xh&jk~XwMfmc1?hE02-rU)&M=%Vjre5!
z${BkM*i}eMy<I>0Pz!XnmGE^$Hneq93o~0l&U&BLd;64Rz$b`By;%C%xeqcXpAdCV
zS6#?3S?Ch#zaUb(_h5-=>}9xff5K4L^OvjgH_&--(-w8<0b;zcHssPuzceC-kym{r
zE<M72-Q)0f*hcVPaw4hYm9bT{2UWb&Wom>V-R-47MF^f^u9b!~7j*>NCv$WLrX-7N
z6jO&uIY=o$mw9R8sPpDQ3+fD=fs8Rc{Dc8k=9NEC;I2VQ^`%jfLF8<Xf2o4c-u*}S
z4haxWjdQ>{Uh8DtG6Q>w)yQhgGWM;%Z39#>a1mgQLp49M>FUnL;?TctQk at 8L_15$F
z5lxdH&iTW-pnt!T0Ep!Xk42$NCMdAy7aO(BMRI978a>RJr}iu0l+_RY1*XkJ*<{MQ
zoCZDTtF<e|l6r-E5u8Yhe}zi}=h9#7S*U1n4CjMS(M4<pC<dnA_(<B%6}M!S&Ic!d
zfZw=OSBvXA%pnPDwGO7rkzfiO+RE8&PPuiX$H|YGyb(2^WKzMVGZ>+6Tz-X3+-5f#
zAbI%VXlF%hyQ>NwQCRLHA+_jG9YmL@!g8{KLI-e#h<#dP1mt}ae~$G#^uVx)RQ2rK
zbnb%e7&N#bQS+&m58m+Ujkvj80$}u=S%Cv??=O!tImw6U|Aw7bSrBO6z%q<q>eFql
zC at -=ba at n}vesIki8p&Ju5tYi20vRiccQSz~Bf at oKv<u2cQ}~3&Mz8)Pu(AEEsmq{*
zPtUNwDak{`NwF$?e{>_bC4-1=H#@~lp6e?QSRkDt`MA6oC=%?JA>#!#g1tm6{P9)7
zrpdWd7>W6R`Kt1EKi#581%{4106D1{PGMxs-fCi?v6;3`UCxT#2>A?h&U-W{4?(m4
zpz4s?1j>w?XNbJj#>inKPZN7zO*2hSBFSR=+CXs&tk!9*e<^mqjWe`($Ws4dx>V3O
zE))y!N}!MtcFh1N8 at rqJtj%KOxM5IwtpNHBj!$Fz&+Xpc*E%7pD`}%h6F2aaR84?3
zcM~HF5dW6uyv<^ssuI%eJHiL!$2~ST>%oA9udwZ`M`*ZwM&~Pu$+Z$KODvVi!-s39
z1##Spx9d4Ge=8fJ%~9&%5NP+fm^rP0+<&yHMLi(dACp+WR4!I0fH)vd{eDLV^T}d(
zu(3<#Y-Zx%ik$mAH6!6=VN*wD<^<j+%=v_Cc5Tl{WG86gCmeCU!-wa>(#6RaPSJU+
zH6(ayHGC*|3;f~m%)-=GD2(>{Rw<@VQFn`EMfZn8f0v$=T9U4t(|R&`WJw}WSffem
z#)j26E-$&oo at _cl!Mvs5OMQh9O#Ibcc-4AbL8^qSdZtusH_0VWlddcuf$Qb!QR9ZP
zK{$3~D3gRkI_6~2=@M#R0M}gGhU^6BG`bw0+{)C at WUd)OaJA1kd;S>~7%nG#y`Gs0
zG98apf4JhSXrwa?U6!>G1zmrM&FirTm8q0d|4tY^27wW#XO!5Ef#~rdO}IG0PTZpn
z5uc4hB&k0?237JBw$KBQL__WzpgND0{9sZfH+ge#a;*O_AHlgm2_Y{3JUUwWcBwjT
zi2_3YQ8jbfm!s`tTKznxxjO8p{j;GiS{Pumf8bb^VzaBqiI0%vOA$C1`^P&zhUNGs
z!ibCdMS^Ye6cY~H_QUceaXD;i$I+Q{jH at xK*_AzC5#%YC>Ixn5e~F!djWXj?N5bS!
zH~b0CXVs>@1r*K^-&Ck;GSoGUdeAxi(F6_=5s$)U^n(d`e4^mpjRd0twc|1pm2#^t
ze?4{+d7 at 6s@6$u~f(^WSId~KEAN<$ZZ<PGM`ClcnydV(^NPOdgNWt*&2UM*m^wi at _
zeiV`cF6kO1>6kp(xAbV~&2lHR2!Jky@<^2rOmnYA)nhi~x-^Zo at M<`2#+azcv~_;%
zh at jN7w4lSex_Fsb!uRK3cTqH*C%JOMe`o>&l}CYC0tj)Z((=C(N%2Vn6+{*~eYeW8
z{Pk9RSN^QsZ@=*QHRLc0TM!OWVzl(`g36`uG(O~qXYmWz+~$>0m6MXd?tThK!3TCc
zERmc<u$zK=!D;Vli!`JGZAyiwnluK!yp at o{;n8skD7liZIL-^gVfO_ZX@*=$f2h!q
zu9JBP at w-p6mYqX`KUs5Dl*dbQISV at mh%#@U{lWw2vr$><mE#&xA}t>r-I%~iq`L^6
z9;9-oQ*<oF9m9GI?n_v*I}V7GzRjm)GgCV61~&)B#}=F#@AlKfTA@>V_iq*5VfT2t
z84t}|hS?=`CKPeTXUlJQ&4%<<e@~*zv5pdMteNS5iR|DQMzH|>HitlBd_iV%U0)mI
z6%N$2CDlj_P2TdlOH5e at HhSOXqTQ?7J)>Iy<<kV+vOPO!I(sUy;UQaRE(NO;ED_L}
zPb8;ISdZWYu^d8nLKI6b986TZRuV?2!zLSuW9$U~%%9hM;yU3PMjz5Of6c5HV at A2e
zG~d+hsfZ5ij*wzLOQ9{P2ezi;i9O1`C#F#7lc1Xjo}yxvq7 at nFz}b&$L9N~6Y+hje
z5nbdl)SvTa_PapNLl_IGoRvytC4 at 7w;c{6hx at PKgVOWYRJs6V9Wmd)`u#9Y1-iAg|
zB`2CtP2@^;#Quu^a05tie~O1V<h3>wBkuC^lW((hxku$kWAy+sCg@?6-9TMOeYO~z
z*&Rw?)Mb*sTd5xE_8%WBc=Ng${dkYOFa+{~&r+wXargI(sWo=HT at J}qAwUi4g;S0n
zdQLD^0WBN|{=G^+Yg=SDv{2MAkt*FuKcuwv&{-32_N<|>VHT@?f5C_{!R|3;M4H?<
z$PT=3)`d at 2QZx;RGKg}QnCf$}>QYEmK142&CmXSvSqNJ=-!@dxpk65!_dygqHwyzy
zM)UJJMu8qtUKTndTr$d`Oj+Xw>u-qg08-o16a)r(Y5BZt$@sn|bBf*4n-?1i(*|Wj
z3?ZLi#TTgM#zBkZe<xufUUnf!T-o0g2}IsR*{ud1>+iVOWMBS#t7cgDafxC>;znzM
z%oA-iluA-OS$xLu0+32v2k$j1MOl8mR3yR-qb+a-p~@DTmU*4esqpbI{JpsFN<RR?
z9<Tgw?duhf>W=L8Uvx|F!Hh#^`wnY5Rv7fuVug#!rR69Oe}^2N3o4N|7AzK&328NC
zZS`ONhlYsNl%OF-Y*P7;Dd}x=5xPO*nh59YEQ(0K1STT)*UYI+Af^Ye4?R50A!6$q
z(L$d_IPKE)(DO}gma<IpiH6cG1UUv_iyD9oJB)zF%DLWs0)A_k_5gQb7cqqT#)$N-
zG|R5e-Faa`e<k6~fJYW&a6Zk?Y~Jewll+M7j)u at Y%T}2b)^?+|RUC`8(TI~xoj9BH
zF6=S*Y0?$WHz_nD#I|<vmA<8q*Y9yr9O70RvedRqzj)$SLW3pi5jA|DvI?d=Z~zHp
zxKTRL=DqNqC}-pW)gUh?A1upY`Rj~C?J|6_#-W|ne-_dOCN^LJ>8YG9sdtreuWgzN
z%($0XJ8_bUH(_UpK|aH<O~vGX2kZfi?*ngqX7W}0sLkb|3)=8DL-fmlqfP`({W0rP
z900JDoh2ZPlT|Q8xjPHp at dSW>6D`MtE-Wci7*KVPn|u#_;oGmo6VnhSeS|Oy5ncI)
z8hdUkf3B+-6+Go8r!(T>3j{qU*pWS`I;FqAfYO`_&q<+JXJ^n6%25~3o$IgSAuO%A
z at h$jlsAu9;#{4PU1_~Dw_`vC^+OW7O!dzeSC%GqJa;LsE$X&B#?h3h^Jh>80nT$Th
zX-t at DVcr_gF~UX-$19fa!p<aLYNE{l?HAOuf9-;hScPok%zS>bwe=I*-?Md|!GJY_
z`njMspmhfq#f1XiYwXMUc#MqJ9P18H`_l9E=ZN*purf@<x{|;wy`#FU)H$5nUtQ~I
zwJX5vzh%2b{9CPc9KOd?iwhcFsc%kAZe>&9EFA4)o$!jdj^mZ+^>$R=JiZIJ{5H`b
ze;_xo1{LXSq7Ha;IDUa=i|6R_J;vp`?|wzFkJ*)!*10ch&C`Kx`vh|@VR8NRwubDB
zt_v*`1BuvA1`|geq9|CnsfEFszysKpefL3nQR2v9t*!{AU>_j0VIX?XL4<&}Id>^0
z5Mdkap=kBNJAc!$5P+oH-Uz1TGY%|je>@#6L5=4bh0rfp0?8YSyYVtKGDh>8+cO+N
z>|Cm3N*hD_v};zILx`GG8b=6I=!99`zZB44JdIJU=Iqugn~sidyW=O8o$$;JT5<nB
zV7oClXCZOIgrhX~;8gjQEuBsUktJ^H0ON8&hx2N7l)#qI?QsL{k~lL1Y0<jbe^!R(
zlU_IE^u{2D%nj%@dl$jH>;3#I8;khg!Z&kK_lhvD56Fzp&W}04+`_qP186z$d^AUq
zo`hH$yJ)U0)v8?byOf(b-x2*`svJnoS-M1XP}{pN54+EAv_t--Zne&)l4!laV0>~Y
zi13F-C}QqQ<u1xF=##yxaHMv#f75(GTDqcie?xO^9rM6@%sgh21n{Y>#@Xq)Xbz)j
z(j<Waks4?N^VxxtM^W9RO=Gs#;3P}VmsNDl%b5!Lxlz0<Ruo%3iz0>$^g~frlw6pj
zFzw#!PaQ53cp3HSkN2<VJdlhJf`JAN`K#>lri0mdg{E&AIvlWm)}d#9f4;A*AAByM
zMh;mpd*ny*>|)HF+ERW5q{TIlepdgXpS<S#XCn%kJQQDG4UU&dl;!i%tPnBY5 at s&)
zw#T~3grC86K&!XBX0P*E%%?m`Vl{O)&)l+`+hfmZ2=Uxt!?AD~b7^6z&FdmMwXqr)
zT*y2g!xL!|IyB2Zc>cn)e_<{LyWqhE$xzPc=(nPgxuq0`^<w)6)yv+kQBJtQJmN5j
zi)LpM)*zF}xF10#LJGC!I8sh`gFOW1S+~}+fYIaCnrcIGVjuLPncRD&4AfXcm73O~
zG0>(s6N91j_>x`iU>*@y<1#Q at F@)5iCg9isDdofMQk-PRYUByIe=RS{u!dli=bI02
z_I<@P%{vZC;t{8YR_ANIY`sSzDiA9p{{ow6^ryq>PA)_aWYUss(r%Vk41i(+H<Tz?
z845guqbT0@%->siwY#y at +&k1byoYH#yDSJ;Ck6sQ{ls=yH at g#Yjg>(7gtzbc=@#G;
z)_J?&5H@%D!58?xf9b<s?Pt*vTv(zo(n?j`mFlO=O}~Me%u{mw-{SLA81F1pRS`+d
znFqEkc74Ihc}nE@!#^G$hnrPm(brT`PwU$ZXuWXGoC-j?&k>ft6+0D*Ru->TGgzM2
zgHxpsA-8+bQ1DcKRs;2Nc=fBoJM*wtO+V(Fg!ms#j44n9f8|}>#gKAGTy!5V!WL}u
zztXre#(Fjcg`Jv}2xqmL6{P>dyu<H-=jyaQzdM6-8K#6_l!TJ@`KnwR2k}r|22%}a
zL~z48=DlEs0@!0R-m(bJ<_Yp&-K6^@Jl2hl^{-KHXgYPnB2uOtuj0N^4rka|$gD{#
zjz3Zo^T)uPe|v>KeNx-sIy%aDtQu;^Qty+E4;**1r%!qT)vmFzw0P8bSKZ=e#C)DX
z7ft{)12kM6_Y|}l%rTAPM?U7SBwmg~Oo1t1(Y^=l6!R-yrF?kkHq3-`8nAzoaTYT3
zf*7TiBb8^xZ5FbLk?MSjAZjj0ZFkyLL*Nv#q`|f&f64H~Zu&U8&F9z)`1S1*U}p#T
z0&j#~c8u`44D{#on at OCoBRKU_Tsut}y~ngD-o;rPvq<I<*xU_)&iqpxU%govnGsM%
zpm~?d+^{j^f}kji#cY}cIj`r#`|GgX)xrBQeKCXWeH133dT|gn)muF(wUlW0NZepP
zlm4<+f3oULpo+$DPSTIK{Y6ZtM(}#*A~QK1=$9a!y at Inc&yey_adm`TFHFwoz(5(q
z7m4vwBnbsU#J`JoLd*~On><bqM*ssaU&IX|!_`<Py$;V(Ei`1X@*;(7{K}l}4e3s@
zvmM&ty4F>0+U%eDAGK;p<8 at wDVc)qauU}Bge_ksEHQlZH)Eccvexn)G98uM1)Hr#u
zQgXzHp7L(c=v$z&0riBgRd;- at SZj`^<s=AJW{FJ8DHGoExm12W6DZcWU6^M-o6O2*
zP89}H&0SV<q&K|<Bjams0hsG81)zrCpbm;k*Yi@&D;v+ISv9KVeINHBbG4XWE5V`T
ze={O^>gr<h_Hv^YKY57Md-7Jk|5Y|1LKFUWxB{q{+&D=MYfORH$}=lS)1|U9)r(!|
z7M3|Xdu8$Re#a;p=CnBh(qYEAU=ipFCimnmI|NR~j>oBh_{L7FR7w)qZ*T(LcgG`3
zM}C>s&F=XdWYoT*i-#a%OkM0Y;0v~wfBdsRsqAFAWznYP0X{)N=G=<{W1(c95psee
z3u`<6q96hP-+dbiQ$le;UDjlkQC87f#}!bHnhzBsc7U1lC4m77P3K>2^{lR4BnG+g
z23eX5WKZ at LlGa|P7IJC&r9QbGB0J($TPm0t^}Lr<^3P#!z~_q()O|J!Nw!C8e>9I+
z`ozgmR~vJNqA#2Syc at gvUHMtzmG&*?KHT~+7Y{~Oz;=@7F^Q<kJ>ukKL6_uKztk9K
zIPC#fdYFtxITV^FNQ2u9QS5IBJgmS-QplBbNcQ#v2Fq7+K7Y&;yFaBWG;IripH*5}
z2jjf4)%D at Ch|Ktxq8+~7PHtMGf33 at sSfqOBiR@>_8kR$if)X%FqTi;{icGfAQ3PBT
zY#z)(eQF!zoZK9jblcP06>CdTPP=5-S(Ms}2O at gPRvK)TO7?*xEjC_t*c{xN%R|ru
zHMe=zQbzQ10x4yzIrpXc%ZhGd_$sU9 at EwAZtB-6b3jYJNW>&dNYd`NOe{`1G+vj4T
zj5y&wxn`B9fmxJji-Hp at Trp1K2ToCbeuL9afep$<vbS~}`?_OjMPGC?W>LV_hUb*?
zH|;E(jxe8{mA<`EN&)L%ctI3zQ|X)@1JWkTa_#vQ4l6i1O6$`4Fqdm+STXd9ygSpg
zcEA?Wen+UEMhmf4e(G<Re;?O9YbD#-)A#wF4-TBB{)%;Xj~3Xk at xV<6XF-|-V+<_z
zU_HR_NJ;`a%3eON at UFs~eDsZ7&cJ4F!HRDUV*e$u=&Lhk&_p=Pn}_iPrmkMrBDcT!
zRl^|Zkj!~V*fspZ2cRw)D?x8Cm#{BFpDb7}Vp{|ich_h(ZesD*e<)nqf1nl|h=0l5
zdbZ~B!%6iT&tqsKS5%S7y;Rc=yocuhPKsh>JT{l`#y3U at R~?w`EvZgXDU`~$MtX~k
z#I{xL3JavUNfeDcY7yB$&F{oO%h@&jHN-3Foq356w=D=}hsKEJj)PimR&ih=r4^^1
zI_E*mX+EkIE}`~xf4fU=F|~@j6!laQT-~|vNg at e=7JWmL&;>acC!_SE@?lmf{l{?B
z1dzKZKrW2q!Ahf2n|qHt**ely9|7jO$sv52g1 at O5t%ki=gDk`k at p+Ec1dFz<21ibA
zKKSyqY32|WWj)*&<zIvDP~2tBRV>1Os-Em(9J2k-DrK8!f3<pzjHm%&Dc!QgXO#m3
zPCsxp?xkxXv*Sm at dQ(9A&hhdY^dB<x-Y8J at XvcgKY=XY^>zBRHM&Lg<dKq0A{UDrG
z$@@uE-G4OS=@~cz{Qu6<(6;cl;k&e4wTE;$%NPSnbW#i9{cspki&0$kpNH*+d$a8K
z1sQCrw3rpUfAy_ at jaG+Jxtl#otA6x{l(oreuo%^tS*TNex%N$GKgQahklVyEJ3-3*
zw*TUxJq<J&hgjfaY^aYk`-Q6QYSD0%qpcAwvHPOWFPDBHUewhDa?;X6)Qti8tu!N@
zSoW8?J%Sk&KQYR@*<T3m_i_!PD+HbUnKhZh#d5TAf5pP=1NqIp15X at MWpv6KrF@{_
z+X_yje1~p#hID$(ko>~#{J~5tD}Y-*%^A~czh%xi8o<fqO6CqaDe#WJ@$YxI1$(!7
zDR1eUjNyoY<0eesw}Qs<g!bWg-qceqA-}yMdJ=La(*!F}4)73M_HuBRSK3%yKUo(c
z%QV;2f29vYM)0D(`CdnRK3xL>D6>WM9Uy-V#)xG*sso_e2ZqFIL<%`ypQXG0aQTqK
z6K{@}8zH!^xpzHblw*7OOlCB%M7mwRHZ7>b^ny6kAic>^rpYaLfuP|0{!6*Hy4Knr
zwgbvK%|h!3>G&&<cRLtblQ=JyP`)=wAeC~Ee@#C<KbO7(gMn&cCQN1N<!d2AwdV)(
zSvTrAKEK}ZL8nI$@qiJqE%~Cai*<B~@XjZFh#+i0bz?X%oeB>8 at 2CY$hx1i5p!_Gw
zAt8_#ij7MSo31tqpt56ieHL at THNP$wN=x+mg!)qfNFG+wgJ4#VRNX-%K+70%)D##j
zf2kRdwdC=WiC%J7)a&@AFw62LNmi4w{l@)VEtef21ZX at P0+c5<;wDSC3_IJNYp0!7
zU?vq_6^e21d>jEixizAjYQ>itHO=7+95;u4(vJG##<1gh+4gERD!JOpf-}vm6M5R@
z2}vspV-|ds8uUOwbKu<@z at Zd}TR`&Ze{1fJRfNYlmQ2!1G`@e^jZjUPp0DP~J3uDL
zOPTes2pc(mI<6VhF?XpDYVquZ4z1?zI}_W7eeytmYNWs^KAwN<@*z!d)4HQpH5bJa
zRA%~_OrWB&?tT$%0lbt)8RI^w0AaLm|L$~`K}>4X-Pz;Ke0{u}83G#}@Kf&-f5<;Y
zZV^ct1hvz8Qw#9?q_O*Bc~|(5hiBOQEr)25i596{rf&2^gOIO|_{@nA|F`B0czzNx
zTx&f*Op)=Sb4-wY26HGc@*bj-`xMwY8u%{4J35NGk)9)aG7BhHDL=q~Tb^K-?1;k^
zm7MM}Rxj5VP#^kTIBb8e<cI$He~u-o$l_RTwtHS300pZGVva`o`-K^Xv6NL+dgUh-
z_@;$2pXWgbl$m|Yd6ke;Q*&wN?TGwolB3p at a_O!;v<&coJ+~&bxpdb#o7o03Z}JPt
z!Y&S^sO;Ji6E?_Z{DaTEim!Dda!iIo8MiVR`_#R8cumlT-xfnC4*FQ6e+z7G1Yw9i
zuNGK#0GE{b14^v(Rqh#}_VMq9UbkbR82h>LvZ)cG^EKMf<c3n8;;|(Uw3OddLTM6B
zq9a5=WseYK$A9y)JE+i~9p4*g^7oxrb6O0E#TQNrbvbHzeNuDjz*3IFE=nSu+a4jE
z{Mq9n{pp at z>S=jvl}m5ae|UBkKxVSV%6-~1 at sEp!%k_Ard~bCXKb}E=!@`s2EGF3c
zxj3{)xtGnWv<nide5v!C*+n{bkSEEzr0PD`G+>6z7u}i1(!}PWL>u1xEWa)h50>M}
zx1Ho?%+888e{`^+=fua$g9cQ09?=A=`|g%CUG4K(xJdAiD4h3we<Bf_WflTm)-)3<
z9#qukY2Z2F>}&w`rV1y2hudWNdPO<aD}@evq5xRGHS^XJ&6 at ob(R$+C>pjR<ze>C}
z(4d;%ESmpo{0|YX)G0WgN&*N#RAk7{7+_yI9C`O(>DWZIjr-tEVkVQ-v7bp8M--Ei
z)$NrPQ2?Y}Z!jSIe>4^*Zss=;Yo{y#{X3$d-Op`~B_g;#7p?M@>qU&Q&~X6*M|Ait
ze%f$)l!4su#L9Qn!&gr+hhfWi63)YTvQL at 0ig-r%3V)c~o9O)bIi0RjlGTnFgde77
zr6w&eT)0n_jtiL0_pa3RSi?VfX+e+rHdW~Z1F&mhH(a)2e at j$ezY!@T4~j at 8L*h?y
zYv4SU0h%@rVOTNikwA<&N=ojdh_`LifSTihJ(tiJK%5I)`*Y3`$J!;|_D{Hb=>{J=
z*0FHrYM<8u<ML7$A$S3smX{~%3Xk1&+Jrr$)dg#JA_ISg%Z-mgfPnb)d$U;WUR=r;
zB^{x!fp~xLe|G at YbJNyPzrbEbX9~ZXVg}W+E$A=1omuZJM!>}u9hYZJ^d2fk&l4 at I
zTx0k2qj=K_D;&zitm2(KP;woBg4=fEk8p8S#ae9Z3<I<BcrIiLC9SH{xB%{A at FmDP
zRBc+?h;-ilj^;_d{m6ap^+?|eQB?#a0iz^k;}3*Ke+ypLq{yNd1(GQg2I)LVa6V!|
zJm!D4wZssb^XxB2;)7SKf|b-Vx*G1G^@NyB<?_4c1qloQu=wV at Z|H`WA|E>Clg7&M
z{m8fXs%#eNlIP|%*Hqw!-x#%0qfm!K6{FA3VT-N{<1y at Kra%GHk;e~+{Mb+4b%6I7
zvV}iYe`VNYsoCnSe<egJijz2edD>1?7T#;QO8cku!)`8and4srmUJ51n|p~y;yKXZ
z=HOJ6XEl?8`2KaH&MV8Yi!|V3A{IcjPe14Nqu>q}E(=Z*Vqbs5Qst7W_yx;I#2a5u
z5f|7=0^1I6Ar at 4)TY)%FjUE#rB)9}VFM8Lze>}(=-YEAhG<5`0mUXaa7Tw4WIRspW
zUNK_5{ITOz8%7-v*AJFzJu&X81nT-c1$7;`NU_tmUxa3z2-sc_>V5IjUz9<kvgWb6
zhysHg!MpCfWlT8SR-e;vdgzh{^BS)RI%H`_ROcR(&5fO{RxwL3`jA%69ATD{DwGje
ze-ZWwrX!8=SQ9kCN_u@=N`%&I*q_J_lg|gfEmjK~c9)dB-~R9x{JEdYyhKBDFDuuM
z$s$&V3X~kgvT>;bbS3es3S=x6{FRCf06S%Gfb<OFn`Q$48c4@^3%vIS6 at -?lq9;Bx
zVXQm(zo|H!(6mIJni;j7Uw{@%%+e-He=+7K#V*C0a7z1QVHS%(V}Bo8ZICki|3ONL
zHLI!;SPVCOY;4{vpswA0c;-3woY8J%<?w^fk+Q{K3c;XoXN)M6L9MaIKQWY*9Nn<x
zDfEqhqFB3T$V_gmg9*6n0Wa6%eAcmg3f_z`SMy>5wyObGCo0o=-7zq$d;s$qf6(#4
zv$JB3W`auiwY at N7a#4_t_IA@^B)2uIlR78i9Wm5B-&)8)!q>{!9)kmrH<2dHnVeeH
z6i at BTvJCJ?Vw27p*uQvzn1PjHSJ}+xmJh>AYLjNT+=s9mNtg;EwB7x4-b~v{*a9${
z<S{&NNLV|hzX~iZq~qIB<Sah`e-PkH6Bg;22z!Co)E;V>G_fc>r8P3 at oTSzRYa)OR
zEK&!UYkKCDRh_#YoXADjRu9BeG^NmCM5ah<L2KMsh3q%XoON?^b|(*Igx|HH{w=U|
zHHsyj=98a|VI&dJ($_Gx{y5*9USx_l6`UYgFBO?kN$6`o6$J{0ca~z at fBC!vr1dKD
zZ~_!D`)_$AF&sY$2<2;*u6$__t at ezFZA0E(8F;|LpGFA7C(p4wgK3|i2RHrB!bR5o
z%pb&@BQ`id=9PNk4a(xyhv&_$t>;P(40XGZUmAJ?Gemo>NK~AUFO;(w6lwf}H!MX{
zDWWPlcX-SDYSm>&%INq~f5H3Z{Sv>}Iev|}6;64ha?>x{%yY}KXaCcOa;p2Yr^;12
zO6gs-7Wn7tV&k4anyL&@{=qB}Y8)Z-zWOz-70*_-o0Oc&z at v!l&d-5r6yA+(xxZ0l
z2w)~YIA0-=%FMjobH5I-C<SR1j9WG+*e*nNNrmR!y2^g&oP$_He`;l<nSZy$rgMX~
z%TRMYRdly*ClFxF!aMYMZ{OCm%WJ2ICqcBmrg;BPDlk#T7(GH|Y~zaqAp9Z8 at Z0O6
z<=819(O}=r1=D~LzhfEMX6s4dXfH1veqyp~I|8C_(jAuf4?pkFW90LZfhE29dig|_
zPkgPMRV9;|3^%gGf5*EgRpzq>iu|{q)(oPH3*y)Kh>%Xncvf at fFYP8|E=~+0hBrC6
zijc-HQ at PDv+OAEai;i at plaPd!(3&0jQ$Aa;`)LUzSIX&qr~&w)PHy%6(S6Pl^sTYo
z&)1n+$-6uBbB{dc|2I at BZEc(1?BboCYTWOJBrrddfICH8e@!OmOGXnHEGObEY;*3s
zZfmVnjNwi3g5v9WFebzsf_%MP+nOq!_8>4XoyMc8;gryV?G5v3SwGmVRzZ-YGo=MN
z&cMZs7AQgNABw%l|48_1VU*vtNyJ0G1hI at e0DFYZk!S0>zz8j$?r5IPeWP`L54f#k
z#^g={?idK&f5`r(tOR3Q9j=h0nL_uyFt|m}Z7e?p0ue1FPtT>+*#CRr2KL#wQv71B
zV0I+lI%{Tp9@*SQ!#My6K=!|#xKCQ9R%+8`BsA*7w7wzsWuM5-j>53FEn7u%IR{UW
zT-3c1u!0wMje}alp+WH0gqd_xyNn&C8%(E^p~ND&;fDfL5`O~j`bxp<I}YJ3XD6nJ
ziIs}4?RO{iuig3v7EjB}l<Zd5Y2Wy>=-R-bF$j8G7c3B7GSM$vJCA2p^`k;c@}Okp
zyyO(fTAAxLKYse%a1^^WAEHHV1BsDc#m}Zc2dS!F^xLg`qJys6S)BjjcU9^%+_A&O
zz at wEb=s;B&ntzDU_FZa~cgs_l!xknb(78JOd~-OOd^D><7M~BS4tenQ8T`MNTRdP7
z<eMi&>BWi`e19k<0BEav4=GUK9_Jn`qIrx=l8CHVeO1t>1pW(!ENMc0>T4bgd?7Mw
zxdQEe*U at +leqKb|^JGTDA<_K|aJLN9uZn}KH0Z>$0Do<?a=HA-7MjOpb%J+tp`X_T
z(euw}LlCty+wju2G6}mW=D47Epk<e>jJ@{^8<n`vL4u3X*v0+n3=p+#iDp0a1UR}n
z-a<;GrSXO+ZyH2c(>s6m=q45ht}^FBq6ufelSolz)~0Ux?f)lFkc=f>QjFH=-LLw<
z>BCB+)_=CL>8%|P2o*LU|9O+-=4K3Aevz1wN?uEZV6g%60>@FT{RiTv>c4=PWa>_l
zMLL0$6H!Y-w-+n>G8b59PJ3nHo#o+*Gw^c3`4hOX0IqBbM3csB=zHvhs~#aMEI|}9
zjWBT?`p}qES1rW<w9=6?dZdB6!<O5 at pY9kLUw^o%jhWaLrDi(NU4C*_62a&p-cp~l
z#y9gKOTs`{Q9!A#HBQTEz6mEanLbO0cU5qYY+Rw1ZjC%Av9*2alD2aXT(R3?qNzE-
z25Lt#h|Baj4n)XaodMnDP}gT~>j!yRm5rBaHDPi*k2nR=EEjuw(KTPS&|4j)!6jMx
zdw({?&-IDIk(gTf<;V++{vSyHP_{FR*8QnKEF}$Pr=B99m04+7eY7JTQ6>Kl(rISk
zd&)-T=CqGQ+SUd2(VZF~8ylEYp}gHM?q-l~c=A at s^8>)k3JwS)Wn#-y0s%?<tGCQ|
z;8 at -PJwAH~dy>}%KS80n(*LV!HjpAV8h;*_@}~5dDe}cxkyl2KY@}$~e}ToTuFT?z
zDFVaRCcJxk&a1-AN*!rkxkqbI)9D@~bn8E2ZwH`&H-gG6^jgDKPhmXA9@*O69D?cg
zol~95X!`{_Xe~Y|7n0QI?_XFDUQ%$$m~Z~y-!Y_DQ``L#x-nIgIr{cUOG9Os4u69O
zSfikE#!p6EO}(szO?NnWL&^czyxdvjON>&sv=}Cp*c4T}#8KphT^R*wOUcY)1UqZ`
zh1`;joDRN&C(IcRe at a{A<uxuZK;(hK9=(eBr7y5`v;v at T<3Rgl2xw8Va)WfcfbYke
zOPNjDzh$!``|8GmW<kwCJ@|bR$A1t;+lcd`t3A1Gn#bi3S1VNj8p*w>GWzl)h7afS
zSa;dG4A?!A2n_Wx{wQ9Nz}L%+6 at OI}u)i*wN`on>2k3=?mvh`e>B^5|8La^Fg_(|C
zdA4>D&i}V>5ZFAysIR^;_tIMR_s7j0`#%VYL{$TLYluw=5-y~NX+7_D>wk-l;|T=w
zH~S_y2FC?JhQh#5z)^u)%&u#8Chk#i7alr~OM1F1Fs86rbg_Z~FFOAy6?OL}da!)Z
znfYCw8IF;N&GU6<W`3^UVTr+$90~I5#j8X7#Q|8<^kUR3RQiR%SXbiqV{%<y6`F&+
zCrWtp;9#x)mQk40LDCtBoPQ>Hzh2)46e)K#78I3s!5z!II+PHuq5wyFCPt)Ik#2YW
z=Efif<4 at 2!BQvtDm}*1<%kS2lwGc}mpLm3qCOCtd>o)WJ&|l-Wcde!B1i!z2t1_08
z^PKI|=4p)Tc>^Z+4nEM5M2*>$Y>)@Sl*QG;fU{F+Ui*R~<lb^q3xDShYfLL~oy at 3r
zjWf}|Qr+wfIhp7s)hV9xK6gLEUznq>ct;QL;ggDLmtE~Gd)*c*{o<<ypL;XUE&tO+
zZc<)8fVosVc*OvHpj4{dEu~cv4c3bQV;KU(tQz2%4khT)V!hC|`Q{wbH72Yq_TDm<
z!9C}Mf_TrKj~SQxB!AK}UHZ=(;f#cV<q_emNE;DU7`6hrGG`s(jYG-~@*NkVA^-h!
zJhGD!t=Ec?t#b)w9i5g<z{ot1nWI9^mcXe+MMv5dx5z{c;?sz&qU7RL3<AMMHF5y-
zb$KxEaU#M_8r!TA$i5b+N&CAok`^lkeFES;H}ET<O)Es0Pk+U?h;9Nma6>UA2$5x6
zsS$hU+h(3j3ScS94+#mZ?OibqSf_XLY+F0C<W at 2iFJOtJ3%#RIH3|mIGb7w$T-o&(
zt2b2xD2hs#agnfSq?k0M!P@@FUHwmpYq5_BiB7J{*XLmOqKF6?Wqz#hvR5ph82Gnb
z$x^y7-qwS~wSS!M3HXG9{6&E<aYAWgxq_Lk6Rk}Z|3J??3zdy_7?vkqsg*}ngc%f~
z({+x(wZ?JbA1K!h*@~N+n>Uml^(;{iUx(Zl786r(-!vZy`q+TF7h7M&lscuB3j%F{
zwrJN?Qyz%0%~K8h##SxX?{6rTu7514L6~cRBpAZLo_`(V at 3MUz9m!Vf%cQS&VCarR
zP{_y`53G^plf#*e_D%#xS>FidyrhfH{$Q+6^>a- at Cr#f+Fi_gra68>zf+1XSX+=nO
za!QCeNrF>(YPu&uwigd?$jiSaL at x@;nhxfzaoaG262k&<X!zke+&?CQ`-bAv3i~Jg
zkGBMuB!By?%UXs`4W4ib6H~oOi`9VSO!2oDUqRG!wzrVwMUsf7_f@(ajbuCqDX`{M
z!&+Jj40^g}J>AaWbEUbERoi+P<^SD$E6V4~lWB{~*K&*GwJH~&Tu*HwN>SB>0!96c
z^ZL5`xwk${9Eo@;tIQ;$B?d}t7T!zl%eT?KCV%9GE+M&krA5EKS3#(+-AS5Nbg*WC
zV9a7}xE2F>N6z<Cd>%k31S)On-f<0_iED%@j)lI;IYNAlJcQL2>^shlvi&|p4LWUj
zTds>yl5OsWxHgK`LD$Gbew(%IPjNIq9i at bG%e(POdLj6*UZ)Zm*3B*FDE+h97o$@U
z5r1vpC4(9wX0)u0!|BzhCQMw(ckGysbT|e$j=D=RD1B>&u+qV?3QGAK$%>t-mzn(j
zzs3Sb1OD at L6&E_HgZWP&xroE_rdY0_>^Y+mt at U@+cuNzL^9Sz*vd-SDlBb^P9CAXH
z+Kx|{j|>IGSF|=W>V*NegPxR6leD!wynm3mq5On=Uy>pyxDUOG(l>88KsQ?vKpb-p
zG4aS>dA}NMoV9SmZX6dP9w}XGu>2E05-G8yO(@}~udi?^jv&@RpS|RSo)CIFq$k~I
z9>owIGr#F=g5oI?p2R`(oI!O7i>(L%3y!YUs_^pE4iBC_L~l-bIQvR5Wx8vJQh(~`
zw5V7gjHW*=-Ceju>w!BUcK4xXQL`7H|N3Y-QAbc*I>_I)p=$*lU;R~JBkpdvY&{qR
z3Ipt=EWf9ASFxl<#clwTGI-kE at qP&><j(5{0=>t+K>l71p%OK7WP5D4S%Z^!Zsjbg
zIyL=`@dK}!%W7h%c%Ve<397NHE`P;s-h1Exsl%qv-1`{^eovyNlELd^aaH`KMvtt?
zeFmD;pB+Zgqyj)+e`2|}x|ghBnZ9)kA{=tO{t18 at t=)aAEzh{!!lmM2^SPJoJu at Y0
zF+KJ2PO$_-{i1n4;Sb$5-}P{1?dE^VfJ?}LW8y-1|36ume}C)bTj8GApnnm4r|+2^
zC2?ZU{Y4k0SOQ{KFRoVj%{T2?&9q=UGRlX8bxYKg2z4U^$p{PVc)^%sy8$4`*tA?J
z`fVWS)OqPdc9&D`a69Pc?^4M~u>c>IquP2yoA)XD%IS=&$(zdf2a2HBiPg3bH*thO
z4LncPL|nDKzA at tLG}J6!+keVsfCy?cXLz)RdOkKIQ#+po&Gl3~<@7$~L3{R=)8nqG
zY!;_%^i0?o|23pt7!$`e*OJteKA0-CFUGZyJ8JQ=DCi4lR*~2-8<G2uh19lag!4xs
zOCBXcq9dlZ0^B^dafAX>kGzJn^IHm(7~3SN;_oKINgS(}nA$QWh<}bNm$0Ab1-G-7
zzg at t~EB(9Jx9$LUx(jizbwiln!Aj5^@$KOV*)n>s%DMU}fZ-KHje|}uAo{bOPHN#(
z_#6m9U0YSW5oeQVBZ1yeWZPnbu2_vMt$W>mw%_*zxD)Dt&z1vPHN at Y%%wQ+eVlD?7
z{->NU$oI$U$VcV79Dh4WQc`_+iUt!uDa!YtR)`4e0;heVuV!S>thxdXY{&36j0Q+O
zR$O?@6`JZl3&ELpuC#aZWNY*e&O|k!u274#+aw&kHoNW0c!D^V(f{ZA at vU**t;#VV
zTI%(KR@<HQ$rpkhukP%3)caBwU<Qiu{v&%6*&p7h3mo79 at qd@8m;f+v3~Ee)U}c&f
z3$}@ZBB`Ez(;iHB1%Gyo0Tx->Zo{2?uPG~y$vT at oP7cA-hQ5AQR5URy7duWQ!k(wp
zF(EHipB&LR_g%t3X^8O8qXK#WpZ*GEI?S;D?}t1Ngh*?;IccshHxTw06MK)GL-!*i
zr^dwswu;{eYk#bUWTy2ZL(`ru&HcSXtZI=wzM5A3>&3NWcxL&w$V7%L`IZrhhM{8e
z_;?OP722w{lh<`Y69>nLr_+`ix%?oMcY%G$s*u^d#33yXhBC*kp#efkjyHIMy-!MT
zkuUClx>A)|5%vt@|0}X|<g503=U5Ui5|YqTm)qE?6MyGf1M7nPCL9wRXBK04!e=`W
zW4o1oV97Dp?V#YtC?oJG3JrnunqgmJVYVz+*aZOYEOAI(xi!;h&e@(HsASx|D>xH5
zEIx{$ktDA_Z++rB$a$n at kStDMH9-pJ5mo6QslsIc#i4`HB`jKm&8iX~Q95^si1!;E
zO$mQyLw}9$$$T+gF}X^vh>O_`$kC at 1X-5aW)HYhjMy&UOCy+NN%<k`UHZ>%8`qjD$
z_&MYfrUXqTianu>6>{93fDti;uUBq8rgar7ZAir+TInwQv9>1WKWGa2MT3|N3sXRt
zWQH~Qt?0{~sUl|RjI#SR6;DjOLluiSK)oX=rhm#+TiU2uh0B5DE}}}7R*8jCj$B at S
z at vAx$R|D%Tsx)RcO!}KW*v|ax*ER8gHsx$hC}3G9xYe&lr4fw5cmggHFw*2y`f;K#
z_|#kt;JK+T9~0(8(6#?M?S`aX3dUPkkkb2TXHXEYJMuRTftL%wN(B>-{0`n`jJ1=F
zW`B5o?~~+gAsySUci5LF2Hj3xut`e*EkT=ydWzX`=7oRPMI;u`=zv!)1sd^jTl~-v
z^Si6^x=bt>hOHUPN4ABuJ85eMqQKfFzZ|KJeSa|b7gNgLJT9S6F^a?f<0T9NoQSEv
zp_uR;n51Eway!<eHsC!m#U*k^3NWYhB!6qO%>x{r#f`Dfl49KDVuHkK1fv;etHa0A
zMnu}o;MPRnBEC?k7eU@*voLrsQE&(tu>axj1_Rn|4#V*JD7rO=m-XERp at Al6<KIsD
zZ(GI#SUcuaB7S`;IN=7+FM_LsdIS;&LV_}#7;i6MT;adJ+_z{~c})8F*hg0jOMe>f
zR~M$^k$hKe%hszE(q6Wsctlyo5I~W|Xhkk%&S7dQj9)?YHX?XP&&=zn3 at 7{8^>>*i
zvXwtF21`r7=$2XXeI24;+Ppy$qv|#`iEPzs+kpE*pbl3(Y!#yZMGBe3&$C0mSBAh5
zz2DZ}H|X=_$6T2&AowQBiB`fly?>*r3I*YS0N=;=XV!5zM-+u#9+Ua8k6yiud3Pf+
zC(6~IGY$<2_Qy{{u_F#`Q_6Q4J+A2vTgf8^US1vsa^WgRl-Yt<U*i=gx-WtQjIW;b
zQ5O%@u3G4n|HyJvuLg!FC}N}twH3k5nXbz}V+2R-2v{p;|2LD<)-zWl$bXFh9{hws
zDyiH3#eyIHCV|jN=qg|&q~A8Wk=jTMx88SZUwTAIK56_MTx})Nt>)G~#uaq3J~Cz}
z)P3f;I5>-<yx(ET{G_qt^?hRoOaC^v8g;sS$qUYk!AH^k!~R^Lh9S4zl}Y<_au4`n
zMuKaMBg|jqgSg;Irs!BgDu3$m;cZ}h?fRg~ogNKGDdMTi^>fGi?={EGJeX${0Axr)
zUR+YOyG`=DC$9($jw8&e#UF!4<RFWguzY))bcF8kXZ`A8h2>+r=3O at -x*!49bQjn}
zfnxTIp(UBBV?JUd{-FQ#b8E1`y4-q+N<SY=z+!zrc`FoWsn*Ysbbs;$oGeE`7jnfV
z)e<bd1eue7l$t`li;`@4x(M}roh6?;8ppzf9!7-T#fk&>@G5Ycujt433_i`0YZz_R
zo49AC&M?I7)x(F3dTSC<rug+c%1K=7wimNlv;?!MYW at ZGI&ZCT(h$9K;$jc*5hna*
zuzQ!%8yh>qWQUFpnSb8^6n`i=737v@)w-&Y){B?Yb;s_OY352}!QWs>hT&R$lM||>
z#DI%@!s(5sa`#3Id!#|c$DNI-`xW862aqXvg-QZkKpXKe;e~ItQW4^h?qG*RL;-g{
zpush90DDoOn|Dx1%)Hf?`gS6)({SFjICwDlLSVu=NrL>p?SJy-HZoN(MfUB$BtuAp
zZ^m+W0b~ViD)BXGNRFu#g1wB=Q!H|^3+{cue<2Gal-jaHQt~L>NG9Yg7WWmlAMRWx
z_-v&BI4#Fj!X{4IE)-N*|MjGnju8tj-)*=hB<n%pbp7%wG)+e3NB92sg0CN*vQ;rK
z+>OY6<Kip+R)2bV>l=Y=lZgY0v1HCz at iafEa_e-b;$LJZ9$-rj{7W~AR_FAz?VlQ-
zPrki%7cGY>Lm{%mJ7o!kykG~w9qN2}w2)(1V_+|VTNWW6c&So98W}K+&%n_p>Wt-y
z^R+CJ6<UBFcSi#Gz=~;X64wBugHEupy*1)Ilhrp3nSW?rjZ6x&0(#O)M~}+p(F)Pe
z&Z%^c`wObW>49nP;oP0&&}T3{46Don>zpTPK&WE;^j+6It!*R4pRZBNIVT at rbLR0m
zm2is+;}Qhtrp at c5{^)K-D_4HyJ6gK#A(NSpPy?7r&U_y7nqbAm3@|RAJ2I0i=I{z4
z;Q)VwR)35`jDinNysDCk_4_37J$I~`nJvX<R3^J&Nzr3E%J~`?iH>{gm>=3T6#b=W
zOfZC-C`c{=oCyh;jfQ){E**XMRt37hC%>TguXbhu5LX=&XfWGRrr#ELe|Hi`S<AVf
zS!^0^(iz308=6fzuCcO3HePrGD04BrnQi$g)PJyC9HUM(;iil at Ot9j#@`2F at 5XfR4
z at +x0YJn%O~ibeV|$-m_{__ at y^ZtnCoUr at Xrbqlw%8=yNxMQHH6fYQ=;$(3J77b%0x
z!B2POC5GHdE9c4v)s;amvpjEbm~*61f;a4ttXL1p``aOoUP^A>Hi^j1GX^-guI~T_
zsDFLJ`RD-#jY at qV2ukxPUV1>02KH7Ys78<@mL$;>{T}t?@A9+~utcnZ?S|M}KEQ?H
z5O)%@?P2YSQ1lC{QD%qZi<E|o>MjOcU9`2Etbheww;iR2eWb!@&lgk>bS2c3en~d8
z;}1WpE&#hk_uu}q7o-CFC8F!>ik&<|8h<LdVOsgd<|j{NjA<Z!#5n-UNAX+;IZbNz
zCUKfN6cgR8g2ij{K+pAZ`o#$+E3P9;aC)Rs(I|cQc0!&Dh|sAueg?-0JIwG-9tmkY
z?Y7A#OCi7IecO8dk`(s6jwlr$>Y=%mvd8uO&M99kG-jDE3-g6<Cx~GkNU{Fl%YT^;
z;V+IW at 19O4Q+48D?ZVclDXi0n1{|dq6HR&lXK{Sj>ywpt7G6iTV6b&?lsdw^huyTe
z_)-d`e1aOi<_4LPAf&2DVdW_HLDsRzWHwZ4{yl0lNKCc5<osvP(6;{S>iG!7n{)xS
zuF<EZAu$T?s(Lcc{`|l({=iytQ-3K!tX0OA4H_K>v_Qd2d^@J%G2VZ>;;t+4Oq$D3
zBi5s+Rf5Rmy$xzeVCSM{xQeDkJc-3#O$;im(cuxYhYej)#Sg6y#kyqIna-D=zrJ`H
zt5|^8gid*d!vIR<usGAQ=sS-`lFq!fdbu5s-pVf81$Vvyi??(PhW224zki}^-(ryD
z!ce{Aw7p+xA<=*<cic1=1L}m4M{GYY2D7 at cKN3MCXa^kRRFOneyY!X4=4+gjndRT2
zIFJK4-gd*R*e-#JKRIcl%Bc9!SC^5z2Q at XCKT>hUK}k;5 at x?1*g7K=#{~&71tUm8p
zAYDGsu5$8q&KB!DaY5k&MSq93x2NmPx#wrY^+0<>xyH;K2y{KU?Ii4NizxdRi!K@#
zOST!)<2WQ9!c_#8Ah=}KBTi-V7W(=~$8<MUT;Es|vnWjX<I4Hxy)gSI&73NB-CT|}
zg~s7jJXGz_TBD5GjR7AmSmDNBJv@{>vVUpFQN&aixT*bE$`XE-3V)m*%9FP*p|y2&
zcAgi>5Zm$UN)9#Ld5HmH^8x=SOYicZx1#Ea*p_swtrZFHa)aQl5nesP-Xz&GhINaA
zO-Bpi&y9a@&+_WNF2C57Yd#9RKM1$^B)@VVxiRXl3aCOI6?ibJXY<XKOlb-P7Xexw
zn^1TVgSzrN3J|cTnSakse;xWN&*%;CPBE<QOhjCap-;MuXDZKKW at DK9RezU=l@~OI
z#EDX1_w`HG64hO5E_G5`YRlp*q_|%z!;n&U*`KgxHGlwECb<*FpCkxnu<)QCVDbi;
z<;gUD??T)=#(eSxGE)p at WjK&dd}V%y8*~>yDDv2H7Gp>7FMlV*FAAT~idkj`-i!2X
zu{FT46-Q*vOdz&WQwt7lX|iXevndv9xWE8jkneLDB2b4 at yh<mYLCISS2-&S{j(dBW
ziNi&!4}q2<OVqWuQ7 at rwr(A`vSE>Cbmw`HLnn~BDBKd+8>|AdiZ**^ZDw#4?;LyVl
ziHYsHAbY}Bnt$4BDUUxXoDa2MS!b1J^283L5tQ-is%q;37T$_h at lZit<g$UHJHE*I
zucUpaS6+!d3jq@>j~>HvCM|1T=K1v1E1*Zay(h(@cY7|iQ<>Fson{A!x$6kQ8erQt
zB1(G`ls$rY`(l6`K?KhFteKeGCU|3rg0nRC+QTh~Eq^9)m*~G?fOQbztHIuQ)eFJF
zmTJz5j3|0e%}C`B4Rp+vMCzDXfpDe_uhA&m%!aEAa7}htokpoH3~IOwruEkd`Dl|S
zTWINN{62)P`~AkRmoy@><J~pb)p${G%a(TC(pVYZt?5pXx3e`!LMVA*@V5W#IKH+F
zOz!UI&VQ4M=H6Ad at tqoi`ocX*ZJ+M6L5YVE;;w1Vf>%e^flIc(OZ=wxX$~Q%T~T^K
zws at _!9EfZd6;+wFd)#b_K4t!$IwdmNxg`EWsHh6}U6y~e?4*NUW=2Xf&2E)ehSBaN
zQF979q#6o{TBaHXyC{u_ZMRAFfV3>L-`i@$cYg)7{!O=*Aw6&LPW$(gaTM8lW=>|i
z?4Zw3A|XfctygR?5TpPrBy77^a`JrZ?tn^)r{!G=KzpUr19$lS<Vr$76}qySbZ9Lw
zOQQqSz6_^>033D4{JlNE+lA~v_ZyeBF<0#vI<mqC5dfuGZ=Td$&0a=LwqlH7uPH74
zj(_T$tIEaVrbfVJXxi%=qeta(J4ANa2(_1DkJ!mM;(c=!Fv_~mPRR6D^nijIeE)OC
z6TXOa0qmS2=o2COV>i;RAW6Q|lx^0F?G3dpxGCQX0DI|uG}7&#i<<&TA7TYR5Alml
z^0lP^db-B%XG|wDich;G6`bE<wTw5IuzzCO<*Ynz-Gq7iFI2N+HkG~)WG?uk$v5UY
z8|=J?J`URZjxoq at CB_P3vZ$#WbqC`it+bt5AWEW at gfpO@;E>W6;Wi~jw5ULCoT5Qy
zS$}1feLTlziS7M~eA0nhxH%+qEI6u!t(`Oxo89yit7p4>1ajWvxM}}LT2&4x=YRbQ
z7DZekr(#m&FYH=t%18s!;Ko}CTr)hawIAn at xU@I^ZeR9|`Tcc6OG#P$B&Ou`+WAP#
zw0l{&sfO`89v`0}N6e^yvoYrL?)<Avq3wly?Fli-Fdl9Ntnvs$bQJ34=Vi<XKN2F!
zBq`p`6-k=U14w<B-XN9Zyp=#MeSZ~E<N>9WzZjMAdzJ;_M&P{EO0PBM^O;eqDh275
z0rwVcSu2tY;2te)9HdSxVXD=<LDN9lW*w{{llp#%@)mnKQT1qUJ|n4`q0D;*^y=z)
z$Xf6s3h1KL?=DH-{&&38g!2qX0zPeVx;!0+Pmie9qe6_=&#QshfBTRy7k^J>`TgXN
zPT<%CMw}MR at +FtG|Jy(dmC(X58i0s&B^-dkdV~6z3gtsuKH0I{%S2W=D^E9eCyvgN
zs!1 at JA%r`?1IcyN8g^1>02SUATKq+ub>Ov14z=zc6?h8hIO^vac$I}(SQ9*IG1biK
zuv{d?Ki(=OCK>D4f1)Y$Tz{SnJy#|0MX<l(7B?JO1DV8ybeqr)(IwYjY?Or9%5NF?
zDwuofj;VfGo1=e=YzaW{Y2(dA%t at 8V8h*fg4un_A>9Y$MHo5hQwG%W{7v66ZT}!y0
z%`!5gUU8DYcsAfxEg6Uv7ds_jmKW+FbGgge7Bx2)Xl)seCc`3D0e_Q>mA0X at s&pSZ
zuny*8^kXOpSrF!2Ac^nq8H7M at _^%zH3pDE`;!LdHt#Nb7L^|``;_Z?C4>5P at M`&;l
z3`z_r^IE>12O8&)bzGEQ>84H$lb+nt2rh$aG at w25hDf4J$wtGn6YW>@`h=B}my#(c
z>x at WwRey9zaya<1BY!8wi7cXI;yOe&O>$m)5Ri at kbt8_~qG>1Me+i|<1d`!qjG at 2>
zQ5>P_6)OTd9d;_x^}7SJtNOYtFaT}H<;%mX^<0nLpCCMs?+!mN at fv2`%2GZ^#eW9x
zRHh>R5 at Sz?q!^u9-jJ({{+&VJbF^Ti#wJ at _kF^$pwv!42v469uPCg=BN>`1_=&Z!Z
zMuy)bS4 at x0l+gpf?9^y2Q--<#w at S-?AJ{Mxty7<5h1?Q!doScB+`XE?9*B0)5nb1I
z_e}-?n=3(hC#MVTro{{&@NN?&Ey~w=q-sW51y}AKkb|UVb}t)9y#?x at Y9@#5M=J+B
z{n;W|)|Fc}?SD||bshf at 6eejXfFf`V-hB&&5TC#uM?bZVZxM)nUkY8w5hrFbnCH^|
zLhP9!y*N_)Hf!o;tvNm at X%fb2Q|Dx=zoM`!LbV2hi(!VZ4ia)v6Tvfkk4eB9YIJq|
zN0r-xs#PUOzO;1Jg_ at C=sXk|HyNv4sj3_d%g|1qXbANrzy&6C^$-Re__xiJP`@le|
zSHc&UPA$$eVZlC8RRo$<X5#M|h69H5VSBz=d=(5xT;DVcr~o4a`Iu$<&+sZ$GMHzm
zf^94t6b}<MdB_zXh7ePYNr6Wbg9ZqAHw&6#-rw9-AyDw`^Dl=1BfWc^Ijop?$|FBP
zy3)Bs2!DJH_?HbC?3l~5rcHi|UZCu|AbLF}5_D?9a+Ol>=WI03_R`1#Dc=?Y5Cxw5
zJyqBMb|QRM2b at x>`}S4Sc>u<tK(>?<yNg|u>P2CBJ01UZ*sI&c`|E7#EN4GNAgQrp
zuKfee)()I)dHztdiIxFO1=8o8zz at q1jt7!Pu79z+0hWBm9q0}>lIOB}_Yyr&N)vcV
zs?L9NhjmQ;-iGvbkBw<k9`1>pS^-yNu$q0Jrx!mC?RRM<7iPan>Jy+V=RF;I+Y_Y4
zo)J6qGY{HWQ3UHg&PRoka3P6zjo$?L at H;{Ps}E#}+fyWI)jQ?<P;fxAwr^PlQU!#<
zL4O`r*Xaj0Y!N9Yvh`zO{4QG%ZvP1E`J~(}UvpTgru5K2LXs+RaNu!`8~u0%6y=>J
z^EwRc?Xb|F%TN_eV?-iNu>>A7z48f?q>&N!NZHmtnpA&d?i5ay9bxj1)dI8=g1P0{
z*ldknI?wni)#{Vrq|1~WbYRWdl6FS(wtuH9NT+9l|EAoYlq1G;t2vHuSYh`EwjZN3
zVttYzly7b4y#D9%HCn&9F7Z;DTrlf$X72}Mo!vJ1ZqyC*H at 3X6`$6o^@)0AEeH2~@
zrixIhZn!-;8Ndgxj0$w(;Ibb%IXZFXmRGwAi5Sk<H8*0VLvWB^rnX(~%@sc=T7L_C
zOEVN*0ISlRgOChWf8jyii3es12Z$Y1p9<%JCybo~!KQLEDbb(~C&9Qe^TDW5p-OM<
zekV|kc^`^NVZf!~9d8f#xt?u?YRrsle???G%z-#4=(+(?!+ at tmW!Nc9^!Y>pNgo*<
zBSd&**}XkFZ4SpJSwUAjmR#I+&VRwcs?7m0VK6*u-!gdQ%b#d|GQ#FL at m)qpj=T at R
z&orVf3QPkZHIjLm0`|gU3g4q|cUk{sfAvmp$fbr at Lv-lE>_WTkb(3Nk09P8S4$m_!
zu)Cb*A8`n7wY{moBno+bmH?ebOYRpVJs6`Yh^gQGcD}|{#bePg&7c9TsDDD7hj*LO
z2*ZN{+7tUHTHFxY%3I4f^)1i|-<q at KJ##hfizhPz{*rC^vd!oZ-d8Rn5iit4JhzPY
zD)OAj5-V at V@{eQ{Qq&Eh5Mc;oF*r7RP2$euc*^9f{Ws4daP6RJ_UYHGKG12<Rs;*V
zL2c;N7$JsO!V-=&rFr{LQ-8dO%79yCRh5!6S3p${odo3fk*i6yW3nBQ9I}N6EF8Qn
z2iH^8AWB5R!~~!iA_SyK^_ukmA;e-WiKgHGi@(RJo-wv4RKNOgKheM*1>*97F}FHN
zoK&%Thxgzr$k>8deWYo9 at a?atK5D6ZszQUDGQ7>gH#O<}AWQ2HUw@&IccOU!Dtj>j
zYL(#XY;UR!#d+&T)DjWfuzRbj(P+dcHuqa*)a0|K1^}@H1s%=74$VwSfSeM|T5V^+
zL0^u)u<p;}uDWyxLThbhs(otdfPIx!y|H^A)2G)|Z(!vI^eXjwd|ha8llKD|jcrXe
z(P?patuwh0tM=GCKYs^R at L6dLMUnnP_?GyMi=l%~Fw5WH+RM$@Dyd7nYvwALY3$>*
z>X<+t%$m;&Mmppi{)K)AHZNkKo5F7heHaWFVzLr4he2G&Bu)!LI=X!NaOBjg7KZ_s
zYR{1ct!0Jzzh%L~S3Cpl=4uMb7 at eAN>3NV10<G!|n^U?_gMZ`LCC*QvZT{)Dji~pH
z8<+UNCJPA!#iZwzpNLIm;g$DjHcmpM2dPqea0s}fSfbvSfjs8Rl+w%D&u<?Z)uSfb
z_O4d9{?JqWg?f}G(5Frih*+4sk0j*Ef+9D%6ktcNR!l|3xkP72#2uWsFTFWXKD)=N
z4?jHEM7tN}Nq_Q$VmnfqCAA&D@<N(Jx^i^50N<)24lY}I(HHPI5w98nRKP^lW}51m
zEx`XDTb}i*(?#B1%hjD$qKVI at vu9D+pk+lI>ut0!1jc=Br%7afjBF_-H;KwF;(U0D
zwIe>i6jV|y>}$ou$w`pm%eEIl8E(q7440eU*r!JRN`GiA$F5qcX?NZGrGmp~v6wBY
zCON~PyWS=pTn-=x=3FU?s#e>&**u5fcX?NbdgpaowB*$E4kjBCxZRW7T3P)J+vGPl
z{V--m!gXKTuxs2tX3T~AL65dI7iuip_S^@=%^MOLIqg8|b`9Nl9DWJ*Q%M5qjQ*#o
zQp-Ax7=Kf9{U0PjWGTz7wit=KVJh?qF%~10gF2x{i?hE;nS`k`#ZV8g4*>oeu?>7r
zwm6v->tduC+OP}`134^^^v17 at s@eDl at yPK_2D#376(V8mr5E1Fg;(H-yW7gEwrDas
zg<H-(_{<N03r7b?-r4@@N#krTY+=?`7HZsc+<#N%<@LAw;xh^J>1 at Ik<cm+OAmt7r
zVxjEKe(EZ-ttpzgOt}8OW!8haNvlc_&J`K3>LbhM5C~fq>8wL&g>}uS%KjBjYm9N0
z at AN^3jPm>HN at mq>F8iSnP5Xda0Ch%;gP}y2l+B9gwYnKPAhgFtoGo3n(#2^4{)G_Q
z#edwn5;DO1p%)1O6-V8N(Jtxb@|lmhvD+NOczPK5sV$PCO|C0P)ix+U*3HAe;ysfn
zPwEEnHZLOfrqkDqU4a&_fk^T<STF;SmLq8- at HgD^cfv?Es$#Xul}@e~AzWE at bh46d
zRK2ii+Vk^ksV#>Xm^IWjk3N!^)Y^dYmw%8L1vyHa4k>P<8F7Z==GONIzVLo^U#EZ8
z-BcaZLeJOVEwvoKE_qj%-B6j0s0j?FbfRayQmezpy@^RQ$lyubdXNez3HL4-Z-Bp*
zIW2^5T~VnyX~01m4y?<$3>1)KyfK0t2Lg#vNhh?sdcrO4de8D=Iw3es8riZJQh(_o
zw?J(=IXWT9sb&wW6AF4Bv(C60qSRx6y0*dB{r>NEspM6DT=#7_O!79>ySAYEwqj6Z
za-L>5(#2zE72NOFzN8+JjqaR<fH1;h^baa3(jY^{HAaH=HyIaj0FX4Rd3r*7<DX{a
zfo^EnKE-VESmRL4eqwaHeO=(1!GCsHRUaI8pz#djOs+0cGn2;&0pqOL3H6ka`;@sK
z${)nb5~%>u(~}gu07wnnU`^qeP%jwMrg*e+YO-5tE=lmQzic&p_`vTS@;*gbRq(*~
z1_aFzy;<W`hGGU7U at Su6GminHV-2e{mGhAZlk^c%LlXsHbiz;89Rc%tNPkQ~HP+P8
z4aanEW)DCqK)h`j48=WJ)Sl+S$;G;RMXhI{k3-YMZ#$2o5vo<rZz-~<MwKS^9;E<y
zA^c9{QSzJyVtHT~g=bL`H<|1#a6J#n8(j3akhom@^$u=-9#hj6fP^f0!<e7jrE9zk
zdo+5ZbJ~Xa?2Cc7B at 7Ust$!IpM}vLdk2qEXG3VBDEsRjao5{V0mhaUCv-){aamZ&~
zeWBK*t47L|hEJ@%t2cz(w9Bu?S*5nmjk9V~GOiu?#g?ca?gae8qQ7}wKeA~{a$KWe
zM)4tCAwuYcdC+mEF`jgrYq{tq3y{K9fF1L6o`4b-Jal<IFCUFF-+$yf7wW>Go9!k2
z7C3Nn!UZz6Bd5+7ES5)29w;c=%BMG`so#w&BBBuI(~9z#{HhEy<jXjvv;?+zHsUxS
z<9m0{V><Tq(9UgTs*FV}rapYb<TYSe6hw2Sb<H$Od)PrXeR6%NkmSr|*_SSUJRdL~
zXb$~c`_HT>6)M1loPWBFIc}EgH%CD1!vay$6k4zdPITl5i8034OMeOW?H{7Gyy6hZ
ztuh;C(_I5r)iofR>$Y#la1-`r&A{0gy2^1iAfS|pLofa#%QD4pV8rhKc9xBz^@0pg
z1^w+t2(Rl8&39h0JzyTPJ|caxip15BAW7ural8=PDCO^gK!4S%?vjCzmg2MX^(+{P
z(vzE1`tbEBRG4iI{Z9n>!qC=XwwH1t$Kj|Ln#lnBj`-og2m>>2G*Zc(87I9nYVcov
z6Aaq!1;c_nCtIEojt~R7pUKEForyz=b377Xe3*fzjTI*OQU(ixV`1A<1MkBh_s8&C
zoj^gAW{6Q6=zm$ZEM!5g<|lWL72y0OOqCq}X)!XmzmA0uUno?$3VFfkj-o9G?N9v4
zK*>(>P|qbaa#G$W;ko2WgKq at O2oc73XaGX&0edwqB_*&55?H<HKS8x~+RMcfqnP!}
za>qq0$KtXL(|Y96Y&0&^gyhFf0has-HznM<thC89WPiU<s}f2^#I2kYtZIzJ3Y8gf
zRf?rA{C%8D1Bp-L<o-4zoa4iEiyB;#y7=C6DVuKOf4glJ2X at B@mxqJ_qz;%7vF-tW
z=J>zft_Ao4sk=NUIrx+iD^zq0FsLUD?xEs at ras2fx{7`hY1(0b&zl#1ZS7W!=q_LW
z1k|P4wSP904FHl}r|;`e?8tBs&M)N<AITl2n=J>T3{JUp-tKu6A5ZvT9bde0K?Vb-
z>FR$Slxj$v9OA->tPU8l=FN;tryc%pC_(+!-5lV0yZ1ct3bNkSq=#jp$v6S9A7)7n
zU7#4ezsHgmntP7xvK4N#F6l^J^et3Di9CX#27jUp5Z=|Aq80%|1k-d~eFEL-$8bxg
z$4wm)^NJV*<PALLu!UcpRJFWxw at goruWo)&AbQ#sZnQ{%2t<!cBoElF1g7yL$NY_*
zE_HoiqSgZ*2XvZ^moBLS^ceP7L_thvd{$bz0|J6Y!;a-A1M_y6j6Vl*OLtv<4r#ch
zXn(PGJ1&-1C{p9`1k}0KcaPtFWOL~(#U8xa21PJ~6AjMcokAJu#EtRYi0S$aGD6ZO
z&lI491#?)fOIP-eLQlXV!c&=ourzJZR4lryYlPM3k||PPdShXKswh~)gT%>}{na_Z
zxsMx+m%whImDzHWv$w=Ag<m=|3rh6hCV%&(AMNtCY}udp&DqvXNh0x$b~Mrfh3cI{
z0YGA^l^K`y5kLf87XOEhMJUPSZ2c;$q>q(gKG|&deqS+i$p1#Tf3(v_4#yP!`h-lo
zCf<EE{xEWirN59H%P;hbu3srS8JHW}0sI0uEfj|R$}B_q&veCdifH_0VU0p6M1OG0
z&P}|!8o`=ku2Gm9gqL9mz4}LWvdpqaIh$&Dz&h7(?G7V2aIHXY?Alw0TtwIdWW`5p
zJHIl4VtGP0x~%dH at UTkfk{i at 0W7Gw@w~2(2+R>3lvwRokfKBv?n;OGAd4e1gr at SR*
zJzs*yE?Zsh)`xjuIm?YO1EIfNGJkRhsc$pFVW3g#`%I%&daS0EF$&9&2>(!hN|bFP
zfD$~(<2I?W-yTxkmA??S*Y1ZMtk6fnsYqAnt+}XC3h^B*F2ckN!=vc{GWqhnr8;HL
z)c`bqe|Nd5{H#u+1iqIgNp61P{3D{t^&i%-WdO*yaT|X*ozKt5rR}@bIe$jRoa63e
z5cru%IsR*ed~;Uv&eTn`^gnGjoZyPcCSehWNK^a at oVf&fvv_{2P=&ZR=LMeWf&DmV
ztPxB)jteZdS4|^mxR~Cr4h%*WD0v(2j^O5X_bp-oCz*ZiAw3n-IioHuO*rvfc5mwq
zwxFHI1N&pQWh=9NSB3~Mg at 4IcDHb<%PrJC)=AKDURdjdb-n;c(q`_&Mc|rTDINObf
zZ6Nu!{9g^V4SY;poo0dRlVi&j;9Hw38F2Exp_9=hn*uK>Gf_^8!;vkoa;^SA0~Lm4
zU_(x0RX?vZa7=}S^7a+(KjJ}?_#1_{3ToXLerbV~Xl?_Zuj(=u4SyypWtYaIS;9Kk
z?#nW47A}f at sAX|9wGgESxjp|7GmG~h6cgx56Y*`4Z41!QMpjkrIyB!5bboIyi*n%m
z9oPtfSY2y8?}x!7q~3s-tdo)nSh<!Ufs}xb&`&7=@wN~zMWJ3lRPTqa>q5JOYeZ~H
z<mnyY(`DP%Z at Wgr4u3GhH5CgZm!^Ha^Yxx9(|-75E@#DFa5qL_sXmnwBC9ZLAEq4r
z+QS_mhmN}MVZV89YMf}n%%_Vz>@@wV#J#<R5*ZqjiTqxR@{46=cB7lgE*@m<E8+5r
zSZ+7bz}MkH>GZ3S{1ocdcSmzhb)=~?w*KY{-ZB5^PoLn2j(_fMIKMt1^_pWixCI*f
zxPykh8b(Aej9`+l$u!HG--uO(Ui_z=ObVXfyO?l3>>)<G#CYA5>s6p4zmllB0s0yr
zx1pC2h?Hddy^|CC6tO at _BXfQ`+Urgk(4Px!q56kRhG4cu9t&MFWfuho)eB|>Vr6ls
z(Y`jJ6-%n1#D7Le+qF?f=UT?tc8>mZ&hI7YA&-sg9B^u1$i+1A2mSb(n|$VQIrzE?
z_-VCn5s1aBGLg(Qc+_p9)xBgsA<a&4WB)>a+?X=HNAqKA;2I^^FVt4}_upE)%&&fM
zPlU>*4Ep^RMa4U~QWyi0pbHzLF8Hur)}rjUxRd&sxqnh<HlAhE at SruO7MGFYspA@Z
zjRe%xFN1e*eomkMrJnVz_ZZO*j6MTzp3lYd+OiMsIkZE%%}s)ll#C1qF0FA8{#&9h
zQR!YF;etohF}M at kD|9(_-RYKnc4z%vuhqDreJi&uQ076P{N)~8SyNK~qbFq!`z?S?
z3X?}tZGUG#VPbYOf=C`EK at aFEp0=J{d<^@35ZT`u{5dqL_?i>^PFc>c_dIKv-!nQH
zaeW56&xOxX2yDS~p;2dN1OS at m5H(r5C1LT?t!k34Uz#w1N$0ss<8*Y|b#yN|bXG1e
zHYF+>0(J-PDt|;Pvds3l=)X8r2duR4aWOdN-+!N9ZYdUmAk9kMA0QvP1ulv#=_$qb
zLPLS7xChy=lcB80Qr1uu*9_`d#2g{8-?pm<3Xt!i_>Pt++OLSUZ<KY0Kbsnha=0^T
z6E2^8 at fFv&xX<_8L>GyaeZQP?o$MI7;8Gt3meaS+bxrc2o_8ADgg&Hhfew(zYm=yl
zmw!BS(wtiY at 9Y_X3J3Bhm)TynESfS+#zqAiJzp+lbaH(LJ!KcOctmCU&qNnC9RaN;
zK?Ao*-SvOGz9V_OWJ)dS$x|ue9CUz=@Q~v<dp{zC!$E!dNxW(W`D6vDwN+@}FEMPl
z!}(7Qz4M*nJhZ1=?YgZQ4K0q3L3d(`9DiNG<r6iQpR2Dc9`kS%J;^w<aHQO<At=FA
zd;D~-fO4m}N~6H_<k^=wXtb6Ien;WR`UhNqh#7RLO~gZwS-Tu- at I5L?tGg7EJ{c!k
z7f6`}x1l-T8Q>u);+^SfDPWyUyvo4davo{($3tR19+nrs$=mR9_Bh*ZZayU{TYqj^
zS=>a<;S>KVT^4$7bGd5<i&_KBYsZDrz~8l8iDxUdh*DSNqmS at 7riN~qW|?F&ZbR0E
z%MtLSU~S1Y#Y0}g3A at F&>wvl$dLMsbfu_My>O0<khU~dYf4qvkvA2k&8YpqHqlQU<
zylM~*UB_Hx#qrbq8IO5*pbx6m?tcfJ?_%kWi~mWF{I)6`cwiY+IW61 at YffnRu88Br
z+2|8PM*Ka3ipCQw-744IrS5kQ$J%v&3_&+eK5R9q(eFQI9o;0eyJPH~I}rn?>4AcB
zPYW+`1)&J*vcWgU3otr$nTZAL31d1RA*GB;dE^Aah_*_pcvLQ#5^n?G34f at aFU-;W
zR13FuSmWii9%h{S`FLCa$B(?wCFSGt+5+N8I9mjGKIScPMjRKBJ8EHLmtx#^B`Og$
zTGQs%NI5^`!+L}sal$6y4=;-Cw_b!Lj at Qe`Im$b|bo|a(YrFo$?V>Z?0w6oB1Mfn-
z^9WWc1zL+Kr^+K0fm-YA)qh6-`)aU$q$2&4F<wM-GC++^^FF0ioz&RUfT*RBBX5F(
zzH^B;$h5JKr#?TIwSH!pCSwABuyy^A><;jKiVK#0E^DlHeY!s<?e86fg~?`tzk`Ad
z?UFAP=!T)rXID-NHM$)RE+_L}1c_0E?o)uESeAU?StRJnA at Y7Qz<-Ctu}`UA33EBd
zhADwsS6o9wao_E~Ycm^P`S+&RY;g at VkNn79EX?uhMK~d|lWN>p%os_+?JFFram>2g
zsE>rg^P;sIbn)WN#GE6tklYaPxBh~@ynF?&u$7I(`+ym-<W&PvfX{ecG&V8Val at vI
z1xmx{uQmS?fmjku;eTftu*Hk|=<q2el4NCbN9_Hiu3mF%_wxbhd>|mac9akcTbRVf
zjM3G!s{omBd3ox;RAty?q2pfl8i4c51$Hgn0!qACJaoCpU&Y!(TLO&7%WV<!X%JCT
zRAA2g-k>9t^TFot$@ZM`R}ja64Z5#usB$;}8vv*EcZKWnnt#x|5T5==pbsFKWCkkJ
z^>%{2=M at x;Hv);832-N-bSVrCdsm3|N=c?_*;F4?`TYl~11`f^4>IU%G9`ivb7BQ;
zD=ql(9}SdY28f+&v*Q-Mg;-=f`i0<(%8`-OFo6-e$6|v2Q_z3SR<q`hjPPr<a+)Th
zGxxNBPQ>yjx_=iE2ZONcnf!CMBq=#7Cqi-YX=sGJC$UQjPK~PRE}^GR>-q at h&mG8}
zYuPGVRtnRc*$o~c1icSSIP$RbgvpQ5qzhjBwGLnRnmGriUm)ozsh8h7caLDSuXpp|
zPWJ7?l5S&-LERlWC-`)tSL7+BTT%AWyG2#Oy$8N(G=HEZzlYBgg!A8HQqoD)RZN{`
z6`9<=MZrkiX+^kwf4mf?vPc_^Pg2Z7Gb-DFmxGD6kF3Opo=+hHn%t^EC#;i!=YbOS
zvNv at 9XH8F;xOiZz>Ijc(gt!9|{)p2N1<=dxC1Ut;A-(2ZIe82Sb)0sj+(+vRdm}J?
zrHLS@{C~<mZ=sC6y5YT<mt(TPdv0fHhFPt?p&6HCqq2?@`<$l}*Sczo-yD%VGF}HW
z2sRf_<vEmwoL90tvuW?B{48kb at Mj8Z3F$H0rYRj!Zm9`Jg1JtNMuwBm3~RAhh^9dP
zo)9Qs!>d2I;>TeO9$~Mvd at IE$JLlZv?kMU^k$+@%eTP?xLZI at -g#7Awa-G_Bixf<c
z+3<BBt1c#Zz7?RnNWGC3b1-;Q)a=+V|KQ7Nk!}QQE<7-=x_-`p;4400OjqNbNpTyI
zL04VK;n)e at l5xv1d4<}2nVMyvwt+fZ%LSe&#G++LUZ`R{jE)EP#OWm}UtZpv%;T8k
z1%H7RW}Hz(h&>8^vWmVdwZ|{aLQnRNSD_QXn(PsO)f3^pqT09<U*4ImtLCI|S^PSZ
zk1EXcNk6>quZA at 4kbbWhebPvGfcEA6QEJTo{D18xW03Ke0#D3YYxKal2R at C)DOVCx
zN{-?K`1Xjm?_P2HF_Q}jD=dgpx14n-M1TLbZN|sm63Bxk*kbjWwlW$xl9o`0XE^4y
zg!k<Cw%JGX9#lrTUIxU*+$dT;q1B-^nd<gb5j#4pMtcPA!TUe^!liYL{=la)ETB5a
zcJFpFt260x?b;v9w!?~vaI}6wTbr&axcLaHx?vS71TXI!A>V1N`E!&KY+ZC6q<^vT
z*(7TB;8ykL!b3-q2uTvR<0J+pDb2b>_?X$*%|W=0t_(M1*xQz#w-TW1R`TGO$HF+s
zoEq6>kjtr`9g}jXY^&~JZgpTze>STrhW<%nWu_xHfTy?$D6)T?3rp|unOUFK at IK1c
z(*+6gYuhLBq$%pERvaRS!x^&4r+;MGCcZ$(tM(qNWB;uZ6kG!bHz6fS;<B<=>*Oiy
zCD{FTix*7R)^G}W7)}2_{R$kg=gPx(U5uF7>oceIuM=lIrbFlZ^0H7X^#ad+WC}I#
z`A<=>-juJ7K9$k!DKT$x!6Yf>KC{SC$&p%W-h6msbH3Q8K4#=%NO>pa#D63BksrS`
zaY857R~*HRo at gtx=a927&$|GdTxs4+b~klTyc(N$Bfdks`s#VYL?9ZQi>wR4 at 5g|I
zE}K#(2aGP~hAhTan4=f-Z)1OqKYyD?TRai7{jtY$m1~!H`E)gL{0U{b9jUVQwHpd`
zSXZmnIS0c1e4ic!?bnsZ*nf$}zXM>f)Kh1DTayv-P-nd}nEG}>Vla^gxa4X=$r4`@
ziCazorJ;&YFC3<vOmcjRPx}G at O_9PSU_A5jOFyjT00lt$zqp5p(*KL6mns}kU2V>o
zXYf!!?m&=MLn=z<@2UYj!#SUy*E9`3POO at 0N;UKinh6+nt(CR0qrLrNJVk#y)9U3`
zTj(+kH_mT$(q_$o`Mpn<Cjl~)$biVEdZat=%nSwsdo8T<=WV$qY!TwU9o8$ekd#%8
zQXhkDppOR4i5;|*r7QB;%8dgdMO^=Rj@&NR<1Qw89=wgIK}~y*p~8)S?DaW~%8Atr
zEF%q-x5(1(?+_cQvLP#&L_>d?xw3 at 2v^i9>yX1t4RU>yox@;MH^JWmuOA#@-0d!ro
z5girgE(dve$sI5SJ&L?Pp66b$uKf3bdVeafIH)XY$xl=oods-ImV$+qIwn^I$u+f8
z!V_Mchp(jV3Z*n32(xHw at Rh?Lh+*UeW}%5s@|2He#ZTdFnN%z(brgU4hlrsSdsOwR
z6e8kBdAFbHZ=GLgHhAltW`q8~D*<j?5kp&KDepiz)$U}5DRsTFtYjtMP9dq~PX}DV
zX39V9Ool~!+s=Qzzq96Yfdb{;Tg3%1R(8kGz!Y5seA*8V3AmQ_k0VRXQLE4st4Uj=
z04ge;ACUuX+ at V(bH at biJ#rJ*YQG+rzKIWHhOgK<!X*U68oF*1mc(CZac59e4q~Y@}
zSQ>95!qWus0PTh;X#j6No(Ln7y85}<z_c1Y9u8N|Wb@@+pzSHXC9VmbI9^p$ItX#}
z(liA{GPnTR?69!$lEH-}Vqy_gM>RNtW0E!Z_t|d6I>`fSXqSKC?ppue&Kty~t#~0@
z$zHW;?)PO2s85#`FPk*ep2*vClkouxuCMIzh93(M-q2#ZHZxCBBT&-D{_x9*8kZi(
zYQk_I!D05vQ8Wt>LzX;jGnDe}4gT{`VK%E2tYdS&ak$fH($9&U$#t1?>Qtjlm8~=l
zWX#qh^lS!z;{1ODl0O5D at 5&miqCBg-ArPhgs(NnXCSbQxi*?k|3I at GQN*#s|$wx4y
z;=Daq3ChG!6ZV3$aewR-Wj$dlNWG6HU0WPDx*r1q(<cY_x|uYW<Gu1^4R?-oZLeo%
zNR=8zTh6&UC0Z>=niow3b8ui)_Xfw5S-zQyy at 9|H#LItO$OjMmlc@!#%J~qXIq)<j
zfV!Bce8h8K>*!t=)IB~nIf^hn1LVligeh)<(~J?FgwvcOsigQK2#i^M;SOX=NzlzK
zCL`C at vr@Ml_SUcB5ATA(tk#)htWRW>g!n>Gw at i%u at i>VV(zmsX<N?ZkNSKeiIy~cO
zqLY`!XQqEt=wx+jDZ<fdv?k)7!Qf!(gDd#NjT_J7-Rk_*=zQ*J7<_(yY^z_0eW$&%
zgjGUfCN52^cG$qq?(dkT2q%$O)DRHeEE#_xTYbkQ?9YwEZe+ at rVrfYr2SK~oZ-;XO
zsYQVW!6E-^iZWJM!coU=;KIm-4YF_^`UD^di9Ub!wFc;3i6_2*UW@{r#gP{#uJ8U>
zIkY5seS$_1J|I^~WGOG%?bX~y&rBW#%MSVH6?vHii?K=up%!*J1v=V*U^ya$waf#Q
zAfJ%M^EcYcclvk6PQY?3Gt~u3e`jMff68p<AH?UGwlX!}!ja$=3A7Mhv6<BEDgn_1
ziY|W<y)I~*@ul;;tQ||h!7(O#Ji;?$KdD at S<V0p?Ka at TB>Ynyuxpg4}!M*gxH7AMC
z&B)!dKWh0ViTiQzlf08M3W!SHq--GQ at LxgR&CDK$C8bJ9iBVCV0!Z8Ld$&qoUbrZ@
zg+eJ_Wgy>15~~90(e}elsuI-r;Y)xO&VhdvY9 at f*O?0_jAKg;J*mUAvnve4mu6ww<
zkM!C-EX at Ip_UI4M3C`qksqw)0Nccc5Q!x*Xd6S at W_98@vP*N%0AQet-?~P7Q)&whO
zXjaYH7>%%yYqqh>#t2f-(JG33CSI=I^P`X=tq3 at 0wF(;9_(9<K@$Rh?9Pdm;kIR2S
zX%Shuh3jE!t2)r)e+xN(s<c5{sNvwM4hD;c*M!1UlcvjjFI0dKWV&vi6(}&X|LRld
z0pvHgWw?JqT;BFF4F3<x3~(f9Ri0fAYk at QDMT!R0nDLcX7;BFIg*L<HJ99{`XM5+%
z<Kv1LB at HGeEfxV86#ZA()Ro$L6xx48ehm2y-E}5vFS^~5(##rtDBTUkfh)Y!x{!sK
z at KKllOa!Q;B)C6nyt at __7q<oxg72BV;5Zs9+4nJd$8oP1`sBdRGsBR`*aoi#s@`9u
zfY*^)6}>zaWN+7jd>zD^PCM{tZ|kwY)6Mn at zsB-SGEanwGc$!@3*9n;{+EAx)2X$+
zxd*u at t2)zvnI+Fpt$JgpzcsTC#yaMFOhrj#HH|Cfa9!9xK_jV*LHP3MGTmt%JlLAY
z#%8(LYx2o8?7am=M%%c at qD?YX$4>IcKpdS+i}NOe3t=_cYNpIKQZ&R}K{`cx+sX<0
zB$$@*Wf^(lw>M?<&Ll14{)K<a3v#gc$(*9Fo0m|0q at Jh=Ep&+0tY%}-Sant+l%UN8
zBUNPW4$yQn{_#1bL1)`%)!|>30db=PYJL?kP>K&)+d+cl)YzG%L%fti3}y!(2!}-R
z{UHbxh1sADf-T1{(^SMdjp|_Bomu~+HE+5>ty65{Upn^`gEp5nv@(BK`W?@t%DTff
zp}2UUUi$_%Xtq}GBJUS(S2dhj^g&mxSyG)rm=o0A9w%@mc at mjVuhVpM&M}6@$dd;d
zn9}`;Z~_!SBC`yLabv27-tR|Nke#CiEI{#G%Rsm1t;F(ZEFzPHv*~(11|2z9qWv6q
zU`r>^mF*3HE4qrlhy;JHP=;szwOGwn!(4y2&|VZ?!0H`l>x26NpgT6>_Mp*>FU|4N
z^cKDsaQGs)k#J7K>%1*?(H^BC&Ejaq33I}+?6ShZWZB5dpycR+)l7ST>HcH<q}RcQ
z(2i}})p-=i3A^R#A-a7RXc<yZNa`^f8!XyX==(4+M?sgko)mvyGOi{^?m)gWfmrgF
zhf3W%z=4fj7}D}{k2mQwddiNouIJ)x-PG`x7qb^@s>e7n?*0&JLIbU`oF5IEp0fiI
ze2yTffbG%R)QHV`)udE%wsw_QJY9jLM9B9XvR0^U;s5OT*V(gOwB^t*Mv+QdNd=Dc
zb0pJclCMfaQrCX~`dy-TFRm@|ZWVJQm4$SzCzHJXGUJ}stILx~-OL3(^+(K$2Lk&|
zz5#vA7Gr(^b6mloJtNP1b~#dE9iu6=?361!pcbk6=>-^!t3!ef(O at o}Z)T=pR^KL4
zpy19YMkaxLy6!@rdP=+NR$}6yV$v*XCK0nhw!c^*<II09I?6jaXgokC50cr7$txH)
z*7BLIm*pp^0>Fi61pPw_{%{S&0XK`_ot+<gpS)1OTSsr;Ya<W|1<LAf{5#yCu9J6;
z+@#<ggBtgrkQKScAlg?Es-!Hg^+#Ybdizi0<@TNQ^AMKW)b{&2Zj((wgfIc@(Wb$?
z1d7LA*1&(|Siws$bFJPL?RiKC?_oiBG0$)~9WZRBXb#U2zdDma0x7+K$gBy1n9A;Y
zq0#{0dr1`BNLY9iL^6t1RR)ALId#QhX+?9}&3 at EmIQze-Mfxp610)tKs6%*wQ+xQX
zej*u(zBf#XI2e?y)YLmkXZUkq)-#{*N3$d3$U}ePo|C2pf$)_vygYVo`i4i53_FI_
zz22I3HCyiaUn2~ea_9~TA3{E={}bP1%nU*GUEosc$})gH*seq!B2ny!0>s-gtgy^v
zgvn^2%5h}9rUjC|;ppR-vA3+XUp8?%w}gYiwax(%${rE5CXSgG at 0EwyfTS9rg6Z=b
z#tnbgZvTS?Qc2Rh>~6gmK;x{zPuz`{F-mb|DCj!SdO}O%VbDHZmun{eQf!d;=!Af}
zQbjhHft$k4(({lz5LnU{+)%e>92DFeST;Nf3m6vJBq<-9mVz|aIAuqw*u4 at R8!I;t
z^#bVAj||PyQt((Zf*@@t`E_}bh8z5dCC`6ZJD8UrPfUOP=sx~2tf2W5eJP9>`hY|i
z!$Bd%%V0Ve+lRon-5igTahey?|4y<|80VyhveC(ZU6YfYOnpA_1zed+WtKpslz<l0
z&9adl9;TDG!RHEThHgE(76XiF(Y9W$drH<?|Iex0Z$A^#^*U$Y{e1O|Jg-$xQ%`?j
zN>Ds#7{Fem+p(Xjv5$M!OXL}QMrVZBD~Oe(v8ZYNEXAX^;q7y}iBkHHHShQUiuB2<
z?o|9X3ljgv3?Qg@@oG8l&i_pE0T=+yvY+pNJ`Dj$yua(Z?1|8X{cCXzA$LP8=WMg{
zjtGCE at Z!RTtmSCe=dr;#{GOnT8N7cKU1|tW9=uIWbp+5jBy;XXM*xkQYW(*I*J;bz
zu*R at Mty0#|69iilJQy5qXSP3O2Nfqa2+GfY7hOWz1m4TT@%IqA**K at 3BpFc{@xI<W
zb<vk|3)cWNEI=Gz+Cv=mRs;;xrFNHPa8!C&{Q(Eq;a34S6QH<oSu1b%3qF4g1zs(6
zaxcJDS{2kq>AzrMg{0p$2Kx{|uM_1`!nVoa_^N=cf**43G<*KlBEm4wCmeq~oLcAV
zAZ0EeM1 at YzWkHsnG*N&a3U7J`y05IhE&VoK%E`HW8*Bq{zM*yFvNOz4mAch}Mx#uj
zo>^hDi1ZWlt4qa%8#ZHj8JvFyUm)FXy(q4eUA|thF&o2fNaKAiU6;<<hQUTcp33C|
zCD@~4C_G55w#YjPfA_iX--ZHDdM-lzK%1qm^>b$8EvY?jEv5qKbmZJ5zrN0vMA7|a
zmCZ<w-(Kf+jsT+j8j-((mK773!j}&;o;K5J-5{rnT;HA{vpzP(!(e|f67}N%=WRDQ
zs}6R`vADH0z|;CHi3jyJnJmG!`c*@%kA>7|fcmwTi at 43KEM!Vd^H^|QHo3k$oO>*L
z1eYylt-txa7#|XzKzMnm&DtwI_}3p-gngIR&xrC at krQmJOIBEkNp{}Seq!rd`kwSO
z&j~e$-zD7+L0f9>c6)!5)VA-|gW<R`q4}bh-2Y-8wH=Nf at bWL1Iy*;Ui`OD9_iH(z
zF%vW}-F!z- at B}#ffN_&pY*?G11s3j0JD2YjY7I52tNnW%eCtCA>#D$OQ7<AK1i`vq
z>~SSpVJ8e(P~k-i5$7L?tJViSo9|i`n=$O_M|g=ul!HYwxyFA5J)JD`_wh3JcCE+P
zZ61onlVX)7=JLm$I7j)0jjp5OaSGyY^PT%%n&{**A#ZJ}zjVGV=m|*C0LVCI_#)x@
zUf<7QB3h#-Ou>ElpYE7yaOK1Z?%Mh^Zjv=Jk`si2Q7vPdX*IU%9_fjJnIq|KDj>@B
z_^eM!1w?5S=8S*ZB20W#Ul6hJHE8J#y_ck<QiSW~O6GN)d$1X%*MG at x%*YI>8zTfS
z4b0-Br|3e_8@#1<R!aAQcuZ`W4MO+(7yokn_+{hMt|g<GPX#LNTexo+NQSA~z^EYW
z;dK0IU$j$9NnOZF&|O-G1$qxb1&$mIrM3CN5i>14Kl*>sf)PsVG4%HYECOn&76b7k
zS2j1$k)v}Q1<h+Z5jEt<3Up48%z-6s?vDKpY>Q#XVVV2 at xrfx^m)R5lze_A8C}D_(
z@%sYEo`;Q9_w81!emjCMJd-<4YB%zR=kxVX|8n~?q~a&bCY|nzs3aW7a2!{*=MbT7
zJpRLT;_ZK=H9NH~W4p#GnCMZ36&oSf;d0EU$Zs~V@@q$|b)zDUK>t`^g$$(&c%GOQ
zcH9{e=guv2%U0rH=aDF>20t-q_GUhV1)c3}k4lsGb!eVB#4F0g{ea9E_Zw(WXc8|p
zi7Dyc<bV2 at j2}>U`w`5&An7r*Uz>}ZAQLOpjrM=7&#5e<Z!86q<Ko*O1gHY${myXp
z96g5h%zV at EPAs731O<FblK}jrt-}(e_~hr1+s;|ce>sAFShUrxmN>)i|1L*nteKmj
zKqje+I8kot3ztyZ^~H4B;WsNE^R7bfcx)$&jgp!45${W-_|Uq<04CJZ#nKlks%~8w
z_Sb*Ht?cfIVefTi#g9!)#_7WvwL{w)9sjxD(^ZjA)WR#YOb>OaIqm$5zoD1r*=v`M
z0i{2&ZKpTu;x<l{SM$5_pcc9l-ViH8QeOqJGNdmc2rt~w#`1igNem&hI|DhMI6-n@
z`RzKZp>5>1xVq<=%}7A22Z)oZgkmwMb69_Wt;Y!+--KeF at IU5y9lt(OZ3xu;R at iy>
zRJq0edc=1CUIQ5HD6P@<$7yTP)NY(&pcq$QQXmtmI{skoKuJvGrsSL7erW0YT?1{d
z&aZ{_(!xPRc{Uj?Itgq$!rxx5I|jh)+kq?wfk24bbbCAC;C$SssU}mdq9->cB{_c%
zgv_hbkV4uw<{Y-AV<$DQwib#^q>Pmhv%(QusQ!&~it@*rtmmDYWLCxjHyl1Bi8nnb
zU#j-{6Os;AoGhs4%6BM6Ox~?t;5ckfNmW78;>!ZvbBplWe)}sc43an-K?bbvdY>)+
zapaQ_Kj;1YFfz?%LTW{sSnKb8{>y(->LeFv|1xmPd?)j*!q0T+s$J^u#G@&SyFZ(Z
zCMLppbedc`VnevG6{$4krqbOp7tyJ}_>VkM)$NpI+TkPe<?xJ&y`7el<=A#Ut?Kgw
zQ*x*~ga?#js2PH`ah(b<)QICBRO7)N#~E1AV_Q}7d_l1rk+NZ<-$}!6JfDBJ%-f+p
zZ3EUPV!VW at ty1<@gPjs64<3P&^h9kM*WFQ`KQ at zUzumvB(X787k)fBVc3$el64&ff
znMPf*O!5`LX&Lh401rpnSyBfn*OgmsL1sVuPwJ4OO?%3YJki-nhNO!Sia>cNwm~5(
z6UuUJXh16S2utic%R(&CKA3;vo1t%#9H)xZ5CjMxPJ4d^A&BVb<<vmjX2!1-yj3Xx
ziM_~6lr at rvnFmuS7?OaoTBJTd31%v94&DI+ez8ki3Gq^FYX<t*KEmq{X8byQh2Y|Z
z97+J%^`KEWH?Y at xI@DGRs}O;B%08qCibmf0>Q16WiQ;h`CoZ}3%m;sa0Ubs(wKq#J
zaOAP3o&>8i%{@#L)^Ruvkf_sgBYWSb`qk*sQN#qhV%wGZ_NE>FB`kkon1n9{=*_;+
zZ|Rz3Q+BHlP3zIuFa2P_dt9O)G<b&P6r16p_bmLDxGWmvKBsTGQ@~_3c%&bY52ERx
zTl%>gBl>!%%cqvNp*eq~p2#l#{19!4w$5YCpOj5l?Y1Z92-Ryl^{fO;RI*utoXHiJ
z3vbZhK7|1;;1tzH6kqD4T2z#Ua3F7O!u`kd{TX_m5}-%=`90X=;1>RHsiVCimGNMa
zP-KE1r-6`S2e^Dc2XViIT?t7caYL1a6#oJa=f5zpG$gRANA!OXQx*=*kZdoeDRKCX
zBj$nd$_ at BsvwWscbA7h_)H6JM%Rl;KjZ=i9^YibAqD$Q65Kx at 0x~A`B^ac(S_05rq
zXUdfVb%;G>{`*EY_xFfwx3W<^fh;RJReZlIKtI~vJF at I??MHd;C9qbC&M637s<-){
z=KQ&jy0Ojjl%szMWn|hqO64->hKzXiC39#AQxMW%odE5b31|+&x2M~#tq at 0jT!#xZ
zD||bSW+v;O`vpDZ&h>s84|xj^0Mqf(kLjvD?1pb>U68LCUOwdSN~IT at 19OMPwmt2o
z!;$+HeQfY?DS^K)4$2<pI<RLVsmPM5>!=Q*R8 at Hg*b9G$6L;_YlRW!C_jmV1<mP9o
z{iO@|MGGZqEn+!(HY-!sAC^oxwAyEfb{iN~OIbmdU}dGhifV1N<L$Q=R^PBURznJL
z;CJ~`3 at wFn6nilyjKATSLYKM2>2QO6x()N&SjKrtuqKAAmI7YHkEaC`giK+=!w37u
z-KEqK5p;hI2$*RBNh;40__ojN<^>d9#&y9S&LiV%raL at SI0b|Y$R{|$lt|9^>(JkR
z>cK{(gZD3gy)y(OIuxq>hr=A~e6dD+cBMT~%7?#3*n}8`{^MjrEzAy=#d-2hinB-~
z(;|s<=8p`PgzXs>3z2E|+f9by+TPSD=QldTthRsBf}4B>y$c~ruD1+x?-)*}Q$?EX
zN?0SIsiOW~HI3Y5+`6;kSV^ktAX*qlUj8&*0;oe at V`Ju}XtGGv!PZr&B|Y3zvfx&s
z?$Xu?QAH0(a&$Jy)Pjqhax)?k#6_s|G^u4Zr`LqOuZX__6hk*y#B0r2C-A7Gw5*YI
zot}RzT7wl6&J2>Qt8CW5ZkD<PQmnyDna+V6c03P`8N5ykHAHHi7v$6Cg`!KRgwi<9
zJqVX9m8*`}J%IY{tntKCIO2s?uDUzvB6oE6_ at 9m&lwu6yOJ~8Qa0BC{-|md?_4zfe
zRxoYSMx|fAs6xQQ1JSly`KfG1N#Nk+Wpsb)L{9TQAgBNiDpRN+gN?+i7vb)cjO|H9
zC<{FneL}G_AGcR9UN^RZMH>P%TvA``6I>l&gh#RR7uOyKMsbrWq+sb42qeHdlLl9*
zj-KA2OcWr4SUV?V2-vQ__ySE4?tsnkL3(Bo%BlcR6$%Fr+x~HyJWS~0iVe{2?G=A*
zlAJT(*K0nDUCTo~nc$x1g%(Ic_Q8exKm`_J9dmC=$9Vk(@%>_#;*XBeBO?BuTTcfn
zIom7vjNPU-GffTU01Ft^wyLQk4c`iN(-&sE_s!b&Hgnfx^v@;D)Wy@%x5&gDtPns?
z85pzp+!C{AiGaYq#-c_6J?wZg%8P$~(7nq{PD6@&QO0koM~aqe6>2ED2ya7-gCz=I
zMp5v8>Qka_f`1(?DWy=O4bC@>1PU=|%)IkjnU$&afsG=Py11_hD5k(YTwcwK{^S?s
z5*#k9Jz_TO^_-_5t3djA#~8Y3%nlDI#+mzJs`yFe%fhw~XE{<aMfgow;k19dz~NK$
z-b7uZTx<B&hNG_*IgXbkg*UMO|GNc3L)UE`p~hszb_~=v9&(BzXp`vz7VdNtjbdft
z+#{L76#hjCn{T?409ls5*~O9`oGN9(US7GT8d&8{{!=Y=iUNq8Qts0PJnSEyY_l7=
zzmcRh?AQfMBRa(@ulf&8)F*$`#~}|;@n#x7IFl at N$wK-_i`xHbOaKqy4{?Ion6W{#
z at Cj!q1|FDyk<fr at BF06QR`8QXJokRpFUUyN>+9gDv^`gP&w!p}?>@wC(5kCz#GlOX
zAFGV&x!?=ifSVmW`HfK5^j<L033j|9-<cX2 at DDOIHb^^x^x333CQ5()+`w8|GGsJ~
z<p*_~Eyc at ou-LQN%A$Rk!Z&Dh1c;38-elJ~kT^D~M~|j`jcfrAJceJ&11IO|*i2zW
zmmc6qC(G1y`WWp?5?=CtMX1%TB4pR`H`=NKBDHXTb`CSdq@*It!=eB7N~p|lHP?jt
zEk?WobmQ|?jBSvEHo1QQ?vf=6yTr2v1w(1 at s=`H5ssve+KP0hXl%38^_J@~kZ^I3s
z+dGG}@@o2s&&e?OqnHAc^L>aCiFr|w`6$lQ)zS~NUgb>v+EJdO0!4&OD+%NTkYC>K
zV>Ce(6KkJK@#}MBgmN<#LgxA<^BtwrriUVh#1#;&cL>ekWN&{*)y-uJ4Y-37+>6q3
z=2lJXVaX7jOz3Mco<G(IgD)cH;u%9*)1ci>wZ0ld8|m&kVk at G7C6VOV!#u15itU8;
zC?%-X7?A7ZGmmnj_T@!Ri@&m{l7#!#ZwVkg#!4-|L6OG-9H<u6?{J{vX=Az2(E8L<
z5ur2x?YZmrL}GtO&&H2#o!9GENjAbk!gxtn9WfN$g*z&XRb#@WMSG0YDvhP4x)|<i
zsQ7k`XN_ON#VrxsS%yHMc7F$D7*C4uDRE&-%6M=Yo`Qf^{k+${z*p0%3WKyxU>0EZ
z?)7k}FNGA=Bf&=Vp#+xq;bZY-Gk=nFt2dpIchnsm^df&`3-8QFt!yDN)cmF69qK-J
zg!5|>(>=?fGJY(D$8GrDxC~3WLs!y;Wj#*{E!IvX{hN|{Aa!<BtD#9C$mstA2 at pvP
z at 7i{2s>d&;LebIL1jUq$3dnpaXyfrS{AZNF>GupXM!Hed1aSlA4*{A>mN0qh6yS^7
z{5Wf;#&~~*s&Q%Cs%el?`RMJsAhT<t+wiOj=w0#>XDjn<ghtf1H)Ve}p{RPGox3kj
zUdbJRIc~m-i|<v@%p$K>3&Kw{<8Rp-5aLqt$kzB$_BU|l$$D_+VYY6;oDs5?dURF9
zoofx at PQPkBX2$&UY3|i1_dd)wFO%1PF{!VQk+pw4y_lHrr##qVA+0INfQ7?;5)UJJ
zEBID=&gFw^{_L4#W)Zv<78U!8h8n&KY$1%&1cd^|<1|OYMZ=#-LP|7Gs)BQSnydfR
zef`~C1a$NBw9z$65*}>6V}p%n-sSflr|z_Q(JO&t^Qeb6HSpFhB?|Tu=6Vr-G at hA(
z4oZJhg_VnrmQ=794=sco7Jqn%GlyomUG&Obv=dhf+gENtGRF^!KC7i{lN0+}HM8D>
zJMVa~60p+QQ~VkYY56)8nt+MsykflJ6OeaM;c#WDS|kbTY<#Cb#siw4^367kQCrCT
z)Jta;^xQHuE9#<Df_oodJJ%iFXG#{p1|Wa2{@pP#V*1 at Sy*|RqQp!UxEwnpW<7f at X
z&#EaLztoLf`t3A5RAh$rJ6*5b(u{NNw8n3%^FDP=B)HCokqKz8eDJy38v7mNvSo3>
z`aAqT7+LqJmf2VYf4ItL%nfrl0V7XIeeERzBg<S3ie?k(5zdpC8px at Q!*~D%G=hK9
zmu<Hwr+LbLCeVaF25+5HVYItyVBeN%2q*;fHdNee{e4kV-}ree7QLdQKGEHtCsGBp
zCqFpO#3W*mS(?IUQ3RPS03g`tPR{7lwlW;3>98q^IVE~l7&{u{(#E$Bt^p5U=hH}6
zLB~lg9?EihK0NAH&&-LHWk!S!xxRn-KusH#DHZNyf}IF$Y<*?8z0IT|Lbd-b*RkaD
zvIPJdY4pdBpOpAw@~rkp=bH26RM+ at _!AjZSu}3k64vL>VkB5%R8~l!d>?#qa93h1-
z_-!0>ShhTlr_TcPf^V0loIG{kB$9Eg!Y0(n0HoNyz$Bn;@Sf%WKp2VW818>V+*3|(
z>pzU)wAHxp0)#+a`H`5_f^<;SUxYFlEaO!>R5iw7Z+Or`s|Q|cbu+C=D6(;skHua_
zB!?#_#qTmKGd!h=DBL`4>gXj|9$&UeLPs8+OnwR|Hvq#(8o+0q()<b#f>1FT4P9tR
z(`efg1?0&kM1KvBTzHTwbRd6R=-&eeazQ|(XXU6=y;n%-AO at M2budZ~1POl~%Q5wA
z>@;(>-HL at CIG(CEgpL;&57wW8DKg=P?<UttZszjfa07hi6GYI2Zk^Gq>ptht6joNz
zd^yM8$|#MkHz>dytm6&(LDWXn*xPxM-3v^eO{fTU1SBnyw8NyKs}+CRwiPd8it(S|
z=E&d$COR^es2 at dn`={9mp`a6MSKUx at N2CBtLD(K)MGV`sQA`}DMIkS at 38M=v&FV$C
zU(Tcd6%C423*(pDrIcIlI?<M!Q1f+YvW!z%3#BX!z!}Z9>`?o6+E8KduJp0_%E17O
zZ<M4n9g?mkhP{uMGp>I;lbw<}S!QuuZfOkHR~t}iy2aajQM|l9`xzKxHl{T2Qo(7W
zZ<;B^!qhv0XAxKjmIb|5VexQ#i#h>xtTM!HSUmT(Mu3*kiufpsZx7V>&{{h|NyG~*
zz&oXa1I<<s{!o{(>j6hFkai#}@Ms7oqK=ltqMLF#5Nm5tSVMmU;S5JaX71q+GQ5oU
zJ>P2g at +18I6`@`f;O;nQ(N`YC^bM$$>}d~rU&WJ|ERQkxReGX51a;l_V>1e%DBm;l
zkD8o=y0cA&3l{rn)ii^i1)N43S$iQ|dhBlh$p#9eK}TT1>bwMJY3ExJ5gUDE{<2zW
zT2Tal&5^xDuYiBA`{Y6>Kbda+-HeXALq5nX5+fd`BCCkETD|Zk&sudHR|poR3qER`
z1nfgSkc`pkhMIlji}Pbd6V%<x at 1Y&Hv7PAdFLiInA1Z7 at pjHHQ2KM6i5XyovmVxlJ
zH6hImR_0RM=mSB1 at guvOA3qLcjD$E5GnM$kY6W<Pgsy)tKTi at EGTogWm*0D;;JP~Z
zP6&(mF%e-Uf{9}UVs74T1EkfWjqUCyZ-Fmj#8xVewHg`aC>g39A%!H*r%b;j)Ri7O
z{@5X>QQ((c9yrbEZXW)@n_BRH8k=IP6j06ezkCZNl>a_kfHqed&0(g1IxgG5HdB9w
z;y-thOgVpQf0Qe#Ouwkaaphm;J2sqK5Z8#04 at SnrsXzg%O3Pf8CGFq>3&{&@nH%y`
z`H}3oJnl209Ho&IEecYqk|E4vp1tF>y=dl;EVu>6x$aa`Ltnw7gO_XLSF(8mXuz*S
zj34Uxp~F6;I0}!zrYV3lW|kzZ36I_U#9b7Y{bGMRz at f%I%4_-PorTzUJETYV#m6Hm
zl)Uu1_y^MP?1Z1)M&rl&m;Xih92Cbwx{e|^^A7~sXyl}0R9x)Tlbd}@C#$q~1}L&j
z8uGthu+Z7s(>BOIX89-Z%WwFO+q{qjpNIFT9;9fz0`dZHOzakVQr&di)%D}K_eMQ<
z6RdxjiTQH-DtOA`ddQ{6vJ6K`6wS#^8$h0|<HKkNM+8pPn>WIFyrJwwLPt(NLkunl
z!<h_05fB&VJ5zr&yYz(*&0lLmd`Fr&92zzh2s0N1WjK<b6fu;tjfK~D71iP8<qa#%
z at g4IaOcq|B8<5xk5E at 8B2Z&Ac2hpM<i5`ESwujU=RRXNf-0f___m{NC=4Y;qN~{_9
zd%ohgrNhcW&O>gPP`h0%PLW`{eVJUm3euT5HfKwxo>dxut#j0}8F)c2)q=$36~vgj
zriaer1<wcclEFrqKU*pSTXkh7nQdxc`O%h^ec6S#3v2G}j7WlSUAcItL23qRnGApV
zDWv}d2n*+C$wX!svFAD3`UA167ddHYQRcZ6;dXrifJC%sRh$jyOKQ@%bDJ&5G*xsB
zTky~W2yD`!MX)j+ju9wu62Z8qywI4ZV3!um$M*Ti%fQRr3fC6&g0+1i$dC%fo at i&P
zUp3?bb4yz8 at ayjN>6l*aZAxETiZg#zPqI!tt&4<}7VT0FF2yMO#)AJvc#lQ^1VoDJ
zulXu^`}%8k`$C0p$e&gVgL{<sBqZw622NI};chOO{exktonCb;8Bc_6gFhI$;gRg<
z1X#JIW)%G9)!bOQ<GFL at IICnIAf<Rak4&wThA5xH7s7(hjYJxS0VKJQA2ok`+r8Nj
zm*S0`RkKUjjX!C&A&xZ&1sBgP6zM_`^w~RT0w!(MctFejdpn7$xohh^c{$NSNIYg1
zBr678hG4rYFHLAf>~kQq7)Ha-yHjE^ei3y~j(vJB>|8IHW;^!bO at QNd%xcts at BRu}
zsPvMu%!B>B52f4rf_qYcH1vOzdju$Yjr13Pe~R5P_z_sQn#*>al2PZ1v_Au9vN3ul
zP9F|zVM0PyV+>_NLjCOJKerFDQq)zjY$v{)os{`Xleka$%ZjC9=$ajZ56lpIQPz`y
z3mMu#9-%gyfD+=V6>)6&N9N7NuUlj^aBc}|@ocIWD)2nx#<T5z+68}NGGNn^^`gBf
z{^R+wJ>qM|k=vG8+f?hAxMjC`)_3Qyvbl`nZCaYnKTQK4$m4y6M6MOhWL%a}e98lZ
zxKIYJ^FCV)gx`HU=PdEW%qZ2brT>KD$sl$A(Z}1eqyZ{d#$cydWzi~OC9NzB82LDP
z+Y658gI#m2U=D9xNk4x~F39&qsNRxDWJrG)7-AEpj at J`mqSEFMCT(Yl@^r`+O1Gx6
z7oLwt<!?&2dj}d1<?cBW-cLVPhpT=wAlQ)0D7t9+97eUl12)2wn at NH(IcQDUT}lx4
zsKvJLa!P47N0 at zGG>$*^1 at Es|cAV-0OVyq6Y+o at cvh9=Wu`7S%E-Fzgi7wBU{%;h$
z0J-w$k0Pxxl}CHyZ at X1M%pGw}2@?oR*HxcieH>P3#(di*No6pncRu#vQ6Qp6v6V&7
zO){iFggAg=*dsrb&(+HXPrur8=$%}WyEX)xfFT=EK6tJ&{AF2|Ds`PahYk at Op8gG@
z2H3np;9kXzUk-m+VWK`#KR3wI{*2n%K0qe%`l|&rZAF)RptA~H-E^Z`;sRXtnX2S~
z{nc6btY^s_|2m(C?AR?*Ff}kK28-P!w%A^(gw0zt6|&HUemq_z)N<p)me1Iuqc3+Z
z-qzY8hRrFa>D8gvljNpYJT=-$nXUnHj<@N;i;rCH5W;^(cHs(=%T#(PhPDL>E1aHR
z0+YlUMU>9G8t+dR>gRON9DXaGGEP?~AV!cqiW+?Ph}*;sxGS9F;y#Fb?Kw|^cE*k9
zQX^lxpwN`q at N0<HG`xMB+YcaAzrYDTJSe{x{x at b^h}W_Rbm^R)mxWv{6gG{V(-Ec4
zTq*dtOH_a7DF8`MCg`_7vxms419YeZ7^T62%=hSJRMB#cy!6nd>H1XVBdY|JP7~?6
zRbnU*JU3njmFA&puVY9RA8F1MIe)$@uc3f=^cUB>q0;x2HB65zikRB-P-qM3sgmgz
z at R8r(*ufBGu#o3>$1gdmTOGpn2+4lufn`eR>fC?B1_}4f_p)n&Bc)5&yyfvd6%FF4
zx4k$M+J1>0iL|Q0Q;b!gtColr%PW0kxW8H<Dc{b{*nZboBL1eSSpE at 8usfX4Wk;)%
zOAb+=hOO#0*h}V33={U)#TOblbFRe)Z><B%l~o7BfZEb6&U17}xt<k1uO5kRoj7z7
z38;U4cg&kB9$r5-YnWpnAn+|d-h9xf`<Ae<5Q?y(-Us1$;z#zUalA#Vo?xkwG@;B6
zEVoq941Y-d3i{gU?Ee at ji-21(kqvI7!xFTAuu3c5-!>*n&C6!`qc8d|jM<_Dr#4Oz
zhcHJ$7CFn^v3cTmFit^=C{0mkTp#AJCK!K0w(kcXE~qM#7MaDEskDL0UmAM=B7!Xj
zeltm2zy~u_h`T!7mOG--%G33|@d9u>c2*^O7P|>I*n$Ovd;44<_G%wv^;$*|vb@^M
zwH-buK7%b}vGD+z?g|kMzW>Y&O~zl^uGxW|s-0$^lX+eS&*WY_C!MwWQX5JAO~8Mz
zCESogu+Q5Jd%HB0+h&o!$UA!4lkO?#-S+d&X$2bYR+YuzR)E-h#FB-fj=~+_;N0Ov
z&F0l*EURUWxG at s!`>3depjJHj(aZ5vX)}N1wRx80e%EO at Qmf*!ftJ$0d*C|feA^t2
zuz1-j0+>SYjn{zj-|Y)2a1cxaBCmgjmzzq8iervA6>P;K{T9VFFk*h7em?`qcvF~S
zy9h%tbvwB{#hyALg(Rb{>7?fHfHg(~-Q|+;zIoVRVVW~#@13 at pKvVX!t|J%Xd!<mY
zGrkpX?Y>`!A_X6Ac{Gm9aOzlhHfd~&5OvCmRrkqop$tg$9kx+1ZI;=bEVO?QfB&PD
zs;Vs4On$Own{(;B0#U at BrJ?viaL8>dT87D_lqFzvTUFU at aDi+DrcjVDK_jnA>p4li
z7;O7TcfvV-9L4v{Vj<P1>c(WDVuXrvE|K-^Xb(gQ;2Sr6kUgVG9+$gHI!CMH>%xV;
zNjL)+j`iQ;O*d-?nT|sD(ffbJm%F=h!ThU9N5r_HKS`N^8f2Lc#KGPZ0bG|2#`$DU
zpQ8v&btCl)Cvgs}!A|u3w-48&_`tX%M4}s}0>CSv>ui^Q9*^F!&9#k!-uad}qSoP=
z{7gKR at InY>gVJ>HEkV>U!)q-?pUz<R(-4v_V=|w_G_c at X%%QouRZoA);#7uPDv$G4
zdLZ=I?|nNZwY+K1-tsb}Q0BmEEUNiMT1Q;eq^vgaWHeA)yXB)0;*Q at NB9`aLO>&Pz
zx1GzQfkz9v&__)(CWKlxJ*O=BV=yxWK(<>-+8#gsJ+E%%gv|-8#8{k&`@x`<5t+S7
z{x}B?t28C)8lmgF9q at luy|J1w4R*(|U-Pw)+Z>0aJf)V>hMktM&oJ#y67vXXTp9|T
zW?4fySX!Zl0|uE_J_YRD^X+YcE`o>!Vke*@X{K04D#XJy2LRaP1@=q>`rzJqD0&+X
zocccP=n@?kV&D{g0oN)hOs>TI(Y4~~u~0W289@(-sPAw at k~n|Jo$(k|NrRJ0fe8nm
z)k7lJSL4RCc#z4IY1StP5T}OBVv4i+8Y~ZN><VdI86<!@`_gE~FjoF>vkpvF0 at U)~
zvf6o<`rjJi>ag`^ebWuCF(E|=vJU<9q5=06(jucGv)LmDl6g5vPzRd%g}(cy<_b3f
zSH?bw@*o+26c2ypT&E`J82&%CE^Dz5(ulpUNk*1-1%mm+U9~lW-kYXnFxSW3O at t^{
ze%RE%%iHhD2reC%@+?tkneL_O!#|7N2cLdW`zF#+ at A=#Ykt$p7CK`h4N4P?oa~X`R
zt-lC=yMM9 at cW5k_6obEV1-A5PttXBD@RF{Ka(h|saA|*t6Ve_GnrHi~SROurK=Qxb
z0)#K5z3+#ch^tq+=s2YhF8BWYx0QWE`)_%+vQdz_ at AFjjM&3IgI&cM9sqgb`a}KBg
zuO`3`Tw&e8X}Z-s!Onz!2HC}_8y8qX?$$>jb(Q#xRQ*cbuIBUzyJ_aPlgFKq*v{E2
ze|&uTQ>cH_FU+v>5l0Am4em%d3DEh~@eYZo9)jlH(va0W>0&fc6(u`|Rnb?YdB4--
zA0n(xg1p0!FhHxO0bu<p&S)B2o_x-q>s9>|;mK`Xmf{b9{sYG9yK*HK1IOqfJBOaf
zGyEIoZ{-bMf|8An4$=_97i`i+3X)GcPh<Kg6^egtgLmhnrOX$O+-8F~=tWV>;A8NO
z-Xub@@oLiEnZ6!hgeupga2yxC2zo4m7~c5bSI2hk09VbHbV#UF<82)=9e*bkiz5Wv
zIxlKX^e1oJe9(j$+ysCLnr!DCMmjaw at OE|UVn+fNZ7nDhbyeXn^PKf%v<AY0hAZYK
zI(2`<{RAw>9)(4#%Y0=NSogZB)t1 at li;RvU#3X^s=s2NJgb)t}PTrgPyb}<7EH|L!
zT=^cRMW;uqs6k+IIsA6UL2I4 at 8EG751B6JXg(otjB2Au_LK7JVZkX>xP=q;5A5*i7
z0CD5s$p2?OLj}Hi*H4i^mPPG-^0p?j1+jk)1$+LCHvyhEkg5}80I=FOY|}Vd7}(il
zC37e+QF9SSFv^ON5 at 5&j at U{-~f3%^Ta-4=~*bvj+-2j1Deys-*4%l$Q at N286wuz_%
z@)tTEGATUgDGQFevC+m#vZu+F`oGa~bMgQ|s at G+u>`W%2hkjGOQ~kk#iVfKcvaEj%
zl6a+IZ>I%TSW$2by0m>O>Mu3ZduHB^$0%6}=>nX`rsrV>B+YWpk#^o%sxj>tTd^=q
zHVFIUSqp!cr(};bbO<!pUv8rR4)9Sh`uJN!&qQ(UKcLJ$$lcV`m2;e8h2}A^C?-!l
zuLUx?4G#9F0 at Ma5kH*!2FZ0-+KfZr6a7%qkUir_8a(>X0l^LCiSpqt!f^Jt>-ge}}
z`xTpf#Z at Q6QM+!i(@n=&%RWVnPx4LuS7ukPDDZ|z_Ck=C0`R`}jJ-m0;OoH1#p!TH
zikD!tK4=G(MX_>1@~T2lu~JHe&z1)VI&9%aodCdEiGl<IaiZNL at VpNTnpuAVKgX5Q
zQYR7Jp_h-jg{zY<d>W%Q!~Y)8QzUiG_f|XANXAjL!gfxy?~IZ)H7k0%&#k>iiD$z%
za!k~-rIHfZOGVKT(u>uI(`@rU;90~HG0;|1fCJ~+E5=+z8-W9J4}(Y+NNHMY)T%Hu
zvE%9{4(hZ{32A<_R_#W$nGJsu%j`}aOOi)4gmxD3_y`#l+GK?tp(cdQ7mU at KL5PAf
z=bv at _ccmu`1UMKMM5SSeugs#eILF3ef2o at X>~6iQybrGp;jL??^MF^h4B~>$<8%0|
zRD)MRIqX0Ad!Z_bilb;{noA54D=@K5sG^dxOvFJ3=Dpao<vYqjdkTM-FJMtdGO-p(
zwb3&6q*XH^Ai4&yS}h#!0?1Av7p(PG^yN;`LXs}7ze-U6=3-!V*>L#Xp)Bp-xTFfA
z8WqqIn#Vo;De2b*;A|64c4Que>`M>zoh=1c;-Md2=_L-cW&Uox&b=plJGsWzQ3a at V
z at k?+GjOY%XEGFi_Y2AOMOUGsxCQNeGMemkwlZcay%~TKNX*rWJ&c5>nj7t+6SOL-S
zW2#!6M2ppglGz}itVdoQ%hDJW&WqkHizK^1OOn-l>m&$8(pRN+%OHEeScY$uvar6G
zsd-PeHnb4dG6a2&<D`8!Kv3&Z8L_!Z$>&bS_(0OUcZWUPo^yZd;hD%}HsSaK!L&qQ
z?vLn8E*M1PVDxcBZpBL}n?=R<EvD(Pal4ME%~HdU+vTj&Y;+24$=?gHAjCi7D+0zR
zi2?XrWaMJEiywS91o$&LV5Pz{34C;V^BGj2fb*yp;21%e>8UlQ6%xU&O8ZnY7BP|o
z6mtR~CfT7u=Wc)RUx7(qi1y0%W!~<kMCvc$ftE_V>N}D^Kk3Ra{JQ_R*-3ET#(0?o
z>V}bR<_S=_xeO#3k;5gv;G+mDF<wzZBTsAe$#k}z4I?rbw-~+q^+uD6t*kNkkb_<;
zP6D0-Bj at bYm-6WtY)8b-&-AQyfqz{DyqOac@|I0}9L0a*I6efjBO#a7J^ad0UbbOW
zNO;&s1@%=6wAfaIO4l;r<7*boSBg<Grwf{mV1$2d!S8*~V|1BzRe8Q1m=Tr}adwFK
zT8r%|NsQJVaw@(UX<{m5Ny%R|c>CLIP#G`pML4}WrdrEtJxJCgpy?Ox9O$b!#u1Yj
zZn(nWAT)n79KHJSu#vXqA)K+Dn$jr&_<0baOUIM^q04l{JP{QFMJo>dk+mmrMKHs?
z86B5{+*+4Jv)@gN8(U+NmQS at t$sEPkRjIt8bHGrrA6}}CjQaWpoDk}0hZ%(sm}RQe
z5f$jtKeW)5NKNxatRzMIKZ at baU{1oc{@R^nzSMts6PX-VHPAivy7?m7y?1-|loG)e
zTyCqhDs_&GqnC%9OCU|e#Yb>w4vTxKyY4J_lGAeZy%{e2Ui-a{tfx<#3t}YLY-(}H
zu8z^90uLo&sqd!&#@}}Vk&Op2tSp1uZTlsenGs~ZxT2mEFJht68Hq|FKo*6H+81#!
zF};5>B-3CCdSq4BF>f-Ot8pOT9KrqB9Z9zUcil^D5ogJ7N;vCOVgIPl1P#{fC0mVt
zZnZ*G8<PyE`i!X at SLP;Mm)vxx>%;e=&V+Rd5J+QJItH7CSC$f7S&o9 at S>O|3ssb*~
zS6TG-*tHI`YmckaZ;GR}q@(+6YrB*FS=E2eV*yNfVrg0(1K4OJ$5Us`1 at l=jWsbso
z<7&)LHQzcF9?RN;YT90b-SaQ8DJ5b1saGzLNrg`viohoVn1QpGvc7Ln=_-LC=yb0y
z8T2S~Vpo}~PX=`lUHqJc-6Tt!<P8NlAGG+x9r7i#3t-m(32AdGGE3ZVA(Wqxgm-^7
zB?z&oM6f}(&W|^nUyTrBKXdix88bylo{S%K at 0_{isNpE*-VW0K)3d at oRa-<U<Y&N^
zVD+kk%hz&Mk%J7-l=F{8jMyr8Q$c=Vc`LxfS6#4liVK3ri at v;oXhM{AWyil{5YF`K
zRhDlRqum$2xE#8fd5B!f+9sZ))SiFrVn1!o#=aXUynnmt)GMbuS&u#5bGJoD7En5)
zh~SmO83!3@%13L*Kz@(hG8{*>+ND>dC<~|IuN84(tRHBGn(&&-ng3q;PtOgY><yPP
zFL}Ycwr`GJfe5!X92#z>F63u_WfOz<&cDzG7_1+n at T4Wly68R6Whe#wuxoz^OKc*s
zup60m5kH42bF%5m3tMgIJVk!AsN6UcTS8~T9zGea)>-uRRdwNX8%)C2H>L2$gIH*l
z0Sc$6DtIQ;+?`Ztw;+Gc50{?8)a*P%PnO7<BbA<GRqR@`swg%H0d2>q2phqah*kDi
zg7>ekUb*sidFbcTYlSzEc1eGVa9cv&A^bm`j+~i;af9hDeY^lxc<v;!@fI#mslsiC
z!P9f0e?b#GEyUV*?niK&Y-XM6n&!ZSl({N>Aj(*YOmdvB?#=s4rDksVCGQAzDi%wO
zQ_-vz8j0N4h3%J=--<j}o%x#SaF*(($ry5x`UpaUVvByhaS{q2f*609HTNwXbeKjO
zuDua&(A{{(z6HSY@(iM>>^0+ZwJBDP3=<g?!QDOgUyenOu0x at AtN;4aq(RF`J4V`|
z%t8(FTx64eUqQ0Gep9foop4UAuPd+R+c?;xCyWPi<%XGz%+LRjXoK5X*>Z{10%)m0
zLel`t5}^c9w;bo1G#7tR*S`$R`B}A3a=)w%2t at Gyk7mWO)!RGgk7`td5!LcqkSLa7
z8I*=9$Oxz_rSewgiXOM~qo_Ow=(YCw$Vm5#NZ(Q7rB%9DH53<3Yrgu~)nkNOKA)V{
zu=wMKVW%-YpM`Qf&BI96x=D0F`wlMpcKUfJ6b*}mEHMMQcI<!RR`fLE?gsr)V6@#W
zlRgP60beS_s++7>r?F{Z`z8l_eTGL=w;LQE%}{G!oS(lx>e#?kUU{^D8d)i+j|e*1
zMK6*_BOWv;HUMVJMJecmUkW3nn<9W%jLQ?hB&EL8?g__-i#AL!r0c6bDrLdyyIY++
zf?;*3n|w$mbx(iwLe0=sOKF^&GP`*C#(5^yd9bq-E3f@`(JI1oq|y$H;Or)IE5Z^(
zl(2)yDaSUKNo|b=XoB>JL>^i+&jDYFs6!E0qX8D>GkJwU=fy$E?~Ez<-NEkI5f2$j
zI1!brHJS+8R9s6lQBsl!6`P&XM)%7FQ&684C(OB=1p0r=0$D_ybM{^VxN}7ri?gJy
z*`%TcV7t-R$)sKR|2WLpzbN0nm_{~9=SO0G)ca)4{2$$@ho11B&fgASC#ga0-%4{K
zsb&`LbARxq1NK|HfS5P#$-5SdrIG0=$Hvf6DF8R>#YHoFnx?k&85ZoK4Ca--il%#Z
z4;+PUW>tUUJMR>~*Vo#=H4-pNcXY{^8PE9<V&(%Oo;l4F*>kl~5NThRC1mue$27RW
z=;*(UfYNY2<7skjEz#7k&&7mhImX38or4{`gA9H~vwJ24>#lJM<m+MG!!--7W>%RF
z^JiV$U1KYL-Slq~2fntM`4$kmm;S;N?&$JoioJgr8t<Xp;3 at hJJ%igQ<!}vZXuY~3
z&8PHHAC4#tKOm!qFU6^~v2qJIq{k%P4dA5HKtL^?+%|kE<vd;;aph*+Ct+zzpNUJ~
zLn#)R*aXIYuu_jfi7G^y3*I6!BJJaTl%l|{o0GbM`PD47Ki?Z8*ng>UYJ;nK(3>>w
z!=Hb3hzxZcsx-v~_A_ym5xc~IW#$Slt~FLiOv=@{0x|n2DRpXr|7u<vIzQTZME=rH
zaHlL*HOpvi=6IqTy{c9 at 6%Z_MfX5Pl6O-u4NC}yLiV(6r><1dXoTT6Q;6(_eCIz#X
z9Q(4SUgURCH92TDr|T^>K29`>{4Q+OT(*A)A46?Z!U>^2av2TFJ-rN+sFtVSY;TN;
zw2mSGqNuHrviwb})}G>5>X3v^NunoQ!ylP$LJUsqd8YNV&O6bfiwgG%jJ5y^K=i*b
z2Rp^H@^09D%QL2y1lHKm6~3iWZPe0j!RNF0y90)2s4;x~*JSnZos=}M+3Z8oK4`=Q
zAx$`cQel_9fLhu+C{0budm9Trs~l_R-r3pI-i>eO+H%Q!b?(xkLxvoc at hPbDNYYk#
z*ocy2POGhLL2MU`29TKI8kR6W{JQi*SPukOAE+dlc-HV#C7nU{x>7;(_~63KX=}n$
zs%dVZ9x5n8ygGkCOLq^IXl(;g05Y1`CYHc|I#o~R4T}4Ks86%WzbSt}6qyp8!YPMe
zM2H8ukkK=E4Vb(y6Bi3DOE$doZWjPbGX4-??7%hlQ^MZwH_Njvs>r73%gaNTiVS5l
zoi_mH+1^eNZyWqj5Ejv3uZVWYqg37T at dlm3>bP)(gkNJ;RL9^EcQzQ7haW?=Ly)L{
z8aWt9G>Crtd3K?^?=NfMOBpmktqz91%xaR4d}sH`7wbRv0UxVRd{oA?AOdYDfgNhP
zOS2a;gj-x`zA2uV1$|hiN?Ej6fo7pCLIF)j6uPLeWn)n*_I3 at I6#U~TLh0=s;>(D!
zabpbE$X*WFZvI)l?i3FQw(5R;2(>nU>SC>MuIk9Ee@%kcjAMFldS(2qX^etcI<5Bf
zX;}hA&2CJgn<@Mbb^_eW*{?D*cvmv;KPu*}$1-Wv6#y3Tki2}P)jHKw6nLhnWD)Rt
zNmWqz0^S1*q0CqT5e}l*un6m&>Go#qkRXH7e7F|7wCZ7|&=87<&yfGjIVORBi~eex
zrB)G}2`_3UxKL&#0g4EiY*}1Mv(Y+mq2=`%!r$4M9{t%tWyP^Ix at CneR>Oc4I7f&f
z;E~9lssSixHfx*fl={uCbTEgWAHDTU;DsVIa|If!q2DKm|1dcO?FCGS1CV?E4tgnV
z6Si*6EL4sFiST}QHH`uSBDM5?B5%3TgGl{tIk<RWREYZ~4I3g3@?`;h-1&xw`jcW8
z(-YeclLb|(BoTVM(hUrnHiS|1&@covQIz4fEKv77I9sNCr>jAd*|cR__)=vnhBD=t
zQyCyk421pIgzW=X?9mZfK}W2YB%?3c+GReV5Qi_MyUR%z-3AN?;)M2p7Emfjwb{8h
z7q~(9AF&b2iY$e$ev!j=Y9PHfhSj}ZA}0upQ1)|<^DFk~n*`JO<+OQML2%B3#%3Wn
z3#p&-W1-$a>iUNqq!-WV@;q;@A>zY}^7=-RieqpExO^7)iQFENco+Uo8!@4X4&F{=
zHS&5CRo2 at EG#D4%Rv71hJs#Isj5!v-j*AVWAQtYQa7}4l$zuI#=(f1XoJ&$1d~0f<
zipM}`N6x9o%AFeH>UN5dd);_>SCdVqWZeQ4$I=L+k+<dZ)fko5vtK#;yl-%=qcMdQ
zSIM)>Xu+X`z7$-N&ZSPR7wbu(nkRpaazNZyHWR7?yv$Fj+GU}Ccvlgr>g!U%{pyJf
z>2NdINSF#YyS7W6lSCWn-OlvYWqwKV3o{ypD}wNz6o%`*q)&OuvoW+DZdn+($eSEM
zS|RG}qVHnA=Z}OaU#p$Go_QiMcYAJdm^3!7M6M;@`zT0bbt0AraU8W*&#j;&RemRw
z6!uFw{Z5kF5F}84;L8Lps>t%+y?}k`QL7pRUXAunbV9{<3oNpEqU##3|I>#O0EBO3
zdOeyEzhAHE<Nh%*nv+yxU9P%~(u%>_o>{*cBje1&GDn})JY at KWd;ejURRB8c;(6I?
zGd?B4LsK`QVLk3703oPdfUb(W^K at _kMW_cGgWKgRgex0=qO5Rdkw+FQ^06ANb%b5}
z3h{GDY(j;v0<CG7L%(K}*!P+kNaD5xO at OXoNiCtx<$2nBs6@;E!A^kRs-xLY^M!E8
zk-|v at CKU0o!wW~wwk)o)|9klC4R|nZz#2r3B!BP*=4&9aFPMSW%6=h#ieAEso)GEX
z*mNXGD`Red;oQ`FKWuQ{)2k9mtG6 at lK}GkyiW#y8VnGO3^HphL*LkO-5{=%!)rrGU
zKFHr^y7FbN3Wr=&i<tu{>82#j1JKLqsF$%duO-myE>1b<^Zoms(`#1<L86L-Ug9HW
zf&ixzVw;o~`sGZTpqxOV<}$9SIkWS72-Y5%Im;J+LbhM!wiwN4KzJH2+t5iTvu1Y8
zVJJ|Uo^3xhs=>y46-d`}N|v?z7BwQMK9Ul;pl|PE4TZ{14k}<fkL#XgB?&Eo;e2H8
zsC4l~QGGGjR(n3PZ2k}OKL1erO9?E8iaUCf;W92!IB-HWfC-z&rreui_ByhNcpNA@
z#9b4AdW;OPmq$clNdJTUak7yp<&`3fV`}`+IN}2yt-b)Xa?)~N@*B+y^ar)^=U7?=
zg$pO7`e?X87IHq9c`F$hIoI(#>zSo-ZVlBR(JmI+vd9zeKF?#j?vY^V*1Vjb{cA>M
z`}T-OT^9yb6sRZ<?*5KJ30IGBJXQBa&Iz4=;S{KwR%c=qF=1!KSCn=xB10+%x_3vU
z^6K6U`K+V%7C85Lwy|C~dnbw at o_oP#I^eh#!is)?3K-zri{lC^_}+C~<pJj^1<ROy
zV_}h^2db9&?}(C8Er_Bj7Fm=|Q3`zbAY0gwQ at bfiF4eT(o%jQr0l3Qa;<q1dp4PK}
zGCf6!qU4bczm=W;3CpTIFDzDuJ;`jPYLO9<KAId(ucl&=r(AMdg7JBnsw&0 at ydmV=
zPxxLW_N;Qyp?|1cte~1W%4-v+#>~tk;?QUHJKE#=@)Wp3_l7r!?`i`;LU_mhaHjHr
zGkER%a742LI8J*kP^7<jm8e8IJt<0mlNsn at DxZ<)C3rEUDfV3jEP`=4B<@diOAv`b
zbrNW+iw{>ucIp(|$%rzgsh at PC9*j7?fgFu)gcoQQL$dN5y06+&dVu5_i?vWuAiZ<~
z)^mx)k5$^Q>f<mj(WN^0j at d9tb{A4d&&E}UgfAG^c60zM#cHoB0L&T8q-ackc6QgD
z<^AzXpO9S^P5`7M)K=kuuZ6q3{<`60Dy4CGNtgP1efB>iZ_CIN568Z3H9AD~y2ifo
z19lqlh))U-H0pvdY(wYbj|`hn- at W3s`@mNOpwlQ!vaW>xXqoUgOkh?GVwZ7SOuk$0
zkgGi$%I{n|6dZ3r6q$+?tqU7}Fwd)nDc~<8<g9bUZn}KS0fl}rCh9P|mo7m&q|ghs
z3cs&_?7Qxc|7-{x*VWn;Uh*HjTF_jx*wdc--Jn>t)nwQb7|Ob^b|FT~#;uV^TJ+Cd
zJ1Es(m<qr+T}30cFgo^mkExGVe(XNu^=&Ivqu#8o$SmIJQ<GNdG!=h;ls|jD>leIb
zE9ePlm;;06_M1zx6}JTZ`9OSdZDPAS7<@;*LE|I6LTM+0_}-?SX^6Z!q5;V`r at WVn
zb at VLL!cdGH%};c#Ok|!OnJj|qz3Dbjx-h|qs=n6Yn-x{&l&PQ_5~XuWJC2Btc_k~w
z21u}SH9iRK#50B$OViDNsQ4frf8#>C&ji61j+e#?>Rlmi&o7c_SkFgi6JHU*yFw|T
z?B&Yv;0qA4>$c~u;^5$0ivDd8oFvFLsm&8U$6fS#<MSpb#)LpCrAPpp)gaz{m-f{i
z_S_1c`3;bc9#;N)rp4S<UhuWT9*{&$qNqCnMm3w!Vs6fef;j?z(E{-gGu($^gcL@|
zXLYDh-3$hjKip3!8c`_blGiO#6~?Eqk^?cMX6#`Ow0s;!@@7M=EVZHXJjua@?vR<8
zK at ajGAN7T5!gMvGhAld<-^y$V4c|QO_p at e$Jwm?luEC>|CygQit)fo2XGr6IEyHgM
z1&?<IZ7?H2S0S5!CN-uf%3em_kp}3OC5%g5e0cndiFcosce)T>pRVRlg56cI8ih(9
zy4c9g at ts(}P7zABWY&m_Smc_{-h_GGG1F@~J at -A?$mk`<us&KxqCvV_FK$u=+Tll>
zvwN+pEO!@}{8X^K9heeFzA4|1Wm+SfhzlxiL6 at wg%eA9_J$;9EKt$2ryH*SjxicP)
z5G`sabct5b>ING&-4Tu$1SRYz<Jg!yU}`{px{Haw8SOL6knc#As}+8YAHPnXKPgY=
zpN1_B6-v|QP^ixywoi)&Zed4{=<5UX5$fuuDuwDr;}-i_Z=)?W?<pkCqm@(H+ja0*
zMLASI=TAC+MI4A8q_(4Bkgk+b6RoNrccnDx4vt~Dq`#P_pHx?l;v|!MTamp-B%%aQ
z<HU0e?C|HkN5sgkzs$*rS&f?dYDi&Vu>$-XJ;uH~AgaQ3(l at m*oKT5*w?wq!QFl0j
zo_rA(pPtsV**q1cZC<vokZog$PfN)}J?9+{4VC$S=_ePvt~HYlV|jkL`-Po}^_doT
zjw at U;mU2`wc_C*$ow}6iiC1P5yWtVP(34!+NPG714=7;=qQIlpxDS{9<*TwTlhY%4
z*!|C`j&(Xn6vG8;znFD?osq%{!MvfHHPV4e|C;g<n>n#UKmz96JA&2!G?Z{(Aevx8
zx*o58zLz3OY29EjagVG~mWwj?^VY~ZjbJelJ!b7PU*A?Nlx<e^;VvgqR6kH7FQ!F`
zV4@|i-lX-1f<!Jw`Z%v<`P1V#qfIHC(<oLvTx%~IEX6b^ZIdMz6g13JMIl{L!xpg8
zXB4H6$Ee?)*$NHYDzTJQ$hn_fL6-m?Cva<j$qu;liM*rQc^-|69;r9R%RGF-YC&?b
z`<=IcSafzDLZO!liMnbvhgpxqk?J6BR5xJOnhwd=k_MZ1THS`ORN+ON6pm03)~16y
zIP$hZeE|NdvpG0xMVi_?LvZwO8|3a(JcQK<F@~*R7VB{AcdlB0Yv4lt9HO&E;wYDY
z-9l>_q3rGzk((v-uCJ5<9`e<$$|}+&wT*0Ojfwe2ukg)aePpV#FyHqgw4q|HkKoWU
z_a8-L)alG{@gSk=u2 at vg5Ti3_w@!G?=g5765t;t4kqbLby(6!L&Uqh(h3d5nBwovI
zn|ULssgU!FJCQ8bBu><z5kFCVjru!(-Q4z_uG;f2p#e9iLS&`%pugn4670ar>Gs4G
zgXgEdLBumR2(}<!vkI+Pl#=Q-?up~eu+bZ#91>y6WQ}`T7397PzYo?C$xtPR?B&%{
ztRD^W-y5U7S;~%1xN^h{lh>yATjg*F8f1<h`ca}Qy9YkZ`KkZ3g6;&;r|Xn|FIgt7
z1S=C*WoCGgCHz}t;GLss`~>}=SdBTYhrA2{Ek at ep?5ZTT9LIG?WQDP380GN%9Y7vJ
zYjoN1_`%fuTt8_O&X!%9f#m|{;&>}()*dQ%%_p4}_w;loa!8p$t3swWhLl?T{c<ZQ
zy@(>yXK+4s({ExkGr6h_*I<)>MR)!pBVWTShv(03VbzOLcm|}~Y&Gjgp3Ww)sA7CG
zd~FRXKEMo*#X>BnLh?51-(TTg#_JoR>DIKP)|EM-AALm11pS6nV~o9P)OE at yXzp=<
z6Vqd|3np?$rmy-n$9`SKw&)z at 5;eJ?o%5v20y+)dKQz|uQ0mR^8ZX&@B4$~Nt9&wd
z9pw?4WxrGhva-qcA3~GFL-{IeOfbECj4hAbiFhTeGUNs+e8jOZs<b}X- at _r=iSIq%
z1zPO2h=H`<v?R!PWh?QIeMo1KErf7qY8FzM8(yHO$eh-tf0rR0o%<oCMG2`SR<l|d
zrO`OU3bbmo1BZ$9%e6y)4gv}>jYaq at Dyy>mrxahFgsj&XfgBTgR3y!-GC}ZEy1 at Oy
zf-3I7r0>n=<Q@!lAdjbZ>U(suycrB8;SLjC7)fACMW=J^+!xXil(yJQ(FW8)`BAMY
zWj6EZ`aMEEZ0#b17-!RVRv~IfXG0Cy#e{=YJG+a$D8seUjLUU at D)o56eD@%1mGd)@
z6 at ohTrUn<}cBXq>vL3eJm3K at agH&2;Zj9ki>r`Jc5V-Y>*o<byS=E~hcvPCS{NyDM
zm{|8x;;}tOsiG+8VQ|`Re3|E=Dzz|z8$ln at 2sBzd0wSr9Bwzw1#OF`z0pM3LMLg=m
z at 1(hdVl1 at obuz$zpN%`Ac!KZUh|eb1u at Q<N`;8&>faSvC{%kNQra7h<B4mAhK=fXt
zjDib2Iaq(GO1$?;VXMaUrR&@bOR2}97p6`+-uigp4z at IQk|ZkGC>vJn at UOa6I4xri
zK$;CG1KojnsK&ZZvApwXDY)iVg)btz5Wuel48ZQm`3ekw+P^4^(LqdI(a9q$Lb}jS
z4z3hW)ld>VZ<Ub<5QjD)SuCZ&VeN`$btXy~UXm*|A)8k_JW`{x86ez8?d<TT#!o<x
z($n~+<b667V2lNXN83qU1RdZkpfJ{4XmSudT+fv#2Zf{$4>leOTB$%RxsyZF4brLC
zM(ZRtHd}mux#_37Di|W%#G<ft62FDO-Xcw$5wsN%4iV6wn>ssHNa^0#B9{YKQcp`m
z at Mt!)VHS)lH^^3^)^$X5SfF?Tp3bo78pG$%<4R|fWXc&rq~0n*XBX#KnFuq4e`k+>
zlMaoC_u*VsQ2Q!s2$GvYlA(k*^^5xGnZfc)`1+=QSB#Jf3$3j-?O>XWMw?~Hh+qT@
zSIEtu-oykZ at qMr=E5zw~+N~Hu4PCH~aWs5=beUlTqR$CR0EtkNP0(%ZMLS{Qw7Z0P
zp7|LVSpi()M<KZT`&7Wn>U#&V?4|X<0GyaIEkAp)htB=rEjr5rK|Vh_9lEGD9O!-^
z at -CWxiB{US8UMXi8r4m!*iG2NoY7DebEM<;<i_LP4-Zv>r7=WGKV(?TYrVu4x}~Ed
z3&!>j|2a;bmAIVxyX4o_`E7DT4ColtD=vP!9b2mb9(#Zmv^P_*@+i5iRo{;!SVtU9
zWbHeb4s9K%$;f`a$gh3OA+M;;vi0A{EK5UwRx&|kzK}k74L753pC|#NjDFVpo{iBu
zn~SA?vQ7NICL<c#Z#qV0aAyuafeLB!WB>OnloBn@=i{cQcW>W at b(hc;;C!%VLI!GZ
zh;7#HQpTqHH3rN2(A0>@0&S_WzhZN3JtDgYjI|MrEtGj>n7;=RO<mxtvmk{S-r9D5
ziPgZ5QUGx6SiUp?9$jM#2FPmn|IabC8q;1wd*agPSf!Z<6PP^Qcz*hqJ(;|~$uJ8%
zdO3mM+0ia82?{Z74mBLcYta}K1Amd!oC~r2*r^UNW%qv3nyO1oRQ}*kDRu3aM3 at GN
zOKI|}Wwba~n_L>s%vzhp2 at 0<5h~txgFYA^hW6fWf<Pewi+h0Y}>+>c*QB0&IXdCSh
z!w5WwFGEFxbINs9f<_(#LfiH5mm}zLW#KB%TmaN3*1JJMa95A3lELl*E#?9l-Zu+E
z<e$Gds>ea_=QO5SuzQ at -$^Bcl6}$#cV0$d5ApJTb2Sb{sEFp&Zo4%zQpr~zsjnuo}
zS1909fi%JOk;;=C^^4%=?)-IwYlCE;<+9A_eDkn$m8d#6 at fxyBuZ8ABm?psdoQpRW
z(i?5EnUf^^36OdQrI_)4EKH;(D)h%;HAbd8m&IqFyj*`CS61nn^!*4_ at -Tfa!UL4e
zc;exD&*|}8$fwha#?1m-<}Yb~_`kXmO&Cb*?Jxv<RD|)T`b$xZdTsRN*Y*Sk(JJRj
zkr5R_rP#Kr9IOfwB-Z5iAJ^YO95P`N#Cc0KSNUiyFf0-v*BdSB2*df;0o~6n_G4{r
zsb_~lpX>uA&gdu@>%?Ffy?E=!eEK#C&7rgfm&oJP11kAzdaej9CF@;(K|7omM=7jN
z9o#s@{@r?Y0+oOhUY_`fM5!jSG at a8(vF_u~$^$o;LL?Ovr#d?cFq=1hSitj{@ssVD
zQq)W1d(2K>Gbf6}jt_>VM-{Wxr#YNnF%d^omkouPEV(@y%59t!@^xT~;{vuHPDpMm
zw^<@hsZ=%=lT3;iDk at WdQ%dKVO#g at z$VL~%p?T5X?t?5AIRVVXeby(vFKr0w%#ol5
zj3&Zo$09y$lL-=^`xXf+Y9<f)T)~1}*bi;sLGu<(enMhM(Jj%7>!LYbgE$FHStnEG
zY|(W0EUq;8sLIWMM5MPAL=Z&&Oc5N8_6HT;y<Go9cA1IoyP9i%2nN2a0e}C$6zn_3
zT8X=cWuh`ej0+Sqq1reVJ8PP<HY+}Vuz72^+kEVDaKifKlMyK7px(t7{W4eZV9y}%
z%SDu)xXCST7WoTAJ+UlT_6g-O4toIb;Z+s{XfKZ=X+?`^qv^wmZvc<7l*Q3`JwvXg
z14P0SIXP&F3X^Mp^0GR7Y-bk{K$8_$t9I2{rGHI2os`UP$XbG03n3JeK<v%IrAr-0
zZsmP1K=<HnFKE;jtUOuQRI#g37(p}>eECi>!|zg#W#{X$ovH9V%3`(KA_3a_Y@}dQ
z<}^pNHCtViFG(ww`&`0?MlBhBRNSl5nb^88odM9CN}1(<*gYZ?`f;wuXj=S~dXwW*
zAA1thupz=2>I-+&%cfvAl}x)G3m3g<Oy=_g<yFkHD3%beDX%_cyk2Hb=HyH6G=VUE
zQ$wfcp`X$UYbZ*W{FYKjNDZ at 6>^*$KI|nzFU*s0GNTfuhdy?DQ+P at V!3oC1I>JCcY
zfc{ZqGaYh&mqTi@%E*#ob3LkToKM(#640q1JQ}_nXm$0=jf6FKV232ZAh~T8==|Hx
zgNs_7I{;6P6KF$q54D(TvnEZbW&hLGwZgQx5$#%`u2%tz6=&i>_dKPFggjE$AM-z?
z at T5n|75ar-G)5l*NJoth{D!#12xeghM-8dl6VFe7AfDuyZQh)Pc{XY2^O^gFa=@Ds
zc$fgya*bSng_fx}F0T)+Pcorw5OLCG&DW;?sWi2b#wr%QC{HYwdl(=|U%4t<`moG|
zAV8?`j$jN*cDSv)I;uD at 0Tu=Yf1k3f at qVy#H#8Aj40OO#1qBMh2}A6cT%hzup0)U-
z=~<_Ly4QdapXKCGepM9`g{`fTe&nP<2)LBz-Ni$Mgr~qVSyCR!h-u%4o^3d72^|GK
z$Mo4zGFdM0-&X=Ji2<5U5W|<M*xDN2QFWL6JFDr`iVP!8JaV(2t~Ba4*Rx7Jq2a82
za at 9%Y=#Mv(mB+X*Ku=rl2$~AHfBzqaTHhUiUr2VOk65kx0?vKF-Nv0=4R3MOgY9|^
zsykt}AdkDxqIT1td0 at ZAKx?{OFA12q<P!d|k>ef_gEhrewDlHjwMeC<yPScY?cFa=
z#VxH at it1TN`(@+nO-m0ek(pUj2!lLI(M9^ZGlHm^q+n8oXqmG at T)I%?SbWB?Y;w+j
zem!g7G8+R8bO-Q4hP-}vpk~W?@WBno!befLdh2WPd^zuam}>0-pFogNSf7$TjTLH;
z<}c7ZZy#C17%|5kxJD}pgbZ>MW%+-WJ6M_|ShR<3+}A;MSaFUaiXIArlz(Jy2*STm
z?_=GAf^^JR<G&Hys?LS5f_7sa=<^(ZigJo{z__9Tmk`%YQ-z=W5Ndy03OPL$J$FBV
z(Uh at WMy#xZSGl~#-iseQhPm}vRHF#8l!~a8tHMQB_9d~X?psa<18rgHZoq2xSuzWW
zM5POC#-ieS70fSgf{bOZGPc`tayZ at ITDQ3u`h!evbD6i6i}~&gu2_@;AJ9mDOT1)L
z%lbxk`;)ZF04Iu&VAmT8-_**5RX%CM^7bYXGsNM+s~Dt<hEOwUZ$I05fy!ut;dg9R
zm>AV6fO|VTP%VziISHiN{|p{qE4&5oGybB}k{k<K>J$`PmGkx6|2?OFgo$oxuEt9G
zzwpyegrp6fFBlkqOZ3~yeow!D`5}@*Tbcq6I2`D7{UfqL6WWzat`hHv>xuz~yUQ!-
z7)WfI8h`5ZMOo%vU9~dQ4t|Vfyk)5&b^(uJ0o9DJeM_j(_k7K^&&Bk9a_)jr`P*8O
z*}BEYiN;{RQ=$L0QOEufGs2{EQTu*o4kb#&LSSZ at nY3(`f6l0<ORA-Ru;d*V(qXZ?
zmIjL}+MHVX(R#hliXl-Qwhld-*e0B}eUU<Bc{9!Yd|`#!pUe$vqPI`KV`;%aD`zMA
zJYWHgrRmL!>U7f(z at LwP7V>yF=1)lM8idOCakL)1(@*+k^Hq>?8xB at p$Ar;=%wH=#
zTg~V2y9jrLg?(m4B6D?r&mWksL^S&79NemI8to=R(BDmJ%1;85R+^Z<8LT`a>}{C9
zS&QBKqE-Qu=T&N;C_Z{4WM~dL1MHrSA+?6C`E%`=aI<CX<#773YS0WaL5USQ)mCr@
zbkM^1_}+&n;DQzZ=OL}Qmp<>R+Bycf$Nvwm_~AwWbKL7PWx{HIM|eiF3wKw_gOO4!
ztqa(6ZL{A)s{|%_Cssg)+An>%XRZel&JHZ{ZYTxZeUO%t^aH?nfc6{5QqPYZ4$;^z
z?bV`1qgz5Tm$wV!B(W?7t=0J-=g0*>dYC7=M9AJz*J16Mp9o_vCCSr0c-psHQ7wF;
zW1k$Sgx2EIkIn&qe3WIW1|zt5ad0DMeEIX6!5g}O9tM3z(OiWq9L0T`o_knU!xS}(
zZrbyY56ph&vMm<S3jj`GFz!z!faSY~B@)j^*J*Z#WAI~Uw$KH!$NgH_secr5SIp&6
z53iz3Hyt1v$1p0*BuI`W>%F;h53 at r%Z*{xtg3kwfU|r6CiM<}g8pn(V&LxTT4ygi0
z4+GNi{e`?op8|x-(oZYAMs0lKd6>v`0i~nGFBdG%KOp|nmRY5HSh^EQ47y at +cc@}D
zt_RI+QIwCJ?%cR?$ijgNa_S*jdqyVAD?u-ZpQB3Y#0cR(-;r+jMSCmvTXN*;!9Q(V
zTKAbRW|41yh2N~$GM6xx+DKNvugz=inhf#V`9mJir2ZoSzk_=%-7*xqx#i2+#QTv!
zW_u3!2~U)Ta5+ZlG10-*n1qQaU0E+u{>^XAoctd`eCOC++`hOBPF~o*ii^|xxpao{
z5x!OdWRYrwaqAq@>RCnbm8CW_qBd1O-$;5WZ?JWLK65ow6-%0Or7b}x6}1!I!ssuL
zTk39E0&D$=V4ahCtp)h5=JE=Es2X`jWBKd6B)`Tt;knfVrlWRGRh|z{1I>W5ZX$@K
zXG;G{Wm}T at lp0#I$36?Y{#va-Sd`5xk+1~=HslAn8uWk^bi3_nfJj6ZcRl9_M@)`2
z3ClizN}PY(p|2liK at E&4jmI;U?H*4#Z5tY2wUWyocXng?kZ*-q>w>S#>hI?t$N|a_
zL?OgQqEC|Q(}6M^#yYFer*7#LKj=@=cD*}^nX{c9TPCqNbM at U8(_j%NJ6SfAI;05p
z2w61piU`+i0QAn(`ispHg|EBEu)%%{l@=a<qT!3wZ6JF>pZXjk;xq6CbMxHruW|L{
zs1}0jCU)-?Ot at -Qq5b=&!ME%i?vpNWikb6<Bh^st5^C1+1~U!Lik*6~Nh-06FX;b#
z<@$qFMdvL4not`q?WKiBw>Redj<k+Lp+F~%hNWS{o>&KOXyjrNuLc>0kMR)sU|Vi~
zk|{7SiGjhR`zytWM(}>ASg3xlK^H26pEfl{dPwg7FxtE2`ELKSazKmhm#6=S!2p~b
zz-MYE$2$MZJU4guNU=k3w#SO}mxU1{Q*%4M<OIje_LT`1sKqG6(P`o7!&&QLL`x5w
zZ2ga}ubr7Kt6^3 at n~NZ7%?>ogVS3?z%a1ytW(T_Ap!hg8f!V!sq7u#;y9%()v>rF~
zTaRNxy|!<+e|@BSv_G!Vp7KmT at q8T=3KZh;Cs)4xMw8A^;U+O>eHAGcI7z9G=`2RQ
z481Bi=D#}ixKW<$Pk*g54JkY$0XR*>WY5*SlDMt!+hkwOsk)1aeG*X~f+4(r6jJ1S
zw~W(<|7tZ>98DLEd5OQrJAoW^NqtPg0QX`deEh=6xo=5gch3kwtQ;$j`CI&DUt5>S
z;{nL8i3k@>XQu#2*5uwPO#=F)3Iu80me%KNwP86^==Dl<r#|U4ejZ at Xmk&uei-8V;
zjRv;a+THS3x?MqA9A<vt at A&P1#35{d at eAEeLrG0e?ZB{7n#r%3PH-Hc!U2(scZlc(
z4CQ5N{C$d7$(j`43Ll5Yg)B``NKH?UwLS$PH9=0Z8Y=OHz4}w`JsLha^Hr~D(PjMw
zP>^!*i0n3kYkDqiSW*-aQy!OZhXVmAtKQ1;u*(cAZ?Q$#+0ci!7MZ+%&eMA!>`S?g
zVFf|AU8y_wZgWknQqeU%(%DG!&vdjGENPj)p=M8KRln%d*l%b<s^sqv*Xn6Vcv2<+
zSvS4VIT<R*!<B?A<tXHjpFl9zn)HLQ=*ZW?+AgEgPuzr?lIM`bDC)OU_`>bTpxm|h
z=lI8i0)3in-1?s`KjcY&g1&m^u0o at C6UdGanHFjKNmRxmyDaUZ%@;j1x2z$U#Pgzb
z%z5mIst*YCOn}3Wcl*udG^IdVG!C{g$~&TH{%Oji;0=dhqKW;1UEz-XgZgBCQ(WV;
za`LAN>~Nq0lz$Gc&2&%g1GXAkn-de7B%iaCC$*)b(KHp0FSka2%rl%gnbIE9UY3?D
zJMI*LMH&C=`}h(hgm;)zfQdlo>bg@?h>U#Yr9z88(%%fi?<=BQ(+0$5p#$xBJShW3
zsVFntcIT<|$dhS4t4E28N`o|%Sc)qG0h`>$#4;wcrN380yn>wRT83V+g_WV)ASVq0
zc4m$5FyAs7(!7*^W!!Trkt^5AY!A2pJsG<>cN<m-N}CBG-$Bt3#aB|sYX$U~xw~v_
zunBm|pj^@nkOS3+<f!+)UY&whRp*N=!5veA=gA74Dbmb6H{SO9es;VmOg<2}Dzto}
z3=UVWBj#*D%F3nPaMGHU%C+5kzgOh*cUfmt!Q}whpk7sfS28>elMpK8-b<j%Z8C?o
zgBa7Y6;$)qEDRftGLf$;e2e-+#kf+~BLeOt-_|U|kaP-js&8_`n2^hAipSh(+=xj7
zyhaOMGJ!-X=ws!k1Glvr$vd%|9}n_NJ<-_ at -)0M)THH3DCi at nG%WUI^>adg1Lc!?7
zsje%HAgQQ-O0J8aCReI9M at O#-FRil*k{!yYkQrABBt=hb!V+H^r1<&u)0A5_u8QaH
zWUkz-+g|XEav9+$U3cbekQ&$6DMMthga<Rt;A~MbOJYU(c)%S5ZJa=h=-T^>Vli9<
zT~rX5tT4HMU-t;Lw|QeUL$N)3apA=l85E*Xv_o)zn2i2+Qc+88tgX<}ad6C8Vu2`7
zFcShB4AnyBr2G59!B?J+PnLqT|8(BxMQ!I}P>f;)$JoTtGXkH4o5G6EuONXGM)IzU
zpyP>ZLH9CyMDmbGw5U>Y2^RpvjjCn3ccfj{-wO{hGAJ?Pjg`hUF at rB4F|C>juTC83
zcembu35mHHON;78P>)FZ#_UV<d%$fe+cU~jUhIh<#ZH_X=Ggsc!^SH!EXk_sXE~oY
zP_Nb>9j`l#Ha&zK5jioim`N}pR&0DxVmGlb#`40BeKPM$Hx;-W!Xt}{qhn-lBUqij
z&vw23qTW|^$qonF+!6qNl(IDmHHe3|`D&Seq|UOOI7y4w`)#;9$R!T0pXb>$BG{qx
zXtI*8_QD=1EOm`Sbe>g?vD;(d6;R$dCB+i(5NsO9TNj*n!e at uCc`@vzj=YO`YlwBQ
z>~8l8Pu-r;pX)cqYm?s2KIY~dUuu99Flz50UjAX_>agmdU`gcxDs!@8q|xnT$bB(?
z;6E709hMW^UX#3mP5B-h2{6Nm&n}(>eSiu!wXqt*Te;%iA2uniU3CVqkD(N4X$7<Q
zk;5=aso?MYbA?=B`Cn4Pn~Z^uvPcEBepZ_$NzN<A&Xh&Qs1X!-0?CYKHd$i?L`<w%
z!AvT^kA3Vq2Da3s*02mtqkFFGn7FrpN08Io#8p${>o1e(qQFJ*D0{g`KyMF&<OVmz
zvbP`z0#yh0!Fby<OUI{(NuBzW!HOmoe*y|pf4#daS-2HQD_A1I9k1U7W0^DESA%t<
z^@q{nN|h_wuh3Qi*9#^krhiiG|Ec9SH)|zTz9#<lyl#rbDhpCewj>k~ptk&f37l#!
zA#aFT5M=^}CsY+{WL!eW4WxWYd8(tW%~!^GMktB)yiH@@m1sJ#!?)9omh}Td!jM9#
z|EQKJjwM7&{HzXH>r}JYNBV88cu%%{e0DQuhD#iygL81Mh)Cjlq|<ney!`bIZvjj6
z^d8$ceB&1h)73e1hkcq;h_}>#1;luLFjOQ8w79bP3A0$H=pqNh)32PbP#!w23nW6I
zba!a)tJAXwnPL=}Y?IPWmPaM)Ud|6XCvbA+cc3#BJYlsz;cN~WIbVs^sVILc^84#k
zbN9Bz3b4VLevxoy%r8UlpSp`x%(3p_Cm8N0-#R)(;rQy=(+YaS2CA8V>n5VQt?Sab
zl>qlra(k&|>w|zSuq)4?{|$PhHyR at 1mh@K(gu}ZpNDHegOe-%e;P}^>0k+d{JU@&K
z#4B2Uh7 at kC*nXK*6Dx<MvF`gRF2%izo~)B$I7Wv+!La4PYta+Nt3r`vZwUwVUinhc
zFLxu^&;MJk73UDq-4Skor53Ywb;zBjk1aag@&l{fCX1;O!UnhAzWb6^b-tl#Stso0
zBjHaBY9k#0G8k69%U4Y%BSv9Zt?3#gIMbBU52!?f2Ye|uB`Cy!l>?hGJXt;L*f=6#
zN#4k5P>YB)-2e)W^22-d2M2_`;$5%|oCgAp at Iz}dEvIm1Lyb{?;MpiG^c|~EDK4MG
zA}R$KIG>j_pI;TucZg;O%K*|Vb0L#bmuMlSOD)0sV%1opqO)QNnmo>=iEbgBet2Hw
z{UVlS3oNRXmgBaF75fehF%++qj_-Z;ASPIx)AaonKxyS3i7Au;`R%Reu+|De0W>yr
z6JY3__LGA at AYo^Js892;RQM9tK&kG&IM(8oRBq~vTA~gX<7EiAWWm}GP3^{AEnYN<
zo0Dz4?@<l6%Un>V7a}V~SqZpN`1{t<>xVYtPcTF)^2I2NTLc3*s0W2Vrjb_lEpn^l
z2jX<r#Z7b%(4FX>@w`6w%Qe=otbX`vFvGr;YI^C6UPgj{&jnw4ACt^r=|rL^r>5)-
zIFjZhii~=5|E4$GnYr_6AON;Q^!4mAVagpuhxXv#inBZutRbP>Ox5J*7YV=8{c_o~
zj&R_`f1q;4mpW4O+DR#k(x*dNO1zV)78Y~Kl`3>1ahe`t6jx09NF-_x&DkioFtkxP
z1OK>q2T<RCE}wbd=9Z=TUKJ#jJLH?>q9RNWGKmb`b0`urb5 at Z#b`90!vVl{Og$JF=
zZ6J6_Vl?v=jE#>+y}-phkz$x01NICV7vf2Ybj>ol^N*OsoVZQ<0p`U<4orh_l(0W$
zf1WHnPfKMS`jdzO>B`(cSP&wmX;Kz1Nt0|igTNYpqJpZ1nPV3;MHOExsx#D*I&Ew?
zvQkF!BEjJ}z%HjYps*rpz}HZGVuEr~9P5MZm6661XVo&NAov8I0VYDHicunQR3-B1
z4)kI0RuZ<FW$qGYY`HIX{GVy_#1cT`vxEu!q>uI4f3?NVbsq(yL)Q83 at 2#YZQ4XCx
zm@=e)m9LuGRL=yA*HQNYfilD2oYmM11l!E1781?MjDGXtHX}z=-d at jfd*;e3v86+i
zOgIi)`Q7U}z|A|%IeS?#FsL(@V#DQ=f at I$^`y}HigY_z;55rt^bTdW at w3!8hl2nUo
zUR0f$a^`%B6heC5l;W8qMyLD0Qm#;!F%3_DEj`Bh;lF}R8~wmJo=%niUkVS~=B$$+
zO;H7g-wok1V$=?qwUL0l%?J85#{-Au`2cmNT5u#4hE#a|RcJxEsIB2~_JU-OTaC{Q
z20Hg7d(1LtV_1)-VBf+kH+aL)kWr1h9Kj?|eu&&Mfr8)gqf9Z0Dy{pf^Z+_0H`jW9
z(}#2`#!o6S_D--ifGdWmpwaRcYz?{LlYH`#mFPZd6)RJ|GqqA4e8S;USE>~D9Qc&D
z=o!^vs3EVEK>4vJ<*R|h@;pRvo<O3#?&x=E(z&f5`hE5w?X!$Q$s%fYH|qjF4le(x
z+SVq3IHrYZQKk+%FuoGhNd>sdBh>SMYaFG+D>mNv0uPbTnrDW$nnlLHX?vJPWa%n-
zID-dXrb!6uF^6XNmf6pI6q}Y3m8;))98x5_yQ6U%u-lmUG5+Gl#BDjC$D9=gL0~Ma
z1e350K%5T7P)=v>+_<eHi9~&q8xGhI4lVz6IaJuw1!|5N5%m{rnMA=nJ*E?X^}h}q
zjf;Iwgf6B7ETLf-jAZ9@<|k%98M!7vqh8K&v2yx9FLh0^qf#`{GC*f6BT$Bqo}~>A
zw>42>zGR&1Ud)173N!&R`&3WUeQr)ZHH^bJ`L_a#6q}Qta&EL2RpW<fV&ow!vdP<*
zD82uyqn9R--kOy0SPFfh$SJ{phpuc0C-F at Kt2p24L^DDZZm`F*Ysi<KkqAATyA0BL
zA-qeWIfsulh;fp_53P`Q3RRg=Ta0Nc_n?N)>@PN6296I2#}=8KkF5Pgpk##&nM4{8
zn*LV8D`v{Zx52@`iy&y4!!kJRVj0v|na@&lt?)GYT)Q`-io4}a8p<1gQRDs_D<?_1
z;T!fg0LgtC0EI&>w|kv;`{;?^vB=mt3c-!Ho+fN&81hS;gT&BaXtvuBs0LTt2);>q
zE?;!C+Y;Wkx0P&{qp+*zFk}WS(l-=kuPuV}Af0mx<fJ63S$D($A}M~`OR4gkwr5DF
zbu{qG&z(S+s%p<5cQhY=Dq%zv$khTWC3PBq@{VB&xpj`cTFsJMyCKKcTNz?a>O}4(
zG1lL?8+jPb7@|}U at sKKOhU}ryb#YE{ZovzhCUf0q8H0wvcp=~c39zN5g5 at dtSAcL3
zhv8<1I5$Z7{C>O*6Yl at Po(q(EnTm-ENBG_#Mo1i`x}E!MTdU!J;XVSE(Z;_8MNzhy
z)!h1&MR%dMZ$iWL1bbv>Lik$@)rV$q2RCM<;-hI*%DT4KB}9^8>iiJI+u#cR*Dihq
zk2+D#!PxwJY=;{I<`7?M>3UM4HuXa^YBAUPqyEQ|VO?t{%q6;*=fx8n(h$9{_5P*E
zZJ`NM9v2T)_}vtLn~PBKBUQ;a_^~$pW9jDxxX{kT;&z^1k{t53$(&TKB%jM8pYd|L
zo)Gq%m&m8TW57a}q-jRl_^_q32~NQ2>vO3;gRoSy(?}N53~X3tP+pO)Z3=hI-MW7~
z at wk3%LFm&%M)XZu(k|bp<VFzkKKUX#T!O((y3H{a-Lw0Da#_-$H-d$iKh{H54v<pT
z)r_d2S3n#^?G83hCo+(+YbpG1&TnCGoy}n=o9^#R{y2`c=m5Wq72KvDG}q~njK6Pl
zgk=wdB3H!hDG**fprxu-Sg7rcIRYNmOg^UARSG<LV)Hscb>`^&eufxL*;2OD>|=ZB
zGW2xI4T}eV`p7-#L at e7MmmfZMY(Ld6F`r#5OO at YevJ3u8TuNHVhQKtj@W8$suYN1W
z+YC0 at CpIb6Tq-zNi~>*jMUPa;Qiof;*N>52z`^Dc?of|~LqrdfM^tQ-)rdfVuHHda
zSqkFXEjbs&<!0KV at JdV25yVn~WtEmopLh1B&0d6m{CKIqx?u({7e^?!F=iNV(R5wp
zG&RTId1TDuF{ZFSX>NfdOowd<!r_cl&>|$tG?`MHh#)+DuH_T*JojTRYCjDzx{BG=
z^t?=^aTci-w>DF1QOeC7bukD{ZCbUI16~x8KIKRW$|0Bget&}3#q~DT`zYD@<!;w;
zZ2nt+>hp;XI+Qb1?_K63a48#@p27P<l8m0&s{nwU0j8jcFR~!^S9qx$%|?T~AHgV?
zoz7B6po>_<(##;S1as5Gw)99@)qkdPUJ}b-EYtij&H9)G=wO5m#5+S*s~?Jo6v>+O
zUEvCkdetYVU<!&5e9Ebsni>&CC$gHw39SHs;FF7ezh73K!CbFxbAiNDj7zN)S=V7=
zqJyMAr-?XaiVxIu#>EX8a!lR`L71x#X(YQObt{1GXf`?5{4_ at ZHMIU+Dg-6gQ1Lzj
z7D9YCjP+oNi!;0GvEhG;RV6s3SC9smle0T0_m+=Q^IH(fL|WK)2SB4ACzMXLn#4VS
z;T;o(U%@HEFkZ8U_}bjSc&nBHw-kADY;J{{#q8zZB0FXWPMwV9zg}P_Npuf-ZkN)<
z7}D~4GM{*nOtQGMkH<iSp+090v5<t}Mgg}w#tDoF*YP@?>klOGugU+oij(U)-^{kH
zN?D#d1sL;W`jpsMu(R_pX(i at Zh_|eNU={i&=ZiHWozW*8Il4LrhtGKT%0kR%4Iw~>
z%_}6f>3J<j;%A~U1U)gN=h9QrxRAV*hc~tH1>FS4Z&q|b{?RXHy^{?F5F}7XSj7lQ
z-}^kcyDR{WUb#u0Fy{XIh(Pbrc8H=V&64$m2wfWg!I&57x<ZS5D)zt)#sfruFsxJD
z0Xi<TDNDhH*lxdpM|zRtFu$%L(6%d>k{U|$O8>Z{JZES6qC0rDMq#K()#2RulvW1O
znU2CMi+nfOL)Kfb&u*2Q^`JRGXGS_cE~wG7bkxwEQbF4OmRb&}|3(=%tLnT?%5#6I
z6h_{gQrurE0}0b56IcLzkcY&72rld5+g%V3MW=s8eUX7QWU&2L*!NJ at B%^JUI*TE~
z>JA`6uwAv|toxX5Ezb{2$BpgeI2OxBbxk?<FL4h8*|p at PFIS{E{<L~`X<hX7K=as`
z-BWikzw+Y at V|OSscjgrj2B?LO=95JQW0V2^V at 9rx8J&z3y69(!!9H_;m)gQ8dwZqY
z)K$N3;LRjxN91DpwbVk*YCaTQY)sLU2c$)%SN+RGX0US5oU72O=eS`^&3Y;~bK6Da
ze-thMt8+}dhV3TA)HsRz at 7LRgzAFoffy_+tH1P3_Ea_%yINemtBF5cOV(tF-rqnOC
z#%C4d_Bp at o-%c{1qp at ax1<x&^@(5)4wGEF^IEDmi`kkp5Q&2znF7FZ8WLRVxfj7ga
zlKMXY<EKx(Ek{#1^nju&MzxT$%3gUd!|t%USS~X?MJ`uHU}JpaE8ATX-&W*I%i~)^
z9i>>L(V6=^$57V)CMJcHVj8k`ICmh&DVd)t#;MYuI0-?d^3sxj9V#lr*%<!X*0c at 9
zMKFZ50pjqq0s`9VEsvS^s-PuP?noO- at SKCRs)>T6KacTU2|H~z|NCoup<|U8#CEm;
z+<T=28B`@UI=?sSp;9V44pRyYCWK&3*-}M)>%N4@?H<>HCH|h~QLibhTw#9C`)Sbo
zH6+%hYAB&?PtkUNlxHOlK}t4++yN8_5;rVL!^q5 at Da@{GcN-caUWVK`u}v6-H2;>|
zvx?*oOBO|!H9j+#Rpix2`O)LA&lBYibSh>+l}eg~+!M1 at 9wwm{_sy)imc}teV6{AP
zO4wW=!c>lE5CAy`;w;97G1Y1pviX$sJVFJ at HYC&9x=1*G0ve73ViIQN`@Hy7G`2V;
z(As(tC&)x)3cXixO<;PP87_KH;)A(<*4!uxdgO$FV33%?HQu~#@y~d3a$zz5B$rK`
z8G%L!BSlrQzps2LdOBlFZKy$$!bhU|$kD~?XdRlHD##f64e#!(wKed33)nRAfPB%e
zAuXZ9FZ?loo%Llrb-yH&y9v=EvJ6C6Y9!!+pV7EaG7LQbWjHo>ln05>8uX&jjLy^D
z>d3^#`+G5Bur=FQ+`kk_sw%~4UYri08(QMPWXH#Y-rUIECgRVxk6se$%xzgKq6v1@
zPifV{heR9A0HtfT%=7;K_*52}mWW`>MX}={g^JXF2ER~zj6F6H$lOu3L-|2XRSx5~
z&P%Pk=Z35{GR+7j4A{bA*`R=9Nws%svutbP8o$&gi!Z5aYZDfIwj2Z9b=mLq#~3_E
zR_bzysA7AgOJWv{L<*))>TXSvq|R2_L#Nvf$rqO at suX_+i)Px09cwa(4mwmrlV at jV
zd5yb&vIwuQ%cCmA!^Qc|xzpft&ar3fC&$6urMooA^dVsFPh?0?<PU8v;C8YFMzlIq
zawrPH`#Iq&%`+VStuG3AdWrm!q37}wI66Qb1utfd<>J6Y2Ey&dbYZ^JzQz{3?kZbG
zxP?!&wT4SEih+cQICe9BV*I7U`BOX~v at qU()f(f%0 at Xrp1H1Ogj`?9VWprIhfG2^S
z{&Mb^5)x&t=Ck{&&{vg7^!bWW6Fpz_S<T3j3Vv^EPnoGo{i6%Ikf^XsP-G^rjw8tA
zT<IZlLIi$OB5sGqwh7S{kw~5)fW8)p3mxf!eU9c1;7j}uL{PKXWVixAF2MA)?^OtY
z_vI*G&Oj7@*neo29DCBfVCU4_xL}g8;;HyVuH(;$M at r=sxinqFL27-%q9LwdL_2<#
zG}|Td!GJmAj~qydBP)Lvc?M5bP01o%&3As`E}nt^;-$QxUwE0|!oPLqXe at 5UdPyWe
zCa6$6Lp*C`e03Tv>%*}Y?z%KuP=pMBDR;HyUM|T5WHcX~11TOA{n=*XqMv(J-s28M
z>vDXco30H26%VE(QTXx>mLCE884%)&Sd<40!Azg1H6~l5CyE7j3~JNWloFS2;Ygl4
zz{Q979cdTf+drhkxhpQ;!?12$8!Re%9H0`gfMMlo{TiHi!&;9a-0!FDr8<g#Q^nh<
zAm1Ag?D|Q at EYy<_$TjkRnGrxm(^WWz&OSIoK>NfjQl0h%6(54Y%0_lQ*%(3kGQ`vq
zCct8=fzs0N$jhsTdq^x;zNCUe2tV<ybn6%-)zEzJHZi at zKAuMFoxfU#P=yET(#dUU
z(Pjf3M|@#~p?eb;4d;QnpMOAq7+`r<D|U0wtw9#WzU{?Pyr;!xu_#gG=n}-q=;(l@
zDquZFP~n?Hge*1OQAkWAI^|HC=y1A7?Q$}@=C7K4tZBh2**M8b-j7jp%`V{@Y|S^j
zsW9}u5R?D8_(?K<Gpk|J+<}%To?4{akWZr?S$xA1qO@!UmlQMV;ZnJOZ~gvr>cRuo
zI!3nDR%d|p2~##kDAndd=O}zush}}1v$bJ`gfqNaC;9wgt7DbUpO_E!2}Sfx)}r6q
z&Q!)Hj5=(BM4v8Hny8bhgkT+8lRL8ktob)ydkeJVbV)b!_{a2b+M)vT?)kK2q5_fi
z#sP)F+}G-wpTvKt(PaLAM<bCDzZT>JYd at PlcAi)#v11wru+rD?;IN0I+JEa8MUPjk
zB{`OF4uECZcAZ&&l5_XhPo|J-REyTJ*B9_g7sG(Nfh5K~UXpmmEYB{`Ivub07o|}5
zWLunSWTIZ!2`rNmB03?{WPT)&3(hfay4n$VqbcPUaMb)|073$PuK6Q9Jh2R<X=wsh
zNs8#pMe4U(nk{_>$OFzDdGN6Rnv=ACLV4x&6|?{i+I565XIa@{tJxe4Krua*o`~d+
z-+7>ampZ!kAs!H<l0mk=2A}_yCV)6Gdl|wHW4YetT?;Tm>0U6q&IrSB>j^j4rIp0N
z at JkaY=<w*gp}Asz?rl$TzcCOe2G9!yFQ-HtNJ at 2iASAgAA(`1Lmf=l%hAeYZ@;O!!
z|A-4ME)e;UH&zHTj@&^6V5kYPus$Uy{(UrAK4(jHJlJarHy7&LLhVV#2d2-^Ivboy
zz4l<|$SJp2rU-@{>x|o{c(M-6%-#C{?|sAG5U-(PZXgVQvgkvnCfwnyoXY9Ci(c_<
zt?P?g_UjD1MWyIYZ04;tvfa=UZrB4{rZBd;H-=)pQzJF%o at unD9zWohbHg}LBA4nX
z4m%eBjJ!*rlb0}mv$OyYK=8j}^7h4%tTtI_SHf=1{4c%+v at lHBfkn+b=?x_J>`~N{
zO2}~iwGeN6D at r32e;X!XHQSnE)@?5{^m;6Jtx!TZffNjc`Fb#cajQh)lbJJm&JmAV
z3e}|2c@|EMtQ0_)pPbHKL`R=g#=xjoUq+nkf6khV;QzmhQraw;Yll)C&duk`)GAU;
zE)&AS6{lk&+PrcEW!5D(ZianAaLf?6lJ<VsWLMGqtJ=`Ce~#6pEO0HP2HkVBe5~F%
z-MGYCk2cUxd8Mt^s6A6yW_9X&dyLNYGTI>+WV`?-Oqz*4$X_SQLUwIv?<q`Uq>q#h
z1qKNn9ZVE(L at B+^h071ne(*LqPtUI{Z@=UW8R8mQ8w1Y-ybZ(O1><I4YEEh3bh`HZ
zW7KivC==s;e{MK&97?A5!T?EH$8YZt3?>Hj7f&ENPV+Cy&w)MUXt>zCh=vuWWXFWE
zSUj!bk;uq{6QKl46Md|q(8Er at _d@b=X-R1whvr08<ozdv4TW}S at JcJEV2B?$_&L#V
zc&f=h?8_^xK_ktT at D?Fu<tM*}Joev?_~J_RuwP;Ae~%A&&{&P<RsSFDCtGozmtlyu
z)AsY>OJ!a1!u~0MT}?UvlVLQvY`JDNRt}i_n~MRe`qo*}=5v1mpy^jmaUY)Zndpa(
zhTRhniIywt8bSd8 at OeEE(iipjGbElItwg4VpyWJv^JuIrwGfRZg&)zFmy>ZDb$ZyV
z;7bgNe;gGt90BZB4#>J%|GL;{SEKsQAE|?sDY?E`@}If-!T%zmEH_6D2yZ>38bVM_
zHx<evQUE;V$OQ4I7*8-`RWL*vPxvlt%ge9cOhlBtzFzmf1oNGCjGnwRDPJd~{ncgW
zUQZ~Q${iXlIqZRrtiUnl>1HbJO~+H6QZ2!uf8Q0 at F0brfb!mG53TRpUS4CfYopK9w
z)^J2MRhx=YFKoJ1Fd`{c*5~N#6=O~p?}E!H$+&)X%2I_3^qmhOxc4qjzmr1x|Jep`
zo<b+bUrDw7 at 5d_%;XnMBq8H!$(F-{Ym!(6KEnQ(dmy(H}u?wf~k?z8rgDE`O6F5Ua
ze_$+38Oa+l3Cf)MmmgR);VjfRi7-buu*_L!ze6KJ2(ktOvH9Z~D!SUrUf!nO at t`bD
z9O_m^sKIz}$Oo}X_Lv~#mlT~9lqXs9Ti$C6!Au`ClX1RdOXJ(^Y=ZT+6XTVB<?i6u
z5`g38FR};-W)P?E=slQ4GSF&pJ at A$=e?z}4O|j&+!nC~WQA5uVPl@?%<=+DTG6{P6
z6MXInjZ_hsNh2u+^N|&mDES2CI$+jcd1BHtbiM5$66 at pgQjX<>*QtUhwR>3;7hnZt
zH&D`;<Yc__G>5~1-ta6+7}i%+=PIsPOH0U#B+n=`=Yh=SF{EdR?p(TFh#TmJf2#2b
z8~4Qex9ZM at 8jF`mL9V(uM~;?rcZ6}I|Jnk?23)b+%3IKv?jO-kW9+n>wksP<*l0_u
zQ{9L!jfA+*ItV;;9X$uh_7d|sDEP)gqje#IlnOTKd$DJg0}rBK2`5t0eN{VcQys*d
ze|!<AY>~~~9{^p3QXu_o+8ZDBf4oIblYSBk|2uM{qy>e}k$9w0PL~j0?|nrVby{sm
zr4*OJdt?h;FQVsaYartml0_w%-2KV^RGVM}?#jLPk-t#>7`8vxxRDCmy1asqU}(q8
zi7b6rvu7Px!)cU}@_9Ki56Y=3{I+c1K^flryB##bY33ojZvy{S<@9?#f5V^bDk_gc
z|IYozo8HPRi%Bsi?fq#!e0^Jhq(g%iQRS3u`cE&0Dm)w}58`5#ySa|^T7=NG%T)V9
z=fZvb=OJ$*D)Q;txc<jcNdTW*Ii%D+&_;$_q81DI#kXt at rNoR9Vo3Vv@DwKH0eE-H
zCHAL{KQvC7#%0VRYCIuoe`v>$0;NZB6NLy9oZ44VX%;%-#Z7*dOCBcTR|AqMsWLo(
zlP>Gy?zq2UBRqh(=_`Ax2+1I}1uCCbCT!1&pR<Yr6<{5y(Ik$5by%Q;m2 at N`Fi`j>
z`osC2F4kNxZN$+#n}X(YLV@&DMjtN*0WW2?GD8EGs*d0gAV^5qe<c}L)Dt{r#pfU`
zDP0OY=(oNrQUS}hddPS#%%BcLuN$Ti29J&cVro>arTmmJ7{S$f?^y_(Eq^HSR+_j+
zn*oPiWjLa at k_cOittI(>&$S(O)2)Z4T!7^gDAonRY?*X_T~OfY*;@^)e9*Ua*wcjF
zB#~lpIIqMDt|5;%e_zn!;-eK=XMcktsh0lXF8j0>WUd129vheN!R~uD7lA>WrHH&I
zM50M$=OmT$;+iCx*hrsN5Uz*fKuHKd={WVL9bf0gg3%S<tc6wlo!>KMDa>@T#22D4
z;DxvoHJk`~HT1pQXXT|9;rShXBH&zTdyEaBg_NRVW#=_OfBhztK%(KU+7g{l4mzrP
z8<R&nl0nY;>8{-w2VvPueC*Ta-mCII!j?8XC-hk;^QE;uud&8rngB0Y0NoBKLEyx|
zXQj&KW_7WNrF4DvKJJxO-oEfGppaw>S&773?*6 at 5m1xq-=xyg$=d*>;MffztN6Ihr
zAG}IQ;el+wf6O^rNuOGd!1lQU(5}hYh~7^2c2<*V_whAC;h!8i at 6<YGcwdxyDlGn^
zH;vy=z(X||A+5d5Da?h$Vh?5%;TkZ at i_FDUev~Vt-Zy_$a?Oi)pBz~v*Z;62JEn>&
z0i@^}MErfn)l?;qRH``ANa}d at MH&;CCAS3_52xeRe}Zf^n_Au~JOM|g&<4Dx;>j1*
z(%2%$Cip?x8!J*wCaA)E;y7G5b^Td5j2R;Q2lpcW=B8=}jjzqAIAH at jFu47><KhJS
zFU{O4$NI57+_#vrZcS~G*OLo&Eq>qWQo&mLE1u`MWJ?7Au|R|QNc at lDo)KbRka at wO
z1R0mKf1;{ufVGUeB0e`PyQ?dICVivbJul14%&ff;=iT6fh3tSzgqTWkWv7TWMN3wg
ztnfNk(mHc!w?RG<r^pnW80O`3>&Z-XDu4(0W!wx<ND$;32~iqYXb?Kc-8v>L*5oz}
zvT^V%Jx;pQoW4ow8irLw0-9a>aY`}thVMG}e}C$QJ$oCUgF^G$Vlz7TjIC{m?WYZe
zj6(|;Q}3=1N=8faYjd5>X<X7b=@#J6ZbSS;D<jbt2w+r_OZ0#)s@<BD;&mfMX0BS%
zmx+?UM!Kyu{jf?1EZS?CL)8S>AzE*tB`z2DWYPl<DBo376*;G`-_+GmVVu*5qrgbl
ze-XW<l6zMPXxZ9 at P&e1!{+bL2Fm{Rc`5?ZSDRV^DSGzT|-rbjuzM;}iuLxB`bmHCD
zvAB2!r}HK9c`2+j(u?ovLf?H$fXwfwNkkXjm*EyOu%28fqK?7_Bn<i|gMV)pcQ2&+
z;7C5&rHL?fHGv=hyFwUNCxD#RTrrp?e_z90DapAA5JUrCgZku2eh at m;BN!BxR!Mm@
zL(!R78UXJbf*B3l`D{4$W`x?t9CUrF7{;!vVH9%X9e8(DlVST|$7&0bMD&QjDtzyK
z3+;pNi5^h%HlOi7?>%D~A08_fR~(^=;-Z7X|4270g at PM0d)zp!4y=alc{vQ~e-J^l
z#r($%nif&h(vG_zDBu%6=@}wV*k#5?l^0~LL%qv7xf|d1mNWXHZ-9;3M`lbSCHX-C
zB9i8zRa5lcYiDg=tnJ3vqbaYXk_8cSY+WNjS*;<Fovic9a;>RdAU~s-eab1-R)qCt
zyAf5p7{Fqq!iFAjoa+*MM|m|pe;4&+z(&?ay;}0tWUftfn|F*P at ocQvvVFY_(`;<|
z)~Ik_&j8WBqG^tK+IZE4dGr7Ap_~dJV%?HSUlMtAIGj&{`;9w%da)QRVbxe#I_To&
zzFrz|LT3v7aTN#4sY|Dm2ohtw-^eXglvKI3-|Paye_9`e8$I~1EI0oXe^|%iD2jAD
z3KqS3UOI+Pz<XxFOp&zL9zaxcl?H|0)rmpqYfw;j3qL15M)^GF3>~fpXg4f)q+y$9
zd~m<BLt0^umf5QYx}qcI$4<;oYc;^T1gztYd?y=|(K!tHPUR5JV2=94jdk*3Gcn@}
z4vf?dV%LQag16~14E2pIe~?%sxcUv)9zMu{1a}I|1Y3>eK=h+d8z?3?aPkgFNI{7u
z#EAI_5W6@@8WLQlEfJYL(~X~^N2LVMrt4WWb$q>maKocj at x6U?H&=K?U<2C}(OHaM
zS=aE-daj=CjbB&$RmDWAP%%#I2U69C<D3`{09rO$w)D6`AP at iPe?~#UkKuLV#6siS
z6M4ksbCB9?5`w!GAcSy!a3tS|Zv%J1>LU&~W3B?WuUUzx>3Nhp{FkYJMy7M;*&Sh6
z67<*>D!7!7k`cB25irxqh0F(ka~pM)bNUq01ezgckT@&bh=5`>Z1Iw9uNYcK@~=#J
z7xi#8B0ahWsgS)!e}Q{7DgSYSMm2N`+Xd%vKv_rG^D+EPp#ULVc2xGvQESWOO{q&Z
z;}#M01pNU33&I8rkDyeRh-ngCYU)=N^y1DNn{Ch;ZoLh)w_^1M!?VLQ`fvMs5=qwe
z)@_42-bLLX_(zi(#bU<A*YTEM^lGH?XZ8?K1nWd9sdhBNe>Au|Sk?Yf*znYz*fp8U
zM%r}AZmR~K`Ib5wX>nx8kMx2uBAfPkQ1ULf6|+=_;~&OGeI0;k{xtgaIe%gC2_;G=
z<v#q8z&q;sTMiJ({Zn_&`3(z`ycG{{!l_0Ak~Q0PuB<^*5Bg-n7z?AEo5fbxlqsJ-
zI59-OQskEoe_ILFSS|2gv8XhWFMdUtWj;O;k3CeLcsIZ%Qk0<xh0+_quSjts0i5L{
zc5E=mYHXj?_AwY~iGOH5ug#e_2veBh3yOS$>V#W#0uGRbGnY>b>tT+Gp2QwBD#Iq4
zvOU~VO*M&*f4FnKz1iJEkDn)kBXyiTVjB`J)MYtmf8r~K{%pts2eOHgW7})cxzi_8
zARfv1yL<~Zua`Lr73#UZD3T?QDF0))FG?{1Co$mgkI-3q at G%*o(Yk!GYcPyvQ(m`k
zIwAx2^w@>X&)AZf0orHi0%HnVbO{K18zaRhj}CBYR2(?_3x>BX at OcLqYo(y12%VzM
zVM}92e>i~RA+E1BOKZ3NWix}Bo at s;TiI`XS#(e?ID-Nr0-z!L4#O5|Sq%tB*0N>G8
z9MbAoJEaaUev7p&w?Aj%&OfyT?ydb{Gbt>GhVyi5J$>mj|BV{#)?-O0kF&MZUA^ye
zwpl<F|9usU%?P1}esu4FP$h3G{7wu_6}gwDe=^o|90NtnZn}Qp+S_bY33rgt{S78c
z0@^Kb`Qb8{KH*2y_zIBbt=KgWT0eH at s=~%b)Ky2@^YF<|kS{IA3Ir2uymgi{Sa19!
z2$N!Mx?QX^VkVFH$wK4IcHZPG at u#fwg|_pLn-QM|af7*~;H23Fc8LTAhz@%}@y3Sc
ze{8%{3h;nlUVJ{ul6hOW8T58K(iOnWr|{AUOne&_-Ih!T|AS5qIrzO+hv- at VCZdp#
zjHhibIGQ at errsszJ5K*|#lxK$g4=sh=A>c~2F2$rkz>J#*fD^3*Kr)Ag at 29&SCPx3
zTLmB3O5ZN7)%i1>%cr+N);j*RP0sZ!e+~<mS?sR{g?f<tgT$!{u=uJ2>mS8ns^9%z
z<rY<wAQ*x}Mc8A~>QMZMQEQfeyDi=8{WhtLtg^~M-^0>3F at h&*Q{v0lcjh|>qRgMZ
znEk#WBG8c8vJjTJJorqLInbEW at 9Cj{tpLlhmENKBoB?oPjNy51;;{b0tlrPFe-)`5
zvDZk4c at 6N_PeHxLTORGDKPQ9aCwv}`1#zTq2OjHYe2aXs()``plWzr~My`?ta{?7)
zF2^5p8f!l^H_xCj$p=tR84?|lb#i@$h-+69gfZ5G$g_f(IrqGve{f%sw>A1}F5T%-
zVVd8}!G#r>e|+<W;9a*p)6e+ze`ESpk%Q%`nqgA_=vr1Z>nG{=<_ at w|9`PU*lt>9*
z6-8hwkQ82;pK}-W8hO7t%K_XOjVn9;f``dogCy~OQ||gfIjjya?YRaC*O=edj1=#0
z238nL*(f;vBoIj=`qhTGs5-YwdsJ2P&L;_D2F&*A7c2b#%O*=mm5Owte<NksYRU-Q
zmUuN`DJJu-;_=rIUf!paXDI$44E=b8p7{vE*W{VtRPjmWWX;c~@%lyJ9OkBK$$;H`
z-b<Xzds7dA8aN>ix3ZPPx1cG!EwT=w)FA;nD3XwV*tj`zWT_D+{}{}a5pd{`I$A1*
z94qqB&`>g;LUbmrITF>Le_Xm`pnnU`X%Ve!u#=GkL6%=gLhagGR!GtSw_K6kblV=T
zlvM5|3CncD>6>6qKhhm**y)>z-T7tN&a2<7HFn$E-ZNn{E*+?~n9vtk*0)n=a-Ba5
z%f?qTTvDOVMp3yDjAj^X at X-PLg2BguEQYh1s{k6X2+I7-u59z4e+~_8)JV<E-bw_`
zrJ_s7h5D4B-`O^hF>ezCP at ULxn85OiG{W?ov>&QOolBt+h$mvnyl%w5%?V0Y<9=*~
z at o0ys>JGM`acy?Edr>7;S1j^qP^n}!3k<T8W5O<yIx2Ho at dZ{XIyH*2J>z*h>L)uk
zb?ZDW;UNc!<YI7ze`E&+RBlbR0<!UwJHt>-$-W}FS`+y~rMm!OJ at duGI^m$Y#HXk~
zv^_RV at QdOU{q<OY@$LT~&8S;wQjy)kw2c>nv}3(|u+7=u^wU=I&NUF#Pht!%|6tv$
z8<IoIZ$j~2j>3OQo(6!618q**6Rr8`a0bpVDE)2HoS8F#e?eb9(+N)Gr6!DU0CkH5
z7n6|E*-r)+_CacPT at 3i(z_*Q#EeL=k2+rBA at sJ>|uRS3wFovls9j`ZhwSg at Mk+YH`
z5Q@`J$e#>S7b%yfBxSZcf7jykWH5=cY?h&v{$K(O#-L-HZl*0(9#h)`{jqZStuH2&
zA!P_6M;^mLf6vb}-r!GT0&h}H?_#}AGDdr+5c-8;vp)q6MOoeQ0fS9p)Ns{kCzZK>
zeSNI3w&%|GVZYdlXIN`MOg6+Apc9f#bq8J-Aa)79#~A*zj7P;W at 1X?`RC|-!UOH#<
zw3WHS-b0ZQl!+1)a;x at 0Q>-Dy_w0E+d8+v%K$kkre<GsMTaUtXN)b at R^hO*c%M{gK
z at Pz+~Z4p~TpVvt77s+T7Sg3IuI+sgGp4N?^>Z^rRp=NFsy_`Dz35M5kdi$Lv3ZLD`
z7*@!nmt?Nj13CoFQE9e~))Hr39k71)-&bWs*YNrtDsx1k3Bb7KuxQW_d6bRjSedIM
z$(mjxe^jYffzPL-+{gz4<TJEg0&0+2x2gve?`n#9;~A0_z7F)KZWWgomckNk4IvBB
zetfa>pEjtW7~u9K(q1+P*{tyQp?;W=(Hb9^I}a4hXRmVcgbo{0bA||{_4kWPf177I
zIjsrmrs4~jcJ-aL#M at C>K}VDn(!wRDu%*MAe+Y{>AtR-EH0 at vT{(l>329kBmYZOhZ
za9`urBb6#~5%vWhUD~{B3Zi1qUoN3yLC~d{5jOUR?}1zNfjX+pv>r<5iKsrv_5GK_
za=awJrgC~**hcI%6YYZ3-egj<-8F-Bi7M$7CkwY&P*pTpzt6!b!%9KsuSI~_aGPNe
ze||*)q4%ik?M at WdeVpN!T{=^m&p(=(gA=g(to`TFSSZzCl_U6eB$|d1b+XJZ1ip<D
z$)?ApX0Bxu&TKCPb{h-E2 at TUs2(c`TGB;Mk(i=kZ-#_4|#}rZg3`Y)%{dW9<iHoI)
zPk-awjk4*(3#7)S*M=P=+0)0Mq0$puf5{vP{B~xR<9eMFn2n7*On6Sw)Tj}+rfha}
zJA*18p~?&3Ps{P3i#1`v23 at Z`fUCWnX1d!%EPMS!u|UEW5(_*6umZUfm+D~rVhShH
z*~?z&x)EIby+g=&oCcp>(f|zCGNP4f83iZs+{KGphaX9q!&YoZsv+9ls-&@2e{Nw8
zdV{rf<85&^QCt!E;5B5dRbZp$W>%$&WrTXMMIx0(J+>OLbpZF*0mG#9#_FhZ>vh&5
z<4zbehqoH(CVfh4t at x4W8mkfQEXvj5OjcY&Yu4YdKO?;)h;e-1GOs{PoC?%J;BLPb
z6t9zjWCJ7WO~5BM9cfmKUvXUDf4>N0;@Qd!tS?U9Nq)#e4l9szqW(;trElkbt at Eg+
zD?!{W_MY=ux;yZ3=TSz$-08ST=S*2nx;=`8IchBA_YIqB7~lLt-Fgh%!_nE5_x~ob
zDn!f#*&;AX6L=3zFujck6vYW^YNq_sC>zQiar|is{b8RVkn3;;%n%#Pe}^E1u~u^g
z5Y^$Z6B(lH8e<z;CORaBX&xL+k|BhzNGG)nWqye6U*#Yl);+D9nx&<biVw5p at 6MS`
z%yo8dEB0B*z@^X2%`Pje!#wX#k>D60G at 3L!fhygFlY>@qI}hV3)AoMD$plvcQxKzg
zIfa&v<(WauwEGrZ0zhoge>`mpJt3xnnf9KHa|FIm^n^N3`iEq?6T$ObEy5_;2+QIx
zK;`lkwmwnbD7G6Qb83KWuH^3NfGIMqX+SCUuS4*=mbV#<r>-pMv9z3P^3i~LnF&r<
z&E5K_?-nH2EC^J7Y%29+(R5LURwC}1aE0~9xP5A(fI)!0X6Yv6e=F6N%-^BaN>tb4
zSfbdDLgIn4$7MzU(;>rA?R;3-ww#cMk>FhZjyLyl%9vF$y8O<;UvKzZ;;C#~>}6L)
zwg!EDY`PKNrSqGGg|_j(DOb*?@D1Qr#bN*!3bsDWuJFv)lRLB-xdac37yBt8HODZ1
zC$a~FBEf&S<6xyYf0km*Igg~<Ab<mLYak%{eBAHZrl4A&l4uT~w{;qJ67xVnC?r*^
zcF`W|irxYN1f{>zH|E3lQB>O(I4{sbxUp}1eeL?ErY4+(rGjRY*ig27$V&77Hr$vX
zGKAezbFeg+t4G5zPm`5mIq5eqZKu<Ux>~(BG6_5Q9EY!Lf37UE(?}ZjheeterqZVB
zjI-rqO~ptbg*f- at Zw}-|!}K_*w at r_I%Hd}(BM^{zQf6xZf=dn4;|B0C37I2iQ9i3q
z`-8+fBF>PJ;xujZ^Jk3DF1fZxjge~L%>&g`vDbOv9d6YpORAx3dO%gQ1#Y at A;L8u@
zAB)p at YglH1e_C@N!lfpd+>7sp0e*_ADc}muh<aZ~jHwD|*4fq3a?@34C+otxs={j;
zLY at WU>1<leploD2NgV5uci?M^)Pr-yK&5F#G(wArN>82bx>&}Q$z0$DlB+jD@;yhL
z8<HnHtC!E>G=_lUa>V`bH8j$*$V3pQn>t%8oKx}2e<jd*cAe3};l|DdP$rMZvN^s6
zVpgq&1dH-BQ2_ at 3-py&>i&V?_+`1A==nwHspS$Mm-)J5Dl9!AY(|0^b=#;t?WXk==
zGcYNUS;e3ID%+hf6^mj;!8ldc#U?mlWixI*aw!=AXVB*MHc{oGt)@jHG)gLR7V|F!
z{Rp{Ye^H(Y-rR{1xB^}VS3Ci)-*$>jyOJgCs(LcI^3Q-wr6k=5sC~lju${7vbwbpK
zP(jE<a-U}bK0UE5yF_SyRpT&4SWuQoF at d8CB3U7b-aL!Z@|#ToWSD+Av0%U8zK{PQ
z?7|ipBy=XpJ(WIM(mY*kJv7tXE2&V5diIC?e`uGU0m|&7i(Q#ei&WE)?=VWFGK*dL
zxFp%5i^v0&`UIcm*xLnDkK;{L3hrla&lK#Y_YKd+@@z>pW(Qxsm|F;=iwcxpd60u;
zM=GU04d)oSx#7*t&u_MuA>kl?o0~Vc#%lY(!m0Q`iCBjAHCMi{iZkaub@(+EfA}?7
ze{k4`MLO+6Q!JQJNlWVTc>(`pG5)9d8P1VvPvTp_&BNUdLeHq5<V9KGZ{V(;@M$nL
zI8a0qQ61d)<c^1s>u*SaoUCL0uCe`&iHG~#If`0wSl2x-4E#VJ8oTyu1qXt5>D1AB
zfQbgbArWE;aKC!^LX0Bh<@EGEtwQU`e-{qcvr)&OS?UX1Z<8f~d)UnmQ5ih(=nuh;
zbBb{oj~}7OOn3XhAvY|G+4d4tQDhLL$4<?P at LAK65GPqk6@svwN$||k`EyvfAcleG
zPH|_Q4<MDQ<iqLjmfn-GG3$!ANO_3pW-d`ZItMXNGJ)<5{>5N!KZp>M%A=Chf69I+
zB^E}+R#CG`K0(e73)4qw3@^?ABIPlKu*#Bh1lN$wVS*pF5J=^GJhvj1<ld_N`k9X8
z;*kfvirXhR6UWFe&nuOHFXO#?YZJfdMd^D0sUvSDo#*U^cUVz`GV&z_r6>Z%(oQ&3
z<Z)K_tOrD;nP`{MbO2u&;9;H?e|73 at MRI64vj#mtd}V22Du$DqQOX}pP{XXw!iW=B
zjMbQOI&*JK=i}|Zk35zQW{~OiFAlO!2O=qKZ`KXVe&I)udLl}02l?HD7#umeq!4AF
z!`KSy?~NF(N+Ezm-NzcQMn$7~bVp- at iZcNCcj+1!kc$0SAfJ_5(@)uUe?*4(BiJgO
z-{90r?Lxyct|rcgEvpSbvr^jh)q8HmAx@>vt7;~)<U8s?`EI-{!xch1-B>8 at zh`!e
z5t1()S8sdXYoI+gR>S~oJj^Y_O_&IE%u)9{Zt?)>ST at wL_metXIuJ;anuOxe{;uT>
z?r)Ir&Rdfm;Hg~{A>^#ee+bcJaFIsjeLL?DaIkNEfV+*`dCrnfVR6blgif|P36e_~
za`gR>1i<`SWoN0mJ^&6je)tCt%PEq7>8lKhCJxL^7h_4 at 8WOivwE_T%h9Ep;7K*TR
z5rg9IKVP*;%Nf-6%*=wfe6Q?7F+ssFc(vO`vvWafud`0)%78CYe|646jgw5-J!19d
zNmKG8>1D&5gs58P9~{zg1j$GLWRoDJcU$8ip`_NHGxZ)Lf_YeJX{ZOOhpeC*8?Nxv
zO(j>Gbn`5-U~29AJ;RbJv+;vF%*OzALB)(pJjo=o;2mTiDZ)^Z+X5q6VX=~f3>fF|
zZ^wS^T2B?JG$(_;f5}$BDmFlZnSEZ&hFAR1&)CJ!rKFj*u#%`n71}SnBXJ;~%b+8>
z3}g4^O7yF0egdeB=f&SVocSPyozjYZMUPUXoYzZW9OHg$FxCa1;SfS?T>eeUdP~$r
zcl?{k0O?N>u7<o!z%JL{oC=-d#`ME at 4PiTiaD6#ArnV_pe}?R$(WT*Ur)ZOtXk#Qd
z{HMevQJ}VQ`ZF!v*kh$4KDmD_0~cUd(==dW`ahtH=PwIwXiSr#<omP(IO6*$V at PKp
zjqAAIuH~SQm7ONAJ`<-`%M!~v({*D@&PU7t3DH4clX1?c81>Tj!e)${Z^^u3I*+&J
zNqjJ%HRP(le|=t at 7Gm)H!n63hZ0yAcY`B)<VH{ff1sYn76{IQv{{!uL*>>GTRUGtU
z>paZXmvpf$OBs(lG{3Ft=?R7MI2jHflO$1osHx-yk>c?Jon&*sWHwRX>Kptnle0yp
z8gY-nm6)KATf$K}>0`jG+pgQ|CX2d7n%t_VZpoDde~@RMXEwKI4zezb>Kx~t0>8 at X
zbIf69nM2x(q#*`nfa~#WKthXjvBtD<<2^ZCvCUc_n=Fhv?w56kK}J(GWKtOACDj;I
z`kdw+7J)V-qX>)nfezMv1;wPe(v~KBe@`77y(w=|g7vg>*vN()bCV<u(6mC>TsAgd
z==eDnf2&C0>D>^owR4(j^K%?+dp4K-_{<EpEI>0J-6BQoTv;NvepFN#FJC<E$e at 0O
z9SwVDn;ggZpAy5eRRaV at nZ!ScmA~hNdnkeddW3Y?%`&!qrP_hrMrJeVJ7G-qkx;{4
z at qLsA>Zy&2#HQa6wRK$Oa~bCv8`zdwM}TXLf7?c0R_|BCidhI6_H++=Yk<~*sOjJz
zVsMZ}PbkCpLvDfKj4<$P+lW8{k30g7R=4o8T>=!{DNooD0RQ?P*c1A~)TgtF at wa+2
zb2k?LrMx%NZ$Syz2?6f?0lig?nGXCu(W<Qs{Eg)KYGjfU6ARrw?5+$e;DJx=OoH7&
zf4qRBbQz8>l-ND9<jKA6hmBZ0sxkI;3Ll@`P*sA^GOgej(5jo1iJ#Kshwm;ntFu-=
z1qc+vZ$%#Y*RqDG^+B^;?cKnwrG=n~SPAFni69WD`@ZQsq%b-op4ENddtCDWLynZd
ze!!_!4iS~SF_Ofk>%TQ at -q!u1%~?xse at EXTj2**XU_+S`PJ<=y+|rysT5SZi)!<va
zkB(c}J+yF8Uyvht5dh`3uAcW+16*8-1S3cE0;#Bzf5AVAcuLYfAm;6vln&QYr=E{q
z;S(>0fJOwDk0wx0-h at PlYeN!7;V}<1{*d;fZyf)xpg*MAr&ARGR7KRh;eD~qfAx}g
z|2^G|9?bTFqy{tL0*%tw9>9R9+sMq$EBYQ*zn0DNO*kQKSy3-;RezIYz3}OU2S*m?
z<52GQRZd8pf-UGm4FNi;&BcFKF`>aV>>HULU)Kl_zd}!cXf8ED at eGN{9z`j~bknw=
z1dmpU8l*kkd<+rOUxqJ8><|Ole<?zSYwFe at LG?hl?_o#qpFqMRMo9alZgs9XPLIB8
zUQ&$8og*kz6bOYc&Mu%H2S}iL at F?X<h<<663=_%V%m>T1m|<V^e~N*$Sh}A`F!c)B
za1z_sPQNv9UNE5DJp{n91iR6yJjzk;jkrs97xkxa(Ka`X9mL-o2wICne|AX1gqZ2K
z4~zA7ZJtm4V0x5elPh~vq@#qaYJ7z at llEvrd7qVCYq$o4NqWV at x|Z{dZa?*G+s-;n
zyLUBB?fMHhYzrQMcROh{l|p?2mhc&ueLvl<%#vW(QGN!6g)l>H4(HRvWPBgp6nx{i
z08bX|<uuoZ${7~BPb4o?e?Cy6pFBneseyU at 2oEvA`bU7x$S_e50lP)d_w9-#zR7NC
z7n_NRmnrW|DITS+)tm3AXWZ7pU>}*iKO&UE&O;5At2sAQ4EDz!t%*mMGpDvl=R2-s
zDUA{BmI`=r)h^MK7^*(A`%jCoT>g0YEKs>qCV2}Ljvrs$pYgxne_**s_~P`l at pW1`
zebCazdHxHmb%`|)d-y#>X`2qq_O_3L7UNJ;`ZL<{k9oM<s!_{ZTYp2_#B$ngYhJva
z3y{VVx{61sytENWe at jP(S;q87-iE4UXf;ZJ4DwFvQnoPs*4g4t*#<ZuWb6z47(1|w
z4-El1?6sjlvhCaSe}9=zBbBSG^SS+uVky(%892=lJ_JXp<hfGmI4TE|)t at BdM~-)H
z8sAPICn2~fNGo_jTfW$naR^a&L;|3w8hpu0ZoMqe{@CXT|L%%${XVck=5D29E~uo$
zC%@VPIFZ{Zw34j&pht}Ht6_;aF9^heg?m%VgNG9N+Mc#%f3hlI;$JZh2V!&Wgj^pS
zAVHY~0|}WA61<IMUCZnL6{6*h3Rw}yI3kQHj5YpkDKno*jZxP5RW~MBY;UGpuSs+;
zoQUf(sGjr<!URPi^l3-KxUXn~;pywzTL^L0-von#P$<AZp_r?*d2?2&$|*BCd#>K7
z?0k_dCIn)ae at c34>mI)H=zx!RrJ&2UiL!H1v10<ZC*WFK at F1SJ6vrl~5#=8Vjpp%k
zifq%ATUp4wpBf(W)jNy+2KB15JRS5ZU9h9*4k$^dF$gibCk6xw1tI6aC2kM=tskZ5
zb6}Fqe_2cQu6E66SHa+rrw3+^MvYAyl6%kpV5uK<e@%d?p?ykPF!C(xr#6+EWKN6l
zwMOR$^j9HVrvf-lkX01GjDpPXSCt??j#AoE>D^6dMr21uCGuL+L(;>qjMB1wDRMex
z7SimsOu at UKe?A!Bk|CxUa1RB_5^lF2hWy)Jk)r`C{?N`$^f;(FpR(?)mHG0Q3bxkg
zwB6BOe-;xS?F%XR%k66ay2!_u1`yon0h#VngCKrwAx{uul_@*iOJ)A8PJalr0L0Ja
zI|awN>BhKr<hMf-0(aanz<RW(c9<+Zs0LmC8Pc|j>FQ7iwnCgya|JxSRc+LT70Kw5
z at bogzSP+q_&?aRT-H{55RV(&~M-2f(&c^})e=-!D{N at nT95>z(bEC_WeG%h5W-4Ps
z<$oB>eD#G7)ikfewe^~Ry|5bH?sTuLL{qgz`uM|&L#LsZ%}>Q5Ll~bK%GE04baWlH
zw+??YrVSZ9D%=56UW$yDFVgfnWnYoALxAV?Hp&bvS2b^9r~Pg_<6Et7XwQMW!#oU<
zf0wfH>1zQ#*qlkTw}4 at pbDYR%Jg~FO5oa at 1JLQ5D^u?6aqxlwj3|PUaYiPwfn;{Tp
zABLzSDz6m0Gqxe|GjYhj2!7m<7|I~VRw9gvVBfaEOO5vNB!6&ZGxTbP at 0bj&VHrI<
z<FGp0y~0h}F$Y5;c at X4P>8e};p%TJ^f9zWxyp4^_>>r`WYw=CTB$a;(b<0!uPMz|!
zAqo*2rz+$cWiI-Vm#;$F$8yQu21x4_5N)y4-MTk%MNWu(KS&DdJ0KEjmC@&MfQIIp
z*lnqSbEt~0fjG}i7qO-P+HQFqDm;j(6Rjc>0)NJM+rezJ&<v6n<pOc at H%t=Ie+EXL
zA~a?6(6O3~9GYG&sZog8e~mdym{mu>zRa~o$*N(kjR??1-h;0OZ|&K=p+Tj}Y7NWA
zP2s>R>44y%UBaitMuRDh_~|16f_H;3`D-;<Wum>^8ly?C5$b3?K<9mVaBBt}%{}|k
z at UJJ*iDKndS0=QcfC8h)o1QoqfBv<R+~HtjCCKKErDGhU<VOY?wGB%AIL|y6=t85U
zAj~u~s{%}(H%(>i%fCOF8bAax`|x4t=Ejz<%vK4!iaH6Jwa<_O&Hm5YYA+s*-QIHt
z(P()+wih|;bm3Ksh!L1K)UPOJA~GJ~0dHMmTWV^#f8lz8$8MMn$Yv*df6PNvE06N|
z#Q`e>j<D{5+n4v|t`>@rdhH__aaZ*%DKBY;`R$^tMwlRj_bi|*tCI&oUuKk>Od&cB
ztK(-9dzEYc0<k%@*yqV!)biY9vp?(+v<ACq$6M!@VE*xH|LQYSYIfjBhlCc8(?4(6
zMJlP{#EG<A)gop<u}fnqf1ybg%^>ZHw^W)*H>=|}6yF}@yR=5tsM{s3X5d!MbDbGO
z{SlD>>BldJdzJ&@OP%~SOeu7jSbdENmF*wX31B(z_q at iFcv1XL3Xk)_u`$*^m3s#;
z=NAj1LFRV$8-KT__(iw?bF|46L)eq71G!Ka`&zZ2)09HE?5pjYe}Fd5T;ntX4H|mr
z=G;S`si}}&D;2%IQqdT3jZo~+$4qY+?WXOSG5KY>!Ujy04+92EoZ}k6hWgC at ptq&$
zZz$m}@jmjDrRFyaU_L1yA}6dOS6JjMUb>o|D_7Yq&+Y&@PL(~2;Pj at Z0tcn=HN<n9
zco)t~X0|9M=P*2Se@=EJtK=C^+f^0+mV(%<BA?5A3dZwqTR at jnf#<1U#1eKs7DLc8
zM=mIfE at G@!+3-gx!$9EReh%1uv13i}czcntKE5H8Dd!Oz!)tS5yzs`L`j>F#_`nO{
zmuIxdsb5rRbqhq^xIClw9;@f+^7hh9E<5G=f<ok`HEFD4e;Wu|No|GR(pNT?o^iGe
z5mSNh9AOFVY}LqeeJnLa5k<*9#w%KK;Dv9j6PJzBtJ8A$8`>r}dT+{4pz^M;<_Mr-
zbd`&^Dwwv*JopCx{2fy2;)d31kaMaBBzE4hz0pc$#E<Lw+GBCB_IPL=LD{yf#h$Ff
zIFyHe44A;^f8}vu!JsSD#Rl^V^_)W{s+8&=S%Uxi88j-84KD#{W42hfHjERXs=R>X
zYzCSL3`0-lK&hx`0 at 7A9!^8@(VsTzFbez!w>q?r-x9gqM5QYe;y(W;qcBOE}4KRv%
z2$q4;%5#!&LCKF}dANSd4fdhwJ8IB5!EIOXWCMGie<-{%hS_VfLP!0Mj$(j<AYky=
zh`SRUbu=7j_Nr$^X|p}CTeJEzpPReFA!QM+){wn>EHxzI+w0oa%iZP{wJ$;I!2~t1
z^jvwMZmtYRo1||Ji9xUqm%aH4?Jr%_UF3LH+-zu%C=f;;eL8f64s}CX;DH+~I3Vr0
zAl5V2e~Uyo8pYSg!=Q!}Cc_-5&P?5IQ>jJ1fwN<M6JEa4?AoOLoQDVwL+>KmICv1V
zO0}@<9uGv-E6H0jeUYfUsc+L|;#mxcit#Mgix57o794()E<mZ&0xZZ^9t-%ghUeIe
zU5!kW{YI)zAKf8Rd*x%1O<?`&0<ob#lxC>-f4W?sh`j!sri-q7QH&VvQSLJ=Hz6i^
zotBTHCAL}_GM|L4kSBBsTKh&DQUPWVfpB8SlV`v!^@A`T0qFU-ld6(;6q4z!Vm+H3
z#nllrUlu0awp7=&OB~ey0sfm at Rn_wv@4B|CrLKNF7*-ROF_0iRhyieq^(|+8&()u}
zfBcDeR>3z*`gdh~;MFM9`siZcN7o*S;lOfV_$wtxv~=Wjv*<I3b>=3*DCNcDV;J^P
zFsIv2>)76w=DOO9FyHbW%EE*5R^1(I>Yg0*CuaX$Gw3D-+v0J2;S)nP_V}qziODg~
z28k+oM*2JoDFTsHC_$*fAWG<ufwu%2e?lPtU%fixar`+(mI{$vNMk^i$_UlbSC6{M
zI9-DWz$x;r^G?evP!Zny_e8t6+F+Q60L-99*N<ss-n(ea5c*D%*|URhhu68ZnhU7w
z!*-zT8T>>)@(Ka^L3nSwuSL<rcRe+Z2rn=-i|93Qldv&ZuIQQ#$_UI2C>`!=f2 at zO
z?vB*r-Liu{B4_E;zZ_m_tOZ3Xa4yWxAeO=el4U_wb=m&eRBe2hYCmQ&qs$|&uy6co
zP?Y`6^0{ucePk+>tY>-AexBK(-lMfVJ at EZU11EuNs*}_gx|#_8#SGi0Ao1YwMPT`R
z9?>qR1-gAnj~2eh<1iVhO|BzNe=<#c5!q-PMzQ^Vt(=y#ie;0m-EM22Db$mD|62g0
zaP$p)8bvjfof?HK)ja=G;ojMOqJJjE85(-|1a7;Y|2dC1-=mU_{LM6C?}ouN3Bd-Y
zaiReSB&}B7Q$B%ujEse)_&jtke0m`cjoSqV3Wtdxe)QRzIyOA5K$X${e?L}K7<A$e
zU at 9r3c~Nk3Xh{t$!ZRf3B9c7>7C?-WqkrcEVrue1`XhA11F&?!O7r0RcZ7ER)O+>*
znFv4edT*e6Q<M+#st$5*eYe>A)QtYDZ*nXfi5T6RvxK;GU)K5(7f7#zT!q1>jz at a1
zmUi3E!Q+r&$powQ-OHv+f6TDvX<{U=#i<VeS7UAROwJjqlidA`K|yhJdj5|I-uTjz
zlq+I~Y~#kwa5fZ7SvlSRZkems?7bPyqUo>Q0)6vk#vJ5;C?_HE>2-a|BbZ7{Ew(@u
zXRKCqYpro?5e`JA2KBO<=DZ_NDnCSiB^7bL at OAgiY5c7Gr1;|he_yyVFCm&}?eowN
zzf0Ptng_Yn8g;QpgW2gvpFW>fh(~+b63~^8uc)Lo;ig}L*T*j@&bpD1BhTr_#1>7)
zg%}D}ZKCiN at 9AQ4qr*tYOsiaEf(Tl5odkx{EXT-im}{%Rwqe-|!NdOxyEMZwb!^G-
zYsI^4HZszpWTXR5e{aNU!gX#M^Z33$eBjEr#m_T71{t32;<4z{L55z50t2DhvLT^*
zL82$#P-;qh142>XuRlgzSIs%-WSU_Uhh`Uub=2rtYq*Ng!c6V#4HP!CH5ZlAWqWYp
zQ*4%_Bh%q#q^{b9A&FIU(klZp$kUfgY9!Sf-&o|%sg~$ie~!#%p$^tHc9=izo9-4@
zZ{GTm()Yyqdt;c~`z8sn3U}Gbv?LRGqwWuVvxgQ>8Diuw%>IR^G22I{K_EQ2Ee>w5
z!-Og|V8OghQmy>#HxgXnr(Dod`(*g-D~XQ+W`%8+&$@3Ss|G$mJ8<7xcD7-kRuiK9
z{g0P{!#G1Ze{C;ygm?I^%h&87 at Y*NPDJQp&i$F!f$40V!#AL at nZk@jNV2s~1A at ZK9
zoVud~VgFvkOKk#7w3P3K#R1)p8Y|?{<Q~;qF^%R}DX8odJ=Yk9!L)oRZMH<AqlHP*
zrs!8c^a~DgEz}P{XOpBzk$y;cE+eNNtSV^E9dSGHf1B%!Y75?*0m9W-9l<NT5(Kon
zSZ>!*@~dTP35IHiiq}U+rh$$hR6aTY8tRj~#RlNR^5yE5d-~z{g{yHV<aRsv!U1Ty
z(duuyp$}Q$ljSoT&a2?vEOvA at S#r#|(&|>2%fcgZ4Jyx2CJF*pN3g5w2`7b&e|Mbr
zBRmp_f9)eZybv<QKLG!l&kkzH8_b_nc(RfnK;kso?Y%MS7Hafi{;tUER?|VXXGh9v
zqtv^&)h1|-a=%LG0DF-uW~aF4&H7FiQVxl1fg&k%J+R!zvyKShF+qppe57(av(stT
zW|mH3g*b$NOFGd!A=p+X$rX-%EnKcKPF8&We|B6U(3-G)Re~ofpR(CM8_{ZmQleIA
zKOwHJ4hM5SY_7c7oH}F=7u*EK at Av;r12%vG^aBHz5Y(N-pu-e+W+n&HOHLVcD^~T0
zRNkv-wYSeIKruhiMU1S$MfC=QqFSk=vT>BW<^jzXPz%?411wncR=wt11}RJ at Ju`W~
ze at o1u+-;fGrhiq%&WuqHf`-$Cjw2?{H^c9U$%Y8BGYaQZaZk_x>;%4uKDN$y&;H#>
z%sOLb=aL#P^`D^?h`HSqD!ZKA#@olcTrdH^Ly&~&s)Dj3<hS5Vfes6`icj_q#kP8i
zpweoh)5}WW8S&qZXIA<xn#Tscc at K8me+znDULO0k%|Xk};=}Mif}0xU^P9u*cykI5
z(qmsI5RFt%esQ-?0`(aAqK&_Cj;muEUz1bT4pDXzol93K&?S)W853hq-<RNkM?)Oc
z0?~*ta3)FctB0jQs>J&!Zog9ADkJ#KWNmQK0>ilcvyJSCIv$TI;=TreAH$&Nf829q
zoRUn{ImpZ2Q|m$j<f>%eTwGoTzRqUFOP4jTR^XS<@VpaNdwiAQcxy#E0bE$MnQnQO
z-O6ZK$N?yhtjoL#HO_~S;NdnT6sB+-sEtmrT!x3Gh4GtGx7l7m-SAweODhUjhrZXs
zqlRufT{Qp`oL;Li);qSw>yqcSe~loxQe$CgW_aiTo`6)fh9hO at Ry4EEbD=$uFr-*K
zV}QI}df!g8N(vP`4Jsj{c=Rb}bY2wmXC*x0{k1g&TR-TzISTcinX|pPlMSIW53yvc
zj?<xrk2}&R{D!b6UTA6_sx4jg{Ja>aUUz at bJqP))A$k_C?Lv9#stlCMe_2V8*&Eys
zV53$F?P!Gy-cOK+eI_BdsD^8azU&=GZfqeO(-Wgs`nd?HU?h!zx6Su%kIB3%DZQOy
zPi-tUJXs=Dj<?+<n<Fe6XKTCNrk8_sbHYeIiywliW~I at y0kPs+lkh#sMywye5#y$2
zz0Rt$Dt+Jh)%|K7J!Mmye}w<-;WlVlA+NGN0)`D%+cA^sc#+RV;<DQ4k~tDG|K$}<
zJPR_Qy$h<xLen1-RXFixNc?!dP6pEY@?d!o=Z_Klmedc00LA)~%?R0!g03wja<Rd)
zNA>^H@*%7sC6pQcV-12>XdUG3f~LhCd^khgl*k(%LG#h7)~LIWe`OVV^h at eCT>0?K
zfBn)@=#pt0Aq|RHVvl64PI1H74btMTO|5k>)*U5sbZ^AC2|<q}=wc5w9TNnZ^CODC
zh6%6zWM15NnkKmxMD<#U+V!3L5})cEaDVZK0<X>PyG4YTd+BNYlV5T3Jx9^^rm`nW
zLXh36;Rd>FppL8le?W##=a8~DsxjM!P>#xH)}H)6-GW<zW3+O{)n)M88_u>G#QZNf
z-uX{meMNV!izmY7sCLIGpGeh#WG+0pP>`-LD*bt_tQ~c?J|-tinY_G#Pi;ZVFn at b0
zKFi^J0eDD^fOgQGaoR at nC9b@L+k1J+N;}|x)#*?xy;JDGe>QWejpwSs+)q8Fd&+F_
z&QSJqoFWU|Mrvgi;%N=r|1JaAUA*J-sXqcO>QE1UyfL(KKEE#zlNy)oyV`b_Z~SXo
zNNy=RDC-ZbWcm6wX}I(D`+wQL=!b-~<46sLK+ef2MX12gP^96~ti?d)xo^%mw)O{i
zmuvS6*xj0{fB1=JdQ+IKd$XRFXyHqs5NsZ_20R3G)OA-^98f^)BL{OB1mzS>s898e
z>a2pO6lZ8KHf#MuydRN at Gmxu{b$asdA=TD0g|rdrMhoDwq$SBRw*C#elN7E at S05LR
zzw&X%K5e)riNDK2WhHh))1NLupQSK6?(Hw`2#Rfpe;Vg_t;U=jIl at vU=#@&FCH(sp
z_nhCqUb&(w?^sN>lfe#~oth2xDW at 3W@0=Vb7VTqP$~T;A?wBE~jcNgA06$;HNiIm?
zO*A#lD|T^_ at N5w$dRuOb!e4MfeW68y0D%(0DOiPtZ6qK&!M_}0H?zf(lc`A6Dl%Z5
zM`JuKf3dO!Z2?|_=ocau^y<wiC+79gUt;I&Wy%i8s(BWcn?9Qr!crT6Kaou-3g!d-
zJb$DRWun~j;KV*IzQu?YLdT?fz1re`V5<*r8A?n#p}UgUYrl0i8;x%t!iX1w<Bj<z
z0*%z23)>2~ukLvXy7<C~?{Y$iIa+C03zn%-f8LC5Z3U|dhJZ#S!LU_GxC427Q=M+e
z$rvzM``9{NkJU6cQev^m(aNgfIi-vBX%=4VFN8&K7O^V#$q%NIyK_zH-02+SF(n97
zgIqylYZfWuNg=PRW)bzt at QhuEzN-bQ=mK_`r=uEJ6Y)s);yvo-gycO`f9>Fp+3Iaw
zfBn0S@<h>m`-LDfuSXQr1DKDHX~+vgfoF#xcui<6YTYl2K<m3b8B*OlEKt!u<?avn
zuAaq}3t!v4XlWzM8&gX~YV#uxd_{V+)$N_Y2(gc<@}33EB#z%8?ZrUnC9IG{!ZwxU
zF6uI1;YXft%MOvxy_m!kJZ4`^c?6Hsf1mrDJHM7PzekGH-plp)jvh}dNU=nb1P}JX
z-05Y`BvjW2>d>x8P<&;w@!sMo$~Fzg`J79NyyuUuFKsfmSz+fM16o3}kms;RJ4MA^
zBL<4Ii3Pupm3GdxMv|ji4Ew%yxrz<p`-0>>I=XfUM=QcE4+L{0Lxp)~Qe||?e@#aL
zX{CktNU}2I8{X1pjx3QhBc)+{jlkv8XX8A#!EmhE*8+Ejmczft>yT1gyb%{B!@NEA
z{F~8lmxnu+)g(JElY1G1APp;>z0{k0?OVC1E?%gT#*+2vQO5Y9Y!sA-TU$7Hl7qN%
zD?X28U6B6TeNddgPjy-497r_xf2NZ*)p0ZK-Z7pF1RM%y*UZDM0G;K7VOqQ=XYP2|
zhQ~2d^1bC`UI~67I_j!UOnWwvr(L!p4C5wC<J)Sf=g}m%6CYl&4p+j6?_@>KX$9Jf
zeJ2t4D{_Y$(@^*@W5c3eGkFzgRBk(%MPRU%&1~s}B`P2*cw-18=C}(kf2ZRnZ~^yL
z(7w#o3t7E-Rcy)#(kayZ0rHZP0m44Sb#Q#WA(8JwT>X(OFcrqH0G%=j6e}Y;(#|Y%
zm3!dcoBGU6;nCc5a7(l~X at r=~v6a6OMaR{~j0D`odQau!nezY*K=QxYEOR5wcq(5?
z$l6Eab-;)2!m1F=rprtL)P2r7jeo}}a4;B}*vtqr*AyhD=tv6(g|$EYbO!n_K<=wt
z^y$H6YTj7YCVmw$497VIeVNrgt*HPMXdiSqMY`=qVUsq8ZSd%EBW6-|vX{wxjTZ1%
z%4%)5MIs3kaTg6TqPd}vAtnOhW%#8c?LxcB7wA^ypuwS&l*fcla>=WdaDVMq3D?($
zc|iQy^XAz(h0)W4efBTW2`_EN5v63$I)d~?Bd>~1H8inN!ZsSYc)Pl-y%vl*?nZ>b
zbE?1Av%X!HOBMyYe`0mZ&UDGqeD at pfltLg^Q+Pl;BH*tLw0Q?0B%<0rt at HeLYU>9E
z<2TxiFT#g603=gz%QX0l5Pwai7mEN0gq&nTL!Cf*2FhrXFq1c6aNq4zFaFds5}N8m
zcO8dG7(EcDmPe$J%US!P;>oOAA{P*$o2-VDuz<6K`u7k4#XMr(EFi7jpUTrQMisL^
zUf-#qbF+;IDfL4K4mih{P>cDq0<Mh}c^2X at 5CFwNjx7rrCNiXeX@9S#mkJk1mCY##
zMERa8(zqe+`L;od`BaFFV!&yh5?{;14j(K(@KPy&6I_<iTnk*yQ}X4YvFuYxJ`Pvz
z!@I{%S{tymNdX<sq~orMZtP at RFgc`O%K%@5O5PVAC|))P)*739%Tn;J?}Ltiitzwf
zryLcC@=>P6Z9MyE)PI<<&Mlmp5q6V4z3_K+w1WKGgXH)YpsEQ6(@`sky9&yHpB=Nn
z7$&2Zr-k8l<c{OB#z3Em^{oR-*&A*S>ua=zI6$Q|*-L4VMoE<;U+f3B03&b;MMh4h
z_GDE--E*jPqgENhT<X=(6umXp&#XTO+w2(+?M|G&>Fg69wSP9SK4H#pMjs7r+xiH7
zzlds{7~@b1Dm~fKDxyA&xr6Q=f`ut#+tx@*-H at f0EO^H(5AP(c-$PwfMR%slciyX`
z&_$u%b%gMK2}U!S?O+PWz3?&e?jtk#_>M$XItI4OmdZ$jdJ;mqx}PG0<H=8XYK~ba
zQgt)O9yM?-(tq_eiD&SgYiK at 9-&JA|9E^~;;LbCY7T^fBktyIvlSfH-;3~<;6<S9$
zp-hVljawg&W6nDY1nKGN39^kC%~CA(_}KXDcsYA!A5Ft$4h&wB!1O4^y?|Wj;6AtR
z_ukEC(%96wTAz36s?mD7zGiDqlf^Q?*VHu)(PFT;4}bmBC at Y`2N+;<9GknG)RJ4GF
zeT4J?znPAd_e(0R4B;*06ch9Rg*Rx`F;6*iK4Eol=oX!5?``ny=n#9Nypave={dI_
zU#?+2ouBdwS^Z=vpTcicyI=Mk at K+AczhAdd{&v5W+yZTJWb7zokV4?$A;)T$Pa#%V
z9!6u^@PEwgJ7g`?IUWV!h4tz*Op~n#n+Hgh>+`nI+(Fuf$0Lz>@}mS_Df4C_jI~fZ
zM9Lh^kR?`GQZzxQ3MPuYv6joHvXKSD at X?tCQt9kk^s-zF0$5$r`1#x2=j>bfvYg4&
z(vT|fu--~6O*sx0#QmlOb6FcKtWJuoItC!t?tfe;TC at 6&u at b|1rt`Y)FoB{psQ}Bp
z5K3Ev8g&><&9?7zMl^#&7fp6WkS|h8@&s{%!ugf_hrIjlQPS=f at +tU86$n~MCUKXs
zgY_l*!VmXX0^n}2i}q$5I^4$5g-szeW5gXXZnARiU$_33euQ at IMhHv74tKp&a7?ly
z)PEgjmeEgRYu8g>wv21wKT4bspdMANrW?}wb!s_^VnXqrqOpSg!Y;FE14V)!%X}Ks
zPmDn?tDpb!D|ci&TTT)4bZta~0jgq>+ttc&Wnw)|gPY;eN^Q+LQkv+ at kCQh0Tcy;B
zn+YIrt!N0-pRKm->hsW=bz_ryiCvPpZGYM{ooGP;Vw6L&`F5;s))*a$Fv17Jjk)Kq
zx2NNQM7klY2a1IWSZz+yE&VO~A~2<Ee%Q;lG at 69hMh{8`h#b7dnI3$0`TxBCFJs6F
zaf4fN5b{?C?vH8Ize8|?k8-;-W*aWyz5R9{sjYz+b^aL0*F6?1QjInX_(LNw9DjUi
zhzZ<x6i3-?xsygBEea*}fnII-UCq3g2`^G>7>?_>Ne$BUO)Jy3tdv;h7??wq(q_W0
zT_(M?ywN`eVQx>K_1ouT6dC9W;fUe)+MR8Wz5;})+=nj4D*z~9f4?&xQ0jiTM(fY}
z&D{DG3m-Rr45X;Q&UQi^2u49n$$#4btlCf}byVq2eHO+1cQmRP<VgnzUpK?uQD!7B
z?}cCtaaoVMF6^EAHSFFP0ChxIX`n`%KjMN43`KH;5cj_Hy8Me2z*g~L?h%V;hFbk1
zidC}pA(~}1>$CTt>85NKM#oz%8s)IoShNfrhwTfDkcB=Urv0`D<$Q<beSi6n3ez`v
zQC9xK+zvHMsh9Wt1rKU4bIs{KLv}Dms8W>fX%{CT_E~$gcCw`qSZ at PV@DpqDKGX?Z
zuZay5un}&&=oU7+QbtS(OnLQ^yZ7?A4DoP5CQrj19*?|*9a6!1RIGc3$pRplQ9_f}
z4#{kHR??+eD?&VpuIwpWsDIZ*d_Jep?#HnejY6Ebw)IGz^T%A=BFOwgDHkt&bJ?As
zVrX+=0`QaVV^5`FrSv{EJ>eqqzCh!bf~@pRdKB{?=bmZQ7QddISy}y{b}Ql0PvAyi
z`uo#wIKo#N&Kto3IFbJI3fQ at FjW3QtO^?gAgi!U*NU*nR;nU?A{C^)UiAk?r0Sum^
z+CR|xZb~6otw+&=^4Kql)aV(#BAr>69>rm#=^&hc6e>bK*BC?rYTbYLz=wU1uY)55
zgloyP`APCu0x^X9_dbrD)_sCo#>H6UIz0v*zRuAH4#a{Ec19G%>CN5^ES%G~Dz9!p
zZI8cp#2xeo^lYmCg at 5U_9bI){H{6%Mg))Uic8vQ7 at 6oKMWr8-{gFYVG)T%PQtaMo0
z17uRmbG`~#(Gau_Zpmf8P*a<*n8QJ-jT-d&Dj345A#ogVsc2L%b6hi&P?Rph at olZ0
zs{!BaY5!fCNfy$>mNM8Z01_m8$R7ugGha#oAu#duN}y*}L4PzFPFh;u7h}k6nxhT7
zxCQOJ45u+&qQo|ISmXf?QIDU71EpaA$gwd)`QH(oOuk~J-Z*WBNHReLPohCp5GJq1
zYT%VF9*+-eUNl5tFxQ0^`BG|8BRc2?z<wiG#Vu}9F at Yq7H$s>{;a*TkAyz4L5pYf-
za;m}&T9jS^#eY?K0!d0KU3A*2kVbnsPoX6A-N|Db(9db{QFsY$L*3K at Trejt1)psX
zhf~W;-r at qi3xBB~RC38n_bA?y4fwnGLGx*hAUMI{Pb-$t2?u<{7u%__`?I19qVJSq
z(AmV6B^!m315VhT9I--xwRS{4Y9$Ao5jKDnC#a9(Uw at T@*gU@{t?f#wyq at sRh1g!C
zQ%stP`v;)e#-wQNZNVqnt?7r=diXfb&v^@z4=BRBx-EuUzAkihjTdbCo5zw}J?>0;
z#GX9gnnBh|Bd-QXpUC%E^TVw5$vg=T0cdb^-DwXa;;@(^d3tQ`vWGpWUc_Y5T8&vK
z%Fa9WQhzDS)yrpbVvD(J6CL at rABUqmw&C{+-m|SIi#JyBCev8f-Wxu$EW)D^pp$4B
zV}aI`uw*kcyaT{+OGs&x7C=*!-iFBsDlV~VqfJ8x6h~!&uugXf?Tc4$?E;~uY^$R-
zib4)9ta}>ph~3zu7%&3Q?YM{dE9Aff3H!;vVSiy*%!hF6`|eyjuk4JbE2;h1;8>X2
z5e~gh at lIz9V+Bdd4jL*tT<VISaFlu#4~9YD%}f#J>=3(HczKz}DkC@@l3_)5bsGBA
z8{|#yj5xK}xQZ2eJsptV0JNllv-3Q)u_17^ExHjYf`pMPzo-s|uAm;J#<xJ;4G`#8
za(@?F!!u8U%o%>*%6W at DhTVK%AE?GPiRu_jyM5L%2mep+j?N?xgU9rp>nP?XXhNNL
zf21DY{okP7K4UtSAV(^<Wt+ehgJ&RkI}f89`ZpABp11T$+y<K1j!t?A)5&&zw&Zmp
z!lz?ZI2?7v_&`p@{`djbAGiILYh%Yb!+)1FhLD}|yW?H{rUX3bzOcFyXoYn)wgssv
z{{t4W<4zmAQ}QiIBcpT>m7)zW3)s+jmNAUK!XKvJOT^-QvP30sJnZkx<|K?(6RZNZ
z&^WkOA~9Zgmdgx at mXEbT0s6SmS}AP)U!n)Coy8M;d!pRCN{WXdam2c at eBQvOYJbHP
zw5cYT!@<=%-xUFexxQv>G^TJIk8QB|lBBuNkHO0K@(JSEIon7lg?i{GM#YjFF67^a
zB}KB1HuALGA=vZDzC!O6xPR!5FlQK7?7kq^!InVHEQITsy*wUy&&`)rjc(`WY17H$
zuzGDJgc9~ZA(viyIDt at LiCk^I?0<q(Dmg(d4hG&%K*#TZX^ECSglBM9#M>Tw|A1RQ
zHy=(mXvJ2DK|&&DBiTYk`$V|q$R4*?i7}L-C_&QVxq!*2^nD9aj`a=X4N~vT#w-z&
zqoyY&PO+Q&wgei)#^~j6IxLyS{UEC&OB1wM6_uQ_w6|AVNT5<PHco#6BY$<XKw^qO
z+aPGCubb><CL#LD&s6H_{bfpJPdI+KxDMgqUz;i`7WARzNX8Z8h)*(zwR~ic`~Kov
zi9-0*x-axu689f9yztq at c&(Q_aFO1Tp3igenEkSwspDW|1eu=-#LIE#^^kiYjcR<s
zwLo=Mz(Y~q8W}eIyNaZ!aeoM~HlNOnbSt?P^gv{=V$0z0uu`_Y%xin*;8s&X5I>5U
zhA$S-r0eMK5r8Zxyy*n(iN+9^l^v=gUMV^e{)t=WeU9PlQ49>z>^M|>FIEjEA(++*
z_<m_Aj7LGYdlkek7JxeLz;ujWTv?c^nFp4{?-tr<@nKDs+Ne at 0IDeo*wR>q^j$<Ew
z*!5ZwWFm1gZg;^EWAR<#;WFLP;oFZW1z#yh64hoz7MrB};!8NCdrMdXj`b%Z)YGw*
zSlqF!JvV882n6tQ`JSStyNcD<xPdomOP<y7Lb5+twS|H5EZc8qoK%GW3;gP69xO7<
z^LVSZyA_plU3BcIR)5+?giJPxZBB<xP;m}DTn5t1<E0Dc02)&%xjzoK#TqcZ8iX1G
z1zf=8gdM<-8Loq3OiJH+VLBxVE$!2F6h6tK7CJ3b&*%{SvtF+nPuZ}JdlUkO_dBLG
zv;x2`1tyw5S>^h+C(M;>5;qzcAKDVp)k1`0_}}X>MJzgh|9^oV?7%Jc3Iu1(oEDz_
zu(1BRp`QeOfEJj_=n}6Sw$L4avnVoAerJ4dj#k;2_Ic02B1c*J4J>QvkWKe774ukP
z&+NH|>iPoo-Jn5qaAw6476mfVMDNU5J*A%tk9)0AI_3$|><+<a0$;1WMx?m+funr>
z9s8x$tf8Y at rhkuwc7>M;)I44=g#JeUla>4MKaaRw-w6HBg+F!jw_%tmp5YjiM!Hz<
znYt%?=41QWzL}BvCuuc5iZ6!f(zM<1Qx(015?WXl&ZxT}aZZ8GB at 5ix?UI)Y>x}{1
z!ZvKz9~)JR(vsQ}Rl62js%&_nvCiULU-Bw#ybP^r;(v9!C%l-eNm5TXD$aYzDjs`6
zrl`1MFX=+CNiqEaRb9_t1_IHRa&i^J^#J^vubIB9&4RQPWUcBtb-e7#@D#kGf0zY$
zhyVE{ClDaoXgUVli^J4<WScHgCl~8Aeu5Uj9iT9zHkp}vBCkhbsd+BR`mqkIKkY$W
z>*QPngMS*wMN#$c00EUsgdi)?lckMB6wa^+zKemj5>(RslXQt~fS)`_QsK8JA^5Xv
zuk2%L#c8Dwo&Iq$tJ3tPQV^+mXT2xme64E4g9_P}CjeEx^a^^i?Bbde7Oj#QOEAp5
z<&;%Ynx!CT(uZetcr{-pFB at JJ_#XWfN};tRet+#4dxLL>5YZb2O at R?)TnNw8k>rAN
zp}kP3aw(v5HIdfRjaZ1|0>CC){AA+Ez;}_V_d?Y2-_Y|ffx-NGeDMw^TRi>Pqj^-I
z*<kO{MI@%wlT#ugDtqj?g8y?=MyNoR1J?AB?~n6n=Ct`PTo at wWV+JIKzhyBhlzu~T
zaevf^=O45p=8 at anqk%)*PK*Z$ukiRDlCx@|naTBEDA^;+%oFCT$6PIkD`O*_2-|xy
zm*hS=0Jk*?i*1rTMai==$5=Jj?Rp&++T!j1!x;s&(VP38V$n+NqdQblIq=-#n`@jm
z7`55MgSXgmazz+)$d)-(F8Vd)3N8Wj{(o|>zA6yLlS?9K?Ug>f4CqBF)LHuN=d=4u
zj&KwPyG7BzbFVwg!KL`qq2WB`zJ&+FHnE>x*dgL(zUD#ZH(n><lOz!}<g;RRoif+d
zT8?d6Iqov)ttpVd$ZoJJI%{RdgJQIK72^ybC)z;$>A$$G<1o1FVkyaK1m#t-%zuWO
z#!@P_tzq0dH|Le%oa|xP4i6QQ;F~3re$fa~4kJ>r=S`;NI(vQ#!S#RhCU&opWZCW?
z&aQTNwQ0>WeSY(0t*&20Fs$sd9Wv_PrdAPwmggTbh<eZfSx<SJK{x0~;#O`czz}3t
ztzM0z_a-0$(_;Nsn$5nY+jqyZJbyWHTSeohRdeKD?ErT8R%Qh;oXN3uJ~NP<is4hz
zLB-&U4*6^@e!dzDt2w=%ox=QZ^vM)M)v^>g5 at v5Pb;`e4o5{}==$Th!DB3-5eX2ep
zn5hP{y-#yAE)|xEDa^??fIyv6^{j8<)AB<dzj#6rvlAzsF=gcC_eig}DSwpJ<jxVm
z$x9uBZpkZRPU&QS38m>DA{j~Z*@-Gt{KXU{@qAzDQ9qC;c0BqtySRm&CF6y7g1zGo
zseYuXFShE3VH$6yg0G_!B!~?!)t;BYAG`M|kS;JB*5uwMP2iW#gjU6H=t6um&lVT1
ztre6lkvza;C=RnHy)I4Uq<_A&CicR{(#<SPdn)t<UKHJST-yKlBOJ{Q@;qL_|HLMR
z=4HaGMf})3(B^mB at x72Hc+K7~2Z~B(fS}<&kVfU<H>o>N-B5GTYW^Yh@=j}b%&HAV
z!92B<Dx<=Y7(Q)bVA4(huP&PoJGH(Sx_`+$&Yv~VzOM;1l)=|+Q-4&+a_s6gP3rnC
z<s%VQhhfLL<r2?~@%rRB&SiL?(PM7)YBE7DNm`lPS`$wDIo&Ss`>bvYj63AU^n)oW
z_NVz2Uo95`2T|uBrDY}r(#)ZZS;^+%qyH4`#KJ#1ilE at wH-(X at OShlpX*a%_6}iq#
z=-IZIM**Nb93_a)Lx13yIP{EnDj`+YqhA7 at M5cZa@v;^6B&1`xBeBj&ZJLDJ|JbCX
zB(#hC5LqFoGUFg8h!=%&azzLf`^&ux8alo5?hpX27W$Q#dS8lta~dC!3RmWQ4*{Pd
z?U<F+#n#(vk5$Km^LdFw)VJL#p|;l_YqfcxRT+xKzk2^H(tmoSRRsjlnWo#hV{HE=
zbpS}7(|V_)apAWBx_|nkRtnh7A=4~*0S+#F^4SOki{L;=Y30C34pjvtpJo_rX6 at du
zH*teemUDYj%HZgw5t40{vm$h&!dKCz&r(k*kjaMWP|ZmY&{ke$^!WGhzwAxpCI0Yp
zB+ezWenn+SZGV%vkx0}7!HGiaM2#{90dB{~n~G-8Ljb2;1Y?P8;LMw#I#GNGjJN(?
zW6Rl<N{;1>WR-Th*+1gM8L+rbLP}b#pYGITCTQeG!L6Pc9|<Txe)zZgZ+Hyl?x;8C
z6ZajcxXxRK=t!$PS}4~FcXdtY%KjuwUex^lN>vf<zkg%$i}^M=1o-Mw`(5p2%s)UK
ziwC<^4}D6UrP^xjQHx8BRoQm#uUSII!tGqnRD!fju4a>)`Y#1YfqXG!!|d>jiFrq(
zHEW6b8sKSbEV$Ny_}_{GHE^$9Xyj{a at +12x2L))MdvZ7|JzE-T4SRpWZ at 7gJZbHWe
zo7#JdMt{Pr{h(!_iq48B<9l!s+{|m_O<5>*5<jM2#vqxYz{-EEW(&W5Q6pW6BYyjf
zlN3OeCc20Ls-*It-F6j at R9k}=b8ArYS&3hE8QJKU?V^w-Wytf*sFX7b1qNvK$Bc9{
zw4s}wR*vp|M><#rhdst%5{189rPy;M8(4E+&wu=$xx=cHCA>kex<FWZ%doQfbAKRS
zyW~{j;DWY1PN&_ at JKtxx11;3uz%&-X-a=+l8rP;GJ%=WY;%d=ml~-dWAM(fyaeN>u
z*Z02N(oK768ryxFK@~V{52CfSYl(#9{Q(-?>B>Mb=ykHXeRaxe7C*Cc!a4JGjw(5a
zF at Mz>K8!P4_{T3j>8^zDzLT%b9;Dd{o at hyYpVNYH^)=1|egXOd+`U6~=ZkJXlLAyY
z1)(CUWdsS%(aFdd=zkOJQ8HR{Fx- at mfDR60`Enu1hjs}N_s<wMs1e}pli;OBVlT-c
zoK`Xd*SWhl?XEzJX6arvK!J!A8A!g-jDN?b>vk)T6p5(@z~M5B%vqOO%SyhG(_-&)
zPS>*kql-ja3NrrN9<u at d3QnANA&(bg4CJV>wcMfWoa2_`%o!#uG21Q-u)!Pa4v8_$
zchtiSlJkTHL3o7wkBV7V$<i$9MXb{A`{F{kaoexEBx09K5v@;1Gvq)sku%Qx8Gk)y
zGhDLOajM4B&0izDq~@sgdfs~f*7ev>=p~^A4nUOC=NIHV)p$h!qMtM#-u&KLO6nFk
zJ07A82 at B$Mws7i0YMlN1L8+}yt5fXsfcj%h0?TRVWbYw<vIQ?U46b^KG*v4?Pn>Bh
zrz0RPq6;&(nm?ofUEk`?_sb{~L4STw8&MjlVndp|gB&|R((PS+65l|;(h&Q!7ifN{
z=nxE?Ojt?#I&}SuV5!tT9K|hWP1%*bLRct^=Hm}Uxx^iZ+0iy>rV-S`z40IX*u+JC
z{A~)!s&R6WY|0B0Fi3Q}M0H<Ld#*~MvIKqBg2tS<7QqZ=I`Wn1Si}R94}WLsGVT8r
zEQiPa4Zbz0>1X#sYc(@3C3Ve_TfQJ72%wQcTV`s2SN?JAjXa0J(5)KsigX85pHuSg
zybWlHs?0-tWdg7mrNMAj4#~$$R<^Lt5A;nM`HxY+og}`%Pig*7C)fep64MU$P#S<K
z7-uu$7~Z`vQDk?W%{V7<_J44kj%)pG7l<AumlI(UjUvVbS#0M6i7E4pB6*CdkM={P
zzh6M{OwgivYGr?!T~2GBS9P`Zf#-=1J1}0<qBlMdWy7!{Hy!+R5IfG?a#u`}?qXyg
zby2UBi=vo;JWLdNl^sdT6fDU$0^lyGiaj$aV;|bf-MVTZs!Kie^M5j_#i;jBSs1bQ
z69q9N$m!N|@h;N8+-nVH-UbtX+#01sVK|HN){JE_nx;d#(e;X`51baUT7mIVeO90+
zgFfm$aMj at x@BXi60FM(8Q{1-4Y8W|chxIu9ahNl61{z5Y&2&xNwZB~~uY~_}^9S#1
zpB)K84-yXGQ>wVb9)BF9UQMPUnjFNA&m2jcGc3u|@%CtOsqm^#l~u{Qfx`=@PK`ax
z at 7b&lceCV){nf**Ko{gbR at Fmw5_o#?>*i<>@jxh7C%X9~Yj7Uob5V~SRO<?1eoVpT
zfU)`}fg|HJ=~1jE at XnyA%8C<W3QZ$5V=|^Z!XhrcnSNBQAb)DcH?}G7PPr?)HTnTu
zJ{Gh#oWDD-pvs~u>snZnv>CAK1$+)en=Eg3vB%c7g>mBE6jVtZ$$qcL@}qlYn(w@%
z8O>$V!D-~?h*$=6_2q(wJnN)_lr)Y_^8N4v7(9O0<apL+-3|4>7pcfo#f9^n2sFrS
zZk+c%9zu@!uYXDr{^`(WB+w(5p%jm&X#JyYw%5 at qHNyAg%W5i;RLAP;J9)a-jisN^
zC@~j1p{V%y^PvMTLeWo-co^Jxp-;Aem*rnbhpa)C9&2b=7RnnVSkKkJI3KjM$n*<^
z(F3`ehTsLPu78IvffqgA+%zXdBXEgOQ86!>^5AE}i+^q)OFL33>igcOdY%<Ko$G at M
z>~+k+n~!11e=SkDQq7>JMu}v(%4vUTyvx*x>`4D|;lRVy85S_<q%GMlj6?af8}KEl
zUXDRLqB_k|&CIBhB3-F(^9fM}QD*l+-+Oa{#t9Mh#Gvv4yl+bVYjpCeUBUkkE;2K(
zLcU>E<A2kAGY?*GlH0GuU|Gy7AM_!Y*{V<Mk#YR}fFIL2xpOI^!QQ^}dvDEmLoGE6
z2DZ&?90_6NF>&QB8|UEvQ1WkN>SekLHoS+k+cbipOH%#66tLU69uPUy|Fu%-eHh=H
z_(w*adbpJ&Gvh4FRgH?Tn=|a7tM*Xax&i#ocz<mXrHHz-rd(+E)sa#fbT6a4kw*rj
z9zD7pBN;a4`65k#oetGZL9G1{)L at AHqdkf?vqnkZI53bgPHif0OkDM#Z;-n2^k`|P
zuNz){{E|sgLS)NNGE}40P`gHF7g^fI!5d0|G#EbLaBu>+ztuV=RobNOMB1_T|FCxd
z(tm&0dGRFSIff(l`~9pxx)cn#bee?a&9%i%I^P7lw8!wD0Y`1cY%hRF-}=06`tLxZ
z?MN0H1hN-FESj%RC1$VW7zJxEw<t|HqLFJa#*hr!mYTfDV!L$I67{?Vrh!5dARbs~
z;}+<zxJx9%t2dUW_G-3ezO$vTQbwK?m4B|K;x}w<Dd@$KrE9M#KktFF>H*b*pGJ3m
zfa6O+GpgCg+hnO<D^UGswPD at D(yEEMXF=UDu7%y_WMG}}G~N&ztatCD9sfetDiC<Y
zT|*==c~9m39GceK65bP>m8aXi97;1#(ZJC at EIH&f{JOEs8rAwkCVxjiGq1q6CV$Tx
zq!BImpE0|%iZLzgG$>n+7oCXWxfxLtPGTw89}15Ck{fnAQs!VdTD2}<hozJ1Q>+|m
zXfku&*$b>+-<Cmjr5G{R-*T6gB}s0?Ih2<5W+Ql5I7t at EK7nBgg;HbeQ7bV5AU8xV
zNozAXbCc~i7T_}icU)%L0ebCv4u42ogD#i7GXgP;mjiZ2qf3ds?7ru!4Q~7#@=iDR
zL*sN+ohpk6o6;jw#Q6)uH7z$I%pc*r_yno0x8E(rRVAKm=eub{@(MdFB#n^plRiht
zy~tYr%+`?^V-T?}Tf+Tm+jH;)Xnhkz at 5=4pWXntY3aF<nkzX8w<~e3VFn^Qm|L}fo
z9Df-1c(=jcCsRefwvbZ{KLrhhB>HQpO1()9u{&Qp{U)^#X*g>DglwVNmd8${$87MF
zXCq=K6ke=NQ#ly$$U%fWjU~qP!wNx#jNBeB3>8PlD;-~gs@|yl9R1gf5Bhh|vUAFt
zqe>%Wl?GEwc^ZX5^U8y_<$uu7e?PMZ`X|?P068#dJXv2#;7^(3^ylYO0VgazcF at jJ
zAV=%9p at psv`iOrv!vYQ>`sXiN=gc#ZVz7S>ny{HY at Pamu`lgAahMDK4xt)gKsfNQz
zaQ;Y$?`AExeh4d$p&V5!lb?gitg|_Fhrr9h1(S*Z);(S;7F(g~34f at Zva0c6v2+_x
zSGp7 at DOAhM4$Z19x>BY^bBv5-<LpoXh(Q&WP>m at u2VRq;x>uz+|K%3M72{3KcaCSH
z5uKL53<rK83TVw9W at 8F=l00tBCA%#<6Z2{9K>+{qiGIt at df@rER=JqZFBe+jF&vrZ
zhI+=6e(sLC_(#_rpMUp1V?y&cn!WWAO{C8(@9>xp{I$&PMEjCBJ<LU~aZ#e|dt}-|
zH^oQdIvOE(xUGsCYvHXRleE-?*?iozJCV+;*(+Ys9uGWUH=dc7+bK^e?v>|^iAp!n
zNZ2p*p))M7qF&wNY~{?~2hoM01>xg5_Qt(CceO;AfiQ*?uYagZGW$lT!M;A at Y5T+s
zi_vCJ&T`x7eLIaaIQ3tj%%vC7==S-LL7`Ngq-yCzy?%IT)B)tj#v56b6ZtEd$lciJ
zq_#+hi1blu1gefM7Z7|>jZgw)P2S67iALC?fahj8y_HzlAGij_wnzIzlJ<pe-9ql3
z%~`5a_$M~yU4Ojk0na_O(go8-Vj2Vp)A3fqTrUu{^97V_Ls4}Cw(Mp0o|hf0m6^An
zr2+FFx{WB{myiCg5v!`Jnn$}c4jKO9EdI|fW-%+!E#$JB_CCb0plNFKo%JsKYH;FB
za1QmJylT`EILsB6kV&=dDxlguh`+B(lfqX53aI<uO at ADJ>x)7r at e*>{#D-~e2tyo{
zisF8_1MNJ;=Q~#cWBjvx<E?#ZJfZ;X9MSJz<xN{s;MjxK8uy9eIwhEVccE5?bu`^j
zX)h^5SyY_oxK;)?#3Q=Q>kiExh;Ru*C8sbgWtZ4oac#`Xw>pgkn*p at CaGUV#6<V5H
zKQK9FkADWTpjn4?7h$eWmXWEq5IhG!+25^e6NTefG*-&b+vBq~#sUY8AjLRUwS=+B
zIt))yK@^2Mr1oJ%`RA|pu1Pb3BWa@*?}j6pl2pRuTAhfh-z|>7$>uAoTA4r%Y^7fh
zmuo5-9QQu4daE^5z}N%H8-EcVwJEUVvl|oa&VO$H#m=)@W#BJ2f@#rn7wbHfBn>66
zTW$o1m~+9P$8XXMQ^{)N=z+u;YSWJ3IDY;)q6mpJ>IBM5&TSY*Nx+w%{+y*`;SRfr
z)TTxZ4Dp&$%M5p<wO=7D1j=8H=x)gl^jm;!MVj3Ah$LMwwO6_W)lMs0>@sQ80WOv+
zRevnv8)F0jby_)<TbG(f$d5(va@}w1;YdFj1$GkZv<=|V`spjCgw<#i!PYQIwD<O4
zV^8fJ{4xdb=3bob8?x;}g}&uDZT*ji0RDHevaJ3Y)azgQHf{pVki=vjy=~GH7ttE=
zj?p1<t4;1ixD#j}^kRy}0~6rx#2<6+Qh)r^JBK#3eM_UZ?j at 8pWVI}6WBe9|;^Jc1
z at oC72f4{Du_XEF81CrMqJk_{xo6qJ~J81i#$MsKCW5)(GBk1A1SA$5)C^5f>jpH_#
zMB?^x8QkCAN+L&@Hv|(Bp)TT(9aZQl<tG7pV7fFzoKZ5#L^Y96A#LDs#+P|{cYmA<
z-ZQZAi4^yQtl511TfpAu8!`LsN@^UiZT1?@S%U9bjLi(o(CI?%fS0L&+U&~_!{$?E
z#<n+!aYG!6ZaQY>4cT8%zMdwA!v%=CES?41GNoaOnv*7d%aID+1ktncFnvEdU+>7K
zs3zFcDJk-K$4CHt*r}`qpZVnmR)20jotBxmF!cou1kZ-W)$l*$`#{rx{@`9W+UUP|
zk6&62#2WN9lq|D|7kh8$??r3H9-`4(-ox_#>EjflbP(Q8-%F~s9(hibJZu2~?pjx>
zq>+nmBwIpw)?TQ?eAdbPI5M_XIEk!L`^Gb at j;J3g0>OkE*Jqm06I-<x0e|8QFSdRX
z6*)!SI>;QhEY$|lnE$fB&`X^HN9D1+TyP_|Pwgrm1GI+~!qIYzb7 at o?CK<ktW&l{A
zBU>rsZ=>4=p3Z-K-sJ+U$5~ShSMyGQsmS2woTuh70bq5$hkI%&z<?%>^UJV=?>&gF
z9icceKC>0=U%~AG^A5W=^nbIt)7}C^&=Vb{$^W%SYF{G3uV7>r6^*_bPBXUM3NNYB
zs823-ngIw-%O;Ekz#iC+lr8+A9QwrsJ;_{KdFDYF#%n1AGikG)T>QIfDLVNQ at fnL#
zUmzrtL^L$qJa0Q=fuan{6h$Z~?R$@dr$Z0SX4IHf`_p+o-NtP~$$y8tF9?2FFs*XL
zfS^_WsNK&VisP<$R at MjDEY2&s&=J$s?&f~_|6*cM3=>&+T22A}?yVpk>{`~NeW-=c
zC<sPhf^k|J%tlLG9|)g at QXN&~!e(XHp5XuDSj|MeFuUR3C3-SmOXa|HdpML=j{!3-
z+*<y%Ii$u5zoy2LQGciU%;Ww*7lXn8TF9RLhFt{mKfs^RbZLnml6pQ0+1wey0 at R<~
z*E>erkPm|+U-NKSG52AEo~!``VzuRH`bx4bbO_}Zud8KwWY<ucXLZ^A1GCdr&oNLe
zqKQe5kzIBEg&1td?38QhA6VNy31^eJgu<2>qi#yd%_MY|aDS6xX$mn=()|R=12V(p
zoSbL*QjMUQ at _fU3A<R5*HK)~KRI$%GQY4(XILi2d(fH_Q%_&+Ld2&<lAxI*g0puRo
z|L&l@>I$v#05D&M-}W|)ibz=pT7Ao!6;Nz|B<UyE0?S$fBuS!gI8~2)k;xQ{2$E#A
zKEZ)`{y9CvHh*v=EC%S1O6(g3an)W>e;H=l9Z?q+ at JP)53;!!0k^OVL_h9FR@(M$$
z?(RYe($Id9smID!o`>!g?3rN9Wm%1#>Ie?O$nSIAUo`YbIvYC0uueo)Y}_o!;%bHQ
zFwqGeF6qIr<Z+xmW###Ln87d6c at Z$o%&HzvmmineNq>P#sycdi2Y-P4{B$ap{`u7F
zI}uh$nnrz)B36zOD$JdjEbV|_2&78*UCa0{Ea*tLBD`Gpq>xi at pXjxyILWZ!GmYpj
zcvDz;Qm{kb%At_tH-jC5J|I$Sddvc6y%BbDI*OB8j-+3LzbtH at Fkm^95{ethW87S>
zxqx9fO at B5?qKiJ2Z*!*`XmrX_Z{X9>=0G726w46sWtI2(y!>$LK$$+?tEF!QU2KB^
zs+N|%luo$8Lr1?|O-cbt?pL#euW=#uCCFyyh28)8OD~KS-Ov4QGZw0}fc`tj74i1@
zlRCs)@(kuLx;|(mf%$JA^Kk1UTmE}Lcf%3m{C|NmWE<yp%P~NYE3vhkt`f_=K5r}Y
zG<Gl$^)~+x|9-9)ZseLGVpESQ)O}hyhL-&5G6QDD+dw0{xutuktk3becfq9TB|TuC
zVVy0MGcf`Lc>o-Sml=5Yrnj*dS*PAXx!)r2%B-o~N_q)M_ at x)jYFO6ma{TOy*&Tw1
ze}54 at 2V9&wa&k{aRqm$|mhX{{iW5X35W-(8z}k)YH+~g$X_vPKOQK1BaAU8)O7x0~
z$M5oVKjR8)#wNL0_9p-;8fVW!{1Np7X*9*H?~S|B1EgW<z46FWhfes@?Q`-DHs6s#
z!O;qEUygO&o0F(6fmd(?xWmq)=dIa0l7A8!R%UPO2U(&t0bu2$M?8qPeNmxn5%8R`
z66Eq#$tN<6Nlq38hRby+@;rnp2h~0bP64z+Jwq)yv`*W9XJ&hVIMLj+?kN&+*$9Z1
zMbb_`Ej)Wck6S-A0(Ce1#g at ygsnMToyoZa8{>;8Gt+I(WX5ObOyb?vIW<qx}%YWlb
zKNeWy<f-Q5iNHL;!G-Qhz#J>{*+n^MHzo<Om`1~vXg+|BqF8kAjumG;o1eh=J&9`b
z<MppA$&O^$7W!{HV;j!-CPAr`xD$O_y at -NWIp5YqejYm4i>Ue09;QEh2HAnul6`ks
z!AwgPe&hjhI&)RS>#cUyS;#q_0)J7P4&<Lw$A8^hD!$gRtzJa6E+w_nYGw!*Q(W7_
zMw_I{GQh>eHGH(8d(y`iARSD;VZq6DCfK?JFARB%REWr2o|`Bpfq-pAJP9u$;Mph9
z57U=CL(`S#57P8AR at jipd;HKPTRE`n+S~E9V#xZo2)nf&8)9}#jX7<4$$uE7Gf(B$
zpi$m)2hwxY%Pw3Ba4*P!u?qt>OWPm~6xigv+I1--qV$J~ffb?FTNANKY2~v~xlGSe
z7Af%nf`I!6y~FA>b8q}CPJqY%$OX6J<ZRkjldt`1A(1!<(Ytduia-EmeYI95T^}7R
zN7ITEfwJ3$+DKHZx<No$CVzFG;zcrqh(|xjbf42d1#!iVK2nBA<d+X*s{t)qW=I<*
z`qa2TI`Yxv- at rtr!%FII1~p!cC0mDrWf*FphU#fP));J635Mwh%^qNK6khN-8cfK5
z4hHr%tsQ>~jP?27V00Lm2iiDM&HQ>$Hf$S|F{6SqY0EXh*~NO;C4cY4+yX$%^)6PL
z`$2-o0K3d%C{HCxaWQUt!U2?NJ_nIaAdtI3K*-#*tOfyA95QxgsX%f|QYjP>kQQ{7
zk)2KI57#)HrjRb$hEZQJchb`^r!C#El;bI**c5N3lG0;p?c0G9ViQORwJok6TrWPU
zQpo8Jy{}4{f?~;ke19<xK6HUplO84@<-;gdE0`sEcnbl-x%<e(GBE*g at z?B#F3L%(
zx)9L=yUNmcSZXi=%2HdGFTm_5Zo-26|7Rc7U=-z~l1^!mE9cE2LQ03v-AA;}U;$1O
zMP9VaHgF34Q;e1w38?#o15yr3nFbDA#3HoLf~RQHhaPp)LVq)g!ryqVsB|&gWz1uD
z8a!KVf^yv+?bYP16b(oCC0J0bnU8kUSA7DI&|YM(dR-w`tgMRuBq{!Rf2bx~enX6`
zkMH7wLnStm=kA+|HV#BIg1-e$5kmK=-21^(0#f-PA at gF2!<)#^P)VLVW?-ZX`~beh
zG({5jD9eoOPJe%>%wdvIt+JYCM5?!5FYc{Yk^yLw_gLK5KfQE5FZl>%u(4z at U(o9g
zrAV{c at _K5dn%rPp^R{&;kHUqpRFgKsl7F_wT5Ur*MYUz)29A`jVr^q|6~<0PjGb*l
zb<C$keqau}?_7 at M%DI-N&P_3+1qO(K*ZB5VzswxiCVzP8&g**R?~}y^*FUOIjOZz?
zvv`6x6%r=B1j6i7Dmt$3*X{!7O8y`2tifb%WsT_(K{|i7HrsSA!k5}WNhsbvFBzG$
zw&rjMQX-C#`{=<|s6t&5+B+2A_FE&c5elPymNJGaX&fB+M*y<4UxCS at x@`8IAVaMk
z&dO~Bc7N2h6V6^5yqv=6QfNlB%G(p`wF#0Rb=xCrUDl$1U;Sg`D*)0Pky^2y3YZ3r
z;HFL?8J-9otnKv#&~ig~qw&K3 at XLWKZyph;8o?nDTHWKaaptxsSG9WJb+bncqbxm*
zX|UWSoegBUdS5<dMz2HwH8aLRune}&1qq2LHGj_(QBC&1Vd5+KN%wWK7smsLZe>G;
z-HXKN(fRzUpfcuaaN$C~6%ntAM>M*ZKONYl$ERn>z*WVH6+dmbAhTmpBnP>(+Xj)D
zr+lR9KM)xS at Z`24Pxc&Oy1B8S7VDqEBX*b?Z at o)T{>N|x*DmskX+}DYSbOE0e$8Yq
zUVrfILYLy6cv8rQxt5=GK&Q~5z262hyq9fyl0=yxAnRmtJV;~?v-BURjBkK9{>wM3
zJbScm%Tk6&(?Gx58>QCMsan_4iUA(eT6Z8qM$0T1g{QmpdNJ|ROs(`0JBRMsBCUB<
zg-*hQZqa9*-wJ7?uMsd}wqJn}zL1~uxqn=uuRNo!2SN+2qfyz=!SF6!Dd1AX<PU7<
z`-qcJE;YA76tY2k4}`r*Br-q4H%LsM>7$fh**v2H%QaRYvkcIk4Qvb<zB-)dm`jlm
z2ALyPUCURq*>&!vgv{-tg>Q=<Y6)4xzw>iiRhFG{fMx^{=|hIbgPtz~O=Ezl_<tS2
zxk22*VO1V^1`@7?XB8>yhcJ2}R5QlcGN!2uQ;>1qEUV5gWiDa!l1Q9ybl~cKX*;&D
z`yGZR)-F{$ud!;*{OlJ at vC(uo2^^>z-rN%ZqI_{a_PweUZzVuPY5bFhLx}V!#9Snw
zWS$4}b%NOK%g%0mX9g;*7uK}ZHGgve;)L-OCVnpa6rIP{;|d3fi9)1nvs)E>-Yu%{
z%K2~^Vjr<TXw0}ysOEO|!AfDKebAfk^37uTKh^9eGNMxr at R7>;yi7)P4)3HDB7-B@
z_R~+uA8P1=%UQ{4x|6}z#f2@&lNPBQO6mM?5a~J^3U~BN#&~GcKy)6S=6^fmX|{-1
zki{au|C-3_78t~6(gSlIv3Y=bMvD18;r`>hOPO!b@{gWvK+B_b6G|!$ALnLT1w!<N
zQREsP>c6Z at snNe2);vi9=3aLux~X{+^KLIbBfoS9`6h_f({t29wQ}r^qwh%G^}cz#
z`!uk0SacmgC at G8SbxSvGRDbft$uat^T8lH}hu-zj&736Uy2Eu~(2F{llT!bw6w`?!
zfXB}}hK&9Ty<l$-QC(!t*7?0KjX2MUtf2g+N0NeWtdAq=dpaJGa%*(MXJYx<uGvf8
zSQpDTP$X1YVAqTXZ$|W4>ym7~F%k~2uWQaG$9sI%iSnL+ at SUcvwSU8i=cvR3zFDh6
zQQd!Gd9qLWHssYCVVy1W+_~(Hi|UuK8 at BD;%1f|JcRPKKi4zlG9RdZlEwiK!#PjqP
zYJUhh-tdh>!&@uNTF9OQEhgGOn6ur>|Cy@}F3}h|d~R?@A!$>7NlcLv(ecRp at 2*-H
z(i&F!LQ514$Uf2Jr+;dL;<yw$S!Xi0A9xysN|k0QWp9GqiViW>1E&l>)zDN;gnN}W
zSy1~c_7`7SJ(d3Qk~n}bk6yQJ9;>1Fo^(UFB3Rv8!o*AC#kM^~!Ldb at tt@V6Wzfe!
zvmOgTJvuX?b53 at bWdgcVpHm~pT4|a|)#D!I7%TLr+%nfduzz6*ZU$rFls%U2QE>@~
z(eAs^_OB at J(o at 9Lh<1z5g}U;)OHh9iKM at 9D8TNV*FZ{x}fdv>JxgAa<AFr6Q)n_)c
zx)xezyEZW=Pvl3VyusjF-o;PReF<cCW~^@LYJ^<W{q~Jo*huGX<|ak at ZRL{=8)0G<
z0lYI&yuJfYEPoekaoFZY at 3Nz;HfA{v#`vTq;|WaNyj`_^8(fbOUk|_g|5{Iz&7ckc
zuZqBkEXh5B)(|!?XMy|?U_r`J=sCTM1w$ETxc;>C-gcf7#2#FKEd&Kb{*o&>4yHg$
zwYZ-oKW-RLr at SlDwjCfUtQmJZm3cyN{FwvqP)kWlq<?dakpBVkcai$=Mt>xrnqAMs
zeM-IQY&2FF)1xY~)Iw2DLWy at -@V(vXn#H`m+EhEg6}>yLHb7WONmnfrjc~Pxp?JXZ
z6bNTjZ>#-`ZWfqbvIjRszUIMaocq_IPXZg<a<C-)D0;iR&Nb-(e%UNv1WEg`zI8&p
z{=fbl`G4yaI!TdO3*wYtfT#T`+X7R&H{KI2FC3AdIeg7`&QRN=qf}4>k(ovAgi+fX
ztqcJ^M2E8VNCLM$=`1b{^BB at zvPiMxvC}8FLyn$P`GI-!=7JN&3M54!Y4}#!cxe3^
z0NUgK^}^-(6ffhLPVRH8E+t}xM+2KOn;=Mo4Sz=WtsxTV8LVw^JmsJ;D&1&*!-fFw
z(8>cvaiYm#)yvqG^CqlAvlY5$yHtDx(YhSV&{e_8Y$a7RSq-7x at dLQ};;c%wT42UR
zF6mYUxji_>0&ZifGDYjC_~q^?tT8)rgPQ$e;$e_4ojI8JGwY4H1t-+421L+I6egEk
zhJW?1I1rswluF9&eQIvE=Xk_y8sn1P#GGvDEG`w~HEIL#c1wP&&I)-*$i~7Z-=>O`
zMU8yqpFE7=QAB>^_hyZ-6iV5Nf%&$4kpx7^o^GrJO_lRV2H#wAQZ1vFlwxeu+_vP}
z9!9dVmqG#Dr`mM^0}|gc-T42qU+qD*gn#`a>mHB<AIZNpeV$Y9$O9RC|2~gX8Pou5
z(U#!d)HZTAsV`B>q+<)S?LTS^?({qdFvrg#?ZYm;hT+%f<gR8E!!Dj9SU0O)4d=+#
z!p;Ei at 6ftJ=JbRZv~Totp81fOp^NwXUXAdk>g*F=-!Ha`2r#l~Q3>ocF1^r;w0};L
zO4p@|s}r2-zzuE<9tK at xS}qlPo6K_j1Ad$XggfL4s%zq~)+O)!`;5r#;2BnKfX2t9
z?D*p8jux!0YcRG3+&a6vy<O$+X^6=!2W$m}sP++Rg6{MDB`XDSX(?Yq*$<Y$zkX#}
z4sFHFQ7Jw*3HCq=ZbIo$X&a7aihmVUxj^CNag-asZ4T=uHitrg{HI%wzVAq3g8v%A
zJdl9W^g<Or3`xRy0$ou7uT{FO*>@M2baS122D3V!S;5g=im3j;D1;h<dIh4uCO5bQ
zrQAsdpm_i*Z~q at k8ig~35_0AdjHSNu at CL91Xfx~q|HxX~@2XMT%8SM7W`7WHjFcGQ
zrbN)l32*HE<fkI{>)9e5+adG~Wi7WFDUrnyNR_@|QMW{N-zdI=c!$k2<rOUh&};mf
z>5-~M;BQnzlUEtY>iF{DsA_)nC*1_eQpO_LLQq014YpI~H)^?hBn(q!8_9!rgU^+`
z!U(jviGbX4Q1MFJ63o8RFn=MS{LM<#buc6kSiTY80<|~@lle-jT2Oe4cJUFc_c`UX
zgvb9JRw-?xP&UaX+HwDEu8Hxy>~sX}WcTm96-92)F(Yt2j+Qi-_ebW_0fwd(A`JfZ
zU<k`ibGw?a3Skol6sYh|CIDag2UohLOe<QYZhHi<oPPa$6pT~i>3<;YD2m7?Y4-?u
z|Ff<XG$%Z!xQY}9nZ}`qJio5B5uF0VbRxOZc}f5&_F$25A0W-_=e6oieYm~t^;<Vh
zg>phHJ at ghS8TpLcF0{|+|Lw9P{wGpc*kSUu<qIBn1^*|u1Aa=tW|*Y_RRSH+75ZoO
zP(}0_lB2M%Jc8c*xPMA@)Zw-HZp at Oa;ixSdt7M*p&G8O-)WdL3FCwV7$)c7_T&x4m
znjpbM8mmxR#LZ-YskzE1KhvZDl~WQDf7=&~&;j`#xPjR|8SYQ-82D+&xw*X49qT07
z1NpdMU?{0`tGHX{2MmO6T2%S9k6?Va*)SPDqk7|sEGTjq*nj)*DNJBrYsy`{tHhU)
zb^JsHjJZ*n<gx}q&|Fo>TAJ&rA2|fVG?x^SLW|G!E at 6G*(xvjb{FG(G?+yc@(l$+Q
zENPLtzgb6x5)u~_9*YvZ){cruSeMmVq0aZKTz{eJbR+E#S{zG}&fU;5LvG$;y1<5(
z77GZ8&i=t06 at R4i9#&*uub#yD8-M%RbYntZ_+ul-N2|YG>G%^)tCn!yFy}o$(O$%P
zFMG6pHW}8Z7=6FawBNE9GOEP#1Of#VPISI21Ry~HwIt3Coa(A4rt$`~isS6B4B+G5
zeQH;va{jj{+M`JQ<;v)?ZLNbf;GRf|rGa@#Jg(QE?0<P`=%YwZiot7n at BpPx;RU)2
zk-)Kzs9Ip}ETR~Vr&I!yN2?fVaF97JXck<(#RXp2*Y5_7-dS81aaCIb;mT16dw+A3
z6eK>88!b!Vs~Y1X#O*Sx!eCq32{Ll3>CuPv1Y?jmQbVT;c)bT%A7PBiN!KW84!s<^
zJ6>)vhJT~&lGp};IXKIRX)m?~<l&~y4kN153CM9?GJYxm54qu#*RBcSd1nAn*Q^*0
z;_<vPH-K?_PVFh^`b5Ah>$NMoA&<OBCnZ;clb+x|v?p1?__v#OiWlGX41UaJ*S4U)
zXU_F$9f1X)?LnsMv(kQ&nMjf at pj6poE!TMT at PEabWJv6qnMm4IdM5>t2tv}GK<kD6
z<u46y2L8+Jy0P>?0Y_EkM}KXGt1t9U>M6-%ap;vr$UmG<w$!p^{1TDIIONTxF!&*O
zsMer&Yx@~Y!St{lt`d_ytQR8f^<2aeyqNCWzA1?L(4*MI?gex+P`ZF?xduhx?{!*I
zf`7?muLofZ1Reb|%n at t%diKdaTW2={Im@;{ppEjV{s at U{t~^K}NmOv30k>o<>+@*W
zp at lpDckxk7=esv(HpDFa`nRiPt-c7z7^7aK at Xs&f_ZkPhlO~3_^U(|6wk8Vdjd4Dp
zE4sZ_UsB}901iO$zpEk<gNJOqp6>KFw6YN+F{OXInywMP3}><gqNUw_tyvgv1AuC+
zaH*67L(XiKb>-{-6T(V8hy~ppOaUAV9`)l3!&|IjLSq2Yp}(k{BuEo`VPu<{E_>EF
zWbM6rrdDb9_;Q75a9z41shtT%oICk0OyZCPreDU_7OzuS0cXaB at mXhN8-EhTgVg89
z^GbiT*J4Cj)4vTQWJF*1YdR}W_!N#jC12Sau-$-b;?FatsEF=V;f<AF!fL$W at U}=a
z2BMv=6XM3S`2LIIuB1jOT=?V3`PppdF~ENB53k5BFcHa%bkMrp;4tsU&FL-t at Hv-)
zkCJAR(!#0S-~m(vAA_2TcFu)PPTGr4mH>a&5KJh|vT?2PCT@<SP-u$(vTQl&t|V}+
z!n5;cZt{Lh`}UclmD%{d1{|4njEe3I+<L~>49`JytxaSuQKTN1^wZ{QG5&x(%kwrS
zc=!n2_$ztAnrneli|6KF9f=k_)2~jclWX?rw?S at YC0pDVJ%*KZ5Eavb$#X`OF4}*y
zp?X)!%!sm$p3JvKE6~Oll1%^MigH=ib-eRHn>a9SZI)k9*h*to+<!RLJfAC?qa51D
zfuF=kGMwTGld48|UCxl5iw5|WsAKl6tLWHItj?z_$^VGiiZ%4?E}ua&Y|9FvJ58Lz
z<c2ZGv#?t+K<>`3&bZAV7ATAscC3GBp>S}TrR$|nvavGvXlQ=({&HIZp-9?_JQsO_
ziDkraYkw&E7bTdl?NRqP(2bB!y?`j6y8Mu&1t$f~dly}@adFfrp}b`|;F!<UwWh_F
zH%&5f_11|la95<enpB;7Xz|Q at 9Wmm*y<Jmgv)JL1G)WwxWt`p_m#3oyOpbrV=4f{5
z_n93?QutwAOsCLA&Um46osi*D2<7`QGLbKJzT5|5C_-*Z{n~EXrwOFV at Lh@7Za31H
z?Nw8;dQF}ZVC2V9)$;zg3Cn|f(1y%|IL+J_Z-*(yqRGQ4fKk77__y)gvCsq$?*89$
z(FeGc8S{lS6qcY<XjszE!cc$eLhOU?pVMP^3nyRu90&OmZ)#$&1yIKQOEeZ@{{SZJ
z12smqcJ^QJ#0g4^r=1;pIM_^k#ElQb46vhSAe8d^yl&SntX+OS;1H+Nvzv;$Q6KLT
zmT at wegHDqHZ?B+DU>^h7^vG at BT8}gIYHqq|l|`}kKtl}tV1cu^P#S;qqETow=N$Rt
z=Kpd0l5);K>H3D%hZ04E$6%C%l<^^);=(9>QBMI;Ev_#3d~V<WsiGS$>?+YUiMv6G
zR6*J9%ci3vRd%g=JbEz{AUjYyZ_C}MD9liGrMZwHP<@K&!35|h>{qe{(7=rv?X1aK
zLvE(TbQWz^lVPw}L`;97hHNF{9j2X58CGC-G$TUi5hPW<0nA6}r$LU$kuqy({hz0D
z=RQ514t3Tdyw>*Cpv((Eg3ia033b3#a<|9DS&2Nt%(9n3>{q+h(2@<<VaH=kJAW*N
zsh=?|Wbs1Tb9ef44;~QKJgc~s4{cX=5CNotQeAL{pL|l5SmS?|tsCry4XfA>!H4he
z2%RGZ>X>+QY%$g-^$uR6UriQB;Ux%t0^HsL0R-CiNtc-ZN?or7LJg&eu553F+KAhg
zlZTA4Xjl7?ey`_p|F9i(%5yi`7LTK1ffuJ2WmJs$jDMPl$F``B*d~W#mbc{a at pcbs
zV9E_e6?@nY{3n0Vm4pYZdjx^G93<r4m$SJ4Wggp|lElgRByz*1`>CFuu6L{Tvk)-4
zE$<t}fb7IW!Rt|1paYkAmX3q_liBa>;LBp?7XH<Lrkx^$J$N%?7;0LUPKw(xz$!0P
zth_$RxdyEE at k%C1d0cx*SWA{y(W(eYVeXgdGf$o^U%-F5)4t>&DKQHKb~GN>TBK>H
zb`EhQFnN7NW^8+zHe#2 at 2p>%O$ACt)OS&}vPWcj7CI(8zzul*y))rq$8IM8IQ!`dx
z3CThn`XUn59p)e<H#v*k+cepo3X_2SFCBkl^an(*Ljss!z$VsGYl;S=5p at f+Qd44N
zm=gwN|J8p>n?zv#fJs%!>med#Jc2OZIa$Ua|L|`FplOg+vZeJC7`<(VB2|nhZ+`fA
zNa3FgE%c8T6BN&FP2BJRm%UG18_)NFHKsjQV3u$c>b~XPe7S!ax!wJ;(S|}NQ>cn;
zAgQU%ZaG@~RNi}FrCKYo(yAf1%?Su*gz&}kpN4-Q$%N^!L95rQ3(bAt at 2$M=HLNXJ
zi7pZ@=d at H9PtR!#=l7WFE(4H(Rl<J;ms`qd*MXbS{begdv1-~|Y>^Kpk~=ChUl$RC
zk!Ik=8j0N`ABh5 at kuGZ2ZD$wXd5l<LTQK?4 at gpi4{`OneM9|?uUU(==M}DG*P7uz^
zo-cogYd~;e638g&o|%)29Zs6oPRcOw&Go#6&yZX`#>sOo%0L*O*`+_A-y&+<fQ!)t
z!d-Kde%3mX at uKhfw%DMvWh2nMRQ at lD>+h`Wg#G!O+TCObmno5PQ698Hc8Dp$VZfCQ
zy`hS;Du1S8c(W(Swq4kzitOlJkXIbs{5O9a at c9dT@}Y=NX>Mvg3e+))CSI~P+UkD$
z$)C+XDfdgqkjtx3vyzasy at YOfL%|uyCf5|B8)CZ05)foAQe$9dU&ELpCAKR1qe15v
zlD|2d-kt~0khNWNkC=D}?w9V-SsL6-YSBM$nh&_p_IRKofC#9V;*#s9fLr{9Cn0}&
z7A3O&ou~gjVol$w;oa!!CGT<KOr6nHXc_92z6u8UXNRAE<mm3`O$+|K?D4(l#!N6`
z#~q6Q(fmG=Yqk(OAx*G9=><mRQ?x-NwJ5Y at j5}S6HvkybcEH3*i+C7ZJ5#Nlat0 at 2
zZ)n4>u+EW7Fq9wQC!TO=56d^d9g=@J<MpaQIr0LnTvhjG^&UUmQ`V4p*;q*)FgscX
zpa&E!j-}C~3 at s1G%zi>~e9A&ncSTwYKnzE$_M2ix{`csc30?Ajc_BXPZv=8Sl$TRu
z!0HyaA+FN;QkZpJ?I{YLimz*j%6DN*!}LbKB|%&+J^7RUqw`~?xiS02A|-!U)G^xt
z310k`Up6arlby#4;#eCc0TI`N_&Ou)Q?)zQyU4LN><A}-k?5zqN^)NPWikPOUGTW+
zB?9!FU-pfF3-goda_yflt40F039ua^gq`&#8><)=O!t?h?lXPx<-VzIz_N=3 at MIjN
z$o+KG<k-6lI<`Rk#>=!txuAbKZP|z(|FWG!LE|D7NwDDN03;Lg9_GO0K?VOaMjk6_
zd8HyR24l}rq)Wl*I%DM_*Wg|zn;7rqbu{(TBzcB~T9WimdWLo7eutfv7%~H8r(x}g
zbo#(15q!$z1T{n^@Ld!wPxxn2lAl4B2nPWY_z(1mxeRg}f at uIomGpnkfL>2?5o8G^
zc25FWd99xP-Ztdvp)M7|JRjT9F at XXZ(^8JQT15}Gat;TjJl732u|{fKgqs#N0hIZZ
zz-kJFE|tBZrcEL3hD`ssWIs>%*ol9s2W1(#fK%9mzx-bAXHh4auY_Qm4pBVY>svHp
zOJ(!}UEjz1?05uI8e4xyfjX1n0L>(?YFDLF&PFM2l3V5q6*Rdt9Q$=Iu8Se_XG`3Z
zMzk|S1;utS(YWU;1WqO(gZ7B~+3`&jawO$Oh~`SmmZ?8pQ}-4&7q{_uBKid{o at XM2
zJ+ at OYTpu+)_m#^Z4MfVeTGKL>1ygJNvRlQ`3Y;EpoDmn}tMPw;NHenLi=9VxG|TQb
z4562^t{l$5(HZ~B2%9#wz-R{3ld6AY$799gQ$+~XJ6cryO9S4S+f5&`980FD8D(#M
zdY9Mm^^qmT-ArcGqrh|u6ON0oh8pzthE8(@kaA0%k$pK)#}rF9 at OPW-Orm4s89>0^
zVApzg3|VwCGmU at eQPUd5)3>vJQt|sw#EK>Oq7T!|OX%`5Gzw<63?(|KBH_Rn-(|=Y
z at lsUVB&HVQ!S&Y$^s=i-cNo*o%6ME7DrGyocw)Tl{M#}rDgkPZ!$=>@7;rB5YW&>l
z!O&YKu^l%^Q=PQg>ZOaBk6$x<PgQy1S$>7e#!T6mp9X&?wo1Y1T&8WBc?pywcfv3#
zlBbceYJ=7V47BnYx~T%t5PB^w)v8c`EUt*~hwwlv3IQc%2e6wuEzmH%&-?z0hi{9{
zZZfR{J{QPnZO_f0*TO~l@(JrWU}In<R=p{Y`9X&~gIpD`Zcp8h)_->eI}kkMRa1Av
z!E6U=ZX188=3pXfO7Q#BaI>aQUUmWjq3wsfVL01*MP~Z#T3wH~60Z^M+Ywz+^s!TT
zaHo!bEG@;jNvsD79Mp;fK at +5gypyGcIR48%Z^DDOs2)|%M(Cr4Z;(#jTHMIOb3wH_
zL9I(yF0%^D`s_Hyd($h<lXaif)KW=z?Z*p>?d^Z(n{@O`6)+}tik;2&CdtWqy-E%s
z@=<j=Lz5A$W3C_4;9yn5OZZ at 5pPB8qN;9HOONIB^pI+4byEPQZZ+kyTee+Q&aJBk)
zx1%J$M-oy!zv%A6YbbhOZ4ItzLag34Iv2{ehlpu2e{80c2W1Ba^a!ZWI3xRK)n($r
zXn%j6y_k*mnbaGF2$;<JWF0lWmpLH$OIhH{DDTL^K=<}8{jz->?M_uiix3!?0ePS&
zmJR(PKFYlinYL$2TO6TvK>(0MY|L^EL4Mil6Pudvz}q$BK>bbYdKEgX$#b}cQ<b}&
zv|9ez1d3j}rsdQ-o|=;1mBB8+S at 94&>vn(bKx8c<Bn||$*}p at eRwW*UuMSjp$i??N
ze$_`uoX~BkKZ!Y_1}iaA4)d%yXHlK41E(w1Vyg#%ld1=mPk#WZros9JQA78j3B)<}
z)T=oZe$v;$b@>Wz^l9cQe$W(HBxhf(7k5ZZ!hvp?$A^w9;@<&xv?5-CAKIv~FVug{
z1?ogn-*j_$Og4)Q&m}Zs=>xoGDx$Y<UD+_P?W)TQ6raM9)8$qxOfym?w<UF<{XjCO
z2pH4H_a;{n$ZMV41t%@oeEiiR#-2{Wy72_RvUomC|8|}MVq(aYJf4OA#fPBlEzAvk
zm^o_!Rh+Tr at WU0#oe-$r<||?}Lk at r6**9EI_Y0N&Zh4vrq`6DoTG`?a9yGxc^iQ8w
zb#yZVrzMR1&ZGv78S2w=weV0Wa6BR0teT(=&(=IX7!hS;^bop#qIHHVK8yA;o}FC&
zqLMy(AOSXd*{>OPeyKBvG2PGmoz<#1#bHYvA0N}o2cGw3SjLB3jnNLD&Q5<gc}HxC
zmD`174$YhDMFzT<Hf!Fo)G%#H2T;r2(KhM0eex3qWygGur<xPE2j7^l8(uh>OK&8f
zawfw=W#TUB0Y;$@iu9Ht=lFtvbweK^kY9*G-N5z1bffL;RvHcIeN^g->yo%&JZNL|
z^pO=Df;TfkQ%DR78#qLGYQ}$!erZ%3I}i<rm at ndynf6R-dkU&2A?L08Ojg#^!!(;J
zh at I=uXQb+e8%1|0j4UiIa7E!xq>lI2cDMWAIYMtUNV2(uGvkuWuqs_bNn9ctpE6Fv
ze at g^CtqctK4}-J66gHkHY^PD5>o?S}8HY;lSSLQEwijUkECNm%Lr;IpaMqD0j8&iJ
zKm`W_&5Mq at YC*O=Ke`=<b`zVLe%51*!qYewtK<sx?b^7AT?*Mm%w1J<Z}v8_r at a{N
z-3IP-GUEY_UQ_m8GHNn+HI7rp`lPCBj;~-QF8(%QCY4e+m>g`jD~x+w_J%6x7N4Dm
zyhsQL9Mg&Y+&XqBLt%eiU*r#mC@#!L0UzTiKB=hy0AQ8}bAJH^KfuRRV@#8A0u8y@
zl984KP6i$AMvGLH*n2e`3}UTUKgBB<5&ZNXl2HUloBV-sXkr^lq7+_2?z6Ge$KnK<
zk8TO58U{fA%f<;L;w7a+|2V%#Mj9qS(Ik-CJZ72yP#Ak^f%<<}sU$hqdeKNT07wqX
zE_d#>lAuO-U3P};1!iDfDFn)(7wcki_UN)$;=4VKP%`#i&2KTk at 3dDR;ILE3?7isr
z?VVLMf&m!jInfZ^OXe`15FvpI at j%AK^)&qwfdG7Mn?60*8F}|o^+nDHI~r*UOv4pq
zEy+KS!^R6UD1v`6$*J!(3NWeGHMS!wcadd5YYfX8p$7<&XX%z<uiO6iof=r*2iOI?
z2Td+M{|J%+PQ79Muj|8aSZ%J02t~`}`@gKXeO37nBNF%vNOFwR5=QA{B37;dD0g8r
z6*=x?{pkzKADrsym25Zn%mQ+#VbsH6<VDIrG$jfYO<R8_-`!cIaRoyJMYlnB#**T^
zdNa(WBH0+R8#<RBS+O=~eu90R^~AR at oo~Dz&UFRYDXXsDWN-6tHI%G0jFsT}clcx2
zY4OUZShYXQ&QVvoN1>DO$9tTDaXrxDz%**y_CT-H%Vj(|-0dbQ3A1)A%R{@fdi67u
z6_|I+2`hh*>9uE_cm-4_P^hw^#v0DzY_(_(w0n;EZx(!(Ojc;>af9#K8L*w?vA5c9
zf2T4Q>~!qVXFvbPWdPbg8g<YE<**q~&@NfIHkx>jwhjNg*^=J02(x2v-OM9Mr{xrY
zq6PI0OVqG*^8L3g)!u!o&s2RUBabsf>GHe?e+Yk9fIzFK{NvW>86&%Re?P)HaFDIj
zPv^1jSknts9rZ3%r1ygS$Ln5OVtplh|91J{8n3!J&j)X at ih}iJ^&fn3OVHj!qH#*Y
z1)9CMyDahUxLM#<b^r!4w8<jIQyQN7F~c?291jMDZ_jtT;-b8T)r3+eCyb at 1TK4|5
zR@#3~wiy!~1&yEKr^VXisFI_ at Bh}<(GW@~>k}Ha@*q2bRSwSziGqC?p2p)F+s+t(j
z#YO|-m_d2oppKwhzy at 2^O2BFsZl)m_O2avUYNCjkM`WTOdD*q&tgSfaYRBl8nQnZ-
z$Lk!B>WEJyaRbGS^ac-#6OYYB<FX|O0&RapMn19 at 3D?=%wJHS-<I&({zzXf-owaJM
zeY}*Wbjp1~X at WRHa$C34*oRUTWe<w#{g^%5C~r7YrgM>WCdy0MRhdeg#Z`&tE1#4J
zrJYEGnpWyWuP5N+Oa>vYC70~nE#3LJw979u2o;B?aqq?F0<TgLv)2<;jRDGy_w|4M
zT3nD#gj3rP>guk?P9rq?*$U(A7_r;uIFi_hHu%ba8}<q&iU#yB8z55e<=xS;TqeDQ
z%)*PceMm!j!M7|UuBg{1>&-<7jQCUI_5aB5!9VszP=JpNK}z2erp~o{Nj7fYOnfJ&
zzrfU9SG(lS>kP>O&XAoM!mwsF1xtU8S$qm<IfTt1-A<2s>74()a~DXp<{@g5Eml*%
zyeq!zpZcr(CmnhfpIVCk*!Z#6%Cy~1TR_rYMd;}ub+;GA&VDVeT;TQWVn8P&%1I_@
z<LA2F{Qh8v)Og<Tq9L^VNTpy#M;)4uSejm0#<u%Y at Z1D34F<Y%Aug+McKLtx_$Z($
zkg^DUuM_n$jm*_xb2tJv(%Z^l+7k<R-m-M0$p19}2Se%yk6qI5%tHK-eohBLWX{r4
zihf0x!=miM6&^R?w%o`^u^lnH+fkc%!eFZd0u(S{d}+X3b7L5pYQ4uC6x7IL$Fv|-
z*MsQap&!b=k5F19tQai^HIjdC4HkaTjj60=`002VSlzbXOA<?#NMqA at r~p0&PVRXB
z?!?;D3g=O6LW_-~FdZ78okMTcu6B}D4LJqs*Oy84lOHRWva-dNdlg6fr$b_W-`_Rn
z>?Gd5UE#88cDOPI=r{I=8~4RMGQvRws%4Q|n^QFPvrglo++#>|ED?Y2)<e2-aLDHU
ztuqWvldleNO6r}S;Bf4{{I%M|)m`|kUo?^H5|y_2LJO}pru2Hh(&)jwAgm+DUBn{A
zf0hJ$q?I%7<PeLg2<Y&4%|!wX9GPj|!#7G%F{=2%K0PXA;^)*r6jRup^6=~R!M!cs
zkkt)lX9YT;9yj$(Cq{qB`i{?$k&pWo#;IUbb;nYy)AL9|14V1Osd_;OnzR?jEebC8
z;3;#~?pGy`&rffO(TmZ$TLLXL3&oJsX1M{<<`_83yrAfhZy5*0()va@=FRTk6&rVv
zX}og#yY01yUr>OvZcVx at clJp~vK7#wJDY^N(i0dzo#4I!cZGiwW17=|m#)%He_eGt
zsCc@;U{cUq1HPoU+|;sQE&TBv8<t*bTI1Y)N4XbA;$OIUdac}55<<HzY*%VzOPyBe
z8tcVjy?SQ|<w$!<=k0+r)af7=ASWwhd~ljc?i5 at ceXR0=tD;SUHf2 at lTyHGGOc*g$
z_J{cu=yG8|Z~=eNH+-fxp`j$Ci~KfE!j}Q9jqjIqruI*j*C-d#6u15ELfm_}@n@}0
z`s%r8R;W0=6pf~EQ2p8rIGth+V5VSCU<?!6>^emMmXQ)bTXR-*CoC9qCO(dX!nvti
ztHsr+{1D`vnmMENlcSrtq8$QieyghCghXA2sU;eRsm*^S$>AOSdwt_K$Men!nARYo
zKIrr1G&L{Ybkp*^;zIOl47rXNEWov?_vu~WAbmb*8x)P3q>9II#11Rog$p}{g<Pe7
zA9FyZ(dT#SbtK8&rj<=|JE(;F<K(M`d?!o`cT%;CX#Xgrv3B&RKjWJd*`z at A7wLKK
z2|pQd<EeiOBg9EYjQ5>oK-yr?znJPNJUsts^5rw!X_B!2R143t(?g{vK4^U4p2+^8
z(1`wM<;LKJ)zZUm9uzhR5GtP{-F4^h&T;uAWNpx1+;4R8DR$Q7tH&*BD at V_3tI${q
zilR9nQ6-IFR+$>xpQy!bqzj`vheR at bgUws+1c`q`v&3x+JLy!F*HW;eGcvgMbA&MX
z!TiULbuaz{`XB|YQ4zj6%Ld8o9k3j$7+?`CnhE`6V2A7-!WLJ5zH)Uj!+Phn_PFgP
zg)KfvP>FnlB+^44U<?on5-!DTni%v_VNIEAa}Sa8^!EOI9cpV_0sA!4BmOZZUiYY1
z)n|W$o#?%KJGq#3X>nU|=EN5D82#;zM>VX!5(Gf7McUwtey%KRy-N%ck2VR>3q8S}
zBFA2IB7 at E7cup~6GH2{1NWKvTfEfXNPt8V6%ImEMw?A5tViPoO#X*Gl6;>xY;_6t{
z)KlRrmMhT+_}$`x at 3dc9^+wX<HB#*&6WxDH<Z^xNnW at DbKZ!+2dU^sJ+s-<YN|n*2
zo<CrylUZZnwnhd8k1v58iX`r(0akS}UP3&u3ayE73fGa#%DkbGRE*sSJwymcPzbse
zx_MyX@>yi;+RQaidx=Sop at gmDZ8t?!yb1rD$SJ37;SK#%NV8A)&d#FCM%k$75`}*c
zf|JX5;RZ1|UhAx+Z!75Q*r>+(_g+C6+Otd9qb`$+bV|UJW(bU#q{r(-ZLO{aF`g0o
ztd_%thvv8NppW~f*Q8}!8MbpUv|0t`L7wR32bFY!P$D?pG8u|<*}}fBI77o^%bgUO
zpT$Y<ISK18;B1s$)B;M{)Z3cUXJmg`dlu0Sl4zGZ%;;5wqyh-w#<Ke;paaJzf<)K`
zcQbek>JhpB#=+h~(VI{s$wEmNhe>x6N%ACYVS9)9=(^)%Pv$!B9*~$InIKT5(!{X9
zY#sSy>m49r at ui1*YTryv(xVP=pJ!b|*(tSu^-4dW+~l8eOl--IL{|O at yN!Pz2(2#p
zq*KbCeFK>6%&ZMY8;3cpx(`g7Nbk;4!8a?@g6po7_qHgQec}?zB$yBF7M}JST?I7D
znAJ(4{wvrF!k{T&RX%0#Z1$m`beZJNRzw}0d}3i-G)oSdN<MRx>5PjAZB~q5w0hqq
zpKHwDthhxDS2y19hbsHSN_~F-F?A{VnA1?ue|zb58Gv8D92}-fP6pA1f+=JG%pmr9
zlkf>&yGHKt2 at 1f__*G$1v!7`Gp?nVl2wd^DPv|Hj57{5fio|C5L<|+$j{+T>A_Kw0
zo7mUEHvMNN%yMcBKdX>UxD`wFA^68_u67CbrE8N+!ReiT#y at w-w|#&5W^~5AdB{zG
zWFzg}R6 at RdrXbIMG$af6J<E&C0S*>k=2z*6v#3vy-Jp!^iblY$KM~DiZ5#$D^^}bn
zo at RSS(WOaYe6J7&t~T!hBK{qR6r<LGO!r5kWVvW4ZY2oQNp6j at SI)#lyMC8EP3t<$
z(>9=wSre?qf+HM}TPA=1y8b4_*wKB^39F5QX1Ml&Ck+ci(pr=%=qX5WM6E&*{!~d%
zSINX|NNFGkOXrS`hJk}P#$uu)5BRjtAR~bF_chRy>B6!2_A2 at a7JF3XTqq>-Z$27T
zJp{dYV+kc<a(eM^h6jnC2mfmc1N{oxDhS5Brq{_35DSubGdO>V83m!dyiXLS(qa9h
z_H&u*W)A9XwJfWL<8~Xu*9~6gl-9^E{>mJC{s^b(2qGeaPg2z9+o-}g8a3 at xYcVO0
z^9&IV&)55itNBc$WM`JtA#pm%Omg_uKy2E5=*&K~2`i93(P<a at KLONERGSK>T#O9>
z0bYV~H5jj<b6kIg5`;>Ltv?@ax2C3<ZjGWu<u65tnPGy)4%}uxby8`!1hxe~v~o$-
z<!1H29sa5=b_3hHcw58sfZ}Hu2^tW!8JJ~ukj4}u;;l+X7I)ECY|lv5AZmkRjPgY4
zoB+)o=V?8Z$ikp+a-y#fK=Pvi>O(V*@p!;5<hk6u*=T?Gg)NP5N?=%l_0>FE<-Sr4
z#~wbNlk4`II;(<iB+lT0A6}y6VXl<9sEpDya$+T?ZTh6vuN#Kw?WIqgVbl7qFv~|~
z{3OCIKAI!QrAZMbUm9Cx1|ZIaeh~~~7036m`iFW-z+A9|*VRz;Sm}p*HPQ^@wKCi<
z at dgEHujqd<_BIYo%CfUfrN%FCz9FtoVKwgtHW<}Xda|w-sWDugx<&Unl(e_<0C^E?
zcxcSmuWX)QjjxEFmTgL0GT?=gMMc>s!J&7bp-9S88e=*@oM&LdpA6BU0y>BoR7#4p
zhBMexO(_;jJb^p$qt)RQs^qLhF_#ew^lzOHtW|%m8B?g|ItDt04vbPF4$5PSl6bHV
zHcRwW^SkA2g2Qn*0m4z)kIB=kfE0}6MZr21r<arkTNOm{2O at b!!FbLk5Ey at 0(wo^L
zLSVpE1f>i&GoSa8G3(=tH^ryk*VgH}eX8UQYG|V9&^gtjHM7KVc|K*e;tL2|B^=qu
zWb}VfVjhUR>MIi3#Rm~YjaZ=pN6{a|J-CG;TT)?$(#6ImN+G<}o#wW?!E0Z+O%MQv
zkv^lXClz*gT;V2jwrc4QQEe2#x6Q0GIXDsDnX-nKxJdv+Gr7=OXtSyCKBl(9ZQVRG
zHi6)cG)Y at U&jMLTYMvFJ(r;6P>eo%9swjWl+mS2+bIbyQ8suR17R>IRFe{)L<~L%4
zei6L9;|on!NlC0)F8a|;%VxZAF-exC++3(~nWHN?5akK&BZh4KjPNUOmrSPZc at uFJ
z4h^|w13h^5jT35TrEYl$qIfp*#l?yp<iqD6t`u!`^;jP}E>5Ws2C{OS*Nc?zhLnGQ
zxIR>iGrf`YsS3qBZTc8xuSh~jH_-#@^9Q%t!4M(g8M>L!wu9fm#)E!;i7zlYJ*#g{
z>z(SCquNwI#A`eaS4>jsS6&Q!|1m`h%Wt$6U>8xIfqnwhj17xtC!=FVfc3>I7WR0!
zd9h`L;wpi8$lm!SQ8UiSnTY7s0R4ZBG7gs?J6gt3hyg6F(7rG>8umJ`?o8H!R`78Y
z=+PbEx;1U(-U|N~Mbrny+NK>XigvgFAHAd*Rfb at kdY`6QXYcJSo2qiLF1gu)nA^~m
zf8*OrX6T8z0V|nUMxx!5=a^mtCPn4iyopk7i7}$p&ba_Y^gJf_oc|V^9qxaD2O;{(
z3uY7XGYb2iXN#1Qkm`9LrW<TT(^YG4FK_%vv*4(e^SQ<h)nOBN&11N#?JtT4Tqp^J
zn!@0%rt)N{XL!?~@$VTl+}+g%*s?Eo-So5g3>my2%I&%}(`QSt<EQ=yFHM7^YzDdm
zS^6x#0DNUi;<#hBo81Bu1TKH8UUR+j5a9u$<vGv<euA&&$Aw0s%`j~x^aj*q*0<X?
zc3vDwBuMR4Y294EYo(iH4HQ~*rE`3$3jf{O#?-}ZgVT*6 at Rgz+o}$ruB#r?>br)Wk
zrhIZSBmc3mlJLmwnlGP+K#i!F2iKS;ron=DiUtAc?R2;^v_$@9IYob{PgpAj^E<=V
z#J*&d#6&+6sSsP{HSk$O4tHn8ggSwViMd%U)>Gr^S+D}6iWm4*gh#H5o{sPsc-k}I
z6az1v-z=sDD7p7D<Y^kOQ7{|zN7xb(&41Cys>u;>^{wI_Dm;)eg}jY$kNq-AHp}i4
zxUu3lux#KAxT4EVlB0jcZdMhr3jHc&JP&`^2f&J5K;CL`|AH~~;1cX2(R!kHU<w31
z;`H^HZ%w|R5~+$|HEo~`DSelhZ*jj>IQ+6Fkm!kav2E4|wDYCg4ya%l1O~CHgIk+4
z$(!na>m?^A3`K`A4d`Tq&2&K$R2W4U<Gw7iHLcL0F7Yw4#m|3!?2ZtncGN|uyTX+~
zsF;yz at S=@4Laj~TPT$&I1?q5F^U0QqSDttnz$2D#vA!<GaXt=4fO at -l`1LG5MvKlq
z#9vzkBV1)Ly3~z<4bt>*U`Vg=9LFcGm#r9_DLo+|#0%X9crQ*bES$xzH2>?Vu{S at F
zjeaO!wQ(?|$HafoX-g9hG#Kg65Ji?OVn1SoLpCuv{}Dm9sz)E7X1A^bpr!7&gI-X}
zb~h7;gSQtHJoW?u5ED+MXRzR$mPBM*wiuL{$##c3vxdmKOxpu9#Wv`7kfu(Uh3&*v
z9=z+8N&24>5sivk!Y_gonD_4YQYb#^J+ccJ?KChI at ehA^hb1#Zej%W$no?_IB^wQ4
zvca^OpG4&1eBhed9(^11)rq3JK4;)bxRZUMhbaOjF!ALPuWBU^LSvt!*NUAI_(@tC
zIMuuZJ0tl;=<B}k4of_qTqyAWyLxwLo=_<c3ggyY@`$9|^xei$ZXH34!c&L(uP=9m
zREpN)K*N6!s!ieue(Twenjpf+R}1i`Rj-ynQ1Atz at j!#w{*bfW4kwXs`j)4`fL!Iv
zszh4oKbDJH#U0ZW8lH$<!oD at 9ztsk>STP|p<0Xbly;qhpBkS>vHmu56;mGs9myh8)
zTInhmRE&M7p<ft!1%gy~J$Ied10r55I0%&;hn;@}SO+n=dtoO_Dx8yD$J%5~Wlbp=
zd+sgCY0-1Wn`I18b;B<1$^9=P-EPBvCo*TQkre%(cw7tB-5N=Mjl6d+!iwkTctm+D
zLmOzeA-R6-;T1zR_|f=9im=zO#N&YH8^_u$3GpOm6bJ2HJU{o*2 at AfCI!M4h{XOv-
zXv%-F$nqfhNk)6RX3K+lo~$)p^Os~5YWK#`%H~Cb#K488RlJ>o)Hhq)w6uGgez>!*
ziBop=VX1-RY)}%NRRn7{=ppMeCpB`mS%7Y`-mr`4*V&MD at cTLJL6l85SjT}PC}je_
z4avXfm~pfA-gpy5Sn>1Te-~hbM})F1&-;IDGfr}N4?wCl7XyojZq+lO=3pX9ZcR}H
zh)joZO at 9%`rPTi`KSzMOf{R?bZPdo}s{P!>5`7?V at 3Z7BiD|0BtQg}Kc}C<ePUrXd
z`@jE(cP=9wpFLMr6HaAnk;?ESYYk2e_U$qrI;VmGzSs%;eE7Rf0Ogkx^8>ok`~80|
zLqDMJ6TXyYBCum+RSK?L62Qhe;_Hr^R>HBKJG(S`71}<%b|Tj4;?O;*v`i4Fc at LRf
z7z0}vzbQ|R$K{YaZ;kKJ<@B{x0>1^FWl0SQ^!NGtFcurHqY=!Cab=Rs#4H$FBO!{c
zoykC;YA>l%F6))*y?YKVo$BUu#UOtxyF*?_SaQWFYLIVP3N2os?eSCPqT!UqpK8wr
z_4 at gF2Y<|pO?rHbPF##!*a)Q;esRTI?D%f`q7yOjW2%2{vFHz47~Y3QW&HMUcG@#v
zXEDnvMUTQtbmoG)bDNtHA)waqqJw{0oV>c-POs~}E~&(EK|?TlWH6<DS}}j^LJhq1
zTh&BmI-U;GzI0K{W(QHNsno{-EF}SJN0WV%5%}*Cjxbz26C?E_0qw9E1 at hV^K2UB?
zJQpuq+GTjrH%OgYwxR!EsQ!u at toJ~XI+Nd#<ggJa`;?Vrga-sch!Fky7?M`;;ton<
z0{UI3hhV336 at GZ!yaeYPxHEs7!^6{0glm!uPu^a_i*D3OKI#NFj&12Y_=)~T9N@}Z
z&rOBSW<{Odv`n6FK2;zX^GFUB at hgj415g;5H$@{}Kd_eWnIxJD4<&+z$wm*3CIMxq
z+(mPHyacikaCN$cH=qgrG9-BwI&bNqU{=alOo%EH49PUdvlY4Q5utw&ky(1O?W93G
zfMZ at bv;wVIYheZq+g)|c&5vdP6qBHKicp7iyCEc4NtfiqQ?W3jiuc;I)0YpLK{^pe
z&uZW6;(dT*%rKK3){h%oVunp)`8R)Gi{v;wPqK0ZJyU{_q|YWkPyu#R20$V8HesGV
z;@24qz|3S80p{6nQn7!PKBSBVzFUonT!cxil!3#nCJ$4MmFZzw4e~x=AsIBp!sRJT
zD1oTMe<3pQoCmY>pID+=<P1o8Q^zlQQKn%~H`@Cm at h$r{1AQJTAz!fOl>(i1+*eB#
zyNoA+yL;-_)LMqrcj1rnM)p|6cW=ns!TzfApK=2{fF2GmT<CusZ7E}&AeS4y1Jh>6
zIiOpOdCo%Xvg#Edx8M$wc5_k1W8lH`^K^t5HNWM2uQ2?xOH{X9Zi}Zm`C7l=ys}|-
z9-Scl0g_4$R03E367${(3hIjFNLs3ea|zE<upPkw=)OfwXEBjfXzwPqBaGpf^dowX
zmPdEqlG#U7V at H4axB>SNL1Oi6hPAiK&vFcYE0X5OJ|Y1{GIK*<ATZ9>AP at Tv77F$L
zBcU-E`txa5&!A51^LL2|F)jL!>X3}aFd1cw_N-0<8>9{r9na>#EOW!SY0W{3#UJss
zF!>|FyYi62dH-8_o&#xekp=X5JhJV3Bw4&j-(C-Io4tScUOQ;RFN{M=tL7dz8-L(o
zYiLIApEVF5bq$4%0c#l9cs08(*xdVi at Y5N79s;LD8mKMM>71unI2#&b&^>z^$0`iW
zmiJIp&}=WJJj#zpo3C4g32#J1`#9m`D39AvWl}LUZAH2bo}epfk>%F?Py|eAq(h_Q
zPL(H;<+y*oOpB(&0M}KZ9s&SPV(Tmtdv?X29P~OaEjo(32P({=MYrPtb*Qf07n_M+
zMqtm;C8ZF!7GLMfnlk$rZgwP-!{S{clQ9^NO~Bc_rG|k at ms)uM=>On|M&l>ahT#4%
z(Cfe at oJp)!8VkGxC<*_k#DXJw%wW++L99p80keNP<dqC)1FMv`zZYOIl<iq!&*G4i
z{=hGph@!Kz4*i9&fZXxTTPf0|k$!&D3G0swnGf>%tXpIzK45(X2UB#h#x3F1>kapC
z)AsExJ~nubXlef(`y8ToL<VFQW0=_yc3vDo7kFJf3ZZdfDOFHwjrQ<>r>y%9+c`s4
zZN-0D5U>2>>mT9Q2Y>1hw at e}tnaYC_*iT^Ii8zpjpR13OmZORh&Tse4JM~UkDEQp@
z@)0|5Fq^LDR`X^MFwHc}+5R?iH4M%;TSg%5?A=<Add;GZN5S2-BSs9cf?!N at u??pj
z8P90NN<<SkJue>_r^=MCwX%ok<L4Z5$UJ{F(}l6)9^t2|=7aN`tCDHj&Gb^2=h|!z
zxDYakPK|54alUBTR~565jumWC784OFBcYW9E2jxu13TyinzL8jZS7~h+l6~OU3n-!
zjnU=4;xJl%VE&jd6Jd|&A{9>gPLA|xFWJ>rrWy<AZH=JdW>F>_#Yv8^ikxV46-0mJ
zSFb0i$};)dt#8 at R)*MX#`<!FOZ7M0b3FsODFN#j7TO46A|7I)}Z7quG2i4%{Hk}X$
zEZ?*$tKKfOE5riGJXyl2lqq1EB=dY=e;PIJ=D2HR<~91cNFv5SN7}V~>?&OUBqvkj
z98>{&5heBut^eY$Y$^E>nc8>eSQ~#`F^07oRf&R({7H0envhH$g)oqzOSHH$)SW!j
zJz=$BgW0c`lX1Va1MRj}N#IZ%ImM>jEth-;k38);Kh=5YF at 2LAmQ^DM>V9qDI`%XY
zt5!pNg9)g1Qp<fIK>S(pDB~XnT9xG-P6`V%HuPWBl8X;Nk`F+A8#&MSi(h|zNk8do
zKcL+#O2Cn^OQ1WULw at PO1Ld!eKPr at q$Dgcv&rr$3nx;uKg`~Fln^F?%A?Y at MBcL<g
z0_>wez}aUsIRQA)vON?=96WreU<7qK-oGAJ>qET^#%GE-7LhJ`dMhvg4s11C^06yr
z7DW{Tft1&Q0E8FsgYIAhih_U7C?$$ZbUiB7bmFY!R4TAOZ;U<5r_KZyVEz%z at Z$Ma
zX%DmF4>B at -!fRwaSy~%xzD9>K!i{;hX_x~EsjA-!I^2L{mFe^BRA>LJNx>OG+kbS1
zfUlb?5~EtSKYtqfjsIbtM~WaD#`EIRP10T_B7Xc6U{Y%E%d)BNxDkI7y&Ffb3Dz1{
z)&E3Qw}u~}yG}Jy`E^J?1^u{rK(z2S;IW4i_+MX)_g1~Z!cRR2oGS7t42HdS4+g$F
z0wWM}O!*oN<=7-x>P$;-SXX#J;a60^EI!3Wx**70b+RlFD~o|w2ZwqKijq_`?wkqA
z9TMFT4uY{?>GC|>f5(5emI28L=k|}EdU};09!A!jJbqUSr>OnMr{S4b9&0e+>2viX
z*_-8&4`38|A+}#ziXcJv-U?7tubn4sk4{~?kalz>{a1zJ8YprYj+Q26$~S_`4&1@$
z;HodNgX!KwIiuZ$Mk#tRe!(~=&ea%D{8&;mDIUoG$j$unR|0>mLHf|IB^o?AIzl^f
zKo;Vm?Rh4iV|MWf?Zxr&*X&{+bKxo0!bRwYZR&?d0%A!(hag7D-)E*@IqTOxyE-6(
zW*krdapv-~p1;nW+Cy)Yp~NaCE>=<A{8$|)`Ucl9&K37+6uY<xCiNAj`tbO`iLE74
zm;2v%%~y%`1UY}ON~-7j??TfF91-Tdo<a;d%jUZFPvdq*blDmxr&teIsyr!##AE2S
z?Tmn`hmkeXR43UA=PAsW=|1;OoX$ra3@=M;die=u>D^<rtNYY^n^2G>M<4holR%qd
z>*tI(70I7LY&>LcK7sh>IfjX at XvoZ9BtT3`((id%7Nvi?FR?G680|V2(kbtGJMnt{
z at 1)Ax=dka!S`=oFZC?}9^<@QVJXG#~TvN1anDvmZgNAocp8BJP7K9s>n07#|fKq$g
z3Nze5<6?<JzkZ-N!z6OEm{z?k%h=$LsH?M6vuZ!@!**y>x4SN3)<k^Hr$VC%>K?sz
z4UaeoU&(*9H6t>8tv<&GQk?~V6nn+Gfe>vnR{l+jM;pbuwpHmth!^IB>(;RFb=Jpr
zl`3KpxDyZ`r7oL0voxHD<SWmCiUb4oEp><SG4Nv5C*lB-{4Eezag^4J+^VW3iR>M(
zPzE&4-;n2tG`Lf4JU+6LNhr`lI(CXyx5Gj2aoc|d$8QXBgWcXs0Yan=JQHLy3imQ`
ze%jf62xh$FV!8fzRG&)mR*`Ar{>jrxMXrihb7kG*gR=t3f=>LSQxF+2AOj~W;qY;;
zKR at uKY1lC#R=bX0%Rh at yykG)gmWpz^B)BsnIYFy!5njvBW|}sy!+uGu^t2ATMCP$a
zJh6XMkox_-1RIf>2oh-0Q;Tlt%1`bW_auO_Q825j$$}xmiwI0(bN=PD%8#c~|NG3Z
z at u;}*R at 8Z>jx0=bU{_Pi+Yl;j(4>tAbqlTe1T(AQv&8WsN+_CQWy}N~Emdu<@U0GV
z?r`?fK0h_$!G0T#8a{l}A80yf-SBr|mpy+H+EO**aU9NO*6Rnf7zHqc?9ZB;CTD&(
zu~NiPM=9C#k12xz<ZW3qMe=x*y?Pv5oug5Nt0Yb48(h*Ah$KLRK)Yn+<O-_a-quxV
z5YYj(SYT>*xC8^61S`x*5R|dSi+t!PkUm}r0ha;HcV*;=HSU0MNQ;$gI=0L#KE!{$
z2<q$#j5j+%K6PaMD-({(v=dqJx@^k1(eTC9>gIlVojRwY(|m8xi1aq*-T at zp%$Uq6
zU*-<J;6+~KdH at 1z8v6(DB0IRrQ1T)f;8)Q&a_D|p5g;vv@^KmFkh^h&jxI!%>i)h|
zy5;#-0QQX%oQ|sV)#C|>-e09&L^^+m^6;(~)OR|@0rZ^CzZmV`c3jWk&h at E~Nvot?
zB!3($BN=T;-nW9c9rgAb`Gx6b{{W%%tl)ShAE}0kQt)_48}X!bZ5KM)N=Zb~M(YoF
z<R38m-`4+{Z$5&5_ at -|V;`7)e0JJ2|+Q^@iN8T at Typ1FNUc7exVUgpIo?3rnUt&fu
zLDZS2ViOocWoYPB5;Rq4X30aO95q?4FUr)|$6RP3h*|&OYuBX5UDHW8?BqE+0 at fn{
zGWamp$9S3UpaOsQ)a0v3JZ=llozoS at va@s|C;s9XYF${(^ZyL5$)#*|C at bq&^42AK
zWkzXqZ1&9=fGT|C0q#pfspWrEeE;_5ELZYX4+fgmdv_$=<ugWeY)E#h07r|l9i2HR
zr6-cK6Kx?7tcIPk{Jy#f9|nl7N^r>CwRu4YK9W91&&WvojCA3jyV^YPwTGRRoS+A-
zw#cRptH<&$lmRxdMl at XzF0pKzZ_8H5ww?M(E+^eD5JrgU8B=nxMTdVH=UOEjlODIL
zYefkY0Q)@el0VEX{t+=&A_z(y7c*%PHQHtg+voGAXar3LQ7wuq0lu-_pR|z?4KOTQ
z0sk6;0yoLzGuVS&FKf8opG5fWQ})3hj;>fq+QHl;ZQz(Umsjm)v%NQJL`#W~;9}a_
zG>`n at xT&(kH0)wod53=#;^{BoXacuMU+x7w%`#Mgo+FGYR)3DSw#HIU^!Mw&o5}A@
z@|Zx5tH~(h_S=40b8H=S{Ec>cvaem1$G7*$8lCGnF<mp4CgCNH at P*ZjXvbEtl1D>U
z`bkeWTXHMS at v1kR;6`Iil9PTU_Ycgk4e8UNSKPp_mG({uizI&-HqyxGTjct`J!5B3
zU3ks}%`t$(%Ucdjcc5MQx#+5J)>Lf6iz?hE5wE@??XV9?x#}+w7uL}US?YIXnqbh9
zHn&qTi;|vr1_FUkdQ+Djmcj&K;n_#MMZtB_mz{++uW1~45##iP0)=J^FP at rF#Onds
zC!R>%6cA)6dS!nLf>q7wof$Y=L`grdi^_1rJO|UFU!q)Uy|~B2E*~g3Ar0Yr1Ni%g
zB;KBsKrwCI5+5LUOB3Igk^icKR2X)zj#&1S4*G~86Cl3(@sNDEvnisTtXgRXstGRo
zW)i};-2ss?!od8dQ;>8*?Sr*G0nrRR{)E?Kaq&SqcZz>(Kjv8zcHYl^G4FRK)OQK6
zhg^|=KO`F+5k3jNe~6U-6q=8FrT}Z2JsIoJKOX*gtQ)c=A5#N#bc5%TWK~l*T64H`
z$1_w7EQfP@%1N0F1nNmfv at R{Y?6&-7EbOq}7=vDgl=qd9Mx>LDl+<L6uZpQ?Sks};
z=}7pF5paLQ at o2#e2l=x>xh!~tq`GA83?;Ww875l5lepSxRKFHg3iyHh^eX84t;P?o
zD{<G|1Zo=Pr(GZ}lH!AUtlCeeAq10UoD at Gux3f0IQ>?_+a<qe=(rSdB4|a;XHVY~;
zI1r2N)O&U(I>-HxvA;&bHq2J48~k@~hn at p`_=tZ8360>B<r9o2OyJ`cIh)^tR8_AK
z2S2Qe$!W{+mc7LBDSXFN_5CXlmQ`8qF$aws9n_A&yWY<VHzxawywrfMJMZkzjyn75
zCdAj7_=jHW&Wj0>e8EareqB{xF;@P%e!)c62VOLG8+iy}5y%k3jnkgr1x!;xT~YYc
z#pr*Xr?~+~CNmwmzO~Tixgt|WkZ_B=gSGeMJ~u)!SIk|PbAngKTUEg<;a~<-l at TAI
zHaqn27)>t$Kg#Tef#%yN1|OjdGT|%f at L3gaONhWN$jjMqJwC9qi-QCFu!|9feE+dW
zO<yG~EFQG at 5O4D#!&m at O!(aYdTz&U^!-aqPhBnn^>p<#FeI`CM1tK}&iIK{=8Or{~
z-;_qS^Kj=Zh6wVkyVvK#kdk7=5F5OV(BNMjQP!h7hUpczgc;{_rsw7-wG8`rv-MhI
zJu#cl!f7Y&{nv7$Xke!U4=tapx}RW!5dK7p6lGskB`_rmy{(ZYn)Z_GYrIXZhfaSQ
zr?vAgVbOsa+~D`2-R%Aw91HRXtYF=G_4|RilIit>O#lZ48h<6wFT4jv|AKxSgug6S
z+M1TS{A=?=h3=?V=8MXik7W8mIeu=7GO8ZN3 at lg)&&{_*y9;LJG|K3w4w-$(PF-II
z4ZnZK8O!AAAtwZ3F5`y7C{=z94;Fv1+%mb#f4X=xV9`XbV}hhhZ+9pfnIiiz9;4g*
zbdb<QZzu}|544{Sh1B1^sdij0JCPA5Sy}%MBJr)yGf}gnS(+L=d8m%jvq=D3KA4*h
z;nKMA>97XebmkZbz_<<!NPhqvVp;MO;w;(aTScAj*!53YCo8wIxz0Kbktu)S%jw)6
zBNX;1CvM2EiA$qy%_iY)$kQ3K&w!Vf)JN^SOkCgPv|()revZevUPw|={c(Lz6OSX2
za?12^cpfcA at Sk{UF*-yFQ36>KTbY3GW=sDYaLH;Ogv2K5iSW4>3jVM#sTV>Iv%YyS
z_9AjGf|4(6+J{UJ_Y|=EA;5nuor0KA)j%wUKx|Pq at NGD#07xn&fb8U{W$OiMe;`)y
ziIS+DZ&oD(S=@Rt{UU}JGp&7}*|^RyEsn~J2wA?Gy*VvVZ$ifs8n>~{MCNNSrJC^W
z#e>SMtL2(<Cey_{-<bIa#|?s=OELLC at xq7sar-)Gx}{<HxNku*96^8O{-)Nu6I(&2
zKzUn&lx+T2m#Aw(%BU|-piI1qJt%k at n90a|m#mE64{<o!gr_gD90aOIo at yhw<@nu)
z7c>m`n3B>;KZ;U3OsZxmp{XhBap|XOh+^|wtrR!gDqhy{$+R39aRsqxJowO>v1j%q
zR^P*%<a|pTIMKL86PJIH5cl}yhOQ)eE6)GGrp^`1B(g>^@IMe=VxFWDER<c*fs)fR
zs~G^ojk_3>Zt;MY&ZytWTxdMu%2<*+R<MFp>G0%LUc8!6l>M75Qct)U#JC>OLM#Y(
zRLnkMLn@?#Nl2*i%Nnopz4KM;6 at LBH-zRRRv?rydC5ZEKM)H4vS7m<Nu{A?l5~};K
zY6Y7n|Mc^%<Ko)V;kv?h3~RhV=tnRixF~S7F%k%<=@83yt6fLSLGD|cjZpqF%aB3T
zwQZy+br4qV3X3||qOt+r{jbr8y`FHcr)oB(#D}1<Q$b4p#o~@Bh1ti_ at iE=qkQVv{
z{;>Ph4dHvFqj7)Qs5TBRwW!^!6BC)<GxU7yGt_x^)UnRvi246a=VOrl+T=uV at b*3+
zF2egL*-_6<it39vnHmHjX+E(H7#aL^bJ1sbg|Kd!pcrFcA4LtS^(v6DB#V!j{)^>A
zP at 6Df>rgYX8jQwU(*ys*Z^dei(M5G3nsnp at OYqnL2|)J0l_r*dcM*N@`Ay!S2LfS2
zP`k86zXIR;vZU%_D(;pRX52R7>}H1n`D3wX at ieVQKIK_RIuJwpgHvJFB)3x2+#?Yx
zRrXnJV8TedzFq^4Un|W$6ZE>MN+C^ma>Qxx?@~LHTOM=P$?2Ep`@PkrADO#!rh0xQ
zs{eG%LNP~&ClRH8kX{N_Vb*1fWaY8#(F-y>XEb8+2~@}RI_GIP1}cG?-F&B}WLDS?
z*2%CEOh~rPPs^%Fedj_3{DjZ8&c$3vi^o;$>F%Ki+E+uh|EW~A5TU;j=-MnPGtg^A
z7;#TU#@Yt%`Sa8Rf5N*8zEmMn{^TNPM2EpX%jC9~rT7+qzuK*#hez({n^+A$DQ4nj
z0c40r0HD?ZsiL+8gGscb-~bV`gspdR at id>n%p;Fj<ZU5yHTE;fkB4KG$U9Bt!irN$
zyag_Tr9;p>!Eu}ZHrPGD4&Ku2k4%I7g$EAsP#oy}7}@G|W}dFb;o{}`i4vGZw3P%$
z4^NrPw{w(#WOWtu8Pa`*w7w at amexWAcmwG2pLmp}js-*(hP`hhSNR~j>qg&5&t1!r
zUM<DBa=*0C5IB15{KP!&5~Cve*W7dAHYJU|B0ri`FX at ko<mbGeVx$Pv0ZD^^janc5
zs`kxaDbB_e%u*?eyJW3W2dLM4SmvOj at I7L6ZDkC9f$kq7m9;;;bdw7r()RA6iuvlI
z`6~Qh*Wvn(?y=hdtEF}U*)4P~4=F23teRHH_jMln0tn-E)&Km_?nW}NQQ#OaRe^&t
zWfJXB3i|2vM;a+VPe<Cq)fXcOe#hL^h(?x%<Q^8Y5rF<ZUhF1WP at kL2SC*m<6aW%;
znO*~b>0Bps#R6Tr|GCS9JC_~o3%ljgiU6&Z7mWGQ#JZvBj3S1L+>=ZtHh!6vV^)l%
zL<=$9+e at h0z!?I$fJ&x7ZK&&pDbN7r^8Pv`Jd3oVfH)BgURvU7;MnGJ?HFiFvdlxn
zX{PTD0;sd+8<0qwI`y$bJkvY5NYG09<$LabC=Bhj5Q`ZlBIBPb>VN_0`{5YjfY*4!
zhws+lF;4)MjRH?UA8E{|bN^9#yi1cs@~(Ep`d7A&rifI1<KZ$$H6lvtcZW026spvn
z<w8pfag;8(N7SDp70phCZZv-zw_xy71W{gp`@vDZpAnHzYl^b?>W&4_s3HoMl!y+0
zq4;Az5PB$v7oFvIclT76!QLe9LxX&zT{fjz-WVsDjm9cLqvQ3s4{?FE05NN|rE#_n
zpS~4Sj&pSt_$fY;`WM_nVaf>(5C<sjh|`9GB6L{^wi<v3nJ?S*j%<~v6idjq>=ZyX
z)|7&u<EEyg*p+CJzDZ60J#eAocga+L9PuD?c7+Af$o-&;P6X$^2s0n*f3LDlw#_=h
zEUnnxVM3kps15*;CnC!BXHd8MG?IpAHyiMZ4iW&xDRb;R#inaKE#&}id!Nc{SO#Cq
z{x&7xi2!mT>)#)wSe9hXNW4GpuPO#OhY<NYS}Q)QwA=e8#62Hf6e?EPyi(zRP<Mu_
zQ<0JM4l8HoJf95=`wBVRaJ(HWuh59^O#FfizXZcHx!9VQTKm3v9Qqg&gS~vL%pC>x
z7KLq6o{ohY-nlw%D0*x!e#ACgL+hRtOC_#_qs6eO#^2|=Pca@?J!)EFzpWn79F8_7
zdgu;0f&kr#jK50YC>Bb8k4{^EkCp{cYN5mC*taRZu=StRd6Eab!&iz3Qf*vuU+jom
zicQpVaoj2$%)%0c#fVnRTP9vnPfq=&gW at ms!dMky$>Qe?t8Y|^Gjz4W9JfYt+`c8x
z*u3EceITQ+?#sE7_83dlfeWqlAxBlnW#;p?0(KQ+DtlX!(3_7y+uL=26`vOLFaew3
zXnaJTxI|9FtB9`wCe?<How8wPodgeO1R<0Q3A463!J^X?L7NE?+(L!W!&5C4pr44t
zP~?LF3+V+aAMNday`}J;#B4PsRLDb6^)GmSMR=yo;}CqIWV??J__=TLAn?xd$C;TQ
zDIh(+Cx%}yYs36DsA9N(yvyZx&j)LuRuN<X^#P6|F_MCKN37?_k;Us#^HYj<!xr_@
zU9Cm*zQ;hLWF8zEdhB7BPiVSD0GvaH`81~r6m=L6End%A)Ze2>`&0$fl*u#7^h2)4
z8j7IBykQK~OaU6V^8K+**Msag^O>YnDoYrhvk1}k>}lw0-4z{wqI&OJE at 1EYPQsN}
zuB)3SdD%vVTB4UrVgv}ih}Y5ekC$v<_$jht3AeA>Gx|p!jtI63*WWy1DOska(7S!u
z7(dTt?tdWPNHOSL*nY8It=kREPGnlRe^MqKYEGjlVj9^r|2GDbi5s>x3$>$6yoRF#
zhib9OhgpDFzQJ{W5D2Mr6~}jm+=pJPq}1_(fv+cKA&}m}5yMha$)J411h0#^<OX6?
z at yCh$KhvsXczq-P_ZSY0CylmT9CHnBF~SDtZUB8~$)9!*BJAg_u(EwiaaFf1PKZS%
zyEohRBvG~JkvDKVYtdrq3KB at mf|~6{@8Ex#cMYT%qh)x1HX=%a)^Mka86d`Sb<BTi
zO7iv{y|B$SUTgrc^CDj|0cCb2Jg2p!>N`wn*V!4MatTur2%lDcV at gD&_Od6kl`P2>
zt%tV`n8bp<rj at UoY!03zwBklw{CI>|g*{T9QJRj}n|R1vf at J5gYU?YwBxo?<c at kxE
zmu(kfkK&Sl1_ZdaDsR6zeSb%Z+|kI<Mcd~N2hvN>ZiG#|7GKs}^0#(}`64O#z?1T~
zFx at z|sq!m at 6N0c$!EVWgFoJ8V*pLImFB_PJ at n1?T__+(mj*=zv5@%kM0j!=1u0IIP
zP6FQF@(m$A`%#RNyBP0B8_7~JsW!5dqO%u%Ox3G at QcWD}%2|X0IT|m>4uoEQ+E%-!
zJ(?&laqOEpg7N)klzDcTGG{S87fT!`0N1Y`Pga#!<9o_1Bj_K7Mb5^>FGar5`oC@)
zp&1triB`c1pAK}72EUs1+5$ITl<(sHpUCG402CyVdv`qGv|3jU?>H}{p4v3UEdsUt
zzo6HDn^5Wk^UNQ?!a2;l=<jsbhCPufAAleAHPJfkkEI_xP)GOi_6)r7xbf2ZNw*<?
zX-Eu<Z};HC^&>N)a&VSx9t#dP7N50%th!5~SR^QL-04VT^ub^;V4*C=)eAdMZq1&;
znR>*I{>jcCK<v}s3+t&DVpaR`0d^?QC}@d)wHFU*F5szPsP=qph!{1NB15lO+=w-S
ziX)uZkV}UT{+#DwqSU{PM8IT_V`Kh6ASJH-`hGg=5#J#gP?Sv%kQQ5IL&4C`d={*9
zF;#wMlN2;v+DIKrpZEUR`+&GBdaTiX at b2aoztu<n<{LZKw#mzkxJ(gR;O)Z}GazSw
zANP7KsRXt3jrHO?XPoj^S^A?ktO4xAn}H1UMf?5J3ZbOAq>gVo2>SGqhvhUe^y|W1
z*8!Fl$?SYIWSqyq&HX}YJF|(hfx~=+gQwL~R~oUPF<ck2lKR=QVf!<v0X_QG<v|Cr
zHY*X=N25oYdPXahuX>HVRXfg;$(4D3$u*6H9MJ`W<Ylg4^_ZM!XU_b9I at axIyT~H>
z=(#!Ve8I3%(W3BEns at h_i>5mTa$BTKUWe|h<`%yP%UIlz60L?H7u51-tp3OFz%|+M
zZ?hwe$~_HVdY^D9TW%Xs1FePR$B7l)(~BNPkc*|K;iGq$#(=oz%js8^A_0eg0#hKj
zM;{C6YpqQuEzw~+9h1IZ2r3Fwqnh!LUwmKRrf1S+jp>@$SHSw27y2L87x&YFa?-^p
zI_g>|Kw%|P#%UL>(hSh$H$rfbe>7hnM->N|MsT<h-|+}_7B_!(yTVe(ILDip5S#rS
zgab$i-2<scpT4%&uylopuB&o?f+i`^u_5zbN?=I|VDmWH__G4*1 at Kx$yt;n9zo)>t
zKT}C at o@KI7LbEzD<iSXZz{hzDjYU19lZ`K%p2*arbRB}`qXt2BxT`}Lnj%zGXUN0|
zFd5RPE)1`cP$UMGVqRzibE?5e5PS=w`mY)Alov<`Vi}_NRK4MnCMQdOj2y}snKn)l
zd<7fWlRThD4?A~O>6K#8zv#u5uz+%?a$7EHd9W9Tq1>5^ohpRs-#!0V>mDMNek;3R
zKiy<+evY(0ccN6v7*7%Po&10}ls2`jVlL^3+F3-E|Ne+CBol~Y+*vd5hxEDDu~qDX
zewOG-Y at W;8xPMtl`2UK3#<-U$u^ydEL+Q-n$#Dr*oDdFAa^)#JywKVcsoRtSh26MK
zh7#OUqD&l&C#3JyupJuv)p14S))!6%Yb`)W&_(Z}L!$)m#c*rms>x?hqOt-zsTVI_
z&W|wIROeOK1uT)TBG<wvGqL>vAj|o-&j{tgGAo7e>Rd|?8e{Z-yklz>1vwa8 at 3t(B
z6XO-VCrb>0{@&Zwre0)s;Dtaez00rW^dkoe-r$uHK^JmJPX+JAf85$U!>worDUP;j
z3srjKh2m>!Gz|V`J|+xEJmPY&I at Ga!qFXB#YS<yG?bRcIxmpmn7i=3Q5f7M at XUs-9
zIL40@#u4Y-w#=Y^mA4ozT32Ao_Kp)+m18wsRh$lnfPyGVsa!G+SPAQWn6BY?JIf at 8
zYBdD;8l(<64#c-`KPExvt2ge(kHjwBF8ANQM#~rDuKnThCY7X|-1C^vYuK4<a=zN2
zvdHs?o|p+Zd)ASK|9Gy~d7G&kjT-RcJA_-!tyGR#Xv8jmC>A}LsPlcJGK=-fm1#4B
z4p}mH)C{K!Ap#MEK5DIr<dm{SY5_%hRmS|3DZh86lJ%qjHs2;M-U^$RvsKdq8_)~R
z*=Sb6Wf8Y(Aax%_rJ2o7GdQW6BI_%psJO<E9|+_;slvSazO at d;BRiEY7-jEZ?|li*
z71aMLa7s^qUXkJ{fVQK%lRq6m7aH<cW!-2|CFTo&R0TO8Qep45uUD#Jv?Du71x9FY
z!J0AI0Squ+_5PToGM!FKqnkg0IjZ2G$@pv3#zneFTM0kS6c6W%(hQ?n?Sy%oa1M at o
zcI8{{^L0qIJrIZLYsBrnLom^Wunr$QyU(t?;Sq;_3i|0XN(NdqW+`D`NT{u>s66;f
zC^r9!OTGy#Os0oQvzl>jE|eYb99lj_nO`qKn#(t<qSmr%#8~&noGB=w?@;XQcK8gt
zDYZP8RGE~5>#4mhbsn_^!BOo&>obS~K)M=zRLrSKSej`;cuZRONrBtj_Hwz!c9RNW
zfKVWR7j0^Ip{ctvVwFc*vTQ*{>z=W3Z$Esq*RlPT2R!~2`b(54BCwMc1ti|xoc1)X
z?BZoxXSPnRczIUc!&j2EY+T=X3C0hE#g?ccBP7qq(a{(19cc%L0d)^W|GDp??9Qg7
zR946qW^<3n8|~%BDh$k4+nPYe11dd+8{9O16_yUnYIu(uo0B$4_?szkpjOG+YYop(
zei+?M)E^Yr-(14;`fmuHoRER%Lg8KB*j`UBu|yzp$XozAKfsc at 5_6%ojiuE~T`MA^
zI=wfF@?Oi=p4?<`CEO9uM?#&!QI+fvn$>*pDC+12?W2pRY!iD)I$bwE3;v!Nn8WIS
z^af5^R^on at hQZTi_<RJ&3xECc&Kx=XSncH~qz?~o<9*#Ur|#CvYfvx7=xy*JFq-8o
zvDzw1_6eDBfk at xQ1LWw42$>rEYIldAuI>@dB>(2n^rpb$683?5j~N!ySHpf^!HzJ#
zWHbh{X{LsA4U+7>>e%KA0|<6Ol{F-P=t;K at h_cYb3FpX>f&tju1Bj3&@*N*yU9o*C
zBqR*1MBbl^J+qXK^<XyoFl|Zq<D_#xUXmB29DcEXShW=bfiXq&e%U~x$RIO=`5+Pi
zN}@Q7hC+Hrt_`4iMyfSB!KV4Db^2)xt(VhvWATZ~bypUTv^n|8h~}=)M|U}Y_B{8-
z#Z_d&25|}hw$yoX<I<lb>4L05O!5*&u-p}RN$If*f+T{us?O$nKEh32Yx6;J>nc|p
zKXlGXTKv70AyOb$?HyPnwrC_2R5b^5S!nnGae$(5Bj#c`zPIJjk9h|@{PN(L+ZxNd
zl at XNh5GKd4qpTT#7tTu*>2Pm<h03s=?)C)c20*|)HkQ_XVArydlaJ^=tknbRoTM0e
zR>y=IGF^Z>t6oA1nCzY{Ro2az0ocQ^swTz}0}TY22@?_rkFnTV&PV*%L&Y at hXr7Bd
z7WVeuI8o<)+u{{2Em$DeCiu99d>mdaZbI;LYw<1#rlQQIlIGZyeBsZ3bDJNXcet>}
zb_k$dKUV|x=y=cIMc9U6oZ&fWr%7Qi_Z};QB<JPUUaCu=3annW=L5U{wg$-*&){!k
zoj#}HTa5{a6*j=8F9(n;0N;VLu2wTSkJTBYrGGP`L9s6|3Kp+288e6-@{@|@f_RWJ
z0Nie{LmIw)fxkn~GMFKMh^C(5WAuDX2s9r78wgYm(MG+=)a){c&~97M(Nf^8 at oTo?
zGHe)=aWeh?T{5uk^6PB)|Ai=1&5jsA-y)Z9xzP1&*jdF5N5c%$gj2)rx%H~hcz*^Q
z^Ef{;ne{!*vh6Te)(RINj`sl0Dp8`B8)OF95u`5o3H|^e0FOg|SsBa00G2E6r930D
z!^Qu}y--)0=w4VQs~yq0aXXRHF+w3FEUh>VX&HA~RMGG{jPhiM+`70do at 9yRn)5VG
zq_g^fW`$2M>XLU|qyr at 7Ng<DQ4a-)7y7a-m=>rs_dBiR=evEDIaNHwM)pT*#)rC~T
z7$)m at f&?1WN5?>atYp{JMF at i#p0{6f at cQJ|KM?J$Zs!4u6%G6UL%I%OP^wHo?iKM@
zO&(yKXOaaLXt-!}eC`T|s7#a%)1&WoQW6ErEI!PaufFt3N_<q(ry*w`Bc!Ge-!jtb
zQoAY-rlKrdhStf*4RM)W*4tr7&ZjV($;DTm1;M6}s^Rm0wK^QGG^b&QP6EwVC4NN@
zQg9VYs)qp2>y at 5R?2c>L6?q<k+)R{D=};tb5gS7TqKVdGt)<+u{gqdB-u#)wwR0R8
zK>LLgK)?9CpcLmXjm4uj9xq+m(Q>ExNq`7PV{O!Fn^i=?hYiLz%ReYFXf-8)<>d^m
z*aT`8E|Us>U^AzA^L~yURH{)%BZ@^}64)+Yz&wMfWr>nz-z2Hm961d>zNvLUGMTOB
z5Rn*x$6C|(p^DnRLz7uwqnVZ at wRW!k>m>@VHDc5Qzp(jTv@;pU2V0BYCNZMs7(Tcm
zlF-3_?UI(bf{vp7ag->I_1VR43ny=bW${UFjkCvpSG6(T(MwFCW(Tnt59o0AlX<%5
zj at CJg&nb|;Yy0j$rkM5()R?i=1Wf-x{uL at OtiyFy&gSmt3r2rpw_xXpjL+0rAkNx%
z4yc1YwxwuDoq$ont|UKI(zzFwTmnkS(R|dxb}Y094g1Q2TV?~zs2APzMLnwOSehC{
z36Vd4fmoIZ#_>S{?3Zpz4 at bJCv_$QRR^4vv2?LA=F(p5I=?DfTLUTbKrK-rc2*tq+
zmc$s=j`VYZfkZ+W5kTp<Z1>bnlV3RqQwYEZ6zz6Y!d~E$XY-4$Ts?N+C++kiFVESm
zGp at kd8kl=G?;qr=BKzX>JfO`eHL(rtWxSq$&(Q8l%Cs|HZ-bgO208=Z$hrT(>Fv)}
zt1;q?OhfLX%K71g2XP43AuhGNJfseFBEy6V9g>oZaB#?i8jk<*E6eblkndI0 at G90f
zjjF6fjeMj4x)d_wnHYmA-tM>RItjw8)#?eov^QQ|x&W|LNSl=IFBaLnRfk`GcVgau
z-~4GR$Y)DB`E&mqwWc%<qV<8kd1%!Cz_j_($fCH%2_$xiAmepUuqz+qF20Jzg<NW+
zx0K=RM*6y;Wu(R8=eJEW3220JYh8OIC=no?f)<c?9j8bkfd;vPg%O(D(-(N(LDjp`
z)PPHt5SU8&g3vlI3tt4=5=u+3p$~q4LZ*94V&}C|wt>R|XQ;xh&Oaf(^^re=_mZm-
z{+wI0sUkmIh<pmo%Nu!VAeNYi65^R`C+wwgKUVlunTLm9oUun?;mPMje&jDYQMA9d
zeK=g)rRtn{8K{cuvHFJF=nHtZ{rN+|Tal#tf>%^}iKi`MH7G!KWy0w^UFU0m*qa3e
z-8Ylo(xCdezzBVl6-WSjG94Q8hm5QoX>+yH$?^=RM at R0H{?`h+Lpd^AHM5|U1sCMq
zR_1LM%aziSO0jngeI5-JOcRY7K(o3{*zkYxsI02-`U-27#jnpUvAXa3p+|w_b&4#>
za^2e1)zG?OV=rK^sFv~D-<<D%U2QQeM4FYvPQ*?QmL?mm0>w=p02Ankf49n5!fml8
z1rxW-Vy6}w at OHoG=4v at q_k`isAaBkUH_+8R$;-G;%mos2MHjn-$Q(HdC%{)OE;{Et
zh5Nd-l*pqS^pv93IUy^waxIs0s-j<;cJB^v=9~1Au-H2%gs#HmOSlbxF9w<79co(5
zJa3?iFx-)I5<j<zz)hou9nq4Vk^HTUQ?cj}9PDNU8tvN|9l=Q;c2h8Kv>$84)+-Yd
zTI3eGzi?0zeYY7QJAx*c7OQ5QOKX8StOqrTgZXVbKWo3`O?MH7*QEVxpLmGHW+VWr
z-?!VkNpF!T3;WQO3%+W9{V_50^@B=O0gF&&VZUNOWhq%**y3yZ0z=L5I- at MxfGrTM
z<3YF|<GQ?`_jc{#2y+?S*dn3uIHr|?gHR^v0Q%KNzP}IJI};Ne6CxS<7RqRr;v;bw
zp%Lssf`GO1n80;em3le=rd{us&!&5DA*C$En&?2uY^9C4j(l`~>2DqPbg+0Yf62a%
zqXGX3Q0Yjg`hUeFishfLJ+4MHte*7c=4~2K%ahA#L)rezW_DXeWJ`&c=vwdcJNh63
zjub1AG*9ex3^h1os}61z6;yvK&Sq+`&=z1g7JWLI5|2;r-cPK43w!dc-KpkiZ&yI<
z+p0K4#(JUIjr|0FKbgA^K2FsXj-x3~$av-E9v6&s%HKv>^|61d20+2~eX?(emN2dU
zB6QQQSfU6>&F<wBbwsP`;xs=9kXv4nY4$QJR#eGb3Qe8T%QMm~$pL2UBjuqHcB_#G
z?o51Eb2$t>`1gHpm1DD+QR+73r?xzSyDEq;R7Vx%wmb`e=yhxbE<(Tna~T$DqV34F
zF}-7yJNRb%g)MlXvFrf*qaS~B4qZ`oE}Nn_(*_~so7x6P$1$nCa$HSOx6Q;5fR)(I
z&wx>fmiBrc%#G1V_{p*YU-YO(N}a3eNl$1i$Kj9-W<FK^s9zRKG7Shyi97<jmyss~
zkzGdxoiXNrfhE}Updp=hF+7(^dnS5HWnnsRJ_A??Ek#;4No*WWU4_x?m?Bf*EZ4OA
z?jjs*gqV9^tVgM)QS36ZVJ3~gJn?h-0y at -TzVrj!dqF0**o;IU4jxPje?SOLM?_pR
zjFCYmZK at 9<JldFU={r8(VNOy30w66;NwYV&Ou03GVKsrV#0bIMm9sm><@;Urmae7S
zYHBytCHSu2xj4Fn>mW7?cx<-D`9Q at qCi%Ky*_V=jRG&HU7 at Q8V7ZZm%PR79pY|CD*
zq<<CbmVtW;33{V6<c6b$yfDSDpoa!?l5^9*{u~%A(xu?1X7-_r7Mx;#TGZuzeLndD
zt9L(t(q%tCbp`96{RxKO9j`T~n`l^{^sN`jGTzEZap<KN;cF4$#l6(?We`F4Ox0{e
z88d2auREm<-`)M;R6aUP85_2QD|=rEJ&v=5qF4mwrfGp|(UpL$blju5Q1re;-6hfL
zeioyS5aYAO)yG|`>9oe!*^|N34Jr9*$^jmKE8QTGxybZuJ{*u09pW~ndPq}4F9w-;
zpmy!P88mjJ!z~AcE$eucDTztozHNzk!ecjHeU_jDU<wpJRkF2AV(!LG&_Joj?>3fu
zsKOH^HWa!GX>T)9f$cgK>CK_ at W(U~nEO6`@5jVKxokaI#u`l-%E^n)sVYv20dlNB#
z$B2G_k+1ZG!1kPw!g<a0-xq!uyyxgQS0ms)oK!+$t6 at XX`0|y#tDy&`yIBc301)1}
za_~p7=0reaA?Uj(RlM7y#CzgJEpWK>ebks-fLT0B?>snZ?LyQ?SYNE7V!zWr4^Lup
zC8EwR`RCNxY7hfh$wL=w6D=aUyrN@&B-E2mwTL6U0Pwz5g$vh9o?`<arEwrhl;mWe
zYK&}Q=73Wwz~hT7xf+)fVSP~V at 5z)eo!x^(OcjLwLvpMCBE-G#SaT)l9*-I}t831b
z>vo~Q{g)`dOlpEY?d>U}dVa8m`Fc#Ipa!^3(m6tp+;2Bf3-9d)V>3Rq8W8w at 53tJ(
zmN=7Is-EJlv$~U<7AW&MhXQbLYG8%KJ3+M1BM_M|*{Q{oM);+q->lZ|zZP*3buJqm
zg0cMI;A|1p`z8lLp>K|k`+LCLR~~dZDb}%}bV&*MO$4L3b1{3F%sXEg<v1P)J<P!?
zI0Lsmnl%DI+8hCu2(uxmx~4yWRjCF+d;!l$5ie8vC!X!i;XH8#1Qi1K<*rOm;bu(`
zCXq!qWmS%5MVF*nn~YZH-D|sz-Cza5FnY=FKSbG&Jc1->S6r;sT_?oZD6Blc1~s9V
zp1m0;1#(Y~g{+nwCTYa<>;|1trrk6^{(OCDyV{L!woVXD1Ytgc&$TLlEy_vVr3|;s
zRl3y)%T^3Phkm#6D^I-~MfKkx<S0fRofJ3eLZh1H?i<0CFL$e^#y?3`PAC&|;0(v3
zCC=bIST7?VeskaCN_=4nR7_;=N2BI}o(l?G52vW?KYyVn;7}A~{|#PdMrwJk665d^
zJS1BX>|>DEzL-QF%9yHu3~u^;bR9z4>7{;?gnwO^w|ruaOEYQL4osGkF+HnjnL|Ia
zyp~7sEX6uET4G1Y8EMt*ar=&*;uSd$fI$WtV+_3L`Ieb%ZG0-}i!pcn9_e<nz&B;_
z+Ux71zqaik*~fq$XAyT_oEj<D1r;9ej*~O+3tVD!^YIo`&n-89S+{IP2vdoG2=ciI
z#V%ez`Qh=ZX#o;F_1Ij?uOUbVc8kb}ajjA2gz4?w%X@~`SRbJG02&UA05t4?#$&yR
z6%jZH&SEfPK%0V0Ez2(62%A8z+De?P4V~yU1cJ-nz-KN3g%iILTps>uhjX8<GdYOF
zP>y$L^|t|RrULeV2o at 3?N_FpvI%8?bkQuDg6DpN$UA1{tCx2bo$^^RC)BwY~ELEe!
zpDT)unT0!VB_zvpHCtW5y*t8~?qiF1_=#xt{OhV&bX%7;JR%lUw|MpHBIeZ$NC6R<
zdvwsy^RAS19IUxBwQ&h{p;UU(FYNAhOWv=M*D<Yu+B~{{BJQ5tFaM>}qJO)Mr--dK
z{v4R?_C2vmQGz^PGj3<9O_#qK0>dCsNny)Hbh0|{G6$L%Ef&X+b;^?kVEooyHJAmm
z;64YTyeS&0f%!<gjb;LwG?vK5n&%{|bei)5u?Q#MT;#Gjxk${DST2uu9L_XKc4k0_
zW`QEw$n+b3oyaLC016`))l!Wic;`4{F$x*p<h4)L>r{gmO2NS>21YLgXz(m>JSZnx
z8c9GN;mkJmT>s25d?r342a?C_j#)zf{f<};y%BZDO3N^El_>v~-kNO!(yeE{DP{x{
zGdB`B6cd1h?u at WR5q1P{;hLBwh*#bR3f>hp%<#g0LKMFBOQG!ef~~&BB4hR?&GnT$
zMO``-P{fQ^U=3XFC6qcgp{Wt1q<=QqTL;BM>hdS6blOj|>kGqKO10t1x)yh}a;YK}
zU?<Um1401Y at y4TSrPMess2rD?Kn+Isbf99Vry&=g at 9Hu|>*;N+Z!s=>0^jW+5cJj1
z`BI&KKKhWsy8<^Nhc0W#J$~N|O_AIhtXvU4h{GkS2|?d)Sdarv*&}x`Zes+)$3=tq
zC=x|XAZ71y_Du>%Eu>~HS at -R3>Pyc1?@oi=D9M7m<Yhx0UPE4p$$`EpFE>|toz&`4
z{$d3qiS6&lmk!P`pc%NnA2rNiZTUC>RUtor+0QR-X?N8PSilpcXNI6hCqGgm9LtVx
z%qZUNc&+kSG}Z at fWC?HPiIy;3NBYR~g_ZEHlql;A0T1Kv<;YU)1s5AMktL0m1tb3@
zPjyk7RrWdW1F9ZL^fq at _R_%G=cH=&~JtHFOhVkb5GKHUHhsuDJfR0}YXBnXL3|kR@
z*Vgk))T{8rLy>iucm~!Lu}58%6VZhvb%LAzeJ?76Ys-LL{P>(MrS5NhYW$kYr-U+%
z2$~A>)4{l;7*ef at P)metaddE!$h}HYdmF}WU1AzkM1+JG!~k&AkUE^>EpxtleOaL5
z9IPa|G1Ox}#|?*8N at d7C#9re=+ at k$|;+EqWOQQX<ibjoxK3gf#7+m(&heEEaZVyd+
zz|arqqm}<F-6-?jpoaX+)(!PPMrTYKVm at 9l<bl{Sxb5r!()cD9>-*GdfHUJy0UIA9
zIJ&$)5c%P^&$Kf9ZTGz6c~*MBBn%G|mlQ(?sdsjFY{=?5uDdlNtkvt(IoHI0|D*-(
zO+*BCqjPmHjMYW!s*+AsIPpL`IfooUK}>ZOAui}Xr`KjEk+Ih#oWGg`a^`3fZaq09
zk#eMs$e|b5un696^<{9?A&{!t3{dT7AbcfcgfKT|PHaT(o1k!CZOJRuFC*~f*?dW7
z70s_l+)F;N at jp5b|I9gS4lx*iza!JjH8`P1ApbGyrh-b^&IM8occf!4&- at ap(~fy1
zhBz&%5?3B?<>f_m&^vhBSaA)=b=6ZpUm3)mlLF!{UHBu=z&e7-8OJ->K&Jm^z$NVw
z?|#!x%f4DGJlEVc`HjZ#Xpm!UJSqvCWkMP&8vr`VGFQh9c-S6V&VGu2syR(HQ$jh4
z8H4GMzW&}#b_L}7wVe_{L8zEGd2Zta_=94^CWG&l5N>Kift%xFfkok~d<_HVqzs))
z^Fn0;71+Q%|897s5eHObd^87#IVA>>HtXD{edYjJq?syaRX{BVEkb5yS+2GJF{{u5
z0RxsM^-I`}a`Yx4zDDhT88sTzXVyGatO7$GH8%z?PI1b-b^A_}ZqN_NVn9%SBK6uu
zcY%O(Bz8#*4J-mqa|KAz6?uRHI1}*T;CJpR6{!e4h)F)fGdj-WH3|(?x3vjINN<GV
z5&iy|^D2$0TQ1v|o1+^N-pZ~ifwto`fkLqkyeNtMtp0~Xd({1Z2Ss?aF1m(<_Wge&
z>VUg*oxa~@9_9hpEuIJUJ(Zwd<9V-^WPR?aP;H=Fm=RvKEqu>f5+J%xvfb%0fZg{e
zA;`;v;7)T~I=l%`ueI+^dKtCL{F64ln3X9V>JSja^E&Nf_(+&oq<=K4EiARuFfmK~
zU=KGlyj&as-G7*Wt3qrMU(j&3%08nI-gJ>J7~CJH!{qn!+Nt^AgqzP93U=9xhi_nO
zb!S2u(S8Z}(FIw`qcRa6qpFxo0?9_qO?`XT)y7tGw|c=%P#;kLd8i~)p9%!q2M4nF
zP30K50w7r>Q0O@~pYdgZ*W~!ehsnY#sxgR=bols?+jP2rD9?uUosjrD-P8_*FfZ3Q
zxP+TSk?MTTCIElG2N;d^c?D=aLYTL(9-905E|8~Xg{nSlT&=`oy};h*Uee&jZ7xRX
zuF`#MD#y<N7Fp`h7c4I0ExbO}hu3lruIO79co$m#fgtaafp15S1<2`9HV}G1pA%gY
z?gH8=*0=(Hkv)R}M+mt>E2j$?PLCD%D?>-SmeF3ckGH^wZ#{Z{BrKtTPtWZWFLOO$
zQH}uud!J1!|G(Ngz=3=eSjMW_PI0Ra at 6wi>!hk4UX9{rsp!KSrWpbdPyz`38xE|YT
z+310XM~y!1deplHJq<%hXbD$^hw9hIKZ8uM;!~-AlDr7I7nyC$0&))+5Xmx?RjU?)
zNMmK{hvY!OXGihAy_#dF%a<oCe%y;4mdR@~&5A2{%JFlkw`_f@^J=si*^w$9uAcmN
z!dSI>q-=rcMScQ`36#DfslLPHCuM!V#{+udHM|YRdX?j>AQ{v5CDYnn4TQ$xiBv{y
zZ)f>`Ij>G*c7)rV;-9MmSN;~D*D`Pa5#zQ(0hf|tpPBPLB~53rmRJIe7`HTz+L&Bd
ztf>xYPPhR(H~8Fm+E{7boEfRhaH~4pcJRKkM(@%)F;D89V#q|rc&TYuyM1uCSO`*q
z0}{P>&C|dlWj&)Ky$*=N)d(Gh5pAU~jmVaNfwJe1^nQzUb!xW5o3~jZ)Q;S`)Vkmu
z%S+maeClF-7(?ZnGI<E(>Z+YJPM=`*sK=qSbdF{ctOadZP*9ZjYzecsCcOQ&%uT)W
zDs~U?w!#^mS?9v5vZN1Nu1lYjUTov;c7%3=-`KO?KSU8ol#|-*ph~G-xQ)em(W8)m
z`Q{V<Dh1XiI^pD2y#wcYX4&zDqxrfAc=xj}Zq{2hou9l^uZP2ehK;-+T&DR0#=;iB
zXyV`3iznrUeVg=bduy9-dKj?e2(1(w_OARE;L5KkO8`pS&oKs23ZPKZds=tn+eNqE
z^{LgU{c|2JIVt-fTz;fNiiMy~ACawp>C)6K7vZIV;Q%JLYpz5!w+`oNrCw8kb;Sk|
zEWq=0;}KABr$OQp&xiDEN@^esz_~@68w at LHl0{!Oc3A>4+tYK2=WiW|rrpPE;dJ=)
zF}p?KcjuU%B7FwUPO%a1nZ?(suk}v?aAxThLD2zzt(;L3pB0(QP$3u7&_1evKU+Oo
z2K{W`=K$%Tv60YF0qE+58rncfJ+)y`Dn87+#d>8FDaNz*Xc3O)U>%!XiusF00Ui2e
z(usS&*Olymm_wO$OE>3~1egE$h@%Ql{fAi3ZwR6~bIY?rgUaN$B4LocIU<MY=EauA
z@#Td=$r>@P05eO7jLx+WYGB}hO)IYpPth==eN0MXjN3~3Ta3oDTlNubdCOTkUz`%i
z@}>Rw{$P+NlEM*N>Y>SWXoThR!x$HKQd0xVsOmx5NL3Sk$YTTG^^r9_OP1HmRc$SE
zKn$1Wqf<46xtHg!{kQ~4)&w>eQ?UR&$I(MjfS~K;)3=ig?Q{}e%PehwU~S5rhY`S=
zeDws2_mHkOT;YTp9P=-tCkb~rx1K^JmJHxqoFXy0LiF14Dh_7(2W+8uf^ok>=f8_f
zXoIDEp9VhVgmnNCjMMD7uY^{Hl}~`g!l`MSO=DSM{hL~4Bb`wQS#3!u;#ISMRFiP-
zg}0k$G{r|-1?})EXuwZ at yjGQV8X`j9Z;Ug3d{&D`OM#^VK0w!a^_YX|ft>Q*jaI)u
zwn$poJ}?y1M>e!F>p<u>&!(36B61Lr)oq#7sm>B}R{8k_y;-al$h}_^r^k}b$m`O~
z0?56P%fZQRj8Lm|&01i7PX#mgGzn*?ix|0PL%=4ej>tD9$|-?=Zg76ZgcD*N?waUU
znTAB-F-VgElV9C`CD-k3yH?8?erP(i<QXGEZwpEOZ8FWU37p8TUN)XjmHCAnIQyTB
z?R1!t+wZEZP7SF&1zI+(H1pA&^N*caer_9BRM1KUVyf~%>z*6<78|SHhkw^4q40wK
zMNPcmCjTJvDN at 3J7ZzSO$_>5tm<X2nBeasxVfzO$%=xNoEAd6&%u~aPkmyc|`6A)K
zguH)z$xg!kO}3t^NDG!9W&XleckLVT$}behGuO2&{t=9EyVT6_dkB;;6?$KIWTY67
z=EWDKYkhxXFbrfz+`XZaEfKW&E;Y=J?V<jGV|6)_6beg!8V1ZONY2uwe3(93QSw33
zQaD)teSdBKDAn^WEb8;5Y|3m)c;8IUQFuM|15R#v1c;>q2EA~rQ?2swG-`5zb^aJJ
z<x$wloBXv6zO-*R#SUHj#q${Yzj``sfd=-!c9*5dq9u<LN9Ga`fNM0Le~-e at n?GJR
z8G*>ZdNgZ)(>#i#>Yc#=?qj|%mVGoCeTi`Lar%pS%s)OjQJ*Z?YUubOYJIBoUf#MP
zX_ox4^L~)-)pCHLX<#&apFMm5&f0)M?zMKDY&!P?(fJUJ3A}38WQZv96x1(#FYb>D
z;(FK<>Vt5+GoBn}?ZKUBL*H|{BqxlfY at eo`Z#<BH|2;dd60K%;1#$znC7~ud5xw%n
zBHNOd(i4ggHPmuyPcwD$nlR0g7U~kR0}`mJ5G~@tg!pA+Hg^$Y&O!$-H31$vT2`o*
zMl&F;VfCbb9%x}-r67dM!L&p$hPaz1_|NfqUB5GLBTjNZJ+2}qx;f7xg2a-nsbo6j
zswND7p$pV+SZDE at 57f4vB~#GWVqSk4Ifx>P4eKApvwfGd_sK?Is`{f6A7}+DPdk{m
zO83hp2JN)Ra!n^7hb&RQ4LzP0kkPUNgVYHl(y$e`3J&zqPh~({`Yt&Iqqva(OA~ky
zf$SI{F=&=J5qkkQ0Bk!};xO85NIQWJW at Sr%jq}a)2$!y<7Vedz1=<E5qndIfk=~`f
z7S0fW7Ms1u%JiZEX#3Cq4*!B2^7iQSHGQ{~W7XYd%oNm?$G>;Zifalg0nV%omhavi
zXfr&lF8k-=W at X{`ak87~!NQGva0P=Ev?rL{0;az9){t~Zm&zN2!hkBNhjIEyWQN#(
z{<Aq=1Ys*G3r>6BRK+-d@$!HT9eNM4#QHjxDsD~D*K4Ja%ChLIiPN%0Bd71DQRgjG
zIXO8|dH)VEpf0h%jv^=@UZ at qj1!#+Xo|3Z_s^_Dy;UJM_C2fK=KzAt at D_6$_E^JXe
z;bx_a%uAKTUFJ;RNg6>SzYl<DRu8v-@$d9=E^0TEf at K8`IM4_kZP38J9+hAfB at ZY1
zr%K90nR^n<{z9>$SrX5#n`UsFEh{+BB735`tsz?fQcBIu>UkNz>_nT?!m>dvp6TFm
zP(6=&C|X4z=54)#+n*;-;aa8Ge=U<%NSGs5Pe~A%Oz`4Nc7}^+K|NYnjV!c(drl}H
z{T-=o>(&xb(ed at QpMp&Xx2C{0WKW%sT#>P*BpbMiTHhD(YS+1@;BF|<Fj*F>)<vqp
z6SDqpku>4ud9L#Qxxa~$MB*2Nn255CGHdc2GOT{V&5hGc(WiCob@%{P?;+RtpvpoZ
zdBr#psmfJF$U#I_oOmC at r>>8G4i_VO7L#%t=?NL6?1rO`(kOR0DWqPnPL<eT<$VX)
zWS9^yff3p?i(NWW{?$tM?x~rErBG_pjVp})<b!I#c8RrpT~7K7(3XuR at Q%ZK{)!xO
z6%MC at LqCrYm2fqzHHe@AxXA16lQ3I at uE(gXVLDiWAxB(5!$}m5)Gri&aTSzZSN%3n
z+8o6yN37yRTOoX^CvZON4A48B^<IQ$-~&)AE`A+)Glk at wliC`DH(<h$x+bU}aW at uF
zIq4vbVx-T1<*Dl_jD$BC&n}CxU?!)#_MRaIW0SVdw|FUBt8r5MoCu7dI at 1uuUC+O-
z&1opwU$`uW&trlpm45txJFUqfEPC-ZN-q|_AJDtzvcvslm;Vi`eMM2BeraqV)(h>I
z1NtHdBV-q&(Q}CJp$aM5!hrV=9eBq0OOQ3l^Q%tzUEXy5)28DQ at R0Adi3agkec6RV
z54{5>vJlu#fVFb9WC8aS_IiMXIH#9uon2O31v`YNDj#<{=pJH!?LsLftzdf;wVH-<
zZ_lmR6%$P)p>~FmP(???bx#@V1y?HnxrzUK!AI?(kjp)b*8r(s6*G&iiVclgX&wA@
zZ_JU)_Y5F~zH{H(Y%ogmhrFp^G)Tyd^r#a~zTa+u`dFn2hn}EuFj}Ace<A;qYr)%6
zC3_x>w$5;eN6H9)CCDm8XJI*iC7k{CLl15IsJS#jn<<HH8|(S?iR#o6#WIAr8!7DF
zuZkx3?&KbaACc9oDcDm+mfpCaV$A7UWj5aEGYC~Es=;}70$aYIc>Nc1-ZXggGLT=}
zaB7e4m3TV83|hq(1&ke at _Z<H+dR=@>{4s7datU|)c?i6JlnY<Pf-WdL0kfct4W4F(
zkNCqCmK3Xps<5k!p`1kqFRG;xfna(D_~7q;(sg}Hg{5Y95sU7pv^zdz(Ap~AAy`ju
z4P5J?o}p8I at r1KZH;8EgA238+fq2dn+)ot$xNMQG>{}IBM4J9i2E}%YqpF7Jy>eAy
ztaTCJ&4DL>Jae%}i860Rcvfq|m*1+TcuPEg$(d!Nn({r@%$IXJ8Dk6Na_kGA2Uh)s
z0vHKYS7d1mRI5~?F$z at iO$q at ECGPWE(p%l1>_T#m<JDsf4&pIix$>ahdXO+r3H6-#
zK at zbaoZwBVR@M7#O1Na;LGbx1ZV^`p++z)We?@wKR9`bnUa73Z<|Zc(Vo-A9TXSBc
zCldh;qP4_0sAu&;nuMYo&=*h(;N`ciP%r)XWM;t$EWPG3cCbH_c`>Q*$dg}VUg2q>
z%VI{sz8^XS3{^CC<(X&NN-^R2_kDl3_w)#Yth+Wu(P~e+?ZpnV#Nyt$c_f-Nbkbg<
zqq}f_x)n^}3c?;e3eVKJtnP8F39nM1H^$}a at ssEW_DjvPdndhgI94IE`L8uHwCA&@
zN7tSh;Or3H4x4}`K6C?<P*7EnzSa-IFEB^G1AQnDwIw1KAE7IdT#e|?HoFeg*w|sh
zsuQ3%`ZC6a2M#F3pG4<Enm(H=H at E77eVc-Rw_(YoH%}AL!(W@@^kp;+OCdL5vO_)(
zbOZrx`|vCOaJ`&`vJ93H*+nJs^h49(#l=kR<@WYjxe>JQEm*d7zcRffwQzqj7>&rp
zZwaN?%*}rZ!4nOtJ2R^!TeF*gz%^JeZd)m%nq+;=%?OM at 8+DH~ajiAw9nxA}pyU>R
zLh($?oVcp&*Ki|w$bV at Ivn$^H#Uy;0MjM||su$i2H&N at eIj!4clL2n4#FxJ6z^gay
zPu7kh?gxTVdi8tzT1*(07+2I#*%x2O1>3 at 5tXjjl?t1)KsD2EcWAno*Dp=lvdnN#X
zELNly=ouo#`?OLCdqh1L>M*&VE`{xXFTNi)cx7ffmnb+o4O>-=yk5bhwAd85>dC5(
zybEzOP!J<PJkot&I&Ykz^I@$lP(jVxRl;G50&Io at sN-AQ?i?yXCX(B(Ufl0tue-pU
zdp|(4lTamDw=sb!EAP!tiO=zJR!P|I+Qu3LmXlz13Iaz<AlTtXx#j1r`^(sWm($j6
z2M@;gt8Lb2e~0|V+Q|dXa$TOO0ujI8y)r=<)wzs4l8lrH^;R7}O490yJCm;v1cQ{^
zdVg@(ep+h9DK)rB=iaK8sZlFhK%=v2$g#4T%wdixlLyQWN%Bhb`Fnr0lL#Kvu77?k
zUz$*>f5Kl!mAUoPL^G!hPB9;UtO<Tnoqhcp8ImSx9LVm|lJ}KtIN#GN3CCQKF{EEp
z>UeFH*e22jA?{9}{0%QIM|M at V3G7g7y(X}j?rAQ|mJx)m=V8NeJ-{}?YIO&DpK;%x
zruw!oz>9QiRK2}+b*_g5NDmNvn0i3Nl|psh9z?*zwDt!53Qg0FoH*5grXN*3XbB5g
zzt8m{{5wqbCaukQBPXzP=KZT&?E*j~Dd$uZ5p|38F;LnMEyM1BL~DEE^Cg_VM=V at W
zL<!b0_5%N?hcM(SO`b>N3M4lwa}+QgCxaP{3AsZ&*C{zyXV?GM!taB?M;LC=F%1-_
z2dc1I0F#!szWKD4AG$SvsPBXeFo`}V+6#bE>Zr=I*k*2ne76ZA8F}pK9FRsE5;u7a
zph at bf>-qpLY3)bJX8Ku4OMFPfr$$`Gztn5YUn|NpJe))KoZdLvmbg~2x1O^H0Kuyd
zsV?To^WNHQ6;Y&-Gmhfuk?~HeX5vXaX$L{JFu`0%=Jq~le8nn%#0hkcf+7<Rs%Q^)
z&!s(V?O*Y}LHquWVst(i>XQ(4piDXhIJms|i%UX4mnfi<@Uz0vx8+;veF1SB;X;GJ
zS>hOdFb;qZ*ZXf at npIl6PnzP28f|&Q_|ao`hX46E09o`F7 at sO1aW)F#pE3a$eRFFS
zsfnJ(Yta&V{G6nJm1B+Zve3OxCnk$-h!52IE7{9NVMG$;+=;%02*s?9PyF~w;t9Kn
zVX}+Mu{5xB2GNRpd7ip1v4~^AZ}!#dr)DGrCE@`PO3SK_tDr~5v^3DkAn$MM%oVKl
zA+i_U(+dK0p9~6&^l>H8Sm-K0u>qCVs605PQf(w&_>#VV46E88V!?Fh3XKpXXYT)o
znc$CACHfN71F|jmSV at O{k^oCicH*G5!RqymwJd0SGBI;j_kZ&pa5X4|som}<r1UuX
zr;2i{xbDg>&p7?UIV%#`al0m4+k(+9moW#YkP6x}g6_P(c|ROoc7C=D4|go;LJz1R
z5I<J`ALI6aZ~NLn9>~O3!c~T15Hz*FuvYJrh0Pe%H at ji@s4lFdo)nqiMTe!fl4Srv
zGG%J&O|aiLp~jW;QMpCrA}n=oEfvn_&k;XV0H)&bpXZUe$h?RPR1zzqDClsM$^}`l
zX4Vh$IOCxqPBh$z0eo&qd+PM{I`;YP(hA&mzn|KF<zz2Y`y8vyE9gl%cg at IzqGA+g
zXCw8O*yBx(75zJ(VTR8&lelUrWEY-_7e2+E2}2Cni*U)%&gf at MSIH;4iAF at P!THQo
z6>lxr!W{UnJG(a=U*$-4C?SWGgMtNdDv%12+vLsr^=I6WesATM^^M%Tl!1*RPV^Rs
zK9vf8l!DD at oaoOFEU!1X(vr6$S2C at v;b|in7-?4B9VoTM*`5qzu|j}(w$HnO5v_Ar
zZo67*;je$5%q4+(dAO`d*c9vIOGk6aOE<Tnt6XN1B8<-hx~X(m*)a(O*xs)ZzSYgs
zBF2jO0W88gYuuffR`h2q<Gi(#Mq#c%TgOv>MeL`!++)>n9m6xkc^-BN&47d$`s6q`
zH{Y~ln6gU#G{P3EW+?xAV$e`4K5GvmCerGXgz|$P_V8x<dX#TuZk)mV7;8<TjGo~V
zxa*7TPby)rWLLT=_oQ&HBT{VM<aQWjh$qFf<%7?%yGwvl&hVrHEa{zP;XrK_W2DP}
zfIYa2`P#TyA1S%bxINMwwpVq&*IS7FSN at E{`ES^^m?+*W0LKAfSfVv9mPvvgbt*W_
zGi4#BvbjzT%j^$IVMNIVGPPJe+pb&t3xeEyP)fyL14-r3`#91n(MAkvi=KY4)qMq{
zq+CJGU*s+dS+c#sSt~wZ at h0iO87vupH{;TVzOiL<jG`$FS2=hA140XxS)ovDd|&35
zLlYrW_1CQKeW?xHT}&y^xwTl(EQ(}%5ng|;E!zgVaKK?u=7NDgE?$=1y48i|@k)>u
zyx`oob}PD59n+6;D&yOew23|YCCMBNQ({Vh*JRQ)%GKkg^cu$lFFxvmG)=C57ba&)
z2{ytB3V9xlVS=~x>X1A06-A+PmfX!D?-Ehe*>WB}j(vF*j7 at 1Pf#|3Tw(c2FMBP!L
zp&-Tlik+2zSc<dCc@=k4iCB5Wi=C?gaL{8j_S(O^5elj!zZcWyI(@cCsOncsPdf9b
z#WLJ*$<@e*zoB)aFW9DtV>(=a)_>fzk;)ksXkc(71JGf)#!H33|NX#wxA3EBSP;hn
z<Powomto1QY6GNB7fTi=T^L#R9!j8$fBa8FRc|<2$x9~n+Eiqgy25w at 80FiW4@WNP
zo;l6T`?WSxk?x~DwDfj%0>?CKX|e0+gv0NnhWrLlE$-ZdML~^M;Id$UhUQEEZ~zHF
z_P?DR=I_HNK|yyrL3|D}3PNxi0OnS{-X+3)S~kE%(I`g+T2q$E0DVN$xh`QWCbf+a
z{pD-kA1gO)tHv>74Y=h%G?ntUHnw)T?fuw<4TC7IcN#OLCBm*eqKC{1<m>H(@+9nu
zi8Dy$hTPy09}rPO32X{iF5{9sf6stc1zU%6z at 5N2FgOl1^5QS8gf?NtR)O`2cGD|`
zrv|0C9t<O?xq-|Sz2eut5uno{X29S5Q)2p)Q_(%HB!GC!$F<m*^<K6+XpmoZOi)k?
zNtX~k$-v5Ydc;%#%e8q#iXAL4^!BHJqPwP8U)_`45=%w{3&FD6OQdshf7E~>32Aja
z?PdPv99OWw at W`Y5bspUFny%W2wcRi#9`$$>lyC>Elf8?{3tN}-LG-FAQD168mn(Tj
zMGf}Sxi6xW<%kcia)-!uj-^#9x?;7&a-Ve|V|R at RYls6>>qNF0u5P0(IkWMst(hSZ
zE&@@0LjmIEy<31pYto8|e-qc3!~OI=L%xXVU-bx^Cl at 7iJ*gw3v{3|#db0!zZVHRh
zNlEX_Ytb*GpphXFJmD}R>Mf4KREPlEm#jcJJ3b|yi#}9I73q{w1QMv`NKS2l)Gz(@
z|ML(oeD7;n8K~Kk&s^VUdG|`%3>Sq~Vx85H4zXNP4a^lW;F%O1f4`sv>yciLL)=x@
zzs8BnKjH}O7~I8rKwgo4sO?Kf&k*WHuI>R8YB--UmuwNtiB+a>TFJylMuR}kum+BN
zh)Tts-U^iWLG2oO1njSXfqDKQ^u^8W#wX at No;1llbV4?^@Q*)@)kcrkT;M+Hr<*P>
zbAJcHRl&N4ZSgP+f8M;ee9fR4b06^KOpJ?8y?1=>*34#){Qa<NEHgh_F at bVxCR?B_
zS`!rzAs!~`2tWP(R#yf&ye`AM4V)3g6RmFF)xzKd6$Xb6wJPqtBjAf`<7(fchov22
zj0 at ziW1u+gHVPb0*vrx%4G}rDkf$64HQ8s?t926w at eTaVf5{qu5d;MRxw~yzuC@$K
z?gw>pfh^zI6w8)f4S2$xm+BZt?c)cH9J#fO@~2sB_AwtO*4izjwAcf0>tqus<g>Ea
z^cgR+Iq+17&A7F(X3Y6G!1iqRn_zCHpy{l~V&U4~n&plxT>yp+d%S}O at C075vsxY&
z!A7bUpKWD!e`|;3xf~_xDW5G7Oe|J5B^QMFe(qxYQlJXF=z7?26+BK(Yg(@{1-A{z
zWfWB05F2t*kqe5T;oYDmwrp$^a^akdg)a6T&8yuV{n#lP5*KR`f^@|tyO!QcP+(fG
zbcyX*<!}q5Rv)d?4gAoe8Vwf0BSq&*SU=DDY9ptkf1wR57ABTroaCG>%(l7Bmhdr1
zBKJmIIjbp{QM?jltXm_XX at wIYOY{wWBMt)QFY(>%ac<e;OxXFdK<R3+wQV;_<wH?u
zfU16FQ(`@K6tAr5_ni^1)n`@hGbFsIT}K{J;Un~0bYV*Dq9({)=At@}0LV{csBf^*
z1A=i+e~US+T4`=+Ui+X8%=7nh1#rYGAIS3qZJ at moR8r2dK94ps>6ks&?EYRlap0dx
zeTLz}K;hVqs<H*53aC0zJrcJf`i}jtgO^EdV}h!4V|sglOu_26UOHH6v)d6Wn!%a~
zm(O8Op|$lo(Fx<i78&XM;tbgLbxV<p&rJbme*;DA4v_%gDdel(-{-|>tJD*jf1!tJ
zy7m_LW-{*Nq)=LNn|&LyC%YsWGLy`B<<Tn`^#)jJK($vSVCg9m;=Ma(U!J`M_UF~J
zE1Oq(jw=iur5~~xsqsxd5Wl{ht$Ysh6c)rm9u<MUxMLJVun380U=8YP3 at lXRX9U}t
zf9Jm;x%m6_Nv{E8>!`hYlGC~!TDPl69AO11j)0hVZ~kAAd-LANq_PQ0+gHL{9f|HU
zRY=n=l>cnP60C4brW4G*`ewsJ=SV=1FWzx7eeMqW-RHg?nGwU#8vh>oPgR7!k+a(g
z96(DE#=Dw6aO}q-sV=KVer4@*KY(=@e_+VjC#_g3q2d*fO`llYqoDMX{U>pI=>j^k
z86X`LfvU0TGPt$vSE2)-a)gh_ZU at Gh(%opD&|pAjsvnoY)oHMTGvAol#ms}+J^^Mi
zK&$=_GlcekKTd~P4%rPDj`F|M^AErC&1kH<79XN$Z%nAPm5M{{$(d6PN>5V~f4iDK
zdL|sTPxdE9^-$A#!-$mItk9aGxlv;}H=Nt`xJ|w*iUkQt$0*LN{)>?IkMIY3t+41D
zFj7mVhGPcUKv~TBUesei8L+0^7e*ea<u>{A%HDq>IkY)m%Vf=r`?FzMvi~1l2~*gx
zJ)4->=sU==>bE2>@<apt_iwJrfAUj4<bDxQ{q!uH1bLLyS9!}QF8i!IrLk&;-tURC
zv$^P=P4{LxVNmlixgX~+KvLQ+6yg4Fxa64h*(UA`=v_mvwW%OFkSkdhN3*N!G at d_#
zVK?)F7HS%h**)qe=Rxb(x at 1|Hyf)XFr^ug?8d><PDmCCz@#EBO_w@^Ze=i|LGk*B;
z9GcvFu^zg)AeRuTe?gQ{seI5(8FlwxuD)2<tw1eh)9FS~;w%oWItV~#pzigIHCmLB
z(a~f)fR_w*&h6 at 08Z8H$9%}BqjY4yk<m`t at pnM^QF!FtVdPX`}r-4pmz3;CSo|VL`
zk**VtzFwPc&k%7O*IsN4e;j3tOhLro`d8l<c$~G~StC||>d16NYimV>{(kT)Gksx<
zDwV5vTz7%s$s^0;t`4Do=7A~owU!ljg+jC%lRD{V)VbyX8~d7EH5#e)c8pP><&pI3
zTJow~8ljx?e)uk_gW7RQh_o`5B+ID8fWRzT8kCZ-6ha97-3Rpbf99ji?%2Hiw3ya{
zT!NI)vv@{t33aG#sGJK at fzghJ>XyXbE*YC|5k*n$)mH_)$crC;;WlT?(fvLf{0y0w
z0CcO7T-{2T`mi)z!-5U7D at jKGDLaKB<nGj03Y4F#vDMPRqYDZSoLoWUW at AB$Z;72J
zMV0&dvHfc?A5%X-e<_e*a-~Z>H`0UNK%RFdFw%<P-sK(M{@a1<57U%HKJ=BX=@qad
zpD?@s#f&YT<~*RvM(%Q09k|8Fe at kgZsC{;*18&Q<lw_pLaW~OIa58h*P};jK5bD4o
zO6}<E6^$g-_!PQd{us!;?gLYDDs!Z!BbOp}d5B;jaytL2e=(MNt^oE8oX<=<`tqSB
zbxg(yx$H2GD#?gBQ$W?BGoR<c(#q=Fz?s3WwaMOX4zN*@SG`TmkuJP&D`N4;q9_;q
zqBl+#5}U~U{lx-<BG!B45EkjbYWrDQxi%H at Jh{aM986KHPb&Ld9+RJpx at WA54q{iP
z;0^^&_`5l5e+6M#UQi8AXzN!&P9q!~9YcxyqmN!D+hd{KKgD;eX~no<Q)-IcwuZ$E
zN)$oWiJ(S0#WSV9k4T_D2YbggilmF%Nny6O*wL{dqUf2+*>F`qlQRJzk?ZCtiaIJX
z8)lu&i~D+%cMri%vs(ZwF_#aZ4E8D;5(9_hiBhX$f7h0Z4eE8cdYR^ylh7$7%L|;o
z)VZ9~ba%M+0bQ;jvRe!cSSOt}v-knD2V<>2;<y7g^8k#nn?d at HZo+6EIftZ8KoPtV
zov}T;ixI4j49 at t0k<!Q5hmVogIwM6f#%N8IP7Je{m$gNej at ZwyZwvU1>wppEgy3fk
z{23y8f8$BLcL2gC3t5 at uEHJBc4&R){N1_+%joWfD`pt)e^{ShEo}w|KU8jdu18=Y|
zBG9q)|24}hmec5PO0!8_q>(x@{K)YnB`-b!HdESDhaoy<UW~)l0D{+DGBjA?P(a`f
zMPUSf&#&5`V<;m{cOm7mykAGTDfPk{XGcy(e**=77V6i54i)3#=8UdxV at 8f=7+Xd3
z*9u6A%0 at L9RH;KV at EOqMPJFlxbC&;6N at LYB?=I*h9Wgtn4zUD>+~GuwqUD?p-Zh~a
z-=UD at RcDSI%LY=l40KX at p9s<C-rVyAescoqqVS?&Pkb=VK72^>0MxDeezj36=-zkm
zf2ekM&7>l+z0`L^2it^dnQLJI`vZgB`j$(UGET-{Or%&r-L7e-L8PnI`J8%88>b(C
zM?b1p at fmDG3uImRs{SknbB6~LVPlE#xnpdWQA9t-)t}v!?_SHj0c^vK9snNX2fTU=
z;1W%~e*O#|kJA}(l;#2x#1B)2Z%yn_f20an at UW96;@s(tk>#dxmbje=Uk37HasK3D
zUCK_0{>;jY1E?Cmbn7|SUph^o$w{RkB9v at qBUO^fBjZ&80kYW!@UYW=Z}OR5`%UJQ
zb at jsdd0xhqfJ(!0jP>{GohG+1e51YvQDK~cUBeCNw$0e7ND5*oBP<QzcMp+Cf4XG{
ztV=k}JFEmT*sq{P=9do^X583RAL`xw1^k`(uCvtGj-CC9uFVNdtUXUY)V48EX3~L~
zj4+X5a3ysO>`P59qP!OW`UiYuC8><cKAjgZweBa*N=(0GL)14fmdQ9B$=^UTR}0Jx
z<=_N#SP%pY%f|p;lJEW+(`omWf3@?Nrf$G2_x`YQVoS~~mgBeWV=c%;Fyb_P5>6sd
zw6^7>!Q5W0f at 6?K_?GOBvf at _*WE71j*n!79F>2g*p(pjW1}eI<a5V1zF{eYN6D`KG
zR`r1lD%<hI4t0YjeK>X2B+IMIOeOMJE(5>FQ!Zavlofv-6;`nm9fNb!e-}9oJs`n}
zO!%4pwl4f*ZF>E)&{z1E18#582gS!)Fnk2Y#o`D7BH0ckEw|IMLlCqjvc{xd%!=JQ
z>=Cp0oBYc9U$AykrO9n>H33m7EaR-bsGECF#39c*XW}@Hrq!k{(pC$(_&drfjJ;qu
z4A00TT~(&ZVCnLa#;DtBf5ovs`W_H(GN>v~du}w7IesvG4^V2jebKwpDuKC<bE%0=
zgk-^J6}UabrUIu?6ibCA2hpAzh$RMEq%3L;@p|)w!KJi`-v@&-u(>YSNBV{acIP9I
zMSKTeWN(?3%92m%i4fn)LEIq*X7ItthRb!$i&jU+0<+XIlQX!4e?YZ4X3dTkzoJB2
zHMEx{!xkQ25jCG>cHr6SmtW6;Rpx*++iqvsar2~((VhSBhkansP(CMzU*6WXsSNH%
zWPGS`E9||J{0Iy)u->kR#cgNIkJ*iAsZN3G6Uut^KPHSlq`jpc25RBMoLzAn2T_#=
z)DDpovOgbY&x*x5e|1)J<)^k?7v#C=-O*cAqRfW%E`JB+Icn!(n>aetSWjZtsMVj}
zv$DZ2Y68NbN*K&0vF~u6j}`$NUm$Jx`~LCmk6uvaK~_Op{- at -_JIqA9-31D<ZX)0h
z;=ww-5MmIK0bHD_iP5HShuF_!F^VtPu9R&2lPX`>rJJqDe<b>A#U&IsCeWRIrqrD2
z=ZR-9ZuP&@Wfv&3qBJLCP)vWWit61iuRMT>L)bOO7#c3Sw}-PUL7V}7`s3L{oe$F?
zs(wA=ab48jX+8b;m^nX0`9)Qn6}+NSEmz+<B6j8c{o?H~d=aWS!DFU9(K!pw^g at bz
zCoI$wg;E?Zf4|KNsw<r3A5i>$O4YLZll=T0qK$zp!2t_80s-7ttq>4U%kvxdvp0|E
z0INB~KMo^~5Jq$#;Ia8b)Y@?9U%kIpw8dw<mdjvT;o^sSMn&~!{FFMnlQ39AM3%DP
zsllfY?Zo8ZUUjy6RBOReWYgp+!?wR+R1t5x>3Ot?f5h^k6WkVn8ArprxBaG1U$;t8
zNxgb5LYr536)Rrjg(d49$j5p(9CPm`Bk}%dX-z2YI-|5D!FUdbsUx>Bu=oigvBsr9
zXTyfll?JHaWj5yZjX-;<a;s`ZM}qe14o=`C(~^U%X-Rb;DUvzUgu;uVqsi2jPBY-8
z<MacHe={Ooi0jVirEL!IWU>=UBk>&!nb)qx`c8%RNG3^Qlo;h!T|Zk+Jr({}qHIZA
zE_DeUu<i3MFMENkv5!^X?XDd`={Jp7(gK}MqK~&Ttkqt at N11Pq@Wf^bhypYk$2=Rl
zSm=k9Z&I at o;ei)`)J$jXR?Rkb;ul)y#PH2Ve at CuhE*Lwti{OmtUiqSqmZKkNm>=Ql
zvfK$HCu&0?8z;8HS$qX!VSlF at Ta#vAWlYWyQV<jWZ*Km>o5S%Wc#CJ7ws^-x`NXa-
zn0(`e#L<V0T<cF#nj-@<KrJRSbS(5x4S@^~;j_DQ(H;N#{6frNKpnJy!m{9RyHr>+
zf3NoW(ec^t=0de;mfc==Ct0)fi%)OB1grJ+Dl$W>Ro7UU<Pc`UCWXZXeog25V2!|X
zQBTIjj|8~vr|_i6j47hZq%Hy)D$)H5A{<wRC9{Aw>X7-*5N)I6mG!yVCxy}*PdKHh
zc%SBLmp8cli-gaT(xXcT`AP5FsK8hlf0~O@|A&%otn~?A=ZTa5U`gI-3Z}1PmBNX(
zNFdLPMg=ire^3BstW}jw;$EqmEFp;glStb`JYhF;b%c+@((f9PUIcP4Bgk_22c{e_
zG$)8j%ZiV&{|fpTP8~axXj~s8b89^j4A4Df06en8{fgoPu}$r32JlexKC_COfA#<g
zLHW8e$W5!CKDpLW-*sd;b#)j%-^7Oqy0DNny<NxiOmM7tRWy(bq1~bV)4Y0djwi+H
z at HILB224H!zY51y_68KBD>{>5ZhrICIT%>!bi((?7bK4}@C#vOqui`Go7f7rg$+tr
zhtjgQqPQ9M<qNl81IZ#1RQr5}e>p=RAgfjxxBXsi%E`WT#<@jLf8yi+X6D{5bR(<4
z&I!l0lcT(M`MIM+oF;CBcq+vfT8|%Ra9pG^m{c{dlNCBT6_|Z^Ek<nFH_73`R{3g8
z8E1gRxOlfZxeyQ%q?Cw(2q{s^`JNeT)5>kxNLkx-M*~%mhVq30MJyBwe@@sackqeF
z at M>5!?GGGSyG2+FYl;Svv14_$Of7f~YjKf5jFTQ7?p4o2!7 at agX!mw4Y!ye#rfAQ-
z3(8G1P%pr3fk)oF{Zo9j^+O=UCw`qsXcA(xT2L_1lituWNmWBkVHT6~RQb;?hj2yl
zm&9!{a*itNzj#dK0#Jc3f4)kdI|Ta5^)sslG;NHqHpARi%}!=gTpB`b*L*mRQ29gh
z;J+KAI#9ga+Xz}w)B7;N9Z!!G7TX&8uRJ74GTlIE^Ew5obL67{Ud_A-!S>X~A1b(x
z<J8kf&|__7RndYPA3MCFzf%_jCke#K-lfv__c5*@OKKPp=?N=Cf6R(K!emn|fBPHG
z*WKc+aKKAiyM2{?_+}L4B(?+-$qPDlA>{zj`ME&aEsQMLut@<}x)!2$Qn**Ny`Q!+
zLY>GRmCWnOZtCHMTXX)s-J=i5l!t}U0 at fVD9O}hV1s<MQl5s0T1|flSBIsx*J~feR
zq5D_ksUk?_sWL;oe`Uo^If>c-++haCkDfjD^0~JuG>;7l(=>J<%L%S8Pd(ZVjfDIp
z;%Zo#adCF4{))v-tas$T)<}tkxy$vP`07 at vYRrFH;U2|^)4P}3V>_h-t*BDSA__T=
zAS<*~$uTvIYfVxCx2>As=|v+Z+PBqWQ5TaPJ+6$H`&nPGf2nYFyq*5*0cztrcS8fs
zuXBo1Q!_`e01zqOvIh=w(rE+UbgJayc?f;iQ85`!kSgnZK|Og}ndCTJXS&aN`!FCI
z2#olV{3#1rvPl_}OlT`p5n8a2DD;}ahGmF(o&sG>+G#KBvRgeXxMGb6mCwK(IikOt
zU)OQ{ZhQM<f2rxEyusiT{k2C(qAN`DGRyd}B8k`=6mvH&sNc1xnsf*yX><ob5b1Kv
zcfgi#Dn&Vg_q!EiD=61Rh_CI_)_h}19WnuU!P)vDEHr`|0w49GXs{W|Js)xbSe-C*
zeMyHpBwLRUYTGv{U?d8~>0-!D%Y^h2HC3`xYOSpJe>Zi{&hf{U8EhU#+oE#^{k at q}
zig9zQ=3iAFt6;<ggI9<U?XHaB!!2dO#Rl%KuVFdrsz*xF78ck}FGAqYob;s+zl6V=
z!l)!i+`QdEXo0XP?;s1n|0-lJEb#Pxzbb^0%FC(r4KTJW?j&9z6bX$@NGZPwGa!Ll
z%jA9{e;i(YbpbgpyomSt4i2H0PzD|LH^oJXC61jovGfs#Ry18vpMU=zJb1+nU6o(-
z>!e-OE+y!cf%jEhRkmY)$xovYqo4^Y_Lv}Q#&=6Ljbz~Ur8}zs&^-hT)4RNIxCt#1
zk}4IlQj<7lN$CfW(uAYsRHEX_!=9c-w~68_e<dCWVH#@jb*>*!GVAN)IJfHKf-NZJ
zdfdV<-2!AB2WW7+3?jnWVr;U=Gw5H<VWsGmjMiGSq;YdkOG_9|EaJ-OJAIDtD8ieB
zHl|ccADR0+ZVi$LEf0cm*&L~6#)#g{h0H1R!n(d*agdky-^Gr2qwqmQh|{A0^B$m<
ze_AkA9K~6J;!&N5%?IwZ==U2w{-<!c at UZ=7KJhZXpcDmkr*$S`+w~qX1uma?!>%K!
zA^4E;+R~J!T;eF7qvpcdT=lGMh3Vu##E6u!;px26W;QHhE^|`tJsRhv*(}bB&DOQG
zqxdj7QjZAQ48B=fST7ckQ#k`u*H&l`f9DQG;Z?v~7Rt_w^%0vbPKK5C!_4NsWlXR+
zGO}i)`BXXAlw!sMlI1ldSjG2VWOPJZU;`F`!(Y~^-&SO?hG8lRHw^OH7P|IGEVY0h
z$-=|50qmB>se#x(X92jgeq3QdZlVU?DSMdVb1xc#_Yknw28^NlX<n-CO_=|;e?-$F
z+O06G!UjcvYh~35F<FNKHJW5t&Ag249%BXr4$N^VSEAGi5d6W53CQ{Jt$&G!?r3EO
zEB$pnTa3ey=QYuO<8Y%kXlTHk<e9KUq9d*jy1m#IPHRKz8GKyEq|yKXlOw#$(m(}B
zjfDy|E{#7nEAcM+H?`+r?j62Se at 9GUwZ6S%V7OCeyAO2&JqZnKx~D3GF=luM7)a5o
z%S3IC2Qu at z2R^Uj3k0DHmq(B at pLSU|?@30lj{jk^hZEQU*|bo)vDE5zlEL00Z8)3f
zBMvisHc5CTmYiVKZBWG=>LKI0A*K!hu-kxbTknp$aBm&-a#qagfLv at be?fo#q~dJd
z-3sad`XJG<w0kfEK6ZUtRoZGjzg6saaut?Uhy_sz(<p*UuAFMw$Bs!Zs00xh`;@I=
zhbqwrWsJb-uZS}Tjq^KYDQCrV+`deZ&mkXi_DbYMeX3R7YJM(?ThcXy=g}HEObXI-
z3(WX&K9xM&9~xq2j+*4`e|FT-Rxv&~5>wrS2AX3u$$%YTRXrtZaI89lArr!yZEAo%
z+{WJhIgXwh+iO~2mYlm3Tw?DKZ%%8SOMYx{Gt38!S(_hM<g0_;w!qlEhJMfPt8G$8
z*P#{o108w2NV~2QExmH+etjzZI at H9}j7=rxIO6Xl`eASqHBv5gfAFrbYK5zK1T4ow
zZ7k3hL{JxYWqu0mL~miU#PVS at KzHhZ05h%yBWx1qr?x=sSpbSOVQbczF{0vhn;tbH
z4}7--ue}(+U^gSfyH`j_9LUbQNLOPGNhe!GRW1_(qU#kT9s^fd^#XJij_Y?gmnlM(
zvAD6#30Y~xCLQl2f2}FzJ$SVTQ@=V^``YbwU-KpXZpM4h?X_NcW-{#RYp3C4y}YZ7
zE^Hyj`p&ZqMU9ql_i|?+Zn!vaJru5In&F14geoZu#c@()9p&)%b+hGf50lw8QL0b?
zG3`|s&s+(Wiv6_LKw6-FS=YT=Jm04im6!q1duR9NIaFLxe-#wU$($YHAB78J<loyT
zDdDsyWGvNtwMA^x7MS5$920tJ)+g$>N%a66`~VL`kKF9hpw8L*emDVHb{Wla9URl~
z?K(%-F&b-TMD~nMd5Frp{K2aZ{${6J9UBKGP9mEb=_;KL$RBS9DeU)IeplLY1O0a_
zcFW*7{Y<j2f7C5)@ejv3%9oHRi8^{d$e=f>#4magVR8LM{IuOLeyZ}e^zX%1lZe6P
z*s4ueHjXcMs4ef~lw_C16Uh;9>B}xWsvSpi-kj%t086zvSsSUwKsfM#a5OQwM}klH
zGJ|{U|Im(`a1qfNhV+Gy*iJD@{2?||Wv%$RfwZ|yf6yAbZ|J~Q5e#)~{=L&vbCp&_
z?BinIa-i_}fhOz+H_vM8EK^8b`7sTQtr2*?X_l14m5y5LK#r4KA^xI3Ne@}JUbj*t
z7sO;Zm;30aMRS1F(B<QOVc}485Z-V|K945**sIBwu#<}Z^t1O2wGT|tBa|BO-YF95
z&^hrMf7jfzKJ2kg0*pnxyrMC0>mm@;9x9%LBG>wUA{pr{-6i7&?sos4XakR298^-I
z;zjR<Y3 at JOP$+a9Ah0~&tC#B$!}c%v2~1{GZ*@flcthMTl7lA77#;U$+mk&Ao)p at F
zd1>|>iEcB#s at 8yAwP+hK%3Au at H3^Y2(&aNFe}d16C(~95oG^gJ0)tYv7Q*KZGCe7R
zu7DDjfa$DE5SS|KLUtsu(TYan{;#nIn=EBt?{k#@UGT$qw-FG~WetB>KGrw#C#}@R
z(mQG`y3X1cNbYc`C?jFusFpShn<K(=ccAf0;k~Xl?uL|-)Hvl35jp7s&CP=mvO>xe
zf7Nq)y0bk~&D4_LHcmEi5g8*zd)d<)wyhcH=;~wa#b|?fqZFiqS*u1fbo8T)T{b>A
zNNx6WyC|GkMh%)wM%AP|Mi<wvGf6pQ=wH}mC at Ok(h;-C+q4MV1T$J~oN0>?-+#4_;
zG)bpKeMdnTUc at AZ)Vot-M&4Bu2#+c^e}OF!igLBp=>E5*BOschCp?@^QGe|s1zbqU
zCQpu~5j at h6ju+{6Pt&4PEOe6c^APb|(tone-sf*=T|PPG3z*F;e!+qKM-)i&JA-!z
zBE-v%j(%lU*IfINwwY3?3a6~!u97nrv>tem%pJgjFps at mJ}Emc!qIuh{P(T&f6X1<
zONv}ujkiB>II%%PWOBb%x6a{_5}6#%=QjPILPSIbJOmYglp=S=6}C%V;QQa<F>v80
zNG*M+oGrPCfRHl~g~@0=SJ2Z{w3zI-7upIQq9)yVK3h=;Mh;HnQ_Uhr+xFE**tP_<
z1#@32q8QEZIv?d7eEsKa_A^4+e?($w0}N=x#-+ at vr@**C6GPhLh;*tuHGknG{BkaN
z_0_3q-Oxdsj;`esMDZO}=`{Rc9q3{WkB2Z?3F(RAEvI?5p02H{F%Yz8z`7tJ$`blc
z>%|7egu9RxIYM&ANYqoPA-wwwpyK-(fMjaS+`(Rcs~KO-fh4gw&aI-!fBZ5?;ZiW0
z;vXgW;`iq4M&*LKNJCH|-lq+!y-k}l#wCyWzAVxxW;R6{#?^}(eBy&rnHSDe2sLvJ
zM21ck?kz{aZ(LlNfC3Yf1J{AO>m{$y8A59nGVE)6u68RgUBiMn=#|~>1{lUWB8cFN
z=!zzwbdH1L*1D<58?1uUfBtfY^uppW0V$6+9&<>KsiT0)5t{{#bX?D)1kBL$@k!=0
zh1>wt%>2|#^N@`ivab5<pmiaEm*a49-wENAGFv(|zhe*Wvc{62nlO{50bYIShK>mZ
zJKpKsG;-57fbIchNA(EHgdzWj_3VI=O<Bx;_<E(WsWFmX0if!xe-#|rvuj+ at JC#YL
zpM-{d6YBs30{(ix5qdDY<&UVI{id9Z2e*FA`?_Z4ww1ZQ3>Sa$<Z}Id5dZ7zkStcE
z8 at hKwbkca9b6fXjie@1K<~{$wn%k2-m~Js_$zEI#W0Xl|>njd?{203`0jJ2De2z~`
zWpuE%(d4-#gD9CufBU|dZK)hLUKY$w4j8V?X3ghqsP*M50sB_4z)0;~(p7GB<u_U@
z2NG!Ayj~;^Kki!p97w4W#addFcINt}c5|7AR^2EDZPv^V4YCQZraP}>fNrPwtWYgs
zY2 at 6?iVo);E-hf6g!4pgpOP1^osW;lALu-Cnit?2YM^%Qe`tMAZCJ8|tpf3d&en`n
ztu6bF!<GzC)Veh5GbQ_n7|`YB*Ok|9incG`=m5N785nTl!WD}}hpqvqYeVfD&^*_o
zLcF721c-B^50XWwR|?n<eE at p)I6=fh29_d>1<osH;K6u#3H)z;b9F8<m9rt^C;EX+
z^T=FET3#14f3Zl=QGzrU!2;`9TQPlJP+mMJ;N9(DZ55{pb0-|o=lABwkuH`>PXLJS
zR_HtZTwT>e4POS6BKJzxYJU%3kr7KSuKJJzf}#A7`LsFB?93Qj`5LfFr$S$OU84I8
zq~?UHBu;Rb at i%x)#*E9c1_I7CYuy9+_%>Lghw1 at 8f008P_l#Ag33EnQ^DYEx`~lLv
zZu2^b=vGko;AjUZ`QJ-+UaP|~NAlCYhZ6)C-7R9yjs%vu1qn$xwCbN~<Yzne2C%SM
zrM{pS%G+OV+B%eOURI$*@rh_%I(BGj37g1GbqlQ6Fug0UB>5VKO7CkuIPyD at yI+<z
zFWbDKf6*^=*CTprII#^i at 8+ftxoXi+)nXXV6ecYV90|5Vr<i^if3FOw0gtAY2!?G|
z#jNwuy3-#vF)I%MV~3aTDaMV7<x7J#AUHW-00E-)i`k9wxL9XLIE_rZr2+|fA=MUU
zkzn*R?Zn|>9Yr3r!4$?pBwGc5i!PY&dj#M_e`fDDYZ)$;vjYFRiET4bx_>3oLLAi1
zd|FY!Nc=8~o`Y56Us|GpW-{TzfQbUX-p<00t^A`N`VghdTNDBl%Ff9{Fe=Pf_oKHI
z&hRmB*$P6+rJG(yXS8+=*M8n;u*t%jUkyQNwfJcwa<X82QHS)>q(bm{lxTw*bJQgJ
ze+#xsus^yHk(KtKjlsK0uk?MIxMq-_1?Rr(cSKyoEdJyOhF^24k^go+mk_6jD07G_
zzoI~P>~Zrswz_3B)CTvgnduSqI#{%-AjG`-T_Nb<lBv6so1OEy;y~UoK#6U?+;a<s
z?*#8?GQoT+(tuATw`Msd#m{t^)mG=be}>)+2ETf>JApv=H3Vh5+gMNzfRvX~efkeW
zC^?txLb>{G?BEPR;_j~2<Ucr+2QoHX_&oLASZJtx^CUqq-8c?=cRwNG0t<oQQzC{L
zksf-O<=$*dnDtK>X)%lPwW5qZK;9qpeBC<<A13NTVvnz`c7h?AY$XMazXVInf0^@g
zmvJyY*!Q`vdrNSdVY#RaHY8#ht&C1TDTqqMo^7wj6EQ317*K=vbHZ?c1<AH`lUSo$
zgC5;D5Hm^w)XK_U$M^R{<~Qf_YLATy at l6&F6otvHmj?;k6DE^Y at b`B{)-(@l?yy)B
zTB3ipM0)Vc+(CXH-c^LLtlqoBe`*&YqCJ0<pb8H#_5wZL$7fRa)&axL at kG>Cu;t+G
znQJ>By5--!QmCmp{p+&B<pRYMCZPQKwGi-<7w at 7OBOab&Dmd3z3d5{-PRafiEAcy8
z!-#&j(Es2Vo5icv?ulohdIX^yE%k&Ij+YWHRFlY1aw+*(xIpDvHC>x|f1EZN)-)?_
zi`^4O7#cT?HE4!+;G766jN|H(N>pelPEzRZi>*x3rVsps4e*(LZg#nNKl}}h%Hs!Z
z3X-CRxZJ7|Q^b%N$G8J%jj?1GQj8g_&LPiRC6S^;0llx*Weu>`v%v^o5L`8H>JQ8p
z;DjVC4_F9KlBY@=%o>Zme_zt8v3|2JrVuGLBC@&hcNlG6{Q~zDehm~pj^NHjRb?g5
z{Y^=YuyD^e2s$p=ZD-k~`!k~_MD`F?Azgv~Ng_`Qnr{80xVQgi3GR*QBgj<?v(<Dc
zo)xNQhmsI0J7P#6?+>b+WZ#4LX>9Wn_C}8T7T~cG!z^OiXWPpze{(Ogd{8~vCr7uu
z7Q&=lqDn4U&A*DM1i9w|(sIU*_>sA<07+R%MN7 at USAxCKTOAEEH<hg`Y&Au@=esi{
zT&TxJ>R<M5<};7I6uK76io{7=A_dyx?xg|<(|$H0eQkBOomM?eIKF^2rIlOG?nJjf
zu1AZa7OFo80IjMqe+_<(@m2%qi9h1Q(H7d+4*6}l?7mSW=wm142|#avIBCtcPb7=D
zZpyZ>py0956=e!AK-~2B)gB~10|M8 at QJ>aHp7)(#SjMuB%Pm}cm6Y@~I}kR1vjo=r
zO(OiV533ajwD;<fJYj<e!e(}-VmFw8(BN&#ohTE9nMHp)f9BhW2|ax5RWGqWQgCsd
zgAeca6zs(+i8vbw2A^5x!AHywqBFD3-8XZo;Nfvc^EX}6Asz(lI*}S{&+qyKq%#FS
zd<-l2a<Qmk=rjJi2BN$~XPf(fug#^lsN$aTp?}{tSpznsQf))hM~5 at KI~ER0dl;`m
z5~<5JnfrK>f9JBRvEP;y8XpDgbUR?>OhXr}Li0~IPOIwDl2ttwO3OtD|02|My*(%G
zDW}Qz7#K#0VpwsQyQprn4<{hQiy@&<q5BUJf6Dn)Y>>pNrJ${5MfT3dymO4DvuS7H
zs?K|wTwG?xcbKvwslC}&u&Kn6SrIjY*5VhSX&bVKe_ndVdsCBZJ*XFL9!>ar5k~`+
z6LIYvo- at o6(CS9<Lt1$Vs#@tJJ+toLt*@`n#5I+LLh9$E8g32#SPejan9XtTdRm<`
zYe<>iY?F0xoL^pD%navN1i7}|UdZAj`X-I*e(nG_`2%(?<WXyMZmEnKdG(f=Q!}j5
z9oURLfBT4;FZxu-=OzW#2gj}#1d8cDN`r0WSNLzzEz!`TEo<VeNxxs}U1dV~5r+U;
zV^}($!LdOfO_6+ZW&KhwrZ+!=Y+g17VLc%oo%#E``t7~`d<BY#W%(+^=&(!b2QF8Y
zDWctetbwRc?c9|+qBACngvAUuF!8%gx%^LTf8=l+g7fQUwqfR?&&CSU`QlIxtvw8V
z!?e4`J|sruH<OeW2m5y;TvT`SML;0AB86nFQdT&Swe at bc+Pwlj8|PV_LL6eZjS;TL
zAgAZbk>3KZOqF at a7(j-8MOXlOF0_P(P>DD8lm%H(#`XH%B!i1(ad-jL*R5X-HFgEy
zf0*4OANI^Yio3uB^CPjly~olAQmkm<_CSWxOvSWFfM4z4f$-nGkjIL|tbP#L+#>;!
zaAfC6XbYEg{v_fTbQ*IRz!A1Jd at TW&!9rn5rGx&;dg__s*B;O66EH-4X8AInLjQgH
zbC$0Ke>ggk`<VD-G`(uF>F-kM-x3s|e-1$R+H(OW?FC-3*4Q{;IJ+q at f~mk6RUzbz
zhf)8-OurrWRGp73 at nS>JeXVt8B;hWrlHBTf^`^(9t1>K>ja$NIx7Ompm7W?Xp+P-~
zCJlD>q8sGs#WMV!VtrC1^;u6 at D;<JUJO^MlhNYRdH%5wSb=S6@=@VLfw6kove^9io
zD-_?tUt+u<7sf?*8I!Mzh~9&K3buW|`YXEUJDq(o`3%v+!uU4iZcb9VIK8*(A*-CU
z7oRWJ8N<`qu$|?H>}SGjBZsb)wJ_&HC{f#0fHD<-C$2laW^S-3`~bg`Z4|cE9w7zb
zjoo)KphD0r=dzS`=59dyq%aK0e`e#v`L93@`)1{zQp7wRltc2le?ry8nr8mSwQCrb
zrR@!=ZStgkIm5<L;r>DI!MDx$IBjxw5J$U0W$?SbW>hG-Dv^Bf<ek}m7zRSw;)o&4
zK|3ubuTjjF-_bZ1 at ON?2oVNorN4eX1P#eA#t^#oeh0|<J+;iaXC%haRe|p7QXvO4Z
z!OWyZE(<n{iqY=>@?oCOP%voveLqpbW&yUW3oF1nWe0AS^{xm|V8^<zjx0dx8r-V&
zY1;pFA2>A2r86N}C&VGLqzp!Jh}eC*DxWkBjHX8Yl))R<-Fp<OH8ER-7~NkT?LMnD
zqZ~dm19$Wdgj=~b at N9iFf3rw17ns>k8h%<``?X3YiRw}?x{$h0M#~xg#NWn;S{|)P
zn|ng7%BK6`X^NnSsRWPx7UhvdjE}74P`$o)8959Q8O3gN1vIr;NAz+DLhTkj4%=j;
zBoAlBYsZ+)Eu~EkKF%+^iOsg95^sVVvHV|!pByR7M7QoD!A$Q7e^Y5hT*Xe~`%6Jd
z0)w~1uMrhM=FmMnOsJ-3Fu&M-EflsKfk!XM7;eL>!g%2xoZkqP8Abm=BjhPCAEd3)
zjwF|QAo{#P<fLUsv(j?sJ*9)?BbI8*Y~jV48apa|$jsg~#z`5glWEWS5GBM)Ma0_W
z&@0Gioy>+&YFKG!e>U=@2vKo#AAU4r0>!78h~*~J<9i+`rPd|Qz%=#JnzPKi8<+S6
zXGg_?;~8m`S*ngpzLws_h5fu9z9>QHD``<4dF!{+KhI+;5uTcSZ&AwNEkvdL$Qdz1
zphXFDfuOdUA`bMq8RNfW{#gbZK&70W!&yIgB!CX}_?R85f86o7s#iK;SP9eVe<i!n
z2r_krMXPuc6a#k0fRRVYD)9F)v35Yx1Y>#LwOFo<nc2hz(TW#XArEY<m=2Nm-s4dX
z8;R#O;EP14jCt|^<_mN^jr|2oWT+8ceuNku(`jk at ab7v&_-D7~@4s?1SZ9dj`y8nS
zea5r?z0yE4e?Q2;nI47K<S_w_s5K<IvwpL>jEmRppRQn at M~osK8n=gfvm(t&kL)My
z@=MmoPAdv!uADPNg_Xze*jf!16~4YC0FW%hGzdM~IeQaBPgiL(FC#DRec`Q+Nd!<(
z0?5Xkqrq>{m+JVk_!d=xJ#pcfMU at 5ZZDo6@Y~Ciyf7e3YRAF5Fdl#~G1vHH8UlEoR
zth at AV@pT2jgntH_3NdEuFOC6tZQwU=(3l}hZ>yoV&D;nB!9I>owYy}dd)KrV at i5jN
zYB{)|bG^WL at S^cQC*YlwWwUWb37-_KaIS2r*3ffl=g}|uJnxz)gUf#vdS?rPoX$8W
z>;}igf2Ca2Ur2K}*F!QAHo>N^?K1f%eX&2yT!^PS@(cLqstBu8=w>`!Ob)zSQX2EK
z%g(exD6*?uH;QWTehZ>(c}5>b9Ig5El$~7eA)K#@5PSse1C6XVY^>8%k)@CZ2llyi
z)tFa$MsNC=j|N(}PF|gY5Fw5VlQ#$|Uwkp3fAOjK5E53l*t0ard at d^V1AVU<HWkYJ
zA1^XQ2Sb4kYofP$cxI;}S48<LxR+~>%A9a at OO1yBfGShf{^EJdw7cSu2vr`7>uVmx
z&m1E)F7QY2D1{#8B5WZfEF3gV6$5$zL@(jdbpSU55DQ#B^2`)zS!OGW at bGujlo?;b
ze=A=UCUg{`)KYFca`?V>+y$XwWK1;{rG7MUr}XDM00PkS?8y&&*SR4--sEB6I at vFH
zXvceo!g+8l at Yy!$9Qu2%>S7CMV1f|oqPYXXTiyMKUo1N7`H?!(hHZddOuGD%0Q$lW
zuC6<!oTO(0!i1YOO<Y5_PmwCzy?P}%e{bEw1HlK)bJ1;7D~p at lDW&=;;GPX~S`Lef
z7kNV at r2>=QRz=P9qO-^yG0iIX5DF`WXBJ9+_9m`=P6 at o=7i31t6xe~Q=-|~TxVn&O
zxbLizED$0z+j}%+diZ+Q;uK8baRZSCva>1QdwILd8yrK%I=441i#p5Uqs|&(e?qR!
zW at 5ow$@!3CB77K&D{yu|lYQFCwdM-hqemyn_0+ at Z1N^60>pUia8SRr=L(6hv6yD3e
z-}IcYdW6ozb2l=3K_c(?)&WF at SeO22zEZv`XDckyfb_Ql`K)8tHBZ`BF;!ci&M^{^
z#X?ZH+`8x{i6r|pyJUw?a%hE}fBxE|W6a|;*qdKEtrteRAfPRCcR78eK3eU{V$Jlb
z9<WRiE4g|NFvv}wB#?8U7}(<Sn*tNsHgX#e5Zg&m0ayu4rQ&cn^2$*zNNFU|{lpZ%
z(YB5nAdB+@{yes&_vUU~7s at 8@h~lg%2>yyP?rQ<M{Yj}ORMw-hvb|%)e=G$+J2$5$
zD<r!lK*S6TYkZh5;>z-`5VmjEYN@&%M7Bwtu%1JSsYW(7T0u3prEBWhtG0ap=FZ3_
zX_8yAwVC9sl87gS1E}`|cAVvPItZ#_8LZ&i(L}HUlTq3C#yt(DyGZ at 8amIddT<o7~
zTL26qE!ld**44}n&XKf;e|^HJ6&dN0Fu`z43&Oeo6m;AnGM+x4a)p0UyAlf>=GRw~
z^!SLSavQn}DN&4cyOBLmVZCLrhk4C|LB?CZogbDraJb8kmP_pWDmb5?te3Mz1lZ6Q
z0QnM4ZxKk8(3cyOih&sMZEwftXqO*%TPsR50BP$?^{bqkn8Jf~e~I1+BQ)}NqufzI
zE0^2mIFe3GWe`YY8f*6%7r7~YHMm)s at dyY{0(|u8^g;n~d+fcPm>H6sn}Q<p{4Wym
z&$}fKjAg@$dzuc^d at dTrK!H9^V%J at 4%|D-LI3NO*?N8>;Cwk{wLqFdXOXj5ru0A%5
zVlZja0&KEbvQU&ve=ktPre>l;_3a*9zb?H2sJm2u<kbNa;zWU`V*2*5n at +oZ;)h?w
z;JtryMU{_@&21{Cfbx;JuH|EMUsHOW3Y&E+bXV|8sIWG(ErT7Bv*JO|TTamrSZ*AM
zCQB)>@{zV}a5rmbT~;Yf>I?3&Vkj@~U?c`NnY6~w>q304e_roweMe{hXw%1cJgP#b
z4GZt$jd*(E1$weQ=NpEFBvf?rjJ9}UIi{$@VKG}5ROWLd;z{jlv{5cr6mO`B=7`;2
zmOtQ6it%M8!w*HUk$0=uD88kv-9AF<7*!WzM%0E at nJCgZ9>A4-pjf~#hX#Ajkt!O`
z{kwr*c-JK!f3E`%clioE)X?-WHUt(n=onBt-LZ=3YWVZs2<k9Hy at bjE9MyRc?xg_O
z5$?qz+>Jm+e00c2z{vjK#1Nooe^M`+r*OWg8mg+eV<mP_eDol43qaBvepMO|-Y#ks
z&ey4)gSD=TdfW^+esV8ey(8e+#X0^kahgZVHSDD8e<=vlV}0PUucuUsrds8KVL2d&
zrU>}f7C>=W4c8bB$}x<j2~88)3_HQB$6CevMNor{kr*Fp=eL&590!^nLb1?6AHzhk
z{n{VA;>>FwK+PB-rX8+rxLOp^`}7lg6Q5j6?@%|G*PLZbKHcP8{HC8_@)V<M&&H61
zk!oMaf94_&r!J{d+Xz$o;fbz<Ld;hs%(|Z8_O;KrCp&$;9{e+$Yr0 at Q=3e?}GywI_
zd4(^n0m2byxc|3l7#{N`HMQGmx}%nb&w88cLoN_e4~jiW9w6AP{i6|r;Fq4;MPY7i
zfIK at g-lojO2|VvsS*dMAh3N1BO|X at fL*n_Je|C;Ms&8uw!P~CzaRtgYKp<QwP?0><
z8t#Rbp$re%`r=p~N2F^xSXbTEf&`vol$oNl<p69d{f2tD8z3K(x0d-Y3n&7^f7rww
z%<R5XAUtUEmyr24j)MB56{|FZU<P1$cAfDJ9F#k54V}+Z$JohkiX5%#4gfcea=mm8
ze<BVJflh=+<kn_{WV$~W5byqt#fAL2XdF?de(lfrZlWLo0S=rRN0bPo1S6I7o{rM5
zxJHEB&&%H0I$$I2z#^f+^t)ov29dW%5vJQ1H1M?#44>4~f-qMcg^WZ$FOt7`#fTL%
z-2E`=ER~|@lkbjZL4{aW9T+S5HuS$Ie`<MWxbTpQr+<l0?9?<n(0y+V&<S4jfOAP>
zB?l0GWiTmOMCL at QbsyvHj0CRpGumBT5|{5!>YwPfD{B8JR!^t8*au9G{73?5Ah0Pr
z89!rBo~NDi<l6Q%xUluNqkke{Oca=f=w3zN95cFPwfoeJyP$1zDclxUT<n?le{4S=
zNOY!4$f6My({lZW?vYuVk;p(q8V2qK!m9^sW}FCW4&igJ-%>+tdDC>0eVFqypBP<i
zsi*3A;PT5^qB)FNnt1VMWi{8Em+(Q?G>N1U_ISBwJt`jO@>B@@Q`0;l()7RJqqi9P
zk at 1=zlBt1RoyH5R at l~73*=f}re>c+e)YtZC_9%wHI!_^_Yn-asV7^#{dN@{>0EG18
zhqx{6M`Lvq&yT`sT)F>r$0;Ioa0G5p at qoPo$CIkdW!o>=FYBjft77Y+gvp8Ep>+O?
zVR=4UXyUx7d%aXS^(lmD-3$|m_D(s4XG>TBv!9Lw%ZW?<J}8Bk$ORILe^5H!+=34y
zRzA$A;3<H4XAZ$n!hem%4|DDGUPnLF5;$qXC296dG8jeSy?_u2z#O=XvfjjtFU#v^
zEl~7I&$ccow3f$>EBQ}{htz2h4#oycc&2a&FxF)N*~~ht_^&J1_;4_a7ALJm^M3Fq
zKS{#0q++vit98jGMGbDOe`fLaHgi{5rYqpKQhZKT|Ab?J!HK at ev1&^_tjN+<Uw{oh
zjcz{wu(YW30hfg*lX=C>zbNA#O$<Ld+sXe-z;%r%L(i45?b(f347O$LB{#l-=p*bI
zSFxHqGsowCX$7Yb2t`%7IXh)@zZEsUCT0zeD#EzCn(m`^sX9M6f2b)gQ=D*dgAgZG
zESBAy28Bvfpb#cS>hqJKC~kd4VD{(U`s##wfIpXN-Zy)#%NA~~{5FU|B9%EBkIBa4
zw_L5aZaD3oKc+*JoLh{mp(H)*fRQV9`-exT7haS&_!Bav>;0258-=$J{F0H7iDtR|
zj|=h?d)R36Dy=Die??lN^PuUju>*k)>dhLeSyzV+2_eO~eem&eSpExl_?!f)>#IqW
zGp5gbP1??ez2py|U#(`cw8|XMt85$k^)J%1#Jz7nLT5n%hl%5%V2r%rfnE}X<_7XX
zRPKug+R1>08g&nIx9<+;OX!L_-k?97`8mpC>u{bXrAj|Df9srv3oD%IMgZs1jxv$+
zGqO(7D-DjHDmap!dqZer%5rC|MTr(+p!aK>4%Hg?;CCU&*+90-ZeY+Xg{oY09sk70
z$(!(R)r5NCPuYM_X5l0^OI1(c*_r`XU7bn_TP7W*>Q=^6ZNcgzoc2~1x1^NJ?lqqG
zC?c!rArQRQf3+<~(l|VBc#Za at djB5CH^}YQX^;+CFJ?)+aw(Lx#uGat?>px at tpwS#
z at zkFE!w<M~b}+6^LfA5T{xa7H_FRO_8m~Ji1aSXfW3vPHt>N+=eU#WshlvaO-G;Mb
z&Jg_C8#b+SwuJfe4Ie|5=-Q>5A3Qqk8p-tm-W)+ae+HhwP9Q>LR^N!J)2{+^psL}8
zNpb$njSG}djPG2WlHw9&d3^b|Bide<1fDTP6#KbA9zn{+7-xK-p_g^YZ?$(ea7ED#
zQ;9^tLuTe_VM6rnqq5Dd|CX at bG$9&uNK}u}g#SCh6TiL-cp9!9im6YF7<urWQdc5y
z)ceXFf5|BXGxi9?g&2C at SK{!C;nLMR+XBS|6g$#b9i)`&YuzDc5Lek>?=!B*H8|>s
zgEi-R$udqsj+$R}d<!~ldqhjIZ6KKNI%>r}>%SzEY*TRIB<yikF=dmIGa^0g<$03Z
zgBlZGO||XCOD?%}_IBTj7nw4fqTw)+pHwe1f2BihrzzcqL<KyU;P at O`<c>eFPpk`E
zI<_+;1=Zf%A-HrS8p%E^r}`9%F-vh(lId0yTN2JNtM at L_q#6<wE*VOGi<jTfikn^z
zvRv=!s$pN#S;m$m at ZNAH8RW^G=&whuC~mIJcGEzRK~JOyVD)bBZdTQYL&`Euh3RV|
ze>G+Far{L@)V{Hg&PoIT2tfD0ebj!XvOJ>MT#7jMzix~V9m}uHXU<`o%5?JYg+(>p
z`);(hqIV0oQKV4u6Fa(uf&WX?j^FCV-#haTT%{dh4H2;53<x>tnQ29^<iV9B45Tx@
z87yG2Q2NjDWI?+3ij~<!ecB3}qR{FpUd6GSXMZik7Py{2H81=~Gi7wSQkA8EQB6q(
zo#`WgXiilN%`zh40Yo<vHe_KJ^zE|){I{ssA;I}%)*IsVU>d9$ffqa_jI;L;0K^~_
zsv;Xubp=5ic|G^=fli((3^(GX0E6z&`%j9O|FVoHH5?mjd4-E2n>4yQT~!Np$tGL?
z^M8eUdiPLWhWrU}UHoMEHfApHdjdWkjop}g>dP0$<O`E~=YdcmsAFTP4&^J`pk<U8
znk-|A<HooUv;s}G&11qxt1F3 at ++4v}L6y$^v)kCAo-dN<?-5?JxO3GJzSbnhec)om
zR%r>5{!x|e)A!T)q(vY><kTaSF`MZMaDSuv+B8*n)G|;N_*ESi?wMBNCMEKQG2^~w
za&<r!9M{>HhrCG5-BA%waK&6VnJDCJMwaHo%ncD7i?+=l>aT at _(Y#imKi+88I_Dgk
zrjD)hFTd at pIrn()*FrB?7Nr5 at hwx({<~KmGw1|z3iJ8<tz0xT2^6NLKfS|Q_34gdG
z#Igb%*sS&02eU+UTgP(bsB!N&$?~z1S6R{hyI~2H9`ebOObhq8p#|gucf$?dDD7!l
zZO47^-r~k}NNV^A1^&p(7fCzV^d5nW-GNL~zFGf{ZYQT$SDQ(v<sdzKXQJYZcy@>w
zsy5Ld^2>pn=-oUSbQ<zb<$!VM*nhU&*m^>DpGPMVp_sgnZeA>v at 1GxkUQDX>nH}S$
z_io@}?oCO&t)_yN^PkGQw_Tiem}YS at Fij-!wmy+rVD`6=>~uFsj0w{I!I+m)ek9X6
zZ~ssfEZ`bA9gJztVt3l}9aAdWN>-i(A$(aXj2_1w&_HEFgHatw0|3q5TYuru*wMOk
zfl-f;SV)IW40Ek+jG3 at eKH&tVleY(9hL at c2kTDdf;w(6=O<36b8fPe>Z?`I69-D&K
z2<NMArIalS%t)RL>v*J}zv=lwTfBYf at Q6r|UM~ry$|wyOd~11&dLcEBsc?nM=Rgj}
z#~QLR(OHwzACHuEU!f5RrhlBw_gfG3jBjzAXh;h@`slkRZgQZQ#WM&&p at +HFyCAY!
zJEs~SpRo~8y7(>h=|PLis-6aX2_~c<$zGA%L90LCm8hc?5X<_Uci at To<+l?I`<}qs
z%2vk_4tIKlG{oPT`xCqa(C3!Ez!Qi5tzqvIh}Z5$Bt+z;E|^v|H-Akqq7B+VzWL&R
zlPR|ILtJB9uI5$Lxw_qKV$ji^+ZV}sFM-E;%%r}oi{C6Mi&QK<{P4mF^arOP at yci<
z0)~j&MV(F4hBnDQ^KC5RlsnC4T)e}i2QMPud1dAxDTsb{Ox6yE(wWJKFqe(34}?C)
zV+#4Wt`rw`2mcZ2J%8n)hnEXCa&LMa*IGA_H$?!Tdmf?O+WR+3;l8TphDFJ%)}e%m
z?Zk)@kHI<@X7ut;XOyp}z>Q-1c1W`a8Nu+Q5hlk0m=Ge#B|V>@1VYp5-pBhyLrsLo
zN9{4)T=gUzy(#1P@!s6Vpj-RW&>(vL_JYyN=Ws$NlVNQ`dw&lJTbc%R>K8~eJK`(~
zhv3rMk!Vl}SI^^UBX!)VR*?;`0CL+|NBti6OTe)L%A4d`97^w6#rjlB&mY-%3H|*Q
z+^oNG(|tyzs5l;r4<dFD1GW|qofvfOEzZFkgFx<m0YJosb(xJS=<|AtNx>K at 8_8d~
z%pJ$9xqxCqseh{927#9^B+=`p2l|Dz(XH8TR&}z2fO3!AAD2f}W`fBlWqa4x)-19i
zeXU(n!u_R385r$<2fkOBB;BTiKZToF;KI9jeIPjC={IB9)Mc9pcTJ$X<}bUs+8gRw
zCrvn1aCbPsvfYh&{Bg`LrsovB^fZRE^7t9dF9j}<M}JpYq4%Jo*G^ZN!6L%6o(P$s
z^#@S-HuQVzEv0ta#i+rBy at NSFsV4-n0f~|Sb1bm+HbHF?snWYe`e6t=cy5wMC3l0v
zg(2m*ER&yf%$fH6kG5m-%BnQS>!?RMt at ZG`?hv-B^?aLGTjbLL|GIkG#}ou*Ad1P4
z!lcQG=YKz)F*6<!SZgXKX&7Q-?OIfw>|y5kj0bcoB456)7&FlMS6(MPwBps%c|;A9
zE}UMm7F3ejVt(}ZQpjiYBu^}c^dXqI at mV>pu*^x&@MJGM+{aFGM_drC_O at 4#j3yOH
z;{)zi(XH5%Yu~Ui^C$>AEYlz5oC}7JNYM%FFMmTdoYAj(tgJ~&;9^Gy+O~prFT$*Y
zw6{U5$|kP|ZPJVc*Bu-X2hCG|e4OSXyh&I2Lay1A<o-s5ko)|>=%7OdXxhD53op-0
z+(1_hwt>Wj(PsszH*UZAPaN3&)jg-Vdx_;I2gj#UIvXrWno8bQE|_5)+PI3<4{_t@
zlz%+&y;kAY-}p*8a9Q^@TcY=(8ChN}r$YHZ!Wp*`4?YH8bOCY!8fX`@@wmIB4tiAg
zw5jHfMpC=eM4T*Vx9($`@V9b{&~deFrQVs>R3u(7n(g6Ni(ujgJ{@1XiV!@1aJzFk
zDiGP%g>}Pw+VE_vibJCDC~{Zmw6|#P9e;h341erxp8Gn|21$uuG%XD)=l#@#f7$(#
zWRK?o>xK1o*C&}_M-_X at F-r~Z;1}<!4Nm{y2`t%zRNs(;g`ks(N;_K0#+gWjRdH#p
z)fI<dn`F%CeNU&NGk7m<S|NlF>ux#~MW+p;S+2h=B8AkXPbbLbrGfjaHYo?W$A30*
z?S__AP_C{bK8bNn!xarnf*v8lTwdH7VMNcOCZ)VNCLdIiryF<U at 7qzhw3>0p|KLuj
zY7z&!ma*mYE^C at cOjd)?ndtuk*8GXxkD)VNgitmHIgTeYwN*!^mO&<<0NL~6(@89t
zkU5pK5R=Up!x~q_BZx()opZyuhJO~p9&94TQYRHzVDWNt%8T~*#&YO&s;-{g;0 at rl
z)~(^Jgy)y28 at iCAc3?HUf6YOE(9IRF^T&1_WD<;><ee8#m01 at W4rjdH0Ha)ijm;A3
z at S4cg@=+6bS|HzfDDUJ@$Dv4K>LlnoSfG<8cUHx`8_$nxoJirhW_?R60)Jt!>kg_|
zvdOtx>%U>;@kw`yjScE at eUzxM-H~(H5M;-~Ol7qz&ZmMrj7{_8i2fH>+Xz*xo6VON
z6VVf7eSNwn7R- at KmBeka;RZEsCu4HQZ$NDr95FO&ZIHvS1{2Z%k3I4n=H^}Hq;Ymq
z<=rTSW$WpwGRON;L5Z|=Q-1~WR_dCxNv6D+sJnIx)0xf5_?~{X(eSyD at IfUWW|KK=
z7Rl&t?dKecmu9e%<IA=7hViKc0E1=TIC=@IlCVMtOxRb~J#5F07iJZ>tRRv~FD;*J
z at erkx@qOjR=Z~a^<QR8*7*hb=8fAtXA2+g&?u_H%YWpjrZ5Ynh)ql>XBqMa#T7O(K
zXJ!m9E%}%kGa)~1?0xbb;FQy+p)8#eT7^aPohgRMXmEBbE}=R&-DTFLcspOc()Amq
z$0#_~R-l4Mn^u%;RD-)Imc82mmJiD?{)9y=n?+y?lxm-%Td3EC(7 at 8KxhETUJ->Y4
zLBnHbRF7gyi1wlLz<;j|_Q=Y1ljj*55tX2<!|i<U{8K(o9IpDbzu|QJ<GiD!P+v)R
zJ7o_;V5b(yP*AuS=RmUbIHbQAtKs(YgqeN2dy8SgrMqt5kFzXuHF);CI7s+&J*(dk
z#5 at RhXPH?)=0sz8RhCjJz)P4HN(2*dOn&(Rj8hJ2sb0B|aDUp$EPlNxo*f11G?yh1
z>w4FDg(<w<w2T at wCA_L16S4ReV<+@(<%>{r0h!Ay1#ZkfQdl<xM%onlN`Y=K6XjN*
z9^+kJqg($JoN?3df--V?{K|+%lZ^TSA?b-ivI$Aqe~hB`ExAU!g}V)W5%>wWRS(;3
zT(oeO&?wg?4u6~zho5~xoiL$dXp8ytr4uYU;QXzUHH3MmpjQSTm9`ykD$)UDFmZ`)
zq(TebQ(DIGfTSJE_ua|wHw*{rJ76!T8HkA7ot&)Nk at 3OuB{w=?j^Q7CCKPzwzy-iw
zutW$N=fAQZ4xY&Tn-n;vYLAp=k`8!%OY?BSWLS}&Eq~OQ4Q6)VsRl at bx0N?@$Ini|
zfgXnZdtdO~$`)$No*XazuWu?Q&j1p3QcDLTGzUy at KwYj>)$fJAKaK^FlyT^~uf0PM
z_U5Ro%~gAm<AQl*N6tR`L+Vk=z|tR>ABUix-ilPaUV|aqGKVDD`lQh3kZ>FQzG|-{
zqwRm73xD~EIURqDG1Y+`UA%=K*ZqyDAE;S2W<Wr9`-$rk{JEsaMYQBC_<i;$8$M5m
zh2k(rU$v#YegSg=JRw{Jsn4pR8el6qT*PyO+wuP^2>1x9UfM4=2pmshOQ`QhqAeGo
zqV@<xBm?l4BZbtgj(i%Fkl1U!lY3~r-JwZQy?-w at sJ2=8l8f#AmXlX(sAAy#IG}BU
z at q?>nNk$l3OIxDPW^qaH;&q$Rh!$Qd!F1*o7Pki}`vz*o<2fBSKN+V;m%RepT0P!k
zyvceIp^Wm+4MPE?k$U0gcmSh|l40XjS=X8Mmmn3UEFnyz+|W&5Dh3G=NGjr`(j+uh
zR)0|GbaIoV6csHTrxb<!!6`L2ZG&F#!FsCpzHy%Z5YSV6;b&Cabd{N?bXec|+#sg`
ze||b2D)x%n*D=QZD7&fcFCH70bxmyaJKy@$me3}YI-)M+M-!p;RuVOD5d}|HSG_jM
zVWM6y&LLhozoixDC~try`dNrC)MV($Pk+jAj;fjs*@YzjADwTqW76`92&!l&p51T!
z0$M-=B?zt)12-J+G0^)*XnQ}CPM~>D{K14Ymu3X9ONGi<*0K0OFjqn${DsV#4{$F%
zJ?a(#t;%55HfZ<C5XZsPdBiN1L|L=*o;TL$8e|HRj~?qtMeRYZ6~NY`Dfl7427gh1
z92pc^-H(5N>HRtuOW|o*YXIXyCzM(xUx{tS#_BvHqEJel4B6_Oqm=nbc&|XPQf at +Q
zNTh%;kZj}9<%>v_e~&rAvRSnv`y+}m<u*?EJcJ)2e at zh7x#==Ycw0Z4tdq$U07%9t
zHDZ3?DaWTgtO_w>clc(edB=3i4}a==@ZU_$$HYxBnBr0~F2jOL*`R71144vl#e<y}
zGF_ZrLUf%spc}r`F#>C=>I*`aghh35(MN<W_)VwQ#uH(E`rsFykBtZZy@%~H2^f*q
zr<Z%i_bl)AR8Ay~IT!v&F&crwcRJ8;3|;GUB1QA|2X|6g{3MJLwSGx*zJEMQY0AL_
zTVL$;RFuc*_C<xPVSeTT)8t%cva%p(PGHkJ1w}{a%A#pLp02ps73B)5mZ23oamM^#
zHS%-;M3|{!)4sm1BIC#7EW8NK3{Q at BONMPynY0Fk9I_&jI^*e~Oh at uLL=kJ6dXfY|
z<;J8Ics{ZsAa44QrL_qDwtwq)FwjzqIMm~DX at YcHEOo56IOkL~MIlQ;O&xPf*!$Lq
z)EE=Zbh}EMwKzd_t$#F8eKGA&421iPa(xi<Dw5%(p`_qIP$Ik6U%P(;HFHQNG7X}m
z{*^b~m{ISf1iTB at Bqz2GnKa%3!85&|`Ig1`QrGIyCB_lLv3lgi9Dip|cB&(5<*G5B
zOGEuirvJ0IK;qU`?{6NfH`(69Wpj)}F~+E<-+e@;)&87MeYg?f1ZC7C{1)|Ses at qx
zhCTw_Mk8YP2H3WB2oUPmaZxiiwVJ;ozjxSDF at T=ccCdb<oga-;TlC4MehDP`d(TIJ
z?4v5hGU_umb6aakAAh?Bak}bhi-q{`3i<Y?HR#k~-IuNw|9v4j1!kCG4{{WioauIy
zs%}pej<G}~5Use|>;ljDHPr_e%nM4cqzv40qp?%BGNs=W0|HSbaJ9dw?xVB^eEV8N
zbRE3GVqcS7{xFI^(p-RkXkCjZtoX4&aShnqA{tF4m3MP!hJWl at 6+gBE>A~@?)Nq%(
ztdC!sGDTnEeKRe{g~K;c%=It+{J=t_OCM2I`LsjdLJ_ at 8lY;|^h8%sRy2b69i at rV?
zU~5N5@##T_kw1*>3ts;!aZzJ3K&z5~a>Gf!j0VSB=Gsqe_Klc=iSTlX(j3F!Dt8Nh
z%IRCijZaMW<$v at B1?^g<^%YR0K=b<sWTrTPmR!E~op8%Ih`_R at Z=&WJ-{--n%P6}a
zyV^h5-9Bh8-}{!<o0vc&yiwAOcvsgA1aqmVEbpRX#vldR=(&5&9m?<scHu0q4dkky
z9Np4MNpvhfB?isE>Bby6N#0w=3l~gt(z88t_OL~nA%FLEKpYQgCv5-d&3ozjh&t04
zt7;^B{I>KI!a!{v0zbF&b{PakSF=M?3B^Xu!BBzhtUHH%Ewd?*h{!fJM4Cz3^;7V6
z$Di^r^9cAo<%-l-{H~ZpUYEThG#sk;#yIgd+1C;WbuB!v#c7LgvP1J?TZ&l$J1#R)
zqUifn!+%01R9N*jGr<_uS(y7<>TLK2 at VrxrxY<5>^-O0ZiH-BtpMF~*LVkZ*1CK5q
zlx$Xs!mSV$4aaG!TB22>kJCNAu8MVsq+OOj*a{I44??DVP)7I@)ui5)uPTv$LFyef
zKcK;M$Q`9+IP|vP9;zv^TS=p=+aQv-yd)a!FMlGRpQb<S48p4D#sq^aEs at o^d~T==
zpav{_)R?g!8-HKYxI+Ha31Y8CJ|;->yD8gw0m8%l<tbLbsBPo9FpOM+o0#Gj>UG`(
zh3-G)Hw+fr1-=+bZV=3JE)O8ZD*%p4XJm`nN5shuK{p)W51bg`g6VPXZ^`YmB?IOO
z?tkXbYl;yZCx_KNH)7`Jj at J2k6xO9VFndqKEHjfFs_L3hx7`37w&En+`b|Sh(|uTD
z+LSRCkN8yEiuej84NR6;BOcc~3j4>1 at ohW-(_sv7H4+7It=(tAV>AdPHPrh1inW2|
zeQYE){lRTDUgFG|-Vzv!gXr-+(D$7c(tn$NVCu(6F4SoRaxPZ#%9M`HHP_mWb1ATm
za(n#ht0_;7Uus(TKPQKS6U)*A7g8%@NrjZIhs<LR#q_*hrz28e>cQ6=+F!dnB5amo
z1tontP<|+ at Wm2Wl9h$Ff=`@B%vSu$sqI6+xNPtE87rWz8Fm0~g<V&e|;?`^75`R15
zJmc>frT7^~knmHv%BJAaeaRDy?5d_%ZO;v#ODx&zxCtW>9edh(r1K+fk$HiW?nM`Z
zBM4=dgYZhvpLBaHgHcp~EOeW642)@LbThe){Ii#%-03p4!^1E4zX~mxG(wyi5W2vh
zP%#@vl|WMm at TuXr`S5=ID3V(kEq_*i`3GPQhn(yw=r|AgYg*xUr$zEUJ8$l&H1mRT
zj2o0mmC4Wo0*>6?y#;qif%hcHN5eOHR%+2eRrr&!(+t8psJ0 at o!B2IVw)zjwo$xbN
z1-Z|Ae?#{ZvOf11O>%w`%GYjw^5w58ZtF&`?;V22Om6Cf3}H~Bf_TSOC4a_H^{uV0
z%u01u0N{T#D6V2^QZudx{|D(f+UOW5LEm~D_{^`KRy=6;M<@B|a`QH%qvKOM<G!+{
z at pl<bo*N=a at R7(7tNYWO%hDvW?B2jAzY447u}m^u<R#Fn-hAoUb3vM^5a*r`?ZwAd
zNpb8^(zgmFXAsoyc4}b&e1Gdv67gxhD`!iO{Tu4zn(u$Uapd*Tpnvu{41A*iw=tFj
z#up~~CUpGkD`C?Kd4b4GgSqgT6 at S~JIEd^X$5$(s{Z<5&MJV94&*|a5Jh9`Zr`$BY
zP5Z(VuCdg<OlhsF*#RK$7n$c*3ZRti9bkAA{fD(0lf_cn!=g7U7JunUou?0mR2lfo
z_~G@`XA!}j6a?bot6*3JTKDZ0Np9Q_+O5wiqGPk1grf17Doa4&`4<wb<4pProU60(
zl(Pj#_iy71%PNW=o5w><-;<_fIp5KtymRSH-O3gKeNAg&9n?>a?2G7U#?BjvG3Fxa
z(1%w~<l$8An!0?MXn&~O at lH_m0)=YnQ69^KC7vVIG(>|1!?pA3ZB7Q!h1*B#(3+|U
z&J77O8m?&QvFk3}RMLkUHvYJMCh5tQjU&)38a}Tycpa;%CxfSN=nJR76*PABQ8L_w
zN<KZjy*HEl=Y9S01ozZSZ+Hd!OQ9HME+uoE9`@ci;1XDCkAE at D9t3;N_w{bSD2&R2
z)eL at vs;r=g;8bXR9Fw#?)&5-dfXXkOY19HKk}<Ci#@py<GzRu;0}MuY(pV4)X6Z&=
z0!h3wZTwjCpWB8N2)?3+7cz__;p>K`+rFP_GIUEo-P7b%@5nnZcOHSCy*y_{R`@@K
zicVL-CIx;}rhg45q)2_<(GDzka2cov4MZxVJeoRWhA^6$2-&>^6%|h4eovixfxyox
z4rE-62K(l1l2h^d-A+brPi&S=>n9=PJgQx5<m!Anf#F8b4#^c3obFvz*@seW23(1V
zw(P)!g8!#HEiYRg3e^%B(RGiZ*XfXWABG?ULPS**_J5>c4rpppTfmVqJkf^lsowNW
z9iC!QY+dvG5Oa+#kzp at M9%!}4$Sc*7dw~YXJ5{l)w&b|tI_7eShmiz<BMJN_icoz{
zr@@2%nCl{F)ZE2ROw~;v$9g(A^3M6Q){NC at m1ryYTA!L-xHI(W{t<}dommxthLEXM
zD|Z=g5Pz|;iY_gs?~IJ<^wBBs4ipFdUm}eHY;9a&RAEjX<g;-tzx(Y!pOS5>sc2(H
zvU!1G&5_aADB2*&$UYI=68F%cH<xiQKVe^$OIUj&#z at mC>Z3-Xze#<~!BW7f`f?<+
zobfG9#x`%#Q|X1c34zSj3uBxl-3!Uxgv6x)cYjN;Ik|SfTtWo#?YySuJ|Blie6elw
z6=ThE%<G+e1kbybCKderm^9ZdxK*jZ2rKm9i>%o>KQy(5r(U&?W?f1+<WhbAP6M-$
zy|CTPSr98dc0W!4B{QMYxQD^3kLHCC4=OoI>eL4|A^=`Zb|5uDsFm`QZw-o3AkEHr
zRDUPa=>(*Hx#GF at 5KTUSNpII3P~3Qx0<&H%Vhi7y-(kciQDouCLNjo(mz>+n)k;?$
zRyJp03R16Gu44DX`rH6-W0^|mzr`*7B^Z$Yf%v`cj3tBF7iLWAxFFh`DbKi#tos8L
zShu2R|NHRyC}+#Z+0Apu0HCk`t0k5{dw-{9Bj-0aQKW>}H`B9~iI3}BgjcH;5mQ%V
zJb!Pc;u1unvl45YrFPB<y7{w%ug6TxR}H-71xxsD@*y6 at WOIvj=17By_>W&zgESaj
z3K3zp at a((9L)bQ2Z;PW6Cl6%c&kHql;E&Fq_|2(0dB$q=3sVVo(r#S7EW8AJhJUYD
z<IKP5?!bv8B;bW*O`37!OgJrjWm`o0S0Yq%*V>ChdOd{-&;$;Qph9}((;PV-9}<GU
zUjt>0tJHe70X^NJaPE!EM!|d)xXBbfUoDB;4g$q}ikyLiyfsF at hE_JS`FXP$@K-m;
z)q37uZomV=1InG(-;9Dqw}_ufjDIFD5ExEsZQ02*LO7MLuvx#=<5CG7eXbHvFbXQ4
z2?M4V$-JU{vq<QU;g;vbU-A^6l}eDl at KYaC-@%FTITXrW#Fl9|hQ>|~jBSHY!y)--
z4p8FTswy6-EcBlij+mhN$3~uXP5=KSjy%R$nuWgR;0L|BHv8?GV1<(64S$97EB_bM
z+2&`j947qVOmH1{$om(UrL%6YauZ<bHB#@lqv=up*beuHd6I}H0J4WXz0!*QGRSuV
z5u^nl8&1nCMkncFVU097se$0nk1YF{BRL2MslQOuLd1Nkz;NE-NAFLh{V#=X-Ko8W
z3V6@&*loZIUTiA|o9zyND}OPEJ88!bt}nS)XI>n&Finh{GABt`j~g0lf<gep1ykQ=
z<R_|{N{lYQ6ZA^^7-FI)3i<_naycsO$EVC-iB=}BuBfnNPfUqG_AK at D>3GP6<P?HC
z;2lr4&{#Yv&(9m7SY-D#5ghzR1eG55NNa-pDi#ewJyeQ0!3ous at PCqTC$Fnx*1IJ6
zSbD$V&x>{*G!9f|s#G2LUU6l39Su>TJFVSVk_?M0frbn?`B<W`q8Ro336LjlS<xEE
zJ^>BYsnw3a;kX+4l}y>c#34kFENhO at If;1>KB1)q{V_tu`gTz#3x|x*lnm%5hr@#D
zC36tpy_#oST>uX8jeqIMDKzus)z-iZz7mI|a+S;VtnvELhV1*{zC=x2cK{k=Ii at t(
z)|JT2YYhS_rgE_SZ?7_tAMvqn606d7Y(8y-TRj2^Od<Z<F=gp)>!YpO#rcxyujrJ)
zhhe0YYtxGHCs)}i|JN2B at g<tcLp(?tlI#*{Ib8*R{3yLX-+##}-##`?JupbtLOCPv
ziTjU&8loZwc_eaGvKG)ka?PQCr`zt$#}(`QN-h6{t8$t0v7RAv|Lo)DD@@<Mxf}N(
z@;Mn)3<Pkt-HrVGD<S?SyYS9Fb56dfZ~#y?+G=8(Ngq(H<P?5Gq}QY0cnt at S|BSvF
zu2zdI6v{|Me1Gn3-PfWOtFLh`q#V7(4h}X3k3!SE_APVR1fj3QqpuKs2{>Hic-vdP
zc`Uc2HBNYvz7fi#_P;gCjg~xD9Mg=OV-9b&BBE*d^ZELYuud#;-_tI~s?&(K#0(^y
zWU_9MOHKI>MZsVw&~jT55FPo-?Oy?T65%!e0%W^@O at B%(0=jB46g2kO%S<D%4}S<y
z;nL6CIpy$5fYDU-In=%<r%!`6NQuf<v=L3Ylt5{%@BC>L(h<IT%=vwrlMaVP-UCVE
zLH#05#0L+gY%7pV=U%!kBG#n at Th}^6E*Kb+4uRT{!*2}`{P{%Qqb8-3mV at 3v|4RX8
zFL7jb^M9s84vrOs<j36vpWZ^S@!x>xMoV_qK!}r-2^U@%qz`~~2}YF|3w%lLT0;Yc
z6mcibCWHgl>}jSiA{zng_uW)5MP at 5!fDh5BwU&%bGo5~9mK5tbSPdl{6`ZHWt%RZ_
zJR~TjSQrmi+kpB^WRZM+`2?X0?(C)VRB3f_ at qdGDgdU-&@JFp?()Ul<el;n_SD4bk
zw$thPt!@GEq9m1d9y=SHd{(w at fylM3i`WDU!(Rl`EC9G4Ojp;nEL<!*FKr61=k7V-
zt67DPkII7{XQuVyrVK$w*9SatuW45)*E<oR9 at NWaB8j8=Hh1$g4X4`<<>9JaWMr<W
z3xABT>(>WkuD<Vhwo8JmLT47ij^3k0Z*^bWr%M;;7e5*WNGy)0$LX!fCN^@Eahav{
zFBCKR^D{Wo!`X~~JUy*`(SdTvkFpKdRMtiI7YV>8j%`v9EL8?93`h~a7onDsMnlnE
zi}%Ys6x#MvQQ2{KA^4M&Ug3vkO+V*h at P9d!X_?#cNHZKsvd^<=*VZ1%GCm2gR4m&f
zW{(_%oSDwgEiG)u28Z7lQM72FC5d$l+7=RL4Nkyh5;L`9>B^%q<87(t(gb-0Z9gL!
zY-`{400JB6jH`k*%NC*4-B_(*J}N#Af9SVB;r`FVOfZBk=CkdHWrrQG;VT&YoPQp%
zq=4uoCReE?Xiiwm3Xn%t&h^C2q4w<lr^(0sY|-jKt{5RQ#(V*{8kG*q?X(+R$t~>9
zt+%5LFmU_fK>=oovEQpUDp!pp$|>nZDyYNMH)bX=k}ip=Nj!lAiGSu%L&HTzP8y#v
zl70NbEKvAL%MV{UH;Q8;wOm2ey?@rKUUSp#>0y6SsF>h%S%Jx#Tj`2#WCFb}=?J7U
zkQU^Nqu=$za8TO7AF&K$Xgfbs;{s1njhd0q!N%O%&l)itE;l{6N|Jja3DJ8o^a_^_
zYs}N#o at 8fqt5A7Hb+1I7>04(=yRpo&lV8v6do6ZdSio>8#Xbvpt0%Q=dVglMZa;9B
z-_lV5e)qp^ZWQGO1CREvpms>%!$3?%vAXp+Iz;jJ1ZU^EO`qS%ko<D6Oa1j=_#pvY
zsVgEt?EkQD?S8+`mCCXMLr-D$9$5e2e4ObQX<^b1NB(?CkGXW?fl5^O%0|>7oy!EO
z*LG)kAyh+=r;N~vCvfx5RDa|+s_g}Y$&}0hqpQTuCTU(bNcKukL?0d6DnR{V_9yt%
z>mkRR at IR!)AHOZVEt!q&Uqe7^8hf=yXXrB4*TM0p_YmiE&GWL8q|?E|s=@rY=g=qU
zTKn}C at -hC1)$^x_zcFMhuJ5vq)xX~1W`v$Ms=WU=gRKDBb`b61^MCjLCS?(j5$XRY
zoYa4+14i>NUF0B3yIMl)$^ZGdE7fjPS2H4Kf$9TfY08<r)BmRRujg1b9{K-)JbJ2U
zUE+l)%ZwGX>+{s-WGn6E-p!g<LX0YLMNL8KX?-U8?~UwP^7w|EYGyAKdq{XPf<=F;
z7L}Fv0scu*5qsJY27kR_tJhiabR!q|7vK^(hXK`6SheH8=1C#)t*e^(@#r6?Ao6gE
zbG2H`xES5(z=4t=JMl4iPqbdxcQm0Ytoe at oCBzt*sxW?!LA5FE(m(uPoO7=?VBeaO
zE)Jh9qJ7~a9gR$33)ONy-LUHBYqlx%SHZhUYZSvW7bUNC0)LuJ{!eka0WnEp&LV2`
zA;G|g<ySj?&^3HtDuDxiJY7cG;nW%#$;C2!$q)_(>IKC4*zN%vXj$q?k at PG$8@$j5
zSO+O5>gYb6<BuVSN`znyurVz4jJ_Tx%vi|pB1}uWHuYfc!LkR8855!I6A$nLlu)?<
z9Df=cX`pjF#eYcE%Y%>Uhlze|?G*5N8SA0;a)Uh_i1~RDsVM3AsaeC>dz=I?CI2Y8
zY!08boV<xR0B!3|P=fTt+z1uZ>0}%mqw*(bg2-Lb)BIEidNtW1C(=Fpl?H`zm20)b
zo(ZTl4Y#jYPUOdYzEINs8<?CURtP-zc2H}^LrD>*wtxIVqza`%#OmnYCRHN0no!0a
ziKy(WYcxI_l<_CrAcqNi-Iv2ME<|PuZ1^xSdscNrP#y&VSJs2*|1EEz5(^hsVknF?
zgoG};oJAM0?O~zZI`pJwYQ%18k9FVlp9#H9F}Po<Ff?U7jA{u)qe15pK at DUaDqZb?
zMC at _}FMrPikN6-2R%mAc$M$c2;*+Q!7ZYr+uJVpEq{kuBC#8d(MngI6zp!E!aIB^A
zuHqIP-y>RoixB{FTn{LDl)PJhwT|KmAXH`>B0&3 at qr=fs at qmEDqR90K`P{Sw;gVJD
z6q9 at cw$wn3u=I`4=8eCM^qXEX!XG7PX1)$Mlz*jQLla?s!wH4&FHmu6|2+}uuV6}%
zMZ!G7fKz>TK&iao9DE9H!MOxfifzz4gND)OPkz0qm3f`SZoqDs%xT-_>SUYFNne{J
zxUxv@<cKxA2~abKy6g+VX at Xg)x6pLD<QzaH^){Cp{DkZ_=Bug1 at wMaa)tKsnn8mpU
z_J2{zGuAb^!lPQYnZIQ>{t&z9(r1N$gLJ|Rku%g<dQRf0j2hDvmmug25{-rvI|D(t
zZHqr6UPzutuHrl0oyzil#L<tFKvdu1h?m0$pHj9nHxBLBC%r9k^yV(arhMNai-|Xh
z|FVU>ih at mqTRudwE9(hNVMM>n6 at wESgnuu&mF at nntfR(XREQ$;o^wD1rp*JfNeqRt
zGwuI#B^(7Q5{(betN|cV<H4;uw(^pX|8I99a8VT3={{EXA?g4-PtyCfaOPnN7l`O1
zJe7&<OybRG5jK=!L~-R(7t9+j)k5N?>$PY(8;!ZIaD)<{zPH{8(4$_tMWqKAS$~lO
zg0m}(Gtk>v_#1Ihw~r{nj;$Efs|l7I{>aY$ghtHoi29H9;%*x8=8h1^<6j#~hlt{I
z&UMtF(7B at Kp=ZATv-<Oex4pL>BX$H4B2IUN(w2p=qR63#>?Ro4;DAS!8NAC{rNOt-
z!pq{VoATWeCW^lk43rXLWPFH7m4D3Rv5&Azr(a0|qly(SFn~0FPzSmSt!{3NJNcaV
zDE#dxZtq0#6~xvASqoP{*`>0P{4yyhHvhdJ2K<!nxYhq&)A$mwd3tz5_RDLUUsk?C
zf+PFd#3j$t&myVTkLn#2ubj$X^r1d^LJ>`*8+9e+yS^RAK;j;xz79J{R)1HS at ZQ)2
z$6xy2IOx=eYyJa-|NICW;8 at JGuacTUqtZ7@9Y_rD9D=A4?p|amGJ=b982%OINM+*@
zT9rM(?DKB`si8d0(T`ML<9Excz22j3=Ro?%?5ayCG&tnZtX8*7bB41+SLhN5Uhtyu
z%JGGr=oG{`&czJyLUs>(#edpLG2tdc{DvGP at jTAUG#4I45!!9H*Xd2V(PG0S_sbnN
zw(20jqOHv^e1XL*46sdhhdw(bPMQBV&Ofd`O(2{bO`MpokS45<4l5{JEf;wui=CBm
zysk$m*CS9EH0x->OAV~v9FH;V&1|3UIe;|0`TbWO9NLpUlwprE-hZtQnp4w*M8vsA
z;_D?)O;Y2(D?Ub!u9q!casF9p%A{bTJgjmtnnM*sN_W!6IMMIjOH6|`{gmHx*rdbb
zyPWu$8eYSG)MGuwt~iJKHVWscfqUB*wG2X_)D3xVcb&rde&{}-#s%`A3-cWq;*y(*
z^}FUNa(mm}z9NRp9)E{K(<CgwNX8t3#2!nZL9gafoVmLR4{a(L(QTn9xxcW1WooS$
zwP_em)&B?$tO-S3Sav00iNpTZYl{5L`p*t`29i2qhFRp=w^Pg`bjCd^CjE){ndm)C
zt%%24N~zRxFE%{$t^^7`0<^yToxg=5Y4N3rBNJ3~GBr;S6o0%Q9 at wzLb-`av1-z(J
zSBIB at _`lmZOPSxy&M2+G2}tcF3jf~XF8XxZlB$&ezS4$Hbo!V)<mx<v)uv=#Uc at 1d
z;x1e4=0iKwbq at E5`=JBL8L<TUo at Jx?l>P|cPkK%F!FJg*XZzb$$aFZF-82C~{Fj=4
z=gTGb<pl-_`hS8X=m%G&lu+TxuRn at H0u}YB!Cgs=22N{QqpPGp#c?Zj at pc~8T~cJn
z&t8_0E%GIl{@kSoGHDn)d~Pqa4-LYrStDdBd*nBzMjX-C68l0-bm}ZFIE~jVIZOR_
zfQmK!$toOWs+->)?ghm=1{Kl<9}=Wb*^{NFT(U!45PuCG&pr_Ynjszr7PVvzFdKF%
z2pO at B^bN2_m*7H)pIq0+z0T`SL?Lpj<xELKjheZ*Li;7mi*u9J_uPBz=#?pnh<hZG
zFL}n%5n>pELB4pR<bcro6a)8q{aY`~^N;3_rOrVL*(WF4Hwr0ApB#qcPr35GI0&^Z
zyWN?2QGbTcpVC%1_}Djl{1;#dMS7;L)sA<p&@0(as&AWd1NCw?IwlO^u!rMOjt~p;
z%4VLqnQ|}@^w5d)#QpH2hySfIE*>A(gr=$Xwr)fMW1uX=feg1eq4pnpD`NfkdFpRe
z>uvM`hBA_wf2&E8u*U0N62%Asp<l#*NoPC#yng@|VU*v*|HxTWZfLgzE2dT-f7Gr0
zpJ>kB;AAXGU4|Xxz!&SR1+D^wm at vCr`k{GEiOD?0qYNMy{j_6c<inpSJ8ug+FnAIR
zPvptam at rSj!vK_V`6h=&2AEr0kx7Lk8eShDg7z~5_}nyzH6yZ7P+lJhD#kfotGsJ@
z=YO6nr$As$nhwGIN%-Ux$jC$nunicI3L)Kzy85QWd-Q}E(IDS{f_XXZv*X+SXpyw)
zPmU?IHKV>9<$|+L`g?uTPP=}(B_ at O?I>OW`HtaUbp(m_u<h)JcPe2(*vnTY_juHvF
zVgXJbcSzn>QMM_Dl at 0C3M-Z=)M=|+?*?&rh`=rHGFHf_gX5(VfFq9i5-NI^e at 8m+E
z6Ml1MFOD+023Z9nRO8$T6oTQSa)5=eExuPIYWLmNj6!6v3)@XY%+Ii-OQOkVQWL at Q
zBZJZI6y^SB3*=ZTCYsUW;tow9;IA-IZuhV^8>c~ack4{;pc9!&v78=mAIL_^dw=|`
zFHgTFp}Ek!b21JGY!mmK5COfGCPi#1IMuO$Tm``n!z7c|(t96j4O9E|1OOWJaLodu
zUz9`a9qxZXiHoGz!bNNbonK!&u*8}&hdZm9ZDsmJY=@rbRnRI`Tk0A8p;J-g4=yNC
zhN-3_%a(DtTye8J*6}l0--1}9*?;R$WEV+ at dwW)--GDrxn#f+y1dB)(J5k<M!vfjF
zw4e$YF0mUHT4UIm=}}?za{-z(`QA5~E{<S(X5d1o at 0ElHq~_hrs=&1u&V?z~-iP1B
z+Y;3jxio68$Zm1DP#q6H>kxD&SS77^y!y|#9*HvwAL$Zfe>DPxq=YYu at qcB=IzFov
z&#80~jXR<uNN19UGV5SIeX&b{V!D6{gLkmqQH^NMcQ$V*RROW8Md8AS33vpGdZeK<
zf1m?LGI*2vgU|rT@<3ye#dH9az|Rps^*5dO6sh0WF|(Dcn#~a!h#r(Ej+kB{dy75c
z+xB6lR6{-LwN-)}liW|iNq at o*Y!z-zLrB(m2fVFS$zmmfsut%4#E7;egj`1lLdB19
z_T};P^pFLxTlo7YcQms96&A`&MyS4S6vL$9-PyCop(6{2EEx&C;(|TzDz at 0vsSDnL
z&~r3nBjdrIiT;O-sJCLzIMr+O3Rv*w&tJ^0h<-04FWWgkU~H?d3V-Ru^vL))Atbj&
zL2d=YJ=}`%VTgdr3}dPizz`!BVL#E9dj|4NIZ5IuqezYQ at r`nXeQ+xc#JZI)M^Kwb
z!7>1~0XHYF#!Y6lb_hf2=_>j>Yu~J=EW5?JBS$3Vl{As7M$H)4*WL$%fJn*iWL?EC
znq8 at Uth8%tw<B*3wtvBJPHQe<PgIV*eV3Fuf<SN)p;L30G+PYmSC@$=R+gp#^g=e}
z%xiA>JR+Kv^Xq966i3KS<l0R87q<YWE0c8r&_a5kCTKn)lu(nQIUf*`*;A`?`7)kF
zJ*`3}|B6WIo?4NBKa=3E69b)nxFcW>ACbxAVW$qI-|jilj(>F+EB#PUy&1mK;9OIJ
z63yw><4<LjikDqrUxSh0?1Py#kC7-X#jE{^zz_!RVRtI!wI*-}3Do at IbvEt)kU8X^
z<IDS-MwNk2`c6mvRs8H%iIGC2E0(wZu8^>jLf{?qgDw8J<;eh5gMJ7%{fcOGcU^|M
zXX)>IxU}Jq at _&py9=!H!;w77#w^zXn(V*$9%Gs>L%qJdbTjt!`+wO*|)JSHV`uv2K
zwNh&Y)Ug9efy-2^-h=%m)0UEvQ0a0lm0q_$t)b5AbB>JM1yMBN(}3KjR-`NWpr%f#
zA1!@unNk$f+qb?DH_%bj;=BCN8dhTJ#RU!sZz>H~$ba5fSrhh{Qi(Yk-RrRKzDVOi
zY6GnE1+7b(c^GMAWh+r#L+YDruyRett_;)kXJs&wFZ@?F>knRq<g+MZ6!;Q+;pPHV
z(lb(QIJ!`$t at qoJ&Q69WTa2$!b}5y7+>{05M*8 at Pge#1}F?8Gvx*@T?N%M()>_H!T
zW0puCdVh>7!bgu|v=e4VG^@(ht3C~*t_mOgr9Qf9irT<%H1i<|Eql4%v5Pgp*W6{^
z?tA{nX~>fy at Pwr#R)CLYmx3}4<3JIQ0Y`)q0zZ&4D>43cGp_vOQ^a#>Vkb$1Y|!cb
z|2>=IDr{^6&){~}63c$h82tOG(!&Nm3qmKL+kXlx<^5Rta{u9ioB-Tzi_Enfx0TqY
z3mpSCSfs4O-6Z)MXc-n?x!!8{q1%bXd}P?6 at Z032mg;Q}iksQO;eVXpAOM|1b_}qe
z%1)J!b%V<0B#O(-9s*Y3%NE&5^}C>ff5S0}lAor#PYLafVNCU7RB<(B1%XChZn6_Q
zoqr0je)@)K{%b!0n at -n&5h3JwL=V7uMWKI~*ORlt8S{rqcrf)EFN<P+jr7^1H7n2&
zY@&ZNl at UHR4iXkhLb|}`%`|?ka9;|<INa?jOVRv9KVrHheUwlP?tfq5Ujsde6=-`}
z4)w%Lw{7b@*CDXRJvo9WVR`SVzK-bUaDM=e3WBUS_LX~h*O#$0&#7dj-T*$dGKjho
z4*XTGRMSY=&=Ve7d=z{rz?VS5`C>4jO&|~*q+<3gpkX4FDI5P*vMg2U9#p)^a1#}`
zVx{qh2%GQ$v1;H_QdB|EGz<wyUOG2gPE(Wd7So2sU1L2s!#)|<x;jHcKB(WQe}8v!
z!=5O;HSaJBxCGb0Sx)eYp`S}nAY9R{|AzY#{^PS%HAOuQ+B6ltthP`N>2T^8a1gVJ
zHLne+x2T}73)cS+6KV^oUk^7344k>PQ<)p}9V7_^I<n#m7|37{b)W~RcrbcDE@%4D
zA^)d~zWI0By=Zg4+K&*Fh at 7Y5g?|=;j$%V99(H>xAe2C}3TR4uc*&cDI_x${R^2{3
z4h~EtbV!DC<ct<H>YeYMD3SnT(%SV-JIg!ag9R8*b3MT4kKL$blk7H`!W29g5|E;v
zh~^wWfR9Cb28T}Eb0SEw;b9eM%Ub%3WIpP5UoKGxF~(8VD<vwmP5uaBK7XL$swy*c
z3B&d>Cr%FsG<f}$KkVt*V?0NvQeH2sodCe}G;ytPgpq>&*^EMJD+LbgWw)LbvofM0
zB#EgP(2=^L5*d0PkLbAD|H;27#;zo7BLs+K{-lliF40`sc<(Ng1_-90 at K@MJFIZ>t
z`%az6ur54>lsK~Q9Qc2u`hV%tFDJQm9_CQ%H`^wy>Qrt?_3j9YR?q-IOC_dI0d2mM
zKmY^%J`uBx4Gp*0MCDI)j3LUq#?1?kQxj<w1cN0u@*>!%1F<z4WpF{I{O0oyCe6C^
z`E~jOI?k46QvJy=5;bj*_py6$h~bpGL~sK_1<`@aSILObPGx5^F at K#u-h;I}nt8F$
zyX0Rs!YR4td+V>D_ at j!1bg1W<T*#$(81TxLB8|^aG)GmeHsxU5Df<4F&+0r+R2^ij
z8CO}t8PvHKPq)b<jyMQIDNi9yGs^jL#b3tCFUe1%bC=`B$v!T9&@W?>7iF=<p8HcZ
zO|1t}-JzO7F(}N8u77w0g;LG8bB*z6CscyY9z6P3TIiTEKazy$omLgj%O-vnK{{_p
zodrkyOoLy#ZbSH|%Z;JFwmVJl-T0LDt2szFSaFRi2rcSmP+uQXSIRUc$kFpulY=SL
zqI*wwe)^exylzyz;;{{iTzU78e%;>FmVz3l+h|Rp at A?K=DSro=J?^$=;I~r2oUSzC
zPl}i!fM}<A+%Be<LYG!>B3QLXVH~<JC<*Lxl+Pcy1Rf49A&10dbLp&W^t}OZ45svu
z$($tjUp^&{YEU~wK~HGvMy$vf)-Tbk%Y!GycG*Pd!=>}};6rFYcpSQwTWrwVShYr;
zcr|d$DfkloaeoaT^ormi4_&gjoD#rP at rOHiH;hH^Wxz?q+E%*PG)wAEjz(4BGWEGJ
zZB$UB_I*mM=jG~y6^-zF=;<&CB9gtK{hF_D_ey}oC=l47l-27&YG~{LkI;=i?*7F*
z2g=rQ49#++3))gx#FK=FUv`f9WbY&X%W&5h{2CJO`+p~8hN`3glv?{$@K;xs#3G8r
z|K^lpFQT5(=bank#R?AL$K52Rt{{!P+=Nf`q#hq~oKeYEA=gdsx*_gJw%LPI<70kN
zFn%=P#5P<G#{t}mhNdR?ZOE at 8{SZo#=u#}=E*K$~cZw;~s at BZNmlWEH1H5+~rbE(p
zWsl*BWq<XAc)o`J!fCmZVT8Hn4pSAM2ZCN=?9?TI!9V970r_=;n>6%HS3PCgMtO2t
z{-C<6;xXh-B_HO;cmhM0?qj?SC=Fh$qETY^Adrb(;`%j0=t~t26mTnC)XA=>${eAs
zBvmu&vyqvX)fBgF<dfvzXo_Ro$oSZs-tkJ=UVj(>^qtQlK|TR#O<(e91aO}hh-rzE
zV8H!*gxk<^!#x!Hj!n?le9%u%%&iq#dVf-cvD!-kcOIJK6BgSXbE;5gw9{INnkX}q
zVl(i}m;~U-B;)O0dSQx at vTIc(nx#*yN(}Sg1lfHY#Z{Kf`38(8H at 6Xi)7H(nl=4CQ
zIe$Zs7DWIwylfh`zO6anGmy*E5QomB>5Mg&TIr^Dh8Hxjg(h}^8>zhi^|bc>xGNGU
zc;uQF9~pz4<Swj2VME#UjF?NHpE?fpWJ&edWQw(kOo8lkl1m at MdBSV=+cx0ccoZxV
zOD|DJF7W!+CCl91y+%o*&ZvQBgSl>ad4KaPfm;~zP9a<vT_d%+C&t0TX at NZ1*mq)c
zLXFr at h>EQJ*MhmAoVN!>74-?0b^dsuuFb<j*Lv_gxHFFRm3{t*y}fpO{w0J49l`Vh
z=E!TMwEVfr;pJ(=7Y`f{JZ2cijgP!r;DsFPFc}m0{yY;~{thq{drK{?Tb!~kJAa^o
zO^f9gf1xvyucE`Gg}zh>6b>4E`;hO6r#jr<Kgld){d>}n;d8ZUIlkqikvA3+yI7}A
zc$+0S&jh(Z<hfdKGB_xWoad?)(xpvG?K3kY!sYWOVbmz=(^6|Iu)^$SRsdNS9&pHV
z at T8mo6RpbGU+yN&f>uIwaN2<_KYy2rp5D8l49S`!Clh4AVlMJYc!)UV1H))nEwjY_
zl9=6nz|U`B!N0fXts9qOEdLu5G+Ce#u%ULUk3cfsAYe<@U1tA6$eY^h`{1|9G33rz
zg{9?6 at r8jUIj8Fh@)xxsw=f-F{W*_ at Rw$>-6HsJDg|_>=NRb?yug;#bjDL4?8<3oW
z|IZ5)j#)Mpkg{}Oi~gsuo4By8C(umiK1^0Z$fK-;v<|IiQ*1^<d_BAwG|x|852-}H
z3=qPrsJM3A4V?@W-_2+W!NMz|sQ{F8v}+-6?sCIH5<Oz`Z}f&)Eg at I6lMy3vJxNfr
zG!Sf|(J*IzoSzdjRSoNwdVdqi|IXhmf39FgomjjUA-Bh!S41M#k?$O>b2;^vOq?K6
zQ)3kvHc~c6r8l39$mnNw8+pXG0%4gMxJm`ZCGznJ2(i^Q`@)HCp@(es=w(rzTl*B2
zL=?3D`k;V>(XMwTYS at fa(R|N(n3PE!SNxh8DATdTmd7eLvEY|dxqlwjGik_FjT&8L
zl6=~fB2UqW1D-R!Usl~N!=@|uZ at eH1M35%}_EPAF#){wkTLU0HR)sn1va}1!lv)3U
zKV&Kj)xJ|Tj|z<x(sMII9P6~+7cK*_W;Rv5WGCA1(e)*p^%wIJ%0A(s*V)UkMr+;d
z)rszrQv{vm5pi6Bpno(e%zY&0%e2&7j`R<_OAtJ at t$d?MiV{8!ClQ;|jW7lSbu$4Z
zdz>@EY1YcVyA`z1Urpgz*uo}e%wLB at W5SB3*4sMv`2;eW3Hq(bpj25nvmE`c`FQ=s
z+5jBA8Kz%8UZ=eAw%3z9g+_o#C%KhQu~|c9U5<(u2d%>b0)I$+{ckh>dw~PLPJk2p
z$}|V2AoEL8v!|zHqc?wsQVoUy!#L6R7Jjp+)F5EpIS3pMd3x|{u%E28>~(B(f*OAh
z-zPj~_ at yL&dJgSpAg*uXt{^aNJr%E1nd&V}=o_Vs%S%EC0Al0<&zY~1$wfLeo01D!
zgCS%|Dqa6R9e-27V|(&Ib+B3VsXDXV{$5462-?F202M&$zpr^>8)H$CeEKdGWbhc~
z$pFTVy at X2<FdLb}tJ-D$AqCBf-hO|@vBR!Md<7YY#v0l|b#Em}sxQ?6m4Eck^~b#t
zn)|TH$nx!}`?RlWvbYXrLz0sIF6<ZBY$TGAND=9M6lQQb8##X<Rt&W}wiSSgk_vu1
z<Hn4nbk3eJO at L^hJ$WzPSi3OHw3Aa}K)a(EwG8qwe;h8BpgnEgv5v5AFPTaF5}Vo0
z`pbgj_UhricgY>rHf6&gFO))5+Ok6AWxkKdv-gVyy4`-QH3DP6?%6cC;p4~}pt#`A
z&9~%XPx<OIrZ|7fQ7iL~!E5-L%^s`O04K<!ELiE5zo^XufEx|;K3fJLV!I at u#`b(7
z$e2ZUKGz{dx;Ww4<4qySHjC^!{x6iN9Pm=+7ezq2;s?*#gVqucC=bAsHPr5+J+e<$
zf~=?-sL6GO!Ay()r>hf6^ealP7jt7v;C2=i8R?MI%@Tizc)-h^!b)lu8$RQ8J at -nt
zRgG3OC~JrX^K4J80An#30rp4%;@-4<*r^*hk=--uEY??98x=!R$zX^wsJ~`$8)^*}
z`#{)sw2i*@5o9X>@y at c4t{Q^v`RQu;Ezy)^4QXcj+}HkvD;+V at g^3V!6a^`*vS3Hx
zaJbKtbEAI=1N<ZcObl1 at InI_90F;<jn-FnxF$9>7B6m>eHcvJLbspI{O^?_Yib%yN
zDMWq)p;EU`E=;jaEI+te=$)&!tmrD(&>U2qxtcH>CPUG6gBzxj>AtPc&nW{5E>pkq
zl;@c8t6tBbtuRFu{9)4Hv~%Z$fydw{r2U+v;eCI|Y0S4&4KtxgOOEAjFd#toUfV*k
zlf$XD#@hCgC-q2oKv4#qBOYzJ<t+A1ZE%hyH at jxIEE_)j=HG8hG0b*u^>(I0OwS at C
zAJKQ#NNRFqo5*1SvHA-g9vTsvx|H)dIooO;k(KY8 at pWpqnq6Jr!{7*x`Lw_Ae#e6-
z9QS|r!wE2 at 0CeZMZ=b}k{k~z)cG^&s%Twb=_Pxk(Z;h^u+LC#Lj8;0}fp0Mn#<*MN
z_x=c#<!4Rfb=&SD0Gm61lt^j(XU*Wejy+J_oVJ-j2{?M at fv$GGQ`R6~=jl)(1*PGk
zxxW|mv4Hus=*F&8+-vIwb<_v{4cfRX#E*YMJ~`3(MWh$aE)7$cgP-QEkwRn7?1nDY
z9N{O3PY3*YfNi8J0^A#}uF70NG+9fRDE5_k8{K%bL>BezhC{(C5YFtjU(E;b4HzNd
zjXL;%EB9+m0?(r>QUZ-NmOGaiTmqtboC#J7U^M-(r7QXA`zif?A4MU-#8`k at DGPr=
z9ml~or0Q`TqSn<y6IU0bP=H#X)jLa&#;K7;eBuGVUI7u|nJU%9G)fgQH{XE8IT3ZV
ztc&?`@Wu?RWsk1daDfO3b`>=(7t%KwkKXC8y9j*vay-m&ves3462nR>&FS5EOj7BS
zO&?`2HWI2bt_Ee}o}E<TYe69le^`H4Tr`WYzC{En_c;eM2!eaX1qD4V?0^Xg8+mqK
zHnvXXHBP?7kqP8n`$fdjywtWI7jHztd1mBk(uZ at JD*ibGnu!*20=-&m-|}5$%QYtE
z*~BvmRU}DQSfT!|T1b4K95Lcx#Sb#u6;*#Jn5&ZETxJD=Z|HmP2 at u*90Zo4!@%)C%
zH>~Qz=Rrqr0^Hly;V1)?-xU=pa4`qIOv!wz9HMt_f>$>&@J~;xzZIAs!`fi8(va?I
zAZmux at CUKt<`)z8b(K$L_^#@(Z6_)>slvoaDZu9sBI~_`;m*UcpNt*78MhNSF{~()
zq?)^oaPBRyrH&hSkaZXj%g%oi6V<;YOXK*>SSjQOvPmog%%?OX0&#BS at Pg6pIr3_y
ziuoQJvCQ*_7<9R^b~W}M at HD`o;_#6f)=<GK^WNg9KK~UPa(MoMeOMX336U#Ac7d2=
z`-IJguORBiaVi2p=;N$auPbm?r at rEdS*KkX-vVA1f0&p0nhj>Czf^y(JaYBQA#|pv
zKqf3t-iw5D%Q4b#v{hG2bZ~P;z<KML0LhU(WrX!nrM9ZtfHDYU+z9O)E#&b4tisVb
z{bdqqVV4g{si>mK7 at pLl7Q3r(#&2l(aV0d at C`$AGv7GL13Kyralr_DSv`><C+4Il%
zslr`Ri1xPrhW2b1%ocwrbrI^=kgo`nk24CCBlgY`Lp2(ciSljdXVuolef))~Fm1PJ
zC5}n3Nu=O4^dT#iVxcDwy(1C?N<1F2P<B&prK>%rQkjI=vH5l at VBzB~IJit=j|~dC
z at sAnv8v^^5<eoEW#NsvW7CA%dMfw at BX}0K8Q;3vC`#WcDN-cj`5L7`zeQ6x@=$%?n
zCTbr+vh<3fIN4qXcd|%Ak3e)FMZTIf?i4vE`8b+JJo$C-LcCsCLQ7a(71f6M%*-w1
z_Gu!RiX1VH9W0rO%X;eI`XI+ddVgAL=j9SWBEaF1YuaRW5C%ZYm6y|Kmu>c2r$`+W
zs;o7MpPo0Kx}<+Q_8H{L%iV@(5~);D7nH{4c`7~fWy305{5^LBiLLZ|pHU#%L9Brk
zn(hzUdZ!Rv5|32jXy%p_CP*F}J1>dFVcfhqa;hjOf>s)SpanbgXo|LJ1vq?hy6ZjF
zv<AHl<YxkAi#9!1h}zI0$_i4*`Jz2jk0Q3^5~=W6)g^zwcYUQ(<I~>G_h9mat$*a;
zpb5XWU=LQVk=A^}Ara!@r(&S^W=myhKhlJ(=HIReYO-|wEn{^>$bT-Id-(q)t^Hn^
zV(B8}NC4?gdxcnGIy+o+K{4uib2x+d4R$o6mp$(>$&wV~iIWl7jF#;|48*Ygl5e6;
z>E{zfJy(D9u73CZ!OkIFQ`lJ>CTQ~kcxbLB!!Y?;iL0)O%jufsJGX@{^yg4bKWX&-
z{by-pM-)3jf%U}tS*T at We2774O=|}rykjP;y7WEqaK>n06@#i$N=U!9y0hr-(Z*KB
zzsC~X`y_Vl()5`YwoWlr=@!<AUa;>+O91PG=+}QX8e++ck^=3LW(6DMFUV=IWOTVd
zoxrcg2pz|v0bS{NV0xj&)p)_BmTAVJ1mix7H4S?4Qy}!QdfmFkn9YE!IQI3rj-R`4
zQgcHM!H1{1c~pOMhZa$NkJcu<5gtXvPeo*RC^QS}6cU=x<s=k$Tf39Ed98Ot32s^q
z0RMkSy<dmVTFA>EAhFpV%N49{yEyRfBL4If&`0<u>t2L>vpY?+0^pb+=SFuI{cOFp
zQ%XF0&x<D at g>zo&in>soXSJNNY*8^f7Zc!%HeYQ|>Qjhtw~(xL+X5T>bh7i{QqgwS
z at h`2&T}-Sl at 4TU5Z@EYd5fbbc2`e?Y%JY9z at QOE5YsI;65&Tqq_^uE~W;~xdW)9zw
z-k@!yPw2<WC<|E&fog;g$lj?{n5EK{XpR?O&?FI4-D{P5DEKhPiOhTy54Z{5Of?hV
zcWOr`RkvwYfmjOxhqe6Auw(9GpQ611AZp61M5^+YPU<-A!+gVE)mZ4U!gdz9%PfBi
zK-`u#UGN5tO-i^a;IstSCu=V&-e8ARUm?)JYqoV at W>!Ri4gd@{c_gaQGiNY$d^VM(
zZmG0 at y2^8EeN)7_c*_2e?mG?{k82VxXu#SF^*b-ehJ^)vRnm*yM)6-kChw8fJ>CV!
z&P}ZqAudH=hvaj;`pAt)<5Mm)YVLmtSE`&+$#1 at rNJo{vBwZR5^8%-yv#6l&dOUrD
zM4TFGNxNoz$uy;ZgYHeN20Kx~KmP#QP!-X&xR_Hg&a^OK+8c0WmbRObks{VZv7{>H
z6PxBXQ)vjJ)2DW_OTPy;Q30PfW7YAuL!3R$j0&H*4e+?{`+K=NlahzyYmR?#Z?fTE
zB3?#<tnYj at T9)x|Q`6~oknW6a<st at a;PS#fq821y at xlkmT&M)n>i^2(f}xuTe9xwi
zI9tQz$_ at XSFS~D%v?I at jAdBm$l{TDghBMg-DY+O|Z{8bRzL-^RTDo3KoOY5_qdwp^
zY0)B;AusC(3GbdR{aRua4p4u615RglSv8u}y at vht3cajWjE%!TsE;aNxz0Ik<v7va
ztCjjwp0~R!?BMBOFT?~>&y8?84|I&?&%(uwvuQ>}zZ7x=Scg*b2|%3RGS+WcJD`uP
zE$|~*0N8t*vytccU}5&Z!$R at oMSz}J{Z5oYtE`f7SMoaK$8y%OO_hHyQj{?<)kPEz
z9_wdx-&pSZ*EZ&xu>eZ?zPuP25^@5WCv at vOprIhGFdKV^(Hw!oc!8$YVjo-f&DLLk
zbfsOM#|++#)vFJmuVVggHIljK1nxG=oisINha}7=ua~rtRx8g25M9?Z+V3%Ec*~U0
z!00Uekl!Q^KcPVVP5pnerE2khlC+D>QJxYc$WX%NXLZbJKf!xyEUuq-;xm>V!Ez?W
zrD>!G|28kl4AFrPUFX9dz{DUv;^6Uw)?j7p^uj{2-JO?TCBf8O^bg9loEZ|zt^4Z=
zOe+A0R(Du_vkkOTCGpHeaB~3%YjC}XD{+O<$I@`!8oWYabP|70(kCizyf#{2(5otM
z?Xz;`Q-wCOcQ at 4oVpX#vi<trxT+zTBcCy`tF%ZvQ`#%>k%&*3}CAf&X4=4|Mh=FtF
z9y-h~S#7XJej!~(cLj%xM{gg1v*)?-{V{~al_r+Gtlq8Gd&2wS8)cP*7;=WI488`{
z!n#<4-OU;iUR-~AE+Ly}MDV(JRC|m?-31DiwSeKQ{G>VjzLgV|S@;Ha2Q(tg4$Dxz
zINw)Q`7)pX$E7z7VGG_YIA;;zV at 1DP-&!zSqA8h_U{7xO&_Ose(Z;yYgu}!bu}a#T
zO^wjhJktF$WKjiS94KEx$kw3K(9+xx+)-eY;5Mzmnr44JRR+R1voRv%+8K$qMU<l-
zk#nNf at -{H}RZ8G$qI=7M^z|-zvoHAe_US;Zj-MG~m$?wgYRqiBC^ISPq1i!-Y`*o*
zE4 at _(?VK3&JrYg;(AQ=#jV#wcCzdk37a~gE1&9~XP+Ys~K1Wht!da6)hH<<o=tE&o
zfn47U`QU%cXU8LwZ-UJW0>GZ2>Ltmm9HkFFv!!D*Tv)ApkQKB%95~6<LyS{2U#J4u
zk9B}3OP&(*rLf*EdRkav%T1jXO(?HCXtUMX4V9uOtt6~%pDRl~!i&iNYos#kT>Qe>
z1dYu>jCSycYH at q^41HK#mEaAK|MGJd+0q}IgTH^|nR=_%cH3w#11AIs9Fio-jZu-w
z7w=C%fx6}JaXF>gb^mbwD1FbQs>~-2>y3ISrBBaUD?AG8*$3Abxg;a#`UFa~{C*Es
z5AfiR--au8m?Ai2>WI5B%e;2**|W8$;J?QA_G(grp-x=xT>223ARe6#R{n$&jT?1u
zhFgD4>yoYP6bE+&`r{+=9Jig3l+SEFW-cFOB(;49%l)l3-6HszlbD;6tlPs6>?b-F
zLK+>f)$NA?#6%=<MFma0jd`-yt1B8Srmm~SJlawLIvY6KfeS`bf7-dGNf>XHLKb|)
z8?-=?@k=Tz#T{N{3+K}N*OId-cze9_<%fU1_b+43^0L^MynV12&>pt`xkK at UdiM6T
zzB`ytf-E^p+cx|s%i3)clFgUq2mWy~s1sy)h^g$N(sAi#-7n`BxUZ>*nf7%6=28s9
z+ukAVqrY3Ixt<S90LuqG`HbLwH~0x^-*hONrmQyM*zw_5p0<Xmr757BS)o`c+C_g6
z;-0^Q*mUm2-${s*Z`n;16n!cn7u8`a(&t>|jsq40^{&Xh;y<x1ktZTp4JI=G-xSD|
zYdi4l$pxvPYJaA48-qE|e&0|wb(aIE`(#F>8iLwC{*+9Bdo30AM-P$y_+g{%vfG~h
zg@>i$>cEq!tYVJ>jgB~cL1oy(GvI%hu4E7NjR71@$2s<|df0E!rFSCnv8W~MwB5E?
zJ3opYka4;~!IOR={gGG0wYZ>jg$SFfR at 5d_?7sZqbTS(R%E>b2e76OA^Wt08pxS+S
zS%un{DL~GSkAn^>Z3qV3+(d|@9YTMPHNX^+Xd=&?sh!5XeaQYD|2NvsF++bvT16JN
zn5kEn=Fn~w*+ia<W<Y>^8>(6~PABpa>CKN at X*(#dS?}%KBR<FPWhp|upvX(4E;#dY
zlmp<oy5slu3J|1>5NNt{dL`g`)AVI~>T;FAb<y0oP-dohF@<C-Ht>T|`$#`5(><OV
z(BgRx*CMw_q&Cl6O^zgzKu3Q&E?LPaBO*cbBy~svvM0I%I<2ro<J at +cw41wR23pN7
znZD%}(ULpI=@d3%`P#k0GoeCm_;uv^Hg;QN>FyzP4AMPey|^I(`BONwkk*EqiAtlH
zEf=Mj`}<#<l)n^P%zXoG4uYB|UQ??s&g#ucC9i#;`NCl7JAJ>|7;JxhR<dnFB`3Z?
z&g34c0#4CBhU}D{qy$Wk%INqz<4$sT{trf)*Du2w3ea<@7;=G!0p!!{G?KH`l?PCm
z;hg at H2L*-Zz68P+zXC+}7~WLuUi$kyZt6O}#LcWqIh at KCTd8Yhmwy;F?s}{b9<`rq
zQcfQ9ABG$w^hOG*%`$(#z40b0Hx%8GAx-W`(h}q*RRA at aMtzjg`jyx_Vb*)HT9S}P
zd<v!6VWs?5{jUj=2img%0;MV{IGLgN1z^t*C63NCLWj5!OsLTwcmYx%8qvOi#k&^#
z^f`e60;f`ck0VrLbSwqSPn8acQxCqeD2C4hnMb(&B|Z(xz_EYc@=K1!<`6iYw0qaF
zlZ~LfBR2nb!_)Toao87YzW`@7hLL3F<v)0rOuUhgf?Y$9$h~%1wYj!yjZQqXg3Ir_
zOGw- at MSR9C3UL3Fd>xp;jr4daA<`!AMi4GIe>{gCy-P<dtwmRiFg^FhmjQxZP6t`o
zEpJtEA)Oo1nO1*Jzj2`@Exfs`B%*jrgavFB^uBuU|NUEV$po|_QW^f{WPrdg(mR<!
zcu$E+4VKbNj#{dP5pur2kHwGP7Q2It?~cbQeXTl5lBmLpSoRWJ2iY(RkR7)+c(7w=
z^g9};bQtVYe?dy`PB_WJ4N(EZ&ykz5H3k>jjWs*<arb{fr??lrHFfuJfF$+5s-h*2
zamvk4{lMlrf6zVYl|)ejQHZyH$AEsHIdY&ek`>Id->GY(O`XIhx)Y_MSMZw<l2frQ
zCM(}#X}Y;yk~H);Mk7J+;vfhQ*|<vS77ahOpKntf86AL%y+%W#qHN^8>oeZ7Ifx^d
zQf9OU=le+}wb5cen??!oYv-nIo?8y3%;h?QCAUADzLTAtkQ|HpH^#l^fc9TBC8Q#3
ze=Gw;PN2}KTVG_}000000000000000WcH(Lw_uM6pj&@XZC<g$3TzHkk!Ms8XPZf1
z$k>Z&ZP4Km#x;qG^hI>G%>h9&C at GPinD;Fbie0lX8c>Nhwih|@&W-&J!~2CnBI>zy
zwWLly>bXAyORvnS8GyG*&p73d61IKP4X*PIY*mGqYV3kS#n3n9uPP-Q-->0->S}Q$
z`S#W#1ekx2#}3~rYOzXG^QLArmHZ?S+uaU?Puoh9l1H&^VQD$J8$1#J;-ooPQ14}(
z3;Q*Zp&24~53OY}(@5dII*Yv6Lj>Hn)6(DRWyjb-uzv;!w21E3nW43Hyz?#DXz9z2
z&8mSLxIJc;NHu-LT#EOclU|Hg;DQ!6zdJMR+cSTCUy4K!K|>{=LDH#4D*GmsI}14Y
zGha8WUckD|(amz_@>S64DjmO|qQX{pZ%yJ-Dfx5!X6N*=VSkBMa!;7uS|?B0|0p^x
z#vyB%xQ=n2!p2*NiNQi>I>#4V#Mnjk`2S74{_Vl{xm7EE<RK)ESu=UUz@(|bDLPdE
zqON}p{#VK&3HCNhQ at A(b_AwFDFWG5=?zRb^XJ=V)<T=77?VVlPaF?P&TyJ9cTb&6@
z57yvqfI8MirL<-GRr^&g`blntQYQ+X{5YuXKY0Pl!y={Bc{8I)FrR=U9E`aLqkZlW
zK{*8aZfbIv$EQTxUT-G5R<Oz4nTig0Z|;AYIm-4zt+HXm$rRNG8<myWuO4|+tBMh{
zV#~&PZ8)K!>h?hh2Z<wqwsO@~v7n|VZi$J&7-?sHCtVrywcx>h2h&jsYeF1gl5k8z
zEeON8-*{}^boW<iw+<xyfB*6%M$6EYrM#5eFMlw_0Cg&oV8Ji)L6K(8sGt18)_Q-I
zA{DdO(%07m^9*#6&LnuW1=r%L>hpY6Q2)>qpx?6`h`NJ|N)x3ooND9Om=gMK*vrjI
zGe0cPY{NcP*WM(3xck4Hy>UM-!od1n@`<_JxK{x)niuYhzaN_!TLBAsh36qk)j6cZ
zG&V}A5UdySTjria4%khAV!~`h^tpf2|L at l?#AAF{z`<gFyDv=Ex69)_K?*WZ;w$>2
zO!cgck<tmQz|FdeFdY9Vt#;u{S}|o#ji7KW)(-{Tozp;-lV?KNMr%7xm6#@uT at ExE
zxM84icIvI@^!l)3jd_VjNGT+I2^OZdf0+#hIE|ki{C2Dk%cepYJ_uCM9G!nz)VG@{
z_EQ!Z8|?wJc$R1|fp-hsE4RkO3&IVJlSa_<v}?68VInc#yV6ZYtkGeo3B0o14JF;c
z8vce1P at e#WPnAJh4FpM**Jz31scbdrO<(u9%9LZGFbQ*F&ut#h_FyyWO at e_2g$O$M
zw_p&<vJD5RtLO8^5PZb8kkfxe>wXGnJpr<N4KUYJ;VyVvunv-z$m at D7NRBT)QV%5|
zfHcYJLk9cp)r(toyyU2j>}Zd8xQAkIJH(2!@Eo&Du*N2a#CS`ur;NlUD>gqr94qYz
zMhVJ#xV}}K&18t>GWi<<mSow2FzCrfUoM!!caZXEOeKxkIpm~zc9nl`Gk$6tn+1|L
zinXU!IV#@CD96H6{sYG at Xt{6Y211RJa?1%INfod+;230;Na8 at RNsa#coA*av4~Xva
z8e;a|=wl?`SJ*VQ)0O*NOHO|EXM(dgQb;csoP-ErY)Y%dpGnBvv>9P(3RMEFefr0n
z!<9uu<{i2PR2KMoS?GVa?noNSX};409|L+5ln0OY7pShVOIV7VzBkLn>3-tiY$SB~
zdGOk5u7>8OZ~;-cmJGe=cLNnHqJi8xr8^z*o{YU1wn=wi`}by7|1jzdN`dtr`N{e8
zYZofGoKw)4Wq;e#(##aQF+oLD&?`Im{S+^%o#8hogd&t|PuG97?l8?;aP<Onb$oK9
zu8V4aQ=B|Rk(bUo2xD|-O8r6u?t`qowvX2;;Sok2>aPnzaJim}mY8JLkT5=>bPdrX
ztYFJ}Ah!jIh50^{TOB31tK|)jBbGWd2!iv&=^Fwcj}$WSW|#!K^buNDs029IC2h;T
zCcHgI71*M{?bm;DUNkgLtzd?5)wvqGJQ^6A?8tibSo!js6pD(Lrl)w2jM<^sbbgN0
z2bLR?9sLb)?I^j6D^=NnZlRw4c+GNuo^8qIigE7BAC7ULG!h`I9$!*0FO|Oa2b7hR
z!w&!Ga_$t;ES%^Qn&h`_23lz&sryI3Qa1CA3$)XmrF?&kF=>yb#l4mGOqD{_ob`xf
zIJR4z=Gb3db<u-~<AZ{zbOx>f&^xCgbOnjU5btr6Fv~IC>PYXARoEWuv~ruaKd)Vt
zf?%PDe&p%~q22V_+wWM#hf<NlfT+_)B7G9OMFIxT7cN$g88I;k{k^I5gnF=mna^_y
zzqXoJt1^EDVbYp|s(}XGTK*#ZU at EW#@P~*f4QG8AuZiA3`qj+eM=?ev_N%OF15P^m
zfy+E2mh5{>r^?XCf8^JlDHh0#$oAY}K%C4;TBy8V%VL|HHnxTbHb`xU1B?ddV0G<7
zvm}x`s8dL4ToHAdFC%*wtb!+^Z`7if$$4E+MJ0bLHhtD36UChokLA5$oj?(6%aAcZ
zE6(HdBbje1x1t-c7g_^Ifjf at t{^@Jc9bmbAn?4~tZ+AmFj-s-Qo^*jy-`<SI6Z(?~
zSH?q36H-BIS~Qov2?N1{vSx=BMATom7Vtvzg8gU#j;IH^sggt}eSfxdoe)99r69v&
zHzt3gWcX9<p1FphvC?P$ZXrwGFn-83*uU7(4EqkB%bmpS`#3MA;6Nq8v`;!wHBrDX
zYY%zXYRbGJP#T~nK@>xF4|^L*_=2L_O>;+dJyfX+LEa|X2W4$Z^Vp^w{+VY$SQL$G
zSd4Xp%B%MZo}q3mVK}>9gfLRAM9F0Ey?uWpp8)`0eZ_ at f2s&GL1pX;wHTRzjL3)UX
zAv}~@a;%M-BEJ;^QzdO%fH=PKf2tNu5Fka&;(`9DcdAy+xd_nHF%CJ6h73B#^<+7~
zalZbp3xQt1UCU&L53HEnW%9n7K4F(puH6w<!Y52+{wlv!qu)5Kx-aOd&a7ERU)g^s
zS{2rC*{9Fj+BH=WslGa@<SDm7Wd?rX2WJLICEVesk5e^;-xn5iax1Jr!C{VxWTzTc
z8+)gEOD at bzgz%&@RRTN7!@o+r>u)e>^J*kRrNk?7$sxIt!ffv0iI1q9J#E_w7%&g*
z4V{;ev}=ed^C at u1>}^d^vdV{dYDRzIi1KuRNi{#GyoJ-mv+cPY5ev1=wiDPvNJzCo
zl2#F<6zID^W8BVb{#`j$_Ns`^4S1Gz03#cQaxEom$TBA4 at co||y&oB4xUZjD5>M!(
zxjUeR^ziyapG+fiN-BwyH7D4iH>Q1ft(KRMRM5h4E$0kI<Jz>cwdjXr>P~-5k15;=
zERBnF%OXzg#<&I%bP?b@>-NefCnC0*j;ia)C}SmO^%osGVj$MT=AWv6B>0Dt9kXw3
z5)AKg%I^LYfCUz{LL0Zi4PViIDbhnVJUx0mffDwy%M+Z(!maQro-qB`ge?+pkCTIC
z?jXQs{TDg$<vDwooZ4|!e)NAb0u(A;R{SZX6&Y^WNMZ)!LM#t+cxC~$f1dh`mh at 0H
z6^aL_xa9_I9;S+|f$LvubD7;Ed- at _Wmo=R5F7S9t{?mCu$WKr1AAJn9s%`jPeIsBK
zi}%t8N663C5Sj|J-zY{lkcZ8XM=@0M_^@&1caXYN6VDEHTc%nlEQWubITg+U218XD
zL{Y6y*Sy=hK#d>}Wf66{r4a5^$_L`-ub>hEzD690(XGJ6kMaQ3nEZn7Q^CC at fIR6!
za!>Hu$gt at 4#_u|{b8VNL%r>UwPBIj8>m%OSJo}!}nQAOh$IQ*k0DZPyFUEh98#B>}
zL3DGFFTB?k2y`;91!jN6JKW at Q9T(l|x6_Qza>_8wnj@>I=G)TfIsqiNt`qN|3q(KV
z5(;f&0wL5$Lgx=c3H(l>$?p=)Z{?R*U+O;-+(r4Or?R2Keg6pMSINUDnNx at Sp@LHx
zZ*BP{1z#KU4d_r(1fJR at kTE1OjMnq>8S-*)phrv at XVF^06D5BQ8H`>2S~_%R-koFa
z?kE3XLhV+-<_(PkUOTv6*a2a|9GiR9k=^xPb at g!lUIhSQ(2JR)ejt_g`P~p5xoM}7
z#tosqp=@8TG(EX#BFFZk;-v#OQ*FG;<Ecz#u2m$$S7_-;^J8;j5_BsT3$s3?K(WM@
z`se0FQNf|FPl$gV$Ah>PXa`SJkr%LMcazF(lOP~M4p-5HX?cINv?L}kHxFt~!WWe;
z5ss1%@fb=nzUpxp=#9xoLRqSpHI@%4h`6;s=p_WIZiHy$d2eEY9?{jsTkV0}x*CeV
ziUt$udVDE7<zT*5 at n}Oo6eSp9Ze7ea1-^2nIC%wu0 at Z&L*PG%C)iSoR<&Z0ff00<&
zm73{9D1h{$KJflKrD_NoQfp567hVpOPsq7XvzwA5MEN;lAZH_H6e0<|wxGLvnRD<Y
zqzjkh4NOJ<K4)3Co}^hHU6G1Ig;UkYsY(Pa^5w0`s0#E^EcdSF6Y^Jt95!g6D- at zX
z?d2<M4T^t9R}P0x^o>kK`!J5JQPoO(=}NjOpbWrQc;EJJ^@8+aGow)p1hcnuSv)Va
zy-<V>6qwCJ4UK5E0$vni+E)S0B>$aThK3!oyqI_4R3=ETRPfS9T+*~Q$DZ!=KE<s7
z6zz->yr8;^4gKTi!UvQg#iQ7aagL>5L|rDQ at sNM!q8wT|9&~94j)Y1Kel*)2bIR$D
z9N5tfp5ZqJkNO;m|EVE_p>#=d{9}l8i=Y7auQ<n;qISZtz=BcJi^qhbX6=90TS8q`
zrK6}3x2*+G<KK8|T at 8=gZ~YNOtlsewC8<~Yvq+QlJV^jqv-1fu^0a4yFB)adsEPHn
zC=Gv~4u2wgh_EeKci at OdUY6W*4Ypy?6Fb1NjQ69wcEUktU_@>eptEZHdZiWz%B+;W
z-T&7nsJw}RPRs`#u-4B6F}Jlz5t)%x>PVmobg4nN5d~+$kV(*Bz`Nye*F23cjOUs+
zJ=`D`(m9&{8vNkNZC;Z}s=PE_W&Y!+dhmbLL)a1oI0=vjCPauF8EJh_PDi;{9agZJ
z)ln7AU_bDt>&K3j!bx4=MLkITAM8e$-|3qoM_6ELP4WIc2a)RB)1?pZyew1h3a>5%
znE}r<e_|3MFTr1k1y!xnX6Xa>dw#90JC1dmGPtlm4<OxrJ|MOj4stTTySaV{2BUwz
zm<i%V+$SK~f&d3vJP(&YWYRTuixq}+SY_=<!PcFVj<vT{4lL1z#@Q)Gb;bwk9~{Q1
zoDgz#po%@pD`1Ro#<+4Jrw<1#_*uBZA`PP*j-UP`e at PvULJK@`A&t$(-bmrAYIf}w
z83wo3<_h(tGN?4ZKiI5?;P|nCN0WalsH%RsZgm=5W&898MCfw%W8<)bW6n`6R^by5
zHGX at XgSb%IUr8wzeO9%%)FeTs*&5!2k_uCHviFtT8i`<WOjAJe{$tWn_6Q_!2R)v9
ztGYRlH at 2!<{i&J4v9`VustjnSg1JSbbKp=*&kRIs;jN_Bce+M6;t{xA!D4?@21pB-
z-=TZXB)gQMO~0f{Uq5<HJB+7qwsnV7H;<OB#Q@)R=f>sc7%Ot0r)%=8Koc#oz8fB-
z1NZqI*jalW%%BmGa&4vXE)`7+KLJ)naI07(xko$Vo at S&N6Y|}LV?*6B2r&CQN(j}V
z-K_W4x|cid$8Mel<em_FnBjj+81v-S3(+)MNy)~Mou&C*^zvVP&`FjujJpixIHBz*
zfdjm65iLotR%9~G5^U7CwlMDaagCY#umP7m%=v|_v>StFp3hA-+Npg6AZRUkm<l#m
zBU4Aiyrh0CsE?ccJHMVJESk&(SC{n|_yWG75D6@&v|er at 4{p&&2l;;)sJ93t8<O!A
zp4gZXE;fV3(oqYoNPKmfO-o>;;=-KZ`qFt1#OtRzvCM0h$_Ff$5P1`d1rq#N9r?NG
zv}L!SsCjhS<&uZ}%!01%;v}_f_b9nM>xk-5i!|GI72sR-7pI5ExMiVUqr#M?Ldy&(
zd&m)IdvzjaNh|IVUM7G4<3x{>0$sMQGJ26}VKj&HP5t*YKX^vjA$IM62zCYuJW3Q-
zz86zKPm0v#<U at AD?w(+718MKcD%7Q2+QpVms!nN*&{dbuT(a8 at kwhT^YEd^8QHC@&
z`zin&t9gee0T<2^XKIkn)`z0leWjAMrb)!n=!DL%g~x5VoArO{+K&T(@>(TH)c>Uy
z#xW8Y#&9zL&UYDaGRfZUe)9-JJKgFA!-WF)k$%+Uq}857>VNS#rVIs9$2D%V#bUW`
z5agjSo0_5Mdnz5&tMEAFJ`ORU)chA at o?@I~G=o(JH5FB{ay0}|t1tX1vwvd1pdpA?
z`!s?6-{6x)V{d;(7x1LAye6tm_<v&z#v3(CXB~04Kssa?6D_aciszZPFDY%L$S%sU
z$6LlN5))w(EFxCkPgntLPHhmNd2=0DW|Xs~sqUQwfZgpSRib2*TS5G#{pyCa&Rx2)
zgZXhCd=D0>oB{Ek42l!M5kWH9^*-!cKfrL#do96#57&RgX?L)d%|UB|FkM62qhb!t
zcyh&KRwWCJpBB0Qyy748 at 0rDPT+608+5?E|%K_=bnpI6Px$MlvLja&@1u`81x2FbC
zcE<1P&?P+i=(qef??N>QlDJo7dlB?tGN|YAI1rwu9lWy5N|g)ue4T6JY;4YA7=$X1
z=Z)a at oQ{9P%m|t-THjk=uzmEL<cw1lZYP|f*v;)ZJL{efn9mA6hd|(n08n3U7w7Ov
zx5te;&{Ku;;XZ=WK at B~cbGnbjvVmk*K$;jZA~Ah)9!6&nc8rNoq6J-3?-Hpydiz($
zGE8&5Cn|$$BZCPS>G$xFykZkoxw9!JPFDl;g{FTea7-bH&=c-}<t;Tku<Fp^RA%%b
zyiX8Q|JUlK54^%#`Xd^?VLwHIpTt^O?6jclZd8x{*U5Sq?MHEY!)D40XdWw at 1fSJ^
z7YEj)g1A>^Ce&1~P6o*b1M{;DNA<Nd*0a1Jf`hG_)Z4++{wQmjG51%0D7pgGS>Hl<
zBV>Pge(@UMp=E@>d-2Qfa<rX&)^iNd00#qdZJ7|8+RdA#VLp>tc{+O?TP`Q9mpE~n
zR#AR0EbD-nt4HzZ8f>Qn`j19Ckwi~CO_yX~6i>14+iNn=Kg*RVlll%2j6tZbw;jEW
z;E1LeVpT>_alnyij!dR=u#q)XJbW~BZfJi3oy0U}5n{Cya0($ldZXuyDaPtIUNLo;
z$01P*e44Hprg at p_0ZqKH{%7geJ`sp*621YB!|wdfbRo&24}6PWA*XnhdzU}j^lnqL
zrip!img~S=XZW}jvZPLYU!Q8hnU^~8{DlxulzYAuE*(t9QUSNsGhu}L3VF6&t6+aU
z^w(q`6VgkXy|fb`$XUG~O!Zw at y6zzY<=Vj*Z`A2A6plxz>~S;e2!_i7Jh~xAYo5Yu
zyww6~9siijU#FWt4aD*&+RIFw<9>&3*EI$C(^aEwh~h0_YZ3jN(!5#Om813c*uFaU
zGZqnTL*JX8sD0W;1|Y}A`Il1WO%Z>XNHB}eFrw7=&MBUA+i|QigZ;mcOWPSRa+CBh
z%5RWNnnc~WKM$W=i|L%G#;Nxhb at YHmt>x{ve4iYDRkFM=n02MIo^&(H6E*ulnmfQx
z5g8H;4$FBMM<i5iQJ1rTcBEs+yA@#H)lloZIR|Gw7S|8XQs at igIw~jQ{T+W9!&Zr4
zqidUt2;B?o+dcAT3ll>E-O~voYGZwNawE?yr788e$_W5+tM at YBN^fuWj*3u^$!<K$
zO1tV>V at eIWDJN@2xVNC3j{zx*!k at f`fgc(6wY_o6cz|OA*Rv%*ZTG at pO&-zO+oS70
zabFo9dFM%`RvSCrRv-X^Gn;>-7<I9TfbWyM&pny+va4+SbO(npEm-zM-k(H$E|-sV
z4|nh3YQ>z;sz4HhS0lK`@i&~4ptcn7aEIjp_1xgrvRx4DKHo(As*SG3v1)j7?8HHs
zDJE4KPQO<j)($FNL^-)C0$t7L at Kg^&k5I7^-0tF45Fjnd at o`+1*$aOy67|H5;$1Rh
z_`OH8;|y54Vf=~}S#V`3K7&$}?9$F`=3xfA7RaqB5&vbYtIoAbRq at l4ouDXVwV-sx
z(f)Obx9~I1vF&vF#Oj9(5Qn#t;nLxMEv{AijL*I~6j{W$c^qd2VW8k~Q2kePYSHEJ
zOevx&+oM(bg;gONZ!>?eyIGbL1;`F-#G0s#wSTJz9GPmKPOIxlscX5?L)3ykOe0~R
zTW*gwgb;ueh*qf3WFcO!5{PBW at e~sGU^Q;?X<oKgDcIGdPF7oCR6jEG2d9tEz}Jtp
zfJ~NrwSa};=)JOgpVIX;xw?aZ+7!$*fclP*iU|H>omw(<*GYe3_x<1l6<EmZpucu6
zUv87<o5_g7jvkLUOfQlx3pJtjs}9-L&!I`8{2spDq}+n1RQe at 5wXILlp(7aL-MK0V
ziU6odm7`bJQI6&yghS(%+!_e|d at yZ(`VMhR=#Ffe@#Xfs!9#6X;fch>At|k*58(~D
zsVW!$q7rIWOB8=Od^=RSP2a5tw67+XVLxv5vitDVQc0|N=(*0YZu=@$&h5>;we^b8
z=rqty6G|92pq%;JgYk<gDfD%iJ$u1Tj1jZF5dosj*`*p|AtLoR;r!MpmWK>;yp`Xm
zCY$QyVJ|?Yt?@Gsq+fU6>ZxvZjSEDpQEdnZqUH4DWte|>pJ_?#Gubet|8wk^azZxM
z?kqM#%o}C~>J{DG+}^yD5nV+*YumTM`lVUMRfy;UlfFVRAoee6SO^0_fX|^IJR853
zpV}rnkDBbSQgar<hML&G;KZW%inNsfSq(Jh{z`qC+Vw|=+F6S6JF9I7Lx>}22uy3~
zZNzU?l#hP|4VqS-2oQ)Pkmt^#irF=%`i5A*P?kc)wep&LZ4I)0DP#7LLSOCld<Awm
zspceX3%9mRTYFVMekigGq}B{$4%*grI_el-cr2eQ)GMw9I-559!#?FAK16W5KURhC
zyHURVnJ at oC?AaX!wlA{ibaGBkP%L1kpby_F)qa29z<;Qtdg{O$hwxNlz=|uz2+hc5
zrB6xdRCX^?6RGQEfXA<d8+w7DAS5?LCq(-m%>#dJmq#>1+P<_AN*<ol0IN962htO&
z95slyx}>kP;&*ejQFP(VDRZCUa>p7esdRd0g!hJIRu(CfWOr)wtzHGs!r`f5ez51;
zmYIKrRIGsWYKK<4`zni&QvA{;Kd-i_u6kVXA<2&sb1t?CM)@I9GHY&@*l%ZiId#W5
zi~s_%6=a}`+P<#k11y`Vu)eTTww4CsD4!0~U`2+rSZZyK!pv$vvYrk2Lz3H-ae5g&
zo610{HN2m3*ewFi1#Wcsy=ty=G~cCpP^Et<JP#NAf-6Z#$Le5a@`%fWz$1${->}2I
zRavCyjSrZ;jggTdLU7-xevJv?`Ep at j@rlxTO*868*O+}jCGZ5LqKKgVfm4zI4?CAH
zFQacRGd!q;UFj=TcToDLIU_Y at a3ucEo|~#_Fc-tXN?GzT<;683K0%$Q2qb*0qXB<k
z#Achkc&IFXsCJle-t4GCNt?`6J|A}<-(gWbQEqJq0GNI^TFxTqyM*K)UvdseBM`ia
zL4n#xR)rK9ck!?f2MY#SKDyh at L88RNl`*A(&%n4Tg;w#TnupPWxTg=?cokPd{yImc
z{xc45<(2nL{%%}|$6(OR#Qa~i%N~D7kb{NeqO<}M0-rct>M9m)kRq+m3C+`hYJ266
zW+NfkT#BLy`SXDePZ)^~2;?D?<?F0!w0uVe1!0gD%y0~iLc3`DJ4&5uA$VR+TqrNQ
z<{#^x- at 2X3@~VmZJ5o+pON2u2jo0&5HIAKgcOrfmA&7I2JfL3VAwG8PP=|l7<rZU1
z)|usTv1&)$dEitdCDl>*I)1w0dzbHw+K|+Dd#T1EB!lnL!`qr+TP2*0ZgDzC8GF~C
z67(^`gt(|&Hg&uS8Hu6Jt=U3-`zcH+xGff0mbB09mDyoI26sF&1!C{3`>eh0T0j{C
zZRZ)$(V?7%`O at pUv@cCJU}AqM$IGEk?Yd>UUg&bA(H8verm}+2^954~Ay68 at GvHmN
zKD8%wK3I|CU+{knl)`QTeQ2Mgl}L=%l519_jkidu at 5rYhWZ7=s6Wrjt7AB5>qAHYr
zvD0AAK>LiJ9LV7g;%z%SHO8b$kU_u&<BRP8w^?OhBrqsm7t53Y!)<@p`9roXFdTmW
zuC8UYqN7QDvxD!;N12(P41NOWnzcDf(k5B&WSQ|t5Zma at JYz*ZUY8Ye2q3z<Xxktr
z(`dHI-1ni?@$b&wc*S)6gk8=&L6^V0yr%kz8&8=ykBSDSPIryD at vSp+#~Vq|3T%@w
z at HB%Xy)Q;e3}kZ#t)YJ)8cD1`hZzN*Ows9 at hevPS=wcSK?B8ltTx)`%#C#h4S at K(v
zE0!-%+r!AvtUxcrqvWi|WsbImY%U55B60KAvEf|1*s*v77K*?xI+L0}Mm2@#0UqJv
z?^Ic1pIpY;hc3!75ZWM+W)zo>`um(q#ycmNvGwRa`J_U<!-;>nlT3#jHNHCRd}Y#x
zMA?i~jL15l at ug=!VL%^TJDnbxyL2#o(`erkB;@r7agQ>y{BvXPeV$ip()<)wW3kF;
z&|09WMHkUazvo0m7HRZL6s|BnA&j#D&K0m^zDu2_%bI&@Id|v-qL|QG4`=U%gGmQI
zsWb+?rkQ!E!e at WKvutE?FKJY1VqC(1?aqw-B%H^EV>UlIs7)@jFTph^M0Zf=w)UF!
z1hRl|Uxe`OM&0^;K`#37qqjUe9z4;8crmwsH|O=ze}&<j5x{lJYDa&`3^4^bcl^Vi
zt&b|%(>nQ+pq%MF3N-N7h(vCJiGx-6DgX at _K*r~^z;J&=s}P)@%`a-#s5G9rSLKKc
z49PHTLxL`amyjx!j0dQNwM6ugsdv(34#m#`JK`G=`D%G;2|bW7C2dCjAobB>LIn~Y
z9}Gs^qfGDHyK4E=&sWbJFrn~S;>R+lXcFt{g;X-Q?OCw>StQ?^B1<`?L_sT1lX0|9
z>L`tj>J)!kD*oT~B3#f_kewPyXq+|ppb^tu*5a*dzV1iaLo85p#?|kpj$1~{qoAp^
z;rmI*>V|M^b_`_^eizxf1{br`@4 at qS|5Vm7vYEw;5gS~5cYAq^&i#85B$I;Pz~C8U
z0K^`Qk$@fR3dq&fJ7}I`ipq`468JISlk9s6FPMLBB44mo4tX+vEbbRcpSN_9pi;hs
zEwJMr+z4S?lmQ(0iQ46AowcJZuY7npre}sd{&+QyTfp$)rGxzHVJGvsjF<A$5)4tX
zk|W_l!S`WuA+g$l*(0tbMKnzUN(N8rq+zCyz276eyvy$4`(=$1tSLlHL^KDCDY(E~
zh1h>|kM1TBoQ3IHWosn8755rQMQew0Q{%y7wRuZask34?fqfs}*<{RGXw_oR8B->9
zbQ at R8WW}1V#k`c~9#b|DtIQJh&()uUJ9GToV0dV7!Xp7yKl{%I<Og!Qmufut0!r4e
zrC90amlB&)M(pmYsz9<y7-{Snz-NOS&^UieM5C}*xL3SuI`c2}81nhA6YeYTfIvpy
zz%&EZ)O7jav9NM6P}`%B)Si1<=73J3B;@AGeLG$Bl91Pc2aRwl)}p`b{u0=-Xn3i|
zx`n(IwbowAi(C?zFJf&u|Mw8eo?y1%#_jq7aU7W`A<3;<5qI{|pswBDkn1mR1~Y%^
z0dpLBz=?H?&U3c_VhLKZTt238A*p;bvzE9eVtXfPpPXmW_D3;>_(;;81 at TqT$9<6b
zEA9b&n{8C5;RxS#G)Y+Dj)@`*mkB^{S4G<~C<@WK&5m!zq!Lg_Vz1(Ycy}E0JpQ)e
zh{YZ!oYcnOM<*$EBGt+UB$?XITj_tFR%)d6B`T%eLhV)%DeG6l5K0}-p^_{M5U95;
z)Bh5Mq;Wh_JoOf^oO3ExV3m9I-`8V(4Pe`~Ka3xSORMeFh#&#XWk5i}X{e?%ZEoWS
zDScT$+;AOl!|l`r)>c~$S?Pa{N(JJVW2a#cf*flgB3ft4-WUTGj^rLn6_$U)(>R-k
z|4r=YS?dA`+dta}fy-S49+jY=!v$R+-5jojLv|kl1hY%zY5?)@4C>Z^kKqJ#<##wX
z_&0x}(f;|}DYZvFuiHz|lB<YLuqc`{W4Gz!elu1cvnjO`;Dw$d>_HSvT=*LMKakq>
zPhgw%^JobJocwFuf={bBWNLrF!hriaT^f%d;locZ7cRG-+ at 8J)&4%z%ec|jAWn0dq
zkAk)#^hdk(f4FD^5jX#m+5QQPWXE4>ZE)@y=Pi at W(#<!9KEJbD;AZe=SFZh)8=V3n
z?Q9F1f+Uy}xfqPxDG1Szwv%5$s0~dfn+gVg0BNqhYxRhJogZgv{-}TL5Q6M*w(2ZN
zS<>zwGMBana=<EC6qvrdc^YUm6#b%kGs07YuT5Nt9FvMaj(oUc0MftzAI+qK7WPWq
zZIE#iuQn4HZ1>u?wSqDgb|*Z5Q0okCA+E6n at 8(qGFqy`+WS*~{tL8+sSLVEBR35tC
z^AY8agZ*|nkX`T$uiSt8nGi%0tj at L-{zCD0G2UEh7vGnLpjOm5Nm{%cHA<QF;|xp3
zcs&NDw_T!hAbZLg3(5 at lS;j$tvb8!(U+?oqo322(1r3glAcm-|!7h!=A{%HJitS+F
z at FDzqcvF*v((zuy3O^uSt~MIqi_{9AAkW#5G`D#~d%K#bx0HXya)+V8cZlsWM$_~T
z%~btQ-j$}4Sr#jh1OMe~<v at _CDa{?^*9UrL723U$!3Vlz!LXET2<Su~=~nSQd7)=L
zsc&vKnY-_Zu!*W$P)kcEn-HCQL+}C8k(a%3{J7RqzX$SRLs<3|_ZNG>6vmyOL}kT`
z>v}>Kq?%^8yOn<sgHd~kG4AQA<W5Mh at Lk=Stw83dF4S(SUuaUUbxC=l&tY(Z<asso
zgu;s&!VYvCUb~~@IP9~`E=9U8=*y0nxdrkRfFv@#?{{zF-1%#Nl)%7)G}BK}*dbJ(
z_83ukeqxG;)!vXJchcgACd7odxPb%!OekK>;HGr`6Wo9FZ}3Nki}>?ZI0_VxLr~d^
zq+x`@i`y8}L$8<<%`_&JrWyvTvy|+Q^1y9K*;<4}_r_ANzE~>hnGjb%t>%<)T;Cs%
z%QNrU at g(Z(V>-m~$Fi-upJw2)eBzF%X4D58KO%X3LN>Er*uAwWgyk-e{<GPTp-ZW#
z$d&3`O~HTM%8aUnaWj=S)}Pz;y(vYs9chdTZ_-%xqPdu0)hEw`o6mupD`T!^xCtZ$
z at 14xCFh$Y=8P~aQODP;|j|X+XT`e{Kc=M1qCmZuf)CgFdZ_IlMD4De at KH_-F28iut
zPHcS;my0bxoB4_EvD_EnF71kh{I7<<W~6Wb(b|7*B$AWUj{rAocKWvcfU)+o_36V&
zTCwl?t=zw59Au#yY(*ZmCOv7n3z>kgwwAPC(MwJ?LDh25k$1)=ncGnHDkE at 2hSKf~
zkAx%~#c at Euj2=S;zkUiGT#`EHMLqglb!z<n<blk;sn6kghSZL^JhK!ZP9EE!9vWeG
zQB{9e!YZC>;;z(Btblk}r(;O&Vc6QXX9kPvDE8>3*KQHqk|Kxt8X{gozn3lSzy4*2
zAwL&;ga{A002&Ihb`l*cDsqGSX}*;=^xnT9TYb<qq2fq@{(!lzW^jqhl)!1agUY;>
zw=^?&KM>f5=}N4PZbvB)5*ovDgDjzD4<vsU>&%I^4kwGjEDqz?)T=wZKZ{)R6N!&o
zzubIO{^P%ukqC5%HYl$fH|uE)tISPA0t=>?THWHf2-`kiEOXcTf=3v7IKoiKI>Bf8
z)%rVG*~DmAGe4U!M(5MK6iD>Lr}|KXBm7}Q4fIYxn?xw#?IzwiP2$q>H7d<w9qoUB
ze3wX_FU$&>8w~;e3r4(66HMQ^cH3P*5;T&v+xe1O7o at VAe0D(f!;v~%)(1#THitr>
zmzx33FwK$4zE-ey+!nZOa$h2OjR<CUsG%}G8^NF>=GuagaXl!_>A=5N1RcjmUYg0H
z)*<A994s&h;NP<)Q7zEx$N8o<${l}_ckMbvq`HNianteVH(yR!+V+&Vln(Yi*}~56
z4Q)uk3X`6!;XwBrb<(If{mh%GEK)jAVDxUYs-YR{*UQ^|8H!QML6E9WRsyC$BDdtp
zqTC<)hoQVt$?*UMK>EKHNl9v<+Sh=_m`HfB`Ysl-(+4b8`w<LctD{(*t3m|?p_=i3
z43EAtnR$EO9S%bXM83v{ApG`;Lc7Y07JDF?1X}AbhhgP#|EEEUKJ-~W4Tg4h1O-vw
z=JB&6^(A)kz|2{2NQ at b!Fh8-2 at Gv0UL20T#H+o#wdf_PbJn)(Fd^(iey(=Q6=XH85
zrcKrSecvM+I=$qBbaAQeg65uEfH^&XrBK7Ah(Z*Xu}{lZ3bewSL8OOAA3!E?-LU!P
zFq0xrv?(UpN+qt3D1^@4^03v60{cC2JiF6(#*fDbp8Qi%OZ_BV4yeJejAnv7_&pLu
zkVfGv at c3TiamRQ1B4-z&kU97kByGRCUPh^V^^B7exG$?Ckm*rI8xJQoG(D7mHksV8
zQeRQ48c?g>G}z=_hLXqbFZq!S3`a^WP8fmg!H+M at LP4NmAE!gjM0S(g`)^j2YC^vy
zSs%o|MKDzHSGzdOr>U5V%pBChdzku}c;Ke@<*d=Jbr|R^J3tema(*=$OG|zyRO0QW
zP;a!17ADW%ET=$uac15o^}XzWqF>deasTYY1owLr5xRqP^tRuvV<W3G{jJ$Y=oq5^
zBL8i$yJ%<p9iCJ1pz_g~bx2y>o*(q~GVU5ty3|e+6{z2r`vYH($G=0Qr?mQ4BE#Rg
z>hD8)*zUw!`qD32ba;z1=H$ZC?Y7_U|3PGINws|Gz8J(FI9adwK|iX0fF3&Lk9e4)
ziShZo?I+EB9tq=Hd_ywce)60)YoPHivRYR$LyAtydrE<ktwfW2`@-A2mSBypyjvR1
zs>U$?GiX4pY3`}dYiKoI^p>Q7?6G$ZgQ-`EF!}VljCf&626eFR_j$96y9n6SmI*%p
z6DD)0cMM}r`}QpMA!O`-Ck$_MV9eH%zxm3HQ)O6_K$g(xCgp>V@|ekD%=Dp*JYuc9
zp8A0#+X+tMqlXd>XzL=*ku8=zN@}mP2^^nU{#>k8)W&W}6T=}g^;Q@)_3;FICuKh*
zg=0b$McPKgUXfeOD3g(V{4$I)gAlS{-#K7SMr%woo3zSWoPcY8qR2U(E?9HBl)vRV
zw~<XUl-|V(hi=$01cF2u%$<af>7Bs2B>wfZtxZDqYOB!5+|Q&TL(9-^0ZGJU>0*?R
z?GZ5{P<14s7Ou at a1_1Yk{S!IfQx1+_A)bC{?hovP*dr}ot4)8E2qfIm_1l3oM{v-P
zLcH*><(=1Va$qQbF7UO2=Q&qMGeh@?EoRQ-Ju#HZhnaH9ajfo5q$_!qLaVOIXqZ47
zLG?d=n%>I?49<v8et|bPIW;#QwHMlVjp0Td+xn}oodF=oZ!yW=L`8_f&hik9Es8aY
zRAQEWbaMPuNi4p6Pg+IF6=OyWI#RpqlccRU4P$AQ*BLv1>oFSs-WD2CX(YEK;8$L~
zVE}mDH_HA at wpuVYsceL2f66|DU3Cz%(AMRD5J65}y}KWvj#K?IlNxqIyIE<Kp7p4@
zqyyv)gtKvmPo-AYHi6xJ-8p|lqK4kuhPFS7<?s1N>=b3CTqdsR7f7aHYAr|i8^a9h
z&L9gZU-Qj>fap(GQjW$|@8WuVx*vk5eIKzF at z8ArmesSMpgEw@qDuYPIVc_UlgO2F
zuaA(MtInF}oJIKQo=wPS$tUqQBCK26E_FiHqgZ5vgm>*Bwf9M~go_A(C`D>rz}L0R
zwhfyn?H6+iC*5Yit_TE6P#4z)?E-ZEHyi&>>U;8kxq_RlNj?iylW|2R!`(PX^6qo7
zQY6yh7TMJy!^pfKXz27zvIWfl$b*3GYChR+i-Nj#^43)!{`<tp87-Te40#>>n+`;E
z8H1YKk=D6#v+<b;GC&G;Yi352J<CcO4wIc%a&A!+C_!ns-2VW?;e)H9f$l at x#Z{jE
zQ}o_{h=|^`oaw(|aVN(9fv1p}3#qC+!dI^JC3<`&(GLw5s0Kw5ON;Ikx|ml4UKLRT
z=i^K>pZ&l~^hXQeShSgV)@kK{%+v5GQc}0fa{`)7Y2Q33ux<*`V%|zv(!=J&`m?y_
zb5vsM31<>XEv9r2Ezk03#QC6$C|2 at Gqc~=Ni@(-o?nl%Wd*!nyKZDgyNbIfGq^kaB
zEkI at 8?4pG_tiu}r2O-vX at wPhO?9Fows_N`HfzaGp8(cam=lX)By%}#ZZioXIM5b4S
z`<pr&nj$kD%|)?zjaIbT=>z|rUV?mh#LN^WdXdU*|7Yl5zHxSvz`(<dU)lKDQ<@xq
zq9YtEJ1vEPFH~Cdi}!hSlq%a{YUw&WCv)#)X&CQ?q4$0?5pFhRC25V>u7-;+`ZiUK
zyD2pZCqLhROn@)oS3GOtT=meSNcu|we)!Bg`fW#h)smpzk%D(#oI+$kFm7HF#nWWO
zaa-NwZXJkxLq`se{NE^dzK^eZTlAoR5#2Df1(ep+9KVozaZ;M%F>{adRZs>`ODCFp
z=5mj3b=w~4^nxF9S(m5nMYs9G{c-6fzFevg^hRR&&zKX-M#<Rg<X(sBi1K6k^gq?#
z8+=hQB>E$9&S~eTWmT!wSZi3cNzHJwDFL4GhRt>w%A^PG=rwkZ5{(tsdG-^3cH at Mt
zF^ukSv_H<SJn`kbdVU!~0~MPkgn0L9(Hg*Kf~9^m&FovedA0&!7o0>YV`Yu<-g*!P
zq4Cp3U40p$OL{DH*OZ0zhwU~Dh|6dbnXcmS7?$Tb<z$&7G2$Xy2eW2Yt!chK2I4Va
zazc#zB!x)hK)~Sn%lLhVKhjcv^L(vJm?V94CAwIj_$JNa-?EGR3bP#!fQv-QIEWLi
z3Ptf;Q`9_meJdCf{I!mDjp6`L=)ROjdY`p7*RYI>&QxIPTsxg7?QX!Zu?ryF0fe2m
z;}PzfeZ^ia2>z$x{YuMrG9yWKMYqcwp0M*6LItx&!|Cpj9!LesPayAq3k7+-<~ydl
zHf at l712%(mZ?BW~xKV{mm(RLEs)6A|EgSrly%aIoX=^3mv~Zvgy9F?0>n}rDLj8?U
z#9L^oa=x?xhTK}|0j+3!)%aY`j$>?2&F9#tyg2-CTo1{)Z=u4ZBHGz~e;yTdhR)5a
z7Ed0nQS+Cu?8S^y<FAx|lftFf#{<@Uh2P3T*{3QlV^&>O5_R1^SW)PJNK*^9yrzg3
z(=C<SKgk2Z6uRq8Qp%S|%lWo5as>dnLS8M#^gf7ZFZJb?xRk&29HcY1r0MY)=jxTK
zO9v$8=Q!4suGokhdEb>epj!NzVi%+1Ki7sRPo%q>OI;JzLZf<rF``L at IF6ZgWu*JQ
z=uI7O1Q|TWcY^#SQ;nuP)k#8dZ<5H6yY~`?G2W`st*8a23(9~bF$sTPFjV7>-Bgxo
zsLO-~KW@>pEj&B4LFv9oyjZk~2Q&r7wYl_#PuQM~`j)DP`Npx at T0)%XE~81&%~|;N
zX`IH!@$m7cB~$KyR&T*GUoi7A!~7o3D@%}Kji2_LT|t at e?jN7acf6YeI(a at js$fAA
zIhqq2T5gID|GN>?Z$LWy=|%l%JN8IzA_FvB{`RDaeq{?WC^CIB%h|*vbi5u_sVK6X
zO|(=ue<1yCsqfH6S=+BTs)r>OXoLfgW)qqvb<IQ9Vr%_>ETBt0MvCx<D`1$$KW7?E
zJ55}f>BjscGJfr{@p+pP#6qB==%n`iC7zBe#?b7t9Zm7-p~8fZ*0FFoU8^`p1wu?D
zAM9;+Va!=ZP%kg<h!MeOqG>dw=5-#t^}u>I$ZXxAUSQ3QTf at 2ZDjxyUN%mH~8INW)
zB30>rwa(Rlobs?njC5n#^@py)UB+oZ-aQbxM00c%86046uCp!>^pk5ndU;o_jgOce
z7Hk;p_hM1?ylMHPoB)NwLBTrm8D=bdFtuTHPq1&WFc3AAm(g*nC^k31;wAo{j6EpH
zsC1zdM=?jwxCmXSK*_^6+6;LQJStn5$EL<lK_aDpXMkCs_}Q&Bu=s)QCdlE-SZPvY
zvr5RQ*ANG>iR68;I#9yVKvS5k{ad$0qCBeCaoog(@#Z}gjlJtEN7y{av`o{Cz5HKz
z*8$7)%qMNmcunYhgXKv@{-adX?s3yK6xOXv*$toB=@B#=Dk1v<2C*p}(##oThY!h)
zJ(?hYX!SunXh$U))&<8}$|~KeH1|&0LJmJqZv~=qUC9{apAKGm*(t<50pl0;fX`w~
z45{JUPO9uQ>{LhKlG;IJWkH0{ij7Y*xvTMmx$^W<KoweR;D~VkE^j)9bex+ at C+(kO
z4hfJB`2JSQ8w*zyLoH8^72>m$uOTveRFl(x1Xq3k_BuT4-<7MTC>JaL3tX)OsUY--
zkf7=8A^31qNXbTtlqkGeRkLO5;r&R<i~(%ypvEuKBEDD23~O;4c)A_~iD7$W&j+qy
z&`Dk<ff%)WtMjSK2y*`JYA+;5pHrDjhViXC$Q?4e!8{Km{8y>Z at Xr!>v>EA<xf&RM
zKY9?UCF2nySR}>!)D=NPndwUrmUO091m5-6NI2?rm$*Pj=~6T;^Ryhc$eOnd-F$~9
zZ0>Ozi*ZD&c(QX!J>VNs1aN)4Utz$ehdVzjS7p%4b?B3w!w1%twG&X}@bOP*g$w8V
zMNdy*s*h$2!*4|cbVy+5?K!DI+ZdgHks`N3db_h69dA8a-%Dt?Fo!3!TmN938%1<~
z7qj1|?A+PCCMjS}f5JEg at tpF5fecdV;|k(>0wTs%Ns+Q?AoBZ$)MC_RH#yjD=lyI=
zl!0t)XRQ%drk|Si^BeABxQWu=lN+t0yV-vodgb?MST=z$S|^0 at FHkfTkRFhKdGj1p
z$b3HztX#vFKpm4NA7Aj{CHR-ls+p1dx?<5b$$5Yg=y at zK77M%q&WvfZiDuX{GC9%k
zA4%ky18sF=c(J_4_w*KV1_3(}SwoEoT}9_8h&<K_pH>o-mpz1mcX7!XOll7tpi|8O
z8Tr=Kr>U`VkZ^KMo^^<KucStQJa7-g(W~HXyF^^OdG~TM at VCNLoop)ra`^zRXv7p2
zNunjIqtQI5Eekl11;3mwWn#T1;(bwc#j>P>pk}rEq>ip_%vlhRp&-7Y1~&3cZV>rU
zQbN^AQ#ydxvd?U4^?h#KBW}1hzOtn at 3!5a>E=My;bp0w(^~l?fWbT-MEwE}l1vdBc
zajq5U$2N;%GjZTU(STSAjr;{fv!E*D(dg42Y#LSgM1|3G9c9_(IrOm>VV9iK=SO=c
znmcAVd!PF{4r-h12Xeu=^@!&6Ah?h3rP(M-fp?q@^xbVo%Kt$iiRZ_7t%utJu(r-!
zDz7x@><4mn%(g^SAdsAYZ^Kl7EhAYU`Ml=A^b|^j+EI(FvB;Lrcrd+O&R*48Z2%c_
zc*n9<v-`t0l<5$4aek$>8i{haxU73X(`o}qpDb%O`U0BDE^wLWqD+GjD78DR3(@QZ
zT-YGr_l-h3Y(MgXaL-v6le1SLfhb$JsBP5(MRk4p`VSr)0m#mOMJdTe<&;N#2a53=
z3%oh#2pfJ|z_09-i)I7=b+ex?Ozdz~<QSs4RCsY~l#&0uygYyVOugdYZ$5Yyb5()x
z*_Lq;nxN%SO=klDJ5EX|sx$^@%|#Fm_B>h&ZFPT^njh9e9}GK2VPWUbG4XVVkn8BJ
z&nth9HN#gnQq|;t8NdlQly4&lp7?>l!=0c|#ZFS)HV%RRA}A*`{>@TxS5rQ*JJo6_
zW+o325cgMoDATc8)G?`-1ubiKFC0a`4>wjYNS+!I>;k-EiEmJ%-^vDWpXMYCGAP<$
z*}!s1O%Ocwk(mI4O;Yw`ig-Jw at e3Zp(BEu`KfYbQ6Sx6?h at aWqpXLKT1{{*(vI^xj
zPdiPSImkv!_2LY-)~yiwtP>a^N1Ny5N<fqe9I4*OYiC(=I#Sc~m$t6KY%e|D!?8tJ
zfmVI;=dVXX&%{Lcu*u$Hc7ijP`A`W at 0ghFcjQDVOE(%Ntk8a08AHZ*U9KR3KnV7V2
z=2%?>$~O0Z at FJbm;GBYF#Z;sk9_eSf;@5xbYGEFWCFsnby~5GsBjb6GY;%!~Y28D$
zT77dotI^9T)m?2i<P*W}Bq=^ZyGyjzF7VzxQGF}YtcTIgma_9GaP at mN47A7t<RV{>
z_GaX-Y5Gmq^e3Koz~x(t3^4 at 9q-3Sw4tmVK?_Fnq;m*v#%LD=H at LRjOt+a_*O at uy7
zRyCI<)SRr-z9$Fwtg?&ap<aI=W6u8 at U>MbSZ3EqI5iRbB9nXhmB)3&Vkn at tYNGM*I
z?Pa{iI(?e-=V%b4EnfM&)~sN26Tw{db(J?h6yeYvFr#wTh1QELcelxY`>n|ta#o<i
zVQh_m*hvk|RnhT8-xdF6=K|a?kSOW{y<sKe2$X|>_Sa^d?f(C-Q+W#A<a-x%dpk3|
znX?P0*c)am{JEtcKw!V=z<rk3vLgtAV2Dqx@>Pm*l`=;>U+v6@*+8kYC>J`|<fg~8
zD8LY31Ft5kG}c)ubMPC?HBxOh>h8?c-(x+0h+kFCMiIC3%tibcgj8`NPq6kHvhN at l
zvVR1mOTZxp0_gmMJxOW=EMbouKIz2_G4%!h8emyhmSS1ByI-@{WHV8<Ljk;Y|D)tx
zwjU(@MfueI7tbAaSASh89|;5DrB-6N=1BS!7yC%PZ*v;+k~2f-j0fhY9(kgSe;RCm
zB+3Zu(uh_oGt~x-g~hQ$nF2}DkoVPRe){|eVBS&we{0MF8?IJT8sp*FlLz098t9fu
zIqqx9AC*X_I at 5yI&wQ^E%X6sdQL%^lryokRtT+d+JQJ&+Il6Yw$4pgxMa&am3=}Zz
z6a1<p4DZyMfRluJ*ZeCEBvBcC4Gr*roQ^JzcS%N2m8808T?qiDvdru4y<b%fMt30z
zCBcGYlKXDKuD}P{o4__hT at bw@Oj12je2{=>XP_tVGy_lUXk}f%BRd3RHNEiLclM at j
zlXq$zYpwBH9(vC-n$n0gH^AEMbwoL^v at iwI@tX*j6*=WFjK=pde`yy7P>g1O!@4dR
z4r5<y<vF*tR(Vr!yK66Hv|BPrIer>$C|3I4EUsv&z**TOAcy|hUe?^a+;MwUs7y;R
zINmtGy$rxg#{mSaw_j}T_5rK!2+8m#eEghdO}Ke2c9;$!fRH^1X}4L6g)^DP)7(x)
z&BgYMseV{^&w3m?nZfHahn7=+HLw#`1Fa0ex at r;usk3bZLx&3;&TS)iB_~q^Mo*vc
zG^Jq#gmLqiKkm#y%4;;?D5WMhaB{FPrVIwQ2nEKYlN0~V_C&vTa(kH4nNq{FNx|Lr
z_^@?tg|;E<Xe^Ht17;}%2?$T0nWw|zc!^+rgKZ{&->~rGk>XuajD$CTu|D6g>vy at -
zQ+hQ9{w(JA6ds`VzME9P^8XKPt4xCM%J{jD`?#jgWC|eg$ssvIpnBb=Z~^40ch)}$
z^KMo&39f(;ANEFZ3iptzW<;q7)!QIcHS9ZOi_T`=oBZw at IxWQ|j{BOZf8fAj94F)f
zR?pAR&EU;-Jr&4?z{2Z)khL|z*nTKzsq!h|@((=es*Rs%)d~9E1dF2<BIBEJmOxaZ
zgg{=(X;~T$AgIr9C`sdq+-~9ye(7grsgXQj9&$S&MC`JSluT;G0P7@?lX_I+Vv}Jb
zF7z!JvYb*v^g*nnbWte?Ec(oG8kP0aI$q}dow0vzX%>o at PNzzLf4^I;_YkC=sSc1G
zzq|WxT9bn#wsBSjbcBJd24nE-RVFLEBED3a*`lOrEgtRmk(<LJQIdhAAhwV=0*8x+
z!HHv at fzj@;R}@em8mM-q?!m*iYanZ_$hmLsltE6zDADJc=AVIvtaeG`Ak2qE at _}?s
zE39K5fafkcSVmHRR1^^GMF(xk at Uzjr5-=a}NIvF1M%5;gLGp)YLoJan)3n}m<8-kN
zb(Qcy3XGgMt+U4L0Lo=O;N6DZe0Sb(n%opq{D<{o)uvz!alo(->dA7ef>ZU4-ivFd
zYao1s%=WsN9lUshU){4Lf<+AwbbPweER%B3qLSy~lv3({TUNiq_7NPKk4i=!=M8gF
zF0$DTRI=T^i7ex?Msqfd01_Pe8rXgpnI9=j$Y{2C<tcuMj=$jfWapH;61tpv#J^X4
zjYoT33k)_rAbq9zbI)OX(H_I#>K&BYfTE;lxF+vYu~lkePDal?BW;QlGh`se6@@?j
z!Xtm&$V~o!4_snlf+ob87Bl|bo;6Ii0`zR$!lAM!Q!j9%)ezCDj>kD00a8Ro7et#+
zS|ik|)_c*+Lzn-5;@fF_0`OA+?GyNv at 0Nk6mT$lJpd6(bMFTLp&uB)t0=1uI(-lcj
zMi&_grVrQxm&f-$l#`Uw3!Q1)WZ=W%O+m{$BeR-++t7MvIugngxNL1C5w*Khht!Nn
zC2Dfu^{KsF9kAIsr;dJfZ(e)Jn(xRR?o<w3m#DuS6EbNf3*fjt(j~#z6jR5n5{Yqq
zpq)lCWkHb&qE;Tt!hly_=qC=WXMubI2%G6kNF(A&Y@$gM?dAh0rlzID>B7=s9qmW2
zEbbtGbmmEc7}3^11b7A}LUL&2$W@!N8O>3PrbN(4VwzhoY|(x at 3M@}BM+FSbtQ2C4
z=w_$sA|}cwenZ%yUlHR7szZbZ?nVS%75cu=Z!>|@b+kFN;x at V!QzRAkpYj9p2Rhfx
zW>lP%EDZ8I?4|4wkO5$~kJPjQb$J3(7At;#@3>-gRG}|8&?(J7RKSrlohcj3(%kZo
zC3bQ}l_?8xsp)!+>R)wXbN9X)ggiB9EiS;K?+1g~{d=5KqCsBH5kSP)Yt_(BAtZBA
z39Nkq9IH&R8nE+)w}nBpAN5Ga9>)uQbAkD{`{WHSPVJC45ED=g$VpL29|F3MkWxB-
ztnou`wlCi|b@>l8iE82f%Rv+F at D%ro_n#r6?*u9Gt;SZH<SdJ`J;VCkVJV`rx>O*)
zCpzen at Hi?_<>7i$x%^L$p(=SRn*Z*Q*c0;2bSjze(nw{sfL;U1+8*vP10G6ZPZ`bG
zQ*er5B_;kdVOqA+WmD5RGv$h)Hpps!q|fOggEdSg|EZzcQnDB7ILbf9L_j&YYgE-!
zE#yyLS>i}~^LKixU_E=fk;o70;jI_0R9c_?vf+bYN0h(@QhcoD!H`ON0Tyi70FA~!
zc;4Vp)-q#bTRp0PaGIz>DmHS>97Q8_aIb~E2kA!TIT2(x7QDY)&JV^5We<CQ4GgMm
zJ&7&Ka)EWKh#7K{o$zL$A at z?ACpZyw-4s=@mK5~7s(L|$_N5aX-F>|?ZZ0TJR0+!8
z>>4>>WD1xnr!<;I2mbxomn^M7)<5XoaWv>30$vER)j_Y~c(Mjh5muBq%+ijT2A9YP
zo3qL<I#=CQ)L?f92n9+R&Vw3%_AMdov8P308&y_ApCY;`^fT|_i7Trdu=%#pC^C0q
z=etR{0JNDNf%wH^zR8%`2lFMy!fJAX$zOJ~@k6MO0c3ivaSLdnC>Hrkg{jM!1>3&Q
zwx_RMrx7i97!EGc at LioXaaVhh_Q|@cDR+I(()KkNg2pLLbt_>@Rd3^egxB~dL&w`W
zYIrX4Z&~sWzjm&?d>>`rvwa1vU{h5d)mcz5nus+?>4rc`>#t&PaMqlIj6U8w|E>WN
zof`HP>H1QgUa4Xnb_8~CD2WF4xT~cZwR5)X7vuafr|p4uq9I$bo=5?_+f(yeE}dEF
z+y{!qc2#akg!rkt4LJCJ#7sqMcG^`V`kkj9+){;5D<-Le6TmkuxX;}UCFm3zJOs64
z4m05d&mv2=X`(CG&Z*R79LIn}OJLqR047(vfStHEfdEr|x(Z}>v<9^;uXDl(NW>?(
zOa1~jANe{70?b7Su}aL4((Hi)YXVk<`5FOFjcsQM0<2NzQX!Lnl02c-JYTPzn0OQ_
z*BD$KbsQFz^5#n%ShtH`tGZ(D-NMmg%aHJU5C^yZVnF#>9be!>*B_}D{0E{;Z72WL
zkAfK=O20zgRiIa=mFmn`t>E~^F2JnK<)qL77IXo<t4`1G#q?mKN2JerKkJ{*(GJBU
zRwpZOKciw}Q!F at tuj?48Wa^@t8aOK<19oaq{Vw3$%j?LrWv{EVD_p|Fba|<da&uH5
zlfHw$aXr21o-O>-$nOcm<u6$RPDu*J9Zoik?l=z%aw6M;w8aUo5N<O1K;rBt(H(dD
z6W`{!x5ucy9WjS*eHNGx2sEgBSZn4{VZ`ox;|2!eylK9FkR7MXya%D_SNQ+Z<ZQx+
z-sMeAT==eZ?uE|>C_1??9+aKKzatY5G^RN8Z{0`^C#2E;$~z^iN9M*H^D)>%qSo5e
zY-rtVXg5>1N2V?4Fi!<<xi3fDOkrl;-fwC!6rn$)PXP+qae7-Lk5y$lCZ9t2$H=G#
z`A4Esu*gM!w^HVWy3(+qt0GJt*^2Pzws5KupN<MmtioLxlEm-jO(};K_*)_U7eq6O
zwj94Zg%t%{zVNl-xC+&ghKOFKaH<KI-R$&m at D<XYZ<`Z_vu~NM(l)p1?ZJ99 at uZZ(
z>J7-hxxs&WSBN+)oG%YHD?{Fg=qlLr+u|^P+iYfkl3*z1hr1o2_L^wM%Jk8UC$7h0
zl>{bJc at UZ{F!$->T3}2 at y(a0!e93U8a%LWOTz_Y(0{3W)ooPJo+%`r19$d$(RCFwr
zw{D at 5<~T)6`6VuRd9FIf)e-p;daPTq8onh;qgI~#6AQH|?C{-V5ew_4<aoRv4oQ$I
zlmR+_yto-WmN7<~T%QeKaos#erRnX1eTWIxJ%n*XFFeJ-qrS}G;nElu;Le}R7q<Xd
zGo4Ma5iN8V{X$ygE_LMtd^UQ(w0}Ezue6uP7sF=$oBiX4ChAKhb^Wtcna`I%)rjV*
zyLC4s^>k8=0h3UPfF~NBw~0+P@;;X3^`f+YJGN&CNjaP%A&=&(f4-HHi1^fI<?xH9
zu at y}=Ls|Lvoj_UTrxd#W0M2`E!>o;V)XD*l89AQ3wXJ<t92rYP+72?A_L<6fGw_#V
zXvP(vSiX`V8KiB$BQ0O>&)*K9A{WQRwbm35V)*p3K=tn!ic?HVdVX@&|4-L?ty|)M
z*)0w}We_>~&OAi(o=ENAe=~@P-H4r_gNy=mX>4ltWBMq}w%LBYUl1?vRbfObo*@ar
zF;g$(K0yrpF%5N*whDv9#(yk5<`bUoDSY|^yA-P1;PDq|zO7v1v)0xd*pL9?LW^#P
zU3he)y-F?mKi;QrKKn&H;^TlB5wW{}5DSpKB~y?>+CQP@&|_LTWLy)-t>=tSH;K4a
z)aM2sT?HEtBZ03MuQnwlL<CP1(O1dIKQOx_WPD1|Ph=m&wP5AwoH-$`xiTN=m+d9Z
z%n%?8W1KEc!$0-)oPT}ja8 at Dj4+$tbAl#r=XW~8YIDBZKpQIFgY-d@`Ns*|3^Nutn
z1kI$$VZ;xyJ!Z02NJPuVKD{$WIot`jT{MYGM+d~`OiGcrc1jvx=c*7bD~d3Txa9Dw
z+Z8Qr#*Mggz0nV>yPDks&^D}dnENu#g%6C|!865XkgdW22rtxOdyJIEL5Ux)qL(3a
zJ_?*ch2WjYu|qF3Y~!g_$?}SSiFrd`Ji&Rj?}5^4#OBeh2Kw`y at 3=~=_!itNGc4`j
z1Mo-?s_qjs;{rE^CC02?`DjwD^&l*m7ae{%oroT2X@>z~Ae_9t&4QWOznVGzfcB#!
z8Fz8}|L9LLezyMuib+;ajMJOLH=Pw4p`L_zeM at v^GxRkrQ=CJA(mF?f9lSenzwCJ=
zV^|SGJ55|EIF{JN7Zy1QVq<-}-OuWq7IAmi!DS8qrk=LgDSwgd8=`a9!do<@t&Atp
z@#>ZM>C)t$*frJ^0uPh;Dlfo$`-DI$%RWt<@X(lMv@{Ker13)<fCy|_YgbZx at i@<#
zq7zSUG_ttpxdP_`+94Z%{wQ=Y8H!8fw2Has&6)vY2V(c>DO#M%Bb;m)Vp!r&6C&2;
z70n|?A~RIVXm#>ej2mloO7sxk%urwmab04F7xvA@|JT@<F1uLk at lq*dP&rGQLhN6d
zN9-t&P~4_y(`#%?gda2hF}YOT at gH6Ow78%cNBom|q%A0cH5xyEjK(ZUBM!tl4hbov
zy8>}lf(`uNAx_b*ANV^T+c|#O2$-(BFH%K;8jSbrw-h=P^%Wq%YPQy>)oz84$O5H@
z5b!={qrOZ#1s>-a)^txkaH-H{M(oJOSzq=h>26y{u;Z7kRR_MYY#Ug&lyWEMRiUIN
z%R5&M9&sq!Yri9ZTKP_to(a6I)2T+<WdgM|VeXw2OjYXiC2As+R4IHRm{PBI$Ad%^
zI~|>80LFv=lMqsYFEQ>8P`nON-t0!bs<h7kU2t@^)2k0GiUHWmq`!@PiBNa(;cN at +
zNuz&H*8!gM)6vz-C*6w_G8C1GSzsq?(VzRK6$|Sr4XxyVXDF3hLQZ(cp>HqjL=yT=
z#z3t7b^`R4<oHt0Ff6bDKZqM%B)rO;Yt?Ru4#$ft=VHp8fC^<bhXB+O2+c<0S?hVi
z{;uD(ShNCd?^E*i+YAVRN1VwqzX3sRRQ^_BuRgd};f<Hi67|0fkK6zxmwHajKlIMR
z`n+L1IV*90A}mXHme{S=={W?PuBo_MygeMlEPS^jhX-jp2zSWgQ9s&3q=aA_%AIQI
zNI)w<sbVv0U@^YGUJS!2ztGk7eDzKG-lYnp8N*n{@&4Nj2?>n-tCnPY1lcZ)xMAik
z3UvLgReqD}%$?iU1Fh;j9nrO(-zRILum)HorhL+Wo-QR~O_w$5?TbooZ=HR&lY at vg
zXkPQgC$TZ<rgJWVT`!f7s$|>REgO{W6gHB*Z26_l(3atTCEWSK*sa2PRQx4o at Ztx?
zOiVar#0><N1Tld`8T-OGPqshZ>m(#u4B-_ at G#pB3o3TqSHN&4UBsc`siH%bmhomG6
zhHXrLvl*`;AiY-+83S78|3%6lhmas94HmFsei*CP(45iuR1{vvZf09?maxK}X01&P
zdpCYDib!Rg{j_tz+KxU!Ckb}9t6TTMaFGa_w`KcJn(?!yJwicq{8fzZiJxu?ZX4(8
zA%I_2EYlD!U7?$C1MHFAK}gV-?_l|W_FWHuq>|pSU<fCuu5NuOm!o}OInkyXp~9d{
zD08$7p?-hOQ@(pUyu6MSOMZ;K1wPshjP;ksPZq at 0X-NbD1Wbin4iOY@w at a-gckn(N
zgVwJ(Hj)HBC0=a&!wEkz!oq8*p5nZ38$ib;E2Sr2eS4=CyMu1=Fn>@pUp?a>o6~E5
zvDLn at P;?ougWw?mJMS5qt+A~5(k$HnBJChq=ZL<-V06lNfq**Dk=|`*0vt`dTS41c
z+gIYddobO>?7%HUo at 3AAbGfQX<Jjo)Mq3;}W?JM#JtV><AwDw;bNxFfoa_EpzvoPK
zB9D{&R|cPMM3k?DF3D)|;h>6-M*@j|yEA^F`6w3Hc(zri2xz#BLjKcjl2e1nSNOe2
zuE0Bhy(@P6m8 at RjpnunY1QVH}Uqx%iQ(iKB5MNLAMBkDm^~noJA<I-`-2&1~YkECV
z`b40S@;t8 at hca$qGGy(GI<fS^>Ox`bbq_2IW>CiIYXVr+s84<O^(JNjyHE{(E4=Te
z`nisZ9=$EOYX;&`*-o}y3L!`A at wJqaMCWh!g2-j}n(B1{#V9u$y9LnIITYNsb9wvE
zOJw2Lik87X at lA9^@OctmbYogN*`fvNbC1k%<JjvqYr*t3=2j1}Tb<}`>4>QL^DQWp
z;Nge6m~_k+AiCoWLNmiM6i;q{uGvGwhU7t6XawWmw1OH=Al;oXPB51DiW7|x$%sG*
zu1-xo6V>@NttQp&n=A4?1;(zmFjdO=c$?}#qOt9iho5a*sj>vGcLMV>H$EPAH(aeB
zY1SW7bKBHM^|y+LdBb5>1-Ur{pCorrMj}zBp}LxgcwK;Qk$`sGRo)kWi?hWrsr>=l
zUzfr(Q$8Qa=2#uz+KQ~Kqv$tOUnT&y(RNKbyo`>MVq>dC?Vwc9asO5rQ_6TPW~kVs
z(}dQ}UbT(y;clFTCut}|6lr64-7JpWrJA9QAA$5skxHz@#qMphBd(+D?cJjdmZ?0I
z6-I#t_j>eJHQAZtP#O|{`I<!3Z$189)sRL{#I`6qzyz9gf`MRb#;{AKcq-d=Ns;{6
zU3z``)}OZh_UI-8I#>jwc0rQ^%xmFR!xc&`l~1!F*eyu*?}m$8skX0r6gkf8a^e#^
z2^!Y=>>&o<$+X=nE5xO9XD2UWPDzb35*2o$96^<*C%*Jr3_L%7Bs|tu8?pCY;k1&3
z5Nwo$7 at nn&i>0B<fy{wcXlql-C5>)(#Ms`tk>p<-``q1j at Irn%{&kJLh<I~SS+0_n
z0 at _fY?Yh*L?<3LUP%pa*%U#&($c0i9!&)bR-pUu*Zo)pAZWfa*Yvu=ohGhVmIQIlv
zn?ojEvODpOiTpx;;nvtr^hZ`<w&3R2SiSQ+W;XrRWF#T}0Avbm*w>#zh&6g8klaP^
z8B{k{2K&k3YM}pT%=^?wy=dqS0q~u6RY7L?5kH!9 at Ldq;tB1;9keBe?w7kuz)^S>k
zEGTp#k*1Shk+f$bZH)Z9JeSg&0xnB{bQ^MN`aqx~RzxCy$KSH+*qK*G<;BXdn(Ne0
zbW~fho at 4C$4Olte%La0A(2r=9)z->o596sW8xQGZRT2&7HWJGhj+xrsqK-=OhzsjH
z#08la+#7_h##$&JfjVx^1t2Eflh_1b|G~CECtQALf-MHA`9p+{J6dmtSxU1Mlm1mo
z1iqR*Z3Vl34~8(PHDRdsx>tsMesYscURPqb8i9IvF2Cf#PC28&P^1FSyE=r4p6`u4
z0(|;t*+D3%<Z^7%=fDkofZ0Q6z?2D%Z455d=PJ6AQcy1kBY?RXi&$aR5gk!#?>I7l
zvyiOH#EfJmQ%5t_nf1F+><W3G{W4fe{+q&1kN1&(QnM{_uHH9&>vaC4US`22*bF)m
z+N&Qx1Ft&{NyKxVoT#903sM{7Q^K9=D=~K at J%!khQs1a7aL9L?dT at Qw-y;#Y5NK!}
zeZeQ%vAclHSQ9rbDP!m-&b2MEmq|Q!aul);fp6`MJxM#+=v5)uOmOwuU&Tu`LhzZ#
zbgch>QS9i#?n(zOh;H=KDh7c#a9zX^ElhtcWmk*PXiN#)pDd!*DZk?tbG9S)HtGJ<
zu37otR(m%C;l at oeh|3=Es~DoZr|l{HJWAKFcDvd$;_C<NBwT^(nKkIf1TPXsmxn9<
z|DzMlNAWbjZo48$rDksZPtn#;09e=RqW|B2zDrr$T4z at 9-AhCwk;zZHT%@@pxya_B
z?#6WsQl at F|$?l8vi{uTo{HC?*7!$kJ%sPDQCUVgtz)h-d`ET?Tt-gl2<E3B{EP=Tj
zpGFU%aX!a4=M&gv1HlY*;wq(v%)0*sx$+Jl!pA9UfOLt!C*kts@`0Vc at F!_LaakLG
z3*sN?NzN<C6yW at _wSbbAODrbK{%3N9)F`xU`w&^*;2mR&T-;;Mj!?6hYB^cmSgY&I
z%1iy71f at r`{t2aST_;Wk-raA$Vst+KPNc-q$YDuXUKobGl6v4Qf@%FP-IKAXH7|>N
z1ZY`a6u_1OR(!{v{mFf^vn(xl#F7ku3;@rJ`}3Irt8lT(ula7T7NbhGYOAL6T+2N5
zOsh<@2W*jxDT^~Zq&tz=0Xr-6^REUCqUZxq=$s=D_BF?@$bY?Vwp|iDJj5u8%*9tB
zZb#YjWr&-0J at 40&1D<6MhJWa at virAL|8BCshbm!{QvQ);_rI76KXo=N_Kr?}reZ*<
zQ_(m<HP_|$+h%Fw${i5qBz_I-{egI6#>1`xxeq1c8*<A=J&KG!?3OyDsE8LpBXUAm
z11dHZ?m?2<>q`C$`8!^qR_r-G1~4UqCk}VhYU}&-{@`QBd7=ONJ|#ZkxP@|p=SwHU
zWgK-2paDHMY`A`US-{?_W0aGBHG#GB1A53M&G7U++~kEDBse$4m3<&?hH8^C@@vno
zC3fhXfIiQlr~ZD9?$p^p_6%LDahyu?8wGq4)Tl7Q9=L|#M(teUudbPN_i%D#L=G^^
z6Xcy>cFnoizBvjMs{+kr5q7STxZXAFfVTNK<U4B)QOhkBozlu4P%A@!gt*yWo{+dS
z*HCPt!QNaaaDSn9H8!1<vis5*vgmj?RAyub`$>IQwS`X)GF?4q8meeB1&}8ju9MjA
zu5cCVf{LZ+kUsiJeZ|+R;mK1&u2CnzjjRjXQS1Dg_C41}E|mqqM$d#%Ki-Q=1vK{Y
zl4<4gM2J|1kYa&U&?l3BQ=>SHb2*GFt7vk)aWDR>bfYCCS-T{`P{l3YNCZcVc(+5@
zJP5p9z#ruh^sCrwoD)DG;4(ZlhNAb}&%(bPn8tCryn1v36S$xYu at 36OE|QpI8_Ryr
z3Fxw;9|zWNSa07TtUMRAWvinjn7H{L2|?P83KqG2m-0I`;G95zxbfDo=Cw!rFJj`0
zvi=4`qd>$we^&#`4+Tmr at pt|>1q8j&A1K*d at ise<hH^ahsZ_69ycX4d+B*g{1x*VR
zwog-bq=j7lj2U{M#6LdB-6;4516FASmEwbITDYZ%G3f5c<%COOz%Ru4G|cy|_U%z<
z0W$JyV?m2OS&{vJ;NUec46<<4^Uy&Kal`N6poOF2%YN;D(1WDMpYq%$cY>H?=_jZW
z><9<7!Oo*BqoS;r>%mA`2p81kB*{RGR?X($3adjOX-se)O?h>zpuDvhYrhlwf!JTd
z-S9DsQo7Vd_t?!3s|1jWRaEioYUO3n{#qyIzm)?#e7rY*4R*s%w?4-Cl&`a{c>~B0
zXUWd}l=+4 at Se}XfvJ>;Fj>F|fxOuPyy}c-{;;zV1b32+<rp3Sd9s9BU^H>6in_C=X
zh*hYnVC7xw2>uOpxeJUTyoO@?(w|!EmsF+yJZuCeq?2$LIDxwCuLnR)514D2b0{|_
z1HUhC-#2W3$nuMQWL-7nTx()x!VWEwN{MU20_9W3f`8^YpF6%NB5Ta^;LQq4bI1t{
zmJkn|Hqg%t>HVRsmfr?HECUj1Y=O at YxS#4A*0ciW$L-NKK=Kcr9W7Bv&r}h<T!EUJ
zz!C<Xd4hkk`X#<c%#kP7BH$q|T4ZF^eurF!4=r+kXhs)|!SrAiF;8n`+>!gB5w*gM
z^h`D+pYKnyEWZmt$)2%iK5~^JmcgA-DOh<HKeX0D_me*Rk|?}p1VxqEh7 at QEVn5*J
z(Ti}66RjC{a9=uZzk&1tG at sH#JGMS^>`i at o$050t<P at 2s9U5+%JG8$AVQGSkcAH&(
z at ZhF@bg&m1M80_s_sOgS^~4Ab-?-T(4_Je-zoGI||Ax at Q&*Q62I>`b+?h5m-9X55!
z9-<=bZDC1rlzEi_sjl_;_|?T;cE%=wepwVq7jq=QCt`=RMOvkhF(2Zka((dafC{Hi
zQ at Yin1GLd>Va7xLg>}EIfH-7C1*gAecL$n(*wyKFdOMxFHF2PSvWC>KjyXYAUzCW4
z$biLwWY#587jX+V^)DdS5E&7_dI|ac)&uAVQY~IN;R8*Z8{E$pA)-a1 at L3q$$$tv!
zvf_tv!Vi*S7Z}J at _dYKf5fHwA%P|-~Q$9ljONxIV<Rpe at D{$e1AUWQbdN*FAweb9Z
z9EM|8#+FDz6S`^k(E|^v0;ih<MnnR2J)NP+0aaAsFhUH&67IIh`4VQ<_iH at PL1tgA
zS41U{|94w-<2$^)p-B<G^-M_KnnIUgL)Hz?D>|_*Xt0}+E@=roS-SMH_%4jh*)W%!
zto))}6ZF*+jT51-5leL$s at -syKYCPuS071R-qOPk1OJ>+3S;?PZi~4``J$b}olu7h
zskO-DfbunP<%1Pp(h+sG9S>pb6db;dBSvgv4>T>UOY9law#+grzBnq}X7?jC)gTmE
zIQl047A~?&b{j8FsY)!7V7a_`_lpsUE=Xj0ZU~ZX*6S)O-EN3&><|ddT&To<SKf&6
zL$VFVA9wvCy6qB at DqJgEijqM6P?95=^vSw0S3T#@U<R8YK?in$gX27vOc7^VB)s+w
zc-VAk-kSA#FL}Q+3(IrMCkI6fCY2}W)K at 7Fpz<h#qm8c$ilFZwJ~V~RN%C?Kxb_V#
z6Y{Q9nw5Jh`={Sft{<AK{#PY`pA0X&z83!8HH9H=OMy{$H5N^X`d=#R?%1tZo9dsr
z`ggCCrcwYL#MQ6(KAYp<2TP7KMdkxjF`Oz~7jbESCT@{}O5}Xfj|<>Wos^SxC|o(5
z5Qv<wp=r#!mJbbS=~zx&J29^ws4|i(l6Q_=@0b^pnP^hbBAD%+Jr0C_Z|zm1#_r4o
z%-K-je~(muG;4?cjC|O_5};+bTO#G{fH8OzjxqbM9WYH6U3d;zp?dPEmyJl6`<Cb^
zqIvsP*H^8sPUTa41EX37f6598%gPg|Uy{3MJ~q5&Ny89J!R7Y7y0>SuB;KWzh+Rw?
z-B#G_v(XYs>>~FFF6F0xEK}l2HUJouD;Ll~>UG<d)?gH;;2h^SdpV23qrofo1&fn|
zX}OJiJ5AOxI?XLg>Z3CEZGGI$esuFqxoSYH(J{3V1O#XD=f_4w46_8-D at Tpk@_7<q
z1?Qeo-WItkd^aICaKG0$Y?ud8BN at rKPo)!50L;E-bEyfsDZD6uCTczXG6w_9MOZ#C
zE?o?_hSL%g)oaLvn`398GAc at J1VIAyv1|-QJO=DA4F4 at 8$yib%|Bzl`Vzz*Uu?Tp9
z{Yjv#d4(~D=5fSkR8~LUfBPTmzY}?(+MPbCgZLmya|pHKd#VEr>i`n%TAkt{QKlRP
zfT{7_wBLYeG|J+Ce=TO%r$R7VRZn~C$iEE2YLePM?0(4kwop7m!r{;zvp~24-?h#>
zk#y6O$bk-i2^y?Zb~#PzAxbTbNI5CQW^M+AK`t?XmoaHLnRoTji&%UNgtedIk`c|}
zQ3Vx at 69Z?@CXR1ixwDjI`28M%_)U1UbF*xQwd6Jy7ORVY``BC^t=Cwdp!}Zj6t9Te
zh>)t2VgLnTtKlMNdiuPXOr~K4%R#b6s)*9$N8{3)li{}w&J5AHhg`Qw8(pmrZfq7h
z7g*gYUDh3+#+w+enzpOlpSCyGmDsgI;#w)8sBN4HiE_6JelB`N8+wg1-p29#Ep<!g
zuXNDYg=%Ae>K`m7p6zoDRi(xa_x3VlMDZHpn2KQ_={=j4`f3b^_bdN_GU2G;C0T36
z2pTK3A<|<X@@L^=X+V7xdJi&d*9)L;Y~1Fa8YWl2{CjS0CgByxvvFkp)3KU7sqDz4
zeGzM(yzm#+wTh&VZR=#=AIhjOirPEeneI0z++di06ZUWkOsvNcWS*g_oSscGW`ohx
zgTn9r=<#umTY^hsmWzCJd@)ZRaGj!jU=@fExQvK2?zrA_T=sgA^%CgZ68#<|)L#-@
zO}qh5#C>16q6RY1;G|LOrmT>Cjj}?GtcO4NmcVsxz^OZep8Xi1x%z%~M+&T?+bx^3
z7sF_O57cjwP2=(uxin5`bW6!kdWlAVG4eeO`EhqolaMRa1hp2p-a at r@BcltrKLU(d
z%F=8O$)UGK%5U>a#kyM1@{*KUT?Y}-I+qJWB^^_ie=yY#&<6$zk19EPfv)^N8|99d
z?KNFvfkdc%VpZ<zTFX(lWJpkRyV`88G&~1?4cTrMAV!*Bm`4OKmdhhBNfWleOT!Z$
zI!PsEKxcEv&VYok{Gag|+)7(x&&9rKk5*m)MIK>NZ+pRpSbvxAa=l0OrQ#EiBtT%`
zG8UoI?b+fH5p)+=3W&bOnk at 7(MC>B*8Av9wP_F at UsF8v&j>^pc_sX<xar>PJ%tGmZ
z<WdR2%XhVsl~F!C*#P}t*ks`A+MB?Z&u}D8o~|XrcW)7?!x*#Th$QiySA_|-wbLD|
zg1&9bvp0W1Yc*@*F!8Cw^ytjhFKis@=~<Wxo~E>B=k=*b!C<d`YJ7%h);tTce+?-a
zT1+R51D}E*jo~ZwM3hlCHf9p>AaE~#OS3~v?F!M_-!5saNbk%vFaCo2lJIt}%`F{r
zL7n<~v#t^s{5QTFQX+sMq&rz<uEE9|z2jJBAQIA=`1J#q$KLdpreiE$C~g&WuCr=w
zuu)J^`9?B7q at I*)NuUo;rRNA~r-q!N?2^%X32 at j|*2DF@=d%w7YWy#I&MlLFcEwNO
zP&E5N<B&V5VEnP at W|1l_^@Cthu;U<i2{J95n3<ROP91o~abEEuK5omfHcBZ3j$&XL
z%j0C%G`FsPjDiuZ<q`)L5&`_Z(jCM9%dIY125Sj%(1{gL=@gygd|_W(A!#~9R952*
zRnTR<#mD1&qtM$G%TZWq10{5S`#XflV?UbsI61$(qR=-U+#z1PWDQfsqU$-*cBD7g
zFl^Ag{OKOFQE%DrQDg<`Wnr;`Dhg?TRgA2Ogj|{B=o~Ethc2LBf=khi15td}B%vfo
z`YRyAmx#3Wb&^CrR9*;70e0ptdf^T!na at E4w}TGUAO_9n<9EnqQw*(t at f1Xm%KlFw
zz8CtS at 2a+P0U6OcA}Fq!W1bE(-!MywFM_-amiT3er|%B&9}P(;Y*-J1`<=17IBu64
zy!jA6PoLSfO2S_IrY3b$5)pR#<l-e8=$1VRVnNP78FWxw5o})b530-HZHP0$FLNgh
zQkiy-9MauK6k((s7ns3+F)Z&_ZFa%vU~dxAzm7`*WDcgezVN}2Pf}d$%JA|ZlyM~T
zqYvq3(nBz>UJV-7iI(J!w1SQcS%Wp=?P~?g<P>(@=%OyJy7y3#{?@~!JE9YH$s1(5
zhR=>WoYymMLA^=b536}g>z_x%YL1lT2xTaOpBXDYl}ZAn7`)SeW{6bPgdu>a_Z700
zL|s)?>E at Z=xfc{kjF26i$qNAn2!*0!wTObwHCKbNe}N<ZHu6{!eq&e&zUhSNuQV;=
zF3DoTy7&ETdO{`44<|~bRw-YC+sA66m|^Sis$dVAQI9J2?e`<>5=O}6 at 42mwE4*nW
zr+w?wKYPGZ4#~EExve!e8-O?|Wu27vhmADy>ZIqz&ISep9t$r!K5HQpZqm<27<E^n
z+QFKVznQw22<e&W9_PROAtUG40js`wKB%lx=8VI(_0zm-2r!aQdQ_%Gfpx4%FS}WU
z&(fvtAHQZG)yH?Q-L-rIQ0E!VgJsSK%xe*9+iGR)H=5gj{jJ@=egd*N%+snL1YF8?
zbD|yBVl=?X-x|+kRhp~GYM(v|z2fN2rsS=(y(Dmh_fx6D2kS?$*7 at rLC9?*gyUL4C
z`qD_Zv7MxF7v}0DvObQaezOWM)}SbFM^?5+cggw;Rew`jhYUtV!(bEUdKoA$Y^O)T
zVPXY1Ct5Clgb&6{bBjb*<3 at c}h^1N6<7}((RQzKQ*ikLi<Qc6*y?NSk*T+~b{QwQK
zyBVPBax~{AU{LP*r50QSpjF-4y>rx^gaHX?RZ1d1T$Kt{gYuZ|Yt$I&7$*}XZjt)D
z5nZ{13AVuQ9R5{28ua at fCe@QgcZ!i4x0Ey<oc`v2^%Him2KWFN at d7|!2Q0_QepohH
zzpdXS-$oJP0pNT}%qo^K&om-(S|nMHe~Eq at ns+M*?Gd}<EYenbV3?PtwU9DPAABYA
zTnNMzw+kzG=r3sPN&&@$0%T}?#r>~@00BV$zn32<hwzNQW}{7(gSAH_5Qo9a%<p?U
zR^P^~T(*@+f0`A<u_qX at XJ;<Xb>N}rMTtB5?#5$%^lk!I6aXa0rjh%q%1*mc at 2B<K
z^$~$?j6?W8;p<oygGviyDf1VT-~j&$%u9b6I~Zg<pieBE_Bi;jqxu>LfS;=c4+mzD
zcO31qt9mp6P3KbVa2jXf5C1Dk-v@^ffw31b2@^|_fBY>I!&i*N4x&=!Nejl5r?p<_
zA{H2K8PcTBh8=Bfht^<O_|!NIdTJS%u5kf6ekN6n71+EyqJ1^~N&D0*A3Uln_s22q
zekiC at x#=XJ;Z?V+$0WVI^vw3AF(IYM=mZkKhYxA!J$i!5t?_t?=oCB--v1mUwU|6>
zpda^#f5_E(2<1?8Al9UGAuccJg9%^S{brKD^VHr~4Chh%HxB#M9KO+WYT!(F9gcbl
zmN)8AYqJ*JWB-51EVtytzh at W$TDaKC!(hUo1_>Z!+K~rgxeG;CwY(n9WzWSZDc|Y9
zXyh}rc-w*DRJNSvWkT~bE~}4-J`z^rvQ{}cf7}c9&Xs(0celt#w^;fV+mrP8sLwos
z^-$%yhnB!s^_VDd-BpUB?9Bjw!J;nt)^^4hRVkvg?nK8DT=uNY=u2^cw%a(4c^Ub#
zMV^Dy2~VQk(|N=aO$8hM>aV|;>V&S&4@=qSytj7tNGC<LLi=nQtRp$Nk~4tdv^AN7
ze{taVT8rXERaO at Cz;SPVvkBwTn>=NTtoEI(<lmEuu51V2P5zY{vK2B;3 at h7auJ<>E
z?HPfa$HJ^yYNeg;#<k0Cjirr0xRmARvpxC#PA~4Dhq`V<Rqon(Nub2lRjAb-vXfCp
z4rIren&IrW1W-Svb|SLrAdT%s%tjKOe at 4)>mKh-mpFVqT>Qm%wksXEC?@}TB+fa9u
z=d;4;lqR+xVqwLrU>J3+{B1XNW8*pm>sx at Xs`tRf<`B7$L{hqW2VqC&PnwhgBr#9X
zD>cECWGn~w-fdTe at X>NLu at _>7*$XK|5TU)QGx=V^P`?X1{x{QIT<1L+J{RIWf1=#l
zox8BVKpgv7mRFV6f2?x>Ky&LAIPv63`xs8M#*XdT%-Gq5A$gwy*??<ZTC*~&JKcmw
zb+O6vig@$-#{c|FTZfZwOxtlDcu4w-x-{Zp1H-LOU`1dsOTqt&24A7)8}Q)-S|cm*
zPv1$_$1jrefY0 at Yc$<KYHCwL~e;iZeN<76lWw7_4koDc^@nIhrTf+^kbQAaT-_C8x
z_Mj-pI$`yI<n=TqDw66;{dKRGVL|7$p28eP+z{gXTJ#YUaK^FC9qh1PsU2pL<-7o&
zz-z_9X-CJ}a0xJaZR^%bMP^@|*(DrzVMM4LMXm$b+gKp1S*>*zcQaA=f8cgoY07>R
zd%^^(V_)AKNHU!l#^+^kvg at J@k|#xxU)#Y at 0Yt1OJ8z@mL$rX{&tpgGLt|5%thSm9
zd at Wp*hXyZenVQ1|lyTcI6|244{hSJejRU)(t!Mk<`XJ`5W-{eUM_WuAyf}Ke`R?w4
zb)}o_brmwB`o{&LRElsOf2}{UYN5ep at c$t0T7EJm{ExOaAdJgpah+j*mvxTcHyGW@
zP1XxRcbP{}qrg4GysG1Uo)Kz?<;yIm4(x9iD3?ii$jE`hGie!k<~hr*oKhgP#3XFB
z`NRtLX`W$)tB1-TElb0}1(E-K<$OJewtkt>3Y9fx9LgHRw!}x<e>|fr=4wQlKESRr
zC9(T>m)9Mz3 at f`E(_q-cDr+e}yqxmdep>KP6lly2K)Saf(LM6hmvgGOc19a*!PS<t
zM1E}r+Xz$WDBMT#PW6y%7UbkYnKbkU9=c?eVcs)d^FX>()b)IH^OkuWnQ+V1p*91}
zxnWs{xQndgd$pbKe}WE at 6>XZ_81J9|l37^qHx(>@tF-I&_h*A_O1Wm!&)6}9;~tv&
zTXhK|MB`hGF|Y@@1QcmaWs>cfzt1I$7?VNtVL$+=37di2v9O9cVKgcF#A<;LHAQ}j
z?-s0?^v!E%vZt|B?t3TqbUG19`<WR`#$2%h2)6{aQm-Azf4i{k%vL+E#<NsSdM-qj
zTKI_9-m}lNsQ at P(iQ3%gFZheJHz<C3F2`IFC_UK at eY%4ZM*2)fV|H4n)N?_MZZ&h!
zHzRqO-V0$Q3-@%M?nJ6)Gw`_+M=nc$N;#F~cC;qc02UhT+!$HZN<)gZ&!?F2=9sho
zj>)B~*lyNEe{@H??jU(`bQic7;issZZUaH4qWujd1CVh;`$X{<sD^h=KLfqh!@Ka)
z{m6Ggwc=H&QBq`l$s3}R#LWKe*SkA80M at N=s328(_2pIeBPw5t=<Kv-RM|2|<Cfvh
z!4-dh2x{>;rN`ZvdaW9buiC2}|B$H*Fn)3U1J~b{e}&aNn6axOQXx|l+^0{Ul<*#M
zL(iLz9LyJ^mRiM}mF3*#{DKEZ6$R%6zMu%4WqZ{IXKd{<CyW at vfP^I|A6<ddRNP66
zgp+68*RTh*L#mL)V%0HV!TFqB1mbbXjNE>^GtM!O{)b8F!^P5bIUbR)27r4G<Y at +(
zNBaxDf8wzy6uV-F4B8H(iyqYpwFg6_J!D%*P&>*WNVy?+jryuqyn;Ygbn(#~pfD-Q
zhstc(ApUg*=?=ux%t*LuiVs$f=lp(C3C~(7b at Z^9azFq-fP&#ydDv*mE8BdOP!1ZD
z786sMaMgkv5yJ|Y7zZG&iE*X5zZe65HNj)Xe*-n!318$8(MWp6ZBU9pKqt;)FQgZ>
za~uDP#Sq212D5Cd?Q7}d at P-e#avS*uD{1Dr$_021s2{zGIy at hdU#K%o(aG~o<=hbU
z-KSA40>%Nd#ml9Ebu>6kvi^nOs|$sl at y>7I6!jhs2T7Y|!$m|B$9Xr5!Lp186Z_Vt
ze at FB_<oQ&%2!9F7*AJu7*Vp<DDRGi>8NQXC{ZV=Z_|+ienL8Q81gZwS$IIG#IEt3Q
z6X at dUa}waJs!|-N`*DO?bvP+ILj<Hec(wo^MTjn%TowQ{ir^p~i#1A%^=nNWL;_F{
ziDMM_yi&3J(mD{WD%F9&8aY at l2irTgf4@S#d-Cm=DQ0gta*{7Q(sH_2=yH~?KN`~2
z-pmPh)87ayBiiKCiI=;f$5bL(cRAHDI@%}ME~D?Cd#{F$PeOulAy>T at 0t%@zPQ%%`
zaycAy1P1kBlF6q5tSlIBZQ<v>p$Ye5g9G&$hpp#Q!YpoxGUqUcMpQGah`8P#fAhs2
z0DJ5(+D-hnf!xiVXsNC{UrA}E4WVFJZEcPUG0U_MIceI|icBuIEy3b0=j&NYYT6oN
zi3g-F$bABOs6r1VtHJtETZouQiJ}#o7x}VOQ(C&oS%_3`%L<EZJrdDm`gK8~!Utt8
zWQ6)^ACWbj=K)LT{}+MXyC~*~e|Jj<*}i~fTQ7D-g+Tu~$h|!9D_cHz8%kC?*-y*)
zQ#dJ!5S5$P5gHC54o6csj_|c5d$nZ+RWxBCK3e$R)?$WI-Ml36xa_L7y~vFm4Fwx`
zIeqn0)F@!QN(#JigdoK9ZX7f^%n=^qzxCEkoZV^yjw*AcKlh@?{@f}ie}$D8`z=B7
zA6R=6^Ovh#Cpx%_fv3a at WW`HBA>^P0-P19<Pyon&#l?s!9LE3K0vP!gMNrWu5~B-M
zT4Nm`6wV~kXH0UN6qeT6W{meE`0MVePj7(SE`hZwj5^*TZUg_+yWx>zG7Mz4g{5&&
z4HQ6R2X&Sw{l?_plM(bne=W{G2h`35!92ur)#?3n9F_YAG1uWsqOYQmzU?L|wH5-(
zIbtsbP9VzBX*WT7Gg+c6S6C)k+LRUE+)G+1*fYIh<ta7{WHg~^bveWLVoW(1KG^+|
z?N~=(ADETs-O=`qa<((!s$j<E16!kziO#&SaDKGxzaw&iSe@>Je{PWq8m^tg#TYy|
zoGu7W)9F+0h#dzi?BOT3%*(nn8L64*T?o6sinI7pV$fLqn#kG4F_A;V_*pEJR&y(W
zPV(MKptfQnXgXJv72pv)El_9LFg$NA!FuCeq)9U6k4|LnWU?siMf^?afAH;hFsITg
zRK3GF22#P?G at tu2e?ddrRnsIz35ZAV at uj8{Xo7UrgBiQFP|Jy_L=usydw$c#gvK2K
z;Wfs24}N;85{>g^Q!%6rNljS}h at _O!N!Y^*mElYNubvL|k|hQ%y-#xMw6m_Uf&Ld)
zs<@Z$Vfv`A3=~l at _0{iuPQP3Kkr6oR8*N<+%<+r&D^+XMe|e%RS<cYQ0iUCO;WOka
ztp2?W#iIkP-rCYs%?HDvkrHA~ok~<Fv;O`vVO at yS0RBN0-uo|*BNNg)4DUMxN8o4{
z#OQD>s^UOl at qEUs=ft;~xH~&s!oyp)GrGNTF at 2fL$nc?kY;o!GIwmCf*|W3~dSHx1
za=h+vG#u9te}KWErLWTHM`{pn;&D(jN5oy&aVcF%(&=!?y;%W}yDJt at b-Udt1sW0(
zdlcRo(JuK795^6~-4=p)Uj1qNX+Ys^-VKt=6h0rsMaMD-mtXCS3D^S+aXL_Z2t!*Q
zR9i{64|{%0*u5<*LStjq71q!Q4V^trj?TxE?Mv#;e at TnoYaX1dS#NdT3My*J*g5YG
z^t^J_p6)jM+eZ%Z^G*&LF`AVz$8<}f(+YGSuxLRr=XLLXaeFkBC^snq=_Ru9)7^}7
z^8KM-%89c6-+>01q|T~c(c|jH(;?DnjRADQn&bqd2ka_<(J8fkK_4?yY at m|Mi28qs
z9p5Hde+hq^7ia~RtC^L_3bp0dPKqK8-kOEhu#F1y+y9Ybk2&oI at M}z4&Gik-TpM+i
zS!hCI38VGTyM+_u(rP4UctA79l5#e^ma?ei_6_=iNlU{A^JLy1SSO5o$o>OQG<pdd
zhMXt0ugxPMjm7r$a{?`RJ6+&LcEriWd^*+le`|~1AB+OJEx!Q;P3LNSdt4J09r0nk
zIR5=a^6vDNFCfXuCEs3{2(RKEkF>Hy&CSf`5M<Jp{QO$pPP}X4xi#Ic+6e9skRgyc
zDQ1c{L_ABldv`SJVjIG&Eo5Puvh{&%=agx)@-|tGr2bF5GCBFKW9Cn@<%lOvNF7PK
zf8 at O798Fk0)!s$Hju60?$iXj`rV|KTRDk-@;&bE#0eL at N8Kxg}!XXm*RCY*uAoFKO
zns??>75sxT`hKzl0BzfM$S1V&sq$ld0ss&s1A;Shw#6eG35L4;{uJ}wKv&pQLt(a~
zI2K1p%T?@j`41nJ9~;PWp#fjz6Hm8Fe>nstpEg{UDP5fXYfu9S)7LaD^R{f?TxwaF
zBq36J#Z2AkltHnMqhAxNJ>@^r${>4tdB7ZBbmoX1Z$+L;ax<s2y&_^o*|#}(Ls#S{
z5v&=dRIKaxFj?+nV9gwXMZJCzhN)^6=2q>LE?ylA;?n#C+;Ft#lxzgK>Qg;(f4`LK
z?-YN=-q5Lt?$DFZX>MUBDA at Q&?1?}Y1m^<p?U#jA`-6STWTjD0p=tH~$%74?0Vov;
z+mJ&W*0 at m*sTOMLumt<0czgLs9<DdWr!WV<P>eEj#^zL{9ER^oqEZ$k45^x<dMu<W
zASTVmvb3AeBxHDW6FgiKz3Tdef6^hx-alsz1rReeN7TDLx;x~u%{K+;`~gqH(y}2y
zP at YIBoL*aTwd+4~_mxxsV(lfk0|w5wLjDopz+<7CI0(3OU<yOk#8`HTNeR`Utyzl~
zH6}WtHe8PO7%)6PwNm$5644}yxA at ULSi{y9 at _eQ$>psPrm}s#O&dtjtf63yC11<{R
z2eQ at us!ui!PCgLSfd7pHYCMy=)U=UA?%%5=w)UC~t%h|EU7h=*S%4EMOu^QR8?7Ut
z&UzjS#q)e%=)9FCC3RsLpDxLFagYERidh0HbOr_1J!f{kLhWG{do}81a0_bm#o!#4
zh!fyytSzv<T#?zF-sfoufA}x3aY?d&P;XPdgXwz`DB9iRXA|AnofaBI@$%q4__^j{
zlfqib0z`icxpH|PpPA)eJjSyuDUDE#n)G9d8vdrzz?K0Z^GaMZuUh=t<rY9Xul)Xr
zO{|5rSZ>#oVl-qLFBydg3b`&Mh1Dd=+y(x#q85yG_Zqd_MGh0Xe^ig=F0+ZxWWcXC
zM>5PNF(W^qH=-I9SidQ+S2SGCOBy5 at m;VMmJ82zd1w~qntR<XeI&wC)FN9_;DICA`
zAUI$KqQb8ZsbTq*ZnYY2dj%BN{qYimN*6N`BDZ!F=&wi_2x&xa5RA*)MG?tV-=nq;
za6#bzH(|w5t6lHne{eJWZQB|7KpT0%>3Ho4bP3Tx8^L`2Z-DkKg<QL>avn5evs23G
zYLa(%Ht%)7mlqHY)_F{xEQvwJJQ$_IH`3OM^r-+Q0!nJL{s4PGCE?fhBS;?c*zNge
z4TK5vJE)s9^<wShIiXWoT`9hQNhQ0sYio_MG_zCh`ysUce*!_fcAV)zT70lb*w5GI
z$8tWcoX6K4hBgNmIY)JOGfX~h?3F;t+}e>&U_NgiFFUhd3bhqGKYl6ac)v;FoJu5f
zLEd?W?n;lLZ<tWXzmrIEu5fIa at xhG`*YEJLg0al1kcRMp7+~6!Bx2 at z^NCc-R4ia&
z7&b9ykOp?Ye_8}$>z+;?5U0vV18URSFg{*a^exiyS74UB>p<=v!%y7i5#^j68zkbn
zAAM=~>2aT2nU3$<gDNVrOvS}Iew)7ybID$!xO%oL#A32?oHD<ahR8c_g(oDW8dMI{
zUwHwS_yp4{p96_?LY?B31HKlNA(i{h;RFsM)MS2ue}xiQXVQ1C-?I%n=9@?>AZszp
z77v6^7A~6#?Z7|%`_s59R&WWq0a8m>KI<tsy+<-UJ{<`0dnXM;hR9l9ZERJDy4A*|
z8_;*!^LEqb`irv`@sMt$*%#o!aE52ed#&V-1u$}d<QM7<`=iM?lOVe$t*<G+CWW7~
z-lA0fe<yju#UNDs5TK`y*D5$uK3H&{_sxNII4$LO4LZ at v=&JJ7CPLw1o$-cTF$ok+
z58^ZiiY|*W-P<_)B&!a;e$U^zTBnPZ7g;Qx<DVMARLJBLZPuTNN^}R~PKZy}&`^s_
zo^~}+Lp)3Z-izjk2pE#=-6>C>Zmg0{*~}h$e~QmDwV}6eNMYNUphJ9UT34!HRl?zb
zl6Ug>J8fT;8)TF-AL~kI(@m0^w`bj0r8!qU&RHS&llPf>-k_zyoLuvOw5qDnLiAdj
zxhMmykVP9z?iQ$=N|<Jd%fE&n%R80x0MiQ}!OD==v<lBs=T<`WFk-#<E7?C}c}W5p
zf61EZrtT^$R$6S^GQT$}bUj4<Z-&}AJH1G;0(M*uOYv|PDROwl*!BIo3~_Tetaqed
zX8l2naLw3X7wrh%ek+6wsllD-|7ZvtM(5U4kCUjqT#l!#6)g|3Z(l2iiagttj8a>B
zgg1!rO5_m$1$EY?g at Sl)0pLA1T9j0mf2ygIE9*4T-Z^qw)fkvAjsl?6BblA&;z@;^
zr~g9dz&R|h7t#+?-g%x+3NCDy^8lRwf0-Ilxs`Pp*p3T`!V7sWA(AY+`lH}jrL3F;
z7Z#lDE3<49Rv~Ukl`1>_Y&HGpERfefVXXKvP8xz>%oDek at 5r_M@WU}F%CK@*e;Qu9
z(D#U=1$`pkU3Q^lu7=kOye?Qql2YSN^F<c?r_nrbY<-?wIlG-(*P>n*5U1W)d3~9X
zcL!cV9Lhs$Zd!r?<M{KYgC)+8*y|LjSI|>@4;xBC@}Eo>;#iXW(8TdXhf5J~n%St@
zZ*SKk`atC<Dfw8t3gH1NryxIDe+~_y1D=Zd!C#r{xKj3y!>Rg7?Ra;G+iC*2Mbqo+
zzb!~|&sW3C01kY7`E^hL>PCvl;JUKYZM{<tMaZ6W?Q)L1Vo>Nu<I01PtuJ2WW?nuZ
zuP-wXk66N>g|r^NsYJOmfVdchbiw(^okAWgR39t7Ur;k_v_BelVS}^qf3~9St2wa@
z?Gokk?%gGZmEcQrnF<^bwXnRs3gP5p;#FSt39Wn4d8C({cB!-K4FhZ_3BD2X$qDNA
za at mo`T<VryOJxZ$O at 0t{WA|eGV-8(g-?v{zi}zOoSduF_;u9oxomo1iyW#*-+aYW6
zslGnz at xii+Wew>RWd^=pf98w$wzcFq)eNNVc8asreE_i?0O7Oz8Uiy)U(cXX)>hG&
zRD;s_kj_dNX}Qz(7kDN9rc3Zgzi+|RqXxfSiKgwe%gOT!CV{Sb9(k+Ah^p1?p&pS6
z7XdJ3skl`rbyJrqGe9UaVfcS7i~Wj);0Bxz>#U`2>Lhej=Q0quf94<j<=!hW-!P%n
zgG}+Lf5xzBv`i{iJ$o5#CuGgCQxn%%Om-P8BFw*RO3$j%gTq8g4iDfq|Kc=CPNd?j
z=|izch}kwTvBG2YxDwOy4ni0v@>kuMylv!KRKB(GEar|-zJua;EWXWD?(hcDR~&=4
zy~T&{3;)~bhdQp-e?>=M@(z at XU;NCuIR2nDK1z%y1-b4Q(0ahX)D2{(VFt3iN1PBe
zWHj9tLNX$ne;sj+Y}m64C5XjdPQ-ap#M05>5<}VOaUW<?hXnl>DNF9R6jC(QG-q4f
zx55Da?bjsqVQw4FHYquOLAu7_uZjhl7Q_~XZaE+|Uo7d`f0X7dXYLI-L%8~x7nyZ^
z?X4aEWk);Dt66PZ$wY|KO6vJGp>P^xj at FEqDfSH5b)^sCR8SPg^#iD%*s+M5Cq%la
zw=|$zRq?-w*Kiif%s4_{dC3#A+ATv=yuR48BK?~H!iP(l^Q at 81Kr^fI_eq<1z&Hil
zozeX?RAS*ze^iisi4_NlJZH)o4Du=X25aeUj{+bq?C3Yuu7M?T<GqPPgX=Tptu+%#
zz;eh?0QuyQ5u2{~ThLxC4q}Pw>4OXH<<YQIa9Ey${u9_cCho~AL_?LJJ<vHytK<s4
zj>RM3C3$szfg at QM6Eh88Ul^-RG_X- at l1lSQ#gm$sfB*GxcU^b5+rp6Lg<LIJ4bs1~
zog)<(!L_- at GGatUoXc3|Py4ayhsvZlke%yG!q|8vOM4*ee|Tdi0A9hUA+ZlSesInM
zGV_c)cLxgQugI~r)xm6sM#yg;Y{-);g3>5}jGa-&$*XwoES!MgK at OY)0(U5}9TQ$!
zNQDo>f0xN{`=0ri|DK6=qzEK4amGGpeDMw;!C33_zvgfZiFB=dcholL-S{(bXwkIy
zW-I)}s#hYdMnxng&^bfOPvhXLWVcOAglRpzh&3{^mro(3Lt7}-{FSt=VStb?N}@uJ
zu+afdo4c`R35mIh?+r!Cu;Z-WtqSpltTWQze at 1fR8UFh|io^=IDJ<$;7+pBXH&J22
zY?By+Z+AD8=<f}1)gMU{aNr_buE1w6^N<=Gmb5 at bdONE7Fg7DAX?C7Rvx#Fn-yLR4
z?rd=mSl;Idd-;lodBL!=M58Xqg#f?9dcl})!HykiFQBGIOy9Cg315I%I++67hQkC<
ze=!xI7abL1LKKqx<12vGQcKfE6bM&w4HKW$tB|p{HSUAXbiCe5IOdwXpz-&$Ww*0y
znK;^)WtAGS5&;QwsiRNNzkn8V<p|oZNv|(NN6se=Q;@oLY5|qY<m07G8aDYFq}uXf
zltM&g&s>`lR*76T>aOhdnQ)^zJo?qtf6}Z?Vok`X(G((nb#RQE#S*?$4d48QsA2d{
z{fV8Pr&{6%-_IFtH&WdE^zlnCkj?7m_TyjqD{bB)X at 8lU%3BeeHcmuo#In|d2LTP#
zIAE#7D`V;yB7g8Mf4%+gE=%KT8>h1*ATaE&5AijdaGv~hThjKpCj^}`H`2^hf1y#x
zI~|5nuumuZnyusrZVrD1ghq$ZqGvqZUfw3gQ5g8L=QaqqF35ab-qPA)k*p#dh##H2
zZ|_V2110}1|K1;%7X8C;1cgJJ6$0kN%dR(F_8OhU;E#4CBSv$uSOvZ47$!ks%mAeh
zJe*8pGsGcCx<8C0d=|)3AVV6Ce`<S?6OECEj3%=&^t9k^66I9pQZy&KKudKFteDGu
z)FP+Q2wJ@<ybjBXe|}Y&Jvl~zp&RZUI-^Omk|g}dHIel8$%4ea5!x+A;RAQ^h_f**
zf9V*40FFwr_xVJW<XSJg$GyKsf9(Pu9%3a0-kIxiaO;E11?#*g1`BQ<f9zqZR`=LD
zJ`o04<I*HL<lcOE_aPyZux at 0w_&w}sJp`?-IM#8Q&zeY)bQo*r{*1mG{O!>Hcwp4B
z4Ck*?Jebqt-^fj{5ru5gJ7#ez{4AN{+H~yp>`&5;jxO#kg!ag+#`yGik(w+1OOce!
zUKTwQvnNI<bokiY>>A$Ke|k+L;3CaH5Pzu$91S{)0OawiNVJs<f#SMvmK&SXz%oPs
zCwEP$gc-yilyCVbi8+?0-zzs^gW(zKFy at fKP?F})U0v5WE#W>a#!sgf%Un|enK<ZB
z?Ua-p=?h=lX!%?f7<cmLRGvHyrETt+z4Ea_RGOfdVxecO!KBgxe>(9>-I at 7~#+#_x
zwvXETElyw))!J&C|K3Q{P)Z&z)QdRCY%~oLrcU{RV^JdIwn&3(owLxa8Zazvw at 7?5
zTmLm4jsgepB|7@?+uUz~mTSg at QO;0BKBgK_O6`Sv1StK&$nV%iryaSkJ at f<tdz0-x
zMz(Zj6qtoGWc{K`f4;M*b_&kHCd`-*ta7C~jdbwmrdW8Ke$uXZj?4Q{Q>U?eE+dv&
znOA~cb_t2y_2~*G;5&oVEtaLngR0z;1bp+jMx<G<xp;CY6fl==;(W*H!Sqwdc>8}N
z)BW0t1(0;AzL8);C`dETdRaaylyTs6FlDt=*S+U$azN71e+OtV5u`tR<426Fo0_4a
zn~>SFyJ)g5()i*AUk3WhnWfi3Nv?o%Yqj{(H<L!h{09B^bMuB6W|s(;vX6y(xj{)d
z<VCa;q>q#xT#a6z79Bh_ at 6U}2$@N9GI&-6T90;SVEWbQnvzQCKe+?}e at eBv`)ieaP
z<+RAePJ at wPe;t>a(m|?xf~C7jBZ%ia7}v&92}5v?Bqc0n=q*=zjHQex2#SHR6s(2m
zwm1_K(pQ0>zsI|@`?VKy;svl(wSl at dJ{w)2x-{}Q#h?~iYCuN}5H~@SwJ$O1TPk|F
z8K*-pheooT(Mh=Pdg+4e7mlk!a-!bexW_5^VDV0KfA!Tx_}sSzz$LC{VC9q&DqRkd
zzY9{WBO&y$UBlz*T at r1*32JEc6FD|=blqa0KoBFW!@pFn`@f?J6Dv6&cLG6j%K7lW
zB?Xk>5EQJK)d2Jis{TCFFLd^-H3dF1=ZGgCNI`F2CKZTQ0r*$}PJ;B(ytxt}zqu_%
z+K4Q)f8<q>1g=ti;ls8Df#Y!ZurFyVJ_Lw&`nt at aeuu&~4Ql6~QTVRJnmOcYyju(4
zsWtwfuQ<e+9p;h*4*Z2(3+=puF?Cg<TwwE_G}S=85liBLEZ_BPSz0*d#B0q*!yhKZ
zg?qhYOGHv0igbt#t&FB=(ar-HGhnTqHjN4ue~<JhCb9)hu?pE<Ib3V=)s;mL0p at Oe
zh__po81h|*?|7TFjL8;FC>k`D=gVjqYVZgxXB3(CA-k>2W~+t^aNnpfUKnt at Tpnkk
z=8arM@>EZ-2!3Zza$r(bx$mL0wZZ;y<ww&L>Ze3~Wc4+FzKvM5>NjP_h~ng;KCF<m
ze+LPJU1SP*LI1DGfuiOk=T&<l4JoA!rDhRI=g_UoJ!mVVu4P<&3Ans?QQoj$zq>qF
zh%-a15-amc<?vpNE1fxXPD-;2(4bCT$kWx4zF34vV!9f={N*8P at y!1GmpKpp;@=Ya
zje?X>7?4I2Le3dv at miwjZRpx&(i?A<e-xyJ;T0c4S5=RLk&HK7@|n&jAcSD{-bMZl
z4uIE+FoLXTkCQSuBls;v?$SS?&=|`L&^Dbb+XEq-T_rA+$2bY at v7KL&mcJqPAfg(k
z$f<&+P9*jn-4#qky|L*VnwpOl&t#ipX(MRUPkjZdPmoMrk$<Nbe7nX;bz-X)e|*1T
zkOIt;*AMy?jP$86!1)v}jcs{?NlZd?gLhNYScAVSW^Iyhxn`os0y5Qxv2ifFKL=}m
zxRf64?dMg*dNcag;H}nK=4s`4Cq60FTw{fyv|It$R*59=b+)(Lry;4p(|fF!Y%t&9
z at K}Nx&YeP_WBt+^v#3yuNc}Ggf2dIpSMWJ~?)g^0(mMG!JNdksv0X$EaB|C3{e at kF
zy~&la at 61!Xgz(jben|?V9d58h44_y*Y*{QUF`jLlk*k40X{`ZMJt;Fqcg-kjX7{H;
zhz!z3-}h>L%FWSY^C0M2<`sG`PP8)jY8id&Vb)`ms01{U6J(EOQNU|nf8duaHQoQd
zsS?ud>yz4OeTMpW<NQNG>$T?AkGMS(=KNjKuB{{_9F#<O8o`%JIPxN)Pe&-Y>e9FD
zX~2daV(K%!oY~2aJDaWgL;C_u`rhuHvtoIQD^g2<FSIjrM&LdEOJRwZLOF;&p7I>I
zgqn0Us&qiP3pP8%PS}wfe{DY4^@#~5<WSGiVCPsA|H#xN5kafZ)$kSE$$I!Pr@(tI
zzb*mGg`sFfm)UZpgsucG5ggn!oT#5r5y9P~Cqd<w+-b?NBZrXyV<c2wo)1=K(x_wQ
zz0(}Ei5;YXEMd-9GHS$~p3CXVl1SP>-|h0j-zW7kdeNa`j9*Ize}O$VV69gnR|sd+
zX`_y7<Q}1mF0t*<D0}W&F1t^Op<{4e&3P&DEG at uszqTF-Xum|{NT{3k!ZOZAu```R
zLx-v;?m3_tu(e0;(XJKsk#2?-{~sk{B7sRYA;zr$3qraM*l*K(S_zMeZ at v2GJu&yV
z5>Z9OXexdKX#FYce+&%H;>F;S+|yR(r1wj>nFqZkZHY-P5L<XeLn_j2fx7V5i8x7O
z3KtX+!-Z91Tk~8RrKvh2DF3U*a5?ns*J8K%@`7?bN<Qda=ey>rEdP7}C$eu2L%-it
zlU(e}_%X#6;f*&!VuQ{6!oZCaH(Cbg!jo8JwDQ=3R-d<qf6KgAgTP_WZ5RLv1vbv0
z at VMo}F(#AQCRrJob2XCRE-+o?swVvp+dj~v&4lmN`S+Eml+~WtQgE`mhf%^(jtH|5
z7WlnatFk<>M39GB<LS4b%DXp+qltND9Z<HRlAEqfJc%KK>sdNV{pZ}`yKen;{e*%z
zbKPQsk#ko)e>=9}^)$BuL^EYkb|y?T))OPN2k?xt-C~slm-;-tT8ba(Cvl{gfq}S9
z8=(3;lXKe1QoBzU=C_*16W5;;n2jgvi7U6ZR*alBm)WiQYJHBOJGGO?-^&fzly6X(
zikk38A4|eJ&q1F#9}DXrY2Z{%OPypa8CNawE_qX+e^}O+SEA-U?;G^ka7cTR(b~m-
zmev?{QNWzq^v-e&n?glEAf1OEJM8Zk4dn%)vxtDxWDfXKhPmb6u`(7Khq~M;)$yTo
zOjRN!A4(?$mCM5lTWw-nFiaU*&fuUB4rW%`O{6hw$1;+7LXSi+aXi-hP>bXjMka$h
z=p{>Ue+*RpB`oV33YIg*HFjP$O>(<vgpkSO!6~qug8ktLUl#=k+JKe^2mex8=jAJ5
zMC!$_ at UFhta3QPLjjEL0;5DTR<4?$l$hRaAX(nv7U5O#Pt1B^@%$^6HSod#7v{+<@
z(i}Q)nu#b_O`I~}Qb3;m6mzz?Ls(4<%_^w%e?Pg}gtL?V!{~B5!a1C-q>sq?WI0n8
z)^A7$$8aySg<HnMBlNU=u`6deEYlS=tH=N0QyL|Z{jN62a=&ZxNqELv&kMXay@?-S
zNyB|6MEHh|Z=hTNC3X!35iRU1jy6Mc1?4nH;6diNTIxd=bM5YTd&G42p2ZQ%c__^S
zf7j2ei4LTc&4JJM4gWBhln?t=U*vW%0vy6<u3a=-VY+%WaP-t^bGp%5uC=lh6IwdN
zid)stUYTHQNruoJ1L;w))O`IEo`MI9fvt|n%H4p)78*&vKKeMgQ at R~`?Ic?kLE*+9
zz`^`=xC}In`z+AUSi3Wzh6oEC9wBMuf3i3Na%L?mu-_X>4{O>pAB$~Y at f%Qloyg>5
z<uwE>HPVrqJ=<>gJUIgSiCUsbNz*C;gKhH=`%JzVN3cSk1Up)GPXuK$ow(}G&>GY$
zi%t7i(r<q*;;p2ArSj3ctp~I9Hz<Ip%taU8qlOXlL)OFlE}7mlUp`@xWtFg2e;Jgg
zP)p9Zs=COqzMGbagJqj_0*mBN@)m-i5;;;l_H72M=YI?1l*)kN(5DG7mk4%1^T)lt
zfetl?%r;oVS!T`wkrX77j!n;`L^JWQnbHHW(}BA6YiI3N;W)KhW3B at -<p2f$^UKis
z(u3fGT=43HqKWX(qs`c(?-8anf4)kYJt}=H$P07mz)Hy*64ll5=D_5?E~_K1fE7bh
zw8zHpz|7fkZx-5`1y+ at M*ls5aC%YrqAc$9SAf#|N(XeE+gQCd7A`<wNVmZ%lVrQt9
zf$_w6X`##$hD5G=g)4=kkyFXlg8MFR5I_xJT+8sHmif&;1^UDfGnd4ie+I#fM#q#I
zHp|EM6dV8f*Vf*}(eq?7lWupcLX6JkMgP}?F5rQtq0~pnOIs4 at D4fQP0(}01O)+F%
zXQ|!RRxu|<706pJq`~;ife=xv^!}N4DQ_5IVWTI#p9xevu1+xe^I}&uYgP2r2Rba4
zb=>CrY0uh5Z>iWID!X(df7I7ff05-5NZF)fj4^WX&@}32fx)usK}L0wHeFhyuC7dF
zj+ at 6z+0@v^A1(FJ+!Z@?Kg3g!$N0DDGO6cR;qlM&tVfRZ at K!pX;v6#CnKi*4<9^{O
zMIO&L=kP#LqRYhHIi~{?YK=P&`}Q~_E3@(1vFRiYY2<mc4Zo(ze~t8%w?TLVVo&-S
z#eO&pf>6{h9>|DwDTNJ$aSl=o8$(&%^d3aU<{5kyI4~bVfOp#{6?QWNad`Ton*e(3
zRwrsP#GF(St{R8x79$0DzVfHaA~{BpfBw)8+?0;*2luqx>py1vY3r#WjTt;wKf=3h
z08eI<vff4Gq)(m;fBRVbP<#+QN8#E?od?@?_J`-!_iAZCkK{-6q*RhUw0^b+PV*pv
z<zgENl~#jEkQtFlFFlP-Xa9GW^fA>n at 5eCW^(#U^5>ScOEXufuF7Js5Yel at U-g?!(
zKMnLnDix?CyK?PgLn!Yt>J4#q+J}!Ll at 42dPevCz``yz`e`ys|ym&E8b5?0f)xg*s
zMD^!p*Fb6kvVQ at 77XiR;3S%%-NsMNud#!6Q at 7D65<9P9#gx9?C@*J!mCL%|3m6dQ^
zg4h{IL~9X4a`_xc&gbIUvQ=CBiwp{UunaEtfXU^v0S5K#ge_&A6`x&bye=7+iU=-h
zL*HRpK-?h>f1m1nlvAK?wa at ir-zF0hVh{SWZsjoPo80_OXO{YDU6{|~V~X28SLTE^
zt2lQgRzd1h_Q&_TPJ?k<7kfjv>bkBV-e at N5Ukcf_iqk^EmN#L=^L`;go|657lE{&!
zdu2`z_m at Z6+JZhB+s^|g`Ld<TqMTTzhhCs;E+Ky+f0%$^A1SC>kY8md(yMUepD40e
z>64PXTfuWYZQ__{Jx%$4==n}Ow at p=~u~;!G7gM7xBI~B!L)Zy!#<F+wh7f19>yHu7
zjq~@l9d>x(qA9Jfno4mU(uDKA$z)ZtL=7fE_p5C_QhHGbBQPGTHv`@8Li?Tr9T{Ka
zQn%)XfBUV!1QDs3zXM7T>aLsKZ^nitbLFiUf%&Yw#C}wP7emiESR-?9;|1ILT_cq8
z&PPC*LR=X|sn%pvyEM$&DJP at Kt}5*{Dl5+Mf0N^Tz$G(|M-a0EL1dW2F at mPg(N*?>
z?Y<(de4{9Qmu#q{lEd`%T^?!1_BLCzH=w(if5Vo2KkG^mowS;a(%RaBRb_l3=jhX+
z#2G;ZaH@&c-kbf1pN~v$6dLwekUKEMB96pxnVv=iHj#<hQ)?RX7~<zjNLEGtn_jHj
zOI#n3O|%2{V^`;Pi*DiOvT=wGZUXrtGoHB`Zp7tPU=#x at GH^P<ZO3hwVnwP;XncGh
zf3Wf!M(A$`{jEbx+0aOr1aX|@K+jrY2vLJ-F!wjmOMsn(lT`$WF@$mAhQm=;^?Z2j
zlqs|<RW^K;3T?|>5Urt~b<Y$NbHu;FXWfq!=f;YVo4kVr_ge#-HbA(!+KAsCf$KIT
z{@Zs&{gW{b_<a%yCqLFu9RR5lXqq``e~mc2n#CNEB<%S*{l>o%v|%&5to9w5`xTp9
zTz9+?{yP4DV<28_g1Fyrl)G&oAwmOlpn&JmuB_a=Q_oh*#MS4vR7^bj8Z!B?3;S|A
zO_B2O<i>w=OKu5GKiGj at YYO(3<$O2u#<29$rr^EUj|5>`QZn#z8pB3PC&rule-XiV
z|HI=`L6R{QZ!4qH&Y7*(?dF-`kC={wR;TtGHWc|4m*3rvWd}*Js6;DtGxy2e|J at fo
zJkYqm&xYD=2&8%(NVPn6XGsSEVg68Py!yW8<fA&n1O~-{ex1&)b7-T4ztYc?M&VU?
zYfRT7xvo|oscbL<89h0rvsfF#f5WEwBnXk_8ktc(dgOdj*o3YuGY1TFy{YY>@PLIO
z&xN#Y_HIrNl?1pq(b^fB=EZdW?`6`p%DKccGMySafg_FyP!Z{a#4P8E4y?=Lr>8Pf
z at N_%BE*R71kw<Lty7;7E70>+-g!LFsfN6-EeiP{Io#Ilr20piOBlvvqe|rp%G()iV
zh_G{^%M2l+-qTm23ug!mLj23a);4+2Rzv8v!YACx1N`&t5Q>Vsn*RTO&mF(aR9ka%
zvFy<`*YP8P3!dVdH!iN_UV-H at UDG;o*mp+WT$eBYl9>#?0f{l;B`M-*JwLYoMKxh@
zxR_g+c=b?lbF3=#%CiAje=Z2W9!)Cp(B{&>Z~Y*soio#F7(#7hnA|BLg+zF|>R=mE
z1x@(CU%*{<S^|UQP}qWbVaBM%LH=`i?+V$-zAU%gfP6qCgSMa)tUHmYk3RN8xT@^6
z+A~7tB;kI7qxGMR>zju+EmljHdXcDln-9DkyLJI(9K8G3o(JdKe at h3tXZ}SS<WKL#
zs6p5bR)DG$j1#AtCHm#YIly9M+7zz;4!?-*0mx_3Nn=S`p!BK5u&XTYPh+Y$W50Z0
z)yk0DoBBPFb*KTv_(H^AjWrFg)!#hjDS%OP at L(`c+FpZt4T-GsdxURhD3_LV3}J_e
z>^UvH>IUHLxNCUXe`};-2eP`Vr>MVpSH#Xs9((gBii3U@!!<jE<us%jZ#_%Pho(*w
zcI~@uaeI99k~`}ujeL!cGz0ua$vq6&)@VOQyicrp%#o>?TbKURw^>8NtuW<|aEbpx
z9_fuPc#r>E(%S;<-1oFU8!zxMclI`JfdxiI<gm;u?#J$te@#BCFo~(q4pSve6*ROV
z<I+KU-Yw{GimYQ|EE~qJXcWX}(LlhJyrzIR$4Jr>xz)<z^(`jvn?7;HD*7mUx%Okm
zRgtbPQgaP?{ex!I at T*>}TD7+wKp0GtOXX4MZ*mbSjPycMLe!8zkd33<#fc<Q4x5EE
zoKJV}Mo_j+e{q<^rHYu>>-v4B7;aQ&zpk=&A9EnnBhX#X5;oUcv2d|xG(5J4<avdu
zoTolUTe=zH at 8=(ECC~5}+hS`NtJG1mBh(gTK?mp3EHUS-q*UG#fFLho5T|Mk_4L_s
z=nGSHCrb37rgUFLMs5J&f|9-TxO)&<^xMlS8$%HZf7=0(z}Rso+3n?>#lO9MvV&uR
zs%Qq=*Gt<$dSt05(D11KVuDE1vdaUygK)KAGXYN;t$`|qid9!u7ge05zakNuB|!58
znDBCF_a-YDZ$@pAZy?}ky|A|iCbsR_K9(y%Jt%u`uu$m*f0WauDaDTh`l7P}7*Wn$
zp=K+me>sgSNaFP1przeV*aP|?iMoKrvhf1?P_c5lM&q9;7}k1R>7;bt^x;Kkny)pp
zr|@qB)MS-?m_o$cP-)^^W(?^EgYz>~`~)KoIeVF7gXN=6i#yueF!5;Lz0kRYp~hb&
zr~rP{`rL?yJ%&yIlz|h`Ls4oomSdjg9ISpifBpBbUW)I at z$&bTdvne>t6`12qRt6r
zMkJMTcc8k8``;fr6G-R?4WLPx9GHZYpYn$Dh6G-iF>8ny3~j#D2jq?T>S%)KxJrg|
z%qqV5Y_Tn~+IZSZusH_JHX0`d9ZVqomQva8jW#MzcIs<^etI^GhwQDVTyfJIAYYdm
zf9*ByOIp~a9emxD6!C+=+(((6E{=zke`CU9Y at OZZ2K7MqZJmQ$!DoT-ju?^>L@#+(
zL+RN?WQ`Z}oPCr108pZ$n!twEc`E&UvP3jdxks~2q+;~?ETny_d!>CYt;P%lur%*K
zMFW4riv}wLRPieUN$D8%UrD2wX!_eBe-hI!{vh4vY3V|HT7F;L^{kigD+YZ-Uy&-D
zbSw<+qlu|!mCG;b^4*Ap-CM4y9d65 at BFkJFt7<#==O7z*dsjf^-SCzzssRN3^rn>P
z(NP+f31TzL77b*11}Rzfv8304^;P#`yn;^{JI_y||68GzH at Ho5I{;X9!arwzf9igT
zqsSk;T+Uqg6xV*GXQQKFFizV*cjiF1DX#58D!k0{ct(&GFef1#Uc6CB*)reoB^JV#
z7drhaI2^XUh$f=nh7E<u>*x9ooden-0oJS9czP?xU3x~vVEk8WQ+DY~#`XL>3i8Dy
zkW<0;Ml~jqpI=yj!vC+^=f*-5e^UM%{fFk2eX2g7h;$nVIcg{?4{7yJy|a2PyjCxl
zDy=5`qNxR0zV#acZY$W&<=p}5 at 4xH9bJBB~- at mD$w4y3?%?l`Hv21`_kY1I|O^o}O
zKIu;o4o(vQo%Nu{{$@+_8NpfgXZ-uhf at FM-6V=+=cgT6vVl+W26cY3Re*mRh$SH(<
zufW|+jD_QHIdkJ>V5}XUJsyqBZUH2X5CB>wZ}RoW>|<cUrpd?>#LZfpwY8o3+C&X#
z`O6|@3kobkbu|@?n9Q-0b<##dLx*>d$asQ~NL);<;O#T%bz}Q6`=zlJWZCr!2(w`A
zPoPVc`~o!M^gYsev-oI=fB&KaT}#$tGx;W$DQr+x;1e=&iwbRFFgwIDY%Hk|_vZG<
zC-CeZPJR>?%D)qO3oso`3p3pZVz)|dvO|WDMnfME%SnNWmXjka*X>{xJEHWW4Z8Nm
z)G~>NLB8+sf6fyL_a#YZ%(pA(wK at R!RC at R$ZW6{)NzD<x<bjz9f7BsUAVeCOgYPyM
zq!5HQSu<UaH at J9m5fp0aid4bWnvZ^?Vn|c>F2EW^1>GDQh>3rJB=#(?8y5<bq$%W%
z!7*>dQ$Q2=-ubovA{An_e)lWD;NSK_s%eYGNK}i7Uo;t%0ojR(YEIv-kxP{L_Gp5>
zX8n%kEoKTn)17>Be<uZer!n~h3_q?VrVZ*S_07;MKebvTi1hbdrRMdgTT6AnuAT)b
zU!Hy$b^pcg@=ux9tEbitE5LF;-eI`T_g!+B+0Ymqo&>R=eM|8D-b4GW&09q4N}F86
z%Q7r})TKr^eW?j at rlUOk%$m3i=$k^1 at q78^NbkySWIoWYe}^}kQ3VNp)p|6}h|HAI
zUoJ<9zo&?Kgz?8|*<X^hGl?7bNb4EAdI$6^5exElNcrV=0K>Zj5ARK95)MgKFC~H<
zCRNkJg|sgduD->_MWYxCsJTD~T#!@&Z{W9ueC4V#g71GzwkhrD8Z479CdpooriuUZ
zpjxf#s(~y*f4U0y%?H}ah^xRh*(%(V$5<s9uX<xxC6fTf6!G=vVTC|U2XtPbx&FVV
zv+vl5U8Al_NK5P?ps8gb7_)Cueo+krHj-_4&J1kQAdgIG4cUTKVBz(r%QFer+}Dtf
znr_{r9oFGQZ^&}`1>Jeg-G6605F>o(T_NLayQ}%1e at rJc&wS&fD9nFhl}v3moXiNq
z>qvMOd;0OoZ<C at +Xa${Ow#~eV-SQF2ded=2d2t$tVl9oewT?;i+P4Y5Dh)95p#la)
z_{90|UP!o}kz>UoO%mv$8D=8_LG~4-lFPnZ;B5^TsE6yQk0PIxOf*~Kehn(6p?*YI
zoQYJ?e~x=J9gAF&-Q{<Jlm~r&`L7|t<>+2F^$eIYH-hmYFiGU}$uC7}c9=Wt$Iw~t
z_Vtl4v#Q!|Xkj!<docIJ_HPVcYnw+J36!oAWUfi#bF=${-!Kg?ihecd<j(&xzg>Ws
zezQH6F}OD&nrXr;e3qPkcw)z-Qq)sz$Nj*$e=&W3Em|{Z2bxzay%)8@`BQuBQ at E=>
z3^7|M50C-BqP^cLy&?wDN)YZ!PuKbdx`6l<suKmzSDa>on3Ty@#jW_}N-oubERHOd
zbO8d4XL2{a&Z}Sgmn1E537$$C-bd?<Odp=qf5K=qADx_;uQ79sjKXZmP^!1Bk7x4-
ze-)ZjpRW&bF at rI@HLJmNyYO^=Swguo*{$dnLC|P1o<)-t;57?Cv$vdX1j2ZBo2XBQ
zU`>g$E_0lATv{L4^ho+ib4eW?0d{jBDU-VMob}WsQd<?<1|@;VVH|N$vKCKfW5Fbc
z&)=EP5!$1z)H4k6e||A_TsHo2 at pr}Rf2zM<+o|L at 1b6K-{i at SWM;6m+Obz0Rl2+Ix
z-wlt)@=MB7KuYLdrKT>~EfG5N5dB>lV2B^jZ03(Ufpt9e$Cq{{TD#Q8W0v6P;(hFk
zCpg5$vXQIf!CdO3$e}nIzSa2LV>*<AJ63DY{>8rRM)$migZK9F?tve5lA*<<f8}|}
z3q1xaApplwjT+I=LP17v09`ID>r^5aNbhZbaO9iyi6;sX0Q9Aj`;M6uW*@xqV^5Cb
z)HM)}1YTZN6O41`vxZ{qQXckEAphX_e`^BjM%0G>*7>D$xNmOXA^-dvoOu0^cfX{a
zWnO at 5CKw#u8q~><31(Ffy_P&AfABl;QE;A#o?eHK%uOM5fz;PXrqdCvjLow$G}aGX
z!|B_$y2msZbKo3Ea at mWBxo=GxuY9*x`{xJ*q}wm1aHi`-A&bLx!g;tve-a$`{Udpa
zfg?Zvn;uGr+X*}S8^qy}Y|6$AFT#4qCd71|)~yps8p}G;Z*8Rs_)NaPe?!V<B?7WV
zBkU?(j6B)v(2mR`q1vEI73J!!@`Ok2$619 at o66!}Y2P6kElq?}Qy-Qcx6u5{fURme
z0wn=I(MqQCO=yrLr#^+V?3~GRP`Ox!M~v;SWY=-0l97;t??f!!b?syB#_8cJQjz@$
z6t6u8A89gLU&)Obv6G>hf5yMMca1lkE_QwBMoLm3>{>SDdC$LAYaKji8g6{T{?XV2
zYJ$~FnOd-<>kW?~ugE4W*JQiIt)2wd!MWmowt7<fm*7EKY*7$<RY{O2Iqd#0dx_Kr
zCH|M&ZGcI%pR`W6`n{t%^u=c8IFVR?Ebtm`^^4*C=O|_T6!<~oe at JoZ?<co_c`vHv
z9`+tzHX7m<=*I=!XQgQX;B36$DAByqKkqi-@(M|s`)&zE#DkP|p?L7|Z)GiIjwcC7
zB-`qlL*XgfqFpP|x at MA760Ry-nE!7ZK!-tRNrZxL+9m)6K>EMncH|`1=6!Y!mo3M=
zDx4-;<z810xo#8CrtT+5(SLUu9)C61%554{=>+y at pN*9wzYe3?4!QM<flt&ElCG3{
z(L^6YvnW(x+;tJ#DnM>ICdq99^JDX at X4W-Y1<02Ni4E<g8??<5)c)d}PRA?4`A9O?
zvr=`KxlC(MYHb)5d2evfkrCBl0lNcF5<U}tGI!U<Oyz{=STPWOkAFV(?mRt1MSp~&
z&36=iZ<5VC(D+nfYM9YWt*Hjjt7K{iz|$&l%+X~N>a>*q7da#zqw{(3xZvSGz%yj>
z#8uR4ONpub;4Ce2<pN?;XyFQHDGr9OzMr1Urn#y*Z8;nGR!?aY5_#o-*QZ|J)|EPR
z9<<pS&c_C|;_C!~{C{bm!Ql)hTU}G9DRok836w&HA11he#D>o|1V&1Qo(1nN`Zc5&
ze&Nt)0s7-Ta7~0=v%n=Ygk6PziX}{8k~+#?%`9I4t<8rXSie1adO=d`1NJM_x)c+2
z*CYhl^q|Oi9Wy`R6W&#&`-=I`w4POyW`%1F_s6(`+h<FbM}ITQ(kKt&+9~_VFCW|k
zT~;R at Q(Zd*NGV%~fTDrzb#Ht5+ at i$v)(6mRMBc3PZM&~8fDw}u2m<b;G*4f?{%>}w
zON-4mKFZ%t5tP`dKRH#DgrLbE?5eZc-d>vC`eVOcEXLm5nc9DbT$K;#)dXt$G+O)j
zfVhcBZT%`Ea(^7Bv1F--VF7`!#y>lTkOd`99oNJ{c=f&3SW59W89kjXZyhL{mSi43
z$;GnElUtqAz%xCzY(okUCbu4aS}lpFDl=gbV at k}{#1DW&cJ~;XRU2aZ)ExTA21dY}
z$m+=m+vy{0534K|(}k=jNg!@~4sUpb>@BLE{(~NyT7OO)j&zWpg_f;0&W-`MDI8>g
z6Vt|dWgB_-yA=@>_}bw}bVJr$ML*y#Dq#S##a at 96)TT^alx$#cWiH*}H^FD)%V{5}
z+g}3g4 at ilr1*o-T*wLp){bdI$7Et&S(g5n74LS=VI1Qz3KOY<0xTR#aRT!vR;X!ZT
zFpCTx>wi1CDC538bw!@yg3vN&mM(H*l&!@)Qpx?YDC83APjhe|39V<(07yR0zftYq
z{=iv&@|Z&IO!8D*L-scnd7};ieH6RPo<9gMcCo at Exq)I28j-fp at gc44rT+%m0zmCo
z3z7k?Ag#D!Yg3RxvTK|GsUgR-`n3ZTI3uQR6o2x59OvXg{K=}%0equ2md#lifT>U+
z$RtfuEMm(w?)p}9{j2UDM)k2;yd$k&AUDF8hmTzmp#t2a4JFid{fvt3`z2U!;oaUr
z;XXn?-)mcfu5Hvim_>RR92$cylGqcLLsTAsP;x0&8`t6dAHpqHx(BX6HCNx(#T7Yq
zhJTBbMuGTZ;bqg~o8SVjqW{4Nbm(DMm|MoL-r3WmG at QKVi8C*IdUgd6$3 at SC>1*U1
z`;@_L0?W0(CCEraf|Rbtm?2_mLuhZW5e2;P3nlzK4lHdUL4MZL<^+oLIdyjob7meH
z(4^59M at V-7;(8fxPCze}?8r~FCU|SLgn!7n{ybQ|(7D%xV{#FV$uJDZKA`@2QYL*I
zwe=0+kuPE<DClK72Z2#z(v_kIbL$6&Cce!O5SaL1W%xV6t4aOCJ1D~0UthP!*sLO~
zt8XUK*&^OOM!sYyFymPEJ(-yY#-;ugg7WL at 3MNB=J{n+#_B(rdwQB|soKDVv_kR%^
zcwr#?E07OEw*Dv+=sCTEkZISC_)q!b=3_N!TXUtW6(Vnz!F23bYhJ}V0E2w6+#<?u
z{PVotzkxI#{#I2KHf6Tcik%qs2$CwYz>vZ<fmwvF9T&S_!f1sTM{I)Kri=lsri(1K
zCxVKSX6^Py!Mpcb*<(|wX3}eDCV#gkrA<GjNY^4xQTBR;sDy48YkgZag_q!xG0D<#
zBCf2+Amoi#`$^<v1=3fLN3AcW#zW>!-MGS;c*j}y06rfK#?Z(FSO8WoOb_j9vrn(n
ziayeDAy^y%0lW*Ae)GC0sC)gncuJKOMV&aZ at iG(n7t%_QTWVYjjRlUT?|*E8`sjP6
z%0uih<rCHcd}l^*%RB<o8KGK9s!3K5g|^sX!K<zC^G7|PQ2hU^gqlya1|Im;Hl}IS
znbc%N7u#P<ERfyN2cDPQwiSCjP%a!*U&$V2WxuuCDWDK*M()%skuiT%{1ANBY0EOW
z{P?MD{)#&Z8H31PqjYkY<9|b1Vefz*xK}Q^Krr4#YPigT*ao;H1J)m~!=hPO#I|AI
z2-?&Hig|n_!z)*$f)yBk+JVhI+4FZ`uWjo$2UE_nB>o6gv)fyZ at fRq4|GHYH;IY1q
z1|0MlVV8f}SeCnXlX7PF9`}ft?F{QU7v|2UogD22Mv&#!(Ky%lq<@O at vQ9trt+L>;
zfl~!2Cou4!Pq;w#sD=KwS72So at XzL$J%w5g at 6E=xAx%DfEI79L4qG~~eJDJAuKdQX
zk7yHNwkQdrxiS>k`jD!;z>>)Kbz{GKZO-SX(9ul03ybu5 at qBDH;@3h8q{j?214b%U
zT;f-gtP6rxx;o6NAb(mtDatEl!}_+?K14BV2&EC;f}J<beJ(DRHND#5N97FKmbFHu
z2XOpV<OPNaj)MgT5r%-6ds#S)ME5v!E1H7^kuRdU$e%LG>qbY7WoOXzsqa`Z`wns^
zJ`fsag5p211E at xt3(s1PtkbR2(;RNPk7wFSbf#-Fml2~V;(sy?>5RzOa`N`<@@&`U
zvqt&^6&z1SO7g_+1IV>FW`mra*ISO4pzr9u0kmPcNcgjmQ{m8CA^RTW*?y)W)!)-)
zs-&{@&m@(#F&AsDw(tVfHt^ro)vT!nEZuM~?l2~qrNlN;(Mz;zlvT0P&AH0ydH7<3
zF>CT at yn{<v1%Jy(^z7;b(2bF at vc!f1j$9X0p$^Lz at FKTZy+Z=81Ei{dD~&$6-Slsb
z`bvpHRMq2e;EO!rF)7zhc2*O=MH%EwJBcRh3+<#mm&=Qniv7`86<2R8IyCrmoxJbq
z0YhMZUUNAe-{ql8S+wP&<&P$Rdd2oT=NIecjAd6tf`4zLgJ`)r!Dp?Z@{w2nehpNE
z(uZ=IKB7P|a{n+hokzqvOHP>|!A at i4&67^@^7$|cnH**nnz67QU<YhH5AjDmY<rE#
zR;(cy`FnMmd#qH{5<*4yOUUU$J%}Nl at n}Y=Ti^IPjW&zvz1{UsrRokZ`kVE^=*2hT
zpt3IE1b?+*AzUU5ufoq0d1s70C!68tsk%=b1Q*Rs1E06QhKH at h)o;5v9Zxm!>3fOq
z_BFle8rskNyKaNRQEGi)(<n7Qfy_vat#+%PT3&F|f6s=eA6uQd*R?%{CQ9uFm4rZp
zeBgJFCS%szej%Eqe5TX1!RT2|)D&w;E$L8oPk#^i{iXNjd?hd56Sdz*I>>Dug|BKw
zpzoj;_mJsc#YqJLKX`QbqN->CS2{5&Ox%#10w=;oA`eO1S9y<sD%opc(jRk&<G5 at t
zY%L0I7nKHQ#1Vw#ZRloa?vVYEuG->$YPAI1H!6xS)yvA!$p$jqC!-v=(`-47(cBc;
z*MH+kP`2cmWI>ws0O;l0Kss%>#~x)m4klLCe>y+?h6cu4InNP9i^W9!>02^{CDvF1
zrHy(*8Q^`k&5a(B{2S21`?;m5iBX;ZEp`;H5e3 at p3ed7DkSxR#@KQ?(D7Kig*Rinw
z*l>;jZ*i+t8;;Mdvx&9_4*x7&T8qIn#((=Si-m>gIRc+1_SDHfQnJN9ogB25MwU>-
z3vjGp1LZ_}1biessZLFZI>VoEq0<7>c5P&|idHqc6Fjc)vnihfKTeU<{c>PLjI?>o
z*=T(|$UIf&OFpsFU<KV`2g>*39pg!BVjQRoszyS4b46J9{{cng+d9EallV8M%zsM^
zl#HUMYgH*!KUY=Hy{%K^_|2GAR-Q_z*ve%`@VX_}8aTmpC at K+G9&lM+y{#M_9~j?F
zWr;^eV|jGPDk|RPsAimw(O*3IlHyDM9Z{|!Dr0qimao(tvsi*@UMZ~jnS_?(CB;CV
zvs4e#y6z at V)sVwe4mMY#<Qw^#9)E+Z1N#I?WCGRi80i?`*!u_z?`p%p7#o!zKK}ii
zvPv$rN0>?utrNjDhmqKmt at p&E<_3$1iATNYIIXRb8U5&HkL3{M^^r!F8jj;GMt<@s
z?HDuM8|>=9_<qVWL-Xq;@Pa%_985kJO5rF6&V7*)`48!KaFv7F%5F2E41d-T at NbU`
zKxYDN1vRgVdVtL^*tsYyWwn^`WEM!>>1UZTu|}BduMgo=6etq!fJsIY#L%&x+~_cy
zq`S8-)6r~P!rc3yK56`9oJW4N??|$vX7|%)=o`?znz!B#H0yodcIBjJ|NPymsh#4@
zccQGc>IFY+Tz8E-1*}UUBY*un7m^PM!T<|u89d1u-|}p|qf9JtTBpU3_Q5?R at X7jD
z0!fLio}K|$ztqBp^rbEOGmp%^wU40g?clhB&k0<spM*GI|Elj$80Kf9;>;SJTY)V~
zKj$rbvG30$A5M>umh$Q~mYR4p4TyHgvyHeI10?JHZ}1E#6Mjac|9>lo3ko()pcLqZ
zR=f2ZYqsO0;SQefR&IacffQ%r0yo)1VAdeeWYfXRV(P7fh-4jeK`m5Kr2BFEW&bH7
z1=^zl)(*>Qv}ey-rBaMRbi91}1oN+CL=x!mrUt$?at%2U6_RPznGz-FHh&x2>JSyu
zK(gLRO&IUr$l)l!M1Mv7a8V0<>ryR^8^3{vLInxsw>Qc~+-VFh+ at Mw&g8)V$|2rb5
zY<~Xlb86P53^v!R5!onR8mH8D<YJGT0mD53=W~!A`k!?$tkAzODC1)QoHpzo5^^a0
z^FaVDhLAS?GICTdE@(e>k%~GN;j%0vTBEA&<vc70X$$^=+JBQ5DGv^Mpx56&kv`Fh
z^5~+rf&E3^DL8Dxcv1R!7hU5bf92|ksx0kXftzoC+}9{TxtuF`@EQVa&4;#d)G#6*
z-TCMXo2gozjmTdjHlUTfOAN8_By at oMcaj2CoFz`>JN=sA;7i_pCj-i;m!MK>$pEWx
z=Uq(_LBqoX4}S!cBKHENH66L&DaitdbmX_L+48lbG#z^~_nl;2^uj{I{<gKLN6Jv0
z*I_z~15q>_+DFRc=7Z!|$|@YWyitX^Z|aHN;a^o>g|GMvJNA?E45kIAT_gwOCl at 6`
zC7+#}x8Dq{Qa-)Yb8BSND;u at Rxn0Cy?Ig9CG^}k3M}OEia5W?^iZ$;`DoodPI at A{O
zv&x!clm{L(mmfjRi}Zz35r@?NOHVlYmku+QItgeB?&@mJcxOfYd*R{Ox4 at 8lVlRXH
zN1>wbQca%!&J)IgIYHaq)YUevANQXlm_l{OLIvnz`n$8VJv;WvkG!+$N~v}&ZI%zm
zOm8naGJkep+qzX~z*NCiwr5gMrk)`5=B&@{mZl`^EA&CxmftWe$wykBM4{s=R>{=5
zda|?DCC-(?loF*VyKvC4J6qse?iGgMWCXz~kUl^oQdfmmVU!<okY%n%<S#PeYhz<q
zST2|69t_Y!xePhg!k|#5W5I{UI{;P*Qg}Un!GDGu7R#JdM9bXUT1w*>(^FKq32jy$
z#Jw2UDe+l)rH16X(!}zE*>K!}RbuIC-VI`K%n&Aeg551AtSwpM{#H>U!ipKN;eF1f
z)v%0a7Gy(^I4O`+9N$Hq=sY7V^{fV$m);~{S*tqDAzd|<2+x(<*DWp?$lVO5*=iP`
zYk%s*hUvkj?p_VYjg~heX5THE)Dod|@yrtMVkzihpbLxIqwk)#7mPt`Hj?P=3goau
zZFQq>2rZ at 8>C$+_I=VTwEas=58UyW!2zdRht<cd%@rqR1lv>0JUjd;95w!(Ux21M^
z3`DSa6!kMa2IRYOU at nkUa_YP!J4OU&{eK`V?L|YYLvG)FUgV}3&T^EnpKJ;@lU at ch
za8T`GM1zY-71UuQe@<nK)K?`IL8L>^$S*SlT$9_!t`Q9Wt-Z%v&@l|I<m5jX3k7vf
z64)NUat@*wL;oAkcNgq*ST|?0u+6lbDBMfYD5dARg0s}j<r#{aE#M8GgrogTy?+fd
z!LC6teCo2^oT0NxT4%Usv#?sUg9jf<r|aWq_l>mf3jjUFW=0W1zqC)A9~!i95CX5|
za+`R{940pOhqgJv+o&RCHNnEvEx!4n;t}JKP|}@>Ogq0r3=<*Mzz*baK8PO(i?>G$
zZu85MTa(*-SFNwlsR0!m?q>GbMSn!$W#8YM9}lZr*%ZeW&Mk4O{NsrvxP9>ielSvE
z-QZ?iL=&;<+RnTrbQ9p*OzQ^Vy2gzPI>!x0G%&w!R;F`o(z2AS59gS at K$<zKIhr<E
zhVh)bP9A_FmydQQ;hQt-XDsV^s~*pa&mK&cVZ=_Ep(6K>g;gH>*5?mS1Ah!Aj^nMQ
z$a5yV!zUEZRM|Lc5Ef at UD$Z@}Mkl-23&Lww-aFX^rGiQN{qewVB`ARL2zyK$2n at d$
zsdL~eCKOk7D0glsTYq+5!H8uH&{4{_a)mSr9*<+-*fVi_A{(rFzvzWwtioI>Cqu6m
zZq!V8Z}`pG9JTENbr;PHIDa%k5<(Rc$oP}Q)7mbij?A_Jdw|hw$h654nC_#lZ({*4
zl1PD69TMRkGLo2bt*65d=rp?5-f<90WV8h!WVTN?Cw{)7=hxH#3qE#U-tIzS2-d8Q
zY*TNOQei at diB(4Oj at _sgD>%1atC*Xd<A#=`wh41582d$F2-A&M9DitOZ|prl_|6jR
z+mKh<<Q77`RiI0}zn^`+{Nh$@NGOT2B%=&SI?W at LL)ZS`?~41_k}Zp`Cm1m>b6&EH
zjl-i!GnRXo&rF<CC4`5FW|_5f0%v}oX$tHJy0IP_U9g-(-sE$f6o<)%X8NoTQxEB`
zQY-VEO8ZO!?x)sXs(-pMb6B2A17l{v0~`lzKaTId?Z>3GceKfid-j>HK*nE0NuAl8
zWRQB~?Pr*(GWM6zSBX$jtfc;5&IsBcMsyFySlR&#(ceg311!tTD*Bq*RQA`XOg?eV
z3S-}lm^Q*XNfjVK(gd&~aKKFNZ55LevEsZz(L#IpbqsM_?0+{eIn$fs(!Y3N^J>dg
zI<#kXe`0-ROx}e-Tt*C!T{wW=BUL<bRI2}R8=*0yahAT1D=si_!FSMeMzMlZDVE{^
zc*Tk`Y)Y_F0d0o~aB$?-B@(^k34vlfGFqkAk*3gH9s*9<`Y=$0Y^c{YV|i|na>Xy7
zElfM(lB~vAuz$FiE#eh=<drEj+M_EB3s58q{fB<yj|b)3Bxvy867fnIb#L1^OU>=)
zTW9_T8ZCu40M5100dtq at Up8aTmn7@=s$|0OvLYP8GvMHsBJW86z at -&Sw<bknOa=!V
zqDsra<>$#L4opobQ<Wy+WSrZ3#6X$-!;Pbv6qX-xVSl^AH<-AG1_$em&p&}L!L3-Q
z9 at xVVx#-M4&+UgB1BxnTnqfQmZ3lMMCYec*Idgen1;ptB7J4>aCLnANj>$l}w!R>a
z)kgIGz~IA4&zz7X$Me*gJn)2>31!x<e<nu$WaS4JPWqeCI}8ck*Ig||=;|k7bJg5I
z4bc*PRDS>(bSaJ(H0 at N+><HgtlNfFoJu^@*2|E8W&0o~QBX%6{2JLP&_>B3ETHVP1
z0#dF^aVehSnExgmwf#2zMI8eft99h|T6+aUfs9nhp%7*-S4H8C$avg5k#&_TMkw7o
zvoh(d(&<M4Z^i1AidrJUKncZCjnLB_F4OtkqJO=EJfbd^y10q}s%f$xSr=*db(>F7
zfq#_)4%K;E2i3+#a5DZK0du}g#u>Mawh|2h>KJM2r(SFEF>C+aFCv9%b(T%yDc`?#
zx+VW;O+9>ON*Q^2fm~m$u{^0sj;Y284(qBvm$i6@)BE-Qe7X|`7wJR{z$=Qe5K6T#
z9Dg#~ggb;bgv_`UE|h{2k8kcdM3Od5wDaYWq#}%#6K5ie>ZjWf1mQ{&r%G>tZx~@G
zM7?&v6(eAwivY4-FHw%RhUd-cgKkuuZ3^7UKE$QBw55oW3zN+q4-d<3ZgfO|N-4rt
zBhIVOm{p{N<;dFEo<xco14y-d%7r^bCV%mQQD4r%^ezuF4T<C_o8?S at Wc!ke!fIJN
z3&aeQ at jwITFZPOLom?_?kV5?BN-8;T2$#PpekQCcw5(QOU9sXJ1cKFOU51j*xWk(d
zM$S}X|FHSo|Irw}$ECM#ckrzDlA5w210*oOv<TH6!su_ap^LX_27L*KW*a9IJb&)0
zL$R0Wol!&60<}F$%LtUIW^I53R(FvCx1O~-FuW-LlA2-qv6FfK1ZpJB8aqN6xZ#oq
zmeqa(8#8ck<sEUIV$lm$@u(Y<Qw?o4Yq=jsNT}1E6`&|47Fs+5PY7a-RW-<yO7%B;
zmhL$VYEX(+8u3y{GR at WElUUXIZGUVk9>H82rhIG;e<(vW_qL%Qhz#(L<U}uNXN!gj
z$YHa<!;6HJbC*{VlQL6NRqC67O?ympXgUIO`356{bw6tL?eUx7wnBY8VT58CkM2E0
zAHaQD#zms>d2RmNCSH~QBpL~hBLatjw`)Sf{J5%xdB2-RIK1ZVI)rk}EPwSvpzBBH
zor2KVjJ7N?>H3dX7=$~_$6-NwJ;eY>(G4%R&uJbt!9CAs{7e6HUK;-A?w^vlsretm
zH{M^c0rc-t|6!j)87+3S$cZpoScRcMa;iusRq}HwBD{Z;tNiEk<h9e%Ao-i|ig5vf
zU%ONKS;(ZFiLoX9k5h)2cYjXPRWtOBwnljiRYVEDH7BcS?-ANHj|1GnPf7hwCRgP0
zy{7ru&Hr?qlu=2&L7~-hG)I0O;9gO>Uh`?p^jH0gB-g9lqMeX(EvEAa&e1$Hk)Y4}
zm6%wNcbNBTLH^TyslWYD>QFAyAbzi;O8UhN792}SY@*oSicOpc=YL at 1%Aj8(wRKMg
zbx}C9)*2)-<UFCTG-;3hw%dt6BU;nU)@5`DZ?OsnA=E2j^c1|<vL|2wejya-GsK;O
zdK(Rqy#vf_kZ^{gKbr*ep~UDXSPA;y!(%()HrcJD)8ClGf8*ooK)e`}dMg at J5?2Be
zAlgwjlp<M0<nHY5 at _&td at H7eE!?vPH)M$IE-_dr=HusAm9yYkpX+~D;@wK&O?zT&7
zK*B<pr5P613|p&i&s392+ch4)mS$lx%zry_*n`i<kN8eU?c0SL%D at C`?E}^*@cCc2
zZU2V-G at Z=Ty%DCQWYtt(yQVl&sb`9okiY53y+3hGEZtl$LVs;zRXfG+4+!-Yf(D(d
z1s1;pd_(a_zE-fEUMh~76nl;C7S6ZJBTDAujy-9VceCT{B1Uto5YY%0WovcU&9boq
zE<o1+$2oh}3THstfpb*NMN`f_mlmj>wj&XW0spJ{yBi=twcCNJ#djTno`aJN^bM)}
znbjx9k at y3BrhlyR98Vhde{@*(R~_XIi(>RWQJ;Zv8~4Fq!sB)kzye;jf}pCE1fH&l
zYDVuDI*X8-gSpu*pEdjtW=GPM)Y*Ho1epqw{6f7nd{S-FCwYsRaFK!zVmwD+ry_X;
znPZe at y(Ec2$W#y4(z(mweFU#N$2lK3w93yE7kI==sehS1Mj?{cuIeB??2d$-wLA2O
z`J8b*vV)sw7<jw4)-v<Sg1oS+Ao+CsjL*mW at hgX`py8rdJ#uYVAg2w{9ab11u5xV1
zB)=>U(GZ_K*HnyKpfu!F-!K|KEjv)#!dTJlJX&|nVI3;53dy2|VJx6nEz1B4u~u*r
zXss=S`+s3H9m#e%3=)e+*2~xsbHk{Q#Ef+@>EjwyN|;R!bw~)2>JH0f=}stXncZ(d
zN?n-?>YvNQ9q0U@@T>+hThpk0K)O>)ms}W*`nU7*(aVXn84_w%CE79y7Z3k!{<z)b
zuwx4p%B(#qW(pncL+Z}!MH`mJM$zgz9cNK_vVUlGql3!(hOT-NTUV%on_zx9N7Z1*
zH2p-QE*Z at G+6d%PgtuN{9Jh)ar`4<|v?Wv+ad^ej6ObzE3!F|GcFS=73Iy*BsI0Lh
zT~=+Zcr%Ow%eCmr9&gFG)eSdNE<{I*WT%@BgE-tJ%*WdRD|fHxK~1%5!W9OXhI4%|
z;eR!ANAl&dJ&+z;)k4JZV((m$P$X3sV~h6HHS#I=w`~BI#B%Ixx8Vj2S&Z0lHxYlS
zoBRw*7neUJ7t|J515FvhRE?__n@=u-1FeC%&|Y<F-x<EA8jk2AgHKd1 at 8+wQYf7ey
ziMHBNxq45LmeY%IIM4?gDVn~sx5Fjbm49e+L)DOBVK=+)EMP313A#zH#4Hmsv|fw;
zh?u?1(l`4fUKZ;l2S9Y?=OLPkJJMp#2kJqerqAk$D(YVc>q4iaU_4218KdZPyQyzz
zW5&qe1=@jL8%*KwA^ah0c;OX^)mC6r`UbL5laRrPx0bq1%-5WC>>IXA at ufupWPclg
z*=O{E>nSER)edT1MH0o1ucO6CA>AFtHOT-$ufRMZeSml-lyl^&79npBz<gf14%i`K
zjZL7vsv4oLjXUsF8(ZM}N!<1c*+#IWruyI5I+3_L`L&30xJrjwF|Yjl07~X<7eB4y
z&?;++PCG&@UZj^o!@)DI-iCcMe}8c;detFMW-WP;Q}V2hsO~XI)VEzr;=#3|_$P-t
zP98>eS^>Bp0sn0lT0TI26#`)H;=m^Ee4U{=_%YrM^e8cP7|Mjwz;Up)tn*(4F=})o
z&w8IF&xL&$!6|&}2$Xy?yBn`VTbN-OQExGcTV(&ye(VwHM3Zf8*M-WKVSgB9mBE`9
z=viwG<|m21)6!T1Ov+<hnw^yvGL<3YqY)aH4K70lbpNu8otZpkykWX+$`^K-%Q^0=
zm(|Q_4Q#jjZjx{$d at 6+Ei6@kB)L5CUQ;Si4gJZC4;E~_=?Sk?!==tRpWlekdw1P$c
zAtieq at Jwbd=7Cz(o7y>y-G7sH`CGi!KJ$Voo}*xV$b3Qg$=dUqZ7Q8>S7`IFQ~dCw
zD?#RLoz~O(TL2v5<xyHTB2E4wU+um6{zN_QpMfGbY9t at Cjds2b{4!(OBy%J2Oi<~b
zEHnyEbQBJol*0F$yp*L;baYU|e{`kPInIUKa*Ata2bM}Go-AjYyMMHVZJY)CH>Py=
zyZuQ7HcPYj1pG4Ik<lqGoYc~J{-l4(+v_zQw)3q{>O2phLxZ#&Sbg>=s0)d0YAFcJ
z(T$D~!qM2 at taROs1~etVMrF47aWul8Qx<*aQ)0?8^00bqOp={VhCI8jYrhMnIPMx<
ztcEicHC2xIX<wfNn12eXf#NYjNZOx++%=gOceH6v=4bk2mIaF?bSP1*g}=x$F~Crz
z&bv?0mX<jMXkhs5RQ<eOL<t20;P$!56ffZq7o4mKbjZzn_|vaQc#IHzRf{!?;3KxI
z04VR%dv-W4bB1%RE6vhZUo)JL*Q!(Xk6I*BNxs6kMzZ at 76@P7?5##A&i|9QsP+H}T
zmOWUjxkuFRf)J(4-SE-M5e7*4>mA^679nOl><}T779;@=mm3+<!lhts6ClVH=*(}!
zUD9S^LKJ9)g2jt<)g*Ag#IkP{bdrk=$_EL}3q7~%{%`P)9~)-U$Oh2`cs^B~>@&0l
zAeB}8me=ubuz!a9_Q2n+TSPRag_G at nWe4mJ9*wDcVQW1xj3pj*Mkn~$gHM=0lAT8k
zZkVsTV@~}E=bZImBJ>WXG~(SOP{45!c_KNSd89vC$RH{#dnK75a0obmWrdoiaaMvZ
zsUv!9%QipDQ(?n>c&2!6zY351l~flJD=gdur<nyNaDO>X2z(L{t}m%qX7cv>*FK{9
z$z2yUZz}ZD8ued|Aa%Lqj%GB}t=F4V8ra$Z8TaIK(Kvu{TU2p<#t#ks3Nv=%eWN}Y
zf at YQCytw-0Xm((cV}qz{0S?mT>8vUIH1aif5B3`UKeQWZXoBTIOAYo!*uIb(w(S6E
zIo+t{vwwa9f_LPwbUkctXWSCt&NHh9NjYqC at p}R}wvM?=g20|D_%P~{ybuOVSie_Y
zmZ#N9sk~0J#x%~pAb-U2>aC_|cH*J|UwmtRblzSHR$+W_F?HL6;~+2>d%p4KGJ%=|
z8mAAZG{MFhVt1)_>THvH<Mz`}TZ(19Z^u<7=6}4?4JO3zILe|$E5WrivSFR6*Bc<K
z;B9Y0_;ut;>IL3{t)mP$QZn{+8%e55WCCCpZ?3F%Ej)}AGn|au;4#%dS>YcW+jR9J
z${qVHgZ6<io&|)kO^V&Tru0;>s903!^r<Qk(P2+^%94=na719vIY#d^z5OT)Ey~2o
z$$u~z*oM$cp+2XzF1|Fz<?82gFtR;<jI0u%Romq*FQyEB(6cl_=|@U=rjkDhAZq`(
zb9<CErW{@5eT-nv-Rr?QG(lb>*Zm^&<`O*kfAFonx9tx^!<4O-OT=gRpxNB|)XQAy
zI<hBSviLjFKG at eQFYe-|5((*0evj}Fv42_EXjEw+P`V8tF-!+Sd1igXiG at Hw?UWob
zA(Y<oPXWF!W<(~AWFLDK#SC at KxSo-U9!8484}DFZ);FF$e4(!=du6U`SX<!~Lp?6?
z*Sjx9m-fT8vj~w4X|$Wkp{BA^v|kgsz^~NJ4F=}+eTIj5zVp0K0}s$Yq<sV;dVlfv
z`KEron25+NihvdCwny_ui%-c&yTFzgDg!_)Vx4_phA-qT*o|z4o({(uJ{oG^5>HY&
zNmItS&K12|xzA7ouc`((PJn|!;%F`aVyPy#6gK1M5`zFkrL{!RPVA*1`aWdryd_u*
zJ5#uAKeoL;UGM at R5kH9(0iMIHk$=0-*C2nxwUzWpaKp>|YJbd+v*>}9lXbuj{4Bd4
z9TH(MLb3 at wzbf(@d5G?mik3Lz7THJ- at 73G}eTa`}aSrq$M{7}=H{G3-zMf0eu(9c^
z<QKJtoKD)(nb(5sWOpG<kS?R*6aC^1?8=~#fN2hmCYU9Z4_RaElGT=%O at B9u)Zc%)
zO%eZ(;uE;5zl`rJ>!C4 at EmnknaV_mB`?hJMFm(_Qh^-d8V+H_+2~DZ-PYk%PnRzDx
zAqc<jAtd7R%5Gf01du_C)5SC6Rtlnr?gB!bQC&S}`W~tFt1+>Wj;KhNGMwqOrtCPU
zATTGJKuq#%wuxVvsp$0irhm(1mSiBBMFwv_v85EeS|0UxURb{=Gps_N<{sFZz2~Ha
zE;2F;JPtrhh^>{V;@iF0WCNCFYiDt}(Y}^El$8$T%@I7I`K*Zc$o;pu<4akq7nR at k
zoKHMVW`-_le;&#vsR7i+;Wx%0pWL`|h>uI!B9*#F at WqZtA^I6BCx1VqK7nPsOZb<*
zdvYE?{M2!q$IED19<9S5SR)aR8V^^IdILD`x;VnSK*Pl459w!I$<fQ=paQMsZNN+m
zTvmaZ=)Q=Y_`QCDzPuAPNYR?IPjd=<|3m2kGjAi>SzW2^hk&V);&e=Pn(>qcMs4+-
z&DC?6WwR$BgPd6(dw-Y%JkP);pLnn<bQNg32CGs%wMdS2H!$>7J3?5+T*VN4ta|aM
zW@@3T)clxwB;se5X96VFotNchLL}@j0NmBRzlA(r+O&>@EuH*{rx8W3aaN>sWmiv*
z3zHzo7rX3H>S$4F<$5*K2t&xA8D+5rl((NZAu(9v>U_O*{(n&V{<Fo at vag$dgPYtQ
z(ggcOr~T9#DloqN0SdB&WFbsbY%v<Du7&*et>>3U-i%8QsV{L^opwVu1qUqR&`kow
zInN4%Pky(%-^=9dJFL*<dm)by4OU$9`XZ~%!~S-DHW1E`c~1;k)JPttyBtbU^P{m;
z-KJTijG^6IPJgF1XgUI{NBtf)P370E>gwSR%@A`NW0gjz0Jxx#gCJ$|_^CcYQ8;fy
z*3WJzLXy&`sDho}SPcOjSAa9=gN~TC?s3fQ1ks?s2wZv9uON6!Q!iL_5un8|`^d38
zl at QMMXHv}o(kjtJaeQ`0<SfR>KLvE$xqHSlXK4H!2Y(`+VY+k(h43!6UjClI$T`nD
z-??QsSn+yw;Sy%+B_0GugW4Ple<2?|?{)^FPxYjL?mdoNu5jA*`KH|n4v_W|B5O0g
zat8>EO>}ejvJK}$?(4CWg@%VhLH6#WSf+x!pVg{CR?#6je4~Z4Cyr&B=&T0&X||$j
zN at HqQ0e>4RCenc292$1vD%tET<+4ZmB~CZc_h(^Iin7FnN4a|(4-mFwA3-CNcSgxQ
za1(NW!;OH83)Z|I&CU1>%BMd$8w$EniSUsmbtv7EZZvnEUeMexLA9YFA2aga$W7+G
z40ftr>qeKaePHEM4xoqTj at FXxB%;??W$^Kbz<- at -{`@yuT}t$AqB$hBsXwK__XXq=
z!yYsu@;Y(wM;vlqCqHbDM#Uyoe&BPV{MhXqHS{pzk9HE#!F4Tf4Fdm>F1WXvbqXC$
z8zW5})a8uAK^nB?T#X$$w3VnXxT<KSHlbV7Oqk+>idSwOPv<L=r<-5D at +xMrB<{hT
zkbmocNL#_Pe<>1MB~V57ACZIL5k;H3fger$S8i`@gv|cnFfXUH35viqLA$)P$o0=r
zJFN-b?8}?I>qAGU)R8!o>1ue+;MVz-*zcJTMb6s|!+q0O`A#r0qsSONs8HOpRh9o0
zKso13NJ6RQfuUW}j9ioaX_^)>m!H*D^M8~lO?GOf8LIFW+oP8GdE+3DH1-!3J>6$U
zRL@~=60*Ul!uDP)bA;-vzRumboyB?LomBGUy|silWqk3LE=?29A5GjqqRoGO`080J
z81YUWXIuBSt=5K>3fz(SC!Y#~HMn>vyIA!)a<^#_h6V-($eYZl{@2%0XF*!hK7WB%
z3|}t^Ar+c0S|UghDku6fBN3n?R_<pcczzY1wL?w~=ga7s&qOEcS_{tD79s=2iS~;G
z=@=!PJ+=~Mu6!o``rXMa`QPf46|rDVG6*>@v?wj30IK_S)<w_wH{iW7bm`Bd_ZOo6
z^{*Ec;}!CInKRbJ<ov3q{R=EueSgB!$0m7EP2Onmmnd5=(Q3>t2PK^)3F}XVIs`k8
zmiYJILW3cv3S+b_Pbimq(pOgExcPRM?7H%RSglGtquB7|%HdD}T+B^Uvo}=N5?jek
zbf1eQnPl{LL>!2%cGt9768-y~Ab4UV`)nOMvTQr1Zb~va`NqVqeNNN=wtsU|c#H0<
z1T8tIa}fBQn~*R`R#dr8LMdg<r!QY3Z5EXKaly6)K?g{Ti{<<^%YP at Ic^T95nKx_p
z&#C5<W2XzZ*E>%!uAE7h*Vs%pD_hPz<Q+k<jZW>5t7IvysA++jMie*%*(y1|0jY13
zA8!Bh)wM<IN^k9bw3cwint$@tH5MeHEa+hlRMixkRhRVlVw}84#w^hnu_E(9<6CS5
z*IyZ8DDab55XuP*kP}U&IMGy`(IN at BL2#`amYyO|?Pev?2d$qk(xRwH;0Qa6&V}{#
zV<K5NZ at k$kLG1I1uRSEmmIBO9GE=)rK6L;fZ!F-e5<b~+o^xbe6 at T2l3XwtXLaReZ
z79ZC4aX53r5y^~+%#;$aA+K`-r-uv`IbJ$0D2sAWGt7}w*xZgt+VEO1sCy<7-^10O
zHA58PDUmWO<dXH4=&Wj57}X(ATjg<AQje6cmH0(`alsT`|B8)0$jQ at GD`gI;(uO1$
zn=jX87aaYTUKI+?DSuG+62C_(=Izz0B^X0piKL~I{D?)PRPYY|A4;>0el~7bR^^8(
zCC4ma)2ON!UnWnNGA8aY+k_SDWmfR*#3m7^XTod$Ip1>gBNEV+l~~S03oH1e&I|3B
zy=a;zh~MAWU-ZGML5Krb1q=))#v$`sT((iQHEDT(QWvb=uz$rDdD-+jVF~p8#3g=e
z77&jRbyupfMh=-A&N2bDY+UOAI6)U8!TaCpJcmm- at P=}F;-F}GpWP;S4$=S;_y}p4
zdsF|oJm#4bv{9`+U#3F3UtX7@#9#H%zDC-^cxSGC!HYAf_&IbY>q5LgXMO~Vf!GJa
zg)j}iN7-CkS$`U`3#8cDSg+iOCvUAMhWU6c{7~B3 at r67KbFEBm8J4PUeZwI0AYxAl
zQC;4*D*&s_UMKBCpUtJ{h2FbKB+VDeLn~M4ZTsC<1p&YwHH*ggVf{jPsCMa?tmVZ6
zr|nrL>2(~54FS7G^3&ZrUsTL|F7dkSRwD|$d&+6sVt at R2QunvX;GE)E<Difg$O?c~
zExhxg-$IfhbYZO;5S at Q|dH5T#o5uC<FoS3VVX+P?++9z(3BC|kUr|{SokY}dZ+ZT?
zeivyN?8*f<!ws=vWwfdpfQ&m)I at nG4LxhoaK|NOsVJ(?4!p%3`28j!f+TrjA$BUI_
zNdv6fR)48c84!V$Y3w<;afFBFm?GJ1xfz0UFo0q%kP2n?!X`t1*4vp#iJvoS0C*7h
zCQ34&i_C-gb5kp)Otmsj623V1<h`Y#?rI6wMeF;o3a2a?q?5$%nx-j9{1~%56mw>0
z>NC543nb&~{VG6y08~!QPch>ZPIyYmr3Y6yIDdgYeQyu>aK=l;k+_ at S4_z5@5sG{Q
zXan)I8CAMxAhxpva(YRKiM_$fblyhW$xf at dJVy8SnY{HjD~l}e&}#lJUWJR)i2gW|
z<SOi`2;E+3SAViD6g=VcjQpQqL?J<;5T0=_TLrzv?3{*ucg=~0;R%}wjt-x%+a1|I
zUw`CNzD2ZVuilm1=+*zgbvw`SO4aeXQ0cBMV`h($KbgyEOxJ|_5BP-JH9psMSsn)<
zbmVXSo02z1#y-q at R+2y9)9vVl8;sZxP8TatQDE$XSAx|tX|ai6UfScxTqfugFISh?
zN6Ihb`!!s<$F&tcQAuLh&7P0O+_6)fM}L#R2#RvzL(7`Qhp1ZYtL)FP2Qby3NOMl$
z-sB6L2t~|?bYoeOhWEg(R1X#SmHXz+J)4aFS%xkW72`T7GM{1uhZ?}~$9;Sbrdd-H
zXC$kLKPeg7(g-HC@&sxB>OwLm!#=kO#i6H^0BA#en&EbGM5ozDW3dX2LH+V&R(~zS
z<I~k+(_W<2VrEILP8~(2kY7M)yoLELzV=Uv(hb%8RS*qB01dkz|6<f${Wctg;bMml
z3-=Ste2_jR?Y!zQSzg<rrOIu{=G;i^U;ItWpO`OQE;bcI{Tfckv|G(`peJ7sd{&wp
zB_CEh(1gn5QH5o>Wp4b<%9*f<`G1SQQ(K#BWJ)>5xZY@&+R9#OadW;b9p^p|G!~kp
zMhW1dAF_?o5dEPVayhItKK_dM*VPuklCWjni#{)Bgy;f=fyOw9FedT8=S5;z?R~!I
zMz##Dy)Q&7q=PrOTTvJ(9L>XsUro0KN3Rg*%BiXZgkhYn_6|6!3A}#y`hTG4$asp*
z+Q8geZQ^Gxik9Zv{J6L-4nn(H#t{H2(Z&8-Ds)z+F;1V#*vv-T1FXJP_J)<KX!zR6
znRri*Jj1#jtEu=ZrxvYB8PEBUmjY#V%5`6G>b>fsn{l2YIaSP>cV#DJwoPirz|Zx-
z;{vTuI}nR1f*VWc`iHK>JAZY)+CHAx6TFv|tDiX4qnY6i=7l+m)PovT%cx-9K4V3W
ze_0!Ek8OFaY6ZUBtmJrCjL8O62VGxtj)`7M+z{DU>_e{9mn?i+^h1d|irlpNMW-aR
z?A_6-CjXBeE|$^_oK+^Pu{NFM2dbUFCwHruIkhh&;>3A<9XAcBB7ekO+5O4{b3=Dn
z*&hEkyjN=YbGc$yqZ8%Ke!HUI#!;<^<O!Oc{txbiXro{#4)*VW=E>9rW4qv1rQ>j#
z(=VCrMr0c*{`oUH)**SX{TZWw{?NY6OT9N5^exX*%j7y%c1|pLJwjUU{i-4WDDn*v
zGT={BB|LFX-D*&c<9`>mE{VSk@)lVoHKjdZj1_pGRc0QEmn8v*6Fp7uHHxzi7NCTn
z&hr>)WxrucK8`10hJEtMkKU%AS5Y#Xpw7$LQJVJ1$4|%H1+#-*CqbKzDx_iVVrp4y
z21yJ>HFYd1N!Gh)6bx5Pn&H|ta6}-ZlAMG-<oVxCrOHjh(tk}r6XIL&71C-`>T?;z
zA-RzOqcN6S<Q+<3-p$$r1zChQM9Iu!2AO4r*uu7HboIVJx_imNLH)ZAC1vRSRfQCy
zvWM%#A}~JDNgTp%G^v`EF59)cgVHl6C?H~-8D#a)zYL3QW;F}6X|0{-3MmW~>A+C_
zeED_9!Ug`N1b+bo)I(y5%|{T3zNe%ZZda!ckS;I1>}#9Rfx<U><v-w$>l{-`i)bGu
zv!}J-vnzN?HC5|~<;L4`>M6{4{=+&jGLbW7wbrr7fiuF8((G1fT+KK|X!Vf#c#Ivy
zeoyJ)Xx^6yE5=(~4EqVW62}ft@`Hq$=7iUfAuV_ at UVk&%SN=x&bTkV~ezTtnvsk08
zp4=oijI*XHv|O<z$@eB*5`=IdCi$b5?2>7Agl1ITd^)pEl(O!9QZV}%+n&^U!q|gh
z%YADaNDK2Vt$Rquq7e9)|Fn1kRD}Vo;EYYm=mPFH- at UN);B!bXoi at c=8cm(ipE*$*
zDQqk_y?;e)HM3h9Jbziibuy#36sd1}0Zl>|x^Glm^=d{*$Z%fhu>jJ0RG`dFkA*^i
zpT5ya68adN0&8+M2l24jpS#dAWAORpbsao*QQzd~99#Y4<sh-}7vA~2WgbfU{G?21
zlQkc at E&LD1-382JfsJAUnoYQO9XEVbV#X27e1C&<`G^s7C?J06o7{?A>i?b`fm1XN
zuE)b0dcQ(kJd_yeirPiG?k7}EgY{Ydq2JxLJ}dBxp4byw>YzMiU)+RXclQi1^L!CH
z>a#=3T*#~1 at Mi7cB^ck`UId|nK)g0Za`Oa_`hi?5Zj)4hBL!Lm;X<V++A3Yh0vn9b
z#((#dX`lxOE4~(PW9{C3{&-2<^K$18DYlf<2ec30rQT at QCL|ICBr`CT*L6oY@~tLB
z**OPhoxCOgg_$lN6$Mr}^Z)i~X|ed~<ZL86=Vu?wLhe~TH*4#-5_$n{b-<$gDQuC-
z(mHy)WXzEz&i+_~y~?m9QT^dx+pX)9u77rEWgQh`gz*a-%SiduBR|<gxQ%i4g510J
zX($h9oS)c*3c~0;5KXv5T5At?+Gh_Ru#WgVH;g;kR<+``AU$|Ov`|@$lK+c}7+_;d
zO36SD7(kjVrd#4Cy*ZT5<;Qw5PJyIEJq+-st at d_r4Dx{{e=B^ZZRbVdD)Lm4rhi-=
zF5OrIQsG)wot at nePP0^Z<Ip2<@)bOt?SJ*yhc!7;Q{yMRY>6Nk`>LnB)%L&bE`yk9
zq+hx^WjtV~ykxDnT-?|;R2EeFv#w%&)2%C{*+m;<?@0-r*~iLzTM4%Z>7A_#_>LD+
z+Ap|&zU>oX(NCu>>W#5MFWAI}+<)f<W%#6PKcu|`0Ip at MhFD#*`md;JO;iKeu-1?k
zmZ4Wyr^R^O%ut(;-gWVUA+1+L)=!uC;ac$$U|OQ<At9NkXf1=#ZOe6Xea{#t4}voP
zMcqFsKA%SaymOu9iLO^})<2o(4xU~QSj4G8Cnyde^?#uRzkh%wVtl&q<$ue%bbt>g
ze*HE)e2nEZ5gAZuyU^bjrUjn#Ufnf&<}tWU4hoo at eCF>+_u{|=Nhl-?(<^2Bbj>t5
z#alflfBS`Bn%E}$rT)&FD8TE_2-awZ9F8u8Gx3mMYjxulSAeHeyo5-^@NBh&whsAP
zh|tUhMhjovVZZX_+OZH5<$ptIpW}zMO(=$hx at dOvo=dikK7SkZk)tv?6s<mbNEA`d
zs<NH*S}9c^8Y__Z4l2jp1NnpJq3h)Y3?z$A-v>@FHHJb*Qvf{wDKoxA_lhxfx*$GE
zk<(6a-sBD4U1hc+3}Zkct}Ib(<mx{%6q;{vDDZan*>HS#)iex|M}H5L%rdsksMFq3
zUlH2*_31rAmN^W*;@xAwDxX#R_6wNx;Kc;71Q~MUzuRWKY!Ol`Hkj)3z((L$O+zfX
zF?cZSOG9S`<y at q8TEC>}Ah4<?W#L!F1j|+lkRt*B3%&m09W2*h7iJRUP!#20Syj1H
zgHNg!wi5+7>}`kW>VL|2WR?N0VVsrw&b!*Z%n@>SI^{g?dJsYvzHCDwG;i9$?~5Nh
zOETVw=)6|VyQ?)WbMo0hvv}~y=*?osl?>6X2xshGiEq!`6Yyx#mzzeTv1+ruJnhj;
zF~QVIzFcgFM2$xln^EwWg+X`g4;1|sK~0*@tr0|;o1Xy08-M#o8lk86?@^t9)=+aZ
z!L%;YbEo#XzAjp}<z)Q*Z at c<U`-X)fOSOp>Ug!OkW{A at z5}%t#hiQhh2=lKjWo1lU
z6jtJg_Ko%UFl8JV<Ah6Nm2p|=-r?1VhHdQ^t#rT=#8EZB{eMwmvD%Q at N@+l_b<etX
zFPWnIw^@fqx_|Ih3=ZFju)TLk;JFPl;r~F%;TA=Pa6dKa3_Bi&XUyF^3Xx^OK9jRt
z8)HK^Sf(&V?X`GM$Bh@$i$%54dmic!(>^WI4`%sp{-VTfWtTCkFAEz$G!7#5tJKn7
z%VG}{kIwYv=4e-#c>KgEVo<?*g<P>Sd`gC_wgk)n-+vO~qQAF|RVYHQ=Mclf%q_J1
z4r5#w+`-FCmKR`E5FQs}3u)Pw?yxUf(b6)-!IIMu7(4!*1C|fZAH@%7q?w_7c=`s~
zpB#NwqC?%(XWJPtKEIRaNlI}k3QgyXw9=3Nist0dy4karjxp$ew6w3RLK8M_0PO7;
z?ff5jXn!X!isYPlqX4QS_F7NpKAYhcCk#QzmfY!~LYMrwb7<wNksr43{TSYypToy6
z%tcv7!HR0Z*LHCACa8bT-T`@y#K88oLF4OhREql)0&=<-aP{{`c2kT)1%PRK-ecs6
zGn%_Wvq)u7YYxQ>Vlky69TBsu6-mT-&>?@6#D9qpwH^4=Qo{^$mmNvL-`Cg{_)i}M
z3eeW`ZLcM6@^M~Vvl*oKk7H-}g at xCgq0T9%0V)RLyj`s09R=Kh%|xa(6=iQB<fM*j
z&P9pVv7SNNZovXwim4y5e|Q%PF$A3KFSBW^fbBc#*7nLq2)dEIc>c+a_=b6n&1mps
z&VQ=@vQ}Y*M8b9ZmMgG55_s_BH7tV7zTw>PYjFju>M*7pzEY?K4MSdzBT!WPrIFb0
zF%`4L)i7I`?Yx6b*1}k>$Rv1}6QCc8WL~lKJl^OXJOZwVj;2rWuYBFN$~s$WJhJtv
zcDqx5T*&b<9Ov at X6u<QVGaVhS5N)OfWq&8I?9xtcR=)eC4c;-BI3T5_>zYa;y6JKk
zKc)PzZ=hDrg+pla@&~0|wy$Bcc_8qXAZH&;I3H0BBN|Vq#z&ROU~=?Lq{BQX(^GZ<
z=V+I08fnQO+9xA2zAKIz0r#<3Izha#^`s>MzXtx<)C+ePc^&+i-VWt)Rbj at tiGSte
zHp$geD4w5-hz*TV-o$B at xy`GSn{vj47|L_E#<n?O(}A2xS(d6aSa<nLG{^=$JF79X
zpIiRapN}&asOO>nmQ|L9ow~ltb;8~(6|Zji&vG`&3RP`o4rI;jJY2EG&ds~{00%($
zzha2Xnw=D#TELrEVHXDm>NDo^_7 at +T%YlD&-W9S)TTzRmcC<5>lx03Of09tznf7sL
zKfwQ<6(gm8ot~bd;y!aEXOQpEH{_jX9f=VD>{iO{M#ltrxKkAp9YAQdZpHcpigYOb
zeFY|_>tsiwKz?ywu)VI=iAm5rJxcE_zyp0X=9a?zbvo{2{g}Y_${!twynwwYzmtE^
z*r1QOzs8M1EHB6j0L2M}MbV%jk^(tBhFucNyql2ph5(p11u<-g;l}gHLIMvuma^V|
z7QJpsYR6k?-RaMqma_o_W6nmru!sIML$5oP82Gv3wCU=@9p86q3mh%(;>jG|wP%Y{
zEr*)IC7nUqpb|p24Eg#{5NKuPt4 at Drv&9Uyu;g(7SxEpRzEt^FbhDEcPLw#3LO*q5
z7!3jTH=QRAk}T8ox#_4+fyohx%dZIlJe&B3l=nZd#TiR7Vk44zE at 2fJiA`w^T<cRp
zue7Byiv{UEYq1?h*yD&VX;)|38Pw!(skC|FXz#Yvtl0ubAyZIMd}m3rBPxIF>n)I=
zq7q8BQwp45fBx;JmiM%T>&=C>`z2F~L1$8Z<S|}{;QYgKq;knwYilrSh>;tXWALtq
zqolYf?AIMmvT7;%5M*nC5+nlC6^5{Nc1XaM1s9L?64}zI5M!LI8~TDeq0PTm7m<^<
z^!#6|)YoKugmRf!5kD?t*vNmX%qma~Ba+kFu2K#NYFScRfN$DJXYq{?JwsDbb`cS)
zP}U)Lroxctm2Lp2qRPK=vr7n74=%BHVy|SK`=-}$Swy3w0`cy!{^gdJ&dax5ibBTY
z0zAsB+R>sUoHl)~zoi}baLh&_5fX}80jA2^um%ptL?JvZzUD at iXfc1hv7FdaXL8t&
z?+sy1g4FWD^uBw-pFqT}Dei2%>0mywPJv%)LayQIrg|o_RsV?bmo;_8P<ckjt}8YL
z)QXp+p&^$KheAg(`}x>GJ7z8wGREAZ!a`MARQ=b3bh=3P<KJ-6H(f_|{am3+dirZ$
zZQ_R5^q^WC4#l?3^FDue#T`31(X;TC*_*a=_al2?agT2y0r*SBocEu<Yq--lc_Q?3
z&rZ1<(S~5zKt3h#0;u1y`R0_Hx?0?fC!iJaK}?+91Eo!>75{3x{7whGh~<Grk^{j0
zFlEST;NF4o4s<BNX7G+bQDwrwDn5st*aqj at Y?tN4)@L^cL4|(|LtThu)fUf0Y at ykN
z&{)@Efq64FQ<DX60j7J)J%i5WI`;mBFLip{yEr!=!?{!4Twesr+~FU at lEpJe*Ek;T
z7-9`{7!O7JyPt6)8H0ttfX$i~(Pap-rjUT)4yMmt at M4G&Dt+p=z03~N4V!agQJ{v1
zSYH}5v(JCT4gh};xSKAAruG#C{9iF_BkuSUOTg|IwBWmOM^OeP`wHElg)dtrV|kxy
zxmMnFNgf+aGrm<L^cj9q1)ii~Pafk0ls+&`lI6Gk6>TbP8UfZf!rUKu**=~EoYwZT
zb6vB}`Ww_ur_%s`74W9)TCzzeM{S>g#at0y;Ye;x4tsy&WJ%2+Tj^RWc#xNl;?{^6
zqe%Z~nIeFuAI=Z8@^9hhevxocc8ngFQ6}l;m-|TE$<WQ+FJsAk-06{cBmi2iKJ?bu
z7fv6>m?kBkCcT!aJ`433^Z#-J&*k|{;l%PI!fLfSioa_?JQgloqbVP*RHqyHs#Los
zoiy{?lsbP_)s7Sw1FsFOG+jfOuz|JJt)2_AtCnlYo^vJ~=iI;?gM{cjhlgdB>H_dX
z`66TFz#hBTl~4AJBN_n$tMYO(zEDl0 at kpgO@vpkm;05Q5(m*i=k=!5tR2QxeTq?=M
z{WY0J`f}y$ZuPibq at Aclw{lsJf(Bd6*5Z0?3aWpnCfAwobzV{d(b-d$U`vUb&fNKM
zysYSAzq`ZTD`nxKAwzGh0eJ*pA;Ou at Xg5qhYfK>+22#Azz$XXk1kp^G;Egpd?RV!x
zO)`pV-)g2KNn#b$E&@2J)kBJuyR)lI9gG17+5k|JC;1V`>ahzR_^Y7lO1X4EopXV&
zJYjzdZa!v=Ui<Jq6gFfM(vZp&&__lxg#nKntn3`=&lRz`Cu)57T>pC#4EDtNs`l^^
z$<^#dqlzxq9cyPw0sY{N2(RhuC1pB!@uP8}nIV;Mr-#)bZyWxMkE7p?&|0xoF|{8)
z)~`z|=zR>tFM2P#iXk!XaZT|TYre8s$ccXhE5Q#i^Vz7L0LT6r#3L;8a?lXxeeS<_
zWKP|ALUJ3K7JZDEPba~Ri}~+c(^!-gbACmO(lhw<`J9*aNnKWlP!|H at k)ah%2mL{S
z3WD3-)sb~xuZQ6TQEF&(@b~!`03hc)CO^~>j`tw^ZyzZQEPzzVt(ljTc0f_xSNeap
zCcGxGG{~Wk6rj+5F6C?J(Glj`_w~q- at V3(%9Q9crQ&bg}bASvL3Bbr3`_WO#<1sRz
zPf-nN8kCcko!YW}cf{eP at w9aqm)7J^qY60d at pkM$Mu<=gLRe&@O(oFZlj<KT8No;t
z>Pm<R$(9_UU*cUPgNQw4EU@`puS9>2%00c7%L?^oY#va9JytS}YfQqXFLVq0KIR9K
z4Vk`RP1j3evJqX*kc^N+jz;m3m3F^HAQ$_>-53xxz^}f*mlyw$RP=rav$2EGCkg{)
zTwX^88+R{VWFHK#S<<MDAMSk=6S%JDS5B|mJ*;txCS0hPLs>Hxt6wi}&0c>sX(b%7
z1M+A)IRP>*A6W*h>p&d9rf7IhV{Wtt>EkBRr}o0qc^D)?{(9`5?E&W*e+B{C@?gJg
z8K0>F{aAx;tjsXETQdJB14{m%1pOhC67_d^-Prn%`EVczXfHheiov4eX2~`yA$GwN
zXx{7*pn(L0B|^B_i6uxJr~iMZr7t4VRq9R5)_ydZ;3qZ0say<Q3($vqeT#;us<|jE
zJuCXwHp>{ZoUQ=b%;x17j~d+)R7P*5?=YhDy#z_q?ZdX|ZR0NLbzyqkent=;;Ow*y
zFm5l7kEv7T0;vTdCMmFcYz?mA@<dPp+Dh7~`+6<1gxkq#YpaGB=y-oyf4C~$(S^3}
zEu0sEdbxEjhJVb{|Dc>%7^KfYi<MOxkfx3p!ETrG71jP-LiLF&>gJ}e9OUuD<~(WB
z(v_I*j1u(;BskSxq8Q at g4p7WH)1dxriea|_bVQOwlRlW<1X5E_CTtiSB-IEpEk<h(
z{CsvOXJLs at L#4Zgqg#KS at iIlQC<Z2L!uma5CNWhO%jvT5{hZP?97;HcN%r_#t&sG%
zHKzMUzcFDCT0cO!G)P<xjX-q0p}Qwt7W5Mjp*dM3)=`KmS+re4juv(nK_0=j^1 at Ia
zLy5ynD(-2vm8k5phyO1Tr83HVyn)rdrZi%OM7cpfONm#FaGrlj^JaIETCQ()NVws!
zm_~bA$REUZMm}qxf>g%;=BOl#u)$M^@9UO9<7q+;uXnP7BuwO_fS3h5jyHBT?)tk(
z9ySUK_Gytvnbo90Bkku^!yy at i@h;zl_TV8w|ERb=R^9;eU+$X%eSmB!a}6Zr!hm8d
z-(;Svr2M`tl>L7Xnp$=X|7$vn@~qM`&=FwQ%Ashg1>c9#`K7FA5`zZTg%84AJwl1K
zo<Ch3SZR>8wzLDQSSCnW^|PHUd+_=2h8LE}Jm$OZ!gK%N<qjS_Y{;$bY at JX;=A8Qj
z(;?d=U~aG!OVS+!N8zcd)X7>ydy6Gz(;y#ug3zU<amIfb#HBX#%%@ILs*ROOz>nRM
z9-IMswxuTcKlLQB)O*s(C}wKb0x-j*!=SZ$Zy{lr4Z#Epk|t47;>{a!pyY^Y%Vh2P
z97IoUkNDo_XAH0r^m^RwWhZh1TG{-{j|{1`1{smSRE&E%%RgK_CE_2jtzo1`M!RyU
z&#pID>NtNSNL6xGrt+IL^`r~FV7;s+ at -cS$d(B}Lt?#O#TCj1uy)wsKs#X}Pu`6pk
z<JN~xA=4pdcA-ad`efe&=$b}bfp@~hQKgSj<U)8$0fOL_)GX<VHtb;<k|tS_OuvPm
zy~TxZ&VRaa4gV(Hl0cA-8X!g@?uy2qK3ip0@```Mlf}B^^lK6sC}V5ym8~tPthek(
zlxo}i;5f5OPX(ew+Y=5s*=&@Ps%R~9f;uj;3d at qhAb~U-R<Y1L%ZVa?lfgvNnEDV>
zbenGX!?HhS2&umh%WbDrK1s0-{GY&5S}7<pFH#7OJ+)xEzKw6y`?;zX1*1ya24%$n
zlBj?5U*G{Km{9>$-<(81%0Ev#d6 at -a_(-r+h+aLM<w3Hm;yvkuE{*f+;2nzt4K4Z_
zXi_&xDka~9sb-7Jm}tRWZpBCimQ~x!U819lx0hqZQeqc6Iv|BUG`^lzZpYVUCEH?U
zsX9gJJKKkL(Z|y4`oZAnQoiij-=|)9yoi5o#i%>73!xT(jCMXe01m6-cK*l71!4ZG
z)rU0|JzP*1L~>M4Wj61ayhp1VoyxRp2GQoE1P2Qx at 0d6J2Xh7vNpo*aQ^*#3avrF{
zpd_<TR~6Nbxzm(ez?e_$(*A0!vY2SwWk`C*B)g2OP?Z0$fTjt+QS`dT?s{u_Q^J2f
zzAi?DBH_^@6)}|EK0jLO?-o8Y8lif9n_}riVenA-|JC;*C9l5+?*nAgMH|!7rx)re
zjU(50<jULusSC9}@4#o(UY}o$V;H_nR`1QH^t0Y>un^kNtm^`fUBg_?_Q!8R$i#!Q
z6mzCG0U6NfT5EW_5dCakYq~O<!1RCYqw%+Yo8WM=3F0*!e$f;^?}$fUxA#AlXc0Em
zlzJd3vFc&DpVmo_{- at 1lAVmQCpSs4398+?gG?-J;V>D3&>YnJ`#*#(k_*@q#ytp(7
zeiyudoieCEUvae43INu0VMsUgq4Kwa2_DtR-~8;<m1H{9?L<5Qhuo?aStfs(e<+>+
zj_l!66>a~@m^&Q=a~X9c|JAIAI2|@@ngH4MSc#O*<v|$=(^mFT0>nnk;l*smn$qXP
z9iPz8VmrJ_1bs$}LObJ{(B=RQR(Lmj3y??F{92WTRonC4P+#UvAG@$nJ0=9Ar4y at r
zCGw3`y+_W(BeA0;B8qMr$ANz&d0}*QZf1owv&<HlKv8#;V+8W51KV2Rj~pe~!%b}j
zg&eR7b?vRO9s~vhyww1UL!~_qOKKcXXs{dY8WV=-i=BA4U0yUuQ#q2^BBg^jT_qGy
zWNJkhR+z*b8pF8O>t+woO?!>QaM*!%ljQ<CC*|odZNZyQW%bHM9oK&}SrPsUmX+jJ
zg7-&!HG*DVq=jw!@jZ66qgNJX>g- at Y+0oJ+#5-4YeF6jl6SF7Vwr)JCJfi>Ie~$Jw
zE?b at Zfu$ZJ)GtY*jjve;={BjAQN6i7aV=aeM*FN++^qZ`<LZtbnyHL-?IUp+#1Y5d
zvUeX at uiJuv0-#mFcT#`c1Z?ClUAD3B23~k29yl76W~UPx_bn+bzaK+jEqD2ilpz}l
zU{&}nF?8&2!~_hmSC1dKmpQ>uExKQWjTQQ29oEDb$Mc$1wyv6MZSkpiNgioDV7uHi
zHAZLn^CiWjH<p&_jojOWN3Qe_$i2y4Hv8ncozU&lL#L8iRzrVXsRhK#ZIn{<m7CN8
zPB0^ggOmgi3F`8ce$5#zxcqo=%7zAP+EBk-FMdRHo??j=N#njUZ{Fb$!39DmGP+a`
zBl6Y%5(_?Gy;t1t205%wc!Q7a-RA8WaPXvq1DtlCPz8e4I%b#83gs(h4oeM_oH)3~
zUWwXB&CqxFOuT;s^MV(O66f6Z_6PSn=<bbJDd~^mKwI8+)4|E_TKL!k8Z{tCZu_i&
zvbO(UsLSq4+?XspjH~j2VoVUyLfwt9j$kA-drL}L38Qv2(-=R<$~fP;5`wzY;`wcA
zwCYzkh&KI3<L5>iKZcpJxReDex+C{FL>#T#BHLR>r3Zh89sq~Q<J__KuwyH2w8x4#
zmJg!utViNH0;wkfEZZUqd1~Tw0`9e}12o4FBfun>&Y>A;$_nIm4v%4<bm-`5$)m&Z
zzE7c52lhK42=h$RzL|1%(8(R;SrF9+;Yh5#)Q{P`&<{H&IR1NLSVQsZcr7{av^Epo
z5b?#wB)@;_gXbJ(IBE01memx8Kb77ifC47;Kw-%6bTGLEk7VYqa5$os+i-)<4z$>T
zuv}EOGs?y-!N*`FnAJS~pW_7?OY7Mv%2Kl1_oy5&w9Lijg|&iZ?VC*LoYlIOpjKyJ
zM2vKv0?u2dWR!xtKcqwR6L#EkGGjhHVMh7kvA%!AS<!7;P`fF8v4aWyr%~oL9o=}K
z7#DAIB5k_23dnLi-JbO}^&RBS>KFSkB2I at Wg(@iLsP$wk%vU&0O{K&8T&Viq^mSVg
zmJejpYR?mKN=B*}CtG!@B`1wclcl;ssVAPp{0F16xy0+EX!JG0$a7GF^l^nhbGPJf
zU%!7nkP=B|M at k*20dHRh8BCf?<V7qkV$Fi^6I!3)W=o*6neP2Fi~5dsanE=bS{&MY
z3}^CBPulUzDV`Fj)vjPNV0F9&`W%WVXg`%SX-3OI{mr9%QKy3}!*P%ZKSLsJse?v1
zhN<OEVZ!m!W$UOkYvx1X`Jf5MLoon70F-}?qB3E7mp1`^7p`M%!DeXkc03IMS4{fy
za2C3cT{52R&1_ueofzW{UuxJ>Xj6EG=<|OZxA9h>a6DK1xpsVCSnAINE<r*(wdOR|
z0L~4Xpa_T=g4(BdIBDJmE$`sq6XytHdu-2_#KH`D;3E3Zfw*Vg3`2X%Zz=Q*)MbCb
zs_gjv!3rfKwBT1r5?yzHzkKLbx#xItVJVKbSH9^Xa=xgRaT%rPpI_NeSZR4+tb~We
zX7(pv=aklW7}|NBv<5H;ANa7Y;v1|p20ZOXd7}8`UoO00j9Twfx0Bo7$r~-GDZ{fs
zka9ASYR`zsV~PGo{_$MH)^FS$rd)r at gFcQGHd}Lr&3fr}IqBHVa8AV;=(LK$xF09u
zS`?CR7&^3flyICsX1R!Sk7*){abjqbd!zy`)yPU|bLUI!a|X`Ljln)R&b`&m+*uVe
zv$lc}ucUzyANl3a5_1&ID0Z9=p<nV_S+aPm_-}8uO>tU7m_(ky*#m)PfiHh2S+;8Z
zcNa*?5yH9)#d1{`*+3|DkuLwknhe{+9!)MgdtUj-5L|7+U$}dl2KB{KTv}h-ba~3&
zd&b at clz(a+)w_*Lx<6G1k>k1SzeI?JBoP}mxMeV-7cFpIPHQpj7E|-IHU$8OZJ;45
zY^CP9I>83LB7QViy=xQrrlfxZo%|ms4Gw}T at O|%J>diIw1E*}OV#^=YK&EcN6zpad
zYX1}y%Dz8kuvW0YRYTnh&8)iS+{(rk>cjo<QI8OyNDUbrsHu{WcyBgb(!<I}R5lvm
z at q&-BFS$MR6>-*RO9gBxAL*h`vMC23(@=9^3M&M!Frjj}hy9^Dggt+m|MKonvh6-q
z?%^ZuEh;-*&d3aFk_Nd^1aq$bObH0L<4oTZ{S-9|3ju(yn%hLgsTa;}BWCoK*RzTf
z+<!lnwN>m;N($r5U4^s0<sKpRK`?4Fl_`u5({X<K8y=Fr1EQZyJP0$W#f1wD4PM at n
zV_aWcp2R;P5%{z6;r)N)z#ysj at lS9N@NpiU-3tez5b4Oy$69fhvjE+sFYel(m)a^i
z8O*yP=EauJyac~v+KdgBQNl<hkMKp{?fhgc1+ at gQW(cmr5tE`9lWgMGJVO0L1Rei$
z&rn<suNiF9iDkYayz6O=cV&S+e89Oh=A+BYp3aR|;O}>#eBXbw7<lj at B^e3Kzo{s5
zys-bNtWR1#y=S_obt0jw;rLB?)R;QE>8M-RRsPD?ygZ2oPZRD1k~VXq$0RN at 0e)&c
zG38y_$rIaeD7tiASrijJrm||)ge1{-`T6}gpa;1Mb><6GI6P#H>_Ux1Y{xNVX*qt>
zvKF_iE}bOe7D|5&f#?0OjNQKC;XCVjHhf$)E>?qMeH?5SZ(CJe1BZHS>w+?8OGBHO
zp6_TyxDUzCY4ST=s7GJFUvX+>LZH9RgVCuSetb#Xg3MCO`@=d}lMF12*kJ=7b82wf
zsM*CsImv?`gKbQyHI5x8)>j9XYd4fSN$XAKkwlKG^5B1wDfpe}meLBjh07A|6WJ8f
zrYh|fqsWV`BApqkVtop+vz*d9l=Ecd)$|*;_5Bms&k8`boWa|yATh~U at zQ?ebuweP
zKOubZMo#s#^#e5ohwlHom|7hRLm)~K8w&9XAoQi19V~=DaZ@^%q)F|w9qzoC^qnYg
zl%%}gs-J&XRaU)a6-z)j5fM~R3-8*&A=TX2^L4E at MQQ&L9?uiuFdj=@2+fW^*u9Fd
zPf+G|Hp%gL`B{?kay!WS<=8s$o|<m at eg2@86RD891i1O#UoETnGlSTVf<^KFwWDWE
zR!OTmq95YuX#e at m-Y9(yvs5fdxE?hOQ`vu|y#{|-CYS;D6<MpaUJ`4R$&J$3SA1N8
z=%P;AamFb&k$v<mCicY)yR6&+-A}L~;t2fQI=uBR2fzoRAJ*=en7Wv*qJ1Ljl~X%#
zG7I&Kfn33Pp-PE}kZXAB{|ExV;oc2F_x*rWTB|$r?I|qJQr#!*aoZ>ZUYmVM4mtBd
z1x$Z<x5<8aJRlGVegk|@X<WMEuTPw?gaK$>;z^`Pm&!AvUKDiVr+;_Lt~JsffMXg*
z#`AA}CUbJ=wlLIamAnk7+}==((%DJ<EH#Mc?`r!0ZjRUPH}(^E#w#+8(nvTbKx3^K
zQpWY!DAh+TDueHnL9U++Q at J7}3t?@fi7J02rXR+z$#rA&wxzt&S)CT<dKFHBJg9sF
z{rQ+oaTcrxP^YVgB-Zbscg4ZAO_|-4wtyw1s!?gg%V^~HPQQR&_NBl<GPY|p`%u3)
zRgsl=Nf{0D?Cep67-==QbzDaZ45!4YUG`V?V^Lb-ej>So at +f}Z#hiM<L)beAscwIE
zikQ`TD&R!9vaV*q$u{%{ZH}lcqaPBf#L0pVeGoAXP%@!+p;cf=ydfk6H6CiuDzv_l
z-_9m|+FUkJhyrT58qN(*OEL75%=_BN&9_>nEnhc?e0ib%uGedjyre?XUKR at dI#KlK
z-B7x?Ro7)6H_Im#icJMF_f0u6>#u)0!RxcT2~I)o5SqWQtzi9r9(A!0DvOL#kPcPH
z=ET9!B|!*V)^4$UEcjVVzaGHK65<t5r`S<Iz!ehQJL5 at wswot1+XacFB#DeA`8JGX
z at E7*~@@O(AvG1|A$PgGa>x#m&!V^^tE*JMW^EE$`GyJv3j>O&Z?t{#pc2s}v-Lx_G
z at aQv}U^GkE&9EB*))E#~Ey*QB3*Im~i7{tYYHt?F5}E8q6-$PNK|kYNaD((t2vM*o
z88-Y1Jm)e78z{tp5Y0XTTsPJ;>JpbneUl9jUqq`HoU+lF3Y<W7w9J-e4=6ey<gtcX
z0Gft1*bV}&;o#-i7V_bbb9sN%y$YW#3*bTv^Dd2)m57{5w7T!H+$k90$!o*r7qY4;
z4-{>W;3UCz{6hK7T63{(vni+Ugz=YAT9blHq{zc)Bx==nW<~5`uR^+*oS0wOQ%*;o
zNsFm_?^^##vLRGOSoW<!utetl97i<8>4r1xyAwY<m;X7H!s at DZY7>7AkhPcN3JX54
z4DXwh!s&I82DON)en{cd3}yM2e%6_%>_@{S!ek%gMoMO~U;z+|=oY8?a{&G`XT!1D
z#ab#ef4f8uZsSL-cI&bHf&viT`MtkS)O+=UX^z2aeqe7?eRLB at n9%Rotq9N!FJGX4
z1SUn8(vaO5f0qaI5V3#Gip-ux3kMPKYI_rNzKw7NfjfvkzoeC$gf*p_Mv!BW!EHXa
zq>J&pT0M_!!{{mtEG1P6q<(M#0L$cDA~xAyTOFr4;eqSt-=Q^R*XTT^uS&z)Yo@;F
zF&9V0f_W16JNP&mC$s|tOy4mo8uZh*uOao}K;X#B^LiVaOo)Gw^ap#Lw9fBEO<R at c
zPtR{`Sfw^cRrudOFw9a`?KAj!tC?c<0 at n(z+2o+vvXzB3z%<Q|(UoLh0LY8bN5+Ah
zSxINU*#YTi&n|(x8Vzpe^jv`Ot98m=q1huG6s!)qg1nGb2h-jwRLDFwRp2j^Nf#xG
zS%VfZaq_-8ln#Gg9JdE?q(0_fiX2+BRrB;+0)O&<9&74J7{XR}&PT1~F>z(CY!Ug)
zNzC=Ac~uCfL at 21tv8wOm#Latg`y#q&MrzD0J4<hN$#lpcbboTeG_5-e=sVAqz6U$x
zOALGGeR at y~2<^&Y7FUz`)SY!Hy{TZw$!vh9(u)r!aCCpnJB1<@kHqjvVv;%I2RQfj
zWjQW;V&J3VJ`SY1B+9QOiQx_sc~DeUU#s5z1tBXUZw_BCD$h;TT$?bu2F4zZs*Goh
z2D8he at 9)&9fne6Xvcash at i=(V?vWCFmdz_KJNEt^LE>tXXfdk)|ER!`B-WP`ipR(b
zw<G|Vg>ip#gu8xW*{=jqdvUot!wEd|R$dQnEiGVhAb*O392a{Mgn^4Xm(k;U9zn=%
zMQmDmi9+1&VOEx}$b58pqRW5}pp}qU*Ev+#emfW}k~=0*2}5&0gL#s2V?g_^2z?6b
z$yKCI3|qFwtwi(46a;L~YqV4Xn`CtQPyYhj*RX$6VQl86QLO8i>FgxH+L}ugjrzAx
zvigC5*rx`i7ZEk1plSMWOc0--hNajNL*NncGXFa(u^#>Zxh;Lj!o_}UY|2bG(DK2b
zr*iOce^1{=6y|KEC;dFk>-Th3ayX5S9FqIcI{hans`SO}ViilN0`ehqj;ZOKySRID
zI#Pe^0M=b7AkD5T+oXk=D=1zV?ijF!L&UpqHjd7aiAfI#>r&6>hYjYWz9HkzWAwV#
z4?32)=XLI((`PTT|G%cz?1)6FIpxOk;RY0Ta}Hw@^GfeG1{@ImxU~h~hMt;OU(hX`
z4XXcOLXe}l!kjNIFdbJG_)|R9B}Non*;0QW!;~HHdtgbcv%*2s>BHUr?<%3cc=X3?
zZyy`=0|r}#=z-)$G`q|Joh5EDesF2rs8#pzVUXyb(ltF$$&D|2EuuP>Lve1cdYoIF
z_gs+_DD-uHKXv%m)v3ml-5iVzgb7w)ShD{EPu!^hG5`GNKkF*?!SnWs#a-B!Rm^{8
z(d>=CN@<D0Tbk8#&_!1ka;Y#pTB#gnhbhVa4dD#iyq10*#+`XKTxE8*W5(Ph-^Myg
zi>Ak<S!_;HSv)$qpx6mOVpiXkTT$%*F08fgyd%A#8d>K?(~X=f7x@^<c=&nFfakpy
zQT2(NHYQk6*<r)Er*i7}*TH13$VPu0IFvQYVsjr^(@J67gCraCU?y{z>kNzMXtDcc
z4t)~_<!Gz~??9l`3Z^26iead}BA=Q91wybrziLbqieU+qZD{C`P(;iJ-4U-bla6ix
zBl<W+V5y(OozsI?V1zxN1V&vW)$L%G%@B+l<#N?u5=lIEHgOV`56~gPt|osU?#2`0
zH}q8uGOoj#e at p>S!y6?|EdYF-NuTV^a56{&CpL(Y_ at 2PdN4uI1+E3^?r9rQq0^U+d
z)h5p3)n3Tg$3J8v^{3@^hSaaOC?nExIzEe|7tx97SCZII at x|H9>A;q{Rh*Y2Q&gEM
z<qsSGV!9m6-JJ36>Z5Rcs)&CI_OC41{=jH8bU*pNO}Wk6o;3?uOj9<>`jqh)Ir}ga
z9AR<3?(dBrPXD|mTUdK7;Vr0oZQ2xqq*N)Qd&uk2RKps$_U&(mFrFoP1 at GcYz-uwC
zSM1SYP`>R<Ozv`urj|9rbO18bfR@}VJmaG=)BrF5gk#K6poiG?pizI~m&`Vw6H<)h
zQw16R5vx&;ka7wPq(R^mjxQN2O?8SfP7DV5h4*!w!l;3beQ~SBOHrtuln$$!bY7qR
z<9+L at z@=l8#A5dg=(O%g7Yp?-yUIID0%*{%<eK%#<|_Z|%-5HCFsOWD-=$q)Ul(#B
z%iv-URe}CPDo^=;QRRO(!Dt|YMR}z8dQeJ*{1!c1K7z{{hym=kB{QB+wnYXz=BK_$
z8Y0sAs;EO&RY=}CJ70<%g^w+Vi#BEr<v`zzA0<2h#gHEi3y8e#@M-B0Nj4>#ef=<?
z%^&vEt1pn!!haN{r4ezwJ)`TRZXVlT1Nect%$|OrO%`k|;g)|OejPhwZJ1xldG!bJ
zH`jL)N>x&iK8?ZOmwxj5oK{>dcsrHaE^L|T$M4Kr(9&nHGc9PFnzc3{(Tc-L8$LYr
zn>{*vYSX!i0wj!L6EUPc$qRS`plhg(X}%Z%DpLs#nn>GXkp^$CJ8k=$Dp-x_R##lH
z<ByP$<4LFC*_(f6m#l<7JQ_v<LK~@G-X@>T8_)~F@>z3Z<3$$Ad71W{-&T+R-oP{O
zcV at Z;`AH>E;#fqiav#T$s#xWSz!d*TxOV^93#36-ep`N%m+ORHAWTT_f0)Rt>~TGi
zADb`ZosP8JXryJit#6nS->hglv#IR425PDd`tM69oHc*ypX)U-`6>L|^>E+>6f>tJ
zqzh6G57t^uk6MsCin?zftUcSgD9(+~;UwpY0jhDC*L}$=wJ65?Td`PeIyU^dWC1zx
zUUktsj56Od=x>)^U0%{4$S6N(@)rj(b3uf}?<>2u(G}}!gAcI0Z9Bbm8<0{y{1}Vv
zl at u}uJ%N9~@md<5!SS}8Uy`(mp#DOcohp%e&o4jiul`Ngs-GR^eA~3Q at 6RP;9akUZ
z)Rs6(y{>830m(p9EC2WB{BtrYlYCInA7zPg97jGCeK*nqKJYKt>7SFh#uSN&DD%GW
zq1Q_sO6d7&1)%<1zSqJ!>?ADHkD(OOMSF8~Rbqdvspx8(+F at N{^2w6DNk`;{b5=nu
zEM9p%a7`I7YS>FU9bL<@<S3SWa&4_8pDX|NTCTi&g1vaU7 at pLDZuE2bygyJ`35fVv
zPf4DLkU%LXvsh?-K{S2?*70JM8RX&73N8N*zQzDrvGZ3&B$Jy2`J}cSd|eyTTp)<O
z;QxO%UWC<mTzW{KewDd+TFnSE=?uvPt!ZBPE`i==uvn>$Fhxrj^7RO^Aj&lXjoV6x
zq-B238J at dK%lv)ke>3nt)R9xv-ml$kvY*6qxG;J!9=GCo_nXV`IhsEE4J<8YWMX8y
zcAJp6JAU7nC-YVzopb8`FV6{0SgAZ<z;l0|sPuw0ERTaTgJn)+Od(Zy+6^d(#9o}C
zPoCxWp>Q|DtL4_%o>7PD$w+q}t{tv4RMY!!`G8^}|C=`=;ghza^X2qre5 at o{-(1<C
z2AXa(TYBK(`K;IGLQU*Pr at MAwMz5d2V#ORF59>Sxg6=EJm?C3b=H}Jgh|MwVv4Ma6
z3oYt at JICBtP9;F(2o7huFs-{;g&GNF_VT3l-3`P!?HzN}UQa|;7&gaA2wAefNY%{_
zTl!rbXU^GRw#@st0qLpPotvq3ll1kfHDu7SUHOgl5E1ryYN^^<id5V5XSplAK{ZTS
z;QRl!QpG1ySy at zE3c&3_0avULT|R$fbK)>%D=mZHhC7MTb9M|}yR6{-Hy1fPJ!NaB
zU;G81SG$mKv%u<34FU<{4#v`WKh&_{(y?0$OIja^y(;)&WTYu=w>QP6+?l||Dyt~H
zO})QgV3=lQ3zxQN4`)cmMWIp7?+Q%d3Si<TqZ7s+hEK_77?!F(+x-F^$kBgsW*zyn
zj9Rk>h)W)(&oY`ltP3XD=;|E?+QyMV at J;$%H9*KJ27Nxj*Gew5S7d)c?yEwxA?DkG
zm#zW-l?J06!&*K`!TH>F+;%+VUp at qI8}8F_pt>1ym&NiCsJ12M)R&~6XC=HBNxmUR
ze9BdD;KrJdJa{asjSxpcWXOM_;CpYU8GFI>kCe|>%wv);$3?F>fr6LAgl%mkmBi;)
z8sh(|(R~+4#FH=o*#ep}2r3rByGB@|t3pqodZy)9e*x}dncURsaWNs<`B#!{IQ*11
z!ksis^9R9Yoo%>VAf>L~!x at kgvCPgItnUFo_iZOt)|RqRYHL*LN@#y^9B(Z%m|-#n
z#cBDS?00kr9hOxg#Iz0Be<HwZ^Wyu- at NQTYZnu+6cAz34ubqMe9S=1_r_m6lbA(>x
z+Y~lQvv&Fy1{E!@LRUhH5Q$CLOg;V2Rlf01wkcFnc9r~hKSBI!L-9zZm?p>XHK%C*
zA?kPQj{lO_J7*PQ+=PE`?y##IP$=|0cm&Xh?C<-eu!T2}5;@dG4p~7#{?-);&Env%
zEA_ZMP^nt4&PDZAF<|4YIXIHJ))6&pOtJUWUG^Pay~XZ+5iW#2F|-$^$dVx2dN30b
zH7RwO$YfcY{F!0mTBhLQ?6Wm>1PHn6)oqL8n#_p{>aTe!`r?14#v4%KrDHF_uj~J%
zVt0&OMLQ?2%M^Khgnc<8sUxuWbR=18JEx?>yW>_>;=7A9&E#xJr1;R2(+v~Vt|*oF
zV1FPr71c4x!46S>N0yxMk~Uw#sAdy<d!)=?l$?!_Lr at 8PEWkhy05X=$M#nA6EB4c&
zcy@)qcS{4t?3I7>%9}agG!zSvvL&Kq#>j6Sii%&lyQTENsUjK`QD5k9rFDkYJztkz
z4!R_iqhz_V#X%?;=hkobwYsS at G+!}-1-1r)Y)W(Qesn4p7IEh$2rX5)G8+X}18-#L
zklv0mGcudN4S9zjNHE%fv6)pBH3^m-H)j?+4m2i7aq)kA!hw+*2`4KigcNZEj>K|w
z9nS9A^nS-ZR?XqQv9U28hD^P at r>pCXh=0|LW_T%d)n;X&zaJRSIbS*376^^C-G9Z$
zOa}OFl8H+okfzhxu$}?)x2Q at U>+9px(hKb5^^++GQKcHfWaf=D3;18Ns#avKx&C)y
zCq|KD-1mRI=eKLxwC!``S_*`=L#$`#|AR<u6}eRs|B*msiBS=F-&)6H=%9GuJB2*-
z3As-*F6Ov_w~mZFuu+YZen)bMn78?!>@Y{u49j5KpN4=Q at ZU{g#cOI1|LLwYFOrRr
zdIhDKyvnqU#y>HB<&~aY|BX?n)!!{FI8}8UJR5(`F%PytnJSEinMlCx4fVl7VBs~o
zH#q*U$%bbV0D<ANg2#tsUF6WoHd;4>CD+{}@s?(5sz~3+?d<+`%wU|kwy<WrI{DC(
z>uIHWoUrF9DU5-)h}lcR>D+>HI>>DY>2};g74-OLUHR^_%y*4A%)=`aZXIgtm9%UU
zr%8YF?XW#)e5A2ai4xt^3uO!a3y!La0S!~f7fJC%gmW<3FK)fDNsIiTMhsR!IUTi7
zAv?Y-#F)vRit-^_0>Y{U-EvSFD9lD-iWg#o`Yzu1J>x&YPVtuO^6Xg*n#l#5E8oA=
z8*t8t3&CbKJ3seog<-EuTvOFoTl0gC9?gIJJsks)0KrqKVgyVF`2rCP`R0V;|AgQa
z`<QVkhJQPm(ML2yxgmiDn*((Z>6~|IH8u7<E}^Iao at BQ^S@#fr{xmomSOK=VWC{c)
zurr*~WKc4(XMi`Om&BjeKH_Jq?+SkMpmmj3Zs-$w{3;#aLhT9M#_gF(3BCe1wO at Za
zE>ntgMRj46{id3n&t}0}`HvkQqG&KtaY5oNr3_0;Jdu72&Hni0=YY41N%fXOOcaB2
z_9@(`-9&u{m@$L}ZA;+>6(WG7ou;oFqJS+m=J&{R6!-1FKX1sgI2-k<R$%`J;wSAk
zoj&_cwQ?iS)CpI$Ww%XcLyODw3Bi9++?W!N`o6?#3d=wEDz*%vNtX=P6OZ2)(TO?y
z*K&)Hs-YO2KJ&CkYJMNQ*9>80sDab at EndjQw8}n54x^OHUXC&n&=n(uCY)by5*6xN
z1iB^H>=LR>G*R3NBFll1Pm&T*8lR_;f;Wh7CaTJgZ=Rn<N=2krU-gVjz4w2xyVgB8
z?g-NHPG5paB$`LW*WEl*3OD|nTf%cuf(8Z2dSZ0nY)|Q?Yi~Q6Jjs!rp9_Y%flgY>
z=_scv{;zg$GsxW9*0EYvB at e(wk$M&q*zSps6C!N0xbR$!x`;?mi4w%TSmEpi at k!xp
zOirgBEhy-rujz+Hnb$0f3m1P=_~EeT_9|maku2 at w_F1D5t@@G1HBrd+J+9#0 at V`s~
zj;R6r#<ylGv#0%IQAQ7TTqd%-%!}ps8*7k^d=l+h-vlY%fOFbaO(Vr-tgug?AvKmH
zRzo}<?Co!`%(!q+4Zb`}jOD6`0sdNAdAS7C8R{I$G}vt(c!A&x;B|jll&Cj9`=Sz6
z6tgd$9qT{zUwkG{WlW-&W^frbByS!GRojg<<eDOk7t!g&QZrCHoqz}dr(2nkt>^G<
z>Jyrj-s`z8XF9xA&kQE3meomtSAD!PUZ5PJeGB){)HTjD6M3LMe at u>yrGl1{_GybS
zpRIvhSu28irSf(MeWZU2DJ0T*XdW_78$a3?os*^tV$IZJNu=F~059^ds*KCmc796>
z#>j)<@o!*U9`UbhRJDk at 9s=kBAC;4&?Q?>5M^{XIy`PZ6GhnhqlB(DJM&_et<K4m5
zK1+HjkU>u%nAvLx+G-mCwcZ_NQ!R4Y54pCR3Z6iXV0m)5Uafz<=?m0FSv17{ngsY*
zr$|noS~}}NMZk0<)C_I6hp;eZsKeeKE2}Rxjo5cffe0bmLBlDnS6~577OBFUVnF0f
zoqFk&VB<#@A4t^;-E$6nez5IH&`U`jGqQ{R+^``(uXG6|FBqB22l<%$qZ}FY%0VzH
z0%yFV46;PKIR<~SysDntZ<6%Kj#8TQ@~yb{bF>d^WnMI!5k_h^gn)3QRR}*`Ca{fd
zSn;k{a!%JC!U~^uMfy#`LnDszpmXCDf1mv0({U-4s0uO$4 at Bw=`rCGbvj&#CWeDy^
zjlDC;9I1X+)zg|vuGEt%w$z-rzIVwmUW~&d5DYyEYKnhtJKUDzQnq!TnUM%YV92=3
zjm*#;nT$WKtG1``LWSGjU#&gU&OMo3o~I#wd<x_D!C3s_W0WD07B~K4PfronK5%9%
zu1(_?G&t1yY$vCRI6)~%@SX<<@GTiBCh5K~lE!%d1y$dN at u5HH9KRLs`-)2onNLEg
zBYo+>V55IjRtJ<4KAV4hfq#py>05a%xWUv_RWq0rno<ZV-H{wbG|b5!T6~?LtO4NJ
zf{ar3p-H_nB+zY$&TRbVXthGGrDx}4?E}RRZxkWGq!b^}Sf!EA at v<X(_EZC1a}JOx
zu&N?ERy~vYPryzAXE|JZz;V4puQ6eEp?bqG(^G%XV5%^2CM(3(ZOR40Ws*AtkcEL>
z_YcN at EI1Vt*2 at hc?^_?VTs)o%dnA)59RgDOcQqJR8RlET))LSK?hKiZ{{qBHF<}N8
z=f;f3JGQ at D2zkFN=6<$Q{Sji<)n@&#Zr3CjrfSD8L={yeg(zf2w*A}^id$(Dsd>?3
zckF+&x};OCTS*u;gHtM}83ZVOFks;J`I at tv#N~$YX<*?n8$J4V(0~1PYs*q*R2#(J
zLU at 8VXGKJmrUv`u*~+}-G at i|n26O41Hd*{O*x?ko`c5`WYp6 at J@JWw4VNIDidjR<~
zt13f(5d@=A>*)2wKE9h`L^6{h(a_5K- at ktWzLutpzjvJkQDK21cSZ;+^7;5tZa$yx
zvVUnGa#WSILMyLR5L_*pTsM+`QINX8>9YTbTy4Fbqea3W=7g;)*;ckn1+nJ8wsiCF
zxrC)SiLWO&h6E7gZS&}m%p?yi?XE`LK^xg%1ECRU8F(Y8#LoftIk`*%Pim~}WOsk0
zC5t|Jq>yrtSZle_OgcSN#Y~**s$#v-FX9|MQn>N$3=*mso*hY$Q(ShW3glbODPH+D
z!4F<4o(^@egIWyotPi~LJ(S2kN;U8jG~`<0zG5KpibgXk{B&#ct`snTF9C42h=9cf
zT!vwg2Z>!^enQ>@CwYlmagb{p at 49~p_e;6fa|UlV))pIbnvOcb`wX&n52Dkh&GE=Y
z8~`D*;KxE4-!RX8)J_w4{tyxQ3FUy<qS?EFFmli==LOU{XIu7F8ne-ABUNcmG3R*e
zZpf2-kf$?k04`3NmRk3}|9ve at QmCi-IPlAP&c9d9C*k{-0(yqpVNX;1ruKhQW?{Rn
zt3*`FdAEY)?gVq)Ab0k5V9GaXy%ZFwG)m|NfsGoyu+rD+5^sYvof4I7cM=)u!V*U%
zdE!Vqmm+C<!keL&*gZ^yf=NNT2zn`TbRg}8z3{`*+6|xF_RTg11geaF*Wq$%ht%B(
zi7>A`FHnqIWGkL>YL8!+PFsKakeQ3qV~vJk?-WkK at vS4)o;#S{(ZZk#&9tlQZUNCd
zPb?91l at LF_fW_tbF&YEYI3)vDLF{12BG=~B9wcA0LZUAz9sEvAlk>kmkC`9=oP`F8
z-mW8$n}tO>^29|SS$2f`$Di05s`|7()y;-sTeH3=-sgD2hoP&Yh&_Kzwnl&h|603g
z_``@aCMk}iNUrk9M2{PF4evrM@#M%|b{G*A+{JOA0A?Dx++INI!sEv0%L+Ckj!U(a
zAZiz9BMwdiSo&94qG#c@;DE+EMNsLKZ}@j}t90KDv8r(CiX5c~XM`I1o;=>LArJEW
z+$f#StWN!69yadbq8)!c`TD`<2e~84ovUyIM@%q=16liRV^M`m5jsr#W;|MZ!)V4;
zq>caV`0gMbH4+KJnj~x(Za>;@IX8}iz3&AUC0;^h3rw)|^lx5XE!0=Up_o}M1_+b`
zv73wtOJ7#}o6sPjGJVI1Dcn9Z<Iq3v>o5sN&D4XKgh=drMr40iA|`{!_TGg|3JVa5
zRQs9-WT&l8E^AWmff)@*ZnRL*moCbiOCmTG!hDCA!4&x)@MCAt<VTFeubf*CCZ??t
zF%r$284Ta7Pz&>%({)ziDA>0%^Gn2i%+j1?xNPK`>`sSm6M8&VXNQ}h81NDnp+Ndx
zvCIg|>{)R;V^)8xoy_QS#9REanv=T)n2niERqhT-hk$Gp0&2Z&4Sw`RhDZIzlV>QI
zoV+3KzN`^MqrHnD`OII_4~5`b_YGQa03~HSaT^lI1mU#NrJ9c{?4MMjtvtB|iPJxh
zC0bx;W<XCeVI>o~h0#x9DjIqh2b2u2fqlRz8HFky08xK%4H>^O$zs6(n0RFKTojT9
zUp-ZVtttjmrM+x}wVo#Y7Zv*L&pJws>W at Cad4DgP7wMRW$1naPht1qQWbAR4%<S?h
zI9r1F@=nDywt at 73T{Yc3ZwOc-+#TDOI|O_=p+NtEux3Ntk#Dsx%P2N{W|m60tq8)u
zvc-Gy at XvoW@Z%>?l{icZ`~K0{aH`&C_`NRr`qP(nE*Y!8$NygisGX0d#@@N(%9uU!
zF0)C4;2>^BQ0e`RF|qsK7o$^jL_N|AN2c9b9!pjvJwV6g6G~66(Ll%~%nujn7XeL?
z=)yJve*O14mJGYSE2{1~S&Q=bu_O;6{4N7zm_vV(QCOt2u+GLe7}2Vj?z}k6cGwXC
zg$4z+V7Y**{HhMqav363`Ot`X4*slXUUNZ3L)D(MtMiekk=u$f*#y4F=Chz65?x)S
zElyzo#F?MizA2q*^!a9%9Y3Q at R(Te{ozL9jirq|R)+P~3C?wVkFg_^n;H<-UoZ7(}
z3M7AW{z at 9GNrngH-R&X$AF|E=?g%jr at U9*jtjN&=PPI{&I>ZNmTU at MA>lCPQS57O;
zbRZ!vZtW2e?ZP(Is&VSSa^x0RA4E<<B|aQ+ZcPvz45DnGd_81}4eowM#!<}WfDhs4
z2_ysFnpd{5CgC-*PoPN)>O>4+lcnHm{?~svIcMTK^Ko*vr&rb&FMi{K3wzPvI{fTk
zb~~nI?3aT at Iqj{8afhCYO)nmIc0wBdf8lYPY7q1l6YM5(RQ;az;K=B}3}EtnkhSqa
zalAs+Ena4t)}3H4I%{GSJI#*?$UMc9N8x76gL05ZoyC?3%Mj0zGsFcZ0at-KGgp7g
zO|SW_x9q+tc60!1+3sMO7P7jf|CRMy;sn!O8=Xn1b1FsjyS&iNxR;*To=QAX-Jef1
zG+8JyrxyceI^WtRcR#d`>VJt|!E`R3Fx{xDRMNt>@(Un00h(zCb7qt18K<gx2}9E8
zOT<sD#2hZ|$95W*kj)G at GFPiR;`e_iZqIrP;FbNzP?~Gai{+;HLjSY9#D{`vnhDcB
zm}&TJj>|8A!dd$+qnld5_S#qhG1H7cG_w(|lLS9jj%y`JJ#lT~Ji)pUTSsKq^1^6L
zh7p%;S4WL<IidSiQzPK$pJlc+g;gp(;1Qc@$niNAl?|oJayR|IN6`Tw#JzvTMB9*_
zFe1c9)Dg~gMRCfb91ZKLYO8GCURkgF00dfrO$wUd<);}byQ2TP*33B3c<8+fD6#^%
zrz*T}xQck%iEf}cJ`{R`s*V(T at Gw-5SSrh#3_>Lk=I*s{YHTk{sD8{*=A(aw`nFa%
zCWRf6hAV2$6ks(r)|i?HvSWW0BDCcA>cLv)+L56P4fdV2)PA)U-LEWNKFrsb>gqXn
zQ_>7uEeiHh4ETdIjhcI3$Fe3tj{djFr&p4pD>H=ll+7>`$b4Q{I#Aqz4R4i~vc+<+
z&X2y=>{nCXS~BebC`Z&XF+1|RRdMrIp4yC-i1k=8DaqTc)u7EyE8KtKU2TY()(l-l
z#ktBt*Mw#+boK8Kb4WGBhxBKWAd`RZDr$_%v9iY2%QqCvQXzdO(c4r^vC%!9+gS2@
z>pec8Usv9_>n_P~4#K*M&b13q6v$|Zj0)5BJh?yE0tawu%PSCe5W2r at OWC=*)1{}?
zP(ZF3<s>&8$KBAcNuz&M0327KYbV8w^blUY_)gt9o;CIe;)^AjbF*md^Vtu3Dc0pC
zAk-N)pMXFUR9$r}QeutGru!kVIeuSK{*+lQLv9vPnKb98`QS8CB<pJwS*eo*`9!Ct
zaxJ=p=w273jFd(r&bGs5R|RvdedXQXKfquJ%0Go920vA6!jFHC9p;8lxwlbdk`#*~
zNPTqu@&A_O at Dtvu_;+eTY2S=Jjv$bai#Y)uX!E*8=2oHs6bVMO0o}uki)tyPQut(%
z(d%UX=@`(>SF%oF$PaT(;Zmjrh@}TvM6f#Ec8zR?Rh3A8_!y7-JTQ&p5ZlP84mv}{
zz9B`kD(Z9jze0c8s=Y^mUa{ONw3);ggxoMspFLv8D{@&cEV!4Q4$(3bWU at J?;<6H=
zvPxL`+9bo~gBp6d3E(Pu+c|JPNw)N>p2Lzn at QT$ff~KNZxxNtj+tc!t1d@<OsGE&*
z85PU7cP6kn+l6p4|2v%QZOn5N_wi=r`q-Vspc-r+<&%H!r;s`(ykhX}ic*t>uHG)K
z?rky$3}26bN<77OTTrR>8P#|q<-!aKZ>MWnN1b`)UpK}SLehI`XvyUvdM;Um1zu5t
zBIdyVJu13q(O+ovXU9gh%F8L%vY)XD@~*E_e6_ytWsIH^6_D+|n=WB*mk{kUWpM=<
zK5Ff^rPY6(FR=_Nw%I0lSy at z}VX3vbT--2S3C!Cns(F6fs^YIsPQq7ZkwA5eEEZA&
zzWqk(R`Bb)#nD9ac2 at LcNHZ+86p~`e=?>Tcf6j=q6VnKfQ#L(pBDEaAW+XrN7gjgv
zg$3vbWFkv%xO40q00Th$zo<L(Y-c>HRo&_`m835_uy(b7a7u38_%K;~b#>ZeQw8P&
zTPr>@P}xj?$HLVMga;>NctQLW7#He=5ygxfxvT4eKUUFHNwB|9xC52)9!~&(jyVd;
zroyHIj6!s-*phCBu6e8ZP21+l5iqc|BB)LHJKv8>BjT1T>x{y^?d;A_^upH at L0{!@
zna57 at R;Z|dt!dVxpf9a+<$O0|k~QuLWIXV0m|((o3&zK-z9)gM>O at EDM~`N;I1Arw
z_kGT7sKOj<kivXm?MHw0V=6GB1n+5Q2KL%Dp(E~W at G_|(>%ypPzBY?Q08HRPz=Vaq
zBS<$#t9LjIILA_E+;qXMzRv-KNWIHR(a=XF*~F-Sq2tc_k4(?q(NksojY%y?EcUsp
z=1o+=oR8nSeR(gp+#tu5Z>{lh^(9hzuWVB8tKLr at 1sP|Ln!e#Z6a_Zlkv^qu at y5fF
z at r~4|VcTJL!b!K`C={KOrx$(C<Ct|a1?dyga5dDgxgrt~W1VYvhwCw0cIsK}9Q8Zr
zV2q1 at AT3}&jBW&MJCp97QB+37jminr<hGe{?ioxL8pNu;W}-wlAvHqZ$C|{fTNAX*
z7t(8^o}i+s{r?mUV4Xzo<;f@*_Dcp}J5zLDxJgiXl|cfrhJ3rfU#n<{eX#z3;y&p3
zF>d4PuG-)E=jC4Xb$L<lUND=`g7acZ5pWxSz!TH=cP&#EfR#Yu1<9i5K at z_k7N!^_
z_(}T$lsnzY_a<XDl06G0%t0#g280bAY3r!g!#l&CwC+S-Rl=c;Faro==oL>}Hzmce
zekDx-<rT~ab{fBID5wO>t)(;#V^Ui|wsHCe)*W^@{y|#-*4mJq9kY+f#Dd}aF`P7i
zQy$TGTd|13<+ki at 1d3n>828y^f#9*;baXAww7y!`jZ#6=AC&PfreeQM70$kd;Qo0D
z8jZ>k5%m)#&PkI15F!8gQeBD@?t?fY19eKeJ6fr4O&HYX*@Nv&)ZD=BiC)V84!zHn
zN!=wy%D8{CTpQ0Lw at lp(_53$NF;}C1{Zl4y&`_$}8GAy+;6~>8`SO}KWhgm0*S#oo
z&iUcCveFTNBo5_MnLwF8OW&hC40JK0FF?YyUQL9Rhj4-%Yp;)DDynKolvW=r90mwV
zrh>!cWd~3tlVP&nH8wT<V9LNw4Si$=INA&r?c|?|p+lMlsz3#HYaS}}Hux%kL`q8I
z$Ragp+uflQ_+uCk;^1p>;BVWT8={rSMAs%KoL|Yqe-s(?pt6ltaT#UUE8r|;oPbC{
zOM?t)cD+y3Oq0-FL7sF6G6~Yi$d!;FXZ#(5o8pIO<g(4JZk>Pl#y1-tZzMhM*CzF8
zvX$!VHdT(0A0KudRWjQmmB6)s8ICyz;2M;>j)NjXv5L$l%lhS~^ZuSMo2yJU{1qfp
zc;x_UdgwE~d_$R+N9K2W^IWmY$(>itrHuoX`6|UoJJicvZP}a%hcif~A9T$7NJoDc
zm93M5AR-B`yIN_OA%zyaK!VoqFVJI0U&~*WV(9k<#V^?Du}8r{R8atb%T_FL1vWe|
z#|C`BHy3}oiC5{WXVv)t+<%zFyH2v8wYAk#5rHzK^)h4i8l5>qux({!1H=vqid4aN
zD*}(mwQrfgpm@%^^c4;lS!9wRGHT<Iij$MC64&s=V;`TM%(Wb%2o~i38_*pIOtORu
z4k*FaNXIcUwmzOg$^F8A7_~w!WD_ET(7s&qphIJcRsNibPCggHakO5>x7pM&4r&zz
zL{M(MJ!*ey7KDajI(@e2_m)(g6A6!CRIV?Ugev|!%?!d?&;et6J%N!%<3}}j=(csJ
z!-A!);bCi0;^KarvpidjkYrV{C$KbM+qZr%vMXc`c<~n06x_XkQr{S@#8^-&iCOcP
zvm_jtFZ~7#zVipqW=(!!N5p6-b3mH>lp;JVeN_yX)R&viIqj*vTIfUDESd|m@@~ok
z#6^pfq>0~K(+>kv7+dAs|0HpjW)ukS#z}O=+6M`j#7X#hgv(%uTQ|cVPD(JxxYQYW
zI^#ehB at Arupm-jC-aS=~Txk<fZm at CQX_7ca^pyjyesE8<svmD=OnQP1YP7Ep-zILy
zjI at k2^m)-??x@^8^p935D~~PFT<~`_P7=23c+U^_ifA>!R7LJLq at l`D<;keO(&srH
zM51tUay=4WtX~`3{l5PwdTAUZybU-GHm}%>eT_(&jAW00p6=73?&Q>8Ib+*RayHXo
zBzs9Z$m=3!J1EwZb^n!jpQeHEVLsQ+knzkE206CiTqHIrQrIu&8iv#u-jhpGHZw#Q
zCAeZ1Sfb?;g}BN5D6DJldCcI}RjC>AoE>$w?sZemVd{}&#F at O^RNm!&{c5s=%TB24
zYeRqV31IJki2Kihz&o4;R6tmM$s*j#{v at z2JL%Amh?cs`Nf7ospR-PjsFo(3)eLua
z{Ml<m?iEGZ{*>!%_qn7ZS;vW3e}fDDw9f4Fqm?ZOvJAXF{i0A5RF&SI!kLErb0PY&
zg9bt0W{WgYhF6D7&LR=#5RB7bHVRJg6E(ad8tV{$vMS7ADbP*?O^>Ip{U{0vA1Wn8
z%Whs2o-+a+`UqpuIe8L_tl;;t_i3|fv*L(jKcddK5l%RVFf~)%hhSnFKSqJDqX#iA
zJkf+M58pVI^URRLg1 at _#rP~lp5m8sgJlC6=VN at Tl7>)wl4ks!C;ffRSks}8b at vQp<
z2-d!T3+=RlS|xru4LoD>EY-wBh*s at fevf2RDce8`%O&kMfZe&bRBH at H{za>k=`?oy
zVmfx_0vfLdR>g79N+VGc3KS5_oJ45uDoJh|lN@>NQLD_3LDB=V<|dRx0ry4YZk%Mb
z3Y`7HDN8?Mt)rDiWmMIw<Cl%M#Lr~ehPlIk?h3l=ML6mcrQwwhpw`A|&>O0zSJ}`&
zBiI*(day*2H!eXsd;tp*%4PXN93s#$5(fo`t%<G-`;o6*w{JHn%mAJFDmCrDsMa5=
zt!lryg<N2S6Rc(;qAiD at tprj>^PNQ($#MiFBNcsmZU%eAp~{NS=*&mTyIpAuUEA1y
zp4r4a?I}wPCW at RojX#9o?Hw*jSzTvYj3I6qj#(5(tsvgl9#juEk1E}>$g;a;e)|D8
zem~T=wH^3C4bZKx#mPkp;(sn$YoQZ;x}5<J@(=>;8AASa`<W|~lQ!K6Nlh^aK)B}B
zyV=ZgG|cT`#W$d`tJ*pm5I&l~KF<Ju2A|WyN`?t#A6*lbOn{M)jCSa?yt)G_$l03W
z>ICWCg<cxc`DK|qPpx1wP4r1f`6?-n9s*t1!n?;kz3c&py`^2Q>%t1a7*giQlobse
zhY&e}M$~eO#)F9GYWr=Us at A1Fp)!sgLIVkC7Wn<|!?GRIOm4MSm!cUr7Q}~tr3W7I
zx)7-{b7uZlJ?k%Zv#RD-UC~L#4E%hfWfJ at r&-L&X>D6;qD1{1V3$PiukNKHy#*g*M
zk0B?4^mg4ab#-$%+v@#o8GDCc at tJ_mW=*cz`!mMEQBVQOxD4fE5fb1aqGjJB)@o#@
z9yHgil0d(t=#&{FH^Ta*r?h&1S0G8eYdhDEB$S_13vykc%_ZaU16i+ov-z53<LnxN
zd3w@~0N#0tpIUmb9aR^$TFfPeH34=qW>t{HF}C(QB(uFSVMYYh$<62H^66pB%=rpf
zm-NoE>n!d}j6hfrwdzV~J}ju=KQ732- at cy+ftsODK_e3-BfEQ0f)q1<V)t at 8+i0o}
zVYsKAC9$5hw*XULl}2GH${NX35mEV?aZQ8{WC#JxMTSBV^`1_PBZusR at vHAEA~qVM
zEU`{J`o77sq|$Bnv6rRDdE`%Lvmdyq%Eq_XHodN<uqi(WCFZPa4m4*5M_Vh at VF&{u
zU43Sj=!de%O;^ZZ&@%deSeOc|V)Fojf?*o2Z(V);1-ZZC!~kkocFZhr0CRnnvg_AL
z*6aqaYD&=NaR^h$a0T3FE-Z?FrfU*NH_0B*bFX>9+=59cuj=D|r)~u(&H>rj6Y^XJ
z5_tk<CKHHoesd9bht1|8T_3@<zi(?E;e<?wRx3S$Ju=FutZegtvgU{_ziQ_dfajhD
zx!1#P>RiLFnyPC?FXSAZFR-O1%>J!DcUWj$V8h86EOEXCjJ}TO#{n}>GK}%ycr{7Q
zl0H?w(<Z9bH_3RSF8hFfq14Ld19rZ~{dtr|jh2W^eGYNiF-zRq#$b^^llSF<2D)oB
zyX%2kbP5?znKhe#2#h$5cIuT$tdi~43=@$;5sobq-9A54251#g+pcVbKfRAW>klu)
zGFkV_##*2(fyy`fV4<L9TnXTv_6uMZ0>$Qi=@yKiPWpvL1>&yirN{5WM6HYXvB`mI
zo<qY8?pa3?$t%Hbe!O^4)y6P79W2H8Bo(2I4mAJPJHw)Xn1(wDe&-Rj7f%*F6(Pdw
zlfIOA%57h at a2I9Tcj8M!al>`B2<bzg9?fqMW--BLk_!rSwTMI?A1dL+{Pf;33O~TJ
zxR$d*8k<;-c4h~|Oa4!cL|<jWCeA0Apj2Ocp>1_Qrj0Zv<M+sRy-8Lo$tw5L at HjVr
z+(9w7?<=x at mHYK%tP7{-P86T+$#KTTBFtF)d=A(Z)%|;FW|9&(k;BZesLr!c#>8k-
zO<TgH4v4q3bw`v?o at Z&H&Qc|!3>5(o)E;f(Iu2X_$x~~ao>|7}K4)OZcrcMYi at qb0
z;b<wF at pY^GtRh at n*^h4AgEn+3;ywPl at z(O#k<<-;v|K&HSP3o*6IC&y%9M4LtECO7
zW^nEcQcmqtyVB9<C$7wJn37Knz>~xQZ`BC8z%6U5tqk#ruCVuZS*dIHdA5&XbP5&m
z$zC#eTa8oE(3K}TER&ogPp*&oX{?RsNhxbRRE^nB+ at F`3grt*pwqbKGKXKqRIFlfi
zXV__fW at wSMCRDSAoWa<jVyFKTiMe6>4{Tw~EQtzs7vvMd4oVkIy&|HYriW4b{Z3c#
zqkK6XDnHD!tQ-Y;3xLJwUyjU7lb|{?DQyk>O@>aF=RA8#Ny(<YIl`xQ3b?JeI5yI1
zdkX$`Fsqh;!JFiKjw at p4noO#ZWfgW>=&y!<ol$!XjIww~OFzqgHu<WFd+f7wQB3V6
zhH%>Vy`1~x&NO3u7N5Z-SMG<=G!2!Xz&Sn`{{R*7{onRa-dKikBDH2_d!I0 at csMI`
z87dWzvFzJx&3S9Ob80U3zcyESJBT>CiW-G$C?J$p_}UMka0tZF2eKpsBeaThAjk`U
zy|q8IK!n<|4pzKLV~G8sHT?9SYzVG8=g1zE$8gbI!f1^305G!Puu4+n^83Fdt&iHP
zBjF)hK4GZZd0CP<pvYf}UEmEHtS+b5VJKg`EMq0Y)4I*aLzg1bjZHIwh%(c7UD;O7
zyzJ|#PTHH>ZV05~jNQJ1PZ-jEWJd*m?_n7w*fPymJAs$Q-a$Q<vt#g$AjLx;)|BCg
zIEht?<wr<0Vzp?%Q4%>%InBaF0TWfs8mr+k570!)<bPdof|d)Oj!PYIy&LDNg(r at t
zepymqC^%2jhS3yPErX>y3SoZ2Vy45a1~ntovEFqfJia}>OZLcXB;Rmaw0k^%XLSwA
zpnR?pQ+rYl5rQ8!pnX0oZ;A5VRxqtdh;U<eyM_PW(*IVBwuFvEyzBy9zuwc1+uu&(
z+ZT#^^G?~oXEz08(cb*9$TzEv4L-PU$6B=YpnQ&P9(f_o9{2zLG;DhD`eP&dusbyH
z7w|prvg>9d_)*30V<KJ()bGT9!uR!OjH at h(0!uF|)!BVV^&1&&i_Ie at l|g2(rhXe^
zL0g8Z>wKlYc*o*T4i72E3buhITkB{Yp|`rlm%#-_JskdOot4ztl>M6($PcT&lfy(J
zsWg7oK_OBvc2aLow~?AT#APFV=j^yjnbxX=b$TFuip$!_|6$zVPgU7}#TTgCN6Vu6
zqclbLr-0~Lhk?nNkbhskB4z9ulvKF_QH8uPfq2(r84iuzn;CYQYAXHwTMcM#<Gu6G
zCa`tFmY)eq#dJen6eSks>iU6f4t0F&sV8rLoYFPrr23ScYj|i1uaW7~#QK9lRj9b@
z5vG@<g{EZ*l$SzcXaaeEyb^`D;z))P4c)$hAFMK#F{paflVB*sAhic*JmGnSthx4(
zBthyx;O4(ug<AYg51|#i{16E2)9U5`oLMRvP at _1zY+34b*rX@{r^XZWva4YCl)G@&
z(<=yZcPb(xP~?K|K!-2v=D%-p(b}a at nGm@h4S<+rHxQzftuC^E>$Mt+_$ChviW5&1
z@}JEf<ndlZZdo5K0_Ek=)VQFSAly&kM0Iv at tnS&HjyuxO4l5=$#FTa{<e^TM3#{R>
z&Mj+6UYRMVhBk3Fmo=WVG%lSD9PyaG{XHnEXK!sBT-yy~_K;0(NFu;a<_5jGkY#LQ
zH6ob7_r3xpbJwkZRc&tzn9`V$YBn%5mxb at gM;h_f_6^Vm;y@?Mm~nhNci^G2My-6Y
zrMDp|OEi-&(a*^Ouk|*ntT3|hgG&)TY}_j3Je_JLR7^Z5eZPuQYc8KItrmLvfDE<Y
ztB00ppT#wz0=%Ey;nQ1+{ATbD&qf)sK9gph2D4~o2&U+N?tK+aL-*8<Lu<i%LDqs0
zO31N<C;jxwaC-4)9oCJ7T_h#OfUIo*i>T<VDc;7bZF4h;2hMpJg{W>r<75n9Q^GQ^
zf~pxV<4IVDKi>CwK`G at s&4wA-z{#eD%mN>&3m1#xqh2o_$`T{X?z`9<y+}gmS;5BX
zI-eVw?`MyHAQCkm4djvHl2faE!~hq^No=w{q0t87^lAiS=b{R)NI^HVvfDtsLm5Lt
zS4aak2H&40On5fBgYA<qZjwtPF at JCu7GfETW%1FRhcyUXX-f5z%9dXOR|ELjB-k1p
zjxl4t<KtJ#Y<@(E$phUE>TO3H)LN}~Q5!)bU;BlBS9*VB?V1k}CdSO)-==#q&rQ6n
z=vu^Rxsd(+oQMTc*<~P*!m`!85N|YhDI)=~$+E&HXum~D9xd}19(g~yZ-&qpl8Sjf
z7=?WFS!%g!v`i@<fCSvEFhOi}e!mb;nN|p>M2fvvqur3YUa(0eAW}+Mi|n>a-Uk{Y
z51M0tAeT6QpZ8ROkGX4T?IWX{M72S9!BoksNRCFo at XMQnRP@J=+LjWr6(%WwSDQ at y
zF^4yd&GMJ_ at 4(<^V#^zJ{Rib#xyz#f;j at _&S%#vm2?I}K0vEFDp5M=5BDpHI#hC_U
zt+Of{e-)X8%W4rw#_ox(d#uM<n#1&=J0|{rS~0_KXcBNFS6iqP#ptuGD`5zi$m}w!
zb{P(f&oE*H8v*b3U{?}d&7&p*5b6HA(>Z4eWo#H<z?JW8zdfagc19=y9Y4gzWR at Iu
zT{t=rbd8dVe^`X8p*6fv-a)*4Vb+3vwEwU1i*{5-JS%JK3!=o0J0Mr(EM5Y&jV$DU
zT;^_|xkq{QzR_>Enpmm=!O}Ad_+9R{nl$P2HK|0qwh%x3h<OP(BOqsKzrh+mJoh6^
zrSf^zif2y*@4uCaz=^-DjS5}2LU&=Ueov|sL;kG}Yfg>JB<l6?j5$5cW-tv}{t6BA
z$sF8P<Oaj*0Qe2VVvotH8mUG}1(VW$k8 at 0&9AxPaRDGrQvOeW?H7|DjnekaA#svTs
zF(g)g%1z at l8a-+o!g_$d$mP0c@|<QC&Pktc{sg43G<l1r1=A628!G%bHW+0|cU_Rt
zdZj*RZ5#o at knzin`JuyOV>*xjL`ZK4u2^!MG&xy^T{6Og#!~3*qbn9DuENoO0r$GE
zwFG219OFgy`SksfoVW*&MgG<iKZ4Z)2<`;Vt&MaE--Vj;_M)EbR4fIaB`jy)^H0Sg
zla_+_Yt0A03EwzC3#pZSge}EEY^q_!M_y}W{$Ar;8Fq^10cbDN#X}Cm=xTHE`eF at s
zTlRbo@&IkG6SnrSwdK;R)$vz<QF1F*zpmT4A|wz1Pgga=19%$)XptMj0u0u#l*#!L
z@}ZjBC%;R2D0r#fN%Zsi`lBM-M(bZ(j1}{CNUXJ6e)!8uVTl*^bM-2>E- at Xxj)p#-
z=4`#%4Yma%`IjP<A>#RfzTI?JD}Z;9`;sRgiR;>DB;^TO_^O%BNRbzR4H7&NR8&7F
zKHWx>_B8`IsGx?zIWXS&C$$wWf9-A>kY>v|>uk75o47V3DQpz3US$Tqt|-t3HH`;9
zd&H-!_UW*!Q>KZ;1wcanrXgAxAd%uuEHB2+#s>K at ZJ^e^lgkV&+~G0cGK+ltv at Dl2
zN(7 at J8BA>mE`^)IY}G`6^b#LblY<pgVYzG48m(??1ax_H9!59y at GdiG<G5Q;#IAUN
z9hleQW4oG{mS=R|m8>q>%|@Q31$p=<Ewu)PUR!fK8sJ$kJtX-KhWj}pnP3(kgo+DI
z3Ci$sETl~BwZ%U0ztmrIgVu?R$ZnhhXs})xDry8rUD(%yhDl<7Zw-!wU^$!Yzbvd3
zPi*%Qp%s=(6tko9ne#EXZh<bF%=vh!3}vBMm7Rb~gUl45w3dZQt{t`o|0J7vwi*~e
zy%n7ag2kFDn|%?dm<z(v?iqksbgdj|CzjZDofK>*)8`4<2I&6*ao!36QeIzBDd>^Q
z-K>iKVnssAaQ#|;51ykHIEHH_#3QL?i-O%-)5(cDl_a0&LF8-;cT?S}16Cf5#k+uM
zVvzcK`0{TXawTcT+8l*E%VL>qkfKcfbif-DLu_6Ye6LwSywHmA7RCG|B5%x_AX{cq
zcfr)HMeJ^06T;PllFty?ndieGVxCwPCfHBIBGZvH4?tRfU}2s+t6zGY__UQW2_b1}
zVu_DTQBlDfUyUFED?|bd3ety^#(sctQiM(-bw4a^NdBbkW>`vVaOKAFx>)zVO4p3g
zG0UH at m)gu^BB2Hv0{!GsX3eSGGU;Ua`fqL%iSL&vAjQbK&Lw7?gI}64hv9k-4w2*h
z(CvPHzw}mrBi<jKoItvOYULp$qsc2vHB-2aD*2Yw&H6$|6!*!!Q3!XUbSTrDytx0c
zkFfNP$3eaW`G+Fr4IHv&&o2NEdJhU~y;9kk`?5lr44jg^H-qGhS(yWA1(I!*vaN)j
zIlP-5dg+xk at Pe4dUM$7Z3qQA+ZI|<Un^3BH2dF at Qy_Z1yAK=-ITKwG+(c3M}UAF*1
zaQHHoWS&f7HZ8olhZk4$0FMc^;4<QYQtZxz)G;biWD&NCq>N4mK{M2$^R^wh71X-a
zx83QvgV*3&M=Sbq*)q>e6Uu at evu+4($^0lX%(N-5Pkva(++s>v%g8<XaoA(WmOnup
zGMZ0+d-*-Mi5BTe!A)nr7Zg1;yFI7=I&9jd0XK{XBM&wOcdwG7(mHkjyBCTj?Sh*C
z at vv2Hl{)gXE5|{F at fgbbPb}iWis@^anR8L`C~fv`cXlUX5Pa}4<e0GKPm+)L(I3TJ
zgkY36x>>E~{>}Aa?2)~R&`*NrCo{V%pXD8Yu1|I5%fFPP^WF*5jTJpC^MD;aF^{D$
z>Q_!^hhjs&Piv9|8iuBO%7}c2Q;|j$x;)a0Cf^v>mWbp=M!*i39&E7SzoPGM7g_#L
z$*ueSA7JnXNd!`peAA+pTxi+r;yf=9pr06mUG^JH3nRqd(V6pK9N$-1T6)`bN~-{W
z#gBN{rk|Tw{Gf&Mp>s&+=NpYjG1rWmy<z6xlTEune*aS`8ON|$kpN#uCq$_dM;ptb
zFAsH-g^R=ofPEi1{W01s at Mcifs7+w8AjFlU>U=%)n<$o?!_7<6Zew^SY~PJ8sL#X$
zadxa#J=E6#FF;QtJSV(0t95X&VK4xH-)tOCN@$st!<WUZC<*Xs70%$6X7-sZ1 at N(T
zL6V7TX7EtiZ})76KNIu~PC`}_7lIcpLtW;w2cmUY;B^Dc at O5!3evMI5Wr$DY<`00Q
z*?$ur#u;o3e8(|G=dFW at iOH^i;7bh6OOS(%j_!IQ^h{l at LDr7)ZXvf$9UX&zcz2Jt
zZ%u+-8hn&(Q6lovxR+-Y-<x_yn<Eb42hEP$4lYK^Zk31qYUP9J8>{Ov?EqX0#DxC2
zjl+>}-24k;Piv&L+T4MmjG{vQJBs0G;d}^3YFWBDuo*7L1mX6$3_Ry{evn?&K;l`Y
zb(HNWrdH at L?M6wCa7%n!P4|0$fFM&nQ~7ck)WK`ddQPXq(?MHXAoPL$y4gkPt^&>&
z=ab`CBkfykAj)=m_d}Ft-kB5*6R4Qv&0-_Yyy?X5&BiAIGYWVcL&fv0^xrgM6HvgU
zb~z~Y4Z0HrgT3{wbE2lnAd=RGp^(mcXu%41Lg~Wk%ML>nR|m4*4atmuhKw&>fkW?9
zU5gy5H70$(W-xiwo5l}s>mi^e1l%-1?S3C=qIE1}+vQT^<ZfzV;utcrI_+j8sLquJ
z4- at PE0?xuXpk_R4in&f_AZg3g&IGQm1vtOd*+2uc4cbB|VD!98IDM`@)a!HMCi5EV
zBageA9_wPL1<Y|yp6}OxQ1f8yxktcyv+_)14$)2dduBVyi^{cIju-E86-))U0+3b*
z?n-l=yIzd at ke(wfgabi;)c>+b{Kbugw9Xt6sP;+gTj2=Lb0UMoF%i3;`OG##*Eag}
z`Wp2a3Y$cDfmJ}`NUc5QT{xLMLu_1++oT!u{4n^-2!h9;@@Xx9uP?9j`+fM|RRuww
zt_85b at 0c1E%qH=rZp_h7lwNSWfUL(c8!%5jT2-fufHExe#t^$e@)o#hb858-C)#)X
z!Ewsu$0)j(Bd_tp-%}<X(QwsW=dQ^HkJAY(-r)Y^bE|AEq2lQjb96y+p>j!MOjn at _
z^eyFhT8KOymD~+~&&lxiKY=2P3)%#W*dpqKGlO9PsR|4 at Em8>+z}WwY%RE`htJGb;
z+;eOnmqH1peII)z%TUh0 at 4VTFki?+OY~W~3QsZ+cl0rg5Y3b)~9PH at S?ja8}TR18H
zem+cIkDTis=1NpyqV<5`ks!(xLXgdz{Q+_a2?nH_^sIw_ljY47qU>QoKS2kR0<4|z
ztOdkAHSMchor)w%s3_fpz+X|i*6dy!jMB^wD0G#64aP at rCM2vKqLahj1o$jeVCHQz
zUq7AaIi}k at KMc$$wdRCAItv!1^-HL*fgURJ;mfwL03;b*qgTU{Muq*~0>h7R$1`|O
ze(5ED$M`*eKfG6%S49i?+g~A4 at FPD3*tKY|$fXF2bs-P)$t~y3nH-xuv$2fes+ncO
zkkk;|wa2yi?P`nNq^NtrV6|WKEcpXsx>nJ?fwbI8p_&Pktk}@j8#}w=wSlGjuutbT
zh<Fn}-~m=>D;SxzlVCGkP~{)SK{YQq?0)F^Ew#FT6naY<2ip3~p3NYrEz*bM#+m3z
zUqAag?EsP$<5+B@%^bKrMTaAI7P_a_Vgz<e*vqRae#I>4n5NuE^~*L&>g-S3b`3(c
zoTMYY_BbdfNgV+aeaXp3u?IJ070aDNIpA0ga$+50VFw0Va4asKV2fVLrTMh#N*C?n
zEf(Q_BOE#>gfV&H?-?8}rN~s`$<k)=Q!mlTcmWuj&eYjDDxqW)30;Hjx6FkVrH4;n
zrWgaK1y&21v}9P6*Je6y(scoAIwk)jJ_lRqhRLyyWp~je)Zn$@9mlX~CgqwUzjpB#
zWNaukiB{roC}ge)5BBn`_FG-nEa|W_VXcRM2y_!XM>a~`p2R{Mwl?r)>UxAL-Sp|;
zzltULtDf-pYGRzZ+DokfaZ?WiS2l<hM;^ac1I)^js;f+I<o`ZVd*qSHhC(sSt=boc
zZ7;capg at lfQ_XT{X7~kdGcQcTBe>({C)=oVtEf^ADy5_917P0&$ZRZPHt(t-h7hQK
zLuxO>Hj;|>E8kN4_{1F`eRcoG$#Z&RG`GCqGo91#dc|ZN=U{5ST2|C8&$RBA=|<4-
zKH5L103VnD&dQ#kd+SrpK;Uk`JO8W7e$?j^99=SI19>v|0!?AVkc<D0#~#!xgF+3U
zEq7KctJDKL@>{M6uvwf-?+V2-Oed3n4nh}X$x(=LFg7ECrgSmH{C~eFAbWUa{Ig*z
z>k9p=AX^n~7wXv&CRJ4;&FR4D<xoFd at 6@wy6Bvadz|+Vdjwr(+brf<kp7W}o$!PZr
z$j|{Fb24gklDo7pxX0A;+2#5<8L3WupfqyrL(xP&!-_iT^HebB%S7 at 6WaWW>VOJ+U
z`1zsen7X^x7NIt;q(QGLflY`?gP;M_-a;DX`~S|_cC%YRNL>44Dd8%nW}E<Qm9G2T
zG|F*_pBd1ykOc4Y5Tdwa&EyYM6P;m!Sg`ur1BWRyi)1(trK(PMD}JE!qy?9KlD;>g
z(GEMFMD#l7pTcd|T+e>WIUsv~?es2S0^oyGQ}UVk$<uvKnG`S|<wAkfqKD$BgF|~j
z*<PeOJz4iGH7WFgIv=rBKS|@jrEOS62&c+>x2;u#!i&Pq9kHMVT0o8P69u$beOOjk
z9ePHG3iaSt%+YRK5~ih4+YgyyZYb8ww7Mmy-7LGkuk*m4u!pZlR2&|EQwMUc{wJtm
z(!Xa{kMl28mgjpzH9lwv<!qcMan9M&^kmR<(AVRHu-1cVd4*8-cT#KvEcu!aQ^!X*
z>CAMGInnK1&TC*IDnSe*Wb0%4c0}@^tL<0OHEda0L%VukW!n;*^3>U4*@ePv*IX0}
zz&CdQ-29ghPys`O at eQqiJt5LHwMRQJh9<JHBRY-l3 at AGQTwB?@rXh|-!V?LpSOypX
zx%R(v{HQoebAc(IH5d#cMu4zYmxX0r%bFKym7L6b_{fW>=Q(zp6R3~&-Jl82%NN0g
zyu-z6(wcpmrnUfW{xS^BNCIH{w*dBo-!*(ks$%>b*9exS1ehLwBQ2{+Tz1)Xf%|kG
zef!=~2)j_7vua~KzBMUre;Aj}8^!<eJHiJd7I_m4W0t=QuqT$K(wzE8SgC`6X)%3g
z79Z6Sl(qKb361o0EZWDu_x?G`XU~&w68CP$Zvkgp;BiJ9_Ir|YgUwm8M0OAj^S&Xf
zP*^n{S7JPbCpsN}BlQ0TQ at x+^wghD{-0B?jk<}Du)KAeJx}<W|8+p$GDWsjCJiKrd
zKT!<iY0W#^{GVrVJId&lByGnfF+}}+@(`Q>-^!ov^6yG}Tn1E!6b%dSN-;G%Lh&F5
z3FR%gq4Lc~Pb=BTbb!d;Rm|uiq4T{&=Krp!nMC0%<5<UkZTv1?I`lkF{2~NVtu at 2_
z0QY3vT6RZPsd6Wys at Am$=`ZzDL8;A4l<*Tkx*Nef8VvXip7BR84uo|CkT^zv%!~;q
zdC%Av!C0(<(sO8dOl4?bbrzipm~3k~8}eaNw~p`!G=SuYzE1 at 8&#Y_xWT9Bkj<6t>
zJpF`&k{B_6g)#;V_QOh9ZAYIc`9%+DZDLY-&zK*-7q3jdfq_+RIxxcQHtzFtQxN#4
zeO at ALm8PR**+074zC61IssaW6c$42(lXU?dhyZr}W*->Oi=sqC=6KZ!k)0^~(>Wux
zESe}@i8Yj5?$@N<9Wq=nUz&)V!h&#et`9c(@Q{{&U|Adkl5Bm53${K4+$Sk@;3k+G
z at BRvYU^g+e$k1Lf&bt at WpSVBy$PC_44%>lZ*R?QxDDOk_H*r{EPcamQ$n8wbTZDQl
zPjmN!{SpgS!AGfv?}k3mf-uS>WL`8Y8a-7=Kf-oRd;{R?fS}m+=b`h5{-GE9*kNzh
zE`~CHMRGrC0nHCNnTNh(qMBO$Y?Q(mYr;^oL^6JU!z`Elc!ul*cS8y}#=#%fYRBrr
zihujKp(qwxPZ!#o!9l?(E;3%QcsHD6WN($G4MFD#$_KPb!FZDp1$h<kwA69(XFFJH
zEW4|OjL+&$ZCb0>MS&b~tZhXGzhy^_1T0>EX0bO7H6rp1JcyB2>~4hc!V|2v=>2SU
zKygk&*uK_ckd^0d=+*jI)Gii4#*Y%LKpwCZD#!x*jh3u5KsPR&<U2N&9BPfGxJ#Ui
z#f;K57X5M#*f$MyH?ZV%`hS?|qA{{#<N6ZFt&(@p;V4GM?3XsDTW$p8)8cV_%$T!(
zLI<;CAVEZkpW#jlZptT+yxFX>qPv_En1o#`HYXR9a*n+wID^Y7Jm|~-SE}Sb8_Xi;
z-Rg(Vk7auFBO0YCw+$ieh?B^8!jHB&szlX#sRg<ng+~KjOf)ek9Y>Q><OcfdCFk!V
z{Sk3o)2+ND4rr33I=GYbK9b9KoEf8kyY-Bwgf0pb`k4SUi)*D48*P&cePK~?GUi%Y
ziZ=H%sulsxIvO(V4~b-D4haG-_q0DnRDmi+CYNe~|1*8x4Y)4vSRuvdZsK$0D0sDl
zt4&BePUNB#ld+G02~UsehP>T`c9S8`%S5?##RYs{*iKkzU@}SzVYIgdVmC{F!ts(3
z?Z_0Ng2Bf3ax%hX7xV#S!G2Zsfdk5DrARfzJC#-<pWk4-wSb(r<L^my4Q2}3D|NgV
z<|^sM&#u;Ew|1|yrn=k^fXO&gWHh$_J@$2-w(rD3Z>$(H+=E2~bp1loPq8Ae1U)f$
zUQSh+9 at y^w+LQ_&{AC?ZvR3qeF}So}DGfm<7Y9Q(2tLA`gf~md83c)M-|OT%Z{>i)
z<<vgs#j0e2Mk>RoNpGkMsK6=IQ)H{gd#`UXV?hn*xHx3z0wLNnS})@=lc&QNYEr}y
zIJfzwLFCha?N&JW<b8Kw*T$MkWz?!K*Xd7 at p{-sKJc_JE9IW~<&6}5ht9g~;Jq(s$
z3lKlFk-1&z&;ILZ1dbN0nfz1X|DhE89fqI1$F^C_;QT0T5CuNWdC3U01cjZFZ?bRE
zUrW{(B0()G0Hsg(i+akk7e4?TjQAlzK+ilbvh0RgMgqWK&Ma0ym){R~Nv1`}6AmIT
zDx!~{v>lmXwZ+abu`_^wW?zuBpdXqXud`PzPFOmx`pnxqG*uKY!$|W9H?hb2asEQw
zNZkMLvhVVuy+F;p-lgH~7?#Kt1}Zg}rF1ir4{ETfn&1H`t;C`J8Kr)yG2<O~`l at SV
z3=kQV%KJv5L=?Ya?Y7n&uhetw=s+$Hxhn)`oaID4l(Jlf0_l){Cd)P)r4N$VOmCpG
ze&DNbovR^$oYRUXL_bbA4Ku8ZLZG&AQqJETE$}S|f43T|Lf`n at x|iBq1u2N;SmDi<
zngRU9<xjEbo>Z^SP at xV%2-xP5TrQ9-`AQY<e9^!B*MN3C{4!_+yF&1O?pMr#s<2cK
zHLA&!+p(qwl~t;LM&1IZ)X~pP%K-I|)-0X<La&4{WqzmP^p2O#>_ol%YJ>&`-ZWxH
znm43i^jzb)wvph>Hb-D%lIDAHhx%M#yjSq6e+`y)9 at 4~MT$715H`phg=iDf9k<zc#
z*MK%V1VCJBxKE!Fyiy~eC)1xJwkf95phKl`y1uTOC)wbCMgBtD<KWl{(1O|yMGEbm
zC-ZI7$muG?m2fNmVNOPS-^y+x7%v4X|IfaiYV>KMJg$5p^|YO+^}3DY(MlYm#|Z{$
z;;l>gqLzS=muCvKfiX?E?|!}BTyoJ>L)YP`^*`^<?L2UJoL-m15HhHc+oBU0gYT5*
zYv}HU4<u)QW!pOByv5U4MlWoRFu8J!#_`UbqRso(cb4g#La3jvx|dDlzo^pf1})^Q
zql?Fq5`$G<L$}*PmB|d~Xh-lq$0#0XN#*wamoe$3x@!B(LbXE^@zBygEXMmrI_Pj%
zJDFjYNiYw1*ehVapAN-5*N(<dE7>VHeZxRg?gHh1 at h4VJc58aDKuy7JJO%0ZXE??V
z*==I+>(Z1><PcLCr2W2R>)Q6%tE&~<s9Mbw|15=S;WS#LP3iSNr1N$`W$kF~D9{C(
z<aQDg9fT2f5Q?t_ixsRt`<KCt`U&5^(eB$gjISpj=dpF=^$sj)cv*k?K$@}B8EYDQ
ze7e4Wx0f4^^ZU=Ea}CO&sz;qb^q196sGQr9#xysLR at a<i={g=-{<3r-CvA?+59d}|
zz{Em6e9aUzpFGSc0zcd4c at 6ZvXJU8dfw3HEkqo;cHGkw`nH(L~vTm}@uO at A4+UL;v
zc<dm?R9)uQD=P1o+7%ZQkCmu3RPTg)aJEE$a=ks79o|$4HCCGY at VHN+iNjvT2QdTV
zT_|;#)Ou=!&i06kMqRQo5UWz-?WKiSKbvdu1|jfg0nwq%sMLMtygPZOCf|4ZL|r0&
z!t{w)pR$)s?J|XPGiW5vyCF&6fK^w?OV6J+Wn|w+B1RvfWO~u_K;>gM^<a>o#$rBy
zoR9fMomyzQklOZghL;%<U%_`}NVdZ=;h9#?TWVL2K?`7bMp)?O_BOL*9D*EuV>iQ|
zpnXC9UI!XD6zi4T9WI?WmeCTOdqyWR753tiwT~}5PcmK8=<({y{=~<R%t&duo|W&8
zX1%nL<G3~l=?siY_o;p2)Y_5kxKn9=s=FPAkhSqGW!?&VmbEb|4#@%z1APYl5W3vO
zH~f*Uj}xvmE^+MBXOaQ)iY{kB8^YUpaZrwGk4vSt+%Y+)Oest7Sg%iHdupJE;9n#4
zR`#iFTUdbt&EuNaWRS8$$n?2yO>e07B?liS;x{PIJEP<Zo+PH9g-#1S7LAL453&H<
zh}uIR;3$^VW)kv&%@~FnE~-W}X27DN;oLoNrsBjW_I;i}Sc@$q)ajSu*AFXUbyBsi
zt43<*M at K*JKRktOi^_*KPWUSYQ*Q!72z8~B6_jBCN~WPFeV{T~^Hx1oh>=YyiHO%=
zT^$h(2oO~94GZX0gX_qm2%i0azVa4znk+b#e+}TZGpr!;G at r4Nf^?T;xb3#VUDUzR
zFdK7!iaO>-#a<A>9Z>hB=NENU5%|}+<%GCz5)<zTsi7MqfOh@@?yFs0>%+?D>u1J_
zh?f(zTrxV%?G*u3pb%240kv5xw>AYVn`I~AO8qtW#IdiE(z1boa(X3y at AsDhBI#}G
z!_1+eCc%TLmZQjRxaWWpwL!NGD2)a}us)!lh at 0E(A*4}U$%Hd}pPTTukwPs>eEW|u
ztLMq%B;YM~wT-*r)_?Fp94RZfJA(P0A-{&*6GA(PDqw?J?17-Mn*5?K`DaDIBzxw=
ztkQ5Y?0Te*f*?`^jQ(?fC$?o!jm}hxMB>CT)$f?eUuMJ$_$wtFSBD)qG!1SAs~(wQ
z!t{scxoH`ZyrMw3L(y8V5bMRbg>_g7N{e}!2-q#kI``^Iez=m7uxS>wSRrt0NX%qO
z3MgfS*oNYxI$CnNn9JFV7uXR at xy;J9u6bqN=v~17;KsyYkW$ote7-A!;zf at 0Iu_b@
z(TEBmHLK15PvZGp#!)>SMR}J+V51s1P`66#J~rR0-f8TIw=llP0FQ;m)B()8Lvd>!
ztp=ay$dxvZa53SY;iKvjfxAM~b7`W at Uv8Mzu!WgfV?0~>-#tHMGSJQuMW!eT{&}Zy
z(Bvny8M4{f61-7=XU<UapX4FPoLG7+bT*Jg0|sOil%borHLgNl+~=PQ^jNiuC*0sB
zi?^kN1DpV2lcxLkUog$XcP*mPcHgaM2MKEts8AOx747-zTTmNMt!N)ttS?@xnJKHb
z4tJDEcHf59oiQ}drK!hkepRsk*L8wgQ;s>`qP;nqQc4GZ`S_x4l2`%0#gyDZmS^a0
zn_qo6xLC=E4IR(i-*mhwOg$|Uv&bPdfyYGHd<u~#EqrKr<$;N*;B%UA&22S|2&~wO
zo4qoZGe)$B$u&8M-`{?Ep(>?Mo6;>k#ZV15iTF6Jb@{BmGg>gyjd|vKt%hfAIxjhr
zy4!sR6J5%Gp;EF!w~>0l{tBB_aGcD3+m;UYoM}gk at EQA_cmGY8i-waZbnl+H7?p3A
z?S_?u1PpUy)3bE<d3K^=7e}l(x&Wp}H~U8na?{e5#5QS6sASrJ{Z$^6J7_;;8DQCU
z!ZD;!J!EJTbkpcs3{1{w@=yGc{LN4721kL0gDd2JLxp%nxt0Pg`{Yjodf{<g9o!6`
zN7ofg8l*WUEQ}7 at -=Zs2TqU(FB#1{hRVx|OMhQf{<pZQDcjkRfzhZLl3I{<(8g%LJ
zpBArcrbOPg)m=A2up at q^$!5su#a(7VB>WL8X*U1=%D{tPxcn7eW-aI*<zuZ$#;};)
z&gNNvLAu4Nf9neXsbs<|>XG$b-;r&^7r;7X^hJWtDV3pUD6xbbEn{{9D}7vFn=--$
zUv0DYdX5>&F52-F at Uhp5i&a=dDX)dR+h(gK at VHE$M0u~C%XWQ;T1~@M2SU@}M)z-a
z`B?XvTaUE>*{bkrpvIdV^dg=WnkA7EB&d*o^=RI_#YHkpEBgTbTMDw#nEv8NE`Dg?
z0#b{A9Xj89PrDKl*T}aEyYOAaBZ^@pE+Gp;&w*f?u0S#8fZM3_a6)p3++fuQtjU7J
zEvwZTt0cu#E7lV<HI;mjjm}o8DO?yT7F9udO+cQvDDMq#tadSKH|tiWkTY4}V32fw
z4v_?oE0Cuv-}ecxYt^^GhjoDf(kw at icQ#)4C#|piv6&;9W=$DBP|iN at gZkHFU^dcv
zAPSH)Yu!T$8y>Fa&hgN8{mhkT^Ur1KMu|1UJtQ76!tH#hhxcq()6dyjG&BJmZTq?s
z=gk;j4Iww#t)LtOQCrpK+EVGXel8t<twN-IehN>I0$f(vMV8VG1GG$kA-Mzq_co*z
zb+w>a-w;E}i}UfMv#EPsryzkrAUYOFGP=qOoFh0@%iB{>l?R`q5_Q1 at B(I0X<0EST
zUqNyL at bboSKLMF!2=V_3Yo!01E$!ZU-vTnh!TisEQnaLibNz`7Fp at Z_0?^`rdMXd#
zC5+H>JiaruGDH at U0X<A9`6&6T;W^EqaaXc(1q&O{@|=z!L^A+=B{W3<XoVkLY~f?a
z at 1@^(GyPW>>UU>m2{h}VJ6Dfr+6$e2g}&NZ>2T%$fwXwL%WF5+W!m<X)VJ{tet10)
z<{gk4BO-|~KM*!<s-8K%Td_ at ll$LfE1MM6XCB+z{#pWUHNbF)}-klJZ$w0CEPBC7G
zlb>6oM>=T}0Th+IdYgT#U_f6)@vFCDuO7c|H`NxXbCBlbb!mm_c_<f!Bobbw@(V8E
zIk4IC=%8j;<RKGdQ0 at A7<*KmdAt}g9BcRAdDE{2Dwxlm1(j0khcl;=SEW+LB8I~dZ
zFIaQAmgp`jy~@90jv;s9N&l^=1Pfr0b@!WW7j$Je_c0_tI87z2RCiBwNA}t$gChsp
z%3WaTXrLkG*7!O}`w<W7xnm`OzKM&9yB^n~M-R8;oqtpNwi at LqbJGY|b)G(XS`9&8
zG;?RkTceR$k=ETK7(Ic1v3!LkTCfcl;FFAb-VhSIL!>OJ#2l%oc9<_`GpA^Ud7gw#
z(OWfi6l`7w<c8F;AkEr845}c}>n50xPkcT9X`Op#Yu*@oq~-l**zB$k7|cyMC&;a#
zi6C`Enr33 at +ViywN2wcn;d1fvysI?s^4|2&_B0c=@HBLex^Uxvol3@;Qm%o>Al_qD
z80={*iv?*WTWY^UMz41eei2?Mp50KsQ^BO?Cl0}qX{afcwjHSj5KRu8ltmVQs_wdW
z_YV0~0May&4vx70!)<+qjyHc$8n=v at Ao`?<?Qz5`qH4oxw_E+(<qxYu9`N?b>L<2^
z-{taHpKclnnbeGbUmc759{*C)2)HX9h&((@5N7cD^gcaEAxI9WA)J)4zKu7wWggAB
zr9dhdLqF%921EFRM!$sdZ!Z?TC#Kzq_xg!qErE;I4fLPnj7AWsZw_uh7b&~B=eg+h
zdpq+dSJ&}sTf*6;pWj=g($~x>a6nq>O~tG>{rg(_VRNy6MKk1_41bwD`F+t+sv_aX
z3njA+YYA2IHgFmZUX=wz-3KaxKCGCOeg4_0Be}@RZt#|w4;<0asr4}R>N7;tD8rZf
z%Qf at O?b at Bx*3tbQUom|w*30zk9TND*0vWLui5PzDQ-Ctoy?{pl>RJ!mM3L)#feoWx
zUOWVAbnT;mWPzA2 at Z&ui-8eXIeYA!C>V)oULvpDvM(I-dYJfI!4ojc_fcrRLTSa{e
z>b%1E!RNj=OVjlt9x0e|b{s8U1%SyE at oef>|3>;ipVx6SD2=~;%R9SHj_npASuH#W
zgH#y3C>w3}^bzNDwQkoy at M6TVx$Xo(#8n+|nh&vm?*}FH%PF1i<9L50ax;QM;U=bK
z1V;*)!5sJs^*c%}7O60bTZ at sJ=N!;!cm5M7^Oxn6DxM6$CUh;o&pWRNm?%H(9+a!H
z9;uZxbMb2_{dyxKD-qs`<mJzL0LuMFArS*&eH)nfEzb62HO~Bo=Z;LrV+)weY-=?@
zG|iTO74GAhOpwF;dyhx^K3XEmk(iiJ!`T51pj`rrsm at L9MPSt65lR4`TeKVLN2@!g
z=SR11_)RQ#e?$G!C1!b?Ean-VTSs{81}~Uau(b!V41 at kNX6WmS(^=;6DGST~Z0q6|
zePMT at a>p6T28^>n`HL_-gTP^_kffX3t9N04==&{YxLcj<aFx0M?S}J6p!pv&{-23%
z;R}`%1m4nGAwzKzeA-xB-F@#)gGVDpBcYw3rufa(DRsqI^Di!o`a9v$6r^?6Vc%R^
zkml?tG2HEjsvB?4p~}7)B)9zPOsx4Lajd&V3z||Zsx*pfLb$s&Y0W|ddRR4m9X<Vj
zG|g%LekCMcYsh^IhI8u3fHlt8W}!8C$#d at s`P5M at epDpNdX)w}?LhHLN&bRKi*#$!
z9mqig$`=imZ#uMqI0}9~r%Kha&wrg_473K0J)O$O!o%&-n-{;#9RVPc;t@%}H8E79
z*Kj#XadZOvjZEG=S=34QZ)cZLcUjwiY~ugAX>$BGH|d){2Jqgs+xAa`;o0pik-|?=
z)UV)=$2~$MPp!53v6XWbKcW~LUW3mMfR_5IioZ?`u}H+VWE!Qw0+Zw?BJp{5w!u$D
zyw1>kbRv><Li5P;ScY=E7yNI8Zj{^Ha#!6~N at K;pEh6-wLpw<!ZH>*GGb!VLr}BXR
zOHfLz^v1hUSB-O>wFULjH6Eyj+vZ?3s=7Dyh*wWp<RKcp?^sMaB+OZcoS}r+0JTQA
zDzT)U$YgDM!$4<nc33|)G}(p}mT%L{t<fZbFArdyW)4?c4`7P0mU1IO;lT3W+Vr^~
zY3!blO{(sHAmBpaj2{XFh0B+Jn%z5nh*@C6-H=^t(}cR?>{B at n?HbI<rjLtUX!(YY
zmg%rO+FBzYs?-)Y=Pwj7noMikrm080=J*z-GnXvlmC=3-jCEHwae5FMFR6lDpS~In
z>P#sv?*l_rI9?3S+QMqAu;%TVY~f`46rXdxs2MF-+g^4#AElGQ!kIgN3%GAmrCJL1
z6rvc@=S0I+u5bNigz%IG4SmrI&`CObLZ8?T=E9v7D?XOH5fMa1${TYR;8z at XnTEk<
z7h+ZiiGvvIWpP$6YNPzPk2*X%#mzocReu!s0-(GbJ-s?5SErdypjYy!B8cr#p{HDS
zygKyYu2+K7LYh1W{s>loOSc@!{7-*Lk+5~A7%^#yTBk_2*slYFSP63Jp+{|xpI1p6
zZLSG`H9Sis5M4c%3dwpWsn?QYs|^KSSY}C<e=zSPVku(K+Sa5lk=IfEaGZf98Cxz6
ziURmEV3 at 7AQI|R|`7F2n;u8!Malq1Q01QC$zc%7>+FNfC;6^OAI~6(he^FFwUShDt
zak)Mhr;Go?I9RSqnEMnI;8LFWafbk$l}F>8qp2#dXSvT)2 at y8|g#V>(01AL5ZZTGD
zQ|zFPH+bX#!ihpjOaR2hu8Xfn&KVs(Q7q4;PAOkhzU>Es66r=u+K*0uF*_U0a+l!m
z>iY95ejuh7iM$f3J60BMe|)}tx*_ER_2<E9_vT3)mw&I7uOmLrUtbiIa}gXb(L-Yp
zHWa`VZw!@tvSQB%-Pd+)zX@#E2H>P!T%BBy1aS>m6DT8FlJQwaHl&jRuC95s02`1V
zD9?i;u$hM9oj$)z4u8Ud5s4_`BYTeneJPDNOajpH=;qMFEG%=9f2^`xDADp(Wg6Sz
zp?g=Eqf1Sedt_3Dk*Gnox3bgfd=)xOG^dC at jJAhET%<Fuk7mx$PV)r<?kXqsl=Se#
zY`D$@T9L~af^}Gu&e!+lWn!?rK<r480PR0TYso3_Kv#`!i{vP#wqT(Vo0W-bD+sGV
zx8IUDDRW?eqJ=eoe?^fNp5jEXoq`Q}ZlyX_Gi5o^BWe+)w%C$Q=i;A&qdDtQ2x2MP
zE}`4X!AW{o3gyY$x1xsfs+6>mQ;TJEFHQ5P*lLCt2RF6gz1@{4M9p_{rVy{wf)vZ~
z;AJL9I*W_`2C4nZ?GMkZzwM%Jdn4)Q0GDK!<JuJFKQSBPf9Y0>y at f)Z>Z$<@eVB64
z2clh7A9ew-H}86HN<K)JIW0*X2PTA!QNOm5I&^Yl!K?L`x0ja!uN+O75-t}075F4K
zy)(T$!hXxy2QA#ZwEvmvDgKEn&`KV*CHSzBoVz+*+Bsu4Aqd4p+-O{%qiD32Sb%DE
zmfOA6 at B_%~f7#W!e8-Q58xh}Gf0&r3n({QsZRc?G>fg`^avMm>Z&f at YL(EIjC0m2)
zx!EpB`<n`-LavgUm>YA82$~O?Gnzi1|2=kF95ia=6q!2ykGzIrQ41zY%HmL)^$Y3A
zT at z8>xsxR2nnALK_+CgJydj2--r(+_E8g-w_`fRNe}i;Or>sLvg^02Qn(P(THUd2Y
zvS(P$@(co at F`IH}mQXludqLiVJDkC*lKO9V+8bbIF%k*vN<^~J1G)x3%a4)TM$RjZ
z+G)&H&3gF_irG!uFFYf~ng~4=9jnv=1klIoB;Ms+b(Y{m6_AB0vc0&{-F)WuyUkBH
zfQw;pe~q`u(lNW_d**VJBh~<m^YvI)fKATZl^+w}_3Gm{nb=G<N)N^_dVeRhNSsN^
z=^h``<An~O(aF8w8);KvEl5&n4xdGnXC)OVZ1?Z+31Q#lqLtTPNM+j;7<r3+A-)r9
zeqEBeE at _IAVjs!J=Fc3lQPcc9n&5Xf``LJof2rvtr_So`Boa=GcDWEQaS3+|Bx5nC
zvk5AY at n}+|y{c^+0vVcVS85G)5Ke+PS)6$)JM}NHPt=U)2g$;RdsECvm#p^?JtF-n
zy%EzGz4{_~XX8ew&pwe?Hb9<#3Zq#UqN<|DWur9ra5KTB>=FBE-?~f?nlzgfx92do
ze}j`FO at 546^{39sx3RoWm6|oyi`7s7^=tSjmrPY<qkQ*Pj{<wbB9QDD&8zvoO84qr
z;{km4Z3GxIo at 7d`IMv*Z at 77CS+Kfv-V0ih&n#FefA2>G`*OrKSK{iBkY43xhNNC3b
zJ29{i9zXqFzdH#|*-d26Zkt-vt|SC>e?f0#LX8t+V46=U-5p`k-te(j3Al8QUyMwT
zWZcwYN`0m^FHy`X_9MX?eIDcnD{Otw_*1V*>%SV}ZdA1x_$O9I2!?$ivhoSe$nN-_
z^EVd2aNu#Yxh!88a<lSnyi8(5>IdE)S$Gn9e{{IzZRo%;FL^XR80)iouK=;#f4hjv
zgMrOgF`vvE<A$NmEyim=H}8nEqFrjX$MJeAfq0zas{YV|)lc4h?%W#_P|B~rucAg?
z+WfOaKVeWt*lvYDo#yDkKlOAVa&b9iQ1 at T=>b8azi%v9g;y{XV!0H86kZ1do{g+u^
zIgaV>a=3dla9RDXAteBM5=F1Sf1|uygF?}xTo3^;HvqsKnWOH~J+Vx)^-r}mEIZZ6
zy?jLc!7`Nn0f#XyAOR;jA$8AI5<yfmJnUB=_*yA>asa*vPwrIw+gG?9H=-+DbMs*?
ztVq20o%t+uu$<ClBkpw>&Zz~G|EbRui07jv at TU0svFZyBwPgn`jFaBBf9_3gf!q>^
zmy_MDA`4n5x*ON>V5cK<0}^oj3`v5gW^#2cD~wRghXR=;#a9X>l?QVZr&pE6-y1f}
z%*S&uO`j9ioiK<^hY+Zhg8e(K|1n44Op^QM{bkv1fCzXUv;KhbQyH<Hrw^IO&XX_L
zR~l<p(KMq^5f;B4_|XjHf9;qL67F;d7sp=*vhjbP@}SRk&{BoWHUtHk-Mx^WC>j#h
znXr(59qe^l=nWv`Zn1t at i==-79x+VK>yr=eF0MUI7nMEJz9B}Temin}3R{2ouPcT!
zJG+&*Px=Pv*5^Kb%iXO~Yxh7V34X7L7}-TRDZcv8wu@)-rE1RCf81`65vJ7;f^XhF
zSSN+$Y)Q#}^5<PypBm_>h`)RE*NNVT|JN%p9JF6hssuM&2&w<xZc at 7o%2Cq03O!v%
zj>#}#Tg}(Ifq at orL<htLp?CfLs-;aB4TT6#iiZHrUYN!-;OKgZFPP at 9*XY%^zhp0h
z%?Rin<%SqxW$4Rbe|tVkI>gpLok)WHj3*^mheGxbrTidUC+Fops?c*nYZCBE+Hw0F
z;1Y+4Y1u(9mtIn9BF5HwZ2`G}xW&eJ<`q4t<XrcCM+Ywe<k?AP@|ki at eS#@XULFy4
zmLZ2UWSkUF)pp{WTnIZvHSL-=*`G1lEJFanv*^eVXx3{sf1P8A at BVSuK_~iw@$Bxf
ze3X`p(p0(*fOU3wvj at YmP|mEw$>Z=zk~4_kKtwBxeJsi at qDhLqtYsRdao^GyC~rJc
z7efrNt1wU$OEjnks`cfd*)f_i(S36AYnwh=#>uG!;+O=p%`W_J>zY~rcpmZ at wn>!O
zR|uc#L5Auue^NyH*gHpVGduRwhDRe{Yc)#eb?0=Pae2{_{*g{O){eVW5*^th1XXfZ
z(?im7yiQ><<znd$fwIXR%!erh1OK;3?o?CxZksi{#IOnrO30w;lP6m+;iB4J?k2$(
z1Z3CY4?)fpfHed;L0H%&FsW5Sx4SG%xJ$&tWR}G9e_flDobyPBm=bv at a>E&rq)8_M
zq@@ZTTSY-Fe=J(lp^jBovE at Ml+LL#E5Emuot+1t&Z1??5*<>Ev-tfwP!;r~SAk}HV
zKh2d4zYa$5zswdxfgX`m9eIJgnq1^hpw|aPfqERC<6i~l{uMP_CPxCpm+G*w9j}#f
z4qUjye~~!@^2UfL<z=2O09BO^08J#R7m<3xf^EAJX4^b+iU-r0*PEfVopcR+QM$zz
z&axg=mg)1YtI&Rc0%Odi_J#OY*$6^)&)Cwv(%I9s<%dC4rPifHPE5+`b%H+uNw1sR
z(ULzMpt#{zh;1Vm9zXnM+tur?J2w56+s<)#f0-y64vb+xUtN(=r=XSb9JIA4V^GZk
z0v|Iu+4L2@%gMLoR)YWd$-C9Au<|R0W!#&0hTU1!C%Ph49&UM1Bhvd8i1+yC*u9{O
ze{#a=zk6^h6E+(mmo)=SbW+Hi{R!!;efSd8C-szeeh1vEv$>Va6%5Yqdpz5%cOyD5
zf5xiWhY3cw>26MLc%h5rztCg;hZg+U4(7SSGs=ErEVzXY7YP%OUbq4F)@GP#R$2<>
zTsl^OCRbuo9z}mbbYbDu6SY^j^O%E5Pe!no!@wo1<S4A@$hUCmm%@s5^-rnY^NQuZ
zojZQpUywT8%|Ga-*@VPT*70vnuV=H4e{Rx%sh at Cg|5Kj-x<I_0K at hFdoReQ}=5^II
zM-%A;e3R6Iu`v7FFQo{`AcgqkM at efNjPjT74Tz=xW7RX%I$N8~GWdgsF)DD{ASF<;
zw6y_b>00HGtcltAUR<@8kuD>pCr^Q!W6>V9xwcncgLtjdc}FjUzYY`MAX6 at qe>DRb
z4yIVKXYj+ItAL*}F`<ll+AZST88JKv_*ktxE-n_Q__z*wvH0V$?Bp<w7&IFjs2z-4
z$G<C>^kHV}AjM?c&HF!S<iw}2K<1p!Nbb0s*6{QJ`fQ;X%&M32@{@<@k1CKHAQj8v
zu0YFZBRELVmz#Fy0XmCNdwYdUe_H at OgaH!-fq^IJS#7vUF;869INLbs37iXIe5)!l
zG`+jqQ$-&kLcV at rKg%Ql$s^IoVcVwqF6)c)q79Hw;@7KM?0*X?T;i|EWdAs&{g?1P
zeSTz?V$~p2&fbHoz8h>@3NX4!m`0o$%iGVg%$6HcI6SeXG>^FMGtpgUf8ufwojjW2
z(`7QavBGO9gx2zt3U?tO9T?hBd5n?3-5|w*B>f|&rIAKG6L&-9QAZ6iN~GXIv){K2
z3qlFMqC07z`^5DJtJfA$T0*ZSfb)D61Lb+ilj}Z{By~RNmU}42GM2 at LZ<N*5%yvB-
zhx5IupX;!6PpzUY?S{7nf9Jf((A$sFcnV|XjA!_}HU^f_*Ri30GXK*Cq8Xy=Y-ZCC
z)VO<YUVNt*T{Q9tJTuxw`+&I(^}-Mmq}%uX<^Yd>E8ZYpDIPMPB<d!GAF|n;qs!yi
zLejJyj9jG5t*C)QzU*|B)PMg;zwN|Y{=8Nx+h#vf=En!dfPUh%f5B<cKzq^LA!cYA
z=Jx(_G17Ha0!W})%F8C&^n7tDzbptLFHw`<)U#LH5#JyZUvlztzSb7+Q-Tsb?|@11
zB<mC-l#s8CIH{<~JrGbA&KI1ez$?8G(342!J6KX$=6ChzSLJ#mCEcsBTt~Q0vyRoQ
zSnnbiZef`%cq9E1e=)S)8f-Z*6Tf8oK&{F)3q0=wt at 8+N)jkJxb_qvlfMrekoSivj
zsisFmiv6`S2;Zk)1HndIO|hDqpak2D#>w}@U5v1_r8lVn2Pvf?It at H>uX-TvHTcKj
zLJ5(nab4H%`*Nwk<s>PTAgVZOfe`<J6v<5|d{fRIIFp+_f8Xkr<hp~Gu@{i$xaHe0
z+*=U$BI9X2!%N$Kxbb=(sL^3d>;B~`E{J{KbB at _rz>EPWKnUpugW at 694eElBqwPwJ
zC;4axdu5-qCjtd!jaqydjX1R<@pmw9r{ZvDEq_}KlVg>qgE~2c(bSok-40E<v(DCj
zJ8n(J)6DC;e>b7tLbbSz)E+_hr++=qFbQeeb0389(Qm>C7}*jB4%D<Wt?SRnH(C#!
zA?kC=MDRiB?0*@7EB^dj$8>5qAO&dTR4Y#}Iz^3iBc&=(%6Zkv;yo?)oRrm^Y$<%_
zK;EB;Jny%K0Y*>Du`a$LwTFz<7<2k#rX_ds2d<shf1^}F`b at WYiT@X&?;Km#TppdQ
zP9H{YhsWibsmAXDM1*>uaZ6GT&i3!<^tINerj>p#FJpO3Uv9Co7>?;xnIw~LFo(`D
zT<WfLJVnaeN>Lf^0M1iX*E;}sj{VFDWyiVH3@{T9`v&kIe$+}?A4JM+Mg+;V%do)T
z+=q5af8jaOmCPi#ZoA1BuXn<<XVZZRsqsMt3`+d6Lr>mtJ_*dfrS-Wo)dBAgmoVd<
z1N^_JKE-FEL4WJ7u;#KdzhKxPq1bCzt64=8bXk3Ub{q;dr$p7BB(HY*C1Sau3f2>6
zVx2f(n7c?TjKz#VQnS_oUPb<l3ZO^Ja(&NLf1Qi1;4wJ`q|!N!1B&`UX7J^vfPLlV
z%97H=&TprcE4{2hnD_PbxLe%Rvdem`hX3Yb>|}k;0*wjmn_YE=mA$=6M%?#4S1mW=
zQ>e?w=HQVNk)kF_jq|7%?M~sWEq=wfwFs~OO-Xn4Qfc12^EE8q?%K{i)G6|A+2&}P
ze|F%Kh_;#X{7N4?DQ-v7fetj`m9+}YtdOq9uQ%@~-%TQyJ8y4&#2pUp0?t=;rL1}G
zfL>A()F-VnOJ%Tzrb5r`M+zllYL1yYf`78LOoLnj?umQ50E~QRWS@#>A#&PKI^9uu
ze(_t!Z}Wf5m|P4w=7TJ8;cy)^1CYD6f5``&bm_=H&<{qZ-OAwD9Mgz>lKL2fWpI&-
zDJf%emsvGBJu>`;(;akl_A3+}De?=q9B7HzhKam0i{;xibf6TyQh-`si>r2q8^N1Y
zcJk=A-qKt}3sFm(&hQk$v5L;gma78M4Y~m80ML%PPeXylagr9a-E8yBXE9o!fAjgR
z&DvyA2~^MK at P|4Y6C+9n4)J~9rY at c-)f??lV-F3XjE$$oZ$vQ^+5w?(bYcUiafRy6
zV}s*~O%gP4G3x6<T_xA3aFBA2%*C+YbkoKXoYCN?x*H1a*ykR~TLw(Ol?zN)L4YS-
zJ#s~Pa3zgEKx3kERmfRxRPSAmf3PSU(VEbJ0q9B1oMW?(?`zu&(oGCZ#oge-5;<4}
zK_}9*Rh8jd`aZ-#<*WK|m)o4<Vx at cb%;}LpA8ex<G8jgD=u~5D*L#Os`J$CUdtNHa
zYW1n>DTXG9k0x;s0vN!;{*qGe^(TXOP^dblc!2gC_StrpgO?rt&4 at I|f3*~5Yd3D(
zjo$kG&y1poT>u at P-U6x-O1*~#xyxMLl;%I|XerGfT`<WoA6ZwIG*UkvgxwQHV8dPv
z9nMH%Nj-#UMb*e(h_+9tQtrmBm9O|g9^4k#FFXu~S+v(7$3q^Y-;SZuTIHLwR4fUm
zPYwUMpb=g(?Slc at EPL%Tf1$pRNIDCN;g5$d;OO#l(hz+&A*bsQjldRMjUCc#=O(P)
z{6G1M*I(=H;5C)PmEHsxo|Pl1(vs}#-<EVG^ap+*Z7{MIbE!YkvwanrwucS-`BZv%
z|B3qrhD+~=ZcC|mvf8w=uyLDZp^_V}EA)?{OL at s&>9YtLr>RTce`0m)gcGzwAQQoH
z?{srR+p@$Ig3|PHb9cqnDl6JXwAcLid#rUAQ82g)?Y^oicU|VUn5>yqq^=ZVEZ>gV
zZKOwRwa?4z)-)`y=$ljf<0UNc6-lpo;Zv{=Q=bQUF=84&9(LaT0b56nS8C10gN+n`
z74XJQ0gyRmIRa^ye+^u#r1@{#-UxCsTk at U){d|SQ`fwv`{Oq^-7>*fJM}9v|O`QIQ
zp{`lV(WeoH!k6ih7~KHBaMiTpQc{++W_l)M)nU-*c8?jSmYfiX6|=jye5a^$V|@eI
zMLwbDSQl|jNutd&nh;@JlbW(Hv)-gjf3Nh%(@dMB#hKVuf9;gG%S1MBrg<nH-q9{c
zEZq%8P<6HQ(rD{U!Z%l&w0%F;^ZhG}IzNW=yyt_bMxE~UVa7MsdE<ZN$}xZ#TyT)@
zAJ}=zUYGL+g|?zb+;(#D_?DC|H~A0>NEFw~-^Wd_43qrEe6#$wgd3z#WjC5F8L at -c
z<P90mNW_)ue+;gs^Ua^3n_H)S97}4#R5gPypa at Z)IMaoFT%$a0E&_Y#&NQfMWzHwo
z$jkHhTBKjm=`M8>EjJ?wv7qNKq-lR#wmVg=7dFxl2n=7^!X`Px*YnK(U=vJ9uS-WH
z!v at r66H^tQ2tl6Wf#*afP~9%&Y0u{vKrzucx3-zte^F%*PYK+C^=YdDlPl!~;L|`(
zRT)h6yhR4!E);b-?-*v&^8<k7aJ9m}sh9<#obL~?Xq#a|?^{#2)cY&CNh~*D&}ejj
zjJ4Az`8CRJTX{~;sg<iQ{vR|NTmASQQXYH+eEhu-|EViLv8vOaINXQShdeNdJe3{n
zMZYpif73IrnZtWb4#FKb9|U*&>Ujzq-Ezp-h?YKbt6as^?bB4efk&_xb06$bj~@Mh
zpe${0o?}0ez+##TFi at g}IhKC`As)gbWf_>L08;#wYAI(YAFnYFe<2!e1sT>`wuQpQ
z_N6yj9N1;0Y0%c~H<Si7r`i`- at vb}koJ1pxe~<8Z9ib#@O_6k!iZ`H}6ez($-gCk1
z*C~EvMQqd_!+#mC$q at 09{=ygtM3w`Teh2_<8k~?oeeLUQSHd#)t1WdPzuX&shk;<c
zFjYDF=+We<>)fdt4_=+{+o^-XGpqlB{Ximt%OO1v<>S>>{X%|%;OFcayq{8La*dE>
ze}&jpdCLJBnz6BD2LqCkw+K-+cEs26l#dazCy*cnO!NR6b|==#=XY2v?#er!pjM}E
zn=hT<xJU7#qpE);k`0R^XR9yH*#0TAJN(ow_<<oCw<^MxEJz4&{Y9qmEbn)Xbb|8N
zQMpRi8#h9uqU$bYrXT2Bvhv*=8stq^e|M<uU>(Qc8#r|6F*nZ-ZzNNxTh$~i`u%t@
z{U5A)4-CZ?3&3Ja)kujAB4$ny<ynF32E9}aAIR%paegF;_y at Sf=Z|j2*7@(%QxC9r
zcj9(13P>c}H*Kl^Nhl9vh69&DLON1?ivexbM1Sk0rs$0g(+YAaJQhzE3%tV*e^aNW
zwKyqcH`PY&NNBHul*7zBJ{(VweF-<F9XSXsz2yKny`O2aNEupePDcb_&%2W09FQPG
zYe9s4MTec>kvPVdui>tbBXXocCU7SdKY=qpm>7fVw|Z$XYZP2iLvp8`vi5p#b^6b_
z9VRb3;qV&y8075yWlnQR at gOFzfAgwiyTWr@oFtBDs`TgZ^igi0_30qztSKSll}(%#
z`=r_6*|cTFXFZF*(cT63>Dlf5$qGS2u?jze@@t{Qv1l=g4a`V6Kc#?8z`rkqLkzJ^
zvCjxdSa@`*6+fwdJH|;FE#oP2x=q?e at wd3LaC|52ODCp!Ws3R7Bc5jaf9?I%eycIf
zA)aSW*#!c at OFkwmG{4vh+UxY at a~K=k6iA!6xF5NV*@_IeL=7e#&4#c%^C02=Y90MM
zPjF~p%Pwpd^7&8jq%NvMMut&*cf;^4hBRH<C2?R*Nd=cDl;=%28(Vc#pTM5<;;h at c
z%L|i7;|{s6RzJ`Y7EsX>e~mMXlssP89>C0{I+HI0XA+G8pqIp}y`t;F!m9f_PE3R$
zOKi1A?4=*|M<WO%N86G?IO;n5=Lc1A?Y6D>x0Lt^SEWm{NVF(1SZZ~<{Xlwc7dGmk
zrn8IJGT_1Ph~Y9YY+I%KwFV1MK~w-J0Ts0Gs8x9J`cy~7QNfy#e{hj47^rMtpni1c
z8h7{;q4W+CFfr5-Z#9HOke1(DrRC8eh~C*{rQ(F7AqIO-UtEb^86!r=`;gLk>Lseo
z#*L9!fo=4AaYV7SIpJ{WLfh!BSv6~AZvX+n;LKf6tx1~=*V386L3G9D*UK!cttil=
zijp!5kb8Y at 3X0QNf9g!E7ES12Rmmcepmn=(L|~1UazT~IDgA|0;BLGqQqze7d!VGR
zuSttYWSXN!c5imJxesV8cT1(`CRUu^^6Y0u{>7D{?<mQ>L-NHNnR#qi$&<P>A>%{L
zBRrl<jEz#Jaod^}2S4j!I!~}%{Z8zVMz~ho+WU&078hR$e_+2UEuq3vz at L|q&q9wj
zQ2AJ1EJLSaW^MxsPB~x1$UIP0I%Mxg8Hzkdi?td9FU}TL#x4?@2YEh<{&kv%&USJ1
zTp>xvQtuHKi8g8GoD*-5E_^hJH`S{@U7F^uw&1gQzV`_LR;pkiorSHpkeLgWE{ge#
z(z34Nqw6_ge}|Y;1S)6QvWzO6PR58hMq|1m+LYh)DxhcJOF{XlF;uO+6*#p+Tm)am
zyJX~`5Jx`x3JLrkXyhh*pJqC4dBv~aa8c&s<YwA+%0|cITue^y=;a%Om=>)j`0G-@
z+jFYTm6y#O#|qbF2?0<1r0FfB`0F=7c7`#xV}c0tf0~!`1+^<TWU(zEc|htv1PL?T
zL{pECVN&Gp&E=6ZOI_OrDBII;d at VpsOqL*EvEYQcS^RnlB-Li_R4U<xH5J7GQyDDG
zW{X~$ocK at hIAK+Wdh9@}0k3wMry*_ZC-7KX_A&tE%}<`&3<bbBhS$hEzt+;YYSE-k
zjl<E`f9WzQwp~GrFjdS(&n-}didyt(*nc#Wwki!ik<}s9)2J#8(9Oz+b>@XjOgG&6
z9KL+y9TbzZ$~Kaz71{n`D%QSyjbWGb%USY|pqD%+x_LTx?%Bp%GSH3KjQF6a>EROJ
zeh9l_FD)^9RzGEl%T8E>1dRChavKTI))Lfce{AICoe@&JIQJC6nrZ8l&%oBI<-^;u
zX|k_%Z<VD^XTEJ0vI#**+Fl+<woD#AClD}8pZ5Soq$`76^Hk%_R-BC<Hg_rb!9AZ0
z)0sCMyC)G3x`uu)G`xOcTdqXdb(a}(KDP|N?JEELS70^=)URWBRlaEM;RQ2(QOiz7
ze|c-t%Q?r*hs?0`TS(4ju=JWB+ix%{jbswef at yu<y&=o0=hIa?d^%TaebhY_(D)vF
zHy0(lty?Ix*t^Mr;p|M~+N2UVl}>cHyM=RBc0~Qdo|(4RTClslW`%)ho?CWOl^?nE
zQv55z;o<C^SZyKZ7ycB5XUW(Zwz?$Xe*(m9{hLnlQh9?BehVes!{Nj!Gp~knoJy^f
zNddrY1slP<4>U~ozE_9l6ofDpiRDu at qPd&NZgy<UGnlJ2yR at 2IRaOiAW3T1R)t6n{
z$9_i%jW19t=ZSb);thr%V{xk`N~H-r659>e4U~nkR8xS$vmyjMJsU~?$9`8le at 8!D
ztt9As<J11i#ShL+cUyg4x^_KRkx*HUBMx4QDA7TWj1LQT)kjrJZRwoT{AaZ|u#Mno
zqta(!^CEa1Wfv;i>AR3Vh<w`J$rXD%c9;abGAOqb!2BDifvmGD*2lntg@`%8yEXD$
zz61az=w}czw%-5=tW((~+B`OPe>!u-4NMl-H~4jQg;|=-w1t3>Ab0^tDF%y>djlh8
zrQOPXo#IMY_RS8-0C+~lm3Wm{rN<+rthOdj1XgkK<@2?zI4F&gQiPVorMm=4BTQf%
zm2$b+KCLFjLIos})QI(s_$!(LE0sneS4X$<km93#G~aNn2R8h(S<hG9e{uOr&eJdE
z1uAA%<hC3P@@;%;HXBGE>zwN_fu-(jdlt~Rl at WIUz{lE1F5vMv at S%bJj*>3B`Uj<G
zh31_N=-7)+pGN*BI}mXZmgrGipGtZt<K9NKJGk0i`8AMDtw-4*C@<UyDfqmK`2a?K
z&O-R(e*eTQy?SNe=khMAe+fc6=j4C(z#O2ZWbi5X{I;5zqn=6`%a#^<lr0!Lc`PS@
zzy4ks$7L#hoG}lUYjWvX_g|tb8UtUjgnT*^l~BPT7H6W0Vp~#MlO7pY=-ualyC;Xf
zxNf=K$x8%0bub!GE_#QV#|=Qo=O|RSi7LZG4XKxOIbq8f^BAyNe*=S+p4O5 at E^TPW
zHQx_;Fx%z0cci&7GOK_2up`%2kT&~);02c9KBJ^FGj!8BYhsu>(B)aFHM%tMooKP$
z6Z?5!a8U1kv8b$E>tbCt+9H at LESAJr$8T^@B*1;Xt^6`J`c4>(`qI;7E6>${alVnx
zOAsQ%-E&gV1;#Ghe<hq3 at t*{dD!Ge{Cd+<Lj<-hNxd3|0H;5D`h%!D^oIs2{@nc1D
zJ%lhCB?iZ-C(l@$F_{<8e^5ERAq6qmX4A)!x=adY&`_C+^T%K=f9ByM6|htkcC)CI
z5B%D1eg|Dwz4Y*9s}1Mz^QNq%SAI~MtSBwm(0e}pzJtn)e<pk!R#dGbEj+iy0HDQ?
zedb^FW@|t!l(o-fMtD-DbcJnsiukjjcP>PhC+g$CBp>7OSYkyBu)1)yl)j*9Khh6m
znfCpB3}!q=rcZVMj>Q5G?kS>>xn}VPL<NAZxXp>HHGmE8<<iZ!x!=%DyXvC^uD<~b
z0(t5{_BpkRe at FfenM0O&&`qVM;zr93$<1C%ih5d)dMqJO^GViVyL#KnrWNDDfkgt@
z-U>N0EF~$jk7aq<5~PZ0FAj4sYkn=aK(xh=(o}&%_$%2u#p^wRNZ$gm>UezJS4qY%
z{VwJtNd1rN;L}!L9yShxU~nTuG7SGyYNmUKe^TmWf7^P8gFVQc9Q54mD1Lwp-2Ne?
zAyDJnz4*R{bSBD{O8bb`Es-D>B~6#p$CcxM2IR*!kjG~jk|UC at Iyb{+ at r1FcM?q{Z
zFL$uf@}(-M*lq(X3kiCmD7y=`cM~yztmgQkSo~3n1p<FcwT|=R7(|qFSnS&EfJW~A
z`k$0Je{@2NFYMaiU~-cyVT7)ztj8aMyLbI$tPKXcCgbq|`Uz(D@<X~`1(Pe>8MO<u
z+LM(#_>2M|4w|&r=ZDBQktLiDWH%0B0Asoll$23utr*el+-*?nK$N%>i#-xGgzYkY
z$Wh7gD>z<QhfyniWg+TIIPrf9L4#7=%Vm^pe{~wX0>M^rwI&?ao{Tk2h?vVkfH5nj
zCJ<v<>_Y0mKOW|~qy2SaD~7)$>y)Sv{2yLYv3r;NW=+92Tgx9mZigLsy-jFCCwRvO
zLlKS&im4I))iyo4r<$eYKd#P*m`WRoLTp@!(5^t0o(C!90jT_17%as#l?{d0HfIR6
zf2blhp54E`+fONhsR#P94#qr6RD;xRWKGWNPWEpw_vLSBgStH$yN|_dl*rh#pmgD&
zk*b5Dz(;m%*7n|YQ+-Y~)`r-Z&usf*8L?FVvb_=|f^!xuU$Bop^smAt%t+F{aD(Oz
zk?<Q>tqd=K<UMK!JVo-Kxjg<VS1h$7f1QPdhAb<vbix0De*R at S!3f9tB^zB{jhXxW
z2*Q)m^!mH&0%x(9tCb~d&*;RaV2JqE*)bZ;%Q$o@)gBMX-t4o2AOFqlA&A3-zx(!e
zr!g-jTf{NnTAF&Qzos&1aD+{JJRfANLV)Iz&oBc$I`@a%)cDQsrF85xbB>Ndf9}lu
z0iDY!@CRuuaAFHh{-T~uxC^8Yqnq7rm!G~4&BG`NLI#^v=C#?O(`pz2dQ6KPQ_|C&
z+MiuW^PmDpQ0EA^4Yxtj1rG;Oi_3+(1c$j*0T}Z|I#K%)6yW!$$!#Vn`ESgdqW?D+
zz97j;HYhQ;6m`XvR-Ogw(nMDmf5&H1feh{~eNc1UK(<GnjM2RjZGxf+^L`6g=v@}G
zjUx^T3WZ1h_a&vzkFky0D{Am8O{{pBGF%*Y{neuv^R2HYf at q&eXON)naP_~@Pu?jy
zv!IKMz-`qK`LHGZq2l7wSUKE3Zf=~XZ72dzHF?GRG9UOCNoUkG=g^Vuf4huoGq)uz
zG7ha8zGQYnH%&f7j3wxAG~3LWva7LU(#-^?vDYZChkoE*GzPu$MvdpxWZbJ9eo|$Y
zVW*zzOt8mE17(U}(3G6?Kj^wU*XFa|Zz4w7Gkv~dsFM7-wh=zutBys}m%Ba{qw;=;
z>UR)yPbH<=TpS+2QU6Msf7H&Po7+Ww6)d=Z2Ejg}a?HQj!SPSiGv&N**fTpg7G58V
zHqo89zajiC3t&A1Kn(}tC+CX`dbG_F9&2XSEr9WkQNVp=5#fC<g-_gY3E+7(CO$%D
zEMKL8avl0wY$OTX9SGw(!7ZV77=1P%+HcyTS#Dmkz=2u-7!#hXe?x$T=AXFoz^#bx
zM&|o6*nibe5X_vBx3KZ*et&C9FG6Z(bryk>QAUiY<@K0f&C8X*dEkZ1iLYbw%J6t@
zR{A`S^~tumNiVm0QEn+i!+RR@<m%&mvtJ54fCr3s{)KkXlddz-We>;ncE$y$L^I^e
z$hg1`{rqtEmSt3<e<3{U&oFQBwiVoLk;*tfuv<z~F~I{4-<ZKpYnD(l7206dj&#=U
z074hEViH|<ey)p)35Hh2%EJ`zUU~QhR607eY?NN7f~0Sbzi>6}drSjqweD3Mj+_2>
z0SvFAEI`78NS{1>G49b6TX3gvsr=uPr0~`yDAsTo#}R-qe*ikGQTxN}w9ej=4r#%O
zjB at XU3m^UTN!Y at IM`TAb;1yi=)!p&}nUXWC{0ZIk0Y61$4={B3;>OJhGHj`pEVHiD
z&pdWMcb&Q>mzlX%x*klbH&P|3&YfC>cyr}wKL7e1VAVuNa`0D at Vvd2fx0zIi4Kd37
z8cy|HUomrLe?^RE$(Tr^+eyzv)zU1p7w+Nk>2#=aK$L*$@-5<^a~@F(cM6Q`IqXHR
zfc_IJOarCqqds(xL at g9?JdxK^=i_wK at Ua$c)3IGcLZ-KeE!)gokZi#8AFHP@&_Yne
zlVc$Or(t{!-HxgRpT19C{l87G13U_22_SmbPa!6Xe>GhKpT)Lk{o_LECq}|op%`T7
z!F)GY0&v)ws{1MEv^exLb6r3)^Nargz-Qinwg at TQy|^(0CSe;As9uQZ><uH`NZqK*
z9<FJ(-*mqRZG>hQCl6mam_`)c0Rv_yb;(lXLnBtnx%%5#xasw at Pd@t>#td1oU2<Eu
z{JF;Of6wQeL9kX at rnVB-pIFMLimbOY8Bi4J+1HvrG;uq^_XKFU%8#*tgnwf`S);-6
zm4D~bQ>T5_EM#gVl!Hr{n_iE?4He7WjUFJ={(MdBdz1k&(B@=IBW*#&GWGbsH?p0n
z0?G?47Ut`uzO{V?y=<O%jd at EZ;x*ST>-1Z?e+n<ijkPLuz9UCmC0bF#O3fUJ?>?}Y
zLViT&lhk5b7-yOF)1sU_dG8}&U4MI3WH-r2cDXYDsj`gFFVEK0U#W at PsI<8;>cGZg
zZL;y_W>1?ELLu&RAkxe7#k?1m>Bj^&@dhZy<#onHvXKopaOBq at L#jrq^UaJ-_<C&M
ze*g$(>R$5|&<t6$8JHkV$f6$tDqW}YwNj~zDI8*jCVj9Ehv#i0-ir(Bdm!Z~O&b_X
z31Lws>C*=1OjyC7SFaghNX3>@dpBsFBMB91Gk;b_5@;)a at SCKvePIkvzURwgJuFE?
zwBpP+fw);Tf~7$G+7G4>sEv3MtKVUpe<3bZ_mD_+5S^_f at 9x1JwcK7<yE at 5gsh#Yw
ze(1FspF|>`cn{7QnNmcTa&_FZFYT12r7DsSbb#fueW?VmR6$)f0AipSeLEriBD9DK
zflWuS30`3r7$7fYP-JJ^Vo3IN>dofEN>D0>a&QPInd8Sz3U(-~w->3Q|4!b)e=Jri
z{MV3btb7$5Lb~X4isz9- at gmHncj_G*G-*G|THo)CF*$Xwkt7wRWibQvhVc1>MAtsN
z4J?-Wh`Qk9bi@#vz)t&`S1vxgm>J2*oGYP0&(MHNH8d*q#^qN9&Q at A!w57!onX^-M
zDmH!u8&mHQ+a69D(=P_7^h3CBf1K?~d?}l%H^<z)1}MYhYwwtwX3)W0f$<@WwK%FQ
z8V8itZ1Sxlj3{pNdUAr59;4Ry1ai5 at DOdnS%MAO$l|4SZ($BrjzPAw_f|+NT_Aq3T
z<i2`hX&bu4#_#%(`+7GN)fuwYkvWpgwE}si0 at i~>1I<EkLQJcW#36D-e?#PcCQlIy
z%?5w-NX`J?BZa>_OjTHUl0Z3iKa3~WckRb<8zE!qDD||U^?$^Q1n#b3P03q6d|1|{
z)wG8mH%OpuT23vlOe74zblc3H@{wLWC6H_cU)V$zuMX(sW`z+#Pli4TG6V{KH~HKN
zN6UT>vR9u+xu4y0ET9NMe;7vm^9nMji#KL4xhc5@$i^F;EeDV76qRr?ZQ~({KMr7V
zp|mR64Fy;F_E<d*-?}<KpDH(ncbU~3jA^8Cr>%;0=?AC85_KZH%I3--%Fjkvu0U?w
z1NCW^I5jrk{r^g}e!x+m={`vIr}zit?wIxod1p(c*22BaxQha6f1*cByNO)ElRb at x
z+FHFFW```^pW;}q&%1)(35ZH;|LRcR1koDH&_utB9vA4jzB~LvGChhv1a!$!q?no1
zv9q(`RO?lHFAOus8zOJcDQfUrEC(h*M^Df{7;4cJOl_q|RM~X#l(x3G5}&_}l5^14
z-Fkv%ld5Jhgh-w;e*^<=Pg9~1qk&nH-<V-KXQ`~6+!Qp6Z<f8jg>v5z$)LtfAHC)!
zC>J1uBd0FPT;Sd6OFQ%e*48TY)bq2$X>O)dy5^*^rE(Y!_NdHHB9!m`qkDw4>DHAU
zutiZ@(I}MvEwsc^PVey at cZQv?z75yh=7m!c#Qg33v!e+2e><z~UO%IU?|vfEOY~iF
z at lFzpV|ZWq%M>t<`B at m-xKm0GCIVGZof7sIB>1gmygl*I1}|l+-vmz8FYp09!3ZvW
zSdd~!yBc)f3mrEBeV~;)zQ576uH6x%)GsBfWwDrgk3x!0t@}Y&O$D7{uw0W%5|!aX
zNdZjO!M^!Qe>}+pgZ4P8^a0=cmJ7~g3}`6{#ejS+4^3xGmFV*;$R+NW^2!4u*Ucn6
zD(C*dO|Ixo1p|yE6*(<Q^2oyA<ITYsEr-33?6HF!nP$R8$m;XnFTnVk%%!DNt8m5Q
zHhqioU`Y+<g{yqE0>^|(wylT&x;CPh{^U_qwu&G+e`o(liHOU35WFw8*Qj*-!AP{f
z=*>u1G({_6s2O^tu)3b(OTP8L|7~n&um#E-J%V6ecB2Qy#Y}gMhpBpD=C1QraHs3D
z?er_o0QgHTA^|urh|64Ahk`;b;I|gW=q<s01?y;~9%|i*Xx?xgh^SKcUNkH7oUg3z
zoZk;De{W3YTCE;4#Fi=hqoU(i8nd at Q&J(f&q7F^Nt`zW#cv4rRSX+Wi-MVSfEh(bF
z_aIB&zgNhyl at -K+Rt7;JZ>*R(QTi|@%b|M+j9`Fp-IV5Uu^LAj6F%NROT~Dx{|nEj
z`}{QDBY_MPMm8)hde-TScmedqpUM;sq=7$pe=sF67n-26VJTXrIl@@vI|C0YFz`U~
z7{8yg<bA!zx>ZcpuX at u82tlXs{AkL}{3h%co?u~!g0H~b^Ry&*@oBHz#`3ZsMaL33
z63<2t`Z1yO-PFNj1BoXIb at mk{Hn=e}u$WK{TA}>_+ET9(<FCN?PN-E#C=QsVgH1l-
ze_C0~iwUoOD0z}@#ZLJ#h43ariSrZm=p-^moR#a#Lqxl9S4g0zzF9_MJnWCIO5nw-
zsk4O98o?z-)HnTV9IG at F9y$KCj<1qgxYxER3{T3flAw1{2k3dKYagkyX+CL2;ks8b
z0#qGOjr=N0srLFaOvg8=Q!qWKALt4^f7C?RrBPh|kVKavMhnIXL^U%S=<v#!wk6OR
z&<eN8H!Kc at 2GrDn;j?;JYTn&w!8+6U&xg-vo%8UjFPrCV$TK2aoFP4PJ3W?!1<!5X
z<Q7uR!bJg$!&uvMmy}v;X-xK3E}l(xNNG4E4XB>Lwf$APoJYds*O`A(_l4Q=e~e|W
zs23^>7r$xqMmE^0JdOsV#`CF{TvDVY6ZRa83><eWVDY>7X``ihYd*t*{~TYQHg%#|
z#o8f+ZqO4LN<?m5zDoOB06B*|ToQR_R=>Ns$lj!LqaSP6iMferOt9L=Trg39M{C}@
z_>XXqd_d5dCse+e&X6HJ6<AULf9CXV8Y();9iE<>C{wfcUd|!vJ66OUFYs?mL_V}0
z7q8n3*(w(NChA>OG%)u4YAfeXBctHa-a#_PcZPCfD_rg-6g3f)elc7?=vhsUC;Osw
zyNzM*3z~?4p6yr83xZ{kog?ch1+Vh1tFoFw^AikwJMkCOO>Q;%5YiYjf2CTS+yAit
zctLY<Nf+iNE=q_ at BNXM!U~2$6H7}8o0XtoScK=i8Hg}0Ia8f4w<B2cSc|R-iNgL`n
zKJZZaXhuf^J2Su$P6Qd<zGF%}<<A}lVFuPwBI*rG;OPsA_nM!eJOg~ln*o42g(SP=
zuM4jHaE#npLI{izwWn4!e-r at 84A!b`dp<pB=fM1w5d^+I-eu4Pyc3dqI#I|du(caq
z-ks+y&bZ7YAB2{Fq84`o03s<_CeSr94+YjId1bQt2{PtY9-(akuLB0udSLZML@`LP
z{>p))P-pw}?=?&>kVu%Pm7K|&WY!Ux4HO14ir-lTJXcVe7rqC$fBt#f>I*5{0}@{9
zXyrfqhe)NClZ-zdSdtiTEJ7)uZOov;1<)Q6L9pqsK!0+hk7yOcAW!gLHo;Anl;#BP
zQg0XElMS04#-!+4?gPZ586d|E0Yo!hv2EGDz;-uD70|eS7Qrxdo`1(lMxC88GS4Vq
z_PkK8+sNx4*kJ_qe_XrJFyFtx9llEalD7QQ?SopvbxjwBH(`dpG1DrtGl4Nn>5ZU)
zWzov`Wz91e>po;^Yo|EpBS0-w7p|`QP(n_4Txz$kVgME;Ty>V7aX-qv&(!wR1kWA2
zo6Y<kNYTqkBW~fpSNI`1jwk_zmw1?7t9zx!y(O7P`?LAHe{$;fbnBWYD<2Lppqs-c
zs)}-q7TA>?5u54%uDiD0NYj&1jP7i6m66{<X3ZZ at JjuYwo9DWh?g-$Oy;x89KWsDx
zhKC!=*y8{s9W{U`^s-AtT8TV38QldZH3KbKv<!4Rse0))@8`A+0f#sqyL at 4PvmEq^
z?di6ibrYWFe?iily{O*=XNI%k4CK>TVCiSePr}BjbFICjQ;$#P45EgliB}Qv?u>eI
z7rV8uCO$4~uyKghV0-dNjT7>ZiL+Ohg?KoTUXq&E&DPa{1G at t{V<)-d{ARt5kF7xs
zk)Y@@11;JyXe<?&Z6MjEPIO;KaN3TnMQAO6G-%z;f4il3BJzw)t?61+Z>-!HwO=xk
zp*V$KWYM_uMHqW<Va3}uNu>07atInPs{6KFlMGO}S{wjkFb50eJ+4K?UO%@)=AiKM
zv+R2~j5ECg%Ax@#jUaaDt1W7w?@gk?=b9`kJv(9fM0`eh%zN1NTd62Iv3JT_We2B6
zeT0sWfAxqI>s*rDsHAJ0f#4GSj?Y2ytsc#74!A=#bj*m at N+>a!DVY5j1*C at 6M}yMK
zCJ^t>nEqeQjjO52VMG@|nI&Igg7F&?rV8E5`KNKBky{Zi7Jm5a=JRF}Kf77Oi at yFv
zMK07*8?vSwzP0D$OP_Dy78UCI<uEv%tQM*(e=plBsr~D3bc$$$OTXYglp0#G>32YJ
zv&(270owJVt3Aq9JTKm33s827fC!8s`{$ZlQ*@5Yind(Uac~}Qk at tB90>rC6XANLZ
zZhyB&CaMhh at M)EsVW?({N9618&vNo`rT1(O^0618p*B7G)X+N4Laa9x)W+N4L-zrO
zfAQ~1eA7Ijt3X;F8OuDB%=*9Kh@}JL?vFU^=^|$KM&X at Y=v!W~Vs^~45G5ZrGCs&S
z)qbQk&&WIdVR+nM;OE#luu{@drF~}#Kh#gIzEFq-#3nnRMG=Ve>Uay5NehJBsHly>
zQxQ{^KN9C<p8Pf|=I&QXy{TH=j>4tSe_=BN5FsJZ3l|e{+B7`x<t_G)J*F2Q at TE^!
zeK*JNJwY7`>~-Nz27F#G``d+IH{<tc+L_12Ko&r=0jv#2EsqSK;(8^#N1^I7y885<
z#mG`Kgifl>l_%flYjqixfB_VXs%s|$`gV0e&<Px5TTvmEv0Te8zYh^hv$-!ne}#zm
z3Uaav1|X?K)49+7>Z<G+_RO<;&`%}$d+oX^I|<|>%xQuRv}ILIA!>T}1Ul}`A#2|d
zY&KT_?m#0pa5gy`es`0^ra|;?hJg$EYZXFlp7KCkS~>2GG6w(8Q9&2~D6PJbg922R
z!wO8cS1tBPV9Ns(u<)TFG_F03e<i3 at 23J8HK@`{d`Ze9Z&KCaZI?e%A)cFei)3)fT
zE&Oow7B`fXV@?u9*}?aj2^ZN-s<2LjP%+k35jaI>vo*pre9xYm|223=_TGK}9EQCa
z3jr&9QWk|NF3_>GGk}AMep&0qfh%k)Dg#+8k+9GTSS1C?Cad^lqoJEcf4$~QcKK<`
z52~tsckXXli&!r!oi;&aT-A6^sJWrL&n6gL4pf(1g4!*UP6wm0N{B>Y-1OifY%$nR
z)c?%t*#eJZ-NWBpR0Mw|Dd231`zLcUtq-74>sj(#g!~@9UYB(x=S~QJ?1Gz{Pvj+(
z?Bwi#F#)&phb|Kw^)Y`Ke at Hm^Qmx~PoK~Dq`6ijtz(-7ca>?M0tOu!9$<k~;105Xq
z(c{pky!d#JW0R<Bl3hyC)VQ^=xgBTlAu$2lB{WWED_B%i{4l41&vDTwpl`GV1PM5n
z;CT&3MdUi-$P_0Moco?WM19dzm_*gm+<aCgKzldv7pat!502!Oe}(y_x>{cMmfq<V
z&9aI`f_PXIL+Q}9yOYmphk at z_ZIrZioVNMo;YTcG7n#Qre_YX3qG-vM`%kX|7wdJ)
zC&75j9P-ct{hZV`;{4H6)ty!pMwz+UhMUGa*~|;rEnETLv>lr+p^Jova2&yDwh?A@
zh{!=M+*`)$G0(_se_CL<7Ar_iLXh at NL!+-%l4yQXtTS2)>Lwb6xmv%^m^OoU2Q83-
zw%c?x^S$@xe(4iWN{*PbYqFXSf~90gngDSQ!>_BA^fB{YxwteLz{8%fG#zCPe1<SZ
z`0dl&k}n{|w+sg*3tz2<L3)Y}CHO}zU{(FnPot2e<^PYUe<~MAL_)r#tCP(^K- at m}
z@&q(#fkVzzIfVP=VS~Q!Q62A`iCHNnN at 4xnx2(QD0>mRiWF8WIxKqrG=6;$PP}X1g
ziHt)Vi9qDVV516(jc<Jd&OR2RUvfG!V-9#@<L!hb%;KCS=l7r6ibrT=?%*V7F5N%y
zOUfh>T2nJKf8dA}^EUS-C}fX at N@NTOxT;_fut)+Q^OV7C+N~=xa=q9%Ve0vCqdZ06
zZ6&?l6YZHUJzoEqrNVvObW3p<#IyE9yDo3+u#f2OI6vt(r4l|9AVQOgp>Il8!M3?H
z>FJuO)T at p$A1JXB0bO>`&haXAWUoFjsRn0d%almwf1#sj>}|Ms*@%I>^USzCyB_lN
zg7(Hjmy#>LKP=uF;up{_>h=v3BzIZ;>D8IZe%t at P(y2aBc=q+>wgyJ>qc<~g>4z7f
zKdnV8!AtG&HEN>0Suf$+d#yj4m?ytm=bluZun2E8ZvHcAI%Ux$4eHt{eV6Tc!7DYw
z{zZGte~Xu}5j-XHfhkZ`)<h#))zLjp1tsU$|Bq!Fz%p_{k|8 at 7p`Y_^ij+e~E~-z_
zsa5S^37njO7g<5Bz%#izXqjh=e$P>3zL+T#=@5pB3+mJ>Z5b(*djSqo;)57QsG>S2
zJRK at DzZ(83M$H7v5{ALS1*_ZGH29J^RBwRhe+=#xoWt)|S&`EX3joZueLLjx`UX{U
z2p~#Xv}c-FZAt*JI<xH!kK{A|26^`)p)PoMr~`qW;c2Lq%Hqz{OFla0D)MKixmpJj
zSJ%y`h5=+_VoGElH`Ni at zXAI?_?`G0x16nBe7qF_C+uLJ|7|#JpzW4D3{8boBhOK5
ze?`xpErf^b{^@lX`1()cGw`L%484myMSD}s;QUXk#1C(<b>*Ue8cBdiHCrQjfS4#N
z;nx;`?48hG(-V0a^RbY*#a`$BECR4Tr3nld#C-#xG?{{KR2z2?OXM-=N;}VXO#9j~
z)+o;Bg>7+cbIFR&jHs)XM{`bXJd`6Kf54L)d1R{d%p_XcXVO$m+pflC0Bb4cB(yiY
zJ)B`eq}=Zb=||PZ%d*NDlhTh>iw=w}2WLh<h2!9?Uemo`!LhM!g42)VB-EW*vrKpg
zZl3MH0af{T at G*4Zq0Hs`y$<*3zOcLOCkzQLt|B at T7uP^uU})9df@%W_Zq=6cS5)!(
zwukQSo*|^Aq!FZ~JETEEIs_>}h7yn*Ksuxw=^T(odZZ+zMH+^bhVRVrylcJx!kJ&5
zz1P03`+oMC^_exn>{?(*Xj9c}cBgo@^C<deG$ci=l_{&`m~T+hF1%86 at RmZ4_)aQ3
zQsd_I*5l&(Nl5`4 at Z4i(#CEzkhEz?hu2Gal^UzXgL~Dw`z`Qpyf^K{GO14+GfZ}ba
z_LRW6>&J5iGxCA?SyT!*v5535iFlff_htHeirPB`L51~V5-{+6p7BixljD|LAWnkS
zjeIq^Zl0c$Z?AZ8SCxarAjNz$^j437-%i0nw~}&#*nc at o$V}oV%}*CHVfDa-A7LKw
zqCr(tpr^^w)Rzew!-3IPrOO#3+kAGyDaWPXt7MW9FQz at KEmhWnPSe*jWv6Ylb5xhE
z@>DHO3_vRtxDMufYf@<RLS)yhDyb5+v?s6Uxms`bFMs*ZB0B!=3InDb7tlSm#V2aQ
zFNWllC at i0+iQf~LMGMnLdO9*`q`YW~BJAG?OPpPsqq=-uOduR_kpJ<o_4sS~c?PZe
zYeL$Apn$jzn?v1$$tub{Rr5D2w^3VHV2yd=f^wtKYm*hQVE&8B-qyDTjlf-z>GcyA
zDOl{RiI$FM at b5LL0}sLbrewL$T5>1S<@(mnPL-c{f(aCgGkOghFI{oicl5pQ$3G|C
zo)%mdR(P5SyV-SB1T}wP|Jmt{q3kBC_CRJ1sjSB9ik;UIOP3lBvH6;nWc2-9rc^kL
zb`n2VbE6;!>@Qy&_G7y*ZujRz7|iUUKrcR%KZRRDMTSA}q(Wjmk7-8xC4X}emtO~|
zvJq{Lsg;lfozv&;;wrQJzD6A}mt$-_0*`06r<Qz4BI0|)0=XTnR|^&*&>g}axi40@
zZ at z9`bDeFjcH;H$U!0-bHBQquXkiX*t&?14I^Bh_f}g_qnR>h5f8}pQd!Gl(?~^nx
ze~uDTWciC+cOObnOGd_kPO!0DTTMuw*X2Ry>}-mWo}FtS4Hz1Gaux4j;c;{5OFjTb
zA&&dZJVG+`?3=2Wb(Fok#CmkE-v}g(oMMkPILYKy^lkigjB1Pnkl6S-m61`)(ojdx
z24vnl3U*!(#DB{hnU=<H7$<{wF-+4Z$1C$@;1`<l7fd39yxLL0ORfIb*xSp(9Erp!
zdg4K?jejY77b;|67p7W?Qc)O^ZlUD9P}^Q1QgaFYHmm;F?GMHkF(dDICXT!nAWeKI
zSWOhfLVWRbdp==QlK4CY?XH257ZRo>?PZLIIbg=EYjqaN_X+ri9)Ugz{)$)IAE;yT
z-72x)GXbpsrt2MUE%&b$GqPVjs at 0mBaQ2@DVgI%VG7o<8Hr*~V6rT^>naR+(QU(dp
z1ssR&*0U~5$toOa>$vahQf#nCv*IxS$Y6tTI^y9CXQ?tg?xZt|OI+1Ny|*0WW!%}5
z&;(basR;ZPwZEC`T8}{ArO^ov)5BXW;+aw*=qF0UU1fIICyVrBZEij}VIA9iD>+4F
z`u>GFHXY_0>Z#?Jpw{*+1CsSm0{hh8Wx5nB&}@Sa2Z5Sd7N9mFvwU0m;t at RePc<B@
zX*#pU^v38X%2o+w1()@v;tZ`ir+nw2B37^=_CW05s^P|*4UJh*qlC;EFD`VLu9N+&
z5VQ6$G<bA7BWYS9eN^xC>Ry+=d(!3!5ufC$3SGkB^{p8rR3i1uR$<wvnHw?T-`EFT
zq<oG`=NB8|18MBm(MFw3XM5y{KDH)O%@m>61$^BAUhLel?*Mg+&Fob at wVsp=8$)nn
z`uMQ1?A=)EbemQUXD1oq^DlnRGV<Y}%|}y435`n;6AsMFZ_#%XN?Tq^ZS8#a8`kUB
zDX>Zxu}ic$7F|a5$(o$~46|Dv<mOd(yWQG#b1~B2k;Mfv1_T<}t&Ptm3P=`4i(B|8
zlpjCaeswv)ArL2Z@|{=4stoejB5ni5WECQE?P at N2G26(fb<(Of_yDxW8e|Z~nIW5m
zEjUhYw$(Yjp~D-4^btmm-J7)-(Ozy^T{~B+EX`dQo0>72*`RoJwx6Z>CzT72=EjF8
zrHeJvYuQmAkUKo(*6>n9=S4kRv=c0!>o`4vrx}`({*4ulq+|oO15!pk6`jEtaSvvb
zR+lTLlpA5&;32P`M(I9$6g`8EKD)rI5b;uFoM)0eqWNy{17LD2u){Qyjia7uuHlDT
z$ncS*+FpqJc{24`dUF=;YF{BGVep0HxL8BF5YL}8G!=u72h#6{Mr$9a2uK;1q60am
zTC8}Or98f<WOoqxavJbER+509*EG92Yq7WLz5Adj-a|eTun;CkW%@m5fVa-vm~SBW
zyxTME8$^%2l~@8qd-s%`f_zSdPbFEVj9xIR&z>;wqIE;=qw at ID)tnQv8Ed!8!N_Nw
z80gYudE(e5O_(0Uh3jDE4TiNnR+9ce&z9POpExLiRc|&p5hYJ3GIj=R@;>py-})mZ
zk3$Q*1AQq*5GenWSNgEFE*slzdgKK}i0gxw(hAdh^PTQmSyzI%<XJzLa=Sp9&oE$!
z{5`K-sI9MwaY%l!I#87;d&;5HVHg4&!K2W)FC2XC5SJMRfPYjepbK1FKADVc|3N<Q
z{brjA_U^UUY%@nnzw{*7SomT<w-PPq9b0l->>U?*hTk5J+qW-wA-lwRpTW1EM7Vxw
zg`|dID3}lM&OJTEU9lKDQES!C)24S=76r>(vME~Rs4qxpjPgDlx;7pEaEAihw#=^!
z|5T+X_a8!u<kC53wX+r<RBCV^t_6GiX716e|DcKL5Eeg>9J!-_*H~aQIi17~ic90~
zYA7T20dy`{!J#jAhqoDFlJC*y>bRS~kZCz}s?J=6sCQbZP8($?W}{;Sy=!W#%e*ft
zA^HX_IvlFZn<kXx8&CNLuYP8v0~L6RMi>6+v?e>YoH{mS>byp*6P;z{Q^ZcU-)n&5
zFMj4PBF2R&!kk70;D*{3V2`hG%5Hdt$54m*UXD+_mi_j#0Fsv~g$J67j8y(9t%RWE
z^^mO4<X;QmBw%FQCR8fBW5ytCQTwvO1ZV7FuEn$K>|qe_Hp}0X5L-NET_{J0_92}u
zRN#5L>q7^{x>DG-MSlOb%>}?4O-V98u1{zujw4y8kM9@@Odr4koHL~270r>N!^OCw
zeL{M2Ubuf!(vtgytJP^9trMH{cWX(6pwNET)@M<hSFf@!$34L}Yfbc&^2?;+Q$0q1
zzj`@J)!$jE1YZg5c-2wjYf;>D)#gcYG$i7TCAQM=F4b4khbTmQNY<|66GiXnI42A|
zG)<SIr80|s0nfz@=~y*hjfHgr2y&zg;_O%S>L^*1=U{fh8t%o!1cuY^sWEObGJdq`
zPXBPM)(PCdA8GLoa^@=sd+%%W2z`x6#g?2$gR3uPuO(8S$RvBCHePepWA)1u(Y>5r
zmif?SMqLyN2`Kq^eU~UH$xm>LF*W{>xRlJL%T>Xp558drHbr at RHy`;=T<A_w1vyoU
zzh&cWnaoz<QBb9VOReg@@?|v3;fr6dvuPh^N(%|KO>`i$h+6z0*wdpHnDM$KKq3Fx
zXJ7u-a*QtUV1I_c`-o<8hBhCDVFh=={EJT;_%E1<#a;E3fC}bP<dXn at eS_Bcvqv0=
zwg?2(6+E}YUD0bJSgT~hP$XaHEdvlqD4ic_X}I0_ER+!F3e}KA_e<Vfv^>-{ZQ2Yw
zk=Gfg*wz0jl`XP2?d}#-$Wng{u`_%(L_!H&m2z|*b;q;x9ch<w>;1J-kLh+sQthz6
zc7wiEXyfE=Aa4Epr>f_(;dz}cT|;ndgw~eLK6uX$m9eBGoQuEDDx-jgNq8B0`hefK
z63?SaL`Jl%NF-qtd!K=_^}TgwKqiULyPt4IW!T|Uue4<~>AcWk5XnwQ!z*hTltxMQ
zk0Wl$Vj2mZf?{sapl>`;=951nhWj at rA({4{f;b79OOO7{$j#md-&0t_!@e0r!#e(a
zum;oFX|L<jO^GI**_!R0pIzY79X$)6w@)h^XU-d at U9}Q_GoI0{2&y*SBp#;|7{PWk
zyZzy5c;C{h^%WX=gd%ror8-gD`wizu8Guj`4(2a`YJ0IAqPCbn%qy at ZP{lHAipc#s
z#d#9x-F4#ncRziFKh+w7>8P%ms=ahounJBfotkP68yld&bXz#0nDrSaKBh at osv&4-
zI1<D+^z*kj$e{e4#vBpg>YVLusCcuz6-Mj=T#kXsd486qi4W2?dBV&2k*YhppzdB{
z!A>7c|8m??5-_UQLWzIEJ`2U1G*3 at BGgO-pTHy{~m}**|FYHBUOF at aOou%6!QUDv?
z%7+(48KUF&@}<(T2vy%tvtQ&UxXg0oHRf!WMOqKUnh(lXmH3R|-?yAc5<~%%FJ!M=
z=do>lGR<||cwK`VQiXS!uM5pB9y{Wp1sM!X)|itsZE<9_3Js{Lw1EP-l~XGgsbdDH
z&tFIPx#ph4;MCcqJWf)=XOj<S-M}7B#9`jTrJDD}E}Mb1;NcY2fo-y5szK9<AuD~W
zHzHM4&1*8^3tfKPtTyrMlhnLrZi8I*sy<M4%pK;;p_dl`Zu-~40VQ6l-YA2`%J#nA
z+3UgqjPC6TQ*#b8=i3j;n8L4`d93+nam+>t7w<u!fv-Ac6${)g=-TP(OJJ07ar}A>
z at e&nLdF9=ozpGtRT3(5rg4{+*58<*0IbS2z*fXXGD0Hr-WTGO8Zi+_V`1dLGKFfFe
z)AVsOw9=A-Tj8Lx>>$G^tNv4_!LD9a&KK|ZKc82m{^Xq_qrov#743%}HE^7fv(X59
z+ at i@Uev8lt{m9eY+ll86NS_4PY*P#k_uaBoYLX63FqRKmCdS5oMhP|N2_6Hc#-c$_
z`(9?fgOGCRNxaJ9iufAm at D2KUUG}xkZ*j5y!FDVLpT*;mZ}i8YaXZe+rvhzgv;z{5
zG at xAN4*px1q^6*jB;oUzHBI7CJ=DS#qg9V at VcnrAjM(i<D=1qLiSaeytXS%oad}_;
z;`jQB&3T_ at Lz)`;C~Q?G{8EZbc~fG{P{S;ss)ynE6z-kpg at 3##T^IBPtcgdYxJ9Vd
zxeTa0f_F#s)5UA&L=R&^lQli(#ySavJWMLv<S~CcVhi109sD}!c*atI;gT(VHXq?o
zDzmasoQs+_2eQYQyE*Lye<y5-(cTp?PJTfJUdnjVk)lRtLuwa8_kzE_9q0T6?<$LA
zLxKm#OVzLBoxp5>pOi at ECvrJk2g#?B>F-?a{D#}3*0`FgSD(FzJ+6I|kH&(<m;(Y;
z at zC?Ju1+bCsG3_834HL(djCwWP}B6WW0=#y#9pwGwRQ;9+jS#_33hzOOXw<hkv=YB
zPdtqKc+3E+e|4OV7hE#WGhtZrPC>}P+cd}S*Jls)4 at bUbgly}CF9v6e8E+k9cvqN@
z2`D2-*v670?eAsuF3h30XJnb}n7k%;v8Q2Gd;nqx(o?v5+fDNLc}A}<le49Ti-}O=
z81e57id|X7%-#W&kKpGdVRpG*PJQK_zT*PgAIdYhsJtjQF_`XuQq)zIp48~^emc&P
z)HXqva-=brk&R)gC7dB`<q4s+u*9+E77v<wFp=Vx_n*INNj*x$S`A4hdl>lsr)AF$
zR69+X_Oo_dloFjs>C)owFMkY6{7JDkVuhsICY`s(UrS!+iE4w#KhlqMl3>Pfn2O!$
zK`4jd?PUDUke3<4s$Ei(<VOQdFu{#$3p9dUbd!>Ta2%`eAvVLPN^7nQ%}uh4<P<!U
zn5}$WLaUFjGAi_OlyP7_?=n?#bN3bLT(tcAzd;hx%EuuXhlD2q8mB2+H!S+sZ<KTC
z(JIpC42%i&i>JT`hQN-+TW;!{<&RelQbV93h)ex<(tKk&JD*5 at 0^q=W$)V#nYNB27
z`r#F=9>w2bm9#ZVm|X`u!E_v;b$jKM*#Ze6d}h!7OO20Ts|m{fr1P^~1S9_K{N*e1
z7$;K<%(?r*!-rCH^=`c|XMjKUkARG^jI+8;NXY!51B4R%e*TGVu!|4oTh1-9HNxlq
zWtRbQ5uWRKf-(egB=l%yGHS$v#Ms}P3%v$L)gkk-GQAsn=#n|<j-Ono+JWo_w)Ty$
zS(VGgZ?Al^i8hMyV<RTEe+9T#uq-HfOubPYH93&2owM6#5H`uJP;Kh?pf5x@^rL|D
zi)9u3V2yzod~WI8(xDTND-`s-m$9iqRy=?w8}p=rWoR!Zy2_*r20W8^$e at nQDTrQf
zGfl%VYL)zBh2~A>^fCMV#|;OYC=H$K^!d at emR2wAh_x~o4`rS63fHd at hfyn<{2zcC
zN)!jFkL}!WC at P5al1cyc5j#)6)cB#Wx(wUxaZkenTslj%1|7tyVhIpDW2^hnk5^L$
z^^B^bVC<`PlWRBryH({aFU9xDf$EZoss&}X3zH?WJmU{3wCm$X^BrzyCsN at f;CeG%
z<5Q)d(F%*<##@dIyn1sCWi8jkr&xn2(s93cjZ^*{#&RBiTKca2Dab(m>5{mQe=4nv
znRUM_JGi<hzt_3}NXcVR$s%*~Za0-Kt$wQ_YBCh8D%ZRc%t$D_LFS@^0=3F%%x7df
zro=6uka)%EIP;bpTVk2pHRAOfhnTLWxgD$0kYw>BWdH}6bk8kc$2z(+pcBsTFMlh0
zeR{OOMpA;AC~mmYps>6tnNqLIqo7DTn{d>{2bSI{TKG$(c$;*o#*Ou)(dCnbohiH7
zHini&3N8li)b!shdqbKo+>RFLs|#r*)2h-S3;{dQdf46;k%g_){GVJqjXmAQ&}+B5
zV%8?DM}~J#+LGZs9i|(t=AMfw$F%~QG|V3J=Dlf=rzZUB4qud%<vgnG_888nq5z%Y
zSm3XRh93tZ)auCqhBr at A5<pMnH~Y`<PNpRGmN<A at a`_>N$+L8HZ*m>^@8ZbX0=3Hs
z=by#xH*Aw8zE<j67bA``yyT}Gv{OiVDu!_)^7#*sqz0es($=<u4;HGZ)4ZLW-))2+
zgY4IVb-LY{6xo6KDCx*g91 at g!HSg0y7CFItc(1l{AkRsv&g!)J%^!-#@=dr-Ii=@k
z1;5483zk2?5;d+vYt%6`{aCT^SFMJ944?nCtb?e)4(cdo-+Fpb&!MmMX~7;cR}=h_
zB%Zq6&;@2NWfQ05W<`FrRLGx1)oo6A$1*p=)h&(L`Le;IQ>1cSJs+kOV=N^gWeWmh
z?^Dn>mOc(w<ad5oObTNA{yX8t$Dd&{QMPYTltslY4gUDU$5P|2n|Q~D%lt6|+{A_$
zF*aVu2+Rj=E6+9Eg%^91e1|in(ei(;dwf5^nZt>GoW6T$Yf|eKEB^SDm#?!7m5)$5
zcwU2N^8MRMH$R8`wexW3PUh#vuOpN)V6X^Fl+<)Yinq^Expl9*gI9eXsQ&mEA_$-Q
zOYd+VtocIQCcD+>*FsyMvOP6dY^v;uqV`ei$gu^*LnWc#N7)KSQ(BZ}f~JXxk&Hvm
z>;{#7U`TyFR)0(QbjU85wQB)esD|w&k#Oum7}?`jaV?jmxVg?xu*x^0K^JW>aBx)R
z>tPR+eKP=Ef2yYB;=u^3+unC{RExek3A#=QRdWs6n$&_bgURfpowqqztqKV)PuowZ
zzR3<m(`9+Hn>}og?=Ol0ZdYXzae=T<lf(Rp8}T|*xFw6%;&YoU50=te#=SNIRuVtZ
z&o1|DPi?MY6}k{fS!rDWfVnps{0Th9uQTx^K1O at gdascKcQN`2lmc+Gq<hpAKATXO
zi4v5L3(rjsXNbWTYw~j at htX*d{)N7NRYyDwq<6?4f2Sn=;pSCBatfveCev!sgg?CW
z at SO+*-f*H)BHd;hp|kE{VGaAu-{WydjQ7H-+ at J$m0<RQ?lM{FJ+z0&xA1da=WpoHw
zLo)?XVmt0n<g`DRd1|Myj|P|K$>dOP5OQfbJ=!XV1&pBs%7+%xd at mZBnJ2?F16X48
zCxMGRb-^@m4qq`+EN-=q^$K>&GT#iZa?hpy6&R4w`dP61Ez%%TfQm{ii{GQf1<UMs
z;YH-2+1F)y$*v;8(D_PHFk at sIG%(|(Xsj(s_!IHz3oKm5>jX{CYbfm{y`idn at P^Xf
zl%-OV at 9r|ev%L^ptM}g~*M8*?ezQ#DM`ik*EVTQ=@Xq<3uqU`BBUuMt86fj_xkv_e
zv=E=xm(9>l;DPjbH-3yGkoZL1XaxNZxc;j{luU2`s>thsA9u6P0n9}R%F^JC&E%Ed
zHqaP2rlDdX*`8m{o?z2~9kluC*wjXR8NWGEtSIN0t7{T}vytQ}SJ2ZX{H-du#lI;=
zw~d!yTi8Umm)#3eVDT41CJnFlPVlIfS#w&EIw%oMm@@G1WtU_-D~&H_ at H?7N#`7*!
zQp{Fo?#in4Jlc<+00(Dnt*Rb`SGVcr61m$0D!0q*15hv^C|W(&Jmbsh3M|7M9PpNl
zd<n=0mQ_uAjUPe|Gr2zjH37C)o)a6Q;3e`kd*{jtiQlR2SKv^4OUJY!<IF at IKmdwb
z39~`CSdPzJiV6nBt%?s7;5Kl~OR0Wo4ra1n+#whWOL33 at +fteqO`jWIDwx-Mm%O{>
zO{6qEU6tD`jd@^ofyy;%FqwOuC6mk~xH-(`-yweUP<~7aS54(HhJMBVD7_=NrR4-I
zc<v3`s}STBJuRX$F1BS)+1?4KeKw$5)Pr^Mx`E97w%jsWMbdzmfZ2duRqdh8SLD0%
z`;zX6(m~5VVEgDzmPDQnD)pd6MXjj(mn0IaBIu3R68Dbc__~0MKK%D?ZN>X0nHH|C
z5kBfdn$350M?KzHjU8{Dyc=c`nNv`x+~FOJAhKK{+!3|%1*hltOiI1gJE(f4jX?@%
z{@xYWXEM|Bn3*;j-POG>=JIi_)hx+6<NUhmabTsL;4-uTOmh%`zCZUMZ;8?GjSta_
zZ=)me(5r-?nzGj9)DAX^l{)7vsln>Ee~<R)8h2IjJOW841Aa3dEx~4qb(`nL?Bz50
z>WI)#dXGLerg4%&gTJvqk9W!xqIg|Aa0U5c*!TWW4Eq^2v5?p6{)Yr6^)PcgjbrSb
zwew%aFwkbjIt53;-_Kr3fdB8)BoZs$?t#1tYI#+LM~DH|7y`tt1V*Ina1<OwQ}1 at S
zQ`a9v(8P9+P;VSO(inBOP#YfD(5&^gQXd`c(`<CFAnr41w7YewAK+0m2i-x`*9Y=6
z=-pNH`v);J!QIu=xd&J at H{D#+TnE`StO)LEH=612JCqpyCz|YVv>lOSLqk3GZ&Im`
z|GPMxXhY07nw{=NYRrRJN;qN>!-L at e6m8xii&m)D4t^twDslc5RsN^w4pGF6SV#)F
zP>Xdn9)tocYrxN63vjbljJDP%nI_@~{bm7xz7eqlgIRV!j0A$fH5Mz-HIV at jo8^vq
zok#!}&O!%@CRzZ}v!j7Fh|GbvEFK_SqH(r$Hk2p7vG_UHIZ?QfTn7sdC=|)@Avsqd
z9Fc?Ic>m?I{>w)ZMHZNWZi#e|1y7M;Frpv=DGDJ)14MxXQWQXn at kCre2vTf0?Zv}I
z0c)Bdx4(u~UfzU1eocqNavN7+ed$*d_l=@3o6N(BoW?F#czX1NcO%PKcKXr8bz?v5
zG97c`b?p-DOM2);L}LxiH=T4eyMART7XtsD{cWWm$@Mh;ggqj;RwP$Hk%Y)WaDD&s
zZ~x_|iXscbU=iu@$bxR9c#kN!MT$j8F&a_Of)rPg;#vB|#352_x$DDgM+K{D^YhOD
z$R+nh$OyaKz1<Tmj4cx|y?x>V#%KxZ-h}au#)Wa_-fr<y#!3ki-VyP6CT0m1-nj7!
z#-a($-bvAx2wo7u^BA`z6nMBtnOj&yS_Zm at o9mh*IFWb*L=LKVFv3SX_jidmGsa5L
z^%g|rS0qS#n<4`B|ACtS0aO2h0slb7|A55^5WyM#<CGAbw6|}(7?QJdMR1Y`4imX(
zE^<+RV}*pLNWP_c5YG%1Y#@vLeoQoZ*yWu3f+T5`HL19i$s`F>c&U1o8^ozqG^kXS
z^(Db7#Z*7l)FtUuIH?4b*(J|Z>c}{iwIqF245>_%OC`6})k(OuG=*qis55ZOBRLW(
z7G*vpM~CE;ROApj2u|T&KH<N7VNqm(kFud;0J1;{De at u;xRD|jQUoIk<dC8fQe=??
zs60oCEu_PEPt~y^f{=$lxJ8Kq{|Vyo7Xg;56z>NzNftV;KuM4x&~V2&@DkDr%IJs#
zvOoqvyd5OKtfUc8N=F7T15$;!-vM$%fS`|E*T6Ky3~l}IY`c1rnl{Y&x#@~4HERgL
zlK^e9|4o;ie={|A95IW5$&fP8pN<FMZw?4GD6xYV2!_C(rgmH-iu*t(2rwu3pAZr9
z-`V0si(l}+d$95O at zwu#54Mp2{@4F^u;ZoMS3lt$MZld_TKY^@;Bc?i-9F5f5;)$f
zd0)v=Biwm)woh(l8XmT)(rvub0w-Fn?h{<Ggs1&#M)1E7{6Js*irSvjLSw(_&*m+s
z*~TFw1ShoGfymj1M<9H}^WToEO?{{<P`D@}zh-3)Zi)z;_y?B$2TcA4uKxq8{sZPA
zKm<4TkNb+?=HP*=lSuB-0l`TlI5gy<Fyx{OeX=Xxk$em0Gkoj+-Gl8Qg5PM2?wL~M
zk_Lp}Tj2 at _3W^E{3JLHFrbR>W7ttU+C}}c at _$=rEzzcX<d?G$O(SH%aXF>oi2UgYp
E1LwrvB>(^b

delta 743510
zc-jC3K>EM*x-!J0GJh(|vaP^S)BM;XznF&<GAD>IgQz=p49+`IAvnyb-%19d`aJY~
zbdS}c at nU3+o;{g|#l)f|EmFG5xSh%%%$I7FTugofc9@%w(5 at zU(&6tUQdr>XTYgJm
z`cEff0OXf at XFQ-wiZvJjV?Z10C#(R=s{>@YWjrOJrd~LIe}4p-3C|EK1%v!DNLg$B
z?uCkeri__3w(9gA7g-JiHz32z=%)<l!jCBr_Kz6cb;wffeKebwIKT{86Ow8ikEIIC
znw<+B)K*BA28}dawPHl?z~Rpx&`vI%D~QMOHmg~z2Z6v7>ILasV}5N4nAYU*s^=UC
zXHDl7$OwkX)qhr-&!PP#)l-v&zM6d_k;{gT8|0X}<?AhB8w>qAT_Xdwqc)BeziA8N
z_g0zX0*t)l*=5tATv5%#tv at w(Z4z$~MoN(DqF6Iw81u>J(1u`aSK;3OV6B_4_3fN)
zNp3^Eu8<@s)HXuSDd~o1Eq#W9u$?E>y)SRPT%J{yZGU)u`~?;k(JqsPXB+>Y#s1;l
z<=1LQ{2NeXIGOJB1z%^8|G6KF_bGL}Pxan5@%!MtTthmFIdJzk$F5^&<$)xBzaiN7
zi0 at n&>~9AbDzn^vScw;~RXVF;8SPPSpll+c#=e~JuF8+RE1w&}n+`15sO%rQz8oMj
zr|0Z-B!3c28(JKo9eY1ai}h3wIhuhiBu>eq_E1%iJauEj&y|XDPm&cl-Yc7T98}@_
zYx94k1iWnO at nh4IkwG;OaV-IXWJ09fJ4G-~#FF-<*d_i?<L|q%xtbZQv6JYolwU5Q
zDa=wroq!wM?a$VcmpU-MpWcZ6>{vQnDSAof`hN(xu5CjQUxj~<D2v~I+w8a|XgEF$
z4;%k1S|w<k$GFMMM6%4(fdUUV3+8TE;6Mz3vsjFs=VDgi$vm_WtaaHj@&`MhNnhe0
z#b`7Fz?lV6>K4z1sLOnT_OZp7_nER4g299&<7^Edx(r+bblkw0<Rr*|(8Owrg$FrV
zrhjI1PX3PDAxB5+S=#Q!Ih0)fSs{SolKn1@@c&547-$H(Nk|_I at QYr1;J@$jc!FN>
z-QqCIAj`117%^jUgEj8?6fVm%w}?y+F_IpM_w~jBzDEie-DXZ at -0v_^KT-3fXeX}V
zjc;X-lXu at O#JL-X8fmqO;6A^~vhs_V=zpCrU55c*)?@ru0qM$(MxMj5_PTy-+^&3|
zBKzB at au$-$0IL8(#ieQoLsd|#4#|O!y}uBQEj18efo3kkyf@@}yDpEviHO+&O#PP{
z_Z}jF<rvS!!6udcooe1LKscs9onJApbTkrx+cml>ZVKT=zuc~m-2Gu#mZ1Nm(SLAh
z*Tc#Q@@F(`w37g2cW`bC2KshqHWb`Q1#OqV;#zD!-EnY=w`6GSI!jA85#Dh3 at 3MR_
z?pFQDYb9tLX04<nkvH4XXNhz?-r}K9RJKq#F}q7;Y>bb7QRSSuhiAH)`s3)7Xv_o4
zi6fi&r<k at E*Iy~pMdXe*T9WO%Sbq*|OSZgNx1xLD?!)(zo#w*XeC|tMkKj>ZWFHkM
z%^%CS-lH+0nGxbUrrfJc5w6ccXei%k<?%y%Ybm+KW~ov9ibRPsQ%Ea*zj=zQoBL4?
zo1u&z;m!t0i=;O4?Z)MKK>hzm#LoBQ`}1L<O)CVoVrb(gf$uj7bR`!0?0?S7abnjL
zre9$_jBRMv)P(!xE1G|7aX1#BO`h=jsm_DX#D0tLS2VdQ_MTI)ktygmr at FwEtZA-A
zB%)FE$H_|UBIvoRCfhaAYR#MjkhcKfttxxmUNpY0n&s^;)x3_#x$ts&4Q#U;H(!h3
zF{><r2J+{<x)|o at s;jDlGk>fkx?<sC(yBpcAEU1gHzAz2yLqAa2e{fQ1KLIp`4f1m
z=p3t704hmhyjBYKt*ea`&%Y7TD at 92wn0@}|2b3;r-Kfcx|9?*ew|r8=1G-Wh&n#R;
zG)oDVYWZ8|xC>G%CP8N&b-XyHm{1>F_%{B$^mI?{sM`0J8ax>wgMS9NTXT*%tV3o`
zPrty>jgc+1&QJ1pY0<Yvp8qZ*vNXv_9C1er8z;^vF>u3Zkrv{gvxX9y=O$(O?X?eG
z=o$6gfbcw}sW!Iku;G5?;$(SLyj at 3$r1W85hnx^bt%jJ at y8<V?Diibmhux7vl4t-^
zYp$suXwbpA7`+AaNPpRyp*}k6gX$3L17tNg`+cJP2|B1hC&(a-h_`cw>h!-M7I;y8
zT>COeOTrQv{c`t3PQtEVveoCbhVx%ROJL6CVs~-SQT213LcRSCaLFM$;+eDo#N6tw
z?Ywz5hwSC?%qubmQd12&ed3$6e*}cEk_SRg5}1D3`tfASLVqIa#PfERU?u2&+lC!S
zY%WJ#vsoDEn*KpJ>;Sbd;;0u$upu}t6M2C)zX6m`!k60N`h*;J5A;Ga=@Lw?PJ8Co
zF>1406YcArMgcmm>Vd!tsZEb?P+=Im_7+24zUWmIw9vWLX9dVr)C3j_+gW;?h=d#Z
z8Cx<}hXYrW+<!nle8S2%gOin`@Kh|}x7w2~&1Pbq;-QfFfk){q#pRs&d8Zo5`B^!V
z$#B-*<sxXXFW0Q8j~5>FauQj`|6eg&5_G-6^X}hq#8}v2!vp;lEE6BQ31*P3mFm*;
zY*cw2oW@%?WIuyG>^D+G#vJyo!1vNrzMfe0Qi4o4Ab;K;ajy@@BHF4U?s>R|Y2l87
zqOk|L&;3!mN1Jmzq9kA3i9R<yJlSL#S6qtT`8-aB?6aP8HU;2yn9s?6kfpgd0_rK;
z9JY-LpP~hTO+tbO&ZtigyYsv0vHlxCHCxQNz*T3G5WwV(5TI#3QY6e1AO{he7E0*y
z7~ll;Eq_*2S}-Pei+L!vF$4_+Qy)d7N`}nZ4f8FnlU!E(hE7heo#we*RWVsyka6{J
zPQbJt_(71~H;L+3pp*e>vcTA0>;=;Sh-co^ivm`#R`VS*r at yJ=zU7?7A+a$Zg!M-1
zsJu<qN!MASXc`<l7GP^d_X33D>{-?46&T)SB!3jTu6mqTxK;>KVq0M;M*0=P6xQM&
ztKJkXM&e;U8hk|bDvG(<XkpfLw1N`gy+3rX@;DAA&bFzBDWNoCb7}SN%JTz~TkaHM
zLBr{tJ^?H{*3|);KaaVnOlytZSTD&>wnb3xtju@)xi|c>CBy}q8nC2~-pa&RA0Yq!
z{(nJHoy7J at dooDttDggfWtq6&m&>T!c5mI{M at Q2tPx7KDPNjo0kLGI5;?NXZj$3b0
zKr6!0!e05?XlcCU;rhI8l_xTJ#+!GeFKuzv0CoEZIUa<}d0n%*61yDBCQ(^7hS&U7
z15Rdu9C}O$0-uCwStvUPx9~=M2ASs$$bTK6h9@&H7Q1SP{MK#=A&!&5ISa}+JFC44
z%F0-j3Qb;8bQiE^#UfOZuKM>@s4gF0%u2|7ki0rv)4)F*pfDiQqas^B$g=ata+ at 3r
zuhX#VUBI&YVmQr4ORg$(ahgZ;7 at fYjObGrCX$ORs#I9F$XF5#@j+L+jrvX#o(0}x{
zSF6`MOIh at y&Uyy(kjy=*|MG-LiUdSZuO at Bozw%^XiH5r;CvS*I(iOafg5eznt3yTS
z_JGWm*kCuzZKPkR=ksnpAtfJ#6|aZ{$*Y>$RsLZluEw$nQ?48uVq0k`N^8x!zmOKp
zNgRI9W6-vJw#9-OC2x0zHc8ZKGJn*S$j>&c$DUh`P43 at q!YSn_KHt3EVM$J2RuYjQ
zP%8WqXA4;I`xNLx`nA`tKw1SKy4+@`SPU;o7M+PQ_Q0P0xkqMqQ_?YH)F|FQ?lTQg
zeJLMh`!ZMTtfE~&mjf9cF8XY}^~(FPPJS#UTwlO0XFJNRvD0C^e^1MR2!CI~>N9!7
zfWk)Q#5qKq)TOw8{x`yEp_f6qXT0j2%nOvb>_{ABBR=%<I2<iT3lWoD*GmK<^l^O3
z(@(ajNr?WM=S>`=+Ohl4y!U+tx)#7og16Cp0H at K<V0w~3a8WuX$rBDt*CS=A1inGb
z2j)%_#RBUd4bm4R!D|>g5P#zL#_K`w0Y6Uyr09qR9G-DJdRl=fM5=^B3ac1WtX6y4
zwBTLtm%=QPxpg?iiaoxgLR4dcSMBwC!{mDBg{K19n0O-Cb3GN>01 at 6fVjpOAdaQNr
z40+0etn-Z!27^|hg_ge7IFV0%ex45>Agm0fAkyvgdZAzW6QDYZ6 at M1oJuhUXv%EX<
z?We7RW{zP2b6vAU5im!ZdoDsQrEGDo+1<$=mV8RHc+K}%2Dn=1sHFs6-s^awjO$j}
z6Mw$JMiU48T0Jr)=ZvuWqeNWvG*}RizQ~u{RoP~?qPsqdpM+VF<5b8?%_Pctdji`%
zV5CtOsmSeJ47Q_r4S%+!J|LpN`&2f7LZsd#UT-7mI6y-ISJ~u&*Bq^Q-+(*L7`$~Q
z9@<Ghl9j%IM~<bijmkC_rK*Dv2Ps8uvaw at s*_8nX1wZhDh2KPE0C3|29X5;8Xt2|(
z3!O#l>yQDq$WbYScNKu4lT_bX7!LW%^*yFcPkZ2;GU`N|M1Kv_*h3z2^_QhuyA=Wz
zpmf>TtV_~$?|eJy7Fh^wF^odt{gsEEJm|u!$2#>p%T4`Q&<peqF_&Wr9+O_5Nu|Gh
zC%Kq!v at j|lp)4Vo!35tmTO6Iu1Z~tWMJWV8zLc73tj`QxK^O_EfkkaHdvJ0%uPz#e
zrif!6uII2w+kX>&r*mgK>KMH&ng>Lt{(LJym5b=nW~ngN0($0G31LZaRJfT>8^{P<
z^{7UYr{M^P5BQj}z~4Gm{g5MM*;x?oeoN8yncU*W+L+rNdJrQTqeW8 at dmIB}Z1@;V
zMhB$|l{z2q_fSbcpgGQI&nFssSu#p3IlGzTnz=2!*?)a;3B~?7ezsmq9S<TXb7$zk
zEl0_AR*7?p(9meOV_m5oQb-8goriql<w3W}xeTkiwBP__9cuiQ|3>m$IXFD<gQW-B
zB;X%%X6|f?KJG68B<5o>f7FDK`|(?%e<|hi?F>+`fXb60naMYKvO{+*IdnHd)8Nzb
z?aTzY6n_mV^A6qvf)0Qu!mZS_6igM-%cIMz>0Qm#*{0KuoJ`HjY9k at fyk3+OAMjv)
zr9{aw&|c&;{C at ry3sFt9U*(6x-JKB3=!pkRFJJPB3Z at 6{ZqJ^Rb_Gx6<7tS|Xu>VL
z$KmFyAT&&2BN>O7lWZ4&T>#fG`Ryi{Qkxvejei!Cx&J|}KJ=HAw<ur`ZlXdDoi<qz
z>q&X9CfxCT&3K(Py3PSN^7TIB0EE3yEI~tYx?Atbo+Psab}K at WJc!&kU-m0*Oty8)
zw$)0>B+vW=02C<Oy_o<_?Gi$Q6U=bA0~Xgz at xgk6ICal-p`4ot-Aa5;^}GPS7kEm)
zGJj%WDxcZS0XhapGT}_ADjl4 at gaGG)2p>ea-i($a=}%|1KWBB3ILN_tuEb`>A4pO9
zK)_h=9Otg^0`KLu`^a!{f`lVTy^;WrHvORJA$dVn$*#37I8{%_ChF~3RhhU7^Jf%G
zSO+93W1OX$ML`+ZWi{l*%no|2NXeT6#eZjY7V5N{&>g7rdws^G%?-(MXu~t(7lxb*
zU+nGZh2zp{88xrNt}rxNNxA9)=oM$a3I|)WC=|govFXa14}H}{>uo at D;1zkI`wajN
zrK{NU0#`pXizpdRf(WW#*5Ah6MW5l^w}DQzgv?=J2AdFp2fPpZ%Kb=FUh97^kbfSQ
z?mo6%a65MJs+cD!Zp6d9lefyLzOIb759Yd+WoHy7TdWPSn+~!xC%^j`5{0K|61t9O
z;6^3*#k?CohsxPjd*X$(v10egB&jXvLlANd!=h%(H|0`KK at Q<eaKF(|VfDgO1uz^-
zcPsa^=o!~yy)Eb^q9enH#&0KJ-hZBPx|OE#*)rhhx{UbrB#}8B(B8`#V=D|dc1NHK
zMy~KmxP<`R`3$G;T at g#HiqPHyGqm7U(44`ZG;kp2JQxH3;RwD at +yoR|TTqDy*)SaR
zqrz0FFTW}M93d%oOtw>)`0WPT$}0FM5nAvc-fprX<%}MG^MmRCPE`^|@qb+KvyHGh
z29=|-G{nDQ&m{5yu20e4X+O+uwRlips!T)4DqZ)H`bSQp38&6dp^yS4o1=4yD0T<V
zD at Dl`&GqGV)E0<C^Sa*9H2HeeUUHL86i~tR6>JfX8-}?3R_)L^u#;5;M%(40xQRi0
ze+v)+>6d*<a8~XoJ!tTeU4P`DY*|{mCfuSk{s%X*#5wCMhTYOEmz2`2O-xnU&N)=^
zlD3?p8AH*uXkYK{v_eu23$X at jfH|#oU?jGg4g9A at 7^K?K=Xn=<hfWeWWg3M$q>%KX
zVsnyN5Wq$rM-+MEY%77q&aI+QkdnLx;7Kk)(d$V$n~#<f!N`mKs(;!3e+*JR=uDnM
z={Ck<DTtaoc7z6rUfiZA!_wKMe<~w;n3<zKBv!iL?LW};vQut7p5p*(wt8IXtd>Ad
z%_e52_oKob<WTi}r*d-nW8}|n at bx;aDB>f&SffdMl4~5b3$u3 at kbzQd4vNc(ZJ$e<
z|C7xC>)vlZ5p@|}Ie#Al^vKIebv=z@;+B8^w$Y9NR>M&T-m)y36x~zLbPe!L&4UmZ
z%FYD?HX=7B_EH$@Y at w4V4W^Cu71<vCg%jOkpX^Wr=U_mNE?B=Y3Y$v!M4{>`@(UqL
z1QHY41sAMu5pTQwpsuxM&=9bV_E>WTia|;q4XPoGQj$Ndzkk^3Q`afaev--x78`4z
zsdS?eT>zZDi7l96VuBPt3^*t{#%J7_FTcNmM0oE;N<-xNd>d(S0z2{`1g&E>RZ^y`
zPn}2yIj6(OEI}3yP49ZVByG}y>$H7_6A2m;(?)uH34cTsmO&w}$TAGCchFQ^B*l9*
zC1_f-3H?Oe!GA*sA;q_(q~j-%d33h_gu-FXE>oPfL9U!5h{Qgl_%FdBYu!%-7cC;E
zH(f{OSp~XMdDdBa*lnBzX7I`X6*NRHM{OXfW7`T5cg5V at 2!JKhQQAU~fUY}{97cuA
zxCnoRjkt&%_U{Yk*!$?B98pL$bAMsG2?Yn(EKPhQ27joHC=Za<ir=y2jonSnh&p50
z?EK at N<gqgswlPxhfF;0P7KqV~SBWxK7e*PH$HW;O%_YKaWM)JqMVYI~!lAwgzHF3s
z)7$hcSN36)YQ^%nc_)>bI*r*LyYG(u2J16fu&y5&+aueEsLb&8%;OX8N{bPS2s6bP
z at q*W-4S&~o&k-roNm*Q4#1ii{6A7Z<e;>!mt&xTL<d8ycFPkaARh5Kb4gVHWWRcu?
z<3^qIf`_s&CTgz}wgljiZm8PGkJ}c?_8$F+yZK!-_^D57+~KSl{Piz6>bc(?<v`lC
zB{Rvr_b1YcDk)bVcZhYJh1ZQ&K%0zp1MLy)Lw}#<i5^g%Q6jvx&-p#hLC`X|lJ9qU
zE2FRq<vsmEw at g2nAM!YQNE6$qSXD%T7a}2Wz_1X3<E)=;lI5eD7xPCyk-V<OJ(R=z
zpmX at xp@9nDHE^@QCQWJ5ixj*t@!uvB=?<=(I+3$X>tmC<5m&oF6XE=hD5hyFdK51a
z`+ovPY&gi!8v0a6j^{S&jP6Q9t7Ss5F~X0gL?;-AzyAY6cVC!=Iw)Arb_m`5*|b~+
zx{nB`4znf;ZZ at 6fZ8e{Puw-FJzL_O}a)lwidEVL4S0YF-D{hfEbRMge#h%GJExRW!
z at UTVdOb*(xdwM`7WnJ(^+6kE&tL6qZVSgFgm5;sYqzVK<Wr{c!yIDE(#AMja)!w2`
zLrfx_HU5L;0fknx<_Y4okvy~%O at Ri72wDD5<dD?5hzptv?XH-I1rXn~S!$ST4Hmbg
z%cX(qXXc<mtU?xEwyhjNlZfxW3vf at DbC-;>#$?=EU?F4p5HX{8%_a0PV7um$GJjl%
zc7GFgNdl+y&Z<s04oEq?7oU$i9dXH~XSms3Y$Seef(}KypqbwBI_EYH%bl}-odTZE
zkb&#x=?}GH;_sm_ztM+XIM2yfPi4&=(Bk?R>H2$o`H|D#v~BSP+!V61%}*4chsHOZ
zlbkzVAl!cJwiZTAWtuhBwDNJB2Y>CVv!!)jwU^E(Ed8PDkyP>NhHeEmL|8g5|G$;#
z_9Qe*jmHeU^k`9g6&I{IjH5!D#{{P^o+fm%@slohj=(&$mJ5yXNmIvi+MSKBndn7A
z1ZMk885ZuD6SgD>BEyZ#Ki7I(!sGI9>@a|xa98#RkQ+(Ckm4r#FYuj$`+u^19v4x4
zCXQ$+YcKU9BpLUs_2bR8!K~7`jHCd^y$e!TRCDJ^R<f>{8AJ6<Ca6us=;+n{Te6;)
ztOgYV7Dk`10&sTDr at Sd>O&DHB^AKxUr$b9kXMAq~S1rvKz(ZcrH`66!dn8BO9Q<;U
z=J0SAOxYFxFhET_LT)N=Lx1Ax^;%;TwtxWsjJRDg?b>FhiD&muT5DeN)I<0XPgzqm
z%zpk(Nr!l|tfedX#m6hauVd*oE}`pwU$3Aluu2kFiC>ivdG at 2C8RT9rs%W0?@utoo
zaCVhI`>v7?xrR&Dn#6-CT8RCwCX=1;8-n*e;k!dPh>`{lA0L0&OMkkeze)`@hQ%5c
z>|m9-buv37s-v;bdxpCLC<vgcz`I9lkp<DtRC`SbIZ5rS;H~$OQVG6SMYpX4jvDT*
zF^pCx6iWudU at JG`iv|X2K8(McF^JJx#sTaKBgn8&ow!Pzu>SHp2qPifq2F%LQ)|am
z%(<H$UaXSIST0Am at PAKL15omQop>SzBOQcDz~#}BY)7p^<3^G-9;iTU+N>5+gq1Bq
z6?BP=@kP>`?d7s%<e9SYl|Oixc{3X)Ppfwd(`%O3M5mDn>(ZgGm$twbKWqg}2yuNt
zG^UB~q(7K!Ltf5{SduFdz;7p`hVn5*@(#R65(t?Dvdw at +(to16?7w{otr*SnJIr&L
z6il5(YSXLS1~XuA`(35q^G8zSl0U`^WqX^M>?hzJ6H|)cf1_^680E>dt_>*Ljr~#l
zLj`tp at 5PnXCVAZQHZFB|j5ArTrTl`3hh$CnX5N<y!!25_EsZ$Um@;fO<_M+`r5LKk
zv(Aykq+jg)yMJN3hk at f#KGRHrV7e;TeHf^NR}`;}vO)pnN|*>Ra$E&zOD6lXRZS3$
zTF)hZPWISDWfDIDTn1gtrw$VVNj}}d-sFa)BTTTZoLd*T*nzy{hcAPd^yDDor0$Mg
zb`bzcHFN&6do>)<pma$TRKFxoda{-zXKTJ;>pTz$8GkIm2#VZRd*INg5lFpK1`mH6
zx`=xaAG64U at 1y~Ol`EI}L$Q6NEID)Hu-{(Ek;iDiQPzol0kr?_u_Q{}lc;HP%iI$D
z33F17-m%@S3Qu-A5J5#vJqjO7a)T;er{V}UnYR%gSSkrX^fP+hWe~S>dwrEyvdtsd
z9_>4gX at 791Z!T=h_G%a at fw8m_SV>9wtKa!f<JB6d%N^$(#gRPko`W|$`tw}qRNY?M
z=M<`2l5(0Jre4Z!br9D2<3-%2Y(ec=X8#>y?)%2)BdM2Vo`5FFz}6D=e%$#-I|sGy
zdu_ at V>Y|G<k=_yI#lCS*chht2xaXR~Fy~KX$A4ONd;gUQK%P^XcRpr+heQGXa_B4)
z%3}>lnZCOJtUu<BY>#0S=k6Ch6n!>GO=IHY13uZX#@F+I-8X56?m@#}u(KIW1L6=O
zswqtY4BusJ?<;g%7^2lI77F|zjg(G_82AETuqRQhwRRN|BgnM%ukz7E8gFyTbdIYa
zSAP|~e2P+uRPBGP>Io6{2fF9u=I>qiH!U{vtlX|F*fLZ`H0v?I1^vjg;z(&6!Aa1@
z&d6vpZi==zyaQa6#lEDu7>(7$bttyst0qN`4sQ<Bp%y=VJ}b6TX{uFKX4oyxFMIl;
zG*E->Pj)xDE_9Ij(s$AmxDDE8-47QxK7UHKVF4P}+JCRfXm!%y0yWXI6#+KOs~r)H
zde2-v&koskP#1JxCE<_i#+4s$|IgbydXpxqbQSQti%sPjxD|k0$@Gl#F3T81rng7r
z&%ykdWie_+^5)C_U|Roz*EN+c0F4MC`L*|vlWV`OiLCj8Wh%!WkyBl6&iT|)Fn=c&
z016&{)cq)oN~cawL#UG+mso{gT<X#c`(G!NbzCCS4~BUVY4^rXSrDQ=2kG?^#W at in
z&Zb2{K- at q-$@i9M%Gtv$FlOABeB4JV+D0Vn*r})nbA}5b$AH2Wlu1w)q%#5cNVS?E
zJ>y!~=}MyPB`!nux29U3hdsNd_kVQoVfctWiSUK at q5oT6D6!xjO~j9e+#%Z%8%^?x
zKx?uH?#L%jDS$ejb|8X(X}?jeX7tI5T!rwnRlh|3?$CdT%em0SjUD_lQA}I at KfGv^
zUS{#bgS!h at uXIGuVr*~tI(eTKtSvg$Ho<E-a5g6*a(pe2Edh;B&y6M-G=F36sVq8&
z%3#oL*W%Om-a%MWS+3PQ at SdxR1rz9Xh&Ft&k at C@1`93JfwW+i$K(k6t#g5JBi4H!-
zwc&1?MJC3XZ3_J<Xj+WJ-{a&2PK%oSPm1aAm&M3$VvQnEXC!`31$ybmxso?9(^-cq
z45Wh6Rqb43WFow;+ at dmeHGi1*=BVX;48!e=Dp$^7YKpM9=B7JQIGQ<A;Kv>j0?L+K
z!s^mtmTS#oF%wn2QFX=}j!RYtYlprPsgxhP{mhSFYSp^yqVih|^2VzY&BDw0M#r%E
z_6$hY$SYWk>E*fcdC=y+&nBLetWu)wZ at Ky%49T-(mtV_uO=duedw+J at zU?s|VZmLJ
z!njbZ%jIG+e9=A02dAkb?qsBy2KM&}g<VOk4b^&raOO^uIAKms4k_s;fh1D_se>da
z>u^3!>k_jf{kX=nsll8sMT(M9pVAu0$?&}rO*({EIx- at A&6>!V^NUo^pHDj0W~e~K
zs at hkw#?DUxymmaW*?-$jh$vCB_DZIs_>Uo=LcGfsii|wWc#8CmcrcB|fQRXFU`y&h
zLKqVs5~?#0zIk=Xfsf|sRzD!jAW_P4P%ILLW>KR2bgPXoYvS#64|okFo$;2o1UdTp
zjSwo>zfb7CqbWIn>UuOmdc^gB?TXfxgS_8*y~GTI3Zuv!aeoUSv0n+Kn4#Lt(gjo~
zv?&t=3^_qB01y-&Er+}{DZqmq#pDIs%w+UpTprWEEw#?AE;xH|#a at XY8hv-@NV!{$
zh>dk8a}cK=pXbYwioC<FfW+e=XQYF>OAj6vR#XXFmkM~tD_QuHLz~3x4h8{f at N%m#
zL-V5EY`wNvT7P!VO%JEMP(;s{1k*9hMi&~IF#??!ASWD3iVe8~E=Eh1GZ=8u>J<xz
zYJ$&n&NsxnU7cC(cbiXc+>w&8hH&i@(O+`FiMVV{CEhP-{W^n#coj2lg|aAXnSZeB
zx;5I<b<*#3lpi}Zp*Op+lmV;au$vUtYw0%x;w~bekAE(XM~5!RVw!T20WvP10`8HI
zE$Ri*;N4Xncwbr*H~e&G@<0&R6C4ckYcM22g}3m}Ng!Zp+fYUaW?VLta|lQO^ojtp
zYLS?_pU590ha6YhUvy*Iu0IsTfm>AsEW#KSGOzFn!$RM)H++wSCY~5XA>p=c%@cm5
zT{eOb`hUb*nL~r7U-a_mu-cfOPat_Jn at eLNLe1R^RD<y4W_|ykfG4i59_4Y(qQ=2j
z1>(RJdgFWgrPNMWD at P=+(h4M4#YK$!w=Hne9>3R2>j3 at k7b-m!8V17p!<W#Z8z&d0
zU@>Cg9)v+23F54J0bqIn4Cu;v;DXLKKxOwBEPtRFr1HFJ7HWA$_ZywGkujr|b!2vb
z2;zr*M^j>;QKrr=Ht9=2-B))Bttnp$YCkH`wv6*B*uvCrU?fY+C?^VC0^IyOf{80L
z%uQInEYgp<V3+m`GL$`drcR;gq*CZa+ztuVPiAk;;rQM1%$7{~iF#!YvJ`k#?g$7c
zK7UPO01R8W^v$xKdMJb#<T!C7V4ZzYdx$<8ut>3uXi&!C$!UO$0IZfHZrR9nGA>(+
z^}#TdF~5<inx+f#^%f{d3zYGDWM_6yO2H;T*5Z@>KN7?RUloQ3!JQ%a<kQre*+U^x
zW;@_=l(RRDjKG`Op9*MTuuhxNO2SYq=6`2+o=V5aXTt2(D#)A|iR4}t&r8r at Lrlu7
zO>%cNDRc?3#>q#;!iYy|n@?7pz^X_+EpH;4P at dG$nfxUP<abpPPT9Ej0u?b&!A-Qs
zw!}<faF?2L+?>{ZRcs0*voKjLar0F^8-5V>V}#{mY{l|X`rj1muI%(aDxQomXnznr
z1I89jG4!bJrd`_w%^~A!D)qYU`E<bYr&61hV}rkA$>zk#%Zz{G at -yQWS@Xr!<JzO5
zMM$cp at zml|zZpqP=LLkzL2J5A6NS9^V<^$>iDO_4;}-Jp4mdQs at sL4uCv5A4AU6aB
zVTK at xd%Q8*n#bypSK`tg5$alwk$<hX;to(ahy&%)Z1$L%sWu%=pDc*b_9+zVGy6`)
zzjevuMH=b4x+!7l&|h>Mh?XtTVO0S<?_uenKA26;Y1=Cw(S-B}DH9~Nf3pK)Tm694
zgC;#sG6~T0jUKj$4}g3WAmmxY?}Y40Dg#^R^M&8x6OK`lof+A$1SDrXYJX%PLx~38
zzSO9>b0V>SEQ4%~)tH1*v=xa at JA=hn{5-&Zyf9;vqA09WLO7oG%S+35>plY|PKl;P
zkIKMrMMDEXz+CXFVC9>-<}9T1GBg7yj5rzd78m5)zB-=GM)O6o!4=?0EgC0q0R@(I
zSV^Du)EuTw`Z4a)Fb~edTYuWJPY2bLyn0Z;!uQ$ELglZLbd7Nx2hN>=5!{SB0hooD
z)*MC6`|rDyxUnQ at Jcw;}Km*8x=5dM%AHAcwc-6G%ww1m(4GxVgZI>0VzwllQ6P|+&
zv-_a}y$*2#Dnq6Pno)}LYp*tr&GwR9T1g^$FIGbUn2S*MQ3X~Cm4ErUKyEU^K{!22
zU)K|5_f^)O`xblMC^_%WqOwSDzq_%$+x|^_WZ@{I(=s-BPb%awFc_g}N&8^p^A6{_
z^8CTayGm(_<1tP!SMsQwUZi;`Q-AwQF<6M(YpmKlt*FY65$Z#M6IpWJOlOAJySwIC
z6`-s4hB7g{+6^F&2!CjT;ngdP!m~tE%_(XfH!LS_)Lz=WB14Q2TD`*0X+s)5{s%R9
zfvIoDjcj$&i0&Mgb#_1|*TiG|&36K5i-Y at IHZ(GdrfTtQuMogM&=}55 at -+L$pcDOl
z at QBiqTm{{tcfVI6h&MsuBZ=6(MW#3%+Vu~}7{B|}zixw7?0=PWchR;>WbX&A9OJF%
z6&#vA=Gj!BTx8^mCRO9UwuP2*0b|!yA(|)85~O}w{0e9OxTooCh*!a%Y!(L<N6N>j
zs=H2UL+*~wXbWuScp?qYD=oh;WM{P8;SrbfaF1R4Tg2s=g605pYi)71y!mEr at kN*@
zHo-#Qb20gaMSrNE5_j4J{CsvKkybWYm0YDsQ;yEwp#Gj_!G(DCLZu0pp!?gtHSSHO
zJ%LYwTg1BG;#*IPFfD}!5wP7X74bRvPL4ulH2yf0K5S`*XSC=O%^9v1lWXFMO}=#K
zY-mBWnvn>YU5EPmye86K*AjNUxyN);(jKSt$Z#2`mVcTqw`TmH)+|qXKvCvh&|oo5
z(GMI$TI(Ju6&6d+QeejaO00m)gYHw6rP7?Ji$ZZUlhh+lqx3_2tq`UN at KW?31i_A-
zmN7M`1LxTg1HbYcWi-jd4j^;bK27U_<BBpuFg+8DAbjd2oA(;`+H$>|GEur^06unD
z>2UUa8GjmPg{@nVoSSJb?Nq9%1E$a+-|K*6rQUt=nZ at 8MvgMOO>7YfrdV<N7rR!zI
z&j-}Htw$rXjd5Z^NOTz5XvgT4G7@)Q9a})+MUDgvS at dxpI?^sYe58-F=sY(@Bve}P
zTWk6;UOiSa1Z()JUpzmv?mn^&LMzwf>4uWIZhz?9N<L>54N1my=poW!p at 2Aw5$*7~
zk92q=$@#kV4pfy`bu<j(&da$o00ngF5qt65DNqZ!Sv8qPy;D=#(e!$;Q(kW at FK?pI
z((woMrTPe+>wxU7f`&hPDgM<>KpHGD&9WJVWL9$0_eQ<)ZWj0Vgzc7D-Z4rj4+Ok&
zn13d%1l?0Ix(o5Bn&=x8RJCO1qSjFseeTBuw&$Zr%7GokGOCyA^M-c+FWT`7iq>Eu
zt44J<mFpphnX7-ygW`3l<b#AY)ck%B{|a3Fsr*3a@{e-FRvGa2?B6&|pWHxltIxW(
zKXZTt$HOx9=-kp>5p#&}uQ`DGd~hK$Vt=JMG4FpgvF_!cnR?++?Dl8^S7p!?H>qG8
z_xRAzl|@!{=r71M99&KCevIi#UowfN&1i{|Dq`WyzUxB5So2|B?#pJ?t?@?=5U%om
zYrfx3Hm2>Z$`9gXtE1D6PcTZsR@(P7ER1v@&M(Ji723gy9G;G}+E~zIZ-cLL-+y2G
zY$p at RW)V$GXVVT}cfSk&Ykvo6TR6QqlbdX)0qu;Ng3IB`#iA?4<9>`Ud1>2TAYSht
zWNY6Mc%j0SqA32Ez);(rrQ}^&5JfdsU`<i at A1z2-jhGZtvhkvaGxnxyr>EIgqw at 2o
z?Vu{?oVZ3C#6;r0yXI?Qmuh~(Y=2v@^c$zgdv^5#Fpmbt4;=P4<-9`Xu730Ryz!9b
zJlr(3g1i>*-@=O5iX~`jhFaML>zIBnHzXr#jO{eecw73NKh at ZCo`A?Sl{&`&P&o^h
z(%FYBa;g8shUK6vWg04%<H07TBy<maLjTXihdvyH$JFL at gCD<=Ymexu-hT*G0?#-G
zmm$p0X8<__(47V+7R%31!au#GFk6mxl2`@Ot`f*s3WsYHe#WsC%@GoY9Ikj;Gt?K~
zvyxZh1n<zUQ+?9fu3sg(<~F+RT_GPa$5asEdqjYXSZcHIIlG(_`jE%_BwI`QkTgC7
z{xe0*y>uOhYGvx9UP8-`lYimKPpQdWEDSxjoiULGPUZX4Rjp{8s$H6)Xx<wKIh^d_
zt+ at wJD9;An%kR6$n}wnPGyE_-S+`0~k^U6xK~r at Sk?>DiQS&M%wzO}Y7YgcQQEJ>O
z&kwSvIydb!e_nYb(TCjm8?j@^h?j<u3*?P;zW)4WI_{3DAmg}<D}VLMr<eDIey1Cb
zQoO>$i8yZiJOI$EBe`*sooVgIID2SCG?ebQ`)m2Pa_0Z8yDQ5+zZaQ3g7mk(?G42c
zFHOlO4;H&JkRpA8{0J>KyfA};@@>FORBSw?hz<pEuKr at p2_~G)-47>eGDD^rKeZ-<
z+n{c<Mm}2AW@$IbV1K|Y2l4{I9+~6pjF#0kqaaIm;_>OnZFF~Qfp2>aewjm<610Ld
zStuFxS8Bgml77!PbYu_7RC|V3>ja64-*2H|a_2vBG4J%S?>@$@*u%EV=rW5UfTuLK
zt0!hd-=6M?!E3Wr_pFrU<ddmo`}kStRg0)E<%l$>@PA#JLx1ZjO6oYjWumIHyk44`
zf;}j1G>iqDo~PEcDEA!>T2-rn)|%+V at MC=LSx(2uolUyA5C at aJ&GY?mZBy7uGgrxY
zb7f`@yE)gvsHhbpimt&&$v`44L%A6pCHW4*>ABte at PbEn5)BidqlV*8D4D_<6j-)Z
z>3^?w{_s at tvwxErY$N=}L?}#4x;t_LIl|hYR{l79gvkK7xN+LmzDO%Az!dN9w|dTf
z-lm;5_0@$6R<ai(MVQ|jlj&<m)RQn^R|Ac`YZn_D<iidmA6(SeRPh5{QoKsZ^>zcG
zM>pfZ4~SbtwnpP_T#s9a3 at 6zDuso+8==R<q#+fEpdVifTWWF`(rI=rjZA%>?kU_xx
zr07}@G&;Z^=}?U}kyC{EuWDA)0u^w2K`kax`7^_o1;!WQytN+Gu^t{>oyq5S_xHT5
z2kL@=nr06u3s+Dl+u;}T3!4}M5F=}{3A(GCO#+ZGu!vnCZCH(e?_-YyP at NCt*6(S!
zY7Yw2vVUBjS&QFJ&1AW+HO{9vB=+g>Vfye>8;6}bnCJlKry|>uJdtsJ)@iSR5*sDW
zi6%8bvZ%ewLXWXgwS-Miqi`U>Q$>a{!oJDC6+V(gdDb_QcsIgs)R2xfk-mF4F0f%<
zq5hB`N;2U}P_<)^6^|ktv{Jxt8G~{z%S8H=34f{J_OnitehE`iRo^2~SG`0U$_|Ss
zgEyGGe8djxAV#gZ-XMyI=2b>@^}08&Fr33$wu9{M{B_Bn@;cwz`z(BAHIb}U#@9=)
zAAZ=r!q*uQs at 8u48;;DIthk1Bf;r5zEqv{7vW}rre&j1 at B6*W&%H`;J#9W|CCq^pw
zr+-9bcn<rOycyX$1hFQn(jngUe0FP1ovT^+U`#?>f3PdeGH88kll_pfVq=E-|8DLI
z75^mBNv#hldM%ToYT*+DHDLzH(ZFB4SU=g<ZC!xNB`RCMg2P`Y{k at atl}1$x at sLQZ
zY&dSt29c$EAAlh!%JsWp at RJxu9;cGPS$~UJR7y9mQf*Ie_i*7BDy>v+$6BIu;>C}t
z)?6!pS%onQP_IfkejPz183CrPX%QPepr40fi1Ho&u#T~RUb=S!$i+9oGB<;8n-LV1
z_x<i5;U~6gsQqrCuLo1&bU}D*?~Kj<+_yfAt)UK%0}!7*wx?1>TSI`JCO&sS!+%8^
z>|z;Pk$y0sgNAP}eF#jOgpfat)VY#L^b_x#xvR#Pw^Oe+&8P8j{xyl$lP5RcYY=Ge
z#8zcu#8w5e5~u|Q at 1i7-g{8`4F_1M$Rk-krzAZi$#Y at EZ{O{HhDK{n<_pVm;XWA23
z+5Ll)SN-H^HzSO2iq_0RkUYe}?|-;1qcL~k7X$NkR;gbrDy7NaA?39VoL3)mzENTK
zfaQ;gE+__>H=wlsjH3zXWNKjj`#Zr$j<e&e=gh~KG998jkyo1JkOGc91UM=uOY?=f
zYoEyd7Ll)u89*8LT$Mx*nZ_I{<_(&`nrJ!lL^xe7kScNeUSJVO%`}_ycYg(PJV?Z%
z1$6X;oV1i&E1>Rvz4Y%0dzgRiUr*1|Wxp7ysurY=5s;SJ&7P)%9BlOhOCL8ziWc}l
z-E}pbB0z+7%L#54Ve_}jIgq!c1bDEe1x6!YM>LHtSZw6yZ#}50%qj>qEb0rGiu-zj
zcll8e+jwM!+abwz$lk{3oPW(^Vhz))EbVMX8X4(%gm5E8pcZ(7NT$;E{@;;TLtH>o
zmptOl6}Q*bnjVreK1^l=GJye-J6e<j+?2Nvc9YZ?HExSZ_6ca4W7 at MBtX~e*eaTlu
zIna+PeZB1coBY2|0ZZPTFFSt}7*)Ucg!b#N&`hy~)o_Hxs)^lxpMSLoyLQgbE_cW;
zr>UhHTV)IhKRh;SkTL at _N!3|CMd>e5L3136Z`8<s|L+hdu%)Wm at W8k<b5{JmbAfr2
z`8I959SJH%^>Pt*{zMRhYmx#b!-7zMF_Pi2L%al=`n5cZ0aS)$C{EU*PY1{4CQz-_
z)iWRIQImprBzK>tOMesekcyAfb<Z<GCBk+z{;6F4AtYA?dG_NV5L+Fw at lm;O at 6zaK
z)@wzGvJt`JBQvb!@!z$y|8j$rrTT^|Vzgg0O-pnar*Vddo>-(Z6SbllpTdm^S;EaN
zClrD<h=Wm{o(v(Jj)a{Rd*_Xr(pDBF<)kJ3-)9d|6D#gUU4N$cE_SLE=Py+rb7&48
z<8az06i$t-d{9y0mN9UG8#dqi7z{JJPQMgqINi at t#CC`FL&DWM;G9(ojBsrgJzyIp
z#jj9?Fm;|g$Rq<oWO-Wjud_NfjcVkLu#xQ_((#w%keFNN(z&ptt`YAxu>zZS==B&3
z<1jb1L~G*_B7av<RWeh~#l7#%No$K^>H#+oWISM`%V-ET{O40Id?QqwX%Zd#grSX9
zZdW_^Sp4&(5R4^>n5U=xl|v<}hJA4qCT43gRLW5g{*F!aW^n5d7tXI=SCHM at S4Llh
z-c(4~LnNU2j3AAp{dmKbrJ?lxJp at lDE$k}QX+>Bo7k|vbCEm~3a<k}1`-RM$nF3$o
zj<dOqP-xNZWqGHV(L#xOvGlG9Mc=y at +CjahE1{~lynCpVq at 51jfw~*q=d~f!Pwn>;
z%Wgjvcb!~Zn3PUH5Om(aZW$moLLkiljJ)5TRz#U1?`iYUk62Cpa20eFb<`wib##s-
zu%$h0jeq(V)j)t at UCRox1srL?TFO=|;XnAlzXg_=jF9x&R!(BrZf>kh#Sv7}4WXXp
zA85;$AgYje7X7I?>R3yr6k1Q0mxjTpum4I7K9qzK=cTurFz*YLhnaG(_TNP&?Szp)
zLh1cip^(CtH1H8t(@DZ44s<iYlT{CiQAl2Buz$3 at umrJ&!(%>0(QNS(TD{%#I{o|u
zfJEn+#K?Lf))fH5^=`M-u0ta3c(V%h@?fyTDBE*&816v_<NWn6C!c|SP1;8kbzFgT
zvmPO`R2#Li#Y;!^hj*H;KBuGeQ*t`YdOaDe`|B_Q{~t1Y-PSaqx6*YLK6(4kNXwL~
z1Ah(DoVqTSKzoaycq-TGl>`%`9tc~?j`R8h?z6`NlPRZ{E^e9xg+{Pvp9nM9hW=de
zT2wvK_cv;UMO*g)M4~cb5CZ(swm&1pycUoW$ThtAZFMmeq=A!8QQ at T=zr`P13!t~`
zvMq<<2vQ+NlyK%DGr!Vf-rV;LRy-tc9DnhEHq78L@}{Rc9y?NskrE^jmo?^Z7et5E
z0m~k-XP$Z at jHAkTi$r7E<UVP^k39ctBq;G}z6nTGHu_^ZlPQkZ*(-PQR*bb at St^4R
zeZeI4>GxxzG7ZQGZQj1XCN_qz#z|drem95=@AR~$3wBFcrDGpQ at SS!W5k)OTa(~ZW
z*(^*BD_g<?o?9xxC#-n<wi<@m9k=LPVk9_r1^8MqGkrHEx9g3BiEUReBwrjG`Ne+c
zy<WSvv54Ofj&qd#(p0Wx9EJJ%4-zD8%tFvTx5Jve-~$6H*=2gFJW!-T%5pR9?szD%
zbaQ!mya<h`M at 2t6H{n2;@tCw<&VS>a0>9(B4)ae=sz?7sn!UA{v=NYcJ7}7ChQrd&
zyb{4DZx{s#W!X|{D7WfpB^bT&$m7u=Mqv~HLdb#$l201s5h!52VAx&4lx3~}NdGA!
z!>{m-t5^u{7^Zsa*@i4m3+FH+*B|7~tA|a3Jj$^+XQIkd_h>Uepv_IKPJgR&vVZ>Z
zGdyQAy7OU^X_pgUatnhW;vlAr6o`HmGjB&bD)Cjg&$^OPc_v2*>xaxQcS$wqee=%6
zr6i)qn&}%w5g}O4uQYsCd&RU)KMZt^<jF}nw~pO8JoH!yasJN(<>-K#x$JIT$BRpy
zW#<HGj8Ef<|M)NO_a?3jaeqnP&qAPEeIPiFeN5UD+w6P~Ua)Z+)uU$U7*%>|SWe{h
z*|f4#PcX9wnf<vPS at P;hKc24#Ar~NBZfyrM04NY4{4NM>kTDP|GH~+1M=z>-8gGRB
zA2bZOASiy$s;76ejk^YThiHWA8!?D!x{mZn6C at au`$kMMx$i6M at qhIZ+mWqiVXwj~
z6uB>B4!Q`6VHTgR4!fkJKTe5%Y&#Z{Y<QD)Kmnq6gaT5EDz)M-H&7Nb=s8k=gmPFf
zH$p2ojNq5IFfq|bVX!w1s*UHsOIsdv6?Il4T%21gBnkZmVd1%eUma=4aMs$nk0TY-
zW=2w~0PcNIMjZ0=3x6L%`q+e`+;`Dk+LYQlnnQO>q0Yg`aW9C%sy};2HKVWSZ(F1r
zB`8s`kl=Jq+aKEJ)l69tB_uY6P>c_ftd~00b%UC3BIuaVvHodM{esF|@&{0}ayKJm
zOPywTQJE>W-}?@3X at tmAbP+6dD(cKjfo6|3UT6E$#-Cp~a(_!IS%x{{TpCbBiQV+_
z#j@{B5SmZI2Yn#NqLC*?$|5hsvp_8b%67 at YOqV|r*meRi{*r<R$&o^0Lr&OPGXBqF
zJ0_p)>NH=U-C7-x3zuww at Rb*bw))Fd^RF62QJiOuM8j~$4(L|?$vkLZhq|l62+tB-
zSRPIN&MrQjYJbieL7d4%X^IVYmm1873VfQHj=51hgAVUE!rJviFNzp7V}(EcD{T{t
zE+nxpcI%7Fh)C!__#-ZuSN`257)WPw{$a_ at svSX^J*-{kg-<-~MMgPw1J+<PR(&s@
z at UbgTzxxDkAS^Q$HHUwkxMsb;{kJS2o&E4AM+zO=;eTd=6P#p#Q#^_h at X=+4#RCkt
zKUDGKVHG5agFN}otG|b at L1?=m;G$?6paj|o3D|wUcJ`TeUALF;_)Nj$Xc*0uV}2;R
zAGaOA;?&KGzR}|ZI?~V|=G}&ak3PZF>UyQhS<6~u1n>Cl)#1GMoBNz(KO=3Rwb6UV
zY|zc at sDE*c;KBM}m=xOzAF0OTl<6yzH6 at _NFm<;va-xnWY56Q4S14?1w9f<<((hAU
zKwKANx(W!8>oiLzb|ufoj}clwDtulQ7t>Au)dJl-?};+no#tKSFT5V8iUUt9O5WU&
z5W)i!S5PC?>$B}j0wCejF!>&LdSCh7Le%cZH-GABNGTBjER?d&fL`|Gk9PMN5mtiV
z<J5G5U2>z2Azi4?DP3Ut2?y`pLn9|QEY{F|7<$_Ttu)B1W^{+M0|CRf4A=PeXXZU$
za;`+k7KE6zr;C(9L=TnimkJ43Kw2mSERREEL)|ZOn(|_AIqko3Q9X&oIT!-O|EI+f
zLx05eT}_a4%MbQLZBb?;sL60NfeK#=9t&1q*sWFPFh%=G4ylk~^1CXJ<2Y`OT`zpX
z1nY6lWLcAQEbRr`afunvqs($Z+HX$_4Yg5v9-di%lW(F1VCj(S$E3eDmwdIMMoyr`
z0rh7m=9_3=<?*rtZAG<Ahn76f_-;M7$bZzeL<&2Ff^9K?;Ip;Y7-35-F+7qcMbK%7
zd34^aWoa(G at e@Ct<#|_|i$qoD9Q-hIdlad33??!lzyuYkTPhJPp*n&7VMf=day}Z8
z->i(G!Ol0P0<mS5QJV*c)fdNCXyL2+#8%t)=a`JLcLWwuODT(e_B;;b<hoMtNPl=@
zsu$mL^O|(j(%c<iNdK9X83h8jzgP|r3W+`cKRJJ=If8GOHQGFY22hAFLaPGnbZqh~
ztvx;R_lZ-B(t(Una!ntGv}evKmdePxeV6v?0nly_XE4zgFX-x3XvIz#QSYodzIZEH
z>5{-mB%v}PvI#=JoF(y3&lZRw=YOKyq%+*FG0J4+pB1TxW{7*0&cVZyOidkV|8Y|}
zgWULACc?C7kV&zm7{ZV$(B%_VHiQGCMD1l@?0uYhfTErfR{5eM?^YxiO626pnco1n
zn3Z1H#D_<2on_RHFGeV87@>9baL6Pg>P&}`#(9+y0v<=ceH7lne6 at ih5r03@4V!bp
zE98shqZDLJ_EFqDc1C%4Ehmgs#z?r=?jsCYBy0`4t0wey9P6D!7^(iBpe-B&1DVyI
zBcuB4dC<sCTgiLkl>shNR;Wxs8LwVp8dZlJ%nPi3IHjY+5NZgAx-?_8Q!^Yc%gHP5
zsA`%D4FDDdtxc4&#*g&+00Th$zkYw{pt~3KVu;Eih^pQ_)-MsxL#|*g(U2CkNg$fQ
z#i at mfFRvoXI%K`MKeR$c6w(R4I~1MX>OKneXg6msg$YJE`~_<b?(<>KP;RS#;xPeq
zC_;7ASyV->5MQ{jklha~gSpcbe|u3*N-4$}L at Ku+e5ZP;P1P7`Jtp6?DpY at 816uqz
z$Qmblp*MxgoOI}8ao6BW`2p>~+)qjsa;XR5E(JP)VTmrB*DC<&741_45YF%6r6tjB
zYG2AsbRnLLmn<QsD+L3t0b#UXsXb^6D(jVzhGFB1S)x}ftUe3I$+=5atG46kGQqWA
zAtB}Or&(iexFxK~QcH!~5-We7V{(@*zyHopgdW;hhGzCLeE#Hln%bIPyTv}O&fL};
z6)O-TZs><b1U3G9`0LfR3Y#vAv at 96;u`a2hG#I1#a{89`skeVP)aKy5(#`PT?{&2i
zkS1Wf%xbF|hy;2NFj#W7J|8cr2h_vPk{@DAq;Qp(z4*t-6vpo9|4 at I5{kwE8c8KuS
z#WSzk8W(iW392dmGVwX*=YUD+_+36p+jikR{Gi%^z0ft7kt9 at y;VKfp at rEhWbe@YI
zMO3JMI;6jd)43eKk&POS(klIm44}hCtaslmQH$BGS>EpqlJnO8nNDWef_vOz3G?RT
zSeNh)gQq6|Ws(A-Av1s5m#Or36X6RKruiO9oyYQK3w!|J(~V_&Lph-ut at f>?Dk at hc
zXJnCnZ=-X%BzdkHE95(XwLPUmR&uR8Vu3FRax48G+*v|i#pIrKueulUw|h{^MVZ#X
zb8K|`w^9)KSLG`TE-`^3)3W<AsT%y5tlq9dpBw4&U at Z%Mo_v3||Dj{}6(8<&!!9@@
zlI4zW89U1lejMJr-9`U(yx+)gF2j3^hjyv(^B7%J-~#~$Mh;&BGksX-AaZK at kH4du
zzrJ4Q4)4TqhGN&nUowa0OI$S38ISsP%$A#5K-d at L+sC_e69#55$Sp_4;-C)<2~OY%
z!nye^b5jjT*nEGP+Li#g*LusqiC{qx{C$4JWtSOjMDGSOK*&)G)f|Euk7ELR_&L=H
zz+G%zLa~ctAwjHXC*p}9`(ZTpwl$hwl#_6k<(M$gNvlWmiJRTJIlDsLg1e+OzlKJ4
z*gHZDn2d>jUMA7_wVSV|Hkjk<xTgkc7C|4BqweWLV`_hw^T`aHh<BeaOInXDQTlm*
zC6hrs?P^4Nw+_b>NusOM{=M_4Zl~t`;Jvq&$94;@W)S4wzOY=>EhrKX2vw2g4PM1a
zC4{o-tUG*X^<LVo43~){18Vf*<5twb)~N<7XJT9S)qR>zQhI)+-{CPeN at fS;jGvos
zc9SfYSF3+OeOaUG$0}xXKCyUYWw+#Kg(iHH?M&Tn`V;E?SS&FuF;FNuZ*v7}xBM#T
z#d8K4a(rI?jVyoQ+Fx>r!Jg at _K;J0|I`|*scs{=8o1*2d<{3b8Z{!`z){z@#<~2Y3
zx!vKS$k#g{*uS`8Sl|I<T_L;n8~D9qB$-I8HU)o6jMNhQ6)-TUTa|RtI(;p?_hf^q
z>2K3s%-%D$XM448M=_u$6wf>}l00F?Yrdf8x6ElU at W=Xdxq3ZaA_~SF81DW)i{$KB
zhdZOl0dDYTo8(1%1EJoa!E>w|7Uk2g3rs0{bMK8^SJ>&_<^zj^ajADOa{`m6uOcaI
z)5m{;9K<k#HiyE&D at o-vsa0uo6FKqx0g*cERoXNNb8*le6#VO{DkRu}7N>6U%czn;
zaLFfkgm}IX(c<nc8zZ?4ORa-#{40*{P{klf=*w5QN6!!1h$>=>TnM_kPGx47f`)Y|
zoZr~SPg-y=eR59g-cc=Z@>y~pboFvk%?p2$=L}>TuldqLj>8PYl7wOexvyK;w}v`G
zdKsz(9nG?KyrVh2uXgJhXYz=I2>S>ffegqX)=-dL9DEta(;!m>Gnn)y7pqJI3~WOu
zl+dU<4p5SDBui$=Gno^9=2oY;IT-ao01xa%JGbbx<jKXAlm-w?kUwKXvcaTa+`@lG
zKm{Fb&C_6+%yx53+q+<YVU>gE^Hf#0#0(ShRF3xIv6{S&gS~_65WR+n-~tUI+z&Tt
z85h_d2;hlbtB8jc- at WenFn#4zLl1X?4(W at L6Z9HGg@__dwX$KFJ12+bg1Not$Y;9I
zD2n;Brd4jC;4grWSqF7c!WqzST`_+WJ4S<<N%56d%HIE2j&p*xX^PU<o?31Pg_N$$
zFM4kq+*}s}c1g}mZN;J5Rqp&m(8gP;VmSj8Kgoqs5&1RsvKST!COP*Y$xU;e2XU at -
zR#Jzs2;a?*qjLO-+|hneW_srP6%oGf2~ZBYO1wb at ED|Ox^!yX~8y$-Bb<2Mh>s`we
zSF33`#Q}_)&ePvcEBChFcegl!1Eac_BpO{>&<zmy at LF-{9#^C}O<@pu)KR|&?L~_d
z(LRT)M6M&m3<h_yuI+dkE3iQ-aTe7;_cb7F&Lcipvf(&*-adp`v+NDQ4h at Xhae7VB
zyrk(f>HgR2TSi;avA`>+)V_Zau~H#F%d7a%TFv#n>U9Z0$!Htscchr%)b(0Bc?Izt
zSv5XbkC94!UQk!Iq%iN^$7T3-eRas$<T#G6D>q~+!3R4fX^`%_%gl at Bt1ik(8{zY0
zU!`Il at f2hNvE<v=f^j`ShEs}CJK{0rb6PpjJ#g$XF6GhSYzYkLD&~KUNOm*XUGVEX
zXp%TKu;Iozkv+9)IYdIp7c at xSxANOr%6L`cLd<X4xhR07AnDM-(qi}xm=&DeL`3pd
zaO4BEEjOjX-rYT};25!8O4Lb&3mcYrfPocpa}#R1OP{1sW_9F=2EH37Bf`^D!sSJC
zA#7#Yk1_x;L0#t+$>e|jEGWhkt^~- at se4F$alIc(-{v!{f&FjA^?fPB&8sv><jXWw
ztRX0g at R0@GD*;lfj(DWYis3Admy(6nGZ46+cLa7{G`k#3a~&-Td^j!h=<`;Zpz1p0
z at Ak`hzNY`h#lE42ON&u38!9?m{k{C?#1<t~kp^`C-k4Kl#QT4OjbgssD=6Qu)E5%>
zsh?F6{zV$Iat;rJ$CZ?_;JA~HwgHjo37q?K?bMj1(Rdt($aB@@R~lJHucI;OIZ(vN
z0b=~^rab>Mx}jD;m0yd#db}VfTc%=oNO&{ZHbVP(N%{3g`^xZl_926)u7|l at 2^7+|
z!v>I_O``arIgfvm9&Eh8xR_l1C!)QdZ0pfjRyOj{1W!>czQH|z&`u1k83`ock7pjv
z!<3lr$-{E*Tv(6t+TUpBEN3y!!L`pFlLciPuXh`25G|cOJ<-9g!Svb*5>Q(ND-HTi
zY+R`ViDKobmX}nnMXA|3ZO=Ojwv(sPCo$G_PE`j+b^3oBMY9i&ztSXL8s^c$7nus5
z&w%)^!04!XR&zgJ-(V1b<`?Bhp07&?xFm*2=rw6)J$AdNzSlbT?OGleR8?Hiqd4}w
zAoN~|U7n<)qDBEZlcfFK=%49_Y`6mMhY>*J##5}JiWl&|&5u+TB^wps$LODnYL`Yp
zH40F0Yd(K|P#<~lie%(DMV~ywN3(i~)~MK0xySRQ=SAHe&#OSCTiNO^tWD^Zq~h_e
zFsbidO=TXcSE&Bm)GjraJsSaKQIR_m`6A}JaG1|p)xD+B!R*>-!PBC<6SlX!T~3fy
z7OWnmdH2GNih^u-k?A56vR)#FHx(~vY(&XK8()7FxGUyb8M_$jyHAPCecQY&z at whI
zjZnnTA7_L(HF>1ks!(oe`d^0$GS;*`=c!tja-h`P{GMudw8%9v>9ELNVW6<kQN{~8
z?h<&9j=?reRP at qLcD`HYXVxZd47Dp4UsT7xY`PkH92GL-?D_lkDUKuyE<lmZ6cg93
z$*6ygy#D7Yn;}n0ft^8dvX0?x<UQ^+ at 0H=8F at 1?X;xNe0dhZD at 1Ff^AYK<Ia(~lVn
z!?eS at jc2=CWVqE+oTjJy1qs^#s+5%~Iz-HI9;5=y-mX<NRNlzJ`KKal_ at GGf5+hqP
z_z#6uJ+*&=IzK>lQ3Qx5iWB%}bMbs at dBlG&Ruk;3>Osb<7Ty*L4k4x$oNPhWkf^|s
zz76G$YkE0Ti*9G&^lu{2!L`~<Q8J;E6v;Woq|Q)H&+Kw6{fn7SoO>g<8!1>>NB-8H
zec~gOEgy>0`dl(V{O#>DDZinlAK2x=d|rc73rS4v)Rft(TrtJ&PUSwZ0K_%O_gH at x
z4tvKAkFmmE=n1L(;s0mhJ1dr^gcvHN=R1E_;RVHTY+AX=DJhYx1LYZObyB6NzW6&%
z)VywT5*WXQW$luE_<60VVd22Fx1NG}QitI0U??J4_&Yd~#X~DAArZNYVYHF*d33PG
zN8 at w0yzRufN9W=JN^vhrCv*QS@}hqt6X_#!Wvlb6$#YqsnTym7kw4`qm0|*=FEhC`
zWj!VKNEE3J(r at I*U4mXKZ{wDkOz0X+-T8@)*3)Sk&m7AF9*Da(;0Ry=q~W_;`Qv6+
zz}57f at do4_BUj%c91J#&spTJ5xCjlx^C{$)OkzttK?VCcn_<+$^#F_5voe3I_&n+e
z!6Uwq2P-7QxD|+Tkdw6FfJrqX at zIKiBco&m(^ypJErttcaL;JfFjpF_c+K~oL?Sw|
zlF;XxbjGYEDhN%*N>mPy8FuKTd~wJF^Tp!rFr(e at -mnwWLiD-hZzr<NNQS1eeNr3f
z*Rk*I1ZVJIL(i>)VVQ>f*qVP#+%#FpWBA1*7WiHwHXb5}h-jAI!Ne8oltsBbG6Geq
z#qx6hen?JfX<p&AzL}2$CEjk)6i;E#?pN{-=a~mXsSs7yF<lhMW94}<`ZlQ;(y9KL
z%4xQmMS$T4lcsNjAy%re`75{u3N(9!X^aK=InBv9O0Ii{aPdM$1G0a{g$v6p_j_F|
zDs7L`4=eX?i5z4A<i0??;m@=wWWwD at Ot?G9;k3{=v={&iCeR~*z>U%j`X8Eic)Z5L
z(}LrKj~M*k7+CX3wO(2D#Vpfjk(o==e7drt>rS-e*>VRUWTolZY$@^AbBaCEwu5$?
z;+^gcul;>FYNxJ40_T6N#t*y$$ukC3?@$}Z9z-oRT+6lwWU)z9GKMDoSOHYQf6me%
zXnW^r8+)!^-hXoZIq>VTKAbo~=1?aLP~r+<0c5#jRTu$J1Hb|P&|ZXr$VI<1j(ulZ
z)6!P%*6LytO$SAs-`5X2Da at gtYrZu&83{Gy)tTfK_r%GXKMQ~Eiy)R-hWKqZ*2J%!
zobB08z^(1n?^vFM4=p_(F?WVpxDjg{*B0AwwWdo5U2(L~dtjUGYKd>_Au#g?-!}lU
z+IGpoVYQ;??5~S2tW>PHbeJ*tV=8to;63-#5Qd+D<7$ae18GHmpm*gzRIBL$@=*5h
zHK>lPb-Wdh{9}I(ksRkqx7TG2L|P5E%VnRuY+9?E7wNtVU{PYiWO<GHpT%+(c_^KD
zo7sxA)qv?#j3i>HdC?TGdeIuWY<M`@aj(?JEdUzvqISUE-xAuaf5COt(PssvpJ2SK
zRTtMmDIu~0-BR~$a>#!;mC2m(jTrn)&wZ+fgcOh4KA?XS3!bZ*SAASWMIFB-+^4;d
zwjT*>|JF)js7bNo!8qlIq2%6XU9*i7+?(4>=D~(SFKz9|WvFcZOd^<U_n1nAT*LYR
zZwgl?cKIYf)X*yY#&%s$9?42yj*6a(HYR;wes at wiz2!sS8S){)9k+>C2!KlYvWOg7
z;zqQ;W-5RCgm$@L-aV^B<5l$R{{XUa2NVlvZ1eN^;Y3HlPm&j=F=3y<ox{zECQ-;z
zHaBMgtV*<&iN#A at q_;82!UlK}s~`7wk1=Fjt+(b~>30PyYck{U-z}60z;J6nS&{V{
zju^x-g>3gmytkM5E^LS%k8`B-Fr4z{j2CcUlT3fvpP+(e=4%&B6QnL4usSd+r9~-&
zzH1mJ9I4Kns7ISL7KN*x49w)Y=s{`_ at KS1A6u^hiJn+V4?d`ul*KaHDQIrW2bYIk=
zrqb*?7#sHTKWzu=4#5^3F~~kXIEp_-mO^Rdj8(~9k=mKLhY)vIAU#t#iwkIS^Ky!R
z6PbT`#iYTka{S#K`gZ;c2s6b3o(>3e6Om+fv$~13uu{OaZ+2SIhxLT;f=cr>aGo^u
zgzN3!r0CP+)hWB?z6HV4;+^}4c39`|m?lhOXkoorrS<r4+}}BI9wD0~M&*u(xhBm+
z?^AMEqIY!b`kx|@(=Xc8;oY82Hd0kyk^6s$3Om3w3+_NH0-}0qQ_OkDfw?PlKq6l0
zS2NyDG|x4m9C>-wIbn<#!0)=ZqUYnxAXEVW+KIHc*bt?np(dua_%yv_fT>K&Si=E2
zWWc;p*S??OUNPZgIt^$*5rXvX0bx|Ld`6FX2wuugr&#gcgomJ<-iVmS15W|`qd0$M
z-0fux1WM;#xm3zU7DzmP+OahsGTdS3TaA%H#hdR=cCT0^$JK9%0|EhF&R>qx>6joq
z-CG)UOS_<33Pll>`rg#3_VQqT^}**W&r|;WcI*xZITJgy3W^XrnJP>osMj?j5IL1%
z`u>Ab_8yh##EXAeN|gtTSjB(%B|v|nKXE&ISq+RJOt`H)!T7uR>jyBs(3svZNBBMs
zK{GNfp4yUVnDd%PEM|gHqQZ+I#i<40?CkAgF=Mw)-V+t^LJk$3t2!{yy*(D<ccDD!
zy9Ztbl-*TNxhYc1+vVJjN=OT#y85KKnfw=#&hrbpp%TOlB4(D>U?9W>8=Zek4G at zp
z)gZu<e^5y`9w!JkqepShI*Zu^*Vd at EgB~kjrUE%#?ljV1L&z}12rm{xR_dB7%&S49
zgCZr7DoQ(1{f at NEepzIAtXk^9Lbc`I>&{>Z)8+?~px;4>aSEg2b(<LWr|J;7i53OT
z+t*^_oC@?7G9P1IrnS4Kg<gM1Vx#y#+7XZ=8jdfKjVMQfzz;j-;K;s1*m1G$D5QQ@
zUU_F}=@P}`#XkTi1udHUt<vte;eN+wHMKo3m&-Q2pMA<fbFyVtsJ7>MKnO7p6Xp}R
z&F%rhY<W@}-sWcsu1gw3)k6Wg9F^haw|}f#mBdCwtxe@<6V<fh at ZNvZV{9E~W<i=K
zF%3LoeLopAcFtMV^(;FS9$_7QQUWY_(F0J;0=FLAN9+9WhZAR7WOEn at lZ74v{ZAX7
zC7)9QGVXSXzu?nnLjiCn at c7LnS)6tHom$%Da|;xS(j<RCn^f>RRu_9EM2Rv;0&^>r
zA7{&P>ITlA*@GwT0SbSL_+VWDWDxy!a=v#rG>s12UjnACFjmf2_$h9y7{AqdNy<W@
zxJ?plnCUYoH=gbh%w<NF0oZ57GKRB3bDwk<)jdjq%fWuL6>^7E2bfnzHQAz7#@j?O
z!FSJC5z`-(z4-HPDQ54p0$9xUMJv4FdQ}_SnWNAXng7<221S3PL}!z5bIC0KPyd?o
z(Lcet at PS?Mx2_dh1hNJPIMlC{>;BZ4p~w0Q4A@*Wk at j6|xq3y^4W53{91`e2 at Rq1r
zLD76#HY7Ho0k_#g`Ev&|uLY$+$SK=1I*366`=Bo<eMO5nBfb5ew3Qryv2k_n=r~4k
zyZLHJ^4U$)i#2~vc{G#H at l>6c!ILe%U#n)P<zlC||90{|y8ph9k at E5BgCNEfn?R}S
zAG$KKb(KkXE!!8Ru?*u;M+-(9>JtD`6aEeW|A8i;BTm!}7Un(!yF-m8UCFam=H^|n
z2d<o9-eSZq-#UJAL;g0y?=p`JD6Q~dZ0FKQDX^%`)f0axBG45QqJ<zAq&S)5lRWj9
zw08RRD}9*^yu4b9F_Q>1@(V5FmJ*~<hRBXeEuvub2*pVenFywOwUB`7phw5=W9S|1
zOBfEOQc>{Sr%xe)`#79<Y|Au_%Ll&aHk1i=uUZZ3y}9bt6M=w9bgvvMfdV`3J%4J;
z>$UEVy_J7emjl70?hEWjUpx(KtZ75w+dSAa&dTi;JBj~<{86jbkmyHdt$ROU9VNHa
zeYNn=d?UkDAU1P9B6~@>)G~1R>ubp%uj*F*<gsElF_ztDxh>FU#vwFQRq02~YE*zH
z#Ke&`JX at Fzur$1bWvZwjLWi<U!E6NLJe{C_$z6Y01U)7!TwEa|kp+?{t;jJ66kuCf
zexK*?xKTuF70uqEKen{R5x(afB`D{u84<7MES(lo^O5NT#(`BWjtz#d2pqFRNn(sc
zdcya1NA2U?6~Hf6Ej8Q>+s%u%%jk#%MgC||P1U(GJ4Z=h2Ae2wf|T(TTe={;1V38X
zFcE)$_+4Ob|KervA+4mecO|U&lwjpq at fXJ+8dajulDnPH7fm-yhrRFA-1K8m<b$U|
z(V<Ao2W5~wH|Juk`0bAYHlIfrjN##NHPDzj`d3n(VhMO8*;U{|ZnJfW&A$|BC{9nM
z)aS0xuq_zeOFhT{r;f*=%iV?&=Un?x?cRTrET4j&0D+{`V*OD<WR at Z^SLhB#wXWV+
z-)IIpBALQSzhdnmOT~UYj_5E`xZOpRG&b|%HqUm>yh+nt>In0d$1|xT)w>gD^{Vq#
zotcmhDgUHHGhhyui$|fAbW<YOB<RR*T5XVnSNDRiL?$?_M`YHH4wc;U!SP?M(-nV-
zQ0j6*Hqg at yS~JPh!puRIcUmRwQ^#z+y9e$(yhO at V)LqRu_VpA7w|Fo}N`D1TvC5Wh
zg76(NYGsHDNz(D9OWC3v+P`U?JI!RyRp1kYvRYElSNLSAdY1eU8 at 0v1iX7jTmi}6A
zlwm(9i_mG*nEi4RqoST)k5k8a1-ySKBUjFh734 at r2oO*WC=iT&_9qro-2S7FCQ9p=
zW0PrB5T&8w1hmJUD0_0L(&w^}Lf{zTUeZYiha;FG$GH2s#@2wg!KK{-;L(;E|H1pa
z=$`DzWERi9{x#Q?zTaKO*#n{Is&+1gA35e_bV3pG{6>CiezOP0ynKV~D6D_gX!JUM
z6yqDUp;da@*Hx|^PeomV2``8O8LpP*QmN`ZnM*gPTfw5~SijV6I<g2Z!F(p;iR^Hw
z_qGqJV@<J}$-Hmr?}=g)2gh$(Yhs%S34$2y*ncA0m8t{5C=owdVm(Saj*Hr+qztiu
zLVns|`X^{9Ai3O5<7X at W3&(%7+5+9poT1U6w=>W71gzPGyOg`-B0?i*JMa%SVZQ;f
z&M`OPgCtx*Fqe4G+mWgO*E!77%fYnGNG>{UrD77D0(eG(7<tH4vOzQ^cR_2S5Z3JL
zPF5CwMZ{iX;f~Wi%nZ0TX2e%8Z0r3 at TS#Z9xaFMDq(Cr at lP0_Rd9Q!Hs?TC4Ol=^c
z`H0yi;xpSeia6i)gO>}^X3>N#Xt4IHvEOE8DqN$6P%i)rXmsAsESC_nGKU{lJ|{Mo
zm+LU^!8kn;i+MJMXn6cNV%m;1|3fRxow^YD$2m)CMtO-*1BfW9gX2>gvo7b(u;_-w
zRVrfsc!7z>v*$nDqA`Cpo+P-#f%jh~!Uv9dq))5W*}+!AmpL^Qs+Yd!`8%3WuJksC
z3Ux)kuH0`YkAC!-*}4AXB6!WW at -4xCF@JMhwE&tbsTF>Jh=FRB^5VMF?UZ<1Vgw5q
zvR4`Bwk!7*MC=R}XaEeuF4)YPOzkxz3+7`Q>s!L4I<wj)$dZ4H&9Hu?_L;5bNncTS
z$I7u#|1U;~vJE^=L0m>_(1ce+=}h`3n+H{F9oJ~`BACoxmCHj$m=d_?5e>c>U73sX
z0e}#ak`1JAPzLvNfF)<I_zC6aFOFZuD&@v7dixcbH;cf7WO~P2y{(M+9rzeY=;-G7
z4ufI8f1Eh#odthcSdUq~eY1zSm<=BG39?%~GjZiu%cO~Q4;cs-?X9y!FJ(2+lpzOW
zz(0pqiiKs}cT+0 at le9d4evkFF9@G)eOg^3z4=%ieJ|WNPXa8%#QWd^hkmrryVNbZ(
z-fMAugWsM`ffQDG_O^4|EDk-za&_#*YrsdE&Vt?fJi>of79c;2nQi2kWG3KY7Y<@<
z22QdY{<WU_z4Q22Ayvz!NZr>#?O7|jI}iMsQ)h%6gKaNZtj{;D1z+F{pw@*X(^p#3
z9v?^g*bk2d3fY2^*fl8kF2>gPFHRprk$vCZv%ebL=FryzUEei^uMDV0GxAdW&9K9h
zuj5ecdcl8&xLU$C0gb`P4i1Zews`CQdP^a;K2wqMF6~l|JTt*II#1;r*A?m@=$!CM
zx;P$kz&&QMcmb-;g{eJ=Jn4Ff>yjgKpT%^BJU(a{L3kznsU7vW3J}b4se#U`?bxTu
zPE>UW3yx*HcU2BAf3LiL06DmW%^Azj9n2>s!cl(^Ex$m-3f at l(Z7$Bit%T57hJiP?
zHl$^K&=s1XzvuavoMMM(gDa~UMUqSvv3HA>L at LYUg5A-(xc-}Y8siG^v+tm(HUZQj
z#ycqNu7fg>_}##}Y0D%ON3l^cB3BqEqe503Hi>1#cGD=DcChV%&UT_TG(-G=qAfNS
zN63H6u&-a8bmB8!2f~DhbViKoL)0(JJ#dEGve-9EG5do^*(ZjY9vdhsMV1gv#G(9s
zwZadqkPE+Y5~$G#4p4ciSEy&|)FFhz0N7A3a%skYlU){dgp6qOo at GiNy+LBzpU|c8
z#fY5V at i8YBmFTl7(`2+0iu0U>$Rb6pQ_X)359UIzf&B~VeB^F#*HGT<>@!^IQyNP7
zp<x*l)$tHV;gKiESPc8Kx at v=CsR}+20XEidLE|GgUXhigJ{m>%f?9h(%X at TXO&Bn5
zqU)QeDs at W9#>zl{FYl^XaUnP(D~7!z%6#n at ZLdJ9MwD5WpC|H}@R6r}{$oUoR%(BY
z(p`h?cXWY8IvQDPEQ&WJ>?~%E9 at T_fHrpg=gQsFh3UL&am$RHmK#XVkr#l1%rC3i&
zwb^V5rU5&>@9#Ggwd at q9%9HoL^lN(budH?BT(5PJ#NJV(Pr|sGO=uhw$OiIDA<&vi
z$5CF3C)z*`V4s`U5Frh%BttQ#0lt60oAj_=c at 8^>bHDOiCwh}w)S2MvF5N=jROdIg
zCI|f(GNeI?jdI3^e^N3PgV^e>B9}7*5kvLs9Go$OwY|rB)VkbDy5~;X>*f4hA+nq?
z{0@`JUvSh^hp3l1XMti}?=UJdXtT)m9<0J58$0aOXSI7}Yu(f1b6+Mq;v|1-uY}ay
zFZ!1?Z`;RSF7tt1{^|vb=1OFFtuITNL&^07o^Tm`F!sc;u_f)I36J+Ia+#x|YxELU
zcWUbiYoL-j`jHW%<h_(j1<h?$Ixpk`6ZR_8D5tJ^BN;@Msvg7!3A2i4FT+l8&L$_T
z)u1|4Mi9nawI#%-2<%oZ+#G*m`xzMwY3rkJU?9w}&Thhlxa_>-E^{-1z&QNo;Z-2Y
z>q!ij!~q$pn4)n#JKomBD8?LOdPf;Nv2WX1da<ac5>k-lQwF_EM<s at tB<3Cn^qi)T
zXwaK%<MG$S<$!{YbYg(QWXxDYf~2bx0hHaU9Mc7RbMNcJ`5RgA+Tnli7<?ZFUVWKn
z?q3P)X7S&612w1y?)mV5tN*AOa1gnyrJs4Au&x=r<&Ns_S8oq*N`3HgDN7!m&h=bo
zcC`f{f0-J}CnLl!s))I+g<)t{V-0qzmw9(+hL<)&@7Mux$lQg!%O72)^{t|fa|V4`
zr0)2uK0<n<PX)tQZ|i?!8XQv8LQglI9swUab}duY?PqNxONz<rV2Fku=T!d&oNa3A
z<2W&k0UNO5V*n}RWf75UTGP!#7K|&c>Wi&tLA0KL&RUYe1UaG-JWDyOxrcgIF%jRw
zn6p)Say9PRlLcw=w#1Y34gvw!J&yN_*ke at Bgni0#)W+$t3}%0-Xfz-F3?DB}TxvhC
zaL$fsuwbMe=dULF?F^fEPs)dlt!!J7<ZQjeu-OgOestP`>0Qkn%pA36pS at G%yWFjN
zsp&Mw^-ocaQK`@WGU)>YK95OJTjzMv5Rgy(B$;WFQA%3Z_`)cu9FKYLZe37#s;DYZ
zmnT&K{>iYYojHGnfEEi<29~IRH8)bxb>9Q3`=AlDF>gX)P~D0Q4oE at GoqfdNf$=e?
zhyVo0*qXwKV$L~X-*(sSL?A}^ufpsA4z_~@;M}}IY>a)v9#|Sn+)&qOc5(@l>+M9<
zQh=&qTfhtt7Gb2j7TK&`R<>D5u3+T&vw|jO03bKvI_!Vl`h3!zOs`|ETGKm&aI2uk
zppFzo+Tu*v7jL?n)h5V(3--yoZD at rd1iR{Zw9U-pz+Xq>k>*Ac at oK8@jpFxr(9Sa}
zfs;V}>eP<dDnmNVwVi`~9ef-M1uY&%1o3Y2e+uCee}@A?%<*klJsHXr8D*-e$qZ60
zrqU%K|LT8}-(;eAacYX9y$RHexMeTNFH3HjE{+YTp5RKZUOe!!dQeUycN5K?#)(Q+
zeY%LAVzakaKC!y3D6So+LMG`0M+GQl=hj!2b9^;oxSh1dnJ&MP-qTm&Sfca04yPn|
z9|g>8jOKe89DeA!Y%^AktACNNYUoS at vsw<_W(a at l4LXG;)x$x~G(O!gVIdb<QJs2=
zAProemT<<B1*<gG at mquBMUzB~WkBl*Crq<ChHLRf9IHU$>;c6J#n;}9f5uAf2_y;`
zOEy$<@44T$uXksIs5?JMkRr at Y0TBz!Pf!VV1l2WNYtYbS4zKGTA-FyCzG(u`65aLb
z`W%1!xm`bVMpf9mvLswp<9#?H8~Jrkn;`C|Z{SzbrqpsqA1-uKTWlER1i<iKPvmXc
z6b3P6{9zKDQM$x<)F~=D2G?}~?_&<9f8NQz*4)hPB-pn%Qb$m1o$R&yS0*7>1B&kF
z_V8L|4ouRi{@r3ycYbOf+}_~jlMn at O&meybASSC?`WR{qgZd=ZmBR6 at 4WLmmRE`o%
zjj<XN(lUMg?30Wi$cfRoYc(s=06W8Y6Ucn at xf3Cnw#MaD4L*XC$<leqhKn#m-Wp+(
z7WU-LQsEE1rVN~JrO{m)8}CxZE|Ji!-i1rb4jWmonNUpz2ZZjGQ_J_!;0p=m2z!5h
zWWB=pTfP1gczA*}`)YZ&NyzH--6%uK8ofJKc{zH5myyux>4xb1iR<73G)yn`b!a<T
z`9weA-{xs#zJ1Q3#LQ5vZ%Dx_Jh_hV!k}Lmj>iXF06ZObgJQll1Lq+0Tp7h94C~WE
z*GNuU1*BhGZ)r;3y65>zPvsMPC<A}{2lBcRZ|8fME$lpm2<E<pb{xFSFcqWGS$y2a
zD)?vfv%LXuy&;8hYDE$*pX2xoZYX=w1BUr?cxtvY<8?a)S!&8bHKIQ+HpwS_Suz;;
z&jyq1!hzdNk`Nzpl_L+{y=({@9hZj;Urm)MkCm-~)qlOY%SO3>!O;^yd`Eu+mdCCP
zo!~;FBa7&!lBS_54`C>c+U@=qTa+7XR=*-JAe>Q7BrlR0xF5Sx>tLy|B&4?M1;m5Y
z1U(SR<T(WQyB8PCbJVzSnw_uq;{8V`hTM$P=C-a2&V5E$Do?Ha7=TIO0NDWxJ$H+f
zlMjViT+(8F0=(>t9Uobmt&4v;k<4;DRKEr>1{HXtAr~NI-6L5G4d3DLyTLaPolIk>
zyvl6kXt$PNj?n`xn#owmWNq<o!mC*;LQy at 4qv@|evN`t}no@=9;t7FcH&sSw#Iz-Y
zE117rS1NuxC5QK;ca`wb>UR9<(FXdoVh;qS(fp&)qb4HbMu!Tu+Wvo<Jow`Q3Mj<l
z^~a7b1hzm3emLnc&Vq4Dt>21~-{4*L#oVN4f`eK6!u36YCNUr&ow7)o5_I@!Wn|FF
zTwM&#X0u_P5t~cPlt7owJvNe!E)Vw at b_5LR>MlmULEwPm>=&<(X2*N^eBN7;x*@dr
zEj3<dl{hVqA!6_4#D0IKV#BA7tBmfaU-Hb|SKj^(D;gUl+Khv4WUd<CmXlbWb<nf<
zFy?JX3bW~&gNdu;N~aL3{J_N#;fi%(6_INdkwk&S(pPGeq!^82`*ssl{@?u4UGO!z
zRC`5cIA+L*p`IULCie4IM--VolpVGyNeY5Yrt170fRrhvF^GT9)O1UPD-H`*xNu+Z
z>P`LD-#(QW56`6bx5P8}oTbzG at 3QPnH4VmVXS%`g;(UQ`MdTp}hPZbpA+X`hc~OL`
zNS4RRRA#5QZt9{=f<j5yvq1{5tv43gL_S7;qtc{j_YVWKt(sD`_&WSfW!HC)(92{|
z#62v47MErZ_>O=7V_xL9XXu#IHcpd+rYGLtnyBR!;9QD=38KL?W8oB%&nQqz<80{B
z4h_~Z-fvQN(h7E3TQk)MdSZ&Vc8e`kh;+=__{q{wMK~#^<O at 6BRQphQ=5A-<pCvsj
za(Jik<@-GTma#m%B=M{n25wJL_sG!AxX5?E)EgujwBdgdaDQeV0mpj&z*P)xGd!Gg
z%sM{yFppZU+;Ys;+0eLq%aaGj#|l at aNe?a%+?>cKSFK{{QgIN|5CmZckXBfd7IAwQ
z{9{|vg(3!;U?|OFFD~IrO*p at yL)Xc+;~1$6-Ja|qfo+4f6sP_e_eZ}O0_qXnFdR#&
z2;#USvDJUfPPte at h%=znq;iD9U!6L^s8SelProPi!;6!O17Gy4Gyh?prW~5(_<7&)
zDg%cZd<KsbS+p{fz&dfUe7HK9l5{Go*X&q^w#LWu9>;lf12--InI-&xcc_bewlU8M
z*=x<)(IseaKD9cIKu0O#E_G^cTuVvLq{Wzqt at MA7A5pTkHTo}<-7eh6 at 5GUv;mVan
zk=ndFtzroSt;!BG#m{&ZEOq%v`odyB#E?KxN%)`|_b|hAiukYbQ+bc7ZaQu~`=B#I
ze7LiHs)WsAdn9<9oY?8{a_wg&;)}U<x)L;cJi#H<fVTdUX)Waly%S%H-if!Xu`#^#
zDd&HC!BbVO(WF~_?_>~reFP_<3JK4GL0DCfr!STlZ!e~z*tvRDT)jY98vUUEF$fMR
zeA-e$U1giv=LvMwItvp<ikxhRPf65w+&NtkPl!r9xh>f+1v+rmnRKiE{GRmzrHYDx
z2ML5NwZi+I$_s;%dYp4Zn}lvWugDzG>v4aQ^laGrp2oZybCQVoE!e6^1}qkuEqKB>
z^*+L>L!2lFZ1<VmkygctQe&DeA#+XV?!Ln12M#%=1cVWB07ms~Aj`QlK`*=OS?|hp
z`r-JY8vjg)3i at h97HXvIk6mzW7x#2JADZY5+Xm`<(<(xzvuL3k`je<v-;1>(;3<FM
zHnrbgL_BDTKh42;-${MZZi-Adqdu;`4mWYb at _mkL8z%C1<(iT}a57yHzEiFSy*54S
zg~a?5B}Gv-x&e~mD_R!HoRD4*N~zuQV~G_s(VM4U>uN9{qe0h?>?-3y)>Gu)GYd|;
zv^kWazx?Fvp~xLu_JyazJcqZ0WW#^1h67JhlmlMp6=Kcp{-)kpq(l>GAU-ftr2szd
zQ2Wa3{XHrRCZ3pJ68+u+a{^xFPqyKQXzLE#Ellk`4Kf&%hDQyXIO<<-qa_2h_%6py
zCQ*|TI_Y)c)<z_bFxIY*>YqXAZDzuds{&?EiGF)P5%L$!;lmI`@nC8+B%ptPiB6J+
zc-CAOH`L(hdmnK_2Z^w_iVEACcZ at NhJk&nY^%`Q&3(sDn9JL`tb+MQ3G`6|?vJAfc
zcYNq0Zq|E>%k!-sGlad=m>-QY3%$OFl<yNj!g2~3<x^q|v{-smC_caJmj0g=??`|d
zp-m%}Zek%&zfq~uzs=$YuhoAbb5i255=^Z|9EmgeP)^?DfwY$CW%B@{o&n~P($eaG
zWEF$Y01B9U{`DqN7{&Gra-7u*0Q}jJjbmyj3;7A?v*FBHL4=paj=B>94CiXD at 6uY3
zGHB{%nTzT_eh~=M52-6?i1(IMaXTb7K#=@_Q?|50B0Mr($^iTt1|xr8E)t*tDhpD~
zGH3|7JL%0-P(X9X4uA9-A2DK`6ITT}1j65xX0wy(QF`^0qRGhFT}Sp=lPfv>p!oro
zQ{uQS0bL2qIt6?F0xBALTS245nR8JrKAXJP^{7Jok6l-I9uyb~?8R=Hqs^WavHp})
zwg(UzKkgD1pQA<1^of5+g;WdgL6Me9Og`8lkqQvBrWx&Cq$%7YRBFHZ*O#?Q&rC%q
z{OfZZ8u*N?0RL997VOR9Z`!Ht`l_5BHCyTDlpV%9thzzyb_xsA^e91fJpbVcC9HDr
z$m+}zGO)IAWUvK1Q}8E3xBj{^rA07wOaZkdiP_2 at j5x6yv;lwAeoHEbv0gQ(jW_oB
zi at Ni}n++sZLCmOjNx35ecn^FsP*fY3LF_ChN8P9$O7+fCf9h`q0-=7Z$cIGx!ElO4
z&(Kmd*AxM_e;x>pJ~*NIJqFLMdD6UY?B`6z0apm-TUJ!AF*@YKTavlo&L?y4u(1G<
zaWkb*UDb!S{wse7$_3bGfE^r4aqX|1dQt<Db(aFl22`l3b^~49dH$%I`D1j=*A&CQ
zj9dpm;P#tpZk7*~ZEub|{6gX}qDjLwJ2y~l>08nIO*C=w79ZQ{4gb=GNAy|7YFc)1
z)A>g+U)y;FV1A;!*38Ogga11rV)$<{ug6jnocI4{fKPuEiWT1Ki0d`92-LjR-QIm~
z8h3Z>NLN}ys$2JT<wbA4LNp2(h={&TYOhIYeXyO=29kNYEC(O(ZE?^60PD*BX`>(t
zb;lQkZr4|$3ML(n+~(jCFrz`y{0Z(ydpPUEq5s;>01l#pqyZ^|fn~`^#of`mOQ<rJ
zr~Ymi<KlnyP=uve&)`2n^iqdVT%#Y7j){Lt{ca4!g=pLQz#w+A;LdpTza2-LZ~xZ?
z>3h=MQKg6ww`77Jr%FC?A8gx_NFnu(lwOt1#1%uacYbH`qe)fm=kaf)kai4R5r1AI
z9^D8kX#US!NJE;w-n(NrM~2wlVw_7wzVIUi>~Mbt6FkyLaYd+jK}@-z-|pA7X&EMS
zIw7OC{;%||vCMSdLOqImhi*qC!KB#GT*-Ir&P7MO)~$bb^w-u*p&UPQ3t-bJ?Ncw8
z at 8m<~lC=6f7>lC6?3Rs}Mft%lqZv(6%5e+sbUsgDQ9h^TK>B}Y*JP|*jvAMjt!KN;
zsv&=Y3=XEt3<rb*S%3GCROB;}+fc^Ltl#95{HP#F*I-K?-Od`>4G1ooxBn_fy{}+(
zOyIyjcNv?*d6#~>vi2c997t9&olgemHdg?$xIvO-B2V#^lk1buMEP^mRNwT#2uEc+
zVj4P#Jbq7evU*KjvGbxkWP(4XV8a!Sc`ASV at Zu&GG+Wx}#^^;wi*@0~Ab at i{z9S2&
zP`n$f7OvKXm}Uh%A;=DUJI)<z;-*H{qy>+T1ZROI^}w5Y<i4B=xG|1>|6J8kdNTEW
zuORdr#((y)b>e=OkTh8YLlQFkar=Y~gTt`$?%L}wtU()M<1x3FyN*TWw#2qAC98jc
zZ<TwP-gxrN`DD_{ZSCD*@C_tH77}ocrh-+suv=b1k1-;&NOKbp2*fNqi8CDzA(~+H
zu?Nc`!wM4Ucaw)M*N#;liX?CWANi4bjV;7tz|e$DB3bL7j8TzH558bB`F!43GQFF2
zV^W#FZ(|ywUqt at k%WKZyBiUW=j&FasVi3Dnfo_vil*6;lB875&qy29%e5IeuD&eCf
zGly_hv}?2q#kiK2#@?W!)c*g#o476#USx}^0von5lHKzWIHJ|AaQpgm&zbA7Vk^eT
z7#Q6*r)t>-Y*jLW8D6qxUDx2H+G+6*X6vSX7>ZA@&YB^1Xg$aGVUa%*@pgZKpx%5r
zAZ=qnm{B)2iwB@*J5c2=fy=;K4uPGJ)*U?xI^lnfhygmPdW-=-;~ot)pp5woe!PJs
zYmJ4pc-75P1*=obsl6cR_~=L3%zat`#<*l at 5?j%=f?FXbt}E4lPW+<D%b8TL$U%Z+
z36*`RwxvDPIcLxSE9>~EJM at 1iS!6I!w-__}=8e&dtNO2#JoB{lYRb*w%9O{iX-TSo
zP3tWbIOsT+Cin|MsUPm=<#8%5UDJ-~Z!VvEmZm+mqGj!pQ`2PpGU!l#|0riD3t^;3
zYOgnpeUqBN?w$L51r*3o^r27|Vh{&gN>6XXp}zu{!JJ=%X4Zl(y4Qb*fsAxJDhwd>
zr<5aq*QMqhb^&ziUH#G_SI_e2H<~`H;gn)};|K>$<!X+4qL^=u{!3R0t5kWy<ALSr
zPTbU(r%|<0tfgDQ^ndWLTo&&05^qF(S%eJG%>fuuU_Pnp$P6edZ`g0TXC1(Dq#9b&
z6ZgS%v{np0h_r-6{w05BAT{1z(ZSDv4dBd1gKECEq{?_($-;zO8UF5-1bwjJhfeY4
zLbHB&<R!9|pX>ouefT{~9 at rY0Su>u7jNK*Lb7Qgaaf#Ae at X;1bsr-RG1sSLHGc78%
z>E0fE*`rNp{^$zWXHrz|b|TWa-6OV_ZJ;Bl#69=WH4URaU+aIUSDqFJL>SQKN`bt=
zUGlFE7is8O*=(D`L=l`RM_Nxc9qq(xl6p_4Oi;YE=hqq1z*~ocm4spB5vWO9P~{B*
z=M*lSH)EYJp;)ytx)%OnJ`d$+tdEq?O}dA<oOZ;U!tL>9r*}7q2^t3BFWQ#s3`l^l
zNAf^9jy={{r9^+bgYDnJr{E*-;25}*lbf%LhB9~RG$yEcxKr`J#&<^V>EL$x9^IVV
z10jL#;M#SwCs!dAUqt6vSun;HQo_uBkfsC~!}51qgm_?(ybqI*_u`An9VmA~Wa5O}
zaXyDS^lwMX;q*A7ZRn^u^PSSSi?7J`sfhs9|3ga4vhja;?ktsZ;Xe;`Zq5v;qs$dD
zjoX$BoV8Xv`{gT9tbr2l`T2M;(u at 4UXOU+tT~SDvc%Fk+H=!;0BGv=ZGxYDrt^3H^
zorEf%%fPdcI)%=DWA)s^!%})>3UO$zFngmTOXEMGRAs5OJrkR;$$^AdaY4jITM at Wd
zkEm3OP%?iLtCjWbD+9CH&H<x#PgJ-+(C$H8+m;5mEuEdg_8|=7Lz%UMi7{>UNgJ+S
zF{(Ilf4MlQHN7cc(#qCZ=`f8!vuWpm?MXuhniOvHxZeR)N7=LaYZ>10*Ds(qeql{?
zH{omUTNyl?<V#-YA?`4fevAJfFrJo1B1d)RFRy=Map4az=CgW|hR(2M+#34^*wU;6
zx5hejr)(FxPCO+SvBs*9_%yZr77X`yg4-Gf(3b8*(M|iN8H>DPN7FVUdhZ*SeXr}Y
z;T+T at Y&GoEN&u}=a_W!n&B1$`u$1)387&KR-rq4VZvsE95=&;1V{1;v24c&GY>wUW
z41<5!d&$@jzz#3H=e2zbv97zLiW7a4Jy9a8r(y&Bv#cgFVaTdd2fl(MX&y at d^jvym
zYApt*HKX%Ol8(#-&_e>&h+&Y{A7}sXuEM$~NFb!~Re1}Cnw|7J)cQrw<S5WtAKZxL
zV7_o$KC}Lm*@?r?AMk%6`?`l$#;eP{9$|lU8O}DqDtqptR}&;eFW-~oZ_4<jiGdy|
zUd_#`phXDmR;;yFem314A^)$6g;J3;%!Xbl3jE+rV#4+gHh7WV841eKO at M4I(3P~Z
zVP7F5Ve8`H>^0^)zOW1#Ii4cMlj~1JjmH2kKmq3e6aXyI20;#u06CgzMPMwYOXz>k
z#oDSuS2~zfGycTMX_ZC?)5v(157_WWdPP^XMmB33uTkSvn<k`86slQF)Jw27=C5WW
zhc3+!dOPCsFW8HL)P#vEJ;puH4xy}n+0=`K)AS*xu*5i at gVI(9M*azs+fOc9&$*5W
zlXiz_uP-H{6jxnA{HkcJ3i=+a7BPQh;<8mJ>(y$C_Uf<~Xop>|@JvS&Iv0jtY_2YC
zMo+BgawmBe&kgg;)d=bDTng)IiW=+2WVboJHkT4h)&$-((ieZAz#HHM9pt*RNrrWy
zk*X(agpe*1iFH@^yg<d>e=3(W$PXJ-j<=ZD<!i900k0|cNw+5W4QUuQO$&ec%CktW
zQcHx&Mt3xo)09Atl#N<7&H3nk`Vr70RA$3SL-FP!ANhE|yehWDiADB=yC~!-KpS)b
z?R1D7vP+8Dbx%??a|35p16Z=Wne`+mJnlrvI-ZyT&3rc{!27KfxRFk7{Qc(K`n_zl
zZ`?OI3g_OifbJ6?-|fJ6wZwna>@XmJ#>pnk$1WZ at S0N?Zjz)dQcOg-_p|mK<MP(>s
zh55P~_M34}t8T07^gQXBhjDrOJ-t&YqxBPN4Q=n7&TwY;ym(4uc_He@(l&**0OdjF
zCSXTj^=BuEb>G~_unMd-;7AhllQmrM*RAANHQa!FFEr(dvBg{jFG+vJz(br5TSL}U
zB8vxlAOU@`uIs~2&MWBL#xHV`>ad{&_Ya`s8giMu?pY+8C#spqY&csX4%v-IwTE6j
zbPs}OWnlP#4S at Hxr*+PY^QTH{;sxW~#WsN0q8+2BLB#!nYUldiRxuB4=Y3f8z0UXd
zcdMibO*=krs?(Hlth|44t+k>1mTINe&a6{*$ew6}s3y?&OV8Ib!(|p#16h}{YjMj8
zDQ6Nhvt)=kf6;1J0l6v$WD+yV%$&ct)=<w;kT1Ay0H44|XtI%lm6JszN3+{auQzCv
zG{*b`@rG@^S$v~%osQczmYia?Mhg*b-&G5QoPL?!$`$^}2o8TVbTqR5a14K at _t(Z#
zl?GE<Z31%FkmHk!ZQ(tfowbIY4YTLNiNdvjDW0%=HD<ZPNP)s?%}yWtYx6?kU0PSe
zD;2G`W)HovMuw6x{SfHFDa;JIZmj`fP{^oP7zuN|9AwP5E{t3qAjV<9scfxlZ3-!R
zWQZHUF4WS*cbtFONQMX9#@u$gfU at GtT{DEjYe+vly0%AuY8Q}E=K-;Iw=2##U4IKa
zV%EcZiGhby at bBf=5Bo7D(XW1!^`UiI7b)8!t-3q at VH@G_>G)rD#+C_}NG9T&&+!FV
zpwF7qJvq0{Q`XzA at Sk$!i#)H$0K1?)Eui};|MKfQ7lD81B1{!P3*>M23;M(*%#gKk
zBgRt={BU}wb|eaU(wD%;okAWHb!@WQ!)bqnFv`wg%u+0(3n4+L{AR#g at QE1bA#mxG
z|Kv258WJ^$S}H8eP4E82H82)O{alWH9JcsQ3`t3=%Q#C>4Ko6ZeJxsUp)GWc8msV^
z*3IaAAz*)#=k8g6dp at izI@1ynd+&j8yVt50=MLy^*&^F+{6X>DYf at Q7ny|-sb^wf2
zp<bs;xI59 at u90U%6r9xOVc1Cy#*YTT$5y?KM8)M<NTLqGfJqMxE5JPS(KTQ<AYa)l
zHExvt>#ZCaWbUn93Yi!jjV|j|$rtRqg#hu_L at 0mP#Ukz>{L7Fo?taRtFu`nnNBPF3
zD-^^NNMd9Tt{zF=Zl{OhE2sB&2)MNyjF}!fmWOkub7o7$4acYs9hsQd#V7N{-Pu*`
zX97NAm>g0V=DinIB1Dt>3l65GF*fW`p)c7PhLDteA>MO at 1zmes@en5#87)YG3O0Kp
zZ6JRSh_J*&26=m%vGY7*hYtKbnCN4a7o)oE(<V4Q9c}11he*@;tj~a)vlYe4L1z7o
z&bN1vITv78D>mA^$*VyZ{F8szul8;oAZnI4e5T4mI#)O at a*B;DK+g`ZJ!tGCW%%(Z
z`IK0HRw`x?S}(;WkfhKZ^P%7EMw=1OqWpiK00%($zwD5rMhe`9%CtY}s^p}U<?Y(j
zJNoPw2j-p*RG(jJ+>s(v`SzLBimv=bi}20o>jLrZH}A7TglxRJ&ABGw|BDM@`Y#D+
zLkhJP`%!Y;(q&*F3o=9=au>}Px*HVHoiTw4Ekr0}K0H?0$r)NgaWrUnVKI-$at9ZK
zXrb|c`OlR-qXQD9IdgLLIK5qd+Rh>LtV5+m4B&|Sp9>=P at SU7F(T<+Yn;Eb%NY`4E
zSfN!42{W(&Qzk~(is}i<`ol`1G5<o!I4t!lPk62&`G$n8jWt2)O6)@{HTkQFEglE|
z)WkS4#=3V7R9`G5Dc#~<O&`VflcU((`A}bfZoxAMgg~#TD&P6|4tR*rt1r$~aysba
zyWRplpH;+Q(d=_W*+^v9Ti1O}&K2olq7w6V2)9a^N_>G6bZ5QnH`V||8~rfX2J;t3
z$nLhUj-of)ll_9~)~88Mk^X9p;-Fi)It168AB?AYfJ#;d3DsjU>Xhz(5tp)iomg3a
zb^(7PqtCT<$l{hZ>(xK}{3&V`R5z)?=9rdfloa~z?xaAM4yT_gP(r!OueT;2q@&ve
zqKsU!z5LlL at F1-_?o6#hVNZ*?U;83bX4*ot^jeOGTy7c`uQ)w&UYVtf^`XjaNkFc@
zU!l{?B5ubOtx?*?ZBsRFtiRKh6~DHBK*HAbtDQdoh(-7lcUk&0o7B!n6+<PtT=3;B
zYX!f1*n<wD1E$$2L#OiFsmw!mLPFWh9K+CTC`WU>%61M=7ZI!wP+jMoay}a7k54!S
zOJJmpR+@*$n};(uM5jFUi(~Pw8P-d&{!%K7m)*N<BxT=t{f5Oqr^lQQ-KhqDenLI3
zLSmACj6gAbuq!Vy1ftt#b at 8>jbdIE|rF4x%ewK+poL6EE3{Zr3eHkCz5O<SeW!`~1
z8vm+^@gPA_d6Z&{ti#Nme_aa9a+(i9kCSCeA3S!h%$bp5V>luEGHo9&9z`yf=Xx^~
z#gxd$2=VfZ_Y*$tyCOrJ=E3-XsR7!|Wv?>G{Yk{x{<mEbSuq+t;4VwF``<D%5jQ;t
z0*$@a)VV#vx}Z!$5KM{|5Nrz+#n8M`q{<6 at KCMW<A2V|*sgGZenv87eFzcn?ekW|_
zjtMG#UBzh>zF~wbDk%~^y|pnVQ$AhnHBRbj8(!*%4JaRKW}hICMLqm~0~TlNztJxV
zOSS>0khgO8&N6cI5DJx2!I;8{IsHg3lw_q#E3F-|NTqC%dgdV%w(s8)&y<nOVwq<e
zQ{<nAsC<%d|7P_o1Li&-v^A;7cPxfB4;=-t8?q)S*Gnz)T%wg|rfS_Q$vI(pszz}E
z8R|X-D{WrQpByiE<}{~&RvWUc)H{(<(_s{`gUYn8d`E7?<k at 7eG?rHHpEz#}yscIQ
zAT68!A1KY6&My`+-WjYPIfN+ZoRSJ%>P~9n*W6#(bca-uCeau2BPOB{-Y_=$XU(XB
z0`Q!M73%pvdJ7dBUz<CGDVR4Q`|q4<HUx@*(GNKXcL0{m{E8QUy6BqMK7(teWr(0=
zA~Nq)M2#`NfLY41d?kq#t|kl at 6lA3odHh{yTxXXiIvu#x>WA4d<%7I`j5dKJj%ta%
z%)BF~oaG`><92 at KTpRiLnMWEVu>Dvn<2oQp3AVPB;#h=ieS|Fi^7&a{{2avlEyv9O
z64f$TZ5J!>N>zA&EaPf~*2aH+voOyR=secjs+aM4nHSGhQnmzqk<BlFwZG}g?r|vj
zfyviID7T1#U8$Ua_N~U!{+cq`q9WCwjm1ZNJ%M9T$H<|lGq?wT^H47#9SQ352#&tu
z10p%cO$WO~mEs*`P1a^o4I_345WW8B^3$%-=JvRiBo0x38Rssu|AzNGn=CIIpE^NG
zQz-aJ+}fP7kIwRe!DucVb;SWj6N;h`S3pg|A$_MBpSm%`DK)4{^CrFosq2Vy1s at Re
z$c=)6YFJz~Ecc<NsyLF#W at nkIKeEc6N@Sr=_KL$?rRnjHHjl*_RVEH69#a9WJjGBM
zj96q+M4i=tHd>Btv&w``nq$C at K-cX7wPo!}6*o5j?vy8jrA;tML51G1e9kL8)I7of
zLrJFYgHbX=NVSbsxt_c3yGoEk;AF0bv-3hSVnufA4dV`Ye=rJo&)NL*4hW7BwqMA`
z%NJsSNo$cW%QX at G@q0~E9!wqgX6x&pSUamnGwy1C2HrhsUDXO#rjz<K%|TiSo_O2g
z6FtmB)@yKc58`;#rK$xK!TN<dBvNM8w~e1Zt*tB<qg#KE_wFEty+%8M<zN~)(wy-1
zvH1lXe;YcZ1}8M?{&uVJ>ZhR+;B0#we2YuvQ10==TG={knhiqS+&1>_-iWL3xz8aL
zzJMNoNMQe~(r)ppO4Eogwtk!n-W2xM1sCd2k;&#tsPK5wiPtD1rO*<hXot7C2(7(t
zCu_O!ocqQc8-oJ0V&y8Hq~I?==z>$F5CNE<@ZUb?ez?J<XxUiN_;Y_g#I5;k-}c8G
z|KAh?op{!F9-So>bLmm<%>u=b;miTk7ti8<nRbNlEM}D(sI4a;alNm0=SL#rN5?4r
z+f71K^A#$%z<mT7S5?G(V3V=zWS3{YXaMp}(B+#86QVPs?RR|b{}<%t+zYa}(ol#!
z_k$Yj+xz3vkqQ<y+;cN;!X}xHN{lzvgx%eh!)Bzsv at qKA3@TOYa7yGmv1n)~B`H3C
zKK36Uw=7es7n541i})2+G98EZOh9gC8 at 4=tmT{;DtpV9QZvOu4QFyLKP0Rkh0boi^
z2QiBr)fux1#%JQ-RQ}qFoS8!rX8%3QCRukcI77<zm^^<RI13k2dyetrL{O^O=icMB
z;E*;9jZP6fWsNb>2|z at +=KRhqF!N)7#@3YDbslxjGTwGqu$9U|Qm%D(ZmMTfzVX?5
z8u3nPdzj*Mr{2Mm=hlkfbU$9*eM~Pv<`2dG*hn)((7D6z-eyY}0)V;Iy&0=n<qBc7
zW<#G%59>vG;)XxyfXLk95Y*0j?#0v^x|+WNB+qa9lx%IxhBO9EOybC>f2;0)CL2rh
zhXuX5`CL6#Ey91Fp(?Y(q{XA3XctYdkJI-L*fNC~2QAw&O>>hYyO~Vz)_cp^(mIpr
zJi5Kw-VvILQ$8`Lc6YzRfI?RnSxg at JyRl+d;bjNFsR6duHAdQ&Yx8Q!O;WHo81+F|
zo&VXLP0>j5y at DO+mo`nn<w1CVM2HCE5wcbwFI?HCYhTcE1UEJ_PVSsP{6UC2sshq*
zA7}eeI;GV(CZ{lOcV!l&%5UGt)WR%=-Y_N9O>VA~=8zmG607cDVr}sWsKEbYSG$=`
zFD!D6PdY|R*tFxYh$GKN;{HrG1o>{+zy*jxOgd-*){AZkSLld$AC%F5ywAK4uMV0p
zzT1;3fyoKl)_D;(v8L8(cc|0YjoZ at 1$~kIQ@@53BXmG<Q8q4>GypxuC%+ITxvo}xX
za}@EwQ&7U8z3v$v1oMo@={|(nSqAGp$+o7?Y at RE(As!KE%#~~{j(5+9JIe%d;Ml3;
z at a-j<{4SV)bA7sG at Sa_N&Brm$tIDcl=$)N|X1+~}&nf0;`^oAi_c$~|2xFvLq&1sG
zmZ=Zf(&vK2hHfnAef^>1$%H4HxlNkKOz?VA(tlur5p=37#8w2)(HuwPYbIbt<R5IH
zPjuRmH$J-j*7k$_ at Mtk$1q5XXh?_SrXx`>+Yk5nd>F{Gm^!zb at t4~75BQVccDlhbF
z(`l6oN*|rj6&AIaRH2^nVGo*uK;Q-OGwlzETqZeyvxzMAc;5fJ>Sl&P9cV9d&-Xtp
zx47)EfT!q*c(^kAwglaDTq|4c*HQ533puaiX$jHKa&oGET7GZt*5iB16NQ34a;Iwg
zE_YD;$9uO at V!FV8abGTBgwSS0bnS%V at 6w6Sjk6nm=(J7?n+$4Naos*;UPe8L%4^nh
zqU04MTdE=xi<ailLql~Zwjf<(ivaRW4a+^-Z~1WsFDYcE<PvbLmvRv^2n5m(d>&m$
zNUR3k)LaM~%-o>Y at yg4dBqn){V0qhFu5}5WETVI4)LkNfrlRs39zbx!sXYUywF`O`
zEsd~1_T3EAzE@*@fZaT!Yp;IeHX(Z(Yg(R1M@?0{9v^N(q$7)Ftq>Vf#QP$Ljn;_u
z`+ikMGBw`vw;r_Bzz-orC=!)>Jgux3oJrRh)Qb5ZChUet2S4mrWY<bDMLxfp4k3w|
zY^^Z)sz7dkl$;^CQvCUMsvwrf#S(^>ywgL0PS4>WQu1=&KP4Q36*Q<rYw~ROM;X&}
zb2wdhI6h%@R0;!Xniut=W1^vhjp%Pq4cQ7`J?^$I|KtOhNptMWZgFFu=9;>n=*h<d
z&<MZH9n>~iYG>8uSEN0DDR8}TEDNVZrrWu_G_rYrucJyscgn+o%vbNYO}$%+`xnHy
zk;Vn<=^6IPW$_TUV^$f4^aKnHRU at Spl8Mr&TO at b%R$4C_4R5Akk$XrvB&MPGDU;!#
zrzQ3i>C5!AL4g)bvn6$jp!BO3^6WJOJ>?CUZ<K4W9rGJauzq0L!u<IZ=ziLUbSE(N
z(0T8Fn!0%yDHoO33NpIe=XT{`ws=rdkOX&9#efC2vzniRq}~zSu%r~%yBF*Bn1CAR
zW*sbzw^1$(u2Y47aW;d#Bl2f642mqBLUo5AG0%`d1$exz9iH8CmOjkvIX>ZC5d+%k
z6(TZ(6|mm7`0T_jE|KH#eYAkcXe);2x;$ln_?n}g+X9k^mH2Tz9Uoke&}<HQKzkcx
zAt^0;+y`sAM9`Y8ftPA;mu*jlea6mkwdzw~uQhK9$VqTBrIXUx;gZ)@Dmm+ocXHpo
z4T=(TeeGaE3#ubm>)9b1GdXitk+L~!(o5-FsC at 5F$6X#FUCa#fdcI)Wm**blw86fA
zWC_#GR5S_z27yzrWVHXUos*%Zyn`T40GGtnF=g}zv&AW6M7w!Z+Iumx-o;V;M6m=?
z3V;we8cFq|Yd?>crH`T>M7e8~`XUXgpMafK=|K2at3ZF<@3V1EKMZ=HN&B&y*RDe0
zfKc`&1HFBtVwJv{b`h>PyY|i=nC>@!r_&n-CrcJ>YxUyJZatcLxq%Tx#AXLbi%rWT
zI2nF5oc)1k;lO)q{TZG3oM1!1tp(eMJ0bw<>6rwyV<mM*#&+&U8MsCckg6Zg7IXVz
zj8f-MlvsWDIovoxhA9tk(`~H~Y`3DNq`6BS;o$%aQT3@>hnK{8PQp?3BgGJZt!UaS
zW(W8h1eTHZDY5(*QANTEqc9qqV+i^i`~Ka{lkOC1hzjh@)-ULv6-(V>qBM-P-Rw~|
zQ%Ub&=qrP<YzmhNyX7`zIEO)8Dsy$f(#H&(rE1L84kCp3D~g==XTx$tf4oVt4|FBM
zmYH^Twow8_1;8O+3T1wBZ|bdo^)DNs4;_w+cs8;MaB;sn%hjNH6TVD9g)b9p=?w4!
zOu<1ww^E)dZDY^C*<NkGjd>4pSL_`D at E<jO?E$B{6)fIrf5reQQ*p^m>n-Hon)#|6
zKpo+4h;Rwt<5jPD0$-Tl1HWsc^Kj!6JIg^~6(dvT4O6de34~oKZLr9HUT7Jb5;J7j
z6*L09=E##|{g0V0Y9YFuPCAe29A3}tR1LO|Y3kVpwe4 at w_jYF}=md|*dH5cE;Y<=#
z1uzhWX0vFXTjAimM>b5SCchNWmPKyJmd at a7+K;i60BP&i#fFJq?hZ0XiN-}xy+B~D
z`r%d^lrE0X!rva>{vXMI at r-rr2BF0?NCmJHJyxxVS5NA+9o47t<ThJ&NFN=XwK#%&
z at A1v5QgH>Ge&cfF<DRjR_TCE9DvRVQ(SJyr=GDR9|Mjhna_kkye1P6T)mjTtGcVNa
zrCJslT92MpeyKY->I!+I#%zGBgZ_7}2q#tY8kU;f0;Rw at Vq18B-von(aNqD*=|Cv@
z`&4eoFC!ITTYQXFJ;JDRbr{+Q_<3(v9G7c{0xx|M=G%kA`tds}k-!4rL8WkFqG2Tl
zR==$0S at 1Vja%A~f_Ntc(2&A>XhE=6?C4IO at a04H!B~ln$71-!i&h1{PpYBqThBbBf
zWtc`+qi(?)N|3UDW+1y3JK=W>wB(y}xSi94{Jc-oKHr)Iec99#XN}`5m3t|QTUFtp
zzE%c6I6OcvTPFvyelX`w$P3+5rc@~yC;f81VxI~nq0R=&L at KvJXBV{C{xVd+Gmk^p
zsxr`o><Hx>KA*@rbB*4)83>G}@jT8Ix*pGsmc9f?z}T&SRQ=0f^V}f#32j-*{J-BI
zWDpr|smnqhqN+muOHK#LQIFoEg}nUc9SjY5XF5xK410M|E{veXJ$C(gXv$+0A|2N;
zNC~$Hm2}+X8~3t((b0NAj$Wb8gUcnV_wL9mon%jFs5lF25%YjKXKyCW1RO)fext29
z?2Df3*!Mbrr(HzV!`4GEKEE2`f~YpcuEQ1mOUuRqLJ#@~3`zXSGoc7;k&pIepC{qO
ziztyEOA(3Cii2zI$yAc!=$KRPgNnwDEIS7}@)Lx-3#cIM*}qYJUrR3IN)9PS<gaG~
z3W_+{pV^wzGlL9|R*U1NPwiFmN&z+a;Q;x at LDf2c5g>Q}R)|kE>FD|qfjhCG6`$Tt
zt0TSjm+no(|56*qRF2-#Uj&PxEbrEaQ at 7j1vc+=m=zr<VY~o0NJ3fIZ8~~W$VTMB1
zExX4sDpKh5k6G$F`;>)g?m59G-mMV?TSgb;vy$}+{_jhp?9%g!2tthk67XDQt<7W1
z at h(+=x}4L|paNYL-z at J<lIN_Uf;mS9ZMB5mCu<-#2E=PjIRO*mU>IkaCX`IAEw`DS
zuV=!5;Xop;RxGwmf*Z)t3gl{+H*IHTp6+y~*8K&ATMW at So5K^v+jjddLIj&i2*{lU
zPJ!x at TUNWO1>it>7K0<2U6X>ef6f%8yL%{qT{3l=yg)tlF~aC5n9DO#sb=9zoj(?*
z%C0_yywHTXNzqgrSNzk6P=8m%=U|I`XEPNbol8Sl&f5T9vi=5ovxCPu5&pWM%9q+9
zl=x1j5u2%H)X{nk3RyboU%-tCLvv-$LfTu37wsG*HrCj&A_QqpIl$?~g;y23ot8X*
z&@3P6om=oiZA1a&v`#ucgv{6tni4xf`k?k{MGNy^U#tb at qt^_30TQl=$WXC(J&z&S
zgt<k(j&|Z{A&x3u at H)H|^2J*q4=WGXEP-Gz<ra;!w36}Nn*>9vL<d!}2+>O`xfia9
zQr(ZF22-Ua^NB9xMW4z0C66=s4_PID?;YQ5`4<NeX2t7Wjs;}Hs*qWD2(Z5q^1jhE
zgUo~<Zw4s#ji+~o64_<`5w#4OquCff7ksf6Ao^w}LlgLE^mrk%=jLLr$=g1V;c|&$
z&N;HqtEnSPS`~Dlm`$Ul$2ecL`q8S?($IKJf$qH3`q`mbJnm3Wg^AelJ_p5rT`_b}
z3vZ6s!qDp=mApp4w+wrOV*E%^T`69`cXQ7sM^RFxS%s~$?7vN1k+KRM_K#2_%A$v)
z+_vPyHLGY%leTvo7<Qhs{;Z>wTP^Q<aYpqdOIOLiMwR9_vIWB>y0P`uK#(ekc#-$S
zzM-?yZcM+HmjO9h at _9E!C%e&qQJ22xUYj#YA9~^+mR`RXEyjZMk7)NFvq37;1{`?h
zc2yv#_n-Kq at AcyjoX)5OoQ7R;C3??g_e*kehO|{9n3wRDJZ{L?B<%aGmuNME63xI%
z%wedLGNS0Ey<oR47DP?d$MjqmLMoV@^3Bh_*;zyD?s#t6DoaxjRMWhFrKMF!szW!0
zX)1R3HxWG_2n9c`hkXRk5+x at _c!T|I?wr>FU$Ek~z$qo16o at 3x@2bhHRf<sLTn|`F
z!X(oeYofXEd)7eC;e7xU at WpMhY!;@;HQ|i<QQ&Dp4LZ|_z#Qk>TwHgOyE)h$Lo48s
zAN=`5apVl3)- at f+o-Z+fmoKl$z=!c55`glin7ZvqBmyf`fNl2Sxof;|YXwIa%uZ~x
z6f8v;{KFy<w=4DT<J|=LY=B3LJer6|8z{T7 at m2$G)_zgKcQcBGJ?F$V`!ue43CT4B
z4{@gOU(>jc{XcViCRpTW<tO-EIiw#HIPms^$^&3Hr_*{?*h}_*{|d+7f!9k~O<3BA
zM^Psh^C#3PYZ}z~3qg$C_x8Y;aRdV~6A$CjP7=PIU$FJ@?9m--&zj_#qjj<(1@`23
z|3%r^;zc$EQ6mHajh}@KXKdIM28&d(?ekwP5x$es%NR<V!4sIFG`=<I7Fm!u?EIBB
z=~sV%iA4pvfbZjfO%Z5Q&0k<ab8WJU9gA_~qG2rLVW;}auJbM)z{b@!>;r&FWtZTd
z0ZM))&38B&+$tlRx(7d<2xbyN5;Me8SX})0TR`g{T)z~Fz#<YIdOEs8iV^gj6w^<-
z%6Bs1wGtfan};E3c9g$pW6_Vk?aOZ)NUiy%0sPM at PI54RUAnb3YQkrw6Sm<*eAgSG
zgo4*s0rE|gTa6r+JIIIESQGt;RZPz6x_FHsD`e~5>UU%3f!1qT&TiQ6Vu=I60%dfq
zQ$Cg1^BSBeLj^1{hRgFHblcE<frnL*%QBGh7aXT}JpVVusVkgr8FqqC%2$H%46J|f
zUeL5aT4m#Zc7jZQFM-P6UKJ3NO?U)mvgQ1>hz9oXHF at _aec_5yc!wp9iWCR;TG2!u
zJAM9~7g&)ky%>J208*0E3`*F`{xxzl*n$qvC8F6^UD2)R at n|;6t)RM4IkLa(<*kQ|
z!Vxc$<e3E0dSkO9kk0u5u$!#G|4m=O-AiIM)qJ0Sh!os_)!2G%vT*ii+N)^<xe>Qg
z)&dDpy6|`6x_<yXl}%G+X#czLFkQtz>r_0UUmDu(@2=&I{j*?4&8u*GCFW)+5m;nE
znZspfP<7!dGJH;V5 at u!9D&F3ljWfdVgmqAQ(OiZ)1xiTy>5CZ~Iw;FNsH4p+t(%W^
zEEzO^gA-KIo~~k$%dWs^4B at wO-;-Cf)Cf-5kqdYt6LtOg+!lYMxzV$ba|i+J*Mn1w
ztzER?;xHHYMd!^yv}^_AkneAFZe?H3UTprN=XfL}+Zo`^1o^JTG@~f~#`w2}jkT-1
zZJ_mGlFeas+<H2%Hk_ne(@WgU#B5G=iZDZeK_Yd&YR39^Z71#97q3 at n+JQ8rA(L^3
zd$gft<{!lE#3g48;t&~2x;P--jrkui05S5YaF{L_!V$*lo58J)wMV8uZ0XB at WOJFy
zW5Va#7Srs?MTGaDi1^)W32$b{e*~gYYxqf(2 at 6^|f#LR}SuuC at v{)0~Q$6PocFX{O
zGe|j*a=nF at ZaB~B at s1UIa4cq16A39B;C$0BA87_ih{9d<mA0AT>y@)#a`K@*S8e7a
zZv?&>xMcP>#@zL4e-UpnPY6jDS43{Qdt6-mTc|vNEBQf(yRxZ04)TuCVu7CEp}0lx
zzWcfx?;sL-Q;#AKnR@|bHuy<Wk#U`WAUq`|`P-ShEJ*^D<qfX<X at q)O`(rYhGpVIi
zG<td3nHPe}M&&9{x}5?<Dkgny?tH6?qbrrEfKcAIzq_I=+xY at 1-JV5d`}>>q2hqXJ
zHf@!1%Y}PFcT><zs(+IF3Svk%dY?$1&Z99_1my&q0I6uoC+aAsD)lHOxT9=;bsq^Y
zljUwoOG4Cqu?=Q4y4S=8Dp<q;KbTZU$4M$J%K at x1<N0Tz9I;*)9VDhMK19A1NX&)(
z)>r9xt=vI>+YPsl1b|gwmHQixG9I&Cw$Su&(${;Pf?sabcFqR8)uMF`i~Mu*H;`u#
zHqA}|I32Y^k&lrJPkOX#m!SiHlW~)F2q&hDB~Z?aZnzZLuxLDohWb!iB1f)td<+!5
z(UR>1%o>2JEZBJYzBocDpHGO-FVmJfmCO?tj>dJ)UD2whZ<}Xz2c6GR_%%{JQEAAb
z6D)e*{QHQevYiEpsqWTnOLm>y-MXKvowm(=oUC&NrziTQ`l4XbS;>Nbl2 at lI=Q7oz
zKgY3bX$p&q*lMfjitT>Oxd9zqP2Z7pDfEJKUSvz1SO)B(eFD2#Dck-ckb0~)OQ`CV
z)JD_UYf>E5<r?z5_6C%ca_&Ur(x?}AzT6xP9+Z1lrEVnpr2)O;rMvsKmX3h+br at 81
zV7%*t!)(fLsIp6^YKGE(Jc&<*Af3!ceeeC#>N^h;XA-m#^i!|xJ1M!t!{j9SOTa8x
z)}rqJ!9%jN;Lc>!#1GdAQSRpSf?MsB$`?STeIQxu_iAf~Y_3f->S*5+-YQ63qx~2g
zMC`EJq;BLOQ-SEM8UV0EHP^s-x!~fj*2u5fd%2<t)=ng9G96WarNAEESdYuDw!gJF
zSk6X&i`xjl1)L;E;_ at yIX*hi-8X;b&|6n*H!reU@(>=^&KOu9fgE3@!H0=R&MHXv&
zib4c6-tN!|Y>NfjYK!aaa6SYy0gWmUCKg8D>DYe;i4+9pJfL2;q8G&Tb(Y7vj;8bS
z`c5s`7&Dtqv<%yS-mVk;B2clDN!Qn!(91k<JrO~=UNFHjwvZk0c~#S2zosXwHPu2U
z1GpQ+OkXEO9=Q-y2eJ$2l~c at t6KOOAAr=Q$UE9TvZ?sbUSv9t<kkGwJ_GVg%5i$Y8
zRTO<*t0yFI*VZ8F)Nw+ys1>n3;2v}>Qu72PXSsJ;JCIj at tMGgFUlVEMnEBlX=Ra}{
zv>*KIB<nKJ5P%-uO@^X|B;~E*a-Ec(kSxXXET%&vf7dn+J{3+?^(uu6R(N!h3F}TX
z8FU*xJ3mYQY@(pVSDIkFey at WuaT2NSi_(7x+cE-=*1 at BMt$zxXf3$*%?d!shHTANy
z2AeNgtZR&at_WVTe+$cYX0a2;NePHZLZPxvf-T-YWvm^xl-?B6L@;hV-;v)qtJpPQ
zmmMr?W at O1rOOwqQuEh@3?mYz}>`zUtCqG1r(*1WNap=!WDakzSlh8>m2=PbnyMuV0
z7BZjILsXz8$|1z0YfKk-TTJ4}U3`c3q*pYzViU!G_PI>mBE!-y%AEvAY at 9tNNrB~s
z^JCsbX+=k^{KfonhAFcF>3IDn$oc1UTDq|3e7R8 at KBq7Ux*VWy-uTWHqBSyx6&$#y
zuAB8q^ZfUIJ$-OZi0%jqb+y^vi^=t<hlUDTcsf`PdN?nW-zo2ve!PE3S|>93^-)b|
zpe{RqJ46AI?;BAmZkyGS$I}Tj7zoNzW5wkdvm%f+|7lv&74i+=ay2kLu@}~{l>+<d
zDkrh at Ga^XyT-)>V<l0=>kCd5A5tu-|e1_>}YVHw37mcu>{%)D?zf5*BcOep%M>ox4
z#J9xmDr0RAE#WKl?7;oHTUa=54l6f=a4-aaXL=R7lvD}Eo$ZwTeZmZ*w(-6L&Y)fJ
zc&eItc|lzLy`8KGKUGh at mKe!M(_gC1D+6=!Rz1`TL%J{elrnn%p1sF-yOX$Sn0}C+
z1IVM~4>fm?(~BFx%nAsw=%0Pai1qd3YU>Mn_EF7{-hguKRP5gjL-X~o{eAn)5D^G}
zG&D!g-=dEg6PnWDC3x6eYBf&ys)57qevFSX92y_z{Si``xU6TfNR_%5WO9tdu-&~c
z(msBa3$vF{oA>TioXfY?bV62vu%H{uHK}ahQ>BFsERnV35-2_Zk%jZF=^mG7<HvQh
z6Go-<z+jj^ukX5Wm_!=0Pr=hGS$Fe)96^FNhJLvTe|uZ!zOC-&%lbe=mSLBlA!rql
z1i*`9?8lcYd^hBYd&K^-Bm_P|`o54v6yP8(wtBZzSZzTeI7s564M(TLX$7~jB6Ni*
zPf+urd{OH7+nO|@6;TMPUhx_^^Y&zcw=x at Uu5T4@#Y#(fCTXr$+WbxzggF;~FSUUc
zr}UfAxJ4fR6WNv)Nkd1_?-Fc<JYwrH9Aukb at FCKZI{08I6!kk5J`7$QG`3vxh^?0k
z at dB&{@WRIDF~Pfu&UgI3j_v|*GxHVF<RN5{)`|mR`*etil)c<l|LnN3HHW0ZdD7X&
zgdd at -1;#RM)Je-{&l1u>_?BOPDz3v6N(oW}YsA~!j2z1va$Uqx`vC8<)%K{qh3RN)
zFZD>+1y2QNF5k*;6O;;_Z{S&rAkE1*(Pb at dTm3-vK_1PtQp}#Q!v{v6#+MHlZP`nL
zH*1w%7^cAEMbK$LUsU_(0O#3+Fs?3DW+xbqJHR&snyD11C&zM$!GPI+!xg~qnEUDW
zOz&U)8kFIHbu4oMzO?dw|J1PQ!<IL?Pb^#lEivJ;X<vG)^t~8Mf&Xzq2_fYopK(!3
zoXYpr%=%8*hMg%rxgHZOPdgQpP)#>ty2Hs1C=hqDI;g8YF~`>y7<N^;MR-zT9lBn(
zQ<n*!Aeyu{RMU3{E--X|J3e1Bim1;XpoUp*m$-%QOeB`wuVkG?!Tw at jZ%yJlj;YqG
zYUJ{lS)Z6b<dd%2Yuon&q~R*Jv>q6MD7yl^K0C*@G+gOW&7@(COw3j6oV<0M8X8p8
z6?JGKkuIz$n_9g2rL64qZ at 6*Hr1cJZoPTmZc>`AST0hR^bmLZk^gS8qNI*Fz!dFHR
zs?gmLZ_Y>r*$w2D)G$}{HXf`gI2=KO9hVq-$11Sgh8H&He*c@)+SpWiyCa~d%ApOB
z*dv~m2AX%;+~J372&buUywz|bUmf$q%n+r#$-G?%^c1n9SzS0b5M<0K9t#Q2wU&75
z at B?0LcZNIb!p+5hZOhE#Dy_IJ(nQ8h^YL6j?2G620T~5OXN2?vf+K_Y>EK2IhdZY#
z6TVlEYM}qoSY~i~f6ilg0F4OJ?e%5_k)vA5dqIh~*p1V4$~id67x}3 at 0%R&V$NN5o
zi}xjA96^p)&LF5<h4-4zA;R+<(A>a)4G8fT!2?yYM;F_FP}|ol{>{nWiOd$$<z(bc
zEFCf_AS<^d9#>Pn6Q~)FbV||>=F3mSK1->n-m#MWKsa)!703!U)`UR!a=#}~kL+-N
zp%ZP%9Nznja<q>7o7OmA4~F603$>`Da}9r#*WgjLEqi)1Bi0_VTHcuu!M8M}4ykd(
z)s#HI_-5mOu9zpy{5&!|Q=wQ1|IhWvIz;=$SC#tSq}G+{Bb=)6lT{TLXajG`Nnj=7
zLJ#UKP`_ARBXWC}p*A;>3cW0%jU^<}%>y;#>2g*(7~^fO2-e%JJnsv&&BuZ>Y(L~l
zMi}-X&nzQvB<Gk8KyA+Uo~`~q+x3$)I4=e*OX9?T%7rDPSavn)q<nVHB&|`+zNIC*
zyVF9NuIxiQ(pn$Jb2#@uz>&4~n4oTopU5-`x>7RGWpRD2y<WEkNpP(QIR;IN5(+C?
z=qwgJGNaAp$fA%WqLLR at x|$g-$AyLQLx;4N6}f7VTHJt^^TJ9IkmL_KbX~jrRS(?m
zWp5OJ%s1olKQ=xCDZ+`knYS8X9!4E at FRT{&1O4slq at e2gGLmEL5BCu-1}c0P{;9*4
zY#}(-q2`PYyaH?CqI4W~N4u|Zh2pIl1MOlZ<bv6=wAM*BM@;SX+nr`yC#=GE(j~FS
zZL_cN^&X7ZQFG0|X?N%$IfD1`(s%iaSG+%e$7{23L#(VSB5r3|w^<ks`WvYkv*tR|
zPZpHcMA at vsc61?+eU*!wmT&r42HD)_mb=XP8?|LSFG9U38?&^{P%oUcK=%`=YPjBa
zy|VwkpEr3KEbYe+g1ptEpKXPsZwxdp`@iwU*bdVXErj+)nVIQjNZ*i+X-`j at Bcext
zG5cnCZJyA8adbhqokmP^%fir(4M%!-bhKlhOIZVBO}}|;PdpFLlRZe{#g5Wp+<0bi
z7Ug~zw)XqLDN(+)9~zFt8WNW6?AE`2|3KF2Mg>eMjcyQ?Ox#1Ry<#(*GWdHpS#O$G
z8~GoUpj)ztO at yQ~m$nbm#~NL`$PyxdyN|ADd3PaSvbCOZ8z0DGEI<K&8p=Jz?Xb35
zBzLtOTP{9JNgOdJ9BRt&KLD=<0(&6T`cuIO<dL~lkhjB1j&w^DxCtlFH=)qqmAWjE
zcGWZyEtxH$$xt>@gdLCP%R^WtmWx%3me8{J_QpNS#IE$wX4HdB?bpv5 at 8Ao6V=36#
zdCX^(B!a!uP_pHwW8Qwt+;T1J=x<B=835r(9-lqdmVv;>5Mx}Q_K#y<vNiFeJ<jZp
z=VHT^6q8N<R4~vfFL~|$wc2}O2StB5G^Qep24V@|A$#3WGc7d$Y|dkWM-ynb8eilp
zUd>_JI-R;<qbryIU42}76HDxW&cgaFl`M|EpOV;{)RY5w2WsbqJ=$ScG+=DYk#=!4
zE&BqH$r9R6Z8G(`EWaL`bEy3YiVgtD_I)XoX~5wh*Qghf9}wTrlE3ST(Un7`(xI8@
zDLe!bAv{qo at I=_>&0 at m|l48glXhv(e3%|4JhBi7zHCieKQ0w)Y^&L2W>1|H(FT5Is
zv2qc*ARrB$HWlJh6pWb at z2&M?lxTaB@<{F85y7?OoJ9rt_X?GncS4#2XGV~h0sm`Q
zcwI0vzjSS;N1zLMWMb(bnw=A!m`9xIB at JD>Bs$*Q40XTvC%@5aD at 0jeSca&|KS*Y3
zP<$JS24eGE?0za61&C*V)C5kJdN`stOr=N$HHD}$z;JV(kY+JsNm{phmMR+Q)qIT4
zK;jje;~vD&NG9{NTHjB&R|Jtvn$^xz?P&~_g`8yAM_#;gX73(&DcTky<!$xpL2EZM
zl4r=|!S~XBv9^{K4Uk*6=T9A>MXBi at T{=I3eSg56^%zGN9G1#|O{SO=THYWF1Xsy)
zSFy-2Wm`2aC;pBU`ltEcB646qrRnW at ke!4jTnphOtK!;R at tkXXm{g&FbF&Maaeyxq
zMX8j;*mi$4De*rTCXBI4?1gSFyT{PxoK2- at j{X1k-J2IDe&&vR?Kjw7WbTT?`<Cmi
zIJ=<T%QWt_DZ&<iB0O}l1gU&EqAH>C&LOfIDSb|1q$}}OEa>Pk1OI8Q4D9FK&bRsX
z0Td+lDbrDbthic*CdSK{NDOJRW^Z^X#gGGjbKP<=+?5xDZbO^-*DwCCB%Gs?Gny?p
z%@pm2*+i5comp6VSiIvFWOG*Mu2tREL0PB(Am%_^7>gHwuktH4UVsM>IyAPpK?(%y
zzk93GbnLFWg)!@4TOLrdFfb>PxDe#6>eRsvA+!a&+of45ll}!F-+68q*v+KH9s3*(
zB%W4!|F6ut&wWpE*8!MJIq?#nx+IBY9AIqv0OsVe&Yv{YphsfgyH5;YXqMpVk(i1y
zRt9Rfm74y4q>$u5CPswXHt9lh%5AiUVo%}X3;W_-4 at o4j7%7wIlV-?$63`<d#~N0{
z at T<F`z at as->G$F<M}dP>2Ecczl<BIXFzsgjlq&IDXBMS<;Hu(uqhV at y22;e2p6hyL
zj?DNOPg1Qla;TVlk2l<GkZd;n=r^jSi$t9XGJ*$x^<5)4FC5P=_~040eUla%`G4LD
z6hfSII-CK at FvkSJN?OaB$Lq%c@##tcU62uFIuJ;(GJLs8WFyje&bvxIXlM4vg+)(q
ziHNqEF`Ih@<Q?F2ml1B66&p%cZNzM}@~@{P)RfZ$efGi!nvG6OFkGaHxV>*#@#}W|
zDy}qt<W*->`rdfD4iZ(@OBLmaiR`2-lLMMo^n>E*SBH~@gyjm*pJ}f)CLsW6t7D4Q
zAIj!H0U=X=%t51}Yu1Iqk9n5t8}}c%P1%=vq-c%lD(2$y`v#}c9n3!#aEN=sKm2>2
z-k|FupL;H@`NKLmyI|nT7N`l`9e0 at G9U7;9Rh;s#^rV1u(OYexVmqz=Oo0NnHr}~o
zDthCXwlgiTU97mDyys;}#3?Lo;RXz{43D!qkK<wdH4T<`pAV%q8P%4;tItlq7MCjx
zwFinrK(&W#i4$5EH at sG^7;Gd}CoXU`FHHV?ReB|!mra`F-I{p|7-0#zdxWY$QwoiL
zRER)3*)9S(4alcenX8tfMytq6DX*ZWEnBrxZ8!kLIP*a`=?elzp$0x+`ltxKG?liC
z6lmg_gGV5ByIe>?{bj<W$SIlBL&1g0NKQ?fM7(DAJNX^ydE=)oji?iT3c?p;QBJHC
z4cRH16_A<<KQVbe0+$ON9NY#XFoGX{Pv_d0<cY-MifX14W(TrfkYd+Po}I{ztl8Mu
zD*)eNmW!B(m3VP#=c1%*m8JK-(mR6}#ybP at 3zGJ^URCD4_MKe0KQ`|YjtytLY{+AK
zItDSMK)(KDo^aJsQeelgzGxxY@~%YN%Wx55l{X>6>4*x^_WBx}6L5i!AjLF)*?KnS
zc|essrYbS7A1Fo(L^+HGC*gNR5lCj%61AJHk$T$g5ehjGLsA+%yRE|WO;KiKWj?St
zjW$0~i`rm at ZBHOu56j$xJO_QI6x4cWk-n^0VNd58g2FeChx!bNX4V;||3vJEOpYM!
zVEYvEJT3;!F~?sDT<j<5;nZAz6GAwZWG%Ch&#<jp<Z%xZJklE<bc4>9A8CM%`{FcW
z>%eX`uj+i>kK>Y+5-)EWs~9v1k at NUV5rkC)x<c1|jyb)M61~SbQW2EyT(XNmx3i}N
zX^F&!`h0#R<D=INi}+dSvQ}i<X5BTye^6es+Fd8uy|&<e at -H|4=&9g;1I-BFew>g1
z at Yp(<rSOh|yw093>WEfPIOIxLU6z9(=~{6X<_XBE!`OREB<$47V6ByBsX8xv_(C2B
zuILFk&*TAYdANvRu(4J}#`d~Vc at 12=Yo#8+{Om<qYba+BWIYeEd<|vP_Gj{LgQCiR
zR(JSD3W*e|k)~pr;k18$?Ldhcj}(WPp^wb){;;{!C0F8`X(v%9tMV|<NZ|HKW&{#8
za}>k6{*^9*Li=jWVu{lGAwfP^-s#GS-E7xXH1A@>IhxiJCgdd`OFiyS`p}`FDn$cb
zOkw!JMMugvA%DhV@@N=(yu<<s-*EO4JakS}V>(NDFT7CV8U?n0nHeqbXOv9~lSDd%
zJY)Wsp+%!cCg=q at R)j7pjvE~VByM5B5DR(7PN45$<L#z#<iSAo1ZiVQaYEumJsg|`
z$9UuD{vEUUU&@8?)Z>yjv~?+y8AHXZ_JS<?k@;Ib_QrnX#I`V{E-DZ_yO}@7w#*p>
zrGC8DTK++y>le6x<GU82IfFpinV|>YYTG^vb?=EIQg1LWrvPggAv)?bt`HwKqQh`j
z-TRCsPY4{^$p#irC@`+n0fe2KCO#@l<`P1j23PN4i{CQ at Y%Z=dA`N~?EAm-C62&Cq
zP|8j!XqC(FaI&-h#=&wiW-y)bt*e5EmN0f;X*x&2(yYyYer+VA68uhx1mw9q82c2v
zXDfZVkLG at WBcU@fStaltL25$xEbzX(cUSAcV`RrabsI32WJO^morx6*4xnkFt%qOu
zwPcaR+Y at D1MzAQ>hY4k9AfNnq0*_$DN?Y}iDBt#c at d(#{HM-biW!Rz<PHZFFE(@Ew
zrqHjE#dC*$+#0%%@H)+AHiF9VA#IDR at dtdNabRMf*d^m}a)i7z{0*OoQz%2g$wb5z
z*d()@?$HJG{xuG9IhXH0=Bvc;q+H6MN9b+5<V&>XcB{c41>GYy81>bIJjJ)~{gU7C
zvT$WLbg61Gt_&efDndH#(EjZP(X5D0tIgV+gSjMsEPwdex~fF%9hYg#yOx`JkPI*K
zj4S#o&1T<eZC>o8I0!LzypHJld1Q(SNR{84BL|eJ1^L>iE&P^iwI2$9<t5&ylSf`R
zv3P2{uOVV}(bO`%J)~+o79I8YWV`?TqbD<s5HYm6RgWUZas!N;^7;S5=7&o8;$*tc
zZ}Y5w_ADI%r|YpgZ8LRuxLC;28|IzJSHUEjQc)X1K*fx(%O)C~V**hUs94vSd6iT!
z at wP{_bU2BURRKWJ49QZ_PmPK8)>cNG30n3X-XVg{s2K`r3X6ZuWL*yxoE#I_y_a{p
zpfP6$$3Y;LSZF!B702S^ktYcLXusIXFiEI?5Lt?oGLmI(`<6&weO4 at 6oTB>PLrx&;
z0M;e_=?rm=o(8<d5R-WxJOUVMBr>Fj0}5dH8^g3GnS*>J#$(cj-cEy4l>bt`%te^k
zr)tJPFpH536PQF#keb*VH{Bo%jg?kHYit}-i<spQVWh+R*%~gipt{S;ujbQDH+xZk
zQ`qnzYOd=EWzhRo{+$Igc!kvTEFtS8GD;Zw{EfkZ7y=X%MXyfiPk)IAZBc8y#ue^o
z_j1O?0PyA3V-+bt&vkHZ#YI^o>N2UUg2L(ALn*uUx?3hW$k+tJ?l|1i#aE;Cq<sfr
z-~=X%1v#e?9A$(v$hSD(_pCI&T2+OA%=$hr<e{ff_8cA}btZuU(m(~mx@`5s6K at p<
zTbriYoZP!Kd8U)GF*cG*3=+6337C at T0K5%0=IV?f0rjNhP-h|Md4K%?P5ST|Ih-QA
zK;|9?h%GowoHI78sAKCZBW8Crk18_~RH7)Cb`j0<B~Pp3*SyAA=_2D+AO-b*v;XCL
z^^~;>Q%$8QbY;j!cO>sL-*HdEB9fQL#v{b)!iN9u*?wUBE)MK_ShkyV|AG4)^jUdR
z4On=qB+^H_e3fxNjj45_I&3z2vcDhkhs{SiEqLb>y=v%G9!0TRA>;-Lszo)r*nPkt
zPqy3}`p}e$=9=iuh|+W2X!ekQcUzmjvo7O at J!^Yr)3wwY?h84ypLXN{_d*!#U4+zn
zzLRwuxXTe!Q;c2SnS at l**!Od-!J6hc7xd^fk`f)yM1=tbT6j4mgv$@EWpluOZv#&A
zy0ph5zU(_pUqBdkO6Z1P=5OBN2nXIE5TqeDmq@{xaEtd$DFzfVz#CtGjs0%SG>CA>
z`T6hP44Zf(`Xd|hE3u0`!6U#84 at Usk72@#HrX4MznJ%F7E)a%M{kyksS at L{SWK3?w
z#q_CLedDQ8fj7=NZpxtrwNT-CtI43Py#}zXEfTUOjM+cKwK_T+>OD%qqwcSCOV#2J
z6Tm!Ag$equfA0BEYT?>{4 at 7Q3<C*(3r<vk7mEbE)8z<0fC1VgR#!I5cn%D_|ff4qD
z=(GIyf5JaUGGvs^WextDqJF2evf}nKez8#*XCaB|Zmd~VCiDJEQ|f>!Zy>n8aF@~t
z=k^M&l|g|K1(uh-+M^`#`7)bfxq*bmtF!$2Ijby?oRB?dg#EC83VfI0rLL!tcQ_UG
z at ACz;sd0{dp1<a-kS3F$y|AF>igU)Ut6Ql9RFAm%<9zn@#MU(#3a<{Bl&o^mTTh=m
zWE##>$q7%k;mDD5H(~LfiB=WEPV$c0g^n50kRONXj<*>}hamllX~z2NI!(-}s_EbW
zS!itBC6{}&U~ENyW<%fuXL=?i235I1>AE=+=VAwTVZG69NQ60aoi-<>W8{59tWzgu
z*VW%1wNj!5G>Rr0b24oZ$=_V=A>biS4 at dd0t)EVEkf|OO;fYmuqur4EV-Zj1v at gBu
z#0mH7vEwT7_pN%Q|A}JaTpDLtEf5LS|1F;3y4z=W2ht9IsSs7*frjUato>smaPBLk
zuXiEnN`wS!4hhEYyd!xkjwDQr>mmLDA(!UnI)?2Xy}Q&wTyMy;Bt5~3#a?HCNYLSA
z6f38Y-v?WE4|K_dIpEF|T+aJIS_cc28G9Z^EH`b*kRp1+q`P4eigLj#!#sF!RWve*
z*FTXP?$Bd at 3WdBtL?I={q+x?P(eu^Bp`Z)hlYaGNMiKEJ=b!dwGBReX?K at OYLfkun
z1ZlFN7Ye2u;##KW%&m}{*6V=49w3{KTSzMrUqK1PiVN>GD-{yatxSf*n^>X7wslFH
za;*@ZX<|S0{D&PVYyCL<&^>`N*o%xaY+Ue0E+PegWKY8sb33tiC0LN?s*70k9QuB;
z^~mlhR5<dp_l>J;h!tz+!~M^pqQwyMjxI!uH3*EDqZ^xm$0AAf>j$hfi3qcEJKrJY
zrVOqgTlb>w77zC$pdBnh{Zb_xh$|~E#Y9Ycd-p>gkWIFLbo~wdzX94I-0nG?jVSgD
zw5}n4ULC+EA at zM}N^x5!T)vx44Kw{&wL1^*8eGrh9tL{tOvXV9)ugPSR-;?+RNtRD
zvW at 8L;su<t at 2aTaxP7*3g7|Z5wMZFu<Z2s{<S<ACg|<4C+8Q?`i>)~-5Z%yLL&bzm
zo;&25Px}D>mDrTe=v`E7Xu2~m=qCdF7P?b^BfMNv=|@PErywxzImVCRbJ3+;e`3b4
z8nDP=EVx<5+%1NNJr5OZ#r>~C#KLe3;>o=totDCuuEsboy*is3 at ghD$jyod*W}B=G
z<wCHDE?+>IT0>u-VS+v2>yCdIVX&w2HBc2;PgA$Vspfh%#;jIU5}DYJq_HoTryJXU
zJDu3&%7J`U)odMPK)pec7j%v8NM3Tv+EmOrAEYw^at%{8C-wp`ZcbdDf at G<q)dn|t
zx&b6(hrzWKUr`#}5JgtNFtWbPw)~;FyrYo4yU*B~Zi{{=aNv6i;{C=-tm)_k!%bcS
z>XnKcnA*$n44$0x(WI3^$qFSA>JkHgJ)W6SST2(dWVH>OLMK>4{i>u?x&I4gpesbE
zrCXdJ at EuACX8eXK(%W=nuW^}xAY94+h(w!;cQp)ue>sKjU6}Wc)snbu!K&z90qM{U
zV444hR%+{$Cjc7<I!`~yd->B*%#`*Wzc9sr56xL$6{cB=HJkd&(nIb%%CX*m6>X#c
zRB0bO%d~ZEayR4S2Dp+BhvIGIPwPGum)i?SLrV$|ay!MsXSeNdCcDT7mze2}a3i(~
z(b)3Waw|&Q7APG|IA^kVSLWxh|B1T-9~3w$k4x8tT^xI57O)Tru}F_v5A#I5B7`{p
zDypK1k0Xy at dit!`t8d{hnmqb{JCG_iNu6(5P{nco-{2hN)LNyzrWlY$L`OXK;U9ck
zkmtsJZTjm9W8If+7|T3>2vLJ7{3>^LTMX-4Mr^w&f?w93e~FsO0?eXr<Ncso2uYR+
z?rkGiWq6#i at du)g5^mDn6hA~1 at d#WbAcsslbAeKnJHOVuhU$gK_v25098JS>_e{0F
zv6MxOR4dwFw2CH3 at zUweC31-3%n}FA{9^TE&C<pXqrQji%MbjeZU_gykB{%XH~!fo
zteB37%jgzi{$=fcBvw+_3ZJNM0vm6{YBYTi1!`3FTU5#2#sN+vkn`UjIvT_Vh*C*U
zlm0(z)}eb{VDV5Ac4XdvbfeOVVa8hRex9HlFTd2M;o){=JZShoN}GO#Ifz+Lzd8Wy
zHW%E5INLCt`W;BKd*x at PHwaY%Pr_c4djFdU7Vtf;kY=b!*9h<uan=}0ZFhn?b&mpB
zBp at x!3-l3}Q`D at 905!hO&DgixSW$oz8O{QB6(HFBwLJ#FS`xK?%<-!L7l07-%ZaM2
z$ZBIG^X>n$I72?@O90504ZzUSnNSSSQRW+|Iwy%F6*E}Kv=!Q!>8Lm;_^pePp<z0V
zes1xd2GIS3q=andQ=FtJ0d!;>>3QLr?oZZ7J_?Ub%8{R~wCPMgGNAYV9Kq1q?FVsA
zw6Xb0hrDQ76BrhM!d+d4`o>O`$8bMGAh2QVMCD*upx2S_9Vjr5&uTsClrTh!lrJW9
z%0&&?F#REIJh#_uHneQ2;pvH1ff;E>!Z!ZO(sOT(Gqc&a3OS6RX at Fi?6WI)bP9O!P
z+2Zxb83Iay;8$@1gCP>j70<L)Twlj~O$dnVMj<fI+GD4GBBS9m25 at 7C00%($zcO_z
zx^y<xl)YnQL&qFjp6fddmjRu`BD%~{hx at wd8Z_8UHcsS$wb{$L2GYoHxvqyu3*5n=
zY*F38Jop at vVIsNBKfQIn;UGVvhS()*x>|h3Oydls@=bLZ&f=a!<`+T)*Yk7F at Fzrf
zTnNTwJLT)S1q!J+e*xc{=t7%{`asj6>*`q3N&P}F`~@nLAW3>wvRo|tu2_7BIDo}Q
ztp$BARaXQ6nz@&b(gFps`N^HUkA4x0mo+u=cx!5ktn_RK__kI-pMTtpm=?L(<sgg8
zQJc^ah)YzpqET?5BwY at lUd=Vq1k}VJE6(>R4`)|dO%ZcHe}MBfxuZ~+8$#J!zH`0w
z?B9XJ-T(YbOPd_ at n+Y!mckmebYUk<*%_xOLf|CtZxp>6r)Zv9?lIX_V5eIeuX`aIw
ztwByGPuJR3<p!uCXk4bF7=dX?kGA1E+z{qw+~ln-{gL{^5jHotQm6I%6IC>7)^Is}
z=*{bV;Q?+mf2C?IrN4Y$pl1N1cWz{N<eq{0F{G42_dNmAAm&A&SUtu&{&_>TE{4@~
zS-YV^X0#YNc(%@1{A*$Cy3v_kWB_8CPm_e)p7{r{9!r009AIE?)q?<Aa1k>~NN at F*
z9Ur09+kx#>6zoYX+AS|GaZciZRfJ6dw(Eg2!S3;<fBER!coVT*g6#LnsGZDsrR+%d
zcfeq{RdRZMg5$J3T`2;sh6r}#QOmpFT&Ek6b5P}d#9vM{aQkbsaQ_$H>-c+gy|C7I
z9U;Q=#Nt@~dP3h`wZKz9lD_KbzQu^HvMi|1<=*o9G)45A<O&pFBqwYaXw`K%M1L}O
z!{jvVe~s{s|6!l_U~)JZ<Uly+xkaG#Mu7q};#mOz{kiN<7q>=0>W`}tsXx^I+CN4?
zXJf)7x~e<(?TU0);o<!_`;h5>v)09d0kd)yuqMt at SPtHmEJLulmG6_`ntLfO2U0of
zG3H7?K6qXa?j2Z&Ji`?oj}y4x+#NlqI)En*e}r_Uk@{n>w}KVz+<cS6<vx=s0maET
zE1!pSMJ7CQzT#oiDyJk<TLNG|7d5r5E at O*$0*eXqo<<zEjKm*)Y_^i4|H|D5XLQ_k
zRTf7UM<YvW{?!W1BWXH#gfFuFT7H6zC~MbSNJ=jD<x>_qDX0%d_xgiH59zyuthSu6
ze+)WYsp)(>-=Dh8;U!z3R^N*#2ozeJ$!zXaUCyz95xeFi2kNnlPZ)Z{I~2mIYu&75
z8*k%jk at K;EkiYALkd^F5V-Dv6=H$r>R7&fhRn)c?bX&A9Ddhl*_-Qie{}F}=8CtAm
z6?xz1N at 8!>Aw8S%$;&R`m-fzJU!JFYf730=2G~Cue-IJ9T!(u at 3GPt8{&H#!9HuDz
z^kM+<UD)fQfFkky%Nkb}ZO2AvCwJ2RJQha^SwR_^U||SiD!sD=u#cmG$$ZMQ<vQ4`
zqb4mzefg;9X^_xYRub_m0-*O)6VjmTWh427t!(u*UJ3OWVKL+e95qod&Dl8=e;8SX
zdPU%J_+6Y74V6G9FtNzxsv%3=Pv8q^Ov92!+tNXFP<{#`RG*^hwS`QtuBCo^YX;D?
zxW8JrKFZKT(J&D<26oTVs`|8mKG*5%D??o({7L-!;kgLEx-;Ln4a=Tp<fYh&zBM1Z
z`Fm#AS%35TTpx?@x`G3Ts9;lLf6_zEKl|jC!kO=jZ=&~|{|54{2w;@E*_u8BtlmCK
zUX8ufc(_EL6A7&6m1nx{M1v~OF~eBCM)a(;usDaayP}IF{Fh-;VwXAeU#);iP;T$^
z0*KinIZ at h@QVshcg)h$v%c1N8J9zg1o=I>^-_SD<0ft9TIVk;yoscC+e-#&$np=2o
zl<tWfa_47clCqDQv&8$yw`8u*g+mdojAf%*cZP$NC_speRN9(0k8rwINp6NgsPNes
zB)#-qW)mSMs<=o}K7M5cA!=124J2Vwc5XzAg(wBKi^Mz)#r2-<BypM8yf?;v`Bn96
z4)#~sZA@{nkA>8)R&_qCe^4X5eWqSb2UfnsScZ=^P3g)T6zHP7s+~SVX{(+;JEkX!
z0T?1CIe?qkQA@>_?mIBK_ltInL1n;})sUY@(HXqj1qWn)$nPifWD=M4o1=c at 1pur0
zUww^PGv^Snu+0Zq5Yr7cHF_DpVV;z=@=&(n8}=g?asEspO%JTue~a2B63)K9lLjg#
zVAYP%Qd}sge!V7Yz?<p5HK^g%0f^tu>EpMg>7rAYiZ6y~;SRVv*RH>Lrc&!=(`g#W
zi3wpWFCVRw<zi5c&{mD~T|ba+mb8i<kCiRmTlR1mnF^9#&p12lWhM9S>!Vz2ukAJK
z4N}XL4JsYqj;G3-fBsNqZ+mW+tIAW>z}Qbnm+$xPV1CFF^~V)X`>Y?%K$&xq*iJJ+
z>>PN_sV{Bl86}AIMhM(yYSJPBrT%!U3FTNoghd~07lNyXpn68CqJ#VE>E;8qcbU(#
z`5YgN2t|qWdqqqgqu<ytP3JZu;0<?WDICsN+k|N^!P>e2e+%lFhYzXf6det(pbWFp
zdT2p{n?zrVBVAu}W(hIHe^a#DsKk>3dLDDSroW?FR&=KVrL+voK|bttYtfUBGCCL^
zMLX&4)NsDC4;lQLAqv8(jS|eoXybo^9VlCr_bG!t+@$=(la6pvV{ic}_1e|DQ&d1^
zI{>dvMjAv!e{c=&Psvmw3 at FslLF7W2DT3BwNKK@(01*#}?B?pcUVsK7rWRHWoe at 9X
zKQ9ei{(Z!s#Q8if9VA{d#Hj0#+BH{i5fovcF?bR<?fsJuQQ`WG-_`zvd6hF7Rtq;l
z4UUZZkG-oIXbfEIG*$9{;I<7Jx6}hK4qM59V~_;Le^J;(VBZI<BrfgiPrBz*Z;%vj
z8vAV)K?RM4U)Y5*(Sy*L=_mf5ri?eUTlF4?KwP!U^|y$=M+;U{lgRJcHg36eGVd$t
zaA#AFNfx|v3lql4BWxIJae9Kw?}?6$sZ!Sl)(^7%F0Y=w1q3i&E}_S{V?`5DUx7Db
zyT7|@e_hQ6H+iP#ua%D~6;2;7*S=>1`*#7MbbfyTtXW at hRnj>qZPoI*%k?96TDiVe
zzWMp;f>6AqIxure99I7#6vC+D7*ZB<11sP?c5 at 23wr#FXtkMj{Ffjz*6dLc2_OFEV
zxi-^x_yXiI1oKez-yoj!Yd!eMbzzdlHPTu3e|wnlQyZJoZ{!!O=MwFFYi1F&l`$Pc
zSUU+GvslP<yt8-v&wBUIqTAl6Q7!Nf1r`Gm7veP?uZ0W4XYrg=xoXi$5HEtw#naw1
z$5n+YR7W+_>$D(&;n}UpWVrl3R(ZTJZIU854M at E=d2et_RTQclGNlw>-%#(M9P_EO
ze~Z!i8d at B=M*8=QjKIWLkt3VhUPJ62mDkD~X1uTdf(m$Zg>M!2Lvg}c>sq!xwq?@>
z0^s|Nf#l%u)pMe*mcC$1R>VjIw6<0mM(A2;2^~zu{GU3flf!irP_`#$KpkdLG0Vt%
zGq)>(K#1(7#XM{$u1DV~&6Sn6fS`Cwe<@dXh7rQ7jw#_UF7+9=H-hv2(|}kjVleg_
zb8gPbn`m>nHGS1h8SnSN#^r%-7REurjsXz%!Ok6O6-IQuw42$R3SlZH3ktgG&?lZv
z=wK>k5M*zNxdCOOtPj_>nH)8f^SYfW`7ys81#*R}{SXXD#3DedDH(|)w7%1xfAn at t
z|Jt8PEQv#&lul5rG1cPm5Bk4ntpu$5?`02PtvYV95L{uvD`&QupQ_Y#YH?0Pk94MO
zunl<=EhvJ;uysL)N1s9Q_MMt90j=C^YCX4|3s=C-Ii(gp>h=<PW};K9lQ at EjNGR5d
zCi8c|bBVrh9Q<~!7+p#%wN+-If7wpcv%x+y{Dbw}l!<c?8mk;FfCBs|*m6xlX@(Ml
ztOO3VB9_GdlzbOb@%+yUs-sN<YE-tUO2K#T7MecWUA{o%fI-paQ0y-2x$tumfMvp<
zX=fbGN&ln2qgInEFYr*xxTSldo;}@Lq;v$oX79gBephW|=v{oLMP>8Te>T}p at 8y|h
zRTlaNL}D^W#ECgok8cpa=|P>kTx@<KnPZuC(sElW8+*1<*WB|%{T?xsHK~XfVi}HL
zWD5O~rFqLQ_IX{$@8LxR#3vfNA0fVpgNcd7KRs;A0&bTVRZ{Z(i&5I(azxuF$<~Xs
ztRNH7n5I282qLwnKJzcre*iu0U@*k!hmT=MUFM?Y%n=ty)qZ$PQ-6hWsncGuBu59{
zU|e$OFb*_yCA6*8?xw%93et2{vQUF(swn_Dwvxn+ZzdY@!C;~Y7cWIm``}$A2chXl
z_X~N?M6pW1DRAMA|IgrCJSb{nq!!c$eGZoVA8FBZMzsOAsL(UQe_yvHx?^PFe-vLd
zW}2VPfEyr^nEggopapxY2;_Pines`7ulM+TrB$@V-A%mSAYKM%<SV$5lLx2HDF{e6
zHVcQ!KaQ~65|awC47qyeMVSw#1i%V*nH2ipAWbCduXy7_7VZf7L;$-!i<`IAAegY9
zyn&rd^y3chkU<Y_e<GvUCk2(6(Yx=V5-L{}K`9*;h*0nhHqLZPffAyP2{Io?cD3B4
z!G_XJq6fNrcUmsQTNS%myxhjYtr)MNx4mh&!&U-%PN5sZW1pKHRyfgH<~C at KY7FnJ
z9~Pre)Yz9U1`Sl!lRMa$KxHgSuS+<nb$96v8&Q}unp<WUf8ePdr*F``(;1Rml&jB7
zn^NYDk@{gA7er_bf~J1~*^^JnyP{cu9AyFgdZi{NL0plI!;5EVR1OUP;>i2^zZ?d6
z4eGs+ay6&|E5t_Olv7wnCo=kc%>SFdG!sYzCSwD^G{X~imZa3uAu3T5!0&)1rQOC8
zSNY`-alVNif0au-QHd*`VBLs18uUZ)wUhN0K7;O6gt1yU_PfCDXzfxgw$3?%PJHeD
zwSc;T(0Fz~NiPt`V*3qtE&=S89V=q(fLS%8Tq-!<zz>&y{3Hb+5QuOM0>{PIQR=-!
zotnPXD9~`4D&LC9>aFLsV&dgiD58in4k0X=^Vh{~e?n#m3BatX*AY0)h5hF;cJuNL
za at _fg`I2>014Im>fap%LT$&zUs4jSI>3uZATZTA3TE-^qn66(}%eZl)H5Y-K0wTRa
z7Fz7P!>+~z&?)W at Ydc?r;y#0)qnHzs^{vZOagt%(ctgQ7JJs)v-1OBoAjBo;^<ytO
zKWc$9f9v~Fa6J|GVm0Cln+A;pGTLmpiV^A3a2i8FweYh=xhG$Z){O?KHjwJ9HEX|Q
z(Qzaetwpg)5YTnfZ!{eCi9HnT(XiNB&9O)o!XRa(UU)4K!0rl=ImAZiEX%ulUDXGv
zH8fah16Rr%9DUO;J!E9vRjm4qy#o*eCFA79e^vKDWc;M^?Zng_^oheKB?kPqg%Z at O
z?kELQg=&5Gp>3LFmcSd5YiX~*&(98ezTvFNH{rrES9JptKu~hj<|@tRAy!ma2$TO~
zl8ZY4d%VPs*dD6&XjSEu9F2a1wNvT3a&GEZ>dLda*n%P`jA$bGNGz1}VK<Os&`7GI
ze`=J5J=oU5#(b*9HiR}vdF#Bgf<0_yp`T#{eONV(HsXmc%5g#5CeFWWJ$_|n-Z7#&
z)C-juo6bIz<gmLeVgA8|b0G#@p;i7QM3y|mn!o&@bJj4-ypdT5{jv>b-_q?h2+V_6
zs6qt@^sXa<hV<5*c4%PQEg5fTeZML5e at R?W^3kcCilUsuHNq>5c#VmN&`moC&}d;o
zADBh3(mDKYMnmepui<xB-%AjPvs<)2<ZlFTXH1EdE5W0}G|d_-iGj13(I4CzpajsZ
z{4+CLN6#6TnhIXa<(Lcz6J1f*#A!)W{kB&d`m_BFl|KpeHQTcI>~d}P&c!H^e+Ah)
z+ID7iHMccW+KNfc`B{;3Yh}>kQ%yvs9|sH39u~-KVao*(Mj+;sLLQ+o9!ON1mf(y3
z9^k$1-yPH5Bs8jcwWDu}Tebs{$c=>_21=Tqj!;b`X4?z!fYYtn30aL=2QZzj!r<xP
z1qAq_;)P#16SV~q+62G*7i{-`f3fU2SLB6`C+<YoIX8b^l0W=jdw<S5HQR)JiQoBk
ze*+jekJgsnzn2<LL~kqLz04xg2v{f4ac`HKQAH!OyVmrpvWL!Gu*4L<$ex!mr6jim
zmj64sux9dP9j<;=(}<Lnp;IU|v$Z}1iKV}s#^|<QBpD0lJaX`VRw0P;e>XA;fd6ow
zvd|w{Ky_)P%I~#75#h0}BgFDwb`QylT=J_A8wq`@?C(4v_&B^ka7jywWTI0t+>XK0
z+%$%9i_10f)olWP!PnvEJlV&a;AkfX*(~{7jJ)fZDg1r!zm5V_N(}3!6bcW&%s|o7
zbIw%N%l{4z$(;ip^)ANJe_ThbHSB38;Mz`H{V~NbA6qLVT;h6nRin|{U<Q~U1-w?S
zaP!}%<J@>Mc{oLFrKA7f-7cel8y02H`AlFg&xEz>$PVx;A4&6!M;xHcINkux_GjU(
zjHtm50a8YkF at Mqi)R=P7(e}E2@~Ty6`F%f~dqu(eB@<==oE^1<e`p}lnui`l`vHU=
zgjUkn8^ERk-o4`VwRF>+s6t~%<LQ_N0$BX?Se)>V7?efA$@`EfR$F4WXv%H1`qBNh
zy2}Jn8(pg7$NKhH-_~GIvl2vIi?0~f&SWgR;c^V7S?+_M*vX)Jmy#|zSAb7J(Csd~
z41Pz?7Zd4Aw^UL~e{Vkh{!U1`pIROTYVBcUQk7$Q7ibk>5FW1pQSamH1v}qCV^V7e
zgnhOu8}deM$ZREv*9>Q1Jx%Q>YFy|rsY05S0+~0%pj1NBq|)vZ>t?mQVesS#!^})L
zDke9VDF$TqxZ%)a<9}d{aCH at _XI2|Lp-bSXWQByE33{8#e~CxeWsiE3--$}IiUoL$
zMdC|ah(Y~^kyzuCtUnuGNCpfDZwUTJpw%R2$2%uSbwO46(xZm<v`piTA=%!A{;!7m
z>l)a}OZ8=DVWl;4F-0y530J&=;$b}F*`rSlotT|rMstR3(GPSGM1QR6#v@!?)yZW?
z*H?DMC!i1ne?xhy2RR^dLG$H1c5W2#BE<0i11+*xE2C*|NNAQkpnK=UoH5_U;W!B0
zaVLvTL64DxGOn1YO+iyB*>$Vy;<hv|LjAVLPm)s0!E$c%3F-^~Xx_8<HcDKO8*`Vu
za1o8HbOvJhF=YcfIb_6+t<s994MNJjoJ=yjMn$a1e-yNT>I=-;@Ec(>U>-6PDWy$|
ztjmiL3jnr at pQH`^nWEc}dC>oB{_^$Br2P0S(gT>}fGglVLc<!H+CmRIWt!=b&L$b_
z-JLVE at rUAoF;H%QZCcm(NA;~~eF3~B>gkAEUM~Ax-&JY=k^!&|QA-#3RhaU~!RNH=
zfYjk_e{%$3Vtz2c2DV%7r)Xet;6*Fk$QBPx+zMunOGdUHG!g1M3WpqtPSGcL7SQ5C
zKSCaxw()>*U_mgh&z{Yg1K^ny-?k`4ASu4s;1r}|s%N1HDE~LzWJ-xWT9+Oby}e8J
zp&$})I%tuxF$Zqhs*y?nSUga9V!`Xp<!m1Ge=v1PF39TEZR2rOEVNr#vvliMy5s!I
zV60FcRrXW?Z<%Vus9fajc6(tL!NS=Xnwv9+-Xxu)<<P-0 at 2L~0H3?I7j4!sGW<n*M
zE#f3lHTr&L7?4;JsNF@{2>z at 0MUWi!pS1!gxgI$T^Ux%%Li!@VkPS-J{Yy)UH1AE~
ze;&zpdlj{;bRe`Ve$o7t#BuT&^x?Rt+|#=QxOlx%eu<QdRu%mjs9{2kkhMmDL+>ac
zXUT}}+EY?h4jVf&4Gb3d&`<gmCAG@=&i#CH?Ej46)N>+jsr2Mag=DDgM-w#BmXLU*
z!0|qWrqc(1yQ-u~&!b;|fRicfqH=U(e<ih_V}Cty+j at SZ(<NdmJoN5}?8_bd$nl>v
zZ)?h4V5C=RH?jz?Q9748LM-=GWl}XN+A3Cp>dc=wP03-kYxdFFs=$8J%pYREI4Kor
zPz&;^aV$vIRj3w_VnP1o>;g1Lg31kaGEr=Shhy$T1gKgij$RaR{w8qu)fjb&f7_x@
z--JB<offN`kn_Iro~(zy;MT`J-~~-B6OMil*%e6a+8e>Do;DKbvy`wyy9=IoEQA*a
zVgeagmovYY)Yff+vY%i8axOR{%jpjZ)f1nbE3;~I28tKZSv!r}f?6ha!?8?itk5Mw
zH=5q`n82!HfiYu{G9q9idu8fRe`}=|ClJ)CqG$RE{3Er|hVc78LGsi({2jL2Q~}-0
z=JQ*Wrhbo#Gz6$03>pGq42MjyxiBKk#5C~h^Tyx>P7+vsOut#pZ=QjziYxVwy6dW?
z%)j+o%bppkP5!|&W8!541nTXD*&mW#zx+?_jWkU$Y=pXd<+zv{3N3XJf3Qls&{Yy^
zDiGe{X*^8%!J-7co$~*>1=jCzHjeCfnaNGe;H^2M|0L`KzHg6)a(A4g0h$;5YNjEv
zw?@E04-_z>@(|c at r`{+A7;;7YrzX5r5;_pQ(|7kD{)@}vLdm}@QX4fdA*bP55f&DB
z_=&lz<qpu$e6bEp;#(zhe{AcSzNe(!igS+<#OHR1rC%RJ%Cj!!Hm0n_{KbSMq9zUv
z&MDDmPFS=~jL{>Z8o`TlnC61e_QGS~3MZ|aUB at K}9ACObwm(TSj56Zm7&~rbL26<r
z;RbcnW_1ySwnPee9nk-T;HFq(Be`5{iavuTZ7c{?;%U$-w0uQKe=bVEF`bcf;RD~#
zm~AgCCwO1DTqf)t^~LmLb=&Q7`=z;S49{9{l4Ui=D9Cw=BH5Cs{f4AD at QD7Zfk{GU
z`l0r-a0x|0G7TiE*C7$P>Ab6y5d!QdAK{$s7r(#-f24q*5)iHFt?&mzTR*At6+L-w
z1ocueJWK;3FAHxke`4P2D7{Z4Q4#Tp)S?R}xF)%fzLv?qBVD5kV at gvhjL557=P)4<
z!pVq=y at J?u>O#PyIjM`l9-ohs>d_9g%S4lzNai<}hg at Hc|7901xoL{|oASGT0bjDl
z`cf6?(j>pe2Mttmhzwc;SnK6gsIhXyqv$>0(nz~MEc#CWe|S$~PthHA*2nGDVfh{>
zoEc6j0?L-AQMcbeyW8I>kh{#grmqt0W9$VpXO=sC4`HGGnGs5i?gxS97}UKrJ!Mi_
ztec5u;hDP{zCz~&dg)_bRbqUzzQ~UD0loenDw1gJzmv{US|)c;%bKz1z=?2XwJYNW
zW6&dtrS<_Je~u$qANm~3 at 0UxoP*C=2cK6=5AIQvC)Dh$UGfNJ(V;TorMzmCbeWG<m
zXRM~xkQY2Cj*U<tu%2s%&I{iMj~>AF5%vNk$_z13#2}}bo%#uxPi-?5gpSEr_BeV+
zBBbC~k1ueDG`#+<^(6W;QRR)!Y|gogBpOw_cSI${f0%k3LTvnZ5|4zi0b&GlO=2%?
z$5OFhY0;-9cz@}Y;4Sx at Q>!;xY*$<J1TG at -49+D~yCqvl?#h)lpO&fjhUd=WP_5Hj
z{LwnR8Ynw55>Nomq%&RH%Nub4NE)j&CuxAArser$PPK?^IQ0ZZenIEhfW~FX#z05~
zA6km<e}qB+FcIokbXOjW2ezA22sL>nmTTK!i;F3Yo{!{vN97P3@(Dcw77YL#WT$qM
z at IKYCYf|gz6my>jlceUw&-bdSzj8sg&)fl&L&_M0q5Y3r$8+a1U^K1S|250uwQ443
z8M|1q7b#qTpbL3k1t}{>bbwMO at mOsYA93PNf4J@+Q44h)Q^tMAUwEz(0p;**oo at Dc
zYwX5F8r>fLl0-U)<4E6=lC>Nw at I~CDauCQ+vSVE5A(4UaZb0nlM}*N<+No|A2&KY!
zOcI9Xv>Ue4GN*q+0Az(jAGtN67Wx-ga at qcs{uR&=B+_S!DiOS@=k1OXKz`^g9n8R)
zfB9zDi2m1fY-DW(&&1oU-HrdgXSJ8^R=-**6pgzq$zjA9F3|cO9UEs>eO9aY%}~u{
z9=dVFk4k6B!fX at Mu;t#-TlcMiEUi><E%%$=D$KDvFDN_j6gsukTt?8hA(<}}Y8uya
z51^aWgGGZ1Zo7FDnFOGU(4kdYG|}`fe`AxG?!hiSClw=v85&9=ZG~y3)nU%jHFn4B
z(;<mwPI5-fTbq4zj`FO>jij^|+;lu{NC!<nxIvU2ni3TLSCri^yRQdqO{P<z6AfFU
zrQ*`F-+#+SO;G8qC+^Bhldy7zfr8PLZPt~9ez5>*ls~FNySEM3XNR<_0|(03e;mLQ
zr@;P)UDsB;j<u2`*b|STzBgG32auRNHLI|(3)2VfC&34gc=Uz-pHgOdYek8~6g{r0
z4?46JO50S6iMgL<k|)_C+VnCE>EU)@$m~)BCUXBj^D#&z(J>G{o>?|4SuCY0bLXwP
zWH0##_^qj-Nc6UDbXNvlvHm!=e-7U+C&A7&&LZgsy{f}0g=(WySYHVKO4&v$1VCk1
zx4aj$TCLq^^YY&%hc7Qw#)lH=Hs>m{UrBhX at PT@+GbUU^zE|Feu$8}CZB$Z380#4E
zx9|jcKpW0H5U}eS1YaB)=<J at _+vg8Oy?F#1x?FdHri#$rLBk#OiK+axf85EPtxrfe
z!)rd`BDko!rGE|z-`!DzgA(2Iz}FiIx2H>h1tzZ;q6o)`<YM^uJ$i|=f8l>W3jI`v
zfN<Qtc7Ign2{}1$XE$?_&OcxP?&ZJqCB*7rofktO at -Aq>jw~4B={<k9-SJDxBuNP-
z0UQ>pLrX&szuWn!z#vNqf1Qb+SONN>jF1^hQuyJx(o6&TX}0p~LR9^v1fjpQjLZrm
zcJYygl<`b^v;hdl+;_ at wZHuSeF0?~dK?q04E#?aw;45_vZc%c%A_95g`F2J753-yJ
zYks7mMi1>f^32QuldG_%aB7t(iGkB~tHxo0m8ylv*l8WoGB!t-f16N`o)8}^7JGnk
zBOzYqO1f~oje3#gF5#h0u;^nInA2d4>S~-^uY=-&8OD~a-n%>_9V>S1%Ca3<iy$=K
z+nZeI5`W44YQ$4|vzY?Fe<e~2+O{YD62jzJBfs;@ifloQyJ0hV4=ji0ew6_bnDQ*o
zKa&i(>vp#%e))-+f5|bV7~c1wjgs@^_l;J>>3JHk$7){^8A6HtYJxjbd(grVb!i3C
zk~?*?*W0HX=)^-q=iFT$MGrSBbExBYiqT)%f52J9fHYL`z+SR at W(6k;+(R3DWu^-m
zy5Zf7GE>tvwa#~r$~p`+V#Rpo@&BCF8ciyZCaX{aUxe at ve;tDKz^*fLoM4}$s^ni;
zT3#G9W%45}0fT4AAXvnZC-EFQ+X*!y#ZTpIi(ywil%0PE_N~>rZxZdW^BL#+41DHD
zx^F`5Btl6R=s;RYsW(CCU}brZHPfuXtDP(^B`G#0`P1zvF2lD=D5`TqhhqB}2v4}+
z=2%rNYLb8)fA)58(X-8USd9^pYo-*4myX@;<fF6wKt=y9>e(4%NU`Vh-pgcCR>eqJ
zKf7vdI>PF3t7pz3%Cd(T%op_7;d10Je*I7uVY!7q-^S|d1{szXX>KMgA5o(YH%dci
zk*4)rjmN>zZ$cNWP|TCMI@#fQ&kD0bnueUkO)j~<f3$NBBY2J&ri~}df(2Pj_8ol8
zCyN6SbHz`*Su54i3$<1%=3em#UK+OJa4URStqeC=!+l(YNnO%0jSOj at f=)`fiaR7B
zOXW=vwuSeOc|sThcD@;xHlc6{C%o-)OI!o&=l^WJv9+||A+$Z9!QJkwW`5H1YM=9S
z2rMU3e_<^m-UQWhlOL*ir9gOdtMUQqU55;fxKNKy7pDtbHl1ry2ItE(IKef1bL;=)
ziUF3^c-uoL3z&FZZ{Z?=p#1%Wk0hL_VK;1Rs>Nn^*opqSH5^s_S6BqUA<_18yl2ve
z+<9RiOy92Ktp8;<$W&6?d&9mM{(XcVVio8mf3VA9;`X3v!pTDO2G0ZH)r_Z?5UO}0
z-0E;;nHnO7C691d07X#Ebq?%lt?=JW`p<EHfsX8U;!griy5H|QD);(XNz+A1`X|QN
z(rCMOLaTzU*^M3j)swB8k|DSTHl{WjFnSj$keRL>HQ|5PDcueT?hs_m)G?_#Sran*
zfA3x`v4v~%c)>}HADPl7VWMl97MasucFFS;WFTcbKPL{hUjXswmJu-4G3a<i>aNAI
z#0sY+=ES3G)XFl}-<%S4#Oeh>UjMTbxFh<*9ub!epk#DI5Olc6r<lh>F at W6t2zKj~
zAj*Jt at Em`!)*Raj(#s~^#KZf2h@;u3e|$t%gIN<&!(ST+Q#0h^_5;H!l%jiP_1Ry#
zDjlno>K`8DUjFfGKD`ekE+sF!Ah$y~j at 7mwdFlzlEOo9G&O}!M5pkv;V~w|pcvd2$
zo|5I}0jv(s*KNQ68UE`40!h07A6E&`!bxtzETBP#x7wOQ1e(*EgS^Hi)n*KAe={b3
zpQN3*Vpg2s>PI!m7OI!}VpiGWW>g3m5MpUB;i}VVygRPT=u?d>GxZnVeKhFfV!|0b
zCfaqMm21anWM^2c86R3Ma-sNq^G$&fUfGnm0 at j`V-7%+?#E_wAqg5X%<FYzRi0x at m
zAE!3#VC^a^h8OGHrqPJ4z50%5e<Y4zZ$%|ek3sJNN}It}vEs1g3TVGB2I*cBsSFP=
z^OQ%>I<o;S_&JLP|L=$wDPN~7EvI^zONNdysH58T_m*ejXmtz+jir69MZh(lt_Zpu
zQW4R6Q#U6 at ZwWE{OA;~xf9zq8lL|_&tl(|82^PTtv_MROhr*3ytiKNWe+J!{aTc67
z(P8z{fS?or)$7wd)N_AJ4aZYpH at 7cSpIGh(Xr8YRp-FRI2MxgJu6O%U0afJJ(KGNB
zo)bVp8lH*o<p=ef6{S13vAzmJ4ApeB7YxHVNg-1dqlmO at LhK{8n*j{8xC|h*WkZ7@
zMb%t+yW0q^!i<Cn#cCa+e+n4h2k>@{ku8UE^MT^*M3xxaCsvI>=d(zaKXLmFEnJvO
zGx9^DK7;>w6_$4yQ8Jr?5H^dQ&Wu~e`thNNru?SyAE8y0+P9e15W4wd0rwp50ajgd
zi}L&2fFRLy69E7H3KD;87<bI*u*j>&ZPENg5{J?q{}3f!3ZxrUfAk-tV%qx!IaJ5x
zkd5mWEV2~qwz&fQZ at a}@ccgIR1}Xpy*dTPm=Uz0MZE>bwNybo5x6ulS`XnVTx`g7V
zV8pGo8*jut<)s1I7mS1^if5$Kerrt|@WTBy7F<#(hFm1NuFlo%{t>--SC@;WQuF(Q
zON7mes>jZGazAoxe<ylOI61tKMY9kuShoPgXV+#W9LCAr+V3Zs<JAm!%Sqorll1-^
zyQGF>Q$jQ2tg2S&t5H}0F2y$K%*Xy2p8Z?>h#(R(pi#<N6{*`gSvb#3gzWNJok8se
zpDK%g_h1Urm&7i~OmfKE*2i>zLVU3cS=79}3!j`Db$j<ve<mtt_P>Ol-6bL at X9GjF
zdAi9>1ZBi%RWgJ3ldOd+X0sLr0_eUdhk?_T9e^*p*#$&pt(*%m5GFjlh#l684x)7J
z^P-yGdMTB93zI%1$9;x0^#f at 0<~n9FRAA1cSn)=_$_`JcOF5udhjXbK^cX0}YmhI@
zxFn5w7v7ume}Utc<cW&eXF9NThs);n#OgX&yb=>)G<292@`^dUjE~{i{&iu5>}u!{
zsmA$IHv`pA#vk7PzAGq>OoZo0*F^S9nbBwVCUAI>L-gI4Y%3O1h5xuWi2<1}Y8vYv
z*k7aF3r|OxI>H6EK!pv!d+_ui4*>x)F0d;q<eDPXf91bqNAb8ZLG9+VsK{#kUbV_e
z at DX-@YWn|uauV1#96#pZLdVDL$BBV}sUpn!C_;#Us}JNq!V(^5{(UXvJ`yflu#(v}
z{}|bv*{r at 56^$`Ss|Lx%qL?^(=I}NvPjp8Ry|X5{Aal!mKC|8Z>{Oo?=K|&LA7%Ut
zDkyA-e~F&124Hh43#5#Spj>M3km+?O#taCSBs}V9d<$HB*0Xx}v<56^S>YX at 3{lP!
zBKdD at TLj;zWcMl|eFqmICGM;rp}N at Rmmh|f9!vK|jmf6jfSt>ONt^?fZ4#PB4|=2)
zEqA&Lc+TNGd0l^WD9$jM*JaTMVAS)s^&oe6e;%93osLHM$kjjsRE!N=pxr1+<1Mn|
z-t`yR{yXW`<FsPK>w at tF1){#VKWfds;32eY;2Daf3M+2`UAoYpShr3Y2b~H9I7!0a
z2jK{K;1Llz^NwHezFXJugQVqR3Ve?R7jb*vBD4r=28XX@&o^gTm01i1Np#)u!Sw{D
zf4zL#jYy#ZszHd3q^m;yIn?<f+~B#JyMH9S|G)Veop%FrPG7A%eQT8Cy!x>aHMir4
zWpFKThmho!^p1t4Zd2ZOG~^|OVUdA~f|v1gqXuMnG5>*aYIYRfgWq6M4fe at DAA7|n
z9;kAeDSyu=I{%G32uxO1H175Eh^X2ve;k&kFNiZAi;_#`eoagZ(-4v3<MT0r%(*y?
zr17D4BKsx!)7L+2sK=?SVmkvf3EWc0(@f^NIW8;!ZYshAf!-x=cXzhf<kFOpKqe-U
zh`qJr>zmCnpo(4O%AbWo@;eP=ZPrABFlU4?RGbI*QDrkRxhpsPNh60mO$WLse=Cxh
zx-xkBZ_A&|JI8@>*#c%zsZ1wimN^$iLc|SaW_7#MzgN1DUyPi*o$D1!*uj|aY4eEO
zK2X0mp+!tp-UlLmIXqi1Qw_2Ra%kK{g<10w!4fX8UNdGaH8I_BPDm*Ic>G-wTYD;}
zZv1FJL(zl7DcEQZYHL6TB>?$?e=UO*N at TyR)@dr7HY`;)hzVV*0h}jV?O0*K?5cen
zz%PWYrgRaLe<Ouq1y5-c)4-4)31^0X=X at IhKUze58O>!moLq2)lXd;?v at flBRiz|}
zTB#I*!fyhHmAJ;tvt7~`kCYq|+S4Y(Fw_z%$9^N!s!3!%LcI2mK^bRYf2+E1=)l{O
z8Qr0h<14bs%9qFOL7iB}gW at WqGYue!kYY29ax(1vwqIRtE2I=h6fW_fRKCed7J9B|
z*<b~{kj+qjnWc<?cWek02QtZAD`qj=YH7zcM}y-1tksxj<lNOuYYl^xw};v)OR at Al
zPLs!(Jykoc;eWXwOTl<qf5pdNG9ljgIdX;}x87ao!woV`{Cjx{)mBMj(*UiXgxPt@
zp+SF%y;DAKHCLkz3I^1&YwyZ*gqFDBGAeECS*bbw at DVhR5|{-}N={HVJU7QyGNt=2
zR7Of_rAKNea(xa|47wDT-1 at 6f--?DV^I{q%fd8B at Wiy<fFF;E|f7Wrd>41ijwrLol
zof+6<D#=XF-&@d at VK?DfU!wp!^il$p9L_F`-iC*z4+tyFDsphTs;v6+>(Dv{VE*9Y
zcR-vkUYPAeCXZ$FY8s>^lAshc!FHEM-x#!PpK;H7KrK!2OR2qN_4 at +tWRsnsjl0p@
zSWh2C>SP0>nANf5f7N=B*N0MX)5crHE8E?%1Zf%NY*ZJ5aASYPX|C?T2ET<e5---w
zrK{Lb?nMT=1w->R;o5@}YX$ks&OWJ9sra3|+Zwn#;lt}z2%)ZMu}MCG8UJlcWhGz_
znZzVJH<GioDX~x%$v4t>J^gavcaSf@*B(nZD&B6ULdqu0e+Fa3%ib=>STwhxSAZ2z
z9<UpT>f%04iqUE-fg%fvq0lT4UC2CM%yTI14cKe^K98<XfI{TNI|g0L4!BzV8V1Fy
z$@_H$K`jmQuu*!&vsnlS^vOcCEhyAdYxp{|px%3xu0e7&0goj5f;X=5?lHL0NAOK1
zMglp5CEurie~SJ+M)AR})d_Zms)z%3EQFRr&yt^0Xu at w$-cUDd0M{~sl&ce+Ga}vg
zlF==zz{sBHV8p`djDnctEpoQhe1Yaa|8KGETnA_f^?Ykpk_#m0wC#b&#P#@(Ka3pK
zO9X at SnWt~O1|yBFHxoZT-A+)UuqK4OZry-Nkuewme;Dp at CBDwhgI{r#1!1WT-*T~s
zH9h6=657TEE$KI!6yCzGPAu}ufn)UPK$`Rrn-FsZQ8H3scxIuo6kR7lmmYR_P8w at n
zOcJiu%B#Co2#nMH<J%V`eJ`Df`C|m2Wr5AIJqv>il|S%+1Ct$Ap1g(GzIe(%y{5PB
z+8Y~3e=7@!n+zvLhbH!_2$gm$Fqb0mQd2rFk%<|1G at COiz3Q>T>4_oOW_tlGuF4p(
zKVe8HH=(#K1mG at G##he7h=eDK`m at 1t-_NRJcF0jA`OJMUY*HqbWYWAoen{6(pE;s<
zW2mEtQ|pi|HThAX^w&`h3PzSBDzAqOg8hEYf6_?pg~V<HxaD#?l~m(mpAkv&KbL~B
zQ;5JS#G8w2##=#fhbY^XPP<YlpK+=9d2?%tuDoUdagWUXTU2^ye5spC`kx at DDU(&*
z1O!#&9jAA};C at g~rIhqNkrXfW(09tLJRaBIVx#xQ6>`{ehRb7|lfT*IY=sEB9oFO5
zf8I%L)YW)YERQ+ at 2y*f*cL1iTQa>)Q$b7Q<0gbBKhLaePKzacA=XR at Rlme#NGBT8q
zE~Zz4M7AeJc*z2;wkE;Jyp^WvfVMs~0vUsdl2E$l+R^LU-r%mJpSoC^{~v=v3BvM%
zKhxfBoF4Y837$nq$e{E*UKP at dcKG^We at V-TiU3UCm$(i#!1G(fe|IHl7eX;`EM`Y3
z-Ib$|T7qh(jnGwYIT?(I10(<tW- at QImP_XD@AkwEJ5?6NF4z-iREZ!)*Uqqy=>mg8
z7>b;^6<oD3Z!C!toj4m&w3*q|Z?c4fwT&OK>9LZBcy$)<X#Q~2WySiWNMv at Wf6BfS
z#94yf?$#4nPw`xDv7M at PXbK^ltkz|EaXp`ixZ_AUr;k!-Za&i|jrRh~>vW86Py~{c
zx at yiFEXR?P7FPHMGsMO?fuQG(pd=HhpUOTJ^%n+PVB<=sa1d!xSe!MmxCQ{I;E>X}
zcctX0Ph5};!KtrPk2QueJ5)Rje at C9hccH@mW1`Tvhi7bBVCFx1dINmm-qT_N+|b{p
z<>+zW<dM_P%iy11uc62s(Zbl!$tWvjXnAG?l!Emf`fu|VNXUjYw}YVVAa{x<46iSz
zhoH6g^r{!9hty%_XHH?7X#~&vhrsW#SqEV=$kp$<l$8iWq<TLmUB1+ce`R3;Pd<IC
zcAYVk=*2{AA*>jq0a&SMaZrCL{-4>nF^hu;$DyZ$Kr2SeB)FkX)!C>&zbzzEVv2rt
z)|31guu^)hSQkekcn<_){Cu*+Vbe!q?^>H+PyaLX);Kd{-L!Ji<B7x~DMoW)AE$c>
zj-*A298bsR`LBc?c%VXoe}Fe`mTsOtD8R59)sdQbzda*vIs3O)r=Fh!a?=i>mScj$
zr;^bC{HdbU<J;5UKsO`2wXpO at zPA(nNScVJDg?@p7Qa>8heNz_#_$#QkWYHu{;!dh
zjTgd}Muhp;Mmal`6KO7!VLi>yeFpzN^S{OzH=qOSuK;+ZOHpOJe^o9M7m^2Aw6XeK
znQr6U9j$)!S~`Go0;9`+Ibrs(Wm3q#<7|?+Ub9g+!MWFWF$@U$qdpZ2%#w=P6FI`K
z at LarBUOl6zfi7Y`Q=D}qqMbjHd`vI*K8wz5NOFIUeJD8cs{(s3x1KTB>47KB>$xFm
zTf0?u5bMY#&A0lae>`7}eWs%PEg#*I;d)Y7-+_uc$fBp79B6kVTGfXz1&Yoeuhkp(
zeB)CCP>DSdk}gGi`Tg)=AH0iq9^eRA1G2{cmzq8|*<@sLWPifl4k5HXCyr0_Ql-#(
zOC^S>`$k<cpL{82a0=UkY$yK>2TBX9C{%8)MsZP2e9-P{f5*(4S?*BoO=IL6ut6(L
z6tapISQ!~}Jaw at 4g9g)vyt5B-LWh5=nijz{#5HLFqd0-QzNdqDF<R63X{Y}J)m6Ff
zyrH#0&WjeLzKRVU=zxy->zlt6lINhC<4NYq6Ty6t#<ohO7BGVF&ira6ESU}O-St~g
zwMSHAbKXiEf5o!#A2#%%kjvaKt9sYBfh}NIB?VG at -=%I#1(&PYjIJ_%)#qm3V5}25
zwQRB=9;agq8W$p%5n3saz-$sC#U&J1mMYcp0P$eG>8_(8bzDfDDFTqxa^;6R5!NzK
zKy3?FsilR=p^7y`rQ at jZ!lqY6*tYfIL!VIRfJ7o)e`MV?<Uk|?plq`XQ+G!<B}Nk|
zuK3rb9!GY0>fgE~H0nOI(81GrIyFaRK{I9lg3fZiGgb6TL6`482ff}l0<UDcxZCzk
z-hVpOrFwsfO}qeiockwLmdMVB6Vtm$u8+V`GmPk)Cjq_Yx!j^$lgPMJ&73~ylQibI
z(Bf&Of3RmE558Zq;{%KBL)*C=N#f%`Vfz)?p?}MY{y5NxC~?qNeIcjpsk``PDD=0+
zxRac%0|19nb82E-YS{FJJ?@)E&tPUeM{os!g2yMFM7hf;@mtAoy}Yr=l2KacQ<{pl
z)=a=UnZy=PBqNY_q4VGcH!y}b18p%BgZX_zf59jan45o+TmsZA_}7`o0(5#f)dDA|
zW~ypa>x)_oR-~9Z^7`!UtRsD{vqy4Xp|e?TRG&(wSf?EFjte25B$NDkdU89cxzv;r
zR5)T_KU17;3o%PZ+{80i&@qqBeY8i$5&@XNn;SjP>#E+&=qZ6IK$DC_JD-X>0m_8h
ze`Co~JmGtz=#54lwJTM{KO1aa88miGGv)c-ui)mT5TD6F)ER8nLzA%f-hI%{{&v}(
zWGFmZv4b&AKE|d$1ebIT@)FF3=`y&g>apfS+(ju6-aQZHC1BRAx~_0zvX~40^!L;0
z`%N-ue_a$wn<YhqV5b9#c&bHt<v)f?e~vFZx1N>^A&@ogAX60ywi!_e2o91FFQS@!
z^sFQ+Db{Ylu;)TAQ5^3~iW6fGEX8yq$0yoI!+w*K8WAkp at x?b+sk$Wz<pmt?A~%N&
zMdwIb|D=wL{CIu?59)Z4lA3Kpu+MR?+vjA{Y0n5gs$L0w{dKDkGKD9r9Mb|Uf0SwL
z=$1oX3Wg%dwdJccMw<x#d8K<RhE>rnB9jqplrt-j at YIIM$J=(fSVA_}%)|jJFMo;t
zmcKVk6}mN<m<ln$X<r7R`2$cA^-Q;Mix81sIUSjDjg#-eN|zqFp!c<G6G&NAp;6ow
z4V^4)&VwF=cdu4v5slX?%g!6Xe;q^kpL1K2KE}WKUhLTZb>=dFM>QO9*eaFzp8C>_
zhbccVq6dB$f2g_oy4q?Fmez|3%3Y6rpmvp*_M07jZQx6<a^P%WTa4j;Uke=(kU;+c
zDb|yHs0gNqZ#)|@JSY%!+V at 83x&AIug&*hnpGHGFgvy#11sJO>+_=7ce>&3BWUUz)
zMM!+ at THVGK1EGZ&J+7V{ufNXIaY?VKu3_dB8+wm@%B+_<a${q<k4b_OwZZ;OFN!7+
z&Yw7!{K$r2`5h+8NdAeh{fyU9eqdkmqd*Ca0t|}_YyxP)x;|b*m|ufHR&0c8L~5Ks
zjL44 at YUCgXjU&4ks7VPne<|E!7fdQ)t~AL;m7)H(4|W2Jb=ioAoim7mA|$ezt?SrU
z1wl%J%Y*@#J3WKn+qU6IeKDeu#em($VL|$zzB?~Ysv#kbu8-U??P8Q#`V%NpL+>=W
z2gi=`AWdpOa#+pOI2CxW3&n`W_=XueeJF~}L{;^sPh1Oxr9S}2f0x3uA10vTkI0L*
zcaoR!s`cqtgfDP1TsD7>pl+}Noo$}jdERNHS56Z)N{u*-&XeOg9(P!C#-S%XP?}xe
zJam7b>8g>XEWV9pr at ZF0R2zHCDb0a48{3H17Ji at 5-&6j(P>z*@K-d)*!~+ at h;t?kW
zU1gz21%gWyu;WClf0da&-Q4V~4u$wSgT6rgA4N(U#9ALviYa at 0!rQr4-S?+c0|4B;
zQk>VY at B?IQzVL11-{!7kvg)5yQ#4OC;hO at RU%~P^d?2Qr7i0?u!81}I;L|WyVM4BN
z%*XKyh0&l)SuDwxnRPV3?AP6X=1)ALuB!OZ02_MgL4 at tSfBkjQMf}w={pf0h>-l}$
zjsOJoqqmv7Ka&u`y{l{Eq4(nEezF2?LZxBrJ#kpn{2ptm2e%QzCyb?TQ?+l5Joi^N
zut{&dwG4$+?n9rf;lPygESk5#|7&j;Oh_KPs|h~h^{QpHB2rJUd3`fJ;2z=9(l>FS
z$lZ?~Cm$#&f2jGCy>f0a_H2G`<8Xni&pr0&_#bayB_lvSC2Z^5SB0J|m2#dDcP!Mv
z!9{^fPRQzX0){(PIH`o5XCk~ae?%2=5U6GT0~-V(5MhADH1)t)gpGtB6?vK2`dc;t
zk<s+qOvs|&h`}e at mCK0B;QnT7*7Gu at L63j+Bb3J*e*-Q3d3{BpWQixSLkD)3U39)A
zn1s()_Y%*`)vr1ZJ1rUpBGX~+#8?N)04+UYfqxmvJV*k1O9btD5^i|qMPF+^;l0ng
zhCM6K>ocbRKm3M&uUq~nAOGR|xx$20>zR1CZ}5b{y}+=Xr6MZl;~v<HW6dmik at 4N4
zV3J)1f1>t1A#>-tV01gYkj|$zjQS;8dB%W!PJNx%gL4J*iiGR!Zh>*9Ny-U6!oQ=#
z>)XmR&e2SOMD&GLCq!Nu6QR<uK5dC#MPQ)Q2#S&Q9>cP{t{hJl2Oz0iSp42NHq%^-
zkVP!#JD_ZApsT5$J9a?jZTx%_j at Rqv$saf%f2VLp<pM1e$P?^qV%HiDE07}FY9Lw@
zqaeW)(OlOS0~%i8iA7>)mrb{j&6{gpo75z}$+Eb!y>F}g>G#w;bkMmPzNnyS?0pn<
ze7G0(<RLa at 2_LeQ{{i2v8UXZc>b?0m17^ZMqnF}mggz{*gr;1lk*;lz1r8AZucD9`
ze|**D at Tyef%V^mW>$q;0E1UcXVM4>9N8Sm6%|L!c`iN%?*EsVyZqgi{wSTn}h{U%_
zSDEH&x7cpY1ZstdP;7lKOmXfu at BXC_oQQ6sN1n^UuxayYLw&)!dVZ+RC7S;S&g79`
z+`5mEcAf?#r1**hRDyAI&8LlQl=%B#f6IhOxBAJwFy7c+oP4{L^A07Oc$3g_K7}PL
z&sw8m1$Wj5-eB2qFDutl2l2R3XRrFbjUB_W&<iN3`MF(_*68NlfGXyL9jJ7Y>zSZ5
z3q8+y9u~4s5)I;K(O~cOh+H at KhC{`mPjKNbPTHP3PC&bE;?{mUi{lPP_yO*Af7kd4
z+DoK+p=+xcbfda%6wv!;D>mtg<|Ya6YzM9!id3f|ge!!XluzKSQwA1MGyOf9XxS{{
zk+#q4b at hsun_P9MDe@p3mYjJKHfl;4!yfP~&@>!UIlhle_y82hGZ(}1Tk(bqM&CPn
zDNDY`s#Kj|mZ7=Adc}yWx&M5|f743ZYn+(%^lOkI%6p32i_=aGrJ=|)7sr<%-e`R(
z3m3-J1*#WkLYE@}^!G?1g0|-Ua2NCA?kI(tssAid%kXdWZOxK&Pa at rQ8luTMsvr4f
zZt at ctmvZdr3`^srfNthhQ6abAj3O>EKXd$e;}ysSr>R^c;>KC|6fqOqe-esM<q$i&
zvk`o1;fA&@00lt$zf33u)BoZU{yK7JW}0Xrs-LUt6h59V9ElN|at(^;5Sgt#X$W?R
z)1%nFeR)2rys9gUaq+r=wwR5-;`VYAj(S|a=JdUray1`Lly^a#y+w at FzXwhJU_6?$
z%)8)arz`c$qDGK^!1+P<xJcGQzJIC9AR=$*O>etgRj7T~5W$d6kWQ1m^R#H+{=z2O
z6<iQh6B5knCO2&lsx)zZx>t@`bu at +ope>vZb66FO``&}enfi7=uUI+s7``uTdo{Sz
zpXihGb+v?pBwgzc10%tb45UhN*+Wk84Zo<BUDrZ#K(G`3Jx}AnP2ji_xPKs7$_C+Y
z@*l6tr&#QwyGoUWTQt9_qR4fR-{0=U_RuRQE8YS|bE-bzgSFWqF#PqG<wB;NH2cL=
zPI~jVAwuPc#bjWbN_BV!>F%*qUPL|1&Wb87WElRC7@@@WfqxTJ$q&-dWpzr<4Bsm^
zyW&&AkuM>v2CkbWE3txUa(~ymI$Q^N2y)SFT>oK$(DqZXox0c+(gm#a2Hal>;o2OP
zPZhSrte0ss(_k3uZv+z5py>nLjJV=)fv=u at Bd>d40=B2Q86zB@{_dtGbhQKV;!$C!
zZ^tz%r3{S7g6v8ePsn^o3MsQogcd^Fpi|7b626fET&u~WP(WwK<bPz1C6NlfykN2u
z%``L=1VkE*5^WGPk^e!_e1WaD5g?05fZhNM^#$Yn7Acmuu7}G&gQxWF7ca^ZoVp-a
zKLwYa=KN(vTYz#$3LX?$At(RgCrfj!AEpYvuT?mBG6By1+3ITxV5GEplWfGkzI&{%
z*~rPmJ6mpF6e=2I&42g<5#mk}h(Ma7i04(I)EkjwOytwXhZ(@36u)|%vvWR7>ddNv
zbI1b*vA1XOPRG)fF%OH8nt at i0THRD^RY9>~z;Af`Kk+}{u9wwmdwsx%aI-}`K-(pi
zvf32j(#i{Lr6|E>R~HXzpi^Dq^`{BBkP+ at v50CNi$~m_KbAMk;C`}yP$VX%yMqTrz
zJtU-VSw_yi at eL~7sb&hm&#6IQ3cvOSBVAZN{fjf}QD-A5+A$V;3)i{-(!-e at CVM`6
zUMRv$5MC-MR7kV|7D=N{W~9zZtP06rdyZM5<dGylZ>*H|XdT<>4NSl=n%zsC4M7cN
zih{>brO at ZsRevVYHlfKl^E4(`C5T-9%@we-N-AlG7mgon3XATOXCZJPzjjAeiGS{1
zdYER{z=ah)_%%#z;1*U*01kgAeDhPLbf`xmwC6CgmY9n9Lgr_jA;_q;s{*5iEXLeS
zn`^Bo3!o%1!$;;8;ezCBl<N$DM>hT?OZ=A6LWx*(xqsP8-WWiI7}5+QSF3X-?fWGm
z!-q!xbK2Wao|wTUC(1N|f9C(ktnBUDF_>Esy}ClvS^x8Am0+6ovu35~1&~uo$Tl7)
z>*l at p<$w#*-ghALa=!aUb`-YPK68x{okta>KZo`8aOS=N6xc)#)wB9b4>qBC&pe-#
zER7<gD1U|z9V2<i-ag8Q#H<c}p&FOaX57p6 at o`j2-p$)jkWn)g2TTFZh#3eRj2~Ab
zET7I&vqc0XE5H%n at v$-}S=0A=ROmNF(KzV-&T;Vdgn@(rzzbH3kG1N3j-Q}^SSiiH
zRY+22uNl9RJiCZp0J~slsuq+(U3oDm&!cW-NPk3AN^H$1PF~6li}SYJ&Tj#Nf=u6U
z7;gd6Ad(*ZlZF(TZv{3BjmC?yy8yuqV7-Cjk7TS_D1(X5rK0-IV;cGtGLD}6s!pPY
zG60$czn6~SCrAz&JGXMMc89BpHh0BV0wPB?g}H;Nrbtt*gtv;`p1xuAnyO$$s4SS5
z+kaGhLi1UHiBWK0J`;^0>uWOQh-2#1VV(Qp&-g|F63lk2^th;Prhj}|COjTds37h<
zdx)TCRGhS1$aoQq5=adAol#vi9O>nz9;zYeFLIBmS3F}a`sXir;K2fYLU#yXLXWO*
zJ{WH^(CY!$!>YxGa2F~O#{fj9tnUG5aer7BOQLp=TNgjn7NW``?h3OWJs#}|+cwVr
zXjkHI?9z6gh~$>9uGDx^SQo+Io~3k=nu<F4gqa(TzRJ%-Fai9={oJ{eO|SW4Uo8Ef
zMUW*JsXrMJ>EVdN1edK0Z!-VX28<i|%L?#L5E5+CrV&y|pHabNdMDyU!r2f%T7P~&
z at J!?+fZ<=?1OFAR2-G^@Ug`Wa-^SvWYHE?`Tf9m8Th?kO4pd_-xB7Y?hyFQwkW39k
zGVkkZIEqN}I$1t at qg2a4d`Ea at cOw+UEglXCv{>n-({mO^YNH7q4p at c(8ez}Dd*xSg
zC_3xDR-_DrDA6wvWVzH(9ba?h7=PUEZ^zQLABZ*m;Zix2S&-^^$(>J25nL}+rY=EW
zgZNJDYCO^<VOcMx=}wqz|EM&PCOifKe;aylI$uip!=RBf`tA-;nRt5J%YQ(ee0eA3
z5t^n!3xiqP+#F`xQFbIQ^R at 6LsTj|<IYR9tJsor7-1G3GKkRof{griz&3||;&e#=d
zI60>*JyDa%OL$-GU(7c5nqQ>Eu9T)W8#L_?w8{$R8RItOUHyuiEhNQp7*9DV{he}h
zN#0BB)eP?vPTJmf()>At{!ynkkrQ+P+KHxidBXRXuFtPs^}L;7*RY84Lo3dZz(V~t
zOJ~eWCXNgNRay*bfsMt+e}A(YWCb~=ZEdP3z&Fef*RSC|8E{q++g*8bLnP-b>7ijk
zbPFKY0#455V2CQAVVQ3|))J`#$7t7gRk>W_`r>WngiL+Py3^K>Ix~|+sqxDqVmryi
z0cR%%<UwJDJ&B|ES0|($_=ruz?rfZ;_{7-Llburb&N{W7)5+Z8hJP4ds!PX>Kkp|Q
z*@mw(o*M)D?Y7sH=B0i?epQp)n5F)yS9qsDU?3??!&|L|-vnYrOGQ7VfcDS<UBV^s
z4)b6S1@`s7z3{P*>+BK3;`BAUB;1X#KLY4(Hl$GDwCnKl(1{E3cUGf$Q4FUtgRF)7
zt`gka5vFc!T||gR5`SXU#i6v#{zcOP(ELH~nJQ2>r3N1+N1PvQNc>QWz+@|A6my>v
zsRf#N*_Mch;U)5zkPXTCXGs&neFD5N>jY at o8osl@u%3yYyqj|nYB?i-BM-TP>4nN}
zm}O!Aihs+8y_H~+ at DA;$-6#-}!H$B9aO|4x6w~e8LW%{xr+*WL8xs`6CPdOe*x}{X
z)c~6cMntUDEBeA49$hTI^POG2=OZeq)2`S$W4g at -R9tTmn1|p)T)()#`_k20g6P{<
zuY1dLRGyt^7K0v89{13O*FctYj8EtKwYix at YXKu2{z&8~nFPlQ?`07BVJe}6TnAb%
zUpr`?MXDY!7Jus~cq==FqvUnc_Dl&Z(x#(_%K4S18cZ0Z!hCS at 1x8=#`(EWEg?5qk
zY3d(70sd9C)1x*%fwt_s9KrXTFethM*fV!tfQo4kkTJS9xxEaTDt3w-6e3e2A!C*+
zoX{_H9;AbgjslXCe at 7I)4d58wScfi}$GW_zWWIp9UVlCa;fC3HyL;9u$v{uQ*fJ$F
zm!kk8m4PZCL(S^36yzN477xy;&tCm1zy>#`J~{GLpbx7{wnHtI-^P2u+JF{3J1TRd
z(<Sav-(M=Ac2TO}PrnIiG}S-MDrek8{pXtI%RmT(QEp}>#>ikvRdZDn-N!X~mOR{S
zjvbm;^?&f>C?Qgn;ILHa_P)m6mC`5yC7lq2ieYznk6%|;SM#4WaAU^(paV=1;*4oH
z;8KlA&c;ux$&<`@Ms|?b=kjAF<5*&~?6Yu*pvIT_GDro|4Na;$-StE74MfuNC71FD
zSGvwg5gY^)sP^DHje0k<gwTz-Tvz?k?-$)z4u5jNBe{Fy39VlrX{pJpiXgd?ULTiv
z4gZK`+h?=9NR#V3aDlA~t57V0D;AaOEwmC1M#U_7m&#ds)p?3^id_^T{vI;v-r4+G
zPsSajXqoBEfyFV`Lm6~&`a6XFnCaC!t|kLw?hI}9+R=vy3g at 0_%eF2cvm_5{x(C2t
z*?)p0J5VD&eUh(O_Q#)wTyj?2wu=>oc5Y1q?XA+ZE8kuiFh%ZKwpY1#u3tppThQ-#
zFt?BgmX?sIOvmUh=nJH=Zi>rTMU)I9t(1m!e;UamA3hn-8%*`+a5~m;9avZ?D6yP;
zc*|NavjhwlU?x5MG{qDOfv9`Ll9}dNxqmz6bLTk2i8p~$VzF%f_&N2=4Bq>6 at _=L4
zEO0+{wcdy9`98e7$tfGuO)9}y%u%mw$aA^YZeOx(@L)ix5{~f{3Cvh(U<Xq62?pt{
zTUdD~W}BKLm%c4f%{dWB1>YSpXNwPltM*_f98i$}zo}CJ&uG%09}*ScNB$s=<9`xp
zmKUg}ErKX_c(#HS3jg!bFjv6HvFKl9p}fnhKfo}K<(+Jm%g}(z658ZQ)&d}3X4-xX
z>Pku$m^l7_6XQD0eDH7U!R)pgR at YJ%%Y%|42LVMK3o2Wtj?x<zVP!AglBxpIikFcR
zeYhc2_HSSgMZ|s_aTXi_QXOlWqJN+AgTbXnV8-m=?SHb%N}poCNc5Jj{I6kIh|FhZ
zGWN3hXkSek79w{pUz{zxModbp3*rXtWb^q<sKMYb$?Y`>Ek_7^ia$j8O(s!u7QK*Y
zON-KsBi*fnPi;pjB*xY<bST#?#!sLN4k$ZzM?Uk1%&G1=3Fgn(lw5h~_<tdNwpums
zrYY>Kw;*r^VxoP#2P!uPZq2Uu>0Y<3MQVPQR1png<5>S1xst#Pzi~mo14VaNFmb$$
zfJv6|B4FN(4Z7B?Jxe-n!8nAg?G0N0m}q#cR><*s7j|Nh+Jd4MF!gEt*f<LTxQXKo
ze8JxKN7^>2m{>4?f^!T`{(sWtM`SuzPZq$~iTrHhHJb_2XFQ<RHyy^_?~#~?ieJ2J
z+yW26jrK41zAMgZn(CfDzb at pS0tf?@_z+nQf&aWYh%#}7Jn{dTNlPPA2W?%lW*yaR
z#UTD at cPLHpd-h4!5m(I}=>|I;S`E>{`^y0Fx!7K!A19cVU(6Ib`hSjs;#YqGEv7e<
z8U4mcW&YwckB{w)0h-LMRLB5s?Hxsv5nK9O`@j`x(cySq`QZrNt^f~%mWq{W!rI9l
z7SzDA$5!F<njhWqS?dSz^8c(#@KV)hwBeQ+4HuYDDyXT3jmQE)Gvh_GMCuvd@)I!C
z|8p*kJde+k#DSHH1%IV-+^4$Al!2 at u1KsMAM}D>^5>{)qD#xa04I(=vMrL|XbQ^fO
zJBe_aF}mUq`JD263yE;43gx4Kp;8Oql-}-MV$&UN(X)d=6;A!a&I~!#zzNi?IpTsD
z7+S*^2%r`|i6{Wjh at WGIlX^oeN{)I#a|N at -m{zCXgB!voG=Dyq#pKOvq2xPc^Q9Gi
z&+0 at qUU@(}q|BD}Ev`43_~9^bJN*YNNqnxb26hqCh8ucDOw8~OAi}c=7}5K_1Hh)(
zSNlaL3hD5zTD#wP_E8>Z;-01)k02S!kZNCBT>#$j#}vqW7c@(OlcFEQ9Rn|#5DI|?
z$0gb#6yCuQfPZDIKiMJA6)!N+z=2#vhLF`V2LY at E@!fnb3U at p4hra`7ur_X%ze3yP
zRvR6Z_Uw%gytUX``GW7F5aj0LD)9js99AC0*-bb4-Y at vYIRWI!>zF*3Rc=O(po-VV
zaWElUj`b$If;_C*#++q6qk^lHR|jh2%(&dcGQwT|)qf=UNYAdwadAq0rY|rbO~nAa
zrt*WVNI?m7gs{|lMhTWoxVsw^p>h$v8HcQIi+Va`qQ`w#Bed7sAs`l&xSMAzzjp1;
zYUmUa?4^JIK7#hNZl^7q$X-07 at B*0s;S!ky(o??uEq9SODM%tVcRPgesR|&BGk}`u
zL6sEHI)5*ej0o|44e!>Z&1jtqwM*OQWHo4*gdZv|!+`$Rf`DS4yw~hnVE>wAS1e9~
zfEco~F9&SCR(_NN9m2;=>jnrqp at Kr!i=)H}+)v4Et^D^FfZ7H}B!4~mixsXmQ}sR}
z)x|f^oTyTG)YGC<pjphmBjZq|?NP>3Sf|-aQ-6IK&9;TI%tljmK_#-$#6E4nTC9KH
z#-q0*pnMm%WMyjC`04G{!sclW5N at b@upCjq<L+z>$$7rHM%~U at hpx*5NR6 at pMCZv$
z&trn50vBi@%Djm{x6;d+#~fvUQM?vHk>#RO1i5>fmPsl9t@*555Mv*o1+F0tkDq_9
zCV!s!HCL$~_FJfc?aWDdaFc0%PMa0rDvW$<I%PDSW5}a^z>});yg-B~6j6upujS{^
zl5S!9?BVM;8;uUMp+dq$m5G7(Z-R>Hhqq_D3X$dF{fIL_jUA at B<n;Tre1E%~1(;e6
z3zhITEuZ-%3yOx{6XOo+8+1Ous`kF%mw%&O$?<uz&#{#%jCA*VU&!AOH?9dmSG$k&
zyg+)4`^GJp8ao6ks?*lWU-y~#Wu8vKi!JL5NVo%8(O;HKCZpX4zd$opvcmsW>8TaD
z3~(Zt7sY#~uWj at WjvC`}Oi^SCQE{Q1JBMn42;ZC3*u&9ne#aQD3=Wc#=i!%W`+twb
z>`zEh1XgzP&9sxT%v;u>K>1^Zv1h>J2ret@>;6O`c0 at BIsZ|W~uBU~F_fb275c&MJ
z6ai))5Q}wVCagQZ?*OU=fjY;|SjUVbStdEyqGW*Nh%VQaY|L|6uB at p{SB6hsTeaf>
zl0$co6iC$WPn@;?Qv#2+hRzdJ>3 at w+Okdd!ma1&AF|7qyu=f>>N!yXgS1+cHS at Nl_
zRRaKcJDQp*0rn6uu<^_sfhb9=WA;NBR-8-;oM=VlM*0gZTynzGio!kPk_Rm=bkNit
zhFbiZu4D0t80D=64C|h<^kroQ$y{zeEZ+nC?pev;r5IXVA~n$6tRio8&VRqJ;V4T4
z6X!t3_Z_%MsOc6jlDdv^Hu5aoi3*t)U0W5ZFGF#_l8m~2HBE3$;g$^<gjt0=X6xCr
zY#;Sd?4u;`TV557H>*@~OUUM~ToRpkA>-#KC(3rTV5WxI$J|$-v6CX8BR5x<P|~dU
zEjJ#xt&Ne*TVY^Bq=w>2V}DeGbgT>F!|&mZ>)y6vsxn=m<59OWov1K-Mls-4t990e
zYZm;|o8+05ogpEAHxzEqQ(*2jEI at 37d_pGPwWO>xcwBy>#2>yZD9zi)(UJAK1bNKj
zC?uiS5I37R`eO13w|)4>Q3UG^ixqF)e<V=t7V6CEo-Sk4v-frsIe#^k?sNfZiEE0n
zYOJ)xDgwNWx{$uzpFzT9$s3nrFbqBPuH*lJAoi14k9Y`eb3?C=5=xv}k4*!jNQ}-N
zHcZXqSU7a at YwVRB-G;u=lagdDsmO}cq?1tysI*{^a0!uWikxnYJ!t3-AT6#V`!+>V
z62zf}yWEBIoJ1@^Uw>jl#+i5m#iHwT04IV{KlfgfOvo8Y_Ep7f!RN?FsEAPFCE~lH
z@?HOG*BQ!Bua2b?K|<xuQhbOThdr(#DA1wDr@*O13?8HiOR;G*X$#QHHC}3Hj<X=R
zrXS6aTjt2zahwJt%dMPZVlwb=W&bO<V;$3@&SvwVW`~amtACByKOzF=%94xHr>%={
zIlEx)?NahoeTax~C_oP4c_9j)<)8MJV~z<l at Or&Xxn_Z(JPkV)GDA#x_ at LIk^X>Rc
z0$^u{QZC(c3XwxXAVMr!XkxG}N<(9)?k6Ef2=V}2;<<DHO77`bj7vL(>({Rb3PxYW
zaO;X&2I$tg$A5q1<xG3aNpouc<$X$A48){XAM1`N=U=6*2gdGhY>WH6fwy(16_lKw
z1qSHc1oxWbjI*sa?X0-E_4^`&%8kY34b?zoTBQv*%r{lA77Q|k(~0eFik@%1YOGk9
z{ud9}fYDJ{DF2`RI1SJJu}vky)i6Klm(>_ at hu1I1NPlk8RLhx9itq)@v_Q08Se2U1
zJKg7=AOISShsg?P?XueXC??4Te@|c0TLNZ$68L#qToGK24$5ZM9m3Vwq50%(>>qWJ
z&ZB+$X&9Gd!(NaHg+6JX;KrVd9^|?8GYh_B+Yy79YO4<PiPH-WQ*h?CgQSe*p5&vO
zMBfe^zkf-0#Zy+7HeEFpexwD at QtxTq#bKX_M-o<ICm9s%02^Rn(y33oDv8C42lNTs
zaAP?veZBppPa;EV9T8q?1v-Hp$gRkq#wur0-vk|DBwN<eQha(u64bd<(GkOiMIi7;
z-LonIU7x!^g at g{e)>dYgLM6r*n6`uibyaiZqJKLCgJM0`nUr<wxF+O<bk!{oS_A>|
z=@6>xkDX%<ZC~fyX)#4>5l|x-XHwmIDq8h>`m at AOk6&(?0Xi50h)qG<_CK;y`|{`~
zGNf1-iT>=i_pjVv8SG<52as3rq465?2_)kU(7MS(wy<{%&Ev(}h$B!iF~_0=kIXF|
zjDL80Bu7UCFKjd4+VLb#vxwY%g62!*>(-6NS8TtxzT>FB3i-r+eOKJC`%3X4BIOQ=
zth>?lm4>0~Kc;;hF+E0bY{5+We)&%9AoO<Ay<pRWh|Jp0vlAj^D-hHyV at _`kG_l$G
z*b#yzAXR~rIJjoNHl?w at wTXd5l~JW%0e_(bl?iP^kzLcD!M;!~^Y%ON)jvmLGw?Xr
zmsI<UTQ3<dJYW}LSHal%SLEI=XAN*Iv%0qsib`6Zu^;^P(Q0bG{($zd934$V>}q)h
zp#py+!{LYAU%9VgEJAa41R7WWMVR8)I at Zi#C(oS3F$;t&RHxGf3HqI(mO!RJSAXo(
zM4hzh=<8k<S^n0{P|FupZYn_>l>0Wg4U*1>+&e4=<q at wi_zKEF4TNE9wU*^}(JGcF
zrl`@V3O+i|>W{cdQn9N5;%$PGsX|x>=x(T%!Jh~3IYr81btVh!#Y_)!E5sn=yVw3i
zQPa!*#sLaYm}F{1pRXHZFwVhZ_J4+DJ&SQH-9XlZ-2i<Az6Ls(XvEJCq=&cuAa=_G
zF at X^p5P8DpB}qapMSMd-d6huS1;jHNgvrbw^0RX!MIKGk%t*qEHr)bQ-POa}X9I`g
zH&D1@(Lj8c1|pP5&_%?%Ll=a8uBiQoC1rP5>eKaXTaxY>)XIqF{L<60hkv4G?n8 at H
z!AKLstW5YPEPt1!H+&z%kKR(tDSWoxqR_48kfDjU2cll(E0r3!VF7t0wg&I?p8D4!
z&<nBAT2(Nq8aBI_UZ0jnD`W3T=d7I&f3CSSp~TLW4&~e}#5Ga%t-%RD8?3WivVi^L
zq^xHe^W$XeIHUka!nu3bM}L~vbq+#n5F}@tx&ai=a1dB6DzC6;^OTZ`(ErHuDB)>g
zElhOTo-^e<G?JO6Bk>}!$n|U!wnIPrRIFnAyidy#*EP90I&pt#1S)~Uy**J*_*gm=
zKpHr=gGbCl{2!&B9~)VhO}l`Xiz*aA2Xm|q;nH3Z72U#Rz~2WN+ka3ot at vG~v*J;Z
zTuFjFi&uFr at Qc>*Ov&weK9Qq8)`0wZ^F!dQrYK8OFeRSfZl5;WLIsb$-;}pkM&8MH
zLB6_21 at T}UCXlCVmKquQw0f7&*3`>z?)5{xzQep-0c!|g6w`#gVEp>4JE- at c(!2sH
zVYJ-=Y0ac5waN6#9)D7QHYRRsfz0UFZIP64DAKP|BE^z`)X|FJIrKI*%s@=f`@dp}
z$P_`w04^>C9g at 2k2~hrJs`2n}&$owWi!?2VS5C3De&Y3nr=)a4`Qbe2fg7f8AeM~M
zVTufpW-L1Nfw+taH)+s<sI)d<Kq?{WhI>mdrGT4HRZ7t3aDUQnJ56p>23OMEQ*e(9
zyM4f=*EiqD`H0>{f_Iw71wc;ZG7|Gc5W4_m{OUl0sYqzz_%1lHL at ue%I_0WI!^|fP
znK%GZla6IJA}<DMBAnLiT?KaPNUW;$VABRzqWDT>TCV|)p7>xkkH|ZHI*vv-H@#b~
z_7Y*NO|sWN at _#g~yTHcu5XCgqURjFvDNZ<}NNYkf&U1rdsKjF><g~lgJ=uUJ99l7(
zqcNn|EM6V-I#A7!5rISC at 4R5hGR%7KFv$4a=?;bo-)gvzJS!!27?dlAA%{AV;451c
zS{Q35w(-K91+FmYanjkq?TUW9s+adeWs~_EbqZ3E#((k9X$4%B3=d_oy=y-dfP$m=
zgV8ch3W+0MxSy|P3MAsESQrb~>~p2o1`x<FMT~Qk4SD~pn)#i1?qMo7&7U}LX+_|u
zR{#QB5FjjBwwf*h+2q(0irx)C00;yX86q(#e~-+4vO~!=z9MAsg_?qQq#7Y$pw&PD
zmwDNvNPiz{+ts|4HYMxozxb`zB2{(jhcE}rE$zDKK<G&9B`}$`sQxuv7g`2`XaEYX
zNg^cP%t7F(-lo!C91+;+fja5b#02(_RW*KXlREHba%n(Ab0<@}Z*R9#)t^^gVhG@>
zph)~~yL{(LRWS1I>>mix at hOEV=JK%z7P+9X<9|xdXh4BD84a8D<Pg57YqAml*`gu9
z)0WPxaK=^(Uxc`UWb3p?Jm*m=SS-(MJSbS-v;a!~|D4cJ^aCy~f2laVE_08=;d;kq
zo3KEr^7Z+ESZ2-t;#$`8S7c6q1vkI-ybs1ZL3W46EfyPT&ZPSuiI^a++K)~w{n_RC
z7=O>_mlSnRGjEJ{<G2a!mIcxC{>3so at ShA5V+W-lr~DVT9NdPR at M_!q)#}HJ;>}?j
z6Gp7AO5A1$*6RFZ=hpz2EH$Lddj7xs=)7i*ioXdIVH at RufPlmjHkd%VeC!@_De+mP
z+zdH-Qr|Pmr<MIU4-EQxFD%tuELnYLWq-D;!Ot;Nrzxu_yPVK~KNP%0ayY>RJGrJX
zF#+vmUqCnuqM(X<1bkk|8e_B(StT at I8+`isOERQqT+#ndti>P<dRi0iWN)%+t<|iQ
zD$WDzUKm2;@r=8Ha`XWONN^-jd9qsMIcDG>nWkAgk=4H&csa=epnIbe*-Hw+j(@~1
zZL34P=l%K<49yC;D_JmRvw;`P-_F>7?6Rm+a30a~Axj!Ne}_EEM2Z?rCiizaw7vWS
zzQ51%rrbdkLzD|+CQW6SiS*2`F&>VNJ3p4zH at _MVSkidVuTv;OKw_r7hGd%mQQGyC
zfX*L&;-JBX$f{!!YN33+y#Ei|n|}#P4F-=EmcEVfffG!XWDTVZ?MOl;|6Y=mWg8RC
z+29*dU-MZ#QN20*RX9*%@01pl37KhXQlS&EXJ at zQx`0>xZ#HPirmt-vw7`s(2SBp~
zP%pA`B9^itCZvm#aH~N+Mwjd#@zMM&UBgDSo>{ujfRF^x{P`5NDv<ToU4N>nXMp at i
z2U2|KN4g3VK5QN>rY%f!_`AM|eC=Q`&Y?P?*hXlPR>BrNS={2{6%Y7?)lvPLHvXg;
zUM;-go)upK$VO$VLf24Dfysdt=2G_pRJSE=8vlY_5OFDDN#lQkDUY+$zcRseC-yOJ
z_kX3a&W$#6qk at FOo&_yNDSyp?1vJl0Uj#p|kln|?<M*mtCcxbeio`iossY|8QId9M
z3t3I7uY9bYg`SAEoCB{Wh(U&)`5)YF;7;HZS;f&lip9T$9V;bDK&{hYq4pmm$PkJq
zx^1lN<I;+Z!dCYm`tQV}Kf{Dl7!<{5roRGHtdlj$WtCs#eyNDE&VMh6&5wsCxjaWC
zQ(3r&<0+*<s6UjzS39FFVId^X(^1cBmW3Utcb&y48M$0JJhK{K%1&BXmx&k<!P)6;
zbRQ2aE+!@jfz{>$GJ~nF!ZXn7Q at iXs2k!nzvB0iQx5aN|4w&85N-xXx!S&oqwC!+O
z6{xYhFZou)YG0Tv3xA8h!L&c266{}7EG6FR3&=YLprg}rPTW!y_Lyw4q^IoIlItP6
zAs}Sd^+ND;`?XgBP_ at G4@-LA8sA(e^?xb}|uqbKmb3 at K(8_X6YDOD$I^~v;CQ)TK;
zUSo)hm-r#A-XqvMAqU$0aWic_yta3pXx+0@!SC6{$kbSsGk^O07vYfEC at thzu)6kW
z-XPIaTeiA7auY+Wc6}5 at H;*Z$t<8LVlV(DCW%FT$u$aMNHAx}9QAuvNa6?c))Mz{g
zWO0BvZ(KA)qNvt>9JJCIhJx7Knc-7E9}PehIWM?C1DaNe=`2i_h3ff;RXvi+E2|Uu
z5@=x}1>*5LJAcYO9O7o3JrHO(41=-T{3RMZq%M!7UMlZ#HNyyZT=^;e{YiWfP&EZp
z$^=wYz20H^?5jO&W7_z at n#aVYY&+0gu!jrIA*U!S5zf3ImWSlE-At;u#mc!ZTQD*)
zm{$f at Wl(irdTN8Z1+A}X0o|?yiylt&ir!mcmn87R at _$TndwQvCWhw4Jb37Ikz)qrS
zineh3$ta_^yeUOyP`>xrFlAnEBsz0Ei{)s&R?J%XyfAUe{c#6Ar1JKTIy0|)YUFc?
z at i22eV9Xt}X=oNQOVJ-#;vU|D$zHf5J}?=Aeje~s_UCKS=a|LPanipkzY(WY(oJaO
zbq#i8Qh&$1Rue39Mo=Sc=0aF@<h6yHHE_u<Vp|>+^d<Gk_v@?Aw^QXBeXesz#$xWh
zuzxDjzZc)JjsoXym`W(5$`k8a1G07_ at N0kpkJVEBy6XPPT}`Cb2V35{!mu-GM8nIX
zoCTU#u#^c1u!<3Ta1MUW^#mfbtJ{g&wjQ+5G=JO}^ihRslFwQZGVteiU~F!INT0Yg
za#<Q*TAdv2PR!J$I}8&=o{H3}-C>$0^2jB0hI|yC7gRh&P4PFP9rfeW1ZKk}Hy*~Y
zgfKTC|5PHKriL-ARH|VRlY8Wz1i=F28Yg4OM8Ah<X*gkC7%}<R)2zXu#OKOwYJRMx
zvwu+twv6gs{h;C~SMOE(#y~=TNoqz_NyX;m5{jlfaEw^A2++e;x^|vOOK^R(W-9i5
z9PhxN9r$Vk(b%KXC!L^^y&JG0={LgBQei=o0FaghChxGfe?Qeq!&Y7>e3HO&Gq|^j
zzUbVouDC#oGSV<?l)>G#nHQRBVigE)c7MHI7szeUwg-oy7^%<wh-NEB&>eTtk3Bi8
z=nSw?#^pTxzFTWE&#$Y2Iu)Wk5wcLWr;N8uhFU4cxth&1gBSRPB2;_!M;_+t1$osI
z8belGA2clgs7`c4iVh+*KtJCx|G4s=Yoyoir)GN9s3|}9WDp^!gT3d?SnwHB8Gm83
zKlcBwUsN54vxgF?q!k9}F;e$qw=hp%&_N03VwLM2Y?5H48Td{i(`^<2mD`u at CPP(!
zq81cWFEq>Un@=g`Q^vfhqbtq==7#1K6SW3^X)N?0Zw08%h0#0hJ=mz6s^rF|zzdmW
z+hwEB5{EACC}y|=PJU$@D9M3%R)513o5u<qBW-tLoV+A6-9zIN7OS<>DCbF5QYfh3
z2`W{@D5Q+ at Zb7@Rqf`sCH#mItMHq)j_t1t6Eob!KdohQB^^B at +dP`rMOK!Ln9sG*T
z%!UNtoz8kyLa82Zc-ian_xpv78`C|*J=>V|r<QZ8%yz~G6-PZM7y9-m1Al7iDA&FQ
zEh{&qfw^t&>?;Y9t7YjbbdfeRIVq1~i2136fR}rZmg*eQuc~8o5On0pDtHLQq4!IG
zE;$kL`i$PQ#eUUKCV(F at rUXJbXLWDl5}h3~+Z;`x(Dxv&d0lN$icGV$l3qr(`8|aG
z5C$oXsozWo#**bJdB)W!m485V&xIUI53~(u?sJ=RR4eOln~_pbNAy{_Y0R3|>?&-v
z|9;7HE$TI=)AM77+nel)taCg^x0qvXy`caYxSVqwe&7;;mSq1mVKT)lbr>AO;H5q%
z<r(0|EkNE<>zBZxAU#v~bzy7R@;cESNJ9dkJHy%Q-hi{q##Erj#ec|77kine)?h6R
zDBa>=6%wH#wWA70?E4!RKJTpZE);W*NxLabD4b249SN`lC6&mvL^AmF4hDA?xvL~#
zQ-TvWa>uLZ?TD?U*tEQj+n>uqjy5{Kuv{CzINXHc+_ at IP*Ju}vh<`zq;`e$fr5iOU
zZQ`2loxF`fDcLOwPk#YV*PW%e6{n_`efb at fD20eXibNeuO*_wtv_kktkw$;7JztYu
zODrM_R5V9Oo74dn21GX?i&pMPwPqJh?Kv(J$HVKRT%b<MA<MVkQmzy#B3N6{Z<_M1
zOsn109Rbd0!KAg<X at 1=M1E5Xk&G$nd(YmY$t;1qQ0=HzY^?z2J`?_%)w9I=0cdwj3
z;1VadOnT<=R{bcVuNFZjO(LKPyxnJ?li(d1s9+=(Y9!UXLhmN0NV5ymw>b2}B$Zv$
zL4vC<Uo<%~?TV(fy7x&Cu<un?Xoq&Mu0JZZGUTncJU}1^Z;f~>9{=xURp&p8P$o6|
zM#NHPS32 at XiGRsloilp8)^+p%zxwyQNvzyn(bJ9~CF@@^Kx6$Yx95gQICq+Sgh)An
z=HiiHUAVaZ)_S{q;oA!%mG;r{(PHl7fA=bqqiiC5oy$(2f(3r;>JPFVx^jSLiUI`M
zy=4F){hwv(5JVAGrcp^Y>PS<x4;}v-2u?eH-2Kv;Qh#_u?HN6w(+`pt(prjGHMwSK
z()TBN%8=Ou$wGix0Trq at wUM|9l07J!w<_e$D#k4Wck0G!U}r$WiU`7o$Z=^5!hr7T
zK4U at zG4hL@Sl$(;o5`=?W=^|OTwS^U3tmxzdj+_p$Yj&PRRa9CrzfLi*C}gmv6(&q
z58jHwCVvl%sKd?vOMxMxtROg1mc2kqt~p#+_czQJ)HoP_wL<k9;o|H9FO9_n8j-U0
z|6$}zrb6<BhS{b!@nP0JwY at bDU$GD2F(<V&u%_{G2;|;j))1AIxVmoO+ at c0;Kwl3n
zd?qK_JWB}^Hfj|-#?6-+>Zx+-I7Q_7i7hgkd4JqA<8U!S0`5#o+XZM=xoSf~Uq%nK
ze|8`PkxNaC6wF8I0Ukxgpyuiaf}f at ZdPbkyHE8=E9*~Oi6SPq%i`6-w at Q7&$&bu%?
z?gZt)h<oy1&3a^~g97)GpdLIZ`2_l3h?nZ4WF#$h!`|WTGvxi8)v9u?{XNZ<qkvak
z_kTMkGx*gVsl&<^Dm2rvBpaxoK&#|h|0FHtIg6MV{4FgB83F1g#LT$JH?ld=(vC|j
z3gXE_>{3CfnReoGFAouBz6H?E*sJ^}Ad%*cGlgV=@#uzWQzO%+Y3Y#qM0N#|yThBx
z`pyojzsd&CQ3g$APfjh#5^<005hQ;4Xnz)z0t(BEN$oJ;fAzm6-Ht^+VwT_=GR-!6
z at oIQF1w(@EcTbe?UWA_K|HwP*2OM)Eq!yE^d@%H^Q*6FI7yWGQiVhgs!Xc{^l)`);
z&IU~FVdC$toJ&=kDAd`41J&uwj5X+EGG1t1H8@%WDE!u3YEvT%7y3Wob#A|v)_<1u
zsPl at 3On_eoO5Ig33(ncpUG*N?Q5ZmG?&GzVvMO*}XQ=dRWW`9W-{@KR@>NDAbuh_R
zef~q#Iipqgq54gbml4%&7^W#1+TCrespu6qqd8jGVf8Kma at Y0fF0P}+qa#fJm!GpP
zb-Ir7bidln$WAqVW&&H!hPIs;rGKJi2Vz}{_i6YYk*TP5C^aeFxlP0A at f=x$i;-mQ
zP-2tp-*vBk!o^*02JE&#?ofkkgAud>_53iS8A<kF)L`JHtr6y^P-kmbe!y=$IRD4j
zCq at OVW-lCM->>{ko}d68@~DWFuRXAXmqw~)(swbsBYR!*QKT0GVF&O-Pk;5jP^Ie^
z>vZKAD}^1a{mm`%cSMu7B!e0f_iSrMHseMZ|Cn=ZWE^{Ksq19a<B<HfFLE)bI-50f
z{88wzJmfOq_q^5yK(k&hxCcvGX!)j;zj#V|!H1-(4&W<V<^wvWPJS*kqE at cML>JrR
z9gF?pY~qZ`uhk*%cyq0CqJPMYNzHQ}4WV|Q<sE7{?gOV}Z9 at Cse*=#Oo<3L>6EaEX
zu&^|y7>Az1lu4Nhn^(I_f5g<2l)xpQa2koO$>H2^%M2W*-n)K4>F4>=Ey0;XE;0k6
z?ydYb%nD~H51=1piH3*Ki+0olDa>Gg+X7kO-p!@fvS&5JXRPYQLVwEZ3HdC5yMWU>
zhF6!{fBx8^idy*+GwkOu?|D-}cO(YV<1{#41boD|OcXC1k-eQnToV=2ACbW^^I#53
z3oV2c|Cx{$kArviv||0%&dzd1WS?tW#_O2Uw at s{Cczmkkw4xvlR489b80_D2NRXx)
z&Tj?}iIcupV=t at J41aXyhq^~TY8PqeJy=5Z4Y^-UWv_QVH?w#k9GeaRxXqf5{7 at MO
z)A&+IDj<(2>?wfb?ccoX-Wv5AG}LIVJcDl;ssP$PKD{&gUS>)&3z^J_#dwUpy)M=0
zhM<|fzAKY7($rcS$uZf0TLo~=Ft9xhkza1wxT4>A$(ow$F at Ga!_ at vs}OI9t0k7qdu
zaOaO!uIf`X^qCWImhPuB7b3fDWD_<_Qwx%P%|sX6Q}Lt4f4+jNxX<Du*RTE3ynOt)
zSWa+82cJ)`Asm0alU+T=8)<^ANt|<>kWVH}<#vFh;=oJVP;dQu-o5|UunD#uD`{92
zx_UY9RH70-bAJGkwnhJuEB&d<5+S+OrLwbb5+W)5Sbm47E7@!{Ii#wdvY&w|n6q%d
z!Uo_I#!UsG>X5&vy$zVQk~6B;tbXDP^2PjTVCpb#@o}dwZC0=Ow#iH)JOA`&u0WG^
zgXqsktX~_-vlNzgbry#UT?)G~43v1e`PX at RNo127Rew(-!^aK6B8t_!=Y&kOPr2sU
zEu~sD2u*n=VOVx`YZC<RM0)s(H at RTn&6Um(w|gRD^zGK%_cq;CUS0ED<#`mUSxYtv
zx}GU16#!wayy)#zDV(loT!>l~IZcieJeOjE*B!`@I(f~lz!VgP52*<9*Ts-Q=IF>K
z`cF1T0e?<pYTRFbkZ^Cnjc*j?uHo~g<F^<&;6b+IOXl%|C^^Kwl;&KloVnKS=>epx
z;z)<>Ygrf3Tf1rqAd!8AECa~U0wVmZUrV*@7DAccAK_Wr#E_3b;Aa_o1iRZ_$bWao
zPytK>6+!0^e$2<9;&?{g9z-SjN*#?xqp6vWSASCVqY8no-iN)@7OQ0$R+{Nd=yiZ5
z-<cv(z6piTQv*j=-E_dV+ozybn?(6{tYK+MP&@w^`K>*kK+;z%qX|s#v+t?cD>IDV
z2AK(8Enh60jRIdl9OX9jtfJABeES-p3L5!0I8{%F$SzbI$3+A+DDBo;G}zMGrcfoU
z3V+LEeZof+qA^fwpArX1NVFK37A(`7uLcSTW_7^lFP&xnz0M;?t8V6(0s%lgYI-`w
zvC-G|Ann&=Gg+pBXiJA*^HyZy%KO7zxA7A at ET`yE|1(Y#nN52k-!KN~?V5X21B&7X
z7jqwwJ9(5BiIa$fJe((8AEZtu97I>2^?x3@!&Ias`)-I6gGagaZWln|x$yx_&+pRy
zzWGm)y5Q*0xZ#^%J{*q3q<tAVqIMnLh6r}LJ><)=GT%0&ZNd?4vV9ub;B=lO`w^G6
zc5=`?c>U8DFButC3-rot=%9HU2oxtR+QD9;nc~PIqf!yUnBfy<D#2p6`ZCI1Kz|Tf
zOf+L5k}X2ycu5+Peg5#-Ooyaww>zpfqTPkNZ1lIRW-lvG8-YmzG1)_@*xUwuNyUXH
z-Di4jkD!gL9)B(U>}r$I4tCq(YY;~6CeTu6bC`txRXdZQk`oQPNN76c{tQn^Ki*w3
z+f2uRmqM#8>=mAWlN*!pna@@Ci+`T>h!3qNAI^7wE_HZ6sqGwTZm)W@?;uwQU at +Pn
zp8gEjA(s0 at YctVwc>q+ZaVRN%)HmPkcuRa~#n%%)w{gBHPKQP5ATobF#8tu-pGzBY
z425{_@?5djV*LMDHP6y^^cxn{AE9G$z0`>yaZ4l{&_WXKMe2IRN6yGYKYygzvoZ^J
z1l^pkg6dcy7}G|kVn?Q#H<J*4LK*5SMjTgOn5PbBrHwfyRHB9Geir|`@WM4|6#p#<
zl?=@yLnyZm6z(lUOa}kGyXdVqerMKx(HT!OcCAr at Hlnl#v?Q-m(1dG|x&xWy1fV-l
zwVDowkT_Tp0My$XI`3HYxqs};rCEuFU|GE6$<I`1#q1ChmBnNhTG;?<qB{48$~c{e
zLgu<AVEPHjxh=d-3kYO_M`5et=vFSIz8?ENSbP$-HVnv#7J7DaZaYn)cnr4a at YI@x
zs28#Si(1_48G4w?wy-cuQ2eu%wZV8iD4Bm)E`U2g{c^c3A*AG$Y=1>}LGcKzdXf9X
zj$`Hg=w99CIO_C2cns>3zjTHqk>1^SbIfZV&brWn`Rm`PZBdoQw}`Vk*c3!wMkX@~
z5tr5(XQ;3(5!42Z9rk%`wPc%pVCukrBV1#~Rop+qj_+<@sEY1wXskiR8?w*5RcGaY
z*s8XjYv!r?)YGb!<A1(IpV$LF)QjMvl|ncYlYMGwa;N~Sv6gHGzpzEt1<Kkt0*un;
zaGt}~i<2mCE2And*~u7n5y+wD0zj5>z_=PpPq@?G7mW2t)(Y#BMW{MPL5odFuUfZ^
zwgp at 8%+7Tn5SZnP=c7EfR@(XrE5mL32pepAsIv`{|2oo~7Ju|{MW3d*IJ>xpZ3VNH
z4roD%-=qFW#5NXEs1r%9and6v8Pvnj6=&^dObki?S-B<}S_(TOU6}HYie<Q42YKfQ
zB>8G+Gfhzxi at X2I0Gb%HHw2<wM1u-$I*VGK=0rqnGN&dh$apvaTwH7vOqOgKMTJET
zu#MSlW`&fEuYb|1ByBi-y at x`iiKys32YxG at J%!CzycQAAFvKqtxl;mwEsO6w`Ao;N
zsSWv>cAq~8Tp^U5LRt68jj(*S14zvaFS@|o+o(uyycIFU at tw*(*2 at 3vauiPm5L8*+
zZ&J&;fCnky-q?uPV|J=z?2F!m#zFT2lz!M?BI3MKg at 3h{KeS#wd9vv3B$8Za%zSG|
zE*^Fg--B_GnkLbUNY-*2ufXooh@~e0 at +9)SNC-Ly`w-K}IjvO|la4qbGyb?*y<N_6
zqM>ns;~mc>G9jl(5&-Ap6wTYz^L2ePGCVnj&W_46b?0`(hc9<2EG7M+xh`lk!1;3R
zPk2nUXMbwg?;A_^{EIHIyeaD^lD+EO at PX;g1x-}hl%q7};Dw(=2Y8fTDAq6E?&g`8
z`V1s{hz^2zB{Yb#jMBDazQz{w&rmZHX{8g;@fx*jZ~-(}Z>qzKp$hw0pT(#$eRmB{
zGamtenh7p*3w*$IItIGD!EkMTH0aoH%IdGcGJoekw`vtgM#-~dKwE3^LOp?Ot_2fJ
z0Jani%LZ*hmMm7xpTYYC*f6 at Ur;Z6 at d&}0UmzHc;+&BDG0Qo!+jtI21>!?F@&QsO=
z3U}aOC=;J{FZ|0ysD4#}?pRA#d1C<mFC(--ctq=u5QXau8iXcPM4^kXY9TN5D<VUv
z#eV}B%IPNkCd#93`I5r9-Z|st(&96)SX!b$E=F@*8hq`5?4S*$<%`O}ClpJ;l`elq
z(Xk{O35k1b2{v~9o1-ZUM|gj8pRM(n1H3G%*gKcKl-BnkO7_ at ozJjo{F`Ts6Khb&|
z{>u`=)no>(FF1ry3RlQuC`qSCG0$Io^?%~?WRiULAX6HSqGYprq(0%%S_~wWtCx5>
zlDli7OVV}8en@(iy8=wE?rB6_(k|2j%?$5V`+>pyLsm}yp<7ihmj=uOb>VX2z=mo+
zTIwC40<Easn&jh+=#?Uxu;t*yLoWvKb1I<UDyB<fn$o+gG-rDuFOpQDH#99ji+|5U
zLF610mvbIzG6I^oxj{}qOl>aDtzhMq&Ds+O8lN(v>&45cIQdGoFlg-~N93SO`A8H?
z&pI+>m03t$(I}Q*70ub>XVit?HLqr#tAP13uatw~g)&(jSz}IHk+1;R3Xlgr3nf&6
z<*Q{!rnh%KvmkjnUEi|r*G2BR!GBtg&`bhJJw+m#?Qgi=*gX#DDB3W=1|qC^cm5PO
z(ns#P*+g2OM_Q%%J(Ef0p3|x(1wlfL5tl&;y?;V~je_JOH$t?v-BPE}=6Ch?T?ybc
zzH4rnTs^VtGH6B(<dDTsGr1q1#WfG6?+uvPxv`RTZ>L+Zx9~Iu1(hy+pMTfAa5^w%
zbk}Bntm2M$qZn_qxF6T^z2m-Gl0rk?#+zDs9y2x08;@^E_ky|e$fg_fLm@@R<6nt(
ztOz*l^cn-ICn!QkU43e=WsusYgIZAjfUJ?HQ^Y6@&_*Xy>Vz9tD|KU@>H<^w*?AJD
zKm?m$$?F#9KL#V2V)(g;Hh;#kQitRnK-+&r4Sj<dHEXtJ=P=TqdhSGBddr+{hyG;}
zEWL=po=&#rsYQ~9K^DNU!ansv42)p5-*1rTZ%723`wSt8ipQ#!?gBSrEXPi>HFdg1
zHNtet$%5(_jbm-W4}qowAIKLFV3mwY4D~{f&Kmsg_rp)UiRs8EqJIumw!=6J<L(UF
z=Q*Hry89>lSWfC13m7WS at nt;pZ+$kr_6)+By7C{14~>Z=BE;3fHYFGgui$>O@%s_)
zV?%vrhDzQ16g5xQz4KkDqHf)-ziB}7)L9`!x_M_qjW=1Tx>$!%$p9iTd&dL%=t7F%
zk~8zr`mGSI+^4l2ZGR!Nfu|NUg~WbUSZJ?9?hrE1JM((7M70vmwpm;zQj0y<7*c|K
zmeN7C{Zg?-pqiDywpd<~N`N}_c4VC+vs=WIUzok4r9fJL_5(<A;PIcFm^ciTq&_pB
zH)(uf<(2MhWc$6lXcuaDI+j(-d;V4tJ_+Z4*Rd@!h9u7{BY!~&<P9a`gK{+CeG-8r
z$omaC9-_Yu$kp+RZ0skFA15N$IZhisO$y{=9_{6`6r^svf8qC38naLM?2&W<j;a4r
zPIn}0qz-Oa%KS_(?I=%KcuVGo_`T9lL$`6IZcJUZ!?4isx>{X9 at fWQWQ;Fz6ke?0S
zi>V at GXnD563V&==Uq>-f2!lYaDGmjLBi*8A_L)0B5KDWxZeh+4y0YEe3IEQ9)Yo4(
zbx7+PndCQa=;w4|zmkI{;ZB8Y2^Eo44NQTrRt_)DQSjOWnuL8doudHR6YygEOqc3N
zPds?-I*SGOOaCP|u<qr0gMXb+%}>lwiwq#zMacJ&KY#Hvzi2f?I1Wzg$`ny>zx5TP
zpHIGBwy!*JCOYwalUSmKa`5x{HhXKw4k1RliX{(~88hU0d@{`ag=^0Ru+Me1r~jku
za^y{#1H$TPL#u~JzeB_T01%y`qX4vKeQ}=69_)zv4YhG*mCX|DGEzfxlL+3pDLyM1
z`-o3jI)BnnJC{qD9Fj5*#4&2adqo^0nlxyH3aa!be1=+9qHhaA5LU at tb$+m_3Nmjt
z4|R?RDG(&t0P;+F_6hw4bXC?;OqzBDta%yya;54g<ZsEg;ax<m&8~vK?>euuzW!t<
zLld&(8Fm at Ba{m_O=Y=6M3sFVhR0f4%Vz41p=YQiR<P$_=%{bpxv*!2Mmn9me9Q|}8
zaz?O8(O*(DXfY$h|G}pD-G5Xhed_o29D9uO8w+E|;ABN(aJ@?O920j$;hioTQQB at d
zf at ok&IC|K;HtCwA at bUXlS7_>Rkulbc7<xvJ?1<_~j7mSsM_}ykMhJx7Jonz at OZP}7
zjDPf{T5<T6=jHkq-cr<-GC at hw%5DG!K>EK*@*%}gUlw6S6-oBXq4&(6G7Q1j1A{01
zx^H^*QS4tDznwo+^QL;BtQW1cg^v{<?v-7JGoA~kiF}l~TD&eYJ7GD4Fv^bUsvg)f
ztB)&MiJwjC{qTNstaIYdh!TRwvdU^4J@)D!m}P%~0{>Z;*(W?bt7E$89VfTkMXF4p
zYjl&D?!$Al-~HqID^n2CM=0^*os>{eHn4_O9NW_>UGQyUZ(fF*NT$bWC5NWnKb;x*
z>#8wDr-t$kum#(VIh&wa+3bf2!NMh*<qRS_FIT*{in6zJTcy_1Szj(OCjMF}-A)IJ
z5D$NG_Bv(e>OznyEn6>6DVrXx-CL;HKHdfpUk{lUG8U`Xc5h?bu++&no6hePw&RLi
zUv{3-c{oxCWrO-hd^61I1Dj9XUioOmZ$IL2n^;Ko83C6D(7<7C4j~pPuSlGD0fqr5
zu9uR$zoaJ~N8Yl8)mwN`kE}$07E at VHKc|02?PDJ*GJDWi0WiH-6Y&(eUv1J<Gy|XR
z{!H`>Z0r{!b67?tdkqx{=y~QKvgBnZT!H)>ISnbc>XVW<w4Du at cx4@5LyUjEH?gnq
zEAp)0*I#V at Auip2K*4QPvwf%u!e9ntvTRs$3s=vTCiTY|^v;l6$%tYys!s at 1HV=P0
zvh>h(b49?|1$=U0_dN32;-XZz=vS98a&EuW=@M$Tm>v1_xlFF%{tZdh`-$AV9oY`B
zj|{n4X!K)R2=^ghA#5?7Cfo4Vdpq1RUmAqX1s^9R86ZHc`9Dvm6lE`KfPy9#p2xjX
z(sy4|*SE-Ju52mZoO7g^GQp^gaxj10WAK7V0FY(-Wmv2y(`r>Iyqn%r5EeC<gcuJ|
z)6ObS7{MWcIi^-GqPBFr$n`si&9%E|Ygzd6AY8yuxsMv1KsXEA--E3;N<AIWT`H?~
z%cG=4C~K+HRTm~3hYny6NC5d`2s?K_xLS(}7l_vSX7j<thw!to;y(X6p5%Y#UrC{n
z{tgeNvukzqI(Q*7b>a`e4$zn`$<W&!5yw>=IZQV<t0tKj$v4c*2FaUcIwnH`3;ArW
zyOA)dcyFxR5~9?T3dU0yxv(apt%?U&P9gmPlrgN5N%AR6Xs at 0-M65@N0)USxJ7`ig
zCE=awT2{Hu!8N>_jg at T85QKll=e0`<1#6|$DgpDUM8MZM9bT&ubUnPp<{r4;U-Xfx
zwE&Q}-~M7eoKW;!_Ctr|NcAbBbgN<qB&gGJoV4mRlWjkM=QME_T>Pm?D*!$(^@5%l
z&;qDDsiS|CTonGBZ>-r}SvEj#OoB<=NQQ#3m&ZK+a{A`K!g(E}N<4p80mW at Gus~e>
z_cL_}@gcB_&MAQ<Vw}(J?F6!1pYk at piBIwuIJjI9$n#)#rh&-!Ole#4>TF4$?nojx
zmzwz`G_op&yWp at nq9dEWl2&T2uNX1l=p_?~tvME$H5)?&fV-3{QHGNkqK4TKs<$cF
zj99`93E!{SeS)&PeMNt0f!7abW2<p>k at _yBzbxJjbJ78p<`9f~+E584*igz6<tbO7
z6hSO_znUDrEL=aV`S6G3kPwHIyrn~vgpT~-lCycPO?I|0??{lS+}pPcw)@j%jaH(?
zmGCZ{V3>&OaX$sR$8kOgktCm==~8!grm!;@7Y{e^(`U&+zxaQZ*n?$z(zmz0r#puX
zX6h9vbpm0*)vHFCJFsS|>);Aw4s1plIcqvB|Lo9F)(F*B6{^UeV#<YEk$)$D(xzh^
z;!;d?C#SPJG0HSd+n)J(cPSak7;V9F!<%Fg__Tg^<?^TmYRfn*4<;-*1grcvBY>~b
zxOtzEyo~y1Oqzc(!C`XHirRnONsk;Z&P~3`HvPQ|iI{6MhbI88hOT)THdR+nQ|u10
z<J6#IRc%aexQ4KgpzQ7qX-vwwgMtTXg=xwpE@^(YlD)M6Y}PqGz+QtP`zz<X$3UB9
zhyMIb&LL|^FLkJ6W3IYXPekov2P+grhD`@wq;c>%?_PhTN=>!dK&|ybHD^A{FYG66
zCItR3D!fms(-lgiUO$dycE{2+JnmN|(kPa;MkgyA?kFkXx-rkuLSEZT!5otxDiLWG
z+C!>yDUj#Ie#g$7K(p9rz(d9_e8%;h at PRUfpve(k1{n`^^K at u%@yUMJi+5R*H#?i%
z!+WIp8mxaF;)=UU+1X7G8##*iJlv`{GT)#<(P<w(u0A2NvgL}#btj`uf%ywT)o)qw
z0aNW`0H8u6WW=y)xkB|ClrUcz0|TT`RRiWXA0K?P9|t_Cj1hS{P|`lVS2n(A9~K1B
zFbwh?tk#!w<Dy!DUuG#l=W~bi%6MXL#RX9w|CoQB4Qr}-zE4C>P);FFH$`|^GCwl{
z)V8Eo<x3TlnMPzy0NpX;fo=@Kj>;73ZZ2^}_A+eKu-nV$e*-$^D)L at 3N+kT02A$V2
zS3C>MS&`*b&dxya at q;iJiBR6Tbxill;HjMSEke!R3&h;vUWPMYjF(=0iZH7hok?v0
z8qa?)uTpA)Ux+S1lN1C%wYm4l^&m~wx4HFP)1SQkAIu8b)7(PUJkG`Iy at A59+#VnB
zixEDwLu<fsV7x<g&h6vRf6|6M+EQd9Bu=DY)-VMC>Q3QHY>=W-%)=ezUJG3+QES*o
zcDqtpEOJkf=_$w0AZI|MBEnWLM26kkxQc&sAL3KA7X~JODU4^vwh$#i2NXk&FN4N!
zyY_BV=i@*4)Og#t6(TofnV{g?NmX@#+a~e>vrC^C(MAY>QmE%|PRky-fF{5F&s$hM
z(Du2lrL3H_KMb|;%WQB(o;YB2- at WQ)_aD{!`?-ING`RaF8Vp)5rKpRPhB_g<$2ot@
zOlk~}Qnck(@p4E(bS9^SydSPT8xB3XY?0=Y&J6d?2MGHlZg*pOc)Fb?3ZsA&#CTMO
zC${jo>0wbOTRc|u(rJGnrKr_LNYN)*X>{KKAU=rI)?FO$e!WbKqg;_wr8k2DOfvw#
zNb+qFB=1p<q!?erHFr!OlUp477P)`>m;T12kbNr0p7~Qak)`giw>+kVAJ0WoL6_$u
zF1wgeQx)>ss{G92S#N<lVkW%$wDtSqd at g>T^aNbTDB3~Z+-=)O*{{t&Hxr$F&9_XV
zRrt#YW1O(Pi>s2;P;vG*-bTBB<7b}%3PvI{=C+GGA6vaT`WxnO%cT&_ut9%@B`mXd
zyueY at mAFh=paN!wMM&@}S#lZ}3E-GIE2#y42NrIckG_u_4~S@#3Yg?!78Jex=~#g5
z_ty|bHY at A$N}J1|%zQb^POJW%0l{a}|JU(e*_#41{NMTCg4K`V4I7cwreiZ=97 at LY
zwD*og<j6jLaps`y5?2p#zV3f^D+l3G!tm7OtIK|RHBrut9t+U%nV19_ccIw8s|>tk
zk4{E%CDfa57k>ESk7qNa?PUJtplZ`+fs+OZp2LZjGXuAL(%Z*Nq|6q{>{ps#x;7bV
z at -n#i`lHOlJI8yMLu}A at H*YnJmT0R`ER^I-9L9p*Xd>*fuusq;g2#WAKexHhVQ(_L
zwgVn9+}tIJ1I5lmuJm5!fH2mOwZ3})S#do#!4*H+?e=SJZpo6zxy-loa5q)Z#;eqv
zp==R<AxHszl<C&^sp<E_`@nv?(wH3MnTz at y<#T*<;N)K9m&w_c>}YN5hv3zjsOajJ
zjgU=33$}4Il(5vEjT3)Q{osP5!~nO at LkG7_FWtFfE_Mga@LYIO;3={XU1WKQobq$~
ziS3c_FJ at D&saQnW>?7&Kp6E=wg8I<E;vPPU78Z_g?wNak;NxbuKrQJ*Bin=p_@^Q)
z)sGQhz!zptvxo&SbOY6$Nz{=<As(mQAjHWMvYo=B!(_?Dd|7|ukenHfLP{`#`cCVE
zQ{?Q7kHc4Yl;g0A29d^w at O^jaNJ at 90>bS-9o2|)48o$OA#fO<C`dz173xRx at RRb0n
zR^V|&aHh<yE~wIwk14B$fYOfCT?t>_5+9%%ZX1jv6NBpTM%XWewdEf^V?X%|lnut?
zu{$3E*m7<VS}T8xtYTfc?8v1lQ^Y;hh5dhQ-WIjxgGRO%b`2K<yD%++3DW1ARSJ&i
zrk3^Ce{EhuttW&xXe=jFct~7-HyFwiqSIEq&vgRW6w(@!Fe;zMWk;2X#>C3fkR$qn
zMepkUMH?%7UBhF$)h8{K<vL}B{A1w)n8-sv1H%l!WMzLND#ME`L+zmrJ5{ai*<~uJ
zi2RL8OL>V-yAX1^nIQ9;btah7sp^0MmK~7#|IzBzfs;+5Ef|NxCrRlD%P2)gF$G|p
z at iyJZ+_V+eZ+k4FnY!!5-eThct4kPrQ0I9Oh!^I#pv1|dL=2s+l4b;z6*gfgr&H94
z!_?bO)`EYwaFt0XPT&j7=HYAP!tvsDg$K{yt)u6lM~^ZsQFgwZxDLH(*>hz9iP^#p
zJsR|j*;|Y9-7KNr*jEz`On}OI;hSTnscJn*R%$IPVheJt%nR-o at Th(qi8&Dw38 at Bw
zL%Kqk_%OXArO>e|l!Tf072b2gVsJte>8^J1Fx!9rejS1cbPYNTsC|bcQ@(U=)zcZE
zUDVpOS-Mro;N53hsVK`So45{?DC>9Pj at htIxr3}oes==GIk-a93w<Cg``Ke<;o>4>
zN6F|bV0>}yWdy~#UA|vO`CC8e{gcxc7n1>*<&PL1r94Eu9F5`=Zb+roI{53TdU~!{
zZh(I%gNA`PwPWmri;m1S$H2Bz6QXbL&YGL8D(2C8q~e|<m;*ZE>0yG+ZoFvY>KG^@
z;tM!bZGct_CH-6a)+E7En0_afdzOLSsaOLNYouCa5#5k+xZI|L<^vDe*pkJd%TG#I
z5(ds<Q=|u6_!9&;!Fq9Us{d*rhPXO>T<?F+%tKdh$yX_g=Bhy0z}ov{Nqa{xi}h91
zUnxW2R6{g!Y8)^>G}j_koc^m&(Jm9+$27=~1*A!S4sjNUvklyon5a8sS>Csv_qQ%q
zS?@KBCQzNB%YNQv2Vp+=qz9u<Gns~2M9;YIc9h6$>z+@=L9%yPtsotRe`>mg%1wVV
zPQ{jD0L+_BJ&yg!^C<2 at Gqyqyl4IjM5uYUDlDzzy7z0VGn*p*FAiVH7A7ldG{Mu|O
zNvrx4(Q$K0a5lqM+*U>#Oc6?MTTWvvo|_D?KyUnVkVS!>W7azU3yf~6 at EEQ|W<AuD
zKq5u at 9Ts)RB at w1W2Ojr#%1K>0nOlDhZeax(ICMhPCi{~XTBI2S;s}=ZZe(aZsx2hk
z1XK37zvSL>@G2zl7l+50T<g)pFU0cP$+X}LDQ9B=R$Q}rAx;T*cuJpB&Gi>7Lel5`
zlQ`U at g3q>E!{y1uGD`0_6npn$!MbtbMV|~7ocBg;L4pXqa9j%>P1kLAr+R-eGTiFT
zUfOsXsH~gQK^G&bmW%Ocf!j*$Jmw4?dRS|#hufP+sJQycqKxV at l^*G~N(LpSf8Xx>
zmYzu5)P_<kuc{IMQy!mRvfPx)!NSsHuu_D+6<2#={V)J+fvZ$agV&0vO*P(JS$*9O
zOk6X~$OKZqV{&VAbpl(p at Qi<PV+`J>_;MW8mqsKE4K#L;in{+DU7z-S+4DPi>;a>B
zgUA^HF6DMw$I!ch$$)gQm<1e<a)@papkV&QLu!&6R1DIE-gvTy9`fqgXq9j4*j`I;
z1)<}7^xg>JH3*Souj@)gKiJDdh#PeENEJ`_Z)e+ky=mP^#gFs>M1y}W3o!s>;vaok
zw~Hfa&=oVi{~%V7z8VxLfG)fV+E_`;#j*m?WETg)wq1-r1q at kXzmT{E-6PKyMGdUx
zI1eo}EN(G|uwweIQm<5k%Pu;q90g;Th3@`N6>&^9gZt^+x$YfEf`K~}Mbnz at Z@>G|
zMe6SC6tY0h#)1N1^7MavKx!yP?`lom1$BnQCf8+NEURwGuk##4%;|$#OCS4sEwejX
z`!#&GvrqlWNZs+;#wR(kUgq}k^M_tZ(#gER*!=d{YtbZwhl>x_6yctC>Tr#NJ71YS
z5Lv*xNqU8mxZfISbnx4(N%lSP8tSd at 1}DHi{y^;;O^B*pyOV#a+<zF<>KTYj`CIxv
z!@G-N5%iIG>|Srw<m*5+o2i at ycI)Tk<ZO^vX+vIGfBINmGps}0Kb+BMoWLJfSj7 at R
zVjW`f?Ew~=>|d`~%|8;-dc>9yu?XsCEV5WWXE;*ka*(*gDlcA3U%*RIi0L}6U)`Gh
zvqI?_Md09)iwl2&emWE;{)ZVhlM{oq7nu&v{&LIDs&GZPRC2uZqK6zd=Z20lLmSPf
zBFx({pbu)YEwsJ_-6z9H>21lF3TG_1Zu0|BE-zo!X%<~U`uMoRe$&Qa-jaNykplmk
z!MYRgyJ<X>(tw4#&YfBP;$YH}^9OuodDWMV-CW7#7_@(-C6}`HY8Xlceq^k?AK{=U
zw;3h+gDvp?;@1+MiU*e;Nl+^PG_0LL${CkWZjSiG$_<vxQ?u!RfYxwXhFVwS&n6ZU
zIuZwDGHoU?Oi|QWEQE5#_Uq(BP4vOKWPe)!skGPz(cgUSVfdrhWr<qj+f^i;2emLw
z2Mgr at e`0 at VY#rN)-Qiw9_r9LihiU{+2lPk=%{$fcB#A+tg-<@|j1!S2rXY}d;daSY
zLcUc{ClUOkbJ{*TxD9(7R}<IuuqWY>x`d!PWYR#&T4(rV!iLEXEJRu_?mF at l?<;Z<
zdBTT>DvT(e(a^7#p-Z|wrLo<9rCh7NVJ(##&)R=<qb3GFx$Ern!0$o*CIgRK)v}@_
zj0T(`h}F3mAqSL|FkMTUp%VZkb5ECo_%hbxM#vK0&huJXl1P9F|3S-~<Q)cwku5P5
zG47=aqt6Xw^Ed{>QyGq(v6R(VDgyLzH3&z7rC0n=sA&`(!XRzXH`43KI>lDNtlxpp
zJFI_PY84m#!fPq5#^LQrZa~V@@bb$_sGeM7Wm%Qf!mL0aF{RoV{7rl-)hEWK%|(lQ
z_O&L1J${F?hq*?wv*>RQ*aovHMj?b}$xeZUUSWJ+V?GmK)FFWzpH@<wObYbDIupNh
ze*B8Xi;V~pLHJU?a{~Q%f}n at xfcI_fKahWFNNbtB-%_c!{%sPfzH;M)M3AcLk-;9r
zJ**LOFl!afNUw8ayJvQON?AUjQ*HQ05-Y2^gJK9 at W;`OTIA6IGFan>;qPhy-yCBDG
zbf at j0Q(Vs*l&H0MqB<PA?lE&>6?Y<z@=JvAR?pmYI8DygXvEdC|BiW&UB9cYYA}C^
z^^PMmvZT3M6;^nRT`YXkZP6?(Ij%Rq`V>FzK!{B9A?#)x^0ELS<DQ$(w`yfwI-$th
z{b3xNC_&{O{j6}bk*f)YZi5n{hjp0{Jb7M`L@;s}a)|i$uc4WJHUPhfO90Mte^b&$
zkl~(K34LQD1|2}u0O{mX54jy9ZAX7Q^ddW+1Y5c?dRy*cn+r;&NF1RoSlhhqDUZ0N
z9$p4UkB-urW}r~%TMDvuq%Uy6QsQ;*&{5X%bTUqr)3v~C<sahZ3w`DGST2c~=3dwz
zI11hD;{f_XNGnlc_30uww`E5cUB%VZe5o)7%gvZXY>#*0PGm8W4PGW>XgGhawBDQu
zsy?5Mh={~bQkD!Vu>PihGoqMdxX7k<t~Gy!<QMwf21XgCT?3N%#~>=7H`*r|ntL7f
z<DQk at _H#c#Z2XAkD&x~LwGjm)REuyou<Yt at vuFgArYe|YazYw-+J2O+8r_&j?c5I1
zo9cV|0Pk3H=DezA)FOHcC-#3&toZuk)kQK<3Qv9 at b(eu%)fKXLx{St9o5a&gD<DZi
zQ)?8$)__4&>T>*HKjq$4_FYt<m}OQNBgaJS|9eAcfE!bAP1$=YpQJ;;@&N1yA?!);
zVQ#&}x=eGA={i=`GLw$SGK`tLnkWLV?Kj<62{jxIUhYe%S(#Yyzi)rK35lB-sI`f{
zb8Ddq5kB`BGZ+%3+>xS>ZLs`lJ#oSJ%W92HDq#{t9cNhVl8*8}JtpQim0ASNNebTW
zhy+^~<TW>$Yr3$0Gmi;bmm3%NWcUwuWSOM2u~wk0dN?*Y9yXAIQ_$$-qQnJROz+Y7
zxfJf7(eu_~+Ow_k4&;Axl>=N{Z-oXU3UC~GGAnbkus0Lam?vG=(G8Nn4ak8r>q3q5
zC|sz%QqYIAl9;uaL6N=bRyT^|hqtL-i|xq40AbI7d~g?>QY2noclXzSu4}M#Cu$Z3
z6{9Et=2wHVq!5y2jsoxPIwST?t#aWGzYhDS|A3v+UvCoLs&0Q0mi2$YL`E~SkCf&9
z1`0sYjURoP9j9G^<7LQkAoSG4_f;cCD)gZXQ~-*Kp%sS4`MpH44?SnC`M%Ei@;ap{
zQhBX at AFNFaWH3P5S@N$H!SHrZ3=uh-#|Q0!OPpXrf=iM&Q7~hx<i5pZTYvI9yHew!
zm#rd9_kC)r3Zj2otf(DSnOpd`0Nj|YC?t>BWZ!0Xdk}xfM}s*}Fe61_mKq{8<+R6q
zBFLAIk2%01s-Xh>V~I6$of(pX-)yX(4z?e@)u#K`+y&2+Y(Zmxi<I0FHA;$Dfl<&A
zwlZFKtJb+OQ(mI?mMp8Sf_$HgPvKXdh`ssi{#rXU7uA2L83ocC>1td^u%kWecZ^mA
zA>>?^Z%m-7oQ5bB$Xu>7F#Q>yj$M}Svn7 at +=IBP|QqxO=OE4y8^+M;Nns1q}>7F=U
zbrG3A<3f`ZXj0*qAJB>uj_Q@<8X#dXs!?KYP`A at q)+Ni`{{%lt at QxPY8ZQ!@svd5e
zGszC~+<ku?EPyTDg#A3FDTF5=f4N^%r1OPz5(xznEn=-A#@IP&l2MkUQr5KRh3Bw~
z(=uZLe at WVTk4$B<TfyylJduM#GD0B0s{S0XOqm2h*dE3a1v|&2!8)a9+w!}{ta&zp
z;MUBa8qMezd7&ECi)xj}DB67oyal;3mmb>h)(C%1Lb_7Wk9w}k{$es%05e=zMt1`J
zzS at B1{zOn&L3%*xJa`Pc_*%~`yV;YO?-)#(<Kzt-b}2^XcLa)eFlFu7(Je;2ufEA}
zUnS=BNeVE3>sh|3udV@>C2YNOxFRPsexCH$Z7-u1w`IdZrajzEB-k)Fm5j2<11G)!
zBLII1iy_r8tHr=*BrwLCI+n at GUc*=MegG0a*AfC{<V62xHj#@(RF!OKMlgDOLUfbp
zi4p2uza$z0U0PumD8Tteiqx$rPA5iA?lGHbh(qf{2!cjp8n`w!nY<$Je<P*%3hi at 7
zkV9!mPlc(V#kO+q({A%AvzpAbXl~@QYO;T}f1WZ)S4LL>tGfaqsfmer%^)1D6kzP<
zV<XRvk#fF4c`#SBgaS~@$Jfw%TpX-Pv(gElW4l5FR at Te4R8!S95`C at yXai8Qk=HP;
zqM>iC!8BFUEwETP?}QvIPwptiJ)ipJIsplDEi;G}V+>hn_Ws7JH1pqc!)-(Lr_g`M
z*CxRquw$nwwOlpnE!>QGTtBxO%w=07*>hm3ySwrdp6vS8Pne<amb>Sjfj#Wh08w|9
z&K>Gw{~&p_2DQL(2?`Qm9z%{P>Xx}DL*yDp7zl#AbSh-A<?BJh_Moutk9S1(?wR8m
zAx at 3@v~lRqj;&tk2 at 8Sn;o;0osrY{&8U#z>%_q%mg!)u&_i2*4nK-Wr3GL6wXUe6~
z59c6QMD7}eqEmmjPpSvIOm_DTUMUr9O2mO#eFC+E9uq5`ym|r8zJ)$FPozGLOU32X
z?-j>vKT9nr+YQAr3b=IRKYj3Xsw6052&jYS3jMXB9*z4iHXS3r;Qyh^Hk*H4`)Q!w
z&zsR&X<TGR3bsLU6XTq#sNx2w1M&@4J)%2DAikJETNN+c2`}^Vi}Lh)D%!|i_f35>
zE^AFipDy`fRIpi}1)9P+I8%4J_g%xqP+8Vhw#D#HLu2(-VLh8 at gp{Ud&=kE(z+EYr
z;i)S$c7=y5lu(xzu}(SiPFjD at Qz;lOGyFm$rCTI+{GE9B<%OTc at 5bU;|5fMPCr~@3
zGW*k4S&~`V9yPK}`%)c6D^V>ohx-$~9=TLCb*Qf$qS$h+mG_T2ds~N3j5ElYw6NdZ
zULjwo2dZk8xU2xafb2%D+1P`kSlN}!`76 at LG81rHAbzO)r?dN{7ngs`)J8B(p+(PK
zGr(>V#IL*dbc!NFtIpvF`V!=#@?7J6-*J&CH()KPIk`9rv)Ne`*73&JAXJN0N@!bF
z_iZCBF=Wb&RgaaN|24HD6<|G3HZV?fq`hcM<aAc&ExrdNxLNA>ZY&Cb2P<O<KraIY
z at AL#ib at lOB2=l}lJkEbOC*qu`SiUdIp{L1q?zkTRosRM_55)N;Zm2}WlYVHYeK^Rr
zIJP-c83^soC;wwapbc$*jzhfw&YE`shybTmd){LHxa^el3VjzwPic at HA<<#J6^r?I
zS#BeE6~3Omnw&toh_HWTVb>+|rA!5RH+4b%Etx5jVU*d1cA0-5KTP_i&s(oQHVmx;
ze3-*PDFHilh$MLyvz;7`5KM#{=vo5lKD1 at xn(=x0jLvx%@B9<P$_Wl4t&4A&6Kwr7
z`^;#<_SdMj<DY1yxJ4xT4sS{Hn$kqflY<ibSxMl30DYQm6uwW>cYcc$_B{$Osj~pO
zbNlIWcIDQ&HN1b(4a0?dvWLsj%npQJP!N<gA7%if%cW`F3+o^~N2;=N at OxA9i4jWL
zdIQ=&1K4<!V$nDWu4 at 1NmNn)2ZMQ9i(;;4u5L at Qk+nyuE?osMdSbpV2A$CxFJE$8o
z=<fc(X9?H$6^?SB4EePwSHu$GEC$F(FiybB7UJ*mNzH%Hc4PK$T>uj>Z>aF)>SlDW
z;Z3RXdEp}Z&6OrFHn&88Gb?e3TH++G5QuhbOU=oVrf|@eA)jvf at M*<6#Yegr4*ST3
z<;9M(Cv{vmk`lx+00Q2~I5kGLuQ%=m1<0)7;TK{s8J3|2cJJO$STpZd-~Jw-csmVV
z`SxG9yjg#CI?1gYCJau2iw*@?uA42<KM(PA39J3KR;s0U5t;pta7PEGz*o3PCf>P?
zD1Az5h4^6N(#xmN_a%L<e7yNl*}ElX+8 at zAwtx;8=eD-%+0M%zUwZ}*=J#}ypXt67
zDUK?(IEN)N9gF2B4}qgLP?A-y+nGfE#^u at sS$uyP!FjOAqCG2YSNJ(?b<oEnn)`1Q
z5-IDxNhuAnan#36N4{1<hB*KR2?U>mv^<c2cEq#MHiUagGaItXpI2`yjSY6ymEdIn
z9>@LaB!0FIDjc9MIVm=9aNE*3FD_y?&QguYcyv4;^tJ$FmF&xh46701+!yZ-&T!{!
zo<e`0{gNz`d?7)UJ9=t29M?X2s%?j<Ex|3{6Y*-`eue%g06)&Hjy{t7b%W4vkyZVx
zaud>Gn5|IWx>n%wxO}vqT1#7r98qf!utlo at r-B%CI~(@7*yg4pE7}eDMX)+K>(B^V
ziUJFweUKe6<M3Y$E4oJ%5|XaGmUM;4QBZ%V49>5QrFjwe|5gLjyr0%0!L=W_$T?#`
zi9CGIHjkm70}bCljr1CyI}LHO;Q4(MFD!*%7TiJIfkQM9#l+xYFQW%}ALV1bZ<MF}
zX}13srtsO-N1WysA5$&V)lRT;P-J%4pc4!y;`$&60T~4e^~LL!J$?<|;~6J^_C0 at x
z_8mqWn5jHwuI<G+#pARTREa_!lXaSwU|zY!FWkeN0E(=&t#A at UV3M!@rzX3n$Tt)`
zWDf0z;wa|%*eJ)I4GwH}WDe5`e{?xY{tG-91z#2&{AUMWJPZo55 at 5Z95Ty>K7Eno2
z=TP10+S5QT_qV~8ndcMK4RiXM<Pm=o3iz6~`DOh5#kBaDYPT9}MeJd7Vu-JQ7(Lg4
zz)>O<;$uY$A)C5Y3(o&iqOody;>v1_sxd?r-VMNd&_36q!Cn at sM?l5}EWEFPH6$%<
z5S7MEFldG|^Cq*t_#GdkqadD&RH_#JR~~(3)<UKqUr*1g_Aml>wU=5Nf*^lOeKEfB
zT<hY~vRxD#tO#V5iTBs4o!8@=S(}8|KtaJJM?Wu84<Ru23<4c4_}{cRk}i2?JDo~9
zK=0uVUxUqT@)nbWhnT0eb-6^bB+I#bd7hVjC0ZA*=K<nF;7gYw`i-gZD7%1Ty6irJ
z`>GwF-0P0@@2id|GN(jp(z1Vnr6-M3=a2vo<nO;Ho=3atM1By))n0rIKeWaSCPIX$
zP=?l`6W}QE4f~aT{fpGT(~Fx#Lm)|wfIN_He9l=v=@FVb9;Cwyx~a;3*Hr`5h(`W!
zWleP5(SaY&%jqR={9GFdyhDwbe<dDRg-j|}uFW&GkCdW`F7amWYczihiB8NFN3~1)
zI&HJFJV&Co?}|gqSgbkiQ#0d$1W4v~;G{Re!UYfeCvnm%29K5nc>-r at h)ixejK<In
zu at od9MMDBqqB!f2<xgl>tC|y8qc1<{&1Hy2x!pM|T?lR-uE&?rXM-^@x*~$2B#9Pf
zOlETw5PepSU<;L`fTVw>VTr?K5!ne4m3P%P69w6XE0QGq5_^ecx6Yi;8nUg|_jTPz
zXXHi&OXlJnBjf_HrYh}Z4S2_QW~}fM#5wnjR17o-824jsVuD%;1B=km<L-G#ft?~`
zI4&u?+l&EYqHeSbJZ2NKgxrA8xRKn;I`hycNWc&R4+cmn6C8i)L>+l|<OJN@(B`fy
z?!{Sf(Tl{g0z=oM{&`vvH`c+f*h?F~0}bHXi{>!4jU#@+FzRlNpT1L)+J9br2qXbT
z7=UtdbJ%{F-yiaDvW4g5#mq=r$f42*Fm=Bjh#(aTfAb-^L=wS&7j1iOINc)`iN^@{
z;xcwMry_$d%3OclV$P{%(f{6zNCJEtcsAb%8p&o9%=vVW_bz)13ojC(g_h}nPXE(|
zMOybT4oPhS9HEUqcD=&!pa~oI4~{dXx?=~mUt1+oOLqlZa#w}&r}V$(_Jm^)P5ax$
z<-4c6VZY(y-Fk27tI`r^v)>!a*df&*UNRrSYlh-GUA}+Nm%hi*B-?<mLN%S#PAm4;
zh;!58k_7owBCyuV%nX>bPOPPm5d!RqE68XkejBe7YZge;;iBlHFRLVA2Q-d?>k^FH
zjpx0FYl;n<x`*loBJ8x1k$%UY*v@<y;oh^YsL{nP&gs$1+)`TX5=*t8-*?)mZsQ3&
zrfd)Em5hHuf9EZuDj at Nr8A0o@H(NKU&&tL4iLZ8z-n6&YA(zl(kE13-&~Lz2*#l$j
zdO7>UOl?3mGMJBDQ@`XwtqH1JfzpsgoWMJnDq}XSgN$S?bJI#p$Wbe<fvI&-UnrJ#
z4l}{ig*dYCTntFsft08a^x0DY3Zh4R@<y&Dj7ooh9{Q#*4D0hQ($i}X(1zh+;>wGY
zu!VkAw)(!F)m{UUG3VFkdGjqPG~>fR=A>8=)(V(#U=kN~dLH;OSHF9ubo;f5z?u$#
zK-y3jJ!>5TeCS6Zb|Np9w951$56EqCf%6Ma)dFRG5*z_aC)3bN4<aDeDlnr<Us#8X
zgd=}>Cp-y4tXwA6&MNp(f;TqxdT9qpugYEjq^IJ}kg_?cwvY{M+ZXo!bYaij0`l$s
z3m#qi$~G8}Jz at Mk?HVgU=mGj8jO|Gna~D*Se_32B%z;?8!~P~WuF)K8<(#X|E7_-U
z57H3=C at sH;my72QGlkEV4TQ`B%wpMM>$HEC%6;ip*Yy*30nrm~s{H7g?x;q+CEr~1
zoJ!O#e2 at r_-#w5TwOcNzyiENk{=rJf$N3Bvu7iRr42uu at rwaZ)e`9jke{}m?tZ-Yw
zs3$lFY4`@{Q%qzfP`_0z60SKr at 3Q!o`{Vx-{dpi`3wZB{IWp(;lMYr-EY51=9c_Ql
zm+r$^rIqq&znY)<nea5O6bm;Pu?&I7HX9tNdO^!+Qb!oWx^FhtcTNo`0}njb?IYuy
zfah9{9DH~z9UMBsNA&xiQ+9>QkJxziZpfYg$|T#7NRw(lgZid2Gf>n4gtsFgsKe<t
zqMz6TXBI(mukp?j5*`|Y{?rE{#sYs}cwNx2qsxZY3S;UZSqvpCm%fmDa$N at way2W?
zTEGK%fnDfC`dY}y#uFL;ub^=|mQ-{B=IkD9WC;1N9bZbBx?H7a;QZ+{raqW-pKK`f
z7e1+fH5}KE!L~{9gBHk%h at T7wpI&u92oB%z at nk+>UM<-Db1u9}8X=_si4uPcHD^k1
z&@telYIJh#_)Sd$Csy^Mo;NHqUB29_s|dm51BkON3+Yw7GkzeeZG3ZiYK4G|;;IDw
zMlp6OZ|cI!az(kJx0Kb<p)QJxt+Q0C9L69$&#geSHz%3>buJ9$-%0yp*-6y9C~ggK
z(fn-{KqDyo9-gbSR&cLmn9zTn<pZU}{ivX?*IEXCjv at Y+gQ_NaB<Fke%+1;u@~%lk
z9WHhZ^Ic2x`?mxr+LniCBUm?4Kl9-`v=oKn4C=mHxJ`j+I&ljQ0fa6_t1aZc2b9Fe
z)qN1<;Tk-O&sJ92!DbYY!C6W+D?kWT<Q#fhU6k_ILzUpC8r9#n%MgDyOg1+r&-(Hb
zV!sX)%@42xB3&>WN=5_I+92ipVy{d)zoR727u>n)V*;7Vr317B`U21hJ%;|ks at zp*
z<;lU3|Lf0z;X_B#@~4fhK5T8L$4kTS6*<4!5FJ%1H1rs5*6DbjLFPP+Dx+K}a(d7v
zeoW;idMfP_(gS*g$RB?vlHb>_&t;8tChi|blgoC&Gy>lil$Stg2_}-6luUjy29EdX
zGyC1~W8nV at TZaBJsgg@She(+*4-iu*%KOxH8Z*%Cw3V7De&~HK%qd%u^?sC=?6|r}
z3oRAV(%&z$zQWbgZ#^)H>8p>@lwNMW2Lj4YePjv?o0j}2iOGLg=e^~F`4#z$NC5N9
z3Oq^eejL567P9APuq!2?<v}p#|H7U at A>VTeIzWiYcmkOWRqH<pQ=o79!S3r-FV!M?
z&7NIS%JkQ3e|lRo>Bx2U&qu~gWF^rVOZWh|a{ogx&$rBFQ^U^Q6)oQ~E{77Xt{H(0
zP;#BKZu!%r8f$;=kC}iAWikN=V at kaSsrPu#1Zl^u1Z#WwhS5-p1t+Q1#~-lFNWG^8
z+kZ`xnOM#go2d*jlVITK$)yAO)9-+*i7H(?rdN<Gb_#bMZK=geOD?26=T7IHc*NsA
zO*1mFo2%WmX^3pazvVXgrIM~ICNf7D*llapkW|{&)Te)czf at Ay21=*ywaJ8FgCc1@
z7O7sIT8rZ at Y&2JZ?PVno7_`0uGQQe2aF|%VCUeP0JFV+P5MG8eSluR~1yn2UrVR10
z`>j0>;V$S*^o4q~5VY=L7js_>Tm>xpB!EU2P5)x3lb3!S<vtCrv2stTgi$U&oM_BY
zA^r^>^M!v$ezgbk0JT}aJr*b-^JKJ8P<7$|^mJo82Wd1i)X<slBycbvzi#9K)clrn
zBrrWtT5_UFBYRAte7PAqyZhqx>(;04IKt23a at AC}_-Eyxyr`d%<EChTDW??(mhmub
zU^E32+z~8g3Kt#GlpA^DlXV+;`LD`N1=}G>#Ug*EAqfWEb$Sf2JEzMao0DD=;OB=B
zdy9jiu2a&|CcP=Y;K?qbBt4W1e<3U5Q_?=xARghGvSg%m%Voz9Yn`a~pFC_aeo91h
zht*&af%(n$1Fno(OoYc4=qPQN*kO{|MqycPxC)Si(pmZ*QNi)#+%yN at Viy(|Hr8?&
ztayJ`U!Ti%8+ztuVobAh$pzxQoLTEK&YZ)@4J$?>ske9XkvNoyV!W=ufmHAR$;;y^
zieOiowUiJT#<nNMgbS-FhL7fD33T&4y^!6*yqE&kS-~<CA}!B<!stg4b$%QSaM at Cz
ztvjv8P$=#qS2B7#v<%7jkG09ny(#GwgK~ezj(q#^X{^M<6!M!7huwHYE(bFVNfZFC
z>vy(*!J=|Uuc!A>evbM1y1v7cnxz_+5?7A!=oOQ028sqP at KMA&!vkkl?S_5bsOt3!
zK&yg2s(j at 7(!LAPEh5LjERO+ at xp+>cBz;9t47K7<Fe$h^BFE4#r=i9&P<Txc4SIi+
zREza2#Y__*cw4*kWKL$#!)2;i)$Tp5g;8vz=sLZ84~YWdTNL!Q3YZE41-m_kpP8RY
zTuaV9aw2f6L&3`eL6?OxzBa!~vR-S4S*aB;tWNq~ZtAGY6#Ym)VmCZ__!R7QiPq?9
zXk1y^<)XRTA_r}U#t`MfC_tNIoTz_MERJ$Ma4igo at DjN6g`aDhfoe=o6Fl`doh|I2
zSIWtER7CJs5gBFEjznUXCfXfV$*tW!N+cyxgK?H<zByhk|0SzA;c at fqMR5vzAU!c+
z_>W1`G1bu4+1HhlWB$aucFQ&~s#PV#O!U;o*<}1(W2{=F8-(ptK;YwaV2FQWnzOs=
ztJuSJtPe0&#0oVDGcvnHbD5WJL+3f at 4K!aQyAPhWb%z_|p}a#I2O!p?pQIBAA2#4R
z<4z{GVW31<hc18DNMka2d3h4SGLh{`ijxDdUXbz@?*KVDoSVMmltGK#gD0X1^E)Ns
zVO^QZV)NC;&HN&i8+-BJ0^onK*@VY%lId=n<)+XonwG---NIi%2TZv6M@`s#0Lxj_
z8<BBlW}9TKf`fiuEy23$ZK&X^OVwb$rtT=BttKxxQ;Mp8VUHJIJTx7>Kwfw8f4j9b
z*rwzr!u9W?Eu3YscKggE)zxi~<b1=;<D&wf$Vy$-bc*q<#UiAq2akV)+^8BwWAK^g
z1TqYGDzm=in~e^Ltn(x>G2JC~DI{~+`gbbS8Gp~%Pe<w#ZC8Ije%nl5ysQV$-LpAD
zg`SBe=gAaryo95t5-lQODF4ZR@*fXi3{}hu at RL0GoB=VdDuu)j)VeW!mvG+Uk?$li
zbaNKz7y25``Z%gJ=Lvtp3oz2c96p?n7hxyo6%LeBeuE2X^(E%mfJ2#gC~V at c-O)PI
zhK0BBKBQ-9x5yrty%5az)3x~+^oQv1(PFx6qIouymG`En&5Bj2xKPrRzVX%t#!yc%
z_wj2ny&;|hL|z1^^YeQ8b8Wb$lP$F_1<-V6z=o;FAGGjMJAHo)dWs;KA1ubBDW)Fb
zUZwz at VnrP&vT}BW8;T5BhtDC?Jbo*E1stB~P>M!%=o4%4%RwAO^#1~rgR0suyJP(g
zil(^=flEf%B50R=XG;PRN)enW+`u+qBay}yb at qR=69itDyU2i<r5jnkj<z;iLaoh{
ztm8yhBC!v|Kqr5 at p+?oJy_oI$5%a4ggeuz4FY(*Vu21hRHNn~6pf~1aDB<d{>v3H<
z0qE6FkwnmQc?9E at I-lyS!%t8IGZR8|UYToc`!2yLAym?HZV#jy0U=m-Nx#!H&zTiA
zO3XN1+y-&Zjr9!CaIF4s4iDYeQshHXzr7<0>q6O1*RX$SW<ECQGH-PW;-=>jJ at NhE
zi#;Gt)}WJ!m&s;45USA>ILb42Q)+w#m%mZ0dN$&Itz+JnmeH9a7N);e(IJ;shXH%~
ztmM73e31T?r}Tz at noNO4E_-+B;UlJedK*(6dUhkrKb_X9yi`|Fni&Y$-_o6B5}X0N
zCGYi>={bK=^^u6{pt9)qxN=8qveUDXK(sR9u(y%s49}gWuBtbI%Ueh0?S3qOMqR`4
zzTJm3A(M}8&?ZpRX%M1U)8OjwjXw!<+;VV+&r$goE_qE}{|l)Vz at rPZKc8PWsV%$k
z#>b=pd!bA_4TavY6K at W(KTmyyWugs4v~9O>BuIZ2ENeTlz5>Ji7kex<UbKS%0&FWr
z8+$Y{jh4`WyJD@>qLTykJ7~Z4u50Jc=L^G}cJY}Aei&d3GP&YB4#(^X9)rf+{%5TY
zWu-}-dNA`|@j$Z73B2L!@yfTC8Rb`+SH#X~aeQLQ{7aoE(hR2GPC9;eB2GA#GK+GH
z8i9X?Fi&+6g)I=NCLDOa*Z?21^SoD5-LR_UiIpP1Wh#t4v1v$;m?_PyBiG`g!54`}
z9x0E1u$(gFS at kOT$bILHjMwB#N?V7s3g at hH+4HrQa3}St;c~Ji5aD9|cSoCVAMRH?
zJYcZM>p~0Y*%9sRkYL6T)ciCk+W~YXDOZ2+cjugR=I1b{$?){zUCI%8k2sqE)|U*+
zG?Wo?oj350g7dyQ3Uvvi>8siqhXg`YdEoIa-srgc1A%75E*=h at JfRjb<7xaZ&<X@$
zM6B`{GMmS}&k+QR2jUO?RHbouf>&-o{Bu9A^cc)m<pMoc>TVJ3Tq`Y^Z_h&#7R-Ni
z49j1YpC?{2U3^>>PrF6n52`Qz`AqvFU+uiT2C3oQlXSX?$9M!L2J}KuZD at LJjU&Vf
z3T<NNFbV>&i7G`C=&(6e2<SUebqOG3e at 9Kg&gJh0jEt%!<pI7$uBy$Uv9fe*$h at ey
zv$;MFabw~DBl(K;*8F=scCr5A(FT7oHBsgKT_)0C;hr8XW1H1?(P5=EUfCCOjPm)>
zlG-O3v;#d0r);di0E8Oz_G|8~h-mY;fc3Ro==POmTASbHElcE(kCsLEgWdxqxAd7C
zYJ--kJoGcL&92-o_HK9I7$0p*%fn;}Xs$G_R+>8n$wa(gnJ&6IdsaOML~nmi&uMob
zW~{gQ*m7|o6f{b2lZjqW1f>EE=b!I5!pnZV!Js<{C-GLqN_1_BZbWeD6U7f!8FJ97
z)?B+D2uu0J??vw8BVs_8Z=f-vNkazQ|0QnpdVhhQv at q?;oLL_m#p2lhX63dJ0=LL)
z&cC?udg?wmlrcq6qc&t-xu$=wUYFRDY#<E)5N+t|GQS9%t71cwe=?DOG8+ at 2e*{4+
zXcKk-lO)64ai3|U=5ON&1#O at r+vra>%}-=O at at8lV~14!5)8Tsn1(3;oinoS+6K4y
z{&Mg%xxHaxhv<F<X@|>DWMI&dTLXh$SK$+IaMzsO_%dsr=467Quk3%p>&#iU6vuH~
zy_u~xjuLdOb6RYe#KdD-ooa(E?koVfz^;lM_oB*!DV14VinQta`Ld1~wJLRvVg?bS
z3Y0FfQIcrw^h01ak?Scusz+Lw(v8>_YsG&l=t6<KVf+1h6#>5Kx+zOGX*Vl|v3f6<
z!{yain-FSdAfYM(2Wo!}FWvQ&DLpZr@(3RgqMCTQLKa<=q!Qs$=~l!;(gI>v_-fuB
z!jAg{j>M%5AyB>fmiuOxDuFrmzOn`la!LzmYqLJo-;31ydFc@?*q(%{I)occ!<H9+
zp;D{9h?%K+Cc1FI$IN}}(aCgg&=ZB}R+_DRT>W$s$S?}pnh<}e^8Y^dur1AjWA$29
zMFug8=m(6&3HS~&I=Vs6zT%?(7zI!R!sO+%0H4KuBdUr(&wRyhbYh)KnK_KTe;04h
zs9KCo4`mCQqTk!nkpAjZ+Wex6G(6BDZf$8rM4C%~NG3xiir1wlOkG#q|EK!gDl{UL
z8Pl`dIyfVGe}aGdx`Xtv!*8)a=!+Ts2`FN;e^u^=oh<@l at i%|JEV(Ej-wS&t6G;Y2
zomK{y&~UV$**TO4!Yv036O4>Ni$Z!;N(75%k}<LVs4E>xL7-1BnC*Q%BKoePI=+d%
z)RqE08JDew!&-M0LwMI|(A7-|*FO~~SWUGxq`iLXns0yX&%E{;%32L1$ZW!i%Wq+5
z(j{|6pv^A7!A6cqy`iJceJJQnkTdC%7L8&|E(oPmbDS4$onX&02*5kor0$#&93wf6
zzTzW+K5;HW(lExCkKI)<V{xJeSnd)gi+=yuyWjGjzXNc}y9!OT%X0)Ef={q3HIEN-
zJ8ifsFgbtDF;uw)dhXn^ZykMI5;wCPXm$I|i1&InkQX at dN3H4!#-4eoWQYPA*yDT&
z6=+1?OME_tdFA<<qR9XV7TD*wa&xyzO?EgXjRK$khi6*OwOfR!Id7;$%vO$(J?>1(
z3DXM3Bd#4Iw>ZT7I5&GxegCh*+0F}sPs`wK?%jW=Y?~9%;Q$whNN#HQM_Q5}OzR3j
zKAEbN^be1=qJE6a?0=_BETxfj-8_Fa>N}vhnmH)$2Vl0$yPPn2M1tQKFz&YNxV)$1
zFy`&kzB$Zs|JL}={he+ at _+x*l2t9dsKSM(ddl3(bksbjvCT{e9;8n9*1nTzrWC8c5
z5-EQVr}Bl0a4 at bs@S at yiZ!6YL(*LN4VZXAP77JG+7j2K@;YctYT8jXlUghkhUTgB)
z47gav?cG at uO5-M03wl%pQD6{I5^zUVMdjb>F^s>vu)OrdQ^cO7^Pk&C_?EQ7wO)6Y
zX@$>7LnSk$t&V+}{ov*RE<Y33<nn%QfBS!3`HVpy#2!mq#puUb_<8vF2R);_f!)~p
zHqCn{50g4PpIUsZFw}$HZicxFmiyc+TG?^+YXLV8ael)ot#OXUaJEx=fm`N-O}N<H
zol9U>D9v(@X_k9;9&5#T-Fj~|(lrycULw9<Sb?&@rIgxkZKo?1e}m^4TUY$C?;L+{
z%MQK9aLkUZT{xm}f(hz<enm3LY`G;?e|h?XH!}G5ZK}s(pz=<wCCy(YBRMI+-DIG}
z4HcVhJd9tVK6F85b0())A{K<LB$34~GzueQRH)y3n(TaWn1io9oQrcUd?df{^GvZr
zxvw$|jsH5uKTCyojX*=&?Lsx|0;YcyT&<xv@#iP<*Zp5az%bzwm}5U{XX?f|ew_G7
zWDXE29eT5GRWV2fqF~92P!Ar?@^LR%-9`XPByfuFK?T8UhxispV9=K=8W^6GQG+8c
zVrU&mbj}q&wJB>L;kU$CNDS9h`1lwWlnW6NQN9-JD1x|Ddv9HLf(qNpM)rS7DJ%_Z
zX;Zf?S%VFZbEU=XEaWNvv;%Is#jq1j6^VpCvM|sb-+qaHt)@#z1T{nH4;-_Kml@=^
zvOmpj>$5ymrwARJ>luV?)uORBFP^b#CkSk<f=O01Xq7qLmJYl(LOee6)7T_0OW+jC
zQUMfM!Ivtlsu}C&`cJ at zLD_$y`GeyMRTYFfx}LD~im6qpnp}bte<`n63X2S}WPbU7
z6h2Lva}J`wdAXxn^k<#Vm6`|ywlXLa<%3bi`{EgtzELC#$?CYyzsQ>HX>fLFNH<Yl
zTRMI2zL9pM65;Wv&!SHNX4)E`QqI)hfnLGAzJZrFk9_!VDoGxJ2;zUNJTeoo*|m0s
zkq8o1WV?5Pw;LMP<!>k(m2b4RbfPNru|Y(3$ki8MEN&^COGS**KykFYB)4Djb18vY
zPh&TgQ!Ffek(=q(@yamX5wal9q+NypLf*z{GX-mAakm$2cm+p}m*02^lGp`dX55w9
z774=9*vjly*9J+tT-JYh(RhhI*#nOl!f`je?F^KCFgTuN3>t)i5NtmtpTI<ZCR7E0
z-km4lgZ#gJByYp`?0(yn7i>bO&Ym5>3e(pi{8xt7GEpM>Y>bj{NSZ`s^fugHj_u6t
zL*1<c{Xq--B9>?vpfG^y|7#SxALt6K#V2*cuEY^RQ0_JjLW+MZJlEjZ1ZdGG?E`Kw
zy`5v}y2J$8dNZ$ZU@&Q4kVdpD36o!F??f2$X%@q^D^~J<)`}}ENnf&0AYW%k>G7UZ
z65`eOcWANj4TailcE$In+ZkCJADA3w!dKzJIw(Wz=_C)2JS;YK9CDB>S!UjZAvl^A
z4A=$WZYbUhpx%Fl<4$ov6e>~MbE#_7k%y7pH-R?9 at EaS`00Th$zg&IUDl>uGL#)5>
zGD&u|AMAXNZFgFMx~&%%ilV7+j_eIrbP~{?W`0{4Fy#E%QEM1{=99Uyhhro!WmfkQ
z9Rz<V at j`mN<baccO3tqH)S!MQ5Ua>yxC~}wKsEgbj&leLt-AbwHa^2|RElFP|IK$n
z04ZdBO#1Zh!_v&ZRMl5XR3m$(rN>C3gbXxPp^JG{Yi^AlxG#C8!2@;m?rcc*y%k7~
ziZa0Sq7>j<LZSR$_L~*FmfQgfqC~k7{}UlNo at O0v)Adob@$abGD%Uwc4sGK$aKbdB
z!+GDhY?WxTvN_3r=l4ib2zX#213orkN!hm_ITf1Bp9TVCck0TarYNFzPPd at 4n?@{#
za?b#9KK-vA1XLlFTYA%_+7j#RMWg|;CiE2;#P!r`<;)rmqW}cwXe-VtM0T{E2r{M9
zgAeo^E0pl%`WC?*kLTD-mnPFhBm at qDZ#lIiI7;8(LUWyec>E#c03xie2$QkMLm_v(
z3S1DZ34z^&nHYGu5Bbs}EAsNP#$ImXIYB10zKHd-%<vttIeZt_rWAgS6qL%>dLZVv
z?52Zj at 87IU<iLL`&{=2qeanO7R`jtR)o9A~Npx$2C#QdCcf7);#+3qBma$t>C at Zg$
z^b5TFm^bNvgU8a;u9NGxh?Z#?Gb0+%z~pLVcw5 at I?4S{JOAOMIk$LhJlUhnw<zb(8
zY_39ZRP7tWmgNYgl(9wvy)e!RYap at MkDlyLs=wX|4-#hDMk&(K32Aa?p%pVu)(-^p
zF$`M$&lxdUYj&a;5hiIneL`_VIVRp3fk+BIWu9bz9e2PVPhBUd9*9{tm(^a}leU_p
z4eGd9taxw#vqM&AOV$DHsrbnjXlV1KmL<dBR9a03WZE9L3`MlTzvAN%6Z+axV{(51
zb85{-=MxQXII5qDH%86^i!a at vGNN8NQzUg7mJU5Qf~2PaYdBxrX87aXd?Hq;^An2f
z>Ktr;3*G-L!uBI9Zkt>oaK{vd`4%u?>}GV_hqs+N{5Xsw_9I+TP4B#nZuRG|;^W0-
z=HxU^K|p&2*j(~tK-h-6TXl7s=^`y&rWFHVZS?yJUa#Y20>fm<9rqcv<e$zZ+69U6
z=_7|(m4Tb^_YR4lu1zTYLU>fYm7udzwRXdQYzjm9)7(8EMQ8tZH+2*{G)BEfEG+1+
z^7vz+xvpOs_bQ2QBN?23>@~AHKD^)L;oJ_R3VlyyzwzmesR`194(Gm~D7Gu70ryom
z at 2njh*n3Do?sKB;JaYh?;*@qnM?>#jSKKb$<4w%6ZxgKvOFa_1T-NB^V?i?o=+B9N
z`8Jk#it;kT*0EoW>Sq{U;t at UO$&@LGxlrvj65irmT*)r#2M^L*3qRTEUd;$(joR7a
zos9B;$2sCRkee||tC9QCeq>-Vqk=5J=E?Ua(>4w|+5`=d@~8N`gbQV<EU1GF?HA*O
z!}fvvMe?&0!zTKp<x<l#N?yajZ6hpy at xU=Q^T`ad+j`1h-jXt#qLzSc>iss?PiQX5
zRt(>{Z|H{+wz&a1#s$fs*;(x+!kCu7{=4(P(2vV(`RAzE89_%T6>ZqYa%<i#`T?h+
z%S3Ye6JIt94HV-cBvHI5pd`q-2uuegrMv6;GW+M<ZT;}4R|9NLA&*7Few`$LzHn{a
zSvWO8{g%ASoShHa8&M-M5XyjW1|8h(-TQ;XoRy{Bk85VB6CNY*Wb;U}nG`AxG0lF}
z$&$D1&`-)#2RFqRZNte)r6j9+HX^zGhDIW-yK)W&OgkrXg1W?5MP*}0B6 at A%izgl0
zoDTZ>`XB!Ncea)f+Hyg&yJGi$xhbqL;rFkj{@O$<PIUrXdK~eaDG<)m(i->?Cou>p
ztzw7J*okK#sYj|tlo(oWf8?EiW`Z*iG==Aj(D(`dHx-w7hio(<kHrBsN~WUJIQae`
z^m<2w3*YdOwn2O1^TR93x#z7`u7)t*!EY6S2H}Nt9|W!(KTfOp*o^0Y-vy7Wgdi6M
zX- at ykWk=t$kY>2GV(rgeIGEO*q1eeiA8_*>4<_Q?vQYI$b#}d2Wcz`wPag5iMx`TI
z@>nDKBZ-&58)Nf{IM@&xO%MpCfHe$Q%h7CyEq*nm{al$*`!!uJ3!TRq5PEWHTK!6y
zX{c?&XzrQK>`*I6jeLrKu2}r#Z7;*PFEJ+eG{@qaR#SaVUm<}}+Zr at nC&otts5Nvg
zZd1N2&D10tdKr9<g$5VwQ!p8VX~E!h#r;xH;^lN<okeGMCGWN~_)rSfma^CS;F)Vj
zqYJZ9eZ-$K{5Gpq@{C4SqWjHSOf8-qd^5}V_?=Q{AW520PI<q7j|M&EeH6JpldgmT
z&I3w4lM~H$H^<8t(M6*1BOm9Ei>$=<2>fCPBD>K!7w_OT0mRMv<pV|GYl|bk=EQ_0
zd7FmuuKQyTJz|Yrol=?(fIU)BeXgUdZ0SPmym9zqbvPVyE_>G6lHiCg0C?jFkS4sv
zM+6uwmWK(}j)4__Tj~DqnqT#`1IhHM*yVWD7a4dgUN&u?#ld6HcY_!%w-&Plo at Z@f
z4CHM9TW`$4k*f3SG);!leIdbuyF>}+14D<@3}YBwosuy0`i4FJ>Bb!$F%VaV3Q2(p
zM5-o{Dj%@RjS%as=ULeGb*vH_)@f$vnI97C+M109#O08G@*IQv5d!aX7mC)B50Z5W
zFxv^wePInGCnGih|Be*n27-9RW+~<ndcw$skQYNg{V6_kVoT4`DwZs?iB(EBHt*j?
zENXjA1)$Eb+<)`Un_fTvgnsSmLeB?()LseE!3TSO(f at +oZD(CW=54nu*$#-$(K|{)
z<V at H3qFQKwnKvCf(@3kS!CDZm*oi+Vjy2apmFbQRQSdU&Rei-jFvzm(s0c=b#0tf>
z&$|YLlqmPu%Tm`mZMR|0(KVr*Bc)&U9vfIB!9fCYEREccqYk0yJ!6>F<+IS837)$x
zWdRFWDcDz|Z1YSpwIX+8^|MN>1#r#!ZOCP~C+7x#6TWbXx!3}isbxi($dida?|QC=
z=Pw3*V2~NtX~?+Bl?gzN+uy;e#5CVco0=E`S?%o`U=-|)eu~t4*Q*88g8Ff~m9CP)
z;jfOWXyj-;sajeH^w(<P3KyZq#!xoZBGnSSKO!^yO*dX+iww_hMqn(X(Rqat$e%uS
z94e82at2{@L~5BGi!Sr+i{;v?84t1c5LZA=%OLPKP60vb3zK11Fq&gQKHIyIIdy4~
z6R{_GjDB{c(Sq*o$f4O(3ZsQ;-H{!0i&zMoOBR9-k^B*<s`=F!RRykabUuPu&bo7I
zw)Q0^KmmZc{5pcb5e6TCjHDH$spR-mRv`9&G`Dn$xPt&Ufz%oK8<;n%1w(in-&Ebw
zc5>p4T@@*Ilv2w8uO709r>CAMwf8yO^keA4i{Z&Ap9LaTte at M>Ig)$SX&LuSLOU{w
zz%v^KF^F-BR5DKsBl_H#upOzp0!(Xvli|5fGMQUT&2Km$adn&N<*mkgekf>5eH{va
z0pP%*`xsYOYWs4(96LTuBxBN)$FhDQ<QanHmCxRpGYEcVW)scC6*_tN3E&UeD_UMm
zYCi(<6&T~@s!m+Ijw&pyu|r&wRSXiv+v*`e|0DE##|#V%*XcF2<zR78&Zg74(DmSv
z1(7W9Q<It+ntiFELB at rAsD^4lm^5R5%v{Dq#-&<-{ayo1%l>yJydv}qR7fBoGh2Cc
zYk-D8$i=woKO~^0X=RZ{@f4HkV5$8H*t~dvW_n$zA&C6TVTYe2=X@~~tckF(QBlTm
z*B0gAz2AX~o&j*RG))VO6`fJPSiYpVL3TQL7lK{Jq%CkO6JvJ%fQXrpphKB|vdP~z
zxmOWPVBz9Op)nuM3+hP`AUvz^R7tx at l8aVgB&&#ZSjTEwi;%`obl^D-X^!%a0ge-!
z3E<5eu8Kp};Zl(K$cX7raIrFp4)b%Zu>VnZBFkb1AEsk;v9BZT$+#z%HC?$v`3rS{
z43xe~P{pwKIIFxZ-5rQdtC}T$*s*lp&bYou-xXQ<4HFQ(N4b88XQ5~d7Xz#OJZL-<
zptT~gPL<2$BYnnOLRG6V<sY088LBD92&xURBI$xGl$J7g0Jp^GHW&l4Uy*W+;<>wj
zuOVAO>dZW6^*MMtKdkZLOdie18(SK4R%AT-yqvc>>~mH;T92ltgt`@fGmV`_0R2N}
zElgMaGBZu=L{$*QI-a)9ja9o^b+>nKoeQBHnA#!~uJvLnj}2*f4)RSyaBjm3`lcZ-
zM-~3uQcg?i9*Qo4J}bkusv>5#WBx6fQM=dIi4A-n1SKMYZZe!;>34D6?TB=2%Q~PN
zgTZ%65-T(QXh|r0zKU0WJfEmL-T&3`Q1F7kD87SznsB?4zZ1R&<@V%*cOgR}W5;Ee
zwOgLiX%?6$>3Yx0=M&aE@%_>tLdqBL+4ToGGd8Lhw`{z<^7K?X+BrZPw7FNMjna8p
z at 60$3J2Y(NAY|P0VK85>^QPMQ4%wbMB5aeIp+A(1e29t#&u2e>&|U=|+f=$~LG&uc
zb0NHvPcw}T6kr&drTt(W<#HgxOV8Qi50)0`BUfrrm%X#&27UNP1L__c3+nt7w3;$k
zRN#X$8|+D7VLA`ro1+b22JbnwXJ at 0a#9xB(>&(N+hyooal at d*pg8~{|*xK;Cv^~HS
z{(}?dwbN at ze+>P9JGj+<Ipl{c$1E`BTr<l?5PG=|J?0A*q+z*M#z`Dxdk{TmSIN)d
zj!0SO^Pmy4IzUbnTQRurj0d5j9{B>K^^gMQ_9RH5!#LN3Bq5d%zuZm_)`QMl6^9F<
z=f2Zfn-ia%ib!d^Wlobq^`s(l?d7u?960GgONINsR_ at 4uOm_ZmTirZp5d3(h+hbvT
zbf`e9g^~OT7^Ca}C at Jj=l;3W&N&1yCFM~a0meQ#HWk`>ACxcAs>B5VYI<Qf0flS)@
z8xb-K5+c%)4WMAMo!3@&<Vmj94m{C5Lq6q$JDplO2mlUb&(cSWxGP{*#!5_Pc(`RW
zz3-1q=d(3`nps&))N~VMt;zlzORlb6fKDp9H%ep)7TgefWcVry6Bl;zdyn+kY6#i;
zF;zNz1R1Sby#L9r3DtPky7g7krj6 at I1N41W<9w at 66B6iLf9@?UqJS|9e}`?Uk5&$D
zxI_V0c!*0lc^)-{i<S>cp5+96MY(rcNqs}jt-&>awdl2(nT32^j4sp!V}J10bVnOs
zY#X1`DN&J0OpPd4xix{?s8RMsc2EKge1Wa%#%6u18FJLQ_Sn6gef8QWCxRrS*@bw3
z?ZFKN=*jOp6yXtAPzT`Q%|eEF{nu#y at tK;=cqJ7(#LO&Z5y>?EE`wS`$BIg>E4&sS
z9CCVp>cAH|VzqOmLPYR5YC}*}>}2eMs3Cs6J+i<zV<NqqYOVd%e(zy1j6z=h8dZ_^
z$ex-V7_uS+ILtU->jJNShF&1&9c8KNp59G&X&2}#>7fan&9YdJcY^#cIJlDLr6e`&
z9NThxbs-@)fPs6rO}0+%t}>8b)4JK4h^Tabdtp#WJ+I)OtZ&kXuOX=KvNBA#ANH~R
zdw%da_MUul?`kU-II-iDhS-k4;bo}jpESUUZdtygZYy9%92VnHbj5=zNvUPg8+0tb
z^h9TgJe~q-Y at gI3*i)huW`Q5AGX-z~f%|8(hFM(onC?03LMUek+R>k*^6cb01eL*m
z^H_&d0%ceZTD~bceF2l92ASH*BPXP4q_;!O_m)uD+ZAnwfqV=_={B<=+d$1b>-}KP
zZ+(Cg`*X!$@+Xl(R_pEgzbqgG{;$lj_P=EZaKegm>(NUXBwZ)<uc+^7v0dr0X`ZKL
z)~a_UB5(<!+-;lLMO;~=ryh3iZ0Ll4jDGKj_<hl8Eh-OcsWA+umgVu<UB=?6zg)Y@
zdnK;?`zcmsYy)=@<m-wM8W7MT`0zZ*9b%~I76P`_00#5)bG3YkKgmTB`%&(w+}+8>
z?D3H03+Dho*3nzhhcuA^h_^Q>X=2O1Ezu}p<(^8SrT$l<Q$C3ukBv(y)|4-Qv#Q;|
z-#+9f?B;7?GVexuzesuk%~U&QwvG>Es6Qd5H$F&MPoY1>g&c|*%tQX_t}ye|xla(>
zf}2FNYI59K-(XM3q|mhwo1ZPVAG6u{7vaje3)<BYMncMN0`a|&SiF*SYU#E7AP;m^
z9>wKh^c$Vy^hIHcYHkKVrDaxsjs}C~ESSF!A)Z2bMO_i0FP7vGRMfm{AZ!t5BYwD;
z2fC!s>6`$#w4FA}K+%I;JaPxA5g_Y%J}J=%sl<&@F5_fe%e-}S*h>;;n{)&F<PAaq
zUj$3&RMn{OT1m+gFb<D-aL|t#5q6RRTHveviO at 6ECuIG~bh_{M|I;6T_N2_JhA`TL
zRBUcdHZd#PAKh3^3yqmH=b1reiWw&WV@&t2`@N^rf!u|hfF^^-ePQiurrw$i{%np&
z56FES%%_QXgqWh1SIeRK$f#j4UwhuRBD~s?L2=;ks>mMcon!*=Za+v`Uff&DcWP5c
zQ6cY3<jL2 at Q|~@gnX at Q=ARUU6ewFcnS1!u~q|x>Zsjqt_X;37rBTYWl34>a~3u0r#
z(#2^;NDaE(udG^wMN at eAfW#6j9RYfwlQm<hxQH4ffvLXn3mWV-Gbu4sE1zqIIaSj%
zq8n<uqqa5_Vj~Dd!?EEfDk<#IVSR}I#d27iR^Q0ExTSgl#NRQ0U)q!~gpOb3iFfB%
zs2Fc?xUc_GPBPjp!bwYmW>uFaH*MUzpRIm-9a<4#MdX`XK&woHa<V at h&mItiJri!=
zDwI&GM+>ty)5^4kC<_{}<p>&rh}^*p3V6$NSZ{3Qo<t|iH<`E(KeLs>m`6)V>-EV6
zlvB2Mp2knN{q8J(vp|lAisxcrVAi&2>4cCvgNB>vc$oB+aWOHm at pByo3jGQU_=M_2
zl%;IavzF>m at onJCTl@joQ)CQ|%|eI{!nawV15RNSSL0Na1%P%cr6R^R%The3fZn)9
zuf&H`bn at 49<)UbX;(;cqDZlkJi_(baJzWSAX7vrFSLm02CCXdpW^aa{wCjAmtj7M!
zK1YU_KI7QPE-TE9l38DXo7>3^jQyj-tK}ST2NA=JW0WG60}c&_h3V18eWK7B%bmOz
zDREZ>gzJU$&saCkeDRBBEu{=@Oz|?w8$XaGG4m=a*&SF(N^+3vr>28~`D;^XjGPrF
zabxcv4Y5;y)8>Wl at 4+Iyl;;i>T)bplYoZMR^A$U;;ecVk+oZx^UW;GT|D@*=U<~UN
zfH*-zY5k7U`y#;@(30Ky2yZhOL`l}&skkyt+~clqJnHCA8f$5HaXg<Hbr(L|SDSMb
zleE6y&xbzY0rMFM#pQ_$n(QLevn!!}RoLa(2SLn#E!3umSF&{aaT8rL38TfNH#e!Y
zTb9s{c<%+Tp|0?iyg@=bC{A=eCLE|r^nHiT5xYyc6GyO}4%5`qm=|i=+D4#~c0c#*
z5 at ODY61%t$F5MwM2}09YR%Tbd3>9QM*`0HpsdFf%{7aE?2iWA0gv@(#axD>~;!5*?
zj@&PQu<VM8VB}r0;JuUK-U`D;Jl9mqbH6_HFV&EXTI<oQSRTSv at ZX4IpX`lSf756w
z$6pWAe_65DsZNyjNW=F9I%Htl7aR)Gai)qkutPLeW6?S=lLg9{uoaYlI*nHEr}S+E
zpNMS8xXA^R(gmx-Swt=gMkk)RD7tF_@!{Wp9t1tRrCsy|UDZZCu`sB+SdU6t3=v%5
zc>{A=Xg%**01qP&;`Ue5rgTymu@(AD2P^RjP*y_3`Ocybs2(?+YULl1ifTpltKF}x
z^6qm8G^AnZ8}GXUc<qG)^8WyC@(N-pinV+98bBJ8ouu*OXdHYu^V1ag{Gj=Xs1M<P
zLJZ4z0L&e81_=c!gW(zyLwvqkZxD{n)XDRCda~ac=>^^8)DIUwQCMB00ROa%vR;;V
zJE7Xq@$KHOW{n?YCx$3Em}Q)w2HwKyWJe%72r>aKRuezrUG%*}nx9??f^AO^f_s^A
ztABMQ?!4?j_xM45;M;myqywZy|J!kY|CT6f68bvKx75Vdnpj{~dR7 at Jv)wtfzw($g
z1rM$^GIAm<9l-&0?yE|Y->*&wV^7R^qHr$2&fiuJ={M at 4sSaRue|7te`58^B2p)<9
z9E;<sX9o#RtvytVP)3=v6zy-0UB0?UbEalBS at e>Yxl(KCR04EZt`{OO-p1U24tdXl
zrA%PsbG!Ir(_MKAsSUEa4ygT04*XHl(^oR-^%KNy{St85U{{oOWTT`9MJg at ccBzVe
zpku#?obOj7-eYRR6&z+X8r7~Je_EHScOUb at o`AO&B)Q2Wv^4FiK3YXnu5r7~VM%zr
z_I*y{HWY=b$mzxC-TRcnqDUBjd;a7ZC$4WPjUUU#JYE=oB4dvVl}#OFkeRxUk(TAb
zhQjTnFlps;fX43Yx3kUe>LP}AkL$^rI!%+A5TA`!*3<S2|0bGPpXp)#R4QW2aFl~z
zzi;>6sE*}**&PM$n&P$O{_9Hk(BME^gOhfxt9M!`C1(Fa at vvCIOe6V!Esb5D?=)ta
zBlQ)Kj^b(Ak?1frIX?zBnX`c&_e%Iue84+nG+A{gBc|AFsEifE9d5u04Bm?MM-j2h
zu8n#}TtF at F`4NtNZSR=?R=?RMroO0$araSsiRSvVt%)>rVTA(k*T8MOVZd9$=8MO^
zOVv;2Faj))DGQ{nIv$UIP*>!=L!Igf%Zi^4s$QKavsvaoL`3GhVlVCFh|w`@=$lE4
zUSqlaGGSQXI4MLpq<=ugCI1yM+ at Xhzfj^3P25QQ77Bf0+qnB0WYtHAxxBG!PeBwul
z+a^YCzh(Crn7(t>_ncR^yHM-OsA_n;23cBFD;wN at me0&Jvb#cmaJYC^XRaQ+fCZqq
z6;2@#nNwVAv)<+l{M&RK){!g{5G9_Gv-b%SG at 9AcBi>(4w$%2_B^>prOtEftgrf4Q
zBuabj=*qU)(^Sr_;vR~j=lDI~;uUmjlBIky7tpR~g(eFCKjk|K6w<LY5v{WQ!7H{;
z?3A<_#B;7D%$ulx&EqLP3m`(O(=nLYh3P+7T~w|RW?0Ou;(pa6nr%})FpKOaIo#(H
z!uc#}3Hd2~ht*R<Il at rvoAaM;<mSFpK`_DiaA6rzBIv!J=@s5ww(h#5+cqlqhL`@+
ziEH0m)|gpw)4*!$ZE~_`^)7y#2k;a9c5Q@;s_qIvZMA5B)d~{sl~X$Wx(~#lGj31o
z=?BSk{86K#1s=AM(SKx#Q3wTGHOQ#u&2X1OLk%}uE8wBXshMs~nk&`5)Uw2Kw>h*A
z9N`u_-BkB{JdWLXSm;(*P5m<*#Nf1Yr6~)g<g%8wumF<(r!+NjU;6rnMRs8vuTBGw
z>VT8TU6c at iB#l@!g4-tDtKc-nZkU=v(`-ZaQ|=VV<a}eMs>6_0*bGio!7AEH5q<Gw
zW;gI)npl%cv2!%QoZ&EfXik~jM66VzCXjbZ&i|o#VOoGJu}>6HY%z18b9$QWuls!n
z46NSQ<OZcc+pt3EIs|`&a6Vr0j!JyRd+0d5IH!_-$NZOpd<-}!z0yj{>*S7lF0)7V
zn$glES;z^hPvVq_%J0E$PHqEuW6f$JM at yq(L6XT6p1j8Q;-Xa()~&zK!57p6v~bAh
zrgvG8j&S4RJ#PA_Z5<G%J7z1p?CTg+cd9*UIxGod+1fY2K>+;R40s1V19{gEA=#E=
z-GJDCo)>CYM at GX;98&c$G;ER}rOlxfX!d6L=-I=Dw_+N`vrV4QmVVEXF%_!&e|*1F
zhh8nI)*?#Dh(DRe|Bp|h27v`wH~y*ewq(?Ik2UShgzL6_VhxbUfY}7Ja9$!BdNM$H
z32#tu0RWf_kFQQy;Lp<Fu%U^WOv;0zlM at hs*S at xFG>^2YOjB at WFJqi8A_hh2UdI`b
zOyl}gH8%lmv30J$<N+W|n^~|`f_6hHxWRI7>`NK}QA!EddQS7X`L%ZYc<*qv#-f{E
zAxfyI;zi+o{Mw+pjh}$3N%rcj3Z#tU_6lb5%tvyNG8t*cc<njY`gES_SR?=4E0g(u
z?9Jz!G2FiDZIAt(Ap>#0^Ka`5J8F>H`&9OlY<k5kzg$v5+<+>vQdWQq`Khwj2WHf>
zSP(I<*^)9fjpC?J(rW=#mpXE7F}BxX1UadATQ0_|SyNCud}pfbJ at e7WLRn~(2_P`(
zpGZS*rjsAqiA^!sT=%BLf>$?P4R2n5#>77Z$qON1ss>Gij;B7<s(fp3s5}gvux+M0
z+dWU7L7*YzQ{GL}uB+qD3g2leus<_k&yFx-jArT`463s2_x)1DOs?&|<7`xwk0(|B
zU<W)&CcD at _dC9dpGN4*nG%4g;x*1<UChT=@&_-`bp{nj?{E<jwRijdNc(-wX1 at 9O7
zo&zk7>34mXR6EuMK|+Hev at c%5swB^<O#H at Klw@?~_<9PcpCOGU_IH5(i at 186vc7m<
zoEh93L`G1HloRv){aalr(82IH5<rI;zCV4-HQ9ru+fp)5zsVu`LoZ792#w0_W3&nG
zK>J(Te~?$jWuP0JB0Sq=ujgWae6N}Q*je5*k4KiS^Kx>_Uefsbg>}AD(e4odMHCWp
zV*@k1s<KFCPDj7o-?@^H0STjaoaF9gGVWn!S?tTM)J=E1iqpYGOycH`{@0GhjMxhq
zQaKvW<gzmF!v0ks6BC6q1=0z#7rkj0oC;Nb^){%(*psNY0^AunsijtbnJu9^ZeuN;
z-UgFT1-H#4J#@HRQ3SiUbt0EJJ4S@~?Y0~oHJ#)z!!HY?G(tdMfZHjf04^)PiTa;`
zFIp=#5B)IYeyQTc$8yLz$Y}|+Oj+f00F(|>u>LA7^%Y?(WeB7Ejl&S>#kA&?lv<?c
zl!m-uqXE5qhsJzRk(_UT9}eUDi79Mn*ZKQN?f_8>QCBvQH4aj}V-`%7xv7AOPq{9Y
zneoi%;SDS0K;m&3c4bj8-Zcp~%DP7~i_l$`m+wkF*9}&st?1c&B)2 at 2Tj?Yx`8a8_
zd3kC2tw-KOPnpYC`PEX?v^n at 9gYykl&UEPNSd5?B8s$nwMt=5x-F1($J~k)03hzcJ
zj5uM+uhuf(_8BN?BKO2HuJB21h|bePq5vewnm}gTb*Ww0^3I(pz4m0IU00<Tfftk#
zCss!_PPLQc`OksF6&Uv=iq0PlEIoe+|9yav9(SsnGXx}4bigG&oZz+irjTPlz{zV0
zkGY->3%Y}{K=g5cmgwg5J4CnaaO+;Z<KvT}Y_?sSSr_`bDzLFIpE!#F#kO8Mc;tGs
zAtLY<7I1cB-SX93OEJ^U8>1Bn#rq4)i5AqS#vvW at wn6-VY}c*(qO&V}wid|WFeD{-
zQ097!P$n*e+vS!r#nNTC-vzcdSH|vY+$%|6Y+E8*Rhr;`7OlUkdI+^h7}tB603jg)
z54wUmc873#Dx&ZJXN5b7)ZlINFgvc5q-fogBJA77VGA(#_E0W}`ICuL at 3SK~LBr|s
zDCCOKsq#VJ*B>p~Mzx>heCIFyIreeLDiyLCx5~f9F)8u0eyXn8oWF?b^;Gl0D21xQ
z)C5xn)w5B5DY3oMdyG#$-f4RY=B)R at ynFI5ct<n6G+pwaGN^Cc;d?8V^-_sK-3Jmh
zMwVoG4JH9~3OAO10 at QC2b01k=y&&P-)XXk_T7K!XgejDkJ6h^)ADWC5BGA$Mlq~-~
zI=QWfso$Jw&dHPRJHv}`5w!wKFx4)q6459qUy8kdA7`Y${a4XyFc-?;iYzi~u7HWn
zU8b3u7JZ?A#i*ZzC3;)XM4pLhUZJ0YZN;T?`0eh?ZO3AW**w)!iZV#8y;iil_cIH=
zi>~t;C*tmOM+H_?;NQ>e8)-|uGh6uA-#NPtCirK_v^rSI_awNQG*w)F0#s}YF at crT
zTLV&mpsnHtgOR|c^YfIZ;Fw_j7 at Cc#X$c;R7DZQ312KV&9#4nXBoQ7E6f~Sdha{?S
zfsqAcemrJ_W-}vYULryLyPLR2)f6SeJ2;tW7Ch5_Hq>A6(Q at u1N+_djLw<wwse2-r
zcR4Xg?+X97l+Y`cKS4)|Bfq&&8!P|~^0kV8UTD9;bMO{<l1e~ldWby<C4yIWw01EA
zmB{unDr at qCo`c at S2I;e3WX*Dx&mzCZSzU(OmgA^HG~U4fK2{A21_T9<P&F@=Lw_YU
zHyv~kJ_09qH$0*|N#_l>W{`WT8JGth!3IO#xn=XNR;Mpwf99N^@!NoNPi&AK^Xiy?
z2^DOA<-m_bY at BwvcQ;I>0Cr_FP-)qp8MK6&PmfOYjo38OLVBGD7lzApofxE&9e2}v
z33tnT&fR!3nF!%+w1${-pB9T#BfEK$z%~|&Asd>p?l+YT&LNjr?_yFm>6v`=T}*dH
z`nre4(_db^QEQrF$ICpyMX-1RklL|-*o;(g1uly61-20gl~Su%>xQyLk-|K^cH|ms
zL%M%S+=F*z40?>GZajcAuac205G&6*m!|04S#tit#3-|nX2Q1 at T&rV^b${4U%dX=U
z%*3KWu^;DkX&8`_pzA_`+w%5ma;3jLPR7)OYKb)S`KcCc%k|d=9|$TNPEUA$CN!yY
zgHVg)l~)_(IG5ThC!=|LMzYLD*q4Oh>4c6c#G$dlm?w5*NT+WkB(ktZ2;_CVEfeBV
zmAd%_xAU%9{}8p2dpDY+;=XvAel>w~Jwx+znrnmcq3`PTtF7sNRCj5_l!3yk)E3ts
zjG*0>4vCS>@M(l&Rh!3b*W#{!?+z1Qkc;xuXJ`9ga>!^-(Q)4T&)ABNY(lJvut^>R
zXp~=}w7IFO0`CisjV(5}a}7Tt2#+2zS&AyXB0N_x9buZN9lFC6Me5AuX<$Iyh{zcI
zh+WX`41v`1);89W)&y1PuOqY`vCzdgPWS?bEcHq<`m_dv$U+^;h1CatS=>;MIS}Tm
zb07rZONb$ff+|=w!KDB50t=)O@>r78ou;{ku#Z at +h8EkD9#qbJhA`SEskY8w;w+=*
zSO|-}Dt1?*AM*#>&~+}=U#^Z|gHpYbW7`!)9<k_ruaLfgmMxO9tjEEAdgAAANK6HU
zt=RYy<F`{D3<Klh0b}5Qq+s-Uv$HSe%YkSY-GFh5YFj`axsD(L#7wn2BCzs!{MA+)
zB+C{pvR at U(O1Vb7zjh;|r8z{KE?sz0aK6+8X9mI#b?-|TiS{#9ip!iMC(H%4`0`~6
zH>7YTULWF}%9 at Vf_XbNkLVmHTA>hQQ|C at C2CaV9&XfjbUm8=4P+NQrY>HgZR>}4`#
zL{vXYg$v+FiTm80vWW_&Vl2LVmtU~c#{v|qDv0)!SPpARq97ULN- at 9m5U%U|iCj4^
z<d8E%&m7HRWS*4JBlvj!7V_&XqelDmTwM^PLffoElQ;Bc8MwY?DFdIv%a5JIe<b>2
zuL_#bSIQv`M+eV;^2yt=eG$^Wep)O}hmC(tRr1 at hzvVWjKTsS88YeeN3KMAA=94Dy
zgBUTLn92QNV4F^y1nqtC5US%k;pajUym^COUrR;^v=$2?n-C8XzZ5J`ju_I<n~mTu
z{EgGB0HR>gn`CMz#u~McFQE>&F*s1pWU!rjq4bb|Kf2<79~hGMmjP=gXP**ZjEmv<
ze7AybK5Z>Pms73)FSLn$mF{<FJ2SEZ<bCesNaF44gMaqPpZ;Xv0BDS at SnXc_zH_MR
z3Kb^EmudX1MTS15kKD!sn&UZ;WF)S69L9{M9Pbv*sdc(@z^e%9^4BR<r-qCfuWg0d
zkI at dJiYsq_m<6-aYmcS%kyRz9_rvVv13I0^E?LO|#5Lguj<Bl%xl|wrcaX6t*ST*V
zS00Lb#oR}dS1wH)5H50uNyf=Eu3aZ=?IvOeqc(Z?(AlR-`y5-a(GYn_%%AnA=e{4+
z<2P>|9D7P0(y<08?QN{&|6hLOY&_#-A`3)_Z)56zlWj`>gB%s)`xbu%T&<nwHODes
zZCLahg+d+E>7?nG;>m|6tiyPtCP!qVQeoU(qx9z}-QYVY!+9*^5T$5O<ar|rxR2tt
zIE1(^4dX!_nK%ibO)H(;|1qi0&a(s44(=d(Lb8EL&FhQ1PjeNO1ERwn at yz$_Kb3cf
z+#=<F{59=-65-Bx1K3G|UBa)RP~mG}>#5C-5^|1(yYU}|%ACvn*adT*9iA+?$oF+(
z^)s?KPk0q++9_qBrj}W1J%FZq!d8PTtNOAeOu_z{xCryckl_^d8!`fY{`w1)CH({)
z;hD}AM93sFQj!OZx287~_kv|x$c`E}8XQ7 at f}1GaG7_Kt$xYTvNgI=~?Nr9Qw+Q9#
z^iO-j(7dMeq&3I?<M(RF1nOA at W0xUN3vA$Rs?!)!rW5Js;304pP>T*UnOuxQa&9qP
zIdWaUbPYn)FTAcR!yT3iDAX2k?5wWh-%q*u0b#J^1a~H**~DN(Dh%e)BOp7^rM%mJ
zij8DjGStW+ZqDQHkf at CktU0TY*LY0IiO*gcQgBMO1%eG4#a@<@o<QOtQI)&)q^BXQ
z7k-zH%MF=M%g_XH<nBBLO>7z at rlL|eN$=>h`Pb_Ix|o+BueA-U#1#HZx)%;>auK9A
zXD|G(-vPUkS!u1|G6m?12-G2Y;_onjbdJr`x$hT9VsVW2e2sNv1x_8Hy9 at p|hT`DV
zNG}-Cr}Vd%xXa~GsCo%pDfy4Tap`SxN{=dI#8z)@2B%5w(~a1Q*5(+p3-pa$C*tuG
za#_7zv#H!TdYb;~Hq_mVO=Q&CkY1B8rT`pMRnjIuoQKD}DRZMH at P;(2Q^0F~(DLh+
zQ$h(*M1YDQzsmpth7F!n<3!-ApZy*`^1(lUr5TAH>6X_Nj0|U91S9F1pC%SfNnxPO
z&GVSRUb(=iPxuJWz4-k<5dHI#i&T}mpjOGg1sA&E4eP!R`gqy at 2CdBj^VHI8>d>2q
z?!6w_9z<DLHDY6yAA#DK#|9#Q2Uq<t=*aw>G`#YNlAmjwY4TFv>1}K!EwRZZ7<Ce>
zD=u&=WsE##A`Q(EIXkJ0XQ<N6dTd*sC9zOyVxUps6{{!i5s2$Vv)NqM;fL+js%kI5
z^fx at xk<6E3`UBi#GnKOn1}0d(iz%I_)DMDQ>mB~#q1aN!D~F4rIZ^U|7 at Jf1Ur;?B
zo@&OSqz*c*H|qvo*ymM+q=f4jg*I7~tIkmlRy9|h(kc+VV0!MjdLx1q0qU-fDIIw=
zv!aJ2)*^6cdnGZc-Jo^>6sVA?xE at _t{V_E<d1(0nF7<^s0 at y8AJ0i|VP)rD8>Q at 3H
zL%+y|8RS8HH-ZJjlpq6tgDahz;qHN+kN=F?>n4%NC__9*gWX-s4m74V<5Wmmgi`px
z3O{0`76_(}HocC}iwv`4ik+i1!u|~)#8ez$jXPDWuEgOY9*gbtbTA1$(dzL%%KVU<
z!^LosKgnL;NFj#ELJ(~)O=h<*n+t%g>~8i&mXG7%>g9nJ5=&lxMi{1ZY|867NJ0}^
z&AhM2Ea=4(%qqZE5*d<|E?gtaeXKu2`qNd7mMlBu!9f09N_h7~+bw?pU0ZDBBb`lA
zXL}H~`Vt^_djTiMyHLR??x>U2Zf^O!VbPx>3>5~}%9-QogWB3S%16C=5R8oC(^Ez@
zj9YQ&xSQjxnbO36rJq59=slSbi~9HykJ{NOi&C7oXDCYpM?u5;OS&;KGyb_!s;;%v
za+sO1&xrW1Ui?EIX01^^6-)jC^JQ`ion4srXZ6kW-tw~A<wVNz%T`fT{o(AnebD#@
zchbPc=}_gcsy+(w8^`90LQ|`ttI!ZjgMLL5edOX0Y!qF8Et93YnU?pZK1eEBtnK*o
z=qK8bu9#DPpeqRe)v+fL=gJ+;Y?0M7wF;NLOD0$2yY8pRfI0e5*59~IOOrGkC15#i
zg==}GaT#MD8Xo~g)FKS2X~3UPUdBH*7IA!*aO(0oPC~{)adF$`CpCVn;u5a9Nb-U6
zmx!Ax1_0=P&O#2Tw~+(RtA(U-$++;Z0}`j2_?{Jrc9<nJHvjJV$iv8*@#%Qhy8X9%
zA65rMciWx?JhGpW`MZr5Fo at aR7H0t!bZ0D{XXz`}FS08Kw=1_3q*5p*&n)bfUCNdn
zVwt~`94We98};(M>7_|hew+e%sDs?DvAbs4GtwY`sQ=vkTncCE3ELDz$Ms8Y6FDL0
zvj_Kpi#Mfu?g3a{@Pm3vCOi3%vfe}`WI}++KZsDnbH4PkRil0DFH{Trlu$#{O6;ag
zA9OePXL|B^OC<U?G`fZ*u+<A(bX at U;97)IL%90dgz`-Mh)2L*nD+AAnMq?>wq at hkv
zCybYWCz9r^>bSrT!>0}Ly8;(FA&dP$Q8$5(m3zKgi7O>M?c|PIz#vlkHJH6*6N>oA
zHyQ?ap{V~sWMJZ3M<yaIB|or#^5{y7T8v2^V#8oxchi at Z)Ln;jX>eckx)is?;msDs
zF<EPvwf<#qD5bDIOGXtj`%jvDG%L4;Y>ZcbM>c{JtvV|^@q*qb%reQh7rG+UJm^FW
zM;#1)U&O6&7lcjS5VXZSnl#k<!`VVw9B&!{vmdI-5Fm{(ZJi{dXF+V+4iizC$KNVh
zNtxlTPX2rVI_H48L-LLfwGJA6#<}m8_Zubov}QzI!2ZVl!W)3m+-Dlgec8!A7YS^C
zsMM8VWJ^j5%^{1pzFVB^lgM%2KBCZs{|c_(5~MXF$bUik5lWWf?OmB|lR!atHBqR3
zH*^@!fiv~gdTIfHgWA?OGlmSa*D)^7!O-&&J4F7mr!YJuVjtlTtSFG%cEW;c(tD;E
zs2MN;xdrb0O%~>A_g*W at opaZaIUitu_-EP`M4xn#vO#|M#??oC4pH$4wB*N9TJk#`
zt!I5L!r1WM^kqUfIKOQ79n1rN^zjc*^FcB=ZSv*b>O~d;qrl$}G;~RHq?ZP20x8R_
z#^%xOQ>e%gfsol0Xa;ks6-H@)3Q(j@$N~u5>%e|@ik;%_8jCX~M%{wQ%U}9`h9K$B
zVVVly-F5HSm67qQd?*r!V?;-X4uj}lHaVOmfCHypeB*mRe at FhRI@}sY>O6So<lmfm
zCiq|<cP$h at xUZUe{0NGc4hFI;Hk{{sCFXy%luvUiVw!`#MwE<fRo;dLlrTIQZSIY3
znyMj(P(&M8DdVIe$6rFaCDTiPPz%s5PS>-m at 3FUhn4kzO3x9=xIZ`-g(3qw#_zSpq
z*CvHb$_-Yc(+lnxVcb1^6q6QlZF9MjaP}6$S3{oLB0tG&3^o<t%523(lBu){8c*i7
zbYKvs_Nveix&kki$mrhHyBiLY95{ZK!QuVc8ppH&J>PK4h at ME^%scddkNvh6uUN5q
zshfthMQ!|OO~@kT)bDZB`}fDs=o<w=PO%SNSd}UinOFEJs}UpvBv)%575C9Vg;%zY
z%cLG)5EDAhou+bSKo)6s`0NLZ`@K1dbm1w96E`lgXlK0r67(+;x+Zia|LhI=!k1wO
zNy~y*#h`1NMxA)*@bYAT(e?*Q7oWMz>B5xF=(_<^6|LZ^2bX)(DqTW;Ap2mA{D?3l
z__p!{)Xw;Q1+_Y46gZ+xnQeW0hs#}>>XqnW%6Oj8!sggI?x7AJ-D#m3hOyHfMfVix
zoo><z5E1RiT&jU^9oZc=JP2$83DwTvGy|Z)7y^X at Rmt9wm^!0>&ZG&C<*SPDNE~Q{
z7SN~Pvk}C=a?emx^n{#Z at _o8XVuc}l#n~nwfEM2yV8>Sw>7EqP$p#cEib0!wM9sfE
zr>1?|fn(|tLq>rV#aPpe#+D%gLxjWKfl6A(X%<A`u^F1-#&%(NtK59J*2AN8Tmd!(
z?m8jl(>!f`RQtt$8E!vUfv6gADxW0}if}b)YLQ@<qfZT=>z5D)8xy$0vu0*7UBhFD
zl-1++Ra)?)Nm;}hP}dSrhRQP4jo|=6+_NPmmUr9?h%u<K4PNl`BKYJ`XSRP%!(u5c
z0nYNwKW;L04i>^J#Sfu^UjEpk46$jt7p>{T%$kf$;{42iqPvI5XroO>B)UBzLe!&X
z#Xs;GcJs%jKGFzjQ&ugPOcTC$Ld9rGWn%jJDREk@(?p$O%UToY at H*l^ARspfqXep&
z#0Z+&lwX`c-qd9H8O-<!K!)&>JMVZ at iYqX3nj%}7<CK-2zy2Uhv;6q;c{JR`=fw#x
z_zJb(%Y;RLRJMemAiVWjE7Os5xCBktik;rLNE_cwy#f{fJn#J>5V}p)Uc!0VD#-H~
zLvG2MP^}lI&E_&Sc67OkLtB+lv+-v1A_3Tz*6u at 659DA^Y6W8rXyf>M6wz;Vi_kVe
z@%*AZy}PtTu;8b%=}iWa2m?uOk>|v}C7333dIrLOQiM3RO04x<DiTy7K=6$e<T)&r
zJN8#pE4)+6C*+rVeR$qh<ka}uXl}@BVGi$P=kGD+0C_$l!eMU<y6)x3EHpM8ib}-$
zZ&H-2DWetV07hGEXJ+CGXCMwz>rWE*8_PaAdn8n(Ilp7o3)Y_9s0R)hf82h(DG8ou
zDkivpZs7!ypuT?1A+1g}AjjBbg~(T(=Qqf_6N}PpX8tegi!u-aW5Vr-G2`Z+*sh03
znhXzs365nbc&^(!66Z5$G<H3xbD%%xe$->X3O}WY1J&p)ZTNarnVrB4YH{rnCn?rW
z?br<<?epd2>Mq&t%cs(!C&HCpGxlMtyD0X5VY*?e<gsF5AG+1L$V)<R^lM;M(Ks38
z{2wbOY`=lkF{cs0BYY`jWlHkb^;yMzm%d7JIvyIBy<VH&crC8k?Mz7C$H3zgJRXz-
zkf?~-gt&~t+M)lBSzj|Qo<srlYncqoZ==4&JhR&Y-Hjf2^_)vr?$4Od9+mwo#VbC4
zh$P1e6Sonj<*`A**(&xSF+dW3;&?N9<{HU<?HFbQ==d*RHoipLBnhpnT(2TDj%Ml^
z%~`n`!l_KrTy~u4v}I<)T~aoY;*$rLk=dd^X*o`|bMvM0#DI(!{e+S3Dj2LGSot(@
zQ7Gon4XLXEx`|e0p^Q{=vu7)qWjs88PFQiY?&K&IkcXB!IZ7$sVFmpt_eRoFbkzv~
zwILKA;qi!I%`uH&;>LYNg&qN=xCtEgZB=__P1`PWty+`TW#VQiP at xoTdGmUmb}LGb
zEZkcP3>!Zk`Wc`~YS1SUutbGlsH9>+`i)Nr3#wh}5V9(-HnLrMWU~^mG}qvN=}@;v
zInY4=naUgi$dc at Z>`*M)&;fTP4x5n{8V2;{T^3XdOTwW9ln`$Gb|B)~f4N?qAY7gE
zsoySd+$v#_8YHb|^(FK>c6YdruNpd at fprK(w-DmZl&CybD9v-0?ut`Smhr_8 at sYxk
zS)b0#v3j^ewZrh@&PA7}#1wabAMW6kH at qPWdnx;CN670KkzunlfgMoNRJl-na41J3
zJ@~Ia&*Gu`!e)2XW%(hca4oDttR(f1lrq6foW32NVeH`Z2J#8y_0Bwt>oHG-NWmwY
z;AU6EzM^jX!H{1Wpu)y<Y}@13=D3)!glcvn{~MXg4Q7$CVX`4;=H~x at 5aQ?^h?BCZ
z1wr!T`Ty(NehuR5SAWbdKJA^b+l9hrv@%$m5kNy=(?{mxOaIMHuF{Cb$nL}Ug(dSV
zfX?MQjuOReT%6ac`Lg$uE?qRrl`A7B_*7d};S>1c+!1P&!&s$~`qbm8weEXHUigIc
z_m0HOvMhy*wD6bcs(dGZKBBo|gSFJ|kN8yScs=e;G2#&~b8=X;fjZ3bL-UKLe at YNb
z3&wsn<ZrL!9rT#%?9Vw#rehHb>*ZRq9v7)-|2sx6-SVBNMVe48R|<4g at 7Cbtk+!V%
z7f1sBZMTr+@=c(A_JEu7xR<aywgh0EHty?AUE)F#7OCQYsDw{{rtvnUpS%s+>NW>J
zesamhXQ9XhbCzAqyS<0F8xP-HiPg at +=&yw@<ly!~Ke=7yM>FC`iuKn94QI}^@Kbpo
z8&sp*?%hnI8lj!WukO^;FJobj)0i$+e$w)<wmgE=_+K?7v|FoHhO;?OcRb8Y_0e|J
zg~Clw40=|b2#!O4p@}tm_AIY%nsO>6R%z)%sMTuT+q|@Bw^JUqQ+gnh)8+Y;EeNPV
z@~e>mE~R3mB*P!np)w~aD4ipt6PqbvVhD-2xcUWW$|jRrlV5eUIx?6WYK6ssJ+@^p
z?kaJCz?nh)i3#+F>FH>xwspMAk4rUGZ<CqCANEa5OYrl5Q}WRfTlUB1YxbU;-CiF9
zupePB+`E6QIXq!JsfYwIRzgVcP<L=tZ_?-xDO`n;$5TvJZwTfLkG-{OZ*eRj8Onf6
z2?CqGx?&0#KVVNrn5x#>@o80_hRR38>WT$wUF=OLwMID5ENdMKQk}l3x5xMMTdSVO
zgMVnFIrol#<~!?5f>!}N)qBPf!g)3rf=G{is0<?L4)kDF^Va+wfGF-p`{{nYJ3+^;
z_A*pgs;$CB>(-UKzF90LGRZoo=-9UkNjrt`LpYzxF2iSF<PTkVzF-B-EbAfzCYs$=
zyRXFFqSi4<|I(U5lCN>hh at 4~`pw{<pK+NDzAOvN9^*+NBQ$v>nh(i9T9XRcGsXe#e
z*_%kFT)$x7qhr>ZtkRvyCSam-xB379_dR(!d###YPT&INbDYp;hbx0_^vNTcR;Lml
zJtS;LIt(}-)=QOTW^PhOVDNo at Wv6-}#Lmf)*Mwed-XXjDnwdC|w3r5S-MIRY3htxx
zfaZCB4gX_Q>LsNPU(>Oej$Eg2Ar_la at T*TYlK!oxPE|uQFG&j0l+%~S0rIF6FwoQX
z&n}lHIeK-eM>kHGEC at zNiaZ(vTtB4P2l}u5X;SN`ywGh1hRYKcD*Yn2tV6cV*94e?
zJIr}Cq~?(5QS+e;P0?w?VGAOGWX9_Uo0ds`ecwX6lhvX!zI%fD#mm<d)1NiAL18(1
zfH2OWka&Og0GS!3+r3-oWd%;3(LNQwMXO%ov at Mj*5^exRiRQ7K?mRNpF#=<n1ufy0
zmi(iKXWP0DS|}}fxGUGpM at t7hp3|;c4I=SDdra|b_oCz8`san?^eBnSwA|o>%rppp
zsm>rnS&(&=kZ+%Tq7Y?*WK72)Le^*6GT at d2P+Fr&xLVdeQ1(V~Sw|{dRh94atO8gw
zo)#rZEl77K355&wu-ZMRLHyfBKEb1Sin0xn*4=Fr(yd%TMAVXhJ|@6&FA1eC5CNt)
z+xC|e#+fs0MS7S8;7gz|5L~bUG9fm96c1M2*T3Sx9vfZt{c#0zl#B8Kj@{TtE3wYM
zcC*}4XM-0_Ql*}^;>*n(;ApnW;Q?fhPGGLV76)imNr2s`E$s*4uD`S!ywY;f6mLuk
zA-jG_3;QON01PT%kdYx|?Db{&=6`-qIPxL;mZS!VI1pja`F7xVhS-z at AQI(&(#uGu
z4>f9onA1LSn>d6v507}ts5}fm&=MfH-^@0+l8(-LZ6ogFXVR4p!hdIqy1zz&SamDt
zq}NCW;%Y0=$)P at Jps82k&01Ai`MSiuxVGROWa^UojJ7(o+*VQt<Vi<)u(tX)TR3FM
z0U#PIyt_dh6Yo&pa5AM$JlzX_DH6)ETnJ*WE?V9wSzNT}uq4Xf0)+VBVYidP00}_$
zzms7S^gt#CU*}aV5q;RuS`K~3XZXeqQ_^1<i7s_1GCBb34AJ?_EbUvJ{6?hVyXIte
zQ?kpCA2XdU?@Xg`Tw^7)D^+YpF_B53k!j?nr?h**$Q#9`YZu_^;E-)atupJ$e<{m_
z21TRH=w>QN2DRp{djzi5ow-nG$jRNwP1<9Sxa*v!wM>J%ubtWkPQ+nnI}Gj7gnfkQ
zjc0}{3FW$1R>h*f{>m%I6NT!Afri;q%9VbZ8gH4I;6$*mkHYDY$+4#%qtBKFVJ}%}
z*-QzKt2E!F=gjh_;r0-C-Qd1xf2qe43I8b=M_FXa`u0PD2=OSgFj&b=Ti^IA#k#6}
zLzq_lX<5qdq2Oq^;Wu*K(ca*kVnuqlye%D$=&<9h$ukHkqD#nSO!k_Y at iDLsNnx&x
z&pU^`iIMseBH$7P0-!!?mK43LmJ=vkiBOSvN}?7a4>oNp!}P13yjy$gf86DS{5Jrg
zVjMVY!x2%hbKjN92wOBQBfxRwVq~RGwhT_T(&N}=PZtSC948v?EWjyni4&u37sFoL
zFRy&{DrmcJ>X$BUPAxltd$;XwaL^zmmmcYj9~p+|iKfeXsa__SuV4yfT!5Jg*L1d-
zd8Y5AL~RxHC&E%MUBU%bf3p at i9p)Gy;Bev>Bh!BbS8Z0tmpqTa85Ju4o)bLD=?!~k
z5({6pVRM9MKjnd4e>dK_gbcY}cZDb~&|trI840V at U}veiFLF$qUFB7+{2p>)seAGi
zt9-p4c}jgVtgn*K9PubA5prko$xY1Y`cu|Wl~2|S5@^81%x$Lze=x*?>zMyxVi*y8
zN|oBJY1k);A^VOnzocvSK%D*L&oiw+v)aHI)Ur;Yffwp5NC+ at SA|j%6Lp^VWhX%Xm
zyqU;yxYt>EQ{Dh7Gzd#Jj|B{}jHX=5f$IO4I|F`@^%`3#h6*HzL&4E6wbro>>5f3p
zNR@#i3DGI3Z1i$|f4h+T{`eYaZhaIjQ<k80SiYL%gSOjMbu at H>K)VusJ%aR~s;z6n
z^ece5ea!E{!`{btGo?Y2VPhSR)Z(92^@U!QQw?{5oo3Imvbbj&*UY~3J<p`yE209B
z>q;n4Wx#b`K*H2a(#Y|2J{)oN5M)RYU=`>m`NJ*AF6Vk1e=8jyK+AuS0N4q^*<bwn
zP=5-?>E%u1hWth5ir?f^>ryc;K#Juo+c%{MdBL%Kf2kb|ZbT}OT?1a43Wl*THF<x*
z<m}_`E+ytoZC*n|O)$9rsF+5*^N|(HdJSQ0A)E5`+^~%~6F=Hwn9G^vTm&@Vn&_Wn
z7L4f~p;K8<e;OjST(^jc$=qB9exfhA=~$7mKxwZmx5H1wqQ2r56AZJL$t6zrb+^rg
zb76u at Z{dS>lwgB#4p-LlK4R8qIDrqTH<vRMOMm%06n=sQGorcU0^k|16P{g;Pe25!
z&<txnmo=tdo0jS5z^`6*q4joIIbN(i83SC*dE!o_e*_+5*l)lX^=GzWa^BFX>RrdL
zOjqR9TIROSBCn3l?6!R`>C?y7;E_IZDADuERH at 27kW{b^6HqZq)8GTFMIpFCJsG+U
z&|Q2H{me11%w?mKp8R#p0p~q>;s$jRwG8>a%@CPP)@`Vh_ZqkFbwnu}Ki8voE1L8+
z?axsyf1pnDl5N?i&~u!KyXE9z at Dd+jnvKvJ7xlZT3}+TGmpN<OI@=d1ya#VecC05a
z0PYvcJdLTxBYF;xFNtNUqX~r&p2S*g+r=sbrq*b)*bTqmTc4?lNrDdWLi+!rfuxAI
z%1nYnk26|me at Juk!8<wmxAZ`R!&V%gH6F@{e~3_^z>r)sJ&mEgn}p$V2o8WkIFigr
zp2RPApOxT)B8BtD<puJ!d^unybpjaKk|TIda+*;Vi>s51TQzc}Bel}uzwbw;AG~jc
zX!IF&5z!^UYGyoy&DOgo_cu<?zpKmMGe~EU?F%*-(^C5Kn}=w~pr>Y{_k;lWlzL}#
ze>DLFcj?3RXALx(Ldj1YMaU}2UuFDrvcCeRV7bBLQi1aGtlE2POgf6C8*`kMzD at j>
zt4sa|J-|V4 at dKvwG~>7Y7g;KAox>F;61?F^IG<*wta~iVo3X8RwN=aAvqW|uL8*S+
zA`3Pycuge0^sbmRUG#Dr79^C+=}zWdf1jG9SDZ=0hfI`w5*~;Udy+_6t7dcOq3%9e
zPZHTH*<LL9XNNEcq})EFJ)ZsS8zBga8l<D#&GO;?ETpSL+r{nw<)dy=OdWmS%J`e2
z8^``S-TTn%`iDIqpmiJ*%0nib9=T$4XM6DA`CpAK)VVfGO7_l>&&5~qs`xQEe`V)V
zvK{VsFzG1HRYB}Hzy8g1a}~0pfO^s)=$)jA?dHBrz!T+Q8QUEHy-#@I1?y<a$Y2j%
zamfzsu)&*(vxZqnc}kyLPzXKu&&d~t?G#_w6-qg%QM8`cA6H!Ky<hla<pr^SW}RyK
zJA7!EDygVl!Hj!EVw})8fD;_>e at P*pQ~JY}I^N8a+NwR+<Wzp<p8Qs{i$Y87Z}4kI
z$N}E7DF*Bl;8h;3!WaeIz3=l77hm{%Z3pNfw&$D(#EW+`d_BsT`<G2*Nc<jf(80sV
z{_Z)4OmWVO3bcq^kj>P|kL&rg36neqlplDH40$GKc?kuEh+s<v#7~HQe_RrHJ-Ods
z*Lyh%NF{4Q_BSTm^;Mf4pIsZ0G{dO&zWvT#9q(AJF8q6cOr#7J4CueL``Rr5S&<u>
zkl4A)74&YmPdA(ti9J7N!Gg+0mQoNvGWol<|D6+!;fK;<7+anwTGkkz at 59P(TOt*5
z8g<9__8EJQpwZYc`VDoVf2Ki!2k}Bdcc=)aFeQJ^#MGm(!I0C=Dca^x0?v~x%&D9(
z4fAzd{wE)Wm4$I4gLDGAA#67sq|4g=m%^Womuj68JIGdX$j9XU!{ATox4e|PK(G>)
zt9A<`Np5gfXW>n66psW3Y8;ZZ?-5=Uldffk3ry1=2c%r?+<{sRf4gUfF{(j}V+{N@
z3&`eZSnx&*-~YVgNw6$mitphtjoJ)x3m?^1JRk61j?&U<7L?;4_Ed+FR>(MbDp?zK
zID~$qZ-{q!@VmLZXL|FnDt8?I*3O%4CvwXm3S`uriW3CAAvmI+?p4=5Q6XIB1K|Rr
zE%+1d2N$}ING~_Hf3(f=9ZI++16Mz?i#$i9uRVpDTU!{$gexhAS0>UnvTLd)lY at l2
zwLX6-E)Ol*1Q~)6KTd!9J&K?&Xay$!Q?7k>B)aha+*K)Q)vJJ+U%5+uLbU51sx5uE
z`zu((vAp%l+9TjRBV$77g%0tp3jv~JezT6|bvM%{OUFH7fAL(;CYB3}`H<1h>T8OJ
zE&FbR!2R)6Q at 2xfpG!QGW#d|X^(gNqBNfBi^lWhkplKuUz8K--1FR~rP#19WNiMUm
z#v53d4|Nxx-opqJPw5UdnWaKd(i(5Z&`qELnPGXXPl*ynv9CVv<>TWZ-2+x{G9IPd
z$m09gNfc`&e>-9EleisH0xefY-u2LZB0FBr3pd_Rzs$bxc0`=yjAdov<FX=EE4Y+c
zn8;FyT#kWc=_S at K2jTkd@ED_;08dtD#u57SYkZ%l=7{y1X3b6-a%6k|)F_DC8+C~1
z*-3xiW7}Z8OGhrXG^otp$Vmkgx_f)d2&cumRuxN0f75+%P~3iK>Jk6MGvTHBbnb?k
z7U at AQiUA7ITmk51ynZD*HGM#r#e-_oh%es?_jyRd-#Lh5`fw~<@^L%x`Fl1)$Cgyl
zA1MMa`JSiBVsw!8Bv|&+^5`_P%3lLbUeexZERG=9Kt%XD7u&gEZDzLpXj2o?2GPCv
zH>HxVe<a+?kH4=G^toxl{}__Q6^R0ajc)y_J7yevswE3fLGYw+u06m4SrXfJB1o&g
zKa#?sgMX3QtS9(42s{}b)p;n2T;)4*979pwbXwp?ukNg#6hxy}An)lcHyh$6V_Zao
zesQQ|QJZkGXbCRd-k%;%3LGUH^KY&l;4E!Ge|+z0GeAnO({~))O9!52DBQh&ErjkH
zj(g#WXh=q=Ji>cz(5WAQwjtK3?UqWe+?!Od4{Maf5mFM3Z^kH^EmHSUBafKH`o1m^
zxs4g}(b`Cf9BK`Coy1n;M13jGR>!P+?ZD~vb{d$Hah>m@)eN-6B5sC?RKJNC{c>}R
ze>DY>BHcQL;-$<5_z~NKsQ_A<1JD_T%8W{YO}V`=#nBHXnk5gV_;P<oWMSi;H>ge!
z#ofCja|s?fHrMi|Q7<lR;}b<#YA=d~t5O18FHLMJ?)itB$25|u4CeSS=JKC*zRSK@
zO^c&bx&dVS%u~nz=Tx~kD2-~J$QHy%f0h~0u$-A8o)!f~3WFOzhI+xd1bGm92XDfi
zoBjbwf}<e%IaN{tGp%;u(cy6{XFDxz#ys3AsGN*PXy6pa?va-H9C|7(52lRAcAJ8b
z%^sn|QY}I;6&Vk0mHSY<#g(%di|$(dw5taY$kKv|M-UkabH>aRk#=>Y$$6oFe<3`t
z({#O`$HY50)4k+gSe2q3ffOCqzl at +sDWZ4*fp!kIU%J207V^KE3P;G^uuFN(*4$Lf
z8+jy9DvQ010l<7MY+lIJ9>@$}$($W7#M at jEqqCwE&`TH=7LtM$O|@e2&#-lG_%EDW
z2rh at sHmdS|-i0t3nNH3Lk!~-CfA6^*u|i_1Sp+lCloNiOtIeqcJh08MM-}D=4 at xpk
zAt^Q#5mYU6cZ=^S5CV-#()r}&cIXSW*@qalf-Po%(W61|E75#!Bw{#`DcSz#Que^G
zCcZ&?y$_2ov_JFxy>QKtD?<N*Xx&L1u#c(*R+^E6Kw({{522<wQI at G&e}G at S$L)b<
ztS5rQK%O<ku2n|$<0LG+(Kxe*Gf>kxT-7mE?xb{c6VO-Kgt3(DvIjtKnq|`gxr87Z
z_LX`Yj>d_OD!*XQ)kB0ed+_(YdDuIfb#Cru$w8&e{3qR+L#L(O6{~kMI|>N<oLeVI
zX4hsQ(A4C#sb&O%%CR$Fe?}GfazfOdbpDRhSxG#-Zt9zh`NWqYci at s<QB88aJUvA#
z0jmjEnlZ}c?Z-Kks#DpRycRSPUeXi6qe?@EZiqv((7rl}%33W;V%voH%qwknCvK<K
zHd#0xti!u-;$ho&8gEoEM;)%VD74fK3pYk<v|&-C0$Z`S{slL1e{|br7|g(2{iRZg
z5P`nvKGiYC2E3wP4UBJ_?hLon$dH8!!{P)VY<)BwAPu3|Uyd{~x#QLk7qX_VBk-$>
zF!rah-<geJ<Je%E6oNfMgv*rHpEU$VB=6}UE7eo=y>3c^^Z06CO_W6*Jpl)W>!YjR
z8G?Otmu209=e9W3fAz9V#bR;GH<Mu#xmiB)*60(aEz-4yY=eUr;-&8sUp0&|;9MmQ
zIQB2;s$Z^U=b3Y8MN4=GA#M?eg+h{x>lfJWi|Yd(Y8^f^lk6Ni)J?(v(HX$m!P7i|
z({9mnVN#HwA={uXr@?pj^A00EfsN*Mb5#!(Q<I(h at thp0e<tt5G1j4QRJYO6ga}8$
zoFqR5;9u(jkqsz7%diLR5KuA>P at n+$DY{e?aR#_v7*EL0F-?mzmjkyBbtaSwm`Hf5
zn$&vQzw{{BsIji+E0f=FgD%rs)fT7*)|0maKCRR~Z^`=F;!WQdr7PDR*jY%X;%<K?
z5YPk_CIitNf8w6_tx~tfy~XKaf;C^@!Zu5ND&^AEs(;9i<hv)n2lG||f-OMpK2Z%t
zkY;w11sak0ZYtn4*-7h_S^W>laqoYSpnhloClwk`>jU7l16}9L4yU|W49e;|j59uw
zM|0zOh>sVF-S6a%K_~M_f);^jDpf(+m38y&-2d>bf72RXNzWpfRlJiKtO*S#ReM9}
zdz;wa8+NRx`5ud at Mbf(+T+&Hq%b4(hZV9=Iov;hDe7Mv&*l+wuB)FZd{MOt2q10E3
zRw0$I_*v8!p_31w$}?mLcoEnuB(L?=fR0XO1b)^WiJ>+#nBuCHAqA7TtRyGSIKiyz
zHf6aje<YI7boQ?z?O{ROnefQl6o3g1tzQr#-_-?%#Be2YOX2`$wvwIL!M0_- at P-!y
z*Tb%cGv#15F~Xxt#n1;iR3a-BS<w>A?+nTe^uDx=cx}w9a}_CMT%K(`&c!^-y%WpD
z?^}K&8ESI)vZbI;_yx(i0kx9wJ#zP+?2Y|Xe_y_#E}6~Z>QlF|VVSX>)@GEYYWZDy
zHwisI9Unc5LWzZ(e_J_r+9dw5m5z09hk!Jb3dJ$fizWdg;T7(nwbRg)_I=qV1&-7=
zC(*VBtu%3GLWZ->Pt0ufKoT<f^KBx~{^iztW!B!ca_sq;ZE<I|oHMAn3pzuoee<a3
ze@}Q at +c5#QM-|(#$gf?5Up=0h!0-xYO%{aVXes>QEHxb+ZT?E^?ExsVvJw1*)s6ji
zq%Q^;S^p{UUZ%b&2k1oW$f2S?%$ugHIPo!*FWDV<Bu!q}L7=ytlNLxkl^wtsABc%b
z;#wHfU&3|K>4YXbc!?rdKB#Cf+o6mQe<Y9_>sS+i>kdVSfCS3VMB`pe8$O482+W`I
z$bz}VbiHN9f5aKF#)igMs at x2~6D1vJB3mF1?M`=Q(1_^u8z&Q at r}ueLSWNLdcCnyG
zwaMEP0D3{lb`9m%Kw`5^)){iBMv5XrL5Yjfc@@+g{o}ci3seJyUrGhYzwV84e?ykt
zn0*f!)M~l0-02n&<Qd0pNvy#k<q9lWrQR%4Plr$u<}{iwCaUrxLwC{m%4kNZ12%ZQ
z5Uc#hYuwmYm^`Wtl|*hd>4)piRkfj|j<0WX2*l7oU65y>fS6#3Qw3*v{<N?eEo<}d
zJ1%Qc+9m<3DPnr*hPpx-)Cr*Ce-yiy`~4IWA7^sj_29g!_p-=DeEchB;1MxqDNP^d
zZ^;UB#o`oM9$`E$QmE1DU#9~R&$i2t%q^FfJlh=mXgqH&sMtinsnv0B-4!FX;D#`~
zzmAAYe;RsLw;<luh<2Ww6I~#ZE1a$_2#UI|IN}DWzKGdoeMd$n`yZLkf5>th;2Ky)
z)V4fvgmE4^I-}UjFtDj>y=`}fPxQB4m&Y=cGC72>>Bf^YEyodBp$^lW3tTjI{yp_7
zv<i52Y_Me25=|Zs6(W)!EqK}9BP~0RnbNe524nm?yt--C#ef%|p$;eUmZ{4#fp(pe
zzne82(($IYg at aLxT9n30f0vQY>DFkc$)16A`LIHRe^oMS*7q(Kh^EaV`5oeOnpcU^
zVT{m=dhQs_uK%n!%}b~Xo!`ARwm+#U0GS at LY^xj=YW at -$?fDI~$e37 at W7ghMLmC<T
z7THJJmuS1%e2uD at -ld{;GZsf at 53h2P$tzIBEaHA05_cdq7RL=be;v2oU9;4gb&}E%
zuZgykC}-_shNb?`URd3rL1uwFR!GBLx~O%LB!RU1>xb`PS%1DFm2c9%R&&|Ouf_s~
zXvm(p0nM$5&hv!9BfQ?E9VO8G*Bx*@yVC7t+{`xau0Z4l;r|fSpp*pnrkeOCP!qT-
zKtnR}HZUD`c;n}lf0R6(sx9_*6|jes1tj#KR1Bzy$>ws~v+fMQ;3Hn+$4`$+_KJzw
zDkw3EQ3XPQ0LxY at 2=vbBGf8?>M$|}IS)Yb0zte}Wm at a`Hk4~ZvXAK7lH&$$*@<?Jk
z>BQs=Ij8G_%PbHqig=ATC(D1~R_61S8x?niw59Z@)g=p3f5rD2+E`Tc=y!~p<)h^X
zv&;`pX2l>jDC`kWwd&_)hGXBzIs(yOS_KY1WyBXR>)%2)4LQJHQ+4yb2ed%w5wpA~
z1xuQXJEVgjj680#JF_-DC>C97hjQ{*3+kzNo8B&5w&#9Rq}f|%Rs-Y%8HX*|!<pDG
zXE3T!X=6$+f42s8F3evxJR`Wh`aNauvMg>c=?BQW1T-Zh4OUC)7#f>~sHr%#wStu6
z2Ph=0D at jOSb;oQQ6&&B;5Tb4<cMr+FuBt$XJQG;Bq4%y(aU7Rj at HSJz=;sJ)_`Et6
zP(&d5Rk<t;XR`f+N>Alog>g+oW3GeY*^xmNF+K=;e at -t&gE<~xu2ttJ%05Q6AZ0pO
z1NZiCvGfJ~qDVuHxS-@|?}<ho(t>Kk=B=x)*_BpE#EF|mD~1$+%mMZJ>Y5)Db#j1%
zMR~l>4o#kwsGnG55>iVu7m%;Uhp=4<Q2r6oV5?5g>i(cTIUzvzXqGbkm>(nok}Kts
z`tkAdfAs#m;oCH>BT`s>VwkI=1#jaHcKt!lJ~YcVKB)o$B0=Xj)`cZJ!4A*DwT68_
zV3Yz*Y^miqU*6HS-Pg_TqGqR%CA7Q#QQHk4lPq&e&#)rAXm#V5?D)U)R4hJH0}#_>
z-={>XPs_Lr?ZyWs*KWaVQx>`K)`HnDScvcte;TDs`wG<2A8rpfnKGpIIm@#`?;Tzh
z(j8ILs+JRP3BQWSdpH|m;f*Ls{~KL1`KXxd$j72ti9qmcW#u^;ZJHfgwOq{6cwb>Q
zz8XMIz_7GrxDY}||H01SWsOnfaVvQx>MI}A(VzMFCZGX$)ZIGlSG+YrO?)gVE?LFr
ze`|L${_udm02 at meIrGAHob6Mu8V(+)k`SO7jWs^se}Z(uA*69wdgV<%ivs}zbeT+v
zluO%6QGooN3hmnoa!-lJD6DERaV at 5CP}?ByS}fF!12aUv{BT*=(oh#Q_%Y!(9)nL7
z=`Fez;KsIEMuY7R^`9lwzZTaO!^PWse^6!fvigJvFljkTz4uw9#1QuO$)7weFerHt
zj`CRK?Nz*HBXro`ErO`4e<7~t3MhM2$hgZ`yomB*5P9!d^Zy7_HxBq~%$L^=aKURh
zjR7<A#}+^BTcS8{$py{;mhbh-da9a;?V$Ay5aI@%I&}lsJH6QRV&ddvY4b6!e-;sA
z(6XP_+Xk&^L2GHPf4Vy;L|F!cxVg7ZUk-A55m{;eVh9?k;>yF|+>N)CU}?W&Gu$tW
z?m`tZ#6Q-e`c=8MZ0e$Fn>F2sur^scy^`V(l$|WjOxxQa4cYvUO#>lE5q}bBX`IhN
zdTe$gmE4^55BZW8CF$Yl1x}dSe|JO#D(w+i5wqsO72UiG+Z|q|(oprHosCsOEji7~
z1y3+?&*<<ZVf~Ga0krV?yV7rm`~PTOnNUF4N?R;%&QIZ7T^;Dr+0rn)kf+dyx;cB^
z>mK2;>D_<M=Bx5zW?tg+0?^cFxEVq9oV3?oH`=afK7Ea2^K+jW@>|>1e|!YJ*u<_u
zx1JWu`be=H_zV1X9v-H1$r3)AcQjPLgY7HQJb>*FY{c;S-fJLl;Ap&#KjAJ=uGo`K
z-q#U8-s_~m<&OSN_$lCa-KLSjY4^F=1PMqo?V0Ejm6!|Hp(UrW`wlKOpbFp1i$=PX
z3~R*2Pp0 at 57I3Hes%r~de|%SbUhLvE at luYDjoNP3K2@$3xhS!^qi`x~;lgg=twHur
z*w~hs^)nrc`|J^f%l>gZ&@sRt4e<jDI}u=<7P)UioxPR0KVs#~HszMABOb<<i?Sst
ztHGPb+e8_>08pq;nA5(tkJ#MNSWo&aD5UrCd^sJ?*14>_!u-`Lf1!i<mvD(Gk$;{p
zCd0t>_x{5lk#pG9ak4(RpgXKWQcJPivhh1+p6qG2bB@{?gBz-=H!RHk5`J$PS$ASr
z)m2v-<t+i|vk63RZ$W0m^Cm)<9er0R2=4heeih5PMAJc4uvCqJ5|z0Z?iH8P=lJ58
zLe;?G>9vNUn;u(oe=}*bC_f6J+dEBoMb*|HI at 33=;5H3JxNR}{MDG?3(+Pgg%?ZgR
zZ%uk7&<&NGTh at 2MXn1`uh~dmU7u{kKk0kfwXNElnZW6Xabg`o)loOReJ%FsnCXcG?
zMeD~*=z8Q=prnGz&yqI<0ji<e%HUdBgXuATm#2g#c}IX7e`)?+$bRb=aDeeoit~<d
z>Re^v{sD at CNRsls5X?WL!>E4hIyN{#AirVFG*^AaNwV+7e%L1$5TcVOH@*18)PQ(8
z7&*PeO1{Ny`nnXX{+~+4t*KaJ5=nqVzNsGvU at VnbGmQRMa=_>(*wADKeG#o@=IiB~
z at N7Eit!r4Oe>~oKWO~;ifT(aNNwN6g7q at f`z1d at 3EVNH<#L9qol!DZKCxs at F!GK}%
z8aZvxM1i)LLF`eTNtJ$nlQ`X$fVK6UMRM~_hIdSmoGdCA@!lJ<x~8)H`VPL*#Nl-g
z-dprE$OxEnmKEZW?(7N(Nx at QKedsEHNd*~c at PpkZfB8;dXo<##0V`X^+d5VMSh(`1
z1=m0;zh}Di<j@)8)^5m?Czz at E{?XA2>1exw9JMg|0%#nCln!o9>838;FDWNBXPQit
zWWLiKQdhF1`>;9wuj|00#)lk*{>O|5bl~Oq>JK9a09jlmCm(`&`9r8_$jTM7sL1Yb
zF+P^Se_E;Je}SN56ZVsjBlAA9#5y!Qv#a+TV&3L-75~q6Gel3m%3z8XGqCjh`In+>
zwc_{d4s)=Fb}H$}x`=GDv~6_W2`h4*m8LsDophQ{0GfP?=4tREcU>BT!ya0?Wi^eY
z;%xp2f@)dvRKuJdd!NuVT&<r*F_b=IC=rYGe}S>^xDrfcAuT&&CWelkDCOprfQES!
z49p&t7rrfJT?sVkx&}sJPFkUHfdN%40s$aVjDqTh&M_u1>FO0 at 19rI!fAhcp7dW59
z_1qI>(~Zg7)wp)cADPnCD3mWk4i~t9NO5!~4o3F9QfL`3&OB7OJ(CuqRr&?<6CzC-
ze?aK>>JJ#25rg7r#KE?bv%16OPSDMfgg|($vi>lwDTN~!EgxkCk8h(&dcx66M+3<1
z>9$oAk$DK4y#QDMG%#Tgvire7 at 7%Fh+R-REVUo&1B=d_!7{AgP`lxB_Ql2!@TTbsj
zT#5El;FSOzUxL5-hiNYvls^k2>6K at Oe{?^NP+UjO2c7VXmWYTQW<OwExR-EpO`!)0
zMg})mV4;fJ|2{xJ7<D4LLXH=q)X~}4?^aBz1mvcF&Q7VL*!pE^CnX#+ at T0gG-I_J#
z?*rzhoL1y?MEC&!x(x3Eg=l(%85FZbu>aP;gLJBRbLOTnw~p|7-&vl=bsCC2e;s<t
zyNCe?3+m*!$UYCc<1>F;gXC<br3<;HuEOeC?`A%2Oz;&t-`3>QhgzC-C<8l$zSw0L
zA?-3HKO)a<0WFPEooKLaI+h at dCQ(x0<$)ajUVV$}{>xMKns5kF6_R+Ce&WW4DPu;8
z&1jG4yo0`bpr+r}c<=(T5c`*Kf9;%@SFS+-!t at +oQ@=#7Mzvw&R(MIpgZfuFc8e<r
z_IX-?(nf0dcKL<5Aj*LY1oI;Mg&dZb0^|}1)~yM-+d-h)#HHoMbBDHF=9RTzQBN8^
z(mVDNmj at pMg`p3YCUir$cZ_l8Y|jpz5N-UuXZbG`)k1Tbra5PK)PLicf0P7K`&iZn
zN4UHocjMieOQ9%vtIigP%1_nlQHP=EnWmzS5zrlnx6huXU)lXj;EvO$(F!`sj~ZoO
zsjZ*+sTd at 5-}*lvtM)P&N6<);kDsRvpJUaQx+G5WZuAu?k;kP_>zIF;VSLduuG}D&
z3e<nBCTQjYrHX4&?5f+9f1KfcUg&Hk*Ya4Z`KI5AO&o~DhG|3_!wSRJhJl_*t`l4%
zJQbl-JdUWHevKUCTe>>G*d=`3hvocvK=TUYgyI+{u>XJRdujz7hWwF%#-+GfY*@nb
z7vRrmzo_Gul|Pka==6^U at SH+kf{93VLqwARJdQsr{1CLc(yu+ at e{-E_(zID=)4~OP
z#mf;c9PpFskwEe1f`yd>K}v8pZULb at VeC?4g*zG2@(^Rmcyj}zavTWwtyGe-!uM8h
zXw5Z0vXV#<$Wa!HG^2>A-$k_^+L3ZBL%%w(M8nvJ->ZXdt__cD=E_!1-k1GiZ&=%G
zRy+wI8>Wlpt)1M3e|%R5 at L^TTN>_RM(proeI&k<iYpH(9OZK*xlaP at bMO|>qe-<10
zb4}R~^R&p`OJBeY6^w<{C%6Vg{}$AfZE0K~dT9poDfpHPwmyU{rMV71AqN|#lItRN
zoEYx%Jo%?)!SUpTr7w+6^q1RKq<y>6AQXxduu<yWu2gife_zD6_C;R=O^rwgWxbCE
zmdqMnNgM^`B{ErG)0;^+(T>7IJVt}(KaOZ*e5;$j(&lMhK%<kCR4YN1Xm~pavb^0x
z3vq63xiI^fV`gPs_65R6k5JTcV|pydtAj#`IKi_H#GENjNzUS?c&2@>?XcD=qDsE0
z3Of8X{Tylge<yuLpusFh-7r!UDQ7uu{G`Le=b~L83mEhwk-KqdAVgcP+6U7Tin>pd
zi<9AN>=BxT7)joJ8l#1tiUi at 2@QT&k;>Vnw5D95b{75w}H8oElbe*3&i-dw3i!_Z(
zJLG&c;FXyi2*u}d5X_GhU^52>|L-<a(a|F=_j}IQe at vDQa*E0OrcGxO7Z at HjyH*U@
zhZD<5h7Sj^@d6<^V%}=&ZdrRR_eX<od#jf|l4bjO3;901s4-T1zRWbf{`nfQLZ2dM
z6V@!f2YYNCO5S=+Q at m3a=qMo7hKrT9e(cTt_YL4L_?#n~JJMpbB)~=D0PZ at V@=G!$
zZW{7sf5T=WNXfS1EkcdRv?$ptg~fOh!+Ar{TFHlaowpPX?Uw-yze)e)An-(nXuvir
zBhthCE2dAXW?OK8;xNJxizPb#$+hnihS3A46;zDxsRz<lK&Qbh8Il}M(+>uRKnO03
zM5BCI8NfX6nF6bkbxlbVC2nW(xD6w424^M8f2u`)Z}+m*O*L~m)HC@}mPi9x)&e{s
z^rmr=YI>A}6&?Q+Fg%j#ufE?L)mnlx$#7v-4BxE4t!&7>FAkSc!@p_<R_MC@^G_|Y
zK6Eifuw$o7<uJo5mgl!he^f0h9K+!FftYeP5BTml+SjHvcP?eX=gBQ1ICe-HB#g(}
ze{X8P^Z(qPTQ<Mj&Dhx%dS9E%NA-E6;pqm&SjWljR|O^+_|^zYrXhrlRJ?<j+1&8X
zGCt2JYjAwy&zQIkO2gi6r;Ha#u at +m`KoF}NA#U#wZ*_HBVi6hQo at YJ8>?ut?|GiKE
zPIOqL{1(O?KqGHV;kE64-zY=pEzsL{f9?+TI;kGtaQXmT(+JV&>y!IIT((hAVcMlp
z3g;5Y2NY}nxFwe{1{Fst_Ny|h%drv{0GpE)T%OZtNIWAYEOp34VpRAYKE~&#cf<he
z-7|aRLHZEkwO=tn`Xqen)bKvI7Z-$PhcA;5j&bmNdAfprdVwpcp8xd^dCjb>f1kW&
zi5VmQHL37}3+DZ)@B|nJ-+WwCxP!{AUwH6^6;(P_%LEy~CbXNi{ecU9$~GwEHBjd2
z_21#20TR~e at Q?r7C2wZ7nA1tExc*ikX&9j3<O{ZDCR?CTZ9m!H9tgk?Q`}~$G+NZe
z276lG)-p1L%b)JqW)`LI$$#~He+Ea7D>l_kW%ix>;d!`7!Ric;R{QGN)bk)9IZENR
zo;;=P;SP@`&;K}1b^2N27YWG`L;kjy7C>0kD-dPrx`>_-o$YbG*{c^O*aSjkETz<1
zCuG>bg`DEvZn_M2YV02tw~6=e_+<ed%#q+WugouabViWR`;kGiNC`hFf5tv+?=qVv
z5*F%2w%L<QsuyAgcXh5=SQ*5ZgIs;3W*f1Rv8y3Rx9=|_h08`?x;``3cS>F}Af~CY
zA}H27PmX*Z0iv&QCn*qzk(5)8o}QMJgwi325H5*S*4^DFm`8(HZQX%S6hAS~1Pa|v
zf;!&rN#xx+5a*cPj)-Pbf5cHs1}h&D`o~4#s|a?Snl<e6&c&prG!Ms3GQK~-&wVFr
z>5~|FJB+CEo&KvCE|ZH30AluO=<aA7-y@=G!k|Jq)gZ6zLL6-0{hvPLA>nm<`sIZQ
z2M-#$Si$=sHGsj^&;7$IcC?~dF=^0_oYy_s+z(`7JR1Z2nBwX5f1(2)hP5K<oCTmq
z;oCKfCP+7=Twv38+Emn(2nofdnN?)G-z{4%{WBkJO$!qiAL|ox1Z1lGjRb_{V855Z
zm<n97U`$}b_bJYX5DjtMot+TdGj0J5G&%33Ztfj=<Qb?z%7opJg>Z+<+<KsvQIol-
zX+pba7leY4jqNM~f7yB_AX9_4$TQORzM%pP;Dp9YqVg5#hAKd%TNf;!W>fcJ(%DYO
zI_u!1`#DdL=<Q at 6Yy1J7zX!{$37L=zcm0+ecdQIjdp%t2z~>?QE$Pb{qe9+W(gxkM
zeds8Xfk`K&l=HChd+n>hC(=cq?FlLt$oFVVf*QJw-?%4Ae`ssw?C~XiC1)zb(dH#D
z39i9rgvV{>b>(|p1b4-wn_lsyI<dZcn}>b~YPvDAmSkg}t+<v^MaZ|9Rj}&OvkRD@
z8nX+CD`S&lQsVI(*Y{Fkdv_b;GeP;9U2{dp9WroMW6#Uc-4>1XGWTCd&;3-0`KQLh
zlUBH=qesQje?Y7>7a*+ej*q`T<&q0rx`Iz>W+bzH*~O1*{JC`({K3C$=JR}!Qj!%D
z2&yE6?u&A(B10Q!6tB)kK(?mTzdRc#vO3b{jlqafq(o~XHdx*!i0yebYbQR-oz#+N
zE!d1dC8!XRbZML{rf^Ik8I;!FL>s4Fj+>3US_Vw;e=A>oH>iUBN!}L(pFTP>o3Z0_
zq*O!hOQU2jt8PGBexufOiX6z5(+=`zuJK)bPEHX{9SGJp;ge1*oFs{@;d{OzV62Ho
z at pDgkG(-uf{0j8NS<DPCfH%5dy{6}37O!XJgzBH^J at cS$|6YhlOE==)#i|;uG7I=j
z<8Vite>m7M{5=hJ_P(~h%V(N$HWo=_WWwk}*7NUCwbt#ccgiuOI^$145gPHX)YU<T
zABfv1y~>&*G+0cJnjqQmxvANy-(p%ik!&IKLazpA$r_0{9e<gZH|_GD1!$1kPM68L
zo%6#z$%B!AVkL`0ON^f+lYrqCSc^%ccpw;wf3?NLRv6n`FjqRmpjq0dqw4x`wVLe%
zC&xLpn~?TNI{Pqa%$u1Hk|cXIAn)2pY$$#BSgs?Sm*1=T5^U1mMO!v0ACxHa)8tRc
z$FpKCsiPZ at IeTdUsyn;Qe*hT<U~gYk?{imsH^JYNR3v!w+2QTw>HK&Wq!SpT%=<!X
ze{rUPMgou^Q5ciStz0GD-y7L9Yq?yJicf{K;vK`5svja at iImU|V_Xk`1?Ud(NlKI=
zE6^=q&2eFPKl`QJHO4d at rvP^q^NbHhRqI?J1%JgfcA&3RW|NTQ6UJ=zJi at Dhx7SGq
zm=#++^u4!e^+0;`ys#~MZ*4UJ5BH9If6*a5nRtG{_xv%{dU98m8mKX)$}%?-!}qZ7
zh)f;S1nLg7^`~qM)CLD7kQy?IzxDAFw}lSB+#_j|((@kp?6%<g$_fLo0E>>K-9m(@
z308sQ<?w_~evKWv46wL%A=~UeZhiKI{t2M?rxnA;SVLeiyKU_pFO_)pCqGLNf5HXy
zqBXU=*Hr=cx?yN<B8Z8Jc)u&xvd3Q83jFY%Gmrff?H{qnLOyHH>RZHphNpP9-+*rC
zHgwDG2vQ)0o0BnU1^Eoy`A at G(ZrqTWK+>rb-Hz6yFPH=cQI&R9>)lUxo+QR0L>fx2
z1l7W_gMJSVb1*^Cq+&!u6iyb8e_0kKx}axemjo6$mnOT^1q+-{qFM_{6_I&t_)y<A
zEb}x=-jN`M5EYQdZ_Aa#C!tgbvb0A#aNIQ-YCPzO|9JEufk7h_CU1BTQ4}FmZmcbH
zMS`Xs0#(>`G9aQ%ptoYXkhGRxqnUXa#{G_7`k>1!=?7aUkH6eIA<CSwf1>$8QfplT
zYxL7LY~kj7o%W?3Jxf)C<RadQq&$59V`MvSNzrN6X|WL^K8F%yU at x<IRsU96%p;Ij
zffCjbpkCP~LfI1r9VzqVw1zkV`_P(V^g}hHonuynO70r1S`N>+qHCL0Fg%~5UpjvW
zz9 at NWZ;GGhL32^_P3O4Lf4Y0WUw~$_#MM~%N6#kZ*%RXV3rwTaW_fPajC|2B0mGA)
z`Tw&}W8<b#rU3t%`NH&yqIie?u8?AdJdU)Q?9;kR*#$n;$!$SFN0By5be|g6sQmz+
zD;&~q2b!^T-2z=&h|sO+UdlH5$dq4Zj6}tOLm)CaJJ98yLhISkfBZbIqCktUp#;S|
zRpTR9jQhp27sS-X7}uxqp6Ceu;%0o$2oRKYA#ReKvZSiM5&4px1INbjwOqU>=C&(8
z>){}Mh7{Z*uWd)HY|ISfbJAa#NbYD-+mqn~T%4A2$tcL52%!z^|1oE+pPdibg$6f_
zm++ at 7OxFdVGh#C2e>9WuS=bhvt4am`*)pH-1>~_ed#?L1UoncLf^xe438FNd;ma|2
z(A7Y^*aKC33b`L&?a9#h{r5Qq0$|Dmp(X(W2mspOv at 5i!-ot3+sN14WEe4JrUWsWk
ziU34}eFh#24z8<J at qm31-Y(t2YCqv=@Nkx7hYECM=_%r=e_Fpm@^vfg$AGzkaP4{s
zl0ZWig%kCla2AI4ep|&mVoW~gDp8 at A3~QO|hr~(O8D^>*mM+)WG&DMPomiI2)gpL1
z+fKdcXxF7#j at a5fR$|__8FKY_j}hBmPw9%o$+Xq_lZa_U6lfPj!}v!>ucRjH)z>#(
zz^wb+S}&5$e-(bIb8ak_F<0YBpycy!Hte_!#iK03GOZ>%y!f+yHwnAQdH#jMSQ^$n
zs|L!S$>b-N^kjXaao=gv6UyPjm>L`vUdNYNA$n_JFzEp-zoRQVr4xC}Fz6l#UQ at 8E
zJsk>@a?9Al`cyZJI5r#<O+V&0E^LSjp2H(X at GdJIe-Mx4tj5&G{8zo3-c~A9HJ9kw
z<D<UBf+|&+a20}?R9*ecFsp7FU3bp9Ea&(<iphYA%VsnXwQ;y8!GoHb`8jRo<-+9>
z&Y1=W*dpy{X at m`J_Bf=4TT7AKKTZbeIOwf?JS%DhxnxWN4gfF!c2p>&IZo=O(jk7P
z8|{i%f8+V1(Z~^%C(%o{Za|Uj3?91rDwIqSg7?WcLdobT%pLm=g$Fu%V^MtN--ibx
zLuVSlw{f1}TsV^DNCzK`Im`)?j7^DIqmkPPh?1J{xH!r5z32eMrY{@<G=`+3NLu_o
zF6)zaW!e8B=**OV$%Wka at iW;tzV=-*pbqI~e^EC<QHX11n`G}%EM>yJbh;)ot_FO5
zLYu(vP|9;Cr+HVZwr0d7i4dj_5pwbZqCnv~^@A`-_^S+eFf5#UZ_O`UpG}Ywz at 6$T
zA00{9bVBrgtxv;VR{GCe?pCofD-3#z#SHjDQ_j0eqG_L?1#yXoHssH<T3v8Z^K4|_
zf75!J5`d)+`dH^U3gC~GiPI!qYF~(-YM8l2#9n-$GT|YX93~`)kP`#8ek0*jT~DXj
z{Qu8ix)>04^EX(ymC1Uq`(wZiasrMrp#tAU$IDJ)@>pgx8BG$v2{u&=UCQt?7(GXi
z=*>;~egIuACt547ckgFxL?^`<{L8wre?LNSqKR&Pc;sF^mMxi8DW{noG*G5*<@w0b
zza*n_0~nlq^B*vs0zFoqAl5(q=DK%xd4lsD!+7t)kf|s73&p660Pqb7TP1KZODj^#
zA)n-cRhB)u;Sm35bxG){qi)1W3<KTnRun^5eB{i?n7RKimU(3VlfQG9o`0QRfBivh
zg0NzmYVhFCM+!`KwRXs(7(P_$$072%R_Dyz)aB9hbUl-{Q`C2LWtwv`E5F`3L<RQ-
zrN5ZFW!1(w)4<yBN?%%I4)!-Udl9ciTd-!6+Utu%k`^0t!Tmv31UhYn@~qmmDS*du
zEts-kOvj!}Lm=#27!V|oY(6r-fBAJe9(9k6sbssNpWRX@=5${)k1(pv0Jsliolita
z5svA#pOL)hkn}&qRF%-q#V}P0htKOf+dlmha;;7*QMh~;)Q!&UhLJHsCHRRDuLNyT
zj6WK3%NUgCGKkk1HtMpgu_<&flr_R|aX!GWWGj}m`m+n_6{@I>_~S0vf1|jQpZfpq
zob_47qwk-oli?V5wwB(BD;_&W(b4gkE0Ogi9xCQ2^!X4_=G<eYZy6*a+0$owV3&iN
zdv>J05zH3EoQ|&qln1vpfA`4eV9IauCD7r?b at fUAxbdY8M@V-8!>Hwc=G);X))Bz<
z17wNa1YHnMGa{PO?v%A}f2Lg|)#K*7;O|jySt0{-T#bsx&DrcYSv`>g_z~}lQ}Ju`
z-N{E;w?T%qnY2(+i9IBNGrDod$K4#jPE9(m{K4<;G#*hcV(krV1!Vju4mfsmDn0=l
zzDp4tJD<w01JKtsLKhp#y`F`<QDI68gY83ph)|-Olc*x+E4;ice|LkKseF)8&TI0A
zbXuf6J_=_sh;TGma{&`Q+K)d~t2YB<AM1;{a?0`5hGLnjXEsPwbN92 at 2q?%$q$sF%
znNhgAooV3ur$SRbbOR#*aan=7-dt|6PUI9ozsb<#J3qVV8D29-?0N#}$P9!$eyF at b
zKb%<`S<EsZ2*M6ke=VNC0dyV0(?^(RyGXGv%AANA+Xswa)Y14)`8>|mK$>aFp$e-Q
zblHV~*FPaguDJN)m4+MN7H?}(MT=H(Y7bT~ZE7v=c62w!kuoF070Dw^VQ4jQN>vQ)
zRn6HWiY?`B<3-P3;4(ZEB{m>wj!OA+NCOXJyu=O~G+Ju%e;0s}^y!8f5u*|}RJ+K?
zNv9dq)gq6>57BCYZqBoM=SB7CHMvAJ9rV7|_DJUXMR8wFo;xQZhTuQvO51_qip%!W
zX)k!?ELvuyDem5Xm(P-Hjmu=gS7puwFWuQsvq$O^&kKZspfzU90~2%vNa)wrPnhlw
zj(i^O2#m2df2`@|RPiI7<tbK87v^`?BN2Q4EIs&p at MvUEj*lX19(k%UKfbk_(Sj3B
zMSrBA)*w_`R6*i?Yr;O$yRw>~*dxd5W_pFGMg+ke)ZyE0OF at XmUsqO5f=LvfRj{~D
z1b2Hj0ztr}nkkDJO+3fwbqrcCvKH7YN9RJi`X}l8e=3JS>DOH61*2<7lqerc+>~fE
z+8?ADHc;;f3nZogt`_Tp0ww)CjCb~FJ@`KQ0T2>Y_KOC1cKyP9prkRl`lyLOX*5Pt
z(f3{ChPXsv0`E}uLHRMmpKjvj#Y%)%A^K)F)DDfvh-JN7RKR)ikdO~+ttUdO6*kuQ
z+l(+Hf1)?bm|FH??aF+qqT(XB^r!bX5ema$I+p(U{P(w>4bg0g-TC5n98}I%tL|p@
z5R!zRMz#a*gZP#y9oo`wY8dEmKp>y~H)rJm5%=L!DT9-?6gNVUU>V?q_g?-5&HotA
zbMs`6$iU=#I{liWXFv(Z8;nPR8dzt%3TOcTe-t$8=p}VudEX*2NG=3FH)a at 2%Om90
z4r%oj!Z0M?-mM{eJD?A at +hEHlbwGECdYyzNA_JTubeL8uStGMN8*VeQvcef-BmOOs
zK!Lc#b?ds?UD3IH(u&uogI0Djdz&gG+<Ap^^CB4ZO7LV3kfI?RAD3ivYH2(>{eS}j
ze_s|#&3A2!z$$uivLvq92%ZhLp}!La_t1|>XMu^Io(V1j-A_XdDdOBiAa40>O1P`C
z^_D0sR0qpW+){}A{Z!eYo!|ao!F>r?MkL at 1H6DQTxVlM?L6C#ytW!V3^*q$wQX`Y)
zWTErqtH>lkZ@#>Ug6~>W2eHlxK?2RFf6Q1aX)F5Xfs?YIAE={P%c5}j(8Iv<JE1P+
zSS{zPZa*>0w&2EQ`*7I!B-xG?qC=__ezjh2^yCC;GWpP}87T at mZ^4Rfi1l+2m`LG<
zj?nM}&Ycihu at 79HC&t9RXTrc<pZyNX$kt%)LpBmu$wTSnm(~++qIf++;6Qeke?~y?
zwtPj at giZR|$$X*M=0xg#8GJU&vc`V-WQrS4-_Rw0kS!bH1jyFEp0P<Y{hp!Sga7;D
zu(c40(sGj-<ya>HW)nE#NF2i{MW`moku(CBYLSDKiGQRqD}n8_PT<M0H}&Lu8;Uri
z+f6}a_+kIFs)X~QlCn)YD)20ze?8$QzTC_ at H`eQWVKYk at 9M_>j8VR{`IWXpj``D at 6
zca4-*1ZER2fMwo``5|=Q+#`)MN at kFbDY{frzL6+|xQ`yt#P|+c1OY2!!WsaXNbX5*
zuf_s5 at gg@Etk_s!UfTXTKhibtU9 at b=Vu;kTR^}=yY_sW at z<~nh%x)LHf3u3^b9D>Q
zsuon?IBhXxu3|k(9_U at PotJ&M46^Q3_YE|M6g4tUYd}d3FD3Q2G%uyt$c~4hT7T=9
zvZ3Q|Yzz~vvL4q?Z%G>NzC&N<@h(eNA>qE!Xx at _$@A2%E8){*OPUHzARAlKn9#bRG
z2`S`3<r;fvU!l5(KZL5Ne`_zA#SvjMNK_TUE+8n1aX1!ErpB3t$UuRiUuliftl^rz
z6L~ojS460jU69J%b)xo}LHC;0+!W3hgb&({&5i at mq$1B6#s8?fz2IP?`~1w{V^f?w
zA4G5=Fp_s#h4`6o-khfxo-?+l9GFdh!8z?=Q}J#h!rRDre~2EKf8^_|>ST~5EdLyC
zzwJa)i*<nN&GJ530yFmBtl0cz775b?zmUo$kYM;kuXo+Q$vgzS4(l8AD6e*1PxHSP
z$`1X at i!?fkhQ%3M-z8iXw7?h(S5+K0wg7wB`Y7g76j*Qg)~r!_X#79zlL}&@nv+Wu
z$uQ?gTc$+|l$_u_fA8(HSk2Cesfc3F7zl6*L<$E~R$=$I0zXX0TtD446ib&EGmUIn
zYe&_ehIBPhZWJGTjMn&t+z`lX at YrM3J9#HSt&?vyC(M;!$&xv=*lhh){4<te619g6
z8W_r+1Qegv^b-M!B>vNjfYMOh_EL6dM?C4?Dza<t+yvAYe-$Qdig5ri(%X6nypUt6
z#ZQpll$u3{*{zb*e9h^BSN8Vvjxp*S-?d;?=cr&4zzK!-kP{bU3(0gQ*<57zP6R;2
zc?R)pBD`t2nh9UZ%a~0sP|~C{8aHl>n6df=cR{q$u!PGji;s`9EUV~hW+D4#@yE=~
zg*Xer+`Y=Af6Q8(ybubmO`>okhJLbMhtaM3_c4vE&Lrzq_Zw+-KzK=JWWcpDqx)s8
z9-lLZl_(efb=+2xnfN(&x4QbWQexjZia-?1xSb2_hZha~;&QGr>?wEK{Q;+NI>I1m
zOdpu|yXPMjPTJ7Wz^6ZJQt(zUBNgqr;A}5L9P5e!e>$yOF|e84?DGP3h;Mtl5IWN?
zj$pwvOB|%T+Krf6aM;Jn?!`;-3!^|;4YKl#BZ4}=FXS%qOS^VtG;id>e+ipLRdn`g
zZ`GLgJ;h$<|C1kyab7qm`QD1di8d_g;6`5^L>aNQZsJ^RJ}U&rLI-MC0Mb$)Y-kek
zFnw-Wf1Wu9`E+H0d0F=%P(+5K61J!%UW%Sz!XlO=T~PUSsqh=LX}pA<iCFr61<|ZC
zDf8XY3?+fED}zw}%O(7>A<?nyv)e+m`VoX!jJ1Hbm<ee)1k%?xG0#PowM;QvGE2@|
zj5DwKB^VR-L`9R6wbCR_O7rovNx?+bQV1?De`p^(A|;(3o@{Y#;7ugsm)PbeQa2&C
zuX>xxFaXq|1Wu`LXB_|mK>okV+5bcZE5t+ElGRr_V>6x_a(ePQmk>6Kp29YB3+D2=
zhh*H`hUjf_n at V?SLc27NTh=T!!6$_|2${JW{%s=Oybp0&f%bjVWJZv{<~#1zT0&iN
zJc*E&e}78hGH at Z;W6xV=%b76mZ<OzhdEb5so6Kbw|It{AiCC?01RnIUaSm>Mt~E+4
ztDzV&V+lef5r0u?Y#I>sUY*9Uq=);GAZZ<j9*iG=lWs271q^h|NDaMq{=Xm#?y`@T
z*o{^C+RzE6m(4X0x(HMKj#05TAlDR4&0W%tCx03!eSXgJ2J}fJaBG_bkIzREXS=TP
zO at gdh*U|1_t2>vRSywgKyxCN@(x)V_ubcYbD(_ow?ZWU<eGRs`d-IeaA~ZM6>aCv~
zE0VtBw?E<|4C3Sxuv7pkiEGfl;Nh!_8UK-nl})$Gk4UUvfHF29TWzDuiuskw+tUil
zC4YSdj4~Y(N=E at 6_DYt=$H`z$LS;!vdR<f3LImu)2aenb@$Xd3k;OeuK9UnHiExJd
zC;J;Po0f{mL#q=JKP(;tvOUgI5}`P+186Ap1*+>MRitxV2p;^y6V7a)V}xQOp}9!<
z+Cl<Eq9s<Xxc}+N_9-#%q{Evv!C*mh2!E<#Vl_zCI7uVz^TuL)=W6FMeHfQ-sB|N7
zyvMDzX%ms^@siRY_=IF=0DIc-Yj*U6(B$*(KIX=%L)(6}rF4oF{%r(xjJ4P~W9+2R
zY`&gp<}0HZzoMrUMZ?(Q0Q~F*{@6Xv80!!ir~O6?P*v&Z*zRoo;gxA$JvLHmlz(+R
zdrAAw5y<lq4q>?#8o+UpKffF%Zc_`>FKco+uBI!O(BHux8fH|(Xdt4(P$z#okB;BN
zNcJdxHe<tgK1XK4Hqg{{60tI^b7*3 at gzz4orR@n|PDzD$|C&y>H5-<Fxy#cw^?itr
z*c<S=g%-NK1c6tgM;`ko%E`p(aeuQ^b&#ZoDfY6uRz`QZw>;J!{FPrLI|6eIlq-&Q
zhtu;lR&GQY-8dV3N!}R~qSkWnsIt_wEVa(2P9Jd}vq!)ZX!#A_(0AHfT$9nk|4+#;
zHUvGYynr1tNg+l9#ERhXqx>2f8QDi!n{ht~%2tA~kR&9Z#MXF6ts*M#z<)Z%<YvjO
z5DnO2C>7q*mDlxFg?Y~L8<2VCJ)_|*LUn(M=Y%iXi8SF_O8~cJJ*$SWQ8q6ui$U9o
zw!ze<*n_`7Tv*I99qwh6W^3t`;A(qu?K&R!80>D+9 at seWOE?M9YuLWW^n1`uR5B&u
z!`ypV<1;MVL?_H?KC3ShFn^3I<QR!Q1fzNc90ic#aZTvCzTd+>OovNR-1Lz8vQ#d%
zr~fg;QI%OlPd76U=%CY`L6fM}2Y5vu*8YiH1k+-&K&FB<Y}a;6czePT#(;%q5rZ;x
ztib0V^;hP$sGy*`35@<`<Cf?^7Z}ZeN%`|9P~zDSFA((tap4mWsekD3-9xUQy%59`
zSKR9!QYE~1=n8;s(yJ&qno0zBZ7VBbb}E8CuUFg}xSL9+KT at qwPkJWT$(*UjnLlQl
zLh1XZB7fUa6q$(IszB*7>G%JC$g&US51!qhEQm>HmdGV|FpTz<zj6rpy4Pw`ms0iL
z%v*%CVD0e<l)|aCcz at zU(EsGVu)_^#H at +9hewHRWESx3wSW-2>0LZ7KbIxMFEM5P6
z-ptAlpx^ULs71Ghn>xc!L$BLZ at nqD&!IlCRaPZ06Q*}X)dO~5{QFL<;8qTbeZK9s}
zWCDFEp3w-=@4ace*XPZ%0Ikmm4Qi1w=^S_gogzAcWFg6=dw=?-M1X!Td|ETf?q;DG
z><@`hg#^bP=r>Nzb!Uct)+<jY<^s84SEl(QGfPGxp;9}MMok7KhNOZeq38-zzaz;}
ztr<NTf|@;(cM;epWQAh1Q%+1N;8x`PN??bQWctR_JTgyB8!PCQTk^eIe`~3obmrC#
zYQ9W-Y_X5Y5r5A~zgn41Lx`!?IJx3BgRuAHPN5v_0Syr)UyQQ%{*n at xw_)BWYTiF4
z8f^*XA<=oVVtLYdl}btuI}X!pPp{m6^efI3714O1eR9Y{wGX;ao+O#m3B=)GF;-FJ
zVE?}tJmRX*1y`CY!9EG8G#7wagvNW8R=Z4q`16K>D1V`9Z{-jvazkpSme+_$r#VT{
zZYr$$W#%k;6+h}PdoY2c09mg#57#Tm)`d<=qAQY=hUZKD!Erf%lcma-nv*z)ZKZWz
z-r9J?elBzoTrH+PHuI-*J$ByJJuc*siA}^4w+<G0ki_`>J9R)%k0ZA-T`{)Eq0H03
z$!@|cUw{1_)T~bf#p|0?qnNukwOEGWtFIMWuDS-JX3e~tdL|0(U|YkQGpqvGrkh#8
z90I1W+%-PafmLruI=)l2_Frg2pJkeXmL`62Q)tSyoc1U}B0gdUB_NIFv0l3;_p%hN
zThIr`1t0CB(DcRz003}HhL3 at O&$RS=o>@sib$=C*vMmrbXYtlSybNJR5U~<~E~<oZ
zT(dN8bvwL9cEc^7$$+3#Zi2nlY(5n#nL;*8#Z5FdgvFrnjs#vDm1N2HS at Y9|cMz(*
zO%?`pWo06L at 0ilKoW~fIR|^ly)31)*YE;L)JQ<l8B(hZqzVm9bgg`;eV_RWk_{Vis
z3x6$?BBPOqol7C#IC}e|d1QNHpX{G-F(MH4u-?iwsW)2r(XzR;XZ%BZ(w5Z=9XqD*
z%hDJ{N!2E39EVht1*=KRmB8s<1mUE)CqSx=5#cVA_qHp(Yq_!j9g%XHo}<mn47&4d
z$9^=<Wns(3tO+&3d}ZK6MakqyZAc#t5P$t`se2T2H-Uy15gjo6NH}$P`YpyS3^z5#
zPN#)tv7K*mL%c%6IZ1S9hh1X~vxfC5n6EjZ7K~PY!HLR7TN9Uu at gFLJlbU6yqc@-k
zCr|J2iN}F|CBX<%i4_m82T#6uI1CNO_^t2nDUsDbX(Y{{Y5;)V9WvwuwTA5Y+<&?u
zW4p(jarI?)_6SB7mrQmtM0RjqclEIMb?`#comkRwgN31MSdTbW>Co+0VK)cXxpNk5
z9iAC5=j}8US^-hxGHYucRT!Iu;lqlbgNIP8OiQZc)#0`E<8hoTH&zv0jqh$)I;<fq
zZYXey%WL$H3Y4lDz4yCgmJwdF4u1*TiD0E?mbmxAj1ar_WJha8LeFb0$!t{wIcq|e
z))0&Dz;8ABhbPXsRUJ7kx&vf+DXcgjNGfFAv)@#GM;QooG0Lou5mjP}cowtWh8#{=
z4 at 0+oE^*#<QY)IbcIbqE-pSvs>ZM$Z9cRg$IwtwJAr>FvQCti;+druBbbpw%5D?h%
z;?eI9-1o55BSukmC<Zmmu)?3<a7i0A)mQRc*h58g{7y|4W;HE#+}6`JP|QX>1>x-1
z6&wg<U(W0Q04zhy)Wpre-Fw8nBXM4*(OB(gK_bC;T at j$Ip9#hE5}^1+(sK`&7U?&!
zNce;K;UzuYfA9hv?<i at 4cz@W)69$8KoTt|09%4$_!B=TJMG7J3GTNA2SDHn~!RUFe
zC39Vtz_94#Rs--0EC!yZdSbU47htFf;G?$_MmLQ2`#jE?IU=1>9sQD=jresPDQbA8
z`fNI<@_$g$rbNTxhM3-PalSgW9rmZx*?eaMHBDwf!R#V3we4falz()z%}Rv;?)pDY
z8vvp%W@%?7&ROLteDvVx>jo`U=Sz?6+rjEpTG_WfG;MWD at n!WUu32EJ<(Yy(An0t5
z#6qP?7*@K+Xq;t^(|kIz7-*1993^*EnX5>!(iFf8$q3DYOM^5gt!6F7>*9fNvA5be
zq-`(KuK*vO3AVC_Fn=xTRyqI44CTa&kdVhjdyjX~s<kNN^6LAD at kP{IzKz$+E7tF7
z>ze8Bm78NTHaGWPzA_rt*GedafUG2=C7W#IwF`c>GdDCVbU3*G99;XvS>Z}zsehFg
z+;xy$LFD)C^YT=JvcSgcaxFa<Ui(X1kXDr`hbk1_ufr(*)qh(J at l?0j+uyoSbG=$j
z`<R@%`{+{P!!jh!>=(iifk~v|tuU&`D$b$g_&uX9o5KQy=eHz0r5iE&uVO9E6(v;@
z<F>EZ0%`b<+ZO=e%(BJ<=5UsTl;e+`3Rv11gE|mo>vR8 at Ky-IO?xTT{+&$pe3rKaX
zf{8)BrXZTn8Gq|}4k=O~QF*mmAgFQ#U{KZ!LO|HlF`gY^81JyVy+`69v|?I?g~r3;
zs1br$2XPFnJMW?e$I(Jy1xr^ehKp3 at i9=20355BzC1$aq at n>2~tQRq*L?wDpi?BB=
z(EMl=i#K>OiHE+--Q%yd38-*vwTlljoTC3|!H*4$@PAgir~-$25ETr)BU*Sw2oBKK
zP=hYfR^Lj$<zndDW)Y>;W|VEdc}Fa?p*zqm%*S1!;hi8lob4N65qBwN9*$84c}XI(
zd*N2V$?ObZkSwSuXL()esP;;NS5E7tz_2Ino7VkGBM}D2$6gVL#)cQ9Ts-ndrBL3P
zI}H?n6n_J8FN;<$^oq#mbOck-bHj1z4I+oaJHx!G4v{O12Gl{|1fYSV&nH9h?&MQY
zC|J;cJr*^ic<wJoB{yA`3Ce)G(W&+kA65?Xx1+cQ2}C1=<x`FIiOMf^?X3(a#*=O%
zPhBg5ETdn(-5qwtDnk at W61^9MH#L+gj-k=8h=0IQxgrqJXyMRiApT*^zj=vfLD~cP
zennYj6|yh^5v@!OQN)lX=w3EIeG?_q?v|o)tZ7wo()>B{f_<m{sxRLcAmwM;+>R)|
zk`e#6<*zrfF1xLXuFc<RO%L?teKIc*`@6-}8ci+w at Jl{{OP!vXXm^-0nP@?(|EKg%
zT7OwrzW9 at Jqq#LXfQJ`+G7EFwXdm&d{BS0;6p0(C$^5RF7kE?gN!n9!n~)S}x#)4S
zoS{B(mU_1|Vabs2^qQEhr~xE({vtgC)JJT~@yNVk3A-WIO_(Z;Gn^ptnHB!d2Qw%i
z=m4`E*iw4eS1=27O|A~<oVm#QEJ=Me=zpZP{zUILSW+owo!Cu=vD42}e62pW5EEUs
z|6+=^^zh7v1J*2nMftAGvLBq<j3efsY3Rzk&i+ at b{<i=TZdZ$2(3M%?EK^qpp5s?g
zWR^X?9c?aJzgb$OASr##Gn|=Dpkr|aq0q&@$CFlbGCvul1?!i-tw${(#_J`yT7Rsk
zR_<0dV5b{9m*u<`p at q5A(AP9TqB*7bjD^N at W^@SeIpCjlsGhuTFf4st{qPl2Y$2bM
z at lHyE9Nv||KV?_lTZ<w2UGisI2aNo*WgFRyp;DxE#)=DBnaQ%+Xkye*maF&r`pw52
zW1anM{ASb}x-PY&=!fjFZ#-|bkbisN$IH`UtrT7+Gi(O#({#$FHHbEePmr)(dbe;N
z3ilc{|C6L0j~oE|Y52h!Uu=~E^Lml#fOyX<?}JiON?MHdLs^rvZ<_kKBSQ#&oVhKC
zDXb{fx^Cdv at _sUU0$HpIP?_KR#KkhJh2#dE7IT>Xqns#pI&KAZ-lS7*g?}0@=1Jl|
z<4krnU;$KyjjAm at g&w0V7DoJz<36J?{1(URi&P<#231e@*=y}&>rOD-<UQwo>=u{1
zJ^xXA4ns^`uBJxFwT7xh3Lb3cg4f6dlZ1IX^&D;4PK3R<aW?W5s`E1F(p6s{UR`?_
z-p1*Z-5~GiT?NZ$Nb4iLGk^LnM1>I?d}-5qCZDJYqn65Or{5R_mqsL~wrx at CAZBxq
zJv;z7w5Jq~UrKxqo-rdyL6g2{!1Ex{O4k*SoKy>m&c}Ss!>X{5b{bP4RPG!(L@%U;
zVI29(PY_868<01%kYjoswBS1?z?!`f6<OCHZphfHzYI*i%TjOs)qmW95lAL;WAGLq
zQFd2C@#cR%Guy47_Kp`h8fTuV!^_R^!_%6d%s$bCfIEgEK0Oz{zeaUtS4{3(|H=+W
zA7Rl6d~cVL*74<oLCe462BS<7rvy%3jv?=gP!B{8=PKe+aITG{0jBm5ekC_}Kmi2K
z_qzZBY&D(sVK)f&Xn&7T3J(OaBwov};4Eah+3%2Fmy|!)4Q^{=y)Hc|52>k+gjMwV
z{0fIK*Il<y=3#}n0_p84%^oM5q$G!?a2K6SP**ghL<C;j+!oHU*6N90`dj$2t3zD_
zJ?^pTiKFQYa?u{g7Z?kl>1J1bC-M{ygG9}x0;qs9m<XhxB7bKTMB--64V7ejUl&<0
zjvvJ%-f at ulPG@zNq=n^Brcz(Bcy8bqVxFZ;H2yedZ*yJA!h?o7)_V{ulQ at gK&^|Xi
zBrC;Ho!9G299eI)1<dBhyK5Ssynt~UP$KY%4Yb<Y&mCh3zmgcW=(~w0w_uW&*S~s@
z?qwN#I at MeE6n`NT_)k?2o-Bh^C&exftKI&n1*#z$AsL69R0Aeo^cuk<1`<$n*=QbZ
z`XxE?S;1xy{R&LrtUY3sj?DSliBs0;7rtpXVG?bA8Oz2q9is9X==S>bHRgd3^-?d}
zwJ~8MTJ9KnJ17Bc;KC+doXiZU9}|?vV~WFP(tft2Cx6*oG%UJx>Zf at _jvj1#P4y51
zU|d3-Zppymy(7uJMU3V#ytboKoX15?!_;C$L1j{k5OP`w3L*2)`3J`gJh@(3dLpCD
z{5y=iquF}RKLArpn2}2Tfi!0xAb2?`OW_Otc4M;PPSt%#SyJJRf{dFpk`tvyCNUF(
z%?lby4u46T%L_stqP(^Ah6GTznlA;WO$MioR}^XB<j=PWa+!)j;i?!q`jyg99*`XG
zYwSGL+>#otMKQ_xT;8%tw1wX|?wzPpIS5yjTHZR9ZV@~-EMt2cJBwx9wYU*;;*l7Q
z^&XyD5bAN at CVQ;k3k`73l)|DtWl>K#Z68CjiGS2;;wr!}D+R(K{-a0dP|uc`G|Hf!
zui>3mHXwQeMG<WG0+f6BQlRj+o>5i4Pabk6p=HX9?G~>=M{=A3Qz<ja57L|F%^IQ5
zfMNNgPI+uXjwXL1=7+>{3TSc7j}Y#!UiB=7l)Qij_GmLXN<ds<aj+1bi2zq+($3g)
zPk;V+p|yHu(Ob=5Gy$vB`p8^Xrvw1?*x2-X??P}B&LsKYf{>A%I;_5KNb{6*6QKM^
za4>~+!!nH%X@<NZ8Pb2$!N!zVuF#g3{??=t4mf#htq7nqg0`5sujD86oAEn!Ajb<t
zDmB#puEE<<aNkUL9e=85x5-?PO>d`b#(xFH1lp3xUKy1(P_if_om15UBxOZzcn*do
zhMXpYI#c?cTz`PwV~6QvWxO_e at Oec%Yk2nzXZc_~J&qE at kBAfKm&CIiAFiC5UfR{F
zP5n{qjj!JwERhcmLp9vZ{nVG^798+pGjv}ald32s;5sjg&LH6HNXta=rX{O<V1IL>
zf@*X|zuLK61O7R{<^h)jnt5M|eVQ1{>4Wf`q18_PsfC1?uGMWnTPYfzoed&HQ?u8(
zdcbld#W!~5%`SFvMJojq*iO)#6V%<*wBC$A5nY_OHoaKyKDwzdp9kq{^5WpZ8{pqZ
zZ!zBsTa`#*^GovVJbh|Fn>~vbz<(CT>6R+)-kh~jC`fXIiJK at 7cBmMl2>I9Q9%T#%
z0*Yr2=IgR(MQA5obi8jTJ`N!5)g6yY3}26fwsi|m7=N<spX`0ArcJDp!`!Q)1lZY7
zY5VqUm?ryx@;bX|D^;*S-NH^mM$fxQt0<7 at kKB`h(RV!?cyJ<o`wyaA#(%AsVd)_T
z=ZQ?M0~*n>Dx82hy1N<1v3q6*!~)>ZY4Dg2WRz+J=>$gVz})n7#dAeff8-e_or60e
znB)F7cu$K_oCoU8^$T-5JFXo&=XNS2P_bL;A2&}wxp&BU4bIGn5)MjzL$V<$xq;%a
zE|Nn!&DW)azGr7!<fZKjr++d>A=4spaOWAoX=Q;(14ifV(<B-m>c4T+>YaE~<pY)E
zM)gXi;4ZHks at kHMLUwU=u?k-mzq!`SV9|Rtaluo1Pp)ighu}wL6sIHv!V6x0kGNwW
z`gwr|xZtXrPvTGrby54YLfpr{nD(j;$i1XkgnfO^&^DLcrdux}0DtUR4*WgW2p(e6
zpB6bq$it!&6XvcRvk0VO%!fe&mKGCE5xq2|*RcW%x(ynPL`@<3L#v6R?+c-{*SWJ7
zU1s({sWQZC(ZQxO3-%_q7Vp`wmS7EvsVUl=o0l(?c{M2uq6IdW$$G34K^YiRUPn|_
zKr4GAJ?FlFNv0$pxPSKH|1CqZPfB2pRND!els0$*>_b~ZEdnG1N`6{=16v;wzCQq(
zZkHJ at xu~DPjtriWCu9kMw?tj_fie+ImO3Z^>_NFe&aKpS=p7)DCt}PH8?#fnL6Wa|
zs;1zzjxe8Tm6BB{*vJjcW37ua6D3>lYeeO1qU<^qVLSOyyniDt_bM~Ko0lyx4A?j!
zjt?rfbW39k5^>_>uy|k$;07|D<nuiphq)U7pUCwO=WWR>-LZnl=Jnkh)`IlUFQy2Z
z%{|BJNz6^q>OXEJ0s&l6aY&^w at _`xoxPk`|os>>f6uG-uKryj0{j~xGq}(`{y7P=D
zUn^J97adzre}9Dw&&j1FJlB8hwO&#IKli1<&GGs)!io|O!vVQ6+UKA%eQ4iCse&kE
zTD%JmqS!Z3{Z^RmcgGu$NlkMZl7F-<D^iO>J}~wkz=POSl>dJJ4{dxFp)>O=5DEfH
zxzFPB7!j#>ch0XTA9t0Hp9@@S$h&svAj6c)08j*x_J4*EAtTcG^9NolFnBI7aog+K
zzD+)?$=VfD74#ro7R`9kWRyq1#>JFuc`;&*rABvStr5;H%o&SI&G#;=wUi~c*q^zk
zljoDg+w_!C75``FNO{X`4g1z;{AKMPJR4pOiws&V5q}Y|wLQgd&xXIy&kLiZtP}2z
ziJ8FkpMRWFC6-~ShRLz=!1>ViW&0#}4pL&X-|m-%fls*lW;UfZKeA63j)rGzxX^a7
z@(Grwii;}G7U%EdQ at OUGEmbB&*ozAD*Rpx73cSb?7Tfx+{`z$!Yei+EY0-O;x!HFv
zfMt*FX;6M(Gx)<H<|Go&3IN+{gR5YCK6+9xj(>d(CP%m^T4R1MCZ6%sZFQn4<NL3Z
zT>Id1U^eu_Kj;39#_0Kx)6ldmbI5iI1&<mV>7d?tju^}tXwxNb=I`j%ZVC*d)n5&W
zuCRW5F`{k4UcQ0E0_X{L1?@SSnkp at n<uVn~l-xODwj|)^&D=i1CE~+|?WI|*M+*1&
z6o1)2i4*-}RihQEvclIfcrH{60-bp662RZg_}~PMYD!_KXxs-EiZ_=Sdv7m{_m>7T
zxJ^S(*$u0u(*5{LJ#mu;jpSCL4(FkZ at t!CYS#e7!bc%S|w?GmD?BlhS at kAgC6QFW}
zZG5^5Gl~&F at O@vqdYfr&YgY5QkP_0Ka(~{^A6j_s{8BVtWm2VEa&&LsU4TU1;~dj<
z>pt^uBKQ|uJ0>?2#j~(dF8d{;4XGjz(cNjogT_>=)Ic<fcS93J{+;2u8?q-OeWZ-u
zShOq#Tz)W{yBGTQ9T%DI=}XW`1sD!E-ZcZM({K9Dx%GQys|dMYRrBJ>31Qo(iGMNt
z=!t+nw_h{{zS+>Dl)cd6H;$)@hh_2Ppx7lndZ1)$($;{tMwWA6oiawrh6SICVRXMm
z<T{Ql4jdiV9%aSLBq-rco(Zt1I809bL8F<bd2y<@{Tu<Vv`Xo{j8&fbv`_H!1^@eW
zZ?Q at v?v#isRIk-2jFW$~W}OEAF at NdA5mMWD1-yl_Mapq0J+NwyFKYtW-e3@kB7x*<
zv4g`>yey}+RpqZ*6iuErStyV_6&9#I6VUQdoQ|GRf}v^kSUXcQ6L#t-ef90+(_$Q|
zo%P+jDR|=(m2+*U>P-(@3H%0fVj)M$>Y^GS%D_ at m(8MDG$}=%{Va+MBKYwTiBFzkj
zSosI1#q8{#(LD(yu*5_Ih08q#D4wlOM*3Ia+AB{l5?U<p&{85&AA*4j{!WU|I*fWC
zA(k&kzo=+BY+Y-39Qg#uus at at!Dj98&B5nd8B|OsZHVVj_qCG}nnT-i6zI5~Njh{w
z+ at BIHcuL5cZ;;K6r6fE5(0_A=h~>QSFBn?OsN*zsy#N(_rla*ex2wnB4{euLk>2<t
zS)^a{J`*<HPRef%C;T4;+o3mCP5dh&BGgP#v-3>fdfH at SN_)-S2Qcm>58atVb+mvO
z_xow{RUw4PAZE)M1j)w%x7n}m-FZZwnm#U#3bO34d=sb90KMY*_J0h?0EHRv>&4$%
z)yh66lBgatm^YU*<o5a_7hSHX at Ijg5W)GbwNG(3l#!V$kFD=ABjOXf$tP&)3rirOo
zV1qALcMge}=IvM`!KMC|=MOYs$1iM$33!k)2ph>+0WT at g5YxD-t37USR>c-#wU?<Z
z=#*heJUP=Dj at fMHZGQ^$TgPWT$A at L`iL7J at AMshA{H9?oEmXD&f?8-ETLi%PBRN)#
zkziL9gc-Xqg!TBE!oJWAZJ{k at mbXIjD(hMq<!qV*<6yd?)ToRTAf_7+E8sSASOmI&
zURTQ-0j$`RO}Xp4E&Rc{>eo)wBCOpo2GYys>t5D&2}Wjz34b(H^YUx?naT@<QC2Eo
zT<X%(%M)vv&k%6iVy7ltGXV{UQ}ck;cEexw{vaw(^!XRmJ%YSTBQu$j17C7$q-9K5
zOntHZPg|ku-Al7Sg at K1(t?25%IN)@t&8CyJyHN@|P~kr|gkD{pU;*MTV at fqCr<Fh2
z^k~aT@!Chy&3{X;F}jPZdB1)|cuwH2S#_E)wMd`SG_F~ZP<`g1zokQP*S`uLvw-(>
z3m;u9SDC7FlrQU{S at L~4La#4^ZbF~oSg{XPGQe>b?7iM at wOAtiQ?}F2%XrF_#y9#f
zCPeCKLVMJol-ijIO#|OOz2V;g3e#~rtGLq7hA+EsxPQCy9T&pe<wDD^tx%YuF at 5}2
zO0)ur;_;Kpsuf!(5D2ORX1TBt9Js=F+m_#NdFOwmszE=oIw<}|FGC<rI-M5(AzZ-3
z@{)+9mq>eczwC~#nxzGA{%lOddKf4p-Ky4MNqry-A)ht&#skSUh_G-rCb^z<AGAIW
z64>^;Mt at -e15!b4_mU3H4re{O>g{X}>hr*a<nIEQ^zHQ&?6KQ7T2$3`5>7!+O_jbe
zA$s^T%dEY>lNzcI1Hr3DckymGj6FsPF}Ame=Q}7KW!j;Eq!-;FB}|-^+in}l?{R2~
z at P$UIgXbe9->ligk^mvR$Zo_ at NBEilsPW+{*ngw!1S({OEK7#H2(-4mkfKDZ6rlJR
z@(sV>3$n?oVdK6#t}H;@RxkWC%T&z#lR$JCzlhgo2+%s1wS(d3W_p75<?=vI1b+2e
zx3-$DILYN!t&hzjYPbui004>dGR^DKWdXM%XLI4CkkjGUk%-#nfdfe?za~ZIL#r~v
z{(qbfOH4Mv5fSw&xpvS!&ie+9v)&n at hvmE6c7g;!*I{xUj}ze4F(+b?{|;jnA+ey_
z>|mgjk2o($eNI={^~)c5)cs9uHXKV=9}k6^Mh0rC?0uh$r;Ahh+f9gR?c|zD6^rQ0
zf1O8=l<(^HO66tV4fy-W&6_Q)HOPVMYky^YnZnRINN9C(#BAymoi4*}_Mk}s;Xiud
zkx{h{BI3swwCGj8;`mr%UQfgx at 31s=?*T)ncl_^wy`aF-=bv$1T^X~hq|YRVQs#v^
zq(<QuTvD5eppGYv!=d+joFQFC8ZMN^;fYe_JB3G%f^a^AcfXbk-W^G~_yiCcrhkES
z*~Do6>c`~tQVfobDWoT2)a<>^_tL}!AZw;Wy#qBy!(ty6{cy}=fT=qf{3w&N_glZb
zpvquLVdComzb6fAEjo%FxRdxeXbdX!LT9;zM=wis6an<KfPK-MAMgN^i%KPtWv6^A
zrMmqzjfeui6(8Om!V;Ae<r2r;(|@7p#`PMj6%1TskOFfLX|>m2U{BF=7i%<N{{x1o
zxy7Z{YCX7z7FKqUGecf*{3joz at mLnnj8*|%o;n~G!3XBNMB%abkgG<A?{WA}_vW%t
z<)D7b)cDk1AWq+}X(PeVV`~}9vm1<4`DGHDWykeGe?XSGXuheSmyEd#-hUvm`mFXT
zti5N?`-)nA_e9r6ku at vi_vd18i|IQKg1nFFe43>{=ASvyUNP{JNuP%FmhWOy{eRLK
z<%CEV`o!%BPV%~&g{y7DB-xA^U>H(ajI#$wyn)(of!8DQMdHAj;vY$z-9^1WXt-f!
zdK*&xS+67NPyrg8rLE=xx_{wc3duD94x*1F>_ONcfx}{9X~>^pvN-I at _Etor;cl)!
zc}7j5wZI7tbg(YP>aY~TuFM2W>LP+;Ip at 67RcHxJGy#ZH-D}h={fqtJ$fV0V3q42u
zwG?p<uqPSTOsSvA_k#SBV%lk+TC2*V>$Q>T(g2%^b+kp at XKQl9-+x+e<n8!GaQ2Ds
zBjby(O19pd*4OqHgl}P0d9ob0yVA=6CM3ueo`y5i&<@FWfzPRG^9es-CbOf&xeHn<
zZZ-aCO5g7Dr9v7~CHrg7TKcoEQbq=?f|Vys6wmYsDb}3rwkCM=_G%t%aTY+lXe`;@
zN*u)Qzm}L%%pq?LyMMLT%yR#(`pi+a>Cx{OYrAaUp1CkO0+L`}O3V06uvU>ihsqA^
z6q<&1f63R9xEO|Ab)%VL6=daj;`S}$Jl{N!2?sH~UIN&5`${*$@ttV_NP%Hxhw^L6
z?Vg|D4Ky?>Fg>>b>Fzy9HeEm?rs)6g)8IQ55Uf6a+DD~(>wm{e5Hon%68#g&F;7Pq
z?!?SY=i93Bkr$UGlUSJs;t`w*u&kzaz#q5 at C|lGuT0!wQ8jzoEU8Uq3ouH*BtD7eT
zoIwq0BU;&J1R)zZJYX7&#Nt5$%Bd$FP!BOF?!P;g?z5lLe^oap5-_xq9+>8}F|^AU
z%)OmT6Ffo)nt$jpgEb7JF4^3WR`v~TvKSOpe%`D)kJ!(I>`=dM*E~@e9))rxI)@f&
zqMx{uLHATN0uNjVO99i$P;lD!0Yu>nKn$rg$_&+Sr})z)(N@^B- at y9mW{63mC7(KJ
zpQt{=f#^f`Bd1La4wobI?yjC<qNd7OV*>1{zJhWhKYz!_-)ul&z5abh;R9a4$Blmb
zc&1Zh0-?ag!BI_;FW}N-ujq%@OIS~G%Rxk0)2qO<V^EX9aXmXe{*yi9jW8!ht7I*3
zxfG0${b$=OFcq>qSdde`@hsZ9G*>y%T^mCykT>QQoWDGl7 at mFp)y at c%PU}^TY)6pH
z^rjOt{(oPd5bFVu{jf4y at l2Y(VXs at tH)_swGTY0?**70D{ZI6nTG}VURmS-Bd-v+?
z5_I*lpZJ!-d}JK;fAVIHqHoso%%zI%E&Um2g#~GWo!S2VI7W$xa44Ds4bxFxuYF_d
zd{|{J%=RQBoX<-*t5GuYS@`(EUGy^}z1#Nv0)Jm|7(Yz%my#$04l}ULwrH0C+pmQ{
z>9JUCKq(m?58{hA;*{798!=+w|Jgf(OO{nRERxbS7x``toeH!r6uoeGi=@}KSsC*m
z`a0FLbH0ddJ<uu>r#lOJ>=Rfit?}UUWgE0=L3URFkeJOBQz&lEMLjD9mzWvBUL4Mr
zbAM}GPzfE%Cc$ok4&L9-G4IDkKmqE41x?QIFVfS0P)J-EAXXehK2-NwF5cSBedF=i
zF-pByrozgC5ULF}A9rd#8J>ivR4MqwHM}r_9Tg0c`R&v>u015|rYGy0pz1bKqoUhm
z=ZS&q8*AZagyT!Zn^+3C|JgROCp2(&41ZSTUFBYszv?Jl!AR~q1ixPySS4v0U&Lep
z0bgdNPku=>#VFMc0hQWXn{e0d%v0c%v1lpa>-$@-f<ZfsZjX$*@i%XOGqB^fS&>27
z2_5B(hppXz(@^5{m%~jQcn4;+{F^kvJ|jrKZ_aFqnaVHyo*j4hwkL*}=t9TFC4Zy(
zJoFkbQks=oWk6f_$u9@{AI#6F=gG7QPE8<XOu!>^xG`sS5~5&4q}tgLvBXUaOsV<3
z44qK-#h4rWUWf at 5$_eemt<wd1f2XTBLO_ at 8B3maC_Hu~KCiS~%@@?5~qGr?p>%hNm
zmTStGyWBB6Xvq%2`qpB}SiAhzhJSTGiy(9;w_yfCZPXqP<Z6jAeee>9B^3YO#m1|q
z;<7vKMi7YQ`$KR}Xw+ at ci@y!1>xI{a3`kma<Owdm8vXkROr(e<RoN|l1-NtSGpZYj
zvI`WE8YaX99G7dB|F4c15spcx)v+?|SAoUFkNj$KsH-Z2hbeS^^2v2~<9{5fst;C0
z%<{x=(`-xkf at 9lN>v1`ea$PjP@(&b4M>UbBoCs^lt(1d?%haLYgaCHw**ZtNtxD(h
z=DJK+J+vK8ZyJ?>t2;vSS4#xS0WYG`W(N1hOzTypEGXes%nm;U$JZ^wFx~rUcU92+
zF9cB_DwNubMbiRh0M>`izkfmlfr4rJR4f>1;o44Kwuf8EMEZMM-?|zsQsZ&OS?to@
zvA8Bj*j4>EUg!4~Z)ATx^cF)GTI2&+1RylwXl|y=7e#L+`7i9cM~eT(u?6bu`7--u
zdp^e>%BT;*2qheAmJjwz{jXPHkI1NlG0(A~4hQZAKlqbrgOnk^YJVX;^XD2=IW}l?
zwa&Xce=9ev50r61r}beK&aoq_BYK{E9$*nlVmbjIFrY+>&08(iNNA24a_ZSwDl*%B
zQP+Ob)Wiy0SyEWygue6L7eNl6&I%i~5mOrRhO at pwX)a*&*6_Gtq;K at v5A;^!&6FP*
zBIQ>J8dD&OO5gvz?|*|3F`b0^7t!mDo9lE*wd4g76m@~y{3UEm*@dh=lIVe`xRQ%M
zQGkAP5Jgc)qHmA}51U1qkj=qSd-O2U_;j1*G3$))W;$NY)TB=5lfawYO!0u7pL&$K
zixr9r$YWtdCk}Hd>xjyW)OBORy4GXl at xMKPTl5et+cVRE!G8o3hqDv$NmlU at rGd4@
zK|(shMlRY|p6%&!uMl`pR159Thwz$al&E`1yvO_t052Yga^c01Y`RVt!MF~P9-YwS
z&s6!!GJ&3ccn5PlaXpl=WIrTXyIQ>&F{zRgHb}icJLh7NX+fRy#C&4n^Ra97ES4eX
zxr{c50DCV at W`AfYXwqg};WFuxYcA%4BCCiQ?P~jQBbTSX5sbv$$gJN at M?x<^b0 at HL
zc|NkjA~U}%3xdoAAji}?AfI|>0G)ShQHpQL_iZ)&9mH6 at V2&%Yyw6bla+O;QD_?I^
z;!7!&ZG>+7IW1U;-+W?GZUB^xhi`&%;YJng`CI60I)8~e;UB}z!x`(s70y%x^Aj7F
z={{Mhg`{M!m8Lyw<XaD7DL&c!<5FEAw*wNG^eRR>1r7mSzH`q&QGZ%F*7g}SNj5(V
zKfRhFw8a-Dec981?H7CzA$4DwGE>n(*Bo~`qlBNuaCeYDE at t#@KFdD5pnqA1j`^wJ
z3Y$q2XMatq)@!>wkx*v#QEP5D_k;>=_Zc`h($H`3gmwV<r#>1ecjB*`3u3x~u)da5
zNGuKYVbf1B2=kpr7(&gR`k8k_I53Yc9o5OkHak~MFIqE4Tlxdpr2FNn?xrm<?=rNG
zD01j1O3&7CfT1n2wrlA1fx*kzmW;ciqj^mqk$*Z)lOyC(XD?Nd`v}7=S>%JA*$xS;
z*$4<5xCGKTwMOWPppl&mP7QaVddx)LJJ|+9Qo^1i16a8C*LQJ9S-G=wPO3&NRgXRC
zNtG8Jd(q$XyBM=PBA#STY0h4OvU;z24<b<JN3Ap1Ggsn%@x<&AhUK?e#e=_UN3$~H
z-+#~L_<>e}bRa!PofAh-zj=|p^hDYlNJ8<HX at 82$+_0v~@U}p${75as!JSlb{b_Oc
zB;1rm8D2Ov25O;SdA7NbaO&r^NCci+6KhogxvmA;ljU9K(SzLdY}%h0^Z+B}I~l+{
zF at Hdf07A85N4qzaAow+P@aS4t+nV2XC4XHz8TylSsME=w38CCLai>cwSt97*U~H5N
zH>~J^>EC0RKv{FMOen@<3uQ6!$u-K~r20YG>9g0xnWa21=`yrhO234%Wl6juMIZE+
z^2d)ib7OBk>$@Vq7rq9heq2S9-4pbAF!fzM{*Y)J`>z=}7dEiG?nu^r16e80Fn at B#
z)w0(l7e32}C>O$U;0Aw?Vg>fUn}=W|hNny$k9HbJ4u<Tn35sQN(8nTp*%}*Lz-j5Z
z;jWuVCYg`sdYkXegpwW>;2tT#De`Bfy(x#PKy63^sHQzTfTTJVMQ403r);<GB7so_
zsN>sLC#~q!M;c8y1zLH<pt#SU-G9*3>G}?5XD3_nwN)UdD>3&qBB3H`bnD+wcW>JI
zOMcMe at n0qdJ{1M56Y;hzm|>}4EXr4RvGMji(E>zBfq*R6!kF~0HeRbK at _o6<gCEsZ
zR4i?TJSzT1F|;F&p#nZr$T2kqAdz|C({muJ*Hi(If at JpzM1e_Vge>!QwSRk6sS;B6
zlo`l|sMk7L$~2R6EJ9j~U3_n`NZ!J2T0;^;83;EoayJbcjkZg|AYNK`HW;8h_b?j<
z&C-VeCu8_d+b$y9r*=oYlor^b>=E7_Njw($-YiNgnl#T$rA5{->|438>kRBjyx9H#
zgNi2J?K7%|{`w$}nN%IR1b;=DOvMnaHdmcpmzFvXu(7;UIZU7zkj4F8mX>b#Kqt2i
z1XD_pVlrM at en>osy at LwB91m>a4}|Tvwc^O6 at okKAtd3Q*$NFZ$q%$4Haxd^<zGpuR
zomPcN%a4eQu<BOaj?qJL6iKWG21rMflrn6LI(sbij|n0ch&*|gH-AFi*IzI~Yl{MK
z`)xvPKWjzpS3`-K1R!no3OQsm%zx!&*UXa(gGOka(VgECOtMy92(a=P)i5h-cqi32
zYpQ at K7nSfwG8eN(M~NbsK#Yi`>&GoM4yjGk{Ki(F<PF6QEu&a1 at JW#S%686U%o6VB
z<QqY>?I;6#MOL2NWPi<h>psMlYF at cxYk+hTW+(u(sQv9~QUy11iz*~^gWN$+15j(h
zlD9%F%Xd`B%OLlII_Ewss;)oNzFR7K*kM;FjABw<ZyNH^ZP-6Xm|YC{tQVO$lKOfQ
ze=1B{;yN;Wr^dMS&w at v0{h{_|0VpP88yo;kdWvtK20Gb$Hh)}9Qp$xTBg=m3uO)Da
z_l2Ik;eAXT>*Zu+<hiw#JP7o@(R2H$+jhK|tiuR(xJiafG~oB130ouMoE>7pI&srn
zr;-lyYRfT7E6gK9m(-s;xEYb%s`w6O7pNmpy%sSo&H at jrw+bdNtfq!C{nMB!JrILz
zcbem$QtKl5pMMjyN}>Wo>r#F5oRs%TsQ4~+$y$1 at 29;tfeX at L$BGaqhFA9Y at t^%rl
zV)~0UNrT_*KeHx?(737oLI2oY=;mW$KXy5&Z96ql at FmA?W&DK&`|@iH`P>qh|D=>P
z$=4GS5 at TC8I#horL<K56%0F>%qmewNS7<;#87PwAk$>AsaIJxR3xnA2)6^7?)?oDu
z6Y>$+BJ6sUyY6ZJBVO$yN^=_Z;@g%RRRO6$fWQEoZU7l6GQls)N!*dYRNSZdciW9v
zLr7fzv#iX7M{C>^f!&0LHfye!|4ikB?vf=v#0OV~cfbIEgfH=#5TbAs<<$o#uzczp
zar}N49DiMB>F7EHfbOC!GhqmhMuGCkX$1eM_ay~LR;d$j5=Z1Dbsp&cOE-mm#3(A_
zBs~HfUdXRxaO>!|z#%+L=4Ve0WZx3w;gf8l`B08!oI`d8aGfNO- at RTlGFue9LOTD|
zll-0TZ^uA7HF!8g3D{$o<7ngk*3$W2Q(uieGJnt##N{AeMQ19<V at Kp~a0LIMG;o|G
zTV`k2R;(ew)RX+W`>rwoD}1zl45Q}z2PxnBdr}A)D@&Soct`+%dN=|h>ovo~Rncw%
zdh4=EI}a^@a(di_OyCpUb?kXbfP@`PBM&g^n|5T>j*RLJ^px%4;;b57!(BK at alSph
z#D7ntE9Af4TD7(bv9H*A=}JAz6&SYxJJ3=uZ|ex>&>rZxsn{2XY$UTJPwZXb?#x-n
z`keO}?5L0lorZmJ6Bl}0MMhdMo`w>~%XMpK at I^V9*kFB at p$o;kdqQN&fWZsZzlKWY
zDXBG6hE?rkia$)fm*m}HN-U=fj)1NRv44A!Ez7p}pE_M&=;m83y)9Br+ZM37%}1q0
zmzcx%0o9SX9&Ub<J1Y~2LKdhG#gK}0D)Oc?dOJt4Ps+u#;LK^kyjsqUFoT>keYk#l
z_U!aAPP?*vRB4ocG;gm*04Uu_5aVJwQB~F=4Ir6<EE%bp-H at 9;IZ+F%4V{(>b${Y{
z+y-J*?pr!-np%S@)T1mUtQ-W3Boh;x6DDh~h)wiTP3u7eu{Xww*a^VwJXUkbQcJ>0
zq6OOY?3{ZwK(?{>0sn}LrT(!N0~xEmmSA@^Hw}B9q#`z|2&ygDYe<MO$oTj;KZk&;
zC>D`?|2Cl>V1q1s1GG&>Hnb1Gwttgaz3<l|OEL=oAu`kZ8c~WIm7R^LOLo!4`(eyn
zt1!32#D&%7tx9t<5aJeXWCd3F{UGie!=FeQgOs at n7=F1C8>H8W-ct=wu(Y$p&5xy>
z{Q(YeIokijBL_Jsl8mh<3nOV;3cs52%5|iShwxthNnnw>0Qm*A_B*m=hJQ#K+rZR@
zr`@WE5raExl2G3eLW(cp@|=Dw5!fcFvgSkUjmu1R3g4%UA<jaKKZOY`=6!dQWnH*Z
zAUzJ@?(Y>P!X{yvYgKlonjkm!iCsB5N`}_68tIXgzBsx!&sS!e&FA+RG6uhVL7kEt
z50b<6=>xYJ_xETdakR~|Ab-9shr(}H`H0l1c5+Zv%3xA|q;uc6yfNopLF-pHl>edp
z`RD($lEywxix&XhYq=rHty>rj&`dH2Qg?XOzWFdub;S34UjSFJV*`6opc2!0Mu#%8
zvUJLZ*Ec7ct0t9hXj-MKv<{CUROKIM=M_6Fgd5eCZ5n!-4kzauf`5r|gmfa)G%r#H
zh`;br at u9U|`AZoDEZ=#iiP{`eYD at wm@`M|J1-r1D+{XFx`QyP1?H%%MT(<{)>DV(|
zdo3An7M^hQThCHf7Cu?|HG6D!PneBc-9hJ>07enN1}vD_r#iYyJxK0aHcV+k at VQnV
zI{>NRBd(e_?(fek at _*eYDYhZa0<t_PT6QcE1!wJn&vDGd@<=m220QCl19=_#RFBI1
zkeM&PB$TDMiHaRMyPep!%8?+-cM%#Kw;UFkAlm5n)i9&H>tQE!v_kDyN at m~Q-Qt_5
zI7Dk0T6H*do*F^IID{d>Xl`-J-o%Ghen!qTt{x7bwiiVd*?(j78_7?gN3Ee8Y+97|
zm*50#a|snlbtTcY)*^58d+ at G*L~HDI87D2BoO-1EDab&mBn~$oQEVvK at lYQGY3A(;
zvm8!^bPW1qLSr!NRKX_NoZShIN-S9&uoC?Pd~D#$$i99lF)vOsi1`YHw?vBwBCCQc
zo|vc!#nbVr{ePBRFW%w){Batj_&<>g2S}_oEU8&fcd(tay)ewBVKop^9A5tOduns<
zOyijE3El6CAF%_{vj7%w{1xkaf{qD=ssOc?4p)HI!Y}k3p`0Cf#8^IX$!H-u21!&*
z4p_vtaYE0%mJYq~p~1cM+W%8{T{_bzT_J<uR}wB&CV%&s at SnmV=)2(`FF7 at 1AzB74
zZ$j52;d?SWW9s1-foHzwjf;u`Fg27n*b>%#Tp`Sn{MUqi*uW9oKp6TL++v+2YK$zY
ztwCQfPM5H2B|asSU(<vYi#1Bu<--Gbz6&6RH0y5~(0gWO_37mD&}DIM_|3qJNTX at O
zSNJ1AKYuCvmgb>}tW^?DdQ$?np at nxZ&pZ~m0s{U`NOXBKV2#futD4p?=ps=stWLje
z$vz}sa^kFtYewr-Q?owN*o@=RB{090QZ#-eCNM0YomtL^2q#$Jp%F%))WBqfw{MrI
z&B2V0vHPi+7LMjq!b at soPLEO`g})%p6A*V>2Y(hy6EOFyGFfnGkz}V$jJS<(Os%Fq
zV}HLO%C;0SIif9Qk=ko08H)}Yq$}^pjze8_MqZGKUBwP9&k_+CVsF^A^p3e>J+Tbc
zKp7@~KWmGGj66jSoJ_?1c6PwZp<dYaoHYDF_vPAl6}#XcjAs!Zu=IZHoF}Ixn(|q%
zGk+Z`Ne}4R)12cREY+3``N<&=!CjSJx_yP9j_x8`oks*G==ITJWD4ia+LAYV74It{
z{O(AT+$tpmA_6a|;l#9U4(JZ4DQj at 6U55izFO@pYoKbx$9O&0<fk_8Xe!)epAHMCr
zzAjRmROv3aiReO5pH~nYUvhL3S^tgKzJCHcvC51DB$&at?dTO*5KS~vEfVj0LkVd2
zMwL&SIrGys?`y|{VI^s*T%I;*0+Cc}vsxFkdV{<rg>R%jia|=2jb&UQ7m9XM at HgL$
zNrNY%9ehPY(%CeJ?s%Wo&<7O#$=sdscbyd4p8Sq#w!1^k=!@E4AZyA(e|xpfrGLfk
z^VT4v{Dbc(%L-_h&A=n34gcZQt(+Oi!xULlF=Z)>HZqX#F3#MoxG!W=ag;#`c`X1(
zU0tE02;k2=T`Iq6H+ElUDM3!OwZk=#H+23yLj_%}!Mh;=!wk-&khH^F;DSH>{|=nn
zLB*L~CKg)Mv_SbV1)>sr8wgWUyMLNlL!;S-bP_EDtn!V?Ar>7Xxdno*{Uo3Vp8TNp
zvOf1`l0w!(I5gx3`Pa-K#)r&@Ua*UiHuM->F)hM8Sun*dTQgJKs3AO2PsMrBQmKbO
zx&0_mM-mbzACB_|Za|_>z96ty<rFON!x0RwNk|Lf3cX+Uai-c%0D#B8bblYr4|Cu+
zxy*DL=$6^PpN6X?WnjVCw_bW9RGP at M&&@qKU_4FlKnD&;(<q*U5n*kahX1z^7b9u@
z9gi4M)^o6Z{pn~6 at i;3iE#DI;KF`x*_);;^aaf2Da1JiFizHAk%*`v at Wa%?H8vA_X
zWv_1zn+QOs56#)AN}@dJAb$cd!XLnR3LAD1wao+*{TQCZpqKEo;GhqeN1B;P#k0h3
ziG;L0Y}s*OwsCV`ix at z0O;2lnZFEQth~y^{iNWrYUpHxtu0>7l9h9vn3{y*RzJu+7
z6PQg)Eu2W&4BM1P);_mdWfhZ0<1EUYN at eG4PdRrjK?CN?VSIU^)qjx at iP8j#X&3yl
zA?|*nm at 6z=*PEB*H_&ML!9<(&6%G1x0U>_wXp&L$;r7h2$xYPID7 at evBYmy^WI{kp
zR#HXObK!cE#9hik<v3>DF~yhq&qY=t)Pt;Pp#vHJK!^-UsWX)5Vb-Sl92nZ)-0hFj
zt<6=Y-zZ*Tz-aWjH-By=m!65)#Z(IaZEv+S<#`ODVn3CR+=KwVvr`^%#jV`!?aQGi
zObv3|Y%h67=Bppp9tsujC5Nr}bD+uXp^Opl71v<`b)tVi`7wI|fc$3e-VW9dwZ$wf
zG(vA9?g2e3A at u*^30G7Cqa9xxMN+W>wp&1n4I>%*^O>VXWPeURqTd*VwPd58?Fe$8
zMA#DxAF{wYm#aZuRyd=ZLf#S=0PSg*00%($zmYmm0fGJ!T~+)!l5&-q{Fa&S>eAo5
z<dE^;2Iaxa-(1h}Vy6UE@{dx)Lbe!(HUL at Atbzx60QXRDSjqcArttF*=>R(>JDNWt
zd_y#YLPNDHfpozn`#yhLNHsDzujmpBGchLeGu;`t4iU+Cm)I=mhXi&F!tBKlq-Br6
zGZA;O6G1Ef%SXaVDY`W;l4ZggGV9lj9Z<;FS(H4BM|qD^u5yT_4dn;WDnVS|AL+12
z&%pIwTKyQIID>B#;RMddxE9WR<Dpm>>!vVjmPH?~LCAPAAS!=SJVlZFQ9z<s6!V%5
zirN=iw0Ckb0$Mb3<4opLM1~raW#vg-n9?LDw}fg2nOM9edIMsJ0p at Heb+Pn6RLi+{
z at 2$&?&$?NGy3D(<vG-Heg=kcn6h;wa$O)%D@>1_bIkW5Ey$u|aG7&g`6!y&$mzR?Z
z(6d3t?P6Anz%qa2M at l_cM4l+f`h+~54i#@Ew5!0z=r>#TT;VZNP-w5X#Qb|O8*Y}W
zKBJ5sxI^pwOiLU_sH(&?M=e}b>pXQX4b%SixQsf5(}Gj8moHzH&WJ<K!R&)^(xNi4
zyz2T2-MYjTO9p8?5u#qry+VTq6P0+iQIZU=Jh6@~#qfVG8YhCkh=b93lj4x>y+mAn
za4h3f><&@=jS(n;T15I=W&hv_Lm=?d=?Usmg(E2`GEEd5UwJ(AH8&y1Vvvj4`x;@b
zTyx!)L<s#7<$Dyy=3DnTiHr5Q2RNQ|HKaDm1rnk{04tgfgPqRXWnRHGo++f at 6>Q6k
z{dhw8r67Nb=y}%_Lq!U#b&gFc(lm^Eu|?Z?>ZcKmi+O?nICwviduMk>;CXwoR96Yx
zqh$4b4**ptrzg2`W{S&C9y3Ox;fay%7Wb1-E38gANk}&DN3HV3%PN#S!MQQqz|qg@
zA%eT)z6<EPNfoh%?Rg533Nz=OEB9{+6Qx#aAn<=FoHaRt2kqL1oV7k-i|;F2;3Ne_
zgiVG>{gdLrpK;IxIJRtQ+bohef&`HQVz^1Mp7nNI!-{%`tMgp9 at 1u!ZYCpkrh43fs
zBdiwTFe_neOphya?D9G at j@$A(R`rH&$u$j?v at 8y!!p>~ES3T7)*Row!OuZdx1wRF+
z2oHaH@{1eIR!V77w at S_E26k!9F3Nx*mu(Gj)Cs$rW~?)Um77|ZW at d0MFTb~DjHi9y
z7ZM1Kl1fs}#Vdj0fmxv7LbwNV`Q*)y?k+Lu73D`lDbhh){|wne$#)=<Y2}&0?NbNG
zYP;`*N?ZCZcOrQHZZIx-rtvNAHgoVA-qwFDorS)RU<JfW9jL1ffe9;|907T_bl+C#
zkLhv;>&6#V-A7BF<4UDr0cw&DcnC%yP);M_`jR2U^s#d9P>J2tR{#6aYgb&+J!h~n
zSI4mG;PqscrLB4>&AakufxO{CUF-VNXzXF1=?Zp*hjz0j(r->G8?U<3+S*6Qpwxfj
zJ3bg;J_H3 at xS}q^ou&d}F_e0w_~n}U1_W?uoQ2f>FN&{sjrK~ovnS0|s63mJ<;8t@
z7h=euZ;<@LBWZe~y~2bdhsqq+SB3TEXukNjK*Q14H1*HhRHp!Z!(rRV9cs#GtDN<S
zJW*B#F=Rjh_V1XTFAr-PzU`tOJl%iM*J)?J-QzO{k+>tbTOD6)^1_fCT4>FE?v1G1
zq{+ADgruNE>>v)4`0SUfmHu`IKpQ|O at qDg`A`Amaccxvdfg+A51XBWJ{HAGv9W(HF
zDw^J*AuU@=2vAIwagaafh4^*8BcparpL9$ROR=3NaypT_5wFwqN?L||9Djc)Qe*NK
z-8nyuax{3bCVzg;q0wT~=b-5EgM&HcA{%>sf^(_|J32}_(pc at azH1f}kUuL6ecjMZ
zHhA4J0g<Ri at PdM32T`fLAKl%3G6xc--VP*Y)O at -S;|7(h#ws9SyUX+V(Q+FjE;=-O
zk~?Bu`W{CC9vm2`Sw#{dPL_XX2|AbzJv(R5jG9VNzN#Qlo$hk2KEBq~02%#aE*Z-h
zdSNbRIWqp^dIMZ+IuGhc_l>AEh80SNbKR?9^Jrpc#WIc$CP_j=4EnD9j7ZScp1{we
z23HD22c98$Nv6G=l*U<Xxpef-4(<rP>wM%X37jNXVE6J7|FZOJrF4ImVO%k#fN3_^
zr1htuBsbwOd=E`r|1uD#iG?0bZH+I0d>31^Zq7T3$~;Qf1eRnbXpgD}_*U^ag0Pq2
ztB*KhPqxg3P2G1C+)0q*I<bYbkUrNo2%x9lGIs{=VhR>00V91|U&+#uR7>_3)>jNR
zXa{odL$Thg;Sdp&iwu8iuGQ8P9wYAZg)@BQbpUQ&RSXkDU#FpQa_Zr6h^f{#Dzc(6
z`dtUXHkA4mMJEyv-Q-CLYKhKA)i$;I>uOhG=wM6q6D+yqaNuTL$g6$sDwe*cU#St;
zAn$=L%{C+I#w1WukegH-;WpqT&6<0t^D$h!v%(#1%^w$gg-n0HRSM~$bSBpa#%k{`
z#p1iKtD-JUP(1 at KXa5Udz29c#)Tz=IyFG!R14XVi>d&WL);AA;&0a;34nh%%vf0&)
zx06+3c+OInuE-d^0y9+AwV*$)$Ik%d+ZDOsh?%rlt-v^nuWSs1S)XJSJ;6m!N_5lJ
z)!Gjktw|F`=RbcNhs==Nn`w58?{Zbjgd66!r<}yh{W$Al$1KUfqZss)M6}N;;>(UW
zoCPjT_{_UL$YU at I!(AejV$><K;8FHm<9g3a+?!AV;3TX`5mR(I1k1@<&K_tNuzkhq
zwRC4EDSdWY9cKnNnB{{^avftSeOTo*W!meJy6S&zKPrFviCHIuO at qJ)Ap;Nd$M7c=
zJ?EQm*&d2z3{t!>6j%}%Xcj$FtT;99?(FWPk7+|9yF8{n=6L01a7$LrkI3F=*3~a;
zpD&W5X3tsIWQ at FiSKP5%TCdHZd8k$Y;d)@G9{RaEb}<XK9k8#Var#?=otCWq4?@hU
z at atLNXsUmz4;qWainmnVHJ8Na&5(U9@`BoI=#|5c{pr+RGtOexwmOPaj_0-I{06v@
zgM|gvL(>JLKez+tS7--Ke^&DA>(O<#ANryqq;~=T<<sYkqn48!A#)4Q*kA}taQjq9
zd>Cf&M;&VOSbnyEgpY)i<7Qhr%Zuo0>v)}#=$n6uYDDIAN}N|YO|DvSl0KXIoXts6
zK&;28+!2j%ekja;V>&ajwleeG$X}X at X-M$O-M;%qA5O<TFyrJWp#00Z(JFAzG|0R)
zVz%`?&9zK(V1xuR!qR65+gq7B=s_AR2AezLtH4A;Dw`c~)a_d<ru4cdqT2#3B4CFN
zVhexdNBN|IEWlnd0E;j<qi5H*=$SUaJ1B+o(j&5XQrX<Dq{Qvd0t1OJo#l-Wak<5n
zAnAsV1e$-lweK?KPZY7CU^_S=^=|Zb`4qQpalAw);3}2~Yuu54uEG&M#dg=7E$tuW
zdZv*sd!uf2EyD?3VhZ(FYaWbBYC=#vw@`mXtFJe21(tGLBpX_Jeen%j!8<hdU#euM
zn}N5Bt8^;n<PyUNw9x|%S=HUR%m{!-9Nvl<A|@{6iDi6baJnw17v%8&SJoftR0^iM
ze&;@n3~#Z$v+|%jX2oL{5QR3 at 7Z1rn<H;3>a;>1BqVZ3j8Yl4`v}Pr?h!QY5cHMtG
zsJ;j1V6j#EvT^%bg at OvL?arAS+`mbxEFyWT6zWNjyPcJ~hSy%iinp;$Bye{(ED=Ew
z()0Nis7}si#Hld}s at dQ9(DeZHucg<Q547|*uD>K_s5?9Lf~(aR;9AaeWY02*XzIGf
z^?({v&p9|x at C#@D)b77<$=dP2k8ppJLO=A`D?U3u_Qs8v#yw at x4%UC0BJmyGI^FLj
zStV_s8D9*Ps(en{4tm8`BVJ$`m5z3-&9z|CfRTr<v6)lyK01l%8LS9RQ;BQF6~hE)
zVev`bnb*$fWR^_VtmU4pnr&n2f==a*k*`ieJ-xC`A--|rs6YjM#$4c3yHkHeD`OhH
zlxDuoAIw~U1r+QMIhi4+b&Ldm7P~`20V1qLt-{@E#h>0jv(^y0GlW#L4U#c^qEUQc
z+6_t>+)crwDo_8SeU at f~0(1fKOs~iBp-VPRH8b0ub!Y`9spkDbR;Yd}9OCgG1`zUn
zt@~BD?Yw01e;Gwvfpa^{?Pq^CVcAVcQlPVB@~md1*}DqWVfx at T90{^w#+FzqSPRiJ
z!x9Y>EJ4mYi$ds3+3gxvN6yma;D~_GL*WYYDky5PSnQlBR(CQn-J)$okeJ#adJydw
zYxZ28e)phhJ3Z~o=f>+(n#E2a>jC0CYdEWi&o>CL<1c_7uzc0EX_bFnvk|AUI3dSa
z(3nh=`{iy9B1d18l%NwqJsr+?ry?+_4;61YEJV&g&TPTE<_oPp1~_f`^^pP&dZ*{G
z+rY~Xa1q1A at -_bQ5Yo{Jqd*5yd7p9&&=dCjQgCui9T5z!<0kyK70U1#Vt!vaM_W47
zy80{U+&bzUCxM$FhNFK at CD8XzduCk;#yf>v>k052^kN?0po|nk9|i_g4uI8b6>ns(
zzH&NMHgWEVcUD<fbGMud5|6Mc=E^}?C#m|fzXXAj8S>h8P`In=BXBjIri^wnk|`t0
z5nj at uI(2^9d-Br6zrr;~#k~Yq;>2%m11j&bft2&-=h?so-Z_6ZEVUl4cQ+w9TRm7U
zv+#nq4~F<3{(d at Rzsq=)Xd}$cYOz7K1{=y(&Opt83XTKtd;!XF9*RA%lBJ2D)mrh$
z#nPdR@!z))654dLi;yZ4g+kamb|WFK{PUD9j5!AHX1k~GF^hbRFG8X2xT17%u?2E?
zu0Q1Gv1%R?B_)3kln>)zd3yaguJI4DzseyKohTKOI(4);09 at wZp`RL$y7Tat+kI`{
zpgg4Jb(>X2+lJc$=0gSJrvTk!p)(Jl;QP?Tzfuak?btexS8}Pe_#j~6@<7^4GI#Wz
zJw=))#Hmnh&0_8d*0eB(2<IPUF+h-M;@R)(zh;!;UFd&u3&;kGo*;*xt-)=`(612U
znck9_8UBln#Qwr0r7wMHFOy=(LiUf2bP-p#U-!a1KCiDu92u0%Z}~vP(@yY7Qnb2R
zPvQRxWL>BmwBeP*c8uZ4yL-6ojjlWluGPHd1b!;qjjyC8Fx+|{^QNkAo at BZiNkr%u
zY6vAPlj48TF7<L$YzuT%U{MnlHv))M^Cy6mpc at e?EEhQj8scdKQ#EW6^Oa6(gj4Gu
z;X>Mxw+2Y;ImWm3|LkL0Lk$z#HvFzH(U>5(3W(K*r at mk@P+1w&X0b8}#g#7ZHSz=F
z<fA**R2<fVwATCxX4%l8gbekZoXqXoHEMXyd(wZs;vt+cn-b8hhAY?_|EHAIA9%Zs
zg?ZP3BOYTLC^iVe^sw!4*yMMqVwe`Uf)G4$-qi+L$$&B+vCT%^HD>u?O{D12`3Iy^
zrf`9QE%Fdd4FnG{{G-6M)3>Osb=)NaP3)i$qQ*)smSm2~J#9nX!H&gWzI;LA(OiX8
zZ#sWbZ}&?!a$lFpVaMskJ7>1FKj`AQPvM4X{9K;@WiXUjgnx<-AdZ(flJU9zz^qn;
z;1|tgz)YHRRiNGfi$#@hVBBp<1vxw~kxBqM7&;9Ho|9YgA}#X(ZLc;=7ZUeSS9SLR
zl+}mJNckZd*9-^gd=HuR70#_sA7u;}(^P+r+s{bu%(0tfN*Dyz+DHJpCcXN8Gq{oi
z1*(ikc>JhXqKUFw`2Ejg4bUtk!*iEJ`#mbA4|tq;0Oj9;-uI)(vqzs1g?4R*h}M-^
zB869P{wu%1h#qAp7hQd;hJR+v264ZT3Uy1jHj|<QF}YQ#ct#GYenguRR`=BhBPV~g
zs)LN?OB#&lURvu?-kF25PahcfSv+Ga at _2&}KsC7-wxtJ;m0IrD|FM4gI(%0$L|FQP
zSamwLX<6=r^T?~vGxsFyW2^EhvTq!eBYImt9PN7Zlt0yL&1m^JLGS)!my$P}?w-~+
zd)r0#QVV|4n^X{9q0NRC;eS2_oD+Z9y2!<{p}u-pb=-oh<jg1i<wg5DAQg0uErIOs
z40--HUw^49s>-;$M0KwcyQ`7c19A%Yxc9IPl7J=55{PWUp`%iUFDYI{Kqo*KUHY4p
zUD$eb#zYp!As*lWV>0Z$&2zs-#!ITz?X#w-j5QndDUhi>o*+V=Nq3_mi7S6qq13o#
z$9sVo&n?_5r(+KtytKbkm*QU9YZ<2t?$I=C4W5zcf>%0>?T|dB%CW%UBYQ{0%*>hJ
zCF0WeRf_<6<<AS%aRpy@{%s-Lz4E?DDR;OOxJ%(<zdOe=<zQoAi?aXHUivR&;li~T
zieiAb=Sp{sF*_JzvqP=G*WQ2ULND)S9<`Q{9{p_XkRN0KJ+N;rR8ZyH;}Xq5pLj#E
zdn(0WtZ*&?L(+i)W6$cTinB at 8Z+H|kBZI(IDrPWhZxpPlrAYDB3}GKudI)gM!uLa@
zBg}9L$za=&_k5Xi=%lW47P}C<(H31eHB|vLArQOfs4TKbq)PS`v59}st{*g2jfpB!
z%gVUA85F2*)ktT7L){Xx-_IAo<Zo0A=0T`>sZg0S#F>BI$+daw|EqG|R=CpMQmF_!
z+XWQggjSjhX_Db-ft;ZiL8mR?IlsYqh_^YXyq;lITQXjNdBwdo+NHH}3jcCx*Qs6A
z8-V7YF|yD+b19^gdK!N`1b-`$wKhi_WpOouawsgsSCwXjct%aR_4i3b;56Y8X)RHo
zN9Jvde at kk+fJyaNI*v>-gXbO!#)kj=A?^n*e1SinJAXxGF0MKo<yhmJY>v0L85n%q
zQ_sHYn({3sX6+xNj5gca(q`U3*(FC{F$4>GNDjo4G5fJnO$&dsA6l)1sOf15k&J=C
zjQ>m at sx>WyhIwY;>X~T+P6_&w260(cKBK+VvmUh>lQAe1K30d0tRuH9iy^z%R5}6A
zh9N4g?zXPtRUc3>RQv#Zut(>dAqE++*@oy(2t4qeQhC#l4@?g=2S_e5c@}<@_#}RV
zTL!Sm!wJ!y1FnCpP}{*32^9<0a&asj9#??2+NfKi7k0;_B(W_bFY5$@pq}T=QkIfQ
zBIV>q_~LT~0pOtwC=Py6nQNCOnDhR at x~E5pvYXhh at T{afbi+r{>^@iH)<8E1_IK1C
z^vRnl{2BTj_`3kJ?*?Gsz(fudLk!j9kN?m`uMsK*AYOlWbd?r%T34QrgMPJjq+xXL
z at fMhT46WZ^qCSK6x at W6xJt!R3Y?rSJD;(vN{@J|P(eoU`NV;X+Y<z(tWu5%U8e5B(
z4^nq^dH?W=+a)E7w?^9lSLOyjna0FqhX9VT;lZhf^qux^8b8^N<T(qNwNY$a&{bw`
zhfLBjvO|B)c}trU=u3QfIS)Wb$Bkv38c6tk;X6{o;CN at WyfL|DK=PTF{@y7vZ2T)X
zTn3M#>}%XA%{;fCODKVX^pux|Dp at T(n}<0xWO?>Je+q%Q>dj64nCgVXS+`EhOc>ap
z7@>IL8=u{=ehnk^OS<;O5X2UJo#3i{v>~9yB!zzupQ$n7W8IBc8>{U}bBjte%Twsv
zIAXPk%r)6bb at ZI1MSeGgLBNIKoF}g6XExizAS}Aed{^PCn-f>NqU5Jrp$s(QY8&I+
zcLEmfP4+T^mO5{jQ)LO&PiXJ)X6bxpCA7I1)7Lw3`Cax&(MXr}=7A at cZQtUDaE=wZ
zQwe`Gv0T}jEXS2#rE-aGVUm0b%`atwoA(z=(l)a5z*$&T1bYPPh&b}q3CG8>+dnJu
z6X4IkFt&~r+TQX&%FwEG&$|?Q;7k##^Lc&x8KP&CaUvfi>qNW2 at 9F9P<=Y4cdI7nI
zK@!<O%HoQEWC9btenO5S+UOt=4-|_P{K|hCp_d(|#v5tT{<F|Gc!NPj(U4LmSG31%
zI$Jqj#d=smB^viOWTpnI&56buT{_#e3?+JOE8<M7m|3B(clW<J`t8>$1Dv at po-Duv
zL&+hAKw5Lr+HyBDUmq5N+urWG%<VBcGW#NA*HB1~(>*4ef5b;J-;40pWp~W%+c|$4
zPR5*<Xp>SRy76%aOOWWT%gcrtd`;9c3#T!RN0QyIXNcdC=%c%&Cu5+>gGjABTWv%_
z-E~!BslF-X7*Ax}NU3~V*VOLLdzGXj#{#0Gf%T-wc!J7n9S*Cwtk8e7ZYMb^QFkTa
zKT|)8@{0KG*dlqtW{pl`*>gdZ4|RV(-;M)u7)Twrz}|VE8`PhWNv;Eh+EF&WBRSTS
z3J+mKO&Jb at YIIy&&Y1S^HdXpflWS>IlhFh$d=MX1C>PZK9_4bFa&rDTjVy|>(}qEo
ze=Xf-`ym(`QH#lWSg6|m#LfRv5xFWxCoEk_YVoqAc}6Kg_j*Ipg62?zh2(#%YLXq9
zo1%f%Ccn3LC=`cig$Ex7RFK8BoqvDc*##{4J|IHR;K6O1T?llFD*wfc at szqW=bWg$
zMXy9cPbM*`FAhldcbvq#aod){X=0^j*{5GnM>|h+ob2dM39m|??Vliho=`YH!osxs
z`Aj at 7y}TcJb2&^R(Y$WjzKee|%u(gK$c=dVx2|UYyRIq=0Ybc=B7n8N|CynxNE>{U
z^Vx#)521bJB})_;(Sx}BkX4zXEbWuChj#_XZS==k{v+U_s8uULL{tOn1~rL8%*pr0
z1u5(Z5mPgowxs;%Sk`z_{za6g4r$*)g4k;8 at i>t8Ac!L{0?jH3U^#ytP+)IL&hAqM
zO{eIObDU%2I$CYPhv_T5vNYn-5P$$j8ZHwge3;E=&$6tVR&PWW_V2|z8T^R1ezk>n
z-aR_+7Av%*D|N1RlXkNr!_MXH1uipRk0dG<CAmzSK;Tuw&H(V(utVv+F91+%NNt-}
z!Rmxdv<U=d#|}Szp!<J(+i#wvH~{FEORF1{;=G3j?+#Wd$$%z;vI<BO3iZIygqs15
z&S at K*B%`w;|MTogj2H&44{Q7Oo=|;(&Wh~z#)+8t+VrPX!?9btU*c}8rP=6(!ZZM;
zs4#n64Y8SU$sKuorG-!gOGpVI^A5VPZ~NI;ILxF~N1-_6-QRzzWz*PSRr$k6mZlPW
zPPUTf+^Kj`n)p{;ZTmsV-<U%Jrjwl>J#l?e;;q6I&dPRVFpdzNJ%V- at 3}K(DEkNT{
zgl(PJ-W at iW`My@*o%v6qDvn9qWvE+H=;C*!JlI at x9y4pU54D&z1=5%tavkMq4`6Q0
zoNKG_gX_|(jA4IV-mr?7^!Sxf5Jg<Dp*&PI4dYT`>$!f~gbo|P+MvlVZKCM!HV62>
zZgf<3kg#E~yf3!w-7m!orkHm$nV^MI3~@1Xuty_<ugmN at zT8dt5U3U~Egmi+LBEdt
zgC*pF|0G;{q-=Fvi$<n)uEuutnnMJa;Dw3nVkLg7v2cGSB*0h!EEJ=O#byMc7E#UA
zO$^IDV))qZ>ebPHM!DSA=i9OS&hJ3hZ=KR7Hrg4IvO`M|6_q(WcIPBv^k27q9DzHV
z#&NQ61vjv&>-k6S1h-Eh0QEjDNm7ZJdQOEWXUrKa5XIh_ToG6xRq-aE92*dYO%Lyr
zJ)=sE2hx9$6SY&zHnn8HC|)zD)q`WcKia6lp|HlT4 at x}|EY5dP*GJED>VcQ}$3~vo
z&z1x6r}z}h`&q70cu+PtcH1U)Ohd<c+!A%7Brg|>_v?TPnVfaLf`@WUi#JE0J#aNH
zSm3QL7ir- at D#G;nd4!O)P(p*FaLBT)VhLs{@)dvKa4#@IAG%xsF4D`tbCs*RN{%Ne
zMR|%%&YvZakPQOW?x1~cM2&AspiY`(M9xgemTGd at a`D?QQZ@)KD~-wpdvEJGcDh_0
zj#R183+Z|ile))zOt`XWpkEX2<lw>g3ouIi0}M=}wfG|miC=~cc?kJt$*Y<{lEAja
zN*sUEMDaY1McaTf){09qjk(?jaB>9?pNcw%jVIfLoSP&6^mL_aY!iNRAWMp7Z7x6w
z8Z>hyCsU>i9;(1R at sIl%vI&YyAQR}czm<Fs)r>wPv at M(eBHoWk`s>G{{OtI9tCEgF
zJQn<qAAL{#6uQClRIvB3jKy>NxJu=lGP!^9<oO6uD4#sV=2a}0i+(9t!^3kh^Ng&`
zr2pi8bz!nGsL27jTgN}86KcMJ7{OSjDSc26+qdQoOdagvGmD|`q#xKuCYM23nnr+t
z+&06}ENPii^m<3xQa|`)-%o>=rtrm2aLSyKpCa%I(-XpyT7fn)tyZpZsRc0eTG4-u
z3%5a|w`xa+gfK`VRl<q{W}0plz;f83e+#_WW!FGKGcym<qP(3gn1mPA4FMsukf+jG
zi`<=`v3uPL_WF=&8 at Xe1?@Xr#Y+0+g3u=IYcms{%$JlNS50^iSCYo$HSrc_ at u?{I5
zDy8t-%Pdf59wiMEEZcCI<HqHCkDh<2odFQ<qen(t!#Qk`yFck&Ov?%ZBYu!%aLK(+
z9 at aR@i;+$^J!7F>0*m}Bb$0C9vZahUT}^D;M%XPENHW1>Uvd>p$24>Cv^mS`H&SIA
z_hTX+Z1M|pBQ9fTS!QS;T<{}%^xfs at 7nu7N0X&p6t;bkNZwDlwqYo&>aqEBWbI-m~
zA8|9aEqQK_2F&aryr~u05_^A={0<N?q2GC|83F1h-O>Js!y$Ejc{rvj;A{FJpBqHU
zgogCF{Ij(AsLmv8TDHT*4lNnpr$>U0-L*g&)38GZfm$>XyEC|j?zw~(0##iTew&UF
zhe^}D8)nI~Qw>V`N(0hI%rSpOT#FF`QLm?ya|TzxK}fI5UqI!LvKpCCxc63&*ah|M
zwVYcLTD5vKEy*5Ia=BeFLATup!d|`>d2!NwJ?JnapLh>`ac at kBKF`n8_aF1Ta`tZH
zbiBS0W0IyIXoOXGuZahVT4)AQ9Nvx7HFXV2q at kP|YOiHAqxo(+W;lP|nLs9qPw>pw
z{1DL0QZQzp(_?v7iz9Q{DvAKFkVJ#Hg_UG2!&Y*F<I(PiLTI{5cQ-<-50|U&A9)_=
z$_<_BOTmE_LraTN{I9r21G}DEQ|B)sN*g$P1ANEumm544(H~34!g*(WYx0 at XKTG`C
zz6;rEV at fg0ZETO^Gx&e+-B%@5Fbten>^R1`7tof*!#jOhBtEciNGphW3Hg};+mfW4
zKuE>+ at NuibHZm^MCLsVz-6pYgNY#M$1?+K!RhciC#}kVgy19)R?J$Sk3pY_X^Gbqz
zwss^WGbp`Wfn%mN(qz%VO6AIe89`BpLd{W|b}e=Gc80J{D-(YfyF`poFMNH-#98{P
z@(wo$GfMN+6j2%=fTX7~V1?*2&a`9<5UUvwa&JJ-bY<%|8q7S^X at o%EeL0SB+a4Ji
zxD0VlMQ&H=cPQm`h1XLW;+{H3G^HqLjwSp5WL0N`%j!vywB<}Tg)i7Q{oB>E^Tlr2
zojoou1J=b0X3T&5(QIgQOpf;sO at SdlK<Nu2(-T8|(73gGk4h^hU5?avgeLmlTH6xi
zk(?a?9L2-Xf$Wm;df(PyHJsTrf~yB$roh`Nml<fhjLdIE(YKs0(MiowVAz)9mMAwq
z`Lvs=w$eVAU(4+m%CO|%#%vD>zt>&Gt)^eDozD>~0|9 at mpl_ugo3M*(Y(3`RLpci(
zGR$os0?4_z5DP0qgdh7~r-~>OElYM#P4K=|N9wM<rX-X&a#hVAZ2GUc8B{hVBG^U8
zEe%I01Bt%t9BZZrkk8BPTERwha>y{lpxssSS7e%i3N9o`$1kG}bjy2*uyw_ at B_<NT
zJQKRN_&a|PC6R1SPSZTb2X2N<JMF=-cRXM+gDY|>+W-RTJKR@<N=X<D&`A?2FhYfz
z^6n92jo{>JdfUEsph}Qg&Kdft&zZ<vA(A_cc6t|*#-Jas&DV?|$oQcm2`@(0MQM1~
zvcgsho8U6g`Q8IG=!#u=uozRg*%!D7vf{k+OzVGCREKNNs7d)Wth|!t-ZpckCWzv?
zKa%Q#N|ilr`LS4vN1|MbFVqW8A+}v(oU-0hHy>a})eY_uYIYCA^>?&t_{o9?Bb97X
z=RHm_ZV3fy=*PQ?Hc~_Eak3qztKH^P?f_W14Yd&W85_&kmRnSJGo at ud7pZ{Ixd3lK
z6jgtf{QSBPX~D9#%EJ+ifA?@G9x<I<tw|LGE=d8-60iMLLJB2>)9%^dc(+ at 7(1LW(
zCg6Ifl_G*k!ZOu8EX2D%Wuf8X2fX5y%X!sGYD at ugH1!~n5Nd_G1hA9<z<w at B61NM>
zvbJZ at N{D*#D)ZLmRIr3W at AR}MwF01`h8=&;kILCCb>rgn;&!9_(f@(L9R7Eew>a>1
zG3ETlD)Q%|FHSqS#a4w_*P98w%Dq>=sv>%xX(*0{8GKrPMt+h}FhKigNCGI7(s{2o
zmZ7ctr3Y*N9-bi-p8*faa+44JpM^O=A>)a(VCatEs=;I}z<!oDM5L3?3!)yssu6#G
zLM>+?A2~KKd`Ed6L{7X`eHUDsb;2r0aoPCc*=!^J1E>9{X0yA~)wCN*r}Xw4FO4Sm
zP1iFo_YTb{#T2c}e!s+REEs4bS``J~)>5KQs(Zt0SV<d7C-~mFjEg}YRT;h+!K5TX
zjWTC+dBb%6ChATx*zBr2FUe-GQr3Ufis~~us}?M`Y&yjLJfEkZxXYJvz|M4FhQB<c
z+s>tqr^49bE66%=$3p?iYchDT9(Aa_I?A12Uw%t~;%96e!wXolFLICgc#$RezkAI7
z>;Ulp+uwnp?u-&&FR0_c43Fl&d7u^HH)KW%Icrx~u^<qNXbiHMJ!#I(4U2#8cDr7d
z|Lk{&jcmN|Cz-YP60+id)P$0iw#xl(5mZDnN{3k_$!rZCODSg{dvlN%7ij6CP_7<l
zQ9URBu;&EMzaW1*e5k<kV$xFWB at nHz^%fefhDyXC))}xbSU&xVg56r+SvQfFX-riu
zsRW2bXu>B1<qlRK9;c^U`{IA3rrZRXO0$e)O;w}|{5mr8))GKy$ETyi7qIa05N_UZ
zk2#Z=xxGGjZ85a{qNXSjRM(#GDdjat@==bsxn=vEO~GFQ8F=mPp0e}qq$Qx{-!{!2
zwF5t93$Wx=*0fgs=qGYyQr=6AA+`Mo{R37Q_C^ehKmCnuxAn&`to47jfq%MWWleju
z-1J}~>I_2wrG&jZ^+017+0M*-vDVc=204k$+G5xwji?M$swa2bRUq}gHzy*mU?q#S
z{`+DTX6i+naTHS)w1m@|rJ*Rgdj?mUI;68t$C$7C2jV%Ue<30xhktFSejAV!&|++k
zq^B6689K>7)Co;&!^VFb&T9sCADrG#a1S-Jl+~XF>$^mOp(4IXwUrH`yvM)t-8A7A
zv0n<ID%}V^ejF0TBM?=GP3wSIW3I4RApfZ9slS`|?LdRsv3#$|<y-~6Qn at ixZduyG
zj#6XAtaAULWc0~)T%N~@g>6xsNwNUKOWf&g+$%ZIxj+yc>h*u#O$V%Vn6Xz>X7`d+
zDMVr^eOXU>yaT`~9;o6_Cl98ls*H1C_n)$c+v8RverPYMIrHwAz2##kFwp36mF*Y9
zBl;zo!jM~h$aemvzn!QFZS|?P%lGxPeMHbXwr}TO_Q7e|>Y)e%%7Fw*CP6I13kF=0
zI@~GlUQCmpS?YfTXD?ZG-~v3%g*9jT1pnpIVp`?DM9y7kUS;Bu$g0 at 2V+%9)=Y3v}
zrjof!XR!yMei$RdE6V-t2_+Q-7f;@)LDksAeGykX=RuBXb7P{p_6VW(iqE0|CsV%O
z7&&IZ;#n;+3be>-9eaRPIKMV2O+puewu7yI%zl-~nNWXd(KZ%R-GRWJ!B^#5d|H*T
zWztAXrg=(l)F=Rp`6U|L at B=no1FgliB1-+eN)fTJ6Z>3&fe4*FMWe;q2}+^Pp3+1y
zH|KwIIk6tc_&<fD&BXYI#~cgPIl$KjUf at jy!!qGA$M4V7uwK5q!1Zarl#EKSVo3yI
z#eSR+As&Af677lEeoUoEr|FfmgvAviqn75s?Rz0HcM~h_idYIPsxm1te)lW?(az^#
z00QUe#4OYG5%qf}FBS$~q-*1<HJJXXS`*4N{@FzN4b--daZ9h~v&IcEZF|MQz=P9<
zCZzT-xx13oi$077a)y<TFNmLr_B5;rrz-KI(87O2Mj#8sBa?zSkM!OMye_p6M7`Zg
zEZ~yobrf9 at N!H}`Wwyz|fz?YvOL2&UU*QH=MwqDyOc;0FX#CWl%k|^{I(v4D#tfmY
z|DF)P0vBUv#^JM>+;k^p8i#^8#c>%eXvR>4P6I_Y&lZ-*Zo~?iGyEfQe7yN(4!pa$
z_`81%r^k at VzGKvB$D}@tZQ+h at _^NdCts9nHL!H3--!YSUu<hN+LHxmDIPArKxg<e$
zv5m5hzAk+Bcf8%QtvMzymp=J5AH3?#{)uF57a+hFZ2!;1v6rvx#zR%@lyXFQ5OcCy
z9^{6k*b?~+?PC|BP+MW`^r+L=>|%Sw at sxkwhAcmx5|Hb7#1$M0&jY`$ft*$=6{FP;
z`1U541P at Begb+Z!;=SU2Fc(GG4{k1hS^>v#qeLQu&VO|Cl8!94F$TosC7bJ+I^9X8
z)CG)~yC%e4+)RhaUOge)(@=Tkxmxs5dDKE5j?{4`Zk4D`>-soS+6x-I<Cw}xjT(Pq
zr#ZBfgCrhqaQTbU+jeL4lI#nD`A>#g&mtj{^}Xb6J_k7~Wv&MG)F1@>((!Hyl at IK(
zLPNdrNn0WS9(3?Wvzq{UIQvg1jZZ~oHn+h{=do-_nYp>TDLk(WTvBb#4?QumJoalH
zb34I%3oY35b6!XUBRy`gd at V0tri6d&zyT}QRDt7Couys(R{{uu4_Uiol#L0ahgpZ;
z)--XuE>?7HC7Ps*!LVDl9gB(iNFVii#n~xI7rY9J{L70v5#;dTA5_w87!j^X%INkl
zWsQu?I|GhI0B8+Ma-ER4-P-AI<n5T>lfbLx?YnL1z7Yie1DkGk;ulYriZg$-gm$(e
z>dBf1wv>01UzTdbV4+;ignZydAnAktRf4j?YB?zuDUY-ZjOl_s*MTtVT+2>R_Ico}
z?whC;4|PSidA&j&nDUm0L4L?%?KY<R11(-OD at Y@vjbg0osC7((z=P2`>S{nR!>o1T
z$W^=#SpK#EGcL`mApE_qhem&*HTi-tfe%17^*)abH><i24JlqtaQ%`7&`Tj|AiZFu
zM)GD?6HL-_%OFTtuDa7`rJi at KpEN1Cu#cq}&|>p&i%xX_!EgGq??t9^JSW(o^CEe#
z>?FtPb{UzvgsT~o<TzjETE|T?t?=9V{hv^|hF&wmD|j9KiavB!j46K`rv(&~WR#9D
z5h!<N at Nz;vZ at gT9|E3SK^^q2qeXe(P&x$x#r?vMq#$Pd1+!POG;m5!$WB+5}#8+ at +
z>`Prf05qthuiXQUXlm#HzL()G44K!+=-AUzdv4vgX%#3{I{3QH)6h%u_GA!y!x_#X
zp&MVNdO^bP9=A_ea$kS4Wq}j+TwthHQHio1>?@N=HTz^|;$_e6t1)OZQG?5vOB^if
z>2Cp-%6j%n6FF%P3co9e;2;C!U;hX1%qHA?A1-9o{$1>%ouMC at D+$qc4!$02 at Ts&>
zqJrJZv~I1!_gCYwQej*pL;BWn|0=RQ>l}TCgr(%*)m2Fg-VJ}d$Zv9M!{8GSO7GF=
zTWr%F4s&B2PhIx0c$cW7>2Enu3 at YSoeaA`djVbeU1SGF|!BVr5Yy{Wx^#8ytbtWru
zktb?e%!yijHpl^Drk6xh8rM`ScavuL!>c5ug(m+tOQqI7{*2gq&WoiES(yVUI^vh9
zbr-Y5fKWgz6=i?dT>~6z1;yfF7S*@f$R*uBAE)uAkUYmWw?O5Jw7U`_lu4rp`UN3}
zeh^BdR}yPtn8&Vc*cLM}mL565?{x&$Sg-PHV~2v*6 at XGRJ1BdiRjv@cBP=YcllPqD
z0q1b7PleHshoBP~IxG5C$p($*igRBv<rATpw3AV=V|RbdpTyhUX}=aZxakN|F&%`~
zNzqqEX^Cs3Vhcr~J#~Vb<T_o7cN7 at b)LLrM19#XZy)Xxdq43<dGv^@s+k-A#pj6W^
zzbWT3;zY;S%@mRygiUIzc(Ov(O|u}+rW-+&o6%Eooxl-Wv|Th#vJ|eQ3&<ml?`}ol
zi>qjNDQJHmc3>1%Bl%E%d6^VVaysx7(FTQi1kcALUS?5a__{sIL%3)n5VN}PIgPnS
z_g6#*dd?d(hprBS*-30XgRMo_`aVo8`8z`E3cia8;KuFbo!43+8+|r#PV;88RW?|h
zfHwUgZB2}RZ75$JYOSWj)TL64H489F^}m+#uQY$*XnF*R!P2E~h-L9DMencjQ1i?-
z8I-Ir_LH`0k$$aCe?%TQhswIgZr8t;0cvzRcPld~?yg`rl||D{1)qiY!v?)IG04;$
zon$qiK+kBaM!qme#$k4j#@L(!Q{AZ(8fFQ8603eVrY6cu+ at m(kU5e{8%ZZ}wx<>1I
z-hY1?y^{dP8`+B~qco_!3gb|6x~kr8OGoWDHbId+5nqI~UF1roFpg}UlxX*yp?o7=
z#POZStGY4|^T-^oa#_%WBT1wSR@}9OTUY*dl%Q)GYv>ROY#_U5VIIt42AyZ4l|3jx
z`~ESxdl-go2KUP%XMTi5N3 at VXgk8>(5TAd}QC?x=ll;%h&hbEa*9HjYC8>f?GQ_MA
zZ<PCY!X^ed?Z$(kOO=A|`~7NPrCSBNGFxh95?KYISUCTD>A>+#Z-dEe<DB*9Q}{Xg
z5%gzU<3-x>I3c}``Qf)UH(KA1l&8VXC}Fs3Mv5%*a#UZ`!S|f+F`R$>M%Xw{h~|Hg
zm8o at rWlWgRXP1LPZyaq5MC3Tdv-BqghrW92Ul=joxaoJaFGyko$V-=1GGr`KYGLp#
za(E2Sv$Bj*u247FbEQC$DmN<UQLgm%5jx at XLw<|b45NlD>KW(w<}?k8|K0qzce*E=
zEMDZ4Ukx>oH56aY`%_=H3i~K&*pGj1eN3AEqi$joy=?<s;D545!QLK=0+@*OJ$<r(
z^}E`$dldq#*fT-;S-EX)V-hJ-XXn*(1lIH9PC9H1H}h|?0PrSI<Gx at bzWTBEVO@7`
z+H{0xMPsqLSAK9vz!j^fj at cs6Xj=IY7D)}mlf3^3?H#DGnAp1!&Q9`3ozZ`E=;66e
zL;!si&%2S0G<#eoA|a~)oKfiNHx&GKho;5`Qe?8;7BB>&7E%T-A3so$f77<}w`X6X
zj{7S$0aQklz*BS~I<t%^1y(0FGZxZs#)?vFbSNnAmPi=p%3|g~M5r}+C=l8Lxt~>Z
zrGs!aGtRvumPCg!^GF~~qPl<YO%fte6PX){r_uosZc;(*sDETb4KwZZwgubu%ULg2
zjNIG^rz{z<Ts_Z at 7M_XPX?{X%vsHYr*9z`)3ZL$2&vjBGLY_IjQL7GxO5Gqqj&J4*
z=a>#J6O`Ne%<|n9ZAPFuOg9HloMJW0yQO*6eVS!@e~Y#tXh5kJJ79l_=8~@PS(#AT
zaL9{C6pt7*NsP50K at A*CkiM%Yz`(+eqT86d#qMe}K!59gShfQ>PYx-N!Fpp^Ud at 0O
z9(mv`YkxPSR|`@<!9>f3u=uMQr*ns7ATr)P%usj&_~99z+Z2fcgk^1hZYSD5Fz8Ag
z@;0AmO)A2n8?>Qa&3S)`jI%Lb0AtT0zM$15^mxPVCV?22^(F5o`RF2bFeJ<`_OYB}
zTMj2hZD(n_xa05U_OkXS2KW*lG;%+3*z=F6>W2oIj2n5(Y!c-C^;>Vnvt*YbWC`B;
zjpCoK!&sAX`-KYPI*wZ@=I(zpa*$Rz*z<2d at 2~E^NB55hJIH_Z9r|lWdiGYlVQpPQ
z;!#{7`lA4bQln3Fx}&d3H$dco{&wFWJlWRwOg3de!zK<0ct=I}6xrB_9eH&&G4Y5$
zAVd-_*H~$O1`BVJL5gX6<#slmHOM^{jrpo at hlJ*2B+aXh%@VjgCVNwU_Xc$Sz$Lp|
z at OeEB8E01K{eOR1(!<D%O`qMx&1>izG9S*Pz`e4;$jS4|7wQ$T3=!bUzQZNdR2{;l
zP3Ijxak8*IoD%78-*;GH at sUbM+6LfjGUy#ayvsH9)T=iYt1;`o(-J0Si?vfWR1^%8
zFz2FyHEM8^r>pq<k$?c=C4mZYY7X#ML?SIoCI?6Ok?DW<j3#wH^(quLsRS*%kYofb
zE>2y%SRg}JwH3b`lFh3Hu#+~^H=3H3Q at B#lchaGi_Ep{qPr<r^oz(=nbmjSEiOQe7
z8*3pEmHD?`)sMz`5hkO@!<=5FkF`En_tB&|g^GL30kwp at QjK=exo1En3cq$by5=q1
zXWSQbAP;{nAf+tE4=BmMP+YswGfBKhNuQ32z9!pe3e%v!YBHCDeMRJAEefd^mMBz7
zB!1$@_){BQ+o&kG4dE0vpYw at go-H(KjK#@Q3uE>gHv|Wm`?F8wq~xwjmeTjLTQZfe
zn=+9*(Wp%k6{h}q1Z+Nl7i=42`I_L^ehQ5lvCV(O!iu_(SBvaaskLA1&?I&fIBxB#
zN?1l=<Tjc}T<#<%VTJI+|5)lkBc8C*)0+0KyPkFnULZ!Io>pFS#eI)bow`+m0f(l|
zx`GfR94NMoCrKi#CqPcrF$AjO!v`Rn&k5UibYWuFz>1Jiha_VVfWxbElF9n<s?S7a
z{jz_SzG+jCK!ogG#QUAI)Uk*w?CxODw->`EA#P at Z!)pouI>W at WC&wQGwsh5jTU^Rc
z!s^GQ(y0u1{!-V2%9AcXM6z+~)ULT?iTngP8{ro&HMnAtA_otR{+qeSU9aAFi-6OM
z1}MljnDSvhNDS=IHWq|bDA?DBJKSJ2XODkeXaI}|{N<E8Js{^JqUA|NZLlV+M=+IW
z75%YwC-tp6#p_sAMeOj167)KS4xi+cUkWxBmIUKqXrSW<S5X=Ad)mts2$gBi5}qwF
z$cXAxO}Yh_tjT~1<tN1CS%22bDwd~WpIl+bnOHFh6?~h9v8==wi6(a+9gnXXD$0K)
zZ!PwVHk at gdxEY0RR9K||d8~!#bxl4&afe2r#;uuWVjz7T)BGMeCi@>{C3+pNwpzXH
zAg1Oa>i`R at x4VJOxE3@GbBwg<);~LNOIHLaP1XOx^bYR48Hal<Pv0VPx#}E&$*eB6
zSZiBQtM-up!p at f$@Qvjf!5fYe{xpADn)l2_EQR@%X-bWtGo~J;YBvPAUtty_kRh-I
z>m5|sHE<jBjl>yNGyDx2dE%=)nrpFo6#`$Fm02&Gfuo;sWL((a0*(eon|Ol0**a2k
zseXwO2g9=40?7XSI)$ncv;M#%vkg$<ZJ_W($lyvGD}R*bp#!P`>Y!agZo+>bFzp4_
z5;c6Nd)7wADnH2ADC at _|SW}*TJkQ>8cc-81;N#oxhU~KQx)0Zd+VoH;O!@>Gvm<tQ
z*K{{Tcpp0%Uv{3}r-g3#SjO)xrT<E=W7r at tPs_ERG&RQ6k<;~E7W_~+65t`4PsolL
zwFTmwoQk$o#gD?0h0H$YW(0q7J_0Up?;D`hJ4B6qX=kAI6DvGV+S{QK2g)W1pS2L=
z*O{4R>w+HlZj09O at +*+KZWMqt&+1#!23MvDZe at EGVsp!Qm&kY+c!qKVcXvb-nTlrp
zk{tjQ&%h*6 at u)+=fX5Yw)rVr&u{P{}s1ru-9VY9;Tb8c}8b1M~d#!)hLh;@+KW6$q
z?idGR$L49VT{Zy%(NpG5p3ZU$yfr32%g-AE`j1I`n!h&Xa-?kaHSZ&~f6ok*yZ)(K
zH?p9^JEU}3R9z{PD)Cvhh^wJz%Y$oYOgNg1b0Hp?`x54S at NV;<o-;S2IOnV;>lCjL
z1xK>Pn_MRRy9quE{9S*6*{ZYgZ1(6G3-mNLe+n?I688Lfb{)H~ul}MMs|DVmII(br
z>u=U}?`r}~qWV93&|<+0^I;QVb)IJsPbAhnP|Gr;p^K4sB1)yTLV2_PS*M(*1fZAU
zT6OKTjDoL93<cWQ_IdJl*EmE$={cohfqzt(Gy{zf1TSXFqndxMSN)q=U0&Rdjb1I+
z*C4adT`$T2bwVO<7<Ed+ky-_f?=-?F?>4(u?I3ujyjU?h)cIi_VCuIAGC6doHgu_l
zJ_S!dpjeDPXV>Fr17r_URRy^n1TQ_hJ)x{m5IY)OGQ%yXI@;8kB;|8(<aBO98k^wn
z50#h{iHr=U5k-Gl&deV~o314z<ehl at b!j|oSD0WaTjb1M^17o}Pb5oZi7OZ+G)7x%
zg|@GYf9o=RwBlt%*F*PS)5h(*AqkD|r4<JNO-Jqw2U1xu?<LtEnPiFa8ZJQ|G`|J8
znBx&T0u(5|L>|4RDh029WYMskRhWN6hjEaL=8Y5t#oT|>EgU-ydgi=@pYsF9=JF^A
zNRtHSVv~SWbq_YzC{qgGgBh_<LW0Wj$(Ovj`q<-$FmF?5ucmqt-FT%u=$}sSJWa(r
zM^?V at iAZxR014yG@xsp>4=pX_DFyeGE!vel1b3D9tJ#hWU9h~azYqy;bs(LYxzk|9
zFh{poUp9X*Gtb at GN7fXrdro=i!9jPNx_JNY^ar-mv!1CszoWe|rM0^231M*C3~yTX
zwB)ReS~BKMa at Pv-S|#g#Y+cE>H<j8nH1k?=2Jj6TrpC>%IFp&PFg6MOqvlyVq<F8m
z5l$dzYjHQQx}c##+i~JfbHGJW>`X at O&v-#k;q!m7W%~DTp{Ph}f6_ma=d7K7(BR#y
zHIUlo`=6w_iHf2df1_E`f at TX5VU={qM5wy&H5rO}Lo$3Q{qi`V-9 at DfT8$02`s9H|
zfo=S~&ZGeVjGocJ@%e%@wSLho5zAiDug+|`Ct4t4<&k%d>#{haiAij_r#XM)U`h{#
zYhZsK6?<OU6e-#0&I^*qyplV%9X2?s^W3GdRug|rhSLjsGFx_(f?k4_?4ABWm0Df%
z#y3Y)a&QV>qA>~5-10?tjh8;U8Ggtl5J2bQ(Gr>Mt{jE5sv5s?u^Ec4F9OgykRJ1z
z(ufBz#y&3~(q2zzBJ3lDDP3TUVwp1E38#O2?~oKDa_STzD+Aiu-rMC>@{Opr;@{2L
zF?5`u%pExAA5>725z370I~)Rsk at S-HZl+NxI-eE2vPfa*^l#D%If`G8YxR*zLe^AE
zcUWlLl6+;Ur=QS07T+$sWI<&=nLR>U+(U3W7Pgy^&tZ-V;~FYDKildBZ6flsb*q00
z;x~lzO(nqSZj5SR{(`mq?{py0A$r+Lr_u=4j%dkD1}6)m)oCfV?`bmSVzqDY+Gm*J
zqxQ23h!GcVEfn7>o)Gu~-viYwvt$5Zr*tPdPPYDE3v&QBgJImFO45Y^cuaCx_Q<Iw
z&^G+j-=C=lQ=Z3$T65562Ry}&?aqG~(wXUk0%Z0&g&mpT<tSk;=^eF>Yn<64W+#~q
zHOFz?G)=gh23<K$6IV^$Khqlb`f1gho||nSr00zk2La`r<isi#evQ0Dl&>Ur{`5vo
z>brNOZ4mp<WJeKCT5N|E!JnshOuDk9nk3CIGQRXvAM=Z}oPX3-JSGiYLU(_4oSQg|
zw^$Q(2D>e2`jLu7F#`{sdwbs0P&=-L8exy$L77iRlz+RqzlCDI00}_$zn}Ur#L%`E
z6QRtV7mF2E3yJ{>+p`?>iO9V97OvgAX#O}-$rjU-S1HJyy5ldCe?D;TfBo=((y&nM
zb)_k*kh3REH98SMmLLc01#N=M2A61m96#*F`CIFmpsRigH}FTFY!fg?;5Y|vratv<
zvnJZ5IyMBo-syB)I at SztVbpZ_+`Zl*GKC%o*yMW>szMIOlFhDJroxwjqQYZbHI+nc
zXB2aUTeNi*_p8=-h(Cx|R;aQ)o#GGE!b>LyUJnJr_5pw}?F<(WDiY%E1YC1}KJu*U
z-PPvYwWjzxPOjW`41X?sD)vU at iG@Vn(b}dBs6^+$6f8rkMo$VNxM~kSCKglRTfd|E
zrE_X?1;78rJYMuLoiuNu{6MY<FpB3XGd)?}!Y^5i=0(F1{ZRMKBnQK8?pXU8#fT34
zmxYlh6z#e%!qqsQ5J^jtP!U;wKSqvy%I}*~9J0?nc}s!RFlskCCyhGQg63dF*ehMN
znu5-M4xdft#DudZZ+){&yoXZGQJ*#&gxFl5wOXlHq7%sj!tkCck2e5$3wi6|q7-(T
z{jLiY1MFLh^iDmO#wtT%L7<_P0ZXov18DRcA0!Ia-nLI*cG}HHF^uqkr-u|TkmG(t
zBqYz>r4`fKddg>EB_|Rsul1~+ItPoOZkA_lST{X;xdw?p{n+)Poy>z5DD*|j+A52&
zD0y{YP!sq9=>Y_^NkQdt8;QpAG*W=xaN9?w6AWbv+}wE+-3B5DJb9tBQynqpuILF<
zjcCSeZwm at dQ@zib4~yu3rS|?%@3~!ICbHT**co|dc)(33T!NK6#_YYDIZv9+6(5eU
zHbP19A-h=+D~J at ZdP;qa3Pq0BK at 821`tY-PrfQxP*$9P&MMH?G7e?CDT_tT7@&49_
z!AcA}kaRBG7QHKvTVx%*8)4+mr<EU8vDlC_32NzJm*hQEyg3nnJM8lG-GTrB9QZ3C
zcsXPTv<Fm1mr40Z&e-_CY4D10nN&om=>{``92WwL^`bbw(&IdxM%)PWp}Tc7COWS9
z at 5y&CUHT(EY0h at ece%p at YB=kbxRJeXcQAT!?WZd)z6mu1KX_%UIz9_+E0 at f|^OJc8
zY4CZ|Qr5nz88{7p_m*XRN#&xvtz#Bb70b(`Eh?ne9Rk3}ueo&I>`yu=fi_6{uJfk}
z2>9~Uz%TtF6*ZO$xT{DhqGqBByLj~!VfJ{G84PV$etTvt9V=Xa%tk<W$U7_`Dh@?@
z0aXGhhu_sv=}STS0dx6QOo7#Kp;>KXy#wxS%*%REchVex$pl^eooLt1ND*SQm6C1#
zxZZgqoq6rq)bvN9VywC&FsI;mWh6%m?fMD#t(4k{{FbqqI;`<x6=HL(L12EWrXd;(
zF`Y>R`W6lz+_no?jf%Z%HKBh~0H%Azsq!o@;jRRAP{`-`__|o0lyp{P4h)ZV)Hb@(
z**^*nRF*V<{Z6k}<M=Phr`!gkr27?@K5l?MAOQ)O7m9AZ2siUAP?_~_!XyQuNzM=O
z>@Z^>>bHtU*Xhm;Hb|I2CNu^v=){)JA=}D=5emuD8X|`w0#dak%MUUdb7^;@J};wD
zVU!N7pWWv}G;*B;-#Ow*yiV!SWOW2hPte9mROU;6<aWc#l-~s at y6yiT2j~`^%@hHJ
zkrSkP3$SnV^l^Y0bZDCg!Ra>#rw%dcGatt at 1PFR~QRd#Iah{Oj at mJ_qsr$`2)<NXX
zlCDLTUR$S;4=}J*s)8uU%%Wy`W1hv`$Ob*5%`-EKVQtj4h3Pn$cj<!dIyMAW-(Yz?
z9P2xOC~#{IB|BD{qH>(ns$F?L^CLC_v@#}<rhPj#e~<JmumGTK)W++RfXkD7N7=CE
zIheW<MVe7f4J$R5GckvwXX$}>3rYf-B7@<(5)b5d$KX{6%y`-N+fhRhso!5{4 at to4
zt1WRmM-EJ_H8NX9F|`M2Y8bc;pyO<aK}^kmTE4ZkPki(nI3ok<6(!uAzsWO`2%3wP
zc0lFYCR&R?xUryGs0;R at qs2(^Mvx?$Ba}$_awNtR>OR!c<z{;$q<>S<ZTqJJcHxcX
zk0qJ+xSgYOi|P$5)F4rAd&)f`6H#-<>%(h-;THhuxI=)w-E8#>U~*F?dR!Y#5L`5W
zo?b5kDBOrE;|Ks#pr&n^S8F%v&$a^X<L at uh&FS9yMMY_MasEhVY_Pm<wtLiZwhEh;
zQ8$oVMLbMXDDd=N1~q<TeL~({pzl;*ehO{kS5zAL?1+mUx#%5f3|e=dmLcL&@kS=Z
zVD=M?P<Kp9 at Fn98t0C}`so`IJGA*2cVWaua`t7s0{=fGV*-p- at F{SJc3ur$F_Gq9b
z^_VvmO0|Q)KrxnlgQEP-CpF at 0sT_8ramiKtw}M=CVK7vdE at m;2VM3&AL#1G#bjz}p
zoqGu3y?=zo7bm}Ca$4tcyL5UtfP?OWoeD+Lp~|_LG2C1j*d=7qBuqfr!qOmr9emk8
zh1sd4pa%MPSTs(8nNj*@AqE5U{Ue}Dn^&w>^)N=eg)a!L{4nM_6gsd-vlmGrR=giv
z%QX00WgDmFUT{K{=<a|C{<}Ati;o&YBvtm$Q(-yg!&YR<wQyMZJdhBdt=+-|dB>B_
zKj*s+QSC}sVD5krfNXE2C2ZDzd?o6++2=;$j6;_jA&Y3PM{;A%SMh-1dI)iz!xu at y
z^%jZ0H6h07*;l<T8buq*&H{y<&j+oYi?w_Vg17k at aEBhH<OCs?>I9Si{EHu=6&%ju
ziXY5DjHXB*7C^yovKPL?6Cb`kb~cL32Q{(aHB_{u0Y>K-KU at Mtfx4Q1r7RqK?g2fH
zJ>m>2hPi&%vb}XY$p{pJxZm#|9`nNJK|7GVJSv5I>IzI=0y#)9BTHI|d0hs0>D64*
zyF~8Vrhq?H%#_t)02&*(h<pttj}3<f-wc{3vP^t-bmLgmohcS;`$qd}$}V;6*Cl&?
zQWPEXZ?Wh at ChDh#D<n35?I6?ACOLx<ET90-3+M5D``*PskhzxY$af044{{)W8!Qqp
zh5a-jjPq_M4_<w3wmqVyS!dy_J>5eXtXW%lvNI96YCcqCKCdc6QJ?|6^tf~6K~Bsl
z7JfJop?6`fYzG9oH(XqeY#3P}>a$|K=~wKnU9TATts%K}_^<qbzohC?RL_5BTz0yY
zi5sEwNQ-=~3stp&nrc#Cjxeui4BC4II8y50ca%B}zkB)=SY{D`yxz=DYCE$-w>1b-
zbFFlyEx~uxB-3vAV#%7H<^~Gr=lkoBKbda)b_8 at fY#|~!hqmf*4C6f)7 at pOYEF57f
zk(DwSdc_Ac(?{oj=nAyIW9a~QAiZjF&yhw)WNSxYJ at RLksSg;VH7iSs9vNSNEkv4r
z0*uX87RUwuykX`QVd&YCjb-%;OvFuJ*}KvfW08kw4tf$xV at 09Tto6UPa^;{XmC0f`
zpN}v+S>wgHl>e}~DQJ|(RAZUm4!m&;Y|fw|<Ya45M6_Uk+Z&ptUkT(1QniUkHls>I
z9nEuDi^H*{aELIiPH>^nwt~pq1w%*O!oeNZ$*ZgKJLnUd+~-&oR2reCly{caZIvVC
za&?eoQFpEPafhPWyMzrSgc@=_zZzF<)D_?c^JbvueJxn0!v9S9Bw6c&xwGI9Y`1%w
z$|u0HfHz2g$?NkSs4;4zJj$Tg$6iZ(*aSGF-`bVlxNTB41lW6C>jVWvUjl%uDG|vc
ze~L<JXAzNJ`cwlm%?l+bj_KxXkl{xLqxqTVLA{afBkoFf8W at m^z>7n`2D(irepZ}Y
zxSut!gY+&~CtP9R=QA_P!R?CfSV&Dd4=P3=tc~b at p-S(o#^ztm^z_8}S0QH}rxhOJ
zCgmI3LX|e29i52q)bkxz(Fff*)KWon&;+67RKRdyQK?&@aa3%<0K>)%6qBAMcQ;s&
z{dZ93iH1mmcErF1stN!1cB?@9VCCW57Z$?G*>~Ije^^7Ec&BeQj7lX3Ec#-$e#9<n
zltIXU4APyE<Z6{Lj9i}oDweS#AfhsU5}mq|QFc6our(j@$(}wY#_1R2SAGPcUWCkM
ztSRaa&q<-c;)Z at _tGw+xg}X2}RY70QP+gm33DR~}OKCuHnSz6_pdz$Hkp%nm_qi%t
zXW%JWF)8pCJREKqkvqO$Xdwq|tl_el*Q6eQcXrXKf{S9N9c*jwIs_^#zftkN(qxP~
zu6v2Io_9=;`GdOiCM372XTDH*s&I=F1=E19k$Ri-17M_25$-kMUjoDkNs-E%zQS1R
zDi7C at Y9@pVKB~314d6fx|2TA}iMWE5Ee^wAL7+_3^GfhGM)9X^$gxekr!in+7yrh8
z8Sixy5Km!|)!!Ja#-3~b6@$#)nmh<DpS}zMXc*-_rJ#$t;R at b=B9@@-+Zd+~pErO5
zJ8`TjU+WNYw4hn*9ma&FLyL*c at su9ajj2Jh>j`5fiee#9!&eEN8kUCiTW=dR(0wY;
zRy<4v6QdCBwhlhzb%>*sRy#R2kV+JPM8v@&$5Nu>zL^-Z9tZyj-HDMVhJk>2gjRhW
zWfR1TrhAj`Nnhwz%v}{FV{{+WbnX2id9_Co|9dDQ<4+Sl^*NzWD+sGd-ezwC!lUs%
zH*}db9c>ms;JlzZ)~x6={I5;HTrQ9d67Iq%!Tc=t)F^i$x?Nexe`jV?ik*~yJ_no2
zsfSGu<F%~-RHH3^j^m3%=PX-dSa?VV&Cn$ts!2N|OiNTKU^Yi0Nk4_#t>E%3=0n>d
zRb63KgN~!^Hl9r{pjF7Y+V(yHs3&4~Y1kZs8`R_rQ1%NV8H(~R;x=Tme7nWs^}CpC
zNv_t~-cqd)O=Xly#>8ec9ZPzDl_X!;WGwmI>PA*jyTQ at 43IU4Y2r-9;!K~SuXA&Da
zc%h7$4I$#SLBKJ)^E~feCv*aXlaF?w&;dRPVV5_9k&|D<*53H&8aC(;h??=JRQ$2Y
zc<l at Csz!?F(OpD6^z0F)<g9EK1uCOg=Q6Qc$PgPH5ao`;DQ)3`Uk&|#5Si18ehvsg
z8WN#sTSzR%cCi%<QE;Ocor{a`f#A8usY5e;65MSUxqS!nVM3t_#x at t4Cq|bd1e-um
zd&!rkDA<jA5HItORFOjby7!wFP!IKg961FhTIK|>Rsm(|9v*&HLa~-m09t>rEs$1D
zFeJCcR#-XE>o?ti7cV$}G?ypMbj3dKkn5eO<;`yX{FiRgtz5CaN>*g(DW+aOn(tSD
zZG%HQdW*-MxsW9Hbm1D)pavWYHFJTe>zyFg<egn7-*J at 0)o;X5U8rOP0Z*&bD<oy$
z_k3_PFQJA at dGr?CaQOM4Pv~tMKC?tB;<8%qo+lPuK*sjZR_MilN?Rwz?~`v9y*i!G
zAm>>41{e1Ee4s}-X2)?7C;HAA4EsfgBz6q4c%R7PiLN%DlNkz<kosFSC3(nXS>MOQ
z2f9ARsh0Fw$c0J*cmK}`Pm9AWJiwL0 at 4=5){__E at G_RAFP}Q`(5$f1S(zr5pT0RC*
zMhhYwPVqU6Y+OEnK3WiKZ~Pkc0dc-!rksEntfye(7 at Qe%sqqNDET0x2pVzS#zO+R2
zW7wbAlX4hW75WlFNMSEiNdZ8l*!29_Kto#>?1pCzYtxZtt{|7sFLhCUAe1%LDxq#G
z>t}vdGwEX at 1%yuYKQ|-6RSm|S;AaBcnoO0Ef7Km@`ELP#@rq=^>cYr#a%(~+Ta<3g
zoL<mb`EU{MBx2-vSI5n(rO+Ol>LT4U{83nzY$q+!dwQJ|xsx4s(zUC*)@G~!_C9bm
z_!!Goe4l=LlJXtFT8g0xcfk;VHQOT&myWVsy-L&LZr9NVGBuA;c;27NV7?gVcf%Yw
z`lX!e at kB{~Wgxf)TfXzQBuhrNtxjvNgF{RZHcBJfsyWy1^EPYk(X?(>oHF6yd*n>G
z+;a3`$uWGzBU6iUw~rp7?sS2xr^-A02w&a5A+3_`?4qJ37~gU`FOqRpRs9=wo~hRN
z*LjKTFSas+FB_|);3cJtabQxSqA5uCNI^(<7U*ApY2sVjvh?|tblMi+xn7guC)ZrN
zPqZL;lNwDE{-EWIsf|1;(aZmI_4%Z#3j9^2{-r!#HEhfbf-Qcj9QW!OM?NYgV<?HU
zmInQhdt<cqWG7;C*I_BWbL;BTTvY|Nf)&Rdg>zj0>tW{M*|y80Nct8QnOxNc(=plY
z*h7YY<WT(Af>o0J%1$^+RU^z`9<>88q0a0B&U|cfg+vJIoJj-N5eJ9Ya%;B7?}wTl
zql774*CW{pEisC(`dcYeUk6#q)m+p}F12vYkx{$%@Z&N$_I`{>9icd9S0+ELT*!4K
zql%61+U*+D>x&<dN*B>}x1KeA%`Y;!i=4ZEoecKUB<Jf)eOSf>h82IKNAuNxc-!Kb
zUAC^mH_fLJQkdJAX0>#b^sdwS4fwst0g1M(&A7(wWmB#ZJ=lz}!Hnj{8 at AG%Fu^yi
zo610?KGQ4PeLu_(7t#&mB8>E- at bX+hsZI{s*!_n}XDH6?SqbNiXJ7M<v<xI{NXd79
zW$p|`D4<uDUpfZIvxktfUQoR8us(|BFc0J=UUp7y9uN(2acU*$e(Utk7)*oR)fle-
zx`_tC6)_kW`Ng6^AR6Een7;6%oWJF)@&@D;40m%7Qwc3F!)yqN;Ef^9A3e4*xZG=A
zr{%jtgIE_!8aOF~h3*9L;K{%;)Az%FBIl7rEO&>gZm<V5YsYK(VD(Rw?pqR#*iJ&d
zMrd!f6utv{D*lW5M-UO>rnl at D!D at WU0MHIiy2!VLxEL`0`%;tiU$Yc}L&^?T&HEn)
zX{a%InSmMv5PpxXoN3w>K<5cB0Eu)e3g&S0-*IL9PA)HxR9<&p4%xwV3?#sRVA**O
z)xBYop;_;5;kehSgpjd3XkiEg#472QPoLh9y#u-sBM#C`r{`FGY-^V=X3Yv=H%qf(
zB`Wr%dik+Me6CvCf`;eAjP9hWJi&ZUYD4&a3ocMA(yp8hJRz&qGunF)Pi-wtY(!xy
zQi31{;>6kZuuKPy at o?*#FU@*?PS-Aze$`j21x!gWt-$}bjW>~QkSS~8-tjVXF<9bG
zhk@}vxC!9J{m&t`b>JUhqU$d0HZEpflxJl;X*|h4kY6VeSH05hf at -S+g_2Zj1d2)F
zu^HiqSc-5W at OZSf_=u%5h%z>d5S4|jU`UvF^|J02AcvMy!@KLvJcsvxuj;2ojpgI^
zNcEeEm7IOj*~_l*5MHBbj`-t7Lcb%QUN`3N&_`lv>S_dUJ7=khigxZIv_O}J9K<lN
zy*fmSItPY~9rIO+-rSss&ju{*UYEu_RLGotszsKX+v)js214OBTj?mDkjGT at 6eit%
z6Mit4y1yR!qO>?DTQ6UKaYdb1C}EiNItGRjs~O89`3IAe9l_Uz1$fwP9)!1Rd>9_E
zC;Qitk-9dXymuGLoBf3f!1dz+)Mx7Bvjs($KFSOA%U1OePKdre;!CPJIFPNlx{k#4
z7?WBoVa)gXQ;wmu8USTK^Lw*~FLqK)=QP&U`52cv2i`vAfcH;-Z(OH3(7B0JAl=*2
zR4PEU^A@|e-t9kZuewp_U>pB}bSuj_yTHjw-goeC5M#$Jg9I2>wU_!IZ%IHq3$Lnj
z*u3uTNd(F&y|9}maj(jcX)@tGhdL!-Z?^*C0vR3(F(&Y0;%a34vS6aExq{P9KUiud
zoCPh2`pn=fY;yE}PE!4hD)Q`XT)*fIV>7{lUpz&Xp(u(^?VlrSDl~t|%`e`VohZaB
zaJeCK-rg+a#eKG#|9UeAMxY1Bg_Z9<s}W#Wd|LdrE<?MgT0=(NrdW4!vK`i>B$wr;
zf at 5?r?)h`>>G7)y#J10Laen$p#_v+IB*kP?>lE#hdbPcOW>YbYXU2Za1{L6}pOZ0h
zp25}vZ)hcnBORT9*RoRbld~rq$@Tfq``h+U2+#&Ob(4+T&LpYjo?>P>RysD<gM9LD
zO2!5J<G(6uP>Vp<o?B#Mu at J6w_oEt{#54}3NF7!sQN}e1M``|#ba5ZgtgOQAw5;mT
zNsw1*;ba(pTZ26o<l`BY-_h33`l(!bl`AO~5%uPTw3202j~@<tYw?jX@^v3td(7r0
zEHZHTLZv~<2^yW+ExTF*zRe#ec9x8nV at Ghm;-{T^QRLQuICkoACDq^wEgT<3X3_oj
z&z6R-eO*q>?ImXEST*MaCz-^%+raGPsUT at W6fKm0$Ht$%UX=kfZx5nnPj=%+ccznG
zWVPICJl$xlv$D+qhj%=C=S!x8dI=)rsk}T{ag1(P7m(K3J^8*&D}4-)f2l0XhGq-t
zvI=kCpJNFegc*lfxDsi6V2 at LhQjSI8ev~~a0;Xt9svdv}e{>NDnNmk}O at xK^*?*Lr
zE%o?+nJzbvD1l0LA!3|dA18gYP#TcbGNKP0kCiB$77LxKzq7&&T$0Hc$^ia%`RALq
z0_vBcy?y_KZHZ6%+Po`k`*U3S*cho#6A3mTe}n9z=Pf9ybs_DxB`f(((n!B;v+D$P
zx4GYQf{l-^uTf)jmcnY+jt<YOIlL7me at aAukytmDWduTO8ZHXV71>8!gw3>&NSP^g
zP})I&L?=WpH{&b{q56ursu!=@j<P{C8(@qg465hXO*}nq8d+%0XJyxh#A1E?v)~m5
zv at BtA197V3pw0fRA=&la=Y60IhZmMD&m^7uS1FRsZC7hu#+*sc<4TMTdTP98i-^pB
zxAGrz_G#_KNHB2bq(HFQ|59+=Hox?%cPtV4P<Y=v#xw@@ZjWZ)OhaK=Z^W1I3J&cv
zq!YEMGG?yzny at pbWk9gvPayOI-Go2ta>m%KmoPg*L>Dt@`;3La=sszH-=^E=wI1q>
zY!f$Ao!Z!mfV+fnHz}nUsag7&J9?adZ<cegKjd&iuBYvYzI;S(cwitF+1Y8nZA(o}
zk1OVNw!mNEwGQUia9-OC$o-P6%3JkZ!jl=diqZISWK)!-@~0B!8^T4$u4iQ5G^RbR
z<<w!9OjeL}mqxvcsD&gk+ffkhnKp0#C;QX}5>J?>mYeD?l3|>HHMa}GlKyFb${|4-
z&dRsQ4NznVPm1$7Y8mmbkwHb`z!2~;_LLh~>Ddp6NuaBne1I9ej31Li at Z0%eI2KrA
z35`==v%Yh1Q0lOAmWGTWQEK9_2sDr{`fE3TyfYLLk2rmkvd?!=sutWEX#mpvr6hI?
z9I9?qgr;?sgg2g%_A3mak`|PI-ZZ5FIlv9sKQkvP3yxwtn(2v|Pqty+ at +esd<Iyp-
z`9op$W9=I8-&B;C3{%*G#niO>#9YOVpW!=k;~gygfio7paR{9DEtFR(y!;0xS$)?j
z=`kKTr&amh^(nTE{{6qH`eS-0)F)r`Jk8_cuy@<C)<vukH1Izb)%+WOK9<#w26I(-
z)UvQCHYdBkfy at 67OI&G`liLcqWvHS55V;!vcNtn}Y`HGM#ytAXX4v0jP04nA_17|}
zg*3WxH^K_NqGW7FzL`EpSDF~l*wH<|HM3mV2CY3Mr*uD!Kx(P!ZZPCp#YPjWCmp84
z)5V`ZMVZp#@p!;RXiPtUA}^nz3AWce#DA*Vo2;?QM`<HVn-<*2xv*+1{FK2pX!0xE
zg!bR~^lSC-Z=%^$lp8wrWgd&OMK1~>WP(t*f)|NAQ*}iWYs;ghEPyI*&zAh5>Q3R@
zOt&FMgD8U&+;Q<3PLbVGVAxjXgcHeY+cSGsAyb{C{Hu*L;R?imm-sr*uugP!?~QN;
z)T3K*heB4x2<-PbDJ<!OFb4#I<}?6>QzmG-uPl@)=P4Aws=fKktZI7&QtT3HDk5p{
z<oZu1xy+_O3c~$|o!cSJH(-HvsczXmGYMxj>J)n<X83;Ab2)wgET;y at ecuXPT|AF_
zyxJHlMC2xUJQJFKryyv2WZ at D~%pKSF$xAkl!K4-LsBAQP5{2*-XL?SdG0s;B3|zbK
z?o<94=XcRjFr3Fj|MLF*ajJ0r<tXrzEF&UrDqs&oTu%kHoEZLgba at WWS#W?b=O}rk
zMIc?4bMMX+WD&352npgF{y#1!ofz1&!ww at G6|=eTqG%$2pb^MKDd&rJ^xUt-Sqv+p
z*mD(L0h~e1V4c2^)b0-Aqpy2M6#IgWJrpF=#M-BUfo#Jl=SsN2BRE8?XA{5Dt|1k$
z<4~2lp=(qUbk!0&MsOpmkK{89W}<8Wlfu0bbT;3K2Uj?iPn;$wWs4H{w)J!1031C0
z(Au9=7Hyb+#jp~^7$m4YKZKRvAYYQwI#aVLcFwbdEsHi%dlK@$tFrG0^k)YN=i38#
z*LxkGUfY^BTPQ0<lo<SqK>?$v$|f%;qKP%T%1IL50`gQtb7+v;VQJ7;%9{q#H&ydo
z2<2^No0fzF_h4x3&b+mn^V1m;q)$h&q`U1~<$*qb&H}IcQ#+kx4M%9Phwo{SJ)njm
zibFR(5-TUAb;{d4BG>FUQw at xb>tJ4In4&?HkZ2 at y)y=t8Zp(ujfOiYDt1{TBILK6k
z`x)FH({01@#Xp#o|7v}fdUI6!s7_RBc&3eMBW+0#%CMnd)Z!^NbgQsrPHfcn(FlM*
zc6mpCW;McSLyj^%kqE at 33U$(JG>)sOH$l?Z;S7KR>V6P^QGv((Y;&DB)0DQKojtso
z7QU^S8T*fslHsPX=j!iE9OYhXat;_|$s-o{hq#8g1Xso5Moj(_lUVe%{Q+mA8HfP3
zd^eotOZGH0k;89IGd1^@TRvCCd^^Ofudsc83jR#L09<yWqBT1zsp>I75Kgr>OXCAO
zErN?UO<s+Hv#aKSI at 1SOKq6WaHFe4P2i4C&`plPQyevNly86!KHFGVSDE1bg?{UvR
zv#YoZ<oIes66kq{d1#=&e%=W+J_lvbz$@$ZBWErkYV1f@$ql3NLQx#=c?SxFzE~)K
zE&PmAm&)brXr}za;q=dlezu~$F8I{jFfqVmQm8I9Vx+W>ExF<PwgRjO!k(y6c__7f
zlZF%MUtF{=&`{^}B>qZkB~P?ZIf!eU0}P*9yC><S3yGz~D$9tRX(K{XQ%+6N?_%_W
z7lxx78?dm+?0GkHrvO=VzKL7S_49Cl(%aRiwUrR!#oig(dZzMDO%=V{ypAZPNp?e7
zq5HtgNU^SIgIC6ag!kSF7}oZIc3GMmdQ at MgOOu;TOU=v#Fo9<tM~p6V^!Y)WJTru}
z*2{V$oEf$UHYnd#`C2lA1|s9<ipo;E?yPBv742IpKoe|KpA3I<IRlwqki`Rksom4V
zxK&8itVi5gV%h~!#D^W@@bI?`Wo at oVuNe5NNZ0@`5rO;~e41+DlV7LCZCbL5 at CVoj
zTWcFojUguqESV1cvX7!CH4pDfiF!8Xx>-Nup1+0bk8o_ZmJWIAQ8GFFnk%ngG^f#%
z01_l^Nvo%A-cul*m%Z2XI#@`5jg+1FUom@;%TGQ at 4>+2hub%xq{bsn0ZuxEj&R1jV
zlCwOvHuOb at -6{MO05+Z!e8Kc?X6CWgb)1-_X15#_-x}B&BBj#3#pj<do7mCMmR@|$
zKzitD&q>|oc}iUjPqJ-TGINx`zF|D)XY~?BbU9!5n8mBPGI)$a`ZFYdiz4H~F7*u|
zEND*H38di9j!vU6hM56)T=t_`bbg$eOHtr!5C~p9-i#9g%gha$&v0fJ5Ii6$4kvwZ
zS|IpF#G)ScH^{ELClnsLp+^QyCG!+{{-ptH at 5-;Btk^SBLwBkOu5HWl1SG~RtL$}r
z*J#dcpc(GJvMJP)J>n{Vb&fP+>(lr at Twy;!^fhg1BMs6D-AM>Xt0gJU!F~Ka!`unj
zR)DO=#ve|CNa;eo5}m^XsE%x2*obG<PATfbQm4t;UNORwASYfub?kuCv?W0O(9I%5
zxsv#D!Aj-kayPndd6IMHQbEJ=L2K>e7Av*uC9$;`)J4Ds(pYtW;=b|jeLM#Ef!II4
zmHx0qDbsW=EnNoU(+F8roTmW6AtL)Bs+LbTL1LzkF{K#oYynbd&gmIEnK7Qi+lszQ
z(sasleNRkjeRbu0mzc`L-M|*KhOMfMScbSq33mf5`Zx)fLUBli;e$u@%K)ZXBR)wW
z7vJ&aN>QnEwJ&9V%yjADMGnRB`-mP?&)=zsqf;IX%KdaKlZ->|5wb#bAyKV}W#Ln9
zNnYmRX5__{QR7ns49ukj1%Scv3A^M->X>ImXbRQh{SJvGnzpbfF-Q*8IDl#mMyA>!
zu9WiiiYPh|gameUjjHWDuc at VHxE+G`vXcm&6Qm_IF6|b7CTUMULNb?r86X%<hgH$}
zLai3Nkm^caS_2frAfr}^s9+f0G{gVcos2652}_nj#K*pF5C2h$*M=}vbo1hn*FYeH
zW!1ARzqHr`L0i9ZVLOy$|F0UOX*E>^lp>bPXi~yd&Aw51f<J<Y9|inu(z8z_)v$Z4
zvSu6hUmMDQwe06Uz<0j-)J=Prk{V%h;jsyO#J6(~syI7gb$viP1tXP~_xA)I)jkoi
z(GCcEKysKn_OnA<%`xjB$C2h=$Fz)M+^`EHG at S4a(iD>74bXaO=d`b0{qI;{jMFsJ
z at 8k;=7bm!+fHHl4G}P_2qrD-r0PqU=uza0;n1?@q|J2IHJ610 at QwyUFCrO$d4zWg&
zKVzOPJ{Z#8h%XDd5XC#2_6VbVGe=MK%3on>FEx-t<YP7(EbG!#l~LPATf;%iV>Mw}
z<y8k*q#{Q>CF#*L)ODOkqE!;!WXkq!$}|#<=k%18z#I7emvf at l?Vv=s$X3rfo|v}n
zYi139xdX=YwW at F##I<yQX!M at vQU18%cK1#$5t#7PQrKpb&{=B8wkF?}I50E(Mcnj1
z$OBu$#$Kkg!=y33$FrU`+|L9U0ANp^Z6*RkZpX07UKvNB)gR7mI^b)m at 6NcPpktQR
zE{U-9)C%Riy4uxjN#s>Cu;@SG0msn~F*vb**3U<Lf)TL%ujw=;>&-1=dapj{=1`_y
zdFM2mpmVH0Oui4#m<HAox=8>;;!1Hj18X}EKz=0jGgJ~uF%(RG?rG~DQ$Jb|k}CLl
za=|C3of`!RhZUY^u&DL#koqZ0npqnsL`zELKbd#Qk;9xPMe at UW$gbt+3?o65TVu_C
z;SX=xX&u8Xm40apO5&~p-Nmvg<0K%NYZDX}#JsDyDUcvuLFgE102g&59 at v3Hgz5p{
zC{U=0l2T`B>_|S!rTC697!G at FZ-H^)zz2Fj&90op6tT&I=PMkP2C5$a6i!m5lgTt@
za~uY(NU$(}c?0MgZeC&=Li4-z8YcRGGu9efn+6W{s!&D{`1W=f4Z0^rVY~#)OhsNP
z1A>RpJL;WKiB7Rs<AR|WH!6#C$YuO7jV)8SPu>HGu;Te;!^+U<uTA~|S}!5{2)nDq
zdFGr7ym0Dzm$i-7m8Qkkkf4huwV*OC!rzsu2^qV>71!CimhV8AT+!VGA_ at 0@+eFjS
zUY9oAEeVR7##UZJUpSJ2VkiOlSouEl`V<a{uyvov0#^A at py}1jwQpsDjDfHl8<diU
zX&7&_sKqVe{wID;uH*6lZ`tb*OpKxD*a8zRLnQ}^4$d2?UJSe%wrMgK6Ol_4#4CHj
znJFS>Ij`AeT+smb--4coozx(I`-Z<it_?&xbciA*LqxQ+W~d^i at byLajBP&t8-NIA
z7HCxqb1otGTF1>RKiEauXWyz=U>3Zda)Oe7@}W9?)%!^t--VrQLGp4PJ0|R*!R}P6
zKh#kJDMZw7AW;#~B93;ti;tzF<xjI{c=7S~3qZJzgTwN2JF`}X;c)4HQWtw24LFG<
z*OSBP&7F2%E?5&E-(Z^g4iGWn4Cz4ib{U7YpUko4JB$+%PekABI2W}8mOjYJEX7|n
z8p}&9`lp})oq?h=gNiRdE at CO#Sw*34^NekmxIi13X-rU$Y%-gZ7OEhG=Df_6f|G2I
zzIpX>Tp}ts^lUuf)nD0v*IU&YH)!I~MjK`d83Ili7h<xgHC5p=7Pk2~Pc(mc&wfpr
zF_hIG8)@d|zHVhet4KNzT2*V4n+TEBPc_OJJvvnIT*YIs>`f!nC+Ij+0 at 3QGqup>*
z#a-EGOP^U_yAD_I|B}R=8{iU;8~rX0m at J6mw%F6Fp_g!=X36${N99f;W+c*>e1!n0
z;*#Yg6};L$A_(9e*baOMQxy3B*KN&zS^Xy><2)ZjC%Ntz&@bQtkdR!iv_V5430{Ec
zz6;lUdbh^0+}r2)ahWb}(MsuRVJ7rP- at vwodHA-3Ba)7uLExsot54<JqI!w6BTb|k
z1>8|xZT)C%)?a{s9rDIevad(y^>1dw+qnNB>AY5{Q3@=y*SKcje6VTq6nw@=X|-C8
zWeAhKEmRWAnno-x28 at VJncW8D;^6kZ!A9kHr0Dx*PnbHE*zF*AcHls`&M4^Bp)p)=
zn2b>W9uxKH`9?<c3ZnnSJX at Tve&7Y at SnzHY(N}7HRgV6DHhermi(5^PWj|fCVpFR6
z^nm;EkvTt<@qEG>y42Fedi at fnjt~8y-6%si^wV1|%<-f&yn?1zN+OFe;sL3IHZDlk
zPl6<qC;%>)!i2eE*3%ZC$>HInS`ev<`}b-1S-iML09_pWR6sU+x}~6VC`#>KudRJV
z=kH+7HI)^AGxk0Do9dx=YP&}9+>jQ*NXOqYke0F2(es_)OoJ~yPGNO5u*L3O_|hJ4
zOkyqc_6|K$k$xEk!u45Lw#`$pO-E^J|7CnzCHLV*A!$g(E16gSigP03*+`D~>+d9!
z3r)j_!lRCX+~G@<{*#y(EmAM+zW&VEb{u|$)7XZ87=OIouPVb3we`k>&)$DjRkCa$
z&(MY!PWCK4?D=UfTxrwm5UCNVd44Tw*Oh)PYPH6|r_BnItHHeSxqqdDj4i9y2XdAO
z6GLBB#t3I)*X#q at KuJ0Ty9L0>#n743<AVSSyNBTkUiwp`<&N~4fxV#>i9Nc1%Eho)
z0IcSJ<gG3Fs~L(ZcwA-q1-%61G&;&brU}^7T0zo4I$haLDUo|Q30S>MSs?=YRNfr}
zSpIDT)Tmg4BGXC&C34)>kK^+W)bcfuAmoFQ%guryw806$Ml++G+w8zKb+_uSvx0#-
zOKJFU6@=^J__XUSC~cQ?Y`UCNNH&LVKZpu{DM|c^$v_^lY=keS#6t$w19S^tLaQEd
zP`|0uBebH00DvQCq;`+8)B?kO`N|6$QsE_y!CIYfP&cK+9$&`~c_THAS2#6U>@Ckr
zAVTZEoVB at a9Z@09-!Mju7xe#<xUX&I%ku>guZdxp-!cC$t_gX$eZpQVsKHb)!VWxt
z=pkWW9E6Om%f_4HNyT4LH7RuNnterC!eJ5m)&-(4(rbxV0Xa<?2nTphD;QtWFhf-S
zpt$G4hs}_N{gFvOj~~7Ga#1FOgPagYUC$I)R5+t0FC4Izoj3*M^Oo~>4%W7f`}8%%
z{WWZrtJ^v6Tn`*@WHK^J|8v!Z!K}J}vP(r=@y5M;D!NySPv?n*nRWcusXdenY!+-y
z#FVReUTYk?Qy-zZ+z3CfT{~N at cbfLUjX{R;N^@sobaq at Aq+C2p7Y|@6Bk$>MJJjrL
zl5FOSG1?($vw^0Z-a7vk#5b#k%$?aahc)PE$C^D;Ro?dUiSQ0cQt6hNSv@^}YsCO^
z6CPNdC3P;jGv)+~bg<=wH+b6zWzHxoMfq*kOd6|mlt$j?&E=>VRM+gpJ9;BHY;qms
zXfsCAYBWx$X$g%sK at nHLFS|y0!_VNRVEbqpf?WLADaq$*-tJyv{rB!H9w?L}ywo@?
zD;&m^znN&iU at 08GCtfa$n+`;Oi#xl<cJfeToi>x_ay7zj868zb%V#CGWy%nl5 at tC|
zGs&nMkUMB18}4OFy)S^J>U#L4(XSBLeTiG9M4X-p9jZFQqYq)0?NKYrwM_9H3$m_2
zM1XASu9=yA0%VBxB65#u;o?(K|C+h4N-P{z*Ce;A75dOkOFsC;LBYv?*qIDrO%9nx
z?m17`eyB3C>Nxhte>o3Rs>9_57lwu58K(qX9h#KHTN&bPtghugclMt4sbDZ<ctc2#
z3;;Riuva^z+jkNvEVP&hr&E%@G3JJL&um&8L2PF`7&Y2~6ThjckW|b#(>$FrXQn5g
zi8;1T_NOTZJ1{>$06*1#%Zd2{O4aHzUPQ#%YuGOAkCLeS&gk;6+AI7n&o)+>9AHnR
z`r1P_0Oww3i?z36WvPq7kd+)Tc+RP_;ZBq;&wFjd#X~mlK06q-#K;uw>1IIwvH{yO
z at 7eyJKGC!DAtSN^G1!vl+faFP6S-OZtb7|WqF{w55br3=W|@nB4~0*P3uP#h;Gg|n
z#V$A}X3=EEMjne|iEIdye?o38Vk2W#TZ-sP|8HLmhMb at Keibwtjd5$PL}5v1<Mn%h
z<RY~&Rt)WDYKe~_x9<~vU$(qgWHTuI%PiI3dkai|O_V at 1$$u;}u4zmy?83KMugs30
z8HzpnE7N}!F)p8fI7o5&)KxAyYS;wkg_)Kgbd2f-Z@;Jla%e4{3QDZ7mHvQM{21<_
z;Crjoxd^Zq8TPN2g<C9?^A&x?1sJs^LNT<vw%4D7=w;r1H8)pe54sCTjBGGjE5(|#
zgcUnO!~#4<f}vq*N-Uajs*S^(UOQA0_=O(||0R#Z8ErRzcGlZsKaJ^v&W#0M_>^|g
zkZZL&HztHHSF%3}^Sc7<l~xuut)2C&vf+7;cck;z#d0PwmxAOFj|mFx1LTz-tdK5r
z%&8#p9MMxwd#Np%Y*1A#1PwFgBTUpAu(V(tgVLt2u*q9P%}xvH(LHpeb%l`e%(;`E
znlWC&%zhkyCxqt!RC~>W<hHV5%yG3VZmNuRsT{nH{H at jsI$cSfZtk*t$EMmQj9YM$
zw!d?~ktj5F+V0?(!S70PE^CgM>SQ;&tb@*>Pjs=d>G5z&i^?J~cM(#6BCSnr9w!rt
zxhCMa1$6k9)VdnIP}LPerg232R(~7DKEOMvi6<(5ul!L|#-~#K;))Nc6)AI at b0GOJ
z&&gT=DKy4rxbIkv+Y&M_y)0E=@Cq{;BXK~_VZ&E-XPwp7iPX8JqNty(W5&pK<;p9K
zy&TU2=(xN4K}(Dz$iGwB(70^T!Wdl+=8%E9t_he)G-SzCS=OJ#h5^K_zs3O4cWY6D
ziK;Sx($16GZ!z!Vu4HdN)9qd33_YI^UF(bcfBL-$^b2B3Q)nSpbf^!W;vYpR#Y8<w
za^2*`mPzI(r_cI!m`?#-V6coVh2;&}u$4npyY_?vFSSFjJbBvj<ZhkCAX=Y!j8Mwq
z(s3#=J3p<FpmPlY=r=nLH)?roID-I1`c{H}kX$j7K~&t(xEYhM0ht&-@=>+q4#Cip
zpjvbILKuHEiS#}=+pN)RMX}*2<aCA!AJlE<+#|15nlzApZ2pT`fmBxC4p;`Qd_wmo
z(5HD&G?ASdPg`tSW;HZ3K02h_%U6i}qqn3=c6rC*__;J_NAFumo7fJAph5w~4QHl*
zI0WUm%-55-U$CitCCsp+dYR-YLqgtzjb(1MOJ3TQ1&=IyD%k{22XZ&d!X2-=kqhhR
zJYgX~#Gh3yJ$|x`7zv;7&-#H4Mxds&0kxY4DqMS$4gpO0Ic5H&;!jUwyZJKx)IH)7
zO{{JmPr90fnxJEwnlphBzTD8vkl_t~j;W(iBPR!`o<WBI8ii2yV}r!HS<V39vB>n=
z!~=6>^uwd-uvpFufRyZpQmgiCG_`F~cNJ`4D1+GWuim?c$ohTZ)@oxYsxIy|O9=3C
zJLRF!=(*VH at bzqnKaCS@AB0bLG;jUwK5&E0$hG>1|G7}zJq~XDTcFWHUxImm%!=d^
zTZFFC#LHMn$VP6d6>!zQ6jOpauUQl2S=IS4(GwqHm;h1cC(Cd9-C^RwJX1Y{ru}UO
zy*OSu0>(=@Rb;M;Z%`bbyF%0%qY?pt44kj$V>PAzuD at ClVjHTbMCZYQKD|PRi<*o?
zXohSm9#r8Do&zuMo=OC9)><Ziq5IQ#Jso>xvDk4`xYQlE(R%&ga_kYTiG)wQ{?o8n
zw~`szR*3+7ci-Wl35hh<i)5+cpj-$%4mLkIj%kIC;v*OBaMYbvy^sAmx~;AlnTbbJ
zA?CYhvNU8K7&vyUpMnO~PNlCA??cx5e=7R-M`N5 at gA9}2Ky$X_^*I55YKtSm9_8$V
zdHkeJP$c)PZE=Mky!Xovg2yy?MEG_JJG^s;$|HKc5RjCwOo%O&DlM@%Kax_a%v6O#
zh&f at Dopaf{C at orL5Lpv&DXK at R<oRoE at sq)iZr<zvXIqz6pTJ!y(7re~s&|T8q at 0ZN
z#V1ys6bR~pfFYZ|bccR_Lx~BiSs1UdPyrtuW?r*lSLLsFB1>Q~%#84t>p5Bcqtd;P
zOo%9*qJghlci048V!Oby0;y&NbKz9?s-`Tu2W{*{H0laMzpXtAMxeCuQ*uhli*RzJ
zr1aysN-RU54bdL;;s&F{ui*f$WJ2mq|F_zk5<~9BW+=sd8y$>)R8Efe8d)G?q_Vi9
z%_P<@onLPvzwPgsO5~Rm4w9sa?toki8#`8;0pJg)gk)LZXt(%uG;yyzKJ)mN$N-Y}
zE-U?dw{lev=(D?~MNDQQU%RYbJihD}6y?mJk3BhyEWp`F2iK(!<qzKN_kVurvYr1P
zp_5h^=u?nXlyWM6=l-V6g%$5VB9MfLXTH^@OR&2<cWimbtg?6$av_hs_{L>Fqm5V(
z9oYDP=UVtQ2oR#E2v+5<ZsYhV7^VIMO<!A9P}mmd+-i;;eD8Pi+|TaOb}iZ77+JSH
zB?Ht7Dm|P;3><AGaPw$u?si`CCcd)2 at SA!hx;Gs&RhOK9AdQqEMSjODsBEO4brDTO
zfy;Z)1e+RKqafe0n^69%VR_wi<^Iny;#AA|z!>?2wLSNz<~=__s$j{Na^@X(I3|#V
z{0y(xUgw|ZBHNQmoY)eVs=ok8dUM-|XKmbO7Raatts{Rmq1(ms5){P_T#X at 3tD>gf
zMt6VDy!VHHEUXa%YT4NvR(*T;9+Dy-r+p`bC$j!%<VyM7bxXtT{i4s2 at LpgG&9_!s
zlt$H#$d~P9vuZkk$lDSpQGh-R{+;FKR4(|V_*cd-K*<qykR)_Q3alm>B7vx=8O`Km
zd&L*FU2%RCFX+m^5o*sRYk|`wQtF!uEu&DtH$=04)xvnZtn^UrBS7Wr`=Cx$uKz<H
z`CqP^8*uP9q9JcoNI3a{QF<)>c^(=k2Ae*`c3u9d at F_;DKp7lmdl)oCcf#`ZCH4a2
z$;THzDtJX2_13R|Z>J()&gncZ;eX_QM8~nQjC>oN?@a^o>kg>Z`vog?85<G>18TOs
zl(;{ComX=DN`K6o^ZAJG$GK$h8db3~B~Mg12jO3W_po at ZR&%jOTSv_>Of(pd+a~yK
zRU+6h4Nz~=N~O6YZj$bm+^dM$ueZI&^;UEBbeH-q4&gBCelxJrlK-|pjDTkrH7A31
zF16eO-~3C7s5kM^cC1*8jDHobgMo^%l-;y{Mgr;6g9PoB2$$dKUp_98 at t!J;O}FMn
z6*k+?o4m=OsAmO~mkDJTWdN)-G=aMa{h#i_9VMXAbkCUNLk#3#x2LKonVO?c)EY6>
zQ*{(^!mzRYot=4<g}|erqC};tUaRX3<Od2Z`p_l8XWhJ2(=d^uqH$eE6a at htoNS$c
z;-acJwhl5U%W~Hfo+?#kc+FSTIHnlt|Bm_Um03n3zkIxFYbQS at s)^a?Q<+ya%+TPk
z&dV&(l7JLLv$^&m<vHNV9p0YbDw4knOagwx25P32L^Q>kwc{qehN{PO3$J%)JluXO
zJC9{HG=|&QNS!1dn1Eia=nW^!$phqn<r=1q2}<d9+^@hNPAyz$#c`;UNyZP9{_GGd
ziCy!Gn>VClHuP^1lU2LTE}vFO7N*~E7nwtgF1|7}sG8)M*LYK4nIjhuek{V1T^6fM
z!1EY<P4qyDivkQw<hdL9^qIxIp!j8%`5baB=etwOsJZkhAB$AKx;>uv at N*)6It<?=
zlkKc=g(Q2F)Togd#jM1)#JkPa6UV&xQZRmuXaPN!5UE)M9iWH?{CRag(uc8k*9E9y
zmR3_iou3Nx)M at HzlU_ALiEStS>|)@G7dGNy3P$(Q1otsYQZMVIurSE+l|vb`@KaWA
zDLaq<e at C=8A`{MZkOfcT!{^L@!V|WuRKj%i85<(nE8?S6=u8-p3_p;Z%SbH?zMKZj
zwbDC7-XJEuIjV^K)2Igds8vEK8KwwTMA+82%EhJ-Qy)6c=6xMA(JUIJ4VR^g8DC1C
zbg%db%^?5aFz#Zy>ye?g0>fdxLs=fGJvX{`zqeKrUl!BznS!Oj7A;19V;sYStI#W#
zzuMc-bUHtq^G;oo#My%bXsF=d6jm<8B+e*n^0C6)?8kbfhAduV3N*PO=HWq0G8t%D
z>|YtDY8_f+JL6!*`G>BljqGyGKBfIyQCpJ-f$Ex!2%n%HEKvG~iZ)i2H1=NDC$}fW
z^IY(>LxNvxxUgiUUj*xaDDH+TRvQJMrUZt&Mp`}UWvTf#M!enN?+ZLcj*OPSF<-06
z$e(#K-g$q1hrD+cW%Qc$7sGzKw=6vcyv^|c&Op2a{V|&7=Q>nQlW4^Jh$nT^xwgSu
z!(c3O8Asc1M!LF54wt9CpX_h{e!W?_D55*v#OZpLpcY-TMlbn)tmS8uslf=f#iOWB
zq<73 at H_AyifM@@XW`r~d9v7^=%>K+X%+(#jwzW~GAfbsbik<=7e}^|ed)pet at Kgh!
z_O=yBvGCV{#PsQSCstq?znVIRE*(c#JsV7HQk7&LB{W5<6F33%v~cC1T>wLAz8`?%
zw`k2ugrFxFmo036?XqdrRPhI%5s?c1LnuxK&FE8qCoKuY*}$!cf5ii!fnf`$G5sCr
z8;ToTbMB~SOc1Z|pg;Nd5%~UvqBo9%-pZIj>7QS4{vzJM=tt<D+<`GoL8kMr{}bI&
z+-S-EnVRn5-CsCh$fp-DkxTBNqV1KsO>?$nb^nt5>}WK99+3!0&fU=7qMZ~JO{<oD
z_WWMrJ63~_bnwNk1)tyh6}6-aIEIVO*lVb)fb=W*aO}H|6bL)Dt9gKchNNi#PfT>K
zi?iS!Keok>GcXqpw+C2cZe%H>*H%k_;g7oiD9i9j-_=>z$}Hicra?gs)d56jsg#X*
zehV3?_!+~0lDui7m>TF_b4{6l%WnPgyNqwGnJ4K|lra}HlgOWC?4ZaXeDqHmVSuqJ
zfulkV+q=PpV$4skd*KRzf#18VLW-Uy{D4bl9}l+WMXJfX at p}Q5`k*1RRFMf<O)YmT
zV&2d5%=YO;v1vx~f8#n6F^w<`*aoiZW(0H=3KJoJO7rDY31fLb_5ytA-~#Mx1U1ba
zAe<b9EFuzv>XOogAKKtTUnn$7EXl1<);C at E3WHBxMecIZ{GM(>9vmt0r+N2^3x`!(
zsrs+;{N0EkN=2Hb0SXh#RLUL0MtPVTv+XZG5J`HjiGr87)36t1S2S}#kEi-)@sYT`
z0Uil|v0F*&LsF{Tbgt9mD4afzyqSlPo?K at RuK7$GCKa0&Oa-D~D;mVso=IwdSsmvR
zXT}rCD8v8*K>WWLjcAoI&Q-{)+BVf#vTEUKy*lRMU8ibZ5FFQMccCavG<~sz*!=wQ
zi>Rd{f>%<nZ=Y3^DV_KDzxRC#CyaBinD~ih8~mKce^+}?xe-AV{P6FkVHKe4w+#6)
z#D8Mg`k87)q at 6>c5AUalkvLBG5Hy%sxM7x(8N3Byt%Pn}XOC$q*&~eyQA#<2HF5=m
zX=$`Z4ubofR{Hic{ZWEPKvmK(j^aqA at _4tdlga-7nZIJfwDM<&vU8OD at CQtjhiC%F
zh$s#Lf2^0cdTeUF4aaZif?FJps4yLe at c<b}epNLd^$TDur=Rc`aQZt)`Tr2VfvvJO
zObMw=qyOvLSE}tIAoe7qqan6>V^73Pd!=1J^o_Ql<&bvd3dIE|?`KQ6YXiLYaQTeq
zH+?)R!sqf(zm|8lYX?(ODL!GzH-7LkT#-G4f6 at 2rCP|2U!E!F~*oRr*9ffGQSD1fL
zaJqap(d=R-Bp!^BkX#B?WC{;w_3E)Y9siuN86`>87?Y?9VOCXI<e9Tr)UCiPGp7LM
z-591jMs2UAPD$Xi#sUJqCj3`;(v)p-o+&II$7&p8!L_fhV3I~0#)?l_wtNSUOH%kx
zf1fR|I^*~8hs6OGzV)4*eL{oly`rkGUM6z8X~6cTnBTQBVa0i3fM6j<jX5&f?q6df
zV^4xxjTh}81Bn(`(#x+moyx8X$gmn436b1}ueUAWpZ^9nDsu~ueD^&ALzB`zEagR9
zwms+ALRvbK+Pf0QC$salWB|HPY`SG^e+`9*00~%uK-Av9+kMG0QES|Ctc;=Ut%15i
zMQ4F`iKPu8vP-j=*#9mvVQ;}7=uS^=ZH(SkOU`*kzTmXlW;k#fGS_s`dxzM-V*jh0
z&EXYQXv>LF4raVp6B|!Zq&*UH!%_UB{d9f%P(gkK_WhNYOW at 2J8lyy^xy_r2f7i8s
zjJY|ERx1I=)Nze~h<JC+a{POScA~0EK1_Hd69~yd#1RN|a$v#Ilop{wZBS95UVltc
zlaj at QjWv!=F|e(p4B_74M5U2VyXq$ULE_(u^eZMAWaSML(@~;@_PZqUw&hG7SUPDC
zG=}RQs)RO{(kje@$+VJ}OS+=2e at uwF>EO}*4XlkK5eG*VR)%jJPox8Qrsq*cEr+Hz
z@@(An at IvF`%(c_|!y1=Q-FHH`Sx7M)0B*tjJuQtKh at zJ4lEr0;m0WN=g7`t&)BdQq
z2j{6I0gJ&j^3RjVz$>%t>i{QG)D!PXSUc6CU;eu0`c>)$*VBEPl at O#bf7w)Uurh77
zI<f0V49==f!vlY3Wu}R%{hO*kDPPv?ay~(aM`q7}<FiCS^qTaOE0U|cGbpjq)+nu#
zXaxVgVefh)b?I_wKOI3HA;ke~n-;N)+_JS5xJ47x5^B_cN^uM#`|5*^0uICS3F9!_
z^xk3hx16l%WWv=HXVt&{f7;0vYs_*l-b at +(i3jk4yDwlcIR at i?ES0R%%3CiQF*7Mz
z at DMWkbLX!s3`72X^ss4}w=jqcv$pAw6!c<G&i#vTxRkx453;h#evXN<$Yz^k|Hz^{
z0~8n8IFH0U#7svF#%c7X&8I+?@)1KdRjwe<K+QyG(&30}l;4oTf9D2b!o=|=@zQ`$
z<V_3|_yOeMj^*H$K9-0-jBnolHm`aa?$$LzZ!`i`Pgpo at tdXXgZj=kxJ=mmpKR;aE
zz`$pbf%H$X4b!eG8zVU&I^Tp1bpIvZ%oxmuRwIfVrs$DZB4+J;1sY_brT<7ytVcHR
zey&WN5uAHG5SYDvf8TQ!**Duh>&B3t660g2GYbz1WoRNK4r-8y6Q)+xNE!IEEd&>s
zIa$M>;l1&D83s9g4bQ-)?&9Xg9;+J1y`coR<`Yci>-J9}rM7|<97^*$GerZ4yyhR%
z<i^#^vy>nTzcZH$e98H4p)uK+m8IApt~F)l^LIy;$tzFte{n-NzeT-S6+CB5Ig>Rj
zh<CdsCf=RDVb&*d at P#MFkc)B=<X)qjGgB?dz47FKBRl6SzhLRd)KDw4ze|E=d1?N^
zC=7};8RA?x;6b0jt{mf(L%_Yn%}+kFaJ1V5zX{Xj{wI^Bp)gJW9ZQ(;X$3`v{RZ50
zRgwr$9K8%We at Bivm52L6gcM_+NTGtH<(RrVUg^R at tD8zN<Uf`>Jvhe53|j`|1<<DN
zv^76m_;%><1?m%dq`B+adZs(cVD9h=F*wQ&X5Mv`h+{^vS->)2dZA*)C$gteUL{Ol
zB-SiVX-<n|8l7QWvq2Y~SyyIaz;V*HT<|f{6jOk{e=-~pGkvPQF;pX>LJ&rz{IB(w
z$X5mWqHQjJ2Ee~Y8j5r~n9Py2ff~vcYA|D~Zai2uT6jv!-!!e3>joS0f)TRYaeo}%
zS8{sox=PjP>0YrdC|-}&;c<UWFo~s_POW?wNNCj0enlcU-R!?O)@}c~i|#*^1`0X~
z at hc8uf76lUl+Z5LTfYIM@*SfT+12jqPVIslT2{WKg3xeT8-Kr`9 at Ra=eN9{>SX<r8
z^m<HrSpu9l3uqnpE_c4gh*rrwq_80>7P=$!-;_L&J%E)KlN2Jw?PA>bg0dXK{K at 0#
zW+BbKgom(8!MXY~gBYviWm!uimsV+AC!_uje}`RXN8e=ha=0!{qZx52DSFEK;1I)Z
z*@N(+P at 7iD_1G8;O4WF&v at +wi;$NNV^^?k&C7aa+L at cs22+*TX`aOJ-L}3>-#AIR&
zs+^)Xz-aHV9Z;Kx(X^5hmIEsn2E0tHV;CpatKeQWO}(003Tb*nDkj_~#qtb%(6HXP
ze=~Dgnj<zed%*e9MH-BY9GWHo2nQ)QhvLQDwdS(J*}U3BocbbTJt>G_6?@@=xPc;k
zl at E&Y;Kn1Ri)0Km!AaRD4hsGw|1uQ2S~D7c0U{B+V>K<Yhb{(ACOBf}fWkyi{*NZ8
zdBJgj%JM%bF8sh9#;sz{hlNu at l3gMte+e&<j+g|KUvA(*Ho+ty_#BLZJxEjSeFMN{
zURFkkjVJMM637h%zbZJ!krL{GB7mawW{jq at cat<}5tL;S4pc`WZ7V19J%WXsdpB=7
zHK2<~q at +rVl9+y$_<5 at 7U_j7V(fUIS;23((@7g(!?ATt<L&RFYM$>0ig4LTlf34}v
zn5?%ZMD3tJ!=;ru8vWFSmw9p&x<3bq1$hp|YeC;#+LQ}-kf{Oljvj?3)QF6lU$hmR
z+|*R-ij9wiwF}JAQL93}v^@&?FE~y3#WI<_qQhKJ0m2(8<8b#)`K`f&&6!nmC){GO
zxe7>>9Z!<Kyi at FtPzb+SDMQ!Se<+z}Tqwebl8llP-tR>onubY+s;#`fP0k;*<Uvrx
zH|NQ~7zciJ)F|U>?v%y0V-!{uy+MT2VC|c?x7B9Y<kTn>h0|^hXlmTJu<e4f9n2!~
zhi*&ZdDch3xUuPG7yonilSOV$HAGAAO9Ug&+pDi98jMN_pgr2ntN?I<f2gQAb8r}=
z2I%Ra_T1kNeQ^;zr_4TiEAjiyKo8NRg37#FQXP+=6y_+zRoY=!tGVJ&^c=Qq`dG$V
zmX at _IdVM0f=tA%Cye|M<SYgWclHqqv)LIIJjZB74+U_~C9v})U<`p}z{9kUMQZDCn
z2Q>NsO|EbN_}R$&iBx}le^zj8TjBi}>}X9x0}X)Sa(^Z~e#@y#<IIuuTHU*~5nA+}
z-$~?w5+%10>1dFsmTN%uB56NG{yV29r<p;78p)vwEEO9o2mL-D-bsx?bsr?M2hB%*
z8JRnkj3b;n(Y?N}7hygSTXtm?>?kdzRQ)H{w}JHI<@*>fpJ`qie}-Z6<as|X;KYyG
zGj|DEuq63VZR*{O0~Xnm9O681_}v}U$hGp2%_H>us*(PFD8+q(EF at WkOcWGj2Pp*v
zU(FrVfHTd>@@at&e6#{O at d;*bi at uFsOo@M?I at xW}{RkL`$3|&=PD&JmL>%1iz#sWg
zH at I^hJ8QwgBNFY+fA#`F7~MR|yr at Hnmv}}rpeWdH32A#i{}LH{spUiSwsBRT(8%D9
zRmj$~a at Wby!~NSR8+LEob#zZju1qP- at gEt>s~#l?p2zav$P7s6>PeCuG9!lEcJ4Ey
zG6IE~Edim9ClvN|9Dt0K^|%DD at k8P;P4f-upCJ_asS#I{e_CRj|AyA at _cogNt2OC-
zs}|wvj*KK3pcAVIhMpjdp*|{nWAh%S-AA{z(;YzslBzL+88RU7#Pj$b1xe-yfwyvc
zKY{*pBDDVx?B|Q29<E*3TDXJ4$%{C?XFI<pJo;$#JMWxn7-eeNq$<)NVdk`)Ch0dy
z)Ie9H3n~7af7cV{x2^}?X8`de-;174j*Spw&me3k){=)|Bmo7?UNLBshiBhIsI at Ri
zyAgqmhuvcaw};cqi{7WCGAomW$V`5K69a}?btd6T9)S&9PTGvq%f^9?pXXwlIW!Bl
zLa(>4G_|Z$(n6KBrHe4oveH1P-k9H<SyJ&IlBPOqf0lIZ6{|&Jc=KP9Vv*TZC*RMF
zA(Tdn$lAY*Lb}-Y!ZT_HFf{W-d<f`4rHE0p&&TI|X}jO}r!@{boDlife3dL8+)6=l
zw78GzA+yOeuisE}5XZ^cN?gjv?11Mmrnkn&jroO7zck~v(QloQlTLh9Q|z;E&jkdE
z_ at 8$ce~$|DQGPUvg`PrLpCmS?xe at ap<uKU7AY*-I+bORx(JD1~d9`gF4~7%b&U?N1
zb7i#&7AZRp*dmn54A;qd>z>zTK3}xN+~oa&c2eK|JZ<s_f?e`O^nKQ7h}#`pC<-}|
ztwFY|quHSxacsBsg#5@=7nV=Tk_1SJo6G{(e|cNl>93~&;icPq?No!*!;A|9<JH%}
z<3RKdZ`BwVELK2w`5X*+Kc+ at 4MDguhuEFMe<tJfembZ at FNPT%08Z#d&tnii8^t at FU
zE<w54hufs$?3OB-^BOn^90gCwvT%-CsudC<@p);~oUNjs`6n{U&7R#H$rEtout`iH
zf8hj`A=+nzI7|pGRwcco(r<r5`aRYTCUe)%*SBLpLG2`4H%|05AZ=nuZ4oa5CsS8y
zxQgcNlAos6_?-macNjX-D4o+kAhd|?f)Xxk-~1&;C+ytxx{vq-qyC<6e_`^nX+VId
zqbz=mk9a>Z>_m>JYp_RZ1gZMk1{;1Ge*rT>j{|{o0gWy=6GmUCXe;<GBoT+4r?F^V
z%O)J=M+P~_qZbO*E>;lVHxsAm0iaI$Hx=dr9eJ`~AUw>_N28c7dC;iu5?E-Ea%0GS
z9il;lPC79?i at 7S`J9+HoZ*DV7Q1OXi5zbe1Vwn;0^(c}IEA_}i at 7J1%MlXPXf3QmY
zJOH(q0^)E&iie7Nr#yki>v2^FXf;J?$D~P_#)_;fh<+#qU8vsH5;;uUneR(tY{3Ey
z;c*;g)x{YR1_TJKe`Z{y_fqX_a<z|;lzk&<UAqOdBhJXHdpOieNu=7mZvMn!&p(SZ
zI|h$Qp8B3q0HMp9G~~@*WXvoTf7)Qq>cP*s*3R~kuzZ at Ft#B=szafsH>lwN?aGJ12
z&eHyV-vvorU^cfl)g-OKLhrkFBV~nEm|V89voxs|X*C_adu^`j>|)p<abi$4rob-f
z@;jp2Mzj-(Jnmh-+jdr4Qr8mR#Z%9Y_$n_*gzJ$jh1=S#hqOiV=O2tje<lLUPY2|H
z0^w;h at baDO0N)Q?GdlFC;q`g#cx?Y)KMS%I?~2AYICny|YI6A5?5}u0FkE<{_6>Lz
zl>OxIEs2<N`0jrmtQIFr){_RcImKw<xU0oL;{nY>A3+vbW{b}dS%x at 3#frs3{P_G9
ztg&Q(-$8J?y19-<$>)Q7e^9er^I at 8q-EJ%~u^<VD_%zSwp*duVS$)43OSR@!k&WTU
zh^5;eCR-|S%`b at 7bv!mOwiQeA_gP|b9i-#dw_eKXQ@&`@w`@#>-um$Y44Vz<9nGgh
zhy%czi8#RtcP&gj?nK-4Rufw$aK#+6P)|Yx<#fq}+rt{wWy2>&e_(2Gwg9B^u1k%L
zEZS+63$e?szz7K}LKx-4`1(_=Mh5=5PCVBvN<7P7D|pvM$4IN+-R4Ndlpi3>RM0>>
z8htn2AT+_M<IP0Y2b_{7IzfSj=Bgz)vP8MdXi<AZgKZ8MNaM8ZRn3RC?9M&a{KlQw
ziCZQWNfDrkk~Ad7fA2DnF?)*pbrQzc#X|oDe8zZS!T#Ivi8R8+$Sl*iSo%E;P8n4O
z%n=7{;^m1Y!W*$Hf2w{)h8~J6S49s?VeH3bKG|W^%&&B^IOASlEPoy^q=KWsT)6cT
z6#=8kf553LR!_@&A8?ZqJSze)3Kxd0vW&y9edTm+LP%!?e~R0w)Hxvo{^Lx6s<+H4
zLH^oI*NcGx?>CPNJuKkZnvnJ3APFMup#3}3+&PM7Q5%nQ1X!CQ=SJWQKwGIR3zd5k
zd*O7UrTpEp{_%s~Vt at LL{3*f5w<e^>=kpXcU=9aq!dnckxaxB%qz8E?)q at NdtBb*6
z)`r;K>($t%e+PlR>dnjH^}fm37nU5>a-l3QbCAv4$%Hb(6mEI!S3r$Vf$ADhAYeDE
zY-7|Sai at k}B2tlpY^ke-Yy_SD-c%qtpTvZ$gt2MHpI3%TMmTtEl{J<ph6yg`@yUrR
z7UscpAT8_kz$}g<pw4q<1-`@^UeO_<(p1Y;M9}mXf3G8qJI at ZyaGvw*F{i0$zh9B`
zd2xR8=j1`(76Q9rJDp;YJOIK7wmh4AL1qyiSdHZ-`Y5>B(8(y8e>&C3?X+4U=oMVX
z_h3C~XN!nZfD9Vi;W=Jph3YX@=sksiFb`45T>%s|V!K!7+y$+<|0}Kst1VoboyJV3
zs>?8(e;p}i^JgwRmoKSj>n-D&?PRWw%3{Z~)yU at Vr)VFjC&IlS=Vr|T)z|W3&_su&
zFg#(b`rUkDdnHGAB8Qf~CYe2^m0o!T^%id$X&EAKy`AMWj at EC8Ot$IP_tTzwVXOn=
z95Y#iE$9U+81QJ(`nR;w?w=1Nt;rY9VJ&E~e=wfZ7If!dRxW6*#)KEIA`}{kgb{1&
zjofcV^Q*wIUH?0YO&ot)Rc*yy0VvmgoeM9`L`PHCz;jo|@|$N!C_1E_wbo*GT%4sO
zR?*%82v?LwrAu~Z19WvbtNyW#LAOp#LO>$52S93rJueaRoW%_VbNXG?ZR`iLc5-po
ze|*w|6)oU-vw)&TKh2{HI9_daQNMQUg!kvxw=<Z4t8$-QAsb%h@@qaiA9K;8=&T;|
z*C}_Kg7de01Eb2_0Mj{g2S5-Ts-|`Ne)1dh8uu{a;YKUw<s%ru-!fIZx%WJ#C>djf
zCnzE(nSur1ra{B2^nY`vS^q{;anC40e=;!C*FYPq6o!Oo3n$7$Tr^6x3B&DBbon`B
zdZqQfQ;k2GV0YN0?SOrb60<y+kLIjD3>~qqBxXPv$mYa3u_FkcqMh~#K{ofZj}V+<
zrbfe179Z|kP!`$A7Vj0so{jNYByrPcJK3=mDP%WCv>JyqhP0j-G)LX=8GNEZe_xAW
zg-;tTWovMMh)0DOYz#!B>p^Z3uDB4#Rm<7fV4ytZ|2^tUek*n;Az`(QNeT%pg(hJf
z;L=~`7>-zk<^FNJ!yQL!-FE?>w26I+2xVvmoYFc_LNxcEJ?6GU1m#>uYB_WQm4 at lD
zP}O7Sa39!kp(1y^4>6ZC2P5wSfBD7%XQ0y)jPi>Qp?E4c9oR6V9U`Ai_7Q8X?Qp{(
zl3v|fw+-oQ*I%zMQ!{>bH;9ot`j;Z{7r;99T0`-PqY}YP^*TMa;~tk=?fybH<LmOB
zJh7!<ZtDBFv(X!_PJ}vg^In>;v_9f%3sm>|0kU$r-xVe1nDM6*e&qi}e>TwAlx-02
zvTSRl6}~D$?^=0s@>?4miEy%Wrtv+U$yN0=t)1PCLMF%!+le7m<&tP!ice>U-v|~%
z&{pjjEUI~H1U1l87!$|38AxKTgN;K4e}%&Mt6&|tF2{&F2{EZHs|DjKiCWIpfEPPu
zzq7cBbiYPYDMpW~T>`KAe=`Dq`;isul~)z{yTpKG%!M-uff9C2yME|XSQ98+mBtD{
zco04NnQWotlE-bsTQY}sRtG^B<`IH0 at cw@lvA%RO+z=)pMz^n^z6tg>rQ{DN-pRY4
zA3J4y2k$^V*cGEKJbkvpTj5jd<1gF6`nMkL=h6oe?RnsKF-kLlf9EgOFBv-)k42MR
zJZjc{Gm<n at dn(RC!JQzU96fXkJLI!;z|G$@>=$yakM>O*xqm5n!R;Mlj5ijLZp`B|
z)+!eg%Ym(z$mXm<<FLx*D9TZ()Y-<qqFi{4LQ-Ra;LAv$x?6<3Ey&6=x<8x$a}Bit
z(U<yNk$8VGlV6}3f2SSMS52uiDw4Z9A+Hi#rU+3FgWJ^RXu7N0FstJ1y1Y<|-f%}|
zm9?68=pUN890^zshMVQ=Rmvh25-N)$a7nR+Oq}NXUi%D=`ur=cc_KolFyseiVAD%i
ztOo*4=p4;lW27Nt>Q|NNz5S&${dYklyYS}~@o_2<kb^Kwe at Mqeb7Hwiuk_Vn)+GFW
zde=r7lJXiBNvL^pv`R1J`y5v#M1|djS=75SU>Zh=s}47h9xXBJ2J#+I_^-~0XAsx)
zxJrZRs{_{N&zx_$yL0Ld62%aVu-GrF<C#lgY}l=KGns-Id9l*EAO at h_J1l<NN^8dZ
z04ML4N-JLVfAIvyhPM_Po8(oY0uN{p3UD47XC)^ULwGF}6 at sDgq^4EL%aX3X#L#l)
z<V<2say|hF5J|Z4txq%U`iWc<eO>AekBOH5!#;ij09IcJ<UiXwRI1w2!c0&HB$_w5
zWK!rsgPb`VR9aj=>KP_g-P{gucfilgF?s*uBck5Re_j3U`O8|35C&0Lf%;^E;_>rM
zB%c+8W at c*S#BKo-A1jy^^?I#J9|*yZ7f!?R5YZ-y!=i7Wmo?OgvtZF)D`u*}aBg~D
zeFKWFc661XoW{=IB5}aAHsbTWcc1&2AHtSLr;r!#o1r0V*Ya=T!!xG5wDTqFvRJfu
z*q(u!e|*N&vZb;m(3%OUA@&ViTZTc`8XB<9P>*Bq4P{n52AH5pxaDmycy_n+#^BIz
z%#3s7lcnC|=ypRQMCaLKT_vn8+{*mQ<Ov}@)GJa_1Tn9aoIp`+V?VtP?j|Mo(cYAX
zIaO6uho+yjqBnqHRdcXV!fmPsdRgIiABn_kf7X^e5nd82?#yWF7Eyx=&*oG#a;2aE
z$lC`EL<hKJFY%=aeU1Vc5^yxuOg87{7xn!2L2)L<!UGv{4x{Z%|IvQy2;%jctSx7b
zF#-okkWSW;FhBTfo;YW)Qz3TxxsZ2ah>$=27zke8f7HKO2OlH5=(Y!w2C6>n{d)U5
ze=q?y?DZmQVuNP+w0&M(J=Cc!0jv4p{Fof>p`gDGPnBZhh~btWVZ?%0<g~M7NnvLP
zA24e$>(kFXE{vd7K3aqA>}!4ycs{@ykj#Edcf!t=?~6aRD7Il9&bXG?E#a^@{|!)*
z-gD&pLpimU at XLki+0L=ps at qVk4w(V(fBrm8HK>$G%9%GfW2c3Xv{&yVJ|d%$(JuG%
zZIGLQsWYd>a6F)CJXv2~PTN5<*h`BH(}B3iCQnP(FWhiAmRlb>1g1&ft$KkRj4D-=
zcxur<@}^o=lbglZB5<q|Co3j?s$H7p>>AKeF2EWE8CTC|?wc<fD1f!8tY?she=*v7
z;|t}0Y{mJeVJAmnsJPlzTj#X;KiwbA593tdATnjGiWohGS-Js~&`sHEvSCt(YR*kE
zph*c$jFko22`LaLC5@$NT#Qp1c)o|C$r+R7gatQPh5O_HRm=;QDCk^7FSa<3-!dPZ
zNw9*xLv_>&%i<o`-5^3W0-`9^f0;<V<;w4IrymWd at T3L4r;IABY~D{>bCquo)I-Fo
zvxRrP4vey0!saPZq|-(Le?6lN#<?L3qFjjZ7PY4(P_J&xwvKP&P;&vn@`)f$-!72m
zQo0`rk&yvLN~udkO!Y*L`>BRn<4?uGPa{~8H=ESK<xkgiGK<6;Ff<i0e`4RxF5-5O
zFy5bWM3+iouRQB0V{{wQ4ae%GUYWE>J>tI%-;P{y<l~mslQ_sjbUAsCBzdsE6!f0J
zTqD>43!sjcv{Y#xUBYWzAa#u*Tkw^Twj*&*YU6-Nwg at 0b$HG at NOg}ak7`{DD#sBU?
z#pD_epTPtcf$bQh#&gLZf2Z_Z6(BH{1FF9^fu>?*WG><&{QfFPA~v|pr!{67S{-jI
zyfW at x!#`e~gf3dGF8RVBX`jt at x9$#s&nks3<Fk?;Ce0WqK~N6Y5$ngZt46k?fDI9~
z-6NE=pI87Z8jiw|#wtOQ<Dx2J27T%cz9ai6X1tNSG!a+^Fm$Fte_mZACEiv#5#t<q
zj+Zhvpls_!4KZfM=E`E{!ZzsFqufQS&h~FLX7^Hhh7R1&GO#(Q(hkZCyU;dhph4`w
zP1NJXRX+`}N5c&D&*k2oXVzU&!B?*+AyD(bZg^L)$j6l!<tp=b45&NSisX(#1CFaU
zh8o-s$?<1BA|u}Mf8KzNFoBVcl|ElfdbTyK-xFw0o&2g+Lyv at pLn~ft)ww~S-!spN
ze0yF8m6)^-7r>f4R at zR=)?H!1(9RsI;%?sK5|j?+JbDh_bX9&ITZxYU4aMM+f~SsC
zkhmwAMh9P6FNUn;@`h?Vzho5t7Mm24w}p8EO$-zGi?mi8e?E~Z*R7;G%xZ<QtGWyh
zXf`Ukhr%A|KH^F7x9r}rfk4PJ=@(zfF?N at U!_62@?qRk~I!S0e*f_$K(DaD&G+DeG
z&7%4?(5BPt_Y%!-vm7~<uPO)ZyW;m()5ol}iN}a{&K11j;6N!;lFvTyq%vh(r_$OE
z=rEGV`@5y6f6{f}yT?g)h<%=a9p89n`Zg^^Reji)-G#yzZ at R-Mc*{lXG_%v4_DGmM
zS%+AE+FZPF6>Yfm`q33|bVW9(!*8dPaXb7bV^O5HCvxD$B--BC5OHXA%~Z}KCM&oX
zic8;vs2kD6?qPA7$R8c$Bu<c+JOX6cDM at dv!3=_1e+qy0tOfB;g<lP8CZpqlq9C=`
z<eN;<P8W<N^zze_JSrg-GQ`TmoZkqV9mQ{odW1Ig27wgpUW4UggyxGhgGaXp+u}+j
zQWua}k7iMv%cr4U41~FnMFOF)*<22b`K#l$dwG3YGMFfdAMm4TS%Q{{cgxZgnZ at r?
zivU7Zf3 at Y<#&nSLTDO>pPtsmcNaanfA55i|>p>3+{2yFbBBbfPukea-XUR)#>q~3Q
zqvq<Q1OLxPP`64N4tsNj<r6?=@EtR^(5A at +cG-oiT?f8)a-|L9=CHLG($djruLU at w
zk7<^PE7%lxzDmM8URbK9zjsxijjBlg?3V_Nf6pi%w~8{^!bvbo#)rJ4t0&DYFL8`d
zWN`41DstM~qS|#(6$|WpQ1+G%ysU6Xm7=~`<SYsCYW!&3@^NhQ6(ozB%{cC#FGNfS
zu3T$oySX;ewAQKSXL2uktCy}MLdzdUC>|P@{O at B0j@D3p@*h5xZgrykCY at iX=5ENG
zf0-(;2HEVN5yO5U1V!>zgvSu-W`ck3#F+v=pnUj+d>kLI`2K^D`XRp^?)yRRS at FYZ
z573Q&t#rGhu}hrD20=>aDLIOw1S?`fAeVLvD%<`MF+Xj|v3flt6k`ZTXltO69^DN?
z^RuAIJ`au|ck3ndKuJQTlW0?b#)Skif9)RX00^7D*l9KFtM~G at Z&OtJ3Cpr<+?jHA
zll|%|)qB0|dqz8x_u;&2FY}P1*g#ychckl2WgU&qi9_ng(epX5W_=`?eEb$vWY^A)
zO2kExvq^m2p}8~E;TjR16 at CuO(<!)ey&GAHeR#QV9YTY-m?(F#K{cijRPM8Zf1b50
zQ{iR%4pG0uHBlFSJ7Ucd=3vjd0gvh!LqF=7Rdc#)7Pz9~Rw83TIPlNVlMrScJtfle
z4<P{0jBl#z!V2bq>gQ>P_3suh>QSM at f2JRs&ukn#rF<#zd~o*xpumYFFQu}a*`ejq
zMGZ1FM-TnKt6q5Z6_R;U7}kQee>iWjzwXNjM4&-kuD&0xE&5{Xy7oJp+3-6$1-H%Y
znkC}_UA3VfG~~~E&4*YFQL98+HM*KA=@eP&rLu~iujd5CGHf?^D1`9?&h84C<WQZQ
zN~2iv_z`|%ZhDFsELy=Lc~F%`;x!?!a8<o_)kACfyuicp5O)T+!8w83f8kWUtd-3J
zr69axgzF=kn8fFxe2uQKu7nnmjVDq>S)@I5<}!A at A0zMGBjn2&d9!7wyrDd6jz&Mc
zPp>hOdf=BXUH4y>cN^pWhyX~KiBc_AL*5~)_UZz05Bl&T4^mPJc#4w|h)F+qg#sG;
zn&)q{<$P>6ey~(iG41q9f3~*L4r{fifH@)5Nei`4*gFMqvI#bjrcLQlaF^dI&Q@=b
ztA4vG=1TcW_uuD9CZacpQIV{m>!aA0uD_qu5S>Nac#^?FknH at TsoiG4Hy|)5oG(an
z3M*QsE_JATYaQbb#l>2&QbH2=Q*fp<mpnP1>}Rm^AwZk4#=ElBf0&&yF0*({b)l`Y
zJC!Tcu#8aL2=`z%74091z9o|Y1-#~0Mv+z4QY6kd9Ku(IT?xRLEmdQXa<@@M$8KC?
z_d|_Cy+!WR4Y^(_8n{ND6{9gSm`1_PV at Pj|ehe`pp}BKUJM;*(`ymHp6&kXKNi;N(
za63U;r2>+lMVAbVe>lT11CWFgxeT|#ZI=nZ3s0cspQV#>5?qb$36+i~GX0^^6(Q+G
zAaRj+rjqvoQSPm&z#nxGqz(8 at UO2Pz`Gt)}&C`LK at Jm(zZTD7TAN_<&BR_Rr7&IFg
zFDz>)4U5zUMSoO^BTZU~v02rcwtep>7ozm at U!PZ6MoVF=e~8mS>5n4iJbi}$q|Frh
z{{%g8Ef>Vhm)g5)_=haC*KE6jK<946F+WJ#MXDLo%Jnh-(}06Vtind1ubzt$MOted
zx+1Ga1|gT5j>2B*>ZfilL-jF6pDdG3x#?-?9{}!p{~r8wJeAot%0ejl2wIA4J1ebI
zf$$LI&|mAWe|Z1J8tf;w-vc^cWKUQB2$Rk$41Sp6M^B#-ymPgO#M~|1e@;C-vp^OD
z`t2Q)F1&?p_&?zKFcp`c`gY_rnHrFsX{%a>nmcGZaJcjZ+&O2r)IVYFk;K<zCtGbz
zn%N0G6l3bjsJ=wIs0b>TkrEt}_?j}e3JuJo6~*gXf8RYMdOE^NwGy8)AX at NF-SlDw
z2qWA$hDB|A$5>L{cbh6zgLxDNtF0r<h!EU17j!6RHuY)ty6N9 at YrOzqOxEvRJ9?6(
z{A^p1c)V7*wyC)=MIz<y_#mUkR-$)HmePW#Bd=F~3>GoCym4MTwe7_{y+F$Z)9cx*
z<YX?#fBvtxVc&Iv$@o7)hHHaO)5;7z{ky&+_TmN_*a3W0zZDWd!_nww<Oj8L!Gpxd
z>Stm|cl;@z<^ia%?73&p6-dW2yHhF(iYP!zmsELo0FA>xcwbK%C{+Op2%FE3G2vRV
z{5^`5Lv7{ZamTr#LMH*?Y0B$XX91W?Cw}G1f4IB_F%m2^eAKFl++tsvzu$Cu6?l>3
zp^T!c)`91aY--g}q6BR9f70t49pafrj|Ac7#WsZoOQPzvVHZ=Rt5+;paUsM$00#p_
z0T1)&%A_FC_Z4H&H&|Z^i8k1e3 at oUT9rP^&UGgJnj?*@wvLMyYn*Vkq1zeP4N93^t
zf00Xjkt2gxQ-*H|LB^<=`BSPohJkDEb|Bz&b`os=R*#pac3Z&eYJwbS!svj?z*sD}
z`V=D8mc7KbB$$~IT78KaHSV+<45TV)^mT&`(UAHE(5UO;gbZQ at -#*?+LL2a7x=Gej
zbd_Q0(5^c|V<F)!L}iALr8)+gJze<ue^ywN9b?ON6HFxLJSb~{9PB#}|E7-`QP&y1
z at VIudUIX;bcD7y at _6!%pi;y`97R8fU^-v2cK**Rp)V6=u&vf2M!<Fy^G`$D;&3+1v
z^MWxDqo1arYP&s}Fy}L9et*i$J~hVo6xBiKv3;u<bDe5W(9wdvz>HURgP3r9f2yex
zvGEc&pGO)K*$%)dM+mNQe;U0<)w9gDIU80JvEcV<FY!|(8{aTTOd6Q=2;!mYo9c at I
z&DhlAm)+Hnp!SHhN?7B{slpbcN<WA=b{>q&G9U8BxGc;5+?5f>KFY<bz)DX&#36tX
zqrX>$WJxlyyb*P+)3f;lWJdayf1%_NAIwgOCN7 at hPd{;?EKp-9&PYWKt?aQMVAJWw
z?S=65kT^TI(2)xSu3;w)rE3VHDyeNi5~{u at nqG=_TIgnlrHGHS0_G&vo<#oYYhiNX
za|A<m%?qx)0xnyrXgl7bB}NYB5J<=%M(L at fcOEN*nJm^Kp1I at HiTib3e_nh!q<|#n
zAwkw3g+yFN%y?L?D?9+$EezhDH3jveTJ`lCuL?M{O||BNA$`b>d8LkMy49Mz9)o at B
zfJgS at 3ay%L0f=J570z=9ohz2Z7ldtY^pC0T{x92(<h3m809L$1(=B7+WP5f%o<|+W
zO`SEVzr$gq3Y0NwbsybNf4$`ogoPOQdv8A={v7L8EmhpXzd#AZn(<X?e$2*E8PVa?
zahnoDcuCe5#Ds5c0^8c<L=;xI!?CzQtWjjJ8At}&sK(MVzg%A{uhHCK- at EY+O_WCm
zfl0!PQXhmO6OjzC(#>s|&uQ||QHi;DXYMRc*tK2VvW)S7Qu$P`e^n5k9G50eOb_;e
z&&D3v_h^#!KVs^vb;Py_NhQS at lz7dBd|oNjPTb{Z|FzgM0GU0%;KiI<K9>?qs2J7h
zh$s{8WFirgQ=&W<Hw%B{7$maO|IWiHeL|u7*k)UEc-yZ4<iu-K7_eaT%mD9EZO7Z$
zOmUXaYZfG8KJA1_e at yO?E$)ZUIm>bnkRRpj5tlqyyV(vYUMLSg(ghdP$tY&8Wa6#5
zJ<1;u0|>#DUcLfU3Rn6?TWBk_Ld-xL>j8Tz%kT_69!J3WlqLdL|FXHgzyqd0!pzLF
zDfW0IdfBZ!wXm!z33iBHzs8teE_}<XGEsJ^7mpu_amJO4e^K{u$kvh2(RK|p{Q(Bk
zb(+Qq9?v@)UEk}$M<P#ER)*8uk3o!>sr?#J*Snvbfou-N?h7q=t`6&W9PA)|iffCE
zd#4g~wVTwpbwNgN2X%Q>f~*{l8l)iFo?CnR-9a190<y*_>SrH)5oFQ79|&?t+oCA(
zzWK9>=)o~ue=3o?=c^4n at Y=Rq_`)u(NnME8PoWjxtT4T1*5wa)IeCHnatgBE38|7l
zBv?B+br$U9Eo+ofP5|ks5(gFc1g0Q?>5D72P7fkBjy?%Xb?5~))^hD&+vvK6ALo#i
zOyEI!nVZ`FGe~gJ^J4P?C1RNzL|G=GL{A9OcHCzIe}w+kpUvG;rtZq_KQ at 6_f|6}v
zk1EtW-jGr12{(CqlqV_ra=ogQ+wF-JFueUCER>2JAl_dSVcuWh`u!udYCQ;K>7%($
zG9jR8g3Y at lW-+mb-c+$62 at BE4XnSXCRyaSaEE^@%hy<@ABV~wd?~TJe*Scct%-oK^
zBh#QVe|sa+y5`c(rX5q~eNSox74z|FW@}crP0<|Z+&ySe-h~C;HJ3t0(a)1|+b=!L
zvV8%F_r;^j=|!fbja}OTtrg>I5tiK73L4fF4Q^itpj`Z46=W#*=hK4uH0=N1r|P`p
zkvJ=h7)yZ9aVYHPWbJPrUG3tz#e&F18qv_9fBg}zyhh(gs`?^2yiM0?N9ae(E^8qs
zpA?0e-tdc?4MCz0<8!(GBkw*aSKgK_c?ekkYXbf8*D-`@XwH;GE>^Q*M<Mi2>Wa;R
zj3glh`Y^()++Wt#rPzv=iAZJVFC9i%1%3?3jQDk|w}e6N-C{|Bscff=ostWw!(xu5
zf2xWNK}l%t_mN1S#OJm~Is%KWz6eERH?#;Cz)VXtYV?B6$R|#17gBD?BPzj*MYS7v
zoGP2p46XJ&Bx)(>AT`ZrR(BHvNEfGXr404PMzDl&CjXxcTj`l470D at z{W at paFAPb2
zBb?x0P{I<>oP6*lIfbXRUR!LQmrNXDfAl0yNK#n?6vQdG at 09R>I-PuP(y3=fIg<u9
z>Ot=HH?f2(nm0Zg)8-oH_fR6k+l0bKqkg0Mb}~*DCBU`gFwEQ9tVJWc3vu}e^>RbG
z|7LcSd-0EUpCuVoMx;q(f5rF))Ad))Ou=H3A6vKAIfy!GnXr?;nlD}EXTg&4f6=t8
zuHmj&TF&Vtbw`>8NP7~ZhB(n&($AS21L?11cy9cLQ(HSAYg4eU)Sr;G^@c-I9NijZ
z4bn{iAcDtKf|I)V6InG#(602^qpR$-Au^g@!aHeShO;Vz+o+Y4*3O*4FarQBPn`63
zq4`vj1sVE0xr|7mHeusQ`U>>gf3!?iuj at WE78Kf>01l|FbM~e&hDjtLD7%yfY$mub
zlI)|2TM3we6MyL7vCTooV|10TQ^)sjW~<L`Np*-XZNItaTF=sIrIwJiAA&E4=5TSm
zg?XtTF+d9eT67?&<w_#?{1SmiH7W>)KAp%h;IjHIdx+pPTn3Z`7iK>Ve=8^p5^I{7
z1x`VhTNP`Cgg7o|V6523p9J)aZx;{;gOrz%oP^6KEH}oFlSq_Z%DR|qdP?p3){Btr
ze4l;i*L!5<b6j&uU5Ct(GY8Th+EeTwjn*L#cr>+v?%7Pq@$Dqa7QYHB)+!#FIjnHm
zTlMs1 at T@h3HQ1RvT^QK3e^^=g)75}b{x#8iG(OPg9h2Nwyd)LYIoTDh`T8U;)@1uh
zi1zIN$=lWV!)Ez8YM_s~SSA~TiKUlE(_z^Hg`TP#As#|ui5!bGym<G^zUkTjy)5zN
zk%tEGU^RyB4Gdn0%PtI45<vZpAP7{VU~-Pz98vWmh$>m%My8iuf5ZayVzZ7tS{<$H
zu{>By9EnkK^6kj3XEPM?us^kR%sdE6sG~B;EHknTA)78$;x8Xkx;LlZb<G}+u_Y$Z
z03n%R0AO(Vg`K{6ezm2$e7Sdc>Ml=>(%g#aP4XlRj|CgQ0R|##kCTwTqXTl2CwEad
z7!v4^Vr&&=C&#=Vf1to at qY2ejn6t}dteP7a6 at RUUAAtEfF9PaV-~n}ssnR->j^2YY
zy@$1OC@>Ner;LI`Vi`NHEp#nuw97gmLa-k)i#cu;Jc5wLt?;!>C at 6TsO)3nJIi(E8
z?K^QqgVN1`IE!z4pGEbBxltB0a<N{M1=%G}b89<%ldiVCe`uy!vJaN)DK(2PuEg$`
z;ex-JJJ!WIlP5TLPf@#!ixwQHJ0UG42SqxDw^?IA{u+9`B3~ttL(zU0&h)<w+9+T}
zG``LGr2f8`{+GceNPGn#t^dPZwlDkJ%okL*S_J3Tq#(ZFUf6F_6fO1B&twC?N%m^V
zVg$nN-}qpJf40Pi?qN_ii7QUqAdg4_Y+Y6!5ovOVkW;V#t&}*+3kH9lg6B|a=hLJ7
z5T6~z*wEVKavyQ$=xTFQtwG^UA%P+VLu0;e{^Q)1&arE;be5=>L01>&H{Ap!4(sHj
zYa!E*KRW)gdqHN6Q;JpG?-E%f7E|y^6ugh&3*a<Ee_yceyQlU24<?B7S-Y?YH$%}E
zA`_L(kk-NX%bn^^PdPS;uRwUJ at i=4EFK;pSh$@O)Jr~MGzvFbDXBWNiE1%LzU~Dk*
z;Gv`1fvcM$Fp96{b-9*WHo#C)U?0sUXKhf4fC3sdvE~WAo<2}!v4R9paz=!eDO3jB
z1RO+de?DJmH5O3t4D at Xkaq}zJT9J>YZx9>(h+ at 4HNkz_kb6)o4w4V$>s=x^K=qL@^
zvpzCx4dSLoD*#zmq6PiZi1vL53rVuayO+85U(?Rg|FZPoeFft!MABy|5uBIzCR!Gc
z)9Cio3iGQ<0^K3+k<e+4%OCW;$Oh0w+(U%*fAD!2f4bG_9=RRMZrW&@UO1g~4vX~I
zJhO(fGuPif3-Q7UAjY at IlyY*!8zVVA at 3@eFdU at dIdj!Wz*-=K=r1(7?lHaB0XKm*F
z!)5X>JOHpEwIIrow+Q)NDd!eMDH?s-AbE?`sNxsld8hVM2dFM9$_>i)(aJq(^zN<4
zfAC*`yzW$H4aJhEXECxK4=>Pe!O%yjFAck at kJx*=CupJmH;{u`y4y$+3?`eT;#(~&
zF(+Mzg{52j<vSypmsp`z&bjnMRy7fsm`6YU95n>c&sc)ovMVcDM<3dgCjMBB$vc?k
z&k16+OS4YUT1*5p3P4D3bqX+&hc{cee?9{K=SK2SHK{garrz8bbUx~M%QWye(c6d-
zalXIVMYcmg9N8IpE0(0Xi>3w^j`;ogb?0fwAPKe5zO>SD@(aPRRzOFuYEdPC#$%;r
zZI*;ulw at 2K!)Mw1SVZ*ls-HsT*p=|j#x!m!;-WQyUXcdrk#*k_1w)|-QJgU2f1H>7
zb<dJ5V(a`2bHe)lLjy+Ohuz&by7=MH`+goK<*hX;GlhgiKmCSLwBv1rGzN?*K;X-M
z<rLb=2Lvns-91{_P<{#0LXHx1^XY355~bIe1m<<EIKc8;j350WA04j~6|Cqo!^sJk
zOkRfg+<O{JxS%;mS>B6wo}7LEe_{y89o*1HzYlI4!a+!<9q5AH>`y*HEK^MJy|mOY
z8LBCAqNFXvz=ZUO`q88ZLeey+n)=!u8akhf at t%>RfTkaV7r(M0;cg;=HmI6S3bPj!
zQw!cs6)Gu*J+j at reo{E_JK^y|Tr)GOHop$6;HwVQmI_?caZRk8YQnMze`&dnTnRRy
z9jTC$4xbAb*HrP)8ObT+`P}dU(^Dk>i6lyLGo(`W;T-!H at K)`n;YP(QF6#JYQAJm1
z at Z%ts&^9sGB^cwlG|GcmM-~Z{4^?)fsCUO7vt at 19kT0w@c&fO5!xP6QAhubio!4zr
zD?7(>m*|^&&an?Bv^w0Me_q at xP#_r&_(Gb1Um+0&&rN7{2s?T){=K>l)wwIKoMfwP
zaz>;ZehA~wKJ*Tr998Vk0ZP`j!L@}^oSWss`)h+v0U at UFm)>$pW3t+AEn;w+!JqkK
z-YfO~!)hnQmB6kBo at xLNY53qY0E6>?d6SL<<xuHfGnnTg8zuHmf3k$#Rhz`3IT(fd
zOlz1HBabIHG*fOKY3ZI7ZW%Qo!u^3e>2<_pv&d=p`AN5(w{g^?p|}}DFQPmD-v#z=
z^i+qAb}6vhhAhsQqk3~t(V|?T?UplaxGFbx{MR&q7s*W8H8c%^G~#|0iehj~nVvE|
z30TP9psnPPLw74Se`l<$yj^Jgx0$?iWDlS!s3nxHWIaB+yZoXYD&$|PY(5W}kfE)M
z${--`7g0NW%Ad=+Whga&1RLaX1v?gn5Ha><(`KCic=G0CMcsoe0ark7)J~SuEvOjC
zSw_9oTl%*oNz9Mo7|>CcGGqRPKg~&DYs at 2n^A1Vy=O`4$e at p-Q*T~k=7rVE9qKIFl
z<UW}usQq!T?rBa at nOLXRr*TKqu;PsdY(*-uaA15bXB?ZWp9TG9VTYky{d+kP%ACy(
zCtsi{dwzsh&i>G}0aZa}gXeK98BPZ-vX#y<SN7<rJxIz-f?}x=+$n-&r8qhIkzAN`
zYAl%4FU+z2fBlVN<GM->U)75qe7KJa<jX7+4BnJaVTYMqEB#S^V-DeGERU&W{XM=a
zvhgrNoMqh-(5)l_Aqo^Ru1K)<_1Ncjq=9(b>G;i7(7tM-scf*Tk#WBH8aL0F*>xA}
z3l&4%OwZ-A`+I_C2$=SjE at Y_;h>p4_R>J5Vry2R>f3 at -&+?j_xFn821!JX$__>SUR
z2kqjvkw1U<u;aXU47zP2<R_9dV)ni#zdEV*O}p>EKLF;;)|jPtFOly#Lk+Mu^Dh_C
z$p^0%FBJ$e2(wjf?*VVDL{h4N!WbY8Z^rf2gCvpmmPJZK8DuV{c}fzOe0Xn>GJrR?
za at jbpf0R>5XyUF-P?SDOYU7_Jt_+1q at FC+|AZin>l4O+-SSqDxJR^z8v|qcZx(8~t
zJg(WqDdU2AW}Fx)a~)fH6u?KBV<hUDbu)-D5t;G^zE3qWUvd?ehhF at KK8}^A0CE*h
zrB8Sorc=8QA#0J=3$mi-_8l5c3j9sKRT?x<fAAcPx4E3%m$`tE-tprmFb$}g69T?Q
zEWAtmn=+IrV>8aRl?pkYC0iwRcb(`Iv9;M at V1+-%yB0mPfFy&lXv^ZrNE^)g00U^S
zMrE++EL6fk^uzEjj_e>H6y>*c>?Vh!lPk~+`c=cGTny`FYC@`l8bEf{oz)st7M!7z
zfBwQ&pjmsy!+1eQqQ<|UNU5=jSWtUBD%^6-frZ&kO>^mwJm}c(Jp(+h4F-^6u0E{Y
zC%2tYR?%K&9ADpwiJ)V9S}^RDgt#PX-^-XfXZJVNFg~A)fJY2AR at txmR@Dvug0 at f<
zdcA{isG~iswCT##zm^Nr-QUJ9rhak7e|+2EIkmzaMQWAGDW>%TG;J(yEML>MzTaQz
z!vse=M8*nxomuO;Veafe1^hS`9C)E<l7V}=&u`0rwz=O{nd1EjG!Q=7F$>1h&Yo!`
zh64_rl<sy-J{eTFx8FSVhj|#kNP7<ypLN)!^!jt?ew&58?%4F-Y3)9+D~}<_f6Lvn
z;Jy}3retm-4HE?<!V?5><kF_>9W#MOcTTR- at R>XzXh&Ljx~w*f-3bBpz;L0DWlu8t
z at T(^pY0HUD$fXOa#8exmS|_6Yt~ZhhQ5lAtPB at 3ya?VrVy&7z at cu8%leJB2g+~xr4
zJ*6r=h+74De>aFS$_Wvrh4SR3f3`x-DnD2yg^gj0dtLtYmcX}o#620Arsp7xa|fEh
zGRprLXW}9+z5DH-t at Wajuq*JM>*MsJP8Hlu3H86)@GWSFa92u;e)#o=ZYw(cTh2A3
zh+eE9N<`D|J1n(ghJ2mq73R*I0NO}d5l&vH9QIfM2`XTD9V+5GQ5_QDe^|p-g~qn7
zidMnjlA0pHF(1!~Y^vd at BiS|EbRM1Lhl at w)-$}*WKX50vB0ol+3t~jHPYKsC^s`!5
z)E<pMAN?f9RGaMQQLxKNCF~ZA=y$RkSnPsvvi2j=qv;$B98)&|>k8vw^4=qvtcJ%e
z4P^hzUr)cLY&ejn$Chs|f54{iPG}<mi at K?V>DWHrcb#~T at Wq+|@EiBkT-R4P<BW)1
zL)jax_PdTJk<x?0pVJA-=F?J6zT4mDqR(EhtH7!dl1wbhD>@Y=W_4_E%(IL=J(Xs+
zc at 7<Am4 at H^JoK3GDGb!Fq9{f`$h_&*mL(+90vHsOj0gi}5(SYQe`D_kc`?)>a~YNM
zCVh%4nH9kaPs=<LFun|(kYo24PM;K+-}Q3_GW=v2?)J6Gd>lQB`OObb=$2%zs%YI<
z4FX-ORa|sC1VQ_Jl696Q1BG)mE0bV?si1vXNK8C;(C%F_T6jMd>li|>W}B%=q!8)J
zS<@?VAU8F57$)56e@@ElLay_o+;=+5zn-e%>5m{Iol?mzsLe>;ovCeXo_;pPC{0Ee
zLl=RH<CLJnI)1JFY4c6yv_t>}K>EM_2$q+aIvpi<VxYBA)Cn6(Govx9p*>axt9S7F
z;<9miD0mRs0mW1Bzf`i#K()4lCiLAat4PUf4D&&dCMLD7+Z2<wo`1{KjqTWr0OWI}
zjLQ3(!&zJ-$k@%7=CrEt8!8Obz at U?F8zR(~aY0Rhea}?P1>GnUVq(>$l&6r+<K5S;
z(A<2)@%-*qs}0N<3j(!3lt_yR6T5%P(M=ShZFcmhnIcT%ex$J%g4nq9Djq7~>V;RM
zv<UMoNCBiSDHI6oZ-0Q5k9a0{#%}_OffYP5e-Ek0y5w29 at _!Sxt7a$AiSgt1T7Rhu
zZ4}`eQc$KH%?{i&LbPV*52U+HMK2mvO|!_ at DpWk&)(Foq-^Q)>Q1k(w`%a1G!Q|->
zqXKcG1ItAcQocs<|2gk<1OBd`IczCf1;hl4(jP at RRW{Sk27g^{r{@9+L>4TAWHVY0
z(#&g5ToHqXvfG5k|M3^O(0R3&HiT#FClssJ2v{-HUG|BRZc8f5;TsS&S6kuL(!>M0
ziUqTcoA<s{6BL#XuW(!aLt;*Xll6itGks!-H1SD%iiK3g*)w-3?17h(bthmQmMVgB
zzWb-o^|=U!IDdrLg2J567!~*vhb6Y7<~V}bb$VJ93KVk8U}t{pO348!^y&4PlFhl*
zHX^F4Yf2N$BpI_w9RQA?XYv8BQhdXp20~OyR{w-QIu7A$;fR9Eo3E0aDbF0|#|-de
zfu#^3Vx6Nj_hwm8=cwGWBBvGmn~`{XbB2Z|!QSI)bbsFlRIFxm#%J+M@~YUqqkKOB
zXkAJZBP4QM5QZ9shJQOZXmr-MAPVL2LHc<{P$p*!c6BM77?S9*wibjk_`sCd>sp!|
z1e3w876Wh#{^uAv2-74}6P?5VKK>l6j7JFt)iFR)E-Y7soRxmX+V$~R$cld!31uC-
zGa4$?=6^KKPCIA!2vhSDBBcr5Gsj5D&92WF1+yUh2i(n=H|=<f+DfKy at dyV-_WgXo
z=z985mSKf at 7ZZ80wbPG*CFn|svX0#iPc6Yi)&&%=fc6U at u59JoCIj91wE1T=(kiol
zL_)}fJ)O#=Q6?27iE;ARVUf2V%Oz8NvpKS^0)LlpWOjT)3w9nLqEl-?tL>|g0s;wN
zi+2vn at L2A`86<3GA2d=HBz{Hl5JUA>>CTw-e6lXGIup2n2>TTAc|SePlOEw4-A3!O
ziJHXm-qdYn*OLtS53Eg{x~4o8v~t621LlZ|24d`Mx{b4M;?utMPeQQ;WwajMo^Yk<
zSAXO at w6zN!=2UK>=Y;`bsv9|;Xj!vN#GVm<Rh<0Picp(E!_qxVrWyNqXNBhNM3#ib
zP&$ZrY+qEx>E~p|Q(owdS3j?}JX{Nak<Hi64vOgB0Tm6R at 2z@|<sB0*dah+)D|oZ7
zRcuVX>kVT=h*rP=*r~2Lg$2`=8kAfwB!Amu0&u1h!=Qir1M}~6 at ELZB)aNw^4aJNV
zbsAVLS#5ReS6{fud%!kYrWrlgF7$o$85D}`L-TAUM7n<PMK(`~0=OMS;*P8(2~Dgw
zGMf3BroF19Uz(i!+#~69&zufwbfo=Atu>z{(U|YX=j(SV(P(zRCpqN0YAK3TB!6I5
z&@cLR@#iH0mlcQUPTx1+Jd^_y^5)$`TgxnMLwbcT<OMDoA5z-ATC++?w@&f{g#f?d
z>DRw~R1b578g_4%{CbEES^(p-RQHE?iKA6 at mqF4`>?lMv`zht;m<f41<N3LYt0%kn
zs79J+XalWw>Wmlwub?d6`EqJ8hJUgBKD4DZ$EAF2y+6S+&s(PAP}lN-6X1(BJGRLO
z;hUOUW2B)h at TFWRPw+YTUUFwJrx9hr6(VrGo(>{MMB!&)tdR}F at A0tIHJFt+o|aJw
z+wqDe2-vC|xpm>F5YRP?`LOOa^*gD%5HA3q7OSqC&_C%ozMQwu90h9Bq<@3<th<?O
zY21!8te?86WrHm(fKw)4o0oMt at V~35 at gfUt_8y`A(A*ZS1+-JFVT46)z*8kbUnhGa
zss=A+=NlfL!_(%<%RNQ(a1DQm8IQ_15mF>6aB4h<sw&Ee^orywhY9H<ja+-uc%WQ)
zvLiv13WF42>RR2S^ePiySbqW$KZ{fTQzXk}<*!7>Qv2Dw+Rm0<LDM;8iw)%O{R)|D
zwbjcjPyQ8iWjO`nB;HKPqKn}j?fmA6F%n&pj+IS>b*M#KtUn9|hevRU{jlWBL^UK-
z7iN&?D{N#Vk%1?~US|<l*Wahq)zsQal1e>vM^M`#nZtf;%a;d3Dt}9RRgyt9G3MJp
z*(l`>1BZFgolXa<a!Ch`@f|(Wm@=R~B;x4wE*|Hbg`q`Cxj6mIC6u#<+eNlb4vyCv
zxUNYDGfSbC8+zBN at i+M?pH at y1S|+h&ZYTzqp at RLA9OQngs4)Zm5ILiJ)}IVpAQdId
zuUuN+Og_;*BWM}5VSi1X0HH-(ZSl at y;>RXQ at 8xE}k6==kl*vB$mWzy<o(~3a>~1fB
ziDjR+36gN4Ih5pBar`fwa at Bq_b^{J4F1KwBA9`8+hq2v)=}f<NbqY_m^vg6oRKivh
zjOpn?%E;DUXKOT2igG=H_!J*|!NKQvz9>CVomRrIU-ju_jDL0O(GW7`7 at w=`1XzvR
z(#^oM$9Eeav<1<ITC*@RatEEN`qK``0opo6wy_4IZg5iNMkv3RZ(*lI4}C1`4fzuW
zs<4jolh5wL&$w=$QcOM3n*R&M>c9$1J at q2Ah_}TR!$zamaFiL_apf=nGEU*cs-Pn}
z{AK<}N$**)u7AZzvVO(h$Zn^yhZk=cCUC7pom0d=6m+>(3isb6hUkU8uhK<cBRB57
zsFlb>AVWeb8l{wm2<SRT;Ezb`HAggp at sTiNU{muPmhPnjuE2JH@^t)!apZL6DJKV+
zdTu&j(TK{yxTXG?U{m|_vSuCDr`Kd;ka??H9%__FGk^K}BHxXmcj+NGC&A7<wXb>g
z6)&Hi-zV!A=)JoodzwL!p!2T8#-2o1G0}e1cyDwI{<1!<Wk{%rO(}8VJ7aeRK$}3&
z at t-u{xalQQids$gkhx+hVy6X;PPGn2SxdhjJQCOO_@*m(wBfo^=LsVqY$h1PaA(`b
zT#=phpMN@$+4!u;A$H1HzW$@l)tENK3QX4Bf5nbgJd(Hsz_aeO>)dfCUHmI8vn~*S
zUP3D^9eH^(YLh6`1)U*?LW-Lx+mGjiKEdSU;r6P#01V5_NYY24h_c0(v;8QA%XM6%
zU6qay+5K3PB6uI9Wi+SH8#EXjsl-+pise_j5PwqVH5Iyw=7wqQaScPg<bFsL3^;0G
z`Anf*irQRuY@>HSB%6+q at 50q&T1vQs#J+<|aqlBTJNLHLh#7>Inw?2^OTF8SC{K~a
z at DA7i0^36dqVtR-xw}P`{p7qWujWq<s4eZ&)o`YcwMk+5bG|i&U0wh{_e=(=%b2G}
ze1C at O`4kb-MFOsk>;7Sc>}O2adw6yI3F&*adyl)VKX>V2hJk-AlF6SAje6W7W5Z6z
znj?MIB5&g!{gIl$c*Q0SzzXXTbmV at HaCW@&kT33>+1<i3`$xDN4T}nb>})7Ruf*Y?
z&;lVF(Re!|Fj79Yx-nb^TfgVFBTl<?JAbH41oXb`msN_odC+MNrCSmwxH_Ig4f_uH
zcKbD;ayl}^?=hXrn+jLr8HH~+iJc!OLy{smk88+Qc90W`o0QhO#3adn7ffjt0OFol
zJK^^hVeT4s64N{%Z(`px^Gq87Z`waW+%jO2Aoc5;u+;I at 7KpZ!sr3&6vah?SJAd5#
zH7cGHY3>PJwPk04)bOAtN8k_HlcUX*%fZrPK$cSfyzK0wL_2>>@zxPsHKD-&sdnAu
zv-+n&=o^`D-Wsq7p_YY{@C7%o()wJ9km_F1I|>QBJdFkb%0)yu-##=E17aC#Md7f=
z1!=Mx)uMtsMG|D{=Y7^$0#SiS=6}v3C62DC6a4Xtwl+pHpDp5y9(8`2>FjZKhy+^F
zsgePk)=wU8%m*E4qBR~+3ECqSp;B`EDbjyfCYX-7{Q|~ODlY0??}W3%xn$W>maT<6
z34;*84OW at ztJWm!Q>2rlQRC9lZpoQjK-xR$npf at V7fc=5<HxE5o~k`YC4a9=ja>6-
ztrk;kELh)X;w-NxA+{gW2V&zjQNef>Pv-997%ukge(qkc6OV*hgc_slowfg5gKws6
zcFi$my&3lE4udddnz`N(fkc;})qf$gnCsKnol=YoTslVa0dfoQw?WPZuJi&8-!LRi
zM*=_Eq1C;PM#4HRVoyoh2Y=0t1D40;3pg2V|Kyi3 at A|9(<z9*QH+w|jLFcmHM-HTH
zNyXu3mF4arl$Q}sB2ELXdPE}B#wl-3N)e!*owH{A#e26^uqltJX2Xm(NZ|=)0&yCJ
zXSsc=oUt(+c<q^%!^Zr0-e8mJ1#suoj6 at 27auSgDu3q4Glw9!q3x7D<Qs|7#GoXih
zlk9KY)bbiZ_5OPlfFTF)$!pn9ZB`exJ*YC0CNfgb{{e?X64s8Q?5Do;v!F*i`~O>4
z#6*y$Y7_rva}=0GW)*iQdP?MjoCh3V47e8&Rv*?M8Ha%r>L6)0qzoT`iY?(Iu7RF(
z`hf&p0-^i4AVu)n6MunI=E<}E(A?>HgYzuM<i)U)@g!uKOv_r6l12C#F}N_lJREWw
z{cv)IRy;aE<?V5j#B#fmfk(u1w>hKeQ^q2K0 at P64K!>99{`4~sJEi$av9Y{Jlm at np
zG&&%EXTDreOJ&^cu&nHZ>*JDw#kCKnBJ}7P0x%)%K1tmRF at HJj&1zM1!9EZ8zWlv-
zr-0}!q^6tAPS3<+hAG`g8OSw*dZtbfDZz)YHu2no0EFkIK;RId${O5T3bqi86EKh-
zu>rdXU^8*dV|oL>#Wc`&l}y4TZH1+%dGfJ+Kd`CbFWA2R7Aj9Oh2c~}-{+=!uwxL@
zTG3vPis>ZPpnvwQRiG6<RDP9WDFt0e4wQWLX`GkIn5 at h~vC4X^siJ)rr#qei{He#F
zpi!f{qO=-nABRD>h5P#s+M)b-ZzwZHxEj#k#TV?=MbZtO+O84?Q2xG(%3!guK=g>~
ztPBK-sW&zW(8H^#LiL*xsFHVN2%kRtlx;fO`0mjSbbnDoVif^QKVA*kl5tHt2DhB+
zR00{|38Jo>!0_Mo9h~pZokNaiRY{bB>#l~pf}TtUJNQGdJMPw9<dQC_LcPOs&q24G
zZi&CAT=m0~{LOq3Mkr`)$a8?}5%4r)6kY*bVFl!trBr(KDv3`i`HCjCC*ey*g;M)`
z5<i+Y(SNN76&Lxalo7hX`BZJQLoDB5o8f)pXx&b`MdLV(tkAgBN>`XR8CN+9k{4`u
zHuQ*EE`Fj2;5zw>;Jtm9KdxG3N{yfZ7wvoUYX=HJ>m&btuUk!kd$mLjHS9VQ9dC09
z)f&7d24S0SX*;FVvNht^Aw~qHIOo+W8OlhiCVxPTohy$ECGy9R$p!Ch=q4VM+KR_^
zzDdb;wMOs!aB~@blq4`C`I4Ryv66F=rl at SoSN??-J7X2R(lqb~cP>2#i%*|O-$$8p
zWFT!Rf*d_<^S%&Y!ty}*Yy)y1Wx6gTG<-*)+Q4i at F>T8=vN574f1;ZE5*303f%K}l
z)qil}J9~mj#P3otIDWt~qNuH+Q6U5Kj-h6Fv at L>j7v86g<xm$bx&>s{N9V%Hp-0CU
zj9tec;C<AVl`$6_)M>59wiSZ-4!A!J(C!9E3!b+g1Uf7x!Th73GJTJ~QdW$`hLr0h
zDG*U+CHUi_wLvge;&Kr?+!N~_=&p#QOMgoSk9407+Zt=LAi^PUGdx#U0PzDm at N4_S
zP%egDs5;oTI&7$9drt!IgzAz=2)&!=n!y-pN|LrU9Mqz9y67+}XJXXo=rw<2OCW(>
zX!wKp+#@w~#gt9&ftor)BPj7wE&3jWN??Tvc#(ScyI7I)GJXZ;4QkgaGt7CtCx264
z*!n9Aw<Nm0(sR9|w~DL3$_bbynA9`w_3aHdLcXqX&|~Wm233Lc->)ny%(BH$itJ!?
z!8=bs<vlkujFObk=WoG|udcA-?OL0)1(Z*JpD<F34t9`DQ&><4fnmJ65dPOEwJpRw
z7a;@@^B{~u`E9(;Uo6_z@%|56mw$OzrW1;-U+4#o{Z at 4vkC$&xPntZgNRYpS$8|^E
zGPIIYA`B+QLP!u- at N>xdE+JR}Ax{E0&}zgR(;nP9s;8(JOOIUoMh<Yex#$+0XuyyG
zlwGNz!L=u4rXqdcgqFGqFNwCWme&c83UA$U^?;SC^?crh)lsKfJDb|FZ-3%i1UL{O
zcIqL_0XPZxInSfhEPc6^siJ~{k)J><YG&~ckV!McwrHOgR#4g%F${;C6D>5H)k0h&
zqBwec;iPxsty>JL+2ZEC0i3d~hz3Vkc~1Vr(sxXZKbduc_hQqn!vKV=A-K0)GT~Z6
zk4wduu1Xo|ig%)#3JijzbALv4vdyZrLP{3G83NPk21XTRvtGHw2?hEZIi%)_okJ68
ziUN&IGHQ}H=@*^faDU4)Iv&zd6P}Pb?{s2e6=FgMn+0)FhF8H2;t&~?o62LdTfEOX
zztLr=y()!G%0zh%QM7I{5wN^8gaN?N*`I!>+E+tAZ~2^J^VKrY`G1Qt;2%Ym9<hi_
z{WC<@2a@?ZEQ;^2hEn!_4o#MRViXTq!ohb_KeVIyKlf4evfe^9uDNokbB}V8U%_<Y
zFO<mw4 at e-cnX#!cT8AX%{7EJue*9$cWUH$f5!gM@&p}>d1B;@H1(~@8g1o%VL$EGl
ztR`DWQPf%M;`eaSb$`wy%_2a>u_Gn^jQDOM+L4Hja`N6PNw{(V33P%Kh=CK-(AFKZ
z6rwNZlIA8??zj4cW{~%($X_5Fyuz>Nch^xpL!JYcWfBv9>B~~F7GyZ`j|lpy(3|2R
z#e2lrkX)-Dvb67MwAenX#r?~7rfTT9!Dc|U at n6-T97mk4lz$r&)}($cvbAVV at +$Fo
z3(}xlOMVVzsXqEh<4W0#sdD)60aPP%3)UdIL;qGZIMRKTo80RBfCgJa#ybA$z$FY3
z0EI`F)DYoDU*Q4=f>+SC?L9o~-NbPxRG{G&I_8{j!Yi9A{-xJhXazmcA2F)Oah)cY
z(PNVCdCErSet&eJw7m6XMTyY5Vx>?6tDSR~2{)?Vz2Qx`;zj?cw15>h9ihvP5`mnZ
zA?l2P(1b~)$$~@%Zua7XXqW0xEjb+{{_h)IY9rJ)W1Co+e%7^Br*Xxdt8M&s4)wos
z8w{VM97TGAWbo9T_QyqOpZ}hbrCi+LEfU6=WKf-eC4YFd22<C>da#9|h_hiovmS_g
ziQOwuTu}6kKoX6La at B}SwB;WTlYj~~I-3{*?OwDgKr8@~pGmC<;P}x`UP#IEO#L|2
zS)rbTAv}K!QVde&hfa<Mio92T at w)&Mr=hRn!7D`|2tk$GPK{9}eLjn&q+UBQA;0gS
zXRa*1o`0C_YRSU9($|Iud@|el-<`6 at 5-^w<Q7S=+h|l221EFM$ONfD7Tg13 at 3X3Vv
z2 at lp5&tcBn76y=FCqJqsbV8c4B>Xw?Q+{Amrj%$T at Myg8hbrj{^nkCG5sEn`)7p6C
zRN=8$kgXPCe0TU5lcw22XMKf>dJ)MIj<E<Cjek}ukgB9w2Mlr-7QN$Y!!il~Mnu1?
zh3w7Y44k60vsWD!E7|di^u6!H{K%Mktjgq at -JDNQz-t>(;|v(SG2SNG0UueNFngD*
z=*JXU|4s77G2$YE8e*=<Vj;4 at mUy-IzdLF>(-#}DrewHXs+m7-+0cZ(-6d(E`=-=O
zihmysrdbln)_=dyH+`N*jy3Nk>O0VZ6Ex*Uy%Xzv?kwbB5S#{yq84A4Rol~&orQz#
zEsnS*+CKucl?i!g(%!um;iuj;RBsQB>{LJ|)HM5zfC*t8T_fImv2COA@{NQaPwP|x
z#$yu(TCROud+W^=(j5}_ig7CQ&!uV8HGfe!fJKO>^amCV|02S8ooLbP7DVf_y}Wq^
zIzIzpA8~4JZ}DAzWk&(DozJeXy!;G^1=(}Wh5R)?m490ok6N&t4HMambhCGpo56?H
z{HU{9*dIXI<=-6E>PiQZEx&BJ;&Q*zBLY(uG54I=(B&^uC5HxYq0C8XP;4tow12oG
z%5D9bY<lP at ohCR_k0o%-9`~^=m$n3UrcLS=;!IX{--jUU$nCh$-xdPFBgDRp-nu}I
zI4J~WJ3GCW>^0<P!?^U90ve75&r&&H(Wb(>Hr5uJJvl5xavN<o+Z(Z4b*V$E3=Z)j
zN&@xe+x~WBR28+ZwQxx6`dh&XK7XuWbx{*wGAuS%e2OTK^&@Q)k5$0G+XI?w4H}*1
zk$J2NERX#(9_-R(Z~SMA9_?&L!eTZa2wU+xy>3UuUyu(r683_6?V-gXr!XFDF1(l8
zv-`mCc4aPJu!}KtlAL9ZN#GlmN`;myk!F`zg@@A(A5H at 19?&r8YSo`_c7ON%V`>2M
ztU}s0wLh<V!NM<i%|4?pI93XGAAl2r6<u=$m3WTbSc<cCnbjwj2xN190wd&`!f0?8
zL)pB+3P=tpW}+)8e+6h?K;L5--jt>v2I(lmudaf1t5t(jq3dFGQ`M-<h|!Y~mJq{E
zCL7P0CSx at iAUhwtp?t|Gn}5%u{@i}NAC?OHh_{U-Ax5VNLcN<SSVdj~a2?NAFYxe`
zhqhGZ#0GWP2!RcoU3AC9D1!JV%y^A|A}rqhLrFpf=vJ1Ky9*!Pha(8MQJFB6pi;y(
z at y_#8RJ(5WuSBc>4?w7HCHb9Lns{DWa{CIIXM at ZlB&rrVP44d>m47ymP<$W-!)!z$
ze_cKnrDdMvc0{S(iV%5a({Zvb=~ZVFCU`obmwq&==Vh~2LlXsF=lxtwEM%!C*m_^n
zyT?%lOg_f1RRyBo3(+meYEh66%5<vanD|$I`b#n at o7cc`P{@URUhr{+9wM;}o!tQi
zGTM*2d3>0ZB1$pRCx6Sn{(e}s at 6Z?S^Wc!isEpFJ$y2jYpGZFu<#G{^7vg@{F~4x~
z@=UAo at ftZEYAtD%0g7>$3A>uuOrCd9pa#7mk at w?7ne<YzS8bi%xSq)qUKiZPyO)xp
zzP&){^$M?~y!-SFanHaI4%CAi3rl`Zw715`R5jZaHi2)r9e?v+e{XcF!8PhIYjlSr
z^PA$Cd2D;teAXXHy*f#@Q|vg9tKw61DW{D;^6!7=PTm}0&aoC^kGR3Z<*jA9kxt2m
zm?Q!A3#x3KlIc at GSKlt?!|hVj2Hq)UIGiWgvZIsGDWzyod(&dp{@{tR4hb>3ZK;w6
z*Lt2PR`inn0Dm-y at bs}(BuC?Sg%Kypd+L*Cs|(b%OjqXr-MbA$pn3+J^gMHxaP^a4
zb_=`p2LuAV!SU at 0=1*3wNF!$Za%P;M07hOZ^IgLwJC-a|5mYljzWC{qBwa2vEBkaz
zt}%9GxGm3OPoCzDDm7ep#bkMgrLD1&W&tYgAZek4(tlBxlnSwq9)L7*kdA89owSbE
z`ZO!s8H_^_fks<h(1WYOJ)OBzN9o+l)E2p?(A~;-fy?(&`l=Er#s!(-9V95_ZY2|z
z%rs(ms)b#p_L`!;A<NJQ2+S-T1%R6^vc63g9H+<Z%c_(SsIW=veCE=uH)O+RjomFd
z4O8--Hh+XbnZdBfalW2!Nif_w%i51v)OY{sOY)N83~?#9bLqW~3s9kUFXl^&VpPe3
zpjpsG`Z5F*obOo~ei%q)n^1xLllDFHrW8VVv6zW^NV18Q^Yi>-&$==2m<NVe1D0vv
z=F at v+n_`P7(!nChpWsXd`xf!@Nt8}<c{aRd*MBc=K>K{@np}0$Ti<XVKL7tMiT%Nx
z!<?}hKYa`@V81zQLHz$cnkeURVbFcKWdmKE7bQ|c3x@#@S~W_VdfQtQ;k0_zf%eav
z_T{wv-nz4)ytDU at FUTqi-8j7(8t^74ol;De6eR**>L7giNAqribT2=bo=R1*Ji;<e
z`+xB9?;rLcG9~m1$K}-<aRAs>X-&G~hXf}Nk6Z&N at uee-TfoX`?yW{v!d5Go60Fs>
z#kxwX)?YnXxBSF)1Hgkqwv*bt+`GzC8Qk0>Xz3_1BHhKiJLJ?knBkPhRbA1l^yAW=
zea~57#P4rX?I0lPcci0ru3 at m4QAm+nlz(aqXrVt5G%g#!m^10t+AinCe8gl1g}cI*
zMBXBgYeY&FW{KVJEN~2Z4kh#smY8^4G{81rzQ09uFJaCkfcF978uJEKhc#xQ=DnCG
zC{9~6o|fG^0KN%@dwQfKjg at 9cKULw#77>B+ydxHv-udYs_TvsaFJPT3^3%r{ihoR<
zr8PBlg%7^=5wnB}Wh5Sn|9nWBd-U^o#gT;|gxwr^{GMn`8-$0{6-?ytSI>Qau|gCS
zszqo}i)glCjDvABk;Ke%-T+q7+8wZTyC!u=cJiiujsqNu=3pn|XxuWO?*!yoORCI8
z^Roj%qQm at fpY9)HUOmH2`d%{yOn-B~S)owPw83*pC9mU2$1qf|ZB`qfgqt7>P at 706
z!DM(sV%w>vFfc}{<#iyF1nAxG`)!GGc(-bO?q~!E82_0ieEYfUXNxhVF1!E3psP$*
z{}JyT{grc4G7R~0;jaZc_0Uzr9!FKH|BR}KBmEiAF}Alx#xmgTkcrpGgnuE_Kea=@
zbAamZo{1OPDV^3<Z^5BKd+!a_&mL<Gz_8cs at DVJwt}U)`QB01TP<tfQ5a?KLj)NTb
z*iN_;Xm-TA;yTxvprHpdv%_w(5iv=%xtR2TpdER>KN%xoop}X9Z3f<5&M1)=i`EPC
zV|uf}#TH+yA1*>oR$<H$)PE93M_mVePAUN at wEP8%rCQg02t8=V3tCPshl3&XaNGhX
zdEi5;Aj)035bDFGy4SiI)ujx at 1%b;f_cvOs8NEGW0o8!^c=L$W6p7)#$3zZ)8=dq8
z_`{3tjqAbStpIo{H4f(id?M%)=79=<j|yH~)&;d*`a_Te+LCsY_J3h><fMt2gY0sW
z*la>M;U~#32x&=u-k!^KgG-m>u-NOw*xEM{DDN_0D;Lx<zO4(u2~EUCP(4zx!k`n&
zd%_HP8Ztq{&SPvS(FZhl-tNeD>HlT3?Hq&q`_{>vw at jYd5xR(%X0GPc+LK^P{v2~3
z5s)QY2k3q;@M)weZGRP_|FbV=5%o%ka#x-%8O7XSc?_PIM<+%@(bloB6e{Kqo0i7T
z(jZl}({~W}XyVr9+OltY-}~XJ{0;kWb>pazHSg)4E2h5aMKL`)K;ExHQ138xW3Ac3
z>2p#)?DNfNMEeAHthc|ZP}?K|b(CKPxjsrGt>`M{-fw?6G=EXvT2ST`vff|`kf7q0
zJXc|zB=VyDFx->Yzp(V6aKhup*{q}@J+d*)vHJXg6ymQ4IHV_DiFDp?4Idd&b)#zM
zn)C>7M}^3{TuMk{VdYJgG at Ww$slHZ-*Z_{U6C}(l+D3UtFR(beYangnO^<K)KJbGX
zPy3G4B?~D?On;nanX~>;PThWK?!kTY at Y$u$XBkH|h1q7$?kkXhRAp2Xgx};fopjkb
z at qc2P=-e($g2p=Ub2LTN#~XJGdvxL`eY$ARCYdN{rIZ%y5N71;;)Ycb9M_!ToZQXx
zrRkC5FO#!I<HYyQX;s>$nK&MjAw at +vnnJt^X!w=a(tk8(cazTZso36!@9|K7%a8MO
zcAX5(?{M!pSrN_kN1gn;dPm!}z?{6*QQJEuK5grjsT2==LG2xceP6wo6UL+Qe?bDT
zf$WtoF&hb&M~%=!Tl~R%TmugWZy%VL5D^lwn!nzRaoU$leUZR#^~N1|ZgQ*uvs!{9
zk*9 at ir+>v3(p1<(Y$OEwr9yA&WMyK{@}Y at wBgAk_+QW?rhq(+OQdZv*ms77L+IUtH
z(zkwFcpYHf%EGSO?8E<M*kDNxE4=<{A)b_BvR2b_$9O4FVgkw48jt(bu8L&~a_hjK
zTG_YK!H%IwzLSu~wsbf-mIXMt;t$hzhvR&0)PDuaG6Li95qe at cGfy*W9Ka^t<QR3Q
zgwFvOOdfwd?nKGg@&v<xDe#4!p=v at XZP%`;KDBC|A$xrXTh*R*+Du@@M6wjm=621_
zpczi;gDGJ~3raai>E*@y8)PqIbR1`l{Y%Za^)U}w)(W8ig}u0;IsodYgb{kZs4}ic
zT7RP>mWP<~TqHE(s1x;aNe=8>wXvFH?oFFeGD{@~V~+D>=9y-Zy^-e~<y&5+$BEE|
z#VhxAQQscE at sqdGcA!+#nQrJF at m?2DCb=n(kX*9a;YQ6_b&6%&iyH0C at mM+8QAGS^
zpxq&h+XaFpgHn#0Ra}>x2k at 0nqu}~+ihtTO(irNs|8)k0Z7=wysWc7`7r4O~uWn_u
z-ZF95y|d^)@pehkfAGl{eH(&9=`jTV5M3{yOlf4OK;!xeSqx|JoXNB7R>ffi?IzJr
zkF>h{Cq>K%G1L9eT~|G$&@brPl0lyw?*&)mn`2>=gA&BAcnEkRcRG}yEA?jvgMZ}S
zS7%S3^jQYcg#M at R9{#Xu-3c@*(HA^k#Ix1pbj at D$PboMtKaL=AcGBpMd;Trr4i=;N
zPeLd<e!Qu}<1cg|j;jj3B+EK$xz9C$i<>N8K?^51Y_th_P at r3e@w!(xbR at wLXW=eM
z2G2o9PMm-}CmKy8smH?Uj(Zp at 34aNu&8*9w=-1oX#W2R#5M<BgtO~vh+a%+0rJWlu
zn}9j+C~_E at GnN{MJX_LPt*v9*SV%W`SC|yAw0NyEJy7Egr1Q at Pzr^EWrJRUs1QUwy
zrW?eOJLD5L=F(?w`4e3NUqIbXY#pg|sA+)fa07t*998&E&W`9fYIu|!uzy#B5Z(3o
z)wy(fsOQ<`0cB$@D59}uwO819VaJ{Cyl50;K*noLL00Z%Kq?zgIJP~X+ncWbF!Ir{
z6fOrf at 1wqzJ^6K2MC_~h7GlUd|Jrb6dPh{*6Q|Ga<kPw6gY=Z6cNE_Nsv!#B1V~(w
zD)z(ar(psYP1ZY0E1z0}H-F>l68QP at k492i$g6<H;Leb;4T@;X67+rkiG`asG%7jb
zc$LJ73ZTXXuTqw^D08ngon@{eIvvLJxXO<1D|y{#&q3yBoD5=_nLLOeiwNGam(GE>
zy*K8yLI)Si^Qa(C2QcDAzxAlwX5-ZVZ7nNb#~YI4{kKQ1tJUAXMt at k|TcqNg2Pxv*
zU2%%=@0IifuZp&YZX*1~;ElKor3W6Q+VWp24jHObAa)iRR*3BRujbssj+H;I<11>z
z40qIQ)3%Qbu=N+C(Z$dtCEJ9Py~Ax#K*YKUFCJgcS+R`<U7DLflGQV8HzuRqEaDBQ
zBL~puNJ4HYo97^Z7=PKOVwdzpW4EdrAU#Q5gFu^V!`{b=S$rq<L#>w63p$3_IyudC
z#OwTzUdl8b$`};wX at N5R?utrj9ra)PtXb4j at 66{y)j at pVm6P4=v`SJieAQk4*1=TS
z9rbz`I90RBed*gTIZE+$YbC=ZH8z0N=C?nKNcm0aL}q(KynpG~mPSxzGVW*z8{vF4
zq6^XgdePc}aedUxNyBLZ4OaC&!yKw;?R{%n7f1yZ>?6w5`3_a$l%)JHp1>NnzvY#3
zV^b`qn8Z1?Iu65<R3yk+!ReIbZm0!9*pAmiG!*16sBreH>Xh5pWGnt{i~dOU4ZTn9
z+;~?dD9$m3#D5dgJ%E9arM*eu at abj0-;e)T!@nu8^CW at iBEXLVx47PL=B_QrLQY;&
z#`a-p)0{Ws2x-O;saDC6PPPf8DMR1u&YXtN)T$Q*%Ud*azaKhBlE@}$dlQm1_|KCP
z4Q>F at wit|F<(rBq_e67zoAk-U2pz%qgGUcJg4h$}|9^0mrFM=csi_vsdvh^~t5AeZ
zN*)C+t-I!pJ__0$e{{xA>X{cM4=RxwOVC<oIQ5B5{k&IySQHQLB+Lg|^CVQ0=mqse
z$7f9(nb)t*Z<DHL{hm}aKyTaJIrlzykQ?`=$y5RU*s<p<=T-3#`tj;^&`i_!aLy8u
zq8^jL&wt!aYTY>^zzrGbtH6CjKBKAAbMItW1SN#m!6M58#JjbXEy%~E$8Og#<tT#x
zioQF1P+8qUIrHaNIL>PB0rj4cfz<5R&YbMbMX~!ghD8p at mcg810(RqZm^5ZptuHE^
zPyfD^YAHe|C^2%m#1cOISQrEtO85i=RKlg1RDU#$2s25p;)%vWa*CnSf}VT at qakmg
zuiss$zsTou^CFKo#7T#RZK-8z&nD%NchQ03(4-(RlwwB}2I`2QqDZ(B-%Y(&m|kJ4
zo3=8!SOqmWRl at 2K4k!GE2_{&7n0)mM?zUmku({U1 at GWWYOY+^{kfl;iICK1UE5_K2
zJAblTsF|_A{W6ybe}h)nU(j_rAELG at GTt+reF5@_eMin>Z?jha at S+`U1c2{2{X_TA
zd5eHnT$V9Iv!)eUdWDz9q>%JCbv()5OdZn3>Zpb+Au6*){j#5i;0cU_cN#RsaDVFe
zO<Yd-g~#$X+98;`=|HF^{>!#_?8<Q6q<=k4%09m2c5OpEg>5LZs{l}Um{9DU2ceLd
zK!HA_5X9^H*B|ma at je>7=Tpzd<pguB?fwk(FnIxO(1-NpmdDFMSxD)op&>K~oygZ)
zZ;m^uL6P<y{_uWE5`p6N!<kD(0||O5 at RZu$u!kU#`MsU~Y(lf#r>a^m?86asWPiG7
z6cCqpzKN3SEoLhdjmUME&cQyiRLN*_5fif<xfBYx>l|r93+vNWph4qP4ET$Sx7P*|
zsAuFC!gt?`PknHw4}nM2 at Rg@jVOVVCzuunb>&t7CqJ2r=$SiKi#`){<Zlq_^gX20z
z!Q-CsW^PApnuE49EL3FNprjHE?SGP3N3<<-k||pNoV_5OYUyC8<<~7ja(t{kp;v1T
zqQH0V%G2j@)-lJbwH;xwBf%gb(Kc!~lji{kerFUT5jDJAovjI3nFMjtX^|939r`E!
zBW%R?thN1V4RmHO?%Gmi7 at t$lLxCme69 at CyqF@%rJ2uSHm7Gn;EOJk%b$`ZGD3SM8
zAZ0hct$E<oV$r^{76IM%TE^*2;NWn}I5Y$sJcx>Q1bic|=yD<lisUO`4o4QUXqO>A
z)dy*GAW7W<t7T<9G|=|-9ms}r+_P9+nhC<+x}Tjlju&bL+g$_W?oTMHMUv07d0*@v
z?H-i~Oa~USy2&iUzA~KB at PEiEOgb}s{Ah$>{8JLTs9tEZu5e6^G&$LfibLF&Cmf$Q
zfyJm<j+tWgf at NDTyB;Yon{vamF^Pr_ByivR1=SDYx`m!-{3iPsfMoIY!H`#T+yD<k
ztspiZ7hx6X``_|BFBgain}KgrPz{vc)OG6v+ANJ_1fnNfDQfsdWq%-xM-3DKb==l?
zx;;*Hej|Kjr6CRW(NR-DJ<yAAy5PSm=?YEH94A)@r4}m3ANK=}#nspLTKlvGBF90x
z)XoIB?TCIVr0~x$oRUtF+H;((?wcoWP3~`>2o~EsvR6_-j91U%l<@A_bDzNAhjIlh
z3G`APj9doFh at 6cin18z)D*P?d0E7g-6=Bv5g at Uwz$dKoW`{)13T6m+tsn;V*^THm&
zf>QqQ;L^dL2}+FZ+&A$Sd<(Rl<a={PC{Yq~(jrgMF$%iNQ2LI`NEZ2Z$Q)xo6wbNq
zy*t3;pOiw0sZ6_&s?xJ}x+f5Nb5%7`gAN6i0wBy`CwmXUF at O9I#}+ at Yd2Jut25jBm
zJRw%k*mrB|*hA>e<Wf2)O=fC5MKAR at CZ0+V?Ds})+bwmI4`B0}Pk|DPW;rlr^+3QB
z&_{<i62Z^70Yx@!TH=$nzhP%i(lDjO$GelTFcPxjO<LP9E9tzr7vUfJ1z}(-8XT0t
zHFxua%DG*jx_{bP_5R!-_g9Gww%?Tp^3cYF(K_e$Hrq1v%bQs|8G2tpcr}**)N^1r
zk;Xh-+sz-$AATCac+3+NX6&`n9({vu1CU#iSFim(0V$PKT3b3ij?!vHAj~BeQF^=z
zi$YZE!JWL{423d9UTlSfu?f;!7BA4iewQw04n*)tlYh!}=ct=sE<^Ig`F$K~=c~es
z<5(g8VyE$8lGL|}G;uKhjYU(C$fs=B|L*^iRAv$sex<HzE`bSF6X!dTEt^LF8_P<s
zGfjwKW4EQGJfT+uOM9T=KWwr1RX`fdISxyRr?u~jCh+$j938%*K}||>lOZpiuxcNH
zV86Jhqkl at 08CuMrjjq^+5oUuqQrc&@k7r;*AusH>+Sn9<Nus at dq=na3wb=R4PW4SQ
zAO52(cy{HCoM;5wJL$3sr(9Cf2l3cpP|kszMDLP?%k|@$Bbo%Fei>b--ydjjfA0?M
zEy5in(4O-EASUQ2*!{2=vUcnb2_!0r&o;YoN`DK|E&0A at zrKiOoBIW%VM<DXeMN-G
z)W{buXCaf4sr9=o8M>6v$QHx+(1?~r&f&cvnI_efM)3_?WF=nejk!r&k&qmo44c1y
z${nzF0ck4UfV-x)a%G2YfCc|!J0VMfqJv`O3qQNhTBna1;HE!wehi6?>G;t!g_h1O
z4u21^#TTUkL344$QBe8KYEOAUjVXoMQ+P15h51AlpFQwVH-2S89{M$f%2D7XX6D?}
zHZ{YTp}>C7E$sKFKq at a5|0*NZE+|FN#PHs$k%~oBeQ52DgwNhrucf$+m+sLx at -zw#
z{$@Ddzgf>czRVs#%YJz%&rg>khl$FZ`F|oIy=EToeoODAIvN8pUC%p79;(BjNmB|8
z8i;6JXq%D9Pv5?qunOVGEpOK=A}(qIqGW`{KJ^lVpg at 7sT^!y}ZSQ&IPAPM6k)C1a
znS3P!mJK;I;ICj>-#^neMhhklN^o-cHFvqfb68iVlCY}%8mALDLh)^768`ShoqyAe
zG}Cnrc*K!~wVgSzpVeY at 2-0L_l&x7d<561_>hAV at oL-naspRS<hu)hokm`vn!$+Zp
z)m2#Ly at ELQb0Xlzxj};GS8tp!oEm!Kh890bGx)`f at mUuA);XvW-}~t8_>7QEjVEy#
z<!c?Tnl8u#>Ue^(z!_|)KNju^+J7~%t(7g3^T=WSaYFi1NDUA){=`uSbwmP090ov-
z%WeUaT0IHxWg;>AImr{{gAcvZLM+Kt+`Cfuma!;dJz^r<D|R5jp&}KZeM)Bkqd*<C
zZAF`3dSH)`i3CM7OoUPc6aPVmBUc$LbZ<O?m%5ftmmz;H_E`2ekeJP4et)aRoYv=*
zPrWaE#2hXoMRg|Jb!pd>AE3`9?!GRYpL%C2JJZ8OW^^w4<T1cPJ$?*{+BVWqv|`Q0
zVQ*rL%W5Ri)ps+syylj<BL*E4MQoim#sAOV0rR5~c{nO8BQI6(JL*;}B|ZSX?%GVL
z#6HU6xObe2;J1%_Z080TDSxr*w;s%>qD~S)Wc2v7=w7(kYAK<@$-`bx6G4WTU};c{
z?2d33lxI<lFBT-PXOoZmnEfnvgPkprW>}(2E1*BfqU9Y3Jcyy|gWlXEyGZFiHY1#w
zuFVr+h6MiGWXsmGxJtN$)peor*s%QQj>akep5nRM at 3dhYC~}Uwuz#;dA8Izd)yk;)
z0#0DSkw2?erOY3b97j;5Bcm7UtE02-((0hcHPN3O3-Vs3xx*R}nC*W<Ognpw6!2_Q
zZz8RpTwqOASUfo6+L<QhjVFA8ZVPg9E;E3omxispST19E;&ODP2DfJ;YH3;TDGYyT
zT4Ni at -*HI4h+dpv+J8OkU~kJ_K+d$!(N3?((Htsnds)#J-OCV_#|QGU@~>uy=#tG}
zfh2vhl6jiPt{$~EOGw8c1+|LSet2y%U(|Jl+yLVZTAslm)UEn%ariiBD&s0HdACmm
zt+|e530=0U6DIgDq){b$Y`xdswVp!;Q=VA))c8-hUU{QDFMn*ICt at p?FHfcFnx}*|
zH|*Y&XY{P;lt9IF=Gdxl(*jh``zB0{p?``+zhU|1ov0PaS&<L`qaCvWhcg=XPMs1C
z|9zNc1Q)^Zrq9~8&@ZU0s4nn~PG at LEoD!Z1zNR4)CSj_iCSKv*>%w#emt#gtmWC94
zq16<>thN-<&woGl#4HZHI2E;k4LdMpX6`m*o=I2u&O#O8(zn^bneaTx`(CVE*xBS6
zo($=S?9rAaIKP at 8y@y2IH3ug_N8V))qaL7{Pw1>Ag#Yjj<dBvm%pwhOx*o4B;9<Gp
zQv^SB6TL(?w&a`CqAtHuY1zL>ab7Z8iCQ>c&;OO|q<_pIqe1#pinN8O4#zAsA&#Mg
zC(E6(m`ljUF$W9lDPj{^kB)rDdOT#B$?|_$)uo!HF!f0rQ`mZ=99Kfkt~KTUF`5$Z
zDQDxrEsw~3zVS-KvWDGwW~;7xi2ZV>J$}=C{HRhZcHg7zHqRkevnJBvn#P6NBkRhb
zd`#!<xqoc_`h)1=G3OtB`rj`;l|IYL1Am~s2E|pL3`Ck;SNo9BOX$}U!l-KDd=##D
z9jsYL7T&}f0{J9tP;=qYjW+wBM6X~1cXa6eIZ#I}LIgkzN>=M?Z2XGwBay(TXZkEI
z&;Iw9EwGUp^d8I1#g))%-+8eg7_bBV*CguM at qZ5LH(~q3WEq-eJ3)rM8G4-ucMuw^
z)$lHt4Vn6wkaPh*BDU31?^`m<cMeW3jE{!mB$#kyfC`!A9E2OoHlp(dSptQ_357^(
zIzdB7d2tlyY%7v)bKR2OKmqs;&_#2Ajl-M at ovCAjs#Pq(Gr(<jUOudLs9N#OYe`Wk
zvVTg{Ub(|HNbw)em#x{Zx-uk}Z at W5Rr7SiKw1M|QCEyhw0usBU&J~_WstEPA%{yF&
zi4fwUeztAXo at 1b~|5Jk4eE`$-BkfHa`q8<5tHJdS32GJ0$siz~ANQ_l3)2Z4WX$>_
zmzXBM_m32Bv3nLMP~04nT~J|%s+0*bQ-8q-WSewPQ|upA2bT+v8Ui4;7Hznb&<FBK
zS*po`Q&e_^f~7hjRBk=<fbf8`5;a=WSk8H<u$IUaHPXUEnu<M2Kv`&sc}9vDuW&(S
zT~<-i-PJ%m^wki at qX`1ssv?rgz^K7g at 7CfzGZCX7br#w+TxJ-mcKYQiRPj_L_<sYD
zwILeE=DaQmN++PUsF)YF6%XHfHm^x`-|r65MO<aGh#Ka-6XcOhMn-*v{1MLV;Bh^I
zV=9c!OcqtEPgRgI4aRu2Qc3N-q|KTNS5H+cwn{olOL+hSV83Xp_>+hJ?bA5(tjyn^
zXfsz_qGPm1#&EJtyYO>GF&f?Ajem|5DVLnz at cX9cbH<TrwDfpbi0jw2OqHJQE3n;N
z7{laY3BE~Qk5KCcB~pD7(Lef%if7K1LvQ69Z|n+^2cxeW88 at _xm3+64czm?Z{=680
z)6%nx8L6HAtBjGJ6XaDWp`d7sr$%uIOTibeN5Sn#hwPifz(@A6<K~eA2Y<7*aAJ2c
zr$nG3fs_XB^t$jqNs?$5-mL`vXOcN;HY4Y>YDeS#Uy+?^pIl}rZ0B|Zz`|^lG_)r2
zwpRY@$<`PZpb<vXs{_<nG60xF58aO at Un7?Y2d$2Q8q>^?y!1RU3hJ7wzWf3b3^c^K
z!KLn at IjOd&?2CZ~79QCumwz+=(HIiA!gNCx5a+8Wp;~%_fM4<bk0`R(4D)e?j_Bo)
zPPTDQvi>7NktHl^ee(zry@?dmWi4=A(!dD=;bswL30`izH8e~=GETOujf8;fmJS6<
zsPH8l!SsA<aaX_W>XH6bC#TI9Dpa4Uu#K;S9Ohv!84k$LBa!2A27g<+A09=|dx$n3
zc|~?2UU!Yu<2{SUCDQ}aIB5VdabDBu&-ZogJDH(=jpe$>LE`ewgsXkixFX|>=@0xJ
zmOnIqX2>lC$s3_LKCoH9V30g-+y`^Mr^~p&jq2Wluw0e}5UBd&?!q7K1~<Zo*bRU0
z!5St1rHWz93f((E`hPiqy<`+1MQWkJg7N~75?kfOQxwMd5rSr3fPokxNn3y#wPi;b
zmCM#03#><nN_kB=%I)XqK(m-GC1AKO$_#FEfyJ8OE_{#?fIVfNGUcQ1D#Hkah<EJs
zc!;|gO=}014g(@mb#@{oKa6(#j at OZK@X{U{toR1ciG$c*F at F_+X42tXs6w@uD<s4l
z2PquPolmQCURs|`cVG3{=B@*3;Rg)8u<%8ZTEc3D?mu;@vPT%I5C12O)mxG}z*3r_
zIdPN|RW(6p4S*2wN3-N#u_jlP3nvGiO&DuWwb$}V!hywF5d8d at uyYk1e{(v3#kzWb
zsqxR}Py_Q*_J4}LCr6EgB%5<ZG%_^y#50>BrVa~PLuR5MD7svdch*pwF<t8xLlB9?
z6w>iQnrpR|HbASvFcr3!AU|K#FhN&+S3u%RNgwu2Pz(=y_kq0bi`LXr=$yUY|2p3Z
zQ at 1ucxQ16_&r$MLEzy_{(CYHp2TNg2h<&tO<6mkSs(%bjpXDL|cDr1*=4Gx>bQM(l
zySH%)%LyTJ7>+}G`*6-209V>)MaDd at 7LdMB)-e28sj_3d=EKl)9E|P|2QQv7<kwQR
z?5_YiB(nz|M3HR6K|DCJ?SJ`1INXcW%4ObxMs2fH`lBJ`8$;y53UJO(^}5X!4b{f1
zGMDYI+JB^dbX430x?u`+QZTRtQyNpxa!s48bZ4Ygmt|a1YU;{&5#uDX<FcR()G)#I
z9cc%$9Xg{U0Vp9P5(QM3{t^v<FOYBjX7w`BbxX$n`zh`;RFVzuMH6kOgN<poABxJi
z>Fem%MU#_)Tu)Iw>h^t1+AeRgHw)_J>Jm`m>3{SMsUR{};Xum`4@@~<3bMCNjfDUx
zV46WHIF&%o&Og~r!wQ-}+7F7s28IDX$kG#kvg9q7s(i3Yo7?bzS%#%$!IZ}wd8^Gk
zelSOlGPZ at VhdFroB4?h}4iAUDGWcfc*2$WIs9(<ABNGyO-8|8=UV!*o#@Dv(op5Y^
zWq;{J&6SOn*y5;z7nMzx9Kq8A0ulzU31SF_VJMSSIjuPXqeZ6ftSUb_`8X8N>45?r
zFWWDeRQ~NR_n*8CyBjJ at ZafT+;6fEzhh5ZSxb(O0CHH<GgJ4kE at Jy&w(bnmCD2nzD
zMK)hdn_~5Ge#)&a8CW<dWC%*W?a-3}Y=5BBu*F}XY}yclx~NU#dwr~6c0k}lQixka
zlE6M<zjmj-pL>r&$Uita>5?m~9U}T{QrUR?!_(4%sn!QBPt_gl*}IxZ2}Xm(OwbRB
zIB0i#2UFy!8;Jx7lDlI40=cLs at B_X5>)W5gQqf%3P1Yg5LNPPwI*c3w#;c$6e1DnM
zv;XJZn4(i5i|3mE7fED{m36Cuj6hb?h8#^yt-O at ENrDihE&c>gm>y5*GulGhSTTTw
zY*r4d>u*E6VVBz>D?m=|f+-385TcsG3zSy(Q~>H&3GQruYN}fqV3a_Ni}pN0<x)=u
zHkM)=+CwH|Ij;Ny$QCb`mghueYJaqB66>uF?ci>3aSMgQ645RInQ|Nasf17yn(-<|
zZILzs)WkT7HPl^>ed9Crfpde6)p<Fv3pV at MlXh%C00BV$zv0{AAp>E9v?CK?;NK(w
zAc`fgy9#KWaxnn_m75&tEO~z(J&Ls!3pOGCZh(v;$K1^@9t<MHKH?^0`BDHdJkWo<
zlCcBCzdQo?@dk*y@<*rh!eu3L`;m#A2kk4aTKH5J6%Vr`bfGcSBrVM!2;Ka$zI<cY
z7>s#Po at 2Q4A$+$QB2E#A<IGH=x_Jo8g(RN!JE6wvUe~L0$odHW7 at l~LJfh=lmh-#?
z(EmU1TD&D#NfRrafUy}qsL38en?HXwTmcUW$?GM0C0t5Psw~Vom#4Cd(NXGeWH|k<
zNz{(XMZZVQ*48BXF!q&wNX*ZtJQ{CSk^XaO5DXwfygCP|eZ~gpimq*kh|Utg!>4SK
za{~<)g7`7I5bNL4PT at fPWBvxZ`FDYcz^=-GBV!v$wRJY42Tp2x<4 at L6cldt}wLj#%
z#4wPd60`P%H$^`l>#<4|hoZIlp)_-syp;HBeDT%=uXuQ6!n-i{UL}<|xMFG1`IS$j
zZAh4N&l2YbFdRa_<<MkZB_T`BZfn2Gj5gGT#8T<I- at GrAaY&Gv`L~BR3Bqd-dZK!5
z?V~AoKz$pV(K1^3#$k8$-?M+4l at ouFtHhP#W+qkP5d-tXS+8*f7B4wiXdoz3E3OCl
z4yviVQ?N||ash<og!??s63P1>iU@%mMoUy`TT?&4XAt0Zx!j(hX4Rpd0VufqyCRbU
zy(<zEhU$%CoLK4}1(gL~LW52X0C}^nhj5`EZ#E7MdRsC>5vUWZ4}O2py^0TD+ALaH
zr?Ka<Lktwa!kRQcBxRp`#xox_U+ImymsFaoRi0bQBsw?xlxcFIty)#avHSJodKa;c
z+CN<bPXDdkGwCQ!xMj9O<c3kmX?B0IVkN`v%dR8&f>4CoUxm>|>nVK7>A{X at 5rb9l
z9M?S*VuybF`7YPs*E)X-W~N^-Joot2uQ7|4n2KJ#WV7|QhG3Ag6sonVfBle<()JZE
z{Pc2nwn+R<iDu72B<Ve6t*JYDT*IgPFVl|SUgZ_k4BwJCIa}?P?ZxR+(}u36c1B&G
z>nRBtJsdsKp%xCrJbcK6TGJ!^bStJ~!Y)Wzh`S at m7qAJXtYd!@zOaR8!jv=3x at 2==
z`!Ny5{CX&TMNK)Vp0W?R&v>W~`_Ms7D~4AT15tl7bl1wH)l35|(~Xwd4`n<H7Fm2b
zwh4-yDo(rHD9?gO3ud7T>wl*jBdH5B#gT(6az%~8YRG!>_4#NWY1pLzk#Hnj_P*(d
z=vzg#*A9VqxNU!a<|6_ZxDYrHEoULhMka_J21n$wCz!r?ULvw%ls%_7c?q*Ri^&x5
z2W)$S@`cUgA8qT#>lr9RE>L_fx*AMcKvoA>ZA`V8l7=sQcs}{RnWn1LO2cMh;T<T8
zcu9Q#+I15)A6*QHE%I#jDV|va9Vm4%R0;A38?55b)joe{$N5gmMTs7vJf-Wz|D!j;
z7#>u`C2#gC4eJFMk at F+STg5KPKwx~EIrzM`^_tf|fcC^nwdpt;GJi*yMgoO(F!F}I
z@@hj#7rvNC=oI50d-5P}g3cbi;vcT~f24xMhVCpOeI%S%r>s{L5<ra?N>{^KruP>I
zJ8JUyX|8{S+YC@@79R5Jd!vtPauSD;m~cQzjke#%w%uW4 at e@C*T|jni)dPp56y&cH
zjBJX=-tMi({LI=!MM%9?X;d*$v$+oM>lHgLD;aE at PsGAx#}fD1Q%kQKKo0|0hMgtz
zE0IUCP<(XOzRGIRM^w&T1;pP^W*QWJJ*4${DE)s#GdMxIv4uX?4<_h9svW!b9m%)}
zDi{a%7+Q$N=V3ZLq$wM;puVBCG1il}(Mo>KL48o}$$Ol3_?hSC7_-f{S_4+}!RvX#
zhy at 1AfPW^<Xr+ao%emX0bG=7$eT;#w3CjH6=kPM;aIm at Q6hAnJXrWnl%Ui!>RTit{
z`pJJe&1{uxKK8!g+|akgmiXVOF7p#O<Jle`!GgejUSGy1Ns#~x8oy>VBQ6BxcRJ-W
z2w?3C0akZ9SbmU5^y at o4K`vBkd^MRcCS#KJ0Z at vEvB%`NKPl;}6OSbdSYD|4TKbiu
zz52}LV?J!EP)&4gWwm5XTVSB=3cAK9xdeZAS4ioxG*Ed+z)4Cd=<oef3OLK3_?bOe
zB-Cd_O4T~wi}h5BGEhc3;Vf9GDX-!^9z&qgLhOG;WRT;>g{MO0nLJ6neB{wu+?fuG
zF-J>a_T)ed7UPiMISWpzEaCQx@`5D=Zd!cBonw0)!cEv057az`U8V5<$xv#|5=wtT
zP=K0jjm)(s1sI9XJSEzcdvRx~%fAA@)p^x0P-(`zAp^RzxfleYZz&+X6M~p)8(0^j
z*BQE;Ns&aB6y7cC#inWUydb&%cNLRnaAYdCGC>1q82XDIv8L at gQ4#x7c-lPdJ4;*v
zhqde_+UF5_`aZPjcbEK#27PXzRs?_KM1%LOELq8-sm!K68~qVTY#}A<w}fXEUHm(f
z+84dvk~&XUlD~h0l!&Dv20le|q3Z at ej$KH?zzHpVs6G%)m#3IwM^{uJ8g`h0RfQ6~
zHHbCYsczYg;>vvQNw#%}1cSvQL{2;v3muN#1&)8C8vq$`rg<S0S1P=Y`?h~$1?Xe$
z3=Zsp9Wr3K6iYB)!x-q~+K?E9M6eYB0-FIetpJx4cN7y~n$ofEV`Ze$+J1+EldKt|
z>p&4kiVuN3JjNQ$8t2?J%(n~Q8&rMSU%Z)sG25G6carO?K8Qz+N{Vd at zmc9~pu*5v
z1*)>^r(v)kO~Q)9P{^TMiMW4{76s<5D!U=6Sv%wus3tQj6xrQ2>mGEQa#Rx`hjI{W
zMoM5^7}|2|&#H;hcyEdCmy}|h1j32ZO=Ie(CidU(jG>@PnH^;8m=ZQ(R%+qNR=}6J
z(CKSM2jCMYO~tuQzz><OaV5BxOeZ8)Ft<>#@U|2<odD}i)f^5k9twYWw%<ZO9#xQk
z%T!+A>zqAeLHYGIwL7!pEAH2+ZZ>K1tF&kEjD=w8q?WaxwcZ8>WwUJl7ER3$0?5^b
z at fq`MHQ{vv_pd&2un;^*IH|RRhs=}4KmvcyC~D~3EhTHRx)Tot5E3BX!StKG<A25d
z;E0OW=G+;~mS-<u-<N+~aa&Dm!l{0#@47)E;L9rBe{i#oG3?l-{}bNAt$H(&yKcYW
z>g}PymRrPCh!&0E>y?>kRCe+C66s&*p7$^}WkwuoH5qfmt0IATW#lgr&6mZ!Ayd93
zpAk9hjg<7pS4oyt^0<@wrE7`jNHjQ`-vnHUbH~Z(CTjdPVIO}>(zvfaFEvJ=#HA;F
zuL-*Q1#@#TXMow-?T at Do2$?4Le3ZC>Z<_mss*Jf#$!H{MDMY3awg)8>6E1lG&uXe5
zOPznI9^a^_BFx1$LMB3%So5V%U1Z4QT`QQT0p!EU_FkFLIdb0I7Gtd6d*&vZ3vZK{
zWJGxTFID1ea6o^^+MK7M at GaS$OcXDkD^{7rFWNDS3d=8smf&Uv(|u;WZ3K<KJdYxI
z@=PRgC`$+wDmyu56oPa|mu!Fp`ZSSJdb;p$%^~7Xf8aIo%f}kY<Rjod3=d0sx6^BY
z0DLg`;>9^;Da0p;bt8R~u52ty3TU10CB8IF0zM_2Q`CO|ix&B$(_-2#4~(0A>i*L`
zSVEB4o$%M-Y**!$i4dKBaQN=W?_t2l?_JS%fcd*09oCzF2caeDLM*mE{Q(aEdlRvy
z$G$5lbOry?W0O^oi%*UCgl9KF*E<vm1ezI<!?UcwNt!`<z9mRrN+@<zge5O*mNK_E
z=+nnYdB}ej2v`L6^={7eUtsmE^eP6jDP$B!ddJsRJPyqiL&ACPi{4W0B`^IfgVu?+
z&*?C+pTvO*BAGjAE*x;yt5lUI6WI9jGig=l(>!zYZ|8-ci|Gp&#;Zx)0&T>k)4d-|
z3mzng(Kp28BGN)s!tGsf3qiEA=;`f$c91fe4P$>@9dce2Jp}C(B2CyZ-75mcjZQDE
zfVv+ZAR*dpfJb27sRfH;)`xB at V8jN)E-1<fm;j7T^iCa&Om<tozdL^p1~Qz9w4J0s
z8sFYbqB3V1)c$l;d0Wgovr2HY-X2e?NTl}LDjEz|(H1`$yGLNRc7x!q;B!|DN$Y*7
z((`}Kn1`uLPyd<u&S5`OKIP{AKOVFVqIrWUAcvtVAgNyB1gw!n3keq3I3wG~hR`bq
zg5j|`omTU4k6{^<cpf#Efb)483gl_!?P6zb)P-eSt1~!Ux+iGr7OcydVu5JN8O)q5
z=8VW58#w_31PCc+h6qA&BjfWW%r`JA?B#zni(4mysByJn&!3oR7NhQ>(&FJ>)kPew
zn at zV(`TT!7Zi8B=TNGp`?HUbi9IS_(Wkp{Mz+1nUE>_tu0`x5LO??W}e?A43Vf<eg
zfDqf6O`|Fz^)qu<Dxk4CutH1wAB27X_foI at WWB<?ViPc--Mr+Z*9=4+ivLSM;TC^s
zA7VZRPa$sNfAABO8y+?sm<P#b(ZR-z_K|$5>72_=3%foAJjQ3puZeOM=g7(gYEU38
z7Y)Op+?sMOFA9gkE?}2=A?EZYwpp0G9?8Krm&D^QC`nDZ=m%bQ4*V#Awi}nnwnYOr
z+JB>k;@(;gh*W3bfLh%9cUow#HamZ at H$T;c at pzr}4VN1OkQHEhM3?ef+vH0s5cxbu
zUxQ$8Bt;_HuMvvcr9t$nYy{!2=B?F%Op}B4{JdkDnTq;vvi_<+A<;7O7!L_kL at dk9
z(&#b7m;0u=wH3=6=G5UCe!pQVW|A<gFA0U^l9>h(5)Y>~z#<$uC at Ld6a`S)QIM`5W
zwSD{g at s?)UX8y{^yWDA#=iWRwaHAo8_DgKBwTqvh{ALqgACTmqe0IpRolcoBgibVi
zBF>Nh%%d(1WW*Y^BJzKYTy~ks>$;9>{~7cVeqzlkujco`%Hl?Q`sNkF$JOBDzQ%Ki
z?ZE1l*)(I1d4=OWyOHNlwIzQT at _u}!j#^JL3X>uv9h_>LKK&*ajRxf4qbl6p#0CcO
zP8ZgdWF_O0mZ8+05VhN`VTtz&<3b5o1uam$FwdFF^lcps=IHEgELi9F{zQe-C&xH0
z3`D2o%Y_ZHHuc5atII$ZXFgxW)fb(gJ(caIt)9;6ZAM=7-7k!bsi}Y4-|)oPaiCfV
zQYI|#&3^c6*sOlYgn2hPWZ=P%$&4qDU!r5Tz(riqk)GH;4+t#$t<WZ+E1X8WNG6>k
zW^TKfPY{_oIT&2VYj>OPCcqdVQ|uIv-Ju1*n%5)(`o1k1WQOKre5l2f>3`+LZsgh?
zR56ffCHF06Es|P&xgUQ|7|029M1dUPWS85qgJ*AjN*B#@asDE}@2u-M1#n#4s%(t5
zYYI$m<nXy|6GX<!pEGtPLTwyN9tq%!^K at i!)r+178h2u=njo0<OZmd=5ys~8&CWm0
z_ujgW%K!G`e07!|z!i11!!@u>68Qsc5nD{3xg5h9HffPo3F3d_0o<WDK!U4gkj0@^
zw)bW4MEXkI#cUurtq#@biAW<;b>WCU4xr1k5q`#DreEB%N}TfiKL%}sHIlO|UKN)>
z%79?Ax#1%y^nU>Xzc_xbwGV^x!xPsF%*gOI3l7PNe`|JnrqXK*5;me)8k26&sjC%S
z2MuavSaIW0GBAG-L99>8z9ow@=Oz;zUfA)+J^l<su_sxpcbq2S@<1L#pG+GGaob7e
zF`=llm_(JN39m*KA~iFyOYw`IT=_M7&bYy$8<O#yV$RiBYL2rcP5FmvGG~y)bu<g3
zlz;niSs0ISXrJH_pFjH^#7MqN>l(Ibq8H{{|A%75ILLpxHHvo2aIX6}psV>-s9jjL
zS_v`EipEsL^pMjBh%Krzl<8F-PI20eRMJ5u$Sm#K_}!89x-1~Hm`w at 6hn`nNP<Bt-
z(3>qFg(7#sd>cG9r!Y#iUD*x5K&Z<{(ExBw=p{x|PfUOa2mNeAe|ZYDsNS+|rc{{u
z8gsi#q#J+ixmJd1)`8R(1c!(?G?HmWy-d4<nz_HZ?oLs$_Hyq)fhAik{zYz#kDr$@
zyZp<noG&?2N|~aW3 at zkksb0JJ<%ML~2{&ge#FFsu9eh<A at 1wx*r3g_?7zcX%hGm7l
zQ|0lyUzt;koGaSQegyo2_kCjlkX&hEuBBq8Ecky3v$lUyu8G>%<quSTtQDvam)12Q
z<O??NYHf_!G at DOrX6J*}YX}VxFLJNgn_MbCHc#OQsOgj;Z4d_>dLbk{c1%{ZOgVe&
zd<!ldgq1bKu(&buX#!x4P1P at F<~M}uc(+eoZUy|)F(ruK`+0yq(hx>S?2(Q|;p3s>
zj+K8Jm*0MuN>eh14D_wh<JZMFKiV9&F+|QC`!K4l4{-tfD)O=^3olnGFWXfid5Jzy
z$p^Byzu7U%Y6wuRR+$lOf1iSapeCac=@Vz$kvyK>24ZZaVYpwFLaVH}Tx%8=F((Gj
z+Z4Z%Yv6{~ct%J1KAHoQX&I at AiE)~{jHrJ^^6W^!o<6=~Cu_wA3$?kl{cXAi|3u*L
zyjJ<Dl#;eV at plp6UJ%)^xA|}R^@lu at FP33braCFZ1Xd_WMMAk6YPe(yhQ`fPHl~7D
zu95dW07ieztWspi&Wg2_(PpGln-Cx?ZDbI$=cWg_+$fRV8`So5y7g8P at 2t+}gphwC
zqp_4h<#0}qhid9Pt7H6c^3W27s>z5Z4HqIs$FJC$OZUm3c)p-7<ut(>x1~Gr6u2J;
z2$0xA`Gs#Tw`BDs0v-~J!1^aI)^(iP-Vr}t1sqt2=eLKc(xgR;V@;AJMWg9N&X7<%
zG?qxh$nd=_?Zsz6^MsN_`vWUU-OGPPi|eqQSA-@;pC^Gi0?eU>Tq9DC3$QYLD_dWl
z<1#;FzWjThf-<I=J(boP??Ax&oftiEqtCK#jse&`-lmcRFqjS(*g@}Y`1kWm(ClSO
zk4%G5WWe~GEGgkC1R0=-znd$XjK_NEk(|<)wgZtP*#BpG`_;$k=`n0<)z*K7 at BHX<
z7SqrDn2s|heyqx(khr=vZu+Fi+8v`41I3`=wC>&?U}s(%s}+zUJ&cy9BH^QN`Pv#&
zIvlvUu-D=ddnJSpd6)7p&dw>lR^nMm_f?_VRXV9AN11+9p9`1m5V&GE9*OXGb#lnu
zr!eJA)8|xtWP=*ukM4_lL70EH=D2K532<jrh-ecM*(*X|8=K;uUAp4~dzzg&r%Tl<
zDwMM&-6a1#eJ`WV at LQXGe=EU1B*$YjDdJDQZ9$CmKlDEXh!L1`%viK2&A(sSz5FdU
z^a at 4y2kcoJcA_6NA$p?hS^rneEs*4uf&E3zT8Z{-?q;7jYeVMT2&;dU6GFUfUL0~`
z0KUmQWS{6+t2^u$_dnzuEp~(-#of=z&alHOZu!1ZFH9oXq7%vdR8`<7n_rL-m{4=+
zUhr0(6p17lIPg>t0dVfX>&EHG6Gi#?V>FXC0LLVo7o&0Wioww}KS7<+Qy@$dYN(Ew
zE98K*Yf~Sx=qG4$!;gO_@;NXx2cQT_Njp1^S?j}t&3O9|>cgaYEyu<>_;TqD#lL&;
z;Y<seS*o)8+#WUGm(O{8>27vT$}p!*W^5t2A*j~1^Oqh?gO<`SBr#$&U|oJPH5S2=
zAs_`*KF*Xy9b(5Gr+^$?F?T^o*r-9`6E8IARqXdxGrC1^Cggv%f%GKPIJaesun(xh
zWS1CCh at 3BEOtv}3(snQGLDa|kON5q}6qSq0Q}DXc=Ygrej+%hXV_wvbkhdNS!XFRH
z_nnZ_UZi!LAohEyu*g=SMf_I5&*&UBqS!JUS($><AaT~<xdo~Gg(%np8%|k-q$v%)
zAW#2RHK1Tt at eF?l)bapi2AQsnQcFDxa%bs<qqPc>diXV;Gcdk|kWRJOWZoh>9Gh5Z
zVa<tC1LsM3#^QI7X!zh$#v^G>83!n;>^?sW-4L-QBjWLn@|w_zFFqmC^<5FEz<(>6
zS;R0tAPQoDK~eTD!Wh!K3f3T8&S>}?uHJEf4tylG=@5S!n%Q5AK?738l7BIZIwUQg
zCc4b1qNH=0j}%{#b$rv8J(cA@(B*l-%iZUW?x};5T}ML at kh_xwMAg5vaW%kJ4=Yr3
zSRhy|hh}zGAaS1i{zU3cliOuDr=}KERUAG7F+*|3%j==qr8Ensj%T*(%L^T?O3C`Y
z-CVVU at X&ulP%kB_TAUzm9;7XTWv1juM4WqcA*(_7ky}gt=iK<-C(>8Mf at SIl@)p at e
zMPl0bn6#%c^<>vAgZSLHGF-KdIVd##Z^Nk838I)>jyMPr^$C$psUkIQEPwLPAQ$Jl
z))jy}qMu?8z*z*>cwzAH*={f(Q^adFwY@?EDG`65JRCWW>-h{FQ)iM at B6Bn@Sf at o9
z_yAXKK67F0PGYz%spiZ7pS}juZE#7Be2q;zZdzYsM*wzfCPhUA6=(Zsqnh at mFQlHY
zUtilk<u0RHQrL|UYtd+TECmO=nk#R{o;YgeRiMp~(oLCAB$!2jtP(liZzG)M4;lsB
zlU9EUHgw{y2DRH0f$y*QF`xDzP$`NMcSbfkJ81}IiB6KQ^D0C-y86NaG%uS+ga}t|
zSQV>dzVLWg at X43m^waeu@>I}31PuXxuWEo*Q;S|F0P}hO>#w6p!|WQ49&9e-OP`b9
zd-}^%Y)`s#ezHz0bSZ@&&zmr-34|Sj$TNSg;JJLl7o%KQJ>B_X9M?T_T-k%zIFaf#
zP3TYWDG;bT5QA^oumyvKQIN;!sCHS;s4426Udytzise4-iB?O!JSd at JzYH&Ci&-wV
z3yrJ?hTW`Zj+K2i8rju^x&ATG&Az;i4j7Tu;VKL6vJOnpyqIQ at ZfxP`K)2PnQImhb
zf@}ao_u|09s8Rp7OLRJ*BnPu8p-lBq at 03qiIBRqmq~g?_$R%ds#2nHB;^^jWM(J>}
z3Wwh#XF!|s=~NH~h-CjpZu!9}MquzJ{7aIc4N{L_q=uZqG-QZyF^_PwKBr*|(8>sB
zvJ9*z%V`6tAgJ&UsHkZL{w|9^)7*dX<%Er=fwE+UU)el at +r!rggBu_ZNZG3#XKm2v
za(>V(R3x&uyb1HJLrPF)-nI^M9pmGD8G4YMG8^S><N%QJ99^YAy<YndJj%4m)#+|x
zf6!VdCiG^`bH0gKF(<*$01l&Gp^$DzXs7L=ug7QKA@=YvDf;?TDnNiSh_QbFrz}v=
zQPnm(5v3<EtF^$#jj{$L?I|Dy3bf%9c=FU6^fW%ER=x?pe7I>Ih+pnCAfMxA3L2L%
zZODM*M*a2Eo%A}O3r_4{2?N-Bfoqn!nT}$TNU~Qx99ujz5{T#p`is3T5T<wJIn at C^
z1RX79{LR(!6Jbr%Pq0VNyPba+MckmZfG}T-i2LpQUVpaUpOhuYu==(Q)YA&T%cNxA
z>wFW_ at uq;dv^jLIpz662s&&40A(Moet2n@>Uw(DMAA}UFDImp201j|7alJu0LBm~f
zs4F(oM3K;%sY#d7@;Er!$1Q<S{_Z?65%4BH6|D-R44|K|9 at GT7y4`<<m)ct75SH0&
z0`UVZzBC4t>~}4JZVYuvc at DK*l#P_3cb9M^#0NL=-|X-M6+Quo0sYhI42 at q1==(}Y
zi2fxgoHFLG3?51xMLV3qb6{qcm`(uFM!HRl4g(wd_=U{2XO;{UW|Pr2k7-Ney2ns>
zl|mw+*dWS?$MqaKnzetsRONR`I`=#QWKmvVgzlw5_$Z4E#A8d!95cQL+!hEVbS=1)
zr=rUdnn6bvBAo%7l=B;Ew=PKqpH;}7JxFl?R|jg&I-HAq;QmR|jfEh*B;J50Zf0?O
zC$WYTmhcf_CMMx*!vWC2MIbpYeT6Sn>d`f4daj{j$&~P<UZa0iE(9MjCAY|c2p1)%
zf}5B;8<erNj0AyZuz+$v4oIa7*x)cGYA8%m*hb{xaILQwQHzoo4NNy#=TeuMAuG-p
zcD4O2ULVzh%`G)95$zRGYv8X}e5OoNEjB|nA<OX at J9Cy<H5oplbY|P*iKlhWzj(T`
zL3S7fm2RZECFOq)k7+|x(r^m=5^-Ab_faA+z7)(Sl1hHv_%jC^Djsmt{7+*WqVq6D
z4iNKohgNv>odB9W9e6t0RRJvI#^ATv6zPr6t+~fVRM5 at I2aYYQBkF|LVhV5<;RS_B
zD5l2T&!L9Shc%0~8&6un7Gmo&odJPCxnk4S`QO?pIZuCIYfkJ~fKb{<9J5F~=rC at +
z_<58Ak~WL$+|XcuV*`yAsdCD%*Zu>KBRGqQS-1{pGR#<a7?N7fWAw{6G44%Td?42`
zlr00L1$Ug8`#tZTave4oN!xVqthYSWvVZ3Mc|6*Bq`n=B`RXoAuwxU7v;W+`vjBjh
zM*Ljr>IZ)|2s?HK<C%IehOE4_!#OkkpzfQqmmI|0{_0`~!Ce)p6sR}0R0UP72gT6J
zhP78=Ba~b5hXQ}9w3pBmwKw9b#56W%b!Q9Eb1sM1o!>;RiNDq&4`Y)DY6~`#d<zX7
z(+9&Kd=M?s`AOG{DC at tK>EK`aD*??H6TkFPG^>9TNCw1q52Wsy?0R8bSDL4iLKe;n
zSd|UZ%}kon<~*K5l)XVsM$DS%9wl(@m6 at 6<C~lw0_*5vuU>~>rnKFXd{oNI`<id(8
zXcN;!EHF;@@ign5TAvkTH7V<2{lbvt%>v%OtK(Zg^hE&>f0{<E^dV-8KF)F&>1<VV
za1(zG#ljDs*&p81CpDO1qs+3>GpJs=7g0K&q;_Vj1X<_e-m^^mHASh*s*J^*uQ+_@
z^%!8f^1l6~$JR+F4af`}a9G~e%^>D0T{J*(>`mH?+8b=JKdPwf$Frfy)>)|w3|G}r
zm9E9?m=~tt8hOH7D!s^%eQTueNj3O7$n<|Io1gIglU?vg2${9ZtN>H*Jm>1KVrqfZ
zq^DC at DwxZ<7*j?84CQPJ(>q21zjw^Wu=)WjJSegU50C&x)ZY>v%TgW5BKz|TE%Q`K
z5kt)#ON>_0_-<?SfQf>Gy7j*NI3X#h8j_AY!bO)+lf8V{^~*ihP1$__?VXH!%wm6I
zqDCR@*ikAPA2C4EdGX(;>!ZnX3%+j3#65udkEh53ir^@4qHHw=nTEq0r4hL~&>b0L
z5x~$=K+;4uGGotpx0uDm$`aJ0_(ZmC`#|J%1KieO_-R at E%R31Y=*<>~mZREnw?Dq0
zZ3;+-)G>x<Q#K*BEI8WZVp>wFzDR%8Ps2`TjU#jrVl#4194#I*vc1RCqW}r1wsvai
zJPa5Nlo0C}P2o}!$n)HjpVJEQ606Zgwc=R%Y<G*8(kAbS(wRZ3P5NuO9l}8jmv_>?
zzgK`(BC4=j8sVnKnh714s-dY<MrqR~<tzgBxk{k&{+N-Y4~UQd>KU~^4jz9 at yfRtQ
z%Hr)9a&S!+LF3Wg(@cICo7s-mCD>-8zqB!*_57#kyrEt;iP{uOj*nxyGv;LKq+a2l
zPLY`WE$e|}vjFg96(xJ?tlbO7Dqo6qUXM!>ybjbE&NCBjjzW?ao?0S&jp*>Y%N{jb
zy=6?o`-lIPDb2cVj*(?XJt%+giM(2U>gbB~;a?r3oZ9&*Z|AI{HblKAXSZ_Rwy43w
z9ec_(7Ul*6XG3^ILXQVy>h%#OfDym9-`}IwFA41$@BNNFDfW+XIeprWTrNmN^<Jmh
z-~#~8r|r;CjJ0&2n^NMmebNd02Pa*&<QMIdrXr>#q&0cw;KKP3hAn>qB3~kZ`E*k5
zD3cZe;g=Lwk+&l>Wg}T^IWw$gI>5KPpJdB4!XExOCIF;dm>DBLiq`05DuuKnWL<MZ
zlOvf4xQs!$t&*yMd+}<l?WNt>m2OD12if_yl|zBv_i`QXvmyJ#;b8_D%Qq~zv}R2C
zuVkfW2ensjw1Ji^gR*~E8ec_}f7&N~#BNrcfX`pakgCamcd8^T;BO{8ZFB=GCB|Ol
z?r1GjP?E<yR(tQzQ}bD09Si;Wa^8rWhS~q=#=x;AINeLT3M7X{6AH%_B;_asZ at S-r
zUv*Ul`aT|zCOpN;1W{9Y#FiV+4dO?0>?9V1Ym^snLAcm$mQ#N-z`M~F7GI)$w_|#!
zq5~JS;u0-)y{<^1(IBA;ZY^f?gjIYL02tCp9rsa+94upl=k-)s$x=*@w5zG~Qmos}
zJ7KJTFa*5WhHBQy0aJq3ndr*5k>uPP=b<FQ&d^=JpOqF!*T>*6JR{!H1ITqLXlnO`
z7)^=s^fBSHAiRHDPq4Y%aA!i9qxz;VPsf7-pO!RBB6N#EhLMxsr-vt`@<1_6Au^|H
zE&weL3Ana-vk4))Me4e&+La0l4!GPh_Dpu^Q86 at SF&A+G2|!r`V!+EEU_C*bCmc0A
zR+XG-;l*M!k;UeOn>ZmIMJ_CO#V~xQKv1Y&%NkQhS2%yik!WmSp11_IZ&S7byY%Bv
z;}8TLdnmEqQ_po-LZbA36=A)G=WR2HO0Zs-R3H%<@ed%U^?+Vznd!)=WibsC3gSoQ
z|KL5~8FsGJCzns^)n<lm7euzMU}t-!vH<~|rvL`5AK3vTt1#R4R3Lg&ucvJexoq!8
z(TwycKs0}p&VqI{DU}n106v0HZHV>}Qb3$e!A^!6>w3&>?7XHnaBUmYfB(DhAl+NK
z^0=wAX?$h0oo1qTI4;wD&hU8+S3|4S^f8eR5QZRaHgTqx`)zR0n-2?f^H9 at d=dL=$
z$|cb2(#7)$<fIY*XWp`@2haWZu`DxpAL5wWf+l~=7aJ>x7pc^723$A}(Mq6FQxd=w
z=TBK{!KAve`$v4KJ&xRd5fI$Sp~#CgvpAvx9Hft0Vma$6AdV2y8T at SG&O)B@$yf-5
z7ROT#>QP`jaURB at Djx{goyh;4 at 51M7`V`z#TI|g@$k!s4-cXv$n?U7TivnWUc`Ty-
zB at BPstbhl=#huqu4#YKoz53!<m*doBUhQD=X_ybhRWKB0JhfWmf{!!WKG$|`xOj~+
z<{mRD-pQSRm?H`_wzt>5>qkbQ5Q)Hl)LT31Bbi?-`RW3_OHfDUPV_ at 0$B!Jkp}M1~
zHxqa+`hU;D%-V<ShLbS8-Rq=$B8X#v{~&)yr(+ftIsMF97tHoYuABpVLD~~U+6(I?
zR%;BX*$1jsi%3xFnbv!p1-aa7EtAY=>&C%DmaV^&v`x;1%{S9!BlOfcVM~I)Iz5jo
zxR?zdVflk(r|wSOXbe0C|9^*xqIYW@;2giu+R=hi8S+FeMrCcv)LxzICLs6rocMo5
z_A);@DkB{m56_dle+q(tPI?7(-n59VSl}`a^dJ&*aiMY0QSdU;Z=vjYVAIujS8wqr
z=8)rE{Mp}VO$uHE at ZibgY4lxaUzJA$ADn{G)s<j$4REF{BcwiP1lI;|@#+Vu7iAVQ
z^jG920hHycBAj0`Tavo9fvnM?q?~`QzEZ4gFBYBb_9Q|_sv8$v^>3Jl8e{B5Q at lI2
z2|nb1N!iPoWGNBTbY-0B87#g9`e-wzg7PovG8XPh=*yfY*vG&Sw1#*qxkj6whp(u#
z1@<@PJ~I+k6Qq$1{AdBPNL6t~QY$lF$=KXTJDbqS^CdX7w*^ejEqbDRW+Z<G7&g3Y
z#Ei{2n04Neehxpi33{H#{lTum2#wjL9h*Z4KI|B9Cv_e=sI~E5l$>4T<kas}dcD5>
zG%$nPCRUPtkWFAjCB%3kw0kR?wsb at rc$HL+ at YuU_*vcDKSwJ6XW;CtCg_)M{_sR$=
za5Zj~+JwE>7Q+hxW3r}xjNgChh4*Xs4Z%uL^e#g`F^L3JYKSQa6ZeA)Berr!IshS~
z_rnrlYyR3W5jKk;^44IP`YG>{$IQ`zdLevtBz~|+iqiItP=x${z?}cZY^s;90LQ=0
z8`;B$Dz0`oy?Ji{8-Z|8WNY=0r_9 at nwii_y95Fp1_y`~pJWl<YwQYYU&qe|btNqr>
zk}4f4Y(boXjMUjj1HXX<tq6rn-R$ZJ?bc@{!oh^_ONwI|nBh?w$%iWh*|hn%B#~^@
zZ@%62w+SkHUKSwD%y9#{+-ooH>KP8?5ZwO&4T_*_R at UAN{Y=lnK_dM_8!b3{G-CS(
z`+jzlOncVx{FGCC3V?sY0h9<cWC5#LqLoNf at dZ(DP_p+|yMNfvcy@`gr{J*tEz6ql
zmQAjF81aoxt;3$J;&<*Q%Z*b#ZN3!WHcQZ at syrM;98etG7zcp8$6;j4qS}YsdI_w}
zDCW%<nEozXy>@rhqSi>(df#6sC^AorXj`Z}f;*#)nl8Z}@=br(V#eIXK3o|X&E&!C
z8D0*t9T=(!9?ri_U&HCYd)tpX?yRVxIH&83FNsdt7n(aWm_%BhH%uPIM4e2EF1gEe
z+0;LTJSefrI1=FF?!h{`PzvVdls0Afi9Py?2V+&{13q$F7@*xZ#YFg%snT-Gp~2(m
zP=a9XdYd!1+G2m4gUfYRV8kgf29F8`lbrYLGN@|#t(+<bpl1ph7NPBz)bg5!EvFd?
zhN8T8tD+ at b04yBfX3~|y+)nO#)wEJX at v7W#@bIR<Z^ny(qD;RO^^;E<X8=6S|0jY+
zH|3E}AZnR@!2XZYs{5IrF1RBg2Fv6&$U&v##}7`{vowFJJQL8&D|YzkUzK4YHU2_T
z8BIy#IuzN9qP&cW=1F0AfZRZn)hepzOsVV@@Ir+-+axkvArmMMs$$L5G~0c;(`5~v
zeBT4c7wQ=a#5KyTR%GQbHHL4azVpgOWBHo+$&6_GeFQ`v3WvRi>s?$DG=*1VYrpj9
z=Be`qWO#q?wLv*sB%Xd=vE|LHa&bnjRJl9|a46ab!LOfvqJW2wa6$6EmW0+F`x{BW
z*HU?8qrL~`)TZXY>=b;7y;ARGP{$D_TS|4!>y~QM%iHStvmrJQBUW=^K|Pm$sJ)jJ
zn?MoGqg$A)!~@9Xo6D4m#|FIX9G(S^EmQwYyc>Vl>09(Rle0XY@~=CPH9 at HMau#l+
zWVy8)Xeqr19eG395qrK`&Ar+Xv9GN1fe*3m*s7Zg$3Vx~X11e?EG$J1^{qv`l}lLp
zNdw7@{dGf-FjNa7{t59FhfYbYQE49m=EMHWIfq-ai7alpOYnAJRMXX#`zc=|agw at y
zQ&oRVChupT=LO0{%=tziPysbu$3<9Ty)1*GHJa-{w;To62%Wf0`E^Q*0D1-M=v^^T
zTC(ER5U0sxwQJ_o(r at NNS)gXgg_X%UU!2f#$#r6ulIM|QMhxvl;J4H%x?d_7noni&
zSlnU#bSrVM{0V9^EyyuyHZ5)@Zrtd&-4cJ;<KBj)Yjm7_vcx>$LN_95!wIjVK4m$X
zZjuUWFOO+0L$1rn=cNQqiRaIu53g-Zl7UzI%F`5YALo<4^)dhy(0I=T;zpe>fXgj8
zAsUwh5X32_B0mz8#FX+=Fguw8`{M8}Ed?USkQySATZ&tUOGB>ynzC{)x at 7>Fl4XBp
z88de7c+X!VcXJs_^9{jmgF;Ns7o2bzRgyKxW#i<M at gW_~)Kii<#l<JDi1Lk=7W`tC
zmerqP6Rrvw=2YLmfbkV#-GhogNoWeVl^teL{3REe5q7=Yd$Zo)#d4_>?{tMDlk<{U
zh5&U at OdHq5kMt%DrX9&RQ5e%@y?TEoqm^+D!v>mPE<Q>^@q(Mo999^p)*WdFNnv2h
z3#6y#VBk96y*$9LOY<($cYVtT$&{#G5X#>{tbGQ$&ph0;SH$504<8eLDLnWwP^cp;
z_^BbuP?J>b99H%X4QA>Gf><iBDf-R_r<-ID!e^C4VLIL%R=x5i4)_}DZOwls-jbN$
z=x)=(8NrlM^aEu(Vbrkgv)TKmBXl6i|Hn(RU0n at fR%hoZa{<lN4R3z`sN8iytQPrM
zDFz7Xs=_+^^3`D^Dpep6o16kdA^H&RxYL;IQdCHmak!0fk=Lrzr-RaoAkWaPDFS8i
z>f24{a0#AdEmrU4YvvF#vu%GXE&N15P%jZ|n*I0$H0^vtht^U2at^EBUxr&=<u4$a
zDH39QY^@EMY<N%pAB at Nh^E|6T#z#oi8dG3jFL at c#&$ug=4IdxnrRo>bvUA{56gwsk
z8mjv~w5_Yxr2K+JSP){EYwunAB;9X$HFAhVr)T{~H<mz(MT!TxiOGLX6M6%}JfbK<
z{QEKS#b at 1f!vQ%3GcA7j-e)N6G&yc=Olrbt-R4Kwt8hiS2G9v(hIrBG_<Fmj+iPyT
z?7~MP5TN|5O<zAQs(TdF8pzh2c>}0d00zt0=P%VARe}LgOp1Befu=QFuVRf={H66-
zeKUtbW)%7J1$dVDACG^$ixG>pdXA;*S`P)q#^&$1B%V^?W{y(@z~`Z|d|!c80*8>~
zO7|<_`5|qCl6&<p_4pi-G|c{dmS88)dpxXMwsX!0iuxT#yu8f&IV+$3UXbV at MCa``
zRbZTwd%MGr3fb`ge2oN%p3^~TU+DIak=A!^Q&sjkmv<taY3qN6_##;zMv|TOI*y|<
zXoVg!ds3SA+IwtjG}`n4H{#P<J9f(?YIhAW{#`Wu4D?4%u!XnlZMGM~LyYbu4kd?M
zX^ME at mFs{ZIallJ)B3whbK`st20{ODcb^VGTcV)0zBPm;ergpT=4Q`|T4I{pb}dC$
zv9L=zz?TCtRq=mO7#~4E7GQDWm7CZmpFYMH;aNz>7V`&<)?#Mw*KB&IAI6F?S^w at _
z!ETG%HF_(+LG&_N=t9&Xz#V(JyyFfmF7Ab}Z)YHt6?SMjvvHADEN-QI3?<E8|K*d!
zDEx$?=p~VdWtv)E at d)IlO0fdpM{sOik58|*<7r;VC6a$pV4uu#5Z0bCzy7CWt6<SQ
z$cn*K5j&J}7$@&o`r73_#V?c1+m36t)e-o)D&Om><O^Ls0LZ}msc8kwwE at KYsOSg3
z2)5pGkaFN;Qq|OB5hTU$0C&H(PX-kB7fDc)X-A3ltnx7pUOO+aOFtd4!8mI%<a{zH
z&Ot$7zJY%;Ob<o`NE`^}eTnjY<A`3M;A;VC2C9Bd`vZ@<+4o%WP|_|#$6qTcP9b*z
zi;0hT>;$^?wcvnUmn>I_i@>15l(2zZ5=Y;iYFFt;zDfs&HBB3xvpl;ei8cAM)#LuY
zVp3w at rLOSKcjw?q1&|dnr1p|FecTfO^&-plOJ#rQJ-F;02F>pIHk$?zjb$9xkbxq;
z+xZ0&Cu<4k``t|oIV{}2Nsn3Kc!nkO3Q*@~v{1OODL|sk$&4APa~A5QiIxF+3EVm2
z3e0Cm5|UDyb-oxWkpe*JTsq(3yls7CvOY9eMaXxZvPm`TXyONWai;z1%vpl||CA=d
zcuIedKr>CfJramRM8gw%Mk at XQsYkynkxuoB1@O$WHeG!hWz7rdL?Cni2uN at Ra@ACX
zgy?&uwBQihuwR~~I^oe=P=@VD9a$9AuTn4fn3G%iFL{I~QyAsAxG#H&&*^irA91e!
z6LA_2Du&vIYcz_3bS2RCV6Y468>)V%GroT>X|ZVdOp^mS9Ox6y2>ByYUryJOut*?R
zCKLh at SCU`ioQt at Un<Hm!kdiY}wYIe^({~EhT(qcSf&<xLxcrX?0;IwXa8IuH3faFT
zR|yh3sR)84RClB!9!EoRmYjtoL`LSxgiTh6jiEhL9tqg;4vLUce4F0V+w$XHJTre-
z<xfWMDzQl+klOzqWMC^fx86`p at ZVH`3&So8Y-dLnDxku2DVH0~_(Dk&QFCsM;R5td
z`e*ShJ=HQ7qcSV~Fy{%kahS7otLevRMpX4nm!S22H8H$UXiWhtUyNuR&XP$HtaI1A
znGqK at OT#+`%(T0Tka5Q;(mYnj=*NF#4iel#z$x)HoV{l7co51lkqnaYoM<ucZeQ*y
zu0z-Mn5y9ZG2daPd1#`HRhTIf(;em?-P!gN0Fb5?{&qXQ6`Nuo(n<gE<cUiH at F;qg
z4>Vwy6%Cj+91pH&gP+mosRCk3>e_#*@|39m{UA;U0g*w0?*{bukrjg$a$|o)pr!y&
zb3HN~7~4>k)N#D9OyU>lOrLwnF%|^t_)bNr>!2;QaL$%fRvEF7nXIIQ-lC&{6u>?A
z*H}9sY5h_zu;x(QmP7R2TNi5iGF7D at Ajlu7s^epF|0`bC{50YCskftOj80>ujjxir
zAQlZaq-&|JJ=fVSPf(T6;fQ}jhrs0=PJ3Le!ON~i`+`C?LYK7q_2ik35CO>sz=5k-
zIwM1vUf6M)bW76(?&_#@74w$D;x9Y}-3tey<d~bBVY=JSPKBp<I-#?@X9#H!DLyPi
zEJ;x5#RFg&7fTK$Y&-F7&zlR0)`Q`5w7%<eueQ^g5+_7)%p5gb>zRKsN?Xl=l;oh&
zpGQwRAJsp^BP=!&h#*_xEO1PnA1m{yR}kMBcO4Pe#(n1w*YDtRSkr(%@@DBq4V&i9
zl(NFP*d(0n-%isBytHANx?)IK`47>hTcT|D|7u<De73}-EkTbK5TJH#h7ujs7av>Y
zHtD at W_uAk!TLL0Kx{ZIS_ti>PAE95PnzoLq|D0$+9;r-mrjX at jIB=Y2UDC5(1!k6H
zX?zds(f`q5%lN{k-96^j&YpfB?*qX6#W-In>LKBk?SYeo6AbkgwHzO1wSC(1N(<wy
zR^SGLlV|4&42#ysi>>q-SKsw}%wU|ME*2iOV;h#GchhG#rc{5%lE*=0L4K|7e!yA$
zw*j+kJ`k)>FyNmf#w{~ts-Bx>vFv at yde>zc8e at g(3 at yaQf!-I@!V~jE3dg|Ikkk*h
z%_d1epSIol-P*Aa{58ek#wDz at 5ngFA{fd}c4FqiJqwH(GPH1laq7LyZn+&A_a2X)`
z|0}*h*BMODLm_{OJwg4?!qt%L(+SXc38*t__B#BF;_=;E at 3~v at 00>xkOTQu8tSY7Q
z?k#;q^YEBNRyPkt8wzfSRsZ<4-sTFUWX6H2_3h*#pr8bBSx54duoDZ4+rF^8hj~`E
zE~S+YUu^HKRotA}F#!1djAPe=M`}ai|9Mvx7y@;9+ at 61ZPLMB@G28Fm)LRI&ubg?Z
zgMZzOc at zGglu1g_WRU!d&P7P3k^Z;2OWm;Q>xvSV0ul~-f?17ax^R*FV_J-tCrE%r
z_m#9yQR<K`4n!KB>x(F<=%N52_EdQfOrgZgLMyPrOEDm6gW`+=m`Nu_49}>5`)^o6
zChj2S^B#XFz(ndPTt2`nXlpK4WFCWiF+e)`Vf)6g*JPI{x44pJ{Bqel6dH&6^$^8!
z^}6Wy((Ufjn2YbHc)h)oi|zE+kzuWSwT_;nkLfw!cILwW)VeR_JJY-lra5bOX&Lp*
zaPuqXm;{XvKnh)kKpZZKU?pJH!5}H6VvVeWt at wYVi`hQ}wt}dBZxD0rRANvYyrIih
z2F|xRi+#<e)v%c~HO`9YAbmnKbR at Ze&*4urI4V|dY5%zlZrno#-I~WT5C$>}W**dC
z0_}Xu(s_4pM8_2-URh%i5r{6f?Bq at 9A|;Y>ldRa3kBGjQ1TVFMw+uLtFt_vafalTU
zI=_Elct90pVE4}t+*C%ZFqZvK`N&DrqU$;hX+AH9%nX3Vhxgw^KF-H)965n^e)XDW
z{C{j-ib++P2+|gE&d9Rp7G`c!DKFWmzbZa6r-mLiT at F8y9U&O`ZTI<{nE4x}c6nim
zj=YS}uR77R=B!=+3*F_Gs|X7yBJb^T7i)jZxHF1dOhH0qq0wVfrmcY$0Cu=3Zf~97
z)`sw81*5k+r#kr1dVauO at qG3#9`a4KZ<DzU{HDg!q;TP{wz$@z(Ij0oz0dt_Yu4zK
z4k|f-iX>}|N+YwmqU$b5nkEL*T98t|136x}=BL#tl^lO%zY7+Cl-7T6NEebHXIOt~
zaVVy778CccSI4Q~++l)q`TkgP)kynyEuoa`*<!MCMX-M3?S7;$r*Lz!UVuU<<uZPB
z`pzJGjWk%TU>zbDm`PC@#Sjd|H&qWj-KO&5yy`DM*we~mM=&(ju+d1(#due0ep6Y4
zU<Zhhy+)>^zHOl}STUU4cL^~aBlv#_sx-G5jpJE+R$&eX$(58Jbc?jp;d&YO38+#$
z;~0)6!?{k4*&2ak61FIS<X{-57f`1Q;6NxUSX$_LsusbUDD3|sfcPVxZ#5*reRW8%
zaM^`OsOBrI1ze9IM(gKYwIcS)+y6Jzmz9y$>5usx|D9|<$kTdlCM@|^rT%}k&N{=i
zP28Yqz;SS(fu`=}40MT8pcc0@)`YIRd05RJ6v1>rgP_2ldMKIz3Z~cbt70E3{NW^P
zl;4aR6joTcMKfZyrIwgJPA1+W69ag(ne=ei=33WOPzMUOLq%j|3h%BPUxz17mI?`>
za=!MfjC8LsXEmAmPr!>JOQe5#->)FOvoQY~zCa$j>3ocGSb>l57wJr17Ubw4wgg*T
z&3#sAL;0flcrWCR&jQS~6s|6cN5ah(xi at 1V5Ysd@X3vvdSP!#@ZGO}|i`sB|4x#tX
zKwT-5IraGEjvQ;u0+{%k*w3Hd{Jw at Daoh6pl-l2IIPP_^5>SQ=ib{W)DGk!`cF+09
z!AOvhOeA7hJPR^nJRZ#ndOBl}?<wMVG_N|lJYVbJEi?y}G-`VjZ>Ck at Pi_m1O~3wj
z4_5J_m$E;Nw+;UPtjA?3aHE*@-8qvhJ<n=@$x$D>>bFm5pL#-}G8H=0A8!l}H-%36
z6dW1dyj`(E-cpfJ-g<wuPE+}r>&;HxRq!2PhXyLQK`?jzxwqEQyG{LWM6z3za7>^%
zA1XyUgkQ{QJOwkm at lcsn_El2eMt2~(tfS?zy9;xYT?5AB-%lX`N#9Z7_+1*SGm@)_
z>Kz+;F-f-z&u at lmkz?18UVZ-3M|JwG+!(8kg!X)~#blLU>#u(;#zp*p1XZXNHyXEg
zLtsCsA<7RuyQ=A|hA&Vz4OfYfp48R*o7;h4C}^`QDuj>Rht-~sibj-8?$x3pPNcNf
zoQ>c51CcpZhL*6_Q+IgV8e`nmP<$d4kat{`_jni9xAkR)$>|VyZL86U5w_`i<p*=M
z^CzxI#VC-ZP%?k7{=dMrAuK!5hOqO0p5weE%3^2AVC=!jn(v&SAUJj$J7B*Dp}P3L
zp~H3NP<sC?**5`OvrK(XT<|4Ym3b_I&(Tli-n6<<3*|Ox9WhtwJ*De1gM*r>rjkYj
zxB&b*qVkR8PGWZ-i-yKqB*DM-Amc}8N~?FYA?vxfd$xaT!g;=Y-^*zPWxr)093gnE
zAdi)8`UFet-qR_ at F&<HNswA0og~h5HsEg|2j;n)T0F`RLKoqog&&e!o=!6|{67DKH
za3zvlPWRsToI)h$OcitY0_czH7R17D-I`<R2Ew;2-kj<3Z$^odTNgK^GhZ1BR1a<N
z{N-omb`*a&agm5}z5Gl>A{SM<kJ1~`@}t`SkjD2fx~=7czI9YtpXGgh(bo;%&UbKO
zXU|gMb#!m1K at LN0{gZPe7M~k7ekvS>$rP&dq#P`+EFO}@lXUpJ{&U64#vv?)WaDoo
z8=5`OzPHr^=uPg{wfcEzhY9ktV#yjEDNllilA(XUVCSzU{;=6bmY at 1S*Wun|X1bZ9
zVFW3>R(0xvF7lh{i3>{W-V7h`@`+IWKV+Y*-({j6prXct9EmWj2BQEAK=i-li*dW;
zau_o!K0xxaO7>ie2s1e4aLx%RC7J}L6*T(D<vVLVq)zT;i4y(Kb_n&aQpgy~*jP+)
zRztuN_=%~1t_AR|RGbeMb}JFYO2vRmjg(0}fw~&*TI3{%mjyxSMc<EL)sF?Yx}`Zq
zq%b;*I4wX}IE$vLCRm7=&p77pBACR|CrEWSW^+#Rdc0D3P;9<l8YLvI_~L(ni8%f)
z#n1$Fc<*Q<`D+$207XAVS{SfdnSvE}K8QUuD-IZcu7q7#9_9J_Nw|?3=^jFx{Xnxx
zL4RLJ<n8B6QyHLuD5+jE)D{z<?(8^H|BMjt`esI{pzau=fDO35p%4>r7(zl!#vGlQ
zSx9~M!n_3E%g{$$G4SG)fEG<r5W~5N8`z2&atsQ&3K(BXQV(9eNfi<3O7-a<b}{1s
z(9#Eg!*M`xhIt at 4+s<V at I>@&l2+n)+6-Z%~?d>|-d~_~?4hXP#Rvy#ROhkIfYxfyk
zM=B?6HF)1x??7nea(|i3p8jl(Jc;%jW}MN^O3sBrBmyF{g*`SqGR(YhE|cu5m#T)U
zf2Cu>FTJ;gcbqyC7YqC0HF6v))Ep;=+vaG0-pb}fDFZX|^+ppOh5t<*^xFo=^EPqJ
zekFAvjrSxTu<-N- at uf=&>oA%Pr=J0rl$R%A8+8JuqYh_&d6htwkK82ff1{LIp_8PR
zj#=Un&F23NsP%Bts1{9vGI|QS1)u^h&Hc%17k96zLHmh0$)b+q&jIWVN=)Xl3_p*5
z6ND4nSQ1;^O(^i#z&^F$_6>zu<>e=ZwmR(`p#PnO;Fm$Zc%XxzJ;jg4%4CubghFWM
zuAu!Wf=z8AB@^_5yk8bx&uC2FI8Fd`H*KBjVfSCPID&!#BvDoc!G%oYL0olJJLGOs
zD8GZ9BmiroJ2ba><TUrLvS<V{_evXo=BED3iywf>f at u6=6c|6Gl8aGx#dq2WoWK~}
z;j>wLPB?jd>mi<51{6n~9o{+SW7XjbS!_4&F*XD}Tqwv`12v`k<=3%p>98*OcC*=6
zp+;R?72}g?c{BL?<V}u@{Av6t`-G}blLfBQ)+f#UfK(Ss)eqLAAkzdMdTMWf6W_Cw
z(gGcC=;k3eEm~4SSTNqmwSJ;;iUrA4xm*Bih_0y;=b9^Zc&!eDs`EF)-4M>ZYsO1M
z#z|9q%RvBM9xf^jVYj_caiVj at fLNExn*Ald>VUzB_k2$Yf~ki?xAxHX`#!dS_gQLt
z7koUKO>-&M?p|?e0Ltc&9>6MpsaY@)J~0>kMc=-#@u^8Y;e4DtJgo)50+T153(CBN
z^OFLFE*`^sG;px*QhdQmjgAR|<|q7MC#L1Iy?Bq^b(?PTTUuucbG%WLkJo)Uabe-3
zTPTyr<+mNu at 1HOCRdBn`=oeMfW8(@*L8&4E{vh#VblSnP2v2*m=AS at +f@C|$la<ZV
zk26(wbsj at 2@XJZguZ#DpfdO1 at eN^?b;glK3%P4yk>q(EUKS#OrfckA<_b*-U)v_-E
zC}?5}E*r2XYYmA!)PjR}=<ui at WpmFi+u!H(H~i9i>93rKpt&8~LIK$LvK7=|S_Niw
zMmZ{P at 4D8+u^`BR^0-TXR`#ovq%Eia=^<m<BDQ_bSLZ)Gv=!~EgUdPMkp}%kZ2l+C
zn|bkLOoEzhKsC0K{U%yIsSH)&-SKc+meDpm9na)R0?)}@tG?WwGvmEiB-Z<iFE>?*
zx;}OxXP!qiZRFH6Ra9O_>yESHgX;6Ot}fL({~5kfhju+gz#7ee2jxaEUyA#<y<bUP
zvq8Ih28FuLl-poCGen!s`y50i7F_c_e7<d>%ow7`ud5m%!kT4nPTy at zv{h9F-QKDR
zDT_=F$pG9`BanLc>OK>Hd^YgEC8I1PvQV)|-|Zh{m_#DGi&3cN5i2={{S~E5ig%RL
z+#e?x0S2=d3GoSkx?)1x?w2Fx_HnoCzY01=wKuocb^ar{f;%dvS;T3c<cmi)BkSPI
ziQ+yLX;Jkyb_;6zwPN<rS92pZhTsFZOO;C)(M}@zzHLQMyQ9PzqfSdLLa7IC&ksY+
zMn*oFBdeSo(XT{Hey(+e27Z!SjASjmCt$E6(*X}svPh(VW&EoCO1$+$ffp9=1>o~9
z38Rn&aLe!COOZLP*u{nAjkO%4dJ8Jzt^d=&fFGnZAq3wg*SswhOG$O}HK^x|{aIax
z-Qtth)h!E at Jz>-4*(~w6*LH?Ns5O8N9jFTzpLH+GuD{?D%%$X;MQ7s<e at _p&xJZOA
zToWVc=xCdNl3>V+hhoyZ3$~!9nE`Nx_KNPX6m)RaTQgg$r0E802nu(Y?t~p0_DUmg
z$aKCm2m4MTGj-j8!N4n)9KpsfOgzP?&(6gc>iI{5yDI<}IP6rSG1FddiwggbnnT71
zDAu<|5|3)FSS#+=Ihq?;f6w<_^`BnfWKiQ=SiO^f|M-b=2vwLc-TkZ7yRs9shv>Oi
z>!G4xfo2xJP!JFgpma0Dx1gvnvFdsskB at S)@+Y%=>RV+ZZ_YTAs%?nr5^j-7dRmjg
z1=&*-wYHq$o>I+th?Au}=2~eVB(e?9b^M?edJ;zB`-nC)Evix at B;|0suuEi_LpxXu
z1a$C!*B-QwG1AUzL{(Uzf|LpQiya!Nhe7T4=z5uIC}|AIo*-IKp?sgR8`H8Zi>rOu
zdJ)s&Trr~KO>IETjJ=c>hb#=|tTgBQ(}RDw)lFZ-_Pk!iWz7%IFQ!#NDi$Q6SYMnF
z9zk{N{LnaZ?=21QmnQO6E<GYQsii~j#9sD)85KZyHs~{JZN4S7xqI$ZQrS{jPLIHA
z9r#V|b3L0^H$4A*OGMoS6SQIJI5~|49o!&mawL88sSU=%=~Ppbr2ne|1mu{3bTG58
zkYpf-sA-iPNr$YJAx*{vnqODFyre|i)8f>Ix0)OzPYqTCMy7Kd(8JF;3H$4HHv~O@
zKm3NfzA%39G=+)zVy*HI4vm9*E&JJXO(adpuMAGQ|7Z&OU*}hq)eK<8<5s+32YPT~
zauW=_3U9xKQ3j++T_H8vZD7=;C^ryZt;*%|7Z>5MCxLv1Ci?wUz&nRr(TW1caW-TZ
zsiMl!fZPIu*e`?Q?0mZG=()ovtWGI^2<aJquw0C5g)g}p_Qg?!XNH?^1KQ2W#_RXw
z^e!R)-~Lrr^k<|xG9HgLpst0*9g*yA19w1F7*(2wXD&jdT;G1;2XA*O+H-!{0>lUU
ze=Srtt}H8PmNHCqQq_9=AF4*pAsEl!N_3~1qpd4gAV^ScVyYNI6>;H+OIHqm$m)bY
zg#}j<7ZTFM;5M(m=yeVnDc`b7&nlA+eLFw?*_d+=Z>m({amf&Apx<wa*=N~f$k0kG
z93iaAl5xjJrR1>Z=vS+GynZ`|{Urv~ZnKc5$45oW+!y&8V_J at 5z?O4Yv`b_o3GmoP
zL0+s7_NN(i4BSJMF<t!t2!=R+lEEYIF`v_IqT+bsF3xHdG!jU{?R(~VCa>rVh!lE}
z|3G at 8=t_;T$fEtZr>=huwi&h93!}iTRD4q4`kkvzqb#nahN2iz)>$0L6s5TBt%qQH
zg#wKofuH%@Pc~4c@&@fr|Lz)1-GBB2Mfx+i8Ov7;S_T7CA=A?Op-S<8O^o|AT!cBE
zNGb%zhJ!TmpWM_a=*EsI*zvW!I#MByt)|yz<zQa{pL)h&Xs#TSxVzpVZB8UWxaKeU
zwz1(;F*rlw3v=ZMen+e2Y&M0QdYO}rxs?L^%u%dofWj?zx{X<Rw7}5#iDh0**R168
zT2RE=_SL?I9nApY^u_#tlmLxogLnVi0E7 at We12T5|JOV6ns+G(`l10Y9Jg6=z>I+a
zX3QZB#z02CN?~L^;$$`;%lYA6Jj&ut;XyMS=fey-V{2Y6YqOH)DyJOZu&g~b_9qPq
z-E6qSJ7<@Z<suMimf!B5qU`@d7;%BO&<ZG%;2w=~88vyA-#re0{Jr^T!)WC4wUgpN
zes=uZg{F0dK7`JVOldwI0+$m7-NWwou^Dc($CRalJ4Q))p>H;cWx15&e-Dq0clFXq
zgu!ITFMZ9qke3fz1OaPr`ZumVi(8Vj#}aXyRoQElR=0~E?JcC6SkV<swC+nJVR$kL
zdvuE*z!O(QO93l?WvXiMIL{Ym=+C$3N(0n(C6UDt!y|4gN3C&r&H_NNNNH+0UA2;w
zzV64dFOdVia6O%j_bmMml_GbjrNGKkprBCze`X17!EO4~Pd+IN`8U2=;YSD=^XuH`
z`Q~=kC27(a!J47s%3N3`hJZg-j~V0)@P{KIGhoD(7HWZisp{Q#%5V^il|8S_TAAj2
zLh|RwYUtlm&_4O5x;O{ydy-YB@?TO0T{|QFaNnC6T=2Hp3_5+GIU%O}QCIrK9Y&@;
z^E&Kpx7f6OJb<fLoiYP08*ly2uBNTdXE#=&%qsH;;}Ecset4l+sQrBdXc;GJKmRFT
zT&U{ZqTXPCPIggAdjqj}=K!eqz9kWOF&wr9y~K{AoK+CBm&bCQKQf2};u=GVRZlBl
zAO$y-7rj at vC~l8Rs>{a!Q{qBA$2dt049%5=ha at 4~*9%$98JUOeq7qtZ3FG}Zcc9k~
zF@(qDjhib#Rle?0h{7bvhFH&95+u>!CbD{p?F55=1>#@A%$>|%z1|94*mW}F at tu&4
z7g&?sn<QrgW&L7kc2}i at 0CfP7?NYsGKttH{D<GMxwj!{oX?RN~=IpN at fbK*^MdI~=
zoR|I*n7z8PzF*jhj=b}voc=Oceh0n1aavU#fax1jn(n5lEPgyaA+tyGa0Y^2cnLIO
zQi3dh3SY13)0sl-ivXgY8;DBsm9)77<tR7_v4LTyDs)|CsT;*ik<=@ZY=c^XX4sjg
z*CO;k>_0<yklbYLOG1(gEr!mdR+BeITK8<FF*M;~KQO$=#*6qls95#3V^RJ#ZkOG5
zh5$!FQgI0htSoqtadU{Hgf)-!B>`;qqsF6uooA0eQezO&N23Q19FHdT&_c?!KtA_;
zoCk1&u`NxGj0#_V{if0j9n at 3Ix^UJzj7nzEi2SRDvWN9 at E1)}JEvd~*T2O_E4Wa1L
zC($;wpkqy3p9Xs~ewAnf{?Jp2kPA+a9(U^TVgsv2Mr%}QtO&PJ|0_<^%z0KeiY at Se
z56d!tkT^<h*W&y1PjMVJ%5WiwtmMZm#J*>g>LE=-zOIZKR2!3j=&Mr;X|l0N*?C4%
zACz)0W`jfmJRc#@GX)++r#(eBkpx`CUkj at N{$0BDlsVvb9`>aJtR$?5_X-!az)|>I
zTPmQbrvQP;PkCG8@`|(Q3?9YAFv+!l!F$K~L%*3Yk5$6Yoi_dZgI1Y*JIf32R}Ha5
zk|~Pnt3TWR)2^Qq-oGwV$$wk*=2UNi3KmGxn+F^DP7euzj{2zDhdT)6$XaQdPYeWh
zz-Xyjy^!j4r&t2UZOA@;AokV)uf!y=%@RE!SA5MU%slwqmfrwfBr%rZ8_*JehpMNW
zovSp%hu%wrY at UkD+Z#cFHDJx*5J&Bu$8dDEQvg$NItWLG`owNGdb8TexvGtr>{o!l
zpRpHJz2dYNP1N(a!UKquS%tJzw&O#FBXchkc at F^RQ;UturGCfD)P4E{QhUDe$t#t6
zUL=FL)eKf3|G0QKED}k{hu}7UIpUg0f!p$Z7pgSkDf+Eh>jemtL{`tFC2fNi^Jl-A
zExdNqT1W7JkV=U6{M1JxEG^srkCoDO!@M_`wJd^TH-Y at OB|PYGMY_$u)k-ILUSNC5
z_V5SzNg#v~CLaVB*Py%~xcw%_=+gT_{tmc`iyG_#IXzJ22<LUAWOtf>=Okgtp`aQT
zuhFb;5fhD`_cnuIj;FTim_sz?meOTsoj5s~FR<H0?o+K<sJa65-ocjU6zS<>=F;aQ
zH&KnKZgHZG?6cV}1QbD)yC at J8+ItWb6{>u<b3gPNw?7#AIoL>Gf_qIrWYo%!mO(|6
z7;n{2Nv1dq at HD<|Z5gtEr|A-1<Sc-QTU|`{l|wxeoKt~nF$f-HwEbDv4629&)5Ki8
z=MSvx>>EW#?V$*536ecVm0zQb!go7mbL+KOE*vQ^L(EU%7|}zMc<kRyY-T;FJKWY3
zLu<;7y_M0caA6PDik25OEXuDeA!}v|AOLL21FAPu319TW=_zo36ZSbaw8_}f+%a8;
zM{v9OYkuJ~6s2~(-?4hD`%8=xlJc`1M{9Y6aTE at oByfm+qR~1#3?~wBi;6RyS|l5?
z&&$g9gbzNb4|2AnXZgjB8oCCF<_N8|*0#ww0}d~0P>wU7s9J-}r*qmC2;w<vbr>Kz
z>jAx*7l6#_hrls^fq@&ajlgU>!{3)B^0A*iOr`*s9%DZZI!R at 0k8{xzA2^J*HgaCF
z3?K at pAQs{7HqkIPQiq&|9Xnmo4Q#g#LSruLAaD9E-VPNPT5uh}f at FGT7)T0<(oIVQ
zC^L(sIptCIW~6a~a?l+vYqZ|?>H0sw at c8(g91(KI2c4OJhTjc1ljv;j;@?hr%NNs6
zt?SOr2K?VP0@~8bl4oidZS;yV4a~YU1d<4$A%!zuuC=Z|c3=uaMuED(ossyV%l5T<
zt0BL$V<jp4P>6Ao#bWl7(^GFAX6wS*&V+Vx*Fi>L-^tL)&5RH|{Z>x%q-jw(bT8G-
zu8GFBw-EY&Z7Xh2yp{|EefgVkp&gbGa>Qna9p)yv<G(!E>xnK$hfI7E-V3YW)eX_A
zYpOY|2JZu?1WRD<%6oHBt3`&MN_oJX at YLg*L)2CBkEpd^uS(jlzQUWe3nA<OLM}FB
zDH0-?u`CT6%E(E*(0GoNifGUCYTOLJy+U|l#!MT3jELPPQ1Fv&#Pj(RXcl3 at VXo|o
z47Pc0XatLt2g>Y7dsLpRl-2uMe{_B@)WMIlUiLt=A^AI8;dEz`R(|mK8YFv+Jc at CP
zQ$6d64DVDuie+_#IuSVxAb3m}(&5L4zS}IY6e at et{oVq}xMNVG^`_SJW3dIHw^Z{V
zi2Lk+`?GU24B|E{wzFP0qv00iK39`Rvd2M_yT?hp73C(;A(;vS3`_<?trjie2^08C
z#@;TlGsUPj<DxpdL5dd;D?l>4simqoL+TDxI&#0M63)PZj)N3psh{7As2-`f%~3AC
zn*ja^gR`boaA5!56yGwlFOj@>lHszs?7oD5iDEF+V?Z5u#PS?9)TXnUrCmF=C5>_E
z?nhdv2r3ENs*K8QYtMCdu!8U{Y(8dm&zFX5rq6ZnL?a_vVn^&0T5Uje_7Rcjdrnqp
zfBjlr-JR9jl_pPvNH{_cf1y5%4u*cwv|32k(i?Kl3EEB_R{d|kT`0a-1<r*Xg?~VQ
zR9bS=^&DEcJkD*nvDLd*3*Pi|_9(iNOCu2%fnSIedJ=C_a$P*7JwlAa5|RjKY<wHP
zIrC+>xf(;4`&afOqZ8H8KYTcdH5lB;gx^=xu4s`f2M_4BDlzkT{CDOX+^^KRq*@td
z7<+K+AojE2VKFF8W6Ncg at LV?7(-S9u^8n{JY3`T!5keSOE!FXyATAGJQXD!Op-(|!
zEE-7+>PUlqQa_FY*2VyA)3v3?SF7_mqpqe^0nn0vw at tv5jQ+Cz3c1XS=kTE}+8`~n
zWnx0Hl83Bnql$(LUixoKQzuX}e&bX|l=cQFN&Vlu4k(3*gd($hvE%%|Rx#p#$hbqA
z{UwU^*mM`8e+4!Oc-*HJCQdW9E{b71qjApQ=3*tY`7|p{gsD};DHEjQ)p-8^2sY-M
z$R}4b<KTS^*Im4q-bg}qeixvY9`bwlsC~uuSWOpMR<){h4FPtm&#;2J?wko>dZX2M
zw5;hx>re_frv|>s%F+d#v`3kL3NCJL at 3xJJ$HU0n`HAQwSPqpDgkJqmTocHF2>j<l
zmMsDi-S-2DBKK+KkPLvylyOP=Y7^fA!5rmaqhaa_VhA{D{v}ly%k<7FjEwNqduQrX
zCfH%%?$f?9!1_FNT$vwp%#jAhkK)+2A=C5}iQNqJY}d_=KKT3)0v5-A9isMTCe%dL
z+C>2&%|TiQXU-La?!5#F%OTu!_ at eWwng%d%C|c0s!X{3~q&RFQB`I}0ZrjSbl;CXQ
zBgq_+Um^4T9- at wAE>w~1Z(4C>blL2Be^7MR4O{hs`?_4|$$BJMPP2HLGFsg7cAfE_
zFYE!Fr|%2gJc7^^M`+N0XM;j=A&x`U=T7>QU1Dms<6-&(kr4?#`W(Ux=xpCv*{*6p
zD^awo4dR>+cH-FRvTFk+U3zG8x88#;c?L_bQZY?60*Qqz*g=)%x$J+LPfN)=M%>zA
z9t5%=h<r#PVpk-I`}g_$N3t8I3A)k!c at h$W(OS at P2Ej-Q&3^%ZkOvTD5n<n82=<tY
zg#+E*uovkV;AKsHY-7x3jp!e!hK%0q=^pvr+SGUdQE!mYy^rOZ#5SMeAkHs>D(-nv
zF2|ZBrRU*f*~bQ?+3!Bv8b*H`0X21hq26{90 at W9+%sTcZ?I|pYc$#fGrByBu-hl<y
zq<<0X2?EN=PueAah<L&vswA^wUD~3u;EHz?`<Dow$nAoM at YU{uAf}UpQo%}S1Otcz
ze)o{Flo^;pgPQW|y^-vAOSC}t!}MMe(^-~s!$R#DV9l3l<*WKgnjZlUs0vt=RpC<f
zm(U0jjGg~tq@#9#L<wgwIDdg1>7h5MMDX?WeA7Cu(nE58u4`5=jqAJIGED4Pw6BMK
z$xji(f0eUr>rqTPZ4JDu0mu}n+15MzOPTUow-SA(A%6f^bU~{CZp2u61LTak8TZs>
z?C1%ebZgI6o^ZyQ)Fq=`a?(k=PvJ6qQZqp|Y4-ALC1FQhh}tMeONqJc>^u%sH}4}l
zeVeP0 at K_Lkofg9Eu>V!HrM41>$r&5m5J)9ap2+J$8Ik(Dl(-oCIf`*Z9rw$@Rtqy(
zm*fsiDZ$^vGC1k9$1FId>IgTY{Z&L$!Yda+57+?w4fKB&{&My!Zr#ikqaw2qGd@!_
zemd%FkjiTFV-|&_|3q2H)&uQg%I5 at V^2#JL7wwXNv=ppIn(;a3L9;^|+<&zmg4(Q7
z-Lnj7r6S at dF3q_-ZSW=<icmv at t~$ZyJCx;B46qPTf`e4~e<p^;unnNUk`!Je6_#^9
z%||idq1l7IV(P5w at J({f5&U#0&LGWg!m8H*f!Ot(iZ{2q0hAh0rkZB*k^1WFv8sDS
zCwsqt=C-v(2`I#zK6k8^5Hah+pG{ycUDmYWDxxQa{4rLvOQ~U;5}dI$CowJ-73s$d
zU at vwLwMBU*>FrRPylNZ7;K_u_$pzkMqQr7&4`Dyu-GO3nDV2{_Kl^1fo0uRV>vhB{
z?J+zGWxRJa3$=&i)QdJD?sTl)&^6?Zaw>&?hUry1POtN~o~F9*!GJ)O8SmuH%glF1
z;Y1BGN99~?A&qB2z<Q-J58pJT0`XTy_U-m>NKs;hfJ1os*jD}(2VtL`Q{JCySO1ux
zG}a_wPfA`^f+#2J*FQ6PThQLk9y*m+m>V!T8Z(zk1D}S{x9F?+JhWPH>@neWCd)5>
zC at MvI_ydw4B_=(x!m!dz*ms at V3~WS?6(gG?Rl<dzH$xr8`hsldWr_f7osx{`JX`@H
z5Q{~$#R7^!h?l8nX1|bWHigsgT~xi}DDrg2abmwN6M~J=e!{5_)-8F=4+#B^mQyM*
zhKJLW^+GKbI<#R at ZgTFJLS_8}CB4vpnWEhuZ`gc9o1 at Y1y}!`Y7Idl#WTsGbyIN&V
z^6JkQ#Bs=Yp4>wd`CoU4r4gj~ys2jb!&@iP#gQsfbG*>32UM}guNg!$Z_?s_=vN`x
zsZ3J{%0Ug)fZ66JVB#v<o{H}A&J-oF#ChS$maz<akvpzPy?a`#>Z%xq9ObEh+3s<V
z5033by&NCCAaN&25zq6;t0PFt at 6t|<GUWzkD%uv?Hj`yJ5p4NtZCEDJ)Vi(5z2&gd
zfBeG50dA3<a)6KM<!$QAe}hxLdsFSvVl9HH83%xhU)5bD_mD;b6ZKgUJXi<S!N^4$
zuR>3YL&~TfUY=3gqW4s(O-_%0G6u$hsxOwnmxVoT4ryv8^XP=EvSvjeaSHsXBQ^E{
zza1r~GldwU1sodoqE>5JZne$AtN9o-r+KZ6u%;&-h(=g at uNRD#e3(9P^MNQzcH85w
z at QMsOLXAAI5o;tRZu4}0R9=qB)QJ()j at g_Dqvm#{hcxVbar<eXC_mMI(sUC8(RIX3
z8TP-ojnz$Nl!G@}APwV5#*fO)zFHoi- at R)x;N1RQ2P|K3^jQXyX*YHF0jx!uAZz;g
zJGm%J(HB4r*mlEd$k=|?V+2)0t1R*f{cg^9j)BX}Jfc^DE<|nYnX>TD at _7dR4K8Ia
z%Z9%Aa;Yb)X{*3l;BYv9Ag5orf5kB~ly#@xhuX45f2O&tv$ti|J^;YQi!GfNNK at hj
z%Rto<`dxPf>0i36g)?2Tb0J|~78Na;#ga*mc~DTnI#;4k0|l=+oW?(4w}<G_6e}#R
z4qxGh`+GTZXTN8^9a7(j&>2NV5Qb!vr-z{mk`E8)c2CBAaA_HTdy@!D+s!H$%{E%!
z at iq}EB8;UwIQx`_%<S-TSrv4&^2pvzYPw}2L^F!)?PLM{7t-coQzew#mTkd#sPEN&
zgkLr2gY<oLt5xRv%bO%2o2vMYt|~^+7}xv>V{PcDPlwMh>4ctM1w<`{kL{Fi#81GE
zF<Wt6SJNu*KlW>Xbd9JhakXPJ6XSq`TqJXO-N|o$*?WQOmhl-sKQXUufO2?qmjw0N
z3s*UK40z3~TBxG>_&enTXw1R&8<X%Lj&_F3S`sk(pfJJKtK*Af;oF|+i#35zDM{r%
z-mc^J&}wD)N{~4w9s7f2v#&G#?1~OXW8#v~7%vb(1VXZZAU<y*HK}>KdGYd(G at 7};
zAKHXI2Czx0#zl3jf{`Y5%8=_&^9V%pzsP~ACF0r3two*<&+E&BsoqReY%e14de|p$
zYT9|C(i~T64LpXU#5CpVVL*>LcE<~|HI^@w at t_?cU;%GTq1g<PYvD8Nx;IN23DFlh
zRSQzIbDyt&EPxyPJ#?c$%OY#tqV6UXveY#ow7=j^=(Jffx>b_+zx($FfrTC^k~_S*
zBn&2BNUV#{1Q<+-RsM&tQYaBh0W(fud7DMhA|zB}DoU at 7V}SD0aYdIeO_s|{iH>Tw
z5F7KI3Bcf`!1&IK`~q?9|Ht6DvJ%*}Hdw9!Sp+VBJ4W%y!6*ehfbV9!Lf|i|H3YlA
z19Ux6I(j%W?$1Gwpq=;u!%nyqr65uDvB2%AEYGa*yPfTgwLKtFL5=@GR}Gj>l<O4a
zga6-`=yUitm_X>&cm0|?Y)f$GD$sR at sSft}jZ!7FNDhkH*VHUc0Kwyr!FdQIA#sy!
z$2DYs&zg9}t-=TSzW-_Ge%kXOpuGK8jm$udM=F6Zud)72glZlGwTeoTfOjKWAM-9N
z+Llzd_s85u)zO87lwf}7shKj04qVNAk!s at XkUSK>;mLRJQAvU2u0M8r{*rCYR4}9b
zo%}V_2^I^w>9>u7**%PNX7tyB%*ythPDI;(OIuu+d)(-KEL^uG?vYbZ<iGk8sS#1>
zhzQ;=`8+_yhDJ#z5$xYVtc?cX+3jDB|A%IE4z$dS9Vu+y*n&qj1eI;`I^IO=(jx45
zvvy^}0+aCS#}>5?S4Adv56VzoZ6!5-K<d|mw7On1xKJ<?y#zUBRrqOBh=Ank+GzWK
zYV>p at ec<i)(Vna=?4OQj4Q)OBOcB%?Dd49?Gw^06+wn3mPWqSpoRJ<S>B<_w9Ut4~
zLTy4x%gRF~m#C?TvWkfA-3IUQ73ru|DS_m;e4<$jTdkUFG9=ga{`xSRLDQq4EAL&c
z27tqaT%j9PZP#}Wv_8fpDD-|a1x9Xvd}N;=W2UOep=h`aP}B!EJeE|JrwOafvHHQp
z)HDUg>5BF}Nnvjzr*FT#dQ*ir<EkS}e~!9_4gGd8*`|i|061Al=Y9Wn***9cAoY!4
zOWr*l&o*c6V9lJLlf)}H6_3b7r`zHb)9?|%sbWx-W<Us5M^O|`W8=YaTIL0R?S?tz
z=3oXU$2>7euFA?nohotUTPq%%ABf>)%=~Y8T_ux%O?)=(S$%8G>-{3$hbDe%Mc;ui
ziF!gV?R+;m|1)g(kJ><It=wNr#5Lxmmtb)QxJV9EDXF*g0oBY1U6+J{AT3r1jrB|E
z*Q6ZZO>V$g9di(0+`te*kDU&GouVMb8n=TEfauj;gk&1Z5t!t(%weAEr6v4h-z_(d
zfQLN*rvteHO#EZ)8Cx>Ja216NtMfB6R<;-E(fniON}7W*kVF=^=7-%)d}qsuzBw90
z{a!?(0`_P(Jb<XHNQ7;L3gQ`7@#k%OMo&bAeAif-Tkb%?ZK(EdXQjP=-QAu#CMYv+
z*Q+$F>?B4DU at s4JplL>zmGhK^Th*!_mM{+q4y!V=p6Dto34i(8PdG#)rUQ_P%DJgv
z%SU1Iy}_O3y#7$y<I(zW<rhJ|q78$$7kUeHMpMj2lN$O9)eo$d+E1NCM;}&6^6<Yr
zfilIOgj`pqe`oU7Fe*BKY0@&WW%5gn`wyC#?buYGal_;P(G=)iwD;X at Otzp9<F8>~
z!F)vtBEE#RP_X4BHgQ2%-9EGHIu{u<ndthXtx>64B#>|#YHP*g)G)+kK&qwlF*xAP
z5KqY6&8$x{0g^x;O}OH#X4Dr1JotD5q92@*iA3V_TaPc-En32VpylgvPWC}z6l&i^
zxH1<ne-eIX5mOeT(gjie%`+)NFyU`(sx;(5<i*{WWF2o~DI=H)*XM(}-M8icttYBF
zJxv6Sl65FL`K{>!#_X0!lyjrmJX1bnH at 5y;YV#Wkh#gh<SIQF2P6~O;Cq&ue(xe#a
zc>Ymd0CA$IcUIGXwL*3J%~a}h7tTq4*5p at AcjK@{0p^IgzX|e-cEXg7{<3+P3sn)v
z<(@{ThL!@qd1tb)>3Uweoi}*{#my(luV)Bqait9jtB6J>y+3dtCy__vfZ8*T|8HQ6
z-#3~%DyRD?dmk%wERgne?{;y at hh-oqgo%h+<s2O0hpN4QYF4sh5I-bEAAy1%cJaew
zU5$d5B at O#XzmGfZ9C&e;()JqG4fThQ*J9DHm{LcNc%q1yhLt_S>>%MKlK|geT+dCx
zzG7g(){4DWr4ZA{{DL at gP!y=T1DT7#ZtL(+)<H&*i(Pc>H$?@2H&|vUg9yu0u~$qv
zB7TGKO)YVMc5c<&9LLbya?IpI&tQ#D)`l9tmqbfmnZkUCrB*|7p0x!5H1O4o98UWX
zk}zi?PzIcm9H+xlwf1m!!j5++1L*^-;NYbtr+)?{3E>w9={Fwb(fIk5nj&|Y at Ioa5
z$E;am{R)5k5`3TD69rE86 at W-?tKMbgXFHXb=cW{Y*D34|DHY!VphHwl at 9dNFV3Td4
ze;A3k{7PQzR+A<(^?kMM+6>0qqw+#A_XPYWrOYmm$Xn8Qj8I?HC|C#%OWK-02-%lb
zqV at U!?f>Y{Bs6YXk at 9QydmqZyxrg9>3j|8AoT_7n|M@}LczkZKPMg;1;9sn$7zzr~
zh3-p#(0`Ggc7CM14$%G#(`*IGDj=G=*%8Te9gVKPaXXS$h1qnamsnqpu0W at OSWhdM
z6<yF1JnrG<k)9Jcl*$uZ6nh!{$gUq<i~UD3X5WFScsEIXr at Q8fcCbBC+^3K<S+%em
z#EALOK!?OlH-ZPJPh>mcCMy=xu%H^CxA)$EpVD($O&~*Gs?!^AQFmP>S`N5vlFIZF
zixd`gEiurQ4hcrrLnLYVS&bSMH%i?@HOA=GNk_o^scRB7!fzV1$X(V2<)L54%$e|#
zPi?gBC4?<Sz`G3U1&DeHg;&eX09DXam*coWN&4+Tb5l`_2Jm+)sEjdcvp>$(@2K#9
zbfZ`-yWvqMh(^GxW+$Wb1;?ELxwP=O=2qOC!nNdJ)0w`{WO6Gr+}Y|8$q(0ifN*rz
z1;KzeOM!<m_Gua%s%4kd3VZ0>;9lX%Uog)zDAGXy-5-jqG7O*!FL=biV?B4?C&k&_
zt$r?Ycpaw*q%5wCsmZ+!?HkknfhLWAsxR)NR9~_j`?XYHbYvw^Cu=_Ru6uBiNxLdk
zWdGNqo9sgRn1skn90=jM=9dq^`SuPqqugAdAZN5#W2P91QoC<wO<eiqiw|;%O2uGa
zozUyHoZG-0%&g<K-`<Cv#nB~c_-p=Dq^IR0{$FGgvhsP6D0#a!3k!_-nl;XUM*lsA
zKs0VVQIGVx=!gqgU_svHaUi%XCARF)LrO4#<|K?>O9njN6vF>c&Ml`tDCyKVxeL>Z
z1XGDQMdkRJ)2F8VpmY{_r9`UQB&pniU;;6c*X;|!qkku$CdKdwyM`Wg(|kGQ;dbI~
zJfS#u>wiKqTev43paj2lQ6zMKJjXY4@>qJoR`Pl<)qTam#!RiJ<i^f}@Mg7DcS5gu
zJiN^XXqbsDIKt!G%!3H}2m%FuP;>B$m2n)g2}O$!*NJ;&_r&^B;fQ}{5Wt7ybh$Q6
z+}2*lB*~n#_P^vj^Y`u!{l$q<E4~VhegRNM8+M<w1^GW67`${{+g8+ng%7XPiX1Cl
z6FdN6<UK%xN9(d^ZC@{~2)sKlZo6X-*(*o~bB{CaXR2*SKsHR-V@#)=fv at Ha5eM1H
zbl(u9&(NA3HtGx+45#`FL+C{kK=rTq4IbI0<8U=HOCx<t?&jXFK8%JZuy#V3OG{$y
zl6prHeBD-APgK-;CodI$4~~$;M-?+*Bh?A204|%(s&x5>TFp7zx at r4Z^ZHg%qFd%G
znOCwuh4=5IN0kq`&_iBFNtjoer=}s^9wD85$hV7voLu~*mBqIS?<sebE~B+1Z;@|M
zEI484mq1tADr}{VE&|D{mg95)3eEgt at 6QK{Ae1MU1U9YW$;<YCn;hx?L7S(upa34-
zJG)X#z`wrA?S?H+tbB>ATFE_UVVMRgbx}CutXF}vc1>JE{}QIKspq%0gPO8Tl1Ira
z(TB6=S^WB5Z5iuW*%lk>>#~P%7XU9fi*#xz7BW(UZhLq<om49w66SY_;_y2Sxa7A3
z3B`3==4 at 1*zYht2h-X*sPzF{#tawB#rJ~LVlAtkv$}sI7PhnqA+Ol2hyEJoOEnzzx
zsG&u*rTD^THZrIS+q5?R!1H=I{VS57ARA>!Ap3aFiMSDmRt at 1mlb5^^%!g93?WhUB
zsnFl8$4pt%^@+q*Km1_rk(J_dLQK(%69IaCuOMqdO6{0`s1<^0zF(|i-=UrhgMqBE
z+x4lca>-h#$myzLPBSn51JHzmENCb%%hmo(|6F(uBokz<kTn_HXpe<NMX>0q3Y at Jo
zOG6^@vqo45ek0Gd<1y)j+J-}i>X7SJBuNgly_s(mUkr at M@=<eh&5N!MbYWWtYi at h<
zWM0beL>|6>%SJ9t at vo`)Z0ygp3}K6xHY8HkTj2*OFq4Z$7LCC!j>HK?a#@}q<_j*X
z0Eze5AuNvEH}IS~0|tZ#g}DOM7?X~h(Gc|4actjH`Ji=gjmW!CONE--AVowV^5%kN
z4)IhZWL`NcXADnl7yJvXPiwL!?gwo;!w~<y?<uo?%q8UPw7o^+VgU1 at Oko)K)Wyh-
zi&CtH`<kUCmw1>ELyxh&;- at gJM-n6sq8eX<_SS;rNd4`&#(36o)5+JFogX^AV+uih
zjxOqyV{s$X+a_#oY_rds2_w{p4$Hxfh2qd1_z*s?Ms^(Bh{?CmtHoePg&NNz<=axz
zS}tFIovY;1fbbM$q{=Y*Y~uGUc(MVj4+nQ~{tc(Ybj8xg(h+7?Ks2k1PqZKMQ@~!T
zLig=sY^}l}nRbL2pwZ44(DTll7C1TA&4E**e)`hc&c6<A0)E_BQbe^%w1UIo&~LD&
zfsO(~Wp0j0S)VE{21RwQq$4r!j8{6==^^)j=)_F~n3)Y^#(&Xm2VI(a{i{*^D_qpC
z^3>~`pf*~0l;|<im80;NIiL&5KE51;94$wMU!+T+0FVH_RB=bQJW`t#;-Up4Sds@)
zJlIwK#4|y4(UorCs)RKu*&4Q`<H<K=gzS*$(o8PaLuJSw{ZGJYwH41RAGT$@(}ClE
ziYDvI+s3_}`U=U%#K6JOqf3_h9~*6qSL?mARS>hx3TN0&qKt+KSq&x~V9W#R0Xm$0
z(~~9=Q at ajR!@0gX84My6NRKwwrr`!LX4xH!VMQ?4HsFS0V|4$ni{kmWL{kPk at m%WZ
zAAN3?P&xnC<SlHQPR3tL5;oX})0*^uqCdFB9Xt;!u|b>0R+aa-Ag at l&l}JXM7l%U7
zK2jgIy+=YPs{ocVD~rz_sJnSA21glgv&R?K3(c(#F<>6SzORm|9ML^gTx2-~!-I2_
zf1w;58sdA}CbB|ES+(RRDymlC=h<xc1L?sh*v=&Kb}Cw8G({TT#_ZXbI=MxEzRO^4
zaS7gi<mW;TYZ3lC)MZg(&VDe;+j#ghsYn*6n(@Y;i(ri|`dkK&<l?bHFHQJH3S--V
zaN?iNYA~P$-yq|-=~<%b#)4sQ;*N9EJ)O^Zw|-=m+{J3d%mFz$-hGznp6)>`f57*t
z>73jlOg(mEb?LN@#6M&GNo(JKyQh4XUj9o&Ye#gvs^e2V03Lc5C~hTA)lA>Nt*$LM
zR!WCSI%+#wbYfvFuKb}Wm!bc at YXct!6z-0s51G%|_c0Uf-S at SDpD;IU8)9Z_|GCVx
zd~gCAKCeST#3C&l`5)c38WpzK1Gqy=in}YhYO0V1n0Cj9;5F!t7~@}mskaRzhq0q<
zSaboPXHt0iW`>FvEKT0(A`~MF()+)!?`y3U((=g{K8iB=R4YFvIPHFP76N9@>!moh
z2OCv&qPHdMv`y4ikP<NbI3!t^g=7I2KKtCb8bXq2NPs=kPG_s3=HT+v(dR%N7e}oO
z1wK5QR)Q=NU2TJt)+zdbk6t%o;C3zLIHro1MZQ{A?pPCkLoaWia{m7aF7!;2&v>6Y
zqU#`$LP>-j=DhJooXgw-2h*sEa89D&e*S1Yd=z~|;gF>19pRq9F1hRc+87XlwE~zY
zl-MZY4>f5bUf?TrU25R^rDq48sU)K5rph87<*-x at 7PW{^vyZ5M#z2klnB_Rrt!y>j
z^TyBlwfdY1#D<%>$0R|$29;nVnwVPocULN|fiAStZ|_6z_Mn=Rh&G5-+^A?$CL at LC
zaw3}IOV|(zmnc2f29;QB&~(@<lnQzPU5bi^t%Vf#%xm3)`2J|;@L2tP5{64!XP%^G
z_X8T-JqC0h{iwBniASd~RSSNnC~<{4F6e0%1C#A#a%@B2xu}S8`*BE6k<Zp0tV~Mr
zj-CqX^uz8&8 at cT1ZuVFk*YN-W%SCBjH|Zw{z-`(4l9!Uqs$S|H%m0vypN7B<8^a=j
zy(Nu)*EgOr?$Gw~C}JPcqVXS!!Oj9syJwLhSry#UQD4V at i1t~vf1wq>yxxV(@4T2-
z`0uH6;B*@8SYYt#s^QfLsrD5PNW{|83NsdEgy;4DutFy&n#%%Qc{bi8fprY|{T|RJ
zuMULcj*(+Tu#i3Oi8LZ{m@>P-%H{I|j60<C(v9P3dFT4(Rc|9=r{rVfTNPPb%|jm`
zXuTLRk6QwN?jV6mD<8A&8|scymV)0#_&)4%t(ZbR`H=??4)*B+zznEqKj0&^_1Ymo
zU~0p<3-&nKS4+MTZ<_%2^>b*NQ$3rY$D0OSCw(-Il at VFI9SDcaHQZ_;8UTLe%(b{+
zC{K3IUU=1$uUWdp^b8(xo%{pdm!$>}D%!5T*4dAL- at d_!F@}H_mOqbw;^dfoOkfY}
zj<Wo9&9mn$dLwk>T4;LxwH!3I?{D^r{wbjz$m+pf#zy`_U4EENh>(kL#z6jEgp}zo
ziM1R-+0=Q#b}N)<DhM25?uZ^tuD`ZNvCu_uLI(gwm-@;SOti*k!s26{B`YQs*x+`T
z)u(HJVyMM`r|JAv)*@#RCM1ywbB;m%jn%V4|0|#ddpE7Gn;BqUsRl at Z^s^mK7?>!y
zL)MjW4%t*0V?P{tHl#wmyn|M=29e`uo0a^gp#t;(u>@I{Byn^~v!a*!8 at t&9dX}AH
zo`VQS6j68ROdoWS{NpX6h2v*!DR(%=`_R#U-d6;$C?@aGBTUuP3-_%3v*S!l979J8
zZ^O8rBwEaA=tzJj>IxD27~u<qjT4NP6WK_x3z=@wTE51kFbn{F2eP^%im}aCYw2nX
zZM=mgZ&0>qUE6Pw8{=OUAtQ4+f&v#j at o)U^$8HVsnE6xKE6nHdQtxNoMoyGq6VlXw
zYp&T!(6`TZHOVpxcr=LaY)~!JDj>A^6Jc#E1Bl{5a%B;2H$!P!kIxdWO8rV_!BRI{
zCAE?%Bxke3aCvyz>CX|IIswbed1bm9?hp1Tjt3D2>*8e6$S-^zneYO4m~d`YS#Q$V
zEDiQf!2yp9)v;!;L^?&XUnrYlk!xswWRg9q87rJ>kn8$#5%oA at BtgO@H5=vQ9`B2Y
z8aNCMVVOhbC%IW7#ddaJz3taDQ|G)fkSOVt!d<mA!BIr^Rrc_j>V=3RDZMAmZ5J~H
zbi2Z;kXTdO2oA^rYnP*49k;9{m+b(TnDlA9iR<R-AQ~06?C(Ey0^cONTk{cr&gfX)
zQJTPSs`&|yxpLq#!y?$Jp|K at 6)#J2BTZc;_qZxXC5G`<1$C{JFie(6&KYBADw1^%9
z4zmUUdNkK1T<&-10ku?K%#B>6j!ek;A{YXfwLIai3Z9juMG1H3g5k)&Y~Xfg0?{EC
zsU<C1ij+bAUiMoW72urkt$tj8Y at QFGM7%-y2!4}h#MmmXpzz|rhe3V{CwWgIljcde
zo1xh`YeU^XkRc39sp_k|BPZAn%4u_IYQ_q|!tlps0u(oTvIx@=40LP=Tg&Xxq?}>9
zlifj$_1&9N%@iTS9=*$Vep6&ka($P&*(Fc~&?V81H=iNMcw)KYRv&7AzvV%upid<v
z{_s}&Oj(p6;euKM`oUBLAtaeVl;(45X)p0`X3<V~chdz?x-<Z|_(IZ}DxxBT;O8>F
zJmN-?_8~9zs^Kz-=j`L%YpU#oyNaMO@@p3LI_M+zfVez6Iml*ZvZ`S$$An|%^U!U%
zX~*+*H_5%~u$#H?uiq_yj4Ms+xI~wM#<HP9`st!$9`)F1WWI`5+Mo`w_EGKMi$)CA
zNFVE6RvkS?t(Xs%kp!__S`x_XHb=6~C&kH&6?+izK<f|>a2dCKGEMG-XYIfZe4r<S
z$zW|jDLfNNGW4dBe{ju?q at p3Fx%lU)$H5sB%zWlvO|2TP(`&AO0G?13Tu=YesY;^p
zj)|vzO{=?baG*mJbMGKCRRp$8fWbF*byxVFzSK*~LGp4Yo!Uja{GHrl^59TWW9OXn
z8^Kl-l4cW~z$O8Q)5)B4<W7gudgB}lgeLfjc<I!GmRe!~n|lL5v at _T5;^^~p=+zF7
zy<&-5-ZTqmT~W?|#llvxh<9nY>6*UvFr!%GgGMsditrfVct`dnZ{i|N1^zd0+-T)v
zEBS>jXuHx}+M%V%C~$&QZFa5J-xQ;$OiFIk7j=qYZHBbWCjSS~Ei at -HMShtLv|f7|
zok@~CQ>HeT(QNWbBpyyuq4QwmzqC9mWQ8kpS9jMcwU=Fglau2RQAgkR_zuD&4(`9E
z99n}dXOmX5GAEOJ$tHctnRbzH38H^W$l|%R)?Bd$0U-qqX+0)Zj3*lD5WXB!k3uV<
zgxb-9`pqX_TI&%rNlV__JtB55=*#Q)l!hng-@`E{sm5FeyQG6%@%d%ZE*l|RGtQ)Z
zb(JTY!>1a5vcJtY0{y1X4ALz`2*oEii*V!(XW!nM#hXK1^1)n^A3FKK1SEVOwLVS?
zF}c%E7H2-zm<e+=%XI^n7`_JYctvSd;VsZQf8Du-Ze^3t!_&Uj9T4Qzl{G>B%BCLI
zu%y-d17;-q-Plf=OUj$^-=vzj8C^4++?*?o^M%`grN+;R_9UU5w)5t#h$5RtkT5n1
zYglnS6&>H-4XRju4cD1)z+>aQlLwz9AH?TiF=&tz3zLraM0+cJulyGpImjIS*Qa84
zn>J0I)x4%5a&p;<ic27aNigkwZJ@&X$~#N&K4E~k&TrN$S)@d_w$-`gpr#rX^hWf#
zvA61fGP0_Z<HR8ZJnubWjX?S_`!@~E-0u=qtzDE2nA#yaCV$Su(T({y&&84@!NEmt
zmkL?gwhVwT+18(wPV!KF-$~f!#UQv`o*&aeSo~*85G6OQpcvpT_vSEW at ZH7g#C6I8
zm;9IDqA45Z at XgIFK1E!8ji=yXhg0<U8|Myxlv0}aoEPE4iId^F$zN!iX?bZ(AvVTU
z#`VG0$|}<+$sBf=Pb7&gBfQ}-ZV4E?FJ2A~?csUEL-;K*JH3t at PERtS(KLuqqDrDo
z8sTqs at ewD%Ylz#jLQ{P^lPv};ce>=ELu%<NUP$ZdD#}P%nm45z5GoyUs-J)>Wpn9&
z)(%98da~??wR#sloN&mI1H{^G?Z>4Bp6bMBj_9qT?*VWzWqR_TNv17Pkk08U!^0mL
zIvl5XiznfcobO4`_L0yJTiy=*B0+lX=QN6ASUXqwynT5wsenyW49_`N%sfpoFfqw#
z>F<Br-BQYa!m0YNqu9bEu4pmCGY`&x+3>vUb6I+07}#ffWc-xn8Zerw<()bwd%~#|
z4>N?`w at FHrrpJl?cfUURawYEfB1bUyxX{72J4jsCHX8yxtT#OKuso}vps|YGI=v+N
z1ZE_kR-$~og}(h-G-*VEwr0yS{Euo}kzJeU!7c^8ThglR^+ItQYg(Vm7^u;I5=Wz1
zl81_MXPi9QjfI(g=xnGv4}WIWdVgW$f|3}=1<NBO=%l`}J8`ILEwcKfd>Y{fF6tSN
z-C0-jKj-r#C2E4-)gp}2b5UNp?(ESYsFV`@20HHq;hm#nLC*aZP|{n08$5 at q;p345
z)8!q~- at 8HL)h>(1$I{0{wS&Wd>Y%SiO=MA1Co5qyhlcroZKuYor6r1pc4br5;tX*+
zIZR<F!&~8j)y!>hTp*5CaWwrI#?a0QgLfFwRpe=UzG)4sy@`Q8Ps*JvxDS6Aj{m0k
zL at gH!kq@;8>k!@h{}<7FuEA`|Jm^BqA;3hCK*I?$lXQFpPLUuFYZ&5x|B%WvP<uQs
z;=4 at rZ0z7uS80QIqa)@Dmt9lVP4|M)FHr<V+t0K;l$g%&7ixf_$&*u*zmd1&Z2AK)
z)0W|&7Mdv^*ri~2@)*KUCaU`7#a;;_N#ipZbi$1^Q-RbXSbW1zvjQiGq6L?(HmPnY
z$?9jo0+5U6EI+cn?QrOS9F!U*#;Ry*FMpwJA;MK-V`_H%{3suyq-`k<W9;J6@;59c
zJKP9a9}YAo1F0722Atx~k~8RDZW&VH^OrLn3hhCZv~ylAr$`|Eeo at G*tl}?zb3nrl
zlSb?92~oOzMjFp@$YnPfNA1^STX7k&Y5dNULa)7(+aQ)wZ<xe?#K8!Nx2ag?o$`6T
zcrPx;HR&YWArC_23A*<ECMS5FGd5}$5=y@`lwC(BycrohCNSf)gmAeNTYV?j;o+ZR
zCrUXCJEl>A%tHVHK>okSd at bRJ3$J94iHOfq=tO*V*{KAevz2$Ud}+Sb7s|Jz<vzSR
z(SXFyB1Y8yW9{SUaOV^}e}-)HNWPk?`6%vJxTN%Zd&QALs+Rf39WYn0cq04b`JPf<
zY~+H8ydT&T!4ex0mx|ha8~B>>v(>AGltq??sYu<hJ{)Al-gU+2J?SqNilON=96*>K
zyaB0(PN4rXG$d~iH8|!|;cAuGOR#K1OyF;iAO9(wn0WXnG#%KXe at 6ALWYBBFwDY(q
zdYw`neF)brp3s2zuQ?CYF~bYR1~9QMJz=|v9d)-|{8wcU`qPYI9&r)2Ivoa- at sSl-
zw0~oaz|Gj46n9!U)Jk?UJTon=Yz<&`n<$m|c^eW at 8Jyh*83i*kg@`^ORw8rd6p5v~
zP0a)L1DMR at U?k>he-<t%Xq|XGs{+PKJkpCp|H_wDNZ`tnB4GLa&4?aRv3*Ir%&*PI
znx$a6ly&g1g0X+6RA#X6a!a$LJw!+IInDp`r8=W6+ya5Se9N{m5a?r!OS?s}dWFsi
zu*@e%#NOfynrcF?{4)<a9<g+pwW_y87jc~eEbgdD&Q+F%e=$<XO+Yr_c?9It^l$4%
zf9?8m at A&ZObmvg2Oama+FS2B>uK8NZS`TxuS^rMeaiBL9z)?)EY=Kxs`OFsH=bM>b
z8Z9LVv8=r-Bbf5)oho84%Nu_~8T!3+su1 at z>jp7gbhhn=P2Z6Y2h6|{5L^y&mUsV(
z?+VjDpKQ#Fe at pd+WWJt5-RrceFEL$kOcPZTnG<TIdKKb?OHlm-h_BZ at Z%^#@@SOt{
zAbIT>gbX?knbDj$OnDrU1Yi4luww%t($STKSpaUIknIa;4u`q5X}BH_V*sCPc50V(
zTx1F`nV7+w_Io$&Mz083G?#3o`t}cQgbXMR0p=wSf6BX|Q;EYOF>A8GNexMl(F-C%
zVs`LtxMBE~)<a`;g}Q1DR`!X<b>gy)VYClpsJAizV7)_C at QIPso3uw#U)AcnIA at P(
z`dz*5`hU(pdv3n5)K@$gyB5tCQoSxEWL0~tpPP!#e%e6ys`)%<1o at J%**pSk+p4r<
zkxE4#e}t+(jtUWR-apBb5bQ~z6Yv+(?3o<xV}1q at 5sh<+AJ4C0VXk*Tuud0SB;Y|H
zT9iu>8n-+91UxgCFH<d_p$2?Iwa0+8;nz`S<^A)#`|8*iJsucld?fY>0c&aQTUoGv
zA&_%YTeOw+#@FJV7<s56Nup}V*zF at KdyErJe^#_s2mtNI(44Q|=0jILj(mhsC_!qt
z(}u8XtEV!;$^<F%c}X=hgdxd`vjWD2Fq|Bco&7W>J|jN at rYSbPZlN+jBkLQ`@6B~X
z>4srS;04ifU2m!(1pDqK8aP&BzR?}^O$kmdAbxe at 8d}|=%=RmL(Of~{>I<wzv_v>=
zf9J*OAes1A;ZuHZ2Wx_J;d(F2FQk(on>JxKU?}zj2PoWtU2mTIceB>=R;X8_(e1ul
zQBwD+k3i&fxs+>`cDunfc058m)O421E;INK=K#68=+YIRAmc+WEmtA<vp<&Ajy}eQ
zfdTH%j)w_&8_|HLWF3?B&U7%ldZn#1e>bscNEillv at Qn28tCVOu`}iq0ABwxKV%x4
zRQEum!jPn8Yc>MPL7kYkgA($%W4W~hItM&*uL)dJvjF2e#oVoUC}r5My$zQg(hB9k
zkug{f^-iGTwRnnZ<P^PagLM*LH#!0;(LHB%a3V?ha%N$S&!|imD?Xto2uv4Bf7zre
zZjA9v0V`{FE at hJPX9vmnhPR?1weuCDv}`AD0M|8{L&j*(1(TNqpCu?3&Ig<{I`A(C
zgh{U0{zFY_Gh7b5VZnW||9fw$y-tpuAN`O-D54l^uj%Vc$I_#J7$zYkhTP!8I-)}%
z#^QGBYj!2R#FMwZZqHgOA_aT|e{g8ay at Bmzc(_dUd;cPBqvWvM+zhh!TjqeOv0w)w
z>o^0m!hJKfXWtDO8=HPj at aj}RBIG)8HIWo043g87%9j&QUDwV2>(F6x51Gh^ULKE=
zC48 at +qHb@L at OoJu^4Xo)g^O(?^8JGts^s;2^dNb0o>`NfSSt4Dq~vgte_rso*4h77
zuk!cjv+^ukZBqo1Yg66X*bV7M1_4 at fYD^qb9UTDe)LH!EsF9;>0jZ$1zJhpXiv+(r
zJqK|@5cjAiQ<yO!rd8Ha^8{n}nsr59J)a=Fa`@?2CWAZYp at UtTi9Ry2MM%qIcF!iC
zJfH79XD(+Z7E$2*XFzghe>jEa$TK558s at 1%oXGi&xuUh9e$<dIPj-2_`1iA!!V5~c
z$8kg|6^Kf+)cQxd=LHPdUr?X7#}0;o+Ml+|jnpgaE|Vc(tKybziZ_4JE|&#(<I83*
zFtg*LY_=<C#ItB#W%o-*qDv-DZzdX}GN^FBURuvU8OtJC3?p`*e=Lr(ZR-Z+a`B@?
zeG_V*E!Yb{n7mFms054I6XGaZtAbXDEbp1W;-0(e;^xo6It=Ql-M%9~;_o%}15C{G
z7MRWtAEl7Ttq;Uh%OVlMoaQo4L`tK{k-&Op5P~4AqID{802kNIWESZGUtt|bS;rGk
z at pOOfn#4ufXs8=Ie`B!xuZfl!-tY%+`MnroFpwSJ?yH-*kyYf_MQJ^Wi at mi@a|JIO
z)FxxfR~@=in5@#140S%4=LAHelS-3V16ubIpSJxBzBf79-P4g$SS^T{cS6?~-oOVW
z(pi8B8ENzz2G7n~C+*x}GgH$A&E~@_f7R<v4kX*gB^=U`e+qq!9&S)GAP_bXN2w7j
zsW<lxO$N_o+a84l2v_3`xYru`h|%Tv^3kbmDh6N=PVWQ6V8@(oFXG?naAbkH-PMMp
zyty1QMo_V!1~i2dnvUStLk^0M6lStybnKeQP((&P#DA~S47VoG`cnN9iWdUg1h!!B
zmH9MwpNm4Ff3bE#zfR)4ISnm2+>{)L(g4rAaqUwLZ9t5aQD5JEbOk_`ao%8w$={Wf
za&e*@1O!JC5F`tid}~})wCMTkesQ42`z$Gqa3ETC-t!r-z{3uii$qO2+18~G^K)|A
zbFK?CZd<WTVtZO4d^EFH--RXyX at OlJp^zyQJ{R|7f5TqMsZ_Gq!dR;F1zi5q;@DD{
zPvnK^d}g<qtrgK;U at 8QwZNV`ulsot_2mF*Irs)h);vCS(#fK-Df``qeTa#USlo*~C
zcKDu3U80 at 10q4p~)A>cg=WKCF^_;ieMM8}<7C@|<?LhYg&UxNCrvizIDhTz16`##F
z68K!ee~uu-TDM*u*&n4}12q`kDj&u-qNg>fj6m?ubRX}8jv-Oph%H%~z?kb|L#7LD
zR^m#zYKQF2+O(f3yX-d;_;f&m+}BX3`W{Pbfv_IiO(U*Oaf4OHLdPQPOnOkUe*(lf
z=(K&Y4Rh_VDvRz1RNq%rrdsHptYdGDTerwbe?Btg!$yQUEsy9AC%53g{(o&Zm=IVo
z{R<A>9M4w}0$^iI>#w~q7`oP^URYV5u*FwgSO?lIH?)FcYg&;%?jQLV49z-Ep%GV`
z;g{2h{&uz<0>ERepiTueQp5 at W?7qOf4GEmFXxc at AMlx0gtE5E$Aa02R(T!GBPLb3R
ze;BN>g4Ll}(bATz28xpT!>IWC%D64o47_r)SS&REnpT1I%@+T`;1wEPkZn2X_v-mM
zkoN0>F#NsXv(YpZrJQX5cmh`FklZ}1UR2jjVnq at k>8A(zv93uvGL7}60P&}cf9=10
zqG$_{>EJ4LD!<$r(>24Yiq6_(VR9?We at +o^Oyz_o6qX71haw_{DA#(3u{&IdSv$`0
zJ at gHph*9X5Q3PO>y*&mT_V%_eM^yA+BoPPM!<}iL+QaZff|=dqGs^oFg{rh49=U)V
z=zCLS7aS1<Y^p*<Ff8|JAsbBxaje4%(p3a%u$Bd|grcD&XF42!(5L(Eq*DTkf4)ch
z1DU+ls1wvFcXNUBk-+Fg&SzCyS1d{Pp8OEa5m2-)!;XCAKk%|Iy!h^=1LQ>ItjmL>
z0w>+df-<2a9-WWDRNbL=@V9(lu#N|&yvqWta at SC6K^?N7VGVuRh9Vsi4XLWAwKcUb
zKYyMja`J=!lqgf<@0<%j*QM#<fA)L7EYpDt>1TVRMn@&{beSbUD+>^9YKe|-Ik=gC
zf=BV+R#IXN3b%8ojuOG2@;2m*FmoU01JVrSJr~1IF8_h(a2^mbXQWL;^IYxDEy^7f
zQY-XDjU7}C=3Pwbtd69j1|>TsC>j at BFWU9Anyg~b7$RW-enJ*>0WE&Sf9ayf&B-k)
zQX64j9#0aXU0~`;&{LBiMsnosH~{3CY?3;?cdtylFt<lnQ%USx;u6_)dl-9`%ALEE
zg%ZoE&Z9$`u*ehkRJoK1huuz=;xPz#AFzwUt`pD_<VEzRO at 0H48x3mj!ihCnemY(l
z(AUu(eDT4(pdg?jr|I}uf3<|BOD=KA5Hf6l*(3PIBhg!IeWT_jPk_y1zozoRbb6vL
z1I$;tYMuk3ni*1JZ9pzxagq8pL-e9q$BHJOMU6Q at X@!ylT*xuq2I<?5b&z$iYl|I7
zWBpB-UM8ORnz3bG&$?}Uj+|NNpa7<&?pYS+Mpmjx+fN5GnW^}mf5r|kjdAjs(SR52
zcX#tM2U5bwS^e{hz|CSzCzk#|_Zqgj*Q)3%y{H+0gqx!?-pCEn<O<On2F4AP$?M at U
z*p*KM at 1&y_K`n1H=KNT$2=G%?TF$}L_(@k>h2E`ySm5V{GT|e!I~0wfI%j<c7==!F
zts9F~@E`u~^j(55e*?MZn`G*gh><m#BbCZm1lm26ly~iUkv;f^sWv|@B2KWYr@$=V
z!;zafk1e|kb>Wjon5C;V^E>ya<A%n`dsh$hhcbz^C7D}j5tV?tA%rE$F=P?G at Czj-
zs&;Y!aJ=(Mq<box8*X%3VktF&gue|R=}@-{hE=QyGbAfYe`MZ`x0A=gNkOG6LB_;2
zVNXME;j#N|56ZXNu2^q^uIq98jTio^i02QvV1461SNEKr0B6t!1xAWAdF`*{UK0sO
zIBlN~{d=*2n3}Ns<tkmV2O`Je{5r&c_~d$gn`Xz|RgyEus$2-DJJ)&xs7BiZe933|
zFLC#~S2#idf2jak4%9$3U5k9Y at eUZ`8BJe5pnP++Ksida5liwV|B~?%ZE5T#w$BZ~
zsvMy at Zjb3>WF*{J{jHinu{JoKgB<T0vDnrBjAuKJjOdSPg_{7zkWOis|H|Y8B=>@(
zMajV?qGb9CObrA7j6rE{wz}*2acJ*-hckJzpkem`fAHtd>yg}4oGg!1t|924lj~_6
z&DJX+Fs)J_|AUSYdN%`{hyRK%^B&m3+}=<5a&<YTn1pRA?pC1b%{c|mA|cV4v`~y<
zE-*N>_9-LXWocED$8VyVWr0Dw#}!5M_*67T at pOI^w!<7E(#5ygr4MW#=-mf at T?YfA
zH-IFLe{t(LB_w+A_59FjL4*L}?b%J$cygMPYS~9T`q^ybk|pjSYUH3&?*0C+e$ces
zauCKcB!5?uOU+L{PAN8<M3y>L;h09i6T#sy!zER&E)cnsCCSe(_aA9L=drbut&W?4
zG<Wg#DcSC=qBxcU6VlSl8E*zawDEG|DTWote-uy2!lp%0r at B$Y!y)>SZ>TlZ5MAMB
zid^?FCQ`=N3NPUvY&r)Hgqh796foDCoJUrFc^^hdDV7f)6F)e8Y<}%tO)kO;0K%&z
z&O1`m2F3&WUY3>ZN(Kc42sCl#lo8=;=xpeWdEqCpbKQ;^5H$UrOGJ^QmkkS>G+?)e
zf6X`+Q|18`a}un`J<BrX?jM>?Xxr89k-Pi3+{pCkmVj()JJ<M+?zj-@)9v;r(cF&d
zjmabH(^<TOB84Fmb3f-RMN0I7=lOb*O`OS1g4e1W&#|gi<Oqh?-YLkNoJSYk1!iSf
z=*E|)>5}EOe%|59KsX^4EC~m|KOQWofBEG`Sup{o9ZqN)h`~fT)E6cAAZ=?LGr#j;
z;1T|Q9bA&dSt{Wt>U1olPFbf;wCrCLl+skqt^#m^wE8sjsS($um5N(A at 9h_50j#I2
zOA-mkF|f1a2PPt^TJ>5}q4(bdDMO9r#vy3p>6r{j9Ig1hjWYF94f}_{oZ;nif5%Ee
zOzqYB>s>7d?mWgfD?)1?O$KUMMpF(2Rtj?#kt04QxQ<cL+304$;CA<N?&j2}DwS1M
z==dBf6^q(>H8mHxr{d181Dxn2EQ at 3KJeQsj20@A6j7Y$~sos)fR5mH6vCedUNcURb
z*;}wCB|YUGRA_b0KgKNlob}a0f7BlUYyN22%{K#6p??mCyiWwCh-^_3O90-w_z_+>
zG^HG8QC>~}()H}ReGM at H6g>{uXv5-<$w?LaO8-7;$03EY&=yXcIBq1zXYlN1D<;=I
zUrm^byMCF5KS|0N=qPT at x%o-<sC^7LLDbnf;2>z&YE+AlT~5gv3kmwne;U#EIOu90
zT)O9g)o$e~VLY50PAcl5_mcZy=zQ5qxRVdPBkx;Gbzx}?<@1q{J2MHnh-6W1%tI1T
ze#8#2 at H6><7rg^t=C?UI;l>c#<a^Ll(n`;S89|N3Q3IjDpL5gUI1 at w$qCAVo<s(u*
zxQk~G#uYnRn~aQ?m&5bye<Au6Rd8<j)d=wQ at i8;VImv;E{NY=6Ocsv8AtH&f6WkY0
z(`eGL%covIL6K%X2jBATICu)mGx+MUBA&9wwzya<=~>rEjLYaU29PB)loM)*kidQ*
zq&ZIdz6`3+WVcg$6_tHg>5W8L`4N>NJ4ge8$=&PVTLw{I_t;$ze<0oSbmc)plA{b;
zq#7Y=j+ANC3_IDH{KCEs`>mXPoH&Z_Xarzeh(iA*;=(E(6q3{y-XG6}PfAef;BD=^
zo|S0}p%x1mmAY3`@Fw-+BI^2yJ;$gDwySwq7c&DH^c%f1gU26x66&v9(EKh%)3oJD
zbAfVq+w34|Sf8%(f2|E0SQN`9w~Jl{Etx=#$s3rIzzjyybc}t7X`t1YHq4xpV&vV9
z(fJUT+=-}jN<W|2SjIsgIJ;X=3L2pPKL%^|=1SNo14Wu%!-1@|BQcUO0;pwN5{&ed
z`S*HqS0QbiK_x-zXtu>xLFM*3W(NSt=`ctWu>I&z{zO{3e-?!YN}ejhOTUsOb(yMX
zu9T5oKhI7^tbi6P at hCX%-m;3?in|pcKK0Eydh#(ub)SlwXb+G9J!Kxm3tR6!KwSi3
zr~cn6w{}U5b0a4 at xT;3bA!iO>j7Wm|d(6{$z(F%YK>j26A5RS#z}G}hf at gM<aG&=Z
z2H!Mgxx%v at f5^qT+*m&b73a=v-Y2VWhbLVIjnE3&i8qOMk`g5vvq!<9LI_5KZ{$8o
zIqFGru?pNwAYw63CkYZ3Hbk3f5u48b_M%i)E>x#+-`$(-gGQWq(VY9<nW(&Hm-TXL
zpNBewuvp&FGIPl&VO7_ad~bNSof$37*+Z7ie at JXQe`3C);kHH%6`uM~XURYRm;_Pp
z0q^8~fmNXiS(%}vTH>8T1!U&f!FR|X69Y9Yr!+VOKp*fwgI(__k)!*hv78c^Ifnbr
z at j{fv{7VuFh(mUpKJ&HPN6a79;dZsm#vaV=avl)}X^q!wN<-Br!C4)a5aV6kDWOF*
z(<-WKf2XGTHZHcQ`lN7b+N)L^a;8c>UkYTrbi?<@oumV6mr+zTZ3FAMKVFEY_g`DG
zz_K8prW?vFdg*Z=tWeDgCj3=sC<ebg%Js~IDduE0Q+qRS-~BU=2)=8DsEhz at 0d@8t
zW#HdY^_+NRmKDmptd4RORR+m6P?6as#Xn&;f0dDPWxsTCrdDJHb2dVCp>U?6+dGwv
ztn<Y}RfK|!-oJ@$Nlp4ZcrL5^QN6a+Q3m3_Nn=n<?sh=`Bq6xLPrk$0f7{k{f<mm{
z;2&U!$&y%%R<JSSPfs%9(*0}M+Kh|WS;>DJ`2o@<ah@~nBCkgTJVg at xQdTIm4Q99U
zf2uteLf(T1X at r}iRG7a+T>9{k{bS~D=VC$)ZFMdH5IiMK6lj&l<tn=D0WJ$*bSmrr
zZ5TAOc at 2ZJIp?z9-M7F!Q`nNib;@X{z1ij&n1BfY!P|Ty7Oiue0Vt*?mfiK<(K|2G
zCCidqkQ=1f#UC>{E5RNh$+?aw{!nJCf6P}!`Q1(hA^P8I`aUdX%dfY+)l>EbR`mf9
z=rEIB5p7W7ySG9g!di^Ic*Nb@=MD#cbH8idR0e=A2LFJ^bX0zYCFRl1WdqTVHRXo8
z6 at Y)f=QC`xhcG~DVGwe>x0yTSb8}x&GA4;;lzT-323vY=?K at Y-ZUOcpj!Wpee`s2L
z%KZf&9F`@55 at aK4mPFa?0RMjId01x{sDwUgY!VD-aN1G8fYhZ=O`iAGP7xLdj`Z6K
zbs2CCQWL`M+xPt&Z^DQ|+8~SCh+wuv`ncnAf>MukAfRkx%D36ybdB}I`hyG_QAsrg
z)-n*4+zXL}nl)lPMTa+uMVE~yf8L}M_#i3OC%o`tHRuUs@;(%$=3e*kVE(>=Cc@^f
zy<!7jw`~P4ozY9epH|qmAfz-U_)2e5k$CPn#8Y at +R!NOPF)K!9Z6nakQU<Wqo#|4^
z$=X at R4ka2hMslf=aayLo$CF;@!C4H_htL{v)OKj)D4%KB1o&T>dW(^sf2x;rv*EYG
zaO|xU85h;r1HKs*X6 at u-LUHfNJn8r=juTx|m*mzGT1fc_x^~*9J{yMgj_NynM5>B8
zd}k)6?q;F at c#Giy^%S>3rxjmGHnxD6BA2@)HNqdZ&$en**bfOpsPP4>{2j)fX#3=Q
zN7iP0L;QMsW8#bc<+XfIf52>+_$lWJFQRuG9W7NcEH3Enb;Mu3 at 95I!y;L5e at qmQ*
z0%OZL@>=8;%t=x+W2ZNft>sBt-9*4x&xu$1Bo at W5p34}G2K-9pVZ--Vtbq_cTgM7#
zfm;cLld&M3Z)_hK3FtJ%(Yaoft#3Lk*2{rxB^BI1G;c7rp$3 at Ie^QqU^9`yA2ST$V
zMH{c%_wk|8cq&8pH!sy~((2?cFqY<j{-#cgo>u#d#h!bzA0E8Ax~fzu=je;O0}i-6
zzvpA?nLcU*K3LXcf-_S0)(izqhOmy>;1suDI)j=nm7LXt4RqcIh+3r*QKvy^cMy;7
zP0V)8fU;t{cd7Gcf6}>ZY0;$@vW6t5Eh^{pX{XlFrW91d3yDWUBgG#~pG$S-9~*}Y
zlN_NI{2&wt31SoW%fefr-537HptmJjeGl;MF9WNzNqHxm0glGm+%+!eV=EcI)kK>d
zmL)>V88EJpGf~tMZD7JS46p`^Pl+Q%f|P-I`5@!kZ^0a2e@#O=uoF at +`-sn10p0k2
zsx6#f=%Tu#HJJ>!N7d)+xLf=YIY-~UhO04F;I$Pf(g9ZlBU^A7^lG$O$7iSyubyFC
z8pB5Phd_;);YhoxOU(8 at Nh|#M<?(H%D#mM==A7fj!@|hJv4E#=D&NVzn>qr?&<3PP
z^CacVs+N}*e_EHNkLKXMl#t~c*}|<gx5d=V6 at eZCXc*rlFuHqs{feF$$}d at dF@42b
zt at PuU^ir`mp1t6i8)1w^{JRNU=EH$feIk;n^Sd*zO%OI<iL3V45>7kJ-OxvqD)SkH
zaym#ZT4#JR<hh%0JP^e|zh_$wzmwNGMc3EL`dE3^e-l!LZghQK%oQPzxCR-dV%(Gt
z7kdB!mRG^@UJg2BB8~%Gu~d3;n}wt}=ZY?pA at 4vo#u03>&~oyfe1^F<cpO>)$VMP(
z8UYOrJ|e6h0tg9c-wO)F*IJ;&%>z_eaFa$o9~rZ3&I12`{-PghaQ)Sreof$y%MmJZ
zSpzlAe_}NjU~>1Nv)qx!GTIBsTn3fzI{pFk at 7=CA)k8vLz6ST at -?yN3PP<I+jhwJO
zr(eO9?q}RP`dTlH{)mLWfAOvCYHz!bZ(%}^hyAf9T{9P at RiX-IcUgAAP#s6Y)u}2m
z48AnNkKJ~9d||JVK%b(bvX34{<_A$Tp|Hh(e=}p_R7H1L12d10OVZnzzz|my=UWot
zh(3y2>Cs=NI8!P~qOYNIz178Ma(ZG14Nh)>!Y5T6Ro=&s-}$gBRBv;bZWF$wuY0J<
zk3&~Sn>K<aITd)8Lc;vVp{dzQLW=lw2CT|0TjtZ>kz$C}f<vF5?BB*eL@*7%o!Th$
zf8W1!8vt at xm+z*SDVqg4my|k$+=L1?_3dhfqgz-RbaCH&^@5?Gi<?G+a9E*X9i$Zb
zry<T(H_Q?>$3%$|p^8W?iXjN*5L$<vv&8!@;HePSr3iFCws^ugnSBs6?R~#O*n~sR
zT19{aq=^XH3o8I8GL$Mhq8HLpaY1V;e^g!FyNpebF%=j2V|rHPd?pm6NYVxnv!@>E
za4au6zzkkgETqVn>v%R!6dG}RkEJkgoa*MB);3o4icvY&vYq)z-M#lI*{OR<L?y7`
zV_<h6*4b6lnCnL{mv~hJM=g5QTJEWENNtqfOb{hndzMTTw8e0P!{4JkxtB at Je^6pH
zHL;arjtb7d)Ep9>T&lh-9=dGfbv9&(#>Vb6kSN5%iwiEWOh)(TuU8Mi){(j`67B=y
z8M;KC5;fE0-7<Tv?@ysoetL$mhAu|P76=Li-I5uiAxe?<LFCo at R5&6L<QCCD7TAG!
zkV?QLogi;(D at wJMtva_I9fo}Je@@NLd(%p!k6ja{*grf1e;9ob=RviAVjHq{DO<Qe
zk9_yoSBCfp%1qqmt^Hhv3a4_qSL`^mL$wm5)PZ4I^nVLp8;BL0rHf?&;AG8X=P2M2
z8Ny7qV4t}p`RWB)ZcO at V$Z_RJzBQf|7o)Ffr=B%=Z>UB_BsMW|?gQJHf1Rknx=+w_
zS53~QQK5yNot#~OYMag;U`DBgq^-OKT|J!JLxYg at R8DqbR23+lN<Pm06)@3hyXot(
zS={&Df@?50Z$rUH8TXi>+Fe&a#~Ra*K=dKVr-4z7k=27ni_LKLZHbW;z at iwgophXw
zQ$eKC0&!dQ!NQP^jUq-~e_*K@%hI2$7szP#_&H2(1xEvRO=E8R5Mitf&NlyPNt7n@
z3{<Y6tv5uqnX5LD0W+m1DMHEb@)iC*8So{aOt=*Il;S$E39!M8ieQV{KZWXzB at mr)
zn#3Hp4WO+?2lw_hrw>`$tKQXol+sMG)g}4NiNATwD)<mIcXrn at f2QSsWsLMJHNm56
zlyr?X9Y#Q?&I_SNx|U<BT8~K?ngvBR4Db=W<b>(HqRMl9F0W6pdJ4f<&cUh`yM at z`
z0DA*uijt1}OKmY9?X!9KpG_X`LI0e2;~IK+Nm?Ad+-qM=cQ$r6&D0TfaJ#HsYA<hs
zWEDqwdb7ube<<~re-jhQ%|v6)Pz`mFj}{$qw4szbS2*+JS1_NRj_nJDy8DFSjPa(K
zAp&j#!y_1*0{*Ot5(IW`MU`I|#2#0sk1{Y}gh!`?!JVzQ`E3|CZuINHT+jrgfNezW
zz(6mjJlCWIwr5O`9wzg^q?4o1Xzx2hnbS&|G%mnAawlGQf9yijvw}d;F&IFb!W8cD
zuAlGw8zLDhvi;0koRdEk2Hl!NtrP*B$WjOco(HPz*e#&(;}5yCnl&5gx%|z9X^n+Q
z)FgZ7M^LM_#pvV_uCV7UK3Zfd_*|V=!u-To&aQgr?FNj3;@&Em-BC?-E_!pZ>yM2P
zOY&+<E$wG!f3WOpL at q@b3 at riS_Z27f=@(dICY&DQ>n+Kly>ZZYD4>GON`GCgEV0FU
zLZKtIWG0r+2Ghv6jV-BJaX7GF^pGj)M%%*iu>^nX#pe_jwDtK<WV{FnS>M(qttgnD
zw at l9lD6=zoKERPlNJElh3({71r2)_&z~sS3x44>4e+tu+YeHEpIB*~lxxAexGoZhu
zd!UK}kOtwy!wrvTlo;5gt-xA{P?bfF<+}Y7ZTmK-dYNXKHhOF86tPEhHuSv}N{2Wa
zY+&Uk9G0{WQfAhYPzE+^<B7mTlA-JldAPbamQiv{k>=!1GxGJf at e!S`_Y+*#bDbRo
zWmK9<f4N{iT<oh|HD>NACIf1x?4o}WdCOod%tMoMp<2Vm{u$Uo0A^UKGGnY(!v{Q{
z&L1#3)=MFi=alj{4cdhs7Z<D;>Vc2Bv!K9<<*wAWB=tXQQPM^<vRU5zDO<`^3Qu#C
z at dD8UNfU$J0ihNIH$?RkVjZM{&r)}*?F^U+e~_j=Fb{|+1Tq{=jiB1;cu-P2FRhUF
z?&O{_T!w|1E$6l#3r3^6P;|AWdQeB{A9zwpofj{<bF^MArvXObe3aMvOL)j6+sQ(I
zeHSP-Az$pU2vVFi&g$|k`fPc{>Tx$u at QS9vQxD1RJQ*b~`*8d)#u{9Pq4}C)H;#4K
zf0P<fuL~WD0bS_170S`eJ;fiI{QgGDF+tnh;{y$>$4<%yC*$dJ6wjs_EMj1W96O5T
z$%aUX$O;zPn_g^a0+e+1Sb&9qI?ADdE_X!Cnk>+zlBnC~>6wwtk$}g;hDNQL6@@?^
zY3$`G4ugtvB8tWCEcD|th;{3{RUZVBf2#4b252T*uIexUp!^l0eJ_xK&c!DV=6wSY
z^_Fgz2K<e7gsSGl@$uM5Z~$M`<1K?wT15FuugVH{ICLZ|w7kVAF at yAbR$<qf<YuPW
zFS(UNOCFU~zrB3^dC(hwFc67wZR_5%WW6U_5%WcC$AKt{RubBNTgUt^;L4yze|;W$
z6-j_-bA5deWpb=z85wXA>PV^(Ko2?7)=@cI0_oV;27x|RUdEd|&+vw4LU9s-L%3Vo
z4aR5{MTQ=LtJ0Bhk>R1x-l6n*8+1Lux=g-t2xfD{0e*vu+IuSoHlMxn at 8L%yhf?^I
z1LKg8H=b7RJSs~y4A#2<!#@Q=e}QIc7G5j2=Hh=r{?=D7!24+o`+BZ3Ec=XlZ$jOg
z%!J6~i1#I)p at 42I8xlu<Rp-0{)NN3i8RUP6FgGO0Kx-dy)b$aUdgd`<kH3h$aeDhi
zuwSJ$k8)E1mbOzVd!3VUj%KnL%It=uI_*v)RD#)`QE)T+i$h|Mxy70#e?v=qdPRf=
z75?#}8-~l=NQ%Y=*j71W<L7BC#+8b2d4}l7_NF(YY<{vkN`dp_ywv*QA?0DW9QwKT
zidv-kiHjhyaF2-#RlOi5Sj`DGX9%SaTv!{N=mD#GRtzMAOW?^1nKr9&u*=~+&ntEy
z7l)hbm#bZ8%e=EETQybVe<+;LP)#)-=(mAB#M3*-59{1;VtYmuB|mmSMK+wwjt5L=
z(_rOi)au{?{fI8_tB!ArTYpw at 78Qs1ek5B4C?0GQy|`_VA#<puiPEe7SaA>tWAKl9
z?(!`Cq_fHoOZeE*C8PC+EUd+hMP9Rw7r64Sj;XMMX#B?L|K`eKe|W?2$6e>>ehEdl
ztGttYGk32sAVnkWqShGip8q)G%NMM?TdmSc0&#6w<-fd33vMC32J?41r6#4lRLZ;O
zA^)d?=$OR}+YwznoXl$|m%aqJIQ)lYdZQAq7DUB;X;TLJxk0Dh>ei*C;_tfZ)Vh#A
zQw8QEAQUWS(+499f9d)FsD$vT4$xDgX3uYn2l$!Q at 2Iarad_js=A@?B%@z5-%v}2!
zP*~{?`uP(wHU$CjfQa$S_g6Q%wpcw+s2P!(fLi4l_Q0=1B7fjWqF?@<%1DH=(qH`Z
z$9e=1c_7 at aT}NvP#deOLt;-yGW>Fji2Ly|Kae@`kR*ZxTf0V~O1i@?40|L!M9=Swu
zo*mjM?O12FcLnHj0j&dQn4Lsz at dNc~kiuj9dg3bDpx&5>2;Hz!>Y*sUV6DcZcQ$f1
zct=@atKG4 at M$dIeAr0`DcPF=MAt*R at j#N3$RFF(xx*BVJFeo=oNL{|r2P8a+cl5?{
zQT?EF;-0~ie at O!l`|-wBzWWDQACLHD&G&m9hs12qqg-#4bv<BSWtLdR-OtO-OBaxf
z=peY$Ae!1vaxQ9qAxmfx6?MwWI=Lw|Urr^&U_QZXj73J$*!8{y$XT_<=Taf(0FdM;
z7)Clsf2OqLdmWV2xMTi}#3gx*(3`G-eHl1c#Vw7qe_i|=roQ(y;W=`O>5w&(XGv1F
z)eGjvQ0?x#G9==t1deNs at q3LXgGQxHXyb%y?2Ct^Fj+sZCdwpeDLQ4F+`Lkdud+dD
z*FdTo-iPD;9zkolnoSrl#tI9~gl>CVQB&{In;YWm?Sb2ITDVC~$niZP1=<!9{ytw9
zlrcSMe?81HACsOU?U3>BE2?`qKR5O_0A+L{Y~b>!AFRmoFo?}G^`4 at 9NFPDZ5PP``
z84y}MtfB0)eT2W49;lL-&l#XFLT==p*qvUsNMGwKlt}tMwrja)mkX2tbla%h(Qkb%
z=6%Tage0 at n;ds}pnF3gSE)&F|2~gzTZK2{*e at dTOj;37px_olD!%1ldbN0pHGf>%B
z3$ht#z$sG8HV%*npaYMtspkX}m0{StqwaWP7ZLe7#wVEe?4%Qh!_l|9;ouAliB;yz
z->2PH<cu{l%-&dVGqbqO(XP%j(1*&&O26uc4`!;usw<c3_K91iDVp*1fr|%}gsbgT
ze+FzB^>i&Y^ITU!NKJ2LeiMJD<~t&@MU(5nqA}BknQ^9N$MeJ_NtF#ILwVoX;6}?j
z{gokISoW=$#D>ZZ><@6NC4!HnFGim%XAHUE5P80LA*3#srWF at u7Qd2k90>UrN at Y2@
zqtXwm01t1yg*V?+5aWW}9AZg`Dd&s(e_t at 5)4d(G`q#nBTY-Skj=9Inj&FH<p&Q)k
z%0fH=Cx0q8doV7S`|J;<41D?n%$Zp86}U~j-fCE$_H4$awKma^<BARm@;$%sVmY}@
zE;A5ZuuDk$BAD^uOgIKrzh)yYa{r8m^KPLFmQ}$j5Wea+2?)5yUq_pzzVaU7f19tz
zqU;D^=B8!lv_*8a%<e8Kxq;O$TPcol)ZOI%UE;NMx(ibk>;P3iBhJU24-#17*Aonj
zjBv~VX{7uFzvn8ouwTqRQhoV at w}n>Mw?4w)Jua0OdqDXk%+#d<ssZ(7PG>pYgyv&&
z01OOWPOWaxS!es(n`JXx$+*6LfBoa)ZskyeY>*4|n<Blh?$-RFSvtzR)g*;}n__d`
zAAW(w&X`PP=~dB)GG^CjoYhlt9xrvhGK2En at e~K3Q>?r~{)%@25T2hXF4HC8$9L&b
z{ez+fp1zS2AIe{}-^9kz-4VCU72fJ#tX$3AW~OZz6(gFkKN0^P(iK;=e+2c~{HxYh
zjcHec0}otU2=FD1M at z6>syu8HL}l76goOxB46|N2$e_2;uL{%?ZQ~rVOqmVGRl?tY
zb77B@@hKSF>VOYMsGZF{UtO1P_MT9{6oF&-haSIL9oTA+tMEXUGU34+>d8M5fI$Z|
z*Dr7x;8_yj5Ng4MI2C$Le}*q3 at 3D;WzXGg*8PW_c7z5f%@H_Wuz`H@;P&Zi6lkNk>
z|B_qTse~`_x96Jrm?7rQQ}z!TT^^XSwg$H*O3GwcVj*hGhsLNR`pIWr`3BNs!RmL8
zohm3xJ$<_?vu at Iiox9JaQ)h1mXOdLIgHT<Km_abL2t?!%O3W1sf8?kkoj<j1p+KOC
zz6~p(IHbygE$09|HmJ%wg~hbr7Vp$B`7v>&C`?U{kQ7*zm(n<pJ!`1cdoh%(<p`<A
zW_;e}^U2ZCTIXdm)RF+~hFt6+*N=$PV`Mx$pkYRwgY&wT%F9Xgs!$BkWU`{96pRgE
z(7y2M0IPTg&1yS at e=m!lBerT@>=M#*BE;PF6`z?i%y)LCM$$HzL_PHM5non~52Xwz
zQ1ma0P`A(qe3*k?u<=F*#qDZq==B&iDeQTh71MsuUSW at H$?u3=+y#0T8b0eQdW*lY
zyKBzLny~A+<-(zL`mGlOTMb(7XHo#d3jHv4hj(2SOw8YYfBDlsgkRrWxL;Q%D%n!_
zT|v=zs}8Kp5Q8!1Mka4$P{t2l(zNzME?fs!$#TnZTEHR@&OTf98&8i)-SGoUCFO|3
zb^-~*!WF0hR(70Uw$KM<62D=^Q}q}bU<vq}g+C{dT00xCpm`fhLjE$V2gn0kM^+d4
zHwLwU6SL;>f8=4Y^=78RssIsLAku8Nt#=soX}<}UR>jNo<vGVqYWk8MYDKX+%}2|R
zK`^8CnMl6_WvA$L(qv_~Q(?=6mWR$4z->8K=-0LjxCVs at E;I7ow)iD3)bs5sGT_}#
zjK40F-Fq(9SYztzwjpI<6i&auc%J_-AA{q>tPa4Ke~9?!4*iM}*tVtpRpE-89e`PF
zGs;zrb}O-$j1VKN24jAlVOb%80pxHEYh>>{;3tv(Pm*_Z{_Cy~dIyKLEUm|)9Fai8
z-CI!8N)o+>0sxoUi9pKt_o?E;``BXTHs?|LAee at YAJ|OdSrcW8wA7)QDUtlpk2fvO
z7*5!ef4S_fPfM<U0M5=>`5!OY)~31<A^>6`vde4ZE~zg|%1ZZ}VzR7Hg8jx<Ty;69
zse3qfri#`z=@~k)ll*Hv1><g47ib62wH~oKivR6GM!Vjh*dfo$sH7!k8+Zsj832Ct
zmi(f4EXr8&OgdxJtPit#=`0GHnkH3o&++<ne~>KqnT_~{QqhzJFtn*P!s#Ip;XALM
zG!XIY1T4t!a7UcjEZA2FiNAjVp`(USY|%YVou3`87>mqIr_66n`s%xboiia-{s3N-
z at ObV8BCHAV-%988d$%z_?K?P>Rnt4WdHR>Id=$<|Sve1MU)f~5G7bL^=?CoCFq9Nj
zf0$0_VABss1V;rI;S}OXc^qgYUIeRH>1^|#%{uY|SewSqtYGYFplDKq_AxxbCcZ0Z
zHo92i&>FX%Y2kbE9a3|R;i4<?b^;S+;7SEKcXl56OKlDoN_PRL*97K$veFFbju6BR
zX&(W}W;oY)c#1SW_nUWU!#ETQq7K>wf8};w*%nUX-BR7EwFB_sQ}a>@m(U(tpm_Bp
ziThnEZbX|4frUl-`RBu`Ipxqdw6usn;`((SQwLC|f3lD9AjU3F?2C3RGz+DHN_rq6
z;cxc-sXi~SEYoJuX-Q8<FV2<Nt`U5-14jt;^Ljdh4m+7ih<`ejP9ZY#lL(g3fBbK1
zo18^dAWQ*i^ejcp>Db>3niG82>p}IxvTpr{t7<^|I`E;!STD1F!R85K+G`*Ty;H_i
z)vb%DhLjY3jkfVWU!si*%M8k)ChAm0%0A6-$w%vqi;JvpWO5TBZ~MLFXONsPb^S%-
z+7egKmVdgjlK;tV^jrtYx2iP at e+PnF+V!h^_*HCjVo=72 at l2lb|AxtLjTEA=Gl|+_
zh+q?xCE>>}GL at q_Ke^oJonLr0ep#mmRy5p^mO?VMq9WWS$`He{D8BA%p-SU at IofRe
zsjK_*)AGb at i>7HiJh0nSDzM!`KLm+S^4tRB#LGn^+NAG=3#sxIw!6R9f3EU0uk&rH
zOUM5qq)rgIe*)+^-cej9y+0vaKm)rRn!3tA9;A=*#uoFyyg at 6My*7rWou?1ZATr#C
zzo|Ixd at hj?p+8&~_m#lQRXU(Ag0iAN!w+CZfBxUgWB(4;1^rNwT1iAsS+5sIk=DVq
z^%ooYj7o15Ov|snF>I4|e{ch6Klig~9Ja_k3RsUD!;y;Ce at +o?DTi%WBo0IUWnGR&
z;j28e+m$>f%s_)}Ty5HMF(a}%6M(B*)-RZJ<yg}8|NfW3Z;v#g{sac2+FN*XXY$7O
zMOv7s{<uyQLq{7E-mK4zBC^+Esg9QAD~s{{suSZMnYF`S<n%~Of03 at Pa0c91h$|zD
z0>(2QE}>Pv^q#j3+g<dxEfotz1FJVu<*=iaBCBau<KHsLf@^uSlek+~jjW-#pDZ8M
zQeRm#k=6{Kgo0CmpyqptEhXKbXBw^UOr#w)i}^%W5*cOESVVA|Q+gG at pqfN?PQVbD
zppHPHs!DjHbjLlge_J&46c0$X!wz2kMYA-=dU!G0BzS<8DK%Jqqz#JyXO8$F&cXL0
z!BdlKVrqc;Qa;kxO;cu|FPi1p<{N(4E>jLoVCpcVS}&%YUB|Lr_JK7?d=)jc^qWV-
zX>-iMlEmfK-epwlp2D#c?XV2m4^re+Y-OE&(AvF=IJdX|f0s<kQ{-cQVbOZ at Zl)*)
zTpN4rIM{h>cn{NEgO{In4Xh~UTsOxg^*q}UZX7JJ0<;^x+9aXbC(oGFpSE5<VX1_|
zw1}vaM4&Q9s%TGyf96N&d>H2OQgggujfvC^TGFqE>Efm%K(?>ed}0^z7LhVWkW9bV
z`>$#nFI)K0f9a!jvdKgLY9n?1RI_5D)VAct4~@v~Q{{1NClS%0i?Pv8y>ZbW$|oX|
z7Tx5dXZFChd+T_J6AQ})YrE09)t$}}*3j%>7WPL};<MnCN&-L}LE-IIGWS^ND7(^Y
z^bI_I<GW-Umbp{HJ7qZ}p)_yj0<)|P=k8~318qX3e<c-NtGKkt2SYMWGe at L9=?%!k
zNSK3*r4*FI^n2No7V5*GTi_{+ix3_z7&r*hU<NRjamt8^kw=*ec41F|v~n;H$5vRd
z^xyL%m)#>ibK%lw3^R}q!jZYqzqAP9yJZ_ft at 5rET;{_ at 4gB4oF)!|ReEwjsr7qLh
zLS>;!e}!b9S)~bjRKmrgWV82sj2Q8Jfug}hjPt?wDglG<oR(xlF-<H|%{0CJITF=g
z=0<mKjiVUB at Az!0#uWa811(HcS4s3ty|A#|`nQ{(&Q6e9WHLRCN1fY=S!CvTk;L41
zrxQzghYD_P0h{~n(Ml`$Msav7<oep|$e13CfAVXp3}6pxs01lF$8N6HbfQyuG*xh@
zOZp~v&6|9Pmh&T9*i8w?U<6rg`-`9pAxM}ZVX8gGlIj|74MW}Po&!)Cp(E at M=18+r
zqZObQBByXHvGl5GtB^*tAY-3?*S{}jkyBt9#jTQNu>)LHd~b{C${F4TcI)2bJ(P*w
ze?(WbM%iD2UUK_8^GE!i()Nz|EnP{{3pd>!(tF4T=HrqHamynoA2rYQBX4~w8U$g|
zTk>Op?kfQ!ckH+0x9D0Y^fsT9pvbgS5QBlgV4tQ=%@R{OoPf60Dd!Zcb_GzNrYr`@
z12znxGn4UV%ZP8*FP(d>n0k{%C%2^Ue~kwBRykoq+pFpw<s*rO_Erc$8y1Qwu_9v8
zq3zCGsfc{PA;~+*K_h;R&D<8;)xnH`sCz%^cH6!q3%#Fe?y8LPy^mU%)rV`Uz34~R
zBU{O-mvl1IHpZbrln{A6SI at JLUHntV?gEK%z?6mTDKQ|-_RJRak-doKrMFlge}{sK
zU}a!YKCMOoEVuVJ`q47Mz8Kp%09gC%nB9G;-aszgHSz|bZIlcmvf?5tnxn<H<_C at E
z*lDm;Wis6ydb`0>?f4RRW*x9Ty;&d3FdvfcA}C7iAcmNyK8>TgR6z>$6e2PY^n6><
z-{N2knd|%NOIiaRJTvMm>mKjWf0GSyxANX0TvR1F(<ceLqW{q$2THBrWu;m0%M@}i
zE1wL437cEhxPOM6BV}KC$Pr4qP3~H)mnP%P at 6~f&N+9nhZh(ZYld4Ba^ZNd>A%hM_
zF=wrYeM@$Ra~TB<Jn~#&6|%Z7n``=@CI<g7xb$-ba3!aMu1LY^I&qVofB6F6&&iQG
zEGUjPLWwPvAP|1p4Q)LUiyv91rJx_i296F!GEAW6{iNoHMU|+Oz}79n++Z&5V+}KR
z{<Anvkr+GN)=xSX)@EO?zT-SViNZ~HFc8RygQYd)2YPKs at pPlW*K~iDkF?Y_<d&Ny
zlsgh-c6HIaYho=s&2RWae=sIA#^aUNPsMYkZ6gs&KwM=@ZmMZLFc5+ at qkm?oJz`e_
z>UtR})e${T6UqVe+RNLi7 at N7jxRf0G9o;K5r<#1izz&wn)UM)*nMjmr(GE1_<qqT+
z7aMn1)!P1hE7*pTA&jWkkDT=Nn(u7x<fRnaX5a_Vh@&eXlEU>{f6XmR_1nj;5S>7v
zt^lqSVlikK=biLAoJJBev_t}8Do}+E=C*_27Q3PPJ{2I>gMs>5v%qE*Y*SU~;coEJ
z1qao|rT)saXSQ@<0%|E3avZrU_|aDIFuTWvcl%I>fUY-7dfuo2;&Ua1)}LJ~I=zsr
z>zK18!nlT>Qya@`e^Ln0hn71 at YlIh$w5k-PAd2=c{0^>ugS`T?Bu;0F`x;Sd(cpoa
zsy9&u(kK;cb<hQzJ`v(yccEGF7Q+;akByiKiTBhaRCb+x7B_cjxiM=eG at tsp*o-=A
zGQhgRwdtQ<&30n8y&;vGdx;74W^S|xlZJuM5KE|?lfW?0e^HQ}0Y0$p`uZ)5bFVmO
z?bmZIY5r)#CNsz@(b+~>G8%A`E%qBk)3i1AMB3G7J_;mEYM+1B*v6XDJ?kADJdz1|
zWX~%auDn>eesTAh!7AMO#jO<uqNxsTqkwOKK2m2ol5PVbJ61uA`g!mZ+ZbF at 8_<h$
zR8My<F#yobf8j=wcU2?cxpVQ8;X6 at YO8W6I5Zux^=Hf%caM)^NM*ehHn7FvQ`8IV%
zA0ow02!UE>^Q-b7JM6h71&vuV@~gI;S=*VO);^uTQ9xYv(ewEscVh(`S80=0i7WHv
z5q!9NuIs%MFWU%t@@hde3rW_cc8zxqyQH8M;IX7Ve~D|$vTr1ZeQSE^S|c7p?Rr;U
zy5(pTuj08&s&tC(k3y<n;c_R)J8bo3P_!1zd*U at D2oQ@$pP9M^f<OjhVHzdh`xa^n
z{ZfIeLRqqkWX)r*^NrpezGH6dNd138%+1RoyTjW4033OqP<eGVHEMQcG1E5#Vf2Gp
zpMTKEf4G5wRkO(ves$!!o|Q9x>(AGaLH?yb5dvt*9TymUGeL2yD^Nr5*0Qzj+ku_~
zB?e>DWAkbtYSYlgM+gV7jI|%3LMsg`D4RL0FnxVR3hSG<6NWAc|E>3-3W6Fc4N-W@
zd_<C?$+<SrT%5g{yCR5`H2d|ae79nP>ihLGf7>QcS9v1|YB3^=$u<vXCBeX1e63~7
zC*pvM{uw00f`c7T=Jys{W*AX#1-&jO$ETwwX)u at mmF-&C(4#scb4Zbt&1GL8wng4_
z*N9(r7Q_i{5A*QFbgzp^ekcVctv82{8#Jf#aHVJxP91Ro_ZW9g^C_!~!ifmuAQV>;
ze<6O)aXJVM4n5RMDB!SWKdy>7|M)kz7|L%Xza_55?AO30?9t05^uP=^6cjv)16`>9
zruB4~(ggQd5az3z+vt%MBtB9A*6NR;7r%>ZSjK+fPry~LtW at 5~_r#cjm#h=DI{e98
zQcpfw^V7&B)oui-&IoOxyfx*4Dg(yOf2_I*xJ<ItrJ1p%Qp$9ORN!grr{ObPtx6o%
zFI#}fvDw+=osg`5yf<=6eLphGfc$<|31)gdAk#CNVYjp#+6E8YEZfeBe&skY`x^E$
zBCCjwYJM`fAU}-q6o}fiF`!Hrq!E*=!;Ydmznl*7oX}WKh1^m~us}sFRtKV6f1r#M
z7Fq9~w3UVoAdsdd&;^c%F=UTGxFC~+1?cEvq231+sVR7PB(iL*<nfz49*E|n*(7o#
z2YD^yS;I}63)cD3Hk;n(;27F200Th$zb8=b<NebEJ5#{aE^npuFioZkOmofK7bNK=
zLrWqJI!M8rs(F*CWb$6Y6`#W#(NK5!pMUW@(0<fgzGD<HCU;n_Vaz0rn(k6TF01GE
zf`V)p-&<P$K at ATRm#Rhz1n4h46B7&E at ZSl}#I=9yZ`VBaOaq3>%S;3ju)ide5%baD
z5DEj0WnT4bOsc%I)<|0v!oc)rv)m>>Z)|7(rIX1{nLE|zEoq*58FOP3MIf6XhJVn6
zIuI}g$KE0T*;*NGSlza|g^kiZiR7eVEW}+~bFgFBg~G(k8K&g^2Qap+J<5LkSr0k6
zttIGq%go`=XTHG^Fv7n|#kOZ+Ikg&=S9Ws81%fGBbVp+zl4nPE-wr2U_{>j9H3ng;
zimZTdVt<;^VI;#io?KG-cRD<exPMAyDs{=lMM4VD4K-pShF3j70hR}Q!^Xio=z-Ps
zU%1-osiVxQ*}A<>blFJdorU$)I^{uUC*+H(8W?9V%L%d*rbS`gLEU6`>Y<`y89aKk
zv<+)S3R!}{-gNEPnd7vl_y0c(M)cDjG7h+^<YCpbjPhPEpn at UYXuLTAK7V<|xe9)N
z?xDO7o9n2VtVF4X{SX1g-DJ@$W2;$Pl-JA_n9;GIFuj+-i?I8L^smEd_%fbk%uc^b
ziTcjC6>ROpS->`p&@$n<jO^s)se=MbsT9C-Z1c2`HWRY at sni22>#8vBqT70Pv*cE1
zgFwDhLt3Iw!O1>6{hVio<bO<6#B{C-3}FMP=U1_=8c0V*xH_fHWd-u7lY~9rm9@&@
z4DhO?=I*-5ZO3C!1U~?6=vOPq8aE3ahBo(oh&!`d3w7dah!L+sSaSB_tI%i0{bIX&
z<rJe>rebL8vAS!c9RldlQ-v_(4W}cXs^4N(HyVYkhdp41f?(yRq<`rSG3uo)nmrLv
zRa{sb?!Ux=Q+w{PkseGyEGTVM32Cz_mjxwz=ha~w)}#oI#n?3gM2#b0ZGXsvhjduR
za2Li5Y}-elQ1Jm3p!5Ier&{=ha*WB722H8h6v@!0A=qH{kVj(g%zm;ua&tmVfgktw
z(CU|S#E1O4srq_yCx7%qhyZsX>i^%a<n9>L?t>n&(ahkfae)Q64jiJef9;Y_vqv(0
znpr#g_tjMXF~f3yj%Y|BpH;nqA9;TZrd4{Q5q57MK_L_#eXiyhL86ZPR!aXg`5tQl
zQ+;<s4WPT<&J$0PRa>pBcv2F<UjX(#{*E;QBjHJ&y^&736 at SYjLLcLO<7T8vg&FjV
zDNh<j1Q<cR1lt)%#PheGrC3Er^rF*KBC?~sOIe&l4XbLhiINV5g%CB7tvoOTBm2LZ
z5#3spZE*pmPWzFqH)y%Qo84J(7YRkKvO}Jk<ZcH~ONQJ2A==9zSmeJE?$qSO*dvLu
z7ZV$hkPY<)gn#B_C(@$d#q{sN)4fGa1%_^G0!sBJzY7xNFj=|~5MGzC%fLs+ql^>6
zr at aV5`VHKUg5PaB8^T1Vub(o&QQv;Nj`DLu&2(JkG#R+-vL at ywrHI$?mP-1$KZmW7
zss;kS at phguQeKNj`hgotA)0-JF}r|mv4Hpt*>*kf=YLFQtGL!0&3#z+`B(y+*k;QS
zF~iwJ0c6z;!~T0)L#T<fHf?Bf*!gAUQVP18I-CgI``Gt~{d|Zs2r9yJ*l&c2NY)m=
zRwL8nw*2jjSrdBQWB<^gUfo8%VCHOFf+~hj?rn<?8qLinUHF^WZa&Y4VkgfQE{KJY
zf$OcNN`KD^tztJ(Hxz>(Hb&FkhJf at chdemiIdRM`*8?!;e3$h6h92Iz4wBophGKr>
z!6*nz^w>W}yQhaRuWFGn??tV5g6af%Sg_5ByhF|WiUPXBlM6mrU9e{96qcq2P9g+@
zYuTLfZB$Lb<u=e9$F#5)3s%6Tm<i_Iu~W_#Pk-EfLpw9rfQg-hU+B;U$_JKT5Drs8
zpM2PUPeW=`szz;KHGr=(_8UfBiAZ}$c%hD>P0gbf2Ckh{Ahq-(^j!R>X7kP*4#7a8
zZIW($9`i%zkgqcA9Y^^*{9xDx{CJYOS#KQ%S)bMLWex1%Gf&~B#ZDz9*a`eWx!k?^
z1%JvQcA9DqDWq=PF&dtN4|Oc9BSh;>^pA~9f6E&CsgbZ*b>5V8AzPl=#-g5MsI%B3
z?@q~vI^b&x;5}2jh}myX#r<`~3 at TjnshI91!>a8}L@~Sh%$dg)17rRMg|iPQ#Spwf
z4bna>R;vS=6+--v;%#?RuiTt}7B~w`41ZuK at O#dBuQ>}vxNy&^k!(U+S7wt3QGSd@
zbzK0rt{t4<PZ2NcFv%{{fdvjkPrYc{$1C3W^xL1?@3EwkdywCiJBq1Y(p`UFE!k#r
zazzT8$I3SYuR+9mK^R&vvCrd0dKyrR9fslC&aBGEXD#$9i}l>ogAXn%LzT42TYuB1
z7%q_?n+VU(M!gaa;*>B{CmV<|_;qr8O?nclDRh$)VRtM~@ZnGhy>|{#tn!75klXv_
zBO^M!(X#k`Nv&a)M{n(+MGfwO!x~<NE}~H%6gVPp4lVO{LHRWvCV-EfFTeG=BiAyk
zi#p`o65)&S#<v}@zu<u;CQnU9^?%bN$J<Ht5d)R(D50E)ovm=U7UU7B*RZR9X1mXP
z{Bx%U<<sIZNE3cB!CqfFC1=70G5p|kw!lJrjSrh=vuwE9qCO3xJ}NoCXJ}jFoLa}j
z3RK^~OpaC#FNK=Tb(q_ at dW(e#AiFq%_Bk*_B_%8Mu3F*~9LOelg`qdFw|_X`4=37}
z(2dEY^g$WiVutJCgs<QCX}#ebZ)(=(QsfgBFqI9S^*2-NvN?I!_?Gtq!GsI+y(O2R
z2#Dn4lWy0(T^vscrw(2*!7r?})P6t7NwnJ2N{&N<C{^g?`Ax}D at VL@)%xG-42p7|T
zJ`S&hVPL_dl2XRG9pJgb_<t0U@^OU^i-faOMBB$Tm at kI`uG!}nv*zTtuc}MmDZUQP
zezbn+Y2$9V&}Y!<L}ZJ2fobwbE3($!!FNDO90P^WF_v`Qw|q(n)wpUAIU#-Iz5R=u
zRW;eK-1<nx4GU7!wtiNhxqagu8SwGunx*q)JmQf>il$Q<H=Q07$bTy~k`BiK`ga_-
zwhGPly>{|i28m$@F9`g9HiC>0>1V^&4RXjR+iJq0U-g=nBJs^M?m5~=@ZdKVmvBGQ
zc~0fllT{guKJC5IX14XZNwNG169E{Vfmdgw at d>2&^NEKd5QwvJX$UF(23B?4NC+zO
zYFp$+y54{H#L at qrY=1cJ2f7mExf<Oqh3bQGk<M1~+ul9yE9*%c2%KTuLRTwCIJ6 at i
zbc}q9#=mnCWP8-pf^gYN0`S;I2rzju>~kA<T=sO5u_kyNX#i>yFAxZT0GqK0{Yl}J
za at z3oCtddj2D4X3TuWtm@q+${8?qTRw0nmq2iz&eZBF<=#D4-^<9 at g0EL2_H&Q0Z?
zFPtN*@8U^`+ at Ie|$Zabsm{C9g^?@2k%!|&Vv%D at E(!R}wQTvEV9DVaoYI4-Pwd at dy
zY0IYv1P(2 at OhRFFkl?wgvhdm>k39ylNwxbfwg>eM+XNT!JToxntsKg<MdvTQf#r<2
zmmI^fzQz9y^?zO-<wF;)JCRO5!?O$eWl4#wqh at 2XxjTFrh>}z%=(D284=DL5U^aWg
z`nC^Fsu3kRdYjJYmtkD(;8WsxL3eAI>T!ccC-`_bdVYCDSvFJSTr0Y1qqRpjS-I at F
z_BvBG8_wx|Gy-QLlA6;#*CTKcY2l6gwt`y42epUcmVc}Nv{YSd$E=|RFzc1LB-ck;
zUr~`Bt(DH>8NQ5BpRSP?gFi!q`q`(PFGKxy7rNwE&^$j^78EWNb~km1Mc%&Y08y0o
z{5-?H5dFybAr`ML6#%`b<_MznzHYi(U2|CXP9r`x_a3MIVhBEr=e2 at c&svq#O~upP
z%%8(y=znv&=g&-}uiHPzb-*7Jx1lU2*E&?#Di4go^2uK^cpw4wwJ&CsWWi<`Q(LKn
zkXdrYdZ1*ziAigrYcfi=<HCim0T=uqYWz}&1kX~WY6IezC`e}#hKo~6iePnjs4X?s
zOGJ?OtzupR2k*%GTjCD|4&Iu*{Cz|8k3A|0+kf-Fyx9L|3$CkHjMn0?uY7+~K_J<<
z*avz0Zh`9Jl<bW;xn-P*&0JTJhQ&x!ZbrPpG{}_(*+1)9y%68hP}KQy{L88;JYwrw
z+W2){v~9VnUYa at xP|J9)`9#$@<`go!Wwfa9Ruk<%<q4sAe|j=yzzOjk_e{ttMqcrn
zx_^e-?tUw`P8{)UP8t*{ncb9JU7V{UhqP>H0`jMW)OED5SkZruFSmvuUQYA=yrjZ<
zVR|i2fvo~uvAKvV;|wK|Kv;Yo21eN(|1{HdqmET%vp||QlfP?HAM=$`7-e!ynZSJl
zdfOlWuD5Qfl*{#-5_3lbuRz>z!XyX=H-925&J$N)-5gVhp?)agUTy}Z%(2iCDCOBH
zZ6+p>1WK3 at m$o?C;G5>WCZ<{IkkBV=j3%pSe;+4}z+oDYo4HU=j)nJ)GH0|5yKXN{
z2jx%dl7+w9x6lXUQ|Q^NAB)Y8ywk{CNOo^_tWrE5Wy~27_8G!x-~(6X9)bBhn14ew
zZuU6WMp-KHnX`$q at MN+I>7xKyD^+t6R;VfHAD+BC^i4O7?Jz_~ybtB;r}WVcy2iy0
zuzn?(7z}StExD{sSz2O<j at COvdo#-od*zsCI?>(Tol-(AP9MWOC^QX}umeWoBdM_s
zXiY)yq89jT&lO}#Z3;e993sW*^M9h71jO*^_lhuT>W5+d$<-3bd}JeN;tnqbw4+mY
z)NF#yw9UfZDeEA~afiL}6z7_Eap+%X^9G}S)|etOt^!-|drS)WS@#q(__IY2yf?yk
zUiDhl7}>HFA at x`Sp|qQ?KgYSnV$olQ7_Mu%QlgPDz-m&1w6q)ChJhoe^MCsquUfL7
zI>;Lq<N??w{2OG?jNST9%C)TZI>|x at +-w0^t$Fh=jV<jWZX6lU=oQ96Ww>ORhLthp
zocByWo799)De|=@N%jp5PwPZ1oIqzMTmv6Fh at oT)Dl0H<(do(6cHglXV%v3TBxY(^
z8 at iLUm-r+#rhh%E0ea}rwSTCp-<J=((=@Y{Y>KntqTH*Hm%eN5WD07FJ#Y)zmW;y=
z)KkObgzEigwl|N**U)u9_t4<&WqyE)c?m3=47b#u&hPO;LUIV348Wa60Q>0jQ=_X~
zbI=J6y^x&50}qLwJB~HZu<G(Q_ at H+#*BQ(`U8XS=$0H$#jjo)6Vt?-<mFj{V>18rH
zAUwP8Y$d2_SVpJz@&`Z)hqVC`i~r+flDNZ#U}xE)PZMMWGm&1*+w^pwy$vOOq-IQf
z4EGMpAI`lxrrTaP5(@Daf&J_G at u4d`ge81SiP58A)xf2r{lr<mB<jXpvdr_9I|dg3
z+I1m?VFEmE?bfM%SbsIOIg at hNM73vRV_Kkqn8N2ULhv~s1u(v|HX_s?<KZ+$JZ%L>
z^+VdnZ|pygg}-{clj^7k%j&uak~6eo-eVvy0xteS$tw?&UPx}MSPEIEpjTNGe9q_%
zgZ1e}IH`hHspQ at jX3+I_rAHyan+Is0t6N2FR@0Y+w=90DP=D!QLm;@DTqO{)AG6Un
zBN_R2iAacN*Ibzl4RV|(7>_)cpy8KaSB#t9%MUnL5CTff(@CYd&rsx?`O1envnv-3
ztCJ<-hb%WZRK3q=VW!DS46#PGy3-UU47u0tQ7g08(1%yt`VwS3it2`oq at ja0s6D<r
z72Q%@&7l{)t$(g5TwF^<GhJy_B=*XFQR`{~e}ux8VCQh$ZfJmrK|H^`va%PjJkFX<
z%ePL5TkbY}xx#%!^Exm#3MOnqCXnb$O0`j#ckEoiMX$UDg`TfK0F@&l$*nABHC2ou
zD+e at HhvA546~2JnJN}Zq?a_F~%hivbLQ9kBD2MbDoPW;UUH?Xl)8^R7mu#e^>2)_Z
z7h78{J7cOTm7+t5^tp`f?cGkBDL8uLdORR0BMw<<#rrPfBy#<`F<Un5ZkG4lP1CnW
z&AjtnU4pwWs>Ft9QKYx8rOl>G7p=3IFej~fWRQgHK-hYaWRFmrp29V}xVI>3qz;Fy
zrS3p^$$ygPjZY663R$3(D?hOhQjScJB{svxNV=HX-0Hzv2-rCn>|<a(OND;9JWpF8
zn;ViKl;1`fhU^3*)$)S+N29iHIbxVb=h-d~dfajyH6d>^p2E5VKIsnA_qc<sXE at Wy
z+4IVJ6UDh at MuWbOi44+#9B9ZjOC~)^JKl`>B!9V>v5t?fEXtBYCF6t0W^2#PwSc+m
zkS<fcp#M1m<@GbIlabqH>G)Mvwx4h>6{{~jWky<v?_@|L>6!w*hrTmv8+G`!N;$g|
zp{jJgdg3Swjg at lqlAO?O+oC?h>`;=7I6#LN14bDjfs!sSD at +o52eg7P!VQ(FZr5D8
zh<|0f2Jod at k}REgpJofk3aC`hKDt^a($|d=6(bsiNr5jmkMolZz+~b3sY~uBdWyIQ
zZ$6Vu3p{vaX6Xm9-}Y*W8&jt`vb2p>8!_KtLub`*O!4E|&U5o*zeTXhDfvLD#t>N5
znvR~$j7J$;`<Vvl>6<)86f7O<UPYS;fq&DYl^#_~r(VUCNX3ujFUjz{#^x*@KJ`=c
zHq1IJ%^Q*qTuMA=>sBh=M$2+IMdTUULyPiTZ;<_jA3KY~rwZ_+*SFEl-j(-0cBhCH
z3OSmzqCy-3uBNFu5C4>;sf*K_k`xc7->PV`3SkV}j+l&~-i>@und8^mi_}N8m46`o
zBe8{qbD83B9(63 at pFYy1O1C$iT$|eMFHVvl^k1bo;Zgg+c#u2X at DxytX+4bY8S3A#
zuSbUe2hdp16UTVjdl!AMs)1ja3^ij!54RwDW<mZ`R6fB4m+(|idtX?Tbyn1fAgFx~
zd{MY7#2 at 7c*Ik{?$2IO=Wsl6o0e{&eDdIZwJCW;_b$g&G7M$?>?^D{!k&qJpArK3%
zT9t<lBs0;i*mXrHhMi$^5gPFYr3-0<e<s)cc(MJ$2cQASs(=Ogiz%81F{{r(h?KY(
zEjLuo=o>TXH1q2WZUSKv^zNhi3C?eAF>@JYM1!soHP!79@?2By!vt;aX at 3O*$Ky4>
zfhOf+A1b8qjKu_xMSAzhE0XIrj1;W}KWwS1JTX<)DV21`U(}rSwu at _7`?{&voV~uj
zk_voEmeO at _Mt6q0o`W$rr4PQ+Tzgw1k~D|bx>zF80`&_3O?i;uVt|;B?^h6*&Q&)r
zNeQ at q21dy89BW=O at 7eKAM}N at fqk$idxg2x)Lj|<~4eys1flnR6#Vig1@&!$|-C!xm
z0jJaaW}mbN<d<%QyKC*9kpe<q)vBEA;<wx9t_yh^Ej&c86Q*XY at tT8TcXtML=cqhm
zK6`@oxblf*P at csy?}w3v>RRmV2O-!W50%KuXIbZRX|NtA^BT}}t$)7&kjMl6?Myt}
z^qE`D!%WmXC2v&?6V!E>$K5cPO+Ojs`T8zOk`vLDF>bZlP)STTqe=AG9n^1`TMAld
z6MwccU+M4$yy}>t0h7Rdk|QP#^~;(zqMi32{WAwJnRURd#I`}PgPgO#2L_9;|6}XJ
zZ4k33w~)h;KU7YbSbt5xdtEp52#{bp*PG0u at 01sQ-Qn)ye$eG~N-AXRBx at zm_rtX)
zI~`pk-W-+E0^yK1a~3-%@Bb4Vhpih@$p@|?g99k$CJDY^twj^^4y}iIEy?WYe=_U4
z?dm)9QT!Kx`LAc at 56bRG582F3UO0wi{z(_;LSRI#i8(>DRDZ#0^p4AJD9B>kB8 at ZF
zb0!A?pINRa?Bo_C)fD?gnucPrGWrV<Cl+r;w>dCAUUf at j-ZW6D5@ywY!<l9tRv}zo
z2+y at _JDW{8FJqx at T<@v#mp>mo)+^T;ZFMA1K(+`8Qd9YuYV&$52gNvT1U&P9Xo0y;
zPe1WQeR_bL?SBG=t+t(y0&kOhSu8>-q2NHsEvFg>D{Q}Xg0^5dmhM2575oeQlGeib
zMc!dUynJ7W0+AMF+aAoHG5^^`lJrV?5E99T0l`v>5%hs*xtceA9y6(0lPeZz>5^MP
zX&#vV$`c at C7JzzzMN9aA$Jm#hX)yz{CuAr=6;d3dVSgn;#&3w=eS1ZnAGten%ZwrP
z#}^PKvLs#t&A39^`>r+XC2KxjsyP_c7=Gu|zMT=!on%t&+<zLf2QKjTPbk~lb{r^`
zgVri(?DXJyYloK+DP5?fQv+*n at 8IHC4!Bpfj7whTtx+TjZ&f_YIwvxc_4+TgPEd+V
zolIBH2!Gv!8ONA=^HFR9#~)&?CyX`P)h0*NF(;MO9zGkIr(5=8NYxC77Il-9PIa3h
zwfRU%UOhZtBq0S_p$$+64UzC51W~ysu6?tXF8WIHhb!kw_9K2ks3~3&OQV^LH+{u<
zSs*t=;a-WD|3CCmguO;;%Z0IfKZ-OaLub}~-G6w3FG1lpm(LIl60LQwnU=UmGN~iP
z4lfDyMj?cZPH5Cvj7wu!{w102kQRoFJ7PVjD*h7QT>US>8a at uj2=o21u0lFg9T$Q`
zD%A2y&%k-3;Wd{K!sTJdS(nG8Lti^G at 6b&6RDm|{Zfa2cLjT=74?T at G1?@)tU|uZ4
z>VG^`42IleB|xCFY&t-<lC&gTKg1||TY+nXd|Gp^#2JEV(zLj2UNXvnHvx^JS8<pS
zx==$|EB3N2QaX+`A3P at 3S+ppd8u40kd_!9L$d$XDwuEzcq;4pAI>-nd(pG0$`?LPM
zD>V$1xM%v%ciRgYC@<g0iwLa$<@%XzP=AppV_uD^_(b=*F<@v+LQH at apS)HC0meGW
zp|F`28`C{<6lZkwaE}4>auY~Ck}+43M32&gE#9i++&kATpE1+G6t)ircM9F0rxS(M
zqAGi@{^}GVLd~co{C2_?&di&O+s=g!|MjRpTeByA5n}7#=&J2Hxy%-)Bmgx~=6 at q2
z=Qtv$3iFSM7Ppn1WebCz;S9~78%c`IWK5qr@!~cX*nLn;YpJG6BN78lZk>PQcR&wU
zU`{O~|FsZJ!m(SrD89J-LT_bGm-KFGv=g7uiviW?3ffioNW>;%U%KwN4;{&$oM^vb
zwSZ~3ojTv5a0NknXJtRW;U3>FF at H$V4jQ`6yHa6-L4UQST5mx+D8;?b0dLr at Ggz^y
zfvmD4AM_dd#gni@&G)`<*|Hfl5z3m<JOlE-1x)vCw1Up~fV-KX^x7|y+F^PrMiVE$
zW-8hvPJLK_uG>9j{r$%npqs-ZybJMF1 at S-m-*Zo at eWqhjz4Ac^Yqbs~M}JIScBFjc
zfuMJhFPhmv!}ix3E?LlkU4>&9y@!Y!FqRlpg=ltJdyfdjEToEAy4p{ut3n;5PSGTJ
zJPy*KyS^XE@~gavejD0ehUkW!ay?625J|d{P7S$n at CWG`)DNb1^A!6Q|D)y`O5JfN
z*%#rDf5&ToA_$XqL8gsqwSUm5u;HjU%T)!!6$MgJ3`4P3oQeL at UZVO50dk{Rn$qfO
zyeaYsYj<?Qv%Qdv`l+A4$DPK^CdYS2;f#c<XzR_E0IHH_oXP`(JY?IV`GEV`6Iphu
z-y^*E at UagyA~2%`JeR6H(cnvMP#?7CWuA5F&J;+mo2=TM+EUgJ*niAQc9P?a!JIQ!
z>PIqqSjuc5btv%l%tQAHo{*h+sHsN`?wDfzZa#P{bxMN2E>lo*L?|sD)`{gI?z6bm
zic)T60iQT<m-)56+LMC|@w(bcik6O37+32&kbmC6M#wbu;ba~QLa`+LTw*F5c6&eS
zx1lF6g3hkm@|<}4-G9v|_XOf?D_kdP=(&dFMSE67p^eC1(PPipw(qA~TKWZ(7y|{F
zCT&T9gQ|z9aH3pz6zO6*3HTyKP#kH9iUd4*`q*%>d~1AsgbOW3+jSNsF>hd8drtkd
z0l;!2>dGdWS1ZKbO5PesB?)?Oh&W#k{wDA7eZJ?dQl?gj(SQ9cc8g9MV%2onmzNq-
znh_e%)^YWyYC`M>=ZhmqLQ9x1_4eA+d-!>e<m^a%orV$2ngjFjNV5?K^j86~3W!<#
zRXMcP at NMFu<(1$a`sG at Mw4tF(z0IvO=B(c6L{i0=G#w0CX32#TM-fm`BrCId9~RXd
zRRvV0Ez6H_G=Gt<CzBbj`CZF+F4~P%lN%>7#QqBgkD#LB-%CiU)zdURsLV7V2~cpX
z=e~pb^Ao+iVHe_;?Cp?g8v;l>LpU-C!C_)9I>5IQ$q?W>suj8w_>7vn6y1QnfbCMg
zd*ieTOvBCeZ~{Bd9u?%UY*Uo3)_(MG`J&QXx{nsan19x{#M;uF<B+szAwk!fTF!eW
z4!jrJHxht=$dxw~&g1<B<&l#NFOO_f-?pUMeZNS?ADF at YEX<Dc%J`=?xt^~gb^Qvj
zS(B{2 at gk89p_~eTrkhm!jIWOYg&p4pX-uUVwj#z7hp7fGAIP+hC at W9rMPU#r*gvm3
zu2GQ-NPmB|e>##!_yc at 1<p8^sjh-L^F(x+>L+*`Q)s=6WbU{#?AT({zK}qqffZGJl
zFn+k2L32AV-7Q9};@=CgK`tzZKoIGyX_Wt7K;z}EO2c>@2j470I#-lt;*j9~8<NI~
zf_1CyDjU*2LfKnQI8^P<v_{{}2#0u at +=JunK!3kPblJ%u7S^TltG2)-EKoLb_vbG4
zgI(dRm%=sK;=2^^|M~XW1qgwx`5LoFQGTIC^|0VDt)hM2c0AGo5Euf+Jr(gE0aufJ
zZSAFfF?mhVH>$0PM46VB$w4Eal<(Rli7p9%2r>4>i%!EyGU#X2q=10O)&J^WDHPK=
z6 at O;sA~`%1rG5`;lH7biLDK)TEgRcO7`ptt4P1kS`9d#_U(=Sa*E!bM9BSwhbf+&_
zV_{L9cMH|%Qy3_=bKF3-|IQ<B at BF5D`Po~*?v){2%az41e)w3}j!*hQI63ldkw)$5
zIPBm0L at K8-88@V$dy5$KrkhtP(R9%b!GHOV5>vbsF_Ly#1qEVABbkt8f^sEVya>MU
zIs{_n(GE<XHBNlGe&M=u0k$hiB}mgzSB}vQhQyaOUCz at aM%)&%`)B&fTbPvil&eV2
z1xx=4_&?H at JzC5U+BTzwAUx{qDF%Icm5K$C(8=p8XniV0choE*1`>%+aFA(vsDI3#
z8IPqIR&jF7-w*Zir at y2mx#nR#zZQM$`3d?tQf5z*xv^`Z#jYhZ(5sSQIa$#<d1=#I
z5o85bRfmIrjPciy<B2trU&Q2)+<K#q8KYTMP~u1;Wt<1Hu}K8AaxcUn;M&0-v3al^
zb7+4dVyaN8)V9uM9Wd+*oJGak&3}o%{7 at JMG;tPGBALhG63dl2Ev|x*D>cokEODjq
zeKw(bC8Jo#6BDb~)Uheh1Lbd_DtV>!ZC%VaEtj(kL_S at X^uSLOL2YU`VtE9d8tR5d
zeAYIRPsN8JB`Fv^Qi*U?eVTGa>UcVAF3?olKPR#{X1uLXt(h9XnW#$6_<!UcS)}bS
z%MDNUlIeqLnx9`poPF at iB1NsdJBzbmevj24e8`4#^~iDpbD3n(H(6OJ9Em+Xinn&Z
zFGWtd?>AvJ{ZJ;bawDX<E<h{eDnLbR!2i9%ofT6{67DQO;y|7^VIM|XR5@}_^6mWH
zxamU+1mT0aAz&=yr at fJ+ihnZ*=dp&2;q(VmV#Ce at P|~d~E at 4{jajV#OR6fQRzI;M!
z9gI%Jn!wfMw~Nifj7ORM_Ztr8M&8P}(|jqz<91Zy=1$u6VScOe(<?InpLHJ5qL#2E
zosR{6k=~J7HQ;t%VaCk0vFMPbzC>eJ<VQph=`H~`XN<qN7*bbQlYh{7jZ~rh>0iu5
zH?SrY8W}*@K?d*chl=te-GXQnhG?Z#KJbD~LquwmSQpk%*U!w=Q!<!oMz>6QBNXw!
zG5K4rl~9N$G((rFCesg~B%MqZK7Oe{uiRdqkxybz=Pq*yeGS)`c#Im>H7BPRpj-=a
z=(!h25d8F<w{ExKb$=)UwCZ`B^Z9GYSYb&z^H>n7_SHnbWWv3|?e)_8v#r>&&SYPe
z5oui-#Hb};yV=Xl&7;kf#5W4-$AO#%6r}oWZgr;Pb~t}w5YwEq2)6V-1x2Vz;4>&?
zgYnDtAn61Bz&=e!pi_(JV1g)wauDQ7MrUa`ut$<7Z$wM-i+_zi%5de^pnb1=V{^15
zvDMNE1V%aGtG;mH!Pt8ug${kRO^M7jmAHc|Vf57$`ISTLJi<jie8RuvxU%IdtKXpB
z-Dmte&UpZ?#tF9&ABL4po!A?w3N`5~biWWna4~=4jxi^t^(@hMR#hkndcH5g*@oP2
z9dN~d2p$)o34hgKoEfQ{H4#)<t8<~o3Q`>q0HwHcH`UwO!-Jxn)0lW^vnokZlYf;N
z{s)?-z at YZH*YO%9AghMbU`!2wHj*N=S<Powu2D2N6?edO(YUE!)rN?jP~?|ZvVy at k
zAS86Yq)69J?_>Xo`BK2O2RC##4Q>n(*{NCLLRHX4DSu|8tK@{?MnDcuqmeU7Rdhg>
zB3)f`3ypR&7BuQ+>Lp{{xhRWMbOsv>mP3BEmTy(h2rqnx#hMSyHgPhru5^VE-9Xit
z#Gyly-2ll#@ia!zZhFB*4}sWK{Bemb(ImZgh|`Ftuud(poLO!t?&jH01GEz9=JBKC
zl+UMT>wi*`FxL1aJjW2a;fCJ?)6!Zv3!yTnbKGKoXJI8p(su3`k;Z&>uA-A|tJwKZ
zy{?MgZHIJ*vi^i)I9#HU^L+de>O3Nj=fC1QpS=?G?!b{S+j4QluDzMnnqbic^BV4+
zXlpxLB6=lYW!|lrF4{NQpHkJ<dzx5`CKP{iJAcSP`wqP0_;r;TRmiD7C5+ at 3r}ej_
zw!uW5{KlZelcH5Ax64M(RK1ACh~uPW1~ozpNW!t^H^J9kT~&0VeIRWmSZDR3g)U5G
zu3P&w_Ax%Fua8Maj8FZKVl2a)({{v=zFxJpfDmb1zKrHih6u~;lr$a^nymQUnMtgi
zkbesL4w=L3+v_XQv?x!Ln(t844wTib(@J)F^W9##f=)p@`w}`-nYqd=-mFSc0wMK<
zg%_GCnFdhouup;uB{~(7tAI-6<Y~Z+HmgWkAg&0DON3J)yR|l$y35U)lcepxy<$;m
z*PT~WfUul#o-9k$v;OY0ID5~W>ELB%j(;V*Y~EFB%83VylRn9VPX;!X!A*>upp_UK
ztHnO-#y{xN)hpTyyqWqdJOllX3BO^$LSEQ;-<*KO6El?Yb=y3|LlQz5!75 at cH)I96
zi at gwbQgoQ=%!oj=W#nfNRvAHkpPBed6l2>Jv7J0iN3v8<5;z&_9f%nXk~I|+PJij?
zsyhww*G<+mM$H5_-rUgN1BnEkAMbqMqlaHqT`4IFKD4*cVz0J~!ZVnqzHM#EHUNdN
zPjMUhjb*^KtD<QW6{OEuxZPa at EVYx8-@POBUOPo?i7HT0s*0%rrCFX0jLSz`Zh?u6
zS`x$OvZDn~Zk;DHqkgk?;fB+Hkbl~m*<EBdE!BU?)OcR|^VLv;#<zwSkpZixULp=e
zBaP1Ftjh)j(2KWdk(IP4@&s!UDSmT9Ap_dufnI$$=`&&p&uCO9Zjy}sZbe{taotu}
z%`e2}Ev&SO`6ENu0`$7 at JQ0ls;V7pPM`Ge5o)pk^VIulUPRgxm=_p&98h at j12052<
zeTz9Krj`#?X at iSUwf`iON!WnRaWk`U?d$(f_wpY7kqs@>ZDmN&bfY+XZZ4GBseW;h
zj+b?MlV8kkgCh9)po&o3g384 at y$^wj$JRCagohw_H7j{ym#|#1Y_>E0qGU^emqTh2
z=l)NsPRhH6cHU+P|8=cmc7Hs1P9tLY7FHC#B`&lhxyV*|A)JRBX*FC|U!@sny+iO4
z3Rc=mkIs+F$?oMxcC<pZm5NRJCB|0CJUr8IxgMTd*JQInLp&s}xc1fgxd$#Z1Yd$U
z83=JAI%%<TEbG;7)4ML13`e_1cr9Ml|Bwm*4gYrB!#F2d>5qHyVt<^@Y8QDXy(k`8
zile3#Z0h%mQp0Ik{VbsV{Tz{DHTk1(N>R9c+i5!ts<KU at +s5d_nr+grJ;{u1lz{Yw
zhoWUOSRSXr!pUY3`Ue7=v(G%S_C3N2=?yQ1?7<CI{@Nj1eMpXLNJzLL3O)-NGxSqn
zC;kuEc%88n!me1B<9}pWC+RXvZ+%TrFKc%?UEs#rFDqQFSPWW)8+<?%B8ba`vYciA
z9gHL@)5oZtVLQqXr$C%jhwZn?UM}@6B)5f at ibv%(sT45PZscGg9Ni4S74l3>4t0ob
zggbNtUy&YEDbXWgc3`+<k5o-lECDnYeGu#vdkQXx%F6WhZGWYFZRt5hbgJ|wk!dpN
zl|-lPQ;{7OdNhg=*iJunGM5 at SE?0wSM4{H~r^W;rGRGHl5}`1!63bjS(4kRJ=G|Dm
zuAMMhcnd4ruaL-?l1*R7JIx9$>9VF7=+Z;jzx3!`T?re3^<5mDwybo}<HLZM^^H`v
z0zD at t@iE{6%ztLRKHdJ~Dl?gcM86PCc1O-x at 2DhFDnW=AOcG~VzQ0xf>09qJBra!1
zwz8;H0Dgj at y_fKOxF3l=SmOz@*|d))qt75CocFHIO%l1Tli0EeSQBCyWR$Pep<~TW
z=iTT*O<#D(xG_PqNBW{*M)Uh8?eAV`EaQADU)f3$^MA680qoB1dl67*17k_nd{*gB
zd8RbM#$-ke#R%FIxEp2zU|ztjO0_RQWOe=NJ<}@i0PQ}o<&of(xIND5Od at WXR%~T)
zEu$cIA9&MQhod*nHM2tILA(n;&s9#l>iybx2e0D`3$P|{G_b|E$sXMOJT0`A4_XX%
zG)Y4C6MsRrhbCYgu8b2)l8dTvE@%*c;}ppnA|VY%Cb#BZGFVOzQJKCC+LG_EhtBUA
zTdZe1nT-$nxNrplP$|aj**iVbVPi+F2-WSWS4?t4sh?we(HuN1?=Sw*+%02FFE`O2
z7`a%-*c$@i#uUp at 7!3Vtp98mn3u9&7%)=%x^?#UCBn*PfECjof4c;88lSOis$!3%?
z1^X|P2<hxGVfyNN*xc-7JFv$y6z0q>A*~%7eL+vgGOggpOM^3(c??YU5=3B^X%&pB
zcSUIhfYiT^MnWed#I+{{c@=@Pt8*INOEmNX(PT?I!YSh-7V8Jmd!Cn!_J>}Ia}oPp
zu786hOgV5mSRAQ=v=j|y0ya*_J&~UmfKQH~3}GbY+F;0IU`fJu9Cx3=ORC{4cYPZv
zVdCmbH!%uaTi$hi!$ix0mm<d!Ec$m&;8vA{6d!oXw;p|JFDt3$^FZdk0m0GWfDtgs
zB6`Mz&ZYB<@id1|(g0%C<FKq075p`3(SPf7caSp)T7qtp_MiNek5C3KI~G=ndIh-6
zXLZE!;=R~k4L0;}@|)8%EyieG(+D+gsvFN4IqFlaFzHi55u<u3T`~L9x%1-(@bd+9
zzTK(vW!4CXa4YR<^I2ffiHE2`74gGU4c~?Ii4<2{V?NPjc-46yp`!fr_MP>dwtq#c
zl-qH*qN=h+c=!q4SW%3cHf`6N$iWbG{;y)SL0nnp=pfDRx9wfW;s0joF0ePW?+8d8
zD3OMGXiZzJiE$aE3fVlPjGdw-2|o9jx2<6ih~W4 at mgtiCDQ=u2Mg0*KCMbYXdtA8+
z=a_?A%xEDAD$<yC`EZUm34gi!41fC^vG26N<z=|{_)w1{J6zJ^b#bJBvAm@*u*8i_
zQ?;WIGg%u)vX8&f{oa#n%5bjF!%sijQjMMV=42#5eH{!h0SYP7hFBl*RmX{H8lv$M
z2cNK=L1H`$#r1JYZt-*lr~#sG`{4uWdg83l+m?%+2JVcTKJHM)T(3Q{XMeKgz9aX&
z8IT(C1I4jg1~1ZaM7eHMW>7}p8m~8qT_#e4tz(|6LuL2j?MMQHWAsbplicZWVgBpC
z$M}j$kinnx{gj%f3PO+{jLSOBv5K)sw2;dK^Uel;9tWFb{S=zOI0qbDO=D^?lkQKO
z;M28X`J{w+A4+WGZU)hKwtu;#4*(?fN)C%BQKqQ_p{Y#b;$bU9gq~CO0y7NRW1-+C
z8(!mb%1kmdrgIK*zVfr&Q#>|;O=2EJHc+o6r4S&4=Z$57EI61dV+^Fr at pMMA`C at M`
z4gI-Yu{Lm>fY0%4u_gq1c~t<_=fbUgT{y2}n`Vpl>pTpJB6h_uH-FL)e&w|OPLCv|
z#6ZLN?j|9Owz26%;|O4x3Kv|SYuf~jMV`&n!(jNd at hrE2y;{r8yD^}E+f;=%d?Ri7
z**7*m5ufo_R;ACn0e6vpx8X%z(`3Za6Nt7A>gK46Lzb}=g=@Fmh)FpG<59$avzTSn
zmnBzP)V~fwpCHTV;(tKS4R-32T|_oeSc}-y_mD5DDlth(u;|&bu*MCpiNBFV%LA5H
z#92uybMzdRSsC9h`he_&U_3t7Rj%>w=bavep>IJr61y41`gASaHLmkASuatTd8M7!
zg*5WC2}R#)k>g^Ge4Ej2cMp|)zGWb8It}TX=w at a8xcRB77JoxSZrzJwxI?MZ9z<70
zhv%hqIY|v?hzU20qf5K4b4NKJ4Pyk352+thoSV?Y4u!K<=VV)^KQ`^g1L(BSsWvB2
zsmG)8>eExROZ|4!?Ci0K86WMjWZPTPp~%L#tGt`Xdvk^Q=GPm#VQ$+A=zkQ06Hnjv
za7L at 7JK(c{hksh1uzwqdp&})v^ku0Y&ejW{Ya%m)Yu!K5r<MQdKMwEdxVvgg+(Ok>
zN|}Nq>35GlMWDnp{MmQM5QV$Jlj2(Es<~5ICbNhCOAZtz)g#1#wv}?)uAkI+#ZNVb
z!}JfG85o4G?W!y#%-!J;dg)M-YQnDZ0D15LEbMp}2Y-j{kBUW`!A|(hVhsX`<D`LA
zSyO>N3E%z>)<WWIyp=y~{;)iFEy$x}Q-$bqwUi859|p0?*e6+1^q-!(HQ6(nJc}a}
z>hb{rz1)mQd%pNYCn|}l_<-Cx3T%*=#|dJcayURqT_?+(2Y<Y&Ci at l2q=mx($yyUQ
zeO~JnL4VG&d+@^>kv+QAg}DIaKGRR9If_y<NN0Lx!hZG5A@!ghI~yDZ;Vk3B=!Dv>
zdHFE}u{<T^PF$@^Q%HqY7X4Odoa}C?*WrtEe-)6lzlGcFCuV{&gHjClVc?IOMiUU1
z3Ic(6HELx|4<Qv>bX^SUnE6X8S<p8>v~+ubxqmhgOae)10P$M=%A84CWyh72c4Mio
zcVh-jcRw8?MWbmE`ZhIN8uFXyyI3?PY`@=xLE9FsDI$Z<<$b>5Qqw;}ATD;IPa`&f
z<R>UUZ$gQUZny&u at cjn8gWlJ)cN%ve!;L4ak#uaaz+pQ_OoVKZanD9qkJj1pSj(W0
zZ+|N_i4jAh=$hoG#(v`(u^Kg`<@_7CJDcV9zJRLQ<}l^SwHYu!6O2zj0D>>W8#UgW
z9OTEZ#`>P3#X?YQ#xK=lvTiGUn`2&qkoivydpnym<aO9@;RU*Kr~f+EqC|SG&H0RG
zZ{ZgdHb)oM7TYi}`tHGKU_Yb`8I^K`i+{#!kp1lHbV2Aw=e)jj;|?8xh77~A<Ai%l
z>)-t4Z7J2Ei>pH^#&!yd&CQ*=hKIwAlr4tP`8_HxI;&@PHDFc!2cZb)qHch~kYQmJ
z8M)yMGj6I}Om#&1UEITRXpU<MnGvS>7gV&sK}RkVsA~!`yLOC{7y_bxx7qcq=6|xx
zb8B^)i?otR8)W5%e^KYjd6jb;#q>3I!l%QExqLdRmg at M6U-nq^1XC;*3Qogh`VJ58
zw7WqhUqkDGeSe%7J0- at j<Q4vXpf>69jd(>7SeuyItN at m=mR626xhm^;C5I?t5PO8)
z3~ZnIPH9SgX#$pjuW<!n9|E5qcYk5prb8~)PB;t2JvdI^M3E5DB}OO?veBvC=S{VZ
zs;N7S%9J`3X=n0y6K|-c>C;aDs8TF$Q(diI>5>7ZSij#uI~-v78>U}>$3QPye!)W^
zzkqm2OLNjm?+bHYxNx|qP^a@$^K4+qnrYhmhi8J_g;6*DA_ALJp^AimP=8 at 395Yq1
z4{>U4TN$o+thPfl at Pft%GH}18g+UdQHw6!~i>-!t6-iN<dRjiPx5KXAfMw_LsM)Wu
zY}vlr!x47D65ik#h6KtY*j^==X(6>@B-!&hbs7Yk4OP4nKHfCHtKQ5z+CKv($!<8T
zB>YB=7_QVS*o^#)*W?&h|9?)7yDHBmDP!y~ptj;L>9fkSD~8~sEEJra$u-;Yw>y!U
z&5@=q4S2r3jIDv<2u+xF(_Az$nR*<U!4HMH%KQXpwr2p}C>X`LbfC;X&IgBR-8bwm
z-Cg?=Lb~f{Mk!|olW{Hf8;|zjlqlE1>KbI*yWs9Cs at -SxS{teZ_<yD60H>QKbeB!>
zVYv94m@!L4r24Yj`Nl3c&CapEX!IqutNf6xHydcA#1teuIfO#mXYMWM0Se<qyzTm<
z93PzL>;B+7Kx?RN#I3_ at Fx`sCQ|;P_BNkY&=Tdt~1)NJF>%>#qQolio-nUEe>W}<>
zjI?n59Ax!<W8M0}qJPfp{*hz!NIKovjhcDZ3(<CQXZJ)>9s at C4JvN%ga**XWg1L%5
z=5(1WqGrIm^eYwY{R?EB*W)~eay;(3E{><I>c at Z+UVU>`4hEo!3FRpO1U4_PzKYaG
zSvZz;08`u7IP2B=!}amSsjJ|cA~Gw$onzb|PLO?^;j^3|KYtBZK=2WqmVz6<$KPC~
z)fvRy8?)KJ&|3tmx*R71^Ulh+x*7y&iu1TKhLuzV3`WinJx$QRi5-wF at izHM`E<}^
zsL5K47f at wjQFKOdZO$T at T-t#fms}6hSXMXw8Bd?GF~UHyuv*^N#n$nb!q$8)zn<@-
ziO43{{jIUrwSO~^-z!E-hb`;Ak)G?W(he1Ys0%(U*C<nOg3#ESd6`)#T;dMAz^G-h
zxpi++P6(f}YP(oTE!CMRL1elLTY8agTM=>Ml{x$?`%B6=Oz?<-<h7o+PjPE6d}BT5
z6OxJu-(&^~X8HiIb!;1NCk-;MtKlW at fx-mB9pcF9S$}pCL*XpLSBqhHTvGvSi1f_j
zPErc?$5&!$9l`4kGXhY}ER>ulTS#zD!&*Ao6p5!d>k at lINOMJ?U2f*YCT#e>ov1st
zI(a-ZHPLQ#<jbyFr(3L078Il^FAt^9iXi6Y1xD$B7|5s_IoY<&s`LRdw<P(Xi`~~2
z!H<@q&40bUgc6Mk2)>!mY74~qX18qMuB9L;c=uE{h{m?1{|Hw;f<_V003Rs$O_S3&
zA3Cl~NMV;;@fuK{2FjDisQa|L84{T(rJpXZD5rbje$N`D?S_0rFvCgTMva33e3+IN
zXM`=)mDC}0OYFvHk<#xRsCDkSd<g`dP9(_XI)5dO(gjn8;@at2U26abv1x~@z-mP%
zg~-G~=d5Jyv at A&<+zfK<^#EBb{Zu-6UMWW0f2f`;ch5GyNf!9~#euDJPD$ik?{E%R
z<f*Y&fx93cNXOvh#)`f;q;v-01%#ZDk(lcz7B569#@Mq)c at R#6 at b?D~dM;~AHEU0N
z6Mt0{z6j$JRKk^F>W^;Q-rh$E_j0fDs24nkfYu>xSEBJ1EFFjOLI}RuYGm$gjLLrB
zc>d^P2tV3~upHwFP$YIjbXD3c9Oe={Wa_;DXxJFV6)+RCN1HN{V_|G}I}Kdi7smbj
z1fUZ#lz~U at 6N>3+e at 2H5P;HpF%%V+l1Aobh?=pTRbY at a_?OhkFK3f3B$vlU?>$Mqv
z7v;xe%h`BCi3js9vpemV=|%J+2s+i3a!~1Tq+hjrc|Hl*sE<5}6U(I1x4;knfeu6E
zo0~$I)7i`K4+B5a?9|G)lqZ$BVg4jX<;w?yowcDn+_*JGJ|KA&g=<a at 9dEVw3xChn
z75e&SvUiK~nxKE+q|{4ofC(X~3M#IgW}(22L<PHy1bc|nzrl at Au=QU9cB*)BZ2Dxx
zE~BLfdE#~k#(x8Pl<mmZU_fGZ3RHuNz=LgHYQLK&ixT-A7aW}+oS#IjM at 4<{_74c!
z;V_9y#zW|UX;Mc5+FDn!E6i(roqsZ73qEnt1ej}=0r?O;baxa$Lz90LFQxehHWg`t
zjQw^O;tfc%S=MGdiu at o=+F!C6PU<<_7LvJW`aP^uxdiZL;U5OzKS2>E5<&8mZhz62
ziOnoVF~ffG-B9cDom7qPGt|X^ItVjqhwY29*w{=ezEzS}-JoTMhcu~XOn;z`lliC<
zm*13_<>K;Vb$7gRw_CBKEXoQG24G4#MgQzMxYyEoirkhDo4%vZ;Z|`&a(YIR<HZn9
zka!r33R=(8BrHrqbYm^N@%&C=G-(>Q2D`p|CH4|73ZHJeo_PQdxoT9QSX7nL{vu}2
zLuPZwO;vAFZO&5;#v*p+Ykzc4#tp0}BwL12YNzee*f*)Sv8E8Lcbwh95Xk2M6?c3N
z9}y`1bL8GD5bt#BlqhGu;qyAyg+y6^&hm#r!37fq_%sCv`#_qy*I$Un3t{A$H$a&l
z#WO&85?+fSA&{w;G>m^5#h)WFD7i`jqZ#!^y2REByz~zn0-Jn#wtuQ$4{p)?tA6R6
z1rX(2Zz1EyR_T8)>ns~u8N<SLuLNWz&e;+V&W<(7GV?q0J$Wz3RHW~3TB)1vmt)O|
z>*w;GFqZ{eHA>X?n63-I-im9XQ1}$}?1#PZ#!E9D&?JJ5SiH#wM6-1y@>(Q*j<M{h
zGV20QeytG5X^Ib?6Msir76fY}E+sDqx%Nn{Q(GX@^c7 at 5R{jzHI|ZDPUF{RBKu|*s
zek>LXtPE%4`n)`%jh*DnpS41f5<&=gbF6^2M^iU!;Khs$hN(diID|{MQm^|x=YDS6
z1<gI~+}j=>7V06{L3!kD!0STjn%wf7^8NK)M}(CfZv__y4}a=ropnaw(GxY67;Q0p
z_9^$^vO95Wh>TNGh@@`DjX1P{P$<UJa>@g_ifPNc4{XqnVD7DL>=udXWZb98X<{5R
z?Yaevzf{)v5n1`ACR`@9zg!*7*Mr6Spj|5bvaBFpPhX;SH!M9UT!78|q!xgot1Uu&
zQl-mAW0O0f(SO&i1laYo)z|QmT3L+FSA+|x++2u;zA%;uwkf5J4RWkRB+k!ffI~iG
zIiPa)rpbIy27P4zd?0Aefu_lf%GikmYjnvwdDbEa-BV|Jx@%ubK%&n+?%ywE7g>w2
zho1mm+|SU8xwY#hv^yQ#0dDCK_kEtYxP=kf`j3aZmw(x1f(x%>r{ZG}^FLIfVCxln
zaf^P|L|-)%y=OjX$Id6BXbwP)tD-d@{Hpjl!^y!X6tDY>p`q39KJ%vK=DC7NxHx!T
zUAgIUFQ#h!B at o_;S%Cc(g}b+C>v`X)4qROFv)PFAajd at hyC0n4cHmT7&Nc3s<j*LW
zXm(_?Cx6 at eN{9v4H=qgS(;o>rkwpq%!J~v?CjCB5%Y(W2*7)@_Xj-oZvFuQUIWH|f
zLq}vLiHEsjxiMR{TRF-h>XCw1kNAIr)j}>CxtGZQ01ZI$zZq- at 6{=^#G7+!vU^AA+
z$nbgLM3gc|8q7MO4+-mLey6YBWvUkd>TDnTe at UC(WY2%X*!AEUF3M*hoL;=+K$`cV
zGyk8j&_4^TmYS;~{kF8|y^Ci~%?)*&E4Hga^4s{B_jz}VPY4K@{uxkpBzWLtQRpj<
z`Fk>7!EmEHYx!%tFHSJB!`<K%ibr$vwNmWL2g1lCnpRi3qm>g%CQ?Gey40T+L~Rp{
z4cB^3)Ej>X)x;6g<bxi3KJJ;XiGy}NZArL1lO2vvPw#l<{u|2++yN^j26yB!sLKs}
zWHN5yt7sV|EH`;odOodD0wH%;!`UNwi6nd733}Gnvji{r(ZWc{0;$i{Rp~8MjV<Jo
zF0Lv9yws5 at 57D{W$kYVph2{x-IU}Af*~%|+>v?~~1x0yG#iz at _<vy?NLyLK|twx#_
zeWx`(3uuNXgannMQ9=z5ovSeTyc6~CW%cqb%H&|Lo*J{$nIL6%b*#swOxB>Gva4Jz
z$gR=dcjPSd#Ira2d9hHIwswgNj$}g{OMB?tSDr#hqtvcrSh;Ov3Gf>h7u at yOXJlb4
zw7`EzXMNM+1^SuP->M(yY6iK=GV**$TugOz5J6tkRKO?}$n7Xeg at cAdJx;v at a*3xv
z+ZL2!9|H`&_D7n|F-}gohvmC;oCwB$rAqcI@`h~k-!X+o+*XGC at stXgMHmN56gk+$
zUJM2?Y?oB(s`~B1vw at 0hF~@_7>zz1_mu`QJ#yT;<EHAg#w|t=(c&MTf2oIXG?X9+I
z$RH#hSbo5e{qDV4M`!&GZz<n31ToeL|KuvcoWs~B*u{FCC3AntO^%$@A#gftB7$el
z1u2;}SjIix$UNbqWM_LmmaR)Ipwu9xQgW)ZfGjBMq_T(=@b#lqbZ+emfp%e~=TCo^
z$xpHY`$Lr1i`cCP=9=yD$7<|zd)ovxR|!$IH8vP?Y at ljJwnIZ#E%u}m8)$tW2|rHC
zuQa53n;7j9agEV^c`7L6=i<&i>UW40<h81u#P;}bT8(SknRf7SPFibSQk+#xeB__j
z%mb$*S`{*o8uJRG9b8u&FC2hQul9eRe#Y1zx#FSQxLBfrnu523_TQ6Zpo5zrS7wbR
zadh*>NYIVmdBj3>ez}UNIqlaqvt`1g;KoOy+|6*wl}hH{DH(cW;v#7f`c^sVevD}P
z9XF5%%Dstr-lb!Q_;l=&s+X0JgZ26EdubNL^<`GJPDAU6sV(ccZ#utgW>J3tVor-~
z1qG|f_cXEe29nkS{eY3hkRts14eil33+f1^L at t1sPP0OGiC}f9qe*%y6X5Z?vej49
zDAmWtBf*(z+Dy{QzoqO;O2=wol3|CIq4-xss)w#<Qh~SV73tv8=|Qu#q+k#$^>Y at k
z1cd5qJ(itsWRGIoC*^U4ivfSz^aY^2c2ePh0mQ$n>6-Ug&*?^eFr%@Ri6tQ1COn;#
zHB0;9IdU(seQrZepw~$_`Z|k?x+jv<^Ym;YHM1m|Nu0?VZtaRn#pul9nK%2N7gLP2
zlk5EBj=GX*c`TCFi*&v^sJKJro1i9KiC#(Y=Uml?3oguLlHc{<>t=s7PI!(KlQ2|U
zv9@$fOsV6H8s%{dbIrpD(%a$J(a_D|%S6JMDu1F}c4SG<R5>fCH*{&a)_oGsg>!x1
zB9E5J>o0W!d3DLMAoZj_Rb}@MTmLc6rige|C3I*ZIG_N4;8rkHaw)HTaJrMvnaq|)
z-g&{bd(ZVsw~#|MJGp;HJvTf47*EjyzMiK0e9lboy-cXn);wbsaBG)JAo>OkIh<Wb
zOj1we<>{Qw|GAq?wa6u4aJSpR<FAsc{W+h%RPes>6%>RKjneS}B_J7<a{*L?bP=*m
zgP}bs^ROAr5*sXzzT1NvYu+DSZs#VM1+o(_wkcE~f&e{l^B{jr*3e-~t=mYO_bwXg
z>}>bB-EDdf3~|LUD|2amIP at M~aBor;F?&!(r%eoX4)!Tr3Zr~oChvXlzF0O6qM&oC
zZaw?oxPNe6p<pe?SDZucIU0Z2>#!*LtoL58xhk#2BHh42<=Zi#1>IYDT-nYlJV2T6
z&Bqs?yhAPET3dhM=c at 9V3nEaut#?Lq>n_dDl3~R^>nGoO-#yohRNfpLw{=oqd%~Fs
ze=YvmK6zG2zBIWHs|R$>Y at AG9kd(lg=}0*Ia;MS2zi81vK~9O|mJg$Hob1IXca|gS
zgdFt<1cT+PIe|TicdmS+t%R<)#s>dc+sgyE85r?{oC$xooH1(G{1|Dd`mfb$hcJc{
zI5$3!vF3SvDd-lDsl9q`$(2muUfku-l0R{)SDnGyyi6i&pEJwoxLVcXv$>lxFsWmw
zGU5B*o<gqY!VxJ{AUoh^Uo-P%c0|&I=V!R-w@)kj^obg0JwkpIPcwb+HsZ(cYuP){
za`oRE!@z%18_qzJit<o5Ox*wLRIKf-Yvdw9gHn34-iHNa(L at IDs|xTYGUB5}HmY$|
z?|Yjs0(iB$0T%7$<txO>*w83tpg^5=r`=k|_H&l!a|nCvDjlrB81^5(t^=KX%42C)
zi%T{-ewT7|z!YafM3IiVuhFL>{Xa}sCl2A;E*5`T4VyiSuf-V5(18|z#9xNU0v29p
zL*(|l769A@=>{BDTx0ygQnDolt||ZC(3&}r!xh=T4s$lyHZVAPLO-!j-Vjg at MW5rH
z7fEiNtEeMrEhp&*qA23%udhPY04hKh{bxe8N^Q3-ni(p^L=Da>tM$c4lw$7UB at jnp
z46=Vr1zo{pIZN)1IYXn%#jBm&vrkk)Sl3U*kCps{WK)b`vkKdK&7K{PsWa#WX1muQ
zKQ&Z4CAh4E2<N`Pgsf?TqcGn)k8%I$ZWcd+{Ni!Loh{)-l*^yHPrf2y;i`$DPJ@#|
zmxkYaAEmDNHY%4LlVpY<BVfKF?&febqo{u!w;G#Q%-4K?i5P0ArRqavZkPrhqattY
zh0Do}`b;*1i>(-K!_xq>v_B9+>g<CL at flxH5f+`Y2!xuoWSZJ)T=HS142&Wr46zx*
z#ZHsw+eedQM>kvh-HGxe9*!ld*LH?QA&`sEEn*2HSXkt-QwWGnl-MJ5IWmIES|@+Q
z7>OKQfM%Q4nX<+=&;l`4_8gGanZJtVVba6)72Tw1W--~Y`$V>ea^OFTOd6?co6Lh7
z-G#Ra;J}8y=L)c-nlB0}zxD3PJEL3%)XaUsplHTa?`-IJrR<&$yYQE6O3^2hfL)Kb
z+c4vug~wfzaQc&`i3x1-J at I_A%UFM&g;Q`qmUmcrcaaVF<0q)W8WkhDipJs$jD{_x
zZ%+jx_5i;Qc{&wGnA~ce+O8eh4{d#Hi)hQlUb<!N*8Y{t-~I(mT)Js;^iYiNQ5K)S
zEA?y3^5s{@_c348<8%;9HV>;ZP3kOQMerjcz02mQl7JJE#lZt`;-n=atHXbMUSM6}
zg7+Jh5F2iGyo at Jsp@BJVwY;^?m2;D<wj)y+oiEa>P2h5^%#bc?_x-4}miwVuw!Gzv
zhIn0ZVzu?I&*<f6?+76{+(URn5oo|=++I at TPgJOMO}%OE8dpe<uUaJomVUa!4KRUg
zoy_7}#}QCi)sS}5(Uc3K-*kWQqpNWi^Z_Pk@#2WoNrR!0$J{0pmoI%diN5KSghnDT
zk<Q-jp@|Ute>wPfW>I0RotT~oNje&*8zO6go0G3C%UyFde_o9`qp*5zNVzJ#rj?B`
zwL9TIlZ<@!E7zO+1Ptu-uOa at 2A#F7R=1$_yU{`~RME2`(ydS}4rkQ_{Em)Pp1Z8#Q
zzGQ)4vO1!dRv!1W4uLKrtHv?DnSMRd2x#Wh+vtydGeBuoMJ)B1fRZ%~HEM}h4ar_Z
z)F=yWTAomm(7Ty`@>3G2HXUIBBO=spK}dx2m=9vtnDZOoMLMJ>Pv!iq$_!23<AsQB
zo*UYe!ja?kR1=@C(0_lnhi#O;RQtrH=-3aN_W92*EZ4%=1;(0siskT at _y8;)qLrpv
z7z$-n5CHiO4Dwibq0hCu`OGz8vD2JQ4`1uiU;>0=eCaeYu**5_R-t<9owmy{2=bGz
z`CPX8g>@I~3A!mHgOM#_Y`udoch`XJ-l5?08LhiF;1C)pdxC${rGI0dgil(MjtBCZ
z0WQ^_^~Pq!9DTe;GdDZ`?LYfImIH^V){_%0o!(J{K*yiy2YvCy)C;zhL3>j_BcS23
z)#7ujp>NYRq6)E$NrSp-)Yf?5K70W>fWw3WsJ<q_U~*8|67^S5ETXuzFXcln?@Tbn
zd$eY_xdj%_gztY(RiuG#*8atQ^Upf>YF^m|N4 at k*O7R9g=BJ&g*fsJ>;NC<6A<FFP
zMjt!;+ORbG^<2o5p*F*Ml=+ZgPIo(m)ln+o6)DhMGizms1RitwR<2;)rBq42$)gTy
zO)qn`<dZ>!=3<diG3l at sNre}a$j<6cXiGtIES)ZT{ceBd+aGjV>4E{v${X_;#-{n9
z!vpVO!za$Yr>wjAWrY$E_&3es@@usxbo1)_r at G@Ptmsq9CtfXtj!-;jDwh+k$qXR+
zj0a)=ZoCsxEC at F{3}*%F>Aa^^t%dbxnF|-WU|2+0NWuwELs;?>OQ(qs2le+yPM1->
z!Qfu`YI}db--h?R1K at OLiEuM1tjQ%0RU$h*4%S<W>^G at 9K%`)O4t72Z;XN_3wYv^s
znJoE5lv#zpUj~Fl_*;A=w{>3LZ8X4Bk;lcWh^`1>VxR!znk*!Lva!Q%YFLc}$nT#1
zUn-lEYC=9z5F(WonO0+pBJP)l4PMYLnAt<lj at o}zVV*KE+iMJwU^MliB!zbKz5*Me
zb1OZQFM5X&18K5LilmuiI$<3bgniaDiZOwue!|Uj7Sa7ua_m8eZ%U#&K!`>?%{Q&o
z#8xEPQicAMYAKvedwR_NR{uko!>8eMqvf==PJvlUFJQ3saBDR`x#5WMD(a-K0X*eH
zghGD|DFAdPmyK*A1-9rUNMyw<evfoXS-g(f)w6<g^fLbDcAwR~v9JoL(0E73>JL$G
zPdxEbq{u+${kE$`a5j{0k&A9)l{i-i)^E64Ev+_D%+9r7kf_&i1nmxh;|95TI>FU_
zKK$%T_l${9|LcANTR at +HcRYt|02wLm!fk(0Zyg73`0b^glNSVxJW*|=v}#CPX1I&N
zC7o9avypmi37dx1z;3D!;(b_SKC6{1e2dswG!(q{geg9vl at 81%u<=*T5E?7q!^b2p
zM at Ozk2+Qp2IsSEZ4F*(z*~>N^;{VsQQ_-3I3Go`^sav&- at yx`T at wN~%Bkh<9O2U7~
zA&MMF2L|K?X{>mj9#mAQHz%zM&Hy|DoN=#R{>QC|JE{(cYcFCh#ZfY-^6O(~)63%4
zpn25~Yp@=L)izQ+noWW61Ac!PTh59-O)VDs3CL~<M!C=wsOe2L%+e?UmgQUO2qN2-
zl)81brL9ggf_ at cqOx1AtH-(X-ZEAmvjQ7Rt#^&cokJ9No1BJF}5CW?onmFi!cN7cH
zM4~-Bj0qb?v|OP at kR^94BDzJN at 3T#JR$doKc)Z3T{03X%1Bv+5MFESSGbE&C7s59s
z63VRUu at J20C^$1q1wPt;Bjc100{sc`4}NkwYeM=O%^@g<5{MIJB+_4cJY|1BLK~2n
zKly*G!#wahH6?0yyH^b<;N8+wvt7RfypIeP*zNy$b9Eo=19a+?_4u6Jm1Mm30XsU<
z_U50*;F&9<`F)PaUWM+`hs89IXI+IP2$x}xJGtE&X%SYc`%35R`)f+F4=G6D at 6I|l
z9^s+jp!w9Zz39M1?O*7Zv?zZ(LP)@DXyLytv8#D2V!wE>gVz!=r$l&rcxEI&{n^M=
zyz at J&7{_qytto`XZLJ77(N~{8q5{l#-e}Dtk<QS~w*Q0nDQ6cP)2yT12dKXc1^!S1
z)Ad~PYjulVDno at c@zRDyeScw?x+kBu9{6`#rM;bFNFs>~gYN4~oMwON<5gL6WOF@)
zi~`X;?0U#AA#<XCj$3r9-e)ip%>@g+-u;%V3$!S6VMw;4<eVkGVI7<mmQcCG^vUgq
zj^%)o8x)l)D0L>(j8DC>Zzl5&DQu+(rga3})2KcHW67=besWHkTMX%pvH?lvhsP9)
zSdnxA2bixaKfNYb8r^?g<Q-hiV+~KIdbaqv)un~+c2DN^m^g#&?MkxU7C~RcxJ-be
ze$V{0s+cJZMcqBXw&#5EQ}noBd$+BZciI2}{^d*uWSb{G<y5#K=Okwv%(ro4mhbXf
z0Zo9ZDQBP+?%>fUp;psKd^W(J#EgC3rS#&bbEVA7DQXK<455E0wp8zc=k-h%0!QdY
zcnp*)(<X*L2oRWAJczAhHM~bPi`uI38<wcZbrSk0w at pyWH7G*l{1R?&fr7vJh5d!F
z2 at rLy&vjF}_v>|Odm{5MOml|IGc5s^gF6UE-2i{`<mQx<y$EZ(TrR2cIFG4h0$X_a
z9y)T~&|&my%AJ3awb#3BqBQ2)@{ZM?iF3UJ;$$oN;Ae0K*};?px#a7{i^RIzG-ZuB
z5{9Xb9tnhYNx(mTymbCwB)&j49tgrYf)4WnL6(AGv)_@=c5dd7vfPe%y=VLWU=cs`
zN*(08dGSt$3<6u^ZExPlq8b(6GXcfNQXKt?2;!14X<L7&6<_s4VdFyCfFsR{3E7Zu
zFE8t2Y|QPm6JXE?sd)`7w3?K4l?WrO<!R7u7wHJI%FrNX!)MIeBnv?Mg6D^I62a1=
z(GlIb)5C%-0!UlZXFk>C^V4`%yX4Bl)x$-Ik-`Q$^*sj|eXiUn8i1@@Yh0b`zFO{x
z`tZ3}p at o0Z-?Iv0 at g(O(^m0*=)Rdgv>B(H>5oJ3e0Xma~LyilplUGmN8iK&CYyHX3
z$h}MhajnAg`XUV|9IEpz!xj3L(XqA-w(L`wtvuF2bW8 at S=5lNiEX$W>_5ufCP at 1BL
zo}Dyzo@$wK17nqtTMQ5LX#o6PY>|lArWoUPPda}d*z4V*`f~=4FX*~nL3(R1!zqB{
z0ud$asLP+ka-9QL*QnK79Z?Pp?=Lbo_jsow_w_>@qUH6 at lF!-v at hAuF^!VQ>v6*L{
z*Z*}M={b_|&8h?pu=UbyN;GZBUf9M8fOhcRgTMgVR&EQh^(!Wv=p%YdSs2<2H7?f9
z(S?8KDM4mdb&F>84jkVw;z_03K7`W(hjxx{Yc#C_kmgmK&=p*;Q4C({gT;&z2rm~n
zV$n{W!fU*{6;St`a?XzC7&k!Z9kx`VMp*rM(J=vaks0|aHLX7zEH9Q}2>aQ@(K7e=
zWjQhd^za#M*0!)#BM};sYG6g6kWug|I2eDxZ!0aAl!P0D_tmBTZp>iykAX!?aZZR$
zIouFj&K0__@$9H~_2bn7%(uW_ua0z_v9FzyuZUH@&$dfGEvd|>XzwPW;w~Va0c0Hi
zmi6jSY90|!j2O?N`FJSC2PZtu3*er~NN5<-p_5{_q*RNVne4Vo{5 at 9mByQa&epG*Z
zFB2CJ7FWmedGA_uNU$RNWm$sysG(9(FS&5{MbSw*q33o#MPue!14T%<&*x4=38_d`
zFG>>%K?MH!4MX@&4a)Qdir$MzjpTIfOq_`!fAKo5Z`onoXrw^ld0c)YaIWzzJ}eEX
zdnna6CKTspm4Pe=B+o5^$w_O-fjWQu>R+&v_G|fk7G&CvKX&e>M((q3D6;rnn_aya
zZA7snLaki^+86W3TA-WP7>N9ecla9WD7NR{{s7q6R~s_Eb!frFzu&ICg1Er?<5ZP=
z3u1+7>U&eB8J4#Y^W|Biy+TWQV`df?ypMu#ql=|9+kjp4G!P=w<Woy(l8%4QE^DB}
zrzNsQ)?r0-biN`6I5f?J<OxVc6JR1rQ<qsMHIA}0yEiu5aeVCfB`JX$oksNb&2NG>
z;}&3r#^2}n1ZEP`OfA|8=!OS<wt1xgA&fVWzY=HY$NNEOHk(X{z){w`<v*>yGB%J)
zeLa`go(>H%h?nQ?LI?On6QF-4R+km=;9(lW(^}t46WhYBRJ5P5L9v^H2B>Jv%1(s^
z#_){GEgwrt%y{{*J9_RQPJ;5X>4U;$x0I<++XOox>T`DVg~k)A&wwcrQTD&puH9y=
zH5M3#oH-hAK>5rM5aEC%7>8=FNmaKy-$5<jqeb+a2U8wb#(xw<fu?^m!&rC=#Z?l@
znXFI-yO&3fQ(8*q7i?bgbW=XTN7QUg>31Kj?{stzJJI-yo3%ZD>fpJFaE=7I at 4DM2
zYB;+gPU-x36~I~&UX9f~HIwNI+rAb^y8~jeCdFQX>AGDsz1G+R at QO@t$V`(UE#&O*
z;aa03 at cXscFS^Xtt!jUmuOYc{HD^{$eCWbu0Pv8V4-Ne%e%ka`-bmx)4_pf`5)f_9
zI!!g{4fn2o#D(jb2{9pwDno;e?jaFU()Q|i(jz57a^X)T717x<r~hzgY at QZw-%d|+
z{42f01MYwhPm)X?$ahW$Gdnw{w-u3fH;aK<I2yL35=UGi(-wc at y5^uexd8ZI8aX#D
zU2PW_saUzXcTxX$B65LVWT0igdWyYjnMkw0b8m)NO)YFz`ockc1#OQ8-w(=r#X2g_
ztPcnqO7z@(F!8UNcZws{JlNfbsR$YWAHQ&?ThmJoH<Hw-sjLEm>j<=YW`B7y7aRj@
zlAanOj<LpUwo`xJDWspGy-zl#1S8`P#(AHnLoWZF1YLY at 01>bK#^rtYE!wd!KG}XI
zd#ar+yjTQXk$~m^6ucp_=!Q{nE-Y8Aa3k+4nrYUXyB~{XQMs8|`~A`|oUY*>J<7v>
zS&eb=_<4&B^hQU(cIIpehzzIzGAqaKr#`I77|?5&wl;r1C9e8~vB{Om$B+?1!~>Y-
zcB!Xd?tpmz*&793J+-cT633S6P^S at GS-f?*q+uW>%imSHm-zFH=jZf#ghI&<`J+V_
zX}cMVFGvtW)>NoHkl+BlVjYqj!!})FK(8B-#rjf%>S!9OgS#`4-IygRL!}^AhQAem
zcO2LTntXqK6-=GSZ!x9J(dBIjx%&f<f9}7(*~G`V+W0NO#vn%%nM`6=4ekv_R~$dJ
zLtI?OeawKrkpe4ix<)b!tt|d3<zD;o%sVEe0&dfGjxGJNX3b;;1JJ+%Hqxfs+C(*m
zgm^+4MO(^x`hu|fBVTY<Co-eLjGwVKF1)8Tr*wZ(HJv(Y`^8gLL#u#y?<wSB{yI4B
zdVHEjU2Gpn5i~xU0c#Xar}*Pb^Oxr>naiJooj<~^5z0 at pU7z)OT?Ujb0%{bo;%#Kj
z(PlV*f)3nIAR9!b9`beE+DV?9y6mF<5uXNp1F8GK?qhv4Mk$-;(=gWbHFx*xBgC!-
z1S@}QT(;gZY$t*xgWHhi5o6k_JzElCyT~j&Wg2TYuFy`Ef519%#Hg}LTh1~nehGan
z{NZ3Z9AFTn5i}d*i_7p71T=4z;c{IOZ{fAA8V;&c->`7d6tX)XFe(Y!Uc3lvg&iJZ
z>r&@UphVjR9prqgeqrXaxMXf~6a(z3*z14nA<B*vFa{IllX1>{EiYL|{N7-K5dAxk
zP9xLy8zBw_$UNO&-+a$Q>KH%dGN6Xs!6aJO_V)FvM(Tm)=TNX2^4N?$5^MnOioO-L
zY!Z>i at -oQMiLrCrj|re3ZHIFkoBySS-i-M+nUi at S2!h at sQke)1Y5VAsU%e4*krsdU
z&A+wI=;PuolUtj`k!pOdh|~y&SlN%bRQd8*!3#chu!Uxk8H8}5u!f4LPAD<0g&#wx
zMs4fsGuh?`43Q{Y7`BQe#`$7o!5xtM?=A5&*^GHXW+j#xOvmVohj%}Dr_r$(A~TfP
zo4_%PM&9tagExZr;I^+xj%duZNKt<X9=Gw2`gYo#`j<b3Aa*TqYcbYD4&f2TWyRF6
z$nvaqg3))7Z={qN&aVFt^GrJArE24b+*b(UUtH&NVB`EY#Ix+)H0Y}YMO`uDgO;j@
zPV`zenZ at h|`9g_?^m3u7$o`?}3Av<}6&Ws^knr;2o?a8AZr*v)mOz+FTGoHAqO2Wj
ztd{1t=L||Q6W56U(9^OoW7Sx0%Jw%b({R at di71$$y-}>UHP{%=Or$tdg~n?|n1OpC
zW?Z6moNsn=iW~!Gn9IgO;gF4zXt8_vBNl7KtX0o^1ClL&d~<=~irw-Ayh4vcBnE%c
zd8%pm^F~M-LZyHC7bwz>`ILX6u6xU6hq!FBMi=l#@TJHcFwu=zd77!FnHn$wuJ<_U
zh at jLn8R`EoY8imMOgLV9 at sZcu7}c at _7ZlAy_SC^4f>2`P9U%V&n8sG`ef&yE^B_Mb
zs6#LP`+xC>Ia!QiNF`MCFxwoxhXC;AoctkxC;o#4_J2V_Ij>sd9+7`h1NbyR!g6G@
zm!eKV&3rP64?~|LG;(y3?(>DzuXA>3IfTc;A%Z!z at 8;X1guEiwi&{{;-R;5oC%~|6
zSR+k|Swq{hv1V^p60ndzKkL?yY1O6;+U5^B@`B^c-m&}CP)2au8_Abn-fPt8_~(&1
zDh)0O0EqgyjQi=yk|lq!wbt;5B3O3dzqzP0$PV%fgm>EbSk6Un*0-9L4w9ZwBK@}m
z0x?ldY<m7y75-E+<BPe*jIDwaG%FIrDKy(3PKiOjT0zXUYU}dWrh5M=5soShQw at wA
z)bCbo>R}V^S(}&XQK(r$%U2Qd8u0+b%zf+%1>mZop+OJHvQ2-{nwLrCFZ7vY-_-h6
zUWsO(G=`1{oUi&pR5bs!Ec0<lkmdagU>z_1&u{UCFV7m8#D!BSoca#_+Mbbbx<nTE
zH9XhM-5JUQs>wq|06OIIE;91?5xa9XL_`2G^>5v!BL99*SY_(O7uGf5?&Ggt7vRj;
zdqW#WL<y_+h*p0&GYtQvwCb+u?ve~?+oj-m7J-AH3cKW9rd+K;jBVl9*VP at n><lf)
z={UoQGg6*|b0+A^F>j(<U&|nkU`Lh?AA$P}CMjG0ZW$K+CyHJm9-*;6m8Yizu!3~8
zy)+U$1`1K39JHl=w6*o7e(ePr16naQ!JG_<k_B{wRK0&)(hWoK6SzpyO3ofk*)s1Y
zN>J*LD72fG4<IK!=@W?Vgrm(%K~+Xi-IHTUq9heFB^Z~Zp=Mz=ilzJAFrbmmxdy__
zs&qitsdh=EUejb6w=p)_P&NYw44`?+We*+hdmc558OB3M&H+lcxq*H!N#rC>H%@q!
zfpgQ;!T*0(6`C05&NS3lKC|!O;_EA*B;8V<j}WnXmBywQKuUdmZ;UK`G`xIX@(WNH
zHUKV7ldMwqWscCFU2w#8M5XuA0ac!=*k}AAf2EO&rB}Me=b<-*zKe`j1R)PqB*xj?
zCP}oj(O5~YG>Wd%32Im0cfh?*p$)qo(`i~&xCwvx<I+6D%$^*nJJbCR&hrFFXQfC>
zQ at ep>Nnp0MWLDH?RNz7D`Z*0Gvk7r9Ng<I%jj8*|wPQB5Xf@;mE}IM`2=Jy3{sw80
z5uY)XO&5y?1>fxf(5d8E{PZ*5CJR4s7(1Nv3mLL+g2L(*FqJNEgEK|$7z8;N)=j-^
zPauCYpIMv14^jW-Ok2{XzlkMd5U-TV?rLjR(CaikFG$hbTaYP#D%T<(q$KXO at pe}7
zTgm~|bg0klhL!H`ZoK at CRqU%kr{UJsOA$!38Y9SCTR9;|m#yNecZuPKTmN8G%9q()
zy+?QrQP~)%Tp;|a0@(p+99G*MbIOPY8fAYdf+JKEg4<%7GEZ?dv|GeK$!tOlJ|@Z4
zp&q1L)7z&Py0Gd>3w7}rlX at a_luziVW8ngpM(E~t8SvCh?4CW$0UVH|QpN at x^j|u=
ziM7Vlu|rC0UpXn63K|Zd)<h1Q?fX^|Lqv?3<DYYdh3{F7tfo_|($`jzV=&N53<Q4~
zOLcYxt6}JS^4Emh+$_V^()nm=18Qv}6EGp2RRL(~>-Vys7r2 at PS<vFhcF~SCs>+{h
zCZc3_SjtvEncv6*9&t7RQ`;Q5=*ne?5rR?IP6jaOS`GJ5xa1_V0LOo at PC2Ob;6Fyq
z at rH6E+z0r}+9dY`l=KNb>E*va&+UJCJYLkP at I6mr{{=OUg0bfa+|{Z>pcRJ{-9qQJ
z0s8ZG^i9B$QOchK|MlQod_>opJIp6~EA}=9IM5c?65ZM&a>c2XOE<Td1IuH0)j<EN
zQ0RrX(`*8+u%}Tb%bY1XWq6u)g^oQ6M_MoijKEbY0#{vP at k{+9`Uj+Lqc?vSwbDvC
zA#b^Th7w%>YmvF~2^(MZg9yXru;Bw=lwi{WHg%#Z{6+j*4iFdvZ<eH?3zXhPz{z(F
zYHo?!-}N$d9&{9}I5_l@<M?$FyJD at wyQP=$#3(?;_dd?vwC^YkiD7)&E41Qy&02VA
zFV<N)WP{{Ez(N9(+31Ch|Ez!GtvY-E!^2_{`Orfw=_9qwih6T)FG78<zl$|~95Mno
zjzR3{^iW>S!AAXnI4Y%a2jT5J5t<lM`TX_Sl&_dmXkolHWc`QN;fvwHxS$ElIYsgX
zA;*dfhxI%<IWhM(yNH|?Ba&#A*a2n>6jmEH!5stez6(~D7ZsEyfqH+Ew@!%|$SS!|
z-h|i6yPntY&9dLeS`6>uUi57vyaX>W73WewW~h0r4hk9m8)_YTK(GXk=Str}>kD$2
zK1+Tzf6FJuVgp1Hk8yL6Gn+!hA~CD75zaCL!)X2k>g()$ZI<(8YZQD!^J9$yV~DGI
z- at zy?m-OzQaZOq+RUCh&XNr*VH$#EJs<e}999D-PW&A%>puKwhYOL6+Pxh`HN<aHV
z>^2+0jSX5KMaRObK-03U<}Y=Wu|WVgFpfH=yue<jZ&5{}EKeGFx+(ONMKtBy)7ZXC
zOVTit<9|y-;mVVvZe8C)7ZFa*b4J}_mngVIEajE`vEk!{ZajZ>bsddqxbG&Q_jZo<
zs422~Wm5XSYmju7kH0cTyF870LbsQop<jHMGFpcW=Qw6`W~53ZisJ#22_Ti}bq?F0
zxI<lr?fW5)iBS8iUEJKU699q`>avK{nW}okZR8W;E{BaYlHqUL`~8g3U%$1SY)Jq~
z-RNe9zMHh$ktTom=gr7CyUH8YVvO8cbl3O~64)z}67dOdm(w~JvK+=M!_F>i&>vuN
z-r&9Cl?7jQL-(HO*(0E8wTorV at m|@GLt9UtD7IAc*6B+G?e=v=L~X2Tx{^(N*SH$j
zkR^cHF*2kz1wTbRVTb)i(MGiN3rQ{!ga$0RX}uGOwRe9Q>3LNxD5YlD`mtvH#IV4Y
zX=Jwl2BTuTlNy4XJq%T6K3vX?{3TH8lH|DZ+o4g_$(fD5Ox{wymzyRrPEqWJNobpu
z?q!W*dW7h}M$MBHBdKw;^a$a#-26WhC5F16mIx_8?G2%8mmL+TtWk`PI!<!I)$hr0
zH7B?%Gc13hN>JPKgz*V#TR|?etAEN at E$epbe*%(v=9seO#aRsc1fV_U4%2_xOcq73
z6KnvBT%ldoZviSIy)>`$rf<I4ZAVF+tx-G2n>rvy*b^CTS&P9zhiJa_&2raEXDGxc
zJECkEZKb_pOZ&#>^aMG`t$-_K(2?>bItiDZsO*2OFu}qXEtBfNB;hS4c+1g(UtAw)
zJs&0L9}iUjqQLE%0c>I)H6en`wXoJ%ux2HtwiZwMR>}6X{FsM*e6>CSDr|C=KXw!~
z6LgN=`J^?M-SgdE?1NHyAqqR$<WCNXI^G?y;6*lY6l^l%c#65;{jbx#xxpa at wOGe9
z#Up<Rf|uHp+y`VQOTzqRBZmSTl{wfd?yV$Ucd&9#DVb|5=yyk at C#ai;O7Z;b%hST6
zY7xQK&u+>-$402vLOjiA>mMWQQ9m>eze%XX+vQs{40&U+l@}sF;lG!{<HC<`FL at 7F
ziH0g`0eVYyH<T-F5SJuMj4S}fCDah2gN}d67{BiaELJ9WxG0+?_i4<MS=<q8Pez@$
zS$jL!>VDUyg={M62J7Os?US*$T76?T at jUfTBvn0*Bj#7c7GW5JX2)*n at Em4eP_j3u
zek7+_1>@9im0Kd2gomW6x+&*+zsrN|ZT12pSU)Vn(gWF2gazcvEJSPq1=GsIDK~#i
z*#)h);IF=uq{qCfx+4IjN}~pD+xr2xR}pWK%mm1S at eQof`GSNVW2H}B^<Gr=!6y<1
z_ISvVc5?C;^b9#gDy?feFp|Y90J5=F+UpFk4iX46W+-mBP`qIa55%S@{|HkBTLl9%
zO^6Z2tyz?=>55%xU%iTv(0Q8v at s59m^t>tPYdIQtsRK06sxH=uYd6*|hUFa;Q4JL1
z96c#X=_4UA#K4gY!9w90C3{W`>u{$F0SOF-UK9Qg2wk-vGW1?{LUVLjbSs8csgDP<
zKoT=T%1X%4?NF9sor|b#U5O$W0XVNcP{@IZ@=6kjs)PYWKV#?Rb8XJ$SXzHQnq5oB
z1^4UE^-n>1%~snmJC{JH@?50{6Ceyzu)B54EE>a^M{~8|x5lF1pM&#cJh-K4L_tNZ
zD;c3u$r at 6!QD6alq6uw5_NC`ubKdc>Y!(G4DJj~?Gav?ek!}>Ko!nNo at B4R3H7SF3
zCE-U))(KIo0HBu%8M77uoS%QvdTZV?=fjec3-qUrYt+)a`};@wwivW*Bt*~Dh5UX?
zCJXdte|xY^`;^y%m*)+`Xm*OBWEwI>*01%^V(;0mUCh_SqH$f9 at E2L!uQ5vj at P=#9
ziYC+vg>2P~5Z~~GL3XUD*3jIW<zN(%mSkp;*QU{Y=}RK?U#O8;l3ah+2hL;!jfzjo
zUeI*d3!N^4`};(V$^9&55TgrbZ#n<5Mn&N#;^Me8^RVWD{^&@L`!r?sThX{Twx)5f
z0-}%e7Ag~t5Big`AsFtWtV86W?^^Pv$GwUlU#`{EjKy9e#3r8r`sx}==$d$jD*HV4
za|JD35pGgEuD2OLcFcc(?FS}-F)h~Tw(J=@sC~muHX-y{tLhBw6mW^dzhOANPgr5y
zNw=nQ$P|(I;f_FBJt%4 at PxBKbn%mxp*F;3yN}{o2C>?Z!(JuH}*F`L{9&K2riOExX
zXn69*mPkz86Wfnq5O4I!VFFf!EQEKr70F*Q9U>rXR)fW<u2z5ZVDfav^iutec871k
zEI*G;*V_y($L*8vI6v%X*=YsKfE`Fh_{zcsh)y%slK+D^&L7*DDRM;J&hbT(c)g{D
z(R0yl2AVFpHsZ6!V4R3W5cBIrYHY>VTB{!epLUhS{!}7b-g~`*3vK^9x%T*wR5U;N
z{V#?2g5h+dIMjcJ%j;a;x52W5bO^Ch{3=viB&co&PVSlt&cXM_wr6JY8fQ>X6iMH3
zQ9c9e62D6)5t;X|Pqh8=NMnZ(<Ub~Jx!@fM6QH=XSRQWkcap_U$ym>b%A!Qm)Dxys
zzdg?!o75CZam-W72D|FTt)=Ees-{M=(Y{JL#60Y6sNjFOd8i8F*z2d)_nd_x;*Jw)
z&5}b{NiZRm_KjhPAg`Zm{YA$IHQjZp#_tygq%VXC-q$#4tv4(~-?%A6$EA(+yv$Tu
z#0OgFBUh`ntpdTC$j#AphZ=tOI&TVDU(@{%(GrxULGXIQ?f08=o7bA35eYA4bDiPi
zuyVd^g1LWQjnChfM}r5-Ubl$G#W+zXl^<1PRQD^@S|^Qje_MYOPa6dWSUVutzTv+a
zY7;2%UXV>x(>k!(`<|=?o#U^oR3`*PVA8bT!Nj at c;lG&nBT^Y2+Kf={joh|+V@*Z0
zfYS;;aKjCBw^DcON}t~^jSKQd^5|(Ngu~hzI%|KvW`Q#PZB;4S-a^f=cTGVzJH=V_
zgr`FXHjMRijX<*-x*@dw<V%xD at oek1)5RC-QTvArkDKMyE}2EhXw$u>6Dj>;Kat9<
zBX>D-NY+-(9|epDC;B$P#+!WB)Ep&a1^Y6LXsV|+2{NVR5DW9W5hu~$GSwO;8W3Iu
z&ij8i>3f|mTW(vvdQ`yA8b^ItrEvEZng%9F-t4@~7=$>^sIxReA!GaUuU*Z+FXI7b
zOdnEscVEb_B8*2D3!9eGclEvCsk#NM&H7B~w?AOg5j1q3jJYyvoV^CB05+(pgxs?;
z8n$jYbB9D0AaEBm;{Hfqn+y}KolGuwg^7PG%|Z(_1XjF!>j=YyBhRQE#-j968;2I8
zHjW^{oJ2&Qp^sZL`WP);_9p+s*+c&;!Zp|ECAMg|X))y<CUP)<zxHw*U$PUHDm5b>
zuox?I*IA%F2!Q7AyQt#Zux<*Gjjj-PI|0%l_;K5rqkM+gx5ot+SyfkVoQjC^U<`j-
zOnVhHQ3bLOkb*7-sr%a;1gFlswa-2t1k7Mgy$Llvth!iyLU$o49a2n2-Tf``KR`1;
zPawHNe+DkuJg)0ZO?NX`uK%Y|m&AcCseVL8qCSa2D`&XwDm>PKqL|~Pi7k0+%?q0m
z6 at xgVSiOK0j;fF20A>{o0pwyyGmL+S2&_vfBP at 1>&Qdqh&*@EByA{Zuo_yVbSge3k
zS1r(Yf9XJOQ5pIo6+&7l^aixCUKYBY_+>-WQZwVyJ0V?LU6YLC at U<|mGhvKy?Ht~+
zGi#I^g{2NC9$~B(dVAv&CzJ~-ts5b~Q<mN-TI;1w`su0Jg6o!9K^c^YQ9pkOPp95`
z-fB5xuEaK08#hPCJ=Fa`0J)VBHwM9<!+HF08tF!+hSt=|$}M8uuH%fKn;bBQ1ewN^
z-vWUn|47nIk6KV;)cv(A&?T at EWj`t{`wIL%5|1#;=IJ8+7yHVFq#LFGm59vD8g5#h
zgt@~8LuWPW0HkH^j`5>^dGmkiltLoXDy^XXop_c?OyTpw>oT=R^FjA%J-~-?<`0Qc
zeKOwDbpREuxPT0P3d^2)D|(hzrrl!b$(B9l==CP*VD55uTTC}J_tTuXbX)->g!d}x
zpl`E{adoZBS(L`)^z+cbtngzz!NzRZ?D*n$!;-ln3mU1Mqm};v!5n{0_d4 at XbC|k8
zL)QDvi!{(OUOK+Q5i#Jod7)X0h%o_I;i-KI*jEbVt~n4`-5LfxmfIf9u$*)j4VLlb
zL7>G+h`ry{t_vdU^H^EvXPXQXo(nr_!?*!<N-=|yq!7J@<NKV0FwW7pt8+%vzQC(Z
zwmJ+GC8vX^^a^UdM;L$Qn!kkYARx~Rw)>Wr@*&>T#G)597hKXsowoWsy6%Rtv$Fi%
z2zN|*B=7Y2N7N5Im=-gv16HG<ztRq`U$SBRTiciBW3 at hd(bc16w!A56-K|pj6Tbm#
z`M&tFL;lZg(UBEtkyBhH*BMaN{TctJ-p}MAmzt|5deaK0rXhb92n*2AkBuAS>6gWs
zJiY}wc*}9{atD4O(IP~!MIH%Jzaw at cKNc4>3TpqPSN*LoG^u3c?XYJzZ3#M3)<joA
zWw--tL&(TbSFJ-Z at Wc8W9s$Fuu=@rMEJ|mQoJayZI2Yc}(YXX>SF>8}m}@w}JQs`&
zs8m-+u{Pp-0{DL?oSN at hsB0lm;WVlXNyr%`2ioUaR3GImN`w9S*&k9|_CP0WNAJ2R
zF!%#W?u{%V6E^iDOvT!Siz_%qxPyNeQ2#|8#EJ4+7)ByK(suzMGKyEp<(nN1A*l;4
zX#dTI*qiFPh0*vTaa;r0e)hlEx1<`%r?|_54CtbAN#lR|<{!*C0pc- at 0N>Zw4-Y`S
z+uj|TwJV5>p%>?49N$|Dy at b6SxUYhqdPUOYW#Vwz_3g;;UiEk<(W6+MjI_!0`iTV^
zAa=!ji19yVROIOd*B=NxF9Wy0^$wYGGy+xyBI52u)_J_ at B)tejGzF_{@}wsj9SbJQ
zQer7 at 2ReV1oRgTiW#VGT=Xe={O;yO9-Y{nsW;}w0KfTXn>35W&Q{+uLRvp+!1J(N}
zhaManvLmjJ9liKceyf>(7HGKFwvSwZ0zmVF+uP at P-dE+7^eHLD#YA1Ms>9!`qC%9s
zwFN2_+NILt0ViROE-A|1O$|B_Y5(BLyfp!Jz?6TvBK%dz-j6Zl-K*(pZjt$+L?DtE
z?`$RCJJh=XmmNfXY_wD^eM1Poqb<p}u$wCpI%yR7O}~Zu&E2xeC+9X1C#(snQ}mpK
zDR~pK#{D(2JS)siEn-)V25gJG=FI!->4CFMJ2NO=3f)?A<2?~+4hb!onM=vB1(WVJ
z%FKU at lRQhSD_<s(DrNn-a_1~@ZF|rguaX$wyZ7)-b36y$G0V*xpa at s@Uxce&RX|dT
zEl0Qb7G|XCAZ8fclBc%yUdxL!KGo<vAhr6YJT|oS;h7GO1lv=#+mz?G+3rX*$^j(A
ztssHfMmM?!K(RD;mcdYqM+p+zZCWYDj>~_*UjzN`1bMnNG6NZ-=5jHUG+SQ)61_kW
zDch?Z&Y(*t_;q&eF0IG-blTo3B!wAxVoW3conf*CKI56{L*63o*%tFEMF*dym<0xC
z+VUz0qnZr>1vRr%82k#1BA2uT<$yh?0U9G)Jp5H*QvMwYW8}5px3=S41=f2s-Uolg
z>X>L-Il45a{{l}W%dn`djwc$k2c8ntHrh?SRnnAluln<h#@@caL>aQG<y)_RNJf>p
zpsRMLqTihRNj1!RE?nw+tBRKb>X$D!xvG1B9XYEE7 at yO}l4FyDRmWBhS)(C`-DWbN
zTbvv8UvtI}A}iXr_a!bJH_W+;<#~TRd4{8v9vvAnk(P}?Pn<&OfsmB9`fKL1n%{&x
z5!_v at qZ)hgYn~gRNZKW-Yr6<fhs1)R@?u_w at yThp3os;;eS at PhS*FVOnZTyVB5pXS
zg1QNk%(#}1rIYPq3R|J57$Nf$xWd9J9ok7&{fbGeD<V?hz0U2nVq-KQzD<9nKSQdF
zeL2AAG6^bDQV#(6C}2Q`45fM*dSw at I%&{@0?(0%8Z)4SkzM1BN!*dD&2SZ-J);@LS
z;F9i4HV~{?YEcGQmF&EP7 at UP_u8MA>@#bJhD;NBSf`0d#Njf01{p0{}xUG}Z=(7HJ
zK|Ex42|TAe-r+OFQnSj9K=XeO1Goe%=>&U?6lcm$iuL{bE?Uu{^>gKEM~KNB-I=VC
z=dO^)^(OdK(X;<k74P6-D@(x8ZPM?Drk+5#o`hQ_Mjb@#(zQS^CuUe5CNdC-+csbB
zyZ%@%kj at pCbXdu>tZ{rz8(9{5vWyaNtxA`g<0Ow=i{YTK0VDF<@K=9N{PXO}q?$;k
zic(LeUG}ZnAc|<KZx7L at pYylS;LDWHr|`p|>D!S))pckSza0(u`f?^r<RUoh(X(5O
zVVuy2CMF>SwYiKcdy3|&GscVoe8OqZ&Aj5+5!pgN^GT3OhqTVZQZJG=j@!1u*cCS9
z<Jrd6sD$iD5XM5d&2E1%-WOAxpjvOP%MY(dCHASYS40`+-J(P<o*omdaNjjCj at _8<
zTgr_>V<T}bHNztjjS}p-09t`_P)zRbn_ND-7rSp9EjgyL*QDmPtagHMMxy1qspL$6
zKnDNWc~Y&43Z&DEc1 at M)VAl{#;78`We=IZ!d_H^h<7Dl}(l&p$Ghu%W+`g7!5wVgP
z8a6Ma*cjd900$z_?q6u`3rH7vO$p{F;nzIa(H-e4P_dzHZP9G6 at N8d7M(LS+qiv&A
z at xF<m29;+dGyF!byPv3b6hd4HE=Y1e#wDdT+C`C6%=oUF{oCSBPjm^398GCr=ds6&
zVYW3W2Sv;s;^Kc_?TAG(PBzP;K?*V^;lroN`DCT at PX+-JPIIhM(0<SE&_9>M2fpE>
z)L-~6L+r%YmaDm9Tlt;7=D=>-NL3MptdJ0qd~@hPx}6u=B&21 at DQL#}*Un<acc^L;
zxIgbnmt(X!)a+u#rKRjU5c9q|y~|?DXNgRKK612VB~5?%*EgTWN@?x_aevliS67^~
zaV3rkn3chYvO_+#PbX3-#H%PDSDT6fo|2 at tt|z1XCGBWi#liT%yAq{$M*cm>LJK*%
zK>6zj>@O``K0$wlFFYsdnhv#QjmSN3Sd~5>CbU~HqP#RZIO^cEr%c3SwB-KVrt8Oi
zSW-Vm3x$7WDzo;yUP}v#YNuy%y^ej5vy_vfV6Nh22Db7MPI|~jE$<@a@$5DAT`1b>
z!|kUnk=yh2uF$w^ZI?|qz^v*T0OXYh%bki`X5R*LoMwj5K)r9?jr~lAL|QVhiS4EH
zX-4m16=?-+%7bR0JpUK(5OBuVDU}0!mJ<rgFh+m>K~=U`!upu{ztkmFUE|DovU}-%
zBNa#BDDU&IAe{+>7PN}fCSpKDah7=4@%_y;sEvw&u=p?oPyJ}KFL at v`HVa at X&c(z#
z{UVu1Tp%7I!N3fG1qhr>O8-2oL$RD;XJ^Ul8&}06cPM4Z*vXnb7EOWB1M{MR#lkNb
z0WW_-{Dx`!S@|kK*iJmftyCV^>$S at N;O?v4jxQ(B6HW6xt<)K=4Imb&#fDo}7^h>H
zKQLiEB)Bi?Z)v{}h5;7>N|u*NkxrT6NEz^s4m}8((sjV|e5m5_g3pTpUh39`+`cKj
zBnWT#XFQ^~4vMV*CSz#G$e3yTD-?A{CmnxyM5ukvzKDp~P5FUH^lWsHn=DxlfEDf`
zoCw2o(xl^Tb5Wn at I7b;x)#fi0ldWFn%f~v-opxtn)DSym#UkEfbaPomH6egs%2(>&
zN&JQbnoR~0r{|VO)aN~S(D?UV at iI(afXj1U(d=?^clLxzIw{=LkQ_~6Uaf&;uD*W&
z!r$iwDnTG|3m+D)lBznCyhEq(?1{&r=?Rpiv9v`Z5%3l(5P`QwP~^WoO1n=q%XW!|
z_pUa3$vtVzUGW;yxoa&+WZ{zf(jtFxt#QrTuk9l`F!2&60Hy2e_e2>?lu$!Q?b#uM
zK_k9c2J+Iz>?ySlUohHv*^3~NG{}Fjr#vXI`EFKwjCZXg^0uJ-STt3)-YH)?kJr+~
zL0W)+BoPaK*cG6~-M*z~j|k*9a$9~d`-LLGDEER9$J8k>C*`6#XYLop%D<um2j)aY
zan&?n<!MqYiPRI?RLg3yg@^RV`p*hVo&*@kZ#lgykoZ=N0xek6Px<1s2||C6V%#?1
z*2mn7x(aZQO^Wtj0e6c`;~d0E+RoV~O1A$ESwn%w9_5fxyeCYpE^i|UYZH#1R~X9i
zH at loi`ZO|mYtwSBUn2bcL)hlhMdx`^#FKWIlF|GJlSTIqxb`B!AA0Mwd5~9s&$c+S
zTthaiQzLf(XSKjF!J~m(Lw|p#Kf at sjT60u}l9ZS1S;gX|4UZc#lyBYlX%(2xOV0FT
zL9!$cP4EC1HKb2?77Lh2jp{_%7K7E_tU at j@=PO$$wue<i7V`K+Wm_ at zt2R#axB1WP
zhnsz(sX)y{9)&x6p<su|-Sg{6y9se9py?bD1!dK5rc?(S6gnvgO<RAtC8nn~zA;km
zuOUTkhek1?t-oTK>66|jp}NVEyQ^UQkxEP2)ZKb2MYB4}w-SSCvEnC+kDyvQ*=UDG
z$!1FE)Wydlq-rDl=mql!!zmB;Q1F*1Q357{swRt3B1l5~S+&G1k>N+fZ_pkDiCZ7r
z##oSzh%RfTP}|F?1>%3Yr49x(Ki*tAgr?Qj>){8hL;E%i89L8~7K-E)Taeq`%+^zS
zMEL%}GE!?Hj9}@UWrIN>hhRo3vKa7v6c+xY5umRVWe~skI<JreuNn(U+;TG2=?tTp
z0jU80KLEgo+x<1%ka9EH&l;Sx<Dnc`1YxLCzS2u5*$9=rd<F<^pZpGg(kPk at FC-Ie
ztZm0a&l70)44Vu3pLZKmpm$0)dyR6498Hiu;9(_*4R^0>&zU;0Ut5aE-`CNd2M*%;
zJrr(8HPI#Mn!}2N6SCNMa`eLz2XYoZ3|Nt6XBli6S2To<7Fdz}EI10xfND#-rmi+(
zg1-aM?xJwUPUQuGw}jz;`PB3kmbFDhTO39{<krYbDprNA)A<RFT?XxLyDIzTBC+o^
zK&&WB$>d7MBhr{)r|qr4SPq$SU~0<o&?#my(vL!b@<vN0QO*(-$UxS$>7gmlKPF_9
zFitC0KNJuN1u1kUVaMOoV3b{9 at aMn~o-e~W6?boLF4 at N0b6TT+ZVktYT<Rw6k{O&^
zZMWi;W+}g6L?2j=*auQJr9y`+=*|#XQhe+HYuMr%8LA?YI-`xy0-O@@e;2re8D8f7
zV4l+N^(^CgWsuV}V%r8>vKM8^VyGnLd#n!D5S;DC0yH_eQujjiFU;!y?|^i19z#Lr
zy1|axl)Lz=fDS-^4Qq@{Dw|ZL&g#o)Qrs^zM%C7|Dpe7(;Kb&XT4geJb&_|p<N!)C
z_2?A%Ahm5GG&IMma!>p#kmla|mcE0P8W-brNY(KOAyv?<?%JaJm)OiZNV2+yG at sD^
zf85yE)4lgqEhDB#83OWJv9p%nH>vhLYW(XxhdV at hn`>KtatS1qyWMmdEmjxiRLFu*
z+F_V?vQA9Y2+yTDezKP>at~q;4hc&B&lin<7P4nicKCW6jxs-XdICDLvP#B%X)j=U
z3w%0qJ<JlGk}dTwTRNJf?3#x)Iysrg^RL at HUwZ{Z>83u%Hd<YunbR-C4!*V|Tm^a^
zm<t^WYG0v$tt^LgA5RDFA(Cr_gzi<|f|w29fDfgFLUqi$c~ophaebYt`Vp4oMPm{F
zn;qV`PLzzHtkq8%vvc9+eWYq9$Qg^3G-_Ad5BnEeU^Ge%{#is-VcNnv?Q at -@K<(*{
zi^PVN>xs_w$1lt4I`hDOa!B^*pgZ9%(qdyZ!j2|?&QYVx2R36A8F*4E=kyyIZlSV2
z^9z%&TfQ661IuCaWHvUC-LUYG`|3YT{hlGUq^JqN7E2Y-77x2Zy3)Pnb3_t6(8CcM
z+~mkNg~t#H0R!45(P*DszxaZs6Ajz6b6-#;Ie$p*?QNixq0$b<**!xGf*49W#myl2
zRUA5hQ1Lh2(Hhzh*RPg@&~B88jLL}AL}F|7!lFk>bmqLp%D|=@h?T(JA7!~L$Gpe1
zv at T@$IuX)B^vQRZTB5~^5SO*`_9y)i-L-mg(U=(amJ+b#RfS!@&14~}ItbRT7(b%e
zQFLwiFrwgZU}4lLkdTd~(^YE=Ss9u>lZz045`+$iZGj6K422g0ht)F?ohyCVsm7Wt
z at +@8j*Mssdq2I35gA(nsYqAO1W=ZH?gf?l!&E3gs6{aVA4M}I7JAtFeB%_4h+L-{@
zb|Lbsksfb#jCt5Fm|^Xyy2N^)CLjY}^AockRW!(|UeMWrc at D_Or&#?H4O0G-{IQIG
zT6H(4Z868VoG^z()}X6nGB2(ZsTFOO(95&ku{4zT1*8#E<I7crzhu|<;LXYZ>?hUI
z!U;x^f_8OT$tu1F`v-(7h1?~yi+!n{#68dOOcpVR)I}7 at l^z(4=F*O<>z?JkB#m`t
znsk#<+Vg%=$)e at yC?hed(_3LTD}LdB+I0&^4N6K91_)g+lBIpgLhGi??!OgSrBw16
zW{TsZi8%V7Q!Y$ERFl}*GtVzpNL=;$FJ#_Sp(%umv`H_JF9G9BtMCY+9>)mvB;d9z
zoNvT;6GHmiCxAn?L|?IXdX_wfxv0yAnc)6P8zl)DVtUs3Tl4JB<AkEhhpy#+^Z5Cj
zBd>k-PDw<w>rCE}f)+Y2+__1VMzmR-o%@2=23WKSBj7^3iLj{{jm3BDuYG9GRYrPA
z)dO<qeG-=vJ%;3-cPn71RTj!zipiAVl at LAcIn}s93&-b+0PxTlWos)HJARz^IY;B=
zbO8`-zH0eQ6t>pM-6Xwjw_R?3dn%}{UBH3QF-4G<x;}h%e#QyPor_Uw#^X;aV|34s
zf{7L}g at BSDQMDgqJYX?>!goL4&?K9rQ5zA<;lQ$>A^~?IUfXHC+TLuE%+KA4{pf(_
zd27tQ47&mJG3f*L6pnCWxR?}%sB$#u6MG)l{t7UCU?{1G^?kB5Wc_G=&HN7jw2R9e
zci-$A{B5_zio%7o19d_uHeneqbSp4oUAsr(?!hMoXV}lN^wX!vw)(nft9|_Xe&@i*
zgN at D<bfH2;JnX)rvkssu>vm9#ELDW!Vx5kN7dN)3WtNo(&b^sTLOGP3A9IE(KIhLO
zt8iROhw1wRX at Lu5I&egPG{Byv<>ZKUciQ~5YX5@?br+iGjV;MdUUI0MGUk;IqisOe
zJyJ<O7XYMr5~qk!QlEBzgIhRRizfS3dYI16(pkIIj#ttzG|_ at tZ>VyK#JLM;q$nr`
zDQ}ty<sxKV>|3wEXp_&kE;%25wy7^HXy9Y#g+H16Zo<~f+AErWm3UCfI^H3P$FPf9
z$-W4MrTE9R<*}jU!ZxGTKz`1FMDf%NY-)m{g{v0Hv-?}f?up-WhmA@>{AyaX%&_nF
zeNXrQ%&W$uxRbPOd|;l+xhPj`&}ZpkkUCxsx>jv(#DdtOQ3l%i?68<wS`UT|NR99L
zrJDQ at h}typ|HLSNl?PlgpP%76`;hhmAiQw)+G<a|?HsT?f-Vpezvdf&ngn!leRNbD
zzsA3Eob}`7P0k&v_QVa at WqHn{I7f;1OT at nGn*}qCKJtl*YIQm57V902N!-zL1=(yt
zYM`wS3N6CIEeLAzD&dnAXG{~<b9J(~*aF(hPQ@;9)zr{`<pe+t2DN3!I}6Q4{{0Z}
zy0M0s7E`P|JJELVB1+B>gZ5A^+jG_K>+(``zVi3r>eR7n?FJ at BBzeT$t1509*jB%_
z9Zpe<flXFj{b}@v_!m>Efnj{2>I3UaVqHTe;-P)gAE~R$9{7XaUbu9I+C3jNz=wms
zXh>Wny29^&&)SAM-kXgZl}#Kf!fBed$Z18>EtQW$!3^U9u1N!pcUx}+SR#?oPdG`A
z5*|wcU7Eta#)W3DjlI5C_+bj-t}1jC>)$|xN};nkr!O>6eXKhOQSRB;V at AN1|7OBx
zO}_2!8%cLG<Fa(63ddUpwSStyUM&z`xMsQLIab+!xo2+2{Dqto1HH%t+4U(Z70T1}
zr-8f@%ucMzV9)4y=b~Y@|D2yHCIWHspkGAP+t`X^l*J?<^DSA%ueuIv-172HczODp
zi4n(0B~x51jWZ9$lY7k(UPS6odwAS=u#r#$KD#XP#7r_<T5L4r3d2=Kil-FwVy9{r
zU0GXyZaQ!Gk`fE#wF6%(X-8nI!#A~ro+FFf?Y}Ko*SnRm5V}JGuMR$L!S!ePec-AT
z)j^xGnc`o4#^L4C%<~eNHgkEl{gyqKbYPKJ!WxGRgQ%pn1}ID(Q{5_0gV1Cq&&PqX
zxVB8>vW90Uy62+uM0W(Xk*o(agOlj277n9-W|II>8mLhpkANXPC=wLbjdiXq4t%qI
z%CKi5bIO4=%CUHy73y?da0f}HXesue;jlr8w<A+i*C416z(z~sk}^Owlf?F^uKer8
z|IMoF3)k4ZgUlCe&;(cgq%;^vbFb*pf0QE-RZJ09Cy}YfA$+_!64O?FJkgsx5S!b7
zjH~+>bCDGTAV!VLxWeT>l=K8TQS-4lmOcOtIrfpK>oXFif+E5uIPY2l&oOqSVK9X;
zeodI<Yz%nRSY~PVTl`%1;DyU at RlJ!EQcRTk*7w$S8k7RU77a{b2R=cP&hmN1q;bAH
zf|c;GuTy9U%_HwUTlW+1Zc#l1aQ|3;+(6W}5md+mOGtlB<l6RbWT8r=X6j(Lxq;MH
z%Zdaz6$6ZrQxbSagmIw_jm2J79BFaWez-u&>~$pT79XC}-1a8qW*~`;x)1<vtOOB~
ze&WQ(`~%`97RZ&{te)7DH66_b{cz=1`5JA^$}cu|Sq%=?2$w-H5-p1K2<Os&aVv3?
zp<x<FU!`%HKT}jp{W&Y--T=|`?40|}Xr4*zi>GV at GC@8CNu=y(pRuPGd$`%LKSK5X
zb=L?!k7ri7)`_=`r6Z-lGwp%S?8~YA(yy!g!3$vs)8OJUVoPLqy9wd`n{y<3LWC4H
z#u(Pid=8d=dz`fL#n(QJQu|VWt|@MN{U7ku_N|g<3zlknZfX4nTc>+&^|_`ELU{}@
z=;dAPl=8T#>}4z~`cl+ZRyH7YTV2a$s%o0{UTu#&fRo2iTx~n?A6$^Q<J|eWG~tZF
zrcPiUcctFrfVAa-sxYkZ$a^TMRKUVL-NasfU^)m3miSe24V1}w95uOrjApC_Il45v
zSh^Tg6yF?gE8G-x<oxKCG%=RU5M<Sw$!rUKP*Jt*O->z<-L&GXd0p}o9&n<FVTLDM
zEaT`DI?3ZT%z2)Qo3cJ(UiEDQLir^Iqv=knU>J|y_}&d at Vu%K?#)1kemDEC85g5dv
z$w6?;q*kd?%L%CAyzftc|BbhikJVICLe;+JO3caH(Xnby^or2>P<6aSu at J7keA$u7
zE0Z}YO_-h4AfV>5GNd|==+myN>DCKG#goJ&hHZ4}^V8R1b|IKiH<nM(VoX}Ubbc>K
zglqmV?J*^UPTgR{7a>NBY!)ICP!(sM8R+4;bKb>L{W*RPXg6Me7Q|}L6eR~popG1{
z-gEM#d_5*S*KWb%17la@%>~r6L#|F2-3~!%)xgemJ+a5rKY7^+lDL%{X5iXmK8!&v
zpi`{O`k!0y(#!9#5JV!i>{Zt*;}H_{X3?o*7gLNah>)rXkTbUVtQHxsMR&C;`lL{i
z7J~+Vhm>gbP&K4~zrz>-H*P<@^PC6xKLyePK>mW~9YbBxkGAQ*Zc?PUN>8_r*ThIR
zH<_o(*g47vgW28=%5U4Tji7dK?-C`V0ysBy%w&|gp41o>m~`VsqmT{I4r-og>p)bD
zw*!X(&>$e3+sbl^$xO>LI8c6(%E~KtqaYEgR2KAsPgF{OQ^3~6H^5nB&!_N#yT&h0
zOAB^J=f>|VY(k&sM4y0%$%oqLLzDBBV}>DzuE<_`^-?R|K#uhVbf&g;yU at 8B)bIL&
z_wN~K56%IrU38oEY?3-7#ZPi1phNkmf5lrN`41OP#>GjvQU at Xf&7PE)8N0r#GQUYv
zl+`35H{Lscu0Vta>f91c_V*9^H^qOBJ~Y6 at MER=3IC}}L1^OSW1hV<-MswL9^NmD2
zQ2lFCyG-sYru$a1ahMX5nc7g1rRqMe#f6^NJ0AHHz=vQGZ4#6($*B at NLxz;T5WKt~
z#T7#DRg$gAUC|yVruICo{*jzb)_gZXdlBQLf=uLphIH_iC+nXvo#6QBkB?OKjIGTt
z8Y#?X4n0mbh=!sBHYAtHe3e at A3xwdm^AQe{A=~Vx#Ex+Y?w#Cxe{-nUYZWQ8qsOHc
zj8{ZVy?&Z!|L>q1-;;6gK9~;)q<RKA391)K;Vyz0Yn at 5GT>dYTpHx^=UN=}+s#8na
z>RIrAbm5PlH#=)BQfB_sZmcuH%}F+9_<&kHN6{(M4r0)<85+R20=l9lwlwS%Jb+Lk
zfZ$d!OH;-#O{y|`wQ@=W%U?OzXNMH8lmK>HXpsiTSf8$^27!MzyyzvbuXYXq_qw;n
zJISZ=1D))0(fjWqjjf1{M1i6g4kM79xg!gI4T3sM_KtP61H70$`NnOkm9cSb7)X_z
z&Yp@<i%UB>l!vkrHe-x)v6r{z7bq}9vN`{q+{-?k3C|zWu0MKxB|6?Yjoixi4wsvd
zbMfCjQn(5)zL7_D>B%;JYj8I#yU&<u4HHDo_H5Tdw^>72xcs(@r*+DWnlV!CNxmb0
z>?(018oC|ylpd|At|V@!znEbBJH&8ek^Af-mGG`NVG{ylfLgctFy)RaC`}Hij^c81
ziCXt2E{C8t!YR+{WkLoAviURDXmhk=!x;|h+{ysisvS2pG&sW;ReeM&$$5aUh2ieE
z57XOo2mj;6n$}dH>Z#Hd&)$YeMY3{#0^H1>_#4dl(bV2liV|u4ogi;q#CJ)Vv^PCP
zSb?gH(>bDEF(ojbdKlWHqF0;u;?@;Qcw>&WKv(j+6wjF$tKCG>{NCcU at uTq$tX3dZ
zRo9s!U`T<8J)hv*;Y4Kb>dfu1X0#Fc`x(_*!uKh>`T%mgWV#NclhXXSVB_6?H at Zw5
zrFQ*!Sq<>ohFg#U2!eZey9FocTATeo?W&1M_>YQR0`ZeNi9|(yTZIR!)4lLpq~dru
z*X at y|LLRTITPxM*=q5laIMPUGhwHza(?PA&fP^It%G_*2t*9O-pPfn7+$3xl>L~)X
z4-j_mXRGmy?wN%WGAo;CTwZ2>*USlxqnIhN0Z+O~pfo=POfBf(oWVIa?nK)RuBfRp
zivQJ5|BE9qHc~G~dHd3kIzg#)fY#3K7hi!ZC8a!?;8ncTj^>ztlu7-l!8ldf&_xvt
z#is`~6LTzaU$9*M-NTc=N?1 at n{vJ?dUD(TRt77J+3<acr6MQ%HiAQvQH2}#=`ga6t
zInGIjtEX87K;MLSYEn+o|184x-E{*?D8~L`b~kxdt(s!d)(C}X26r-1+CtOzZln~>
za<dbDlyj7DVRJOTG at 8Mnmgo!;KhoByZlpALXg~Ty4ff1}kHz{W!N$hKC^jw7<L*&T
zO-~cAF0%0HF1gr(>h$Y>3lx#wqslcq<4F+DQeAx(2sM$QirQKpiVFjmfx-G^@&RRZ
z<Yy`)T0ky865)CJv&;%E4F0-CnE1fHA_-cR0c5Ww@=TkA4au8k{}04^{XKGjXz^)*
z3Lkt7h)USZf9YCFDk2@=6ZdWtSk*ttf<yI&K<0SkdrGiUrC~aM9Xcif+1q$wHE$>v
zI%J_Op3W1XUxD`uW~pCEXL%e(3ViNR#L$s-22ByO<(K0cc}gpwZU=5k?Nq})RN93%
z*?a?7>^03BtQ~AgGa+-U6_ at jAs39rDIygoWxv}v+r({V!>5^uuaY!z`48x_rGtB)d
zG!7eH;ouPyPKn5WhC$v`D3kRkU~;S1-ew;|jFV7vMl4$2EVzEOSLK5<H6A1Dfn)$v
zFu?S&(wqMidmtlQjft+ubw$glw!@b>J0jxX7<O+z8iR`Za`+3H4yg&2`XQ$k`V_{<
zyQsrM2}6z|zEf=~d3rz$i$PstM+<Qym=(C->%jiMWD===(;6*xZEzbR7N$X-OHmts
z;o${!x>#@K8>fx9n+jQCgGWEXh}L!IhLAAw(fmhxWzEp@<YrIwa`b>ynEen7lG(!(
zf-;4xxF6%s7tStfqP&N=XkT`i%`@@PCz!r_fET+}I))m2*LDj%1u^-#74;5QCR0Bv
z8aQ7n#ACvL4*gDjRo&))@j2l=zzv$t{>O47XNL5I3zO?wE`bu)5?$Z!Eh+5g2CxfS
zD>ZcOe2MvA-_t-qZt at aL{XwUVx%aB`wqP^<5nqO=15uDi`JxW<W5R1e5QTY at xZH*U
z&FY4vXVLT!{Qc?7qxK**IWxnV?^^tVM1V#gSn)`I;%PKhg_yPJq~5;-+#}%;CX__9
zcYVs#r3$D*FC&B at MOzVN2`k;$29~yB+NBRdbRp+DsWr)ckMB;3|Dzee9Hfj at UjZvW
zvrC9ub?ruRW+qZs?a>2Dqmz}*0N7sf$wnb}^C|vS5djU{>%U-0gMb!1sVrMuDyIPO
zYLEwi3!|CZjf=?J9VGjjJG<*)Gf;14n-z=U`~#3lnkH6v6;N~I-e-CPYx-&iHm7$e
zlP6jWGy?%^{N`ys6>Mi_PCC!vl|GNDo0j?HiiEqA%7Nr at gL?sO&r{m?P+~MqUiXBn
zm!9aSy<qKW95BK9m|j_sSL?sSiOOJ>LAUIG#ju3Yo~9+*kb9}3vYgbfw-Q=0k(uwp
z|0d#^5(_w%cJk4+k2-6akSNWo0k(pY{gvyTdlj~+e2C7i?Gdls(V_mV_>w_{mnaYO
zSV&wkWbI(IIk!>1g=r@{U5r)r{8KoVTMD8c_=dmV39=!zDJeG-vko^l)X+8GjfY5o
z&h0 at M&bs@>v~CB&f~`?(A_;b<gihr5w<=@Zr=+E?hyxGo#NrAojlZR`mhv}&CVo=y
zrpI_=#xK?Xc!{wc6dc^)_Uvs?=(J5u6xg6|{vI-M-qhJyE{&V^RC{{y8np_`pba at P
zJm&Zl-DE;6s<6*p+-xHIy;cZ>=_y8k4M6qO$q+o(3+<52xvRcUu$7kx^25i+@|&KF
zm7w(AZIspH#ZC}Yotq^SKZ={ugxjxLQqJpi1S(z>!L#67mqq-)ar=bN3$Ay?GOe(t
zU&IlGNH~?4K>8sF7fujm(x#bMh*-*foJJRP;dPx$5%$KpE>;9$E_RAsIe3|Wb}IH?
zv?l?G=Wwr1J3J(e=GeLDyW2DVo?wXm*`m4MztBCn>pl=(g-Z|ueHXaru37M4Sywnr
z$PDcj5K%v-Aj^b3pv7Wpd|MwobJTy8ktYN4$qNj*Y-&G~*9Zm492!ILv>kh}n-F_o
zxaaU_&r#$;>Mtplhij(!?iECTb}NMn0QpXYD*#Jh#!a9$IGpIQTP0_40rMO_;m0t#
zZeyv^#<M5k({cI at lhZkK6>p}~;)9Y;mvobOx)Mg;Tw^?X<dknLK5D3mkW?(RK#~4@
z((WL3c$y|eiOcxUeLsVp9?4DG2tL}*_UJ9T8r{ikRWm=Wm0&LSI=XOw!6*AX=!yat
zqM2z7(psjT^>fj+H9YM at 6r>75S35&o`R(CDnDyPq-A_iYF?jP&(JYzV8>8s7x7TmZ
z?kqA9zi0sdwLXnM$fUF$)Uqs1z~|W)c5EOk@(~{IEeC-f;{Znu@*E=T3V`4e!T1*N
z<~3u{9{f)&UFXxOTbqA>ssl?ZHjZf8W)Fe$fq^jRSq%`v|Ng%;9Gsh4B<H{(kN`#|
zS7Ry;!fwHg>iyN=5sHd;;-D5SP0^AXcQxsF_pnV3>E%!seidFIAjr)u<iQa7!|xe4
z_e*cSqTB;%2-;*;>JL*dCOCH$v4&nmB!$6;=3x1E(vYS&(dk!zY<d5`g&y3$RG!q*
z&UfELtjfmT+*O-sC5`;s3!`aZ7m&JL%Z%@Bp*Po{WRoW@#eVLldP<z&iO49d&>;7L
zX_wd~fvWpM{QG(__+R&j6kW8tc(l?ora$VU7X8X6qW1n)e<PyH&8i-d#nAV+GZ#tt
z>D5NSFvqA~y)gcNoTG;6Uf$c4o=S{^d4hBUq07+DRW4J0{F^fj6c9&)C3K(QP3U at n
za=fbfjw==pFpm%{1$hTxWFrI^ZJ%}ONN9|e8wvlXUvk&#2l at AV!gOqyx;pM-8Mx#L
zu2}V<0a~1)Iv)tihk4}}&PBL2SV|L9%MGK-4$YERz;*C{IOO%=G+PB6OesYa>)f#`
z&2#|&&p=Te2}}zJTs>IXXYW|UZ74;8CjUo*;#N5T?o7kz&`_9!^HQo at nc_T+M)Is4
zZeRzrs_5JCH@&4zC6XFWM8E+fPX^@U4UXN;rGzizt|Y^+w`<U>98fGr636#dV30v<
z%^`|m7P#Smp&1)*l0I&qg=QC%RQuHrN=qWrn6P~HdvVV;DfBEEA7AGrsHh^xt1Kti
z6MFPV9iBAcpV8t+*h@%IqO)~(PJ+zpc601YwTh`7VH}JoV!R>2vHN=>1`Tx4fMT=t
zHO<wk0T1bzc`%Y}yP$Y+2!zG_tj6|E4WfOyu!}i=(j9~R2s0m1Yb1xf5^qQ+sq#ki
z at sf|DW!Y*CJnXNaYzb7+=^WMMM;LoqlsS at yz?l_I1;{;?zX^i?Wl`7ml>5Vg^~!vw
z_sH{)J;j&K%rZV$7Ws+Zc=KQ-x`Fxk;!=BC5y&ptk4f~Zm<EGJ!nS89&=IQL=6g#q
zN*!8%P<1I0 at d%`EF77mcMD1u#TG-<cZgE|vdopS?3r at 2#_NFYT2LIm2VJJy8ImL&c
z3n6P at sgn|jq-cxNhg{DgH6hYO)P*Bu^htbDcH;*rvcwJr5xfVw<+Ngp8LQKthhhZ(
zUX~78)iouBU^bD5<NSFsNo6AoE8z=~%x*b<*o*93n>!;P<L%|i2cwCjP67n5osd$T
zKXb-?nmm207>acxU1Goh_B(yNU)hh&<_es<o)n*#6-po at sz>@<NCL&2VP~2p at YvVw
zztT|K!?|rO0bxk0U!;%V63fnKc&8m<&GQ(#4H^;cA7CETRcAV`N?5#z5+FBJKZp!}
zc%4KZu&_v-BqVG}QV6Zx!Oqkp4vyw at wr3QyJUw=@@x00 at w-V{yy1(w)0p~s*>dTbZ
z-7*1(jDT2PKO~HUZ<KXtC_$}h=Vd6ccnj)Wq(-jZ6~1S79Pa;PH2?WWdRz@;VZbMR
zC?i~=Xiu?0u!Z?1jGx3Y5;~x3T`YNjnv&Y;PGi^O;@84;l_dJO!vF5e5xRCk%asHA
zFR`TO)fA7^k_`lNk9Tm-fvcy8fiV%c8Pb*uqSLgtMfLpjNg1sc(-!$H=KZS$!(y*i
zj`EPj6Di&f&sbpFKO at VlE9?e_INb83jk)RjmHP-}kdboCHfXPIOD*UF0VK13`Z65g
zZhG%LobdalMqYr85w at HOQoO}e1(QhPggY$fc>}5rCHf$g*9g_)W7Lp=L(cKFP`=lo
zEhLm at r<rwjrfE~q*_$kDr^)?@@c5VrSaZRMDu{mw;pJeg^L+xEq6CGPkO6TBRI<rI
zGqp5=Uiqum4N+yHKtgA4ba)<rt1#@ix15QvE=8kX#<=)OMlMvBkgegzs0r%AYSjh0
zPuN7vIqkGyp$Tgk;XAuJ#|2A6iV4f at 6_e;H-L#hyJ{RzzxE?DQE!iq0;&Y1CW;k)5
z5Y1~+_O4PFzdjRboQs(Xgp}mV8q5qmI1S03_AlgLMWxvF>}~OxA at JLOpcn){6>M at S
zTCX9oC_8Zi0=3lC8`f{&Yh_0U*?JGE67k%#wSrMDn<XS4&+k7XW8Le!j9_)j=UdKb
zm|Ty{8Wnt<yy-mhzh1Z2Nm-i*sehueHpR3BV7U}=BWZR|sB$4UQT_aa{)UefOWZc1
zhLAn%?^MFamM3Q?fj8BE7QcpYCkR9f==0-vB32Ns+SJJD at xRhi2m{evuwn7_w_WF%
ziMU=O?hogiEi_6aGwAo|a%q`=ytUy24d%rX5=BmeUFJuCohiam7XYA+aooASxTp$3
z!AdMCb?5<P&uQ*%q_K{%b7kIoWY;6Y?^dnGI6OoWv48cH1waIUB66E+InCN;K{?19
zJ*n{Wt!*+ZQ>G`Dtz1wS6S&MQUxCLmQTuIz4Zk8KkX8qw0q(w*9A-^W7<|~_Sx$PO
zJs<US at 57HJ_X{pypjvy2OtXu|X2DgiI*JVO-E9JnEjA(RYGp)QiX{CrSLtR=L$6 at v
zm<K7-o%t3_&8Pi;|NkmPYZTS~h5w$33i(ElPkubs`CPt2-#LE#W7Wb|PxBRAMfIxy
zEg|JPyecW!Wmx7ENkhwd|MVcYQzZ_|!0VRM<|BWI33K_LsR0`F{|cIX<>P5h7~x9W
zW+~r=9Z{MZbnyqGKd}ulf<RPB?GJ;`e?jIzm#*EKFLB|22l1QuPmYtfLR7$02+b?e
zQ?k6aDq~_&<FtB!@3U%M^xgp0-&|hut38Q&f}A11i`K9<uWiu3Od2Oh9VjBJU0yEt
zmfq)(ZUK@$<s!W(;Pa8-!o7je%~Tv<4QWui;yGJn2hyUS@{o*^`Rw|=EHay1GET`*
z$|L4#PQ7S<1J*F7V0_qU*rONT0xEN80UhR(3|~+HvZ;rE+&|)|Bho_n<2!8(_~M-8
z!ct8@#7Z=uXq)6!ci+W)8FDOt7&@TH+IEWIGg^P8H{664GL|%Q*BT+sDyN&EE)k;b
z|EY&QCNICxmcwGtj$+S%Og$|i%Ve-2IrbdlY(ZLo=PiB^?IXsa+%8LL`dQX>*!4_Y
zz{1x7f4AYEtXf^xxi>3?K{zr!&%^z%l4<>i7{a>d-wNko6HmmNc?y{>vJK5j?Mymy
ztI|NTO#z)la0$10bW<D}FZL0`Mu$jEM4@^A>;K$Fs<K}cIKh}F4WqOo7rVZzCRS^*
zx6 at 63%Uw?w@@MM~t7;m7h5I>;^t(80=Iv38Ay*?Ub<5M?0~S0y3Q(DL{p4<q<@wzw
zauy{`g6rqJN at rb++O=0M%K)D<B5PVF6;v(1B6f<?FJkjK_i{W;^M~M$ioaGV>cQB?
zFly73eQ<kpuU!<DW7V at S7cg+G2D~!)_lYTg?lN#*i{4lZ6#N at hireL_D2hKr<Z`5%
zZUERfQtc1yuT5-`CnLX>t(3E$!)UEMdR!Rv&!!`Jw96&Q-QX^%D-ACD->ErA-U|^5
z{X>m2|H-aA&VZ^*6R8}Q<IAqxiQ7`MYyfC(Hv^M>TeKU<S#U18(f*ueSG;7~C(jOl
zz)n&fT+#foeX%XJO4#l-80!kOZbO-pyA>@}&xkr-y{%~WhGwf(`drZNGyTgUA;zfb
z&OfOceZMjRl(c2B6F`K%46tk^K2Uq~B!19m`9=R1Sb<EeNd^OLQ|(*%#pNo~W=K at z
z0e>_(NVfI1LanD8Tgbg~p at m_P^Zqe^AGtbm%#P`cwvnb`yw$nZer9M}kLvR1)tNx)
z?I5p;4#=w_*~iE+&Rtx|48~`U23`GTVc at w$TIhxNcou$kG=XhqAXF-w%GcWZ^F`&h
zKLb%kCF~YaD5d$-5=}T4K#i#oE(utzNp6gm%Q0UKGX9c{ZMCTtZ;oIh3)|CweE8G-
z+zQJK*s(a00yGO4BGroFj>)&4EJbj*XC_6wF5?Wr#O9(mSYW;k`!n<V)LSx)YTC8v
z$mAx-?i1<L at 07E-yEpbrD9++PjkWBf&kLjFA<V!>E2h5{g!D2tKubGeP%6@);RzpZ
zL7!HYZY>8GE%^^hVdt_MjmeOIRb}OX&r#uve80Cp|8*-N!P%dsV-*0 at ror`2I`+QR
z?SB1!`BUce2&r56Doj5Ad8dOAejlma=Hz=X6h}%(xwe2qB_qM|rIC`Rz2^*)KM9>x
ztO7LoAcS<tmXOil=a1{%!%mcEE($q=K1OubO6<~>giyKr6*pCjGB|O6-*;DIeJDYJ
zZju?<^7f10s`r7fTJ`Ty8n%NZ4jzH<&AVf==5BSY5BfSel7PL4Hh!aM5nUk9poEkL
zPTJ#1g=c&9`dS7?AllSpZbCF;FU5-QZTMF|6DZcu8rGC~j+4f^uy2_)y|_YWyl-$k
z(vkQjxn&^kNvqoGHTa5u%yGEUAIXqp?|$nFFu_#jmRETx(140%&~DIZyB#hw7Uny9
zr<Kad^WAcT*ust}iT$>JNDs#EJG?-F+^3Q(Dt59$T@`)y>Dik>)o2H+Pou5wU0_l4
z!mug%KLX%r&AbG0N<bVVFS^sjfL%(r&XuKh+ioC?z__=#!X5a3pE*y^6RLy`{1g;E
zO8kV)+pUQq{I&)pSgm?+KG!bN3#sp9zCY9Fa1vH&OuEx$iQ0Fp>(>NorLM&EDFwSR
z>l%XjZ<WHz7~2c?r#5eIrO|4*iio}Hv3P?^B4et&JXoK_Ym{Z2&cWpsUh*kMdM{yO
z_NwL8|M-nfu71sbrGiWl4dVLp8X{ffIz}%KwR0+BJPMpYNT^iXc<NclYq#m%`7#;e
znVI>b#Y9r0GegI>cMA08_3mZ?>^vmqUgyPRS8>Vnk${CaOAqzTeh52-{rL>%)u<Z-
zY^O&1Q3~2nmMreZ%QMTPf(0rIsc$_xp_E}_1F<^khVYMnb{SH|WaLjL0r4gN#0QmZ
zwizM4 at _9H2J}}MYLL~NWJ&baXU)(>imx{1Lwk{y?p_+kt_1PTGpZb25?<bj7+{u-0
zX?1t7u&vojER`yRP}1p<q#Sq2vy%VqZchHGdmStd^7B{iAD*pG=bZrWjn-Bl62Ev<
zDNAwmB2Mamo%^Us4C4g7MLK4J3vH*<IsQk<d9<{6kA3*1pUf<)2gXxnoaH)Jltx{w
zDhbOa)y)Pf6}r=8s6(7Q1<!@gKVZ03blKEjscMhp#8NZR8Zfqb8*^bhW6xVkG*9yx
zbnDJ|Y%<J|2(X+Yat6L8Co8Bg%<qiODbOLOBis~!=@<Cdd2jmkRXV(ZzSD-A-o>8t
z%}}e9#O^QI_T}uG*aEc~$&_RuOny^Fh_UzI*ap6l=|{!3CIHV1_BHCx$t-sFN#(-k
zpD?l+ZucEeDrNV)Ll%X7-}9uKYaQNG$;$-VzeKgN at WHkA0hA?pCCC80v*DDCj!PX9
z;$@V7R?%Xg^$3l>?Vwp*m_*Dy&yc+Zr4{(*Ra=&tHElz!oMtaox?V at Dv9~u-Qjge*
z;s5&;mmXZ|PQ7kz9mrwJW0#1c%2&r#o;5CRI7JHTqgKb+5iA1PleLb6()dEjE58ub
zM25WrV)<tN#X1ql83UJOEML05%;E3p9*>@XY;Y-iQ$=6Zh)$Vf=1P?!A0!s?6&{k`
z*pY}Giogilt_(<;K2h-*)okmjmb>$1O>?GMM+07w+Tft5AG&d^X^HOU1-4c6@>Vcm
zLezL>JM~JGV*R$+9$5~|5uZU=%S1YlP>od5BT?_75{fNEG^c3sl}2~Sf7hY^%T8&3
zvLTLKg>^#F`WZh=0svJ2E@!?~JIaaZH&TwaLffS5iXS#keSV0mq!M<(`^#AUJeaN(
zwWZYxXujYq1YV)d00K_U3mZ~fXQ>Pfb`!T`K;XP|KH9j*=-#NsxY3X#BvKHIUI3^G
z$`Xcp>Oh`NTMj~|nTA|#vI}5+GYj2+Y>)YS)bhcHKBOO$agmq}<*DI&!=xqAe^I5P
z7?A1>nDg7!p#|i?YG+WR)j9jko<)aAq2vo5=M~55#75##;_6aiHf*;!K8dd=N_=69
zwVQ6CuEdbsgyg+7%vJ5sZL9&OE_E9oCwu282zk;nPiFi8=F9-X5YBCAUdAqe!r)19
zS5XUxx=e5U7Uq*?_7FbzdFa-HC?<~G2QwmZu~&ZqX9^ItC!3nP&<t2?&ZZT^{Qbk=
zP^FpVW0Av&Kj<8oIGz6;+Yr`zk`I9pHb6XTR0Mz^<?nii7x(giq`8kFYpaxgKh^EE
zbWUwsSS;g#L}i#=1J&n`dM4(7 at fw9&dcp2t&CIgxc{1WF22gLG4s>;|5v_R2X{ARZ
zpWbg<VTGi{0`d2RsQHb>5bo-{|Ncs+>XLQ@!=!BVbow+w5t#<LOzB9C6I2k=_~<vq
z!mVp<?%`%tAOFTC<9UeR2tJHW4lEY%n?y0k at 5KGfI()-+g+~g?_-fRDbzc>nh>Tx5
zB7<o-<lQ&1Y2xBSD6P(w;@N6b2>JX}M5;=dLaul?uC`;2KITA;_k%Di{!3Wv!qSy&
zOsPR-b{(t5={N}y at Ni~9v`Nbs*Fi^<S>Gbl7ELq%a_5X6?p_dYi+^U79Q*E4!hi__
zH<7Gb=SJo#F>;s3_iVL)0HRRCFvZsj%fLC&6}slw3CShQkG|578D at lxcrXApR+Xpj
zAjR?rQ6HlKejs=aA>!>;(UwC)%eh6O7jXFG!2CoDK35v?2p++X8g#knTz0mD{9CoZ
z`<`hf4>mTJuJ)R{WSLTR{nd9pHUoufz4JgIu~oJ}NPt=<P`e6$kmEM>RIP}Ps7M)V
zM{nd)tF))$3zaKvA4DXfV_y at H3JkJ78zv?JD7Z`Vk*C_dR32L;F+qwaqqr%|*FEd%
z>!=zN1fTo~241e6pJ>EsZ;kI>JTzb*9PP?lEc9h1w7X3gN}%Xz5tj1c=!Y6~e$x*E
zU;Aip%*zy0)B`hrY4eSByMKR~>b&hlA|G<7?T1xIA22CLtX(KcXO2OqFM!Pmp`hoX
zf8}LL{!b-$nIy5p#v&RY448y|;$c2UvR;_ms@<W?Cp%{)0b?s378&7mK#uZ(av_l}
zkOuo*`-<U_iCg|T5HQ+dTa33QovW~Qf-p~+x5HtzO5M?aDi{hU?dHJ59;fXxkldDE
zcJTH at UHZp!^ZrEme*^lHn{I>ei__X9uSFi^tkA~JzqUXJ-m2W}cshS5Yp|9>k=JKS
zVRX4o9X5l{1Y*Cd*oTP)e{cf~k9|D+7g^lA>J{4<Z*6u3gp=E%9Q{-b;p8_E4r-hT
zOhkw)x((!i>-6;MHR~k`G|m0u=Tp2aj#$FY>mWIn`lD}bb?kNOJWoGzI6vI#X^;Kv
zLr(C1uJE9P2rObhu-?n*0^fftEj?6P>2wQF{)OXz97QEcY(?u!+Mn_*6-$iNfD;AR
zbxS}41kG<+gwSIZz~6V|kJ!={tz5bYwht(bAAog#?F`&Vy}lT+m>~mco@(e$R+)Ge
z*GS8SN$NCeFkM#O_vUX{tw0;vmCcjoFlH1l4q6<XGQUnZBcllc2-*X=)}qW`V$-9=
zbI-IP)8%`v7puXE^|-b at LRmw9gPH?Xay?3-1*tyqZN6aF^2!(@yPN$w7tNSefGQXQ
z4Ai=R?HaL~XyMlpzna*4>=tH6wz6(;u~h9i*?{m=W-!l{VP730gZugP+QgNeggSNs
zt(C6ZKd}*#@r&;#$JdH57sfQcE5W+C+j3fKf1GPXpH<5CHK?+;5;cgdm#EIsN#jIq
z;KCE5NZ&#wm{Zw0BQvniW<?|Srdn0f)Zw0g8FiA<kg4WKzPk)Qg17`<gmwEc1V?kg
zI7S|VYC8fvoHENSBF<qRG|sDD5X728D&c;oeaEm)eflwgtg7s3jIct)6H~mbCoSl{
zE{S^i#0OQ_5N%8fB;S+F11cyK^@UrWl|(Jxx at oCTp?`rePcqqfQ#q&75m+kC`^Fo8
z$ak7Hg|P at GBAruBK|?Ih9#>*ue8+VNo`Pu~sRFd;*ugN1C30j0<_~;^+HRs^p}1`y
z)ao20+S~nr-OThnPIRnVY1?LjL<^^Je78FjHk{u!f|FK9In_7Rs at obDL)Me8E_<{D
z9_hGR1I__X%q>CWryAl~Ti5)Le+)%`=wBwHJde#Zn_CRHN0Ab(LCylzBaG__9k_(H
zN(M+r`ZCPoV7s%yBTks!mA^!K-N{X@?nvQRs<-tb06qD<L5Qt^=Q*eYAD_guTxE)Z
z3a2<8$e^;tqBwOuE40Ig-GOPOmb3j60s_~?<WJMiV|L3Ww{=Bu`&V|{2le=WVuvZ|
z&oivsCNDTpRw%O?E;RuGyFOk4 at 4&sp#3j3K_M5G8SJ0+<f_sOuBrz;P5k?R{`|XJj
zfv_^6Q6pTrR^l}CyrxS<T<pew_1{}Y44HuQNI#$i|0~JyC>Ez^*qD>{sT=lYs?veC
zag}vGQJsqS(Qo-&kp$9yQgF9_7<0E`=;<}{hrTuFR%(@;PQp&kU?Zo3LL3{XCTi+=
zI_L<=&bh4Nmp@{6v<v1+=j|)@m`=6a`MB;B@!Sqe at j9n_JnoRlp(Q-KYj1L{fLN2&
z0bc5shyD>m!UErOzoNklowi*@6=+CQcQA_KBV59}n|UFxgkRT%_KGfl(89bSKxLpK
zV=Aa0^mWECR58lu*M1){E&v at zNZ*^T$16hLr9M4q*9uPIxqx!jTq$$E=)eN35Ao`O
zN25UhsgT1>ifD_FWd$iiG0LtFc|#P^!E0^NK4XSKaCZhbNCwjUdh}h at V4$?>`ag at o
zF%+|#x8Mp7>;?hk75bBZtki(3$5@>>Eq8SoL=S69K~<;yWW1V(c(WUE{R<rKiqPA4
z^gULX!X%fnVJldQ-?EL&{Nq4?Z+v7DRdzi<Tw}c+ai4mlb8YF at s1T)`-t?^@3!07;
z#dp~eQMgL5cczdNb^fW&9wm=Ve;5EJ!!hBCwx9*7D!2=DcDx9GI*aAzh$3MoFMn^A
zVC~<GTWe35KPsyl_-7>?oeO~cL9Rb;baap_NI^5!P>w$Md5fgGvA at QM7uAYI_1(fN
z_O(P^(ui#>`$FWKGVNOp6A7YD>1U$uC3?t$>ge?{B=-3NA4?xex(}WoRWp-WV=#D+
zz2duPUJ!Ikd@!1S!VR`+HZ<k8Pm6OM0i%TZ6MKn`_9C at 7u)MI&Hc0}Itq8+Cc*{fg
zK`-YLI372lDc)g)nBsfzljZpBf;e*{Yiwf{SEs=u{h<^IineKh@&Vo_1gP;v(g5TK
zpAMQWqwEiKm5KPTEstb^%v7Kn*ON~rxrLIT(NJ_S(^(LI?)k<Hca`SNE at dharXth#
zV$YdA19^ad)s_!(E95?^*tt>f6RP;PgJS2f2NvRrk{43Oc7DV*{%)f=rh_P3k=lK)
z^aRU^F<REKlT8ucR(3JK87eTF%EWAk#PpWC=03R>R#g=<qY4vf`q^Nomw50K%j%pN
z?w_P-2pMC48&xa}deM|9y>I|<H=5XA*-l^*4Kob=uAHzJ^VHNNxRE!qidcYUj#D~s
zx|Qk6R4y&2`M-w8!_B-f7eX<k<qfoWJ50+=BqTP_ec{T%8)s-tm;Yq_lRh)ck*5DK
zSdw73-El*asQPa41owYgr}aFbyaYb6?3TDDwjpePjT&R3H_kihgsPr|VFVw81`ABK
z4SY%(2dp+Ilv}9qySrv#=w)3=UD!zhgG7N3b}vn=>ke6yc6v5!SxB1hu9MW4plPj4
zEEJXdOx8=ePN?K{CowX0a%kv>!BjDs;d4toscoqfs-#fXBVJD3Vi)wRFuP7|v^ai+
zeW7Z9jaL>f2A<Uj@^K$OLR7>0dy)VxhA^U_n+Y2KhYy0jUfNY)LkjTlLMdz}DT&QE
zvHJzwpjMFy9+#49$BA5nDM`J=?IhB_+S|Vm-)8!%8k;c2v-wubP4^M`9gTiZj&&8k
z>_~B^ktbdCJR$+zCqptx>)n~*>W8_gxLYxQ=@{k|3j@!DUr9 at UpaC$GnW!2VVtArp
zSmR=Cg3-+Eys}0sBg5J6G76>PKa>N_vRro#Uw4vN188DnQ@@dX4c)uYRRrksGRK+D
z{V>iH1FBs#zc_#9y79!j-NwZQb%Ks_PU~TUaHSfNw;{*>#Mm}7)C0)C`Z+?<+$Sf0
zva9xzxkW}$2%mwZ)ZP5#O|%rKVzJPB{&7I%nS+*VGg`uYS!Fu3>Xpb at Ww=UE2B`&1
z?5m+(q<N5}M}>_wH0X*CcqK;u)%wHuCfhX<X}3tz7|>S-p|Qd^Pt2O*?bJ=X5zWyp
zeA>bN%(xh(JrHwIN>wtQ=q<Mv)ub1HC8gPV#F2Bi(J9+g#3U+g4{fiSy^e{|%GrAZ
zJ3UVQRk(It9IrJFM=%>`6TYFhzZJ18W^8bjJStE|Wentv^K!kuC3tSfXVo_XxAH6I
zrdWkyuO(B*bPRt(v0?|bur`bK9D;q+wWvA2*z%cAy<%Q-Zzm7uG-fYzAh^VTQ;C8#
z$eBuxncOhV<SFLdOt(?x(ZbAej&k1h1Y*l#%yUV%Vk<$DFT|I>+VH~N)|Hq}fOc|P
z1Ur|%w-B}l54uufs1hMLa?UeMyTeqY^T#pEc8}RX0pIwE0*3K7NjZpjRI4Er^zLFM
zZ834VTaHmQRvmiJ{QC~WQAZblvQAo|1G!`BRz(7?h<{~H>}trTj<J3^5PehdJpuU-
z!K`hZ;piZ;Jr5ZmP&=v`9f0{NX1uECe4t~$t5gusH<SZ2?xp7`WH4PQ@}vB)nUL+j
z3C;#IgmWQ&njRy^;ee$et!&j3aKLGZCFfPcEs~n(mI<ARA_a9%zp!+F+a2DYLzDS|
zRi)8jCi^={XMCQ<uWx`^xwxZL%$Q#PGlNlyH$+wjvVoJN6H&#TI4(;;zj*U`GczY1
z_6K2X9jCnicrUR6JP!<59F=?Bc%AA3*~0 at FR+_-bQ2_V*r0z|K>($W5^LCGKLi%ow
zl9Aa7hE%~xFT)g<d`~`qb!2)Bq&s7hbaFKs_wIq?HH*J*X;TeDkdln7DWMN|>$&D1
z$}Pl-3FPU<O)<_Z0yuKvmG({hLXu+ITP3Bxf at NCBpU;_VbO?2XAPR`>uI8!81{%k*
z-oBLng)vz0ClAln!$-l_fcY;bQx{~SjJb+_i}S>pSs)NM2<mfxNxJwL6wcY7y~Rtc
z?A4mQznFCQX}3?US;?v at s4D)}J2Q8Bk_nb0nFq;^Q8$O~v~Nin#U3kyk{PJ?sG^Q2
z*LBKxW~}ZeoBTaszQlRr#tB(q`@TuzM<2 at B`gK}v*b~AqF%s!ZRZlvsLU_c5*;S`w
zT|~62RX%r)-A=B5`D{l at M7m{OV{RHej+r{h)5!IO4Reib8=rrCu~}j94|Ky#IhV8c
zM{@bVGbc0}?RO&UvrB6xj at 0MAgSC<a>j#77bO*v}IhZ;xg3jWDFdrc0Wx($FjS+`K
zmE1e-l@~*?>5YRgg%eu5<^Gaws!{iC`Al*9sZj0`Ki9Z_^mr6Q<vq7>Kd#cE88q>g
z<aX(7J0fjPtpFEbbvj6EJMcN37}tqs5MItyWCnVpFgDMAqQB{)5czESh?a{^93Y#<
zht!?kkm6BdYClQ~*&U2o>0(CPUMwDqC76u4eoxZKK>OPGaLwA6XrV9z!TFrm*Cu^~
z?zcXkvRI6N_hs3C9(+tRjG3So0d0HB;Zo{~LI}>&gbe|8;ykJ{G76 at g!XsMd9p~`X
z<;$7k64_fFBy+X}`?tcpO^yFm(*ji(^{MB}ZTj`F{3VMDj0SB70$o>KVjJ;@EHlG!
z9 at 3d?ayKc#4?zYLV%f=T`5N)O1xPdh!_lrhQP{bE3x4%S_Y*k^F3Yq^6T_fQc>_$}
zA=6i!cdou%IZHAkjjYJUONRsSFLU2d*ReP%)dU6HQvvm%?V?#Z1c$gjYP8m-A=4B~
z5a1xN14A604lztk&A7qOsx9O{?=9qK*#pVt`|FT=ajI&(xTv}#?diAeoeIWh_#>;7
z<cF$%#x8fH2Uw^6kYjsN6=5t9x}A7fDr(u`TY3bn34;#}HrxA376B!yIDO1|zPxKO
z6gd#IH~S>%FS9nbs2%iz18bER^e(;T8<eK+gB=r2>N&R|Q)KEl%;JHzz+22H;GsbN
zH(j7q9Q=UhgH@*Y*}xCSOR>}qIa<0R2qN--{0EG8&%T at fKYq-+!4Tm`_eoqam2RKx
zGhNnCk2XBeq(80#{aZ~y0L6OCC<2tNnIh4@<i@)gQ;V(JF6aRFFfl-EHH!NHjO)K&
zfh>J>4oNP5jAnpK(o2p3M at aMfb|F?LV(#n$nlx%>>WUo$xM)ISc@^_S)iY4`7Me7F
zSr+$i?y|skz4WU1aQBxe{Jxd+)G>f8KIRv$rCd2}5gT5^CKt>+8X41EL;}YI&8vD$
z1O~dFo;D+ZFjQ?%!1Bszq;WIl#5i*3&jI-n<s>|50e<1>e at KbmD3ozE1$=PKSuv11
zj-MCO5j~nU4}8I8 at NB^jy{P0j>A$Lf;y#z0#69e*;I756sEh#p-gNlPyu%)03;(v;
zg6HP39lLC>xLVEhF{5MIiOCxRzVIYY!SQG%;I~t=u?vo`_bvx-Pl-Bll3KO=>G#WR
z8`y!>{YvdiipBs9K=QveG-b2ajkyx7!nS_D06>iD^G31pQi`Y}q- at Njs%9(1S6nDF
ze~f5EE?4uN>Pwbz9nEb#6J&jVx-a8x{zkt$+ajg&W!E8|tCw_j<068yp;z%ki4f~#
zh>eWg`>0iC8)W_WSIU(y<S2D#uQD`_cx^}*Gr<SQGQy|ANMFCT!I?CkrRCe?SpYt~
zmHDw?q^Ck9i`kw^s^;j=av7aK<_-$ce*zjU=oiio1sX6VW?>qZ{$_`q#d4__Ku9I<
zeT-E<NX6c}YDNk~Y at w+LZevfCkLsWh4aQ<iaRTIS#=>b0{AAWnmK at s*y9KMyvR;A`
ztPMGt3Cz>-NBAm_o~WT@$Of^pcxb~bsi^n4jw^r!6>f!#s;1J$zUS38;*(}Tf1U2;
z{ax{D{;LZDVO1VIJWUVkpMs8+0$OZ>zg4ak8$(z80&_md+uGhx at PWl;NLBQt4a|Ou
zZJb2%bGEaLb^E1d#tcLk6bW55slWJb0s>%F6a^0x11k(SB4RVR;4f1>=)osjGPPK4
zUIQxKkZ7DQRL6I0L&)68Y^cw0e=e98ALQ&h!_w^i)c6pm>EeI?Ol0?fjM}ZDXT~B%
zk8%&z#Zjeyt2eA+4eAf*XMlz&OW<H`EYlK6*tX)>!$c-NUWDw2_{r|!z&gLp$ns)8
zUS&;L{;98wD^{GYZJ at Gv#2;q$upW?2tK8OHqhHN3!Kd|P)qwg!_?YKMe``;;4``Q!
z2}9XI;b!!K6`knt%<B}eZu{3TF|5*@tvD!B!`^xv?;oQyr`@|VS0%=QgPEpS%Og^U
z6VQww#r4iq=h!@sfdEJEhK{h93j{XDNn+91Kx&d)O;@KNZtQHjqz5ASg$bp={gVB2
zW<UYEV{pk+3lH}FW0&Yve~cpLEZ0moElB-Lj`_B at v+}K at _vVPwUDm9XidQ^wqu)0~
z)AITA0ZYyLZ$fpuzsyX)ga6XUzKu~204MpYDtS*}^7{>TitF=NGWT{X*=oA3@(TB=
z at sbe#)<8=vMk at I<4wpQLUFe&u46GAi29#D%cAu8o-x;s6Fof7ef5FedFyjkyMtL1U
z*<>dD4oyPO9i$6aII!}Nrt-C~$rmhQN%no1=wI)I)%Wi}ff4%e7zLXdiXv0XTLH)w
z-z}s5CcZXILRD9u|9Ie%jX2;p1e|n=fH)rzK_XfP?gOSAstdM=gyAOl&S)&}PKga0
zr!wEsjR6e7Sq$bZe|J_FG8WTHr#t1#Lx6!FUC%)tnMFg#9*P`-H)^7T++9Yqt!m}!
zGMSO-#g!a)p;ZzJ;!dpE7RARdZ)zL;2`pUVoW^v>iFth6mL?PVwGNQ9LwaiVf3}<&
z7ji+_9G at cPJ0Gu^u5y+ at iUv#x at O%Y-Q;cWV5;oDoT0oDMfAE)Tb)zR&<G55P(mCDU
zl9GvlF4BVWx-ZXkRBJXMCfX1+ZJLwZgT0Gzrt^uKH7G=qU&Uc|uJETBgh`GrBitRe
z5BSXR%ik4>%wgzbfjM4zAA|ZVk=+R$P?mp3N6YRhSu6>S1DOE{K6{y}TnFl5R&DCS
zM+c!g<hdNYf6Zo+Gp}*-c at yOiD=6KMVPPfv$&PbTH`BfQLt$m=1X=G!eMVXkjz at j$
z_l%i={1XRhgo)w5crp!mL=7y|!DLh=Kz0*?KntlB>g7w%#~<)cqnhhW=ZYILpr$6k
zt3Z(>2P=K7TbeYs__a8&_IxV%^TsD0kDTiYwlnVpe^dQh2LqM_mC&|jhK@)1KI!Th
zkHjI^*%|p7OsRJVz?O4d81nz<9q_iq>SPVV>=gDgGB2kLl%?n0s&$i-a|T- at 1<!MO
z$893K3?I(RG5D`M&x&p5V(++-D$#}tAu(${@HMpIY)>jjhPDa|JNain^*$H!%ALct
z=Z63{f3J`Xz2yqms9p9kiF0X&NTCS%^vmMAZSu?wXb{hrm!4c72CqBEb0StBYcwuh
z1OQJ^E66FTl2Bu*9g8#dRuSB#%+o4y<QJK88-vFeM{{w68EcYK3>Dv6|Cv~%RG=!R
zTWVpgfj0$I711(Vx3JjAc{YdyvvO=IsYO%We=c*x0v?9a2LpLAXr8hFYHr%0ZD25R
zHyM*wobo_7#`YfDb8)H)6}Cm_z8rKjb5EFym{(BD-D*UKe=cOljt1Z%yViWxqJr^t
z=@&y56w1S)AV&x8s9JDID}*5nm at vIW0%zShPs{CYG at ecv9bH!ak{cTtVmMv{#VfR4
zf1X~Ll321>Yq37sWm*0eFX7(3e~rwb1rXg^I~bczP6Hq+_5gmXI^8&)cbUB*9&Y31
z?LFKP5al8<uFxhl8x%i3kv*FFH_pLdYS*6(x0*o7-fu=Jl7p at VF>$4__R&500hV4}
zT6&KO;-=nXRQ)_9(zjC*#WXFD;YebEe~(SOJb}0{HB17<wHcz=bl+Q=7nG!^nruM0
zXsVcg?$OyZkKUHQ3r2tA4jZOS3dqHdW6}V at Y>51Mft^gV at n3VV;qfr at 4yQ5HVa$;B
zspnYPMXHC!gho8BF|&sCoJ%gJ(zP=^j_VA%aHDAh_^u8zrG#s68&1*mr?xG|e+aiD
zD$7Qnb$06&4{+fYe)1DRIhAfNMI1sN<TUmbA2c!Kc5^FT(Zw~k-3puMasS%Wl#~pF
z!cr#E-kWgt<o)OWuXv>jawO at zODK#tt_#i=2a$_VXK;hK>IK>;AF}ED+$a0jro2;l
z1gi_zv0|ptv`w}w6k~=osIHP*e}L4Nbmz4WZ(){hRA;nPl*59ir;<M)B*7#dC9ra3
zbZ8~+=?$lifBUf)(GRvMf^Ce>t#I_#g at 5D9*+2(J0P`Z_CY1m4or*1D_Q~uxq1G at O
zpguE`0;pB3=G)-DC(rs(To7|rX^_v&<pOBUyL?Sp at b{QLaCu<^EpXgxe^?kug2iV~
z!KAM4s}g(?dBr%I70S(@qr+Ek7T0#M{=rJSir_xN7q+I)WX)R!PpS;UA;d_J{2VNW
znkve-D)+~wBM<(7Z6PWj$5+j!ebXhM at pIq0*M>JD<+KZ#fV$U;LiH%@ne}wDY-wv<
zki;~@S8?3djf5>?m=a{de<Gmr=Yy=P at c%nb*K?#!BP1H9t at C`L!Fc`A>gj*j%8lJ^
zYM+6z6)?{ch}f~E00j>2%VF!P&8D=VD3twx45%=G0K)dZrb+CAKLBdibZ5VIF#mYG
zQ+gj4bGnHK9cB78vq1zV4P~x;4+M%r>~qAQ*L=Ww@`ThNx_2yxe{RYBMyI2Q@#)O;
zoBQ>3=>S=~|5IRS&wJpKb at boKf0J{_G8bh_;M?$CD`R7rb?TUY#i>AfTGKy2&)B!%
z>sC*f_%7Tt6nS&DHkzHkJsFTBavv%uuds+tO~E`6X_d{9J8_7L_PbST0X}Lx)A2cC
z6SZ1Ej#<2yJrk^6f1;XH{0Ds{i`Pj#A8r5su#A`IqWx3BP*~)e;R)e?4JMU8>Z?NB
zg{1PfSo+7hABfw#IVI3{h_Xs~EO+kAIgOp{)E<vb6t!x9wt=Vp-H^xN(Hz<S`kOw{
za422xW0F?ONjSo8ov4TT;gR!-{)yfW#z+MJ=iDw63BS05e~aPt?ij2TyP|0x^ODBj
zaxZG8?Z9Swye$x71Rn;e{do6Mj2l at o!~FDNk3p7cGM!*E&xKHBNFa7|(xlm1OG3|8
z$aU=0U;L9T*svS{AN?w!{oMg6I1h`7D2&-AY&#Oex$@pu<bns?X3tf_F?<r4r{%yB
z`myhyFv^<8fAdKxk>fN$csV9o{H2D_Woo@^XGnUI-I%%h3N%pU5O|`0BkC%A;r76I
zn#BDq2^d6cW4PTiuJNnw34><Y&xE1yI2U^8m$4P*b4(#qB{qVk=}^H&6<Q~NJ4Sn&
zPL=!aYMbub`ekf-bMv0k!)nJYC;JvO8(V?Gto^)Ae_>rg(<3QNW&rk#05O9?0ZEbi
zE at XgJEZJb0Uw>fGC`d%aB4e-Q=VJ==grPDP at opW?7~ngHX`%Pe>mLoX>vhDnMzAam
z#?bdzH-|Tk$G;<t+;&a4k5TK^xK0hP)Hg1C`1{&cT(K7|1heSsZW(S-3zi`^A?;H-
z?HarAe-XtFC1=_pLozOCZ;)e at mKb%03z^ETz*vM>wyAyT&sa<p-jy<nuwJp3XOsNT
z`SXwJJSC?Ij+14*%|NV-_p at MC&|0Z$@%Yh*84V~`hH3S)&xjXNg<~*?5?vLhzEwG*
z#%DoStl<&EsOw`a8aNmV7MFNyjZRrMi*82ye;_@{@@q%S-sZbg<^B2arb8JEztHAO
zd|7y=k*=#JeBWs>ToBfbu_jMy$6*7Qz4g^QpkAkYdU6yjZ!dzQDRRz2{^^hfl0VOv
zfPb3=YxSjY*rX;gEVxpzmK$-Pm{j}x)IM5Zu`HvA$U`>euHq|daMuk+OtQW-vnnfn
zf3pYgp#8Uq%gu5qv7e at s-=EjsY#Z7&hm;`k$n<oUI2(4^mF*<EJ0RotNRRmbwkZm9
zi2nJX))ETuG-h%m{^0EQ-m228+IITrh@{Gq*;pfsS#Pa-t6b;*lAw(#8(P__s(KF6
zy%b|Ym{h_1p6nt-_c{+Mjh8|gre0S%f7dT#<fcN5YzoR<j^~n!#xFs7bQC~<Hw=yZ
z%*8yZ<8hd2U+XdpiqAsf^Z5#{4}^}gDbMUqS}>KFu#~Aj?mK*`1v}+O!S!#2oICe`
z at uzu4JJdV}f8<3*#3vfB9~s#gw#p%GdaZp{M;mhw=Or)*ZC?-|fL0(cy8kC2f1?kY
za%%Tw at VUdD1-s?U+Khg8(zgk79WT=hQAqVue!CO4GKhLcFp}3#>^b5$<#v%21abP)
z>9>V6Ta-v6W&bSED~oEgPt<`HndV)W06qDpZH}Li)H>ko8g`lCa5VH!N;I!@LEZQw
zpAQP18Bm(S!_Lk$$ScS}bWyvxe-d8=KTAn{Ft|>O^5+14qE{Z`2+{8Ze-YJaAc1sy
zmsbm4j8Ze~x0Tjm#ERNis4T!*+BUl*V7o0h(h100krgph$uSmWpquoo@~l-asU7_)
z+rJr;ks4anDP|0m)UKaa1UE0ev}T~4Li<ta`|=;P6H&KrMXd75GdssQfAc=o at kcRa
zU at mdDXTfOBc=qiJiSceY(O0Jt*HsVLhoaVNfKH{ayv*hJKo4?5;r>-<XFu_LqybG|
z1$B+nlu-`b;HILu92T&tRGty_rzERi&)+U^0NGhKclEP!mXrc_XN(HAh^mgbPD7-t
zAO3tn0bkOK1O#-fz0ktxe=B?vh8_`c_7P?ga$+0;gqulIZ|+ at Iw)pszSuy<u#EMAP
zk}`Tk&GW=-MV$(XAn;aHw^F~2dxf&;Xk4xe7*$!degtTByOPlNl3nnPuCE*&wi5jn
zZ(wWBGAf_=qQ1I-=Zi*z5{3~G?msYmkc8AAh|b4SF6RQvO(2DAe`c1dadBvKOn~4m
zUD0&wg_%3xob|&*6k)ISf6QgC!I>hT$A=4`z8Y31mx>(~y;YwVL;$PG2E2N6<}QC<
zm?yXw-27MU`qLppDZI5Z>8oO*hzqWP#dv7dXWc}1JiO(c- at VAiw&vn4ETPRr{%eBJ
z6~bKreBLUOt7h(IfB2BhVh)s<xl_if8fZ_YYLFz%$ii0zH43UL#|HD6I;4Imk=IQ9
zmU;}AV%O+$FssPYo=QRc$cdOs6|9rbqOsNSYyE0K25QdP at Nm#lWWz7TCT|k#quvBW
zA2G*D>e3W}=B46`0- at x5)aNcrFfWB4*cKqNd}&Od$O_|*e>pU$cXP}xE=UhwHjkZJ
z^@<XvdMo=?j*gr0%8fj?|IVGWt at UBWJ%inL>$pavmY!^oZ at urFsHPxtmvCC*sQQWa
zg{@x?B7L8J>j+Sp8yMSjCBcDu{>P=kGg9V!#Xz3h#eCcySw>j3Lar1QJ$y5_ig0c%
zA7_X)d)M{af2 at dD9Pz-9>SO(G5Ywh+ws%(=YXJm`Np~BDt5pkg4u$tDG at t9;*Qk-!
z)IpFUEl6y<^H5Bpk?F$y+oo!a30wC>IcI`njY~+m at 052UVHG+_7mrUsc56dUEAvLL
zs+Ldi=J9dkJENZhE{EGFm~^PbH3K{yNtTZA2iUY~f0~N;x>==3W5TO#4pv4yv59Y1
zB6kM|_a at YLyO2G-SZRVbOy7j!_|7s~zsiG at db^%qac+Nif7Yr?%}tev)&_CCxBI3K
zx4<Bml^h6lQv<VVC{Z}*$k~p6i3EbV8{<_~r2v<2MI4|7F7%~r$NX|W7p-$fF`QPX
zWa(Onf0lJ-90B}G0<{6NvS1-qrx8}WJ^s)-z;40ujQcyd_I{L?Q>XG?FZxcd<3hSO
z+#v4-aKCvMY+~BhYh&wS=-v`6pZ;tVHLofMJaCv?^?m|8I!H$0ty;s7l5Rg*+}2Gh
zR^!B`2I(t4`YxLfo1#Ofs>IV3n`=zR{9pTVe{O#S4vf)M_ at cnDEiGu%_>YwCfm;Ca
zzuza)rt2k!iZGPQ1BK^+(vrjPnK~tr4p^e(VAN at 6n&M(=q!abhYd5~tMX)*d!vq{$
zkCB7|cXTs|GtM7Y+S9i`&a9h;fp`?06#IXRC}l*|d069NSUB^M6p72b($wW2aw?t0
zf4Yh}*>sCm)&8tIDoUJ(;4p`*|5c;6*^M^z(Xl|oah$`6$@6<#t5sDQ7F(_Dl`Z1m
zT7g|bL$oIS)L4MzE&9}2>PJ`ZuBbXyZ@}tb-;w%sfQ$O`?CJuT47h%hBo#M|MDl6M
z+{S>`#Q%iEM#3$+aABJ-9fNnf>0Qs?e<k9IA7L<`8(vd*S=tJjDtvmB+7=iXj^wd8
zJl3PzFM%EicK3}@+D}b%#hb5FTGiAek+)HQlcXEB$K*a-k$*s%&i0;qX_GKnNVhD1
zF<N<KJb4TW>A6~&<zV_-u0tO$807!GCcqLQ_2I)EYqZFA{nfAQ{WGZOwdVoje{zka
zss`~JMPJ)B9ZDLZLWh8=Bd_dR^zG*c(CQB$TVHnUl2)OA?f0$SfGxnLWL5z%HH8dO
zmwV|ipOCa}Jru(<Yngh}&+zrNDtJ{$7}fVuG$&oCvDxMf9eYlPx_LLQ7wUg<)x@^t
zu=?$1-eWgH-HmD~Zds6kG6NsLf2ajpIAe;z1CKUKewdXw2d`L>a6--~q^j-muxqT|
z=1WRmClgEn at mHnodLhr|Yx$kRSam5-m1Z>fFL~&#II~N_5NLro*pfb8J8ju057%FZ
z&QJO+JtMs at Nozkr#yS$y6#@!K*`1p{&SGaK1KRnR#RDmpwNS7Eye>e{e+bkvICS2{
zs76VpP2VMew4b?_*T+3?xe3zze0>dhwF!ucbLzzSI`7&EmBC<w1|>wY$0^u|98)g1
z4$}5QLG6_D5X-RQ4I?i?+7{yuT&!<MFtK|u`(s5f_V)gt(H4LsL}nY<CAnS at T)!lB
z)W~?i8OcfBLC8Dfb^#W;e?2fsl<;E=hYo^4HyHV~umxV1YJZJ#yt;d!;t)s?(%M)g
za4olL`X^HZbvpEYbm+OEZVr?pZ;6ACROGE{1#Z5sab!1^eF8fTEfA_y at t2m@h=H<2
zwwFv$|MReGo*NrP;?tLnS3+Y{)_uTw`xFGSx_phZCb(GM&46e8e+IZ5-%Lu)E6QT6
z0ajTq!e&{5SJ!i={#eAtw9Ez`ZyVvzB^5>NxUJlr3 at 9Q7vB><J<`$_p87{L>7~1Bn
zVK;jMDj5FiprRW58^OYnq8#*^gRjH7?VW0~lF0vYen?!Ck*D2=7TPNJT$F;C at f_7R
z;NMv$=-c%0^-K?wf4ZjevL+~?n{Nxz5F6#+{TeTUM7zG<t$hP!=z=n}H)YhvnEVu;
z5+r~+bVmxr?kd>Qh<dl`m_(T`RQX%{khJ9d1UKIVjZr~qr#byY(vG8xMe8cD`7$i2
z9w)wn=p6V~FM?}ighr+#g3~k*@v*qjxi3$z4@(&MoKjH*f0P6sM97Wl%DOqQN|JaN
zGx=@B20}df2X+Mu$X%XXDt=P&bwT<u{G at sCE6WW`W$>%T?JvWYmCB|lDz5imBrqb!
zWi)SDLj0pzRUZV{M=5wg#VXR<1FGhciNz^aNiL~?+jST`5tfMs>MWbsp2J83p_nB_
ziU~~Vah)_we`b;s=p at M|c$`^YeuWWJUE6zPwP)7kCT;XKNj!yjL~uuagygV3>+{5z
zsGZXaPj>U)*S9dzM*SK$c-_5SgwXIryghX6D&2|b#&?j{)=RBV6gJ~WlwSYkb<k=7
zZK4_$P&%MoOQ5!sj1uiFzyC=T^(qBlJAnZ?u#@`5f0M(5vwpY>Q^rQZB$jIC*ntpq
zV at 3zYUmT`)WA?tKK>H_mKa$a_V*2=A_=m at QEw`_GsAlgiuIs)u^U<y6>mZ6HF`^=g
z1Kt9z7a2N>k*e+WNSjn_EE4zrhhArDfp!ezNT`fjindmCV3ksoHruRxm4}S4_BMkn
z8F5mie^vhn?hNM8kgTxxMZ0S>GL)gK673Em+41H^78ao5)o|Ap=OY$B#z;3Z#b_4d
zqRW;4h{aEE6*jo${*x));id6Fb(x=!M>V=S_HxEti*eBVdWa!cTCiRDg#(IoF5cNK
zn;_XRWHB|V@}M+b->oJE%Qej(Qp`1#Zd?Bwe^hNAuG^*zMtf7VikvvxuzAgFQvlne
zKl5OOVwUfG9RI9Cd;#K7kqC%tj(<ZxFOsHzQB!;I(l>V#aMHo8Q*lfx%a=!o2+$~L
zq!|D?jNzvP2Eg at u@wG(bClmaO#`1h(AW0;#8FM>-?zMHe5bOzo>F44wEAo4>g at VI=
zf6h5ka*-D2L1h;BV)OouHKvs|+lh%)Ib6;>Ah0E$ub(ZO>rUawz&o&4k<UvyAI8n2
z9_X9Hcjbuq+Onc#0qCxVg955kjb6}K%$<PI(bFy+aDaLTeQ=F-=Foo9ADj2AvifK5
z)a`BW>HI-&kWOMg8RnND-{$q^^1Qd;f8=n!2%8{J;fYvai5o_sOR1-kzNGhNiSPHT
z>0*_ctA}f at n`wJ;RlXZ>;`J}_Rt?`v9f>&u1u!4jfK(ohG?pF&CmMucp2~4zDnUAs
zN6BgJe!~<-JZ at x}S}J78A-5?;vA0Vw7yZJWYDXGh#y*IDuJDIUqHqbZnXV+Sf3DFV
zDJ8lKIVW=tXrA^(vhmlB^kMMiB4;c`I#}B{dMOM at y{jKc6v;gFq};0|+o;dJ%~de^
z2w4 at eP2x@polWm- at aRps+&eDdxdW|>e|rBMDI7b3c>1j%V`0FZC#j6`X4cU0dJ4qX
zd#(08WZ;p8DUmy>kxZl^cck%yf8NM=$$GXlz*J(SmzREl6|UEKLB0{e)AY<LQm8*A
z^SoW}3MHmK#l(|GKB`qDX>~rmBlDN$<^*XyJ<mBq%-6*IJ$yEMnxP}W&W8+o#RuEH
z%0rCnXbG~c6?YtL+^=hr&!O3E5uHF8R=KSAM^J9UY^Qbxg-_W~NRgD7e=5$a^BMf#
zbbgxI6m=Za9#0uq!GCgl#!~K1Q4K_(_UtmNQmR||dq-J#4JK}=lHZOne2u??%zID`
z>(fY*(RsB%cia7PF*;A at A(%#rM}oCZpL>(waOs<M)z at 6&eNY#&c at Ve}JT*+^Jd_nl
zI+Q{a5cj~f6zvh<Hg(UUf5(ECl-S`UirkAVE?QPPH9y*?RsDs99TW)Q^bEF=64gEh
z$@Ng7Zk6SdY&?v5M~IkZl0?p4a>Ewzd6I?XEG`&AbweQE85Pn5U|Mwk)9ue<sdE<2
z>gJD`mDA>gE)GSJMA3_)I)++um(iUY$BBi?wP)pNy*%Ms%u3%`e}sOL;^T}(sCir9
z%s|;HZ~-tc#edf?XEP4>6Q`+sSj_rFzE>#@EVdm4a-7p}H~AXa1s^RA;^3uc%-GNP
z0Hi^ojDPspC>;EJE?V9)zO1`40AO@*g9Sw(n*58ALp2_zRM1}T1n>_>TsV)Mn7ZAv
zG}GnOJ+PhA(oAm>e+Y$t=J`Naa8?8KtJSuB{x#t(Ykf=#D_n at pGK{qeay!VV--**1
zu(#ixl(wmi(`2X_)Ujj^J_7u{t7ojn%4YD}$+N<BE-QTc{e&@qT=bM$2Ig7)uBPaa
zjv!3;&}z3B(QqeaxCN_2(OsQix$$1||7d?IXW_+CT=N!yf8Cui)bh at VlGkBtcumQX
zId$huNQ}QaWSVkPpJ-Hf5TP6E_9dX4KG<Q;`h5pfbh@&_{LJO)E^+FL%gaMwietbM
z^f-W{e_O8P({5$dNW30DaDyVY#f`YfMZ%)UZVvCJLE)>MHqY&ir*nMbr$8$WK$@ut
zlrgvLkqH}4e>)CkhBIC`DDpFNVRC*#$O3G|+)<Ysj<QS=H|DRKqmtsbX22g0u^Y<7
z!gu6^i~z1zJME-dLhW-V9u<DE`A*tTM&iDRUk|Ca04<O=g;y&%AgH``LxSrZhtl at q
zo>#~q1~#jyZc1sxX^>A0s%JgRm3^&tokG%keMZ+9e{_422>#ui2-jiQcgEYj=txaI
zG(yg4$lYP#4VYT`NR>Ooh)}yHl9t{IYUL>A)60bx^*wA_pL!~a7z7U~n_8dca3#GE
zG&GH=l(37>y~$FK!4g>|Gh at Dkm@kfI3cLZ=tR;Eg?&d<akpd0*t;UsTRQ9O*JM9kt
zC-io`e- at 4C(_U=D|F#6!RcK%hEgXOO)<T^PUA`s!JZvx at 6bL^(CGvVMdE>vr8nNO%
zU96-#(3M3hrvx~m!JgTTq^$h~(4Ti)rqP)~el?}<PT%H;UZ;_>`KY72T<m at 52_}4m
z0^?xAly4}72|eV+1h3!MP6vfX(hLlkR%tYFe-~kKQ^@E0>4X4BF8Vg@)jlYl0CCkK
zNHBD|%HbzJf**tEdWTkcPP at fktJ{%f8$`j^lOpSEs*31<<8kkAztEB(^fSWG%f0oZ
ze0~UKvT~6gQ3-$)`#qaqI;G48QOgKNU#Q1_lXdibn4@`Rr73Du5>G7xurja(YbtKy
ze|+VnuD7b!Dxr!=wR%r4x5UAZOD?&JWbe){&Qg94>?j9^_FWO0qySBoE8F0IBl|+u
zd08GL(vt(td)T(70Koe!Jp|WP$FlI70ACXEj!hJ3(ynV?o3D%;x#l?LWZ;-&n=Q>{
z)u=wUCmfDk{_bc4T1$%rb73qKODjSie at o4q#jlygXH$Xg^<SfKd5RFW;Yl8lsXRqs
zGqixF8~8&-?z$BQ6rk=aHjCZla>*)Lb9p8({S<?PjaN5d%}<)y9gs&G<!F at W8Gd;{
zcQ|PSCz;3<Ag)$mOeRHc{7LH+mG>46)`NJYCBQ^CI|tzSitB{PnEdAoWqo)Bf4Yr8
zIej3H>_p)SMsXDh(5UJLTzU~A3T3MbRWRbUoYLbXf-x448Ptrf=dTF2X+%$kC`4G8
z+}yWzpNJWH<ybS{;eD9q&R%iO$6R(0_BMWk+HezGrKaU;8ecoUTR1)_&}PkpU(UH=
zYB;Zj>ym5)`a*lYl at RDlWJIH)f8$UWO5mm{6xFbYx<4)r|IgA8^p%1Ha9fGK>ZLlV
ztj8Ln_y||I;a_dOd at 0`Ku?0-A_}+X3FlsStLqE5Cu-bq}KEG9b=f<A6_mc=5m`(EG
zL;=C(1)wUr)pK)lO4nwLTDoavJbq<aKySny12^qOQq+Vboskc9Bo9-}f7u1qBvsDJ
zh6WV__Zh$rCZ~6s&;1hWnv08{vbqu5bPzuaHv-JfL3aRR3BH_CE<X~9hz;udxkiM>
zwowqbq6%^)#c>I}&qZ2G0l~ti154;89_M1DbQzK~!-J(q=V%l&a&{%SBCWEC%0-%E
z1S6kwLR|8g!^hUn%|3N+f1$CdU+s`h<q+|J{-(hV=uYB09W~YCQc|1kPQdU<KVWwn
zF1gp!G#cP9;XXOK{>e6Pcb04=b7}yUgB#fmYIRskc*9RNuH-`K_Rpx-Z^36SX+>0>
zE1XXR2v{RiIi$1D#z$Vb<g$ORR9Uz;5E)<1EoAnx)!ER9<FP)5e at oO3C&(Z-=bLuQ
zN&5O(tRmX|!Y?OK1a5+K2jJ-ql`E#q{*v{{cg4!x#W5_{vJl%SE8RVNo(IS$rO)b2
zDP9<*41nsMv|QNsyh?-w^$AxeyYaP}u=e!uBsOi&piFZm9IFi%`&SpHLl5c%Z3rWi
z+~s&SzKNz|Xv0rOfBdS;V7>hWeUjY$L0od*{;wBW_fbyF9eO<%lAe&tJx?n9rIHp%
zd7c1N+WaV{f1#Z(2B%;1yXpJ|A*2jM1#dHH+V9Zs)+uZ%;r5muO}U18Y~^`ZIXhp!
z>obZCm$1XJEH8j$=s{PW%&;lT59yhBPP24-TUaJj7<^eRe^^Mf74_fv{^ac}p<d)v
znv(stJ!sQ$9bmmI91W1Tx}D`eZ3GrFVHR*HEWpim>{u-$%$&C@?W4mhf at CuC);eY#
zui^9zte4}V&oJ34O)FyEeGwlQr3mq(4I}V+ at 8o`;vnFx<EN)TvM9<1<b6ie(Q70K1
z3)-OFsmPHie-Z*&6k<&%h;{7}dYws}j@%_!M;(Yq>x$S(bNj#|?QIkxKne}gIT`$e
zJz`e at nO&-0lye4Kb&=RbheE7H^RN&?!#qiQimfob4TO&Nu04FnXS`kPyyt6tCLueS
z#=Yht=8$2KRwA0RK2Fpl8#_q|?~CXbJ&>yh3 at q6ee@{KNH}%D&5or4i<Y;<pTFqQ9
z={$owGf)J3Iu>oGjX`^V0v~6Qmj+yj5Po-)*Ku4EAseeqs30LulXU1{XDt&^NUBZy
z)vr0v`Z2>`YA>PFw0rUu-zjP-aaRQP;K(&jb&LbpGl7hgfy5FMxv(Fs`q<w^mxMoh
zuTNWNe<MGDL8>FN&8610ck{3R$N2S7vJ{<wyrRSY5>An^YygiUY?QQ4e-h9&sF>Hw
zMv66S=X9;7j(ofr5)k7S63MiKbX#Aq`zxLE&-)rfIDlQf9L%6Dc#wW-*66hX7(%#d
zaHj%DbCh;0ld)yNmwO^qS at 5=Sgu{Ij+Gc!!e-(S`!a-HyaMv}u=)w>epv<#Ss`gAX
z=K`_o&W~do{jPugnUfu4{e65mF*QkRfx@?JeI<k2&MW0_iNgd0&)tJCrBECy_g~41
z&ZuvLO|Y~OF;_vbnH`hMlAbCsu`M8-ilQYFZ^n#e$@~~`UaZpBqJx3P!iRRb|N60!
ze=b*nG>5+?^$9uMJ^9$nw1Z&azO?jY^i;&={bNB0R1srCk?{wxPq78$yix<_9VNB1
zKWk$OMdKaFIjuCq(LHF{aTF8C9<LYVQ1~qvcu{OFX+}_qzTVxuJnG>^JB0W?OhF8=
z$?B#R1z3ruUPYSRV_If!S!(}w+Jy%ue~?>ud2Mcjp3G~EOHiwj=}dhoP@|dL>1VN}
zjT=xX4{$HL&eLWv7UE;{OaKK-d+36`GnpfH$P}pd+6xuwVAE~}-5uVa7~cgoblgki
z!Hw6#hC1N3j?AZ+Cgmps$sTVP|Ak$%0Wt45Ul$ugwrV83v~@?yF&iZ5XNt>OfA_t;
zXWe+(OQiWvt~6Mfhfusbb`dYYt>e^j%4(VSOOj_bs6#bylICzQx^-Tl%vG&`lD!KO
zh;sBeeX;WBK6Sl?Td#rd*^r~5(4Zg%bE8y8r^?=^(7Sq=YPtUqMxi36$zFa_P<!?x
zj6s6-%^<Fxbg%+TeeKL^R@!QifBk1v=Ugv}QWW}J01%fKVrzQ5t?jpp;&Q6N&8ukr
zOQp<8JdHoUAtzL{w##adQP;?O2qj=DR<Dvc(Kd48)iP8q3o at sDH!z-7IHFfV9R2`r
zopPTV?21vKr_qxliV=+3oT7`O+~);%wT?eBlaEvsS#H1 at fsRkaH|vFee+lNwvdW!Y
zj%L9mq8#(_0W-x)3+oc&KTl1+=>^MnXL}IYikaX>4FnDtrl->CETP{HXV+>hg~D1i
z-0ZX$J`^8gje(M4DuEjB;svohfmBYSRl100bH$p|j#u2ut%1Jz=+M5&xo`}YyFUv{
zfV;WtAq!}Bfi9~LITx}Re>+m#G2z_i6~(Y!WRWqzANFJf|5D at 4guUIstyFPc?0yNs
zjA5Ie;`nh93=yl~o at 7{Wf{@C_Td=IPBqyj)LOAFO$Al!o66g`CP3DXUa*546zhP&N
z-3w5Xhu>*Z$K?p`<bh8>OvA6BmAAEcn195OHQPo<R68=8=1$Gde_}p<EQRSDUE(9%
z|EB*IN*vdQ-PQj`c5dj)U%g;~8uM55{RTBfx27s+9_`JT9R_|zJA99BhM|85Hh at Zn
zmFcH&kdCesgnd7GTLohW$Mn{LEK$y#X at FPu!fg37jaU07%A=f1SU at bwk>?)UD?>o$
zYFF3ZQCj4*$Vb-Be{kg5LLgjx|5)#kJ^v1JnkK723j(LK_!{mK+KfM5L?SmDy8*N1
z{<Pmv-y*ups}cKk5~#&}Ui+hxu<Gn-SLT#OJfbWz5=TKKJWQ(=!-HgnJtSjm(tZU>
z=U#eNA}ML<@?n4c#ll5A7tP+0EjvGm at wsb%x2Da6G3s{zf8S15f7+dSq%Zqp(-DFL
zU9jYA<-tYX37yxxU6XoXVS at B%Lfev1dlF+J&7!3 at FGz<!DG*wWnv8pu5xaH~WZZ5g
z^NL?uf58H5UMN8v3=Maj!Tw7VhmQ1dX0$J{uMTYZUL^O4;Jt4ePL8J8wPd<N2|1*O
zg at _M;T{~2}e?Axg%_Y{F8y>nDHZ5}NOlo}R-zQ9f(|M9~@pFWVgB`*8R1t)rn0{^6
zBBtS1a~&stNR#5ib}V+QDhPrVqv^1U6iB|p8c?iH`ohXx#{Fjtb&Vcm&v{1FC0pp3
zldO<qY}HPcC3$3O4`Uc*C1N(*>|Ps0!4_tdec7qje~9S1 at ghLk&s8519sM5!QqbC-
zbN)|Sw at m3C1Yzl_m)#|Ux@~Q}H5qFQ{O&DzH%oHpH<zp>*H)6iMwkn-m;iWhuW_oK
zd at WMh*)*WSTTjaJ-|&U-Abf6MAIfZDiuy3`s%PHaZRmOUSnY at H0xF|Rx%W^^CK;E@
zHRN>`e+fc`1-k<7lS;yxmFe}hy)q%KA=GDPG~wfgmq9x)IGm?%U1R9|>9GH%$f>{b
zkX29X1Jwv?5MDc!ub~MvG|YwB_{I)|=~-xHT7jMi<4i?U#5(Njc4tjXWAO9v%FR*V
z0kS(Vwj#^c<<d=>P(MFFgc@`nJs)+{AUkACe+R9 at Ni3Nr2ej-(+c2)w%GEygQa*w@
zYj9zmWpTbLnu03#S$7|*wHTDtO9B|rmFn8`z9LE_gBEwiyrvcyV9Nze$)|G&@btzs
zQs0boicBdqX<YND51c$-m2}fkKaJdway7NK4$9M8#)c3EtHSK9 at JQMp;jYG2OjZ_B
ze@#WtE}$-gTEG`|kce=43Do${CRmWJdvBLKJ<G4DDBN0<%19*!3~@jeu(=4J1)cjG
z?Bfo($M>8hd{T^*|K2=X%Eg^v{5qlE=6^kh`92%V8nE#3KQ_-La|f9mdLs93C$1jO
z%UC&8!j6`Pcj0G>1e<<Fs(M1Jv2`sVe-;sEw|79yfFZqci6sRQiYSMDNDpGybvZ>S
zokH?J4hYEic%GE_S}aMu3MA6z at pQ@w3e*B9TWbv5r;oO<IfeIvMXQ$saq=87&x=nu
zhACmz`VsN39?{}oW|g|N_rb=PY0aPfNE+B5-4j^63qcDXTqm#aeFCI3X;_2Ff8i~k
z1#Sn<fjxUnQiZdEN1~RA!ajQ5W!4ItnR0icSI{<mN2=0o$PN83?lZY(KG|d|3Ro0W
zXcI)IXY_^2W6)LmY+a^y3RLW&*Ht<dt>BnDaI-9+I%I5gfj~+cQB0O7pa!nZ)k|E@
z0~J+<P%?5J9$JlQ5>(;0pbjR`f5Sxc=<EEam_RjcVR8JAzKBKL0R*3bYYRV;cS7pC
zP`{TgNGyP~SNMoo=4zj{i;)))R`!}(uXNkp9P;Z9+(p2sMEz08fx>Z}E!0sD*#H_W
z^Q!>9rs~T&Xh at 9ibU()Fkiz<;KkYL)YfiM at l=p=o*j|MLdy}Rz?IRSDe}I^>t@@zq
zCE@~)AM$DY`Ogzhy?#L1i>L@@N`fITTId_9dG(e_ZcS(;2OoOuZLo~{$uE@}$(HrU
zH38%;Z;p(pBrV2^9?2X&p!pxktszmGDw;`+VM2t~S>$lN*>c`?{D&pkswKa-ZA^PU
z2Gp&5uw5!W8%$Hwh7EE~f3^;1VZB!ScD;*5nZTDJ<{ij}Q(Q5ul{vjvkG&v6r{dn<
zv=`jv_H*+UY^4#$hQQ--EB9)!Ak9+xeL%cJgK_~SeZLY&xb9GE&!uX+IegNnHQZ?J
zbTfI)u0QEM3QE_c!53+fqah5sJ~UcuJ at 04@pGo(=P?oLi(MTJZe;z-PjthI$%My#)
zuE`ZT8nSU<xBc#vUjU={)Tg`<;QDu%4YhBn42ZK&($pySQzq?isCc&xgbmN46mkc1
zotMkY{apV&W at BB<hejYPxqs=VT2E4}F?$KzEiEN?+Wo<!qG9h(m1>!TOL4TU1d1oL
z+FzDTb+E&qDXTtFe~m_$#v4A$hus3mv}wiapk~~m_$G!i0t-~kQ+(>T?LN0qyeI|J
zZM9ho$;EzsE;K8Vmds5U4ca<+I_?%@4b*wO<CwTpTrn0G6SzP<B<XF6z at FEsJHj86
zAY-d+;TFh9zitI=Vz-YgE*R6%Cdyd;h9`>;fBuK1K0sN*f5wmRZ}Q}r458=4_xDpB
zJvpGAG*CO%?PkQzK86#jpHAs6^ZLb90jA4_<N1;1;WC9xmN_kX(IBK8BmXRh-MS#K
zz>Z(X<pic$x at mEk&c{L3ZS<A(mbzh<$|KVRA<>z_l=sA<ragk at L}e7do)#2#h2C-}
zs*T0NhtiVVe`G+Y07$pY#uVB+HCeb#PUU5($0ak^0~S$V6B>x|i*UR&=uNFzA<E4{
zS?_QWJJ^~8Cu1EKmiNOr`iuWogrwcb5gOHbBy|-=?E(spt~XOBw+TvaxxyVEe*}QR
zl{B&B?DDrt!v+0T5+^vw;Y|%pZd$_-pgsc^YE>ujf96%m7CE=nBg<WC%{@q_Kgqg?
zA#!jM!o()_5=F2K7f_=0Qmn88O`x2|6F289&B(8c;ylB65Y5Bp&)w{K6Rf0;R*SC!
zReZXiG2)>=1*aQFI_FogD~3hNMuu#3XCAdTEtl$HJofgPux{7Pb?~0b8`7kJI9h5k
zxcyRbf2>;-R8<o63MEd;py!jq=>laMbNGrvS|M%&1Jz&;I(9iuZicByo_n)N5o`I|
z)xmtxbNtfW$Lt at RR)l*HyaSSb&(`qON8n$U$Iw$}KmTuiF%o6x6kk|APh(^&`y!{(
zmHWr3HLqrJGE0{7Pw1pz)~livAN5WNifu3#fALod%LrzzCwpHO`CJXZA8MlsOv;2S
z;|3WK=mMW4(ZvfQfl<{L;%#UaB7UUc6=EQbV51eS%`)ju_R|8p$kU@(3yU#T)eVl6
zhI4jlmJPbId8lB)9;xdK$0dwZe5yoROcM4Et_Z8~M0#i*|NOIGxEk;bH2Uv~0C`AC
zf7Ifs&tR>hl2NB|{{HO^^F#4a<~SU;8U|=fBBe?#sU&ZY0*0VV25u<u^4PnSBxhH$
z6Bb`hToPI4KPQ1UN^#3~4=@{;9o)AMlWXL>-0LngY5|v0si6Sy`oQnw#9KJX;x}@i
z?D1naOWS`=R`8<*@GQxaeL#Rrf^B~ff8j+gbN#i?EFnggcRR1%I`kKLlVj3}-&yZ5
z0M(fK+&2 at Kn)sB9C9;iOHNdEg-WMLAl`hly@$tn+e>lT5bV4#$K(?(JYKJ8Oe(erT
zguP0LCk$cn630QLEJ$({xrF=iitDy3D`)ol$=oXW3wV3PiDM}9r9 at HWymY<7fA44H
znQ8NX;oP^nY4Y*Ege8bq9EasNL*S{2&A=h$nia+U3(ps^U9xZJyaao;3mx9MpzdaN
zouNr~FD|DCm at cYwE%c2A)aAB++h^EUSZ9S-s at Dixl)W8~1hO&^*q&<hw%7@#isp$D
zSn3*4FN91aWxE)mqgOS%;ocMCf02!sV^bdm- at _3BOJAu)FW=SM3WP8)U<CHm<6dH$
zZQ%;iNClmLYRPO4lQO5ej=hh6QAkLTAQG+MsU~sIA2S^_`?*!%HfI&U>Us;1W=Gi;
z)BStT)_&j_ySkOSk|Ba2%UqxmaYu3=nL}0W6%5!a!*!U)$#GHVozd?Uf83-ML?hKo
zOu+2LKQN#B^KL;UlG!Ea+)q8{w))%4jSHaBBjR|yd}#!>Q(XoNU1i%+N<#r#AAA6g
zng5tt;&PYZBV5r&${rVrdVT&lP82W??@7K}*R!sC&UOTfnXQv&?$;6w7rzgxr$wD&
zbuNJp;#n_#Sl8a=i*#Pfe_!KABWQ2sKdDgapF2jIl3V+NTd;giYy|bD8mpT7lVgT(
zxZs$;K}w+w<CJBomTC at lx?O(XRxkdi;W;K$vsu=KWhfx=v^KOk&7n?BKJxPtb0vH$
zAplenQkZ~R5~(kGK<|zj)EKrom){edT{T&@A;=#@3KiAmle9g4e=G-pG`s<cmexQo
zsub at yHm(amV%Pzqu+9Qk(2Aems5fS03;UrrLccFEAb at ljy=;G)-Ar|;ACXW<sogJ`
z4<kgXmq9M`W}xyqX at L6w%vCF`X=YSswxjqChS&i&A60Y#VUAu%9|OgZZC~~cLA(d9
zM6U^P6iBP<a?gEoe{qrLkaNj0HWc+=OKG0*ML{9ZGSTM-g;c_QVp*rx{SZHWyB1Xj
z>JIK8>ROMgfW4brGs>pFpzfQ~z9*GhgnQ at pJ4{jBq29pv?A}Ir{L|j8bQ=v|aM#7d
zw;J=7XZdO1j2-qY%F(zG%;ZQe$aD<cE)XV1yC2s0c;YYCe_yi#s~*u at Eol*GE|z;y
zcW*^HI^UgCms}xu2PxEMRE~I~)k3^QHaMj;y4qv*Iu&)*<KRWRdSeex%G?8E5}9|H
ztlo~bFp|qUnASSj8{FBS1XA##l;|)!wYuu#lnZG1Kh?zmKG%Epr2Sj?hpxhioGno_
zPa5*i(1E~#fBnFE=bv)DulHmt3+Gu2dvN=sfx`P+CcY>0%O!vk3K@?79gfK<PQ=#U
zXASeg98VnW;d5JDlDXgYc-cO&)|0TGB)LKN4E6z2E{{AwL*&fS`Un|C6^iUE5blOv
z4%4;_Z!lJDWAYduCIrGTQn at X2)h1ct#U{8xUMQ$Zf7>-~bCrP1i-B!9+c#!O1wl8G
zFx7Pn>OE={FkHhWqD+Z5_2 at 5pgVvuHT;uDymdG1y1wPfn^5c74g-jvCz?F9DI|<$a
zl9crinTC+_+MwJf!-Dj}#|++aZgF(1ek6r;NR&^xlTc<*mW<ws4gNIJ_CJZZ_7fS1
zil|g8f7g<8)(ktU)J6<zG!h=c$@NOZUhf45jQ;chsIv~?jN~9Ht*#6Ap^<jY?D6Mw
zC>e*+YG$uw at zhGBFmPtb*%tw_YAc!x1|%?-3#`edBncI+9xo|q?+4V$y|Y3v*UKl9
z(&4!Tc)W-Pwm0{nDbPAdbf-=pBk@}Y2t$PHe-IEm`wphF4Os=M3^FXO)~v7qQ>wlN
zwsA*Fob^-wKliSpex;i71XsZq`OLb(M*==CTdsPoRJ%H{VBA5Kx!WGdj|GA-P%wCp
zLL$%xkulJ|?d^l$A+h}xLzZ4dN2oGJ2=kCbg&%~wFFT0an7XnDx at TX<k-32m$|v%K
zf6m(q9H633SMnS-!liP;;H{o3hAbuqZh%-aCk2x at JNXp-Vg!fG*Jno0K~=iSna$ip
zFC<4DVB)curlV1t-6m;~<yVv%znXz9qqnoa!_(?Lq0znf)Wf}x at Xb4`oEW7xh@$1n
z%af3yv<TZvj*1zl`vDNYWv`#MGEHQuf2U&Jht$~4|L)fHnYA#WhI`|X<_nBO`vR`&
zGJdAZSg1_=`EJjkL^#)Lic6c&fk9O%U1dlt6v)ODFlSzV>65Fwu{OoI#{6IrT^=v5
z<Zj5oTa+CF-E?fNzL~Mm)I$V_+Y?0?$48SvN?5%Yfop~!VxdOZ8sU#;_YLc8f03<E
z6<dkNO{YUV#*Ra^79lNzG}SJTzwW9ZI!EQE)tgpHl}aI$5(Hm7H=m6v+%us2;-i>H
zRsdm44`8$D7061_M_hho2M#tfOGOa{(4RA*JLtv~l+g}Ol9&z5U_UCujA8Lc=Dye*
zqaQY}R6k2u_|1#)&Y%t`o->Cie~*{SsxuLDQ7*=G#XYTwc9vxgmphdFPyeqeSDh~x
zO4r-O+uSkj(zB at IjPF@B(UnL%emLpt><c}*V>EGK=eK$c>@1 at cnFhp;?>@4P^uMht
zbZ=9y8}IU00$Z{49G+WfJ&=+JSg9eZ!0;9sFZywj=|`k&NA1bW5krK at e@xN(#v(fn
z!QI_$NWe=0^AA1s2z0&On4Vr!vZ|*M<TJcgw|h{wj7knUN<^cD{^lwdOOr_NEs--1
z9d_f2<B&JFyW1wkR{n)>50qUG#r5l{Ly+iKdX{oKps-8kNgiuSCC=7e4<JyO)XjRp
zjqhHUTIHJ*bo&6C%^RR&e_7mjJW>~2J)$mQeskwT>;5A?;iwJYg5N(wy!T1*9t^<n
z`I!{syY<)=S=!K1hnR=>RA>QtnpyDvpN&Yd9VMNAs at i;LkX6GMX-1Oio95+i2I}9K
zl~hIjc^3+<zwacz?RF=4D|>2|KR9&c>GlT5VRi^kDAEV at b|U$Ve-0(FTOKY(slD6{
zg((-MjkojCE<X7z68=edggFMYV+w}r)XJv+<S||MRuY9y(u1=@)uYaI6uswDibCrN
zYnYu5W8(+ZKcc8y1?(@_9k{BxOX)*}RY3Zq+dp%1$Cudsrz_#DNs5_E0L)`X$~_O(
zxR2{X<*8dgDF5eHe|6Q{bvP=0at=k!cPQ6uiAti`%dw#YMb_0Ul(Mu`sZa-#%l|{T
z9Qg#32oFI(6Us>MWk)CB6u!DL5U|)q?F)yN^FI6Um3AlfF+2FT$o>Kae-aD at 1-h!$
zZ8Apz!nJ%o*)eRxNi3 at 2TvWbqT?K%+Ra%)?j0<1H#7l9Te~;xpnBl=?{r7ih?ba&v
zra|I4zIFZ-A~pG7-oIVdGUL8$&pj%r*HB>2P?Ebvo3N2nWjie+ZifyY;KqyuWN;9{
ziD_cVWS*}v8tEoop}ED}lEWx);b!wnORK}8-dp}i;q461+sk--)FJBFrG2svNN>kW
z^f1M5vh%gue|&4DOV!2*#9=!l6J_)a|H$K|7nP0hIlQwOdtWP|1ps4tpj&c<{$2XB
z at 8XC@Q0{8ErM545x?;4iMQ-bJ^89Sc#DPDgVi9$_gOqO;0(i)j_DMEaRH*oysV_j{
z<Teoam$h#g^Mb7D&pJ&BxeHik{n)xhu|z?g0x7hzf7xL7B@@D)sOi?B&cS>Z>(^;5
zl9wupZ2xzUA8CyeD?ngDs^6>p{S;yTNFy~Z80Wc7U`BpQnhX_21FY%>CPJYa8D119
z2MCZ?)l0va{xs<r$18)9+1;F27rhb1<#W%~O;gF!00%($zoc%^;bM(>Elww at Ewe;J
zXxV;tLV!$k+J6j^AiLUt6|(*o$_mTWYZ61L%gsDI0HlU98<B8JTN|>D%eZiu&!x=A
zqhEwd_dnY$lYByd%t#eeYt076w7bSX%V3E^Ucwx`fvMaX??fK-V=lhGZP9lf2VbIP
zo)v9zGDUDdOaO2OV`6fG)F9aRxPNwZ+xsEw<fOAHa(}@^ujeHq at dB|l7ZhapqJtz^
zd8n3}dK)+%c}QQ&`{5v`q>iI55Vo5I{ugHlqt~JyF|aH^K`>DDV$%BuszoDD1&Tt|
zKl8V~cgbs=+defs*A<{`e9OuvD|N;}_|t3EM at l~fKDNJL*w;*Gxabi>=RD#Q^BOi;
zn709H#(#FT?jM_u1ju97;br<6))nwpR9FJ}uMXu8ya2eN6%GoYv|<q!>S-oxNVK_}
zp)P_kk}=fvZgf!X(j)%>aH`}wO$C)9yt?rzMP-ATghsLOpvRag8fRs9pEp4}$~9Jd
zk*E73(n3RWEtU}e-8Wp^97saaM;jRn!Rcd0hkvTx2 at g0Hg0gcgF6n``=%~%M1KE-`
zOoS;l0{^W0c}8j5k)cTUHWhU63OWCST0c$2aCb;AIo6)TBi9!9?Umn{pG9_Mfsa!J
z-ZCrm`^moyq<D8BH}0N&-+ibZ6DkRXd{;73)Sh;FVq+?Lc-W=VCmAj`ufC4L?ko^d
z`hVhxP at _;uXs{k-$mb2&W={<IjM8jqFl%aU|C>0MT{($#-ZCFW?aylV$7&Iq20<=@
z!D2oIw(DQ5NQV$Mzg(BlL99K=&&1=86!~nx;R~dq2Ba`s at B{ZV6t%Ekb$EZjoY7ju
zdA_xZ!tdl3yZXyUIhPf7=dvRy*d5Tvaes-QCM$5SCGZLI=K=(wMO8)oUG4i&pbXgE
zXLd!BapYdz4f>A2yGZ4h?m>kv$s<**2P?{XpWZirt5m&uLx(Mkb|$wz6OzJ=Eiw=E
z$S at pnQMKNjj91p68dGg(be{S66fR2{#;+)HZlH+3xI|l2YSuIh>bUxA>mvLpOn)VW
zGnRCJ>K-ub#jQNX-=>xPUHRo&x+NY57uaZ2ut#{M1Qiy~JDPZTTQQKc>wntAQh34y
zB43>p{ns3;5(nU-W3=(nap}<Cp|MH$L3Hyixr_l75?0T&>Twrm?6!UFf(^`6ki$zN
z7eK*xWCfQ5<7QUb-kDePi^>yV1AkSRCvvd`ZYi?rNky$iJj(nz#7A%u(S&eJl=d8Y
zTYP}D2o<>-#q?N_^u6J}`tYgJvDKd!DEq|!OuJ~jxzr4`M?o1Iq8Ywq$Z8_ZRWplV
zl->eAy^g7U2o!7}C<*qg85UZv))xT$Uhe=A#E;jOMdUkn_%}6$0heUPzJK4ruJt1e
zfm0J2sMAomB3Sxdv1OsG6agKM#f_p7$xxkk_>Scl{ioa-=+qV at NE52(7M5&y3L(+l
zj|bpL<mQ%PoqnYt at 5SBXymBmWcXg=OA#b(=k9F(R at TeILewQ^Hpz%TPVbzxJa$C?2
z)C6=ry*&#EWtf*Z(T{Cwbbo9FhYT3DaNg`$Iqiw>z+u^Bv%iam$8USfiY2krAu^w-
zKgcLM(74<AFb?4i29(Y}hwrK&#v*~4j!)(s6IM}tg2jD{O-F~51k`kaq5C*FA`6bN
z-$nPP<r5Se>w8iLcl;+smf+N<u=-#SITu}lVZNpG4*t*3^6$|atbY%ffjzVp<N|hC
zkpDnLlbLQB4Y=1^;Nmc`W_GyRLDI0SQary}af}I3I6rc4Bj>f0NPk6;|Ib)4i&bha
zwUOaxCyNU#Wxm}bwu}Nmv#~*v!jl@<h*cxRds>N++00L at soxi^9;fA9vR1&`Ckw;D
z@=68!jAlk*!d$Ozb$^dJ^=O`+SFZqlJ+KPC1e%VJGFz4&)RGG1urGFPp$7K$9MSFr
zLnK~gdW+=_Q8-~uP6q>Xgec2Pi;yEAJR-J;e3Xrun6W6bC|oTb3n-cDFcUN!O}NSt
zEYh at C-}r#x!L&u)-(dcr5R`8T?uW-Mn-_`M3*C!wYT;#P5r1Aizva}Ud4mU*m+^Re
zjSaL~9X5zVQwc)E9_*wq2ZQ<Ak>f2h29uz>7(;#3k_+0fC8aQ2ubZIXwLe>WLf9D7
zQUubRLwKSVC^d1irNnHu3%^BO{()Z;6ynuzaB-Nxo^k`7z~8Bv(j;c}28tI=Ak&jP
zwjeX*KR<gLbAQBu1W1W#Ya|z^PsodStlxf7WaN~jXX4(6n)U(*A7Mv`1$^QY2^08s
zLTI4X at 2%}J3fo2|ma*WO43pCog+M>sCWM9dVIy5)!l3rgC0I$X7+!Gf#-3?a*4LE=
zvr*PXSbz)u)~Ei!ND?Yu+)RODOxhTN5zf2Zw(Qe4BYy}iXGh<`M<FBGY4Dp)Vh_~4
z<5)I_%2g`t0#a){xF>+A7(E?`p+Ql4Mf2J9b64<Yl at 3RMeAKSDQ`Asodp}g~k?er7
zZDYJMxr2x0dZVu8X`!uwxPwfYw-wAYIfa>=iY05KB@!5+N1-$m?%OY76sW_@=egC>
z0kUzE?SG1)aex4eX*NG~`ST at tIAVFi4!A*UBs#hEj9TL(BSn^ioGzjKf5GxzC6mIu
zH4SUXqMzl|Fia35kqY)xTxAnw&vDQ8-euce7sy>sR$DK^Q^PLZc$?ZYN0)A1Cguy4
zq>BfNB~9Z8vne!!M-2te8(N{N#bM1j-^fK2-G4-*)5Zh2 at v}Zwd^cgTGlYt67~U79
z7^!Is7;wS)eSVjU;F;TZx<UcEyq?E;2`cy5z>xYGvV|Yk&)^NA$V)K`JnF;QpOp9n
zCITUXL~vk7`26}ty$?rGz0MrOM`7feSWqNSr}C+cY6?lEp%(GbZ?U}$jB_G|Ga<Ky
zSbsb&^`1HaZ4i#ei<oFAqM_m-KV062=IDVZF at B~;>9UQPaqhwtcCHh~EU!m7L{Ke7
zX5{0#N&&tOf?V;nU!t0(p~d`BN|XNz%k0+ae|rhm?DT%j_^b^!WSD`Ng7Hg>mGej^
zDmuhUgh;S>Crl{-HIwQRe$JZFXiFDPH-D3GRsMtA(A79rUCb6tgnlaX at p(q{z_GkG
z8l*b%C2F&n#2zM^gnalX+v;S!=Cm|%a{JOs+H;*1s^BLuApIBA7 at rb{LYhgXg!+p>
zW(u4+cKo`=(=mBc+kN79QBD(<6YH^jeilHUSKT-XN>#P&>4Kh#S#m5=M7d)KF at No@
zn7g2*G$<5M6OzL_M*0A)xx!8I%IRs?AFA7;VY)eImF1i*jtV}tiN0-Zi~FyhO<2x7
zH%s|TQNs$wp{2Uag*YgetHKI%Vm{=!xaG8|QNHiSJ!c~d05;6gHARVY_g;3z>~3nc
zK^SU3enMb*g)s{gNhPJqzi+v~nt!=Lh70~7Z^Z2r8+f+`h$)<qelW7sF!<+1U6_}Q
zSo(z@=A#B~H at 4PwT^};H?(@Xpd4qHk7PmBsSN(emGoT6XTu`~NhMGqm_1Y;rVRWuv
zM)%~Wf*)Ua1?<iTda9oh1cwRJ|BWiO48mjoskB&K79e^U{b`wEyM-b0{eO`PD}p4(
z1fJB|eQAP2;XSPKS2KZ95P{FsG6r(Bi|O3=Ww94K#FRBLyjyVo$97G=Dxzz>m7tPI
zoyw2q-^l)@vON0!H+?Lm;JpB>+g&9m6At&={825Mc`L!SMf!c3&slxSq?{x7^eLF`
zambMYT4a|?{f$JNt(L}<5`XcS0gKYISIU}2bGRMNCQ)QvdNn17Ro^PP%(t9>KBWVA
z<0SXc{35r;%~q*eq!gz6o2xVZUQ9fWN+O)<CogzrZ(gy#`Ylw34rt1w`UY)??}|&X
za$@ZS_ZKI%75Y5pkTl4$xpF7*;>3)Xjn9cwa5VB{B<`IB<3zW4X at 6FnirlqcSDVk{
zvAAwi^VzPjy<$|LL^4Min>TbFB*v+)%1MBP#>xo;@d!l{<Y$$;3#a$~$dAbJo|qT4
zzn$f&Dw8utg>R9}$qiUfZD?QeUL9r(%vav_n%02uOgo3KTUl8o>yh0Ku?a^B<aRXB
zg4fcbu&hjPxUdTL&wnb;(&Jmf+!^Y^0#r`&q!Q9^o!F1S4pNB9(^ailqGar=aI7cQ
zHahhoFT4&r4IWnxhNib;0 at Hq=by-72x}$C6U3s?o at 20Xr2AS>c$s+u;czSfu>NV+I
z2OX+CoLSd>WYC-V-~|LP#2A8oF_yGe{h3f2G@?L2R?2Vp=YM8KIY)Saoc`cQkoCy^
zRGsq1SV9-iy7GR+S(>t+YKl12NU`FLS7MVlf&{Aknk1|S;8ZZNqm$A{{GrsQ%#<2S
zs3#)YN51HpbEEkF5dM2wx)kgrvvjkZ^W5WVr-{K!J}4XQQnYP2AglKbF<uq&2>OxK
zCV#leLRm5zgMS>Y)y-XP7ogsLM=INV0>SL0sKXd^BoIfiFAsbHld!8tk5Tim-^iYL
z**A`o56z}prK?Rs*b>JJZ8+Jc)^x&Kw^?xmAq!^C;|>_oLIqETP?E?Wv_wKQaf~!F
zh%>gIi9;$=(Y7}5-~ZW|V}9qtY{F;t62LDDPx4lrGJiPPG1Eo2`_$*INmq3d`Po2~
zRx-Dt3obudky==nd)=3FFdvc!lwiWFQd`=+kjNJ6U`~bVJ*uWL|1F8+(hsD?CT!e_
z$4{ai0-m;Ej%tLGw29mTBPvhOTXO1UzPT`MXf|7{m(<~g*c5&qG at Pjwv&gG{E=1Fn
zifg-C*?(EV^t#<U8B^b1M-fI=`a5yW-F<ihX#o$s0)K|~VopFRlS(f`jyLzw2Rg<i
zIDhD5rk#_9yzcAyV%B5p8p-fsy|@ZACbz150M*r=`{vUGUH-GnZ)I8AkwwrcaB|c9
zxo#RggEnbJYLZsg<t4B!fx_as at EdxNQMur*w|_6wdp}hRor(LH*#C=zp`<Jwb(J%T
z^q<`)F4FPgf{}BB9dv=rNT2oUEQwI!ixMS?QZaOqf6-yb8<Bv)xtp+R0X^i?pBO?0
zpDhlX!0{4aPkY_7KDNiYx<>H^uh(S18++C`?wgJ$sBq-`&Na4(&GKF7*rX<@Gq8?k
zcYht>lr~Tuxk`j4{2ntVs-lLZt>)GpZhNkP%3q5LkkCNk2#es?Yn)OQ-1dO86Ala3
znoWU*#}_5UzF4TrA29B8c(aJ;6p+^(O5w7$A^ZRQ5!*w3X41f=SFl@;&ZL;55U2V(
z_Pn_qUt8a?b8bs$*_{_DyN!5`&6!Q53V&A;frv?}TV%{+j1r|?+cbB&Ge=@RP1<Rd
z5gld|RQayG8>?t5#t4%#Lmc}9*^cwNEx#Gf{3InlADwTxgK@^soaK9%mv3&lEG3z|
z2enQ!ToiGI)04`!O!Y2~qLsc7tCY$6xg;KXNtg!%W3=yczk7m&TbKi(6TTZ-ihp{D
zd2g3*D+I&#1v~U!SX96Z?KBW~?uvW_GLYbbQMt-=M$32U-B`dre02x6_QGZv*!9jd
zt@@Uk4p~9OaC?|U4P*$yRlcKa7&;D&%5CNBtefH6%x~oH*Zni$hGo>%q{>wJ=H8H9
zTL8h0iCUSj`(|hA{I&G-prVB2J%6a|DVG~XcJ=5e{9-ud+~nYZM3i?=2i$HWK$)P8
z;6a~Mx&u#P8Fkt)SF{5-t|jGBP%@CmNis!*oFy}%W%wUf7hz<7hT_}-nqZ-&sX;aU
z#m{RJcGhvJXHHsUD5gnvdf+OwnrZH`%bfrPFwoY>DYsoj#Ke-MnYbG#HGf4B)+|0K
z<lH4+y+bd1g3aIcIQcpI^cf_9Jy4Bt;&p(j#Og<?x-==9E-ZmrRp879>Fi&0<|<^J
zCJl&=p>gkkTZSx({WcJ6)KF=E8s4dI>e6AuJu6g=yh;6)C{f at akI8Wxz-Gg)I4txG
z)wCA?kJfb-=OK7W4X}vYS$~DuMz(CQ;YS-D2VWH#X3t<K5P|cCp$*O2iNvv{Xzx*L
z8;7xSob5vsmIt}z$<ES|ysu5(;1eG&8nJ-y4p<5E51E%O4mx;8EX=ysEMax!S3F5~
zAWd at qsMCl7K^yyYezG=J>~%+1tnK4#1qP1f70UkiyH4hO(Ogf}HGjH1+b=q7F)to5
zXNHKtPqSJMJx|_79l4_ed8ZW>9XmOh2G7v#K@$<Zn#Rl^M7XQn_SGP<O=zSyt<e?L
zY3PLWTguDl6<_L06UHmeKVirh6S37AXetzDtIqi<(TOO1ezMjiB9&uYSiVTAc8X0^
zs?{~~YSWS8C1-#T`F}woIwMF1C6s_7jOD(SW}d~2o^c~*B at bt`;Y0=55U9e1_e*6y
zNYpSclSLCB-(<`M1fVNZjHbb}sNGdLN(E*%-_>PQCj<_h7=a};{=Ql~+X56&)pRRZ
zI|E~5-NS)EJEA76OW{XsqMy=;q%jK{rq5#-T<i$22%P<)WPcMADO48Nd8t-h;M*Lq
zBkqv)K+BSxC74c{{D?Xi(T>Z+Re3ln6WpyO1LjRq+5&m+J7W716WvXR9xUqO+Dm4%
zDJL?%8;)nQ9nOw%wYj#w`P#u=AgU@|_HV at 7<*aQZ81dv(w{COKjrp7=?-LJbvMv2H
z1^kknH4E9?VSky_r0b?#e at QqcDHj29-{}lk)A5^UBY**t;xYUzrBgp^Yft>FEpENb
z$?^m;7P_0e$eD0K0JpjwZ$k{hOdk3Z;U00{T+wMM<uFU|pe~jlIWtRdZ2^N&kmiBi
z%Cic+k;f*5s2~HLao1}t#~psR_*oli4a?dkyY#EqB!A$bBZCY);}{v}N><<M-Bg58
zXQlwG)-4vP>3GuM8ih~(E!)qS==M`x-gm%8<^mmS7EpiG?qsJhRjf2Yf%zGS0tkb;
zFC^30M%yxkZe%yQ9l5+&xJW#>PbH`cw#8v|orTc9e%rBvb8(LOKeV_<(wbC!R2|}i
z?cWztrGMSrt5V}1?%5-qLRTxqTb&r3Y;@KlP%D!^!`6Re1j613VKe>KsAqLPk?+tH
zPgL?Y22`AC9>jFN0UPP0ZhP7aGl!Q|qov*7UMsuv5(tO`{cY5mBB7ZaA!bIu<0<1;
z<EaZr)=oqp#gA<X9E6+h4gwO{Iny$3gnUUvDt`iLVIgJtso=)}DSGh=n=NN|AR@*%
zRPX8jCu^^=RmFwc6|JPwp>o%%YNAUXQ~Z-eR((24QL}YFNbQ_I;GZoC|By`^?%%`Y
zR1yPbF;gztA*FG(n)7~ESmi1s at gyXjrJU^eOE8m at b`R+w^R>bA?lEt<GJ1ixY5{bw
zCx0=PsA$wnR6HzHIat5*DXe+Ur-;$HanES~Ab|AiY!`V08T at dxb9GdKG}4%z^mJEc
zjYd}u2N8vlwV|EsBXd;1t9+Tlx<JN_S62s|czF2tw?q?M!TGsUg6r*@t*pMkSxYRh
z-`}$saKoj)tvD7sJ%+pQUn2pzWyIV>t$#rRa+btAxOBxjCcvE=^Wb`KcNnRrGS~2E
zGSH>p0^F>=LOyc))#Th+(J`oaibAZ)NynZUxuMfYiHdMwG0pBImAwjP!(LQn`*hU9
zKy0yJA&4G}O&{OUvMm35;FbDZKv9 at UWpMH{+Q}NDkC~c%hxiXA+MA;z-a=Tlet&Cg
z9S~hm84okzwAndy3Oxgw&5vB3MPl2i($w%MgwM`AQaE00w^g*}sI9{iK;MHy|H^5W
zK9tqNxGwG<`gUG&;f}V-gTo|`JZ^$jqh5TV`4AnWDgD)$!e9i^r;bBkDnU>)NG8tv
z%29Mh1Am!DROt?F(zFHbs}qhFwSUz_5+(8hX4Hp6&&b7HiR;(I^n`X_FcP46(Cq-a
zF6j4vih2rBy>v5vxXAMDcr{14b#hYCg*#O3)$O7Mt9W^RrB=LX($N{cGRW}Oa`?se
z0T|gvbTYG~@L$cWvthKRCo+Tm`AXE`?d_|?AyXp8{}M9tJQ4d<5D>No7=ND%x$cf;
zHOG>clSyX6oXy?L;Dz%1lZA(^B!$bXamO0Y<2D?Q;lngc<D#(?+ at J@xUP%gXVf3~n
zDx9*c!RqKUWRb??3;(=_u}It;z^v+n7YYPjeeWvVJBL?%*gY{~Hzyo`tnzK!Oi50i
z#3G*qHZz-umf)I4>e6A|+kYrJ0yn5VA}m5LM9^Ob7+OTyM{e&@9C%Z at nwMg+V&Cp%
z3ugGj&OMfy%Z*S0_&eZ6@$e9l`P-f<*#$deVR$fxV7d%7<(tERDYAKkNXDd!){OP`
zX4VbS3+*>Zzmkzkove5k2G<ZhEalq{p@{MG(CE^i58 at fN=0eILT7N&XYOpQCHD?=b
zIIT9kAeUs3JtZQhk)!!L2g!d!;LRICvvU}td%|1!f8tZ|R-E4C-~8QYkYCmRh(Xku
zV<uai^}2d;Z^2y*NV}4J*Z$V5>Ih{eZX2W0sFjp_g=v&5FAHh&sh_qNYAYf=eRBCh
zq|`Mvs*$|_1qbbLt$%gl_5 at 5hMP|(-+fv*A2CB=x)qUr=R5qa!gcn>2F818xnw8ka
zjvbZV-Q7jm<XeL^b--ukv78!O+km)3%81}6UDIRu1G+#<AWAxYNAgKHhQDfuoAL at V
zNRJD@$Cq3uw4O=aU#5?3ZXs<osF;O*D*r6klmk0EB9$=ze}5SRV-IDT{09exdYs2v
zo-CHKg5+w>WnaN1GF7XfNvE1~LF#!DK?Z>Jyf#mm+tRQb)^VZKgFjHy)L7nbTWtV(
zE!mL=>mZYT;Y`=5PmT+JweH)>wTGtr*YcSv5^GLnI05%Jw;Pb#WMRxH5>s*<ZXWMv
z{YT at J1p(q(M}N{Sxn(x2_4(ErDP&SqNB at u*M9q(QCs<YPOwWV$Vl21>y1#IEK&9T=
zFI|&qyVH~b^?A9=Rn^?IF_=aVcYe{4B|@umZ at qN6JB6<exd%lsv^X^^RwU&4iPQY5
z0+FjL+-qby*riX%XJv_nm#4qN946(gUft0{E?Ag}7k{%o_^aBbF;4gy`|*0`w_RX7
zi6I77Xncn(I%LkzzImvVET}qkRnIsTM^doUp!QgkmUCO(D2^8n0C*EK5{ZIQYyP(V
z;05{h%KaB5yjry5#~MqzR?F;ve$U2PU>y*Wo$0OK>CFEC?%~Tt)yagQ`jT2mRx~Fp
zn!m%}qJP&@2f_IzpI$T6m(XY;q7E%jc7<iz&(0RA{pdn1yMl=OjjPmi at ou3St?^ud
zO5k@=POA)aZQ)<b+|ITmFcE6CP?Z?dJKk4wu=j`PMZb?3+A+=>r(p><J#{xB;uD=&
zx`5&IzUg^#6sa#HD1o9p=H#RwXk#M)hfvqMK!2InKQ|9#nHFr^ecF8<fYmW{Czl7+
zPx=nb-S|9qTjIIgMoadYZvtpg4LfX8x^6Pd1I8<<kD`&2R|Z}HAT?H4nWpP(`ykX>
zL{9=|>ObsLg>N4XE{19bwGtg|Nu<hK!AFU%O1+#z^$TUVAiOJY&4P?OFgk#-tFV?V
zUw`fT>Sm~A@^*84yJiegl40}`*`@hE95~hI&&V(a&2L`n$(}fm0>~0}w91is{8jmX
zwi+igKKn7wavla_J870UHF_es&^-GICw~yQGq3UG7cLW<QAz}cV1e_ezqz{|TU~lW
z`Zlk!v{<)HG3X*9QI&!}IGoEki$CM2Y<~)U`?ykjf9mQ{sUv|wsmyJ&BI$QM?8P<V
zUnGrcnX+gJDkTeqvIp1P0me+;qzja}cQ#HYax1b~r_f%#sndmAAs56 at 7<14>E2<cw
zce`jnmY9}XM at a5)?l4eFD0KqOibg7|V__vYhjVdh%NaLB&IKgXyA5xP^(De*9)E9S
zdxKN|M+GQoI%y;|d=etHC5gQL<e4N##A8A;)7NU1dhEN<x+56`o}hzM7ni|aVS3pp
z4tFFeyf5*8$$VG-T_pme@}d&29L6Wz<CS#EIo9FdyRCv~IBP&Ib<t|`)Wo!jcr1*n
z`Ki~rg{$jzlhJq2v3MDc58V~PIe&SLk;sz#Cw`4+SdJxZ<#4l)K24#X`8i&#nb8uM
z;<XdevA0sl?dju--h`pmR{}o*s41v(=;vV_x{N1A&@OpoxztjF^<rEKpQp(HBkC`L
z3S81o$W=2!62u7_rf`YuEQK9BzKq2^k&&};^zl<b5(~EaB);}#rAa1pt$&hwmlw7^
z*Zo8jdIGJY;UMfx;>{XKjYdNv?PV|1gq)G1b&esE!BWWsu(Zn(`Te at j@V1PIac{xq
ziO~-R4+!P7u=`k=Otff6Gn8WnA&7l-3}8}F_9eZhtla2$u{ZHqAaAD9qz at b4Y6>(3
zliRvd>JRaVy+ruTBk1YJ%YTV6Fl}y|>K9JTbH7w?c0>+qM9oC6RO5&mrOHnd8U6$o
z-5yEhQ(5Qps`Wsco at V1Hz|}U$Jj$Zz*Da^D$Wh=c%Lfyg&6i}ZZ-~SAsq!*`F|o7B
z-FyBb?7V}ld4fN*TQwj8%k3@}8{zS247S{&dxpj_Mcsjl8<;Tc1Am#>9x2(LCbHaa
z=)*0T(B&Hhz5<iq1uWdXF at p|JV8*$x-Y^<y9qQ5S=YZO2&`~`y*h#ewauHmHt=cWF
zA=;1!^d~7Z%#BS>(U9|`Sb}`1=ADy9Me=i>FN-R7(5qH+L0gQ>Sf&P;nMP>(CO52P
z+z at xlbXfeSs8m-=`G2O at UX*Ex`~ifbw(x1zQDdHh7^odS(uc^@9Jznm;}DcQeS at rx
z(8?Hisrbu;-3%N~4ss%Bo^BYZPLe1c`#|7fvJdC4Oc)FuB?m}d2fKSHAOW`SxX3H;
zB4f-d!mOQnouN{00e~AKIkQNFh!lXZS-Yvxtx95f!N0 at -l7Bkkx_-kx=vqo`aIT37
zOVRgM?|@NK4Hpe^!0w9X<Ixp=7n7%G*e-#K6fq3srJ9s1MGQT7#S&zNgubm$c2l#O
zZ0;6}z>sd*>>dR%j1qUpE0YnZ^>8DV`o91%qJ_0}zwt;ouqAJ~Mly9gl6IQPyqCTw
zj1ow|8WpmqT7N6lX6Ut6n5~WPX*M#BA9z$t>#v^kmijE-kD`_aku^8$0C<~4e)#w5
zi32(;g%JqH`Hg6T&jV}w)K9<Zy(JqxpYE~>rBubkRsV!v?J+x4VlDX&M)bj7U%HEQ
ziWaz}dVHl~+LxNp?W=4U|8dsQ+3?fF9X2=?xDnFl`+s$}Y=U+5ce0Tr2^cH4#=@K;
zIDsv!-x|fC0B<Vo<c!Q)kc;Vjlw-4SBj|s at y5IzIi;bzbF_}x8_n!Q;d37gX27xN(
z$w%z|PHrpa3Unr+C<-QIxY*A5`zQ5kPjyDlVIzPT$=*kf>M0{e3Rb~Y*`-GT0=n_a
zzz3_ofqw~bmBxvXM!4$k{>)W3n$~%%6jo(l%7j|xz;C7$P}N(D9doyGB7%rX_NbmR
zY#emUY1B_YkCc(Cxs>MXrJL<p?^?>X%J&19dinDo3kHaWFUTGkxtGa+(?dFZ_Jqpj
z7e+j4J-=xKP1%YYI3UYgwr!T5&pN~Z#ZzUFUw@`u&RX63>pZ9AKA3?i&t-N|w3H)_
z3JklY{R|IfF_L(}_P_Fqw91XG<*`gEJJI$n6Doc*L>_b^{c_y6v<IUH*eCdf779n!
zQ5rywzdKy{WwRZ=<k($)!U;{@=dqzs;E0g4H@=23(NAU1c)W=D+~7dr<b9SKH?Cu6
zOn<C|0NcBJt_*einNQs7<^hR}A<4{#Q3kIIXUJyTD<+yl+IaCDoPAwRVL9Ho3`Aq-
z+t^0|{;TpfWu at u5fy34(C4Dx`hIl=YUm6r^H*^4N_a=o;K@@B9W&d&{M*`d(AT4*e
ziz9sEspDYkrg2cz|4Sf}HGZMK5DH}x?SJj@)~H#d&7DNJpiKW}&FI?71udIh%Z7`P
zbl4KjKkl>?^4vGhtuwXd$5#laSHi%OO`?X4;waIUkLJd8#A24L<Yc0y4G>nM{PLIT
zN<4uti78M9`>(-8MM=u8I2;J}ZPx7_L#a2dyl1CSpCRssyqYfy%nReNXTh%@h<|uo
z2GHIFZmz50n at qSx8Z*GwK1bA$Q4gWpBx;-^4M=J>cNBz#H^hARCBl-Ww72J<51mOO
zQxzacDpg0Z4n+Ugc1Oa{_)~IS%PNdPSw_g5Ylr#z+ML(OUmCerG+Nxso$lIdk#faa
zS|rP7XF$e_q*F-m45&KP)mostpMQ at a0UE7HV72RjNtTXHva+8>47)XK!yv^DJ!mKo
zu$Cd0aEIE&O-y!z_V!>0WF0#M&ibDg4$h#*a^~lTkqV)h`ji?$5lDu`s~<K2TE+>G
za5~TLJfPG<v;y-bMZ1g<0tDXK&0wIH{sfL8zWyqEiFyZ|E$vE|+lXIZN`F^e-NzDf
zLoEoe7{&}@q?VsHjr`uTj+_nC8!rs<!ueTL(gq>_M#_{nO!*ygfZ{4C{lf21EKL2+
zn4p0?TrkGyIb*(X?jIwJkzSqj>*+V86 at 9al#|6*$uptjnLD*=hHs6XEZXD7Abm|rX
zn86UqP+Zh9J at k#{m-QN_k$)RBFF at u+!ba7~nk@=yEcR;SbTPqKZ)(d>@?O_^3<Ttq
z-RQBy7yeFL!|?C(g?1Io<%OjQlWk4Uj!9rbn{6sQLvq#YG}pATC5~^1IT&n%<D6D_
z&azd<susMaEUeJy_eEF9f$!X<Cufvf$VFDVeOUvH0+SL4rac0=zkg)$BooMbeMKyd
z>JSmXus|JK<pBWs>zOa4bL)B{j#!ps at nt5ktjWn^ZUQY%NTy6?bNyna`W&QTP=9kj
zf|68>N;_gSV~_#686`2WyhSiBI}r*l#^`}a4if_>9cO3Z^vjbyabzb=6HhiCvdSbT
zZk4f{L}q2n6diPr9e>XS5<_as&i%w*hcd9HO6ex#M0ffCfR!K*8jb(S$-pDfVxO*w
z9a{LaP2*;m=Pfh>jGRw;WXv>&K^2 at k2G|d4qYHlkkgQ~a*F+C_x4RK&aTa+mqgpV;
zvtGgKWAwZF3#<ODa1*%V_1PuX2yC5q^I+J#SUi)jU?{>)e}B=okQvwLG at T=`k|bw!
zz=z<ZDGU_Eb7iu}o|94BwT{fvWNr3R-Z>byI!||6J)jqnyj9Ohypz+z at k*?X#;KeD
z9h0#w&IHg?5P}Id^uFC<g$M&a7IqPNeW?65RZTi81Kee2<;SbWqW$WCo^(Z$r1WF9
zHcU<PrnaR&Ab%i|nShtkM>n9dOFFJR5Oi=+<=WP>K%8syRn@?v=ndTa{eYT?x$*!5
z`kUfj6%`egJA9?7$#zFhbo9kK=>UkBBBTNRVjNhV;pgFka%h=jt4-X2UZBorH6ls8
zvNd+{X?k;b1RuJD;lhAi4oR4D;7pd(QvJQzCVma=pMR;Ctb9FI-PAtpVp8Phh7tl#
zD#<x=0GRJDuszvJ#X$-z;Ke5=4$Nr0ai}d%WQBG<nIHs$cbnd6xw{t)z!LRZs^DO#
zurH|CnWWlfX5#jhH$<1xs$qqTiaggSRRNVbB;5}Kqs|0i_O8e%P*i`Wi?|Gq8Al5>
zt~Y4l8h^j$o$C6pUcWx0iC at zW%D7)6VV$@{<4#8g`0=OctOji!qnsVwm^ZdBdVgUJ
zv)L6w0&HBBXn(Nwm0<Bb;=bQk+Q^}2%;@~du~ZuZ2*$lEc*J%C3&4d#T(Hf at 8L>o|
z4uEL*=P_E()~KXG9RI$9ja|F*LQNNF|4XeQuz#=GSs4(qk1w86`Qm5AL<Fm09P_eM
zxwWM$j|nZ|24QZA>~_7fw&8j75co+Wu~Z_4-m%e31cbK1!=&;t21r9S$l^QsFBbEm
z88hw#93|or{si0im)uH^@SgFYEkyuNIwMtqLTlw5HN(yY{McFAO8b}7qIS%95hMB+
zHGd>Bz}&qm3)58bxb`URdQ^-T9GpIB{3{R3f~S84?#RntrB#KL;^CS>QvIKR(Ns?x
z8Qv|18XVG97k6|v#xm6#ncaRA?TDcOB~MQ&3bjPVF`d00v#yWYBhJg7@=;W!#r5tM
zE(+Ve&h8=`g|eQ`(3EMIg*QPzl^@rdSATeuuCM!8MxZa@{!)xnG$dD=U^AHwC>lod
zm^^#I*LYRk?3Ax9P*IsNOU&II!_HbYn0w0iy`_zI#?>*E5~W{G$|WYB54I{bs(!4Q
zbuO@}3jZ||dy!M!q7}*`o5j;S&zMo*HfmzYrfWM)Kdm6W<vGq$xUnNbWQdI5Q-6>U
zjKR=H&wBDd$jPPH at VOP3z-yF#1T5}I^2r(Y9lKOY1#Z05;9cfLtD3s6aVdiRGt+Kx
z`CGK>FC~>gI-0nKFVn^9oC=Oww5s3NguX#$L at 0PPvJx25qS$AeqMuUSP_|BSJIrdV
z$O#?|k#K%8VlU9vFMRY@=nvv5t$z>t_QKsp!=PbrAY^a3c~GS at _Ul;DWzmFEu1`_8
z;n=vGbtA)59VrT*C|Ss~4;3WHyC0m9C=rB(Gh!PJP0NW_+~7MbZpYifON5(OFJxU8
z{sn1pvH^;^Wt_Yn{x%uLDc@)wxEup`DJDp-6-HCgIIZO-6{=sktvT|U-hX{d(7ShJ
zgO!kJ$z5@`oXkiG%{h&W3l}HX)A8s_-K}TS(@zM?%a+%sLfjL$t%UJZu1*c?`rm6L
zrj7H7!jU29yQ<%N1UgD*7{%jiur2qLJw5IsDrpIf-MMHX@~x${2gN~gn8riUa^Wjq
zW~~kyubun(g<8U`vafbBGJiop($WvA at 3`xI2W)ZXy^Gn&+4ejbLk$d)7Baq864BkN
zls`j>8|lf^cYx`2Dm{{q`qGSGE%2dTR$tYX*usE*9oz at n6Bp<Nkx~P^ofi at uR^}zQ
zDALc&=05ek*{Nr^L>L9j<t`MOW>oExs1P*FFng{q(c|4`9z$0oyMM&K>diGd>I*D*
z<z1<^JCmMhvEaIzhDRMV39O8ya%YV{n)(iB=h^CMYW;FySoGcO`ju)P)r at qvO-rV{
zn(WGSlLC<+Q#Rt}ORj3qPCK{pT})7&2{>k92U%Wefo3Jr-n$~M9nFpb4eMQLMHPuz
zFK at y#NdL+!EH<U-%zxQ?fci6pZ`I=Ec}P@$KEUmBnv$sQ(8b;&z_8t(qNi0_CazX?
z=<o8VI!1dRGnq_0T$8jUzH*y$FvTqh$pg%pZTeoX9R=sb4|cNQD{VTWFZRGyhqLs8
z)q@);Hd^3xvrhvU*`^<fxy$-^eHhrutaU697|<d0<32&7#D7<;-?i}2jbS8?<`{0F
zFkl1bq~q=Y<tXQd4(XEcQ2KX#n%5&pA8s-6IQoskd+-%LTzvt8K-;kk<VOuO1P-l}
zcto$CS&Zi~W35xOL!uP741*3RJYAQHeSwAaB9k)*d18Wsh?M9QET5Ywk|lm)hq011
zq6dLi%_pL0hkqG{ck1Z3(8bHV=JR8KKk!xnEMzH74?&!(&k!Z{kbpicsTK6yon%OX
zd^iZ+K~yCLaxlFnb at 1!Ox(;8ep%fA=sB3o65AclkwhnV|MeGWGyKU)6 at 8HS($AZW$
z<uwr2-)AG{>L$cwwpSXgxu6IIc6&L)pWMHCrp4!cr+)+*XR)L)%IfKDf$CL5?bcYi
z!gtp1^OD)kr!QHIhK>1ZU%2&EkzJA?l#{`uVBwpilpMb$(-X6Ric@)l*JpKia7|fX
zWkgD$5>nPg{-G`J7v>#78}Mux7PTNvR6t-UaErQTszH$}NrKu)V7F;s34n786*9wW
zuqM~<4u4qL5nwVGz>O{E)`crNK?2giX8ahM$opUwzEEU<3M#5#S^SjlgX($#80F%s
zB=Fcj1>`e&#h(dc at nykW=%&Iqi6SOGjijze`E-9N+o4%c?K9U^;4qz|*oFD7aY4>|
zw5CW at +_Ek2S|YD6nD;+uRo0yEamdVeNR2zZ7k>#wk3r!W$1w|2e)M5%nX-6B10M<u
zr-SIm6_5M!%D(t8vs>{@gejK_;P0ToxMF=3jLgd{<EFX!91U4{8Vgq?=ML$@C#66A
zyThS{HoPAwGf1rF5eQ4SL8$hS9HA$BU60{z0-J0_v)y^vbk3Y at 0b>Ft<9A8VYd2V6
zA%BdbRTzSdL<pgTKA;KSQ$&P9?c{%x&((<qOr=nQR;=6QH}1ESJUQCjC#R)7Ahzw2
zJs%eeZU4=aFky11d(g?FUDzB&e7kXj>kG4^B7SD_->*0qHyXaqCpX%$=jFL)S|&rQ
z9p-v<v6kwRWVGDhgo9TnpLEMSM=WqP`F~wQl8h3Z9ZhqI#ZDmsW1~kcwXkn)0uwmh
z8vu(-;vg9opJcAXw}bu7nXf-M0Ln^ntjcX(me|nr$cX}Fl(l=LA at mFL0s9%{e|Q-g
zoPLp&1cuQzB0LGY>OO$lqLA>&hcgE#FYd(=a53pyV%d@?qj*?pd|4S66Zoe{KY!DV
z96Ci2>5u?v=Ju^81zXXr`}jxHc0xxPo7xTl!4GupqR#pL&xFnlAYKGU-WQbPYBH(w
z(K;>$_PDGQdLS^!p0B^M2Rg-13_Ekfd$HLH?2G5r2n$#7u}4mOq(t}95hqcHoHGtI
z<qzHIC08r>UsA>IHG>$7CBKZp at qh8{(tepI8-vID<NV5WpZeaPJLw;- at np(cWrZ^v
zuB`L6e~kqMUwl>=X!A<CzuZPu6UdY~c`lbpIMF!T9E<4W94kueO-i`Ijm;pnHX;nn
zGiu`n^YZAU<^pGdP?Q=}F7J;PAFdi`9Y#<pN=DMq8ELC6Gsh3OArw{NPk;FizE*(^
z-h=MUy6vI`OPh6a3JRhy|L0hVo-zsK!Sd1<WLN7?-Hy|V&2S$c!Qi~Or2qR~tEU#K
zq44di@}JW=%K7;9-i{Qe*YJBSDziyL^Ah;2JI*iEAGD0QTG{mJRbYJsG`1sK-IHr}
zd9`n;w6^+1MF(}FmbhX9-+vLf4BL2Zf%#4%C8s$ON#Szi;8oA)BoM<%0&~IQL_YFA
zP(Z_!?Yi%#y)T^w5tt)z#7eDua3EvJrY3*80Q*;Xds0ES;8^cn9rjIo+Mslw2=xan
zNU4n65#JM7IIotOOY-a at tgBRtTp&07qJ5wUVoS97>dsDCW>%JzB7cV(Qh>@{Jyp<7
zmknrxAEls`K`UYg;p3eRgeDyBHL`##QWj0LS2#^B3J|?UaGYo1k`>=OsGUl~>koeS
zp^7u5BM!Y54D*esMBEq$0X49^_}mTU9c2u!`IP_|<jW|)-il0J0sFY?4wHc+W{Rfx
zzAygDTvHnuS`>isJ%1!d{X=U$mLABYl`%kl+rzm!uFwKT7{>4$k#!vVJ_Z1dhFo56
ze<tcQEp at vYzP!8_4LtTkC<p3<nyrpED1*SqDA{17?<b#}7NwTFb1W9e6go+bNuBfj
z5|O#Q5mI}C!0;;4W`xGS(RZU9-n!!FML$ug9-{A;%JE5`U4Q4RZJ<8y%u?ie>60;7
zXK5)buRkkr7zdxxA29S+YOa;c+6>qd_~xGP*LKQZT*XaBD3I?dSWg%fL|?i($;A;<
z&OAcXaT>}(EG>r*f5B+PLlw&L(|z9yXG|!NsWRYB(hp0dk9eIejFwpAF9{(^1Dd#a
zD`HLj7w}5UEq_b^4*13=QL+z1m}#R9Ynt5h*P+R3gj|A&%Ou4!P}m(G0j`UEWFQR{
zeT2iuv0h@`Z|vaDUW2wK+%_h)d8V=i=Iki)HKygJaV_t`c}}-NiVqfvb_WoJ;&Fbq
zWgvf&gYx3fCb<%7NBC4s0V?oZPUYZqzdt6#9v}}z?|+B)ZFyxA9hU>J&_uamQxM-c
zvEG*zTs|&CeOtUD*ZG+vgF2q+#=(7f3cXG(^jCk$M-p)i&a7=WTbex3!lj)0GzWix
zzZzL~d9>TPK~X;&_dxZm=AZ#Sy)(<P(7 at moY0ppqQ837M68@fr#WuE$eBuok7qUf`
z2gD^psDC+&<iLn~Mp=a2|6Alf$tWx9C!-4s%WS;frF5hJwq=Dn^OmYIUs4LsyOpl$
z1H+65mt`B0-$mrt^}(YRL=fi))~dIoo|vz%LjeK;)PCV5HQtd(*C9mYEq_fV<A2YN
z?i=KtO9E1892fmRqx6HwxL{8`8pYD7;d?3yoPS4CpO28L)hq4e#;S*~NPw$jk||$Q
zl%HAERT^H~WPMQrKxOwq%Kn=$G*RdR2xv^fP+gX*$ipe-YlenHXuVb)e{XQE>)GK|
z_<i1^zIc65?xa=uHjlMESPJJlGesV7kPd7sNCrX(eRdIA0rv56>~SP7c{Z*rtJ60I
z8Gq>fPH=QAa<F9KM*T8rQQn#NkjQza5Dz2j{062h{2vuWI+g?D>_f}8=|%SyvAVsm
zbvQ?ts&VDKE;&`FPDobw&NaD<;@Q~)JtbSHd{_Mdo&g6 at rTN>#8WhFs#n|1O%mRg<
zf1p_}ya-54r;?jyU1$aA_O;jQ%W1DfeSex9_;AmoD(Xnz3!1d*^_WJDy!866%T>Ae
z-|i%;F7M23fwm0;ZAn at en5T)$Z?l3EJ-xCd-)m9Wc_4`Z0CX=$EvB1v*S+$EFH=^O
z@`!#L466PhuYsnROO&y=)_<GL2vLG}Bfc9 at _d{X`(CdP8YrCpjVJ$wks|i`2=YOI&
zY&XUs(H)+VG}6b0mV5QfH85VRa>IWqlrV+}=Rc>v{yv*sP}RDLmYEV&2FTJL`!OQm
zTVXy*F|HVP{RD_b_nZEo*d4oqsrEGV$<aa*=$k*m5kN_pvl9Z}eJ8S)Jl@=v&Ka<Q
zf{H!XU{ZcE(6bUSz05HUXTy3mW`FkV);Rx;Bu5C)Xtv&zPv9lPt%RTN1a^lcQtbW|
zVRMo~1N at W5SRZMoLr7+zU~ESQ$WQsQ_L<H|j(hl<wj*z=@@K>Wz~@1gK7p*v-Nsap
zwe(ydbhkeddaf^+r~@8iJTX*~o=T717dP3j<I}!CP53tR`~K-b(KJg{mVe!Jn;Fv0
zr)Vay;~iqzi1Q=>uYKXDBDSxth1<BxX%~W+;gYUdw<gexCu|7!41+`xM3!1o22aZ@
z#U*%o;;#ajTTHk5#8h~atajBPqwwxc*#;iMfEhSLD<~0X(C)<}$1vZL#x~BUA={<;
zo%b7)ulU9nc|izs4D)>qxqo?#B&_TSUjkpUgz2+-<P6mnw(S21^7#+ncAD at eqt=CT
z&rMaE9M;^xiB6HAFD`Iv{F0O7Ef;FAwc(J+El=ea3bimk?e0RrCtJ|qrCAs7D<D>P
z3OWjtG_L*)_H>$ib^{xeK?5*U{i;DrdHBa_ux|r(TSR8LQ0iY!$A1<v$$%_w$!=lp
zyWN^F+Ipj=j+^Z7${O-}M3-diL2kYzb4(obq`Fl|mV)zNfJSGzjFpvMsAbs29DY-G
z{Th(dP4D7cRtiDWUKg3g?D&peH`<F^qfB;^>K8Ehw{X!@hMo^AM8>Q%qTb|*nGqso
zNrxZIcMgXA5|gjj(SO~wZ?~St+Ze>+N|ro+QW;&KSTc*-#dk|J{fnj7ZU-vh$Vmbf
zQQqiPptA4d4Ng`0c9pPNw~!xaW$lwRJ?_#Vbsu~U*L)a_3ZNAq#COdhcZ4mV0M7O3
zG*C{$8iy%0A}=ehXSorrgK9-b$4IUil~&x%tjr=$TgV2D9e>h7kxgWFK?!zj76%Z|
z|G&#h>-jz$_(?4ne_&=4SwQ)Sj-}q{;kn|9NEgb0&mM6Nu^slq^XcamE%&@EtZ1J0
z*<>NRGr{K{6v?KYwnfVL?b?SgL|F%9*n9ZC(ceyfq4nxufAA0ek2aTyT#TEmStnGd
zSRaw&@t3~buzxGiPa6Vn2vDjTkfjktckLwZ%O|Dzlr9$gpDzxjTmFu9?e`h7HA%RY
z#Mu;p!pyD$zIT^bsLU|P at Nq>LGk|U^Q3?o+I1__MB}A)R5qh%o#H+Lrm(yOufh0}U
zqO-V4gyO&{|3 at 4yERzRZ$P3Q55u%cVxP2WuYrAw+FMpKvDd0$lm^c&!<3k6$0unGO
zF|K}yoCUg_u;!ZFUl|CriVNBjx at NZHEXDUWLQI?~FZiCH>v7scge)f9s7#f6gC53#
zp|-(2DpMKaTQu5^-W{ry^Tw20k{G$)72x_B);1xk_m?DWrAc0%!l(XGl(|26!aF8@
z+r{NOGk-^!2I31ED?$(taW5F!tzC4!T-ih`jPSvUcy<t|Tqvkoz-4BQVpcIHNgQE!
zGFQxE3=l<&aq2=)C*ImP?>)q1jmWnrx_&0I^+2YOZn+jvw<i5i_Ikh{w9%>*Rujbg
z-;teyB~m;!H%ePNWf56&zcCdw-)*cD1c=Xk!GD at 7pXL*s>1~Zm6;@t-qf04SrI_UA
z4u3~o?&fm}sOcIManQGNt_Y-$q0HLuyVK&5wHbWmxSz6aL;o;2np4y^xiRU$lf(1F
zjy(q_l7;Ay3!j301Yh?xK}?H<=peKvx_0+DGX;T)ZS at 0mTqa&#`7rIVE|qQj3`jTE
zXMe%DTW7CJScjOOPS(}&CV{eCyinDA at -1GI^2l}<2tlN)I_amArpH<`MXS)HmyBHW
z+w0SU6+x36O?<jIgzIde at G8#2Q!7iwIbrkxHs=VN^iKyM0=&8)0I0?1Y&pBMFudrP
zANk}@$SuFa7VYpJ-85%L1`1P*!_&RVzkkZOGE1{K^)ouy0Lo59RcmMsAOr3Bzt%tn
z#B_OEtYRzgLwrxEw*Q*CAVUn>VSt`ohIZA3M94buiZZUA|7Y?>rhGI9L}Hr#65CQ3
z`ihzx#<hO@@fdZUm!RUw#jP#vtci5mA+=@IW%KJ&@!Lx{;c~+PgpzL_NvJ<%OMj{}
z2C(+=pFjL at F~&t_0?xsqOv?NME{_JoKg9<#Xh<^~xTAiX<z?dD)_^m$6M*3$c2|~b
z9{<M5NoL#|t8)dC-L=%+*F}<fmJU2YVcC at X6AYk)EkT-V=V5|yC;^^J59{1T@#l%)
z7XbKx_{QoM&LH2L=m5S@`se^bH-AIQs*7Wvw{Htghr;!)`KT}&$uN9kvWz`)pb(&K
z`Dho at Pal50aFCV<$3|#bgEJ-#g+DR=rx>XuRS2Yz#u5uq)%NQjVtp}o;)HT1XX81@
zO6S&w)49a7Z5qAGnuIuQ*21bu**8nlCC;bH8)VoX3c%r12Cw&~ZDi0og at 3`ts~v&U
zjBMhXds+c4k$yNH=wI1r-IBZ~I3B~6iCHta>j|$vzvmZH8tV1RhSSxmsa;nHHcTe5
z+WCmWj at 13+VPmv8v(YNS4<;Xyl|Q~bM at +3|ObmiKIePm$;yyOQA5G9A>&?2U+9$Ww
z7N&^55nh`Y!o;6|?1#U~kAHc{r|D&M63HGm1R3Gr|9dmUfDFv30`g!{>i8i6o1=A}
zA+U!0B8C<>{RYZiA;^0*9^D+s&YI at K79E|TRSP__?Ei-t&18u+V5c1#sMN!gOeu!s
z4U8yOkMG<49w+T?EG&l?4Ry^LI$MJY6!AAL2ts{u92*!1X0mR8g at 69>*>;1~CJ_2@
zhinPS1+)(h2oW#x$bniBB}VZgxv|%Y<?jli--`w4(X)?#O60+-F8*vB1QPHck at oW+
zZ<6H+WON)MxkowL+<N&#=LD-6DQH%;avn7?v8K`i*yzpzNN07Fu-I5=3hTQk01rU$
zzki18!i*u{ea4|@jPHUGV)TFhvAFxU_a!Wd%np+}YaHDDb`GpX at VbEd#YyB>d%Gy*
z(u5}t_gckSMz?1nmu=akBoq-O)Y8}HhS2mCJ=mmZh(^`bW(Zh&|BQ?K1yT#(2M&o3
zI8-x5*nP1~RJjlUQO3z$f&5(SB{a^+Y9<O6yY{ADalN{2KPm1O144hB;5Vh;-jl`w
zPtyaJ{|9?-d_g+F0+i$yPjRS00q&wB0!Q6sgnBiTK6am5>cxOXs2Xmdfkdt;pk6Wm
zU_{1_L{@26+N<hEhr$w$%J#kA3-9)w&xPb>*-5}(xqC?lz}HuAi+#+G_iv?(LpOd;
z=tAxWbBsEvz2(*X!ghbVQqX5JhVh+*6T!duw`zcjPe79c-JHQ81<eZLmBk%a91Pjg
zT#Q$dg!?Zhw?J?r%NTM_q<w6$4ej`%M3AL84sZf6^kA3{IeUOxaN>_5b`~MCa(|Ws
zb}+MmVn8*yA?3CT`>nmeq%GTWsfO7ss|y8~@mJ}>d$X{y0^t;iN3^E^0000000000
z0000Z&|yQjkT(Ue3x7X%l^AJZq28i`MZfN9F%Rykpa;8yk$Q at _F^-Uz7KC-IPi~@6
z6g$SotXY9lC-W&fdP5Yr&{6Y<*_AqD`_229=fW&B^bC(pbR%i4qMu!BU2UPQ6pV^E
zL+s&ks(YLdO8=mj`kg(lRYhYNd=1bZqR4OoVviWa#vQTuN`IK!L1LWM{1zX3a>hem
zg;G%Mfs#^roP&9 at Rxm(ua<g1yFcaTH*`5;P`@<)4v3M$^k$U2E!&M57K%WIUAidb_
z=|~J#|1Ms!oHr0PSCZSKM;6E76lG}VDyicU`LnbM9{UTCsf>Q2CHG`ls4O~H#hJ<|
zFwq?I=Zy2QL4UwbMR-9M`K!H{Gk}Y7fRIruVPPCxTxw5O7qAWCY+o&hSNfD=CDg_K
zoJ!<eG{hY6a67cTUAExPFjJ5Ru(M65c;<i%XX`+v&CTvCFd9ClSiZJvR}n9+O5EUQ
zl7I+WKtGcrqmx2L8%Ap1kt*egKA-KxX~Pam)HzdomwzJN9|z;ovxlG_^{FvWJR!(<
zq~ZKWpOGaT#E9jz;6(vGMu;{LO>ZNY_la(Apn at 3Opt}YpjnbsC6wy9H at wVc}p2UR-
zSLY=JMsAVjzF=oV$XW9T-SV9qaGjQD^0eG#6Y^<ISH2P~tGrF at ky%k&D~}FqsBq7S
zOs2AZet(7kP-*0 at Wy1e!m`}O~jAz{d6i~~%`iQF)uTT!DyQGk*ew9Lj=4rhoAKQu`
z+%D`11GKE!`JJ7;4PSGVUp9ug$QEAxq7Zr at t**nc{bO#22l*#@-5DdrmO$^LQMx$k
zj%~!2c}6#I8-_!|?+gvluP~qX!A7%TQr|G?seeWWP4#p|6l?j~bVq734HAnvt(v7X
z4mUr10s`N|7fyUdkym{%qD_*=|6kCcwGFm9x$T8LP>^*Iuln2kC7TwYb|^QK4Ap*j
z2R2nasTsicv`2HWyvk@?Mjqw5Cr_k5YO(AEO{kM1sK(gp;lR6a*P!P=kNKZ-^0<7M
zDt|lMQLGd_7L6aG4z+ew29^X}mK1Qgre#C3Cx&Mt^DRymuP?S<7E$FW{XPR9tM174
zo><uR13##iyn&+9TYG-qcrWF>bFxWb-v1ssZ)kgY7yv)v+$zH~+(+B2=!wls?^2?S
z8?E|71?({xQ9!23&*HTW1WQB$@lD=58Gl6SVk*cm2A8nrI)Yy5fv;+~i-(1)H!ph~
z_Pi=Nz#kGYs0n4RXvwAUBaa7iNi8^|StkiLssBj;22oDvn*u`umh?OILom$v7$s60
z*fhB!5tYnN6~NDlHL&1JAZ)trte at NLDU<)xRjQp;^dnijzef}?(d?P8RYt<t(tpL`
zWvpkDy-1yos4$2anNzu4qr$(MYdChD8||NKG4~k+QEqaA(Xs<d`;p&!t{D~zSt@>=
z+^r5?{jgqw4BB>argz^loiz%-zdC1pGKcR5MN<e<Ki~D|KT9<uqCe^(6Tv+$D|UdO
z3eH{OuTIaWbV>8<qhY$@h`U^Mw|{{OQ!12DkOlC~;{jbU+=rsv2HqII5sbOwf?`lm
zP5k?FxFH1>!oX=tzLF|koAcP)%l_1p;N9`gyvdA*56WQibXRaRkR^nCMcRgcVhZwE
zT-- at fQ&57f6tiJMD;{4w8Tp7s$3-+_Kcf7N?bp)^jOY~Uv0f+^FkRq*P=9$sn7Nl_
z5zi^N8uPw$LH2og26-GCtDnv=&<#*wmp`|3$6 at qwEnEjE$Gc+A8BMxrvbus5!(b2b
zq>4x?g<qL}cIdkR;*Xj2bIHyuV~uNyRa_&**?B?(b-JXcW7g2zQa~oP*ZV5khHr?t
zz`F^tC0LCuy`lBG`%DK9tA7BvxHP0Tt(nZF{#PR{W)vU<sjBMtyCE-yCDXfT6~{A*
zT4p|`au2+J2%74%pti{83DDbVV9gd$E+;wx0)LX35ejz-|DW_z0Le-i3%^&>npJ{=
zD at wcgHg2fGc%g)3AAg^f(L~}>)@|w^GEs$)p_E#*s|?b<xAQ--7=LhZuLs?_sShF9
z8&_;vbeCc`e;}FsW$MJd8xBS|9o?@{r~zYRaotUUC<SJlm&=!;f1+sVkGUJLj-~4=
zQPn_XWLVI3O at 1&$^MNIhuq1b1%pxWscOYGiigY}3atpwC4*nkitL(Fu9M8J}Fgd6$
zah)KJ#T}6ka1W_7hJUW0<tuo+38-{NoT8i$_dpBkKm0rn-%{xH#<OelPv`Ai=7DwZ
zK0}p~@5ym%o2^;`$%~J at 3Hyd8(|-=bOJ-|OC0+aMHaa$ytuS3h$h?tR9RX*DF?a$A
z(72%MFBkRfO at O)RTDMIjrw)O<o&4_&N9Tw8$s6lN80`4k6n_V*G22~I7?GyH^pv;7
zLcj>CbyQEI(!>;_qKwm4^#&M_@&`Q;N{^rT3Y{hn5$}GJXSCB?MUo8UHVYMT5;0Es
zSqkxF)-Tjdqm~qKmCl^1+Qu&3ygkYJoe(8KYyNuhKugyPEiRW$pj&e)qO%nrunDcM
zi30-vM2^~aXn$3nAA?}RBj^|bxn`T>J(=8(1$V<SU}9qJu%Y7E>TP(FgERYpEZ;FQ
zY1B0%)9R{HQ6JbeXeJ%Iz%&2#pgcr^k at kPq2%L#j^Z4 at ZL5Bdy+76_x?4pJR>Bseo
zVGJo-NNcH8D0CLB2e21z(Fvj6nD1F0r at yoVR~cbox_|W&yqWFH6I_|#5}$W4X1h at b
zT+sV!2jWVR*zCqO>7L%$wfcc+zq8CuzV;_n*T#u~@Ov#GqdtlLyAH%Q)WCkY{xL84
zl at H~o$P0nSJ)g{0x3Ycx7nSF+=J3OinEBw at m$MeTFSnY#S+i)BBn3IsbwvP7fDuL)
zll_LV*?(cxz29Bb--ruN5?8|2mU%<$M-{(nvxgFTa}%+9ohZ297-VgnKwz=I at ejss
z59c&xEimXs<YeDA5m$)tKhj&mWb+v9XWflgZxNGjI<(D!$0JUdaG^a8L-scKy$6l^
zw3xv4KXgvKKOK8OJc*giM=&5*$EUwL_W8ExB7d(Q6g7n(L(6w(5RMEwJy46%l&nf|
zJ$;XQ(F%(}UK!_+n%+-*Yy;v$rng#OinFS1Emi6;MVCF>4p$n8l*kA$-5&m*Nn;}E
zB}+XF`H}b;MZx at OlxkJfWD?N|;V>n()C8J5|NXN(kB#jGPhN#oFH~To7kk%9pe9O*
z27l7=JO^Qxfjz`@7DILvzr#POfjR<Mh(8nnrF?XU at 1?2)ZnA-sN$vbHW^}tsm>%{(
zG{{k;0ui(@O3ufT_1P08G_R$?o;Zl2 at xhV#6c6Pr*8j{PhN;_dhQ4Q;6dWmqJiAkx
ziABVukBwb39WilU67$p<j!Qdr-p2JcqJP&q85X33a%WE!q-H#12<PGnpI#Ie6Zhc_
zMDhAv2qx{k4#n3yz^`19?lct>p9sT8ZFZ+(i$Rg;k>750Eo9Zum??SKl3d`5DKLbP
znU+xOo>p8cm at s`nD#J6KDKRXp4FsBEoOP)&7y|5miQIFs2vRJfU{Xa7jmeU7u7B@@
zKb!t$CiN*1swLe2dTi6Db+EFi0+fDuif!p0R<nUZ_S*0RN`12%Pg6-V2GP*KX$prt
z5=~Vz68<V551B|AAo>8Z#~%kfrw}Tto42uoWccePU#j*Gs<lK~?zk$#9cm1-2)d$@
z*Mx*ZwiR)w0tzC$>gzCa#dNTAdVi(4CmA!+2#N6L>cI9PmQ^j!fCu)PSu*C9r#CS-
z&Rq3WG<&{Ke51Axg)4!Lz-^@gdd!>&VGX35$lUzkCo4q=qN=cn*1PXH`uTZV37N7h
z7flpAAV#fs<&x=BAT~ICg=!RtTkClbZSTMQxN=)=b0;^_CnipaOGOejZGSfj+lt4=
zk8h at R4Pn_qW6XM(g1&iS-i8H1_RL|{YxCzOX;gvCqB;Nzn>6;UXHAjH#hyr>=SHe*
zDSnf$H)ekDjY7HqCgG&Y`s$chpj&%GTj3$x!Dez9jxsi%^wkj1l>r7Q!&K|tDQ#Le
zk1FQ+QRt^$U$BbG#^MPkuz&aA{wqVwx>AR);4*Aw(Re*261sy(|8tLugU%XS3jA!a
zd#m8<7eg%!$|;^GrjZ^yS10Fzu`KuU54&enae=AVfWYMT=RSON`y6-vSl^LL$wG${
z%<bIcMf?_#z-Srrfm=@kMI(L>q1 at n(bm?2abvj8CpLNiaCojk)Jb%RwVx(tH)t@;1
z2@=<fY+siLYG+CZpMp_hN_ppx6V+E9AQ)Z$7Moi5cltyt<oR8avoh^)S;rHi3ucZ9
z<zf<fuK>1fN0^Vl_nEQ5!Ux&VI8A3H6IV+cGafYv4^c^A>T>a-<mFHoFXE+Zp}1y*
z>FO^d0~%Bvtejs7;eV#o7jQ-a(U8`Ys5Ow*gkx$bj8P-;FgZX=2;>ge>?wy-ZI#>c
zSeS<w<l?&4RX9yn=5eZ?5O65wieu0`P9$E1*T$AG+6&>cRXh9|g)ED}tM-0Tf2(Kx
z66KUJ!~`<fM<iGf at PavPmqX--@wnwFsNJ#eOkZ2y35c at A2Y>fwux2(BI!SH$mhnqv
z-l$H^3a&e3wxnoUTjITnErlhFMU9Cn+krBY$H!Zx6-?VQ>j|Qe1818>cq#lcPOm~Y
zHwjjK&;#Q?ITMDm$GbK8#85BIdXF+Pyei8HO6hIn-6i|)h~yc0Y0w_%kXvl%VA0=N
zC3MTU&|&qCSAWEX&j-DqBmrvfcDpBw3*R`s|2R|@??kEz8hrOJaw?dZ+j`XI9I50i
zUgv!%f7;l3yn<_tDPYk4{QoG{F7D3c($JK27YLg9*FUC!`HA(46ewSX(#x1ugSYdB
zxsp9Z^lFYzP^$@a6lCTh<u-T(-eDMfQ1)0b19F=3(tjBe50LA3?7;j}K=2hY#>(Gp
z?b|r@;H*_z&;2M*cI9M&f}h{M<06rcz;d<H$?TMA_;?Age>(jxyx^HM-xXE at zZ#Xk
zVlm-ev;ma-K;6f9R|vx)D|m5)VV~0?ssyiKv7>aEigY{n`SAlEbgGN1JKpe at oySdb
zU+8QJ!+)W%BfNxJVd`Cf6SyoxA&OGWtq8E&UMBthPF=axL{^oMtFmEE57DO?0UCu~
zK}|KaX(_UO(Ih`7hO|zH`4F(*cH$&~B?LBv+I(xU>$4K-)<6w9919K42?m3PK@({K
zNR-zEt>z|v{%gQiSDhA&AI`|cA>IJpiyD-G4}aL7*YN{WWm<z{sJUOYBSO+p)v6<7
zv=51GlDC$cDBB3P7_c{J(nBt4+1VgudNm9g at 8FX|LTp7KEd at Pl>`k2;5?~yN9D6th
zIW|ZCYuX4k6O`z}9R>?j;KSo{pkc!4#5-mbUR*<cK4_A!@$nDY0voqEW8FWZ{&cm~
zO at 9vP;6UOQ#~gmS5cmWF(Yl$3kXE0Xz|)Hzk5ni$7PzdT<IicXSxI{P?jhl%{rl=s
zOe9H|LCb-{H8OqR*KpDR*Oy0hioF?ul8~SE*#%NdWgDDZoI)YmN_HsLdY{9tMzD#i
z?P7)$F<=nfzfv at YkI{E3NjpBj9fBG{gnxgSpbx+rfkmqkRp1e_g~tv-O*$?t^yCQ!
zioDJj`Om9?cHn+Iy~aq5+k^ZkB7!VvbMZ5s3gblmT%Yc-!yPM?ah&+elJs6sDnB+-
zq-h9&)$U!chxEr^ZMDCAgfU4nXh_HO;I*1<(8U4mihDaBd*WNZ^E|4gul4<Het#UE
zX(j&-NhSdxCk}$QdEjI#ru6T3k)0I25>EgVI at kBqLcLDxWq_dKR;@U=10Xf~PnT<P
ze<Q?~2m*~djNCY4WIk{;Fk>p!&?R$~ucW!NOJlUMyuW|L^J)doks#PixdAP`j_4t>
zg{Y(Vd9x6QARG2`B+pf1g$oSHV1JUw#EnaO%4Y)yDEv at m7Xp2+vl!fcG14fA<#%2I
z%$TTZGXz+QN7D#rr#t;&Q9Tl1y9S_?;_KSyEa0#n1q|OwDo*%|ifN0k1IkKK9m}LW
zuQ(n~pb9jqwMQ+-l*lR40mW3cHe)3pA;Ri%IEh&JJnm>@V at 1uN(m%Sk(SPc7NZ3Sz
zPZQ{6LzW15!^c)fuuqd3a9`JIEwa$Sc at uf{!jsn<N%f^^kON<=c`YCOdo`w01`0?c
zT-p6OSaNudFlW|M<(7<^rymzeQ@#!WUeLR=(eGKiIToa~<T)Vz!A at h8Lu=V+BVR=4
z{H<pCRVIYPPe9<5)@T+DVSls-Ccp%(b9GZRKstYQH{yySTWbf(^qEZeL$QxRAD0f2
zFF=1}51$I`U_!B3=e)~fbA`s6kEtEBg at KlFNh@dX3ao2j3p;{JJ#jgb0qN;&_ at YME
zB#l*DWKV5yG-ClyzoA#zR^iQAL`8JTvs9BcW+T^jb$}T_^xm at 9vVST=L6V13dnZ(?
zYN2k^Ps;9Ib_gf&4_r!vOr!d<Vvxpe_ at CdLF8v~@qlne4XAhbrs!!%s_%F4-!dXWO
z_evJ*wF$0dBjQmj(>QlHB%|*9<}bq@{p}Ra>io^Z*`XKIuJ>|vT?vcL9KKD7hpE%A
z-_aem*^f}@SffbNS%0{eB at wgEc^R5^Ho0;$7u#rcX^S9bZcd}$51`mr at 3C}Mevgi{
zD(yE>yjwIXFS9)l1ucdlWnk6qTfZV;IPK9xXE?c7caS(sMLLX$xm;*f;V at X~X{`jJ
z&&<0S{e~2dZtx0`&)9=vRyiR)X~#5$nlk8t*;%VGn at 4w^Uw?1K7frLTK;?L=nNCm|
zrRAW`UUcvg^>=l at Re?6x at Ro^4Di3qSQvh$aW!U~QAfi&j$#)mufPd?fNu(wxn`xQ+
zumw1>EMl6aqw4dB0@|(RaX1xTV%$Vtcpw;cfHR1p_X7$&#5&OMqoYbWJmtx_!bnX+
z^=J3Cp(k8~l7Ih7;gln at AAs?F^X~$_!oS1dUX^Oj=HG42I)ZfxQJmj5!bpd#rb+GZ
zVm)#r-$NW7t+TGDt6Fp;9;0TnU!@3 at tT-7HRCJjUZnZpebXF!u9$e*`zx-&?x7IdU
zx;)?SIooS1N%A$VeC3?PY__*SX*ZUr^Xm&I)N<}$+kaFFOk%E_=255JE5o3GWuCn>
zyN9?qxv*knA6^0w=tDE!yH>X&agW-=19hpC30Tw_UfV`-FT7rBUP^RcfM(EV#yW2X
zgq&nwNOW%r1um&4pk3l1zPdJI%rP&SlnK|-ePdv~mdmZ7b``=)MtX`Zm<$RWX3E}C
zpC(8Y41XEpUL^RSRpF3b`HlJl5f4pvH&GtoWHXABmj!I}mo9S1DTZ<iW`53*M_E-N
zqBXpi%2BezxK}+}qp=82RR(`|3Fzvzid}|UHy`$A$rd&wo8x at cxv?32gYG;`G1X at 5
z>@dnF`SFYt&8*?LmRP7s-fbg{!uWtAkvSC|FMp3&{yVo+ep1wUnF_6=N{h2z;S6;t
z8CD1(duY?54m;!pk6M!=G)3TZ+K6=R_O^WN|0qdZub!P7%diVvDfQ}}GLRdn5!4<s
zUjvmd4;u6?q@|>mm2;rzzda?lCwk+Tj;K6U=IR00pS+=DhKW`?ZDqzfAlFP2Wa4jv
zWq&UK`Sb9R$7lfyLcH<#b<h~d^_6;ysHs9;tbt?z$bkvvk8!R5E$-a01VGE-c%N#o
zXH5WDoH7>yDk*#Ix)qu87 at +!WpUEgoxsajAduss}Jh$;CNL|>@eaIo12>PPqXdwu?
z9F=m*xNq6#JuwLIN}zFR(u-}18yH>hF at NIV0e18F;@I40&4AZmOTa7O>`v;!-kf~d
zeh&t9H10}wh5QOfxt;D+MXm$%&7tQQ!8no+6A*rUjb<AurBog4(_eZnolpl3G}t0S
zc)9O;HFrfd3awH=rKQn>BG>(bdnyT$i;4pLhh%EC0s1Golk#V1xKztfg1wz(p?{9o
ztBW{CAh|EmTb at sfD>L!C6P`B8tYIXx(stWAbrJd(fFMA&x2GpiI0UI49|n*Wa3QDN
zm-v->)$LuV)Q3ZS>lo at gX94mjj2_3?v*cl4iM`#IjVv6Cu0a=RpDxUs?<I6U>`U6v
z0QJn`jgpdiAG1EUvA_Dy3ulJ_e}AyRs-<E9`--<V&}#J?N_&)hBBUq$K at p5_^5#ze
zmsu74?@Mn|1`E)>N+1rovC|`rspR7jHr80gCpiG75abE60*MF`w+k*bAS7z$B0;}d
zsMfKJFq$!bEo){hmXchy6(gOxI at LFPUN_eA%4SB at A@?KlM?te<GXv(D_<v{GjY)z7
zyP!^MbTvDm`t<A|&qzJykJ-K98P at 2oHy-lt;V`Dx%?D0VF~`|C9pRzfvsVyMqtwEK
z=neU?Ajn0PhTF5cy?D7u&)i3U>GiAakDppC*fmgz=4P))(0AT*PgGF at Fyej`)R_|M
zBjE4>MJcH#e~?*uV&zuve1BqO&BAPF{&{;XfZ)?jaloA*QUV2E%N;@iRz;XNA9KJw
zl<IeK%vW~P1K^6=QV#*t51|Gh0yagyNfMYdfv&CZ;A1Jo4Qf_L<i*XtU1 at tejZqeU
znWv_%$g1@;iWJIB9RNT)Hr*(68OP#?V)thlD;{M~5P?%$yCiSgwtrutgJwkQ&M~g2
zQ;1pT56RtPZitwZu#^prnxX at 2SCEwOjS`tvXkgSG#~e4i69F|0T$bB<><6mWbbC!F
zG$$Qw7F;8fWvAJgJZNq+LU&&!%eV~yJS at L%E{?TZBXM2buIw-zLHkQ|*j}>cqsj_`
z8F7wBG97cG8+~o{jDI-#kIM!a-z9Gs_$sXTBHjS-W>Y!@FI2-#Mk at D#k{q>|i!o1+
zt*{w<oe_w|j&55QU*p(r4qb-a_3D!z&FE?KdIs^(A^Dw~lNeee6*ocQy;d>&LhtV*
zpqD$1M*l1NeBB_E*xpx~73_<*Qt_Gbf+-P{gI0~Hy1j4)y?+NCYqb%X^sLP!%_;cR
zQ91FFeO2h+#yAy-18yhXofNGS42|xa at i=T{_XyNM@@Xzv{r+_TuR|_bg>y!{ohK#A
zZH}cDORX^QKAnb8=(tvsxSk+Qn7Wl|!8oaJkI_A!_le at L0)KPoyY-hE^4SU?9oc*y
zK91pr at Y0hB<$qta@><FXoqlm>-SkyC^7+~1bc1uHth&_kK>dU$UG=2baZ{-rl9B5P
z+lhtbY^GN`eea!+%5dEQ<L1rU9Wj7%Gp8zzvj0G1aYe?I3KTf_l1lmi(liGzu>P{w
zPt<MoD^2MiSO4h$aXvWB9mChf5g(lR^H-wY&gFYTHGi27;$q*J*Xb%l5g~M^zbxCR
z-dYQBod!*8X-DgvY27!idDQ7v(3aBpfXScJ0}9s>mB~e{zBJCZzfcWIpAt3ben)i=
zaG#rPL0Kw36Esmei(a)WGqfV*A?bsCAPQwHW1ny0VzCEN>G8Y3=_G^yFdB#o-?#kw
zrN!y|sej<k)QZBaO^+ooN6;lnwR+UcUoAuWW9^0{M!@reuJp@<0+~DL^*INW6Wu%V
zE_Qo4UtH7Ek{~&I5zY6UP9>_Bi+$KIBkEjt660@*NU%Wzk>o)I=c(Tr2iTrBDkZLI
z6AOHDY3#uN2+B>MB857nhy8Xj#XFjQ9yU1$BY#bMPVy7CdwcPO)7^#Mu>lH3o9}I^
z$oQJP>A(h&y>a!c8BEWR)q)ES(;=ppUG+s~bsKzVj}e|eH<+IMMx`LZG88|r4#1;M
zhN+aH$D7z$IUWkBQqiy4y(gvf4>)T8>nZF;Z4F59RT7kQigZD~<?H_imou0N-$h%s
zZhv0H@!f4EpQcE{L0Hvpqxy}84F#!{vNa)*Te%E&F?2O>G{&YNO}54SUzcz8`E)sC
z4f_Nz5e9>wT}t at _A~hv4-w9~foqy-`*gsEMBnZaZZG+G{R=dZ5_r79OqSr@|MDA;g
zZ_<;j%HYuM=MC%P-k&s&zt+?V at Ck_y!+*=aK)D}La?u>I*E(w+W4ArQ++8|4)>ypU
zcm8p(Y{jN`12ic!mCQZ|O?qH~P;qOdtHyKD_o(oc275^}I!CA#mpnj~Tn7^i at 02QJ
znLjw+uVs!==CHMSROKmM%q;IYs||V+)NJQGtAx at 6Haz6(&+1>N+vB&$p~wctLVvK=
z)K*N3TifAI#wyw at 0y$UINi%9k2LFBO_wo2m7B<*dcN+H?b&^0!bbKejS9yx?r{BvC
z9qT2<%Ws4~nXsy{OY9I+6QD$x*lstULBRMa@?JxVHCqCV>(LDBz?Z-+RD9biC?~i$
z$F>CjY;tz@!tG~;n+c=AS7|<Dkbi*#$l(916F08Z9QyS$b~-ZV1=2tN5!%5^*boW|
zbz-&(xmA}sV**W7la;KQgzksKKnY=JyNN&hJ0mwD%y`6CrR2v=558h+6;|Zav?29S
zhS}f5l;nxCRQe5cUa~5_lIO9-Y?(6t<&Y|kqsu)=`$6Xx6BO7M^<%+LO at EIv0omx6
zt{4%c*k at qs)b6!s<8CdD^kkU=IB*Tb%`L^`V{~641!4yIMEA=8?&^I7`)Oen8Z~?j
z>WTRYw$>-k2HJHN`QQNZlmw4_kllJ5SUdvwcvD6GuzsEc$1uRI>K4w%rZ)b1YI9Vl
zTCOd7Z)6awXPu$CUyvmsmw&MY^G1;LjP}(SibK at 3+tP>k21b~MU_GTuQwrX_g^0_>
zcN`eZiZlVE#i7gHjqg3;^UTGIW1}NK{Cb&iwlh!yDYT)v*$O~zOhgYH%xCDqgT&h3
z?pXVb<A^_85{7Gnk7?Gncoy-*&7R!jk*9k-Z=)llgD}L{c+|n&;(y7>urPpSkBTiD
zqS>JpuAPsjxg345RA!k`bnU5!dPp=PZ6wgq7Aw!ZJo<!&n7zTOjvkZ~!7`*M%spvI
zT6UCe(~Znza_jfLeV=2?w>ix!&IgL}<h^-w=#~yxwX at OhDtA1^-|`;vGCP1aNu3uO
z*nZUn5W<=L&Sq8LV}CbhguL0H3<PC?+N>fvk5hY8=-0f;7iu5eNN4H7g`_(^@li?9
zQL0y`X{=%+rAhgwy(nRa-(VEEzq)tlCGIX31~-6JH0+b}7?VWdo0aHXx6O%eFJ=hR
zj&0t)H1V9Lr<OCG*iiFCWl3;2ELvQ>WtS}y<RvcXG^=o%y?+AFgt3qxk0cLaM$#9`
z8HU&D#d$13`e~uDg}TUa+c`*mWt+0F?ec#|YNDza0kTgh`TBp-CNYq=oz3<Piz;yb
zM{4{NURdlkSMyzFPGJ~0$9HJ6RKb<TwW67fj`MCFn|Bu~8<qX_&?^sqO|FkFz{1~R
zTwHRu+o0WiS%1l?R-AjrCLgGPTUdJQU9cLXv^UOsa3}Z1_${*a6m6$yCF0 at KgVuye
zZ8 at u4Ot)nYcjjw^h5(lw*v+11gf3-)v)1|vxUq=IdA{?w!Iu>uT0K(JaG&nzu>%w&
zgbI)NeQo7o3m;qdXv*xwLlFNtT_gtSwBj^aJxzR^XMek5NI3!r`%_g0Cy;PV7O&@Y
z3~(N=(DKXKP>R0{99xhTzNDbz8LN84F?_=G_Wy)3+xMqKujjz>M=}xT<|Jzy-5&ea
z^*B_>%~(rC<Qb^}7r8vW at u5L!(J+%jWh>1r7+^l*s83R4mSoBhb|ll{t~8S%FaMIH
zB&xKiynn*^h|Y6+S88`&e+;>|lLNXPhb<t=rs7201DEddXX~hUtg6K2vu9VuLKqWh
zNBmhIxB&T2h(4psRn1coh<@B1(K9rT-8YpsTx5Uw4&NRX+ZP#pso at 2%E{bFtvGM3`
z6c$-9=QN4Y+F+Oxjvv<UjBt`y)CP(K4u4?D>VE+WV{*kF_J}G4+?2=oDq*RE1tLC-
zsAA<wB13s`g^#6jlr-C!2f>pt<2mkS7OcNqW4w0rOzYdxBZkW}vu?15y~)$}lSpPq
zXVtz3>ImWm-}J=~oPWfC+OT%wq3W^8a!XG--FyG#fU<XMaJ(3EK4lxa8*|m)Lw+$Z
z34b7`Lh?>A&jq{hYyoFD33FK51n;shJO4t>NFvyl4bY^=bhZgdBzC8!*G9XvbF&!r
zFeG;a&ntyxSGX^+6n-gZxaI!?fi^vsTFKBKyRKbNl9#x!Lf~2lzCA78E#%LImB`+H
zE}iNyUm$&TqNjQaM`{0JetUcko&yEc6n}E%zu53_nRMV_pT%{0_ZCeEa4K9}C}-ie
zw$H$n)KbZFxf;_^C#<pc=4B-Xx*0Gp at XVFD@EahdSWnCL=jkH?k at W56xapg2DSSx{
z3DSJ9h%=t+kq}Ke3p*(I?%!oSBqE(ES;`O0V?n2u_{IL8%4~c at KrG&m7W?y(q<?)>
zA&u&O?snk}o){i{lK|sN(Vsry0;7;-Xz5IKASn^QyA%e^vZ9@)S3$HPXOYi*1{ok)
zA?!_4lGe85E8J7Cwt<_f`MzOwCM7M>SD*n_oOM|LN$hSKw1WElcJTp8XoqM`kaO<P
z^g~f*lb|`Mm2#y4ZoQU4Ej(`Z2Y=AF7}HNQ)f40Jl%rQfo7pBhB$zzBZu!!28KC13
z1NEIWEt`Nk at s>?TpykRBF`nUPh at jqUjyjVF0_>8xES|2+-mN%6Mg51E5^jyu<MHK}
zQY6VL9Kk3mXHGBOxHZv<isrYNS!5qQ`nE at MDfy)oB{;?l35D^w0FXB+P=AlMwXgIn
z9E*q8w;>x{9OGD06ul+|uX=gG13u)nr+#Tw6-JzsE8RooV1-SQK9tuiTb|uwn#6CW
z7#1Fye_N|ZZh~x>^6B#z$QbNG*~c%l-muHi{{m2^^8<YW;i4bqOse-C!X7wYnM-;}
z;N`-GglNND`0vX8bF3H7J%7E_Rk*(aPZQ*E6(NOv#-fbuJt8fTp50`{mdGI3+8ZsD
z at Q2x<J2s8;oiSY_D{jn!CakAkoMurF15p<<D)(%Ke90b|k<vjSCT=-Q=^@^+<-LUn
z-H)Dy8fxP3sE_z!StkD$hP{MU5Lh~_JXx|`VNbok&Nl9AJj`(S&wtW;Qzu=AW!Gv9
zksXOe`^MfFaZt<mhfA>0gA|zLEq%+kBIOcN3^TIMooY>}qU&ax0xgIV(PF1Q$yawj
z8E^S+rxu$_Q9!BeFk3rOL?;A2wsW- at a^zF1+N0xomtJFAKv#5(N4~<{d^+zeNGZql
z3<<t3-A;%4 at Wa`zXMYklKcadQx29aP`sH_#K!l%pKbcI<J`H1>P-eE<uPlW&S#nIx
zY{o_;0zB`FXcBQULkoxw+8^PMX^5qb${3ZBQ<@(O=|Ja~Ms0;M49mcvA8hNp-n9GU
z=F|n^BV?^Nmo>0kHBSL=(hifAS(1w|YQa+Jej3!x_|)oS>VIENzX&OteKvGXHrEDE
zs3O2NjGRv4PpO`EJ!G4w7&S>r6QInLakDK{o6CKjCs?cd<pk$ryQnB`Lknt9UDySF
zVQ%LnrP>|uuE^C~dih$l1AG>#j+chCBzWrSTD9ep6_vh-whQC6Fl10KRKx{mxX&BO
zdP4_PcE+a6vwz_?BMy8mMcf_?=IY|w9p1V*9U at zpaPBg~1m?#>qj}I6ui{x6cuz-@
zVKD!{U(t<2x%`;k3?H|69ZU)zkzz@>x}J<kH=}2*SX(*nF))8cna>n;8GB`rU2tns
z3Tr~HAQ^Y=zbdC}&_N>Bp#em?#@)B(7QwTp0ZbU=ZGYxzI;X-m<{iTPc=s^z?`t3a
zKBd;e6Y-KzW6RCh*P3)+=~8Mkdz#aNo1?$&xr`L_ZdhagsGQfp>~gKUnU)@74WW+T
zG9<J3vFyt;P*fgfuJ;Ia;t_DgHlyE`3o-#l+1tc)_Z}!&XL#137Q_%ul at jbMtX`}2
z%<4iSP=5nZCbvT at uEhJJ5tZ8)$JkMln8Jyo*yzmK+kAz+QVa(mE^^7jDf*{lHop+(
zWn0vS)$1n)mw8kT&ol;(-hQ?mSyL{w3=%+%7bsG#6Wt&mMtFUJU{oIWiqy<qAA{H|
zmZrh<(Iy+LvLo<?JSd8+E$IJ0*y;}D`=YbDWPfZ5PZ at Xw6+pT4ZmkTkNL{Sw-WA>{
z!sXxg+ue4Zco-E3*tKk-Q?+PY05Hq+1N<wekjdZFJ(_XrTx8Q?`mWe8OV<~gx^z?m
z9s^np$A;54nd~2y3BW*^P6IDu5fRklOO1xJiISLPD8}>3{R-5C|5cZ;<`!(n0|+}_
zxqsiqywYPKzML`l25Wk_!Fx$MW!NI$;(lPkpAYqLg%Xmh at +m*I&YPyA4_^a4d-V~w
zB7^UQj3T4P#Awmnh2OKzo%EMb|Hb2pLdKCyzB`E1s}1MPb(p(BfMtU(A(z at FG+@dU
zo{xYtg|hp9KX5;0&<L4>aA1%9pd#h1Fn at vw^(T4D{ct1a8B1OE;vjK}Z!Fokm|5&<
zjCxfCmuSUL_`f0Lf*a?tcqceJ=<3hn<$kMQP&c1uA8?LR#mgr00C3Kvb7<Ici#o}6
zFnSD7c34Ko<hHiJ3viomRzRh=g`ns&uTx|0(~zl~Kh?H}xkOKZEJ;F}D@?ELYkx(E
zA*M$64oOx$H%V0?YXLHycNL(IL_kH!-&Ylf>fym4U6tLa9~#Rq6~fysdc*Y@<wY4-
z^Ey7;iWRy)StYB3XWWqaYVU`2dDx-E-R^XJ+hf^Bbz`7O&1U)R)NM<&%LVT*)G^nn
z5FbGrf%9M55Q|k3c*s2HG~JkLP=8Mgwi^cu?ku&$kRp)akIq_^gZ3MscjO_yR}gE;
z*K123sT}u3dhryV7-(Vqli}$9HZ;l)E$@E|!oXN+-2uYswboJT==DC-e!dhFa%sfn
zkXZ=oV+D{wieUb3U?sxMIs`_fS}_BkX}Vb8m{g^j2Z3sQ9w4q7z!0x-jeo)>Oha1=
zMdX-MG}q&al|8fmeN7Tu9lmLz+!HxVu#urX-b2jH=H at cY7TajpifuR^wJp38j(ksO
zCR=1oQfBPXu9wHUHEMlUPAI-lVg7#uv?^3UL$;Azh4DL{b<cFrN=_qJVa{PjG;!8m
z*L?xc)%jpKjIg)K?e2j>mw%dYg}%r_9%1*LQ5MgucrlQj;>VDtijBCy`D at vBa9mw@
zGiN1V?6RJW8xRMdlRsw<&O_0es;D7;C&!a2&WS)&NV>k6AjWu8_#|vYE4LBsGzwRq
z{?hOVROS^gFOFH*BXqm>IFzk_MK5~<!8*=g+{^X*ELWdg_f?PVg at 4F`!5e8f(g}xP
zIh+5=57qlt9}7_n at I^0VWGK9VjT65)(~@k{1OMi_a37i;AN)Klntd>G3HDU0Y!N0r
zQ&-Lp=8CX26sApki&vALS}=a{b)gY8JX$yRAwPIQcKdGWtto!e3TR_L&Ij~oElJf}
zfNQ}Hg{*9|k2Hv_LVvp!j?ai0yv#hOH(Q$~<tflhM*=nnZ`aiPN!-e#eCtlp&N-PN
zFui@=jNLVdoYU5=7B=)j^?Tc at cyi2kzD5zm_W(<HgFLr<Md{UEhcBtN5B|yxij$c4
zqh-+%KBbtYMD4s;+OzWz^gC~+aR>=WMPbA2Qn`=XMAjC8r+=)%T(S-#2!`Iy**cvv
z7+YAxzKLh_^%}%%awc<zBWB41o#k?TrzAmI8c=k-cKVjR_)fxEK~EIFPWO|f;Y}D`
zUN1 at jG+4+OTS{w-z(e&lDb`Q=M at 6!>nI>Y8|59E+Vt=moWyk9c>fMdBzZWtncS=$D
z2IWgK3{=>HoqsJ|FiVXN0GV0M+r8HU#>b?J3?a5qv at L|K4f$FF=Sci!;Q at RtJ+lPE
z$<qQ6igtA9{F$0<Q<;^-0-Vvk?T=s<>|Qvv8N*2Z!x8#Lu5_S{ymuVE+>GGT5V0U{
z(Hda{TDeo0(D&pRt(bnO>KXpAZMjm)>vdri)HS7)2!DrI9#9}lO*gsEh-yo&a(x)_
zSW3LJvdWm2MDHRYXxK_z7`cw}el+~zO0=VA;@W^+pF9S{CziD&UijY(1?lrY at Cl4S
z-zS37q#2A_nI5}(>tzg-e2MAGqB+TkGV^yj3z%HTOzaGcxa(mo*i*G)LfYX2^spn>
zyT1SQoPSHyc=nh<rC+jAl>#LoOKarLeRRuK{!8n2KPZEYk_Eh{M}CxWl*wo~+CQP#
zYJFrLz?#6V1RW;frOSU5;)}zGmDfW7HJtX7gI(X^1St>X#0TMiX<9y6R91FEp^j#q
z+0UkZ*9alR6f?WG#Zmas9wQPhruXX5-oSFuwSRR)|14A at LB|uo4|r8NWlpviW}g8x
zZ?-X}r1X%WbhLbcP)3ss{_WCk1BSd}iQlexwm5j0P6(b|xOLD!mYQ5URE_J+(qn5G
znxhQ!<Ti8#{>e!~cq;CrtaL>g%JGon3&z)y{GO*l|C(4QC7IslB5Xd{EY;n?BEG()
zD}Tu8jks0$M08Q&v?Ag+(TeB4YfIEUvZ0*|gV}ys+!B=~8+ps3kW#Te9rP;*fG#|u
zk5ywdQqUsUNdG2hCXESkGrEF#0C#siw;44bOco68ij2 at J^fo#3ps99VwDoYk8=~5y
zJp=*j`33E{=%p#RP?b1~6Z{t!Rk&~;sDCj5v8>ao{!s3O*y3GS)3`VLgs(kv>itN;
zAT?K2)EL at NyC$=@z`#J+;BN)wih!8MaV7?}V-oY;THMlv-*MqQ&b81jwTgaS6E!~(
zYa75BA}m~~fs&^%F7jpY+BT(#-i3u%7}G=Ybz&U7WlP`Tl&?CNVTc!S1gA7WiGM2W
zRm{F<>!rfio30*r>AtgB6`UT#k(DTQvSv<t5bZm}Gi-TA1})a7qJ8OfkSZ_2Hk!*A
z)M$;~?WKPnhwj(!|DJ)|ZmJCa^`~YZMN3oEmY%nv)#sW at r*LI<pv8T`JQ8&Nx!hRH
zdFt&dY)F?vnGQZD538>#PKi$XlYcj^i~e at WewxTx47+GlU!6%Q)v+sBv*{{ge1^eE
zouOz1D&*g+nWH(@41esW7Ai^R$WPDH|Icz0WQ<|+;2+1BeEr2*qw&oTMYwDt^Sl!8
z`70 at n<cmMSG3^=04EN`qt^GjKt=0&CVrw-<c&Lqs!3Gq^K_-DAR0wCK<$rjuBZzxX
zM_R)msY8ii=D&;oGE%x?k1+nhk6#SAQ6K&e4Ylb%q*}IC%qw#FLr#JEQbCldIilf&
z`_1ypuSAFm4eOh!F_{dHVE(ojFA(ZVEr8Vo2W0frB_d!Yx?HxR`ZW?4-^?VuNn{*l
zsY5-^jq$otVLGtUty1(rP=C*E!b$Ho+cYq|KC=@K$*1HH#KmZfWGx<IeUEdFIB`&N
z#^90K%E$r9MD=C%r3sJpZrC8(z{xSH?gMaV!)@+<pbZvjPhFN{t2$`%a)oDAfs?rs
zutAife6)DB<INArwjWB>6J~jb#q5{0=+{UZBIb{5Ky;=@B4E)m8Gp8mr92A at uZk&d
z#miCneBN%~#%($A|1F07$$ZrV&}dFiFlSC4Kiw(+S)3Qx=GWHaj;PI&-rSlI7+Apm
z`%lo~JC1h~ZEB at 0i;m2Qv1+V0Kjl6-p8M;!C$ls5WcRrQ-3c|R>bIw&G$Ee*k806}
z2drmo;sx$46D3w=%YSe&)Jf9Nk%PMYq3 at vG&S%(fl539NHQaQSVH29&APH&|lm{*}
z1Dzfz<EKQbC9)-Oo->1b#gik5_%wWqYPZp^nt%FFtg#*bYW3y(T;fV*j>I(+$>A`|
znMvQXn<5R1R*7YD=-_t9ZBUP`<p>WLCWnz0DkP*s!10)6BY);VAt`Y(;E?^%U~<>2
zru_PC%%cJ6dIk0PDN;FgSf-+k#jj?uk`Xlbdn6+SGx%HLeK2`2UQ0McE{?I>|D=?J
zfI*Djsdo at XLC(;=Pne+c;2hmL14S4Yygg4XK=zm-jc)q|9hNh{&FwrLa)o;;(icy;
ztjr+GoR+%gB7ZJM9hv$Yv<ah^g3W0b5T;@Src$7{@`8JkW+dt;%RGLG0eb^aHRFRi
z{X^rhfOob<pC2f=WrcSs4P at dvt8s;#-5h<L<M>YKVI{(m{)k-F(TgbuQr7hB9*aNb
zwDK@(=_)OW<1fo;VSC*S>4~kK^kL|*WWOp>s~Q at bLw~wJ0O^`-$rhjku81rr{I2rO
z%;jBGCD-t8RdSl(z*pji=LJltlCWddy16~skcFJ6w)hltxtPZ>il?4LsjF at W<L at T9
z>Z9GRPl>BqDj9PEmqq at QK?KC4BaKxS*Bh_Eynvc5+NDGDO~(|bSF|E%vzQ*8kUdSe
zUVm3q5P!%Ck=rWB?I-SokaRqIH<Aze9+Dk(YJl<=ca?N1MVky@;Yurw#8!@fCgFm{
zqr2qqQGAnx4E=(Q5#iwBzu#0ui)H&!g8p|WU<XjH6?>g3q&wm{(U^KQ))9I&;cZX~
z4@}Uc4FT^-qMGc*cpHBEfhX};ZTxV=7}6+Vcz^92*i?HqPwJFEf66P2h1`B!Y$=+x
zN{%gj7ZpFfAd-qpPl4P0lRns-9E+KZSb`P)tGYxOX8=*=zEQ}OjOPo7`tjTt4{3kB
zbrZ0F$m9Xp!8$#cFL;MUh9_33<~l4I6nm_<U>x>xzyi7A6-Sx94wF>h(r_>!a1n at u
zz<)2UFo3NwwC47l=Els){q?)%KH~l9m6MCiv*QG$$}bjUM6=Kcaa~BX<5Kp)i<UX&
zGbjwM&zJak^`6uqJA9|>GhEcc at XuMro|;MjCzeT`%Cly6xOH9tS^HMxapj%_mR6vS
z8_h3<ImOH40(<ZgB;Hv{2#^hCp4MfElYejCx&{yn9jO>S2Z{i!2EOdj<r)tnKrtb4
zIG$Vh%qi6iI~)O$y)r&wBwNd|EUpnqvfHT+ at ilTYQV`o7Hr2E2hpa&bxxlI68y=+#
zHVbq#1m&9IY}&^&e3qI54K)Bu#H(g{{T4&E)#a!&dck3rlWgB5LQ(rdY*b{8qJM+Y
zmsmWY*eDRu$xb13%f4E6LnVo-;AxO~C{JhEKv|rkkhkgwEObn8uM5qbtBU`Wy;U9+
z at Ou^i4Z?AR-F9=7DNiFg%YBUVmuD6R)x0O)Y!nKrZmIX!>~A}Xe1QDUXNw?&hw)!%
zjmPaBYoeAd&G(V-<wcSKO&2`NT7Rt%!M?j7xkNKaT}pL?z(;CnwXBl&_<7~RhOqYK
zVcwA{R4DP>s{Zlz6yzwrbH at kSr7|<(9IxuEv9-WP0#f at YEbiLX^XQ?S(A!Ris%<XV
zbpH^wpW=vxAou8|3<nA@*tGF*gkP0oLNXP7d_f6^ipgh+EA`lI1|8k8HGhbN9y#$m
zEyUuy1`8RlMU<*CbSvZvj0?ta`H#gZ*mQibyuw6b9wwhwT4yh|l==UN{q9 at 3-<qid
z!B4;m-*(?9ix-55kkCv(KNsRPWcAk7A^eLeQ!c6+L?IbgbfN7SD$TS0$?1hsa8a>%
zf?<JX?h#&j7`oc at sSe?o-hUDhhdSiWFQRbz$yOywbueJ7FJtywIu at n1KkAv<xuXS#
zO{w=annrfnVwE7uwuF2#vi+dlv89vYu7nYP9Gy}+NoCgNeK*IC&Z3G>mwq}_qJsW5
z9e8L|{O{B(g|UDQEy=vQW!r|Bi$<B6<}b;<DtKG8#epCcev!jKz<>50Hor{#^wfn%
zU8LhMo4i}T25c&+9th}=XK*e&PVy{<l7^$f^<97V7KwXdE-lh{HvX*x!eA81JVmjj
zyHd1---gs4>R&f&EI@=ihpBoS<P+%L`-4C(S-|}lXV&~*5#q<Yx5gwoi`ykyxWK%8
z$b^R77Iiv+WVYf;_J3=>H?G+;YM3cJYaf^Rzd9Ngb#d;b6jfvwAZW34M-(xMt=`;{
zD{@cJE>1G8x1y~p%My*KwAUcGs5a?N5vL(d=%P~-MUNZmd)g#AZ+f93nq5%dGE0n4
zvbjPD)}VU^DONEM4V>;t0lIzsxklES$svgY*6Ryox|p3hn16!^T(#J9e0jE*cexPy
z-FFAoZF)O<+=r`uZok(Fw!kOym_e!!c-)GI{*WgG=xgN%Gket5Wp^JLRPD at yL8gDs
zC6As|FFuxa;lSy*6QQ%ZFrm$SR<f}^DA5TrM;&G?0ca^{YPoK51HO(t*Liu0{P<_d
zOEzlh(~<#k_<xh!oF+$7ntTf6%F;~#dMUg`2KD2+_Hk&fGZk@%CnO7>O#GD3poDh1
z5buz(Yl#eyU#iJgDDq1e0vsW>Usx(A5XC{Sr1-U=3DAD*RW)MgO^R3(m(z)JF&64J
zp$kCg<HgHiJmL?MnWy5hcR&NJ3#mYluDCE0oVa;aw13YZ0G8)p9eEi#0>fymx$jNl
z8%ESu)5R|kXImLEn^PZf+Xd(UBDcrtJgXpYZmCts+|=24B~ypv%v<rIG1XtzeS-nB
zx7Zw}>R6C3BSZRww2y4aiMYq#XNZ!a2B%|l+%}N<=$_nx!ew9!aNd&z3&e7&6Fw}T
zU%k}cS%0bCtH-)oG&7%G)|3|8&XXZ&^}Muq{sw{<11DD)qJz>z5Oko$EXlFhV%|{;
zCJzy(kxU*gaizEgzKv;)$#g(3l9xDHd(*yJ%kRFT+3^$iJdVAw<m^XH9 at 7PKc-DH~
zm?p|*j>>z?xDyQ+qIvv`h_fBccyt(et<d5gL4Q`hM^OXE4T$DcKPhv1v+mTHr;zq_
z#(zwNuA)BI>+3+qSk&bH%d%4^kSK^%U8>B7k`!pa`B$~^M?-H3_e`k)R{!X`44)#Z
zjvj61tooBcmukCEDf)(ZI`W+WCJ&2ZH}SCIDz{Ux*_kmutEReiP(Wg4H(Xjyae^VV
zw|^g^0nNvT>#~;%o5=)q;9vuavb?fcNV|Wrv&JHqQ<2D0V4_ at tkr25_uC<Cu;dfq_
zMrvsPUx70gkfx!)N+!MKF}qC;L|BNhQozXNKZUC8pV;7)em?k;F-IRRANuK<ODi|U
z)lR+R_uQwSr at XbEV#F;Z)UPtXRKM(`*nbaih!gm<mk!EmWHN+b<;g`Uwdua*goL}N
z2xY}U&c%XvBaKEVyw)v)eXo)X0D+k_J~j_m+43it-EC(gL2X6sz=v>ZIwAbOuRAp!
zD)wFRF+5aZ=;EMl{g7?hiO6aX00lt$zu4rG!!=Z%nSqT%Q$|W<dch?7&^G$Hg(?#1
z#4&$>hezQTJ;ryZavaHxAk`=<YxVq>d(Ltny;tIg{oq^RdhMz?I3RmvRXKbQ`X$ZV
zY>W7j1#WjMm0G79XWOJxgZG*avZO3uYZp*W>n{g9k$^gK6F;ZwK3+6_WH~N>d@^4C
zLS9IAw at 5pNkbX>DadFld7XR1H6SLuDYh!=l162q2QIKiNL!0%H<oA@(tXn*gLcf9O
zJ39TTzB#an9GIfzZI;g|9jp>{yH0|o*3`;&Msv>D&G>A2l*V6qTfi6qNUSxZbp<L|
zpJFky8kM%`F?N}AGNnLY$LqI^luOlZIO1DVCDERH#UfqD1W);9-&g_vE=Ci`zr=q(
zqHl-7!4eHq7)`Vn_`db%CtKF7=9VP|{}|Ca at wbQtyX(l|sGA(V_{{fZdKx8R(lMLR
zsJTkE`wiFSDADbk#SdS^={Y%uDiz97uXQ-36!0+6RD*yi<4d0HoH31~9hdqQ@*zn`
zUJ_|uLy*CsOMb?|$-r+ja9uw>B`JR}?(S?gaN>XGo;7Ka1f67XyEpBv(h59JUY)aC
zGo3Qqa9+_dCXG8vEun{9QonLwWSlv|7))#n;?@K?nd1d^I)`nUvjlP&L6Gx1GGnqQ
z6A!2{h&YF*DHXZRV$}xfb=AhY at f=S{)`_b(2A)nBBu(nhG=hOqfIvY at 0)2lV{D`bL
zVUYRIJ~@-*VbK at KOP=hw&GPWr`r7rt%9wQ at P;5n;31^d0gxPq=**Oy(9-9dVm?pa4
z0q*cp7<FCwm(d0yH#!=A#oqQ50f at Eq^DnL{iK^@#K;ntX0S<!ms?J`4R-5?3#Wf9X
z{Xbrcnk9f{2wHLDZAL#JA=Q6gn{HkywS`iE*vQ{T7S@{frmVbPc|UfIw5nP#Y$g!k
zbruR*9q)+}NZ;mOmOZYaNrjd&B2(E18ocRZMk34IiLnVeMis?yHi}Nrl+WbYl9$$P
zv~*8jshX+4pu7*(y*C`Hiu6m%o}Xub0PQ4{)abc-hKF2>-^|ub_;G(-3*neXn&b2v
zpc^Q2!Z-)Ymj`bCJG5#6Gd+}gN;!@Vyu74lE`1K(N<zRlGFb&?4T}XeA7S|w6}Km}
zvmXO(+~z*DUT~ncirC-`^qIf|Zg=m|p<^wTLg3^LR-Qk-{M?G9ns^eu8x=WmZvO-t
z#uE3OPXmcC4+QU<v|4|ovd?tjX%MyA9!y}me7tR=qKIDP9 at Jp1Ad)*C{oe4ISIr^Y
zZ{ba8Q8FYHZg2e5swKvx;#%|JGA#>T(WJA(o at 6Tyv;v0}{ejn`Dl;kP-w_xtEENu{
zNOW!Wp0;~8(YGs6yEyK%-qM$@F3s?P!B5^BTiltTo*5c>a2<c2r^t%!vtrG5Z2Xg-
zO#s#x514~M?)9j?{eWffzP}~1^<SGZ?XXQV&!CFC;0JCXS!JO`ev!G)HnXMWgssC8
zA~y(|d-fIZy|TP;uSN&cPVN|iNOJz{%t)3-kAb<j$lP&X1#Q+!n!fquCO^&`D$ml3
zN%lP0@(u-j_;-I&V4+}d$WmUes%-lCs_Wbw_Yln1yYuo4OD`;Hv~dSjo^W!q3lVlr
zP&*SbuUrW_4UlCS&jN2!=fAmHrIbq&c&JPjA*J at LZgXcR^^c|%%5E~a0f8xWZ+Zi4
zbHHflDPgea(AFAWLDVsv&G^vtkw2M41VeCb6 at S+qRib}mAx+=Z>_Bb~&ju`x!~Idm
zD2KbarF2M+ubx;?Ve&EUwOS{%wWEg^gMXL6v%T0C-^P6wa$t)l0o>7NtyEFLL{Jl@
z0SN!Z!WjsM2YLI=mMK%mI(1ggM(!AAY&cYqFAN{ON`-snTf;M@)vEtu6f3S=%9>17
zstp0l$n$@rqp^Ax*zNMZPGw1J-B{-_JYKP4&#6f6om-vU)~IG18VM?ZINYP2$pt5@
z{1kgIzg#e1^gk;G7V5_0pG*NL6}F5d8O-JmX|gF}uP~D)5kmQ7U8ITG5O4C*$O0_7
z5MJM*4{7QtNVI^~(-*!KYY;P6)w&9$Xbu?n95{c-`yTiY)gBzkjEYEP!2ADWNB62`
zZqqko7_#$t9EtB&Xtze2B5Sv2Jw>|w5Iy7f?_tOEW8qnR>Sbr at 10<3gF4U4?QzzJc
zLAI)-<5kQf>}xD4PZ9_XB4ET)c_$oQ?WX!&7XtrJXFOvg?M<g)vUgRc-hX7xFa7Y_
zk;H%c%3&v!B%}S?0Wr?svsH*1tDk)pMdEVsmm)0 at E=Jf5)8~IFm#;>+6+CKMgvC(4
z_rQtP>3dvgJ$a&bx}<<?)G9Qu>>u>z`bh;ILFI5S#^y-xRj?IpFCo~2!~9hBV9Em4
zf{cmyyFSCZ^N*4I7}GuHLU+H6{_X6Cpk;qX^pX)59&a6~(b|AXZUQfh{*z&Vk(Z_w
z*|gv`oS~uL?1K at dpciDaj{>|YZaNeVh*Un1yI0d~2H1)9hDj at k97T<aajOi0G}bJJ
zC#6IeB6~0cnzs;e^aQ`qID{=RKbnP)1xF4jrRCWlTQ~r=kWJV1rxpk{)^{jK?oxkd
z{87{tjvaP!hu0Z!%5E-LBdf%m!Bkh@*%UjuB at NNQT15x}K7>D57@*YuEh0>uG)P-7
zBrSJwm?Yp+RrKkROhInOP&tN7<F|hL_L4uDe^6N(AN?634(1wshr%*>QI|T96NZ7A
zvOv#kbowSE|4u;>gZ%ZA5B0c=(WZYxzaNJ=AgDt!8oo+S`t2hlY&0H)a6ZslGSR%|
zGR$Q7^#%#so;QfF2A5iLu2=5j4S(W=8{VlibG5An68m-TQq(Zw|6I&D&a?a;;`Xyh
zFe_-z|FSr7oSN!n7~YMe=s2}3h)zF2!#!e+H39H=^xOdThIR80$U<?6jp2U>H}>r}
zaJRW(e<m`lLVl;0ND)#saI}8>6gWiK7NSlMBtGm5Gslg*pv7U?Z1tBvjnECZh-|r;
zt<m)eQ66ubQlMP|W^^`XbQBwa6RjZUvmrj#r3Lj<cwgDYS+ at Y6m+{zvcBUm<$K`o*
zD+KjK;4P7dZOO|-Y#OC<-<N+?^*i0%BGQN>z7qZ~D{2;*ckb50Oqk97*+8WB^+qDA
z?H-?d-Hssokk1*w%hOs^P at FzN;K0K5Zeh2X{O-6xKB!9&xk7Gpn{r$~QCNvedWatL
zBqM}OFj;_?U!L3->m~=9ws6~=sqN{|S09@;$<$Q|4!!`J5L0tysttd_AA&&Pa1IH)
zU{K6 at F>#C)i*IDQFRK?S#_2l!dE4<YcX(ITeV27fCdSa9+9ImP7Qyc5WqdutTp%qI
zW*+m?z!{&#XdM2^`~l6I%>YQ;1T5u<809B+PX9OoT>>9LTuip=qw2OuG4-;KLA>xj
zr=VwQYpp8*`gb&1&isEe$f35#uBBoTqgnU2VJo4FX-{al`&)><6m93<wT35pNpH?3
zh5ln&XKl*hiNP{YF~w;5g~6~vixNy%gDYieWuv}8Rmd0!u at r0Q$-B{^mfP=79TsXn
zp(}HL{HZ*Q47D?*KX_I)?kpT<Tq#FY1nLPfT}kS&=<KI%`1F68L>KycHz_(=)OoP@
zA%P6!xA;{TXF*m#N_6{~umQlnOzEb`1RKoOLcw3+I^J(+hS4!fUC3WH$McH2Z5oHy
zttahsrQ`kqlgChFXsjNCb(pg&G5i>~9uYaIUkA!GmoR;1UUk5b$&0Ks1nCxTNyg}4
zyxwvW5?10Ud;x#(m{55Q>)9e5M$Vdcu)s%bwNByM4Gz6)9xiz-q=ti(clay%A|A-c
zye&1X?hU;oRBL7oqAw_IEgZ6_MlbYNja6kDuJ@;A3SldV?usMK^M at -bJ0jjfZr&sT
zTC+)wLStCkMxdaxGGOFieV at Jpq3>2d8<F8pe+fm=ex`r%xGOR=%lUR~q+Yp-_rTXh
z(pf-;ey*NONZ!Q?81==tk;wt>3kehB^pjT#kK7OQy}oJtjy_^Gp|sYK_{e at q?3x+W
zICW?U?kkuK;*Txo%n-;avy*yW$HX+G%gz5ABFZG3cG}(#7*ag*491w*K~Mq`8RY{{
zm0bLOh=zYgc at jjNl5{$vY0Xh+D=QX5#w1_8a5U>z0f+*79AC?#wvGVd6fdX<9#R|N
zOhgHX0LHgu5J(OkgwT#M3DR%n21#iT@`=1T9_?JkGxV at tyt0^ViF-0_KzkDJF_gmR
zZGq0JK(ffc<bo(*{Ab{h#Y+S>qZE}SXeljroPU4Z{%oYmN38 at D&FYDAMLiliAh5u$
z!LKcMkj)4nZ&RimXZ$t;)~hHY1J;X1Bx&h9jNaKV2^XN+SGNochZ_LHo;I4djif%j
z!^kZy12<ag9m3Bkw!wV#txge5=Ujs;p2Y7E(wUcYTd#;18xf2vk(yKpbfX6~P+&hr
zwQ+wVuz-gx@&CL;83SM#=7?ZJtAW0k*uKi|>-&w&>y(InMf_^TPQ$jRgR<UZLs5=g
z%wRz@%{(4^;9fi4Uy;w)?!OAYN^@qP#f=)33%|@ErrePpddejTGFWSezfslEZCdWu
zg_5+*dy`>!cFx=HE=awoBuDY|{60+R-&TL)q6ysUtCB%b$aCrT)q<xyvX?4F0WbbS
z=7WomcoiyT4$~rDsRyV3tbLak0X(31v=mHx4?d6U)Baev2FU_565s9<{p<4lt6I+-
z6ppNLWyjulwA43tKJvAoJIO!ljL5n<L{&5>4n1J}jh5-s?Vu7CyHB@$wl-Fl*`9wP
zyR*}g9Dou*Ae&G@?*KU}NQtNn5}a*nKCs2DlXdv^uz9$|kigg at bQqKvj)Pr}F;XPP
z&zw~nCK};0-ZX%03b&^i=^%Qw3(%Gdi|nue9 at gSl04mZ6olZdqySaJ59%))xwLC3F
z@=&)6y<9E*<wfDlFVWg7+EMIZZBc&^Y$uu3;f_~<LD~vA<@ukEt&IswM->sn9NUEp
z6!UX at pA)sqSXd19Fu3*9#ZXFLI3UvwJ-yrNM+wC=h?TdyVO2H>vD)`hGN&_q^pbxQ
zn?;vRM8{z9-8V>g<l-qcq{vR+6aOHYgfn_t<b;^o1y-V}J(AIZMe2%aBeH+5)-etL
zV*&Gspv9G^Q480UevMH^F)4P#xo==-hpu4I+H~I<>=NgaiDB<UNWYX{MptQ+a*1+z
z!Eoc*QCV04sO!X*CKijC6ouGRIwofV$;Z!#3(psAZ<Q-No}oh^jC~S3qCmI&^Glw{
z2f5cw7_$D#UzBpOA=j1%-h+R2J~d44&!g2%cHgD!E0GD00_ld1J{yJ!0oRFH(3w&0
z2=h>ELmlcr-dZ13bdL5p at A(EMSzBaB#!+#F4)Z~1Ya|QmOKj>iz|aG4ib7u?`YhYv
z#fXoCK2a1+K5rCm*%XjefAs4Zu1CPjC2ClS21g7pU0nHj%$ifmp9+8aRZ0~BS82G`
z&AllFJr!r*MlbJ9Myvldr*5vz2!ibmJ^CZKYN%YkQat7tlF4(Q5fgAj_BlYPki~G9
zYEbI6sKuuGXqAZkY-^5()B#5RbY943Wjn9rSm~=;Ricv?DV$Tj)SOk=&)V$YO;qV#
zxkjt$dDN!I#5KB%;F^B~A|uoV at ru2gzErom5<Pcc+OZdFxAH^3&OUZ)T(Z))>ehbc
zk2HpT1wZyG(x>QgPa$H$HDa8_1IFt&w at VvK$3pL6*w|m*+Z2844S|i;vfVAY4gVsJ
z2L#guPvUH-wSX0feTzD*^&`H;WQ4n)i&EYeiC~c7?Ga+vkrRL35kQ!RpEy9Bk?A`H
zdIH~VYH>s2klCLU)&PvmVVK9*hxQ-d_=Ggl>k3DY;$Mc=i(;d^t~c`gd2m1%ZOj55
zL?bfzbCc^l3W5FV_w^GTP(pShifF8t<3TK~o0WMT?~GH0{LP{Dc9$_1lEPMUzAY`>
zAArn-J#pCE`;LF4{q&q{!Oaq^Go7MMtn4Ts%c<uIBEQn;zfBH*pvnezHAJ+fZ^a!L
z>Nw!7i{j(uVdMlKm#Q=-o4`G8lx~n?{C|h7$wr|05a02QwJT`|(Pb{zKkgRgH*2FV
z0iji=!o0+VLvffO+PXQt$`__I*$j1p+{y-eb$kDTg9m?D)bA=<;|UZ;9740o*9JP~
z-gCB|@!dSweQ#7(0}sF#091~zL>}HrItYr|R{&9g8IAtNO$N6pI2cFSt{j8loXoaj
zHt~3{`Wu59G;){S|5k44Y}k$od}(4vl1Vky9(<LQF#X7(N=~Na(u{|^9In^x1mBJb
zO#+}H=d*uOZ4`{o+_$FlDE^TD;C+QfRe0s;=eBLanDF|Tg7`Vw!GAF&2njTn(6_KR
zU;mcwj9{DklRPv|Jhhk&pt?UFSI<FZuvE32EIXH_0n=`LEb`PiFFq(L=hmAQFCBc_
zH>4?1C at 1|6B1egvW~4K9*4r|zXQMOh#yK}5^5lO8_%;zn51~I7dm|K(tejehimhCs
zIR3r>tO8bM|9cBUNOs$lyc=SK at rC$10`t*2-y~XG40VAUnRgWdk8)_gt==ddR at n|-
zt#Gq_nTQ)5U~h?+x#DDZ{96~oa5<l5Hf0p_pW-xXGp*h|(z{z(Mo{9_YCQOp-PNX9
zkBfh5qVc;0?-mq1o+6m5HMP&%j|S3IDJEoD^w{RG+ICL4e2JT at odj!oggA<k|ITFv
zkiY@$v~tPIqGTU at J-kTRDu#2LlKBmx%vIwWB8!gROL2Hj%h4fsDBxrEQ<Y5SG=z)z
z!Kt;h-+~vHuUaG;k#lG<`4%3l+)#Tj%A9|ecEeZOYbF_o3TFe$m#K?oHQiS$XEB?(
z+#3p?OE49mEe0i~K)^6JF@(J?ug7t?8;f)Q)$R*(<0I!><6a2SRekZ+FySSl()jiz
zl~|SxtWf>r0Ov>%$3SjXga4mD+5z-ClJ=N}(LO at 2$8*!q&{BSt^+0DHl69Th{KJ25
z*8LD3Hw-I{?j~tPes8dP+H`Y`clHZ~v?e%0S1GwJH+QXNWjeR1+Z9ZsIhsP3K%-V<
zkRIB&kkw(r8e!|m{b%&HA*xd=zMgFl<qtGH$RJ$T0e~qk?3 at 5_>vg$v^odoh8^@A$
zuZ9{3`b at w>XtFnfpCXCj5t6E{0bGB|7xLr2e1oh5_#@vek*O!w0G7?dRiVgQ>;Wl%
zxEhmQbJ_at%=rWSvL at R{g29Hm+ybNMMEW!*6;r0n=O#G_7hbWv at zv$Utz?Vyl?LBB
zX`-XliY&+|;xr!STI+2kJxDLs24u>j1~l2zr_H@%r(xRHFDYJ#j_mUWib8*h8L`AP
zO_924`p8zHqfMgJJDmS^E@){+t$2x#Fi6C-;aN;vk3QMZkDf;6z?tu<e5nF#dH$$V
zf>q_PL{+|ma0T|j(P%IoXvCNgXH+feV^AMx>$-)7vas6ND(`dEMHm+hOC%Asjr6kT
zrE-yrXWm;<zTwFpsBD#;e$RjL&omgX^4RBT_6~}fQsBWgIrY>@PrABd8HdHEcx3li
z)D;CvCiPp~n761zFm2qi+_*;SPF*Z58)0njdKqr%8XR=x#UH8S(Ml)_H3Hz{-W6Fg
zByj1bDjsp7P}~LUbOBdvL{YrVHR<$fPD8FiJ6cO_A7vu?!96=8sY8FlzqBLXvU?wY
zoHo`~lF8OqVu-E(Di#JNl at _DJ&_e-Z3z6)aBle$TfN2z6&DHs*p*@h*xdIT<q9!%Q
zf|t)7sb+`1NQs=aeUv35_%iB2BF4b|>vyh5J%mQmr<Gqm+pGvpKI at i^xT2DCM&_^{
zkT?d1+u$`RyYuz6xWs>Y>w#!+q0bUaETtx)L;Z<Ye=drwHsUA8FJk(XlmKIR4GE4*
zduKz!Fq8wBI`OnA)O;&ga-&PT6w~hKpm=<Bg$87Z3-=^4Av&Xnh8tIe0-$9wT*`^!
zI9Mq+e_0S*`b)Th-{8P58Ku~DvO<!@t}kf%X!V{`=gQn|PFsI=JIrD^JIUT&%+$Gt
z!zh~V8`e<|3}UMr3Tc18GG-ZAu}*A}dl{T at _<AW!_1|_Ts8&K*g~_^CcU4Jr7CX^@
zMW;Pgob$Hc{43fZja?++Odndun}Np8Ytpe5*QFa<9<Q7YDYx~`*5REUL?<xls2A6g
z;DEydf?d-p>{fsOXHZYC&OVKs0!o}!Cm>Ejw|*arWsj}xv`3^kN!*S+{CxUyiVaW%
zsf{Vfb3<2P^&Mmy8^n%Evqs44J_4!QTM8|>4>Tdf^RHm)-QmutKMfQRAAiDouS+u+
zFEtB{&}4q0_$v$fj3%+Hm29eO^v>5?BK3S%)AWG1cJY632RC|a+dq{kRIz`jWb%Py
zajfv?^+>kEI*}gh^<<~8trE&`lv}F}NBB~jic&(sB^dbrFn`5PVAnF$Rm^FH1_ at 1h
z@;jnHaGGZpRST3v`cIl}YOQ#B!gR(8rMyYq(m?{$%$_p;(X(<zge=8KNwtrV#eUFP
zetF(1tUZ5~f5!Bvb5EAvpy;E?Mei$-U+1uH_eSe3xt1~8Q6b^^SM9%C4Pa+UWF4AT
z;I_BI_Q{^@95q%*UHp#=17V7;EHbw$m}quZFnGP4#lt3{4-OY}*5kUEQBpLqP`tXv
zmNCe)u4^71A78KIfO61_xu?NOYU9hG#jLRTA+dks3nnFb-bPfng(Jh4s58J2XfrD#
z4{sNRq`*-22sQXo&GCgN6`G>V at 2!$rhtYX at 2<;B^tPvvwo at Kz+8*#U1ucE%s(ri=$
z`ddL4S(lbYMB9js;o<mAGae!P83tY&8Eo$=h+er#u12II&9GUr2UN4jabT>#H}D&*
zl!t$I5tl7XB5{u^Qb`4jlBw`4=lDQaq+(*sORG{JAB-gfztc at AP@M%(A`%Wwy{72S
z_ECB?rsP2!j>m&*7WKy6<1hXb at fxq({_TB4!WIZ~tEf2B_N|2>sLXGj+q_Nl#`F6a
z?#0d)ar8(7Pam$-a#gNs5uPIY&CRXUzBzvoTEu1W_2#!>Jvv5$)T}1iD?4Fb6I6F-
zC1zSiNDf0PGArd9)3KpXGL>)xmJpfZQs*xfgD-zYXlNF<tYocO^&+eO9Y^7gVfA|&
z<&F^@M#^45H`RPH>)0|FI63>jS<gBUH}sx}BrqhX$+MU4Qw3)YezGVRWs%eSXJ&ur
zR_Z-9^|!@9#V>P90d<>KK!qrgINO2uL?(1QL#Gb+NB;;3S<|owv>I{3)q!6)&=9kI
z%WZ|o5;hkcl*4JfFdj4`vXn+H&eY{uQBfRcXL&sHWf*bj>3+UBRefKmK)9QfOqc0&
zGvwmt!=0|S^rGwC3Sh;}^t-}JS~-8S?9VbGshcZVVtUePRb;Z8*iNha&eq%}Qnu)3
z#O^MLdZq7q64B4BOIpIb<V7RPnlh>YG5C;38{XwIRKI8dxAROV0P>(?jJ)F%^m^i`
zU>q5|ySCJOuhz45?*;tT*3!q^70?vKl^I8|PA^Je%Lpb}^|o7i?#)Tzti6AGg5`rU
zfoN}#3MB7p9kGKd`{2Uj$DPH$O+F!^RuG9bzBVu-CLrft0x}63%wb)7?N8{*{srnH
zRIUccT*e9rxnF+Q;-hSI8OUh8{@e6#`|PEvsayZ@;?i$`O0pq<+wRl{q2?fgIf-XQ
zs1O}75orNbY&cwSzFISWZFPV7VK5YGg&q2gU!N9pi4d4R)6{X;%DfFgq^(AFLMuLb
z&BX3)dsG7I8fN^`d)O`yFelsE5{)$TZt~vVM*_25J>LV!_otr at y8CS&#LS at g=`+`O
z!g$LLZA4G@^~J6NVXsyH(LpQZ0EkcUL4nOsIFi&74O0a1Y($G-!g_xmNfx8Koq_5n
z<ITH;`~!18@`Y{&(>$>Zhwa$CbIh$p($&*_L1IrKujPA!X7}oBNJu|6w|CfPD-aab
zXd$$EO_#Cia;LfOU!7>Skve`5c!!JDk_(%RXmEpjf=NpUF6iMZ>^s@)9}_l*o&!p{
z#z^ZDlr)+0H%mtT`d at zmRekumfpA}eEXuOac16o4C(0v#Ct1d`nX_xwREU#s-|y)%
z2hSx;fpyd(UF#Mu^L<v){jBd+i}7a!Z>_y+$_bAZ4>tyWWQ$G4Ot`D3a5eIBO->@p
zTI0XEmi{Wa?eAVpD=(oQWUS2=rY(NNv6gEfB;(PBM~GO6oKk<&cx+_t<db$FO3qJ$
zKBZDp^RgYM$w&kn=N^BQ>?*ml5+=%1G6qM$Egcr>BDl~3Sj$!PuS)Yww7^}ezo84s
zdOT}v at tch;JRAd_ji#t40YFXQ$D^+!>)|f(fj*~Pj-?LHNLR2iA-$lvg)h^efWK=R
zQc6}OCU!-0jX-~0oj?_?UwJ~DohDFh7v2oU<Pk-YTD%4!F1D5AGXnxD8zDpGDP<aL
z(p}Uv*cw(ZqYCltEjk$4lV7s<$qQR&Ma<EjS+WA9I4v<!UUIVEh5=^|@x9UNbG#bj
zx~>MFAlb1exiJ%5{h6aA*kYq*$<w-Xa7$K}Mrv{ddA5JRVIuN?7qGe-%hN$Gfh4tS
zn*n6q8VtvkL$<15H3hT+06{IieSkHnmsyZrjgq7oS*kYnD%#$IsO=Fnj+0r(`eooX
zDMe{D8yNA_yQt3uB}5O5VZx$by3n$c-X)rugsEam?f6bid?SDs0S<a$-d4(tn1cor
z=NM50O>lpN4_KFeNwELkX=MCm4!^c>=laO9uQK$Alr1N@=S at u>h7S8O$kS at eRb`&Q
z47={AD77_%+j*`KLDT$$R*ALKf`QC=qR<{?)0-G<D1vsq2{?edO4h%*QKqXmoIyRT
zFi{m<CV$BpmqkBzGG_3}r85(~+npQSG!XMy?-_r9v{Y4Vh-}MF8*|gtG94}P`B7T8
zUpyZe!$`&+q2}xir~|8!5uT0zo6gP|T~bj^+|Ju#X*l^%C4C`vUQA~LV*ZdYy}e}P
z58S4o(LGsi(BqrNU(1JFyo3QPux!<?JO*1mR(IsG#ss4uDZRx=x8muG+@&tOrYo&u
zv8jIs=eGfCF!&2<_p5$1n=ID)24+=VIO5 at AiCrY62k2eqUi8|;q at k<$wV_dJ2F*yL
zQxfq9@>M($su!K8xb5HjJ|mFzXwfGZa|=6WIdB_mi}I2{>Lk&!=j|&v#iSDkW6y9h
zL3f*Po~T3cp~kl4hDSb1bDBVCx2=dwD2ji1@;YV<zTtE^X=XJEO4?JH#QT4K+~@FA
zI}!#v!}r0f?C~MB1Gayx<}aD^6=V!(>}--xtdblVy#jZ-mekmSbvk-JUH(tFYYN5B
z<We;|Vmin%8y~P$i^O`zHWvT3#&eduQ8}=Q=O;>>%tPM2>k!tRV<h4U87o7|yBB|z
z+U|63803MR9NaRGY?&XtYaR_>vq+hfS;5D^&8}^gQ5(0V_Qvx9L+_K6Q%Kd<=#Rw5
z*o$b)(2r>4{frV(WjC}nY^i8ca)=NW;z=kTvR?p^Mr?&E53qE8CgW%jD_PVi6XE@$
z=x(WJ at YgzMz=(8Qd#|5MU#Vw`9cX`<fVBIsb#-J%u&p{T)U3?PZ(UY8tXvE0<zz}y
z!CaAO+7y;&dDOPPg|zWwbx=ZfV<&p{)gQ3d5$Z4#%CbB#YN4kipF1CV=5gU*7Wp_@
zd$?01TXY8^;-UXKI4}l`D6a7<=e79HF-YjT#>=zOF4V4ZG`4P at +Nul6MX`S at o=^i2
z-Nt8yO^g|QqsPH>djb{YI^|M@`|-NoE$H!AHWIe|^ozi0 at 7tDd+~&ro%t_24$A><#
zu?w%H#o6KjUw!oX(sSK*(%o#_Zrv<TOjGLtvDeR*S%aTS<g?67kf;B7qpF(8oOf)Y
zNTMZD3ZTewwt84D)AHjtFB5;B<V#3|Gt161dio!^We})buY?j#9W0~F6ZgQk at v2;H
z)?a(!$QF`A=NK7Y2<Q-vT!sYNv;7TdeJI`4F*UV{-!fm-svv-g5=6Zu;V29o($byH
zolG6JUk4TTYS-|9b7BF={|b6^CA0!I>Ty at EfsfoK&@?@tCGHH at rBi>_OMX7Er#o+u
z1Q2-D!2~Y!SY|rYZPlslQu_n!t^?+xu54rsC!A%6wxV}i`f6HwoSIc^Y9Cu8iJ<M{
zSqSfCq6odo&>3#R;e<>dvAti0<?0K0hkxp`D6v9)F&(DF#>&2)dP at H5AlzIMYc{*x
z-MWHU>!Hz&Q1UJ6h%A2vs7NHan*p=nnC^X}U{caMedDQYD1ck?9rjXM*t`5YY*D?O
zb*Fc&2}audG<lDAA>#n>2n0Eo%U+ at X=A62{_h#te6s)cS=@fjb6Jp1!z?uyncCju5
z_&G_aO9R%;M6j+D2*fx5OG7brygvRcezizkn&DVav=Q`4rz(G at B%0Ik6pS{e31Q^H
zN76(^OurKe!=n2Lte+Q$5FpY<qa2StfURtihQGuJW@!K7Aj;*K;uf;U5YxhilnlH%
zhS7d<3K*5g&%s5 at ze$}e$!Y6CZGqY~^jpZQK5L^@N<{N_bq^k%6vBQJPYGi;L-Gh_
zf9U+!-k(3_WVC-vqvezv#HIBlexrv1rXMa`73kd~czpP(k!GEUZ>(lskXx?$@+z3`
zs<ekekAX}lV0y6LkU(c>OV0$sAZcbI_h`LLuV$1?$lpG47^HSOxP0wU+ifH8T&DmF
ztwV3KK^+yN*=<vrQz{>Ut(sX?KkRYu^@t2}2K(IU-&lWAVRB2V9Vg+3r^&1rSrWxc
zi!^{j#3RC_B}sr$oQi;Xz9iIC$^xjc{O4;m_584)J>b7IxAyCERRB at _|A1G0mmd}}
z2R_cu_ at 20aA)OYl1x~JoifD)8P9Qv*l3H9WPH$h1Ylb@(nx%|8&58K6)%+bS22byT
zbi`nBlgEFvc~j21HMqO9 at QGH1p{L>;d)O~In<YjKwI_liA|vac{bSNLPE9`a>kaPQ
zeK;*x5Z*c_Y|mI0yt4p}tQ8g~9|z=61a?s5Ef^21ZG47nei={AvMY1fOr`D0(`LzJ
z(f4JfX12zIh-X!aTYyexB?SjP`>O-IIr1%D`+tAbg>_9ips|s-UX6&EZVGg<Q^3Sg
z|4m_d^Og>N)PBToyC~)Dw<JDS6%+P=6m*93UTI`NB;_EE?!WbiR^ATAgc(3#U2Z at t
zj*{|!D=6JrI_d83fpZYedUfySEfQeSOg;&V4h^9-9M`hbDQNsycwWcZCFI;Q at I86=
z&ZmDVmAtwv-5zfkQvS+PcOgx=qFfe at OVR?Z4yod$>NHa99q!EY>!(7xp#arKw-dyK
z(LxXU&N5rCK|1`s89)`GjSoJOat(%<=@s88G=?*5By(it*QCj%oYODu)}-`Q|4q8{
z6uU at -&1b65a4RyB(b=&QWFbEgnG0Jw_uPMyTy5n1sR05=8cV9iBN}y&=Ge4e$G~C6
z at bpF-QGSwtWKNg0Ox=mcB=2;Lb{2?JT;sByXW&6bfK}PV|HE3xl6U=iCN}IE{0b4d
z{Dm(AW_zATSP<VuuxLOdw1_Y-?C#x*sVz)PkhtjEV5ja}<VB3;V1yu$aw7+(P%3|g
z1yV$FCd7=d+BoURa>?`2r^0yd`BX;|(>s$JhXKoTG0|7<$TI8fynL6B9%GV3r8_1@
zxT1jx7?K*!q(X at z7GW|hL!J7R+jLgpcSm17*nCkmw?^jptN>*UteL?Cevq4yBady0
zR6khtiW`C+6+|Gc at x5UYGrc>!L|lKo12WW`?W|(EVv7&~mi8kZu85=b{`QBV$Vbzg
z<%_`rvG*O{j(B<Gf?~>lc$-Ko6=!#EL}~5W<E4LEH7Qi%F2prtne~AIjhpa#-+YTV
zlvas?1 at NK)BNl3&#%iQ2#FrsH`|cY2{9&^q`N}60*8#paaaM9N{iY!=hogTI2n*p)
zpkINg$fJD`UqL088z1e&ba8vFxXIH81CHd^XuRVPBX)*IP>a at _KL)iRWHpc!x_z+H
zn+lukZZ<yGspr93Vzive_sS{i*QvllHi>n})79vh;PscG>M4RM_|Eta04fb9ijN0_
zf+Y^P4#u?W2}a?^2P{Z!(j$Ko0%O#~WaFLLrxHBVOr<2$xJ-h*sMXt#^F31t1K+a{
zLqs9eS+`c_IpYj3O30>=w}Vvar`XaB89OB}IHzVKRC>L7UvL?qBB7{5-C7eDiYC;r
zUnkCHN3L*MF_hkCn}q0nZ^=XS2{>}PjQ_>KraSPe2QDf1!p~#K&=!9`k+yr at XhNuY
z1v0PV*~XgQGe)!unq|75=e_4wWyY%RU8_lz;V6*hC_n4oBa29;`F;HKU}gXIw&^#9
z9&WT14UV!@pD(V5O+f5zx0iyT{`yzl;4b9jJKf8D8i25JS$2N{>&_~uh(sEsz#N{x
zLF8#k#3u>38*8aYt89P9YDH1b^Y1#7MzeJ+x6>^%S^i%$L)CFj)KgMbg3CMV7UB8}
z-i9Q7MdLVF`d8xqlfI1z0{VM5<=6Qw`TNai%iCK)%sz4z2j=_xyFuFWDH)&4CXuP9
z4OnG4Zw at ggr|m;U#Q2T=QonJb8e-|-by>$T9FL at u8O<vnVf}xkb|<9>oqx?B4sGIX
zbEEU7 at xLIh!3fZC1N<ZpkZJox`LQD|9T6^&*G&ziidXncAytiRz1Z#8$_1Yr43dk+
zO(~RA=qY1V<x}^k;@8L++Bb%Y7LnT+I`QfdA%4N)ihp9noFPd80+^LTTq+bA^?u>f
zs_2h(S(20G?VEqxzP3b2P3HdxtEh!j;-W2A{JPXf|30Hg+_V7oqfhDQ<KAk!ApJ!`
zIV%>4-_8}wX#Cl~5svE_AJeV$TW%eR|0FT|#~yE%-dWv>^+A1C@|y_8_06jk0-aTl
zfl>V%TqV>Dm!XA`U4eN7t;mMZQ3LtT`FUhnG3iL&PVj$i0vFp$U-jKigFVZM1+yom
zaeskE?iseRD!oTn9gj-IpA;mrhc<W21W1$Mr&CBV^lLBPc{K_{!1{HWINIn11XvN~
zRw^_ at LJgKE><pVVT7s{WC`rf>)ZK?_R|?4`7&HZ8`o!3fceCwUb~yqwFyWi%O#T at w
z_3}dl{+55Oz2R2~03BF0S}Xuk3xArq&__QwD`xh7&Zab~mGq5G_i4ec*9~4!&;D96
zL#F3Q3MfG^O_q_SpA95h(MH95402+O_B>OO{;dJ^c#`^n7KX?h7 at 0B*9Vx{MU%W|Q
zWJsdx*6lGB<8DvTxBF`ZcL0?dcRkb6E6XAnMnHd^vw|f~5^2>RzP>{n{_SajIJ<?!
zmG+yT$}wWOfTgwt$wa0cqjF#NMs&oTi;=}d9&yWJm{hZsdSeqR0nm>T3TrW#<uQJb
zS5chv$0CI+BBv|F3FRT3JG1fU!YvGVsITV_kk{Jd8Bs(kPqt-%p0;LuDMqN$#Z8P0
z$o_v2kW`7g$qrj7<}?MujbnwX at OeRkV4w2-3nvP83p`?$MgE at MIe2Wx$om9}ZLziV
zNG-ABItwbIcd<JJy`%F{^qeF`>~rVSv|kCK`1d$9V^*^$4Y~UDT+(P0t?8OQqXLxd
zo6IZ^whO)B(_dwZoW3_O(&kZ`l?8&*!+n1wlA7gxh=fGZkyQ;roPM?T=gW3o`lD^b
z);N+(i- at s6Bi3X*c>wQbv`cOo>xgULhsJx+;IjQ}6fo<hbBX4T*|)PSB_aP4#e4~}
zJ0CW8*P?Q9%|&0>LlcI{BYgtOT|GytZn0YVzV6lY&gZ4DQUf1)mjrTXhOtIAb<ls#
zg`*E?csZ^8PAUny&9M#s#rqlj!@MRU%&BmJH-acl^V3|0 at gV8T^CLIXhbTUb?uTmh
zm#2F(lu!TYJdQY at r(riCkQ41I^4 at _TzW##W2w#$;<?W$)cl8L*E~oO5LU_MN>CbS&
z4^233Pi(fK<{c8^-MdEx&2KSRTJnD-Ln};H8wUym!GBNMu0;m`xn}N*UO2qAHtUDn
zs~)2(+D^z{nWpUdnYDuge)o&4%~>F(+i-Kvx5=THBk$O0-7#;!<~QR(Hp%|m4P`Bg
zf-g6?cO+(?o1Y*f1=g6(4%pv5xDNtm%YPkGm!hnE%ZCHVd)CtBY!e`s3;cf at wiOG%
zL3qKdXp!T#sq&W8$aek$?U;(9VkHHZcq$MwZ4C~4${f_*9mVATVt}^`<_@<$UD3}o
z=o)$?d*k90KjPRrxiaj%&Cnr*j=fLFFY&MCtc7^jrb8XQK}i`|ZI)UMek-kh7C7#j
z*^D)(hC^h(BqS2v8%w_w<luj<vng1ooHC_<)OBLa>?TeUF2j!h<J;!LPagy3?lZXT
z6}|tq$hxnYX<dG#?-gJ=Cosrdx&i<TMrOp`f&EV`wL0VM=vlKLXJ#s0P;vfw4E0ZS
z|H$P at 1*%sPAn9&^!k-bk57}{;jjdgWn+Nei`HU4=Q~KxEpW=hQ?^J&+SbvSehB=tg
z`P~?^SpFBec5kLma!XtF#A8(Prl~pV<L^IZ11%b7`q*y%sAY(M{{C4j;8=ZqNgl-k
zxT~4k7 at TDw0g-vl-@DbDU-mA%CTklZr}dAGk?ZZtM>6QE%rL$o$x1 at GqTM3rBN^;G
z#y!}j9JD!Dc$&W_zg2&pdEw{MaOBq(<qK`s-H~@x4J#=}q=kZYm-Ktl_4DwNELm2Z
zP26qtjlmuuCjFC;KKhQ9y|t$c#18|ukd*`G3)P5aD|(yn6lB&2+gT;k<tFZ$C@>9#
zI&SZ)3f~Eh3;f at GUH?lr{o`e0Q*1HkIwjBncihff#ZCK at 6TyGE?-Vy_sMcViyW)-V
ztcIXUw1T6DtnNFThPRA*-PoMC(I$#w6O#P|P*c2p-|1ej&Ccl at i}K)-domULvfgN0
z34F9#9KA1l-VctKiizCTXUM0X8y_I2dTJWCF*0lt9_GG?hZ+=&u!?MIUmJ-xcS+7y
zx1Xu>!x2a%$kcz8cO!kpv^`w7_n0T2#cpza at 3csQnW%=lV!iQE7-=BX+FC9dsArA7
zpLzW^oM3@)j5j&G4QiRVwmi*0gD0y05;z-&0P!Xjib=YMc~$2tT{1T(^R8MOLMRuX
zUffoqf+?bg8qs6u8E;v{>2-3Ly0PJm3hJE2K=W=L8#jN!a at k248lqfLj)+J^OBdq&
zE%EL^1W$`3sNI*{X)<y1G?|~ky7py0%bD=%!f${OF1eZQtZ+GuC4GZ)Xh5FBXb7Lu
z<m0FUcvJ?VT6;Gu%l>2O_NEvEi#mhroD}Q<q!L_L{A$ZD8Lwjc at ARR-lS>Q%IF$o^
z^9P>sD>{E7klI-XLi7>^>+yIAXw)51FGABOebP6_mOcJiI8U1m8jS~tmMxRVZ6^si
z>IPh0GjpT?i0xu(L)cQ6+F|Bx=L55rCsf67iOTgrP3BKfoGs|zK=CVy%H)FM?vqQ~
zv+n%f62 at 8Kt~Iq7(+OpxRRU7{{s1%94PN>l#i at VEk|wskqJYgKpT2kFy5Y6l*l0zb
zO2~4jW$yaqU&@(kvYhh;t^7ilIWtzX_a#vhxlCMX(=@AY=^Qh(_KD`anzmQy5z9?x
ztF;8Nmbrm)>zf4g%=MF%BP28MU{Ezd7eeG6^WkQUDVBVkh%92fDhKocw##q?>;?cd
z5mJAeWD~w^G}pWKl_g@<rs-Ywx4C_}A_HP6&M!V`I(nI$jvEI27qtneL^%ZG8n8u5
zPq7Z?Vy at _9={lu(gMbyaogkzb(ARzoJq}v;Cacs)6vj8W3o+e3md3~AUw%ArnZzBq
z5cQNQ7~X37kEREQ!4_Zgb9NW<<hL6}s9t~l&FWDIlM{vkt}9iu01FMWZt(AYe?uxD
zJnICxS!r?1&C36QCEpdhvn<<Eq#HR_Hkh!&qlbl0LK53O?Nhx|Gg1^ze;DDl6x?Kr
zXp}7!EEE<SkNuFtlh!Y2-5sMUCuWj2@>ApqISGUPA3v$obl%a$T~v{p_KHqw9{Yb4
zN&!T+-=t2^_*>RIc5^1-GIh)u at V*i<=VmMLzSW+b{k9%9QQDLj at m^OAnG++PR|6l@
zo&D#$Oo`X9xo0N}QN!faSu5uhLpd<pI6Udk5*Dgiaa)Q|0Ad|6sy)@)hNGp&L=R(x
z{}!<}GF{sw!ka*$rr<o!NKj2wM*4rs>`bFpFSwZ|%`Pn$-dr(rzdm&(f>Q6`wqXgp
zoVZ2wbfIIpiXNM59eZGLWxS1#Z?QSmKH32|WHL5QQ%mGy1F$8r!Ss-=q9F7WL+o-M
zI2A;0!pHUESuSSJZe(~E2IzE}PW`U^_MU8;b>lp9g{h1LF-!iMS}d@;vuJ;iSAK5L
z%>q3+eu|zXzU%*k*^N&ny!O;l#YXJ%k|hMn&9L@~NKnI7aHTy{P!<3onxQy>knMR-
z1vz!<sNRLbY+bDRO1a!*3zxU1=BoxXl&$1HK>iC2MEqaTO1BS4=-CVUjMVT4D-c7T
zvurEW`G$Fglje6W3GvpTP;!5(dA1x_k9w9r(elB9J!)DrRS)~bmmh=*X7^6kz$87N
zacpGhgwEevk!n2u-UZig+ZCNyIH}x)`mMRYO9{Nhlk^-T0!_o^Pjfo-k4K5RD&uJ4
z%tV9980FhEkpNi0KZjuUV>qg1$7jgr2ArJYB+Jn#0LEt`G*rH(!FhjuPuqiKW>+j5
zqVU3`(s}Oc{K;d_?I^F7eqbcNx(l~&qKo}knwRVd7o7+f-oYPS$NBO>pnx>ziNMdd
zbmm44a58If3?UMix(MSHuhe^^^qhCeOjbX(beuYF${`K)$zX{;1@(a)Y=}v)r1{kB
zHiZSR&N=)zfSdUl&mw<4HCUljZ+;uztAbrse<IhlIU-Up_B=F$-FiD6Tsv`ts$7+c
z*%;Fae<PdC{aw|zbt7t~B6)YiY_1`3gXof$I0!kXD`^}Ddk*x#?Z}p?qj-TG2D(Qg
z8*g$9l at F`l1NQ_cvcLWmg87;pU;Z6kVETw>ZaV;ZIgR>>CD?x_*DU3ldoTGH0seF&
z9M^c6$z1+M*jn698*CXN&Z4~614c1QEX8NkPZYdt&3TMzTmxgJ{)CM%vyGBJ<Zt?r
z!9eDkBwyh3%zA(|xD9TiP$FM`^7$$9l|t{A8Hf-0R+oGHnSpA7*2tCT_QO*7KNY%r
zh?odR4V6Li<oJJsKz!>9fs>{T7!4NNE9!P)#9 at aPj5sq*P3|ReVM;7nM>=6e4q-Qc
zrYq<3<A>oT)CcB<L at l9+8B4x!yDc9MmX at g1VlX>;z5#?d4TLaq)ifNBJRsQ*P2RHB
zXff9Irs}F4(@%0b-gHK}hq4#jJRIUh0c(8&v;fmgOnrY}^0vs-)OW1Vq~oN$D)*#f
zA>Y7?&C(W<9hoqG5C)fO3}`E~HN2vp>M>2(D}7HBBH)slXeYG#Hg{nB at 4Z%e<MCm|
zsl0KW<q4oKQz^qJ$&lCeQ@$m%B-T at c^k&${E>?)RzniT%L9zGo6*F|j$SiuT-rUes
zunB-XD6)SFKuFIND|0)Ci(re#1;WoxnbjxiYVeJS+C0w-=3^^3o=vCeI6TCQ at vf-6
zxtk)Bh+KYz0g7 at 4(=)E0)2cll2Kp_64GmiGY^|otatdCLn1-FK8{5#QsapC6B|l`V
zT8EOq5Nh)>6c+8tGxv&geidH^Ma~k*=kjD6+EIV}k&BR5^WMEXVN}yhH<8cy7XE+a
z>N?Tq2As`v=&mDb7=vpO67}{eUx>zJwufOd{<cBmqMaxkwHh4um%Gu}-Pyv1<zBUc
zPEL8w6g;%2bq9h6VlizQH*Zik*FFv6Gnl9p at 2?LOZf1SEx>_N=)uL2g*^<tA38D<I
zGG%|&+s2)$eh%hu6;hLr0FjUBj*J=iXB0JW`E(<}iz|t^B9DkWC1vGMwmNdP)eEM(
zN3-oh=|SfeFm96XtZB+TA+byGHae$in<*<cqlUcEYmg_iPWhCjN&uSy(LnC@*ZhwF
zs-_$x<cqdos+EYfz^!-?DBIP~hoUU#JQsh&_--4_tmu5x1zbZl&oCsQvv|~+dN~;Y
zy$pjE#4m^o4m1(&L#0bF*o*K13Rdiz0GgbqJPZU at HTB}Ba5>yPaix)5;40VKPD(%V
z(MDzTgoJl3MFF{|v^1rNmX3pHTlmn_)qeqAYU*gGQq0!KtCO)3U5_>LUA?^K%wT^U
z(4m>CR3>QW+_~#a%|D{9TWR?_yt+4x#i*EbdMw}#U+l)hcn+GqK*}QYY04A;OlcJL
z*?+X<ri6F27|zIuw7HyobQy8ghvC~IEf0UL`7<KF>(eBTUu2NO>=eZ4Hg=|AIB?pI
z?QK8IX3NEeMYt_+Xe>xEMW7gHpO}CCdUO at ce|wQ|bB$*@pfV#SzO^w4CiFymoBwy-
zsAg0~u0aOk9+#s78uA9InW!{FzUo{G2U%S{#sJNVYdO2(*_7Gdj0u9Fz+D^VpN at BB
zH?>P0&kEla|Mtx`aoWwrDq!a%sjOz`O?rD?#kgrfMb_{$r!^?az7-Q at TS0&J=!$98
z!dM7Y*WKnQM>jE=MPmrTl^n0cPpd|@oX#!=%jGbI|2}?kGi5^|7sX*N{63t(H60};
zRGvUzqcx&-)9NpSQ9`C|L^0SLDcN&h!u6z_r0ZcCdzfxiUcKh1#5Ha_L$`VK`F)?A
zDx~QU9$`5R&w8&{w!woMbC`d5d2-{IQt;8>w4g$Yz#>!ayV!6N(Z&o%%!0E8a#rl;
z5~Wab)2_ytL(*U*t$zj!k09&>m#lCD3$!A~%TKj>sODfFeod1r=0auLVN+&&b?`Ml
z)?1C>2tfP}cTtmQg`l~4e}m;jePBr=@L=_WRN)@YPN4(Y|7d7HUwMC#NTX at noQC-c
zNb*qwX2+!Fp|$&0HV+~$lC+$Ju_#w!Yr6urJHZGP!O&U@;b_{|ACG8dv-{A>hlwN`
zj`8It+m5{yHY#qSfC}MAKt9SJYgN&bDsNF*A(R7HxJ_*W7+Z`F3=dWKpf0!SX+DPz
zX=h+9Q2<C^y{w0H<D7pgzJK6Sh5-?@uq88Qq%2E(Y`NxME$WUoXB)+d#oVmFSE7%y
zX9Yi7!g~3C9*u=E&Sn@|Wr!d3NOad#0TMIQQV7dgUpzgqLY`#3{}4R#d}r-jp7}gh
zJ^#Z*EKBO|1Vr7f;IXJ-rB##X9}YD<eDnQPYfo;Uenl>AOnQIKGgEGz8Kz(FR|3E(
zPZ`=Q#z at +;%?+}-Y<#Wr2?xD$3ZwQ+?U79#1IAMf at c%K<Sm8Ur7~@}H402-X!XkAU
zt}2<XBlKm2hgpP%RVr|S0HcPEM8ViZ?<w4Z*h*|aQ-;U4YN3!p%ea6gIB@@c3#{~k
zai3g9mxjtWmsWr2p}>vAmpsY_lk;??Z^(-J;?W)Zu<+E+tGkQ<6Vt?NP+s>a*p2Y#
zA2<P!zMk7Bg%Yi`eUwJDEm2STlqC^lAqK6Zf$f|poP4^3l^*<)ZW?vWA9SFLOH)hO
zT1PUbBf0sLGXy(Dan0a;XOXOZ$X>6G4Z~R)^Mg%MkxYL`N@`YPYWrwoJ|t4?-3p)C
z1>Be#g&S!2ilSLh9jG&Oj>lf0R~^MLv8X3)UxKbgS*wT(5v}fA3ONsTqivXX>9h7^
zo<NO)*y(*b;si`L6oYq;Ous<o{nBcg2}Fy-qf_y~z{mg#K=i+GQe{EOAm-Xu9;GaW
z=nWu9d)ENx#BEuBzh|W)2g`vJSn#g at LlwN)X@`F>HzD};(aM<vfk68(!%jZ`kCzlQ
z_*6_%{eCWVPp{_LFJFzFrSKTc1qbCq6&aQCYI^nhDw!5kL{qj98bpQm*vRnSeY-1N
z#0B1)68lF?ShsnPm!%m=<<oMf!*mQ>2^_bOfWr^c%=#05T~*A5S%8TB!hoPO{Flv{
zcaes#Pat)h$DC0ASxh=>%3OzRp-1h>1g(4J=I~iofXKjN^*`Q1wORB$9=M$xb%V3G
zLCcUC(or3!v8B?HH;a~g9;b>{TD|Wmdi4sw;=ZDPw8tu&3b<RAOKCUcQzB1XA_ZLl
zO62HkH7crqdZV|o0%4Hb^07*Il6;tV2*mVFm&p=nOfj~t$G#clWP-0SB*=>393Azv
zkq-StiUXkQU|GEoPIw)-i;&d^NqDJx9cm(}43rq)hF+Y?J;<OpmN{Ufuv8 at D>cGHv
z6Z7u$5Z=f$D8xc_eIPx at ScE%)TF4BlidcaLyAPy)`f5w97~Aoms0yAq9=XwgGeDKl
zV0D0<#}Jg~BW?$eg5CV)&2)qKmK#6KOVQ+0?g%1PB<5S?v#J#}W_><XDT;fl!LYbV
zozv<k6i}trW$Lu}C3kJLF0g^vHnc{B-B=HwNByT{L$5h(?ptNq-jtzr2~K^<sE2tu
z{gMZN`xr4T7o(QH)4#o@>Hqe&k~}yyChOWq3adG&Lg=#5%25;O$W{E7PioYSu8&NN
z8d8rfNOv at Q3)c6p?Fp74UX~cWLjq>kT;!<B341*$WyxDQoad`YtKfvYFLCCMNR%{-
zB-qLWCNfKIHije3phwsk*BH4(yRZwV#7WtIzEb4)s_mJzkaJdGdD+1!uJ;RhQC~SN
zlt~jz_O5PAm6exU6J^DDj2CnNf=ysyI$}!Km5d9Hc=fH|f}+ppfC;5vLP8B)PrarO
zgcHF04V{qt;_`xD`LjT$0Se1LN{jd!h>h#)*o~Z|vccYj;?jQ!@7XyJDvBp5GY}Mi
zF at k{ltY?fPDP<UZ at IEUOFIcBFkK>NNh85J?Vs9e_#0ishgdx0MqeF^!j at 78?t4A%V
zxRG!Wb6WqE%V&kR-)g#!?tw>Tv#xLRN>@_u&^Mr&9eSPQTtIarq32Je*juYt8MUJx
z##uyOC^&-MkA_s$_ZX8<FE?>SiuSO7^Wj8o#h%%XgME7<S7Se&{A$A7tbF{wQo|B7
zGNL9j9`tnPUdgU9*-NQc$$}@jgN at RquktG^>EoC!ZM1<ddHC81S#S!U)V`)i9-!ct
zQj(8a4}^}GHumx0*Yh1ilb<8JOSH5RfK27!JB&~c%lEQh((VD&_1`B&mjrHq(>Kj?
zmZ3y1>(8^TWFOKx!cA*W#asOn$7?<LlvmE3<P=D&&6S!=y-rVBX4k8HwV>Khr%C~z
z)JkwC_vRe<%{7Rzdd9;`)k=#tcV77}JcZUa1_34>a{k|NwCLCo&B87jcc&>%A*Ro0
zHa61BC2Tjt9n2HaMM1Hy+8JDbvxE8aAe!u5K0f=dx|{vXK}@=n&SLpO{btF<JZw53
zX9krSVrPIe<ZmiWElnP2y#P#O$WIzEtGPY`FIHu$>*|q<ij6XeqhkpQ7j%HeYH4IS
z%)6?ObNy0?>=!I8&W4x?27i-V>A<gbX^eaFXm1<ErfNT7Z6`K)`tVkNxmR=Ut%5=%
zH2BVw(|(M>3aMcig>6sdLxM}4+f<noXK`+$tY(SLkf0co)l>_Rt?-9hr&}Q17h?M=
zdMOQ<!VcSLm%jY&m8SikM8OIhPmMhFS<j4Z<gDph&-#&IGgtt at 3C(Y%DrPH`1|Mjm
ze53h%W`JPU3U(PLyW6*aDuF|5Umg6UgZt~ZuQLj>ZlYJ;vV1dg`7NUtHfsCS8^KPK
z5X%uaP{Yr0_S_<wEGVoHR2p(g9IA14XU2gQgMA_FfQOm)FM3TxQ~+=#eC|(1a<~7n
zUU^v9{`XxBCw$5(g}8j~K$zegd09=x>&OdKNI$Z~L6i6D5c$o2-E{;EX&kfsv{wb7
zXH1bF6_}ee^=Da%ZxRvfbNl{jWF|bf05y*p<hYwVx42eBcSB(aSk|~CRBTT!t~u=j
zk8`8bXfRLg9|VFXCK)wqNbyoQ+T at Uv5DleKDfb8j?O(CaYJ!-Tcfk_x&;L5u0nbMY
z at aO{GXO`w5dmtEp(XM4jIEXJ$t}(-0=7sKD_bAw73pXY2s<xW2u(Sf~1YUQ;GFh*;
zN8jbsCaI5QOuwTqTPtijYyH*Lg^`fyBkH#Vp90{dZdI`LYx$pN)6hohDVEC2VC31f
z6&6ep!;8TzOT5kCmTk0S3A;9$NM!~A^o%vU-ls?z)WCv&&na4h)k*m(Tj-#~iWt4A
zac;tx(?>&zA%S`+4YNmNWhSg${%?Sn<ogvk872D3*Rlkf3vD-zJ_X#*<d8y+ at Oc|7
z#=?qg(1>Ef+4I34Om1g^pTGpKB`szpk}jO`9UYBTC0|i0#ZZ?q=vXO%k(Hi?7O>>Y
zmd_I`RgOo0*}8u+vA!Q_Q>_!_!PUze9*DW&Rm{y9w!Fq~<shjbK^-kA+}`3 at u}NC&
z?Pf0q_w^nnt<DhI9mO<3=?!<7IU)%C^;--IEQIE^CLo;(EypEb5irmEE5izGzc(p?
zEWsWiOmcOpywXQkuBI%d;YDou>Ka9X+ID;8lrfNhjM$U#&lf3~GMDBJCw+txMRF at M
zrsfERya$2SS3-8U<-3VgtmB$p5Z=UKzm=|WQQ8P>;D;iSD<6tAUqc~9>uF}^NMqGL
z#+0#31{r^&LNr`-N4-8`9!o9Q5th!n&Hc7$JZXf_o?FGDSz+nSgOh~M>}0cFq7NUl
z6H#h^;s`>Rt|PQmka>L#^ZB1#)0#$V9bv{XY+SV~oy8?A&ogYIEsHPm!sk?arEa+W
znxG9|WIRyA9a)A~>ov8{2kxdh(~7y!Uy=Zh3v at 0Hx>TI- at mOuJu+Vxqir^E{Ry}9I
zJouD#4fZFDI+ME<mzbddsa|Av%&1esy7FFsbT{>wed^Ml(Te8oqr`CY<T!wNAEK1n
z*aFKg=d{qzleJqiW1f2H<tMS=tHlb-M<13LzV5h2=Z*`~TH9eP#+C}QTHYxT2ee30
zg!kRU^F-AWE%n-^abO76xeHVYtyzs6{!H_@*Yn5wNsE%Nb2A$Q2*)#j21~F2OtXT2
z={7_&<^8f-O3V=G#J at nWW)!04x4{{z;5cYAy08<l at Np-I!c*+2btlh^>7-N==ow_|
z;LC1fnRG#ASGd7F*3tdBp0oEGy<f=UKoI=GfWCi$CEGkhw?srb_C;F*mNR=EMy><2
zFgdaf^fcMtnQ;{sJ2=ELE3q)Y!C?M>QX;+-^H3|0wVpqf{hB&nCT47}Cz~2EVtTn1
zc(GFCc`1N<A(tZMP!LJrFNpv`V&#K6!olf$9gS7a9W6#PSh&*<``0`8UqL+Ot}AHt
zh9No!Mc`X7Or-cQ^-61EuyuwbfTzu_LVK1y;}<BgX7ndpyA#_Sw;vP-o3l25rZup7
zQs+`<bQKYNSJHN|n{3 at Y>Hop?EQ{rptbUKVVFU}X%XF(^a`-7AIu~B7&@uuVFLB9!
z9Og$*NE{ePtIoJst~EtG3PJL&6T*_#+Et at NFAtbH4Z@7~RA>=7 at X#ZxII`*mR_d0k
zYsttpsDQd at 3uik|L1m!dBrczS5)bjpdc=ZSoj{L9jUgp=BoynAdW-xWK)O-IpYb2`
zm*3iy^m^`&g~j76qNK9^X{oCb*B0kB0}wu9!|bKTls&=s&fu&@0XGgdc!r4fWR%|_
zmodXOWxhs;6;!kREu4(%@r)I_=wAI1bWG6jmvBc8c7#sGYKLdaV&Q0i@&<bZGK_><
zUCvr<#jVwTtp~xa<t~8)duM^y8#k#A_v at B-rVL=i?!#Rvx+(`b!|jp0=?1hOBjUHW
z0e|!F?T#))6<mm(O)#p-?mA at oa?HWW$Z6-$%TqojKgGI-_hu9(VRTMVK!MlcChEl^
z2KdKM&)tK`4?6N!lk(DkvomPb%6EfFO}|(ne7DUTTMM$K5 at z>I at npF<4XHF1%257G
znP0&%m4kevAP)bx8VP##^??#87%;v?OWBxtseBdx%2G5z+$4ZRNBT=F9&@d2-g7Xx
zwSg3y($IGHhpKhC%*IJ>#Rh>gy*}@Hv%%SRc at wCPKUvdKWW;%Y*~~{b5sLJ<r_TEx
zV-nHc&heso!$Jjnh=MsUrJLVXW8iY!dr`%g9e(!%72c*pTt&lEl-7}I{Mikn(h?*Z
z{-UV?QMs2k(U!LM50|pJV!0jXondd-$t at FC4Vy+723%JO@{z%skf|83xuaJeM6m$B
z{1vM2Q`-)c>sqCMBhU5r`;JfZDF+P~W1NB+LuD&~z$%Rfj_vM!P{+ZEJv4{??QeT-
z1#ixnj5BH!`zs~2Ib4u4nMR;x=uxHdymmBA`0R=)zd{?-97C!GD(>C+NtZc?%3e5(
zkMA9B)Y!L&^_)97L=l0jm!~)qANTr1iXc1Z)p((u_Rqk7&Uf`dpabE9fJ?L9LGY9$
zYs(S$jL(7)nwiA7_kzVI3#k?nL}D0?SjU~P*Il^JK)}Nyx;2syI?1dUkt0laAg9J@
zu)W-WdaG}V)YGO&ui>Q}&x_iCPtTNzk%tKtc0Uu`hJk(-z3afU3uz%=Ti$j}U&Vr9
zQ{MjoQXrRqO$LI8OIi8Y$P-H2uB=tTPmV)EX~kyp{$eS`)iTb?e;7x?ZC($KrD5NH
znq};&_wnkZ)4UhXnruk7pS0qEkEp#OD;*)V at sORD3qelxE&)0c^=DaqjrzZzQ0^B}
z%;!MkI^dO`Aa#8~@Gd;FE!VC(8f32<J9{p6NfFwANWc8PlyT?!fd3u^hEvWdQiN8^
zi~q%-CR$tA8b(+8ew!7IEU8vCjBlrAEaFsrpViUeLOmww?o3`Kr46`bq=#IsUq at YU
z7goAv5Ou*C{?|M?{&3gtj02*2r&9AwSo=c0Hm6V*v9Zt;Uu82Ru{hZ2tgo}V=nL>a
zd3fx9om0a6h6OC1DH94L=8Aoh(=o_LwlCi%s91Y`VY(6x6`it(TX=j~gozldYh}C3
zu8S)i_{QkFX@%n`4^cj~w~+$b=)-<bj=7KlBX;exjn^gA-VbPPFT*SUoDWWYm=mXy
z{Q=T5&8A<Q$!HXBCu;}b;i|5#t7?VFZ*#4G>*w+U2I(Q{s73Un&mD06{C0ViP4YH%
z(McWKSGCA(aZ^|h!uUY!q(@rP`mS1FhrCL3MOWF??=irHMF9pQ6qgciOK!M&rwv~2
z64~9{=;&0lBL69*EH=iV1xvn|uS4FTi$~#*F+<Sn?^F>F%tNE{*4y|rZs!dJOm8fI
z!D1<O*VIupjPGbB%)KCx1o3}u$TLY8CEjQx7V*`pUdBM<7!~9vkp9L1i_IcxjdK at 2
z+UD_)r-`e0b!Kr9;YQi%{M!XEg985w*=+=y3U?{^x}4Dq4UoEUyDWpk+zlHCGYA5-
zfyq477q~Wpvmdo}tO8~18TWN`rvFNRE%{p)r_b2x^O+%JHZ#O5SyfQdIfBhYrU`EJ
zw?ySgZu8Ym*zf-#tgXeQ0(GVWA1W=uP_8$e1qD5Kmbo9IdIf5%<>bFFET#BvFp}Lk
zC|;l+BBP?aCx-G!IRPIqoG19L=`|yPP*`W6<PacXXnbyWjP`|D{bWg!LV at jnxPsNJ
zZO|cG!w${%qQ!B~z*LVy at R=QyEdo?j=&n%@a2bG(*_G@|t06ySo4ob_{X2A-kzhG;
zf2;ede8aMa_ovRL82Oj_osl0q`=hj2<GM1~tnT=~LilMIgX_#GoL+b1b5Ay~LSbpe
zd&;X`e_DMxwp1A$)$$G<Jk|?;B?E=Ytd!6A)5o<O_0|fjPcM;w9HaTZ*aHub0Qd?m
z0JUqI!%esuJL$-sFYzs2gbf#D8=|9oQ8GcR*~5QvwV+xcFSfbVd)*<ly}*%XlOszR
zXo7a&6Cv?@;?h9j)qOC=Km573O^33lJo-4~#;sx=&xHqn67;dMr1LL-&wEyh#N3c?
zC@@}U7c}O1=8ArAxyF0q(|$ivlS>js=Yevmd+hOkjm}<sPkvo92c)G+$!T542iqCK
z?z(Dkcdw*(=NAO(&4x4;K2sD_<(ZY=6!>Hg5BR%cKCX*D6wH#oJftsk6|za$Xnz(v
zKb at lD!VylaG$gwFa9lQjCZ!86;!%<DnG&2Ur539AraF*tYF at 2x{>El#0~xE2dyfkl
zhTg+NA6v$|L<xMv7G<}wHtT><y>EE;U;TsUvy#AW0Fp*^4>TiAMJjk^32{wn)NLXg
zOFv`V5u!5{@C>GT7`>;JSBcbW8)qHl-txdR12m?8E63r#MrQkeSLK+L>}IJz#X|0n
zcbG1 at e3p7NEg>WfC>9|zt=dDJw0DgKns4^CT!#2=3$N0%L>7hI at _)Z{+NeVc&Yl%I
z_ at sNZ9BuY3_LH}ZUVB)3WCqC514&n8f{Oh<2{T>u+The>EAClzWmy>c#I~LO!i>C|
zj2VRB6|#q|D;EKO&g-ikTdeL1x_o;+J0VAM>zQqT9{OkDyW{XUt!h~p*Eu(GItS^A
zd6PL$1lGvF0-80{<$*X~vm at RCs?A`v;2B=Y%ZEuCdYTGK4^0(In)MdBhjaO=HYo~>
z$YkXWjdPx259Z+`sZfDrbLACSpVACgMXHj8|5BsG_$=jr6g`(MF~p$)(Wj<au+Jm3
zb|x#BZ8)TW_Gogf%yf!7gdEB{uWD at eN<S0Ht}{9=J=;ZI!-XBUkw_)rk!>ZJBHThi
zeiqtCjb2qGVkmkV=&vyMXAbH+@&mnoF!`<5ohJ!xS%9KSR4pK=jjvb)(16Y-bhJvd
zld{^~PzEJ`gpT2B`7?LJ4lBq>FkbvV^v01Ck2AY~wtCo1?gWV)EO3IA)FqxRAT+EF
zdVPJ#|C_!iw%a}wDzh}C3E2PIK}?~$+M>}W<%KZG#-JoCk%v6_A3x@`pa4WXgY at 5e
zde9%fMdsV~9MvC9;AZ0yC2lg3Z3g*`bL4R+8SLzTNv>a~zQ37|b!0|Lru<-RVZU5>
zqk-~YaUE&ACgeuYEnbyq$cp2VwmNdHV!Q7B$<WDuqNG7rOP47zEV=||D}o25F-tYH
z@#t<;#Foww>;(Llec&z=co at t(BvLxeiJ&lN4{L^wy<x7fy+o=zNLI+HJSGRHQs0#@
zpecWUd5&Y~ZUPs+Xly||$}q<qeXi2~dLu$Pgu`4L1~QpTa|UJ*R?qmFroO3S)E;la
z`VDa(j}Vti59&(x<L5nQ_<l*EB1_v4+3gXw8cB6KW;c`HY2i-+Y9Tn1V956VlxA!H
ztfdb+|3^-0jJ0)zyXV6KpdUXygu9Y1$u97J{6Jgl at 5+2ARK_Vy-4sM=R(BA~)&^u4
z4+;N(-TD`5Phdy<^0{qSP6#&1`^Fqy#-S7QOR~vT-XL4DF=qcF+gE;BiNGd-Y(*Ol
z8Gq)Zf)B!aXuE4%fOs79ud2x`dr$&0zil8tgcNe?du~_1B}rRtd6VBJ-6uc*5hLDz
zn+AIZ5PE3DiX2uO5auOp)WqksHITB5)VYm_*wr|o3)(B}OhDw8Rp7Q|jz#2(B at z@9
zE+KGqz%PREBTh%XJ>?b<vF<0DB84R4WXuLj87Nf<G{2*lT^FAjX!gqr!X>khjd*AJ
zA0=k5G;-Qv4Chq2{*}Lvj^d!l!jPDMyUp4{lI+M^(3rV{zjmO(Tg at 3OAP=}=`Mat@
zdLXY2j*!=E3K3!hx|tP_W_H9Af77-h$98jOpx9ny8Sz8A91}1#mn}vQ8I|1&k}O75
zKT?ci`mAda)p{$)h5{~rn>MVxsn<7%eGW4T#zpsw9va(GSM+L;(d3PkMD<jECr6FQ
z#6e{XgD_uj;s4$dr%v~Y*9i0AbQq$_5c@{Q8#vW?wU9oG$Y;|Ww2mc4yDNZOztqnt
z2`aY+cDiPb&`P*sr^Ult23AiUE~5jI4hK|+7eo?xVht at ck$nW4db(vXgu=$3Vr-M&
ztaDnmrzbSV*-}21U7k$h(uRM3Y9udo#P#>Z7!2wzEEZ!Z6I&ZRxvG1d1%dZxx(3kA
zRGC;(U^Vy8fjLSmpT5xGy6<(aM8CE{R$i^J515+>bD#bk48Sj?r#i1$p6>zGc8K|k
z`%SP*DAUc=e&1{!I#Z~Wkk7l<qGv)isYq{_B4$ql+>DQ(HsHVXVy+8+J3DwWBptFX
zvtMQ~&E2xF5a5#te9f6~oYQa#%6(QhM at pScAiI=qSf67rzEQgwaCJ?l|CvKdfguT7
zph+{!Y2c|LPF4+A!KaSwvL3w%xl+24Y`C07hUGn90>d!MCF41-6 at YHf??ASdyK=oA
zAC$lM)YxlJwwhyR`gzoUACZ(VU__1bD=DB|a8 at Uuc19f$xwV1Oquh at C`v*mIr#MYN
z39nRZ#aExmJVw?lgeK=0E-HI*9t$V~NxO7{fb3hND(`me&R at A2=J*`HYyQMu>*S=7
zd1gCR at h}F)6|++GC&{MTz2cLf4&qRqjs!fnLIfBu^k|rzo>$0!mhKVkZE9Y~6g3~7
z&eiO_&AkQXS-#|9-+<uE4WA at T!Xi6*=Zt&2wZ%hcz~Lri#^E#=J7OERHPxX;<;S<(
zuAIk!Q(EAhNAlLWsGprkb&=Vai-d$U1=V0O;?swn4t}?0Wyl}xs|o4%wkvE!ZSILk
z4t<K*jb)H^lYeV}QRNLgVh{N_3AY|=N{J9(rX6j5=YV&655<-5e=h5rs`O3tAj0V9
z>#|TFR`XYlCgJP?fm0Z-HeGXI$7PdbXuU%HH!y0eFfqtlfqwOWT`?~5RGvu2`E6<A
zQ3Frx*Qa0mM}+pBPq=4I8{zRF7`uUj!##KS(c*I4E+US9DK$ILyos(%q!%5Km?x?-
z><7Z|6(2zJcw=jFq|X-6n(aVIRq;I67!c8w{k!jlaLMN$j>VE!@tip4J3_E0tKFQE
zNqrgOPQ4&zEz^UfTXN_CvSTIF#^FX^ZV+YDTgtlTOL3at>%SQ%wSaqw&O$#CC3d<o
z35g-(X4j~HV6Q46JhBLqri=_d8xTmaz_<^YU}@UL2?=&~6B;!NjV81AdbaBS_Gow2
zcIo)yVr36EZL&{NmavuZ+sIKebtpN2`A>b&h1ONh-4BCjyUN{|^~+{#KGCmJ4OTqe
zoloD_yH*|HGhm31pi(x4t{g{a`1RY3Yty<A-Dq5YUa at 9Myd1ppUlML=;cN5qpVb4Y
zR*e(%DUbMrnQl$O9Us_%9dBWYT-U4NHy-s{k`9 at YN~+(Ym`evT9d2WV;uOHgi}!rB
z%V4J_=^MxDvaMK6M+Iiv+^!K(uTLY|_2iqw<UVCu!fwZgg*T7gMwT^9s@**p({LbZ
zm?nXLkw9a!$_elWnc%-i>aPi;QvbNYQ<X<`_1iFN+3j~y^Ldn6!FM%wGGN6)A|P6X
z`Akt`V_VhUEGY%(XIgJ(<vJSUj`pns<Tfn5RQPk~<ERk#jC0XP&shr}Ni768v7iiT
zN2Pkg(*?Z7xx8#mm4rAKJOwxv*-G<?a?BTh!+9W7jc~S>-uZ_8{R^Ye?=c<PBNmzW
z)`0k4h=r0J&tTsZA8qo?-4Yu*@(@-oKi|jk#2*IfDy0|cHkRT<O1+EBske`<O|C3x
z3h;67Q&{R4pz0h0xvNeIO3Yc%GUZ09S2iQw`;h-}!(Qw^Pxqk`XCfr;?g3D{{(zN#
z{42=o)?bY`3lFtmH=-7Ww;(Zp;K(4~-R<`Hx at v<r?6CJr%cjuJ*+f&*B?6=wt91f4
z$4WD+EU|;d?Goi_zmM5zZ_{cK)fFB|J&zqCXr889HpblALRC|%uf<RNp5D{3_FF*c
z-eE8Qazy0s8?v?Vq=-Vt*0=#mXjylEfm+obyoFkuJ?iXY177Y=G?7ml+QnpfxVRx#
zflu>MRXK}mNsQk}rmAr+clY(cRiFiFZh*kDrjff&iWV3;Ef5~(Bv at YcF8m<__-al$
zOf<E(OJZ1xOgaj0d3glNB3 at R2u6O{>RAxc0ty!g;SvlOq9`=2i{)!A{SK&Z^&b4c^
z6U$0_LynD?9>D+9JY`p}9U1DcuE3-oeH1Qbfw at WGPw@nX(~{RHhy!w6X_Z0IJ%)IZ
zs9$xGUWJDhD9zjEZy|ou`N79`srJfSNz}E4 at Y@8oOT&5A!YImRj?uz2{PsU%EU!`S
zE;%!!OO0G(Bo at fHo0lS1EL==~H3_ at PsYF|JZmQgCbMmv$YRxEiSlAmFE;30cwq+oY
zl4`o?IeRYd1(glKlAO=NyV#8KZa+fIE?Nq&1dODG#=wqHWje#>yHcX#T}Qz#)?x^)
zNyNUD!3(pRbTnPe{T6pvE>+MOrAp?J_0p>9dCuWCTu<4%l*{>vni%PS#$r%4S@&RU
z7o)5j0}jPcN<Q88X=N&#02j!LiJ+%EVwbv4Yamf8<4v=?g3Y+Sq#4ijfr);KOOGiI
z%Lca1 at mURZeyfr%soii<T}r-V63n0G!~TqcBb!h!@-+PS0Fqv9I7?YJ+e&JKq0q?7
zTL;%38%hzz{Nd9kEZ}{A=|wUzunm14H>KHw8Uf568d>vzb at dl<X`#bnUz>^uml&->
zv`%jm>B at KI!|E4qyWp$QNu2UfmxTG=s>0`o)7XmfCW3mEO6Mq>+69u$)&9**zn(T?
zKcbwI=30;PePIj88BNWMvI0!=s;5f~EU5Ww8ZDP*wwq)K!|h&w!l*Wfen*NIhQ-WI
zaTgnZwJMjD^o;e16LdU=6G*%r-0B4T6Inh%YbzOvM!Y9dXuAe7n5O^>F-x2}e_uVu
ztz8tBu#)Cez{v2D<B9|m&!=5+{+mw~Vk>?pWe3eN2K(eM_z%1O>L`Z!*bP5$i5L8$
zu*Z(1Kn6&?n#xUoR6$BGl<O}twc4!rYd3LGY)0&eWb3U>Qr*$cc7#%rH?8h7AAieU
zXsB8+`S&ta*yvXEQn298A-}y<B at U$YGg|=bYTV-S*_%r&Og7oY`nR<^k1Pww+j0c2
zs|v9YCdLS#;32LP`fi4m?;ISpZTPLD!jHZQ@;K+C5NI`jS at l;VV-UkRI19Iqwr*&9
z)O~vrG-Pny;SG&&bpBa;@g79}niZ=$MiB-cEjs`67GG_`IJzf@;OKWEO4qJ3*v9d9
z%iBg=cS8|gn$GTt?8=jFT3_zGkB=?ayd$6k-v_vg8({dKNED!~G~S<zg*sCEwF0Jf
z4<!9rw#<2dCZ<qOlSUqtE$f#;N&OfqkzWCLGZP=01Cgg58??MOdh at ZXWm&Rp0dw1W
z6TAy`%q5>|-uD$RLaIa#NVgta!NIyC_ZS5X75yicwj5Je#geGIwt%h_J0WFx#R<ks
z%gAzub2pJngTeh at gwYtK{fMgo+Q#Lu*+5wibkEIywxj(wcna?Bh9sODd2c{_C@~Yo
z=AVdRAd4HETCU*D^4?yMyilqdS}WO9h0g$Jn_#j3S<M-$!B2~Rl7A<3A2OS5KrwY?
z|7fdXyC;V=)UJrv$A-FWwEnqRgV%Oe;?sU8_8Ts9a}P<vh4u;O>!>D|vzZ0EtldYL
zLgH$FKTflLyHna#NUA_~h%~0_60uE>L3CK(Z^Cdi_L~T%xF2khBVb3)B${!4j7B9H
z&$WUrNQcwYri$4g)2M~WRd<gTiQk7;wI4>Cov;czO;0z2w_Bk(eY(moGMNte+Zw!=
zs$Kw^cvkv$YPqmSDh177bIT}%KyUJui!;lAa%?S>!~R_6mdVs0L*aJvVlhurPT4Hl
z42=<(Hcvzym78S{_5t`Ay22R&htj2S3d)R?ezWxlMqR!_L%HKPzk{jbN!!Ti=xjRz
z+yqZ03)x8pi$uB9NSudSm5&f(>YlT@>1&)&LsPyR<Am@&IoF^EdN#X_Ik1r5yI<XZ
z9Sd_|O|B4nK}0c}5F3ppW4?s at UVpcqm#x;_V{S|DHOMeAR3nUadOd^7ynFWKrD+$0
z>H-w>mEG`l&L(<kamrR#JV0)6$JU~gA>uJ*!`HBCEpFR-r(@6A7)k{vC9tIp;hQG5
z3ve4zK8TcwLJpy{P3N5Dx-U_CttRw;iwO9|rdA_SiHwUcYk*=h>huXh|7``_w#B^N
z2^%1i*N5N5X=p%YBVEfc(*Ju(!~k at r42^mLc-u#Yu#c!uu2>($6lAkHtdK8VD!|Qo
zw?xpuxHB`26*J<R*yf*Z7<)~c-atUV_228(Z_ypc03{f*j{Fo70bNsLFoy1bJS;7G
zDRL7x-9_~*WkUm`O7(r;JJay1AHSR}<)RfJ*#Rg8t}`E}SQqL*Tk}McsKwz$m at dP;
z6g#!A)>JO%c8pLtnpx9Fp;hclh7uVfv5g4Ohfl*d*9(4jk_OkxDbg^qh@=vB02EpW
zTZFg3AsH<(E at 5NB310YvoHp2h87@6Z5~ttpzX8E2P3E)5MqUmKsGnQ-&fnFef%ef}
zt3DRM*L<5j$Nj?tCrJMN#$U(*rS$FVhi-j+f3%i-Tn%OA`sukt at Nmou)M`b;bQyP7
zxDBrsg=AHnv6ig91f8BMWMp5XP6AAQPq7pWKPlB2&}KB<Q)3iLdS0`C*vHx#>~wr$
z=a?L-y_DI5&&bq0y7&#*NW|K%Nr5QAY|gh2TuXJl0sZr|WGuL11KEM(Di^vC0vlL^
zL6N+m>(6m$eW)0<L(}K##=DwR>x1DEAb9PB9Ne9Ion^shpv1w1S0CKOF~p01B~nPF
z!u89<2$`}^5ty11;bS&`c2#VWb^ZD<9{bbDhvR32&{z!R!bd{EPZf*Om%DNA2R;6@
zUSjfK2~Fm8q9%X-Hxjuc#LG&*0+xQo#fwk6#<StP5H<M#cmG3b`<^6Zm&&B0p+aOU
zMan!NlaKNk1RAn;mN)HaA*>Ow%pShVPva*)YrvTBc2}{+H(fJ-X~nlLCrt3v9yQPk
zSb%z}W2O!fF`(?;3+~GF0_(Y^^0^rVt;xn5+L9ji5Bxq1FGgtT;2!K1sYM07sMnqc
z9g-+&uyXfGKNSYXaa at S6QyLG5X+u)5rh(`P#`n%pkC>T~vhzL-A}K8xisE7|k at Vwb
z26Ib!X=<5eI+j0wJ9bn!(3k*8GNcQ}S$N$p*H1+veJBh?Q`^^K4OKykk(qJ9zhhe$
z#!T$GIqcU?l{C+r+1|qb?TnuDV<!SbXz)Rcd3v}*Uv&d!H?cyz1VVIy0=iY2thr{!
z7?MLTy}%^d6DGx<+rftMDCP_ilF3fojUz74QrTu*fhYxkqwqH8!A;QgoNSjjTng5p
zxDy>SB%6><F0y?09?FD92?0z2P2Kdw=&DMW&~!+SHCjA78F1h2L=<m0fNM?Bwfrki
z*@!)otv@^wUdMlDge4^ET5oJ%4z!}^70Ef-jlvt2VW?6(6FzC&s(k}FImov8D4he5
z_x?Z;g6nO6M+poDmkwA#_7oOW;9pW=1Tm=-2(el<BtJ(d?v|<*<xJvI-K~Jn9yP`1
zAA$}k-0ll6^TcS6h-#m%!qAqiO7gHt1PshLp#JwmOW-=0YCBgVl?(212<|HTuU%>2
z1yLze|E(QS*OR^;rzIQH73VhJf^`>U`+>+;+uO{4kmXlVFuqU9h=X4j``cRNPZG*U
z37@$k?#vM+?Z)!bKz at FJ!02ZFg+!=EADKiBTUC;>?KS^tceK8sx2utfB*=R+ZXP}?
zR80m_$pflIp0s92PAE`@s0}|PS48WtwIUmF5t9rK2srd9JP-K;tdZ$_#m1*mDF0Gu
zcQm<wS4iqH3y_)zD36>Z(E;wpQ&E2Q?tu8+Ja&hA?~M%!hieJQY9}t?E~0Pg3VB!R
zin+cGc^cg^*h#tG0pN?d436UDv~;PST+FJTfxeo)j*hjRmxH>}PAyj9m-76H4*F|~
zxa<s`+snEl+Ae)da}g3+5Eaj2q}f}s6LfliUz1yBzIzP3{ZInFV^ALzk{*)Kl<4l3
z?{nb(2yVsVeef_MZ~jvWfLiWKA~XhWLMB|2={(?7hasw*F>Uh7d*(M&Wbldj=uU-b
zw=2^^!H<phzGAjf+sEbG7?WBt^^dDWn%W6^7^JP2{WjC at yyZr~9`=5)WecuCCp4sg
z>NKITOwHo*04*(6=px!f6L<kGiQAliEcV at URV&zK`36_r4tSbviuG^uCo at F<s`ODE
z&?(=;${(ictJM*;?c*bHMOwo?Gr3IpfDQ6ja%H1>AVIN1J;*Wk!1r*;Tdrl$SMs;y
zy_hsYz25F|3?ko8ImoV at jU4BF3&f#+$hxpbI-`SGo^Ok3mL8D2Up`@yGj(_``)D4^
z<-FLgl;7t2-#xRMDPj~7Ji_g*AMei0#H1F~+jrltFY~Q%=b7j}&>b}(T;q$%N-Z=3
zPEfS9tG)lZd+_MxZy_L&5fR01d1!=tDgV#QU=EZe+``x{SDo?roB0YoH{J1n!t!!+
zEzrRwU at l_g?#KfNd7xKQ7D;=kLyzwzjVR at STkEqLkGW$<_!%|lnWek4WuXg*1vG_p
zaUsbgN36aMi2~TDHq3BTNOyyc*i3HDjA8Qgc4ZSj!0I|k7)u?yvMovm^h*%sfH0ux
z22j*Qf<XAo_19j5k)g_?Ny03Dj)U59x|M&JJ<Edab|_(q%h<jJY~7)0%8N0nH;R<a
zzzfl2BropXTp(M~N_rB13#?y-_V?&*(nTo#{PzdNZbcdN7VI$^#B3Af$zHSfz`hoj
z>Eix12Mqd6wgUy>_pS_)5%BmD{Kvrj6(_7jw3zivtPEQ^q2Dv*R{(f_gMsq at cYTtY
z-EnFiV;|;MRvl9(<DMHfMU2e&?@Q7t{i5>n!h8-IXNC%TkY<%eP`E4S+p>_<4-btx
z`}1-h?`A>4U|6s=mC%-;@A4~Ma at Id9jevn}Nl>x)XfFv{hex%o7L)I4Hl-R23Iqd3
ze!dXaz_ZfD;A}((nN6^NaLborJgUmu$e`5HBBx_Gp$y~JWQdA8bW#<ic8b$jQk}>U
zu#x0*iRIWLI at 6Mod3ZS3To&u}#c1%Dt#OW9w(vI-*q!LiQ=7nhK$PS`Xit?#nJF{!
z(HJruGG;P(sgHQe^1X3rf06v#Hs8-~EP_cea at F8BySRX$^momF8)%H9FGMc+NpW*f
zQcuDq1umznXMb>N{`}|S3FgJ`X+4EV!Nw`tDd#$QgXPnfEr~BloDhf?g$W8A>|>n?
zB3HfvbfAG!XFh6Jx0~|O+VsFYJSx{#CwCu8p@)iPXED}D)MPPD%3F$R344DU6=#TL
zclNamB0uLd<PIi(1m-oPsE9qf_i>EBfaT0%o;`NCmx!O<di>)~5Jtj%Nn9un!xdTx
zn_F0gN^jB-mcH#iRV)|?GS!&uTg2E&a)?Zln0)orOvf`zY9yfL$#TYXe}#ht>16YC
z)|~lsjGGB#<*KoUu^NJ+LU3$ySa;w25X-d4+IiE_y0rU$x}_B4K5~&>G_tnJ2?%iN
zgNj0>ro}WubX+1-8ux#$naM7^21&g~`1!WI7Lq{+O@`C at hAPIq-YB2E_t2$`>@8X)
zv<TSEuFh6yURXQf3b=61Wm|OIN%Ba)k;2WYH2>U9KuI7qapB9wyL=xN+B-}Snj-e0
z+A~b~N0MWIV{LFavKURSva0B)RRQQbjlbW1OetL`t9L%P-<Lk?hXLr^5zi0YP!gT-
zEBS9aTMU@&IS?3kKTsDcmPtV1r!;rauMekkl+SV84@`0xm;=Eiw>wDP7)%jC0F`NK
zO`!4k#=((E#z)ouVo6VA%|S<50HgX5r^Qc+4t at lG+m=eQKhL<DixpcyY?veIBv43{
zn-S$9W9I9g9Blv%?`VXV?fU6ovlc(Vbsv9oROHe%(eaX-{gpRS#yYip3*BX;j!?>J
z*@PN#>p0-V7sg?dT$<%C8^$HDlKiW!syUp_3?hQUIIS7z)hcCK00Gt|1~?ZEj+#7N
z9r at sYCy}(W`%PZ*?Pa>y_4Mx}i;_X_ZU=77iUmTI&D!t<-XT;0?<5)9khKak>1x6&
zD$J&%tm>w#STA(ij{`x`D~kQN$S$UN at GP`Z at -<*8LWY%6pg&NmZUsf>;KZ8-Hh=qH
z22?nNLnNO;-+zi^fU2(}(E&VyCghMZs;AR`LFT2d5&8EdNuF~LblIE=`gUO6OK%#@
zW2&>RK>|(^db(g`iFA{O{A*LXZ(S5;tgQvZXO|VW9WSgX08Io?jiZ#DRF%<#^B9W2
z+t!(-9 at kg*uft`0r8x>!*d49!<JUhL=ZPihL27=bbiZaprsZ+T-g0HipT<<b<NaKJ
zxd%i$7hk=#H*^XXPHHC+<9HGN0+4`Sj>{xlMLm0|7LxsYowZX&xRrSV)qm<J??Rsa
z&k|;2k$`C_-?;T5_IJF8^aU$sy^?Hm9_6IR6_Kq)=0I3r9Q6R-XE=+L>3O3nP^flD
zWse-;XPk{jU>173z}v<-MH at nZsF(?VkoD`Y3p)XZX_QKKJQ<+lh=n#uK4e;c>MpN1
zVMZSR7gk<C&ibriK7Q5wbAfj<PI_9Ifs7MBMUx~+F*urQZV{jc61u4;1W5hamck(y
zyJLff<_`t^1}G+-AlTru5WstGjKY3*;YJjcttvtY<SGX_kMvfEJNQ|%ir><Io6#^!
zH^;%cvatuy6O_<z+^rT@)`l0gT)?0Uv>yd;OQKqU4o&Nq-7$OzbVjohYeLDt5okdM
zjA}TDL%$qAdPu;N<?eAZ&$hEMOHbEWk68On_wk5VMpjK`sc!i+2J=h}R&qn!>srXY
zZ&*$ypVkxE(fKzoquY|#YMdT_(*73MW~xthA;9 at z8~CzW^n@^8sUIp3+fz(S;&?-0
zp{*K6mDLTUle9ZU!hdQqAhlQc%|cv}wjxzSnC&~)ml#CWX-1gw$0^D}F?~_b>#SB6
z1gr?HJAOaTkHG;6j%78oB#2mcFoi at W%O~`&`g06YK1x at 3Z&gRXgwgAN^xg5Mam5e|
z5gtKB)v$I2u8sp!1!E7IcP5hfIZMVVo$Z%@^Rrx#2f8;Kmb|O2x(_*C09}6ahg|q;
zR at f-ewj1ZkIE&K%Q>cUQnX-ATQtx5Y7<<RGEbp943i at 3*s1H+jMOThC^BdHdMyy=S
zqndDQyBL6qC65U4)F$A6Vi)}vznKe5If{3_@!FTC%+VClcR=CxjXj~p$X3d97yPc-
zNKz1}8X6xIhetKedfQ?wSJ~D+T@;IgjeFi{`6trfcGjYEAdqqIqXOjnJkIiGFJnNX
zl7);cvQ8z8I#;?t at 04wsuTiyYwBnHF@`ISy9%EvVM%(Bwh&*L~B4gpVOV^&Y>qvpt
zb4@`1Vc0EwYL`b=1{74YBkCU9-q1Af&LD(7u4SG_Hg(U1mkRM=2vlFWu-EP|Ppn6=
zS2qf!D$BbRN%i~~zt1CB<i+hWBCEqo3;5>?bu=%j*#=l*2%4AFnXQ<&`UBiv(qX49
z5mr(GZy-)-1h}Vv8aQpzjC}UIQ#BGLcCARKSXdE>KRt3|gODTq_Wl|e{3`aT*P at 1y
zt}2F9=Ee^P#-Yh(46hC(;i_ at X<cR&Y^>MEHL{SY9aa~A-yeq{-hyE!?m!PT+cbo;8
zBw1yjM{q3~j?^u_u<6$;*22oRba3a!C*bugO8OczEE*1for50jo?+~Kf%&L39&I7J
z2SIkhB?iRm_r-;j>+Wt~2YmGC+;Zxgt&mI`Wq<v2X4|OJBUfR2i<L~g)~`)l8bxXR
z%WZNmp2}m0!j`6 at -l+4{<XeM`u;p+8p%yE$gTRcqI9r^JfW8z@@bWo-n+wQHdQ?w@
zX4PFy#N!-)Ii1b at R_z0yH+AJ4C>j5p!)TTjB2qx)PvdhDmcoYE`67P6N#!NjD4O3W
z$&gM$ez_0d`*yRoLfR^~+`q=dH1 at 9~NCP#$r?T%x$~MP_TbyVSKm};#WVq1-vinD-
z2Mu`3?$TPLccM{4N;)8fMzJOA|F{E*QLhsK&k~S-hhV|t-LS?^^T3FkI*YkgBI^~L
z?71M=YDbOol|fV-9_B|h{kGKJ|0M($w>E)kiQ}-=8<xlyrgd_LY8mVrC=rdcQ>7u5
zsl6d?L)dEnBh4K*{h8fW?%TB=@StbgN%M<T{Fk{#HCg>m!!FY%o*GZcB8AFVvdvN1
zj?LqL#d4O1E&kreB|PisJuTKU-A%>y#M=U?zyby9aZeiRVjnP0a?<Y5Z3>+zBPo|p
zAWy;i4OERqApQWXq at nRG^>#?vyY^Zlm3sFp_m>G(0W>y>rq+ve6Fq7ViL(e=@f_e1
z%==gtn(@tOEu7^04>#qqCcs)1U)XW*16%Tc6vXdN|1Wz|g1ret)>YHv=99tkI9V+u
zf4l93bJjZ1h_j(5Bk9$p)a0U1a4op^GBEcmgO^LTZA{<L=eqmt at L~F_FK36B?YsB5
zXrnZU-<MKbh<S<DWS-`Io-24{o5<Ey-%l0!xOw)JY1gCFF|c&3?~crWp-Cy2f(luG
z*pluSsV+>8kZ&-dBRVfk$GHaIq}%KqH%u)P7OlLb&Dn&|%Gufp<eETpN)oi-%>VcN
z`~}r4;jzDlZ#{?#*CjshxG?=8M3j}xnQXKo0ak at RbW5by=%Y}FxR2({jb|=@rvfzN
zhv+u7piDsSBShRvqP%5qpdUg;f=76N#~W*b{56E}*Cm?dL7I at 6g8>OpbU2U^nrDEg
zR&l-0)K<Ci`xZSDLcv!#5C at Ge`qP7dDjb`tUYq>n!(JH&gfmjmus*HxYrFKiYD{gh
zT))>VQ0#Mlh0vuEWS?KENV?t0s-5@&(>LfR;>G5uLtp#_#1448bd=kQ&<R_AzCP>V
zpslq=0oj*N>Y(%j@@ok`oH-`c<G$NqYGTq=wJt~0Q at XLQ1##o6AF at o&-6+(~zCMbI
zQ4h4{I=+ZR6S8Dd=Ek9!gxxH at eprwrbk@iXl3I7FC*>-0FF?MNn9^inyLkYCV at I^#
zo3AI(Z0p$-ju)63{cpk at AKBx7VD%=Htn=~gj40m~xCIjYgRA0mA{(o{YrtlD<A!|_
z(z!a?=ar8+eJF+;dm*}Ei+l${Z!>JWuQ?nd|3K>AN|K666GE~uSNl~*zm;m at 8%tp|
zT}p(FVG0amKDVOI?+&xP;7Q^~%rT?4Iow1KU=jvrVkn?-Qq1P&Q6QOrB+4?j6<%47
zHDv*=dbpf}ShFp27$bF>Eq{1L=M(L=xCtp(Ua04Rw5^gkaHdenx33LT-Acz+*GSsl
z?@7m|1!d+#DBZvMmw2j!H&<3z$84(VkSV|bJV4M-+S3440tU0J?ouJ1!Y*G}4MeWh
zVX%gP?&e!s8=XhI at _;sf_xf at YmpZLEuI{3R1IA6PNBskUn0!F*48?d>N2M{!U_AXA
z0mp=iq_WP^z1$bp+P?@@k}v}ahRO0KS!WLAxZXi{w~n4FAsT<U6Y#MV5ZdP4?3s31
z(g at BV&cQ!I=Jp-;T)q<OmwLOnXef{*XjQ_t<1oUU51%fBOy3-TM9h(9PlM7qQOw+f
zAoO_fDnN1Gz}mwfN@{R-m3ok&YqCy87BTyA6c4eXq%dyaGn`;-!G{4GmCK#XI^<>B
z$MruMHZckhaj06F-?+5x)zKtDZ`^e=PF+DObb7be<j-gk97u4;n24iq^SYq$;x3I)
z;H-;N;9<kYAP7c(f2xr~t9U^x*glHNYVss$Q}b<o4x{~hKr!n7>Sq|g0)_rXq-tBe
z{ZmDk$IkDh-C@>O%vkfB(CNOy2e^cHhxDLacd;{&^-Qq%ArM$7zAEvTJ_z}1)63Y(
z*gh;C<k*#ay$e-2`3WqIkR8<0O`C{!7!vc+wUDt`lf`a-n$T|D2+FP2RA*<I&>_=1
z7&k_!-Fo0kt!#|~%3=Seg6gPlEjnBy8P$akIMNK&XF*aD9abk=QeBb73(obt!-mKJ
zEr!ZoZE!}!W}OD#?7;Fp8)?zB=F_V2d>ciqb*jWTt$*ZxIPeE0FPM at wzR4h*7u<FW
z-uI_hDQAv<Utt3^3}*yb%fA>cDR%KiJ4@=fx8L-dW!~Q6nAZ)!HV|6rTsd{M1;DXc
zuB}y{gvbZjqYbQoI|ezP3y^5 at b_Q$IkqS?_J5YfaNZjh>l3)vv2xE|t2wfp-&rQ#6
zgZ*PyueoIHgM;}!gE3?n)?~171Kj^FMoac7>4idn`7b*Vk^zH0Q?u44rSJWpd@%|g
z&8kYoN?_Dr0*&S!p%rq}Hq?&+D-SSrwo4IeZhpDkAQYMkiwwz2rqk^&8F_;{+I%ch
zwQ;;?@*@F=`l7tXHh at C&K+**_qe_faNE?*{k$a2uIHx06(r27ajr at icA={LOLoOUS
zf$S}RCnj~K-E69ryP#k?w+z at p&5EO`5#^J?2Z;Q at 6%bLU{{dA)e)REm4p7$&Fsq!i
zk`MU#UAwM7eCSanK}|LwW+H&TF>?trq_swo|G31k;JYub$ljUE!qbWcO5VG>P48Ce
zcr`UL-{_yv+P}LJfSEylWQR38&k><w9SZq>121m7&j0aA3{><;aC$Vv6FMv<7p4#z
zwE3l7;-CJ?`7J0MtMn!9bE&7ah~KwO+M}uX--NSJv@(PGMu4t-&^CU9z~URcdEd+4
zo|an{OShAia_UYjz#EG*!YJ=9I34&p7Hrbg&8hrW#`B=QWy?y#?kb^J;WEa>De~8U
z>BZx+Aj=KB=xz;W{XsZ{A`&D?M0~wne!_JSe)&y&=oU&?)t at -S(QBo#tMLKS4pe}#
zVU4XOOAW at aJ?Kf!ffyqawM!T=;HNev^cSPTId;eGKR}#|>gJ2E^8G!SlxVG*DbPu@
z4E6*+#@aZWvWJ;)5V>QkxsnFlWQq8HxJZ03=l_i?F78I*AnTNKyuYX{>{6na0Z^cV
z9KFbpo`l;^MM-9i$tMNI?WbAM1^)<8Wmmo9wEECzDDJZeBSv!8Gq$+4^Tb8`=)X0&
zjJlh52oLiPmgI9niXVURQxcFi5iYWC`5%=#Z73jcm_0<o5F8Q4@*i_&UDz{!`h at Ov
zeFBB+89kgz;Ry1Uvg9|}k*?6lPW;<WA#IH~C@!t0SZl`I!`^um2&2}E(qE at rl;D5m
z=HPz^OFmUs&RJ-%QAX#v-Ukltq-WRZLVfD1KI4@(w1Oz*Vg2HKJVeQhH3*W%wN<4p
zR$PO0YD#4^tc<x^9aGZMN;gb at tT0k6wJ|FmnDDIhV_%ISSN+g8-cgTZK<Xbl73Xhf
zOzk+1ZpiGqE{a;IuJaRNQ+u3QND8oP(t|bMc$G=qwJ&5=QmC4wgLA115X)6~w8Vm<
zy=;3Q9>{eI8q^&P(r+=>s_f5$ves|*26}TMpBx>uCu#_lUve#O2yc;pDt(1229pz7
zHO!hU8DnKUuPc}MYERH&Jg0S&#hR?``cTC29^|S~u?=Ed$eK45ypOBa(<^s>A{V7#
zvtvfscQhb*XbwYkmsn(Cd-97(Y6ANWZ(<|b7|JG*{Ru=t&In+I;=_eTOhKRu9UXM-
z{`>#|K>ojgLW*PH#QIR%FGZy5f5M_fvY^nY!Wt1F<f(_u0x2ThDXAQpB(@6PQlZ~h
z-r2;*!C_9l^a1-&G5;Bm-Zs`Fo$E9u4oqiV=uP<VKd-YYzCj=I!AiSlfk{>-5{(p-
zI}{mS(!~;9f`68*?=JVEx9d^|kFRUf!w94FCwGCNfxcxzB7*-4r1l60e@^P=pO|BW
zeH+YcOT<^l4ql}0k>KZq2uy?B at v`*?widp;yySr65o?%YLAnn*21A at GFHOE63d`t9
ziXDXpZcM-NNApxczn`uqf+={i!B7nxa8&tM7dTa_)rpf4KLS9;(KD@{arRLSh&8jD
zKbMUnn443GQ)cWZ;>@v6f2j#rAHph^eyE9hI|HFYykuFu)W<vOg^B4vky?tULUxPw
zKJ$vs$rEzhk3X@$;CF(bK^=G!()0urkV?{dZ-cr9(f4&EwV?6pwJwheHF4!Q;<vgN
zl$CXY4Mt)-OAk~NIAD4{%oy93jep2wyt}U>&RrR0K}C<&DBIkLf7H?$5(OoR?HQ_d
znSwCn_5#EQR6z+SOOlfEEZe`8e7 at ClW@#p;iq1+ji3{#M-zps<HN!%AF~I6_A6x49
zgF(t>vzJ4m?qVFaKOWWH{!lvpXt6u0hkdhThvg&dww*yEHDvP=P>xF)q;gB4EQhl_
zYnLkaw<JL#oDEf?e>z(1iyesqHk-v?;`5 at tTP(f}*QJ8IWqirmV+}Ud<D*S=&aDHR
z at 6_T)Mn!WT9dNQaPGbg(Zvaf+`MjiA0yVc5Nura4sep-69uJ7ihaPHuK;iTHEjhVE
z8>Ri@@8gB(n2$3n_8#1Ml5XBUrgXwz&C3;7`tQ2~=LW;~e`U{`m3KuZ?v*u@=x_2Z
zTJ~R|gjawf>DseEv7w~eL==bW4vhwB<;~Sa=6%7B7&Ih&o3cMA=4u9q|K-krU)weO
z3UkEtC_wVaY|EKX*!d at q+zRvgf)sGraXppT*1H=auw>fianyYO{vt3zso?4W1x!dL
zHl at xVWpBU$e*-$gzgVTT>E0Sacd*TB*D*k}YQD9jsJQX8DEKxH6Ft8FrnXU<`i1gS
z5%sS<p<!}bj!gAILILnw-;4HXcKV4(bv>q0i@##+Md-Q|)%#ODgQ12j0~_~-sTif`
z+nH45*BO{a?Ux_FRvfqxO|rO6#KaOnQ%%g6dIdvWf58*no)E{JoW)a^z)ugG63S+y
zZULMPR7)MW&h;1a!Bq!)ZN-`mv0`#fAKFQ)+YE}U at 8+^X9Fll1z8^d3eKZKCJE~hp
zRXQc=CJ=L^UTf4RH%QOz!ndRP19=&YEi2XQv^y%8T-1&)^CZ0xul*EKWbhJ<X4ivf
z;%Tkbf5hhzVK{AR50!Fv`H&&uRw=<Gq-OP4=B&%fO7^s-Nja|ntL6rJ;E0a51VV-0
zLor02hnjt-Im5C`PQY=}Q%Dw<q(c2CD?)-DJC(9%0l7hpPXq1^Mvw>6&RZ?|eiz;!
zp5e!30z at 6Xx%O?kcOCmJnmwc5b(PuxNOApoe=vH at BNqC%m#coi?h+VtFZ);_7;H6F
zvxi9<nze3NgKN0))x`37*AL-qosS=cLsy$}f5E+Xb8+?TROYTBuw$sBs^oc=WPgZ;
zjwxca>}YBhn$`K8gH^+D2+^{lI at e%5v-(wz7UUm4=tAz-FkDcA$1yW7ja<wy(yRv<
zf27r+fiS$6!5b&d_wBI`Hzg7&a_Z0k6fJ;l#dZQHmWt)eJcuPce%V$35yX)q-`2-{
z`!Qw9VlBOAlT>e>8wWnU>jG|j{?fq1frPlv17PNJ>y^4prRFi^G$=dYAc)b3(r>eJ
z5Y<yO;kJC@$>~8uv8)TS;34F?6U-DBe}ysu&p?^{E+GFv9b^I{FB`&D at 9Ey8T*aQ_
z6v-k!*JrgmMcxkW0=4L8 at p*^eEX1vT4iDuDBm`KHA9pOy&CyaMrKs+vB=2@<4F8ns
zmzP?fVinwN|GZyK(DF)A46nu;s;xvGS`ZbOtTU+B^O at y3j|&AKihT3~KY2D at fA?v`
zDpr{4y5M4Zqq4GX8;|i3KoWY`WS7sLw?#kDTZ5kaM+LdXn3z2!Fm4fsa%>e?RxM&d
z$nfPK+n14_3D)-bQ)EorDN{vYi)DcG(8@|r_=Z8i{`?8(Cz0kQDH5kO|8}7^JF?aW
zi?MQ+E*o?0zWdboU>ssys2dT>f3zwUR(amLedLngE8Yv=a>mA$<+E51&T|jI-uZ-%
zQZqZok~O!m4C0+IlOQa_&EeV$)bar8cQ%AW_-<zFXySIP_K*Osw9gULhp(4DLUyWF
z<zzH*WT8AZ at n;^7a7Ew%nsLjWsR`VggIH0t)#x3`i~bi`K&r9DZ2)=Zf11v93bS53
zlmQwP(<k0tDhb~=KSOyD9w3sn^r-ymqXzUIRVgzz-*{B7cR-yVR|Ev+)CUf?naEi>
zO3GusbuKbfgF6h~ZW@{p1r}m*ya7d6^>%|O43eW_rKR4u{Q9~O$1_GZ1%--6jjgBS
z2sigrWP(CQ3fh$RAsiA`e|_;2AEs$T2b3}@6_e(;%Nw}jLO0zO0{RGN at 1pwpo7F#f
z>NHIQ3FW#Ub#)_Bs+dZW&zG`s0njwSm5UdGX*q9`NfyhRlAg>4aT<a2_#D at U)|=km
zU`8NKRn;kbHGeRb_t<OR4VyTlZ*e&|(vaVWH%kNH3K>lW7q7iKe{HM*tOr>NBd75S
z5ct_e&92`Rlq20!&rDVGDK4FFEvG7%#=ZSm8~3S;1{YF?`2cYIm at DIJ;(H{C6CD!y
z;?9gjAU6x1#EDZHBqXG$&#OR~!NWt)Vp)`HwQeGYPZG=mv?pf?Oz7}rMKhJhGp^sh
z`#(2GOX<0`6!_wwf9#0_5AoRYrWRi^)dLXRy6u~X at J5sJcVL4{QftEO at T0MCp95Ri
z9hp;mRde{2?Vq6ewO|d{!BF=D1T4{c7gQLTK4Is3o#Ce;P*PZ7by`ufXTnouedLqg
z at Bx(W{p#4~T|&Fx0s56Tu`0-+cp`L6<$>E(dbs{c{KN4He>%3Ztm-av7 at Sr#wni7f
zC-)LlZhINbC7*4>{t0<V0i~h7cc5%2+^2|^@8%})Xd+ZnXrI{;OrMlaKwT8evB$`7
zf}{uF?xdPmcp;%g8)V~n#vxDph7F at ux%prUKM%r81{NMwmF!HiF at 6l9vGQX%UH0MZ
zy&-YlDU|3Cf0lClhRg;AokBS#Tpo&Rw`^V`WtQ53mY&3R44rrHOp5%bZ2KK2x|boJ
z5#?#Hir*#xR;qmwFyod|vaWz)GKA=_>%yd=6mosl8pb}VC|0e~C>TM!v!0mNaan`y
ziVr{|P5IS7ShZmJmW^tM>VzC|pKA`>Eg3w~o<4H<e}w at W2|~8SXY=;0AWlv8zXbsF
zj}yhi^kud at s2AK0j2z@_`>_11Iz_qJ5L>{k6mgTJ-gj+78AQ&QoWjB!yP*e2$PxQ!
z3V&V;GjkD%(<1PpEvs)`>AQfsAr~%<t5Q9``QP!WVFYA29(RKmrD8sefT?+Q6pmyp
zBm;mSe^*T4-cRjxTGM>T8$43O)L#GS-p1k<ui0JW+boHg%$77&wFtg{hg^GCNUCHD
zw!^`DX?qO*Y)(?bjbPZyJ<zTDQ9!QXJ9 at i!;$07;NvwItI(&;)L8fyPkeBR>wRrLV
zL~Kny%G+wdo-Td|j}{=Vp;ivlVWCjbPuUife at Nw?JzB)0;ddpk(EqYN;|VXUyeQX}
z)F6Pj26|~%O%zT0SKs_cjh9*MnCt41<Wo>pp|Hou4>jP+#K~^6esYKxG$5Fe_-JfZ
z5OlFHaOuzJ26PAw6Z1Tfy$hK$F)8>RUhuJV5OV1UhdBy}xA)c2UB+dA&4LoS!`XQ7
zf9cEw+4S`30fx>Z`XD6g0SC!;&h`z?&Rgp<-vTf}T$IGbg(`-{OX^>7?J0@}WD{-C
z&b{uqcsvEXeHALkDlwcn?tgG>=KFCza&%jFT~(x#RPssQqqGEzHd5Zmyr!b`qsf3X
z(BA)fH+20m6_S(Ze4yIc(eXfLYzqw?e?T)tMf>JemTlv&LcT>sYMZE0$t$@COkl^>
zz_F at Ovu9?!c<-C?e*oR{$ja*&45=~oTs=~ll-(yfTL+G0VA^QvUdx$qfSyuXrbW*Y
zeVnBCmhcElp&zXx-ALENJ08kZT*q=h%0`{wJnwDGFL>ec`);YJyBU_?9_#$ge+RV3
z2$H5vmlyD at 4CYw^8<YqP71YrHlrGJPhCAM>UeaelgM!*+ko|^E3%nUsYR30|$dOEo
z>$XwDlRjg)|7my(x*_#79_>{lw$4keAzshY{T>3n-mKHp(rB<WpK^aU`g}5*rhGh=
z#}S0ve8`oV5c^?EHd<MetOo#fe<~loM@&shxq?(sUNYLNMn)blKxF)6iRDVn;Wl;b
zg<Y$RpM&n^I at r+hcnLH&rRcQdd0g?#sF$SK3O{qd@<#WR8C&7Ro|zg-LYG$IKCc^4
zK2^K`hm-c108}GGOuj0Q7%RZ)XEDK<WeLy!NToE&yf;*Lol+Jhfu`U3f2LI)$zSR#
zl_mw?QdTOtV}4$30egi2GjB(xDtTRH+!O0W)3;gInv!9*hv0x4hRV1kFmQF5-~K(O
z)W9$RU5EhpD!-%R`5u?DRtLr{3zP6|aiZSp935FAq at k1|Yh%au*C(7_oA{sv at sVl{
zrFQW at EH5voZkq7zZ-4#wf4e)VDvO2QBD8x<W4DM*Po2xULB)$KC{+E5Fxbgwm#SN*
zv#;_ZN!_406qIa$Zh4uCE3p=GB+H<ryVh=i0VJLDay}l at hx>hx6JH9amp^Y`O73}W
zH}Z*SIY=FTbB;eLP8{4t-VF690csay$qJMz at Rk?ipO1U?&ju0Xf5xGxWom=5PpiGd
zQv=t_Ux#!JFimD8+hpqFk^=j(GvhKaZ(_KKloibVYbozD?c}<u(;E+AHEr9Gv<Pza
z6&D+YS<|!IX%GZn;o9&mxNxMzAMIus4(3H8Uq(tf6AxacXo_XIVYpkKywEFby!U9=
zVHt_5hLc(sL;7;)e~H^*iEBE;Li5(&C$gz`87{d;B*=l0l_M9S?NI~k*2^bbl_>`X
zzSjvJ-|n7hNvQ|b3hwDhY5&l2v60_be{)^diaj$8G at YaY-k`^K4Q<`<+ozvWZE5&U
z{ast#K|?H=*LP}wr)MBj*WV#;X_O;l3ZzjrGPlxzh59*me;Z8!O&he*7ErYDf-zqI
zK^v8(=aBlz;G?~|N`2Fr3b;RN7uUY2m4k5oCoWlzV8w}B*gZmV0M^vO|9(prfIIWH
zxa)C(eL8GjN{K!xp5{R0&imY^{_Eio?z9m24zn5P(v%9jQc;Q9F(MHL>Q4Yro64vZ
z<nXc>NUinze`;Gi2Fzs0++-#H4ttxfC_bhG>6<{g`_<4?K~7Y>ks*Y$5?gGgLand1
zv!UREA50^<)BtxDT?t!N at ndjvaY24Qisz>&YptEv=9jP0z7Sd6ui$4|y>%M%JFg3<
z6~ua}fmPN_WqP!#ly~PvL;hcM#qH$WY{R2r8JYZof5;eatU^O)vR&7dyvjCOT_6;<
z4&)Kn!s1~#tqtpS)UyAX9WxrqfFD3j-qMugTTs<ly>7J1^^7nHFHHFGUc>0P=-y<p
zk8fd=HhqIvEa(uGSxs60aw-PJI}Uq%lN>tUYzvNWz9T^O3GzRT>ZFEYXkX!jhe^O$
ztQFqKf8tz5{gLgj8`R`}_y<KoR{+~G!^2IbEBUN;#Bs3jkEBgKq&00`(`%STpN`Vm
zEiay<ZgFcL$Y);kD*Yp18Fac=;P~M*rMsm0eqN!Z8E%1m&?$#?QELTxlp_Cj+j94B
zwEHe6d(>U48g<g`1+r!E9&hsU&XO$@@o?6ff74ol(c;iXs9pJKsV0unO*A at G#5Z%R
zO*F5}<F9rrfO|{D%AzvCrQs>uJ0XOb_xp~s?z!c2SB_6g?l7&P4ZB_G at oPEdXbW3b
z8G`E2pk5ASR!D~HnSmAY6?v$pqWKa`d=*m{d!WVue9kcEYtE^X2SJbF7FMWXc3Lqm
zf3lJXQ5!caaZiQj#f8SokE at e!#}?)bwqDsJ(zhC^IqKNeLJA3XyR{$NyOYX!HXS72
z_z-xvXCBY*stS=j)|x?21pG^Y)@`~eBLn~0Ivic_G{8dS$g0GTCFN+`rHOn2*GG&a
z7)I^B(<k|8y0R*)Y!wKj$mn)~7Up&RfBRu}bYCOw(5hhR+m)SD#S60QrSh!0=a65q
zzKhlm=y&F9NQxAIMru}^T2rM@)jgb^pMmsDyW?84q0x#Wc=L&2o7I at R5xgX!2-&um
zr_!`8Q)_%oxfQb6Y({bgWA`-KyMKIP7Z!@|HPCDZ2YUx*yjp)C91YP;$mEYDf3fPZ
zwx<XWonHw+Z9%H0NzEgL*o>FzVDKE^%d1fB&GzKUgZoa$8aT)n<CP5rhu;nm7HH3z
z%kROy7V_APdCaB-9?a7YeXt=hUCDT37vx2xkEr at pkEF6N0o%z)V^SRT@~_;xP9l=~
z+*{6c4E8F$p_W5*%J;jU`vqS2e_9oXEE-{jGV20EENAy~uAMLwJtQGS8>)`yivE1u
zUk$9~;+0ZgywG&}ju7KKflC=L07tGyVVpGxP=4+~bp5C)F at EB}BcG}|6A0J2+v7Jz
zr&6^UMUQ7S!!aGd`o};?Cc`C5d7zIR`$Cx>497&+`rYH!V7Tsq!6SoWf307a=*O*6
z#!Db?2CGdf`lhehOSC`OXFuY*i3~*YQ_|6dTnxi9bsTflv$Rd at ZF${zYx1jCYO_sM
zP>IC?8J8Etkj=y}lUA?HX!jQ_+6?AHSE(8Ba;660Zt(yPsFSe~ibu+QX6ZH<^s}B^
z-jZ3uVFr~!!1LFR?@1=0e~Sc<N$q|8Z--u$hiFPBEHY5Uz7_JO=mq#+r6j=3>#$Lm
zc!4j1Opz*GDj$u4-mk)9KAY`u6W!O|>a_{VLIaomxdPnjjl9v#$Cih%%E+FF5GDbx
zicSBVD!Bl5DfMs__?)hyDD+m<=DS7SvdjrWP^?fCtpeu6?RXE<e>Ymgu4<7Z6zmP*
z43DcxrrBZz&u((s??U|OJ8gL8^UmFanbjQwcS+3a-IBGLNMZ~YY?dS9>%y;>v28_r
z&MXAYiMw?s26%>Q{zK&>rL at VXed|q@?hUSFIl4H+>U7{Y--==A3uY}o>^gJW*JVs*
z_D0F~=7LZv7(jESfBCzo_1G!2{&BIaE44lAe at Bk`;OcBEXU*+SDwwA=1{E{@w))R|
zVC`9fyTjd|hT2pfiod at ya$>rg!W0pmzzAnQTJnS;FY~su1kdj&t2f<x^CNRqd2*tC
zlS&QCMg4CzlKhpol>ORLP3)=Rhk%4l4_hO@*Wx++6D5h$e|fWrA+N$+MCV13u`o;`
zfr?_Zo0_Z>4pE5z7{V0duMQKqYocius$I at AqCVq~pfRzxHZ@|Kd&p37AcEfDsPE7A
zO)(ZI1d6)wBv>FZ?>_-dBU|W{{8-UyAa1e$bR_B*R(Yn&8U$yz&I~k at UGxDo^s6Z_
zl0dzlMP3opf2$tx(s<8Z6bKLj3P!MXSt6(rh#$@K4W`_7P)5UT3 at YcP+$*yQzhbs7
zwYsm14kc*Uk>%Mlsdqh$o<;0_*J7jD=ACrq+XLSXiKYfIN2S4^0N+14KD%3ufydd)
zm0Hq-SI2;m?MH$^H;SlpcLapYZ?NZ)MW_`;b^l>Wf4zWR$Fa6qB#`N`2a%*gm^~r9
zAH3WH5ouMqRM54%?~q=S?`0W-y#+_QG~F3*4iNUFM<gOqbwVtnM0ZKBtlfpxv9+;c
z#<0B2jiIm*_PHdF7tP|I4H8%wj#MUVTGc}1W{Hq=TA;O^qkj!_#xcz*O~nM47+i_s
z=R-1*e_p|DM-%#i#N`yOis*6{#Z4|`TRv!2Pt!$XgYF|K#j+l`q at OiIpy}V^^6n>$
zduOzwGVe2t?Uo&}FS(+)JT?&7u+$H)v;b-d+d?$Gjj27*mQ9C`v+6G%N>AbsoKp6T
z^9R>y0vG97Ei~eUu&{hDNVbmO2-_!4Q$yVHe{vCCiXm2}=JO=F^p)|yxiaC6a1h$5
zZpE!OFP|R|6mKN9>{TYz7Ux;-y#5g`!*5(w;Lh%zpayV2j3`P?bf!i&0{bcwjt`tx
zX}D0;5|FQBkXj)!d(aB&m(k9pvhu)I4i{|04IwsY+8FjL5RC5*eZcYf1d_ at O3k>(y
ze<ul>#GqQ}bV5QMeI^foJznK$Ho#l05)9HU*H2ZPDs9y%3@`P2F<x!O7CH2HUAT&R
zM~;r++N1>IWxygaO}U7P`z%)en^dQ~o7dr`J>(z(Y|b9mN?42&BtFp48QScYC409`
zun*~X)7atp(*=pIW&DEZz(w4<Ogv*pe<bYp!dg$`WM{kI7Z_C}jJNy!uWMEtWXHx*
z>iG_Q<c}%8HgGNQPlX>MY;tC at 0qaSYz)OvdkGTfZY4Izb$P*xAUxFc&q_ftwI}w#U
z9TWD(RpWH;>3hup*kfSI+Vw at j@a~2ar%8V at _n}hLria)tT}&KfdH_nQmO<=cf2Bhz
zQJd2|8B^V at Kmxi7T@j86(B8V?gdmNUqF&n9<Ai$0=7x at aR@S1Xn_L|1d8_y=u^xDb
zI_WTAp*u`PVo7mgrkkb01#_9bmXy9X8m=S=sjs{nuRc=+kz(p|*dp*z*BuU9*(!zK
z6)|qh0r>^`cl=X3jb`F=s=(h?e at _eN=os49Xy=3JEwVz{EA{oC#vgYrl<swvUK3vz
zR&-^{Mvj5ind0&za;lK62)0Ec9G;GQrzkN*VhB at Y-9fOus78xxZKnt8X>Uc6+w|zH
z+kjr7;qAxnw54#U at o%^|2O=;T6IUD+FeWs59xgz&+2{_M7qlgST`8>le>O2_Xe?q!
z at axlDM$8<_3Td^P>tbO3u3}*~T_4z7HQ~^WgWW}V3-4>GHTkSUTPrxT=~;i~eKO+j
zaLvwW$2BkX#^}5L1qMqBm}Jm-m2=X!t4(F1==?(haXkb)oTbG(Su}f)Irm!FT-007
ziJK7V29OgVkq#p=f@(JRe+_4O<%G8|yo}M?IR>rpTpR at vJ{5)bDmafr#U}{7A_?e~
z%ElDYuoDMGd`;3>>=i1k2kVI)8ayG9fP>u at Ap5hBSZLa*=b2Owha?^&U&^V{$gNb#
zuwZ&L*OA4P6eYyIZpo8KNd(RMtU9(;CZgf+h<c-&b3eUY_{(jbf2kE at G3X{X at em*K
zn6C~dT2}Y`C{5!=^mT~ThC`W1XRd>Cts!A%^9$`&^JjZmDl7?y={riVu<HU`b*Vl?
z&JNw99!d#&;rE`&x<^-o#0~TWI>4zYeQuE}=Dyd^6l#rkb-FH_T?XIURJlaB(s_66
zeSOH~0#(WRJ^k-Ze|{xTLO9o_>?mPC@=cZ=TK<_J_g)k at l-^t$c7VMHQWoW-P16gj
z-wd&52k<&R7xNAR at YvH3IeAx)&}<uxGwX~z`3bWzvZJnD&G@=1mEuir4{%ucN?H|E
z_pDn2Z@`2XB5tIT_M$+av+yf!j2%TNh$>+J$2K3^shH_yf1j{Tc8gs#>w#hK5gh|U
z)$D=+nGHKmvA!m-e(K;{)~k2A*#By*WD7Oaqg$>oOg09`I<y=uf6LYSL*ep`SD+2g
z$hASl<F^~u;us7r>>-;MFjh&N^PC`=6PNT~@2oQR7TBg(QDDiDWmB$MoxcjYQBOHs
zAa^0x4Nu-$f3y(rHUJl;Z9F3%chpu4nVp8Js3Wh at u@yA+5F6J{EXANJ4_e-}@j2SO
z at uU!$A^C1T1_fV>T)yoHph_&*GuE0I5CR?Uq|Dmzdh=?U7iwL##|i&L5c>Rb_HTbg
z*5+VaC9ONNzl5QgWPC&I4Y{>JY<c&3XInB49pW`sf3!<GjPs=^&uZIglg=t at bx4wa
zU81$6WGAl7_jnVGCt0=eSUd!NKmC{9q5K4Hfmvf|)N{d`801e4uJ{O`in&v?Bl67E
z+<%kg=1xwr8xD4%-+G#@&dMg$E~#zvoKSEh0l4cd)z4mcbmsFFb%=^LpF%4FMhTxf
zR^>A9f6L at 66VNihb}QU$SVjN`f@(|SDothQoOW01VuWZen8p^SakVCa?F7f=!KOGZ
zXC+8Ms~0Sii2?$PvasIIr=^Z)v!ytPT{%h>LjrtA+Sq4OMJ(rN;@_F2+hjogvwOhL
z%AMUloQE)uS=@_zaui$G7XeO{WIN(4GWB9Vf7#PL%C-aZ+3QIfx)AAKPh??+ZjB9!
zU>7Yc7ll;e;*4m^%zv-m<6ZFq>@D3|IWck=7<xCU37wtR37_ZvS7w~5yS`+*%=Sml
z%M(ccjmlGhSPx=yPxXP~AFj1G2zEBzL#52_&W{E0zoRBUC73{&^y*IzDEA7_OVUVt
ze+!i47%;%iCw at HM=NIWUX~omr?BBqS$aB$KGTzx}O9j_BLISYf363pUW)+8de9RR8
zBqpIK^LpUljQb-~87wPd3vV{Pu1&_Q46)NUfa at wT;-}w~BKBba36z{sG(mp(8uyQ>
z=<I^~+XQEFtrdIKVH%(6O8Gdmvu=?Df57ojwsuT1MK8AGr at dd3aAE9fCT@;GC4|NJ
z;qZkn%dS!O->7i^%b8eFDd+pUCaj@>D~eG4uM~ecegtc;Ng|3H38$g46Y)L)->keD
z86dU&ien<;#wE3S&A>ZET_NPRdD{M;EX$#dNabWSU;p at N>bv%SPX>~Yahdgge;u&&
zlgTF8%0~4)rZ!}oIY4lt==x at ho*|te!f^=Kh`21hPodTG3BpxmZFL%O758JpWTyrv
zpshcXt_JzDjl*})tF6NZejCr6C|0A~IRxS}U|{*6zel_(QvBqhC}56rUr14+!{R?u
zHaQqr5rwA?W9+S^(g8i?g-gh+e|^%5<C2l#RMSQ7mTBl at GMogIMsa>yZUhbk>m$qZ
zAjS;kggvj0{||iLDAJeWReKrX>Ham1+-rLTJ*1oB2b~kIU;mJVDCBI!LK)i+%`}p0
zPp?FD*e?QiAHagcF6A>%hfIc(7R>e&k0P7y?0{_bDk6wWiHPoKjQm%ke^Q!9j({?R
zr7O%xQZtsp7cN10mxb>>QUhd#cV}ijT9(1ayFq=`m<$}}`iGOaZdgGzVF!(m>Mx&X
zUfg4=p+D0J<NdDPOPnG)FArEoXg~)qnK0 at 3j9;jnDh0PUBhNnY9>acH1{Y)s965vh
zh-aLwyio))NB`S*>xoSvf8Ws1AFkXWWxF*;BW;|f)X_zP8|BLHt7-GH`J3EM3P<~d
zS;YxROIfK_On)-|K~C2Chz*@J3b_J+V5ti8NIJaH!9~aFHB!e9iRgRzWm}aot<!s2
zu?1*e2gafQsTmX%)rs$Dj&E~>p`$#D#gWHW7D3+t9Ir;Jrdglae;z3*0LMq$nXF)B
zM~(u^IzdgHd*;pUG%=6=83@~t!k`aDLm9HTfgI$;^B9IRKq<<b35HPD2x)$L_H7*G
zq+tBfVS^rG0vsL*g>Ns>tv<?&F6=Nm5;=FK(f<OSP1)eqriZAs7iF==;^$5`NG`+r
zC5 at dh7M;nm?UO^5f7o-M)-Z`&bgusb&BohY(O+6+mVqR0 at n{MXjFMo=h;ei2wurmn
zwU0jwZmJNA+Hu)2y_tWpHZqF1gC*$wK^siUX<QOuWv5=J+C8n0Zmz&-R7xDkS2?Fl
zO&rNIS=BzofUZ4kbm6N?jVH5k1W=+jvP*b=(0K>D>cuyCe<Z)Z#V>%-#sihax}%Dl
z;&$CSu3`#+mBtR`NT;whjS%;z^>yi>MO1M-Z;XvJza_N=f|yQMGQnZlOh9&mRg-XK
zgXGf7#n7_}K~r-GMi~m1{W%e!keObs2fJ9NpeCY<Ht3y~{xco2#mv4rXUb`HpHR&m
zSSb4fh&zIse^{Y7k$dsmr+2CR-q45sDzv45m;#5y`k#N~vntrHWqI(VTb`eD%Io@(
zj+|@s8;f^_Gbit%h~dSDUliF(E+7+uu^qk$JFVp&y#`6yrNH61VRqqt4x^-hS#53^
zqjJ)pGjfF_+WGU`a1FaYb`$R29Ds_y-R*j7FN~=_e>L4(gGywBm9i7YmQA}^HcU-a
zl+4V{E-5!Owa*$4<631SL~vZVzKDIu{m!V*ZU;O6MT~V<%nuS;Vh?+3RY?hZqZTpz
zy~u-5FRH-UKQnH41E!bEOx*PvX~hn$HUNyqlN8TIMDNZcPR{VnDeQXC_wW>dn2G=1
z497z#e-1|8anN;sswL=%?0hQ67{FWf77e0+)L at au1ygn$if73N6=uM!$Pu at WR<Uj@
z6n?iE>n)Kf=|(FSc*&{&wMRR3*<`B~i!`Ai23QD0g6Jv%7|9IfbJwW{$RoZy&zd*d
z0xK|E_$LLRAwTc%PgERut|V7#y(<D#hVQVFe at ACI2GxBHczTUt(S3Z8YlH$ApX62^
zs;_o5;~j1a&x$J4g(SD3A_6_EG%9sukZP8;cEjxB1EF->8S_CVIrR0EbF>WK=Hsz`
z0nGO9$YfY<;dQ=HCj7;8m>vd-l=<HtljF3Ez;1p1KMSFH2Hqgt;stNHF9fgv5~w6Z
zfA|^1+t{dPXq;$N1&WT$v*+xAJ%bUz0BL;<#8Y^GGYJ=F>!{M2y7Mp$;-Q1ScNbuX
z<|6AlfL}tsjdJu}3c>TB3c?iTorg<t=>2Cuqge0J9&cF8Gldbz7L)DmbcH=j1>_w@
zH)q{`VkAUhXv`Ov8!AQ9f?B%K$MKJmf9w%sFiqE#Z($XI!0|r`aUc at 3zMGyrrU)by
zW=FC~KQIc&$$3{Ip<th>2f^6lD5Y9bSD%dAY<xTy2%a;NzAjdHC&2;-jnEBFPT&fv
z`7vh*cT*kpva{Uu!2Decdt^w861K|?5(UGEg3TsQ?jSG2oHDP2HU9=2iL at lrf7hH2
zgW?_-<|lr!4?PY at F43jLgHfqzHaxKb16=V^?3P|mrcl>9*{NJrX9?}Deh}5l1w_YE
zHv8+*@rb`k<1&lk(!_Op*Y4v5#Lqe!R;nvl6RJhnpJuA at NG44JR|5f-BX+}=ngk}9
z at h5Q|c!oYB7*7b45G4Rh_&k1Be>yxRW+zo_xx-T8dL~S&1ML}qxPWv!B7DRvKPb^r
zJoQl|yY6*~H_8Sm<!A;Okpq}ET~%#B<Q>{wev1*KO0_0E>yKXeM<3D$S+#Jq4E<17
zX=zl?-_gv-sYk15jk?E1sSqC at 36cvo1z{=UndXF3jq-p71F#S(r1B-Wf8uAhaQP at a
zks(uV-{J?Mvo*(9NX>!dBUk(%)FTmpnmp6b<82dx61BuH<<o6`F9v1T_ at qXfZd=)F
znO|1><8oSrfgY|6M+8vCP$*eUdK9}X_D`Acs%xkOU>zVTI`_S2qL;>rI$sXhw at KyB
zyDi}aQN$|<d=t3XyQqe)fAo0ZsaD972R7Fh at HALBC!Qq-U-)`omUAXjDlS`_(TbL<
zi3PY|?4yMFUi^~fI<mLhxgLPB<4kqkbcnSzWbB8CZ$$Y at nMHL1>bKvM(3&~bw#{Q8
z8|mDDPgsPj$a at FWinz-b2U)u8IQ6EyHz)>;iAlc+2P#ZUASX`;e<qK0{Bag_D&na&
z$0Wk81N?LfQ3EA3+#N*=8^cIuI5rK#&!749atFGAas5x8Nk*oBCe4s8^A2CQug<5i
zWvs`O1{(ndEBfTdQ+>19U<6R5h9*I{0xP&(S8$^X+NuYl3_fhukeUmpn&z&o$xF0v
zPvnj)V;`)hXS;ZBe~yKK_R?{uMTF&>^4#<p(Nb!&M98J0YFu~2UV(NerdpWV50Lt+
zzba}38F!q^+k}I;-D(CI{4XyrCgIdu%c!LsT!*GdaTrl_89~jamW%KsxRB?#Ci=Zt
z$Gd;H8}SAs!s=NNq7j(S`ew#+%P&cmIpIRRHFrVf41e)le_Q`vrw+1@=>RA?#S6sB
zD=Nt+*3x}VC#h>lNvP>_MTiqihTNQL`|UU2(F<gIv{6$iz&i;M4jn#^L0w=DeDS5+
z<&QJ$<+UKtpT1u!>|uhH9lQEu3s}5u9#1dRj+~6z&W at YTrx1uQA>a#4yr<yl3fj-?
za={l4r!z}4f5OvBcdi|zB7Xzp&fdv41mSeEGaeiyP9vpbH#R3T2O6OC^$&l at +Dyrv
zxO}-9GTRWBeo~(lhU*wh{62!8Q#~)eyro2Z$X)yAA2e;SRjzU142v6#k5gH69DoZ4
zb<^v6!!ew>*oEpg%H|6h6J<;7&Phyy`_Zsx!h>b at e;Vc4i5rfty+`Uria;ga3_Z-@
zHcGj^yA6y=`WKVeDa?vl^s41`^m&>_>G!0;9*3X-MO0Z}m#y!)`<=Vfo!YOaBV_)|
zvs%ND#>SxpHCoImgijGE_Pxr4o+Vghqqp7xD>?w_NnP|n^VeiB$Ym9zabE<30oe+w
zl)VDmf2#<<ZTamFYyAF4$HQMwiXEuH{_0Ozs6CP*-98~n3~{|^HCjI|n+gtGd!f|i
zWh1^I*;n>q+q8vu8i2!x8P6tDH0Kd)E!Bg;Q{h-hnwblYo6x8m=+iO+o1MkAPk~u{
z#>|V9BcyN(DQDE`!~=c$k*kD^$3zGyA~r2xf1Og6m+D5bZE+4g<)aMa6>7<TI5SpB
zo{P*{p=b*C|L2wR(!~m`HOIYRMvh&qb6d{`fX={hy}^)PCX?4{-}3==isT<?@`A&+
zo8pd<7F2*_RBNSD at Q3u$qc|!=MQ=>QrL~BTd8LtF-prAl)8JD1kk>hxP)w}b(a)-w
zf5~SX>i~;l<X~9grRQm86PsTL^nnu?M%Sc%#`6nLo<V{?n2`^)^E$Guh;j@?f;uzu
z)2RVTO7Q at 2+|lGqCvO~HKY`JTj=|Gt+jjWP^(Iot!u&4OHcA-QBp$cDt!F`eCU4C<
z6Y}qQ$;!0BE0_LZQ5&SXd%N<OUM;Sgf3qR1x?HN%7dg$*Jh_4arW_71Xq&R5=s#?Q
z(bv~A$iVB9j-ks(v4;?OeL~WYe&ln%j at F>@8Iamiq-84<2mcn4?mLCGfTW`u)Vw3A
zF(WLxmtT;CceVcn3E5sMuoJflI+7F7N7)3m`=EbXTt at B%)<g#SSiMMcT+clSe at Ssb
zZ&s^#=MpYi<4`8qr9Ws at go%E05nLM2+^^M-?oV at L?0LZbhl!aK{Fx&`W{4JQpdK5s
zoPswX>fAz`gMjt<H>mYA>A at i-+EE&8#yta>dG}H%>pJUj4TV>1Ekl+3#?p-?)!N~~
zFJis1-oYdJo(e9fs1+svFb(sre at RTT`ZZWLv~4-cB4D3is_gXa`!<e!I?LsSqu(jv
z at v{54r6f#w85S$>^X&qVr>{M|3tEGRk);P9mOVl{((zm@)Bste*D6NkJeXokhmdW?
zPbVH(TnK=h=7?b%wO@?l<nOBX<sWLuj|G`KiApVdy%-dw0uX$GII%fUf3E&{c^GzV
z^<0f`863_E#j}YK4kFaw(>ziDNK4PX;j=ymV3JXy0dJh<mHw!8&~fafA=E%MOW>3W
zpl7no!=b;y1ef!D&;=}jeFmjLZ3d}~{F@&_-&BQ_b{dqZo$66{!Lp#J&@S&QDd2(r
z!`oyn52lR-14f>N5CZC3e-rJBLdkuu-<Ru$&wnVQm-BlQ%(^YEsqVg1`U*r?(wMA@
zSir-WB~c?<>&&8kw3xh=8>6QRFfnx7?~;YC%PWr9+w9DU8slul>ly$AeLDyaeJV3V
z8g}zh=l9!j43(w3IeY8N5oSEzu4QxCN=+c=%mEoV{5=hM-#QZUf1Cn$t1Fi55$sXQ
z%!y+<m3H678R$+32M at P+zi_i62hRHfx_>d(!k_dvsF^-zfn{cPPQ`y=O>2ffEWkz@
z#BrjVipL7k_ at ovke$3o at CLt*W$sT$Nsp(5TW-XfpM*ZPD=`>Q?1BLyo?HCPsxrpWj
z#D|;^9Y_#+Wpa0ze=yXqHw=p%N+sDIJxOI+Pu{=bo!lLx==-;`Auy#IyaaDb1a%6V
zc)7;>ai6s+8BH`w1G>W(^p?$}e|PzQVcyk2%AoXMJY1PaIfTc#(S@#lwaY<Dfnv67
z4r9|DM*%}@x)Hmx3`J-Al@|-pAlY!vrAa;7hfhb8pOw{Ae|pl88!q!v88O&*bvKlT
z8hHCmm)Vj!_NN)!j1SrAdi!p}?OavgI;LK-LvtUbat=%K*c6 at Wn1R|GRVC0!|8q3Q
zK~^#qHVZ?`P4PvF*-6{?O`ds$hyS?B_$9zA9VTEt1NUxI8?li9H0m|l0Nh&2hv0MA
z97|QUeo_Klf20#6#B0^W)-uYh5)!(EuNMz9_Hj;6L4_S1O=L5NvaRM6<SyIjaT$9P
zoG_S<(`n4#BsP)GbVv3x(5ht8SG}<F$oPSWm$Pa(i2l4a)2MbyMOWo|YUer}&y*d&
z0N(!6PY01l-g0iaUR^9f->pb~Tnhdeqztn=YpeZTf7+l{5}so0lbgCoE{{o!{2G$E
zV6=`TZgp3a&NzNM>hS4u-e@?zhd4}%xgx^ZuNGhu4^b!2M{4{L$G$0Ru%gPW&@XR8
zzl~yLOat8Ec&hUrcG{<h14B6e&oRK~i0Nj+No1j9Na&LY2CW+)bjEe3L%^pVb_=|f
zQ4W{`e}uSCj><ME9WA3MbiV{DL^%6%c5i#aDfLb9IA+m#1-Sp#xn`aGSclI}p at D5Y
zwn0tDwQRPCG%}2NX%71h2<f-%!5T?vxTi9MbX)p&k2t2!jt}y?q9 at 3#yyNZ?w7Gdq
zk_SY+i<qS=R+7wNQ<_p=TEDDohxhNd62XX{f0<llY0Vx;vx+Kp!?isQETl4!9ur^s
z1ae&;u)EhTj5IrXUF))Ir1v29U6MB!39(^n3+wGKY8FBMDb4NItEU%WI4DBJ;lY7Z
zxgww(f5u710j~fELMSXeX5=J^JpPn`iQ_4lovla^LZGjjhI9-yGA+C>SQAR80h2-E
ze{9^mB)t)D<$M at wJ;AZ#N;U$m4;cxefA#s at FY<_i9xi?xjs6U^Y~%jieV+A;rT4iT
z$`d%f$!OnqQpllS!~Q&)rLN>&KM~gD{ZC3ejFCcf_y#q$(e6y|-FoV0$rpFUJalKX
zgB7nGZ(1Ei$69nBIUuO<Td%xmC?isEe^BV(2~dCZtu-jFosP<tFT at H#Y61YuX+{bw
z+C;`s+IDB at YFkxph4h~ui3|kfUXC09$6M4wLF)=B#z-B4U1Yypj419_QPlj#7V#~G
zmB<UINq1(%4$cw%zey9fk~Rs(b<XLH+y?oN1#pZYHITH_#o%46B4F3$i3htAe?VVA
zULqffDh54cAIo?)?h1vuU~+&l40WF`WKOsR at 9-y;n6;bofh#F@?rJKB(2D%4WGP^v
zc)O)&y%&;+5+-12IpBk5nX9Lb!Gz`9-eHW*)(g^3W#bSlp;zg<^4i2e|K;-$GIY^^
zKk5wZ=>Y(P3~3iHVRn;>!x+ULe}m9LWs^-`B)r?2YBzs at BsT+R{|lG#^ukHbGgz$P
z^=A#u&w-3xjmTe5A at j?oYmeQ}%<f6d>dODCLxt)LXE$Uk4x%C11je@}pJ<)bFoT3>
z#~3RAb_T{I#U8qoDF$MSITxBE*Ho<XAerkQnRYxO8xa)P&~FLaSE2V!f54@|3H|c7
zqxccEgGtsSrXa=4^i7M-)p3ZZVC?3_8`C2>%mBj3Tlud>VL5Fr?*(`p at 0wxW6=?aF
zDf<jILVw<6i0E!qdFoajHowy7;TCIA5=^Z7QShF|w~&a{c2ap~S!QqC5q*Z{<rc#D
zdz|X{i=^wX1`ynw;)3x{e=6!1CX_~kpJ{ts4Gc3-T_m4bjYOcfHp7fz`3W!7py1O<
zkAm&_`wr2gozi}oQ-FmdzFlxJ2#v6S`+hK!W(<YUn7IS1Id52}3N58?<`<s6euy)<
z8_PVgYK+(Lfw0i3vSk*x_cm~r-0Moi!xqTB4=}Ev!iA9fV1o%he?XgYUiWi}{B;H|
z9Kj4cJg9^|`WTk*!T0Aehws>t3sC6J0Iymo+dWZv_h;VwvA-`UyCw>!m<Ho&Heh%s
z_f(x1l{Hedeh2n-Q>%lVJIt$omyvYiaxYR~Ixu7c6tkOf!jOa#F=k%P$zjUKjjA3E
z{!eH-$bjyqXp|kye;B=v`Jj2<CsEXIS2#d2=4KRoSfatGm2FqMPXKu=iCp0=R?O{f
z$oyfbkXtT|_%RgYtAZQ!MgaWn%*=&e5LslejXCuxSV^`^lS5K0Qabyx>&FrH=M0c-
zCy;?DV at qRVsAi-LvalCSQWifN=>falJLn*Nv_%!LJ2Owsf3$@SMTKkHA=0_d{*xD<
z!R-QLQ-4kJe`iQKKeOu3{KpiWFtcMgN5t9Yd2A8*;4zpP2MVT}YAt+bjZyIgY-%Dr
zhvd6EM at 9+rGVe7S)W8|>sXA}kvt|vah|N7}=$u^xN&eIjhv{^R=8mq18kq(;8VX8O
zgp{3e+S?D}e>rewA#f_QfvcW$j6`X|`K?X>itG~Z6i()~=T8B^=!aTHr_Ts&Lu_^I
z=6MC5L+{fO1_)Fy_$E6R*1uW~1xiAuQhpZc!$OL*ta<8gEk at 43)ytO#G|0LdMBk;=
zh84E5`yvJUJd8YqYx)b==H;6JFg!YMLt;i}>ZNt(fAB=G0%GAJe%-w?w)J)hbg~_o
zCEjFZ91j}`h0>MlCN)k7`9$$6yayCrVjku|_Y}jouq4;>_DdrZy=Lc{7NCBI?L!i_
z`H*WRuNxrZN>b=>QD;x?$OO|QeGN>B5F?h})VYJw_<N36YT#O}v%u|@wTLHQ6HHRG
zT??qkf4CEigr9uiw2PMs+%-jlN1_!K!%16EnSP#+P)#JqPf at jELT!jp=d|6TZ(+a<
zl4l`=_9U_CDu4I<djmTOAc}9%`5z-|@YU1ED*lb(4q6#_0Nfqn)&6d9C!O*bHv53x
zbJwty<~Th4JGDK#&udSqXz(kpUT5gl(L?E|e`XHxqdea$fesTC4fV at PMtT%v8xqg8
z1d>nLp%zn!`o`U$W!xa%u|?rJf#DFd#Xhs=s2YSQAic$Kj^SOky~STo;VY`)NF{{>
zL%!Fz8#mt3!c_1vDgmWK8?ehra at +8tX#2_j&=|E2jOtB1<Nlt#&C1-fFr?{dKDtw7
zf3ynU=dY|Nwcy`~M)_qh9hM at TmqW~$u;EC!A_ at t)Z=Plq7kIfjwd+nQ(3u~|Ct)}C
zo5mogL98*xd+8+%b~AtJz8v`<O(Y1CX7w$40+%qCzB=Gb{4H=DR?b5=lCDI{GCj at I
zD5c!VmRgut{L)yH(=~rDly4OZh^jN*f95uRFDcKLpgChJ7nHEplZ8e+9$ngZwE}MG
z6Xf%z6kI7X<UT-~rY4}!d!TeM!-8ki_AN}$22bKGn(QH+&laX4$)<2oI=S|FM(%gU
z9PJnf5?6R<oOr#>4y9Ksm%VE3Ikl7i8 at ZfiE;N-P$9P{n_RGv~vL(UthM~mPe{oyh
zK8ByzmD*o?iBV$aM&3TKX-t96`jKzB{g<hZ+kRj9 at aUrg>ykKR+~muplXg!*OW^c%
zkl;sIvRjpQ-m}c?16L7SqE1;&)Mh3^H$!!GJCdqN!kg|3bM_rdJ at +!0S>TQIHHT at e
zx2(P*DztfOBf!#e`sgCcKbg<>fAw<<*$+{HdS3=mcfY0vwww$`HIOxBr~-|0DZ~($
z#33kX at V+IAl2*S9JHMF at hBMg;IU4_7TW0});}El%J_t$tBDlpdM7Ap(tctqaOx9ux
zYUwEq!~S*GvBsaz_2eoD{WFsF;m()c=sJO_Z95%=kwdHIhp=+(K%3a*e_Wv=b{%&K
zydRcuLQli(k3c)n4dTXTn9mJ8RcP7{>rARGc9zTf{s}(QAy^?Z9}P4qmIB?fwH!tN
z83o^t*vCqwtYYsUV|~)d?U1_C?Ut1zpV!)J4w`hC_{1J_tXV4n=w59nf-g_D#IGb<
zN4<<oy}-oZ#OZ8K2M>VEf7PaEzS~H+H(!Y#+V$DB!=yq~nvh=p+$Y(Awy+PZ#8c0z
zZlhJjgD$@#69ul${(ITdHwg+HWJrH-0O(pYxzu7jBCY1YLXs(l1{p{PM%a^lS)X?e
z&#MfkOY4*_yk at T{G6oPn$1Nr4>u|^mUEu8sr)0u)>8}g-3a=F3e}q;FOk}_ewRCjE
zGtcF at GOP=FrguUdlz0j at HD!rC;4r_O$8{Tm6%hetAw4oJ4P3C_si!}qthtT$a`2(C
zV;_PqwKwf at 7-NkQMw~J(N$|bVa$;q#n`w|Ye;2Dd0GK`6O&~e{t&N%*`1P}m*=Ck&
zC`zcqbpL%t3*D1wf7>u{#CMg#?23p(G~_c`e|E|idu#bhxiqCvumk61vtPvt>FpH#
z=T#4gTXQKJQS;Bb%IS;<BA!t$V6BJ+e`i{LlpviRehA{8pM9Zda)pzgSS8K`7s;yO
zcOb2d1^6BD*LJ671XIDj%`*@?rQO&k825U(hCwP1Acn?Re{m>QS~es(QLUE`iKWGi
zhE);uykB~eU6vJ;=q7Oa^d8FrcwD8ab~rg{Z8lj&qEA^<zlDK{bV6A2aD`n>+q7<P
zOMtLgVkAT)EE~cNyztaYub{n|f2o#$`qp{5$Fs%1!YI^x>zBk<syU!+$FDXlj&xeA
zOBvy2R)*%xf1s3>l19?3b<N&>7qzv;();}+3&`BK!aC%C1lW^da8u=jzDwbUUvT3?
z&djqV0P3;b{lp0^(|L=8dYb!FdW_volI?AUk26A6Fw&?H6d7cJ>`1`^>(mt&JIjoq
zCS8xlM}B{#Uy;$+73X>AkTqG*yL1lcz5~=q7R|qEe`53Ye{#ZxT#pZ8v#2RLlUGF~
z6Q~!8iO{A<vX)85g3r#<=4zYbJ!#^yUh{rZ8YE?>bMI`}O}zVr*=vQHLtQJ==eWe#
z54h<=l3gB?1H?mk6xrLcEB89iX1GiqNdoQ#^ku3+%}<zN242w4W136AAzRU_C_xdy
z&><Y3e at R;wj=_34^OYG(9?c?Elk$69q-~nHn1(XX*0<UL*IWNNdWfZ+IUI2qfoK6q
zkJTXfz!<?nRenVGI6$(5x^nUo7H148%-_CBJI1tIv=9`0Pjm+vbpbz$l$)x`f?)7G
zpYnFrbbV82r7Ff%+}3FaPT380LBE3^mA0e1e{d~&An$yy#*HR9>b(toeJpk-Ko05E
zed3cO>nn!I-(jNGI8R7K3)bDwxx;V=B19IW9+DZ5 at WYod<veo5_#1{7DQ}Wo at nJ^j
zJhTB8iW5UoQ#4yXd at ozjNtkEONdab@ujdCTS8ZRAYZOaijs4w*q;Z<qvW2O;0!2&s
zf6EO5BX9hgSYYt=tzEYa4;_<>V8hUB_uXXZ?CFyU>GWVLXd;yd+izW2GU0{j#gAPt
zzdgUb6Y>0>feb;8dgoIf56Q}?3+_py!HI1?4Y#k*w)o8UCba3UxOBh_jCbrn)1lHm
za}Bt%M-LfTYGDTH00Th$zno9^s`5{7DX!LqN`IHL_Az^;nLV1OUrGjPzkg`UI_#8q
zNT8J>*~-=y`a{6`O|4u;5(_Bm=O~;h=M{Gy;dyguAtQG%MpF<rK(W+MD16v5Zl@<}
z&_9yE$VWid{2+;2?Ez!u>f7>-HR<;_EBGZCaBUys?~Wnl>8<JsBNRl$<sAX094|0c
zeSfIaYku9m^TL6iGjB1t!b3C+upqAyDuW736}86}ExmJdcH`HM)72Xm7*%Fyo8Af-
z`^=wU=Whkulq|m<oVzFh-qpsidpn|Ry!dHoPIc&JH~J*;0Kx)3^16JFxzCt|uy1yA
z7axC&WHJl1Usn2vSxSjvG*uYBTOrNS7k^p<2Bc&~u695SwTMa6NaPuW4%?jPuAZR;
zH8BCT86IcC62A_51lfN(ot9<(3T;Jw`eXr{hBsOOI?IqYo*JDhW7P90dMI6p9x~O+
zzo^;RrYd}KlYY%;gkpOpOXyy>yE^5B<0*(*^kI!VxxEz0^9ra;m$3DksMtmBiGP^~
zu)q%NLWDkh(Gg_rX9j9=cv{RL3exJLd_uw%eJmN{J|Q)*E`XjJLd|H6e`OeM;JzgQ
zDNvVnrlC)#K<2vC%$oSmR|KqezkZI2TJ(PVh|qys5or0S57Krj5Y?q}HVuY+HQ=pW
zI&DxTvq~ye*MB{_)e)wtA~r&>^M5kbu}-u<-^T!d3|X_QRxNsRNnEafr$TC@#WitX
z_xp!GFOo;8-|wt`e6x6JfpMlCH`+p`;*kymbo1{X)kY~bt0EMs$~mZz4&us%9yhRs
zK~;-Tb$&D=4ikg6|BOl?gCF}z0ldN)#ws<@l3ctxk#+RZD?+<3ZN#|ho`3W0(u^N!
z_oAE<>_47m*={WI7?fqm#olJx$LS()D?S0-w>{B~GKu+0(lkI0Bq=lxg&oL|;3($9
zx-`pM9n9Iep+^8fP&(Kr?ugoA%*Yf<K(I at XmdEVjuf(F>vQ;8^jwP4w<~|ygJeArl
z at y!6s!3pFEmHW`{wGxbDkAK|Ol5uKZw369J{5M-%io>ngY=JqordEar?-lJ88sYD8
ze57us1pXNBe-4%!7)|1YIYNvBnpSl|%>Xz_BkZ=>O~Oc+fUY&-^_f0H*M;#cHyr}A
z<0_29scJdrKmNB>Pu(vs!>zR;G+?O1p`R{+bJzv_ilQU_g_H*6KYxnwf}fnoA{(cx
zH0>dch2K1TIOJ at s23!CELAWbKEQK;js34>M7|oCu5AxxG^v7Vv>ofyyQK_0PUYLs%
zuph}4o>0uv*IZT~z^f-Be5s8zG$GM!qx2~#Xx!+jUJ3a|X8iZ~YBAKWUDu at Kn<v|B
zXn(ElY>^lgHi!cyzkh|cV%*n=Bf0M!*&4K?6>!BD<*G(Y%D6i-dqf%p;pw*7g$my>
ztoCKk$@VPISBgQMcq*|j?=D+9K-~lQ>wkG7PvxMWyBBkGEm+&)-9>+52&#!Mh}UbH
zvc?t^2O`mVIlMzmJdjH+?Zti&RXJ`~*-P1M3G?L`VF6~Lihr0H-R!Ob#qVL{L$u&1
zbP>g2H}|Q*0pNd6ZGpw^=_LdVz|p+9^yvh4c4BS{r%YhUt#YTOr&1sIge-jFm04+@
z-QuO2GS&k34f6=&;m9ItJ*sfEMc_ts*G;dW++9P>GRenQMJ(!XYdyMXJW~^3Pwe);
zaL3y{M<w$1Mt{tuZGo)_2CfY9;4U|Z=+s+=HCdj~2iCTpO6N8s38z+l4<EH48aL=y
zo{K~Q7a8D2c%%|=R#%A35`>o;&e=*>pQm_}af6OR#4eNF8j$iR;YKCmk2Aq at 6DBdP
zBnJZr7Qm=*9<JuiL0Xbd7vdQO=eMgwzJ_iCH+cpc_<x^^n8@%cEJc9?=A<X|!qU;p
z7GG?#$bQVUvKDwR%ZQR$zi&fIv;1<%#8{}u4~1sC-{Ec48+Pcc9Ot5bAY)xDm?8c>
z=NiP>01!m~a7)7nC)JODB`hhza_QgoL at oqLNM&K=iSw(Pn2HSOq#>gIf_dCR_iq&B
zd(0xDmVXTz^&=eM;8Hs8NF)a<mc~cvB7G(5gAs7!#%3bh8IDh#{y4d-jiG0~1v-L{
z72oqH^_h3SBbnc%ZrC0~KIEDDWHQQO4bWh`>84NgbJ(0Cx-13SP;%HzoVNwL6BRIQ
zXe8PU`jl&45{im at a<hDoyw3f8?P>D?-15qRT7MeFy;HpE?V2p<oUc$C3rTU at 3tDEI
z!v27v4q&=aJ;)4jVdfnr4+_<1%wa)pQqk;2ZY at tMcmS95{o6L5(khXphuo)S)EGC|
zXETL%N(^3h9?3GjX~NH`L;g!~W+aM*VHPSo2q)M%K at D_PBz%ZYc*&~r##OMaL5+1!
z+kfpcE<E~h)^9`ir#@{yr^u6?tDIjl4M#|;Tq>t%gcM)q at sGw+G)u=BxcQ9ajfzf8
zORw(o5wBKii>s_>n+SOU at EpST=%sYY2#<_<cV;;Z-bGkmyZ3tG(x<|6b%9u|h^^#d
zOwq2j89ldZG{@9hR=wgbf4P!;K}Zcc*?+M*A<i`F;<K5(9nAs)On8eyp6Yoi;6#`A
z5<(cX+Uz(uUe9P1Fe6|-V(1$J(xrirKiUUxoo=~7G_{gz1ilP;mSTUhN<8N~)|cvN
zH&ip5LVIkayUB-|2$PFiSp*|7J*41R$=waZ#|leg?1YU7+?SMvmp8leP>ZZ8nSVYS
zM{ZZ7hJ{fCG1+ at D!TL)EnCOx_8GOJH7jL;Qo;Z8coK(p6>l at KsYKCAQg$tIcn_yh~
zFyt at _q=%o61dSqkFcnni6ipU^K^n~dx{{kRf=mD_8<iM<k;{2qxqpcT(V0ogL1w at e
zy#q_%W+JF_JG44*n$#;2#E6s&fPa3 at CL@W0e4%(1IUZcT`^R%;e9z#=KSrE;^+*Tb
zL(@KdmCU8#DsOx~2kjrf7LxOy;@;U%)0U#-WeR#>$XB_z6JH>Xoag8IR>iVGg*~#L
zUi#T<VyNWETVLc^_4lG1?=OGezZQ#8#vgUSfJ8*wfNpQIEd*@bTTYv~Wq<Av at c3YQ
ziyVJ88tTVp5%FShoC{XLZzM-ykEc{$h7#Kt?AaIeRA%3okAgFVKM3t*q~lT%eAh3_
zLT3||`H1yo?1tm>;#XLG3VFv=S at 24+lW~0re^}chRV8 at jq`5^kdUWcV2Fhh81gJti
z1XgSZfof-Gj|oY>0(#tX<$oZ6RPw$3q&l<*AP at 0$4NO86VbM0D at mS%b^-t6<?Sh?_
z&~kIw!<%#_Oj=%n1Y5O;zNo#G!EjmYb67EMV~+<8zUT5!9*Rt>8-XBYeaio+N<FPe
z-Fdk=fqMotC+_>M3*)XO;2?J0L!<2#oJM#=WQZ}23=>5D5k-W#`G2 at YzG*Ho%`27~
zLW;C?f7ytdgV`Z9?uheM*osIIllqY^&Brksh1!{c&3|4Z at uxdgp)n_d*IzR#G*m6&
z$78n0QEV)!Afi#%e$^Br{1<74)Gyf^Iy$+Cds91NN4zh(r at CaLJB_aKk5TBFD=+in
zqE_VjmDnK);^93s$bX{bD|@p$kn7ZUL|%3CuBge2Z2$Z<;Na#fUKE}&MwU+4K-E-E
zfrrO{jdb<V4vDxW+Jpw>d`R<8C{Hg}v{5iQ3lqrqa5Y5NV~K*$fp<Xj4U(JDp^(*;
zs6?LJ(1IID%3t0RWXG4l#RY+deqE;rlv?;04zm$65WF}?AAbuGA6h}#8ux`w4~&-=
zKkeFFt+W(`qj?0%gsn#|E`nX%7v6|A6#&IDKnu_z=v;S+=wx7a-f!=tT<x<13{60&
zNi*m0qGLqegV2j?er3^^X`EPgd|_a|Vk at jTvYmg!28QonD$={Ac6V|I2GjM0%GU>Z
zyeApGN^s3f-hX$7e}Apb$UZ=Y^hEh8C<o%?oGT}U5nFJ4=mQo)=^mqD9}5kNsAR=^
z|8`?b-`5&fNXo*7zs{DUHQ=Ni!i4fwB9rU+F=rY4ml6yz(JJ68H_MP|m^=>*ypF-a
zY)=K61(T6N_C7)CDx^sd%Sb-tsVh)E1)fBJ_T4N(y?^XK6nVLHdF+3bB5(W|`a9&_
zgr}5p6$w%ivj|EN4M+|?FwxnwjbT2h_-t%V2ulGNypgu(HbL)k+rum~mvtIM!<%Kg
zM>f at jgZps=ia#iJA+vQZMAl7G*iTh)cfD3<q4^fMX~<|CdZSMU$_<9^UMmo9M+4a5
z%lt_yZGVw+Ve63ySi;PoB5lcj-XP7 at _?mNwE=^0NN=r8w^emN4q6aFP{%}Hl>>Xv~
zRjU8m9fQ^_(Q^^|X?JvH@&UlJL at MEeXuBH%^-327+23Pab(0!KR%SbaT1Ok5!~VYJ
znBzLQ$kS?h@{jn_(^0Yliiv)dp~3p^y2ZANe}CidCi&zylFwPp)8MUdHXC$~wh2XW
zaxOHN*6|;vuq`|-sv0NCuwdScte^H^QI*=C=M}dLkJ*;XvfK|c;+Q6<T9KZwqmISz
zJOaO1xTAcuOA{tXk)^K;hVSXX{X5JMsyKjcG1!{kUp1}mQ+h~N?*vD)#p!KE0A~d6
zQGX4tii#69=SWTEoydUyTrJe|9fuxI-t>-i(rrf^ZH{ZWRmc|!eQ^Qu!VtDDI0e^t
z=XYwrz048jT{*E$L at gXO7}PnQh-}AZi?;3K?jzO_W7L at WX~)a;@tFPq3%n}3$J at A_
zm*_J0ld$(99k>MrgDJMmdl=(k?emARrGLv?pCHXj`Bfd=#p<r!q8(wd__uB%WNdY7
z(GNIo?p-F;l6Oe2sr1za-W^Kl>FXiza^AU1YvEO145^{KN+1deWaZjnFK<F0?kVi*
z746H-T^y<0otwE{qBp`jDq1$BQ^p2EC)bjlK)d`ly~MJ?nK)NkT9ef7CchrE9e;V`
zEdqO241{uT3Tom_vJd&wtRUZgk&pTUMx7iB%|Z!mNx#Kg#`h%J at OVA3qy~YbKx9<y
zD51tC8^5ubRWjs0p9wp{nN<0 at 2RJ#-`SL_&Si~1%@EM%BhwdYs*;ba-tO(*g9zNaI
zGAEtDaS`sw>4-KLtpfv6N}Gajv413>b*{mx=?Mm?DSY6N7X8UwMETw%Ox)uXx=@Bz
zgR`WnF=OJ(>4$He+~<JJO0i_#FE}9TuzeiEe}@bEe at 7|EEbRx2l_l}=aRrgyeP;zf
z<VbLKJy9%u{S{DZGwWXJWWwS#KmN!Q2n#%#LE1#DTHrUn|F#-qUnC;faep!nx*ijM
z7$zmSkV;deyhmCpP_c^Ym4c1oVq9MrreIO2`iytKt$#(|ak2FyzyR|@f}E>GU0s~O
zlt^jI8{||B5jS|5?615Yw2OzDQYx?GiaEtWLK|lt$(jQHW^d*YzIzeHRh>K-lCwi+
zZARC)4L`u15SMw#dVK<x)PEGYcm^EW|BNfxIrigrIAzh#{H;D=v>CAog#GYNl4|T9
zP_AIvHK(@a3nyzUtF6=(fNuYcbXe=&rfg-BA}pfJkTzwu3tUhfQewT#X12<eKy`3i
z#;PH9VVHZ*jQa^1op|F=I>C%b>!x%V7f|AF8nb9I%cemM$)hm`sDF^7_fi++AMF`t
zC-gODUiI#iWB at 5KI+~~ngUTrje$(-;B`lWzxYYl0+pV|95m at 75A80tVY^xmqO~8*9
zrwViHN9#0kKJ1J!#l6n%`IIo{BpzIz7|eRGb-o>P_TNrjH??SQYsAintrFH8yOPHp
zt2?cXt?`vyH3Ttsv46uuwicnI=Od-knzU!fKd@=dQtce&i8Kb5n;k0+*e_`mO8$v>
z{P89$$~q%rME~K>LW at ye!Tj{TM4jRnU6$fCi;G3qA<ZDl{st7z^%B~g&2@`U9R%yS
zgU<VhW^As1A~DVtIRIYVRLn`Eb(=<TnYrK-N>D&frk&@v at qZ>CqVM%}mVc&^5jC_=
z9H!{b{gQCC1lbJT)zeDeC at X*_ at H<06rY*mrrU$&<21;`R3wUnh3<_ljTKe8;bt)97
znneFV=hkck5cJ=%)@lU!aY{*B4$?BM<)~^`gtY()s$(2=iQ%6ja2Iq8z0bmt at +7?9
z4Q~>uP at fjcg@2NE|0u^br`P`jRWNK7lkMCLp1k6xr#2_Q4NP-r&LPn-zhw6NlQ9rh
zzg;CVc!#J<6Duqmi3(qblXgfosC!mq9oEdOIbxB5e<1ONE&nRvi*9K at Nl?emVIA?o
z!?g)dH-M6(Go+9ZRVu-$j|zDk7YQHRG-P%_B|XBooPYY}?!y!*$-55BoEm%Mdt3%a
zVQ^S5LY`T(GoG|q{pz<1xm1*jz(EMX-j7^w`PaaEk?hu<Ln#QgbQ)z(L49?;H=csr
zsbFFD570Q?aGU6qmu2>Oq5dvFoi%j^=4#zmP<q%7G4+b(d1Svbo+Rh4MTM1mQ7j at U
z-MXbPd4G``Tf0RP_9B5p(Ow0Emu3|hgCpc>OaL=`z-z-$Byrz+4=Q;%y*QPRgbuD3
zpfc*Idqf+x{>txgmN#UH`JAKv9Y3$|?@2#*?kXE=<pByMk|soaZhe93e-huewE;zw
zMW90F5+rqJ6wMVszC$EYKXHacKu6j+=jgu|dVlwzKy{Pgu_P<Z=h|1+8UeikCHKaY
zu=Yp*ttf9qfihe{8^{D2Sas~7t|37l&Apd^C2HmBrAB(9XpsH*G(R;yYeVl5chO!`
z3G(wp-ywh_5!8)73le?y%BRCQ)LE?yYyR7j-#`O6Idlz!vz7(G81)Z|*txZ!PWdiX
z34iUpOkn at z_S*6s{Xf9c{6YeZqZrL!jsy=xN|bZ||FIYM^1-;A24w at _f2S|uiw+JU
z;Lm=WXs`UMQO3c;?dUV6yySdd_A1EDS7#^vW0T{4zJo~D31ISgSos)Tb-zzsp>~nn
z)Z>!M`zd^<;1>dO2=gQ=>$<P>sz#d^AAjsS<(s#W3lMD81&cr(W#pGzjw=lqPqq}f
z;;M?FMS+Z{RXl^>A%(dp$V>Z}uoc!$PFYmmxMK#O1mGE%j&lRHPp=^t1^#1xgOADY
zG>2WgcXTlr#Jqu%i7)T}A1GYvhLDW`pPWk=BN}E#1>LC{lO{O-+i5iYfGB$9Lw|H(
zBhi901oEFUL;&-+igYs}?62RwsGTNb at _)@`oE at x)Rg_<XhT_rKb0}?|GN6#(oK*%l
z+lfe27?VZPKWnRS=&#CJ*V51`!?Yx&WxwXB`yspJlDHHd6xth(AJLHb!+r_6>*_%F
z_~}_5Q`2gc60L-kJ^gHEY7#Lp1%C+-hMf_I-`gelwYMz$j5VlsFmOCH*CQ53OV at Y0
z^3-Hms4?ke7dEG(iK$?hVOXI(t_KlH?k<pvJTpq;(%4<b at 9cy+UyWuE<E*P3?NY-E
z%Foa6S-xQM^Tp_=oD3BOfOe`OMRhs-dGxk$AABv-^}%WQ1E>b~qAbItIDZuG07kTd
z5P_AnQx?Dijsm(D8=?(}ko=KP2RtP_btotN7t at +n_sZ<R*Li`BNLunyU(%IL9?lW0
zYP{LvZ_K0T;^_xxo6^?P)8`b6R^_~|DItwAgaw+x)hde2A at O!ctDV9E^)8W0S|dZ&
z?d{!Z1 at _?y5RFQP9Dn1}j(?$rq(o<txam0wp$&X^566HN3OJ2ptP6jA_pok?YNvap
z8jvp5foh%$9+nSM6NpNI&3C1-YE|_X-UH_9+3vSr=fHGBc^)JGsL*aHLycqcD%7Q}
z4a)?cQmusQy2$ApKCFt7m)AE&4P4c^n<HWn0x$8lMolPVix>wiUw`a8V^ji8P!>2Y
z`aqu at 3W%w>Nb3i3^M7a2Q$$8iy?XA<j19e()gs*9z1BoZ<V8@(NG?y2GT)mDsFTZN
zakA1{-Yhik0UhF>Yd#3yIs8ZM6xg3$&@mXLUq94=I|&|vN8fRa<K*X)$vL+xcDQ7G
z=?pE<=ug(H(@+rdOn-M2-8bDwW5T+BWe;LD`+O6riqfe;o^2^(n>0WWq0sUM$ciVS
z=tP3hy&J%Jx5L*~Z#}F_fEYo-&0FAo?V|0mKBfoJ*UYWw8nKyNT;V6YU10UvSzV{z
zd~DB->>hM*3M at m@!F^+Rrx`b?zlbud8A^Gb9x=V}Hb#nDdVhiS<jr>KCRaLMJ-IwD
zf>x3h*<r}vXIk`u(XNtNlf3Im&H8e`M3tHHqZ{Z?FD&%&6Q58>l<y<uN2BWN+&2Ir
zu}!aIg1;cAZq30x%ONj^iV|$D0Un*FbiwX(a`jklB7pk!Oy#q77 at Q22s3ycV>`-(f
zz2aGGW3)AOU4L}0ocyQvtLBihf4C-whX23kFk5Ed^y4ef?5RR<kxCmBG9|#y9~n=W
zgoO0_i|%6Qin?r#XYyJF<|l?T0OY#CV<Q((qz{lr?5;cN5_fmIhot>RwxUF#GwcHc
zz=?exVSB$bO?|N7;_3x=&1E2`!Fp~QT3=*C^Mn&X8h;lgVxxZHIv)J{HHaD!+jU{Z
z2TX0~=M<kV*Qp0)jnF at E?i)i&4$--6k<;WYDbKSD7Do1!6W*5 at kgs+WjLv1eurf+B
za$8L`EH|7LguBO{^5a>5jZJ=i^VGZj1x9x(TrW&w;brrGLAyaQ;;ikK^nZ{pC2A|*
zh{>a`<bS?_%J0}mau$yrnr<S-r8Grs4_~WAM71U24pCyM-OuY~dT$e3gTp|HZR5$i
ze1a_wb0(dk$9t%aS=DaL-nUb<TCj6=llJx2h5bsqyeXqP#e>X8*Ph>EVhyyBW|<pS
zd;%Ig2R4a^i_mV8tDG<+mfw8!mq2OE;M46euz#FOL;i#rLl;^G^U^|X3fL<CbCzGu
zZ8k>%>wFNn_^-gZ_A?W-f~C;5yM_0Cs{~HFPI9FZ_VZFP{u(XCh6;C#5_MoJa>?Rv
zTGwv*8AT=0<IT<r7$kHgOQAa{2(F+&Bleb*UCsByHLI_&z#{vdf*9YWaF4K5F2N*&
zgnzM2VFOIuWIttG!a8T;V8U*&1 at 1@b78lD&Iz<W_M3(!{Cnm)E!hnlV`~nl)z;*H_
zLO!BLD;!uGBjT(R+J_Uy+1?;|{}f{YBZMtaS5hi}{&@GONbwt0f{2l<3ymJ`j`iP9
zXN_FOx-Vly{79e_sIU~}i>hFxR}1?v9)B+~I!Y%{^^ys(1#B!j$$6)j8^cMymgTuj
z(en0?jvW-czcK1rpArIPK!0)wKdA~R1Bt34v&Ohii{^>QFw!9o&zw!v{dD?$-s%dQ
z;6b%w20A1TYcny}Rw#PL!YjoEUgYo&s=-73dr at 9`>}7Pt_x#G~1up at gA=>D(&VPdE
z8*G^u7=|u%uZjHjK3U6y at ovq=%6P_GC?+ZH8S5+Olqh{FLbu!aSK~?_4f&bJUGL_K
z$W6jKVFF9|YYq_BIr)yil~!oM(Vuvu48+dXfYX-nMhr#5*lv7iPX1U-EBxM8as<SZ
zu(x;L9uL4EA-M|{fwH>;Xr!53Z-2o%ux%z};Qkx(2n`|~*Y&yK<VwJu<z!&wM at gSx
z5bl+CD1rC_2P%uEnO3)nu7^{~6O(?9XM~?0+}s3JPA)MzLl`&purkxT@<LYjLQr1h
za|PBaSk41TqcJgVl$n`%eD1bn{XI`cY^-U0h7 at Rc7zRxgYk>=$VR^Ex^nct0y^Gm0
zQnLa2&QL5c2ucBfBP(w2;lXaPsQ7`-o@&H7yqVIPFBfd at ro-XRUxK~bqc$SBZ?h{Y
z$%ox-LY^?B4#DZ(>rtU#D&DJ(E_yBy<1wddt!Uhrqg#YEPk>dODgD*_ZhZ#!&HrpW
z`!|E2FmD?Wzx-2Fxzf_x^nbkg9 at X+;PHTOGow~u2|0--l(yJ$<mm)2L&&xgW5>QiN
z5;~_x==RvP3F?E~{dUKr2c1uAK;0QIkGT(^+~5oB=e8UY^a+#|xKIl&V6rmr?YOwc
z{yF|sTV`L{u})w`1VVG)7inAFM-t=v8I|hUD$l#8EP3Xfcy8wXlz)+t|A%sfiNo*S
zU6x>QGCJ*WmC-9i#$_^i(jP@@e(ugju_1iCnmZfc9^3c1r07FJF#EBg^9+B+M+Nyi
z6%Ec{57oT!egv-Du?7sbU~mCR>3O8gRHB}BTspgKGt6cEY1fp}F%6M8;>ahSCaXY`
zC)Hy#WY(ctkZN>bEq at _GscT4vw0E`Kw*8ZploD2|;!SG|145b|)`IKz{Y3^>Uo$<@
zT^-q?BGcq52-JLqvN+5tiABb2-lyjWKig5K#gE1+Hb0BGv(T7&#4IEg0bdI at IOL;8
z(EAFQgY)4(CH__LB50~cOpQ^ni8oh^v3hAQApC6#oS+G1mVY{R6(-dN+g44)&+lZB
ztxY6s1sAG>Q_JDWu}z(BWl2}YSd-N$z(qp*K)vdflpOpU?BhnKJMWLM1pLm>1pw6B
z9D1%rnB*J-6 at ZW-0GKWs_5XZ*9UzX!`9J?NwpCyp$j*eK at G7-#j<`Bk;@@dp?!Y8)
zliSLwsJpCTlYe9%d-9x-J;`YXA_Vy?5>_74aKE8;rzNM>lcFGytO}BawonwUwJl<+
zxqMiXJ){TPTF|168>+O4uhpfc8J)w#3b3t~a()_o-39iiiuo62%XzH2?%EK>xEA~J
zECOxwCAtUw)10 at s@w}o(568h2ufCxPN9p#0DWxN!xPN)vuV&`HdN<g2TPk>&-RC5<
ze-^9OpG$uOYp99`uZ1NIq8K%ZrSjSuhAZ|8gooWNj^{D*OU^mN3&=v7FKS>aJ5GMD
zgBP_B>%MHYBXyxkyeMd4Dj8bzcJJ}vlt?77j`4gkT~wJ6s at _PUuk<)8<o(LFjZl0K
z&8iAx$$tTkxjLjYGEbesESs4e)!MgwbJ(9q0#09;&o}`AVKc_!jt0gsW6V_mI`x4$
z<M2JvZL4h!vGXRxUtV?k*-*r1OvI`%ph{+%L<~hrxV!oP&Iq9MWm9>&L0YJc+v9uV
zz-KDj!ao}&&|$u93T&l<z)_f&gJw!EMV7?v?SJPuP37*b3kKC;aYH$VA-B);B^Hy>
z3#|*gj#O4pIMsX>wQ<qZ=2PRx4fhVFUAtDtpfsdh%G%_#KOz*wQA1J{Tk+SB at eP?!
z<FCXLtnK+W`Qw?&*(LS1h0{-%`((h}jjvPaKDEfWQMeXlXIlFG>;er)Kp!@f21Ukx
zQh)o#Y>*ODbP`vwJ{lt7Khik!y}ym-vFFOxMow5>CB`?A`aynAmE4c!(<M-E)u4Ei
zysQGg?pDeeJ at 9Ut9o3sUixLV9h@<*D4puZI*(KezPx=5)Q|O`qP6TcNP-fsuNVRG*
zkhRc8IZWV`p(Bxz=(0EWmo<?vpZ9DF`F{h at e@f1pg4ek*j7avdNbq6Pm`}D+{UBke
zaG at Mso0Pr&Kd>pN_ at -wOcB+fE^nCDyr{~#malGHWfLITK1qE=i2$xbtlZVXT!|^wy
z^>C{qfWT`akG!~>AOCr7ui{j+9VXnehy>K8DpCd?Ij)iQ#o`n}B!MFQ4XiHtz<&&A
zy*T+{y9J{86~;|3KbZ5GRj4M(ja-5Ik*Xur{0TAELs7l;vkhTJwc;Jgd6SNmU{IDk
zG#)QFw2;x at J<$irY8efPYHPfbt>F=R%Yd%rQJCNRw at NQSkEU@T6b4s8cgSRhwK89z
zrp-c(?`t=j at Br2>iX)tWn$7ezpMQpq{4VzHRPUtscX0-hNUS1pfX3g*vAG<3EiyB+
z^KLZ3NYaEvk*%arok<52ctlCt`*8LXA6{qJS&`M}&mbK*KdqGz{*jrUfE0yxV+ at v<
zy-2(zzzJME)Qz=EFt&bQz7i)7ntvcrRR`L)T|!P;eF1{o@*$@2O=DdUFn^(PlW!&w
zYyT_ at zMw{d)*N)p0xIH86PvA~8&T0r7)`wavY;!KYsHaZ?B1wWA^2z_cF(uBdouQn
zI!<fvaCKIu7?vsA!9xV=o*&^!bqfeJo)lpnF~HXQI<Xc0PL0xzDm=8E=$g#w1i(#x
z=I6m2;bkWRgb+HxL)HcH at _!w*FS_F%APwV}f0+HR)d71k4)NF7AhjdB2W~@qzkpsI
z{Za=Vbe~#=-MW>1(U_WzoL&6YaIQXz7qF$F)R&%h$*dMk at ocqYvt(bi)wMb(<9Pfq
zgIAg}u9~*=<K^-A3$Gki at 2ia1Od<{YD1)Hb<`~Yg*t$mrhgrMq4u38Y35BOqc?_1$
zXMEQ}HO`7ldxGt*|5TR3UAD&&V;*?z?r6O*E!zpQ7)mkce2rJ?j at c*v`K0P at HNqLz
z>~vJcBE|^AI=5!f at HbGJEHA=+v6TI##=E)0*HHeHonjkgi=VQ{ncRoUflEVfltTFa
zc*t|sx%~q0Z=Z)OLVx##5P%3-v0EtRJ2?=rcE7ROJGaZ})zHH|8<m)tGtAn4Vsuwt
z>wI!pNjuEkVK=P5344uy<GiGFC?>hjBab#lrps1g?QZUW8KZ0%a612HrsK&{g~j24
z&`MJ}YL6#k#P`&S9pZ+?F624N?F_k6K$b`VTUMX?Ot=>VlYjQ7mbXXZgYUQq)U2=-
z5RZ2)$RX?nq2BkE{=V)}0N-imh8TgWNg(`%f$q9}6~S^*?k<s-wAm~Nl7+n~f`99-
zrKJ?QAlJ<v2H=SLT$~G~JK#QoC at ie;0>VyG3*&Qgc`wk=E))2`s~8Q)B?80Mhm@^Q
zS>xaB??Mt6M}NsM7)5(M^s<9Tw8fIylaJhLz(~d74AjZGCg6+wR%xk~=O3D$dPxDu
z^0HpEzA=mfz8QZ!tf^hz;B+swhvYAWr$2L&RC*WALRN%+J$<7;D+7c(*&LLuq`n>&
zQk!7Sg?jTZ&^mz+U(NIr@>SZuyfs;G01i>W2oom^0e=t+P?6f^4nxBH%zR5<$dy30
z4W`ltF&B^qYx=mO#5;#RZ7IaM8&aA6?xwL=P;WAWkK#slW^h|{_yKUl5-ymE5hJLU
zR+j^{iH}WG;H$$$Ll=3#UJ9>i0Ncm;Y5OD+Z$kNSDClK%`5-+(E2c6#_fR?~`g}gm
z`eD(qUw>$T>@Boaszk)l4_a}ei1>?EuIXH3n?-=#Fl7PVhUy`J+D2eH{$o31tlkeH
zSDd8`mcj0p1{3xkNJ{hGppjiU-y7tv#8|P1A*aqJG?x&7WbYVUq$l8K<o6U=Py12C
zGOz`FHxyyPQ%H{f`^^X`-hFKvX$HAaCt!7r&VLj>PUfw8hz`MXUg&{K#vUbA$R1W<
ziQ5Hx0=~YWKbFO(?o(h{yKX`6TTktQo~NIb!Xugki=Rr#ZuMvw_bU4oK|AfJO78qO
zyk98}DjIf at GzkUlooKvj7cKM@liZWlq6Fo4JiA!jr at T>AACtO4P#y^&Ib=UY5L3sR
zw0{*BT?MOk@|KkM2+z%_qjWl`{lpU_Q{M5zY}`ucb*8_H;aYMpIIZ{d?J8=wA~`*4
z=>9CH7_FAu<D`58`x^LyZ>tBuDbn`myhAxtC;M>lBxH|ZXVb at C7H;gj9Tc95v3XuN
z_)|%P(-Fx26`a(V;{@oWN?uN)mZsy%-G8n~H>PCR43vVa5>sifv3QA{G)iHjPR_Zb
zU!Bg~fOqidUAME62Ze0t;uHTYXU}ac at EyeH@&Wym%VV|?<j8;jA($7Wd;-62>L;f0
zFKa^ZeHYggAyt3v$<>uHqkbfiR0&m-q`94{)t*rRuzcIcXVTFDo}pyXk6Y6Nwtpv`
zz|P_A2329v)r~QB6k`wpBDu-XRnEthlM%Fostc$$@Y+Ke8ahb$b5cc41c4cJf{mje
zV4eyidqW^N^DKwHo^W?Vm^0vC({{HcPL89!_&k3T_q)1#Rbd&y)+u;y#WtbL#_`O=
z{|=1GmAc#s27{rKbBF at wDST0o(0`m$q2geSI-olUELOy&6MWX%1m4+lgYBiJa;3K|
z=xM;ouyO at MsZ-T+XsCl@R0DnBwJL`ruWsUvZa;rbmc_eryfr$oWeQ7s95ls`Qtd)^
zY1VYq`OnG*G1THwBnhdi6#I|zldejp8kPY0wZNgZ;AGNN2anb63&EO_KYvWM09Jd1
zI0pu#hCi2l%6w>1;P;0KPdvBypnhDVzk`cc0%LN4=E`c3QsVFHOohj2$@BF?so`Gu
zTL#)C)?o1E^v*PL6b$sR(KZ6RNYRy5Yt68b8o9RG<v6;w;YQ*RuFZ~t+cPn|o>o&}
znR|Z(lDErsrQ&3aiB5KGyMO4%ks~7`%AfX4yWkUY0g(~F#T}5|GBgvI3IGxrWr_tE
z%{D$aUY58dNjrWjVOhw?k!G*fa9;h`qHVYPeq_2>!Z^7T!(%hmBO at 7!6HTVlv`)jh
z(>%x#uRMIg59=T|Xw&Y1LX-$$*<~H<e6$U_6Sj%KLnzBRrK6C+Gk+r^dC5_UZ1H*h
zFs#htE(`xH(pqzlwoDV!qGdFBP$aopK-a$J%_3iV<0G>?K>-ID910J?-RPt|>H<mc
z1lc22#+isuRV911pK=7M#Kc^w4p!i`#fq%Q=$d%cy49DS9(G1FZ+X+Zb!QntdwC5r
znJ_vjkaX)QJOTUihJSo20~Sv=YhHX%ENz%5RH>YR;Wx}sh8gEfZQs|lff}E=$F{^#
z4aSGf+#ar3b-A==9kx_!L0uzhOHdEqGz)y=Oq&hOg9QzrFjk1&4_%YWN&8S8cLJ2$
z{*#h8|4jhoiFU$41PqP%v59e-8~zI~J88^6+V->*jUK)gC4apxwPO+%hm_~rNC}bR
zYq#B1Q--t;hq0|DIc|sX%NX%BuLSvpxOAaFtinX~8510-+#8DyM#BTLA00_PdreJ9
zan3~huxGf1?+j;Pn;NBcvc}entrPxZ2mZoMxuG@)6o(RXO(l3x(I)%t!2WgbmA45z
zH7r(GZJzB8wSS+WOHY#Sh9*2Y0c at ggQGp~-k_olU?b#uWA(w$<6%*d{@w0RGv8C1$
zez^pou&(;{bqfJKHMc|$!h>Is(i9g>6W>4LufT@?=TY^@cXaPl+^VvPVg-B_kbY#>
z!se2HpeoWM4Kzx}A=1m;rtr+}=wFSF)FXVJSb#RMn}19CU4p)IP(VFbdH66iVGzsN
z7x+7_oiY|jr_|;HV~o-)KYDWe;%+>oQKT6)&Vs>1!1yixrOrs_0l*H5MNEDwZuS(N
zquhgPp&Q^M>s0|b8)HpZCxwS!1J>NXG{Uw4+BM3)j540?!OwJzuZ9+yo6|yH)Rm2(
zx at gn=Vt>{B-&39?Z0v9 at qdb7B1#%-)BfuDT#l&E|9Ph$>m+pIC_}Obl!D*>Ao*#EY
zhFTz3C5<iIH+w at +Kr(>L9RnKLupW9)!?l9^uZMQ5gP$~?9!cCI&70+%1Sg|lh(&SM
z=3$u!8Ec8_)&8{Ow42!iKikR6 at mGvZ&%a0JUVr)kF9FTq9^O3dG{jbV;+0Lmu9R{;
z?QYps%pvf|BpPL)@I=ROuI+f13)~feRjoOU!nt+9Km~j{aZ2u7KRcU^u>J^Q^3iV0
zOP?SdCpvC at i?vlyL`3(*eQ}k6 at F?=UX#;WE0K at y|CL%NtevUIIDW7$D0X|}1)y7J8
zBY)<4q`DMq;E^B*dM@|qm5{Zv*J#+o+1Bcu3ek-045~AENZGxbm)x!8^+-2Xh(exG
zL|+s|xvE5 at wHVUxsyO4Ez`Xi1Ok5U<kai0$1Yny7b`uH<(9pW>H>6>k)BJfk>wPFT
z(D2C->tqdhfwO06vJNair!i-%uA4uyM1SRtuTm|B at vY~YK&EgGvK(-?+NSkL;}?bb
z*t(#Xp>4!6 at aZph!zs2Pgo}mMWrDnj!Ai3$w+WT1kGRo&Ax5!aWiZsR(|_8PH-8En
z_*RPmvqc&GP<U=2KVW<Up+GeD)uSyiJDb&EWAg}OU#e#3GUpdow4&SYC$a at yKY#F(
zXged6G0>)?Gb)@B_Q|@lTyva898z+-i5&}sv&wlo3=q?Z at MKj3xR5hL;`U_+IRl;>
ztM9E2al{Jux6p&SyX0u44s)JcCKcDI>}1$Hkkb}<FIXCCfPt7^FsOfky%HiDbja&?
znHNu)*fSJSk@!z>8&;m4(Pv9b5r29zMVEFv!n8%W5#2IN;f11<lZi~fl>bT;pkUVq
z^yJ|9kjJc+1iATH!G>v*1bn@~{9mQ)`@;WuU*(ys&KkbMD86Cgrc^eZVslF&Td(@S
zXCXLKM_uQNd+<1LHl#xg1xHzzrDk^KA*;n_!87`>?yL6$y4LFyYb%2kn15^9RA5%e
zvPhGPn6Q!n{!dslLQsF#C$Uh&C79V(#hTs#H at z7YH)&8q^>r7}VQqr&uPrBrLD&ED
zXb$_1{|NBu#%Hp~OM3e#@;1h8hKr({^w14Ak#=V1_ecvec+LCfft5jgi+&uFS@=ig
z!Cj2oH`uqmG|J73pMqsW;(ummY!90$#~*b}Ie>0^SVS<}QhB4~FId-@{+1e5ejNYX
z`y8qIziAHQYU9Tztc*EU{M!WjnWqL66GnC;u#7Xr2<mwl(IEC^=}rTAS`)ZxQsh~1
zdmTdeKm4J{F&vW at uCV++9l^nAUX$NPoYUF-9ZfwR)bI5R%*8LP_<wvmd1$VHPEQ^+
z@(%PARBdHE>eVEj&!%KZhfub#6v<naRW-`T8CDByZ5n%4yXSaIpo{rYMqdEn*5tE_
zzu#I>Y%lH<Ht+~nU;abaJI2C!g)Srd(VD=(X2AX<f~yT+Zvt>srQJW3vQpwHCV-gi
zc4q-|(8acc<Vck~wSQqZDROI^ol`^Wc7N5u(L9GAhNRu;fq9Hqi-cXtgYfML$w%wb
zc5dO$V~o7RyoVWvX~3*XUY*Q_s1{Tc7eR=X#XU*n9Rnv1hmc3wT1&(VkOxmN?9_iA
z%e!)VysscRT(ma&$}M;7BJl+CJvzd0-HeP5hry0PO|N=chJTN^*eXvX!XDei2#7dk
zOm#)B_Fk=#B0JCqb!e;TtO~4}x(#>v$2GWaGCK!$b^VHUe7!+>J5*t}2ixjEoZ)Vv
z<X}l*7A$BcDxdm;Wn7@@KKU=mT}^T_AiZ}vWw6_TRtJ<8B{mp)%mX~`95F%+w`FTL
zJkVtYt9Z5O;eR&HMO8xdK(tMGO==*h7|P_MN)*Dwm9G#RMrMNCf&l^62=?nansV+J
zJFf=VJoJ-Vph>b`*-+mpw#3UkhyM&zf`$nk#_2(N*YdL)hNCX;Y%+Y*_uU0zrdNDW
zDdEz+E{}eqkrOTCNE%ndQ!~^&x}^K`)K&kSdD*ck^M8_hV1c+vR&mriY{G_ohiV6c
z-&Ml=n&J!g at PfLivAM-9mhwl@g&^&)nw=@^JmJ%AhYq_6X0j&LwV$o&+WJEdXj1C$
zd0WT at S3Sw8v`7l!BVqynIf<J)DrubY-n+d(APi`4Xc1>@r&*IGT;&*<wJJNlwznZ;
znply`Gk;^J9gbIBHoRM<5oS>{JY~eYlsb$6Mp(p1rf**b`o%rGR814l*<-22)0rG}
z1H;QoG5$9HAZXQ*Mai#=80J<vR>~dlOEV9F7*DjMM3ZMmS&2R8UlXIdvxR&sS#E>F
zhcafc&a|pxbtTOztN5ct%Gj4qV?M<)k%$`ptbeTYNGu+6gMm%z<($wqfbHZ<%R%Es
zUsUQmZeDI5nqRlBk|I1f9Vd8 at h2O=8ZwSVy%V&St>QcJxiOPYSaEV)%&5$-#Yxg|x
zt0aQoHpck0O)QB{{I>H2t01uDtTlMe<#ap8oMbD~GHa}~nkG7bIx}ZKmTrc6X97zh
zY=6!=>1$NKYl2L|LZu~aQwERzi(t-4OR<}r?9{wyUEE)U0d(lpA*MWFLy=RK?^)=`
z^FF$5JA}bGaOxVt0p)@T(VsFCmq4;5(OIc{(~k_^e4Wz)a+;FjRuF0V!sCSs at b_Kn
zMRXB1nDC)y2jPu+6SZNokM9`EK4sWKYJY=+!G#^h*~T%R#{wRbTd2iAPOYHH*nNsJ
zAV5?L)?FCKA~kE;4c-q>oJI^LNNt$UDZ4<<Et;VuyxD4oN*V$(@CW&DmQi6^Em8dM
z_c)Y)TlLo=#r&^#V;<~G at d)>$qXaS&46X4TJQ4eKBr#(rwIN1_1-vN<l9c$Z+<%8E
zxd#ovC|(%8hSwMPo8N{S$NV<M+GSDA$6A%p|5 at Vwxmz2ezn>HV;O%;aIKVRae}2+D
zxB*k{L`zU#v_4CtyFWYT6ae_aylp=D{^Qn&MGZJIyQOANf*e~LiVY{-k<T0=+jply
z3rp16t(tBJ*f74ySESe$(DdBc*MGKVE&ZQCYC<AZdt>A>*P`d;wA$)Gx3Nh_5cOfT
zTDz$yqT`UX+THO^y-*5F`Ub`6 at s#XN>S&QPh=cW<g=TgW7WWI-DZ^<TEW|Fv-#Xjh
zLSiHUz47+J{*kj0s%==EQFt<^`u^l+1sl3f?tip)?ejOI?xho4<<7~Cu73(GO$rF;
zt;?9&d8{wC$V)hYbK7$bXwrHVst?Pv1TuUDngju<Ga9?R2jz_Sa`nqScx^ggx!YqT
zi<7P at 4Bckpwu3)IUbJgU5j;zH3FMr^Sk>qc?yy$T&m+qh55UdUloAT1YTi_&!0GW3
z7Hic_>h1}jXi1fzSr2U#7Jmx{cOz73BCG@#q;5RjZ54gO+Xg)N3<<fr at I(EZ&EaHA
zy_V%4$n^6vVABjr<K(Wt%!3Y7{{Di<-XX;-7V#3TKn2^sq%@zylZVt|B@##iTTh&H
zw-=M=CJQDDKaDM-jx1y!MNXz7Oi102H)U<;ujJjnVaIa}c#OPBcz at g6XG+V@lrl`s
zbbw?T24$$|wxqT5w?pRfHsgQ6m=z~HHG_N#TSeNV3qH4W|MI4H-;GM>!d%Xq?0~^8
z8<oBR3zUqNL`PdBHvGkLKz#-Sw#&e%yo?F%GjkNh5IdgX at lNW-W`8){15nU=b_FZg
z2wG7N(>2NQXrUdK?0>&T!6HyxSP|#$=#|ngL_k$cERdh7<il=JIPv7!Qv*+xt?{Y4
z{J51$yS(rFl#wl;$=8F)7|^E<TV at W9*GMu&d4xQ;htPDe<cx<T%l4k+!^GDKY|;Mz
zz+{0G9aHy0H2LCmGq-jVU at FteheQ|`V}^98T9{IZ#xo7D+<z?HzA<?4W>n+cr;}e|
zIEFH$W$XBGcHnB^F|66<jU>8;o<8Y7->?|SsOenZGYc6-gMv7ukPz14+wU3XA4T0x
zbJuhXVn1jIjJE~6j2TZU#}340eht~OL$~?#H5SUWs at GbDM~P$<%*|dfVX==sLdOx>
z4V6>>J*<0pynj*ASZ#dtTr>)PB)CZ6qh<A$tzz|{dLf<%D&D!Ozo>u8%ZgOBT1j{4
zK|3|44HN71O<d?ru5=S8HeX3<pW)?$5vuZc^vDdhtioD?tD-Pis_m&t*DRRdm;Opy
zRP%w$9Q^dAGyd5h1#lf at d1L<PAG8e_u{;<_=7>CNT7S#kt&4^f!b6d3$(@y8IZCT|
zxqp=E9984K+SK~z2GJp66X>nofQCrd!h*<RaH@`%`zeAPPiRB4*K!;ua~8FG0)5Ai
zrX=#V=9J#He#Q*I7|;s_RRKaCCZ~yyagf!J9;DFu+p^W!(VKbO%xM^#dU(GsFbZvI
z--IA9zkm8ngZ=%Hp%{QKZti3M(&eG$5)+^_VLh#n6IkJ29I$-6AQ$-OL)*aO$JHk;
z_%o=T_TS at hci@N^qTC%0C1+r#Mh~o2;W9E;Y!F`aWQ5v2-<#<C+RP<dLnN>*n)c0t
zbclN?<v9F+Au1vJ)jE>Q#QmAIM%jj&PjG}DWPf-36$>sS at 51Ml>FTBZrDUkGv_59b
zS1zHyBcM|kjSZqJp_Rw2Y#^t&)kRuwA`- at zzZETiO6yHR%nXh$D(TMqt<TURYEgzS
z{jyOx1!1uD@%F-0IT=g{$>HCnuNI8eDalAkLIqp%?wv!Ml(O4CkE?O~6+PY_CfZcQ
z^?zr5PJ185aUoCPjgF4<n4K^%?uB4+XcQ_pCN`$;<j<GE<ni*<mn5j|bDCt2*cfjc
zTmr#PuEW=XzJt^geUhnd!U11cEE~jB*1mf}!CF<+ at -!uUa#mDJ{C2yXotJmE^F!d)
zVg1$<I_E8zRQkxJj`uwI)k;t-UkR_ZaerF at xd;b;mM8-VQ1I%xF<L{qdlztw$teI}
z)a<d;u>C{!Ro?3>7R>>^=?)}(M}qPt=*w#R)c*LOP=ltb<6(o=D*cjiSHj{%pjz`i
z_ at G(rdUipiGCb~PRc3IalB;{S*=Ab%cy283R=D2E90AHUWOS at GpXBHZt?W7zkbmxe
z-m}tT<9Eaa=WL&F1tG1MHt*bdLY9owje-GAI`WFoOll<Fp8`wExKUs~6`}l1YT~|I
zjE{cPm0bax$LKtmaclIgTC2E|pjvT`^Cis+uZMg-vh3?!EdUQ)vp5AIruloDpW-IQ
zS282$aKlI&RNTVTr$|i?Esw@;a(@GeWzw-p$k*i<tW&#3=_`)1jA!X9Oa0RczDE6q
z?S2g_jx)2LOsVrYC`P<YsXuVI#%84j1=V`W at XIU;AuQzM9=~4xH1rX6O<<#_UG{K7
ztyufHVl<f<_aYfCH1Y7tw~d&j8;<c*dG%}$<G}=O{ZJ*p*2GhfmK5UmCx1*=-JY;L
zL15vx1<p{`qG2!#B^2_T+gB^fiqvJ^Ip08)-!xcYBL52|NJzP%;c at 2YN_+F{cZEd6
zivlMzsNyDw|1Y<F*rm#&wi^>5hca{(>F-~!YoZWi{+nss)@9xokofMKHUmj=*sZzM
z{1hYgc<w!*AV~@9!GarEG=Co;WiH at -`hEr0u}fM-=y|k8?|bwsNFdG2xYXx at g+faM
z#;HNZV%CO3Oy0m;Y487)+8xfx3kFy>pBU5rfVOGLL`c9HIiNm?8*DOR0FGr{?j at Br
z$rrP^w^ueZ+>mBq4Ec|(#O{n7agle<;z!$)a(DT%<@!DfP(9z|kbiqW%ukLHz+LUs
zx3bka(J2edhOUTu=uTTC2>%;arc!X+mG>blZc|s}YdQH7Cflu{gI~G#zimp%QqW#;
zAhcpAAiT36MDic(F|%?aTRsAEq#}-`5FMgO at Ral6wV%V7s`P?l3P89c#kF!!2Un%x
zSUR_3I;q77x$BYiyMOQ&30T0bh>cZbA99KGqTCNZ^R!SBl$jMn3iexHA!#;CID%?9
z-T<x(92>2d{>XFJ1F3ca(Y1n`59NE%fU?>EL|`*O&$3(fBqQwyhxe61&QLy(F{O-Y
ziXzksDeEQT;c!oG*17`HDgN9DFH~yi4kQxU+o|{w;FOezgn#aj=yr5HHvq)0^ptz(
z5+H?t_^4)?Bd346XT41JC?(#wv|)1YxmjipY&}J7ex7ub?y-9l$#PMLM9R^s2RY$B
zpwSyoo(5LN+pi9?#jegQ(Un6O=dscB%B%sFknD9RXei_7?}#ckR-E-N>zzC7T~gvW
z`r!|v+&S|TjepG4hVNhUwDFO<!|nL0|3dunx~xE4rB?1z%VMUFH>y6M6;vZT4nF`;
z#Sc!Y&~xz#nEC;4$;0Jw@{Hik1zzL3YhmIs55p`pS5H}My%}y{&t9RI<iFCUsbLkv
zb+_)<$LM}AR8lWiddi;MBe#Gwis}PX00%($zuue`c?C at tI2?b0(<x6*62omRg$-q*
zo6vQGUsdc%!~e+bL>7c%(7G3q6sLfj$?1j^dvPLF$Dy$G|3CQ#sp9?(>GQG%D!Be7
zHWb#>5_EwVO_*J2{)*4Uq2emF0mVfb-3g7abrHHIu>o`E8#1S=krBrRRQ6HuEdZau
z at CJ5Qykn{faE5=8$hnf%Z6L*=lFm~(Ci^T~P)iIds^q*>0Y2-f$H-ST7i$)pcBo1G
z4q5$ZkVScH;LwlchTd<JT5^pdX?VTu7PLUQ&*9+tM~sxsmU9znYo(Lb3T6q}EXNZH
z{SO~KpPdyLfgljd!2|F}b4pVd7~9m6W$LS2)qo-nARB+5?kzk@))tZ>E=#TNG3%WT
zb}&qs%qqEfIcsx3VR0+_5E3~dgeYP=V(}_v(s!4Y7p|;J+JwsjIoqyYh$|&L!tm!`
z^Cv25nDzmXxryj7N>HB4#7McX!~^JgXu`h;fFDIAE$PqIeTaky<qzpQ$Vh<EH!Uak
z&3z%;nE`)2X^vJE0>o#;lJ*7kmGbU4Pf=?oTRU6wt~eTD*i=Yj(9PxIv501KY#*V@
zk}Us$S6DbaCddnIxsabpq`pj+{NaSfr}b2&TzqSrPN2>%!~i{RLxzlT3`-8Sghr7I
zHn3j-orT7V`8+bzVq-J45il at Cfg1IVyxVrWct?LyG$qFcwTrT&vbR9#YRiVC?g(Jp
zPeUB at iM){XVvJ)5#*73uHoYN(bK=DkIeSxhq((oMlD>cMDPP0xAoM;R-x0ErxdjO%
z2CkG?TaCM^%0Sk9REe1;8R%O++KM-1_8i?jf}SrDWHEfRWKRl$bebDP_P^0dw;eB}
zXT^Wy at e^A5!_-1bS7rV_>$LygZ3p9CBt1#kjvn*P)UpJ-<1o?;#hHKR;&W{X;RfNY
z##f=Net>O>!I)K8H&4Z?$U)Te0CNnDZZ^c+QQi&>h|`LjFM~mhpeV5b&ygd<o=)cq
zVtc*%208i=L8lv8m{7A%?NlB6u-vFL4<vt<Jmhg0Lr%gJJ*UulnqnkU6;AaN0}a^#
z8M#mDa?<Hgcy&o?5r%z2;CSP6spo*yBpf|*I1(1pvuQHAiKBdfoA33a4ah^!C?Jpo
z4X==O*q{7x(+0*xu3gecQgpNXW~l=;4ublt2MC1W44B4Zl(CcuJoRu-HxX(2^00qC
zN$7cz3yJX$^8T*hBk77Gga5v1R~hpHVe7WJAZ&HLB%&dRdBe(T-LyOd<`p;4?WEQM
zAcGE;a7&`dJIU}O8l5l<J4U124%N7+a_nZKP&EQRB59u`tc at H@Xu0aH4lwk{{I$!R
zmaHgKw-Cox$x&_ivx93a9ZAslk~V+yQsaHXar8vh3sU`W{}^g1PLydy!ik`$JMN}`
z8VZs%s-{6 at F3zR;h7jRk=t}0+kTAyxmBd2qXwM9TMc%i9Hx8u1Y?mXasCqdUoXi1#
zo#Z#5={oewHsu*%5a<}ddCXuHJ$=Ly;e!k(MJq5#iv5&k?}E?e{{*ia&w76_o|KUG
zSN`$>$sr#+bS#VPo*XK}@5e$ZhrnR}+!A&DLjT7|l#n}X#8Ow3l}Z;%;y0Q?h7rb!
z45dAvmd*zX2dINY+A=^W#u(xZUb&mft`i?JNbF83wIVmh*^ja&vi0<l0$`+m<fv^{
zYUSIAMqRgyV}*G&a~ME{*9d=@ot`p=&o|@<@28*>llrb>DV5i|#8dxJ9B{an8zM+M
zF&{mx_&^1SKnI4_#eDNumi0Nm3f8i;c{e6(na`(+u-#)_T$=vPoJZhL)zBLp3;!Zx
zsqt1BJ-1B;#5kfrTWYzytpi5%mqk3_fZYTEcSXZ-FFYuKskk!Sc5Huh7A#{aEM<|I
zd*&pd;=Z(ICWtN26;_2M50$$y`s1egT4vf at CE6HoB}<XRK`Ow}RRrj{2*RU%4t at nd
zUArQZcUot15%yFp=-x|<2T7SWcr$#p&_8iB+<hRQ^E_Usx8XT!`pOT(3mKXvsTthu
zyGfi5|Lxu%j!=oer;vZ=#F%L>;%%C`5vf-YDLPRtiknI`ZVi>ZKp6tWEaZ}+^AE|_
zy_)BdYlTtY)Uf0 at w1^Ay=-(v+ih8~1kr!Han_AxemU|$AE%<KrobX=c*P8Td7TXYI
z+O-QVx%FVO!4LLoK4=-3u0MO{#xt?ZqnUz4j{pm<5&z!eqxXOP`(c<4$!<zUY at V~a
zMh<s(i3L(>2RI!<+&W5yeh%42w3q09L-{ige#C$*AX}lS%B=Qmq!Cb_xS|ak at c1vj
zm1!&5IN4bL=AI7r>rFBt+xQ{D2y#atzz~Dl>Yq+?saqhZVC0DJo8ykK$OMG&E%o>o
zj|JkHFTfbJQ51hv>ZlpHQo4&>2K|RneB?r7IbSu)Onq3IzHo~r7z4feG at 08C=E}Os
z^du{~Cizr5*~iT1&nz#M{EkGZZ5q|lwZyEc5Q*6k#+LlU9kT)@odi4bFLqnI4|7rI
zsT=#Yweu;!x7J)z41!b->))~pAS18zI^0xy%u(u8CU$>CVni6-K8ek75sH#p;k-{{
zG1w&uAkB-19hxnFM0Q7Hu@?^SFauhHnu4SR7fi;RR>BgQ+yzFP at D5|(k+)nVL!1CW
zaLggsXU3}BSWwY|$)hjP+6giq!**g+pccF*Tu2pz5Ynfpj)vj)m<h at zxhWCrKPunx
zM(FKMI0%0y)<fiFXkn)DC$zIaM6d4D$fwpxT5G=a##<8-0{_&0Li?qfURZf4wk&&2
zf?3v=7dYW%&J)TVO-tN+hfL}2i)nyeKS&RKnW05xUtP3VK_8Mscrj|`m;E*B4VFE)
zFmA0{K#wqj%QN=VLE^2I&|Mz#L$^+%!#yDqO1*!?+y3$vmdYlPUv2p2plPSKsP65C
zPQ>jGD{(Y0ha5EqrDVIhv@;iqF%6 at y<#i#dz-9-w*^1bZdnwYwE<AMmMybV}LOkj;
z+qC$~5wL*Rk;%u`B&Hpz4=_z93lW$6-O^i&-|H4=nh(&ovqs^c27F#$gY0xx#?au?
zPMCk5KhU1QTS+bv{8;S`Uji)=*LDSbirjjV1?5hIOH$xowVJAJ*v5K{MnuT`Jh85D
zRQeYLXJy=vmO2P!s_8fAJx|f6cb->&6+I!&Zt2>y2iGmQNdFA0d`grBXNWr=dNR(B
zZp^=x0VM6z;O*p4U+59<&UTEe3 at YdYaXWt`$_5EeZ;2?x*G`8%PTE!o7Z}<rz!mS~
zBnDkwM1Xx|!c^9DXxhDrbo3N7hamy%+q(1oY!6&$brK8IvISM!-GLoE-8KICju@)j
z%z8cS6D<&vuzyalOL0UBG6fdcukQNCVD1!)|1MsF?0&{)1R|)MJ7Wg}<4_atUJrji
zx?av_SHzjFGQw{YxO~$5w&-oSNS^yEawWWG1C_U((Sm?!Q-elzC&A4u(%NR`ZZzU!
zlKgXE3;mh_-*E8?dx5M(K{lIMCy0PX*GYf>0W8t|c?_u2#d_69Qcc6}!>QtGRKGxH
z1U~vmfHOk8i at cOA;@%wqA;TAct&4xeZ^)w7uViVQh!S#|vMy#I?@2o&RiBHJfo%Yu
zoQ@>Ye=vOhFn#sK*2ozK#%x8V7#)>+!0r`(N$|M^#%_Hw1BC=^I;=RKXQfc66(|G}
zqdn(RLA5`s<MxFv8?3<Ale`t#);;(_J`8DA?F=MKlOaiF$Mr&g!0;+tt9E~yc9=v7
zr_RY7Q`F&3)3Ltu+_xUygJwfEzBv at CHq{K(TTq1RTEHiRunjVar?p#SEh--}(7-%c
zahN=7>ZjSKty8{=s1VWcEL8ayto(DtUuN`7gZ2O|8MIihYbxnV<c{2+fsF$il)p5(
zvzvM!G`<^~y%6dDD9sepqxXL;%x{kTJQVl#24 at GZ7lNjkPGqd~Rw`%ALSCTu#1kld
zsxt7f!`Zzcov+_(rdJOk#*Q>3^HBQ1KPBMJUVDf3u)QYvg}yX1{JPz at VjBJVh7;WS
zJz~iY68$mHq3>oo3qd at D`MDd$0|FhgYv&AvtF`Mwwo#5XHHNNFIpTk<wbsv=hC|)^
zbH at yEtX8fqw+L$wJ`O|l<ZQfRbu8SRJK}B-H2mH0?FckC?P=x)?=);|t~>qbCD1th
zjjgXH($f+S4bYsSYf`AkNsGPG^|oaKkuGV`w$0>{B<r8!BZ3^~m5cx9Z-Ao9(a;Eo
z<nJ<3uR=QIkTejZm7sr(fNw9&w9w%*EbmL4{h4uegMw<NSF%MK3HeK>s#O1A;yegu
z7{K)94ecU`Ot2^vOfN74Z3EmY+A!KM>ie+o=ihit?NDCJN0%BX2*PZp_a1CxO-3V`
zucR&Li`lFtcdt?b8Xvxa8+U!ZZ7>48JDs5^03{NqOPp)pvvPlzUuY-=-~%)88iRCB
zHFOJU4wr7!9m+Y*P}UE0PkmXa6;9yt6))Dc9X%`%P26=n3bghgEbM-Y>-s at W#&rn<
ztU8&c2?M&?`>VBmn{|8*wSHD{QoIejNNHwXrJa~R^#m<FAAYJDtd5Ht3D at hBur3;4
z3X2H_{u4Ui9NT}I2hT`rb*w$I%+j_>Stu76 at Ddf97ccfAf$6C*HFqSm-tv#>3eABM
z20;P8LG!I0dMeW_|If;MzsUngCjE;US+b4C;m=<3sNz!+CGikD4=A~8(422S+dcl9
z0h33gC(LEoK{RKNugL*W5&&ET`M{|9U}qV6DMvHOPSbzUd*lGZzy05Rgl6+-safjr
z at N15ua_zNQ8?C_xnUBxY>U*=Sz$mLlpfI$zjcoCGn<2nAGuo$3pz*-8nd|#8RIJcH
zBI=_dCwv|&V=OkO`M^163LUMR*Sn=UY(x-WaVrQ)+j?Q^7unQ_k_w#dFW#2tA7E9h
zI~NdsFr<GuXk4Tl<?mTkpJJ77zfI9tOLrGfDw_0U9xftA^!LgXDa1CeCnn}cuaf=G
zk6G&}%^+n8 at 5+Fl4Op3qy?9aAd!YSK^E1sh3BCo9&VREOolAC$6j at hi1@@`;@1ncN
zauCasM|uJxqIw;(@*QdDd@}o{j&HN)b$p&OYp;JdjQ^u8X_v`~<e0=g1xVgE8E=Ic
zJ5Smt9$S;1#!fwcn(t9`%jar0lxgyM`lhBGztg{F|6$^Tu{vPJ5b%@i#x|w-OOaV1
zc)_8POeG=IznFpsZtFTo9A5O2WGVk_Im3e@)ly!MxEtf6*{($lU&iN&z+K3IGbMPN
z at Kb+mr+Tk#L$G=>wrLC`%yROd8XT*CUl2JPG2;wy1mC0J#N;hXce|BM><h3I|Lic6
zGvOjYbtQds;4Q`@!Gw+VW&iJy%ok4BExjOTe>%F8SxRgK%)wsxX`w1OUZGDssY>wO
z&@{pc0a%o69sa*FF-n(HhL?=65*0`a^Pzv-<`*4lK&J at HlpD_%z^XW16y%ECf}WMT
zQ05=(E88L#5<;5oGrp2N+1*eC6<rURAVs~BhW`m}n|GhMV&FHhF=ykjxk1rmX1+Ds
z at 2yKq@JufO>#mCbNu-Ze^8- at TX?q*==PNViU%v~ZhW*Wv=*1p at cFed!NBkzoA%1^d
zJ7S)Yzowu?<-1%%g+k_YFhU=6%P?Xa&!uk4-jd7uC#5pNgqtA(RvVr%{N#!@xAX=W
z at Ayv<CWy*cKh^akcxP299#Xwp4k@=ABbwB8y%?Z<Dt0F_KJr5OPErQCH%u}tyZ&^;
zPM-c>M~-(Zx7!6`G2V-m4{BcfA|ii%YwCnei)7l>NyGF??A65FU7`qs-LI`MH^pFc
z6{^s&zoC`uc*3h1`2bS?g4y(vr!#5aT69=wR6Y&t0^U{DK;WodJ<#F+$8AR5m;bND
z2sxBXT_(hPN2(3XW`{=yDTT9-qOgM?64w3(haeyNxjw8uC!Se7QH=Tr&Om>ybfBCt
zuvQ551hmi|Ql?!reLi8g?Iw~V!-EG{4$_8cZ45bIcuy<wS?gT{xVIWODrcUJE*rSF
zeT(!gouUOr%gXM-TcC1+1O_=*S?y26+==2U9e`$PD^X$mIFBu)ulBXPu<Un(uNM&4
zS3CN(7s@^<E(v4>eIXiviu!+uoIzZjx_*sm5v&UhxL^FUq}W6!zA~9K?2UHX&b}3-
zemp_(gLTB8vNEE^kDfgb1Abpvzbmss6DSb|ezc0%8tl1*XJ@{~weyql0A%{IT*1L9
zTK}J|_>&($sN;vAorCK!7gGMB(#RI^TOlTrfow`QlWkG{V7Uw&naO{W%V25~pESaI
zZfY`iIPyDV_(8HXiae0%{ShgIr-+vsBc2#JxxKfOrazETu*qcnqr|j at _=Q!-29GDL
zDunKR?2K{U`T9sAXl_Y^wmF&)NWF~Zc->oxVSr=p-M=^O1aQB3(?C@*H5GY1HP{1W
zv)BFR6iW~i$7{W?V@`hnaqDwogOVVfKX^=XkSyYH1!Mrsw&=)IqA8?`>eztUBPjia
zZ=5wxPO`c?tfMpz<x+$nd~p$@T2$g~dq^{84DS2*A7hKFI&^qz-aw&{x3lFygzoHF
z&UuPigjnwTPLz1w5aA9Vui#IvYwkpBu=d&d>$Sgr;pr+v%Lae1vq~mBMXYX*6|If2
zi&Pv;wc}lvs$7f)C}AGHexOo}(|z|tj-Uv3N_P^-l>xy9t)G|Ose+(`0LiMQ0?`fz
zf;mAfWUE*`ChO_a$E^6g^PtoV+Stbrfd<+y at 5Ow^*?)Cp;0?47k3Qk14uOnEUwcdY
z7C!dipIkStMwNe=D(CUr_frSAy{MRSc*3#L>-#VgN7u0l-pX{0=8k|zaVk|?`vHJh
zXlOw7Ve|Bt;oMxG2qa;uU{?_^>{&FGErQ at fU$Ks$`lA at U=m>CD#ohGjwUTTR#&et!
z9h^wy1xwGX at 1uWwuo*{uN9CQoX!N<QnSkenLsR+0E;4^5%HsF7LRZ`dbW08vg7Bhx
zqt3E&hOH~t!u}Q)$|J!bfUW(jHt3Hm`$!>9zN_N?>>?E(mGR}Jvz5U#Jq~pUIaP1)
zWA&AlkEZAYH~YJy?7TweUKXA<Y~k?wK+DU+xPvoctFa2(+`_tWXL<(YV`wD4w`{Vh
z+ja5p7^8pDUQWxVq$Y5Z0WJ(@Ud+oMe)GNa5YQe-6`UD1XSJcnCT3WPQPw&oYYBHo
zDbJ`8D&uXyJ>eH>NtLm;uJZOG-O$;$yQh++>i+gi#f~Cj_*@Ay`N=D{^!q|w^mbpy
z*0uHRgYs{bi!$X`GpvT`gL?ahg**@t*io<G3$}k7q80SMpzIrAOejB%N8wS*?WQih
zA0m<t$W(Y=X}=uS<?w29(~SSCYtc#&QZkpY2el5QodOxi`i1FM#7ahy(P#%E>BI$J
z&*WA4Fx%>eyxK2oFpW0t_G8iwzNCrZ$mPH4c?mLLW%Lv`%Qem3=&dCL1{j+Z{b?oA
zk}7|G36&toG4O3bNd5!;_SF=TeCo8UT^3%6yBzw*h*}GG5L_HPHi6p?F?(#Z-vH)O
z4+rOpS?vta_u0%K2SZR}SZl?)rzB%t^ONqS$r|ywoA5w8q{%<zgw5H*3fvklHLQ)V
zkMhZk<Udmn0D8GfU37}mpe4HxGS&%(z1V+Ws at 4^29J2D0wftqBeTWXMP~v(K_Ppja
zoOz=meG^@Of;K3$cF|+uX$Uac%W at pv4vjnc`HD^~NdCza(?JbxVW`ExO$7<*CqL<;
z5<kzQ8xPt74fkH1FZ9m-!Hxh5&MXU}r%YkyKyB;F^T3!4|KNK2F?k6yxSdfzNPm9>
z^2p-PTE8t5wiaI}94m}s;)cph4iy*r-~L{^@BPqKdc^gbd!~;H^ziz`IL at 0b7yBqA
zZR)KRcuI~aNE-`JIvh!<pAFGcyRN5Nqt?PK_%mg-^(HByD!A&-XvP&BkhnbfL;R6r
zupd^^_%%CC!nt9H-ef$pFL1=s&IEr_5u)iy{wG{ODH)2b2KwM9ce6U3=1zf7!*?yP
z`SqWtv$b$ndk9;ux!EC#aDhZKDqC#0`O2=S`;y7a8oQ6srW8hHa+^oy?8GCl3&F^|
z1vi(zD=mkb{=_!AE at +BIG6wI^y45#%POULx$o%Fuwy-jbQrm~7#2{ByWv+jA<y~uP
z!?aCJ;<^~4Y-+mI7ZB{9n{Qlv9(YkkLNyHX46j?`9qzN#Jwg~a5c7ZP9J{LF%$#?L
z6WVeu%s^VYut4oFO407uAk4t9+oFb}{SWa<_G-@#d`KBr?AMCI|7G0?K#B7Iz at 8pu
z(UmXt>>_!&ATX_|O&4Sg<LG}(6nAqw#zv_`*&Q}xS1K}gPZdegNxQAn4=Tj at a{T*V
z-~NaDMJ6h4 at i`RNZOuY5566#o%_v-v7p9-8{p!e4;iwiO638c1p8wB!`rF+jWhLs|
z>_@*C<g#S!3x*%hY8XH-f50O93 at YY1HF}uTdKq8hTXU%hvG2}C23LOponx^~P_=OH
z>gjZ}nSLtf2Rv$kK!RmTck%n7E=luV`bPppCWx*B+DF;wu%^TmTtk+cB>FD&&p#V`
zq$Km6SR4$Ag>Y!UYRkL)6BQ7ED&&L|L;CI$zX;^vF`#tT7j|_&@rOb&^a+igTLS+<
z?UWD+c8lxW+6->RHBf)99bAqb;c7cv{rx<I&VI at V3m4;Urn+=M0IjSO3NMO>n)rwn
z15Gkdp0Fpbq6wuu!eFa0i8jh(sJuo!*!;aY7oMr6=-0aP%4yAFU0-)zq$b)dE0OOJ
zov>2qh23l8`c|1vXm=E9Hm6*{8nt!{<mv{4RA{$%bXE7)4r71q#IV`FSRkE<HKL7d
z^?N at x5cx8Nn%o^abn-h}j at Lp3QVNoagX~eG0HlCaqv<@uy1FvLf)dxZ#VN#q33Xgk
z(BnA22xAkra^afgw^Kw<)V#wPS=@>ZmpYX`c7AG1GTOVnN!}&|g04dWbG>a<nmIhX
zMMxP9bUO=6Y&(D8LgnGd<58))=yZiF?q2X+4gy+OxljeS8;)zq#PqOoP&;8snK8oM
z`;xtOBps%<FSRw~e5UofYai7-Ax)&;*Tuu`r7ta3<{?QWKXFqG5Gbt6wcEhbmx~zO
z^p`9A)O!sIx4Dlmfc#}1TfS-#IZ**%6tuC>7CzYp2MvGyi6K&O>sIM4-3T!Qe+afs
zDmin(fE1P{xX{}x^GoYpbkuQ5kV?Amj|no1XJu069+85KQ9V!!-X~Ar6HFGPa;ZeX
zj9 at Wmgyp9pzm)d!fTcsuxQ!hSHPM0W;uOPcg4b$USna%t-026{>lchW3a+<OIZLmy
zfhLy}1j&Cu_4^<-9-p-)iYkK;LqI{MG2Enew~%w6!aLkhIwYHiTFxX<xE#S>>6u$@
z_Q;fRU#fkRJR1H*5K}uFDJf-m|4_C~l_pxJqL-2Lo}d$Dl37vDSCb^-Qj^~frn#GX
zWlMnnkJEv`vFjZM)ZN$yQRj(-B6R01Ua1+1^<#fnCP`DanLkqhs|5M6VgTrcHrlNR
z^#+$}DT-V19BA5O7$IdwN=s4sjdUi=?6`1f^6b*NirLVrelKieFkKuD+ran&<$w$J
zh3DvcP|h@{gM1^lv(EzcVBT4tb}-{SecYb754`NO2QDAcnH}NZFNl3~Z~DDm<DP9@
z8RmaRlF^0nLFN>1o5p}Y&MKX}mh|r&X^%RAtFW5ycJA1U++O-1r(w(Plp=?VPQaq$
zI7o<gVCpQUHHC3yd+ZNW$)}kI4 at C<-#zfE3P+r7DG;!5!b2y!5WSjzn^{24V+-rm$
zsXGuj457B1 at Y%|os6H8^U(59 at joC-Ey}5tY?FYe6xY4sm0~|8$CuB&;-j$v27S;Oz
zH`1w=k?GBpE22GDJuhH!Sx6Rsktyjb70wQ at Iw-jYt}sg at ynSNSmpMRj1Xeky`LYTp
z%<K00N8!FMzYO at l^g$sAD71e|v~kiaf85s-ZRz%#H54n!UL<U7`7Obd87fs2ssew>
zPg_8YLwfT!_^_I4Hnh>Y+R&tL`?Nh2_BaO at _<^Bsdk_(kmy9=T!tTi+%67i-^mwx5
zVgY{2K~$@PR at T*h{Tmd^hjgsJ`iN3|(1;F_a3xCMG%b&WVk8u0gUJ~E+=Cu?C_5)+
zTU)>00o~9I3Es2n*J at Xc{1$Ly-gkeu?JI3{?V87)${tez%!O!{;4`0MTgE7>)d0~J
zuymXL31frH+HP)um)!|jVsZmcPmF+n@)bSs)Fz$XQkw$LpktYnQi)ivP>|I1Jsjo4
z*txIpPKN-&`J`2;vJ{TLcU|q#X58(1uLiHxcD%f~-Qb4mJQc+WVFY{Gu_S-+aWW5x
zc9O_$KeUB<27n{OGU5`_$Od4-8BH)uv>B{0QuXDG3{?8tT~qko!h;lcVU?2G*bA)O
z!f#7&r}%%{^P-~4-AC4rRSxI$8)tFCyMN7V_6ZR#A;B|VeYWZQ&Ly79P!t*@nt{n1
zr0?Y$rC?VqX6$HE&GMXlXrq66n>}GZ=1!9WEwBQEaavo!!JuxN8X96TSD=`%v)8Uj
zN!slONAdhf@#+Y$Eq4cMpW^6|@3FcjclLvFH-E{~+lfkV4j8%+3|E>(J!78a at A=7+
zVe|!jh3q0D!=!vM)Y8VHfAolN895!`e`e+GQ5K7~%Yn*CC|R;@<QadO^`E!HjuUq<
z9$lUVO0BtpC)oMOGNpJQETk+ni$ek&`rkDYNq-zz3#iO~D at 5HxauO{{8`r=R^Ssu!
z1UZTQk+U_#Y85_~y>VMx9lS`K&StD&AQ#%J`Y!_#VQ`EY+qlfi0!1szg**_PY1Z4v
z{;T4<99oUR%I at Mg&)$D(F#rk=@G|k~80SQBz&gTKp=1g9v<GCo&)XIBoyw%zJ4|&#
z#Xw^`LYCF+6V32U2wMUHexzCw^q2ie{Bsu*{^{&@jTbaax{mo35bN@#Znv7*M$*-$
zuE^<DAb~SGEa;Zj&kM>wewHzPTe6H)>yP3A{0VhwG$s^Lv2A})OhjYDRYx?A=;J0D
zNm$Yrj4~%!rgGdKhfs=e-`-3YFpQ+ir7lAoB+eDg47A{)fy(@*0p&s5RhauQ-y)$7
zdTsV0OL5Mwm?oJL?(S#*u{g{Gt-{5O#I5``+ao3XxH9ds$I$~*np(edX^!)I>6m2m
z^5J4m;-C!skz{|}XBZJKnqo4TTOU(zFtp&3tm=_sibzhfb>-pn95xmC98R;|P1sa^
z`^v_uD<-mSV}Pfw=q3*p at pgnW4%li3))Z+CXWZPWZcwWGUXc)A-P+#-yFd>?8MR*g
zX8{yHQAIS8t0ttTvhIBqar0}aB+REfG1KSYVvaa={R)4J$-wVX{L$})l8_O?v9GG1
zH_f3iz`-(5cD at QLJnPnQMW^uOi(1>}Mgf$+=Aqsw#x=5`!PA~`kTC62a8XBKi)nS$
z@=R63S3$+VEi9ZkBGMS<5iWyn6oxIC01OcO$hEg09hV>nhDc-?Y0Z4JtSBDuj$FDp
zK8FG5GZ23%i at jEaL+tX5#Lr?!u7Za-HXtKL#mF>8Vn|l(=fP&37}?|We_;#QBwRX9
z0(MW4SN+2t2IP#W_b1}inec%8-nr^0UcPn*NaM70<IG;HZP&zYlxo`|%VD0-`18#g
z0|}XT^pAT8Kmh4o+3Mr6yYut3aWsq~dVF-`FWY~TMRt~)oAGBBk5g&wRC9e#w!uV$
zrMm6pa_j>Zb}1(IdDl>=i&r2eb7d&mDlecU*T7WH>EP)VK9G(3pTI?pX-hVdJQI~V
zN!z>>J44X;i_4ePYJD3HIXbF-PNCQLO(`!FoDh(bhxwt`u7z-cx6xexUeqv#3jpWo
z6U2YB05l3bLqI at 0*4?WWORoU(TvRCd4^D#^TTdeXlA$nY*wCm)W1Nzn=KbRHV%%k_
zPKeW-TSWyHZ&{`p!4cNJDqwQe(;yUu55gtjaPC6!5ar5oTZVOrh;byYlK6 at VHZ^mB
z(LR$^I0Oj;2j#XW^vn7wcz22sXm2)-Ke2ynB at vMiFy^!pslPQ#wEdA^ehB-(WWPUY
zs87=u1;#KPk>QPucf{Wgf4m0#DU=#Z*v at 9cbsjGvTSKGwwMeAhFWw<BM|-bInt?Vd
z6RVV~(NE4wT_Yn3ix1VO&@Zl7spON{h17Vbc&xX?oakari|&vT4eFNt=GFrYSO0(1
z$LQ|3B}XOe4DktmO!tpttFsCV+ID*vl`1!8hLxmu51(XGHhu}64M$Pqa}XD>h-Rip
zYcA-9sEETO*f4{K;If-0{OdsI%3eR+?EQwT at 7#!%o1~r5xYiPL at 8c`%$K$_7gT(3q
z-OmE0a-ZvU>T`;7 at b_uD9{Z;Isxg1^BI^;mte2K$CbEc8-J$UPfT6)O7%-mBKF(4|
zsA47Nhm55F at MMzWMhGr)X@!j~ikt`M8}U&{AH0yYDm*>oPT4ifY*zKry!9WGeWDQU
zDyuV at c<wo~VM>jXFB0!{A2a`ptFZZkAz8A*gJs%V5P^e3`sI$zWarJNWWs;nJCZ-V
z4*u48u76ZM88bA&j4J)%Bl!RE4=Ms2S|lecD=@XsQWi21jdU7>XVx53w$cdww?Fs&
zXg8~h=Ly2*Tms^=f$UrRs4mf(6DCuq)|cxQFD89DqDk!!dQ!0VKH3tLsRha>0_Y;?
zt{Zh-Pu?<UC~sjz=d=n8Ri%H at r$>`Y^W&q#Vda3=ZlVsU;X+0AW`oY at 3|2 at NKYwr~
z8GujcPlzOD+kwqetl;{#xy97&tntEXaTuK~Lh<ulWs%e40GWs)gf*Ge7aCuWoHbi&
zd1O<|aU^S~Ml%;<N$3YcJDTurbp#AKQ;W_SVg~2%#=c at W^PXjG$hm(xm}L3b(@%Ny
z)&tz0Jo3phu34JVV+qp#tR(+kE56N(k3g>UHd9x3g>QQp$c(i6%CSN?Rmz=V@=DUA
z#^0R^v(lL9rUm=5*G>7*44fwU8kbM%#_x}K`?6gAHa)T96S$*E51;76Ru^MvppL7|
zu8f@}f&;NVU#FhltsH;tgN5cvz%q~CSNuJ+qE9mNIuf?FfUONm1Di0#W0N@@Cp#fC
zeF+oB8j?HJaURZG{0*aUYI){{xm)0>N8QT?1N<l7lXi&w4aH1o`~MpK-mErvi*%-H
zIc+6PPn=Jsce#QePo{w7$X>`>>N0#<(bGCy<lMw`G|1eoLH&PXHt#E;;0bwMm|Z`J
zsFO;m at X+RR?e$DG(7MCfl(=EI3lG!P%KFECi-SEQw>wy~!-pM&J9~qgB$A6?Dm4q<
z=O5E<WDo#*FFIcg<gpJU+Xm_g>f|AP%hV-5NsbYa9>BtU*yp&b!C&!1qbg7bF3cqg
zmlmYF2Aq%BQ2~GQnKTa*aW_d4E)gB}7ydI;daJrbdhfF+LITsp9OkDVVyHJKqSgu=
z7%TZ0rNE3n8Q4xaCrIK?-#D++*TSWm+siLRjB-IWIsp`nL=^iS1jA5!g=r^AJjte+
z%zjF3uYW=SB8tQl+3zpInASz&fovH`XU&M%&0}WZp)!B4exos*N}mQkH?Hj<^)X<~
z+#1j#F__hOANHCthUKZJ3-pfi_K6d)?P|S^vqWj7Pnv-x6{f$ocK_O|(1P$kCP*yE
z4kw?jBns|m&jM-jfXxRPZq>n{4P^j+y`rZL`Yvi8W%eKo@~4Rgx5j`QHsJj9D`Gm|
z`osoqwP1f)8y$hq-1PEh at -63h3wg$QdMAz>YGpfXR}43{MnE&gwTPLblsCn#MI!ej
zfEUg%)9LjH%7wIhSPzNstE->=%-I?DHwR4r=cBHAXUi`XVRaloKCk^UcrA<h8- at 5f
zj3w@#XXSDv<#W;g49&~jTs3d%aC<8QHCG-&>qdX>7k`5d=T5umhR)hCE-CbJ2O2WO
zmjrej%-G6!(iFb7{W+zc_MSbKBS)rYM>oBdF)}6f|6_TJ+S_CQ)+nvP(h{-n|Jl3&
zT3a03Ryuz-2b48sTzJc2uO49#kgWWN1TrYR=F9fGbU3ioY(bN%c}M_M9PfQi0GJJ*
ztPp<+HQzQ<<xMyP)4})1V-lhtR~1at7<V%EL5Au~1M&hR$nkB7F&U#>tdDO)^Z(q(
zO^b`R<Vb6zS{YH_jaE#6S+i%vi<rix$jX~^5mAPVTvz4mtF;55DlI2MxC&g4sT<yM
ztEdj`NLe|fW7#1e(SQk5<YJ;}0X~M<_Zojj%B_}a437-oBd9OLdNu>os;ibliuYY8
zb$f at 4$llyWZ__+kzy61s3WKA{yK;`=vT?Qpav(Fi0LDWMh<N0iLy^(LTwT9kE3U04
zR;cRKOVl{qp!skL;Vp`*mGe!Jq)4e?aAYs@>e=U}9<OB7+7eO^gLMlM-1<fif{1^`
zu38)-F=-ku>DzVGB8 at YHD*K#Ndrohw;n_a`Ik+jcP}fX#2{T6Vu*W|i0Z+t$MyWui
zmDVIeQ;WJBg8z|bMrGDo6PY&6fv%Sus>@}Qs__gX{!)m<C*PyW36S<aq at hC6Q%_jx
zug}CH>ObJK%$X-gavk|4Jsrk=i)nw$r$1_Gv5*Kh2ZWV|8axOmvM}bcypQJ<M9U?^
zTS1t;6#BoMQRhT=_oXRZAw-b=!j4lHR+c^8TP7Kv at cJm&F at M#bdh#a{#}*8JvrJlp
zFZ5WwNV<UE>^qLw{r7NkG599|s{B*dsdk^Yuo-W6JPN9A={0R>m9jGf6JmeoHf_zU
zIoFs^5rgn^1o)l=-x2pX(F)OW5~b!dp4E=QDM3I?(Z_|kr`D#RGp6S}$4FE(Oj2 at w
zvdp1_l09$f;-0bzcoW-z=OQq^Nfy?z3#R!47DA{%WrL^DTC$5wo*gmntSV`me#)QG
zXf!|X!vI7i*`*3u<JbJp8Yq9Jw!~_;$y4(eRcv+g(b5vIw8DcxmJQP1 at Geq$$E#1Y
zW2Ex^I}HKgB5Rbg++4DQNQx}BJhSOuK6WYz(<&xvLrr7--m4%XGfMX&-p%aZQo*;n
zgG at PUTc8;KZB~X%1fq3OfYye^mvFWe{O`8_fJ^(o)%A(#4>D{)i=TgHmn_h&GPRVd
zMo4j5nu2aJIWnO<t>X(Q$|rEuY!wcRE~g8l<W=pC1fl<=k;hs*`!3czsbK_;n5=fQ
zg^q^=0x6akkJ1Nx;Z7ql<xPGLvX!qMN|Ue?+Zb>v1l?ID-7LSFQGMt!7tM1W$O2~R
z;;P#0A41yysd6v!5|e*>X+GXNL>$y0mZ_j at LlC*zz+9=SkOBZvkjxbnqu<rMbIz!@
z=IyDRgRm at vG8o8cWj%scaP!`xbn-Q&i}fExDSpQwm2#ezV2&S_xL*`Y!ta372U)N`
z*vs7o;S)&TY4JP>|MNWUnN{0MHV`RtjiE1F<&={p<#~#SF#~@VmAsQ2SFUSUfT!D@
zGw1hEXyqdr)+{d=9x7$VVKL=XCQx3wBDfHo^ztGxB+_s2>9wV-87n?~>0qnZCymo(
z9~`!qd-x^i4cp}6#zCSzVg+j<boiDWPKDWxd4%<6e^0s&uwf$Hn-%^(2>_Td0C=g9
zM+H-E8#K6xx%_{*Sihj#g=8tA at EUL+B$XnNgTyi3D`u?+U!GNt9M<B0x;S(W+MMO<
z>{GPv$X|lmfofW$=Q=vt&yEj-fvmZ>AYIUuuSVcl4!uUsmFWQjOaXXO2aNrw+e}~N
z+kUs_D}TH_raRy<g6Y*gd$F(Lum&Osv&Ng$vLiorKGc7s(}IKgEyBklF;iNgus!A`
zN*Pl~U)2$iwQBg;4_yoY at r>`{+qW7Q6QW4YwZoo;l%K%qd?>ferX#p_R4-L}$1>&F
zxu=E1$q30OQcV}q?j5h}UxSWG7js#M80<JQtUTG!{S0w?j%X+b3z05X#C2J^hh3W1
zi_S|U+5CS-ii|=3?r5W|Uao?`9OZ=cQ~abNjd|GG at Y0e6{xXW|F2_O*xMIBZAo!#w
zN8s^2S4swtHOKr9Wh0vY5?01!UjbD9k&p4yl)MM0Lt+7DyXiO~z}xB$w@{fP4071i
zpV4~N?WDAF4#vW~dl;j<sPek7JDLx^k4it5QMrGE!f~yM11gVNR at 4tLZx#<sQ+Jlx
z30q3xWaSfdUeRG~<G9^b(qd16?(@s+XB#t3{JWy}W#cLMSfC at S;NdBi(vkM|<m}x*
z+*K!yCrm>4D<((9&nIiCWD`Kr3mqT1-Ak%LIN<<;LM%c>!JqUyGo=;CZzbOwJ+gtz
zV(WkZs5*+eY-M4bZ;t at GGYPQZOgd}mdoNnjSpE!>EWvA2%i)}>4R3V04U|{}&sF5r
zL~H`4(2=5rm6v_<oaOXRIVnX}xCDlOcUWwyW6G{ic3s46klrfPg7?j&FVOZy6+xf=
zg-JoGhn5R8(&sOLl>|<Lj(KFOs_1A1xmkZ=|9X@*0=^cQB|ogfz4UeN%NsuuZZW9o
zJs>+JuvUjwDy!xcF5_m1pnUiWztbQ|R!UUHH^KemfY1?dJVzfZh;2J6)RKGHCVRZQ
z)`3O_3iOgz<0JmT#v&ldR^hAN<2@{ZHsTAPE=MdmTAF*OC=V!Hs9OwCvIaz$mlA)}
z^DFB};I6Mf#isCd(knH|%&D>oKT6d15@&;Ay$OLt7pCsE5I*tm-RXz<-y{n=I|&ap
zyRuPpQ)A0dlq(7|*ViL{@pC8jJGcvf2NP+~%rM4}%;4gF;PP(P#V?s=5%BSZ`_?j#
ziuCS@;>C$Hqis*k1Ex*4ZQWM!QI~&yej6WSkdldMniO0n;ANpGxqHHe^WrD^x0%GJ
zSmKu{tq8yg<%TSFRoV6geQG`7h8Aa<9B?S;Nu;|F>t|{ci<rFX%-nEOt_`VB*A<V>
zP>n<z{bG~-j}$$y4s!;Z21VY-bhWt`bg at s)ck5eurQ2yBw1Mo_0naPv$UlD|=lRR@
z+Rf>m1MJ$$fqYI%9qj(O#ru7nR3_sj?vXia79?MuMnx+i*LV@;!T~UE(ltp(bKKH}
z{tO4JWh?PCbge5M<F$(G7ld*cxjf&m5+Qty%m$I3*OEl-;ot$~8KC>zs|mEFQ&>Af
zyw`n`jjrNq{4Xc^=fWcYNWFi%Qm~b%{6U?*L$ji&lxzF;Kea%dQO>V&3z|u9Vib>L
zItqKhPYDIRsdmW?V2W<}Z=_zV#wfD33HG8ZyD0%pE!it&K9_z&Cd}b&4q^a+OU`jz
zO0xl8TRK&)nmY^qO%Fvco3x@%qeMqfQKlz<GMk-ndR0jH8<3f!mN|bo)X-AaDAPG-
z#J~AmzDN&xU_K`~fA at iJ<2?AD+FEx=>|i8kZL1w!5mZq7Rbow`%D{T`ey(v9z&9jC
z3Dw9`ciRxvsmlfWz-h3Z%vjeq%nhe<?vz7CL3Rct0w|@$?7zw(DN}P~QchYDwN`bG
z(bDUuLha8wkp at yX;pl&a_N)w-HNKBD at 3-KH3qXZeP4@cTjDK=r7}_ew6eS}m9cAXj
zL_$9geNhug-zf>8pCi)?%)a*}6ge;o>ACw%cP-dWIlW8MZMJ=9CFmP)7qb=F$nG_P
zAAS&ZapvQ%UAQb(a9c)zn$7Pxxj)FuFDAe1xFlaOo1j=#SGj*LnTDRi|6E#-qTgTD
zCGgkZz_S(JrM-NNRb{wE;VTF!wAa{E7yZSgyUhyDsQ3Z47n_y#pA$W47&Y?eJw227
z0Q?Bt2UrNW8$Yi+2pT)}ID$<mIQ1ga^xXrbYsc1Q8vI<d7atkgOEqIYxZi5ZGHCqN
zr2}rbwHN)co7#UcU;Q;=jl)_Kvf{eH+lQb&OA~9N5xlizn at rERRN0n95r4n;oDbr7
z1mQ-hU%SVnIBQvGV^-2fgtbV6{(yo$#uomOqehwKMnVqcgXOm5j1n3*&3KeAO9BM(
zxXo+R_PHB;M*<-C?R6 at epMw9kdsCg2c7+6Yz;qm3ioAbeL_oXbsa|}y@|zy%<28_y
z9Z4~fVdOe)y7gBXp~!tpOl6hQst4$c-*;gHcb?hBw3wXB&-!17#c2fTi@*e*LF=<t
zrzB}}6_mL7NOWjFHdf!}I2do3VbRLh8cHS%bz8T>C at t-W2xKkMq(tBcG-E`0*wE4l
z=S8*}sx^N*a11eRu<%xpOJ0+^-=+Okm_#4*N&+}nakMeyEudzY=)AHjs6vW3hoH=h
zRl44C1Ft#DFhi*IJAt#s0yL>qr-fEGbUwT at wvAH%KBI$OB(x?BF(@m`+$%SCSZMq{
zK8Q*1lE~IA$!!=rnA<}=Ua_^^!p#ndr%k6_8N+|jJ3-#GmJVpY?SpuU?@KmNM;3~;
zCYwqiOcP`)mb=!Z0pj0KUqkS>6tju4Q(;%Q(NuXd&q&mWjQ1NZfS>HEQta)J+6tQ3
zlbdh<@&ECz$-8ct=rr_ at uLm%38{41~p6Qa;Sej9|`qnmH+1*ua**JTEP@)Z850fO!
z;=q4elXn8Qp-d*N3T+=7ieCd2ZbaKoQy3t>GJfB?s{<&$^SAl2Jd9 at N)Ykqdvk3R@
zE at ltdhQU<Sm3j$0_K*;n9NBWzC&nUKVoppmmDFm@?f7SP=;&xk-DUPlvjY{NIuEo?
zWy(sh_}9EMhkQ}@$7Wsux7T at T805ff=OuptPs)<Wi@%1K57)<WZ&=JJA&;kO(0%Gt
z&A_n2S9*pw`9HPEY9&6#j$V7Rx{ffI$yz3&Gr^7wi`K4(%wcw}G+`qtnKR3%xVJh*
z!ZOf4+<Z^?8njTdJ<bxZ4Ducv^%XN(i05POI*ftBa}y{%wg60}6a;g`<?9gNZJ~cr
z$p!n<$?C`2C5j(2#7(&}9hZo9>gwS)q$N at xJA}DYB$gboQQlp?)f4nciL?8AJ=5}4
z!yG!azGaT}My{@{uJ^r4d;iKGf?G80aBgS9k<}lIhDoZrXNk2Zcv(9X?leHO%K%<H
z5xW|wSI7hTo3g5XBLTMdOw67S)CGSTDS>tPSdFye^B(PS!)Q>h)eF-w&>xJE$Gik&
zX;Zkx{syM31%oCdlk#sfWZeviDKuj(-Xes42 at xvzJGLck|AZTjQUMLzOqs at IlgtgS
ziPb&(+wn7z#HFj&T}voR>db=!w7P9Jdi5NN5Xw%jf at hQV!8l`5qNZ0#VB3G?H&bMc
zGi=_mEX#x4qa4doe6&h!<-AUwSzFl0Z=i0u^*8Nk<aVjFiri>%E~h&-5!HA_1S_k#
z9-s at PAfsFw@PQ^aE$@aiJRbe*P3U|~Snz-b_WLzPo1KMy;S}YMaIBx1NId>+7Er&x
z$(x_Xf2a7C^8~*a$+(Fo+m3(O*L(ythM3@(odqZK$aOFKDM%UQw#^#~`&LB_2R at D2
zJrO)dU`cn6E%p$vuz!Kgh-+1QlmaVffzVWOb9*($%I9UE&X0`l4Sedwovi-V9<1bl
z1$K(&Q5^<)K;;r$MsbHs|AQ>6Ki_R*qhG(O_jSoX^hWJ=1B>A%nQ(t}BA{MOxcyX>
z1(VYCGOwU<oTwxHk^YrYiuN1Ht(BDagmRgFpzi#Uq7dmZhNzCreA!HIQn at dOqiz{v
ztH1N|GQ_eNniD6rO^55P0yVbMuu#%pdFdE1y(~)miOLdj5m4Ia2)3R--nF4!rwETA
z0~fYcEjqo%<QYHYr7nNC`ht&IS`|DtU2Y_;TWh$IJ#yJotpYM;j5Kt*Icf-5;Wf^J
zGAq3RmZ5KP$U!*9`MdTIxS{46*S!>(kWuBeB<~AVaZfy*2eK1_`p6_Tw*}E3nP8zZ
z9FIrQb(b#mh_xtBxnLMiedTSx?*0P3Vbws5$|zAn8rk;heHwrJ^<J2FN&8xPnSy!|
zGmKzo7S&v+fK7lD;*rcYH-;O10d&~rZtieuMBf<ZO|K!nhwmN*0{fe46Xl<FTiejO
z<I1IOTENGYAh9oymNV1g&WG=x$W1 at yZ6O-p(ExZDb83LnixXhzzLysFl(}(fb(N<%
z!eB-A+I4h`XIy`?h=j8YkT$Iv_0|d at p)_{_OE4i`K_`5s`>-8 at zYcaS26eEzw*#$-
z5!LY>(~JCMdrpYBre0zi<2 at 4Sf6FMttly44=PK9iZ=FIWMxyzjIbAe+;9+dhb(Z3r
z<PF2`4q50DV at RR@RC_kfBhK7#P^AR0cH at cJ5vDj(k$Ha<99VXIuC#2Og$N~q^*bUZ
z#GlbP0k(vr at L+(l*X(x`98ey|7r0xA%~|o=FJhFdMoi2~W()s{oiu4^nC$quGU0yj
zRr5&HZq;%@z5;=xc;1{)Szcm at L1j`Zr)UU>(1F>k=UevwOZ^}Bl8rb2t_)hsi>+1x
zU5)n1759HfE=+$;|9G#<xi?^+jg9D!Vdk=OSj5X-?`0WL0Xg&Z at Qo4|MW1KdZn%2j
zTpCzS5LS<WTKpRA^(<6p=MGJ_V|{76VJqpoq|gq~!^pn2s_-7Azt@(*?KHmwUWW_&
z+}tB>%pTXmg^Jt<ewI60fF*pC98&bP1FgH!0M37Q=WtsHwpj-pt8^tCiB9=&h99LR
zUPANwzYOU<Htn|(K75<-7AQHKwHoW>GfCDE_8nh$KAeEE^!Pk!$WX<HC*5`AWHg3|
zH?Ucokmr&SLk}6q80~K_XX8&Z9hV0RkFtQyeLJ>rbfN<}-lG8Uw5WSDC<6o)aUoX1
zsEmJF+{a&NES#nMuUZ#Rsio>>CBVmma!*f(Z3DGLGS<xbv+`|ytT#<X#EyfxjTN(G
z6WIt<z0lFlY~5JY1F$Q))<|0SrQ;}77MC-M3*&L&Y9XV;Q_Ceo#u4BZVDdX*7|n60
zv|Ic}>Qmz?d<}Xe4Gmh0UqEzYJ{A+NO<8}vJycnN{a(+}0WRdac0Dx`u_TW*8diIc
zkK0xLY&Mwm$weryQ`Ts0pb}|{_S|*^j6o5VwqMn>zBn0uQLYH^c_ieQ)*R9HqGhE5
z at qG1BTKOs{k<O+1?44}r9%HatAmrXROAS9Q)j(THD{IEsXPeSeNRW>=t3Bp-R!V<V
zmk`ok$b<S(HH};tP)v9Gzl;0iso##empLMl7Ooy{zQ1h+az79L6LWu77G$N)r3Wc6
z3RVHY-endpLiJQ394ay;wQ<fw<LkQa7k?wcsM!EW{anK$&LKVZJ}v2CDK>@6@#ymN
z?KGfxEb)@?I@#Aa$;bo{aRA|RtqgxLH82wda?=5Z;2y(8Ysnxgh_~;oYUU?94G$u_
zHcNE^h^^v=_={=?V@#~)a&5qIeLx*q;nLJ5l{4TeM&D}oH3#x?b|1T4Q4Uqsa$GW$
zG2loK!KO%5u9NSno9u|sFLYinb5ZQi{~!3~TE|G11EyA);8zG#PyqO`sknc8HnZb~
za3np>qfP(;0Li54q(5OE7`s8@;&2T7|2A5YS0f<NS`-;WL@*dI*rnyqsGcMaMD5w8
z6RY*#^MBs|Fgd>}J8BVV%s`}sh2(Ax3|@1%6=n3FvF!}D1798ta}Jj7)FOAQ&|sWl
z;(C9JZ(d25dosuou`z64NCSVKDfbY1)5|fUF<dy&+5)Z$0=kf{@Ph|pr|H0MaW!r|
z4`{W4Y<9!%v=V*O<~|&kRxk%A1|iXI!Bx^d{?I>4d$cy`Y#XbCetXUTy%<Y$SrmTh
z%Y-2tlv|B-S1=ycznP`t&Rj?Ma7Sn75jOSt6M4T+%8z`7d+j3*00lt$zwUW|Rd<jD
zWUe=$pgh(AUn*?a_{9s_nF at Nqqb9>h33^gcNSbm=V}0u*=nrATnOB;AD<>X9FsB+P
z(&gY|uE`fOAsz3}Q+|3MQsQa<`PpQH<a8Awv2deZ<Y?^hje?fD;ItY4)kekQ()&pN
zWjr2HWb{rD?$3FMt|c5^GM1Wu1|{toX$_Q?h69(u%5wod+`F~@&(q|}B!vlok5rT_
z?kWRwBj|S229RUE`5zpI2YHo%$gCh*mwEk*TjPmMIOjc-DjdFZSy7^xD>v-`NZ3kA
zXR4H5b5nPdoDqfTy6JmuUpXdRG%2K>92x-?$Kdfdt2?5BJ|nisW>5crcT(=cgfXlV
zAkErUOeII_oL5Vgpur&y0wlr5$3D2jAQ2#dq<Mz=0w-(aLX2XjkH5+SmlmQADxYk=
zQ_DwyZx*<@Ib0)?v?}!`4apq%RG3vBN+;1_>TLq#S~mp8T>j)|rPQ^u0kcQ=DslJh
z%Oe0D^}|?x5hDl%@wXa(S6zH-gqIU9C-4=!4XOi>24)`h;V826=ZYh)&tWr_nrzKQ
zbzqBrx*GH|f8T=yok07YsxI?$>(<g_t9`L=&+zdJzso}e3jGEVhz2t5;9towcQF_C
zfa~$NZ~L%}(eZ;TIB{Q0mzJ=2 at 7>mH#B-`yD{(>hT6W=vzp>|kFTV(W>rMPTT+BBj
zqT_E*6^TzSx at hfy;HQGOCf=IL7RME2C at ez8_@aV;q!jK?QyLtP)L9XpqYF*xaWMQw
z>;|%}lY>byPTX at Y(yYQKCHLn`fIhCFFcCD$w8a)Sckc<2+K0+F9EADO+;7T2x6zGF
zVlsn7a4Rkug27&Yt%^({E<bo~>atJi0i?)NpJ7ee&=$7fdE;0;Tlax$&LzkQ6J=Fz
zPN#r?2M6t{I*l?9p%a8HFn&0Fp`8uTms!U}MU4|Aa*kSe&JVH07I4d>i at EkAO=+>+
zcpe#VC25(9aspX#+S5DrL+|ut$DX&iMvw>|Cl#EalkOdV%-Mj$eQ^#L@%V5e)vZeh
zZxN9EJMdF$7j<C{u_gkivESzSBGi~Q`kV!w&*r-kSUF4D=7j!u_i&t9D?%cR?F&UC
zVJ8Fmj^nM!?E-v+hCGU86ChI-8|UEzz>H;#546KNb^&7_K4GqaS&V<6jZ8*5F>`Yu
z$)T_I5li!bfR9j$`-jjCE_Gc<Nze4AALoBnN+Vo5rKbdBGSklL;AbUMEiOG4f&^mX
z98Nti;2kJWQ<1XX0W~NXFHmFr+3ZF&SyfmWg1#_Wl|hyU9*gR~Ymc<%R(uVjG4*rz
zG$q_%K4N*3E9>hZEb#Hvo~PQx%A`jc7|$;-7)YLfo6FSJmu#AxfPAN8()*OiYaMpn
zsAwa2cCQ<L{}1K#xCQoc^A4ETWEIa4FrEAgDz{#EqA%^l333sUde$RL!LuwB+ZLhr
z$2~1o5Irx`TpwLY`>e>!tZS6RZr{*tRe{&EJ7OHhs2;b%hG%SNewkR@(#vl1=}RNB
z%S97^4(NPoNu&RY&!_<<f6ZjJ=6z{*7vrVQU-3X{3N#6ujC64caZ#?S-TGRVmxVEz
ztmtb0A4%WvcMI?t1yaMRKfubQbdf^N(W44bo&jU2_C at 03A^V`2P*pxn{WKW!F|ehM
zQHxFpuY0%zr+1HrH532rt&1{l#uB?kI7WnjmH!wH{ieH at 5<1UlLuk`$H&<+^#g*)P
z at -dsEZeS$&-%L)ixa0<a;+KP%Y!7jxhpkDK7+lpBff-)PNI&DI8>TSnB5Zpn=D1LJ
z1__#xj<z$pY0?Y8W7j-B^tajcI@~}$<lg{|cVlQH$(aTf>5}=>t_DQ-e%*MZp|{I_
zZ2o_6^3wc)J`%!BMcEyOrY{$^QsA%XAOb~`y|&_RwG{&dZ^*4w7W0MlIT1AY`W}vU
zyXW&)ATJRlB_hkJBQ8- at e&OFQLXdI&*GqO7UCzR(;R-~vK<btNd+0xw{>+)!Rmhg(
z+EZo}B^Taiz4mY0u`69s%o|-$;oGx+=e3bDB+set815UMz7|oks76Cm`G}3~-rPF(
zX(QgB4{iSlO0mSFNU}t&4oQNO(ZWR0hRJ~HOJhj%qzBZqdyhGmjejuf=OG-o@;h*#
z@#_WDC5M*DmT{Gf7n3tzVTe)Q6KpC<ApY7Uz$GwOiY;O6_yz`+v}CbYhU;H{t*toP
z)?R>{KjSOs<HVLNXO@<y#JgnnFW7^Nn!~Vk^?<R2naH}vhFp%_D12_axryf<m70yb
z+hK%qQ8<5I@}xbYQ>?99t4uCEMnNEthIn)6;p`ofP1jJeCRs2Y7IaGg1~ilZDg;>Y
z0JG<)Cif9q(C^q;ido1NBSR^F&RHoF=X=Fg_+E4M8geAtSY;F>6P at fo-V6G7{l5t2
z2jFv|>M63T7y_=lnI|nX$$<JJzPlW&{3_VBY%n*A24htDQUxpl-WpM!$`+!pU0aKO
zcKyO&vlnuMwz3>9^w5Z%0D<xOJlJs&-Q&@a^6wGgBTa|_bW;`Libbw}=SuyL^p at f+
z6fObL=rNSa-x|&BWPZ8dZ-|c=swskKhR9)0Acz;oNm9;-g*GRJ)>LAFGh*=_(-9gA
z>*2=uvL4z&*H!IV=CP&!5zf}tMU(kJ2u0a+4=r<nn&r9X3h+cUgu|I^jIC_5SlG|7
zw_ZKLQjTTqmDE?4>P^>wE|loV3%~QIQKfZYgW1d1(j2CLFn4wpxGx?8^uPQ^HmbqM
zk<JFE;W+S;qIkCh<Pt3FOUgVjJSv<<ms+m|F+mCt&JN$9l5AP94Up*5ssuQyg+o{g
zlWV3-SaVLyyxgp$t_CLExY~ChQ!%dDjd)2P6pFF^&SMVKrJW#ueracTEEOvSPk3y7
zVQE$E-^`fb)P7fA&%omt(!NXccL)w<MU~1m%SeogN$12ucTWFZBFQR`Q8!-(0K;2)
zGkxD4v15YLRHlOe?ye2M92 at 4&ld`{Qo)^tc)sLmUf3=1_t`0@)X0HFcJnuDz$0n}7
zf)}(ZA!RsI0;`;V+E(O59S{%5gMen&wo*DbVa4}A8}YAyB0>L_f#%5#F1&{M8!=*A
zic%FuBSm4bciLZh((4^a^|m`NpkhVTC6;jmwdWqblo|9Oy7?0k at fqcu|5`e|qrpij
z#<=39UizrCYsoC_tOilhn-oOpf~LnG&n)L29l5lPc^wpg8>l|nli4RvYZgntU5xVm
zE3^Njd{rmFLkUz~2vhyGl7NswR(S)D{`srj4Mf?uJ=>T>@ZM}MRsaH3@>^}haZ$pp
zb<S5P2{D83<fLbKd!P>_f9uap70UDaXq;U<=3vb(SSY*Ov~XVJD~cK!bWJg8d#?U5
z>epxai4|Rc%mSNect)dHuF0wHM#sw?QrsNFBunj69U9DoTIkVZ33LQ2Xx$(AA(01A
zFEE88*>ywsnF17yTbbv+*jQ%sqF0Mf9m>%5riK+UMs=vCfAF>|W5WZIi&gg-5Pw3u
z!QBsZ$Jdr!XU=2`V~KVua3v4XB{pl~mH$&<1iYhv<4ig1dKnEpx?+v18zR^60RS*H
z$H}SN$$0oNNk|DE6(7nH*l+dCl#d4(Q|S$n>4<B+0NWH0wr1Ahb&VUCfjzE3PmEd|
zCAcBWsPt?JW+Yd)d|gb;GzJH6G+Q!rp3u4d<%@YY>$5<z!_5m!2l?p4Os=~j1~S$A
z0Q2O3`&&XoFKAGw832Pbo1fYQ0}n`Q2a;+l2DxZCYS|(zA0a>9#2Qn;21HM$XUWXs
z9xY9C;<E?%0#pTkw>=58{{Q}MB$YI1OWe)E+vx*X&6+R`l(P<#qHy^^wOhgT7(?+2
zftQv$)enxwLkB2Ml9TJK|J4RuYU~iULlj4UmipKy{JL=(b&>oUf@<v->L+NYqM$Gp
z76S^m4r^)n&a<5l5$@(u`FmL3SVgsctlqS)0I(+CztWianePXZ=+r;4tTEo3XsU$!
zVr}~B#4Yr_z$YzdClPblsS96{A*5AV{qD+g^e*pT>^=EY<8U{f{*#fjU}5eT9+=U8
zZY32?Gj;!@2Ia1bognc~Cj#8|AJrX#S&%iUD9UAIIi-eNEp~eY$V1CW9E913yZ_lZ
zr2MGYY&3`1`ZAB;<aLy}DEobxFi+>=Cto3iY7opK0%?w*VQ80#maL+ at d)%{9$$K$E
zYc>CeBh?zRVVK(zuuKhPeu0QoU>^y8|89^`QMJn3`u!?_f4H;v+3t~3^7)VKzuw(}
z4_-OfqG{5^B?;+!Gn3AC-XEJ$(q&`YQbEZbD74Bgxd@)>KpR)>e$d1b1zp&w!Q{M0
zKPl3JEl{BdQ6_Zak8;3xIg`OB0Jx^}_)7So7L1n6J_5Jq6eXmg<!<7?@LS=3)5NtI
zR6_u8yuLUhEeYNXUGxN|EPAcI$Q)_<Se0rO?gZh{BViOu2tqMBM)_iwaU}L8BF9zH
zu+hLSAf~cJs!KxE7u>Gyq!do#yIN=nN(V}=Tzl9aCG&qLCS2KL;h~JlCVxIqR>z at _
z`fYFG&l=JHX2X|^S<J81-hyF&Od9j$V$FU!deCd8=6)!`0`5PzW7 at RrTEng=ltdD=
zbK$LQ{8Ex#3!~sO!8rvKVu`ZXUdHjZn8xAhr^1R{hEd1<o24%m1q2^*zn!fKEU*i%
zb_(g#tx*iDpqO#-M$GyP>P~_ at yxWbVtdaoM%wx{=$v_c>6Hmpm|0G3!agKY%4T&Np
z`o49B=J{W&H+GP~*q_lh;|!P at I7?fQt>vSS?Xfh1-5M8YeMxoUpH>yOdtQMU*yA#i
z4)YlR@)JDwhCE`4fiw<4<9P25p-HwVX$x*|i;v{kRlbSb(n%CE;|vJ5-W{d!f{sia
ziG>cNH1f}^FE3?e__3aUNW|CWCjdOm4NPQbl89n#k!@|*Z92g3h*$K-n>Np07C`td
z9B;=T*7^7bx^VSzo=t}vE~0ny)SaqD;V7pV4P%SK8v67Ob*RH$ciTXxzctom!*KL+
zcFHk=n`oM%F$BEf(<HCVGm~*um4<5arc?;Qrr?$fqDJ?D`6umvy<RjERl*}1jElDZ
z+u5FsP?)PP-Dr`XyFm&7rqk?c46tEVae(QRjT1Q{^(zAwx{H8SY<*#a9Cx$HIgBA~
zuhC0e6)P^-Ak3W-k~~a at k^qN!*1q>L{A115`+2Wy_Dp!DNpLg at BRGV0k%M-m^09jQ
zaP5in>KNFkreT|Zd7htK{pSiZs1ar`_9j)(#rkcpXGAWjfwMz`qL*aW$mSMq*bS%U
zeUYF0tZ at FK)jTS?5$61HF|J-J6W0o$<wwF_{eXge<gp9;{3}{fjmn5kO(E2rO-s@$
zu*9QQ-%P7Q3x5-!Ub!p>uw&c#|L*K{l%Y6Iz$gb5z%2}a#A1&#+ROux;WrcYcJ0Wg
zIGeQ955qs2^s-SVgik<=9JdHsvnr{LrD2Bbb?LWf04JQ94!fHtk=5zVF>EkFZH?3*
z at hz<)<rLC)0#=b0$dR8gwrFFie5ANmtcI}JTFhn2`Nzojw<SAAW~jI|EZdq<@FaAK
z1x?nV(Aw~S&&idLC!_DzymP9kc4}(rWYyP9r7K^dJ*1 at J9Yo2hc3FU5ucBuTC8|XQ
z5(Fwd2?oYN<`9LM9|n7%8L8sI*d^aKc#DD!2J4*%?GaMk(5EYl#mOKBU85b9S!t^7
z2*H9yf>srP*k{SdG%fNVT>i$>>^ZVh(khq<7;SogRbZXOH1`>+mTQPFjY0R^CB+4*
z|KO^bjW093KR*Tbm4UX(7*UlVPO(wCj{nYoJP02k9=^gjsv>F~E}+pa;V4VU=-MqW
z!V&rqIT7#K5!*#1otFz?CsCi`3Az{Fl$C%qIB5epe!;f2<fxv-K_4<n9BNiqq-htw
zAen`KI@#Gvs&(!yAnf>DDDanF8 at cOrD|&*PhbxWNwO_X9;7UlYRNP>4?>J2rWG;Ya
zak=n>=PO3x%I`I%BXZ*XDVknZziAaexPvlB=~;SG8H8d2-D#+s3q|jF*0bwd=Iu;%
zCdtTTObyn|-$Gw|=Vl&K6Pvu%kY9@*4;XlV+jVg#r1jI55ulr9xghsKrp1lXTC#Bm
zl^Ek(V_ZG3Nr>!*Q8XJm`q_zfT3f?DEvC~Vc8Qz>16T~$Hl7um%$FH^4+C at PkwWot
zB{FxE$BMoUDiwm7Q(FDKZWgxPXtj<lN{G)28<C<19v_$q7ri5YQYYq!t$T1p;Wzw$
zHMIQt3DzvafdDi+Qr{&WRB*o|O*3xwjlSHfH||GOlH_^`2n;d_++0`h8$Mx7C3-Pj
zViflk9Ix=)jNP(}+9cU`rACvF>}gX0)`}CX9Kp`5vAoqUL=OZIz-I-hlCIBV9A7M$
zmYQQg&k>dqU{`H{KK0!OW=X`9r>Loa&NU)$Si+TpS`<~t%TXhsLd!%OSJ{d>xKMxU
zj at GarEGi>Hz?P{nMUMNFys`^oNANtcr+uwBY9V0X(l}1kMFAxRU}iH%F$gHE0O8Xq
z0ew6E`9|NC%V|BztcQeVc34 at NhV;=oR{a%igaxcI00N)AA;q-USdfDQtX7(TW_|{l
z7<7r)?~5ZqGoW-YPx;lB9vZ0{(Fgh8S>u8y3A8h3qvK;CrE}7?oXTQ|v1ZckMLvzH
z*46`CGIHN$s{D)k1=lgikP|@kN+NS24 at fGlNMUqn=6|k0Ei_r&98D3M<I;Yd^?L^(
z5XY46*S(3*U|Mt!RFZ9u^HDs1(Zl*jlbR874V*M|cm8IPktQ#Gd$xpTCI+8W6-J`o
z3&!e>mnC&uve;4rq|e>ir at F?8pV6X at j&rIm40 at 9c-MA9GSYhQvG1KnYB9045B}O?J
z<4RVIFOtWf1e4YbQxqg<DcduCS$LUkzX}8;+fcpKy+Ei%Tz6e5Xuhg{PAqLt2aBta
zs&Y1xVuY8l1M%8Vh(Rt=LH?XmRDg`=S)4$ABX2Y8uDu5lUKnLJ0$3(W;zNT(Q_>aI
z$_$qRJUDlX+D&!<$`%%NopTIqN at z5D2h(d(HM~Wp+x!qRvdv!iUW_E;Pu7H1r9=c4
zjfoOK7O6R>NdJ>J;tx%KmuRr6=sjgiAPB`1>l{KoNm>l{DTldxxFjJ;5dREi#z8i_
zu^KNltZ9-w%@uH7_W7!acEh`Zb4CutHhTwpvpjL at U{g)k8&Hj{j0(EQ&)4A)3%&wE
zHNzo;l7E+H9pP+Bv7J*xyXgc0mw~iGh88HtCkd~4ge_;_(`DU%`MSaK_ at Dg*(T33z
z)2fdUNwS}G1-GheaiKLJ#r`&*DRBnsxRVF(nAk=r_-RR>12lW2$))U0l8^FYGNA3i
z_UTbR_ at x8X|CU=+T#D8qf}$E$-5Q}6VoFL2D#Lo=sXi^ogDCs>L+1J=OV(CnQtW~W
zlaE0eIea%#q2rT(qz94D=C{Q3tl#raUR&--oH033KsPi#cHUdcA}r6V{T|6DB>ZoZ
z^#!@S-AD^GWCD*yHWe&=s64rk-$!D30gBn03L<;!J%bKSREHyv5lU%TXU at I~|9l at s
zh{AKTej5D7Ya_2rQ44v;PXykqLHXgfb4gjJzN=*raf#S}dhO$TceP6S2<rx2ZpWV&
zez9NXB_G#rAhJleZMEQ=46M(aO)~`#ywPMGL(j~LZ|guzHD5_&(3;p_QnRZVp?=gt
zAP#s;g_r<w!njh7d5<Vx%}pFceJ^|MNb__k3^ge9ixZtO(pD1qgumcWqnq9!12MzV
zdTsNc6DQAqBL**JFY|f3>cNv2eaPqBI>SijuyV)F8k;c{7c9z|6c;Qc>{IvmiD{eH
zSq5#0VXXVX&?B=xpTO{9e3~bOtxPNLxS0&-wi at -<U4&bPa)~8wQRD`4)Z6FZENd}S
zKV<Go#j55-Q<nR~C(w;})mzF}WU9hO0j at Jy5+WRb50|yYuCwoINH3&XEOcCYv}UsW
z5ntWGDhB!6`J8PjfMEa<y?@&Gb2Z=AghTs;5Z~pK0*$P#H{wqaQ->*x<E~-x at 0O_Z
z`6%tNoDv41;>a+5Av^XTj9q_}E}sFOvwbrC4d|R|mWDn^h2jS|<)DFVJLL-bPY%wz
zPfFi^2p9-qKy34ES3Cd^_y(HbaWPXOA|o$|exO@~H`guyoQPb%wWT<~BWjh|_wc*p
zfT|10eoR4r3NmL4il7(LFWF!QHD|i)f*H|Ez}HTVdmHJ at WU}^iW!!3yXjPin7+ at 0;
z?Y0~T%G%Uzcc_CHx<+kKI!|eINTyk8aG=wF)+b_=tFfc6h+?s#abe+k<-KcY%iu^d
zRfF*xJTYnQy51^p9fmM<>!#{o7Xa#DkKlw6HBiuw-sllN+~Bkl?&lFf0mS-Ko6M`s
z)jOvAU5w_jStzZu*AcFPcf$xgx1Z#sWNE7!7jnRvO$`n)G_soX3V9pK<Ov8GW&tdJ
zX>EFFit*hg1>`n9<T^lvc~JWUt@%7khTN*V#rqZ#A1u7zltNcf%;s52U5^mNuM%DS
z1))le40 at -k<4eo*H8I1F<$RnXe=#)$^X`_M*4WD^HWW*#glG_=hmrbyAx6pn{}}d3
znF1~88+R*FGQK(1qlY3bKl&yYSK4lWYcs2uyc2f at 7YWmn<ij7>x;LEGI%C`x0FFgG
zoZ7jrebD$bLuD>w{)NJ^pg-QuN at +jb%(gF0C$Y}EHTPtuye*SWFd1p={|khCF2sdi
zwWzqr2JA2ok19g at z>GiXy<DP#o|msN&j6vdKo-g5hyq|YoPL2J?W?)UMXN7=*_rz3
za?#q#rhn%iAF at kwDwQZYEW^ADwkJyGdXpo3oCUpG+A#k=b&_3wVn)Yf0zNApizf^$
zX;FCsrbDv1U+>v!2H5>tscK>fgHyt*7jc%!j%!+IQNrO%NBwq&G at DxVSIl@}abJkj
z50|Lin?6x##1u}N%z5;y^tV}m%(l!0v7z5SMo=|FQ~PZH?mSi#Bhcs%sIvUs-U#$)
zg~V64 at fFfj^HdHTTF{2zS+mLb2x7Mmpia_Y*$AW&+qD4Oxayoi$(!aPCF_&T-<~YH
z`u#qy9O8zPwhh)|R`F7p6koOAcRmw{s^Iw+YKIHZEqRh9*#@5L&bd#2xiio{4Wowz
zT<ud0O7=;hLnp!r&wt{3+EhK74zuglHW=KA({JAJx<7YagL(tuI&ZB=eYS~-qPp4G
z&l~N<=IdayW9uz|_WwL*POBiI(6FY)*K^1m;82PSyPF|~U{s?F?9|pKz?quIvll6-
zq$7)($G4=Cxq{)GWzBGZ<2wQ%Vs4%pw6|V5II*IYZdgoGP%1b=5J?#wp($Mp=SZK7
zql#5)5IaU{7{#1FlJJ|ptK2inne=Sgqiu#hkO8(BBeNKAZYz?}nLX)TJhhMVP;R-A
zF&cN+KhZhhwOHWfHDZgMpwYT^LI6muR3TW=*7h{Z4i=0fo at beVT=|(ju{W0qNN at xe
zkN6Z&^_L!Rv(q9=Tc=P!fecF^@`;kZiGXj|i(@4_tBxf9fGlPhO*!msqA|Ju(-6)`
zn92bj2{#mPyRXe6{GaFFxA|K2fHRWSI)AgAPac_O%s|09hb7^m2_*rS!3mb&Z)OHM
zfda^Sj{fc=fr6ob_PLZ1a#k~F6-#ynWmAXP?|#jK;L@*VJ!g)=P&h7P`)C~T8Oow5
zOwrh}jOhLj_EmwJW`;zzNW0aD)PugakGAv*9_XmM1LZ-kSDs<B_8`3_Ai at npY(52q
zXd2pPkq{&B<5Un{$-O2i7i734GM}YmrP<CUT8t<%qZmYgCk5>ri?o{orwIJi%`ozZ
zB?m4_z=ED}*~|FaJmR9Y-@#M+fZACi at P?BzW&hVI06*kU+VY+S5yg3(6QI?aO*QtD
z_KrMw>l9{n9pDgC#lNQ%f;mN{S<iyf9D?Z at F7$T=>u%XX+DDLBWMP%^?kwISBhPN@
zYLor!CqZg|e%JZ|H`ELnUZ!rg2KTmM?`}fl9>DU@<v2QZrp(m7Qfv~wqRKP{V9CJ~
z9VoS)k1LzWKeM+V(L{CGlEMtgn)*ThmNgW8KT;PCna6!-zl|b<)-`exr$ECx$O7Cv
zco2N-K=1P)Ea~>_m;`jsWVRr0^G4oL0>FWG(;WtXr4zRo at Nqu?DVG6eQ%oA@$yy7J
zmLvCOLfDWYKk1HN-T3$yY0}Q{%yok|)u>w^Sej*x;|}K~U|45%as56u=3|67BXh7$
zYxZy)yP-?0d~~|I at h5Nm{fXCtiO~5OW(6vj0=$e7flgxi#mzDNT%xa)9TEl*EEaxx
zPJZ%#W$nrq5oaX at R8kOL_1j_unKtI3dGX}OeJO}nHt=BpNOVHt=8rOr09g24Z+aN_
zWk~tWgh0&Ch;r}KL^CMFzN4WZSc)&rn#0SBMzzi5$&+8tYsMa at w|K!IL!?db?dKDp
zPP4#g_8$WJLB79i=?tml0t&{(?5L{~&NqU8V}#P11wH_Yg9XJgkUm!?h*qVdTxGZ7
zTVUn92E4 at ZXO+r>`=KV|C`q7wgbL~rl$6_<L~J?MJYD%Etuq9#vvA=N+*3qpZwC(7
zh?wqMwiz2z%OS*LH!%H-KFfIas}Sx6*gI=*G-O*NtGRC!kaCGA^CLZwa*v%-u?dKO
zb}e>SoG){DD(lkcR{d_M{*W1Cnv)#SW^Y%*);-TrRIA<+jm5_4wWSq#<?fHkHau_{
z>h24-q5EHto<&j*LMEP5b)M0#nduOSHxFgd2)}%&5*5OXn$<5Pm0C3xY{L?tI{1Fn
zKg9x2A^qUUyr5VG$)<{Vxwg{)IS1Q+rgVt0+Bkp}c$`DbC4ILyQfkDOO|+C`2DknG
zDml$P0SfR*bKxdWQ(OvgD*6TH?Mj(0%?$u5avC7 at TH$4vdkq@!njq*nf-1$<i2EgW
z0yKHK^hF)oQHXa5K~zDgHK{+RE<(*g7ax<jE0e{-S9whOE*RnQfOQ#rUcXy^QtNLE
zw3?!}f*Qx;7Yw$b2{epw<<TD8#Fd)sJwBB|gwEz-r5HI(_R4XIPvDTe5LWYMU(jUe
z(_dro7ac6|wn5)}ry8>$JLIj3?)pLdOg0qUD8)uuZa%3=9P0WsS&6owhbcDJ0vW*s
z9?E&lY9ui9%I#w~mf6W>x762v++3#5&Br>D|K?f;Z#qe^A+kZ%@S$F<MOjdvd=(ih
zx00Z85s$1CAqTTQG}4z{!EH5lgJ~}doB{oMSF4q6mQs0rwJ_zGOfad)+RpPu4tIG8
zb{D`+8 at 8GKs~V8$!5M}cHmHG)r8#1f=R4J|c@;m&K<AGVYY98ftzGGVJ+pBq1_ilE
zqxzqa9CG~3m(A|8pVO=maPvGKJrB?`3X_M$q at hTlFZ`?PHmEaV at sF0?f#CfoC!;Q@
zlo#Sdt~O>Eb1jIGop5Z#2E6j{@=uVurh7&=K*6NAhNavlZwxg;?rh at O2)`eLdb%h@
zwwg^<m`cbEi at 6La9hK#O3^EimY1aNE#8|o`04rRk((MxYBt7JEc~6i`kFAH}NYA at S
zx$n}4XY%M5)HOuk;KRzl!n`M|oZt?2*>vQ{hfp%)?>A$F{5jXG8c%zgAkAA6*tFnn
zy~N1<`XzenNB3d)Z{B-Afe!^j#AM7vJ<3Am0-3sG!EuW3z at AQj%zn3YH*AJKI~r$h
zh4ng{S>Bn0srrA3h$uJkyYRzcEINah#g&qAgO<K-I_{sTA-T3Ihz+){cM at x~P-IVP
zp0d5QF%yV9(7quGqyu<-tm?smcFxKW)P#CO>unN#zD--dka(kY0f$sOLLsVP+{>R7
z9s)($$4`iqR_;rGIfV7z>eXzJZ|2H*^pvK$WO?Le!WZfTf-*$e!9g0{;eYxCW%(&1
z+sdb9$j8v7;|zi at b9E&(;vFr|*<b1SBqnT8;P+jYK;oWVt+hDBF%OWU-@>*`SgF*<
z-Y5;1g{OdAq5b at 3rb?J9m>@?!R)Fq4lWT)gbb+Fq(}snAp`T$+8vhs^qF0A?t?&Z~
zMV3&KEV6xDE-;vs^+-qR8_nEf;GZ_8ktgorrtu(`JBG>8Nq%cM at Xw$etJnqMk<9&i
zP$#f*A~w@=^o<p=uI4-dgv8-rB8J!_TNX0^);s^?Hp;ouJ;}BV{ASw3H!di+EGrGW
zs+PiN=#)Nxc9vZau!3hq!S3=>&sfeP=+KtdXOZVf&k}Z}WtKOX$D~s9{!uL(*fS@@
z4cY;%V2(_)Z*SQ0v9XW4!auEC at c}9{P_~gIh(5{~j at 3a?Z{~HeTSbW-UweMy at SPa_
z2yIsFF<12!Ow^?9PBzw31DWl+!ehx{e)DCB)7{5^I_q1MhN7AYihw;HB|u$7d@|SX
zO_tTtiCQhKS^S+;RO}emts^90<={L#Z(cpg(yty{V438|`|+@`wHaC6)29`xzv=Ty
zHRnc$9KTe`J?cZ|%1Wdiqc2UCd|AW;=ZfOw7ux1FqE028otte-+~mD<I;dZQ=P|P3
zKjwFT7eb`xGu(dyW#99nqcUwt&XB5lCm{^Wj635k=&5adJtqh2dCS5q3{**IInlA7
zk&O0#94?Ys?gKN_I!43V)PtImg4LG!w#g{vYpoHLlM~m5-MRPfI6z)LU);$GrBGZS
z2N}LsK+TGFL+r&RS`4BuinIAeBSQ~d*>x0uNY8g3T<5_is#0VrEK}@e#b-LVykEaW
z=AzB1n9Zc`nwbYJ%(!dm4O~cx$7D13cox|n--uD^0Jg!JG3f}!&Qkh2vxgUdU~7B%
zVCY;mQo5*d`4B8sT_0!efW}gBXzc|i9)K%JiS&kR6|OwxwGsZYEm at 2Lha&)V8*^=c
zzcKSUF*0C~J^+0<gaRDWth)$p`De<3InGruIf3rbK^D};fA at wy2Ht^_QNWaN^c%(>
zH1o55Z#+Jfn#fy}&0d$8tcC$hWm~!sKyeen@?-{{QhTSJZ+=w7QXH;^t9Q&|ql%`-
zMQuNp&2!w#c3lF8B5Ws_j9}hr=k|Gj0pFl8ga4yS4DEphLkGI)8cqtV<$7Mw(BO?4
zu0t`Y-J(13XWtm{_O?JrbJ8^7E0%jT?O!q=iCd^cWr at EGO>B_gzO?<+7Bzu593pn<
zq7H)o1ZPW&nN!AMI#H*U#3`BcDaFFaSM+C4>OPZG+B6MlB24$QjrZHUZOC4KvCk!0
zUx0m(UMa7$)pyuEyytL`ZjE#Iw%j}`6W3T<0hw(nJ81}*iDF&ba$3QGWdBf;Z<&Cd
zhuKmL#RIaBe~(2%TmH7-hAY9mBucgzlIVS4TrRDdQ*huK_V$C at SZ2IOC|zLMSFv|D
z<ULzbS|6PKEQZ&9CEWhK#Sa31v*q0<jzKxEd#2!y+iXT<CxT5beaG|p4lx<ef<|@L
zs_jqCarrsSlGHTp_ox8-PfKGpHxb9r>g^gNu5Ds$|0lj4`H}{XqDs<i7>YX9WVI<2
z6Eib?K;}z{<|T~XDw|lNg^lh`K1d0&#xk at qDMG%xxv`7^p{-Gz*W%fK+vqBKtJcJJ
zkmI|0npNnhVEo3XL1IU#NV!#}a1H>6T~!Ujc|BrB^-G4UvMaC4OM{Y)3Yzq%?`b_v
z0QsreBW%ZOvd$hnjqpwqo!*j2jpwZsyNcrlfxOD<o?QdX52>3WC3-DZ9S1i#>x7&1
z2N%a`8_fxQ{nDu{s(g)qw?(u6v=D6xwESDI=dks-kdL)&=dXx+!rAwfq1g+=$w`{=
zIqSP%{s{vmb}wRh`y4yYKuAZ1p_IzA at NLP&E=|%D&ki{1gO-As#QNQrnpl)ww)A)&
z&~mpP7&R7?5P|R1957#Xk$w{-N8h`6&xzW>lipUD66rrccN>j=5BPr{C-odX-@`mi
z at n6ue>}eP6&PB*<s8ZM%zeD`Mi_|uM*rQM8HUqarnP1zM7UnMvdUj2R(o;HRwvloT
z>z;Zdle=M&BFA8Hf~|vb$@cV!OkiqjbVKZYy>PP0BQ9Ga5T{{GxR|5cf=>S7IrQtN
z7hUnjN8fOcC(>1acwi5ZQ|*df81VJ*4P0GH5o-BA&`oz`@yHV#@^zB}w4gDgT{gzV
zgh=x3&L}v_UE`cIFjl504=zGgm!G$Tb>;D9Y(mK%7sKo?k^t_WaEHI2EV57E)C-LU
z=FGAbq51E=Ubk<;;i3LZXS!<M+_bJ-22sTA!~krDrR_t1- at mnMlOSlf*|mdTEbhcG
z__C-(NkqiSR&iEgJ3Y<tJk99pDvA>0mzeoAD>Gcc2lv%MTGhl at E{^LU{7zu8wzq0P
zg9U6$d;_3p#~y2wCN5!fINMbIwD311#w%Ranr1H0UHnZX+i)xO+gQVyWM0#<V!9e<
z#X?^#e9&Bf at 7SBHTI$0KMi1jio5Im0JzHd&k>D&>j;&8&yRKvA+l$Hn19dU)MT%H7
z_viaiCII3{Ym}XIL9q_zqpX)ln5{7oP|Sb$?7ZJ0+?DCP%}brfx8!Z(2xxp<%QLM+
zS^?gBD- at gB$80Siv5<~oSl322jK7-p at v0BU7~I2uFXr?PimLswdoSL?{}@lU0ET4X
zBy&>HpTI-#7M at O|*4}&X&ZU^`WDNoEz*&CaQKspAwX*^HS*2PO4Z1NYuo)P>s9YAL
zX){v5pLnm+X)8-MON%r6KM75D(mzUIFFCtXo*8(_BSZ5*r~-ObIk-RLdqR>(!Hee$
zu8n1Xw?W_byb9LG$CxCy^x_IJHu7*g#}3K3y<qCkI~Ttc*abn#XITaDV-Mc)9TzrK
zjJUA5`OdKCuhd760tO`QZon}?%WJVP3jE+(p8fM+GhQ8d#53E77}S_8Y- at CDDqKd~
zyy(3($?726^JuzGd{0{VIo9pjH|w_gYiGxQ?LkIaLr^mFm&#_FLd{I-8Wy!~tUr`*
z3=TBrh+9(2uSpw!?x7#E!=H0o(-WO*G~5)5K-8{!7G+IGTN@|rg2?6i>mJyd<$Dfy
zJBjP7_b#a}X9POg`*iy95<eaK>Gm*-yXx&<7IkG-I|^V0x)wIf(Q(OkFUSlCqicqL
zTC*WZfx^IZ*`WS|MbI|Q8pWU9Eo#wrtCW(HmsR4N5&wU384fd0j6C)<wZ`zfRa%7`
zDH5r6abdDD5Cwf+da#vmQSc;<Um;tv=|E7&7beN%S-4f)jd)(En?ft83WgV8Yr&ql
zf%qX{qb5AjVsKP4ZZ=`mEiQutqTcm?B9xW?nJZ~|gt_aSxE`Wb?1jDI!X|~1D)DAi
z8B0nYD9&wsN<FF^H at Xjv^r%@HTzgfr()&QQOnsR!53Li!5AN&!<wR*Qa^-p;k!8MY
zv at KPXvpCe^nTM;P$u_>Lp9yR#T83{y7`4P?z8Ei{JJ=CNNh?t@!{#p^O4D6`Ggp7u
zt3{H+CPSXJz>m1YVC>>kD*IQAT`*=529~2L4#K9nuh_tw^XNjZamf4t8?}EE9`v&}
zyN|)7fcEdLoKp1_UWybS$Zt`PVs=OgiF2#TzT-UEkDZJ=s>9M(3et2b(@_sHX=|_n
z2A)a?tLq2^G3{TiT&>n&1PqOT+{t6H_aRgI1T>lg8)xe%ILdj`{9WjZLlpJ1dJ~_<
zkN5#SbFN-iXLu7(JS*Ln{Q5K$M)d&Z)1^mdE6#T at yBI{gfaw3&?SezrvsDLSI1@!8
zk?muTc8uEgjDCvmnx$Ln^4rvti)__>e4>wb&Td<%v>|%T)w8smrL9PR*PBY#pXseM
z2-UjARlJrcY-DK;6w%gbzxzjKx`zz+;u=<NKRqcP3V(zF!$>H;?zHI$L71RX>t4SI
zV17B`vJ&d`J%Uu+z4cyJb?PYus#}%o?NSuGKuiPTIL5V*h<T%mdM)R(BpB5ws8g#l
zoL<++cwekCr{LEK030%Z5o?&%s+~fnC<FHie_ at uAqp`l(ZZCu%0wDVap+#x)@7Z<-
zvk2e{D(N%IGd_6m_GVS|v&CekY;>n56|Nceg4#@HG}6y>f-7c>j!{4GbZPX8`{NMG
z1>5WWzrlXmcZ~_^MT$lsN8Lf&6}2PBED;k|*v{DnOGp$-vKEnl?z|N54P$NyZ{C0)
z`wcj9f1TIDYqjb%B^qbP?B5^2V$ETi5Su#|ZGs2AT07U$kCo;n=S)4gepGn6>Y<w2
zjm0QlPs1xqXqZ|S&%I8*AyL)%M=}&^l>g7~R=|UC>60PhPqJ_qYocpy{IwMnud7A3
zDQgZyl3swb3p(6?mw^}zB(lQN$1mbo##qWzZM6>p$l7s3XfnwJ+NW*>Xp4Y>Fi`2_
zyzvn*s*>^25IP7RZ_*WhLOU9JJYl9`g>zTqO24=W3K!JP-oWEWs5Y83*$@{tah#-5
zOpjX|3%kp{SypcPc^ak@@#offfg`BUtmBDh!+mw8N8u%ZB3tK2=fr#clI;Vng1vre
zqFMqH1gs_CNVBdwO9Ec~mG(CY>I77YPz}kFi+E+fp#`#@h6UY6L<k|y*Trjo85hxP
z&j2{h>h}&U#erpTn?Lzco`I8xo2#`G4&X8uo>zUlDl{p_R&HmvRL<6{>_D5}#4ebK
zy#1l*It6%tPBYN|E!>LWU(a1m*ho4cC7QZnHOWY*dnc3^s5Pjp!QKZXca(&pC#+r_
z&o=I5L2V#I2%sH-ACYVf2|S2K%QSa{(!`l>RdZbcg>S#kbdf&#w*icvZm$bDA5~VK
z2^1ONT6;x9nd9L>ClaF^Nf9!vc6_NxXG0a)?9b$XTzY)wheg{5c66ngVVx8Q*fA2r
z4N!c!bkxQ>$gpavEYiaY;@5O<D%UG+R*=pNSPNMD;|ls!ylLj`J+eOe7QObh^=aKZ
z3O^Q~VCW{-63x${SQncDQEU{d)Rb5OD7kBKuEP9*4r=$(xSpORh{zPmqKFY5(Juat
z7j4vkTvJJt1D$yMgVG!wJu8x(vs5AB%c{MgAgW6}|9F=AhjHQMBM*J3bLly59XL=$
z at a?8$!yqa78S+Yy0m~l<>TS-n!SHgh^`9GE5cx-`!MB9?>4A1RT0#J at 2w|5%<~G$c
zCgP|QYvXc}U7ngm%F{n^j>%gAt5!_oZ>W}k=GnRVokwaCWbs?!9&jW)Q~4sAzetYY
z$go)>v~gMnorGjWu(23QW&g-<A&|ExlE1*Cxo=;d*kOkasqlQW_emR#lUl~0wzf<Y
zk?@eyB`OCOB2BXB4UG=47$Ya~__P62Z?N_I5zzqmuL&q_$dpV`S+=pTe^?n_1ZL2G
zZh;<hQopFg=El^=`g%WI5?q9X2(d(3CjWmIdpwqS#O*v2+u+7>`|i5>t`C1IlO at Sn
z>M+h7Nv?&7(olh>$JhS~r}T<FnYIzaKr)iohGWSk72zCymbAZ5p`$E>q7K7 at O9QHJ
zRl*P=0GEH&8o at Z98s=TMtU6uZn2GCuTN{bG0i|5*WKz;FG-yok7;F-!?@qbd3H>)1
z=ZvVoQzdu<*ZP8C>dmLd-a^(!e$$u2Atldn3!Jo(;P%<bTR`(z1Jj*=IldfZL0cWP
z;et&kV~+)YOa}0)5UQ7i_w0DKAR0QO|1;Vh81A9Gu0Kag#{;6WskZMBOt%Stnf|fg
z8gPNDb926Ia>J1FjGao|4Xdv$Rt=6kz2b>!$14FIicsW+VpVdwSW2`|J(%^oyQ`CC
zVKUYn5uv01_7M%_aAGg<IwpqzsQ}RQT2<d+WhzF&b*_;Gy$0ehiIIs<Pu9orcPE`L
zb5J^(Uv9Q>9>@kjhJ>sV0ccx)?fSSC?GBO;0BO(KzWpxP*Oh#6EaF^<=}0a`bGZz4
zc%ueZNekJeg}*FzmssoyRhBiw)hp!F94?d#wI#eSKi>C?s}V0bi=7^dbIp(&bpGsP
zW)2~0b0cQ;arZakSCQqZrg;PM;W>ncvyA&WkejUH>&|9GoN6igpQvJg%e?i2U4KN2
zNpB;0Cg^;8YJ%muiaf_h>fLFzOPs3i37CCqfVD3anVA^|MRryR;h&+UE`NEI!EfO?
zoN|E(tX)A#+^&6tKk(GsAN+d^#~(XgW#nN^y03{{|IIYV8;dotfE3WqsMc{#>{IoU
zp(ZI}K+~N5u$(@`Ppsm9mEGD847kJtBT at kW+HGR~9OTJ^R+FL{DV5a;R6fmwQikPw
z;X$rL^H4#hneB#E at tt>;dtx3|7SSFCnmzxcwdMVBzbBI<@V|t~lwRfo&HIpn6X_SV
z#n$=Q8mXv>%S`!&nO6Fni6BN!6c8SsK%RIuT=7eOY_Fjyu^dHz3}KFVGe^yufL_Cs
zv8OcLZa8wF#e11REuefL3s+`PhCJpGC~Mi~s%~CJBCnhXJ(&-hF7*{qC+N&MXFNnN
zUyg7uR+5lE!<U?u;sJJVNNDoWy=nAM$0|T_Yu)l`Xu#mXaYakY#ON$#HNS>rvX_T8
z+EB~pV;@ccQn`_TZ_pT1>UUnXf~*Ku#>Rx9W(I7xXD^ZNd4mvN*yl|c;3#p*5GL{P
z!Ql0eI!Ft-O8LO#*-_DNhQf^Ds&qDo_mlbWeh7X%ZA1xM=TMyiabDG#;nJ4l20KNF
zR!R=h#*-c03|Ll5_W4(eV;wb)Dg{-?vnXE8+6jX*0K8Ivf<KFh%Qq3P8Qzm`h3B7i
zH!{Tku+;aJKX`<cEpQ&TWL8NfQ=n@}B)54U)N<+3X%zGt`q7<IRQ`X4^Wt>sQ4S1e
ziupt~wD<@oQsK<~ZvAuOHzP10j^~e)317z#Br325Sy|AzA8q%&0<!078VZU51f<#p
zVDhd`NXoT;o!B`zVG at plbJ91)dLZu~B+w at T)+Aa|XvUz;c9Y3A_y;nm+3VA&!7$yl
z5SS#_8SzeNWj3V!cfWFAtOTnt_v1|Vr?*!F^;zG|oabu+u007B_(ILiypO8?0$8^i
zhHFmUSSINXqWH4O`)lr5G=4X#yQOsd=DUltd!NsLM3&SsZTfC=dgv at n<Q&LtV~CKL
z!{*morOwRTF(vFobaw*+#rrCKdcRb at 3AR5uN&RPU)a%Est737`aT2GpA2J$3s}Fki
z3l{_D(k~Jj9_Xj&aTrdEuX3ygWpZRcx0V1{mu;PsZmMYvTVX}Rx3IJ;2o at I&_}f`k
zt)}IFC1kyMXY9o0#db?-31jfJ%3PfmnMG~bxdtCxH(3mO#~avEPnCw3cdi?cKkhD%
zcf_uQvJ9xXHI$y)&NhC%xB0#{7+grdj*mG)Co|)bgbY2uOP-PdKZY6$Z(t<ItCrB^
zd^z|a41 at qmzvuO9YsU5^Z7|^1nkQjm)^l=y`L9*~2$e3ve7PK5Kl^-DM((>pFa^(6
z8?-39DO|!gL^@#+M%%5$`_)Bd?r80lN6A{?@0HlYPW1<bgwYBA*pc!lu6F_!2hgd+
z3;C8q2=~*ygqEs(<M}`@I?(VirxP1Q`RCn7oFqu{RBIh{RxF8#yJ2>m=he+I3B at UY
z>pjPZ9)PRb(2Lj|TMcv&I^6;z*hCxY&XFf~-v_0R4No0_?Y9SF0oJKDus?0t4IynR
z_mu!Km7W=Xx#@k=gxeREF at 3jBgEtD4JkuVpfj1X+-4yPz+1`Lc(i*dARvv$2<hgE?
zf#tW@%L;4hCurB7K?EDrt2a4ADW`RR7nH#TCmLbasa`6g_a`Kni*345Ua-kUp`o%W
zdeAnCvJAa$Y!CY=I%ONr>a+ZPTPBO9u)7 at _5*FfZ at +WJ5p%P}Y%?6Z)+<wMo`ERTi
zoj&owF02NYA#;H+siGx$fN(bNJ_NFofo#T(Ul+`G<2B6}WP2t1(jg}EvC_MLpzwvV
zy}4|!Lz21FOTF)n=QbjB992>Vwl&QKkxH|Mkhv9iJZc*y#Dpz0ua9F}biYS*dk&{|
zV^EvOLDJZTSAofcOKEyNG$r}zop&g%NDl=|LoPL3>}W>XqLQ8(EJc19FFXxAi=o;d
zi8l1}$rh4hybrwFUt~Q33AadpNFtkWEv<sBz3gshJ_BGQvspM!H{<wZ+Aa{i-_qG7
zJX;PxNH>MN<*8&}x5kYeIRt6LN5S)Vf(HtY?AHWEl$?9 at 9(wNFcwY%oJ$qw^kMQNJ
zFcI*da-*%?KF0r&1f>oVym!<A$d>#@$Uf1YI*wjBSRgK6Y^ma|R?|CwT68ufz&)ZF
zqf>!x7Q(MCH~1ac*xvU+OP{-m>8tt?77fkz+>5eb)s_SsaOMb-wvi<A;{6!vq>+;`
z*w4tA38tEB&p9U|<=Oh#kSk>)dL@?000aOqBnpwQ<^~WdJBkR+4u$S26VU$%?ayCl
z3bsQohydarh#$?%NLsdkb+L>DPwpEJa*GA+#l{pGE{VbxQV##@aLnH_C-TiKwRgZQ
zdc+CzP&mM=c1 at qU1wo9fzESGZ<CFy{E1r9YPPH||wxJg$q1XZdc<HPHQL2V&_HttF
zwtzJXuJn2wGza%Ht=>ZdT``magq+1NZLK4L!3j9=ci6RS2EkK*KI;xxI5~5p<^{Df
zpA%3m-cw>%{@GqEbC~G^@+4QZWMAl;zB*CPW*58;1Dp#5v<1XEbz=V$9MOaT&y#^g
z8y-29S<;-+Yil$@=I#!u2CPO%5-ToayLje9n}6&>uHGpIHN-|)Y|Cak3Da at 6H~FYN
zJ|j%xVl~ug0()40v1?G_k(_P at 75kM+^*NSat>)OR#wYmsTE9?YEdrmirQu at Bh;4M~
zfxe)HUJsN70DjH-uTx-wCj$HU|AEX-pwwEI)w)tZc3up0t$n&|kKnyT6x&G(7=bc5
zm^gP->oP}LH6s(B2g!>??xc#zd*vb*R0*)QT`;`!c^t8SexAoFjEZdu?e19paSD&?
zk#-QctNEUxoZkX)xpB|AJXqweB2kdgks(lti+_zw7y0@}@^X7B8;6d)jPDrNdv>x@
zUM3HTkM?@q<3nzZo^43%_4+!O69w5{xZ9dh3O_ilLulvJDDLM<rZZ-;%V%klZ>BS+
za#wWmLf9yO*YJK)Km})k(<&r{ii!*tuoRkY<V{RTMicW at QiM)pnn!`><Q*$F*F%mu
zCklkaFc)<(5wvbh>)DmhN=KIj?;*tZd{goH1ZftT`MAdi(6f^b1)hdhMB6zS5#%{I
zHie4DOZPDg7?^Hibe#4`g>hwVNq9{9QBH#SFpC|3-@)^6sbA>Qs-y0!@t=C$;I^wC
z+<PS{Gyn;=D)!CjuQ;7otGh#5$lQvTi{O+=8=>BRSdd>P)w!~$lM1|9%N{GxPU2p5
z+ZHP#8N*fTl7Q}II6C5fH2>hzB9efwWFw!e$_b~JmY#bp_sOOfNw&J$eH-T1hHa+z
zFE&<x-Yv%Ot%vtI_1?~r#t?^qkb0ra??q08>vKGTvzK03{5aD61l?p#Af?v!Q8Fm7
zUQ&va<rcjn_2p1RK4fCd06ECeMqsZ}i@(&IH!z8%X<#inG>3WHxEZM7JJU1yBdApy
z>Z?*VZkNs;OY1Ew()epLXiFm$R(m9`v8)+?c*=$xuXD&Ke0W*~-O+=5N3hhV5gXBN
z5kF++?zMXO_{B?XFkHC7K6yjD<N0VA^%fTyWm8gc8hnC4O?S7YyMiy=TC{oXirWCy
zE$D0;C<i0H(=1o?;@SJIbP-PyHaJd|pg0hdcV}&fi=C~GqXymDe$49bB4YsDy*xmF
z82<nXK=!|^?WW$+N_by{Ac<JqGNC203pY?F$~40qRL&~!fmNWEcmc06zo40v?0iX`
zG8FW9=OD#*=hXo4P<}(UgPw~#2%Mdl;sDCHGNsS3)d at wlId>o7J&*zF1X&dmQ7?_`
z8sE#m=3s6$)=Nk41Lw-&!Z5ZxHi^l!_U70He;)>FD)IPF9W?KEyl`g`%9z+t4HoqV
zR$(h3xANLjt at E&G2_pJ1<SNs4ps}<-(GQ1%s>VW=d-pSMy^WTwe3r43*-88WTvOzU
z4|QB)QKRGjo=9V~QWxN9dZ`UI?6h(ohNnpr)#8pf!GGU!km7j at 3fd$EW#g>o<x^X#
ze<uZVg)-b7$=>Wca+^4s#F5<evGO=t+W!}NVL#_OgZF5V at T|D40DnQ|0%0~QoQFgW
z1cPCcA}@S~u=pnJ{BrYk`s;$l^(cK8)9Z!slKGOwWNF+*{~QRU1|SRgk?;>!Ev27n
zB+6&rV$U$@95Y(f9gTuWu$T-krK_8Gf3H;<G9#F+ojt at i)Wq!Leeo@)=KF9Fxz+Zo
zVQbg;6Lm{huPm^iiiiL0VI`<_hwHeL2o_O)LeHa#J(e+yNV{Y^M>N{!blqrGDWP#<
zIYbMS=^QXXq3auXke^Wstf(y|UOg at K-FUCHA!EzV^WQUcsq;zi6b7o1oCr*Oe>gmY
zOtrmB3}!|YdoH;<_u!lJkSZ?lA$KE(lP5v&dzT{;DRf&-B_TQ)6cjL at w>p!95bpd)
z(4-lQ0<F73?Rp-<A-<3=yOAAO at 55=oX8*~MyKVEKPy!JBd at fPIgSdSS*>U at W#78no
zq`G}hga_5KI>onJM$-m*V5!y`e{Q?~-m^3S*#@00=l>lt&)2M0i+S-p{K5iXTTS>v
zM|n7`Q!nf^KiW-Ged>rd&{xnzuh%a$Sb8;pTX=8cWfKR`h{86G#*$RIZ&)UDOpy2D
z4Ps_wf0>(`yFCLBrS;;zmdxPV*)RVFB<~>Ix!sEs!$ej4x`qMn(xp#Rf1^>cO+kCR
z2`<NHq>Fv016Y~mPu@<jT$5bL{fl+V<^kZC0>3ERu)(WC>Ll~@yFz;Fbr7fDKz^dm
zNU5K_ at X%WrDyQLpRg5Q8$*5$d%HXGp%HhSW73ohVp8zl1<~+Pj!8z=6MuKoJco;K3
z at IyDWPMGNRCUvkds-ZoSfA?Zc+0A7S8R^OsE1<&iy$c4yZmJv~RVcR|QY>?Hc@)9_
zfBI&`E^3f{8nwb=I^Cpk;iUaoItEnm!-nwn4ZTbPN=UPU($#4(kn!LxY at 1Sj!kl7F
zYoTolIK0&L&_H9+R?lOdZQQTDi%e=5JygS#S4hehNv3gkCISKre-4A+l*fC>XW5z#
z2Ki)NQh*m;%hc`O?0!P at mX_js2EwGxnjE}8V71a~2>gZn<lt|~XQ<xN2wV#`B4GaI
zoI;C2gNz_22Plz4t}^tQ@=4G_*B#476s7e%J<ht{G{>}geY}8S#5jbikjrRg`IFgt
z1~{O+YD at Lnw4m+2f4~jo;l;M5TD5KJ165dvzE at IxZ*6x)KlIKUvaB_>RZ5S^e@}xr
z=w-RuBsB~fB{TWO>fIT<uPrgHq#eG=AOQUNa<?%A03D1oV?=FkK!f=MEPIHI!WuJ~
z<qy3I``@K5KcCa7Dg3FOoQ)w8Lg1hgMenj$m^I at ory-#Be at x=ttT)a8J9)D4rENt_
znjEK|t95oSmWraDcXRCTmc-h7)+H>?Q1J5fD;2zCLrKe?;v`K#=}?+~B7nI|2X8u+
zjGh<-m2B<}hk3T|UT*3c&jn5Z)~T3yLsciG1JwIW8QJQ0k^j_*7MQdjXoJLsfMb9t
zrJScn$i`g_e^C;=AWT9|^teLTKdjh-*lk8rf(H7JXV?Z6$rif1wRrnVDmF3pH2n<a
zC}S|^xMg)1l0%@7>-gW8ue9+P`YMg~HeDuXONVI$hsf&au at R?IVt^-6OY2YyY3>Br
z^GU`feSSB=HdFX`9$1r?*dI;v?c!<_zF68#A>G&lf0gzV@}Yal;?B at FuQ3u3?@)DX
z0Fc}*L;O7Rr+8xqJko~<g$t68hPBxP5Dp;UI9hNcNZk4dPF>W@;I at ->jngA0z+NGL
z?<XI9ovwL)dsyF|HSSL=+hzfJ5*Y#^oQ4dK-O*A~JjgFa8Wyby+O>f@)^xMh3C67B
zztNaFe{sQ9LqT5#Rrxj-3EkL)30Un{b^Rc}s&?P7t6UMu=e!V?IksXhWhhs!rp+PU
zY}IADu^lG}LnJ#!$y^x{WO54rne9#fTXi)6EtV^(!~7Uls$h at Zt;I3Zi1o?+cy6K2
znj+kjR_-NgOcR%V2u|K#(dQ=v7*F)z5viC(fB6z~BV6;gX%DWFCGT}lJvCDJb8 at rO
ztVtNBDQcg|2C at 1C71^-D<-j<7I@({e?fJCo#rj4}=pnreIT at D}GRB|k2mrSgmYp8t
z7$@vG;iM3DRlb7 at F6>)=g3EgQP_t_LL)0IkP<F)gHr&;S-b*-unbqHTITg8J$*61u
ze*^@}!%KZilYCc=XBTdj&II{s&2K<`G))(OqNU at yWSUHCP#?IWGp4P!FQX?qq*f~V
z;5V at a&(-CTx<7~@rquBkd}=<Vo2R(FDNQ82Sa+im4m;N^iNJ(8lH(r{z!u7j?yeeF
zAT1}^EodsCt(D|{!|OL1&2SOqmk_3Qe`oJCQ{alvox{ERPK7&Zr!wefEPQi7 at pKGU
zp&QwMg6K3U8RlWSSB=i$tc-<MX@^Ahe*X7=o>DpKC*4nqpI$J`!4s>$grUdqc~Not
zLBsq~<!F6#@uUEaHoH0X3R_=G{BJC}fmi(QZJxupbT;n++1Y<+;mqY{895g~e^ZHZ
z)w&LQ*P*wbA)I{Hb%~_XP^F=UoaHIw)lQW at Ow6kWE6xGQK6VRQA6vQtuARj^@2b}G
z$JAUas{YkaILHKsDg7w)_yGkgujviq;}4LIkRe8B4_1QX%Km3J09{Pbr}Q4OK_$uz
zZjz#2XNLudFUg#qXJ%J#<Kfd^e}H<T0KETH$sqUhOy**4l?M4H$8oq^UnTw&RI<(0
zZMifV+ at HWsP5Fk2wtcU=Ts#{ZYy21|x at OHhso!DS3ML}>%BV61&Z1F7Im$?7X at w6h
zZ2{ayQ9m{xA8>)1nZli_)vB$4RPHQGT-PZQd=avUEL3ODR)j}HabsF$f3|HXWR$}O
zG}Z<@2E=KvPr%kBEG9~f5KJ6**J^lBQ!0ULxqtJ#i`bG~r9=~$`8653ahi^r)=(xg
z$ndr~*A*qX%+c>Q4>{uAIp&9OzCyAQ>3`r0$+!8%;v-4BC%b}s&7Iuv6l0ipRl%*3
z8&g6M6XraV4XfB+q@@Lqe_U>e^LXH50tCg`HtI>1L?&+F^SgM$xNJVUv6Hd_6G2&(
zq*F*2($|n$R2f5cR)vDa_eShq&y-||M>6w at qddXyHo2)(bykzqH6f)TQ;h#CgYNzv
z!(^(5hbm)Re_u at rp?1=Wk9SlGQ!@*tYQwIlbg0S?!ETR;p~N4Oe at Q59S)~X5yby2U
zwB65K8D*`E$x)>PtRbfM*9+#PO?eR4KWNywieYQdrXqRy#udiOF7dbkCO at i9%{?su
z3hw;y1K;m8i8-%o#8A6em-P5{EPuj6-wPKuY=ftUSMHw>nY5(xw+$j2Nok74r^SRt
zJ>?^cA%K%=o&Vocf6lW)V<L7F>gUXIGeB+y{);95X1eU1uQJ2r_evwPr+$S_?(O&^
zM6LJi9VSeM<JD@#RD>f)0evX3(1{q@*7+3x!&=BmhnEes>^-m5%in2Qd{H at YyqP>r
zF;4D5`q9N3tlZS4?UZCXrlLhexM~J4aY1`CTXh9v=HRmje?<Gfp%K&i`!H|{)2EpV
zPS{zssEo>nKWW%laXV)V-Aa&m2Ho=~ZK)AWF}iPFLOLaOZMK~tC`cLpN2Vsk+q~VP
z=;f9ynvGIH+<$tL+8G#jI6t_`THV$!lhh|Mq=q{l2(S8GrbJ*z{&$Sea!$0eii<|7
z`g8w9B)21rf1z(yw^mdR2Cb8=oPB_0ehEVufsU))*qj3}-fE41wqsG$>b%zkN&8~Y
z>McU6w3)l3lbb0>IL{g7zTOJ3UG4fi`wF at m01=E^=oUY2D at c-WcD;Xk<j5gf80Qta
zUu at Yr&BEf{sL}x8MmYt*(oMK_#iPlB4uA{f-xe-$e-=?<_mgmI(v(%<URIwkl~yA=
zk4yHJv4=yXVPc#{6_~|aylopt_-L3<J0S!O5LbPw>>Gsa&9Se&FR|i~o)~~}tCC!m
zRgTkC7N0q!#;TId-1?bN4T8;X?lUOKkOz9u#HM0m^)M<&%Yb94;GkBKwj<)3v<ZI2
zT7iV_f4bCO1_O3ahZ)bJTs{;ga1MTbsFG1x<g86+sWI>jp>~od_mV=@8<fW}!coWf
zog`*{QBqrwpIN8UI8XZ<-I7}durKFf>95oEG>m!CICs|e908c`10UPy++cpiro#lD
z%yB)=DG0{4{pS~WVCLD}ul4GsxNCvpfMwG!e~>}$IN83|SD1H)GH4f)-ol=J2;5Px
zKIx*|g5W+P9Tj-W(5P at M<n#=q3uQyvpu`pWU1;^|uH8;%4(_{6d<?udJ}wPp6)Vl#
z$yAAl8sqPfQ-OQD2w#9zi9AxrAsE!89&08)ymX*KX>s%!$@|(;`dZ~}yJ%?UP`o<|
ze|(h6d*Z%ony(05sV$RzJY<Ylt*%+hgBrX97xJzp=*%A@=L`zo2=v`TsKICw-<zTp
zh0CK2{9*JFKH~f&b?^3lLRSDhh%2~b`tsTLrG8XO7t&Q^qYJLaO2%!z&I4icEGLKw
zSI98lG)shAl4%ktg`43Y<M>B_aiKv_e}D*U^?^z at f(;j{J^*FcRWcD!Srfa+C!GdM
z9BRg`VccO`ab*9~s4?&BD>k(zftvJ%9z+lfXyaxyU8afM(=}XUGH?t?`MLv!?Fy@>
zzgtvYKV=9mOGb<IYYN20_=Bcb${5}fx-sSZmh%D5D-B(8)*wU8xve7BT60VJe>;#0
z-R{InY3Jibd-VCnq%kNd-yCKxajwopRm7uTL3;yi+|jXi-C7eyn7vQjH5?Tqkm_Pa
zoVI8hZBbBVA?7C3%7dNWYjjuZbU(t?3W92zOB%s~oJkhk&Aj0tq!4&jW+$TVZh*0y
zjCDWlt(ZTrpNsl~?u|`h?I%sge>7L6Z-8WT!Sks)h4ln)1Eb<lcv;56XCDg)UZE3B
zZ_ZZtgO>K^oU?||aG(99guVw&+*_GyryASX67%t8_N(+RTDosK^RHU9QL7N?Qj<=X
z0aK0)&pi<<yga^rq*K2o<8Ihdxpc2%sM}~GR&WZC!(4YOz~j4M;lfZie^Mf%lcpj8
zTjF>k+2b*8?<!PMh3fSRaj=p`k(Rc1oeP1}(P*40nEWw8 at VCPVFS$O4Qgi60^5o^y
zK)oUBh!SkPtL%s^5v4WxrPOWqneU5RQYEic-O$)kBeAt|>cixw5MycguaFrlzzNgj
zYBL6p>(c{-ri(ao?Acozf6}st(w6j#I%)KlTOp$@7hd;tK6`d|zG>AzRy9V>H5GiU
z8>am0DTwtFj{f=_5wj~d3%w6>3W6Kjj!2u*Tz!KCYt3NK^Dyqx5;tA~MSeN7z<?lh
zO~bQ9S<wpg;T_eiBoG1%so42<Jj{8|J65insPU&34u%Kqx(U$ee-#M;$_~wCDo+$2
z6d}U2*RxGpM(N6A4l4Fi+=uUSOGfYG@}JG+ZPi1?^v##NnF+l)d?j*=QsxFVDo_)0
zQE9e^UA;DbIP``1U%0*{@Okz63y-vK=u5#RKni at Pz?FG{9^O>Uc&z!n4rK2D at AE2(
zoLqG^o60=9C)zp$f1hJpMF)q at zDScm3JgsWF87nB8d67{gk$u{UOO4#c|~2CS5?(-
zsNhi8)X$g(lO1i6G9Fan6mb at TpIa@%E9X2~^G!cu!}6k7F*jCD%fW2 at Dkf9a15mkJ
z+c51Iqy|}!vk&g^mARS?oTTMItq*2}XtPE%(xl^$or&Dlf0bPh4yBO5*W7qo-s^@P
zrTpZI at R|x=s{fa*Zfx*9+hBX%$pp?yC2+(rybtGB$IfB+r(CqNWjna(0&itjb9X6R
z at 2|47V9s(+q7rPrJCZ3I83^j;I*nvau<x^Z6~qmu8n5Vdw6zhp5E$!ilgpmF)ez-6
zuyV2ZETS{Hf4I1wPwU}%q97+{SY)fqL^dst>?DN`cX2 at R(S{mR2?nm2UDOMp80hti
zNw*l5LJt3zN9>Q08M$)6S<zq>fV`I at vrHKQJo_9i6~>9OasgJuhm+X)Z+z)ROll5c
z)01skG?bV{HP!zAFlpXT!rme4@(D+Dl<EJD`pdv&f81bHzR|b!YJ1Wn_0;Mf^GObZ
zR2xrkfMu0OU%XfX3tM6-b$Ba3yOTJi`}If=klE}?*KPR$j}E%n=Y*_G)O2*E`xRXE
zET8>f>8L6m1J67I)x{VTen{A)@HgS&eF!T~5ri|Sju88;#%p|ETv0+QzcLUJ(-Ng=
za?me4e<H~psoALe($*>PAgN=JYIemAZW#kCZzrR*64iaUKhZtupo3G%idoJci&p<^
zV1s#yj1%H>93^j0^zDjaZ$Mbis%@CRymf!pco?V98cLAnp<93XVP5##g*pJB)*)XH
z9%y<A<EUB6`g=c}>E6Veg&^fi>&)MV;@`((fA0yFH0E{oSf=9*DAj0 at F)<OIRP#xj
zXgcJw4w_bI#a{~*jk?!{NK#xd+rx1Jt+mM9Ite3RfCj?+x9yg;LH&+B at wET{)8rtw
z)-cPl3JK_tib}1YNvafU^R{!3JCdi3Tmm3HTav+Ino?)%bBptpm7S3t83`#aWhKd1
zf3HmN{r<66&$&8ME$L{<ZayN3!{c&ox{{tabpW*bCv}S}=Xw%Xysm1kOQ+=zcKZ@>
zyhJig4`P!Aq!;a}C#m9;^`;ah2co)jz%zML+ymvrx^!~lnl%8D2kB=IfJK2W^ROW2
zXME`NQhY6{82mBeGJb?mcSayXd9pH*f0x*f2}WSx$?{~<xOfirph}8}Qi;7SCnh!w
zxI#;XNFLzPEwD$wHWztLpX(uM@(}-6v)u#Iit2px>uG0sL at a`!0gZi0w}WDYMiZ90
z8k_Suh*qWFTbfU?%@oarV|i(8O9br-qe6)+825nl-_5K+7i0dzAF?9_J at eG}f5Tjp
z_T*xYIf%?m@{yg2w8`@yQa<?nUitA4U^K~M?*gvj85pQfzIVV)c)&{>XCSFAI71yJ
z-Sf1_jzP9)2>&bJB-)S_>}mXWdDBOkvQ{aBx$S5$BAiGlAM_$K9a=v at P6)B at HTiJT
zY)!wGn|A#SmU|e>Tg4Ij8!sV+f7CRua7m-qS@~O at ZEY;UA32TYT8 at r*=wzJLZp7kc
zAgPL9&e`rM^+z at UpL8Dwc{kM#uG{bQ<w5Rz8rIp+tPz-KcE!;5eveR&sp$P35^aO!
zYJy{l4S)4b7+Bv0#R|(SyTfD&?9Iufm at 4Irr{%EH9*oOl^s)2$4}4%Me_q*h5Nt#{
zv~pT$1ZA$Qj`%r|EoYcx5~T<d7#zUDiiHxPCGKVuA{IH1Cgt10U^%-W07{R at GlSH?
zL*z5{{~Tn$Gvr&q^gZlDVF<hTVZ7+UoQTE_v6KL!P3kwa(avgd5JU>zj7i>=yxBq0
z$I<KN4mEiM72u-EF|INLe_H!K=_Om5cpVU4ciKKipgY6%&W-UefvIw+5wS0rpg-zk
zFvyB5^|=dMR-~8+PGJ7*IvkM<f$(!c2$$8DfT#yJU-T~Pre%>p(>iy)bwg_c9=Zz6
z$sXFZH-`5C8y@^tWPvp8;~gFd{T(!d#gTZHSSe+k*Thf^t1wbJe>ikWCqMU|g&s&x
z*%r_D4YYGPAK<YD4)nB#uGPO4Px8xi(u}-xNx$`NPMYBFZVv3j_4REZw+R7%tJRp!
zyqNn&eg#TtNl#dgS=MV*FS^rQ`eOmdI+x9rGpD2>cFREb9h71MAL+sP1z)b;So=UK
zZN%iQAE-eKF<)XWf8T4Hi(Ap;BtK1IX$jr1B;ix~N?+=(wzt!It27D|;1|c&;!lBm
z^}3)Q1RBMyttc-b4OeAJ0MpQ<+|%gGiaA~?C?wcirIDSilP$Lmzh|z5$Q|{;78<C|
z<1cD_!8KG3JqvQEUUhUw+fVX)t?R0RRVeQNZNGjW1;vOCe=&gF9y-wP9j8LwC^RJT
z!lqHeI>Hmym*JRkMrl|()ZjsgWUO|<aBw|^FVnZ<tt{ha9e6QBX9bRn5t|eko;b)p
zA*tW=&E1d-MqxU)exb?zJszY0*L+(*rxm7eq^8+ru>RXl)mXoCvdW?r*6odY6_Kk`
z at l0$vhd|1Vf4aDol!8PXR~pUkty~%L-6gO?p)zWxs>z&Rs9!M{5bG@@p~g+g)pLn)
z-~i2P$^EV+DO3{!Z!b7F%k at 3N?!|%w{$?bn&#$&k;+hvD#GavSnhkDF-c!iuZU`5u
z>cOI4wOQe4_clzX_0O at i-^}mrl~Ne%(LC>U3I38Ie>q<s=}L*#0XAgWpCfEUs#VbU
zH^&RG{2;xXcsd}zRJL>W{$10h#P#6OX`keAfD}35>A%{>SCFm%k>xhd$p6y=a_sJg
zXQ{OYKaMTZ>3Z$XEVB_X58-sKT*UtN(BfF#canFvbQQnj$IP2>uwijBxW4iIri-gm
zm9wC?fAxvB=np~1ifCum##gbn^3;hx(_y;i5yINK2jDGQdqy|F`+VN#R1>pKQl)+1
zxa{IfybTd+eb2zWKPhoA{3gHvL~LS~mq-l~>}k}_jV!<_P2y%*i$Y-!7f0h>KS7LP
zA$$=Zk-MX9-Om`2%Q9Y3%0(kyKc2-KDkkl=e;i?UsUV4*4nXnde^KXjS>z;n=788{
zy1e_Sdmx&z<0Cl!m?{07%3cQCHWK)Bf6bzc#Cu at cNFrKsVdE=FDAF&%3eJi{k#!U9
zF>d}}6|9nK#2f)O7Bg|f)QwVd-Q-?LbW)cza{{<hfpCG47bZ16g7&bYqT^}!0U~W`
zf1EX);N<1Bj<vU;9Jbvrz~QYThtZ7Xn#yeqGrzOYwZ)*oqO$nCHRox_!~`R*l8f2D
z3peYt{4JGCW-VFTO at O;jbxTd#wF}Qk)=t9war%;l4JQIU02*WX)u2;~h1B$O<kN_2
zSAK*Le*>b4H at Pr(Qd4m9UCIV(u9}oIe*`cR06|2=dQH0`<cHr_pP)&s5UwBTTF+Z?
z9O1}&HTH=Dij=G|Qa>7oCT*YfOw+T>P;R(>hsLurrkhNxHzxB6QjJ_pg1Fxaz~QY6
z8a%(k>g3Fg&RPGoLw3+N>{lSsBhF{bW+W+IDF{Y&p%6R+od+BcHR2MuXM&^@f0Kfz
zGrUuu7vzk$a)NOglbWfp;qcyUMR8())egmHxf+M9s>@Cgy#Kecm!{%w{5EfP<4b$k
zM<g29HxQz`Hhpqj9+WN%AjrW3PLW*XpuAt#)D^@b<x_{TGkQA>H0=R>E{4K^)11*G
zCsj5j4^L|RmzN(QTldCgxabDsf8SdYafW|rebC=JxI%i;E=I{~@+sOGd-RcexfYtd
zzgs~*vj329!Ps7g`+Xb!qv*^5>ES-IGx)+0HJ*Jn(ee!n>Uts_2BcxZBI7N}E+&6d
zy0;uG-h(+EMjd00H1N`l)U2EEo}@&qYUAPpsC2{WfTXJNW`^WRG3ekOf9nxiz)6n3
zqJRdVbC-EKJv?2UWczwD?iU5DTfBlIQhm=)r4mHx&m;8lX9bvCN;+Tih at JR~34G|<
z$I=D~-I!l{N5R<dH%>t1r)s+7y*v0Wg4a#mEJrLjMH^{R+PIboQJF18fhc&(nwQMc
z#Hw++G1yRHYnBmr_Z&~>e~fN{teT%Q8wGmXv_zorLcFfbEA?OYOi(ObzzWM%u2pa_
zTbqd^Ld<5cYKP<#)^PVP(i<iWF^nH>EuZW*sZQhS5VF!p(!M+OH4ZzYwI-b=y;Rv0
z3LI^)^F=x at HnhE6O#tS4hEl5sNPiurw|t2&G}hnbYTPTml3nXNe{B^oF<!GLJp^SN
z?gyM^U$_GGN;R~~>%%MBVRBcNGYOA8zfV_>@)QkX)gDi9dTGc}R(LX|>-rX$+ZX^4
zYIP&GOnY&d5UoolZ?@zizjFtK=V$2x#|}E$eG95c#&0X72b7R`YWI>@ndRtG8i0U%
zO~i{!T|F{TbCVqKe;d3KMgbxX{zNBpR~!U5_b9&F^r2C-XCq#Ip%xxTm0jHYec{0W
z|C0B6qvSFP_PCE%0zf8mgBjg|VN&!&2}t|75zTYr6rGKEdc+vbE8|R7XqDJWMYbb6
zBR6s*)``jLwx<Z+VJC(93T at 3+bOD7P1pY|;-|Cb~4>+=gf4SzZEwERQvfmw at uYgDw
zU5INjFBwk`dGn^&fQseFuW-MykU&ub1g?3E+{s^HKylaF%scDTB2*gp<{~ENN9<&&
zpir9sOXrMGYJGv0`wN;bcuwz?#9~sRAn{RQT{8dZiev_SIor5??17f5d?D_~h76Jq
zd#+oB41LhYe~c$LuNQmDBj=YXOFn#wZ{!BKIIePidhr5?77Q#*Zi&CmrNB at xTZxT@
z9K301)htSk9Njvwpx8dTx#rVShj5#vI!kw}4(N|Iwoq$R!eBOFNH>tO{F?h|mucvt
zz*w}hQv(#|+J$uf-$eC%><hh4tC7KPWH9y(vY_%+e+C5{If{Xtu3?55AZ^(hE*)|M
zIK2mWfQh&!zA at -k(k}obg&HEVTdX`!>x4WQb&N3YPzJuGuAplO`1%w=n2gPnkTCb|
z+c&XyGY}EGR+A?=U`JfpFXmfDM|Yh48rI;DO^TRiMFqQK>p%hA8FAQ1b@)A2YL5Pu
z##podf2GkrLC)pv(RU~trLZhll(GluYRRh3aLz!RzC?MRGt72}V$;c={-(%Tj+n&A
zO-?ov;jpFkbSkh??tX}t<HtuuUS1%F6Q<({=3N)KZ+FIUZgbWUW$GpVQ{708MLRTD
zONBgn_a$-(tFO0^M0ndZ_HC)L at QSkwDc2q2e-11Sf5-k_yfwmixalT+AU^S}3YpO$
z#p&F(gST)<*_3$AMr!i4Y3&jJ);&SP_0*+UPXcTMtY$x{rpiV!^mfj()h+};&@9_{
zrb9|fj(LW6eY=?cNj5<tIS`wNj_UZFzInf&NEvLx`a`qcV{$c={Q at 8+EJq|^1i}H*
zf0Wi_6;9|!&j2W&Q-Qi3k`i7j+kweN+${jE&uS at wofA({tt~fL>)`K2-@!5SGjc5q
zFZmrj$W2AnR69CPkYWh+e0_W1#j4tKyeN&zGf*ZIoRztT^t2dJ at BH;v$>0p8WiTlQ
z9Eb#U*88g=OqML`eY0bmAjmCtlpAlpe`o6>R(k`sjdQsXdO5q5wvxe3zZMD<EgL+j
zf0ovNOtIc7V(5;#9%In@@3V96qDxB$MDx^JN9M4$n7}Pp8J(ujK^6x`W?v>VGg1q5
zXXN5?T6~@2OZ(tQ`Tv6a&SP97*(pbN^E=e)r`75}Ab%BYr>V%Q;?t%_mT(J|fA0-i
z*NKx8RN$?%EQtWBaMQOh^e at RUZ8F^NINBZhiMYqPQ!~^5nLpK(dJDP^9=?>A;Dqcu
z!=^he0A~|FRU?!a1aFoFT@(cRy3WTY?W~&%hML-L at A<ICeP)O8C=_~zI<R}xFJ3v!
z7 at 5@)BLsNpll-x>dZfBT&5T;)e>4(GU{}pRe_Y}IxJ+3*q^;}60wD(2{C6s%pJ?fI
z7e=%W7*bWzr at Ke>%SSC>T+HfGEG-|byex(xJk)nLrq6_Rp|M~*G at _rh9b0*9O>jP`
z5 at 3$MnuY^>FkGvOK!Vdd>3dp)_PltOk>ZTfP&ruvL2~6%*DG_HXppune;^x43@<l?
z;CXkGLCs62Id9K7i0}B`D%>SI{mO;y&xiazxttD_ig4F6#plZJnzgdU!pADK)yrls
zI)r(6>KicZ_TCL~3Vjd)AI<3PHK8v^C9L`a4JLk<A3t<pI;J~9)je#*-AP>6?%A-2
z=mhLTR5DYi><wn~{0%6FfBV42O#V>=ISbhF!tve-IND6SGGst|;kB(8z|!~nU;D`z
z9^7f*II-i0(_HWI4)2tZsv7^7lpAKR{1m8kAu`yje%E*~jP;W(CA`~M=Sbl&ZtW^#
zi9xUT2}^pJaQ1l&otAoF9l=|j4uc%A)rIAN-HYgAec37`BBclee>XX^>giB+-W;A@
zShGD(dX^ABO1Rw1`Q1S)ozXfrQuw!qvA9kAlS|+mHQ?BlKd7#6DfXyA8iVhTB!=k#
zY^Q*=@2t-1oCj{^@sDltJ9AS2FYxjiU_|OWdINn27n6Se-!sH7smFm2Mb$1M<^~aM
znOZaVz0z(MC=q6*f7`$dqPNcD`1g6+cJbcR!JsakF^Y&{DHBp<0gQ|q045Wf;4w>+
z?5^-wG+<n(pY8&L_7b at G?C#6hKB$rai2Kbepbgm%?bO1{^XQG|+c6G^gpdGqyB`De
zXX}}-2f(~csKHetWk2cdwK9XbEMvo5<5HtocjvgLe92)_f7!&@`QU5W-l@@d2My7Y
zTfWxr44#|9mpZx=Z?}2COs-G8%<~erbR3#jFOM*DYM9DOJ at SV!MV;`H>8)1E=z78e
zrA!)-&4Y8YI!D2Fqy;=6U at EtlxTDCW_k(#;q-;x`z%_?<g+Qs|4|MfBJC*$+cy+<p
zNGsYy6L|m}e+9S);BU>03GXD`9k7$<W}`b`@MLMn-9I;8js|}GWEYIAFHN-YqPG*o
z`M#DkX$Z)1_Y(^*73<oqIJ`GvWA;si*UBf8xkgI}#ym7~ATJ0_x4 at J|wYna)C^jf3
z(vYpNa~Vz^gpGfZ?s1c|D6uBWPS+L*XRS1F51>j;e+3LiI>Z^~Rmx98zy*+ at OiJ!;
zdLk@(@P at 05!~Ij@|9&vKbs1DM9UA?8ubkan-c3UD<;uG3f+$WYw(~nKNMKB|S3)S`
z?gfBNffdR4fCIm_&LaTHB)EF}60r5NN5Dq4!kvowu at On=&c)JS?X(8DyK`%mhr>~a
z;gQObe;e8_1D<bD)yrX+h|V<kq>XT^#q>~SxPc)qZ>3JREo<H?K<oiwMp>W$freCt
ztqJW3`oA&p8?}ZxW=CUR#O-nrv2jX~w>5PFmn#<XE7Yd#j6fdpirgfUY9bd_NN{c4
zy!p24T16Y<sjtvNh+r1RH(O6UUX~U4#qRl?f9tmP{IM`wIxv^zS+ra#R;w6D-+GrF
z9MNbt_N>;ZPCHga#L!(?T8B8^d>hT<E)F^H6tN9TWT7X)$5duz&7SN#UG=Kt4jEiJ
z6iJv#W27heQ=Em_-4jBR9+8Frz4*XRE2wBGZeO4FwqtV at 7dwP@d;uZW(_5Z10G%4Q
ze-EU!{o0+PkW%V>!0jwQ9a2!IkN%f;ouE+Td5|t9T(<%O*j|LcOYb<$=+`UG4?ah%
zaw_s!5Ey$0_;~9D#B-PP4k1#*w~~rJ8x_jYyU|^2)#0ZO8k99>=0Z#_nUtvVKs{h*
zbr1)k5FL`^?F+%xqf?*>@vCWUSg?WkfAQ~K?LGS@(-*E+j*kio>mHjh{mb~<hHJ$w
z6*wEBp;tCa=4bw&#MvRvaA(qSQqWGs1!rBwcpIn}mpWca%|d3>TAvEu7=In$JA-H_
zqo>|1Iadw$0>|NN#y=o<yf{Hnl$8S_foAcU6-Fnei&>k}DtwzhZK)D?P`U$Bf7Kw1
z1nHKL>_r7i?Xj0B7ap>y{bMh{tVJod1#X`5fneD$L~tiX8~4fi?~OrckimrF%(y0)
z$m+6gvUt9Q6c9a6+DF4^vdKQYGqo1`MWwgvf7S&H;nD{V2ldwP1ecJgeVg4VYcx7P
zZ>vXIv=yw>nH?d%3-$j`-ldy(f0qT3I*msMCB-8 at UVS_{Z~QvLap{&n;~`3u<!>yQ
zBxI^gIomX3MF5p+OGN2GoH|o3;yO0czvB~^*j6 at bookAs*OAxM-J;CEGQ~d%uyn_b
z at 3d^JAN}tUwXpSCy*Q(?8xv!oxhiX6 at wr(J*tX-uhmR#O|H%<3F%2jhf9i%jaL5l&
zcSMaqRAqEG=M+t0s1&udPLu1*-0V83Z(RH5_nWBv at gd{d7V at 7vjJ3L{6=KEi;tI79
zjM~@`C1A(0z*FaLpg{cATtZWpIwq;av10d^-LSvBH!XZA-2yGl9pjo?z#7z%YQLw)
zKN+vF1l+=Tc(X#^TXXN_e`Y^7;pXHDQz(>vL3|0he2*l1EG+<SokxFDglb=f*bZiL
zf=aG}O%k?)G*C1Y!)YA8XjylvOP%sFmRdsn=y0%aQ7FX^f|Oe-IWNQFMj{g~6H&u=
zkgh8I#FkM<#+6Oagt}$~ut=ajYx}Ph_V0XCqE153sCJo(j5DQ{e^w4y3GhWSlm?+D
zO86?M4dUyBLv3Nq=}~6Eq}&rOaIa)K%^4UhNoL-___iUDIq9;_Gv37fDiGe==+4Rf
zu+ktO#*82%@~ee$RfS>JpQsMd!YO=+aQiQ+blN?vYV*QZMk at nayNOuHhbnVcujB{Y
z1%Sh>c(FH|9BYAFf83+CTERM+8puB1FVaZ`uJ at P;- at M{dCKT@|DXn2rJ_#GYPT={#
z+!AbSMtfd=f0&wpS!^NCpi1jv)o-M%U2OC4R_6rfDkr6n7|vBH2MBl<OIVX7{+dVg
z2hneW4?r~XKBWKSNY9*S+v`?;)zEXupncPiYp83n^f%u)e~a+dDvM)Owz#uFtVUo*
z#^MALu($PEVGr@;X7HN&Nl>u7)fe0DIT;LPtlv1Y(T9L at P5Qsj`!bM)NX_PUYhYm7
z@<ekYd~44qD<^|+S1;~w;>PGUo$_cU&%lH9i at nb24yg-1Q>z>$e(%%!O^BAVfMd-5
zd4*zV4d!6xf7B9sRs)Du3MEm8e(1d>7TMPhDX)<ihL3su?gcK=n|-K0rBm2>SVdZ;
zGIDp`x~p|Q%xCaw<E3BCk+K-66!vFjUstEI&#a=J`v}g-{CA1ZJX{=s;Zh^<Qh^e1
z|Fi2-aUBpTs~v5!VNBCwa=>O(WT!6hfaTZKBu!xhe=_CdBP2b2Hp+uK7fG;_A8RIN
zGjFb|+K>+Wn4 at X$8Odts4XK~+P2uF)8`N#^8u&3m>R~5AVUOv2fjf8RO*_U3TSpgW
zUtkyu9x=adpQ?S3C(trci1HFbN~X+~ZIhk#>e{s|xGdkiXO=Y;V&YA9l-!YP$by+3
zXXPg4f7Y9|dm!o7HbXl9rF9mZH>M2R>w at y$c$;bM;AoLlWjxx>eVb~<n2d*3SXiXd
zh&y=_C4xu{yVoLzL-p$TW3wB;>kEK2O%WVA0-%f5EyrFyyi1rkg%4&C10If$9hI#)
zvwN~Td`Ra<FMk-k6SViFu|IVEqhp)I;n&2te*xdGy^T8 at -)vecYF8HI!**<{rO!_u
z^hf=@_zTrZ#O^aY<IP>8G8s=ysFv=^7~EAukzz~&VcSg|ujSN7nm-s_i{c7_S|A3l
zjKHf7Iyg`ruczg)OrheOrO2Yc8{{VR at jQ>X#`1sb5s@!LeWRmg!HWrhNWYJD>nwF=
ze`b?2gz)-0D|NO_CrCnvCW)K&Uc1Jg4}u`TWa&w;H)5jy@}m;|q)6d{D8H at M6FPBi
zF=1+=dTp$3eHB~3G`yy+*1F!49{&d6dUe2zc-={V(@`|Y6Cq|250HQ+BkB!=gT!#|
zlDTIw;v`!^ec%Q`{lU`j=KCHy$Q29mf34%TUxcvGG4bJZT;K!%jvTj`BBjRbR6jp`
z9d}F)ZoN5p#@75P8m|^YxlJaUns@>pcZt!O3`mR-cT$X#A?P`YdsaVZM0@&4{EK68
zx4;rOr!D$XU*;JKfg9r-D<V)lYrCtC8HEzWOVapS6ETFVYHIn7qZ`0A-t;t at e^_H*
z$)v(A!-qgI-<mUz|4PMHyf%0)k+~4tn)a`{bH5MQ-Pd;Ib;kg4cb>^&+tru{F}*D&
zF473mNS#Gf*d4TO$Su;QwD;%BQ=+__b1KMRDirV2h44T_1X^iU;w-5d%Y~*{i8#2l
zM{8HYPzRc@;VCvHsAWx>%+L?;e at d%9!~8eWUIW3#I=zV0ML_)E2d4R6n7%a|&HWmY
z*b902UfU+uMgjJZaBw!Exw%xtTIVoH#LOj!A7$LwvrylSyuqSgD9Qy8^eM>-c5qob
zGOiy#kAu+ZDEV at t9;i5Pp37NL0r-?I*2~itpK3m198sKa^f7V8&C55{fB)1D?zZ6)
z6V5-hkrL~{KYM~zGI|(ZLojKxN^3*BDzAzSdTvRo*c#fxhQcKLG-|gzqx}cg#&!>^
zJYbcVvJ>4(JSm7<H>ga%Y^gqwbgDgD($E!T*I*8S>+yI at 2Ay9WpZAs4gBOgC<@fc5
z6{wWKY9lXtAY$m3q*$!Ie>FG>m%9b|$iz#5&_G6c_8cI?d)QKP#&bn1J#IH_i3UO{
z^2mj5FClaudiP{;1wsX%0Tm0W3QF#Yk&(42?X}*~Xk}Fy&P*w3DIt- at t0z|KUEcR$
z*B}yPaoRkw;=YC2XuE*nRQ*8Q>IWW=tcaMtwJ@(46o0 at w4Dcs9e=K;0?33XvYTBWk
z12hJmSNQMWZgz))L;YN(EoP1GGpD`H4v{z+CByQz&3$Y5q at coA$&P$$_xo7=K7ay?
zH at PomAv9ZUc;O$Tfc2}(G8h!#zYHKw9Sq3y*<A8gkD1Rb at X+cpm@xGa&J$`j2$3od
zycJ8v`OVW$!o3z?e>f1FK$oQDdA}|*N=%Gl&2;*qHFnj*oa`=zVw<$Fs>T^E2- at 8}
z&EgtpxnE;-{1tiL at jdJWc1<xpb`?Qy1B*;L?@D~Gy39%htQWWE$%Q^ejq9i|%7D20
z;!U}eCAXrdVe8X-MkB-_O)h_9!{B-+2K=<bkr&fi0UkHmf0LYv<0%u8o-PiS=t`l@
z{~GA+Evoo>mVu-|1n&q1-rq8B#g#)k>qMQg#AkBEy?M|7qY9_Cj2Pw%_Yww9V-duk
zB|s=|xuD=Pj(ca^$&E62*CN!|&psaIBLsb3bWTqnIuw0mSX at PeOm3M+!7McZ&z{Wv
zx5#_ra8h9ue^gERY*Qu<%^X%+V2@^fXVIfhR#waMv!JOqMP!M2je5hOH4Y_40ou_k
z(WQmxD-hsotSVh;tdC%40hIk#{PHI at o)@oXp*ec5YpAmdIq?GG;@|7?T75l*-7?6m
z7uPgvKJD~cQ`{7y_CkErD~MMPKmb&i`}Qtxr%*^le`waF<ewGPUs(t}2w87g<Hqd1
zC#W!%EW8BWAV6?%aw`(J#x+oB2ii=R>K1&}a7YSCK%7-&&3=pZc(jRc#$JuB4nNs!
zoOaLLSD~~-FeB?Aaf)?I!xnEN1J3E&1JXJ!_Hyny`2$%<dL(Y-3DdqAiX%{=3N6zF
zpS`JVe_nyaL6XzDjsu8z^ISa57lzQom*LXrXBNM-&0elW6D<mCW#z<9@;m5-zbq_y
zRWbqt_UU#zNXa9E<~I-EXYUy%Y(H~5ugxhy2EwQ0#6h^kg=2gNsx2$9S+BQeNhu0T
zEv?-Gw{~$7EE5}49pdD2$OXFZDvR8*;2wAJe{ln+0pFUJkwEa$$`M+~7UT<JT8R#0
zpA)PG9+p8r65>f at mC$Ez%eP8Q84&tRBKF2flXFBEw~||v`K5)NiWIGbgkuXKbToqF
zhy5Y|ESa^Nt6h?<u7(I at 0=7iuH|h!O=|6Q}l3#ncy09$t%gb2TQXrtOoFPGViPB{^
ze?s}=SZ1Q@=8Njkn_~r?`AXZBtln{=`m*>2Oe`GmsoIg=RIR>jU~SK2Cp#dynvy|p
z!(-iKJTZxWfWrOK619?*nyJeHarmvfw9A(kmav_ at OmBIQ7vH_`xCmteDJ$O2VZrji
zviE8v5e!QG+?0c~6K9}Ok~Y#xb|Y9nf7^EpV3c8#bTptoQ|5Me7s{<-3dO|?4azV2
zT&5A|Z}7GGQ96{D&22}dp!n6{^(OVV&m0zgsDekCRmSDma7sKua&77C7P_ce{V5s;
zvda>bE!BX4P!hd(PXx7(ctRc at nsv-ZHgHbQU)k+3iP}XPjiDqp;4<B9w)p^{f9_Yz
z+Ba}UQ9d?cl4By2EV#F>G=isaiGtqTVvtCNG$BtzaCnzpnq^iNeaHm&Yx*@n3LxJx
zs5bHgig;URI{pq at RnpNMr;FU#8WGiB7I%HB_z<ePr0p#25U;0 at GSvMJR?3Wx+ at D?z
zRCu+3XT3ZrT~30hw!TRZ_aW8Re}oj4gu`|v`c_6t2j>h3zu1+T?6y5|*={J~&`&f~
z at vTc=Le(Pk=?!fuddo~9<0AZ6j?jDaP^6V+z%y~-C_%dbs+bb_>Y<7BMYj=>qW&Z(
zd1_jGHbgAr(_91v%Q6t4Oxcl|@w6Pap10j2>JMK at b#mM40KzsXPTaNhf0}kujMXc?
zNKLv%67w3E8q at PJ)h1)&+a(*mi7dtv{#;2sky6gnx?6A8O_fV}6Xn}wy6Rn5!K2bz
zquq~ivKG+FLt#-ZbyOn;7LSJ#JC`?m<sJA2*!YeX192$|mIyn0c=#Ijeaj{j2~H?_
z#6c$i&UNvITfC|zwk>THe{$2ohXH2KVFqF^P%CD>FE<&qFNHvn6>2b!-7K%hu*MkJ
zZFsV(@V%Zw^GJ33cqf6SKyV}Rh^d6|FXhS`hKys?HNJ*dyVz%9JD%k!7 at I&P>u~++
zKhq9suV1PdH5CimKhV-y1qI#NBESj*ru{bMk#&nT05Gj;5y$APe at lw7`_!XS>-;;o
z-KS6Z(7J6VTC`Vwe*{7nAM(N2uN<GuRT<-irHiM4P$+j0R0D;19T$9m%vM<@J-rm0
zHrvAJtLU~KUpA^(#m^ZeKxbG@^;q6Gj}?sA^YjvjWQJW3JFM2|+H!2*+cI at E8~J}3
zzmK)N#Ov{+>g=Yze>4J5qGy2!>3N`Bpvkx_>Z=&D|7Y+LLvd{L`%Xjpc#IYNJ}~B*
z<`@;1P<c4 at LAdiVwkTAmtTZ1Ng=^9tKto>9=-m+p#wnX&2|A^Quv!v8!fL9Eaw7;6
zCM?6?dH^<A>Y44hxkv>UfWxhsUA`0g`BG)6?NvBBtK|FFe at kBoTdOLqg?+c#T86Jv
zy2D;TyqN?Zc6SwI*e<<F+?RZj3%rHDB$&)27H(1e3GMCc7~M4(MBVr2aAy3x)Qe6~
z^g}i82lg*YK0DgO&MwD-ie*(oB3NJV$8ITX6M(vZniNueJ1jnyPpPLKOM at m>e}96u
zEvBcz`Qj6^e-Yha0vAKH5_b+15Ckd`teEx=tp=TKIDV@$s2 at Poc|ER7oS at bm6kmj@
zbxD2|F}y$s+6CaL1b(`+RK4PBn=jLvI0%T})}Hl&+EWH+z*8VGQ+L*!3*7B0e$}X6
zMiMu%X2uw_wbPDp%`e8mGWD(XG~QmP|HV4)>!sugf79=LL-SklmleaK(}wS>kd7&k
zFML+XO9g3<0-5hhd|W3K3rtj(-D9BI+%lt<Dn;(O%8G4KglKA)fhM=kOvO`ekYvXc
zZZZg0Yy4Lt`0pu&(iv8y3q)J)KwkYO|MrsaEQHx0q&10;d#1<<L%Y_ft^`*<{`nF-
zcLPv0fA|Ik5Bg>rlK0}>m=0`IFk%E8#NifXQ@=L|@SRsl__~6xMvTQ(AaB#b$v1mw
zs|c$e5zppm4lTWA+uHMSZ%4|p9<?(Lr;JL+#OqP{v3f$4+AkYgTeg6gfnV6o(G_B|
z^~PZar-%ehv9eG+6^E3o!g06!3QXBlM(atZf5UWxGPPWY4Sz1EWUiI05Pe<^%w=ji
zTSztO_f9x6gLtF{WG3dvn at 1$2%oJb|NTuEBVM;poeaPECuX_lVUQMMJY|_lY2Bh`G
zAL)b#drd;%!xW at A?PjP^4V?8$DE*h<KE;5KLgCP#i0HFQP6Qnu;RfZl+)BC9h1X=$
zf2t7v>roI-KU%Ta<%LOp>DNVbmXcm{Ro1r;je<C#5;XfmHzIS$41|YXWc{3H<3!IF
z=Mb9;zaE+Aos#=HE?zBl)}YGK$$n8i6MogZK5uV2mkjhm1xw3gYr>$uiZ8~o39ng}
z0UDpY6O-|=P6Zcapl65(ePD>;XZ!oZf71M3!KK5lYrk35Qz}E?DFP}d4`r6Q_pM8f
z;9b5*fo<F6g_u8Hs at njEZM-vm6lZ2%{#T=ffWT=#J-DW>;s$h=u#ZxE5c1sv at Jb&!
z7UoI&o5vGU2rZrnK9@|&)>`ojhCm3umB!tJkgZBewcyS*D4KY0v-Iyg`H<&Uf7n#e
zi6)Kt#X#h;*Yojc<I?i%NdABI=68`yfx at dCB2uX6?>t~Y4ju0y)L(K{bG-%yS<{SQ
zcoxKtCVZBPdbDWk2_6$*FgEB*Q`5b|2I_zEaPDLD6k8YR8YkV at i$sgc?B(OMS#=X@
zO0XH`D*Ra*`DA<V2M;}rOqhluf7 at pl{E6l1_p<CHsp0t+Vn4G_=sK^7>a!sg2?i!W
zvxuN at 4V=*fX{;c%K3NEuxn{;3X(CdMmCT>B>LQOw(M32M7eCgMvn-Nu5Dbc_u18y%
zwT1r#Ba|#Kyx>?ou at wrUMrv!ODq<&_xUh_<bHGmH=0zk%Cqz0I8yFWHf1Qh6?kL<5
zu`!?vY_s$qgd_G`ZabiTt!;^$orU7Ht-}ZB_BDwF#zJFiBw9mX{b&<m5|*_QEU`Sd
zRI*@f4fX;EN4+ at rOdUm5d-)|e_rSqkX?hRAQ{O%y3^%H!jDIE6<8_E``b$&mo|HTP
zI8~}dO#d>U5o^4wYfO_0f8Oxn>4 at -qsYiWR&yu|9W_15#H<vuTX+lsiHahNiuP?e^
zupj@=4i8Jak+$=LDQy0*QkMXvl+HBk^f+$q at s?!${<ZT=?1C#D{uvv#=IhJ|&W}R&
zamD~%CCKt^bAq=YP_fEMb`_!(5LjLFBq at H015AXiRbW(S`8yCye;=6y*Psl!j(}^w
zAY#{bc!){99=q4CqYUi-zlX1o&I!49*9u1i+u>Lo8wgR9Iiz|&kek01MI9>Gu at i||
z at c9-w$mw7mu6rJG^r`wYuPxhb$`Z+)-Bsk=bOgtcCF$T2y8xLE7=et3(^<LM^G`E{
z0~=?HsAszdDQ=31e}edfJ`!_9?#DbTqi8W`JdvQnPZardpnMVtuL(e at 3F+yj-33a_
z<8C4vk3<Z7Y#J6{4O#Bz+0QBSMyB~X$R*2E86LBbI6H7_nvx?|&-Am-o#p+X8=djc
znWF9z$PhWhtA<@;?pNrMUOAne at EQL`-(IqG6%%}m8MG64e{ZfS3(4x$8Hd&t(5=>^
zOmki?a41bjBuL)xWAfPAPH|1-5rD8MOo;8gU4b(!Kmz2hD$7VXwcI-|IYef>jkI8b
zu5zQFND3dTwAaGT4DFWL$TA+6B6Dx8)jl+a;j8fISs at C2br}sw*qgd-QC6B+%`)Nr
zSh{seCXTpoe`&c|&um$1f7C}m00Th$zxi<+H%6SX!;B)0CunJf$S9WNNCgAqAGRYd
zzxu~AJ9d|YgBJ9TsjQl`(B%6?b=NiSplM=7KTb!EJRg`GG*#QH^FD2*;mQSq*Sis+
z!ol&BWL8353}E3{>?nfl96o>fenFG}K+SR{#V9Q{&m(aBU4Lj^Xa0lqUUOYS!kFt2
z^@fsk+_-PRH%Xz5h&B|Wk<G;_4=A3OV>yHe08&hjA~IRa50>Kxj17rXG>$5eI88RL
zYmAv at 0FFL@9<kAlPeAjY)%cTb11DyQFZ)vP0lFhgxIGHKN16-R?hHzJqs*NgD+;gp
zaJ>I<7OG}w7=O;x)g^$6?8y}R2?^((qHt<-m at 9jdv^y!b)H8+n!ahLO2Kx4(QvaN*
zrh8Nf>syj4I94?RAxH*Uav~oVn$Hp(rwT0wW&Sn^fK+7seaJbo1`A)kH3Gtn(Nbo@
z&05$LweGX_jRM3daI%y=4ng%iO22Z5MggtxJq34EeSgn?A%*~st$|p9WsSX6p>e&*
zj9AJ(RdE=-#>`4C7~05?LJ#oF;>ur2*(vn2rSGDU(}I)aisb{D*JzsMtVElSW=@>{
z*P#eY4xdF_d<(hFdcBpUGL1XzU7gE$;skB>PKScw%d6R)%`31!zI8jG6q1wBosw<_
z!nXWa%YVd9M8eJ3j8zxwT2={HkX49;q0zJtcm19D>7{97(?IXU#6~l_p^<i~Ohu2f
zE3S$#gj?WyZAUQBRz_yRax9fyk6U2s=IqlheTrg5ax&TINQl9LAdF`HI)tB*lLK47
zWZ*Y|QV-j2P$5HI-_wr;?ju7dv_wPBz_oJ9;(zhVB=f?=gmTEuj?$eq at gJRiv_vX!
zN0v?SRL0MHS%KTw&AKG<_Y6*`Mk*}cUZOUZPtg{^_1UCx0B}Z}Rl*Sr&<i&<i{Pd-
zkEw$49 at L009q@2hHRS}vm|6Fel!X)Lh%<Bj at N-FY3Ta=!#8ke~^`qM?8yg61&6^oY
z{C{K5wyV_RVa(%- at S)a&Mvw7?ALJ=eJwPEA`?>C>Q0GPZy1oSmFcaLXv|v3!2TfJ<
z6ayPM{0cPdVcOcX#hy5x`&FvQlbE}#z#ytfwP$Ddv|yNzZPWB}SJgy{9cbph2wlnz
zRN%K7Y~^JXjuVec;14r#wJ{v(FpS2{MSnf330LnuTTecAgD$&`VZW?!1NWy{S{{b~
z>0WU2V%Pr$Z!avXj at 5H!?gD7?0;975`V{6IlmHoXok~QT^-+hwgJ=MQ`x~&S;oLC`
zt5TK1DvI9>ZSsRidygg!w1h?5t;Gtaze-0qj;3}Vy>-A(Z9)-$3NfWZ=_l1$mVf*n
zuHyvN`oX-jKm~4p2exAFF2NYk?3TnEZ&W$beN!Zc<Z;aLD9D9P+DGIlpF%Dp&EUA~
z$5?9fA}!p4MWO#ar*{ZZBQ8%8DYE=u!{SHJvz**dw|m}n at mF=rT(W7fB&%8e5yNIE
zIaufz{HTIGPHwAh#cvggbk>iGl7CNJ<O=ACeEI|x6`yAe61zsYd`0ZY-{3Viii4~W
zu8rt&KmiYMMa}9Q&xc`DspQi)7~GPjTPHuLhUvR(mycj at tE}uI>ze7_k`-DSA7cmF
zM584nth6sGqv?rcOzc&(K=xhE)1d_QED=^jkv7^P=>f)E+uS3&MV4hR2Y(A$fV-cn
zl!6?CkbiU>s>zh)o)mVonKaPdsZ at 2$TAN9a5DGs1x<k3t+WMDNp~gYYkG-=iQi<2@
zfIDYfk;rq;0E~+*-Qh#z!&cXU#S*@OhwwEu^D9v;@tsbcPLp;VE{B$F(!rrF3V9O4
zV8-9`jUnH+xOn2&4>x5LOn;om&2!zcgIwDdY)-+1iQQ<{xa~KD7L at mIQvW*hxZSJ=
z_g`#afI88rg0rr^Gf{uk-Y&u+Kt83_%cXIr6<r0|&3Qi%qs!e)IN-gUA?Abh*_WoV
zW!yGOz?fiBRj_pLO*%yhLI)G5$aYcFq05d}NwS(|G*~A47pO*j(tpTOfpiE*?oWg3
zD*;4|%u1wZYHhFJk*w(a>q_Pef{k at FhtTU_@ejE{phJ2A at KG+@ggX*AwnrMnnuAo0
zE4V#J99D#bRXC}Dd&T6&1vM#P+z;i>nY37u+ZnsHcwd1f`y%x+uVHRClC<^k8uX)k
zPWC;y1-~mgzSr=q3V-99UoPl6nZIW%I6-E?xcs%gCY!%D3Fk3>DZ8jxJOidZKCm&G
z^4j}LwgA$ACXtwtQ(~SawuZQX@$6)r?5~uw9M>eHZAny~O!&+UK-Ie*2N#$iWB$ik
zW~X at BjG%OUsrzy>HJ5pBD5WI7ks(e``p|+qp>KEJXx5>O7JubfTaLT1#-J)d9+udP
zdPO9B>IbZ?!9<vjKl3;B<pebbZUJ~kQExJ?6kh>89#VCG^$QG4=7RIq)QFx??_yI?
z2kK5fy@(kSylB)oJI=VG)wGP&+2Yn1?RDiDnOFhrXgm|k6ZpgDxVg$HtA9o{;)0#>
zgn!;06T6T8?tf-~b9Lx#Sk6dld6?DyrD5ViM}yLX5Ob6&P{a4xhyV;J0BvKXG^W)j
zg*D5(myua9x1&JeQ(|b4T(&ai5>$j?LC)23t{T)~sN05!a%HLMN)9`HwEd!e!C|lh
zN9rQ)@)PBmVT^Kcnlq;U>Ph at fCWB=dgPx|qXd&7{r+*7tav$JneScr=inuO)fRMJQ
zB`QbVJOhg?WSVDy$$RaNb{lOX0_~!fROR?vV#T7x;5vqzvm}$@EO_6)(!szuX*4P#
zofd%oN4?4fPZI?L;w{0&sq%>I%Krt>5s`Z(imx_YSX&6!j91d8{V;F9J>izQauvh7
zdRX5v+<!Vs%?-3biXj!tKGXM5zAs9IfVTGA9`j8OSPiD}B&7LStO7GteJ>xI1)_lj
zCU2D`1HhG-Mv+6rp4YcLOY<Eb^Lm1niXsPwc!AfHwMbu!udP$yqezAgegl^zB}99f
zp at 0v87Yu~EkJgc}Hz}O+aG)<4f*uU4T7bdo$$y2MD-*_X-iY6YC6)C1Pv-^j(OAwp
zE-HRF-WH(1?oviBU<O>?p(kdSh6);xB|8EIX)?zIH38mIo@&~ylla=r#0@)!%@4n{
zC;0KGFV?X-m1wzwtOrl(?N&@S%8VgD!|L at +)95-4th;p}!U0CpCjV5Kms3cqEj*dx
zsDJpbTz~JDoT@*EG^-Hk0W0HY{zJQP*y-`~ZsP0X9coYqd&fL6-!id*9_A3-rPZ+l
zX%;GHZ}3`3I<gRs%+AX_NLdo}yhw|Bn)%6l>0EiquWheQ#J>@iotm|9?TNj at vV8+V
z7b{(6AsZ#=&wrxzv>Gz at e&IyB!&Xwf%zxa(7I38<7!cmU716(yt>$^xHbVw|Mj1rv
zDt;V}x}obNf(&ANZ4;9Zkp|)Vlmw-}{S9PZIc>t<X=egB90Gfaa`!@xZtH(5xq}iB
z at l9}476u`OmFv)~TwZu^7y_7dO+5pA9==_O$4TM*e5qXzX|@(6Nrv8jh2ER_ynhEa
z)_H at I^{FuKbX3eOen5<wjFG}6W at B@u8+wb%wQU9F98!Fm;?$ofa+|-mGhwISv9$O|
z5s8>{(~Jzk)Zci!SZ|M!%nQgwo(fq=O%EC?>^uDzu0sN+!yakcIVq=L?q*^hBwOWg
z%fG2{POQX(FTyHNEsdd!FCboaq<@lhGFaKTS?M#BU*~XXoZLWHC9>6c3Tn07TxJOa
zTvI8Dtla0c%2>DJ4V%EiQ<c<CKj5?}gvt{Lv?2;f{Lf)VJOJ}jsM7Te6g5b>=)2Sh
z<Tqdh`oGwJEEOpRX7r`>WwR*wF3g6gQKJ^p;{VBK+#-iT<GG|LuYmbrO at 9PbxBegL
zYHTsT2jE*}3<|62&Y-c`(b9-O at d5;|alB5n<P47uEed=>>MRbx0b(>;caA&Y`C>X2
z6L(bLVXxTpY&A9bzM|B}TZc`dcYHsT1$T#<?QtM~K7e@>%rHlDn(rl9Ou7r#m&qvw
z%S{n~l)A at gC&m^|grqU^Vt;y@<R8ONZ#}OaE^t4RAh?Ep?o_3KqrK~bUMEAHc{QB7
z6_7P$98 at vH$ta6Z=Fk8vbc9TP{|A2Rk}mu`=KPOs3jr*?{!HXhZ%+l`^Dr2l&b5&#
ztnM(pUY_}&+Yd|t9hai>frA|$VyR!%+*GCUJyq+LSUghZq|oF-oPRQg@?cVH^>49d
z{o+d&6H}%|11-t*E~VTY+bz1PlCFqCr%u%B1f$Vpk-9q4J$q2S5pY6#p751N3$Twc
zf;*CMnTcGjB}b6qJ<Z8W^Dk<b<gJ9O6vBJJ%_gi8UEWvyxnjV~frkbMzl5FIhnivs
z9IJfJXJ5h?5Q+ey3V*cg6Fou`2Z*ctY+a<asjF8_xqYGX{M!=Mhoq?rB+;JRZ&q{l
z{i()$yIF~E^N8-C<?ntHI2gK&Q0fO-6EJYQHDE{l=Zy96WRme33*@NHNjkZzwDzvi
zTtRh_c*du?&J>!rd;3+vd~1p6pW3Gq!GG%cy^QQM7}XiwYJb$dO*Vu~xi%ZYds};y
z-lHKz%s*8chHyOA48F4)g#xS&nSQRHOJON{o*<)uegzM<{R>)fEyKO861GoE?N>-d
zg?e;p7$d;6!#ctE)zVMAI$(v|rcq%o;UIUyH4%H+xRNwW$e|V<f`mUMe}V=X=<2;I
z(xBaDD<biftbdbUHQDyN at -qjT$lC)!ZX>qWo!cW7x-J@!G5cUAwubfEv2|vBUkvM|
zLc(_MFoYP3gX`PmS9+71di&Co{+H6N(^?AfS<U(Qa?x%*%`54;bECyVHFz6f>-t~?
zn#7B8hOQ=fpDfG%Yr-BMg-z~wj81-6(vdW_IzY{@UVo^L!-KAo*q>kzxWD&;S`_Em
zzH%c)x{$Z7tJy9Yq(<FA1^m&@j;S0B2uP$vPHyVk?;|bI$UG_7y>6DKtDy!{@2(0!
z;WRo)OL@~?ob3Svx31{7rEz}Qic?*56j}n6|K at p00HIh)iEp$-G?Y_R8Q=d*)i95=
zoKEK5?|;hEijV#RnJ!jB6^Qh-kshA!;<z*aIV6d=SqSJuhI at bApRQri>R^L}PTY7~
zl<pN7ftH$-X+`jkuq0gyPsOyAsMnjsi+GkL+lX^aD2xBqbl}^QH#vy%*8gtX;CsX3
zs>C;&5)WV15llaHlTi>D)D(>j&*O^dm3sHby?+`U?7 at rTP8VIsO9ZXT0_3zL@&%0I
zTiI{ju(`Lv#^(RsPDr<QO68pWD8F(UM1b0AUc6;j+%U?#1*%6RxM^n&clCsvx%2*k
zvY)clMvWGDPA{o`9|qPbz$tAo at Ksc45d>=;5~vd6Xrq{5%YUoK99~}d_IL!zqVfd2
z>woQql;d=u;ZF*f8&>w?W;pMg&<6c;PeIT){7*5JS(|+P(jd@?w&Hv0qghIrQHH+6
zB6OXyH|bUf<!#n&(8+;0M%@=3tE^nnv>qi;ln-E&d{Uv{u?(6d?A>mhbtoWfh%GK-
z^hvgc?*DNV)>u~(Pqdg|+gVUpFRW5QTYq1zezy;pY at XvvnV=YoscP;j#t~Ue?8!GN
zZ(YnD%+-5=MbJM1pk!3F6V4pHSmp1tmrQ;j_gHrGq;&!+G<R?fQcF=xBlP6Kopk8Z
zPDw*C#Z^?9YZ at _BXb_wtKo=#GoFdJkjM_rn8Y3p$DCL?)FIgQpYe4}cZAtOi9DnmL
z8NS1M7?c<OU44A(4l{Hnvor&>hF^oInOx~;rwsyHy6;w<0`8dowaWEzN^&a&+j6z%
zzfkJo|38iimh>vMeUw~)A430lRh|Ol>K9D+*EvDHN~;|zTGOSFx27iNosDp9cLoxL
zh<$D1(%2q)L}uKOR_$=xJ4V3HO at C>_`BFG3Xo(<-i>D$YIjeTD7t*CpFi-}f&NHrr
zQZ<FQdXByb&0R+6;Bh~!<7RwB$y1NZ&FMx^Lv20NVGvBH`rkvC`GM$qC(7*$yGgu$
zBQD7Y-KHm<0b*S at YFca`8<z)J=Fs$}ronE+;r^u${;kAA?>erN^{3Ao34f~X*hgld
zZS?z%%q%W|PZJzP<Ct{zqFrcgBr!GGSE_9&sTsJ+P+x>@E0^5C$SiI`sqJS(V+(a#
zjY<&mp83^|$lh!azo{@9%{Pm at W43n4;x=K<>C#GbAwvm3 at qjor8Z$rjaTUv)WU0M^
zJrqBG_b?pI#NMd7E at y*pi+_Ij54r|%#k>29{zb71U4L4}TSSzv29V>oRY at k-)lnI{
zrC+Z^?@n+sad35Bn4zv3$Rw84h6^M54>nz=#$U`(M_At0Ur(kWCL#oxpYkq-rbv;M
zgOlttae9b6W#*EQr at h>bLd$s~8TCn6JK*IG1>OYl*({!ZA1z$=i+|a1cRj!KgH0mC
z_#<X=P(zYwV>ON}XiV4AKrTe%KAV~aPykhpEV>x;!W6syRf||jy^FzQ%B6kCnrYAX
zC2Gr5SG~3+1^1th=+CXCHgf~~)BA5~EH^t>YWfk9ooT<5We8`0!07AxWzXtQ_7xZA
z#Ob1BP@)KrJ~yKVjeiWL>w(oDP&b*i<$9i={&hy5Hd39I!zBIvz#t+8$qMwj`?Rmw
z$s at 9kkf||JTBuN0L^!QGnch?9bxV(HW38D_!jqBy7A&2H8scC-sIf1u26!4J-i<ym
z-iGhMpXV;T?C$$+h=dd<Ba$g^K#-6LMg=qsjyH$7jULe^On>qG09YOr{5IRorBSj!
zWl~kb+S+%;2nToDymOC$h3prl3S#PerkbML$MV!CP2Vkfm*<PSf#vf-Dok+s(Ho{5
zY)ts<SwLAnG++bV;s`XaEol|SMWgD^uqMzh3+pD_MQ8~62<|jKKou_#qaV85{du~r
zGnAw^_r<#D27in5C`lbT_^-LNNuFSYBiQn^I-85n<e7D%ipOm>|7Uxb(W1TgR9Q(v
zMA~{b9X6jp<<K$xHyaa|<<|fE=*dE%GFlovh8QwHF+HMzoovd5|EDgVYljkAQYxkU
zCpoO)|5z`aU>eC7>EaiEe0qyb(d&VL+3=WAkhI-ES%02e4KGUlQw#}R-*dFdS7RyG
zpWgak9rzBaZJPy<z<xS>%k#YT3I!B+vKT;aG{3?bZCCZ06X`<H4l1uEV&t|(1MKa|
z<Od87xp&}X77*QQ#tnNm5Xs?c$h?Z5bx9Bg(C9_{#LO6Y0^UL9K1)Z~VS7;NLf^Kc
zcF~b5lz(85hh=o9VeUbyODX|B{pfP3vjrc)kScM@{EoJQIo8cjxE&|>pww;zg>S|C
z<~?We!Sd#==W>l{fv{P2D5XApnGJ=>Kq<4!kUr_rJa%PQ0tHVD4BudBzAm%lfHuZO
zU#LhB7)+#48iC!vRM(^j&V_7O9A^0I)ZQO6-+y=lM=4 at PPU1=CTadGUc#`xcTO>=i
zN$YV5`7th^*V}sQd~C&&{C>p~8h1RFR*Y`D$bQ;n`m*qry_-(8!6MZ`(Sj42Hr!6F
z8~IE$kQ92bq18-VwrrvAzXiW^LGQN)iUPiNO9?!nxsmqBhi`UR(;SU|x=0WXR8%u~
z;(uO{9MgCDAW&U4HI3byD<IGD$s826kX4|}Fi2uAX%=9tZ!Jp3NWh?g5buB{gIz8O
zO6gsK&}eJn7e_k;`Xii{h}^0Dev)h!Z1*gQp!@Xif^BOawJ!I7-0gg4PGbyF8f*uj
zh8fQn$4uu^a?2yAd{*HkN2oq)97wxE7=QOI=y``cP)Cd^_kv`%iSk-JK-)MoBj?>?
z70$hmbNSwdZqP1BX5nCQ^*1+^{!5gzlveD`YI<g?qY(99WNshAA`@SeG+{;*g)Tc4
zfFZCZ+~;s+#iOjJijT?6I!D??oK*F~N6)>GgF>gTUNpF!sT~tmwfWMvL=iZ78Gq1q
z2s%uWu{t75jx at lz3PH;99*V)!13eqQV+*LBc`e{j4$w(x^ETTJg`q+6ZR8)1VYwPc
zg*P;dx?yZv8^-F_2-+@|>jp65+)y?QVvfeCLL)7c4KB>od%44qvR%>w=~G-4<3FHw
zn!D+G=^Ny<`LQBbv$e@~6Hrg2U4Oq~S*@xf at f1<ro==W6A9(#k{d`GnH8$Gre5jRL
z{NR9kNNathvT}Zguo#o~V<Q)In0O_W$5c%j*{l&+goZocct2f!MybRf?MYeofG0V`
zcz3b4u5wIN0WJSj5&;IXT>#VCAglj8kjH+_Y&yVP)2P@^8keN-w@>s8!hgy&<x+3*
z`Ly+gdyYol;|rywv<F<p7%Jw7Wl6ZIF0B>Eg}>ydE2w5hrMPW%#9j|&VNkmf<LPLW
zREQje?B=tZnY1K&!9#FCeojK(u<)YYuujdkW|@1Xe`%YIiA`M5pAl8HrsZxPvuH19
zS7hz+%|OD#IZ9?%)szl~%zsD3UFxm)nBc{MDX=1gRb!rv_G{%+J_x^Hf+}_n)jFWe
ztA)amDuZN{Adu~EkoY1j at aEj!rgul=DPM?snvMPDYOUHOa$&*sZBmPq(%CeP5m2Mv
z-{BH at 1#z-pB&}6sv?BlH{j0WS0A at 8;5NoGlwko>Rg)QJ(z8RS<$A9}h%?E{jJk+4x
z at VFuMWXSE#@AptRrnZfSUn!dJ70Qx|>S(XpLPTnOWc5Z${<Yw>LNW(fxO`<5<(T7l
zVhR|x5;LBN!y~>FyR7L)`}Sud8m<u}UxC#{8CS+gOk&$KvKQi}A2NG^UPhqpi|Gq^
z$=yhlG3v}4*y}hBYJX?%_|On-z~){r at E#5l)YMags=#8iOE`Jx53de`UX_c%li_`D
z-L*oq+msPcUjde*{kUStvr9<uf6d*z_r9NY6sug{DjWRSd#YK56wh8)<Vqs*gSC3C
zb{b=<zJ)Y~pYdF9zsWG5RA~~>cP~xv0~VpI%ni7wzP@~8!hgFO>QVKk<fpS{QahA{
z$hT38`pO_=G5oW;74Ta8MDnZx8%#AK)w0ZZjIXqOZQI*GDaXsB_mr1#sC(KZvmf97
zYP<qf;4Q7>qMIER^p1txtyL45vW)d;O(`+DxNQgdJe6x64z1Xx`@f$4Rw#bnh3edY
zpC4IlekmfTM}PGodAU2k5u}HfZp4 at Pdku_!9(St>Ip`HhS<AHeQc#n65jUu#sNvb=
zUcTvaD`g{cA??E&(zcoFkGMjdbC<FOS6Is~MwDC&F5`|MTHiE(y#NQ?d17tqeF1{#
zluXI4C at A746QibUoHToDLKe|<a{!b~alNq)mpm00cz at WgPSig&Fi`j{_uP=(6bZrm
zM2lkMxZCYndd-}B$;z!;79zL1-U@&8a;mdUOMM;x0o)F}kuijm<no~Ri!iMY0LRc~
zXB=#*Ek%yJQfM~g8HJ%$=W|D0dVxLXXPPdB*2}NrnjfRlG<sTShIhX<W$)YXTfl>V
z!{Wau9Dl~#Ommv~2S<jIc2`O)U_899m;_MM;`l>NrI7bX?-AZ<T7_TdG8<A8byN6N
z8?r1QXd9uErsPnvh*mPl!3^Lnx1H4P2o#;$oHna@|1t1^h-0g<+!y#xil<9{+pvT_
zKttz+k>`6rU)gWTmbEVgx>@#Zil?1Fk&{ZAbAJ`t at wR#*VPN3Jnb!^-N25EJh+nh*
z1#iJ~Q&#W!d?w1TC(Vjyx4)|jCI5 at RX%Cz}(}wy%<2>o6$4UR(ml0FK?h%wF-bB4M
zY1Dy22rFvkUg$9+^{bl1foMn4(*dDr at KprY>m3%|{rAK@|1A9UHL)6)Uk6luX|**s
z;(u|Y4V(iKU&txaz~zVjy4 at +WgZvhMZ%C;8t-*hGfK`4#spX4E=PYejWTfz+`U}6e
z2I^vl*4f2vi+2>N^ekDLR5nLA6r-M at Fhk3d)(-#9mrJ~rwPxvvo?qZ3`x1)NIV#A{
zsmA9h1NMWZp%euau5@^|<RWKC7knu7TYq}qI8bs@%8a4KwwYY*baAk_pEb_2Pe$0M
z#}1eKl+tso`1!r9g7GQW{gqUFXevab%}C^uGA76O0_@*wX$2Yx{^d at L99##|l&}X^
z(UCrJ>5pAf9d at aZ<lNFVff{L%jRqNYn#X#_Ff6D)x^A?18}8W#C<pxTQ at K=?VSjV}
zL8d7+T4gjItm*rv37~m)Zl}VMi1tBW`;<F!hxFMDoFX}X^_BXBq4G%b&64$wh0H7=
z#`5qtnk7J74h3=2^HHH{s!D-vNSi>)`3Ypw7kV?%b;t)m<+ZamnMSQR;mfFOk<cIV
ze~BYya%V&x2fnMOSIe~Z^IW&Mbbpf`cwoF|iEhw96fx?%dynjzZE-{G8g*Jz4n-s|
zV;|;T{rS122NE|Az63m`<o0;E=oKSUn`{}w5-}O)haLSZQe|j%FGp-4$i6%6S0+Qp
zsY=hedN3U}YQSQlwRg$od<IO3R&SxIp|Ocf#W)utFARs(;p+`p2_UR${D0G97^<A&
z$wW at duYKleAv8mYcja@KD49FrFN7r;eNvlFbhCxmREqW+D4}qM7j!MDWFz2yCv!x?
zSec=TGo4g_ap)BalpjxZ*zDgAFLlp`@f7;)i*dWQ5u^vHkCoo-?^bt0oYgpUT`4SN
z7YDG~oP%AxP+aJ2X$=v|^?xas!3Br(ryJnJ`0XE}ww=*w$jDU)h)k at r_c=6nz<~nY
zBNth=RB7k)Dy=iMK`VLzW4QZwf|f}&WkXGw{_-C?rm~aJy(`Y8*?ZIc20nL|Bq&oA
zM?2R|=1INk6(SItQIBag>01Wm6kY5=Ysw0y;!{dvr|!5fo*5ER(tjWbno2t)dgn_Q
z3 at Ojn-*{6+PBJjh9^K9Pt#`*P0}j7x39j;=;dkv at GF>+Hs^Mwi)f!qn7kxucGOcqY
z43Wq3mCMx9OAs*y7sKWUHzFVDx9cKpm%lsPs5D+6$JEBuZ5-OEa11H?+>||Tcg-e%
z5e(u#9-{4|blN3}41ZH3tpt8WcNHz}S!+;Ra1>g1gI*gsx)jaK9M9o%{S-qVr>Wun
zqycJ)I3zxy7V`!Ps?_xdi;qcKb5Hpo6<5c!{$(4c;AJq4q|<DzX)bU at iZ+}p*rE!)
zYRn8a=7Sc)s%qpx#ZewkMeo4A{-!Aus>D|p1SU^UP3788J%1!F-T1nI6lDReQx&&0
zYk0()K1 at X*wDPHGXGIF=a-7&{^Avb~=QP(;)hzAG3&xSj%ZJHhP6zb)l(JGDNLQ(3
zqkUGYB#dPnsVLid9cniAMK at F@C&#gy!t{Y<&xQYnvh+y%2(9wiSCN&5c}NX9R;%F!
z9O<1T%G6uzK!1832L-2mxao-kT7Io*_lD%A;R(P-jL<+xs-xd&-&tM5&h)A#hb_Cn
zF$mVeY99(c-72JIV+8>rV+4CZL>sGvU3=<kBPW85d!3;19oHOcBeLpdlokAn>i<9F
z at 5~mA@@6rgO*zig*H%OF7*n1M8w`w3P?wj96x{Ua=6|tSTfkYzA0TX=>KlZHHX_~v
z1+dYcKLJ8t!z at blA`O&2E%i?~l;veu_&!#$hje+(mQQW&=?lH_7^?>T^cCE@<FLdI
z2})dta5y1^I*|6MhmGUkrRJ;P^$Ad;Qa7{02rHd=P|J!UE?-+)w{~083*V2(=#QJw
z<p0#qL4SR3?{=NXP;UQ&i!dWiC=D}08wFc5m=YvoF<>0`jaq(S^>8md9JL)2vd65>
z0LgVhRi{kIdD~psk*rCvXor`)0tB>h*&LU*uLJK(HA^M{bU}p1l)vgOb at XB5*<Xu9
zNI40nIT#_ep!tr!U6b880rQc2?XZ|U!Y8cJsek?RT}Qehf`9gb%movZmeIUnq_fvc
z|6%xXiZkm{cjc)w(CU;6?w48D8LVT_IECOqW=;y8&A>@L#4LlH9H_u~e8&oCjK32C
ze0mF=M{S#;<YbdYu}xCF!|P- at R3Y>sJtiERPivF5N3P*iwIFp5Hbz4=;qeDZ7Gljj
zz<&ly6_ at 85Xhjc=;en^KdT&D?Jj?AnR}-OYJW|H;2K{po)A=g1f^1G}s2XmTDZM1|
z!36W5wJ*Hix?a}wBi_1Kh)x}8<46!o0PAR%eT3U)?^cU8b8o5W_`S8l&Vig|#eq&^
zl<icsoV58?D6JibTzjkB>fbxs4V4=Z at _%edpj2$4G_m##44FYWav`-^mP at RKxXhB4
zuP%uZ5hM+Ku_wumkZ2 at cjX$$pTg1L1{Zm}o6X31rWqAtdsVgU)Ug~`f-qxHLGG#nh
z*9^g at kFII?)R=mhO>w>i_U#h+kaBhDp<f2meBm+MWE<V0FmY>G;>aS6@&y%AKYuuW
z*KFaJYViV7&(=XhHm!NAyazq>?M9R%FK<8)jI08YDcwSLc#UXB4QK#>=^BM`l>+f$
zL&vJEz7BH{3oz81Keu7rR>rj$Dv93N-U-gH#Y^H;4hj^SaBHn=qumRR_Rw};=q4LG
zh|UkOQgIJAjQ*KTckOZmE1gvTr+-qRYX40jfw??8-<lKB+ at z~^^jd~D`-y_R(20|H
zv1%N7gA&AL0kJBK_LGkYao;(Yox7;uTBAZw<Maq=u^2o4#n1rUG}){)zzNnttb<^@
zetKY%HyY@=urs|Vi%xf7T~mQTYQ_BTBOmqfZ00ti@&V4#dR1Y;(Mn1Nq<?lfrJop3
z+-LYSuC=t<d at P1v9WjFkM}3Utq}jXpUp>M}MKxvi-O9;F^qD&K6{V`vdde{qyC{<;
z9%ki(83#96YkY`i&S1xc?IuaLMxir7Q2#tyHnYp&!>z7SYOA3lFQ52cw(+dL$8G(!
z22lGl-J7iza<NAHE>agR1b>z*KG;K_wumvAIPPo|iD5Btoe;cO;BWT+zHA>dcV#u-
zAFgMv at fMK@nO!Z|t<UaCn1k4WKBn6!Bau~kg%Vr@@I6(%aC2`8c!L2zlEhfbPi<m8
ztRc5+$1h}#;(=Q@*#ugsM1UO8p~sa1b+Z_|oURB|97G-*){R`^4}ZK^$o)vyv3ORI
zitp!sFN;s983i0kf`)tR_bAQLOMZ6>m>Y%vm8XZv_49*Oqw`Q}x`O`XBLA?{XWo>8
z#m?er9LQjmo`%{@iWy$q9XyMXKg?ZORPTyJ+<+_J at YNGMNac+WotZARmMS+f&htSk
z901wBI`hen_U8~MJ%86TOE85g#ei-1l`B+s#?dP=!@1yE at HLPrq6*sG%}X<=F{y*@
zf~iwmnM>7)+U52CKLoF4H^~Pmn>3!y5)L)odNGcPwUa|^bMK0&f3?daiHOGN(Wyd_
zMpBAt=!dt!WeORHztp6>h<6<OG#!Hs<c$l8EAE!OltOso#eemWOIc|z6lH76+|~@y
z-PLF=nw?f=^*rYD+O at QVWN=wLT*i|b*m>HHTUEdl-dSXi=nk66ZrA~u>!jeW0!r{2
zBaaB#&4PU at rS2?5e)5{ppbp%=43(7Bp7nehki^%K!>iT5KPaWQWz8)6;H}r+w1Mbz
zbxl_j=|ELb^?#>F%0e;aec-*yf}clg{?6dX7`DkTB>zDV5c8#=2X!OZ{I<(b5tuNB
zUix>wx-a70YJf?X?sG#S(yJ$q&$r<9J^WG4=B0IS2Y3;+4hIq6SHA=r+I+38(J#Jz
z at Jv11MEviNDU+>rp()S{3+a((6N^<}IqRV^8<DfQ`F~y=<V(NyXwB)#aJ;6U#Q~DG
zJFBxY%6}lE%3!zM>w2Rv&X~GDG9+iBe|82bW~*Z$4R?^9IbN`i=Sp=$pMP^eN3W&;
zL%!<oMBI9Y3&brAGxP%`#0>qVRQ{BWS<VWscQlXWD2U0)#VBZ7>@E=-D^MRM1T5PR
zXV{&<=YJMc0OFjEF)u7C_L_d}_S+ec7Vfl?V!_<-IZF&aBMx-8K!eO#3iHwC2FW<6
zGEj!HCUIM#nSWqZ`2K at Y1iiQ-@OT#({WNJY7&O9XVU$fuI636G$5nrI%eQ*O<%aX>
zxYwx#rO&yv!LGaT#DDZB at Mnc!3L at oM7${h^vwt at E5WuxkpV8MKlEsUC621oGi&EW#
z$+ at 8Me(HLrtwzXfJwHwEfaXLI`fql~f1j6GaK0l($d!Yu94vf at S*x39UVUoq^qI%L
zLpzfI9T2IT=>|64d*U~m;A`NExrr{2 at F&trNtxJw1)J?~MmuF-`ZgMKD{@5IwMD7Z
z`G1%m#@~XNKgh1RkjXGDbVsH9fe+E`$#|GqZ|LwzEVJLU$>HkAJPrwM=?RJ)w+x5`
z2=d!ELY8G8g6DzZd at V2}wkl`(1Y;Fif`SDuk}oDHm#u|^j%jfpA=R+Kp|><>eopyx
zjwGaK#aoupxjLp*mMQl)lbcAKHi85?VSgcJAE?@XAtGbO*U?Il<3$YY8IjR!tu(ji
zE>5fVuBxHSS-C?WZCNId#}rYwsFSo=V9(GHQO_I>SrWy2=Op}h?tKVY=T&@*)sc0m
zprfLT^hBWy1LqCEjTne1XvdJ|B at 7uN(2I-8o!v+t!$t$=M=IC at fJ#X!zO*B#K!0pa
zDD>ge%)=|p)A`?9Xqd<3EgB(lF-_oz=GTGRye~UCWlK$SnIu{f!VdMG(2BpOIbkq~
zi?g1e+eS)2C0<eC-KG#uiASWpK{Qci?=Uu_Af00M%dl{unNsLXGf4nlRNlW)q&H3g
zksvCjbq^y76oSjmdm=R at woEUxYJb}Y8S6jhMJCrtP^=hOyx`pDe1X&JfGRv8gv+bG
zHn at 5rucdn%V1w*1&qNBs!t?w%(?Nm7_$gPk8z#HR=DjDq<?UMoM=*tXP%=(|X&btO
zrwcv6f|yR<wwQ#65N+^2bT*ifnVTFuJGSaYw9Z_%3T);=?+RGokAn_~=6|9B_iT1J
z%JkK>zeB=O8{O&YJ1#x2r785{=>Sti+u;3vEL at -3nPG)pnCs|?4wBbn at NI5}I=@5y
zxpIk0BPtJ7g at g%Db4;#8Juzb%**5H$l98HneuyklfpS0%fV17nrX%p#Kv;b76$xY(
z*;1IOyZ6e8BjI#&(6;~A5Pv6vbBDzP=Gd2lXF1?Y)Hvt~aIo`bDYFs+7Wa(`AMiE4
zUwB^Ru3c#g1dJfv4rkAYV|;DT`SA}}CS}W-VuU)dCwvx11<4AdCP9<YHdj`(j?U7+
z=|OtZV)5Uidg%lr;bCxmp0M8#GRV+4MAaa~o80lU-LteN6-6%Me}8;40$K4kf*Aj%
zCMGg5iaBn3{vS4g{0viZBqp(dSN$U&70sr{4PPE1ADHvK?cVsTu0kh1t(<22?27&n
z{0>OU5{6caDW6x at gPOkFpV7MZ`%Tyqjz^=h5MI-7&3%3%JxTX=gzIWXJ<c%o$^wNc
zQ)3(@i-RLZ)UjSK7=Jnv)u$^Q@(o?KA+bFgnbKm?qwa^w7q#A*#4p4#viER)2A9H|
zmpDvk4Zx5}dH<1-XruL)(##K{t;tg5j=4V5T^Y(x-hY#G_A#k!t39|*x2_2)!0|G#
zQ(tL%TaA8ft-|QcXYXDVDeqG`g+o3eal~VUZRUgn;hzE&b$@t7Y3YK6XyB%ohsx8u
zwFXnKH>109bK4 at _6b33swfpV9Xc7->Fn4+&iP7T3%blVv!?0B;h8qf^AxkzB{A$<5
zyxT>tNd#9)!t-iDNpCucKAEXPVkT=q;aY-L=9-jL&|8h{NiB8D+eUJLS5|#;fruu$
z$cjh<i1_A+8h_?9h}6JX8 at 1`WT`3Gqm<ZP$YcBvpo^V}Z(y>jswqkb)^-EY#6$?&@
z`^Zzlnx-RG7$FNdxKlI#SJiqKM=LQYl<bu|YylH0!Zek%qkcA_l2Tn9{02Dgpni~(
zRV+;{T0xRy(NH9NF!?WEGH4G;xe>{$R>tJ?w)EP>tbgPE3f>_TU5OIje;9W$0UNMm
zAraTsQNS^bCZUqeGx~fk?c at ZG57C&@jwe!a(ubhol(?JiP#^n(WNiB%)_0>8CY%G<
ztyZyv2`xPrNM6TvAqvOwHn_MJ%oAqHrn4pcG-t=}(wxo8l`)pq{IWlNW6`6kPe05O
zJMJ7F7=K#3B*#_$xT6x`nZy*{t^NqfXJ?ae`cf4RpD3xB-VUxN;9FDfA at +kkWv2St
zc9U=j&TOVkJpqdioQ>ZT&ybx@>fiaB?Im3OGE@`eXx04se{0^E&1u;r_|R<R$5_>N
zKuhh}^^sIvG=_LWTTR~)(e3gxqQ#dV{K%V|Yk$1bjGj<IKL`DE*S;zgbLPIA+VPc?
zChQpth&Zn(OZw*!A>xK?0`d=77*H`qoPU(=knbu<1R<9T1H*YCurro_6k+SiNL6;1
z^GV^XZw&Z5art?S*@OGYO`$ybJOjzu at oLhJQ7x=G`Fk!f?j2j%{HLzTA at RX;PWn(Y
z>3@}n6!tl1xI4l;V$dkWR)bQW`dmNU=pSLXglA-d&+MXkin8Q|mv)~Bnu>Z2)|g_9
zA@)$|rP8rd96#!j_(p41T?W!pO;|?8P1-A)FdjZ5lmS`{-N9Q9)KMY==p>d82)jL_
z_qztB6}ftN2W_J-<NgN#tpVQti?Lr;%75}<75!OiS!Wq9vV=2(LdFtaiz+*d$B-qP
zyiQ=Wp1(sf)E~TFJ;MyYW;oUKM}h%coU7t_%B2btz(T4b?Vh%Givd3sm3-nHx!upe
zJgh_LX>B4wzz`D*E(e|si#s^!%nm(`+lW-4YI)~lj&YZI+M=?!(q!oNQ>+A8k$-}<
z at BFYy0!^x8;#Mrni)m9Zs86`fjrvkyvWG0x{~br?XsK)B8Tq}YnL$6y8|2DXJ^}I$
zH~N1ci19r=&(_8IM1!}Hm8edQ5zP5-0H4NqdQGYUNrXxrmLPEbut!_cs9#4b_B`pW
zFL()mCiE>H#DzAU);Ie<T2nSL&406N)FrrS3Dn~%;wErovHCKJc(qvn5%q(^TjjtR
z<XVX`cI&FpC9vE}O#~kC9iQTNu^3|~;7&=9RaKWBP~MUuM at B+^mGTWLs~~YkU`x<+
zc~a&a5NV_}k-F}aj<6Tc-G^h4X{J&lmuPV6UW6~M3->vix3q}rRWXO6Y<~{=oVTsk
zgTI3IZMJE${p;FyH28}D>KT<M*PGU}yNY{fzT0*FA(Vqd&5m$fyX}6&Cx*@HC3t1{
z8_$-5PyNP#TT2DcO7 at _VZ>Vy#{JhCG-Uml7GZ?A`Cfr<{IA)j|ntZqSPGX`p3a;a`
zD!_eDrMY#&4NgM>koHYL9)FNGXkBWszz@`YCo1i0_Tv;i$mf at o&XplT9OUrcBYR2c
zNv58q+a7ohu!6~MFxn(E8tU2FGy{C95<xo^EfvDlT5Xktyv5#L;YDKb)DqNTgKagN
zV71+R&X)#7*(Lom!BXSE8h0;Udvx)ls}12^zz-WhCwHMiE7C-%tbb9Y0^mQ(;MFSf
zWGt>!P(xjfHxThK9sLGpTGPi_!3VhnBp$<U<x^5=EITYhA!u8mDK_(LNe3J5`2x9e
zA8Tc!`&|Uaqq3p|&Mk;Zu>r-s0+7M0j at 3jI6>_)nS5<Y|suq^s;+z{+oC4_9zdMLo
zj9bZdF%cVAKByc(5PweaIh_C|BGE at H2f3F4SVn+sX($F39e9d#`wkSu=7M}9Th~4%
z$yEtb$=}Re4^};n_6+F6-GE-4!3UTE!2_C|>`$O4prXO#LqDI85kTIhME3>=)!VH$
z$;p1MQ3q<Wg{{?v880{n!w*c->5H@^H5%|Zz~gjF=gDaLOMf&Z12*-uN&_sp1ni3m
zaYHIhILlQ-|7}h4$U*=@PI-Z&5nsX1iu_Vn9UgP3A6=TbfOBD(|DLu3WT#cImm`BD
ze+X|0wLvY;>jI>~Rf<+q&d_Dx`g>vJQ1PSkXF)Cz7;FAYDfA>_3Vj<0?HAd+hfC+b
zzo<A3PWL}Y=zo`cW0PDgWux&D at ioz178K^uNWDoAi(Eh9b0gKkE~nM+6{dD2iL=II
zFj(((j?3fI at I=8m2+mL|!#Yr(dSn;0=7W~W;-$IS&Do72I|e%a|1p3*#%%nub<55H
z0j5aP-+v8H3_z;a^+dmiz^`nPcfu-1u0mkb^a@<mcYng_XT#k;WDSj{mC3^?n3+<X
zC&)?+2#=<fHWWuQ;G^;r=Y?gF at ye42^^yxC8j?89YtNZIWN+t`jRUM2GdkLOf^UK)
zh-=Y`p*~0lfGeX at MR_+s46Z{EU8inG4Cdu;u<E8S at mO<!rLjR|OS84oT92F(CbZ6?
z!HJb)Uw?SxmbWoAM?O>k5 at peysct((HuRBb82_|bH6|JXs*~7po at Rnl$8$jFNR<rI
zy}v`eV)`i-4%TN|b(Lwfls9Zszw<~1eH`!YYxAujWT%7!d99&tL31^K6-ws4XxGz>
z6?BLg!Gpeg3uq%?kR8fbm))YJzg2 at 5!JFq*e}C8JAH(rp4vG}K{IZrY0DIJH#BxMm
z4*d{@;mpvig$V^5(|?=FX2E+pvCU9Gf~=#M&xDs*G4?@7PmsLpbA<gIJwPbd4gu5y
zzWNPB6s;c9%e4cc{Su528BgqFi6h(%(l6L*r0S|G$;`oO-^XBki}98*SS2LkO<i=h
zg?}DBxF?hfZOT=l?u3y#uqRvIu!85;Pjj=T1slOXSbDmD`u}0-x;C&_H^nb>bSx!k
z%Aqz>0wKi^(u4hMF4qCOG<E_cyqz#Cb8 at dINvmBCJdAxQ*nc|aQ+6oe-wvcZb^tex
zJAb%zsr=(Zh{3J&8-t2p6;asuxy~>{Tz{>vawrfWEw5N__snhcVX+%wFfD)iF$n#S
zyg)a*OPcWOLZ_#!Vdupl^*9>gguJqR1gQ2+&73`en}XpllD0b;NV_22XscD33pkfb
z%oxy=%Rgccp;%8$zP&Y60*#Uv$LD=HSRZ6u<l$IdJRL>x1|oL9Wx#LHD;YNL<bS*o
z&U5#kX>%`w55w<84Oc at wxvFOTFR2|S=6tT;;-fyGC;Jr;!^jYSWM6EX4>}3{)L96)
zK6)xc1#7b;);V0 at NFm?I+S3Fucnia;6jizz=uF3}!e$ZeB<kC|41sSZmJ9z`|AE>Q
zgErxTE at 5)NKAbeATwHBj<vbgCwtw0KRNLXYuOY9qRh1X8MOcY#fI6Nyp+CrI5XKYw
zT(&tr!ddA`Zj?UOCz{|@9yL>9YlKGfY&t3!ozd#iev&I^D$ai;=+>~<tZ)?qRW;q=
zn*`MUHmDB=1OlZ{%1>I0S}R}hD>z4(hWFe76NN!!Z8F3-jYpTtfcVRe_<zGWlR3p2
zxt6fiJxN0V-hNr+mrb8=)}q;aD1IqMPjW~e1=awVzr^XeyX$9n`zXKdN)tDrRSs}+
zug^iJjpoOXAD at z(i(+fZh864oL3LK8{OfJDa4=`I)J2#!Mz1o{ET?z)>Q$4%lo<EF
z7aEUr`b86DeT<0qz#>0`Jb#G$4poYeUmohL3ei0+%D#A-m+4NRzvoP}3lErN9CJw!
z<ue%LUV2^rA6xV~yZ~Fiefd%z-g|_FF_^)cfa@=cg!+AM$QF9T(EkFE$G*!^;j|RU
zqp_!_|7XLgHfEkIiSp~UZqobAwhyv|K=RyJAMH^2(XM!~AvRN($bXH_-O{(G0G!r0
z4hmp)-uaLdPNyUoiozc0{}K>pKxD2SoJ3+k&SfNym6&=NR;8ADp3 at bti5cV1TA4TT
z-bDyw{+bx2XZ^&GvG}+qy;DAPfvf|d6#@{ags?#MSp~tpE<m1d`dxX|51KzWWh$;r
ztVVLtB_518lclk|rGIzb=_-O<-&4))f}@o;(CZJ#EOkq%eX33`D-ZJ$tr-2?eq`p`
z((49P^MH4^78Ph#6mLtA<{U|L=;4m;nOi+c at 3T@|PS82g>l|{lZ-<nYwW<83FnocB
z?;GS{Y!_FiXkLQ?V#;-d_Xk+4j-C!?wp>9;ZAY^_oP`_RrGGk;`ytZTU$Z~iUMI~w
zaYx>H<8t{E#M2|Vu0e#^?4vA$$x-QVVkcwmE5zy6NeWLW#QZLs6pMgScsW^Q*q$5$
zv5EQkof at IiLLYux!VFbM3)?AIaO>pr#C7^#R=fF at Q8gjLWyGGR9jd+ZZqRl$z{r{k
zc_HZAI4)YeCV!Hx#a=c#3vLspNCi51n?VstK*CTK1u!CWDKk#-6`ysP<!y+UP}Lin
zCq8^nd|O_l75oiyseBrSZMj7Fz0};G%8d&37fcw`@02t&Og2YlJE^7%(~lF_<!II9
zyNzCv>xAQ5FRUsKMC#w&82nkXC>+G*3~-qmV)oIr&wpL8hUMfneAS7rT0vemkAC7S
ze9*{S?|>%>4nUMn^YwrbKKJIqwpV=Y)(WBX at H5d%k}m4muEHMRYQ1E5 at a81Gh4&c1
zm_ at KAFVpCjc3J)R&tJq#Q5b+WsYerGtb;|o-N|Mjf8k&XM at VL)$39RKilj!8!}3+3
zX3yB>Wq&un<&Fc(PCJY0<cu12*+<}X%1&!gPPjQ_VAp74QmMZneU*v~4LHbr6u?2q
zj%9jg$~I7mkY3DXe%bA(vEVvoys=Y=Yz0Vy#JILd(WX$}^TA-FH>{!mA;?v)l`>oY
zf5)N)-CV%q!i=>T66V%4ST+SCBFKNidX=;`WPfWmH4xH!wDd{Ob{Mo)IaVgZx>u%}
zCB8SlVIY50Pdf0!zcH<@{h=`~oFPS_jDLuer_l+UR|*Fwd6B)F_gVES{zfs+DAMqs
zBeq41p}L9gYBAXtj;OjL%jv`dSBorXv&(yllF#&!&T&U%8DCFBy0-mq3C$WJI&+BZ
z=zkQ6ZS7KDx#?`MygzZ}g^69&n?e|4K6+Lvs^3Sa$gCj at y<gxwh+8JYd45P&IJq7w
zQuhpQ!z?|nyYPS?&6+N=uVZBYF%{s%^l3orCeDMyz?aO_pjedjGCt96i+fa>bsFJ#
ze9Y2gL@;rPEaAwsgfpy+EIQ2iHxGv|kbhK7J at u^vb#`)?0|`ppUqu(MC*?m?s{kJL
zEHi*Ow)^U;!p>8^b0zxrDl4?p)LeUZ`f-VN^c at 5oUxQz^!sYX;<ErCH`wJT*XOP6d
zo`844cZ59UgA<=S!3^ps*=i(L&mu=aTj<T-imyJoOmIiuRmm`_Q-deeAcT!pq<^hz
zMPjG~Ua=<1<ta)9+#rNR4 at L4oQk1p|;nPDcrDx97#ax9sD(v-A|3HYvjS*ddDO>bu
zcD=z)77~1^yKCIJs{fS0f(WO!p)v1bD`Y>r6N%#TRiwCI)Gg~o%pP_M at gRWRfBOoS
zc4nEuaRl`3)Ev$zti>sb5S!&zbbo*9cjKPx<e&R@=P(4 at GVQj3g;s>u0Ek#2+eE3i
zyJx`FVd%DNXl^B?9 at x|tZGzYZv37koxU(`ZJF*=i=DZjbYiyLlJEB5Jl^7$ut5V8S
z_CU^mMmH~9f*u^soNxFDAT~QQ>TFaPJPU7h=W0wa;lw!Bt%D8Nuib4Sa(}bQpKwue
z=_*;Y%UkA+z`5sHbjAv_UUty4COJ!A*k6%h4-$y*e282}ssj%94I~>B<$iR)H}J~b
z#p))-(eDGXy#d#s<RHBO#)emrkpEHiDwE at zJ~eW#X?Sbe5w-$GX|gT3G7?uop<r}0
z;1l~^_)S*&tr9p9zt)iMZ+~M*4 at Sh;m^p+vh+Y$J00lt$zu??`h5ka#SD_B;MMCtu
z8P_AL;%)qDU8Wn9B$?9h*(hXqFgzXn=P%EmHJ7kiXEeM at tZ5;ufDMc^8{B(q;F<s_
zB6)y8I*?zqc*xC}(Fp|`Y`bW57o(b~q9*VD*4y%f|Ckl}?8T=jXxcX%HDZ5dT*(Ud
zhNUc!s>SeW at b9mW2rz$UbFwdr?qy{vP9B~n4&R1^wU{x&ob0$9ouVT4V<ajPrc)ww
z(zLC~mP_C0L`|dg%$G`KkLCTO(aq-?9Ro~MF+L;F=-7fOR_!bfi>*|-gVB!fXG|8&
zv2&C8ymuti2XU+H1T8=aWt4y1F9@{&^4utY1n5>^=AXM+)^jCIZi~&>y`p0^H?qo*
z#xz|y2M84lYzp7k=<yv;w~J{M+4ns4NjMW#!gdC at EoYoH=mk{t2y%@~*_oVKM{?d1
zJF>ncifN6ZV-Yu!T5s7O)=5s}q-Ih28*Z_f-a|7M+4~y5XN}&!H2Z&`?`A$*cw>t_
z6g~SexV06Fi1UaVHQK^rx~W2=Q*Z>=yYakz-<AN*X0eWjX>TFV@$Xs`4KSnioz*@W
zHk^@B8sCsWTz1g;IT?e#?P%ZRdzd0&)yebShS76u;xc$9KxF4owsmq;VECbpegc0b
zRz)TGOMh5 at l7RoK+jxKapnFlWn!Nsn9(GguH8A{V7!YZ6z_&psPqZ?oRSb6^nUZr7
z{}^Ap2~)_0f1C<@OnVEskzD;*&C at ot8N79gByOo?>O(!?A;VDmV$|bqUYCi>@HiZT
zw~a(^R;V=ZrC;2AI}DtU%a^~=3b|`@Vw1GSCQe%}YIs+Mjk14zb at _cN3+05;i503L
zpIYq&H!sf+UcR>|ka%HFH4M at H!yTp!vo87~w>=mp7?!msI4JtRW=!8dv6JdF at RT5l
z%6Qg)$B4ldGlSCNX|w0(E>#SXdmQ0V=H5^*xc&Cy9`X=~F1r(lnp=f`e{;Vn2uDza
z*QhFJBJcr{CTxF%cJ at lSaldhTXF1fAc0dH`30PJt at la0{mI<5 at 0WNVEXyK+vxPJ^C
z8o-0+rSu}6lEmQW at tq6;H%eNz)Yh(7Loo>&qix1xQu767A4;w-eMRD6ZB*0f>0j(z
zCw+x^wK<hvObf$WWg@@iq{VDb?DIpHUwm$}Psi_JUYCFHZA&(N at s(*!yx~}P)CVoK
z;V=lIF0XnO(ZV<;^emXOL<~sQur*Wk!@nXyqH5NpCc_TKJN0<5p>y5s^EYHq=L`&k
zV-erOROd8qJz}!e1gedO7J1_9f_=CF=XWYu7;ojzR{VvQks<uacjk5WPp=I&6+suJ
zYb6t8lSF^p?62D&aQ&bY6jS}MuWaeK)~r{)LgP?X%n|<UFX}F422Ie%TD3xD;xiSw
zu1iZM2Z+#LK5;p&&o^9EZf3TBl9D0ql at gXaXj0+7$8w>0sSu3Y591w>Ep6!49}y0y
zB9Q_ov9W-{D^J9WsK|6kA^LELu$3 at g7TS(i5e9!Ln5#;E^TTY=m?Wj(oi({dCp1Tf
z0yfXYG*)*4Rvr&Kugh#LMqY9|SChsYyHD>M5$~XMKgoyv+$s?cm5zGTy%Gj;2<n7u
z;9y(z8OYu%VSr202>CWVqM<!fbi*bZMIQC(0>)?|KaNioVEkOrY0wkZ%{$)?n|5GT
z8_Rzz$wFz1I##*k9;pJ)&*T$Xdk~S_$UmXrT0P)QQ}-bVaTqbaITio&Xp{ApGD)k?
zzLyBFJR8_YjrEl-mg6`Hd%$#~^|&=&YBCh4`7an&Vvy1>Bt?=jX=a}+MElY$p~Mqv
z0pX*OaY{M|p|dJO`FFu~RM26Q+qfi?`m}%Rq64r87ihjnM8BX*9=?BcWpjbon8ULy
zR|rVmuzLL>-&f)|#G%fC%rOxxLC{D$s8wZ252ePr>i#QPES8O}75hFy&~2!Ve~UZO
z=Onu=!yijHzX{Ui^lPgn`ZHNk<U!OoSVf;k|1wanH$zHn9w&1wa&rY&rBD-jzX5-C
z+0i(b3F>MRA;7XO;`oKYoC0PA(cIi&S}X#?yOJ0syXxmNm*tNq%H1$|+CQO&s&jfM
ztzjwuC<2-0Bm|W^b7dxFp{E`3&ZpBOXQr$i($S5HLoU)4TCA8siQ^|;I?gx*2eb5^
z!q(GW?wvC0U&H8D*fn-oPGwj7t=NBZm$E{Dx&+TcE4zyRM`EgT>V9N1zLN$4;s6&h
zuGV~g&Jyq8Akg7NG)D&xz`PUPV>x;!wbd$$vvI=!o1TW%+H6l52!)0uM>H&9ivS?=
zM@%_4YQ<T4!cmBDBv)eC&sGyJ1;PKVoU%yc*>OAif8bUu4Cf=2fyBKdp7VcmQhghz
za3RqNP7b{duc$VG7?imz%5E&GjDv7$0?sdC at I<m09GMk;a2{7UFH$J5X>xe6bayK=
zaa!PhJ>aoSj<?R3PnJw?O+!Vm-iG)y&vPIvjLC_HfjW}rn84CZv$0h)URe&*Ltd at a
zcbFVS4+sGgBCQ)-=o2ykuX2A+tj5R43TPZ&yW7FOl?I2rh-&C?T<IebOGN7&WeHa1
zZUQ5l%<8ht#CquY=Umk(`-b{R2hF0x0wN0<60}iqssYx-v>zI<%41JR<92=QhvR=x
z^f;idTeiM*gb0~!!Kk8Ym^!9;4G#wepmE~fiDG>CI&_b9FcSD^(GP!dz$@ecqSRF|
zM7sr6{c`-$0h+$SoRhO0=ojPtC6 at cqNth*2<WmJQ%_w6lHGko;wfW8oR^p*A*n-d!
zF{?)>jtkTV7rYsOeBN4%yV$yvx~qljFZz)C(+zmOC&tmdK(5j4XlBKwOknkO8nsKI
z0m*VvXuHZmzAmV_K#hM(nB2Piujr;y>&9Oe$YD|Z$e6RS!6!~Y3IJNRbfcbL#T%U*
z9x=Eq#;ybkYz(I?+QaTyI8?sOLx!mt&Q+)l{B!6ivrE1Rekp<W at lPc`G_7^gW-9Y|
z{>pWLG9jZPvS4T!=s7s{Kme))@zEU>{OR|6;#gstK4x<>Q&@jzy4_2)cxRWY-hw_u
zeI>^ouI$LRR6ASvN<uHp`u-KmSTikYVYaLOh%Ed!njTWbES3XpQatm>Ft0K$oD<P=
zS1-jH#RjZ_4@}>nkYMHCdM(Y?xHZp**9*lzKv`L5G%P*W2UYDlZ)qHBWDL7yQyrO^
zAFjlwpRmEar__HlALV=yt5q89uG)?lV4Ub=+x6#wuK=nfqL}wak8OV16f&%N!>2}1
zM6ln-u}!}}QSoQ+91#1 at d?V$wa;AP*L8dok{FEnq1(Am4*-Dw2{`O+4C>FE#p1_+h
zI6{bT3J&#Gle}I0ChtcLEkX4%$~pON80a%@b~xI}#vp&fL_%pa_Qz~+r3OI<M7Jq~
za1eNwE{&Q%Nr!uvM!!lPNQZh<0O(+?jADDf06_}(2tuh9P%9%T9QTq&$4E+>5LlfZ
zJFd1!!psB=?Ap;tn_&oMw1NMuRSgZgVpRv~tXA<b!WHG^1u<MwnrH;{mxasA%o9P*
zR6}kRc*lRmw>-)NF?iz&heCP};g-TS2f>tuqC+y>F~1<8^JQ`T#}A!%h>H)nh)jpc
zAdks!xN6LQe>zX;5N$5vZ;~pCM$Pvh$=CXOwcO7JC&z;s-u|cg`s%}>9>nHa>M1Dg
zMLUf-6{Y)RFh9-P&f2(`Ep{c;j*8!spH2?lG8cdKsRB-^K%IbB6L&lNLi`QR=z at 0{
zF>e*b5gA?F*sq~)5);ia=$!Iw+45yDj&I78OcGd(+_vpevs5v6NE=rt&}cZ4`#izo
z3w&X>NSLHNmxSspjxXUG?}d^?+dYQ>jiz%nbgB7JQ?);aDv9uM`4D#|{LGa7gD-je
z6tjPKh2C&kl*Z&aJ|fjIR%l3%Ei4k~=^SZvVcN>Ce0>4R!qkEkJ+8)#Mz at -xHfi87
zwV}*A_(H59nOPUyw}d{}{hIm|p>OD~co`mtr_#ed5<6!^^3AI2zrv}0t<v5ZV}pW1
zV7H&MJ`~yr1uUEhgE`Yqb5)TEY=&;Rd?|lih9hk%2rc97c!-Ki?8%#8JUBkhJC}&K
zJVsn`42s4 at 5e-yOYBS}OAk&fDkhFVdx7 at 1NoTUwW1W9=tBP`p>U{59Q+;R>GCC2r6
z-F8qe`myOXg{4&WXXbV9-q4{W0QjleBqWE45xO@!3w<|nVdfAdK(g2w3H6&90&stZ
z%OtrIg-o6K+Qhcg=G~qXJ$7kriIU-%#vR^(GG^!ET;kWlz)Y*I+%z^FbVoPZoEasN
zDl2pD>P6UDNC#$A{Ldjfd9B<|$`HaL_@>;BT}oMBA1Fm97n9$Lc1#+}7K1x0+Sf2V
zd7W7+{Hz5>v`Lxk at 07New{~3Y+$Vp(HqpCr=H!VRy4#0h(JsJP6Nl#$?<S at IWXA_r
zbM*Cr>DpO==`+p5x_GZcFbjbdE>*w+ at v}2kGS-&0FJ%;Sx0hmaeL1R<kmj^YTtN~{
z9hD|-;{Fy_MIHp%6g<1*CMG%g<6bzjCo+JUN0cto at O9^ttnj}NF4RNK>coG<OPaef
zqMR&WOku at -$A)A$ffHiF4dMoxR0xUwTz9a?I=be5tQ}?-7`gBUhao*zC)kb#5(BKa
z&L$K at aqqx<T^-+H<k*E*f<5z!p3iZYbAa3j=SDQ$r`PJ5xy{A;)&2{;G2zw}?g$?%
zGq!ra-n=Pl;eV}An%)afubO{NpWyH|5cR3S5!xJTtqe$W)EJJy5)gOo$1zCyE3l+9
zi at C=QJx>EBGNrB01E|dK5;kh_S#y?68l)ce>6)swU{T5>fxEI$XhNrbEOtch3aMEd
z*ZNaJi;e*U$TNRwVk!(#a9Ld2`-Iw~)JW^42z1%vSAKK?3F!|F$qRqHhnyS*pzC6}
z?>oAmUe?4TD2aZ3#mi{`r}SVCYi``Lcp|$SKZeHju6^ezK6cQb9xsfvD6dkew1OL5
zuEd6&jKwvMGxW&toLzl9qe+4j=-%*ud>nZ+E6;o at EEkNAcW-Lbp%AUVmUsET0~k+t
zJ87pFxV+np*U&vSux5Yx&mE~iFI>U)!^Y3B4#0+|Y71OGXTwc`@G^jSyALbf&M{t|
zrZQg?*_Czf98H&s>>+Vq;%}vxBPhQ!BBG!*EM1!g+}8S65GW%NNpwy_*z(Mh&zN<o
zJ)vj#r0Z4t6Sk&h^u7L-9h$r-P%vG*5J<*C5O;ss3!Pg>T=#zfd<~^_ at OB=M(%J;I
z{DukE!u=!XVc2`-w#^qF$8e{fySSUfn}d1be5#ynWZ^Y>1b&k8v1qw+ze4uU-Nb0z
z%>&+agnkeq%lad$7S>t&FW35LI6XeL0oWiMVw#$Qa3GB)#2-K(y||=WjsUCes+MU2
zOeXIqi$lFu4(fky2=TP*I0OA>-Hwu3a4{Kr=Ry7d*503=O}v+7CwE>mC`F%)uV(AS
z!{_Q_8f1sNj^k96ZRG`b^XE7pG+x=Q)}{{CJ?+!{!I6#*MNn at Tb$q`HJ+dVLPY_}$
zmC%LaxqxB=SEA9Aj-DD9W`W09j4gH>Cd4>%Vqr3sD=&Y5cIPg(BKtD!;@OjEFoLRG
zLpm|^+_qA3pgRDj+M-(b-P+GvX&I*=%pTjW=C``Gi)FPBYji;lDH1idbldS8F7uL|
z3#d*38V=a9wGSdRtw*LdF^A9iavCbxtRBK8b~UiNpm{d6)O|p;RK8uE`uA#Pr^SQS
zFv{qp#WH`Rv-zN}I~6_j^03 at pF;)4tku)~_LpVJ$kIx1za4qbK|AQB(P$1sJ;qBh`
z*gV153KCCynoqaFZ^%XslJ|mK0D)>;2DN>ylI8S!Z+=Px{h9boEV(>X*nfXRVMdCJ
zB#+$KjMdKH;-K<;SnxHRK1v1Npnl>rI;h#YM>c=8zYI3kBYgFxqM;UtfkD at Xg28|_
z)XD$)UtHDO(>3)7z)M|VW*1Tf)S~*QMYqUre`mjrd9tvmB52K#5?VIM3lm+Znl{NT
zI2sg1bYNgR8fj8SNY6hrEcGT%+yElDTAtM1zk4UbF$Gpr>SrddF61-gr;A<XlWtHr
z!kmBpv1|y at zi+-n+nviwEcq26%}5r_?O*#LHs2jggsS1(M1+6~ku)2!ig}1P-{K?0
zue2=2B}-ICMBKV~d!-)eDvPQ{m%fo-rVT4uL`WXRwvlbH_rJ6Sq_u{)ti_N3pLq^S
zx}smeN;m`9Bc~7w+DB8%K+CFs7%S{jkcfY?d&dN&y*SPVE#OS6jWH_K=ye?-#DXo#
zFC+|esptG)ZM8Eu{07LY9>a&0Tw)QAGxQZ87_6SQiKWdt|89yy+K=EPhdE!`U9IPm
z(B;re3YSyzFlRUiR at XRHno6=iVGJGr`y*`aaRLhYSbYv97;p92xO07kNYM0Pgjau(
z@{*+L05*jtzA_C?rRuKb+TGO+G?X=(K^?XO)=t&C{>9deFXPR#M1dgV+C~f$wu8B%
z9(`_sP8q>i`7KZ&Z7&sBnS^6|=w~3 at Nc(?JG)6gEOy_6ADOPPjI;i!)`Zi=Rqo<A^
z9WJA2(&m at TW674B7D@ma+<kaTB$0n;zSg16J at r0Lgi7=uiaa9%fCMVe9#hXJc~V1p
zvN{D%pu>%*|FYQr!xdyoYyyJnO7G=r4r7{0dXUvxK0 at 0bzydY1Po=#(-{ilRj*4W*
zkD5sO%;d0zyJ*;ePn-rw#8o^4;AoE!yvS7HGe?7MY9A_c08*71Hms0vNiKi1=kYOh
z%pPSMkV1q+xI4W;_D|4_K{i?wV=Z0K9gy!zhY~0@$O>u7>^Ujz;yEvBoNAL+jucIt
z43t#wx>g>%*LiQ>2sR*a|6yTtORj8sjnP|!U4QWPafK(f2RA(BXb3B5nc-A^0>&>_
zGJa at U_dj<Ri7gyB%j!Fyzv_Qh3NN8XwGp at 1z)~?(vq*`Ip$Ud^l{=(`LOgK-SP8X4
z;os4o?Way`PVme8L9~`*z{(jV`x at x!6aIPA<*|qhN!>U|LdOVmcXEa6LF?s)!Wh^m
zv4TooY7vmy)LMFY*r5``tYj at UdK4i8v(l|n at jfgzl%d~3w8?yM{ThFA at Bs*sKbo{v
z1gD44p1xkE9;sGUD`B?=PBQD~>y at 1&JVOZ_b+S+nnS5%RBhX(2!G{_mwU0_v%V(Jj
zV5na8HGvtInG0_{Tpy9|oV$$FN}p3D*{p}4yfB%tEyo-_r8X_!PU43HYw)97_%5Dh
zJes(10S^o(V)4C<;o*Pp;UQajazm+^==80OCTeZ_HOjJBuQ!W{cN2^>#5Tk=wAtnB
zr0pYIbN2tUxoscp{YM at PMbRjD=MFhQX6#gaqD1NXzPIN(+HsPuZ23ETy_o)1vZ8eO
zW?vonWuM1eqpMm${?%Q#^{_)tCK2m)l3uOi1;?gq6?kDmv%`P+Nzw0?3*ra<vjsY+
z4wzmZLCqHH_l8)96p-m=VBnjcL=jq5*rZ;~|4GT?-zsRE;eukCpz+gSiE9Pv;*raH
z%-Caw5}Ql|)*jUG+?Gh~aT(W&`vR3e&Zo at gyEJYW633dB(*7Ec*ECpm;e=su6a(K~
z$yEr+d>zQ$d76KS0Kin1RSkCMGCV+gzuy^|&bLPyvR;pK(d#0n9`2d=UQnFi`IqE`
zg+&s+yL*6UamTF}N+;Wd5To`+zm62FLnqj^AoFQ$xh at Z<nlEc?j at bjXf<9${3#|;t
zTFSiG8I6q4gr*`0swws=_etDqjDn-NQec*%a5aiTa9n>ugSGdD^EgoTet at AQ_sw46
zkhzPgg-6Gjz8cY)cLiee!Fr0?)-`Y(X++CoL(cW}^YfO^j_S;e3nvelRl<WYAxI}K
zt)0S=n at J@+UNyITu*?6u^Z$7thO|Ll7CgO;Yebi$su_V_P?Ar+fZ2(f%74l0qw=1B
zp54f-AozcvUvc6XLjk5)H>3!a8wZC?+&gUUbeOu&ClrcigBiQ~#d;D3BHKs}cps&a
zhj`PmCKA`vV}Rm^ev|@%Q8X+3LKRYWom%J`M`mId&3I|c6!l0_e;k(<lEnc|5BR<j
z{y+qV at l--SXHYE=s$BbDTf^Y8HdFu+mmAcQn)H91vnCF*gz9+bNehOLP)XU-uM(S~
z5q_LYb!^=lj1p;6T{aeCpW;WdFPVAD{ZNA=T#NUaE7x46)1K2sci~`uwrzHUU14!B
zJdCrs=1DnKbUlL|SW2T;j<*_7Q~`v_)s+?*sh$9T>2Fw9JSkAoGk_|=b~bkZ!C+Ec
zw`G6GpOG5+^A>aJqNjNW3<}WyKaECw7%R-|iM(__CcnM|tk8k7)HE%eqQ*pPP!Mkt
zFh<Dh&Rth3rhPg-%FC-va~BBMfg at lJSl9R_Xd;=wr<``HR)8Heo-svE$J2$3=>%<_
z8(0OX08TReg)poS-ge)#Tzh?{QWp-HF=l_^Um${S7=BUBuSE3Qb7;a0v9Dtk*?ucf
zVKAz>=3up6m{OhMUN!&NMu{V at xI@!YJCdmUV~A&*<k+fUnqp)TzAiVxWEiG!W7BlL
z5ho{VC<KzN6&}j~8xuW4(xTZmyFqxBmGwo9&pb&!gO1x>BdX6Mv%yKn;X7{udIEp6
zWlU|Qz_r^U$ajSZX&76fTqOgHK{MQ-a2Eiw_#J%5p?jwnT-5KYGBY?Ow~2<XVDuki
z{FM<Rn5bLkI=|f3T;Ss(@?&9zzk2@#lTRiRNA&8dI=ByrMxy}++W$+i%%0_B8qh!i
z06rmE=46hcYi-w`;^pLk{6~=6J!pT(qS<(_QMzmXLzw|7J0Ibo?5l|feRZQRzI!fF
zRP2aNSZg_qnR2CP(2LCRx7nQdvArgeO!t}g350<{Z6}c&gbCkr373sI05E=OOwu66
z8VPYB_(=WTcZ6u2gJH*s8)wG<=a$5l&w+g2VXn;3DNa4KpR7F9|Bkw*3sZmm*D!-W
z!7c4ncz`KkI*kv`!+3^-e0Wx8?D3LA!G4GEawF>V{5>aL&Ru^TlocIAC)JS*WeeoE
zhUtd8#+ at 5<h_A1N05&Z5SNHTAy+Yw#^r<m)&T=PXZN?d_Vxj at r_30_N9AFTV4T$jt
zOBF0CDrd}iVT9pLwZ~mGPh5YMSI<=2B^+Y)x_nQ-2luP53lJz2Ny3aU2q+rjP_5Rj
z8NQ!}>M8?s&F4M$#q*mUB}usQ6bi#5f5#}&)i{oV`-IIW&aF~UBNjHsof8ug*PGTP
zDlXY=cK<8f(?A1~{i9z0mt(GOdN?5SglFFzbxS`F{gpKq8^*EX$|`>$EY-8#L^2{j
zMiu7x*Pnq}rc_|!!=1OJ;uuJG at +rfsDL$WnxaC6ZhjI<g%=38pxjDtMTunN}Xn4mN
zXk+l|<TLi%Q|07d-y4};xD3hX=wL<RnGTaoyrBZ%3g2YWh`Z9wj at HQ_M#t8qH$qD+
zkjx8BReIS;D}q7ksM3GX%9bkG=E;IT)+|bc#jf4DSLC;ZSHU9#FbjW1|0{Mla{9gE
zt)kWb9OP?~mqXlPav8lmFG|7l*V+)~3sL-E1B|ue`3k(L*n^H<w9dPl3uVdE?6PDg
z42&rdR{-m*o(!QXv}or0<4bug9&F%1*;Db|9WHFN;UZlRolSq!@*XV<VW3BWwkp6)
z;Dm?iEMH69(!N8O8{HI7jMHzzgIoRNJW^r#W5UyBy?dHb52U$91a$LlAad`?B_L7A
z7ad!~=tSz~H{SLldi;@6ho-ysm4U!=0qRL2p2B<qV8W5Q?VK%UjT>s&Se9lHho44a
z!JL7trk-ndEx>;ZCj4S>yN at kwc<Ph|4v|a&74I^NOY=>O*|}KXYj&&bMgw<m)D!2!
zW56t#%YVpO3UE1k)CN)01_~>GZO$T`Gs7J7P(I##LMk><oR#pTd{L+I+}JH&5<d-1
zs-4$hgvA2bJ>%|6a6pN^-$89bp#?iuBq6-&|Gc at oYczjmWZncMUa0Qs3xXifVKk%E
z at TZ1SdAOs6RN_cU9i#E#lwWAoNB_nREvyY3(V-CJ`RN9HNp!Jlj*p?^XY9Ke^7YH5
z0L-7;GLG-60p{B7nG>PYOI=W4 at 5JpdbbSwSR`S?z1GS|#xt|vZ)+B9vm*CjMkzNQg
zb_yuY2;+a4MYBtQtLG?iv5TgcbP>}SXp7B<rJe7Dy{6Un&y=As;T$v4<d13OhVFW!
zgv5BY9tm40AsY)6!JARr;}gm~`UskRpiV(w(RLw)Ui=0yV~|@3mPm&{s=Ai&XKZ9E
zDQ*J%zJSujVsF|;I4X0I(;Og6n0H?u;=Y!X#GikxC^;t?uZqky;Q;jZxl)=uMXOl|
z2U6he1#LA;jb=T!P#k-@&*4bh{u$(`chjr&jGliz?+R<etw$!MNj|OK1jn!H1ssr0
zUm^~${&uGVKmE{g>{AsFeq at v3{wMkrKwJh>d%^=OxO>}0!6a=nVo6NPL#GjOz}K^A
zAu)eDzqr1bTd2skOsIuyL|`!*5=wK$HYgz!wf+nII(`s*cZ`&E5G1a)W{FIFm{SCz
zNlej51mGl^iWk;ln+hndx^-sn>!_MY<zT12zV*CExb5h`MXC%GXk~jWUZjN3L)=O5
z{W`%-9vt6-9d{WpU#5w)nXW!5A$rLdzg&NE0WNhD{ie6)*YIL9VeyDC@@X3n1W{CH
z{U|1;@v3BsQNf;Q>bqcTLFjL^Gn&*%E<jK=b=n6mw{$=0Q;K7Wju}N8nr-fwr~Cg|
zS^1IMTzB1r0RZS0CPIg#nT1*^<>gpVzW|IPF-D0+-1A%~1&a;Ju?$OHB!~vEFRp)*
zL`ZCb=N76-PXf(=Q0X6O`$$y#;RqS6NMoprEB5k}=tfr9cABRuP1HC2?B(f7j-LdE
zODfY!?HKzDyjx~ifSXj7>M<d&(P>Kt^Y*zknC-L-xE5Gnm7!mrXF76@%v|WSn71$|
zU5mFNo-mMbB(ml at 1+n?wFqa9Co5Fvq&ExNn^%!o&ljgl-(XC2BAg|SF{nmTSU^Gfl
z?*82508LF6`WBS>mO33vj+DLk0l2MG(bA*<1?83R)`cVG-Mt)WxgYV+5|&iIXY$o8
z&W3AJK?D4oa$qLw+_Cr6n<BQwUk4cbEXsk%4|DVMclJ=1JD;BsqJ$G()J=csI8W=y
z!Sha4kXu6gvSnNsL;&9Wrofv(xCxyNP90rw#Pu#0 at Ag44vkjO-nj$2}VVRLKE{RhW
ztJrn7at3 at I6(*gugmYRlx%2o^?M%DNxIxgcQK~!cD|_MVq+Q%Le>wXm?UrK+>N0SN
zyIJ>aDX0b--LzqaK!sEiGdh2T1D<3)mTg3_M<*e*4McPr(Lp3?cLR*R1r?3jkdc!w
z6w~!yY3tMXqbqqlIz;n>QCn-D70S31okS-ArzhrKqI at Q|lPR<-u(WHda}SHu&Wdw-
z1WKjLbEGp5pZN0Ay+$8c!g7Sew*<k}S at dN<NO1(Wyv@=_g^nZrvAlo1m}uGio;kJp
ze&cS1l)k3e`6JaC=1ygCm-8l5r;8)nMYNfq$!R;|do~LV9gS+R$c8dZ-j6vw=dR2Z
zS}O<^M>sIBR4#E?cOhuJgNd0^N*HK~M;ScwbZ^|~C4x76pBK;Pndp%VJ9hfi>ZZ80
zh)`76&+$BaSU{4a;dXz>A5&OO`=gt21i=Q~tZ&3QGm|Or4v?=`V_-6%8`Ko$N#J9k
zy_u#);9fHcCqPgT0uUz(#6l)2sog}4M{i1LY#8Q_H41ZYm)eWqoMFewLa*zsi*a{R
zZ0}1!H69djmDXaIA5fq5yRBWgaDT;t+PAdmLj0MpTTv(H!f}6Cod<h52J2xY1NT4+
z<`}||lIqdzVsRffT!x){Mvu81D7SoV9o7!;S^PSQ4xyY=dzx9U#%wL9!niaoVNk&z
zIxhE7On%Kcqpp%tY<mHk`=Irel3n(4z8c+kjXne7zE~~L1RQ5;?w$CoyAKNK_viy<
zijrLb4-%KSV_knrCnNCa`|+>t#W_Mz9b65i3e9H3YqwhA7!g&JI548Jx)zc3zW&15
zQXo?^kRA4G;YfylQCNwO(R6?IPKR`@xt0_qnq-{k6|#lZV=X~+-FqDE+aP1;iOS0p
zQzVZ at m}&A`iq*o>8I!n+hqgzeUfpW1M$)0bX&M8KNWgy=Y7;qf&&<#~fj6mG%&N at 6
zreG=C2PZbZ)KiU0U|Xo0NT-S45r}$+Q at m*<Z53WcN1Tlr$O#dakD<0-_PJl*Bf^qK
zzV1H>gCA7aQ}jE51wMQrswnH~*W(57!0;;)A$Cl<+Dnp8{pL8!hG^^dX|mU&7*uhw
z?_de_&ZB<@Huo(_vHqdDyaS9;>Qa56KiKih7K12&Ul34qy!#0aM#Dk4K_FGhA7X#W
z_<xb!vwD9=mfJCZZiy|S=}_4K+HjSd-oV<OV5ksfc_1<-%ROz8|Kb#Qv at HdrN{V at S
zXE}0Ls&cF6R at zEBu<~u^KyP3b4BwlqTdCrkm?M8E-(E5h28-AP at 7M*3Sq3o?D*^V8
z(+V at _b+VmZFC+eZqg}D^S9Wam4ZcExBMV=nP2s1HW(=;pN5ZNnzfJ04A5LCxt8Oo5
zYy-XXR#&OWLLmR(p{J~Fq&oojZ?0KwEggR)Tp2Cy31LtaZ&8Dxx_j_#MQw}>wOk}<
ztC)YM{X!>AdR-w;c%Gvn*y)wGpxC4ioAC56wT<^$`QNbQKdEbKY8^A;f)(rj6`OFr
zM9qVV76!wJFd072$1_GE2mW(dm^~AP2O9M{F-BTzopKt!r_BLS4)WK5sI~)_GS at Hz
zxBu*k0&~*=07vKc)_suyRDI)VCeKL1d~AQ;Yxbm*zJ2Y&ad6hCGc`v2bX9E*nfZc%
z){j*EwiTX;I0KVQOs3m+<_~`%trj4QTqW$T9q38a#1<y_;L54PU*QeY97_?mX`nZ!
zm|a(|g)wODm3H<y{45JG9o&1frrdyc_-}KP<wIioVmy!rQ6u<;^~=qV`5Ik%^Mrq5
zf_x|-Z(ubH*9{?)xAz}wFt5yUVI<u~bOmNg-AB_RdnMDFHZJ?LHgt|F`{8LhPV@#R
zwJkqzLh6-hd-Fe_TjzYFj;5$Y2enMk67(Zysh-W1sqgk>A|`87v*&=Dx_iACly~#`
zA1SK0Q(Fl44)PpZLnjQA!cr8>eA0h82F@{#KF<T_4!<Ve`U{D0rSbd?+|^ua(OE*4
zV3F%5nXx-th;0Y at G29@p65YU!CMMC5PW^B)#tS<CZ0s3|z%pvTyN$pl_T%Hq7xhuX
z-7Yo(U*P;0Tg;yDX%y+AH-&Vs<tTGmja>TM6N#c!D#6FOefEdOk+tvnd|iJAA=B7-
zg<TAl#`c61Qy at 0I;-AdeY2?~42E&irW5(cKKjz3D26D&2+&?{9vWe%><>6HRghHUG
znlMOmx-k5X!`fQ9+p+Ezt2>6?7p483Cuki5-fcj4IaB7Us{aU>SUrHa>UStj at nLC%
zV$WOHfAPs2$Z;G0Q at VUjr|N%HsEN_!#_WkGo29Y}hu`q81Mb$&wmawJ?P_c+4pHAK
zCnS;{SdntLm}`P3*2neqtmO8Jjms`HBxc)NMjRsC)9^D5h_bUR!xD-rW>c!L5YzxL
z1)L`H&nNn%H3pJ_0G7c89yg)aEL2gFXqnc8GrV-{p=aZdEkV08`m2AXXdb#M8iPsx
zpjF5LKAqPxrNVM6G_K-cvN?zwm9mY6nA~as^`xP_vcHGu*XUZebqGT;Gt0hB;-Vvw
zYOr<*M0HNukR6&-a?5XYK4{Q{^|s9m>^XI=yYwV3X`P at yIu*akhV2k21PN5Z9zhfW
z(||q%L0nZ0u_|94rQ?57TO9$u8byIG$UCG_1djHuL^+WJiLw_~&Q2-L at kutiWCU*o
zLO2H1V6Pjk7p0t)e&6=lx(o#K*6jGDAU{J|8Ikqo4F!s4&f5-5DRO8|p>hG!rQ`_L
z=A at c8gEcGaZy?E at r>Jc9A3dz*o|qFL^Nn+?8G#gYl)eRn+0lQxvewTnX4XVVA}@3>
zFS6J~O?(*D7JZ2 at xFlYwSGh)p{E=^XMhsBOT<H{PV-rCtnpQpqOMf%e_eT92+7l0|
zd^0+1QYcrQ#BOjSir at YtUQ-I3{Z6750Ih{0f_svdXu$r12golfr;Be^XwylG>_u=b
zU)G`~#n3GkR_cHD<@r at SA<v}6k#49w1;5YX&AC0>m<=2R<xYakXj#CdpO1WQ(a0Iv
zOuf22)Yw|x+H*{_z-oFbApU_d>hrs|>1YLm9aXi+LhO!4UyYoWHg3et*`DJ!BaPVp
zK^_vZ#3G!Nf55dM9&th+#q8QwAgdn8SaE8UCLKHa?+kydr(}c1WMsX}YC;&sTNf7r
z^ICIR*#H2{tP04l-KuiAhw&%s84-x_KEQSXt7w&^yKI*#<{ROy*%p+D5(W<NjTbkr
zNVL{Fm8LM98C0B|jJ93=syk9U+jC%UUj?i?H11ncc0VwWLSp%g2{YkBs1>khyeQC#
zwyP|6Ve5a^p&@)gVi1X9v~cX9u9eg3qJ67m*W&1|z&%c3^Tv;ibYtCZe3aL-Qbj13
z at 0?4G;D*VUc3kZtV{EtvD05(3iyk`8@(0`^drk9b9e#5)UzCiPySEf$9DNRk26RD7
zkkE?4iWo=6nq+&y1*!<S8 at Ka0XQ}(^{&!PUrwxBNy!<Ggy9y=5+re?ech$)D8>>jz
z7HKbIQo?KBe&h^Wn6i@)^P>oJYD-69T(ewtIlMe^f_M`!y4J>btSl^F&+B}pk05vQ
z<C>`w*4A6|+#=6K;L*FBc10f>q at MgsuwPVnTNtt@$=p}N$YB_77nYwgvR|r9K(efr
zj-P)RF@!N at npqOsbF|CW6DB6#^@Oo+^NDC$a#+|`1{dEYo72bIa;ro#?9V7kBxQL>
zZ$W9Ay{uiFOz;e|st|4si_v^wzhpuR>&DKfXq=;f#)EUcp6%-9o4ihzPIy5>bxA24
zbCn$^rBsSmigzs-_;}vwwJ(bcA~B9YSQ~$|-OG}#gEGgQ0(3bq_x9H-va7BX*AnQ;
zsoQ`s#P(8QX#ULD;J#)MvG7%H9 at ts)E4O8=^PNC81$^RT(#Z=ENq6z|Z=!o*hzvr&
zLo?;P+j+WA9kjML<d!Fg;Ui&MSz|IponHToOcx_w_Q*H&M62AQMO-8nLEl>mL<fIJ
zeJDY+ugFiyb*E1Sri}4a*!gYMJM>DpcQ^H6xoi((E`a at 283ZVeNG5Zq4w#dTLWJn2
zv$7d!MW3DuYPtEj`3ep9395t$kw=3tqATc}$zVZ9^h}%3KGb<gvkOH{?t_2G69Qyt
z<I~4}Ur%IqC1P1c)swpRN}8Qc5v_l@!*B|3Q3`p4ui3Kg77|%-HqA64lr~?I6VE at y
z2q-?q`npRZpa&^(%u(KT{(q!!KeUvm)K at sy=<QecA_~0fR&Mr~n|k5odXhi2c*jAZ
zW at wO`@WENbc9UngKtRIW(|>ugc|j+h)Rt$vjZ5RuK2_|r#0VdPjng8-tp9&(gJ4o<
zmC{pMIdUC*=#|b;RA{*~?^wbdB^MCFgR`(gbkpr#t}@Ra&CZO!*kXOSkx)x{K>1Wh
zU)e7Vfsv*>685!}LZpn5ckECHW6hR>zqBaGzm_OO_3k7m$4w4lh}NB4O`%*q`Zni_
zuUHQGTUDqWptYFbgaV)w1QmY*gD*VD!4APeFJqpqXoc4P5j;r83j+KceD}k1 at vt)3
zQPO{wqft;SQZWuippx2#-MD-M`9e!xM&L0VvqX*?H9ACXgn=`HbGs=5q9%=F;Pl<S
z)5b};uuUn3IwBp%o55ZGz|U)9n#?i|3TZ+~Pqj*OLg_68?G`;~Ej at qbUbVf_?>XKU
z^Pb!0({>&SsbI!gL+K;?Lv+;gvuWYj+m^#PZ0R6hX-4SLD~rHzobQrX<=$9)4KeOu
zb$_Z~+%A=Rsnqn$xqB!zv)`?~SM1dSb>L&s3{uudO<OiXBI;LG0&*8c<HBC^&W}Nl
zC}G+pMDt)rA*Fj2HNAgO*`0_!3{VJ_xD at Og4S%4(C5#I(3VrCDfYZy;7#jEZ<Aepl
zifZs4whZW!BI-_!9}g|^HcwTzsH^sA?efM{Vdf&4zzI;8d$~kq7C%u*1d6#c7YIi1
z{_QVu;lGHa0*Q0{dhz%H-;B^h?g4K~Q={kb6x-c156DDNBcgxNe+p<V%Ofd=Wfo~0
z9-vy6+l5Mf<#ts|U|jqGEEWyIXuye0pu)4%52{r>(VxHGzJdsi|EL*JjL`v5 at NPP8
z;ny6%&Ck7d+MAWIDf?nb0(%jllb3#>#iM#IG1!{woy5p-%|^BYRNWK^J<T$iEZ?Ct
z_dE_};a?QR5UGE_Q3=zij{RcX><v<gLe$PpUUm>>s%sqXX!b&|s3ch7yh@(ql(NiG
zf&0=OHY!+O at ke{q*ln1`TiOM0$%nI3>rgD+2<Ptqpv>~n``r7o%OmR#_t-8UKz3Ct
zK^SbL)hU7o2JTi<AF^nk57MtZuU>Me?oL<b*Xj_xbc27<f&WWv`CDB})NRNZ+UDJA
zhL-|mMR2BXB=erlXB2!5p?#s$9XELc8J~HKJsT63ims}fZfccA2b{_QK){ht$a^hy
zYL!3>u>kH(v2PL$gq5s$ucD3jAv-M}|BdlrfV^Qk5bpjc+H+<&^@8?Jh#(6$6YjBK
zH2Jx2zFvP1(Kx-f$WH_X1MGSaGTyi1MUj23oE1Hk%wVoFrDMpallFTq^S2#ziNlnH
zchT|~z{=GAcv+H0wU<y!kAn^4J=I2QAhDG)jos$<*(~2!i4>c85(VRJYUEH+&v=iL
zh`{DvGTw^0m0Du>SE1vnTB1iLL;6~peKb))%n^TR;P8+ChPC7X)Gb%v!97}@4V^VV
znk23KJbwCd(Laxyq<>O;6m&*&q!LgZHuBn6 at r4CwKw!C4J3vmU%<G=`M%IrjVx0 at Q
zl-v+;0E_-aN#Pg9+YZ!NFNE-<f>@jv3P9Qh1RSU2DW#|xbPf80SRD<s=CF89&+;?!
zY6O22dJn9aS^h8JemWE2{7LS;pR5zxI}Oo(Hfao%Po6bgPFHVES+&{<M!ZIprI`N)
z^C%bHuhh=boxM4VPB7*aWxuyFON>iHFE6@^zG7SZ*ncZk-L{-~^B<6rN>etHPD8h1
z6g`vmgGuO?RHiz;#FWs9S4Og#suDbZwE}-`(W1PfON3T>(f-g-7>1?*+ydHM=$(py
zR-+6o3myjju3QUTrp->uguzw#M<J_zO#SxW5t1APwtjOXIQPgZAUAywZim3xf~P3`
z#nLYm4yk6A<W%g~Ab5sWqhb5wMY6PC*WL=haNTYrHL%tvf+ at roMJj>L{U+31eWQPH
z)3GZ at i4-O5FAbSKOt``DxOQWlZEqh~cpy2UW}s?b)guDk8Sd%O0Jt*ka}N1V0}pCn
zsaC-Yg?0$AR>!4eW>d8QnSUq;yrm2uR*uSMT!BL9tO0WvLu;v2n|#vcU~0m(0FBrW
zH%qXt&UP2ntq7nQB))_K#2=%8l}~?{%7)M;{qqG`xqHSsbqq6dLoaV{7<n=3wm-5V
ze3_!Lfi?&}I`_HOJ-78E8%B$(;hV;A9{;=}nt)Ru?1$)UjJ8(Iq?U5u?!Q8e2)v!F
zdVJ;n=`Qu5n{T2Kz|{EY6Y~&1|JrLO`UkCUT)r0$y9>s^aefDvf>56BBVvC_=(Ec$
z(-|=^v-2p$9{6{AL*E5)j#0fGEd$x;at3-xBcW6=6}*&Gf_umKHR~kXelEou&Jz`i
zW{0t<9E%_4u~D4D`vmB$rxSzJjXZkv!;c;lV?YLkk(FoD6i*Ty8?WtJ)n(QYgr9&b
z9U80;H^Imc?t?(cw>M@*5nX at rjJ|BUc>H=USg<LJ#R~RLS`QxMnN*n?j7(_%4K0K%
znSpmqPG9D`U>`A3R?Ah@&LiO!c(rraN<pm_(i)nvlO at 0cW@e&EF3rdxD^&pcFrjSe
zSyD$=U$0zSmxFZ!`fo1qKClY3Y=w5^{Y&O9`C)P6HkkS~AprBD+v|UAzCdFNBmU8*
zb&d&rw at F5YtehtSx!7$9f(g!`nNZr0Jo=MgJc*gn-TWFs|8ja-FYGGD*cIN^QMXiC
z61gBgfW$Hyt(ZLKyN=FZW4dM<Q|Q6a37u at hJJ7(@lv><0?MI2Tu;+*=oV%sl48*bJ
z{lb0fv#nE1jvu=FWJ-U6f at x_Dudl3b1L7G3_b->Un(f6vY3tLMFU+c<Hi_<MceRrm
z3p%u_ynb6ds4fzs`f*2c)Y%0QRD>^C@<z at k)L+k%fwXdbEUEh$;ZzJelc0@%FBm}|
zu13JJ=`<`EvtK8cY7L)Kb43EaTz&Dfjm%mu9SQ(pet(Q(ayNgmqV8(v<<oo-$cu at q
zSgwUOhj)OhQzoQdc{+N8KzYInB$t4gb;)F}%@?v<=p%?e_ic<bF5ItYjzN!mj*ZOb
z3dUd4JctXIYB~F7KHm5*O#XB8iPr)j`Uokf at POy2|N6rYeAKAQX8jH+9uO*$o;o30
z_syUevEG&27r=i_W!FDev=sm~c!^Ln3Fe)L4vwXCa2Obeh<K(`Zd~OV?EL|V6SRf9
z!X*ofg(5k`TJJxuvl(|RvtEsy|L<fx at q99m43^`&Wo}r=!S?h1E1Lyv`(-{NLEi!&
z=mI~NJ;0y at 9|XS@!D1GiS&5P0K at 2?#41um<>Eh2M4T*m#poOTO0*AJIe5+hqC8xEz
zIe?kp)~s?&E_Yw{bk|+6+TiFwJsk>@CEMOV61S=kuODSb`B4o3r>?1xI=7A(z0_!4
zGgo#WWbCB at Jlz@vI8%|F_?jBMsOqh~YqS7V{KRGAV!+Co)j$F&-15p_lg$Gg#8L}}
ztM^*$<tl%8zJK<@rWi7795%p+>hi0m677XO6u3A|69$M|w3VK=KCKFzg;6{fGLsd1
zvx-5#Lt3oxK8<@L4tK4Bd)+UOG-{CLxKv$`bPd<FQ2M+9gEb<b8*-<^DVL<&4tR-d
z7#|I5J-BmHBP1Pf3QFn)<0b;oaOM1;D67k--WGpze%Rn?4R$x)C7UgX%>q<y%+9#?
zT)U^i`P2(ym)3W6YJ>Dg1o8hGW#c4fVJs*R2H<p<FVa0PAeQY8=??|uvyTso2f^^H
zIm`f1eOo;E;%GFI*HiG{mA+WAM0K(TXQwwBA-BBu1<zKPQY#jjumZSMJj)Ja=w;M#
zdaQq+e(5j3S-*f(ZRKQx6_yx&8k^q5*D4wq+sX|r9(XKNKeIi%h+|I)hS>F3YDvan
z6t@!X!&@i3+7DUv;o*btIv+SzPoVV$o&D4$G%W(ZBQW=H*NkMo(wzSLW9B|SF7ToE
z(v)`EYgKqOiHqd02f2=y>Tp$FiW%)~S;c?gtIPHSi?!CCT27Xsvh)Gb28`PoDl3s)
zI6u at nGlwD&(X1M5Jgzf>O#o&7@%<Cmapks)Q4euNkytOmXr7jG{>g3&e*JVI>}dpz
zH^UTjQ>V>*tNM==(b>~?)%1#Bj45}CE?X|Y5tRDJsvnJfl{qDqKWWKv0d&=v1U!G7
zd1^hv*PZftd7~7zFsd$Z;v8Hv-S|2(*mFABY+7yi=H9XW!V<y1sf-^S{;kM`QZXYY
zHuDeyqIKTWQmoX*ua_OOf{5f<>ht+;|6y)Er+6cB11_!<X#bNup{1B(maVB^C&n4T
zygT$ILzmg5MWx at _AUmL({6jNkY$$(=e>ygXrbB at NRWHdsVU@YfSkW-Rd?&?_P7KA%
zBWh;TEjZ>~&YOiXie7Wz;gL!}-yIZYAowY_Z8{0<^rpDXmiUDYn1_4OW${h(;rL)n
znK@#1q_N@)am_dp>GLByqjPkXD|w|hNKc=ap&rWVwVH$lf63h^c7H>Q3_pJmD=JYP
zh8V$;=N1E$^BH0>{IQ|?ow(bYWk{PuaBkZ47pWa2R4yisasgpD-#2wg{Fz77C-vLD
zIj!+Hid>q9Xs&++u$m^*;MTq~4_w1U at Hc4fz00%=JAY2)hFw%-lKA-pE=z$Ue)(#2
z$m!V*sr<>_B>AxS7_w#??1_Ju2FW>wN<CXNld|KhU+<{x at 1*#Y`ZFhUsy&iV<*ys5
z$aA1sX1V<(4@~aJJq~_4baBB67|X&6uvZW7Euu0OSExC<?a{s7OO}t}^g{EJs|5mw
zG$AoBHXeyvHlNWWs15Jc>>~L-G`J`#+^-W+K86Hm%gHq{mkR_xUj={N1c(pZg+;w(
z;3|D_K2yrn9^Q0T)K)Y7D9;*fJj1un{(GCR82|0?NJo%izbYB1-&fz>4KPXms3r*l
zij1pjyt8 at gG(0)39%<t}N4Vk|C;n|d)^NOXT3Bz{-!G-MJ+MW5@?4(OG;AbB(pSvK
z*{ISI+KkJm5#L}s$m at T`kuC*$NQpMg>zyqjZvpn44`_NWf2c&%xiKrn_p0WPwo4|>
z(jM4s$rLWksQz%S9={<c$N?9fjlR=SqJ(p`*$Q?&tMYlvg}6SnsG#QjIfHt2SSjCn
z{|fU!2pYwF%Ax=nc2-L#dus8%>gjMq{@83h;n4+u?=ViHS<`<XW+)Ta(>2lUn|!sS
zyJTJ_Pbb20?icO_TWlLip0wAxl{h&+Fkiq#flpKrUh#T^^QKCWJY346k=`P`K>C?L
z1keTa-qC|=6d8OCtc4pO_2Z5k>di~R at r9eUfH|6rnUt;`ZUytnA5kShyah&@F}NbR
zqcCNqE0HHcsn~zzKAf#dl1LQX^5LCl)jhRsuC_{cZx*dRA)2&j636!IK(7*+lkWBh
zds3>;wfq3wwCg_O;qCehZvq{>K$;_^jE+&9)M^v#eoeulSscaAw8Z at U#Jj_e-+WpT
zP=k+n-Z%SI_Pg at j3vLJ-vziL|ZMTxLffUkIQy?(P4_ALo9HlW}r%}ccq?X4P6rKnP
z^brS8V2p!X)JIUC#cbz9*W1OFCtA4LUQO04)a<@uka~3N%T1?5LSt4$N1<U2D{#QM
zlN+_7o_sxw#Bdp`d{$YjAs_U%m`aigV*?>Ptd;ac00>Fbyar#+diRV%Zp#H|P4Ivn
zP$AJ7$<}{Izr?nXDgqZYL at AJCm2>=(Wnyc(-0eewc8^RQL~4u>#6zOFW*S~=tasy<
zIOucQ>}@TczMCNuhXhd4XyKrm;fm){qq{=)MAqR3D7Ixhkx`jbxU!lG%+}IU3*K61
zn_GOm0{Ic!czlmgXVc7B)N!eZ|5!7%xoby$0y=-k12~u?tSu<8ks>#OCY+p)*PxHy
z34WpV%dlP&qh}(U&CMnIJcM}|X268hI5C_r(-!2iMzz|#A#Sv=l5237M)}Hk+LSc<
z!;?=K0kqF!Ka2>6xy*&O0dGkMvJopRD6yRM?^_8i$sXfSzw;*dH_-BT7=QAk&y?ao
z^T~hoW=q>uQEf$U182G8#E2O-21~^FqJuKM%8fd$PFFs!ke`z2IIR_-XdiOD&W#5I
zu%tmp4)1`_OTk9;`9-l4gg?if`Z;;KwA~qRB*>-k+?sCH^N|jj`QnX5kbjF+sH$*l
zlTM7VH58c@(>a-;FkbVvZheY$UG3UdCP9CX^aKe5BN*DZv)_OK1zuvF&!hkhK=Z#v
zf(WiEpks}IGt65)%`$aJv0wLeFo6o#l$F(@Q+}~FFJY&oeu~kiqi0gWdk$teDi)k4
zDO%b`%km at 4-OzJPG`bTLxiFt*2Qn2tMEo3%pV>^N{h=qk-YD0f{4k|x`fry^hq6i~
zWL{f;$B^GZ<lL4pis2j+gieuyYowx}@!BHOoCFzyC)*hL!p0sx1~Y8Vs6W4*Y8%Yp
zbM|l?h at 7vWiI1&{G;~ba9`PdcO^1V*KbgGbj<lsz0B(lg(>Zb61!rWXx`~SG5q5Cf
zc%q;o6mj-l;OS9O3j-gRo@%%lPZXP|eQk<=Z)dxCI~I3LL|B>rF&XcLV|vbS_?GFG
zyU0t4KfkXA4XMR^@KPHp0|aClgdSOL+31#ICrdm}rJ1l|7zXo541P{R%ES?x at iHav
zv<KJhMwG;|=(Tvk4sg79zz$D<mTHW?qWV*S7YwC&aG)(>h#>_khsd6_)_vk5rpzmU
zkpG29k}NDpW=WZsc$NW?n><j_%qYYa3d~9ybwk8}so9N*xXk%=SO<w={jWKEbqrj{
zQS5-rOq{Hnm}Ny=L|o_s+)5i at +%Z{gsh1dQeq4$&)oP8ZPAWFRp>%F;CD7un+_ifu
z_28EAzkA2r`MznNqNY5YEZy`9!nqQE$`RdMt3ls1HbD+l!TEb*69wQoM<dQ9Zs%Ef
z{JYM&@WcncAwJnTtf}Y)|D+{7b_&%xn|oTIcWF4J=yXuP{GRF1Ranr=taa`-4j}m0
zBAX{J3khUYkuAy?BnRX3HmAusRPcYjOD$5O6EabNBLgQ#M`C4Sv^1a1wwzdh`>dOl
zeXP60njy0YcqcS9 at kTi;sgj=h^J$chgrVz{kO_5$bnOXIf&6&N!Hw`DkN)$p>w-6z
z{n)DipBV5MQ7hDN20G!{)f(Q9xrz<!*|aT8S<5M2O?e1I8v+9RPceD^IQ7kjlt_z%
zK>Y{M`akGpGF=Z6Sa)jU=yyGTZmCeX&rdBIezlWN;6=u_!@qqhi4e^mc?3E=Z9U%8
z9z=D}wsT1WllXK<T`*}o at X`%d{SqII*-S9Irj5D8{pv*@4AjJ};r#2RQBY696*n;c
zJgJM&EU1(Mvy0$I!41~WWZ&6|KTsavhlE+BXox?jR|MC&oKR&u0RFUpMZSX{{}rza
zxT%hVt>}~*$cBsmz4<&CtX4XT6CMjLEgUF7+LRTXdDz}_aUcNgFn*`UN^AJVj*C<I
zc<G>LR6JNKf0d`o-j{Ol<>k9IH-C&mO+fj_Op0~ak&?WZFLt)i9j=h6#gr67?CL+8
zQx(|?J+1I=UQB<+Ym}*f4BNtV*=rsecHV^uTg=rrJr`JX`D|(;kYasb>cXSJMU*G&
zKRjg at DKm<xkhJmTu-SsbJDfSm2w(16M`#{i$j#~E7!|KAmk{PWFaT_2O<eald?!dl
zyo;4xrZaw;>Gs!bs=c3qJRkG^l^Nn8=8`Y=z1(2f5J5S&AI&{~l1|(eK(KRgbMeb~
zzS0lr^=p<g at EzQL{cCuE^2jsc96iLTHj$9iaE9rR2nSBo#5CO4)e&=~7vHOWL!pFg
z(VsALNn*EGG-A8qqob~##Z?}B69Z;>CYRehvuJkJ>riL<b6k%Ryfo|95bo#yD3VS_
z;MO0BGzm&sk}9izkJX3y19LJW7T7-d=OR at vT#zjfn6p_IWMz-<35W=2LjZxs1gzD%
zQ+$%4G(?$O<_`U_kc_C>*UY=A#d<7ccA_VP+-`2L-z|5{S3|s-%mI(&Ok2xmso(&3
zv$N2iP?vXdWPK_%&>#B`@ghG*(Km_fP2F=nj_><h`rkf(7K)NuS91adla9Ypr|g}u
z+vOpT at 1#t1gz5ZRZEbZ4XMd_wvYe!Y0xK=6p*`3cmT(f+TmneUpYIIb2T~%DO9Bc<
zG5ZIPsjcH|(;8hMy|UQ>3VQOn2;<ouLaV&d2?P05qKb)bxn-Z)3jKA}1!qA^=gnvP
zFuV>v*=>Y>)@>i at DvD7QTtdaV%YW<E#IND38Ez-wUr6XD7TBZni at gh8puCaYH+Y+2
zqdx7JfnjlcQRZoMz+hG70TXt273Vn at CauMuQLtIwtMxV!#z2j3MH?9Mbd>dkO{?Sr
zd-{{#%GH|Ls=a7r(#FmKj0lW$IY}&5I6eQ_+3li#HnEZxLSQyV{dVD9tEPN}g}dh8
z9*S_xbRp0j<m2hQp1?{GFdGixHYEd0Ab?a*M;cU3zm4om4-LDmG`RPNO?{W>Yq8K@
zEHR`MJK&~|Kezd&Od8+p=6KE6zsD1Ku#(fgm}M4$ij=r^I5OQ^7j5P4xtJns1 at BNS
z-u8ljY*qZ>!tom#dvRK!VAFBI&@lNC5<40}qUKC{^V+ewaBP=tEP~b5I at IJNFc2r%
z_xB!EtR}Pddc4{=lPgL2R<vVNiA*;|fE-%NcpY at vWAK-#0+2$6AG<xn7>_|os@@r#
zQ&Uc1s#b-#^U6rcohf6S<(o;GjOor<kl@*Wo)Cb9x<R?3J(R%@SV+!S$~<DStMd;u
zA{8IT4HU49C9<2dbzlH#C)tM`n`f#=u8FPay8s9@!sNH<5CpvWi~;nXdx_X=W%4?L
z2=;m+Z4gpNTf{;Z8BPj6Pqxl4_4R6N<oPCT`+$EF+kV3R0n$ypWopGgr<G7mm|;eL
z#T3LE7mEOIooSJ7hGI4xdbxQIwKD)jr%DVlU|GrZjrrH!;o1E)F?XW9$ob&<{8>ip
zsbv#9$nh}=(o8w`-Y)<e!LYYJmN?dim53CZ1#TyJas(97+H>*qPB3+8A0U-;ULFAW
z-iq&--)mjwOB0OP9VET60)=SY2}VPI$2m5d7fQeQEzM97hI5`r^eDhGk5P5 at o?EBt
zw*o}u-cR38b{Q8u$5Q5uF9p{i6V>#OJM8f6#Ve}&Z(fAKa#mRFx8zdQZRO>$L^#H^
zNNbb#tin$vHji>NR4!!ZBB$^DVxmTB<jQu at hY$<6G0OR|t8YF^2<^!daP7E%`h#Zf
zsRUgRqO8)acA<NBCrn6=+(tAyqi1Ks$3_FmKY9v0N(H)nzOai&jf$VAKKn2~795jZ
zZbnkh)<zQGkFvIvu}T?Id1PV9mS{Rh{!OpMcNj|--$9WNAgXV1v0P`URPT6j_l5T7
zYl0|8d=plTVQPbnE=jcdCR34r74^y6jZ+Ct$vrEHyY*x8ZCsyVPRa*M3S&g#*I-Xs
z4RFIy^rqoD#|dQAP2&JpyWftCavhn(*0oekTI!UoW$~okVo6VbwlwsMx^5~e4q~(;
z58#BKNdc^j*q8>)2pkBS6dv#fEZY31YNmv*dndK3gMLicty4H^&g2Mx3^JYy9)euZ
z!&s09k%{ZTVl#@ks5m{E+~?Ffwo_V)rXbFp5FwlRR9zn3=CJ*U!3uE6A|5NXE%**l
zX2}iSU4jdae?a(JVqS5ah1G#<h1kdKvmhDflls;57qIZNnK7ze;wymJ&P7e!a-Epu
z%+Xg*M?XIHt|EIuqq=E-UE(@1nj*lqKgx(zSvo}}XKr294<twV{iLC`+kB5P#MCy7
znn>VVB1^{d*2~-bW_u<T@`TpWbEMk7rbhNyt}q-HveXm}ovX3Lc4(%<`oCz+FHt+v
zv{gLu)0C59tauC at HYPzal<_X8tCHox)$HYqiUMcF%|Rs4H at sDUAQEB4)L6=tpYo at t
z<RxJGmeD#l+KT}KZ)FDRi03470N3Qg!niMrZ=xfcy0OMLx6#mZ+;`_n@*KgFBqagE
zf^y!aK at TWJi0jA)ar1#5VoW>%p&Hl;hlY&Jpmjf_)p{~{G)5u5b{GeYKi{t$q2%2^
z051dOZw%WVP(&nuT4+6QaWI}cznwr6-<hw~Iix8l_-1+mD*qOLhfL<NIcF~ms5V94
zRm#J|c8X+3 at J_RBLQjL%-P8CB$~!?EZ`ETnS_+S?igYSG*DOTy*7XiA^tOQA_~)D?
z%NYw at +Z*G?;i3ayj at TUVaV@i%B|;8Ye{{~#4rH6WM}=K~AQpx2tnA(oj-xth{Qi3C
zd?zC^d_~fiGJzNs`S0AON}&G11B(#NYgv83VuJrwRyg>Wqt|Uvn78rz3A+43yntCZ
zSFT<jPk@%&i2}=#ep<1m>_+bgSlDON>Tl*Z3RFW-9InVdSRs;y^XVqQlIh8s+m;cf
zzG$Szh0|kybe~5;@f3k9ypULKRw)ihhOYdf7Y`1J_Q8qTiClcqNZp$o;p~A>2SkB7
zk=(`S=6Z92&%9t`ppJ3FS}qqqedA00mN4lDo?2Vkb4%hRS=E;m_Xx3CL3b1ZFx!6x
zkYE1l8_~xkH0pjCwO&g1LWe%j+lh3_ZOma_EqHi;q6lkQ2X7_F&8Y0Qg52ujt`g4J
zRb9NIcj4hjKADp at g9dbx^`d^D+i=lILO^6CqU`lVBNz2iWM!>*?qn at aMs?eKgMhrT
z);yd#&SE-(?+4sd(#D*3=G}0KSibjtsf~Ne<;OL6c+p;eRBBL at M1io!0u9Ii8_U~p
zP51zRhy|rzhlI_Z3T`JbW11a%K)684rNne&qZfQr4 at pjmr~>Y~bZoScQBS$|wb}p+
zWSRz16hmhn{-H_9dcA0|+sj~cd-ChKUyK=ebaAvH<VC39=_|;=2Nadh$`b`mH+>-x
z{x&LrXY^M>jO1$JS>DhZhaBfg5nu~S1T;B+3LSTxgfGJ3ny=r!uqUVn#da+4{y at qz
z4ms|!^qy%?|L-`w3-mM%y|>$tG#(Wmu#CT7t?hW?pa#p`dcMm-;@c~;`AnEF8T{bK
zbTB`;f3WK|GXIDSh_i+)9aP3s0(GZ5J at f#XeI1b<=My}-7N`twmm=@ip<V;JneQ at x
zJZ*GqvJEe8=pSeAz}${+-z7vj4{yzzJ0E6oG(e6DqXnw6c69f|l&Kal7uh>;@J(Gk
z29cn;8GR&;8n?4-R>AQCOU+A~`(;a|`EV9v_;m4+Hj1+uS?YKSN;k!*9||$fHfJ`w
zGgSh9od`-?PVQw{pKkd1IuK&#;m<;UEnXusYOA6(EYdKbQ5LOoL3ix&6*08`|IqX*
zku6$+6zd*#(RvSnElAWvzX9=kC1}xR0hRSGV|E}wZK(gruT&l-6E!qq(Y-5oUlFmm
zKg9Ek8soS3LER1jcDbjSP(NEVRUtkuvSlXJ*qY1aB`n>GE<%x`{E5??bPSh&5T#$n
zBwEhm%^#>Un9p$CV75d6+NspBS;ci{Z>%JK808g=J7!T1V((U%R}IRJmoAYQqPj(2
z;1of-^ZLrlD@^)E=@leHK9ohQCb%O-m#><51ab$Y^4xqyB>WTYL$~6J2yrWbV-Xy=
z`>~S#QZtrC&P1e(f0jMUs|M<SQ=Vr%mh;1p;C^A6euma~UI$5O2nO?7!>F-GGG3g(
zjEWZLt$>VJZgoCTyU;DVIktQnQ?(G`3lPPM3!JXqr(bo>g at rFijW?Wg7TV{pJ at k0~
zmTXr?$2L@)Qc9RBz8zy^II8^MowE27nh?N<(5m*$Inz&~+`{UHJhkJ01W$3&IAH+O
z5u;-~8eLnZu8xxw7qx#Yo{P(>7)SG2Khz#!uTEsUf@<kBt^kJ=Le+da(m)DYtPB1~
ztrdNU5k}+gUAx|%_prpc(PNmb57(A#V9jfDwh?<3C9;RFq7-4nKFgMQdK0*Rle<A%
zByj(3RCO2dn7!ewT0WzH?R35O at 9ikO<6Qj>PsBccH8L4!4HQbZc~<_5v!|uH8lwSH
zvesWK8 at g?)k-_V^ec|Yk+_EksUL}DlV~pC!kN5RM&kXkoMNfSIm|=C|Yd}SRNclm!
zIUln*`bk??$(oW%8&{Sb;J63PZBq6Ev8ia-T8w1+vGnEfAx7VSy_5~Qa at boP3Mf?8
zoit<IcD&O`PIa3A;y%F6$$*~K8 at t$uK7z^!=ni*bdkjwaFhPR?%bXg1`Bf0BvM_DA
zZOVvPSq(+1NVcxooEC at y*<wed5e}#8bniK^d)><oFHmuj*aleNJVoP32)iqNu4ihr
zp=%1+lp!H_bJm!D1MJmik!tChQ)nb at 9D+AD;#8zC=|r=NgsFAna~o}vKY_m(DFS8R
zbX%=P%>W!3;*`jwG at d3V{ub)p>46~uk&+0f1%F>NUI}$t{Tq{J8Q=XByRb(jxoSG`
z%|oasZ3I}#?D!L#Ybq8U8<zfp`3FC3qlBNwK({J2WyLmsID5NSLh{=9tOnADOkPsY
zQu@{#;liFSK@^~DaxvYI?ooEsj$~Cm<*Q>8;%C&PMi#5bro!@9RXRg_o6=kw_<wPo
zt^*1LRYB^iIaUE5Bn85O(W!27&m27=m!tNJ{Po6GsU9|T(Ro9a-sI_RWyrnnYXvz<
z+#6fBVQ6)K9Y13w(JSIBMwK`TJ@>WAfhN4S(8!I(y&h5_gb(Tq^@O!klUpAscv3d?
zd#4YDXReO6!!p%b8HW!?3^G&wwj~)*4vW>saHoLyLBSKxgkfDe at z1XqX7F-^r`?sH
zNtKH#*^uoPSHaURXDfu at nu2o)4`={;l5<od8-E~wSaw^RmIzRWlkLpLYVpxDC4lw(
zwVT>iADOt8L}ln$I0<iiXPKoDnO|`icg#7gm%nvmmN39nESV*8dFTeB!AI-I<@=D}
z2>E?DqFG at EM8kktC!0Wqb1##$Jt#nVgv6#4%V5`jBmXi)=NU@`Jei9PgkWMM*uPrR
zMRP`fK-!8YB7{HsTkH_ixmjtpu*#L%2Kr-Or>dr^Dk^QCjvd0k9chEwtr35U2ohHc
z_?)RokpQf=)2Y=`<NW7_O(Shm)eOc^FZbGzknJ=6+DfuDA4F&VZisiUE7n1y?Gcfr
z+GM0mzg#nP2c4WVh}RdFC|g(yR-Kqol~i4S9~nSFij}qWgu-ExYi2)3s5-2T at jypY
z*-lGxI)v9T;PD<Xmi%7V_*YJhbiI1usdv(n0vTE=<wO)VbjbwUVkLFOk^joJ-Om>9
z+B}fM#gE2E1#<Ef!uLvp%+UGs1mxj_R at 1c#xh;x?=I8P!a)KZXG7tRmAdfDCpn4pC
zh>&FX8o4Jsa6Jm%+n3hYP$D)D;QuI9kX+WRbjJf%(^gZ$-CZh08F3VV_MbzHXw8jz
zJW*0z7hRk^rj_Y+Z|yIYynB0fxujvyow7OqU(V|Yzs?M<nN}oXvySLnAtzOfW+Ctb
zNaF{>>YiJ#w_82>I=d5=5T$}6{-(Tteecapg%+Jbi_CtbTG*I at oW3@NCz8*{<{p`D
z&QJl})G{FPT8TH1h9eY|iU8t!bR=af5v%~6;H49>l>_3)v at vt>zPF4RviKiI#<?z`
z+l2ED?gRq>B0Th0;ugESxKe){?E(wk`FO_>*9HFH-k=Qh<Zb2W%6kN`>IIp9&raSZ
zkwpK!J8h{YEg$<V+|~+^vpHt}^fz?9k@=&=QuO`shjMX#>3*>&3-fW1Ab(i3l%tDd
zJcFrrC$-dBN~s@){(eh83qql^)AXI|(&M3)$nc0zIzPkf?b4bNnWV!%-AFS8Hv&J)
zU>_PNp)iinpidYr)Il9`@A&n9#vaKN<jsN2VIA5*24%{OjW_PGTrK4457x1wIdaOI
zrptpm#E-I5ouSOi*~vc7bTGktxCjSHFfTf4Kkj#TQ42R(*t1&ki*k(^eWopU>3MbS
zxj}69PBcjcPBhl9#YhipEDX&se%`Vi?0k{A^1f{gLI7G}A)ftc_Vf#XGGmWZ0<!~!
z5D07&cWtwnhd*y}GO at 3>hPAoC=PR&eH~sq>PX1>IjYfVAcaX at _@CQmnLX8!1sYu!s
ziq);$&|u1L#J=8E)h3FF9#26Ij=A;+WtyeuS`I+--{>a88{W^%`<LprS;^ByX0x^k
zLa6GvhD6`R*@QsH_GB7=viU8hCzi)&unpG`EY^qfv;h$lIjw2ZI7xwz;B7q*<=$%B
zeqCloai at 24)A3fgtgMN;G8ln9>ZGdB`ddU_U{V4&d1q}2#2DkEh;rXaJvWSyZd+Gh
zy6eySOgE?T9T-j6)_T{x*Y%GgnwL?g2c&Y%vg~+_&3 at N}#{JNLp0xcL(d&ppfQhEb
z&=oICA-xNWpW>Yb8l+9#9Q%>Xx~6Se-e}WpdQNN%Mc)dR)Hb>!0VK8ww)e at mqv97;
zXm=3JR*_o>Qj}y28_tvZ*PqDXZzP>j1r(3hG_>4L?mdO>zjRe0_i4$z@*MsonAm|N
z_>lM+qfqnYuk^Wps9ESnn&&dtEhwpcd4IX at Y>xTm{=RMz3mRyZ4R&JlfifvJ#H at d1
z2W@$#x2d<CmJ+s&gQk=s;P08g^8|X)N=8C?b!3rR#}M at 1g3+%t?Ne9}vh{Gi%~Q<E
zI4e`6uq;oaH?dk#9D07W)%!)QvQDBsX<hB`1z)0y&i1!|Iwqc`PYIMKEt%Z$OeWst
z2BeaFpu%+t3;tbiN44l1jFUr*sDBP+V4l?DZ`&B(&5NXAq$U2S$KkweLFtHAUR04*
z1sw2M)5?zyC+Pee$ZJTx*FIA`*K<^)Z;o1srGJ=AtafyGf90reEBSQMbE?vG71tfo
zvWb7+j1?k(4%PxX>CEcA%l2)f;D6IUjT7S(&i2A^LFYOfwYV|-m_WEo=b(15Jj*BE
zE4qB&9qUNV{Ze(*N+YP)Z($h3%G0t)HP#09ZM at c&A?KxMyf0$!Qk^;|;Zs2bNlR2G
zUuOyM3eECo!Qblw%k6hCWEbVxE~{K}y11mcL2ZS9e}c75h?OsaqMjywX|9s_7X5^T
zC2l>PRHvWf^F6#UaJ;p7 at V%Ah5MpEvf-y at dqsX$*fl`zBj#Iv2BQN8i;`6gW`5%3M
z$0gbbtDM3n>~LZ?&&#)Z-fn-f{GM705N==FRj5w<BRQ`7(GYW at jQcD=;0Fh_T5mdT
zAYa~pv=R~E-*I5I&r#3S^SeRT0jFEmS2`~jCb`6k0NecGp-%%8SPK#@V|mB6K6i+J
zh@`+)n?vXi=Zs@{SsbO8a8?nLK?E!`&=9|Uy$lH)y{|<wBbhUoQEP>ZQZw`tIfV5L
zgl6;3&=209RHXOPE+2U!5#d^7Y<a_wm_~?yHQxTrfqC-mfmE^>-dB57M?;S-3VKVx
z7Zu)~6v*xCUYb9TmkFaELnni5os)Q?65JZ!nDvEa-%$<SPB1kbyWyEmwTRGaSEo4>
zO+=o!?_Lokd9mB5uIcUB5WshCh;p!Vu=sIohFN8`y at LQW&f+}q9+(p-SrTF&>oetl
zK2gjm&)?qr^*+K6uF{|V6^}&=A6mX&-*Zo8o7{+*m9sbBuSAuK>Dt}XcBI|IqG$$n
zSlYT3Griz>O9(?PL)oj{U;_d1q;Kj4bLl+W(wL5%(O}S;qy{B{Rk3Xv!y1O>T!Nm@
z=FPBP<3@&2_r-)~xKvr6BKEOBqdr4_m4eC1prHE_K)v7xARYKwj$cC0tXWMj=BRe6
z8<z^>;wZ>@`GgU{IG#YwSa27CL?D}O+hjBgsg7b23w3U39a!lK(dH^RY(^^$FLgS_
zWQ~M;f(w}mG@&P4PdGic-20Mw5*bQjkXvyzE&P=y7z^-+UMF$7UvN1%1SNTY!pJfH
zJC5%qqdy3 at wF;#@6CgZeT}zb;+Cb90FUdKz9s3j;QXvoo**eS?s=OfxD8x$TivZ{Z
zh(606DUrMEPEhQ4UA5c-{MX^4I#l&H4W1n$++`_H2U&n<__fem{n&-6=HnSarW&E|
ze{TQ>Tz76VDpb)iqDSr*Y9pY3r6e%v{+l+dfK?@h at 4LB1`x`gdF^#bi4!6|+7I)`3
z8F;)x2Xbs7h)7nrw=t8q>hGYsR$j|iQ|L1P`>h=R3=cfT^B2(~7}nrqM!;I~`_MqJ
ziKpfkq at oT=Hpb!X6o&g`I3%FsriD{av8}<>KX^BW#Bm}YA<Ihj+b>gpX~!+*zn0~#
zer^l4Tow#}PAK>d2h3b_alM7<&i8))EHE9bo;D4nr8Cdped}qf-U?V<wqM)p2-}b0
z*xZ!>gtc_4DUwF~=3FrZ%m&E=96$3yEHp2}ZGb=-aP%DU5eM}~JYLZ>i$b7Skjla0
zRdyWQEB)W4#4>_dRZx3>v_9UG>IrOmyz#WGgd0B==6J*8qTp at AA@(W&fU}=jn*2`J
zhA*YZ1q~*Io!zr$joMf79`jMjv8n1AVR at R4C!=tLbw!UbClJobx9Zl9R0sN?l2(K5
zFly;BG2MpssXn`6^GI?NkPFM!ZAW?bZLmMSWAY#c5-+ao8ceN!Zjj>ggD6-4v2JSo
z^A+N={afLRbZyYkrA3CGlW0_Jitig|?Zml*UjXyaH*B2yn$mB0h+CB4ix1mo)~_k{
zcjMPSL6d$lZf45RDKz_Wrtv-R(;BnafE^@M=Etvfg$ijMI+4}lL>S${Xa5Dsn^9OD
zK2Rzc5VSFaS6%mizDU%^y~(_g%eSJY)#RRPe&$#ALFa3(#8{kpB^g8CU=Ea$(Wh!b
zxOWTiek<vNg#knX>Ov`X#Gf1ewEK2+63+DbcuLoJxc!cviD|Zq|E7&Cy_DO<Z3OEz
zNK0P`0{I$PZ8(CqSBu*nx#qgj-KT{oFVIQi=A&u9dusK6EfYlo14ExEmH1^~#Reur
zK_&lVj_<Fa0BhqZIEuauubLCx<}BE?l!(lD*kCYMp%Exn9`sBhixzxMVE*neZwEfX
z8WF?=>G&ZU9!r$bK)(h{hN##Ao4y+{b=swunn&UjwMVV)o^5Rl!z;OT?q=)8E8EkT
z)3&@xA)Ly8eh|8JZpVOjzNcN79-IfYqw0{1*pcyl=uh>-+$S2syMW8C-s_Uf*;Yt9
zL&8+l5lxTnHrKALX!iN}i53Z>^PX*AZ78_85VCQ9O3XpI?*94=;`M{)A3bs0=UuCf
zif#yj!}I+w3BZ9b#w5_jh+VBv8;V>y6JaGJqRA+KR%+$d?AT9sp`Srf@%CT0UhMxY
zp^Bv!W^N=FMfKh4Kb}UN?s=w8G}aaG+*ig}-LBX>{T!rh6vikiei*C#`@QRJR{ibV
z&Lf1>1a60H+MTEQ(F!5cXk7M{Vo(qo$nKe|?v`As#9pC+H-PBE5J={{+|(I{^g?J|
z*n at w6`1oUsa8~FAXDlX?LDOhsSx3LEC^!3~0 at 31zk23ZRQ%ppM)hSgW4GS<P2wt`9
zVPZYejo*NOOJ}xPU&+T_YD-*#R-4uT;Fq?#9cYeLBy;fmK|KDuaKm-d8)IqCXg(JY
zqj%Iga+<lBlrcIUYjXGxPpk~;Eta`dJ*gvq?IyUQSe>~B at s~;r&nc<jkY{rOKjPO5
zouVpP%G-7o0n-6U&RYfxf7*t7O8Z?{rjgPf5J`<uaM9jpjZA*e4iGI|(Gz_G`z4T4
zJFZAoFwP-N0M8+Y>&*%v_ABj5IE>OudAq?J%Y^F~4LV%n<zLm>0(`S;b#kd`p$Q*<
zAb;NgbpFN~67o>A#&RmdHz~nP at DnSqTIXGpC4Ht1-EZyqOi5R-cJwc1^%Fi4iUo)S
z!?oGwS2D?B7mXHVi%5v+IPTS~VOJ0-QCZ))QSFR;`oaf at _8WumYi=h>B8>C`qn+Oi
z5~OFN^LzaBI0e`pyd;+lAU~^>7YiVNy!doL%W$&Sed;(K1aC28f!k+W!$v8v at U6Gy
zYlG^Z)|4^!Pj_}zo~e$c37G$MF at Y+E=KB31hvGE+KX4O|3zQu*@S&IqMrF+UrNS*k
za)?4Ofg at IRFfu)*YsoFvG$P3NHB8q5o35t0Mzc9SbP#A+P)MsTA|{g*E()xFTTP^j
zKK*q85om(mr*c=L%6xnZDh((O8Z^s3b`9^6BEjQNFWClmDRa8W%?>NO8$J-^?a9O{
zOU>|=zG9{f4xTN{Y0kC?k>g8(6&F${fEj at Gy-{>2Ev2k6`V*^(dnCP0QU*v<K$$vV
z`Z)zkeF|xCXRRmH$aRM0)fxDI0{R!da31HYcF2P2u^>r;5IGHx{yTy-0pWW=ZwxNZ
zN;=m&P#_7?ENy`{*kxG at QqPt*blDSE^&qiYIkB^p&<O#|fhBdYYrz<iH1=uS;RY{4
zm*iM&z_NCaJZXIF)>syR41IKsNO$fYUN)%KuOb@^Zl>IB^4|^6P1IU{V%LuuL4gqJ
z#Y<c~NNT%PiNy?uZ7i4_78eFYVr0{opbhMy&%C<e|IryRMm4(eQR(R|vtbs=a(YP4
zdr=YZZ7SDMCfnWeu;t&op!H4%1Q5DB9SG9v&$Lk~4t@$4=5V9!@>-rIT`K0CFS{X^
zob-n_<+GCwcyOgv%q<;%HchLC3)WBXT;2AX+##YLyza3-n^F+&q2Z7yHouT%Fqi@{
zYn&SH-eW>d->On(%jWI54TVPY&s5s-w+uil_tObVk_p!%hRk)m=Xv at EIo8sLtX~Oj
z6I_ys-yb2*x9}KBDhZ6;3KAt_iR$0S^Re6kwaaXex<mebDRC5kex_qd>U0ntw at _(h
zRPD#!A!wB{Ygo#snkpOSJ7{RW97W|<*nS+{viN^9 at rJ4he0_{%E<d5J7z_7^!$WFs
z$qV1GqWsq3n78o3Hb<j>c?y68#a;iWh)*SxaF`~Y!v~wW+e@=cK8vuR(I6-*u>FFi
z-nyISYYM%j4d>#2q at Z{_gX_9J^toJrFoRu-JLNT&M$^fADn at WV%8Fbg_N)KMXd~VC
ze!0`pB2OuErwO8*A*!HU*>K6ULX>wI!|^5(ia6^FVHHt|TcuyI&0pZ7fj<+~9t^Ck
zg6Vpkw$UFN)fLfXfW2lhh8UydG>g9^cxU0sKA^avJs2W?rG<<gcH(q{#zKE*qx`-~
zJ}^R#e!*1<R{i`;kBgh?Bii;U9de{2+dQ=NdIa>Q;m2dA2hZS38lNkqv|0{_k>T;9
z^;0Uy(D4*bNasPE>U|16ig=DP%{M9H!~TIO(?4!5CL1r?JTl+qn}_sUyDFA$^U#=P
zXGH|X+>%>=-X4AW0zkm-)vwOPP|jK-HVkrjE;f8IMZ_+E2dDO_G($U4=1fpz(dc9w
z=L*UA*`{PcX=XX*ZcXdYj;b!Q(tBUeJVyYG4gDbtw3me>ZfWqqc=p;%8kStB)!5ZY
z6UWpeto`L6wOhJ0kWPLaOR=Vgc<Jq<*O!Skw=|r8{@PD+3Uu!~`!;>vFd;pND!9p3
zIq;DlVk4NhscYj2iQX>$stm0O`O&;8&Bvm3{Mv-pue9iCd-_Sb?;XE{XT?o<g7a`#
z6*`ZIyHyyguuhJpO^fGUnbymsFL^}B6sUh+p!TX%@9>`zm^*mDnfPFEVT532jRyvz
zsDCnlr$@_$bSImp%9Sm!V~5!pC_x}?;pVba0R(NCMQM!TeC_Ge9L`Z(NRc^$W|Wv{
zcti%OJe5z9*yB#F-v_T2d<nBSp}}XgZ~-L{8>JsNNC>>&+kuG+9K6PNrUI+Yp$Y>R
z^#p5dCJ&7sG;WV6k+8!@@=I^_n#Dd#luA*5h7+ppSi(7~F;RJ~*YLX3GAzM9JlP<I
z%v(F;i`36)HsUZBGc8nU2Cy`0BH$ql(QdgQ`o-rF{BZ9j-&;oqd at qeY^~3q<t_7)!
ztAZ#xp}0%=$FBc@;j|ss;k`U~@!)ZUQr;AiDG_J&&1^oT1rt~x1GP=Z+ax{PP>0rk
z;t>7G<xsWL=e6ZUg0v1RRxQBFx>OgM*A>)=l{W=TRDxG4Zz`Df-9b)OQ6{nVHiR1<
z at A%(uJ|j{Vm1|(oe_tbR>SLh%QjY)p at 33L;xlq$H+yi?n3=673ps)ZihVgP&>XH$7
zcES-b#jBS#3zme~AUBXU_Ja(ZtaQ+Sx2%{a0frK&R!3yXd{MOQgg2T|(K?evslBR)
zYDlHz<r&k_O4U2p at B-I#Si3qAFY at bokg?Jx9Z$=)EMW|L$piLeANzi8wn at C0UTd&Y
z=3*L!t*o<4FaW`A6(I>BFBKeTGYw)PG&6Hnu8)++$KO6i6}9IznD*quzEf9!B#PId
zTLTwU at aE0(?w*Pd<#ex7<pE6Z6}NWTBM`~+_I9Hi0~=%K7(mWIb3-az37n3(t#CSH
z<hVkmQQ;s#>1djV{@KBBjsINgc%Vjdt6vzdpNN1PL1>HK_?~HW6qT at 56#+><ecRw=
z7^)N604hU7ADkDz=ugY=+vsk8W(yUcZeh--o>xhaVxCxN`cYc0Br^j{q66-)@7&NG
zCuN2Pl8>ld1$~^4(R!+_^k)9?5pH-7kJ6T at T%Lj+SyIpD0c-aPSbhu@)6(z0G-;u|
zKZ~ZHlNwyL=$i<PGtge;yeJ#WI|q{fq5b)xXN`WO^$@>+UC$NSZmaKqlgb{^mk{}k
zgl~y~V~yS^qu<I908#+L-e=^_oC7=)zJN(!K}S*_gx2+m<1ySxq8O?Z+RY%Vw=@i(
zhRc&_db1ozt#D)l7yEb>MIW~Y%{t~#trDWsX~{l8t at k<H1PT#n8-J5|>;rgIh=Wxd
z)c4limnCS_|HTZA#(`*m|1W?tqzjtHg at e(ZwMHtndHwD5vL3*t<H?Rt266g!apv+=
zQ$A5;hblQiZq(`W4IlJV%`?jIC1gehm-*^?8jg)LZF`NGaFnF!8nw{#UE5J5bPQS%
zH-w!_&aNZe*=u9noYzUCMd<<j3vc4+=G}y{5*Ja8$9w$~(~UcS@~kGdJA<q!X&3-@
zTOMPo*y$Q%@Rf<-b@?S|ji3{pzH8Ns6(IyAT at P$fP^PLynq*Px!}WQro->N6cIGiU
z%X!=3ZnUEa<qa6)oc8k#lW8Z5cYz*S1fsn<r3m_5?{4 at U7Kyn}g8!C={x at IE3+o_)
z6T^l2e5w^e at L~FYujW8l*~7xxW#9xv5$~dU3}}RIos&sW#@ilw1=tLcLB-J>Y4T%A
z+-j_z2|fn}7z7090WudaWjuR!f1f=khkp5c at mrE3<u8s{=}x1_F1Dx>av>J8$j#Ew
z$$((cYayexE}nhCnlpPbBc4PM7TA6Ik>(-Yr$}>nLYf<Y;yp6la|=Dl5YD_zPN$)H
z+9Rdl=8BL!st+Cika?y{ZuE<~gusEh6#&ILnNS0H2hk;T#oC`DiCAUtuTm>0akJ4n
zO%eyVE1g(aFVTKHHja<Yt{HNL_&fF`VtNbG=gG&-shEnzqB!$*nu$tTU@=U}du%#7
z{odp9s^%?!%DQodIth;1y&sRwlWB6t|E0dSn!s&+2aX#c7(BNz-6eg<_Gfm!kUK2(
zweD6kjs77eFu~k=iR_dr8_1%Gg>$>QV`=;C2=@kE^td|F%^5OsQ-9F*#0meeN1Vpe
zj1u0dYFU_*7IQ|>zY!>S0V<XR8T9Ufp=wX2PMimSh;nnCdTFxIoU#+7TM#$8fa?6w
zl~fCWkhARGjCs$1>Wpj9?|Y|~_fG*%dD at kkS5Jd?XKmoEDH}A0{fzA}3Tw&7<J6kP
z*bo0hNeq^AQBIyuNmuxebOiHJZQzGahcbbcg|Ubn#+faooiq#QGsIB;qkg%P9=J(r
zU5T83iLt-UV)oLz+vP|vs=c1~Ar{d>3YpzOmyqtI6fs5S(XnbiwY|N7^K+k`R+!Cn
z9KE8BD$aWze_hmz at W2-0hf(AS_m(F=6K(q+>=iTmD at l%u!?p*7 at Hxj(P!PVdhrExG
zOgz<jHs*QA*URKTUO(;1T>+BC=2;h&&0)KL_GYu<lY{7CrPhP-K at 87-1F(vF;f|)F
zh at Mg@3~axVB!5AOy^G3upn=W0dcAia^}^)&x6ar2j|wjKFizcNsb&3GX>SdEcT$a!
zbbohEx<m^dULhS_paUI|{6e=}=JKE&$IH~EDLg*VRz42XpK;^U_1|5**ji(qXAg*f
zs$|)z at 2=@jsU;Z)!?rf>e428a2H&7{c%hcf-<rVDZJ!Cli3YM=jkkL(AYQa`y*Do3
zQSdl5PP%3hSigTb@{qADzEzY*kTHBGAe0z__WKX4WNm>jQ)+2X%DlBd9F`4Oe0Deq
z87=*Bf-l-eNlY92tmGRD{+O*v7~ubZ{Q~a}gubae8S8)nFU_Hj(3M-LDtW^MAOJ0M
zoU9{V-=pvOKI=-R*vzfYUelIQF{-TcIm|P%3KBKC-G%oQv#{zov6yzVaPBry$5atZ
zKOyT?ckz@^FZG(y-l;VTR#=6PX^1xpZr|gjAOsb$b}dGxIP^V1%tlS8xZ1;iHTD%N
zKCjMkw;1LpN^*q>@$-$!yw%iNGAnm2=TJVvc&B#%zH<Cen*4{`n{wy6#8aN!ihV at U
z8V)53G#rB{SO{#E-`=3(NKvH?YDKsbZYyg at b|i_&Xx at fm+1_ki3$1p_m$hWs^%`x?
zTwvah_b5hZ2vbdReCtE^CW%ykb4ilT6|cXeR_Rs0!CrEf>OO=1Oh(DqM~K>Y5yfAi
zm<|P|#qq0cZID!dr*d7LFS(wOqZa2xs`l=CW^^&n6m-(S;TY;_doN-v=zooic>8GX
zv`Mf8m^q5ob^FFh7CrLIfoNst8`ds^hck$c;J4Bk_;H{Ci1Jc)86#tV?(-Rujsbl)
zVC&&9g1s)Qpf0UV0}FOib>4^rF5c3q)^eq7yF}ECsZN!dYCmM)5W<nN#1nuYFU?yH
zc|xC#m*H`gSRQPQM&n?kfF0^+=xNmh4t?yMEOC307O?ZSaR+Z}l8N?J8`5|?=OBZ_
zm3wG_tKN4Hyn5Xg=h9Svq4DUX)bCd-CX&fNrxIU4{ap_gmB!L*aCXvg>ZIzyqFZW-
zPpz4DFgIw!e@?lGJ|{`9?>k!0JkM3Kfl)xNj95cWr!|2hg4#&nNbLQL$ZDRL&Npt_
z4wj|j$7!HUYg=HcVSoCBRiTDrz%*6Rd1k>~{1f<v_tJT$ugN`sKKTjYlrkPru5Y1(
z#HK%}zm;ijr1u!(#A;rL*Y&1<IF)k~xJq)e1Wym at Gob?g_Od`(_W#;$;xd&!>Qtze
zwWsOcYz5&+v<;}Pa}wG(7J(V?rKjtxQuJbM->1ygQMZ}GOU1^&cI#zQyEi<bwe+wI
zX+UfLau0A}C)4$RQnl=`qV3tNWT>r!uX@*5 at 9@hE7Nm{<?Wie#7mdbsuDMx6>3CrQ
zXP3{E7ttps4w^IpK8>)x9B}>TbpR>&Qi%;eKNFG4e9+pA)F`|tUl(=C*z`);H{?~Y
zqF8XOjC*T$E_MtEPD30wZyJkuoA$OV=ah83gO$l(=&dM!!Q<-VVube!+>kjHIYkas
zMF!ZsR2dc<Am%&p=2=;{aX|9 at LSjAKc3^58mgQnL<zlw8+Sw4A at Cigg`%@#YF}R_=
z1Gty)k)fwHy*geOSuXNnSiUL`hPj%CX3dYm=k=u;k=0)#YoOvqR<-bDI9Kx-)6;mZ
zo^VYu_Vr1B=ahyNkX$69^lWKw?SzgvdM?sosX9FM>k at GPKj_-ij1F#Tij4P^#+*?Y
zdw9>Q0NrHuPByT~3ff-ErF<tGZSYsHl`2a~fOt>HfB|)NkmA^X*=RvPUpB3?G(=Db
zg&xV$!*KAo5;Wug*u>kzyhN!|8r0TV6q|ln29a=olmz9TSH>8WQEx{baNm$f8qWWi
zGE#PB&(C_c7^kfXOuq--&A4<pKtKS;dGeUzr8czt at d{sScGC_Qhi1NiFfSGr5)5_s
zsSS}$JEAqEzWxm2g<wv+UqehFq^*zxtK$c=qdn0UO9&QMcmtZc)ULR5YQ7T{?q$00
zs6B>%#_57=$>Zp8ME9?ec9xJb8{E_53Y?Q~w|;X_Q+zm9?KO=n4Cwy?M=Z+GGH{|Q
zwx0f)>8YwsHFo6E9crh)%jafinnRG}?oD>%i#zGNi?;V>BV8&O-%<Ie=V<`uVe$fo
zueU9d8|iasedez)`rooQ*ML>tHZ`&Sxo<ju&${AW9Bwc9bhyUvX^TOmhv$Sz))mo#
zjOB5Ox7v|-!@Z?#msP}s4+psEl5_xbpyY<jLo|n`i at dbL&2N4pOR^nCMdPe`$d5j*
z?fM%Ojc(Zqv6O%J-I?D_6?h%biag_TIBI)Pin_S&Ch|bVCKxRs^#LD~ftjL75|N{S
zm8{aoy>oxq(fK?e6p2RRDE~<ect at Imb@@xOrl&&}(R3kxY++9n@~}nm9tc<)M+#!(
zP(<~tN+dKh^Gozd-u{6K`7P#cjm0Fk4#gCu$g*I&ogtSjc3qyI9R>m7gKVy{a(_Bd
zM~eO at T2(`wVUkuKy85NRPR1c0&<8tzZ0Bjl>mzLv=f=5r0eQx*RlJt0<d!l^N6!7B
zmbRr!3M^bE?HAekGz#vRoB1k>=K)OvfJ%fL!?q7vyfIYlc~4_AL){&VI}xYoAMSVq
zficYV0(mtq82|>!>}Wyp|BDs3Um#e3VyrlTVV^m+-uHibkQCHS at LWlhA+|<;+eE at W
zwsj88eYIXBoQ)YfHksqlT=`DE1<<v0F5kWULg<B#BUNw)VMJ8?jgUfj?8bO_H3v0@
zR`G>lQ#;8Wta-uCcGRqAc$X|DYqf>{mw3#Wvc%IF()XD{|Ne%u8V~g*s~5poNvdU0
zBjer8ydm_o8ru3mYRBg8WFjkn at a|0nP>W>sWM=t5LBKIgR`tWw%TbhhO(%<y9&ha^
zsOs#x$K0b7a$5E~5 at 5w?z3QACh%glQd;#2JINi)}F=u8JUmc_m5s<#<$1IG@*#bj)
zFQ}@l_*+3meK;?VYfQc9gFM(!GT{&VEdnzbP`8)Kr5}D at SpS#sq#03vwy at ldtNHf!
z+wsN?-H;mwY4X~+K<EoiA#-?iqY0wCGA{>;A%9m!)JRX|4;RtDzzy_pugRG|o_b(T
z&=rXNxo13tbm=s9sX&Y8xGov^A*sUe#<u#>Rq%SsukI^;2 at 94>uG{>KjVHEM*+T|g
zV0;5fjx^bxyWw*THC97^Xf(8bmvDf3*54?v3NF5@>S+H~NM=Ri{hveHNmgH{F=NWz
z6}4&n%M4jMB;mB=PU^`E^lI-Ft`Ir>dSst=oO;^@c|a?!2`u*Tp(4g)SfEJiLI#d5
zB=z?KF$@1k-y4svZNdkcu!g6L!p3+#dl{?C&LUOCh{v>%{87+<NlPux at MLEL)bIWs
z;SY*cJw4LXALfhxq80&3Sf3g6VyuoqYMi>*#56v#WGbz_JhL<I;cJBGO;6F(hZccj
zGPFG9MZ)B+9MV^1I7yBFNVnf*wk+a-;b4!Jkh)eb<4!|<vB?3!2zpq{A!&kL0^nyB
ztZ=&$kOct;nM`_rbo-$u7iOuWPEH-6h}8unubcUR!>8>okkOPE^!$KtCbGy20N{9P
z*mJ0Ld0)*9#%+xs+L~qPl)@x$?N9wEAXgL!?dRSmJ2+q7CfMXb;x5ub9zwQ_qH+q^
zNttH;!C50i>ew=k?4OsVYU`+LTdORlOBr2LyI!F5kDAhdm;YC%8Az;#U;RvBNqKny
z at TcT~K<=;zD at fyZ3uAn&VVQZBHFlcVM0zPR-b2cm#Vw{YX;x%9C1kFwebbGI0DRzO
z02!?~5r771CI^oTWn)e*+_3q6KA at j;uj>GSRoIrI{B&FWsg3Y{vjcL1LARGQfbb$5
zfYDcPIKE7ObRM?n(^O&f6<VvPXsemBFDp;oph4 at e*__5kdgw0+s?hYj$i&9Y8>Sw#
zz$q|ti6=4HTIzBE at -izTIP`D7rCSMF4*wx^HYMdtM&w+ayD4lC+;Vf#M~U#I%wRM#
zv`1S^=-|h^edg#Cl_o6J+UX<kV+|emt$y9ZKR}CrMYbooq^+!4ha#@7B!mmpzNO6T
zqtzew%<)jD3}^!f?My!v#zJ!7W86s|ut&UsP}Y6%ddr=M6fF4O=6vBO3B#kz+}J#m
zOhi>XNt-H}yxOe9*z!aF?Jk>$=o{^rU2ac}6ckPY-czH-Uir|PR*)lJ4V9LkH(IW*
zlYnY}NGVU|G%u~hxPc2M9S;Yn+WHd_lfvluUECU*_6V9+SL8_MwBG*2{Wo9AW<!{1
ztx}Y$SZk-!V*5h2AeXh(BE|dEYtTJM3VbaN+qKx%CmaDO(CwddBqV#7VVr#@K~5kr
zEz|wa^ay^2_TT at tV8;GiR>IX2={o{Y1c~#1#P8(U1`_8+jBdm}B1zpCD#Ij04mpqU
z&Z4uE<^sjf^sUNL9mKHAz18csh+-}-N&;gzt4WG1N%4nK>T3{)JS-z8i>||@Ea}>6
zHOz}IOi|jX%(>1h>=TNy%reCsczE(epN9^4vhC2aL*(65GX6-Dcp at tPI@W)%fW2>j
zcx2yxRR{+Te|GO40Da`nvi#;%)`>h_K(mDD)P={35<}P at F${?GI>g!!dfx<FZFU$R
z!MS4qbl at jau6@?8&ueIO57|Xw{gLbp?Hr8gAya}*oQSL82*qZExmIQ>+TNtWpDfpM
za%OxxGX$#WN`n_JOw*WPuRh2lBwoXRvYW*vk(VEeRZSoqJY2#3b(GXN+ThZ%Y24l@
ziRp(2ipOj|9okfz==mK5#j}Yc#@E1FR|-l)_|s7hpEDYIL~|8PaLjC<vIup=9-a5l
zfMWQfnVmCR9ys=+i33HhRXzV2MDBKd=V=J|pD)W>AnE%ifym<pW#1i(GU%&+j#jx$
zvycI-$HSgzSE at Y*QQ%}jn`&+?Yg&qMU!i{~`Cf1Z0h{SUoU%sS&`I6G>%+lR0*f~V
zEZ&=dd$DnwU#XN5!`tzH^vSN}V-kQ4+K2Jamji>&V2!u>0$L>$_hW at Ms4Ln&34hss
zkhv|3r<z^enD0?ABBRUTN1AVcdhc0yd>LAS)oEYsz<J}Ls~;+)F*_+|b4bc1_WgL`
zb_j)n`1yM5&A)4CrD-;sz03;CK+^})?uC|=$`v{nur2cR>9HhfleO}avQn at 6tr2lA
zeKSi(wiaQP2avyI`Gy=X2TnvnACS~TL^F;N1?<{K1qp8)uo}9Vc&(RzDQdSvow|}3
z#Ee%CgV3`A3?}7MR-2WwRQF?4J@&rb2m`+P4D%0x%!2`z>4})U at 4B-mr2pX+PaA@t
zBh=OyHto5q(>4F(!NltwOB5G73>=vfb{jhbp^=Xibxv)3(v_jo(?P=cqph|R)7vYh
zwit5lf<!-4d2U~WEyCh|MbKiFM!$ToZl<@6)8JL+QqCQ7BcDYKYXCpgs23*Xj5Zw(
zte&&^o36_oH4#>){09c6u6(cTa{|f+>&HT~l+M4hn`8xtsteZs)H^u8poJI3LD^5j
zyW|<8st#7Ke`EXKCN9(rtMro+9gt;q{B7uD!efK&{sgt-(!{)f7d at +Je9ow9M9hfB
zPk{su$ZmTBXHd4;ADAckw)1X}=3!`2tPvhJ7p1}emO2HiZ}7*&Udt*+iPiWs(x!L!
zRrSkKlv0??{9H`V at g|e&9`=`P-;KjfkkH~s<sM0$hI``bs}JjMVsaKzJJ2?zMeho;
zn+bx&bg-$^H~tWRMkG2!AaxYzOv3wr#DlDwyV$AI_cw*rl at 2aRBVzT>8ba6b5naM8
zl0`x7YU>I$$6pX;(0C~>J3B!BI!rA&lTVCcuRV9!n7?Y(bD2e%)ZU3Oyo>%-5aY+~
zqy1`nN?zw}cb05 at d1&YNt%bdyP#ICrUkbE!E+HPn`Du!OtD}RdMF1Dy=QBB5cW5w{
zvvrKRmA=@^iY&#tr%9mz2|)J0=wxw(P&WelLkLmX^4Tr%yhHr<d3$J_Sm!(n8Gde#
zH?!V;`m+ajGN6!gC4JY_8q)Ru2sb*2n|z5>x=NU2Ooc2KdfrLnPll|je=^<V1(u(Q
za5%XigY8)}%HOl+f2F|36yJY2SswG!+|p9Vm&qyE4+NeGu$v&%U*vOmypaDBEKYX*
z(8s{cE^NB}=-36OARtNs`{ilH75IBy16;4s8<GyZh&S*uPiULz+~O*lK&DswE=Y_?
znWtbcKn8SyTwcF1wME&GKz$%s=3D4y8XM^d^tZJ6Q3jaqe~A$eDx;DQzpa*JnqP%E
zn`;JO;+{RjA<{KS$JYs-mS0Hi-)g_ob5{7C+}o?M-l{GwC`wXm&$N_kGlr#DObG+S
z-86q?2-xfHXqmFo9IYzvg at N3_xD@TWge*@8n+CPb)FuXrnzwZleqh-COT^|JnDNGu
zTlnP<D!#|Rf1*7_#DJ#%A#UkO!Z|@$&sF0IQCqO{o8ll5a2{`gja4z7&<Q!W*NLb&
zvQbxc%Kn<&u)YQYVre+a<sBXKanZ|z4+LPlH+SC`#!E0G2vpYA6`-Th;-3b)^ngXd
zJ5nUs+0N}K!23`OcBY-Ay^8_<jmk~+4qaE+n2TUdfB*J#)LY<>3g{At7|vmQWEYU_
zRQLQmjPXeRj-Hd9AHSg-L%EWbJbv^npTrKEhSTx`*uXjMeX1IFx;CePcePobr43T<
zLEqW}lb*@FyH-wp>OaY7InVAtY$SSc54z})@o_cS8h<u%bqK}M7-AdeJQl_SHd(?5
zQ61bCe}}N~;YBwXZ~{nVgmrMfoyr91(##5lf&rus)+VPU{aTc{#fF99CPmD_Ckhe$
za|Sa^{O#I4=-jS`c7`~>ghIlnqnhsF$IK{Hoom^Ye8iX)cz at 6lzQ6RFbT>|V6_eDs
z7r&P&j;8K*3^DJnv*&fv4x(x<sc?9}$Uap7f7{pewBHj}LOMmR*yaD$S22C~oonK)
z4!+>7Wzf$QJ%3CXLbdGrp}O=<X-PGx<ke6>SZu$T$C}!R6}5U8|3lU at 1J7zJ<Ndv!
zcwXe4*KJV<SFD=1hwcHvCZMuyVxP$nTuP at AxU7?g0MY=1Qy_JCTf$Y6#eqoir=J^k
ze^!^p@(jBGyP-WR8A04RADu}_XjerADf-zYd1}KT4_ItbCu!KU8TbTk8RiffBn^?~
zK6tbP|Caq%G=c*{7*Qwl;OAZpl(zkRQw6@(H{~GX7`zyI#QBsMmxyZT8xc|Fc_+Lx
zFV}~8V at Cn2O(~E39`|EBV|CZ#6qq5_e+RVAe~z|-QIf<f2QQN36>mF&w$QpWVP>pY
zl9M!hh;WPL!fBSZ8L26eDaE>cI0hV<D$efj at c$B6DwHURxP}Ktvv at BAz4!0P=aY3-
z?n#^VJ4Hq9Z~e)IKvvTc7G@=%+D=X8Lf<F|H=aV}4Xe1|PO1%rBZosFB&QASf1jfb
zp>o(U*5<sFN|+PShKLs4gtDhtNf2HIiEqG8bsGq;PgTP+WmL=s&2tXkjWR#S!9WsZ
zr^bdGM8Fod%hbYY4LTLrXFr9pSPHFW5PYrmHTe^-p at tNEbXJIxOJG^BZd-E3bsf`>
zT3X95Q}biSX+|+kk3GG<G|?{be?(>^rI|eYaIpt at e#BiF^-s~&%nJW?i^f6m-}CJk
zj%|ctp|Sf+U2>(j$x8kYX at yrb4LjF)^$!okCyEJZP^@S73Rd~rz&6VXfk=#>rP5wg
zDpNTENmqzkLPc%Z+|K)u4X;37r)P78H|~SRZ6-f&cYf<2d(#g7zSYcpf2iu5$F{7E
z1{pQVVk#*AQs`7o=NYBO_}j#qui7?vh^Ru%qqrTy%;77>43QjCyTGQ;c1w_k*ujjY
zO!i%y at mTRdLltxtMwfix*yI_MyU1v-4Li!fjJz=XW>s)7wW?6e^!f!3)Y7%ZJZeA@
zFJn47)@Nb0+YrjkHq8S8f9 at m7osB*$qs6!!y;DW29$m3=j+=89W3v?TP|R8PblAS1
zkO0msi0GQa5pN7~=cAo<mZ1P>AHRemj6 at F-lg(ydpx&oK!{Sd|(!|}{*HoVUv&q9@
z4aYw}+AWWDu8@=Cjr9f<DL<UdD**M{oCo1i<|CX!3)mOyMsjm~f3&F&d*`{^{P}Gy
zwN$$>Xt7hx(l8v}^GG&Qo_{y6Q)Rty^KZQ_8xyhpDqowbZ?$J%loXt*Y>H5YV>a*5
z4gLvIZQ}wBaU33m`(f-%9xMD2z;}<d8^V+Q1GlizU7w!Sc;D?z35pj!6v67{7?UDU
z&LPo6GgX~C{}|oQe|ltRFljW>s3vU0EK3W`j%*o7qfg>HY_oBUd7SW*Dk}$kqLuJf
zt+T2T4jk_GMWArqy*?i(v-PGy^AtNEP4f2er`bjpbmwl`7i7ZU2*<fxk3#geXxUw2
zD+kVec&dspfn6c{(=F9^mw#oPG+-hT0ukg#nVXxoT?hTNe~`6fv(ZPCrvV=2Nes^x
z+T%au9*xHie at SW`brFWOHRMgLz9msaICL;9asEBF at 1sAS0I3pYtv;U`;Nu=S4#5 at Q
z{!b?58g-4;{dG{L1eAuC&U1WM90XhbCP>rJh@&)+F`h#q;_m%8l;+s<^Pa^rwZozw
z=@*yWA<U|$f6lwE`@Jitd14^i##YR<Xsh%~>y9cx#7K~<@kMk3RWXfhGjiIYazcc(
zO at _Z2CO&yXt7YiH#Q2~Fe8n)(25~N;^>)_#`hg(@z?p7CD9!qZKfI#IOyyrJF`|?)
zXN7+Z^#CIJI+vRTKwpM|ODcP~f(rw!&`E#%@YQkXe at _|SJkDP8YZhmwCJ^qI=D><`
z7ViG-V-94xc{jXn41#H|5I4t4;T1uR$R-n9M*)HEHfD at IvOr+|C-)^Vho5mj9Tg#P
z+8qEQA_rOMg*afq=5NLhMd$g232(LEakRsuMNyhvT}2Lvdw{~r`O>}G8=y6FtI7z{
zb=moze+4q?K#3`(DQ3;&2{C<tXN>Qz;7LX^jyy=Z+L0toha)5b47g8SD8r*{^~v^W
zF?H{P3)NlOo}>!am62u?v%&6RkI>U$!R6 at tYMVB^v9bEN5(+)Ew%@DS=ut<ts_rW`
zO))A(^azpILKM?d`D5qELz<c$6l=+ryyA-ye>Z&W81bN!zU?(G?7Zew at 0zPFm}>5}
zdeGxN5W+#>u)$!6z(FCeEp9&ve?e)2 at mmYPxoV}_U+BPY3fMLw_w>#wt<e(1hoN(P
zEXo8M<m3;qCvx{)1^dHgUq?#v>23W+W5l}$wF%e=IU+HVhI+B-m{DO?AA<iCZmfqb
ze-1%I>tK|<K^8AKIDNCY|4UrNAQq!6A<BfIEZYb&%UlMEd-tb2@^vX447$>;A;UF{
zdk&<M_a9gRFqDFv+Ma`_-|aPy3p8KORp4^`_Sut6k1|wAM~AJPf29ELdsHWKkm{%4
zgS#WTu6M(}@47$B+ at ONfLviv;T!N?Ke+A&nz|M5qJPGT>a18 at bKcTt5`@jY`GwGp2
zB>4801;r6gGcuwrGPl~Dgpn$dRhP&#F&|y&J)O!ij*+*+jb)VAae(vp_v>`Q*cE4W
z<YDCC6v+O<JUI<SP9m~mPawFzaKdzNhoR?h5_sT!7724UMbY;Kol-Sgz_DTAe}T3_
z+IO22M7B8LTV#Jx0AYF<!>7zAFu~=H!B+*#e#4Cfk|rj-)Pp&}630qyOdejS-M69#
z9t at Q6N9-&rWFmG8E^yJV%!vzKhJ9ukr6e#lqBugqyDJ`*{>+r4!!B=z?Z|69RuKue
zbf=yUeWEHNiM270N*eEyb>~D$e+;-HPA=`|2%<~^S-V*l3%?=nfrInRV?Fo*DttuF
z(hG6qt$bO_3*D^bU*k#>A*Y|@miGWSk;<v+FWxyGbLV6+(t}mpuxvhjb{mc#(x9yN
zs&Wq}b(!ehqqPhku+%Cg*e6H#{U~LEjxOq`eT_OVeW)-^X+6HYC?_}JfBIuawc6Qa
zY31MdJu4?S;|bH1m2`pldcuj2FVzr6kM!v;=qmS6NLO1I(1ViqMc$7r(=6n}&F9&G
zX7vIdx9~+x7eSgK0=v_5X^`a^ALcE5LOPSc#EeH77(D7%+|xmfbp=DoC`xQhLKPc(
z3s{=HO8CwYKmJJX;l@}uf0te3)=$ODkjGakmr^C{t}6*os!1fEtGS=tpGv(dq<nGA
ze=@l^K}UGe$Eisaf~l{RIO at iaX-@OOT|MOQ;1<Kiwc!{9V}a*2TU{~Mu{6b`kj-lG
z1@@_CVTGai<slUDLT!d<O0wBmSmzArTVSUh?tP&T_m#5RW>Yuye^~T7CIp~*eP**U
z5nLdvf+ovBqG_>#oOA~ijav4CDQa4}D1>1TCA>=+E&F{OUh}@{o8I>s&oQ*PV_Kg^
z?;3Q8J+C(OyRmLGV(NJPUL?qJ8bbS8S^Knowu&0t_$K%d0*Q}Jp*S^f6OeJ>cO<cB
z(;!8!d>qZUDZ$(nf7SizBKq^o!=tSMc?8}2Edu|ZVQC`Id@^s~FW%qm7}`4ltw~>7
zY8IBxrKXXpDQ at +?p?!2H8Y;1S<CJnj^+m5JJ^t8?R_~W1aU1Cg(Rimx(FEQKw1Uf|
zV^K4*>`4qJ3}ZDSYYOrK{j?|PVVhInib;$TnKR^VK^-37f3LxyJrKMoi7pkW)L>fX
z5Wt7P;S+xYjymkCw?m<CJHu6J!4cXU?R at Y_Kxf435+VY%6el6VD-t~C*Ie3DTKdK!
z#Xv6_3>+^_S=6M{qQT$g^H#*Htw#KDQ^Uf)x?~cO8&KIP_2RQbPfr3M6AoFv2$jSE
zq at 2v~vJk~_f7!Oc8`=<1l5(<h+&D?)Z?fyiNMgR5PPigADIh2dkRZ^=+cMVsAiTaD
zW#X*}ZS at t$YHi6V_;K*0K*IGn88?rndo%aAfBA|KKY8IPi4+i$9IDsc1$a3afiev=
z8HW?Y8a0aox%g^Og-0T>ki!J!SjWq{<2qno%Ab~!e^9IsnR=R#EOPYoBXwn~e-f!O
z7#Kg*CGH4qx+7;M7b5raNr1_(S at Tl~BK7&K!xi?kxv<-ji^-ZG-hIh`MMzP3LPrAk
z2X>)}?%|Psq*qB80wBEY0IgT%FQ$4>DnBDyasi40DXOD at ++TnM<r7N*$npow*8b$y
zq)#z5e~<8G<Z7}OJMs%PGLumzNGy8v6R_jW&s1rwn5fMb?kGSl&&$p)aXOn9u2Dg}
z4e|n&DpTV<L9zrx_{%w|J_)$U!^AFjDw*u$@R3`p^;-ow*GGMqf>*CG41VyeNj*>0
zKJs=w!(ykBc>vHh?7j89sji-Aq?BrSK$QX(e at VrSDJTqz`9I~X^}DydclZa|8+eeh
z6q>zM*ANNw?m+0h%#uOAkd*dmaeEh2ptf<^Lu^<G#@ZnpB4#6&tj=F3Six at J*J;K3
zLhH!@Ht=%a%*0l?bc4`7_`Ij`0F5HVY$PZ!k9hMjZdMi-BsF_ke37_C*U?}rQ$9c^
ze-KZMp3?aJqc<x}A8M-1Q&;`S(GAO)VzvDlSm5B89>!_?OFQR){y1?~5=VHDKDe>5
z3TcYb&vlVR_|sLM_%Ye_q+=J$EHY9VB1oWtm!Y<5B^JJ7Wrr^5->0<z at n6(YExm{S
z`G>1TG{!jyG<xWnlTf;}`7McRnKE)ae+P2VKX$~9<_k)VcvX5v`W}|N=`?&jFvJS+
z=Flk?^*6?XP`az~k->o5%`L`bg{$v=37LuBP%0&nXZ*y>*^ywJ&n*!yaaRpOV0WYB
znzZW4DlEP3x<Lr*WJA>0^8M);G%s_6$*y4{md^3K!w71-Ztv2|by-9c8uaRse}s8T
zK@=WzRH2JGwH&p1Bee=b4TB2$St;;Ro1;)BJn^3-gtZg-Wz|1wBNC&9M{xZ>4M}|$
zBKO~bm(*b>j{Ns>rW*~#%#1JkZs{YTnM%<zT0Ny>Cv<&*U^fM~YFN|<n@=jEpQp#Z
z?}vyRBdBX`^^`6`F(|lh32d0me+1M|0m2)S%CJZ6DNyPG7LzISXfnngUxK=kq2-!~
z5o&TF>(HL_OL18hAdQhpH6|;R8MGBMcU9O>$Ja28m0gO~bnoZKEKl8b$i|j<^xL7-
zVSJ%sd#cdf at CT8xT~E6OE*wxxn^Q7Nx=7$n3{PxCH~Oz`lGlMSC+v))e+`i>Mgka@
zyPR&+2ak`(p2~>uZp6>|RmO075Yp{XEe>XLGqT3u2U^mOL`ceu5o21hTJjq7*R+ac
zF5&(wph_N<YC3lpMv!Ie*{P$6M6g>mg!$u$GR6%uOD;x?y}o5Y4omm%h9%C%(NcP5
zh49B!0H<qaaO6!I24s@^e<{Qv<{)zzZXFa%fZcicJ58Yos<|jMgdy%S{ca^SttHI?
zX$JXdg#;-Zj6*m|LCWworw4bgj)kYQnKX}k_)N7P5Hs}Z;BqA{e-`Ps$pBOg5V;^d
zMat<F@;kSygL_$-U>V~xnFnknnt0kpJhVa5a at YSGsis|xu*VKxe<VdtMLb!n$TBa-
zBJbttF4#yCan85_ at 5$m3y6x$S;Dy*KxAP_4i_I#Z+$hacFS1n)NwaxGqtY!uC<ZL~
zp>SQgjXnx1A~h%#mp_h%Z2=s^g|CBiysFVz!@EdhqH!zbJ3^9C+{hY2Ni2W*zTIR)
z=8!r6LST<+snTQXf5;<@+8dsco^)>32^)l5pK}D^622SPYH=9l=FgsRf+=D~V0ZSV
zuP{cYJbgN2NU)L~BW`WA{I(4j76M^dy4)=jed)8gd$}Q4&@l1cr)U}U$1T-Rm8nNH
z3rz~ucL0E<$nMpc36SiIldsvYWYiLJ+Q5khMq)7)|8y50f9{S&U7hVjj}YH9NJpIB
zv373cSB+NkkgCL+=Lqo25tlUBFG|fjXBS`Yd1f<`4ei1f=djZ{%=T}htL)7l_1!3N
zn03<;NYk#FOYs-bAH^dz#)TsZy%f~jFgYAl$MA4_lZVW=wbBZsOU#M~GtR}YNfBXC
zq(H*IS(gY!e<>bbd7R}v%hIwWcoD*<JbG|V0Oo!b3hy<m;=W7h1vp4SY2IYqV^XSr
zKM58{Z$3x0XfibVhjm!D*%N!9$OAKWmvTXc0^Nhp3h`_WT&Fya{&z}B#`w0&@_zc3
zBqDL%`%9?PLW{Vwr^4e<bi2!kw-uLaKqzQ3E(`-%e=C__gB6g-kR45$p2U&tNV%xz
z*n at 4IElofzR~q7$JIAa<gL`aH6Te%SFNfn9YWuEt4APGKuK-Z)B;vMwJTm*PjJ``P
z<YNa5ejyZzP7&1b2F!eVwO&UPx<+D!uIUIbSzC|_VUcR##Jp`<_}Rzb>)hb=`7;b`
zx}8$ie_8wSE7M;)0;IoRe|>xqDRGZP?nmGrj{)Pba8aBpfmur)tCO#QL{E}a+N3QG
z(A6-iAq?zzqL+qZJN?_ClhmzRQ5TQtowb)|hM$gDUe`KWEyfnZ#2yaQRX~zU>EBEe
zv=-7Q*o6rm$z_qbf4}~lSu&8QC-Myn|Mdt;e{rUQi+8)b4f?7AG%#2c!vWQ#Z-sT^
zlYh%;n;DK9JgaIeCS&uG+yI#kp%bXIu1wy^ZE_82a|c at geO-_7!RsL((Rv#+0+R`t
z4{5J2nZz=$_ at 43<iK*`(_P`<My8mI<5I<?i^dV=j?V8(<GN&uFAq!qt;B4UaVc!9k
ze|&`h;jF#x0Dd-teXYytbN@#FU&Ok$h#yl>pCmhr2H%O7>kF0Rl$aCT2gC^af;o!J
zg0XWeZ?C2XJn37H6NX>cgqgn0GVTKsxAX6BHUAe2MULmi&itB{iDfqrT9)`EKqK$4
z1l=sWBIoVG?@}SAl~ccUX)@`_L>AT at e-!O#sr#}tDmqKvc&}vcAyeH6YlY5S2~#Op
z1~!y<@bZ62MZdMoJlHFzLBu>oqXaT_dlNW;$?h4`ZfCZykxK7~N=o&)EFN<X1m6{x
zTsE}GF;;YOyjdzLIOE4NbfW!;5Ar>pfnVuTzL5Jx0jd9G4Q)LKfz2C9Rx4xdf2nk^
zV~_P`ys-yILp?$2xOs)*PAB(N8Z(dhn)A1RVyKwGFXokmteL47m&x4B3$^G*um#AD
z#7*KIoj6SEE*iTur2d!Ort!R|3_rwgnEMn(m~6B~Vg#L$V%a>QYp<58HbswXZR#N$
zZ!cz_ACk85Nb4daPgvnfOW<bze^`>csBR7f((Vk!1B$?Y*XgRdgE#p~M&G#e<sb=j
zHM>lzfjqwhH at QzE7PS<@NNHyLnm^kw+|pZ(Csvm)ZcV*m<=wwIAsb)|l=TkpRU+mp
zZ?U0W!Jb!@HIr&5lwocO;jW*vXB1UBvNs^T`!DunJq)vQE9gZeI7x4#e=lIWeoo)S
z8G&fLZuk5)Sh40zuDlzTe98QL)Ix}}apFM9-;_Xcd@!2b?1Pj1Cie$7ndg*_k6vo#
z{nh=rvOCX>0ic4eihAVN<kTCsWi)s8-xhDkJG*h^i+uNM8#`DIDvvJki`}<!z(PCr
zc}mW2A0B8ALOJjnY(0({f0!v*_IyN#-5bv at usn8#TAJW#Ra4XsBs8%1Me>|<kxIp|
zZ6^hJV_S?|P at aFgZ((CH;WsL=U_Ct1>@_ZroQJUK%$$YS-AyKChi17sM9H_^rcsB^
z&7<Hi_!%#7ygPx5qt77vlW&b8|HS1TEJVlQa^1rEYio2-Lq;b{f10bD!Uz<J9y=Q+
zxpFanR#q_hVoe*%7e+3U>)oCq)KCCCp4SZTyR%+HB}Eyz0YbHHqmt1A)H`X0wo!L$
zGPrsCpa!d=#uRSz+0Ow26)tbvf0zxEthbQaDzG}C-&h)CcF8wS)bB1XER>9yn<2GH
zp?B?7k{c}K5!HO^fBHN>!(fA7H~Fv^#jZ{3!_*sDBfiQaJq%UPu!fIDcO8bkwa4cf
zJf6T${%OAMvs#r`vZRX8hxxmwO_8~kB;MR8*L7E)h_K^6jhbYwJnti_LeqbRE^0$f
z7``%lo=9f@%rFPKjoB-(_8ZC&j}UOh5ZO|E>;{fQstBG~f0{OS7-Km|TwcuhE{qIw
zz9|PO7!Oj<{+~e&3KnY^p)bW?J|<ARkTi;b*45j-e=AJ_bSN(VU$tm#4Su`ORi|Pv
zVeI-q45$P-%(IWgnL;T1ks}$enY+%@8>2jkCcBhlo9}jQjYz=A&TYZ-$VhixRv0?;
zJYQDzTq}=Le+gaY0+hT**t<vr%YQ6^(ZL={mzdyu#3k3;q*a!78p!{&lv+ak#w{zJ
zs~o|?UF3T3PLxu0{N{l^u4J1{ka!Qw_zrpEaX<EK+G8)MmkkwtGO?=~1-2=hJzlJ+
zZc~8G3(%i$QCkutkw&I^4ypLL!>yY6YOfaI1ZQ7Ke+Od315x<O8IM7SlrBc4BsMe-
z&^Kq$4$$__v32rcX>bZtftz&ZiK5WEpH+$&SMK9jlYGG#K)5cf)+Coe0L1su7}QiC
z+i~W;mg9SmE>#faoMK0mr!T!{^>}^G?dShoq2nySqW3iTjr>2 at o=b&~1WS^?Q(o>T
zr_u_Sf4${(Mqeic^Px$-*ygWtSoF?i`Kulu|9~XZ{)8zfs^9L~L4x)5JB#XxqK643
z!{wj&9_Ox*o9bgXk<W_dj(<Qu at J7qy;lrkThP^>;Tcu|&>_nxj^E_O(k8i!_<@>AO
z*4|JdKum4Ao0q^w0k0uY0%Yj4IKvC{yXCe<e>R|WroN;OG7F`%wz!A6StZGYXlTiW
zG264{{?bw{T$B18*c{51CZA&%BXmBLrEI-k&xtQP+SNVB7W{b9$+}(HRn5+Oh4p7!
zv;RJ`Ajqa_k#^WIzqL1YD2YCGf4hV>wU6Cf3$XJo$JFi}R!hGs=V}<mg2NQugACf6
zf7BEJ`58PsLGM8WvPw-_@?!YfH#`&VG at SJY=Y~;7^Ln?b6A>{Ai!`AaWm5EfhY3XJ
z1znFA)sDbIR)8WxKL(rlwlHL1 at ST{_$O==*6c{As)+bCu9njD+T1PGe997Q+w)H{~
zMYfm14FLjKm2v6Pt4)7#Q3bC<B9cu%e-N+cHP^gStJ+beO2=fCNXO|p))m&%9sh^L
zyT#4Z at 45aa$yst{ixr%mL(iXH9tO$>SNi#P64J3^HX7n+{9Y at 7nfurveJOaz@;BYa
zmFSa?ojKKZFK3CTE3{r5_<tiPTx>)Lx`e6|JH<Q*eDG9DOreg;;f)^KEu at 0)f4a1x
z)7t5vGn at wpAOcG!6AN2)g+h~&?=0V$2DJ9sDdp=;co=dATRL2WE|x4AKIjobtPbz^
zepd^sE3s|+BC)j=n`U}#>C0>b>q?tuu0l>5atb>4n)B}BY-uAU83HdTQ7LTI7KqO}
z at e@(MW67+JmDW0PSAe1k7+SQbe|*^n=A|MP+HED2Z+ud%)@xrzY)-W+oRzxPxd!Rk
zPZSkzA&(ZoG(5YPYuyG7Vws>?)Lwcf7*@##mC&=r()|2__%h`WVI9&6%d^%9hb_h%
z?Y!e@<{~Q^{}a)0 at O27D8L;w-ZyA9lr3AZ>yr4*D=yAaQuLY!;1h$zEf4)OaCT<&}
zGd{-VEA(-M-r>&%NWM5i56m38&&1;s;X)h$X-ak7$6 at 2eM0dkm&i#c97~`6;7M|<X
z{}_SyY;FbAsw6{T{%G(ASP#M8G|bKmmhJQ4N)DACyeY_$0upU*ON`m5{@;Y|_%1_<
zCR7k`z0a4X4VDDJoP&3qf2==x6lc%WjJ&hoqR1&(`szSdH{Z<0o4`gnsV!{1uj4YB
zHyBy-bvGPF at G0mbYV6+I`Ky1w(pJP|3jyNqbsW0mf-#5<khL}nk<ZkGVtkVe<t1Z_
zo$Ft}gq?{g{B$a7V;?CcQn<IZl&XAt9pe^-#)LX_xhcGJc!hzpe}S4_Z2!gYC5(4$
zBQdiHtT3S&rqoW*0^Lke(ji9x8OW+Hy0g`;C<^&@4|^P4TN*kaC+cfGsadFRUzSk8
z7`^;(W?q2vsMGQ85_v$mSdVcWV+CDEJ%$ip5=?5^Ju+J~0@~^C5(rnr;VJ$^jO-A&
z&Jm;-`+apnAIT<4f7J40rnS28X}gRpLg8R6-2t+a?Kx!*Sqoir>M%TuNmF$=W`-75
z<SsvdTc(wBIq|xGD9iT&guYcD9Je)Q6$)@K5?|PA^TU^m%z^$KLIg0^`F$8EuOM;Z
zd at U_389Fp!;eAxliRC_oG)Dq6nj~{sz>S$&U(YNUOKqm#e};Ka3^ZeGC{vivHYOp+
z{dsbbrS$(A>qNyTeCw(;aB3?3ErkZ{=D!w&PN at d_9e5si*+uvfn3ttrM{NkXgm@((
zD*Fy;g_)cY=S>vRL=XMFCl8K$cnM@`gwo=$w2^cFHk9aM^FR!f at w1(M6Fz2fce!&6
zSX5H?r{@@Vf5h&vp%6o=4JPJ at MYJarXdL0bO5trJLF>*vRv8}tU7$c5tD+NxfwJ#-
zLv;Kx0}E<c`op4Oab#%C0g};ETbE3+R!NcGtZZYt>Cq>ah?$z_?2sT=R*w$*QWq#W
zxkMWARH%$3{XxZ{cc-&|Y_8-<wMa2^2&;(`SA8=Oe_<bg&_#yZ9ydO6 at mOkd%Y4C~
zrDqrRlIBbduV)P>medm=DBT;t$lWSUeL)_teEDBfC<bC}qExf#E_T$uRN5~G2 at -m^
zz+y7RBV{)p721Gsv>w9=jn#EBqWW3ee;vkuA1j1-{!nm|(wc9?=J<-96aeh2KvKBM
zO3UXwe?QRdtS&@ZO!!U^v(u9tDP;8GxY^DYo=gMe?jQ(+cM*KDN?4~6;AOZo^6I_m
zOYDbC9Q=m?$!So}p}GDj^eMe4^`X?%NVSB8)4ld=0(RBn*Z9rU8<<-e5)i$kYirEQ
zL%+yZn(~l`?w%s0yrHmco38Y!2Y#u*{+k0-e^fK<Xv`Z?6}E3}T`2r&(uek$^?ef2
zU}AnBdxw;#thnvsk&*|EI&LjCt%|1rc6jup<h1i+m%hv1sMp}FN`c>Z=-8IGo%}2~
zu=pAS^s9-=RP670XAgqc%}G%LwnbayXEF?Up`pD+Q*pWED1C<Oiv?etwehsGkHjV{
ze{FXAB*<7ZsO at d+;WZf40FQ+~O`L8mH(AS`>FT1U<*w1FH9`T&ymY<Y_XFI7V-$_q
zMV*{Ob#GAu^QxTgtB3u*v`p*RX3=S(?7mE|nUQfST{iD1VH2=AQ*?9YFme!w)4LT7
zbtWR;?aL!@RSqrB5X7`gmakRGEtF6wf2;9fbz#@Z`hGNmM#7X*BX+gm5E9w7?Un`$
z-)CUQ-4_3RHAkYe`*nV06hthqi6N2j2oSDunBrrlU-&4*D)4%;4F=NX!RD=0m8k0j
z#kj&2uA)k=0i;nA9APYxuB4$g`CR3UzU9V2iex#8L`4K{qj|_pUOqfnvdOc)f3 at VA
zCZ74Oyg*TigY%5+;K4?=3a8jUt-FTkpl3{kSxFY?jMk`^U7Hc~D9k(iNBm#^MtjB+
z8j}9lo!7rc=U*UI&`2lL<Qf%{4=W{x^QNh!bX5->$gzvKBlN%0=XM_k$(Zw^k-@&2
zH|!i$aeKdEe@{$y2tq>Y*R?2Mf3~f783zlDD=1Ts{S)SnSmDG(X`d})lVGsEjp2UL
za2m(I%TyFF&N|S^0j?XRoFjJ5NvWr7T<PSR6$T?Zb4=pvF at WZ~Ywg1A`k7nci_R1Z
zaL4L-TeJ;A<D`%-PiN%OdIxMyqG~ib-C7C&aC{nHKPI9srQmqGCqMvJe>DIZrDJOe
z+P#+z{u(JCl%Dx#m9m8HAV%rL-yL+Z>_N#XhDMGdSm&}HbYL0-7_t_MV$UXsn{SFt
zGP-B;BXwYV*?V-&)toSB;7cqAUd at AqVb>EgAKwUpx#wO*(NDg4r}<wyGeeB_s$Z}D
zPc3u{WM8(eB8*Ub&uRFRf81c*gp351%XRi8U0=$820L9gX2ommAoJz at p>Ac#emsVb
zHw+r`Yu}|HJ^ZZ{SvXR27>`-9SXKc^QduUH{7e+z)Uwv3+<~On#b-(Pi<|9unJaMm
z?&2sQqT=h_sF#G0;9B??Xv%}5D6dF1ui<{gXPP>Iwm*aB1}>lRf0&XE`lY?t<FY4X
zOO6Auhjo}M5p}81laZJJ+u8AAP?}l`8FF*ywB!#QRj}9!iPf|h0202J03anvFfkk`
zjNyI{3+M<pqU#&u;$c$+s2$SS9SrXRR;$}Mw8hwV&uU1{nFtLJ0<BPCy?Bf22z!d#
zw@($=A+wJ&3NUPuf6ORr4yOw at agCltt$sR^hRa8rlQ=xf{`PP)*5690eIMA<T}1p4
zmyW_Hfq7{FTcee?J5nz##JVs=DsWov3V(8WVfE?_7jU2<_JMQutL=F`7cbD}vOxjC
zjD=99n4<y6@~S?5SL^&@$RdZM8Gz+NX`I2dJL{qXAfekxfBS$w#K}%)vFuI2k<V3|
zQduLI-j~hgO%;#Z8mQ~U0V?pG>IyjTA;EDUg*(Tt)b8z63{)R#WCr624!@jMlDy*W
zdH4r&RUOAq0Pw<I&|{uX^=1SzMxT%DB~-ECoyQXY#kkYKmwf2<NDhcRD66S57sqwQ
z+_Mcg3fR$Hf7w at 2?g(I+-uM$rT_E<;;RzzID`;D>%NfY7kdzoWxzHjPogDJ*5Pg=>
z2PR#kj!axUJ2(cs$qtiV<KVTA=YM$)btcSgL)qetIrL-|jzInKi#vRcJ$%z(=lgrZ
zWecN}^!q(JJijw4oyhb|%z_$9yQSoWDXRKxun(L_fA+c`5O9x8E*)W55ZN<@AYp7?
zT6ml-MgF at Cf8<fN^F=<M|EQ^b>TL5rV6D>o;WPDidlvGwfE?SR3mGiNgi5OPxvH<@
z-%(d)sIK{Yv~bfsprMVzEd-dTnq)EBKglV*gQ&no?$eBY1q-Gq%x at T%OV0FnB45he
z$_INlf6p<6q_ev%OWCrVRFCgPHh^714j&E5NHa7+j;k3dQLqiO#5S$_)>=CVMo!-j
zQYj~^N>hIxlL1$YS3y73$ikDI2Ntv}B~+Vt!Q2Dm-y=Ia2t$d<<G06J+>@WZqja at w
zo3!<i;bQBqV-$%$YF- at mn<qvG`d}%Ij%)0$f6?_fy%t-<*vcDnN~+(CL^QH?DhX_>
z?3G?2E=Wne+nM(4i96=GeA6GQJNDjfO&;o*@a7V*53KJcl<SqKhGil8^BR4_co at Uo
z6q$%E;MtbM^|6KKC=99n_{kR(vYnxy;usm9m_Zf78WFKQ)F;9MG_~UBM`WTzA4r$x
ze>dr|>$tBnn-I<$Dk%?9$7|)xhiRM3gt+MH*dWx8q1TJqIT%JQ48aV*`+32aas_ha
z6fCp+Jqq>_(Wp$47>dG@=B at P;mEAzYKh|3Ht{1ZuU at khsddo72(gj?w-tQ%BCqH0<
zcS%h&6i0o0c at rKqh@J`vX2<BCQwPuqf7vR2k24obYPk1;Bo%_P8-b^fEhq)wr;vY7
z3|vv}3Yon868~OB+KGiA5#ni3iIYd&$(!|taewkAemeG$xs}o|1&PAw^`+7dB!V+*
zvSdRDSN3aR at E+q5-KbNeK`6N(KxM3F<Lp;}+6dJ=?DyCM%fcZALxaijhEp(He?zW(
z248xYXkw&Ak$>(@^<VHHBI*w1*W%?Y1WmglcP}lD-*0f?Vl_~InrImKglIZVS=1kA
zDUQAW_Xjw8Z(Sg5ol7tV3#R)l+-Q&0R at JyrD`jvj3nvnu`|u%~)lY6v{(jFL?7~pq
z_8PKl+_!m4jgI|#?0oX?;ilFde{^-NQ{a5nFU!L0o at XH_&^T=^4NzL4&c-O0((Wd0
zv(>*!uxzGw*A7lyZVmnP3n=pE<+*`YIXdd`Rh&fJoG1QH5Tf8+W-KV-ph6!~4OJt2
z2UN&%3ZF2V*UiM8>3F;=Ux}%QA<y`Ogk9zoz;1pnV7X{?l0ANfB~d-<e>v4 at NT|Y`
zcJS8I*0iAb8ebhz*DZNRf3|E4Ri8a({U&tjoG`aMK*at_IR!h<!mi(D3I(BdNbosW
zv3(sR)uF at iKZ84G#(OrvydxFvGL9Z;m<nH53#(H~0UR3PGw_x@%uVV}tn^ei8{w~M
z{>QrX51j4VRqaUBlaix>e_H4eSn4ii8xpWbZm+ at 9ixo%Ck9-C0szO8iyfoH?d9O43
ztmO0d6?O#Jc7vj6D5-Kl$^>Y$p2z94f4HYu|LhFunII%W)5SO*)eiiR#bD#$b;rwv
z!;oi8?vX;52hv>=8*ETkWAR<qaQ?ebfp!0px#<UcbXNGK1&|3ie>2l_=7B>>I=2ns
z6~pba-XoWtRT|IzBe_Qzix>q_$ki$M&W3XpwltaLq&HE1D_ZZ9rl(S^X1K^iO)5DU
zi~0Kc0PMX#X7i;1)}6*lqGXn~Mva~rAo_n6iU_-qQZHMc90 at u!q}oAd^*QzOw$=QJ
zCMp<)8PyO4HXjPfe@$%D!VYTfkFY4t8>ow)a1cEiRG=Pe=%?v3Qj}}k9Yddf1)t!y
z!|}|}hF<WMY%iHYX%;S6()FH4$eD7T%@_LWmA_<qY#ly+{^6b!E(u at Hx`W{Sj}@(&
zka3YrEN=~*Vi<FRsxtyjqA-;Uc9R(7-P_9N)ll>IW(P3-e`tHzCqKHGuzv;rWdta6
zo2~8t0JV{YX4G;BkJbSaP9)z&#WUsb$xw2LKKO5`$#Ghs1M at tcPEf(39tIaoECSOQ
z?+>IbefC*r%5B^etgfvwZHGwzj|ogmSq2C_ZkJl~Zc9_tqqS(4s;-_ipQC0}pzcNF
zFh;cT<;z|df5haZ<BP_KgHZAd&U4?T{4w%py<bJ#sNBo6NTScQe_`BW at c*6Af_paZ
z{>}$9Ua4|XEf!xRi*Y0xh8EehIrBIL0#K|n86f)-_ at UbzaE3rh^x#Cv%U3k=F3RY?
ziG~y>8QPeLjlB}M-(3xN&s0H_L)?RIJ0NA#EV>i4f5_t*pIgD$=`Yh5wfI8B+#p>S
zI!rqovpvVBYSU3b(GDoh>64SMST)63nmigUhUW at U756}mIsG%Svdd=H<amZKCBH~5
zTLdumyXxTgqfrnVle-h~9WfP~+;BDv_cuzcNzRt*A0yx-Q7Hr=vBQvxW^2HbC43~1
zEWHx1e+nW#uZ6pLThFnadH3Z%4yn9c+l7muPOK=d;#7n9<R)|vecb?j`9fnapv^4A
zEAXGg@?hTXg}<H-jhskX&C$SC;#00XX$3VzuYJ9RlNNY6PJ{6LaQNS+ds}&*eb*C%
zR|E}Y-Er>9HPz8|LwZv(p9`B|fcyehgz*=nf88*(Y-1D;M3p^4q)xHFoBcY(#aML#
zU1L<}0&t1Nh)l&yV at 4?F#W}Zv>OUG{(!;rffnjL&I%!_#{b|Qu&*l7})YwI!@;h`}
zXJ^40bT(gX8~hxSZa;obkt<P;os}`|)JvHT+1SLp#}YDsS4EV$jsbM`eoqYtwO?=6
zf2LZ&EX?fforE6LW1`#%Ga~XTV%S4(4j=E6+-Np1)grJEZh)f!%QKxlD)tGbu$%K=
z$0|7#PuK0$XCUcXYz_=^#<pffWUHBsCcO#G1QG$^A)6Z=MvU4*29a};2(gsCGgOmJ
zRYH1+K_v~5{l^=tJ}m2i8%V<<b39!$f7HTnyZH)99C9-G^@E$LAay`s1lX0Ztf@@9
zFt1TZ%Bf2q-~KCl?u2D~<kq}%naf|cgHfPYTvT9yl1~F`o&y^l>laq9C5QT5P<$Cb
zBF(4|_N-qI`T@(vr=Y2z^sOJp6NwUkxG}`IQkQtsNV&P{-(2xNH`mu}fFWsue*%%M
z{pqdsHhF+E!jP_tFi|q&t at eqDSV8<kN at Q57R2+td*f5TQFSxR@{@T7LYFxJphgH5L
z+%;c<LB<WXYK3VI#feCeffF*1Mh>(W8-UNOO at ho9mj*aTVv`l3P2W)E8SN$#6<Lx;
z>N&%rT!d(TQ{IiC4L7!u4R at H!e<CTkY{^~~`}j<zj?D*t07{Hr$9TSSO-!0QXBAh|
z8Nh at fXN}5E at Tud+;&HJVuqUeQ1q}`mz6mp8UMZe|2?GdjIpiHyc}2ID9X(PD*J88x
zW%I)QCX><|_61YqeIeo27>B}PEv4 at 2&#&9b)0exESiLShbT0Nn&$bWPe=_h?lPQvV
z1rmOHOM&Gmto09J`<#jh1_yyxC_|vVY>7S?vEsb+r%$2KVC^Dr`%&CVoiXJ1AIB}@
z{!8xH{BGkwT^8kkNW*33*nST!*mvf!*H7joWxJYoPHtNVyus`Got at FeF9()sXtixF
zk}Y+z(#b>H*Ct^z`d#%9e}u<G$!S=TxMjaiKZ*TC(NgBYnatv_2J9NUApIhQ!z&7q
zs^;)Qs8B<Fx8d(?#D-68(pRZ|x}kS*1+`wpV~})Sy3muCVn=fxJIsE3ZC!cn=lIx?
zS9i{9h9AeLS!BtaOomz at J~RFo057c}6Psvr>y3T?U}GZg1Rl$Re}>5Gm*<f-w(5e)
z2vXd2(OU6iG&l6xWK<YM*m<A#^JSOBsY81VLUPy at Q^<S%K*-t&p#e+#ky)%B3wW}X
zAqZycyjtXSUYS%5OjB#IJ%5kS;>j=^Y4T=4ue%e;a8w$0hHiPZnHja0$jk<5hde~N
zO2Ld1lTk3-vzx&ge~85Q8vA)yS!S$3!VEVF4;zTYTk at VLEn`X%O3e$;elz3HTQ_A$
zJYuT073W-|JvF!sJ6|#-RAipD9w%}EJ-d%}h_mS)kc~Ico|c7!O*<M7jH3bm$<*P~
z;@M1gr>{Ulc<xxYLwxPPiHd{$nL9i6Dk2su_~ayrme?`^e*$fW2F7if6X=9S=1@^;
ziYpIHXjf-NM~pRc(pY>)o=SN*e>1j805XlGG|HZmNRx{cy#s614r#;XA&io4j;uq>
z^Bv;%F6LI;Y}3_~1+>g#zarYb?g}NV*IKl>j{k>N6m4y_Iv#nMzL5UR7xo^QlrJi-
zkEmS-uhTPAf7+f4t at m3fbUsV?OOriQtwcwyU0+DW$NNjbH=yJd`@{k(h^mi$U!lc7
zx0HGpC49QGy;#{s6~xAvw&OaSj;Zn1JEf#lo_%@c<fv}oCHzyueeUx~1h#8l!Qm|m
zh7nY`ReOx!LU%g=R_i7sdzTZVA-VU|UnNJr at f_n^e}p;ygK&pl^OI3GP5{DFjP3|e
zMaSB)L}l$eI%7HOPS1DF7J2E&I)tU~t^CyXwP{+jnRvmG#1AeGqCldbTB5Olt9 at 8v
zNY%?nj_Y^DU2dXg+-HlJS!Mn<rNpP_K at gVJk=KZ^W27;?5#zX?>~9`Ri>ftEn5m4@
zJbAyde-a+%Z{IMW`MxVjh7=yf`7s#`UcVk!5_f?F)B+!GmwIZQ9ty-`>yuQ#NB{KC
ze4&<PZ#2c}Rb<a!NPTYDW2X>ATVy#uDOuQQ35!<;e!ShOoJ&XDAj5K+FhdJ?Mu5U`
zGlGd3Ux0LbE}w9_(dIH==*`tf$dY!%Me8YAe}U3^0*``t=hFn at i>r^42)=u<_^k&+
z*OR_jTO9Zb9D37L)*W75at|=$I#6TwEy7Z==rx)IW(bovj#qy6<%Yd#d{*do1H*Ib
zQAamt?`GhlzA7#64O;{x4#r4+$?U`8LUd?~VGq}Yt>BF4wxc~vE-gU>BBn=4W at 8;_
ze;AoHv;;$YPpFBY<c%~^;DWp@$^$n(dJ`R|7`r(mI!CD6!|O>j0I~HUDOX4Aeb^w7
z#jY<3umB6ewSX$PgV(K at ulkB~%SiW?1?-o$;I)F4-Xqd-+>Pdi!|umFSSmvXGa3{z
z{=kEvmdPY6hu#qO%_O1pa{@VC1g<3uf71 at djzNmr?BJzgdg^oerb at lgQoIY#Q3VPH
zYqd>IR&rCMI>>ZC<>eFMst4|GxFvcqIj=D(#LsK)yweeNq*9rvnHA!ty$^*n!X$UZ
ziOwhrxO#LE8WPA}Cc2%9$RK5t7u&QBPav@{-52(EJ+`N5|CUOq5AUPWg-TySe;H-;
zP?o=}wVkU;riKfT0zyJHh5=h?U+fM&g%jeXw8yP-irb_f*p#5D0sl`HFlxI$`^+`v
zOVWotNwQ`T_I{ULvKjfB`-C2E$Xu=g(jD+5MFkjiE0k<$4|D*i^cny|9aq&zoO)L1
zPH9Ei7Fg!Z><j$Jwcy|5iMC1of6z%ho(-$%2;_=D|0wq(gs}l1H$^#*`Ur*XKKwA<
zy7>NPJNQx<WfZk_zb^a?-=JTJvC}FNp4c<1)I{QS^FdEQk;5pSDF=@ej8csBEF_0+
zve_8bPn0{fX$Vd(B4SYs=UI<*p2AkBYw?yEEZg;6l at J%;JXDBh8Vn6vfAjFJC|Q8q
z8DHa9Plwa~CMS`|tQWgl%|^x9PMnKiGy&b6IXTAH%zLdWHvhV>gSsdL{o%h%x2 at ov
zbZq8~{N#@$^=VVW?bEMD5L<|<5JkHKw39bgC2IR$D at i62<#2WiKY2gk$5Tx7Nir?5
zLmw~>fTg?ccx(i)fuAsMe?Sk2Kc at LP9uT85^amMjS4HK<J%fyTsfVmk-St%su?9g)
zY}4>Uzw)Upi~`@3^ep*fgc)RP?r!93^^-rQrgY9MddcB<uCWUw$)JO&*`aDoCJe~`
zZ2x)?H`g>?LubRT_If*y2k;erh2f5-Ucw-GV^;msG=b_zoxo$yf5=}0@?SHmZ=KE@
z>#m~{k;UJCQcuj}cqtEU at V3e8rZTw8oU%;lnqi9Bf=F*D%n6G#I`-f1j!4pRy`^QZ
zn%%PdBNND$qw9f`=DbhYQ>;j+TkQw_P1P7V at iIql)}EV9F|Xi?ssjbE(uLiE9Ng7_
zs=6y<C||8J4v*$be-&Z>e|gPEpK3&yU$%QK*j1Ga_x6i3FCq`zcTNkBYhWg-2B8ur
z_H6$Dn!JF{W<d%-(gWwOq*{#NMtSx69_E~B1XR-9yNAzI at 321E{QP3&o|gI6-$ap9
z1KSb^@7)tc`=BScgT*jWnz)F5f>wTv<^-&|i$O>n%tqjWf6?!nIm=^{5JIB{N^@H+
zDrfh{qv6p~IL_+<J=*rM`OHdgB_?5Iygx|Gqc^92JPLJ=BaVV(3LL+h&s$o(o%QW%
zlF4p4UK-BxLY<_Gkf_2Sg7a<4saDeTsdcXwllobW#CZ1ez6`{GMHi#~Fe-lWwADs2
zkCjDKSe`UKe><opBcau5 at nLooa8xwvPs|3U8$!`u3_c at IvX`p<;Pc06=9=*RB1uXo
zGWQ)j#kRo1{Y+C$J2dNg9A{kC(9L(G9Kn=1t6V<SE-xcOZ4B~1bp!$1(Hu$p%<e at u
z(Q!u)*LmOrx!Z`*lXIezezQ8AZt+{fws7K8`z+Khe`SwhA4OZjlIwt0z#)wuxrwWJ
z1VlK!Hc>{4XuBq%9v!U-R@%rg!&@WImg^XxNI)6V+f<dwn=7s9VhGVvj<;9yGE?{V
z1(^17qQWkmdZmrP{BS^d^hpDtG>^z)g}4ClUQcnNYS2{w+}l~5(OL#0fo7<>AhH9s
zeyEype|DJ0Mbz%tgWJj*Wkw}>1&JTx2u(+5m2^&8)p=+mI$W$clI>8A(F_Pi`_ce3
z$4-`3jzV8FyMqpP)o&9ZqxcAwcfH*EtsVV`x)Id_qCn&a(wcKLi!%^pVsH#N(q>RZ
z4Dx9T>rPXqc7_ls%v^koCPpt0C?1qMKQS(Mf9bfOz*3T(MC_9mh^KuT!Be;@Sq|&4
z!gk|p%f<#Cr*Vuqd}MZRuID+nUnV39kt_*$z3+pX4keWH at SUI(ilduI7Ej0G6g%bo
zVqG*H4yN`K>B~^!6SqZD6emaY7Mzh;^k8G}$m4wuZiPzz%HwTG#vI-uSyvnYaxh%j
ze{?L}6WH=b+Jdu#D3ZRR6ReiFct#kq-2Ph7ECORK-SW!@&-3pPjLJTJBe(n_`(T=2
zSacD#hQhsBYW56rQ<FK~2MP|~@l<@D9I;=ML#7T|x;qd}i3 at S<bJwL5)ZUrl*FS4X
zkJc01je(sWbbh#?#5MVSrJV0@*7^P|e;x+x9ES<;&-m4F*`uy><J3a4qm at Uqjwv;;
zeEMd3QuCaabj at EZz@fDbF2AG^(}?t54&tOG!Sh%T_K*a}M#iuB4=N<-rEzxg2b at UC
zd=WRUXp;VJP4zE8?MIG{(6_y^e1K~Tn9R%uzux>1cd$mIf6(kXfooUkgF6Noe=1pe
z?3U}e{<gU8o-qF~X|FfH$PBfxp{m~LoEZrQCzoNoy%r<hDYwwJ>b$ZKW9$ma(7wVv
zeOw2{Wu!9^8dMO|J+$xNJ$8$2#l+{ik#W}$-)~yJJ|O`UR4T+u3ktz)#ZATZ8Dj!W
zozp>5f}wTFUyLcm2PVb*(RG81f6B5JEXxd}N*d7OB|N&%a;0lVy)g!FW&y--E{ov4
zJ&(Z5-V|Ba#fWkpo(8pVU3$9 at lu!XR6R-b&tyTs5u)VN9W9NSzzzR;|$>p(7VpRdZ
zh~wjr!hX5g24OsMAg=4}5MCRJ2ZjF9 at tWCWDRqIVw+cZr0<&F!!<{=xe at J)v{#-#w
zTNZyHh2dRQIG%S20P1}Q%j#Y$pWc&j$K8CfF{p*#N&pK$^uLk`T?Y at wewT`zAWbyz
z>DaYzSS%p;co&^)uU&)Narm|u8rpZYsFP6NBvE)AyKF|y+!SY{o$*Gp#fv^Nf at a?y
zs(!Jak)KTXlZur$>&|p-ov($hGJhAwvj88lrnV?fw123sas|LlPt2`S<@v=7ka<zz
zoikEiA(7ZpQOMW?%HOMg`=oO$mj!DS={>8OB4FI>0}vSg<kCAi*I{%mo|1`-rkMOX
z(inhb0&C~VziCt|OGD7bn60~2miXM#Iz?R<b=Dr&g82~?Vj0?Te)Dwt=zqk5R^Bhm
z$OTWNdRA+=K^%T$$CDxD00?@VB#{OPrz)soamEq&$Ege!QS?rZ;pEusT^bmC9#B?T
z?oKP5*{@P*FQkg-H%IbrLRK?GybQXvMQed`5f62OR27Df at vm2S802Xj*&hy%Cyo?q
zby+OijYw6K*~WH&1r>GA)_-V6<m!{<!Wy<Nq;F5D)pC&v@<|U*gG at O~GrVEW!<bFj
zmEnzkRKy=^;;`sfNe%#-1YrWBQJ!s90<k;sh?ra`37o7Zzy1>Lva7(BROeDnmylde
zjm|r at +1>5DhFMM5nKdzZ at iEslI-gyFK8~N_0c3nm?_g#CI>hFzfPZjGM@^BfsPXc_
z3u0&`IFpwAjMrp~f&hN<Ds&psOE1Hs_$F57C6OiY;}9(x`p0>-CxAJ<)M!Us0ea*9
z8M<ABYd2vI at ffJHH2O~;xC^i6G|qd=5{a4R78PfMlaa<tH_3U^%WUdV(TgTZN&1da
zP|s*Df$8Q>d|AJP(0~5yf>XY#xha)9g4r^MSPp-BinVv%uZIl=JpuNIUoRyHHeZ3w
zi#rJe{^lbyWtg*J>=)Cx{CY*>@k_<hlGj@~4;HAGNbyBMkqnG?uQqoE?C(rW0OQaw
z!t-M43Wp0N0Jdv^e5VAWeSoMvhx)IYuzSjdAe<h>EmsW5GJk)2KLk&@iszmqBYOZD
zyAxvc#6OUNbeH<p;@VES$M#g;J_}i;%2Var9+VEsSjn>8Kz&FCwd?DTEZxL at V&gt`
zB16pPVT;ClxY}M})cD&mqOOUd_H^6MS@^!BTpa{{a;40<Hn3Q+ft$8HldAGt6dd*t
z@{lD6VmNx!*nbIYZaD^Pk!t3S74Nk`QPKidY9cHYd#o4Axk at D!R>v#};2+?|PWios
z6`0D9o<f_65eXTDM{U%+VNn9?IIGq`47Xlds;zofOU1NXrlecukn4U>=h%($Ox*P{
zbb};;A$x(u33~L~k5ew&(fJ=6wWo}sEKBQ~vMImk8GpqmQ*^{@IgN0`1chJJ&>A?u
z#3SjSY?~oeS~)Du<6)$4f@;*pUZP$k^SN)u1Z_-*Vmoq{H3rnLZ7P{O8gTIjasAEq
z{q7rrFmO1<7Ug)NI0^Ixt6A at TTU=H49-PGN9lfn7X<Vnl?EMhq6JY^bD}p(qauvcz
zIoUbfhJSR&Waa`<lL3b{6P>fxFXheL#kG;VbYmMp at vpAK@EVrOF`1wy!w13&g<GQx
zf?;lVn^@fsnL*7Uy8<r00M2_#-@!`3TwaZ at J)Y;hXa)O!>h%rk^i6=*jW*tiNb0qS
zC9Yc1eUJn)xOqn|p&h|%3&!LzV`i7A>BdqN4}V-(Jz%%SxVP5g-D^$23jKP~J2hx(
zDc=kqej=IKZar~Kr#p_!QYEKElHh&DcId!1RhJ(D4s6V}60@>C-1+}XhqqDdRsQS)
zS28L8{uD3iTA5DC!Mka7$)d6}nP8>PaCjZ#{Lp%EW9jdu%4vw6+c_D?q`!D at x&uM)
zJAY<bB#Qms_gn>PZqU~>(=?94md24nANyTaf$CWY7)(@j4lZ4X$(;J;L#pzM_9U)6
zG7raiXSjfYGKms0M1u;pk0#?PL2-&fb2unoq03D~4hQNYK}iba*E_k~n4(SjFWg>(
zO=~3Pb7vsNz)#nsLs&IX;^025MH~>`-+!--(JX~CnL6xhD3~RSX_q(p78-}LJ8XxJ
zNN?l%zN=g!`0NypA2IJi=6ny(?O=IPQ~Ikb(2Arc7^&^ms}d+ClCjXMC&mFGA(_UP
z9DK<tQ63?gLSeL>?-~p<@a~0Fylv3goBa)gF`vaFw^RGP$wu-wEfmU2-;oJHY=6cV
z;Aru<eH=k&okG3EZyf*&vZj;9^XOF$F9L at _ecSQ0t`6U#xjpB-G=kSZbVH4!7K+>D
zoihD2dPOuQ;qek{1*NYJ<=h3;4mp_In$Qv?%#2^LiIV^e%1&kQaW{U=lC3by)h+#a
z=PyI at iHMI!6GP4-4qm2eYRvJWB7b%$52xSYW+drPCG~)60;o}mgoW;(x&H at qK~4Mf
z&S^!a%~e^uI+Yk8q5tp(*GFD8yJaEq(*cqj$juyUvar{F?RtIit(+nCZ=NwUW}AU$
zlM;>cv}FzZc*JMHM0m?X*hID}G7&cQpk1FR6wp~udD at JR5%IL~qMTb-$baz4KB%~5
zQpN@{y()P#^i1)1vvUUN{GFaAN0L4;c})^c at OxkzD{4|mm8<qV&y%o<7HmE)`eOQE
z4IqCM90M#VFwcH{PtM*q-g^dCb=1<1BSKf62j|W}%q5{I7$3>13ok5#BU_A-0(zs?
zPjnK7`5nVVlF@~&nFq0 at e1B5TD7WXGGKJV4>}_6ZN_CD1pn}Mp$23e+E~@0Qiid5V
zVH;#pFt<QY4NxkMgJe;ne-aYZOs5+NIg6t<u8Lj2frrV*{M~|#)ud?bMhUt$>KFh(
z at xJPit8OOC)-_t=s(5r at N**lGCE0Z+w$tmP%Z3UtKd1C)umwtSU4J|L1GZOG#Q$sT
zy8_Gd{se8oI!nMjeiHt6%j+Hnr=FyG*ACz5Tu9(5IQ}hxm6;bLxDLJ8L{nNg$YTK&
zlj{Y!)Xg;rt8xl!2M+P}{tZ}^=IQcGM93eg3$44db5AoSPEPbH&S5<mS{*A%R+=Ii
zu%?y$hw*I{y|GWIGk at j4ARd*=4ALCwo!&<4Md*@0Q;G)X#9VsO2B!7tXAtWdIH$Fs
zvTpEpW^9e-aO&#nlK`A1{&PD?;*AhmCoNqpuvux+QVJp!om^j`oK|4Q;{zaLuANj~
zfZ^pv`!ts$=_$D2gRy)X&yZWZJqfB_Tq3lUMcj5c7OGh8f`35_r at BnzOAx8X!b-Z>
z78`fO9wvD?-{Oco{nmCaPm-UQuwz0bR;PEYH)PF7Vt>!;a=?$}haYbtdd=Aj)|FYV
zWz>lJ)--sd3GM8f$w9KQ!mPV(VU6VFIqoPr*1px;$7D1aIbc at GnNa0Q(K`)%63N-m
zby)?kE4sDJRDU<NJf*;<``%-*#@7XACt7NDfr2J-9UF-EjUYQHokt;=El$xi2Gi*E
z^_4XLGjh4&AVx&fcN=a- at _Y?n`DpYFu(8|a0b=CYNb#uk>6RcIa>iSIaF6b*z1O0F
zN+zsj$$QAdZ;BPlOA7uZ<hGkBOZ6AHJpj at W%fYLD=YLJN0k)#Z6G`i59S8t+*Q58>
ze$aes($z$PO-LGZocr>|{gAaf_#Rx&@gpe7C<X8pd at VlEr=HJjW$3gC69}7UL{VVL
zI%FAIfQ at P3oS>%fA6I_G4w&b~r}EsS1;&$U_$ga1Hzh27N>!e4mk!e}p}9>U5~~dY
zX(_^sc7Gs-_UZ3sfe{V1Ibg>o?2=lBaW8=JOu;(`(tF52As4!!>I~t)2CyI{R8rT@
z3Kk&{7PNtpbzmk1E8QzZi%EA36{n>Mf66vUl at o*kBqcEjYIo8o*5VjJeBNe8 at 1d?x
zSVfh~*{aGBYw`G0AE~m3miKI--kJ^OVla<#fPc`8JwFI!B1|CC05?HO%F&uxc;M8+
zAug#{mfx9?A{=O9E3 at _AX90w6p?`~o!@@bBQ_ at bNh{qW;<>SUn>LYbRifgTEg16H~
zPCO|N^-0g;_%cjsG6VS+z<#(2{b7b?@w&eb-Oj?gx319@%*c{fr6M|D*P>Jf1<F1W
z(SIrbnTaQazzR2Y^gc+|Ii#~8NUraaBhbQ>(GNjH3~ll;L6US`MhnvS@%O<{Y#0-_
zzC|9Cwkra%2kDr!>UC9^&tx}{PR#!X2*OuOTLjY{*W9No=W`$|?QREy&c1<44Zxm4
z$bk;`c_&R6Q$;m;8=u90DYn2O^u?<IMSp43+0a_kT;GK^4E7Gb9DGq(0DRLAD{&ig
zVa0V{DLa?8V4VgnP*XtRMFO)5AdyBuH-OwI;899ZKyDW+C^Kr%QoaTprL7;sGTPV-
zoywyRLbfwBr*~*8$rSBy&uW|2`Y1~r;Xz;{!JJXvCqJeWTXxj&PiMC0$YZyc&3`=N
z;j~TF+9vN|OlFVt|7h-b$!2|8y`2=OGkUqk(MtJS0pa@`CZ3JsUb}rJtJt7(M|VGF
zlfnbDL_+ at WGP18=uO>~@t|xDhTI5yZWwG0nw at t2eLR<o)?+2b2fK?x>cfLl0@>tZL
z{*&|bJr$9iepXckJ{+N}r;i>edVlMU_SXGT+&`^Q$@j1o7u07_z)ID!A?thA4o@^&
zCMvw?P+L9)BfE0+u!~ZIQQ=KPW;Shz&_<u2>sy1ccd^Xk!3vI<O~g`X>M at 9tJbel!
zgcY7<VwLxa{tVArd=aU)rH~#UyD8pbR?l~k_(efk8x7Cc(N`R#pV1GB&wp~0jgq8}
zQ=aKl+FH$V(HNVO5G?w95BA-!Fu1Q0%!|2jV_3~s%R!0Ur`N>gVzm}L5P&m$bR=E$
zTZtWb^$@9#+UX?ayPQ=GFiuMi$s$G^M+-U#5{JG)*A50`X7E>^$OewJH`rZF^H5N0
z-6Vw0eS<9cY$b6 at v8XtFV}EF9Ol27aF!wJBJnZ+a<$`^u3)UQZyC$Yft2LdxPRA0<
zpefT_6Gt+E&(RV1Du#Exk!YI$=&`Xo>eu6>B4=%x&y1mFe%Hi9h7jElklwzr&Q}%I
zvmk_{1(U9mBvXtuW9jwtnA4k-86#|Y*)R5pIQ8qUPiNI0MAv6B3V)4I-s8GwJ3|_3
zuI2T^k-m9WD9g<SG(P$9k|cJwKIe_szL}V%|KV!p)m#|&?{ffl;{b6e-TO?bI at IG1
zV9;N$9i&w85(9yxDzo>`pQ at v8`+sNEO**e>vT;+{yR1pu8*UZKPe6z^u<Unwp$1)Y
z$kQTAi6iZHrVO?Chktck$*g$$4~*~8xlRz>r71shtw(}ofqO4!FKi<N;G@<C{lN`x
zx~-(5*JT-pNYa^|U!wur0VvR(3tjB?U5>g7<)=&t9zhDHoBZD??&+5^BfxOpE^i6+
z!n0vSa7yP4%ZYjai5?V#a7#^N$WnwIp&i5mS)|oMqHg at M8Gn}|X?+{41Z;xtuUS9*
zVf}NuLcD>}P1SL`{kE?!5a&h})4b2XY6XLD3D*%PrY0TsB^-f(hqs*QSNPpZ-xc+o
zc*s7h?U^T~^Yp#k?L%!}Em&3k;AhocQKq}k?09rU)WyIJk<-&K{>t^(4xS=M9Gzeb
zoYs!?@~WEMkbeu2yuk<2u?-GcV+#{G9ujcUv0dh#DIMpJ2)KBBYQd>qKUr$J%teLw
z2?a#*Bgau=zv6f&<b71dx)-r{7vYcPf`ozQU_$}di48QN3cKqc1ym-?&Y&cK4E>mC
z4c$4X&s^B?i$@yW68>L=M0P-5$NsTNOW71Gk>*#Ttbd!N7KA+UHkiAFlxk?f#EhPS
zDq>~UadP&UUxsNth9JM9jBXijJr9IXs2EASWBLS({g?5eFIIXsCUi_mVAtDIfhC~e
zai2HD|1{65p9K5jr_PQ1Q*$@T??_xfX47ylpaTrbUsrLn)^u)y^zp{z;{{=(31a&)
z at znu%uYUonFZ!*0r-n)jf-McMxueN%(*3gykR_k<4ihB4=q at s&$XaYpb7~;K{&@cy
z$RT#6fvx at iGf^BRj8?1c0FHi<fT!4pk*ix51*qRX#``cK6GgN)n!@sJ7NC-cs-pKP
zx;W%&V2i&@6MZ#p$9W`*Fcc%=0P1?+{0n@;#eevd_3Pw70cLK)<vj3Jw2d?Ye+;wI
zUH={1g1Mco0tOiQYh94F9*F2=RlzPVUOffww$g}=Q7CSXS;W4(6~7)5r&8|02Mu{5
zd!Z=5{#Z(%bP9pVT27)tkAA13!GRjtdq6aB?2&#G(-|81LoMA@)(?Un1q8GD@;-h+
zTYoBNTdcx_ViLCV=ve=`JcTjuw_n&0Pts3fD?tXtaDfD>5kUuvXC#U*iWMkZy}^G&
z$O%lR)C31HhkuV!=pqx=20Qsqm^{;KkWe0b-J}}o5PtOb?zei)*skTqTn=5P)-Tg(
zAdTT$U4Kz5ke?NS_i4t3=|%C$jqFwnNq-X)uI6N(k^PT<s at nh~sMv!Mz-=##GPTZe
zEi=;q!j6ady0-rJ?D+hK7!=|}of7Jf9_-SexXj}1IcH`4-1BGJHIFN8>VynRjCT41
zmmOib@&?-XFaaG0x&>?)Me6}OQrS8d-uZmB9XBnz0C8Er-3VXab9G$Y1T?_9%YVX0
z<lJ*D#>QNoo5?byV4>yg at iJb}`P-vi-6NDdMmtQ(`H1P=tx!@Tk-p&ZtXf0=wy|-J
zo8jG1Hza&|KYMk>v2(K7n!-J8E&g}6%QD_hL-Iwm at S81K!mj`>33bF|#@TI0w{5Oa
z;9FsD1$Sws6+bqqUGLFqQsL|%aer5;uqQc at m5g|*IipWzsKs+?Y>&Ra&0P{6El6gI
z!>y-&eD*PeoRU89rp+;!goZIM0s)v3-i%?3Fsos=O=L%$q?ZSi{;B9BY-<|rsAHw=
z64c8P$!K>?9WRJ_6tmf2-<lE6KLlPjKwT&@5q7ZRRz`1pm>y~(PnE|xJb#Gt%0Xr-
z&2R<qmSI?yhTa_{F>qwy#}~cgnRn}O2WWy?`+fDPJad&SD@>;*AD-zUiGf5KMI#1)
zOB$~9l`reHAh1 at o($)FH)*KeV^cI%nG1`!psKfF(8y(5kqPX2cqCD7^cdKq at 3|`%b
zuq9t~55wTkOttUz&VJbj(0|YwPc3 at Q_YmVG->(iH{y!`JDAxs&(_A9_yF1`v^#Qtn
z3w%Y4Sc6fmXYl|gE`5*BS0tTUG7e$QUWraB_UFQebie_W8G8#XhLCe|IYzXmBVQkL
z_9~M%kb0=2yue+G!U2vK*?lS~7y;$*mI0Ok;4-84DeVt_Li+lRrGHfSo^HU`=bmHZ
zWX*;HHXuIC*p6yETWVO`2bG)&t|PH at 3rYxICzjZ|rEU;A;aHo=IQ9jb44b`JFX140
zA0uQqv_+Vsb|W#fi@?y(93R_H^8il#Xcq6hlc<C1Q+95zIEC`ko$$qvtIRz1tJCiU
zqASq&B$d(Hqz1_r at qaSbRWcO+&j-&+5CbIm-zIr*);SWdsJ4pToY9URj`t9RlGmg1
zI8hWv+CO?CX=xDKU^bSJsdAj35r-GhAA89XK8#fq{tp0gLm$R*$y9Jxg)7N6I9w&5
z4bcdB+zU!p4mG8)4nq|}fxn^q at OWH9fDDXk{+Yy658sMOuYdRjP>Od2u%ASHwEDCS
zjYB1=bxvGF!?#oM_+!`?C%KIMsJeG(#Btx}@Wjg=;Ce2rpA&@9UOrm^l7-%a!wYY7
zh5a at Kn}i%uc60WGCoMa^2EPtr)<m={PekyjJQs>C!HA6C%L!XdGcs4EK=23Zox&Bl
zY9L-4dg;G$SARgQy!^wa^w!$OH<uswAWS0}k>$HJ<G^2jNMZ|&)|&^*>`qn<?xkCs
zcV>W*n`zYeezh=a6B9>cn>IJIotWk7PtmQIle`bNIS0V&u~@5NQYlh!=RuEX?EJrY
z+uQ}LIEI`c>(kfjE0HeMov%#qUwQ(k4D>z|&eS+%KYv1r+Wt_9dgqS4&NaiT+CJ<k
z!nhbSilV{y<2hA>p?cnbHRoQb*|-gQI+R!OW*Q$GuOL}RgsflW<QOwRmb8n9;i?^r
z76gPEC{ybAvDimpAve1FKcbB`+o#4)pKBYtPX;Cj_+P?zmr#F|Os?5tUW`PAO at 9e#
zk at 4b1dVe*DcfdfigpcMQl^cT1U7a at gEHiZt9iDnNs?bgQc{e;H?;xdwMNsduw0BRv
z3}Q$^FrPTK<>@C~BU*`5H0fyjf6ubWyjcbLb3#UFs=|(s&H1u5xR!2)CQ6VolKBQY
zxCO!Q%$!$%E)(4)o3jfiW*N>XqF3TX=~GtCUw`m09MSl>u6a|J^$aNeJG$?n6jxh~
zRV7~jAvLIV>~3D at O_F#re`mIG-Ym&nX at Dp>bUR1&!Yt~W3b$q}ZHfMs(ml;>(QOL%
zcjNl^IELj*_R{TmAK}ZT>~-!gc)Dn+_j<%KPTbRcd~B^36ncB$Qumr0o}{Aw#<xuD
z6n~rj_R#H70oN16qP^2H at S5yXkYy9#tuInCnx+ACr(y<IawwJKXYK$Ds-YBkh4GY+
zj7y_~HU&7<ZQ2KVVW}6nHL(-W0DF?u#JDl<mGc_<-N0(8Gi#y%0Q9snP{<w%kAQ&n
z$?mR*b?A{+j{`qQax%CJi<uJdbX%oK>wm8v at Q?;+#!Y}K*R<VehLtG4Tfb0(iG-)8
zh%0ZZ&LaE;GL*dTKpo3DeBE|Xl3e;Ti&oUDm~O{n8lR_(OT{f$M=V|%ucm0VqO at Vf
z%Mr45ddu1dn&Xjg$Jys!sXSClc9XJd9`MDJ4O+4=#&o+JnPq-LdXD8YQV<_yYkx>O
z05p%K at U!-r3_=fpHct>lS+3DZ0RG|~6RJ)uD;n0^pt~Kp3|$$Pjw80aSsh^c>5kKl
zC29_uQeMKt<(^sJ0!Q0r at XB(3GK#%)76rnxPhOo-|K0u~!|w<Zi06{C&WVOD9o=sD
z-vRC5{h*m%R1%a<S2UENR{-Es$bY9L&yXwNb{`wM0VyN_o+zk=y54~SDzuc{4sR*T
z;%}LZRJWn#P_A7G1#y at 90EhxF9K$ckYD<cVWLM43h}{nqZ?=qIGeI*Io7%zo%TES$
zY`>ymR_rR(f6_LGY{-TGlT=p26Fdq8CWRh at cL8JfZsT>OnBSD7SF_f3y??EyPeIbY
z?U3|xbmyS4iCT+dsS&V=XJVkZgjbuX-O_JWW#`0);!{5J^UBpBWQ|vfR$T%iT}Y*<
zCo)rBs>_y^oE2O1MMhBn at 5KZ%EDeSc`m^HovKZkLbr(E}dF?*kXg}5Oq&nDNmal{T
z3{9uQD7~-_L-{wI+ZRD4Hh*dgXsA-4$}0{SdZ2$U30Jq7tJNqC5_o`P0gm4-B!EaR
zDC(a;?DW|pJ=@OgxwNzg)<CfSN>{NC7$^zu==&iw|AWLY^@+uj>|{wGGzFu1n+q6p
zmY}(jlvSlMUo`LR++F07$<4S^L&b7{lDl5Sf6MJKHpF$;6^^aJ6MtNIJz96F=eT9A
zCNIfe`t$alT&Bcc$U22<K~xTOS^?dz8~DfEq8Ny9o=STL9_rw`qWKf3LZn9qxfql9
zq}EJE6aKg1!8z|_0P>8$6oW)Vvvmw163|o%FNXitnzB5lKLss73l1P%s;D!?5$(?0
z<{G;L^&!ZBo`K}aRe#0qO!I|?xZMQCTMy#B6`p1+xVWz_#;Y3_+pfwsivY)>+<BUB
z835dAd=gxVH~VFZ5N_RyF-npDIQzBQBNhK#K4eY+2su!|ua85j6GdI`iPPptD2vK?
zs>FiE-ksFhHmSIFu3^^b!{5BCc$Ngbt7%S|L;8|RkJt8FUVp$gE`~hzBKEEg+iYY8
zUT5?r)L%>IZ$8PhjvjcPIWa$`vmc4kmyg2o(gw^jIl%N-u>m=TE8~GyCHe*#8=W5T
z$OA4>00}oq0~Bja at hR;TvV=1<VMk+St}9!4Y?izCDW8gS)g9UOXSCB?64}}XPd1Dv
zQS*Av=S5 at h)_=h|x6l}fHQx?!JlQ7?-cn;kLoup1(1q^=I$PVGmrd7+wu&6T*WDhZ
z=k*kmgrGrpBL$jA<GTZ0M|_k?Y*dAJ-~gNEF=S?Z+S^_b+x4llaFcHBD{F*zaui at S
zYVdA}bZjwOSm#(L*3E)tw*7{7jC2W3G3G?C9Rnfp<$uYBC>uBRi;GAzvs9QzQz5+8
zx=MW>gS^z(Ay+{zL1M|q*J#5I$kEa(C09&bXYoRZ$4hGaLb8mhAG$5z8&8gz#oREI
zzp4ZHA4!gJ6-_Dzph{<6uA=JLwAjOCFUJCa3q_b}cS9$j(dF7L!<E;^10)5brD(I@
z&=vCoMSm}dq09KK at vx?YE!E{^Sclyg;=q-1+vs!83_|kNcZXe4VTc7Oh7fHtomnzj
z<ncUKvaFR&Y0Tq1GP0UCZ)L65-ctBqHy;hJU=isnhB{2dEA=NzhEJK)_ll8;xZ;f;
zgm&L9KDXbFq%mf`S)GxWrc~&ANLjnH&&WYopns;9iHLe|yqwiVx;<~w2-RRRTM{>s
zHzabaDZ+G?9h9zcxbi at W8I=zZczqg~T|+B`bg?cZgmg8`FG+`TQAu;EUe|aFk!Mzw
zDb0YM51F}BPGXq;wD=!ronDm06aA6oFvClI4?ub5!<h|kZQ)gGDgA+ZFKYO~DXH=#
zY=7R>{g{P&mERG4EyyP1(AXAagc#UOKs$^O{Jl09Is$+#P?v0|mS9ZUal`?iA6itT
zJbL9~)Qy^1MVU}Kboan+la|7&%9N(V8i(9&mzSj-7&M+ceAP{0x(jiIkXX?s2mb{j
z{}M#9J4osyPO{APSw=%%+Co|Ve_`hGlz%(z8vF75b@>8dCYc5JEY at 3B2ZSp`hhZZG
zQz(JTWCDk53>tZs4)rjoTDX^uOqiXg8}Kx;KMF;xzogrjF4El04+0=M59G=an{_~z
z`?bJNP0nsbCs3IF^#T|R41t^S)vz0v%P`J_*eNN-I^vYKR4>i~P~CZ$AO`Jzw|~6i
zf&*c%UzhZFaf{9nF75EMD8FS$lNbLqX4F^QG6Iin^1}}GxLCshEM7Gt!ka__4HrM3
zv!>*d{uc-Kr;4Bt7wL~sf8IHkcyvcq%qV{2mk*hYLYnIc at vrCHe0WbHw1hb1K~nHl
zWt$N at JnYQq*lsf7V7$G$B>ywl$A1@#G#+OTC7zRDWU{X`I&bQc_+{0zK~=M$V#wXV
zJkpGmZ}AUSK0re>eRy@|&(HKF|C-lcV<+l1t{Dr0nh8$x+k7G&U<MqQQfW3UYcyaE
zmaq-Z(khZ7XTrrbOAdPBwqvkI<GGc}DA?;g+dPEjKA|DamgwU&^;n>iEr0m?TF$p6
zAwKJATnv+e17VX}^$8bnF8_!J_K#xSRjRLyRLDeI?u*Kbb_ at 2PoC@wuS_a8XKP2a3
zX$GP$zhR&;31e~*4G=FuI5!`gl+rx9Vte(tBYc+tV+8hRPxph69k`eXMBX&fM#!N2
z=ruB(oVZaTuC$J>Um%kRK7VN)z2FB<z2_GG$B0w1H4(Luvt?Y^hGQ|GM9^zw6=OYM
ze#_B3<}O)*adREvp;&tifN=h!#NAmFZ(uKlGXlD7=0_nsoEX7lZ!W=9q-;q$)imEd
zl6))H1GuAKUXm?d;f4(c)TBzRLzzTKc!#$6jK74Wc|d#|3GLnm)PF(e3+8AYeA0_d
zwLe(=aF+jOh-JI#msg8qO0sK^Irm+|%LM(Ke%{;ILTJhP7tP+tgMMD}e8xY<&a0vU
zlk4l+PNSqCK+VfJnnYKZ`p&rZJ3C55>@dWl8;c|+SXu>W5I|x(_9_p3 at nWpkYLGXZ
zx5}jK=275PQEX92L4P-Po%|xWCd_X7#1;IwLExY=h?X{e|EP~B>b at 3xg8P~62kqu(
zC!W4}1uZ<TXQ;eh!v>nE-y`iru-M857`eRWikAcoTp4Y at tJrt47wtCJkH~E3e2+4=
z>mwSd6mdd<mLf|>^+eGwXb?Xri;ij&I%j-vfH|`M>h)rY=6{iuzBk8g3~MB8Ahua)
zcAHWWpFmU+m34IjS}?Wz8MmVfYi<|`M{0wlE0_jBX(pY0u#n}`SqH^#JsnJvC9<}a
zZSpkMEUb+JMg+rKxpDtl+aM0%H0vXvblQICyNdm3j|rO;mp6^H1n!;jvz3^@iaVZ`
ztk!jq2CnVMet&Ne;fSA(y`K9D at sfltsuGia8gDAlr&D5-t^uPWmMg)6%q3mn1s%{`
zWs_`5)g$|+Maij*GQ3Qrw=GTLK--MCbk|h`LMTT~)MjZ0<Hd-LF!NeQB}r-V#&G0#
zWN>;PvW2(wEEC{FGj?3hI`DRh*70<1Nlw)aMhCmeTz}biEhzsiRBu{D_%*QVtC%Ek
zj*nt?%ep)%r3F#WlRsLZmhnCeU%mJCrYt5R*<{Yx6~weR8$}fRwumY;8^AezY$eth
z^mbe1_R8IEhsAZYeM6b`M3Fa10y;xzKJ<~{iCcwZ+E)+UsIkv+vGr3Ruz|JHb`FJ$
z7Me$w#(!!uz4V;;AIkS?9z{_Zzm|dDWp9!GS&dIOmYRe-LdlfwIGksHTD}CuCA-96
z7}{&$u9;t#?)#d^H6FHLjnuRG8(6|%y|JUL6x#D%tn at Ngo!Z5&+k;mll>dQ{%cvT%
zlk6(h_?@(QlH8z~cdmfxYH(46^B_J1F8xcd_kT;uU+&8*0NM_c$qO#po9a)vNx)d(
zXMClmhwP?P0IUhq!f2K!{?S%=p?~q~z0{h9 at zu!q?n9gB#O$G7yQx+F8N#y^U6;Lc
zE&Q5z0Z&>7l=x&e0FiJpNXB7!!4%4`)!elsAuoNNLmjlZ0Qbb2{0J3MPd`={bV;Rz
zkbk_>f<zq8^i@)51TonB#C3v#Xo76VQiQ8{_Jme+;(;J|dC7V3*8T!3>em9xi-#K8
z-c at jv>?PYAeJXswp?=Ww=eoBk%k_m(idT>7T*3B)zpUN}%mH*A6Dv!`#A+zeqh6-h
zof=5KaQ{{hy5dzT)h1wiM=JJEDSgFdsDCsgT}xmnA<J!0ank$H+gu=X2YkJj`31u?
zYfD6lE3OmtVXS|(^8{G+SdVh?2B*v$^&39ST8J$?;TglNfSyYj)O026lEx8jzY7&J
zMEN&mxWox`#&7I4zB)2GO2j?#8H|U!8YY|&?=HJH9b6#|C;c|Au8w}T6CRaBjekJ!
zB`SYV at 7($qdHhMb_3$2!vo830KW4}JU~>g2O5pGdx2ipX?h<??A-U4YZtt~Zm{z{R
z5;vqG(BL?%CpX~S<s`TB*4t8|gU|q1n9~GMBM=dTWOinB7)172*|NQP at Jx=VMHvCc
zzziK}9|>Xngt)sblrlf?P6SYtBY(Jq_IZR^(1z3G3nE_I3BgUz>ai|*mThI*1P8D@
z65$m&A$<(FIme<EQAl_!^Xvk0OEP-Z^ii9#q#~9PB5k~d5!q(f52ko3B<ST)SX%4H
zm5$>)4p8BNTXK=qhc=qMz2<wvhJQg`&R&#yz}&6W!mnVIL;Yy;f<x!FiGTA7fENfD
z2dHkk#9xNhz{%e~h_ip<@x)}#3Qt{HH~rB!OA?#N{YebWcwZ_ioU at 8!^}qV%R~Ipe
zpg&2AedEOjv#qk9u6(}Ca{U#N{DhSAs*3OXV*C?|5MULym%}kKGoO-N+D&2reeMc_
z$Li7)Kitj8v%8cHLxv|i1Ak6%9#eSX-AYONqUs{Et2qplWnfW-6MXz-z{j^vLuSyD
zFLfKIZOsF#cg2Eds&$g+;xdQOHR<I%7(-CQhgz0PmU+ESp&h%B7<}A|*vB}AR5N11
zqakIz9T{`f2($2CpWq%1l;q|=znA4r$(XE&f%W#-2EE1sJb00s=6|!xq_8TR6QD03
zN~-oEu+FO4n<0+=6_QxZ;hG21=EGSC7dSYCApH3GX?KQabffrFFBzm9Lff at kLiEo+
zd`nm6lXEngVfR5#%9~AeDIuNB3YbLJ$sRZ-8{$1_HgPKZh=72RfC7>w9#>1dQb-L1
zTygB){l`8G$1{V|%755JU75J2h*6s-G-*RvqSb9(JL5cqq}N7J)UdYPuIVOOTr0d)
z6_ej+LMElKwkpUO3ifLHi0SQ>R<)e&{RSdF58kfiu_-?{Xf=(|nUMw49AkWbPqfMk
zD_v?!$x(Mv6ux&_c1pMSR)9U~ttg0-Knkc6l2hoN1QY_&NPnCNN)=Y9t|t=I^Jon1
zqr{=l0ahq=*bb~3T5hox0EC$q8-r4CoF=;lg0tpmveT^LbxW?|BXslO<)=VXt2;b#
zyNmnMFSMO_*Es<he2~1LhGk;JZvB9@$PP!R at ou_QXt5Vg(fcT~j1v&m6sqP~h85ik
zMryTw;fimGVSkIg#xb2ec!F1`)8cX}7h?Ip at d0tsRo_(vT6!7HjWd;v+u>SrEi{F7
zz&YVt?R#it9IcM>+KMIZ#1(wA8fu|MW5|ko-jp3D2xNZ at Q+d9+gA<NNvUA~_1~~^6
z5ijY`syzzL5*IZOWTkt(RV^y}(~4eKlNvIx#-xz!oqs+2<xujAtoE(JM}`D$AzJV<
zlTYeash0 at aWksPp5GnOwD7KDNh0Jd*4zm-Xs at 1v_egNQ4lvjPz*)&9#k^&4|=-Inf
z{)qKHF4&0Qp8Art_TiiUkfR8LJP;J^_wVxX2g2eFs=-zNA82=*Zv4rD5T%>Yv}h)O
zaU>sxHGe9}lgjGCrTO-3Nw<S`pz*AQIc~TJE^ohY_}~1?1bnW5)QN)-d{<-&V(%9P
z?eM1D>8eVLsV at HXHKf$k8;Cwp_8*#*HdAu-c(moonMc at q2&1>Bg1<(;F%*Ud@!>kn
zmg0lqxrzqKx9DDvQ5<VsL?k6gBDuRcq8*Mf9e?i0YUeH`W#T3FYhG&fWSZZbjb!Hd
z*lM&8vdzd<3`K!bkvD@^AA=(8^%aR!R7{oGHi2(m30u5O=D~rgui`-Bj75A$RFx8O
z*~&IFuKT at 9t~R5~#tIi`SyW- at Y^tleFX4B)=K|}mk%+B8Ttyk>&HjdrJ5Wga5wQxC
ze}8I#e?N2AVf4PgJGwH at k33MbMY!COwpW$;+}fUp4WzBo&l{-ha_o6AsUAE7Mg|D5
zCXVek__p#CXkF{iz3Y!uy3rFq8?GfUcuAF~wcpdTpNCPgwTEC5)0O^Ep}QZ^klgX+
zw)w2<xUZ+knAA(OXj7zfS`xKZG$k at dCVv(*fN|nKq}H;npxHgtaL8?*nMR8>D(>|p
z{$4qM>_y;EswQ138%hw{QiGxAc>i#6b+(q=-uc+YlZZx%>&*eQ6;Tq2I>Zo~`Iw0s
z9{`{W<q{~eaH(rbsXGH<M~<3%sZ+QvI+9{jbp2)PNwb6;^o)7xISqOFHcxrUxPOmX
zmq8vFNiq~gQXJZ_gQVI}J8QI|8q3F6#4r%tiv|i)&b+~N0%WRP;-;YGL*4J8bwY8>
zDJWD2I_!6bmrZ)^`JTo$Pj&zO^4^w_s|1q%a*=G*H5CHkHi0RDKvVexMuY0VH)&gL
zI%Ld5$Y(@PTt?Si<HJ^3bXVX^-+$7QW&&XpzZq5e+Iu#n)OHjv(1n$(JSYTh+q9R0
zBbX|<VE^O)|F>C7eW;)7rBdSvIbLgP_ZSapMz~)YAsk=w*iyZv-y(<#WWbf5sVhA@
z>ktL<MbdQcF^!cM_BmTQ9phG>*$XAkQI-_~^-)k}GkK8ySH;_2*CiKr5r1zSce2_8
zSEM5QFg`>)Er+GKQ?pc88D`N4F?G9IeHpvC(B-3jk}0+*YXB<6Rhz~_0nw~6JSH-u
zV_~8PFP{_#<f=7Zu`E^T_BN0}_|`bhG3K_yl+0wJ!;W5AteE`(G(uepn%qF6T9z_b
zu#<CAlV at OR#Hh}bS!rZW34hW(5nSzsbCQJyA5-11BEl#^TTU?gGfmjFjIm~A>#2<-
zQBkIIVR4$QEnBvuejI|vvU8^?D8a)$Rc|y%uKF+(Odd^^9Ms)KuCE=7y^>w`WDj&n
zd)JmWneN+Y_W1$xs_e8CdS6HD$sqUAI14cEKexRGt{BbXyQGtgyMJQ8Sm^zSmO|xu
z{lg_!sIXqPvlUX|)THV!z+Bx$uwL?=lE+E}Ra^b$M-Jo1&5%oM0 at QtlA}Kf6A$AHz
zSOsG`lU<OH4dN9h^#R4)`30}tO~bX0IujaotlMC95o!2l2RCAc4_t?O<Cs2!#=(3P
zUD%aW3WY;_-(zmg&wuvg;8nFOw!4ufh8r%rVB18c*&}6U7rgK39W3y7p4n1167~__
zsO(xOKn$!(q};<QWoE0o7}4U!i~&_%%~irM2{;P^3YfjdFNMpt>v1NpnJz^tqXk?w
zcNR7rl3oJvRZ`k9Wf(KGmvfZAdQfoe$eu0=C^D=}gbL*0{D1x&_xySN?5yE2BBwmM
zN?@GnfN=MW+s})DkQZqLZWZOlCJo|e>??{lZzSA|)#Fhv#^Fg8+0R|80QMp*Dt22A
z?>GTg`S0&{oJWr at 1Tfrrj_2JU2&%!Sg?*s75#|HJ!Nzsd3n;Kf_5^Obpr4?)d}Rm~
z)mLBK<kv^kWq%EmDG^6Z!dD1VlS!+?0d`VD#{0}AoR8F=3zoU0OAoBs<^hty1e4XW
zoId?;SCSz0wLY!Cb%4V4fP*j~0=A;a4>*yJD~$&oo9>hF2E<dBR>xKjLR&X$>+7D_
zSlJ<^;9B1RLaHNxu*=|EWq#Jvlx~$`FA#_Co);^!QGd)6)Rh@`qgnp6%S=4R;E;8E
zzQN>@-8T38$P38D0cVpVzzE}mbVO&14=mV0K$4<VxyhsjB at bt*)6=v-FXaXRd5nW{
z!FH at lI*-=Pk)I13()^DSc<rX$o5%l at CPi-~KJcH#x)Mj#O$}yH4?@*mH4yq-(2=|5
zZ8%88TYr6wxTaoPoHOcTlOU_<468mSap1kOV&mQ)-h<eLaTCjwJZ=E0<Gn}nfa*nH
z7%#*<e+Q?&kq<Q0$E_Unf4xCj!(b0o7mUlLIGf0$(*Hb>5lX{thm`srqHWE{Y%b(U
z6@)Z3b^~i;)izG_>!p64#_O{-958h)ohrKX+<!8yr=(22 at iMch87^3ux`WxI#)`2d
zY#{nTRPr8!?c3CoKLLLC%oG#O#-=^>1IwxZLPE<~Dh?R?xvIJ>iW~?x`r1vmWG3+z
zD??<7jR-;@WrReg4x0Zn>Qc^|yMBT29x7p)zaMq?ELjiO^3R}d31`QY=H%~Q_<aqZ
z!GE~xqaLhkpmfGlS_*V8Thq_zAh6)T$D=XBu`=xW!XU4W#K(T`H8RD#6}rq;XeHj?
zbCr1A0ib;DU_x~KB|n_e5j+ at Z*;vsr_{#m;@(DT?l1Es(tUm5W+T`Zmda8e<<pA~3
z3iXez!EeabtZ2w#S0fJl)NY~VjyV^?H-7_>DFI~935JPAh$^a}>#2WcrkyO-i`nzP
zRb}kSO)94GWW~b-dN(@*dAOD;w2QQEKrG4JpKWG#pjaxvmu8^m<RZ^>&i1GR^5vib
zbOEHz3({TqG=c-6;I2BBpk595Cm5%009gG8frB2}^;GF!&of at CXxW?UM2bp&wSU7B
z^+w;DHPc|w9Wc1l_cHx9;&DC)b2VAmg(2$isQV!?e8wBX8A!dAh?pq7;LL#_xvwOw
ziz+6 at -K<OkX`h4XK85Na=8~s756j&ArI?LeUZ5Xbc at 4SW?VVCm%K0i(Sv?~DiQ(sG
z@=3=xr+StJvIjY8LWc5-lWWpYM1M- at yxFV07$smvS>Lw1tU at -;@sfdUOuYALMz=jZ
z;L%NeLccNaC<K%!OLQJB+<VtO=*}C6T%@1lx9wLJ^Im6t^-kca56I^GWPZ>V_K_w}
z?@k!ahJZsKLaAOVo3<HTCe|Ub17PuMS~(sT!JEc*QiDf(44JG=X12>t-G8v~f!i&@
zyofWon=SZdutpi};c{s!7OQq`)Nor+sK5T70nsH)7%A<~<R{XO_D0 at Y74xT4(?QhA
zC_~^OKMR6{1!KCZJ`=MAnpcsqH+|>yMz at eF=TwgGD4V21g7U*dV&|2mJ4`FakfcX6
zG_`y~S07sNC&vvzcLwSzrGM!NEkU9$!!~-bhc05A=F$7N67AeNr{mY%Mdi6u0o#)6
z(Mf)tZuGAgzcU0FylL*{4Vh)I-H2<=8qV|CH1+0m+&ou;!gmN7y4E#4IkAzXB{8#)
zRG_nchmp!0%1ZyW#8-4yU)@7_8gmmR5osqxS-GhH3F4+aqAl8KJbws72#GQ#M5<ud
z?w`F{^nA&OjyN59X^=!~`$9uYV_ppcBeG|=QFT-2L_#%_;O(=ge}0R(MEuO-R~D^f
zp^g|@4{^#pJy)Z9YWd6)+jNccl at tYC#8ZL!A0RZ at B+F=(jZ)4pc43>?%SW->{m;;J
z6}Wv#qDQ2gY~X*mh<_5W^s1g9)2CDv<1{1-3$3_kKC4En&zbl`+UavE-<HPzf#-&d
zp9|GvqjF><8uz;6wPScSE<afUYumGLI`2j+xRm<o6^d8#VOfJ8)1clNvb*76xYQHv
zR9YsG-1bCoysC#BNPCdrehiJbWIzs!c%Nnz$dNKNSHM2lwtv$$81WS*#HIardn9=q
z3m0!Z&@mZ9ahOBii at yaZ?7BlJkwr2MnPzMy7mzt93Vj<pn9-5eUh3zCLr%Ljl+kq5
z)hZ<pMwiwa=WQEN_ba5P9^XZ<QbfJDAr9&>p^SO`H;uV7mWt>Xqq?teFOv|5aRY41
z1!0mYeCe+Hs(*}!z=WLuu{3L_ivifqgSTgQQaP1%uhYrx3t9R5SdDJJPPp6qD&yV&
zX4MQhamS@=q>GImQg?k^V^g6CBrtF8+<$hYz#Zltv`!z=vJxaI!&;cC-TA3q(fRG!
zu-o1&E&em;%b+)>`oau0PKHGfOgXo_K6eonr>ngsfPb$xjN9u0+Gc5q%O#XpNs3yZ
zKQij2@(J2on2+j at GQeRy+KLfVB3NeMgztNMGc1N^hAG5zI=Dijoz5I}hDm*^zw5O>
zsz5!=4<@0g-0=D%zgrc~^qUN`Y0}Vpe`^GIFTac=8%zhsb=cTYg-9TligUk!wLQ{a
zrYWy1!hcvCP6~CJHuoPD6b86hYEK_^KHbEPr>5j6te+-kIPyz6_irr|UZT0=gaLG*
ztvI~*T^A``Nw}6Ju;ZeK$b8amgwglsO&eF^f at ohqq+jkNi#nL|#m8bF;TsaA+ny#P
zn#9Z*5az!OR!orTiaL at p^WCu!A}=x=CYC>VM}Jr)z><8P9?3Mj*<xN}k3V-%T at p!=
zrCn0tMuST&6Q%ADnB2!S<U_TsY1{`Qu;4&tR%NJ2vR5cOJn at 08Gt*n$p<vX&MV2!|
zHq4SUhV8!UIJNyHxTV?!rO9B_6xNcLw7 at l)H at 5|XJB#Rp3}n<im3aky;P~FzSbB6`
zRDTxck;eZ;57o^;0X0SCYWO*-MPHa-&RjVq$d5COPj0i#YADT*DcG^>dO%s;epE*x
zWkY3?C5iW*;$*!?^88<*H6Sf$S{%Zp(MMKHpaabisxZ*AEj2lUL&&-HV3fn|gid8v
z7rCwhMI3wA_}x at Hxw$_^W_b8~@l6yP7Jq*9Y+9ArQ+qk0-3b}ssCpYwYnlDyylO(x
z)C#Ho8btx>i%%^H5f==HaiIYxO at 3Y>)N{o1Lij6ev6)1`%A9zmQ5s1=^{Bujnb{v9
z?rA}sr6TaU3wceZ0OYnAT(_<^TBelzh+OKeHejBDvmXDxq;%@el2YNbai1G0jepSp
z8>LIER$ANwyM!GWGQncqiHb9oy%@eoRJG}Z$I%aWkLSnit3m2vBnGkR`|nx~wKImy
zwU-r*R||y*v96NcuSD2{eF+=OE!^ahhTz_G&Wyw3|Dr(APdFQc|Hp6S7Ldw_y@$<I
zBW6lOvg%6wn<+ at OqK2J3s(BjR+kYgsuT99Glf6%x%qGO&u>z^~h09S?aq~O(=55OS
zg>Monvx}Gupg1gM`@{eCu*rDSg&gz;n7VSPb_o4WC(=M1C}NrJA%PACVtw4Zkeuxo
zw{5AeEwfejsD%?{5jAXeUuINUtL9QIdIDv|JYT6DgB6o%cMzUTZZCdgA%BPoD<grc
zX7ZF4b`n&hAwe6v<3NQ{C>v!f8S3EWnYRgh-z_WlX2z~#yb;ySpRro+P7*c+HMTwZ
zZz6;p1E-ROU>_ip`4Yh>qCIQ<9<}1khE9h}o7WiySUb9X at w;udW^`aP|D+9?s$}F$
zNXjnZIXK8=gH;SGYlGw+4u3=Cuum3ur2eR<<a-(2-lMnq9PS4&s4N1=?`boFd0{>u
z+=W?tt~vvQ|J6xt_gcz|WxzipCLo~f#Dnr at Iup3ol3>HaN*B(30bFKQUME-AZvgc~
zEg%vF?}Ve_VbauY&C9_|^*R%%pDB7V?=#NNfU=)1c+3f at l}!^woPWb0gk2DZ4J?%%
zh-bU(qdin|r1)~)l(da6 at nk0Hu4Qc%j23|y1?a#OxQE}T0 at NO2Y)v>vxD(@Ok><kY
z7 at j!|qgzo?L5swj;|{9s4>j5Av-N3PiZo8H<u0(iHH^E&ylHm)!u-oihHs!o>_AZp
zV#qX+lvO`&i9|>e7=PSZukJUAhAPY~_?4!mR2O-_pqnvr4z)L3c|bJCDDJIP>iVya
z&FKzc-=!P=x2biC*iRfw<~XJs+S8eoHkAlIQht<Xtu&OvSb9b2ArX{3bl78${qIX%
z0tL7Cjf(PJxRg5heKm|+T=me+b$5v;GM%q~lf_k$;r8`9%76bWM^%*5UH4yI7 at PXs
z at 03oXgrYIhvJXpQk!e}Ph9MlcP%H@^d3c8?QYX@}-^}m+{xpjcJY%g at fPjnj8b1a^
z{cZ6_JI+yU$R&!@ILC(rrZMlktAM&<4o9H^I7^pO*nt<DW6Z<2^6J+vyXkYApT{ba
zxd$#?I$p{RA%6*+#UEJ#XVWiC8&d@{#4|m+HV<b<o`GScH(!n at 1=%#<PQ1U~I)+U+
z3K|jKNbeAj*$%?v&k;_G7bvn2k+J0mCyqGPJCX)JGccjNSt at rHa{ILdePx(Fr%Bh!
zQ!^*!iV!<#VfKDL*gTor!iXd32ofu{ocYEf9Mh*6=YJBt>Y98ewI$K^5daqT_sGon
zw}b{L$w7*So-9{<)`8H1@##c5yb(_`|7$27cn@~eYQd5ZKV-9YMR#+$+jRZ8(0Hf)
zb at eze-gtgYOc=~;;05rJw<pO3RnpRxDq(MXsxv^NiC2$YG84JLQzhsw18%n3An56>
z^Nb9xfPdjB*NPsy2Is?C{wKroj~{XaXnqKz{fv at O+kB}5VnGU8=dL$!`*U~*Wxs?$
zg=#a1C(a*EbK(1)Mbi-hS&^+J*Fz7RSN|Lg7Fdv at 0$%^mR-5H)OQcl;#wXfz5JhM!
zP>tY#PbRM=9DVg2RFVk#SEQ-xeM^(m(v0kWS$|xT!J}4}3iFr+n#w(LJWSPAvT>@M
z#)944<XrAfgP1}>60B at 7^_Un#^7zp;aD!qR6qj-+%3B5r9_z at yEFi+auqqhAdICgQ
z6|{zp^xG(G2gKPZxw;Dt(UDg_h at Kj$2$6#1F>_JXCR&1Il2L5Q<9qrlRD9t;`q_{b
ze1A{3`!-m-mqvmjan00&o#m at JPw8}yTgx?;oVbj$qHq2d#Q*n`Qc2<81wsA_Fafef
zwEzh~_P^B?(P53w+_Mitk#rz_$65byTIxOBwraAo_Ai#M(^2N@>B<RFJb=2UR2c}=
zN*=^*iepHlT-eQ>z8TI-AOK}-ORO4E-Zzg~M5uq?{%7L$nsA$P42ml|jfh~wm>N~_
zqe&px>@>O_c#LF{&~9|K6^gD_2=QFK^h)Z^$kL&BW!8}CFu!@lW%g%aQVK8H@<@Oo
zhZ4kEABQ#8W4ZOjb;z<7?tv)j$f}Q9r*g-z>6<y*!-6DZ9LIXCU8Ic++|7x1N?xnw
zJU4%ec_}Hz>nWLsWnK;D at lW>B%4H-yhi}uqX%hGhAl3X))b}4Nb#iZocB<xa+!xB?
ziCUkueraQIG`+Gmbt%4?6UmX6j0b`c{57?MDW_b@>=?nkGoa9UqZoJcPJ*fs+9YKT
zxm!iwyr4eVV_RsU2?o!3)9*O at 3&08ka{Pa~;<IS{NB|Ldk%=nEH19}6=|^H>PU$Ph
z?O{Z<-6?qSJx`yJ=n#>;W)RU!?VhySiQ4cQneO#eMkt>WT|_WmZ=s!?=)1YlF!JVk
z^re4o7o-AmZD^F>^WI{v&Y56NuyAn|Vy^nR{d9K at pk_sEqAtaCOmQc*8bfb^?%#iV
z8ueujh}(}>a%olI)(;cIE++RJ7C9LAcP?fUI~-2+U_|oU>bR+nIPWMS{mNgdnZ at yC
ze<3w=5J_1CU_LDlaI_sb^cz20j^$ZQ(<AL`1eTvM!!1YW8nzv!2~bZqFQf2G;TlX<
zwm8we##1q<v10R)5<@bFJm^ki$eMp9qC8X03S~Ke*B`0`WQtfMt)^Cml_Vv40lYc2
zAeOnAKZp8XGNUafgVNAJCompM8&&{vIC(lJE{2j#5H<sqFgbJO{7{6QZz>WZe9Y!M
zKLn+yZiuJ?p&J}`S>jV2&VfX~N~j5$-OmpS#VVx;9&T0XIp4c=lY2_dFtUHT{9ZDN
zJw{q_`f6t-2(8kxm{iVnrrmd6 at A4rxrCUCy(RMyYh(8azzR3}IO4+okvhXN6(b1gS
zl5fE8Bg!AyfUtJr&NSvCYY#BpaO{*19<Dzwn3rh*6QHYXSV*}I578VS)0xQ7<nlp=
zV7I?bZXrv?1DPEyunEB-csGChwyYW;LJkuDd at ENrs>10V$oa&9 at TBjM%>w^+s89_+
ztenwXDduo at vlEt4yO{D2>3Z)0$Eclc6wP1av34>oP1r40-Mln|g-<J?82a9mXxl=G
z6euGpOk!xyOre1+w_MQ8?|OxQC{VqlF1pZSw&*@kK at W@4lUmvoB(i at gdXk;`47(iM
zWTKl-Awu$Djx*NmgH06I^BlT}IK;)_hu=FfyYtwuUaW?bvl)CAR?$ai-TVaEs%qOB
z?}ul8NlcgD)SD#x at 8#hSHXx{BOASKmOXl1b)Pl8W!EvUJ?J~Ixb0aP?Qj$}Ya%Eth
zWK_VY3922Z#06H5;Z%Q`bS|e0?;mzL6+TjQ74wK_D-(CT00NpH+c%mqJRqU<ym){0
zpkb`&9y0FHwKu^*2wkGU%}yHuuKKCXR^-bE8?@<DZ+Gy?SaQ?kZ8o`jqK%z2l6c7p
zYk+t%Wis1&$|l<R2Sszc#*y28WMTgIl`GJb`mR|SJy3H%^W}f30MQ{t+JmG2QDfZv
z$wRa5S`r3gD-hK^%DsTG3N4`o$ZaYZZyv*wZW#}vw=Rz%owQJ7#GM0)R#B`D*u^Qn
z(<@457p5r8c&>cAPIw at G#$l>#_~XG7r2R=FPC;2EYSean<TnmV<6q-ptUodE9D<Cj
zC2&^6*C(KjwZnf#`2Qs at -#Blv<v_(*(W+7OJ`oSa+GaDlOyGPFvIG_L-e|qwLp$0f
z<SdZ&VBeNUP4+cjy42(A^r at T;pdD;ZvGx{*1#bVGD8D;SN`jFr3+%QN*2E^Pg*EYZ
z>Fh^N0%05I?&*;D_>6rN*B6$$hnW(BW1EW`!AL3<gIj-sIAat=;cYFW&~s4amq)l+
zp9~p5>c(rz0%{mIRZLDfXexFwI=^@ek1Y!yMwCJtNm<ojSu^{NE_2^wNQHNJgf6$X
zzcponr%sdn01YZn4gH!94D!$CjuG+^ujxiy at wLR4U_*5&!H$YbsMG(`0zJY_MYV)D
z3MI!cf^UDD#f39F+}y_o_hqmCUm>ySnQ1~-2*ddy)#06<*R}Ex{tPF~Lkk#3oyEvE
z87)=QgUr8L-+Qk>@@*~rSzXNyESWf=?1AG)L|s<~o6U&jqVS1el~M0IqH%DpAW|r6
z4{)DrwB at t2>E|~@ceKW>pmo(<Jko>4qT&c3w;+Gy#uW^;Iv2Q6OZtCLEKneni6oUF
zpL^dp;K9_-nBfqCL4UzBo(7*_SKvc9-x#Dky1)$T4%0L+H#j6Udd&);^pxb6sKN%Y
zq1JXc8I5q}%YXU)qVH{^(!;Yt$maCzs|T}2xoqY7 at G8!*&|W=5YeUH~*BV`Hk6&xe
zQ#pTQ0SIt6$NbLWZT at w=cYw at 4LqbJ>(#KbvHym9*`w>`2QI`J-0YhA3o_GvpU>wjN
z#GMw^qO0oeZ^5SoYCMTe=cB-(?d)q at K{zxjYr==vJGP5dpt~)87l((|Q4-xxRU32-
zAxRCG!){BaOe4GJxq29Z74UjBP%wBYFa&>{!>x+1+=TOkd7e|{c$+ at Tv>%UMeK`^c
zJ^%7M+m3?-(_4^8GS)xGE_3l*YY!;G^|CPm7E#9rg{{}8Vsq-|PkGYylos#{E(6JJ
zDefTYL at K6mDk%vhkLzT+_f^{ob!!yaS0(JRrScg);*ZpD4;6C3MMD5D0H`SD>$!g=
zk3X~61&7B}Ds>Nt^**Fsu-}ipUN1T_M9c9Ft&XWt8GzcV_zv=^^4RG2lAEO0Rg|lV
z0X-myt(R6w{lW0Y8<AKwpL&x!n)6c}$bstfY?Tik5c1kNl5p%am)o3@=yRV^^h*+t
zIq;t^R?+<jt5R+LTaN`u5Kc4`#hQOG1a>ru&ioIlLK(;|%RKuNPBuXhTow*Y>s5w_
z>(i+4t(O?_{(BeyW%P~zFEYo|#<&)Qwb at iRy8G1eZ#9&Tbct-otE%0fJ*N(4CDCt|
zf`7-oZ&Zx$L4tgLZ}JwI;XAl&mH<fJ{^{Tblwz^E%uiRD!@mwpIAzJ((7AsI!4(4x
zED6eS^qFtTARJ^dn*%zV^cd^T8wC!z6jtR6+Y~&|Bea!@B!X0EQZ%0t2($R<t;Vbg
z{{PMK at ji#zp~8 at z^Nm1 at mfSCQU|&3ByB<8oMs7?o0(Sq<@s5UJN7B}Cq22Mc2jknW
zasu6T8Rh;cnCFu+aR)<EKlp#O;9N_+e2$l2Zx1)*O<k&tnb%U3zxy$TisXzewS{ky
zi?oW&m7Z=<%XEZcS}=mDK)Br7f@;b8-6V*MkzLGcK&v<G>MqLf=!+gDd7qZxU;}5Y
zE*>`2%aN1McRb(nIck0)>wezD3)B6gI_P&-SS`W2!@Q6RKOvI1ncsf`I#im^y|fJQ
z>E~W+X$|)Jp}j3egFHk$EKsZ}15cdaGHoo{8t5;oy9R3ny;NdXi=j><sQZz>n3>C?
z1#=ccU3zSh?hwwkqm`08^iNRg%&);k7nL;v7OO(z-Z%OnD&#L6x~uwDP5MMI*}!NH
zt2gD)YJc%yJPV>J?`MB+Bn4f{J#xt(P~Ea=rh=IDVz`+Wae&u#VUQN+!LEp}G|^xX
zl2N!+ at PgW>AhL+)4iVgbdIUrIWIuX8Z}exKv-mAeLt#+`_V&F|&oxMItc_<Qt#d>T
z8#ny|<oeJ8GeB|=lU+{`%w7$)JrvQkHBY4~(%Fr9rq1<cHY$H>itidOtv3rcW?2&Q
ze4p#V^DmNod!%EK1kQr%4br{Ga!zaJQauBTv1mqvMhCMS&|o*d2T*O6!Ov)stSum=
zlqgECvX?hz<vaR)TCoCah$5qcJ_l`B(4Q_srYSah^V!mIm(f%EKYBNShB{=i9J`@N
z)yVMUXv`|3kn?|lkys`gXk*z|FL8JDLPFs<MJ883uJ&d)*t|}R+qY($&H(^>QbaE1
z8NSvWjW5|PzE=%>nG{>cuE?Sj6Xcq*B$g5o^TK~bxpbcKxI#@w6HY}U`R(tp4J|@#
zQ=J}wT8Zy|>g^VWdxBS at 2d3NGtGBqRa5y_u=gPBtc3pq43LCzOAWSMStraDkx(u1}
zQvpy$IEdcX^5|SVEH%w4qtnP6fWZ<%3nk7KK6r9k-Swd1YnyX&R^Pma(*88j^jD5>
z7))(`OQCiwt<alBxl33)wlxtU81Tj-c&GFjkvPx5bG at K6dbbxsG<ssM%xw%a(OUe!
z{YKyl0wRCM?km!yqsX3b*d9lM{79RqE)iBT$e at n!dM2bwfNm!Q-D)=7Uqq2cG0Z~L
zZo$fVxH3Hl7B8Cdzm0Ue6rC3+7F>W1c!?Fti6Zj`qOv>^S6Afs8--kp91SdZ^~@k1
zj*!*nemY=X);H2dXTgPEFtx)+JGdy$5MaD+Y5jkt>2B=pfu>4H)sWEK&vVyppe8t>
zhQRmw0pjF{fPPV8qd|kk=R>h-dPpTo)nLLciYFk}c=-)EVV$Bce#P<Ker(s>Owy$A
zRjq9^x*$BN?U^!immAp8uFSawln)yp(Ml%Hp{Pn-=Cz44LILH3tI&ecfE%@6yaCXD
zpVxo%k$gIsk!I3n6w%4n;=6^I+eGlc`nXPaCI>h1udDoWHnQ#RuRfPo{Sh-*O%W(Z
z8V)Od5T<NcXVhvB2?y~M?5RCs+b2!+5*LUnqH~WOO_+)M3d?EN<&@2yS*TV^Gqw_~
zx4A|kY+yyNs)GF7jSS*V8ieyV`<<PLuMU5_=LWVL%{JG#oJiw=lfUSj-2E7i3lfGn
zB0fsSE!`upkH7-;0Oa0wuEo-)N7P!4)RSqzW|ty*mnY)t+~x^l`w0C0ZlBjlLSWX-
zjdFIx<0Jb$xu4C_LwdRITx1dL1I2Nhp<s}+hr_wXZq}HPPMK<08H9=~vy^KMDQbVU
zr*Qax`4260h-ot)yUAPzHoyZ4yF%TJNc^3Sr|s4dw+*>6Tn9%o^^Zvn1QJC|o>V9;
z({!AD6nhmaFW7Jik!Q$2?>oHXvhOH*6l=XK6K<OJ<`JPxQT-m1ZB#L#3$k0XCT~B0
zkMoMKmyb>COi<q~Cj=IW1xzsg<obV-KrCCZm5Y^It}t`eRk)H(7sKO9J?K6B_}Dp$
zR`JWW0MZHOt-#hfda(>$Fe=LBwQ&M}$HnX(`i`nGcRCECV2f}tont(LtO+GrTVl_~
zK|zjHHAZJ#TO>|>J_fPb*F;c&>LBgLHZay$Vxw1VME`djH0M%x-#g#%J_dgigkf84
z at 1Ft%P#gkGal;v>a}F#2z%(p(44CGiSMiW&dsd{l^LPjFiUOCG(JdBj4$`^+{slI~
zevGN2zG#Zj)A;2Ry`aX7Fh3a^GTchS!?!OQK9RIw1EN$D at o`!Ifrna+yrojJs1-k7
zUif{5W%lyqHwQAhq<30tbiRKJ$1BvCrOp8i&}i?+`wVO04J)zl|B+2yxGxsD3Gt`$
z0R7t&1Q|1GYY&$1<6WtwrS at 7uj`;fv&wA3PY6EDrgF){pEsAm at og(I02cHGrb$9z$
z7U%Qkhb~6iz at UEO8N$?B$4!xT10Vig_qdv`#$_m?|0w^=G1O_$^VolwJn*;P at PI0t
zOaboF#<)%JTfCyPA2x4<4#??7uAT>$lgEpPeQ=IA7X#|=*T=E(0IfN}tKuK<0f<nj
zN^C-NvMPY_iX1~|*ASr=t9XAO4w$`Q7-;gs9RWUVM0w7pzz&?QQ&#&8_Dl+qZGyam
z({Zer?8<{Wkv%IC7T151og2gGJQOr|?~%i;(OL+KugzW}I<HFlU%Pf6ygwQx{pI~v
zSod9em(OFb3W;V5!E)iCaLBat?phXOW`YH*bb7r}yYuZPEVI(OE~<tTF>r!1$>17L
zh!G!-M$YGn-<YB{|5=s!Q}s3hAAiX|gMbwn;b056oIvOFQ4W7;rhFU;A$sbq at 3sGG
zwC+3Kkd#NjwE8!1*W#fwAN&M`o(7E>vjobCAO&Um*my#&kwl%RqJ*KDfuPOp;mlQ1
zoav|DFFG3mwGExtGd<TI46~UNL^KY&8$-x?GtV0gRw%rvehFj%g&p2*EAtW8Wv>;#
z3??6&t<XeG%2t0u2wFow>O&qiEO>Ocxej3X{eH_7Rpkb}>YCc(O8g7ap6~W{K&qwN
zoP~UC?g!6HLg#}CHitM;!EbYwRvhX_jpy!TL-HccF;O9V5=cbY$P%IL;aFl6fa+Jj
zYIy-xtgh9pdfAP36Grnsg3hqO3qT18LauMV4H`)S&z*l)rzk-~on{{C%tzaL$eK+i
zV6U~Wflzl?-=6Sg$Z!<Cbpab-0|ogxE-dL^xIpGw*3W)<qn~y5&(@Cx#(`W8B0h;r
zm0J%YUOb2Z#35R-W`va*@Id?d@|v_ulxwS5-A(+}xCW2h0KXW-`uLB7TKZvztRZ}2
zF$F}VhcJI}6Z(~0wd(1SCrBY2YUDrme{q&C*<Ni3HzBfbI^Bzyu`}fVGj{D_xgb|S
zlH2c0h$M^&5d~u#cy*KWiGV*U$=L>365{F8_k#a4R$3VepR(6vJS6bD5cg!Ht(qQ~
zZm0?c`=Ha$*<IHH(a8F{CMa`(Bg1xRVO_mb7H at yWokZa*+Lf#CsyXL)52;X=vy`v6
zu=hJs?;1RS47|%6E{h4Qp_d1U{C6GFaMRfCS7s+UgvJP0-rzJDt>w$OHKGedHLU?V
z8x_-R&O76-cNG8+0p??GI$=)sejdA=C5G9g;zGcdW31ZADg??L94?dkDhVfncZc5s
z*;9Yr&BN4%%Xh}Vv1Zw?4{A;m0awSI5nNmi=MrNecK~zWA`h1Goz+bn{^d-#OTjg$
zZS;1FCTt&}Qku<tT<$qB+=al?I00duR9?>7KoD<q at W0Htt*YLHo%MbtoZIMrya^qI
zAD_(LXmfj{q_`r|LFL at xg8>14p8bgg);51IQ~GOx(R^4`8yrZeo1X_0qjX6W{$Alw
zZ+Bxs-Aw at i|4)f`E4Yr3 at gkKjhtwlP%J$~nFFj1uX3g6Xv5-JNV7?{BibuSX{&ux=
zCG+dbI6oze3YR8doo}to`RB;pf({iD8z8q2B4;!-m0HJ`M-fEY{!fZ}tPmr#l{J6z
zWf4`rxs-qJdb0)~pKXDQ*rP%nJ)8Gxk)y4%#dcvN`HeHJ3C_jZigCy0c#gHA*&_>^
zpc3PV at fu}<<nsX56ZB!ZX`Iw%3RyO;za?rsq1J*lhu;~#4K(w4mWEFwB%!-IRHxew
zL$;tFCR$sfOb-yvX$P+8oLynK*@%Bv3!L8!?ZI%={I^MYh-eqvt{42{p7edqk+d%O
z*VP+*2`jmu5zLEUgR~aL{uqOh8XXm`F;7cjjzFZ$Vi6TBGdaypUdRX+!f<&IiU`!V
zf)eZ{)%XOP!;tS(BrNtlc*fFxz(oS{lGeAQz}nHNbk0(SsuG7J@%6Uq&V_&eKqh`~
z{+h4{h=sF}0{euTeWIY)4~lHu&Tb1?%j~hmexG_;3aS;zM#fCc|J(;^FjlVu0p~(6
zZ^t5t!s+(R{X%PH=xjPM@=Td7M4G_kP?<lv#69Pu*#2|#HO(8AhSKc6*PTAtn}{dN
z1ybF%<6hp7dNTbp?DTu2D8ql_G!ct!Zpg7AmT5OuL{~wJp>L+Qam#g at g{xqHC1Bu&
zkE&*0?uQ^A&2bA~;P}F2I$Mgh=q2p7ECtjz|8M+gP;{ct()IL3MoX^-yDfMXMO|(G
zEWq0J8l7b1tIB5 at M&@AS=@lo906+|K=aA|nI6nsQdeyoxqjA<Adzyb)>7^H=V(BK*
z%HQne`&;8XPlG=6qm%%0fY2}5-^9tOIDMznb6B4g`GEC}D08KMi}C%feV^)lP?sbx
z4+uw)VHoE(5qPaKV^^A<Bt^fbiHZBiL5?E=^VrG``XG84W?5jk&u6&S$n3aM_UY&v
zt4|-G1_2z#^tl(w24;Uf?dFitftr8QV8Q)qd*927T<GG25iV)*tSyO9n&e`Cb+|se
zu>`Do29m^qty}!6eqp^ESL#ZQm?owwcUptj6CGwI(Wv8eDb*;u67L?gJoa(|^TDp1
zd&jrx)5%XY!7sHbA;$nCc0)MDXsH`>>N!`|li$!amoQskpjv+uZhb`IFi|ABO82V-
zK`OvOdD<(UbY)0X$X<k9{0jRcIiW9K16``0i}TY^qMVre{N4V*@mk4O at B(g>Il;|u
zA`bFC))Hu=RM)(~-d*X at EYm}gRcjmJKonjW?~yt9HpqR=!hi*(Q*s|!+U at kGS!VlX
zA=bI~A+<H^zEyv(B^-~vjw7mJ(Xl~3Mm#C7IdQX275+2Wr1kzPo12+PeZ`<tThs|H
z=@Qo%P#e1#cl|cT&HDf0*)P?lW%0cL6F#g84nnx2cZB+dI<xh#^6G%)ekM=ppb0*h
zC_rvU*>6<mx?)mU)&0rY;e<LcCRw(3n>6}-8k}$OdQ5*!7;P*$#|=rPHdphKKrIEz
zDbR3shfLX0`|AgX5i^f{x=rhsZdtC!t>UjfIXAHRRvm_*y?A<g&MxV6ui*jzjFYg{
zcR!ahMK0{_#<CWNwz|Gk1r2q6&O<76$o?_DthGpcGDqwy&vk|dpWl%CjTy`uw>`S{
z*H0*@{x^RCVv at 42Zv)9w03g_*GO*-b^>PC>f<}oF2<PvqW?R(XiJhyTowX2^Bv*aX
z*-~k}W{mG9mTq6Gq7d(H8nwZRQw=<*CecIKoBf6CyMnpejPvxHLNneDRrd4e<Xh+e
z{p>aG>SJ3ZZ~Id&d{S{trKtF<iT44|*v_*N<j#LzqRy at gRsib)Hl1u%(zk)BDc{ig
zlAu?~;z%hQ5~LCkdnxJF$ZX8)g2DmROcJb6uFW%}l*jck6VabJWi$AceY&MiB~K%u
zYrm380&~A_zf9)uX0}a1MjWlMfRxx1$sbH!a+T^?Ex{$}-5fHFFRh2KaqI at p(Mv|@
zdwhS&w~^aKK(7(0I%#at&zi*1>^M{E+|_rJh*Fy`ct(z>9z)mgXgGmVw51%pSC&ab
zV~YibKCKdC3!R2*;0sAy4}i9S*`8OB)NL_GF}w}7;FBg;_{5@;=Q~%C^W_}5%pKFq
z9S8kN<_}a?8GjuAjDB+bJ~=85r@}BRJ~)5PoDaf7cu-%{Az%iV%~H at l=F>9+g at Ol9
zY%{3v2sdQy<Q>3jotmdmDRt!yyu~xgJx7mOtysL#B(!}rr~kq(xOsOiRK9({Qot|^
z%-E0-F1P*X|8z0 at 1rYL(jMsEmV7%lhRK~&mHkC|8JHYLlz2y`)ji*OP?W$Ke#r%Kg
zy_+1v$A?l!Sxn6QDjFO39dR^jsC(|9?toxYhns5`wA^sJH<UU<{CT!yYRV}`Q-lVb
zM=EL|=0k`n?vGHpCX?!>&NVJD0&K#V<NWG>;VlDPbxIVq;<v$kDP4wdAw-9ZIZ7?i
zEqZ}K at NHhh3lg8X{#>-V+>b(b at w9(e#~j7~R%-SK3Z-YviPZWoI5`qvH3|`%ZW~Q8
zk;$#V8+~{Q6+M98qjZ{F3OsW9!Cv_7_YD_&&lJaaACuupYeq!GC1HSj`Pf~-)G-`A
z2w^+$h8d}5M%aT&S3|_)x!^^dGJqHF_FssLN)`B=ptJ>{`MszBRiUD*aDRUTDtd?Q
z101L9d~GBLPiWsT6|6Q0+aA_hQMaLmjUx*QzL#u*8Ge8;+2$Ueqjy$7mrISZ20cg2
zT`F<$v2fm%%BbcIR}dIi`riR06O!j6tU)8TIUAj(`;=TLe?hI^=;^Ix6>OSg(A=Jr
zwu<x at j9~u|RHrc+MF$QzL7#tIzm`(u{{sH;Pw7Ssp-F>Q+DsHr9_os;_y0s}Njgi^
za?rG%=KiGg|KQwH=A>x^ay85Wd!999HtL483Sgl*mhPFgEaxh5&^4HeJr2k++TXSX
zPTRCi-V|%GToh(pv at iUeY8Ab?ct}6y-6WdA2sGSN-#30Jwyql-l3{=9zRnr3;pvPx
z at CS8EpR~Q3Vvwg8j-e6)L>S-LVaj3-bk_|J_QZ$+xatf#4l2l$waHCtdzgg^3>OGH
zffPZ1s7cdJ(7)YT8~kx%4n8w-W=01vJsETdao>mSN5OPsEl5|{D_qryV6l*{u=d3}
z0d%vGe8$;mMa}X$s=|N#U=$aY4%E|xz$FTNaZpyLV#_@%^CFXuMaH_m)@)TQwJ)+)
z`^ikzW3ZMa?GudF^FP+)jG)W|pLYN4{Xb`!iw9jDKJQmw<!i3rI6krP6ks~jP^_$E
zL^DdgZ+$cgy6e!T%q7#{5%C?uz3Z#{S7GQ)S~pY5Aa;WD$fAF8J5c3I|8;=f&Fh9m
zimyU_M{+RlaT)@B0H#=wmz-)A?SL0?yfynakS4IpNI at p5dfUaB{O`L~5iM)@@V1T3
z(IZ`D`SW(|6Clm3*B`CW7TI1wBfol~5P==|!ZSMzJ_Z|!NIrX;2?>Lh%p}W=W`B?k
z4TnKs;gyYAfMtKO`c4Rqgev-&`_Z&)>e9wl|F(r64la3gF%<-TOmgAGw7K?sK&e%k
zMmRb#faeidcND3jkFWSrp#R}Rt)Gp0TPv}JWXvmOQZCIKL_z;ukZl=xn0taZ?^1Qi
z!?H0ZzV+fya%;`QFbjfsDZ<;edY#bZz2fw4Zp6h{Yfyi9J7{eH=zH_nfNcBUoFP;&
zdhIOjRNub^!UDkKz-ox+982q(9lEKv&yVmM1!K<6`r=YJ#bbRyo+Wj7zFo*yZ2-y$
zk-PO73T8eXZxx0spTDJR%tPV?G_#kb5tKKu>M-l!-_+q(KZ>=RuT15yaz^r)l4eEj
zSOwJC@&$hjOhc!Iq8p8QK;7I=gvKob8(Qmu@^9AHSovt;ME{o@##@!mOul?Rpi9^i
zfdOnu2L+!;ukcxLQR~A$Y~4OB1YY{b+Y_SMHv9p^7M#rCD(=)=VGL}!nZ=^oI4X#&
zw`lEi<#bB^%~#o8cDtj5=O@`psgpE5rU4E8<o$nZsjUm|ig}w|mxxA501oNuir=R8
z{}CUmk at Y_N6kbn?pv$<gwyv8|a<KNZ0R=iC&ax^%Qyvm=TtzIP+B<gNr>k$lboMoY
z5$)UKpN+={5E~n&0iIBh=Sq%<YE`kgkf-#jJ7hNqYw--9<~X!?{_kZQ>^s$gEFCaK
za3O!@HRgg}Ne0h)A;T}%0qV9-Wo)UQi^(ZZKhAL1!*gW6E(i%Z?zEJB$+{}OWGbj5
zgt~|asX?76f>(Kumjc1sJEdO7)%a2pm*K at 09a{rkr{0a1LB at E&q_w^*B^`c^QgNqD
zXI1a^vo0lEdF&s{Ro at 0B?;hy(%O&%F*^z&dAFlooa3Jz!W7$X*2q3Uh+7)px|AbGb
zv8;lJ=j_|5-?f*f34F(~9%I74Q^j<N;(y_+mR3!GpFB-YDwV0JF(0`*L}zClXM<I5
zoVzHQ1ArFtvx+Vf`APxDai)p1EJ#VJX7M}_imKq^6gDoHB2uAbCEaYF<vJ>r2MB*1
z at KMh&6x*SaNl_zps9pnp#-dcj)S3M80Q41>YgnB~)34OCHG=GaR=S83s?6xGnyEF9
z38Yhxji1b1^idK^|9>XbnPBPc%V2JwOmt9Yg$4fja50^+tP*r~U^Zi!k9FbC1~bFD
zHAluQO4a?1C at vwWisY%r4nXYY(bj)ee*kju at Y`y<ycl#1-N#ZWmg^htEN at Zv(k5zM
zM<3cD#>M#h*~93w0J~7|ar at moziQYr6!CSg&N=~D%0_#PPc`laf9c0Q=@wS$D^iPs
zc?Bc0&ZQ~SXM}+89Gg1dwaXCT7ic|K9~=Jslz`5QnCvteUb5^7I@;c{wG at 9FaJdj<
z2UkYq%oX?byCshw1aSN7EFrsBNUj3@@`hTX*z@~%nu>^>%(RHY>s0Vjsa&Snzm`fX
zz<tQ4thpsHkw#;j=7$<cp$&z6WNjk%NTGa)yTGl}vA@|+LQ%#tp7)UKwCs{^!R-?h
z+X<EAbw|q#M<1_5hH`Eyuk3%2z}XcKJ&`<D)*lvt*rMACRzgR|gaZ!a7ojf!eBs$`
zfQH}TLEITGaB#Ud+aTQa3^`9#?xP3B!RQ{N2+~eN$qWY&#ERHjH4*7^P~^6ST-5Ye
z?DlzZ{VC at Kqg=%D9ob!`+aqK~5t(3ASsrzgNhN5pHa=67<rIFv at MV9jh}u|Z1LXwT
zj9HENE)LQNbwfN(y<&??=1#Z9s(Iu^^8^4)no(nL;kVbvIuJx<&~DsDCTSuyxS_aF
zAhJjYJuSiMrh|!#7{q|s0hH95?<si-3PMA4r0y3l at NgL}<LX)Lsxc1)IFs}9%!jRf
zb}OfatKAOJbH^LloECpq&K^=VfoT_s0UTqS)It%$jzVjT=y1NjDvEkC!VPH`+<kk3
zE9|#`E93aL&4jF`Sr?gA+2zo$F}mhCx1J5hoHVAmeT7E}R#C^TJ<O)Ow5jLqs7M;W
zO~*VUs2Yg(1}QYcvEqeJ1k-$B=8f5mURq6hK74}kU_WVXV`_iWrxm4j`8kMwjLe%w
z1%$PW>~M(M`GMt()?G8&9*)K{3VWlNSTU+p15pUmD7A!(Y;?ZjGOLI?$<n@?5gPu1
z at 2A|+3|OaR@^1tF!(mQ8`PL-FNy)^H39u9L;YyZjcKTqyN~M9c_8Oy-fQB0&&qYL*
zrCUHsNFQf5055;j&wcxJ6yykk4O82tU5fd{H*@0M_#X|`(BhaqIs|Xpos$CmRw4nu
z+OmZ%ABt5xSaMjHTGja5g`b5ZgUY|+;T7}w<6C at CCKDD02pRsntV6D;j&NU+;Z<f{
zOkmDICgH>(_>M96o#cYPj#*GUTk}3bbX^@M6vSlhKZbuF&+O5Z3(4qkbrUEAOeZ{C
z>f|$~&I8ZE)z^u9CQCo at M&?-{%P-k`Rml!MiOJ<1<>29Y_K)>flwHAw+KBcK{aHyx
zhH~AYx@((ATK%ure|_dqPM2L8S;`4p6&{LQJ+ABAsj|p#UORqr)+t(p!n70u9xrV@
zgps49#uI<Y(=g8;!vG at MZg%9T+Q~!I#}zqJQ`xJGQT4mZ^-q)W3GhXlgW_D?<_UrQ
zOyH1I`)&HE6scyTi&8`tLa6nYufr_1<523?o!bU~D`xvoOJxJT-i5h{lT1wfJe{*8
zu|D5wO?)V3x}t&YCwO4Zn)H0acrP at l7e_p2(ByyV<qMQ3Mfx}TV?o9IeO|YjNI!^L
zSODG0?u at 2R%2`%s{{DU#XK?R8L2^zkycyqF#i(A(qc|8Xt&YH!*ktQigI6VPtTpL$
zZQ*<ZUgc%`EkG;^s=gIptdZ^eY62VgJVU&>*JzLkEuT at MPQHlY%xS(L{J}rCu3%KE
zq6~kU<}Hn%a{ab{GY>_n6Sw4_yCX#Z&Ea0l&frkens<JvxTSe}ZnI?6l|V76gqnkH
zj)y$7uKn-AZQt;o2?g*1mwEMam*hnOwN`te)0-QI>MJi=3ht-bUh46ut-9PvHJh!?
znjFVcxfOF_8r&yta8LhpRF0}<svYN at 94dcYluy^>QaqjGvbsH^7w)}t=~qP5e&y at y
zpbAS0#EIzBuKxc>2<0wU8jCxZNzRQGov&eFo1WOebXj6%85(~XQ>iQ)In?Kx!8O^*
z*Es*JVm(FBB9-me#wX!9e~3GifkI-fq1gvOwPD800?wG6s>;xKZQ5O<tmR39qKJPw
z3j1E+ndPEN|8W#E8w_#QjYT(G1*O0+mi|ta(!@onicPU3X(XHJFpO9ko0j`M&Io|*
z=_mJcsdoXP_(3^*bBsb^RzDf`%oKs?w8QL3e-F~<TkadpTD<BOMhO_lz0D at Po8}Uz
zzT{%sWyY5ms<Z$Wlca7O=`lf=w at iQ2o)YEY at w;g!m;O?^1+GONh!UE(j^-+T2(1{~
zL6ZdSvsn|)lDWprLTb~sh|-w`&&%Z863V>IuAnTUmf~85<Be=J;|31po1U849Nhk=
zzu|Vxwvu8sjFnj8UagiC`yI7;LHZq3TggifHeP3CZHzdGXY2zEmAY~jR8W6l0U1&1
zlv-vy8HzzU&Z`9^7q(6{2NR-IWVKB=RL&UK_hhD2B5OJoyL%v0%QWPqN<~LcZ>q+7
zi{t^11guLV2C3&%wBKxQ@%?Rj`t2=>Vs?WaHyAuNCdxDH4Nr65s~d}RiAr>(rHXCe
z;9)3;UX&gznGrwLF};+^x8i>t`gHi9LbHqN?Qy{=CN5Yw=u&|)j<^q$pz-fYj#TaR
zLX{mUN04~6p~NLx)YEf=-#J=@YkoUlj_kcb3tEeUUtndmPt(h$;dU#hJ;I}I&XY!@
z5Zno2XY^S6NH*4fwPp&-!y-7pteFl~7{OPo_R+FkT`z_zPy9k_b%lRl>;>q*tcguJ
zEMjFE9;~*>(h`(Y&cZ<g6|Nmk<Zw0!4XhrPZtFka(Y4+mT=asb2ZquMm&^a_(xqlR
zsTlxAhZHuoUaL}4)xRspq!W&L^-SR~c%I!H>tVPUTcO37#q)u)|I5?bp8w{0X+h at w
zU+K^~Hl}x;Xd>$<%piXYozteO3UhFpGUc$Me+65Mp{J!6-tgeDVx4WE)AfcTKt4>v
zYWh6BhKOw1)K4_^vymq{x8J^AU--#_(9w$R1{A%h%^u*Tkcp7PICrXi2U%>vR4vEm
z)wLzom?}rXWVI7;2>fNDl!uLU_4*IoANoo<wd_a%z;8O=&q#k}v)+X!eLpHXHJWBm
zVy@`Z!hzKz!Y<?7fP_h4R3O4R?fTjO6Fk at CXb6n-QS#`F2P+h6cCD at E<%X<a6vk((
zuUQ`POKM^Gstd}O-Szg9F_IsrYqdiOJO9=q`bphhzDV;4(vVUdD at 3=V;2OnsbYsf-
zF}<ty!M%f6+9iKUy4E3B9vNyYID6C;Qo|*6mgL)ssduJUdnNclJA_8+KkC~b)Ilh}
zP26F7jPzmAgpYyeZAE1zGMZzms6?(lQL%xEx%FY at 18D+~BA3O^6GPGfR6b0NNo#^G
ztc^VD_Z35)W>HV4xPXj205d85fcOyI!I|N5Z;!~ZWki3ZZ{#L;yj#&qaXR)zp2{YV
zjoS6AW at +c~p|VAqZ!zli#_hzXozsD~ppklYv(}rO$~CdGM1yK_412u5O)zj~mmtrP
zgh-jnW}+4agn3{HEh|7 at 4)bIt8Z$7;mkDO(8^l(3=(p=30c^EHO8bmj56PN>LM^JG
zIi*_5 at -u%7Kc7k78f<!MWBfA*=A~w9ph_0`c;gH?n!8`!yjmK+_zj$FkOE#7(5+i;
zI*)3n<9T|8y_j_1tKYeSt1Xq~BQ`8;PqzE($dxhzSym_5%g_8rbOZoQY8KC4+;@+3
zIWeSq&R4<_SrQo>w*OeFp=RMUz`^OsGA<&vBA9<0)gfn{eAF+}VLr=kaF%ye(dx?F
zEk$>XPBViUL|bl&svFnr{m6m|Hx`jnySVzuCY(I*o^9`QuoYy^9(F<pg>!uz`6bAC
zoeJ=Vc1mM|s5Dhywa5PisXG-B7G-x%EF8J*32lP$JQz&Jb<Uw)7`yv9#NeG%Nf@{J
zZQ*~TFQ<6I-|QU(^}B?$vi}+9TQxrc%%wPUVh2CdE&tv3Bn-m0XJT3y(n*8pR&mNQ
z5syXULPCj`fkP9#T~Oif at gK9rN7(3HUP?jU2*kv92PU+LwH5IF#l`l}eXV3qz=ya;
z*pP%d^XUiyZ;`+dmTl&DX{up^nz^sMhdh6M=f!27W7x{C&W$!cZMMiFIV%v3{ES}|
z6bi30=Zz`31LI4sK0}|E(g(uX{cC3;<}ux=aWzhpj-90Et-s_rO=GR3!4?GH6$cL*
z(NB;ua;Le(bhL#trGkvPd~47t;ficafWIBi3#BPKsL8D3Z`qeeTRNrEj(=P*T#<i1
zb85o69^rZvg4j4}!5r0zCdd3rU_GH;w0;kSg6p2~#S#$s!z-BI;m(0R^xk^!72k-*
zD-&^>y!Zs$&XJdE?};SH$FEJ<>2ZgadRG at G0o|XBp|`+to7-1SVY<5#VZ-+8u{J5H
zfB{Z9eG^YfxO~`c2_hm&1qN1O)PjF~$gfk{|CVtgNC!$iJtL*$M5trZLBK<s1P*=}
z at gp}Vz-cmqF at MNzypVN{qqtc}oX;X>nU}gR_R0*9n$gd`?sajMK(OI+dI2)nwfBQv
zLINn#s at ByP*Ry-^U)P0s_VfXb;JMrbYlb;99C7?&!tAT5i=$El#&8rw<yL>HXFX`$
zk|r+YARb`s0OPSz6ibCLuCeCdk#hGFd|tE{ni~Ar{-rA<Kz1>zIjXv&>F;3V53ep4
z8hI^Aw;I#}O!TK)fT~Kqv~CUXzFW^PH&42})zfh2>xb}&WStP<wFABY5|xA~f3UiU
zx4iSc^tb!><^5-Dr;V)eEjxdLb=Z8+c|Z#`yopK^tjcL?p`slf-1<2e4kKoq%T;iE
zT^N;E>|e^Qw>qU2Sq<2N+1%B7&x1p(WsLlJmv*YC<4&lhO131ls<M96Y at 49H$coXT
zJ`&&Zag6Qi^)7Pbl-h at i`YC?L1^~}2A=m52y1m*#XNPOeHdr1H8A^X~J@?`8ERB$?
zR5Tpg0i6XX5KZleNuxHAMv^<K!qyi%v$yk+^jv9t0R<3DgMRiqOBn3mlXbmHz~Xc0
z{&&BrC14u!VX6p6>)3N9Y)0P6Lt9(64Fi79lDKS6mGA!kRpLM%8qHlAltEG^9Pr6g
zF1%>0wynjsluRZ(7`%U|Dt%;_%^FY&!X!vl+75|`D;U|5OX^<bB)aRF<lZjru9 at JA
zMxcy{4MNN2V%R4q+6rfZ!FBI+T2Nr;y=eAE895ZQTT~UKI<m at k$eiT88bD^suNV6C
zCGMWdm~F?cocYF($3<0b3?2<oCvbToB0wPoSZ~ybVu_bf%m;t&z<JB>GpTOHZ3i%h
znP`CEY!}{hH5T;Z*FEL5Ld%W64lR42si0Ur9022>XHh6DR|ZR`J-#zm7NaJebJ=@(
ze0|T`O8HqB!1>iS%|cll4<v1DpE8Yam;sFh6*--)d~|Xl-X8e3wk4(g%&z>vE9a&T
z_3i|YIU<Eo_J)5_xzEFWk!$g9NcPAJp|f<tG at vY5c4#>YR%Tuk{}kT9g17yI<4c!;
zw-j{M(C|1g4Ft{!B?-|(n>vw(qriBqS%`SfdvhhFI`1q8;- at B4<M0Gpt5F2NO5^;L
zJVo!M+K^<uJW*IbiBly2178(~^*F!LV?1-bk#E4y>fnFe`_HK57~aj^h5)QEl?i<=
zye6?`8msDYZ<dsx^f#u#r at j~-qG}eN#%kNvS!#Zu6M!3$E(ngG2*x at R6y*5|Tm6YD
zXTBK1zY<L at ojj_4p#I+GGD=PB!DcK%+$hjj`9VY~D~C2rgy*#-CcQR(nSg_IbS$L7
zl+nT!IB0)LXE{IFuUQJm%GA$UmVXyiDoih at Zf){)>iScCd4XHWOSOK4F{9Pht{PKt
zt01m&TB!3W5~(&NzlwXs02(3h8qdsr1(~2;AOr?kt2#EiYLJ*x=#unHh#W)DlapA3
zZ^QZ at 3l`OQ&ieJWOTkU-?%{o at l7R@lWvMR!-)etfI21qP{dq9Pl(Y8G7>{bw+{j*t
zo{xlQa6t;}fAa;!wGVy4<6xk+2V^W!c~6_Azhj5|b?^y*VRk`?&9SsHAZea8Y8=P^
zOyWUW=4_C$k2))B-=)uZ`rEGA)1cSZDj`r10qP*R>~Uq!B$xE!P317yd?U5WrAIT4
zTFrj}t|)ne&8%@eL|0v|`fT_Yq3+_!Jyp@?S8FJ!MP6uSlKd4g!P5RrcM$ZdaKL{>
z4r%R?2R>#ihiw$y3hrnr>|tJxpvyxf2!2b~CpLEw2PN34Sq^9*WCAR at 4nBgEO_<?K
zPlDy)Xd2jKV8J8ph3}ID>J+&7otd|=h0}k8m-3pZfOAn(a`BLS?IU^RG0TmPG-|~-
zAC#jf0IJ2L8Zu|225i at HQ2dEHGo~Mm_@&HzY7P?bSJ0!^1W^O~x8;MMx_%a5%+V<+
z?=g*B>b^Ro1BGAu;H$31=^OAD;^Cz5*n%mUZU?r7L~mb{_fd%}?}%=wp1{;Rqk?~&
zWS-RL7o+`06IJvnW8}aIsfh3V=!89~$UKw$?C>GlFBBQA%-wgn76kubfkUB>nxQ at N
zCq830NU6_!gJ3lDj&HRWzbjtzSLl=mF?^mQ#q7<%OWqSYrOK|<=k?ri5#k=d+=!EO
zWVh$Q)a}Ypr&jBHr^p)pzU$o~b9sNO at L(7*<Dso?9a80OxjmDsl5Gp}9xm1cp?x(L
z0s|9$-Z18lM%3I(!R-Uajq$`txNPA&#EjYO^OHsvIp35SeM477l<CTh9R}H<er~UH
z|0;Lywh1~P#N9q?>Et`0T;UXXE at e<q>ptG^r6?s5Sp9g)e6;EsTdH4`GWvf`(HA1`
z<#i-q1AxT)7^vJ9{i257p}x1A0vXjtZE8Q(NGzD+wi3s{UZ(f63lF(bviU)y4)}+t
zqaY~*FUFhh>WqWU=U|eogQeEw*${0Vs+N{<_$75aIufD&v1dnph?VQAg(wn49rk6J
zI5RdykxY9t7Ek2r-Rjrl2Qz<;n$VC0oEz5~w8!z)VB2?NUvAB#&no0N+oznsX1`&M
zGs!Y=5gmq0*7dq$ne;Y}$ei&x#`fSM`!%m0Mipr3KXO&3{U-rHk_Rk?8hXTL=;drS
zKygtBneF{<fx*1Un>bO<Y>~n=^O&en(atRJ_w_{DMOk60oY#0V{`!CJ1M({@2B@|Y
zp7m`T^;GddCgA5X1W}ibE})lhYI{LbmEG`bSmKLBCLig~UP1l0WW;U>(jzH<4TJ}q
z*v|lG>j*{uoxDDkN1S(}z7Wl1^#~aZnw+D470n{9RaAHIsj^Du&UdoYB~q}yND>XT
z>C8w)%uHULaC%nvR_cG#T0y9RcDfG&E!3u*Og7CSCsDNuV723XyA^Ra+njFJ;>GHF
zUWg{@c=F^Fza0^z(jm)@+TzcV0#jM_%qyG5UEbo`h&=bh+M&pXXZ9W0PkfEv{o2rf
zs@%!~cd6cy-$3fz<TU>-k55vo(6u}J8z8_D6N6 at 2ZN1|*4(5N2_}^@^C%Ap7%P(g)
zwGrRHy4_uYPw1>Oj^LTXt$|q<W!jzttO?kv&+02n`aQ>gsT}Q^Y0HG7-e55crA=Oy
zdg~y0#eTFcADlaMmDbwtaU}^M%i|L&j(fnBEVftN2U&JxTwBirG$WO4OD)R3({ZqT
zSjW<(=#Ja5>SKS6#pu^1YWvJof|$~?EF3X)Qqz^SfeK59vb6v6f5q|gkZSz$tu(UG
zUO`zC%)u&BoAzNtke&doaolWpfB7b9_URAT6e<lXUrO7g86%`PT|~F~2O8pg15>l&
zhfKCQ#<nk`#ur^=&!N;uoF at v{5|)fh5$pEq?@#}GC;opUcO7Jzlfof1+U^@KoOaLF
zTSr~if`q(Tcb#Kpw!_>&Fo8C}k0fp+UILkhJf_2*e|%44{h0vJ(7S+=K0 at 9uGcM5-
zXC{{qa<Ctu1#1g!MSW3CW{B7`emsNE6&&4}i!Pa7LV#yqRGr@)tFDwIZae-1tEi0}
zf7WPL1T}wqqFCRS3Fv@=qy+w4OuH+fW&TuIh_D-N;qF_^KxSMHa7F$ow!B|TN!NDY
zgwt%CcsYI1m5e^|x+<?;@oo0RSK)AyX7~&2Sk)lNnn{)Te-}yEgKc(#=H+8<0S0SH
zb>6?+c6$6U$1{AaBETC9z*QI(PhqFRcGJ(QwzGe`OBFMbsY7~)pcm%7q~uG=RcW6T
z<UHs5ok^9iCth*m)WY}0d=vgQwJa|`A8&_O;XxNOKvzl4Xsl22A7W%>hMt-vb)vZM
z*1r`({`?LOY$^q5*c{{GjL~^z%Hrf8^@~#C>OOk%3qHXGR<4pyM+6!Jy&mx{s>J~<
zNf>_zi?Tu8`j~PK?PmyZFo}eKha_G<xy(PFGmXzLJIW9)h(Nm_XCq`DMSq?R_b3*Y
zMI1JDF---wa0M%H`JSu?^XusfPde^>(PKAxJ#kvO!OIP0u&@%PTZt!s??s1hyZxk~
zO-lo0|M;56PJm?7yHBvv9!#y)5ouJo-)VnGMaA%r8(*0J^>|_X#oJYa%8-%OHAqFF
zB%=ni?GGH6{yauyJKW&oM3X}w8pLD$e<L$3wI;eSgh6wJV9G~F$X`uqcAVA?-Fdj<
zQO&b~dC4+id1-yPgwXS?T3v3EbwJ``$O6iH#=i^j(9WztRhgd%26YRsTUkF8<(7Xl
zCU2l|&ZLB^n$e0>PX;>rIJBT$^n7`2n^(n>wlJA~2#EKp1Mrvks2hh!A#O36O*JYl
z*~fY0^^0(ecQ4k;8FGAcnQovxQ39EDa@#HMVtijml7l{_0#bd_>@<s1Qw`ef9l8-P
zd7O|u<J4u(dK-(bxWkMF^~2#BLK=U>-rV3=u7kJ#3-=wK6Lsr&3y!bH{=XwS{F0P<
z%-cWO6v2Z51n^dpW`(qk(F3h~a at x=G6$<{|*}aYFM<}UpfZ8pth$;{q)9lLqy&{$T
z);l at +fE22V3KI2_d9JTeGHQ}AQj!V8k4igF{oPNmslXTBjK1t<|3<FM=>vZ$lw};*
zQTaiXlDiKaKT9ZOUJdNk@%leUQIl|O*^u5a5T2o@@Y at GARMD^N<opH2PDmSwJY<v8
z5Z!2^ML9AyB=p^Bhpfb|-u6&t#D;47pl2Pc9Gq=todXu+iGbT=t;PZOmbE2GB6xFG
zyoTKFo=H|Vc3QI)#h|E2zzTnbOshuQJ*}vwb?h!0>p%wATh^Gt6>V?9-F9a0AM=Rw
zV5*d01~4)bhp8U!O{In-_j(CIN4E&MxmkhmoK$d4;~7O33{*<@qha>QW+vreyxu?c
zGG^T0M}$ND4Pu#bM4CP(G%D~rN?YOGEwJ?o&ahb0LA(T2!eV_96 at P!EoQv at V9u(va
zKksWfGsB9NZYE!#FVc&o<;8eUHScFKmev_+U8(Hme0fX}%V55>IB7=OA3CqZWC*Q4
z3>9dImM7i3>N37acB?o~=elh(j|fyrU9Hy$VZ$7lDE!>R>nA64bOnn#KPHpDsb;Af
z+X1qAR(K~$U3;`cBz1p<@Le4_x9_b|i<u^>;nK9o2T$J78Q6i^TCl)IqSGlnkO4!w
zU1fNzvYV3ym4T3O4S+kI4J;!kFmL1I`_JA<365Oc9PNNNt)ap^b@~Jm6Epla3K;oC
z9GyWhvs&J#B-9bp*5tKyGhv=S9r<3cj at 4{q=0_aM27Z)sg=l|2K{O*AknG_U;M~u!
z_HX4&4y3|7ly{5H|Dc34AXWk1CTBBElhc4BuS`(`0i(u*F&Zk=`cv=zky6 at IkS-qS
zW035U@!sR4_o7{#&{Oy*^%YA7+%<$Q<C9|7MTH=@%xb2e<GO6MGTQnE@!<kO20-OX
zp}#`ZfG=<L*du>lKuZy<-mTl8%~n*AO9F}}FJ#=`82|fRZ1^_-c_WR5D-h9kz^R&p
zu~)UCh^H9$Zk!<1K8ASesYnC>3_$b00$R7D>ZFB);Kmb+B2}-vHjui)RjvH`su_!D
zK1=&xwG~eS<p$wyTRa*<oO$(TfdE=MaC7?^J!@uM+8aVPx^{+tIg%SWZ49aN0;^2)
z5~%wgdVNY?k6DYu#wHF`tyQ+Vv&VWzTf30slfuQ5K&H%rC?(d0;-~lRnn3kIb(x$|
z^<q++OB)uHgVzE|I08-kqA%)V-Ku&^8PKZES0DMMs%UA_2B8fIpvsV*mIV6ABiD1K
zG*jR8#;jFQtNFKoCMeacgN(ndUY|HR*8o>SUNnr#^(8e!`-bBJWEq3W*_<ldIWHiW
zb`7~9>P49>w`II%D6y+=2<xLBc`KfI`Cw7dc<V7k)xq?@guryB(jl(- at 9NzgDW2Pe
zs-MF~Id}3os=z`}ve3)oM0ObbqPK`(lm$QbEGTy7^zl1?ls)dy^S!bfE=y15J{Wgv
zQo7ui``pveW<-B~IhNx4=Ll<ze>s?o0eae12P(MhTs-8ZI}xeAbc05yM;uyo^c1#3
zlto-IU$gT+O>1#L{A=r(x8UF7=SYf0YI4-hdq0JaJ6TLvo$;{pw7>R%L}^GBkVACC
z9Y?=yxE82?8g5qFgPUxbEK2VuHk(QH{X3iEx=zhdHs|5I%%<M<pSG>45^_>VssK(+
zPT85(e03|;8Qwd2RufRcrV)ld3}B7zTe*psRz~{opLuNT{b;`(4Qt)3x(Y**##hKr
zl%q)KukaKqeh~J`w=96-!>>7-XWl!<N<KSc6a)=_b+|pE;-w?i{Hc8?gPC`OxTr2D
zf^dcC21UNFQJ?y;?af302)Q8Z at 3dO!_2FHI<#uZ3J~0Zgf;Mm?a}3e8HEM%Nk7!Yt
zhKMOLfqw^7suv3-6Y#u{wVFY`J~X{ojwoa!p$gYc at Hf4c1Eelajy||(Vp|n_?+#|7
z?NYyg{)v0u%jd{uWgCq_E7dI?x%1VmYHe_e#Z|_}ys{2?$-~VSOVrloir*N3E1cO+
z9y|ny+65L&mjCy%I?M|Z1fk+fkSZwnY{((gttQ_AfQSF2BC=A}+^^L9gR_*2(qG+H
z5-_dDxqhgp-|gN6wvm-bD@;Zdw;ZEA4Bz&Dai#UjR8}(+gs>nFy**euH2O^dU!T6D
z+WzCOI2XJEU1$Av;@=7f&5rwuOdB?s>;bGyct9oob7&&k&-kUo1CDo_i$s%TF~_=t
z)A|QaIJM{5U>&2)QiyUr$8OR1oh?$$D04sODVb(Ono=CC_dCNDyJp3`)wc-N&hBM@
z5keTOL9E$6mWLUTAZ%YaWwuhp|LPCRH7MTh%w9Eg4|~OqzcT-SYZxL^yOXe;*M3o9
z=Ciy6ra(m^rjh)PY3z68M((gD&v-mtoPK~O5LzGC*0texgVj%GV(+D|rzbXVO7p@)
znG8`DL$g?pSM~Q}YvtQD>lcDx3CAjbrYqm9{r58 at c7+SDPHYF}H46hhE%*xFh!?;t
zxXP)D^{18C0Y3F7y`hAjD)0oD*@23+nlj`_#Y-0!1SXXwa#BKG<UmIgWh`kb`Cm<<
zUVTFG_hfhMcPQ~L8%5TV0vR26OB11aG;85LXf$*$SW}_s=f~9AD`fiS48k;jVuM5C
zJyATrli?rTx|Fc?_QB|#f5LE}4-IEB-Te+kVAp%dKUvHa?tOkLc2D_?@X}*eBRo8M
zS^Cql7M3`*&oGlD7<(0 at Q_aMKHECt`R)UzXCYCuttqC3q$3QSOvGS%Xc&g*TTKKco
zBuS#LtpzwCqV?yJr?mDYW)?nworF29HmKW9Tvo%bxn}|MX;PKV4yD2jF6k%qL0v#w
zo^;Vmo1u;Y#g+|W+k>T~;f?l%v|tFCw0+oVeM1v+o60Iuc#>ku+vTGYKsgF1=YmNC
zlf}H<Ez;9(;c4qS>JpcK6|4RJkavyeO5d1H=r2d<WE^>OB5@<@TW@}Ug9Kjc8-Aq<
z8=egC8bCBUs3S3XL9%@vx^0X32=ZQotBlFFWbE+QhQ?TNziu1)7Tv%-USx=r!BTb1
zQ1bN#kXXQrMJP0!vT)XeaTUqlOT&c-Q3_;g8X9u8I<&F#I&Jq0x+fD8dxRfFtO4_T
zdRl^nqu876P$|Hv;C3;8m|Xji#I;^8@(Tbx)b^N~7hQyzhZ)ky|27pCb5_e!IzvY9
zrD+VOxk76n!2`XuN3wzFOoJP0vYNm0`+>k(&cq>=?x()PjpJ~qZ2QxM7s16pW<z`Q
znC=S4yQFCHuCg`+%XF%e4Q5^s2BN6eGewF%esp6!!wb57f~>56^%@gFa+}&N<I*rV
z7x}x)w{vqVt{87-QRxqIfru0<p2oF$ZB^!`j7<*@;XPf?a(Re1d3%0g#K=%=S!rH;
zaa3w4H#)PT`F7+7tM_0kTUpdPeH2Csd!cKZJ}h-8bC_ at 8o~Oq{Z!-^9 at X=N&4Y?N3
z+xQNHtc6O}0E+5=BRK}IJ}Hi@`<KcO(wn4p;khpJi&9crZpFlxezJo&xtKjw7xbEu
zmBCIbxipi6Q~(Bs1!ay%NdEEvG3Z$K)^bVG^Im<tDKmH339KE%fOFbL3p)a}4^_pu
zDNQypAq~-qZD&huKb3IUsAS*6*peB`$9kC1SIQILI2GxC^7jYVn#US`&SCDHT4_vs
zuZPtZ5 at M>E=0{<yz~S+~Ad*jSPaR0sio<LY6SlP<ZzxOAvlRy at I))bF{sdcN)lqr=
z;rVBqi2>h at O?=TLp((Qwk#^_EA6a at zW(rpko&Ixgag&$UE5gd&Q&Z5Bhr}hRQoE80
z#B`z1!G$@0%nrSx at +QA{m$|*V|GSI<^YbZDpaqw|I(-Y>`8Hu{I)fZ7_?}l~EsrG4
z2{CV(W=2Z}7pk6O+HXX?+`HZqRHROo4w}`kM<fbPN?N%$uzrXC<|=}}`KfEIcoG?U
z1P1A4c<umxzzq|5F={Y}5{;$gdW(KL7yAB0k(Q-@)gR5uNh%Ub1LF3Fm)ov}Z at p9M
zXnMj_!MetsQHMZf%!lOW-^6LI2rj{m0ye##Tk%iA7Cj_FF;)R)JgcCHTxOSuk*1UL
zfPSS8OS;7aXkxb<N*zf0_5h_4InHw-))Tl~^AO%tDYZ<{Bb}$yhXB%lx7Jvg)9X8J
zRTFG~5j>dq6^2jB*ExCjXVM9n5<d8zMVKfATI8CF_MPfP-0er1EOIZ=3J7Bpo^x7F
z;FQiCzx4*x)?A*nunsZj0jhQ|kp}@kN~((t^D_H;?jhLtN<}F3v09l%J^5tm06U35
zbIqu!s!j0MBA2mcfur20&&D at TZ48+e-sc;C!%B6t&vi48cQpDwy4QslLvN2B*sFxt
zX|Pi%E*G>nLzo1b$%v at p0SY71$1`T#?_vPLT=$gvfc5P7F<6YRM}ARky=osa+7KBt
z-S?S0$ljY7oCqa~^Zwc(qg`kpJ8t9GG4G283#ok!yAyc%UDviyhl}TOUvDe<_c7*w
zrsW-<J?`kSR-YJi(zBZFM}T^2k|}eG#+JGGqm6_*HJ>*Tz%!6FLDl9edF;!V>&Pyl
zl)o2oDDKI|lc1TpYQdYe1xk;aJ+6T^NUnC(e3M3#h)l$ujrs`GSDru_Gs#X}Rh=Q~
zvG<?%+1Z!SY^aMSddDCgBvr2$&2?RWBB~mzm=_kmC+pP+uFSPylU)uQQcr&Gq4Zc-
z4fNn2b`nEOMZcBO7Zfvl>)v=Cajm-1=Sr1Wr=WIRrRs0vm!VcKt+qyy&=0HdLc&Hw
zSud&W0(HhVEd{029#tEc!6p$(cWU|bcbf30L+WkQ^6n9NKsxSGDwZU#k*el at t2tz0
z&reDc{P9EwL(T&)70q7O<uipb*!YH%8EP5J+oYR74<~54V2jQN$)`20#F#H(T<Of;
zg$yjHy+n+W7YB;}d6oDtyA#Fo>BDNiQ+c2rZ<Sa6kV#cqBSG}~DIRY`<I^~RMbwHq
zexkDLoB!oxpi;wo`cd|HX4>n2bd@(HlS9U;-b5ECHspd>h3t;x(XxOSXLy_njkS$0
zYb)EyTRv$3t3D>Y+Kdgk;s=<99(_yR6D!=iKpt&e96l})nPwq)R6|y&mibjyn=o7z
zA&*71BS_|CfIh-TM5w_Y<CCub(tikzf%p4o8K10rAwr}05iE(bc{<L2-4wIkbNBur
zY*vs0&S^d@;&Y!&Mo$>VbhNr256cb3NoTi!#>?Ao5WE7H&0=-*MW`AV at Dum+sU|W^
zF1P9^o`>efSFCbW+DtE0GRUYe@?uf!5+XrP1M2VFWtdPbV@~9?6cB`PZ2Qu5OQvnV
z^D8I%kfg&iL*;4tH3MCL#}@ziDBLK<{$6I?08DeVg|8n?e!WsVP;nKz6hR!fo<@(@
zK-da5MfmJ@;WY?GFsaRTy6}|YsV54=*Pw#Ur7jD}Ws`Q7`6h9Re`ZK at ccEdh$>r4T
zY4nDfpu)TD&=Uu8fAi=!ltC2#Mn^*%-Y5Ty3RytmjCg%J<MWVzN^uOQ<uDmLJLmpZ
z=fZQ2We{z-5`y=(SKruHS`G!yEeKdhEv$uFwe8_0(}i@{gLsU=<}{lxeFKWpLBo%Q
z?J5-rAy%X#LKS;O(UojOj~;)h2`YYpKm11jk>Y3OuP4=aWm&FF#@2^jAK!DN-Qrb)
zA%E_cEr(IfS6S?Th_fljtVrvS5~oVwVQ3@&<(I}2+T!0E7$XnH(;)e#)8i}w5THUV
z`=eT8drOpz$a1E?M=(M1KN5o&!n2n#)LW9x;a4-a)Mx;@CyS}*8Q7bu>dbTrP}(`p
z-+9K?16h&BGRCl5@=HAn=J!@#IC6(a at i98n4)}A}3NxgCh!dXIVBD>M>rTS|+OCEz
zxqXMTXJTy=`%kwcFYfox%xVQ3ytfjFAYLNT<+Z1(26%HOd2I!edy|v;Yt7{^UEpu;
zEf0+e9PTUHdg at pIdTwH^7x}Wb;-7HIyB5dvv>xw91Z^bJZk3sw*7WX!m-E76x^5sl
ztwe^MF5m`#HkWi(tgD$5K7HA?X`(#iNw4qj8UY%ml!brK4gsTOmf~FjM77kmtrR%C
zrN{_P75KIF723mcYtF-?HC=jAKhRc89X*}h{Ne&>t)ACQt}<yJQ8&9vyy%A?mQkyC
z*R|Hb)etO;AzEKmY(H*VPWL2lI{kj-&%1hDV*KQP0CVxA?mslfn`?^Nm-hAMh2O6f
z-nqDV>AS$K`$+zhgK$GD**@m#HjRQjXa>#l)ir~1HK}-WVMsV$Hs#)&sqt5-=e%LV
z3U3%M{7`W5;rp$a8A3{NA at SJqjxzP0?(hmb&06?z+&x-#@vd$AlId^Kl<C?-IiKOh
zkW0gV(34Yn3D|zIu0_^bNCn at f)?-b;l${@D$rFlZb#$+}qhY{?-)b^RU*vBs-zGI5
zH*@lq@`ubPQSPr_9}(4kq%=d$tG at UEQc~Jt?{2%33D5{55iLOdhVlU>O13aWQO81X
zC3#r{f-54DjCc{jJ%~l{(BvZua21?cA13R6|7TKC!J>-XRF=7$P1o2sg5czRO~s=R
zPs0X3#nW>6 at E1M0kpnCNS#TyneN!9(M!Zpka-QxBmpWI at 9L}rWU!|k`%O?Q&IE?Hh
z=3PjLm|*Ol`Rx?33+-^|5<+wqZBJ3*{8!6-0JE~Iuf!}DbaVmCHr<X>-6E(Jjfgyd
zJ=s^W8G)WWlyJU&B!cjRer6LtO3DOG&)F{O!aRNfOGe$5h3dcM6 at 2RvzD>-Snt{fR
ztI~BeuRB|Wkk3H0#mz=pO+2`r`!FS6ddgbLaNiNZXe3=Ak1XrolCowhKX>@Gn?;uh
z$Q+)y+B-x+K0R-p*&+VYm%DnP5+a#@NutXZ#iLIX7ff5GF^iSE4d%WLy55i#v~jGK
z{wXmcOct;IvPQD#vg62{6WtYCkXDf5mYsv1WFQ0Oat$eMHe=q*^=As}T;U>?WrWE<
z+xS;Wj4|sAd)2%6Qc!MZ%<V~sm2 at v-MiF7GT-NRBMT_@xXVYd9II2~j`^!v!qI6%C
z6M~z6b49Ho*vLS>Jm at YO>|>ISB6Z^#5+!QlX_UX86KdiO=YZn{*_ at 2DPqenf9hSb|
zop+bD*lnZZiE3&Ah--sSCC<iuxGlCrCUdPs-ND)%F15+IaR;kAH%}R)Zu}V7jFqz6
z;`Db;LQH!dUND_vw?%_lNeUQ$0|t at DW~N(>f}$$`s~9^?a-n8cV*K<2jo7NCA2x*m
zn4M+85++jIoQwAnMcFt?%exXqjBct`&jbyUhfSA!mr3P1nXfGB^^7QwCX6U+1P?C>
zna4bs;bhl5^!_eH-vYSaK~uBlC3P|I2+6TQ7~_`Iuq1U}{dbG`Pt1;gz_~Qz!N{=*
zoVs+bs?|)- at Sx>&I at l8XNo0{MKVy#pg^r%=Zi*Y9Dvc<h at C`?<v5ve@<P>@x8xl7F
zp?KDxLx`BT&sR7iZPV1I(fI6sWSUru9#v*l)&1}>sFg28Y5q<IfX|zK_l>XC`%Z#>
zcduWk8J>WV3W2{>nqM-1#j;r#>mHmdXC at Oeq6EYO$6#sK)q_T8d;tJo)L%tA1mK0k
zD$;@`WP6Kff4-Pz)PP_-OPes!nmnkpk{^;eo~UyP4rgEFyDCDpxV{zGp4{}tjjkU1
zEWqxSz>YT|iV}ybsazQTG0KXn0yh$8?P?&_y9>7i!2)c#9K-Q{HEr--5y2IzNl9d>
z05jauY%h~N`(G-AWZaevp&%eA03uqF&u+YVr4lh!-CTu{v7w at dkI`=MU at 4BrBW&&A
zQ&o1~OO>O#_{cDHok;VsRFJdAB&T!rszB)W6AC&4gO=GLP17_MykZC~*uV@|`Kb`R
z{6Ke%M1{t{C2bLZe;Sj=R36o!Sy at -cHH0%HhRNuFA@$6^J~9{i^)muiDh+AV3S<#5
zOUau%im|O=gnc7G6{9Xm{`X-ni%5PbV1RE!$BbgwfF&X#?fm?xt?XJhX&NRM*+NP@
zb|nvtX%_g8MeUTk3rE5k$3Bpw4)$Ab=3l1U9BeZrY3~z%Wny#3*@GcT(Ube(h;G(A
z&Em+Vos6T)m^d7aE5ReunahUF%Jzf}Oof<0$laLN`^Z#{$}K1z#1OL=NrKHZ$zpcN
zh575;C;EEnbg#W}#(~(0(UkST;ouG<l6k^`Dj{31pOxWQkBF}+v>{gqaCtpNo-`{a
z>S|4PCCX-hg(mW0N?LI(?IGp7h?Ys6j8lXTTW#CFrgRR5Q8D2tHvfc`_|H>u5^9F*
zw;JHZ1Dwe7f`zuF4YLyC<}qnoyJ8m at axTKHZL;E8 at l42MlD|{EMDBTy8Wp`V!W4E8
zOm6%&5#s>~wfcsvMAlmm<5ijQ$H2|d?#hR`ey<yUtVreqeVvF`!*-!b3r|GZ1RJ4@
zhzk$D!cK*Ghw@|cKBf8dHI-%&gE~_%t_1hq)^+#e6t~0To~7~xY0lht|MncTL<^YO
z7E_3*5s`CB@*^N1&AQsiNzU)LAb4lGQ^MOPGj)Y4hr-+qsIM73giE!z%_CM&hPnbk
z at Qq4;_A$*YopFt!K$EgD{RpklTkQv62nmrMjr`j$6CwmX^;I3w-C)=DOeIb?cRywb
ze>_uvphEAG>f6^KLvmw8^y<@AkZewYQ22XoZY`!B_rrD$P)#6J858a3XJ>=CL2nMK
zNeuT at 0OFG~X`qAjq&QIDkeIsOh(Kr)8Q_9{wsp32EK?v8#MVZ)(Ar;}Zm3k6If~~f
zqWo{rn^a3PQ at _dzMBui=YJiR9i;)k{m+Rs&TvMkEW4%(wRQ&+{Uf)&&2`Xf#&(Kn0
z2nj&9%Cy&f?ELPXvX|Uv%2q*ksu<ntP>r>T!^(C+NQ#>si6^H}%bjV|nL1}{$bE``
zd0ZT2PI6Ig<+<aL>#+K^h^C})6)Y-B(O^Vdx_sq&pT`t)iO91Q^#~3WxX0sG2J&A$
zT{reEUJ7TOfTC_=9q9?@Ss*4dJ!9{iMfVTdjwpkJf!eq>-$amq2wXGc(?qmykss8<
z%Hq(8=+**Ue{BoB&sM$+=1{_X!gO$dc<|$4eGTRM-SoK?ms|vqR2kQJc$Fm0MCBKz
z&&vVf&r!?QD^yC)*$icR4z2dN?=!)~aow}P<Cb-U;{|xpxTQcF<m}>HqbO{jI+eQQ
zjA1v at l#4}}nRwci$w$IBkv}wWr(74;KB at FE|69hqLGnlFw+`fu>|G;+OSmF`X8izm
z5I4n!*PnHAS%YE#$OL8?r{@<{G{F3|k`*>Ipxh+Ei^CIG$>3wiy at N}gKeV+oahlGy
zL3)JDx?W{`%4ReEPt3JN4$h456EIzigb4i(?P|~j-&BA3ks#W at uQCt9GJ8+~M=nbh
zZvjo={TdAH)FDc<ai5;4tL~+L|HVh6B|C~>x0Qd=J5Cy@!s*IoQb*!CUxGo!T$s{#
zaNg0`7Q*kN&+?`4)q19iWk$!D36NCd6AH%B6}r8&cOTKnlZqd|kfTvvz6(v9xUlsc
zlpp;wK>-XW6a$6u(ty0hxyy`@KyxfEY}|wSjcBYtr>J+gk;$nVZS+uo=PubWWKkT7
zyJgK|Bh}e%Tlj#-SH$ty%`jp9<`;qaBTy}uUu3rX{>mcv`!fFgx^oM4ZKK%byP01f
zy};FA;fF at uQCNvzZlhN^x#Vn4Ew$06rQdGgVAz;Uj;>Fii1g(F-@%%d?Zj=+AEByF
z-%tH&X;rs5j{ut}iY>B#{AexTttr&_0Kl;kZUfg5)tOT!k%Ng0eysVCh2d==gsLc?
zDq5{6CY%d92|5$ao#qP%P5G{laY(&CUDDkJ1%#!Hh-aOoBei`q{29bWC78}DC^uf}
z7p|7bVhqg1CC(yIpp3qQEVvQ(ceAYGG*4{@LT at -eQdWls=}3itEYWuOcw2ZP4eZ|E
z0}u4bPRxrFUnYH93H*XN*2|Xm+H4_$ppB0N>PpC_s&E$)VE`40MJiKz_q;QtA!N3O
z at 1a<;D0oe;@EAcP0tzw{29oeLUDHkr|2$bsUpgcwLli_6%EFrES)HG?nK1vZoW{L^
z?u}+rJ5iJT(*S~hD&G#vP@^L?rT1anw>8F-Osr$51Zz#9>2ZzMS%~?^&vS(r>KlS2
zCCueFP^)FWqbx(7&ah)lld^#NOH{Cw=&VQ%)TLr(%ob+@(6Pj2%tnot1JdU9Om-5y
zT0Y(_qgWU4gGV8b_f+AKT#3n^nK|#5;M7YRrF5+e^y2z|O;Jx|G_!*!snVKT>Anbi
z5T^7;`Hm}4gH($81~fvI8cEc(Y<6MCjL`ZTrPRub6JTg9zR+sFx>oHbt+dLq!Ww3h
z+zK{!_|9T_4re<>c@}5_d`OX^VZszh%Qg0WfrrL1mFK?JjhE6`VbyGDGzg at wNOaJ$
z_OWwbS3b3W`iw8a;)!NEl^74~W9Tbth!HZ)6lETWk6hP1&Bhh%ayR9=*Cx<lCr@;V
z)vGFh81&?pRM6pKHsHIawG$`{Uuo%AYE at m7Bzhh$7TUD_1x7^HEXxEK!*3cu=!Rz3
zg+!uzcVd^s6-)OKK=1IefY`02L^&N;ogYHXvu5*u)73X at +UB5V6IT?CN%v|!$YQ&^
zByu5WE`!oPc4}-65xQ(iBcjN%1s<L&ydiM=n0UXZo1G4f6{L0>A6O!(m3Gi5?F%70
z18*z4IvCbPN%}riQbiX~Y-*jYTvUlvH$Jyw&yPQ~lNe~q6FT|AzS#mQlB9JunuIgB
zi_05-GAGgwY6oJPigk<hB_3;7lyfxW2L6^abSe>B&2 at NvJ@D<}IjJ;$1OF%EDNsGF
zCyqklLRPR;g(Q$)TB^81?|W?oM<aRZDXEXdF89a!DceqJh0}Ps+biiPhQOI&I94!1
zb8|~;=Hu4Rpy4=ogZ!;AzJ3BH4lcVBaHubTRY~{4WDnd~3%9J!1TGMKCOId^+-7Rx
z15hV+rEwyS{^djCURe(}i_QpHZM%gT05mr58%{mhyGa>5)h7}AJ!JoD-vNX40l}j;
zf~ow9$Kx{YF5~y(O#Mzg1(8uwCS&J>iurR!YQxYxNfnc=+0JJmpdwjiy<kM6_9D)I
z^HKVb<J^#urZmbXuHXXS(hm%g&(gM?NBPZ)EV`IDkh{}qSYt;&n5S2@;%;fjnfSw2
ztB*^&=GmkrtTTY at j9yVg%HAt$fCawkk9(AU^-yQxj^}Ydysm4sQ1lA>lEj@%dJ%(^
z2leI}T<V4C-(<YqYVxs at oD0}f#)O}LzEuP5s;$vdcv2zXa>$KE7!Lo^H9E>TZ>Sw_
zRs(qUML`mt-Bktdm3DHC9hm{{{=WH5ac(cyRej;mo94BmV!&)qaTKL0RYHGzp;%7k
zFK-MV3Yjv%wv#BQcXCdhP8>^QS+S}+!g2NFi!)Fx2 at 9J2pM9l0@G7uB>>n(DBh({C
zTH&QiA2vuvplfdzkyMp at f#|vMkXKjZ2<7p{<JapX9gHv^+pSw8NPol7hmzhHfMgTY
zR7!mx_4x|Hl9TKl^9*KRVKdtwn03OMhv(+0(e?B20|s6`u)C-K*M^R<WYmBTgBd1S
zl6QDB##s at 4>iu)I82#8?+Q%q=DD&oO7rJjMEFH^4O92Yt4H%zl{?-I$GCPOqrkf5V
zT=bu$q;s}HiZ$c{${9$dJGq>2m9mHzi2!gX_`h$UGOBg641NIK at uScbT}_?}rl}M3
zMTb?ZTS(4#6O`f^`brU#t~z#UB_^lAlf7ohZ$-f8GDPUYe`an&oqk$>&Rv$Ds0p;s
zy!{msV<^Y*iy&p4G0*`i%mK|h{SmLLC<+$#pO(PbANW%&{a{Tno1q|bjYY}?g5>D}
z%`I)>pqtL%opg`lRR4RbF_d4c{a24I%sNX1<{37jxAyX~A?<w9(DnWwVh1!P28H|g
z%#lz^d&KV>&*`@c=P+P@`+$hW`>ZYJW0mQJ+Q>-T*LnaB%^Ez52E_FN8x`QALe~o-
zjun%aacPzSOF)=18_|ca at DD!T12mtU^4EH1<BbQV;?`FrQ{x{%46Ctu5i#F#9oEj_
zprPQeb#OEm51P`GSD<D`+v?L5e7iI2E1-fqSy`WujJkpwk=omT&2j{}f)IH~GP9ZF
z2SRe)%{2+GuI|A*@nYa8x3HaWNp7}>Hzbv1%MccBmG;SdygFmE at 2bTKX^K~-sKIG{
zwIfG3>f>0I_V!?U!`DI at jP0!?Fv?%7d9fENoiLHnlSR{f0M$aBcgt)CzZc#g4vHfM
z>9)HIjfS?2@<?ib5~)QS?E9wZ;9 at MxUGn7uiTF80()CZXIGn@|H3?A<=lUu9sl*OK
z)|xH3Y#7V7KXjGZUhtVcIbYXzMiH+yicpR`!d|2IV?yfTv%pL{BWH*QezsHFY)C2d
zc<|BTnN7?d-n1ae)8yV=VBF)5h3wna#cq;wUkF|Woj&w`#)N%UdQJ-2HKymLeuW-9
z!@H+V$ER^mH{Dfw5(f}L8oJ66!0^WIw0Y|E;-e>&RS2 at kpp>Vfq^f_$g#P)MWh}$F
zXG7suGJjq#<%jwg7J~0g19zb|yhtmb*7Z32dtVGp!aO{^4KariLQmGZhwxZCE=KL>
zdobj3T-z~!N%3 at wLQTeh;8{Qv+KIQbQ&#rHW$a68G0%APi3fvKMYUKbZU!pvJIN1H
ziN(%Hw<dm;AqYggRLwr5!3i(fqPpk(y`zZUlgF|AtaH>Ba)+I-v(w{#zqZ0>Vk8X)
zy at 7TATGfN?`Zm%-ND0%?VJc9`%i_xZ?;_nZCe*QibYVqXsRBL~RM@^iS?Mp8BAtiu
z22FV`b5SI4Zn_n^=~d3XQG2HzJsMi<7EKL-O1{dZymH~Z<BZm4Qc?6>HFtM5#L7EC
zTwf>W(#3Z#h}YKTZ$`(V>@h9}hOTp%x%kRcXvt_mP;TrduDk)9)SpN)JaD*a?&~aA
zMYtS)kK{auM3~}(8|7(WH&^i?H3F)9pjiTx@(zG63?2p~6R}0s+-mC(#dR at 0s>~qg
zo;=5TAUjKqH>6(<(u=rE>#8VS7xA^~G2hg6yU%a{Ltpp36JX*P;QTBvBI<qPm+yf%
z$iN%1rfZBQTfh;;wRH-Y42I8cVkw)2a9|>TbmLiiG|0*UO^Hcn<yQQgbN?|W6-ZxO
z8a(xjso9oEeDhR5k*qoWHFkk{&+U?p)oq#?&4gP2QAxx>PLBJ&qEWySzGYN?8 at TY?
zN9R07GWx2pS%CQ~)^^Ip2MKOU`Mp+a83RTRQ{aDSqo-9Rhnp2l+T=r_;<AR3V~Rw7
zuJmH>-gl-xFK^r|A&Vg-MlBmtlc2dG)rKt}S!)5{bJS3BRFpwL1LS!41MZBX?Lb+4
zvA2RG40Z3)57NJ4afbhtX)7ICMyz6D32XHlN}4vewDq!17{rBMw}ee+(8iJa*WjD+
zBBts~@#T;rG$#$mh+9a3(mLc+2Zwoo7U@~M%IFM}c5G{C^JTc)pZ&{+ohM26w{u<9
zRo;Y%_h)%@e`K`6i-I`LUW at AVU$2lj?dL~*bwVcErXXdu5iSIP<spuaWiWv__6A`8
zU<yQuvdMED*yP*bi8yxcxVZ`pBHeZ|k-iwcF3}kKdOyPk#=63+bSS)A_PAVsu-3{(
ztGNMX|8x3#$(Fn00n*>*8GdJBxXobmb4o2S-K7~pyJ{-7Y|Pwgugaee4HMP(o#7^&
zeZ6tY%GV#XaCie6rS`6Q*1`I at 1Oo+%WEwI)8#`XrNh^sFB}@*$l4Wj9kbE+(viOU6
zk?U(uw->{VpOoQUC19g=-1-`SUf8=YH at -NM<>_1^g5jV<Mo8j6>-h0oAMDI-p}JhJ
zV+5%Ww`ROmjm90AB)y!`wqZQsbmI!(^ot<8%)J)i&>^KX*c7 at gdM`&b%}5$<3}z^v
z^{R%d%ZAx`hFDvVLyraKR>K{;$%%?Pg9q^}($ij2AAhacK70aZb`!9Fj#kM`h9z}{
zz4gv at q1<Is<2#|E?OqhoC<A2E`!q+o+`~N)t&`IeXT`xL;h+SifA1b+J#0 at S?NCBK
zru?3H!K~VHho_hQzL^kdi{WLsb3n$5nHtuzem;guaB{oG=>>Uhsj!7T{BAGy8SPqk
zzdOd8!$m=m36|viAM<5 at Es$T}lHP68h?!Z$Ck+;FL*-BEj^Fhr)T&KUT>>v!7Izja
zF=)z825G at GkQ*e at nkoee!18_Ea8uj({}(5&HDBS|DxsD(3r`;=`=^I6wHzi*4&x|7
z%YZ!{iAP%z&NCemH>n&L0yw;r6V;FB1^b%|VkF=<XZ6Jb45a&i9t*6G#e->E!6S?k
zg10*7VCw0?UlJh^^lq(_pjzde>ZOz8#fFNSKS?C|p;)+8xm%fR*2(vT0$O=7cUG<S
zM#C)43HVKrjDtwq!LHkGHFwbN8+{`cBzOaCFTA9H_!&rEZIB!wI}fxCf)jrCK2boV
z&jLh7*1D)Ta#Op1<QeeJEe+hb>pQ29p>U+av$-v>t!IgAM^QhMXN1cgDhI%-L-wXH
zZ+KHI0pxQ{q!HGfgpV#%9YVH)+(4mgljFl at iY>A#l&BMBa-6)2|27Gb^|lp;22OQh
zH*5l at p)uv%88{=J7JGr)11<)0LV5pB{-I}cEFWT>TtUl!7HNkGAXdi(2}`slp6)mI
zhT?FYkFW7n!bY<;P8{X)j8l$s!AI0WAQ at 3DEgm%`RrAx!)xOy_vfoi at P=Qb4!2Na-
z)2vYACvLa-({cUJJ7Tz9X3$!Zlu at TGT)@u!&2GE+pEDBk6r at zO4)SQEosXo34xA^v
zVTw3Gd+G0gz7ol~25bW%9t}>z@|qY*CI`~~Bp3)yz5b=KPXO!{fGSCEv)MK3K0~vI
zoWAp9&JN!PF@~*C?2|`M+2e3~&%Z8uI9*R|4Z+=#u#V-A@>PhsZboe81orWx2Hjw1
z&C*##a3(GVv&>`!O&Klhf&o#`R>S^07aGq)EO)_w!`z>;T2}l><l?OtrYu`;r-ILv
zYW2$nJ at X<UbG=Ua)s0gnnAcPF_2fp?mWHQdi934FpFxa#eC+;1Ttrbrmf(ts#}1(e
zj;6>F$st`F3bnB0=Lp*_UWh?Mc?36?-k~~PoqNT34&~0owY&&6O)g-uaW=7cg_yn0
z*NqN;*)AOLiejRCm1l>?;NP0J at gA|L1bAao@#-(hct>g}oCth5yDE(tI at a0ympy*c
z&XnC#)!(?)CF}-Hc$TrU6H{wj$Q4jPwNsg1d at GlBn#v)*GXmE`=iGdvAqocr>C at e#
zdDG_8$3ngrGRv!6r&BpoO%BQ4QfpuG!!6%`1hby8TTkZW|494Uv5x+C@?6oC8|S}p
zbl3c{_P?$T(`8!Q!6Rn#>FyCN|2~=&u at rfF{xYCE!Je>*=gX=j)YaGR?x{_3fz!_a
z1~O^mRxaTaO{}arUuswLN1i-4d8Z9mTH*>VF(na8csXXjmvvs#__r4_u`1IPSn>9M
z)l*P0IK7+4_**!OuYDgri6CnS6uzCA;$U8x5t446k%uf27|ubZxkBQOb70z&K=)#P
znq=Q)ob63$vMiZtZ$qLuxFrWAKnqHUkAEmuz1zC+|GzwU!i~hLO{q4e;ggX5me^jS
zH!aFXezFOxdWx4esb`dT>$ekV at +mfdf4RpW*s^kRgSHstBbcc4cS~ufF<f=8oz=J!
zWWVPCs8MC#X(M?{Xj}-!v`tD#v2JsuFaab!<Ns%Nz~<akA6&}xZmCLj(u3P%slHQ)
ztcj0{f at w>1%Cz|!6^mJ<gSoqip<&^Orn)rRrgL9I<`r$^I|?*g at V6_Jw{enxkRj5%
zu5q49jgRPSziwEx=$77X9uP~p7)gorm&e}xy%HZN`Uqmz^mo at xjX91^Id-(0(R;9*
zi5_g4 at 8s}$bP34%Yrc8&Sf(>#nFIrh^Gh^KBC%J_$urkDQPs`30a<H|Q4yp{x5!UG
zThEaq??Em-P?ke|BLO_j1!T{E8=nL()SbNeI>Y0qVfA1*<^yom;Xbe)BNK3?nb~SN
zkTt?OLBfkS+0p9N>B^h0wa_7Xu$*b5zw2*fu)VEm$bL^9rG}?fzAV~bCzTw*DbU`@
z$;XaMPKihAhh;12&@Z5|UbL6(pZ;PIpDUknlcG%Zs3BK7aUE6=-no{4g(w@)_9es=
zG<-&Zxg--(n~^TVgra*++AfV42aVPi*K17C at _aoVB`ztX&YDsT#iE(vUCwqbv4;vb
z9U8$Yz{e!22^=ZK;#b6(ukscr1VXEk%tA2v$R=KzntAangTaV at B-q3><mRyqm0UW;
zP6QL74~;Sfo8Y1Z3N|}`3ma1&1H>0_jG;rC*q(;$dtIsywYpS`4^?|cA}c1ZJwfhv
zAuKvhi7FM{=Fa>Fx7HmI3x$(DG`G^m9^Z*vPY>t|8$&x)pN&<+-1LJM4GAajCj7a1
zZM_KE9u#uvxDUa4kY?$&zSM_PCYDmw!(-AlJmVr1cv17(rDpwqgkh=^UX+pkXVn}E
zxqJj59?v`mV1s~RP5i?&kOaa0Dl=>sjDRPIBaAIpR5q<m(fP!t?@-Ac;R-)O<?VnG
zKah170dkt=FphSwF9HFJ<#&w=MBtFT9+zWj at Xy@;TT<BU=mtp-^y_Sa#UJ-DIsNij
z5 at P8571r3Lv-oCzzsZBaE;jEI-{WH8iCthoXj5XOUgJi`j#h7G^fS0qx-GV2gu8pz
zncY1^YYI~&`N*ulb;h1T!T7j>R7EIRIew;Mdewp*e#Du+8|DDA&pHGV8WS;@JueUn
z0i#$S9dJyz168w>W+x15b(VRS3-0VwY7w7%uZLJb7#1#nqPN4tyop%+y88hh7zF5#
zk;0hUT(C<`<*GSjDxfgs#v-GdWQttYS2(%!rbm!oh}nq^799M7z&or4pM_OBbNSj$
zD;+QT%w0|sdMll^&KzV)XjNWU5i&gBY-`1(9vrKxZHvJgAvSAq_!<U6Jz7lLck+#K
zojRaLcRJO7|AmFQXwUwcRH4qW=AL$q?svA}s+hF`Xj^Gk=_umPjSs`y1HRNO$ZnVd
z-e+`$QExue(d=32aYOgA_Ts~^>@IEXRczd+b#*O*@T+1SOstRL-JW_F$LrM(b|xI(
zy$7LUxhUV*BELI^p&SG%DdONqi1{1eis!2{l)-X;SBgi_R$1=Fd~2Y9pyJnLb1wM6
z#Yg&gR{88m6cdiqG}e()h8PF?4!iMwP&k=Pf{Yc_f*Q{{e<>3;Ltk!dbW?%%(^5#H
zviRPtj1Byi$fT+mAzY0*@0QQ8TiYcQAMMXx*G|7_ke=k}>Aq+t)pH&|;CDqmnR_do
zggUQ(n5MamN4}ve@>!Y0G+@&I^)l$lKXkcd7;MTFagMy?{uENXtbgGD at h<yRYL#V-
zR;YvjdcKEyD^j0y@}emVfheuEXy7ngO3rYXk^VpQvFg_P52mjiZp7PL0tA=3AtJbG
zWMps08c4iiI#|3Q3Ou^~qfG(Uy|lBI*K^>1h10Hbv}0QhfW?4rk$Q;QMuYRnx^W<$
zkL0n<tK&?<QPi5!x&0yDXWa6<8p14G<gMB~D5YOoO1kZtkiIL2LtHYsyq0$O%R{*1
zzhd3au`a|5y7k6*IF>y5T1q%ep at c}M4vJlj(wf=9JoVHt7btFkIeg{vs;m7-Md^Qk
zEe1_DeBUzvCI2L=swC3t#nYHN2;cI-_7cM`fkq`Ebdn|A at CJ#|`>r(6Bj7pt4C}#M
zIi#P2g!j*&H(}|L001pF?B0k^wo$w#34A%MHZ!DhpEA#85UZkb%iV<wTrSgZ9I&~D
zUfo~sc#4)MUDX>z%u{H5zy2a~58AMQGGHnDoF2oqmUGqpY7vzt9Vg^yicv_t5b5Qy
z3I*~(^xeBd%Gs$<>r=c0Rcv|D5=_F|kFgK>7p#F)IbYR2G3JJ`BFi$*2^gCEL14YV
zHkq~d6t&3)hL{)!z?EXxKxzxfvk~7$cI9-(;;v7|;}l2wKUUZ{RG`SQ)NlZQ4l<B~
z0k;(DXsr=}-A_4XvxvivrsWw#yCjT0zHVpZSHUcqJ)KwPSMPVYz)trCLU|a9K9Vt2
ziS`H9d6lX<xNuPCn$SNLvY?RV3G1HrUZoffB&q+5Rtz=05~eEOKA-WjaGEdkl;u<y
zY71L1(zgV6>G0d9R{VwtZ-n!I)7AO)m%V%#Q)&FSf|R~9NNHhPng;vUQZ?^IWoiZU
z(z=S?uVnI<TUSrQYzSG2)A|tLy8~Whtbq`h_3 at by*KaW?GROfe(>yv`O3|+mU*6gR
ztD`jdcW=T|j(~W~W4@~1o^@}JXtz$l#fE0)K^ehDPFRS*dA;!>Ec?)ZpFYQo3G8OX
z*TCo8Ige1_kLTUGHwgk)^hHds{IBl7p|<7P{({uea5`=<l`8N_x|gNACt*VjSD at 7s
z5)5?Q9sk)g3<j#j51*$E$r@=|q4I2hCfr}h%!ubAsb#RAm2A{;O&bzvm7I<5fCcmk
z>A3A(9IN|T^20sy*;77$tpr9d^uq*+2#IJN#4ZRWFJ at x@vN+&~W_C$m3)dplZn>cn
zpm}GRn4k;pN-DM at OS)3+a3|n&`_zxCq7Vs3*(+{E)d9!n+n6|m9x<Z~$6x%z=E9%I
z^Wq7W(y8*zQmR89RpKHe(1ihn6o)P7QBtitfHBKfovsBiz^LVakehkeT!ATR&4%2K
zOU(7)h#uj1jC^PVlr~5F*m74dg6m)ugC^JRrjE=i5p|w&xpmOMCd5WMAUCpp&TU1+
z#-}e04QrO#mlF3O0x}^+jP^1)`|Z|69Va_<(K(XloV-)@87~^jpKf?{r)5uH&X_ud
z)j{#daaDB+xGT1QNJ#r?v!N~y_H%t=ldfd8I1cqfxL;E at Y|Zn!E)2zCsrNUTAcOT|
zxMBa at c;m&t4fub6fZ)=>x-;+(vz@&~V8w{t at mWZ_@8;a at 7^ylGitLk!1bS{ndnLrC
z!N61d9q1J#Gg`BnfS-7XaLq5C*hV%SBC;Yq%8NnrVm$_bTJjNZayNdKN`eA<?n{8`
zr|Go<FEuk4oI+BKJkelb?*-5P3M!*k&x`(lW7mnpEK=Wj_U&~roPInh%8Rq_OPLvj
z!5G7hm#JSPb<n&Qf2L8Wb}B;TtVg}E<D#k>@M$gZW{R_>>{>WL at BZoj)xjRHGaiT!
zjg3*lf?#TYo#e`Iazx4X1xrVTGa0E)mMQ$CXQb!>e5piTgZci&l%VrcPjoAdI)O|3
zhuaCdmuKU674*V+xr?uUFA<upkKPe00s0hLwW(XM1oM+ at FnbjVc$2?PpB$`a1FvNN
zEpKOiO}O^-;GvTDPrOz8eH(P^GFtt7I*tY0(1YNAhgN^j!eqbU3B}<w2{B2cfhZi0
z{0d__V`jPWoPkvE>(C2br|@3Q%I2=}F(ytv9XmhAdF&EkWZ{bfkm+;JUHkYeD<x?D
ztxvIgFAw0eJ2@#V>0ZOlC0fGybjh8PHr$~6xg~QlI51S(tXfbY%)rs`qO%2OHn<wc
z7q~`$DHn;%fJNcC43m!lCr91e7M4L(H{=<|S5|%FfB*upRc=`ZCydj5vXI#Adab5;
z96)e^W1C#Qf(o2KBgz>&XQe+xWh;=xTR-e&-d|fx at G;1TtI!`6cN<v*$buPpE^h*H
z0aG3sh+>o1_bNAS at VNcaT1N8DMs9qTpGWb3HYN0Q3ug(|Cfpnnl7fr~;!6o7duB-|
zpat-5Af&h|8S=sG3{U~2Ubhp+IsfY<ARzJc<kjDUoJ=d0W|{x&60FhrnxMYXag*rd
z-*&MDIsxQNjnaV)zCAK;=G at 4S3I9`jk-d6(_sOgEU8=Cnz|AKuys-prf=rVZ7I5Q#
z1`uRErZM?#I at I-PjbHnYh)h&J6cg6co?TPUC2kG<$!p2%mkLZ9atQ?=7vAo@!3<CU
z)Xq1qnbhdmH*2Ax83T@|9!mL0_8%o?1;`^w6akj9;M_`~*!;_e+f}{I-a)(*$-K-!
z+fb8-BIvTLGVN0t6IUISpMVD>!{&p3)t*NOWDE56Wp)}B_Btkm6Zp3!#T;n1oy8@|
z^lY^e8DEKxd^eQaf*hI>h^6q8owhW>(AEdoyq4v8A)=;k$^(P5<^>+wK$cFSYbGt~
zy^X`}Tkr!NAF_{FCRTn;4zwOx(ASL{;4i?@vz^L$l^;A=K2Jo0=NtY!WMNu=b-#8y
z9n$oasCKeOGGL-`omC3e%)7ro3e~nnuG!%l at KJO)X`^oNJF`y_mi+wc>e3!a!r{DF
zx+D#$q!pReX!Of0WT`2rx*@ggxQNw~vS6to2)iOLKR~U9q#-_Tfx)Sw3W8-PFEVCi
zcI%0+WA;jkj2Xb9LM1XdhvcMx$;L at f2b4V`+PgX8f-xk6J at Qvl;T51Iyz2LVRVsvf
zW#<Ax at nf$x!UhGfm`CKn^$vvs^$&^Dpn^CLQ0c5aC}(V<0XV>d*S{WPH68 at EWy<Bo
z2pR(nybg3cbTBapcG?hxBcO+1aRs3$Nbj0>JeQuTPR at 1g;oBNZGwp?cdScNvV4j&A
zxjI>mfp{*xQ5zO8AOVJhM8^_>YF$J*%G1ZoFQ#oa2E8^xj_Pj3%4 at KcTI?ZrW=tIb
zq0;p4C*kgEiwhdZD at L9=fs+K`FBE!9Br-i+k207qA~gv78Hr<`FN_rr+{2+Hxln42
z)~u!r+4v9hZ#2z#k!HVtT@}(A&Uzs3EOd=5)Jybz8Oyy39rf5ben`$~AzT{O_2`7u
zbSXgsuhrvTj|f<lUF?*-p^8kMT)qBO<sCfq!*=I8gLmFZPSpJavSb3ix6S)rlw#x_
zU!;VYVX>bYXrl at 4Y$kki(H?K5OP)Has{x|{NSs+8?dTkqPlp13Ov&aQ`872Aux$g=
zCByI>1hNWq71&<pX-XWtvtPWOBURHw9@|;$3p5G>5#VLAvxI~19^n{U)OYHh-#&6l
zDhJolP|lwx8gM55r3}MWX`Th#m6nTL5YrH6wgomgt?jQc_jwbt$}QjPumekXJx3)h
zwXGEa+9#iG->iRsa3lU431m#eir?H`wxAo>l(X>JeN)EK_P}G%gd9Z{9<o0Jq|+t%
z0w2hmv*j`fD+ureVDOW?j^3ByZ!19179pcqvuA86sfPo}AwwO6-td?sQ84A`*RFZ&
zg at FUKVZRJ`scm7l38JR)max2sPujQtX+Rn~0R9(>Kd01xOSLueZR0Xn_{WS#LeOZe
zih!wUcJYrkG|25kT52@<sv4ZSf(btPnLbbL$vr}=G8~DTH*f7{9jF1xc!@T`(;Og5
zZ2|ra>%r*IKXO7%{nu*Nbd5q&K34yH``eWuLG89a6<{hO67hLB?IX;*On<4W8+ at +B
zpdK#v)A3G!O@*QJkDf;d#|Y4EvkWc(@4Bp#KkL3&bnF0>!A`b~k(8&~t;PaKQ97mZ
z-!H2B-FM-hr5F};7}YhmC%vOqqD#e6mp#c-T7o36Ix7UT00HIUl}04s6leIjRIMw>
z;q)R4LyHPX3Lo`Kx=jzJ6a!$dfoc|wa9Hk`rucGy1}=NlSJ}Ajqjn(CnY6fEq{80l
zoBrE-JiZ_3tcGP!W}PoxR^Q=G at J*HT;6y9(5Ak~$v#NEP|Ni;ay6bvR4omZ01X-so
zSu1L=7<U}S$a-YHA2wl80wug?1G}*I4Zd+eA?u$_*EL5mfPet_kXo#5a0|pHnLe-x
zdNb^Qa9Mv_nnmr0OAWRCrN<Y|<R|bat7VSSRic3>FjVcEV(TYEQowB)TAQgvY*?oA
z0I}j}+94zCUHbi>A at t>YX4$_|FnO9O3JOw^wPAbQ%TrAMLb-2M&Oqd!!+*qtHju6s
zb<kwR^1?j<4ykMHHvEb44E3_zXF@|DgMeCpIbo>xFCuojDyd~|=70@|IUdsun}JJk
z;xFe*Ew%#Ikm9Ws=tcnWC^A?z&9wbuAvo&}F||oNO%gcH2%Ore0gwl7Th!bM^!1+Z
z{k`(1QM4RS>RVm{XiPGje1T)5mRQr<McN11h7sVOs*h4_UBgjy0>?Y{nKS~U^d5<S
zUMs*l;l`!f){d at q+eiY0<Hw?-0wS1vU{Cl_w0#YRW4nmkK-8Xjl`|eKioPllMrN6J
z>iY}RaKpTJ^Ou1c{PU~@@gaF>@T8=|{OilKFfdoFw!C}TlRHZetTBs@>g-Yc4$L(Q
zEEcqeY)(<ak}(agG75Yxl6TzTww29)G at hA3bZMowl-_bZTs`)eG6Nu8vH)nlHj=tQ
ze~o~GcwLmqj<}u~e}<qDdad;D_wZ^!Q9cO|##LvZk#zT8Yq7k6Nrcd63uk(R$UWwO
zQ4uqt{Nk%m4+W4AsT(63#pA;dX)`d7VOISH{y0VZh3KT1QGoq#kh~H5;U|56DxZ#=
z at _z9NaE@ef12yxH|EYR at kSfdl$gKC$H0Y!YXPjK-Z1dIY91kb$kKPvGftquh9)cp3
zyaj;FeO+h8W^fs6EQS%mh_}c0q-e5VQ+O|GZ`Oa*{17pV35r;^LTEg)P<edqcAguN
zgpeLctVzk`PD|W1Cb(_5I7i5TV~QmMuBrdtNWXQ(j7Pm1yU>5W2iI~-b(^0?6bvdM
z!%_})E at a#6pREw<WQ%qI>J+>Ui3>@nCVDKzc7ySnx+Oe~yy>HI00lt$zg6pK1At4J
z?TFMVK>c`bfC=nHPphujR9jt^`nW0ZBu88Oavn$OM}CHfJSmaitk+q~LfI3(e{Sq9
ze)!Ad!>>}VKo5>PYOCIw{Y`!I!)FcSM><4Go)!nmjWq#@Ict$c1x?cl(ySr;w*!jU
z)}ulPcUVsGMzJZf=CfKcg-==Du4Y-NpoM-*SPIlXU1gv6meLCB7V=%G(h`mY3EhK|
zmB9iuJ}~5L`f5vsgah#~ibZX at f1fp$<Am=?6g9iz2x(Tgh3?*p(g}R_h2oGGcw?Ru
zs;Dk51p7|Ws_s`wxtlNOWXq2#B(B2%a1lYNSJ+W3Pos>e==nY005vi%+?AR{&k2=9
z($bT8NV at F?FvU+$SC{Z_?i;<=R96e}PsW#IYk{;Wq5 at kdBC}Ku2E@)Xe*`1bhVtg>
zSC>g`UxyEz=OyVgUqYYchYaQb`&$rJ@`c_GM8t}n`^gNAdc2T94#yyaP;GHWc-%lw
z6+^fM?NGh^2^%Pv*)*CHq%p`5hVm6))Vnfv@(J4kbN%p1SJ at LD&o1TlesDCp$Mj8!
z4WCoNuY4wz&u(pPP>Sxae_ZduiT*mE=D8>cO}{1yw5!vj!|MDoBoF+)13MOd9>pNk
z3|GJ+aARO=2;1u9=O#!e7D**B22iE4<&-;>k&C=E@@LU^i_mc}D)93Nv`(?5Dh4C8
z%;4<7Ewk_tTC>w;S5j6)t(<Y-cwYImr$rV-Di(A>(y7P$cc(<Hf3%iXO{LuA^$_sv
zIx2aW!SMcw>D>Zyo{rkUzeYwkdumju_0Jfl)0gkh{zW8UA}F5d(+K(Ua&{Bkz{dmd
z8s`H{g at VZcbRo)KYT?S;8){Ubcot==7qU6!giF*mE~KY-z}c`5lZUk#Y)0uy8|3XK
zN5%l;tBZxb_n3#@f4i at kFyO-PELvt+qXy0r5d3(vY3sJB2D(9BZ?7(DpCz|gf7({t
zvuK0v+ZXi=oZna|*se4{0f487>9<ZG>~xpOCB5CN>yzdw%e`ZJR;X>OaZ%`-AIa9g
zLktjhBq8V)-Uf7rD%Cs~b?%JgMlVlH!cWH(LI*;n7V>mnf6UVGA=I+3Sd{RIIb+OD
z0cUdgk}<UJFpO`wfv at C>QTr56TaGq)_i;!F0OOW3LHCq!_hzX8-{Q!wKR+;qs7i<j
zoEf9qQGnD~oWa(B9l~$v@|xL^6L-H$on<ufkhve{RA3ygGc3-IZ|!Jg>$9MQ`*m at +
zSL{#ng>z4Te at Hd}h!8;i(&Ia>H%|aDX#1?4Cr?OV<$u={E&R?6IAIHHbL0r!-=;ZE
zrljOe%Z{g(MO&gX)3otO_+*Rryqg4!QX_P7v*;9Z3iYWB=qm7L`H%*nNrDPDPbo&)
zuMUp(b&RS>Ec;tj<$mm{k60Xdov&$mthx!$rLiD(f3KfHkK(LO;tUJ>LaT56FMQB8
zL_i}A(lDzoPVc3%Cs&8h!daKKMytGIV+s57>VFw-o;^vQ<XP8%IEc9dYjZLJ{|UX3
zu0bSUU&42NBJtXs#_?6F;l+K>Ytd>R*mDrF9XvO2JihrVDc8a5W!@~H+De9YAXT_F
zp#Bhkf6uJpuqs0QU(7lT*WPE%_Hn2Kl-!z0ghR`t(`XTbQcOrZM}|?ZU34WxLXM8j
z$n>o|i;TA6VJIem*&!A9y5Fs*BwzDY^R_TCs+y=R#V?3E4zw~tSsP-oHE?Ru`r%~R
zG~EVy1X1kBx#Gsa&e<?U__n^(*spiNLEg-je`4Nq;uT;PD!En##s8U7t=jzhezNg&
zHXMZ=*bZ)U7+M&Y$pD=d%9JexhvJHc>%q3i&zqT-gjB;I>Cg4&EB3F9s1<%<j~L73
zajgpYaMl+yJGJ1$Q%1H|12Gx_9`BEIWmEh-G4AE7mql|`*R*RNTZE$rm97v1ZH4H1
zf8VU(8)Xrv_kk9M+|-$cgRgTmhrY`*Y?9^aZwyp6_ygD_ysJU;2v%8XNltu?;#8b0
z3V?13>&j~ss^-tdx*Gc7?~h#=g<wGRN8s;GT76<Wvxx-p<v$v#LonW9XFb-)-&mSU
z6lw+;8uWHcv%Wa)OK{;pYi_o3n?<s=e`(bLQn^!fCedQF|EfTcD1*4%J7vl?qkQ|R
z?+jET{CEEb>*I`}*HTFVE$R}9;l_?dBQ(U!kEH6NO{kAy`~^OD3>8~P3lGNtyTa2S
z4wla0Plzt+oL-Eby!PhGF9pF<b$25`8UJbV8LJfB_eoJo38|<2LKmYSzFw^Ce;sw!
z5bds~$9cz;Vjo|TD~h0Z!roIP;ULHLX`zR*bch`oCRoB|WB at 3V1(5+xzYjxhSuzO#
zVo?ud=Jy?musId;r at i`0W at wxG4+u_s(wm9TtV4IZ!l(gOg9xv-0r0(3IuGQ1Qzs=G
ziH#+4H!dt$t}fO;Z1BXA at +%Dme_v8jYYqi0T1Q<^0>%lDOjX^;q1>f*`wE_fN7pE|
zk(n+0j$I7dbEOc466Gf)rwUBstU~(Kee0@;Gsk{Cc$htQOYw2J2TtEDCljxB|1RA(
zm6R0!t{P6IXS(WAG@}fy#p^O0cd&7p*eX at bFEbrz4xcS6vEPagq)kH&f2->K103WC
zvdI3x)ZW{IxmvW5dwz-#IhK_I=!-`T;jQN^(IWIo6lm>mpvNQybqNNKihK?$1kMmD
z6r-Qm)h3 at vV?%}58B!CgIGL1!$^IeN?>M^(1j}k&T?C#lvh-&v`#+A~^E)Pq^kru;
z&i1PwpDqjc5I`QqbTQ%|e at Bg?UEbe09WG*KBo=VFe>NVOIk#0S2j$NRK#oGO)WY$j
z)<q*1U_~WRVCU>K1Fj6=grtqjxc;X*t98{scdOL9qEjI>#{<56dX2cCp?YJyiZf$L
zZMpR-8`iMo379<jOcEOC*9#+oQCjG?J;s6;pOOoEU7_iA{dW#Ne{hDLA<;&&Dhg`J
z7sQf(5a(ayQcA8wo(bOlaKpbYY5z2kNfH=y0D{4h(nWiSbg9j>BYd7ySP-(_!u>*(
z(0etyu at pD{GquT6LBp+V)nhf-*v3V@(bTh`x_`(c%qCGElu{v49XKHDieu6>CgwD0
z*Pp5(X6)mu64BCee_d(<)<(sJylO}fYJdaYmr^V+yt?BT at qk925e*>6bnoArBo)sM
z*2=X5#7rv9M(B8G?dvAaPAhss#d|n at fx>1nll$T=3KR>+tVhSQ>)h=h3M#*+sFp{N
zzRJgJQ!XHLTtX+1#?n|p+?k4jyR4jBVXDVK0xsUyh4&Ole?}!s2Hm%pi%4WJ;`SzT
z-jiWCr<19s<Ib0<g7zIL?b-b*UmaAzvSwsPFEUix!?($Q_qO7A=jIdUv0{$LO{g$6
z)({iMOm3&(l<8x6J)BTFP9~72o#h=<A`$)G2V-kw#cvj#)rBvgHoVIw5B*Y3S8JZO
z3^vDyTjHw2f6LY1)<N at UhxWRE+X7}bpKzMj`9SU;xKF?P at -ltjNT;fjPOT7)nmv1#
z7**;;-+3_3&65Xa?2&0<cxbD8lFvCWkZ~5CZ!r6a#Sn*-=$1?FWP)qw5YzBxB!X;Q
z<7hc(QDaKv!AxXQ(_>*;@F}czybCHOn(+Yi#^fQde_&9tzao0nnTzP_0x`hb{~wh8
z$q66)3tmKmp<<tQPcRfQhv<?^zSOwZe(7y}%xvp-l|Ovv9-DLXsiSZ6m~04Pu3Qiq
zoJRz-4XD at 6RvVQ9Fe<{d7x?jH8j}0$vaDvyf(1KiA16q5_by&K^c!!auXiFS$F(uT
zqJ?ZYe+zuE at I=)b?r1q?QBne8oSz<fnYRl4_+Arkkx;S%_0<lsZ6cQcTkar62aXqx
zrwK0D3dq8B`?TSgt`gfFY!z)61_c#%o1v=DWd28e^aaDzQ>e*RI1kc<#C}^AS6bgO
z(ZjsZ7P<ct3?A4;@I8q(3YK$uhn&)DFb02Mf9kOO at 9meorW_Z-R&O>cEKXA^g8NL{
zbFdy1SDfbF%KUXXZuB5IL~p5wr}&m7*&(oPyeBYLjoxfe(}0o-9Suv>{<myi(@rK?
zeaqeV+vIUrk!b%+DN$&)VEu?}wX&I at yGy(Iu;_)HN5N}D8vh4Aore{P+mHf9K17QP
ze;bsMxc>%>UYy5- at P4_q3`U-;_JITGeRTXM()=R8{3k-D=)6Bz$s;IN49WU5Y=yd!
z(XrwHy;V^y%7tiUehHKK`AH*^0Tl<n<e at m%^joFka`u>aB#BEq;@8J&#XRjeXwkF=
z<ehq^yK5Mr{nGPu611o<-R-Kn?)-{Le`djgoTD2Zi0I!^kAxZGGK9~F<Hqt&R~6vG
zgVBU6r-nEeleHicVG;Qrf{B7FE^84cFE(4yzs3YNQRj}VV%$$}(;D)?os}4xx7u4E
zUeKGvImOOxwClcfQo|L-4C2JJJk{nK>?VF!N&N4(6$euglC(F?Z5nW|u}fq&f7e6^
zJ-W!3HN*QK{vA&ARQE^k=_($=u1IG6Dv1S%hgTaK*^}@2Wfa+a5Cn=C at w&isfhkkC
zOR9&s4Z?K6J}!Q at ZOs_}ZS43C<VrJRM9PP!jTc_cl&xp~g#-WSUg`E at NZT5jcg-hS
z9)@+J2uA5%M02C-f7YA}tol?Ie+273%-It|VvB3Xn-><&jfF$0{}~o^wr#haqSH8x
zlgM4JW2gX?VLnE(3OANacaPfR?d9s=iGLw%GyaCBY$XI6-8JH at tA!-Uc^=D->5s#B
zZCt)Xyp-{bEaC6yNYmt3z&j@%g15p^*|bWMA$&GPbTm9;j#I%ZymI=%fBxzEVQuqY
zw2WB7dnwUKh=ebRj@<Rh>xNH#Nr+Koy%d#!%uT~E3eT#ueAQJkuSMCMNT2pugJFPA
zMjs%4sL6?D$m7e^R4(89<k at E2t?yA99?h?oK&2v75m6Eddpu^&0rIA6Z|hb!I!-4_
z^Q19VNWZ*H6_6?E1 at EWUe^aN%7Xns{G=5fqhsU%pDpZr;3}#$+ymy$Kobiu5Z&Y7}
z&X^e%lJe{|8kvfJnHOEGDOOp1+myDkU7xw3L=9zXGohiY-SsuxJ=iX;cwa06+}|EW
zqaj~__2!2OHy0hHlZW?|v^O^Ef@|PwnSk*>#6U^^`;RK%jCay9e?m1T at cAPmXNM6y
zeM7AZv0ij^ne+*O#`No8NO!sxBBFQ34I$vEz>;L4V!ViQ8C2Mza_#YX_e^g=0;gB)
z8J8u;98k)Wej)|`*f8ar8qa!Pr_~QyK6Xqx7jzql3Qo?^K$_Z8A=#cm0S1uyF&eE_
zdnA%R at 1R~T5o`Gie+p_JbeNCo(c9gKB4JL{x9Fgj8c+OeJb4$D8Hdc00+ugReAqP*
z=UNGTbOf3{G^MYdpD{znMjsX^&vC;Pt>~6NvWwxJ?#_E=)p7;?c~0o-&iLS_d2IUf
z<FeNJ-YaF3+gUmB(}dwXz%rJ(O&-_4Mc8^2f4rAxI^@&le{pWk1XS;SQ)a8-O-TG-
z-GOZ!r6J<!IYcw?j at a^o_Xe0hKwBR7q9-6OE43}bv}Q}juLox_rcgKY>IbPRJy5ek
z9k_S1AxB#6-9`^q$@=Hg(A1 at R@UHEqkmAX5QC+21is->)O%Xl&2S&{Do#CYzI=jLe
z^Z%T~#J7~Ff7S5N*$KC=`|9j<7fd%9%a^C-sxwO8KY0?^B)^saIfPD+#AqJFCi%~L
zSGawzrTMiab7?Pch;P3V<4Qt<q)_AK!eeHlpLfNJkYKJEAo07_%Rjgq1TZ&tg9q7*
z4yW<gVsYn6u at mp4I}G`bRTN`m<$0W*Oo9X{65<~%e<mwo{-n~Sl{Q0huNPyijR23{
z!OK#V_Oiu~Prf$-F6H?PkOQY^+_y--L``@4aT#JK9pNSy;q|qhAW#j~b2#{-dU)L2
z+UT8jUOJN%x$JPA<XC71n(e>l^QLa;^Oa}KlWwLVJR^4kgsY8wv|_KIG5V?c(n>K`
z)GYE$fA48etnbfB!{{=DA;Z~FlT^9k`~bO_z!-fI<S+{)N2BZ|p$_6^=szxpFE6HI
zrdt&JDIF2vzBvErl+PeA{$xIRW^-mq?F?jz9gw?GfXz5e7g`gaVlJgShlE1$E3ACa
zU+(G_)4SkK``0eAiTH8!vyLUX_?cC;Do2Y)e}h_+jBOJIKP|2fBTQBntad?gkPBsE
zY~w0FRqKCsQ#{p!Y{<yNk=>A^v}(Qg>Ci*`^~2FEjbpu4<2=Ojb at wE+odT$+Xf+W!
zrl2bpVJQb{{c`Qx{50G1YcZacq6tH;fxI=?bK`Fy?yB|a041KPv?^`Z_Vh$JwW`LX
zf1j!M@*2LX^o7Ydw)RftSp6YEKM|~L8A+nbo3(TKJ=RmK%uSL at _At9s=PL at Y&NyaV
zR#t+l!wI@{P4~s5K(&=&RY+<#v)mQ$Fw&)H3~D7Y_)#KY>@|H^(n4TRk at oa52iZyi
z%Iv?XVTB3DmJROxra5Rl+=B4np0p*ie}cZ0k?j1|zf4IJ<bvmn`bzl6Wg~`s5k&Im
z;#_>k;uD~Xvcy)+<cgCVk$- at R@*ZAOg?bfun=dIM`g+>h^u)%{$s*pH7=pJB(YQqI
zkLfi`8 at S6DrumYo>x;I)o7&yrCa!EmJL9{0!&?iAMhBsk1$ZF$7C~Q=z4q<Df8op=
zx8X}qOkX_3$2X>h%vM>aW5FYbOoxVY7R<pU@~RtCs?px9eJYHm-5$?GS2-M-%#2GF
z0C_p at wEVNtDMPbK9Sw^M3wuG+Un!7ZL`?zs;$D|Zn+r>vg<p*yNbA0BaP%65w4;$=
zlG}rc3{d;84v){@O&YJH1b$Tce}Db4gw>z(LO at MU_-f86ZISD64&e at _I45v%O(C_#
zc;CfjvzsG7XLGM^Q*HWOqp$X4D-zlUrqj%kxn8+X?(Y{_Ib7{<6w%Tx*kjoweKU-=
z*@YEgiBNYdesCWd9E`_Mvof~irIx=@mLNf7U~Y<LrsVPe#gNM}^b1X&e=kE6c0i};
zi;j3;<s{GvgcR#PFmk&V;bY>UBTYJGb8fig&#s(iAJ7%Inp9)P;R}A at -OiLm4Q@~u
z!zH7}MxT>Y?DvZ_txW7Zqjs)NwPS4SzJJ=#_Ad1Q#kmw;y?4kWFsiv)+1<Pg$aAM2
z--*J at F@w8mlkiR&D<KAje*!?CUSc6YQH2~^_Ew7-F^3D-L=DX|Q1&h at 2``91uV|};
zj<%WX-dSGr81KF6>P!o5WP*PzePR#?TObtXJ;j<vS04n(!|K|pV@}_nt18=7=!x%=
z9z8N+<AFxekOX2Mzd!R~j2P(U3utAZC=m{VM-*B(tG}C9IMH3ne^RIQK>HHc>K5|w
z3omWsv%2x4HF?}1YP>~Pb4As{(iNt?ZOq>1<_>XWRZdBArM+`h%x%TqXYyOoL9Xor
zs65wZ*e|g3$SI;^bu*<3jKJnWHv;G7>L`O|c$vFScO)nN>PH;p4nOck+y*X`JaDfG
zZxlS>SwjiO=~Xf0e;$}u3vP52UVVS91cuD>;xf9Q+nj0uQ|Rad<56k&jsObl>F$|6
zxx^1=UxxB)Y7z}(4(AP2A})R^d_1jsR-^l$bcC79rX2_Zv51FDTS=9bV~F|`2CF33
za}UWo&V4nI<;D<6YeK$`qJqx|D%XqtW^o3A5@=puuKY7&e<({XvN6J-zvm*EYUF&-
zhd%S`2n;k=mqlw1Dk3RrkNGOg6ow2KLl12_uPxsEg5%*@;O-PZWy8FZ4LE>14yWj6
zwMZR$e4<)}mh(>KffifreV&ZTir@$?IW$&cb<lY>sKpB?ifhibS81fEy&yG at Buf6I
zI>Osq$EYTee`;llyj9l#1@@Hl1AL!^&17Z{wfk!o*d6jh^Rrppaoa>%ViXQ9f at Tfm
z)el+5p4AiRp;;^(3#9z#wJd7ywL&F7mqthhDr<hcIq>erHlDGg^Ew}zX!O;Y$1>?}
zxRd&8&U$4B;?H=cEWSFiZl>q^8Di!$ioUFH*I5{(f7r<?ho;7tZDF39p25&Btmz7v
z8a#HY3L*(w<4L-8of&Sl{$mtD^Y}_Juo5X1Q$0M#pgIHIvo*CJs0yS$Z`#SYhe^eq
zfuQ@;d265Iolw15Jn@|G8SJ+Ny|j1 at nZG_5N>_?pq<v$--h*r|o94on3V1&>-#%6L
z=A$lae}c-xNa{gV{b=KaxCi(JSJtIs24s~{d`1~uANV<*>tw;{i-Z$w7+7-VG}7~S
zg`X6KXo@;nsHUDp8_KlTFABT~tCnAcf0%8WGA)nQW~v(QZFRk~u?)NBoB+h-ROj)H
z{otx#7TN4QXH=5aB0}WV)5Zx%DA3q}nj228e>nuYRS-Z>6#?dwg4|;)CvSApj-xQ(
z;3+VZE0Li`TdZI2CO6!#Saur}EvFQw>-(y>Hf1AZ<AkW^b@}+NIRmz<bcQ^CbsjQA
z)^#0_4ouYE{R6)lbG;suTBPl_CbU1<oA~3c-0s3TZb~j at PDmAMN@b|fzp^$D(-36u
zf68I6=p2qp8l6yUaidwG&;?%$`gP5QV)tSS0x^ALbPBpootOZtn^sfdEfgCHeX&@E
z^Np7`8d4PUGbJ%1R>2}B>J at pqsfRRQtIIo+_cu!KDXu{3!oKeNyZSyxbXiJ?IDs4l
z;HPn%)!u?>0AvB>R%7|`2%9?aA8+Nee;~hgB8HED`f6EAe?b7ziy$Z{&4&z;w>I$C
zwI-HT3r?Blufk9n=(YFhZudycqYYxKdgVS3k-$-*YEZuo%+85(eGz_YzikJr%^K3S
z7mx8PfdD{SU*_ at I(|d#<&mHivG~Ecj&lp at yy8*bLmAUywt?YUrWIfmYKro>af2drT
zht(@xDy_~>)_bA(^^n+EuwzUkqlpYuq8o1>rx%9(ftEEc<{$ARtYy-hoP3^;^`2r;
z&l4Dw6uW?YQrGb~gw)DGXdY!!klnxCC(=r3Lig<#DndB*5j}YBK}dD=HRim>Sj4rR
zJFl*~<U0}jiekELxb9_-&xrk%e~8>mHcU1A+Yut4OhuFKtt)=fkw{?^v5kH*0pqq3
z`I2_zwI+IAz(yepmsSiFnG4+k{nS6F4HR`447oA!0rN#R+M0Lt3Z2*>wE1pwoA?7<
z!N43aTjNFK^KrzObEb|}qMNSF-`1u`ip3~8DQPaTl at UNbRTB9@ij~2Qf69rBxLsZ1
z at hNm*e4eX>?E~4T?^%|DU8JkZlRjDOnAZDa$#8-F2Nt=g*#UeG1i$5SVH2#JBrU3R
zpxK;t^Y-u610`~0NI3KR(Hnh1`Gh at G$_>W^<|PC|>P%_?m{&8KVzu{OU6378Zwf|H
zJTB!vY2ZpUzClG(;{H)be_`pxb$cOY2EZes>a-U_+4ARWm>)+TX!8`D5buIOtHn4W
z4uj-qN(ftjTM7HHe6_g6k8=KXTi&t=@DRKL5`K0rvOWHKq;L$e3WhhwB`G>mu)ur%
zO0n)i-mZwfUVGP0GI0)0uYlo27NQdr5Q8SQk{kr<wd-{mHiR8!f5U=dgYk4t0wc2^
zB-{is7e57xtg&j!cVU1UcL>di8ub*xj#mi?9pPLJbSjOpA)YLhCKgBP?XpYCa5woJ
z^DMLg`z2lH6bjD-YV1dj%>`jwer9^!!F?Yioq^k0GaV~?FzLk1oJ-eo`ax8V#%9SK
zBqc~s&mXsR%aoP!e><(<9{wX-=mj0iI~&Y^Y1fKo`G!IFNSOG-;jMM!^_Q{jhw{?r
zj0^w8M9R}ZFWI23yc$RJ9P41{r)-ClUA>mIB*HzJ(O%ak+=(n82UP$GfwDdAsSp$V
z>gs04OvC6TOkm|u64%7hTh9tB1iC-%a%Lpie<vB0M0&DEf2r4 at 9U5CF>~<$Swf3*q
z^gNCafXR-PstK*E;ijbWO>4BFLN^ZP@{WfrFKn*I3uC1UC9c0^ILwb<mm(|pjkN5C
z((qi#06^E>+)LmyDM6f}A?Utjb$ZToKPS_|Fuvb}+{wQVCWAv`U&Ny=?=P?R<a5jI
zC;>M*0>sv+e;T at fzXBBQ4xe534>O#YH^^YP8-*K95HxjkSY3Anb5?qVmHBGk1#+II
z)BaW(^|_(qK&uU|e4z$h^&bBcY9u(L3~;<+K#LwPgT9vK-4*Avg38S89K<pDhju1Z
z`j-2810!#0N8J|6>^0JSK+6N!sZXE`@Z@?OFmXG3e|0C$`z=UlX%@}T%~Y4R^WEB{
z^|Nj=$b)lXpVI%6rTt9LR0*O#$?y3jC#X5NX4;dJjrc86A^fDKUb>5%giQ1N(syU+
zWX#5!I_jTebIN;|GR*}^9o*uJ5$@(XZ5NheOV61xl=5y`g1H8jD&_EjcLSN6g!KH{
z0nI6Uf10aB?7Me>VsiZ|*zpO8scU){IVA*S%flC`#mh`G-zEB;NNvks33dR7QZq%X
zP{yw!(lS9ma8f51x8d9_6b!qkD!g)n?_$0OyW!R$l_vVKbn3dMC74FNjV)o9mC62o
z4Y(D)ZqSXXCQwgTH8_EhG93u?q(kOQt$ogUe<h86B&#KL)H;AmpwG8D3kW#@^|@=)
z_(EhYQ?pXq>I6T0p%vL0g$=gPb?40>Towh|o}^MHk$OZ_pGR5s-Jq$P^Yi&Se*_3C
zJ3r3H9)R`D6*u8i`K;Oyo^6GL?-YUZK9#;rb6BuPryT~^Xp~!7-^)Qy*}*<H4)z2x
ze@<}>C71dle6TdyT+5~l#a8Pq6iF-<y93);dB$}woDFT~f5WKUjQK7^2zI9_3}NRt
z3jI!pE9C%q0z4lBq{_X5Lijm+QJh2XzZYM6UuZS~RsE}4Ft0lO`<9c|FLC9EA(lke
zWDnSJBC3Vy?PXOMSHCk|puCV|;W~J}e<*qnb?6LQ7xg>q9T-QHw0e*yq5ESW>ecTS
zH8|w7OV^@EfQj(!_)S*elw}&tQw04Lc{gbtfEPZuO14+diZ->jaAk?}GUby}r4r$V
zH$ertMx8`BO3Vl3p{-Maw;@cYx{P6EEQ?*!W#5rWH=;>LSZctddo+up%%T2Uf18*D
zPY*7~*M74_eG`VVfFLCvznp#Obk(x^nx+jG;Yv$zhy#e?)|v2=d~MM1KSy|=;a+iP
z1 at f7cD{V_}^o1Dbvx@@?n_d^vuaTV(xvq$@O*e=0(?3NPeg9_ds{C4y&U8J3n6EEU
z=P6W8ul-c3RDKa6Pv%+MRh4a>e~Lu1sL6<CG%Vs4RN-nN>_o~^qC~I?LdsrcPd;CK
z&;6bb!?W1TLPgoxJ8^Gz at fm^2jE(A$vVpa at 4gY?1x|2SPJfLSJ^CCu>XZwCIwQv^7
zL6AFCk-WQEm~(hn23Q7+7jYpVqF4yXCo7Fz5rz!S;#C>pbE$#B0a!>Ae~@TqaPWc`
zxT`G~P6_eZLEnxA%A5#KR)<DjDUFD?Apr7X96%%UY{{s&$>5$nCuEWu(_6H2+YUUd
zyF_bBxhQUry;6AVeP)kr9<2zPA_+p~GHUSXw+=cOUf`Gk@@?_fLmzC8G-w&qmEd#d
z*h<{C8Y at O0{rZMJx*-i0f7h-pgLk<htl=dR->(1A;~kmdYChcY1LAsHyQWoV4r+vg
zh)>o`N{X~VZb{MnWjiiM6QEecd}V+(pGVn_fdJCvZgTCcv+xWhb at ZpvnL#p0$pP;_
z>v+U_a444aF^5KYZNvN at jWEdJ^449Ya4ZC%WIfLmR70=JV8|N!e_gup1`gx^(eyWB
zWauX090sOxB>d2PwL>v%elXe!V{sm##qyXJh4ubf6k05ce at Cxh0EU8r`1ofBNgk%o
z_(Q!}s<2Lp|CO|8>BT+Tc)&*0vl94~+uR9Fo<9aD*<k=iYL$QjG)AUBhDCTYx_fi>
z;kK{-+pz>Nf7F03e+Iz$d#AvfV3oK36oMY;i07D$B&&t>flO`%S*tyU4IYDHHO!#S
zZp%_e?p)w at YRNGty+NFUAMq){e_)x9&sxfd1zvLFDWr~q46Y(0N=(dH$dQQl%f7Hl
zCCHoEP8(!y*he_VGz?yWP06VXxZhADz}pqzgTk- at UU6@pf2RjcG>DwwiD1EOm$QXr
z^4Ztm<s1gFOysvqIG%&<DtWiiP;Bi?+cGLq`X7h-Qj+hN;$?JWbU5^Q+;VTieHWAm
z<*Sq<_pNTN7qg1b4QHc=fS!~RAYaMQ#Rbaw3E|sWiH*~)GooqcuTN`5esSbC#)Mg@
z-k8DeQHu8ZfBr8UC{GqP_U2EJI at e4hP*Va9RnI^(l|yEZhLtpV*Gqnt5fFj7Q8YPD
z-N?<~ff>qaa8Qf;H{%jyKS%8)0#E9$trBIJOY;UOYI=5(f*j>GJjV^KaSJU^*_N@|
znd$b8r5N&chEBMn3=Y#~uL8U=>>F!dFAQOzKNK<^f1I&mbIU>ZTy~ksbXIFX-C3}O
zMYnH4dW$ZMzDjSFWA}=Q8ZjK%wG`x>U`tOYs0LU^WNbZ)NfPMk`3B(|Rs6UB#kG2#
zACfJz<QTk&Uvy|yxt*FVj1zH6Nd`FDS2KNc%J+aR>r_8(H^=QtFp3IndU4KQw^lk5
zKvC!{e}jv*T_$vr`bC#@Zw?3ghR7M*0}&OW_x2R^n*4Y_^Ka~pM99O#+(o<tL~H8@
z?m``3oPZtSBTn|oxQyB|b=VrrKP>!RHDbC=^@RnTEq~FdBbvn at Pw@A^eiSr}$4`v^
z15(W)5+#30#!JKJ>KxXRRltT-N&=JKpU9u$e|ab+$wL`ze$m_o>2CO<va-#`*lu9b
z){V8BeY*8P{e9JunOG~@Iqex-_08u^q~JhH?M4>uX5dS73*t`Mi&$CPuLLmGHj<8v
zL+i^-L72}aMVIGZbAcy2v9M3_Qo0;uS#&D6P7JbxjAc4Fnuz2BZua$nFF3md4%XkH
ze~~i6_=12`MbEkzG+XL0Xj at 33W7dZeCrM~e!BbtN4wxS!jWbXfV<gHa#CIB9Z`U;J
zE;lS{%`$PEN+h1noV#$5+QkSJr+ljwTacWQRUOBzIdCv#l9lIWYgR;>5=jIHQzWs+
zKOB8{?bW)_{$l2ek0H>PJsc`T)oF;&f9AN>e5TFr35g2Aqge;W;RrS^4(c2+6B?<N
z?IA|tS%LD3&sXRIHjPL;r};v!P_SbEnQcJv#4mZJ3`#fEN5&pP3i?>Hpp0l at czzkf
zpSH_aTNFg3ceSK}vP=|Ko!_}hkqb~^t|~u3J|lKEyqV{O1qT(l7Gt8mMx!1%f3uAp
ztX(=to=*vmHa0%?rhQZmuR~;Se$y5k-*-ym#ROP`Or!#gwwMP^S~uop_;vgNGHv|t
z at sOZ#<qdS+bD-^@s5dVhmQ@*fY*ODAxtB_h1D0-w2AxITHKs8C^vOKR;=`_DS6vKq
zlo39dxpr6_(PI#41?rZiq!ohSe|KwbfUF;r&^L(<+20jbU8PgX=$+}kUDaAt@>$0P
zM at OD2N`0 at as@0VF^O#A_;s>I7D|yk{ovg01_EQH at k=aOrR#=XaB!Jf%?iWbv<gIZW
z53tG7uQ1A2)<`0Vi~5zEr)h|UaMlKAZF&<0TzucsLurE>gQfDUL^+A>e|5W^*vaRX
z8iX*#f$wLNdyr-Ngtp4I(qo(a;EvUsG7R;OXO`m&`L9Grka{b(1b#d%WF=|6BWn=9
z^2*(h=-k23KZcm8LEdCX+r4LIy*CxwTZyfY#aTWa8sbgbV^?)Po-8g06gseJ2 at NUd
z4j&dPJ95hcyeXJnTCeeJe=RZ)Cp3I;%>-x6zu>!M-07a)=gZJ#gAs^xq^ZA)0fshZ
zZ3;kZ;$Dt*l~xnK{;;U~gxZ6ur3ZzX;lB0qw>soPo_d^vJ=*P_g#n4|eFJ%y91ee(
z9)fCgmgo)zc#h at uQ5mXOCAlLw0jk{o#8rj!pJXw!1VfJC7W=CMe^IoXg*ZtZmCF9c
zOO&~DaH3Rq@=&h6SuwoqK2+)Xw_tk`^O|i>GL&T#l-jpqyz1xhhH}ZT(vGoSVNmLb
zn>ADvYcmW$(j^YWo5q)$xdAZBRBuOJO|0PybDOJ0KV-3!(f>sG!^8+WLRiPml=**S
z4(C++%fI#GA5@$0e?@2L$!tBE3IqMdv1I%o!IVzU{N#Qn)wwzaQ%)Udd+?iMx~IK&
zo!^jG>>Bh11yDaMJhe#FV`Xvp&t!s%d02g+6s*349(`D}vGqgCg`RkiaF*Krrnr7H
zeqSARPk|P3&@py!e}dxMD%f^ApZOkIyB_RY<x@`f?|Llbf32^!PYoobGk^F#j^v{o
z3E!_ew8}pLlX=b_#o;l|;-CTC%^0~t4)Dr4lF=k^86cj$Kxb|=fw*w&sL9}e7Ydb)
z(#Is9-z$%5^l8<cds!DiT3?qbhj{Gc4w}onfru)&DCD`==(q%id>unYJ{>9~$?uv_
zQ_l>kO@@VdfB6G9{BGz%8eNk1Upu%nGABg-RjTRsk-?w<Ww_7b6B~8BVYF?-gA*cc
zXjjZ|)kH46)C(dJ=M1eqT;M7xx!wnr^&P0-Di{+wZmGAk7o$AkFi9*of&`Ad-)W&V
zG at +e*hrYs0vx<4Qgj^gxkcK^3754h9M~5vT0b0tIe?s%z0^zc)<fcn}_h{KG)Kwo7
ztvLX_tIc4iY=tC%LL(c$+^<Y(c)<6Wz0X}c)>K>4cyf=TNZLL-hh>N~y6nrqhIJj%
z7-4ukW8Ce$02*9G=xL<56Tc8F+51zeVWMI-Bnx#t*P{!(zrNWg?p_4lm2fW+&?8}1
zbr7RIf1(w at 2kIO%OJQ}G;->LpBvCKLKl%;}6}dMRbiDgC8TYjY0;pOS$l2TILNV+O
zS}RXliSQM5|4N8S6P3 at M1anKVhygiA#o0Xw_w4na&3BNxuXeBT-$t|;x!s$Olfb(*
zA78ot`INx!Fd}jP2<m*h?3{TM at sYbOSYH4ge`yQcFSaK6VirQBDzDxcPooO8 at 6sQ*
z=9<HWqXu4HNsJ4AnhBnC&8TORzwLW}Uk`yIUB)-|TD)|AAAl##u28v0t6Aq1eA!Yj
z<(6x#A3B#{Iy$knBP at Wk?@(d!cx5{T+B0i+y1#Jq#b5YLoTkzr3f`gr_!>5fA9x-Y
zfA`VWwCp{PqOvf0ws7{O_%9qIl604oSuV=#&<j-hHh;OMhaLN6pJ3K)>fZEhV~Csw
z;8b0M{R at 6HEvF$Dp#6ejvacfvK(^fT02=2X+FXC1>4FzXx&%Q(u7wpGw#|wDitmT?
z5LPWGXK-IX^FUnBbwnX2=7Y^%;Z|-Xf7p3QFrQ_j{yoJah}e+GrmtF~GsR=uhw_iB
zk^kyjWV7`NQ7+HBZ7|Fob5v4+=Ymb^%TNk!j}7IrRnPLBVy>-xsNz4*5Wyj#hUh>t
zHP*;*rxrZf^2R#n6~J1Tify+v!waE`<ke9hbe$5n2q6T!cDe`QazKak!mK1be{Gg8
zMVE@|r#81NQuO?e_LN_JDCAUgHiaj#S{W5Q&>}0U&$c;xu+Bf)keApQv(x$&3kXmb
z9mM4VSB10ib({6|1)a)HbR`#`w)6YXCoi@@#g;14t6)Hvq*X`(JF~jUxz9B&`e}CP
zLE52j#@c^FHOOfAWl4a<Lfd<*e=bTX3O;)S^B5F8MZJG6;7=AeMCnH`ZojaNPCFW>
zC<q}z^SAF)RQ-M6v_^1JV)~Hz)4W%eTPl<0>gfh4#Na!*d^L8vZ*iZ>7D!_fC13=F
zfOe{kQ$*2$`QL^yl{_id!iE*-fA30 at JDIqbBeDO}t?Uxzt#7V<qeO-ke^Wz2?Y}Uj
zXC!UgyB&a(hi-5 at FqSM8xL0f0LOYv`6%3{NJ)Y!EsNk&#ibFnu0>WAUgQOkjPfgg7
zq<04T;nc8_KCDHDe2WkmS7r=3F6j%3O_a42JV^HV4A{Mm-)7YBLq@>FH-Fw`^t-N>
zeZZAna`lkh|8ui+>9 at auf3zYA{(=hjcU8oa{v1yy@`i$>TdV)(AFzLpo^^XZ8MnnO
zIx$Nr(eCK|VQ7@>ST7?kO)R8K3TWzJ&0^#_1WT=Qr=Z}aW?Ya73!4k#(ubjX>9GAd
zc4gH$TYDuf?b(tA`x?#3G}E^E2--{mvuK+27K(+*ujH}>+5o||e|o=n+P}8p&_)T`
z=lcRmuR|hmuyXU0MNJj${6Rv?qy|rk0M2d at 2gftRgMM50TyqJ2e26|Zz!cLo7-`93
z9c#@o_Rw|wYy!c-oz8r^1q2xZ%3fnG_(wNvP7- at 9il~hX at Fy=5ZoB(Q4DqSwHA$#=
zL6#@!e`PGO1wkbHe?Tu-S0{nh2#-4nv?Z?mwnxtnlol6Dou+b8&G7I|u4<0?t`gz>
zrN8&7b;|`cq9AP^*sK|=8c*SBeb*Y>&Ewb;u*IAH7WQx$BhrZ@)tm)8VZJxl&}onu
z9c0jstu;x}OTc4lEI|5I17Og#lAw`N$SRYa=~gRFr<s?7fA~wV=BJn`z=?yv4Vgcm
z4K=FFc;*tYAVS9l-qYJbYDX=_B}q`c0cU?hBA!XFrHrmOL+CQ!z!o*1qR3O!8wi-J
zTS9lHD@|vol(U#9C=}yhrT?s2GCo4xcl3OiV>vqjZ%8?O<+3SqPPm<MU#j}j04=;{
z9|N5qo^8vse;6(;|9p+)!eLl%z++mEhzIjBFM=*$Wnd<HqaSZ6{}_TSE-ED6<jFYr
z)fryC!1~DvB7<?J@&zAW=y<My*W?P*#*lQZoeZBZ;5#ieL}syEmD|}cxW8*VD5D6j
zG$JDCP<0dPVeBLz?BwDd?~U$ibax}@46<P<lh7B<f8>L(Q%LkGhohA&judvp+Nynr
z!;DPNTyW*z$$$@Ftpr|^=|y&fiPz4X)ZeHc=*s}mncEKIcTd&J>BeRc*NWqDab|;+
z6R at O#LohC*BiBQrgGa{ZIT>FM(QtAV+Qh2!$fWV}Dqy(Gg4QJM0E8r%P`kjocS;7o
zseI1ie^Y{mSHD7f*$0jg4#yOV!d7=$MKEc)x26%EZJ7bIG>d0&J#WxUfMPySGG#=C
z;`Eu48sEC+u|G7WBw(07MCE)fqV9Jv2;3vcrzleTzTP=dK>@u$4XOX|18dco99R6>
z+x_5=_u**SA#wZ}V(;OzTl}63*nG}Kx{G4ee;wNaOt|QeQ6-wx+5WB*%hBV^I&Ff=
znd`2ATQ3)8X`0STV^lF5>O!_4uqq~+zO)ao<9&L&5>TIa;#}qnzxv$IQCM7NYCqbs
zzs#R`x1PZc1XqMAF`>2!VW$un2-~UPHGBA)Wy9tuN3Y^<2?OnFVWh(s%op*MX#CVE
ze-c at cs3n3nfZ$|m2m&-N=^HC|?agJo>FFEo$=jdz|7A0s|1vr#cz^)$9D>{~P;ZaE
zN{bf?UJmQA?wW;{<a=R59dO(Igle7!Q|P5RQ<l@>AYq?&(U6k#A$*WGD(+e-)@=x=
zEeau_s~8Ctul50tj$87s0WaBHu>*rLe?;YjI?p{m7Qy-wwMcbU=_{<+wHqlI(<ReR
zkrA507&=y)f>(~3WV<TU3MxID4uwIeli%!S$yKN-p(6xx7F<;^ykpT?DhJ+iAqTTR
zQunQ*QVekHAi95{%6v5INx9r4nq at Q*zZ{*V0eEg^`I$oglcmjLdSU3tjGX-Ee_Fq~
zAz6>2qdEm{L1DIRA~sc>TO(>g@}S3vnh>C=>kbV%cCNzAg_|aOy_XrGFULiWgQ3A%
zIuX%YlO)--kqc)PgYAAlkwcz_Kg`afV}CA<EU^v<#=TXL-F(XZNe?5mX`s?}&tgp-
z(Rd0gmc^7e(%AP#`9*@q+Lb~rf1sRSeldG81PPNsWs at 4y<d}qMS97Bjf+sI3TNF4p
z-GnK^BH{P#bd8LFA^IL9WGcrgB(Aa9KP0^4e`O_gM9ETl5+-$9i+G4OIf;{xZTG-J
zG63sFx-~xuIAPvosk{C)V0{vFd&9JZO<9d4<oyW^R_c=bSWKwqHQg18e}@oQr7Wz;
z$2exCjjcCBki1~`k(|a!9m3Z636PJ&`EXPV7bDgr(l7T$UBJeNldg_am3^Q$EWgz`
zqQfy6EY{s#K|q at v(f<pmj7}3|6IWFKuv+NxFM_SwJQ*v*pRD0vB|Vfhy3$s9Lq!==
zIst*Hr#Lh-?8%?V$!&MIe|ne8<lPYEGg-g?(O!QWOjnILU6{#CxR!x&gCl?@#~)+}
zVZ63eJk(x#N>@Q!uv1h47L at RCmm|ZopwE;B25j8C3?P8~5Ff<!z2x&g3KX`lCC#Eu
zdxr4%L-OtqI{@?^ICIBtGuO2-qkFjxDett at nv@{(8_&kFa*<k^e<xJWd9GrEmPA$G
z>O=<jTzxdAufebV=APcx9W^2B1KZg#3TJ#nQX1{6V1V8k9KCewzZ!g!Fy-o5I`GO#
zS24W<&RhU?P`IG~IZ{|yHhTCB;qp at 3T+5=wdJiV#c88+w7c$k9d0aw55?$!|&!JPu
z3`DlkwE~+HdB(%te+)cI7hU4qOL0KbnsXA?F%-06GhvOI4hr(-Mz{;%bzfLKUhfL6
zUKV-H*IK at IhyIOI6UQ)N&|b)gKVz14u$NJkx-0yMI*(m~U6s)?t5gwRju(OpXY%*J
zUqOGsk>75<UulkI8V6U6TOY;scG9sMYCQcQ5SJ3Wv<#rqe;-TLv9Ekc5s{{%1)&us
zGdGP|<v-R<UcdLqZM20D<_`{chcU2F6*8L-2Ytf(z?cX7;Q-d+%ykuq)@o21?avFe
zhx#TT&F}5N?0G)O*^qP>F~$_BJatTc4w}NC&0YR9Eav=@FSke_dV}#NH7+Fqi>Y);
zNf7Hrb<Z%Je|FgZber{L&kdgW;YEC~@=c8}^P9&A&qDP~=$g7?nZ`|GwgVES5<$FH
z?fiSeRgZXB6_<l(w(;jqNG#YdJaFCG(l&M7s%zCODTLe>fr5sNh~aDJ1l#{Ob)1By
zScA+)Jkyxf$Vs0WBx%)|R#?$^$@srmNIOs~I(n2Fe*yZ1cNc`2guO5oe_6UNSzit)
z6c}UhVv0%x?;~vo)uw9q()pp$TZm5gmE*0(?7MP{7J|2d1{1~|=VWhZU_D;_Xh0pX
zKt0!g90w~8*rnnyV36lqT>UJD&s+5h6wTiE|5W4TGh8nHyb}7FB2edgM{9wS45(9r
zr|HxNe~JMNB_SDo7&zC;WpTrBWk&6LJWXGPrXNUY)y!Mw270(V2t#){(eyNdP#V_^
zwZ=q$=tp>3KRgV$6+dorr<>QP2?^`c^N=stIwubaGyPm5+LY0|ER`57T<N+xjRS at M
z4S}-SItdvbdn9p4zb*ywCJk*m&w7vmRi!|Hf8g!oS^%RbvEMjN=JJ&!JabtuQx@%K
z?{yjfp1 at oK(M)9cSgjHJGNptyd~c-t9(8BUXesOJ at MX^9v`6v2jZz~MkqT3~;HZGQ
zJ2j_h$y0an=WbsS;rMi)*o78Tg<6G)B5KOqIELpa8!0Z5*DKOW-F+V<6|yPio%!-f
zf6o#v2*>qu5}&XtcIak->amzaUsktw;kmQ$f1D1|ZILX{SQu88z`yl~iHwIc)>nR^
z<CfqO<nb>>J)gJ+nF-Y_SIKEx(JM_FOHmWaj{#qmb5YlY)!`42t{TzJWxM+qe8Xn*
zH<{8&2M_)A6UiLOK4t@~_ZkoY1~nlee at vUYDgcF@#pYsM`3qRw`d^Y>h7%F<K|i`5
z6!WvO=7Im!gy92|MK3Izo_Z*&`He3H!PJfR`N*xRU1b!JM8|Z33-UDA1WRGFFlM#L
zWO|{VC2VyXB5=T*&G^Cz1lM_<3{=!bLp|ERK(<gNNUrMWrLpC72`o|KT*<sRe>h+C
z>VT_N#h6ku&X=?zp83PKDpMt;iTlS#34!7Pp=g>ty+%<F>$%N73Na7js$%EXauT_n
z_!Etxr-Nzv0?1#Eh$oD_IS-MdW4|OrXiHA_NeSKcj#A<6P-k}0yDYBtwr5VVSiYcd
z|C?*F&<!C-pRa|3ULu3(8-)@Sf1F)kz#Hl`>CD;A$I`*psXdM4?UF{{vr*SrDo#&)
zKE3o=7yf|i{{^f|rbDiiGwPMN@(1tpr%7k at j3D}OZYq<o^#&Cz28S`G=|sL-GiAp&
zCECHd_ACi{FekMj#ge at 57mrK>qH88h%v(1#(`Tph6;i=cI_GEumO8lmf7<Q at K6j?J
zk@#x<yA1B-YKzQfEnc`}(Sf7SqSmKGbh$(@t+K$I)H~=b+SgL`rI&3m!psV-9CbL@
z7pg?6<HVPl9|h4n`%D%rrW|e>k_W~JiFr88;5k2GAKOQEY&2=M<_3s$6!iA)O=P$s
z!X*VOf97;~Yf6ut%GlsOe<v;JQFCbMa%Xsk#~|5J|D_+ov$oBXqrG{Zo<^=ZULBH1
zw_e#osj;kNG(*7J_B~Ry6Ubh at Pt(JxZ9*p2`oS&N{>^$Uw)}hx_;`4rTIRGlBi9uK
zF4r(MRq^ygPL_?j!<@RO!xF;P-IrBT$_Dsts*ug?0;kJ6Ig?vgf85j^c31agFUI9=
z9ptg-j^%RgUg?pbx~V`&{B?bFw9ywCJe^|Rsu{|mtiLsYxz_KnmXunN)684Q%}xP7
zm5Zb`Hwme(=Gw<3;ri6y=Ge+KCs!l!NgokNH|y&MVC}<h%t&^QSgFEF-M8{2t at Cz3
zs%iAT(|H4B&W}5ce at cuRq1yF%yrw?-lv9?1_zm#4vxTNO1l=DNwwIM3(DUixw$bxy
zH4Cmj2aioRJSg1kFfp6Zx^9rwmJ;bbcK{#z2}SnsM=LSkt63#7XF4M7S at BGWbdB1u
zJw%A2u5%3nHkLLE at f})CQH=kp at 7R|52VI;*+P~8nRuqeZe at HiZ!+DmGb6z_zwlHuq
z&8sz%r-3C*<L0c72!drU?S1;+Bw5KZ{0pCrFOy%b9iRtj)%}MFnkeLC$=!1)$gUNM
z<wai9T_~mWviK^YOIxbmtg#d)#AL+Qw`{ptGGD|X;urRy9`&D}Pm(`^cMKnTJ{IwC
zXZfirK?}Due;c}jc|aG*c>Lq*?ukvmZ`A^VR`n9B*_zQX)zpQFCH3KM$YM2(GWwSu
z>Ae+SHXndTRXxMC{|p>KnLYxGJ6Wya8jv^;XxWPxG>Sb^gHa#Z`IL%`qgw*BD>hnQ
z at 70C{EIv&#BNYeE0ZA at z%o(qVzVRm~<pLulgs5<Pe at q$T$A;PyZmH@<R)|1=4^N#P
z{qEoY`}^Q$Z0Z;J!7lb*liz_gR8J#sv!l6uZnW>TwOJ!-UMP9=m=nU`8GPV`O3uu7
zqgjtmJ$Z*<t05ai-y>&WI;h){*XFRLj8N*nooTYb+4k3)rtpM{5Gh_jI>&bAFQ<vK
zR0-%Cf1%I`C;g;eGeG8X2@!?ngMmpZ4*(jX+pIso)0g3cG)Ib at qno_2@<A|ZY>;%2
z=Zl1%HLKsUCx#El{GDDwew?qKlp^l}F^!w=5f09uwcP4*&K?F#dE1$QE~6MJ2Kkem
zT(wUX at mE5}iqi?-%8a){5392~jOF-FF}(7be at SI_`yyzGJV28ZT(;?3BIdl6lPHqx
zRiaijJ)o?29!VW$xwq{(Kb&R-<AoE7k<u|U$2+)F1_4pBY-zaeV=uuDZk8!n*Vz6N
z6u1BdK>EKT3!CZ!6>yNsZ`Hmz%H(COc83vSk7w6Y8)8v#GAYQA2x#?N&i)Wj;C$!x
zJxaRow1386LXu|0r$OV10JkzTSPQeoPFhm$bsXR+xH1crunWEL+D)YuJ);WVR?tcE
zi1X_XloG!q8~h|l&7ENMlv)RuXsT9SQ4YSb<1 at Y!2B*W<Smk23OvckmyIfA8sDpiz
z`%Liq+1&Lt0C2S}ac)eZcc?;xW=}r^6Z#a_kAD{tLp{~9i7Oy>Sp)^p!t-;BjkAVk
ze<j%PaC&u2<l2rELbKJ8Pqw#ceHy!6t_#luzTqNKT at QhpSSrtX<oC6Pcs7=veTt`1
zr$SqU2e7{-J1!<qPbIoQ!El^MHBz6G&rnC&A4HL at zak}XM)V2S{z%cXUzHlOFivi1
zC4WzOKd4n%{wd$;*`^+bB}>cgBf_%qv0W%1QB~_3dY~>#yjDx&qzoT?gcXFB5p0&s
zIO{pUxIau^MuPA1s(Un%lnP*p%<Q<fUfZ6J7WQdcynI-Y=Y|DbAb9cr@>20xQ)(N(
zqMeG`cu!Iv_q5Y%@(}sh{EuAN0dQ)Qy?=)u;l}XVe-Gtpb5RPl`XAeUXk`zOHN9CT
z!mOgn_~C2C!a|Y;5&3ut9B6A#fd=ruj#nx##F`L{>@yS&$jd|Q`m{pZ3aetL7qnVE
z^YrFE#@c4Fj`z>Ixv7dTiY%U^j664I*RxFck!4;(Ka<FG8U)tJjA+fJC-`o>Lw^tz
zq_$Y!4>mi at 4#UGcxkf*NFA9lk3g{R>HYMT5uclTL-zMwBO=Bb*uZOd!jjeRS;92yn
zU%gv>Cx+onb`RNN=mV)f1?Z02%FiaTd~)*&sP{spAOAh19wabj at 17wDDVd6FbUik~
zgK9$efNN}}H99Ih)>I^UG#Gv9=zs8^sDZMQrgr$^komvbe(L}<jpzWYkxChhm=kI=
zLL2+S at iOwbQUU-2C%%{*6KKiUd#288=s6rxO(dYm{H-=&FI)oKMLxW}9$dQ4L|T`a
z-{T15WRP%#aZvGyS7xgEyu&g+=1_TgCU+^3LL17u)x1#u{Z^L51ZGz3X at 6DHJLLA^
zp^7*cU|bjeyn>crA>sM0W%`n3Dgc<6I?#Tp-Q!hXWpRaM_VVn{Nyh+aS504+q}Z4&
z$LK-Et^&R98uE4~?JGlALG|swWsuAA)EiHsAacT at gjc0O$hR7Us;o%U?j<OT{O;wR
z)lI0Sw&qwF?ysU&B+R*u4}Wu#cNFIcRr>}P=zg6ti at Um15}C#Q&L&?xx6C at q_*q^S
zD0R<Tg%zak+j?mqc+r3V;honWFus58SF|j-Zxpu%uNYgxp@@hZf`%P4?pO5t5favQ
zNgvUT7kEMn+%k0 at eJjtI`Fpw*XQMso6)`J?pU){1L1j!B6p>OED}P8=*~6UGW?eK`
z_!%a{;ogP4V=n`_Y#L`#9<*zx*ylEzju}g%dK+9p*n%h`igpWc!3XFFFq`vn<3;2q
zf6R#bva at 6^Bxt$Lg}~NWEYI8^oMlslc%(TU5Ywd(<hj<akRd7$^b?J2SkcdZ0YkoE
zneTL=$pm|!B}j*}a(}C0a5BDZe!rdSN+T10%e~I#guF*p_%7Q=@;O_y-HEgx!hnIM
zQ6qM~7Onf^dsS4EqH|{P?zsGmP(&!~rsQuC)I;uM at Z@=Y1PL59fT11~2;f~XaXx`5
zk78KuzELszN;V{znB|%k4C7IAd$1rVt at t4e_Z9@gO|)(wi+ at mrltBpO)MWaBwm3I+
z&}><s*Y1j^`kbRl(HQ2HA6wFhu)g5g0`3N<rA=bSJ?gr&Q}#oP_8aBGaJ{XU%uxKQ
z%72L8+c#vPh)!9>MML=PQG262wT{2F&nm5hP>6 at -wn1<57rw_`l0mjWCr+ll^-~qt
zH&veJM0VT!6 at OkSP)1%2MT(&D`N0qQ>aQ{iROay)3`tQ3Br!N6&LI!dczEvE?ZH3s
z{7BRlnLr5A0jtvBu;+UFT6u4KoX2)FYW5zep4O&dOr~gDx=-@<jqZwfYip4$HwPUA
zL%=voSg?!-<&+_x#U8^&@RNAeD8_Q7Gfp*HG>{hr0e`ri^s at D(58OZxtk!T?^^mD;
zoM}}x-FAg034U*0+&4mHG)TysM2%ND^Gf|8)0;1%L(QIEl#$(LbVG7IN0qh$7Sa}C
z;t|x$>6DPvn;bkWBDl7J@;bAf#=0To>JOGycHzGl8To)uH3%t-WC#5tB(1HOelNf_
z8IcY|<$vz)iSQJJbhoeK;fQINnfJ5VPPkSXpHd-mphEE%?bJRAdMBW>PEHGFB1gNE
z4#J(|X8oDsw3$fdm#p&Yt)E3_?^nWq&sk*RnqhHb=n0D&v4g(12kJFJdxSmO1~(Y$
zymj7s*Mq$;%zxsI5463?L8&1oZZLW;U}vIy*nhwF>ZUmk-NIv>Ir$PeaakhDJ15%?
zcXtFYywphzNQXk|Um8qI!nf1bkhg3q_so{FOfO*VPX(--TsKkUtBrjv-09g5-NwHk
z04%6Bs?USWiIRz-FIlC<cF4xh2~o1l;Obctk?@*fYA^`x_1uu_w!QF0T^*B$uW#Yr
zihnaTHuW!ErYQpsX?=HLt0d-0pkP at 2TM5+QDcFiSmoIQ3mdgC@Y-jZFzt<5pqJG1i
z01?+cpaE$K7wS8?9Q;o=yDN(ZIfkd!!o7-Iz)zONpY-|t0Z+-T0-ee9sRe8R_6ev(
zZk%!q5y{FyM53<S<@mkGstCTb9O(<3SbqVbIp_)mx;qDx|Mi<~vY~hQrBS5{GWU7Q
z0S$x{`NRIZn2`Nuf=zKXQLeZ7&yiHa_h_YI2`Wx}NQ3cPjD5OFmkZND#EzucXfnI!
zvs#aw-Ahc-A3i7I=l!Y_mTeF!I7goPys<-U**dZSu*j$i58MWJ%IL(t0GFh^FMsT?
zErM_klOC$;ls!n(?X#<3;B6^2G1fec1PvF&a)}%ptp{|XF`Gk8n}0>?JNPeaW^|g+
zd?0|~k|*%Yt>%`k-sH{KYhH87Rjo|DeuH5QD%@}_&ux|ixx- at k#!%_!mNQDmZM)nw
zBW?)I)n-5gcXQM6#k(e3;ck9T{(o0c8%QH4qZSXb>Npx`#wJ!sZ2gYpj4??he;48?
zWG(uM$Mt<j*Lwa%a!>IH*M;5+er7u0U6mT8rvjDDe++KXpk-s^?&%@PWE~ETLHO`F
zAPw`}y!?$qNp*)cy3Bm|9|l8K1qP^o3faNp{D`7AqLoLdp$uU4A^Ol=nty)Y(ryc5
zYa^1S<tE}7)oKIXf=8}s^!u+jdreG at 3wT6TxJC4z8Q`Nm;)@%lI0Ju`a|p7b2*pwn
zuImQKDfmPFed2#fyUw_2BwY8Wg?P^r##2R)zySo}&BebCCtpsKQPWb0FlfwN at 6-;C
zEnDYKdP0(s1{U!B-HX#qFMmrzx*rvx6S<`RS(QMVg0g%^FBB_v{cusJ^nvav{m>FL
zDpe=nN-dzF<sDb&ZS(+hgV43&b{3DQWkjbIV9ow>oxVJu=N8ws26Ew}Os<l&Q>gvM
z8_u=f`g9QwsV**)fkx(klc_yAG#uFRr468IrBCPr{j=GGi-4wfjemOQ+Kd1hz9y-%
z$f?5IK(fcwm*?T4(ti$Il at L^JOm2oo*ir8mx`tBUcQyZa!+5au&f at D>wi;irc_E&@
z`Z*sllO*TFii-9!6Ai6Uu?cElsgyD5n%OE=O#>Pf-7pd(`guH_tMQDtRtHfmP7|Ro
zFCQCR4gksens+sM>3<8@;Bk|f%D=JsUzw(pil1ZwCCSrYL;UGb$lA3na#_t*!r9hv
zy%EAhII{mK0K5Z#wmubI)Dm4P{#D~4k!GVD6tBz6K_hOi8d{}Y?Ak*P07Iw5gBVOQ
zBxu^o+E_I>Ys|RjlF4t$5D%fH11$4As*~n6le`y)&}sy-4S!GxFv}wR>HsEzD`TzZ
z8y<FjdA7S*YpH6bd<+h!O?)0_oPRa?;7U1N2hM4>(?S!!0g9TnP9Sz;G6Xl>dIva$
zEwjb`j*n|7oaqo#tk?(G2)orYG5HFf7)KfL-E?grsX{i+b6ru4?c#h5Iyk{~6)ZFI
z5NAUH4J+z1SASFO;q`wa24Tnk8zzUff3r9YIkAICvTY?_s at u@`8yIUnx_SKS?PJg3
z5<~K(rthv7XKTM62l`^gkDxZylRO7sur3XXvsbd|dLqBPPtg&}i}kznc0RlxW(5#Q
zFp7QMnUslQ+Nn3(|GP at x3>Lo`2N43CUVLnEcDN6ebAM|nix+8uJB^8!20RoQ)=cM|
z?+R*5WfF!*X)a?w2{f3iZ}Mq<CKpdSCpqi+R{1yIDe4K2V3Rm7Pyd~G73G%kZOa!U
zLzA(;BDF)-d|!bXsw5MwvXi4}UT?jzq+OP2k3f8rj%#$Zr=WGw)d}%@NcBJd+*tRk
z_ at 4qT_J52lhFF3`WHsS93h{uCL{3GUVqny_UvIl>)={&l)VHm`#t=^HW9$uWmS3|>
zsviUghT-z-a}JN$-mE+-IDwF1ci?V$-x`Uq0)c+aT@`JcPE43y5gKYTVftIIf-okD
z*SAxd$af)m={Np^%_w%n2!#m2smHNScfKHZihtBv5{q%5<8G!uNKMMo0La0r*q~AE
zg`UYCi>%*gE74vpTlV?Ks*GCkL{VWj?iXdY(kz*8R}ert=&GjbfSFSl!e9`p>*6UI
zA|4u=HKrJ$mz)e0WL*2I)b5a}qs*g-t569V6`1ym_QhjMW|Ztu6eWhFDZdW>FzZ89
zOMfeJZ5*r^a7Xkw8zo?l0}oFkpbC|X0oJ6BAP?X8=L{$ZoPtzGqLZaPTS0#2J at 9{l
zS|3ceEAJtyhHKj2`F~U|Z7>Kj#nWaPuSfo5(C^h=qie5RGAs~RKp1nQ-wx3<Zues0
zrl>;k6RtwPff+i~xvb+SC**Hm=Po=d1b;yS>&+9x1WS- at U(ZTkH~H7GMKzPPdgRsz
zz}NWEP&I)!qy$xw1mV5bUU=zP3w^<AbUpCuO)i#af8d6&s#qKG+xgpToK>coYiU6>
zsqyG`7Wo at O<b>?5s{jG#7lMW$TD(?JSIv<L450np1TXg7$Rc!BP#an2^g_6w!+-nq
zD;_Bufrq;c(*aC{6$TP=TN}OVd-D6}&|J#XM#kN!9#X-EIhT(T2Bb>;UWl|OqKBK;
zo|^eHSm|i*5t!%WiDw|}g~ig<TJ&;s9CpOf(c$~V4*jSh4loUz2{`@}m(D9uhmFyA
z$?35v{ylZ6)3)5f5_Q`Wtf<2jw|_}W!O(e9<L-%NifED)o1=5_7WZ3H5_PJQPByd=
z(n~<jtnb%C&LHIJG$IWp%Zs}`yMNk9v#YmGG1&KR&`g0t(M;mO5aRhx%cn)3&KnFW
zgoQRkN$fA%xT_iCFqX42JebcF=`Pn^F_mEAXYM(Rn%CoW%s+K`_lfqBr+)?P>&Z!o
z`Z^`V&km7Q$Z26azH0^6%_d7vA{bvBU89_#2`|rV9xNrLz8s;iv(SOQbs7~NrA9Iw
ztV_2Jsxn7E{^ieUL|gkyTX^Nb1q$fBX|JUzCsSs(5NR309g|N(n+xRrwMhZ$d4uT8
z^thTYW2`-N+yZZZ3A)^rJ%4C?-JgCJ3+s0dvEM=;^q`Zo@~G at dwQYY%rHWkwr8e`a
zIN0lK87Xv%Q9_apFW%o!+=_z+AzfBZp>CO#0e#^9yFV4)+>~nrtYOtC^5sd*n*Q7R
zPo{%AjF at k`*mDp8|Lw#2LMDxvxt{&MEB7RqEf(9<%)Ze!XT11GhJT|-9~AuiB}To*
zqibrKH1R4X_P&1DC at 18ejDVS)$|=B!meW^_dkgSjxh23VtFr)4-1SamsDpYPp21T;
z&c1si0#$cd6`mnm<yu~+^dtRnabGpt>F-RzDM_C&fCptesT52;7I8I#{08VcO4|Z6
zgWVTCVeC&^dlhq6Ab$@`U0lP)^5V`W*Tu8+OTZ^c$36>KX&1DQ^<--c^!IhkFbk1|
zr>^aF93EK8vF8J+{h%#aGK%;gYD<TV{jm at GqLwo6lE4c<BvG<=l=H&B3b>VRngSUd
z1%*XSF87QceO7$=<|BNZg5V1PR?QWiz+j8vNLkbM%<W!KbAN54pB&*iFm1gqq~#qx
zvv#D5PES0vJX?|WjsGyX$rd;o7-4I5eSpvD7RCg at STe<3NJCeXDd8{ok2%UfW&sd$
zwtWYPoZC|o!u;|{FEL(K0terBXV_*O3lHj(Ta~4nzl?l6^S+@$V<q1;ie~g}6m{|0
z1cVkQ?7l)>rhoUeJ)VbfinJ-CLNP$}<(hQBVnN>U=^Z=4zXFePS}I;|P6LC^`C6eM
zT9y6>9dUdrqY=kYaD}ZYh%<*huamCzTR-${*&AY^5o~Sm;P>mY-^**3WVlkax4UKr
zm{1Ts9iE{>W*JVFGSN?pMl^HhlCw22Y)JnneSfAl>VGhK?uw9j5a_U at gOWjeJZhp^
zWU#X?UMK<x0jI0-tXbZr(F8iW{Uu!kk_EQKJV<Tl*PzyOz$}>D(l`sah}j!VPn?kb
zeL=6 at G$v(R{b+t*okIrqW>6G*{l7*+J?y=Pemce19~B#SI`MNis4cFiq2D9xrf0qS
zA%P9T4}VPKAvio!6Dy1n?sn^4SES=Mmrs#Nm1o?CFxBq9bMg4;UrcZ?^k<V`pCSK4
ziL~mx<%78iYiNQ$Ar7$Q;nrx?M-#JlJ_DA3WN_9xnhVf_PKyBRQI;~Uwz4uY)rYd$
zpSs43%BJe>A-hbSr_LUUiVHO at G%{6CYefCv1AmxK#>>9;XdO9tKqZh8OEc}Coa0yr
ztJHfm1-qjF4<Y|DXs%L6)+i;8vR-rrlPq}40o2mcdSUztxrn@`Fw8hVFn at VxUb^z%
zB4zA4CuGoZ>sCH%R2UAG at Csc~h8MWV!L2?}fvD4r`n(dp6C{aG{Gnd^J!2o;y3o|`
zoqwfwv)G*l0m*}P!kJ`<16sa33)>hi4L996e>Ek%^O5{IGUBLF8U2IF4Bb$0QAZdA
zIdGS5-SZ)SOldWMhiB%AnHAi$j9GrH4;z86D!l$fK8%7=GX%H~m3+~@H1i_E8xfD%
z{{5ZM&o2L$Fp^8#AMR)8v7*0;w$=t-1AiXA+^e!JEY>tY444M6j&=18yKP$O`p`_c
zOt^;)->C<*u8*Cn!lj<p;zC2U3#k+FjL;L4K-}>HQYec+9=9M|S-8WukGw_gNIc9J
zsZ`&fu?pC$8Z71WWCm<^?z~scSsdn{t-)q&C2>wtXt=zomCEmZnYR(x36mIcu763e
z9^b+^IBa2`=ACYJa28eqGoI9bVS;R at 5tZI&(1-_6S2iGa!e`!)dEL>7ARUYe=SSOb
zvkq{8)7dusWNE*M5P}mg$7TbDCn<@bKk;|k0Q-2$xRWrtsN)M5l8IdEXLp65?HP#E
zDH5a at j>0FJ$%S9)dYsM2%^sZ_dw)OhH)mhW9mbL%e;!kFM;R)md30|~ao}7+*|E(d
zqhwzjIAb&0VF>aK;eH|UIguF4twb)@-EWiL;>AahPgph~NkB3h8Gub2KOz4O_1+_!
zA<K+yzO*I>Qi{ynoIi-_K-5%v#8k!H2W4M__AL1OT%8g%bq>-(wzFOJW`CNxHxDSm
z*GzYILUHTyX-jZ{6hfbbP7un(fNpX+4s4#>>W(>xZ*FiiiH_D0Qex6R5h)-P1!Xj(
zBpH4TZ`tcDVO&ttLOf~ln=#FPb^m4N_Dns?NE!E0&Fy5nol%DHTO at Cab~`!89tToB
z4`&Lqc3|Ssw)Hnb(on4BLVqH<^@Wbj1=8Upjm)CwA+n2_0FfX#kcRC^><e#ZLa-;B
zN)G}`HevM{?PQQbWTe?EJr0KS)a0&gc)r+BLH4B@&k at Y6ksaB`tc at A#*G2AZ&EzLC
zLcpM at b|>Gp#R?g&gHH74ZwU3&!|O=BQ275}k~>8M3$9*+)Mle+Y=0nu3hmzFwi6YD
z6|-v~0vzb7S}^W#J+e=in~khFi>MA66__kmtHZm2I_m}tW4#{|C;iUadjwLTs;7by
z4C*lO6zbm0)jh(E_=gGzOjC{;L3_j|&@$?LAf944q;$MrDnDh624+u_+C4<>O0;?H
zy**$B*#aI+qi&+R5Py3Em=^C$KhpQeqkmrE=wwZ#n5m<yY9C=gzHn3L`l}d(j{>-X
zpwqwIn<z;TRDVY9cWrdwjK_vNU+*GR=S|-^6|Arx`m<IxOO)jbBPVriU~{gPQ`zh}
z9BOcwx)KEFRvs{eC!!!+4wZ9PPP7y at azqXfvuPhkB5UEz<9|1Gl3DYwX at 0jrXXSx?
zSy>7NgAY#JQ<JU4H(rKodX$J6g=M`lYfl%TtxA({3vFLho9R?uiukeaoD$UFHV3Td
z&^H3JVQ)7$lyvl~wb*`3_CTiOkN84ADjy|J=>DPOs|M7>5Qh_D<Wwh*4E#&dtU!#A
z)_uML$MsWgy?=xSUqLphwUwAZXmkO{V_==v;2ltfR&isQO3+!HV9k(;4y+&7Iqp}S
zd#f@#n|wAAL}!|+Wd&HfrhLf;;kL6Y`SLbFTR@~(+Q3&Nn^R%K8}_`*+rbR6KhJL;
zud9x6OlK%(W0>m1<KEXqKq${&2)$(jpeUnk>RZtlFn at 7(pVV&k{DkdNG5y8D|6ghv
zs>*_W(So|p8qv-V!7#JEev}ACJUsgXyqL|u>iRN4HAVGYt%IeKe{FjkTvl~gf0N|J
zl?%s$^MQ7bp||M&%EXeQkbT8`kSQKHkgz_aD}fi`RL0Fohd8^diAZ(6s{l9kotvb#
ze_KF_5q~tdGsjhf{ZUDCAtj;R_rz8fph)U|1|K0=bR}z)s4vSdcc*ARTok#(iPAi^
zOHsz~BbvlvS(-7<&~>&B2uKXZaUTH%N{VGiB`{viB~h{~KSxkjx1bKSJJ|(J99YVR
zU9bTrhP%&xk^H at f3QTkgQEOM`%11DI4u|4<G=E3aby<Ku${YS{S*M*#1SHC!bQo<r
zKELfbEY9qI%5H}~;@G<sP2Ms)sE952K^z#ZA4Q^=JNn32R7ud_IyPr8TYY~EO4a|b
z^~rv3qDy(2TXLLssE^DA`tfFN?#?@XVfLIL2pt(aKUS&Q5)(4)dY~lSl2m^I^v*V^
zFn`w{JCDLB-%?D^jwn1l<K^^C*EC4aIpzYv(Cyy30GuR?h8CkgUkMVck`QeLIBqZ+
z>%3_Hlt=6kHypOC!Cs=CcO8rTj5PI*nKBNdoZkX|#a;v$-_$iLe?hgrC*#%!5Exgf
zJ%uF}lC09MnfYgl4%V_8SeLJ<s4x9eJAXJ<YIvAgEJZpF*BxvVgBD}gnv68xBt#j4
zt9*zQvzJQ0=1PCaDFR(r>&PEG+9t at a&E{8d9LM}En#IiP1H+@~0rguNEXc?%nEALm
z1teh*P%nT?DK6Xzu4NAr!To^84whv+p362I2q!F)R!YT1?_uPtH4yLPo8(qH^MAr#
zyA^-oY;~jE>{Qlv^^K+UIdMQbZLc)n{jKC8LGIAN2`SBQj;^=t$0k{&GT$q#Q6~V9
zSFsJqR%~t<^6NPNA3wU5MSc|<Iy1pZP*ktCR|Z?Ltfd?h8#TUz25WmFUbiB0pdb;B
zRK{W4e$wEE_XE06BE5P?6l*E_0)L81oBM!<(^ZV*ixD+xRea-gi>Z%=q+R5AWziu=
z&c;R9m4oF+v?}|Q4^n4LJd?$!<GNH%6A*by%JVaj9g0v5BsZ~s`r)IBI3IUg0lik#
zi?2-Ks`p+IbBzwm8 at 5y6GN(i$8It2Wg|%}7&2-dU6~yf!KCQ5vcHTf%?0+KJ`dO%x
zj_ut#40E=!N<5{dMGKM?B#Vnt$EIPYhjFj2NCa=%{)kb(7x8DF&P4^M3F;T`rZKqQ
zY-fFlssq4}J)Mnt8E*O`3KT{2-#J at 5tu3bg@1I)Ze#8N(y#BLcMT4i41^?T=>wPWe
zlLbhFzGy&lUtN%sc2(&0mw&BwjU2`_JO}xHO0k)kUxD6|Wd)d^wJob%6D>*Nc#w08
zM9>^+i3R!!0O&UZV-)W4Wn3c&R7q0e`3z$7GRblnWs?@I`B^(;WQoNVOO_6fJ{o!O
z;~Bw;A!JebK((ym7RY*2-16fPsPq58uhmJLup?5Z<f_I&!6<tS=zmjE9Ih{9wkGlT
zz}^LA{dgPc>ikE>OOm}7e|p<kOKt82PRJD%J50~^YOCK&Q7bwtL at V|F;nm*+;}L8l
zFQQAK^7-5db&EoO9X|1P_%sMWbRaF+CRqN^L#nXz;tv|C4?l(HnU9<BALy*|eG>gB
zHF2e#B@|>xkSl7iUVrwm_&;=9VHFBFKd79cKYsvKvJ!LTUJ6jZ?%YMV${!4%=MTQ}
z_84wBz~sxESt=EnaX&zT*km9PYHU2MHt$XC`N!(Lrg(}ev`AIGeb7h)LP~_ZmjK_9
zkhJe}D!`iZLq2S*bhQ&R=ke!xIl7CP`Da9|{E~Lb9|IR;cz?{923GP=vb}V6{Rfva
zuThv#Lf#rwwYH%+t=HkD=GA+99e5F)KG0WCY$p)F5TNoneiDmegk4U9p!D{Ptl4ja
zril;pyZF03aOe$*s-1>Ji;t!ARN5L~{F;(w&d+}1NH#6B$v^Udtq9af<{g%(klt}R
ztZ>I*)HI{r`+rrLtNEG|n92;03WykHbdr_LvWb2s8f2Aw4Vza07fw{bjF-V}(<ySA
zWHIVA-5U-~`go$HXGq;Vh4sP;G_}oVEuOG}2cJhAk$9_Z0m3bFSfLdT>Z6ygvH>uV
zE)Aq~iiL;MCa#8-=QO30*|hkqsj7=$Rr`m23U-8&?|-}(ZU{uH1IU1SyaIW&mmrm^
z-rviMYpcnZ$q@*Lk$n+T!{s_Vnm?RlO;?S<N^P4s at d>^lhk+bYSay5>#_sKd8A=!v
zK+n)dLh3BOj^irg=jHaTih4TVJC_#Dc_-AAFKFrXdn*G|xpYKN$3nBW-aeCw*H)jr
z7 at T(O(SPmWk)2%;z{%fF*|-A&|AJg)CqObBHAlV2kRHeI4g<l1Qb21TA_tP?T?B`N
zOFKi7qcDauRfc2^&OcTz(ZLS?5XmuaY$Omp+8<$*1lI%LbZRKNiZq*^Xrx-2%CChn
za}?0LXplFB_J=x5JHXVi;pMO>E^EQ2cNppFUVj*8det at ES1Ix)G!z93Nq-kg>4JpO
zi88*1;x(X~C9e|Z;Pj)rZn^tOC@&9uA_zUiLXRht_2%)E_MYuEn(zhG$X86>-an6c
zxL911l<O;?K(Y=swZwfP1imnyNwTw+eBT?3L}IMJ7DmTT8j`f^3jpz&6|M<AfsxgM
zn}3*gRMf0(?bczGu&Ij3?K%TVLI at cNoRSrr05Y!$CunVV?4s1nt3wNe{mSre-$B$f
ze at KgNeArcyVdn*_EuC2qdG>MP>RO@@BcS92$=9RE-i(EK7ix<5?gY?wqST2$BOu7+
z({cr$Z7CkC_xLwPwx*V99HRWn?KIvzJAWNdg77QVAnS(uAbT6qE9II7juy3dW!z(#
z5U}DmTX8*xsHW~i7q7~tfhk}}d&01MxUiiTrEp@&sZmq~{(1_)vM4a=H`X3`YmA~M
zK1gfu+a6#PZIz63F=@}s#1y+dX=9mJv_mdqmH<}3PTl3BctWr>^!5mecc349P=DFS
zMDA|oXZk*W{Ge>OZwr$E)zZCuNP0}EamZ*HvO7x5%}T-fZ-!K4d=Pfzju*OZi4anz
z?-nN_ZxD$!Yz-%^!`DQ|It$i}cj<;eyf{DBqCDP-Nrci{P&XWGXOG8biTLbAWblg@
z`k?hzMT+O?2!c>?zH+qLBc5IyIe%L$UU2aj|D2mQtMWvd+^)`?Lcs(Ba8ik~GBW(w
zWBUz1L4P|`fB)qi#h4i741sbSWS5R0ow#Ah)DK-gY-~3-oyllxB^|*i6)`IRGR|0A
zp)!f&{78_Qbc~gZU~~;hW{+cj3)-#9p3Aj7Tw>YW^{DWi3|Rt_BU9(04uALn at chp*
zEu3fSI>~ui^Yvgn!N#sds=WTcMk7>`pvC-_*bwhGZ~6e!j`DAy3phZ7F*e2m=>XM*
z$`xG|@ZaGs$1+MW;S~;oVVk2PRB at tgNw?qEfGwHhSTs-tkAr at cG?)&G$tC@{wC_z#
z;rLJ6zH;f08U?YwH1ulBIe$^NjA?k>ykX-%(57Hz?r0!Bk8i4Si!PcpN+$B?ab+lo
z>^7dJqoSc>8L*HFn_2-noM-iV^Cw^+Gc=xK)!=Dg5i%?VoObl8H$X5$9ix^MDV=u7
zLr<mvHsnzJ!eS^9kp{pKc$@YuCt{Udjr_jg^wC~=YedBO7bb!<7JuRw>u^4#i42v7
zQ*-KwRW$0;sQu2~qzYu9_FN{8mem at yRJZ!0!=i}pRbAfLV;^7UtZl6$_IAMcv=gWb
zedOKep6XMRxk$r84-nX%St>M|3%pRz)4mM8DbWX9vYLJ3UD^$1?4fv6;IIYu3Q=GK
zq2g31{!-s1zf;;5LVpP~t4F#Gpgkrhx&~WP;vzhS{sryYIS$^Zc)C+DRZv+%pfR5d
zG91LGov-#S)cm^!3$S6G)J4yP%l(o6nI5e~WF(byukKbl^hM0}2 at s@|shM#6|3~vy
zi}3E?atnFl%UOHn4hgk at 5>)fNiJ$()`5{x;;Ni~P_avG*-GA9L$GYEs{-5-n%+ZVn
zt)YFD8BE0-X~})k!nxUZPYb$}*qLBjpSPvzQ#U`^e_|#_&G_s`?e#>evR~%dAYBY6
zR0_&C662HeLdgc&DtU!-^}hXjubEsdJH2O at Hxqt!kgwg(J+}E#96rG7iR at raj0Zne
z2dAj+ZO^m&`F~Hf_eh+8Yc46D0<O8DF8Wohfxy5=1>m(jMUg7F2Hr47ck^jv1!`_N
zb|r#e#dXZc(!mC&@e`YP>okTCShT=lG7H{p$(3w2Fa}^Xf~mpog%yn at RZas3w0gva
zqt*N$W~@jS4`p7qDlgJX`UNPnex&H<fkwu=`vWShWPjbkiw7i_)VD`)1dOVBFU$BZ
zLBo0<P at i!8`j~m*ZYVCg2i#X5mf~8er+3Ov6O9xN)s0CmQCYwVGe9^P$!IlVimRaG
zh=pD>&ldA?)uT at v2C7pZv7P1u$fT@?m82m!#Q2y at 4lT>W;}S@(%WK-?KKcsoC8=7x
zr at zqu=YO=X);4s#J+HN%62C at QGndP8y=!!~nFLo)QjIZq=V_m(F-WVXyFs`QaWIyr
zV-v$J=A|i4b!!NSNcx|%qB&+w|CN&-%7iq!EE`8?nnggr)*;flu at N4D0+O18xL|k;
zJ#Z7C^cq2 at zlGW!pZrNQ7PdInS#O;g9t`ge1%Im%)v$r;vyKc#J6lE_sguN{E|Uu&
zeGP3gNoikF*g<^}R9DC^8g2HGUCOE7TT%~`I_Bm}j+Us_t(yGJH7WG!{HsatZ2|WL
z81!p|8xuo^?*^s9N-5JSvI|i4JTs2`V6NeHj^B#|IT~Cw0!^o-JKaGLENAN;gilMC
z{C~qC2suCf?zdWU3{~wzmZadbxQ`~82RGK~ER|q))cQF~ER;x*<ocUb(CG&;K`j>6
zH~%Ut;a-?5iEFyZ6^ZvMeQ<UZ0xS7p$;ih=Ib};#=FD;yQ*rWe&D;_&1O9~RmH$~m
z&;)wSE*{VLu^$b3mjBG55>Ir>GVAn!GJkIB<lG3$#!1aOzb%h<cn#ZNc&Pn7?M=4O
z)M>PzYS`$-+ME5zB-q=RO_0_5dwbb*CkAQ9)cVAahLnxn{qZjD9r34p9W6WzF*Bth
z*L<p4?5em6-9AHKuU-p)x~2DVhaY{mIp(vj{^{aWOot?h=Ahp-DTuZ8TQ1^2`hQ@@
z%M(u7NaWDnOux0vetueExLWdD(1<X85gkXMJonuCAThVjF3;`&d{G8?_<kiF+4g)?
z(_0`aKt|ZMlTsg#1Q~ZS&P_oul((e?8W9<ABRa6bYB9hTCWAzIvwZVBn1OB1Y(J<y
z-m--!`7YRQ11{HVSRG#&t}M1ck$*?MsAUMUjps(B8Tw2-^-hk*13QrgzC}JptkVEA
z_^hF~kQ3Z=1?(-aNi6o}7&hq5WJ!>g(dTh2p>=GmEE%qRSi>6g_p36^+S^30!|Su*
zByJZSPWZTb*@V&Fq6#nDZ_ttf#{`%DQLo-<2;h_B?TP9NoE_EA4yz;;8h_bt(zA~X
zL~)l=C2oVMY>)Hld^7nMsGE#L%H0>0mZ{w|AqD-vX;G at TPV{P|?zG`005vF_ at c;J9
zXi8Px1obLAR-a*b&gc<9>b5u8qz*|okSxIHJl1>G-L0Ex1DqsDR6;~1lh&dX3jD~|
z7&w!0lSIb-O^^z22k3{rk$-j*Mcy@@A=QN!vmEWBSfcH5qgH7J|DGTHRC!<esEVM8
z+v2@~vypZc0goLHl5hxRk!)A4*6bnZ2lPPVg*HPb{dD4IjW!xr+d$0;FejMQ&jX!u
zoE&s^MK}^n26u+AX2N;1;R8f>S}q<|bvLHW6SSdReL`-^K at SwaZht+K8_jj&W;zR2
z82&)egLP?PO*=+coKc<vPGTk?R=c%G!9*M(4+-?T;siI;0FJ6sg|>InAy{D$iWL@@
zxzAJLUsw1;Wlsp!qqwGLt|G5n7ij19s9wa9NkyhrFO1XhFN65Q_zExe4YuP at shRcZ
z%E=o&)WV}tS#=4D4S!{n1AeBqmYmTOp9Rs9T#P8E$)2ID>^Y$}MZ9e{;n7x;7E#D#
zp+$p>?;C~<@H>N`wN#MqRjq!(x8IybMqmT^_1vIm9?3LHZqa=<8C{o2eI8D*3t^BQ
z5lh|~Fqko%N}CcAHz9-Du*(MIbU&k)OET+y at Qiek!4Y6z-hVcFjC at iKzBJXFZj9-N
zlGd5;=!JxjpaUp<h<YJ-XczccHHb4B!{Qj(MncA`tnAeQ-apYJ!(Zi8`~)}~H9H5x
z+#H)8+ysDmkZmS-&e+K<Gso9pEKn1V;)|~PQH$e}(Qa$wfrj<}-6N(ug3RJp_jLna
zPv;FRGCm1hB!5aqCKY`=uZO!hBLgn79aKx+J}#@k+-p0b7Ow;7!rg;&D$1)`;Xw2=
z3z!|<zZD?#n?8W*?Bh>?v%WAL=Fg{;P*U7UBh`rcoGtcg89;zW!&*HQ+VjsNh8=aG
z=OuX;*$Dct_K2#y8`_wnC|h(4AU{N|H>D29VanHa_kST<RRme1N)CXCj?Xc_cTyOJ
z^zZ2{C at X%x;oL~|<212uiq&pqYVI?&SL4h~uhRVkt(hQ$XEy0+OpRX~{OD>?%n`U`
zPTh4>t38wEgLdy`Wgs_T9fg0)g38_9*?o6H{hUvl%G~rp<{~f<PRt0Npr8xSg2x+H
zBj4;8G=F3tJ_sp%`eN<h<^c6_lI6vgODqjtrUm`a&AenWQ~-I_(#f2ZGY~cY at 529I
zK(iAk4UZP&Ii)*Ytj7+RRH8<X$^>bdK`^=%yWydZYI_S7wZg<|!K^WC+}WXF^#^NL
zz1;7e8>nu0iWh*%(<404BJqW|btCXH#s(Ao?|+PRrb=>#e1*BqF=SS5Dq}}EQvl}$
z_Q*^9kH#=|J at KybC+G`Wl at wLI-U1{a11WZOopNjWDHku-rc~MxPZ^-gnm0&Q2tp+B
zE#WZdg70zw;Y>{?@jo<+4E2!N;_VD7T$saiMm}gmUZhDj;TN!vlkoM at MM-61)F*Al
zn13$s3CbhZn0RhxFa^oS(MNZ at aN7MJ%Q{8SwKnRAg;sT--<QRd^=gIGGV8UeiNc8K
zSJ758(&EUwK;w>sBZ<4|xOW%#3BtQ}v9o<9Cr_<B*$oZ<r5`kuAjy313!Z0Wi=u(I
z3$%R|eE0Jvuk+*62k$B5Iq2$83__2zK7Z}#`Vf^99(l=G`?ij|NOwt=u-94vV#pQm
z&c^{nv%8q`uUBYdW~oP^dFX(9X4<WV^VyOco{1E2QNqLCFh(`S*p8e=vTQbgn+sLv
zMBT_ at jM5sI>xhs$;pEnsvp2P=x{$^EGS<U_eCrRi%v?R~P-{xn!_&iykYMJ`K7aM(
z+rTlk-gd at sjT+}cnAW>9D+WuKL~RViI)Teh5>ryDc8RI;yO+4a;2B1M&fdOMiJA_m
z?BLJnV<Y&jCn6#Oqz%_HYH#7rW&JZXX54}G=RGydqAW1*OV5c9NEc2rn<nafbQsXk
zvONe?8_+#9W%BFbOyFB#NyrY3BY#^$vCUX=GKA0FrWE?;_-v=`^4I;U`|P=#_!!<(
z7jaN*Cz2jUn93d<L7`k8;DqBEMeH!#I{40+j0~z6<zBCBy^aWXH1D(66N2Bm;-hqE
z<1gKzOHs$ltOC?M$y=*tuZkz&55UKH7N!Y%c6Te)9H4RTQ%x*Ah@!Aq>wkZe)FRX(
zEdq*W<e1MFtTRkd;D$hFaR=t1QK$ST?WZ)H=gES|?A^uQMEreK_ibOPfB3iDKELp?
zf*9BD<cX^^jWN8jk1bhtTh1dvsFW1Li=e_V?OxpSO2%zL{_{o8^<C%zf-tXOs#kEb
zjgsL2FT~|e5zYf?Ug;$(N`K@!X#d=sL$8d at 4oTKrE06sG$yNAwnb&+A^9EwAJqAib
zb#3b8?ycfH>vM;ev7U6*S_d1|I}_sIXMqxQat|5*rb<iwxG$sDD2s4TO8Z;R_`npT
zPC^_u1P^Z$b^0i`S{zSD+%78ag3fQ;5z#LIrY0%)PGxJoGAvL^fqz<SB?Bf&9OQdq
z##=Y}KgP*ykewXPl2-wg;(QNf-a7h#)<rvl<=L#nj;=p|QO}u3)4n+QD~b9Z-fcDQ
z^6wju8KBPl`gvUev}QDHu5N(CgYL|v>96P6M`L&gewH<Dn5s~rCr3_fsgiRSeXvn=
zS^bBIZAw%7%S-`c6o0nEIkl9H7~Y9Q_m6qqG7CMcdEP9XeErrNPey3Am`Q7#<2AG#
zg!tS#U-z)uN6OIx_$mF~DX3PA at So{S%^VgbJx<gQLb9SFrZXs&yn0qkh#8><_j0ff
z+_MPwUEyskD~<x%g&{}kAQqI#2UDs1UG84PZ_!jeCr>#tQh$-^X!)DcPBaTT12&0Z
za-cMMN{l4u{_sb=oX>2#bJK4-4S>S_*_+Qq0cWYe4KToEe+1^5zj7~exv1x3rF|v-
ziS0_!SovE9P)$(FLmwQ}@3m9B*ULiiuyssM-?|CX6^RDFOvCBqxq?m<MBj6GCp2)W
ztON$m`kZcbu73}n+BX)C0euWvyuTW3z1+>K@~t4=<>-Tdva;5jm(_RQD}y()n-fRj
z;200usUOtMtQqOz`(@;j{k3D#-+V|$hlX+iO%MY#c-7tr<Oz?E9#+T1WmjK7)N}%p
zo-RsV{3366<4}|EPg_o#x8 at 1xGY%?KR>ofdMbU?H?|&GtpL~_F_ at 0~OpMa&pKg;2O
zIS}H^9<U${6R-<PP)s|~o4 at Ju*v$_5`knKLNjfU9%&+gO$1n{vL=|4_rmGGN|DzV!
zFE&8H at xv9)3-r)FspLP7VDa(x-}0UdW^gyDyT`^l40aLs$a5BCwUEv+kz1s-7xMK~
zJ10y{hJP7M!Nfd44NLqjsr4XdJNk|b6<1C~Fr4Z!aa at Vc+eD(%NYqCl)Fse_E8#`Z
zD;wB?7N<y?#zcvP*oI_%;O}U)S(+5#L)CZWV|?+8sTL4@&0EDn&i0F`6*)7na7{rz
zxL7Kg-GaewBDI49AIx;O2~3Y53tcfelRF)Q=6{HCNdhoBcG><{>FGEq at 2`fNO`Qm>
z(JRzbua<tkBZ0hSC62O-84nWrFsl^h1xZ^@2cpM(eD2^3ar(Ycd6*qtC^yo^j`KY1
zA)=h*10xw|tIWd;th&7c5sg*z_TSeFTy${<&+G9!he@#dr?$*1xL1!t<0%fXA3|Id
zY=05^psRdtp{<6NM!-g7uN<;Y$uk1jVkFn!DO^GlfEW0jZ$Xco<@x6wYiE1%0)=7h
zl?@`b57xfpq{V5{T_A;fb at bvJ%mKcV+Jg5fwM3=Pw)aT*#?!n+djWn-DH>Q!ArJ~R
z!iv at 1GM?Twy at pcvp<Y4)`Iw&R>4*X3aDSwHN at tWGU$Mwt|1_SpMBo{Zmg)w0CpFxZ
zMvoo1;DA0`9(h6-Z>g`fj&F-|?N}q`C#-P_I5At6S1EcGW`>ioLQb&BJ;Filqr|7N
z(vUR07`-9CA1b$Y(d*j#V{`oB({XeUt5))iXEPQJHN`4N4MTuhqlq6%(ZrC0Hh-aB
zz2pCwl;aJLm*h1cW-yRQVAM4RDt2%MOE3+ntC(YB<O70*@-!B=)H5M^;Rg&USeclQ
z7$wN`_pkhB-6aFp-R_a-FN`~CbYQ=4Ng1%Qr$3sF0M!WOET#f=ZzH8<7Iq!O at QLJa
z4d$B6g~Tfsg?m-Er+$n`cW2+kQh!}v?mt32z5nKTJuHylp1LhdH}O9^E~aFa!_;-|
z5TZ$yBk;8wfQT2y{jo6e5%_}c#s(~3hHqpr8uJ-u2bbma?^l52q97s$B2-P#$MMm_
zV6ySmo;cF`l7#n}aw at WW5)VeL7K{RE_tc2oN<&qz6_<@!toln~povkUU4QIqwfMk+
z0u90kl2}O4H9#Mmtdunvnd(us+*vXJ0r<G)FYE{hVD>GWu*O{4JEs_uTT1ALe}@YC
zX;R+#Z=I8#qF^D#t04 at xmTOOKDQYCT{I25Rq6dIH_Aa}1DgHJuAxPgX5CH!(hLAVL
ztx|(PKo)R8<F^cepmk9Z>3{8k*;6%z%@L5oO4@^7>5}#R>{<CrEW3EcqRC0AQPi5w
zEbAzCFB at YimMo9!O*;j<CPGj+SSniOI_WEUwZ0fF7+GJ0-#CPFYB;SqEF;vZ#qzd|
z7iaMVb^*$Eq~1<vNvHEk9_C;gCh)V*pVmkNXZ%Te4ooK-28YOWaerZ3J>jIoeG)d{
z8^=(0odRcUicvc-=~kSrmGg<r;cGMTe5%F4ITxzLcmiB~aLbQWr{Ckr2ZH4&uIOm~
zrRK~-UG9wzJ%`R+Ot3((21 at r3o4j2;IA_|+YzgXhO2}<zNaWB8Un!x@<i339ETQ)A
z`h5TVm at edxZcUqbcz+=1I at y$V0z&@ZSHC2{FTa$kr<mcLmG^S)f21bn^Nl^@S06py
z)1&|@oJ#qHl#=p7Cp^}mdK}wC*BPw{yR<j9&8uBQWfz<{<Tq at v3=0rW^7=A;r$SJ#
zl9dUBoMN1-s0KwIB at 6geXn=nlK at XzjFf9Aj5Pboqy3=lr)qfwwon{#_IA;nWa+m;(
zWR8;Sc(cwW|LFUwy-I|-YEbb)(BzEW`24uj&ppsMZUMtUng4!R8 at SZ4qO<kLH$EQY
zLWQR!z9vMLwlRLaH!|6%;jv@%T!r)k at -yaOuytAtfqeXPUwSlDUVI_Ow<gXKq;FA)
zYtJ-VNF$AXhJVj>pryTi3^vIxFm3KDS#lnFO$O1LCC;{wvo{-IZIS}fK;PLUXP>Ns
z-NBwAvc0M%Cxux*NF<%$TAE7I;ZhG)z8uVF!M#<VGEGu!lqU?Jv=iEfG1lo%pavdy
zOgmUTewd31?$L2MDVq^9P4yfiC%7`#>=UTrpQ#@{sDA^}!9%vkJ*vI&Y&H*+-DRfm
zJ1%yF=IpPvwF|rzKb^~NM>hTs+13?E#(#&DYN;jrLOHFtpM8+uPhGh)r~Zj-z8J(i
z@|c=zTu~PCooau3dK!J at 9Z+ag`y+~Z4T5 at E-hp3NCjT0={Ud@;k7R!nWr$7_MpU}d
z{}%H3T7QRn?=Gefbu*is2E&1p{gSJF6+rYbT|O~{CjFkqA(RZmI>&MIc#+3Mpbu55
zG_99rU_eL|(kXX>;eB^O9J`k<v<{ax$%?B=R;_QSAR21{AqTD5Fx(olX%t3%K$Zyf
zxW%2;%?F5d?gRYnep_5S0)qrFH1blIA&Zd#1Ai$ZV&$U+2g&=Gc^ti?Zm^U1 at Dn*Q
zM_$)8f=Mf8o^<8{mG1+aHhkIkd5{0OW*_YdK3~utHeaqnd_V<9&LUYgza*>e=O<t4
zm=7q(^vBBMO;<UC-?<>8e=XN<?tR)c(Wa!xKZ44RAs(ga!a1Ye-W$~Wqg*+skl>h8
zCx4?Gq`e7aw3e8DjMK6F-)z{|*fH{~OOqiLQUo}Oteo_<1o2=6L?h8PkJSuyQ|NlZ
z3N|!|$@;`PVb_~SH#OWdiBOz}fKqX33n&>Sns}$31uBDtq)- at TqaaeUE*$Hxat!?7
z7;L1FAFt?^cAI{Khw5gOLpCW1L}VJyB7f<Re5hwMMbeSuP*yYhRG%xGHJ3d!{6guN
zBCFfw6#ypf8gT=YGajbH+i@*gqg_1i9x|W-?SWlCa6=d_hhTGid79{NL4#Ag=aK!D
z1jOM0qyE!Lxg6Htx!m2j4Y at p1Cfve9g<=$QoK`aNuea^8x0OCvyo3x3#qMfQTz}4j
zE<npgweCQ<bWUptuqwG=P^F^8=f0|M6_ppya*=*StYvN=8^Hu{jMwFq#@wd3xTdT`
z`H38j3Dd%S%JVC6H9LN&--`;2dv&}vq)(HRsG!N5VE|huv2Z?ejwq|M8K$)wCNpgN
zM`tAy*I3ITKj+P?%nS(}ZB6vNnSZWUokH`r=bEBOj0stLWcile`vWxYe{3pY1d8P7
z$%d6#r|?RjPLyxuke}Z^s*#eM-%)AKzy`O=7dasK-;Y42xam>jzqDm%js}Y84S#dd
zrp6P8iNF)p<EM`fNsgx0WE at MGNsy4XkR(Z{@iy?}fEd2Vr}2Xb11GEiAb-X|(p$K(
zX(TqfRtxwCjuD9b2c5^hD at +BybQA5blJS}fKOs&LGZ!qpIKxm1eaoW3li$8wHV9qd
z(M>%Pdm7#_h5dFD2ao^<74VUcWCW!1q{p5u`)orCJvt0FNrZqW*dNlg)pAx*pe?aG
zNRvy3i<!BSY>9!0M5v)drhm{J-8NS#MHKifu03ox<v(_=FgKdzekG-g{M=Y|dmtGR
zs=@Uh|MC#Oo^df5V;Boqh48mPd6814 at +Cz&Ymo?2(HKP`v7*zZ$Lk~RxhjeSTyyff
zGhZnb;US0bTpDsL1V3rUCY5yon-m)U%0K41&`>B7XY;XK`Tyc|M}NrVo77>Hs6mz#
z6IhAMcZC-#cwiwK1OPK%Ivk&DdV9uBWjw%@>a($V)s&U%!i<A at H1HXPOQ5|eKW+k&
zd#=if)|I+?sddzJkDa)u;dKpx>$!LN6#>Cm9;0EThtSA<zH5BK2o2sM?dha&wD7xR
ztgT5p&LsNfnUGy#yMHMbc-5tFD^Q*M5b@{M1oBZNM&@CX3!V at 7D}Bx!%`A{?o=&Gf
zFZPY7cIxK*avD?5gGlGsD#j$XW{m0k#WyzWS?dC;hjV}3iJI3FtAP|xe+(-4aVBa^
zFV97N at I+@y1=p#!R-5Ykm~j*UE!+CG4f$$*a5B8LbEf55t$&2&=;tPe&8=<$snS`w
z{lO1cuOnbf0Tw+9<fbqP3(YEG*b!*{5j47&=NJX%H~w1fPgvjsvClfdk)t;`q&eZS
z#RGqSxJGwbTojDzIz1U002M&$zY|4dRE0Qh9O<Cyt;|+dJ^o0 at Rdr*tt<HhHx6Zql
z3$G!$+~{b^9WUVlP-lM&oC$$n*p8S7Q>eFMw-*XBvMKhWS13qE$yn%CP*U(5t7mT}
z5XdFUF3A(1o4PHZ50F8(PjoNs)c(3-E<#P^`3AC{DnJ=P+=3%kpF7#DF(!i<P0+Ze
z;A?kz!qt75I%Jv|`4QNZ-4^TbQ_FKdU*Eta=tL<yb-9HDwBdh8-1+&o@}ffvU~x<+
z{Y{p5ulKwQPMY`B03v*StVhGde;lf`d2~oYYJcZ+W}iLiKznjE7D#bhaQ3Na<LBm6
zqX^&0h_|KreuaHwlQvf-H}pl;f81Ce at fB<><_wi`1E+Ub5l%RLle6AEL6-U!-0lm7
zqLv;5i)L?8gYtjJFR%J76<&voPF?R9!y>=hIgHV2=;48fHGX4 at mVHes_knp|NzRX8
z`6}WI`ps}Z&8<#G3$DsGryDgQiO7z)WP4SF1ZD(yJ2Tn4#!wD{L46b-sUX%QWO)nd
z-7zv8>dYoA+&V>wrx(@D;f5EFPd5o2YnE(Tg=6}o<A{HIgCREcEF05w$ezF0u7ZFf
z_{^LAhXs1|oe|lxhnHOIs(_`a2=w)f4m+<)BoJa}(M&!OzlQAEk~~bdfk*$eXT{n0
z{*#K^Yk`PaM>dGZtHkMMMm+YICT0 at r+%fk=Nvg*0OxhOs>tuHZSfU7%k$=K7WUsHZ
z=f{o=tyO>h?MITgP3+rnaViEFu*h8a{&SwtW2Tk2DDn at i*l*Zn6u6)66k{pEF)2Ir
z6CMuL8`yAC(!}}!7`a;pSb`@bL<eTMAW7;!%Q$ZU>U(BBiR6oK?o;v*Kn34Bv|KDb
zG#%nJ*FQTN;^7feXeIQXh)tqO(ijyzt0)vyROf%{ar#<C0Oy$dS(pdm-r2xF@%Z^z
z#K7Eqt1RE-In9SDU2P#H0V`{qjQbz3_IrWyP?slc$hwsz%zj&0il#wXMHYzH4-Bis
zNYZ|!r^eOA*0=S|!aY!vf9a}IDN6W0a{u!$bNDCx86NY_AZ2e$&Zjl6f@>|8(frnC
zmH2;G=5K9d`lltH+{j{@L7FU&rM(~xU|igShMO}@0ViElc^lh{nD<fysr{XWVAk~r
zLG?24Np^J{q~$8ANre4yz13{LaHL0E4groC>LR at g8AphWxeYRXFF1=-xJW)b$xYKZ
zyiSt59yXS<s&_Vy$y%r8G$IC at 8)i-PgXVt>5AD2&0acAt=(0cWLDp%ExHrAN#H^H=
zzFa?4_G~W$ihsp#E<vw+ut8u&=UJ>mZuv?GDyjoaV8~?2#3!1O4qJ)(2Z@!08lc(-
zcQjs}hANnw+ST(qig1=rmvd%a{|j~o(Rysx{0n59L4~h_AbkHT-$GHQ0ok4ve|3Lu
z6~y9f3DYw%Ge+fk%d_MXpI;8}>0c{|kQ5{kUlKvY6_b&A$#O5|FE#O3`=&B`B8K8!
z_IYrm1k%JpBn!p)HiF90^UPuOS#jO)hhk=18(bVgYAo at dC}`h8F06D<m0_6wANe@|
zaXlWt1APk#0xAG_yWtSA at OXd1D*As|-W}(34tH&znZC)CNn~o2j=dKjXWH-gB1AGJ
z{J8^zxB^RgQniKK^R)iwb#g`f55CpNLMk423de)t)rU?4d>f?s7Vx5f4C;W$gHPw{
zjeDUMuylj%1h{pT^zuQ+PD9w*FGS-c)M`!V!ojM9y(<IPtr|^QN2(i-;*x*g0dP8S
zlzi%Fqhf6Pu!pjlI-GHJ;~^Nqa(MZ<_lPIHOU%kUvrOm<S>+a)S&P_*BSs)U9OE66
z`|J+pO-%%{lwFuQvl4!7>c1vvT*sK-JE+Q7OaX#XEpu#95jf*bX87&zssk{exELVU
zq+o!|YR7ca!piNjJ(b$$AfSJ2x0<~WGp3W9jf!*q?w=O(alxG?ps~8meDT>7!XN27
zheB)L!z#q@(XM5&37 at 9?#QrG%%JcxuoN|G!y;Ra|2Oy*$4q;21VgC;wdRo%x=^@K9
zKjI$3@%lssaOKqo-z5XV0_7fN46#4Pp)z$aur^AW#7)49lXP2K0aAaAcXl8Cb`K+B
zeCqFBVZsHs#$)XFsL3E7jC;;LhY~3$1JQc0<S|J^oKZr0-5}5ySX~x%bnD#mw6b+i
zpSDcey<F2j;L=|Sla3{U%1!C-?+ZlQm*?2Ru+&Qan2 at twfIAV-HfBOK+%retY94@<
zMwNcw!(yqZIeS`4LaToW9M)HgesZl`bh_{H4WD|YjN;aJE0pEGNK8Y-)c3;a-yP#^
z at V!MS7}I8dTKZ%HU;?RtUOC>F$yAh>daUESBvWMsQ at +-!zK?9W;H&ow>#~}pSbF%^
zt{*ldI$S`hX00)B)xL;%hrP7CyNqN0#Z!G}+f%AgP5*Ww5*>dxuT?r8vOFdFFU0SS
zbnc}79ZQVsb$d2UR#^wLIJvSE?;D=C^=7^?d%A({{5WY^gRzvrZ|6CyUt&8d0zWh{
z+|gfqSp~dM3gUIiry~eq1OU9O3NL|JZ8I1?kcdza;K7r@`TW#%`*Kmh@{3=o>ZbwQ
zSIcl7uvfH{!@GaXle(uNKyCf<^vKGR9Ll)0{a=XUmzE~I*TWtW9M5^+EeZsc5SFaW
z7$Q(ni06pxu>c5<#1bHRBkT+Mgw&NBFbpu)tSB$54wnW$b)gAQ)mL35S@;i)pp8xG
z_z8~Q)WV-BsQIh^Fh((@#V!WtI<Php%fmb%#t~NxozZ_Pb)!kVcWOc#NzLj>eXsp0
zNWrI%69pjTxp7Y>1Y+yCI3Z-!3Ex9x^Q-95uyY?l@$Dd#>B*z8?7v1Ko$cZFJe?|^
zr}N^UKLLi#Pm}DezHmmPvz=yb=^cq$0N at jN`-6=Gsi6?ub0rZ^Zx|rpUAx~J&N*!Q
zvAU&ka5H}Zi{c=#Zi<LktKVwbn2HeHD+GrDs-+&xK<w`Y6lfbA)#Lu17%E2`J-7^<
zInJa1mdUEJ7iX$L?PX^exualCXHqYa65CEQ-%*B#{hUL2GJvMBwclKEQ8nSUInW0D
z)Cmr`=@CHF+^IJK83Fndx8$?8!c_guqTdAdc<6ubFeZsoc>9}5jiEox2l_wl=Ts=X
z)(69qunhltZ4rvP!tRX{tLP-JP|uVW()!aNJPulsC?jyNm{b*OlQ&4sfuBHX={dE*
zD)28JX(2|dfh&4EZ2ki^c^HwmJRuG5Yayg83U^w;Zmj|Cw1f@|eDdCcY(qMf;$MiJ
z;R}BYW>-Ar{+ms>mQMa91B$(9RQz)l9(J?$=>4L##+ZP>iJx5WW^OZ_6z>0zlCuSt
zd89i#Y46OHUN(yA#=H_k&$@Kf;?vK12#`u#l>T{1yIHZX`R!p8(f)vI=ILp#-Q)fD
zh!Vu`Rpl(6Qg9jgdR(;cTjEEUa&i=-R7ih)vgSY2bU>~IRxJ0G`X>sch1jW<w!(eC
zBQJnhxmttco;=v-EX$G4#D#Oy|1vD=Wb4!E(z}?V26J&~)dJMv-YGP?vI&zlERgXV
zxBxEY<M^&2-J&GH{Q&#0SoDMDq?&jTw0026;7dXn$Et`5yZYXzZ`@r736kr|B?*6Q
zh$0B<&RIJ&^7ZPpL`0f1#G;6pB+OX;HO|hLFyD0W6(c?<_JL&r8dNk>;Pt?K+Tf5V
z*DDZnI!#do{0CF5)DIcd0wi?RQ@#^ngG29r5|tE(Aut at R!hPc4<#;@@$a<V)gcd{8
z8&~p{h=S;cxBCmpM!pcKa1jSybV7gm?SM?mm)N^`mZEFcY{0fxvJs`vA8$AWe6UJ+
zUDY-Eb)i(5i#&gB&sk(KKMD`;UmnPNRb$8egp|Mhf%`5%LuRRK>B!ySZ=XYOUW#U|
zh$i4MqBi_pIN*-|<``=<Ed-hd)-hC;9$w34RYNYhq|NlZ7tkJG;@ZK$oAZCVQq9Jq
z*;8BNYLP?v;d=2aU))`=AwFPIGf35C6eljQ5sDTvfmBYL7jqeVLW%QzBBiYHEKTXH
z;8on4k8v6<0<7yL6grkiMWE^B<t at 13<!Bc-{OpNX#dFpBrgkE+Dj1Z$88(+-)&r3(
zPEiQcw+r_T_prV$O8zMFkxYLAK<Bm`JEKwx)PGBCgn^YkU%~;^LE5OO%#30FrN6Zh
zxm}S^iLAI8&84Wd+7?|wHncApRz(BdeS*#8o4+?Qfk_9b;nknxQ{7l~iCC(Oc^vu`
zxI2|Eo3Bj0>JdN`T|`w9qrt2ZHJ%oJ at nzjA#ysF2DW}noc547U?#+K)oQpk7js&z0
z{CLMmhbbmD`SPA}Y|UQ1tPTUUxm^Ya&|#jMpN?BM4tUQ0PIMg$X+1M60TmfC^y=>^
zS&@b&M8H$gP+-Jh82gEa<S?Y+F=iK5<(KbZ?Jj|aW9lV*M}bUHH0Bv3DcNU(ZqFC)
z)a`tYdGNQ}`#fBbQ2T%Ns+U$X`MVDgyo3zOCakrDWp}XEib!9raU2L@?R^%z!l`e$
zEnn%}@60|r-+aQ7U4sHo%GUl$*zqTic$P4pja9RJ*OczJ^&SX7%{Nj#4I0HuB~P at K
zB`31`Kg9^3aImVC40jJ?Sj&6J&zGw-7dl$M_<b`p<bTf1_!)mx6!EcF<u9$j{!Hhg
z)2}w<1D>ul<+PK|C`WaaM)z^_dv>5v-$n5Mj*&%z&`yNJ+}R=LpP5WuvN-kLpwz$x
zY?n>%xbGkl1op1RB|*kpP({7CqCClP3B`YmNuVX4koEHEV^weWPAdkQuJYqiv9k5@
zpPnI#eg}~=DmH&3Azv-;xC9Z=q+>GDq<Kzwvlb>EB8v#4<s4j)WjjJzNB|<B&O2n}
zlJfF*&O_Z9h)3Ivfvbsxn%~-xG}SbQb4r$=wZS2#VG;ZP&n&XP#qSB-o02vXHRpjL
z6Hd%o{&ML9+x=B1w}`CRy-a3+<MYPc%eI6LaJ<!q68V3-N%C%Q+DmRXn@#y#VUBf7
zrkiJMchi_(5u!`n^9Ym&Zx>8IwCMDYaNHL0#(wRun%mY6CqUoU{S~qbghBNo at rs}-
znEAC$am!lL<%@AHCrx$V)YQdBJjSA=TXUU_^iIitrcZR?pda<pjDg1e5mA}b8K}xj
zzk^6rEO&q2L)qlY!5#T5uwyeNpv0phpKrHEvx$XC<C{)fu4U_}?r)JXHG at xl)K;2e
zce;sHc#m0e4ED8kf<o3JxZl=$^X2D9ehh+rCPBM at UV&vKx7?Jnh4pq+kHBi($OFs8
zjH}5Zp>dxGF6i%R_s;rP0aTj)_-@)bK`mOmNiKhO_!LO>3)@7|epXCC?4j-lN*stz
zqtOxaxXsv5`2bE3CGr`>khHixaoe=!l8?X5$gLoitSIF$Lcyh^Ce)lZt%#~Cb<KO*
z7;VB<YI|d`P at FA|c>r)*M4yi+x&9}}4oBOMjBmpdX?6o~8b1 at hoCvBmMpFmQ;JwpE
zrmTN0JaGIAE~|m%HDn9Hp#Ty7H)6qOh4a3u_&b*Re3X!hX&?FIOO0gEj*et=m19HB
z2K>s7ur>GAF7nqQ=5b;3X0$E>br|ZE_i-y<7Z?vw9~Bx)%jndMvsfkzmTy)fUkMZ@
zy?qxD_*=grYYQhW%bjpA+?WS9q*md&d$oU6F+40NZ}0H4y*HssvZIk&qa6R=rlp|{
zz&qKsYJ<yRy~0YRar?s?j;Xp{`P)p^FuO6lWF7K6zLKA==c1hsUqUBr!-#$@y0X^A
ztXRXU%f9BRr}9yge#jyxr<<8pLts|O+K0ZvP(A7yEEM;h2LjS%BkL|f06HU+fkA)0
z<O%^8^c3tB5hjreVZ0p#gkC+GPvX7LE}r=Xb%5bl+)OG$z(929)v5ee!Om;||C-=`
zu208eVo+H7d>xZ_Dqiuync`uQYlAW85OYbTv0R5;3P;Y^n>M;U3!;ym3OgP_*b4At
zC`OnQR-yq+#?ZxIEKY4WW#{LIo;80!)Y{gOsE4H3{nkvstZs0V%r3YT$_*7wLXs*_
z-|M%~YL at g_RpJQY6gMZ!?{*q?4cA}OaYp+XZ$`ekW)2Vs{2n-!pNH$zF2F=XheN_P
z1oMoiEocdd?v^d-&mFsDucs}QO62B1QXTLeK4DF4$V%i+(<Q+zwxBNHlVpDsXJVAD
zXb0TyiWsM2{g&;vqrG*XSNI!m(UQviB0$95!YWYGE?-iq1(_`WPOT$%#wm8|Bt*9L
zRZ}qC%?1pd;!28l6_$-IDCT6}@l>`dik?eLIs82EJew$cU3M0_7%wLpN at W6CAnUhj
zOuajdl=++D_~%(s{-1gupMQTqY|MGhq6Ckc`F=i3NZZ#3`|W^MxLe%g=o5*_OigSz
z<A2`FQ;ST~_TKRLWD;>8jL3U-g9l~JZ3*Bs4>bg1GiHElrN${T=KttajO<;TDOO{G
zAK5kT!=aS|v}#}x3gnxV4Um at UD)An!6=Hk+z$%8|on1XqoB7J~FH?Vxzk6|4CaCwE
zm)lzE?dWMkWP=Y`O~S86h#4(a?=g!s!Bif#Sx1h01Zg`JwI%;l$0>Y3Rs#D}jB!DM
z41#%{a-~9QchR9TMXaga%jA!>h4 at tpm`d!$B7 at +&9EyYlj#E?ot}HnCG}O`!;gsF9
zW<U=^$;Pr$&5_nj^O=9Q)won*YXBT`Uv7%-Ouzd3t+za`%<PQ8Mvucv-EdH1EAEN&
zp%YEas$cnlJ3cl at _6$;Xg=+Xa4TH--V&D{dEz9Z84~flr$-8n)_ag+j$1j7v)>1(9
zc_7SXLxAWxLxd$OIW%Z=bS?{ufOlL&ZH5ulHdmXt05zHEgg$?o91X#}KN1Hv_>H0M
znNCuP6cIk0H$HW>NxxR!iwD|SEVN0|D<DA+j&4~4f;VqKh6!N-P7uvd`WNb}#QVQX
zbEP+n?i+~K3W=leot~<NF at VD5sto+;nsCk?{t+LRUh?IiE$i!}88>sJx6d=~BF|$-
zYFI5=(mu#8!P9 at dr$8aLz(p at j{lTjMuALr`WUK<|;=<yH55-PpylptGay(tiD_kfO
zF_v0``@RzD#eJq2bfJ1mT-~I5pG4afv3QT2YQdd>muiXKm=K*L5YWCWBL0dS0(AQm
zY&dQ*qp!YTpzCNP-w&5D2#J=%8IsGMtBNdT#Io1kA{l>cGtNY-#)a~hl?HB?I=@cB
zyp%Q5iZ at y}b*FC!<GBbic*vl<4*rVC4d7QKN!F*LO^M1Ob7H1dv4~c~V2O6eUwfsS
zH-r at s?Dz*WI{+)?-w5S24jOO*fDNCe9s!XZj2F*O^KkfzO;zZr8{EcvKd*#auswWv
z(@bnh74}I8&(4!!o^?`X8i4->T6kiF>MjG~kaPlTuGbwUBKA4vmpihsbm`%`G%H~#
z$R<BxY_881chyt-000000000000000`KuVUw_uM6pj&?@+teOuXm@<C6z5WpJ7s$p
z-D&OOFn*`c`#cNPI at 2xTAep^_;&)F$vviy>W+E(#=3#b8xmOqFBDO&Q-Wuf^u4ZIT
zNdUjM-1><|<DPeyIldP#&X_rvV<c6HK&pbkn>?~lefbW@`W4CzxgzEqAw<$0lnWB3
zCqhF?BQ1ZMp340m9P|1ciW<J$sJ_c&4^)QNdv!4Cq!hD}Q8JP2J$z%*KH9fv6!o|v
zfnO<l0qEf^i$XHr+@>^a5+NvEejYrEw+)?R#rb37W4wb$H)X<W>YxAatITbF#WY?0
z-zh&c{m_SZ^^T0{lMll3ghz`sX?`O3N{a-qiJO0zpW4^CAL7zn=5*3vzh#;(QIho3
ze5gsyt~n}(&kR2$K4MD6vp47ty&mJO*DGodk%&wmVX$*Q-&$G2 at a2Dfc8e5PTIE=E
zN^y-5dbU#D^_76|ald>2npyrmw=Sv*9G(z?mK at k)>ofP-Wdh;J{Fo}`k)X&3#(Jv{
z8BTv at IRBag64fx4L=5rmdG+WGfa>7KdWsWk0I8yHXPDSC_ab(AHQaMR;d0dqT2l>6
zzTW2$T#En#u5{kwe!)c#ez8}5F6f)6;#V&>zCq|e8%(q@?OG|8-OlINcPP-l&0G7o
zv`Syf(%koojb(ox3v`uzwK0KYquc~flqi4X5t}t`;l at dM05lw?tES_c(LuINJ+w&!
zg<I-hs;eOhLp%G6hQU348ieTh0KujKwD8l0h%><cxoLu37`Rsytho%`S(i6y3I4>Y
zkHSyO-7RP!B6DN%X0zuKlEx>hjKTIU4 at f@R+TQLK6NlQt$OtpE^-kH-lLO+|A4q>O
z5sBp^cL7MY^Vr`Z=q%4IY&TWnC%Qm2*f<?K=|1{r#X5&0gh=0??61vV_0lY#5V|w1
zFkoqzeFB|z*3MrcH#<EAg<8S1V}>ai?FsQx(kq1~vH62`&h^{EjKXBD`3540R;yW*
z$dft7Q7}Fx7Jxd&4o4 at aTBBoRaSDG%$l!&N85GIDaWnSl=VH$89P63I?>M14MNvj1
zd92TXXjrS+UlRAs{CwZzRHL*v7PSc{3e>#*;$wS=i0XKapX5L6R0%$qQ(i#m!(!rz
zwL%*d9ASO-lNXuNnrrEYYEaEP{E+_nmfgz4AFJ%eM&1Ve#$vj~Ie}(*`Lllopib at D
z(;@0Ci&iGgdi@}@!UvBMqZT5Ro8)VJexM0U6|MFk6L(vCxRWO17med-Jk$xTX~GWJ
zdX6ra6&vD{nu6E{4UDD;vt=NNkm(-O4H(ASG>Cr$pD|hXCc#D>`LBo72^2cxdc1~A
zPb&PUW=wts3(u!vt*#H}+suC!BGs<?@~s6w8rlu`*?g&P7EFb}Pb)Q~DK1nflC*JK
z18@|=XRm>i8ZPw}ggltOi9SRAx!DPj21W>x3)X4IYR9L`U!9p7-{CsQHVSG at aN+C(
z)l!8ohOiWV1Qi?aQkFDuR=Z0s>2xiVbOBrP8uGNIn@?P5POaxq^AUgCCTE^Ldr4|M
zRFXiP<R2W*gX6Me&GqVJUEK^TrIa75+H^zMa=3PCW}1xY06+3U*P!sJ&;Uf)^rZ2<
zOftdx*fa41G!<~uM?fr3y@=oWk-|YhP6lo<P{Th>4xTZ`tfRLHjeInrC{?)4bl_Iv
zsz6pCw{h at HMNnQPz@>j`@M|2Pm6EsrAqehj=7YBtl*3W0a3vJmf(bDQ)@49XTMpxN
z4CcoC9gPhW#Lh><Jt|jLl~y{B3FzELB!RhXA}61zeZ{W!xxKlXMANvcrnTntUd=p=
zo?w}uXKe?>qC?c+tU4$l14G}}t{^OMiG#vspltZ#(Ds#9bOe9f*R-6(o>^HAy|gUh
zV~o2Hdeh)gsaZ~cT2)s6OgZs4Qjv5V%tR}r5}jq&L_!~A@=4r_Z^J2Tz;B#bMpSb7
zT@(QYq4pw2bP-5RPFzcHG;2t9p|~cO)AGfdvDI2O#cU9T6Yd{1RzWu2aij>@w3x_K
zxy%pt2m+_cqz8Y*N^P26hj#Jg$d(*Um_ciyPC%NZr%lxWbtf at b&pBqDv&%px{{#$X
zW!Jf>2em=|y0=CI`;Zo!3(bNjIxr>Wwb|L3mx=}Y59(P_=l$^hu0TK(F???Xi>$+R
zKfbegC4Zq>6FvY#4|K>aMty at Tb2ddxZ9;=+Ng1GJ9wdKc>FM69HZfu at On}2}*ABae
zdB4TQpE4L1+t0e^v0EC>GxHA(Xjk-?vnMw`O18RO36-dR- at EK#ZU&Tw9SA5oAM9O?
zXhPUcxOMd!5MiPp&ERX;4d%^4KL<{+{Nfpy8F3t;iD$gki0y<AjZ1p*Xh0l!*_We<
zCQcV4pw at p2gOcU2o^eo#Zqtfh7Rxj5!H69<F9cfM>Ci13-e2!CD}S?DvHvtB;{Wi;
zdAZClAjLRXZ&`~)jXO2JYG?!qb%8s>#f7ca$tMvMj^n<9I$)K5(&TlL^@VeFJFxFm
z62uLOZWsz3k7u#lwtp{OjEJm+b3iG`b<7g==}3R}AVo(Wm$Pa%8ummb=Jky8ynrBJ
z%y(0y-et>IBD_z_C=muSXy8yt=Bu|?A;l4oQ3OwdY}j|!LO>MN<_Crv0kinIqAF60
z)ubB>jcLK{)v<|-eR?O3l4LJ_wt8n^Z%>2bnIG5Nn|typDW2L(x5s0e7=>#W;sS=`
z<DP%EX>|4>nHrL}5+@=b{^%Wp1B;`iM`oQ0kKZS*zv2AVoAEqUl0E2$Bg~aaq at Qhb
z)xZdK<4XvtVBYhbW8XhctrgT8uSXFC0*Tfp(YN~|L+;CytTS<SCgbL7Jk&LO+7GYE
zR=$*8DW+>23J{qfqps`OLD4<h&&e0 at u+o2;o2F&ro2@=*Q4Cc<MiwTSpnn#Qunhhr
zB){q6(R0Lg%@u5SB}1dB-;d|Y+P6w;-e%0RtCHl$wJ?IXm0ERwGOEFX#YWmM&1!HZ
zoJGqVzAK5cO6s=`#gr}9fenshjJBMDI8WcBlvEc?{~{*Q4asq0uajngm_L%!6;FR<
z`^48ZTT9jFbo7v!;2BSHa2wXulAl-pvK_)HQQ+`~@k29UyNHfl at qp+Mn+8O&L1EEO
z1fd&4!DGk|9|!_i%OR7brRrqGMHx0Kl4Wa34Sq at f3t*-U1`01aruOmTCD6<UcK%h9
zUns%u8FT^l?qYKb-c}8_v%l$WHpG7+VBIXL4pA at 3{AWY*6^u{Z?NOH at M-`de;nkAO
zVBSuPYYeyNago5WHDUP=m!pzKAl6Af1rI8PXT_doXPW&I-KgqSA-4lQyb|`*(pF9;
zv_WxrK9GV2-`U*>a+7QuUo`Z7UvDu!li!(a+v=Cdpbo8c0NayZ$0%-;k)VIgea%bY
zEwO6cxXuG}pS&wENONI~@;7Q`yblY?&4oVB=c!osGomX7$~lL3dMG8MfVE{h>ny;)
zhAfw#4t9kx@}ny+E#C*4`cnY0bk at Rujq@$%)ksM1wvN(V0V(o}Bf-GGk`%v}PERpt
z?Vd$5II}^cmd*wrUZ>XOW#WG~RoA({5$$uTYee6PCD at mL7^(g9Ec6`>p<uTMHYGQ@
z^`Q%@og9_r%Ew<A-<!qdmbyJr85%!dNd<2n7XBIV3`BiEc`#fnFGsZn6ibM_ at 4v1E
z_dwiETMb70GcJdll<s%$Q%CrAjkQaAJGT#4Y%+9&3jF+lP at xh%zE^)KMzkjHl^R~y
zxkIV%(EO;AX?t9tAc4_ZStPDL<Y^Sznzj29c}%KXn!^__N-MoRm8fbnHMmc-<|K!G
zuGF?9T5^KnliO?f`pv7*jX50;;eG|-h%oa3LbxbohO<9VjQAD$4XF2rQKglD*W`T(
z=?gTSCnJj++^qeL10R2oWS9Mnv1Xr<gd{3|CeKwV_i!Ec)syi+f+Wj8qqQW8TT5d#
zRXCySMh|{R<$K#I=*Y4^-Jzoo%Jzvei-#`{|IC~w`v!C3<uz0Phsv2v)M>Dy4v*Y+
zvtX~6bEWP+E2KLTv$yPi$fW$(9zTC|zvte237#<46dr*W-YkC*K=kM5qgC~c5qMDV
zheh}o)iPFsO#(ug;?cFGcc)w#t#nNsc*llGPmn=lcorA<{G+ at GiKKoM%L0#?Ko3R#
zC5Ts71~D`ugV<{h{<+2<gm$Nj%xu>0yo?~$xOLH^Rfjtr&&dk*h2&jheYhn@#FQnZ
zNAYNZK12<GF8zOXcQ!;lNH}SU1N!YXT0j>A#TTq4SC_VXmT08C|8h^<5w2R~>Se4*
zlk6;0h`0}UtKA0Yww8aza2O9?#X}$@4PO0Go;F+^oz!V1Pl-BKH-8SEh5D{(<zHb|
z!gLLb<`K1XW>BEN=xxJ!g1T83)#7N0G8Rs^|6zNksat=MTnJU(5SAfA7txz~2*1q=
zWIrtBWPYgPA_37PvkBJid*_|cm&r(8805!aUndh9 at 1H8STOSAKEhvMLTxkD0<L(Dr
zyBQoZ9O#GuiR8!k#}J@`Bu%H`VxOz7OeW-{Vt^0|<o$7>A7&-Z?h%7>G2#B#fCItF
z&X|68u8 at CfW}>&5^&P2j<*gJsO)j=KK=LYyRo)Ae(Mcval*Q at At3X3OZ`%H+!$l!u
z=&XVI$|FnyuF_CBdEI>c$?r;K<gL{h3a6kk&<&%uTt1>ZRl$}}g3AGB;Zj|@4`k#S
zyeHm|uqkTq^Df{W_1YrmqKvelwsA^vkz|7*?Ph;qrcds_Uu&<m^In2})5NR)(LyK&
zNTF5gr@*2A_ctTYp`6nXb_hwW$N{=jiNoBLcp at lV@Y2VFGj}roaabr)b3ou!@LOPZ
z=+={2=N5g}opX*pa^n5P`U_W>zfj4R`y8B$!rgZ}+MmO46;M=5K9&lUNrw%|M3?sr
z6_bBK#0y{tfUTG)KZbt at i03fvh98z=LhfdmflKOr%xwnEpea^Q0H(;OM?Ag;RgCFE
z8N2UD7KYBP<jhHDQAmPJMZNU{lh_}@#ym4J)@dJJc9WSW&ojJo#cEFDjCc!C9^<c&
zF4!#7VDU0#fH<Ki4Re!?5?_D*s5}b!f!u#!ExDf%DRSh%*--zB$7}Io(cKc7U~2J%
z5bf<nt6A6_H!}3=Sly;>oorMf0UE$1Eks64cn9*Rn2eEE`O`%l;)9ZREPm2~CA|0A
z#`P8q8ZXe3#CZ^(AG<}a2zus<2ScPK52xzb`XD`=+gElVMaJ6F>BKW at M(PMoV^x2z
za!v|vx!PV|_)Q&<iOIIF7 at LJ|lNH)AtFZZ6P<t4(F<!H{e-ROxK!I{FN+q`;1)8Qp
z=3+=bRE0S2XUjaKW??p&>#rL8O<^*0E)))?)>5Z~wf4A*__*wUCXZ(`Spnz--=lpJ
zMsl_?qTTLeT_cxMA4EmUC~nkDIp=>R<Sa<1(2Nq%9uOk`;^^_{=Kd$~1&ka<4m^(4
zKC|P!`?{A3-ozG^a|v0#0p at _U+(;fYQ}gMO;vbt*)C4CW`StX6f1Qd%k~!T;y{jAW
zQ}N345DLBZz}cq{f+yfx_7=iYtU0thvw8`z0#pxR;Q?*%6+8kPkJ*_;ug!l0&a-%C
zZ?O0oyBB8MH#}x>LgAw(bxvpJ*0_Y^3FEd*^7xI6D55=e+!alcG7GFZfs6?|_-tPM
z0Q7&h<>RyWT5S*2r4H57I}Fx3!d2E0Lu?No!oQ%C{>n_-fQw6tavbwPg#3`<s1u?F
zNvD?$GNV8?!YBnF%cNi`2(W*^;KudHX2p0BZ&b)I&TX^46z(L{F&pk at FU-YJYB8l$
z)ad>EISgAb3N=c at R`eyu!PRhqjWZfK?=_&Wh}x$#z=LrtFohnDhjmdlyMFTKN{dod
zviL>X7_b89HtV08(h+ at 4tOWv&)w_P-J)p&n!c8Z?kB%*!n=#M4ZVG=x=fg=_T#oy%
zC}}rJxLcZ{2jW|}O?1x8`6m;v at aw~h{15K;eJr~Yl@&IC;GE=y#{1w>)@6@$Ss680
zd6YC!w3BH^Wec&VzioNuA;@IGr_H`E6{1-tdh8Gw-u|TfRoCU_A at B`^6L_mv!iy~9
z8mn+nx_Ow$-8`{)M~i<7Ubb0Pp#8*34yWbna-&3~U8zn&;8<J0nM{B`cg`S{W*_8W
zhVizM=8;SwCjj>b3qaW$eq`BaspR7Vcc+yFjQyk`NQQyh6tr$;>C-Wq-yX1*wJ4ss
zv~Ar3+4a8eQk-8!?fhKeNI`E1YnG*jzB74RSO<=Tv6^V&lGuMUa=WT}4NjxNBeS}(
zMUAzVxs%eq{tz~oJcR(5#qNu050j at 7$ALC;>V!TuPs8N`FsB>8DQnD)1#!^vYM3Sn
zC^^(~Y*JMaxgPUHOGNuzMHq|h_agPLZ}`ZtDDEP;^njwKJwsW}**_d!iV%YCFk*U>
zLhx1EeIfxZ9r1sxP;6aBonE52nS?2GTKvEX&fu=pT5L{uO*hOJgEkBXU+A2n_+6&$
zO0yj*ZlMQjmCqHhx*YXy$0YYDjV3T^pbl=v*%9yPLVx}5q<KqaSieHo#1Pv;hMq4c
zBM&GJ*eKP_>tRqlPZL79=3Jja89r@}q_`5++jjkAS8RW<zFg#dcfK`FlPVb^a at 2Pn
zcj)1K87^`^c3gWSaxF*g at kGfd$oSuWxz$x=9x{e6voI50$62GReHj2Z#_{1o%-C`o
zOKg+MG>vgT3ly7qONItU?>d8I+eVn3do|RaPm>!xs|0*viC}GA at Em{YR!AxG)-P>K
zZO8u)T>pRnFAO<b%%O~d28br$S#DKT7sNTDB(3G-fPZdWl7S`nhkaZr8Nfn4Xb#S&
zY2X?2X&~T#41Eq46ml0P3%kxpIBlDyzQnT&vS8U3!F6p4ohTGb(9@)g2^!M3Wt70~
z=k6ts&V^n|9uc_{%x;30QE-FdSN!pGkpi9GQ(1q`h&yH)`2{C4Ua%ZmYj3ET=jiyw
zuz;LHV2<d}zacjP#W~p#J~)aMQi?pN{4^&FYc4^Im?VoB<$laIHE at Qbm!@AqC9m!E
zOV^V3?>afh+EeM7K9?lUqAHM1EOkV6TlyB4=GD)X|KfIj9CN)}EdItR({L at gUyAZ>
z&C7pIRaP)5x=S>Mh%_OQ#Ryf;;<AR3qZNR2;IcgQ`N1#h)av(qa*5LAdXc9w^OP<y
zl?dlTTS43`m=QkT7lqMr-u^Uj(CRibNHub#bdf!-^tBuorp_6WEsbfyCL!xb)42lN
zz|7~sF{DI=7DYxglvilRD(oZW6>Fx)<`I9m5X)`ol*V~HB0u(>U6v)D-J!QrN!0PX
zXtOd=7JSx$V{L62`9eU}LQZj|p3lBtKPuZ3-=Ml>DA4VuMjF5xRrEzRB{vL?#4}b`
z=S{0j!(uQz)hc{+XO%HGD4(3SnutEPz9X{;WZq&--NfA%)#d|0%JU4Rc}s8w@`-;Y
zAeR1Ahludr!9yOQjn|4bmUPn;yV(BtG2}Y+jgrIhRJ*w4=9~zGeXW^BpGS>=Ff3?s
zHVphIHW?kqS2{L)y<KBj!a_(HZ1Y*DPvz6NC*^+}G^%ZFaaY?jjQ6rDW<la!^6Pi{
zl6V}6iGi;ess&q+0W}%ww#g{YQ>=dvFF^rs1J&IB?ocuwbp_n7=<*;qsK#g;VI at Dy
zc`y4=zaa`&O-E9bwq=o8A0z9N{H>c17mWFbhr70L>W0xH=gQ&;$AVvFA*p%A)EGc(
z7wf}|$&PA4TzNnx^=w=5t4qU{q5qcNBU6G0 at WZh{GQ^IT`fA$21)H+h^B8{~4r;VB
zB>#VLcKcfssb}n4bsyaGu99J5al3KLVad^_vb#W)a~AbkripJom)<bfM?`xWHBEgc
zniFEq(}zw7WVaW!OLA>H^(3X)M_P&qM$IEH3kuHieRMA)A1{>2Bd#x95oEymPgzp%
zPk^gYSMhCbVw^sHCh!SZnYn*Oz at poP(!Tlx37;>+SN7Ss_IGifln?D4*Mn%i_Zbp3
zPPn8rI9mEiz{&<(>%RdFg-iPhKbS*Bq<%kO$ZALKcX{%e9sN- at SZI>2KL1xCtER;h
zZyA1C{YK0s$cc@<gZcH*Qx(07giG14L6SAv?eALO{CmbjI^-(2KGlDeeONg2>R$fL
z0n@&l$|fxbgR`d16GgqV{>+H#wh`JWMWA^y_c;w&QZASZ{Y0_s;Xet5xl<}M+I?5u
zF%PJ=8lr$~XFX9!hXv|1bzx5|iH*TayHY+YsiPVmP9ItEnFpBmE5&dVOcinXZ*YJk
z%8w~fOhQ$tETA03c1eE%$=kqJh0n=nJlT)3WG7H(yBM+xJ-ddoZ%n-4wja}iuNk=J
zp-OSUB&wvOXy=uBlX-d^kJ_W{X)6>NWIwlq>2~=866D|YN2S^c2K=zGG1xwyio-`n
zzUTw|>2DWStBJ;*yn8M-{y^jB at 9;11)D)mKQlYz0Pv;1%Jg<L7+<+*y*U|5ZVZpC9
zxlo;2xVVcX0b6Ux5?BrX^+p-dNm1AiLsH)xh37~u0Yp~*-0c>%^NG7|!VcBuq~0Tb
zTgho`x;-R#-Ef=GjBhF2kBn3HN$b_E>v%v^l&;5#xq(30OENTYfGr#e$zS1_R<2`P
zY7ct{>!G6KPg#Gyl23L$R|l7FP;D=roiEF8!)`{Y<V&CAOP#>#&1CZ$>;@deeyEJ9
z6adc06$DG{d#7FxGZibujB%NbW(h_2;w~JRV+k*=(YL(`iubO#lR!^lLuEc_o+H$t
z$XvUr^F28%zfK^FTikb;|8f)OOWXJ33O&%98e^sH3ao!s6;Z|vlzg9u7}@07I{cFy
zE?o#T8kR<n17y65c}oygC9d?%9&tMD^4~adU9)b<3OBr&d#?H~qV=7dfIxU>+u1((
zCL}G(T+}7wAEkaf2 at 0D+4%vT(Z+h#0mF({GxW>`DV614w`9Ru5h+R&R#}EW4wXSP2
zuR)JA)PjGy-flaJXh;svsa05$3u{yK=R*au-^Rp(oyXu<l0Kl$OO4HHA`94CYx(3~
z9NS)r<1|g?-^u(n+}=<30=-pt`yDO7RDxxlR@!@hONPRrySfT+zv2;j_dRf;(>LHo
zkMs;=c%EvdY^cTR{i8l8Z7&_$c8%>4u-Z+hKX`xnBYWRioD^0R-6?V=Q9o84Up0J_
z`?~Qm{#8hH5T^YIDgD47#`%ESDE+O%)59xxU!P8kOBgANm4}h&GivrHHFRY>{5d1i
zxE?XR!h@%0WQF#(Bwz6x$*T0&)ka{vTgR_QBTmPI`e~XZ!zdmvWgK~|aMwXPHIrz9
zCEtJP*Bnhyq@{L!X;o61mNoV$G8pRj2yoVnrJfe+THeM50-QOo|Lon%f>V%OnKULS
z;&x!2Q_-{n!l}#S584*8hnM6<#6>hGr6nZ_x9g|#MRMVxbArHeyXm6$l0on#q7MMI
z^`tROaTC6#b}OW>4KV$=7H;(n(aith?!A8zBqBrwPsUZ>V^5|ZkQdol1Pak9Yf6^I
zqs+~eHm{-xMrHQPG)cC8SxXbYDto&Xy3v at QG798Dm>Az7avhrmOYvJr0N*LD`#$jV
z)8IF*-_)Y@^gO3Zk&V at 87$A96y^l548`M?8&bqs#0LvHqtq`4^L=w=QO=}vaEFym^
zy4Rkv{1!??L+V0&rm;C|fUyi^(BN_|O*tv1h66+3>QrRT919@`L6#3Rz3t~Pr1^<3
z`edEtYxWT5xJSyAT9P7fX(8tAyS!)Uaw88Ch|2S&OnG6bh#}7#s!X|)Dj&VNjf6xe
zGqJDuQxaC^4fK0?tUUw~7h<HBE(L!z#hpx4!jnct3)}_^h{m^8(_#<bg3&aYhXvMw
z*kdk|+XKP?&#zepu^b1d%1x)XIGJX^JA<MD at M;>rA-uM5NMJ3oc^7<Ya7nOZOe(R3
z|IPdbOZ<?Lz9y7^X&L)N+>q#lT3CBWR at xsAUo+I1?vQ*MS&70u!?R|99an!5Xr8#0
zizMDGFe&C67)8b8!a~Q2$YFiDdvk+`#Z62(_V)&!67szw7~IX`!UMZhYapS#uX~n-
zEegob0e1(?sEi<!eB1!gX;H4 at ->=?E%w)8%EskyIu7!xa(?4p$s-wS9lG;Z{r-|p^
z!z88J0<W3HonM-}KSlw<IH!NbWV?(2Yh$wQ&I+0MObDF@#&PVuyTrZo9MoC|m>P;2
z=qq3Z!5u-zA%)`(EqW&P_jDQ5h1WIYA$bj+{&Fafxc+8{!*-tI^*rm?_RZA>D=l at E
z#*Gfr$&!^d!Gwi*3CqS}wFyg-w0miDFK-4v9`ng9WghQ*=pDS*aDjjL-1h&N)%B|0
zz&8HS*sDp-v)g5bf+=q9QqM?ocV$`nX!04)^ig2hifR8h1Ehv+72Ti(!UVy<AFP#!
z`irBI&C-gck at Wvm066CnywlXW2i)RKYQ=`s*8Tizf7^oPcsgTlZlxx+!j<2MM5(^B
zzBb$oC^9qcDJ*X0c>#alVx~MN1y(dQTJO4v<w?^z(W_I_g)!>5iwt>IEfHj27+xD7
zUVAI2s9f#M)hlS;q-ZL`1*A^qzi8Zg at p>!Ih0r>>-Te-e?=SlHbg?0Zq!+C9+&-2&
z0M<$b_<VWx!+A^-Ba6=yr#&o=)+^~tA5ckjFb_ggY&!_>Fr$A6C1MssPd0(7An``}
zt|J8nHPGi7(iUej*O&~Xmai_}+v}bSXI=QUf*6DiA;%=S($}g*rb)!Gmk at dT+hoEJ
zHpnqF=rPPHa<>F`Eti<+;&znwt(kTB93=8%mK;FBMO$*B1TXQQb9$I$%-D^rGwep#
zj1=Xfq15Y{rjdU`h93$_UcbUKxk4#(x4fxRul$;tMC!_y6Gyv$fM2*6-&9ul<L$bE
z%GXHr^^lmEPxa|RShul1h&<jf#an)+rLjGoWaS~(z%$>h>xRUTYofD+vm=hH#X&Aj
zdP`-_woh>3M_wyp_%`8PF(;#P_9b0Xx6vz7WkRrce!qXY9+*7l1(XY}1i0CAImpbw
z+y$n_Ha(Qc-GWTU@@%Ohy=)QUyf-YcLgD1I^$I{18@&(uYR{B2e1NCHW-A3Cv93=G
zYysOqcd1F$JLPBFW)xWwciV0vwEZl_haBC!OBO>Xt9(^6B(bw2Lu1X!YC+Q1nuUh}
z{!?M^8#;g3`srw1Xw7y|n(l_2ZG}d46raDntuvi*5B&xtoOWsvO$&lpF`3qbWW;Q<
zmif$u6ZVY-W{;6((_=*K9|)o5Dt4yox=zRASBjAf`1~rCV%ECl7=~zo(Y(`*;)EbB
zgBEo7Z$QJM7w}H)7p&@xi#ctucwKOvq~>w6oST27?>v5V1f07p<G_#bvqwQC8jYjt
z+ at n9?LJM>L=aUTl-9dVMwQ)LuBQQ%<#U!tZ!+TW9pi^^zjcO{0;}{^D(f6P!^+t4!
zzHWg!N2re5m4ZVFMItHMWKh&3GKr5D2<W}cr)pP47H!ERG+<MwU*AaUI;qsd0{v*P
zl7xRQR!u%>-We?%?*&j<h78ir_$}mdxh!kF=r^dgvC($cM?A}gLY!D@(8Hs2KC*8W
z!70XhXo$wr?>x at UY4N`->6ye7SV*D at j%#8W6)LY&OLiK|u=V9NFMv$0r17{9$#)Qi
zL09OvL|zf9&CUNW(No1Hw(%rFK8y$|j{<+)vO#-0`LlVXup+FvL0JV|pO(Cl?2e at L
ziQO&7R}bPTe`6R+34q-+O}ycr1vh+RPnAGs&5P9!){T at QzQ#jev(ld)fpBIy>I%kG
zGk|2 at tW71~T|gT^SyO)I|DV&$A@;jHnty<0rpV`82B!yfsgLLofObU6pmmY_QiFeS
zGK|#zw6ef{HeaJ*^)|tR-P<+nZ_rB at U1t(30An)=(@jYDa?E<zy;ulSx)HTY3sZ4T
zKwY;PuXUKIuOE4XmDe?<7(uqtFCQ_2ndu^PO!#uXA@!L{o_uc>7imZD4c!7yk{8k@
zM%N?MN<xOa>8KLK*b>Kq$ec5{-F<(+kPzGlR at B<52gG?CF3+Y*21hz207z^q_l!~%
zm^Fz%Vwcq1 at QAx{{8JX5sO?b!D_QfBRzBhg^g3IX>*555jP(TS=~|!R+J2O5veHrJ
zE<exbmz`;YvoKV^Nfd>&KZl0TSU~5j{8Qx*$x+9LhaffOGEifUNh6`N%=&*^vk#5B
zpibwDu4q+ at c|v_s4pF+mp1zO*U|*sFfTax$3Ii%slnGIrnv|+XENQJLzI&Q34$}#m
zIS6AyyqVfvRwSH+ma{lhP$Z7r6J*LIGl4k-i(aK6z at r((*&O4#AGCYhx{up_><KQ`
zQB6a>CFh4{ZSK_tRu3w>9$$am^RD%3c&%cMpoe7*wn3BgApTs at Q2aYL;p#!>`fLUB
z^VIf}E~$={?cZMPY$zZ#F1%XEj%2N&S|gq%40X>*4!}o(y0%l+uxeuwZY!C+5Pmp#
zCUp)M?est+K_R<b_~7rsgAon6DaqFq$9#Ce`95B4fw*ml*L<gT7}|f<vP#t*8}4R2
zk%mD=3Y&6pEHgN1N!qp?o6}!hFq_JP>2_6U_X$O{5E|LNG>b1<Rf6YdNlTA}>OmgT
zzH!f0#Cz#@E|Gws+=-XFJ~aCaD|#?cas6t?IGpEbSh1wzpo++-XlK9zG at c}bu)Jh`
zVz)*KAy&)#@6Hgfa;AT%Gl7{HLUv25x(h)O!yYp@=CvGVAp?|djUC~MJV7d48>28M
zD0 at VdshlA{Yx$|x70#;s?>hp{>9;So%WRjMrev=R1`Uk!sOa_Qrm0psq&W|cj9RZ|
zG>Yc)wyHN>w22B%&-VQZep>y9xEak6QZO!RXpsuQbj0G;XJ>zpWbCh22;iQJZi8>J
zDHC=Y<|X?s$rAW&HZ-d7$Vf(4Ao8imFR(@K0Ut0gppqFzUc+H-$SNs%42kT2>s!4C
zfo--SGKeX0y)???C||ZjEov7)mlGMqzi?nC*fg>#0{S`Y%xR9CKe%vIn!&<-unrB%
zS<fCHs2b*A%;kS<i;I~uK;r45j>3L+mz897?7PakqsH}xUI!E>p_AX-CF>+BuQ)AX
z>#X&pp=f+!+|hT<&zZY4Nh?yNN-f{Dm at y`0eU1kCDL%tCiO5li-kai0Q3CoYcW1WF
zw_=+P-TNQTauchBi;WiZSAz_{fxpG~b=*TciH<FaWrcsB|Fho`8Bzm@#lx(|3045X
z+NdRj?h*v%auyNrScub8#cm at -cGEDZQ>?Znx}}q_7<2=Vbmi~7Y=LZsxvd^teeO1@
z%{cKdI$|-6=(t+2%#+U6a at 6iS(Li<RRL=rZAs at VU(FWIT`e1^A4ed^eH at SaW?dGI{
zBgw)=_3wYBbWiJ+>(7EO_aZ7gW1O#?3Bi?*jK`tAA5?a4o=kRb6SH#+c7ExgFnd*`
z*eMC)1XUq^#FkHv^YZO?1`5=d;Z?moSmP($S+XXwSiFmUEf<d6IH|<2H9-a-XUr#g
zWCtR;RuuD-uugV_%m6^n{-7R}Se5$iaZTw4CGvmFYk{X2-#)^yJ3XQ_-KW$&z?jvf
zD#m;_c)v}YJRVTI5^1Qr1MF&Pm*Tq#>UQh%v|F45ZxNOC0-BLSm(X_*pr8F5_a&$T
z!hdx6ZJR|r<s6dq0=W*#-uX|yW#1!8YQ?U|M6;N!A-TI#>@#|FI*m7yEIL(XldiiU
zXaIkC-;?LCRb%Lw;zf`Q9%rVB98QjQVzTOHFM7(Da5v=j+{GR^Dmu(!Ipj3!<-yEk
zbv9W&#HAi(#!?hJ0{sz;74E06Z~mWm+uo)5+SH@*-4F<DZPEdj!G%6P<Tz$#x<7b(
z>9UrvkyCH%H%w~Jptv)#y{ehdQ=BYI?IeGAa!#KFh$V0w9T<5}=jH6HeQ~96HD(IF
zA0Yufl>;-%z71S<wiXAGXy-G;hr`}&d7f?K0!HE#G&R)SQ}bb!4b;8e;@C6#o0>Ma
zlkMkoDhkWI%qR1juP8;bFkJ292sn)>!<2hU%N%%$E{>IAoP|v6Hs>Z$w at wsOUUYwH
z2HPQ}_6*CHh97%WW$n6m-nfg+ at H|#V-sfPqQ@@yTiyTS&f?C%Ck-x5+ftz+gUb={@
zR#I<F%ujA)Jsg at NP}sO5CM>)YlcR!|$Zma#--i#0vrTe1^r!kT8DvE%WTv8AI`4 at M
zK?@1-ezLDtSb}AH$F-j01S(Tq0?2=5FetZD>K>-O(i at ekR+(%J#Gk?}<^cc&K>EKx
zbU$Y`IBLvw&&po1YhsX<{P`P$E!<~_z;*lnd;KI>4QZ=EB>~a7hY%Pct)!D!&<!+$
zTwe&9q*t9ogJBtxK#*v>`d!GSzXVLD at K9oNn@HT#i1L$|VQ-9oUtkJgV4>|91buXW
zcQ^1fN7{_B17OW10HK$x$-ztWy<KoimuQ=*kn8JKfWO63&&8d%+o+U3FCMKM=PFU7
z)dzzMBgn#_vf|`}7JhRhP(4oBGASY(0B#L)4~SrX!6yzyz)sXv{q7egm{VI~P$AEp
zV7ZRmx2DZg@%>x8^W&VHQ)j(l>{+;fE;6n^_iZl<&L?_d*_O%ylBH|J%?$w)<P}MF
z!C3+-Iih+}X8POU!R&NknV&H(oikAU;zXmdl(kkTR0c^rSYu{7$A>agA!s5n3|ujX
zQv9qw3H>gop<Kd4>vn+A at x52INxcsv7B|rC{fPS0>wcwzAjEprWPKJ1rW5XeF6yD!
z-E8C7z&--6^VDb_+fohYOFY|*Vh at I<6`D>WaFAPq_w4}{V5L&5OS-T&1^l}b#p#<l
zk+%T>${uX{9SXx?G}p6J&7?U}fJF7FrjggRLNEZh$IP&bUcmm5k{=rP3j1)G1*SXe
zY{eK(i6{<LW*pg3E!2AIKxAKkQCOcY|Fy)su=_aJM at 1PXrd_(C28q3gvex_5xr?mo
zys-~hIzUv;U|VeLQFv7z>-VBzHMouAl at _6_Jk1r&D^lJIL(oFp7F10*9rQULXTKK_
zdwh`~$_y5ZWB}D+MSE*c*yciLrP6 at w<{;`CBB~aUvPC^97y~1LA!?(4EwHEJ+aL`z
z8>1}!;$zti-`2!&HC{hX<;qzn!cOFQrE-Le?24#z9US~BpOQHtKHm<D+d8%-qO`Wu
z0z9|h1=A?pzgu7AZL#dxSLnP)9~~1B*vHs;(6Xtw8RXRBSKBeSBUul%NY_c7v8J$0
zylgp-ND*=~P<%B3Z`A954xs_1Vo_wyzOXZp7b(JW-8P>F_J{E!FUkUFn0PpR#29B8
zQv8c}UK;4L@!%p3B{^&Bfu_AWi>|GL=L at 52g12X`1Pl5v%-d%l<n7rwkH*9`z796D
zLdsr9BqiGXL{Om4hj^k;)RCLMc0BV}m}PD_y1o|=XeRVw(5A<K$zfMYz?<R$+4(QH
z4nw)>H$!K<B#bQo4MBmVMS9KuMfvGl;RknL9xgP{h|v5#E74Q?xg0}WR52}RK~U28
zmw$t=N?igt8GV*5GCXaZF#4g{{f%K5s at -u4#k1e(oNEU4IAAGKW(6D$dUS((7^`P;
zQ^BQf{tGfHgyA25?(J=ybcYB;jQoh6W-d4>BAlN48_WyMy-}f>z6NWQ^ts-y!u<Lx
z!wWT?n{nUpWQ2|DY3~AG6-w4?wLox~0~pen617gWELcSC)mCQs8R)~c`w-2>n>I_P
zgB||6Q{q8GrtZ_==DjKZdYyJ(D54>-%QTg%ha)&ogrCHJm!WppB|`jEs(DC=s*$k&
za7|POG=0)*YwhRY>q0XmG1MOHU(~SNS=lABTVg3W@=%`^j-ttu=n|dW72YI-;AcAo
zP*kB{C6!N#6B!#k2J at 563w}On==0izUZu5f<YJ`@y-1WTCe!uR)tCbSyuRm?Xk%uG
zlv at BuID|ug#Z<)oegxU&tan*5*v>K7?{xTx&a at peMCE(G1Gg1)p6NMp#r}_!I#)<>
zF-%^05};>v<%|<>lZo<E;4?;wqM&xH8KKe$1v`cnir{P~R;cJ at Ul2BjDI7%#9bcJ2
z*goz&U(z(~7u{htQrE35a^O7Vtfss7;9dsf&<E~+h}vp|2>&&}a;5btO4l#>+`@wB
z4qq(9f6eM2AW<R9XR_!9eq$_fj|1D+<<;%e9(&vlLWGF618=XYBu3~%A at +spT<lE|
zfNBVM!EfOB^#nE>6755QTXoVaKzhtJ71~$&xl+d!W2vR-E_O(A|6XS3dB9+U?T>go
zlWl%~^z3`?LJ`H2&KOCrv;w1dnUNalY6l;1&%s;-d!NmkC)|l(?ukek0SxaX0pqug
zzY)g11Dc1S>Uw^m5)F>a{ga}2Izk{Hd5dP*bzdEBCMSf2WF~rnGIBdh2^PUzw at F;Y
zAlP(_0;{BFkRg8Y>RDtVzSRYiu<q*s#5&Y}(M}wcCgpAoa7K- at ndV`*+fz5(QJ0UR
zkWORd%`q!Eu_XUtqq0B2ev_&WICEFKY-Q>-!h?MqLd`dfSt{N?KnoCrjOxyqq|XER
zOLXe_W9F;O1LdtOH)BO_>nH at tQv_IwQxz096$F)EA7q`D{&HwLpf0%E<VSe?#Q>Rq
zlgfPLQu{=TLUl~+wX8V*3HAXyM$8ygq(;Amhl^>wm*RCn!g%6XhqFCV?9`C(i)tad
zY{Yr_6h4$S)Ex%DI$sslNp2Dayx0Rmw^GbNOEJVsws(-pwZUvb>d|o%=MV$62%RDi
zC#;kZTY9x8N}AI=@qCs#U8?|lbL at wIR0d9WSd$M^wh{f)bSks1_LBd>D0Dx>ctc19
z at 3;UQ_Y>zhuUN)G^fsqho3N*KCb^=T2P4xt8G~8T(|wp<X#1#26;x*HVqU2kn8_=X
z4IHwPuN8-9%^GQXI#pNT&1TrU3W^b%Uzpb>l7b7TukwO!oUYIYAgGiyA;<!Mf%*_7
zHh9E&knInj|C|c7&VO(=<=bb}QZJ}2n$opJ9uE5+z|g^iCaVGiJ4!D^Br at 43cg;gy
z<7#BS+}4czESMyraFGapU^nw90kOOwEzaXQ!r)mjFM1CgHTM$Q{$8jBhlKa#fj~J!
zFF+RD*GAbv>Y2nsf!_R5#NQ`>CId?I2E$f32z_`jsU|XUWLu36<xx|?k0$g>jPi5e
z-hlxe^dpi?w*CK48{WX`0m~wBQeBL*FY;dy`q|hpDl_>XQ&qo%le_$)iC76rfat68
ze(1smzY#oYm at 5{|P;A^btuX40XKE-oPMu{`<*_a$O4JfgE9ovIjRVnt1>0u4-|03B
zwr|<kb&{FEbW7og3^ds*r5);Iz+3nGYb(JM0_L2g-_43M&F1A-cV`hBjmYZw+QJjw
zcS6r8)JlEy;&dUV9p&JhoZ`{d#9xXhM0jyZL^fXB&4w&<*NSs6r_h2(c}tQleci3|
z7$09RwG}xAb-l840`x?GBX*XU){&12aRvpaO-glC`yBGH2Fd;HN4Fqb=X~{O&Gia9
zKGu+_+2jQ>H6-WKo3UWtGr~b&P)bvIcy}jVRCQG6yv at grPLGl;hHlk4+0R{-{;os`
zmM<H+5v=Zx6Dg?eq({4LXT_Q+per0DR#b&vtvG(!h8ruI$;kMBVB(PwR;RI_EP- at t
z($JUFYtV{<?@7Cd2QeU*PNg_?*Y43(($uH2PUS<9C#no>sTtZm+$`Tu_R&%G-rj_Z
z+mJACs5mXvf(Fol+9~G<s=qODOun at aJ6!yem+m;)Ez~D)(qG(vI(7{y(%Y77|K+#T
z8Vf+2_=c(!Z}aJYgSnS>LCEDILg}q`JG(uh4uF(g{l+I6lI4-ceA9z8UxA$Bf0fMj
zB{7{wawT9U9I9FgCDAO2Q);8!PtBx`Sp0LaX5oXtn;s}w6sss-j2XYpr-j<0HSTG#
zB6R(L*mJCxb^H4F3R}iH>5E=_?Ibx_#xk-aFG*J+ at YTbAMgz=2=!u-TTtrvoD933)
z_rA|YIIgv!h9Gg*+wl^DiGuFZC!pI(Z1bx-E at QZDYBy82R9X5s@@m_9xnkEYbo5Aw
z*EepjLP2&eErAvx$%5m8e*Yf)Z<{?x;4Z+HQJqvq^t)9*;X3nf{(W)gHEq$O`3<br
zrHWjokFJ=1 at HIFHou~$bhEz|RIgdNv$~YX>W*3)<Prqu$yRD}HD>Gt(Swc{~KB*7|
zTIzRBlB|q$h^$bW?HFW?MiUMVDo};6P|Y(oJ};^7W4!{+T;iC8(DRyS)|nr-rf~os
zNx5rMnT2#StS4?bMau5L>q>LRzf7lNl}M(&@Q<T^X{ywP4qYY=IC$<`p>}~8=v}(L
zt}4FM*BTv*hM>{KD{DS^w2TXBe;Q-<9`-da%s4<enw!_dq$Vx8-K=)s3<6r{nm6$}
zq8yIc8eOO at e8;32prQaX%8INt9R8GzsdyWR0`^41w%|IOp`6~wWFV<rVU3-Y06yl}
zlVeqX01IebH)pN-F_f7wwPV!=%K0cT<*uE<i54k!9RC5NCFO at arF%sgyiNH)H#V7}
zml{X$l5UG-d(Ge@#uPaWilY{!367hbSDY6cUBvJW$0_Pvx1L#wIe`&NIq}>-1HzfH
z+hm at 4x1$6|f7~w<sGcqDZ$7=cA|CbqABA#%i>-ClY+%|o3$c~v{nH`dGme~2onA!x
zmT5w at K@jv at ZZWoGCi0FWUxp;7ukQ=;kDO%B#o3fp8OoVdcn%l071aC}CbYrN`2R15
z<7Y8Zq at oYVW?c8laP1bMbK7d*z++sGPb!o-@>W&0i;PEPl27p0itQhDI%yumJKYg~
z`@!YJ??8O&AeK}E5_dDrB-KOD9U6zhq`d`MseWrED00u)UOZ|e{*~KfY#?}T3-C%w
z8qw`-I4?_Ac<U^nCc(ETLT3Q~Fj2{z`1isqjX&plMWZN-t+cisNGG5(mtsRFRLSOI
z|FOJ}aEwia|5U)Nbn}XA8&(JU*DX?iM(!7IHNJz6I+RETGYS4ZUWAR({upqN9bVEO
zFXe|;fsZEWcYZ2G&J?z|!dpbopx|cezrWpf_WYvv#Q~}j)+%e3A?MxX93WZ^svplh
z$p{iRdQfvOiZJ2ZEZ-F7SdG&$8~AhUqMYa;lBg(t>UijYv=#JzuvgY*1Y7cd^nao_
zG%V1j{0_m^9%L4@`y+gvw3(&N{Tzpdj76{PMCT+Vp(R*YtlexIUk`QGtZ;ig=U%;p
zZO7jCuv{AAVL-N*mxJbn+P_(bX$|UGQ<*{`QF%XB at vf@}-Ceu=eu2%D8A5R9j|$0O
z;02pFR8-=Q3cqqwB*!Te@){0*odoZ=h7lr18XCXvnw2$RCH%XCmP=78^&ixs=h44G
ziGzgG#nh6A*L<j<!B!woTm{<9cA^?jU8v7ho46R`O;c1 at 8VRv7*yS8ea>R&9(r%Cy
zUZGJO6czGUG{FoboS5MbWv}zfT6BIx&|t2)BBe1XX*mYHQxkx6qxMCA97+P?kAUx+
zj>0=!4S<f<`LE>nLCZ}}|JDz)iSzXJnj`h6UP>KMqWzY5RCl;)ro}ex^PBh}MF{;g
z;j_HuKtKpAsi8-~wW+(B=jxJ_!dFvm=~Z)9hL3Nwc>W(&d&YZYy0{6w7j3 at y9=o_E
zIyrZHiAfkM_ at MyUg2vl_wAx=rh3OT(^m7xYZePYBMC_sG$hdL0Kaa at TDFv&0p5aBc
zd!4XhBXPD6`?b2vAqfe29R!FnpK9nEx^=)vN{@_(cEZC;PlCg!dKGZ8)+SGR6RyU5
zqH^&p%~nEwQ=B9xDPdc-`NDTmmQ?AsXWa-rApSQ{vc;gZA?p2q#8arGoRF&b!Fm-O
zF&+rv&1Lsj<2W?2w|qFkFC;@AHuKae<nbNads at 1lx3k^+pReuA+*~ec8zY@<jnhQf
zO&!2H=%eX6(~^dhS&krTs{6+pI at v4{a8H7K(-`zG<TqP{2b0K)&q1%NABe+S3>a{j
zWF3GJqh~*0GaK1|6nfLbBQvZ?kM0mx*McY at jcY5IaNV|Omxx)z#K at Y>@3gu$-D&zd
zY7n!m-1`aS4`?M*w|O~>tssJP)S1mZVJ${C`BQ15{GNcN_kh#~T`I~!-J8tkEf}@0
zkBLgzsxEd*J_R2a6_u-D{xj^R>P0T0Yo6G-|L+jz-2m`^;>pm6X2-pc^vL>!#1E0$
zOj9`zY)U at 9F}|Dqf)y4oCgT_yXN^%>8;nuENquQmz+1PGy~eJad^*lI7{w#qI_lHb
zGw3cg|7D@&co0l_J9A7bZTQm1aJm&}Mi`&mxXabv>1*A|9k>=fNZ)ac!0f8s#^_}3
zW5VRq9&CDlZJG7Ble}WWVD3UBDfx<k+#=V7hf&1Y*Hr%=Po^A<sKVn}*tj(!1%xj^
ziK(eT$UEIU+G5o$D1m;4aIl$Z-OxtUIfk`nux>*MgbT~Qzx<D}GEPg8M<2Uzcmwku
z{4|x&%Peon7d&Zp>vE?Xta?}&Y+y-7Ao>?25pR`$vF3F<u9H{((=KPl?A)YQh&nc*
zZ=Be^8Ja9w{;tY_?6v*>)kg%jUE|||K=pSN*df&%#jTY0&XDZLjvKJ^3&$coF7sEW
zO1CS|*$f$0kDT<HMePyKh%ddvrS1=t`{qEP#ao4Ods)x at QL-_eWv+K-d|ix57mBsA
zXM8Y!^A0IRMGPkqGnJNOC|tA5oYLD4qQNn<36^c)whTXgv5?P?*^#OoqR7+uNE0rg
z`O!f^=vc``ToZ155<Dk{2NcWqW{283eZzf(`J^hFsng#aE?(-l)(fszWL!|TN#jQ;
zwRhNbN9MhwmsW_A3oM6RrV<*m>W<N49S`__H3<FN<P)5ImZFb#5=t;wv2n9&f|)VW
z$cB%<C@)flbMo>}qh{8GK|9HgwWxY>XrMcnObr~6P&SJAVm+6%d=^IsU`amB>U=fT
z-Pq6_SsTbcyw4-EhMdmD2W!rP)_s)Am$0Y%F%Rw?iwxs<8HU_sRi(SG*?>vJm**RQ
zzbl6U1I4U^0!Y|2A&U-!<3tAw<CKKEr71}i#FQ*5{I;3}>8#&RHvX8Og?uhZl|QLx
z=HBe!;CMuIPBq7G81BgesjRDsX7&}KGU&p~SKZj%lRDs`e#8mG)W7nj8}JhhDv6tz
zW{mDYqa9L!UB_UNH%Og7&b1W?Yv%EP*$e!|iNO-u at qnT1%0R`)!sxo#8!;>E)Pm6Q
zbuL|E8lSND<u~(EbN4RS!A(QoYo2^TAj1m|psanxyudPB6#6;+JT*MNnL))dKYW}2
z(;tSt*f at j-7+7mUwdk@(kNnYX^+&ybJ3*fg;EVg<q3e=G^M~q975oq%KYyct+<<1Z
zJvYz!{>K4yQfG6s(bHw9xZACU3D(uf2+&kT{YHmDJm2v?Rg?;#2z2N09h$ijq(U>E
z`E9vb+B=p>3CpNf6yDQ|AxR;+%=a+RWNg1 at M)Y at yQZ#E1f1!BR$%SQ{)=Rw%3;8jJ
zGe8Sc=Y36M4=ilvywIR7qf3f^23cL>KJJNBSGao1MSx)9w=0f?IX_e;?q6{mZP9#3
z|A2LH7^#xUgMd$;$CsSHkvnVvdLoHpX`)5-!h*s0H^jz%>2N~|8iQIqth|4E|M3*8
z(qK`dJ_OhGF7k+yeb$TLi^2I){s6Tg_(PPPM!L`BKzW8N+5Au#>0-fuF98+j6*w at H
z8 at 3+Firp!Uc!ulgM}ppVQ?!HHQk){KLNc;=V?gUw0%xm8XRk{FY3o?G-zdCO`=1s~
zHcL{nFLJlv)7mzzWv|QKWsT+*vX?gNR;KOLuTbHz&F5#QbJCRF8kISaVU)tWG8L=v
zE%>pJR_T^#*$Ulg?59$HcQ#5CL)6*NUla;ELN3m(-;>n4(u=!6utx@>3v)kWL5?Ov
z`#<n+l(&0du!(|P^D>cWT8%7%QCsQ$VkOu+HJt?ek|6)_O}a}0x}4VOoR at t;H+FS=
z#)3=}RJRUDhxs)(+jpt((i~cZkI0hZ7*vbUh{}j!g?%&4+325tiJMkkQq2)TFNIa?
ziYB)ns_9+px=;+*5d*kVt?kvE&;cI0EU0^o6wZ^pXsOjJUq`ol1U2c|mC#6YVKHbB
z>nMEJ%p<i-kSAVm&^~Q0w&!S*Ui;Y!Yf&z1DI;>?7DJaM2~taqQM|p<be>$R`*%^=
zMwp1lxBKY>-g0e!;UshnrOi%JO~A!X>id;Ua#{e4*CDBSvj1Yc5Opt+X;3tEjtyDo
z1yCwW1>#}r+(=PX>Jca at UWu_5Z|d>-ZpzM<)Rq4d4X$wHOHc--!_==@w6`t$qSi0=
z#+())iX at b-tCQ5maAMV{lsB7$e at W93?&hV_lRv?;MDHbk8O#xKm00%W_~56sT4cqh
zR4`yxt5nN-OkH at m>n|1D2XR8)-X%3>@w0VuN)OlHRt0lrL<uc9MWuN_YDXl}-CxU2
zYUIpMR$y5~_*!gM<xW%u9a0cXG>ks$<SJC=>3rK!desDP4it_Vp#Z->g7bPEROuli
zO3Cb at g7AKSTrM$&3&>+dMd_6%W at iN2bA&(bTUnGgiLQRi5;R3{kzd9HkEN4b*v4at
zqW&^ansA<i?aSYdV<mp!;qY&`Q>H7b86rYqL{<1*!O}en;7gOQfHJ17kCY2UXfZZ7
z@<T0d?;hQTflSzjB3sAPe9+9I-B*qWm;dW))gqFAT;)@@dmlv+jEH9QB!d%A#;>^T
zzUCk3h1WiN?d7&LM(|)C+59Kvf|1w%5f7<)Z<VrKe?xfE at 6g^%_y^;V<<S4Q4jY{%
zHPYyv0SW*sxl(wFtU(jvOD!}_td%i;(>OGha$FsgkY8D!D-nD{*zUrH^5y_(E&j=|
zJ=sEkONk{{Ym*v$8-wl at +kPkv?B&r;4OI$m<=h9{-;8SzLd?Pv+%?;fn7sh?&dV+&
z0B5ghOR77jO1X+2b4sF+TG|nU{m`lw>(Idf6LNrU^I$V%=DnWAPn9A>kTVA9vAy#e
zGE@=CpzCdyG^7ngJL+D9$SQk`aOf&sry!?)U*AD^0>`q)kr%DXi~m+mP(~A(TOO>u
zYhE-C8sHcs-+$@L*-s*<kUlsWsb>`5;HXTMq4BmYCJS25Pr?^MHDbpPA2+E1i*nz?
zD|kC*;J5>4p=jKNC*E_V*=|}N!xZ*Pg8hp2+S#o(5c`;cPCSvz*pAL2oyZlB`~@C=
zt7ti6J#^m%lmv|ZALgUDj0BRTLqw8Ue+(pg&lu^;aovUL3dr>S_NA<gar)Cf<|V42
z;A~biTZn;gPhPpeMx$XIK;tlG#db-DOtfh^7Hdy*S#Ek2MvK+Jo$f3|HRP<IB$b$Z
z5FE&Vwolid2<}(Pi4LsLp5{z>kEUsVeZ_f1zFh32D2|<x;ay{;Mn7KI{@NpC^_5Vo
zmpAvY%uZ=-3)^4PRggNYT6=klR1o`R?IFjr_*utWY5qNo(VuR++j}eaaBnEiGn!uz
zUEx<GUAzgIhKF9KF?|Ksz1DO`)jbcHUp at Ru6BlxKKOs23%<>H6M&fM7T!zMfBNunQ
zoP0*!JJg24rTi~;E37t<gz{1!nu$Mn0>;)UmC1xcSm_V+ec1b#Y{r5ci3bp6gY$r)
zszHWq{IL-&3zTqtf+vdiw20!|r=5yY$V7Ai+pz|>N$86i&DM&unfX2Ik#UmLVdE$%
zfI3r7<ZuI(!s2_rD!Y<a4Dio?bc3cuh#>bB1I=uL7t(h66Z?h)U#p+p-sA6w5}Oi2
zl1sE1Lc5n at F2%(bqi|q)br+G&!}5j$SGB}ZJ#2hQv5Npn<1bJBMU0}FRZ%cQTMIll
z#*KO3UJ0T*>9 at ZRJ-n#N5{y-!o>tL)6TkSl{WOcrcTD16b+dDaNE^L>^0Q=`^6$VB
zXZ;pLPDH)|?Cp)$%`vh!_!Q+>n4HnazRlWX&1;j6_V}XE|9B*iRqXCHZmNt6z*EM5
z91rg?9}a+`$nQve%8{#!${6q^elp2gaEmHc7I3a9Ef(hSV6+xC(3ZK-N{9Hv+SFk&
ztpCw!AZN-4Urv!WQKKY(1Sx%nBF};nVSp-j&LpZn)`E<VM-6*Id84zOzT%3PB9nHn
ztbM7IPNP at eXZ?#2v4P33?GyboLJWoY*J&(gbIQiH=MkhqW6r5q2bs_70_N5?lEzcA
z`oFw3E#Gc^90o(zYqMNQ-fNO4Pp2^7qCjCKG&4XLt#?&_H7o^x84{H&u1x-XU6df;
zs~T<YG!13LNX#(7(_~Q#OV4~Gh|;@>Oxyq4NMV>zKoW$dq+|}@YI1u;|Ag6$fBh;5
zFNh9#E^q at oULb@NEDe_mNfuiCcq?tW0rKs8Q{Kx_^5xCLSP2HA;kF5|L_6K8ONoMz
zi7|Cd#nx(-d&K>J38vse&_~>0B!%S~-U-Q8k=%*53tUN9q{4dwJSg<b$%a2c+;e#G
zLHYt2vI5AdmOc~+(iCH@?EvI-#ET*RtXC$R;@=xC-7Fx=hWT`}@zC+FjYf!L=5Xzq
zLd8ZVQ~a*o5q7*TXS6;JqeJ~m%$m%QUAg48ezhxghJT%ZWj3}o!Rnig$;j9jh#d%V
zXFrzbVu9+;PaZ9N#qmW0ySyphXvsNm#89o;Rc#-$&bL_8DC2RVA6l#{JF$ln>V9v+
zI4b>%uTI`;N%kNo*@#!7QW_+tE4e5r=C&fNkiMzUiBh2xQjvl5ukTp8^dz{K_Jh&b
z=Pv at xlyHK7+%bUEK{J($QGjceK?aRMF`Ut;rpNw;`)dFbP##nHRAQi$=#zc&J{vs-
z1178Atv`A(2O$RQOfWwI&;JwdR7dl7#Hc|X@*yB|)FyZWXM^Crh`*1a$832c%j2oc
zJnUtQZVae=`i0vSBXZjo{Va!EXRNNE{V#Rty$Qa5E9AI>-g}ygx=D>nqgf^h=~}iM
z8JmBrNax&yYgeZ at EM~+`zb~Lg&-dy~H0zy4C77})Algy|v{lQ|m^4}C=PPBwdt-f#
zVT at 4_LerOdCSu+k{6`rOo~Uv|F7i#VmN&;}Jxz$RCX~L|=@(8y1(MJRW#dvX6ZWF0
z=~DcE5%H<cAQJzi;&O%UDXS4QGmT15Qw5OAf4ptyxtuh02UY(A?g!B=jxCh)NG}S?
zuo;{s5jaB7<^%ZQUl(%>uRS7qZCo%zr-}lPO6q*vNm2N2Vz$Dw3wZ0n0qME?kkiZq
zZlipv3ql2-?dNRie-!dPLTUk0*2y9zl)w;wa!-*@vnc{25Q-Vdm<~Z%wSC3RRQ;zL
z>Hi2hIVDh<$<}TM*-X|_b)J+@&Fh?`kL{CgK)`9x!&B at T$LB;KU at +%&9b0F>gTR*0
zXz<zuMp%<6o?hK;fDq=E?+ee=JojgRuo#I1Itfr>drK0*Y-`q1M=Ua!8e1 at +Sv!S)
z;+pAxSv&)zH`cb{q36{*&`gLiSh?fmt;eRqwOE*Lm^q8bQQVVMXyRb=kBbmxZHiuu
zXI7vlW=txML|jS8>ss(kU%b0t*Xc3$LR0nQc^tJiCKGqqBRUy2S(=Ji(zS at 2l&CnG
zu^B_moO%feKjY2#Yt_!mlZ~F<qu;fEm?{XX`An<S=~VPq-0|Zl<a;dOMo>>_!kZG{
zVsNT73l`MuLljG6dYX7#<}a81FC+L%e{@v_Q&vTJhp7@?WA8BKkvm9`oZt05FvzgS
zGXOoHt&Vf58DS?bgv>OYiJ3Y6wI_`%S<ve8+7D9p%CfS6%JWn<B)9(LS5lgP3Z3IX
zG8NdX at Y#-N$a4*0;kVUoZA#0c*DX&P2l9Z)Ag3OmRBM5y%cnC9&nJPPv8zI5HoPg{
z6Mctf!{uQnX9D!lWtH}2?3 at y|LNPwF%;NCa+?g7RaG2mwHisaRkWF-SeKWp1n%3lP
zg+}Ya3uWH`y(0!;P;M>=rg0B{+-?%Lmp}?JGsFl(THZ at 5H=bz-SbjiW1H##(lb#_O
zg0053gLojo#c}Hd=y~#4?K=N1XjLjRA_;@dYl=ScX5LW^(&gYw at iRgi*rmP453me~
zT1M+!1FY}V$67~=DXHzd{YOAg^I2`BZ-9=k=%3ti>bXxpXkgw$^K~(QaS=EKLTD|@
zBDF=~IxCRtc7?t5YOF{mC_7H&TX6X)sii(zHADffb7&W&m7kvhxcioikX{$rMwVxa
zbLL66>sp=nV3fQTQxLQ1l)$sh6y5sIK_z>TLiq74p*wb9$md7}h7^1P&;APA1eI4y
z3xyE=(g(H+0xR+%Y at geIcR;;c$JX=Qa8Ggno+Qlz$5%ZYHOL3XIRFuxwYh>lHAt at J
z1JP<8GL$d)fq<Zie*78D0Ua7!0}u!Xd3Q4eIj}FU8W_!iVZ$i1T<-|AcEbv}`fR!Q
zUUH;^^6`c3n-H7hkMQ3hs#&SrV0>diEoMmXK1xITZ$8~E0x=_hjRj!RaIVu#pqk{n
zg6Cazz~_3~Br*XCQX7LroW&aO*r6rF#dj6f6I)~v8S5iQ;l)?7N455-`U85_Qe0PG
zO>8T3`-Sa#OHpxFIE6;tmHTG351wE+KU?BbXlmGd$~tHpb8p<5r0%GPou(L=zlo-<
zXd{EU7*LTLUg^kxbHplbmA3v;p>a094B9PZhz(l-AS0>0Dfx5=x?&)l2iLQEJ*%cG
zL`O4b3@$DTh*lk*o3NLM{8u_3jzR)+??s?rBF|*Ate|)3DJr-m7rye{kBfC0N9{6<
zXOgU!vwHO(io7PMu=cTaK)%mXt|Gv!oD8HLBHr4LqD_T=E>7dPaR%XlSS_FOD<76q
zqL$O*6<P?<_S#yY`*KI&N0CgdCP>*CZD+O10_>A0Fgrd?+{VTZvO$mbMawZw$I{lm
z<sWaazW9TZk-mL#6Z<Kx?+GTEu38+g8r-=ook%1Q7f`6- at N5zrNNtW${+WKJO7Zyb
zypziKbd5!SYLMcs>Dkz!Qq(J^i)ZJLg0Tz8p7YK-Ooehu at 3Y%UMfEU`s4!hdGoqOH
zG#+Iv&tTaltAHe^&7EKaoD0Ss0jv%BI%uD0tNXe=ozp1I3tfW(&<+o>uD%b+K>+HP
z>($D(>}Mbm3WJe1*DBO%CSGVHKyC6=!QhEa9_Lkmd_&pKObN``-V!4J?5~pbMFk#$
zX^SgyKiLezsxnsoY|rE1$vafs2ffZZAvG&=%@o|Ou|5E4XbqI$RP0WMAxbQWhkEe_
z90y82RaW-_+IIFZE}~v&s9K{R7cBuQa1p|N2Nav+R94z%4I3lis*V at w4p2ZsYGcR&
z58YLN=$9jX^3{=NejntX{%P|jzMyE`3e+sCtEFg=g2oo_2kit*0kaA=SRz@;?TIJx
zc!$p&mXd&vp?A+tY?v{3sPP@*3ws#1Q=AUf(Z=FNBCv}%6fR*33$fNFiBmf+CLXLg
zDa6}5qP~p2mOh{s=yHqMT)LtjqjW_81{?T)1Q-NOo!Av*I2>>?4#>}LKY at kMf^m2;
zH`im-4 at p$@pnv(3Zy_Kgs_qojNWf7*4uj%t!9eipe6#vf_D^FNjOh|%g{UA6^l^rS
zt)H6gzU`a4&PL#q_&co+2Ox?f*_fSbEXY(cFoD(nu at Y_?QQcfiEg&LVR{$0p^yC(Q
zYM~KSp{YEIr at qo#ZMA(O-PUz+RlV at Wx#T?jNr;qa at b+%rk0ic1f5ua1?;9d)l~Vb<
z=<{~MshPcmHdB#8SRojh&0B`j60Lz^mgZy1-=36%d!<ej5_F`tHv<dbrrV;(6Uep(
zF=jl{3qHTunesIB7(iq3-IHchWxYUuy}?i at WUUQSrp6mm)Z!f^CWyOh!z^142CIcj
zs-zVNeSztAGUBqe;%jZ0x|d;Z>B512q?IjO$u&sF?OkViAft84OU2Xw{C87oHJK_G
z!3hs>F$$7*WX@^ss=dA)L%W4HR(;wil^rX^-6-;!$`#$y+mV<&2^i!OH!e(nH=2nZ
zs2fq<yH<rNuo-sneW~f}kbNB+PR~Wh9)i~dgVjjL&|a%coM^|fT9n!-e=7c+HZMt)
zxzg6wLMC#5Jtjj}!M{*0AAEQRW7WXhiYt<C(6njjE at 7?AKKI6<{tCq=A|{0{7{aC2
zRO~a&IrG`+k2;{58btt(tcYxXLLNa39hfY{c_<a~T5k*&uTVSe-)ZN&eVEWmV61T4
z2Ipeg9^azJ(xT`!v$Joi$IqI!!yjR&{gc=uJXbJLx}{XU=2ffOS*G7RGK5H47cSiI
zoQrZ(Y>4X!0+;RVF(w5uAG5<1QpZ>7BSL0 at q%%#xeP(}NuTv?wrC=t1Pw*o+`DZFg
z#vt`Y9Jp3TJ)ZeEK7w1_yZn$Hfnou-OJ1ge4vp}sXOxcv+;8@$%S{EOZOna!7<ND;
zZZsUn2rS*&aesoP0gL8MFL4PRf0GkY=U~l_+xA8AP??=Q>Uj2(Y6_o3?vkxGBwM;e
zAPI!O)cN03 at N4C$yZ-5aWzgP{K^qht<Z+m}8mFRG0Sv81&j^k7!Iruff2fVPm|`gF
z at pUKu4?pn-N*7$`E4qIkNeUe?ze<hpfADw?>Q^^F<^VqEyj@!!LHFUpD|HJ9Uu;8o
z_sw- at Ug44ti{}xz$FCAF&WUj-w&5y)s(s+ye5!U}4q7lY1UOcIQtn2vJz=tT#^XbV
z8$}}<%kL0u;J`+cy*o~r1Muwpd!wGh8%oCE8cod^&|y{QSh3|TEpt<)O?|(xB6C&a
zKBvjQJAE=dly3iDh(^Z%(YTUd)zfvCCC`)WZzaJYeX_V+RaG$pboCJF$ls`P<^nfq
zEuN1K<qnOVmI=atW@;6x`MF^{eQihUg}TYMkKy4zJezSUt|M>^rV6re8TO!C?xDO4
z%2{aX13_+un6ktLIHfhg_I}64-5)q9L9Jgnd-lv&aC-)0o28`|i^)NJ=buW5VM at cO
z<_>hS4e^mg`Q1J>Q<uM at LBF?NxRJ!4v0Ss*GnmaM%-{-tmi<+N-aKZOQCW4=%ky`F
zo<yVW&Tj{8pe<KMgk)S(SopqyaqW7Ml;#r$2b;R}2 at buk+p-H)U`I`{v0c-IW|m^?
zCmA<fOa*EF77WW*)?v)h8|Ht<Y&e#Nf)g+MoLcf6pqe}lhLysig&Eopk9oD~c3xuP
zpYn~!S~kRg_rI&}sG+U0S#TSvLaKA;e}`*YP_LV(?kir5p2P@^uC3)RsR7X!_@#RL
zmrba<a$z~OH8h-q!%MN!v+-0zj>Pned7Z@`hiq~rv04qj4?dj-x%`;pwq_H|sqJ~<
zfDz_Bd$~U-_x_Sn=FiLn>^q#K8 at R!<MDu$}L!8Ec*Ye!Bwxw|}%y6mR<o*-nhi~{Z
ze#Su?wX(grJE{9#c2C6afeN;)l^dD}2R|WZ-~Z|fp6P4`eDXu|rvuCs^v}_0zP1Nb
zUtV}`+gs%uZ|=QOyoSv2ZQi;Uwza}PR1mJ{;NV7+z?i~3Y?a6#{STDrb;Hc at l~38u
zLjHPx{bl1_Be4kog{TS6u6xO_b{cm0GcVOZOQLwFBz%#v?kgY-t8)0RF-wn2O62If
z)h8iNNlODl{n0~vMmN|bA6cGlgkNTXzYL8*ihk@?c1_Kv`{BB;R0H1nW`t4i4PdeJ
zBBkHCD?2qKHWV^~Sp!HLbXw6HS+Wr8I4sJ4I8$<$FzXL;=OPld at N56u6??Gwv$bc-
z=&eqz{5z|yWuasXE1wlWpDSF(+=sR6BKnfaFdsV%WRVC`JggPf4Iw-<&tq?n%j1&c
zjdHL7OTgf5ObopMBf_4M_z at rK`%;V8t4?&j at bP4)^2;^*tIbL7dW5m9X#g$|Lk{|X
z at 7nO!j=t*$M`sZJ3m8h}P|ig7&PMTH69joxjZ!=Piv7>HL$Qe^xw5!1K!m^E(I)3-
zmO~hdL9f`Q`vCneNlf7aS}wjSDhe&o(^+h_pRPXUA#i~|;h~I4200=OB0pN!t5fsb
zad$~gw#>Ovh<)#Mx2Ly#a||jen}#HRwp;L at Y&Qgx+?Ao8YXmp#2(fbCKpfXevqnMx
zQp#y+s&+jCD`jpNnLJ?t&Na>5se+~e`G`rd*4BfDPikl<;o?BrDTC0`)FK&{c{i3_
zfflH%uT+b6gv6YXRPK%i$*b8H!-`ITg%{W}qFhRH2`;P8_gY+E#$w3<Qv85_xP<8s
zXP&q-)6QnFp)J&Bhgo}l at etFBs&!utH7f0enK1dBF08R0vgoWdeU0+rf?JBv=BuM^
zcXUoBrgTy3fR8f5c5ijUz}&#|;eemA3{Szs6+O+ny%5?`C?uZc;SeALbK%ZkTMKWE
zs3ad~gHaBXK#z%8pRcOZF99uo57naorUmjHWmzl8PC)6=^dLLW%pUBULIB0C8CE||
zy5`}fR~*xxV&3-t(mr at XzTgbPF$^Et+L*dcyrg{adx5IH3?EC!pi4Vd-dUn3kr=!l
zRGjXd#Y at cwjGS5ssJ=Dhsi6$p(nH^NQ!RYccx1jSR)}<LO=kR_6EEU_`zX1jk=?4W
zg;vK24KL6p7h2p^W<R-Knx}Jy+t=za3~8S3_C;;)60M!Ihw{PfSN=A>3)$SDAg*`f
z^&6e|iR-c0iz6DS#_7dX4We5!{khK7*U=3p0HY<xomT{3#uds&c8}RV((~Mntap5>
z_Tm_Q9gXay#IU4V4(T<2JT6b&QKSd=Ppg{x2cOhI7xh-4(vUlD@?-~pqyBlz90aH~
zc at vG^b3y_lGQKZfEC&CHGF;U7thP at GM!Y%CL;!Q at q5W;V|1|FjYRWcu$4{W+C}Y5-
z+PpGe3cN?s^`DZkb$%SY>H<Z_y~npGji!v5a=2e9@<pc(%#iGVQS{Sr^-KNE$4x;Z
z)mDPuL_EEWt|EeP$YN-{CVxd7LX4-ktd7zL#d|;pPSpHKj0Ec`4KJ$*<!pdDVhc*?
z+%`(P6lNwvbz|}sc<cig585$OcmX at +)RDIyOH8nV(|AbzAPg;6$qpoo;FM#8-%j|H
zg9J09lypeLOW0F?5If>Xt&`7@|AxbvXc9pHewJG0oUDRUqIkE at gqwd3<R|-ufG0xV
zHST*uw~$*ZbY^ZAX7Lq{SSl2<&}dfWbQ$Sah-+_gyLM6kw3!MCBLhB-ZBqxqb8KDW
zMVuXm4Qd7Q{Gi9UyT{$&Zmj#L<lIAz!=)RzWUWT#&Wf9VcB|fm<^31CCpmYQ<3jDL
z^N*g?F6zZFgXtd+Iy4O{iCH_P8@~@uCC`&7|1dv#srqx=qm<VwUTqyAV_8&TSYgp(
zMy7CyIo<aDzQnl=ej}bG5@`&hWQQqQl6fi(eS&>lPCH>se4<dFg=>Onsvor~pwh>D
z5NO*PF)oLHo)F7;#{!j<+cDR<fd(?K6ezP(?xoYo4 at Y#w>yNCg2^b4T=%rESy3!`M
zkb)|NKW7yS@}giCj!sYTxL`cz&IsihQ>kV_j?qs9mAOPVV|GC;LT-uyvO8#cec}EU
z(_+OVO{VQzASEfCLk65}`2xf2;;duJR_JYSPnB1Hi*PvC0D|BS*}2_(d5)MdsT9a!
zvQ=*qlKa;>YkaF<=ko|@?P!zN`KE!7P7++hTN4{$-D`(R#l!%X8#GkvaKX|;M6onn
zdv+Zvz8pQ{cHj(RNLW0C+ygm^EcKIC5>lGV7kBFbRul8;e+-;O4$i$~Ov;1mgq at Q~
zD~?2ePZG`KPVPxMyb2o>o79MqeDKIl#=I7d?2!SzpfYJaiJn!@>wn8(v1zvHFfnS6
z;WVJYoBvx-F6-&_aDy=aOGvuAemceZ<Cnx_Xnu#xfGOylC#mz<-&8;L;I4z91kTI-
zugB_g$YCi<J(JTc0Q<94F$#y3mJhWvhv2z?Xps0?D2*OgEkya2v3bwiRU`JMamzGJ
z at v+;7K)bYlEc+_y>e9~zqrm2sYmt1mxS++1=KDpN2z9(JfaV)i)Yt(b!NHl|sxQYx
zmr-4ohcnF2GdP|@i=iM7`spS2Vna*1d_7YzFjd~0=tudBlxl8V887v{euj52ZDfCc
zUZiD{4i?w<nCn03uG!)=>*^+$8k7_1I;s}T=9EtpIQ%8XSw8D&FO58|R0EBzU<Qse
z!B;sN>yvlI0F37_v{`i#+D^j=C27mV<eM^O$!5C4X8<=85kFCa3sHJUo2MihAMjbD
z9jCOGi-LvbaqeTkch|V!-jAkeW~aD+F9}8C^ukdV8h~faD5+dXhMiOhaT at jNo7C@_
zrsxA$R=K)b-dGVT1#CF{ZHstUCGGE~%_Zt)fa|Ilq#3g)fgu4%mEpebnL54J+~#Q<
z$|}w`It*qJj8(kH1eNq0KjwRhw-6HpUVLqPP=O$za8xCnjFMpP^k3^cDXATQ_MJh=
zz~@adFtAwb=saQTFyqMpefk at j`Jq^vJaRDqVX4MBXYBR<9BZ9ag}zWAZE>#cv<NK)
z at dQeRfmwGzZx>;b82fp!Ro-(ko01o?fj|N#XG{%%7lI}q-+MgCMPe60pH^B_j~|YZ
zm{(J6Kj|$xMotXwyfGpdFti+h*#OCPJ?T6T8$oJlh_Y_mcIp(dO3c8 at 2|uVc{Y47^
zsT<aTrK*#V&sacXM<GA};Er+RhCaQsKQhv}{rG3RjU*`g#1)akCaZV!I3BW$)Ms*a
z4QEAx(Uf6s8+Nt9Ju?`nb0=u${%f}?cr{dqo>k$tQkW5|4EScx7qm!!VRKz!*UWSc
zDl903WD6Z%UUX at nb{LgsRw%3^34V#9UoPo8?g~0YMNrrF)}l>>1(V)g8ldWd*&@X4
zS$KPH{dOk$MqLHnUMh~AvDX1a--mEs?}&5O9P_3lXU5$=&-ltOOc(-95i3I$ChO`C
zwn|{%>iJ6jV0NY8H4f%~9)1+8E&F{KFid0!PN*`==fG;1abU0<ikFX3+XJ!$h&oM%
z)(WlG;0gEE!&^ooPst2E%eVADX?40BGZy2LaK<Kt6kF62-z at Dp0&zTKBZ8DJh!6WR
zcDk2nnd&SO%38$sm&-ZKvi1wI?Rm=5bbzYel=XQev at OUjbR0f^gchoX=zUU&Djz*y
zpjcPBSB7wV24-F;k7jE_57 at 1`-%4ae7|g0%!FjS3KECf*FEg*oO=bl{NZ63m=ciNH
zE$#J1WE}}&B~qkI=P4^6G{LjKkEEGbB8?cQI|{Q*jjO5jhWi|dgRHn&jPzl|w|5fi
zYbQ%z{7a)PbPWf8h-Q1mXO~r- at gcGt-6md607j@&&c?*bk at gHWZo7K8jR_yA0WVuC
z at b>NC^GO@?aN+${)0%lQo{fmj+Gv#PM9=x4^MaTrt?i;2{<D>2Q&29Gn;^$^Nf}v2
z+9M{ohU7`H3x=ZmOR+{HrnRZq=|-T}MffG7GF6k3j$0^yu4>Fa6#5<P at hD>HsJZ((
z$PDD;mt&WG5^t~EhS1ZijktF*d2>iF$6e-q${PcyUx;CNFXa<b6eZfL*5Gc?HVc5F
z8mumia6Q#rfX(Qdn)%mJIfdlRxn5w%n3;duWnN*(8=@jvg$O0DE8KyNc_)1}xv2g*
zMNBrD#C2<bN}WaNJbNo+_tPDjB*oav$aY9o4L;+`k{+ZaSH}NJJ-q&2U6^K-bTP^F
z1b;pGhH at s+*YTDv*|=BsgN;8Ut2%4px0b&C;-(Jh$W_1|`OR0h+X^)m1|)+3jzHjf
z=R2L!&}Iu%Mhc<TIj^x3q!~u$P%B3HQ-|azs^<HD38#1X#><a&*D_)!yd6noa$;k8
ziqIG5I5@@LB+<NV1Bw?Fubx75AwWU6w=fz;sx%83?CZ$tDAa{{UVEro!A;W+M+)dp
z9iVJcmmAPh6!;}bL5SsV(FR~c+sIi5nV(&=_u^=kyNJt-Pqk9K`)$ci9iCoHNGwRA
z at u}Q at a)>Xm&pjT%4aC$UO at nuHQW+l78**n8h8Pp^0{`T>vqQ+-L^3kiNb9_fv|%?#
zTW*)`x27pbU76|Rs(mHs4(CJ$!uTILsb_!)ix-#0ZzT6-K~H6bw|?pYox=~~5#1_O
zb;4!Q&;bgqz4tAs*cm$Daew3W_p1>+M#}VmQZ`eF1Tb2`5$sMR67ugiL)>~zPto5J
zQw<Ro2d%a)1{_9BlxSA)kZP+T`P(5`YS?5KnW$vJ9(|sVb#09y7tToJ)4xi>di at y#
ztTwe{b|no_(mjEZl_BGsiU6C0xI%pS1X=@u-;Fz!2gyD4zP&Te<JI`S7pH)e at VY&J
zS1Zw9k^{^5WqCa$ODI+}K$E*b7;%KUE(gb5sr}%}k`#_9FblWP_NLLxwWQAG_w<Ku
zcKwdfl*5M}3MOnuiu+FsHAw2*gk&ZeekwSSa;dyC>j*@*r>b{I9oK$V=3Ub>HS0R}
zvDH+16xlUr?V)ey{4X1dF=>g>w*YT{7Y8MBkFw#2E#&Y$V2%z#JIwkpX`E2_Vn|3n
z at D=UpH~L2%J4OCzS|9Bhc25kEI|Lsw(FnPLQ)v4w#l87NQ#U`~>wy=`4%YjYnRHC-
z|91}2^J|OFwj!DlWIe$PorXvl0}Y{F<@a5iY734`ptL^9$Ss|fCGLQ4Aw}tbbZ>X*
zW{US(vHlQ4jW$P6=A+ukQZyeN7r<<WsJ7cP4#;s{-1DVMq1~iXmY9f`dY+=MQ$6<|
z at 4|RRY6~4;|E<zTT~}#5+gVg{W${!x<|O1!mR at ZXG9f@X;(Xj15q0g+cPTfnuJaau
z&}PR;*QK|a@$8hk$sCnS;t64YBT|;8#Ckb$5tzkcToNSeZH6B`kq}jv;wRObK<a9M
z`8%f^x?Lz=D{?EXv-A9qv- at Knlhv9Uh87I}X^mA$V1tiElR{7RU)+9_KM`o{8bqp4
zZYsMIp9BqyPT<$*0Bl?*Ec*foT9Nj93gTJu-b!U#x&`eGC<U&-B`N)X9qB at DTr-Kc
zhtai`jrQQaG-mniSPHpfb~~es$w?ityg&hnvn{Gid=(eSm6ZP at E|B;k-&k(W7s5k(
zHP<-tU$w=kV(!Y_B&xXk2>V9kJWSVtwP?OlOZ9JCW#oU)w{g{E<?k@#dR-06u~mhy
zZVM_1iZ|Up43kN%%XL(L!E3;Ab#N#8*384lPby|+^cedqDeyXpHH#zw$AHF^p$R`f
ze`$izEw?*p4Kg`-QVmq0v7Z0d)nOBf&_xZcZ$yxU)uKWuS;O9({k4Q&EyZ4hTkGt}
zXkd&Sc-PD3T8vYjs%7NM<`VQd+}DE$Go#KE&@@BIe~M$u;!%5lU3KL#R27}=D(2>b
zf>4Q-Pg-2spu_w at up{ZODnKo}w##kKK1TSs2G_Lak-(Lc$lPNx259vRE~U}*lL}O8
zb?f`nV3_sbUg{W|*u=qz4E(DF5-jh?hl|v6F+PSoVn*&ceB1)a^+wEZ$fQ!|CJ+x^
z7{=5o*tF&b&!HQCe)Hs9P+GFzAI6MwT2<fy$RlrB=HeV^=Y=q;71o=!j~mRI!t<^H
zC$_W>dY;xuf^bU#Yt+-}F at dyJGN6Wgm5<1vIWU2x%OI~og0%vvqTki~7GG$^sbCHo
z__S};x2>cDb_y1HFs-NB;KG>w_B;^AE;~WmF=?B&f9l46J^}xL!+qf~^O7MAoH0Vd
z1yjF7r}J4>e1*mSaQLMfba!`YIOpWH+UmDQF%5TycDO;<03Wma3NgET;9AWO=mjE4
zT_wGQ(1btUem(=4zEyFkWbY1$(pu+15)&%t6?j9Jl8rMiwlAZxZ at IN<igFztUk{`v
zch?#n+e4{;n->gDjXIkZ?!TxsVLF9OcC0oYtP_yrl>cCNO0~b>ODaeZoNL8+cr>Rb
z;+mU~v1q~!j<(Lzs6lLT7Uy|QBqu29)c`y$b=A)(P^CzAtr6nJ{AyZZ>_pOn$4A=*
zH9OBtE{TlWGlkCw%}b^7;-uUIm6{1d0a`~Ac_1)<s@~*74NBza5c7z6vHURlfeV+G
zLg_#>Tq_$q00lt$znvp%2|YnEDD~n=8E;Hg`u>O*wm#nQcF{Qrm!(P8`kN*2+uljU
zEdmQHVy{g8LK<2!X{-N<8g#_G5b63-J*x<uPl+L8*&sgPCE$|VPjS125+8qu+H=XT
zPS?1)4=p9se?AbnnI3jM&9M7a>dvZAK_M3Ak;MheZe<R5^y)!O>VKCQ=r~@abLD5l
z at R^D(`JJGiBbFpL%rF0(b7*jmVKT4ZEx^?An;t3hw59)TJgy|X9juUYcmzp;n(A>D
ztV^J#)EQFze`GigYmeidl)(B3Pz(|;e;cT8V?fNjf6v21Cyw-3S!NKxAV+5^rCoD|
zyfvQ^qEUb7ynVeG&7XI3Ye#xu$ocQHzs<<yQ)}7ppWo1&vu%)~s5&`VSAtHQBmlpY
z56Jau89Go at JY)&~z0yksH_;<jOBhX>LNG9LqUX!Z8bgBygJw-GuC}gk#)rScn|Nz@
z&1v8Zf5EmixO*xYGhTHs#Vi#Gi1l#@4NS4%6{#*@zsBeObs>UlK0Iee6Fbh?mMHcM
zeXYehmN5w0xslgNmM)TMpZO!=g6jSxvA21FDNb_oScfXP9$fm<h>kAn0;RZGeH4Gl
zI4+~~mZpEUwkLzcui)jd!}>538W8DG>_Z8Nf5 at 4p!qPJfT+c8QKpb<gmq?f?4V}g4
z$>-fP5wtQ3CP4E9kP23k8Ev>oq^7p^r#bC&#3Ht=TUOjG8bGJM2OWJ`7c-i)<$sHI
zawnR)Y1I)|GQ;3AuyA%7S-D0Rl1{ByC_Bh)k-5~#06?*N|GUB~qC1;;&Yv#i?Ga4v
ze`9}%HXD5(h~GrUN}+{$u~s?wY`aIRG4x;NDS<xpis}#x2SpN7NQ3&`u)?`OKaD?|
z4P3FtfJ>fek^T4_Tw}!82l4dMS?Mb%M<@XS$SmyobsR3eU!&u2x;0ybVRS{X4wA99
z&Fvf8&)`s|gR at +gJnrxhTwb}Z3xqI?e<ZQn8#$0e^5j^SMGjZo!h~!S4mON#_>gJ2
z%mGCPnp3i<zOPUJ-j)ZN-;CGEjlJp<)6jUs5r5 at bCKJ}ui+=DTjJfr64n1tc8fev0
zauYu%gRjtlD$}}?_ng=Lwl2RbrBu>5bPPGXmu5;csGfu}owU4Al&%qzdXoFne^Y#y
z$Vi=+Q(qz%^cvSNMnqVDKVF$Qjswv94M!IgDTw|<ej2>}iLL2X#8s19V!h9|Cybom
zfH&WM4g8*4ATVoH at Jsx6<oG^2-l~FudVON7>|Vc!m)h=Qx(nYIqLt>7gV0WP#k;g}
z99X`ttj{7avCoZYqmrIU0d;Q(e_{;jah%t{_UnITb{^wQ%M8J?t<MzF#THyKqWkB>
z(`7qdS<|h40b~TfNjTnZpM3rm?`|-=mZ0t3b|p`Ue`7a+4D%bxizZu#ILhTft8$-o
zecAmlO9PFq_r*5yen^vK%V1!I;ndDDu+RSeJPRX4gyBQ{E~M4tJII6lf4W-{wFRO)
z%K&47uahn<wp#fuYYB{5x!qP2Qu at G<yfC&H#T1<EDC>iT&@v<*ot8{zb1`*|QC#yr
z1HD$&WO%zjvjM^=oUU#6j304zP#23rc1 at jaong2`qF5;%bb^Mn<`t!Ai)$G=NtQsx
zgo+)bpzE8~72Kw}c8<vue;yuC1=}sIfXPOyg|4PDd|2NhAwarPvytoCgrRnwYje5l
zV$2fn1kf5rxtjJtK^MyNcZ0r5@;1U!aNp+5XB~6QbjX+8j{SnT`3kbCI-Pzo(bY1&
zs7$#1fnPu4(>W$XO at iHn=OWMs&wIDe;$2ubgMID29zc`w47YtUe=6Ahu>W2^Yd={X
zmWgUij4Skg$W4X#e~)$PEreYEOBc<VU%;0F0)6{g&N1tjC_yXx+U^li at f;;axjs(B
z!`9Tx3nYOONT!C$h9|v at 08@K;B?TpiTnx!y1c&Fzv6De<slM!p5Oj%V>utfy^J=+O
zna~goYpsI8IwYXhe^~6ZuiypXX^Gs5 at cp}(@22?CF>R{~nZ!=2G1DK}JV~K#kW>6;
ziF at Hk!C5fiJ{ur!Zci$gR}cxoVXpT}ve2eX|2{+B6v_-(9~fvfr(&**yjf+K`^rdG
z^y?N88@!*sN>i^4K?yucwuuQJenlVC6$D500e_4tYw6use<nn{cvD|Y7rs$XoPzdP
zrpM1cwE{Z>V~U+w*XV8`%Fn|Ixy-JhV~(1w&iGJS7-t{4M^oiu;QRAe4PQ$o#l1WY
zR>lfF16e*+PReyJB0{u?>%)C8=JuFdHspjsbWu>DRkPKFm2sr)hYe?1g(A^VqN%M*
zdbPkG+Pi1%e|d;9o>1m+s~{*xwfQWEX-?3u+*B=1D_uP|tE}-z8zkK7%FbVeU$cF*
zcubn62GXm4<z->TvFFyc=RKDQ(zdRMYl_q#8-~8FFSt3M$TlQUoQ}p&1w$%P6qXbb
zfZ~~1RT|F;8cGU84 at 5@RI>`usr>!+L&x!!Ki{SP9e|mRunZKn!aI@#<cj;e>b9ih1
zCJxU8tS5%BYGV>RdoT{J0p9E!#vjdw>K97yt?`M`lM2{jJX0K#W at VjJ<D7w(kG}M7
zfV_-npgxW=Y{Yu#Tys3<R}JX!CM#K2UuLCpp;FXvEp*#cBqg{vo_I9<20>hBg`pLc
zejNL)f6)NJX^B)LfRO1v!-?v6naK){#L0dVTjl8?7{*B_I1vJxVY9{yjHvDGJlkvr
z>>OVbnV+m-#GUauiPTwtYg_eVr+sHI;d#bo|JGhfY4H?@%!wa*G7-dnvJbxcqmQk#
zl at -mR1Ll*%?_vUS9E&r=*k*%Cz5`$_I;`KVf6HI%k9|D at y2zCCb;}=OuO{Qu_`=UT
ztwr0wc9V9*%JQ|iYpoX1`wougOPY7$yagNm!h6o(`fM3=;1nfv?|;3Y+EVZ|BZBca
zJ?W#w!F5<<W!$$DxRGv{Nk_+W`CL7V%!ByAf-tRV3;{u9S9rb{hX=UaUDbr~fJI`8
zfBJ*MxlPth{g;wU5M+#nw<$zd8Q`~SbRC^Q$nx7_AefS0<(JtX6CTf+g+QE<>cnl2
zpk^IUC8Ae7bXpL<W9iCGHrORMk{}FdSrW(m8rgPLj+h|FfnQi`Qpjp=9!53RP)I2(
z+}qPKNIJf9wjk3%vviU>`Yec!O!i-3e;R-Tt%>~|gkB35r9)WBO;sU<;QO!2c?n3T
z-1Ccn{SEXYsMWkW0^*jR%R9jpruCuv5!&boNU&^h7Jz0y^AE_LT*M^3!gMc-3S99+
zXcjui!}RKcDk_f^{#3_0mmMsIsOTr^vihETy>N#29u7Dh)z0pelT8&sV1!aCe-UO;
z(0#))K{;q>di<pZ1BNm~l+^#9QH8av<dGxdKicAc^^yq8A<d;Tu|2qj-Gl*m&FkX7
zb*spCIv!o2rx{b;Ub0ESl%@!g1>a~=dN`g!9C*7;4GqsX1wy@;p{6j=BpLi)?LKw!
z!MS;YK#^<5zXi7IL2)=g|EVF=f2QGG1l95R?iNt>+{FtiXN1o?fE7%6hwhbg?YT7Z
z%6O>&qK#T?U2PFEb8?+mzPQ1_R6}3o!g!n9CjbVQ`B5{^lJR^25zU~$91$l0n_M8y
z4e4v3MZfn#VbU%)-ztSe&JOKYR`j at q{^auRtPr3 at w@KTfhO_oAX}bM at fB%)v6}$z7
z`*A<u+iUDh&$w?ZEZ1+lMGUHdUB`4CUL{aWi{smyynZLR)%_}BLubta=d-Eox9#5O
z{{TgVw`evwc@=)2Is}@74}Xc$CR?M)eKFODwe_rwV)qAR(uKZPZcO(*{G&9B(%#2j
zd#|h0>ryz=VF~rq!^|b#f0e>Pg{x1H)^5_S>|TG)L$Bzb8~n#^dcGb58osMj>g5B>
z_oX>n0_X=+jbGp?m}igmiNf+3 at bg*3%XkVSkk?cFEfy}8#B-jd2n5 at a$hUdcnLYIQ
ztDSXvJs?B6!iTBqN@~!$S#!1Kww+*92wJ@{R6tv6??4J*&DJNce?ZXo&T8+TAM44#
zintbZat3*8C~Fd59oz9o?g_qh+aX7<i5Xxyj*Tfcr{FY2o{pzi?T*p&*I2tTfs(gP
zx24EOvP%uYS5+J=5u`qh&FC^a{wE90^)?K~qhf%$0gkrtEguv_EARAdY0~Z{2wYY4
zsbGxaGC8966U#kcf98RmCzizVkb|@9H<7GeZQfho at HeumydUzuxCG>woFXJxSzKPR
zQkCcL(aB0!LlrFbP at 8Uj^NUcKT`;JBy~Lvg&7&=EO06FWe&QLK`~Px`8~L7Lxo$)c
z4rj)PT~aOvaw6TB<%QN(qsDibb6b{$yFtGR_#u5wM9TlVe~}<Ie4?(zm2KGrN<%Z#
zSD10rh?O8fQsmx!cat8`w)AKKyc<ElI<+OMrsyf|)QErMRZ8)XB<^dF><ky-Wec<m
z!VKPj|Lm at DetgV@(oh+nFIMOzaUbBYa8cBGU|KKG+j|>MG$d3CviDd6c5eMCc*20V
z%PkZ-B2{r7e_nlgW)nF~O4}PVZiQhd4sBqozmTYcm$9I*z)G|g)bb`SA{_CxSa(S&
zO at -ko06`d(L6`77Ly6w`&NztLjH}c$hK<)|6KbG$zwz2&mHdIVTs(%;waa{&r?6%_
zZS`q~D&*5QwrDbvEcBRW at q->5(&hh_Hj5zPcqz(|f5`u2R{l3<hZ*T{i!})M-&3C0
z>*h;>x0guND#VJtW*oZ83{nuBBt|87buAm5ifPAlZA%!ZOZ6-hJyR at 9dT^agVi^^T
zxjMQ$5=R03)?3UXN7m0B&mLyy7ak^nuj at v^QG4gpulUu5Nj~4)8|x%cvQ5wo>u0CH
z=}ruze>CQ*=}SFfr5F;>g(FP?igNrRiiCLNbdu$%yFm??uUQLwXkv_mE3r18hV^H2
zHR0 at D`UY84p#9q>WieTXV^>F>-azJ?wW#g>$`O at waTEEroxU2gljVCPKrFO!yb9Qx
zg;BD4=UNSnqwn+br_1A)p&Yl~IfCeMt7u&;e}&eM8!ho~BBPu@{K$BA2=?m>)r)30
zcKk-a$GmqVf(dLMYSoz|ySY~GCXW$nR%)~8iVF}RtH=~1+O)(#S};hWY(d+!9P<*~
zA2ILNMlZk80bAYR-EQLnbbBI*_7L(IZ%P*<FiNJ$D@`@)YfkwUgFmwV8Qlb8ap0!x
ze=R#Vex>z}Swsuxp_()H!|d=u&&;MU$GN2D0|t3+C-uAF#MPI`lXA8O&(vqZlv)i(
zbiyzK+&Sb#e&F`&D=~N5np{N0VXIm#2fG&p6Npw^3yoHsyyQTH+LqTKTU1SFVuC!R
z?W)*MxuLpnI37|sp7}i=0aja#PPXrBe`5>#E6-)^LleiQ_Oj3yFWXo|Bvp}K3Hfgn
zq!f=(EbrYZRl+ZxcLhttCHgsURxs%@VK!P0^r6o^8pPK#_u)oH?Qg<JjB~214Jj!r
z9#3k0!Y9li=wF9gIasQ?78SFvhw#bxC|>cKqIFhps~9|M>b~TKXk{{rZ-0wae?B|q
zoIs_r$Gno9*thlBq=g6EtuVM<5o=|fV#UtE6<$r^VRBdqN*uG<9NYwiZ?P>uhl2UJ
zalIHnab`gRf~WWPhUay=tN-JVfQZX{SFw>kG_OKHH+kRGe%hA8o|ZK%|6%-t%Bzi?
zn^oD{>MtH?J~fMCx6g_~oRcV8e?CRJ@|{yVIq1Sb6R!<kJ|OKZJ(uiHN4$!;qn1&@
zv>fR{{xT6gWf~5L&&_&un8~x2-Iw?=KOr<TMZ~!YMrq^5GNZJi|6dURh_lOmRUbZ~
z033p}heSP|ny_pS*>oFEMyeAyArIA#lDzT9uZd!saWV6)vDXF!`9m6tf6n-;$9NTA
zR{T<J_rGYAi+|eptGiR%R)vMT!$pIn=M}h>DI`*A`CxAwY?D8wXp)nmqj`7?NLj9J
zkOjGYY*Xm{I02bxhnCi_+7_aGMs}BXs1d3VCxRf at 1i!zh1W?j)1@~XMpy01JBJINW
zQH(~~;|^3S)psD&BN)f|e_9njl0u>klb?=HteHog)*Ycskk)caNuL26aJe%JhCF at J
zR_on0tp at Xycs37aKK4_1f#@85<s<<!nzng#u~GyWdbRvJ+R6+kMv2cqBG!kI&Z}c#
zVWLUq at K+7QUE&3#{a*mx>(+naz?$8zOZav{%CeiEh(ve#+GpXte_aMhm%#z)<57#t
zZT#8a)8jX8a8#mOyITR&KVaSNKS>>ZimL5+prhJs&&<yrcpkI61~0DJ$;DhGHvN^e
zY;eOT^PicNyZILFEu!41g=8CM!>~VgQ7?0a7s54>vrRwoU1A#i)#D&(J?0EUEQ||y
z_C~2B)VL>gZ5=w|f7|-0$*kjH&>qo8a`5#x2>rYbKmFkv_;mFw>r;wR at b3gzy}8!>
ztwYlpk(=&D3L>c>hbru9-|NmHYehu#*;#|;n>^+VLXYXg5B9!$+%IM;!nfaU;t6dJ
zELm%NBbLlIe2QzEl|j!hhwY1^alPsD-W%%1UNOZgh*%((f1T0dRfh{u!HE0GR7e)e
zVX`6(LaY#+TyGJzD`KJ9Wrgg|gf5Wet9|Je)j#Te5lxLT8Vm+fK~kIleUdBYgxK)c
zWz0|vw*M)(39KozO;db(VST@&=f4U%r-s6;F$aZV8kzzIwzs!!Ln$=v0XzM at nG$cZ
za3};h at rY+of8awLoe5C2y+Us(!lbL`{hGP&ef!Ub!oCVg04Y*j>WBdCDf(wrOm>w6
z1%M8pz{2H6qJ{?QKfW*@e_N5b=ZnE&?JBOCX{DAL?3yT^<2A^*9}7tJ^QaVC(G}5f
z-iB%M*0{<eBQtai0e7k2RAY4c<k>a_u>!^(eL~D-e_|;@e<OwxgxYjP2NTWs>n&gU
zuG&<Fie2pwSlOI{-;?RDr0L#Yq_WD95~|ZCNxq*F>5fG~qnKc&i3}jt>FHdZ{xn>`
zBf-i8K5b(1e_-e!_!(X)9;yGmGw!+dGTL-D9Vstl4g(`{LjDT8(3aKc{R6yG+3l3x
z2#@kse<PNR+k}H_ZuL1Y9iqEs?<<(_vp64&?RPq`5!r58%xmtKIK<a3UuP_O7B>_e
zUbe;Vi3O{x>@!LLJmXZf^jzvm<c0{^ZIB$Oq at 1K<&68}6Y;1655pfYUuR9?qn5x5f
z64%HWejh_s_%>~7fX-Ths!$jIEIFPfS6HnPe=IEu>CJ at sTk01SvpUskoGDlrq3>nF
zvQD-y$l{|z1mS1}Q&i*OaA!hur|f82D7>Y62Kpp|0q1cxG+G7Itq&*THJ@;HCiyTP
zLAYh5Dzrr>1*6$k|9_=A2=Rss4q_+_5Ao(#FbxZgry{r+W%#3_?VtF7oIOv_55w2^
ze~B_?2jGE>Dg&UFlGR7VQY83{{p12sClfcDj=&IcLLw0%Yr+vj(2t5kt%Ro&m`FG1
zA8<8>Zq30bq~y7Gs@#$=k(G|oK<4Vg?Y#y}o-COE(!z6t<u1nh{49k6g?Ui=x2bUA
zw`hkV9&%Uq(PHrPOC%`9+u>G=Io*h?e{bJ)hsxtS0oB#U1SyMUczF#)a%kL$b9(;J
zK=QRz{E&5%!iokOdm!TxnzS;=2_CZ5!a|{~O9{FUgV$ed5E3V!%}I1T{b0p^@EE#m
z_ at n564O$f;DkiZzlk2}sFF at rReAEIlZwAk+h|18c^sAHeBVch!t^41(rLbj)f3R0u
zOXfv=+49fx<56p!&u(|(5 at S?>5F^<DqySpeNFPqEs~D5g#skKL+_VkxJdH7aK3+pd
zkMP&xbQj0B#=`3|rKO=la%N?+grzk1`H<%0$(+FCSk}UQL at exWVpC7BTlUXb0JFt%
zd`HBvd4jzPdUO*oEtdYmU(S<af4Cp7!6)q4BWp2yLAP2~)>{xT&A_d9{tX0_A-D_~
ztUlcKX{go;$MesQ_toTx%j}Srd9NjEA9HTA1Z{P$S$@ZsYm2Q2O;jCTDE$J33P>b?
zD=_Y(JN2RkW33w^PIS~wQx(eAL@}#DtBX2<YYd_uGz8$Vv{RibK)#sze_v<aYhs`-
zei!Y&?VDmc@$a0Abp=SF5`g>t4w12S9)2j7UDwszHBby{aSC at a3xmywHwBBpB(U?M
zGmer?Q36vQq+K%ETO!!eyUO$x6^lU`45y(vaGgN~3&{J2J&HdCqCCM6$&<LQp~Owe
zkNHf(kuoIU*85K#O_hZLf8(3^MlTYtK3N-G4aREb?HhhD+iN!{nEJ3{IqpYA<5>vm
zR?m#mFeK9qA-h{`0k^UYPq+n*cT>qI$K{{2`#T}gpu+cFib5GbpgH06%ZEfos)Fs9
z1}4<m?wix4txfbS;lmAl_G>+&WcG)0vHPfWxpOzf!>?&m{e_yue^9<pmQ7U=8s6T<
zvJomEP}3<FPr3iNu_PZucW_C at _iat(D=FONd<>%+SsAY%hX#%4&Ft+0 at uC$eMm~>~
zrZZ;2>gY0XRFfQXgg9#iLb;oT+H`ny!L=UkOQh2 at 3VvQJn2;osi-i*M?dR*KJ6PkA
zvN1Mp_SuyO^)YC#e{|P#oxn)l0ah1-wVHTHH27n7^oA_X&@9Vp5$1`;nG^5#vp-x)
zE^OYq1yYRcV6ph^lx)<?=Wi(V=SE?u&&N%3Pu}2O{|n&!p%G}~GO`c)T3nx1bGXK#
zM9hKaqP=<Tqua5l+Oy($Go&bKenE9xKD}Ok8T=D!Of(L_fA>qhOUF~hj~R_Sxp(9<
z4 at SlESK)!=e0TCAomC$M-a3X9cD at Vxws{%~Ty=~k3J-WaL<T<|D^$F<qw&bs&pbq_
z!i*JHlne^k3rzP1?(NwQ`mzNFOGByYj2)_L9>c4gdQ=i<K)_x?l%*F)Y^PR+wYK^q
z1=sgbU${t&e=b7t7NmJ?Mw|p81J{@OS30X2G&23`$iui(&7!~ODuo>zK0$>jvYR5=
zpn)nFecUIpAKjC}-i(9_cPCE*fJTUUQZL6Q7$V}W-HigEKW~zHf{XJk(wAo3#b8Md
z at XqSIkn(qI5ER5puz|mI<jVxDV-OF^(pT(2iT at i@e?4qgXuqZxGVO+S7{!P4&Nj@#
zJ>D=P><x8P1oRdWkpe|Twf#LtJHjF5caDc;U@*514HjCIkd*OBH+sbi2)=I56Y%C>
z<&xl>!<*>}J6}Tw2n&1m*xg8TeLaj0A?p2m><sy^Jx}ORX<5py4DONk&OT@~E=^`@
zk1gGNe>LejzHs^nl)FeX$R&C_twOPU*dn-59EN(6N at Gt(4a3UFvd#*O?sg6?b^9|T
z;j(*%S3cm at f5+obX(zb4a~!V^g;HZtx_}?-O=n^1%O}%-_Tf2gxo at Pf4$ssh8kki;
ze0OA7W)7k1?r=^g4d%CLtPgO&8dlIjef#`!f4@%+-W4+BEhcLj4MiPe`Z`n)h8<X_
zD5%7deWaPmYRcG9FsuZQ1G<*ODlMUL2wb at iCQtbXQViI*O;L*M!^L7|^)v4-HtxD=
zeTO|ORXmcdB4tkOQ$Uz^V<JG0r>M2u&_Ty<_?koFx&Uld0%#^cHPrcN%sC+i>AI_N
ze~sEc5YTw#XsvbJ00uq+_t1q|gXzQ5Mw*VaNnz41EC7dPZ8Tk{pB(67dgNazSnUBh
zd%1#*2-<V&hAut7Nie*LDubFLVMrJQz^O&H+WEP5a!VYleeq(fAu_5B^dcm6_DUDM
zgdsXqK8ZEAhNqgVeC~;XXe at NcL~2=9e<qf~pj+e6{@vCe7396$10wq&W^apMy!>|U
zj85as00mAr21Ct{tHh?$L?b!Men-~4(TSsqn)@FCl3R>=dfr3m1F7M)n7YYxm_^K9
za^Vb3HejKS{=$JQ54CtPPx&M<ShSBgZ*%;WjPP^K4z7n(uTj=d6rBW1)P)-+e=p&o
zEcb+slaM+;K1uIO+2QJ!Fg2eJWoql=m(+7$^Pe$sQ^8>9swzaw1*bjFNpX;uHX%V%
ze=emNHf2X!y8_oww)%JG6nf8oUWs8K$a`P!V5)cwy=&ckX^Rtb<&vNnQ at rJ!5Yc4+
z<c>qQy9>rvcW}<NKTCiPt at r*Se;0rO6(fOi;2fV$?Hs)J<yfH2+^VT5YGWYQL~;G}
zOmH<{L=QlUMa%!$i|05$7VB37nA%6`zlz3?y*bXje>`ETHf5ybM>rmJ55+3r;o&+M
zw-<I`%FY9(Sfl5EX{z<1r#6TgA<gYryR$#ds?owOL>kK!(CM5Yp=+1>e`UEG-TS4Y
z*H!~{6nb1uCk=avtijcvM|Uih_0B#<PnsLVC%MP(RLrAch)oV?(z-gO?9Y^a6LZga
z-dhtsrfde@!YX=Gf|k}kJ+LTbtmJrRqr%dExApJiyM?5nY;y9jf0p>ZyO>PB5&xeX
zuhHLFfnhJ`9X=7kiHib3e;?1FbetjJbn`Eg8az#znl!*+=bJe9d5M2(k-S5B*)zM*
z*9VS|O7GE|@FcoLbK}>1-wM#iW#eWxA^-gms0z;t%%zjM9B%j at vurz#Bl)D&hPmTg
zzeW<)-)LtoK2mvWtW=6Hf{!xQQ|htP0 at H5X2{N)YRS7w{gvncoe_u<!fE5F!4l#rk
z4r4j(296NE!HJJJ7pO))b8{4OW8O23J^Og{)y&fU|MZm6NWE5F6Mn`TOmo;Vq_-h1
zeO5=e5gcmlVcY$1>1?s%$Xl=EZPE282Ak~;DulA)n=s7VS3XtmZX04{Dip+nDmHiK
zTa$SoZ;LszLT at UGe~~6#lPbQ~)%uxoE@<cGkDvsuxa&>^O+B|6{A71$gc8^`z6V`y
zKH3ftwZ at 3QfvRUbq!qCKwDwhglUC*a^9vcH)sv_7!`rDl3`mcoUrTv1pDJrXhOSV0
z08k(I3CMtlHFsfIK!wypTe5@|dKLlURxcy14R^NdFeLaEfA(5Kji~&I+V7~lj$x^#
zFP;YQRA at S$o6XYa!f%Lpn81Z)tAq+94TEQ=piENzU=z`)r7zbbjwKD!wf5hM1e7RE
zABpnJlp|L%yAmwllgqEjG=~hw*_qR>;HudQumR9y at Q1}h=pHw9zF8<hMWXlaEC(5O
za3<?h+}B}mf4~(vhWzg>Xu$_^@Ufc8(f-nVEHG3>;NbmmmNHm9wnE)6Iy9+X3z#AJ
zZ(YL{$G_IA`hJ38ddZn)Wl)Ddo7lRD&w#>8K*y<kXICy8w34976yj5<NF*lt*WL}|
zQ%kfvzoN6XNsOtC&p)#oKdT(rU)ONjO4;QM%%bwef02WlE*;5#Pc?^5Npp%6htn4V
zp1lj1Z+5T{H~#tNB_<K=REh-SMo;UWaNa>IsMo;29rQOc>ftwo at b+}}*;6g*>DyrD
z|0jS=j2&f0VQQm4qq at 3ZU|(;+Dj>ATBY6nr)BVox&0qRwUAyC^U|OpFEU%iq- at t3g
zjV|r_e|A$OYPmzBz=WfwVhJJCq>T;#ZS6y4=b<CQyDjB6ofrSd^YOUfdZW!KM60x@
z;H+h`N9s`~UB5s~%3xSyr4yD*i?pZcjXJ8-t!82yj`lJSabyI6KxK_02d1Z6EWzBy
zu=^=f&%-q?8q|^vz1LKfrTPR%O`U$Z%HAf^f0Vy3=WHwK{YZ;!I=KUP&*hs-Jvjs)
zohUtvIS+g%9wCCl1v_ce3Ctm!FkzUSim_GUMFq?y!cdr>108fDLP7S#Uo`j7M=)El
z#6Yhib_(VW3*7CufP-^iqkmc~E8L-E$I%Za5ahJX#Irt#uda}}`5P9-8mx*%!A@<`
zf76S#vR-1JB{?<Z**;i2MRtvo5q%e(>!F9{^25MOSbtok`SO+|v5stBt|ORzl{(UN
zjNPf+qQM6>wZ};!4oorp9R%QA>K~-&J}It6v-{s%#GV2|NpF?YpBQfkI9gU-<Jt%*
z>qTbX6aA<vTY1=Rqoiguf46$o8lL_OfAucHhl9dwOpV-Ic$@~fn(nE-@@;mX<bvCl
z{U*~G4&%YAMA{_{lE-pG`KEi-q6K7a^8N^i(FXha&XIc at yBecL&%FxUM6G2b8iOmg
zIKN29wTZmV2EH!@xqAWNL^oT;#Rz-o7XM8t*h29Un;q`Z-#U`awg at r0V2hIpf4dRj
z1&AKTw at n^s`$s0A{&AEh{jUrI8 at h%dXDKOaiVy+KO{98q4FfPg($dh1c71_a at dVY{
zpDlY}zK4p6 at 5irdif&1ZHqF)zq2+CseDCaCm~I(1#V5K3BU0lWhx_OMtG5h9UNTkB
z!1F@)hQ<~neWHlu0n-BMEyk2ie_ at z=;5t$tRswDEoUUa9N9`U}?35LX!pUY}kk4s6
z=jVOzun2aTTiO#?cCJnMKC)0CM3ijm$W&Hr=OGy34OQ&q;y%JPEgjqRmawgpzlfSs
zYALv!@-{E<iQ0VM&&yDt+T&2x<T`d}O>N(aN(cOvwo#JtoTNLF+Mgc1e~l~Hq0k<l
z<Fk+(T_`qS4{t?gg4|}8;}{Bmi&s$fsEH#a_q5l0lp at B<r5)!FW)6xN5#3`Xpp$(i
zUb(D;{~d7U at XH{&csB%BvD#ai>BJypmR|EN0zg7^H&qJvEJ`1Q#@I8sNxdoA6g*cC
zy&ke{;KjD$2s2c{=DszQe~WlYJ4uHP`8y0>51K_9NnpQZQ42pGw%q#R*H>Ze_+=gb
z|ElIZsmTOY9_;YH?~?la_<J~iEyg(PNm(f5*{DEuU}GaZNL!-HcjGngxx?fZF&aZr
zL6X|NnfuO8!J=^1oqP1ry<{jnwR*tB5DVJ?YyGLIU8UVVrEhj3f8tO_p5~~%6fbsW
zG)+;la^31rv+<*syvP|0abl1bs^!Rr!F=CtYq$?VK6$jmLUX=<!vUGiOS#^2qmBhr
zyb%V?^eh*t2Z#z76pQf#jv_k<Bw_g(l~0_g<ThUU`0IaSazj3?Xt6BYNHkb)MfV}R
z|IEPO>3M5-nE;BPe<j3Ctaz~(j*|x$UJBhU2g;0RAty?8-Y?AX6j*Jyj0gY)gDe`r
z=wQoOf!=x3mWKIgKn?6p0&1tF6BKb#h8C at iDR<^ASP+w422lAGp!6ZCIj%yhX)=|p
zBW}QB2PR>fDj#N1u?=O7PC+b3PMdnTuv#dUZ{7zM#07^Rf0Dlp50zaxUC^@+y#KIO
zcKO6n0^SM}J%TEeP&t6K06T2oCBtvW9N_0`I?jm6phbs%kLWCaGazdHVgenA<7M>2
zP$@i8;e^H*4{PFnez3s~PZ8B6V=37Ud+XXLyeO48+F5`mh&8jeb^5Z1XmGbV){yr>
z0rJ?;sK<MEf48f*`xJ;kLYE~bpLLsOvTPeF=O*z)E%^>uB3ILu6P|1H!LiLSf*rjs
zvAtrfead!HQX2;Qv}5BBCtF<X_9ebZdhEz7o0y8A0w=~L+rCXN4ZeM}6(%}PArNou
z*Sk6J`#5C>sHgZREx2rU5RGL$FE)6I-F6?2N%T(Xe|z%zu$3=nS>dPR9*`Cz`4mZU
zM8dl7!V=Y1NNqFn*#wnD`QPT?^VN*f5AagV at k>QICx=#iV+ at GlZX`b9-J`m)p-&Yt
zP)Gk#HZ2x}5l7)FWe3P7Z)-r3y;1$h-=leQ<&;aM at 0TRBqt+!PJD*pIJL!n3nnh&t
zr|i44f36D+#>FTB_$I)7#o?bH&Uq1$u?q+IN&;&2bkJxVbaZ$Z4s9W at buy0J=1(ni
z8+dx2If~KXH<tb(rFMfXam&Tn0E1?G1>`X~)~HjKb1R&1A4%)e`S;vAL+aX9ek^h3
z;;{iF2QzGSW>Sv|IN)tgpjb+jNS(BxF_Hd{f0KEbFLJ=icML&drH|kH3`g)+l10XF
zXUaxeK+m9??m^TH06pX=WL{p_WCK$$u`=}v1f0Zg`<;r3W&AsPYoWZ%-86->H~dE8
zR0144sW=^jRYLiw9`5t}dO}%2sbO!Ts74bLv1Z|>Ce`(>X5!$xb!Ac(q{G%sjSBzH
zf9mFm at d;BV`|A95LK)MQZ~3OUP7cKS{rLM%SGG|~zCJ!PS+WpS!@`|9+v4EKB<^UU
zn%cAly%68yhyz4zB}iv`t4#8}#8D{rfY1V@)_3)_CKP18|8vqezvIH~<e!=YYR_W$
za80WGF%7suKC?S~7%9`^$|)Wp;Ne|~e`Q!`<XI at gNa-T;D0E|71a2w;-qG%8izt>d
zy|n4wzMhI|=F^u~Q9_Qzu`G(%jspC(;^NZs;z~E@(CSK4v^1l!nY&VsOZ4W@^=ny7
zbZiiVDH({o1 at W4&nKOy-0U21UJC<h{Am!e^A19zX^Xe<}H=!cSSD1+fBem?Be`WyV
zb=Vov7PCv1Vw|o1b<&m0dVo6IAHx0b8%2-~?)SVYpLzHVr#PYYb!`ArfJ&Tu8b~2f
zQi>a(a#ytR*4YR}72<?oG`jK)A?LrH9Zv72f9Be6+v{&x+uRoU-GHl%zbsV5GHd1k
zJ;Ey2Uum3 at n;##K%lgOo72 at C_f7Wpy$v2z#gAH)X)NN}vG5#0y?XB$#gfqJQuF8k{
zZZMZ$7{uJqm#h6lNQ}h^b86DFG(>41-I^Zr)Y-mi?-X3<QYa8`Uaww3_9I>R&PHFE
z+K2d*Q}rIO%<ZtJ#PlCX_?~V>Cn==NT1gQ`K1k^erdrOXt?|9s{>z$Wf7~-24b*Ma
zp)7)8+F-huiR|``PeXaPM{}9zHJqT{Hxin82S=sj<T8QoCaCtE+2Ez|21WM+bcyPj
zsSQ%$Ms-3 at Jj}e)GqtL!;G9mYNF<y~VZEu%zVeQYco!LWU<*JkynH9b84U*%Q!%8Y
zoJ!;r5Z{ZgD%e|Kha^4)e`<mqYICsdr0VFB4%TFzO{9#04+8JaDO&dYow=Y3uy{jh
zZn0E^4DvF$5r8=14<{M}_ch3JJ>|FltYLb;98VJ7zm1qydnxu6C;dqaINi(CBb_!+
z0l*JO6VEf{&VQ*^F^+Qm-Z&_l0gSg-q%TxRc8ps1JmE;ESA_Qxe<*)<XXwexdI%FR
zAhs3x at d`75c2mnNx^leIQ4#kWdqyc^aGKIOLe+>?C`l0SN=~3Z5Ef*oEwT3%Wjw=U
z;Jr~>?dEjsno9)gnY~J^Jv9+~=EI=MrqAR2gl|ejk1uj?$~t_QphD_pB!qB7N1E1Q
z#XPy}W4iN at A<sMre@%fgoY$6VXox(znM#YlPZxEkEo!0hLb}zDm)3Q-ZG-9Y4cwHL
za7w(Gi-$3Qj>`g36av#ZR8#`k#)AqO+wBWrDgH#l$J78ki^a$yA!<v{orls_0|EMK
z2crQ(nzJvS<ShVV<@>Qv6z9jBtl6bOhp2s at LayctrgDW5f3IQMDPZtcT=@~@)7Svl
zjs31rdl4+DO6IJz^pUb*i}Q1{yninTF9#*x1H|5WH4ruw6sy#oMC={EsO75kr;<pc
z$*AcLjYndymm+!kOfVW>3uScqne+_kSd;3bWXVkRZ)q>mKB{MF5xh+=7>CB)Usg{a
zGdN*4(Pg^se{R^`Z>d#i<2z7oaNoa{1pvz|^G#}QTb-8GW?C<^b?{8s(zf|z8A>B$
zXFHP2w+0nB{sv|GE*A64)|lr&Ib^YroJydcm?PtpibnD9SxX;#veR25?STo!qkuS@
z1peg|S8fWBquP}U|1G4cQ$EBjxSMeDWe9Q|Lf?7mf0_J+Yi;Fbt|68;M|yJ{^n+Jk
zo*M`XiYa)?){|UtH`=3P>DaY(vD6Dj#h&|Xn%G)1Ap5!OOrKKPc2KO9u&7 at pVy>ha
zxqcOsx%Nk at m8rR;WMLg&(DUH+mUjH_cYO<VNdC2p7r&5$6xsI<GXEKm;RGK6<yH;D
zC$*<`f9aD~4;Qd+l*}fQhaG-PREDBOmUjDYj>e7<DU;t6dqfsaFS_U>q}o%L4VjDX
zQp?1f0!Ers{~!}Os}u>+%p6YW;=giBvDPzF%zK{P8ShRygR9WBJr~#l>kB{J;oOm1
zX0YL?8n;SIHs)4c2Hj7ZCq{Ort}ZKk)%qz+e_szGOUGnR_jC~G)rhy#J1Y!D at K2eY
z&(EZ;Gq!hO+Ng~*81 at algTxMR+{XuV&FYUilhF9d57c~%M}V3Z{7a7;0|_5T9VWwr
zjGC_m>GjZ1C+5E^;?SpS-Jx;wmdUBU`M{PqwYHm?Ly4YloN4>x-^1 at V6z)wKW-4A_
ze?|FB1xbP$>ct%a_eJWB5UDCoIF3kj-lfRr;}u-n+#`@hh0M+}6I#+xrE$g<Y=O9x
zD=BZ(fls5nJn>kISKFX6(D~mU<D$}uWy|efUOOBbiQ&sE!Odx<1x{k2$I32=%eBJ<
zz;!@z5=yCRE=SGTa|CNJD8-NODA!o$fB(@lNP-JW$XLC9zi6g1bRv-SZyxNkPPLlu
z3gDV`46+FSFGMD`7fHGXE_)DRY!-ZiQW_ibP%-V?Ax10_Ob>#Zhgy<``p$1hUn5$}
zVQ6#=uI3qe at TH>(GjeAFILKOgi?ovG9!^Bfv{Lin&^12wHZlP97QZgdf|`q_f1TW-
zx6p}a_cg>Q*=ej7N>?tNFJyZ;^g-$(=Xg_W3QZ}+uL-ccdwoj)MBQ#?a0esYXr<eH
zfPJfeh9KiGnau5xq5y`WfWTlyoEhqWPO*N{wc3w9WT^!Y?6G44mOfVq?gRQF1ZH1x
zmLG5Sfe`$AXWoP76_K at p7>3Ube-lY$a}ro%DSJvxOgqKnn*8kT$X)76LrLu(%LMEu
zYkMO571=_#D$X%x&g$P)qr0Mx$t5&ZJ+BQu at 2(Y~aWELVLYxzE>D at VQDZq7SD^}9l
zoi%E~@x(zKkgV7qV8J|%p<mphGmd%zVa!KH;d?ycj*OU@{adZTHH-(Qf7Ki;t{PD+
z5&{+yF*qseB`pvl=pR|dJY1EH2DIPGA5y|9Dqt(8`#L54io%#!iWif1%^ykgQ&9_h
zLhsl?1wKNJ6EtS(UV<xX*l*M!TQ?MJ81TfF;A+d>fFW?0g$kM3Hwi#TgGK|8g(*@l
zDlL2B3oSOnk7w7$3R*5Zf0Q7Kb56r0CiYYKYNK<0kwOjX=5lcJyYHq6`;eY}e5DAm
z2U6SzEy0)EZ|olVOHH}df7a8o(5#}CnXk=c4DdHJmb|+RmDqlaFvsIqpEheU{PEe4
zn+dPf2NY=3^g-Rz`#s>$K1a=UsWq)Ep<(6im at gmqGbp*PSc%SXf6rLh`iOWhlb=F}
zn)421*Umi(WMW}>4NXI#u@|3%UNz8e9Y&*Ux>#guyb9-6G{*e`d@|8FNGPtQ<DF20
zUZntNsL;OpKy at JTvIS%h_u{4#9UgUBPqcZ69o+B5ayTc7Xbh3o2W|gWC0KMa at iQt8
z7*jbXPU?1J&BO$+f8w14KG?N84_UqzI0U-C$V1v}fWCL90j9B(v19F37{ornVwL>&
z1H!lrdzYCy6>pYAgIO#6!>wdkwxd6uce<g;1pt`po=)g4vZr)lrdg`~KPb$Y3>Tpo
zYdHKPo*fM`Bfixk=Po`mC<rg6ba29n{<d`E=iPqzx(}k6e^4hs0lf?0P_}Cpyze}C
zGV@<3Y9H?%v=}v1<>&Fs;$_*x;Ofp6)t1us4E1r(RsOC8wdzcROf&@ngXZ1`gE2bX
zE;5-5TS|e*RKSZo=?*kTP4IYXA<h5 at 3kO<snzoF~K)A-`3*)ju47|x)HZc)}OcUH9
z3VpfsgiL at be-PEeu|c<nRpSdc+e3&VQHkdBAo-fAyI5RqDALseDR9^MNMFE(TC&L6
zX=q0Y7u5<`OTB<simd-Bb4%nl)lSlt;jHjgM1QeT0-B%T!f%o3yMkMJ)l$WI)Kz~K
z`0sax!zH&15)D4?U521vlcFLEh at P24&Y&KjD--k5e*vyj>i&)Geb;9;osOsKPGj|-
zzUT3$69QwPL_08XG{_s<idc%YB44;9o}K$?Zd0yNG3w}TU5_oelIwt<cumWuF$AC-
zvy%(ZPS9t<UWZF=#xQHo)ADab@^esakWDzPf$%U{!dCbymEkKF(1>H*CeqD=B<;j6
zYDajJe{*Ak>74Wz>&^rr3p3kbndG1;!Vl~OVQ7lDzAK%|M<}JwADeh&Kqb80*ZPk0
zRwRp+hn6G7@{S<Hb^5Y)qz#L$76E$v)3?zksrnTCvjF$ZGg at h^b$3sh630W``L<*s
z9jt_J at Q)>Ukm{;~X|l3LqpnV_PH at sOIxi}ye>Xv<y&T0c66}lZK{{rM->&Ga0HYfq
zDxpi)6ks=x?##m`1FX$HJ0gaiHga{os7yM at kIRcegEiy00425%yley_R+fcOgi(<r
zE+WG2?4xI4mSX83 at 5%7wIhg_<Mq4c&>%K$Yi3$dxUSmqEBNVNql8tE2`gz?Z|6B=i
ze}nTR^wR)FbJaYjF{zLi$G2sNsDX;t)=ejzjOtG3=Vf`kw0UBz*B2KS3KYx=9h~!=
zpNAcJKI35R<160~q`8d?AXA4(QOuGC!0n=hu0{u8J at +Y|@u+FKf at 5+#aN~M0lwL`n
z*8Ad>^&;#?|Ji1kl08DlW6T;kF#~vzf0JRoC?eqOaU-B_Rk;s0=3xo8Tc<qZq#`*Z
zPT~WBNce9uvdau$I4ZhH)P>9ipViPfmYH`Sr$+YVP*{Ke%+ug{$LZgK$K=zcsCW3u
zi8R3e at XoVUZ)6tBv+p2}C@>Bowgzv1pNG^qC};$^Z*5V3w7lW9RKvlpzJ%0Be^NqN
z44EIw4~D3 at FxUIW@KE&SO248ij=BmG57$;UaEkTR5Ld;E*i_!D5F!K>lyG_gG_)uf
zCc<=*dILcfq%4qg3o+|G5N4PCe=xfcB>oP8Dx~+kmqb?~<~&m6{UVfv at iFJi@&g~8
zfRGOX`abBle+D-F8)Jm|dOz_Le?rUE%9KvEgRvrjZKYz?Ok-Dp+Gx*4(u28YoLhCy
z{Yei3Ofm63l=`4NwjP@=>giqo<Ry%-93_Io7-&UQ^OIY*;+OId#~*$6u6~k88mK^K
zKsr3 at k90GD{^gcEbsWMIi9|*ytK3+b39~bvR?L>=c?GpYCDLJK$c|`Lf2KIx+Q?sL
z`5Xd;qpJipc*T2tTID+pIU%}5Qd3{90(nk=b+~)CNT<4%;99bDXW7BaQib>oP7z}e
zGEE}4&U`J#J)Fm8+J3r{Oy_-JtTC_;Jyvh$#l814>%nsleYLlh-dUc>p93`;{92Se
zVvvJWAv1)){A(YQ*$fz$e^K*alh)ow7wHkn36Vl|1t@%rxim50y~5jz8>&XP{ZiY&
zuNQ29QcC(3_qpv5=}z2z^otWJczT{VQlS=Cz;u-5WIyE4GH0R^X8js6k~v9&Z)s{t
z;@4D_7asEP{6U1d=363Lu+eBX%Q93gUg($a?h&Yv*MwQ~g_&08fB8`GR at 7sC^|UIp
z?k5PGT?NM=Eh}QSq9{eAeUpX!d&A2h^y|MkuV)^^Q;$CKmLg=D3$C6;q8-1kK-oaO
znSUV=Q<^e9X|;jmr5d|9)3_rrxl9t^3>hu?;h?&fsGVA>ET1}FSgEo}?E_Pfn&4!U
zf4`Y;mlvrKJt~VFe~Ze`<i-TTO`kr|n;_OUABYYRnI}${L0l-$bvFlCQM;%#wNxUy
zcLcVW6r at 70bZ1}k-5^SbsM){eAIS?0)N725_2MHyBRz;{-3&!a>M>kn)z+yFGK18G
z>c_TcIa`7<lFjqXo%P%*w6J26rhuaVo*ybR^I1%-fHs`Xe_1t}k%nU<@2HU#)=~)C
z0b%gRIs23otyA!7HAh>B?e=$4IsQup(#*6hP1M%y?PiFV!rd@@Mg9tOdkUr^?RmQ%
zYXGM(^^U66a?hhK{7_D~Kb+5_Sa4PXeTvOsY8|qDs!rTQJ<7F+po#l%CLXk#m05vP
zK(_LInCYt9e<gbDPHl3e3oM6*&qcgo9Z9*`dHIe*JUWABpd#001C&Cumm?w?0rj at s
zbnw3W-;zf1S+a8AC`k%80a)h*^+;ipmQE1t3}x&lVtE$c?aIBh at +99X<*^ud8vSo2
zk1-%nk at XeODCN}PB9ND(w+G3-h~lJ;hd85Er?d{Gf5?qTPTn;w$)_O957!l>_4sjz
zSIfNc(@urm&s&RB&nTsaw8bv!@)r^2V`np>DFf)ykHq|_cE-~i5+$O2;gIP?ACfOQ
z8wK^seRDNv%)*1=!dTy^Uk2MyQQYn3<2Mt+Hl8|<HcWA}V;%Oo?^O at I_cww?ea&{)
zRA05Qe|OqaduB10RZfR~RySlj6^9hE_$$?)XAhBr8_FiBNWtW2I_^lbkIew;%<0R}
z{xk9=yel^w{3=COR5exp{tcZwc*ls-x_W!BdsU1h{`EXe7lp_FRYAMI2U7ZfsAsa-
za?`}Os at 13kgOm#*L&NI9iJDG<<O}Q8Ch&<qe>X3Y&`AELxdHTHvUAcjlN+!A$Cky7
zlj)QircJJ(>PlDZbW5H1cVVE+7rPRmA>g5JI~_{=Uq3U`KB65JWCo;9W2$gvr1C*+
zO*rtrHU1f}ASK{%$O0}MAnBOJ$=+GkhK|;FM^|Tz;vQc7*;<d|L}6 at Y3y6cHUAPo@
zf0S!}Pv)F44w&+k`-f^g5s_h+lpsA$h?Vnd?*ZY;L=}=fkxI!07(wXrV1hEv4}B=u
zPqdb^cd2GZ-SFugDA48oG at Y`|3wrzIc^rsudG5=AxTNq0n>c-o5PEB<59L`j!!~pU
z?|z4)pR9tw>Gwk7M&>J;uww<i3qCdGf5tj_x9}Ev$}us-x=lX3!u&Adn39H!#_M>6
z96(85?*=a@=bE5Y`#C6i`mSv5p!|!M0K%)bg^7S4BXgXR=O at sx<H{_5<fV!2k7IZ6
z;IRqvM*6z3(^6h^dJ;3^PIiJv10wAO7?!P|k@)Ag%#%<<&1!A#5=7EPi5(N-e|^*o
zy4W-9sqQ81q82+JD~U<x%efS~esu&buo?Xa`1OkA=d-MgsGzlj at Ghx;Q24WE_*Apd
zt$s3Kqk6+$VD--8 at fK!P9O3aqrL)Y$&Az$-=Pp`aJb5hJKI<pUA%{+MXTIYD?p%As
zz<$7zKnMTWQ9vOR&54NEbp{^vf1c())A=Rh;>hov*9AyjuRzp2w2C5$_7&d+8vAk0
zo(d^E{%Pd0f#Sq-Df%lMZO1<-Q_{#5a8(t(E8md)93FQ4uMNRm^Kayq<l}&zd09K;
zhW4(?=~MSz))8Bge-WZLE008*rP}Bn=)5Eqhr+voe|Ll!$A62{3|=Bsf2y^i$Z>Z+
zdvm`?V$Y<@TpX$D6-se0#VNT+C|GLSW{EKC?QlH3$<SHf98fuZT#cEc9jD6wi!gS1
zG;fr*ToYl31(E->(Vbmav_~nBU0-I1Op4*RQAO|OZcoD{A*&tIWSMPms(>Ux$zx}L
zEmTV^=P~>%Qy`t2EX5E|fBem=E1rhXKFOe5%;eqEz>4QLd)N)8D!n3(k?4wt7|Mmb
z=i?d0EE)u(k;?eJJk8jkCl>YVu1H|jOK9U0u73eC5C}%(EPFr{<#uhmijgt2o>%L;
z9EY!_j36*_U}Cpzp^Ms at z}u4a3we6~MQ3bo at bYG-`DSI#(>OHcf6IWU++Xy*ONK4i
zd-(lVgM6^}jwn?LW<ieWNFF*1&A$K%K=!`^!k8#Pj4=YYGj&Br{74*m@<cm930a1Q
zzAaZPX<a$B7UmNiS<aoCZkAkjCo?f&hLV)ZD=%p|*g%qoEZV6qqfWy>Kqgr#j!h2*
zIO|b?(=TL0_vcM_cXnl*Qh#3$r*03t2pxY36aDivi4pQXd=So^%zoPpVpA at t*pck?
zZ{BlSp%45{Aa)VlPxa$4woU!!xy8oX*Xt*{FkhB%KDxObl5Mu!^c;?p{Ct-b2xipv
zvAk~B0=+KWc3P(bL8-Rii7euAQZ%bn$2gVOcX2T%6S=+JhoE!V6 at RV397h}&xO<@B
z)SNn4r_arF&<;E*`>{MD=GxZKNSd>0<US<~PCQDW|DlfuaR6wv!Ld)nlX(H1ao_Cz
zG|{icLBvAfc;PgQz_*`-NA;6lYJiZ5ZMhonmg|`UE3i6Ia-PLbpbPnczSnP5ZNIAr
zCdFWH;O{?Ul}_ZMUw at D_NQ}jhS0k(JtMChZ946wuj at 2#M1*b$RqX=d<5~KV%IPRkv
zMfWLKN2OWRUNfPQ39m8DL7C{3D}Ak=r)Ojc#^OVgRa7@`v<{B70dl*^CU~$j^FEfu
znKe5rLOdRZU^dTDsxS60Q9r0SxDuyOI!Y>j*|8 at wrMb^MZ-0oQu}8hVy#dy{p at m9Y
z*W4TBWU=FDxs=|BgyXMEM^JdJJ|NMS2VgebqL_kvuWPm%N)Kg2Pu<Y5Vm&9jvE-Ck
zB?SG2>dQV(JM&(IWI&c}+Vg0Fdc3Jz3)M=homsHOU5q~e53X8WIc9CGixx6-`{;;H
z|IKWn2t~w}_kZ4KQnG4X43fF85&|xeVKm at NH=eRoQWGL*o7V!D;AENARxIg8f7>PN
zRE-M*k{PZL+du(=ao|<@TEc- at xqUu%@FS}~UJ-cG3)?msh`4hQm}NBC=5=IK&o?{M
z1!0esedNuTkbg at 0v85le-x;wW7Vr)BdZ*QWiKO}{D}NC{gX0>=%)5=DuuGtJe&Kwl
zA#<r^<TzK=MtGFw{)WJ0Oz)NyY`b_$Vncn=`e)<!&>dmv$8Hw0{);H at Y-o*HYMEzz
zz6#GNU$KVEniXN_Y`h%qOo!?@PcN<y+B0x}s>tsr-CU*u^0ZL^ScS%s=O|GaiTB_@
zSUks8H-Fm#7|^?|&We7e!|E(<aGW$CT(jD2pM7l-+dZHmS~#Nuhc|JxkoZ&MZ<Lz#
zduy4!c+gZ;>fPMC!|2M4{H8n2s<>FM<>~`}Ef_$B*JT{ZvdK%U68G+b9Hr-*>+Z_E
zYfm$HeJnRVxbo0&{2)PUd!2+8-Uk-cf{X7enSYAMAdnXVmY8aId{*z!fClhody$`_
z7k_$}OgfIuZ}v_&zXonpS?r&@Bm`HK);Y!B&*PcfnlK#l0!%oT1;O)`J;BT<M72vL
z&>c6%DL#|_DsTAk?X#xkJ0?Hm&|x1v8)4}Dxa9bJ{E(bMos1g2AYYmy8tA!sb*|m%
zeSh&KfE2h+4!LD$VH{lNn!>|rXd`aS?o#grfg+f!s<{0 at y5(L{+NVz3y>qeRHIzPs
z5g!2~*0Wb(Z*xI479Mev*Q at 6|5R|JJ_8h-Swo?1)W?cNJFtXNt^(^s**bhlJous9p
z3m08cF-!A_S2=YtrIYgL5s#4R`E&b<IDg@?y)hd~M&X9<eDzZ~^&c4Gby2{oL1Jw9
zt6Oe>3VRlr2n at sM`0YP8wkbk3l{VUhY-5D8q1<%QmS#rW;t#lGW}OA_B;O+3WVRHO
zg?wnqi2Gt1mo>0s5O;=0$L?gw9wO4uP)Xs8`}4+ at c-7zImF~?{o_ at 7??0v=Jhks`5
z`%MM1P6>xnU&3Q8kW~v;gPpk8La~fM`-L<EOj^ak at wTVgy<8zPO6!9T^QdAN=H+G{
z51fWFNqc&OcdM<W2<;|4lPDXznOa_L2jjvsAAE6xEaGP;1V4{tsYG!^qnyV~dXWxT
zUYDPSoJ8{I{-!bK at 7PBG6#hXlvw!LuNs3A679*J99tTsx@!RG5JIq(-X!`0V&fD#d
zSA!pzo@|`r4V=@%t>Q`~20m!Dq at 0scOYl5*cdAo<(w_S!C}oRIX}>Cm)5 at 9D(xV)L
zTjNHuTH=G7q_ at XcYpyz9&kr)_=H=DAhi?5+7Wbq#!#?)NoWNN at WoFjW{(siqyxMPR
z<G<UXl!Y+Vu(c#@%n!tJ0sgTDREYEOS8j#^?$jaumo5GIQqIliU=bu1=&@E>F0n{!
z^oL)nIPmvuqN<FG><sR_y5c>+0yLO7FNSG!gRQ~j(q1slI0)v7q9f{RGAY8jP8Q9o
zdU at u}%IcTpROsau at 0zN@M}M407#8c*2qO+N at p{N1nNmnh1N~v(8Y`pr4?MA$RZwUn
zlw<|p7CZi?r>>$^s5D%<sK2D1>9R2f<nCBaJ)wif*#)Omvd>|~QpkaCoZ?3KxlmaB
zL?d%L(c0i8VZ3F at x95j~+P(I>|BnPT>73!xi$*vRoNeI?ji3a?=YL;4bz3oS)TAmf
zyDkq0<g{IB0~1EIGYlaF+i&<BS=;4IH5-&OL4F~bzvJK=u2Va~>zyKs)V2r$=zKRq
zQA5!T92vB(M&1HSta=l-DSP{?c1Xm~qfd7quI!Mg_jY_w#BozNlmq$7yfqH8J at dBg
z`AmX(KbvC$Q~pUF{eKn{=Gf!q6Tx{i20tYZXq>j!y<yuxh3&GLZ|7PZ6plx1UZe??
z0n at i9pS6$+iy+Q`KyxJaiI1AH4h_b)a69GZcd+SPDFU&70Nt3kH-ru%$`v<uKzRcr
zA|^+Q`8UwBpQ}TU>O(s?89iwdb7NNeOAWoJc2k at 0&tcBR?|;V*&G@|u%1kOfCSx+6
zI3=W|Rp;82y=xv0Td_rH-cJN?%#!%Re{|}IXJ5NA<th_Lw}|^&C}yWZ^Fn#KZ!lLq
zm at moFil6e%vn(%@McimZHL0DbsRgZYSARgdJ_&ono{v*NNT)BfH4F+Q2bQ(hve-G0
z)aZYJ>e-SU at qfmB2fNOZ*>=t97R20TDm>9=Q$+5&Z^+i}nW~f9pe5Um$WhTW=ffmM
zw>GJ18!BSPZbS{75tQ{`hJYw|<L9NJWZ;+#ODOV^rXRQro>~RwhjcdDyxR~^ZY9kZ
zUO1BTlI*<qA(?uXc_lb=P~1fx#in1a>ocF#I-|~0*MCDethd-Bq<`ha`=a3Az4#@y
zUvmw9Pc>LP<_>u(C@=oEaweWJT5g5M9CAYS$<|7Y5 at Du}ZJ0C__h<@QY2>jd-R|i0
ze=o$kHiNyo-uF>hkk}O&YyV<y_c)G&aZ#Dgzz!{fVaRm```Y%!h~T at q5_XP;ZlR8}
z%sP(mAb)HV?eocoZt*_?ctaifJ4tgtvV$D&sKkrPe-!YjYa%>`b{J9N&S1XOWli&*
zI=7^!9!^#@Gx5FHHTlwD-#A_L&wz51SzR$5v=zg<*YV}fzM<zqWkJFUfzRDZ{8wV_
zG>NN5l1cT>PV=qeT_e0da;E`PZLuM!c`|z*%zv-Kg*QZs;8iI1G(nu6@~DF?j1qpz
zVw5z{WB7U3J%HnTBRuh^ZlnQ%c^|+J at 3q*=LyzFXD5b6g_DhDAj3>e6?CQqjg?|{T
zjF~@!%IaH#Cqn%v8C_*$86NP<j_CL<!KG_*JdMy-ZKU at 2lr0Y^(G-o0hqO8ndz1pC
z1%D$667CJ~rfO*4o$l@@Uz#Sg(xjt~0x=5L9J4zHbFne at f~j<~cU at X682R%g5dXK>
zTQCpm8LJ=R|0|!S(U35sAl55hxGO++qI`=t=x6+NFn at 8WcVfB%$Wiyg*p16P`EA(t
z1Vvov)vdCOk at 0Vw=N-Bu30KahzhS!10e`u%nHJZZlB}m<YL9<+CncR0<5^5%!girh
z_C%dI98 at N-jw}6G<kP6;Kr#b}t@=ODNiJMOBLAMtfK55Kdv4R3=vu-^WS2?X$QC%1
z<9#@QbmMXRIabo9g-%=Ak>g&0NSl$0eqA=>`+B+WYfCOhUAa#l?(i08 at Gkp?+kbsE
z&iXVg!tG07I@#)aQffgP_#Bk~pF~@25!*5K>4;(~V35>TZn2rmL65PR#N;H=MdgmO
zA^E7``cnMLBvbLvROrRKl|JFs*t5;8_t9d7c4-u>%2pj&EZym%bVpz at _CYMMDqsp7
z4X354!ManGY|i%$C8qXrVQBi7L4U-(J||lm7v<VHHajg9-57fFam|F%xGz2_QJXqi
z7?S1jN{M0KK13{gt+SRnR)+R*7<40t$0omjrsC7u{pRq}Qy+;lGCB6xlyj&69~__{
zBt;iU>;s^94M&RNn-KMZGT#5!%1=m1CF-Ix;|O>L_#0=P#J~Di!DzUyUw_FQs+%>F
zLuZ#ShlA}vRW=)oXqOhhc6wGX+ubx2MR;w&<!1SVckyI<Daztz?ic7o^V**cl$X1%
z{J0r(sNv6e5*BMpfx$5 at UndU>wu8_-!in0*_lp~zTl#CG9zQHrjbrT*!h?AB%QjJK
z4kq;yL`*nA)Jt?<LPs2q9Dm?9Uks at 6=FCkpmk9iRS3%)PyQOu?ui}jvV;G`#yY0K5
zq!~=3zUrB6ZxR{5Ov=Y<HZq>d1G%MG`cNp_qy@&3`VN^*L~ZqBAXkayAjuZrVLMpx
zXV18GeFT15%+co_P#1sAIp_{DP`hSLW-bGy`WsAOBDXmHJGyqe%733j_MH|^q56QI
zdy at L-s1>c3%!iE}rBwhe$8W;25{ocVus{uM2goRh8!+DENcmiVw%NraQMXKP2I<?_
z-988b!vw(l=XaP*!h-?$pQQC+ at i<CY4tw#E48c%CV}KO at tnp%VLa1}nswT`M{4U$5
zvl58VtOWF*(G#?q&3{1JjSQ|tUuVfeQq4|xnqT8n4&8>dUCV6uMj)q_IjWPp<lxnW
z1kIlm+hRTUoR;ywtYdQ+YLRePB9!k4)e6YZG<P1okd45%T^?hPHiR)9DFY(%c)P5s
zf7K`x5Lf*Ze85-!iUO*xg7J^x#ka{d{3d%V)borT{1rZPZh!xiy5q}o7C3a;`jPFH
zjFnlkS at d60D~?5GJ4cmjh8dVHSPI*CJ{HlJnGHJ1l6%OogyMm at 4L6k5cG+8xA?NnS
ztEa4c?)B0`rq5YCF}1|#x!;vZnwGcUWn|F^j>@$SM;Dx<_mdjGk3C`n0Nb at kX>}c%
z1j#}DPXT4t+JD--s6zhavr%vF*yo9i_R%A<4KV1(qag-Ifm at Z#&><d~?S-_4hhLu>
zfH!E~?Q7dY7)@j at nZM`Lmg{>0neoZupc1hm5}86<1LhIkX6lz+=;}a3{1x+4zA}@Z
zQQTj(a~;33Ry;}pj<lrg%CIXd at 5Lk_afxh$T31Od5q~rj!Xs!XD{F69&t(yU^WnQl
z4`>9nxkIWi1zW*JtnJ36c%4Who#|XI48xv%^$~GJJ-^x9vmp%)7m%i*E5n(xt#b3m
z{zX)5&o`>|4MAack^dhi5gs$Q2vPNxuo&bah7;%2B*1{W0LyF^qZh{`U~6<hD4KiL
zlrLXyQh#1T_b?TdC}ne3Q%ke8GF1Q0a+W-eyhD<sBAFrGo_PhfF~2BI82d-Zu>*7)
z-(M_t*U_n?Csu|K>M>_Qne^&K4+AD_$9E39P8q@^81DBz7a0>=9Muf#<#MjUMjO)T
zOdyv*WGn at zZKpFE?7c at GL|1jn3}OaxP7h_k)_>+8QSKYH0&6W={;TILTl-(xL%nn}
z`8b!{O`ET7i>D>Z9ukHCTRTqo;9d+!o%_=i?lNzjHq>$dNq`0>$DKS&<_S#>UpvQu
zFM|rprCCU{XR=I=W_g{GN*lBFN%oIVmjAqd9#gksLE9TQef7{fiFF)3g)7jp0X@`7
zSAQKc?76#Wn8$EN^f2xx7gCu<(Zh3zAAMN8*>)TU2lB>+<)_~}ov5J#O9whUlbyDu
zNra*x#;z!BquaO1Q>g|#^`?gk*=sOV;~O_70Oc}YrODg@&M3NxkBottemi~j-hw}N
zStuCxy04hGW{?TKcbOC2hu@~3PEpE8mw#@_ at y+!f(qzDC*v}mO?e#`9Qz-lBnyX62
zw78XSO(scD%wNIc$%{>F$a<kD*Z20OGXFH|EkHp)CS)`aZFgi&9n64{SHTYf;sv0`
z8`G21Wn5Q;%$v2rm=4SbbuR!)FX|+k1K(}WF3{Nea6Ym83jpy9{Nt64%L<RsB!3Y{
z>~fb9^_)3DLDBnOjFJ93JZni&;QA4@;5qV at doGD6X$%i>|F&!9cMfkMZa at TNV3m_D
zaS{D%8WO at p3)4#44gW?XNLF63*^DFQ&0dF=mk7{d4C2 at IvCXqVx@D4zAKGIr0a0LH
zT+lcDY#%TzviOk2G2iyebSio3Hh<;!T|bU$tE|{-P4dFxl%^lzk;?rLIA0#`Pnj#)
z at jWKY$3#)Hc?|XQo8S$p9T|^x>Qx{l<7bwVJnHk{1E+zDZ3ZYw93_-DZv%S6a`vHu
z`+Jao_F^cNy8@#Ulhm5wI~Q3PgLiV}Bnfj0<y2B|YH$))T#lC~KupvsxPK1B(7s={
zVHa$_$VlX6G6lzqryhm^S&X)gj&o*Y%cNtmTX%N;S>KTZ6JLR*Raa1q#98?#5ANBo
z2HvJ~XNT%6u(x^zRp^Au+G1dgK~TZ#{4jIe$!(98-IH+Xt_&EPjCdn!U;y|I6b$`4
zw*(j%)!%}kOLs)BO|ochS%2=1cNM(~;8#fW!!1-#@dqVY)7OC0q57vlo-m>Ve~$x5
z{w!6l2>V+6F`7P8;IG(pz!1YrM%(vH`Vu-%W`+l1-q0T;I6R1G8rPPcm at Zw;B<0 at D
zSO0U+fdQwzoGhWczexjHMF0N4>Vc30?E3z)Rn($tXEP$k7_6QvlYa>-&fI7yYX2LM
zJe_31R%**w(iQ+ID|tUA(*$NYxq0aO1rp18U3FA_I_LSca;4s-`muXz`tPii5}r*c
zA~)>wqT>N)w?fL2<><@GjRAyC!j=X!AJu{XzrOyd58lQF2&ko#r1GkskIR^aD>Op0
zh<Dm-$ayxbF?W}Z9)GQO7JpV|ETG#uzGG`vOb>SaA^j)qqSwjmtT_l?CVhy68Bo7&
zfgZ$9UDU34k1-n}#Sp)U^k%n*MSMBIHl%)j@%7gqexV>*;JVnc{>ltuLBj_y=1Dtw
zFp#!lX#aE;OiBaN1Kz}tm(U~LAV-at?A2YFME7NGu8VEF?0;)&ZP||@!wbdgn0!rp
z+`7cZb6zTmZJ at LX;==9kk(DuixDt{yZWsl4W_h*kc{h8onZ^5|y?R&o&Ii(l0^-x1
zYuzPkn6z2cElAe8-x7fu3Z>g{%jAe(N;5%ZNXxs7 at C#~L+&Sj>2Hl2xXfz*H=nS}m
z6ZG==O>t%YjekNPegZ^$9O#0%#{`uA6Me2)7n|T<lJR8;O9|x7&sSO%r}wq@?wOJr
z1CaiqGgJbIyM>S>Zlw5L-!-GMZ3Q(yOYdzL=0yE0hBNE1V=!WV1i%k>CfTr6z4MZt
z5nx}0bJeQPesu!54j2hv8&=T7uk`W#WRvQM@%D&UU4LHvAD#8_H)GB+-F3J}PoSoN
zjNC7Abo1C*wJ+%pW6PW6l<FcKqr3B7&*(x(iDu2|9-VWBSwRw{mpmE&h0<^7oAp<Z
z0+nRO*Pr^HGc4ITQ*;(@3 at FOZUp|79l|0FQvWB@{rlSHB&Dg&c0}<=adDg)2y%^S*
z>|QNKe18Y?S=?yIJUdc~DqPjq*wjUIz@#_nDWi%=<+f&2OTRY4^~vzZGjvD*;j%)<
z(lN^g9xx;qt4Q$0_-<mEn?m}iC%zTlH1fBuI^+L3 at 7b16bx<GkP8%wDNPncN at N`F{
zN;p`{uy9^_i;*6Y#iBQ9>k<|>S!yOA0b#k>OMllWRZ{X1sX5!Xi+OA;*G3L0mAMK?
zHn8t{AEN1FNBSm#gZGb6*)nDz)IiP$&Nyzk&g19 at OoFO41_3%st+Y4z^cJt3L-YQh
z05s=6Yq<#}a2pwqGfnV4VRLIVdui;s9S&zV+bW^iEO?srjSPck=PrL{a$S%xuUxZf
zN`G;UNI}^H$uveQ>4w7-niL&3OC2CM{@Cyfsc<V9!wl8uS*MSO{7yTlpS#ZMIpjof
z`#2h+Uf4jh-YLebGYLfg6=`%tU3Y1|EBs=csBo<n@`D{ongw7rp(m)&wp at S6{PLg8
zisDB^t-mIm?w(^m8FpnacTdU5k^a{NFn>(B<r-rn$Qq~$zF~Thya*-_BkHL34}n=&
zNgsh9lk+0%KyndxBzQ#?okyz}s!C})Y1?_K)ndL<1W`-WT`;DZg49g9xM?n(7C}KK
zSpX^3r{$<w!*5zpj*hh>$|mdQ1Ld^G3hYy=cUNdP5eZ308+>Uw at 9cF}yGZFI0e|>g
z5}2)4#$H5hw!bh8Bq3&5i1r`zj+;h1k1kn7ows8HSq?(knfKi_<mV&Ok1Y!2{ch=?
zTM-lFv~Go6ALg_|SuvJo{Vda#Ta<d?#t5jdVes$N^4nwkgaDGyw9Xw71+=h4+Z5I}
zk6d95{sa$+m<s2aGpQAAh}v at g&VQ`3GF27!yRnyRkzlm?P*9Iip%pKv%ZXp47?-{@
z<S$Dquw56KAW0 at K0mOi3xdRb}xg|u7Ooadw`$X^oQ2Iz#_=&Gxu+J1XGA-2U{|WZ{
z?}l&O-Ry6naO(kS44zg%4XbB%ue6)guI*?`nDYGWn$$Zge{YHW(;#Ew_J12K@}RCd
z?DzIvMea`ZmHi+{yRSVa9K0v-2s_bisUka+cZUE5MwRm3eJ at z!ZQvUryixH+a96+T
zmSZ3yLBrN0u=FT_FJA2N)f-sQu#0M6-A0tAH;Ko6n;Ne$Q7F(Bn}ME8i3J>P_Zirv
zb(FU)Y`$AL^M+jtRZ~indVdx_ozT21sQdgDG|RK!FjiZG;T7_%u&liT^3amniTQqV
z?G?6S$b!<j0)lBV+4#du$)DS{Sh&%t*`<!$QIv#3TQ;dQZ8%nG4ft?_>noeluq|_Y
zBy}ZMjO(4j3EgHI8~e;(v}6tQ5`xyXg<J~11xQ+<tDAK;p5IRBZGUP#(+=WlNPusH
zx~Nd3g4ovCbvIlE+!#O{d;ugFMEx&+-05o99?!L*Vr^0QEA;N`K2ig8Eq(KGsOr#t
z at D~rNd}g}=IR)ni&zeV;c4|u=Iq<MJ`OX>{>mLxkh`Za`fa~Sg7v^3QFJLrlH@#?p
zc8|646Te+e)+TtIM1RlHJj0)cSDnSSuw(pirB{e1<#Gf`uPG&bGSm4E#s;w{POa!q
z+B*VB7gT>nzx<Xyvf&XmKFR?GQV4B)%9XJXkK)yye(Ej2`ZwFR>Kd5|orahn8 at 0*i
zpbAIsfg1Z5k*XLVGMn#veE2EX2fNrhA>cfO;-IaNc78RMZ-1u|63nM`#guCQ7u2|f
zZU3pmJ~%W|CpI~49&T8Ja)p{NicDIok0R;gv;N(9$MhPmtiJak!T3UPnBXTb8J^i%
z3Q}VJ`IsPJME}$?0O?T!nH|;^Hh%4G98e3SK<_}BDAB#{Cck%$uuFNlGSAfN`GV^K
zy-6uzbnkyIjej1ES`K#Vr4j8d%MyyG2 at K3*U$EgNL+~%!KT(oI at x^*r$^dR3nZkpo
z#{FMe|5CY!fMMGM1_)ultsYOUb2`QY5xBe2RLs_9z*4ciYyro0Rx<yuGBOxm$K1)E
zO7T>)8GJo;<)6z3%PqI?mnZAL9xty<VB_wanI`K<Zhsm%$0y9i(o$c`|EB^Xh(oAU
ztf9W4g{80fX3o3bNUt_$6R5!%V-xB*MI><s=VTG>Q5i1yf_!lYJrN#kGpzKhQzX{`
zQhBU_&ob}7iIJmFQPAF`tqe@!@!}JyJoNzf?d{Jy4KSv;iA6!zgf7%v%4OPQlD<zF
zyRJtrcYg_aHOLEV)Wi()L{}QFLEt-v23qpMK38RHCZeIrB8vFpC=o3dKr-I2G6p3{
z^6+~r3Crv$9 at JugZ}GQ>=o`3ZA0nRR7NZD*OtQp?8 at v0mHzc_5wlZt`Ccpqn($zBx
zj(z)VKAMIHe`@<zF0{zVEcO6`UFP^S+GN}J_<ysblckvSZoad;!XO>kysb2wg_Q8p
zvO#f!^W$RQCL;-16i9kyvwaJ<WDgXW{wJOA?C1ZsTcqL7_s-_7(CGR9Nu7wBcgm$~
zzMm=UJJUFA@(Xz+srcr`UypOoIBJ25Z0CIv<k6QUgkP{5;L>$5JxBDq(Ltlh36$R`
zqklGa6J|dM(=zHaz!$8-Y)`kTGag*oO)g>?zYctgsY3!}`mQPY-OaSzJxEXJ2CL2O
z9}gY~y*;pm7GBY;pkJv}2F&i5&9(;E6cVy7phTc*seFYWJwEwe&Ii94Wm>X!-D7>k
zz6XQRH%ojp65g1BnE&u}S`4 at 3LT)#1?SD2r6=0h~*np0><4g|*Q?u1wz0 at 3fJ+LDI
zD^K|Ayu{ed!Vrc2Xn%6{7-$z=U%OsLdw2lM)pq!7gUf{m>Z4%)UYfpsMLmdPp+0g>
z<zqa6WfV|I9cUAG8m+7s`%S!Gu=j)H28;$tTx5204Jed$)x$@HAisB27rdLp3xBR0
zTld7kiNv$VUtS_$9UKIXZtcl+%X+;gN37GUj**CG_9zUF%~B;*){|e)RnDMxy!*}@
z;VGQaMl0T12Nb*Cp2UhQZU{>VS4<2M-YP)M{LEFnFJqNsMi!Q>qVP!$I2}hcE$o3L
zQlj)kU)R&5U_!>&(qWAf=oi?hq<<u%hfDBQWTWRo@!HI>L%aRD3%$2R5`-#`7awa5
z+-R}w`Kks6^cql3lprcqQNNHjN31VD_g5GAO|)?Yr|AHIr~AxG3$z%&yuMs=&`)C)
zloDbCska at TB!vh7-81UN9+ZtCC1Ow9)?0zWb->y+|3&9yL)Qx6>!oTfU4JX8Xs)0;
zJF>lnI1rOT3O5u1df}s+F at yZ#IMc%UWhvL|KJZV7g;QT{iA!8@^x1A3cfLE0<_*9r
zwz)|hTm at ZBmbZ%?G{fE*{E%qhLa^=ti7MWgRNC?4Xi##brlgPmN<s at Q!EkObAM0Xl
zL%o7xi at QP5Zo(EqnZTO-5`Ww_OE9UC;489x;)bCwuHq7V*4~Hr$|FS0-Bnn=G|8<v
zVA7-HXf>haF at w>a24m|Dp`Q!!DjoRM^UAhcUUdj&IMDGZ9xR->f<-}pItT3ORbj{b
zPU&_eyuW-cz|r=)8}XZX!Qg7w>Ju$8P=<WSPZMKrPQ5!dAj<5-Hh)+ifB)c!cT-(K
zN`)f<NEUi=JnD`)0mp?MOm3*6g6Rh=3IbHQola#5He`8TCvCeB#c4chg9vK+iaF)a
zWFQ at GB*cnR2A?4L2qy20PHz`$y6waQTip`6u at f<9^1NAdWoWXX)_TZM9_ALzjQGFM
zi~Ut|?$xXDZU~H3B7a}7m{3Ev46N-reTnv7jK;ppV7O;v8dHktcyd~xs>I}q^Q?)<
z@!}(Pwaug<SN9^@uqm?7+=DxGx(kK*K<;Bu1^?T4Bfp?HHkL$yX%?b(51kme^MHgH
z(^_P>vKF1*6#a?$=di!BLkrMq4AU(hyR!s}B<#V<(^wqqA%A+;KQ~XLbT5=`pR7Ob
zBrmvmi2Ynq!Hs?j;Xw8Mz!7nR!rJ79VHQs6`D`r~l`E?iGvHA at N-}?tT3u-5$wh^G
z^=~5TNOwc*I)tFWbRrcrvt~HO*pRzSG2A0YEEVu}6S8SjAwe#MM^tvP`0?ZuHY_sC
z!CXX%Tkt&RRevPgI at DP&^)ACi-0xQ#uTu<<Wytq8D6(q<`fP|Fy*Bx-Tcngscm<B9
z7~TD)o#M#1GnQ5D0-pI~5B^B<T=0+)#(96mKS{7K-&g-P0uMZyJVZ^ty+JV=)cQF^
zd$)qKMr at tT>r%7_?s{t?wtxOAka^q)nqIQ`_cdxBNPl1CgEw|Tu1trvh7P8nk;zMr
zJ(Dxcu5XA2_zt$Y6ix2B5bW{W`stSh^#}E9qVUdz!$RZ8^|iJp;=E;)OT2Z~RSpkM
z<C0;oN&05l=B_Rw>DFf#h5_vnC0E-L$_qPV(t}?S%Z#R+OA28KZQ29K;z$mI33H{!
zOXk6xsDG==DR$uwOb)G`XL+WqKJXWv$;y^Z_}X)zo~H=bLTKDe>;Z<W)H$Nlz--uI
zm`-VK(8^a4P?wLevR(yf3tZkuDIxbN-wg8wY`-qv)yYH{zrc9;yE0^iPSLeBws&^i
zD$5|}{~1rD8M%n`MhbgK6xeDN(KW8&tZKqdSARU4?~VgJd)*9Rh1dA^dW~Ik;-`Y$
z2~Wkmx2)pn at gNKWX2M<|5rQvV`<9B4T+4SVLUu)C=!Mc`l+pdgtB<@C!gAqQDq|4l
z(@>q$8Ls4uV at j97bmiw`NK5IzENVPAF6h4u at TvH+v{LIb&|6Jko9ef2;<qG4c6|B0
z7Jp$@a#mUZ3#xO+_nW|Ae<Y1S!04?{H{#V3i^`>tT404Pjw~5w9-*s?UDf*E<>WAU
zr3{xIW6%K;fYoxK@$wD~i}P4txSERQq<DRRdbrVDnf&lWDNl<}WKm7}st!6%C`)as
zK$pAe^t<ul6)(il6ww8cxnoHvB}eMUMt{XP{RS_<3+=-p5H`>_>(uM=&~wFilVuSp
z`!d8M+^4#Q8OeDw(W#C<5EZui3ra)mSy@@xUQ82U2~1(iNdbz%X``q)%g2 at 22SZw<
zNk$Vx{A1~;f=1j92wx0=dqn!Gd~I4qq<sQFg>FQWTXSiy?-E~PuNG*Q2TFFhM1Ooh
zMy#8Kl5cWx8916;|M!*Tn+B?DvT=&YelwsATHJ6L=LQqEMqE&*=<f5Ir+t<)o(LX^
z9snmFY8SM;sC#A)K+jIpab;<h^QJ~mfd{ghHGSevnHgK~;BRn*`v+1M-_=$VEo$}R
zGPREIA0&BSD-$GqYEx9V9PsWELw~BpJJ>$W<c@*yapXr(OvkSUeh{#tWt4^C+ at BoD
zABlWGyjKU1Pv7I7*EKp5-WtX#1G&kvpd~wdg39L|1!e*^xduPOW**D^^@M{6m+cPI
zZ6SmHEWe at tRTY7biNsZiBB7WQOt4B3AiCls-4!q<<Zb%+W=-t%1+?gTDSyKX+W6zq
zy9-v{oM3u**S%U}eKI1(TvnB&{-QBF6*7abrs{aiI~*(R#st^9UW at yag-&D&L6x$2
zv^C-cOnuF6peWngR<YCOrmrdH3D)!6 at 3Jh`>ZKxio|7u+NN?K%m)KuibuT&-=ZHy+
zN&EDB`a^xyuGSRp7eNiOmVZ_2feLy#T?;3cL;FwHU7{E-tZvMp;)LE30+96y**lcZ
z+RjsvE+3#Q=oVC&sgKsANQClynkqOqx3V3vh5Z?l`eS>zTXMhm07MA`Q(WXR%HEs@
z&01E55c_ghTQcV7)?3Y$Gl!gFPIF1i=CLi6A;Xmk_h30H8RTHNnSWpMsDLSdv?&8S
z4aQ}G0tP|aK-agg&CLfeAbAQAFt7zg7ly$EaT-TJF|JiT<&V2B3HyPoY?Jwmi6)~M
zIPf<$h)7!m8X^E*A<D8zW at G{F?|6Mf{4@~El<wKHT5X-5tdZq+CWiKeE*3ps2eF6+
zb at gShbk1xvKstwQr+*8Rx^P*bFl}X_k^(qFo!aL`J)0k*Raq+=&YYQE9iU+>&!}QA
zx#K{ZF*QX0l2Zn!f3zA>v{$0)bC{M5gt~ah(@inGg~Hh8wDepY_vKaJf3uF(&hh)<
ziq2|BW*B;sU;rKa>pa>BI4ra3I9qREPa at v=So+$;;BA*s=YQFuXh0P2EK}=%2%pzS
z#CWUEQ}QSak(VI0YhU|wmS~s6ji_gG(vqv*9Q2V42u4m9bSZG7Gwl)iOc-U1r9(l2
zEg$}GZ-KHydU?czugiYH>gghT*{_jura_O#k`>IVM5Pqc<$P5n=&h)3en(@!D}0X0
zpXDY8ui&nWj(-SN(W at -|r)1dQw{sUI^SAq2NPq=x)GYFH at 4~pi!DhZn6Zzf6S&KOw
zg;|J;aWnQD5$^vM;x5X%qzenoXXeeFyFrz*Ml5j+D*7!j`n!>p2U%-e04JT5dRIFG
zfLNFF)a)^Zs at UuO@`@>HS#i;2TbhZ+Uv+Jwwl2lmH-EEO=#i at fad!w26q4~ME~~ZK
zMUcR+K_D^B{y%X(^8xPoz+u5sG^n6~t0A9H%YaA=1{GbkbeF?r6yqeAP2mO5If3yt
zPk=~c?`Kq`EHr8mh#R<cd0tzK&!_}E?!j6Pn(gFEB>`3%aXGu+U6RKAlI)Ma%-&Q#
zRD#E_{C^QEJFt26=uGm$TS9yjJq+P!wZz~`eGr1k_mME;O}d>WV0u2LaGM at N1)Q*c
zmzQxUPKT9${F&@q;QD3pu1d^27}B*iU4Y8G#**BJ(`Vj|9t!%-%yooE6oICNlbB)N
z<B&;bSYmmTslb~iYW2(+FPb5b{G92&rQPngUVo-|2eo9n1N>ej`Po<?-7LBryfJ at R
zW>!{g3f$@h@<1Kc0454VV4hp6J`5A_UJolZz;2b=&3Q*CjNf)H=AujZ)?L9+RvXny
zRT0<xgvT)F)b9x&mPlR+=%70w^;2k{?KU%T$y%e|xOi^Al61DAAV2L+wu<joUEza(
z!hcwMkEq_iWke_!S<zKXF+pfO0DmDXL53B2Y_zN~&o$`daSb-g9gk958++O8efu?A
z#&JAtp|a)|(|7FVy|W-9dPwThNkc_qW^@O2)|4!gL^ztnKv~HV<7{k at M;AMXJ>+KZ
zvSqZEh&VzS&phN1f<H3Axhw!$*>$gKQ-4fW>MXh3;K{CPmPvb|EX-g9C6juBWw=>$
zFmO;k>#$86U8(RD>|Na9E!%gl4!)z6>>w4;nk(Q3 at Oc6w48|L1ZE>4Ocl5PrE;Wa}
zPC|1O<8!BE+B{Q(Bc=q2he;x7We(wWJ<*)zz^s<0D+L=p;poU<v_`ymP(Rw?9)J11
z@>XR?(*t04yvlry!JYJNnaX3)lNek{yiUl&m(;C!;7F-&*9&D^^~7LiH)7;jn~F9H
z)k!8F?&$_Qrd#xB1|HGL-Ni$yY#cInNLuZJm~~YJ!GHzbE+uOeat>ux1(8{UGNH%i
zur6NSUC-K9vuv!}%;5|W1jw!xu77WWswm??qY1-wvGFCc<eJ-v6$Cw at -Q{$+G1&!v
z)@+yj=SiUbSb5$#C;Fq#<8wy#c at P&Y at l}i%Z%YMm3Mc-vBI6T^Fg_+91;3*%PNfy(
z)b~Xyn*MaM2cOE1G9 at 427%!-LOr9}9f`J7EazbkgL}Y?mLto|V2j$CqFn<+F5{F*`
zpv!%7^%1Cu_w(0{78Q$lVx7sVWtz7prMk<_C#1-kX@%=1b$aXgd at r0^5R~3ipevvg
zjQ1Q6;Yrkhg#h*2t$}mV6ho-xzWHfK0iOh<4BxTHf+jGH5MLF{>%Sdb^DIE7o#3$_
za3A~$V7tjdDUn3XwaJIEtba~N_U#S%K{9V^+1SveB*HS;DNb+Me|k*O!gAWcx at V)H
zR9qZ=U+^xQdrPOwkyLJ|V(<ha;@?ofpOGo3K%CK^60jgN)hic6Gp)OpB7#OUrk3Q1
zCGB$x?nDp5a6o57&yjUMkl80Umq{yJ6LmsW5>5wt2)c9-AIc}{aDRlkPX~LoBW<d_
zpnp5yK_(N8Gjto1(--Gq0k*-rTKR67lWuiT7gy-AiqP(0h&mYE1umxC%>&l at lkWML
zgOYx-`~oMXXSg88)M=h|ogGL>qC%x1Iv_o&$)WffcBAOb30Sd0Dj=kZJrbEM)J+tL
zMte;cmiVPieff*Gi+_WdZO+^MPDRitz0iX7(b;l2fUeeF^iL^Hv0C=T$Ol?pWkFIF
zM+cTmSR$u9&t}A5q={sNLq?*Xli?pmn21y?IhW)CQmE2GQgzA~5XHNmHOHABF23Yu
z56$&QA?+*WdAOrQg;#t<Z+ep`ww?D*Qfgd^4%|+=#y)1{{C`|z8e)H(ee*UdV5W<_
zAvn0g&gbst=6nsK-AShQB;Abp7Dw=wjc7;ABb`7yQ_2W8R+cE|b@%_=S~W5miWRwj
zt at zf-EE0<Sgq=~mAh@&-^>e;XpqZ_{@hH#N4K9$&uJk at OAN0x3SrZ07UBG=5+rona
zBPWD at tZ?*Iz<&ax_d@~Jbj9a6rAEXXQMvhoQxsdIF@$rN*A|r=Jsl(tCTFk$-94Pr
zip6|Ho4os|Y>6r>=#Z(%0f2VHMUZ7TQMx?xfIl(yNL3j}FWGN{Dij+DM-Efw?XT6u
za_OYWx>Vwz3`4%$0{I`b?7PI>YGZ}8OGryF{tU2n^nW-*fT~HsuJqz<{Rq?ZlpQt`
z1(_H{Hbm87{u|&4{)D5ER?yu~gnY(WCOmadXi2BaRb>i-_g=+rnimfeenHS>0)_*}
z3c2&nlBmtZ7Gr0!s_Y9|yjygU3315aiib10 at EK%TOh$k=qDP at _H%G<{Q`kyrsE!88
zGU;lbNPjs6^3Mq3Xv1c83RaZ&EcrX;R=fQG;+Dw3XhYc|r(f6Fh+!o&jS}PU0My{D
z0r<#>ltJzqKS$~?2->rIQziw+>c0KT6Y6wLHaOS+dPW(0AB60hRPGv8<SNtq5-G66
z?GPLCTo`OW2b3jU{Zw(a5b?%UF0-{*A<shctADu!XE-ep&WHb6s)2@{2f={f;-mOJ
zG`lvo5S$Pq?maM=AH6H&Xu<>B#y6CEV at w_AB7okKZ8S<ilss#$oxnIhK4sR#Zg#A<
z!8z9EmqjdIzMp7-&5I!rU!Y^4LiBk6h{`3GHMF(-u2N2jYrQr;JBkY>ah9V;Mq}8U
zn|~__cbEx^MbdTd1nf#T0e|)&0h2eCx->-TglZ;ZifmmRjqPs;owv^?+s$WE0LQXh
zXMu!oYpX;fjm5uYAN8+PHbhWx+i5X<SKL>7M!)|Whb4bYbDY?UPH{~h9z<hJKbV?$
zqXYEX<1QVRMt8f+H*UW3WgMp0u>7FfZ+{id><iOwo4g@|$YpV4ir6w$MQNDSeFkms
zq)}p{sfzqz5LAWGg_0uDeAWlBk`_Bo+;lrs4w%<A?y<72)$}r{46U`&)a-+eSyv(}
z$n^=QTs^{U(yo-snU>pN=r6th at m`ysrO3V{^f4-ms+($2f at _qIMoU-dPvg^73xDaH
z at uB5uD#LRwwtS=>LSrF&M{psu)5e$R;Ga(Gg8B79DN6~O6RYf<5!$|zzsP1Ysyz>o
zV4Th8=}e{B0Y3bpCemk$;wPC<6p)#bcPuvYcDm52CA;zRLB&uug*4u1`y!O$4q$V%
zR+?YxzBeSWh at Mj*eIaKfMdedl8GngF&BO&$1*0QXW1#)PB+wtiftMTKNab|%sKP!?
zpcTtVU`r!|^j+>WTQ0Y6{cgCF at Nz!(Ve}fJonb^FC^s;$Sd;^zt>4S1`Fm`&HhxXj
z57<O~euyim?I;y<mrc8skyfGBpc9kV${T~vbTieLC92JfEP`}^9)-ujbAQ;d7k?h7
zl~)8PCuAz(P($0t{gDsHK#a%68(!oWkRgNZ1;X=ab){X@#B(F7|7f~``+vt?YDo)k
zM7Vt=6N-)kE7KsHLxt$?wO*`!gKV}r6pxN{@YIZvp~1brm_f4^)|{THP(jhkE=#+J
z8c?f-O3rZ-9a+us(n at FDmVZN>LO@&BaK1S at vyWRi!|E(l{T2+6QJnS;qpOn{VHIB>
zXZbJ?R}|~5_o7!n){gbcejL8+NJ%vknXN7+2NB|mX6uVT at T%;LgyW{qwJiM9A}HW2
z4-Qbk(CUXB?edFXeLl4>>Ti#~y3KZq^?ErNp~A(K-7zrLEfc~^;(yC<qF1bCwr+UT
zm~jpulUjua2xUFtAU-Y+^`Le;w9pYA0w18xlIy|W&9j|wRQTSOU8)mvQGR$IgeHQh
zNjkcy3ZFi2VEhvjF4Meo4)_m(UNTnEf8XL>g1`B~XG0|^LgzIXC34)m09F1LR-ULp
z`m4H8PPu&!R;}M*YJXexJv|1(luZJ5p}d`OSwj(xnTKe~{S3NKprI;3rFW8TUuJJB
zYb5K%_TM$K#gXE8j-J?Y&y|By+mI$TYy+&yPqw18lrGCByhd>_ZK}VvWnyv)nKgKT
zd_widf^ovfCY&<13Ta3xK-TP``a=3NNq`io1WUAP-9vQ}1b^1e+Rngxb2NYn`O#VN
z6FLn3OsRqVFJ|mnE;wn{lBr1B+J374j<62E%amB8h4eGa0F|!*S-d~K8iiaVd;?$#
zIY4^m!^_<*CBp4`W>6|~znnR6ZsJux2cOdT?5Q|mqX0 at 39I+yx^m9HZC?PA6(SX|C
zZ)@}!_<gK@>wgu({aDUix6XW?cWa3j_~m&_cP9h|XF!GdrFClkB;_jozla<enjGa7
z4!m7<ID+J?k>oa{OE{PJ<Y|p)dQhTtp*v9Al*N-uWBWXJbH|-;7X|_fE~T2J5^6)%
z{JR=b;aYMJ9g<frn*{iTLG(p at 61$7U`(mbuvnG^}uzwa}#HNJ{PimyEi>-h?rs3vj
zAgNQ5N^SE=S*P0mS6H=fS3HxYD-ei-gwqhrnR1^Y7R>ovxC&$ptTk^YFRim<e6M-g
zvBV^ez^J4r1+F7Qjd}Ih$F6>M at k9w&iS>W<{=0bNaP8Gf^vQAYHNKTry5{<!6lFi~
z>DEAy0)M|4hnCH1gL$_Ini>Z(y&O9K#3&7|txSI;=Lp_^huQ7s11YF~-cvCwXveFf
zgTC$sq=XV~<ZE+|tI12OO*r$LeUnoY*$S07_r5zH!OrS(1KLOw_U%hJpouVjKWy2|
z2HcB%(05s8 at H2`N;cvClxw;vUz`jS=TPm(dEq|akB=7b45MvW4u!~qKT-0RkBB=(9
z=xZE38p7pC-f_Gj$R~3skn9+XxOn at t{Oc}9Dw#1Cr*CbpU_XeHQ1<vXb9w`Gou6xy
zvy+11Y?36JCiy7r58QxDYylBKQ3LEo-zJ_bsXW5K-vgy&bzkScwUE5e1_Z}R2GL|s
zo_{oW68vaVePw3P2LjKEpzj8>e`S>)$k1JH5|J^@rwH1~tFJc80}Bjlpis`^U|}~~
zKf at ReIj|n!m>Qb47=xj;_E3^CX#UeZxIblDzN3Wh_%Ld5HWLCEBIuF8rf;EXb+!y`
zUsurGxiw}pt7sBHgE^_1reie{DC<qo;eT2z%*Zr3L5{w at z)b=RCYz!CvX$iqfo2<3
zH<UXOD2s^gnHp@*E&@~8!i~-gK`DptRwc`<HOAaI9|E+jrA30YBi)9HIX!Gw`lJ^G
zi%~Nk-2R;Lvjq0RgZ?w~$I2~)#6)NX_fc4#Y4BCN1w;hL)k}0Y_t#BA7%~DPMSoOa
zbyPRRG`5vGd-*RRA)k2M;?d(5qSdiHZbBO%!M=buAKl at SMKYo-8uIffLyYzVKjv*F
zY3}^Kix0vy7pOl#bAhKil5Tn+^M60QVMamy+PQXLE{m^?#V+l9sxy1n!4bd`5|Kub
z#}|)#`otk2v+|FVoj224({OmUXMe`b(gK8y7Y)I?hM{9HjKom{Bo5Mj{XMP=&pj!^
z0D8IskdDgNy*0y707nrTswb(7rW3SoecZ#X^4$!f#@iLKu(V(XZ&fu6Q0uZ~&m+4H
zid>5C0)_?Pm5l=qPt$stJ=gGPtjNifm0lDJln(L)^(PgulePQ=B9H3gaDSO0tYf#}
zbcS}11k5avyis(hVG9iLmB3a-J~x#3U>r<N#S!JKZ(O0M{D&Mn5_ at YOY?6~zn<7+~
zZ6oP-6YZ02Ixm>h{`*k&pR!G~SusINTT9`>y^7K%^BDP9`>fm9(f)!lCjGLtbg`!3
z8ok5;eCD^|*YXohi(kxJSby{e2z{{Mi%A;=TE at Up&2{QXO}^u88p8KOk8<@W4&gF(
zEjp93zOKyZgs;I74vg$w44=M8-RADg41fPJash^{#2dBVG2ku`X3e7!QrJ`uh21OZ
zEbu!(_(!!I&x_4pZ5&hVwOoLD4h+IQC4kXKh at dLJ1K&1S{<OhJntyj`tfHd4Pj!F9
zAJZYHpPLRM{dFtGq{+#yo%mvu1G|`uvx6YCncmIv=`4@`@{2r~vvFkD_W#^|-7Btg
z8WVUnKvl~=1cp_?cuv+~{wgvhoem^yI3p}>f{?3sf~cK1dudJWi3{)kn2t)aB;EH*
zu6ALM>m393c$~=i-+!cWr6nRvwP`0i5YS_*DT at wknrTb{7|!s^OKRc2<9!D^>!}9U
z0rwFf(@!y1hAy&u`xj!e62Qm5S8d-J86MnpnB<r_O~rT%|B#2Zjx$<IQ~JTfZS+uq
zxw=Fd&y$Zrl0BPF1u at DET!tDhYAKs7<Q8}~b=}>~jPWP#D1X;YHPdg6Wxi)1$hiJ&
zvDrUl#fInw!^beaeVUFkIXACPw%GAVWPux~{&ljg+h7~G>@rb1Io=xX!LaGfH^Hl;
zr0nE!+|NlO_rS}AG}6c_?-5I7i&ZDePTD1Q9{leA_CQo}NTuX=$HNRjmA5VkI0YJ1
z$j44V{ur|A{(rHD!`)ERhC6!g%F+9h!1P%{+PkMJLO?z&DtN`<(%Y_GB=Y0Qb+FF*
zzNBg)$jGh7joZkpKolT2bMT`6kzFthfn+hdXuiM8HP4Ks4y0_ at 5KGRgGQx2a$~Rp=
z+i@}xD&4R&2}y&fgNdiS9A^Lp;6nQSgoQK$xMAnu6o1S!Ps)3f=y^)<@vELbEPTeC
zDR+bS+^RWkUj&Zu9Nc}9;qCL<zA#-<23aD#BZwsS9zdgkU_<@`CD+#)!cbix({rlk
zOWT$cL^(m1zwSKK#TCx$7JvXX=qgO6&)JxCFGd5^0Mjc|od4~jDCuU<9T4a+H`D7M
zx$^i`>3^(7H89LixLIyjck-ZH0*RkxwU}$;d8W#G7<HxF(es?)neQyWJK4!ROb+No
zB;_EHQu&<#l<d<mnDJ^UOIOEjNo!BY=v9$pc}X_ at Mxm1)>Cyz at z3}}OH&P)G%&$@+
zZaZ{T#*v{b$@7ixw4kp!w65g0dYx2-7EoGt9e>M{h`mM7vlyJIWV(-2J$RgTS(C_}
z<mKv|jj6h&fDUfWzGJfaSsI%~sp1+N0q886*UNlBdsHk7Q_&R;2UA?WAA+#->yAZw
zM-F|q7se=%tP+{gSUAO^_IftDCbcPzWG}mj%1DoR&7t^51-i_#Xc0s-hsHe|@ubK#
zG=FPSnAARWBt1coQKRNzxe!<zD{tRfoGx)kD)6Q$#2hO~i`=5{Ku&k!;V8{if<nh{
zr*P4oFp-~p at Gy{waQkE4`s5Pysb?tYKD8+g29O-9cjlWhq|&L(B0%cy6n4O2bT+uP
zqkAR63d8n1p1d#OBm1lGR)qL5Ufq2wtbaN=gkqTugw at wJ1-<v|m8M?GNX$dj%SWgN
z=({<Pfc(s+Eux4!&Shw`^~>zCF7Yh;Uy>Eg>B3;_>0foGTd%scW?xZ<lfJqJM+Vl8
z_Jm(yG1OyfUjSBxbx)ie_QRTE;yjM{ZAtEl^K|ltagkcHD1J&a&Q+i$-f-Bg>wg3;
zRRN*sb#2csIlK~-nu23+^X6a9a8ZI^Dlae$4A2tbK%;G00`>4D00}_$zhw(}LkK6F
z|3X->!!yJ^5seS13(wS1qWpruLy<}xqR7;HIs)w7rliJ*O91U~wk<0;dx*ofGN=eh
zwW-Si@*gttW1QVYn{)c@*6!)m7A-rpN0xsi={7qXw{Mm7y_)Mz9;4MVE_lO5f%*~A
zGC%g-dWLjFlBgFbeebqj|C3LnM~hkfaqHC*5+~v0*xW>i6;HE~oeS-Rytdi!tqIi`
zYswYyOc)NO>Givt9!IvEf!#E}h^F>JO at lLiJ62*LI#c|Q+Yj8Y?OEE>@s{7keno%L
zn5RBe%2XJ$wOMj6-KMgH#*4RQ=iFMW9GGfu at U#qZ>f&30 at Llgv{)^*0!M-NFa3=l_
z{BR_oos at 38qFs+az#?xxs4|WS?+0 at 9Txoxni?by8ICB|BT2O(+Sn|=^w>=6GUHFO&
znm~Duo>W^E0g|#YDE?nl at oBa!1G|6G2XXDtTKQzH3K{!$$u&*`rEW8)t53WsD6OdK
zklvW%7St;txRsat58{wt at P=A?*SgbrF!H8TwMaXaoqC26o4TWb-icBCBIWLAQf5pw
zgih&`LTkcK7g6MdO1`f=2q*>}cJY1F5I*8S+sUQlxCf0~L~)e7keL4VHN1b#ET44y
zUxhGo^7ue=V__Nmtay`Ydc6O1lNx*4rX^wPl>#vxKo5ZuVFTm-+Gfg6IItSU^lNR5
z<WZW~a)-4W=jZ08`Kaw|Z#Hm(W(hM0;j`o>PKE|DNWr@|Z>2<4fu#7ET1p{<IQ9E^
zgzI6jeVtU9{tl(P)G%AK6~liq0 at 7|ngN3Yi6zLB}ZdS`Jl at Q?$ZU9sDQ+_WrYgtmT
zo0h09a`5sG4P+~kpbRe>c6=Wbm_Lib8e-!v-*0hs%@PoPjW-a?pi at V5oy>YtfNyx_
z-})m?UYobo;9_RYG%hM<<U-w at RYOi=S17WyP+3T^>`UE;#Yn4XQEz{HcFH2S at 84rn
zehfK1IY$?1>UMW5z$hdI85RDllKsWF@<*vi{}4>iPtcYEMXm`Z^&$OcK>1O}0v&dC
zW*mi6Rz}YY+#XqdeSWCyp~`!u`<m^a?@-gZ!&JAx?tv3r9%-qiTq8%(kSK#)KuLv;
zQMCXhf<2kWwu!tJHn4w<T!D?G<()FQPsC{Rd4u@$Rf~69GCX?`S2Y%~6t<{Z$%6MP
zPo!n8)+`l9>rwLII|-ZthF26$AL*W>>AlfSW}}(3czG%nBnS7V^dk=S!E|QWm>)B>
z)kdu<gzajCqINV!4${k at Ax3-gmMp7iyQj5gTE70gC+9(GPTzlzO|ffQxJ===l!EhY
zs}X4hhm|j!O%6WMZU6N-{qe=1c%#TAA#?@EAZ&=1kAad6qU at o^FV_k8DVT`r;tPer
zG`loMp67sitDHSV>NC+w&2(s(P1Cu$x$0KN1PuBoXG!A>)6Yf*|MuW?q#?(}18&};
zgpKe&7eyGpdoF+GEj at T_HqRUyWF6djynrUR8_Jm=x}C;7 at Ag-V$Kq%*@hzX>$u(}!
zl!Vale{U^|DmC~-rSl!!_%OHV3nE+U`&PSd4+tdI;@A3o$kz0eT#Jg9O9`<nK1adJ
zu<rIzpa`BmMHG5r0NzK{)Pa^UVsXfzeJ~p0m5o~ijb(qhL>-lG1fAo*iNQ?aUp5yV
z_R82>sj%LVFKu|aHv8=}Lm at 3lB{#H>WSG2lwkgF9eO+5?Yljj&ZS<y?J08_kWh<qf
znRl^rz4R*Q83#?tpYqc%@bHdX`WCM{K8?*M8NRN8wve80<T&{&>0KlFi&*4<w{Bdy
zTEe8Q?(Ki$cf*5}Nc~GHl-2y9^-O1leLYLdCx at aNSZd-l1k_zBNz<;w*66UV^UCY@
zMV at P9AH&rIBD{~q=Xm5Ha;@Ij9g7J))YF9^fW51jir3H*#H3)8O{Ly0WALgcHg*=E
z3s$MHU!H5VJG=q7P!q3ygIgu{F;#L~;5d%iE3bc}Lb{1yQhzjB#k&5!o?u}(8I<-l
zNKzFfvjgLRUP~qx;D%idGtS*qofIvMAH8)?u;AsDoGJ$I)YTUZq}xBw|1(3(B9H2$
z>c at Y~e(;8X4$r*inX^t%4|Q@!`Rc7Hc$Az2PKD8}y>N4z5PQxLIi{2W&5xX{0^s$Q
z)(wBB+Xaj>GT#Z}y1GV6gE}LOhkFc>%{|&!;Kk#?fK5L(X&&iShqM5+8Cvv-8dn)h
zR&^2;8LAkt6v|X9U|zoW_RT{jIgxT4zn1MonX4_h7H8Z%Gh9tp^QdX&1f7j~)D(AH
z84-cNe5d7xvDDzY^yo<l19LwAT<pa>Ce44Wt8^leb-(HSedH|Zv`L{IKTh3sA0?qS
zv|kVZAbKU~RU51P20!rwtFRcIw-LZk+-i|AEm6_30Yb^-DiVZAl|%`v={~k0hI~md
zfl$0ykyccR9GD2~q7G@%Xv5K>bY7mx9SSN^{tt&KL(Hyt$`@{&h`hx*f8=;d$Vh*r
z9tM@>r`&`rg}05k$UTDeaxfPR{)czrr+-FWO;!3o at exd3qxFZsm?sGM&X}fD_1EZ~
zZhN(3ql}nv6x4K`?}G*0(h{(2%}n3BpJYXAKQqaQ)PX)xsAybZZ&cfNi}qOi2}T>%
z{ygjQq4*B~pO!^HD0K6Sy7`PFC?S8>X2 at Ffoq`=l#tA0JEZ~0-FJCR*Pm_bRw-f&s
zbqF+pcjSXSDiYN39Bla%9jfyL8if6If4X3%dhw19;Ebit%A9v()pLmqIAt(FiFRH_
z(hE>UyxX*j(^yJCMwzXm&guGqM9eQ)<9=|eHs at 4F>sL;>INekswnP};KB|8Wp-Txw
zEtar3kP$_8%;=3}63XoR?uC)IXO1%>C at O5)Da_J|!`9wZ>^$)-e-V2rf>u4Ty}Pup
zz=9k#?QbX><n>@K=o;d`mCc9FOc+omtqn7m_DraU_9(h=3A|bfx;C)Ok9B28+srAw
z%os3xvU9gW!@0Ik%X!AgdcA+dNtMiVi<j=;f|9Xgnm(8v0dx3#!L0<ZRl1*J`PwCw
z9v;+J6EpCR&S83!M?ib%_=jcgWB~ZCaH?y&P;tvGrlr^PrDS?sV9)KdK(f5pO>$VU
z#jeVuaHxB~7ALJLjw*cRY^&8rpgIt=l$MJd6&2=P1hb at gi+bqpZ61Gl9K+rlocZeJ
zrWjXF`rQSR4$|Ux6N at lcr!?8gc_Ve^2{0OjvurHQ2Zu?pqk$1fzbCH)?PnW&(K8jW
z$ljj2ZLv+)MNEaOOJ6qv#e&rJrYn0q$s^bDP+-VZbVoX00?rBsH||Av^#?edG{D?@
zNUN+m<pp(hw0T{07ny%yUHbWAEQH-n5<LU$!ErB_kBAA?9i%45s3~RNl&<%3lHxi>
z6B($?O at -i5aye*mpc>*V%;9js^bt}jg!6+4j`xe9HUte=1J_zTSZA>z2U|z05F$QM
zoGNj@@- at Z0^!kTL8S2?rV_$qkW*1;~e95R?LT^=S8yN at Zn4W)k^IN|B0{o!$EjNn`
zGZ!O>vW){vdbk^eL(Vkq<T~xo0wt0eWCtkCgo(qQUdr?qq-r$42>Emp{KklwFZK6!
z$>OPRERnB1j~Bz_QV)z{*j^fQ1sr?|f?5>L7ZdWpn8Ge5t0IcyWG8+idNH(^)y)gg
zZ8J9Iy^OM=)!cs;dmGd at nSv*2AuR13v~hVi8SP8*kPPYSgU!nd?Ep!@uutmXoluuy
zu5j1eIosyb#NFwL3P=N`1E>qsR-ml6m<qxQ`U$P$iE%1nahX~jC_NH`&TZmVOcd`z
z`Z~{pPWTi7U3p}8%eQD?I<)tW8kLHS)DBjEshyFosoj6d&+`RudLgU{*#-IjPg#Be
zYFWWhwkIub`~4v>me!T6V4M#hefYye=(7=18ms+V<!w0F8RqQGo=+H0=%4PA(qv9b
z6hWb_wrt3kqDc~RoU!6dl8mz+&ifE#cEbhtL^KFckM1Ti|EeeXb~on=7-f<ev}tMX
zdOh-*iKBnO`_Qux^Ua;yLL_%t@{aaE<hKm;5H7x5us>}DkG=6=Voh&0M5OJc`JO`H
z%`gg4!t--JL5d92BRU~69gde3j2i6#*&GINcMWQUzJAVi0TX#0I29_wE at N%y5PFOk
zf^!Z*gRZFy<b3Kk5sExHU4iI9FL&F at 7bf7BS@?gmnmH)svA3Xu!<w`?gSWAgT$ofe
zS6n=D*VsGIa>d8#>L)a8sdUif?SZ2-{#jmsKChWWV7Gn2m3&W6xPj^af!5|(sz!28
z0`6?@xR2}(K;O?OS+*%ds?65z<v9tv#24r=tTGHLd^hh~yDx_?Zgmf#wp23iDen`>
z#Mgg`04?4 at SHNGl!qbx<Mc<kTT{s%}JzL|;HJEpYJ#JWl>n*)s-rn|z>RbCQnBU!y
z>9bwF+2Rmu)ezUPMnc at lGTgKj{6%AqB;ae+3WswffNW!$t1jl33Xi#<i&D)s1L(>Z
z4Y3xP#R21vWl3G#Kh^a`kQ2a|>>dK_j=z5eKq-0+SLhlU`Aj at 8dsbS52$zusG`%~d
zb?NC!Y@%>zkhS9&zbTKVf at gC!;v4G35>YfNuo7QV*W7;eZzV4R-A7}}ockG&*UEyQ
z5nQ&F%7Nj*CVu<gou7|J_p<Eta-x}IS1<$6tv7oS2}|^kqcA<6YU*uUr3!P~L_L3x
zeNJmh5gbeIp9u^QLJ<Oqq at F|41_lFqC+7|zq`2wCxK-lRR(pr?Fj1Rd%=*#m<?bQ*
zEJT}p7)JFNakz{V7#pC)$t>IZ#}kk^*!TFEKBxOc^tcn)-d0K1!(1Q)aqKF;Vow&7
zf4Pg9F_i8vFmCDuB#3!4QQs}g-pYSt;_clNf|4XgKXbG}b_~?I8cF5}x;uv~RN*mT
zf5yvcJA`ySOqXT}!!E}Vz{~W{Xb|cIlpm%8%4OQ+(6PR9J#;19&z|=;;`c|W at o+=o
zJlrgw6q28<JZb@!ZmOpKH#B$q9bvmYnGlqh{kQs&hL0b^>mWal at cWq{nx=pB#>M3M
zR81b4x1Yl6GJxf|e&VH#L=Zr}I%Sef#OR1-CcLe3l;<S%+A6uIiQ9wR*{-xtC^!8@
z7px#8%~TlVJ2FXrgk!L$@?A(90v5A@(1RbmnB`K2gL3Gm`#D^=__I^sFRzAor6W(S
z`E%e!S0An^nlK+dNl!{_tE_*w&<w+|pKKT|D%-Re3rEL4<K%Tb12@}_4Z(iQ#$DZy
z8c)Xp_%Kny-GmL at qvpx|a3kfT++Vy$b=gS-tWl%Q4FQcHWFnWg_zuqAm=ESOQzcZ^
zw_Hy&AOK;v)8-1as3yF)GrKO#l0w2tvZwR`1D_}IyIH617|DP0yt{v at 2h*sf(@nTy
z)0L&*N-y$<JVK=!qU*0#<Zd{rQLsMYd>w*zOCi-xYBEkUK;h^b95IL;Y<?(;LRn4d
zv+;uZ0XWhy<<LQWBAgFgroDd~oVtsAYMU15C23H-DHU7_xtDF3C^)A{i`U1v>7Wqj
zbPzLvD-hEQB%=a^ECPQ)j+XyX?J_Sb19!1%TGyDYwf9wzBXw%Hnt4aDf)z%y3CF{?
zTTPn3x`BIXZwls&oS6a~AHSz^W1}5RxW!>Tiniq|xSr!bXPZ>YrsT{4FL~~zUKEO5
zr28JaS8-11r6uN+hvYs;-O1fI*U^2HSlG}nZZR7;`=TTI<6VDNYlyJd8DQ($bqXQU
zKMFWEAoj1pwp0q(?a^$sES!mDeZ)YBvXqh@;qTL&IgD*0FR=84)Fyh#sb^-m1L1G(
z?~W7g^RR!mO3&)$B?WprO>`M9>}q)^7{|cj8<`29mfE7seo13WH6=chI8UyFyekvz
zXpw-kyR2f?FT{Uy53z%WnbJAW#0xp$H at gH@67PTCLgr{4nuk2yJwHt7Dunfmvnu=?
zhWBUq>Xi3Ho}#;8Nnx|T81bAiAX~Yxv#iuE&krRGHJmFUZ{E(bJ%*TA2L0I|`ZI-G
z)a~H1#yyBRN6-fSTh3?iZh_}|i3w5DV%Da4tk!`Thc|zemI_Bf2UgQ5@{N)__n>EU
z=saoxi;D&DbS5{|t|7;R&$|(&4v^98_LpRAl#f#S1ji218@?{1^Bxt5REVC7m))N<
zk*V%@`~rikfYcWx&EFeu`y{t|{S4^fqY2)%ph~-anu4=+>SOMX!jZ94*gmtF=~+o^
zF9rR>s at Q*!;;Akw6dPf)`UO<Dx~&OCFyMUSzz1Xv6e?t>o7Tg$qW-%(lof=RbxXER
zyHV$ekK|_SbKWe>UwTf*mMGe&1~sFSabeULoR?d}h8@`?(YQw;G81|A^f>7Zk1Aua
zDg#4 at M**fu!VL_y5>|;NQbL%+DGu%B<>Nb=FIRsHmXQAPU{9wU8dm8e;T?Hly*Um%
zPzf*jG-i)o604vs;=|8l$>SbytoRIYjofl>y8c2qK+)Kzc0ug%{Ptq2)$=)!5N>$`
z<a-w%T=0JpL$cF{+3L`gv$^A^<(B|<Lzd;~=VxR171apY-{Zp0!-aP0tsj|tyi2UG
zK7N03E#3!RRW_V$U$D)o{yVEO%(3~(E(*|V6PitTE2+V67CMw!H+E8HG$YtmG`GU>
z(%Gm&`?&W|f7t7;I?b@?IUxc^l%=Hl2?`YMkbu)n75Ql$nGkzjRh`aEcx;wx$1Iq0
zIjoC{K<v`AyVanWH#IBj2_UA-cNIhpVz+<#v?wCi*X8b#r8_#4SUdmI6$(~b>i655
z?Xcry{H+rbO9t2Lc at xtY{WgI&4Aya-9KITN7nI2$ckj?;bkpU{Rgin%*}0zK-Bb*3
zTlhx-1U|_%07U-9UR0Q6?cmq7uZjmVz#IuvD+5HWZ=JIGS&w>Zs9`>oaGdZPCoq4{
zxIHezzf6bGB3#ygNF-&Z`eBqrvQtQVcP at H^=trc=w!YD8;4ORBN0&7Of71k{y)!Q-
zx-MFxd3A;1;VgVJ6h7L;K7D5`i7h=F$v4R&&sk#6K0^0X+lrVl0x=$j5z)6>YU%)>
zKXf_pS{+A-T`+++S^SY=N7<8W8HIluWCbA90l9A1 at GEVCTMgNH?$V%gaW8o)z=yN5
z(Do2hpI(;03I-zDKo`zVt8~Tks`)g=syRr`uZntQomp~309X>*xmad(ft)D&gNu4+
zl-h!yS5F>F8rU*7F3q!xLH=cmkVvjrygOPP&6R{r3!Yxf^g+P?i0IJ&FpGb~1Ro>9
zTi!W@=TWH<lyJur!Os&)30qKrv;L=8oA{-B4}lZJ4~#n{o9pDd2PPK&&#+4dBeml`
zrGy2n-)szWgSVZmaSEaY`$T5H%RtjOKTFD#Oy1+!$WRDKj<?tt{SAaY%QrqPzV)4L
zKu!59)xPWcbdqT7y7vjLuL^%}!mJF{vn}AoBNo*r2gKqMlNfsyj1xP>o=)3CR2683
zEH}9R`jt-!BM+IxlT!KZzT|7iyEViCiUV_oQ?qjE^4Gdh`r`UHQzv1l$d)5N_yGj(
zEaYtnTlxLo44~ep&L-aDr_DV2pi&{-;eP~6azA#&?xT?y-ZfY+=B0mV%QYAzpp3Q1
z<G5d<#bk#n48vsU at yz7G{zz at Sb2-kotc#O?rlB05ztvZfsK|ZfFoR+C2n6I at 0J`=W
z_Qj<%oQbm>=TCId8pR2IqdjhdrOPrMLf`lNnTeM_44bs_QB}K|r5FkQ6dQ?0`{H%+
z{4|f!gpJI5Ez50fyuE){{yS-+yNALhZlrwG&uD7)^hT{N^6+1-FGk=dn~MzIDcY}p
zgQ1Oh!Dua- at mUH-7>?Bbl7TQ=G{0d!Hx(63k%Xoq%K#jDfW at 7fkxZB>HZ4Ni##WYf
zTmkv3o0J)}X69Vs{7~-QJ<6yC&h3YQ%o=>?FOVU>3WvwRSbcxd&^dc!v#Yi7xmm3Q
z#_hXj`aZTjB6=}ORyPed^0DdgjYx$P+#TBb_KEaC7{EEXnl!`Ma}#lq@|RPb+L8>4
ze0ycQzX2qim|dK>kOj=*iKI~kR$kr at 93cd`-Y7$|GeGe|;C{k{kn$Y|KMzyu=5b}#
z3IGk<0(aQd5D$Mim-C_{^3_=oZ!+5V!+|9r%PlOFlRi!2V!LB=OQdC3%yMpKyeUUo
zSCzxM1y5Yj`}sF>j7v?8y<-!toPZM7R~L;bIeq{xPW5K<K=y<TTkmlE`H-$nj7D(#
zH2jst%v9yku(mqH+915LZ2W0>74gVTFXD*!B+7=T`89v-z)_Q;=K=d8W_|sHH(T##
z#%g-lTPpi+FPe&tpPFYhXK_k7AAl&oMQZokKwh(&4RADJU3S@}oHJaAF2nnkaC2BI
z_52jWR2AsvT`Jkw>r!P9)}2?V=&wii<81SojeYfkt8>eBA+B9y8`>!AI#B?_c`2K7
zQmn@&=*EBdi?dVwmgIk7*p0%lu{-EY^It1*ccG<JG&s!TH=^O6`Lr7OW>5;xQNRhf
zB&lfgTb2J<Ug-!fN{8#v5O4ob6J}x at aLT5imJV=ORf!)uPux^+=O3#<)+zu@#TOEI
z)R%Pq1V30t_1A7)NwG6R)@}xviIzE9M0?EjDARwXW{kJUUbErv-=bVWh4 at KI^!W+1
zZCeL?R<#tWkvN_p at agfh37S}Ee?#}rg-L5%_K6Dcl2q_oTFGq;a|5+gENFqKbCbru
zw|yJB=4{3c>H}pJV!YH{dH6-ODnHJ$O62mmfH%8t6uFOy8_k*jK$d`6tc|F1yZ=GU
z^s|55^{W94vt~hv0tU^uMT6`v)U#P{(;qkVdXlQt at r%wScI?{VG1AkQe$}1Mx|EDg
zQP10lISrl=%A}@LL>8gISWR>Zdyy3gqXp%nm~4M^rM3<Q0o)3rBMfehGw7y{YA5a(
zg!0V*%;j1=v%i0YI)2SmBzXlTZw>=TEpmUtm=rC(v?EnLQqI!I(@CTZ2_(z#l5xwM
z|Hc7_f@;Gap0!uSG!KRK<Y{OB<nrV-4S?mqRZYBg?$B?eUc2JxarhZV$t-3X^l-m=
z(3gto)7Z(&J8Q2#vDp at 05X`T&TL;;fy1i0 at S4JN#VsyZ#VKRH|U;kCWw+VV8{2+h+
zTn4i<k)Xv}M>sJn(5dO0M?b|%U^$EXO%Fj$5BQUjdO0oF1yIuFB`QoOsAexM6^ZN_
zbTgVZUP=r>Xhs>q at Xw`V)V{bW^p8r~pM$a{Qvbf!$Fjc@{B=bvAFCh!EGQTdafOoS
zEvtHaci_lCnWMHtr{y3%2tyC+w3L5F&MV)B=hzhIn~UI*BG&Itg#AU&s*9&w`mJ+z
z#{~AmoSs#bt!<8e)>9+kI;WWNB83`7AV0nv!jKGZvu7CWe%7#ft3a<{9Qv7$^gP-L
zE4m};%%gZLjXo>h(<hK|BUz(&FQ0$r)SoaPF>pl`sX3pIQLeysd9wsAZQXyypM0BL
zu--5%B<c=PhL$pPEr=ix!Wt7t5`bU6Dw~zAl<K5%%rRYrbDsmoO2PU99}$~T!%jC_
zUpezZ#LsJ3*NeVymM at xtixvuQeca%1z!~bb{=^6gZo+wDXs*%$6$(A+HuQB}CBkQ!
z8hKIwm%hZyzP;`<_r(@N2K0YOcL`wi8xW}5W63=sQfub&Rg}rHcpfc^TQ)xM8Qc~$
ziju0doDtGO7J=}i%=4&=X(xF7T^z<FdYhcnUMTMyHY0MR`e%cO5*ob0kgFsx=(E$6
zO}`p2g$*V`7;QafN62_Z2541x6y$plGrDV;zrZf$aG6zCwMO^4R9k=B_sZ2Ixu2_B
zj=8C>!eo4Jy?x!!?jf`9!K%z!YF8N>;anDU$Qc3AFrg0N3I=xS!kk^vFoX4O7TP58
z2q%aHc1G&IO~H<8cS3BRlZyYXFPX at myJ<!E#<Wp59li(Ig0wljX5Z9$L6BwyA9~un
z(PxB3&+xxdHpwNYUNnCO8I4uI8q^8M=0)=`b!FnTcAVpH{4M!l0ty{Ob~ZYIw%)I=
zS4Y}DaZ~TOQav|_QM-6+6KiVwMJFsLI=>kZ!xH|<b{5hzCYBQDm#*TvZ!CBt=Qf>2
zkU>Afc;=-4h4~AV?Np1I2kvz$$Z83HXD6iIzf8Lwe>!uo;q-stSW0mX-5z2YN|J37
z2TG(>gBAL&KmZKrb~8nG*cnY`*k0S)9(%QD+OJiJ*$umjg+KqQagGRH30!5qUW5)g
zHSD7OWya45y6WpvR;A7hzE#HH21z4p!#4GQq<$@Y3>-j2*t-Nwt<KLyMhR%9Uv<x{
z*|0TX9qGkXuq%Hq#-8tYQ#$eQ;V3?ueT|1z8f{*_t<Bfs%H5$>&!fuW2(#ohsKR`5
z!p?^c!YF0cy}Pwxerqqlq0c(E8<^YB<hy|Ko#fCM(O&pARTduI7LVvhM(|LxRm*K!
z3!dV-S0Ii`+*i_mMo8E0@^;e|evj?**xbAqAGSK5OL>2ogVbZg-1CceT}bTIf%^E_
zrS+SHDzI+MkQ at YsL!2I2Hg-nnughTGdSfYWAIil3Qmu9Hk=<HJ!AnG%B`577TQL(m
z|J*DRL`0y5%y0q?QnoSza^sTKWyF21Q#@&XGYYC4`?5KAZl4#E6NIhr?k~YA%*JXZ
zl)5#+GVy<Vx&UqKxA?%}MTt`FmgVXWgsLpS1}-9>+(qdwj#Z||WH2(Ao|qY9fNJE?
z30<u}C^C1>9}LieVO_Y3RMg=P&dFpkBAzdrfJqc7+CsQ2zxjFmx2Q5Y1)?Suv>;8&
z0#%JTR&rRxA!MMe2fhQj1Kx~7#XY+lF6JEn+cAH9*n#dHVq62-Ni^#?u}rQv?|+Vl
zClkTHGRp{2fz`74aLA9P!OByYf$C4D4uJLcc&Q4FEjmH4d@?dbA$)Lb!$tUPB?&kC
z<0gZIDy^A|PxW*N+gHyl)`MJIuq7x4!o~<!q%d}Lu(DKh4tm_mp1S0>(<%>cN@=w7
z-(7#-ZiyhVL>S10-ACQ&){V}2!pbIq5>(R?5<U7Y`<<S5h0$I at BXDOZml`8*ECK2z
z=XXc1w_}-LI!k!cU#J@*uvUaigtwjED?t==WTA5ocwz^{w7g1*{FzmnMh&zpUy;3F
z7*tF&Apla+{Jrr1jVC1U<p+XlgOWaI at i~8r{ZF&^K47r{TuS*1+H*9p?P4&ppHHS*
z(oY9QQXA`mSuy;8U)W)lD*R3#ZME5<-gm)*n4SQw7WGlHT0xg_g;u)S6E)*~POd5=
z7M#_lsKgLkhO}4gf?LyHvhbuUYNf!q!($st>R_HgFU)o{n~LRI+!d{3TcB}|`MZBj
z&9_0QC(UH}SR+sFthmNqb6R+A99+Zf+HC5gUn(p_Pd}L2pIdR|GL}`GUpW`r(xnQ?
zdcP*o@!>G*HxPXiTm~4k9Z=Fxj78~;@M=x_;NzwqF$S{5Wxdy?kdUVB{ELQK+mVTy
zQzUq-4hF4D0ozqk#^Ack2 at 6DCXz_nVYVg4O;$*EsmjB}iH0E;VZpvH at Uq`ekEn?J$
z at Bccm<5xuXMJ9WF7X3r2zq86S169ATHGI;J0B-%1PQoq%0ORbZBtjaHw)c=IV3H5b
z5xaSz;b|9Dg*BGfn8ZU_p_x~GjY$-`{!sOqrp2@)U9fm at pgUubW5NeY1aW`(w$Lx_
z$G{CJ5|o#jOP<S+kWBNt`hmga#z?5#k`$#VqiX9WoTEi(9~>9k388c`E`8kV#d(lZ
zeA&X%Ki}Cj$CrUVvq#Q4PkD;(c7&*rG<$fZ;24v{csJH6u7y)u)@VCFIV4+Rr|=nJ
zf-~r)mba7~F+?|hNqnfO8U24~8aSX^pKi*fU;JZG<~LF8OkL?z4qD~=(vKzhIEm(p
zZ6CI<>jxR_JM;**uBGQ|4L34Np?CYrW?k+rob$iI=WivlX!E<QxH#MycI9^N{)!+B
zyM8jbty;nNGmfbmKE(l0f4|2q;qmAc+e+h14}qY(`=VLi_Xdxln%jSI)8>y*L2?w(
zMIvs2U6!*hP*rD9GV at ofjM#~&rcIkMQ*AR$5E%X9nUxK|3gm1P$-M?8zu0^!tuQ*Q
z65DsMBPMdxx&|R6NS#SBWP=W$AMh1zPivMpH73YS2>d>1eMuS*2WilJ(eiR3qf`(;
zJ_Sk;LeRoFykcSIsjq+C<h_hh|2Y5XAiB<VG?QRYP^nq=lZ<uzgomG18xhNxxfbAj
zX=JU`KSm;-Fi0x8by7SN1XH!vG1e(ziwrb1LK32615S``-p^8{J~<G;mMpN(&0n}u
zgp>{^OT9iDhGImx<9UfRmWAONNiG$U&=qF3Az8rY1mVY_E!BUHJYwtXif>DJh^iAm
zF6(DLm@~ljdtj==+|ux6Q)N2H9o8<CT*o_uvI_WC7o;q;TN9hQc9`!Ky#jv*G+fX2
zxC16TwavE)0qOf$=C=;VI8D<ao->3fGNIf#|EgImramrjz=s6Eiw-QHlV%y1IXix&
zv|`E4+(3l1^45Qc{INrE;~QH`1U-l^i0iGM)^FJFmJXE at OUCBgL9c0;P8GU#mF=e!
zOF~k*9%~i*&xcqh$l8x=k%k34r(to<up$g4qgqgs9(dko1^%gdXmyBC4?+&9(8Nwr
z_aZeMqbYO?!}dy<N|#jmzd|59W$BU3SOt(ptlAvHlY4)yOM at ufZ*hw6 at oV#0xLTBV
zpmr3&gE|`5$+cO+9@!yu%Y4O?qJwvfi2DQI0pG*^!URBIG$3FmfJaR!7M_Lc$5vAl
zGXHHuvVgm%-dTQ_lcdIZ8Z;+HD<*Fne0G5!Ix$D59!YzCu}y~`?>X*L at DuOGgEswe
zo9Km9{YroQ`7+q-An>2LE=lqQ=2i^D3a9Gy3Xsj`Mlvw$?=qaxXeqls0h6nLg5O!S
zN&;SRo70r=5>`8#!B3?pSb`F>c2zeaah0#1D%KqcQP94nddL)v^Q{&h>!i9B5{g%R
zIZpdP5j(efts+IRc!m7~k9NsHIz1gGM8Hb(sce6{#SNu3w$Kx_&zcIK*P4VkH^tdl
z0 at nAayCI%I_O+)iLGCUcPBmO^c8>`27-gO-ulrXJ<q0=PpxYW3j|j<&NOV|&GTl7?
zcwH(v(9K23%tlF#rRNPzIdd?1R7Q!lz+qqh<{-nOHNO;Xi18$ihLt+heizp5c#A}a
z+qQpk3p?2dgV}6JwayA9{A%6)GO&vM101{%s^7{DKi?t<7<ANU-eA*_(-U0?t#G<h
z?UJThcffJgIwII1GbUiUrQa6sDs=2YfCDEliYpxy_p&#1z7=1li(XP1)|?MTg*T^c
zASGZe9kw$9&xk1NGwj%Dr at 5Mlt#HKy<%@r8FyRwr`7tkEo6m9+Do3CCzRH~Z%3q($
zC&27ZjM1D`GF0K~9})o`s(@rfD50B6M2*c~iI&cA@%SjL>cAkKET!Fv39K^dfm|>w
zj?U1gmIPXpW246km9n+S)Fw;-{DKuS=5h`loY$i$^7WCCW_ at Kb0irdIfNdU_yD5Km
z-{2c)yMZ0qcXB*nLigolRNsNXC3SM%x@>XMzt@*PWNIVwBNNqrtzQz{eD#YT?ayAH
z_-ZE9`Ro?kGvv&4k7=>~y$VSLE8!Q!L=)UHp*4Y`w-`HT(Xejm at bzQcY=4%J#>aTP
zP at o$1L_lL<@CSq*2}(l&SRJAi9teLgjDRh-uwH`!f=E-Ae{;t_uC`ojhNRG1e49N2
zyVV-T1uZ0AKkD_qKS?eJf`uOh$%cpH(&@UqqF;?1)mC3*5-fHnV_(w90Z%vPs?8pL
z0*3C(cA#v=TxX}}aGN$#;10Bccj2nbH at +i3)OL6m&?hd5gv%=OVgmiE7>IxCD+>ql
ziHKliXNKM<cUZTDz4kHfL=qNt29q0GXGma{$YI5+QEaOTOO<s3<#QDIwtm9hMab=#
z*2q{JQ^cUckT58Ra3(vsk5M^}|A9W{FdcI3b2Kc=XzqvkGoIUuCG$dtBybZ=XgWP?
z_a%AuU-<ucpb-(Z50twxZSQ{@jRsCot0OnPJt#SN2J&7(K?VQUI`|-`>WI)OBT_0O
zY7|@lugAt!cY^0T%wIT-g{Q|(!^t<z)n3m+v*Gq+Q2_)c&O#9*u{lTSeL`sgvf_DS
zgq*kyI*8?dhCxoFC(&fwbCLRt>_E~z>^>WjH&J%(Hk|ti+cj`$gQ<Vd=R)<<Nq7%2
zdI2Gab%Z%A>x-vI`O$M4;x!n4aA1 at urR2p8D*O=g at BX=xQ;w?_;GwSAhX<Yf)5Wpe
znD61vUg>kib%bVOep-yc`IT#<z~Axw9~*p)#fKW7OeKkJVSU4gW$2K!%{orzs{9Bf
zt{04qYbba{d5z~*?g)R0ntE*~W4h}}#N>`~SLi2Gu*GeqTH9U|1aK#t{bQNNiPk`&
zmXj*%!peB`DuLD8PHZXt0pRTmy$W5OGq1#n>iKe`%K)l4r-2G_IDjDDI!uo*M`#Q5
zJY*b-n<(ZxPa(h at o<Q)l+iFg6k2_9%<XTr9W*TWe8>xs<Z}WdoSSYfr at 7Ifj3s;zP
zaeuml*p~?Ba}1ppKkYM%s(i+$nlBbMsDF;U!R#k0>AxRf0V at WII;L(e+;RKj_JyTv
z7{0gD2V0+Y&rCSzW*+vRG=^7x!Q=9C5hZA#x at n-D^}cxiyWlJAxZ1IR_rBntNbG0l
z*t~n`$Aa3+uMB^}8s5Ph55qKdx)vJ-vTs>{o`L(-3ef4f&KEKK?LB)ams0dtdWx^k
zy?r`00)AX47JTqDpEBSxZLoj_tE=mj6>-m|tJ2K37 at fNq60V8;h$*`-^0G^3_D`TZ
zr+mg1Yx?EDK_hHHm;6E3yj2Co;ed>8#_5fd34iQx<Q9LtCetiSC(%cWP5jP=_uR?^
z3g;~I$~R~7(QYxtVAX(p#>@6nF9i%0C%jhEdU3tKAqFM%#SDWuT6{zH;ZP-{b$JX*
zyGNb5>w^A*w(7x<9Eog~GZkO;T;`*c`3QuH-SCIVGw_`MqBEXu6gFYIX!je(@nC|L
zwWca>-=2S~vdU|T8y(SJ{VvIOi3&P*#G8|jEU;YyMY#dnaoHcQa3PFMW at Sp(P_uq1
z9wi#F<T>A6C!|B~MZL-Y^iR?fhSZJFZa7e=hsDYHAnVTIhnCsu6jj10W}r2igaWAO
z=tWle8Pc^VN1oZ-QA%@#W&x9|t2g~91}5&PTB3i!J`P*Mu&}WFH*Wk!>P`v0cW<4h
z%Z2F{;Srpqj=aW4Ytt$m_jq;4SX09siq1|tc6itj_PHxuld`Y^i>Qz-cWG1hW+P9r
zd)L#2a^e<nj7Z?o$)hGfspYI|>JELM^2M6fX=k|NGPGzi&?XP|`WCpl4UhcOrSed4
zU8sMjRuZ`2H`|Tl>#EvM3L*bJF$*|KB>#>w6u>agJ3z)d7S4XQV{{XP9i0`ef6 at Tq
zGO at kQBcXX>GPa3O+1}I-Ohn$KWT9|9Vz4HWPPoJ+l*U)F$K##oh~3*GEU1COSj$f}
zc&{j|2nqR#LxjYWXJiO2<uLX8XKWrfz`}oy&mEA7IiEKuRhLd$Ychl0TP}KKx?h0^
z&?mci=TyB7F3cj_*+LYx>}64F0q<n?O72{<vE)?Rgh?D7-4J~fOH<~Yd=!@!CdYjE
zYzKaDW(8AI*!VNojCtq!|Fh}@nrE4YMvET%1t at a7{;ulw&hI0TVpiRIE86YUU>SeG
z9wd7i`fmIMXigBV2t59=W*QL5A!<b~np58a|DMW%l_4h7Kgx?q4fx-e;EHO4Py<pF
zfIrbpa`ZPiHih$~4d>8V;jGfiAg<OZ^Q!!kf*{h8Y1TRlTtqUVdci@|YN+y9*on-s
zuDmdQJp)iWED?K?xm|XYWQEk(T5NwdVg+AO8q^^C7G|HwYoglWxl3|}4$tP at R7yFa
zSWz7#bR&o}FlP3LXWOCwx<48Ni9}dnmVtSS9hVokP>zf}))q%&elwIuWJJe)8#0Y|
zFx;r`S+AW_Z|AbQc{o at hbFE36dz2BPC)FSCFC3Tbe?3|`ssFb1+?ke3Q)7SPJrM+O
zNWVkrkGGUrJLpfAnk?LM>-5Jub2Bdvu`w-xVEn8m)`i0^;<j8 at lXA9xW}IqJ9k<L!
za%>^w$u>&=sfrr?#C!ZklLLL;%|&sC-s|Oc8DW4yK`eKH*qz)F9_NKkO`DAkb^yZ_
zI0R69c4&7=Onmg2C#1+sxx#-tnYgZcBWxOmPHt+}$02nY0nW636vsqDp1-d?CvE{{
zB6i3&4S>YXE%L+=E?yUH4u<Td)grWI*zaV5fj)jm`%M04XF#(sb3|S$<}bXY953pu
z>WEVR+O?78nIh}W5FyKzfD9C9IUPas590h~tSbCO8?yg&_0?692o!&u^Oh3noX+RF
z>;iP|R_uzN;al*@?@7&a+Cjlx%P)C)k$DjbUCuv}tj9op0^BwWg|H1$H|@HN5AuoN
zt9Ybdl2e|dh0PQyO(AVh+4!3k9A|&3`bigEj5F1e%<~5C;QGSK-2#@JM&rLpP|fn0
zgNVh%^xHrN4WTtpb7FtGu#SSB@{ZI~>~y>ldVMe4&o8Jw^H3%P5HrJ8sHu%#k1`aK
z;|smM9VLa;N`<mtyqZ8STNGdOh at PtMZ?eGy at vnpgr!EX?f6oSEoNN{m&7pzM9Wg_F
zCR$zZu!W`P5u1d$F+ev|*XMB+gvPLjtO=!?2GBJj57T%^DA#{CI5c5nss()QERcPW
z<GH~=Vl!TlQT~WQ#%7g}zHYb+i{j_Zt=Xwp&2Ojm@`0bWg<aEM;R%L{TGiz7Pf%^0
zC7rU|y)n)Sh at Agn7G89m`wV?#Q(ntN0dSA!UQ_Lagj+6B#Hj at w=uRb`|JZ`K!CnAx
zAOLaqZmTT({5^lDcUlREJiuG)jYys*_UIe6F#@Ve-L#wx*=rM0MExWEB7WFtv2tBC
zaW_awgQQEij>r|g)Fj}jI;Vrh9iUn`V1Gdia<@QqK~;;+s_H*WE2(ZGBO*<CDOpCf
zE7|W(6A|*8y%u3=gG=cZeqJ^;avad2prI+S2(&i_;7)(Fg<}+7fsjhj7hpvNbYVnz
z|As!_3R=d2qe<!A>u5YNGu1-sb><f*n8MQm-LGU7`~kTm*r!X60VP^n{&D*U6yG2a
znZ(}CcKYPjS)DhkNZ00E&(2Dhic_AF$ZE$caEdTiS91oD)i_VwlqI(_s$1>>gq5Dt
ztBxVZv9Ny_4kZ8ANm&|DB2V5qP7af~Gc0?lvuW&G`cy`CT92t3jK)micAYWPI)_md
z%n`UjJ!ig6lKG@*Qw2J6;45^0EBqlvcvCE}){-uTE5+X6bIw%B6;(bzHNM=THF2{5
z#l;BjbnATBgJCXJExZEVMg<7zo=LRBYHR0XEk=JDqij3Ta4M7}!)`pC?`8;B<T!}7
zbj#G24`&Bm-RCH1^?;eVj+<JqJ`=FsI}B#N*{kN55GV`hfGmu(1DZWWmXFMm{PN|*
zr^A2m(4dn2GcKZMihDYk8uoMXht-=OBDf!KMAQ)b at T;C~NZqL44<%9^@lk$~PQR<$
zueX06!>MpT5_Y|1xsY*9q8GYI`k@(PTpx<4C<;tBrp3{&(U$f?O{?KbCbgN#kt0yF
z|8|3bTx(W&{jT}oSN8>r4QWZ`oX~g4_U22WWy$`)WW1A>pq~n|0p)fKC$(5;@B7EF
zba#}hPz*~?+sLktp;GzJL>VaDgRJ!9KC*wP1wKDTk?6qJtas!b)Y7ZN*J(CbJAk;Q
z{9LK<ss}?32K4K#>ACfGuZIRZ!+-o6RzGRK-8vsyytBUgiOaCvTaQ~i&)S#_e3TWW
z(+42*-cURs2o<LB0wdC|K*6-?6#F$CATdHGrTEYE{8DOKm9eSBqWapauDh0jbv%E7
zrAYM3hh at I#N>@5Cp=RIsD{Dnp_t$&u0TbwY&4Mw~SnI0VuM4h2d+eZMY;?bLn>b|P
zud(o^K-Hj+2 at G*lh!?(7teg1$S`eBCOvQ7dDPlJQ%V`MFCc`P`Cd0i!Rpf35N%I((
z0a_jxv~ZA|F6QR- at cQ5P7?)$J;aGob;Iyl{v&ib;CY1=Ms`3ZXRwQ|!;dvD{f_ZQ0
zzvC2-k^vP_<sS|rKp+(OKM`{v)Ca at +LPNm`U->Ux#rHe at v<XdBICRz%cytx1PP at 8A
zz-*jl3G`3u+mU-Z^kOJOuGTmt!Z+Mv`I2ZrV;|7JQkg4|ab7N02JHy>Us!(&0Yf at L
zEq6rCY?DN36fI=3-YIK!T0%X$*Qk5Ai1I at 3cetoIM`ZdXTq>p5m!$NFsW+J*B|y;H
z?c&5ULy$)~R_+Qc2TU&<HfFHMkLiMgK#70eLz3Oq$Aa;l47$bOV1X?t@|#FES`D1}
z;=mP8J}0Y<Vk8KKBcVVUooRo17?^z`mD~J at aClHJryx;^<D7aXDCFk9hP_E*F*4mT
z4_WLfc4|b0anlCsx>>8Chq!|2v3<YYJB>r*F{Yp%?4dXHD0FUyhOk&t>Qrt7EyRH?
zp{cq8^m(V6XGFQ`v at j;0`vkuKl{(;Xjg;~E({ZInS2m)$f4+v<pWT1LIY?SaT0E~I
z1 at hJNQuvd}x-GA}X(vim^*#vGT_%l~j88|eYBSN4bPL-HXhO&*2x9TrBDBnzrKS;T
z^0Gzw_8(pDN3Oz8-}^(!#P1ZlDd$N457NB%<C{>1FLWWV5<Zc!fTdEi(2c-h;0AQy
z&Yti5iH4nTfr{UeRV06`BE_dL-DLF0qG at k-7DH%d^fBDJkSj{ir#aN>hLi#3yrgt>
zz43TBC6(!nKtVbA>0-#imPshOB|#4_eAC#r&KWA5d3?@4w^-DkXYI;m03bj$I+Cne
z4+q$76;~R1Dm4^-*@z=vov~1pB$_BrncVzg;#HXl$QgMVH{X9uWZ@<9q0t#5<gfAk
zbxmm;Yw at SV0!J_!oalf;f*FxM<2|nrf1&bo*HiFG*`lXAo at QN2<t5!wJNYuALd6h;
zl_Se)VFiFmyL7hb*+d+#y2QB}+W)5N+m|U(?2<aaR}If>Dh=Fbv}>~~dnhu~NkKE7
zf?Y0gyX}l(y`_JLR$VW9=M2j6$IfkN at ZS02pAy3OLdvb81Q92t;^$(Ar8S9+*Q0fK
z^S&+9JYABb!4bLRzaJKsMdg{xR^{$}OJz~q+d1^NP15MwH|9U1pqNF!1~7?jr at TwA
zZ-hq7L8WKJh)kj!H$(DnbHY!y!ix`QknQgx5G%cmTeg3ZU?spjpaQT?!n~tK0ybR+
z^J78KT(-liKZ6y}g-Ksa0=-~jW$mM!sRG`76J^1+dDiarXSSVcuKEd65DH~DSVDXb
z4zwXgy`inuK#a6ogV2pOVK=zLB(z<3oAmW2IK=*nt(%u1sg0y3TGAwI+$Dtndm$6q
z%sk<A3sZjqia+n2uvkef%+P;!##KNhJ|DCQLrK8KpP&iDW-91$UHZg;7AO1`nB;^<
zondC)(}gXd_zQswl81zhO>NZ_RDvQ(GauVgO=)67so-0Pjuy`4MzUFyD71T{Dk7k2
z=)6?qu)@Pvw49dh<KDd3n4yBtJ?(^eHuR1jSiFD!KphZa#4;}dC%x0sPPZVx`q3ks
zZnGry-9WAUVjlvme_<lm*~BuGEOUOy0We=DZE%~IZX~OeosR-0hnD$ph!1;O89wDZ
z*~1<4+xpD`e{44DpK!r^o>zY?$xU4DGoAv=N~eDK(%3l~^uCZ7qXZI8%w^(MCV13(
zdoO=vbg$Y-ts$NuhDJw6r3WqP5hf(4&s*>Pg(-O{DJK+?zs%Wjx&Ak_wH06G6?0n#
zw-)a($JuO>Gitv~k?)oIFRlPYA%TyHlOP?ZF|r1}Ha<mxwI3{%v at 4Cp^N?Q}Z$H7G
z7VePsEzxZ=eI=RVACLWdM&wcw{x(4kptOHfwrlI+Q&nB?`yf3wovG``&dZn}?zz%O
zrOEi+8}RlB1FlB^Ubu~sgE*U*KGikG&$|2<qR~0*4GT`-n at g|@^6J_3{+*2Ahlp at i
z%I1<#kSqtVs!ip3GBw$XCi-F1x(xnjVxa&+pYkuS<IQiyH;dL8>6bX+96E;%5^jH+
zsP5$Wi5F73RzypS$S=fKTT*3{>!Mp at 4kb&Q?PaX_5kC4PWlq6KEh_UjPaw+M6^3u8
z5JohNJ@{7<Z(gLCXe{RT*z$DK8Y|;U=2FC!RG5~$4ZdL>8W*=Q+ at Tl739%YBOux$K
z><t%zm?-|FMRIX at QYeadJwP*Kwse1#iooNFENr(Ujk<zMGeq&Vy^l}5`&4b{RtDG@
zV=G-zC}K8mj!^R0);h9tno5Cm!_Ws{z6LxYxK{OdVVaS7#@_*^29Tfx)re~Q8!8i-
zl##mun at Ml#SE-a3Pt7bu{t552ZQnYaLur?k%)e3B=*wMyxpQ<oI}xQ%^kaWM?|5};
zA&R5FJ2w)Bi^=h-eZ_11PvaLhMovj%`*OtXleSS8B=F7*msmZ8Uj4}gajK|P$#Pix
z`f6!$+3@!y0&@dcID0(XlW!l6if#Zg@{{b#0h_824f*pV>2qgVZWMMMd+a6iETru*
zK+b%OhhJV7xaB=UDQnLvk)nTJxY8*$b!kBU&`vV=yu6|3<8pzMaJ<i+`FAsM8Tb7(
zKr!=|mBUfR7f^5O6rqfW=KQoNY%5h4lUt)G(rBnn2WoB#E?Qmock;3GY*(O0XqX@}
z5fFv5P=j&Q at uhoj!MvPOtq0922iEqaxJ%!o at d4Bs*g{=*<{<Q)#@By0X@`ua;-vQU
z7cf_mb50H<43ZQ?M+BOswCq0G-*-)eCjYk-+&oT?xJIuu)a8V6xx*FZjE3btuTeHE
zD4JVhSwjH!6Qr4-<yz3o#mqiE%wtOH;W0_V4wTwMD%!$&QEWNV=xOZIz{y2UOC%dl
zU{`lrdqVOCk2o3azIuP2wB(tP5s0OlN1Pvj!p$b(8zEt}Z8Yg9&%-o!{=B<{FbmTr
z*O at I*;M6U5?cSDvrB&`W@*{}HP>=y)b}<K<1uH|qY1 at UEeX-aLW?~G2y{WCcq<8uX
zra1=hzN|Qa)ZnE6?}v7|L5NXhbte8-<p60*C;DARI=&SQ{$GCtD*Mo*FRg2x5Rr)t
zVHj|&cV-L0i35z-?C!<ENIp7o2!=ll0GIG4EM+ko3!llKy<8*{C?N80iwD%Px|Z&R
zIC;|0Mjb!Ox2`@5tb(RNWPu2}XCaJimdT#4+HYxO;ZP(AQT*^n*X~v<vKreb&T<N@
zttZH|og{!%t#N<NG_cEB;JX(%*YLkXiJ&5bE+7 at j3p(TVb_3;KzydIoW at aSDehzBH
z-q-_1_D6!Vw0h-|y$JpuezN`)!n7MIc<+W!w`FC`{8dmj)La}Dd7WazZ>+d{X>PNP
zA}GgiA)K?bPa+Uq*ANN&Mj?ViLK<B7ULi*;1(SH1h39`8?@py_TE|_XNb>gRsrtbS
zCB`{7MTFa-OQ!%?neh|Ia$;5P3-}#iKL<=H(yy#8Oy9KVPF)C4jfXRMjR}>;4FO9?
zj(k_gjTh^KC2}~UkA&ERxq^teat*;lTv$U$Uzqi)2CV(K%BeG{)fIRpeXs8)8=qA`
z*e9?)Z!UkB)(1M`i3-F4$Nc>8WUj(u6*GaUocc!gr)Ud5&mMgljr^QsQbpSpOY9cv
zVx9j8!GZt?K=;4ul3E`cc)_N}t_I!kZ*U9tV$wR~*h%7!&(!mXJ6fIpxM=yJEo3>d
z=j!1_NvcHqqwOk)B`xy&Zrw^bsq$gMXoS7yTu9sdfj*~y?CeYt6}goJs*i%Vw1;Sx
zOF(a!Wi--U`{%gUc<BR%O&?{H8!9<?al1rbZO(n5g*Sm at y&rtm at Y>$4+=1~}Ep#yN
z9lfHxavZHzurWWoPpRdM1u%WuNgL2QjIKD;MtbmxeN+m9_MoNDg|aN~$|DKsRRf-V
z(@Iv{s{N#YEukC^eXpL?EI7T~hin>w83#pr$i(jrOtiH!7V_c at SnJQ+gh4?p?<gj;
zwXNlqWYrPd<x&XXZdXMKqXB!WJH&hCR=4X8%4qYo1Q at Nta7U-LP{=ucAuuX41G|xZ
zZpJ at 3P!R$JvXZHZa4MTc9&OeB<D-SI<b=KD3&OB}2<^_XR4b||Fy$J2G6nc8X5z|v
zKgnJAb<^eT>wST^D&~(^i_|VX7`2lk^(NUpGp*oy0UJui==3oLF4Qf*arMLJ&bA$7
zK#U+TAb~@mgzrdZr8i?v+a>2odnE5E`*pPQdy_}@X_CX4(os~}v0i;8%UrE+&lEW1
zUe{}X_;=Mfg98MZvZf@$rmyQ5>YpSQ_|9P`$Q??J$g(s at g{U22km7+LianAG-JD2(
zbGkVF8^~#Q at To6;>wz(R4pjnf5u4`9O)rE{?=|TjWiw|@W&Q_z2F}b)c%h}kBT0ku
z45m;FnCdL`#ggbcJzpnd2XKde02s(JXRcs>i6>%B;SX1c;@IT_`17hi4>$i{-&;S&
z6qE+C at hvbcLqvVK@g-UUnTJMPY<48OEe;Is6!njrE3RP7&@%uq252HqzAv9<_>XE?
z at gcyO^nG~gM4xYY*4G%<HB>NO=JmmQVC=O`z3YpPk>>TTnYv#6$_6YgvBX at Nw~42J
zWW<R5p7#e&QvHwWfMJ(2wYnkaJrjfJPbcy|L;a)7cR9P;kU=0XEcBVmxK(>m4|}>o
z`>J0ET=1J<OwkP~i0S+$!Nak0lVc^#n(<LmSQw+NFV6sEH^pT?1&Oj`Z9}<~gV)b%
zvdI6^sv_gMkP7?;(OVlZDAYkDak#mEGw^~j+8b3t7tjZqzA+K-65G(YJGW&kumfFO
z$dkaQN;T|s(Bgc_?cVEODoFvpXbf8ax~*#heQy(*bSbvps*$zo3nE3S>6YZ>HiBA3
zO>k)^4{P-b?)r)=-@)`bL){UTIugbN-Z(4%MiWRAq at u}ePoZfQ0Etjw8&~pwf_e9y
z%Zpi<JVW2z9}9v7<cSAVa#wssTr>gB_(GpR+CUBd<?~h=7nl6h>qH0c3P3rBLnKB+
zeqGAD`~4J3O)2j&K`1QuRbBU}kPf)KNj<>qy{l(F@)v6 at RBTVLTot*fPwLAc1(r!H
z&~~jNDwFI{^z2-w)JTat$9MC8JkvcBZ3c2H;EEv9_ZLB3ol81tpdv9Kvu3gQQ+5W|
z&wgZ at 1lUiTm<<cQq-Bt7I=35D at HmfBLpZFu4E9Ut6cmt$a&dbt>6s+e>C3wL^fGn9
zvV~`=Yxz0;VHn at l^kmM3RG2*G0gB{X#5EGU4=!B_tHa%3WZtcBFg+!IU24)vOTlG+
z)v#?-(S at zYKD<M&E4kB!!_qwMWB{g#m|?ce9lv?5+a6?&sybBI7nhmemC!u%5`JS-
zCv`d0$Pz(7=t!IjP}7m&bAXqDFU|6Rp4%JgfgnC{_Sn{GFs8ZuL5=- at z{m8HAUNZr
z4nY}O<{4g?^iiL}AIi&rY0J`Mq&T%*ZhbE at 5GJCXH*HOlvQPj=r;d=10XJ6<oXbxz
z&#q0|=*qqPAV_&YXzJFfzuu3nI&U1|K+1xIMdBIQBue3ZI+SaJ3jN`cuY8HT=lh6#
z=_}#m?>9`v_}*FOs1L0h2%NSiDuag3I&59AQHaWrB at F_E;}XGtoBvAIJrA8gil|ST
zd=AgnYPNL&P!>ee>lkDRkt!6*1G(v6KmXJ|U>2(~=0ZZ<w(_pK=$fgw>ksNcHHi##
zSs^|DYbQ7S^aMa2huhJ!efyHLR^qxBE)KD&_yXzpf1hoSihBzzk+%N%P{_rEln7+G
z(7A?lNrnmiY??lQWW(J{A?@P;9bz*T6M`{OnEGSZxD(aqwxeLJFV3*it|(m`?(wBm
zy9;O~|6z--n`y=lMK<TvOG7aoY<_=!h-}y+K_$hVfuT+bBpSsWddf1~R|B@}{tm<%
zR=?Yy;$gpbWm{C&a2<_G)nXGIM-~&oB}2AH9>KjCHCSMON4F+KFnqeol7f1aHOums
ztyhXE+~Zf?dG~;*tRESeEfGa9()2SZrhIt~w^?cNdGt}}XVt<w9>I~I0M<fODF-P+
ze&!kuGSzndKzP&1*5SLEx??&9j6(xqk_ZmL_s}}st?MGt5 at UpCK#H#i at 6-d0_3d}i
zZ1zdIowzA~Kn+Ztn9#wP{+5$xl62potCY!DpEGGVo`<gYb at Wsww%&y3DO>&31p|Jh
zRmnH5 at a4n|b9kN=h|gnT2TI4GGbi=S{s`w(&?v(TTiU+f3>;iwKC=XFaE^gl&u<it
zR0&Ev8XThSKGC=!7jW~mbEG84b`tmfOAxVg;XE9FvXDL0f7J at 8-uDXx2@i3A+lqX%
zT)CUV!n5EK(|$!Q-_ZcrThKjk^iGC#V?3ny&_5<(PyUokf<^FxZCav8V>OxMnZv!B
zC_m9A)Jr4&ng5sn$z#C~nn$M(VR_6BmcCOK4&FSTVx4NCnKC8Hzkj+G(6IT*H3E?A
zf`HV2K2swkBkwRb47v%qoFM&w at Fh<%&oI9dw$q~8 at CzaPYo8g8Te~f2s at 8+9kId}9
zV;dXiez%R>Fe6Kzc at yls8Cr55aFtYRl!Y9xWB(d;`DwN2K#2!Cmsr|4M=!q>y1v7r
zFMl)MSYFL@&@pw0T87 at VpTlcX$<#?F%7A!(Js#4dGe^p;I~;JVVZeWRXYx=PmIoW7
zvXSHMYu-T{6=MJSAk5VKMAJ8i?jc|r{N567NG(uvlmwVlZVPZ&cGJhHWcKOq;~2PJ
z`#)Nrc<|pNhXcb_7 at -jg=Q=4~BD2$Q>G(hL!8M~~&+~;_dL${*c^n%<(ml8P-`LK7
z8JoMCFE|QR?d1QXE^HWBKG3RawB;clUP1ON%(d19Qi%D~e)j+CzLwXB at fIp2_OWZY
zv58!Sy~Eq}!L-;ww8iQ>ItG$JLiJunH>aLCA{2qN1DEGE6Fg`301Pw7+_oUHTn7k(
z=vD;kdR&tnNtWp35!ugnY;T1HX!s?6%#pm72g4&V>3ActR5d_LuQ=#5;}9H1SoVy1
z*sERTM@}x0_wTNOk4a7bQ~KPVe-iRdX;ow9Q)g#?S~WW)LwJx(%SupqnSPhrypUOZ
zKww7(%LedhF)LJkNBDy~=*pmz&Y9I at q)N-mDTOvJ0<#I0KpQpHyz$LS6*bO(C at iB!
zQ9%YO4T)>Y9KCt;%41VY#o9)=TLqZ87+4r&QR8=L!C;`a?;lJ<as%t=p;4^;cU58%
zvBJpI0_(yqsUcPQ1M-0D;&pe0G{j4FE2Zm%I&#;3f3|~|NqDe}%d1U^3GJblT$6$L
zI9IvCjur#D>4rSEKz-wNq?&+#_vpgm4{zrjG>1`VcmLB?N+KE*G~@szk_<=oe)AFZ
z!#!IRczAxhs(2tGFHr)V_`v5H0rihPH?CD>Jc at F0xQrpV&G3B!FKxI7k at W&i+_2e!
zV#~nwN?7`WhL^L250b;IaYP$VONeL#57msw&qP&7 at tYvpGJ=);h~fZ$q4q6+nEJ>6
z(6)yIGqJ8TNo&?|izW at L!8_Ow#eYn4TDKkFx5*=yR8w463O2#AiXsTn=8z_rr^`nw
zhrUfR?2x}Q4bG6HNCy&~vHL>sFV&L$M~^Ow<EQYulN=C)<MezYt-Jgm0((xG^Mhg7
z>^#}%iM7UG;RP{5F^NWhY2)GErmVk^$8zC(>EOEq%*qH{o^cg3q+Bh>-6qi7#V~r}
z(~Q!(1~+ElPw$l&tZOq`<{W|{OvKydEXizZ2EfOKM8)e7(R4@{JCyP4&&&yVPKhj$
z<MUUyrwX-OASlKle30-)amqYjAbgmo!@DEWSL{P{N652m$zjNUEt2P2W*?ls^mXnH
z`4k;oT5z at -+OC)O{ucM3TP>-){KYNNhqKIQWnJvZ+)_gkGuhK?XC4zd2|gxpil4vg
zWS?tmXnCpE<K+uU;+57ucKIcOX5Snj3CGbX5Bh^$Fc$h^&5{{p24~B6MEm?WqS0RB
z%0_FDo?-SpIBw8?;k1WclJFk?I35cJ-DmMRg93(teBEvT>f*(zV+?G(I-F(%xeY?g
z``mIcI+d)};Lr9rhBfr at iXDKaRPr6Z7|2H}v5p6*E6gV7;R2K?H;P<xXHwQ=Jsb>-
zz$=OFbwpnTQG46w>E|>&4B-rJrN)gjNYpvD$K;|hdpGuf-g<(zNz2poXr`UE<J1O}
zIYs?<!Dr2iPuM1%^=!yk-)yi4#!oeI|0!;{$nP`rFDq%(4%67?F!d8ag*^$r1tBv^
zvIQY%V_qcrBv~U3fBW2;(#$|c6=K8cVGir!McOlzr|&1P8R40Bv=}7aYiC#Zqt12D
zrGf*a8i-<lrmqBIl4apdsn3P9h%8A`fT3IjVulwCY{->0RZ-jcn`py at KF3Im7DaoL
zIY;pCs%W?j>?&m%`%^xnUUoJCUob}ScVXTqwK|x=V3^-sJ-D0xS at J`4+?mL^5U>7j
zus&ymMSdz^`5Ph}GjaKKNx5sLIG at JO(^x8N3&8Y$ZMm})exGa6 at EC<jH%B6^tW3nJ
z13wK*V7ney?p{LKC)Cr=7Z9cn<-JB>O+A4a&3#b5TRNrTZjXZJ9Axz!y{p1rrsEmo
z_O(G=yVGW61iAivg`j_OkPu7l0FQ$Z`VlW%tVM at 7OH{1)8LrNXl&!*~3X2dHv4Uq^
ztpjL(Hx%afp<6Qi9un=1JW;0OZq26>REoI=5=fL{{W-4)JrNh*QL85g3LKU)29IIg
z7w4Bd--vonOB8T09C4WyuGj01Mo1CZXk$5~-kK>>)6VwUkGZxJ7yT<xFpiSfu{iLn
zCa7De4vRJTkk+!m#B4x2MvEL(8x<<dn<uA#V5~O^BoLqZ|A~7#LA^fLbKcF(Jc;gp
z<%9DyFchFa$+vCPAr7`Y0<D-6v#)mq+A`&oL&LnnGxw<nVa{#oqF<qg_{kA6$%2N9
zL&ahz5wNSsCZ`?6rdIYtv=ah+>2B1yFK3*sdCx^9VI=c<E6%52P+zJ}?V&AxilOm;
zW=&vr{sJ^YMRlF@!tIrd_|s}9h%m0Lzm2U}Tu|t^K<aQbkT=;$p_Iutxq=_ at 9(X0J
z+>M1 at C|bdw$Jt6?{na3+<QjdWHfXzQ-Kz*cTY!Fc8_XMQ5L5Y2d`U8<0QD6t&t>j?
z`o^xqK0`xa8qvR2Rpda?;mx<SbBfk~L*|4FhR-H@;c5xXZA*)zz(tnJG2yQ|!;nrn
zmwogjdg~YJ=f%JO*!0IAkuz^I#7%XhkBQLN5vk{=5{A|w3T at Uz<7f9 at tJ@#Z_>yn0
z*fbmhQ6$AMd_8bHWL_IJId}XE019S+i1Y5{6{s^q0t>DD^)G{>gS!)F)9bu{q6ZM`
z6dy`Uf)EP2U6`vbiwsUw_-|2<sy^vGT(WpceI-gy7f#Z4puLaaNeB~;szQnSEAo?|
zrEl%;%{HU=HQyun`6i-3-ks_8pY<Q~7)eCweKwkGaEb<wQ=wOd1$Ak2t3BR^mA$eX
zq|;3-Nd5<JcIFKPm^N!ILnPLJ-AFPtX at YCbiKnB$T&HEHZSW!dUH?6C1wcaTuX)uU
z-W(P)auLNASS{lMh|MWvWgeEN0~97Y>PhlZT?@H=i#p)A#-_%X8AqI~Q&3qbzKV;6
zchnrea{%d}DA}h?@bU2K>BKbtHzNjd`D)=eD)=-VwD><SE~{tMI{|Qi1yzCbvEO#c
zs%}u3pG!sTTt+f4^B6ffhZ*e}LdoB&Nyodd8u|U;E`M(EE9PWQReDT%rCsV0NL4b|
z&MSkGa-E{p!7b<2OqXxQy7Nmev{Nl{lguKR?1c6ZR1#96{heY~DYeVo<d;ZyQ{pKb
zOpgsbat=;d*M{8dyM0W51B)butOA@#kjxd*U^%aTqTCc+Rc&|@EM3DPFzHm-l(W0|
zGp;+sE(0}9O|EMdcxD#<No^H9A8@>|f(a;;o0+ at ej@IC7F-spgzNw~c!Of^*LK#N`
zj(5+#I{V5duP8wtPaN$e$43Sh3md$|?@lnisOzT)nkz&II$}kC(%oM0 at QFVj?xcMu
z%mYDkN#q(W*~=ArLrYS#c8E#k{8Hki{;#6R7TbA7LrKyoJ<jdzCpx?opVu9wV6`xo
z at eaSf$x52dSA4_=qMSgfI1Uex9#|FjGHYkbt3#T>b88HBMg3;+f$cjCCRYaI)<uLH
zMp9oVQ!SrI`LLCLt|vTa>oN`ZrRI-Mu6l0+-`&k~?lzNbP8rB{wf0)XjsEx~o8~%X
zdv{$!u)x3{wO4)yZ9`elLWa`_jNb)H3Hq+P**0SWeCd<nuo2m9-#QRlU1QP)j6Zsk
zT;JLT6{bl3Ccb_(m8iFBAI<&P^g7N%Ho$#QKp$E%Ds=#VvTRA!laSS`W?2o-^0DA=
zxp5hO>A3)u at DGXoQ6NOCYmt3)iXb`{5FXw;3houiC2Z+8Ml~pS$D7zrB%6`8zc@`;
zl0x2j_<EfXtfv;(sq3<+)vlGrp*wNN(MxL*IC?AlH(~%^)E7Yf^AtA58rlTliDYMg
zv%&~T5d4;Zp<0eVPf*<#g_J3BM*F&2Gs<Z at Ggq{&+5KM`%A;oIdEpeIpiyq2q$(-i
z_QTzA<iMcsQ*6M4l^Nf~;i+0A=+0M%+MwV$ONW7&akLWw9|Fidj3HDh9?$L72Ct>B
z$k5?4Sj|SOU{{BOmBN=n`ALK7fmDXq)=IhAJ?TAv&5UTCNhzMt*0{Nnz+8F0HtX at u
zODHeKqVl`yc)$EEUunb9e25gZb6Q33?MQe=i2a}T_;XF+XPM5t^GwTORW3^X5y2Wv
zdOr4G`pENrXJ#e|EzF)n-;k|j-_naR8t3d%g`?ZygDlk66EflSr+`8j(a-<2;=KnX
zCFOX3GXc9I<bPHcUQBVkGzR_LT&u04(1fjyrWG-QR>(}L^PF6=rUA5EYZu^=&#Xs#
zB$=np+xf6=`TCaB1F>;UZuu8SFdOQ7tnrEb{$3W{-a1ja-~GZ7{$6N0*F(Y*BB)05
za0#V%$0$zJcK*&%3cv6{UL3d9)7{<^Zs9L~cYg(11OduVwLh%A!U&nu5A0U2emx+M
z6sJ;+lIgVFADcq00R#LDoDy_~Ytavp{SM?0w0mrm!hkl3-+A$G4XqR-|BE2Hms?pn
z0{0S2$?7oKddgGoUrBr+Egf!If2!ENAz%FW5r25ESSbNUE}4cW2yM6QNVAP+;SV5x
zfzN3T5z<RT27t3gq_W)lD?);Uh+}`U+0VXdptD*BFTIdb)wzVT>^31yc?$aqit(b<
z^c=bvC9$q)C7HqPT+j`DNq$(%CIOIcPiU~=Qtq66Ct6kbWOWSlIr?;NsUehvBcKl1
zGs)psZiRww?kDKPtL+h2x>nOo9x}^+Y{Mt0k3=0bwR?kYiZ8iHbt8IISrAveBiyQ&
ze2S)S39bT*RrFAOrW-ES!3r#CYpoYYNNO%+pG-uW4tZq?+ at vcHmT_$8&?@<~;>A3H
zGN02<c&aA~;IoZSR2vv=igfTh6teka5q8irplo+&xLA9L5x;=Z81;()2`9*Za0zw&
ze<5$U5a07e<I<{c49M+x12pgP_$XjWC~kT;8F$~s5OrtV*bB%&Ed4n#86b^?YzyYc
zNG?`Y{utZ=Um^Zc1;lSe%PDU#@Go*Q2XqLbgT=Bcf3ysiZ^LVg9qa*%-WWFc!2Q!!
z;2BEX;a}&Jea;)q&oh<6Gv`@<PFc*p2SqW66Pbc3>J}>g^Q=P7{XTcdl&w;K8+Z1f
zhvGzABQxGM0sA1Oi;?OO3CiAWb8?5(%~RGaeT)&CN2-;zZGUqdm7QZUsR{*K#qp!r
zcy=WsaR{<b=DCr=LAlY)(|a(^+Gc=bxW?KHiXPhc&ve2frI%|Q5MViff~5HIiYFqa
z<FQY)FI at Hqcy?d~Q{LsOeSfCdu5O;7aUz7B%0NxfpI0fC!;A?2ETHTWD at vI#NE|dP
ztDDFMOD2#-9Q+YA<3VAnj)v8JC^Zbq at t`*?`<JNJ#+4}tYSR%*OMM4PDw^=6<(TtR
ztLq_LNDuKD-0aq1T+-WrLo905aYmPdOL57&f}?izzQjojCSr3)vII_qPzWs5n4SZS
zyV+|*U^aBDe1eo;E8J(tm{h?^O>E);YAF<wuK-l#i^i}N#YsL2cS>xD0hHNz31fD2
zgJMT65Zvh-ml^}lixW8wq~fXu<Mo>~e;B!DymW&CE!1jEhsKV7aQP6FGQpJ at 2v1*r
z9lD<F3S8JE!HrZ2phC-lNzk#`>4w^%s$*h at iF4K00+4+LLrGB$R=46Q7D`Vb8MiL*
zI1=tMzFNI6Nmq{DlZPj&#dfkNZNQE+g+qe at E%_1yV&Q&k%_T`ZBrqO<>I<3+m{0t|
zqwBTEL0~-**f(&0zAv}x5_9Z47=Rw$`zT8VR~|<6U`<~p`!_7T+PojGPEIz|T}TtP
zXTg=+t;&AMEU3Noj_JGn_~|O~MLvfqiI!fj>VU>re^oysH)xW5=ee9??g5dQXx0$~
zeJ2Sh*{Z$*eT{Aua8gj2IvJU*`(p;TZKL_|?}4kZ-J1 at 7Sx=`U+R3!Ok4CkAKXIKA
zAtgrRSR?4y(iB+kvnt*B2?2LPAXNZ89v)<KH1CO;FMS{`I}tm~UJF{uDcyYtyjlvv
zz^1 at QxX3Z%j|_9*0FLs-Eoq6ry-+M5u_B$s76Il-MpK6ORcbPBI5XQ<BH{M;ZUdT?
z#qetPL~eY4mj=nUyt6?8J}i5>Cz`rCdQ6b`VW2HMC4ikzna6*QSqYK?@~GYH+`m}5
z=WA8|sxeP2V|4lNlOTED)sK=cSrY5DK`XU^s@|A)n#H$V at 5{Ek4fKg2m2>fK9?J45
zw}mpcWEfT8-}m0WmBzm_A%r)IPcl!)ZHJfPp+yOQ&-AMFe@>M at d30Y3kMe8@&f=~i
zW4)fDW}j%YQT%WCrG3WZ)5rr-NNG@;)ftNCA{j0-QZ(uMlKseA5z__PfiZHwhM6qU
zYo;qZn}+*i5GU|s=*_R8KuFTQl1yA$T8G6uyc*6is6Cj(p|&)k@??4G7zO$2trOIK
zrUI&eMBp7ks)kWO1H5~FrVUyf&TuuLHGW&PB@)Jx2cx|99;tdsXz+aHb-DKU0cf#a
z(x0W5RoLj-_nAkC`}cG$G3!N0uCxj>cyfR;=_NRKFBvC^S8H46t3)K_np#MnpL0VK
z=((T8V&fDP%Q-K^vr^ChQ3r=0rs5h at M|R|Y%i1Wf7Bs;!>6JCsXXp{)1o{w^s;&V(
zhE6b{aFu{1)9}|xYVMq<z6P!e2J1c*D10CD`Uxy}RN(KXD!n0g|Em4kwyy<6Vq6&}
z3KGxo_;7p6 at Q7vOk$>XSn7~MLN<`U7h_IsF#NG`2uJC#(uZPZOTWz0SPr}D2?6E|D
z9*Og)CpraDj?K9y35i^guUkSI7|!jogtzrQ%FWMXVN%n3<|zzzL&`C10kk5VYHHNr
zBD{Gh$7wfqaINg#J4oytsXH5ZN3Hx=7YIIfdnl|%&Oz;3nwLTcJn0J2jSDB3p*mPL
zTt_BIQwPkJNhuq{Nf&Q3i$^&xSl7va*x3=7Y8fN~xDi!1d4yCb;FMxZF>apGZLK40
z3#IeP(v`Q at oVSGlF7kze$GH4$2?kaPeqt42s~Y#gdd)tH+2p4xlfGIUgt9v}`V`G*
zEQ5os>iaGM#hP*>Sv67RY4JiWR!;Nt79JS+8lto{67B5-N;NHPklVQ{`(`$Opd5H+
zT>~T9p*}vAncv>1h}E}F!WE6)n&}$E6~GGN^N1^~Us;K4<a%xxe6KTC#~lpusRl)b
z_Cbp7wCCov@##<)Afk^#C>8;p#=5)Y)WizYX0w|fp~#gD4g!^`x+Rh*;$Oq{NLl<9
zFwYOK<jFt1*q7rduI5~F$sqTC>jg_6h at J#gZQ(MDg=|~xj`Ji?w#`8SQ9<Qf_IfD?
z=N^t=Bob(owKTOCrLyy-!2VLb6J2&r!pQGAGx19wk5?gX;b(OiP1JAV`r#HpP9<KT
zryn4}+e}*p>IU(`{sokdTKNg~TkW4=dK&b-tf%IW=9XD*2RU}<>YO`&P at FYg`U-I`
zcPAgHyqNF?=1lXw0Z<uUE$BUd?5uBMX3;590zi+Q2y046IOF`@|7pNS_+cPF{|@%G
zO-s6GS!vlAX1ED=lp-d5h`WKFY*vB=3}ku-Tulxg(n3ApoHXBdtdrbH<Q at V+(D*20
zwY}x`=_RSn(KNvkt`V1ib9{j>W_tm^G&I|$Ag5`l%3h8Yy!vlJu`g~>4IdasgDo~M
z>?YWsYF)c!q8pIp%F}zT2Jb|ZqD$i!K$EUVheu`}I4l4^hQV%4sDVfHSjb#-w61!z
z-Y7!><Y;zZTmI2gA(gLES633K&_6y8wgv}`%&OgGR0u_35&<%Qm#Z)dfAbAz!K3()
zIkE>KK;9oHthUldea7k<r1JqmYPv~7(&ZSQ8}JV$u+bTv*aP+!dU2o09VL0rDBkjh
zCLYxR&p4pe1;$)34+hJZ8S`_cyD7qK^#huiKOJWOr73WmSZN?uipB&4`bo5Ih)XDC
zWep4vEf5RDtg;1vm~W;V1?XZ-U&-&}nm1sI8Ak+%N at _+WLW6lX{PxF^i%{53u0N8j
z*;rV=8ZFzT-c7j`3gcBCmgut}T$`7YVEHih36n1p%4?^)h8u#s%SXRmtZz*^atsK{
z1+H5{_h7R=X^5OUk66JlJ5%s{?tcyYvKE4l*ufv0juh#CbrzA6l+6<~YJwT8e9;^u
z0?WupOo&=|;R}usjtcE?tL~61CCiL+mHnvo*U`13_Sy-7H5uff%<OdlZo1=0fL7*N
z)f`BHZYuNKZyM7G1WBa1M(u%M^;p<vnHoa#`irV}i at G#KD&aIPu_NaH7Qr6TpTREW
z;OvIGUP&8&5kw6~Vubau`4{<vQ0nVAjr52XJ%cmK7!CH9_TM+q^?HET@``e0CRG8Y
zKA(5JJEb4YzT*?adXDXr3$C~Rx!pVqW)$JpJPkNjleVkz-zMUn1Q<kPf)NXol=`og
z4Icr{;_T*3mEx^KJ+k0iUPch!q+<>&3-UUIF~$sk?4}#Jn}d_^BvO94Dwc{kFEza{
z8{zR#thA;n?0To<74?_KqJH_!yAl)ka-B+|(^XNrP_fZ_8~;V6rGV?TUGe0;J1u}^
zojEFs7kHmni*WfBf(j<|+~xcK@!Rm_NZI)1xwA|7RBEW-FsL!ma!wk&Zie?x{VTMT
zNw%MVXqxSt<qiD5=-R;h%9BnyI^><Ka;Ah(*6PNfNb376q7**?m%kTL7poPO$E~Gz
z!VNpRcZeBDC6%R`MvlecOh?WFl9qQ2^aeU2*mSc%;@=~L at Z!3Re-ZX;EKVu<jpRb=
zADhJ#hHgYNCiAB7mOxRArrykGQb!6iEB1tcWHdY>i{A;R7zBHrZ8In>j<D at G+E|e(
z0m!)#!*hYIzEt^gF*C(9h!jl5YnNP2$#Z@~8A95Q(kB~3-eG<eRq(%W@~_*B?=(Lg
zK`a$htK?6rCrfim10;DWjL|`51IOy6D0CWKjaMGC9qyKcz6AaWLyIH8>U;&^Bx%5Z
z*@xHpaT84t?BN7-v%2^^^pH8kBlo>AIM!`z1b{7!#|_M8<(1%F$rxkn0Vwt-;Q;k?
zsP-Aqp}<)_D*o?%T)=>p!thyt2CvX+BGId|*%7F-wnJxmJt>B0I;T9?$$iKcthG%Y
z{5Ts%(PI$!`y&4&zJ3yjpg<#m$rZtW#*<7Ai_|ZN8r?n(+Iu3WF at 1q^>$KE14gD3(
z3LpgR95gr7G=Y`8Y#(M=mK|%})7=?#1u&^-O{!bHMd%A&v4v^hz<zgv_1h^&@f}Yo
z1;?Y+IT3><M;faD!om(SBP6TIEU;I+=K9tdvdFkzDWn~e>L2I4O$s|2Y|mMLejC`g
zYgYByp#w3gk#y{@U4kPU2oad@^eC|Ff4WAcS>xj<>=4{s&el7SKZ`#l(wwarNZExd
z+HPX<=TCM_a4nmefiu$n;UY(D%B0Z}L_1(2(iSRN3O_?t5_kwAj7nlYpJZu2^WJVK
z_D+~NW1)h at inj7I$2e^0rW2QcI+YylWvLKd{*P#|9v9Eg7af+BEiIwt+u!S8SY62H
z{%=8*o5~~fPxS#U#Y(ql<uqNyAOVNKYqWlKpT-|v{_b|&cz&rdI}c=%g7Qrh)7^5e
z`_57J)3&=!$^k$SP03`hxGI>X`Wfk;GA6+h2bz<#=P&oechd5ec=l$09{Y^~zTG-3
z!$yaWt7xbSvx1R;0Db>d-P#K}S4;<J;OZLm{l5xt9X-t1Uv$gU8;>X;cr8q^{i6=B
zS=z*mn^h0<efVpRcvp-ro_qh=fjXz$@(k(clsf;%XTC9v07&9i%V=cP@^*vDR;{TU
zJK9Et6rPRMpM~meH04r%72O9OQ&9!V5AEQx4diH#hcK7YmFQ#@;fpXu;-$xnC|t~y
z-`m=UOb@>}3eVYcv+P2VdT_n#U$G^&x!-GVpd;Hbs^`HA0V5wCd$Y-6y03L+vwjUc
z?s~-mMqLsGR#(TZe?>G9sRer6qqUU?ZS5{-)9_}(*{2bi5MgV7O?J=ptHe5*(d=}g
zQqWL+WZ7t6bxq#8fJPt2cu-=UCgq{ptuYThOzjN2zou7_;7q3DLXC=_*}hnI<FZ)N
z?yAcK{W&(P4oi1<sx++qU~rQWwcFrO{5eTTRiV<<AC8~pfowb1?|~3Y*uJ%;c|QE!
z*6)kykj{c2efS4|aK7VN_xz=Eq~~^`Sq#n=taJ!+tlj1*OMhP_`}wKrv_l8}I10D?
z`vqK<3d5nNTFm55<owjcX^8A^V8>jJZzg&-5IVyCl3S2_7K2znD%{T2f0!paOw=`V
zO<}u=f{R at l1f?4^Bt0-4hEbp*2KQS6hx9&<FIaQ?RJB8YL`w4=+ifCHv#b$EKS167
z2#B+;%?&BG7v!HdNJ*C)zL+bxodgmv$yjQ5Qx!eY&9rQ^Hl9}1LVZqmcP0f<X2VNs
zs0FJ}{0NyVv!D(6#G;c`Llj0p`#Q{UOtMyyF)5=gS>=d(5QSfsM7eH=Jt4gsA9Vc)
z-Q~?aks$tmiYGiUf*?!x%_wVwLOPFkj&<#!4>k7s?!Lm5*ZeNZUG`}SMn6cRrb)}c
zP?OpWM8<60wIAy8xe0f~2bdZhRu- at 33k|4)&9P%ZB%H=_i)~Z`R>PXm6Nc!sfTfMI
zhjeiu?n#0{x&I*3CcYgVZJgFEg1O7|#3m at d#e3F&M3)1*aWIZ<q8i{dwW5!um6mqn
zzgzZdb?u}JFvQekt?_`{6z|-OuzNv3Fs0?^w|x>D at I>kxS#*!c&_!^@O7G|J1)0z>
zD!~u=G~$(5kJR8t19v^~<tXLX$0Ct#pt}P=Nip(Ef^v0g3cAUdn~gtY4ZI9OD48R<
zs?S`1dNR_oT>j>B_b&7B^lwMCD4goS7Run(blFXT)yV4>$RY0zYL`nyJ9jr9=mq3}
zoikpW7{e7>FK at b@95P25jXUAr0(IwaMISQmmrFSgdj_w&D;XRzy)8caV>p1TG>G!z
zmjFzCZEx<gA0)Z2{XCaSgikQcYhVRGLOc$CE2AO&Plm=u<9o0-JFioben25$5^WrM
zk0^v6h>>U%Ab;x-yiy&LMmY0X=Bp0RS&o)}UsZse8`lfvU`fB=h-9VViMdAH>q3J~
z)nzyuijYv6^^i|p0-%UEx)7Zo)l$JB;4(S<=T(c!!e>!g`Wa!SOy-pLmQx;!vJ0Vq
z9oQ8PC;5YGDWFT3X5Do3J6L7<VRsd1etv2ZWrp7!Ob2;UWWU@<YP7ES?tBu$@7rN6
z0vY<iE2xpjGTes1><`Ju_a0>o6~`&UC$tXQZ3i{qjZR<J+*XZ)1+AIqufu9!VMB;|
zA`5yf9~8BGM-h4()2v-MvUZn59RdJ<vibTgMjGajvZ5UDsy)vdYNTMkhJ{~64L5}h
z at VAH{VdXT@*N=xao!v>WED!v#ocQJzwjPtZq$187%yS>6q_?PnXgA<p`Fq%pLPMR+
zzSBXj;|{+Cx{Fq5Rj7`NL7xPoIGotu!ks8hBs#AL3S>pzt>ecfHj>1eVWxC{3%wo7
zTPL93!pc0A;|HR-xBq1*-`MIzR4FC6vMb~%(~U5WD+{UGKPGw8(Y(sC{Fwb{=|S6v
zKqOXGlF1aNwXrMSzk@^NG7uTFlFR}z$;QRDUY)*L0M*VLGm6X)Qe8mI%ZqNsGC{vJ
z3stIgi}5xV#hsTZ12AN at 5BgAla|Z1#?Wnt{<7Dxv9Hu$CQmg86(w&Om&#Z*gKYx4q
z+t&J4T#v^lTq=7T0?i?78HyX$cILXsTuJ8O!OqQXb at h#)MHn76*!2 at hiRhEY^k)sZ
zj^1bsEVWQRC at cg~jRZv$oBXa~8ivM;(>c7O0>$NOPty$1BHOGpF6eiEsw^y1-v~h1
z4L_W3SQ_3uT4u6?gDni at X~~g$WAVSk*HUSFM=#qcd(@nq-Os+rybN0AbYWg<&yUNf
z{LBimH#2PQ?k8}-07f?T6fpH#0?cR0v36DY&(oGoV?{lzTvVNaN|a2Vs`lov78+Ln
z2!X64?zAp?mFME}CF0tD)d^_Bcxg7bx+UsINQiqGvG*rOU<3O`Tvw(UYAX1UE{>W3
z(XSyEbuwaG^P3EbJuCf0e=%l^@F$w};ULFMk!d(lG?^`C>0S5bLwNe&4SpwlDP7Uj
z(4Dr8{8^_4k at xSe=H!A+Z at v2q7=!Y at J9_hY*DMZIv9 at 3l{#L?&RHn%q6DF7OqDPzW
zrIRRA#Nh+1LsgNisO at b9Xx8lwp_ngP)SkLOMYU~ni^_=tQ)wmrF-K_B!yUv5DraL?
zp4maFN$&X<`>Gh*n-$o^E^nzr9>@s(#Wz!^Y$>DM!J;65ViJx<dGv7yBNHt_17yY!
zlR`))2%N7=vO=AIs at 30rre4DFG$x<2k1|)L{}z3UY(4o+OIq2 at s^dIpPRUFIL<rTy
zuchm4^a8E0H{-}MlFE{yUVqJNqAmK>PX#8mZW}@E#*!~epyw|&C9`Y$7Z}o{PF^by
zWA}(#U4U0JoB8yRA<WKTsX}xW{if{^a#~=&tIrwQNa)3X3RFw5K+AOY2nPbnB#=xP
zmOO(>x7G^bub(eRyb`B8oKwVyDTec$BBvmE;)zNrZQXxCQI7HRG(>{u5<}4KH6#u|
z8<Ao8mn4yzg+v${5#y_!ZU}XaxLC{jE}6Jj=p01S8$Q+F_~v~?ct!yVv2k$`<|E>Z
z=_-#@b*T`4?>K<HUnZ<V4J5O0bS^NM5*VIJlhJ2(7j58F@!B0-4tiK}Q6QQtq_|v%
z`)77|hM|-J;BL#ER_SpyvNKzB98IICJAf8mbmTVWDtZ64z_(A&-p?gNs~!LR0K3IZ
zn6i}etD;YMZD<qLs1de34xidCfls`h(3|~^#5)^*y1{5S>L;%<lqD)GFL<sC4){>*
z_M^c|DH-Vd9I>xF3B?pox>eQ_ck9|)tB0uXo=LCQ^!vsOS3;|B$rtA<s2;ceMX*jo
zlMpNG#)fZCSbir^x_rA4UUdlxK%fV?PZih~5 at iwHoUf@$iBueKDg_{mwS&Hel34K{
zutVE_XvuH=vcLbZkH%{{ChZ$+9xok5`3 at 4A5iZNx_fQqiqsiAW7L_U!i{daCQ1|*y
zs6%55FfEuT2n?!xmu!YjMfx%J%DI*mx}t%J{<+&COS!&CBW;HQ+Fh1XV&y-70xYW&
z&<ImwYy;Eu6oN+Rq^2=7dMR|uz?wW1<mIk^E%Kwaq#K<lB1Lu1iFy4|Qss74mEd?A
zweD%xGo?+RD~8ovwbp0Y(}gAF$g<)nSWax=W_EJH*CyUh!0QcVhp^SDM+yL*!e`~L
zHv*6}X8^|7AoF}Y?W(d`{f<%4D)`P7+?3nA_-kBqdUH3+rhWjLM7VYJEWc(fL2%4}
z^i(zXgyN5|nq(1%66)s^5V+M4oIKma>L@(rNoGj})-HkP at 9Wh9&JEzfjScO8CLuk^
z2eW)5NPLP++Do&tY%^gY((y`^y3I|Wbw0 at vyMGA&8K(qY4hD~~rsa{-wbZHYI^>#C
zHj1=QZp1Z=EPBoR=QoOGcKhIcJ-2*++V+83A{TL at 4WXnn^V;DdN1Ss9+3uyiHY9=E
zey#^IM`Cyv32><0f_?}}KEvD%sgAP at ow4l!&VJSIc@!i6_O1->l6|;rccEm8-ol~(
zbu4z-2j|jwHb at lTu)0AMj`F)FVT5u+ at WO!2z^;6mp at n(pEs&Xsz;lZmZpx#71%;^=
zIBoPsH3 at u1i-#_-byS*qZHpSrWT||>4r|X5mTho0RYXoAKc}j;vOWriKHprm%0#@c
z57_p5d!jsN7tjcZKO-*mU1BUJ8-?4a;|poyBL^82sWP3-i*SruzOy33=ZaVJs~Kdf
zUgXWYpU;k)_k&3O5iI;e8WH$^amv)$9p3b#VG_QHdLMC~w6m)gyv<GlQU1bqtqIvr
z9cZ at 1m?q29yGI?Vn*Y}-;8nIk#cC9rP!8uc7gPW!j`xOqZ8FNRtw<2Ts6)4=HSfIE
zvA(kP-Gn-MIy6A&aG0c=8%A4!G7KhqJ)2TjD&3-4a042-*v3d^ezZG(I8X^;S`3HI
zSHWt-H01J)cshHME&!}R*Pe~|Lx=t{!6S==vUb()v}7sPx1LCQL|&)fFJc==_tvRc
z`e2c)v)|Dfud^3nV%-Zf;VK_}fxG^qq7x^XhHi~gK!e$kxr<aq-t_n>S4u`aRBqC#
zW5o1HBEF(9NekP>TEx76tBAI$<9KFl{`=@iNnbmvNI8IJO(tmIwwe}D=S9UB>H><F
zg(JmYzU{CpYyWx>MUb%DDq<f7FaH&KXs5Ny6Inj{i0EumSN+kLh9v#1P7AEJq%#x}
z8527A8{SP}xtV=_y~N1 at zD<GIv1uCqcGxjc3P4<qQTVX=iv4hZ;dj+SwPD2tVX|2&
znBd%$@&5<H(G!J*j(`46Q-wi-dNf0HPPAsTNR3`p1V#3+i<MW|Tck*{6a3j3hu_OX
zJFAr)Wh7y5S!vU(_}HrDgbT01MMjoek)?}o6;a~Whu626xFX!gKz*c^hWJv|+cIqt
zc3;?(U8(>YRR)89N9vf^wJK+KP1n8?3BsBojGJD<--5{Mb7gZ<NOu8Hr<O95{e04j
zyn+<P+bQir36Gkq6CiGLb*R|8j>4`Cn#LLiqyLVyyk^)#I6hk?1e%19P8L_%f at a38
zM+YVJ$OepcNJAs{w}XXC;{-c9w2u_Agb}&RSOzz35bs`pnGBH8bMs>}(A(me=#l+Z
z1QcYGVe4ssHqQ}iPWK(x)|V;pPFNKT8(l80{FG}3oWR^U-C~wP4;H%$Rp>Gy1{Z3G
z`Zef+%u6Q&1VEu%>aPFeq`#UUf${Y(1j<K2^@x((wGzPk#$1JJbSetP)ifWhb?g1Y
zA?Nv=1_OhCDmkO@@0HDrbBRVHx}X&S3_{ApB7OT*bXJZ;41cuywDhA!8Mg<Z%s*`%
zba}99vglOa4Vto_m#MGK9=8bn+%hVo%&i=bV4J=dHMBp`+ncVJ99&BV>4fHYwqfoO
zz{C6;J>tj>#xb%DGddG|xdFK92_5P3-PF($u5yikzs(-%_Ea>d1e~*5Yv+4F>)Z>N
zbE`GXhOSV++m at gV<MG+GQ}C|&Ji#dOjsgM)TuT_Ux%%YVV~@bBba7FxjEvZIZ{pxj
zTpRqs6us0>Maa$nJ)9)las;)yWnJRwU%pN;l;1_qod-yCiMcB#j_X8e$&iiUb9mO#
z{}K0p#QUz>s~?v8`CSk8S<i}wOz%s<x?6wrHW?Jas~BOn6-LD(I)|l-_J!X1m1}T{
zsj&l+ht+)C8IW7kCED16%xu+9ZWfKA6EYQnQ{<z>GXRjRxa*@FJl_NsVHVoW0*=%{
z6uXMsEt<h9OVKeb1IRRpK;XVOB*G>};dtkN(-8{{b}QZQRCwJmzwL!<ncq4=EL@$@
zV4`qx!pk5crHX-oW at ivhg}Y=AP=l8Z;IaJ$V|K>lKfVri{kdr4@(Yl>gL#3pt?f7^
z;k(omVi$&X^MNV$ZtcA{I8F_-4rc>rxGyHEi1r($ykQAavEv~nD=^XdZ|sU3thP^o
zksgp1!=V;0{#X+3NM`-hCWysM2}dOH6bGNGPlA%VP$D>~8`*q1PdW^M{SS0=75Zoj
z=v&$bYm2h;N09LVZKOnc`0^nxh~a=x5zN<$pM-3scneP1sg+QP4Ehn at Q&Zb|2qct&
zfUx57Uy2?N_(x4I+;@+$_*#X*s$@xjn`Emdokj-ueq0D2$7Lko#ZoF{pkwB3XXRN;
zaCOT}PBY%MNEtBdBb}#grzNS1cb{wW`i>=I at ucHQD*Z_)$~Ae>Rot5ae>4#rlDtU)
zOe}#0_4LR+1nOA+yj8&&MI)e~3q|`Rx&Y~lR4h}lOg4nrop5nGbDdK&+G!_$E14z(
z0{zLd;!pER>X%lymgpeMRsK!QbXDAQTaX)>qrdI6v}tJ>aeX{PlzUutl76l5=uecz
z0JNez$Cx^Y;7EFCQ%TqX7G$p!;15tf<}w2yk_OT7u!sk?mkbWVNtAZ?WJl at vow_S>
z!*WiKZ_RY>4F?zUM;jof=MbWQoIp|@6>}TUZivfzk2%{X)J<2KN<7(%1k+%*noO%3
z1)u$}IRx*tqgMEbk8l=XpUvG6+ARApLVg3i0<Ur`xs-+Q$0W9ndr8i#W((B|!iIBI
z`7!bsEuy<7wk2SwLpO70TohxlN!EO*=o3ACHtpL%fAf=eU%SZQ9VgX)taxpN(Omq7
zaDwY~387&}>wZ-&wju9UTQ*|yvIS(SN_B&aQ#eQiiTC40e#LLc8+eE~9YfPc0pM-@
zV#7!sh3g&blK823PSK=qsJKDu&+17ONDHfsN>hjA5)~;2UeM}<bX#<Q1jJ<ESRT9^
z9ei>U=Ho^;FRlXdZ*`r2_d1R3?}-3jlEiV}dbr(ebeOO4zNHJU1sSD_4a}CUl;xzV
z3cO1{*x9yZVG-kD2|=#cfpWZT`?keFo9L%$MJlRxmn)y`?-vy40L8`GrfPnP;e;~5
zguNlqpJzw%P+<hfNB3I at flZcJKp<*cY{7*NN8W_InkLhFtJNTXW9oM&{%h}FP%Tv*
zHA$Oj_)3)}3nHxI!xld<S2anm515zoMWf2g725q`!}(Vp3}d at U6Pb`dQIdhhcO~{r
zGZbxZ5=vIJ{WyES40#h275ZD<5ivn94-s?=={$}OItqMGXj7dM at _zl_D8p)~+O7%C
zELqng^|~}!z$=M=?fQC}=g`E3T9F>+ZM$`?Km~|o|Eu92^8M(vGqj;NsQtCrQK^JW
zv!Zx(X75Z_J({{o<rTRD{PLDsX(SblBoEwk73ARNv(gysADZj9i^!=IX0R(Na8U*8
z{r)_3+c)#Ilb=*J-^1n>8gM3xZ`N`bZ0<n_eGxpzLuGk?9~&zTe-Fr{iphyFZ0B}J
z+uGA!0Sx{IM~n?Zlsls&%5Il`FR?n0TYqDrg_a2A4RN{tN@{QLgsMgS73Tiul|ds`
z!&!|$XdWiM`S4kY<3An$`y-f+Zw7^ZyW`0359>;G`NNkD6Nytl0zlC<$x_AAcYFUP
z)S6N#;n%Exg>So^^11Y;GkR!4Z^|XWiVJDI#2&>q97stf`LI8~<sQ*f3mP;Y>qnO~
z(iBm=-5+Msu2KzyDeKR645AL3UI-)Y<FeTXIoNz%a)E5 at 0BIn&zcv#AyhYda9<w4`
z>Zo8D2l+aivze`72kq4~dce at UUdwRq$JtK4IiHMwV?m4C%f%@?Si*zh6aj@;5mezK
z#JQ1pYR!!t2BJY?iM2sKz*@CuSvx9xa8B%Jc2G(y-*h8W_&JsYEpVz{Jj=HhtB5Zz
z_95gt2$d*wa;50cqalaK>AQ<cpUWvaMR$R1X=JHi5f*Y2f1#Etu<ETdz1iF-44+LF
z>}*AU<DqGPl5CZ{H?n;l&Ru!AUAQo<N((V5J0Zu@>c(@lpipC{OkUh5Pi_`2W at a!8
zKg*lIS~4umKiu*>ID*p98{kuH9#V8#f&>xFpBJ#+s&!^hf{>B3rb~>IWsf&LH5=7a
z;!jTK^2aCi6h1AM9JPV_UyYCyrU*M!j;b?%ARk1RLyy^%e10kRu`1eiAqMh#a}!Y|
zfwo5#FCkjT%N6em)kGlRpW5F^gS3Pf3r-)~U(wM{{bgNLzO<Y|d|{rr6d5Pdgzgrd
zbv^8+4u5m at Oe>;aEGB$OPPtQ+^lG`=@0@@how^*>H%Nc9m0=0lI`AY6LPcH?0bCS+
z^6!5h(^d)j++(FPFM0O3JYeZGYKZ;jq&e;flyh_(GnGv+?9!oi*rUNRk<6i3086Y&
z2E6OkdHqD1<pOoLAQ6HRE>h#XhKRS=RB&lfGA^9nO~>ba<kZDwM?fErJo-~7K_*F&
z-Rjj>q&9HOD{CY at 9QI^bn*YkE0H`T{P|T3pUZIZf)W at +o3wB>riKp`?UteI)<c>C2
zoOLO~71#)U#i{k^@Bk8<Sw)QCg5LicsJ`hMoQXEuBGj`9s<!2>W$K|>D=jBR=W<L{
zHCg2?_oHJ+kYsT#KW(@B`HejlS7Dv4jL%r$)&<Y?^3N(P{4TLsqVr3urDcGB>s0pr
z%o*%><q_JN2izda`ZK3zrOZb<Um9gXPMCUL$5pU)v^H48a$~gwf#%2ig5jfzZlQFG
z+9UyeP}DGq<uef~h;NwvM!TJzzRmtziuA|;0sahy>oUXyZDWnV35%bF^08>y&IXah
zwn$^nTegi_K*WJr8qCUrB+R>i>5{-S1K8M2LXO$9LR+{^HG{3w+xFZXZ^jQ_hXadC
zt!S2(iUxQ<89Q7z&i?p*L#2mt{|o6##M<6?CRF#r?_U8fg-=xFOr-4&Yr{4&-!Q`I
zzW&q<2y6SUa0m}JHX!Pbb#ekj at HL<yYD&!1m!ckS)8t|sN5ZRtC225!5|-^NDp)iu
zA0w|m*(upYDOALH at Pt`|slXiZ26B~t%(F4~!PpG~vW-^(INUf((sXrX(+ueGx=Gh|
zs5uP9BF)}m_DX=Z;{v~cg~ELgJtC4Pf5<x`=dFf$80Yx?v+SF?!YguLJkH5uB$=E(
zrM`&jU=CdQ<3d`a3BzoE^+7jHBYpB(t~WWP^y{F_PJ^FmQ&O8rDC+!r&#>HVZiYn`
z4|a|vek_u9^fZ#8p))|-W;NP`(r<_W2SE70s^3b4$o>&hu_4ew_^~XNI~O-b7#=QT
zw~7xX-n9m~rIz;Rdr<3o4A;RR?Mk7%nh3%(hm(P6rv=FsHfP?2-itYBe|_b*H>EjE
z!Z{;aO9aQM)l?#7lMb92U_9*Z!*?r2scZ`-zuW#DpllhRVGCk}9jSX0t>XeSO{AeN
z&47IPlq(E`83~ge;Uona7)ewep-wgZ2Fr7@(B at K^Uu0Zo2kGpb>iMR@>9YOy&pXha
zErhW4*m_(yP=Pay|2GeDfB6bzwcS*8lbAyJC$~qO93xqKY$ihlP=p!Xa+8;HJMVi`
zQ=qB(@R`k9*)`}tp{97Ia>wx$%GEwlyTCA at jl&-6w>LW^z8a_ at JKs$Ua)=AjM;0Km
z$y%sYeII at ApcNA|3{~Su`8{Tj15{_-c=_~)B^ZU`Hi~TWeMhr*e>hq9!Ryq?DlU~J
zH4>0}xXs!wdC?$EIa$>h+HTc0#|doU_(1(JH*$Spq}U6q_m>d_A*M_(xjvj90xtM~
zg%CJW^lT7}y>o~oUk=1w90Q!Z8j?INZr+dWVzJHdBRbHP=_Bc8J6*!K5XrT;$T$l_
z<41xl1_Dj_+GE&we`qAtrgheBMpn4bMvKfji?TLxA4h6*6$DNLT4WJWz0+^+g4Dfj
z<Jej>W^N&P(L1cx45-T+r}vFSY9tw-=RWx=;Nf(OFqI|QaYOHyY61MK7&7M$ttta)
z^)I=0yYD+|yWk0CA-vd2ht+}A;`W<~LV?De{Ypl46 at pxDe_$T<vFui?TOc#jR(4Ft
zK=LVHA9ypt6%E=A4GO)Py-$`UJ^+;9qG;@F<o?;qe51A!XgT=QZUH=Gsd33V$A<}d
zIp;AIjX$NtdQ_i^>ygMiPr9aGT$zb!Lfd$}yH_s1&ij{SeS!DbmMNg`opHUdb&s{d
z+n0a$k9}A5f1o#Jlez0fSB#G+f9{1ZkCph=q+hFLgPnu6sTaP4^M#g at 8QT|DNRQC)
z1_=$|W_wWD6-suB1Hqdra}~RPqciyeUW$*(lPu-8&OT{CSw)<f^qF at ZjP9t>;;)~R
zBkg61P~FKVbrhy<JCJFZwO_Yo at TXuh*+F>fdM?L)f51qJ6xwC%xW8scHeLnM?Mi_{
z$@S;^J<jNKsR{icweE`VzC4;JuH6{sP0`<2CK#zTxO)9~PcX`rj{j%)(<OwjKwGn>
zPOA))u~88<X2{iY$D1?}0ya?~arZ#wNlZt^wg2f2brDN-aZ#8xe44|Kpn4%j$!JHC
zgz!L=fAw=7QX4WI)@CVsgHy6NQ0o>ZgeF~Dex!jzQlYFfEOmI$nx@=Ra*DqlFg08C
zp^Ch`$@XSINLdTKc754&kq#SfEC!jS3g|`MK-CO80DuyYUm-Q#;@Fe#dt90_e%!yK
zKo!&203%-qii?K9qE3VpdgH}&MxNXk@?hH*e<2e0fI_PX*3oGy7A7jvV4w8FAAhQK
z0G-*_ at -J{NLS1TzhUYOZ1r>34znNUjYipmZl+T?mOH;|pN5$Gq%P1t~p#Uhw>E_sA
z<_}AW>Of`Oe3e at frvzNV_Mr0~D2ssxakNzu!dVUc|4)@eg^Yp_|9x8L9L*nOPy<J-
ze--Fab{{ww9<sTMJz}wrmv4Q;F(tC<lY}L$cr<|sxTR6hQz|3P+0UbhLmPX1MzPT7
ztpY<N3Z!&$dKYWKD-ccYleFG#^+Fk%-dv4s<^43WRehBLmA<c^|M<)N6!-K^T!RGS
z?#M(S#k;<x=$P)GLH86-Y424V${8dif17l1_&3rWxr#)5s$FNm8j6rw*QmnGzrkFF
z(8KS|y>j<Mwqe-+^2-Vjox&_e9CX7K0ggV?&aQ~hnUzwrFmR)@U<IT%9+-tij!K-f
z+IutpXFyaLsj?Y^t~hHNaGh>3^hJThGbLpuGHYqq=T7f5*uQ8}v{m;RdEq^Te_Yz4
z0omXWs>P5ObD5WG97Gfo(j-Gty2|tHALSXqDR0w94NIPdW8(D`b&(KY;sjr03EKib
z6spDETp$S7l(Nlx)RJWR!1TxRZ3zqiAqMQ!bbf8yEnovsRhNQA%c(}Mop%0TPhxpE
zOG4<ux<<Mck!sn<qkLTedi%u)f4*)H3PB^#nSGc21!)i6#?pR_NtE8eB56#=!Sd{f
z6o(lYi^+39hv0d_<BB<!2tB%<H=%7qQ^%JzegaYc!M`jdJH5qoRL7Tnk69Z*%pZJy
zYnjLs$>EjuN@;WY3VVG(YbP(`zA!m>r8qGk>6!rg$rU~YRvPRiR`PirfAbg6XhlBc
zVMRGAkco=>;f8MY!%$-Hj?ZMt4#@R!|B2<Ln&W<Zz40Ya#fiMPtB_0g$Mj)r at FR5$
z+P$|@9NtU^l_?S)Z8 at IrAVqsW*XYLIOSXBDT~48sH at 67+Gi$PqH=xE}<`0p_)PL>n
z9-$M(mej#dmE>YgM|64sfA_IHggJU;5}IB2I|qlhr*O~!a)Q$GcYa+3Sruu)MRTMD
ziBIdkaC7tF!0t}2kubd6ofWRg>IAnqS>*tl*g1I)q2?||Bmw3^(iy}FhMvB99Wu({
z?PUU)pwe_!ZXB)kgJbTQh7-dy%`L8y$nZ2aU7jT+FmL+}*1twie+5fEvK-`s53)AV
zOc|af;gexf;3>(Mx7$+Oe$z{aeADs^FjiG%9?@|7pL(f^14F93g8tq-GNk02R7=6V
zDkTmh7P^E0y4GKLY7 at V^)9%Po+lC%yQM)(~_WF9rrVAVj9{8K9CDR_(Tf`-gu>1R7
z1qC-Xxka)C%;a0Ke>va*=18M!n|0g7p0k3gahF1MnJGrCGHoQhRMjAr5I5)LV*u#E
zy(<<GAe8PH-unkv$jEQ`!3*`C|J%X{Oz_a__K>5+z^F2Jo|?=yP#;ah9OO56$RnGu
z_YpBWFIQwIK3gW7?)}Cb9|Zk(YdW;*Em^_|h<d?G;C$pWf0-ypYaAs^{EcUi(Z2X{
z=83nS;d at GQEr*bY-fuvXL-OR}uL?&WMi+Qwe8IxlJ^i8IA2>v`fma`hD2G6_0McBB
z^6^|>!kJq{OKrGiYiUJ#vrN>IFf6rRY5cfwA3~)UnGl3Q<V-J!b1qNwK~!%&Pvmx;
zxo>lXld~XYf3Bz^8P%@sZDKEOLr{VzgA2}xY`Ld>VQkoR3LV3YahD1|oPdjeAVnM;
zmj^VMYzLu%CJMXSH4FHPlD>=nq2W1LVxLm(<#*QZ47}j|%*`zRsJ2E)=SBqBFwp86
z at Fjwxbaadh@JD<U00EZgg+j at d61w#MmhONyJDHq%f0`CO62<TMcTIR$S)JY{TnQF=
zc7r<o_ at W2~zu38r at k6ouyA9t0o(JW;KW_}atGAGNgcI6iZdcYdA#~U at 26`O6tq#lC
zE{<kYo85Vp`>_WTBRs7UjbE-{D{h>tTsW%w5yolCi{wq<clpf;ZVF|0IsCZYx;Mua
zX)x@*e@%cwL4Oj)hVYH!EV-x2ljZ<3?97T6F{Xpp%h`uzu%`DDuKs`dTt`b|lEzNz
z;)%;l6KlK`A<xR+h$Twg<k>y*p8;^^Qz>s?qg2)!91s^#4la1!;?GnBqU9hdZgtr0
z at ZAp>nK*q5=G#X__Ii48eOvUZ6WG1!V5r|>e{NdFs5u3F0pD&FESt2uo<I3lyG}JS
z&`-NrxJ%?u3WY?csNt1!lyppy^P3f{DOPw}g02f9%rYdd(m>mdvdEFCfKHxEKZS_!
z1Ya#{u}{7G5c1~`y9B+dDAN-T4HPq4?lDF at 1;vbG|6vlwG>_O%t~Ar5l*9ohwwpUh
zfB#-y2CE-A at 1#0IRh92L3?O|DFUYO<Dm>0Jnu)iTAX5D&nkl^XwNbD)>{QCOK~EGO
zk|oT;xETbPZw2!~%a4&kRsbEiN!KVQUZLWJcnyIep`0LEpA7B_xH*<{$%+FYvMqAv
z&AaMndhd96mqxiwHXVJuE|l6ztqAv7f3R at nzOD>SyIVe0HmLpuGCqVWsv3h2-D9A*
z3g!b{`iYXyC7{m($n5D^)}k<?xsP6BC6lPvxTr6q&E<hFC-*33xCe_7>;Q5yNy08R
zF>x at iFZw`Nn_JySs|i05sME%0MifM4IEV!{Zfn|Oxx>=;pE(px%kgRNHK!pxe;aI)
zQWfl9ujo8Xb;4CpBOK+BP(GTcU-=k8pnk+d+YCI+!39*|V&lOUWVU6=Rgu7WH+#FA
zoL;RaSWGMRFqW?20FYDjWMz_2*ZA~*^>ViYD}UShVPP;0A}61rUd7p`;ln03dqA{<
z<fl2#TL#xgu>R-uLSGH3nVDIZf0+31q$NecG+1(ueJAJa40gx+Kmq2Q2zN*P%6OIF
zIaN>n8R_*Be at F*|(-<ZMS`Ll>hS2RxWSc)NC0z|&t#pQy^`4D`!P0Tt>MiPm4AR?0
zf-L{s5HGabViXbxK~1j)&_`2&c$a|aMCAhU+R^xs4|otuph~9uuU3z;e=SDf@)=al
zbrr+e+U`g3A5_mCfLGI_n(ANxdFa-xW#9ij%83N6G1 at yJcXljmz(NTh0P9r%v0Kj$
z(sR|ag4VeJm$k1IATS5$Q11vI9V$lg%}Z^O*Vt}ds<%@+G7X(y44L;dL*{@t(Ref*
z4XA|J4(J7ruEQ{-zv6CCe*&P{I8eP>rd2<sPS~iWOmbCp74ocFHbG*&+#S0}isaWr
zf4BNpvkt6~VJ|CbtyY4S-wq_&$YEx^Ewu}?8<&Vl0dOGs(?)CJ3b>QmD>(nXndZu|
zmoNKhCtcT>9{cAdo<~;c at PbPAVPe}DD&3x0R+XlOzY*BQD!`S#e*}bB^bcY%mCT1w
z(IWZ9iaYpUDM1Xzd5htsa2%Eq7LujylLdU at K1rf#@T&HGWd<e8^h3p_Wp1ivcngK6
zsQFG*tYI-;VREZpBb12bQ~Qk=<H@^l8ve{4z217u^7B!g5tu=1siKPF5C=5$=*0}~
z`7GvRfzKrAEe0>4e>0jg*NTn)dK@{$aCfBpVtBa>?5B{~d;{~m1Q}7F5SvaqNaw7w
zb#LWX*6vzpsN?8t`cwz7^-YtjtLmdR at b;MKHG&qB1&Ip%Paz;A&REx<gNQ96&v_Yj
zpPj|t!j at Z~D at Q}4cyTaP_s8cZ39kO?ZV at yj4f`l)45k at te|-5h(ThQE&$RnDGsPQQ
zeddh9yS*kr<e!aSz)4^MzE^ud=m8=eg9BVWH*dg-Ypz3H$5tZXZm=H6V7rxMPe&I7
zVBKoLr!S2i)z$BZ;-S8ctzMK)|9y`L6Iy0OVSbun_U8_=eKn8n-b<$$^<9wVO-In}
zn{vZOB*Lpxf3FZM^rts#2N7$IX9aRhw*YkoO9a&t#d=(@Wo@#4Yu)Hc50vCY!{7A=
z8C>`?{r3R<Ugpw>aw##r7|^CO8E6-1;<0>|CxAE at qeI5#qTQ13xX0DA(P26c at 5*KC
zzO8P_&U0x at MTE<kb$0g!3}OMKAC1QS#$*@TpWt$Lf9DFc#A+n&T(iC+AZbX8sHw}8
z at mxS?4toKNqP}G2_<_}F_48gga;p9eUn`g~aj~3NPC<u~%c2N70=uoz4+>r<Ic`;G
z0>^lr`NdK+c5YLzOhv`g*$QPZ2k#btXOjtK{K!Yw9Z^}z7AuuXTbFx$TmX#XSfNOQ
zDm&t{f1~z^o)EyMJ_B3(>qZJeyTZA6MFE89FN>^njNnr0qT1Fej%#RioLUL~fx%Xo
zu9P73 at fa3H--h;%qfII1it64;4vDGB5(&`2ohqZ+3O|ULgM=rLKeIu7b<KWSnmi#P
zm+`Pi-5d-~>}HrIW+r&kcg{j!&Sf}5_H3(df7=L at d&W0{n7YyLsjS7C at u`{=o=3 at t
zX}C%=V!u+?s(+Z$eO?8RwThk<M1b6_aD01sS7);wo*QiL at HZ5M%4a2)Z3$>em&%eZ
z|J>nLL`K at _fmikYnJJ0`u{CK8!Qod#mhu|N<HtxTn619q@{ay%gZ7>y0tQ4oo6 at Yw
ze}g<hZtM6Yq4{2y?jxI}D=2v-VZXoOtWTvzCC1>Sg%CG|T;|~TY2j0U<B8~{W{$j-
z;Gx-38QV7VntV%w(AB~^N>PZSG1mQpxjibn9=A2D#@%83xFY%9K##5a{at!q^&;r+
zJ7{p+el`@upKTPdc>|3Q?)wD8D(w6&f4E^vJ71(Wt`L1M<XfRea_|u`Mq=G2=kHcn
z3A=1iaW)-58JrWQLx$q`FuPjQlbV7zoyV#4!|Reo7_J^eT@(@MAB;)>O5_p5J_`OM
z+%Ja2dLkdV<dgbg!$7DCwCffLF7?xD1k_ZKg}<YEvNxxY)j~_&p?Vpo;YAL9e>t4-
z+J3rDmZDPjwKEfLoS8D%n}SG|Y2MEkw7cv*oZ=3JpKXRttw1Q+bah*SQn2OP{dTER
zoUCLBq5e7feleksfADzlL!<C at Q%BP!D6ed*;fqQ<HT+OkP}d5<cB5T}XgimK at l0{7
zxD+fiP=VO0(E4Woywgw?koUebfBH-3TK(9zY^&-}I|QEv*4eHRY>Um#J}G8oNmU<6
zn`il-P?aP^i44EyteGL1yXvQ<?aaRcf~6O|@zx{ma<dZyC1^w)h*)Ig$uCK_NyYo$
znlfd=kHPk?uP|idc@}O9XhdoHPZZ^{@{WxiaA>?SD#cH_OJx6LE}G0Af7=FG(76kq
zQ}p7bTEYq_8bBA*bx?ZE%atJACRMZP&1{J(NQ at hmhofQ!8I^Dv at BGQmH~>{Y^YfZ@
z2>@fqa>y-|;eYl^Un;j+r}sCmZs%m>RAF%nE5)`04m+mU(2ymcXocAse at GCztM)uz
zQhPV06et+*`U9a$B#+v#f6DPO4Yqoi4i%1qG*|#Yg2&^PtdDr3>eMIAJPR-)|BhF<
zUi6Jbj>gRO`yjW30{mB-kT at 5J*C|yniqjC_G-uwXgzBPb#szk55P3A*V#xo7lr^#f
zJt84o8|wHTE_gFTS%wzC%48dOONYAb`S%ZtY#RbB>VH*VCiN?ze`nq7jjE<v$St3&
z7V&K^+Zt_LX&nLvEjHMhTrSBF<*};uwoPL_{a<1 at q0Dsh9lRXc-SSL)3VZ8h;%Y6G
zQl^M9h*BK(a`Gm=Ik1O-DZ(m}qA~wPRAIZ76Y!fnM3ImHB^bnHiL`xp5lZb8?K_C-
z%IFnqZfTA}B~@QQf7E$nN;b-`o8ZR&18-88v#6wpUcd<j7}LcrCCXeoHF~akgXveF
zp?v1;W6_)yMGS?mZ75L9ddW<#ClG>x^+Vx9YkbfZ(DzGsqooAXK`Gy+Il>{!`PN_0
za!cRh;c_ah@#HfC&s}0zUdF)t<Zd}JAY;G#1V$fA1u^u>e?p9%H~~qW_0E>wU43s)
zxr9_$e)d|iF2$owWmlAIpxanB79x+vKu*yAz(^&_h8;<1SkZ>l)RLNBl6b$hWda=-
zHmS{8yj5|=ns}JA^B%)d)LmyaT{ws%<O6VxEg01^MEC7-2$xAiMLeA)9^h^ErtBo1
z0H at lq=Rso>f0>t8;vlX~q0&+xK~fFrTEFi~vnFwRWYsZz(FGc#TAEE+dM%SOLAAi1
za>2~}odRpsg;!{vS^lKc>lku87aOUwFhXZ1OzRvrmN){=nP3O%pXT}~yL4nl07gWC
zPJGnc;bSOWT(S!^7=Mhx#A<ZQdZ|uQ!9PHRL6MHTf5t+gRve<zVXGZs<1CP$L7dIu
zM}ew?_N;)01yL%XDfG(y^z_H<ISJ4|<HCtAcj5|i;gjwoVoQ8aEA<guF58lEuI!(b
z))pRW`#<zwm%2kz9aDOMvn9wlTLPehCBP{?u7M~rl?ThFE_i~1>FSQ>T}U3opb<Qw
zgE-bme{M;^)LzD!a5z8CYXw+W5Y5qwIlqBtbH>?_g<V=2DA!IYuv~2NsCH>VfHe{Q
zn1a*g-(4z2Y=t2+t02onXB)URSL9Xt9*Z7M_xKooS)*Pb?9G(h>ZHo158EFp)<a>F
z=Ez4w7*-XUST8S-THhKM=~oq!t@*3JX#?v&f6wO#Miv7UB+Zu<&+G}B<UK&e26V<6
zgsJ;4L|nGJ50RWEscTBu(w)JZl(iCzK?$e4{iP#OuzCE3cnCu%vRbNz^DMrOEVo39
zJXwmEjsPyOz|~k%c}$Ag9m+7<Mgl2d{%pV1!DTO{pV#nYQOCsWBjpQs8Cwwz3 at gWv
ze at h5lpF`5W#Y at i-l#RS}pfrmYL}*r0DbSPowC%+Beqiqj_7j0f7VnUzDFQ^0q%;`%
z%UV5gbE(sRlrp5{J#IeGoVMlvCKa7>lL<l_o5BGuwV~}p|6u411z^ij#77M`es+nY
z2ZOgMW<S)f?tk`47AoP+i%n;&FRsSme=mR%=<{5Iv*TSP8}XgNhyTBT^Muq^oPk2-
zl}gpYju^0Y0%-4aC4Ecn&A^sT2WyGeGl&@R?<X9r>*ZOaUqcqCvE0ODgVDVu`N^?5
z)lSU*&jih9dt5)*Wq{o at QvXcC&}ak4^%jirI#Ubt*H4Lr_1`A5>P?<zWmqMYfA1v*
z_;CmEK&Mf+i6=W;5b&AqO<^td9%(U|KB3(K%VJxx3cVNvBd6^*%%-sJR{Q&C%Ck+5
zTqT6C97((j)Tb>HN#THUo3H9 at JLYT_BoQ}nhIun=%s^t!)xKRRKcMQL at -2c@Uf(VZ
zrtULLMKLy`20~B;B=!xDeq5zie^Y1TG<L6A6&N=B{ZzM!8^^MioY$&2t|*J6w+{lz
ztr`{1<4(2X=|h8vI!TQ>O at YO)R;;{22K$pCa=-CLqCF(mUSqZpjG95?3D0#7B*m>K
zDvX|&V-bv_%>`YSyBVE8$?(kKY^!Uq;u0~}5h>OCwHch=&*Ll`s!$*AfBO0pmyAwb
z#6Vl7{k)wAP*8bog4I*=#sO>u*6_$F-+AZzc)rUUl@}(w%Xn`bh3sb7$&-*|J9h0L
zpZ!ufHVlbZ at pwcfE_iuV;taSfknt~!P1U;m6`%8gBp5uY+?3HY^T>9Z)^d+Q(jap~
z*4z&5N*vzaVCjUq7aRpafB0EE&-(P~-a%=i<S;{%p0|WOst0Q|2&lex!FDHRsHWyn
zwGw4+>G*FQjC*(hn0q7e8g!2&CR3aC<s`N#?1-ZdJHpp!$~g({TUQw`@DPKBljH`J
zZCqJ_^a<+=v8tIW^XAL8rqB^v`k!TaH&59>&-9{i*@O-|`*S0 at f9a<Ai$eaFLN=0p
zm#L7Q?JA<H2dFG!vGY?;ckv)nm0+P5{F7;S2`9OrgpE%KFES!dz=){Q%q+Dcb%oFy
zLyZazqD|rni3+>7)5m2EF;JsP#iFlp3<3V^5K_p0;(NsqDg^gLs-0_u^B-AW_Bu&s
z@)dDgH5`V4sGwz=f3oP(&i?6|6R8bvGXA%l7~hUU33q7|jO!b7Y!NRFF!{z8;aagT
zaBHesPXE|^_E=);rRk3 at v0|?->$?4riH=lsAGV1}_&(%~Fe08egZICIeH44_3OGAD
zd`zVs?BE-}xqFG0!$F7RriTfSL8XIM8`vj at AuFR}q at jwze_N>s$MfaPM@@%&0Bdij
z#-FhTV9bg(-Fb4Ic%1o&at<45s@%?=D`0l6Qc!T%{G`_|nvivnhSzqm-Iu&0H@&{!
zzRgf#b44pE{;wc=lPQL*ur%%DW*mNi|K{dDjBA7cF!r#eVLv-)Bbx64v!N2{H`1!T
z at 3WQ=D<>9Oe>9={32QuYqgm618>+h|oA>dbqARf;-X!vOEXd+2>!(!zR4|#vR!bGv
z7%R;ni<F!03>Tc4d$&SVd>SV0`nQX`?V`>o`6+nLVy)Y2;$M%)gW#nf+qjN9;wmH9
zeTqVW3rn^}8k#q<`OmU at N+K};dbcb at DdP|s?iZ4Qe>{Ulu!rMzLgGEeO(vom at 9tA>
zl)l$)*bIv)0UD~C-+}#vcZp9sVfgU}2<4{!FR&Fndu)1GZnC;s7i!#}x{<T4#^yO-
zW7^b|jUiHA%KG)MAveEKdq8B9wyR^6D2RvN+jV?ro~Fx@@{H#sI{tlb)Vrz<e{PJH
zzto0he}<>g(nhg1FaD40Z}BV_ at kvW4*LV19Y at oc~p3G{w8|Hy?9#Rwyx_UU|DED~j
zeePJyy_bR}K#GC9dlY^&M1d#77g<&Db;0teRj&^Mug-h7CpI)|UgDYp+zZ7b8FbCw
zFYTFTOw#4>zu!oSuy5Pnn*H{n2v%(L+O+N%e_&g*<gcOoZ*cPd#^RA>k_{&x6ZBph
zu at vUvX!2?@G44EWP1E at JEawTK4EI6*K#2-+jJ|Yk!}cECrGkKheJV`y!)q0vDA#~k
zH`VwPE?F>s;`g_ubqe(Tb{bwJ`i>3~oLUkCvYSB)nG#ooz9UmlmVjJ}Vo at _{Rdh_Y
ze^sRR{e|B!+`J0|Lj}6lc5c1h?tIKl^$yR2i2nF2wr$sqw>SVH6Jxdy at vn&5_y4=a
z4FauMac&=KHA9SaCyn^aSoD*^*r<B6&*_Xa1*`>`!Jy)~!e1E*C$hWo9_BT%h#cJ{
zvD4%RjjW)nk2r1O<-Fg6u at Fm;o#oG3fBrcN#HQj|@4q}474uPa_${xLmYilPoc9g}
z`piyZ8B~$Y9b8OWM{R5OQpZc$2q at vnXWh%Vr2ywc^R$|E*7jY3!=ALMF22tH5jsyf
zMHwKAgO^y<At|DB4RD)7z}wFGORwCkbldkW(7Rog0I7L%_veLd9qXQ|AB-Mqf2R{N
zZHf{8m#^*FexyQ6F8hvmXlFaLgrnIq@@q?(3iR^mji*C}rqk-{>}Jnnitwi;Ka1u$
zg{y#muVOPy5SRtqi%GcPu?J6Q2FxPQ2+I$Vu|733gEoh*v?JIcys1L at UC-?HVVJ=J
z{@x;vcX_djqTeBdLz$c8W7-Exe-4Fkc6FSx?9*(m5Bp#CCRgrKN&}t*)F)(u5wI~9
zLThf=V9W(Vdp3`124Ku(WgH;3XES>GwVNYI+WC-D%@<_FY4|?)n6qv);4_5aK~$8)
zu?kGRPz|hzL8-Rj_v(E(*S_t}k6h1Cr>|i{uoqB*#r!md0n4E9cd#rfe+$;47^9U*
zXNA#m6Tf?IF|*(+cyB}*L_#NL9(@FLW5q&a%JRjp&NhH_oaO~DGs=B)Ek50}7F<*h
zoHr{U;w&Fid2`h8X81jl7k2yamSq5QC|Y>{m1n#+;xKJbtnk%ITw?}p#mq1?d)ia7
z{S%1iC!!#(%`4+wU<v#Ue~1!Ka7K81oXH*>sT at IqBSsy8y5Lh8xjw!fNxYDvg2FhF
z<?(uZMA@?|EiKi83>KPt<tarZ$|8jtnFe+Q5%K5TTYI0AG3$kZPeN1sfxQD~QZrxc
z+;LxRYWBd<1Ge#`SKPnaI`=$J1s-=zAeKWqr^OyzChFHOLM&dUf9YGNQE3J6qU}x`
ze6B#NZm6G^&I_?Hy=r{dM~L%Krsa!|HrNGMF at 9M-cgK5|H3!7n<>xRpelAq6=Wv6h
zx0ajE8AIMbADhiKlUiC-K-*}JS(27f4LN}?v0fabP+BS;GJ_vlL7yHg@^=K$bji;@
zeh7;wVO71Sg4Dd2f8gm7N`MNIdd2}KwjAi&&t3I(vQHYp!dy@%q-p)RaL<(w&ed^j
zaEo0qVcB%E^Lcl!RW4e!1^2RIzBsQL*5VxFO*MmZ%bJm4D*&VW+mA%LGP};|>|~&!
z_rVSethLDIdaUm|=zVEjhv@>O5t3fWeG{&u{2L6w+xx!re>Otyp`ZB@``7EE$?^*y
zPq at 9uc|st>qnHlBG7@{g&5>+%SJdNAEN at HGMCV@|NrD`|;wnY<Ul#2Lqo!Wj(n$?V
z+ at o7XZg_q6w;kZgRN_z|@lhH>(?&{F#fd9MofRyu-|EV0agUdM5<4CR#`I(_1TwO+
zJOy!z`x2}Mf5r0t3|bh(VUz&RPRz1hsPK41X2umW?P}5s*#MF$A|AdESdTD{t0drt
z&D4+GKe?kt8s%k$GBQHV`nIY+nC){ssc5{WyC-}n at g}ks^kak0aFcuyy+$#Wfsez|
zZ-P{El?H;()4nEvW><))d#5<3d(j0{aX3EdptD*|f0sYL3_dbxpy=-F&b=bd4($p`
ztRmt58X0rz4I<;N@(p4M35mkfi*t+l7wC9n7iC52YO~C0U8*yXCKkG~>X2UUb!z=&
zZI1_`zd|4I*lz5BF|0fBDm^@2qUdzxC^nBLI2h$Ij0JQGrH_{zj1HVTq?((7xC(Ln
z5#f)Oe?gDjUei&CWJ4D8pVZudOWFx>D%G|b;j^U-asV7!5-+Z6HC<EPSYId<xgdCQ
zJ-L-Ad$;Tky?TZY|5iBa8abLYk1VU$<AY~nalN(vW9yS|DR=P`RWl7Tx8cmfNtzZU
z%XIk83lr9m>`&#0lTyo@#?36xLd8sWIX*lVe>TP)nYSL#$|~%Z%?JIlH0Kl~grB-I
zvcO7PUtQ7#v#PVl6!uGD#`Ofxc9ah+$1o}6^_L(W8w)-^$TN_d;PRGlgWiq;dO9W7
zH%GR2=2a_guHp5X#0v$HrIs8Gt{03;c^1CZ at cu)3H+uU$-+8uNuKu+F(EL6{Sah_z
ze-~(eLkgZmIsF=~!zWK={xbj#H;Sh)6x)&={##UwY9ugOB$nU_%q#V9?X#mEZtz#c
zovpmBXu9i81cn?IL+A`I;VKE;vfD}C)fcp_1#V<<_UjdQ8x)P;X?)w#;<|)hJXmEy
zP^=U&wvoAlnU~fAE=15Nll=$ib^kAXf7LpKJOW}cStu9K9qT9^kCV!fp$a8mVn_j7
zsEld at q4b9%aDsRPR76?YO6^DvG8_;fx|GaTSv^<fSd+%VpVqS2XOs(><z%G#Xzocz
zG<dSJA~CscN2G)`3}#B=-Pb5=tciZDo?r}Ks#LZIqFty4=y%xP9_NJ|1#(Zqe>f1n
zOOi71_2HW`!K4N)m<m_Y$`(IevV<)KTF?VUZthmXkP+#u(y@?w0hi)Owh(duj at aDv
ztn|+JrYY(~M-{?MTBrFP=~yC-;LkKx5*PS6JxQ|xMvoL$9Cj-zNDb5ZZZe4m2jEOD
zl5z*=%ZgYt!x>^YfY1VRLputje}B1O3huX#>341l>dXKiB5L8VCJ0S8T7cxFPhh|J
zZ-iZ>blNy_DJDRDk+FaJK_fK(3H&ND5N#-egm#*o>@NB3jIF|_U>WLSrcLa@?kyOI
zZ=~hZrwQIgg8LG1=fMVe!{c^fF^>8If1x~|AnvJmb_DFsx7+#P3!7;!f7tH1s-_NB
zy9Ld-1rMRxHiB+QhukryC!TPB5}!uf$4$(cZTo$pB|S)iOq5P{a}+c%l=Q9-g!zO?
z%2o>3 at vMKgPNMn?@f`8CvNyC#M}tg@@^pLR<-QCv9-6-$HA^9mbJ}njGqZH3<K3!a
zg(UxbMm*geTujavQ$cX?f6e7RHA!sL=8NrN*z4m7r_!n%V?G?T<Q4efrwcN%gqhcx
zRK|Jv9Z_{i`~hv9t+JstuQoG&FhnZFNHHnW#sJfTlr#<*Zc?bKS8v8aE2AQ$j{8;J
zco{0MnN!^Yc#<eyqR3VGmO}DjQcQXlF20UI_=MXJ3Z<wq;IT4&e+rrR at fXum+|tvQ
z3JDRepn~l*d~wVm0Qs3(aEgvBUY|&gCh^V^!5mK<vc_jJ@)Z9Myyv<=vy7MezI`^?
zENjzl&a#qd^p&c1Dw_jahR>e_=q<&C{)4W;B{yepZzKz@;OUYdNRuDb=Cflz((w4u
z#rQlWxg&Cj#(bLve^ke0!wU at y4CN7f2Ylu(Y&l5?A3U8#Lx#rvABu+5caQm8v?%gR
zM~0|{$D-QL{2U0ojL9l3<v1<2M*M!!KMPRV8XK%*oJn#Am~H&+j?FWcC0cenx^d=+
z#T-Ku{D?fI#^jqoW`t!4;RsM>{)4wuL=58q7c1#8*EZMBf8e0K2y{whA4%y?zOn&)
zrq(^GE%B~VJ01^XuQO1z<E>@?)x^Q at sBih`Nz;0^AQpR9&|D)h7G{k`Cbhe|bcZ3C
zgB~kwXVMsQ8cjF=j9milut~df?H>>}d+ZUR^5=4hZ$`W;x)LYxoZB?1V%Td&Xbc!U
zpC?09QNWtfe|fXC4U6Yw33&ACt_NR*qR&cj-}LPdpyqN(LJYpuNg73aBBw~FQVl8t
zST=T?zvR(U!<kMlT--Mc75NV~l2|I<;23L{jGC#*378YMTIFMx^XXvho&bB>>Jrly
z8KN22%&|V{_fQ_(r&fk|S07j`O5L)~b`>PIy%$Swf9AE^cKAvSG#oDK`f-|tS?V;E
zC*EZQ(VpJhqmXGb2P6)j`h5<jtMh}>W^ek;MSqMX*$Tsbp7-|u<~Tj(!dco*bTSi=
zSao?L2*tkIYZ#3OH}b5B*u;r5<9>0c%3ahlb>B|))DGds+FQ-C0S|a+fVFO*SmP%$
zZXe#ge<t2x2>Rh3 at nt|Xq=bzE%xG}RuC2DWB&t62Ys**|A_)G<o<?N0jgRG-UB=vF
zL7D0!^b6a`@LXRJg*l4cUa^*@Ch$&tMZK;kj@{y2En{s9n_SmQyyM9fZ|Q+W9uIdi
z71do6Wrh(uS{LVp|FGlV+eYd6v(;?DF|BV{e{HhR=;W(ztFmS-Jy3WZ2osXdJj-70
zrqEi`h!xo_G^#pb$)SD~R?O^JA#KN1K~7N^M?PpS{CgS8m-2)?0OEWuLO=y`E3y%D
zbUKl;ivT at REAjEe3F!I}k%Sd3CuSNdigB*70btSiak6z*CMz1?!<LC?e;^rf7Q`5~
ze|4MMy9ZZ#t_UpBED=NZ4Ai#fsF|7e_{FlH<9q;Dt7Q2dSzwePG at d=LT2;ylg~4>>
zAOS^3RZ8q2hWbzw1ZqYZEL>#BeEm_27hhukb2biFAjIcn#!Y#rVo|FtUJ<2ucJW4<
z(Vpm#Z}2aQo~MlVfPGLwOsh1B_vO*~e>{P52w1jTd#?Y3%LrOCg+L4WIb at 3cDk<MH
z6f>1@^ni{?7G#ip>}n&~O4?h-KgUf1Dz64(2&8w{Cy5qzO~Q4SQzEI1#pP5P9j=Mu
z?r;)ta<zva)#y{MY~2!Z!KeXMy~aM^plQ0ffp!(uN{D5+bz)2gP?2mGwgu=4f80hM
zTT<dx0V$8c++TNCTU;b_N$nB#ix4#=Bha~yqfoX|fzCa>#|f0+alDvZc)Hc%YzX|q
zlfUNEVMMvYt%dIxpU7e^mV_1}zL@{C0c(k>O0CsJm!7?IPZG=w`p&HxCX!xbZdq}3
zi-hI5$gJ&~pe~Yc7-vW|M#9$sfAPb4f~4n9 at U|(=b_g(PA1&ZTd=HR{;-XTZ%)M9x
zX-EYmElLbM2%xOXbn!-`s(OUL<&!j_83xV`dv8j6lX}+dM3wyn{kHDDB7q23QQS>@
zlbT^~!s=*EoO${2-LJe at nSzeTw|30uU2C~0|1S-=U4cs=$^giDRaJ0Cf2Gd2lNH>i
z<NX*?SCuNL93r6NAw%bR>=yiCb!>iQl(%=nK84R`+jVZ}Od{Dfzu|e(s;=HyDGI)w
z>WO_E)LJp;S$6}Nuz$F7+P4zA0l(*Cw21v|<HvIG5ZFug!viNJ$Yz%H-9AlNoaY|m
zP)PBU<afm#?&o34^$-Aue^OW$9u1(2pX7farll=r&!fM;tvBzvC}M3mc80yk984qk
zm}DV%k0T;9kzDmdl-a&}3c8kB at 0<#22H<Tw+_sUtqIMC#Olov$uE1IaOqZBmGg=Ji
z81slDA<7x)(mk`-`XRn~n}-WzVre!WWN7%<eH;kXTMiC+<@-0!e=@YYtW<Y(m<oU)
z6~Fbg)aZ^Ln9p<Vc3vx5s^KT*r#oqlkfW#Mmh)c=Gi^i@;n|sQi4!ZhFHJ1M!Z-fY
z at r77*vPlrfmI$3Q at n3Ky;dLhk)$_ukPq7re9{LC$x|iXht^snxih_*Iy0lB}+=jtf
zrL*IQ`fA%5VkhsSfBRI%#4mhm4{;V2X8#Ke&I at bm<VsHRhr5bPJPTC>#9xz=TLe}G
z17vX)uIY;jmZA1ruP9HNQB;2i(d#QQLC4rynb8(SWt<ol`IAxwwFyn$X*kdM^bjq|
z(R3_??nYdLQ4NzLP(F4E?C-7~jZ^qP>v`S6V}7c_g?y&_f2#3ve%$4w#(rtv3c!Rl
zuEZdS-fF`gV}bJ3aFJ}nper(<-qHiz;XK<PvZ|;o^6I<3a2##qPWEh~q2lVe8r?mG
zs4}Ucc!_2efYv;ZJDx>G(~oMAyA((nQliUW>yxmWy9)bQANA6sz<885cKcli9MKSu
zfLgVD)3l;Sf6L<Qo_gX<XiCM@>*8(;h$8=gRfJ`y<4D@!eegGZz at cSYfKKyZ4^pb6
zH&fU9d79}sO_1*e0$(EO*(vxuh+=Xt*PZ;}E!o{gmAe1d9_(t3fjne)U^AQM*2F+6
zK2qWA-v&_yu!&+<^#Jo<9b0*fzlD4)3P0^Gt6#Ddf8M8Nv<E1>Z}5RdS>`QREH2+-
zfYDxFJmlDb7`-#~;Ob$2a?B=US=4E*z2>bd!evK<+vKtM4{xUaQn%#!V at oSEb&CyI
zA?^%99O{HWvVjb!U3f=V*+_m8K{6MrKgiC^r;423AFt}x50N*GbMWs(etnm-1r#I~
zfJ_qpe~^LxQ70=3`0e+NE(1n+gCxX9b-MEz#|45uB5FB|koP2o<L|&9ac)g1M{@O-
z)s&=2*B<-z0V%&!S6*cYx~7!)2y*;lE2M9^jnfKhc;-r`8tZZq933zq2P<&~jXryF
zzpTiK;68Pz4hKPH!&4m|Ws{2V*R|)XSGOLhe-eI|YT*meV-maKtrvO984)8|a4`Fy
z*b!9ncR)%=?CGaNj&R?B(lA;Pkq3AUJp#-bS?1Co+q>HdEki>@R$dKqPW&<{-f~8=
znmL<=DdHBVvkW*ze6vD4;>cpAOB2P!Kvl6UYtrfVaj!93d;JZV8tY~>)xOo%q!;AE
ze~a&^6#@KERp^RqdxL&PiTT!34siL|-z?&6xlceWy4ud3ex-}L;fN{!@YUUJw7OD0
z7VZNJI{kif2~m3}*C7^BdRh64u2`O);yOidMumDgpZc!gpKdssJK?=l$hS2AlZC;F
zT+BRNwDWs*K`AB86JD4*0&CUiL(4m!f3-t;&T`qmGU+Uf4a|L2X;L(0D&pAev||yJ
zljXWA>~<o%FE2y8UdFl~TCTeG^r_?dUlr!O4?vEcayr9&d;E;7)9B5PAL)vhbF*A(
zndPWGm1Rr)3=9bSXE#xy99qP+HcC_|w=49h(X at Mp_D>Bg{6M8&_6+iiC~l!oe`Ih@
z$==lNhCjAABQI4gn?XTj!P>(0rA?nIJo<_BoCX=a;Hv|2VdN-CfWg38s@<SEj(R0j
zd!mO{m;D_jRK+{(pMm2zPuz0hzSfM>M_qvb at j$GCyq<FV_8FKiIt(P{kLOM(GS|%E
zSaS)lgc!GRQpiydq3gf&!i<mye<>(xepm(GJROFO`gYioU}FWETdSbA{(Qrb{pEYh
zR9)Lz0uAfr`RNlzilPwx-jF#Y%m)?_&GOx;gFWE9-6xB?<1(T_12)|<e&q9((G+OD
zLb}~30KscfLVV-}P0`eZVH<?$1OZiNoDCR~>ltBWsyw+OKhBM2GLUcMf9d4`mkrE+
zu1rg!KWF~ES(t9<k}dL<SFoe3Y<p#AqltKn8qV{j7YU7%O>;o~%!~0t#NYT at UySAP
z`tl^BhE6V_ at u*2|5sOwb)O0^i9Nj%Vy@<6wGuUvG9uihXNYXNh__b}Z=l6_fk~SB}
zcJJ)W{-0QjY*U0ZX0m$Df7oJ`N>C--Pquc`Pn-iy;o`=o$3d~JSk+-`hJV7!$SJcq
z3)0Ylsa+gH13aq%X7&gaTLyhAPO%^Hsw!b1ctFh`@57tsl at D`g<P6V(&K=PSS2wu9
zwj=J^M>4~a0b?WImKJG|>2n++d#+X8?Xcun0vnekv0eH~ZDoe*f7k51g|4$4)8;io
zqFWNc`wTuPaJ1AY6Gr27595j5?5ZVRB$H7M1QGSH6Tf at UuL~4CQmssglYz=@zGtO!
zyD!FE55)+ho_Ggtu at D^j$QM8VQGhGPADu~OHT*UK-|z^;r<r>5JK%45xnGQG-pS71
z2OUI0>1_lcA^3B(f0JBDm7?k7ap*+lMi+?}fn4R at lNV)7>Q-X2bu^%yHwjFJY6&ld
za{nmu+PnuVaqAEhiY1HlDB=_whG2D%UUa8~%=^+dYC*@s=*lGbd`rJv2odt)ZkZ66
z6=frtKF9Ag=QhTpA at UxAcJyD)PhR+8Jhhka{@b^}-HB=ce;_5GD6p(#XMweZa^d0`
ziB#MP$57C(n4(1d?@QRus|J?ny%H(Pj_rarzR;(*9+DC&2pRaJeBn3^T*<eJDqG0X
z6_1?oq16<$poE0bz8Maz5|oCDb$D}SZ~NGu9K-o{zu2dLf^%V~r1 at Q{$E^tas^`BN
zc);wz^ns(3f0&RHOC&VKe9`N8G5)cbJX5xn%``i7NmE3Id03`ugmBRfg2=PQ9#FiK
ziA&rLB<OVSGb4Nwap;r~R)BZukkc3<p9F*1lJLiM)gH-q>eF`%l|+wsLl~GWK*w#)
z==>A9$@&)NeHN at 7g#$Yq*?t<cb`t;tChP}o1)Z#KfBXMm1zZm6?W0}XnV7-X5UbK_
z+Dm1Fv=;&&`cdT;kaaraPd3W#DSVY-D+g~f0r08p>M`fc^udt<4(M{zaCRSQp$h=>
z2p$NjK9%59bJ0OgM#6+?;V4WCV%I>X$*3!jVuws55d|;v>L at JxiIUL3uL#@)tD-n^
zsZE0#f2O#$d^-iI(^Va~x|SK-oX at B{;AKOmTmNGz-{rfGU;_yKn5|vz5BgprX4;6^
z{raqP`l?dqrmsFBWHPE?nFG~KQ;XE*)Uw%6*&b$bCHL+r*wG~&FwPD9v%@gmfzOa~
zQBn7oPrRAml40Pl`x6W{dN?eL=h8&pZ~W?9f9gv#{7+v;mxi80Wssy$OCu;<7sxr8
z?DEvAErm0&EmslbR!rGPuZS}deyL8^^%BoIVibJ^d=e;0xo6T<6q<Sp`h<QAyLvXh
z#gDY>WVK#<A|}e4OAl_TH*N5yRjkLB2oQGFr3FH7&0NqSoQuQdylY=D|NWV*$TiZ#
zf5o+RF%-G3V)O=pR;Fzpze5B#&)ns$Z5d=?y`q0s>#w7Mf{H_!u?jrzoMgB?scxQF
zr~;dw%2Z*k(GLz#lGqLyrpuKHB7(zR6CA~Jpb*R(3n^`WPxAm;jYs=*0$-`+Ud+co
z=BCfKHX8m>i54yB)@ZvgcSx4})ji;ze;8+e1tO?%1La#*(y5e+fS&OX;{#T;AgIGy
z(VArj91~PpwGA4|!79q`UHeo7_s1MLKH4W>m?6hX$Wlx1_oXZKZ3i?8GbWccxcyA{
zkU=mtLHM?`QeI=EoWOD#66N06OysbU-eY#^x8QcBz#U(-`gzh%F;5gxNRT~*e{Oxq
zPn9E;e<;x<2D$GOi#%8Jz2XFbcvb_>)?5;UjqE`yy4kDgKZfxO)!f>{Q41d2oGn^}
z%NN~LX2W6M^RI4Ijd)NOH3%&_rzR*!q;;3^h8$u~vH^qxTtgN|s?b-cW(`~q#VWyd
ziS*oK&A-AnpRpyd at 7SC9$PJIlf1ahAge_!xPSCLVEbyd6T9HlX5V+{eDUy1UU0UNl
zfd{R6B<PvGvSFP^3!K%s&pgmcqyf(?W=)$!ghb<Y7pVZ-50_HVc9DM<``4zc?+gew
zMGT5ex)$p=`cjHB02;Z9`~!9^9Nj{keGu-O^g#KLcFDjoA)uOJ7|iCbe>Y;h{k=Oq
zc+vWoz4|o?zm~dV9k+0!x5v=2;_RO{CjexIEEVLm>zxE(`Q}%=npZ9;;eSTUU;%-R
zOHpxGBqnmv(G5Z>4XNM>7d$au<|H||f^jw^lY*`c4~P4Kw;P&%R}aolgp?sCJ}mA%
ztTZwETw6e^+X4_JQ>j5*e{#iUWM(FJ>Z{%v;wD=X{0FXEFp1?UNQNn>$(cq&?t9(4
zO)1Y_P-0NUrPyN$LCI>n?$v&ZKv?&DAXD5H4k#Kr<$WKp7$cJRR5$(VyrxEBycV<N
zZz<{%vvpR-ngl@&`wwv*287lV!O0E!@935+WMv9{D?Dyyp`xvrf8oHzLVoh3^}rk+
z!dN9PFcNu+UVLRf${E7dlJU+YI9j3uo7;9=yy=+0?;7Z+>3u_j?|89V96+3wb5-zr
z43`xD_qncoAMW!fe=gQULtb$6KI+xqMyXNKyp*%HrjHry>xotJ(A5pxQ+Es>7Czx$
zOK4DkZRF>8*5=Uke@=Vr62$)lP9<(!Qxmv*25mfp^UB)e+wyH<AUPIFHoD$(s%|k~
zn_qbYQ&bb~`luVna{)&mjAkuA9pw^b!c%>>$Y?<{+`A at hHk8ffTr#HQ>d9O_DvS~D
z=DP;r(RhY9N*uF;kQ%82Rs6r99is7DpcN3ZT^c~7mrtNEfBKf~_wrLLOVU1cum`ZH
z4#HBtK&T;r&$;X9EFKk*9|a6A3g&$5GZb=hrh at zc3EKDgvyt+Q0Mk&oNb3s$oCwuD
zxb?%j=;Jib)JUWr7)@H#n&Qzt9bdI=CN<#u27<R2V}&EI^TY7mFN;<EOrCm!xUBao
zGK+;S at Wntue`$7sls)60r0ZjU4`^?b0k=|v;c*Mt<*$qxT4KRT^ERQ&!zI#W<=p<I
zcRp65yOE5w0Z=x?)01LQfg^!%xUF31vJNl=*@XetuW6>8xfg0w<1~z8?4v_^N6<#=
z>+jg3Bvo&Bm`v_py#b^4Bx#X%=e7YLhC9A@!Cc%He^{7l6<rV~IBc=i;v#jM1R2IQ
zr}EW%SGO8 at ofiQ_2K*6AjqefrCy@$o9S<<wPgx2RDE{&#boz5 at WA-U6mh#sjbAqKy
zdA$_)a3~#j`37aOYe0!zvW#(bPYQ9JbnG3sVBA9VWWUkn7fezZpJdKh^>rQGJN-1M
zF2aE;e?BF*HQjy**(d-i*!Y1fK*KeCNn^Ltlb>9oDE{W?5)x{r8{_GzB*9Sb_9 at D^
zA52NDzt%~tStidDhDK}#)c2;iyo0jH1_7;6Tew4a17pH5r6(@cIL&gSVlB)ZfQRlY
z at WahWl>re-XV<}umQfIlR2uf`vt~B^;KnvWe{05Q2)}W7uM?CfV~77>K{o)Mh%oNa
zSGk0o%8xvzzS5UWRt2WNKGu9-t~V#3FbicIcO>q%1zzCRfo8^Fjjjnr*@0mmh?X`j
z at 8llcRX)Rx8Q8i2ZFAi=6fa&6U!v^OY!7md1)5L3oGN;l^EwZ3ANNI}>RE~hNzN#R
zfA&@a(%{kw04z)4?73PB!@Mr2h>+OnMjH4mq_QsN65Ux-Vs744&8vN)7xP~*1r%7i
z+OG#h)w!UTgOOD!A1j{vqfsAs;JD{=u&!2m2&kYc8}6pDt(&mf#c`R}I8%2CB?qR(
z>eeker@>q%`XF|MJ}vs@^$)HAUsJIVe_+TgR{c1vd(@;Z;e6M^Hd4|fjc{YSFQ8N+
zB!N98uB*>2Dxn1LNAxIymRE)-6UB#=qdcyn1zE9*izq`#XbDXLA{X80&Tm>1w#+zy
z7mEn3UKkZLu~nl at F}>eK<_JuNW!Q(oHjK)F$|#E%KZK^Xk5>11rdFE at q}>o**#DFo
z-+vUa>P*>xzH8{f|8!R*U3#}SS-IYpN9P>9s}zBb7UO at 3QDI*I6eD0;qV9ZjRz at Hs
zme@&{#!y%Gl#OH6h6hq(Ncu(a4c_mxJX&c#J%IkfSs(<Rlfc%CWfURo-~6i1&yF)z
zt!}|Vq2z`cMh<kQw_d&`;#Bbqk^_BTCx6$vH#8p|V$yz%vp4`;ch!0oo9n>ZEK>Hv
z&#X{cxdyuU+OPxUVio4`!aQ(q0E%OfMf}(jf$6%@q<5mo2Ix?E#1ekPDAG^2rYdy~
zBgM(EF*pOzVk0tUPq-AklqOt_MiYzs7K-zS0r1jvwb<efssOK`9!e?Y{l5p!Pk#U|
zSa at Km8IHW9(2ziPEk*SKbtlzlFhj#L{-IL63*LU0Z<5sq{NM at n@T^D*?uS=cb}MzJ
zMa#HP-u5}}EcGS&z-ge_=ZqP%rZ}hOIqo&DN$3lS2zarNdYr5 at +K)JlS;l{5lgmG`
z9U{Nvs1x1LlSq(~YC1!#uzy`we1DO@&>sw2e~r>_K+Ei7lh;gn&g85ayQ81ZKfi;%
z^Z!vxGF|rP8ORj6e$BB?S^Sc-iH>=WY7eHlsI5sG<93XMQFI{Q^%XDGlTryUP95!W
z)0lsEZd57`z&c`VmHH)UHFFNm4?AM1`Nau!*q*jihpyx5ux+d8PUtkDqJIh+921S#
zoEkLp_Isx>s=17>P=EDsw=7tI9DdeN5ZaJdwx=(lAlnlm`)yI<J1X9U(MJ>x_*lRm
znUc`X;(#jDmq`ztZ<k;R!8fb{R#$4n>qyFy0-Yl$&F(ks`hT at TE9HX6`{T-`3Q5`G
zNJ2fBg}Da%{GF&<oxE}B8Gl^!wPV3(p!NESaMpk|&JLR{U5@@k8N+vfQ{R&Jh7rfw
zD7SDF81$bH(8dQWYy+z^>3gb{+KR5l$)7PaMQlzl(l^d}in>QXi*Dn}ZEYFWxt0(M
zrd26PE?TIkXnwYIm036r1qO%45(PYAN)0!Mr>*MYQzT<*AE3U5$bVaZ!5f`u(B&YX
zSbI-IGkFGN$NH2UWQoPo4!p*7hnsh>z}tY><f<ka26o)j at h~uETeM1)hva(<?A*3J
zmFJE<;Kb-eg!f~})RPRqOtd?V_&7Ro7!66b9ARN%k*9>MmTP0mmWHXD_3k1ddNU9?
zU7aSg at 19_SJ%phYu78)DgD7`D`fHjtu5BVao{InpkvDy?AO+z)EORl-{4Gn>_L&(*
zBJ)Ew87gvqru2YVK6HjU5n~gTHjjmqHg?8*L^~k|TT%mxJ0ICiu7WkRF-h{z#JU8#
zDioERpHJ7pEO$hknNfMW+APxAhb*li_hZT6fR;PRhm}YjJAbX$N*%(DJCJJ7H5n-L
ztRSgO$ab>!zXY)|=fs0pCA9!c?e>)v?F0`ABsf1BZdQkbhJaFQvbbHJs7=g;^|czE
z04*DPEP509io)FDwDD)s4?v!~%RFqL)+hZk=7fy|zP&m1c83$LtDidRsd(P~J?Y(M
zz_2Dj4-Sim|9 at Hy{Sjx=myfjH5&Oog#lYVr&E*5gYnXNnenqV21=e>auffcK>FdZL
zvFPY-#l1|l;-(`8lEm7{$C>lT<*o<j_R6!EPWJJscWgwufdUJQ4t9X9HXsw#M%JzS
zg-#8pz;L{tDz~<v!4GV}Y93;V-=y>wutk=RR*BVG!hdXheq<Sg`}r_U$>_v>L7|#>
z_9_!WU4)L26Xs=ggT+-s>3YK$n<uiRnK7A=JL3p()QBVME<~Y;MFcH67A%{kL%n*}
zfZySM-zb6SQ9RsG)!a1{6!c)RK?1&+tIa5{X^M}}MgWspvKaSHJrzrJ$%_O9O{RY7
zd9`NHsee?><=(NsNLQ{m+?<b}!IyAX)2A6z?$T3^@BjaY6XV!+h75P;%MvKF;fyqB
zEj8S8Zjr+^{LwJ3X*zEygiD0bQF)vBJeN5`>U64Vd>W(la5)VES-Z}SD{Dl|{X!pi
z#9Qvq!ZKAR+6JBYou)zY%4Ng2ED~NOPCZZ1>3?^vW2HML at NtSffY5A%WJ2ZT))()E
z&7M3+?EoSD1joR6i^R`o6SYHkL0I=k9!x~=9#m2Sh?Yv*oV{+oTHlrdqkx_V_L&~#
z5uuJ|q+DRv&)ra(<i7_}-d-~<#(m8u8v{ZDr(~3rsiXCux=Eul(2>d#UosDD{U`*I
zEq`+Aw#QvHDXkRdc;&@wfv4WzgLT0->zBXaepFDnu+6xzCFJA-UNs8E!#9tY2sWKB
z#6(?Jx&Du<7WsBW-Ql`ES)N=30^%;sT#Wen#)&1#Qu7CE4G$xY{1|cg7HFst9AqCA
z9JCw1jXJg(41mtuSTZ`|fg$JpDsaaTGk@*TGJl&UU`EnUoH*kK1Kp(jhCd0rf2>J-
zVjEO37!TtTXCsIQF+F>lzaAOcts*e{a>YZBuk>c*11T=I3E~+Ksh<Lm`Ajv!eMCNl
zfvE-ex)jA`NU=$<+kx(djBTRMfG at 2%!6%@%0)aA9$TZLO9FV3=8a9Yc5DEoL5Puj7
zi5D3A#9$xkGp}KbO~-HtRu`aB-Bi+ge-{32?VVnww3C!9F(q76fL2>}qcRMA(0C5b
z5esVR<q65zRb%Ft!FS2l)oxdESYUVx!XF=PzJUbU0Ppf;!QbUazw~j}kllfcCK?9q
zGt at n|+NR8<w|(51%&IX(lniRWUVlu%VTyQk at UP5|>ndZ~t-gYd&V6<-5jqu7Y3f*X
z0HC9ng8&U2D&&u!)E&t7 at Ub$zA3z)2D}_ib;WQUwsh#xyls+08Q1ZQ9!11QYJ5W^X
zL4ZQ^+m?B4B?6XqH7n2lwH}vJ%U)2vE81OE=rC<Sw1828w}TZ0OgDe}H-8;vLFQ1~
zzvid%fe5;>eZT7(!G_uM$Oo?+Fs_uy6%g35RIGc)U>1<xiQu6nCE0#Lo#;My;C#)d
z?Pt-6#D`PjUH7G5q0CtG+)q)boQw%nmUasX?cJLs)JiP+Q$Ozi|6n?`sH^zNL*ZD}
z37dmGwtrC)y9`;<UK;h%#D8iRf0t;|ju3%25rt=8Q{8}Q>fl|ms>93-iI?#;jNh)P
z<P^=Lr(S)JKHA3PR+p9krx`Dp`ztUkRYcivmT=vUGvd=)kww(!3WQ)oAnM*_zvYx8
zHC?WKTTtLC+iMkUU>e8y+L5%_eC%-a^*rHdLzSJh7?37Uz^)R0V}C8FhQYqoK>u$e
zPt;cw!IsIw!qa#F`fnHqxd2+Bmi=M0dZdZ`_G>4M at 6luCYnqlpavF-1z7@kNv(Zk+
z!o&8%Zv~0|y!@K^Op=VoAnqtT)<7E=gOX$#ryGJPk+|Htk2Nh_^|4)=EqL=vO6S8;
zpkN5Gznd_ at L#CsE&wns5PZivMSTGkn6`r(c2q_C89>+e8a5<T342Ed$CGI^ey5R*&
zCD0eELLXfK2g?L at uvAO(@W?Q`k at Q%nb8rgXag!Q8l8Hl*QQsGfD;I8ee5D%Tp at rv!
zFxU*Un<G_Il>A7f{7o%2z-8R`8(k12(klg=sHM6|2mS-SkAKnQJ0!29sh?)k8#>;K
zl8;GxS}sf|(H(qeA;p|qQB}C2GFCDQ7aJ}A{HoX2kBuBNC<rrci8AryWVcaCT|q7Q
zDLm`YG4cxdn-fGwr&$#<y&_s^zGqN;<(%6NYQFC{Nb+0WQ-RV3Ur^I8MEi}pB5p54
zBgnd30d{UM<bP#8{j7B_Drn9e-0lq=7vSH20d484loSqFy?{2dbmOQDdEVYOa`|s>
zQ<YzNS;5>>4sf}Jobh3YWOjtRd0`!i;fg`F5<dOuT=E_ at qQbY)S>(3dFtlq<v5D~u
z4$eZ_0Ju2_t0L$TJ$d at +7Gk_b3M=@v`k`7$z_g2q3V%pwA1<m=i+rEVMvsrdBirH4
z6Byk1Ef+k at sOXtCF^4wbhXIaco)GlcNjnVkKw8veJBEXM%11=$?7Q#x31i-~akm_L
zx#^jyET>=qdABd)GB2S2asWsSViGvWpSWRC9cJD7Jg1s6n4tMwWJ=D}MK&FR3YWAm
zt+OlFw|`Sot8OwQbSDx at 4qqtz&GSpZ;#YS=smrq+eCJ+AZ{S=DR<irlmsT_X>f~+L
zC|a2!VpXe*ctb*uuBLRL{-k_rwTg at mNP238a+}d`#VxTBXjMijjq{vZkTcoWx)7Sa
zT}nqaf(*79<6B{5tU6FBbk?uE`dEN+%NCV!fPX-pFBS-G(M_p|aUt=1I=#@oIbjpV
zSX*-?Qzj?+c|`C#=A!7#{uuEd#TDy!h`-ySz{VvhJR8dtbPd(kCS*Dxd*OWYjhPD&
zh#axT_Q at 6KM>{*au&Oxn8lN0M0vBh at ri9LeVQV4(9$g;qV2d?bmNKEN>%xN|NsNuf
zw||xn{=AeoTI8iCc)WQT!@Ls;Z7u>=^$>tCRAoJTTrDM(XNbyIbuQY+YBr!_SiHBv
zFZ=h~ianGY5+-9W=Volp=<%a<z!Bb<b1H-A7ZCS7H1fm at r-|&N5R#diJ}3lC6{7F7
zJ-%H*0_Z9%>;naA8d(C4<vTr at WKvT9`hQR-y#LJ8t8w}rw!-5t`u8HycM}RoKcuu4
zO)mU5nmxmz`~zmqva))7$`v{1dnG)qTAg_}W~?fbegpfzsEE#MD{LNu8>WVty9B at V
zhe8461X#Y1i!vD4?Y%_eKD}Qw=2Tc8zhtxAqW)-N8?19PcXgI2<YlFShxONhg at 5No
zaT6%Y8Z;-ymlDR-BKPXif+QmZ*8NNPTd|;<03Ej-seQ5*cl^K_sx%!iCGsZ)=32{9
zXj=ybDpk%omGa6Bhf=VV+@`zt{v`+EX9LDWx|~`-VKnr*iWLF2^@!2}ZWaOUA&}@o
zM3YyZ&t=0t`eUnG84s3a?GwN#1%J#n`!%%7k&)Shg7)5uY}PbnaSV>9gFZ9}=s^nB
znM8aaGslZZm*-acIri})a)5=_myK)-EQ+BLZL4bCBOs=blDSZJ4CqQNjok%Qh>k_j
z;@5J%s3arHS5d-;;@LEqJk?dfJUKTT!o;Vuh&OilElw*X_C<k<^$cUKe1G-6sPT;E
z#EsPhW;{KMC`w0Q$+$Vaosa&Kug)|W<{>aFcXRNY0#q<d%PQ)n==xo)URTs}Ds<i=
zdOrT}b)>t#RO&<i7aSF44`BT1GN%;yth`RR+QVN|NZbWP+U=h=m;xn>|7RWY$Y5^9
zOgS2|P*nBzf64)Jpv^VtgMZ^{$b`TF4zDlc9h90?ZjUH&u%08&r>EOs^Z3vQ_JMR`
z^cM_pY*p)nvj2hWR;gfTB{n?X9~+XD0LCgyUoHrC%YMl>Xz1$IshB7yPe}@6TZHiN
zQ$uDcstA`)bfu<!q6JDjAT!pA_$<8aWa(mQgp!Me_NDoZkIsQ(XMfy_WNabBmQEl1
z$-w-B9$MJ%jVG2kj%oVuH$2 at Ljo7_S3^DNBXH36?3)Ml+a%7X>UwY4aD at aq2*-0!8
zf^|arv}EqI3ZZbJ0)xP4btv-s2sRqqz%NA=9UD*W;L9(s0?<{Ag7l?u>`SWwnVg|A
z3BmP5zJWjqCQ at c?%743Kr;}zq(I at qkm*Q^K({HT(Xa7!%AcK%qbV#m6P0Y=SiQ!XD
zPc6?~o|JZVegOi|s`h{PCHefu6w2jUOP at Z2h2e}bytoI at bQ$EsM#A;v4pS&#SsDfM
z^(Np3OpzXI#yCC1N*0DD6<8}FgxJrCP(Pfg*&bBb+`~q`xqm#^%WawFNbw@?iS!6n
zp+Sp=B1AqG=vO%J9P8G%%~c9~`ww8tPm6<}WT7R#n*w$`72r|^lwCw?tp0(MWEt&u
z6~H^XmCW?%L<KFu;rMm_ybTBlA|Mukm?I2&PdtpfmUl%gp)Vj-MajPrO}B>-Xxi$V
zz<)%uEO!z4fqw<{9?S*qucs>L?j%Ak{sL}08GWS#pNMWcIZmoPC7^WIJhAQ5XdHYq
zrl01#Rn%Tc!qJgSa0aan??#;Y=Z>~!bCtcv3H=zrkd|@M$`?5=JF~q-jIHX4q8Rk#
z;U0-+qX$WBF%SGjdYqfjT5wqKXy(ymD&N|RkdZIjBY*ZJ6)~&vHYH7_Vq$gan5riU
z<{F at +20Ze_triW%A=lm!h8t<`;j;Kiva3F;G{rN~tO=}4VF&MGAYH8f$hE!@pl-Eu
zL^8nelvTBp8n)5n0rk+Wp%|s^JC_+sIbv}>b{vS>R~z<91Ojkqfl39$V7WBTn+bi(
zEG=5*w|`=~jc%tqhWS8&P>iPt>}<r(F-*xNRjGroJNm#Ey3GhTveqL|Q2QN}cH%!z
zNF=J2<pN^k=P}bfUw^hddE)9P7qb7 at fu@RhLV#wRfpzB-3i4lL7BlqKvB<!P!cKSQ
z(aW3e3eVfy0$~aus{$0I7W+BeA(n*oh+9uA1%D+*xN9uw_|x<q^yX;e1p8EHJzFOm
zOEU^srQ`)`AHB=ST;MCcrS`nvB`|DtUH47Dh=&>K<&|vncETk#rAzHz5c4ICt#U|E
zSh*J09tcE#W1ubR)D!GNdT}$j|IdmaQ(ekTLlv^uoO-y>Nx=Wv(qPMkexQb`E0L=c
z(tjE%5Mz#YdKv=hrDA~Xd-JlL>n-5V{lQKP>cCei8N=~1e82%Q&Bb)6#v^Ez8UV&S
zGj@!WxalE1;ILCQA at Gs0L(>njLSqAhvH8YjZ-dhMA- at gx$}cgLbe&|>@y*PY<L_9p
z_*kM9*jX at xCK?j;QwmaLa$M(e-m1pvCx6t+Uc5Y~*Oa+Z#$%cWvR|%`Gpmr^60|xm
z#_{)3<8xhUJXfxmjP+?6mrfxdvc+MiQcT at UCL-C!BW!{6l^^5TOdH-H0Nk4l-}|DU
z*KcSv?DCP(OTF&$+caO!`fuc=_;2><mCjw^&YpcqW(ER^gH)Ua^qhEtLvi*Y{eKst
z;h5G6-T=AooU)V&g9}Alp^QAsdM1B;G}&jFy4(1Lst>Ms01c0wXP*H0Qg|j!S5kpn
ziiV8a<W{fdzF_h)u*+WM)iVJcB6p1Zzqo87P6KwQm at a11uAN~tP;375x=4xW{Ua=E
zKXHY(on1(DNK_nQFwVoN9ynCQjejw~-C}cR&4{O?7`z1p*r2aJK`b;usW0V49}y at P
zYD4W(_T7LiR{|WKYLXs;^L|b!-1G at xLgmboG7<FE^({V#vFALlSYK`pPQon-%s_{d
zb0TBYI2U7s;GrC^@xSd`#6v(|)N)O5gGD&kp4OT!^>%)s&-hEu$xG>TG=H4+UmU!Q
zR~GQ#*RjheTZZxW;-u?A?6IDErc@*S0TEw1M|6VSnYs3zVBrW;oA#Y(!jdT}>0Rb^
zwkd91GR&#lR)}t%>(+1OtF{%|1NHk0o)iZ}aeix{3}#OQA`V*N_fSI;jWeR!LCWGJ
z`pNd<I7^JTuHVNMynR5yxLDF+0E(iT1vBEFa&J)lmh<6GRI8%dlxZ+Ikpd;31}**y
zRvy_{LD-`uh6{@Yp+<4~O?-UUBCtMF2w|W7Q30#~00000000000000izh2nzYybcN
z0C~5UtP2hWw{x-!jTN`H$O{Sqw|2 at 4x&pTf&I?=uw;a(6E=&jDdH?_b0DHGl9SkM~
zw;>}8pB1-uISfnzw|F}Yt^&3{3}OPe7(xuRSp=upo5PpTn+#wIFgY+dGB7hSFf^As
poDA9nP`v?{@0<)H1ONcg=a)X63?~mTIWRafFf%eWGXS at 61KeFV7@q(D

-- 
2.18.0



From Deren.Wu at mediatek.com  Thu Dec 29 01:49:05 2022
From: Deren.Wu at mediatek.com (Deren Wu)
Date: Thu, 29 Dec 2022 17:49:05 +0800
Subject: [PATCH 2/2] linux-firmware: update firmware for MT7921 WiFi device
In-Reply-To: <009b012ad3aaf5f8179d10367d4daef8be084119.1672302474.git.deren.wu@mediatek.com>
References: <009b012ad3aaf5f8179d10367d4daef8be084119.1672302474.git.deren.wu@mediatek.com>
Message-ID: <1dc6cca5b0dd7c83334901d1f67835a37fb014f8.1672302474.git.deren.wu@mediatek.com>

From: Deren Wu <deren.wu at mediatek.com>

Update binary firmware for MT7921 WiFi devices

File: mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin
Version: 20221227150910a
File: mediatek/WIFI_RAM_CODE_MT7961_1.bin
Version: 20221227150954

Signed-off-by: Deren Wu <deren.wu at mediatek.com>
---
 WHENCE                                     |   4 ++--
 mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin | Bin 92192 -> 92192 bytes
 mediatek/WIFI_RAM_CODE_MT7961_1.bin        | Bin 718772 -> 719412 bytes
 3 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/WHENCE b/WHENCE
index 6786787..3c25024 100644
--- a/WHENCE
+++ b/WHENCE
@@ -5519,9 +5519,9 @@ Licence: Redistributable. See LICENCE.mediatek for details.
 Driver: mt7921 - MediaTek MT7921 Wireless MACs
 
 File: mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin
-Version: 20221109110918a
+Version: 20221227150910a
 File: mediatek/WIFI_RAM_CODE_MT7961_1.bin
-Version: 20221109111005
+Version: 20221227150954
 
 Licence: Redistributable. See LICENCE.mediatek for details.
 
diff --git a/mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin b/mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin
index 2d7d64907deb5252a8fa0b78f5371c625684c2b8..a58d468ad059a369f686aa10d81e34cc19b6725e 100644
GIT binary patch
delta 15166
zc-ozNeOyyz|NptRv7PaFR1gr6A<sSlY9{HN1LyD*;!HA}+-YV;Po`;QW$qwHMMFa_
zGeA&GMJpt9pr%&Syp7D%Oiaz)H<=lg<v^3E6TYA8oU=LP{{8cN`P$k0^Zq<spX>R$
z4zv2SPxWb^z~QOGhYuS*eAKX!sgDdx-5vNL>a{kigmTJCsEhIv>MVSp*m at WtWWz^f
zRq9#BRCQqPu%cRPzC21kV}&-d^BwKHK`VL69?ey2Uv^owPYo*K<9TG%fMK+1iB>yk
zg*I!@N_%`Vwe at 3LFP<|}prKSY1EYFevbqFTMcg*Fqic+db5Sgn<7d6Bj6moR?o<s^
z-;_$V;WT=3%291#P at 9gf$%XIhI(mCPeE+2laGmB4+cmtej*2wu=#OKyfhrSxFT#82
zjR9Y1gYGp#!M?eaG8R9j9ur=o4eFdNF?re`SG$C-;yvmZREE!~-w1#d<u6DnI<eU|
z!G|z!;uXGey$D*(cHDd0#o0GO)z0EWzK@}^nD&c<XR_Zgc+T?sG0vv-?>*3#!gh6i
zVN~f;6%;i_8<_a#JvmFMWt_4(N;hk(4d?lfM8Dut{{(2~1O9R7khR7CHx%IF5g#vA
ze!cZ<;O8<Fi%WYw5uMI<-QCVo^8GBOieRb70zg)?lrj<IVEAsqbni%X9LM*54?zp`
zj)_Xkr6?3kalOQPDr%w5F?W!WQTydGg~8a_`}qK^S8=EDygn)FERR&vX9QYrz1U|G
zLiso`<cZMrtn-9Vn!Lid_^>&jxeFCsr=xeR$Lm98q9xXwA<rOm4d;eVlc|GoeP}eg
zh0lbJL3$h*79M%4$ye*2*imgTGbo6UW1TY8?8`c-1={|Jx2%S+M-V!Smxd2R9k at Px
zB+9~9!(Ry)%qdw)e}p{KWAN;LQ=o+#`pvVrGPuKL+E+1=LJ3#>xXZ2KW?Bgnb>*t6
zRb{3X1b+tFcg(bkV7r;3iS=uc^HKPoVWz()a!8(oI at 6kHrlW}TjF~!3zGrL4x~$MF
z!Z1+Z<dHq5F`+ at pI{!V9QE*f>-WU;Y8EmG0AjV?^W8^mXEwaaGC%LQ*bG^82_E^GI
zw|Q|xB(B|y(@NY8FD^^sZhCQf_E?KR{^Lb9NQSq(xT6x+;l-U5xxy6(X)pGQJ+}Jw
zz2mCiXe;=PZd+E9TD_opPxXy04{do3>RshJLVWJqt1a`zaq at 1WJ+>xQM{WJcOd|!1
zNk>g8+vPm|fcduj)~+KQ;s&x^o%OCG4QPYj9EO4nQC*y#DhPo%O*O;ed7@?nJil`t
zF^9?gOKHHT1pc(ZfA2bCF*9<~vjwH}1`4R7HLvQJttV?1UX{c5ne29I5$hcMnvUMu
zl+0{B3V1Elp<7p}FWF-nlrS}~KdA9lh at I%ggf+|++fCvuLLXMQbt8p7tZwhYWmVtk
z!R1xow8u6m-ObE8k0$L^^+ at C;GW4J`-UPj#3_h?JkodFf2*bs5ne6QVr|Sr;o?Z7&
z;o$=&pqqH{fRUCR`X at B9bN*|8KIOb0%8w?Y?J+K!i!#&lG1?)CKOY$d%h(T15Ao6V
zfyq?J=WAtGWv#s+T7WGOo_%e8+DO+x82`~cVx4%ZHlVZ0t|68%$3nr^2A$rAC+%<3
z_U|1{_5`+Tz%64k>R$sYB~Ni0m~!v%2uyz9VZx(H_|d4Bkq+;V`h4h5d^E3MZ%2mm
zFu7#MdCFzuG&OQtKn>mGTjL86e4vnDh1K?o^+U}9gcuw=@DsEg+Xlu2or9f2UoepS
znfr>peezA*J}?O>aQ~POkP$b;3`Q-uC1$?=w{5)UP8O^o&Tp^byx8fmAnlEP8g0X2
zanb1$VNK6sI~=hFN|x8D{b2WH8w{Nn#0|@jXmeqZ&4MA-;yRp-DPJ$m9Pp#@TXB((
z5b5P+Jy=~SZGzSPSJz>{mj(Q@>oA8{N_&rR+hlsGTCJnDq0-a3S=;3JbX;QM_YN?b
z(|vgOEwabnFUsdQ+i|@SYvMnLwEq(yX|ZVoC#(Uz43>2b;29#82LqlaVp#^@JQ1Tr
zz*!PM7x1H!{XD>|gf{^;ikMog4K((XF!083DNb*&F}ZB`t%MjgFHPxUYfVD40^P$)
zhAc!b>==>)PtDMmfmu6rEIdyP9fR&!>EsSoNRwU5<!je;tLaS~{P55|pwa%zoA*z&
z<~%Hyp)1zhv`8gN!>{Wu_}wckfI*>#;n0cA<6azEvSHNKD<8=9*haU@{*m)kt4eG&
z|D9>n02$2udmm_Efl&eK#O>ocWqa=6cKvO%3|~us7isb03{JNDF20jdh(5zh$4`mM
z<?^`|_BbiZ5(DG+C)?3-MmwZ$O>*_t7X0`4-%u$&XJ}0L!*!TPuEVbJT#GQgJ8K@{
zZH at vio}W;!pbEMEw+dP3!F0T5LR@$kr?L+;JxihNWfZON6Wcd~njgz{{H?S)CJaVs
zKJK5Hf;w?lW_ZwZT*95K`d+N_!0cqr)_ZtS=FFf~8%8-+a7hMAmCxS(bQ!*!$)Z;4
zkcl%9G;c9G$+9As at uxVWf%3V+-mc at hct9pVZy6bjtus^55cv(F at lONvvavr!i5fwE
zfoNnf8S7>l`nWYRg?^!)25yFN3rA%aQvQO~B48%znM4J_&Awc`3BvmWIbI}v{5c~?
z>7J0IjA21tCg#1aP9tZ`U|MO3PxV;DXD~}>u}F|&@y<sFThtlMBDIkE9N<(!r2y@^
zH<zJkH^1wyz(c$2YRh02i}pmi?%{v+#39lz0zV7T1!EK!BxYsQ1UWjNBs|G{*Z0K6
zA{c#b4C|6oH^xA_+&B8t6Q~gq3d&_Tl}ESRT!zv-`t7-lUhEwrZT0Zw8H|?p at E_b!
zupNK)^Jo)RgIeuT7kLy*=X!@*f}M}OHbL7h)MygwkIy|GL%T&9Y@|~Iis_;j0~J}a
z7m`+LxOm|E;XPST!`ZQZQX0;h^bCpz^z_j0bYWX>Hml5Ow3 at wr@fb+g(x{Jpo8=&V
zshhuzRs=6w(6zSoJgjxCSeI>y2!`g6)$A6>L~U<Q*@oI>H^BbOGJHNeI&>3fYYNi@
zaf)mO6+&_hq}bb^{E3;#5iyqyl%k(0iu2*qS*KyCVCO^Z_-M)Q1kRou5%(3?rGlMO
zu$u`H`+=nrEJKAcwHPdG@!H8zF<ZcL7+9(V%dvu;irA5eg5A6L^yDbSSsjy~q}6%{
zsvpnZKBC2 at -2O6Hq37kMphUbW_c3UhKj3M@4^KD9R?&FL^uwqL>&#!H60Dr at zJ;ul
zqha0ffi>0%_z}R0Tq=kMtQC3c4B#>1TB;fiSTAB4)?wo~z;eL<fi?D;$g8gcFRj(;
zI>6Ez?h9+aaiSO>)dGIZNLh#=8v+6=DrCeVQ*tl^4ikAf;U|k&0XHgRwupUTaW at 8w
zSV=a3UXt&6z>I_;Ib)EB{e}ZpNqC9Y5@=M4H3)11g^v{I2w<6H^ao%{#Qp=ImR%Cg
z(gyZjFX8|iFqSa1T;Ea&*MPlC#DRejCq=?gfxhn(YyrUm!aA{FwGoV>M5CZ(fFs4^
z6r?+bi`bWR!9$|GKi~;}h`h1{@b3~n3%FHkIZ|Vj)J at RR6FMaf@h7BT7X^QRFw#kQ
z8{n~`bHGwCYLhVR-$sLd6HggaX%k$wuIR$*67l(eMZr*W{_CI*v_cZX`=6>pm#x!g
zYGtx*ly&{n(Q?0{G)0B14Y9Yk^ue|{k<Tb}VY^SKQRGTyEP+t#SGI6JoAZO)cw3sH
zOvXpEx2xOBmKGm{dtk6R-_*g|bY(L*-Qqp--I1y<yRURgCun!h$WQa>C*w7sY1W19
zx`Or3MxcM=yk{dU!NiA80nHw_kB^g2(fap258O^TN?#VF3m|O)=@&R`rjt!k%&jOD
z$`xvm)~7<&j*1V1U8y;LD3oig28->g7Tsc~50p<Vc)egz;I0|I^=znRLC;!vMVo!U
z7P`f|t~?NFDtP6C#ZBH;wv at C_bvB<~d=xZBbAFf;Hgi2>B9?YSx416Y9i5*n_>VB>
z5AboqjrB4=S*r9PkbV&)Qt24{@!SXtLl)z9WT1RofD3GMBgI at MmGba1V;D8A9hsPS
zzco+ at _U+BLi6v?Ube(L6?QZEW!jp}0^DnuKQivc(KZAZ&8#>h&@Hw){2_CaxJKua(
zD3k;}4y&;PHYXF2o5O)Q45ngm*bO#+>9K6YOP&k2>@w%0!R}+i<}KZi37a<&Yc(7t
zHm^7KC7O1(yv~7|QiTeTSj(YQTf18-Y>qiO&=d2G2VyP)&pz(Bmd*LbaQBYu3I2 at M
z-}swdLyV|Okf#|#-GvMCRH0zfCTuQ4p?0^F>EXu$&v^JT9)4IZgD4N5(q?hPIB=jn
ziWulD7zHM#0Co*(J}~_}ox&LUcL~X6Fh`}6&1OHLRWAVoHcuQ3AZ_Z><{3xbKs?8%
z8z{d^2Bw9w$GL4c{h7g7^3)#V--*JHp#K)=J@^9G;&J#PgUPuc{Cf}ob*aM;MRk4P
z>@@0`Duu_w=CRld9n{s1^vowA60=8W6ANU&Y3E$8M%+~6Zmdm}bG;gIQ-y~wnd{Yv
zo7Q at G-niiDr{@aoXj-_Uuf#6p5`=`V0bVR&2jExR(VciR2sc4^Nyrpt*rwUWsBxb0
zkilG|C4Pp-VoC;M5L=B%lRf+d_bd{m@%V)oB8R2`ci(oXc@~nN3~&$4O`7!?r2`2j
zr?^c6aKj5jhswwZA;%et<VDpifP+mKd%NnEG0J_YB}~n3;M#EDi(}DuIP1l!0Xw0(
zeD&MB9{3M&?Tay%ca2eG)be^5B!n$8FGh-qlw8eg#9>qQmNDvv6qDCyFqfp^RJBmB
z=nv?5LpT|18B7z=_2>2A|FCf6ArZ~%d1F6{(lbTx6Nc2H>IvbX15qqhj~VCtgR;MZ
zj6NZ7rl2H&#~S7m$1qVxm`BXjBt4nclipy#S1(CPo}{7#KfNSH at -6#ja>q?wT#j^&
zvW?aRD>(e!OJV2=zWP$zBY*QV9n0F_ezfCSJ8~4Yt<o!awE-5Y45V17r(&a7=k`nO
z^bIxZ+%ix&JUX|oWu4pFF*9#OpDARm(+4XQWC<g6tek|W%}atiA~$b at WdNrYmX?=*
z4-<M84tbSu80eykQ%GO=FK!MMEOr8~lB{b1Bf)w<dwXMtm-T)<vrR!t+1N((0kAP{
z{0#=Rg7^v2uYw<JBO8CpV6qnr=Ws#1U<^*0#u-fvzYrK$^f#UsOq&25BMX&aNu;Bm
z5C_QW?1``+bFV~>-R8c*2;7Gr+cNi!N02rM=|N>T78hs)8#sS&T!AmX5 at C7AQ|`jK
z-sLXvROz`~?<ze@^5r!`wP%XsfO?ViH`y~b3LU`f^-Q%wVkQxt;5nW&4H*l9lumg6
zqgsHYAX%Cygk(n=8R`J9H!(%8N=-9FGzBz}G=axbgX`x<TKvT#CC=AlOOYmU^A(-$
zG%9Z9dZkg(Zk{hx;TV at 7CR}kvXwuC4Rj6noI>Gv!(7TzEbe8ZsA^dSt1)>n7CQ=11
z^L`a7z9goCu2JYkx1|-YUJz;7EEXwoRUTU`^rD+z=SgE_u6G*CU8i`oT)#Jp`-8Jh
z?7H_Xu_KedV&MamJ`=ck#!qi_x#w-gY}59jE;C%tW!|ewMV@;CS3GWbq^nEM_zQY*
zW!Y;1{xP8tVw+C9xlAwbv4W0xkHFlkA!sPx at M@eT#QW at 1(Z_xEsZe{LeJWI^`Wl%i
zj+}l9|1BO8%I^_dA2{!n-*E5Ag4E_d6_x+yeJU#d^;ER5C&C~vzc`nX!)}(#1TUK}
zQRh5LxG^paw;UA at OWBxG0k@y at MY9hetM_TBe7AdpEZ^b1wU%%9 at Egg-DjrP)xy++k
zD{iThR4kkih5%ZY!MsFU+T9{2C{h8vp25r#iV&nl0v`<Mh4nH$L#xSd=b|O<Sx at WC
zfMOPVT4%cVajkq(_oG$$qwZr>xkcaoyjDKe`@B{@%=^4np5lF8E01{~sK)!eRvz5*
zxK<t{9 at oewYh+3i+u@d>FZan_NWBKlujPJs*QM+hsf(Veoa3%fS-X4pE^GDPz00oR
z%GV-ioVmYy7yk_GDf43H6zt(-ZodJa*L7v)N>B8IX|a_Qlwc9w+O(21%JzEV*LI8l
zF^S)6!vpa#KK@$dV2hrKg&x_g at MQV6C(43uQC=ZYM$C91O0Ib^eQIJ?*Q)y`jWX8z
zq*0cMXTRP!Vl6DVnTkNmHP-oIk%U_TFO%?ZfS2$ZMY5$0q`yIW4L|zEIP?Tw{l=*%
zBN at om2VuOxa`AzoLDj at 423T%L at +iD`ab#$sA<XOaKqB1$-9TKs_<i(~HRH`Wh`jRH
z`Id9QHhF1&QT&FB4e3XHI#-lV+)&yq<Hnmgq)Mi?$*f<z9Sf!iUs<vX(Kyu-5{k50
ziT9e-=CFQ&yoOKLYLf_a7k}|igyp6|L%qcHH@(L#Vx606OrLTsMg~p>%$iw(h6Z+{
zX>&oA#GVjXUtmi_W^J0lz;R&HN{QJ<7*kNee&F5_x%U{6TNVr4LY`uRI2HK|1Z_&;
zRBXrDP&{ktBam*z(w9*!rY#9#>O)DQojp=_!BKsKeptyYZlygADor;9!IQ$TS`xZf
zsOs4L3ca_)U7 at Oj|Eoe(^^#qyyFyhvdRC~a3OMpcG3S1Ts&J1A{V+<ZkePeiul4Hq
zRs}y^r`g(yTet`{eKof=C^;1*ML`T|#fb%xmXD`&Eh`~^0Ag?7XmoKd1h<;mjskM4
z;U|mtn$oWvFikqkTm{7H=v3j4^SA#}h~H=TiQi5;@z(Y?Zgv!qKMxU~@16&rbZRq~
zxNqFORQ8T+pSdj9U<^xDnM_5Oc+R*EA1(M`<b=6!h0SG_Q3fhdPY%tc=`|0VX~d9&
zbs+3#r4RM6NW~?~LS|@k8JZ$_$_>B`s2SGOTl9oubReH1 at d4ee{Az}Q1=uwOd8`((
zx7XeASP{utS{R;iwHtLsIOoHbu<jz6&BE(UBAv(j!Z$~bP4B8i^-9wK3m+V4`MCkX
zOuEKvSZ8IbN5g at p#Y+=||1JzieKE}^AQ?{Or=mkvo?oN%SqH;Pj{CkFGxD7K>_?{T
znzLk*Hwo*oAb%}RUW4=+S|*&%)*Qz3-W?oLbAMuc{I^)^-tB`>6+Tk at nU70HZM}!N
zH4A)xPNueA#<$kkEwS1_;}!AEWWb|<e*vt_r4+4zFN at e`5a6FBn->7LNIZF$_g{%$
z4fu$Js{tRD at Ls?+37-J`rGzg5{(`)*B*HZiK9>|Oz=uREyyQD5Ve-23fP~3AyU!#{
zlHM<2@`iJtgh`@%CHxlPMhTNd8zfvo-dI{C;bTzjk?;Y)yCqC&Suf%s3h<{A?hCk1
z!tsE20j6^)Bm>MDDcX=rsYsk!$wmvfTC|aoH=^?hw&YS2X%;LhsI!3ANw^)bMr>*&
zd8fNX;_m={TjUW*V!4D#&3GvZlF&+#_cZ~2TIBuL0?v`_D*;>HlmznT`ZvkpGT?Wl
zK)!$r0IMMD0f66<>`5QLEZLBk#<L`zy!o6d+6O2B=ZQFwyahE&HY8 at TeUnRHfN=J@
zq3D2h$+|ch+JQgBV^NW{1>Z$zHNN!z6!f$;d4o-EQIIzM2fWqLrX<swBBuKRz9Hca
zfZHWZny5|0>REstB1U0=|CTTrM1M(m4&ZANCQbCGgvq=5-|g0yD_%foj`jS;e-N at +
zPgX5J=qA>0=E?7Jj%{9Pd0ZRhBE!W$m+~vs2HjIhxHs at F5eJ3=ua<BVVDeYw0O-xt
zU~@~tmjE9ZF&Y5)8wo!JxJkl$0oUt-ZaH9k at Xcjb-P$>RfC%3`x-(NkCxaQvPr~P|
ze^mb{PnybhblMt}#!yNImwdEWS?!-e8R(t<Y)4lCe6F)j>PfcawgvyOZF10?<d+<9
zn6lI(w!>=26Sv2~vNdmeI8x)H?b9PJX(L at m;|{7%addf+X}gkY at ZF%W!G3h;6n1SN
zHu#`}_*LFfvK?PucO8a*ajY}!C(g#V!1>ZqpHW}H!=}nQgI~wFH8E%oUQ#m_8SsIc
zkx6f9BRgjbKRA%F9iK1ceOPBwuz+7CsF`w6++o%^b2ARxkvaGz>&!n!b|kI8YI;T>
zCHzdmCzI?=Jmn~;PlrA2ByWJyr{UE*QpN?t4u!;Rl>9{qv?lUbp|Igi0Tgg+(FQ8d
zL3Oq&$scsLhr=g~?1MbwG;GJ780_3JHN5XPp*fl$M_!wPYV}D5t0uLJgYPgrXJ<<I
zX->^0)EDwkXK$q-_rAB9)i)uhK3TYSXXJAs<QG{GHN>IJmQm~LjV3uokJc1Zqc#2-
zh(YwS=16l{Nwh;@^BWxlni!8p;qiRqe|pkJMiW46aOy`PQG{Vc58Je!_IS=mlTiq6
z_~_TjZ_E_B$*H(_))`t<plLF3Dxr^_W}P8_;k_R}j~>ICPojdx=t?rbu^lMT at Bz>t
z&*JP)lA_JvdxQ9LEYz~5K;Jao?ai%XoxRTCvQM5tFJjjx(a4Mk)JCIgSYJB^+3}Lv
zB-Dg!YNNyVHTgj6%b{1`Dy~pM&&WxygnWWqYC|m5O$wr|8xFeO9^LyAI|5j_hg~hP
z4*{$8uoj6O39OHYT_mv&1MBBupO at HC!1f~SSb=^@N)Z|n6rmpT$346nhF- at nET`n7
z;d>4_rKR<u at VeSyl!lM(iVjccR!fy9L_}#_h=uX0WFL>p$E%V-ZZ`OiS0zI{>~*h7
zDm?5JuS)uQ*b82jWC*Jh=#$+l+1F!!#H*4N+j03bxQ at WwzI+xwTi~-BpQ(F4@^T?Z
zj=lVUI1SgIbuOD|?Bk$V=h9B#W?}x*Phs_ZsNO1r)xC935_%2mt-<)@o^bROpc!bI
zwbB}bq8`!?y?2L8;AQrKcc4K(x$3HRMRT@##Qn^6)Q02J4HguLO^u-u6Aes2olyhF
z<Y at E~_dNM2>5hwJ#rnjCmo=vNJ-^pTw2Elz1$?M+I{L)gckgsGtll2uI?Q&||9gs!
z@=?e+##G4Zb0`fg7kmrwpIz?X+P5JQ7TlnJ5G=W8arM6G=qSFkZxp(KhwmSSKF2TY
zPe318OZOKbI9CTBu%MlI{ehIolKl}G)Dn9C#yerK{;k^Ii_F0N>&Qvnx(v4*h(rr<
z=Yax0SZOaTBrW;h$MNce7trt4IfphO*=`3`e35`IS%-W9fg`MSUyeYiz<SwsL561I
zLtjNhF8}#znymgVe)#Chk-NyRP__O^IoiM>r{Mbu_&yEa)0Vef4g&oB?}-Gp#^o at S
z{2RJKqa85h3~oOfGyP0uMnn2qS%XH8^t7H*hQPW3r>!ABz_yIElkTZ_neZbV(z551
zQ^!@>V<E0-ZxlQyI|_6YgBNLEzNaeW4-S;9oQGnxc}dxL-oK+Pkr0J4(j{SvS(F|;
zCU&hn_I&rKvi{s$d+dgXY`)sD-S|{{OpctA_29Jvujs*N2|Vr1&k+=Pf`aMcut?xF
zJ$O#w^*#9Y_LvX8IM##3^N)=PNzvt7wc5ygsBp#pRWM*--hUK__aA$66pS%mNqjhs
z<Z;O!(>;b<(Su3F`CrGS=RlK9)s;2mm}y0TNx>oUCRmuub{tFxIiQ&_(<*OGK4=~S
zS=B5jEPni(_|YUJ6)k_gZnYGA@#tups>~d%Dbf%(iYZ*ez%juzi}L4`_2aceRDEH+
z?>IOQCpSeR4ret*Sc(Ln30^+M;G>rC8o<8b?<e_B68uLw<jeKJpK|gdrIcO?_`_ld
z&sZs|^>w_2-mhC#wL<XM1pF%ahqlRyciAu_V-eiTi2G;_?M|Vx&QP_SxU?hUaG>kH
zgJ56XqquFJ;<kH=8<O;d;N9|o_f9Wwi|ADAao^?TK22~x+%DJlPnudboCGn4DTaWQ
zlcV8+%!x90x7L$Z<YtYI_9WEciP%_IE}^}36;)raUj=*T_|hptY;17|xfQ9T-1fV-
zZ)kK{N+U-wUFwkYnzlm8?kKS<Qa)fg3G4#e<VA<|ePWSTn^@6SsG}Ql_zYMNkGOo=
zinRR`H#=7GKK5ub0?o7!e&+Z<A2>OFu?DX`{^Xd`H`LlJAN at bHJziLCU<KG4#mDn9
zv7U<lTCLAGZ5FIYc}dgk@%IO|LW}!<`($Vy==C at 0hV9*S)p+%{(a#)($)HVo^ef-)
z>x81k9?N#rz+ELN3-psJzS8QF9)p$YC&*wrl$FbWQpA-m>l&i{m$#pf!XDRsa`|X+
z;EBPOImxPjo^2XrUW}3;0$Z7`9gxK8@*8pt45fwbnoic}Wq{`tr*A0H_fkB$p+pCa
zE^K=&+41)OdEX1Hbi~6 at Le)0Q;n`6Covx at MM-xa<a6)?(MgnWP+2y#LlHE?dXr|))
zD%A?82#XJ$n2K1;d>3KKA%PplPdUsfAo#n at egrj)C;dV+{48MY+>+)HQtV}QYp=9e
ziY`VZ3a#PL at qe1>26^QwZE_NurcltubEbSnp^05xYe_Y2YS^?Dy0C^Et>*DkIEoJb
zEu&RUdY;55=`ma;EL0Q;=a91<n=jx4->pJf*l==9#PsUn+}A~<sOinEMw+8csj}dP
z@!&QcUpx6oL~ivkNuTS{hY9*ztUnbxei1B)F=UL8!2~yh0gi$j$g4lr!zk+BL$xpv
z3tR at m7Eokd;o4JSGNl54cxs?b8H~@LN<o#FK0QsQOvSTKheD!@PqPt=w!C21u1RnH
z#ij2aP<a+#Ivs<qlzu-3E^ONGjWSg*=D#0@^!Vua6Hq?(J(FNLE&LwZP%!XD;Z6RZ
z<!#Fx1#H)ynf0(`SDD$4t+`M^m^oX?CVP?05OOtvYr_~F)krU=#2L4;QkUP at TSqsl
zgWn^=r14A}624E8i%?^8k&U~0*A%vulilf4H>}>ssoLQ})A)Ux64#%Jimv0-AT<`*
z3XFIAhb^aMcO0L#alZA&b~%~ddjqiJ%m7*AJ<R+Nk$Js?{KzT at uEINEaezrqQ$<%t
z#}tuw1wj<0s;$#zmm*rSsfWM|90gLE^_;pLRecWJ6#VKB!_)?$;Kz!T|36!X(Y<9f
zTCo3FvSkc9OSTMHKPyKH>$Q-OyqFvtCA<c(Z}GR1x3FO}vJNHR(y^k*CZ;SeAypD8
z7AuvyzHX6(-mgn9J|=ie+ePD`Hf6^O&+1)f`G0H{P+ZXOf<td_hn0sOSW=DRLfP<P
zo3d;eKPZfW+gey7y&A!-u<>^}bbNzj1<V*&rC<OY<dyCXUe%;aYozVrvEuw{q}!Ba
zWo0|c-gCfMs-$sVb9lmTGAbH!rOw$6IIqZN!W6m_R+kFnLd|6YXU3JygXt6Gh?F7M
z<F4k=aD(52Cli{n$7IMS;*@iJC&;sUswWb)sV6 at N_-Atb9z4>}95$bev{Xuk_VhbV
z;{A^_96}mBc(ssT&%D&Br2JVu%2%6UB69fFxo9*Why9oUPyLS(s0`=*7;f2VTBxAy
zai(V!i{V%WD?RsI!%BC{t9KS(vBw$H7)RDZOS`CVD7>!)T|P&N{FJX0sfQGt#xz2q
zzpoc{hkOLy at F3q%Ia*Mp_Ha-Md{z&hzF#;_J|EL7*HOSd=T+7Hc=q|haF$<tKD1Zz
z1G-kc_k66(SAj2`?>E{v%pPORXB<KrE4aB{c3w^5ZV+!RPQ4Hbmy+xYQSh91Av7Ga
z6Dvb%(#>+yh0qX5dx-9)IesBhHC5Oia`E36M)*x?f|0!WWwIjTAs3TnzC&={#qbCi
zX<Glp-!=q3*w?;uaLL7RSQtLO7&)?1vWo9vWs@|?Hvb1S=dtTzWPsEC-wCyOgNktc
zPjO?PbdY^#nnMoHCmN#Qnd6Yb^Kpo?rP*K5ngs1+L7NSHwOz9zmF at WEaa{CM0{Lb0
zPf<vVPyZA#D##dWTcDr{prS(=qssQGA{9|u-Oyf&XoR%MLwhTj0;C-<w2y)UIdEt&
zdB-&VFFf#40$d0my%dddtS?>KN~2=T{F(r_+q7R<^dnyO>tJ*k*Zn#S#adf_U7`qm
zk~Ok3P2<@KGqZ-zoH`-fFw-<?f-hyA at kc=XzG?>P)xG(FB~*r{gi3^uA4O5L=7aWd
z^vB3WNhMT2_&AbFD1K-OMZ+g+NC}k-@)z*=dt3>%eryS4$SI+e at Tr?xLe2l6R|Jaj
zF=v-hkMDaV0*wih$zI?0`XJOVP5pOy33X>v3H9*@<+IT%kvIQcLNV|;`ArGc_gD$F
z_s0^-7v%b*kj}oiXV6`_WryL$t`(QAW%mE)oo@&GtoaR}+IqTo%R9A&=a1tz69>C`
zZ_1mupm5i73!41iE_`asb5EqK{9#w7Bfo0*xa0lSF8}5gN7~XK-|o{;+~Pm<r9;=k
z2c_ifIyhR<P<QTbc~$SVPyPP;N9QJgnHHQ;S#fd_ziii|6^f7d{BS7q?oDU;=C|Ik
zeE59n^`e&y7qc6)^9;ArIzO6|^;$B&W_8=<yOUGvr(WOj%D!P-$B#A1YfhZrH{sX_
z`HpY8winF#qVKm;p8v5guXDA{vRM4C-G2Js<xTCyo6Dz<w#>LbBJ%Z^wZ-p!G*fZ)
qIdr0A^o!LW?Ml2p+h}}q{qoF7kG^yaMGwAvc-Qs6o|k?5-~R)`xvUxh

delta 15098
zc-ozNd0bT0`~NvJ!z`><1pxsWWLH7l3UwSu90#XR$J`JtDb2{t+)6BKE^<{YGUS*d
zB2J-XrHBrwAEiP|BQuv0Q*#Q<49)rsxG>lVzvtY0XB_qO{pa`cHFw_6`&rI&_H!<y
z<+PXOw3q*YlmP?!_fHwZe^U4Oe~i1#k1RqCNfEjzEkbAEduPRAjBy<~BH5zS8B$dK
znf(h2tvS+2>GYMFh>o{4^Lwx2kS&U}XkK+%HP7{4&Bbxppa#Pz#SD$6_exDh?^U+A
zWK{84eHV^3AkZL%Mb9Xn60PdMYBjsf*w#7B$vTk{P5jq-MIMIn0n(x9uR1H1Y9Xo0
z@%`#G{sApoW#uIJ{;yWKeKvgmt?_f7<__D`oVON57_`dI)Ea+<3BDJQeag*#<(h!|
zwNS8kCX&m at bE;vX3p4>8FNlmr6X0wW at iDSj6^(PrIn`1>NKyK-nBsYo<sI)unOw5U
zJGKi&Ym9C8-*U3Ha;VyAQs at 0NK24N9vG7dx=?~9rpPysvG`?MX)%P=Yc7AD4=u%_|
z4b%81{B>VyM9NlH-WaLPuBan3d<Wy7NU?7`wDUpVSiIBP<ohS~yToBGPOSVA>skLV
zBv?j at yG)MiZ|wYcyAeqb7?Hxqh at QF+vdW0$At1}(8}jHHfe(_nt{>ppWM9|l$dF8g
za3Es42=$Z|LY<@UVFRP`$z)dCCXTKz`-OWHS54-3>!<4LmMXgq#6{MN-Ns@(h9m?{
z4lXh}PI#qCOT7yZXXP;eLIu}pmAi__`k<M3hV^#PER0W(%-|^!<!w?O9EI<YAA^Ts
zHSrG#jkwd`t?^B`Ytd&hIDm^aIwZK!+vq?GHQ@<&too247;hu*g!adGNp<L8+?QMn
zea$b7l^c<6FMW>eMqcPK0b01G$9!{^GEz1M;kTS=GwevsUSSV6hh{0|z at esVie^QY
zQbutt*v!jPDk#2?g_P81He~%Zd_R??JVRv}MEJ2eCJUXW(qzqWrxhB69{{R44%?z@
z<7?zb$I+)58H+5-3<?yQPd*7#n|o%VpQuYR?}A-U-X>eLW~|d%GslCQXN#enrR4#q
zx-D|89(FR3yXC<Jirj4vF2)u!lqc_akjq8GyB=Jj$hCQJWrPh6GVip-Sl*~i**C(n
zv?cF9%9a(Dg_gaRTOSSj=yj;A#d(DKd8BI+hQ+&fTTEq&7FB$jrNlBAg10JDjGc}j
z9<k;gSUZofnC)fk?65kI)Zh)etPmWak2H6(I+Pa#fxf960MCZXf$;p!c_b at D;#;f)
z{5{W~;Q1ebXQZ?nmlP{EAYke%7ipP_<CTlAN#XnCxK{L%(a|SYtE~7YnW?A;ybh}H
zP|v7N2tC6yW`Sy|nIp82XUAAt9_74cme$9(K+CPixEKp`YmMC1mPW at nL-r{iO~iYU
zEjq3?zB0wK3=B+kV1Y@`gv+*aHjYg<w)-ocM_ at _py#E_{rsrr_A4+--Ht*L>R!h$L
zuDyK9;SuUI4Q-2d);m#_QaVi2H{tS;Ct+<m)i8*Qvh_+vL0_zuT$40+foKu+{_u>e
z_t8W+d%@6-;;_*{W at -F7w%F9v5~fWs_|`$!cH?L(*J;ALM$v`d*xB>$lw=%U2`V{<
zST)R|w>b<Zr#P6!_*pVH@>M*JoR9n>=`SvdlNsA1;yIW%l8YR2*0btLX}w>ivcbF3
z8zOi?A(#0jw8?rzy%56^F{sz)_(RgvD>~pBYzMl$UhHM|Yh(M#HKc2FA`T>)=#6*^
zIUC&vUn-7S;Cljd>U$ZmE;zn-lI1beAi}wr=P^f8W1~hguuf+f+w6n%NHU{CvvJRr
zdKe#bg-ytZYBOOZWy83+<UBl%Aa4)NZ14*qrLhr1sPt;14y>Ar8(_u0>^uzkS03A(
zhgobyn)^K0p+goGG{ybm)1d1l_Sl4k9}$?$et2~FXlyYLit;*cZ2Rv~qKo?i&m$di
z5oU|VfAssHm%vhu08baN<Tl_bBJKrvhJdjWaE8bm06!&Q={Uef5x)c2AYhcK at i+7k
zG4O^^5x0Vk$yrZI<D*p>!n}QNlJ!`8qYSr`vc8M4gD^?`;HgV`6_~1|;qbhfGz_;}
z6O!8$K}9wVo1=OEp_<l_K~E%g1C8d{hj_bn$rDlu{>GY{8X<>WWrOyDPkVkIj0qKt
zhI{1A5w9d!HavOl>PD%K)GJ#hccdI at RtT-;yC4<yl)&_E->8OFL;>g?>8k6HSiMQt
zk?pvc_@=#wGe}7qE7|KqdW_1)-;wfB6C%}Y4!g=0D at M`l8K1w5ZB17+eY;mCTPiLQ
zfBm2MV{%tt8-LGvn8VJ)&QWX=Kf3Q#4&mzUd2Advx>|<v+3>shM#rHE<j2vmq5rZ9
zTQAd#2#;HVl)7#)-P6#57-QQ%-K~tF55_Ffr1!)3$h`E>fTe8wy^QKEM#sTL$?A%B
zvOaxgz@`mP+E=lOdZfrPw(l+`k}*c?ux5;ziJ^IS8poP9WHP>pHRzGoRbzYAdNvM_
z3DCO+#$4Z#&TFW=nreJg0ljSqM at Z1{@|#p6fw@?<K;O-!k;rt5bxPn~F?__LarwxX
zw^{<svpOb0MscGz8)t&>zCcbCNH1U30MZ0^$aF(UK&OfMptHlk8q%0%rO4~t7Eh!x
z%auZrAPpi7PxUc}rZG!YeCo4-3+5|Dk>4B!Dc!se&qKRZ;WQ>!um@>Zr;Fcp#~p`C
zw|G7q&~-y38z5w5PzTsMrc$0}zUwlzG4n=08$vq8)D6+lE)R at OxdR=AgaR at dR^iqi
z&MLvFZhdVgqZ4|EN>(@jX&R$Zy7^D;$&77(^>%CHOF^x2t4rL9wR1ef6_SvQ*GFeO
z6zVA&>c$UlkKqqR8fH+Y_!TM(n)E25XdfgkSF>@z_a;AP&~@?j*i<ra>@55Qpy!ip
z+K>u+qarI+sWP at -JO@&9D*DX3Q3}#2?SgGGS>TF=ookEF!+Lg=JU7l976Z*8soW!s
ziJiSzc?)ip+yeWrb`Zz7sNgELz9B>%z{<wSP!P at 09~s*}|CgkU4~uTqBUukqB<sbE
zG&=Nac{?v^$3=;Dm&p9_VX;4fT?*LAdArvjVh^yCgC##sB)MQ&N2<n0MnfL5{$Q!#
zEywb93Tj6q@^+hveS9RGUK!I=rOIT-)uW8<M>5EQ%y0>;&}%dMVI}!8^JzSZcu#v8
zTga4YdPzYuDVuf}?;y`*eTx^6xal97={h+S)(tOMW6uK~0$7%b0^kB-&<H%*3wW5Y
zmMVGx)(Kb%>#$)2U at 71)VU4{h at Tz0Li)*!NEnsmC_l7m!Fh+=v3jsfEKxQgPd_gb@
z3JG;c7afKI4iR`M<;M$HmI`>Bh+%Oz1PWMAH-Ijp?-Ia_h#@&cfPj6v0#=B4hQ{n~
zkP9{N-vJ6QG0?|=C8E)Bz(~X$P|HpM`}WoNcV92!X23+ie$aB=i$%N&?42V12jcV-
zus>9w`-c>pK{yS<I-y`y92i9kMgcDXju4WQ(e4-^U~k$5g9LkDz at u*nynF%R>msfJ
z+$^>nt+7e$CTQu=9U_MKqeuQ%5PWWekygOI9N^)Cv)^-I)FNWozYTg at Ifo1>N)ue5
zu4+T7Vu<6}NE|~#o;&0v)A%PMa{jq3_*d&2Gc^)P1>6#zkCOUusj^Z at 3pTcY6iu3D
zN6ZS;hU__!is&`VPz0gYuWn*5XXOO8aP_IO5(yUtmXeZp3crE7U0_y at sg0}GmP}{0
zxqIiiB3W8p*EG2Uv^%Efq<Zy`aB9%}p$*y9M6zED!;NJ5i(zJl`f&X~bHwH2<>2~h
ze7m0q?f~3eukg|ZkoJJ|JDfE~(oIpwtsn);<!g}ItyI#A3lD?c$5}Z^P_DrO7TXm~
z+FYm)lus=<9dEJDRWs6kPOv%e at mhF9TlAn7+T2}Dk3^aUUO8ZKo2xH*hqjMp95=G?
z8_-P2$_a76X0C%wgwjrEbE_CvbZ$KFKPoGyr<Vh6p;x%^Vx@<I^gA!nN)IH*=Y*Nn
zbTMwldgR>%T+bF43Y^2FAUEID5Q0XuViWV;_j-h3-?pfzC2lshZ|$VpVXI5JPkFjA
zZoQSs$oUAo)B^hK7JRBZ;A?b~<2|xrJKuVhFBF1qy$GwZ9X2Nul^a8WIRmCbaM%sD
zo^o3rC1o##n!m`(!F^oEgspoXJ|=9fqSh)nN^IR`=uS1QF8L!nZb;!PKx2IfrPjB)
zB+?jtvX?vN>PKR7;MvU;*Ss~?5bD}--N6 at Yd<}ov)YJ%-fjq|$>?)j>XYmEoHkp>m
zAl&Mbrn>pDz%y?CX*WMIlflT%k7zNw;9zi2x)lSVvtSgMm^|1u&;nq3yE{d#5AWoY
zO=G?hPc~b__*T6Hs7o3%Ll_KH3ee0jJb4RqEH_e*d at kvkCS;3s*_QvC#+YZQT*l??
zRN+I>fAe&1e4TA_JN%x;OmYV=zwG9JF1G6<QRhZShe5||k-05SyDg4E2X(e$9rJmR
z$Q<F@#0=S&ADH9Oh~@iSja9yLjz=Swf9B>bb37Wcyxh&NH!OVq`8j+$nij9>F0yOc
zcs`+<fD1%y2fU&c-;2uv;Wh}%`AlJkl`k?xj&P5MH0GvK<X>@HJfFtsg;t}|OgBH-
zHH&y at B6)XiMA8W09 at q}g%Er=@ey*Wep0YlzxEICr6jz>1&dyCr>PkllJ<cGS7gM<q
z4mKfx<c3Jsp_Ve0dw|0v`IX_=M&`XT(eD6Mm$SUZ>5T1L_L38?M4LAoBI&5*bTCLL
zTauNFWn++3#i at m1v*lew<Sj8Kr%PiliNk42K5r2YXqi5g4z at I=f$G9J9r!=NA9-lR
zx$8MY4}^3~!H1Ngwb=3^f6##_<}K3=3w%KtE~BH54?LAu(!gW&bEsp8pred2%R<wW
zSl#Ij<9&6aG{l`$Ki*F#N=aPP{+aA?Qztt~yharaRR_vg^7p(DypzaZZ5h(R&9tv*
zf&0-X&Q@$MXj!9^aVkA5RB2eYSchVwjE?O$Ta~v|M#o13_`{>4q8vC0Ntr*e+w*j-
z(*??8bP1z%EPIx`F+UORh?e;S&B?5WUs~n?pTPGl9P-L~8X`MUVL#eezPXLTyu}XS
zgGK9|fV=S42LLHNtPkjzZ8E+TO!a=SF>Y>yK`o<xymW{6gKcE<Uun#^T>c!+i`NZ-
ziBnjEiQyIl1B?FVCf>9G&^fwL at s?CN>ke_8uFmcV4aD+V#PAx|4Tk6Tx@~v3ZalnH
z$)^XE-CUNZ=565oy?Fz<_ga|weRsL}b3Dt<b606;re~F2r}=VfTJ6oR3F830Li?NU
z8JqbI;B-31A`_WssgC!YNSlU^1zws!dEaj|0Mj8^B~|drjy5ppAg41i1&hR{(Fmr1
z2GAyOTc(iH3nI+nLXjfZ!)?pZCUEoq?lfeXo at q$37VuR##>NW?m)_=^H2pypO6^of
ztxK=*y_+sdS1GTh;Y%;lDo_P4ou^e`(;rl!^b|Gabw~MLbXk5)K3f=J-Ypa<a=YBN
z6?`wc_>bIaY|Qjb<3r~u4zJYhi)3%G^<z5kzew%qq%X~XWYVVt_l{xrtxngxEnQ^V
z9?+Qumvf2ds!}@7HGxZC&=2YC)G at xiURYW7nSr0q7eZ|(P;WNf!+R{Rqu!&4Wl<0w
zPWCN|HOG3MeM+NUXP?qg&$CZy at Tu+wCX%J6pZuf3A)(Zd+Iqoxr&Q|NlX(fdPDPvA
zJWoZN?wpF^_e2=vn{Lcuq_CT1GJz`=h}1Q=5^ju(L(OM}!_qi{6u>pmzG(CU^tI<{
zXwzZW2Dxd!=hnKZ*3ExTH&)?j!pl3{nsQ-F6{Rx%e9#wAaT+sEX>N6iMZ6*f(5f^h
zn=gWwIGzs#^yYerj!~-UZs$~r-0QB^+4Kq&lj~}oO)q;M*ET)- at X=~hmg`ux$!vP~
zytZkq=Xq_ at NYC@yrV*a!wM_#b37X=0UfUG&_;GDhq;OoLo2-E;N@#^!hHg{PxW(vo
zXnqZQ-CY+st&5H+o9(WT#I<{uI6QanlDnkt^@!<L9_-$Qmx28)E0;M1dpMojOX2f|
zwj`^}6}{y9)R-~^C7AiQHqA7Rl4I`pbq~cqNaJ^@d?bDax$$~LpAU3Q4D`rWnJdeZ
z_uNtP9*Sb7Q3k&9NR*tcT;-`Tot<kQoHR<Nd7d;%rjiwJ)DA3%1vg#hZ at y`Cd|V>p
zX28WF{u6K^r<Ns~TR{2;q?Kgu(h>MY^4Zc;kyGeEwj6 at -0?Wn5Ni~WFM%L4OOO(?|
zNp3`Nsy at Wy^gtus0^I;|BKJf5m-U5ZvoU?;(eS3DXGLdmPC?v;i!~#^@#<JrJZ3|2
zql6um#bQM=s_3x(`c at 2>-Y2rRcVQVZnS+9nCL_VwsLBfI0gEs<Qlm+v%suk!+hOK9
zy&BD9!%ZKsON@^4eWu-PlYxPg0rP$WuTcW~xoK-&hRCkxS#Mx10<#wJ3>*i_H;T+W
z%9sN34gmMQ$ekCs6*0i&bBGCG74#1fN>e{pVQf1aPuO>cK)MItc@@`@1arKQdJ;|a
z{$r{C3rF=0y8cDk>}p$VGTJ6<2!N_PNwGQp;R<az_n<-_=v@`s^8Np+(3X19uG&?h
zE&Cs@(3V}m(Km|W4=S{!;;{<-lrC22P4+FHtJg*~%eYZmb;Z@<yfBsQT4r-Va!SQj
z5|bB=uaYr&5$1yvI#(3YKmQopZyj~AP7Ift7wmcTQp1fGt~JF!*<qG+>~Q8$t8ZrU
ze{XO9J5cyO`>pWp_?vob!VO#PdGwD%)aQp~;4>0!WfS&~xSwLYC;2w3Bv5Y%Nl}<g
z1(!J1u#Q~K+c<dg9Js+|GAocC`RnMJxp+e56In{kpR4_0J1f>dW}ze1D}tt{WHL%b
z^OWj=ORntS&{gn+Q?x(VPvj#WvI?v04;En85a7020=&1|ib_hN&JT^h>&dOV&7bpO
zOIUY<&Sw5~CY72=cK))#V at GzD;cB_5r<n`%H(##7Fq3X_YNMk}=hm>GY4XqvB>r3|
zjw1<NJnl+N+(dlBx{Z5Z?)4E2t4{L7d(nfhxz2uc%D#V<PVxqR9p>eqg~_WIUqegy
z)7krH$lCY%1nqk;vEBZAtS8^=hVd?PrSLyq4lSx^CzkgYdfA}3UrG11HnU9QZ at 4PF
zne^)o_;<kaOeAXnd_}-s-heNQHctU=5_$SA?>CX33;2kLS-^)yya8~%h<5`1O2l=5
zzoc(0sc-^>FGR&9z;z;~FZm7$*q^@cJSbxN&h9 at Vrb!<VF at 3|iU&J)geIm{RTq|Ol
zXpM;9q;D*(qVO&#_KLU^@E#G<T2_m=3Gi+a-vwMH-~c(`U4WID2wefp8jw<-i4+F`
z?-Xsq0b2wc34J3vpJFpO&}Jc`a}D5iBK{GuT4-uHeW$xz<Szn#OW+YrVx at pFtr;iS
zV4Bcsf%i at U{Jg;X&Ide6v|kR`yi646o9jPCha-UB77M!pI1jJ_Y&rnHDcaLMepR%g
zFO9Rsgy@^knS#CVHNZ0j>`&i<W{Ea5W}&UzsmsG;{<<W5+*-CSR)Y7FBV;%(*}MK<
zj7y30!wGnyb=-z}saZ;!^bR<yph;<>w?%vp at GSu=-vHbyV%kD20#@k&+Xajqfd3IN
zreo-D5$gfp6ftd~zeG%5)nB(+-!GkuvEJ&~d<WwK>pxo-(%(8|Z{;NDCb_nCwRwOh
zz)44oZzl3tqzSmM5U_VE at J<2yIe=FQ*nbCL`bT6xNNFzE+!b*h;Nv3h0Q{YRu at -QH
zh&KSP)&|_Q!|nhp*qU=YM)efnd)s!Ti>NA)K|UfrVD<j!XKCUrV_V1R8o41DN#Kr;
z_sK23X-Kc!;cIN`TnC>{qXWHUY-|63cyAvcu!jCx1I|+BYHVz?{!MbW$HJ<$c6%re
zB|ElH3%jX_a2gDspl*dxn+i<Z<*3GcgRCC5qq^TncxC at S-`lC*&U<oW+gF{=!|*TG
z=m`0Xt>>EHcxkUrtIp$KPc=FMSCQPxXuO1!RSw57<YMLE#CJ6j9W(i#8%T_8U*vOM
zMn_@{kKd-K5jhci*yxzKo1}h{-se}NBj+65ku<)FX=(n5|B-^%RJu2D$evd{685x{
zoE}P_Lq7YY-v|bFC at k!v^bbOyHPJr`g`_q3A>h{H4QPfPbu`QA-*dMI!6%UJgB)hn
z#<sl!Nyv_gp<TZVo}>=2&uEdMX0K$hYEU^@_zoo8j((v{tcs1V&gY&VSAih+V0okJ
zHssW8205`K;-xP1M^+HEi(NiWg4S0XOj4vAsxCxB)xK(oLG_Zxh^&&LD7&oQXJ|BN
zqTL#q+jHsv^i&!cwI8)1rcZ++DZ>aJ^-~_VC)}swaTjv-(?23EWFdT;Rj_f8Z%LlI
z!Ne-~K6>8h2)a+sefBb*PIR9~20X1TO8>6 at V4j-ugZ_A(%>O(wYA*QRqQ0yVYPl~@
z*D%fH&8{&zx?Cd%KA(l(BH=ru at LZyWr;}vw9ESfUWjhn`d2(!LROq)2UeNkd=oPq$
z%jD2AQras)hl+OvnX4OQR9Q6uR9)Sw?IJr6SgD&W71=?+s@&`cB0CsZFE`7H>=VHH
zxY=bQ`y{YkC_9{|=ZhIa8-gO(ZT^CrSHZ|@`+XWK=c3?y2|c5wc0**(&OkhdT-y~D
z`s72ERJcR*A?m6iv)ZGU-Q2n$k6H$}S#OV82D#Y4PLEp3-0W?ST6(+L>mIdaD68e^
zUmvPvcenYE9<@ZqwkzMkZ3O1_m8<aC1E0gBwd%u&)_j(pdbxjCH5+bptjIKUvm>L!
z><`=mvTgTnY_U$Nwn|`iS6UPCN|J32B>(IU#q$A8$8)T8)*u|I*CgG)$HsFKTd#Z2
zqMzS&TAWdAeKlq;8{2j!5_^pq_aqBygToj-<M)|C4X5NNJcxan{yOxN8+66`{51Kv
zwx7 at ReFmzPMWGqwQtdQ+$oj;-X}Eu`E!uh5*jC**p&oh3q%32~XLXa18kP&L3Ha}>
zgg1AuNq_}6;0}f*w~W;9pN0!bj{{HQ>*N`D{y^S65Rd<3-FqMpV+R>@(2Ng|nuGl!
zEC<5U&~oL0&G$lJ{o8bapMeL~(Sy3RxcE>6&L=$&<@vxudm*1T<ZmyK&kkL{?N+X?
z982~h67yv|zG=<)65{r;p8RSc#_Oz-!xtoY5xMkr6rABZzMdl4<3px=vwH9s^mnBi
z-^7U;|Gp>TdlGz~g73*Io2~=^K7BobqUP9143d7QtWj%v_B}(o9*v%MrYx;y<XTCM
zT8DK?9g+vZvf&RNKf<PrHDm89I0^p~9NMs!<dhL*wit*zejnWF6UW)}v||F7XkNXq
z$mb6A60Pd%qBS!T$C9;2Bh8@@1sRk at A+l_w1CR91)yH0bB<fXmjxA=xpn7l3 at P~MZ
zEqam^Ngm}TGM<+`#s~7e(v$b)6*0VmA at -xeq3Xxn#_(DlQ6CGGZv65Xi8|Je6d&s!
zG(wwWP1Qu)$N8%ctbq{-Gx^iO<ovN^Pr{(#<TMJa7GrF)ML!bt#AA$u6nq<NHbEmi
zqb;d1WhrHTCK-!`n_WKaD2FD1?AOR-DHWcY6wv5FRy0aI*wmrw0$5ex8AIcvD5<83
z6VdRhH6qehy(^S1)eVhOqO$Z};Gm`<5R<QG;ACLRM!u}PdX%QGqB|_{ZHL|=;~FAh
zm73QOW;XFoqdj~kfsabWlL32!zmMoYmiJG$OIPXwceBz0xtMC^W2w$?r}}Kwnk}n%
zf3 at EqynlR)lzNx+H!$;f_iXAuRIPNSFuO{>WhHfK#k at nn0|(wd=dt4Exr=+%U0mP9
zN!0tG-Q`XG`8Lk%R!-)XXIiD2 at Wf|I22hi%5LsW4CQeeb0a*zWv0J6Nw2j#8p;7MQ
zmb;64yK0k&-l;0x^6mOHuo;djp1{Yhu=52MD8#f`*p6T3_hV>MrI^M<-gK>9%BfrO
zMZ-e6Zx_fPvCIIwh!$zVVO_TvtkEQtw&ZJ-H6|_%7Puo$ua*K$c*0iu8qUiWMMofE
zkH>mFV{H3!3;FE$)L|vJRGJJg-5sSZj$b at rLhp;@;y8&|$*UTT*9c7pEH5(>C)?s4
zjB1&TXuh8s90PjYZDq~&hjcmQv+tv36~au=BpSc=et6o;cGzN!ZIy80Nqidg8Kqxq
zw25$0>w6J0$b_<{a-SEl#Vb1dYMy<_?}RP(;hE(nBgrTFn3p6g?!4I08}9Xq5MfN&
zNKMbgG1{COlb%5u*nO4BYMlh|?81>7igaCMQ#TZ8fzgI+=l8Dz|32^nD=qcV7onYv
zQh3%>|DY|XF{%9#g7elQ7zSfZw>#}u`i*NvuVkTEpE4EwiN+Xm>BK~sJ1IZF+ at XPM
zMol=(${_gWMjwi5M$t~88ZH~yzuD!DLA2N_s^%`KF-Td6X%wZJ#mDb7Dr=-=Yc$D;
zV^U=@W#Q}zUn4xGvvV!2X1xlwV3{_g#-vd{Q)F~>ANFTjvx;^*jZf2K*mPK>5DjOS
z8r!yBCl`NMg9FLzlkbORS_ZJ+7SN(H8=DPE7MW5cfi<JREtB}38WJ|u(qGh1b?ZZT
z{Zx{DD)?y)tcKBajL?w;=lo=Q-Yx9WA2VPSJ={Y}U=-##^_0y+55|?(dUEzuuRyQ$
zk1m#8mx$w3KRlZxoSq`_auD`(Fyvlx+8Cz!Xs%83{>aAPow|oz<YmNpIvVdJ>NCUO
zN;cz+K_b6Iww)P)mE`J~(Kv<l{xRNM!vEe`pV#YF{%!8g%9a)OJY(m*nboi<Z<%Xs
ztH^;$!&Iu64FmB4oig<D0T+W|T2w1riG(S*dbT#F)?cfv^$Pre4xQR7EtvoQm0opf
z|0t+uul;KZsbD4dx>fbBHn56TxU$q<ZjqDIKSoA<$*Mp)T2P;7_%}RcC6e5;?`~ne
zs|~GEI^Fk05ay?zl6`(8<)^Up&NlihssOm)E`a3%X1x*>TpJo)Kwky~Af#AQr5RU@
zm7+~91kSVPiD~Ats#d(^3*eq7#Xt3bc at kgnboavi|G9_!A6tmQwT0AvK>D7gTgX#q
z=@tTIlnv(BZ$4w`Bzkfb at npc>h2M+b{034x%`WGf+Ex|R3w4ra(mL}sj}c3qQME)w
z&sL2rJjQ#A+ehut7J1t$_g;`~{y#PkC@$bS at 6gNBVKwKv6p2f#L0DRA_O{4N`g6TQ
z7`U*7)XLt)a51dCE`^a%V_yZ+43;(+A^SPG>qwv|(x%qRY at sp2q^y;-$mv>aY%AGn
zhrw1BLY6m%#xJA8rY1-1y=8#s71Wyu!uLX|Qefby*mU6LlDft|sq5)6DNU;LdGrLM
zsIx_<N%fEO=P5si{I at YUG~+R?lA&4?i9FXmXx1d3V~?uGkT=gom}mcAg(^$_ccIDy
ze4&r?d@}zd4LIec&B}hPd{qd{RF-uAISQwe)Su(wnf-GZ&L+!$4mB?@EtV;5v8GwF
zTsVlq_Q1YWv)a}2ss)8tZLx+_#-6d*+$!j6@*ikHm%}1~pYXLTrB24GO#@}R2YNwQ
z=f(5-NBNqvp}ZpHF$V?DXFSF$9~4f;osaI4W6xt>@~A3HR-EqxSBt9i!CkbE=&H%N
z^Dz?D3F188W2mah7H!C3?0g!l*f}0{9!=tE5Kk>JU5LO7$ovbD at LYQ#I25uIDno1X
zkmZ*bf`deDo$?{gjSCTqXZSs3D)GNK&?ln-M)KCT>5 at q@E+$J<x5 at I0p<ytvG`<Oc
zZt#D!uf6+{>WiVUFdV-aL3UqMCdEBwQ6Tyz*ZV%Av5 at dzBK+!I|3OeQqxWiJ_$7Au
z6g%ChCflX(oKzDD&xv*kJSRY$j~ab>?RZ{0j at OO_-eOa4fMfM{FOVI-#M9q3{}PF1
z#Qsazlm3R_`h_x-2bD|;FevI5$x<-VXp<OO6vmq5q%JZh4{LfRb(JBI{gb-US4^Ys
zleA0ma37p|DGG;M3olhDp*K_hh=<E<<{w7<C;9k~KKKkd`A2^|Xz#V<GVA&qzH#fC
zQukXJtW$NJ-Kz-oQWqg5e0&f>&5;{hL-CEllM;*2y at VokI=KkVPAWppeTz_E_ at shd
z4xf`FiqMkbMJQ%c5xO?92(5*WX=9f#9PKr9ToD?ue at GY}79hFu`u;b1;~uH1lbedr
z#quKb?#4|o;MXF~9xX!lZ;DXWcSYzf;0-?)p&K9<!Kc^$*je~rsrgj#&X^~!Xjgq|
zC at vjk`~KEfe*QhZw$<E9x)MD0rK_Q{QUVyCb8Vyknb|xrrs8f*O>5`dSB^h7X8NI(
z%by!@^W_=e*1uNeyI at V#@2>^Unmuf4M-$ikjiJAcJR>nJm7bc}vduhg)b5z*Vb#Zm
ztg;;0=^WO}clzoc+KhJ=g=H^%Pg!mLWs7$2<%LTLIyz;}4Q~E|)m2lIMxXiV%s-cY
zAKo!Jdi74<`lX at P=ZiWzzCW|~_ie`p{C4px%aPgBLSF5$mpQiUa>Lw~zTM_zTBYGX
zzSXy`e#)+pa|hcGU5FWRYvkGArkMktiut<YwVnh2V{goUkDP2jFzo2|J4-E#nqSOZ
NHbhOnl$>4s{{T3floJ2|

diff --git a/mediatek/WIFI_RAM_CODE_MT7961_1.bin b/mediatek/WIFI_RAM_CODE_MT7961_1.bin
index 866cb5456509ff690cb01dbc78660e0679faccb9..fe048972d5cc2b2c6668632412af59e953d45a34 100644
GIT binary patch
delta 307328
zc-m~dd0Z36`#3%c32Z`u5E2QOStOhaB8MUp6T)FYl*nOKq#y{9C|<BpwCe^NE)^pQ
z0knV at h`!ZUTd~$^rHU<9tx82jjb|-3YHLxDBIs{6sBM4W&mVcs>>STL^W4wuY>xan
z_Q=bzTbwKo<zB6F^$FLU_1zm7g{A~ZsSCY%fZiMRzsSuu?!M;K=7aWM1;_r~Mtt?A
z3V$;TyrKqyNuM2F*N3<W0~@HHSm*2>&?f1CtG4R3o8`5?PG|<lH$><+GbWBH^1Pwl
z{K>pbH*{X6i`Tr&>@E&))2=azQU$^|o(}vrMgJQkNG at KmB)QTm0!iyCJ1`>$G;6CO
zkfP?y1C=Yq!uLa4X31FbzX*htD-ilQo{sW7ZXi%ptpg#h173+YZeN6BC?H|Lv!{CY
zIQ=4~P#92Mk)=%<uoCX1y7xXb$~lf##sn46KH})?fgq6Dyg&L$hW-$fH~xwa9Falb
zodRJ)1Wno}mxGC2vT=C(Nkj|#>L;PU=BL6j^)kWk>2S_VraS#guBBbN-r3s4_hs4M
z895S&vJ6-|t)uK*-T9hxw`^~yL5+%R22tf_642LAmimva<0qCLM(ESaWRxD>#BueW
zPh^Q$M(GczM&i+4cHnj$xTUSy?ikuyZX+ at b`m~FbC-KTbA4tnP){&G9J<4(&qn%^8
zbcz4{kQr{(AS!6h&`2Md$<{*RP`^R{F>AU9>@A!-h<b7XU_R$ZWLc>tN^glzAC7oJ
z(C+o;jq~&uSf19f)K=MpZKnrs=!aMfT@|!$`cT~(6JDYNMmuqbH7rA@{P8T$%5wcD
zHp1wW9QTeF(&*(Iln8ylcd?`)Y>z~2!{&;v%K$SAjKfkugqvq)S^YOUO2N<b7R}Gb
zZl2&nKn4hCIp4<&=vNyd6}QwgZQUH3AfYHH**l(Us}NMAs&f_@@)4!CeyXh_B|<;j
zcH+4E$ugveSM7~o)q%pFrY`vVOM%APkZb8B0GU{Ank#Ha?oUMMaLg$EF<Vc<+nFWe
z>5%m~d<MC45j|!*UNMb9KdD2GEhtA1tk5APHO>>fPJpmsp9PPHA=U89I%M55XJ+h4
zOX~6AvST9NPd@*XhYpK)h^Myh!NrQ^d6`D11s5urIwU3>?GRlNvkugz*=XqsCTEpV
ziaUur$h!Ms#GmN*)GW|yWDM&{9YTL9X7x at pM#_{6m-I)g<6t|*x^kUQqNiPH{9zeO
zc|~DO-=}cS?vkS`RvKrBQpI7)E8~z$H?I7=Y&I0iLjvJkDE)R;=;LK6 at HvpwhG6Q;
zQQ}ZiGem~%UT}^`VNi#_a*Fbbj2MHb=#b$GIQWG?i16mJ;|s`zA`op|)9v_`WF4_F
z{UT$T205T_k_?&rDB>Wb7(fLw1S<5(fa>DH-zstuQL3DcK?KYtT=)`ScOl<V=1x-l
zUJF7OZP6hoHp0H(k&PsLs{^@g0yca}HbC``g!Le at E(Se3t`F2vWWGoSINax!A_Ibo
zvviSU*~9al>e&h=ns>w_cLe7Z2!x(hR8I}P{upP{D4KSfj0ML`A{RRKWQ1bt;*2wT
zly7aCw(6f7OY8?S+^!7|6Zh6UQ63(&QyB`uYQs3-Y=}U_3*1u8KvxQclOLTpn8<he
z!?f9qBto4H+v)FiuwMsySTa^n0gysc`jc`r`~u2`qVp|tin%>Xd1V@<r;R^x&Vsm{
z{NP#aRcr|xr^pbk{lEmJP{tzQM9`zJdX)}s;n4ZP at gfG_50Z6_^&|9#Hpv;CV;{FL
zXJ;0 at vfm6amK<;TWq at TyFj^oSLKk#YhQfLoi4 at rfWk_m_<Tzd(r9|AH;t2y3ywW^3
zPI;x9r at g_w6kDri#;3}JPzVX8L$Xm?dEGo9hTLI0E125Xr2~pz=A!0BN(DlWGw(S`
z)(dRvYpsw^{pVTwnj|%xJAFhrW#c#wqiCLo*8{D>+ at 3J+h~R$@IxhW0AC|F1TLi+I
zIqZiJ0a{|+^|w7rg0K{^|3ywY9CSq>6t+@*R~D!jkd{r9il8K7rL*`hTK>YjX at +<t
ztwAQ-luK$#&K#}gz1HNczLag0zS|koVTw`O!+XKk^0WWQuT at y|lt6jvhNR~|d?u<y
z=(3_Xi8w7wR}gDZj~BHo9F}Z{NL1($%kSZ!y4pX|+(t;*P7mGNA7hjzKIpDVs2FKW
z?psWO?cWTpH%iZ!e*f2dztK+T)p at o`D5T%e2RiVGa>SF=fb>6PK+A7>D!M!(M;6v2
z8lad1H!K$jgP at Qvv(L4Rc{l^)LvD!lP`DjN6eG7DK66O*)lteAGH{8%_2N)n)$4TH
zwZDe%500PwsCl!9r(l#^*MTN3-wKXH7K8+Ymo+k9H}WAuF9RYrG<+wan%fJ6i8m~N
zhWhW at qrdNvLh08}<oXes&>!n%vh|A~%ku5K-`<h7ylJrJDVTvD8KtD}5gOKW&d({n
z^}`sAB+d;Ih^+&$Cv{-l8PnWQd$nhKsPYtN;&hI73v_L6>wvOd5;lBxyJLL6g#C$&
z!cW*T=xcT=(PBqY)u8+F;g+rO{ewR5#u1M3DmZW(9JuqtK*5KBszD!fIqF?m^M0Zn
zU<I?-uU-bRMP+dA_V;tib{VSOvfa`2maKnR$T5BtT!#<GzWuO{wWx|1bpJ4*=G}l>
z9|l;Eh<xY|dDs8?L%-7pL__|y5cY1|vk&83Ka9iPj}udct?PN`iQ7B=*6Hk@@0Xb7
zu9Q-y#n-;aUQFFDHN~z>DvpkKe7Dnng<sS44?vk8fI1HPSU0Q#(0t$l)#{~w`l`1^
zt80IKr-Nn%%FeEI2=AQOQER{5aYp{>77=gIM{zg&5lLPB{83{m2lVBmPy#R64oJ{1
zLuBLO5cdyt7z!jdlkQZ`R-M*BTl{X^5t;bIII{k3+=gt^+?-+tZ3Zo~1iuW$e+zWG
zhN0l3PlHV)n%Se!Hc=N8>na(dY?9I9gGhUh_ at l}u at kFx2u19=H)Fqy(ypqNcXRVwb
z-z%e;%_WZ)B<g~eX at WqgPjM6xu&wBkx<Q=HT%zS)HFkdXm8poHy-8cgzg^T!`!4<~
zxB%3-JsmJEdmy7g$1nlHA<N06e!V)V1FKqeVD at EmTL{@!wiCi%A)}D<243k9N?`z4
z#?>LGZ^8EG=62xygAPd^)B)lsG#c?^b;zP?GKzN2{AZ$SIB2;*D9*YTWv+iE5cX7O
zO*Geop=+#Ld1tcc(|YssmvGl)8T77%ZuruTy|>ME(yKu)CaQ)yJ7>cMv(iI9vF^m+
zc*tbT-kDktnM}MjLQ8-f2FH^-ht`aiIH&&7<mSljW+2du7133vF4g4?eRAXYPbB6N
zqYk+=PX{_^I-tyyQJ~UC_Ec59Fp|JKp|p_mG!SWne4;ozW)A6gA&Y!^vrS2)S0fR!
zYdLkPcY!Hcd4=@hF(gT5fj%f^jw;9^17~7U&eiP@%hmQbr41iM at vIs1Po^z8&nB~g
zT`V1?B+rZh^lZ770ULsW+t#WVq-i_#&ER<LoZEkri}!n|GkbWg9MOyce;CIj-}jPZ
zrz1YqqXi<Hivy#@*$<ai9 at T-cnfh%`F7C|=rUFXHORmBrBwL+}cMtmioRyHN{#3B{
z!Hr8lb$08oISHmix%uYi-OXlMf{}}OflHpb4x<-ww)A6C7DzelF|40#ZeKyRGuE2x
z&jmv3hFq(SyWVUisjineOI&ZiZoYLOMMmXufu#rv%bLT29b<mF^wZ0Ui_7)(&U~8e
z_qWmdW6tBe9<4RS)LWZkOxL{8H(M?Z-adoaC_hEU*L#^3DPy)<B~`_vFp_7w2rSMU
zXY0qg1de)Z8XP~9FL_=xA&&;*DunOI3RC*)SGr8f+RqAe?dLN^wfW4CFDS~^PLMH*
zV#>ZKnlQ_MLj%FfZ<YD?W*yDw;i;_25b$)w(YPY_SyU`b5W&1=8x|UZFikduRel$#
zpl#Mgf#eFas4FUEJ~v$3Izp at 0=&fDnI5ug29YmK+{2ZBQ at M5T{;RH-!vEi(KjcWi=
zbT;BUjw2^<vO9Ftx0cYwS>n}2?sfLCEyUFdw$&+^Q`4FXiq4+c9=}TFLptcG89P>J
zHB0FEAIaH;iI8K(0>Aoj;~be%mU*FGa$dWI6=v?6`Ty^0JHJ1&GBS2+8x2a~d8JZj
zBTTF-`4dXk at __2{Sbd0_kfXgZ`VxLQ0?E0e1Y#Q<VslWhberm<iS^sspJQ6oA2-5*
zq$(67Rr#Q at 4!xvb`A at t4vKyEB)};T<4fXqBQ?Il#@_g_5=drD7`m#seO~U;H6Gg=e
zi>6vH_Q!n30sPSDK+d*4R3A9nbxcS7cF<8xb}|`7ZcbFr(JR#C)_4k at GUz_iu3tJj
zfa<qh-v|rge*Mp*(>(3T1*FeUmUuB%R`YEy+y))wUhCscbG0qx{-HEi>SqcjP!jZN
zK^UzlC+DR8gusW&6zP8x%oO$<u6p4{hw6J|a6EPe0Z^k-IP<35R}$M@@*NT8r5lef
z>F1!6XI%yWtL0O}zCt`n?VPqq2K at AEjILe$(fHL4^b#Nab4Y;rk!iuVn`$JR at BFAY
zdGaYI+<x*oKQ;2NJ)3|9o`QG|l|x%ZuGg-AfQpImV0K?kFsBfvzA0}8XyfN}zTNN^
zVT$Z^lpF5ij>M?&6X&Uv`_kQS8c4qoYF}(GY?T1gS8RAV6qV!`(J#CO*nCwW3!B{m
zgl_>TeE<mDAVUP)>80YV<w|9FywA`4%%A3RmxwRjXuC69;_QaYDdX`P8A53Ju0v at C
zg>!D194$C)OlHu*w`m5Mhb%r`7B_DBp1GcqgMYgsbh{S9n158p=#4Z+;@!u85@)Bb
z=*?0~@G2d$JwwiJodRineni%E&YXvF{)dk4kL;Q at IZ)z?ar5k8<Qj?@ka4lKtO-A7
z)8rTy$i^NWBYe{ga<p}3AW%)(5y{&M5PnUjt19d3$TWk5jTOd^65D68u~vn1#8`;j
zS at CBia^hDCKZtN(!I#GLtvBCp#%pw7&+I at h{#_DyP}J8InhGrPQ&|ibI?!M#3hR;v
zFR;SEr^6ll^jLMi*sue!5NEyk_#BT&0{O50*;S9>xy^@NvE}TL)c@|vvo(^XWJ4A;
zjVzWw5wUPusRJ*w5&yy@#DdIZBCP^|Y)!n(vnrCW6*^nJr>5uONGGjg03xA7+^L-}
z9&q2bOZ5zosgz at SnTKzNd-mfP0MN%?;tK)!eJ?lc9+D2Vd3He0jtcChrP>?whajiH
zu%QDzMQ<3hxR&IwHRSNJ1n*R~b#Im?vp-5b4R_TcZGZ9uDvw4`LXQ2~9{Xt|tB8L0
zJN;!3SIBM7)9>W1Mu+Q5Cvhe at 1S+4xggDQbysReI(xq4CqkIYpdsrU0Vwo}BdQ&=O
zv19Him)`Aep{>Bo2;<2&hOD~pZop(288g+HdblpTqo^eMWWatIVqGr-8}1KD%_8|0
zup35|NM0w%3-IrBpl_@*PqalwFi7(yzH5}4MeY?`yo(e$^<I)l90!L{aZ3&zsbr5s
z#92!V at Tz16HWk*hsd0FvvkSSX!VNmpOk<>O9_JUWCIG-qjDq<q&<f$$^Z+2z!415U
z2d-OSOrM$!J_&6AjNy5muQ&Gc*>`gZu4Y}NY3&FnseCfmm~9~~(dsz>Q&4EC%pC=;
zvtbr at 2mpLmFtw;N0E9LJS1)K1F4_kGxRAS7Hc0un*rT*9XYUHW4eW0PZsJ$*KD<`I
zCXpc#+0aNL5<iOEkmq5l at PBqtVj2*75z!n{8J_ue?e1fymHAyzJ|B74YUmN=$p%ZX
z>=i=S&WX6|-Nk1I6(DjF$qz>CyqvwNdC+}o{o8bJF5gzf9dQH^Fl)oFzLV)@@^Iz^
z9gdl9y=fgqq#cK7=iIt5ertBe?3nN)MJ3;zB&@e(lv^8Q6sXNVlc6MDDFK*co>l(r
zSzyH>33!Rf++!DJ6{k6-0=MRkr9*Q%UuWG}(+<6)t<XT5aQjBvW05`|9l9OB46og|
z!LEn6WU`sX4mCih_R)J7BmD~vLCmk#biUqYTGI~GQoy{%XE?nFqR;el at idYsOwK{-
zts7)OmK7NXe=_Zxb)X*lZf#XCwQ%K=4E+u-H)7-&ocvOt-ry0j<lDcycdd0v$jPZ4
zQQh{lw5=Xoi=&o at KCNk^Xe5 at 0ExwFTJd-(<p6mUzIBjg at bc89+nid_y1zcE4;+LJt
zh_^YDaVP2PSbk-$<<sJLBtHL4CZwx7N!Q$43TM$*M(J#|>w}h6;fIKTSML|nd=pQc
z$<%5FxJQ at EmmB>PYOvb8aNI$MT$uRfnW8`$+AlOli3}(MyFWl7(`Bg0lKxNsZ=@^R
zSz%6>JHT4UeAFv+&U%bTA~W5L%y~|N4y#3&XIX&YYU`?=)sIC+!SZQL2tw^&ToZ at G
z at IdI~%!SYBJwNq)*mo&E6=A~iPNgG6U>9Jhyq?U<%>*%(TXHR1BO;bQ&9x0%Ug6&k
zDUd1V<yt*09zjO8jdP~`V$(jYW*SAZF&Grq{CmT2$4bQg0(t&MP9#}`SH at F|VyYWR
zlEShcIwMKkUYpgNQpRP?F|U*GcdB=H#L_8Kxd-xvkV at A#_ at 9J|xZzx`<=V#XhEvz-
z*1bwI{Zv<#Yx(CuJYo+(v!*ro<mT`1nm9kuzfYRBVjyYS;Q<oHSc1uI%J)pz_5sMI
zT+6Zl>o$B<^$(DPKJkbb0IQSI{u&^G$QIeGp50=-Ik9Q6CZ-rz##fZ1_*^)*I{<NZ
zgH)*UZ!f6Je*E2yoWY;(%d?Gt6%1Hct^?1y6fS`W2N<%|HmgtXO32*qW^t7Gw_sh{
zw|T+Z&2zbURUiX<f%>LjNiOBF0TWV!3IifwnhD$cAZuoi at Sha&&ZrdwoICXIy^9g&
zYn&socY=;aimLKG*ShD9I_NXqCn at 8vfpOQp(Nseq!+3M>JV{mUoT@(;@!c;7S_OpW
z0ULe%wPNaGGiHd*YSW)Oq<Lu|1BVMW2e87vZhCg{>l**ZMTg>%(FX(vNH&o>@ZmPv
z$BWN=+_Gdx-f6GBv-orw+7`Pvj}+pm_PLHvixHOg4a_kiONZp0ucccBq=E1e*T0cN
z#3^<{yHX{SkRe4S2fo8AVXT}oq9PG`qcpKOLsK{#vGMt6w9WhWOBtbk<l;Wu(H8I3
z>9=O6POpv9%8d~S1dLnP=Z<<>obLN1bsd1u7^(jIhleB_9pjfp)s2>3NwiNE6*p4b
zzwtUb^~cFBdcxhMrE;-iZ1q7m%9HDXVXL1!$lSg-V*XdU%?SzD!=@ZsfxRYoDU;c(
zPUs4oOg`f?%6;&PI_DxT-_1-dA#2jn6+5O0lYrgeqq`LsZi}C<uZ`MRSOwUc%V%C}
zynN<$3apC^wo|-L0BTV$pB2MJxIMhfp#*H4)S99k;3wFI^D9^r#5~&xq_A*KGhaXh
zjBc7 at jN;rBw(+mZ1Rrk_Y|7$icI0;jQ(s~O)>ivu;K>J_7gmrbVpG3Zc<wmY at i|u2
zXiHMDKkHCr5&deTIaIqbevkv(M0B<fc6~9QIX{;e^@m}?WUNXC9!b_b$nlg=X3l1#
z#F1R at KMV?&-X}~nwHTpxZts0P*OS^r^>%LjZcd-cx|$!zxg%^_#A_6syM6EVqN+w0
zat!Ah^Tj%zFN-J!{Qkw7$f@>h{>8p+rObtFfM3rYbuwEcVa`T<@Y-CfwappjrhY=g
z7TKfiT6=dpxLZn`+c*TN*C7?985(N?c_y;HOs0%X(AvuYDeWfm=qdvWmH9b$RKV|b
z4iETf2hKCUc5(gRmcctAnINy>P`PAL3EQnVTbGy<8YwiN%k;qn_4h${@)&IwnQ>Ms
zTndTZW6N*3$<SN%pVQ*pwmFdt408v4GFn_pKEHkZ$?hv<^%q>*e&RSJS+1m0cWN)g
zFzel7TKidc`)vb(@r&sj$n!Oh$+n$y)3(iQ8=9wUT)O62H&hxEm8W2Gx=-Qfef<jt
zOnW`eYhVF1^3aEXfGpCw27MBntxHCg2{!HOxb)L6K4|-A+!5e+r)J)hxrK3+f6IKb
zBf0gfwkVk1dc;$!5d at Hc8+yHW_gbJ)xM2v<I>4}{*S0O68-Tc6v^q(iiV9Cs-DS#z
zg`{lUyjoW0*;-67&HVzn at W}Ch5P<W>w#_>SIP8BmGNHYMySG2yC|yBA0C|L({d-wG
zoaA7dtC-SR2`9<Z7$V+)jmR*-Vm&Dz2Q}icwaq#hm?jp+2_?1tyN${DDw5QSv7MEC
zhoT8fJV_ at cGUU_OPJr!urz1(9eKjC7xQBRU6LiI$SrPLC_D!LWkcH)ytr2Wm#Ir^g
zJIZ{f(xEV3XCl+i-Q6f?hJ1TR9U|JU^t=4n<?AAia*_&tE(*W!uhh9K&LW_KH|YPf
zV(Qw?%47<*>kkGi?e*zdkJQ!4!&a?kifpC2a~zY#kQCWw^|Y++!hA`GUO2&nFn8;m
z9XflX)Uns9APpcml7J-PF3bnr4L at iyA$UKtwcqsz*c9{!t0*u$h<qJqVxt#6GaxK)
zE<(MAZd>8i2LhhY!3J5~Z(k@^FzIUx{$>_Y16Uu|Cez$X#+Dsg5jt2jee7hfRA4(o
zXM!X&g~@T~qzWc+nzV8_xILMRb&2_vsfg#pgw7XZB0FDYSrTm@=n!dFDv;i)O&k6<
zw`VNskABZ>wM)YfY9+}`r!|9q at 1;t0>i>`^;+;sHyz1R at F%yl- at Vxc)!}gTVjgKJV
zNE1^MQb9(>pJC*rk+FR=g<s1zq+~2bKC2$|>pT at aK<a?^Ne~8Y9nCv}J(gUEG}bMb
z5dYH=MyXc>;0yOr-9zV>BW4(C2;;nB3Nd5%yG5H)8t3MZMAYU1r{RDniYf2=wfd)i
zl|Rq*z^^Kt_uQ4EtL%-*X%|P3<TxgC1R+ta0`{$1tp=gDUp!I~6h$f0PCJ3DT`-HC
z@>d}Hq(lbR?vM*M#OKpLX3hB=yNWttN6=J;n=8>llD4z*O`v$;_)@sj18}FoBoc*R
znMF+TPQ*O^4^kfZmvWlt7_WHm)*lIQC;r|4h0F(M>>YSNCjFjSfuqd|tV8HfkLCwO
zQM0u|J|Dt0yE(6B#PeF0I&Xaz8I{9L_sG#ghH*wvwkdN_%4pAow7loDJOi6x-HH_N
zZBVL%3aD$_+pEj_X=pSt0$h$Ni`h=Za=F;BHII4EPr6);x-+oaTNYD!?hK>zj>nZR
zWgrDc8<j`oV1vocrZFFl&dA|bzh`&hcM89-yJ`ig1UWuSsf_M>zb~52c6*%hByvd7
z`C2&I{w20iDv4*RGyA=w<vX at f_buvX6K-#^CDNai5^2bla at 3oKSefP}NE+zUmiHDW
zF2AkCG<VP+$_8Uuds)-&- at 8BWtQ<shc1DBq*$JuGRj3SKCDV*&r<AeI?mM=u3t`%M
z6Mvk0wBhi%IcJ`%Jrsa^x!Ux6B<>ENB$iCyv|-nfwCT*gZ#Xvz+qO7Y8A5{-Z}PS>
z(yE;;-Wz88ckkUU)qgNNUX~r$otLtGgK`i(H~jE5Ua<j9I#uv@=*I}-!W?k#+;1BW
zi=F&`s#tO6Nt{~*BisTkn{KrFhSWOKPskY3Z0>g-fjQjfy_<8*wrwKZp!PBcs0g<w
z8KD}rzo)?yA%#;^JSe<wpOETid}opxsP1OFBN?$f+d9hX;_}g^5u1B}fzKHnb4|W&
zwHF4wNZYgV5CyW0&n4N0)t+F)@oXpa_<&O6$ai}!$oKrZ+P~u*mt_Hi35(sKQLV(1
z>wtlU<k6OOu_Clv23TnZKBH*CpgXmsyDA`WfPN`wTO>4CjI`V3^yR*tug8o}+sCR3
zphJ?g(r>+UgSWx&I-NuB`<;;#)9x8WadMnnvXHb>yA^}-9_1U09_6~xB7=hQ%fwUd
z8?pxpveE3oi_Tu$WPW2&l1{-ZM*I6*Dfeld7M+P5?y#)rk!D_FPffe8FP0KFg2$x0
z{O=Ebx~-p<@9-8+LHzJi9U`490}p)MI|PRxHpS|9 at 6z)1f13N^S_iZx at rZS0I>p(z
zZL`nW(OlPqauhpk&t7$fkXeSTR2Sepg-iWDCR)_!M7K69L5i$Kq5*4z4go1LKxP^X
z*_rni&q}8ZSB-X$*FvQJlxEH*k=i|i)T*U>^BS{Uw9`LAnElb}c<mhH+abQVqj&e-
zJQ6AX3<&GGxi5Bil~M8??DHY2M~^;t`P2;`&1mNbb)Glk%Sfz7kmB6*Y|9Xy*|a2e
z1R?7NG0p6U&xY*v*eTcq<7b=B$#xrXn{kZZC}R{E%7|8PFDuPD6y?#Bq1~`>aQ at D)
z%#OKS8M+ at ezp7Fp84<`_8iX}}9l}>lqY!g_#&3?TRkI*ZD2km+1m}1<V9O190mBw_
zh>dofs2e;VYfw9ea)Cqs(Li5g(&G+{2O@^%e{RVM4xH$!@<MO}3h;tumZB{)#67&f
znW<bL4$DGpiaaB?LzXuAR5wyYhV*fbFe_5JDXiDlvcZg&H-^OKH-y2uL}8uL48vJ(
z7|v2{sfiD^?s-(v;X{VFK~X at irO7}qMH3~uf-)NDvKnk6IvL}jzE}`6&6X&`7z*27
z!M0yu+Y8wCqZeyYo;+I>Ja4(tX~EOS<HZ+zQb)6NAG6P_`RvVBxTt{)43!>y#^@44
zpuwvYevdABA at l3<+G4*_)4tIZvBdVloY4Iw-!&55Z1$OCo;4-^>O~~BOieqcImQyx
zgU7TkB2yUt1gr`O{T&{+Jx!MQ;G=@a6wch45o3>xn%W)AS*5C9;$4N%_eAc at d$Xdo
z_u7~B(H~b>Y+h at Z?^|>v9$8Bq8E}2m#%UIuNkUJ$_77fD9$9c_&CyKquFM_fj-&zU
z-lYA*MoD7Hn+6i|&?;crE8QE at 7P&{FiD|4enPg~cD?qhxU?kaWkA_}ROj%niLo;fa
z49oy5mZioAo*!M^3-c|6On1cfZ{tN(ay0b3!urm6W7Jsk;pkR{^&i&8D2 at 8ly@3tX
zf at zBwbUz38r@A%lGqR4lMV^LY6xW68dnScS#~Kj7xP at CZvPF+pYiUruuF6r>c4Jh$
zjeHfy+4q6NwNsX)A=)Jpw_BH#qYwF+_gdI!+p_C2Dk;3$h5C=fCey?5tAZeXeVB_y
zlXj2(c$hOWS>S$eQDvj0!!N$0Wks?=+;Py|;hHb%aMKs&RJoRaSB14bxt8lSe~ZFF
zu^nM*x8z!VQx$d(_Iu{+%ysc8A5F($V5od3gSrk`w|gjxxL?*p8lpH?#G;74`JnI>
zV2l4s0{s(dso2pQ%+M1E<7BmjhF=ZSXG~_$G&?j~^-CsCAg*>>#O|axdDI_&-5<?f
z{&FH>k^OR$rcnAMd09VTVZZ4R^^eZZoU^P=g<a5$GoK`fEdaSO3&5B#kAz95>Kq3!
z{b(!E)sgsSa?75gP9yZtH6!@#O<44XBz)g53hNo)8lx~8!pFFX6BdZDF(G2Fe?FPb
z?)*aG7h at Ro9}aVW3}g3BJv-cSaz<#AIvAJ0o?iyX-E&$rkkf#Ir?qU?6^04I;g?p;
zTJ{Fe5J5}o`%+=u`2~|2-KX~AI0OdiGsC&epeEhK8Kb7z_Y~;Yg}cTd|5K)vC+v6E
zWch6je-l)|OfcV|vw{)kWf_Gu%Gx>Mf8?hCHWm}a#;Z|wdX+%4A<8tj|I;UUVJo1L
zuafJ-pWymm!+m+?8)ume9HxvsE+SB6s$-Ow^kb%sAqJ0<)@lYI*WZ&9kknHU#!758
z8vp~8Y{Nh8;Z`t%p!C9QP*bV-Cb_Dd$vLW<C_3wf-i2eW=@Qg<>-Tg0yZ6L4u)!_z
zy$34ID(=UUPa0h_Z;|&WTsM4fDdGY4-L&LZZQY}%X`_Pa)KzOtN`1$a5F&Lp!WgPM
zKHyOo{sNbaDR{09al6B}5!H at x%Ik$uI&?e05~iN)mq$Oh4tqY`$8<}MUfoWatSSOg
zZm!UA^NmCKDI?<CPG{}g at BSn$th&P|ryH>}dCfp at Ih%%GXM_1z@(FR)lV})iNHQLJ
z*ETHF5R$39bjsoo8OT_e+$zqh!9_e78aALq?ztG_LJc4^ziURIIP2;B-Z4*-$i*8j
zsg>faLd8D|ZaM~|i8xUe%EpSGq!scP+{=l0x3G at Q=wD`98g@*Fw75Y1vn==Fd}LSF
zd%dhU?(PYj(uD*q6aR<;+}y@=99#M>N!l-Gzx-3-=LM4_!6a$3R*o=xly6<}iePF3
z#@%6#a>+3p%&%t^0!JtwI)%03wHL^tCvMLFD1zm`?f7d`jWd-q>Nnbj`IKAR_;wYQ
z*Ws9pa(2Nf6A@=rFduD%;|Vwczj}hE$uy>L=!u%7P`lDZ&%~0rt0yR8o-6WXRD at 08
zVc-^5&1B%k5jH8XZf!dw?A+CO3c));c_a at X2s<1MT7ONaFXr;C&qoAP4?_j)3lFAh
zVR`cFKQ*C!h-KLIWJ;ebf;DpvxF5$8F^<_>v|Wdec}(2jnm4d6g-LO?qV2#!8tI%z
z(o&);52-9XLHYQVE86p!{eYWLu02^7{>HOa;!i3>MfKnqMN8iEBU^uKBN3ZMPgE;S
zGg#phB;320zU-OvN6#^P<plBNM#`pOV at lWr#9v&^r1$$8Q_j;QA<!uV7LHJxFq1p<
zg~IR3*d&c;>!5#JYBHnmYy>54^i+zf`uGdu9EoX2>C94g>kvP5fPu|MxHE at RwyE;}
zVHdVh;pbhT&bw>1eveijNE^-=cO$M*hW0NUl<h}pDR at eR#m}s^n~C%U&4Y05hKia%
zno5x%SM4J}iYl#kN!SE{g?0gIx+iGOuLU$LI2atgN-$hi0~9S!t10XPh!56iXU at gu
zz+4P2+NV<ZoqYvDj2G-mAmSe6n5G8(bL_hlRPscphnF$Fun!>ltJtX6QHHoKWV1uB
zdokW*znPXC!lV{Gq|h*e=Y~9~-bT5Tu>&UoEUIc`ge?cF))sI8cAp(MsMJKliF`QG
zS8Rag5ih5~#XCOvJDVcJcuDs8sY(1C^?=wrlx@?WrIC4j^!)X1zngO|-RJD7IsJRe
z#0BN5WG(`73{u+xr$c{LM#DvU>8^vRBk3Ap-pR^;cB0jd3|PFJjZT8z!?ln+kMeRN
z46r=n#UN@~6XD`qxHu(0B?;tTfeB*409#ZB>#gxf-quEki3Nx%8LD(nYrO5i`Fk&(
z<=IZ$y+k8>(Z%^3_FGI`QLg&=hWPo{+x8K7C07PYO|+DBk~iL+uQsfhN>wdUOQB(!
z6z9mds&u5-;Z^Q-_}zQ2!@flA at Ln01>B`wxISL5+Gd{;K6*4va9;~N-zUq_1c>@<h
zA`p#YPvmj;cz2>Ig0hZo&FHr%&vBh}k`Xsr>G39~JWBg0!aA-VQkX)>K<*N?WNtG;
zFM4$0V17#kEB{wuhnECXUkM{@mo-NqVRSPf+Q%@J$yngr*q>ueiG!*a#+wkh-o*6%
zk+MvEju%hK5RTuhP!f~kt|x#FK6o8li%giVcV>nC6_0e!+0i|nJDt*RAO%|8J*0$2
z at 2Ct_65TqG>5DMM^~1R6x&S(MzFiSb9*9u_(c#9i-9zfd-J&1eQT)0f98VDhk-BVz
zz=o95%|Ia{NElq4sDd`Z?F1dF843|9e(M8MAN7zdKJ=2Bh`dzVk<n;r&f_4v3*#WW
z&z`hMoWyA&w3j0+v}emvFFtVEFQ#Q;&m*k!9TB>?erREC8<@$Phfpgy6o#9dR^v0P
z^R4wzFm+|FQ6lC|bu at dV)^g<8Rf!P44t%gBPGnU1fNYB~AVOE34*7L740S$&raF?m
z<2Y+MG}RL2LJn~I;_xlVdIH344`di4v?YSRvJ$*P!8})S{PGX^rf3JlW?{-~#F2c}
zaC)*9#^e;co!jhRzBfiNX`k`IJL_-Rl8K>rX?QPePiv<gs1UHFWn?l4H%5>12b%6{
z12nvm3<?pO*{y(rfA8%>bP))eRK*m|>~|;*o0Q0m=|ilPnm|T>o+%pZLhMtyh!rfI
zU}*>YsOG)`bDt$_<HFJwmaZa$I|Cm at q2WhQFjKe)o8!!BOE$D2u+Aqp7AHXH^?%Cc
z*w->kQB}S`R4zl3CXFu at 5TVO7W30x1dhWK!qW7#;-NQ5TW4K_VR~=xb?gSQ<UE=XD
zoV5sru?1dg&mLc!$;N6=+TvFczi+k)4#bV(Gszp8`;Q-gW%hu73`{8G0=J6VFi#8x
zL0IUR$H%;`zx>2|iTmO{CNlppo1I^q?_P9IL>*diB$9CD5pIX-)?6tJ0d7TMI^;He
zz~a5{KYI%C4~nAB(Q0I9=`wX>2B4PyeNTs!WW#83|4^)KO;U8d`ym)J<+5L2aTnl6
z6wWJpTaL^v^+v^2)9fR=lI>L$#ggM<cDX7`6C2Y7*m3nID06ECAw!EI&#9JC39P|C
zu at tX(c5C>ulAo8-NIh8<NK4-q{(B<TuB7q>aKv~@3xXf^_{s0U3N!F&v4%lrWnmi6
zY9Hd0b2`_hG87pVqe28pRvmg=r32GuiVzr~+2Jav!d)_$)WLbAdP3EG^fLgJi3l@$
z#h6WTT)tDxH3Cq}7HDFXfAMYW&zKakrzEtg*<ek-(ik1a3#Pi|wEpo^-aJ`f?ibeM
z(x{PlMS`*(<tevu*|gcWu7AQZvhQ^-X`Sl!x&IH5KVuGGE~|DDhkcZU=0q#41Um#F
z^@&~5puiVFPlFUwV0?fK^Z20+lR+z%3PeN7 at W63|ZiZza3n1ff=sQ%?TV{Cw#<nr#
ztLKxG{qK(Y=}6T$3zNNizVa_;hswg>Ah$+R12~&n6Gog+>q&*jTu<sw?TY~@69blb
z*MJ4?wBz^66c|)Hxj)5I24JQMxT?IG1ja>i9plm43f%Dot#`~3!cIX96Nz-Y(ycee
zmE?|{RL(XBMj;lxQqw0V_@~ajr$XPN2*ez2k?$zyaZf{e02`WzB%vpPWrhdPxOMw>
zgmxjJ%Z|uFVas<xJXk-PI}*NC){cZ}aNa{DBEGN<W!Gg~OsT<Y02}`!m|*u^1ptf5
z<1IUj*od=wR-V{0`PqB#WcKYY(6 at W56{NM&>JS_9OAJ#=Ftu=%#1*>^z_7J57h3^D
zUwmf&GDH6TInp-7`L}(|ahL#YgLIGfg?StcTTWWcOq1410)0K7H*&>@m~vm4wcRD(
zlT6NamCL3LSlnHhe598eE%B-nQ?zq-->IBJ1`_JHlM<N3{hiW?rHCoy7;#qRYUO2!
z$VbLF<NUVn*ss-8<9vxp(AUyj)XY0Ebo+BlBY#J?n1=%VX#lLNyIl*NX)s0yNPJf1
zt(pMKSmJB7wW%qXQ&<agiY41<K}SMZm0YMgBvqagR?AW$Vvm|mJ at 65CJV4wZ>sG?t
zJ2IPsMF1rBl$vke&2zqG*kK(KpO#gec3lF}c~fs(3q|VF$7er2Z(00+eD|IBaBI!q
zFTBgb=r9LgMq7?umoV_>d^!=7O`S8H0+SS8cE@>Y<a2WHFp~N7RirUG<Kd?2KJqiB
ziISS_k67k9_GY_Htbt+|8VD@#zmGq8mndbErWi&+o|Ux}U+kz0HSDl#T#q5iL7NNb
z%tI_T_o_2FHM)t(TcuP}m<%N^dO{Wu(pp}!)@&}TPBSMDDwvZtZkA?5I&UMN-$X}C
zTK^=&=J>#ntStrmC&4%$CL#?}<Ta{gw8H+>nFUyb92jSIzBpf-NyDE9`eKKdP#V^-
zm-ofZ2vlB>xrfu2P<o}@<yhzvijgn5Mdlk}hZ`xlT!%CY33-7kaYs?u0F=gMG9b>{
z5?ACQL&)5TOhSHhKca{|OtF1`L7o&y)lD*3rNX=bOvaXfW=Zy$HbJ3#*46 at rP6%@b
z7=!|bD#fIn3VA<ljnFUE&3m at HJ*7sqbVMr-&gy)<d80`wA`F=Te?B0HJw+LfLr*u|
z6*$50n2m>WtJ5d^(#i??jW*<Grh-fNI_JiaWOf0W1m^T90nUy0);^K}>&kV)Qn&Hz
zarB<~Xls+ZF)CpBEn6i==9B$>Swqlrn~yYEM~MDkjnds)1qV-mawtlBgLe_H<XaNt
zAkx-He=m3Xx<!PP@}(tO&5VgyF5)ty7PaeNeJILFr9))iX#2R?g0ZA7%alnAA<(&I
zppT4FGK914M(7)U9FpLy&$#`?#gR*|m7^ki!Ps{QB=!5M^GF2z?8FyDTXZ0Gv-w1V
zkX#viB=f$VB<syq|BhqVf9KU#&7t((mn5ZPE(Z$#*Zhm?7h5U4R+7kRn2RRNwqwld
z{hpnFRG0ha{N+P?-sXFz{_*cY<GJO+%IZ^S&Tu^K`Q^MH=_tZFoEf{k(7<+ at +?9_m
zO&r`=|IJ)RkOh$Bpb}c!r!BMZ(`y%fl}SX)RSzXugXH2bfA at xqGdxSw;NiyRZn!YR
z^DqVGbc<-ukL|m>`U|))x7^o*&aDnLutR=R9L>BOQloM$+r}8SA7FT%qyiFwx+)qU
zOG$Rcx at 2f2SI$l~u-POMN1itK)$i|Sc<!WuoCp~$cVU6vn;^mu9m<T(oR}>sxVqK<
zG3E)VBbY_Y`?E(7!{~roe+42&2Oy_u4DI=$eV0Wo%|DtEJOs=LwmsY<?{Gyso^j<|
z%)kyLk;6g(^Im9;>=}0!TlMfw2EPjU7-Mc4Tu(YNgjH(5T$qm%q`qs)gSRGnaGQpo
zb=TbNMr_EF7}a at W)ZLP=j)Y|T6p+ux(b*SxT!gwGl^67%pSNg^2Q)}*wBx&_>dXvp
zYLhv*tbn;hlEN>#d(iX2a^H^ka6GHj9L?FW`$96y3%=c#$-v0Z186c3QMQJ-<rM{B
zFzFTe)-jmc`aeOFPv2;2oKW4QsSMt#bVHDlixKJE#ym}e=A!jCWLsES9b;ze8^eVg
zr(TnnChU5Mp$oT9z4kUB%zw`%?=)<9I24Jq@&)JI%H5S7X`WsY!15o>AZ%o$6ypNu
zIxC$2tuk@%RmRVbxL_(r8TgNYhNr at E8jSO}Fy50x;Jbz*huQgponbqk-t0)(h6UcT
z{uhjRGwk^gcIAIyPk*mDegp|zU`p}I26ANqVBobV1A7EZ^6F3yENf7P+uw?#xtZW2
zjEh*pa_$hH=&+`b?5KZ-sR*w~bAY?D`qu*U%nO)Ckatqa-2461x#DcQqysh3?!)k|
zvWw3$ZI_`$w<|D_0RM<x=OgeKU&>dx{CfxK<{jJ~ux+tK?=AaiME{j<p{@AMY%9uO
zJf9)`p=DE8CJa6YB#i#WdsN-7k{b@!mB2JVm>P0K;)K@%fcq~;u_`A<2fyvs7|8M^
z+~ojUgAyQPdRE!bi<?%av;uKjEpWnWA)teRfjI_)4PB7jd&sX%Ng4PoI19P=Sm3d&
zG_L+XNM^{mCn+S7N{@2%KS&mf7(t%v*ON$6JtU2)g?kE at MLT>OaLly|=kNRbo8`na
z@!!X$`y_tP`5)r8l8sld^ieICpM+QIkef#l8|zKxg~#qf?sW*p{6ExL at Q%O#@4{-5
zI_pcxg{^H8f)^^((#g9JI=vMMn$JeLIF;xi&-zXh@}WqP&yL6E-0}rWNBs)`eT2Nb
zmzs)(tNtTA(tq<- at BoI|U4a18c%y5ksU=~xiR>`PL_Q41sFQcOvoQ;VZf!GivuD_T
zo7D$3-K6jn{-Vw!%tt1d5$1;7#S)D=cx(K*xmFk#2=hm=CSUPLNX at AYWMD@TKT*3N
z<k`0D$M?6%vyHu9JrOyHJIJeO<dJrNR<RW3kf2`)g|U+Fi0uTzfR8(0ZOoG)CoYG-
z=D7k!N(8Xr at c}Ir1>?x$@QzaQx_&f)V&p9=e#k{Ki<viJ<fa}}#SfSk;t<o_<S`rh
zh7hsYuzTv_Z--9_$JIa?xx%->Qv#h-MdlEm`nMD!_ghNM1|NiJP2T#dM9|M3m9^&A
zN&qQ at n7=(Rl)N!$- at I=p{^=<BPse{IG?4AL$o8u+PAHUt at Uk~swQnRSHYr)CN`<7Y
zVli-=8NhVz_lp6)AfCObMnRs%o`!Y2of3lc5St#}*W-Fob(YB9To?38HBy{tGe0=@
zO4YIWNZqM7QWGVjnCrHpEr?D37<DeJ+nBGPFW3>4kv*m~c-!x%U+9nD;jaWv>HP7f
zDikbM1p=kWex(lv)9%B*iR+90$_vd;Md;*}vJJN)805WRF(t8d0W?-no!d$m7^8`>
zHjwrC^?wOoj))ROmwu|%4A>7>&7~|09qAJp@&!=%X6v?bFUzV=GVWSQo6XX_i4~5q
z5#~aJii(9GPCPDfhK7m?4b_rd30R!F94O(l1$@pog+Zfs8XC3hC_}}1vKF=x%VDP#
ztgL{g9V}PEk`K#5Sh8VR084vVVy1cS3 at nHO(`;D2faP^q79jM8Q%`ja at lSPZa4(MH
zSS{1^7n4F5LCO9r<#X)Lt$*2in^Y2U(xg`&DM!auJM)#CSTg#N0lo_E{8tzS9VB<Z
zetrL0QoT-H7`h!mH3`%UlI)qZbBOwN(iSQjb{9oOIr^H^DmCNh#qy}_p44XjiI1I$
zK!(an9sSMC@!QiT*@L#`jg4Ui(8yi)rI5r3TM6r5`!ZmCF-eg5Jd|O)tT^g=84|<h
z$y(RhBSdk12}_43Yv~5Sna_oF4s7d$rTvq&^RGg0&;jSD$eXQ at kQgi%yrT&b^o}Sb
zaXuO$j$MoRDQUy3H?4CQRi$%NRfsM8S(&Dc4iSv8D~;8wS){Eih>k$Kza0F{6stoR
zQ_;5knh~x;Za>E_ix4Oc0vHk6Zh94g;Bqh?zXrtkY#nmW3XVN8GM3;t9;T6l`)MGt
zKObcDFM;u<!kCcQka0lJn$biWQ8G?_6=^CO2SY~b8JJA{TlCsTjOJq(^yz<$Y4pEb
zjRiQE(Y2{*)l86rcL6S*0)Q$;lFGYYM_5$|*~$3jC4#anb^JFsPi@}3guLW(IB at q0
zNoLjxb~ax1)j22C2?USpe4S+(*skOt9)0!ZF=I~8AB@&&rgCGqQW(=iK?n)Ff1xH4
zGXVb_d#UA=vl(TTTsFGu2<j`c?|fbH{gBM3uN>WZO#fUpb!M{4BBeNrB%!x8dNvi3
z3jVC%&rUmsJB(NGZQcjk?ZpH372S7V`*bx at PM$@W*W9g3#97{};TVe#W9}pV{eDnR
zJN5CYqlt<ucVA!6cHZ)ItKzxq7XuV%D46G<lE;OhPxD(x2=#Ppc3b^U*mna?-;Vg>
zRwt4E-;Gjer+*SY1nd|t;%compW8 at DXTzDaVhmIj>0FJ#A7|yV2Vc4i`g2T0VF1kj
zk3D!KBFxl>B4GR86Pa<m1v?`}$Z6LRRdM)bsY_uW0**KyXq#)p)+F=Fk+n4xT7UMQ
zb#v)JbHfuX#PxGoaSPa*2ZyuUaYr5U{6JXy6Y{e3jb}gOmGD{P`>OxZgUp=6xen)e
zO9X{qdv*>jCpuq0K+yL5cUb9ea@$6 at HNYShA9p&{L8T;a>R(T~%47=G96^auA+9k=
z2rp(O;?~1EGzNO5e~7ye at zgAU#C_gPkIRI}e4X9Ch=1=QiO}~?iY4<rqIWq=>}KJP
zQ#o<21C(Ooo;)T!W`hQU0H^nHN?j`;nZJ*qoZ~_k2+ at xGKABIw%os at m*khl#9x4j2
zE?2>%caaOJ73(v}e@%GXk$N8)vwOQSW5bT2$T%3C_7 at wYhpQqG(iUUg2n91DHu<`Q
zsZ%CMX!s~+R((Sg4x=I`qBN^%g*Zz-yXdcA>Lg`P^x~@tVf}GxSy74q!5AT88N&q*
z;=NRRoHvHuaAVSI((oV6<SrzyiKcP^kGyk;H#k#Cce-kl`Blln-AeU>WuJvV^=zdI
z+M`+fL<7g4?6#MFzCVUkSiz=317cyDncQSc<q*4$$&)~S7lMlFbjY}G1sdzK<tWZ8
zr<fS-Px~I0MBb%$wDd1y6a7o!FCYGvz+VCUtuz(&?{13{{U}3!$Tdchj{kgs%*Vib
z7ZA9 at fPfE#?}LK>9hL*k5}K~-I)uM79*N6mYjO;P#0~CZ%v>5NDB8Q^pJUYI0rU0l
z at nZ6Oi+p+!DkF_77G^6$>xV#;3IWO3`h2mSaC|9rt&!Rr$>hcPbL2e-aaJoq1{<H#
z$hpqWBs}+4Q;zxgbR$9+FA&D!TSq=n$A<^UTN4fI0Li2L`OuFtM*OMYp9o!KuLF)z
zGB7x(_$-ABEXd0`<i#48aYU2+ExT`wj&mL1Z`cAb|C)Ery4R0>Jet3?>Mi;4*>}$d
z$3s?m=TDTOq94bxJih;Nd&+F``z6#4e>IL(boPiAS_Ml&R4a4eKgKkh<G9?*t6+0>
zzYt3AUl4&R9oY35LjUF_(UACHYYpwN7frz9TjX#Pz~8(%bn-1luZL!V$=>6S^OnCo
zH-8ZE@&u(cOCz!KCWi7IM>LAGe`Q&uMj at W=b2?u$&qp8-rgn%gJ_k2sgKTISlJtH$
z5+Ldi&2<r^e7x>v>k>zSXMPGo4{V^StRH!FYm-K3(r2wV&Gnx2kKavrmtyfTcVNLl
zz($fH|FQ7XMh+fG3$K^W8<!={o^9sQ7yA*q_D1hrbDjJGn|E`fxjuP>4L?=0LR@=c
z5D582em at woesDbbEsmXH?cK_kqiLj2F~^U{${#s0^S1~459*Muefn$jCiv!r_8|zr
zY6R^ugV1VT)lmwl<}IxVsMfC0CdufR>KJ$RfoZ(O|2BL-j2J$1Di)JWN%v##z_@{|
zbfH~I*i~n1&sGahWyQ!RYoykxE)Tk^`hmpD5=eeE=wCLR?_PiF)sv$Bjncw?_RN)q
z;~<WKd{$@LUjsAi+Ro??rMYI=^_=|kT(!db+u`^iqAGA4rV;p>@=VdHTo4<64Y082
zM7#Rk#^?^NtqT?cEW=A6kmrGXymh8U*aX{A0^TxBk0G1NNIgLj at e+k$P^*@@ka6V_
zp2-6lQ~yLCFyEahQf^0(%bdN at h0VYMM&qF~M#<S3`@`>%A3m8jhd;egzyAFG$R|a2
ze=XBoPTHA3_6z>gfBHlJwM8uwWo4N4g?j3Z{}ABdpnHR}S{5=*T`>7R%W3AhAHO at 5
zYn(s%zNI@`wfsqu{_6Z{nx+KG*OK%Qs=%P%mF`Cvd&AF7UL6>SRW0#d7^Tj0VpDvv
zT6Yv*xr70C?3C&cS|P@^uFv`O!a(3%NCV?5Q^91F7(`(TNDVibPyRR^QAxlIHwMrw
z<ez<k8zc<OekA3KGpBrrjg>v1ST!M(9^SzzBo1-@>L$Fzo)Gr3A)vF8Fx6sqBz_P~
zPUoT>v4`K%a+AP3uit<q#7a|u^??v*frIWvd at d#HzfSu+5|$C+G{mOptk<a+8bF=8
z0$o-6P118*^=s2=Fb=zfqJ7n{OoSzO39Vv+`aHhP+nr41`nukwa(V*hat?|7FkPa(
zQx`>u#k!-|_9e8!X<$~WP`%#VCUi$tzpLZDGSv&k^?hr-Bp|aW)E-#W+Vayy>Qb*v
zum~odmcK at R9-S^~D}{9qOhBD5D&S&we0{=W09W<2CO5ntmc2EJ;nA>N1S468n%TL;
za<DvI1ZqA^ayJiJ3S;_}Wc&Qfunjc>$Ou0xa}ST9a8>>Xq6!s24h`Z&SSG=8DlBKh
za?-nYG1<N_6G&j00!t}mp&N8BHsY*vQ5cN7NHY^_pwNh^+2Er%F5iMYGH*Xf4mcmj
zd1R%Dt0$#+TL772E!|0y`G-yBx)QM=%|end_W%YBV~ApJK~Y!UBxt2<ph~X_s4i8K
zR*Gzo*$UXO&pW@$Y<+FCGztr=cDKW?L8mzz5kM<U*x^@T$Bm at n;S#<%@cEAw_BBc&
zf=lrfXm45u-&RhHV3518>-p|YgL83g$dBp*ES3D$tz)IA3bwbb`Ll=TA13C>*&z*V
z5L$?`Fg;>J+MWmdPEg<mD2E9%qVH at EAtO^{D at c;b`70x6CR|KwVWan!eK6b0gEmbw
zN_`w2Ul9Em$iMqcUy`~NVZ~o@=i}GqZ0s|8Ztpbtto~_o$=!p}5<#87H)#tK4ZDH*
z++CR5l4_6m5jGZ1D#hnZuW|Os!lfhcn0G6U31V!3t|g!|+ns5Yc-s))Gd$JhRQK%7
zkXN3|paJ-}D*W+#1K`;z_0(<wjCA*e8muIl(clD{`?Gpd8W&GpY_ at VGQVc_H*}bQr
zOqn8s6wJY{AP6-13E#P$>L_}VH|f^dX|?ZIWp*gU{)8t*cvbjMcS2d!cq`=9Dl at MT
z$SWF7@~T>fD36ardU*PA!&Q9p1nl3AGM9{@%~xGFLDLUq=s_=(8|5jl24`swhRQ(0
zck*nkD$y$ZFPRV7UmZ5!M7|$*0yo(BZ8-5^hj9nDlqoL{UcjKg_~z!aFUYu4`(wQ8
z{^6k*m<6~uvdBXT^0ZT$xsLrq-k%a^d{zPT4Jp-X7>m5h7vNVd*hbIsr5}ea(_CYd
zmsj at 4%I at unT{(%>jMpYmLecWzo!=bqkj1B@;5CE({htywk;+KmtMZ0G+#wJe2vl7=
zno-CG9x^uy+VDxD2G%`gt`gsL+^!^DDEV5J4p8IFL|AV-BAXA;hM8Io`DQ%bQ{5VB
zR0qci6n^w>HY?OHfjwL at IK~TrIpXe|jw|w=D-^re{2B_>!8xf}faCBS-~?sRQ;-_I
znfw4w#6 at X1OxjYuM<~`a(rJwohGK9uvtz$^n=GK6!p3@*qx}kLrf8HCZ5jX+#nNrX
zM>6MRW3|gs{A(u$Y@^bv5Y*gOwVaJt)-eJAkQ^7W_r99DCpPpX at Ctf0t>yA=svKW+
zky6-zj3QR;R)2Ii`is)j-b9)5iy at ma-gaes<_p&IK1LXZnFy`ti{tGOQ*MXjC)A3o
zgC4Ft@@?nLU=cTQ3Utk6 at PcUHq%*d!8Its?O|iHQi>dtq$^w1RSJ^H at wLic(md={6
zUs5CK7e0v%N~TC);L}K+wD at ov35N&By~hehX4^HTab|CnI&#0n6x$nRocRjYiw+I?
z-t$mT%jrU#$cc6>#9MNrl)^rMaXZiqZ&0R^$uZ-SU8NlF6 at f7r2t4Av<u!J7wEyI9
zWgz(wf_P70^FDIe-8k;Z4687!JiGc*^)w8QOGL$`{B^{jXNJeE+6rDU^JU6_qqsJh
znjssY?T<*v#A*}5&;AUMx0zUX;=`0`H~xYSdKaK9`)D~0gCU?-1YqJY|0rs{(pbsu
z at Ts&W&jHu at oOAmuY}jYV<E8&j at qh>s1e!BEU(6m*6*E36532%cBH|Z?^^4Zy55h{e
z(R!tyOTINy7&!T%G995SJ)CJId8I#;oy at Nh|9^bFd0bOR_c%NW3EV({00{&HbJ>@Q
zMga{-NC;a%k;tNmqR3)2NO2)i)Oe!}s3=AfB51)4ms*$Fr{eaw&=wUdZQXEf>edzu
z+E$bpBj`Jmh;5(m at ALj~KXaG4GiT16Im;~PP^|kqax90ZTDEWwzxJ14au#n`APbPv
zk4Y%<E}k2_$J5761{L}=M*49H<L8YrzYLAAF^ipZ55yaUk9Tqorv;iE#w37vqNUUv
zUwcD>SLjW&z&aIB-Z+gp2geQ8=3vx)whP+s#$EU?ddG(b{e*2|u<OWw-UymrFLv<E
zidNVS#1G;-IxhJP`{(SbP+h2!TBhEeiOvctuy4AWOA$1^lRG$q5P3s{-x)`nV<)|~
zpFSquO~~*1NwVa(xD5F*Zm9eyc{H at JxMv#2zJbbzeNHRzc{Waq9olbV&3a+gzGqpq
z??j9Ct;{}+z1O~fxJ-uHH`G0gK8+qM%|<F6REaM45JO5Z#N1K{Trtw at Eey+1iyhoT
zh{4d at EfR^Di<pfw*3tC>%`{ImMSE=Vj>Sy_d&S+XE6$a8I(e*ARlv(()8V^G at E!f^
zgOWZMpxS-d0nM61Y}C<d<?knU+NrVYkhLzuh|WPZDL~n`7NfF&?dhfnvSZF&O&sR?
z;8%ifPpx=}jpuJz;HkV7;kv9eyNKWTxTEh|Vd3&=q~DFD4`(#HsE&Fit=UitTjCtR
zsYV)d)g8>=C{WEsXK;3fWWScPT*jppHstOg@^UNY<;`8Pbk5?zd+#n~!?IfxdAa at B
zW6;bMMLEWVy2`ie5!x at n`i6i;?u at F!t||OlIIbN at 6yprFh`I;ZChrqLW&&t&6fs^>
z2Z20~jinxi?~jY at VM;Rz)deL{Vrp%@*tfXAKERQ3`t`$4MT_4SPF!G|oVT=MO1|&5
zggGKb`8(;kIdd|V%z4i10$j6|FHGLaEh^_f8|FFVYCzEJB at n6?CWqwXB%2g9u&wR7
z=Ll2hY*-=R(S#-!ebrWI`;=NV^<@x2LULBz1GD5yeaPEOCT8ceI at ZXSnn)vVL9 at O=
z9Fh~RI?ktJ_I>f{f{a}3dk4n}At8+6G_)RIWmuLjhbAPkHe^@!wRa(vStR)bF0)3K
z?<-{mzg9AWaiZ%W%`zGJ4j*M)yf-yRfw3V`+Q8HWrVcRmL^c6TnJ`6 at e%>&(gDDH9
z&M+NT5edlI3d|NhyTE5R9uwJ}7;-_1WiSPoGKgO{)DQlY@|Cf;XJuxj5Xcszvl3ct
z_Xsau&-Nn;GBp;8c2CJOF-FWgFlyHKx at tKDASV*DfvG1<9bn3YsVz*sVd?}^7EJA6
zIt- at H6%c^zNQ?}h-QcrJ%|6RPkV_8Vuf&p#JJba`Pe?C>sD?Ye{C?RrUJ1 at Imh7F<
zRJC_%^Qa^7<^!CX<m0PYnJzfUWZ?KTsusH`_i~1X(PJJ0nD?-}=`-EidBa6l#`R7-
zii-HfQpD7zsw44&!eKH8p9t5NFM~sJ^ueKX5{|@ovsy-%Pl3Nm4_8=<nQbXX0gIU_
z8zvaFH at o@N-W-T7YGm!Hhp57+eg6+2N-RK7EE^N&SW2QEt1^G1J0Tn44Xa)0&<LwN
z9vm_bR-69InvLD8$-!qA^~klQBLwif!l4;{_XrO8`Sz(E&evK at euT5u!Wf!Y0?uz+
zt3%Yo9e<GMcJjW{V*NWfYasx(O7CFbx3^E}N=t>LySjs=p2T57;IJXWHQ(pKFG at xn
z)^wvMX+Rbn3fqeRmLSP8mNzLmW^S~yp-0foigKyhiEw|e!=Zhx at 2MEywh(n0XHm+m
z)zS&q-t3>c7EG6e-ST=9>DyRPtn8Z4xqwS5lnoHLyfGV(WSS+ at x~%KEO`0PK-1{+i
z34Yal4jjXU#)n at f77aglX`nHtm-p2KN=VLdTGu4ZiTBk4hCD2S(LXK%EUd8p<f*{?
zPp=I%U!B&x0s=)VADbR?HpK5q(@8)%vxV2u`-h1RD}}~i)FY^dU4kvQPi0|Y6;PSf
z{EAU)_E;KmsSw+tyEvc2zWQ@{Uo0v5ffm~!IM<eZToonrXOEK2)4iSV9x`)W2GVG4
z*b2<AdbTR<J`k;0$JAoeqfpjWu1X9GMOf3tmU*Vwoofr|0*trApzdc;Dpz8h$6KrI
zeVtct`?#m_Q1i0a;oeU=c at JZ;qpiPRhb%Y%QP-I$(Q4`Mr+!O0;`If5$IvyEaoi^U
zZwK$#uKS_Pow<J}M~zyP=^_Hn>zaxMg-K~TQ&~dr|M@|GaEKxzTr09y0^YA$jI~Qw
z_;F77PY!G`sA;>L_z2t4F-TpDe|+=9#*K+k%w$<MWBh8}jG_DGV_%X+XIq{;@&8ZL
zd9N-3s4hi+_~sA4Js<i8HC!q^cIca~vD{ZcA=(^RVgSu4#~#XL&|k$Fm!$tB^gw)1
z4mwVC1}Y+&^Fprt);&kwL!ABcxnTxxwu#QKv)=1W<pJ(JKR$TJY6Z6F+|(mRK?j;O
z)pYB|EC?sf&=oAm^4D0u?090_Wk at _J-CLo#9sLJ-_c6lCMJ?DZ)!kfx+o$Zi10LM_
zk*)nvyKqLHcDVZ$Wwrz_sWD_Bn*%*}UQzdGQp5nwB%*_AL)Arn32aX;+*|R(>y!gd
zKkGi>E%kKnah^ILcS)lrK_<F=wppV2)kN=0I6UKkKzD3mJV~N6EleXjHt7-<`Fa*g
zz)P7g4OtvW4l8MEeS2tlr`Jv0%0*EeS+Ty*fu+ZWx!p2x%H@^`$dpu{(- at kVJf5$+
zwrC`wt~$Q9WM?7HXJy1h9}(k%!p~;#nOZQ#-sH@?!3{NR{rz<%HQ->```vb8+0+7b
zuo=yTX>M0O<9(?GGfhyP*fJSk{A2IOn(j<?Ne%!$>)z at WML?o?JDJ;hkINg#GRz2e
zVbkX<23eZ7I3s`mTYYN4k;yxo9pQ&41|4S3*1QEEAO4s+;>gaV(GFZ#SV&n8%zW~#
z9{xBP7WS`7^0!zj$^2&}x+{x)9A0OU41Z>CR`mBS*O?a2C*M7wn^Td9NsrBuf~gui
z-G3^A2|M7aY`_@`e?zJ~60?Wp$7|5L%{asGOxGd5VVwpYmjEp|h_7)r2!Aexp36>S
z-{**dvQA6-D+1|JD?^pFULUr$svk<&f1NjoYT67lrky7N`4TPg5V5_IkQ|+YF_JPd
zm!w6QCq+=?U7?#H_w>j#*~nIt7|OAbU3I~s*d+mqkRF+CgPcv={d)iFohK at P?{$BF
zCM79$9UN!LSGo)${<=8N$`Y^B)erYBK<Xgswu`nIt5+B7TY^+Xe$^RLC6%(R&tFx@
z+bO2;yMOPmEZN#*p at 3{H=A5Y(UU5?u#@>cqT(Y%x=)L;Un*WyFilt9Wa&ZA|RA&uu
zX?j%Z2%zp}9UGyGR7AV9xjxV~p1dS&b}`-O+#Gy9Rku>%5j4%@6q_r5GmzVFM)S%R
zWSoJ>Xg7$^IZ5Oc*~ROc?!O98zxJfljj$Oh#z2EeWCITRL{S>@pRGAwenUu8Ue{u5
zqt2-CC+<KKVvWh?-m{eL$$AoN|JC6(${UzJpPDjy*TfajIPV@^yZHlR_M^Qu$S{XY
zJMiRPL9JzVqE-ty(QHSJosc1qMC<FEwHZ~&TW2GU?*f&-O<K&pmZK7poHrU*qh%8>
zr=hM4P at lB!m#|JH5FO6l#Ls1|u^4~ywKsvDc*hr8PQB5cUV_KK_MA*jcim$QR2R3*
zHzYO}t`dH>X`Ai8h~k1OwT}b|V at L1wquA^RCEjA&o*<q3(&1 at tiGJ#`abn-TQbT+*
zZ(sZ;zx7Uk*%<S%1jlUIGC=nU%uuJMXYSVCWqk|P-#N<d19Wt*UQqahNV$&f at B!Vw
z>sBu1B<y2TktgA}A~0)05GRmV04B*+<G^^XM|Ou at aPQ`nyrun-Sv19WhSb2;mt0wx
zG%V$vgj-}V<X_3!y+}|*U#NSq)PqQEuidak7AC=qG=_AIoz&~<yWr+dNmVcMb^P};
z)uc(WOl&V5Szl9ZacN1t`Fya~Jj%H^>-eNFR~2&lxSSkko2*ySHp&dCd<GnM=U}=C
zXUNN4fjmeUDtC|Ydx^Gzj*sxGNJWsw;P)(GpWVA4`UELjzDtWGe@}0!IF`=mL7{uO
zcUcE=gUIZY+NX3`Cxl%+#!v!VXOGhzsbmp$IF2g0!w_1VeAJ7hv6C>`>dkN4)f={q
z$#T!vNJ%t#_W~fVWwUGD?;$sKcBo;O&za3*65PvR!yKJ*v%c(R^#|XaGI4=oQICwT
z$HA*Q2w?656XJfGAT!9E-v3?Z^w#gtEdRp$Yw at yU;t(Q<0ql5l(?@r+q#k at 1D=X#w
zrNvxxtX{uEcXI;Ek6M-pu%FJGEIaQj_u!{d+RfTO9<o^9Zq^Jz<-!PZ|JZcy<)n0O
zH|yEx!#Ci6UC5o-+;>n&xc7bX*%IZn&%ax4XUQLq#&C47$<a|z*sz at UC6u6zA#Zh8
zmIc_ST$g%{yax at zi@LYV*aUc84y^@Fv2%5|%sg&T at 8zU?Atob2N~wZ`uZC8Ky+I_^
zs|370oFcy|b(p%Jwqem`K#||d7%lGtc1it!67v^^^$^_X=6>mM-bLiZAsx$M0?*IW
z+B=(bDILuN-TR!Lc7LIK0mt=nL#mz*==xd!ln$HE(ra_9h3a-J_q3U9NY$NQK8z{j
zt8t*5Z*mCGlYn`#I{62>MAy5#z- at U97cJw7@!|rojNhfjyeoAxR|J!)b=4~Zh-JUS
z*E7(O!U|{xWVeE0J$aKx_vDE~1chal)7`!36->-Y#&?QJinJcaP?Yv0qFo>mTw8P~
z6sAr}9cE(;Gi6pk>Y6 at ul2$Cs6+-5cfR31)WfL7Uy`8JK2TH1akn6eeh$J$2IfNb?
z$7eak@{!}HS5Eu^A1CZ*-?++@^+B{$7Tdn$W+A9_+(K7w7UO)XIrRJwfP6XZx0kXj
z6G$QT!+pea8zrA at 3c?rFZzG+l13bCA)a%!EVyr|jvd#K3om9fYT(b1(Hhg^<NvY#w
zXjAX{$C%B at yBS}k`iLC~!STzhGxl6oL&N|*5sTIAG6;L at iOxq1-zUn6DAK^*_~qZH
z>@(!zPvA&&iqd0jNboe{ClrY?l1K5&z4mU`M at 1bEujkE;s(~8Cw*%?QS}{J2CBYST
zhJ=x~KCoKEyb}>uG%LC!QL%s~@4^Uf($`pINY1to>?maqq#_CkFlIqvrJrM0s~|Cz
ztz3q(&OVIu+Q)Yp%k3=D?&Dj!c`~ER-S>&xO%sQ6eaqgI^(LF>{RgouRf0|OS0tL!
zb4N$*`XIWj at JM`CD~<Fll0kdLp4;&>8&Hf{YGD`y at 2vG8{smo<46`gvK2&-Vm#q_L
zT)O;AuMaHQG8TH#SV;4(*#+eJP{7GqSU7Sg_>m*t{*S(&VN6tsQQsqMR^$Li(rgf!
zbOzw(0wx}ocge=;6Mj#LCL-(|;Y~vHS6<`#=@{jLM&;i{2R6$ZPTf{+4#t;UwI~<f
zaNKwr=N^vF^B331r($EF$~?F7d}uRTZVE>mwcS9df#qC%iG{f<Ra#8D40y_?ih*pm
z$)#r^pfyjw_U4EGqVNpBQ}J<6rVMtGvKmAa@~K+vn(xGzS$=0vqvb=<X#d&)2L1$D
z;_$LdUZom#WO?4)m&df&EM69=|LSBgC4y2=k(F0a5k-$kZurEBUneFR{ZzA+K5%fY
zGf^^%W~rZe?(ED!5~yD4btfiIl{cR9`J$q=LRY&hI!@rIH4jfN{f=f2h{oh|B+9fv
zRjr(h*@nb#vqjUxTRT$rcY3$|-mX6QndLmIPDGcpo`R-3_us at k1`Cwgn4gC2JII?2
zq<ohV)U1AtjJ|cVI>;qmfYy|8Bqgg$OfE}`rFrTj$S<=od#JA2YS_;^xkb3dz$V`=
z_Yl%o%Lu90?AkQjz&e$qCIz*I3|k{*7f%(^$@^k%A<qkFAH_Qz$}GmAzL#`~IX@)1
zmE?%t5A5`Es*SX~PY(XVY)pS5#&eEhE=Lyjn^T$dL9%`oL^)!Ekp12C at -#Z^nD)&_
z$mLoYdHFb at _i92$w~1pp*$i%7_NKP$DS69XK~pO8yO4~ijE!+k?-o|RfY2kJ<%2oy
zlRo`ADi0$it;AgCZrsL7-a_)u$|(e8H)1J#mmsjH-bBvINd#rt at Oe`Zm;o)wrZcti
zbNzgu3YatYDrFctTL+H$?@bBWG(04eRbFk|)1$@sBHi9qVT3l%{Sk+;dap)p8XnaJ
zg1T9A9R}+F#YfMqm&?TztCOAxvQh#96ve7}`J+Lrzc1D-ha*Z}kA-P+Gk!F$&RaTT
ztl(0Of0b~MQSel`5ikdvmUfhmWl*O6nsON0SGZ!XsvucMa at 2Hhw>ev?PN;2w at 8)gP
zWvuosh}uaTKd6VY(Jn)kypu%DWlUL$A~qOHkBFSR1wRbd#gb@&V0{o9Q1~p9cSZ|y
zkG2%h4Nbg`(gO^7j-`%tfW+e;)4eFjS8i=6+EEuvio6r^jqb{7zbPqu0$W${T-_r4
zU~{YaTg+p}E@={G-W~toR7^(A;U$KEeRVFT?NCV_coyUst><v(=;wf_&9fP9w`9X>
zU(T`RyfS&h`(d at M7<qfZglf(0Ie+RVeln80ra`yjlO*D{gwdKV4I8mWHBWiR?7#2H
zvag#@_onWXPApV1 at 6zNfLC4QGYK|7WR5+9{?cJammi$e)Mzv|@s(3;17uBnS-&HG~
zs&W<Hsu|KxT?RfJv4Z7BhDgK0Q!H+{$C}Ih)}Ec0H at Dwi{C>uJdN%C6 at dTf?))5i<
zWj48kxFN>-Yk^}-Vyri$M at Dt2Au;Jo!2L$3j?W1wY_O%UcPoYSX*r{I)SJUKYx#8o
z`n6v#u1f7M<7E1v^WV;EPUoJ#%!$fa!<vba{8Bipl$)_I#Y9zchsO$=b?#cy#00;!
zgPe1h9Fp=$#!pre@!j`M{n_`}kbxjRy3c|Msl|iZaW8uEPF3`oO(xRmP0Kp7Ruz#H
z1?1vk=d%yWb(6uuJ!8O<T6 at QgUxFKA61Tfn_ehE=z7{|moNq7tnI6sa{eJWbyo}>a
zwE~twz1^U^ZGKZY?sf|T at Mfkuqw+ICOWJHpe7%c?cM$O!_1U4L^az;O5Pfb#N9jSd
zV)1V!+sps)eVH`uIZw0>o&ApDg3u7vHro%!ZP52x_&tuiUnAM>8Wjmb{~WgSN%C=(
z1Ha2EzQV^DL~%qB$mP>Mv<A-z1Zrh=hBMkLGV3Kqt*lBrY`IT`3K{#ipV0kGv=QK{
z(9=gfsv(LA0wL>R$~Fn3<ySc)g1=<gS<ZT|u+qTM%hIs;Kv69OG7NTEjit-ZUtER$
zV=II-!iVBqh0t>?Fk_8860m(pss<lgoBnPgvDVM-_9secGAUBj8L)*TGIAZB)$AQe
z4B7OSE3X2!UP&Gr^N^!3SlO!_X;@f-N{TAu>#^_&OX#uu$q^umDfYeOBlaEm=?nWY
z!R6I`6G4Jv0?3lP0U}f}{}{0|`pMvntudVsDzCk=AH+~d7t-vBM^coDDC|Jem^H<!
z6ui}*k-;ioBPa}-qRc+aoZf(i7x at Ujukrs)WNcX#Z(Ie0@>|1cA^ETyEdJb5_NN{y
zP`kP<!Z{2m8Qkcj1%<0t4Aw<}sa!F5tTq3oTt#?UPZuNTPeW9V5^Yqn&4K;_?E3u1
zn2sD4W{U(TOr0v9JGtk0Vs at 2(ISsG;D}o&5afg=NqN2PhH_`Zdr{PM*WbP7%7%a+M
zRjRBqhob%9#Q=Zss&JKPkg?6-)EL*bEmu<xb<Pmo)oR at zA|g*C`Z*y3&0fR!o5Yj@
zesS}Pd!_ba?+l_WW)i90k-A at SOM(+shII7I*QVLFQ>gnpv%mTMb7w*4Yj1&15(T)%
zT!nV$WC1f9s+m`kBt>%F7$Coq5g0hd8;o}m<HizoqJ|=%j3145FlR*e_+`ZAcmpch
zxJ<+>pbMa0N{$M^$a$~q8Z($;ntxY{T9(g4E&xgV`t2 at JOw1ms21*@Hle@#z4W_r~
zaY&!di3N7|`MG=LU7Q%@E6x}PsCqk8<@*le1s$dJUQR<@5!gzOZdZGsK<jmgJ}Ue2
zNxjSnf*h5NIik=`Grln~k{ebzBW4t(CyhUYJotK8zy0*ZTD-QtBShxN2}Z~0@~>vs
z%X82^d|#K!|KvM#YpqQ9-L0N-6jq2^#jq{0Tq1x*%nC9(Jc0#QR at ragSgJ~P-Y59O
zp%#^`8 at tYx{>W9(j-0EXynA1x%U&0d`1t%jbvG+SpsY1fG>rj2!A3#M<<o;3Pj;Ad
z{wDZ}21xK4l at z)1d)&TdTX8SunAQIgNl>_YzV7t8 at h;y5H#6u;XwKIpLa7`qXwzXe
z!$+RF=TJMuhVvJo!=;Zpe!q0)vy)Fy;fRGJjE!0BC`ELl%dVNi#0R0d7Jz*Al3!aU
zj<DEh-Ps!VNRdC@{>-!Cjl6!_KXCnxhpXFS+xt8ba_|tA6bo>r2h?BANbuz%L%I%I
zKbka27qi|cIyy=ZTv<#oA}SIKLJNJgsjzPep{MdX<~X4b-oLfp%f2X}$*)+5NhD}`
zvp~0Ly)Q?DQ4v2VX5bG7UAEZ{QF!X1O}j0SUs>-?oc=M at U@gMAd&Se#eCz$)Qoprc
zbjDi4wq+g7dwWyY{6Z;^55zhKuL2|G0e~G`!U!MYQTa^gY9FeqA+-r=r-F=X<qOP4
zx#kQ-#QJ789ML(+dXg*TfzD|9iv{x`M;p)z3}jK;^en;~jCkU8==<6cXa~i+AlRkh
z^Xp=shjc-FZ6W*en>i7vE5}`uhJ}1&5tjZ<4NdVmk$^$m0379UoMHGh=1xy~1lecn
zvi5!ZV{V1iZ=)l6>1NdgqRpA;D2dXsk$P;7VMf#*;Ir=^QiM1j4GVs(nseXIb+<ng
z98&596hQ^0LBXIb_My=AgEvn-Df7T=qWUqCpeSWNwErnesKd)!p#fR0E(rb-b6v6r
zU=SltPkJ5{mfi}BhRoN=OlAlTp9bD-soyZ$^s)T$ToUAcYqvQJ5kcpSZ(nP*9>l}-
z40D+5_X(Ic+C<sv6{+3Ec#&0CN=kPY>Vq=LxxsukZLp5c^K5rwv#X#2bi;|4)mlml
ztV?iA4_sXz$0`8#|J+w4URJPFlLBqAqilPbV-Ul=9va#06R<f&s$|)-AmCmv4iEmC
zP3ucirAS8!+IC_16XGHftdpMs;MkmQQ7O|9fTX>J3I6oWYge}yW47a>HOgV;K<z0A
zRKFdmuZU8h9N=<aj-NPN+0PACl!F9$D at J<iyIDN<>TpMdi66c{XXd+ at s7lX6mp=2y
zJ2L`CRree}jg`4>{Rr_<4HXL90L;cN9$?kPBh{St^Rb^9(^P4z3uj~+3n6pu at +YO^
zLVZ)?!~(g58~whL(1sMR#<}N*Q<v<)ER{U*gmjbE=nV<A(Wg0kv%JANYPEMg9)I at J
z^-lRw#6se{gR`k^@(R<iy>#F*B;DN?8${6V%Od1akaxW1u at S*I?>mP)+4&2a-p(GZ
z<3zL00H2^(;B}_X<Tig_%yUS^o|b{QCFZW+_=KH9gHoJ{1|`QbSf at _|6lH5ZecyXb
zrXFHI8OIDV+JnSd;mF}r5M}CZ^YtFPQ>2W&*+hNWOUwpRs#jSQ=D%UKVFEPfAvfS-
z&il?jLzYSNM$G=l#!tTA6+(1CTfRfN4%zY)iG1 at Ls<Fh7Sl%E8kGNL5{il*vv!)vW
z{u<712n?BD2Y}(xnqvnB2gHL_80O2{(fK05koc-dD3?c$pc~T&^9<HXj1smsda(DF
zm~QpH%D!gV&`_X~r5Q|NBeY^$b-TmK$YijXugGBYjgy!;d;s7 at V(|f{%qB7A^&kLV
zk%|J4=)-c|TUqsBo3fT2!OyXp+q3surc!B;o~j^2{Q+7&__Xtwqh|bV($fpOB^lct
zSMN<yU|va?m>ZhG3O#0)D6e4lIU>vpUTk=|!)qA4+z#MJ68U#x?&@}IV!4bITu9cp
zk%uSd`}TH;L+)<WUD)L7!3^FByJ4b<=8yZf&F$Fcg2c?1<8^O0d5}_c?sdb7hYb?X
z<-P`y!^93;#<jPX>s4`OTKc$!(euAgO2#~ux49f;6nB)e>C|08;jF^G1hWL9I|25&
z?X++=b<pBf at jX)dxJ*U?-gGiMQ7HqXlu<xnTnJ|Io1We46EQLd4X5sww{K{Q3a5{g
z9oAw@@b3Gvn=66QZwHZJY}qT8>j4vTJ^P*&zO?2&95w8xv?8pa?M#&zA7~yy(NIR%
z8&hEy<zY0~MTXv~|LUR?G#k938#ZDi=H5fYpF)&UA!@mT!iZ%Mn_&=}{ue%j*rlxA
zi!fj-!>DMXz1E(PtloZ}uC|=K-^ZmH%S`APs7nuIAe`@mk9u{c92l{fG&MiGpqdum
zb|60xugaN;h2>1aK7s%T-W?;U8JwPTNiKtIQV&4?Vm8-;A(<gzS}RE%R78rGeS(GM
zUA@@Y90RiZ4G=qSK%mq<6QH%DLE_!1yG;@xS at Lk=%&|+3Bp6E=vj(rn+?8>`C}SFs
zz#jz0RFI*(ZvCP8WNrNAF<*bZ`tgPh%|FFlmmM5I>Av*f1v<OhJhFFr&q>&_^IGgG
z{oDoK127e}cJ%bP5pc)`@GnY-<-K<CT**++y!)qmmNAdgM$9^YUCnC7u$*ShMtW at 7
zx3XzsJJ>o_WnY{d>=sV*^&^R>kSjWjI=UkU0&AEtAoB{Z?DMi2qG}5b#Uk``8H&mt
z(X{iNaCs~6K${~5WPl-8;2fjEdb~Jt0k(L#2Yp<$ev+-R<Oq?dY3zK9DquRD`wsEq
za(8Rr!hRLIdeoCOYN(;xY#*jM4?Ot}cn7pi>||WFLlgt!eB6)@sCr<V+#p0#F3lB8
z%!d}JYJ{4g&4}fs$x#%{HatZbYFzPM8gI*j5JmZS$<gZ;@RYp~W73VlSFxP<Eit%B
zYJf%&10M}2CWqgOdfg-NoLgKTt at gLV-fV6N?cs0nPo@<-otr!RDdzIvO>IsDxAH~=
z_n1^&&{CilW(W(bKHdDW?SD%_X20?_ohJnIcoHD>3CA0F3qj_`%&gJ!<Sdfm(mpj}
zMDkJwLwN(z+b>?6C?XQr9G}y(XhM<~y+vUXm4%sNG<Mq^%cqD#`sNtorR|}Axq3Tq
zM2k8Q8%$;58SH>B%%5fA37Q7yPmh#rZvGYW{3&tH5HtRLmavDp5_C9P&cK48 at f?zT
zPUZ3V>y$4BWD&0YW5x6jlajU|lrUx(MEp7v<3Jc?f#Kc at vo!JAi}kJyPvs3Lx#~<5
zv^u18!!YDiPPtA%8Fb-<SQh#`{?Ye5gXmGnla93KT+F!qaAIG=;iMcs7LXK$1tzgD
z|HJOmu!p)hn=w)KK{=4U!*pcrEpDjt7>5WAz6z-~67xVGV9JT13Mkpoo>AW5SbR1@
z`((l_f68vYcfpgvdNH1+9zoSmVA?&xVa;!b1hl>2KyY_<@05S>gakPQ*l?~mS83F)
zK$-5RR-bn`*_WXbMhex7`$UH&Xctd%D-rK)+1kGwcq--{p3L$Am}VebE$<>R6-5WL
z`!ae6eq9<lMm^G278Ai(T)cO2`Ifk+-|0;Bv~?y at +WK?2wIFh6@^Mn=z0F%4k|Hq%
zafJ(({9($Tev1qG^G(h{O~4!ZKO6d{*lbEh&zA_cus5k6y^I?d(ir!&cEXWl6g%fC
z1GAZyq{Y0yTGpHD9YK!#N{sWX#n^;?F=k9qPn^&y_T{I*=Ud`X{sovehyyI&yTl{-
z7sZ&M5T6Y>9}jZA(bF<88_3F|?_AJgb~D77`QE-0aEOmiiUh8N`!l<}QwH}P-S^jn
z7qAdC_C0DZ#?nG=4yX1w;m-UUkmBDDNl1WPh}sztwGOh5W%tdx-u#8bcKu%d)NcE`
zD<fPo8EF7vL*_YxnRzu0$UGMSWmp90_b7D^sTX6tT at yyy=`oC7B at ThSfmad*h+(|Z
zAX<J4AEi8k3zW}sj#AF1LUhsPHvy@(-U<*8$80LAyf^k0HdXYb;LggI at T$PDeS(AM
zn{Vu$2n%!Pv9QpdLd-_P?leqG!fblJ7-7d&Kz2JCa?r^j!#EYpQgShy(^pR2<sFG2
z_us(Caw7r21ZT`f&@><!V88p$;o at 5S*kW=){?_O_z48yO9*Y*6je+K3D6 at b37uO4d
zl>d?M6Ug&L7fKBY#zgasn>oaqu#T9gr+v}^a;C$7zsoaeCg$D+&CXLBgiK?>UhyOn
zyHQTCurNg(=5)!M%P{P5t2(t2^6xcTZ1QBx4{^np(NO$GK=JGT^fK(j at pq6Twe#~2
z$tMGn@&?HpDjTs-*+}wXiS`K!sqwyzr*2;;wK&l7fS3z_DF>z_y1oZAc#-5e0PVgH
zlvcD~RK5a$Sn{AP7eZW31mFHdnKN%p<}2yZS&4x0YUbBMF>Gmm7?gNMK%cgUt%l=z
za!wC$L{e?*sLu6D*pHc43vlHPFiw7B1?B4%s(Aj3Q+J!MLc!G(OF6vkh!_gAnT9~3
zx|<c?bP3wR=3eOu`87b#55=qGeITByyzz{~cUeK}IV{Ffy at gCAwBlc;U3*dZQPI<@
zA)8L6GQFIqtwG0>Cj1EnMoLTZ5i!Ede>yPg;5DfIJl*0=5zA&vbo8x}!=3jj{!p%i
zO7=@S?F2fnvzcducw%K3?67X#%&lG&Bvf=OwvGy{o_-73FSnqbej=vxmo2)#&P?7_
zorm7tv?t}Xsv=)}8q=w}veomW9k8IA5x{TjvhL)Dc(SYq?J~q024p6NYyupdH^uKm
z!R}eBV}9yO)aFx4>)=0A^Vy}Z{vjvPX5f8sZZhocQ-UQ9nZV;R<$FM=;$uU$1r~Rl
z(Qo*ZdN|VL_OE|}VV-hzv77>&9>Z~pSennVQ*SigUR311ZNsjr_}cgEFX}mFOF%$Q
zK$4xTOce6&N4cssYAyvDW1fmKRZ6$)EiHMAiZ;Pk0=^|_LBoHuNb>P;2o(7&p#_4I
zLt%-cm~j!b5Y_&kJj}nFmB`&F*}DiznDIeUkhpW{wRfe#_|r=)w!b+T`%GRcq}>n1
zcFWh($Cqb|eJmoz<E!0ETSWVWh(V`A41JD0c?<h#hECGtLztla!>yvoGLE<gQA?m<
z2DGVdp{}Kt<G?P0iXHSh5k0tXLrlje>61ywHQ(Dpu%LhO9amVU9omjLAinnI@|ieZ
zT9rM9&KEW}#B|=f#Q at 4?E@<v}@D6#YuI&Si{;wLx%VCeA|AO_HH-XUm`P!JysH>PQ
z#MDfp3WW4Ohrp}{(TcL6O~Obhs8R$?uV)Q#4%>D=dGO+GA!9-RS0f>icmu?SOHK&h
zQ2W07wR!9pu&iujfEjg_ZQn)f0X7SXFym}Lbm>D0;dwmS+NUz?+Pk%P22zmgYbera
z8VWtSVijP}+Bi=_z8`Ks^i#och^4Vz!XP&wR1^Ur+Tg?+!?qdn9oz3c(w65BX?f|v
z at 6jfk=p&G6c+bCN(cyEo*hM$wFNkfA27{{y!3sdm29$OtFO414G#3Hkl81~8W&gy{
z@<o`7d=BQx?LKu4nl4Ts0JsVPh*Tw8SAXAKBJ18Zx16(jEdRx*#R5-rROt98pOwKK
zxNW|~cM*fis*cmBn^45Ksg+QI)x$IzrUVn-OxI%F3)8t}9>_10Xc5X(EYf22S7Dka
z257o3H4v!BkCp)WmPyeTM>FfRpii6P(k<)=8Be7&q4S2H`m?EmrZWn(t>W}1^L=Or
zQDq;a>D-PG*>X1NjLUXc<fnJA&5L5&Wv6CmZ+9ii8jy@!m0#X9-%<8snWMV;_}YQF
zE*&qS<xn&lY>;Oo>#`>o>dnKEb%~aC$}1ojI!~vcozt6wR*WZHL(f7W&y)_^-{QiE
z#{n3qVpBXNP!79T^Oi>eZ#fI<T{ki6nn#92***wZ!)XHZ%w{ldmcLD5OWtR^i7GVA
zFtFS1!NSR&5(Zd!i*V-NdGG=Ofc(TQS%@ko*<?^D>V>!FJC-z4D2>@BDqk=5l}&<j
zb{;A#j*QCN2><EHj-#PQpluTUO@>5Nj)ARuT~<$YgrJ3_H@<lVKY3nz^XSyyA;zC=
zwT6)$IAk7GR^JhF#*66Kg&}*pBV at 20?bG0n;>bJpDPb3Or?VZARU#-nlbk&TqgBAG
ztYN+*--W^W!_qht=~aR?-hIf9x_3i$lo54*S29?~rXpwX-SKM!=We%V;y0K_c}g0o
z;^(O)@G5SZ6IUp(jVtW_S{zcM$80?%9XL!~*x4q!m<02XQi~Cw4k*Yv&ABGCic?)v
z6gSUBqnd-lkq5M{_PE^Ca;eWhQTWP<<4>ezXmgcqQU~g@$&6QuF^qHLY_ at fZS6`NC
z;j?iJ!*oC`G*V&agD}s3IsQ!+U(<8!CZ9u_rnb8d&b{_#ShW|$4gkz at e229?7}3N~
zEUeu&-s{rz7FBr|3OnDP9(8g|f_*vKGX$TBp%)7 at DX4-u?lX#|VLM(+xGNZjd|9l?
z`zEfICe>lCG0(mLw~v{H*>#vLpNiwkt5&u6eVlU?$p9aU`J(;V^9rggu+E033Gf=#
z9z}1STl*0=n2mS({~A-B#?emQhh2F&tbyP<4v2l6ODamoqF5Qn8hP#A)2_X%xoz^6
zjdY<ke`CJ=*8h=E$+CBzk<4HlTv{HWf at k_eAP+$x!wva0-wp_OCu}@1=(62IxmL&>
zjAV~Nk%Oi*OsJi5&SCrX0dwe-?llJwL<@_CHJEWutHVYFXwhzmrY6FIPJ8NfK5YFv
zsn-)z_9l6S1XnIIWR*2o-|ct|pDPXNvKFa>- at CUf#A(tMfnR>&u92EX2iAQOQhUuD
zI^Aa!=xhf)Gn-sOWcG;#t7V_F<~A|H1^SVclB09%OIjTQX6^oH{rify-D{QL#%m53
z5n1Ft at 7-s-4kD95bMs(;$g78$v#K0Eg{|BoUM5}fxr3ndQDfX)WxE(xCv7}&09PgR
z>!c35KQ$zvJdmI`mw(!EhhHU)ae0#{R7~LbBhT7t7vdaH|2H*bfqg~hNl+ihj7jE6
zf~I$+ at I995BVow>#ROe;H5RL+ZrP54VFl~ic4$&slPtCOJtJYfS|If=)}O)9(hIkl
zyv*TOyf at 4Z?}Vb2K4vjkCcBDJ=WcyJoX{|3iUCxWv7YO&a6d6U at 8z1$kQaJ2?0=Yl
z1wV%qfPx&>m at NM*WmgF;h&5OqR^}b$)Hvt`Bb2o$o;*72{_YEYjvx at eUyJy;mGYgU
z`N*Hj8IBqn_U^~?k%RFyyAMPsE_k`#j7Qxt|MW~M5_#A-jh?0Q39ucP*x;iN9knEi
z(s(6BB$C<hsF=l|?CC3NEUZsiTRsD#oe_7{!GC6MVXZMR_prRHCS;|D3pfvQw<$_d
zz$^@VJ71eo;z9}-KCr%8z;cR0r|S(IL5Jq;N*n?kf`Tu<4k6K$tq~ym-l^U`8$(7r
zmDQN~>_J02MSlW0r#z4Zii}B<3KhOE^`BHI?-Nt_n>Yakze^k{yZU#iaug3WH5}~i
z(Tgd{I!*xm{*mme81F0W$wa|PWxKa~-2EeEy~YKh85VLK1 at NXN7+VZNbK%5-vGdVf
zy1GEK$J&L)?~&h7(P|~z9DW+2etL|UlJ*rRfYZv^t$9l)Xo|%^m{u-Xk<$vu=wwPw
z;r~58*D~69<IwRrbZ8_|%c&`Qxe|{G!8?NrR6=X~?9~S~nZVO1mMk_VY at Ybc!@6Pj
z`!6{Mt*2cu%wfw)fPBTt_do(3Wk^UXC$v-eNfL&kC83JwUcajIxmq~$%iax&FKjlx
zXO-VUs^22clg<sS+Ckd7o3qxTDxadHZS#?}{~O2y;i`C<kRCC#G2Pgrimx1F4ppu*
z(O-xX3k+eif47viOqv~7x5LB20g1m~a5O2_xEtcR*CuKxkQ4qQ24}x&sb%fNY+0)?
z8<@Jll<_kaYZ_z=I(BtvzU$t182k{}vYIy=tmJt>V-CecVC5C`znV5Gc at +t5`do+<
z5VVPBmK}MwCilvHJ_&7Cmf(uX#|VN0Usj$!c at Emj0ky|r#w1lThbyX5ZqZ`DZnS31
zuYY!L=w0e%bt?agiN?1RhdzEJcs^Zk?<hY5$jC1oq at 4mKM~ks+Mgn4;7|UT|WL7Lj
zN3C`p*EM!bg3C%vtN(r`2u+HBTw at psT;00H{t>uiV(N&HYLr1E{S!q7%_An7 at gAxR
zzQjhtSS_>nox2I65mQ1(m9)|Vmg8d3G8=h5TZs+DKUX$G0NliYPr~rPIxxE02NE9y
zTzgUKFcEQ6*dXb8D|emvj(Go~#*m&?uAKr6JE0{N9geSgG$2gfpPKt3ckcVKUk-RX
z8>4u>5sW2Mw^fF08qU2|oVazsrSLmB8<3N at fSmlPD!gf!NZ5qrM)0FV<z)L&B`nB(
z_3;5e(`;G?3Lgo3%7-&6J<?E+5yf1Bward*n{t2of{{Q#tHE>bVD|TS<t;T#yY{N)
zoW<oP;IpK(s#|kxFQr_2llHL|>oSWW$J~8ZbGzMe((BU=h|Q)E+T7(HS}dR$(#^gI
z`<I)<AjU%+vSALg##&Em)JVj`#@>?P#f<l|1wIp&7aoRms2p5H;dJ3Mx0q$fuVsoc
zSb!x!kaIWjlS4BA4pcFot-t`hNT|Xef*CuMtSn!JdT$!E0VqGRRZocGF=}YwQ^a;{
zZ;ZuI)oOvpj2?`m1-7k4&rp2>mPuysbl!=%5xR{17%5PfyZ=X4=ASp{Q6+U4wPm(i
z7zND+ZJy^tUF_#RQODWnR2N-71*6PmF~G2~`IK%~-%hlZTiKN#P#OlD2OC{X9L~+b
zx7UMw2G|VKFuktk^N|FkGIG``45a0V1CZ{HAIHLsp{h9td?%Km1!?Df#C-?HQ1A#1
zrB(Sfntj{Jrof(gtzHEk{C24q{wo~6bzYpNK*OY)lU4Eli7^|d>%{@5ng!5gn@$lg
zn=`SN3G<zo+A{<O(TE#jy7Rts&!z>oHBH&$AHC67(j`O%R*sf>F`U(@VGR7~+1#FF
z%?0{sW1=cW!&r+a>-CIcui0(AQw8+C6f|u)XQ^(%0XC&QiS?Oo!+`(--ke17|B#Jq
z|1BKh+ at 55a4Xjo}=keEAKx82hl~wf72t?%-F-?<8`SU}wpP~3?7*$a8)zX%!@Bh6F
z|D{;|9ri!}k~F#MAFcmdnn?WJMjblp0d1UxCN^r8cAMvmo0)2{hJoQ{OM8+b4-}$9
zJQS*TBP3nCFC}|{&oI2hLWZaji3U+f%{HeGfVE)Zeg5isXzyr7Gv^>$JX^nARFvax
zMa9T2SnowI6AeO<sNL%M7xEl~jHj+bG!e3CK-Y0_IPUthC1z3x{sj4Qn_D~FsbL`H
z at PXi7A*4!rPqxnX&~S3qEnUzdKk~X)y0k-?6m_>?i*CoETuPzf#sS^HAvx)yZqeaz
zBCmy+v5_+#qmD`Ps_$T}AbEW{>od`4=h`(7kIm}v9!7~Bx1+<K>bkq{bXCT{j+mZ7
z?OMmwE at +}mokuw|m32uj<8qWsF!!WP%p++L#@SH`waMwgS-Avoj7pH9R1DCQ8`@}n
zrD`Du7pxH!9iD at ZK_RElHLr=&*xYpt54W)c^h-YT1t_{s9;<z4+ESs!ZEPd;QoRor
zyp`8kn{%2pw{9ENE2_ONtx{OvcI-RsYWJ0s$!ET$x>B)vx!y$nW(6ROQlVUaES7ev
zR*Z?hdfQy%{|yxKliZ9uBnyqOyZ&(oOUl;?m>L51Nzp4T%>QBbHpL<ofL;~sI?kP|
z%r^U4VnHs%95pVJM)R2__vCXb=ja_`FqMg60 at gfm*$aD-1ex&oBVz1v*M|CvsbY}D
zq}fF8NW;u22Nzx5y1I{FpAn5%nkDw<BB at RL8F7IBZq5cjd*3I6RaiKY_Uj0zRlgb%
zqT&JV?xlU}f))TFFIyPGk1ba}Jb9`kr~rsleaybe9t;W#D_9f60K$q`j8x(7 at qCb4
z#yKTtZa^UlT|L~#bb814iqq!KP};1(lv~YysjPX<pGJMN8*L+y{RcMmD+wbiO&T`b
zO*N0kGW)0XiwVnGaM7n{Fk{-$S^f{#9E|!>HQG~=MXM-|#oBADPVke=q2-Z=a9Ud1
zT15evbm=zdw%bh^fIs_L{;i$k&e6MqC9BXdi^a6Vy{=jQsW61|Hjx)77Jx~~#{<Zo
zi?mqw`uQBbi^<V*kr>l7CO+k}2n>fe_nVJ@`1t|9-5h#${!s#LRYOV at g1U9j-%8a#
z@;>6LVO~*B@}kUD at zsS#lBdlwho;_`K?@2YMSe5GGCbo`Z<<5Veaq+!s8hu{BXuS7
zR`=0V=4rYoF~=PGj{+a_&%*-o|7U@=|11#oXTB@`bXsDpvu4wLfrX(^V;LHT_5M{6
z%ok;?_(1q7A^hg@;Tt5t)JSt^lYRk{kjq9mu61d9)4_W1##CMR3i(<ZxN9Eu51^j&
z6CqGD{tr-Or(#vx|F#m{57t4T-d9%r3;fn<4t*H&?9GLbd!Q*}?}+kLc9}z`CE63=
zf=f;|mu)G}QBYu{QcRnn#a`|)(Ul%pn4r+6z$sVw=pVqmKz)1G|Nj6(<!vIZ_&+Fr
ze(@Ya`4BM8QY$dld_7Vnm561dkFxf8*!%u*3A+;5X-rk6B43%F%P{hUY>Yhg%=gq{
z8GpoFMXWfLCH3M+)oB_=7HP>0D}b)!HZu^m%5NFMf<jbiHC}=U)?2T|2xH8h5C1J!
zLrLUiyPMEnf7$N>X!1Q=u=>zEP+289IMiBL7|ySTt(E<|wg31YWD!Q|Vlf^ANM-Fp
z-YdVqX=ZyC5_?#<GBMT;5godReV>v#1^vTiDqAO$i79S*OZ(l0c>hm~=pXv;H<Uz*
zZS9LqjN}%QXVRW{*KdAP$Cr#wv at JOza%r<YT2c}vw6&j8!07+U<UJ^v>^H?t62D;i
z(PBP}!5Dpu!R8+=3-G+kja0TWz&JD?dbEr(G*lmdg at tL<0%qR?By;D9p>QHZ){m3P
z3wH`(p;CL!c!S8=LWm|ewHOKT>cUBj72#GaxQ|}HM#G4uhSqN*qdrAK9rd?zowZ<B
zkIiF{)Jxu}qBS3{5}pg7tdU1z<O>1W@@B8w4HhT;ZeGsF7n at N@97#b(j<NG>CIrMX
z-T3&iiTdIGJ{CR%aeLLCEgNNM5j^qQP>TwGcLf#h5YQjhNz(#_8!UZ$OPvV&HYTVI
z2tT{xOPAMg<3T2re(5K{ZSOT(JuR&Gn$)Z4%UDc9Y_fz=j!k8mL$Y%KiO<C8a;C`(
z%26lCip5j)fAjkB{}E%g?x(RVJ>>DbEIfYM<*g#b<Hz@{?h+3X*YNdf5mIw9&u4E|
z5dX$najv<?g0(bND#98e3l{q}O*p(<>1Ot2G12y%Nf9k4t>_=#V4+g#?8Z|a-K=HY
zmP7v at hUGV6NwN)EOeU6hSXzExor-`sAe^y4QTV?@)XNrP&BE><YfhsheL?}tl>le1
z+)*zaN#A+1s{@yJ0YD2>{nvt`(HQyCRI at LQ3jX`eini3KE?{5QZtaSwtH55H=k-@#
zj$6G(4JdM51bN9~N}@uRESa^*{A4Et*wxL0+%ffgTr=61Cf{VuQ}KWD5GYgUzcMZQ
ze-zZm8n()sM~vLOCO|81_7Dv`GMsi&ml#A4c>K~0Z=AOY<P<kv|4W`Mq$p%<6Rc;b
zW9^XHs$3_e_-y4p>5ULl<hOhrdx?eCO8ck47an52Q?*bjpb7)z9+0^DPdi<CVJX-T
z#mGSz7|8snW5W_F23$Qnn0>6jF%VT at ErY%8-(`H`YY^2o42=$tpfw*GL}wYZpVoQ^
zn1ppK$`)Lj%BTAK(rfciGuQ0+DZ5dgz1?Hc;#ER^y*Whud+OYzJ2rl(d!XGr<-KA;
zMzOmQ at j`y at q;XjgX>3v at R6XcPj-sv|o$7PiN!efy=wN!qA%6)y?LJuP&C^a<`ZRzz
zV#wy<Jc5)?c)fr4=);iO@&TOz2%Wvg_rvcz^#lS^qlT?)V0(VZUn})$xg)_BdKg4e
z=K;C8<Vd>boHL{zm)TE~48Sk-mhw;#0Kz|}9eA0819C;cRMQ~Ux))QE9BGyBNAuqY
zTe&iyQ+8DX`hT_VH5jVI`zwR!fPc at _+GBKD&r4n0$zj7D8nTBr3h?zNnye$nQ1jV9
zhSupMuB$j1ko~CZG^R}Kz-5^KPmPOEv{4^yQb5}y{yHoiDqZwd-G+pKJ!IeD2dBOf
zr<Kk(QY8uUx)F8<lC1;hLfMhTY5C?*^_&qWWQ|!Qg?rC5-P4n7@}q}3+f%+Ch at JZ>
z*ThocPzO;tz~PC0+xVUny0}xrDTp$31*dT9jrtUx4C#Q5=-`}-iTwd{*H6<mYLoqk
z=bfkNYN<h#L8gD9n3}g>!1LO>b-%?edyO+U$f at aL%Bpldr#M6)C0;NhLwzX+YNl7u
z(8_htC~R0jm&+_2O#ep*4}%>%)W6>U7%rAtQoDes@~RKEy_AxmY{;ee`5#GAs>}he
z3nh#1|B_u@^JYE=_FE$4ei)Z??M30Bl_&`dRYG=Y(Vt;~K5q=7nu7!J2=mHyVm~xI
zw0FI})u`_|p{?skGaa)SThg9b_1XK-QGrq37;VhAATh`e2%G!%$cy#10ZD_%hmn=o
z<P1QDW%L!h*al3>W$s=XZxFrLU<t;OW~u-8?0L^Q9;^3iv=d|P_N&;va_f)Qxaw25
z*W5q+z*zFr-}zg93Emcxv(3$l4dfGFYVTzSshtbRL%^mUQdL>vU%~vyX{$gEt at oW9
zcu8Ftp1g)oISx*SR_P9CmD)~9kOM4$OI&+lzj{bY>DT44zM%bBWDqF=>H8I<ek<`@
zDZ%?&hdU^*Vm2DehkPet=W~^t1>8j`_jDS{NKywY0u1_4cHO7m+dg;Oa9;#u+kiE%
zzwf>60-psWIl=U@|KATMB=X;WEKnsF=NYnx`q}>r%pV0xAHPrnp~opkY47};E{q<i
zSNUak0fsW$>XQ!bp+{?#yTngAj5d-4WnFsUpZ8AnqA6($_V!D|yfl(bd7U{hh at lb^
z(E6aAJT=75Zc=^_Uq1q^RC~)l_(1mPt9Rpys{WH6;mZ6g1_6`&iOLxPG;BILvM;sg
zPBn<u`e4)xeyWt(sOc6O8YVD^Ts<a7YSfd#tK(z9q4Cbu)2L$17}%5C168aR%jTxC
z6&kge0LXD3I)y6oE!xPxwKfEK?i=QlP|d&Y%T|<2;^oK1aWP+WqZJ8zXH8;YTVXmQ
zCklkfA}~kUS7IP~oU#p_eR%CHpd<l+6BOZIdA21&T=>lbb1_=COsWH}*<S+Nz(w9*
ze7HogtL3Av3>@1l&mnN0ydi=Cc^O;oZldLk1`h9iRt2!m0GlDSA}<%gv4S=csc7S?
z1j%A~-B7<rokZ>yc*{u9ip3zoIG3DlEQJKf#B4(9x6zUtR*~C}-aW*xmD<O at GBJl_
zcFXU;6LzmiNq9)uP($&}+S3A1LGwI|I!_!u(cXK&L>{}CUC^4wH7h;LA+_~l(0=Cb
zp}CIR?1l>Q>xYHNU?Cn7M!xjgo5En{nw=1n<Etc`%|!>}>Gz4=NzdKZ=X?ps$yKZ9
zIaR<x^VSmf*P-Q{+lIhQZ$R9AbU5)!?BOI{`xu6C_TglC6lQ}mpfvgTD!OGgzUr<1
z5hSP$(pB*&B=4}nl-491!}~<$M5T~R8Jv0T&90Bw`<0s~#$<P4E<>FBf3cSTi}V<O
z(>%MLE&(&B5uip8_Uv)HD=WBwapfn3K7;6*M|aO)wiu|(!cPP?>i$w(=1B;u?mv^V
z8Tc%mu{ZyG_FlOt4KwA+|0?=gdY1Q?6rEpo{kS{;v#&Uhk=Y8VJ-gc=a(g8URgZ9N
zRBncx^mtH6f6=}blcE?Q at 5|UNzXd!MiA2w|bb3Km$<b5_<bt8KIjG>MM+0lk_xZJG
z?K#fn#2YS6{?$AX0JRVWBX8~jW}G+e_V!++l_;>hxt2L=hrGFE%sBfbCW!Oa=To58
zGBf!TON_KU+HKA~OWv`01u5LT0!AR0wz at W-(t8o6#DDWi+ds-HI1wNzqB+edQWSQH
z20k<2OV+p1Mz~`3GFQAas0px9ByA)zgI573D9atFdO$DBM#D7Dqm~%~mdrN at n<6I`
z$lc$w?5)Gv&@e_J$^u%+p^(kb=j+WO{x7rD&CREtOb-9%7 at CeF{Cx0s{w6E$_dA5*
zRhrm*#|}Wd at b15z-l{h!lOGFj8_L7h?Oiccu+o$0aL`*v0=HNwT(lUJx_aCqAMk}(
zr4&^0>%^F5lXVjIwYS*!Jz#&q5f)&HjrMqeh(~97|6ZLDV}hp7r<@vGb3!%)3MFXh
zd3doYVU9(ebJ=(&Vk)rk<UapivDin9O at m6{k5Q7%N~UGJyWcEOPt2|Zwn?qPHLxxS
zjOR#3?YgF0C%=k?$IO~e$yo*P+AeVj3VdxH+5~3|WI$5|ju^FO*MR7?_hfwG8bI at 5
zIwO~`!b)lZyE&<F)xD$WeF57L1$M}phdsFoxOjSh0lQ-AWCnZ>wnquI at +t{f(3X8r
zo}~qf7hWy_dKIpz7UM~JGF7t)!^^WKgC$vpH0v{)T02=x>L&Cyj%Al23R4jKz2$en
z7ZfS{^9q(Mom8l}lvhwO$uM;VUeqxy5PZ?Cw_)=Nz;tWDT(AT=t=R;1nUAdQs04+9
za|BIa&aV8m<_qPzESh|q73E at CIdWMYZY=4^RNlY>WxL}7Gm6GkcecNKL!i9`uZnu7
zzr>2#N{m9=zM{8;{3>viKL;eu)R?1!!p{|#$*Ue${+hN?S;w~Jv$hANc?bdoMX#sv
zX|R%Dv;$U*p{_F~^kmlV|GSlZ7qjm(uWN5=PKZgBdkVJEeiiIbKBKY^It_TqXGp%V
zTZzt=4AY!4cP#8Zq{TAvwRg{Ruf2;_YQb`Qysdn!wH58>Ti2rLQ)?^4A+p^jyKenQ
zG0Ivtg|FWpRGW?H2cts5%zP5$+X-n0r2WT=+4l2M`(@b9ry=Z}Px-Y_f_{mP!DW$Z
z+K3IbjDU%1MT#U-vD}<}Kai+i{m_uGjwxovTwg&#bN0us2lfT(0XMrI*yfxD0r&aX
z9z_A8LNS|BA!k{Sp+Rou&1b<1>$PC}w`@B^z^Qu}YK_Yf0Ierc!%TC<0jM!Q=AQin
zIjGS(-yQZ4O>J8P=m4NSA7%4!*`GSzc^~3iaRB5WOB4%Ki5b62_rm*9g;154!vKCs
zkszqAsAoP*xlp_Eg98ZNM_TS at TkgkL?h7pUV=eb(J at e6gq~*TYa-V3qFSp!_(fx*x
zE%y`CZh}yzVnWaSw69E2K?_u3MS&`@n`IoXdvbn+pWF41#|d5qVHNcSG$=J)h9KnY
zp%RKVt*_UOy%6a1yV3(<$K$;m(9OFbAh(t3KEIGeyqBrxpmaFbb{eLlhbd=X`AaH{
z{(CD!Hf?i2GX at 9z3{zb_BFR_03?hM}30Fu}LTI>A5mT7(%H)&5zWA){D4?JiwEga4
zaK#G}My;1E&tHojoo=F+-w<QgcP0|Q7UpxEM=8s}Y?PD7Tzm7~w<zjO3Q4$r0g#tU
zNmq8gtwV7GUnQ)HN9#Pt$}O|+HnNxq*NS4p4Bd{4Omh4&-LZ?qXO5|l90vI at -R;&u
zSlQ*2(CV*-k=4{~`?K_kpd<&7Y8#{uonHol%p$cAJ(sWmwWb9MiiQ+Y{8%rF<-bGl
z{*@OknBI5cG#f33&#~n+NI!DCr_1ZWG5Fvi{iyRx_~6fJM<J|)yum$Us^=m;=C9^#
zY;WCqb|#d{?MJts)irhaaDM&&7<==urmn4V_?!^n1OkMRK!`vNLzone2#QEZm;;JL
z2Bj($MGOWhC<H}~i5e7 at 7)gMmmO+a}Dy^-zqSZPVuc%m&mO8Xi)LLw)t)d`h(BIw(
zSns{>_dMSpd2;qVuW7Hn)(Q*5y#o<TwtDU!H?QA3s-I(bmQxP9rn}P?Vx^+iea2rb
zneb_fj(wFqNrkvIfrEtiP0>g3nR!Na7gfyU9bPS4eB)ZI9H2 at BX=}7Fbsoo4mwA=t
z>$&0kXzoEJvi(uy8YiX*10*3mhJm?dpM`YD<|vQ2Bvp at e5?OcPs=z%pC1M%rL3Ue}
z40_}xIDvHJIUTy7pu0S$LrkW<#!v`%rP#|N;+#t#r`Q*hl)~s6-<?;9CO27rR)(za
zlGL|e{_cFky51$hDrMlej;pR-b?JVoxwV3|e!UguV!ndCem$6|SqLt>?M#(bAhu_g
zHbtjrrpeEJ5VmyvdO$IO at +k~|()_(Hk6eCYF{B?&Be^W<e0y~p%aUIzO7!F4k)^8m
z$xZNTf2VMeY}7Yvg4+V at l^?+}?t`zW6o1U$@AAmI3$casUUJz#^xJ5_BgDhTMfirx
zB1Dv#wo%u8jWxOSv4m2ZwZf4z3rFO)jTJHT9Ki@@v`xvbn!^`KS4VeG)JHaqZa<`H
z)Ola`2!Tn{mmOL=y-2kHB+u#oRv#J2c+O5TC)Z4UC82n(2iu5YW$Dtzvei1ezNF81
zMF;s7>y+0S3ed2;_3Zw0X;qkonjxXISqj=C-JyLDkw>!pQCV9dgsQ8T-z)@`W+7ro
zT`&3(kZ&;v4mcosNV=F-JPnDFX~jI(8>fE<tS^n(1?Y}-JjTFmLyUAChV37W`&RnM
z$1moIB_U5Od!O>A7)kGRAsD?&J1eI&OJa4g0bbS(+L$viN`4n$1^|Q5Y93IwHVDC>
z{_2jJIR)8H#wnB2t4WR^uVw7V-`Vo3;LJ(PHYosO0k4d~OqN+@{h|Kelow9%yT)qT
zeHH&SCb6>YZ7eK0zVi946n*5?yKjem4$`dNukdky`Jq>i?>8#KV1?&!&#UTZruBoB
zCm(TnB3FNjjM}fF$jexklNK14ke>`TkOld>%2x9)_HlSywgFa57j=UfB;4g}v!hF(
zvWk}23wI4tT{0#19iK!gA;hz`f5U?V@#HAuv<qEsL5sgoDOXp1qsSISJccHHHHX0<
zuIp^S_x5u5X~Z8;MkKOLT@&O%!2c1*ypV0~!>~2 at KcY+j-bL}r&5!~)k$_#lm- at 0t
z`UYP7cxlYTeal=WR>Ipt#*zTD6V2{jQ2@?(yxnfS2f~{TQ{yN$ALA4m0sbe{+f&W&
zHyP%DZ#H~mZ9+=Y*~rY|TqLSkiloS@^El_(X8#gN*NEZXNg&3ai|7P4jQ3?Y+M5&1
zjl{kVzsZ^|tOp3%OCR~szLJM^+2L!zoKPC}aXyFYGReg`)A!Yf<`2D|_4jFKyPfc$
z!-FkN)O~c*gA9+MuJR^MCpUyA2-P80^UGbnYs{UTEc{aU at 0+2Fp|vSHRvm`Krns=!
z6B3dx7j=vdp^N%<J(^v?AjJ|#EV3(DR&9444|l&jP{MxE^Np^cgGJu=#7Cto?{G$Q
zb&VYpEyp^pyVD^+KhUvmB{4NQ6?J6iA2Z2vriqvZbwAQ=yv1=1l~+SV1<70!T}^jt
zv4FzXq*6|~Zeypb-^@8j<tIh7v^0ba4(%-PPvyu&)kZ($U{+w90Pf~M-K9={a`Jwc
z$GYd8Q!G!xIYch%ynmRY*bOMC1~KxXl2Iw!=3>?RBlteRs4QMIC=JXykQMq8nGOC|
zfd91Jq=lKX%)t*oUm(Jvo^4T=2$NTU|0)pzukqABVMc>l{mn*u`Pf<_>?2OqAccYm
zKX&<Ai}0EUg$|FT$hfozIlsbDVaU=)&R$(W?XO~y%bYI^-^1*7#xq5}eg3LUwfKMH
zajrdrG?XmN>}P~K)J%kQrAk;*dSUmjOl53IsZcX}{{NKm;?fXAF4STZy#cc{bz#oh
zHFFCyt{deN3M=H4nASf*;u(}>a$naR(<O}Ex|x*CU|G2UY##N^U?AY8_%M7p48H(I
zf<=XY;KQ%L%;n}<?7L}$Mj;9E4D(klQ?BrQIAJ%pO35%f0jM5lh}a!);e2cq7k<Kr
zj5?W6D=GAu0ts^6mwT66p=3bi%yH-jA4&!9Lntyi!mEgV8dJ0sp~Yk%I23}s*#&n(
zKWSjLGOlPfh>t*mG%9IO&W^gEnNzLI!9TBvg&?MrDX~&+$Nc41D+i%1(b#=TCLk9r
zVn0UNawm+-Q`C}*>=$~}YLW+O#)w){q5VDjSr8_ThbLERR%w#wguKmZxeiS{S*wjE
zGKF$=qD3Cv^Z=m$>;Hr2(Eb<Cu?O%RRZ7bHEQg}m9q=1qJ&VA4^3`p=kS|adnJQhI
z*B1Go{01w;s8g at jV*4XHhc|2noA(M-dEP9n4QUh#Y-kMrZ4qL%44EWLMZ#RUo!e_p
zX|daeg*n03w1|EL!}F at 4?w!CY;g%MO|Bj{bh6K<!3n-b>@*FhCd#^zowFdAHT;);9
zlk=xyx1x4}tct?_i|ki7|3mHr2#-P|qU>;Fhy0kHQZF%ynTj4_w3xe?X&HAIb?E!y
zg=AdO3y^RTGp^&413x^MJ(&}t*cb8?u<}VoVaU51a%BVNadvDiy~B`jXy~Cw`Zhe?
zH8Cikp+&Af7g#Ke_9*-LySSD<;m{oU7L$O4qDQGRCQg>$;(5t$iI5L%Ftz-L#Go`q
z7d8d*8EIYEWbpF={DhIG2zdcU2zZLCKbgRDPt_T7BhO%D8Ngofh3*QW$<8=?>3LVY
zw`dd2r_IJx-P`vCnUM>>`7GQKJ{yK6Ucd1Rcl*ATGyKgr;Z9boIo{U$AiH5Ir|6yj
z-vzbUj4)T5T!sjF^nB%DNvXJo`@!kHZ at w|co0C(aDk7}FXpj<{@u4E at -f>PDG<^@{
zOZPlKj{yH(cRY_ql*b*71mC`)r6R9Ta}ge at 64TaXHAQe`2;z3|O)V&+5cYW<jZFI0
zVcUI=CYTwYd+^P^zNn)SrV0ffps?>9j{^~S3x<8T85D{-DugO-eRG;%LwM|=Hx<^U
zBK)xpexVr;Tg;(}kb$W1go|NIpXSVSV@{7CXO{4t?Xr(WTBTH8L^wR8PTp03%Tj56
zirWgB*OGo+?NDU3D91z4{vQ?HGgcITk at NqjqW`L=QiP9K<894G{evxq30)#D`HCUG
z{QgzuvSQ3ymW)|?TphZUt!ODDgY~z~ZlRE~TXvCI9eXK!W>S!K%_g)jN)<cMppSx=
z(Hn6Q(if*(qM at -}<P|hKepMnlKP|!cdfml7>zYZJ^mB}Bv@$*)BZa;|?Bq^KR-g_9
z)FFa(@R at T%=qHLu(kId&Y2ga*dZx2Y;GrT!5%Tafg at 0?v9WnrN^*oZSDgk5tIFGbi
zBSd7EdCszv1;`1hZHO1(JlABQF>QCg8xCjMPHksn7fKi~Z8mKKPlRlEF%Jo at 3PfbJ
zwqbDN{#^y2=gAyO8Uvx5>K0LF2hHX2)50z0mUGIDmi*Kr1v2Yc($tg7kBmUfHQ;VL
z)A%p94YJ<12|t75Z39npTLUXOzNedJV~1F+&jG=LhJpqSok>9;9zXqbHYWWcDJ;D}
zl76?6R#==%E0j4UP6Z5{O&&vJp(aFR^^c-SX at HsnVY^Trr|A<G-j>9*+x7udp+$~P
zR|@%+NxVDBzs=@WMIp1Mx|wrcoWUNw(5G6v0-zEB^}o(Gc^>5KhPu?C(MkM0W1Ru0
zH*_jA10k_OzieF7(V>ro9f5gZ2Vx1O_3_Hk at 6<oSw~C1&abQ-!=*z52sT5f)5)iN8
zBC49m&BBjI0KkY6FPGoK%mbs4qGo6{{G<r`K1{Szo+d{0A?{C8yD*CtPRhk_Uz~o*
zBM&6eiugbF{;eU4u(XHRR6x2j&Q^%XV9IAP!w`#lZhE!eJiWSjC76{Dz^@Se)_~t?
zFhfBcBYC4Z%N7_7bwh*_yf?f}b`S}mJ4~nbW$leDu}rXdLtoZ*o&B~C&@;ZHrL2i1
zWbu at p*Lle3{oJdedI2?cGiH%mh1tg(#60MN>9pjOz%pkC8YR9e4-eL37_%0^pt+G}
zj0BR#{u=3A&Ytg9S6%a-d<`=L*j8aC{d$lBMSRdtZix$u$y#_U*$W;btFS^j4_wjp
zOx<q99#<^)h|%JI1iy+SP$6MEUPgs)D6Pf(`!e;jU1~Wq<W5?^W3U~i*<?Ri70bqt
z>_!oo58CimgQT6m*1xQm?2d3bGl**bb~qk#4D+{Q*dtDk3UA6xLW|W-%(@VJR!Kf1
z4!)nhv>+$XNn+i0di|fRtu~*<PZAzKVy9 at gu9C37^TjWK<yosTKT~FU1#+fLTjvJj
zN;GkcEZ#4x)q?mGMDchZryP{EF0G$Od%Y)+HZ)ZwY;9NXXvZ$J?f>8qr|c2nKRtGF
z%8VN1k^h$i7NgbhsZjAmYK{NFub|FMDE$xZ@}Oqu%wZ~K?$WS|BLcMHXZv(@`bc&U
z^NFYWHb#LLI$p{_n{j0f>UrIe-h<s$03gKx8-gT`&tUg!`2GN9?fObL{k}I at v-ie`
zF7v)ipk{C4P4!8P8#5o{h%&SoZ#}YvU;pf9K%sc5Rwy^h>$TXYQdm9aXRKbMJ9>YD
zW&Iej-En`MO?ZCaOJTG2P=P!ea2p}|NT|TaPtzh+>!~vhrPJu6Pp+JZJ&97`ORYQ^
z;w<xyLnCej^fq5)W3pkiVNR!mKJry6K!1w{$wp^=-bVYL5x+X)-Ox}8yzRPlP)w6i
zB>pz9m6D_x^h2Jnwtuc^Y{Q$QHd_m!FB(WmN{4lI58T3`${nb;pxx!dP;2WKO&l5>
zS~Bt|;lZcBMoEw at lmyj2iEGfibl-(~nSsZHY}AZ6dkd*<=z+Ht2%5oQ1flcqj-9(F
z#&TP4+8iFB44fL~7<Gt)POLR#XK<00ycQAeRkg+a`d+g;@veCSKtIPULFn7$&RTT!
z at SqtaYrQJAxbNCyc1MnC(dxIlbKNu0k8}gwGv-axB7y;y)qqqVJ#PCvym-(KPOW;(
z#;5k4+w;JJpydPp%AE4Y`beo%#MQ9A_`});0bFDTd9<p|3}7SUE--7+ZF(4}Fw<ck
za?7)nEfRgCJL_$m%Hm9ukIMcPhxXIx=-=M1uZ%j$Lw0zh$Wk+vUOJb%{-ecNgVAy(
z5101?w4TkwiwlpY!Hc%g>;y-3N_g<>RGcQ0f#2Fem)Xe}246SU-tQh(SA=`WnF$Q_
ziEuAD(<qErxTs%+JB<Z=)h*$4kik)19nKhwb5s8qZVBS(&?LcQHZmxm;YO8h#$5PS
zuI2_D^9)*x6!zDoO87n?%^sv3#N0rd&1uG^rl1)};kL}wwe at UK<r2PNyAK1Iw0)T}
zHoj7ez4$E*-M&nrjO}5T1}?fiLcJ>#{%-xOe9sKxsD=EskS0&mBEdh^Pmyo24=SdW
z=akGyz&6YnB$sHxzjlON?ljqAAevUt-^NGb+m5N_nEB2FBSJWXXKDB!@O>w at 1qm8h
zX;3uXLXcX9aGUEs-Jt7(^2+`nO)nl~3O;~@%Xl=s7govXqE=@7QN9OSkJh(QE7#^X
z77ygABKVuNSSqTI=U0FNO9f<=dd5EK4XQ;fvDwm@$+qV2F&R6yny8PIr(*sk+>S5!
zr5LG$saz&l<`DxmwPf{x`wDHG3(i-VbPF8ZetYP+SCQ`|A`K*ro0|>FfFfz=Z!IJ2
zVXHbNkq>!E9_!(SJl4|dr&FVk$Z>=!6NBEvEoVHG8#6(<51|Egbw6e^5Tg<bYTkUL
z{%IP$e*uEX#B6B7%3qL0hTc|jL6%uIUya#}BzF#5u`q>=(P-J$LF+zGI9la0O}gkW
zjit!<uFHj=p)ke7b3ht`O&Yg(Yh|a8w60A=e7ox2*{e6xW897(V7wTYy^u_J_?zXn
zm=??<<ilwm at _yZR>)L4^uhK*~IF}*N|LDM0eRS|y1!As3&NKmXo at J^CtoH@`nQ~n0
zY>$G5t|;SVQ?UT`uOPl6^s1}{^9(6K7XN$M&>V<)<Ms1sMFegqzZd%Ss;dA`E5=AC
z);C5#^j{LQp9~+1_8$kZfxMp-pRH8JyT+lkhdn3Nsq+xMyWJM4VzI&^-UYJ~EZe;Z
zdN%#Q9J2xtz;7P;t1o7Ly7x=CfzB<D%;MwVGz1}@);G$yLC;l%{0cw<%sv|VZuDxg
zb0i8n`vNN3)lZR*h#>Xl1HGf4x>tYB-%fDD$Uff4Am_@&JTOBOOFy>96*F+2Z*f#(
z8Z^qXGfTDn&T&=diM-C2R{P*B9aL_AQwwnug)2NoLXmRW4|+1iUwC at 70wcZl2+#Gr
zu8;12tc*1z+j~Lx4KenJ$DP&WqJfoj*T~Ky6#1<bRQBK_Y6y<3{yuw7K{oVm{%RUh
z1b6>ds$#m!^AuFSdF7p$huHLU%G^8hR3U>C%-JqjW;Q#LX;%t}A{(f`y5v#np^RJQ
zhl0A;WX~U|hhBA<HlUWx`GMPV*>!-dOwg#p9b&35kB_Dydt6yrPX~XScv<!nVgs#|
zJF{4nz%xNpa;)pfv&kY<-HMT*L$bH(?O<&?>=~}D-NUjfEP!v%CP4%CpkfG2m#9-s
z$II+9uqQV2$paL9<ZQragnpG2a%Tawf|wKpsP<rWg$W4%l#WC{C~{COO3ULo2HWkH
zF)(I)4Rt!G>jTTMq%CqYiB)EB<d<-nf)tiW;fU0<R&qk*ZYNPZ8v$V0<T?*p>wnv3
ze7Cj3Eih{;?Q>aL8P0dWY`j^BcaQXqxgl9Hq3vIxH%e|NVE6OE5p!G=khU2MkQx95
ze|j3}m7`$HNbW!o=)fYVr{q=jE23cqj6%1Jic|Z~f7!XH|C)fg!cuKJNQUq6t;0k}
z!%CxzLmQCEU!Kr8{K<M*FC-HIqP at _&;GK!;Z$PCf at a!ASPdDhJ=lLR4qZJbN)`OT0
zx8foW2qjPl42$vAk@`d`6871y0NTEKX!52yPT?M59&RQ|kQZ=|UG#w3_x%gv+${nO
z>#UvtAR(3bgMz%(N%{;33kEzdh#qzLwe8vdG^!+qYW`QLkR@~6AD;J8GOP6C`YHT9
zp;rf%HO8NmGzy0R3mMErEac at vnk*PhwOCmQHn~H3=KPYhU~Ezz0m at b@0F+8gq}^nZ
zZ&1y{KFdGJqsT@@lUh~$9qpADdja|OIiHDRa<RzQ_{8I+2$72cINb;~WzE|Sk&SO^
zeY at N&c4mQ*bCD|1dimnOD9dE%BW3*bz~y@#^)vwrN+7JMofEm7Pj-Jg@(XASC3GIY
zM~f6UgVO+qk_sS2=QPsV<wpzE)qwa(88i>944Rx%K|>~-NSc{&Sz_HhYEM?+CNDx@
zzQG0&w1FOY?(_r{@yEKOzk5W+wODzJ7Rp6|o>-(*3mSO|Xir)oZKOdNI~E@&)tZWr
zA8%_WhBf;%#>!VD+89_my5UhmYbn1eK2NBUTZa3|)rnX at dd}aUJDIkVb|I&;1CV0Y
z?TNhj#fia1EW}}3uRgwMdnPTzLAXtp>SjGoXl&i53-6t1c__nue^=a>x`JLd-SPmt
zqkL~Lg>RE^OJXg3yS-jl)5}t5(&I)Nsfd{a)7$BsG;C>QV&Lwx+ClUBtUy%`>%jM;
zFTtFA&9X9pJr(cBqB@}7Zh;4ag22J?(xiVrl2=V5_el+sis_TrMDXgU2{#74a(35I
zcU<HQ*UTKW^`*YwD?lV>C}XAA`5RWh3Ws~=uL!^@ZEo)7?-2lw4&&0D){@#gkm1rC
zeI(Al{ajvJXOUpExrYUSG%sD|A1(@!bd#_w?80!fyE2}SzVVa4#7Kf=oDWPH0e+}C
zV*~P}R?Wqbg=?1VWG=+W^60Z9O7(~pz_cX(EiHD}jZJni_vUy$u`A`<W2C-G%BB2$
zT5Lb<{AFu%K(rmu4HiES&utzp^KJGSiiY^<4Q;a!u#mdpKRnPMbZ*Z)T(tW+w+5n>
zi_b=O4*OH}leR2-n&$P{7Qe}r>S*2KX93)iRa{?P9T}WwKlSqjcUFf<m1s)~7H|pT
zZkm8B9nl?q=4eT12RX_8ak}fzoJm^_>wbIY!Gf*;7gufag=BV*Q)ZjyGS9hqgCSLi
z|LNtTQq9<x&}Hv8K=W8C>*9qJ=gyVL=JSw#m0_JO^G|1|{!rMgubKf)G{p9F<JG`X
z-JU-gxJarff*K*#waxS#S2xnFP%L6#sW7r9t1McbQ_s+~{^?<Rg>dw{UV3xy^gmUx
zbxpcge at 0M_mf>?*!bj2vy70doCsEIP(>UBOcc~KZH%W7RCNXdM;7P%k%9Hm*dc8U_
zvAe_n=u*xN(B~3Eq)z$QavXhGZ%IELd@*@mBp#E7kVbd;1h{r#xHQHmKvBgB(2<`{
zaY+R!3~AvthT$(CuS71nytqIdBYRCFSKT|UOM32trs`Hb_pvOEcf+heNA^GWAeWe1
zeW|<fJjC(rba23q!s~)JwMG{ED3n0!Y+odh4qVeMe9=6uYmhR69r%9573B(VrPAMf
zuQFiCqeRm2o$DViU!^SMe6<pLv%FDw{LT;zuc5}&9nppK`2 at yF&1mEjz>iXXfC};e
zy&mC_GcI2_sZO|t#nuX0s>Hgc*{wX9{A<jrI8M2uM_17|fo_aF24e4;Vx=#1=la}C
z(I<Jd(Uy17fA+bNVYH6+(rHOhep(oIH7z{gtob$UdMNt1s0#~=CEohe-9o)a#20SL
z%O-K=jn=lvdpJRP$0u=O`d at n(zi-2MewFe2$4Q)l*~-Pz7i at Fri3}p0{EL={*fia?
zml3E!*Y+~kJt&_c!k|%fsHwU%1dxX#VU+y&t2nWQ(#AOY)K|WA>VC|;FKQ at 3L*`LN
zu3>mhrEd2tH${*1LpF$x9$2Z5ieZRI(yf?hjklqw<|}}pJ2A7z^EzMd&lMN)UyE=)
zv_(Yr at e@=5Qdj5WcVFB&eA at 8APU^=9dE{pag*styVr)HBHvr!s4^E1$-|YB{^8rJA
zX6C0)J>C?-JqW0bKzXZ`88lA=(sUF1>53<VR<ZR$5`BMgH+-wTZde~>^pS<(PaST5
z<S4hX!t`OtJ)ba^8UIJq^}v>I;Y*G|$Gc?Y-sgZhl(&i~f~>y^yjoC9ut!9dw`!3i
zW+HQb#UO>>g#{SHsL59GSKq)_wksSbyhafDmu#wq-X-&1=yu(u{s6_j6tNYO?Y9Df
zR^o-Pgfw=K<*o*)X*)ve%W4M4{cy#p?%WipJB#?qoB&V05{W9#IlPu7)ncUp!D;rU
z-Oo?MY|eoBnP`#n)v6#7-iNCsP)Jw!g$N%YsUnTvyTSKzWyH)T at O=Yx%31f(z!L75
zZ*%QEPIq7-lCRnGvn}{9fZ_4`&n-K2eFNd?{}~0~a`=!tAaE?>11?nkPud%h=3-1E
z{wHnIko#4J7<qMBVIf-gWSy?;^-7y3Bh)h&Rt~;-nB8}HpYF|TC--`NWX;60HamX2
zYaibQ4Zm1fDVPZq15+6n=%m=(JVQ5qFququ!UA>WgYE%b{oE4fke?`X{<?;B;?)4z
z;DJ%7aA3JUsy2)q+5aywt-n;_fACb?Omc(n-XO=CJ?o`^+0cE5pUw+(<iA76bdURF
zo$zlbze7^n%yvyh8Se1IdBF%G9?T|qHvOu~c{%fGuFseBMx0vss3t)%EYvCgUPYVO
z%kde%?xFk7daWDz+lAF?zNM^_Z8C2Zo`o#CUv8~}kGyrfAr||vsPpy6)T5Y!IWf>X
z4WR-OC0`v3h=wlRvLR11w^=WBWkZYU=~1v!l~9!PEJv;s;S0Cv28IGt4c(SUWuZ^6
zf#?FMGu1*QdbX}4&Ib#wFnL&wZ+ey!+=4j#)g?kCRZ8TXCACtf<8Xr?V(7U_!<sKY
ztr&JC|MX(x*F#fI<TVzkV(RwlHV(UxHh!(!Kg>mgzP>O#3q^x;BO{9~JpPtge{8M$
zaMXQKteo<X%uChHJSA<-q(JXD#`kUig0e0UzA_dL91F*dg<p<^|2-BiG|9%6Wg<z<
z0lIsmZX}<nx}i}ItK<*dae4I$-{iYG?>C+bOA#IuaN&5fzbYXnKzaO#Rn{Ni{{-|S
z*Np4qy;`<-%=_Y#@~eB1A$hAL^mT8vQ0B|=)K~&y${~>U!rHL<U3|`1ye^RT;Gs{|
zyZBs=r*|f at 4%8J8*K&<M9^X%JJQW}z-PlOLvhsHcxBqG2?Rg$jBvHn;Qa>r<mMZOP
z;*FgG6(u;-7QBnMABzX|kj~WXeHZUCo_})T4)IkMGW at QM8OAmojlJcc0*yGmE5woL
zGT!1oJtCahg0M7}nY7~7`glD{_%rnR9dgVKh2ntoYZG~g>rP+R9eOJwi`H*0(mj9c
zla#2j!~(b#2yb4t^0?>4?VmUJiR)yyhwzwS(urn&TEW_FVVl%;iNSzcwWiZwOiyt~
z%|f~p`6>1hXi1FkQE1Tp6I$j|C^u;qRINZ~qUBWw&<Tpw^ciJd+zO$`xVx^`afa0(
z?Abh-TqwJ3bV7xc+S%=n!6`U&7)N&i`Hu-F1M2-~$Z8}hM2I9paT&LabMzxwihVKH
zFkYwN{W=4q$Pv&5*v<4S&#axN1@?b6&7<hp;(D|EltkXmy%D3<&f)fgELZV+1r~t{
zoZbs(s9$}|{7AN!A-~%_3 at U1WFD>`K8q0fJK~$rt8;L!iIDw)&X<9aZ3EngqN;BMZ
z7u4GjViG#lrWw%Lu8Bz2R8qP0FtMA2dh*rKP|B7jZc79OzHs308{$T8e^dL2hPR!|
zGuZ?mOXt!ZzM>gzVB8rB2stKkKra)2lF)d?%y64Q>&XOyy*kOF4lGl~hCB+l@?m6M
zNZY)bZLP+z0sqELJyjVlY$~=_?<Q#VXuEl>jgGhWMXBceJ5wJ82QvDp7|*C4>Vvap
zClS1X=7Su!&n}<8-MSq56caar6{=3;$GiR<5{x6(N9_Rxe+;J-FLcw#hjjC?qAJ8$
za|ipS&qKMagGnotJq^PI%j{MYKboOliiodpifkIFx~K6C0CqXC2aVp~mIsF+)*;W4
z%wQTaC9u#eT9or-om9cc(#|3XV3<MxHyzsS-&hQ5FNs-NGeB-EmPdzSJ<RXI0FfLE
zRhxINz|2dspVpa%0ggeJ7%w`gPdOpg$Ae8Rj;TUp$nASBv^7uG$G882-T at J0QNm_%
zd!_KIMv}-o#r~_lorYW+KpTsp{4X18EQVp at _jXl8NOu@^lQr`OafXbt73;rCdSZFF
zgVCGlXg;O1r%K?G2YD%@xl{b{m`S!aILAwavbOX^kqTuklPFL_FZN(G7&JPsI1>><
z9 at 4-}MC>GCf5 at w~NYN!8RZk4{aw|6TG;!d2xAA-Gg^l_|z)_n2{N%7IBLHc6rsxvk
zY2d?q1+q?>AjZ#z*=>1jPu0kdts+SiOrw{1>Jy*uAL^C5gKrPhw;>38yN|{DgKymQ
z4IxTklv(uSTXCO5Sa62s{&eoeS-V!e-mufVXVy;G*%I#5v(ALbmw6CjDVzxek>$_E
zte(Uj=&i&8H0d61Bth=2X%R^9T_N&RQqcJ_ at V4Z5-&R^??a#ARG8tknkH)Nesunwp
zf0ul!IRn23q{_GwbKj%E8HgDShjb%Ja!ZU<5`)&tw<0dZ*-8;KIKD1TnIP8zj;!Vl
zkz#=cDDHQz;=s|%Ug{GM?j7olUyfI6;#S!hXP_C%4fTn<eM7x>mC8ZqR5AW)6vALr
zoN-nL^of_2(=z)pI+D?CGCEx>P{u<lC>2*q#yhG>k9sEGh6O;8fz^D>3>=L==Q$~f
zw-%_o!tU^j2fTXN_<`e^xG>Dvp?mtoV|#}lLu?bjyc@&^U^V5m%%Y|M4CHHpdk at AL
z^WHbChTnIE7oJM at Y7zdMxI;ZvTRh-?cyTHKi6u}foXrnu2sLBh`s at 5E#KpDC@~|Op
z66LC1t3YOd%d!|}g9kJwQlcSKKj)3>+qOt^yWP-BEVR82m&>;@49jJRd?!_k at E+z)
zSGc*ap5p9=`5>Uy^oV at N@k2bb4uuXQ6jtyI&zWO9Swy{a{BrT3amY7H_`?X=r|?t(
z7)*j231m17GFX{1 at DN$A7%#Y{Pb5Sb8pDC$PtD=NVL>3iVUA%9;0S`G9n(lf$@+NW
za|{(Sq<xmVWi6QZGlmwCH34XS2YXOWLEW7KaEkovMWlo at 6T3SAYum@+5+NYb&QjzH
z1|APzx~x5JkP<l*l*fw8xk}e0i|~89Ib}Pu$eFV0`UzPtuAC#j0;#0W8i+>}bUNAa
zbUQ(~SfMVl1|~*=QvqeYYsVcjM2TrdvwIhCcw1D^ZI85rWee>fG*2_+aa&M-Z8H9F
zJgw&U at C_etCpKB3jtZO&;Ra^4`yv2XU<aR=D0G(pL_=PCiVNk(Y(v$@AtEY!oA(n!
zk(aWqWnBmv8bSobX$jbHR<_^RZH43_6mHAa^%(5aXd2_t+C7|Uuurmo!#){3A$S5}
zJoVAbyGNR@(p;RX0Ar|2G`Bdh*06?PS));|>9JKxlgk=d&H<F8ZP_Lt9^%p?XFVj=
zS)*>4<P&Kf#_bs*>a0;u&)*}L%kfnlCLr9I48*R(RTUwBtwnZB!5rbYX76|H#IM$9
zfG6lv#>e&}OT-tizFua?YySoLxi&~CdEi4o^myb-IXwZ?A4EkXrh<&F_fG%SJPA&k
z(ABVfBL*>@wd*Eq+au!uZDPT}Ncxns4erY`=|m$H4W0sfZVP?3)v#c}3;v*XqgM<K
zAXa})W2oSz9~@PSR^tD9J7Hymx^v6vAI^Fxtp}{s4=hLdPRvR!)?zCdEU2+%50->f
za=GI?A+|vS+<Oq3Y}H<ygfRyU8($B)24(>y^z_NPphrld!IP-7LD^)HbW1dG#s-~g
z25Kgr+n^!-=@A7hV|7Yua1~+&-*w$zpp1~#*-wI^XTB at db;IgGl+$xXb<dMXwgvFY
zs6)T=laUBG+<^vzX=G#jD6o*U3XUw&9E?m14oDSh`CeL{md at yuUocKtKyVO1l(3J!
zppTx)!o_4^o29QUa&O$J65Ou`CH}8CN(mqo{0)Z^`LQQ4)CD>yJ$aR|utNjVOs$^<
z^E%g%7oR7rhOI+ic#p~Ay4uU-l|}tvr#u04{dR-GFr8&#l$f42x<diPV?CQa4cjYY
znruVK)rsV+7ja(_Wp=0to~lkeG%D_{g#Gg6nC;eD1R3zrNB3;#eEmryr;L=Hzk8eO
zlr5@<U at FXvQ(-;6JquaA3$}5fONwwC!7|Z0VlfS!qA;Gq<G~VtpTA7bwLE`Jtt-y^
z=Y$?VF7fxeqFnjFa!aHCt<XO at vcRU=!Tt|mvD at F+l*!lC;xY`DTdgpi26$2Y=PIYo
zLu0mEjCHOBvse#ZQ?Z9Ug2~tv-x`wxLDOcu=%m%+mk2L=G{A1G^T+>XdNWOA+M}K^
zcjR407mHr?qYj_SZeg5ISDv5zCyrkX12L0c2FLz5po!q|4+8)5K^kF9qZ!j~1JY`3
z?*^jH9$iKX9VRBx(K%#D9T6MpXoyP>b1fST(99&`lvwpIFkRA<e%P)iI_Rjo<qS<3
zr)zsDF-S-8K*2J_T8P at vRLp$mp^=!;ibRW%kj%DZrzKl2`P6Sak^kOYekSqncOViR
zP_DHp!dK$2m_n>~K))xK#H5xJa~S9c{KN2xKD2QPjxK?kjT>e?C!yuby9TMyr0I3i
z#fMF_I_9`(x{_(*X6lGX4Af7tm~RjGk~O`_f6ahfE5lP3h6Kl+-|SGtK&Iut!pwW5
zf|=(a-?CRZnE#WBR{@kErY4{tcvHAfcr*e6K>9*(>X+3|$Y*f4<FbysOEH at f@ZVrB
zXt%b{<BZ`sBTrO26~7vDyLxUR;7@&dOFD;jWuT$O7kZx&&`Z=o_hx_M2ov?0;4WdG
zJt)REUIr9pE~F?+3m^rtu@#`TKbR;>0aAGzuj(^kB~9&vR<S2h5}?l~HrLaz;;5q$
zFn;z&A{_qT4I1lp#L)<A=S{w6eetJRQ|)$}Gn7bd<XcPm#nZh;*LGmu2ewQ6-+Gb`
zdLHK-&AXlE++VfdB{0f3(w9M*WrYcs2dyUG7E|7xRHEDw<;4B7$<s}neB-&^1rHFT
z4=v9RY7oXicJC?!3$x+2D3Me56zAlrA{<(pbS{=mXug_(O6%$zr8kH^M>GfxC48LF
zXs&S|3`_$XW0!J;@qCI0?Z?mTK&R0Z&{krP6FQXwU{-uUM`djgam@*J!|6^UvJ_L?
z7%2<=6S at pBWQL)6PUBZuA|8RUP=C@;D-py(ee73d;}o*23nOLYJIM5YNh7g}g&stc
z2wP_~fh9_q7tNuOKGis2Hqh52H1_+e1^x$7;EXcS?}=^BXq^3fs3x$`dW~T at ao-vB
zocLcTU2f=IFb-0s2cS1&BV9t*Sk{{nlh|kw8LkqsoQ=9OOQ9EZI->vSZuM{O_#Y2i
zuc%Ik5&PMw3uW7b6PcwEo}+QZc{b{wvJnt6bij4)wP>I4>PorXp?-#}3iHXY0E~~%
zrW^SKgA?*!17_t3c1FIB?IweC{d+k5wXIQqdWC%Pkf)k}`9yU@*aVb=&LkF3KogzD
zCcOB$NzdBIEIz(cPF$FP;^+k8;RJM|0wN1Y7&Ips)=bJpXB(-j?ctOEih<-9*vo*?
zlYceN9hDj-3hf=FyO4~#nr6)75AyKjE&7c2&sAPmBCkg}8hVwP$P-nbrF27-aJ&rH
zSRypnXWhepy at F1LS;Q_EG)Mt$HTxP{mV-m(a^db at Gsap!CdSvVGqp~i(Z++Vb1Nd<
z0PW5>nBMu;`tB-Dk2HLmwd*)b<^I at tjnJ<+M<2QK(MZJWtj!Tpei<IJ6iGeB4m|72
zaI=6g at QA4M?O%@2MXki@<<~CyNVTH?f$yC2tH<|RJOX($>2hMBE9$0jxbo4AG!};4
zaXz{s_$!1yEMt_JtaioI0}ILVbcgsrIcvxR5Dk|63V5x*X^F$@k7fk7VDucO8)YQw
z=!W;LU6`Eqjzlkcd{}i=FGTc{lD2)bDz?DYOI$Y!Iu&*j;N_b}ECn&xBCv_6Ga;H9
zEoEDQ5m3j`l$<TNTDz=wkqltXS5(9dusx0g{=M at Cwzi3&yE4JDq`c%AfbbJyUiI1e
z+bO?jv6&wd!hu+2`~$vVyMaq2yP;9mo1O_GEw>yh;Sy(w18%7AbUUAef4o0k8f(*Z
zJs14%Y_-PF%S at W~#2Yu1J7Mf8xT4Lvv<=U`i#gXnv8<M>S&q_SBAkOxK^GGraZo44
zr>21hj{;O(IPM2ig!8XV!ZhT>U}=*Gm99zT$Jb24N<O{)rF;jA^gjP$y%)m#*-SeA
z!VUZ!!H)xePCGA-L?k`BTTQ+R4}Kg)HNd6 at GG1`<XAA}<J-*vWejG<>s}E^a<lgqC
z&aY&dL$4OlQ}H9Otk%JzmRIlsK=m5 at 20-CrmP22|=2%dHTaMbz&XB<}<D&pPYeIip
zf<|tWv$SZ2M^@WlQGbuI+*%0*<7EB%@Z*K+7W*pNBFRRE=?_4WlSaYG2VjF;BStcd
zk1ur1S-TeSlsh;xg8_z#ZBbe>HzO>0M;K<;<Nts-fTK<}@M!oMk46;WQ(AEVYEIpI
z`~@+BqwwC;LH|0ccTotl4a?ReP at yE?L3T<@5A%d0*om`d at 6lq<oe(>I2J@<1Iu$8i
zWsu|_WPB=jnlp7^i89W>U5VtMEb|;#4!90WEmq)&*vX5mtn$`kBu;8di-zSk3e#ee
zG1n0(NXG_gF=+_a7p2NvA3Vi<XHn&|VOWveWrWgGRXfdh(%W|UrgF4&W$58E>t7JZ
z-BFyjZ6i{i!9^<Nn?<-_*~Td1S9g?0*09R{B3K@%izAeNnFJx{+t$YjkH`Q+d*}lq
z!2_L*&L^rpP;X3g=R-X_PeiK+8bbPZlz8KT`jZ9AJadUjo~S$8Ow9E}6K(dUF_1t=
zeeP&8WD`xE=wyJBZhNA01ID)+Ch>nhtXu&Bxr~g2`kt+`9k)|wOus7ef00Whd!c at 0
zRnFe^gu)9ACi#3tobW<-lfw29v0T&>Wf4*?8jNNW2e at DrwD;XRQ}$s9R2>A!S)HFM
zpqdm^@Js4#VPsoo(q at BqBC_q*xoh;DsfTJWT_NH#Fq at Lghcp9^4cUEL83o1j4cV`w
z!GD?|dw|Rky1LLCuT0V?<>D~%CvktNC>$;JTP&X(w=_k!ZAI_A9gZ8VvX4tGvMYS8
z(Y9)5i#*4jc#Q=S>5Y0!7fH9TgN`POuNks~k0HTl$1s@*SfP2X(f=v~XRWb0+K|oM
zhlEk4Ap1bs{obg%eKufGg01>kepeY`WX)df8=~DC#m!5&mbD9s7v87~8bR3lpq`k;
z0R^Coc!!CZKIjB5I^%_t+7fY=P21}h+wz?)d<ADbJ+CtuxrHKJls<nWvCap at h46ra
zv*hU8 at 8$(#yL%rAbE6Y{r$?%UHSG_EZJP(_f*NIxFHy%Z)=~^=Sqo}eAj0X@%<qUh
zKB(A*&U(RVI8zfr4+2NOj`>|fw(;9hv<|cr?ThkgJ<>e$cvs9rUd_jDrVsu_sC>~x
zuunRD(OGZ|ey9(sCZ_wLp0*J}7uS2;!(cd54}Y<qkoci)v&Qzrah}BA`&)oxjY3qB
zub^i8dZ>09?^=evj?hOJ9Yh?KJoX`uI*HuNB~TI5{RiTLAIf0&Fh4``y5j63c!MPA
z0X8}Cco5I1Jeo}W2^yf5nDdUxypYhw<=|Yi{81Oyo}C=`g$%o0l8~j{(u_8o|NG5r
z2A?D~F~=Ve^Yia~e2b{@M>%F2B^Javf7E|6-O0+r^I at DOwF_~Obs_wJke3w?K6gw5
zak74dUvv?1kS-=1C!*e@*SCo9i71;ia-CQ>5%nP7On>`5p#(8>N#n>bQ!L<ducaYB
z_b?HA;`51UsAFhHe4g?ols3!n4*3IG+hI|EoQ4>gh~m+LtkDhM=PTpW&Te)9yt2&$
zgs$qTQiREW6uAqQY1UeoZ^FS2w3e&)z4Kgb_(Dv3Wh?Pt;!FCXIa(i2WKKdSk$aeQ
z7O`g%>OzuK5=SSYk>pO at -n+!BNvIb)LC>-ohx>1?>mxfC$*vpKmXe6T0Mwh>T)*G4
zN4jLfxg1d2@&Gh`)=TBm9_BgUhLXk)phM&m#RO8Y(YlF}nqDw}-T9 at eIDW-E-fM@z
zkfi)6+b%3tE={r|HTEzCZp707l&hcvI%MO8- at U_-iMuif<IaIax?9lwd-9^-YguGb
zwR|2m_^kHyJwev##ZY*a^tVrK{GrUoacP$+j30(nQcM*(JwZ`BPn1xe8vpr$LmCNY
zE(=0}d9|eC$(6g7X_Eh;@go~dvV5X^GD=e{bP(Yo$F$gH!5fO8=51ac&1j)|Qpt0X
zuk@%EX<rYiqJ%)hs2Er5GVvSl!aMYd8cQBh^m2t`Jy+r{_*%?U?1om7!Mthyzk2|E
z13(MNa*BwUFa`BeNMpDpmBvy?lbr@!lp{jx-?86D3b-6W1>kCmU at Ks}zxvd2E6f}o
z+rz6Ln8qV-YzFCZ<Fs1>4n>?G&!i)}{_!U9#mDb?te75dPIpMaxyQ^VH-MGQkdqp(
z?qwrGP#Fv~#@m>t&w$bdX}ie%jt5xkJ5x|sg(ZR%HL=bA5i=z6pmNQ~e516G_Wn)5
zy(KASA;$_>#V*=7LCv4 at AT26;vDYCu2qR?#kXoKW-Sf=7_J*Lb(K&$L=a_mA<>4D?
z`b6lq<dLVK{gXR4uenDZh$V`6C{B`4h-x0nN$CMo(GRC$Yv{YJU<%KAT)`<X$(Uec
zT_xhaO7DExu%DxB9vz91?+_rGy^G$CRv6iHBVk9~U}DcBA$yKZMO`CQn4j^X4-K;j
zeT(=#=+bSAp<$L%8jmKc<^;%sF#EI?=vW7H2LE;s%*ER{!NSHRPqvrFb1<u(S;UH|
zs0TfwR7mFNeGW0ZFjpvMbhjn;Per|LRb?m3@)vc!HMFs<HI~HpQvr?EL%f-a1~EcA
z0t>0 at -n&fl2N_}mQD4RBUjOT%zr=q*I|NhLm~Ytv{j4^RSRNFW6h+@);cY%BwcHhR
zZwt|}>`YhY{xh;=9$3bYieW9?qhp8bke5O|f(`vJCv{6g+{|rXe{B7JK9Hx=VDHf`
zHAvWRj|>gOAEKQA^J;0#<N8mgZvJLi(I6_H1C6?bFC_U8R at 2Z`Zl*4BTP|@yuIKeQ
zU<Nyc)Y at lpE%54`sGNp+`J<N+#5F8mm56w^39^PHF*xRx92cm{4 at SuH9}$K;l{ZEH
zN{f_nPd=K4TB8cE$Zx&{C+ndYU+1Gwj64iI=|H_@<=>hf(G>42Qc-K`CryDVwqp1S
zL=WPh$u=SIRJGpl*ay=Cqih#J*udAqdL;gDM#a2!e0>J23#yHb+MB$FLs&UI3h?z3
z(=%C32SS-MU<*Z{Y)fb=P4W|5AKQGm0>xrwo{@ysA{6;=TI6~yizB;*p at 2cA<dnLZ
zcceA0y?JMXUhQaNmgr79Er at S|QSZs7X=-1*^$y)(C;0)gWgA?{Vu>;jQm$YAJf3cL
z7q&xCr=!yVk13pvY5*nQF&$-44eg=71Qyz*g7Q4#`E=9?jVG`fXn<vd7%w5~6N#`H
zsH;x{W)m1?w|-nT^bJg8=@SQ*8`g;ucC8CcvD?%f4i2_*2Ff*-d<IH>4oXIVlJURt
z8vmo@#eYi1|G_)_*jZRtoEE;p&{JOXDhQ>>{>8R~r!`k&+|yPeXt81!&FtFrWk_a7
z8r%A8dgrk953G0M+_$qJW@#~EmWHo6D$N^{v>D#X-s`$@?%NoLa$X at m@4AcUwRomC
z?QMGJ>rfqMi*<~|O7Yv3n)#P4iMxrQo*xW3qvlw^LVJg at S@ntNos}l<3c+az at iqiy
zIYS%OA;GnX#RulA%rtx0<mIo?`3-9f9}v8mC~LV$x}!jfWwk?ZxWPLH-(kMDQ0+1i
z3Q$>;5(b;}uHT0NulraT5mM^Rl5Wx>b~=#<w1m at qLS)fX#j-8o0W1Q-6V7r}GmmMJ
zsN<Y+;`5oPkBv!CmSzI}ME6Y8mD9!|7cmhtb>$p~)cF|t0aJ@)9bQrfh(e1%+RH$~
zB@~dqiwR*U>YF24UtW-wgH%I>h7~lV2>fK4IKb970PuNGjBjexCoY1>;GpS}ZPTZw
zaMDws+IHHdtD3mU7PaeX1w~DXJP6Z6%_mzV23$BkX#*+Vh+tqH-{@0_j!<-p;xBk&
zgK at +{Q;|s-=!DXUa-(EzQ~9{0Z7i(QCyu*b(IjJd{sPP#V9!<Cy7lqfGYzW&9xiBS
zkcQw at E}y2w`u+g8K3(}Vk4WSRYJL-HEJgU;#mc8fInR8dpDY>BE0--K*2bG3)hu)-
zdY3pi3k_4mY2ka=z$l9~ay1Xx_)@|ix?<`}tD629#KHwm5I+K(iS4&Gy860`nL|nA
z&Y6Q0sC~=UaLOXlDZ4Lh)JH=yQq$Asdv_!9^r!g-X+E99J(oZ(7+ABgpns}K=-6A`
zSUj*&6;YCX{tJx*q_>}E(qx$kMfQ9eBKrs&o$@erlEO}M_$HuMaY4<KO?+oX8^lBB
ztLmM(6`N;_<E62%z$nOJ);rT3t|5UbW|0~Rd|%A+m!=DGdGIv6e;$I5UY%er1AM`R
zCvnwq$nnc*E$@chJ3eG>nQ_QndTyd=4w2s>9oQp%>jB4UGEg%jgu;J#MMW&;1EN>!
z=Gk3aV5$Os8}FT|;Mnis1EN=xKH)9V4f6Tcr+}5Xjah|sBfhe~v<OBSv<8gRYFTh1
z&(7!6vyfw0K#$bmKzN0tI2p2DgeV-HVb;{(M{Eg4{Qx}rJRJ23e0;IKHj#VbFaU@~
z=&<vr at aYXJ8RFs_02)L2ayy{de39ca2B4d1h{L_71WAB;T6(B5?R at sO6O#m}yTDS2
z$U<0VuzcAuSPrM at y_R<O*MPE9gva^Lg0`KW<V at L#GW<F-a)<oI7yxx454T2BKO at Qo
zD2pW6OEd~lKhhy7aZ7+QJb6%EeHyJ_iy-|wrXl?u0BuX(I^?hA%p8A8Mqom8o at KK>
z5>WkziA*8NaO??exCH$)6%s=@<-&#EgISn`w1L<uMA=qQu?+f%TFNAj3eixK>KI`V
zqI at tFz7c398^Y}N8na$)vd2RX51>Zz3JcZ*yR86NeiDI((|VX;oV-*Mu4paY(nLIu
z0Hn^_Sp+>24Q0T`NHvcR%z+jIM;CMsH=Kf`d?d=`ekMYa7xiD0cCaXCD+YaJX-IHS
z)miFj1wxe-v8(`1Z3ddy9|_p8HN?|MbaCqVC2l}^=i8_4iM*0*+L`<`gmN~jbJ)Ox
z!v1jVwddr*ZC~HDiQT89COs-Y<jOkm2zt;Ht>2Xi6%<z7*Qfk^n+^8q4##tuy(z at r
zC~y*bFue7=L?sN*Le|I*Vy=Rkrul#?42WSM(?tNd+4L3Aen}4;^vFUsUS}mgmL8x|
zjJHAR|GW)qm_VzP-4>GNr>Bu>d$%8eKAIpfauwrGKMH{7a2j3qg<)M#7I|fR+k at dH
z63g<U1)FWs-pmmuCrE|KNw4Cz65?odii0#UfOP!Ry}IW+jpD0Kd at vc>Xf(;MBZVS6
zBXp5f?<LD>F;{hE875!YIsB1>-IkaSkm>Sj%ma40{b#}|23_cHQXlD>+ZU;flV1q;
z&0k5K?$XEd0q_Rt7qMr__W|14{HGUTM~U4rXc|X4A{8R?ZxgT>?v~?l>t53jz7wZy
zdQFgGQGe2i4>36wb;BlCZeQpB!_Xf at YAni&v^)IS+jqS5-dE2&8<35ocO2U#KVs(a
z!epmY0a<o?8fk4>V&EyZZJmsP1y9N~`>;3 at NdiQ;1sLJKW6{Z>qa8y}K^Lt#!Be(D
z=EM3^_p6%ZGg#TGYN3>e;IbFawBTES7$+kws~q>51<MfYWrfHlDUX;OhvsI?Wrsk}
zHPisrz%E#igR-%(#rvE^Ud=z8#ax!~1%D5m>~l`D;{h|F7V}zOh4aVa7_%qCIAS0U
z<tQ5Hh|DsP&+h;%#AMcl_o@&4ujWEEaUyp(k96(LFSK;e3*2KDW_`dFo&nrGMcTn8
zm8 at o)k1<ZPB4SKZdU?w?>XV3{?76d*J{@_Q|D)+bZqwC4TZrH$H%9?%6n)|8=kG2(
zb}`_Ci=79)ijfNwdE405n;|9GQ{`nV-9lUvp%IWpi#(~Z%;Xi{1^~!Q*z$Q7L}fQK
z3|?$=hhT4i2d1}&nju2v6}7&SnvkctEvEN<BXMjh9Km(3K^rLD(6HDym!}WC_-B+6
zX8$?r2<!h~-;9&Ic#MCWVVaKF<Zv_7bVM-JKZ$%{TqiYYx5n}e<#22F%dxZxN9^9V
zF9W=8NNb{vV~?aUWGX8ZOc`H#AOo#iKrWOy{v2ZPBJRhdep#!v_dOoQ|JwbJI>~m!
zY7lN5Ujq-e-4 at UQ2IvO=H&?|x`3-%>&Wj^LzFLIy&EXB5^K@`fBA_D4ssfSwSlrY;
zp~@7OLP!%(H%CF%rMa=2mE<!y!S|9p8HY0dzFXaVm8eTVofR_$Haw*N<UHDIZ6FQW
z4{4?Pe-rPnJXv#!<9VGF at z7cg7Q1>Hz5mrF<P~OoGj6;O3Cb!fg!<yJ<NCL-4l!Q*
zFB9jm)2A_R`)`dAvRcIa8+D5P+5(kOR3e)*Lc`lRc%&+&B^Np99Da{SC_<lfq?zul
z<7+Vgv)6`(4?3Uw+jdUimh62bl6*VOvhem9Y7a9N$xaJGW>;&mZhszCRvAv!+}S%C
z1K=slBLjJ$ESI^vvG{{u!l(w8WP-HsO1T_`uOAUiep2E;m at AHupZo*OtKgdl??td|
zrUm9rw9H1|OasUc4nX3s-zw&<t<z_y1HBnB*(s;$ak}atSPAp3s?7K_Z$?g*DuTbR
zbNKns#BX!Zc<bS9E0hUxREr$BM1&@y-fncK*%r{yUw9Tee|N}i<v?zDuCz~b6snd;
z>xoT?=rnhDL$-i3(@@Q}dNsfE<?bniROr>bFY0LIShmhYbT$QM>xbD0 at 42YEc^T)`
zb`>#aF3Oq{{!&aU3YGZZoVn#l!>?D$VM<$Nx!H%WQ>e9LcWIy_)8q4$En2N-2h@*g
zSb9`wsvX0?sey)gaodMi%80M#0_6D_@#kDLoB=C-RVDGypGt2Uub2=fp$vsFg$Yu^
z|4D&w6G5kA)m<ViEe$a at RnJ3~EKN~`x+3_1=cUNMnP<@tSt(w!mqL7CwOIVXo!pps
znej#Oyn`zh8M`q>%tS|K1!nJ^hS-ifgfX^7m-sITq8}P-OQ9-VN*2nGPjvjBj6X>H
zZ%;9046;-f_GO8)WTi<{)oG?NhN>W@{bjOs`6eW!bRNE%8|XVjLu0KmYfO}@!M46V
z4w9Nktv3EU;G^3|V1=z}A%Q)*3_3|XxK05g8p1FTvCtY|N7)m&y)1W!R71t8H~Wld
z0&3j2B8dEiDGr9^n_*rI3tCoI_ziO*IizwLGTPq*XO13XzMmRWIUBoo{LMZ{HGcx2
zhS9 at omD0ZEI=P^q2|d5s?QZ`?c$KaIt4Vig!rxuj*1>D)`WYbvLX)4|Pq}xTb0q0g
zPNQ#^8~s at kV9P&&u3g#G^wkBibDKD2 at X<;7(t^0qWAJTK92(J@#52C*d2D(_0m{*=
ztHk(PPI&IV1(BI+aS=X{t&f663HlpEh+;gWb!i#kJ;XGbNMfZQHob{xH9vBy-Q~jX
zo?gfo1GYWU`=b%{5`C(wcy at H=T25s4M{(gBj=b=nVdND6k1K1y{54N_GxZiuf3ICu
zCXsKiqi`#fNN_(!8OYS9f>}dAIhhO>`JQDPhNO>03T$Tsyh;%mpO21KxOr+WOC}z9
zA*QY6D3=8-P!-C{Fu&sD&Ff;nR^laTY<oFVi_Jmt_PkUr1~GaMlkTcc6-+R__w(x3
zsEmyi$-zih6l`ACATiZ%eB;8x+u$Jk$>W1mm_`{`h(>Al0LCOLgA5HZLF;MFKID{)
z504GWoTm at TDlz8u{lXVeo}A|gry4BJ2^5!g?5E=P2<pNgq(TpEao{_(0^u6h9mCt8
zA&|+i!AJi&tDwD2u)Sghl#c8W;>9a_Q=qzVFbi>5^lR#&T74Xm{~967XRz7bFMo^7
zJq|m^nPGSM{99 at EG=$$}c{11w^Og!`QUR&uf9l@(b4JX<QM8&|N<;HUU`hU#OnCUa
z<re;C4D<F>rh6AEMSY%!B`1zFe^-2 at _dCU%rZ4B*`BSyjyATnBh)eAZ<uJ1Xp at E;{
ztljRo-l6x}+-*?KoB6aeMRu2OljiICWXZ{7 at Gb8MXT%2}Eux$S=`}92%-VyTLyuUQ
zZ7?606%5V>%m>{>KHFvNjP=9c4{P}qJfwKy(MWIv74X5lb8=M6AbrM42B>IVyV%SC
z at Fop@!?<?wcLpepO!&z}`z>z4xSj_&<;$+#yyiY7JlB2JX5m1oAveeoDco)lN69}$
zC`<h6RhrB7n0Ka91W*-riJP=tu1oZlTk-_*&eJ~^&Bt6QL<Ti?UTC5(K(z5w4X1zJ
zlB<jlv4<H%xZzKMC1fPxQ#X=sc^Kxy0^iu9Q{+W?oT4=tlkVg<ohVC1T_$Ni<aWd_
z|LVlJtf%%1F~0f%bS8`0Xp^}e?LS7eE$<h3HHRB=iH=m1Y5pr1!xO at gin@`L7s>7t
z)HHM}noI0SLz!p;(U^w1xs-hR<>&GpEWbsSfk?)uvz2h{%^rqac}3_oqB{-cQ0CL)
z1f?RWHiy9GqXFnXV)}eE9R)1;e3Z}fAsu)Krz43xXB(Ifa`7@{{7u%T`^2yFQD1Uv
z%+4JIZ2{`#(i&sc)a-7mwm3_fke`NG$&&$>SOoeiUV!>KdhVLIZRe*Waq&$HQbnu<
z>DwM{j at vIJb}v9 at O#t*C^Fz!`Q{iV9?}i0PN%b=v9jJ!}Cicb=zk=#%hCfBP+!7(n
zm|#*Loc at _`0X?+N<=paVl)_2)o0yx9PCzl@|55hlVND%f;PBj#z)c7eFp+?STy{{@
z7(kH{5?KR^gjGdR6akG=7f6(rcq4{I6cHp`wJh#SwZ2_MtCfl^TC7@?f}%Bbf3;9s
zD}pJ4elrR9_I;o4_k7>)kNcdNxifR;&YW}RoLSCMLSPH=W8Diw95N_(de^%xRLvZ0
zW3=gHAymtp-;e&)74A at th<zX5Y>G#EyaOOX`dv*Oz9BlG1>||D!8(%@$P37*3bkM^
zCLosw+y{B4FaJx#38l$A)X~~y$Y;S4eIjjMJrp>vSA)LCGP>$UEY9l$9_Vsc9Uhja
zB5+T2hE`GFnQ?4iPO(gr7<kuuCIIDbq04oL%81vV5dFT_=4qIKt at eiuIsj-@$<N(`
zszAQSks^2NEVnyJg=4PZS-*W~y6Ps^)8Hd9`QM~CX>b}&XR{AzN`bSgV}}Ri&1_W%
za_0@`{bH^B>ECB=bw}{&`F;4r3NFUg{EXRZxB`562b2tB;Bfub8M~_`dZ(lc@`!AL
zsrmu8sYrq9YchW-+FiDuY4lgG)fT98v>8!NS{oRi^=C>MQPJ7vS5b4$1C}LsLQ<nk
zuOh=v*6U5U+>ztt+^HZm4^6ntKsanadKo?D_l)Ao9HZSZN~Tut^62%-+q$IR<AkzO
zmu*>*D+Vem+v at NH^2*{iNTO3iKQ at u*e%MErAg at _3VyX`03X!WUw6@{}fLzr~;-M+d
z0Iv_ED^x!>GLskJ4EWe=csNs$n=SV_+4|dgN44BX!u-AMMAw<0VVJnSSQ{O=2Dj?|
z1GAMlIv7>muva=<+<x at XzHxe-T&GG#=UTps4xVh3{!e3b@)L0zNX85__|bYgm`B!Q
zLQOKNKtP;vm2Xuq?u<qadd6`WRCPDFc%22-Xa}OJDn4kQUJT|Qu+~-dnR$c>qk14l
zZG`+G8I!{4HEf>V4veOZKCqmJk~V}RYV21kGKYR#W~|(?;+^*%U_a6*dxs;IBy82P
zkyd at kF4}8GOAgJWi7rN5Lc+t{Z4XJWmhTyq$?@59UWdUhjqF~oY+T`ktaxn6MUu`D
z!bHxkb{-mH1?HEDMS86P@}OIMMkp`dQo at V3s-QA(RTIEf*`~OyiB&jg$votB`Q8m=
z^LK#I6f1y6&%&gXb#?8n<l};r#ijGM#p3gJ7#VhWk*>fW5>^@<PbiiR-kmt%UD-f;
zz+$kh{`3EKsGRnR9B+pFWG_wHve%3Y%iBg}JRT~>J-v&9&pX;dF)dkYRmmW8SWjjf
z!jv>9XkLY)R;iQC2!%iKM(N0$h&Io0*aL66kMkjQ-P6dPTjn8<E4L^2$C$g_oig(K
zmq8*7E(6a4- at jj>sfGl<)DZSlW>4BkuU1&%Hhb2!ziS`uj~_vtQq at 7w7hWpeU%D6)
z=GW<19BKB93yPF1tY(omoQ(3d&C*+V at SuonqB+=Yswmv#dfCm7yi)Ftevx=QqY2V3
zWCh)t6|9xX=2o;ujzb3GZKQPrt6#&hLw_`=l!KH&+KF>Fa8|2L at Q#?rBJ)(@0H=~>
z1wj^Ehdi+spK$t)Z5{exe*_eRo7q89-l!ntYI|>}^vc7oYd`9qL}M2NxUXn#xB4_Q
zUFg+!KD|>>>kq!Wb7%(&qprCDv6lT at b*B1P<uB|ffv1;NWwQqUXkh!SZeaSTTr9fJ
z!T3s)hLCR+<cZNFw%3?$y}UDrsat2HNoo*8FU9C3w)X=V-wELv2)}`F8iWH7ehuMA
z5C%h70pS}6w`AknK7^H*!FUCXvtgVG<2a08g>f4Q<6yiE!Yet<MMs5NYX()c5F1Sn
zLAA&$XWWxp+HAC|Z(0PX#0f+QkUwV#@ku3!pHyCmv+<GvdFkS`b$uz(llK-FnQ8?j
zfV2MMzK*dp+ni8?wT-`<VQ%|7cY?g~kV8Dv*f_C9Q0;CdvPxqd?a1TXBgbYpmAc64
zUp at XJk^9w?%gkQV?)I>QkT*0<l at sH=+ghFQ*u(2+5aa;%3)A(oA>!+q|L6YrzZ at v?
z|IbMMUksF-CV>Os`gUv)>PhjdvB#n=&O2;*aqN+(oAZuX-u&e7#f!fjF1h&05s#)K
z_seyp+hr(?%|}-=@5e{T0{;-YBk2siOvqjQ+57Y|p}WKm{{4^I=z^?&{p%Nf0yv>3
zt#T<d{@Xh&wMTx6tatJ;2`_=O`YSlf2j5m91&JMb_HgBe>@gM3Vto=9HvP?xD?I#h
zLQ-k4Ocu^2<3c_?l at +qua3W;U092~0TR**B-7 at YDEc7Xw9HDf^9NZT4Y<V)QU at 5Ag
z?{CSrXkQ)Qk-4<SNRQ78{&s1Hi#;3GgAP?x-&NkJ;AZm&{sq;>ud*E~dgMg2y!}n=
z)@)0*J{BK+vjA8-`rGGs$N}2_AjQSP<JS5(aC+CZ$`}tQ at UELZ2dRYj4hwZ*lUHte
zz33#VbWg%mcg*Xtfg6Bz-=kTXs;)R7tuv~S==3 at qiB9w*{TxN4+WO!kI1^isAfDjo
zXgkM4hOn?+bRSh%aVdR(==%xScufI{7{OVReLYq?f6QpIr2CISrsjIwIL%YDNEK64
zNcRbJp#^OVwK=_mg)iK{SzmE0&i9$V!D_JK_!!Z>`)^M3&FR8d at 5-|R)U1jc+_MhX
zMh8S|^VEqTMpL|#4tvlFiWav0E3`QQv&-@{bS$WU?!%1b4k8~z33;T;2e{C`)gJA#
zzN#P$f%h*3Se4~Dwm`BP16jC(%vTlIjIY-w1=I_rmjWEh@>*@q97Y~^G|8qtmZaQd
z+y<q^EZKIlG8(sudA|EZD;>sHTyOf+R(jQ0&jGV at v@uVWQkI<!*nbmFma2WR_{R=%
zz$d#J->A9L^AFn)i8;ORwukPB<s*BZM$5mQ=h?kapK6{8Tq%TP*;e~bnw$>;l`Y0p
zHTi?2fd84fr(?dVCWS~n&s?8D5%^m^0SK=bK;{$Ez$ZthYA7(DhBI|`J_iu_f8n_5
z0&b&}H{Dg;#%)f|o|xo%d1lJos|h7Ho^09DHygLH^_ISky@{L5@(MQM6Z(A(VPZl|
zJD!Z36NqW_sI!MF)|wlG4ji>Ic9o%d3>`dzv&GJs3HPaLdrz_ at 9?%Yqvs?6gXeLmg
zRrU;P;_<h>Ju7 at V8(d)HTq_wM0BRpB!DpDGstWVyUu+0d{e|23oNq8Ksz~aE{-z2)
zyIyKP`WYQ^QTKcRf1(q|C#ImisP$I+R;4X{)q!T3fBkFUhiOX#JK#_4YOLG0giKqS
zPsy2*1V|#798_HYPxob<5^;<`8-*N9OI1cE)Ki($xyROS!zZY2;5POS&j@!{`z>fy
z=PqR9Q|IT5d$>=VgBq~&j`TRXV}q27m9--?wO)Z_pYCbKF>pxDLyf#9Ke959X(nal
zKrNgTrMKjcjCcJ$%u$^;FvnEz;y=gS=%QW)Wc0X@!w4dWIj2_bpKf&o5ANY+I~h(N
zjPS8{VbbFYzqy{(Fn!#1?ULnO$RR&4Y4~7U)-wgtXGti;kGIZp{Y at Dr6e0ON?z5O}
z^!fy_nl1w>iBTfTB*No7L2VSZ0bTRbp$+YnC^qgwPxt7VoB~ue{<PQ2j9w%8E_Z1k
znZj8uwS*pEp**3N_51q#!K)AD;HjSQUU2?SiO+=wl1((>*yRPZ8+ZBIH+xf>9-_kO
zPe5tKC8XxdaqD_h0p5aQp>Do at JwS#%PQ8W|>ck)~+7Mp;Xiz5VCBi4ZE>~2)^n4-N
zgtH*~o-{E}8}`y&tMn|^j;)K~=5KD~<oBm?^U)<u{f2BjDKCT0a-di_m=|Z at 6K!-q
zGeWjDL9wLlh|ryq<zQpv+T&YeIC*(*;4@&Kmw((oFMYhU#ab^1A=?HnN9nb;?>k4Y
zWk=~T>xx@)P;h{#uSl*2>iJNhOQ{A^f2SI9Fc)IDt&#DIxi!vv*!q<L-2JM*(0>4M
zw<_p&>TV8}Ogi@}I4WX`YZEQ=cV(OB+r#6?tJcNU;H0HYq^?(FysGdQ=R3$P`ejJy
zayp{KrB{5k=A*M_(%N-8CRbZqUG3Qp5pe=+VVG)9i-#zW2ow4fp!r7QBovNrYV%M+
zok+PccFK&JGM_rH?xlTo-DKp`;(_a^P<{ZgSd)p(5QP(AB%0B58DPi~H5ZcM7#ZmM
zfrX=r7H4jlIh@}T=8t=yH+nelY?$}r`@FLdT$8sUzTk5fv3Ly at KQ=J at WZl@e$ys__
zAj)$xy^LL2<-!^+5Q{2L+0)`j$(LcCHf}jA=Qj$@s|IwZjQVI9HdZ>4bT(()gYe<A
z>)Vz7{gK+($|o4TKmTBXw1$NzcjAJtKM294TUK%EdDg|=)(<a8>-K&`bu7bNNtjWS
zAB&N-t`Nort>?S79qqLGV(x`_(d}w&wD5D5d*yJRw;S#AB?9TC)VpI}KCf1Y0{?=4
zOc!$si|sfcadyv$IyId at mvg0=qhc?0fwr&H<LJ36GX?amhe**Rw=jGB`%NUy18QV7
zpRCl$S(kX#z_USEQu$WKQJvi3_)zieM@<E8Q_1hX`$;D{u&%Ytxe|P9AW0Xc{L6`L
zdqB8<Vewl%GBR$>lY7Jn<Q9l$)ct^*(oW30EXZto at N;Npbf27U!*97=cX}R8l8k#I
z6E;7Ug=Qu+3%8ojILRlQP<pW5Y5cW07K5bg%#!|viVW4h-RqH0;pYx;5=muY$y{Jt
z at DQh6<F9&7c`U~~u at 9-(<(Lay at Ib4hRxHN?IOr+{!a;E!YgV;A_d50Ya?IZ~Rjyp5
zNO&%;$-jX!uJL7Usz`tfx3QQ{w*7207^C-7^c9!~y>V$zH08Gfn}h{W^H*S{5IkOi
zjfa4fi_K=hTBs$|id;xc1D9WCw#|f^qnmOT?9mcH*Q8eCpYGWpL+za!N`0D(rSQTh
z<`u~_)7#&$=9s#lQ!m}qLUBLDJjV3x=qc>pn at Hr2F%RBfpJ?To1=Oq$u`#q0N2%-&
zv8mV-s^LRSfX$%JLO@!_Z$sp6=xTYHoQhBSdc?>B{Mjpa!5eujRXAeg!JKb;SIn<~
z8JOtA9OO&8B(-J}_H~Vrz#jnLz{F-N<fCyl9pk(jmyLhW!NR*AH!`D(xmpdn&J%59
zdci3%no+qCt!R^h?Q+25YVj1VOw|5^RdL#+Yh}u9z%ejU=$8^8n;6q9^X=mS=9*a#
zWy>p3#Q>-c2_pD+L50Qsw6!+>j)<vs3GuGyxT|0tF~W5E^4B4(g@*uBRSOhkFNdkx
z063~AAuK6W{q82KdoDT18D`#EM9KnswRsB}Y<=@vqkVinWMUiG`m=w?!6l)QBk3 at A
z<51g~?-M4y)Jv+2wm+ at g_Dh28OMSejeM!~{VCjsv43yuL6Io3 at jA15U3{iSqjDtT|
z6Iqs_UR);g%cSRslHdmui)3 at zwEbR*y7;zx=qE_ at 7ok4E4_g*UFb=M{C7YIh at Z2Sd
zUcjtigjoD!w7rZzCaDVHGf!C4?`J-g^)N!Lmew>(g at 5bqQ|sbC7o+VbH-Mn{gg;9b
z-MRnT%atB~|6|u at -U7bGOPXx@aGk%!=R}tvPt~xey-{P*XC{{XMt&qqoLX~-$+~W2
z&)uV-0v2ymp$ydrxVkKr3tP&_ at Ljw3@A=PfhFAwJ!jioPwHXyuh(+)tY)-uAwURM{
z%Ho*W)%Z^y#C`aFMr0G1BED8yJX9=WrjNT;T7Ad!q4JpDXyt`$(5(M_KE$y=rNY%#
z^QD})sL at 4{?&p(_3+n8Q=+ZX2m}KI47a-63UaJ(j6X7%3Hgsur4NU1iN3fAy^pq5U
z&pjw&t8==;G*#XNc>_$k_hNLhdWAMO*kKs!zvvE&OhLC=&G>TScUbo3aCij_r at o)K
zNsylsVzDVTnBTAbe1W7DnHR%Z-K5A_)g+vt>ci<ND!>im87=2Ng&)o94pUwLwwed9
zl0FC*L8y|0<P>0?_!(Cx;Boga$rP7Mb{g$XxRAvuK^sYz=g9t&@MMnadczFlX?|87
zpMB-UwaaJgNh9-L32r)xqnzk>(=O7a<6|}rRRdq{wMxkixkYa{I`Z$?BB~62BF at 8N
zbt|-m8sQ*!n8d)V%aBb342OSog__1l81+Ofe!FY;BadboFg0cgr$m at yOWm1jyAxf-
zjXVJCJxG1g_=G2*`E0%12Qpf$-Fs!3z15^*O)@@3u4?8Y`-1Rc!-r9D;Z>z70Qc&b
zY6~S?C~oj=>o4_5Y~w{mdd-^<M``BSY)$f6OWjhf@~QG1fAs4D`g1O1^mZW}NS at Bl
z&e}IG7aL~e2jGH04nFGbbX_>v)uWppER46v=i&k>*Oe(uUtIdjY>e5Tua%QLkx&!g
z{$}&PF{UOT6KWFSd<XNzR*9JX3y+7P3dhus-|5lh3TTe>9kT-G)N1nK2fMai3xqsH
z%FAHZ^V{ETE=5<zq}M+P{&VZjJNJ$uiW=m!zbR7;k}|ZSE2$VDG at DSD$-(WeMR(Bc
zVO2B0qt0oqQMe$*$wb??2dCdT>^OXMGIm)goXo>-cV#>>!`+X{_YFo36)V6{@XBKQ
z+5gfi?T|4+Z9AIm(ZnBk9%n*9U?!44B+)E9GJpj3U4QCi!3!0fzRj+Vs#`#)IYl at c
z5<1$_18hqrHxhueE6_FFARJU3CaFrOc at 02Q0*t4eW&ctK+3sJYrN|%3KKt7|7DBlv
z<ySyYX$O|itK>c@{Q!TP4HW7yPLfIyYrp<{v`(2GWPvQT#W at IFm1IJ&MM?nhgd!eR
zQDZU}>sir3_^PfOnW%8=)%w{l7e}p1b)A#9(zUHv)s$`3c<2{D`7+h~r}{<w5r2Ge
z9`LASgs=|^Y>QMk0gf0<OdakHk at uyXk_Blbg^Z0$3}Mo`zr+2$#}w!$+r*DMXOK@%
zyZ82A&}BpxTZn$@th`;Y1~_W$60xjQoF4D`uH;Ma#-d8T`Wm`;#dK)4*o0i_1^{tn
z0Pa!X;EHK_*%m2Wt=N$V!xfmLW-7+K_gUh85-sx`Me%IQo?u0u<}Vf=n_E9uaQ9qq
z?8^Eysf{U4ra9j|_XZ}+BYE)8yp&GS?%#ej$Uk?<v?q5Z2~&3u&QcoX9$r>j*~?{y
z=|QUjcj2PZCxZ at Oo%Z#ET;V9TZON>Vc-<`L_!1Qtc*Ph1)4;VYg({CY=57w_k0e7F
z at -qmvN2j34In3yjCQZ^_(h0w}gp at O3E9OY_*;Y?uMmNK78hqwWaGL!hJtDrganXQc
zZl8$TKgp0RVZ?>3<icU<Ot<dg$}NIdLk+U{YEXVe%j5dnEp37wEynafS&1P)c2GS_
zk>5Z1V4g(p at 7BllbKE`6^|5$ue5pRxM9w%*iDSG4IFm=F;q-^zl|^L at 7}MZ)tt25Z
z>_q$8bESLNzT3EXrL-EV9A202?*2^^A;+bec99atbC=B~ga>6`?2?|CHK*nKzu9db
zu|xH<L-?+3=x1VW>gU2I4L<X{GPJU%`ui?J#e8c`2XO3n*F_`IrEK(usJWg*GwB7i
zGHIq|zN8i(SILMAP|LKkAm6K#zb0~pvz%><Muo&{1q^Miz(!k>W*=WJV6?z+3k=(C
zg6R}Y*Te8;n68hx3z+r7_)-C1_DtXmo~7AWmT9Wt5C{!n=K7%=;Ruq3LS#il^OL?(
zi8he_D*A>G_-eqsI?c93ok35JsRPW4Y4Iq$Fveh>G}0YxHwV3t`$PxEZ^+ueg<kFC
zb-hxDETzEloEjGd$8$8gOBQ`9ZZcGw=yN?mU65!MP~A+zR4#u0nra2H*4hvr^cR1M
zPf7zbB?Qn1=X6}r{6Lnu#Xg7&c&2v=>VFazF_jS6si-)XY8#+s*=gxPwH%-P&N%BV
zyAAXeQ~dk`a<=3}E!tkB(!uxJis(0%9h{M6=St7AJ5SGrIHR(Qr6ZiVSGcma@=3Gf
zj0->F7k&aB6|>5qbhP1vlU at h&{XV9LU+12e`6M^cC1eM|6r^^v4sK}!u|t6QN?Z>b
z6x!^7*_=GD#Et8&7am-Yg}lk|a2oO^10gG`X%qeVYt)!+d3W6oE)06h at oDM=d=16%
z2|&<+<8#+>_A8ZL0~UJ#pHlR~kX-kDcg~=)(DB<jHP;LYftQD>{YE2|msCG8gu}6;
za>qItVF7w<6QtYqz*n{2Z#2`Hc=qt6AsM#Zf2 at bBr2gI(U25UMwa<kPgD|fxWIC?q
z{g_Yf(T<jiv%$aL+7OoFyulyUiQ=obp1CBDh#dO_hU6f0ka_(M8&$vte-cVUb~e?d
zKB!<UQ=&7{eJmT8l at CUrnzbOlTIIYU6c(P6Wv8PjN at Yc=P}rbvIX;CdTS`E0(c6<r
zU&;%iw7VBfLnJtHY2`LAIHp6^Mkdpn=oSQJ+!1hyJ5OwMbd__N4?=Pkr;I at Lshj~r
zH;}x<kk;{RXd5|~ZU++g at 5@kR+DdJU=bn@}#-xV`N*v=i$ooR<6Rj$>a#e_vz4x^u
z`706gWtSqaazT8_mkzcykd7 at NJzGLL9#ypVKcp%tmgBtjxDBLnmNe6LWu~g;fI6=t
zMU&R?W{8b6{b=T87uPl at qzc4jfY|A&em7*Dayq2l*%B_|?{a`x<p?wSIs+<Or$)59
zPXk^?Yom}gf28)?dc+qG?l3JIaNuy5*4&_O9WGbyoO!9v{Zbqq)K=<@4EsQKjp1=}
zt*TQF$`8^bn)#F8<oDqWdSEAxQL>LQF71bAD)nQG at F#zM?Oqn{EMYM-+mjC(=G9zQ
zFNXYkJ8U&)+ne;cXa3%IxF=f0!HJ))-!sNg_=Km_k&m%O6VD8=JY>H}ie0dFf$i3q
z<Xow}cYKl3I*0YAl{Q+5-x^e{l!N7+9OnExX9lRCLX03=i$6WAQOKrksxyS`yd!NW
zc#>A1iv+4t0M;^=dFRfC|BWvGr+Kx at Kl%jum$$yuQ4O{~LR`GpzK~B|5_5Yepi}F*
z;yUE%bYeno*jeQ1^to+>ET1oQNByL!$YH%{JkxP8t2-j%z?3>kE0lq6%Bfq0*klq`
z{<2aRCxUEbjA at Ek8yDac*kJh|{2nico%!SSTZXV$y?Gfvx+*RJ<|l$gFszQ7eA)+2
zsG5+1;D5^jY#2}QLT0q*i(LhbZ8{it5_Gi~A at qcDk#FKJeV0(&xsyNI&UPEAhq7;!
zN%jrESr^A6HJopic!LG($Mh1&{7c}@9A?Q42pw~n<#xAT6?%&t11nwFy5hU1H4#RZ
zIFmLfR(X5 at ii^W(b1I*}InZNvpNat+2Z<WZ_R-s-;lsBOT$dS{cfsERNsjfnm4 at UB
zE{QTh)^pftOzh2U)~vt1zk!vdh%>=D2ve`{ff2&lo_ehpgy=(a;gbfRdGMKEp}?5=
zUuLs{pFk*vFbl$72p>b32jLP3UqW~Y!Zi?jLs$&qK?oTr?gaxn7<dXH-Lx3V>Ix10
zc=e>24Qm~WWt(oD(~DtOQ^(e0LM)lOvK}J{xpG(XQP+y;kp%7*IfT1a{GRi{WqbF_
zl1<S}>&BpG6r02ZkyEu9Ql==VKU$FqxnB1m#1^!L^;F;Op8Lv-Wv}i1Y5jq6w2~xG
z(U*&%tSC>}QxuHiP(udqzN9`RF<-N*8>$Z0x)9F45Z_o3 at 0=<x#Nm>9s0Qau4EOy=
z7ZDp*KVSDGbh*_nIaACL3nBfc$1jO5jpV59V>R^)#2#WFxiH(IF+1AVHGnLKX&Erh
zRlZQ<`>HQ`+6}>^trTC23CJr6oYzTW4(V!tuq0i$vEab<hTN$lrm8;2>DL<yBCpGk
zluP|rJPr|nIL~2~{ph0}F at 7&jnyz{X*W<Y<{-Dp_9;lw0h-LzO1S1Ov3y at EpqG;df
zs_1DG3nzw8oIWvWVwfR}Y==mi`#Q(k>K^>S69uuRAARt@;&JUi_gzA(Z0N)C*iVvU
z{5Vu)j?ryKkJ0nxzR=7PMYLn|S~+%Y&c@%NcH at TRx7G{gJH&Zlxo)u`%pUX#;A0Od
z+f+x4hsj<X4Ti~0DAAM<4gW&09+&V!`6HDeHYm9v!7FtkxV3;!v(~ej>P#RzedpcQ
z_vZN-xl$zbtBRp`lv_VvQUh6Qj(LUmF24KsHi45R6r)#N>k7XLhf-i4Djwsv9E+$>
zXHRMTH=ga)n4LYQaRYT`1Lj7?rq?fkW4jQI*Q1_<gAbl>IoxNrLWoYsyNQSvIJM=Y
zKap&cTO4(ZlC7r0uKgQ!?e`MApGgl(xBcZ5@)j=t2~uG{pNak)eH2M6p_yQ2)SmO~
z8BgF4MGg1xS8zxdyzg;xBq0tK;wkrW=$a~w$Zu7M@)nr8AC9>gj<;!&5Q}<w$Rcyr
zP%Kfs%j at U-=pr~_zz=hx9ZOz0S^JE3VM^_cm}E5C&C79&6_Bl=JZEBgO0184KrgT2
z7GyWCjI8%K(nH-T!rVrcY{#W$HU;Zxr&t>?C-T95VL7tX21WQq$dMP?1s)<Y+HNX!
z;jLFc-BHO&VyYd`MlgFajPI0K4)_jLIgRs)X_%n&mihEmvjgm>^tv6LzCq^I3E1`_
zz25tj-BFbn at o_g5+L%fXY)d=*uW0yR0lnU0POlsMzj0!Eue;czmmI$%JBRiBvLOt8
zxcXPG2R9RRGtutz%KB-)HLmTBIyylsD-aF%A{{a1Ns-R1DIr}mhxO}kfHT-*E^9wk
z$$@2KP}xZhu<S>u5$tKmb}_P(0#Rs at xoi$g_&R$`56uu(k<2nrPxcN<FUn7c at o}`|
zU@|H=6UG8|mI=#{4|q46XdB$|(PiaaIdL&ZC$FT-nCcH3ra!LU{=(2~XKWmOb4aq$
zOK`U9%oS>f4s#7ero59wCuMdbg%J*wKGbVQJCt~XTedf*u=m%$@Ggm8Oy9p?akq-B
zttT4Rejd@?O8ue3CPi-(`klK|TIBukes5)$|L=k>@VCeJ;KL*I2CSLhMx-s+TYe~X
z(Ss!q7kj7{;I`l1_Z)Eg)4QDH)q&;xI4yOxZAoQU?>lNqF*X5POH~(RZlcuIc`uKT
zfj?{V3{)54*`)PGCMZ+}8B;Yo-GVs|lzSX0nrP=FZtk8T6j6_hF^%1ACq9}(H$F6P
zeF>jXYf3O>SX at L)EgBBAjvBRHOY^Lf1t<kLe(k{9`ba%aLp^3)^;T4n_3W54U;F0T
zj at Em*Ri}S at y3O2EFDS~T6cb=JR7ff2FO3-4WD00<_Ymt5h0DOu7jN}Q?MJG9<=f%3
zs`qKLM$($AsN<#BSi53>drjvLC!?A$T0!IvwsH=2rxbIcr#}xXrUpwf4-yS*<pqQ{
zfV2K?9G2CDk8=KD7j0yn3C;vq*rS}r at _mD0P?`hEHE^gG>7tGjATQl at X06&iZB at B=
zq`Vx@(l55m(&Kh!ybLRL7HQvTl7&+*KF}&>d?{nrpW*JGlHZ*I#YFDhnuPJgD{H1T
zdTUKGa8#9wd{tJm01dAi>{w#77@=0-dFsb9%+1TXbx+rjU4}>%C?Zr=IPSFy$e-$;
zk4JV)C3doDs%}^=iL&2>d5n|SAzxCRm3(1A1e}Pj<+|2&9ZvWz{BTM^%_tsPqG7gx
zwxi)a)2WP2m^&l2HS+8Zs%#S`wK%rVm--Q=S)h}7FE(LGQ|FkDSZAcJgOE8ia?>^T
zmr;@we1dY8lcN_O*p0@#LVMj5d8#jr{F=s)MM-(oN9C9&Gqr!bHXCACA$7PM^Pr=i
zrLLD_JSH5VwJQwsyKAXG$}u;(p#|%rxSO#cx}gh(6q_+0(tc`<TYt7LYLh at 1u!+ZK
zX;N~WI({~ZQ%q!lPRd*+ev<al!=?O;pWgS at 5OOyz2NP!}aGa+vF7D3)8D~E;G6wJB
zV|-w~iscCePae at 0;G94>WB9><I><BW1b$)yQccb4ov++E87F2XSOJ)!CT=SAb~6?O
z<rMiAY$j_C2lm50t&Q>!)vyI~u}^;>D~&4Fj`DH_v}05>^SlrB(-zE$-r>wXPW`?G
z;|I4EJADnwE8x3vCki!p|G-h}%J&Y2kr%9r at 3ILa67QAGfYVn4@+HBXD#JYNl6on9
zQQvwhv;q^4DmdWQfM|QkPB)Lb$JF`?EE;=GU97-7-BUGIIjlxX#QA$bn_a0Z#D{K}
zS7P&xQL9pkIeCS})Tpi4LUiJ`aXYnUD>gkL898XtB;%f|*R{WSiO<>9JeKS#cik`@
zA#PmmceNr5NXdYPJnAt#n`8mV-)#Jor%m1-?%!!PK?OWa4jyeAcmcUSU9$6|Hx#{c
zWMKU&u at DvtrF7!7ZZ~R8CFVt!E9)bux=L)S-E4Gr51IIq=%pT--2+DIaV6$MYkWYB
z+J*^)vyn4k)Eoc9PuOODLd9;wCXo{0Xkdh&go43w%_f|oTz=cck}4S^j?ueQ`AYb=
zL$Ff at wK2CihA`w41?{xO at Iohlaz<E!B*xEvF&pBmPV+wR*%ando#_3*WP9$qg0p7!
z+rp7fSU8!@L>8b%_Npo4Hf#cen3I`bOpU9;#?f|-rc$dgG3l~h!CAWyt&7M#j=C9Q
z&=SZ{ux*i`qvcKO1*c6A143WA)5Fyt(v#G=$RW>qF!GNQ?kE-#O`)a<BCA+l{F+hx
zk53SQjA?)4v{zVW4Rw at Mf}T<MZmtlOG3_?w+Uq0{AZY#f1D=`+KI!;RZ4qUFA3dG$
ze9a-GF~-gOPLG at +3!8*GYo6Tn;YiQ0+JEpm2J((H5=WOakf-N8bJ~07VF;zfz!2Ns
z8+*hY&VQ2QWb9NBOVXi4Q;X8b|4NKQ=km&D%Q5qZ+-f99%c2t?q*p;Cmzpb4AINd)
z%o(Y`95<C8Z-_%2s<H}|$pAxzu&(cs%!nve=93>fvXScV*4KeHR_!=bDaLkestlri
zMyhFWkRw+GSTj59Ljm3WM`ybB4f;2h8_>pC$*Ny1Yp at zQ6oN3|N}cYR{phbesKV`#
zc@{)Ejk}bb!R*s#II5I5&2)8z(mM7pH`~BmIeTQ6milo!<~2r|xjW3ve&l$JK*8yQ
zZ0OlHlw}Pz&L{i;pN&{?h at FX{51*k4*#Sr91l0N6CB^8B?xkdEP7UVcd}0>C3{1os
z(oD-dbTBP8N{+UdL}+=Ls;j}AebCPE(ADG;b$<7nl_!R`U}o`ck=^36j?zo-@$^2-
zJ at M6l`okXf2gK~K3}@IM$d#XUO$Jl)q;&t$X^?5(8X&qE)HppRBsVLF#a8CyO4SWM
z55?i!CFr<PV1O2 at u7>d>7|&q`S?@IC at BfKoydCF$8J(bBcMaCJ!Bigu*7yAtPVqCO
z0X$WbqjO)qPwO5zaZQ>EY%;_lAB6CO-(TUvmpO79bR5N+QATK(J4T%m+m|5+qK#J-
z9R1Clalhr5&eM2$>SY1n6>`g*H?WKIi*tqdJlV%o)G$j7g*cJCLKwLL(8x+7d$`eZ
zrvTe>$#%I#6B}4mGGsA+Dqc=-XHt|bm55TTrhECUugPIG^x_keCdXkmuAo-1%wBiY
zwI_<F0l4$NYCNh;##ZstErY5+HWZn>C)Si?m_(*+wOB+p{J$1)IB%)x|6arXs8A4@
z*6{aU%N+Y^a>l{92*%SZwuj&- at 4JN^Evj1(`Dzq|{yskDzsm9cryS3aj?kn#m<pz_
z$u<gv%i=tnIr7-X71TNkbB%{W at l&6$qiDYia-a_+#j+rwZIKS`cR`M_O8p{jmC3=M
z*Dy+dTTd(xFw4No$7n+p{`+mnN?UZYIQGLD>KTPOlYPzX05fGjtd(p+HE~yI?wL<c
zUugr~0ht`rN$47P?V`7AbP_t;10iOl$8No5^ncjN3 at h`IDweI$MWaB9R(ERk9q;oA
z&&7vcx*Ng}7qPZ8zF(I_Yz at 8_v_tASfPSU_g&|A>ryy&a^|%T1{baS&?j0CG#?gry
zp-Na%a3J_BdNVPTCYRP37nzUZ$ZAffO*N&Prke>FH86i|;)Q#~S$dgWRuheGN{4mC
z^CqD>nn&t5?R2gZ-9KHgH(LG^3%RLg+rX9A<zPtBPDyuSfpn<3E~M7&#3qlXqprkh
zaT92 at axMrOT-V-9o!yCfkz<dcnpJAtG9{OzL*YxE8JxcL2`1SiK!7^yEG^O-n0R$$
zu2yf#<B-A0C(V2u%9^DyDSX;+J>1)Ov95{^GwZ$G<=QoJP|Byqg(c;g+3@;w)53vh
z2FdjY^>f>MnZQV6aB(6xwb353I+|o8<9s7SqOZmSC;5ZErNa|P)_1k7aT~wBxDsvN
zW^=Co+f}GJxeBt!T6xw6x6$Z>m%BFna;iW#9gSE at E3H_$u8c^$vDBmcinoWfs at XGP
zNsB&lax9P~P7WjF3K7WPA at o&VFgl`sPq_+;H7(vgZ*#gMg8mv7&&uMQ(7T;o=buUR
z0vu7Vb<2idDB=^$1Bd^4C$;O7m(<Kp;Mni%+HgC_!TbYfR}AyWfBDk{N$u~(Z!?as
z>$&Y1lfdU+^fif+qY^s~QHdNHaVa5zNF@%=+<AAy?GtkX at Be3Z6mitK-C-z?stMSc
z+5z*Z^uW>F%MWgwb~9hJy!6 at uM*EDbrOoXLFe_I`Pipv$dix1B#%pjK`WZ9+pE!Ef
zwf=g`%gQIHp~KT^sf;tUo(ismdN`7SQuHyQ>iOEGmpbHtSkV4vpBhdHUc-5dt3m$5
zf6Sb(6-3U?|CvqAX>s<WE5=+&)(x1En5DQ<$NmwrR2(gKSZn0K&G+3UYaL>(X1yHd
zBg5mo%s7{x!O=-LQ2&`F^x~`G?6xL{b#tXQR%7wj7m2dyM9|7WlYpY=e>pQb_a+Jh
zMM(V{nky7BHxGm`t+zmtcaLGA^%ls(Tg!;n$c<kskNMHiDF%o>wwe=Aw_2u)azCG3
zmu`~GJj|k*IB!gh{pcS0J%B_rGmol|=kA6K{t%SF)b&`fm+^}nR>2qexFkDQtWwv^
zzIo=~E4&VC#fTT%?Gk^Ml>8&E{DQh!kInFf^JwrR5H5j|Bf82oH$vvC>c(x#=2wFS
zOL4|&r+3F!L5AwPoQiG0T!Maula}qF!Qasge)jRmYzrAMPe4F+zxtmtS1ZHfNW$|k
zPu5>Qf0^3dfDt|c&bh*294d|xm`i{5LA=&{?&th3u0ihIa^-FX^$g~g1voqLMsmac
zG!5eF=FjD(1)BW#@mNzl6`dGL!pbwu1J=sexQUWCViRnj+;lYDY}TUwbE>Ejiy3Xd
zDTQzA?TlNEs7M8WQ@=Js!MxhZr=7xgW6lJU7zTYF{02#%C)sRtM5e4z_s8T09YTf#
zsfgWJkOJn?BYc<gGC<*5^T_vajLJ~$ata#etF=-3^IoV|Dj5kPIDwib(NsbkZSSy!
zZg=&?p*VI}Et*7amVKwEuI$G6Q~usAaxC~+8;xXCw4x?HDm*+~gGt;|zd);RBFB at b
zb69_0SQDgPOb^Q+qMY_%uIQ-Oz6?sX2Xh|PiL5Qv^G#NIDu1AqdoXVjS;RTxPxK|r
zIGVs+%+tH3oEx!Qj&2IyKlN6hdt--BRFjs7I)xD?R~p6XSWn7Wr$0`~nU!xL(^IVn
zVr_sxqHpwGTH!($L!Mm0m4oi~8JG{R!6vv-ScVSQ1vkFkX<IDR(V*lk-W}i!^YNyT
zm~Cl$^q*Q)7*1!~`fjfO_-SO!-3FSc9)y~&!|W?NyzB4ZdukOxm1jQ5+xY_(wHI at d
zzv5Twst0^}%N$$Y#27g2tDf;&NQ#Z;z8)Z)k%g-X*S1FO!5mF>K|XV-Mq=H@&0!fU
zytp=5PBlq?eUJ4&HiS{f_F at yT<J6tK*k;}~p<jGwG;{YMqXqIaxBW+}Vr4V+(LT&G
zfqzNRXn%>fV|-v0Zkf)`pqg^%2`ZV98F&EqirOfn=bkhQec~Ee|7?7v&gi_dPw1*l
z2(m#HCiS5TgV}R3a^_Gk_F)rgR<#tdA9G~(7{V$pL^E$>QepeCDCe~3u<1O4?y9Ou
z@>8!kxFG-A-+mU=(^f?<-8`AvzaJYv)*Ip?{VC6fu&y^B=FLA~rh&p<s(U|VkUh6x
zr>!z~+O%7^Cpv!}UoSj%(@D1^t0^|nC&7hb?;q!p6etH3HFDR#HS=hJlYw>A7Z^LJ
zuo}$VZgxmNRK-RI+9u at d0mo}QAUQQ!lI2NUUmgJK|4itk*(CQ_2?t1>j8 at 9_&ompp
zB^hn~%I-o+cK{<Cq?zwzLr{0CyZ{mCg`9X&L8pc67@)p6fQ at xJd-dbL<iOVZ?3IsK
z%dyi=*P1_mA!kB(mU?jjb0jU70Uj4v+Y4;BUgF7VmFBo*HO~}h4aY~>o8!z%%M7OK
zW;Gt|hRi$5F;hGhw>au;m>=f}nqXc>bos0DsSK!$@Lk`?yOtC1owHd%04HJC6@{0?
zWyub}h_CsD><|oln8VurFzh#+jw<#X4xfVI3B#HOs?=>bKPo$EIE+3Z8ad5E{eBP&
zC0n)>EJ|_|IBYJKddw(RFMp_$8_MvMR9q0*i8J_W<<vy0u2M}6a_J%R(C`lpL|(w@
zjgP9q)dV?6>MO&~1kZk<THauj6fhEYp(XWeS(iG&Bu%~-p`l{&%TCy%n9d*F-a5K>
zU-${o5?>?tKW+Fv^0V$Wxt;!CZFpy7(9*cT(xc at yb6dSQq<)uG!TlYUs$$&ZOC^x?
ztJ3889e|@b=;cf*yOpXcT)Kkm at 3ywEEMs4mAx2dNq#q`S(gL}_OJD<<DrQ4HG%!vQ
z^o$cU)OP<3N<;57rCuSYpzPE?@!WTiXe1^Z!-IE^TS6=<q(q0YWe)Z}c=xBvunPFg
zKl#baH9VYAx#Qk7>hr at GpL=c2l0P)Humfw6ZEk5BGB8QqJ&Z-#Y?N5pF^K)-whTuD
zK}|e at Z6@P|(=^vbVD0w<a`z35$E-cfNUiP#vTk>w&rq?GC2E7&=DP27v#E4 at P#^Z}
z3i}>;Ig*Rp-~RXUh^pB=1<738G7{h(K~-3k#{rsa;C`l8))4O4tUreL&(MX%w|F1W
zI1KnHTV+A720mXf*MPIgqq6R~fp(Z=?qi&Fbh;@lp8Lc5aL`=c`><%P=lk%axuqyP
zFh|pYyH(Qt9F)hreb-h2Tg at Yaso4%;CWNCQbS9W83c`gD20|DD;Ry%_A)E?GTTL?z
zsA0lG2-iYb2jMmd(@kDDY&8Z5UqiSU!hQ(vBCi|}4mq*ah1%6ic}DCk(K at J_0@LQh
zcTEr$LWqtf{tDqM2+u-z62b)#=0oTL;cN(nBn;ew0SSbsAk>&DUGu)u>oDyee3t;>
zK=7OV6<XN`t6{jY(JqE3Czj}^Sf at Z5RIkwHK{!G3gNWHb$q<eV!o#>5gnS6cL1+h|
z7le)wPK1z)9FnWZRNNT`Ccy+Agdzw95C%bL58-49I^p-hfZ{0e`Ap?f7#`cbUQ_H1
zG<t7b9sYS(_ctQuz1LO;F9voe+c9W*WgcwY2H4;S5MmH6f=~<LeFy=B84#X_a36%>
zKuBt)bAYLf-C at FaK&WXMj_-x>Fc_B&$K7Cj4~%adjz2P;{$#3MK2LyuugcB<>l3Sd
z0Bpp8?pb~`JDhex`K`CFpvuUJ<w0DyA+-yhEF9mJV3-#yf*d+4K0ura!m@)`;}%MP
z_<SV?)_&>O@>&Jax81x_bnj2Aax_UJtDlGp(3H{si6IPKRC$PYa-g31koxNwHkN!_
zp#XiICW5h+*qOP$y~7obnd?j2{&rRf%YPCv)gK>^=&S(j!!;<sD;)g>J2Xr6>4#^j
zH-_+k#x?s4;g9^B^%^BU4oQ>se<}zS>~z%)e8SPG+8j-*oE{j6ldjT3J=<Zx^B2C1
z-?)GIAsF`l#Yx5&9_u+2%9HUmFP4F8*S9Qr%Usj#CDYEgT(Y?MTF34LCLjFrtK06x
zUp|19ZpO!5+i_s%pWMT`CWjSt%9}{>9AA>iAqY)}+(%LzN<+(h5VFk1mPpvLjdHv{
zTq`T^Tz}5GZauJlDt&H}OYei457XLvf81}{TZeilttRn%)#ZOK)h(<QYSG1)r^<H{
zWb&fENRGpBki at PU<a{pFg}G*KMGogw&R|021t$v=OEOugxgti_llD!!;7uLYHCT?k
zkSh<YLf64ehX>)%1a5*uQ}v&rX=Qx1bJ&r=nd5NyKFGFYuFGI*ZprCSl?%k}_f(fX
zH)!3KOn37jc`&^x+v-sgSBut%)XlJ?DBPW-U^{PdxG7m~Tj%w{JhLZFotJl9O4hJ&
z9v8PAnZuBoS=5nXPmn!@0YXzTysk7?AynzD3G#Z9GigBn3NuVAA{pthGs at j`8AF_m
zE5gN-N_3u*9Z3hi2U(7>w8L}KG8i2=<D#23rp`80*%Gq%r=ZFHv^BZAS9|KUZpy|G
z+>yb;_`F;jiGEaYg~*?__7qgUw%gHPM(<uN=dlP!Yzylx at i07Vl@ItFSAJLE$|CVZ
zy$mFB<wV7l|42utD{`EE${+pZz7Mx7x}0j&@_r&n^L=DLHO{NwbGU<TOdAu^|8 at pU
zwYwo=s0w4IPndbofOC!C5x4q=HvMc=?E*|FBh#7Vz|q(#rgira6%V4;1;EwlN#N1H
z1VpMAffRLyAxyOzAkKkDeWkTP!>&;PzjXe$myxH5$W+`WQjN1C6LCh=KCK^={_^b7
z-0CY6(WSwaKf!c%w?Q~nveWFVcCch%(nz>)- at qiaV`jj=?LqZQ?7scmp6C at nBez$*
zLm5I|4opHsZQ1W#fhtnIlmqmEi8UKzD-%b;Me9%);oXc;$fvCwm)5ncKo!myh5k}b
zz;tx at M;zFRTR?e~0iku29%BXe;g%W)8K-$!`<ns3(95RX1Penv*%~=|Q_O_jCZ$Pe
z6?U-ly4fs`IG|T7ses+|3CD3wR?iI88l0_)!Wl}u{oN+MNuX@&_Tbx?h({l9dFKS$
zXI_sQs+w4%oj)$A{hcnNz4u}R#Hmcv?mJ6D&vE+o+<<TSqrvITIPrVsg))-JPXYMj
zPkw$;|HZW5nB!!J(HI?d1Cgo}I8L1-;{-f}Jg89XK!`dEWT`s+#eKENS2gfcrBs6#
z^N>YRk*y|KB-EscCiQ2fEluBM?%Ba1*!56DzVoSQ(!x&fV&zMm at t>Y0M<S?e-!f;|
zp-MyD?ExH{{~4N-J>HxCzlH{_4YFnCp*el$gJZ~)$MF!e&!^n$|1U#B{?FJ5JFD?j
zF at IEjg)RfF)CCz7oLAdS?u?2w`~goh21h&oIL5WLHFEpmtN<CK+Y(6ovq3yEVi8*R
zPGhDF0Ky(bH>+;rqQj9cq4^JRPNV at RV*BK7Z#NsJ=l_Ls>>c`ORK!=9D;aKdnf66G
z+q>S*c#nH?sL#54W!4e1hwp$USG#0AZh;oy%TF2^&2}(+9d@~RX3)E(sym3mpyR;k
zQs_s%?&UsPTwGdDeAxIfb%!D$mv$m3ekV=B&0!uD%7J`QOio2D3qx*vr&;EV>pHCv
z<qjIs$?ji;-Y>%sM<LBA=5Y4>k%~_5dRI43-^hP{DwfuI)w)a^Zoe3v&Y7praZ0O?
zrNMY+W%NXVe5gvPoN;OO3egg}Asr!DA(LnuvcrYQEZ&mC+h3 at sM6Igl@4JtjOU?Kh
zw~^R|j+67VlcUaEcMMGPng6LuDdVV`c8q!%uASb$Oq;z`*1d|-p1^qif0Yp{YjKPI
zSZ$1^C6trqgYPgf$u`Y(sa=8RuCqy;@t6kc|6XBWrlzGD>{|m1ww=J-$$;D%ISvJc
zNVI#pgio|MUAcXnGc`z+Un85=UjV{2dv>y1)<OloW0{A9?nIX`jF_Z28ej6N&39!@
z86ozx6MVO1cfmJVAgP}Q at -$i_^Q<W2w~{nr5pO+?Nf+;kOj_-Z#p-cS2?Gn#+^hyZ
z^m8rNjC71Sjt!0u6)QNZp=`@*h15q)PzP<j;9hp+F6~lltNRfXxhqEA+p%rr!6$z7
z2iy8uT_$@RDH7Q^iO(j<#(^v!Gb->Nhk4GKFl$!WTv^m$(4J=!uF*{yU|-b35z#j_
zcIRj=$+3L`dz}QA)A!jxc*$rv806ahhylaaMg}ZHcDthpOU~X0p=L8qcjrNPNsjyQ
zU4QRi5;~7~;$`<yO*&I;q0Lk$X_xc_rn7sX4%Ad at w3OKF#3Wl_k7jB!D>`<vb7lpf
zSjt~?<>m6URZU#n1`bfvCP6iL88C=PHCphKYHYDkNC;{xWWAO{AG%F)fbvjsrh}f8
z?7Of<*EHJ;`=|!0z~|9R4sf`-3`fort!)Iv0?Gx8FMhid*&lQ6<TGs#Y2Goo0Gj|=
zfq213JN@#_qT2d%!!pwaF;Mp!lA+`gk>E+xA&KMiUAH!5OfB=YaEmpRnlF(84(IlT
zA4=v^gizR*vmg1E%qbRb4ZHBe*10 at llIHeDcPjZ$?^+9>Jg8oe$=78kCp9rKsB$v%
z!?j`Qo<%yj03(Fc<8{g&8KJ3?gOo%Zi*W{o<`FK0VZ5Mt*Kr!M7+;f)X)0XYUWV&p
zFD^EOBPK|)X5@^8UCdcf<7%tvgoPSqK+|x>2n*Vzgh9r1K3W&4-zZ%Q5w{2SgwjP0
zx_8JxW8c$Lb75nxb}Za7TrtP?(7CJ0sW=@OOmph~p*;BCPrtdin6naHM1HMZsI at N6
z9+Tj;ujKjG(`^lbA%)ipy{OS&W4_7ouOf1jy at 11$LuL7yKoR%C3oNKnaMH<$+PGJT
zbd&cH5i@$gU{-$wSmF;92^03}B0B*cEhMhY=QvE(i|DFa5$E*-(^(X&?q3`E)V8lN
z;rQb2K(>{XH_8gKBiwWb=CDu-RS8>7M<^Xl;7G2!`=yB<?tBgD;o6Xq_IL(Z*q>D^
zzcxF2%(W1<B`j~Lf;x=JEi5wNyhx6hKQtMb+giR at o8g1{WsQrklI}$;;AgZ1^1vu`
z!_jd^BFLo at IQjn;asCR|&GPRo-ygH=ux?5iclQ0>+BuSXkreqnoK{AMGgU4F3iD)%
z$xYY8!ReY!=@{zB<qQ$f)Gx!Wj%dLUqk$FMVHSx#xPiM@>Wq`&M>%6^gsy?j_^34Q
z*iXHiIW$owZ9$~|JR$ihh?b?DiKCC&fD5-D{9L<E(~3Tdv*NAV4w*iF8;bL-bg7VM
zU!qASt8wGk_=GVW)qQlI%iw|JDZ|Wf1!P-!W{;xj>(f`3Per}O=RH+=Ow0{HVWD at F
z-hx3i0W9j2jDdQHHP^_9qP{ovR?*kOGDI_lFua#K-Lm`?)Ek~=Tl(KS)L=3q_tcDv
zn|-^(m1O%&dV(j=ea&}x(WiG|+CDvZ6*BLzn8OQ`B~^s5vG35yRtfu9P^rH?G9n}x
zOI$GxC**VUFG83q_mO5+$3(*6iV;9U&P&1!PMIfX0qx71ielLkJ=a<!biXcoL_}OZ
z4erG7AU9a>NH)tu`!H%F&6av`2D3_0n7CqHM3?>OSyRkhF&YoZZ;?5w{b_v++*2G5
z<R-e#0(F&7pcG!(Xq9*)jPS|;3gx$E+E0IIwcTqK$dEQE2(`Z<nVR_xmMl`a8<Jrz
zdG}3ouA!$^d;eKV^XLDRy8aFJ0ai at 0&tm-8)^i^=#&`gIKyO(d6znb5tkteTO(A)>
zXXO(aQ&TJBYIci&s+46qTQ%^9)u(~O`Op<xk|%<H(37szP#>Pf9C)xu|8hm9>YG at k
zC(w|et*4IEuCtgo89b>xF;xx<in|-pN!P(`XMU?MsFk6ev_H>xr<hK^R{3&DAJ)pm
zJUc=64^E7zCM{D^Qw<KS>rpJYVCH3~b_=&!^RlNvvaf{`I5%p$)&|NtY>6I at A6Jem
z*FgE0fsPB*6lgk7xEffU5|)fYgIr*h?z+4;XFTzQN^HhHA~l<q0iPOlcHAE1TPzdD
zxSX|?FU^iP6I{8ejtI)IdGd5aQvGynPR7ER+-ezJRpT_F{a#<!kJ~3=0h#;rUhD`q
z{yo3Fw_KV%W{aOW?K)Ar at MB^HkrDtbZn_=Lzv+5dwYmvd&I+=q$d-Z3f|LxVY6>!<
z at s4aj(%X*`8Ml5%=Cg~gwzX2bHOz&K%2LYn+NOfle49%*t+Ay%4o7G6XN6g*<NyKV
z+QxX#Yq}WWpv9$|Ut0z80o`gDWU{p`^rt+_2^HLG+`*oBw(@2Oi}^&l(~&xBLGp5G
zF%H%E7;%WjwK?GLK>p`OiJs*685p!<Gq200sq=S#{Cg9WdHcXL)gcy<#o*Jjbl=m<
z)hQeemoxcPr;$!prEvN)PA;k#(`-8u)^J#USxvFTmz4d%w{!dML~`*dF=ufb<vlqO
zTT(_;(xIr4&u2glB1$=dV5(Y0bWJBj8qe-9O{Dp5t#AE<(Zw*sj9>@&Vp4ZlB$Qv#
zl>pTNg08s<6)*AA1u31lZI4*QCfw+URRQd2QIrKMp9{t*Cs8HmFc16?6$u5-`VQ*L
zbC}qrq66j}M?WmEY1hruv+-?<p2fs|l|Vp(@OgEFqP1Y-IC43h`FI%S6%J-9Il>84
zNDIdQXKIuwbx8~6N4CZt-PwK3h`r3*o%dky%(JLd7L%Mi<;2RGvz9{MBr5D(X>m*l
z`t3q)sd{IGhrVdq<u34Jj6jaZ)XCxODF=yDZA;r3 at x?o`aU1#UX2*i!^Ob=CxBzw8
zlBRVu9t>{@KOR<bQDP0}uN6s6Eb!cJ8C_E4l#5-uh1;wV3iWrU#_vKGYbA_AuI_;@
zOm}~0L>g3(N*<nCIBSya#!v=_Slbc8vR`XktVurWTyaBU>D<ZTt4`uJVZur8%NMCn
zExdOj0lXGLj^S=w6wip)*?Pv8%+sIcQrhzvkAy9R*d#%;n420hs at 8XgzQFVOmIt4l
zxs%Mr9UvDFDC;wr62qBiks<gLD8R5wJ~Tv3t1&W1^1u-x9O((1RQI>DCHh?7OJhbk
zLGoIW1Qqh!TT%eW6pKxTV_cg6R#lJ!UMEgNqvccMLXiI%E<0qUo}a%F((MH=T=3+O
z_PGOcRRg+FBao%Oie!SL+6>thRP|QtGa!V>g8 at g?2H-1@!I at wQ3^!*uYSuz1$#Co^
zbr~uT;GrhKx{^7QirVS`Go6Sp$(p>B5p&`!KXHQnw7t^I4taIfxsrIswJo+e?~K+H
z(A2a7KyJfFI_c?MWaY}*Y|HV at AN|o?2UP>8Yb<$SNT;rUhq;l#y|}>Jc94JnjdXGC
z$JUPP at pz9(C0R`z*1+W-$`L2~p;A~>zE~&QWBjOH=@Nn$MBb@`T#!KO$r286Ut{AU
zn5Vx at TRBF-$^T7`Ih9+NRiyAo-MRBYSw-z6AkGByyB(K_5^S_5q?x)E<=+oR!m=}$
za9r>2A%im7q>ISX`)9Vl3e1z^wogfeM&V~8&8%2FmqJro#e&vT6C0y8YFT3#@moZr
zi3mG6t<Ig-RocHOYE`QDoIG;R&Z=vL^UTLoGGwRB7r&tldafF*zhgEFk-u(u#itGJ
zOtSE$rb7}k4p}JA!1LQ!rmc^zx|ZK6ZkSI>@bsH-iJiHk{t8%8gSnztJaa{_zWDEo
z1}A6Wuf8zX!)w}rHdP}~J%LbRkIM}^Fc4_F`C at i=eqstBVtD>EZ?sK(A%WzWF5kbD
zaSAIMEo0LC*l)benMNvz%cY%!l}s{K;MJWB=PJ4~PZZGq%kBkh9IQ)~9Fen%5>9Av
zoK!kDUFaLB0+vd}3g7qdnuHS)0*g*8z}~;-)<x`|XMT?^_n(4=ec!(v17D`2moQ8q
z&ho3owsdZ!h^>z9PByJA_lx`t_6|l>{aKqHt_Wm!#&5cq1slx+L}UW+>aI!RsyhEW
zU6qQv!gr$S<G_|nR0A_o{~E;H^<yZ>2i~}<O5~^ds}b|+1N8SVOzASZFvQl}uoNIx
zUVw3D+tT4)n4-*^2<Aqz=_UW}PWH+MGG!j>Qkh8I^m*hD6KppspNQD13&PNXmm+8N
z__T~Zt}iXx({>{o2BjZNo0PVc?CV@%Q;}jS2vnb~0w?sow3z+7i=;e}Pe45fSFcQ4
z+DFNJ`_=TMg_^We6}5=mWj^YXDB1kgX{YA1!Ef_}IIg6+a%+(?EYbV_;q1-BnmW42
z at yR8Dn-Ji#1OfsHOIQ>XSrjQDVG9=!Sp)<uFA-!hO5F$+YfRLzxFCYW3ks-pZMCg!
zMO$A{+iC?xQ7Z1Kw$-Aci=rSR;CCiL>*xI}zvub=ai6(!&MaqU&di)M%Ng67Z1<Gc
zAZKaKX41~vhBe?#|Ewo@$_9<nDVFEMLdJI>u}M}YJN9<o1ol at txZl5$l{v9xB4;|<
zhpn#1X+Z<PoZ_CRIV;s-$1m#e;ZVEh^2N^dZ*QI$Mp{{H_DQCp6enq&SHKl}dq1xg
zGM<aa?;y2I$MXql#m(zIAmJs>Oq6EU&z0Lfg9tOfNGKj#e#igmA@*@>@j-R|QBvqw
zIb<d59^yEhi`kTQ!{pyGQ3^LdHJJ}(cdw(=%O7ckvYzyOV5$yBl&oa_CnY{?*j99T
z?f6lcbC8oWU{xmXG_LslNVL8U4)DVM;pT`|$jyOoxEWT(`-XN)HuQw=VEj)EJs~TY
zy-~i#ldhE4hT;+`#qv!e%kseLpw{(9D3NpyyRy^-a#_zmUFL4n{b3kpF~UR6rI!{W
z&PAC3 at VwX0M(cpMcbp4hMyO57migJ}+uBa-t)LbF$58^8Umaov5x5e2KXnNh&{=u~
z*}_K54rPA}h4lYSAW<;RnLU7j{gW;qFqHZ(7u=2>09NfcO at _X;|L^gFko-9SY~cvU
zKw;j85=_3v7_)P-SQne-jfYQEf=z~gW*9+aK5!Z}R4uG_UKq^KUAFwBS at c!l`aktO
zlJX0b|3u*P>}I?FR~*hy6eN~sc6tVjkRJJ^r{DBi=srbmGAP?RCV6RN_e7y=h6#KP
zscwA at FyZ3$50)R1^qQfPcygf%Vk3X{Pls- at Q;QwqVFm)&wuPuq!USO-9GrI~nrx~A
zAAA<d&OB=g)<Xe9Uw}$pn8zG2Q#}t>{T!T;p1fFH_ORk~Y+4&_z9z{u_U;f(NsbQ)
zirUHe+YVm{l7!{FFjCKeuuZFnZ+ff%8L(s9XlwNUQkf5AD#(zEjwG{fd1I0rHdEGR
zCP0F}LnZd~6G7rjO%459F`(q!;8?74%ZJVQUu#)Om;V5%ECfs5;Z$OkH{{mvw_Hw_
z|MCx)L*@jK0ZZO;c_H{vwp?tJV`&&>A#tl at Nq+PfD|UsCkJC2tW}YupSID=1t==EA
z%uYED*r^A^y$x_r?~hHln_}>{>HP_B at uPbGthfHtdVl;||7++kRLy)_fJR<e_r2Cz
z-FM`-au^mhi16efuurC3ZkY12&EeRo2dehU#$nB at x3GP0U`}CgVBqK*m_qOt)(T<z
z8strz at +K|}cM_KzPcb%hUw(TfBnrY?We<5_%5mTjqMUb*=PgUp2R0qAY9kbQcp>WJ
z`h7#aIw@~^vnXY0zk*MI8|WE<JZ-9J!Z=U(I4~V4)YaImA=I7!c4nhN&1BzL?fM>N
zJ-YXld#mOG*yBTacG6swW&5l)UBuQt6;>D6MmM7UCt^xY`2x_&%4-+pZCZ8_3x68h
z<8AC%nr(cb)^cd4&Gpe?k#4c<%VCS at HzJIuf8`mFdNj}VY`N*d>g$E9-#;@|2{a(M
zy0ws1aKKb8vl=q3yX|wvy_N2!ZXIrhIDa(4-q8>sXP2o`ZF&~~*RHM${PP7K9ZQPZ
zS0|oUdu>_-X3fXCw>#4t^6mWS%%*a2_{1|`aI$a~g#Y0F$=YC3f!pH)Zp3qI&9H?r
zXF4P2ni)eF=)+iaZ2}`Xm9!TI8otcb`DRMn56x)QKQLk73QQQtgrD+V;Q#+Gj9Q3&
zM16#rQ{JpOb^_LXyQwUx-TxJ55zA`ZG$Vy_n*p%MZU)Q3E{Dak;~VAJx)}v*V;L=m
zxP)yXMhG8eD>u!w{m(=a&9n5dU~}0Vg?Y*KNR#yI(IyD at -cdss%cC62|BG;C()9w9
z{Od_3h1XL|qOUJ8iMc+VNY_W6Xz4c|=)I$p>9TIFwM6s1162I<D?-c}Lu?8415|kr
zy3K{E*z8s}qfVmov4|>k=(N@*2%#GMVqYk>w`uE>o%;-YGd8mFH^es>2hfsi7{H`Q
z?nzG!3gM#9u_uHZ+=KoX(=&RKfp#ieb$q=axbpbcc5()#yG--vl0`Z5Ww}yZK_r17
zjk&FCvbl5O`9g{c?4o%odo??p`{PtG$k5~JjU+%@#)I^}s6#;!8~Y<wQT at 59d24^~
zi;B=#Rs0f}MYa|VF at zkwRVJzKoIZSvDDTqyXn#N<CTS4HAEc|o`=xzR5Edik)Pb>W
zBwrCl(t0%;*?O2w9T?41i)CSczM;DuBB~U1B)uki5eq%PAwP?odCu&9M%F=pE%cwq
z&HR^x=w6x7i^8wa9F^WC+Q_C)*NY{)RqT`e?pN!Lbdj=dbiW7I at ->p*b at Qtci$c-g
z!u2GxipRGYj3E{)uHe3CF(E7-H|u|2CE at v5Rfuxkml#w#S5Q2CE_bem^bR|ax7j}u
zDAC#Q!#|SV=pPl~aODt|e(rqpiXxq|6VZP%5*NH#Abi%KO at __sg_={}%n32vz>=_!
z_z$;pWV->7ui+9<12b9az4+5I4&OqNL((*ywdJuy9e!%h5FM=-9WEt7!6H>g<^vMw
zCIH?&?~D8T^ZJ&cwWhyL=$7E2XI{OGzRB+VS^4^z>|ZB%Zzw-jc4V%?t`4;QNb(^}
ziinte184My4~x4Rmi~=gR05xkLu_Ha$h}w7K{Q$Kij*8T;*{nAX>3!WDPOzO<c^)^
z6jALIquaJ081I0yZ`s4&ThQSGQQpOwLJcmE?S&E^kEEq3({Xp*z67LG($ms$pS0Du
zKv)~f66J1&8Nt$B<y+*~v{Q;Jp|AmAl`q8^7KMtjV5!Oban}q_yWRHGM&xze+RT6G
zK~JxTO{XzJ*R7YV^d=hQ9IZ=mEs(+H<HxCeybtk*--l|T=b9mHWG2AP{JL)L)n<C&
zP%kXZMGJxRZ?W9{X7i&ar<51vbId_`FQHVN^dm|a=pr%!&zDN-rg4?O79N=^ycKf0
z9X3?Hr8yY(RxLm$I39#SHz|oPUxrdV at xfq}Di+n(1aUGkpz|YMzJ&g?I-p?Uz6ukP
z(Z%K8o81#l`#<WA)zz?U6f%ShY71d4$=p3GP>#U5a!2(uD1qd`x+yF7Ka9AgJ)^+*
z;G*sq%uh%h?UZgV&~uX;iY%k^JcWdmkYC3c-)1dtsu4`43sXFZMGFwill+3^V3n{I
z;%oKzO?rHt2a&!FJq`41<stuVOJENUFN;?C*62NXs&G;6a^;(Z#se07+9??G#BV&w
zDLk!~bwe4B{~Fxq9*#l;s<&#B5g}>2fzhX%X8avoYrF*c at 9okidmVCSb_;5%kiT-_
z!Kg$2y2!%WvhQjHKA!!NYH}ieV??plnHfht{0V9g^qt&J;>@d9%7w4EZf=5F?@kYz
zl;I at 2H-H%E5%J+X=N4vXiVLj?5L5!$DTKsfXF19Xytpq84pOIn(k9>f3Q at F^3yW>M
z{u*!i{=a|EHJ|_8Q_0qK^sbEWh9z5#%=&Y)J}jZo`w<KLt8EsB+|T<x*C9=S)i1oh
zFvP3J*#XXnQzzG}i#&~pC)OHj^EH}pP_p~(txuM3&_y;S*eoe6vsr>xJw>@nGFA(j
z+(t-m`cs>{UZea<=E5 at bUuG|^kJLp{Pp(1!T6rmTySB0TQBj8MGC98AakAFQr7v|S
zSGI-c!_na8hy43iMSp2JrAXz>XiDf?$!P`VHG*U!=#rn`==;CsE==WldMw{4egl90
znV;WS)33SAiAx$~-G0Ptjg%<;K%2bsQcRUBTM7n0c-t~cpHDjv-K`NUm^ME!&a{g=
z?=Ebrzk+KSD^UQ>ZeW6%rYV6~QknxR at HQMEB8SCp;hfI~7wIH-)#BjM3S2O_Kpk~R
ztdlT$aEoOrYvO0~0S1RoBjLGWZxny~^G#I(WUlh8-dyEOk5It)agr{z>0e51vZPJS
ztPud-VC3gf@>1L at BpPRorgXn*Tw$OR5 at C%tTh3TmtXEtinJEM3*L=F^<)0o0&$y1`
zCm^DspO5?n)?mq}o4)-6`mM(Cb}&5h6KI!d(L9 at _rK@KxYqcW*N67&bc+aG`{20st
zyqm#{KWDkq`cVRC8i9!rh^Z%T#u;duY1pStemg3?r;Vr)5X at q`1>nBDO42I}^>|xr
zJX8pjsnyc#D)*uJRv_}zO=U3cHQ%GOl`vsG3Ou{kjh5;HCO+6|wX`(WQ1aB>U=k_`
zb0YEWD_^v_TnAb=YLne500fOcJqenCxNLP2?1dwtkho7*;$~&}xto#svrT`%uefjm
z|2*2CG&hEP#Dbp at 8Y<TN8itH at pKF!LXkC7tR%>w2Xp=LfIb^XNDop at Zk{=bRz4`ia
z)y_~%Kmd?(M}9MZA2z;|I*E2zs*cz*PaR$msmev01L~XFWY>)D*J_R-y~ZJJG9G&W
zmB&e7k9OZZA95}FbB}zWD6az}5 at 4bDx6*-+j-Zu2RJ2u3!&$u=@8FadsrB+S67SV~
z;!s(r4o9=pg8;R-KU|fI{_iG=*opJEAKm^Ub^H2nCMO4$%uGe_2ul)ITuI_L-#%Y%
zCA4(X*J_&^ZE!wOGP<(+6&YE`df3JDEM1|JD$XW=Ud{H2HA=z4kogT;pDZgFZ!e%t
zp1*7B6M4(H-$a|7AIN37Z-KBaX!L|#sRY8`8}CA1DmCnKm|WvzX8u5RU(X}QN3q53
zH>pAStYy!q;Ec=%bs+L!C}#rWCZ%}p$5RZ3a?o78Q+RRP%nEtmlGx`bC#dPZ-$ZBO
z9<${DBZmr7^W^}b#rezUJU0fxe%--c#P7Jp#$z){et)qxe)hm5TI@{#?%g*z-cIl>
z?%k{0M$NoMOJbGfn{9$4pGKEW?Y~9iDfg0I{e`-ev*p$ey|Ux3(WN*qv&F}=tXz8%
z4KTW0RRAsUK$kCM0G^^P)Z4*Y-xIJJ<Htarj`L!hfW>HC$m5FpM?U!RjH+;b&!0TB
zF at 0tLO@7OxMr&uYwe~LU)nAJk=)9BSY?5F4G~5^F`3W*w%<rGCOA%U<X0pA7tieUy
zuh<pZWM1IL%1mF}tXI?OTIVq77e$iLeE0j^FW5)dh>HUa30c`)2Iv4_vqGnky+7>r
zZa5>ayfc at -JADVju6%pDx(&{lFnw59m{*NpiM^tJ!L&c^l9l|ROC;YT!c<)Luyk`?
zhskM~s1AJVq)pxwKelRB!|;$gXy)Nq3U-%2Nt~4C#MTH3jH4SwuDzf5KBy6hT+c#$
z?*iG`fBrvx=U?~E|HO0egopnN{2bkq>hO_4ZE}YWevjez2!4OV?=SelS)t<(*i|@*
z#7gf&8-v;aPRhRi5S at 7C)E2Uyo;Y#s$0A)+cgC at fgIioIMq9QHl{ir?cWAEI$S2hI
zcW6_T4 at c;Vtv*u+J+!H73yvf!dg?$JYc{jQ>qwj^FSj&Uib*m(>cIC(2y;D>UiR>_
z&pm8t(_($005m|lL)kGdR_n(c-NVA8Yk`p`vFM8K!<lBOQ0n+AOD#zj>{4eM^8yFm
zBvSe1Hu|ZBNqNV<lCtF-II*P-v8W|?X at q&#&6Y99FKn~}xlTZBzDsj6;<$8DNAJ?a
z*uN{O!Mik(S?6Il-3Cu at k>;?6ZUYserMW5pJ`y)_Gvs!&4YsY>F`~ZN64Nx>M{H|Y
zMtY6hJaKy)GhQQ<lAx>MU!66Ac0A1q0Np;4f8%2{`C|eU>j=nM0&OJfu)>DMeF40v
z7AJ~er{safidsKV@)MSmb19(w4u4i|=@XEcLvOECgd`EAFS5vi>&ZZgwEX4PI%RY#
zz?xi+<jIm|GOBMFwEyL%dbrUz-0Y;+ACKlQQjt&-k#IkN1MS0KH}h<uZ~>+8KVCsi
z#hx~0aG9z=@$H{?kbr3J)m=GwPE~+Tj39q-6Vhg&fSkXhTCerca3$n at vneP+6kw={
zq|wWdZy;&0g>!pYtnB&V_#%pABA8H9Nb403aZbCln^*l?Z at S(uxj46p%sL_MZ2$4G
ztPW?Dl;T`64*IVd>wde{TRmHoM@!t3S1yb$@T{JN3s4?2*22kpzB*i|L9S9AF3Q^%
zi>yJQmK&a?O<sI9Q$6EKK#k(cm_1Tvdh9{sU<8(<2!aVP|9I4}40YIz79}Y-7uCXG
zG<xDRVqe$IM`KV>T!qw&rpq409O at Q5abJ98jex{2KhP#WiYhd{0L-8FJZx+Ue3rgK
z!GRq-FCw_)uZ7z1*#i>+Df>*CFBdb=Y1BjhvzC?i>mq3^Y?Cgiioa8uwEWkb4+sC<
z1z8NL2EVi%`5>{Ua2px}71tQVC>(URLuu3TH<JBl8tGMYQ}B0<0EXM3O{UuKLEZ0c
z!lZ`TjZB(kXBSs-4WBsZEsk6O^}4<_XOiC>3c176M(p`zlUjLK at bh3SI-Q1_37zV|
z->+aXp&#jfT^Y;9^n;xKjqQMggYhuV>}^X7_B>l;)pbZnY%xLR97aRCU&S5Q`?DEu
z0B$=ipYWi1uBh}dTUBqcbL0Bp^)vLPX#hZ9|GcaZwf5aFE<PfGMd8?x=?C7x^+MML
z{yCEA*Nm--DT-&*q>LYV_%wbEb>=>e6M*LQ>Oz``u8x4Bdv1<<M7e(eP;x)00}g+-
zd-c1ha*<zg7oP|l5$YO?FH`t0P?bjtB$La3G}qCOsXSy_IVGG|PTnslMm%=$?yg(S
zr&W@=ZIi$Ecf-XVmKh%_I6Swx*OG}BQ~e2EZ=njke$#m<O1y&3bF*@?<lMPdXj<`|
z6rjTt3a^`66=_ny<J~-<xOUpRw^Q)^l at o5J>*%{QIA0reViQh%@e9pdxmyqG6k3Xy
zUEDu@{t^iz53;0M`+1#v*7PMM?s2Pt0wv at QRYBRqgzA(a)AEZq at 4brE>X#Cvio12d
zJ_^nMb)fx)Azt+bbeML<RDEZItUS7a1d7@^z&-%`8`AeP_<zGe3zR*)bV at 1EoPmKC
z^M%#8K%kMLh`jy?l?1JCL}dRXSQs7~ZtautaE1^{F{(>34S)9_wb!gV at mysEl5Fs0
zI{9KKz at W?`+(@%t8P8=d%+Nm)yq_!p<u&xl3}Nj~d*rX7lK{>+Q?ucm9|eEj7p|{j
z<#TcSoexd69dY2FNo at p1CvS$lLbdgg-y+t at Ehlb^@{Yt)fBZ^w#Y28oz>d4Rin9HU
z=1lKu$h}Ji|3>q&>AIQyGqSYYJ at 3e@A9d;#(0`XI`HkkQjK|GR5_yj{303o&4%LD4
z6<Hr%!WLGd3hAGujnr%6FFcvc^3-Bct~wm5 at O)IJ(QD(28n8ZgY=>%ZF6oWb-GagM
z&1fxST_UUt_UjAim9q<`{IjE$4ZPwjJ15kf1I*GyZPYiL46ZUb3J#t7vYX15>R$x`
z1J?~ReO=b1D`zilY-kNS__9VlL_0Pg<Y~9&wVMEd7jdPXB)4E at ll89f;fRCblD2T8
zGIgAn^Dn6_r3JepAuLkAuF>iW&bEHA^Y5>D=>A|B62>Oo!uh9C^(#H>Vm}Y1x1Aue
zp{TsYvtXaq=R2BXm=z{m=3GvQ<w>qfI~U4EyFToGw)TUtykEYXP=#jl&stW#Qv1z3
zTrJlhy_(jw%5ugEz8^j~e)MY6FGCn=Nu7w~8(LR?j6MeKPoE8CA1)0dS`?hwme2jQ
zE*=M!Yy1`K+05(TCM9LNtlO`)x&N%Gt<i*e?VipHv>3fnDgON!nK7~gas?2Vx at Cz=
zmS>Tz$WVhUON@?gJwNIPw6Wc<+TVl!Hvn+5NmK_l;WQq{YHuQ)SD7;Xv}&D>$k{1W
zR>*!6(X;3l8`eWTl&MT}Fjrg^G1R|m!%0pdD}=&b1}AAFx*9-V3WL~NDov7?#@OVS
z%Cd_5(HSwX8zW9zw+ at xkvx=rdzt;T5h&<VOvSgi_UZ_zyn0Nt~78#sg4`mfCMFjq3
z1xn6k6)l1PD~hwEPoP^eM$$x0kLC+%Rj&Gl_~bvaroa_d%MGVHK~uiwEciZeS6uIo
z6N8d<74)z?S{h8)t)(cd$PXnnJF93pbO*kKiA~5V3P6N_8zaq-uoXsG(tec54<tx~
zqAC(^6CWPfFGsH6qFT2*)Cm3OYnb#qJyIo5G at TfhtlJ2wr&-cis_K?iSw$bC1RZWX
zk?(dkk*pKYyE0V6k~Qg&5G-7`kB#@rcCwlpvx<}`qnTMns}V7W;D2&fkrvgG6^wh*
zd4`WsO{`>%7fRb_RYv!#gRCSluodm{`+JqPp+^ao$$oIy4jz0ap7&GUt`z%gRkY!t
z#0^0Mz%s}N5V{*xeE4q*|E+a56wG^(A*b?fXyBs&l5WvE<5E|~8AyC0JyWpjlw at 5o
zB=pRXWX&w-iu=&1um0TqGrJo0-;;fs45yMfn(Wg;Q~nPgV5-K!O!u<~;is%;o6a~t
zWRzKn2FK~VxoIb{oO08enD2Ub$v(Bjm)bgTGL{r9I$hM46s!rrgaf_hx&$_}dirFr
z=Yu08jKh8tr#d}`$&YlP&*iXbdt^sQG#>o$XfmUNV&QY|nuoxqup4g*yUZ36=yqEH
z<>+feg0fF>x~Qr5{kc6z9#e?}W7NyD>3sDUw?e+l7Vs;MK>}v|(z`~NfDS9N*|JaB
zblIoq3XI`E#l4Y`@BAVm|Ii`-IGqKfwPHd(M@*O7?le|Zi)|G3i!j}dNq*aP?5dHT
zO`Dd%W@>x6NvXbjuD4p3AO_9bPYnOoa-#p08*IzHlj%VkKy26bu5aG2%Xk2l>w(I6
z`orzeJ at +|Xe{K*mY;+oMUAA1cEdNV3NC_f=Y&ql`j@@W;?bad1AE^~`+t2CftV&Z~
zpCs9L?a?wp@!`T(E6+vCforq|1m=G!qk|Mn7LX;uOpog`wckFmuL>=ypjWAz1oZIH
ziZr at B-J3QTt&Xa>x+GAZ?!o-I;lyzF5AvIHHDXXIJCmkAx)l^n>%6Joxd+WziJP-}
zOul~i1OTPd(F9XH)#B2Wbs4>!c*jvqC{tDjnV>!yC?-w#7#$nP>Zz>D8i?71j1ns9
z#e`xG_1BNI3246_t&Kv3FnGkX4nKWyh&HN;;m$AFZhb)@zSA;a9JOpgQpDPmkNIu_
ztYXf>kRyv6?4HOM8 at 9k?pCB8DugzWsSb^r=)NRcZ>|R2gS^hb(k>xLn`k^f+`rBXw
z+_CwG6vGLI7AC|p^@Y$EV7jL|JbUKa{bl9-Ef?IycY<p{GRmQ8Yfl1dj&`T}uevgv
z?^Z{lQ>HzU3aSpDV_CDAx~rpcm1n~zeKPxKII_jhm#i~2>*Y+G8p|^e*|RjOC?tpo
zoM(5K1!1D%Z6q(2M|y3_M>=QXwCfJqh&OU!$ZxnnEz?HC+6|d1?ED<HDc!HU77j5w
zGcMdjyK5f>__5{3$%!H70B>;N=h1OJE^PUYP+S%es>Eeq4{^sA{%HOw_Tr*7EsR(J
z(8zX5`3ebc)*qo;wPEi_xT2cP^st75eI5|saY|}wgQLeomCcs?>!b at JO4MYR8|!ou
zKYPv^-FV9}HDiZBSQ=Vtm;FXEEeaWbcr^~+lTczaG%J~olK6&?m4>TDACt6pxeYLp
zCl&KNih+2t8=-1$`1VmSy at e)R??-nEqVHWn;YJ-!=z1M@#!JVOcu7Ctr}_cQXdB=@
z)OYBNIgMK-=j>q3J?iJJy(VaP)JU0f+aX3wD^80hfQNaw#fDzlFB3=(m#v`CBWk^y
zqm?$m3ay^$t0wRB=zG!Re)$c<g*tQ#toX at lua|6^{orzXo+2o~itw at 6Ec+k;1W^VN
zyKeiW?~1azU)#h6fD*g6uwS8oz$=xi#Bh?gb=)05Ot%dndgcUJ4a)tPipo0t-e<gz
z(YZ6_&NjnO&R*Wf20Q!OnTc(@&kwn2NmF|g92!+i2l=VuQlo9+DXoub9_IiZmWb~d
zK at h`>Hx;n{<&9mml|11gvl7i?ntnHxba39b3`RN5KOx<=cu(QB!en1;Q+_MUSX8OB
zc>hd*tK+9*ng|AVSfW{@boT0THkW8r90^5pIUB_OJk|;4`OWEm_UViv2Z1KsH6c9-
zthf?lkJ@{~t07ahkp20d#cFX`{%CbIh2s{zqRaZnTJH>8G<8ZM0=K3B#f>Cl#TDpM
z0oZ`uYS5L at bJw)Fz<AHrv07yR!c-Gu&u`<>6&xk$U2TKoLd!aw+Ram=R|djN#M?^I
z6RPDigCDf~^hBNy2XUc;6<bifq1c8*H#Ur6h9UH5P6K+&lHXQ`XP1&*Z0PUhc=;l`
z{6zocWou4^yfoqCc<~&-lm}(ATcCUze70~B|1=!vxwu)i%~EEY3o2EJ$mRgSKXXjH
zD^gg_=MTmti3ekb$@lD0U~2PUG?yuQW6VO$5Ch$|+9TCJFLEZ<{mAZSGnLdch~T2T
zw54GZak at uFL`fs{^ItTF;21S#Gk+h;{r<w>l$$s2zv at hj^SbD4-H&W>Y?=2c>Zr$v
zSW%7B+N6*O-zvUO-fJ;glq045{-)V0Uzjv_?k3C?CQy!t)pN1~XP|e`dpRsy{pHC9
zI8jIY2P+3G0|yCpxKf4tLL~xM(nVY}FmAMQy%jh|wOq&;V=7e;zMll9)nRNsgEfye
zBL)+Ciq3wFyR?tCTXt$<w_RK at 0NC2b;P!=ICjqX!0e363b9o?d#XaT|INFJdj+x4`
zq3-`pv%$b`)ZpK=IQm7Q>n$qk32mxzk*Dua?J)Jx6PmzJUC`X{oC-d(&>azq`<@83
zs*-<+dq6QX8_HMF$;H^=`SqB)-!u5H#12zep3vO6=s-K1oU-R10q!I3CjqD5Z>i6m
zzjB6RKcyubxwxF6q)%y6O<+d9#`I-V4NqyF%JSY&mou?<LvgaBbd~-T{4MW}=r%x~
zR^TXJEJ&=-ebfvV?jB+L%l*||Uz3c%3lXVuzHCx#(@7d4XMQ*4{tYt07VQs3wEeNO
zzr;ZP!87!th!)%6?=MZxKMMbe7LK!9w)^_`>6VIA^hgqmCafGXn!Qw+hbLcneM~7~
z(MX#(yt`i;$<M6sYQAZE;n?9JKZ~HX6 at i{$`A(2T$Qvx}g04bQE85>{#X!Qu*;B<p
zeh>%wMO7#>PKl-Ji9C%k8|`so_N9BUqZ!JL%G!xWqz&Cto*IYGvdB at _&_~Rq8TA)Y
z`kr6-1!gN5jukr{#wz=xBcwt6P`X84$f<`1e|oavV<_Vv7>Ri4Sm;oyJMfLAg{pk%
z%@cpguj059TUDNKzk%*S05SB_F5~nAr9Hr1VdF>SPNp9k?D1okKHC;6EMF2_Dh*D#
z$9;G^e`$m{E8b)3>V=!aFIq)B&AGp!{(k?j;mX_5SvzO%#lYpickY>EiQ{{=sdIWc
zlkD;v0bBPGu$SK>h|ycao${wR6TK&q-+Gbm*@#=~_-O6|HVO{xo%cYXq8<@I5Uo7~
z5eC1po<dgVaaEk*Ui)b{JK#p>u}=y0BTr#R^5b)mUaeKe$2vj1Fkc(**nAR4_ck|X
z>Jk41j`o^Ed#ykzr*FC5dh+xSY=d8c8G{Qzq{0?vv_l(F!}a)URFeb*(}v<pxHy!O
zW~X^J5&>7Tlk!Tvw?+MVY=OzCkI>CloMAQn3oD^|*jrJpB)xR}xorI=%ZnkN-hEo=
za6ze!7~M7`Fq9I)_8DNv?lUqXc*#N?F_GYRo?2och?M<%2_gzk8}4u8>@>u2W7w$A
z=HpmdIjb4ff<)uamS_Z6b$UXWm$Kg3I6f^53tk?8l`QOAH7M&_DJ<-M!P*Ub`=-?{
zFC9sAZACom#(}SfT=&Neh4RmYWCvKSko7IsXR at Qv;r5}SNs_HJwngFV%U&7XuQ$3U
z1TD590rq?4>EbPh+LZC?z$vu@{ezn^TQ1!oz54SEFy*PQ9n7xU>g0(%BreMwGJQk+
zr7!l&QQIY!=Nz^eh^a?rVuWT6G~uQ&R*i9(`JQlxO&uI`mHKp-JQufsYP|12lQur(
zd`$hSTlZhR!Iv at oH_PV5;f at +7#(||L?l;~RoyOerHY0-(*}oi69y`k9pBakSMutQO
zSRqSs8#{-Xy|S^O;3p2u#C<t?Wgl@}&>F#>?<zNUHRSzqs_=kZcJdozp(P0nu-~+&
z=0n)L5PIS{lLLE-3{6sZd-4xgY{xI2H;{~`r`q at -?z}ULxx3pp%e3*EKR~>tgv^ER
zjF|(aBAo=ntB`UU6cJ963{)D#d}wFzS)@*mo?>$tFxgYc?|!|ZY_%7%xYfgwwwGGt
z<mtk!CC{f1`88eCrq|R4U_sYNAj;b)-}A6?Z_R^Y{>6syeuUEzexstid8-#6AM!-+
z29(0_Cl);%02K|gba_==kR{C?&gKj_n_COhpom*v2Sh1D_Wm48tHraDiKUfr0IGyD
zM`b7;)XFr4;Z1_3GR?cV+&_INl<B<Ldmu5|!q(qS?N{^lc2O(&;B~SHj6YZ~$pCW!
zBSM!)O1+hVN--#j;UZgN<gz?0zF5A9j|j?LhQ<G#hBB0LwHtl!qXd>MUz>n%VU|*E
z$z(z*|AqAGjcNT!xD18kb6;E`y{v*Pt=_zjVA{AEz0{?DIbpTynOUe76lTMGSU?ll
zt(9Oboogc8BH|#XyD&#@Gh^>~HG=2f|2(;nb}bpCPa>AQu*&ouCp5up8wnPc7Bj~E
zGkqI;+tE4c^hq|-6610A{F?%zQpe%Bd218Ulk!@|y!IlllHZ9A4fV=iPvEuk_L|ZQ
z9VGlon`K2+{K0(P>MN5z7su5j8%++F(9W=O;`p^TV#BUok^ZwmZgeefb at RAd8dB`x
zJynB5kKu^aTHII`fSdK&zCL4GO9Cs{bcjH?X6+=2hCgitN(&!Px_?ejv=Wx0xOALC
zW3Hopt)aS0jJLDLn_wmvJ#<znCRW8DT)Y>AB@`He5>ehjc=cZh2Z+~SH(0#;AO-q|
z8HUJPHw5&`8g0i3 at F||IuTlPsD*>(pH_!%!o}pkB*O3#m=|pXH>I7^&uv=(S_bb00
zyj`Z{$>6RFsMr3osp+{KRV$FLFwwh9R#cE)id*|GigGusLaM^ydVFHpxroiC)iL<3
z&&FyuxUPv*Fsoeho^CqaY|8J{n`A(y84P9_l$P(>W%#Y>A6pD)y-*P~WP|WAMX}S-
zeSKNK!6<<6K<$gSHXCYj23n$&IVS`oX}xTzgM;jfgOhBRgCop9UzoJEweE`4A at +C;
zx%bK at I?C4KjJu93X@{uk!-eSnJ+<T|%|;nhWNI}#i3Re#4Y#Nho;&RgzG3J@%JPIz
zlte*ZRe10d18i(kPfXc1^e+Xg0uutq at v*^6$KzBa1WKsaL54cT!isO`EobV(2-Dt#
z8S)WY>ibU+cZCV*jat5786IcaO!8yh!9Emuavm-{#BVBj*I)B+h}CuT#9b<Qm?ls@
z^kG7cUfj;90~dVx4}5yycxE}ogca$c&Q&i)E7-Mb!}9n$NRY3|Wta}FrorjOy#rYe
ztn>#f%Khx+<xmQ))ZdCGOX1K2DYtq{IrT2(LuPsto``xAl8NASh=`-^57TUXAZ_A0
zlZfhmH<;}el3kYnqFI=N)`KqkLvp4-H&CBNBpy!jU(xJoF;vJannUPnx1skFT_V)N
z2+|9kZ8{i1PC*O8r=Y}u7Jp8qK^MX+0^w|R(Qqg*-3U|nYA(4 at TV6qZd__44B<oae
z at e*7hEPqq7FjrJFHAF-?id~yw_($vgy&7#GBCV at oPnQt#By=weHDQw#*TOvAW<zl#
zHf-Ll&v>f%BxEMSklsDA`_=kYYO$gTQW-(AVH%d`5hs|YQjON+584{Y4$Cx<9cFJJ
z+c=BFyBh3%MzFYr-OoPGf%Dyah9SbVSxhKw0Z>c_#AwUP$9i5BSk=~y={u+w?6LfT
zt*g;PeWZ}V_c~qcec8_qhB>m<tvHngh-cC`>1zf0iz1bL*u at jDwxaG=d{Zm+mDK&E
zB?PdR`vGC1<PO!veb^OIIo6DB{*JeGxZ at SBnUKN-7M`z1E|&AE`g33A_*_Fui*6M)
zGD0h!itaxDFcQ8ul5-I1SyL3L2Fg~uN|vNg%2=-aX|{{j&ar;fi{Bpn6vY2lMr|LZ
zdHBJ3O}ejP>l1kd;XN3MC6_8^rWPMf0_WD+)MsmMX}-A7^FBMe<zVqd*c`HB)2Sz;
zG(NV1Mp=!~+`Rj7BT>`qeD at cCP&CGc9+<6-9s2>jau9BRC3gQpS*&3I90Sz9#%PYp
zmA{~hgIVSdPW&}|;dNrh7|c>}F4+7O88i%gA6;*o`Z(lY%@8{@Q$D;ZbKs?^*=o=v
z=p*COlZh8k{fQ^BYO$M|x5-pPq6-^jj0W=%)T#)y^o|<q%>)&+O}`0)pDZMCAyJ2~
zqJ>k#W3*|?6$~yL9Zt099lM-zKDAzMy98>>ToYu5Own5h7G54Qb8__#`ZEoc`86x$
z{HDDF>2II0GJ&1V7!le(&0>RF{*;Q{TxGi{M{n+vEH%Qzm&L5qG<}<CCbU^3`u6r0
zE!@%}qgc)&k*H}bTXF3q^~GzNnKFE*12*2eQRw}1^o)7U7}qaCkhl3wsXUedadX)3
z5}BgK7l}%!_K;v9IZku;06_fGC5hM|JHhOaKe%)pXX1Fi!4a_=6h6#j6Rh?YZE-e7
zeohe0e8X=@W*loCzGb4^F_Iy_ZQ2}wJ*QR!^y<X)T=eQYNvj!KjrY5$auutSKy&%Z
zj%JQpJV;AQRB)0&_PhRi=&vyN6)LDu!vAOq&eS0*VfBEg;1J-_?cvArQXI(6DlMSP
z9RB6N#)@B$g!fC8`ZnCW=y|sB!h!8rr!D>qdLeIGu1Z`@1y~KtNw!-0*pC?5v(w35
zQ%pk(8y4_O)IViCrYXJ_k9*m)u+jg at ma)dV*0DzP|K{u7H`e$o?(#^oRYe!L03d7(
zCM2{y6=Uwf;rHid6>d;o`@<#wyNQ;r at 6WC3+H3XsL3dH-hCE49iC0p}>H{g3#eq8*
z!Yu*(X(hOK^*{zgcs0OvS`g_|eVz1 at Y>hM)5<@KCG;-o!*GSju9 at 6)(dQ#x;#?IK#
zlLS`eM2H6oRixEdxIa|66H}Z$e$6>zamuuL32}72w~rUmLQ{rqNdrgM6CmN(n8uWW
ztY}twDex2`zbAn2+_<v8t^3491qV)x;|2*td7N~wz!q8}Bc$S&pU at U@UT5Ltx;13x
z>I|Vxp*1>E9hgKckN>p}{Jwx|q(0pCjgV7ljR&Y=rlmB9tsa?FXMJJQFii}b%MMri
z_G3wjJWj-3Q64!D>RxHb<XKBr6iAAaZwxWr*SXt91C>qV6 at p%D7e-gCC+NcWp(x%!
z0Nb8o2I`XN^pJvWAoyR9VBKXLhr=5>!U#^nah4;?w(qMaaVO4WH0aYsPLKKO!`0si
zsX}Yh2}+eDlg--Oy_dIXgPTMOt39vufW8Lo|F;_G;+AVYLkZY*oy;C({_ at 8M8M_~-
zXKFq{r8NHumGYz*c2{h}p5Jp94z8x<FmfvV3oX|A*}0r)wiM^duZ6K7p2$Nwh0-L9
z`R(o3I~CU!iAYWxjeqn0t8Z_gZtLEcQ-zoeF%bGB$5kGXFN!43l4h6ArANxI2lx%7
zH_|0v(m2(%2}E&^KW(~Zh{>;y0E*-x%aOa2En-?Dz at 2}kf$17JX+Imn7!Y?%`gu}y
zPa<L3T#O^jb4rv+PB~BQE)N9mNnGEcR-7AT3Aj~(+h&F!bE0DoEcaAEE9+Sb<jt0#
z9QIqp*{8Bc#O at T|`|cIcJ~;wNZ$kIaqhdn7M<Q+2_!A2>Qux0sBBm9$`q>4!vEU>1
z5P`xg%+kE(X{3CGTV#xiZwaiNJtH^qEyICxVSQ79IBLoBjTb!Jo6mq|MQf}qkHil}
zh|`wVmzkZq|Lo~1uBaW=2(nW2D_RRUh{g-*X9nhhwS7so(6LO~WlCy{WngU`$Qwg7
zGB7IxER%NH07@`^1IoZop4Y>y?+h{GYLZ2<8b4xmM*ya6T&WKbNRcKOmu~vdWtf_8
zg5|(yXHBq~d~)T<k^_l{&sx8@;gv!Z at t2v<_g->vX^&ow)0?cdag-m9dDFI2Svclk
zezttaw at q=n%$fs*tO>8EwK(R<X_f*-Lo&9M<p<=RVrjZ&5kuBYox-t0v?<4BOzbZj
zw&+hP%M_bM at 8*3rOdU4GX1bqM at 2FDXo?g>6=+t)M#0hPlUI~KEFBFug&vfYjaj|PP
z<;cd0a4WmNJkD0{ICy*$8zX3RQr1RNyUZ|0?4l`k$_#T*UhLCG#7#%4yx3mxV<GF}
zc}d~1sDEJcAP773kAHv;{gv<d&lR%T3*YfaLx18s{<F|O{T+W4^!L8?FR&k|gn%3G
z1TcaA)9?5z3RxYC-|-tmf6hDp^U!aijWDf-O01>G0cl<xe`_P$r364>4!Q1HefHeH
z8>utq7)LoR at 9ZI$tRkoFyu*J^&!#UdK}u&5SO=t?y|Pqc at ivkMUHjr|g{;M=JpjcS
zV#eh?h<oo#$X|_UQd|uZd&BO=rvA9Dvj_aTKIyym<eA at B_Uc3dP>7tS&8U0j7F+lF
zf at lHmtR{$6J at GgcJe-O-QjoKUr>0UZFk7th1hvQlv!{7d6&Bbu=TiqJhc8Zu30~Y8
z!(BWx247q=WDd1nN8uSrL?d<E0-J8XgKLC#aqnxn3{uv<s6SSxthRyZHPl1`o9GZH
zo0p`{H$Es^=jojrqbnMW)<rj&>Y{tgkAFa5 at 6l)!^{FLRXtsN-xx+X1<Kmu0xbA(*
z*$NW#^BQWJ6?Tty^0=)vmPe!gL9MjGJRELs9&7a4;%wv9<7{cFN%kA~j3A1sLzpa#
zI$?uVnkDe2RHrr=!y(B^mO#zoU|Fy at pKve_+D7UM2b)RMU7vE5_e0F_QJJUj(A5(i
zl#eYI<-Yx55?^a}{}IVLBd&SqgL}&P_fwLJ++`o)Q?jnc{QE%1iSMX-Tg;bMLw#?H
zZ9qNlF_mP8Ww8G==C?zgX7AuCZ7Oxt4)*lk9n at Vr>=W}DaLCiBz@&2~>Y|2~)K)H*
zh8;DcbX;tX<!;_4uX<;5tLY6^NFkCrQ7QJAD-N|c3_b2et+K~v;*;w)ys!6NvBwtD
zFe=mmlRH%myFd{HHhDH}q3voYHq(|QM*(#{hX!gYsLKx61cp8cWj+CmWHt}c?{fJ%
zneXwe3D_JO?Gg2rBR17KZfxP+lA0|uXI!0gKz?S`(Sqh`YS0mLOV|O`_?g3em;(qI
zKqKsG&>X53`z`k?sPXh8o;_3L#-$CrBg<(BUgK#=SS@@5OXjBsfbf#YWWS~R{DYrc
zPz6qyw=$_T4_ky5pS-TM(1i6++}+0q_l`i-+HH*(ig8J$M%W at hYktyXV(p at 7(grbF
zJ(sk;Hvi__38Q!@Q^G{0B^Ki4b6jS&D0-kKat>#?(eTek(cTGqm1-XVC6U>Th1c}r
zUs6Hd+G2&h2+ErYU}TH`iO0p$p``mf0GpPEOu`Hi+fV*owRlbvQIb)}`r~Wf#HJ8!
zhLv5Te{8Y%z at czm8YOnd9L-aH_UI34z>RZy8!Nt=Ldl%5QgL_9<Duf#@kO0#t|^j2
zwHer>Q~8p`w+|=f9qSrmcN$IlfeDN*?pmOe=uRYo!GA+dPBQGBvhMK^#phvmMmfJR
zsSqAE75>ChAMmglZaFocIA5V6 at w}tFO@~HDB4V8iS-!PZF0#WuH1r5S(NXFG4-2=<
z>35^2l(>+L!8ld!AxU2j<;cfMoPD<*W+;gJor+tYd{K|5%W%wo at -n~kkm72ggYQ%7
zb3W$FgLy#Z;ffH?WDmQ?+VCwDN2}a)1sHuW7d0d`%*Wg%Cm#Dut>R18i0vfnBH2O?
zPgH#zXB5uqe)g*)|Ni1YKv&psS!Y`(pFEboKSI*Fh8}!wJ582=v;d_mtXx|ET3CVe
zUEmy&^QpPCQ&@>l>^E8?7IKE&n?tpk)Gil{Gob*omM7o7bfHQ-7_E}(Ea&}kYinOl
ze;y2Q#RZ#?t^b86 at t_g0Tuu$U3sV#QboywxV9-q^P2&Ts<|>KZoZa`|!`l6iVU6B|
zrASxIpWl1 at S?vC$MM=(9Ff9GI*x4uZm*L=0OkYlgp+dI1Vv&pj*ws9#UtO^R*4b!}
zZ?0HtBXm(ziW|0`k<*_G)4K15Il7*><@rsGrwBihG5Z_ayqt1j&#=2Z9ZsYc^Bz1`
zulxZf;p~ptD^WWO`UPsK5RwVAHS2eSq|^Emnr<D5Ov}Y>h1c|Oa46(RG$I|5)4xzH
zJ`|$L9lm=0n;-dvQt^Uh=;5#^KYFOdiZ%K;tpD${oMEH||9fK8HFqr5tfLOpT8lcM
z$VfZCpPDGZ(zzkrn}-Ia+Q|M at eF=%@Jdf%Md}tL9VT1+&HeJtH7-TG3yUnnBS||XX
zp}28u{Q}Ohg?$i5{UyL=%(g at aIDVW5)0o$nGg1}OSL5k}^Y|8(w)1k-8W~O(rWzPz
zF#2eYa1DteqTFj~kosdegVBZ>>&n=yJvIx$#Sl)d^uXL^--5KyQ;VBwU}fa0aw~p6
z5+VKY+%q^(n4u&PZH6R=-9HF;eRe}`Uyh<2*~rmm_80C?Mr|H^Qr}wi4Zn^gkt@%N
zsV5#-ENvDQ;)zB1A2{~yZRKaTt*xqNLq1yjYhTW?sn}9f$B7)%a+s`7Y!BBoqTH(D
z;s)%=tB5`cb;J`3#hiCge|cigwkM3p?Q%|HV45QU at -$#`EG~3W*SD0b7v at I$mXdg3
zzP>qdjwT8qK^;x}M+%jQjYa_|QA^VUGV)4((4UK(Z&)*9W>CAlut4^^!xnYl3v(n!
znRTD_Lp33NQbyjr&4RlW+Z*#sQNE|1>1PCE0%k at as9HX1DGNj<D)nmha%KjH3-IBH
zZR7=avQB=(nO*>4)z|daS;&IC^%>*gGQGAs(?yni;)N%**&DM}zMH?G)y3~nILrse
znY?^`M&OdF<+_gmF}N5+jW*=AH+ at 68<p+v`j?2{Id=6j?(!}9u*XjV5E;_rxr7vf2
zk2X`@2EbsXnuINn*IZ5TJ8`S<AZ$9C>>@7M<f at k9O$c5Gw#c{`<Pv43kOL7eYANj3
zxTl57gXX2MJ at bx)>-&2yZVW#<#IaA at I==xX1b%eYj}J=4jbZox{Jxx~NB at LJ8A1`u
z?A@@aQz2FruHR{iU~kei;FQDeO&956I1tl4LV;KFQkc+0)q=FuhCm8Ceb2*cJa<~Y
zi8v at TgsHhI0?kVa<=|pSOb^bgF5PMQKM;=T3jU{zhuz~eFiqt+us^Ra2X^oAQlK|v
zMxqpERbX_B54%57JyR5ZhdPAL_W#hAZa-lsv&`=V=C>T`ime at d;RSR+!jv6bbWnYX
ze*R_CA;aq6i$3#EN%I=IWak-|G{_#pxP)N)Wlng at +`b$rtEkZsrW~Zfq1FzT5Vgq?
zE=yOC%wGnF5VQcNPz}2WPmRNmr3U at t{w3xu)QE!>zvKK&?XY*TjffSig|kRdJR1r?
zOrZw$446sq)J38qPK%Me2j at CRXS*z{PYi^(V7E1m`?|7lhDQUy6iH#@R=J0iUZSSa
z^y`EwPSi9Od)vff19WpoH4aW4J)t=K|EM_>&67C)-Y+Hx6zfFnnq=HpZ#&Rje~f{Q
zzcFNqhMT6RsyM}3h`&mDDHu4z!t?ZH*}Ri<MJx=vGa*>SNenIu6kQ5-oWSmn_&j1(
z<yfP<Rf#+PX%k?zq7VYs7?xE!?*d)EM(h;*$#oNxqAHI<Gn<hZ{*8e_<Hxf-wk}jm
ztXC!VvTa5xts(4(#|g>0@=63NWI>qSji-YFk7GLKXZ1l?YA+MQ!fuQX-hCY2;lBMg
z&0%eIp&d-m^u|lYo|gAIln)wj!GIt3+S-gnS=<<az|fApjgKL0exVJ71>blIVN;?%
zNi))ivxczH8>5QvTP8+-a?PFQ5V5Jy(r)DX at 6JAn<7-A}?Z^VH9ks$w1OK6G0o^VL
z?}G3ebixO^T at bG9f`}UUQv=-;sPU$hk2PAM1tliGy>yXEjG0)J>k5EH&QyzvHVv>)
zR95+*ans7vVqF`4|Bpoa%}Pb8i2maPRZ-rx%EQY7u%+l`p=5{3VQ`YFs0KX*(32>%
z5|G=Rg2?@HO#+@~1JH6{>_x7T^3F#~L-G7koW93G9j;h6>?3KU(Iq>?Qx1y(6EYVQ
zG8a2Gjms|kYKUIu??5XHFrN{W3I)cLlT5OQu-R#Lg;H=5{qlvt+B_Hz(W$^Y=aO}+
zRlapy8Ue7yHlYTSMJE1W`rqcEd$gPOK2N^oZ%9jNKBHIm+Ni at uNY5X@Cj_m=@mW6f
z?eb$JFeH{3EVseAAx}eT!5s8317RcVY3J`F&OVo?4RLhli9zV;0&_=lL-xbUz02~j
zC2)SgYHH0xgQW>U`E59TpTpVb&Gw>>h^ZDe$l9OPipA at cQ>T<GVu$&o%32bn#Cd)<
zXrvP7oQpF)HqqtGM=b%ELjxKQR0aBj`PbnfbQ?!+l90*!cD2>e4R5~R%J}upx7&9%
z?avggML3-m>7_1E6)>-jm`OkEezw69-J3;Y!OltO&TOwNjLm+y{UF)Vyvn2*;Bi$k
zG^H##04RE5_IlYlPn0JErhF-&$r{G at YICY`by4G+E0o}81(i&sPwHEGA9lZseElw{
z^hN);yWD^qgffnhwu&xldYOCbzMy}s<Lj<o4aO1WO<G#^@Vk>8zU%iymy>?>=aMaA
z(|O8JzuB}U*o%8RBvXw(W<5{l%NvzWA6b&_{l(hwHx~Ehk4;$~%h!qxk3Ch1i^>V7
z{=B-xy4!wN^Mk_OYt&HG`GM=s%u%j!n96Rv_qg{Yl&fPpZ-S0PVoBb>Je?%555l7L
zu#4ydukHjsQOHmxf#;Woy&azReuEHDJ_)ZO^e0|s?TyrY8+#9O{*;=^W)7x_{TW!?
zn^L20=B(Ak^7OU{NchDfB1N>tm5NQn{4#<4X~p_FVEJJcAIeEHQL{9YP*#dmOMWcX
zyU{-`LGEzWk0sj3W at V^Bipvk|q{kUVNj~(4D`=#tF1h>l`hyN;avQ)6v&n`k7g`au
zC`XHtv2A|rwcgpZ5$?IyiXcN9!_tvIewmcm7T5i%>bp>kTN=uWbt2K at H{=QW&5eqB
zp|Rr3Ds$=F?$<0iV3saxiBv)zoT1<0Y2GlsI(>W(ciDEP&~k__4+M^X_l<9-_d`9S
z7xG6SbZbIh!jk7e!fc=`H4f^kH!SZnBVZg$IRP9YJTJ4 at Kv=;lRd&Hl)gn<IeXfB~
z0Z;Ke at NRbcLwOSdm+5!*TGviXN%8znc*Byf;KQn(msrk4&zzVD&0?Jl%%#}YhB56%
z7^0 at 3g`%c`e5h=aG5ihF(3*d;dRH5IyL3FQ>Cqg(|7ak7(_E(^3)^1P&7BVT(`4UW
zt-lS#s}uK5szCTn0ZMHoDLb2FU(1`4EZBAQ`#cqS!?#Oi4}}uw>bsR^O81NJ>l&N8
zW_Wr#_4v^T3w5hg2rqEL8vjI5KZRz0Gn7cQMI}Y+!BFkqi>|f9DS6KLZu(w0H7_`*
z&h*YW-n0(tRhPa<D$9TT`P^pigkGg=gbAs(7}r1Bz3f`BH at avTCmZXtA;IO}pkxeH
zf;hX+0h*FMR;l7VW~$=fj0dnLJ}ia)QV7=-5X9?3ZDyj2MI{tK&1$ZOvWrtE<HczS
z^kN%ifea1d<K26?e%l=?z{|lDg^3d_xE2(~oh!6n(Py&3o>S#zzn;yKNdK-Z%m3uG
zV^5n!@$68ee8Q2{VM}<G=8Kmuu(QN3ZU69*`VaAvtvz+%%2lDo;x|h5GY8Y?r#KeW
zgVPrEh;0--L$or_Vzh*2SHq|SM}xZ7b)*+6S*?^dqKM1?qj|h1D3U}*dOZf}WQZ}F
ztyE$p^P at T5;8({Z;c{FjzzwireVFm{0%51PaDHeb-yAdviw)x1z}g|-G$($+5Kreq
zZ4SijIboTBbzpfHEWtVMn<Em_sFQ)15B8#*(gk7;QA)R6OUu5g1J6&4m#-Z1 at ETZe
zKh%MssJAftY+s{eWrCy{{n>{|eV-7+K0(MWVTxoB=B>0+NlHUiv5KtjS9`4Zf9UNm
z!cH;@du{docgv)XLuLBh2DaewzoBgG_7K&{VAMbLF&On<>jL`qalUoP*{s+$-e=AN
z(cmPY9~I(ukYMJUN<qVlUP8NudbW>K7kAyC=<?XqVn2HJx%0<UT5Z(Q-wjWIjBrn1
z#HJ=zm;Rwj>dzb3P3&C$phBl%-ppmns*&XGR~Is=52j&4n-w})D5E1)$nLZOLriLf
zW#Or$PEW&}Fi$J$=V_S8Zdp#%_=M$6_OzKraMtb>HNA?U0;gk39F%UemdRhY3naT$
z%y{c|pZH^j10G5@>eO`1VVWMlv)xmVPj8=`DF99S(Z`x84z>iVC3{rJQp)NJmR3OS
z_NHYh^I*(PiCKYxpZ?(s!^mjSC at h6l@X*JoVxTW)8zYg@@1cA0Ee59 at N$sDn%B{Kj
zmZ=#sw6eB)nE#JVF at EOa;eSmR at gbC52-Hr(@rl!s+}39LHnHV#c=g7AB2k^em{^H8
zZ^8hSqo5>FQ;Rl)^m5W2D3`+|&~k<pJfE)0HLx$zrN&e1PbTiVu=lQ&k-#Jq;CeEC
zgTteC?KGj2A&l~0zlr-S$NzJP#Cw)JDBHnedgzy;5ZfuqmH5q#gG=>1=JTc;C^HcU
zjTo!w)sz2wIUiR2^nAltZ|Vpo*q39d+r$RMmvAyjctddiB&6%L1B8E+3JB%D9z{rY
zs+cdL5f8f?cJg!Ve7exmi_i&J49+GJd5*kteF6n=cFLh9hhQF#sHR}T(FHy*as50?
zBo0pL%c*#(&7_uuU^Xskt!u-oPlvKAw4S>?&ketb?K#OHQ<MDUpRB at mWp%&KqxOYh
zEwm4*sQ0ik+8*lEd)P5-_~G%=P)tI@!oH+V2{BiCj6b`PdLYCC4S$Yd*vV=8zc0Y|
zM-YC;wb0#N;I-dn$P3P-E-7`MKg^zb2Ip-HGw0p#zy~;Sg6gB$?hECGZq9coa}hSn
zxmT9LJyn?X;ecw0f!5p;U5^Y_dxYYrLUft39n?w@=AgXYQF*W_p1!1H?MYmqIb&P1
zC7Ji}-SZn+XDx}vR1#=?A;b?wWfhgAp*TEO*@ct1?&Yw{Sx0bY@^Y0p<(%i2hoTL*
zW!9K%**VYFnLqsS>`-`8-Z2@$pHrVqROF4#(Y-|J{1dK&lLQ7e!<4lc^RWJx(qz7-
z1nY1rrrB>vwm2o at g;F!cSh)2k1U?{_0)>1L&bB`D3LEu2LG2P_9CL^ml^5e>c1eDJ
zHmsz6fT<W@=B%=9Nq)aU*b4|V`@|djXdBx!R>oJ!rce{ZF?Y7-362KN7VwjOLS=<x
zKD3ooWjHp;fG~y#V~98vj`=~v-{II41A>4E0wN|xU{h#QsH_NVg4HJkQ%~MeF&JDT
zk!qV at N)gy}V&&}^4VVlg*}_P+vQLg*j=)@vtqy!1@&iK<Q4z#p`gV9T*UF|G$6_%P
z8f`Vjio*h+6J~Ih#lbvQQy<4+-ZboZXB at _)na(ihmQ7Cs#ScBdqVC6Ie0|IH)}8px
zei>|~HN!6aR$vj+iZkpB^nSsA;?LeSc at opg0{<I6zm`smE%sBf<|l#WMn`krw5sgF
zB9VU{Lt3+iAnfWbiOma-=0Lwl`riXs5-bDqKXLOB4m0598*tRAnV9{1{}ITaC at p+9
z&|6%QJ^`5?S2Ui0RRT6c`8JTw78aqEjy;G!ngjpeDc(-gH>B at h_z$irzHcGIv5n5W
zLijoL{zP}49`E)pzGh1rA(#0RgA4x?mjnhLEC0!~GXuOl6l<Vbhb<BzKT25k|494t
zu%?c-?~_9UCkab}2?PWac2KB at pvXf=*g_DMT at ghhi@_)^NN}kk!3G2*AV at ffASkG9
ztv<FDT<U at qtEjDt(poKbYabMAwJI0^@tZjbioVbLUDtPgf56QA?q%+|XU;6=OlB7U
z at 3a;FD=m?cSN~sWgHUcYSRKB|19T|>{u_fK)Bj3?CB2{iU+F`7<sOc(k at P=)Ut0Xo
z9F&8-OI at 9VvI0Nw#ADbcw7>XR4$^Y9&`FLYNCR<#hV!D)Nk*_1=R~9SiSKGrZ(|~(
z;Z{T;p=<x33*9W%+y3H)v+xpaH$RNtmoFXn`kKxJ#EmT5%A7SgNZ*cemuq!owO8{O
zU`$0U_nP_Q?a^p1LzMqGd66$y^SivdT9p1c85hTZXRP|j#u)Hak#68cvFP-1e~rw&
z%s}oI`+gq0-aeLFb?f|Q{Aw)f^{@Zz+Yg3eUanCf=|YNlvPi2U&v#Lk+gb}spqXu2
zAI8gcb+l~Z;6&N_jo9T|Z(qm+v6iuX(1ZEMp)<Ivm2Af^vj6CG?yRz@&LS<WW*}`p
zf^M!p)}jh_b6ew3HvI<)CZ85-(FTD-acJTKE3tdU));PH{fH={)gNid0*ggpPwXp8
zr00CZW@^u%gXx{KL$nSb#(xaice+qF*;K|lmdYAY+8<0tB%aNiZI7rkTG!FSLAbq=
zC|3n8iANnsi||eHsFq3RR{~Akc0$u^Z6h6bPe6GSMxULE8xfl?^t|UdN92VsNkFGe
zDqKV|DtFF%Yf-OvUOVADO6=rFU_i0oi1brR83v4eQU4eIJrH0A(ylVR*Soc)rJXZ5
zqIVQ1E|!SSumR;)OcO#MaNA^wNZ$CzbJ%QTylfGkoQT?jffCP4MCFt9)|#{rWwxe~
zpkMffjr8{&h1gx+2k2=HS-9<7G at e4#Af7W94c7M+eG5)tKIx?8utPDz`9ysG%)XCk
z at F`(3sQ-ojKL)>#XfXfGR&(;lG#4%HGX#vTRtIjK-+~9uLwU~7&A0y8w;zs${bvUq
zGFtOcu|7U=l!mM3p`2NxDLA?k9g at a}p=jX43 at 3g_i{*gPHsXI~J|^!!=An*^e}4s<
z<Y#_<$T-v6S6<Z5#jTRi365ZenjrfObE$Xj%aVmJN7~a4MF4DFFDkhk$H;P)ox<lP
zq4P)$_`xJ}ykCO^c{4$9=}6pgXa}XHwimto0&*Rf-`Jl$S4 at p#%;YsLAXmR(Iy}6r
zvv^kW&)FeR7b8h1pY+v{!1?F~(yRd8-85kctNN{(f2-1~FEyLmytGF6uRWj}vR1m-
zZT4XN%ViD|zHkJy9*Za4;MqE at qjq|gsKQ$#r`a$)rrZrYDAd1@#D7mlWp>dod%v=&
zOk^k$fR7Thd75vgTINp8cjz#)I(j5y0m>mMBU(yaZN9K<(bT{lVsX5 at B|*u$N*z@^
zqgg2WR%Plk1won at t0j?av7<P$Su(t?YiRc=ZYj!4FPEQ0ICK}M(kja-*Z!e3Jp=_N
zzoEK$*<W+>P- at -0l$A?(S@#?!E83(Jy)L=A-%RrCg!^d#|BF0Qh&pa-$T;$wNH?z$
zrpLpCRTyGZ2#vtaQ_z{{0US?GK^Iu8W|-zJ7RFSci?yJ`PN5?OJhOB0|D>Q^Mp4U)
zaH~b=B&CmzBzxhF$SXlTWrA5=H}_wfYVNeY`sK*)abwaWARYTY9j--OZM5by;Oa#-
zs^e?GGw%Z)U%(RxR$~`VfIqrAg`_B%z+e7M?7+zpJMZ#ux}5MlL at iYMqI)gfLR5nK
zw~OI<QVQ!q_YV~RKN^QKQc-&)1qc_;bTnQvelI-PQl?M4=0|>z_6}P5LE1OyL%L7?
z`uFK%2csQ>scpghb7FV(eYNnUH?OnEZly{As+P9D(OQ;{Q7V{XgkCSk at UK!)3zy*L
z#eKpn&I`Wc*i1#&O8bcPVDzrov1$A+u$NSUkEEhDl==R_q<OfV1eBl-Y9v`Gj{N_*
z<Nu|uMtOSi<JXh`@Ea at C{{jdlyccp!Ckbt|5^CPE53n!-lYM}R32f;H*en9e`T&a|
zu$2U+90d~yaK#6VNd%Vt0k)99mVbar2yD#<SO$URe1K&U*y^#ElC+!vSAD>^ion)>
zfaMZc-Urw^0+WA$Z6vVV_gJh8PfcK-et;Dcm~z8duu0Fj{sT<Uxb6etYQ69Wn3llu
zKakb)DL%mTd>i$c(jeRdL3t(oVVxMGm!*(gKUev>ZdFa8Z++i}M=TFq;F!HnU-5O?
zIW`^bnO^@vIxzhM`V~*7h7Zz#PRhoyK&+SJ9{I`a%kQ5}Z^m2Kbo at h}-Fy5<2>OxS
zVSv#-!dd}l^pPy&qrb<L1PB?8$1-*<<Xr%m`A1kMz)U{EE&|NrBkU5u7$0Fb0mk_V
z`_)fLLYN<cw*aHfN7!wEu|C2c0?h6s>=D4&A7Om}v;PQt3@}TGDaU|10NQ at U_!?m2
zKEeh8HvS`Q2w+xYF+V0UA)=Lva42HuXs5|V at QUM9%a!Vrho0Q-mF3SM#(;!Dr8~DZ
zwFQ16bg!OZ5AW9k)6=aQRxEnW->vhC%Yt$^LN5Tb=LK3DYJ}Pq;n-#KMn5Ztgj<w9
z#bX(*1>TI*yS*)ntvZ_Mh>GsLh9YrYqe|<mJAqZe9c%WWQQOB_ik=(}j&$LvXt~+g
zq1p|%WDUw}%sH21WW&xPFYIO_!FV>-{I;&#Jz|1Qr)Ot at 4LQ*r%&q5f7_t1erH4cL
zOa?NrvN~bmH3l-=lTC$t*qpz0M(SBjL(ZF>84EGhP^OC=?boToI4jw|V=rGddY0)z
zBcXY;qkl~Ow>W?s!?<62`g}2^D(iLCr1myt@!)k4E}ZDYWZJK|p+8mZWg+p7jku!C
zdkrrvZ_Q^(>u-!Fy|%S}rdYWYdCZDo$e((+$39V3!$Ud3W|Kb$7y>Y??@K8*zlf^>
z-gJg at pV^*i+UHK>m^T|^xTOt`#=#>NG7bxog`f3tMB55Xl>^4Au;v<7*d^Nc&%}`}
zS)yEw67Pqg at XGFZHo~YFfjjj$=AAAjD%W_5#D>gtw_Vm2N`$hu&?oc2YU8vwueD$~
zn3gU=Ia`U4X52DTDPAWHo0hJU at C#$OX}$5qH{A|~oBtEPh4|Ud9>ib43RS8GS5}3I
zDuuwBcKY9}C<l$zRG<FtC=X3Sl#3>Ds^j7A9b{d|=OGm%Q+-l0{f6Psa^UBt)9V6P
z3>C-mGUrK+j-AI`qT)gL0EFW}ct+=`cA2_eaW%*xF4^M at 2(8sF-+s}&9>}cM%gh)8
zyuL~hxdb9}LHI;Rx2(BL2Fxf3eL+YDp%wh8$?m<}V()k~sxR8s*v*e)#%Dz{ENf;1
z&w$XX+qYsQj+31rrUtZ1jsE^_M9bIe@%?WCXI(MZuS!paCW~{et}uYSsd(w0SrsEv
zqZP{2fVn!FA=+GEWFTxL2;Yuq4e1P+{=02NE80w=A8!R2B}$EcIyIt&#)9f0-CUC_
zepzF{zaenFK_ETnJ0fk>EU^6QI(vN4&wYn81U3wJrQPQjd+*-arsSNP>6(6gMEi6K
zC(s#pM*J!f!DTz-S at Dyq7;$jRf}Bt!hxUhuH)v$XbJid^f6S{%4VxWyl!z}N;sn0%
zg_M)=TF8*QdbrtzNSQPC3K4mzhn0A7OH$lUk1kC&2eoXQ?aZI6qgYPs_SLYY<Ff)S
zl}&q>9u6M-{&3pQeR$TU(`SoE;`?92$4a5$kVhGt{t+X`ZV3*0c1y?kU(->c!oUSx
zL-+s9Eml<OcWJ&%n2MI(sHK*-j#R?Nt0;gt8F_gl-qe2iHnsn&NsMvV%kAx|r#jj<
zT0fJ=?j*0)DlwCak%ipH-DKpBc0}tj9fFuKz-%Da2o!nDBQT?i5x at h|#$O=r%Q_d1
zUnX8?x2$xb#j>b{wB{<1;iw_jz>tJmvRsRy6(bl1{^0MVV&vKaRD{2!JYmhYfcXA5
z!@=Ilct9YP7=5y*m}H4`PXvFCT$jm3PNuwv@;3-6w;MskY<t?WDug9ZoXuGM2r(N@
z+Z+3*24M)s=^kWm#~90MFjCYWCSsgk69NwiX&R?9KY9WqWdu87_pXJc8>j1{>yI*#
z6{GZR at pke=9a*qCtxzeWOKm#3uXJSnHh;JKiS1io`;vg=OVHQ-2w9#W#eCNXt=_IU
zu2R at 2FTmfr!VR-8tri3*iZRkjao5`t&%GPEZr=}<GB4=3iPu}@a)c at mM###o_s`a`
z!IJK`J-THH#P8H{GPGexb2gGGPsEHekcrSZW%{hl4Tk}7b%xdvu~X|UQ(P!^frdT&
zYkn0oIcUx2%b@{+3*%nNOr7TjT7+xQBD9}l8Hr$Ac%xOC-#R?9z0 at gaLDRX19^Aq&
z53JsWAgcor@}rmuq+fA=$>5sW<*RpLrb{n?^xw71<C!6h)dd)3X_;~YDd2ahZN_$2
z#z?)jt~79`+0az6PM%;ldFSGT^OPxMhFlAKD>6x*fVjW(n}jYcoM3kG4?+9m?%56k
zcC<rj^Kb}X>tLZE?x6*LHzKH6GbU|{rd)1(ll<2Ou|%2xj~+c42O4Zf*HFo at N)pdP
z7};}O$pU37$2guflaXyLr2!+5>8%`caNo%t%Mv1}O at BsVP?%m8K?=^DiuTW2VjMnx
zD*6(h^oC$?n{EWZLC2DPy2L7cJjX`VT42gA2r`SZ0(^B-5xI|gF+6UQ%M2-k=O*kX
zpYHHnV<cMb3%tWZunaARD3jJn#Y-zEP(eoG)z>g=bsmOhw9=3yu{3fi1>mcsk*gU5
zZfwA38t|Ey!N7AljQl0UgZq?qZrd-7G#T4XUdEEzG#N*XZ!#wOd3SkET`-WLUHpUF
z{up?tsbeNAn5cBuurj2|yxa8+6Yktb7{jsI0<lfY@?i$=LcA~4=vW>1KxF-LZnm}9
zL!?!q{Hvh!iQ<Wx>g57)k~A!n6N19a16Efe;1NYAaVF$Va`tazx9#(WH<j;%Cx at xQ
z@?4nd0(e?5v$f25`yX3vB%Le4D4AdIuuPe9iP<uik9(ezNZ36~^)SWm>MM4_1Zo5m
z;dwiOM^jy3gPLqsL!O?6iyw+BTjo!zs+GvIFj72aKbEy<LeLl8J58Hvaowi!38+WX
z&KcC|nJ)R=c0B30t3yB+L$=GuUCw6k2D-)61r1^(o-xS?^osM<ZriqNlre$SrT7GM
zf~lHdB0+|^y}y>tc%ZW+a2A1+-{E(3#=t<bY!`uJ at 9^8O0|MQy#+JOG0kjeB65}Dz
zZv0?-v14G1TrA4(WUf>T>fbDfd)ei!C8o*?)k<R-oq_nhbj5zR#vH|LjB>2*^r^&d
z3{h;uD7%unUeK(0WCa^4J4y0fMvCAkfHW%*11<+oLh6}DY2T{889KAzzBk7kSM;rl
z(2|gN)+8ezsZ%(+8^c_*O`OlGtcN$P-w6wfywti<7uCd&pLt7^Wca(rgsr-9KzP4w
z*G}UIt?(mZ2M>*v57Ig+6fPlTZh&xLaY?8=5itdw4mnfHK>Jb=JA3wRoHiG+OZj#1
zk$8PeZoGDqk!;snvv~3(BY0|vqHKxlw?>o8-PIGw7H-P7zm=YOyy%UjYluEQ2o=;1
z%i+l!(&(;N^y}H&?-%yT;iE&}^eY*Rjtn?4jn#TH`oH!@)`lLI9Q``cpTGI-BTm6`
z%zs8AB2QD=iwaYl(mJnPY`UJ}uy4HNGQV1XYRG{?sqMGXDiLwA<c?3$x=4Wwhm^VS
z2MvgSzvz>hT}X0_d}(qLtgn|_o+24d*Pkh#%XamK1RQlQel+E=H5rj7L^#bL(aB2-
zcRDpMNKRTCB}$6bE;oJc<-xKEM+ at 7Rh}OlnE;sYzBiO=z26<yowpq?Us$h6%y`K$2
zO12|!=em%!`O}l?2OP=q%2ZNlHLZ(*yy}rq6%?YuATJA~G~Xfr7~g8HL%rx`(#cAU
zHZZY!-poJlJma$`koc_0h^SH(=)BJvv5AbGyqis~&BVR2HW|Z1QO$53k+y|9Z*ykY
z6f37^c4K5?mswli*ku0=-{tP>K7A&G7l{6Vnr`Z`@lyUxdrnNdQ5$-!MU;#iSh6Q%
z&BMCvKARm%w+!tnl!Naujl9YI$G%!;6uuQP;j@%1zM6roeK`fmTc#G;RWp(NbhS8x
zjbJZ=)gn!|7<mz_5<=s0n5vbTOft&jJw-|mvvLMZMe7p0V)i!1u=iDI8SZPkl at bp{
zh|u8<gWR$jPjm;M=h|)wNXMuZp|O+ca~o0Eurhm4Qf330oOVx at opVpMir3SNWTp`5
zRWLn<zADFCmCb8;iezR=$Y~%B(<OdyBMk9XV`!^#l;9ujmeM{=0+e(wM^8&ZeKzW-
zogO7y&79HAz~%RNOcp}Rm5@%p-tw@#v$AOZNab#upDL?-uYEE<V+Lpsdn1fqnlFAN
z-GL8pa&q`nT89s#&iDS1ZU<@C#eYaSyB=0inG?by)W^a^9mm6>JC24$s*hVTnYKzx
zHq*+I!sK!fNwJJdSpQL2M(y=yZyv=~&rlg=G_5q6oz|PjOG~a5+s8Z0Z+P?UGm@*t
z_TId^5UbZ?JrJw+<~8L2%ubIr<O0mjn<v=-upT{@vN5?j?p1Pu$w~|5XRg-}N_ZtQ
z6(l~htKLBgV<3|vR{mS1xiQ6~fzq`vV)AK~%N}G(22+9oZ`>8{oL~+b7XlWT&L)eZ
z3t&U at b3vTzB|0;osYo#3xnJ_z1m-9Yh4~8kWpTwOg3pltV^UkHQ~2#8C0u1JZ{efZ
zmKkRd_mh6)ZE<O3bMBB>#rDf>t23BnOgzCbf-NtMsQ5?LP=Ac+u`oP(^U1}9VX$iU
zL6<jQf0?@`Owv;e;_k&1xA{#^oY*Y&+J6J=6XtM#Coz9;e>rcv=`HOAp6F{8Iq9Dk
z30N;8Im%c>oQW{dPvTU{G!O at iNyeH@Dsd*y4xL<vDAPfFO#w2Ch=UN&W*P8Vt;H%5
zIlcYWpPkdlS`crg78B{ro at r#ZeK9HL9<rikrkw@#!P&O}BW2pb28yi6xvyFQWJsCF
zG_o=cRjtS&AuGtj_7|DLiR3g8&jHxGG^F1{vQ5vPeL-zMJCxbu2o#w at McF`6cIFvJ
zQb{#y^?*4!EzfjGdS1OS<8LVo#L0^X-lsvFoR;EF*48W&rq5j_%y^myc*c>H!2{!j
zA-{nhX{|k{MzL!pA}Ub%Wv=F-r?W)j*hNC7ye*M2Fm5E3eHa<n46%GYmg-L48||0W
zlDA%+#s5w0u2~y{G;pFfM@|4MVM;c)%LHwS{4EB_vr`KrcM2>jysHYk+$=ten;u<c
z>1I)+*s3F6;VI(^6<3K&J)BQFn}k2YT)!_1Te-eo7;^2_>DP|Cp7c65J6ng_VXoUZ
zGyH#ECd_32sr>g3PPaefsm~(2Q*Lkh{_&EK-)rCg*-jUU6I^DgbK}2R+&Q^qD{l%W
zpe>h7k%z|mh}Hmam at i3h_)Uoek7jr5GsKl7WEF7tDjtFeXzL{Iie0ge*EVGRnnY at u
zpTS#1n}+PjxHCY`9asVejDV0ebuwZ46BAa(z!LK6++CvO2W)43*(Ot9nLKk+CT~Bv
zR;{}5+DkziO&{?*@Rv%mWKH95Z;z~UKX6wiU9zS#UASgw`+>jC28)zR`do!6wd281
z<~<n at m_%O1J8+i}W|fdvC4GL)bo}rO4Ce;Yo->fSJ?3nz#tX^hvCxd*X*Ak1r66rF
zvOFhEwLI<h+x|35)$$~*g2L0jLNc|x$)hwPz2`1D%?HwlX^eD4S>nu!lb;nTu{++k
zaRSI-1uM=9v8V(vjItykjP;2fFy->J2=&uEQ%;69hxTJF>CvZtv5v97FDLP|WMsaJ
z_a095a#Dsijy5gbID=CiYqrD1RK2SAn{<~r1fk_icx!vV37z+-ciSf+R$<}Jyuzfy
zlXON1q6Agrz4pHHo8SuxiSC=gU~r^c!sELc6=pD(&@?fmN5A(T7V?-XB$L at rZg+xl
z6qy!6$<W7n$b7PQp+1gaw2W+CQcQ%yj6%>@(?;fndo`((EI&vWrh`7Ahtu^o&Gqz;
zX;-5!{uso&t5BL at T=?sy3i6n_TFB@;E}kSen(ZAHPX63~iWJkV>UweM-w`%Ve;T^w
zM0?(et=Dz-uQwl2Xbw`dr%YwMJR(N;^SXv+7Ko86>8jLYw<hltXG!6$ZXo{jr2ass
zH<RFLa>e9N$V!p6U<RL!2?X_n5q$PRj33=Kbg@}VZ#pk_C*t$P$cY%hd{~TWrhyDz
zVS-+nz+Z9WAVSbpVhm;^s2 at s!84ZLJ8I{3%Wi0l+c>{kJQ9KtOvo1||9(r&cJhqIk
zl^S)q^<}}$T`>`@B?$b2$YH|+;)AGst=Qe7_vBCTSNiuaL|^nBLRRJF6@<WRCK at E$
z)L~)dFZ{Vuci$fl3zJh2p4<<_*8ycOcrg)gN>~aFMw6aDenw{F<~dy}rTzNUWcRpV
z%I!tC5bnW)TU29y;~*FO7bBv0tx|>n5BThx&THqh=i49r1 at k(Vd|K1B;LC at Kn8}F6
zKK>m=g3jR$^ng96qV;0;Z^4Wh^U~SF_d>-IF-FjMfL4sTynr-QJs%PO6khT5_TUNV
z?j4xfvE(~tB|QSQcxg*kd}|u2QR)x<MCh7)gkLE2X!;YLDq3g6*9MWG5XRGySF)xu
z`X|9(`|Imn(K=FTIGhH)R4`u2iuMla-F&)(Uv at A%dGSNhkpiO*zsq0oE2F4cl{#t=
z!yZdoB~2jsD+^2&bL}0-xfnL*b8fNKeU7!Rp?aIHp_Vy($NJ|tZ at V`1%D%?yHlQ-)
zO^}H>N7b%@+lKe>7%zVjBZ4%KymFJ8$Z-SZ_CzE4MT~(4MT^?oNb(Nl#U!!|7<~<J
z#N%Nv{TRr4YeW37UWa^@F8m#R-WdANhCJp51@=`-Nk0v^Db-|`ZTlB)lQL)A3YrAL
z@}J!RHts0A^Am)}$zJhCqXrsDApTungOoHw2Ni;F9gz7hhy!J2{L90e>~;NUR1M_Y
zRzmQldN=~C1hj_)Lhmnx-dcm+I-s{!)1f33?;r$*4T?7c#iw-vgkk}qxK?wBP`sVs
zQxb}|Yqmk`x?Xm>LDmMy*6PL+rPH~o!5UCO6z;x`Ftq$8VMMXPh*GkfSA21^v}Trg
zb&C)_4GXmhV)6yzKgSul at BGE4X%Sf$efpxf-uUMm(QIY&h<3C=RE#V!4r&-_=vpvv
zv0{XH4aRucs&72<9G$|j__LwSH7vUi>ujOy>ed2tBGeX`$i848zTJ>cW(?0&T2zcg
zFlXG3Aa(tuOELAj{zX95$aYgu1*V`1WRVd}W%<whHk*2lI|_U%0pWM1F7d~rHUpvW
zloo*LJIxjlKOO<<L+4 at YwXMX|W!sjhZzGtwpZ4DZis}GQEmTzg3!$f0^8)ZI0RM21
zC*ZH8&5dCCD&(CY^I9NVm#Jl;nkvBa7Vs#8;%xw7d(=yiumMUBZFmIIJNi-q!*-p0
z((0CtNx<K5F28T+?kkYa-+oK*709?0WL!*Se3Qr+_&=BoN=urv3ty6t1}H&2r9Ebe
zjWvlWw)`5f`bhv at i3jz0Cc@}&!Ir at pXY4GNvGnPe!CgbUw{eTd^_JVuW-T#+wE#OG
z{Ru<)?x{|bixe1#<~@}c6II5$0QVN~^L2Lcg|=HI1C5HeH6C~nl&m|TBM<xu!tGL}
z(~L^7vlBa{P`%XYXk3^3-RDti3H)RWHy?oI`OwUx+%H2YlgkyR93!ZhxpY%m*~*Yu
zF4l!>TJ;+jW+!(Im43>hcsrS_b#*XV>*Nx*Ij-FO>~o{!tp4s8f4Mdg<Htyy`qR2z
zT>P3_N-r$tJ<IAEa-D|nRHBPX$u%le5NZp5BBxGMNd@(9^WkpsiRrPHv9?0qn+y(G
z26yVLR<hI53+8ERVkvShSk{0zSfF$GKXORJGB8?@@J%YzZ|VFkP6eTUB-PZF<6^z%
zP8A7P at 4?K(GtVuoXYnq`)dj};!yl*KbtH$RSn)1*kf)WTPF*r>D3`&4KlL8Te4Kjk
zJ~^cSn~Bpi`zK-@<hG+-^FUL-W{KFZ>l#WkvZzpu!_2DUru>8R3Q*sL9br~SQ>PNr
zjw6|(82gNXav8>8rLreZud15zz{k6Lq7S*-u_Bg6ske^^@ZI=Hq;Du#UA>Ahnz1jN
z`*(_HRemse&6{tajCA5x{|tIHC)NZf#kMTK4;7#s^Q5IM$$mYmsgd>4iJq<a&jn~e
zpl89L7gruo?plkG6M_+>wCR)N83q1S(4Zvnl&3#J)wOZw!Ps5-3H8Zbu<T9%bx=7O
zIhK5-44<_LtccSAz?_T->YuN}S8YPQNGI@}n@}#P96z-QjUes7jXy&(l*fPSbRivL
zw<0u~>Uh&qS);Y=J27>CNU|i?wQs&`TMTk!7u+Vc)S at jFrp4|qT9VcNVEBWhSev}`
zkqAB|2FZOj=pl3CI`Ww@$n+lv9pLYeGFo#{NCWBrMxzlln=wS7#NqOtw=Zn}Ilrah
zR~%KNQ>_~$$i{8NaSv2W>zk~&N*)429zIKr^4(6^eE&F%T$~>f6PEJTrlQP8rbz0G
zh$F*`+}v(nJKh=B6~a?5{_GfjNR5io8+Y(QHM+=n`wr>2q<i?HLew at ydfek&*S+3i
z|CAV{=f?3%e67^!V!D5<TziyyD#>q1c6#aMt4``r>G3Z*uAJ#rUu_x;IW8Sn@}TGV
zS;+hAIQ)1anqz+Sj&$7dlTxRod(x>JG<ZM}T7;?HjgN|7pNhdR6rp0WWz`B6&f1K+
zFSKl1!4fY$vQ8X%Dkg63C(mc at 9HwgLU`Vg*Z2+JBM8L0<I*sp- at oun2)%<_%4mFQY
zzo7XW;9&9vwM2ThZw?Db5dLb=TUea#P&7nLd3;Rjv?0jyE4+3y>TC>B;~Ia#zu$~b
zHga_6z+Y}g|HTxSHV+5K{XXOVFhlZ}`ip(FxUd*a;8;$tGhTl^n=7xzSVi{_hp(rX
zIaS&Ebm3nWqnw#Ohq=xgRs>VVh at dv@n~L<~t9XiKV$yOJ6PaB&qAgA96FpCVEQZH|
z at p0*-rrtphx_v&$qF3;yD|Fyj;%<bEJ)yD=+`I&Jlz at 3$61)#fR=LzSyIYJ{R&zZm
zEFofuJ5X4p(YQN>g^&z!9=A1B4MJzj!(0z|5_%>dLrfmgv0JRcolDDhI=yfT`m_US
z`T^fsf;yAM?otVUv;=jc&pKr<xKNrNw2Wzl|EC0<NETlJBvvWv#dRUa!rK}Yb3I5u
zIH<!aVozeHG7p6)YG at t<&OHgZq!c_Vvv5@@>dq6Sg=fI)hI-ktOc+)qF at J|+D*Tcx
zUf;J0zfg*Ll9{)5m*Kin)P?jKpRfgWB-8(dCxCB3JtstD%_K)n8ng)XniJ>jm%OND
z6PS)xF^3z$oJmlLmjiB8a1Q at w3mQOX)>)R}&$ggpWV(yfP29f>b%(Lnct#na>7sL#
zkwMeH7G)5cPBC>*)9FI|U>VSK`V8Jx2A=TSxUB}Ai3Vx$B^p$QHE-9SZI0j6pmzRE
z1vF~3+rNk5H=Q$JzF+#_{psg$uu+)Rjepa$q0=WFk;AK-!bO;wv~chT+_N0z7 at v;X
zyRN|<pIMHMciH<mFYa9LCU}foPtk_X09{0FpFI=tV at G@QuL-E|?d53!URsVyqu at Z*
z%CPoHCv9l%k5J1};ut;WObTTu;~1H~F-ZRd9Tm_%6|a*@;wv$PF5gxSLKOOWAYc9h
zUIPH8B*uB^pcH`>XgXzjL>A_Yw^X1)<5b`Q#RI&r0(B!@!7aC<QCyhacE$vE^(A-9
zZ at 7+)ng0o!iSI;3l|u8bKQ|ZS8 at Hk^7JJpgfj=JSiB6Mf$*)Xm at k3itc9h}10oZ)t
z#EI&u+R{?J?O95|JRQ8bM*dqq&wCsi<;o~c%G{Gi<!e&>GZ6{JzY_TrOs=LgZ5_Xg
z&lMw?U#viI(@HP|+TbfH(Ise80seC(>PC5<;<7UpN2^dL_Vg6b-YTXJn!oXitNk#C
zp&PHor&Xb at WatN6QiZZf=kdHMlxy=xBh^idnP|2V7sxV33geK0m5(>}?ZyuRep|4F
zlEk;7$hVn$VW{_;5c&=Oy9%_+vp8!TDjyF at +;{hVjYF at 3)dBID8E at H!I(zc9TmgS;
z46^2Xb?|eenCO9w$9c)yxux(#e0ehFm>7alz at OQ7(w<rP%WY^W<M_RL=truaw|*L4
zUX8YT<jFEuG30nHx#5q;bLtoNB?f#879wT{LZ=kF4+N`)iE#!c%e82Rv2 at bU{{-H{
zf7XJ@!Yx}PnK|feDs3pdR*VO?!Af at xem`KWY+tAqBLPR?n4oV7 at 52b{{bnYj0UeWA
z3_O=qgE}jdB+JqRa6mEAnXOC!VMsIzF!`JVBirdrG0(a7_`RL$f|j1XB21SznEK0}
z2ch9S1YLiKJ3WeJ8URn2DK#fsC=%k$@}!UFXsVSYSQK~#1>Givx~x at d`}8&gQ8X+^
zh<4kGA(>hkEjw`)(pWn(jyTZ}WVkLvi_-VM35o(;kvWdeX2Pe8cOWsvVHs<xw_*u&
z0*=~vM8{#JpT{7rty3-gZ_KoDZg#e6mWbBH{z4<2{9;2VzYr1J at j^E at u<?U9nhmPd
zt`?m(XG7<6r^k7)PkMJ%MgzCZ`4<Fvuxq4YG|WC+%USTm<U7%SHrLEa6xavg(2HPN
z at 0UVttb70b<4v`wJzd|}Xbs%Q8}JLYs9QX!&TI<EqljoR_W4-RLW at n2F5Y|L7R?;W
z?QO7C(e1%7kr+b^4=!4v8T?SKC=nxW){=Gw8*}JuEB5G>jm&^oL>zyHhipe9Jj`hr
z-R!+1pc$8MAXmeulp=0y%ss1Mr-gq11pdu-G{D at 4^)r^C<<Vh<H?#4<?dU|yW;Rjr
z4W@<KT8KBT#HZDP9{hWJZXN36wpZUUW#&tbT)Pq4-B~qxcGY#JwCbhsei<a-Yw$SS
z2UXBihsN1$=o}!ucP707<f2_lCUVo_<~z_&$W_Tc*Ky$vbUNuMzHSHTYLDXWJ5YPl
z4E*;UXfTO|^XgGQ(h_`bJ<12P>UwlC2s-M~F!Y2Hr!~N5TXr!C_iaE0fRNij&|4Zn
zg?@)y?nI}6RM<|Ghec#vA`=H~E#HaG0JOb3f!?F|Z#&Uc(i}Xn5sk18qzy<AMI|vu
z;tliecEZc!`U>&7M%2M*W?vnCsu4|Kov+D^MJfF5K~Go2NRrt-5uVBA+JrigM7X#K
z4JUQr<xQxaRqwavm(L&a|C(npAUh<AqeQ6%Y0*h|dlTwpEt)-RQ%zCYp*i#G2R+)P
z at Ho;t<uW&XunF~;IzJ}_jT+d!R~%_S=m3cVwvH`x6T0UX1!DdVgAS*v`{w&GNrIxZ
zy=!C)pJ5<4cNgfCMEJ&CME>9JLVYJxpS=A|Y6X~AKz*}{>?d!k*vcWp^HWRj_sz#y
zyHO{n`Ln}#)c~dvC(t*5c9=4G)B1BSPw8#qLYtCzqm!&Vg#H_y0<q3&KDB~j(9-uf
z6|dioa!}hTc-wB^&H4CWyV1!mj3=&dFUX)oGv*ZuBqlP_|AOZ at Tr%GDPjgoCy0t6&
zM7XdS^&ru4Su-kB&U$it_MqkyD;*~ieo<z73luM_kjiO?-q7s=Nj5p&lVSRroh>Dj
zeS#`TpEL*EoLXL*-UsZLjI|#j+(ZU$lMwco0UpBF!02~8>kD6gHA)YmSd>?gitvdo
zV5|$o<66*A5Y)7Qg?yqS?5*{e%$z%=XZ6R$hWxqttKVwdJJaD|oxrV;_Cojms1q1i
z%{ah(``zJ>5fBNO(a*1sL0)&V#h5;>8WV4S{63E8-p7Sw;wlhdD5k)rf!`D=B4&%7
z`C2%;2Zif~S4|8$z|I3Y05Vr>g)gP at v0GG&()z2aOA7W0jKJ&-SPU{4I9_t$M^3@*
zPQqCH_dTe?zh=5hj58{>{z|DR@}~MC1|ge#(!eglx}nZ`%-P3;yUAeTP-HdanQsOZ
z1nfn}D?7lWl8NyY9fKZ8lGPb~H at W`xE`2L1GNn`#6O{;Fe^3GDyC%kcqWU-kZVd3P
z2AnbmrvRK`z{z89GQh_faPu*^xk{wuR~ZOqV+dwIz|w%5j=@dgJ(gluh at aWT^$&PE
zzwXQ~CN<kCo|K35i7GP1pdj#o><H?rUg;hvC+h%m4|)>eOH^1$Q;JuqtOFF%tS6C7
z at luuo0S8e1fRJ7Mo{(J(a1R4MMj#vVPt at ZF#^47a?xe?`jM4K1>X~G~$M8Ra{22eb
zl2BBVd|A4kY;mB3!oo;x;jknECq;+e1BY}(NkmXkELoke=ny!<rUa^M<ETP_Z-o3a
z#}T*!>JvX(t;k>{(Z}c`Jag#jdwpaj<w-4}P+y|jF(s;n0#G5q>kJ0g0Rzcx>j_tT
zy)&@=0|S>qoPU)tL}oBVmcg>6kC7t`@%}}+NBPbYO7<4QC07ZT8$6N?J%Snp9Y-^K
z_UwZUmlGMr5gD#AWVj}Sl}sNaM`ZY{cTCAC2Vm7GF(?S?W{W<<CtE;<jJ8-p(D_}4
zcR$E53*erHDp)$E3YG%=69c|_48EE$u#3QR3<l<8u>9$5vC4ND>09lqu at -uj5E&6w
z<F#c>tKC9mq_46u_yN5KyNCiAJop59kk__`XagS4(^VpnkIfm$Dyn>LB155^tF!<X
zuFYVrqrYQHGcW}jm;eu`o;pW~N~m|Kz<ty+t8RYa89C7iD~Xck8cLd*!3v;{k<%CS
zie64>C{Z2J*eZ#V*6J<yswGiSwZSNdcb4CMZxqNdFN3v#{*GtV at Dm>xUQ1yWBL*Jl
zcY2x$9_6T_br~!>`a7mkMQ_F`^4d;eQAZVdzEkA%fkEptSPSXzct-UoKG3s+!V)8G
znLRTv-&6)aR9qc&$Y4#NL!j)YK22fK5QEEH-aTdyKXCO1!qqW^t3Nfk`qK>FBKp_s
z-pLWJHtA1TBcIFlmvtxwL@(M8dQrB(i|9p_8 at c`^EkSF}Yy at +@=HXy5XLW}EVp3eR
zi$zg52gAYxF;cxtPvY}Xb#x?XaJy=QE|v85iBj*+M)yy9oP2YcI-1W61Q{`G)@Wy=
z^)8Q-D>9=|zDVo<`7`?`B3GC7i5g}AqaUu868sE3|7yUm93$Wi1;V=#Y$S89(Dt8*
zlKs;T3IXnEz)2tBE(V<X5$<Kc$sgg42HbQEt^@>uyMbWxp at 6`{fHOYAM-AnCgpX#-
z`UszBz}X++PLXUSL9qXT at Pl|%fbtRUWWdcn!Y3JU^dsEWfYUz0KQZ7&BT56|rW2^+
z*{Wazf&P)eWCL#eAuiw<aPyCF2Lo>L5k6X#%u!rvAdJ?f%_yNF^P=4V=J<Ui8w^fA
z40>FRf1Difbs#3vswPHLEQ+?@YCNIPoHjmL$(*tJ8Uvf-61G>NMLgwNCYET$u_(L`
zCSDXO3U_VV<qtZ`YENQ3Ey74lM39voW%aTx#O2z`%bF6n3eU&X_lcQUA14R%P?!!n
zWU?4&MbUCWY^HaSVM_Nnl8w2*30CR-VWFa+*j-U<OLie4RE-q_%fy$sX0W{x-$Kko
z#>jb-`XHe?Zz(b9daba=y!HnRCGs|m0zXf}<MwjmROuBAC5P0!9bNzt%UjD3y35ai
zdGF$$R5%rM2J<`kkz?VkyM3F|_6Fx3ebnx+9rW~BgRWLkPGT}mkQd}xIE(jqPE!2W
z{#hF_|9=KO`}l~B+#2za*B~?UvP3cY!Q{BN-|yRF!bC8WDHukDA5dcTQ_D`JeGE at t
z5W~oIIEk$<e64|V()%2T3z?N1G}9NMgtN~u;Lkp|tz30!NYMKHbfM%|m$Pl*tTX1F
zU~RKL-~`4jloUBRpFIUaHJqCQ9eWMDi+=_E$ohb60ke=t(7e-0tJVj2BQL|33zRno
z9hB<>Vo36O8pS3 at F9^TBaF$@iY&_RmKP%6z3B(NaA~@UcWH+(|Y5c6w^tkIxEK|!t
zUDGj%!GIz-y9Wy_nnEMSprLv_`iVCYpSRQ- at G1#rG&8y!f<1mKRot-2M18|6uR7U*
zBtzUHl4Y1&*XMg!I-y9Wii5^QL>KKeU#VsmBI=y*$%WJu!XqS*-UB_-$?~SIttBur
z!1n6BgtT-fLL*c6mZmG=`bSk{nEvwyJ`+mXmi2&HJvH>JwPN at E!96qiOmFHd^`JvV
z5xk>~8cbl704s!83`1T9;-o<bK$Ez%s{Ax<u(9>bRK$$RVP2zh1XlPCTU_C_6#xa8
z7p!A=B^JFp#ktPcqTDAUTD7Z|sk?*y{AO7D?nPYAH)s^e?Z~Nb&}fp9IKMg{flY;9
z$zUjMcw@?QJu{tJV0&ipvT-plvlXMn7V`F07<dKsUkVLj7;NLa)^!bS2!lsKei;Y9
zzip5b?UGmn_E<_f>?mLi+lujI591h_bH&J~hq5W3P7!0btW`o5yaLCiO1}u?S7%e|
z10E~zro*VcIgpmmtckP(ZQ;$<<M^e+sI3tsK0FMT*gxXtt?0Cc^h}4_ at MQwLeQ8yV
zkPW{mXu!DqJVX_7C5igGrW-R8q`Rz9XgF5xb`F<qk3TqSysi10f4$JL_$+ube9yd&
zbH>}NcKUq(y>m~9z)Vbq7s3JTDBjeH+B0uubBh|dMRe^{q$j!S?S;qqPpzo6QWHcK
z)W4XW-7<J9{rcS(7QMq)vM-6r{CKW&uWTcheF4O~h`7ZQN!QRl*HyppyTy}b*Dy+Y
zeAkP6v{l{wZUIkrO^ghL56*dDyXq21yMr_a)5nr6G;?kW&H&6|lqbqMo>UqjCeLJW
zooVn$*7T^Z7vf=jMH_0b%$)4XyRd%G)}4yVsc3(0gUhlT0v3Evz2e_G+vlInlFM=U
z8BD<Wl9B$`=dS6Ob-D8YM27~P5Tu)Cu9O4*8Uagxp{>tz{XL9=3j;u|YUX=6%_RNC
z4E>EZw!j0=SL)+FQ_<h%cMavVZ*GED*oklw=x}0@{z9>P>>l1;`1s|77^Tdt6q72p
z>L^eM4?F_gyF-Y)tQh1)Xc4N at jm=+G{DI4kfCa5S14`e3kg at UDp!<V!`m6CoTA?X?
zn at 8*r0WC1PFj@`6F<0r4uGG%F;?!f{$4RDw^hv_zZo}1jH&xFK#*;02m4Cs at T_5b?
zmhEQn9zuLzcU$TO`$3-F%3rFGoOIi1Uv<Zl<yxI3yr3zkNasr!&O3^-mD6=Dg7k?Q
zldt~M$7eTM&-O|ys$lA at MlH!*lAP85Qb!xT{71f>cztB<!)Cg-$sVUZ4<(1>eu+^A
z994_qVX|Pg|E?6d-C`vD&8Wrg&qsBb4eGI{z|(VSTpg9TH~3xgZB601SN#hIdGI|S
z%&1~Sip^J#RKgb~diRkG21QY$|Jd9HPo9VJ?(-&?T29|#*_Vyej-jz6F~0B^$_c4R
z`sv5f_fMtw_3vKj+A8cib at Uw$g1Fz9;0}BHfzY0r&RP}2dmB~wNp)!${8Z3ahPNF<
zUCHn(4Sx3+%8r0dqIIUx=!>G#2g6Zs3Z=B6)hkQeUYxInzxE&4Jt*W?dNSb#Fvj at H
z+wOQ-Y=(z&^V0<GiQO2fYm412Jn%UBsnPttaQygjv{3nZTev93{*QeppND~YX~9P7
z#$S&=27 at E-IZ95?{aF<}aQEx*+8i-OcJ266KGPF56Cy|2;hkLeV#;%quOr||7=7Vl
z3ZFUX&=<yWfdjHd_rBJFP`$psi-VqE?z|YvrIJF5ehq&j;3o{a^j#FY{~%L>Ox9;}
zqaDzq=NamZU&97nKqnT?Pk`T;5mR|JhZy1ehQwaaJ=GE_ON@>x{9&oyK!sg4_t$VS
zT5;9W7%FYw2z824sB^&R>nMYPC^S%>h)~<Y#uV5ASa{-=zQlZzr_rdD?Hj)i=UYQ7
z at kJ+4D;8mtH8cv;x_LfUbiZdNUVH-ml;nVuPon<5f`)_P3%U~y%0c_PpH(#!@SH=v
z^z7~POGkyzFSWP-BPt-7%0A`LAM~3XxmCfcYk9u;JABni)cRjXPDzrpa&I6Oift*>
zWs}7iT?3lN)d{xx=1?vi{c;5R>AY4)md_0_rD8<PyH$>#I*D32ie;BpRj9>gphcR(
z*Y`o}6msuY{m7+z+_zHpH9l|>O}CDi9ng1dIVJKpQ~$_?rc)vtO=s*n9`G7pbqY-o
zuHl{Tgr6qhZ7^0Rx$0An!=iyr1t9~WgW}aTcQ3q&EhblxXZ!U1U$g{?FsHffsKPtE
zO+|Tusu)52cS-ci#Pv6pbjoa+BC^=|4Y`=~(>-aEd at knN8`bqHX|^Xe5T%-V2MO6M
zUxGOvOaATvUVIu2oxbQ{eeAGY`-FST@#YS0rm|>Q7RNsT9^W0#I?#K5m)v$jf8#AQ
zdBqWKF$|9f;%GY>I{tc%SdqsQyh-UA3i!kD#M$K|$8N1D!zJx#NPyd6K%WfhlQ)i`
z*X=wAAL?Uui%#pqohOL!)`|ug_R2Oe at ZZ`|zVaBxO%!1)03d{*tw}kt$&k}@;Ys3h
zhhudU4m_OS^|oR>@rgtYZ8PWSdyHeZem^;imG97Fy|Nkhqu8vg5JM2UHpTMp_HEDX
zaprI%sLMCkHaw7hJ!lcDjYsg>GpM67jKrw6Bso=2C9UX|(uG=`wP>5l)Y8fiiE^0A
zvoEYT1ml{@@np+nyBC^6Qyu#grF4@<U9PB-M2#9x#N$@nkkZe5;p(l~W6?y&C)+)X
zav|im!Z;^Uj2gE_Z-sfBN%MPZ;JF{A%z;eN1u&txIGzH+d+}cj(WrDoMw at j)BBRAX
zurtV-P$20aRd6?I%2ZyiM7M;9&n1k!t|`&Wo_QMNK*(mmxFsULN6 at cD-3N4N@Doc!
zDNiF5h#+D6t+xkY2CF8G91&Hjs8K$E=>QOPAq3BAUQgxqvx2;dcn81|e)~RZ9D%u5
zC4u+=#Ol9~$|Eo<t0WNbhuFgJqvQm}v`PZ;8i?6_A7wRF2|?5<$?p50bR=~};*#kW
z4j at BUV4>R*<1a0{6M#W8Oq#o6J)=l5fUjL+JRX+(c~Je^6~GH-FdnZJBAT43j=4F&
z;QiUAoDN+8keed=OBV=ueCO64zov;BZ>pvoI4YIBoeVH181L&->YNG2Y at Is*d2?$w
zT+>V&PbQmYf2TPDjL40ko>`}3LL<)TbQXZe#FUbKOk)jsyuQ=ifUX8S>$AzQ?ZGv`
zbEmdcA4-Tyv8rn*WM^t|>0-5{-A)}mjS{lgVO`fNnr$Gp^xklYUp{6oSEgY;9GSvc
zz6hI^XQv7ioi-xFb6X(s)b$<*>3`OYIGS*ae57frS0M#L&+cWu?$r~<^R*`!%>}Hl
zHqpe`<~2Q0Q8_0V``vY+F#c0J_hDx%nCTb~lcEovU_8(0i7J_=vmVF*bAnid+#HMo
zd6iL&6O0PuATOA>l#HAKf at VO_Jo3?-lORrkcPW3CHY;Y+I-p1jGU^hWcDCxK421PW
zMgHgH0WcBtf;^E=6$c*Ny!!&;x}<UKoASlfVHsFNxX+So5`eJ~81dN(peGQ-R|13B
zK}P&avC<r5MvY1YAW&|z0VsN;C>xfEO`nJMMA>N>WI0RB+c)iW`z8lLJ?IhFefAtl
zz2mQ}E>MEd?X9}O2CeRLds<Yr_UUKeTVLIr>a460?INL~T?OR%E|LbmR!54aR1`+8
z&F03LSrl1%MXTA1Flr=zf-at`JZT={6|(Qxt*0lbE_dq=)&!!RR(y+IS^kuP<_n7y
z2|<FQmC38*(sr??#+DX2?*yYdEkxqSW+3CI>CB2&#7H*npNZBV1BP=0=~*{+nnYTk
zpl7jnQWjAH>G?P8u*M|?B2b;Qbib?n6xPKqUG^45ac0qKU`Uar(#&FWl}mJCk?qaT
z6x~GTCf~3(Z5rr&9kH at oj0L5WV)?&_d3Vm7FXYb?^BV7+F9ao{H7`kC)qhSw*Qf)H
zvoY(}iggp1vaQ3YEH;29Ivt8?wgwuv`4mJHbBn!XlTM(w+ at 2O|tYeXv2fUG2+8D;K
zg8}Cj2h4kIDPK2%Z4jh-o;6>5i-!O31M2LvVZ?VDvgVbjP^fWMm`A%*6p5OJR(ekV
z$<&+N*E){%vy^YH>+BtW(WSI*7{u+)qc(ybz;H5v66tVgSGd~9+ui<`VUPu5Gz(Ed
zsMRgn)%|xe!}iK~I%5(|c)C$563V}g3At0dVFb at TkIqp3E~bJ3EkgFYn55Xow*Vmm
zLKK8%Ae;a~G6*>!GzB43_PYSmO+Xq2p*aX?AY{mX4>S?sXK9hXC+LcflQfHcr-rLu
zB^2d-3Tkvs at +$lA#?SaS#JsNV^97#c&?x9=?my=XeKg at GjMRM7Q)<Di6B;Wq1sEd&
zO3j~#szh~1e*Gf+XrTM$cBHSg2ejL4NW&LhKqE<~@y{=y(=87AOGXxMzm<Ag2E0-K
z0{{C0%2oOVQo*X9loJuHzF=odfgkP#^%o at cdazzf2*ezcy58<6Ni8FW(fSn9GV6Rq
zm(=xQr8CD&KUXzOfE&ipe)})9&G`<y{F^Q)sNNO>S%*Ty<1q8^9Lz-71ct?xNw$9B
zb1 at 6BN`AX?k*&Av#8k_d at e9cEJdEDF8uSiU2v=cMXDScDj57-yDSsbK{ao}J35~+*
z>;R8>7F)*@eO6!(`JeuRaNpd%JM<I>GV_2;9A=WWRYy9(>ljYmliG4~f&M~vXdsxq
zxKKrfBbEBCP#iKmScI?5#`eE~3!sq(bg at Nw^6#7LaL<dVH>nR#xrmMrJU-#_{yY8W
z54#tOvBX3K^RGnKD`LQ0$T*t|LQ3<Q^QUcc#Mlq_)ROg?XUY^BTOPcK=XTHLBlzKq
zs1Kv4G5Znb$S+*ZwH;?sD*F^4xQJ$;i+AD+FQGhTAMNyII9c#CfB#L`V&Ce&N52U}
z+E- at pX}vOAld-gwdGBe0`rqb`rPaFXCna%T2HaQxp0`bXQCL>x1Zs34UHt;kht_?f
zL?S=}jvA&EucPpY1^82oD>rGEWrmx%vJ;6LTalC-Ju@#SA?<voH_~r-4b^`fUf26B
z4)_Kgd{};HuXZ!KKGUNf#;??t4 at Yg|m^WzDk_wTO_IG0pqyLE1X}(LyCIv at 1=+dhd
z*#kzSUTwxW5Yl^P8bA24Hj1VH8N~!AF?Q_Mtupw-f}<w-5&;9B9=Lt{@pGe|=#F!H
zi+$FRqAaVJ2-hTJZv`>!$~Wqjl}%f`u4`z-!J<e|ziVNn-3e-BHT+?LkNd*7uA$ex
zz$m5Woq|lL;6n9ADu4T+OHtaPFd(#=$mGF0o-D|dLqT_eMT*%mTPMv&Ml5 at 8gw!^p
zDiE`9bHDsU#-T9yD~L}*jFtnL3Mez`39O$db^4L>*BM;(BWg#E$cmbVH~ok at nZ;aQ
z*xm=VLXG&<A5oSazpxQeXfQ8$TU2v~I=Gj^>rli5Vth&?Qu7m#X5OkgiSvGf(k`u}
zpm)+SKcOsMpVrV&Y`~0^nc`e at U$t0KHo*q0PJ$z{F7a?R5Oj+1S%b<)1r@&zdPRC6
zdo<NzH<;<s#p>WbEq?JQ)Qwv-=#cF<6<wRHTEd+kvZuk|$H;7CZ%4=8&vC{T)K6JD
z+BTQChT9AM<v-g~m*GNpc|QY_7c`p0Rn8<%?dk9}E%%#(m}jvjpngomZdw{5>HFD@
zC(!SHAw{1v*#~=!UfCoQ+2W~4|Ib0D+4IB>WlMU3E!_6~9ch08tGeZL4J at 9B6WBl(
zhrs3=)W00wEC*I$-4iT9IYU0FR;?O+Q|4F0V_W+Ap&DzcjnG<00dXS at 3&gF&h`vX_
z(W|J7#m=!$)XpRLw5z~Pd$=l?T%_Tup7`ot^4X8$wZGfb@}O@%zVRw?wPDRwG>s)*
z`u92w4mw$@6i4br)eex(!cDKCNxm=B{nrk1uIk2X2Q8pU>H|kU2PTc1v;~;dw#X5f
zG_HZ(8#c20VG=AtL>AQ-uf2u_TX)%;Edz^G={VjWpP!rH3W?0*O&a{!HQ23Gx*}h*
zmD6a~btV>fO<Uv=^<s<guo^i}Y9#x&f%a-C7V^ODG+hJVXo+cHGMfe8Y&8UuLvo)D
zI=|bN at +Umz+h|!j at j6uCdnyAq12I-MPX*gyC|}!%@Yw=iKDiNrJ;}sv2vxZ3ms&d9
z5`x!up$@<e$GcEFS}#7|6luvhf4&C4+l6vS`|#IYXfkO&o^Ty?aD$zQ&7ebD9r2ck
z_DS~=V~ZXgwWD=WIVS<$JIO%_jrG at 2Pn3TKzjz%T&xS%f0x{ruQ|NgxftSj5;DbOP
zsRg&Yfx37>j#|t`#(4f4(NBSu8vHQ1@`}zG9?sgoV}bdCYJz at Q=7z7hfm#b7+xSl~
zg6){jW+1q4ek2=;>L^8Nee)GpA$`z+dQSQIQE6a4v{HR^Q8}FDHE-u0#5-=FexS^Q
zH&9n}oGI?ujZVa(B`V>mZy%@P3EgOR^oe+C$;-a^v&nZ`U at p{if?7EX^8rKB_!mxn
zqS>U~d-#=@k)mVJSy2gi??deVzJaAGQN^`*YN?ZVU<$=<Z{w}9mW8`FT*MhaqimP9
zc<OGFvIBLQTy7~{xhcB_JfAszqDb}$l9(m*-*`%AChNdw{*3a_^E>h7AoLxFee-;D
zOA(#T at Xy4vxv+j>XIrYDOAn{U&ay0`vIjj4ZGqV4gtz~U+9}`lC-(VRq<t*XU+Im=
zAN9=4)CME))5WL+9q=ja>rgPqAx=Cv+1L}3HGbZ3BUoWSo+qX}5AF%Jv`)5ET#e!7
zr}u=wy?OWjmtHLYI)2YETAX$_;H$;GS~ve}Fa?6|X47{Clq;@Em9*nVJt6R84#<G?
zv_|ayJhLYl^a3yTJLq>wCRSqhimg>hTpNcDGvDvnBW$$CT*R`=k_t6Of#XPab)69y
zYbc|J={E)fnVSDq22*IV1!8;r)GsI#wA`z|plsN3b0r__^Mc#l^4{+S<5<FL;BeEM
z=y*3kBCTG3=mZ8 at +#7hOJY8!`vvAwnV|dM22A?5NPjhafjsdq;rIp;42U5js8urt`
zp-_uNWs&UcL3$*MkEIq~DxXgl(+ckPEx+Ar;CXQ<luPj7UxLh(7EP-mtCDT*4_HZ%
zb$yeb_4n9Ap;s~qbruG76 at Z6I@JI|i35P<X<pd9^=h;#Qcql}cHHIu70Uo_sGy at Mb
z%LMW$Z~GdUo*fFU2q&00dM5f#{x1w}s@?#m9*e4<PZpRH%KHs+uMUNF$(5ym$Jn4;
zV|8X<HNi8_!1MQ^P at i-pn81EEU{64PnM!3*y+zX+g9l~+<%Cu1?-@!r?@(w}qOuh5
z$PGM!fQLcw+%@nd9tw at q8^AUg*#LM<iOg~hnY}y|YN_Y3G#CjBVpec>1z?&UNPQDS
z!xjj<sRJR0LdEPLK2fVz^}-8odQ%m#L9Vj1LL2!ZJ;r7sQ^Hx;#PX27<$k`1gWfm^
zRlXJQ#s{$p-e>Q4{Q$3jc~;+Y{Ln4bn)0H*9z-wSf)6Q}UFusSDSzzF#A9_APmH!!
zx)$S!v?@+^_f#Zzx{fPzYox&W7yMoUx^@bj)HSc{o8NZ>jK*8V$UrEJ4?2L}jxKW(
zV|_O;9>B5T7{Ay0=O-Ua%)<~xp%|CmMg!TzYxh%YVQ(iXgg4Ja&G^yVs3*p(t7;(j
z!Txm{6+2o;{}_fJF^Tt=pnHJb^~<?~4#cg)#09YU+~3g2vjZM0;K$I4t?+@=kJh8F
z<*yN+A?|CztkfMoM|8EA_ofnl&jvlz9tZB5?Z+P_<YA`ZkK&q6N$Wd_cm0NXPCWj4
z?~1-ex04JypCxvH-NEFOm`j6uPe_`3`h}ypt-sLA@)5Wd5qIxFd0}hhI#baR6}gvf
z%!T<7+ds)oEn}U$zR;omy_2i37Y<{l>S-QwysQUxWB-p16YdhlFZ7`9RuxIK%Lepd
zX?jbD{|%sogd6{kaw8|b>wS^+=L#C$cRebJfBkIai4~cnU{_&NQ*5ckj%Q+4Qa^uv
zA#<lD3-;I;)(Ppq<12ngt+2e^k3%!Hq5p at jZ;xx@*dE_(64^jv5=bB*kOT+>D-uyE
zDj@*{7SQtcRV~OvG)nP7uv(W5HXu?kfP~c+MMbNvty-_t>XrJatypQb6s%Rb;;SHN
zt0;&O<TtYcwfFwMf9z*>=RId;&SU1BGYHlG7E?rO(#EZPv*i<CzHWJd9MO_L2!h@=
zyD)kdv_%u5;ltAj0#p~WN|u+lKud^mR-d+XQF;}9>#&_N-rX+tSDPYeM|yEC<EIlR
zUT%Y~8iyS-3zXsRHtJBJOe2G~r2(X%!Q?H-uM!}{9H^i at eED!S9Vuw|+*?3ETY-(%
zd+;*Kw>(;tF`za6=~O&e;mutjNj)9Xx{!0NrL^W~t38s}7O}$3%f2*FR*ao1tlqDv
zHwYnjdlNzTn&R4m-tjtp8!%7P0dt7Qd}HBj%{)Djf|N*}_+5-Ao<|+JiAp$^VG^MW
zT1H*Ii8``<u at v!is{1DDLKb-o=1{imt3C%K${yiLz%0|A-MT>d`^#E0tlzd^N%gZw
zzI&!03 at gike$%?6NkC at GT3&t2uKKh_zsghbMxHQG{_5B1lIsz)Y-Kz`zAEIv|Gz+x
zkXa at K!dYR~n8NMef)w*sJ9Whv-blgvdc+2-<!L!d);!YQ$b)57820|*5qR4w$||jK
zi4`75%DIUiy+tw^@w-e`tKTxQFrvaRE$BZJWxfAG1Vr^j!J0W+BZ78-|CNZ0pul^A
zHM}=5YmDcepcQ|mQ{!)eDO`&AB@&*@28pH-isZUeCmzK6o&Bb)6USoZFU>va#?ZR{
ztr6-%nQZXg`k($%0I?^_s0DO=6nJdPVto->W4ef{z6JQL at l?|-G>b8vnsghLlPG!a
z_J!D=ZjO<4Lfd*kAIPpWnUs*q8&%%}S?otv?x0W?lt_4>WHm0kgQZ_SAe+CGeIQ=Y
zaP9m at 5IAY88LNihtB2pY!*BiYJ8$^CX88TV at O$mJ;g5C0?+=HMCwWj6eXs%dobqpr
z?@Sib*i+Xvulf!uW=x|T at 1Rq7^J*@izD8WeX>AQ^!5wrWLq?U~L7f;0)c!lDn<g!#
z7<A?X(-w?<{91FVDxDEG->gEO-LT~m4i-7c%F?8Vz89W{NeLT_ot%$JJItXx=yGA&
zv30*tth=a!!Jx*1mj-eviT}`8hl=tQ7T-5zo{+%T at jafmwNUZJJKZ)Mz<u*w)P2+w
z8~SMK$X#?A^HN(h_2 at 3@B#3^qRCuqF(>=5hlb-ANvM;oII<@B>8Yg{p31+nLC;hGn
zus6ps^l|-;4He+MWwH0Hty3w7KT%&+UN}gu{Sy^&$3HXX4i;i#>$XlkOQrsaN?4UH
z6VFoX|3u>?{+ql-SJDj;2jufVAjaeJo(#YXx=egb-Te~{V#W4%7%5o?`Zjvv0X4S+
zEnoyv*E&!sV>@N(K$VQClxHXU{+Mm=2%utUb~0BD{f&LNVg+Z=EMZ-V?|z5+vJ(h%
zQ>Y(1fm~svIy=!wMlhwikGhSX{W2m$^q$>^G6}QZypDSJKI#ghKDduYF&-Q{dmjy8
zz#9nqy3nbTb>6X?ytg9UsFqsyqI-uUboT%`-y#j6 at NP5+J9RDVqq^$06souzoxrH2
zPIRNw7;C7$ZdAi)px%CfhK>=LUTP72y at cg#_H`(0-O63-<SVk-{<30fEmipdz0O!k
zz5fvP1@&)zh)O+u%ARE_K!px#Q>~uhW1Qk;Pt5|!BqPa(moMnvqpm$fV;K*qv45c&
zVGs~d-&Q&I#dIZwix7L=YHHnIsGmd709c`R>|$iVEuNRReCIOVO6tU4pqh=;-M`RT
zpwfW9(Xozz45y52rP&n%d_B1l=~_gs`Wy8NoYQp!W0%zZ8MbV8KJsv0^D{SdKO5?f
z1x~<RO at h}uh;(L}LD^7Bwfv3BIaa$TD2~7U8&#06jG3%d|CMx_4W-lJ at Au#M&Uxc|
zB`v{<7qaP7RnC>cXEDPw at X8`5(NlOWCUaH#L;Ah?PA~n=y+dD@$<(LQ|J3eBsJrUf
znE%O_H=J+HaJ~<Q^R0#Xs7H at bu`}dm3N3QLYjLeB!^+hFq0{{_m|f9S&|`Fp(>UuE
zf?XMgCQcfQoNR1=!OuGQfGU2BCOXW~@az%&Sj^9Kb>^j<xBQW=o77*A(ZC52vu55d
zn)idspEzpqefM3_m-(SHR<tn$``oVE>>?^2UN5+9h>)tn3W=*0&v$>b`HD*FL47Bl
zH!On2UVXO>p at g%=FJ(`}UXz4-Gi7(g9-?9#S5xySyKu1~QWl8G_<{Z#!T&1ia1TJX
zKT?18py7-NYTOg_1Hdn+61+u2F2v<=Tz<!k2N#lY+PqIX!G9yaW7=Q)#(K0z6d1TC
zmCY~GM#;|+&O?omuZVAZZR~TwEnBLo*%D5aoy1fr%`c8UCO^6$UJk?N*sgfZ?I^xh
zN~J$^)Xrlgd(?#j$*RmYIjyM${XS<-kf2 at _2AO1)AgJ&AxX`CjDhbhZzLJ{p6kxqz
zO7|4?1AyN86!j6N at Z_?iec^^IH5+Fghy+a6<)>g6&QV=YQ4iZoTZ;yJ(p$p-&*|6;
z@<vm^y{L2^or$=t<`7zIrkW&K<Hl4&B++8=rE&W&xDq<{Gzl;sOjlRerZsKsXAHWW
zYP?&q<xw7UAaqc$vx(qf*z%*8Z=a80>E_j-@}s?I7<#^%>hDF}$@4qBXR{XFl!cX%
zPvT at xb)c?@w&+dHp`A^xh8H9S_1;w6dPbZ;-(`zJ)0|n{w7qH}sME&cOC({6x>oCA
zDoO872{baCOuxRy$8dwE_s;7Lp5ZjoS84o5NWl#Ybg{{L*DNiCYtFjI57toOLa#yL
z4i+6&2O58_51mC8ja3&(q#I1-F3v(WVl)-m@*rRPUCz-IjvrFU8K*7Mh2X50Gm5i_
z8q2uhf)CP#oE_$J0nsBkK$?!kWtLwymO!I3qRfR4b)W`_U at ZMyWX;1?2}dpNXQ<7w
z0nl*}-QunJSR7Q8U6rsQR+2Yj#wMk8A#)YWrLZAmK7qRtxUzH++;O<(2sON{9Pa;y
z(fb_j&(KNS6Ng2gWIF!A=-C58Wc{eZ831NrJy*h?kyvdK^xH;I24?f>&l15pey<;O
zih(s|{?BH>>^BJ_9Dp^atMUIHl-$q$IVjZWel%wCh<#qfYx}$u)2^%QuJb#{w(mXx
zbi{}$5-M!H^a+^b)aQu*&9*H?HIJ#V=V&M+nKC{HsQMgr at Hy%<=H=mtni-$v0`bi8
za#}YzdcdYGXoZX~ec)3~wLeEy at 2w4Ie3|nw7=u?q9=|qp=+l3tn9?Mvjj>)iMUD)9
zQHPlAo-;d`6G1Up0QknS<w&SnxPzfC55`P$i-*23)6Ju$hQ}SRduNpnsP`@CdovT>
z(=;3RoZ1iY{;N}gL+8O%9>^NIEGTR<A+abRZJ5P9yH737a`^aAmgmQxT6{<L+Hu{_
zGo$<f_ at aN#r6ey<6Ndpc0WV!OKA;Z2K;x&u5%>~^8r^bQd2Sqz9SG~1S5t1ds at o2A
ze<FPgw>xv;Ne5Bb&w&P2F~85V;j)8EsNezAjWLFrKY)&%;iwmI-ZT4i$PtC1vV2*>
z2GuR+bMb<})&K!npN0OF+B{Sn6|(M$2lI$my_OYOk0T(>ulTYvGdgrT+^NO^RAKiG
z+`fbdF{)Ooe*hiFYL<Rwp_GH at q_Ae`LyK1h$S4ex<*~yy@%N?uoRe)O4Mdp)-nz=>
z at 7vWjBE`L$D|r^LVWD`(AS#^*r<ByVDB*{VMe}Z0yodq`8vV?=<#uQrF01qIPFW>q
ztnX?F#^$wIynqz1rydQWV)C)XHu at Q$D0D*1&zRO025|LQc*8G53IsbCQ!^}H2|q+u
z&AZWW^Y^5A4s`wN;qAX*)PDuDB at eUtvBQc)h|?CYGAE5AtwCD&_I`D_8uQ#G{i-C@
z+JI{|cAH`meo>cD)|Bn2aZIBXF6U1?qpnb6a0kDn-I{P-TQIi$iD9wnSHz!~4P=fh
zE=qkEW)ty|!3p$?7Sa#>j48^Fy4b<+ at smKMp~GdB_w!!${%7jXm#9xlkqYS(Smfh+
z!Kedf_=%TMtB%L9E;FW3iz|^N0j`7^j$gkI&$0U5)M9)bQ3!XoE0NZz7#sRKYe=O1
zWuU!D7<)bV at 7mSRC0cObOLI9tQ_F|IIt!tyhfq)dg>M+Ky7_O=)D+FmX<06XN1nlF
zMrav*xM9^m>l{LZRGOM=@6&wHtpV*Lf$Tv<Ljel)b73dOZ|q0cR=F?<C+q*WHf?jv
zaZES)2Z4{&pf~S?TlMkR*5LB at op9Pa!}wEKE_)7`H#0p(jekyme#49&Z|`({)CiV?
zIDViK5DZYlB_%!Q<WNoT^m<mp!0$NHb)Fi}V7iPNJF9u<z<BB%2GfbwK3>9L%E+$q
zn5<DW5t&V4Y+Ssa!S5JqD!FA{{w1Liacj!6r9J80GrP9pvYvEUpq#Ik?Ck7GGo-|-
z(4sHk1W3Yobm8jsrm`yxX~VV?&!^o<5L9;JjMEui^SaXEHqYp(@IHtVd4ZM?v^V*T
zm)(spd$MJ;mb3t6D#$F!t8JTuzk!}UYYU at 6T$<02<biH%#gU}h7^f$#duCDs#_gMK
zNQq(nS01S~4^)a7EG(9*J1y6UO%svjaJMTROcAq1o}7lUfIP*$0(#JR_4Er^rrM0j
z$TPwAIYe at ZL$)K%vF>MI_r}*XXIOQJPc_<AWlLl4W$l6BfSF(;pq4iDm8UuWUk&kp
z-4J3^F*ax{_5#>er2N`l0(%T9^nz9$zk4Jl4CvN^8G^adi}&D at ewn%q<3TOFuJNGd
z`A|Rd{AMbN$y9pKMaRB|3mj$$o9$;_4fPHt(|r`3E{8hHWctSp*LEOuS18`p{=z2{
zu?4k_g_RvoX`R(jNPC91?HXT<;3AB-=&I#EDYv-B**}2FfgqNf8_ZDFyE_|i0m`Xm
zF<spcp6d5gmm&O=UZ10|0lBj=I549F_iP%~HJVz-Vvfgf-K7=hcn9}Whgr<PxB4yr
z*(A=E67d*s at F&YP=d_8c+3}!wt<@T2;CGpZ_+7^DBfHm7A~sV=9^94XvX40o!p{cq
zT~h(^$~0}9w&kR4&mzDBqc at H17R!I47EDBE!`&h0;gVE10#FqX at W>m}MX_ZrQ~4i9
zRWD^l-Ruv7=<aDXF2|Eq8e$cWz-x>HjRnlX3S6!>tGVH;FirX-w3OT{BCE>EPCTD_
z2Z at DaML-uv<tIlS3)vakc%%J=ZTdoGW#+Yllhf|MYae)ZBas|~MY3ZHqFNFe`V9lz
z8grpGc5|aFd_Jb}+K$R&6 at tR2PMAz>Y~X#YJ(hAOLsaVKb!l^8TY+t?BCK%hVrv{R
z*Wy8JFGgf8WPMZ3_gz^RzbkErsAI#Q at JwXl_xQSBXDTW}m5q+;xo}cy#QhV(lM!rP
zFL(d1&dpCs)Ho-WCEZBRqf1#XKcA12t?)N2-S2T`=w at L4zHes)kKR}Q&Mvr(0%whV
zmb6G+b<);@x1lt61z_rfkNg@%okZUu6_-J;qOm at g<`=tzH9x|cKOouJSo7o2l+rZg
zB1K^za>1<<`PVuZK%bXuy8f(0j>Ha&JT=fbrV_d0x2i8%d=hhB9H&|+PcRZ!Lwvu}
z?Om~top;9?UWt5J0E&~y8bbmX@~zq|?hJLA1|c`586tYn8QPBkD*soC3qRU?5>tma
zFw|}X9R9wcmpLsO1g7aQ|L6&p*mQD&eNjrnb&BsDTSU&_7d9>g`TSib5 at p2*oT6ZA
zP63R9yiZ|R$`M({4Q!W4KD*(wOI?L22%82 at Py38GH=FN%%E at DJ^=8|Jj!DS~0&NN|
zq6O{neDUeAV9uAx!wdu$^V5|-9Et*~2yboRN}Uq+tlhiv%aWZCPXL+dT(RtU*(^p;
zM?t8*730`X=6`gd6=&2g%Gn6e-Z at HwF+(IL27fut?+5Xdp(t6DF*EgTABd!=_c7);
z+0@(Oe2f7Ght=n6$RgH)!BMaHc?84E+CrVcnC=o>cX_63Lj!k%B5a?@h_HyBiRhYh
zV4Xg~nDab8ES9|^F`RjoX%Mgl%i6*&NlrHsl^E}mr0Ej1oWqnbT&O}0Q?5MmT)izp
zkU0U&+}W7A>!)mKAW~opQ6rq4wLa(`)8%5M>nG|L4pSOP&rfdq2x+6|+p#zqxzVtM
zxY0lM)oN=2t8E32Y;uQ}h*KW6%&{1p%l4DMwWpG7nX<W+E|bnkbeIQJtJ<)*Ev&{o
zGga>p%+>kCVC`w$MASkn-hR#wMj--oaI-%cn|l4&wX~e#o<-Fk)XKvOkAHI0G+2?y
zC<z at w-9a8ylP%Ma><0v(5TKfz5d;C9KQv%)64=$y)>ASsGwORof?Vhl(7cR2WMxbl
zS++Cp<1!rvNSdP7=|)ZJ3wRn~JyyY>9|d at nLhH)VVoe7ial&}P8i7_o<iGwViF|mc
zoV5TTUD5>*EzoSw#l~wFDmU%TvTgbmu+6+I&q?W4H4J!1GAtZkbx9PsjQ&TuStCj}
z7Qf+&5ff-o$@c at HDYswSil{dg`+45jNdA|x$V9a4t~F6eD=xDsK(Ilfn_}6TKU}@)
z0Tf(iKg|QZgi1PRO_(f46k<16G2AOY;1Y%XY$6FdadrP0piQMxCV#MhTl#}1)3v!a
zy;jQ%An5TRFOze)SVpvv{VZLv3aR}isj6+;iOv%)WFrvNkc4_#V8f1IBM(74vjB!r
zzFa74hmC~8kTbj1X;wCR6oMT3O3j&3>$GZh!E^}05et|IN^46)pcLbMA&@uKrMAuK
zx&g47SP0Dn_rP7{8gj%Cr6m%(S0qt-zRFy{En9*kbq`+^hSG)2qI)@PTjD}jFj!+z
zepgJRTdSRlTRsA>(ngO+i(w~XT5u%hPw;+<BYdAD57a+nY)wt$iX1163kfF^uKR5!
zzV5drO84}pTffa;lDD5u_*YMQ|3Y<ZNRT=?#9u8AnW7fgdIMoW5Ixztrkc)Yx$Jdn
zn*%4IrpB<8-%)$BGo^Vb=c$YBn`!Px)^~sk--i{B)OT*y!QwIuCs{F7I2T0ft%vM5
za{QA~WomP+_v at 1(FbtoJss#;j<9Dq5E9dvug at 8t{AK@~=L+iuuPHTQvvH*0TW5Un0
zjy&KW;T7^Xt{N_wD*ELSX039td?J$DG7()MC3iI~kt}L*{arG~^)AMK2-xhk_sAV;
zPCr*ItVGhL-MZ_260se*Hu7UpB~sD`O~0*XTl7g}S-z4s{{}1<KkLwcvXeAUv{({8
zew)cS4m<9WSCdV>3j5q->=z6w7j;I71<rqwIWHqJ>&K36Pprl at yh>!#hWSfYE~Sl>
zFsN_ at XZmMbq?;iXidDoG72TSjx<)sDN$%`%pfdlTqulzP73S%Xzu`K9c+9QeF1pW(
zP at Bpy1%%F>T`8r|8dFo#5C^4cJF!4=Bh!DgtBo_8R2p~i6cr4ltR+sCXYS_!`i&^Q
z)*?}2p>kHC|H)S;rJy07JhlpqnwnGZK+rBf9D^y7-6x=#Ih*Z${5Pn!a3aQ68J3JF
zKTSHC?kO-^UFd*3 at 0J~V^}Vp{DE&=ZBYuAsF|VxU)%Tq1ds9k>T~g6!uU7i)j4I3B
z*>r;*xo}@OBBLcCXKQ%R{}KK_>8Vu$rh~7*1%1<>*~kXea%!PsSqn7RDEbm^PMOYA
z2L(*m(U01$@0ETz;wy`~3d6FyKpEeUltH0FrY~>)-vFJwN){w!%I94Lsm{Jp)9{Ye
zLuw%l)}*O9n{KUXq|?&U>=vl2dH9$A4qslh&?jrVus?-!WpMpH>IkTjfm1hx%!N+0
zr#t%cG`ic%cU!wn#o05(<mmr~!CYHA^Fl9z=Z=DE20+(J-*f|JO|#WnknMlxwT3?^
z|L^d4+4eIVD}BTQmfGBJ3*B{folU?p0hdADwPy-#&JMR|z at 8b(hg;T at XnR^C?Lcg%
z1Jii|3_SWe5GvTA!eyIx1*LWlmSgOm>6QhW?d#UtD6t94=43e-DyV7)W&|nxB(2nx
zFgh at JTg3~vQCA)h)mZ#LT+udeSwb)%hE{0BeiKDKl?a|gZ8-6kEOvxdcOehZJQSL&
z(+XURUOA!?fi4JX3)}GeK|1c1MV_M!#`?mo`RV}j?Xn&Exg@=dj98UWu;xwIOZ0Ya
z-Rr|H>tQ0a&I2p56<!c%mCm6_-vx0r*K?0_^FPwG{7)L*|D>Tt(x5=hzae5yU=&fK
z#mwYoDGM4;|IsM6c;!5xErn&U2vbosQ{4k-_a+HzEDtack&v35JqGAB58ibK&DQ`K
zmFWPb``atM^I{R&bNt$=GJ2cyLyQgS{-CU<)5?GvA8Trc^g18v7co;x!X!Mvw6+YJ
zjq`9N{D!jsrnzu;3~3}T<9ymf0QgqVhCD0H9?URy(8k at zNUxkC0?4haoKgxlEue>C
zj)vE-*j~m;&wY_Cz0exW!IK-<oTLGPPIzPhhPO>#)GpBlbL=m)s=19V>v@~%Es8;9
zz<u4PRK6qAR|rZz{SDxVA!B1(7Y$WI9GMv`*i}mA1Z2P$!5o;EIBgmCUAfif4<JpJ
zaj{{s+RZZVP+ITRl6?cAbOwVHQ$o&97wyjvHEL(gMvf6Rvs92r>|=zyduE%(b1<l<
zE9ZyO($!n6C0$PZY-R3I-^X7Fdv01S6lba4!4nU^Gu3{>frtX_-w*Hij~m076)r-?
z>276>IdjT#!|QWY&YOcCGd{FAetLl+x-ZI*)ps{!z7FIyZNW$dl-<^tG48B2$T2#>
z4CB(Cc95XV;vvly8P}AfNQ#@FFn4XXhA09wL6%UIuzBifDBrCq&l>Yc^D55QgoJH0
z-naQY=xd9I@&3mB?<~LmubxOlv<V2Rb&5;TUfWQ)nvvyjZM@*XLiex at rx$n|BKu|x
zx26(A<capLDbLnGXvDJ6qCPKU1}N}b>ZF9}%7WEWH^3JL8s`ZssCH(Kq3ufDotbl@
ztTTn)OV#;+g?btO_m84yP#N|rTrGtEv{DdMf!vI)<eQou+${D^r?(J$v&OCtpuTfv
zI+LK>U=BQ|{w}F?#x;(hB=?GO(cghtp4Y~Qm7ER^nO}3$5Ng_jE4MBV=Ja_O7x&%%
zI<hP<%R%=%ThlWgnz6#3Sv-2ej-?c(g0uj1#N!j)(BRW^l6@&0!%RaOyX%cvGmI at p
zdF^Gv0jB1=FtdGNOBh5YXvy4G{F=9*7`Ei#q%0<Ei6js6>+^y&QGdBG9p5qDvpH at x
zCxv0bjIPRuH>0X>Wsj#(*VFzr4kr5Q+_e_J1hKu*+5!Z&fN?>jX8p4TbORE`Fg<2o
z`_1OS_!gR5{S0!aghMc3r^*_fLEU_x9hcz3oX(l&xc!My3$>ru78=U-1uZ(4DMChN
zeeY9FoKx|M*_GJB^FEuY(__F`;`pj1RQnjFG<2%E0>?VcVZrp?_8gp3cE!58Ir%rM
zHvi-;P)Gpp1e|ehaM at QrW^9yKJuArAyX-4|R at +TV>&g_7YYTUNRR*}R-ekDDe|8A6
z9Cl_G*4o1MQoHRiyb>c0Sv3|RD^lVSk-EkqE}dX%)7PhWPj3*&9_V_Y%wt^CHA)aP
z<@Y~0w#)lDnG?c<$*VA)sR(21MqAHHzLP)(ACqg+#(Xf0k$I&#6Y^Qo%q_;FKdoz~
z+FhBUq^n{2k7<SsM>z`3OjXC{ulg$N*vsw8R(BrYM`g$7KZKq?jL_V=L>`fvtBgy}
z+t-M!I<MK-Grb^e`!xejY$^85JmbMWA>2?*Yzi4ew4B6<jfh75Zu5)w2T6PMzXNoU
zVGM=wF~4K%to6-Lc0Nt2($B$VA%q*o>ydZI0+uaJ+8bHbp?m5J?>V;<0rcml;lyUd
z8VlQ@)tJOfT?qZzs5DY_n6d9ncbKl2`i~papA!Q&x#=TqM|Wmr at M=za<HeUqyRLk>
zMqMZ!$M47<B9Z`yi8sI4dVu!n0vMe((}-Q^j=dwyUhOREt~=A$A#FK3s+JoRCFM?t
z+QFS7hjzR&DRcHX)MPgkB%TQicx%}5)o-#j^AY?_EswcH)NU!$hex}&fC^Xnj1$h(
z6)7`T&3Y9Crp!WyuF-u|(*opllK^S-UcDi-=63gVLM)vO2uHG=+d}!Wqxncv5^_1S
zPy&y9(qv2@^=QfHfYpp7-6QGPnyGDbb&ui%z4t8g5&dD83H~LsxVw)M<!TI`3W2oC
zU#F#hlrcS^zOh}DpUn7=GPaMnNI`N2cRaj~CQCQ)eHQ+lJqN_)O9N{FH8Jgz21fa{
zQwKta)$7t|KZbs^4@!Z=CdzN;v452Lp|xFg%V>8E^PKabrtYdae~)<cc>0+|PFL{d
z>k66{7_JUiFnr+0eAiSCJA%f%S$OWK;ZDQD9bP3CSWSH=XNEFTsy&#l<0H+XNRNNp
zbozYuIHu^yFhoKQfvAuOB90kGMP(y<-vCRr2h)Q!9$_x0R(LRzQ_7+2xF$3s6?tz!
zqPbuvT*!b|Ch8h at u=cUj at 7BFbd;YlqS%jPeD>-^FWc~A+pX@$iIeU!u?sNK at x&mWE
zCnY%__oFmBbr7si!Kw#!m4GUHc`}vW&_IXZ;dVo6mVQQS?^U@=?9B0k-m*BEzDy-Z
zxn;A#R79=vWcp2~tJ4VrUeZPR!}D-}Z7b<!T!UxSI>C{@=(zFLxEu^HO=WQceSr$e
zi)f41rBSy%nQt*<)Mzi}7;-;`h38>xe%7hKb9xae(X!Q9St`{mtB#lTmg$56tC3Wn
z;uC-B0RN;L4fO-1CA5rGC at q3B9I1Un|8 at TMLvPOh(*d&6YWk|y0AxkFai)p&E(eOe
zBYGNe?o<1{m|_Qb%=VihVq at A-@<60P``vV?Hvl50!Q=8;i!V{=!ncm!Nz6G7j9sA%
zkEjU7RI$x3(n9rrnKCAN^!^?v2)y at t_E0hfQz;_2wTSmtgg5?kj9nUMoUtA1fi6%m
zq4h+*f;k<!QdKYm#?gFXBChPy8A8?YY6(Tp^KX|}H4)(P5HZ8zJE&aMUAGkEmw7W?
z9oOAU+OMy^&L)yHQ=pNCb-#m3 at Mg~O0UTQIG%Klu%$Y8}_pbw!=Ff#qtpDMSCSLYt
zPLRJblk3wh^8Mvg9xl5dhb;R>;G9X>0(4G!_%NrU0CBwM!}LI771RbF=38V2pcF?z
zmg{e>$isV~6BG#Gu<s*x*zt5h5YK69^4<jlq=ecaL at DM=TnNVM3D~)v7yCkwrkDgS
zit(a9oMGo`l2RL^#JJLVvBlT_z53 at gKVKG%^@P#sgn$=uf??#dIy!)P_)}{^P?CU|
z>Pp+ at L{NrNiuzE_o2zt^$Rdv{l^!fv)SXfU at 06H=W2 at LX2He%+_1)5LS_ec;8&x!5
zre7s|6YL-W*revy9Ry|in94z?YVxTAN~W#<#(w(P6ilAf0q4|4)2|be-cA=AHDj?O
ze at GCN0!iaLfHZy`Ei|6ov7NfBWco~eRb0U8QL9EU7*ur8`D9CL;*bl at t8fIK2C3th
zOV!3&1TfVhzJSjXX=+{&^xFCvr#(*fWzt?$FN}Dff at m<x4FHUbVIycaD*N)jf52h>
zn<$!J0swvinvCLNAT%wv!mg?2%!PmCnF(R{4#2aEhAWs!AHMN)wov03ERX_;-H8DE
zVp9Y_n>CDU!-i&xT#yC;i=#USdY06FVb`~ozX<Vi%>gZ##$IEYvWR`7<)>@nv_Bbc
z9}Wew0w)11Y_Ld+c3%bTA0n%V2NR~tlF^F#GoEiY>1gGvZm_nOQ6*!U?kMjW^~G4G
zcFy at 7<gYjjTDU-ze)Nv?4T#&Ue+6+M(ZP<xdrzY`z8>(SgKx~}Y?YZFaOmfj3Vn;|
z<do$pyBnB~+306ulL8Tj^7Q(G(1xv3shqc%E at R$k;L5Mt=I8|JO?O(8_T=Ssr%-#|
zVoqa3LtSh~dBbLSPmC354Q_^8o|R*Tt$iPbEZuuP4q4bANjZ&U$`~uDpmEH=2|QU-
z-TPL3XVYE?;P3x{0Or%W&KMgiAynE6&pMZLCHnQvFaC9s+A)s#F=HP!){i-cd#!Y9
z^ZiCypew at cpyK_Qu8bb)eLrRwV?H%+JaaXRytb~9x;&n_%yyMmg$PNk&@x at 9aDS$P
zVWF1!Gou;Z)HnWsC|!L1(RJ#EKl2&9sbQ$GWO|6M>0|0YDy9o7p;~o|8c;F4B;Eg-
z{;_ at Kr*DfZ5Hukn;8*arHSQ at oP6bV17AuYSy^o9cB3=ob1I~c=xaNeQTM45BZh=%{
z at UOsQ+LstVAGM9@oWQ(Fo}2LT$q#R2P4v5y<#7+``axWXNI*)F{gJsWJmyZS_-h1p
zI3Ee?a<xCQO;lMaI1R#VK{_EU5wz+K?%SF>9L at ycd=TztZxeyQux6)h3kVZ{Fng~;
zEi2NfMTXOk0^yWqB2#SN^m&%8!jvt;*M;PM$X at LDV+*x-BGZ!`o-CryH~58`!sqm4
zp@(%}4crtyaX at OYV-+(To(Pem+Yza~g*bAdM#d+ef+trc1rMiBVDWW0FGRvcAISkN
z6zk_>Ze2pzgPhg05{5V at Nf5k1?0T^F+P=MIB7yUIXL%!;nd~t-GH^kqUMF$B;9Bbx
zShy*WaI$z^5CIhAh+~-r9;4uu;+yW;XXwrST+8nHO9Js?MO2kU1W-uO(-qLmB{aJP
zX&YwHX`u)0q(KCbl5V|*16D2<`a?<n?oFbKeMI|mAzye*eXR~L%t6`$4)U`1>Y|9L
zXFB#niVg1}DDenh|HY}}UGrJ|&A8?Kic9(#)oPZ!v2tp__n8tDJ#cU1{^2cmHqqiO
zT3yx8g6|Kj)Yx}RnqNqI=P!8*nd{x~iU+b0dbCoTNvWpaNq#yfFVa~{eL|ZU=hWlK
z#mn$&xk_ZbC>~i;*A^XaMwHOC5K-38gyzWE(eQftQzy%8LnLL5I0i2a_$at5+3)J!
zi(j_Bs|1+mGicwO-HKxX*~Y?hvy&n at +G+_4?hTiO;7H7UT&5<)mB=AKYbEgtqzG2x
zu{Q9o)fjgnbJ^SZGGqOY+R7g%-0q1DTj2_N40`4Kp(OpZrsn;$i)RfzutD&$bhSB)
zqpbry9Ny3TX2pP(C at YpX$UHANU%kq7y?pb<^5hpRzz4{50?%K{Ix#L;QWvp6Z`O^4
z*MC6V0bMb6=mzXK3Z&#+^F;J%0+_dl7TbiojhAE}^%pF!KPWtwZ9VmRw%@P_Zn8i+
zOGJTQ@%!mRrJg%&aS(MKdlw!)8PlPu at HsV?*0<}uq(z8HS^;s?B8LaYx%j&9nO!}L
zox<I=+6S63fp?-on>|S at BW61b*7|I<vHE^&|0xBrFEYgg0v>9JIDSpD{U4ZY!ACTy
zkg6aiTkPmfJGn$Ig7TaL>oFnRs_M`Y0Z$~0Ix~^6&~t#$Wjh!SM^a*Q4uBVcZ&tRG
zhTAs-o=~(bIM=YFmNpo6&X-?s!(}OV_I(p!Ht==lpxFbUTbnU<Zaqh&E(A1dlf>5Z
z;l?6O&C}F<?4CPN9fcnIWcn`bp_04szPt5&8xcmUB0>~<Wx_B7NdUqG8~dUwtB!`z
zz0(@C9l9X}q{3c85f(1gj*=9{D;FJ8Db;(KMXvmK<p=j}QXkgDD{s{cBrEdvPxqQ6
zLn7;okq>{sxd#RZ63(f(n;m{TJgst0TEP{<RP222klpjciSpF|F=fm&M1m(GSAeMf
zoaOB#bWqbYs<8*&H&Ju8#Ehp1lwr#%XBi(FwbI2^REarAp7`}rhVjvzCq5F1WMj5A
z?zX2k!I=^We`Fsjx<Cm8De at eXlidH~bRO%o>ulD(x0jWM`urhbwg0<#dZfvIciH=J
zS1 at N|kBzBNEsRG3lLL^+_vO-tC;{1+ERL7lGHW^dT$O;ho-K>nl8EH~_WVP9M~EVD
z65{41U?CQd=c{q|5GVS-!U6FPL-30m;)5i5Q+3QFt#e+kVY=n5=Zm(xMXX$OEQA>@
zC}zZn;(h0&chAjTZU{f|txE~$b at +fTUYTlEDg6p#KME8eZc-;w&L_g-G12-sZC*<V
z*Gq8}2{&@EM0O~%Ypm8cFL!%XMzA5gw<aP!Xm91=1ocqOFIR^i!^~a^vmksAE~``w
z?fB&?dB+;I9|_;H2}@LjGJXDRe|G!SCq=O0Krh%4Fig${BynpLbNg0SqT6;5M}kP{
zkhk2FY1$H~LfpE>s(c5l5|NUokkPd^um|=jM0f}<>fWh;dnv^HsLOX=BnqQo<EFT^
zwZG^Hy|g{N;(HBjBn*%FLayoa4$=}X`HwRefUs>GCJliP_+MO%munh0Azhqpat#r#
zW^VqxJD-%hWSxcyJASeB4d}E}^tn3Q43NRgY>#LtZ!EYvgemorO97Mw$qH`O&HYhT
zA=L~}3FrZ6K)4#iGR!J8V*pfE6+>4BJ5tM53Hlsh<Gm$>OUP-jKoJt3v%wrbsf6_&
zBd5$OunOt+jUZRvs(&b3gLgHFw;?Q;*}iuDBu(;CY!e~pr&Pr59ZYC`;c?#516Bh<
zikD(BTEXPJ75&ik(e2jy^6!NdSRM5OWkF!pIoOdHPq`)~o?o5$7;*LzRv`&XVrw!5
zJXaWJzchA-ae04Ab3A{$ad~(C9v&$cWHvKhr923>?zzSX-TAN)o6dJ1iDYuih^zgn
zo9%Y4>d=vsyT%T<!UlBRmh&4p`Q0%Ft#g}thyrmcZ}ZSZ7$;>zNSz!F8{0ni<($Mo
zEBF_Uu|oMmN_>#x>hAnZp`B~9{!-a3av1zs=i8sT`dQa@*FFZn;X?ZhoKT}#Hd*H~
z1$K1nf4Qo8j1Q<s4L3F)rvKq;`;+1U>nw+92XwIau at wHhz$Z at +=FxrdU%@f1uV(OJ
z9-p at MXBS!?%06VrOPtd8hmj#n$(Q<8Ya|3a9DA6^eTk`xpQZV^Ypg9DR^fKm2r1Xa
zPZ at mToYq<Y6jUzBYKmtW_73PmCgas1Z{v<36Y<F*Z-L&kyLOl2F_%Fa_pHX4#CYGw
z<`AiuP>e`<D&<j8hzt0Zf^Sj at mYs}K0eYke(yp%#amT+2vB%#I5#!H7M4;CZa0bU5
zRlCD)2pL%ULNM__CHAne-YS at vhCl?E6XFw{AWmRJz><87_W=m(S1YY~LpX_r^l;GW
zq;7J5;sV+J0#*=}JRl8PgsdKk?8<#8+nD)z*s;d;7cqNI at -#Jr+T8Vq2;9jQYfsxA
z3YHt4u0|2BoO|!)K5N6&wlJ)g4ae9%rB9)aAIJ-e1Dz5?B>{A84ng5N)hytw*N3p8
z0JLq%TyI8jHAC8`U?u9G(n~L5Ko`u-yuxrztcrTo+HMc~6zSL2akPTJ*6q!492rJy
zTr}5J3=rG7TDRVsovZjhryjt at lOU{5aX1}nKEyPAr at lBLUP;~pgvISz`;$A}zcwz&
z<Zq<GG6SI04-E at 09*#${%+Y9~IFuQsNIfA{fZ07GUa&YlPTMyoD71F(q5ZXiLd1KS
zeJnA<8yi^Koei)c92Nnw3m};p-janb`ORSM+lOx}VR=muArK3~wI41wAn}nKNb|l$
zq8%S(=M*khNOtC>eI6!mKsYh6S at vPUL&ja}nxEJ$WPnN=*fHC>u<!}vSQ+CCk#}6O
z8sYeZag7Y0kcT9G&0%&;2g~t4VC-2&gkB+DLE5LVK}y&l*qHbrQF_h%#9R(@AM?!9
zybo(aFGi5wZUCfGHRnvf{umAZNH6i{NVwU+NK67~b~+eSSO8n4d}@Zh_x7t*q<qwP
zL+h(Q1{*e#$Bc!W3uG}@Uj4g;o5PTp7VCfb6@&w!2!<gNLTEr|4R0bPm!Dj?%6twZ
zV|J+pG1JwO7*s8cVXB>Dv}#dIsG7fhT6Z=;&7gO}ix>apvN`H4<|RnSV}1*npr6tF
z;-{ssAp^{qdNAfQYTeGH11N4oFdC8$CsBS!$U|5$L{MNZ*`NBvWdqEQ&j|@6 at hc&d
zaDB)G{Aq{^&kgaxkA-;uR%QjK{#dQsfbJnZULysr!N*>(#tl!h8P-X5{94XQYb7uY
z2qgc(8OP^qYGYd9%vUM%E_KhPhv+L8ND(6kbZRc3q~v2OeFy7z7&KBRIbRL1pO+cX
z`E&$_kO3Ke;do_$G+;8Z!}nrnqJqKPKAM#{QXrfU;X*KM<s3R(e{4N(b7oK&JqNrH
z`|t(?14If`+`x{V#NFXv7*)Q$nhX(piN(@zGm{-NJ03e at Rw23K5GEKu9;p0-nB;h@
zy<Ua%%Dq|bOVJdmFs>TRld*8 at 05gHDQE>MVg`8ck)d0ENTFT4~2Av27m2Cx7u?eQ}
z7P-RZ?FAa@$E`{UZ=}E+k_T5OBE>rZZ$W|#klFZU>#4`xI(iueO{!+VB{&7n=HVqL
z`Qb+UlXySWm>6gW(rVhJeArNWiD8pKVVm9#T0!H6 at P$s at P8tTSwZeAaw0*1P9g`8_
z1rT2SD*RiB4@&*o!pMD0r>FWSJM5yXtcpLpO>i>B$?{U#!Uk at P7fbTS+ef*LcZsSA
z9 at RB=2_woCH0~TjBNf^kKh4$H#54ne<7+5Vow}Na$r{xn=;D2`%?~R9uip-(D2v>y
z0`-Ll?og}wKxoL?z2_U{#vtzIaV=ajL>~$7qwODE^saORnw7F4`U<9icMn31H6VzL
z@)j6!BN_~>lX1Nd2ZkMi&i$A+Jx6Q<Mm#=+42=kv9s*fo<{km+a7V}t$U-tw#Qvs$
zHArfaGk-&44UWEyFhq=Njhm!L`Z)n}NF*)523bUguIG|hEq+l8gSjQA2g1Ax46 at 8U
z64coj-NRW?aG$gO%ze%bMi)mL+C|R75zNgEbNF7!ESi^N$UHh4A$|}{ct>$|BRLmG
zb;46kYNJpRC>BTpzY)p;9i4gY9i^eJ4Q}#fRkXRfeA%3Qj9_E3aB?=rTdS!3 at _)Pt
z3o(q4wKsCyJ`o*V3U7uAt0t0gdUq{nO~3H3UaP~CVV@=`b$Qk_w4H>&Wz<3ZT at KOG
z&!mrHPh#vhd<Yy=R_$O%Pz<qJ94jEx{p^h=>L;STb0!LUowjl#jxm_(<bIY~)Xz}2
z#@fSue5- at Be2($9QQKG}^CzByCs(BbkH1u%QpE4j{AbwoXtRDcCf4U+Zn(ICAp=9@
z;TX_s=L-EW41_i)Wu3ZDwSorCjOw;~+YV-2_=B`pn=MM(oGciZ6Xyin3Gn);bG4#b
zGtufOH+a+0IM5>;>CqarWmjlpod_5Q<-pA383>32Qj;MP?w{(9LW>X}O;3j+JIc*8
zdm==fMLr-Q8$B9hf6CA4PU)*-g*^?Vw;j=>*(7EQKA7OK<Fo7v!&hNKcwsQDW*UfN
ze39Ko5GFSL3YL)L64r-@!P{vGD^w at g+%1YjR@{kLv1WRq_CE=6tI2|5Pp|ieq_l1y
zDAy#kdL5dlIDN=#_K-9_Q?+Nl*_O9fZjtBQSFw&t{1K8&!u at oDRe$r(l~(n(;_{x%
z?v$c-R#@(PILDZ3SlT7*xfzhYc2TU)st4Ig0HvNNIyL5pq&@n#aqL1Hqw_**Xy=8W
z3pyRH3z?EUTR(M+nj;n1my&ZWo;judi0}t;FWgi3?q*>qVS{68K_yZ+!=U}{cL>Ea
ziiC#(p2ng>dLR%+R2Xca-BX{ZAvMKk!)KbBmn2ak5pBCRw4JsFS&!MO%Pqc~AINR=
zVOO?B0FUdl<v{jN at khc%n4hUUkyEk&R}xN@$VGR5grJ=~CvtXgT=!$jZEj6(a-%Y&
zW at yFQ!<9(m?};R5lRdOg^w_HxAu9bOBnUKQf=K`h39WUyaYJ?ugikRE6FHkgV2jUI
zf&WP$T`))&2-EH64xLlBx+_b<wDI38(<Th6WQ|^CgKSq&`-6Bt*}nL3se4~W6lZ?I
z4=Yx;g4Gc}tWfR at HGxP&WQWdi)b%f<2Zv`lqtP`^wQ#Ymuh(9KjQjD>Z<${U(A(qV
z5(YQKh0WR%_8IAhv%uQt0dV`03vsrZF~Bih9^S;NvD#lfZCi at CHoUgivoj*Hya+_Q
zP$+BEn-Ravy%Ln*WJ{Y!_36$gXG3R`8`9Y%)^?J~w&PODHyljZxXqkVjd0q$VvTCb
zGFDxPaP$s{b6%7oO}!Q at tKd^j(3Ml<${a&-1jawMsQW$oWNF?>tg&jOVrXgyU7qZw
zz+`-NzLkOPJl*YNb*@C(JN2{r!rQ{iuEfa}=Gii=R<qjlx0kg=JF}60_$+xd<4C^r
zK=d<0 at F@+_Fdr9_S0TWhB7lCM2(f=Jj!UR#eBoM`1t7N}%t*Fce6JsYSJM3%CQbJ*
z0%ei^D6DMqMEf<lGvfZ#ZVl&}hJK^L{=Ih5AA8ZyyuLQb$g8R#H3Mgnm(>^<+Almd
zj5XcD<5g>>Yg6;hD#-w*3L0p%rjb56zvBzx5&Co%=HJvJyAMP!1eyoKyBfYpC5OkS
zia;gr6SkNe!A$KxafgS<_PjZ!d>?Y?wPq_+%Lp?=#6?>W4&Ye2QCf=1Sv5bqENYC;
zvo|{26!PLp`=S(&4MpLLvC*|&F-1hd!|Uo6iw9gur+)OQB4z-rNNVBizx|m`im~C@
zoV7rV2gZxm at meC0H9@;rq7w1%%P}m~M_{AD4CcVNE;k8}-ctJnr?H%F(W`$9{u9op
z8h2x<okVG|FQ6mL_m6$*_NJq)m at CeF(z$#&&-RMdp%siMd$!!~tfDO}Bppdox17Xu
zdxEh`SBXp6y>II8wk|grgR$e+PL*a;BjK&<O~(Eyy5}M6LklWj?EEDT>Ahcx9bM_d
zd{e2o?gbd;itC*5j{QOa2{LHC8siO9E!R4;6}J;DR!VohH>oC12i41vD#8g~Oya^(
zm-W-VzaYkWx;_0Icrgv(Og1Wibr+PR8x|22afs7E2SthmSl;(-w66(1boR3yXFwO0
z^zwY);+0*6GwimLU}98&8Cxho!vhUS_yhy?GO{?MrawZPtHW76esN*n=w5j^D;+UG
ze!2;lZ)`t2U6N;!%eMw~E^EbEXBTuO&{**S#)AiG!}@OwqAZxRWRpAdnmfM)+N>YH
z_Jv8Ev|OXxgR$+%t@#Xn7$!S?63I!)l@@KtOfhKE`(j?N-%13ldBbf`=1tR^+vqz#
zx5kC}IBd?Ww_`~vaHLK%ee=Usp^{DYb25Z0Y(J#Q at 6psLMQ@#5>n2o&I?7~ytBfhh
z6<7cn at h<~wo<eqrGcNVO-GVKT)|?**J8u5Pwr}^&Fk;gR!49*p-&FZbjzWMSu5mJs
z{t9=R?NeVth<G8EtVBd>14!|L`WVI@$+<^*J$G91y~?<L*`J{xPTb`I($D6;?K&I0
z>$%f1%q#4YMTpzlBSOT}5riG(k`pt`xlHiD2xpEG`FQQLcqG|OiZc|e>>A2l7=!TS
z9sFnBTf%Di)%rhAF=J12mNs5r)#!1ks(7528AFQiX_F_kIy0gRxf4q=;$;i(rIa0A
zWQl{{$@fwU$K31K1;1fg*?@HSnn{26VDh8ysL=U!Yz2ZY6VI$Bj%n=6L>ly21eNra
zC|b~-mINxf%6_ICb4Wui#cqngf9q9trUXOaf8C;jaM!EOEGVeBiYKaaTkVmyG2b73
ze5Z02TZpj98MX|a-{>GxoQ&v`Mo-93dP_F#5ia|2kujq69k9$v78gJu1NL5)t>R8)
zn+3?HgGtqTr`P<Q$r$3)r?XwLed~#<j(hp_HGgz3zqSh5M6{~->UrlH^}<Tzi#iGP
z)1$C1<9J7XeU`0%LA1ZgXpb!X*78$Cy}=FCp)AvLgTm_(W{v!C*!$^-k<>d%{h*Vd
z<UDK?c=N$~v|1>0)(clS6Tbs=+zj3?Cfbvgh_Ak4j2(N at CM4o*gq!;{!Y^xKsPw=0
zb8;VJ+?s$DlD_5d%+P=1%<0<H&(~KVWAufHL#A;93w%3f8kz9zo>}z~ODsa{%8~(V
z$G}Le46wvWGDMQ(inz|Jk@|+S5U+%CRHjeBMkNan5AYrh-eW=QRY at wuC3zAuDd^15
z>TnS<wdONpn2EKV>AC_;rj-a+FIp-E=>h|j5e&Si>XQ*Jcuy=_ZH1<;n1+hdWE^o9
zNYefSX?KATT?RcKiVW|?7&@bhlNZ at FL*I(A2Xrz{UQG9LP|(=iRt!lJArkOrfwybd
zrc{pJk-;L8<sAKFy7Eb7Ni#99QV?P_R1E>r(XN5;K|wLA&!#)&nFnC)7Gv_h0z<S)
zntH}W{))*U>ugDD)jp{8?fZAO{|4`qi2eCpmbku*w&{gw(B2tcL<p8k_3;QoXf0kj
zc0Rstt(dLuwvTV*JsZlq26564A_&Om_#oxW(>>Fzd1*sz#&Rj)fQ-vaH)M4Q11=>9
zmH<lI6%O7=mrp;NB&dEC;RLXhGkF0O^EdCBva at Mk3oc7onp2G0XbMfNU~JqRsLl{F
zYQ(+3yq1$fV^&*ISqr8h&Q&6JJOZ9aiBEFzss_%6tgj<9>AiD5-H>8}H*EdYF>!0k
z1bbtj){r^4viZgBZ>7a{GqT2}Pl?^IYO<8vI2b=D?nw`d&r7e?`rMPS2ys7GBc6y(
zK7b?my5I4{Z5R at 9Ds=SudzLsr7i1=uij(pXUWJk>BN~G_5*;QpW*L at -iO=pieogbG
z-OPN>PpVi$KqS9V%9d_iR-NTide2*>F=x5#dMhZEF!yr?koHE&I;eq3s##&;u)QE-
z8NA_vRu{jpZ`W(CXX~h(E3a-cdk at NNrZ>zE-t;xIyw61n9n(Qw0IS4{qyU0tzoNpa
zpSZn)6_Ab)F-gl6Ki$<dFPk05FFBOWHj(F}T~B=?H9(cbe-!r2#r?kuO9h3ApR$}D
z5vg=xd7Br1wnFLPZliXJRhj;eaz<_ezy3p{$@YghMDHg+h^I>ttDQkULPEAEz7*YK
z^}aN6tyR3Lw?Y*(RA}ql^$8{)xz>tip{mk4|9@%o%U-7~xig^6kjUDDDv-HBE0NhL
z)3+Ga at gWL0f1vpdkO>q)Q$n0_-oi*8KPmBOoqND at 5a<;Y6e7xr#(4Z04)va6j&!NZ
zF<#Kx5aysD;J!3DvA)hZpc4udll09`ZcjLJB{NupDyj+?rXpKg=#)Yy2)F_MvEhFS
z`2Pj`Bg6kf at ZUrvA<p{QmB_kNKYmLjk>KY_CDQdtBIkCX<{WLZP_~e<WAd5AEBF5l
zoA3Mm=5kr*tguC*8o*$#fLw8W{n<SP&z2Xo(Q0Y{dlX;4;WOyc1m1a_vqZ%jQnp3E
z%=l~-yz?5w?V;mj7WwrsQBChI6>DH4jNh|LM+yQST-bKI6DF7f66E-U$O0I-6J$Pe
z<HEKyI&LkD8x7(<YKtae59%#)f2Gwo8WgQ7`6yDpsB`vLywnGMb(R at W5#KYEZghGk
zrDBnv0AaHQif2~or;G){#(=PwnKf&nuTk%;O))?^WlML1iarOCpZX&p?n5A){-t`t
zSaD&S$Nl+Y5Pt{6Z&I=HF at Fri=Y#nFT-dg|6Xu0S_1}HnmHgome*`w1Y>`d|@xSOY
zM^Bq?26;Bwvco4~0?$1^o`M%kb=i_+6I4aqp*R!X_mKr}kfb*DOmCY$yxfwZHN!kN
zt6vk1xIZ{b{7w*zTTrhJA~N5Z0DaoP_#EG042Dm848wf|(^R-zDz+;cD+qW9@&qra
ze<x634hnqR!7X+Bvc=vRRT!@;2XrKxgg+_{QK53y_kw`fVOu<B&?xztP&;wF%#Fq0
z43=M_-i$E`-bwnRwvp|cgm8y%((R8};0bupw;|(lmIh<|jKpv52m<;+m~YVYkTE&7
z!B}jr!?AR?BlkhrxS;+JNe&03%S}9Xha3}d9Rzv+X%<a)KJo|n9t*y0f#@Cf=@#i`
zt2_FIjAd_cbtv(Kn+<WRUltZCGi4k^UABUw7YUr#I6>_?AP#Ty7NwXi^1ofu8!w{Y
zKZ4e7aP3<?Mu9TE-s*2x7%zj8(jN+Lb>B9Xk|fR-gbrOU#{RBoizb|yBE9(atj;ke
z?I`Jl8RAy<m8q0c<?ego1cH*KOi^E2TXbJWH4fD at EgNR8KI?5=J at 7($u=Y<ctJo?{
z3EN@}j&FYPan7*k>+h{{rFSY47UT)$in)!1KcPWj(tWpuj?k_J5ufgsen}6*Hqh$a
ztzy{o-U<PdN!ek-;thr24H&mU>Cw4n5(3ux*vSAh at _spU%JM%w-m=wiH<(jFwYW0M
zEoAh_umLE`0RrOYyhY+(3E_!HkAFhe4hoL+C$JNbrn?;JhT}OU2qdrr<K*Q~58`Xa
zY<OchsC=YHYYf%Y41PG`|7Zl|Dy!U;$EFWxy&8aAu}y&X)wM-~)ze9EY?*K3jPTZv
zWd}&#oomTziyTz`yf2e3F!7L=bzP5)`!MoJg`gWQi2dIMIs7JMfaSOz49DOI6hK2*
z4 at Dym%jtg(+|GMdcI#FSITE1LI1T6v-O*u>L}@0gZP+Vt-VSo=e<MEqzvCg!SMIfH
z6PF2#<<HUzw2$x5hE_|6YV2*DK=vTVOV;Q*!OeEZ`_LCt!Q#Z$-6Yl*Zdfo at u<9YS
zN?LN)v5C+J6qQ9`ypp;<<Cf|3F-VfPqp3~s!pc`J)Nj)TXF=tBh`e6ynkExAK#b=D
zF<yYx5E9Il5MphFGq#WrVK)d at Yylx|w*c{8t37HJ?@2IG77kl`?R;(R1=hWww@@W$
zFf8_-_d~}{s9J0)XYi$k(jq&yN=hVEBKsXMSx_pHr_0Rp{P?Zzl(zwi4m1{wYhGzs
zG$q*L1x;?7Tu(RJJFSyhRlBlm`4w>jJr{`T#X8%%X<hTWpg&H}yMNT&Hh$NsUxo43
zZ_~V(6o;(d9$dT>6ejq^cT44f<nwD9p2h3pS>%z<2S=b!UE2Sy*y?|`r!Hh&v!|#=
z|0ALS7?YhbVW!t`8CfG`oE#}5?E5?P9>dRIUW9ecBS#FvBg_VyCRan(|FpKmB8TU`
zi{@JIkL_BFBcM=8(rk<Yy_H<@vMcIp!!de?R0QuUla_d3vd#|OeOmy5S3YX^8|{(2
zUufm`_h6$Vb{RxpubEGNkUIsc+;5Wg&4BkcTX#SPgn(1oZc(a}`(4#7{mva?!1->P
zh_3RmrtJwehC-ie*0j(P9^-ZBh62}SQnf@`BBw2~`NgJ75pioggV$$NuafD-stGBm
zeNmL_&d$>(;}VEXINKD5%TLZFn_oDt>55QSX at drGF<G?H>ZolX7aIIqB20o}MN$~X
z1dkoj*w5 at RFSIGUWW50s*WFlA=R-UDkPvY=HgBOyLp-&3<<7?JG#p#oj<KxrycP35
zIQBV?#R%MNm$g{)sm1+{Po at v&Bja%7|H_#BIgZ36fsDD<jBprG_t=sPqAc4lIt)=j
zim_hBS?GQoU)Kgrs^@5U7`tTWfcD&Bchkje(f;1O#j?nG1|;Gm18e;f{R==RIIGRr
zSb8}EIze7UnUA5Fw7S}&gsvRv<yAKjerrl<C%$l^V7GJXInZK`x=h0&Tb3gBYeZFR
z%5fxoKIRwLw#l|fek_HkKr|_SsFAp8 at fbXO;`yxBM%kdbUmj66G!885?>4n8RmDc(
zNLd~>?xVY1^8zOnK-UYtQLZOR4(!!85muimcoL5Egc@||lh7}J`GbG|lrWh4%fQY1
zbq%x$&;@wFG|0wz>hfaRRQii!ZDBzSBwAgL^Gs|UONS0z9T;)&rrd<{K2=@w?Q at 7E
zi#+!|j0eMrq>wRS8Eg7740xr><i{J+$hNTI%t(ihWP;3Em=F*Po^;~tjN6~s=cxZ^
ze*p{Im}bCp!BVw%vWUPCU@=uVvUcyO9qJ^j{q})5ZDHP95#}X{rtKeLCy`NVaR>`M
zTxf0e at p(`uX at 2QyZ2(C0R$CZ-!iC8@`|99zyaoK8wCWE`<;Ak>UYrMaN^xCVDp)CC
z?4ix)i!aB4<=Z#ipw-k2<-*~!YycDP0=!- at AA!ehF_a5a_o3CzGc@<o)FjXQX4`9%
zR?<`y$I_c2SM$n?qSuDNoC4!rNUMX_Pg?p7nOzUkxZ1L#+`xM~c&m}Zs9>#e^YR%<
zdbfVJs6g#!(m?*^s6b>7*%Bwx{}DII%{#?t59CL6wXMRKS-e;Vpcgd-`3#=24P)7_
zO47T at fBF`rttsM1<)uRk^?$vs=z1X6;yYsW#4ZJ5_ML%nzy*&|r8GbJN+E0dW-;U$
z?GgPFc#e>I4f=dg>_iYvuE^NC_b*;7Bg`oMg2epPt(I}~&A5`YRn}-K_eY|e0YAvI
z$muXiI~^9~hZw^}9O&X)mV%%~YBtW$)XZKV<pwxiF-Tuvkvq!m_w=P1!e>`tSZvX6
zo2R`em-Q`~KX=t9G_lIO$<h?TvIYxbxjR9*0`5XGkhNz{t3RT+f-uxVTORb*Skof=
zBXb_Y>WMW(sVR#u{B~ZoTuRIH+C9-do`$7U#1^lAh8vbP`x`^2h^*lwo`3T~aTy6F
zEewM!c-{<L3IEgBtbO`cj7z#CsYHDhs!2rH3~gRban{QjMlHNdv*xnldS)oXA{=nc
z^Db#3n7AzZ9?tF1{VSkk0WO1wN#J`F{4SkrSPGStzdlEP+%w&h1k%Ddue2Y?jp~a3
zN7|dlHF357!;?$`lMqaR1OfsXwy-D~SrjQD0RaPwpnz2>3L-?K6c>VmjtLqN5sV;V
zL_xGFYF%opX!Qogii(P at MR0AZbtyDzYf+H0$a7AjZSVW{y!*eHPcmnlvs~v|&hou5
z7K{h)wws at +m%#XSbK3`3=t0^rwJI9U{~y0oZGqI;6w^Lv1^zb`E at vqfm`|guebDD|
zS(xkH(nCMh=U-QChQxZ^%X9BLZwS3MMj%5puO=N1nbtmdeXB|=<c=^cV%IbF2JLB+
zq|?KqbZ$K3`O!A~-b%Vf;q2R8McSDT=9}cF!Zu~TpRJrlewm6|N at VcH9o)Ti#avp6
z&Bb0aC%9!=fi%4HN0zPCgk at N{nlT6Lt^R)sqbkzKzEpIK=WihC3{BcK9w%sU*M%Dm
zksqL8e3wc7oV at Is!Fgcpd6hv)%F at so*tYYaZlfSPUm9x1-n*dm36PmhoIP!M9`VP?
zmNYbkc4MB)b&|FaonviaO4=+6i}7Ll`=H^@3Z!fW`T0V0G-VfAvJlOrZHcE`C*Lka
z-8tG}%%{&=ovGFI8{s!euXNO%tG&5Q0z%h4GT*RYQ9M~+m#SYtrlzA at nr!h(DY+&c
z4H8Mu2$8!yK4XYKVnWt8$BfQivqqV&^TK!IRv$}laqAdk8~HdLb)y84v_+`fgs5mI
zCU%Xx1bJR2MVfT7v0|QRJTb3*aI_uVE~N;FDkt1?PQ_rFGiKWt at gj_zvj}w at z4PbN
z;z^rjUJ#Gj+HS2GWTu-Io?3AB!4Xos2<7o5=}%*`f0KDx+Xh-EG<?CVexNFaS5wHw
zMW_o!N&dVDox%f#Pv52bwLl*g?<=p*%jo1&_x(an%s>MvG32rgR6vO$OTmx%r-q;4
z&H?#N2I`8XgyN6KraL5&KV_iPKnkx+)Lr%4#urmmi9owk0!y$nR%ED;6Den7R>2~K
zO$5XRf&biKxC3lEV*>c^82lQrojpbnfwqq~TGo9pLj+IF4;p?o-Ds)#^Z0U$n)TQN
z2D>CSLQN99M(iUF00hg9)S(D8-U4)us=t|V$&(@JxG|1<`f8-g2dy3hQG4A&hs$F*
zMClS*c2ca!@eZF?X3ODbk%~!kJ*fL{O@#X#4!&hx99k9$X8jlXn7Ie|`{9y9_B)XN
zE#Crm%r(Bc6 at E-{sXhm!X9s<~#51cZHt3d>I%ZU`%6dc7%J#uXrUT<2O#rqIP at irI
zkdJ=`8@(pzQd}~09BQ3BV%FQ9eul^X0$i2E#D3?-;}r_i3Xsw3fooJM;YF*w>9D8U
zsu>476CW?&(f0Q{EWG~yFt9d(>MNdO)z+H;^x+J?nL$Ov=<-i1FKti^xQyzS^cf|B
z<xElUUQy8SQ)$kM(;QZQx;{o_hrvDbAqz`S_LBv{*@N#s8IXI9-*7EOhFednQ*Sh=
z!@}v*dVw-~)7A`)l-RM34nGDM_Iz=<*pi at N^sSkiR2gXkZlvuMGvUgjY8oj<VZv#h
zVhgwhbvC)Cl;}VN#Mhxrv2H%KavO8=^<&VN1ni9!V?T-?&7yxh&nPYXd$$Oere=_U
zW${h2Q!h&EZt7&x<6Pp3WcpVE*RJY{6c5fZqRJ>URROsdfk3rqdI&_}TGc%ndL+6)
z3WRGB6sjqn>>|}IiNMdCU09!@QU?xW=tn^e1Z&azNcB{KXjUoAr?ufAckM at 7KNxF?
z|K7yS;86g<#nAp8Hl3qx&ETnE#6Q at yPfWbf<E^b-f3I#gBQXR+asx2T{BSYyqEd!u
zaH&i>2Vq3&a7(zMs$izK)tnu0x$zzP#0U!h!DG;-ClTSw>UgV^D_5&j92xDs`Kbl}
z_8Jua-28$<G7HO4*~*Z!$&T7=E|lh`N;J;t{mX(!&_&tpZ#0~LfSx5apT_=sA52sK
zPis8B9yiLcp2_%Um)Df;b6cPjS($XLLsLJX9oDw-Jyv4Kg&iZmsrnq3-h=kAy_I)x
z)ES(rY(SV(8!&1T_=VvXk;Pua_ at 34w$6{LUJoWV4v1-{|&=a$~1tran1(90XOvXYV
z+K%|NQz{1UGa7F_Momx3Co?Yk&>jzLZ&oISQ1gY_VqpzJk0$+)6c25w5%Qg^bB?Z?
zqXK`dkXs<|B}lkPmrISV1B~auVwz)N2(^Weyxzdm7GD_y0oXBD#VSCU&t+KfN}NI1
z;`Rgy47Au3-qOSrm!(N^n_qtmzN&pML5~a%Nx$1rAPsCnSV0G$y&^1QDSXCqu2>Fi
zq|JMBGq{`G at rJR;+Q+Ia`q1uiqcU{vRJzU`VMfHWD-<g8wXctxXEcnXI-0B4txk^z
z*S=;2{n2TKOtI@{EYeM+uALx5o_H;3E$(<c_=$Ep!!ak0qkZphozt-lX}$Mou#EJ#
zeoHPxgh_~{6VIFfNy9&0S at P%<gqXb?IrhNwP at +nQaX@XSFe%v^hPOG3;WAQk2<><v
z$zkQDhpvsE7_ouS$?&9J1o4}Ks5G%<)d}SoHF7q_6BlL)WKO^yicv4zkeZlCC at K)k
z3<pbi9H}Q<En^=%)dqp}B4=SvL(=xa>B}8Z)mG4hIYRqEhY{m?i^_rpQTWzlal$c0
zNtqa}=ew^~G|G*5I$M30?r`*~boMz{Aj7{ca2mT?5tNW}fLfp6A*Bw4SINq{V{tD)
zxJxbiEyR^^cu=_$zI3sWA4tY{^~WfCf(o3lrKFIr)Cu_n8H4rD>HQO4 at -QKP?HIT0
zcC~7Z1sw``8KcSiare74{j|`^6pFZVH$}{g^IODmY2hg_>}^$0^U~fBEGy?T27hZm
z3tD!(Fa#5KU_Q at px*|Sc8YbOAkp7(BU*Wl at kJv*7rm78E7VoAMgzcYFb~po>j;Q`<
zrQAwTN2#jfM2hz+8M2jtMtHoSq&Cz+h)}|#YSlC_1^*Z*NX{#Bb!pZ_Ssu>7Bapf$
zS8L(<g>?IUtuX!Or|PL}&lA7j*ii7=IQKUdBSSm#Zz$%<nNuc=FPT-2)8=0G#6JzN
z(R at -DO9`%$Ge<qg at LA<vwELSpU4EUaj=ZfJb1Z(VOWVG_gyXYd2BOLn&zyQZ{6B at 5
zYfrj<T2YFhTD*BIEkPH6EZ*$wcV%f%YM4&WT+}2)I{8noWs!|oLQ()CsASX-4gCzi
zH;AfsGKaB3Cm$_+$i!A0Mv&iTIXfgZAqWw_Oi)v-NxktE(0M>b4Nfw5l{~Kf-Ob5z
zi;MoQ%?IhO-(@_<kW3LJ{QP5&fkR6wf2h4 at d;PQ}U`|Jd!dr5hcFSrqg?qB&HfUs)
zhabNQokkluz2N;ujTCn8`=_T=k at g6d@O2C)>g#ubb4!ImYjv&2N^^&b;guaPh`UW#
z+mAxY{Pf}s$FGDUNrV41(Vk=H4r3wBgBb-8c!C!bN%+ncsY}RjT+-}pmQXMqNjOC1
zs0t3WF9~<1C7hsAvkR^3`@;k8LWTm~kpvNwTK7xo{<k+tW;QAaTjpT#`>ug2GY$#9
z{0Lk1bg${8Q^|Kj5yLteqBtaw$P_;>6SywbD2{r1uP&d8P3gY+?fuJegh)j;(6nS^
zX*TK=<j`flrHm_ZQOq>XBf7ZYJUfdEi;%gW^9?=+<{F*tdFquW5>QtF4N0h$Qs3`0
zB#|$(QJf}=`8k5*EC>HI)5{K%0n34k3uf?PGG{p|;s7P%rVm?k^N9uC3aXPso&uqc
zEtj1)8%gJYCk{v?tljNsd{AYa6-bd-wE}f=Gh2c{X|Z^I`$+#}(I5nsJmU3Yo#BgF
zNJ%%)ECJP!(iJFg%pQTT=<$q|PUbG%aCGM06*3lhunULFLueVD7^cV{%Sqs3NTuSp
z`J{RUDpeKRHxEXqh*>JYf*(0WXaY$lC8O6BNw_1W&Yc&6ZA#Omb}77lvN~l*(rnCD
z{3B3#`w;f<g7(4VS%9&C|HNuBL&a-ksmhm7VN+GxnI4(x1>vW%r4dO7Hq<I-VS=E|
zOo~c9rW=Msa8|F-^p{b4FR5ri*{$i>2z>`MV&_xa2TSzHYu<j@?+AOBkTU5B)#23N
z at zRBvmkPqSRBh`KLn^;7L<Suewg#Vw3jovb24GmcGiyVqN$)dpaRHNdDkDfbxGG3`
zhU{l06n at 7^D7;RUQ2hPgF8ODbSZhQfQ<;oyz>Xs$*JHMRa&{qc6K50ez_jGa at GDC-
zvcktu;(Z2mMb)*U)DtqoTqGgpw+}vXacKplVDsE-;B`W;4<f!CLUFK(D}n!`E5!_P
zK?SnJJMD3FO0ngR+z`sOPBCL8FMMNUCN?@L85=!K?O-{e+K{})(LKEdaIrfd(R!hN
zmz0ZnfX5d+K0_S*T4FB71CKR$cLT!^0G<$W`B?KG(z1&{#f7E{O0J8`C9ES}RnjKr
z*c*{im|Icmi#4FqGv+Q3NyM|-2Nwn#D?R49SN at axaYB35@9CO|z10KPqJI+FFVKas
zG#Q#yNqYNIm&q>OAfemyJ=<R^^)f8lajaQF!$L%?0|KZcgw>k3jsaTYarQw~>2P5J
zL-`oc!7Z5=m at vNVgD1bYrr$eAbWT9@$-LHDhvtKQtD at qaXgA6N_ZQQN3L#CP6MD_o
ziBytDG;57^CQU%Z)7XTK%1qdam at zAtFjBZGN|- at hytFEwT~ga`IeCX&zp{2W174<d
zKTP!woL7v^{T>X}_E0nJ_E09ft9&RO7~FF6P{!Gvw4-ys$0ia*!l3!Oqo~+kNE^8K
zc#!Q`@yFcn;m1G5sg9zJ%i9M%Gec-mIyF6x&MvHeFmgPa8v|PGkNjlc{%+yq^k at CT
z_IIvkV3-2h-)%;W+Y#3-E at w$V*K_0C+YSypyR?coxd at 03@Q}EmZ^?_;BrxBg`^v&6
zob0}(;8EzOz~M;>$1Eb}V`e at v9Y6G`R#i#+#;DhUu|kU$zE~5@!`vW&iIdw0(*s>v
zzz|q0E_3!2ZwB4FGpKv%Eg=^UnWzp7nUm1YPPa_3mw&W*XifXzxJwwGJrPV#J1{*#
z{%;jg()ChWcyFbUW~UQ6g6<yQr_iKH7z6J8nSpoUPQ<*jV}Q>eG`8p()cwLIu(!r}
zWNQ*<V`ktn2ZZJXYpr>#pC)%}+fJMb!QjH&mHqK?eK{}IKqPB%ZBXmdyTX74AHWpF
zlha!zHBqZcPA<w1`F|+k^Z(}(qR3OZs7M8!PQwzQqiSM1M!(XfR(J-xv>5gkdmJnb
zYTmtClWLzUbo^8&#=uaRivdlHFLt0CoE(|KbXtwxF})Qk8bAO!OKQs3W=(=F0QJ*q
z1uybFb$om1Do|@SlM{GT#Ccyh3(2Yi!?I)G_p=U$+R^ljyt=wTSrzox2Fz$98h~-t
zV$EvQ(`njNmn|Ev9FC78wuMj(`$8yJ#;fN=uEe}0H3KTLaWy*H>e^n at WOS+A*e!iC
z<wX?Py&82HJy%Ro6vudFlw+f1HO86e1rp(Bciw3t-PfRVKl`~rDlV6q`7rS|L(?)r
zm*T-_qTIp1G*dtA@(hgg*iAieFMrv!+U^%?qIOZ}5L<P1YT=ZgeFi0<IS(;o0)t3w
z#TEI>1hBh7rAEbhez(6%u|-7QTZ4*KaWdSC2Pod5Wsvw(hQord9;}iQ5g`~{HR>{R
zX at R}F^wvz#YK}ChsXF+l+BcdoEywgO-VyxM75ty~VHn at 43G>-z3TMl$N0MK3ec6bm
zw}Sug`*W0c;tnjRU&z2)!OU|dEAvn<s!s`dJ`c5zTtfiOkmv$)Ck4zMs>@5z8BU<b
zVjy`CkUTU(J4L!?O4^QrYekPWsR>F~q$usQ%9?Jy0kATcvkxljNXLBCk1~sl%SR_C
z8<-bvhFh_>ighk*qQQkNcx8UjNJW%3ZQqnC=`eHIb%S#V))m!pl>pj4QGiXHn-WUx
zLtAHxc_IN3C>q}cDzn}We|&ySfpO^K+}K423&|(>=veC1EhJ|xnn*oJCo|WguC$AJ
z@^-RxEjn5ic0NNbzhU;>(|>JMgvUL-UzPgj{rZBhF%Ky5<xF-_&lF8~ZKi$-{GFJ|
zmuhKpi-I>YT&!VQ!Xr(6kuT;$JK*yVJBk*iA(*1^JU#nMAVq71$nQ&&Q}y;~ZC<_?
z+Ncxaw)UjIP>FS+nD<Z(X!9wI5>gBpO$}&EA7(45xiKX&8FL@@a_MH!k;B9XVKcWb
zgwe+Ub8+2^HHvM5vE-t4=zWTu3?<M7X$t|1?gLLQ1aFWbMRT(^7()0gc(gS%9m(pE
zpNR4dS=lG96bT;Plvic{CSyeAVm6*3Jze5N5T*xVB{C`qvjgd#i|s^$IvBQD27!=9
zdxntj3DlRuB*(5tr%<xU<?B%|nvD5#B3ZK at s$LO5_4;W&I at S!j0o7h5N2yRd%&Ztc
zF9)^)>8nDWUDgnw(7qgX)Y+ZC9*0zuC2OSgWay_ocGFC0+BtBIT&4o*;aB8V6*`9U
zGkH#hdYXHMr#oG~dWP&)p%S1udZ|%Il|w at 1<`fThk(lxL<^{mX?Q_LgTys~^5MU=G
zp3+6RYYfWsnCr_fL+PHtLl{#$vwiSc8AdPJ3+<K*Z5G>rmN{333}g6j=d7s3dxKJM
zb}6no5QQH`Z$}7rFu(oHklo5YCOlrnjT0?AakrnK at 1`mmm-FzxMOE{QC%uoEacIFI
zFr1}uILUizbdqYu{jJ5w=?uLzvKGNY(<up{oz6jNlsIC$X%OM0ojd9%bD(=_ at xjUX
zchM<8ij)Vn3J<A6A>l?lHBuDE#F)5X9SzJDyRBynrBHc<{<&lj-;Enr)TM~`&z=#&
z_!vfj_OZC%T#M$apmqUx>q=}aNF>Z&3#Mc|)E<}P%0hcO_43XV$5~@IW!xp>RXji~
zRzMlBipP~Jt&ln(_%~Q`Fq?@m9BLV+JWTF1FOY}&cb;t^&$f6D%u{2^gIr&uSvYYO
zYqnCAi;Z1mg)m&*)KVZ$T#|rFy1sIbCF{1NmAQz6OnTc-%g}}M9K**@K|BsU2g26I
zH7C~V6WRwCX%iSv3W7W4ZW3dSU_LDxNMLN1nB;3peegYy-b=GklLq}#Z}$HXe$W{1
z0>f2Cht-#dD4Q}1!-D-sGWX3eB~l(5a2Ik%#O{Su?|B&VSIx;2vcC(8Go^7l at IN1z
z@*%wbpAW$Bg~O$XdXHWAifW?L<cblWY!^pTsc5A1`Dj#W8|3i|h`Qi=XCKrxx*q`g
z)Ba+lFGdpqMa|H+!S}Q?LD%*nf<9?fykOh8YcL-4g!jiZjUdgDsHph$QjHYG5jDU%
z0^y2d17iU#*(q}|Z&+^40op8;hjr11yi!w|=>ua48=!tjHK~eYq2?bmDB8fdaWEgn
zF=JfXd0G32{c!1?c at s>!7PAziQcuE_$P{<^cB}q6i#x+TPsuwQ(E|4Tws}*2t9hr+
zB<>HmDJ;oM4eCryctaL}UsczEpvOzk_=szo^%2AI6(if$eX;e;==AO+VJi9AU8%kD
z$5f6|I?fE9o=fuGQ`w){`y2wlHOVRliRBo*OSjL7m|HQ}?<8prr?9sk>^}FV?+Gn6
zxA#S~X8}f^mh`E5DYt)A&%UVT>%;W%+F#>2Z_DI9+xMw6#nl5UU-9M(G-D-leZ<OY
z#7vSyBONi8Zuri*?yOTXn&~=73Nj=(P9ch#Fs%kdSIwyy`P~fIS)CXS+Tz`~str03
zB+7Q1eZ(7qA8KkguZ0jGKIQps2?cJHrt)QU`^~c$@Mxg&&JMFXuBubgpZ!jUWxDgX
z<u2T_vOoOLO2tylQk2&40!R|6S7kBo`QY3ipujj-pzl5NYUl}8Vde6&iH=zw at jN)S
zZ{PI9(=+w+0(FQJuzvBMUG&iv&Y!$C1jOTcFZBthmHKG?Jf!>8sd)T!W1T&WJ2Flm
z9p}#9uT%wMmXg|L1<_G~%zoN$uGj<Ne*_*;B!#IpuS26qHA at V-cbtEE_b<DW*Zkxo
zX)SU6HGF~V_#&bdw6=-rBCZvTGq(1*c{yzDmlb)h<b0P`HD`k2XIIKcqkjY~U$!JD
zo_t=t^9WFL_GLuuByg!a!Lzql8F7+1sy4#L%BqjEC*~Cwo}Q4I1-w?TvbWj6fLNm?
zUqIX#lOKU2{`&bI4d02ZZBpDncnI_ at OOhf=P70+i>z^?`vs~`8El!;oNJG5AIQ!;3
zh8{>C)exIyE<JL%Z~f~!Fbpcbjg at esQiO0|!pIN=2jk1Mp7b--Z;Iu7tvlb6u#-C+
zA>;A2A^KQG%j3bkCmB82?p%%ji{Rewa%Y<iZUkZ^-oiRdVBWHA0)-P5J4Bpmvp5`O
zQpMoO2UCysgsZ2X4gUT(w5Q9WrQS~4g6}8jP|8rb>fA$%vh~;k6v(1&GMbhy_jz`=
z5lgUgqqIcY9qyy+!^OHrjMxm)IhhW!)n%J-W?)bFtzyVN%q(AprNHy)Zv(d#K0&<5
z6PTG&gK-2c*NYy%c at nYImWns=Q-2Gv=C4w6u!+l-$gptX=&#CDObE|26g6BfMVx5a
zo0u8wjnR&~jhJUg#_GY;-EdDa+{A#GXVKicaS%(sDY;@WbsW1aI%%d=ZaQrdk;KQN
zJH^;g+WV+iNi*$~Iu*N&yO=SL+emZYgCG~WFZ_A5YNlPv^N~%AX2c+rBG%%~{VqYL
zp0%l9K-uaLY-r#6T!v-ye_){3Hu_WsQ+>{=`Q|Axqn|78G#y&-D#JWvNln-WIW4g-
zQy;$YuwDPV_T9A0Wx3W~bFA7LT4YFc4aYpmLtCos#5mU~op6Q^vMV|<g%(}OWbV#D
z;+1zBEu+27v~a5TEzzqY`rHh2fJMoe#p7(Pz0A_U8xzXMQcQWb4h>30Rs=l at VN`X=
z>!Yifw$VR at u(AU~1C+ol&HfZ~g at j~nr$??OiLpXCEdo}`qD?|0%&o>cVXPwMNra~C
z<lDjqXbgbp?BvXHH(HqTl*mhuExs4nt3oKMi|gohd&3JMV+rg<C|!n~E at B-HGD>Jo
z6~Whs6k<BT6LA*o-B`3~DK}Ml3UI`Lhh{cB;lw5HoEaHU5DXCJZ#CaaR}qUPw2?^K
zCMDiP6;4H at c^;t59}%lK^YDXb&t1{-IuTB!9`TDx9ASxh;2WyW5Q>Di1W5~OAN+!P
z;d0hpf8;IckDMa?sksn|w^If$L{P+6<qn3w%(w0amS_8c_tkm3?aiXf3#d`$7pYO(
zQFAe^pC+dFQ`jyQg|g&V^8#jZR^>_hDWzlfh9Aw?KVx!-YSe>MCKuRGIC$&%&rMTR
z1?OsRo7|_|&UC}tjr-X#78he#R6{3pa)(7Pgq(GiB81q4;K~Mjvuk{OKv|A(mL-ai
z;az}@Hte7nw?b(Dm;LGu=GBlP9f=6d3#c<JZz&@W8Q#a^>vroC7RV)qLatino9s3E
z(8edz<5%a;nAN+D<r$?bpviS=XRp%T7XL7uee{ph47x}TY at mD+)u5*Rz*qMh-*psm
zMuU%8#$JrF>G6zJ$`>lOXcZpM(=o&>OYxRhNz)h^I7Tn)oQ8ok^ij0tComsx??Q?n
zOen5QMb`OYbVEXxU<)mTW{8#I$_oiDxx5$AQQOt-u|lcNvl^ob`3T$CLe$j4yR+mz
zh9Hxdl%_%%PS7z_QoA;a*o?4pv-J^#UEMfxXbU=;0a%5-Ocv9%j>Jn*9s}kz2fh9W
z8Cr^tp#%P9NF+ZmMa8_WuwwQrQ#m>QGm&}TSmh(vR0G*uit<&knXtAQx(F-SG*3sw
zjv)IvFf6c~AqK+2JVR$@mcc_z at qEObsH#Ae&-$4e0i!^;)aqlmL{+P4jk1OxK6c-x
z)b~*Yuiql-48^Hup)~c=yAa=0isUR;1!jHPj}o2z<fmmob-$if9eiKW4%!NNV(of-
z7*B1 at zKdZ7E#HxtSuwcLQO1C0_jdkAaOeZ)06bOBJT!v&LcR)lDnu3>?hgJxW&L0N
z%3k<!;32|wNvjH@!z;@d8w7_e%KtCPiQk$?&Ibr+h-%&Eu1+&tp2{dl;nU&qC-9!y
z#Yle!Wod&qutZznI>4Eu5G<T%mQf6sK^nR`tS9wF1kobHAvB6UP#p!zqDX3v%p|Np
zU<eEx5067>q>4~-!&cPWZGQBt)J-iBlg at q+iasxrxI0#FGfC#YI=RnpZ1Vf9Xf-9^
z%wjDtgec?4L)*~tXsaQRe6S4_q=RIu6>=Z1Y_(i4$$G!m24N5Z{zxxmhnFE`7ULfz
z6tjGvK0Kk*jZ*Oq=Z)eIpfLQ1(F1|b1V+H=j at +<jfKW#VOrfn>yVj&WB`87K2a}(Y
z^U6^^cXu4T-1|?AOwk=d7MG*`s`=5!@WPLZA`nyNqkm#;BRW~z0s{Ic5FMdh&|A!=
zigOS5)#kT8t;-)&yb^c<*&3zzy&s3e6H~%>Fb>m3Kmt=>I4jsbeiRd4LgXio3Kk#C
zZ!rY2&`{ne6rP?_EbXVk^f%VS18U=-KNizPk$>x4Hy?u`<xmf}y{+C2xDl;8&7 at tD
ziz`qUdyrsaxZG#Az{I|^6)?fx6$W$iiwe{OPP<WrET(%Md8-1&ZR5I}Zsw&ivDG at L
z0HjkOPJrTf(ri0Amio;w8L%Doh+U~!w3I8HJik)T-2I0-3Wx<dyG!*5)^nNyD7-%S
zGv9xaZOIoW!UPl8MeHumSG$z(ETmvubk^%r+F#{vi*#iDcGT_D7>qs?UonW9sai{L
z+VWg!ft2Z*z2V=jjD2HjrS=wP3C0>B$}u#qOaF84(~z{=cCOclE`+C3mxQNNZ0Fh#
zZ!ok=5y~a;N;HHu=21Mp=KN_@(Gz_vxwsPbX7jTI>3?25zi8X`*C|`_Tgg3 at sMDC$
zozdg0mkFj#4Pj(;EEDuas-wCLqnXh>xr4EUo%)3AlbP6z1%@?bcO{Caw`j=C(Y$z3
zUb;S|tgn$JT2L|ACTgU}I+qFJ<UNlRuY`zgrOaInI-%?i;FneYuD!PY);S9OJVO<P
zdtWAy)Lxzim9FXssyf$0Cm+HxPL4nS%@aP}dNz54T&hD|yo{#8UOq#-8Kc)8DUg~Q
z5URCZIW3{qjRK5nifB7y#<<F&dE_aOI`TKqO<8X0$}3tmRp^M&#rEg>`&6B?;PA{+
zxRwH$GWy#6M}ynax)X?wx^Y9bM!i!TRi|b`cTv;2GBIHLI8>qIXtOSPYRTzUsLVOx
zjm%5+Zqy_QTIlL2Y5h0fTKX6HO%*CMJDAu0?wcFr&sC_a^U_yR$J{hcWWt0ol)mTs
zaE6z9%SSC~cOB_WqPXL5t*UC&B>Q+)@LIbpT&&Bo{JG6j8|$mCRQQm|B<c)Qg5bLl
z6!7fMy5kmQ5UYCR2dG8nrX!KrW*92mfzXW{)m+lr130RDyrlWRIVyRML}zgybZ^>q
z=I-M`ab-VUoP>EuYWkLu_zsk(`k+O6G*CYQ^Lh!?A{CZG4$FhRF%}Qk38!qB<4NH#
z#AO&0()Eob==?$84+(O0q1?yU=HsjiVKuhq-vrFY#E{-U90ff|)Xaq}8dF%?>^2i{
z!Z#6f2HfDmnMPn7Qi}?ts+c>iNVFc_PO8P0zV)~64P^O8kr&M~xHQDUZ2V^J<wn|l
zN90}{k6jp at c}Nr4iC~_q1E0)EoxLWj1EwvYX+7A5P>!lx<{Vdc6eD>({?xa&M(M=K
zN!}8+C at II{blRcZKt4tRJw|Jy_fLk_s*;PT*x%o~Fc27kcqm1ftCEKK at K;LhQ at G=c
zoGjJkwHm~}R+3#57=ST%J5%?w53c_KXrlHvb|Q}hxrhgki!q((YBGt7xjNCCb>P<r
zgpXajQbg<f&#1t>r$AAlGclr^6&R3SylU+VV3BeWdlQ=uVG)}a3OR}VLw{P^?Y52e
z-B7vSaYMaU!wLi}Gg?wJxERzH9xHN(ry7fIK^_5=K;eiH(Pp7WPz+33mtlTt+rK5E
zM?*99Z;5z6_&Ukoi8 at jr9U&*~L?=?;CX=7<L_eYUkYDaZT~sPzBjN-pYT7erE9iO_
zo~OLtoWM}VVjj?pK*j?LeUFSml!HMP3R%n20Cxh at vA1UWa)SHN{NK7x!yCEJ1CzsL
zV6<bFXC3OA;N3e(%}`=rMt__|nT!D!Dvv5<UO(FdO}~YV*@ap=Lh4+*3c}65&je{$
zAWhOyKZw6M<U_96g*r{S3o1m#n2^+wg>brRcZ<0)52I302JGXSx4Ce7V|N{(S2$yL
zVJ9$4cvQ;*PM-(tt>nF3sPptcb~jm>!mm%0SqcK?R1u&n8L1dEWTx_lI1%$;%ZcwT
z%66Ook7DBbQ89UP$f|#V#hu}}Z^-Z(RH6bs-u9F9uYdRW at SgnEd`tG0*zu+b<WtVA
zNU7OAR9j;;1hf8eIQpwI{P<xT-2i){&W|#+ayB-#@-r;?a$-&H_cK;1`LHi~3BalB
z^1gBK0CZ}0#M3b6Ga7Pi!K>2!s|h55xQoz;yTR5~wJ6=96-xh1FC%B>)S?cmubQYR
z>ll;}70#br^eC5xxLvE>`mEEz3~B}0c2XKq3HWaZ{Lb*_7A%C(2Xs+Gp}+O&DE&M=
z)_ni>ZD(7%c7giFU%d8iq0yo@|Io&X(MbZ&EH|m{V2n-6=tw`!N4{3~39yBExVcgl
z(9irB_+l8b2Ze{j_b-cs^|#C1C<%YMQHUxaR&K`QH`B&%0;&l`iC|`0cPW>!%@Qca
zSs_i|4cvS0_C!kXnCy8`9Iuod_J+Vtj1pZV!&?eHza_ewSdToz4=Avaw!gpi0`mpL
zlWZZ@^?M#wLa{tVj^B;iQmo0S-KZ<|#S2og8+FRqO}&&@qqLP_JWyf~XCwtuPda0y
zxp8h_zfn&qgkAGyAskM?fIZ?ooreCVIM#0V$1eiPaI>~4H-pqcgjEcF8#>YkrIFPG
zzgqI;Zd62hKswc-0xI=eGPDkjv*7E24t1ikCF0Cxaz`ENPZ>|Pf%rh<1Ufxl?&Ilc
zBBZ_yeZ;rZi*c`Fpubid*KmwnH><~_1}G}djga^r)NTrzeMUlCaM80ql85*O>FxP>
zl at 3h5DM+Gq@+ZF-BnYBB<6s%nSvN_n6LE->ab|$QBgs30Zv$(<DDhe!lKFekFsu1(
zjuC_ZELPO<$+kUcoXS|Wz+cRD0+IE8XsO*FNZh0R5uWy~KwQ~|<+A*jYoOI8AFq#9
z?2YH740YAYVqUKCOR!2f5^7i;=Z;k>FXNn)YXc7zK0&OcQ<&9>6 at h~#`wYu-{gDXI
z=Y00xWrXNsjZ^t8D1Tc8(rPD_w6f^pEgx<P{+HsX>;siDszfu9+5WWD9KX*j#9+j-
z0c}0IE95v=PV)}lL_XMyj#nl6Q}y+eFAgMeYapkrnE`1U_msuVj4)yV+hFwc6|1zv
zJI=NZDE})>z=tmJsW{Jh10`~ljzR-umSJ>tb+I`$n&(elElyr@^Doa$v0hSLt<V4E
zjaZV@#2m?OU!dGk16+2AvKOJx)q|<aC%^duU277>>eRM*n(O=iGOvZA7#<g`*bTn=
zYT&NH{G9PF-U6M`O$N()Qn^|FE?}@X7~fH2x?@0J=l~)(2_l!s81SC21`$_7J0Sbn
z{i5biTwd0k30f|y!hHRvP;&&zCz^y`B2l|A1S5~`L%HML-xe`)v(?eE<d at 4l3SGvT
zopk#~QL)Tcw2BcsZq-&r?eO1mB1HxH`#w}Swy{|ryptUvwYN=wToawVMyZWYPw8iE
z>+NjyDw`}rdZN_QF1|~PaYIYGADD>i|1*%NrJ4L=tUe3 at l7V&o#`ODke#qwvMAc?O
z+ZIR+AYE at Ebhd8t3FEmJ@dfG#U3)negU;-sIw469jy3rx3;WaSurpPZPLXPj4%*?l
zUzavGnSyvGjwdd!utBy9(wpHXZR}1#eTmz+^nw)f_x<Q-%6^i002R(toWy*MV9szy
zY2VNcxXRo0 at E^kC{UrCPk(kt_mcX_PP-pw2BhxIhOv+JS*ukr9d=Y)K^1-OuGEM3}
ztMKE-JWYTA#)p at Xr3cWtQ+%eU_U)drQ0XIO=w||Z$aNMiYwR*XRv^Zd)bykfn;pa+
z4UYq~znWnEVF9{72V9;)zd?2w^X!B4^Q2cj>O#3o#?+%ieD(U?F2f_hQvZy{(?8S4
zMshLSdeZy=kMhUCMbClWzpWk}J^DtpJ94UTkv=iH!*lFHxnX^@ohP283!xfjkXJx4
z)SXQ7_j+^!MN8rbQJ<i5e?aBXZxt`qh?Q*~Uay#`d<o<cXK|UcBRMqn_z}+nDPa?9
zsho*Wlq(RxG{0Oc4<I)jH0l`V!H=gV_;%K5AtUGBz-@#1x0EAF?$PyOn$(?R!@o2(
z%lX5^zz?Cg5SZb#y+9=A7c3K$92*LQQ~uvQ-*E)?Jehe2^|Mku#C-cafUUZn6&R%}
z at J=QVA41cl=N>`^NB6*XC?h{CQTPFc at Pvun9xZAgbP2#)vutFD{LH}H;c~vitjkj`
z$ge(rGmDdoC<rp<FzRMm_F<%j5RjbAKa2{@;mUiGz=Pa#7<HzZ?{T<Aes>t1NUPWx
z{2e)T7<CubY=i<3k}-~`jsbGW2Lo~-#;h&=@(t}&_%3sk+?D%`IS?;OKdDb4<G(}$
zRMn2udkTMy{@|#f7_Pj*1s6R=z4sEZmnX*shyHt=>(Zous~SXsgIVo|s-6b=_&}gh
z{qnG=mf?50)R~gn&(okoUKUNfMTAnP^=*XytL*J0HJ{HNE}z9v+Rh}=Bd8NqafEa|
zf=*OHR(n44xGHCM`<r(*CNHtaDg^t#!0^@~erh*dWjJm(l~JId%TUzzk80(s2lp*W
zUeo*Ohp->|8LfQjpnC(&pGFsNW--KDMzN5=aY-;9sBw#-R9^D_!z$Bcs3)ecu-O{5
zU2U!i_V>50y*zba;MZ8-%MKhTevd`+JgUp!4$cj;u%|E+4H0hvN(Q2u{-K|>B=aab
zPNk<&uSM-s at y<S2aFp0=8u!|y_BR$&!Km57w1`O6#t}`r%kh4H-{aoc92wFkqFg+?
zv!PCS#X=gKiR8hxoP9&HSjxvAca`d_AskLFyC8~a2E>-3j_Fct4S<zC;;Emf)FG3y
zwqcfl6_IC-qV}pTLkBjt0kr5(&pHA0zOhIjk^iXlP;a6sLsB&&F*YXZ;*Zedx1{FG
z5 at Iu-`ca)QT!nlGRu-cNHZUebFF)Vz#XR86rAAwq7Q#NgHGM^JBV6DLDN9})I7WuW
z$pw$Zy1H at e?X1YSW5A?~$<i+@`Jzy|FRd^vE`zIaifMmy$d^@?dvF$QqFj?YEfL<e
zy2JPE<ggkMcuer`)&?kKfkW`l?t-UN>o+~oN929$kH1Z9#DXJYDeSJ_MoOMU#n1Mi
zGfP#L#rppB_9Ma9w~m97`D2ggeC at A7ayphE&{A<--2R5yAVZ#(54<MI9L)Sy at pJyo
z&_4ZTz@>~MvsilqVGwt5Aa`D at 1?JJHyj7zD#MSwO5T8M;lLo!R)KcQsfH$PgEL*sS
znrX&3bnapMXzsP1DVi|2j%ZN`E6|Gbn!+h!ID>BRsr_Aw1y)2^0!3Lb!#)t)C$Nx*
z9o6-VUYO=T=zd;bhGB7EgdwuV0z7}cm`m<Ij(W(UX76~V8*)Ck4pvR??N%?hhg}Vx
z?)c-+^i$95?4SA{h^G_z+?<3mph2c+ZC-RJkI%@ojm&4E65c5E&`%}~3d-p>a!`{A
z>`|5k6&7x)ldYtg6n%yARjR|7&)ElO0O|6*jVrDPC=)%OV~qb8cg!@YrpfOXD2sWq
z2=ZZVe7}X~9t<VQ2mb0?WLRHQX;?pS-+UJV`faWUQfgfBZD53orhsNsD4}azUU~2>
zjjjkd>w0G5D-OhX at d7E6;37HDWj<MKOc+S{<nL8+ws;FL4#iM)uoje?#Xaw8P<R#N
zS*tO+Vk72LBQz{d{_*M#gC|Knfw~8ud${j&hyh964|g1)>g2b|!6-J4#3V1TwN87P
z{=(FGqyMM#$kY?4gY~(G-48#C8;2DzA6a?=OexUr=vP?P-;4XEm25vTkAr-ASLFn%
z>StWQ at 0`XEm-kabc~1CJYe)+SvU-d07VCbo?gOjX at _|Sbt0G?Q%>U_QQ^mSa_QzFj
zdILgv)tZDTD^1#nYTa_^kK^~~vOi`boh*8P&Pf;{V?bJpD-`Sxr?HI- at __}Ei6R?3
z-h$@Z?}=dUaNAT;^D;k+`x&iUaO`GT_doKd{u8`A&t(~XEj<e}xe3eiSnDF?<n&DQ
z;x$kv!9fIN(D&}hrwo$&zeaIfrg*Uq$aD82F8b*br8Uw!MBykKfIeT&#0<~s8053B
z(Ew``K|5Fieqy{rUpq+pe1kf2J$FMl<H_&Lca#A=IHhx{T9HB~e}no?X-(o{LM51V
z;MWcOntMg!48q!(a$!0&Y@=?pXc`ZdZTm2ZH#?Y#J24+)(GTmDT8*4Jrh&Zv4eG=I
ziOpWLXpSBtUw?zTTNI=?(BkOqqQyIcNx?~UqQ at nJ{Koo%Kfha7CL1ZlP=!@7o^1;l
zj}fsf_%?K3tyo0np9CgTFnQ!8`WLoKfA#eD-BXW{M^B*>?8f4ZlIbFrl2=E&v66C|
zuoDD>$B%q_3dPL~Pvs6fSCbA6Xw1A?ZG8?Dcekqa;kP~=mr#%r%mI^r^O(!#nlkQk
zL}>s6_>G*=oYy`QQz*mBmSa?7zZE!`Lr1F$*Lcp-82$W at 8jp56=2kXShVFi4-b6Mx
zpkryg!weDmx&aMx&hMQ1rGbIB<z;Nx9h8PBb5fCcbe-A{{Lj{!lToM9Nvh||5yFF}
zQ3haiVGSZseC5D+<JKwd%XpEf_zD;f^1`q(ApN__g6{ysBH%+f0==jlc@)p-onZ8c
zlG?p3_~)!^rgS&vH2?B3T~6YMykr4Wu>s-q1ys$>sFsc{n{CR^>Rkj2P%nmR0*ReL
zLzz>LgF3(L(lIQ^_%o<CWgVG+2Aznr4<2ZP1_u=N*`LO9a`wX#OzgU)5ZJ4?&Y(Eg
zcoO4JAF)Fey96qKc^<CkN!qt)mVK_&UT^KvO(b&c#T`;_C6G~%e5W$PZ;~b7qMvy0
zmok(y`Hq2HWK0xEu>!xYyOdlFWNr%A4{ddn`zXedzkiE{EDRog&Og at +mjM<03gprn
z5iRBN)ie95LgtM+8^qA`Iyb_j`$VC1a<2461Srir`&2Qa_^lRM+RI_gdp@;3eMLek
zyo=m}zKAd_8!BHzg8?3;=>uV8=~>i475JX0kWs`R%86 at 9tXFnO?UgpuylQ{YNUhA(
zh4vd|48vv2w`bug*;$8kb at rreY~FKCEd<vUmw#yJYLJHm;U$fj7kHy9-s<b@(rxT5
zThrkgZ5J at bUpdf?=TQ!XzFN#r`#n&FAl^|M)s``SP3hJ<cVFC>88UO%MY%<|_ODU@
zDZ at N^G7Yncco_oMooi3YEc+r2vn;ApT$VQQ*%mw*Yts|MEWcGqqKqeFbSb(qh;iv~
zSWp7*aEW!9%v~2VnSO{%o94B1qo&oeSk{`qZnzw?gotkt7tQ)n?^T`lYX<rGQvDQQ
zG}zP(lc&$2ZgP4ECNA?sQheE4Kj`}$sPAhp*I9=0QYcG1LNHuM<wQI6)1c*5cD)fJ
z%w;S|O=%2tyaxfE;mtbmt2g=wtv$EMqIL(vvw;(=Y(Sv@$&m1iQ;(C<|Dbl>BYMZ?
z`>(bk$S at T-KmZoidm7;q9dHxl)dZpp;R4NTLEUqCJ*oZ=>aMcg;d}{#aRSZ5-Jp~^
z{5mPMS+PchtR8PzPqcb^r*s0VCTIJp8S?GtPJcV_XWu*sUx(9Xm3z7Ox$a-nx9({C
z+2r|67Wd^gzg!HyA<KI$8#wvC+UrMWW)PRdAqwSa^i?4e3(RfnhWFL7C9mgc-^<;i
zFUB$w0;T?lAqQl<5qv}YKE-{hEr=*EM*J&WLI?IYz5ur_>RT9^99=-pZbSu^Yk(Qb
zmD at yLt#jI$N^WRGmrzENFB{Q7o``P|7=Q^bEUlM@`EDo_t{Pcmct}ocLS4g;Y%$Hj
zisVn8w9RWC&~A$j05x8e(10PzPK@#Kqh+1Yb{t8{<w~02_DL=Hnqq_8t!O;CvkCP8
zUuteb?bsO*Q!}eGc7oU2-OdUT`D+vE$KR2y4_9PcahBNbWEd`u3JG_k9<_P%`Djvf
z9x%LL99>$;)bpsjWAxW>S@!H$A|5pQqy*@ZX9Y2pn6E7QwUpd*9_3OEJo5B;)ESfg
z_IkSY&JYgy(|Od9W^)ykHFO at 0OL7$dn98Z${9YGS=*Q_xJ1%AUT5b-e*Ex!<P2o>C
zsjYn*^$|AjJ|8{zki-7m<pnE(_tsfv2TrB9w#7}3SvYB7 at PtgWpU=ikXz4Y4^~s4k
zM{>^v6dxPC38GnX7~%q<eRf8IIw=>k2%^W*k{}*rE at q~P!#rlur)eZLw^x%dFQE1m
z32D}hDsY?IpO4O6NLiY7W`|W?+%Bu2O&oq;H3cEgIhfnLQy}EFW;BqZB(F51u8yN8
zLbuh3m!5XCxl1uZF(?sE&fc8?#)PzsC>}It`Rp~XY-PR+S0SG%XJb at FEzTxL8D_};
zj8(MoMEKbUs`ISpx^J^OOz)r+GnPke2|4c~>K|=H2`srd6n6J<e7dp_VdPHJM-1Qc
zZUg)S at Fkq1{1ag)D^h4nxj2pBF80rMVHY*chVTbjg6%(iKANb&m|cqZ<H(MSXuQ;w
zweQLezpzWg0#$2?iy?|&u$bB_P>F`PH8T8&uR2VTUySE{^UwQmA?p+9C$VRWeg?Vd
zJ5*#1d#F|Xc(86!oM!JDU^5&f>%T+i%@@?&pNsd`=5kVV_Vx!xZ7i at PNX(smQ1bJ>
z>B)<8+Ht;~mfB3*!l>+n7k-#3J6C#xTF_Hwh0xwraB?IA=9)u4XS|m%WXL?meVT-~
z1S at -i(}uken(Df|l1#mX at +SX))0*5bv_X2vOfOJq-#f4^bn%>br9f!>*VNe13gHDI
zAh*k!iox3v<nc at BII4{e`ST^zm$3?>GDjbNy^Q3xpx)>W{cKX&f;w`Zu55p|;Y$cH
zy<bX{0a{wtg8BqqC6iWS2%sDcJQVOSzym3Xb#~_$M{R57U%GnrYMu4A`IpW<7%7GK
zi`&yfmW`fBe%}Iw%7?m!Y2Rnsj-H4klD+SBAHt?+-`6?jrc;c+E7OsgAdPVJ#8kf0
zBNcNx{9Xs>2_XvJ>n7`9UJgRk#v-P25PZ1MUXZ)0Anet<^~mtziopZBOgJq>M`&nP
z)pU_@&UjGgYJv)l4r_}+#Mta582xN;j`piXy#}~|_^*NilVUM)S0Pe^66f^NA(RSu
zPe-J%p#6N>>tT%%^bsFk+}$dvjhst1Uq<ab!m{ir4CSrm$ZDN~b6d@&L9a(EMryif
z36I{ISH>N|=pgA-a_BNTmI`{r=L+gfEn<@~S5Tmf5v0IRtb>?&hEIW at aEalK-_Ygg
z(k<vTuL4FQkd7I^)-UW?cq0F=Gu3~^WgY3a*vsG3eJ})X&f1>;*Q?w288<HTeR6OF
zH8^0FHN`LD*q-(J?1^CLysn}XJie9TKwN}D|8`&+Ng+6g<QG^t-%7D$2S><9M%Ct$
z>#w4&4zSQ;75RUC(gDPNRh{G91AI+V6GB(;$#Yjxfy&i^NhD%E%2^m4LTyQEb}TU+
zZEYX?!dlf*;%bO$;^S at FD=a2FAM$a|5cFc4*uwJv`2NmK9hT=e;JyDhk7jYfZU;Ee
zv{$6GT)8^TXIn;FR6#SR at Ci&y3wt+19TwP$u#QaCNEc>UA at o*WKQK$`90fG~{uBnk
zGIs)Jc`psJ;gQKDUkrsQTHcH9DD*S_U4e{h#GatD{I#4VNQ^&wL!HtTerJw4Ov`CS
zGKLX)RDqOT<3XNlMWw06-eD*P9lTB5Pw(0HxgqLfsh|`L_SERhn;OoqfVfL)|E8Vi
zT3cG|s$1H~!`dI0V2McxMa;!nPJGF=$Xv`>u^wJ-6iLJj+6QZb$>eLOw|O%$NABaZ
zoh-SAI`9DnVoE at PJ?N9v#dGkNN*dyN_2Q;IWaBk7V4TmzCJG~Ih at suiv@BbXF%_jC
z=de83=fZ$1JStF<ZirH#ET)(yclh}N>3kjacOhih?B|I)ly5nlPw#S&k?OP8-h8{g
z-$`xNU&p#LJgg#DUPp!D!=6F%LH at 0Nxcjy|Y}|CWFJws5toA`QHH4My$==e&Z+?^P
z7`NF&ha+VxWEhNleE;CKvRN{UG2J5a!F6=J(@F>k-OqvcP?w_D&qF6g%Ist;W0DD^
z at CF(<p)xu}hSfTr2#07c3?2lG`osM*oeV#i+x|v<TZUQO^hO}$E!*?AAxSM6N0#0|
z<5V}ryhe<D(7SEyTj*>z)ba023- at L4K*~aqs(o;DhXXFQ0*3r1z+)Q)$B2$)5=qVe
z%<LQS$h-;c!szEir;C0$5zY>@C=`eulI(+DwPpW4lQVk^C-o6XzpomiDXFD-^koQi
z-RgQ=Q0y02Zk?MzCbyx^G>hl^4CJ~t)XTwo(j%(4MGyebT1Glzbb^#SRIk>AEB++U
zx1qsatj7&sj(v at x@CruB=zdQa|7C+9KwRd)CaN%BQ7v`V)WsGw62FOZ$5u~;IUSsc
zo#lg0v^#%>_6&?K`&3FJcocV{LmE=+`<({lSYvU(<sO-O6A0-wWd2Pw%u0VKxqYOB
z)=!7!jjJqLN4DKW$NT&yE(4}P0AHu4^Y<%xm?iHbVxjQIEEOj)ddU|i(10ess at 0S9
z_#Sn^Zqxu$r}<ctGrmWoRNsX3{0vc?OWc5DwESPmSRe(HXu{vK7)*scktt4LfxiTC
z0Y2M2+A?}E`-~*SzJKES+a>#k<`ZQy+ at l<s*tbqUCG`8N8YLg`h34)IKJtqYL8NC7
z$?!Pd4}}?f6)O7N+3|SpUHues;zJ6N2=oM=jD5TkvlOqy*?nmo714<c`ch}CRPL2w
zNwcv at lUFP;&$=U{D_+QG;C*5Y4;K)0kk;=+TwSep6Nsl}y^~pnkimoEPEg((7%xM_
zx4{2G at Myq81J3~v?x6yI_Jho#6LEd(`m-mmkhwbc at kaw?2?5VU at k$wzxlSD(WA!03
z{qM|d!UGiWPu`i}!@R6#GA5`Py!J6soGZgKm#M?W9Uxtyv62FiS77?E at w);-<&FvF
zMuko;`(}EG;~l=)y6WJ;xlx#4YqVjmArfH|I*30D;yU?eAs^#ZAL9TMg>ij+v!R_I
z;<ElH?k#^*<A*p&&AzoY!7n0#MutH6LTFW~BsDqt0UGbWg7T&ZNNNtG8aBs|FZou)
z$z97?u79?@FsT}2LGvoH0Wtfy<N&3Y at giB%Q2a0__2sYz6Nt;fFh12!2?RQLUt{x<
zpo_ at j+|}yn$WF{P&vJ*YpbNtcD$nunr_ at h3T#dyHJ4D!U%{kS*$k`ZOaT&pgUeF~~
z2)01qb;jY>tKWKV4({4V53irK&5K6lLR5qL#rNFmmju({+MS=*q{|XKD3C827khW(
z(oT3`uHPZLqprUvy?S{9gqr6$F_Ly*<_9wyh9)tjM+s8M$WKRR5p^7vvND(}p~$f3
zVX6UW5yQnVS#CNO=J?u(<8u#K&FI-=Olxs$npdQin)=65<!~biXZRwU!zswoK6zI>
z!v`tx(5b152*h3V6ptU*#fr%2j6nLnsE at tpTAveKD8ui$)aT9&+Mt;zyVabhlZ_9K
zjK`I=Ks>8}t=WlD#j0``z@!38)LwZ8v%S at +Pb_T@PvZS3!-w;K8C(#@nUIfaq#2G<
zVCo>$=ax()Lq|0S^gv58Ak;E0Zl1feH0*};hSw4+f9oU*AKy4&7%krB%uIPH)&$kY
zcro9*;<a-c{_06rr;6zu&IBFPJ;gU%_bQ3QSLt_++;IFV2D{-9_NPa=ni?R)R^6Ii
zpA(579;1ZTdrp<Vx_j0k{X*8K5}t9XYUd}nAygI|e|Y`<JYXzPr}_w*ojrR!Qd_1@
z)kf91MZap^Z*5aTGcF?C3Z+1R8pHL+BM^@6Z2somz${h)yEte8w2$KswtWu)QHK||
z4<_E^2Ly5vn_~&xt&t&!Yv6qh8`E*{q}Lf|^rO>_FE=3&P&d46BB)rHKCI>Pnc`cc
z_2D^52-3<&2BUN=S`^8*be+>aqFd@<QI=?GK+EMx-@*fnJ>iCRjeM1))uQ~p2o&mW
zEc6Gt!^U)YqH#Gx`No?9Xu}bkhqOM6Jidk=5P&?3JDx`m2t%I59M4}A5M{9liMQC=
zdh)F4DENA>zyidE*!-C#D9;48c%z>gS%A2XtNQ2xCWKnyEPeud(0e%-;R{ur2(Gw=
zNq`RB1h^KxXR1C-nTt_?!i9mvu0ZKRlu;N%nTgS~8YzP~jR=TJWc=`)iovc+{ZRL<
zk1G_^Q!|1~=Q_zScuUUlvzfx&^wKa-9)}ipV1edqkalH at g9CAkGM?ywTOYqou(|uW
zEvU#XRa?BY--m^_W#7m&8~sk^R$(o^)t1=YuayJg at ypOun|FP#*93Bh4Ob1}bBhGN
zF{=g=A%H-OW!>Q#mlM+!@tK^MgD!$PUsh%AG$f}_Ib)SF7~wY6uIYx*D}fD&%^w|&
z*em<AmvcR&=W{P1S%61i(T*6JcR)S9DOw-Gxb2ZVXZ3b?CI__cM|g_<D3kfjpR)uW
zq+5sJxhw0_n9maIb9+eJPSjKNBp%WJ6zl*`!zddN>!>p$T*VT=O-~>k<xKD^0>8Hq
zL>UkM|B17kcrL9?RuGS~*dw}gi6A<~pW53Qf at RM!w%IGAVU(HYJ|wxRP=wTu$=($G
zQ!#2tMa(xC_=1#&j|Q(Ls?4)ahhSMGX1gg>6Qu&;n-NEk(~RxFY_E80q7;AfQDGy3
z_Nh)xhl;{^xTIOxilxo1yrECFY2EP0XABTOHaf|lnv)bl2}&DT`ncNtBHUZ-<%aU3
zHd0u$Ul45H^5n(J%-KpMuirdsqjZ$e5wQT;Iy1CpBtg8npC&GA#mlNOm1W8PAt|IQ
zVsmVe*PY$Yc at v7gjGbsZJ<zMy+4<uniN4rBD*C|s!noe)f#!!1*QE_6Ck`!i?T*Qh
z`z=4FD>_-f0?=d#JPcF3t3V3xQ{~}!n=k}nfeJ9PDj at 0cZ31_Aw|ZSv?KXq!#63?9
zYYi3goWMT0&&ojR0qu5}h{ZU)NIx&uMS5o730JCI13oxSA11DqGp`*mA?@{Dg_xZt
zyk?8C<s9OvzqLHjWY5)3GM<8q6K|K%VZ}Cqw9vl$;Aje8 at O0CD?KJ4JTu0&6025YQ
z?vK0;oXJ_S32K5fMJqPR0L?Kh0<9?KffE>`x)cGP!c=5>mmyOUi6gE&z*dw2nEk6C
z`J+JoWOD3XlrMG4LKs9+`{3FRK07A><L9O#S at Z@LawbzBA*nqs-6z*abQ$8D!5qi-
z0 at HfM=MI)}p0bx&fQsTg*S#V&cTw*I&=&zbxzB4M^{}>rHThOLymD26goV6*6{tik
z{^*c8D({Lo!wdT9H+HLUE3!qLri|qepxdvr^94dWj+sU6r82TUxQnVt4!Kly55-xM
z8r9l&Q(D8%22;w&vG-7W@#A7dk>x-GidArWXQJkbgY-+~HwXh_^aqt at 34}EWEvim!
zuH+)@ybPQ3MNiZU``kv1*i?Z$mXjOqp{_pHUU<8^rB&8KY{;@65o35-#bEn)sc at L>
z^0<84pq3prb8BKP|3Av!Jg%u at jT@hAa6%FiAd!GzPFO=L8d(&nF(I-9H+HHhiXfs<
z>H@)HJ)EEcfr1DUq87wmd(|$tprv)8t=>kZE>zr8DeA>yZ7WJhLF6}+KzsYX??1mk
z@;Td_$(fmF`93qxJWper;p!b)5&0l6hZg&1laNRrltk;bB6XRRM}#MW+!ou{qLd&V
z>o at H@E>2t7d=uj!`O4Z2yY=T_&~Lyvh1nUOq7cx-pNRIcYAC#d!uWNXo#~TuJaD7T
z$u`=$9+MK0<iCuY+MA<mha786bK}m6PCyC}pauA+zu*7r8PY64dCb{JvlzPW(iTuv
zcMak9Xh9*ZU-g|imqv{v1T&re_XJ#x{zA#<Szr6|D+$@QG=jVRm at nC$9=fIFKL_ID
zh&x?FtzT_8Vc2(%HW6<f?5(aiP!_TO{m^a}2jiSgtQ{H at kVck%g<YRWY&86Oj}}5A
zp()K{CQZsKULh;V3Ey%&Qen;(c?UIzc*yv{y!;dumaSLV`LxidxZHZrPbSEr#NN%J
z{T$UXL=)SNZW*;;;c=7$Lcwc%-lOkPlMa8yzWawwHyFTb6i%%W$7h(F at u$Rfb_BC^
z&+s`EJ&2m6*q+X4HxQj~=soIGw_)tx!^l at P8Q^VeQ_v*nnso<@_I*HXV>7FtAWtXo
zzB${JZ0NdA6Oyo&YUERmMyM(fW3Vc1c`b-4cUDjyFRHiJHm8JmJ0)sRtcIeraRT46
zrCdc>nYx#a{EgyzJ|9MWi4uLlcQ*awoddRDhX3bAD)g+NGlzU at B**46eLONguVBuR
z!s&euSin>jWA!bSBr9U)x#`_G4o1C$cuY;BRmMNxR(T;3F}{F?{b>+j-egj0_?UCF
zev7lDeu6_Z?9XV!H!f(G=&?PbW6}C9cs<~RT+|$Jiz7N_ekwXfEQF?`S3Nv|1&s$p
z$816NUq|E at gNd56Alye!4VdSvt-}Bq>g7Qr#|32!>KIz^iO^w8t(UM&%9Kou6J0!2
z`qmCmxOZb(hKuuUizaviHM-c#H at eu)CweQ@=iscgj7gi*GA0zIt<2eIagQ!`bf%CF
z+E4bbPRn?+E-mA?4QVT7p%%yJVs|?SAI0UpIcX~wxmwuK#S`e!TW8WW at K0oJq_G?O
zXE%oYob!)fG&!#v9Maf!(^#KpK#}Zk-E{R<OKN}-qvJ!-2j{ZUHe}M26+?;GBJ_+t
z7%7-E4i^5s$=epbyve)0fpWik2a>@fg)1_^8q`bu`z>@7;<3kG-gW?v=eF)id6!db
z2TcA at q99L27KTHh1j|?)3)X at B=oW3 at i585pA0n^IKe$`NLPC>OGpSCSaeS^xY)z<%
z{<yjC??3i!`DPmW;~w?MOvAdLXl_w?P*?J2jzj-&AP9e&Yp}_g3sIl$o|y&mG!Pd?
zc>u5IvsPck+ at 9X<$wax3ftvXC_s+nx2WpBVhO0l(Ci)azU7P&Z+h0~O(BF`*u=HO*
z&3Mu<;UPp8u at G=<<GB at D9fL=fpqMEBdZGNUV#h5`)-4BU2hTXmWO(07mCOMPW30>;
zxk-7 at R9W}xCi1(Uyf+J;LjlO(_7s^=SdoJQ554FfyDoGT6JB66m1{zP7ov8yl_!&J
zWN*0skmmdLk3wf8cP?;5twFQ6$<;pYJajE{%6W_VXS}p9)RbP8JOktA%)Dm6yC8e_
z^hUZtApo1`Dz136Z`NtezV)X!?%R;xf>GbvS*mEt(M34#m~ed@{6+87vd}$fK;g~}
z6RxAb?MAcPoe<z0?HNHE&O#-4`xsMH*WgUecN90`c08D$)w?j6k2%V}P)J^V$DZzC
zKPZO!(QvwpHi at h<#W}mac8(2H9JN{iqi!Fq_k0_3Q*9UoKA##J2%1q?ZuGy15f5H~
zgZBSJyK|4akI3{;B78>)Kw*l~KeI&xnIVI4kEp_M^YY%!q86+7*3%r60Vi9?ot<I>
zJ>@Usc^fSzCGya35ZO$b)LkCkhJ8QN-g5WfJO6!`FY;etcCF%E(LHBwMLr#)s?_~+
z4Ud1O1ya5<ICs<DqF-RhcNrAjG$Fq>P4+EH$XNaTY<{<->nX8g(+`F<-Lw$pzN5j;
z!^8HcQN&Koj|q6_4^oM_1fE|{!1Jy>d(U40Bxt>=FB>U+*$Z=&PGNPvY>aV=(8P!%
zP8+(rX+dO4D#m<f80$S^91(Bf5tS1$?&F?qL`26>`R~Pw+<Mz{mAXB{9E*S!X;gn8
zWM8^FGSuTjwn0h@`rTlI3Yw&jk#0G8A$mWB8oj at m7kyCciKLB&2g0LkMtHDnaCFOv
z<EkAN280r1IJ&V)u%3fvlc4Qnjk<2{8Cgr*Tw!;aR4S?&9*4}C$_#ScIuDJS7m(74
z<C+1SS5TylFsrpITGO6YeI!sGZX6{K-<INO$jjg%_*RE at b+M{cC^}6<s6^b3avS^c
zv<jIXlcTj?Z8j;iN1iq6Bsg at Z<9V+rXj#9Rv~2~Ph!IZbEMvRNP~|~+v=ylG4Gd+m
zZ1><>ZpkVyj}9RN^|DHBUQm@{107muG`c0P<7ql~amM%=J8z+S+){a=-n5pv56h4R
zDL_+Waj*{49@&j*-5ODh9^k@)H5}Q_Rjz*(Ho(HDY>9=6$~wCa^HAB||Ky6saBbP=
zYvk~roVb9(gZJB`w2`Ql6m?ogqua9f-S@~UG;}D0wacUT#*vJ<M at Yg^Y;3&SG?Y7l
zQO&W)>~I%O1-mk!&|R3VpX=z+>FyWDpx3pB((C4js_HfV7N5ZbRjMmg-OmVcNAUn_
zDz7Yq*y=AKJJrGJi)in6+_bQ1adIS6rqYBNGAF<^G3j+zL+SdZ);e%E%~7=Xa0NMT
z{D2hK+~VPHymc8%KCGw=N&-nM62V+}RKjCC{3Xj6Jk0dbh|w=tyTId9DevLxorms6
z?L3gp0F*hM5B1^W$5XBzsXdmr=S^b}?`4q70BoJWjb4xi;;Y{PVEX)x{s1O6qVXRa
zd*F|ze^K5M&P1z;tDtV^Bg%~uOxiVMUIk&c9;0!4&i};N4Y*J~i;vOw(xZ15J5~+A
z7T$DcyA=chO{0Z2XB^3`YO&s9Scj-FS5(zJ2fGAK<>C8XL)m)FDb~~Sm!dB_j0Ktl
zOiGj at Ae3}evA<ocjqXuvg4TYeVr<K_o=-V<du+@`PN4OO*pL5M_os(~nI1Uzh^8c6
zs96T+&&CCViZOv7CEpzy0(g>!>Cd12rPbuE&;VnZmzyHj-X6vO_hf&VBW*Ev7y5z*
zvR454_IeUUv)7us<DEr%9&jyDxM^B4c$!oNQ_~U*$~VPlX|@@GTYV!~-Gccd=yCu*
z_|00w*bKx>NQ at Ttxdr{d%Ni{dnJ1W`NdX?3o9i$l6+)n7cXk;cx5P}rnArk}!&-h&
z7;$(VAX42)w$TGVXu&Aidg}uoQL+xxq{0_?z!KvGDA at uW-Ir)e7O)}aOfpAkGhYhD
zMlu<fYQD#Ln!`{YJVDOe!6(!7Qa8;wKdf0Vw417=XLwFQo=GZvP^?{rvh|({%envw
z_YwD~d}PrN+YW^mlUj^>^!#w5y|d27-;6mn{-*A)zHak684JNteb^==TDo)I^7(#r
zhhDr2?|ZF{c>Q1!)h|h_NGkc(VUfWBlRLqW+7;}q*<<r%tG+07{c<kK)cSBc>b<Ef
z at dcM3-y0W2h5%NQ;2V&8`)L^ZVwF%k)HkbANhmgBJ?d-Tg9p-9cGilHAornRfxBZ+
zp8Xv3p<}6G&<8c!4T_;vZx5f%{lA`lKPWDg=8B-Gl}8DI*V<sfEO0bM9+!hiO(z8>
z5xCL_)=6sBD#kUR#dQUZie*1UakpExnIiTJGrJ$o3jeZ%12_%GF|kVh=Vr67cJu2B
zlX8`DFaKed%lYgnA&wru at 3wa<z`XmsEa|zf|4i|y#!!qHg|sm+t2Amq at cMN*00oZ4
zN|FwA<{Z=b$m$-IB)<f>Wgm95Q{B8av?^k6xY0>F)cb+qz%R7-oaGG#$^Wd>;MGgZ
zp$wm{=%q0zln}#?XS5^=-SGGsZ8`PIZo}+fX_NS^X-}GBf0A)?p%rMJja1;wZbRj-
zG at 0+)c)Kdq-Hvdv3C+sYCgqgH9Yb9cok8QBm=<Cu=1~2_ at Y}Dn)s$F6+H;yWWtySr
zIW2hdRG~F`x%!a`R85ny&FadzQ4nH%xw+#dVD?#J4ML8p6QZo_q&jYn{HmerIZZ^#
zsQ-=TNz&(qm1H(3-^}S+*0kivy6Dq4-d?bN-MrItk8GIfl<u|Kc at 7pe12EA7<C#XO
zy++_cTU`Tu2!Yz^4f(U;tLOG7*Sf9|p^TWY>R$sFK>oXN^t8N==W1HOGZG;ccvWn$
zbBiH{Qq0=-%UZsLMqHQ|2A}iOed#(<=HX?m`pS)Z;`SPmC^@N4-Y}fO;@pKI3=8D?
z%SV)3-!xi-D^l2%rp;cupe(R*TQ at yl(;|`#mz=@Y)~m!QJAlqt+lqV&{W)Zt+7gdz
zwu*g-+fusu16|ym9-SgQ9g0EZKyia&UqHk!CvL=rIRE<$X@?R^%6-$eT)UY=yL8)u
z64q%;E;;a2#R;GC2?OCQ>cIT4`!_Lak9y;j at b#nj`sPnZ_v8&lvEk4C_r$aSEF}a`
zHT}R29_>%qK^e at 4_|d=)M^4VugI0-p=dyzrPhEx5tg_sa115N+lCZ$-xl=t;97EjV
z6TrKA(ta(UJ+-P%1wL56hO=Cs%*yR#hpHPLLs3fHS>uFsjXwO!2Y;}G{W<}A!t0#6
z5B@;q)>+H-ZgdQFOHQI|QsDU!$56kGT7@;AXJ&5^%IB#jFq%3T{=TpZ5b&D2pmr$q
zw5YQCdiCYfkDh4^6aS!1p?DjX{6U)_)%kq3E3^f8$_Hjk1TBEq7i&sKaT<Dhy<O1U
zwfSKDI?YR4)|o_i&}}#Y--=(^5EevnD<HJ7g-`yd%uPWN^=iRS#e*+p at wH$aU2d$%
z7*sZRPQ*|izlG2`X-zwDChkek>4jEHMa4uG_Z5*X at _vHO;QoRp%C>wK`R!)jS`?u0
zwNWLJF6|ha@}%bz<PCt%H-D<aWF<f@`zZXG%xR4%MTyz>sDsAKYSxIZEVq>xSAI4h
z9V4cw090m*VMXmwTsqD*`+pW|z5j<{?+e<v5N^-?;R at sH`R0Svb&XGs>YyA-yXyg-
zh1Q|jz`c&6sEpQ+P}#dV-orDTOAJq6(0oE#_q3l__&u~vddB}&n)z7_w`b9?IsyRA
z$zbZMPRN`ob1+HW1cpoi_(;~ynk at O#py;C|a1W1G_aw)Ap)Ym6VP7B3gU$61|1CEe
zMNAI=?X<CvMx)qo4t;|8^&T*Eyrj*9AKLKif4V+PM*C-U_h(?p2Vb`o3q;rWtIy^p
zGUjZX5d-ai%M47 at k1^#9TNWB3U(rJ7@`mD#hRv^NGbu5KuV2wNusVVP(Yft(+~aMh
z3}O8=X_&mBbr#~i>NiCgQ56p~c4B71+TQGi3<~gkw|2-rS?C^BfUz~H7#&4=j at kf~
zbngZ`!@ho+kXkU;@KrxeZtoK$F|ElgsW-!W&E*DnGcA(*erKsDaet3G*V#7|fUr%J
z>5aa%C1}Tk+f>qMbw)LeW-?kuS%ZZ1pKOX$Q-9wMrAj*PwJ%TSyKi^cHcCLjDwDF}
zz<={spElx^4 at QQzPpI93>RIvX2$_HCmp*mTbNNI2#KYX2lfPbHd}NdPE$u3<cTeDm
zIzolt^=Rw$Cp%s)_aNK4As76ciYyQ`Ez~r=et<TaqBckeXyUkiLaO=`3r8Iu?3~{@
zmr_+HXD0K3E2RHf=WXe`ae`Tf=R-*LxvFF6KTN!R?JA6upN7%pS&0Nuj`^aLz)(4@
z=;{3;(6DcSHl7 at x4=~5-i)DCN<loUxhrN at tYSoFroNWtFeQHf|)~l*T{KD=8J58!+
zhQlpbu9f6&bd?*C3pljYIfN?~i1O?1k;vOvIu*Xun^)%<x>hHCzjlPw2pxJk?i^_r
zGwI45+K_+`92yVA=V at Mg2>D?_?oPx_;HG(53#KgrOrlvxBkb88>dA&w3vB{j-Z*c8
z;e89ulVWeEx6t0Ea17sCXh9yWdrns6-X7)oG|+ur2rWvKrem9Bih=hhjZe1jne&O8
z3lF@$k?Vk#ERdYCP9XG6q)buO4tY<5|JG;Qn|E#3mWNfH=t%u-xJJkw&2vS|&l#=N
zz7}jQM7HXAqlS+;^q#?)XYXw?o+9XZ4;gdoH73kK7bq=n-$DJeI_54z5{r?6t5Z}H
ztN8J}Q at i0qA8EPo=UZLS`i?w{m4=dMS%aOzikD_--cZH-lO|}3#`*&-1R{RlMVTUR
z97tQ&|LzzGQWek)^h2{1Xc|VnPsmjdxjWjjc0nv!4?p(VAyu{R4ch9yyx|IIN{hn5
z)asfHrltlk&FhV`L-`mryTy+3dkRE7Co|j#R~}ej=PoG70CCX<EvwpINQDSl^n1!Y
zI^$!29n9$6AQ4Pp&Q7&ZX5Ye at O;2)8t&LY<DSV6tKY*UE2X<9AAzF$vMdoLLP06Vk
z2fj~>O2zEuWW$^6K5uO%`sx{wuJhcvTV#zG=aPUj*}Po09A#M6PO?r3StGOjvU6Ur
z<Q2v^ie?UH3OQBvXfSKRK(U2w{@460FUI)`)=9(tDCFB3j9>=1c;uIfd(<8iPl%qh
zNwe_8D|aYQQSP$ot at 04k+@*}zz|%&OC6z+C=XN2w8InlPE6j3W7B&Qgdng>l8!@>N
z&6NgD$ap$*aodUNBZD|3PtO%Rut at 3WQaSrY0$6`22;_Ee+ZlZ at f-#*jTQa{`bYgl5
zJnk2rIDln5Z8Y_g!@4qDR%OJp`@QV4TO27KpYI}tB0j6MN1ZQT>w1^2{y-(qtviDy
z^}kK4>Qsr6I^U)t;JVj~G<rGWMwwoP&;Ae2B~DFrsHU^0`?&yx<}3(AK5 at teYWu`E
z?RIwD7D#-wSW`Uc|3V}Y7P!+!lZ4RnAC4vonY2c9F!^blZw;ySi{fL>^QU0D(gkx%
zi5uu8F_XBh!p*Bqvt$CCX^xqn*}n=JH#d?fghPD2=f&iD&8<<M+5@^{1Hm?Lv9M7i
za0dOy05e_2EtS<wbcHrXMm2q|G^G<z)kQd6Q_r3rrpM_f1~_b9-lJ?<R-!<#-38?)
zHz)N*LW*{UL=ys!B6ysErZ<lmRTH!I3eV(DG+wrDZZ4OH5XDYmq4;KO`uPkWldnrN
zy5<<~*3S*uxmR!lI1scZK}Z6Y=Z9+-Xq+(nlpDaQKmpR=(e3qv$rE82R@(IpA5wFB
zav;12NZXm=QxKz5bnMh8o!uY*x{p^GVP=<Q-1_R&^7;R&)rAD<@<yb`dKcV$ICRCi
z_|d{`$o)IT0fnaRcyjcJ1|AnKo<Z&1KLZjkPA`~dS`_k9o7c+@;H=02Db~iUg}v|?
z&<O)PE{De*xWO<?^NCoryb<$pc8>OW!l47rE#Q+9s?^DxFor69CVP2~b{2B$yLM;i
zLwFv!AY%%V(pko5GXg$@M-LalT7SdqVVW-`&*1e2BKTc~f;Y4(QsFj`OI^grygqQ9
zME#&1bLi<U42Vq^zJ+|iyr0O}&Oc3POKO=%DQsq8<(EXygq=C#zx{d*1>GwWI7)Os
z1b$f<>L(4WV=+J2!FF=K1<MQO(cJ2C-ud=xKP;@CElkqSqY*9>h4O~ng4oau_Lklm
zPP^_t9P(Sk)~2erV%}&I*3tQf?ITc1BgQj)HbV29ChaXyL&HT=2f?2~1>~n$2gjY7
z^Xa0GW-z1mT51%I`TW#wulpd_;@vkZT9G<sfikz7`?;P at 4{?Vy_Y%<@+FL8rXV5i*
zH6nE|{C%NMr2COQ>Nj%R?xx{PmM4S*HC8ylCHTA8Q0<{u=S<|*B5xSV%7^E$j3kGd
z(e{5jDgJy=8&UX~&7Z3JKe-};!Ja<$th5_GdodW$(6~lUv|*grP?dgj4dZOf)P+Z&
z$v){9q9e%t^8a+&8m;L6?X+c>LZQ2mC7I76A=v$YepB1#zrShJ$7{Mbw2D0rt`R{P
z_41Enq9ar%ZnaDgWyCZjCvs at dH?J*SN at bT41{Hn}KVEiev44QzMw5LaPl?B-q*I#I
zz0uYGVTYqnjA3v+i at kj(m&EzT>4tfDJIch@|8E}s{+&&iRk5^4Ll=b}IBlW30|Zj;
z(FYauwaFHTwFV2_xwP2tVD`+}%k>tfbEy;V^D$L?%RBz)@ZT>lHbheC0pww84jcD#
z%dLeO))zBo&JLM{vdaxFS7WvpvZtu+;7cp36C4<E%JA)1?7sOCg^OOe7`cx(hc^=R
zcv!g)Dw}J-D9-;b_Jif~s}n2^nhltXd0FK$-EzE~nLIdAqzT_1TW6H`L)~rol}hI+
zp|I at wsB>G({m!1Fh=W_x=A2zy54glscN+YBa8NyS_Ny=c`E^To3_i{7^a8!y9Pd}V
z4Kr!<so}MI-TD$cK=;9SMm<>5v=MMXsx at gC{}_EQhq#&JjvvqQ)_l|%6Wz4MNB*G^
z*qrwapU~*h$wOuEKMN3=tvu8}&cck|t)-5=6Kb$Hq6BUKd0Q9Py2ty|+;JEK{hxEK
zBFLKFH+V20>+!Zjq5HMre!D;beAfql%XNc_PM46O+Xe$Y1Y$Z-r(&jbLNc$;@ix7u
zc??T*9X$Iw#!4djNS#b%h-mD3B<&YokaErWx;PX^e8>buB9pE5=Qo3S{RY_TlNJVi
zzoUu|&&w%XA~jb8S%??wN#QQ##OdI<Q>+I?ZeB|z<IL|-mlC%y2UQ_mRUJQnii{sO
zoi(=zKa1l=^~1XX6TVVOR_ at sAIK66}gt#4yZyX55L(RcK^J)ODIc;$@(``Y6st?EW
zI)6m5$Z}}IfhZWGE~A~-HYDR&><9%koz*J5D%pAzLmUN<Ql{o5DV|;s{YjMLY0<F*
zvBxfvzVY=-8K0JBKbh~qID?7$e~!;Ez1~(5+r$nwPU#x*O96CQorNM3tO?X~0C4Gn
z{ORl2^|8VY3A}+PLA<5DlS^Y8=DuSztm4Lc%$pHwQUUWXiiG*T+-<QB&NvW;TF~+h
zWTN;0zDIssNFkXQHytTYO*6)rv*ZnPjtm44^=|G^w at vFUikH6nP%3$)3Z|Zo$}CxA
z;7O(}cLH~xe7OB(IC<$qK2I`XUdK?eJNb=(2T%e?{1xVEA)F>K8k-~6?Up>cCJ~B%
zCFZg*<Ab&#$&0;gbpP&KkFI66 at Ekm%gPqCryMw0o$O~8G^OM-{{BC=s?yh`(fU`$p
zI(IdHA@`W|dE|Zhe5lFMlEf<d8dV`<joHVf99@$!o*Rva>s+sO_H7YUbUwUYV=;4I
ztBwutzKL?SlIKYOxwV>?LKYDZb=tcfLz!6^X<Z~k6QhOR at yvp(H_?l&dvivZh2EHh
z at j=&6atLtMvw_tw_nQG*i1fRWfH~}GP5;3g%`{63y$jsT8=<JTUSpg`$+a&p#?`*u
zXiQ=j$oCcc at Mi#r3jskyTJ2EwW-o1S=R7Q0PipPPD%fz`swbEQn>!;l_W<Xo_T(d)
zl>bTh70eDd-f0`UhjA-V22n}fUV5~i;#4&aW2hg_9rahE)1wU&sf)(Bvxxx|Gpaof
z<*^x#gD`X=vU$(FVR3A8J7|j2nXGTK^A;oOwVBGvKOqVRAxj0+!`1O<2~nrIwyW)`
z`S|>-OfGpr>BO$oyafCLb^VI(#gn&$tpo2jbT+Sg!ol3^dx0cu2iWlCdlSDQs<1#&
zRNdk9?6ta9_ZjD-vH at nSOQaBOCpg3njOk^+RL9K`ye7-}n<@TvLIyJ2adl at ZvV0*D
zo0hl(2T^>$@14&M9k#cH*+@*t0BNH5e-Q$y|CVwof9Z1f`lu8 at t$rePWgf4OB}(N~
zdBbNb3cC`xH4V)X>h+|cEpuOikKPNoF-T9L0MIpk!C>QhcrO)j3zvw<84j-;xrJSG
zr?y|0|B)@APzsljp3}yAUq&dtgySEOuJ;c}sR8r?^|LhiVGbzkPWAV*xvY6ocKS^6
zQa4X*bS`CHpVMz+!GX`qVpIzmi({8PH8jM=XKC)ngS=UDGq(7MFQ|l^_njD^E{X^2
z<afJ<q<PNF<SUE!-611$g7f5&iko*t-iG&?bk79B8kWVeaAPp&uU7$N)DsmS-;@1R
z3z|0?0ThFg%^2PleOl{v`@d-``xDM!{=0=@G+E)2<W(u-VH~disrKO-RRHSRA14_8
z%cT2Eq`Z!L0x(rr*U*)4%5^jqp%haqXD7bD$yZqhpsoVU;OKP_$K(yqF-&!!`^}wo
zz+arA_ZR<n*0I&Bs>HA@#ueeS4m9yuRYf>@=S_Bf#9KSH39B^;JcxREBR=8fzvVV7
z2&S7|A$=E{5TGek3zO?Fcx^c5K=%$U94=YJ=;{3q`HIl0vN48vjxM4wTTuzGgAW=&
zK2Z;R2xxujx_b+S1t at U0AikbOAJ0gRaRR`Av*-(`ADlI8V$p*fQQG^1Pm&Lro>*7v
zzhcoROh~u8^<wy=!O2$w=N>TK{?XWYckrno1+dVnzVe~L%%V at W|Mjy7dBdlR3=`RO
zp$9xm`Q10mh;Y`IAw>fR{|#Z$tQl)IxQd?|GT8JGHZjLEi?zE5clqwUX at -4lx;JZc
zR)y#gn&68)Zn(;(k0VuXjO2&E9E+9JX7Dtp-?&Nhn8}m!iW6hScaExSCxH(`W{(@a
zw>VZTY_{H87pd6Q{MB7_AJV~Pb?qm>FH4&&&|@A$4USlk{u?LNsu#)fhGX-*A#l1B
zi20)9{8hEUV_C<`4_TP6Z%rEynv1f;82wf+Z)ncVtV^e^c2!BTA&N8#+l*-Xsrt>R
zd(OMn&o1TH4&{D<yoa!9hl1E=;&NvFX4uD}zY|gLQrWv95Sq6mh1R98_ERf*HxLkp
zW8(pna9w4eTW7=}0hc(RilD~&bd@~1k=&rEo%c>Y6q1F$`_33V9O-VPsj{*^WOO>h
zl|3WcP|V2ZW3JFP_JAx+?NNVjFVj0tCvIY1>PMIZ3Pu{b8!(9SGK_uy&zEksXjUed
zW)9f*F8lt^FCiP-e~?dMn)5-{!-;HziRWd6hK56BuxZw>KZgH^9My<;3uPF7=!fr@
z0Wv6yj9+P(z!{UQdDl!z-&71Fdtg(uO at N-94tTc~Bxjvc&!!SCj<mvYDd6Ni^1~Rw
z1Ixh*>d*uWhj3xDdUrbk7lR|qnph8-w8*Qt;=Vfr$t8Ki`>V%tWhyD`29qmpgywBr
z=+79*MgfAW?a^LT at Q=Ny5+ at 5SR03$LQve5nnkT%@7v{_o<=$l_vrwhnoVQJ~I at QE{
z9_po20c)ET^oQAdnwRT0ur&P`C0`2cb5oE(cWQD~CmbUG3BSd9&cIk4HuKuyH;t^4
z6?WtMNFyFv4BY*`1IxcHnVYR?w%Neu+1hAWfvbiN<cVpNZ`4 at V59fH#pG&+^lH(Oq
zFQ?NJ%$wrZo9%TO`(s+72#>M=f?dWu#?!uPYH%*~|Cr~Qe++Z=|5)huk>KEg&|?@F
zr1Epl3NKnT`sZvx1BPi%Wwj5HUtN|gb@}$ty4n4|qDsvB_HC+(C|g!uq|3-=NEoYK
z7tuZHlGqyl0;rbHpU4VzF8wX1{{`VDH=?~XE(7mP^UKpN|EXkasc?s*P*`FM1ELWC
zd44ExMOIA3c=x}Dcc)2-CeD{;WtN7fVJuR!1d|F{0PXorHVazvOwErLCKTa*2m>bb
zfoH6122<k-5$#U+EOLgu at TL?Rghm|AFzv|X%_>;LPikCr(P#=?P_LP`&ZE&?RX^-@
z!P4lo;E1P8Rd1re`}r6nWd_FN<`fMh7tj<BjJ at IyFu%GcgG5tQT;c`JO!r$*-{`5T
z*KD&*D?y#l5x{YdZlrKf{!y7;Z13qVH!2yEw-Z$msMe+PpSjwG%eg*+zb(_GJn%jQ
zDm!pyV}q!arB4qbIC~vn%aQX5Eu<fcgZ-jPd4qZ#tFZ_}VA;H!d^QV3?o#)m$X$ct
zwB4eLQ$?>MWL0GWD$iWGd22~Tc8ZssL!ZzdZFfq%n7pGAs)#RVS{QxQNX6Coj+f0|
zSr at KsDS3nxL`9ZvSz-%vEYxLid*lycS4R(*V3eR3Zb at 8@4$6ol%Kd--(k>C=zwVzd
zHb#+4uyG#yXE1xzDSQXMAAON~R@)UNr7xS{IXsyM+_Hy-)FW)b_L~7{-hs}g9X`sF
zJ!(hi=YHoe^&Qkk%Q=`sP*iv`{Ijc9lo5SU9f*kAGCKF at l3}7sXy25<KZK&E!XA>g
zFK+8q#oEOyL$|c3J9f4=hC1s=VbKiwCBBR;`=)E?%=(U at 5HI|~N1e$H>Ep#ulRC2~
z9$)jIy>W(#vip_)k at kMeN{mr)_;oZ<-ZZ}YBE_vqwpOP(3n-2ed0V02vX6pt17-h>
z^J_n9ChJ#<Lgm|9-8Co6Q%Gh~$}-yEw`mLV^dR5U*SR!%UnXhi5e#{|3S%6p1k^cB
zXPK>OFHfBGJb%e7(#|51G2i`#9Rn49XW8epzW1)Ae)D2Ee*p_QQ=%D<p~Dz;j_X-E
zH)q1|Ys*ffNps&2TZj3cz1%ev#Be^?nigEeYA>6bloCZTI&}>>^kKf|;yXqT+^pQy
zvQh;q4wJ7Hub6nd`e|55k%QvM(&6Monxrxb1hg~+Xi->Chj-m+t%IO4x5frq2z>^x
zKph`%nxQ%*Vr)Gnt63*`r558Fvwy&ftoU`Beh7qWGI))iSe<5 at O0pT&k@=R~h(Hok
zAU9Hd<F+TptkrrnsVLjX3|+>SOw+qP>i&sxP9js&ucF8jWE6SB#zp>op50&6+nD3h
z{HY8pS%%!Rm+C6KOp%jZ!H$Auro}B)AaweEusEt4Ohr at F9<SUT#`t~RcP8b`ERc|Y
z3)q)>-v6ROe|`3B)I+m7hQxEA{9o%Tr<kL(v18Oc-}U<bf^6!Ng4NWhg1ltqNq12N
zr`cvt=(2aT=9_^%QA(MnF>J=Fbx3hx-tva5O{h}06_jbFG$?RnLeAKSuU~C-8+E|-
zfSv-6Xe}Q7Ul!ENA$}y;j-1lbra9ych8%Dz#Kj6iP=@vYY>FhRnlKbZZ)0jt#B2QG
z5W&YdYMIbky=s@>7JgLa|AglT>4p>90;ndBjNaeJsqj6klfDd-Y-W~vIPXU^(mXw@
z>*qab??(kWmm)cG{4Jo6ElO$$lgyp+`WX5A{zH1=VR^%m4QNxIEz4FBR_Zx<i%PIY
zF4NDXq6w$5YZR_4bGxX56_qO|$}vo|JWdza^WE>mHAxiB>v=#N26=i3#`oBdGPWiA
z|1V2_&*pB)<_jINck`&R0-=MfW(M;LX+HyV+aN<L*T4G-0nJL?p=(6T7Ich!dC6io
z%Hy=s#gNBy&i{mXyy`N=hY*U5k|z at cL^2Q!!;hLJ#M at 7;p+<_bNByxNzX#<}QW3w4
zc=u0NyBP6 at 7wzj`Hwwk-At8P><ESE*A3l!E?*KGd5$CUpCgaA5p}#TFWKaHo0Ig+i
z88%v3KB~-2Kf3bKYx@(~XMx+5nT(FHmdu%KYe?%Jc@=C3op2*B$;$ocjO;yMW~Ts(
z)HUm=ykWTDO7u4`4%S#R{r*sapCXqsJ(HXYX2LPY$|gqZweGp&f~ollNLh?LAgTb<
z40VCT<olC3QyU|NhUft%egP%Mg`jwb<X-k)_cPgeyLA^uL9yb?6hIPs3;(PId9Oq6
z`8=MNf7}|BMqMr#^vyys4O1sF_b(tjMjSd-n0b~qMpk at ++3Id;$dy<;V>{R2i-Uum
zJ1;_ckgN(IAXOjzSG}TdnKmYW0|FC`S5GbreTrNk3AYiWGSrrMQRN}#67Ry_E%-}S
zO^iy!T;if8m+UL-82WjlYGNE?&bFuxm at 7ADfeC6@`+Twhb6hO&#Gg&GX|g$~Ike`B
z6p=aCq?9+>MUL at tb0bAW+@ee-QYrGY_q&Fwb+$~2#?H-bncGY{%TxqVqO$ICQ5i~k
zG at vv^4nO_nlHVCX^}PvzC^@OQbx+e7bnHp*7+{6j7Hdg|*D4J8P?2<QY44?9ejut;
z60~~j(10>=ica?SV}bdvx?Z;KdDt*k+0{EEFIx93ZA6Bato&n(?12h!d&qX=p~w>C
ziuQl$`#`oshPf4~K<ggPrxo33;fBo|7R&?3{XtTCzL)O3 at lRhvtC~cfL)P(WnUUlD
z;8?&dqG>QNE>m%&(YH<S>DG0Lh{wkDsK2!9^47+hS3OHOhkF^X*cHEkNS5#Kh(EqQ
zdVe76$R@%bqxJeaP~RLpQfOYKjXlctx`2?9k}`SwKo+tB#cdNmphSkOf<0g;!$0AZ
zB-5WFZhQRz8wUl;cqmxhM+J*O{YkFqYzdFO(G_aIcURG^5$a>LF{sk0^#CiALc=g9
z@{g$h0PIO6<c7B{-iF-Z(d$=+!;gyT%X*eDT!Qw at +0IFKFCzk`eOb0TAcq)PWJwu*
z7V>)4{$d5x at pK1%6a94<ep}RUUk~|IC at beNNmm|QWBq_PO!HgM5}sTIz!snI!XI(7
z!p~iymUN at usGJ3RBKuhaQ7)Ijo?yV9;AHO)0kd~Nvk|?=#=x)$;>KB!HgK_#xQ=m1
zdBgRLm}NhH(XsGZ!l!Oo#w*m~7p&bXtA{>O&SnZX%mcb^_(Bbo^*7w at L;w3XONCHv
zL*`cW8mqnzxJZ5+p%p98dKj$Sp+_Ay#iIoHh&p?Y_WJVp at 80I|KB(J8S!?|t${$eN
zkGi$;#7}LKE}o&$V}X|Zj)5wNw3QG1#O(w#%UF45WJr`8-YjnzN<*SFdcT%_CZqos
z6l(1NCVnb&g5{jDjG`1&=I}fe at uTmcPJx0K?%IF_ig2ZlTM&M#HO;%~3N`A5?fsTt
zlv_z?)HAr-3BfK3+5+EtPj}u*t>tBs=ckPl6!jH_oEnSfdX~XEn%<dwM3anptLH<L
zjbG+%jRLETc*G9mlu4JjCCpo{sIwlk74^S|CP>%&1ceQM?H4vdpCT!E6djZ6n<36W
z6CBikt4vZwj!W>&^$n6}8Z+?CXV7^D5M6VteO!Zat}W1AV^!riJiejA(cac2#VD6r
zEigZ>1^Mz?5OS~<q$q0vM=Pq7>2t8cLvLzOnDzs;qB5^Mu>SX(>wxCw9ELT=PRScR
zG|QMh`Yk+&3x$2Nbj$iOv=JoXQ40q06TraZATaGy$LTUbTo~F*vgxd-48Fj*CZxXk
z>xJdo2vmNfdbE7S|5cs=%m0eXqa8+OFYPkI6P8zvmjCsi<>AMYLlp~Qi%hlP=6`EJ
z|J7R1$%og!)PjaJ9WM`T=os+Y*fEg#k*Mr|G4Arl+qFPMLVy8VUhuUFly*mE<Wkyp
znsXx8YxJ+NzF!72`V at n)zIq^U-E-(uB*-2^n@@(a5!%;++`-<34e at P5mjo)TddFly
z+$81V>K!Uc&@2#V6d)-U|DZ2xkYoxl9AUr5zfA_rJEA*i_ja0I%G@#^?ed-sWHs>o
z>Y&(JR)fbPe~(?LV#Oe;_;>_5*ACkL<P7#2e#DCLqsLYiK)W<nygvgY=LUm*@}>&g
z9|q<2`i_B!5fw1PKZYMe!mmHOEmJp}pdb;t{A{d1WxYSF=osorgDon>aCBb1p<~30
zOJ1<1JJMTo&(LP`t$S-}&Brlc<kjB&<yV(;Q=6m-zWdIoJA%QhdLb1Ns76l<G}KL?
z3&?rBDQo$1d-Vo66YYmpJLb at eP<W<nM36Wrx?T&CFZHH$REf5uEmLE`N4z7$D^W!$
z#Wdf-?Bcy at bpj7kJ8#&$$<(9I;vmF(W2Z<bsoTqfv>_p?<V^Ho8*6N)7 at B11(H{)K
z-~+7ia95*2Dx$v~o0LG`cP1$`f)ah2!sz`RfR-K$JNmSi1C5;LlH>`TsyY=zcT)TD
z;1{B@!A~LGT}-Fwx}Qe-PotJfvmED3^YEmEz%7l2Ln3-4b->NgE267N)B)PYAB1+s
zu##QO`6VJ<$N0L-$hkT5G^|5l?K}tAc~;!I at v!w9w<9Yq*3*`S>5>3rp!lfW+e8(J
z(Yzp|DVOmZJj&U6^W^AtWXOU%v;R!>#t$(EbEI}fpLe7p|Cq=dZOJ#sMCu~U4BHJf
zA2=J5jfW53mYb@=A>PN9Qk13Fb``&oW-;G|BX#xzsR|39V*BX6pLL3$B%siJto_*V
z8mCWHj+{g at Y$#OmGgmlh*2#WsGjd*L?Up-BX?W5k0OqP+=eTVA6Jz++6wkEgt-Fb?
zAulX8%`@bS={R}q3q&_f(ipuKO}M>#r2)SrE6E8a&qpdWUGPgAi$L$^L7;yi$7P_(
z8gU>g*VR@&aS638)<>bMj<H?0F9v at mCc=9Y6(x^$iz=nFaNAHiQ7F+h)=fk42ZXq>
zNB^BiU_GSC;3iUP at +daS^qv?R=TNqg8M6|jSkLEL&*|3lYU?@GdcNIy&a<8mTF-Io
zIakP>RHs$=6#oda6>rhUm|&n2F#+=Lx%dOiQzfp<Fh!ts`>D@!MSHwSZiU+hSm=ff
zLxYV7vd~w&9TAYG#fV>eAiuK2fQT9gXQ6x&B&--0wOwe}`#Bx7{5RM+-!Pkl%C5*N
zS#oe~{runSSJ*{uhf;T2Fvv-1lCH>OEU|vvJ5W{BH%S-!UT at A#8LO{JYVs9ETtWK_
zt2&#csacFAiRGfo?mO2me|xPK%5PMV&O7^G!%T0w7wH6coJo1QrNl$8!c#(kQwk3F
zck6h0n$(%DvbtJu>!1q2dmf28(FwFqWVj}Qb1I0p?%@X=FU!|QXQWCOWQBemLy1Vo
znFZ^gMWc5;7eQg_q at u{P#xF#T%9HW(8q+(5QYXpV4qUIk{Ihm&#Kuhr*k^ikg8|Bf
zmu?s|JoBdelH_ExaUVHuk2J=Wuyj>UP>g4|v)Ph)<)2ho?BrQ^dPMK=SI>^yy5*s;
z?|#*>Ng(%Ko19UtV$QvmHCD&@h80Ie|3cc>%Ja3mT+S&bWi~{lt?aL9lHLWBON~jq
zj8IOKG^M!Bd(M>^Bqq;tOGHfB>K;-J|16Q^Y3t{dmNsu$!3z8FN1-0kib`$j7#u<4
zi+BTdC35ksd>gsL#D%8tfs;SPgi0+`O1lP!<XOT6wr1C!$^UxQcbXDRnC%ooU3fuy
zSo1kXby&cYochM#=u2NsUijM^fT%(~W$^Fu9jB{qssO4Y#kcmfl?1+q&sv(K>ApKo
zujQ+lD1n~!x!(8|%4(2$?5{q_hxTy{B*#w(_HJS8J+kU6H*N)rfP^N5)s;Ek10S8m
zs&CkqU&B~#>6B-hBA|vJ5;~<!W(%LBk|6F&;p{kN`-l#Ri{3;jkG^Sy!q^Q7 at p?Zx
zp9~GR5#zOUB3<>HCaFf><{fR&x{Y>%y7k`DvmIMcTYB`5<o?Bg0gvw_estP`Dq`v7
z!XCZC*{bbp<U*wFWl-CP7C>#kJP5Q5+q8X;dc;xbPuspj{4`>emd+%7&Z0~>l1_ at B
z at pn5{{Sh4GIn1p=4=3g67KdzrMBRen=T}B6Ql&t-;X#^eV>VD|Ts?hOE?D;KpZqiq
zJrcvDA#DkQpSP4oe?f7UCgDkqeDRg&FSJe?J#aXeJD88;R%nkCHVp?rQ^VslRlU(8
zJ=vsxqer{H)Z0mSrmW85p?)uz8VZG4=wYoZ$`}y$)Iy6cE_Ue4Nz3R at Rxz(^(LRFX
zg|+VCe^T-2b)<9egicwN3Me;<wqg&UrFT=zmF*rJQg4DXDya<Lv}Wmt8)zVv!3Vsx
z{7KkkPw~^UB^Wh14P(F`Cv&5GD=N2w?0Kic`Hv;ndp}q3G>=nwL`w!Qy=rhM)>DP6
z1QY44X@{EjxN|EKFZ%D80u{~=rGo<~+vXIgSRczLvLW5?T at TOO&kc^;7tEFvY`fd&
zxT;CIAq%8-`F|6^09r8dM>NEMH at sp`;JE8cuG<HIDXaTcnDd<p*U8xB3PaD$O-~Z{
zQg0wJ-W#j(POPQgh+U(ttIn~YSsNN6q|8i^>il5B^>KHWT$c-SnBN9k+#uv+etR+=
z&;Js=m*cYev}qoyOXig0UGO|!nt$Dt&ibJU^vxPvfbM%2iz+L;XQ~NOyF&UB4)s7W
znIUyyz8izjaX|%;{z*8gJc-n%=1-9~@+>tobc$GUTeG at WN+*8A0{gtQE6{b0v%HN}
zV*6vW9_po!p<Xil&-JIKd2w0%I;5HhXo|ckdW_?IYAa~xwcW95!emsAgauET=0ySE
zcZGWE5md_%0iL%;56wM=x-A0`kF9~cp@=VD>RY1~j`r50(cY54-g at Nwxz@?5 at cu66
zIacmb4Qh3<V$($4F3&&Fy4xU5l*1vSffO~lU5Jt%qWSHRV;A>Ql?U04!?&8GnJ+==
z!8wtNS06etTfZH=6N2+r{kFe5gS?1gWGXgs<wb|dkJ+_x*#f3dc4&l8Yxs_a%a0 at O
zY<g~UWJDj5nWatf)oVqg=c$mDKSgO}_aiiDn1L1gzW)i?cTka~xoLsOM{WmsS&%DS
zW)!uc$#Zl~@rS(4MaaK$tqu9-ueb5`=_ at wgMic3=o*MuGZKuNQ1x?8D>VH8=Vj8v2
z3QFAMQ*EGxk`Y3q=Ry1&P%!5cG9mmB?q*8t7}_wNyB$h$&J_r?bkDV42F;?y!>;?J
zBFm<@OsO3snQJ><dS!IHtO&E_v<gH^3Dq@@G6bwE+Ep00XQZ9gm`+)J!xpwe?U?cF
z at mam^hh))LwHqG}EzPm7G<%iBWq-E9A$tnTXZ8S at fJ3}0A-epJMDM>yk3RSxwqOcy
zVC~KbGeOf5sSA|- at gJ>;f~{$Eb02zc8_QmX6TXoKTjvd1Cx)%V>3QuB9uAQ^JjDdx
zfx9 at 7$9olXEC<Ssh_m{1 at zU@74<|3dFl(LU|5nN=!xt=DR}{7kY?Qjd%6P>Ym1J>D
z$amVjsD;2wlMS%&Y1&nOXTSvW9BuSM!8u`6Dn>!)SDFD^Q-|=~87w~$!>+VgXt9DM
zisq2jKf?jmIj`!Nd|U_*<V6WFuii+U`OpV5km(oMb;J+Jb?Ke#I+K8GBd)8!oMwyz
zhoG$ey5ioySY*338Dg@#AF}9M-4C5WM|p#C0b-$oCI}`=O-XAvT0g*nNRH=esv-Y3
z#Y<nYEL3#eeA0HU*$(9aM+Fe#ev+O5ob<IMSQt#UkJ>GNLGOX%HuK<lTE~dP at 3s&-
znV*TuxJOA7>_+9VMEvyiu2y4mD#kAJ_~(0S?0h>)^f|61u5?t$WDxOEu6dO<dix_w
zsz#4_FAC*XHlMUG+rvn3`4S&vz%FBVJl%HU`1In~>KggfkT!bW#d)yH%>aWo2uCKs
zd|@{RRP28i5i$!~H8#FcDZn{9V>XEO449m~f3*)H;Fj67L;1OlVD&VN6RH6YaYwb+
zp6Vw!S+i8t+3=@PkV7jtjrqz*=E{4aQNRIOX_TsF<iBW1M)KVnL*b}=9O2S5?X_A8
zh at C1tTxaVEhjKWMe*j2ilskkg?AqP1YhS>wtt^tLw+qL=hP{J&AT>%}nw*JYt?u;g
z=o-<Ayg`vZMkB5FL``ILv6g;jWoRz~5luNdg$Sz0*^g{o(O>L at Ps62Qnw=OW>|8Lu
zafeQEs_5U3SWvt+&@+sxLWh;rF&Kl at XfrKkHM#gt{>PL*c^!+IQ2eIRnlbJxQCUUS
z%vFzXIEKk?*sMQd(Z2O+RmaG`zY at 7r%4%|gH%RxCB>6gkxRe~)rEd&xCeeeajfYML
zO{Oy_WSrId_}Wjp7&4+H!nXGXWfxbiVyW5}w+*RcS?{A%NlE-HiX>%%Oq$=85Yxf}
z3w^1&&_-Y%dKPfI7R^*|voBEy3x1G(n4^tkdd_rc_#ub&ZMi=P)o;dHv$c`cN56XG
z(J6EcldiJQt)CZ`Yp9&Q<}P{Mg7$$GP9OAvqmA{rdEdOU;lhv3_a<~DHb&wo3%NBv
z?5I~2`lz5h$`a>VrH at FOs6$!C5xRKrQEU6NTmO_Ij}|5lbvXt73C*Hqh~b?uh>N6e
zQ~q~@kD1&S&+Dh=c+Z=mtU`OLqlAEx<in+;t>o`Qx^4LDFgY at HqC5af!%Cahg!v}j
zc$<>+f<sBV$fbDy>|dSK$)P26aw*9393l;%`F0K_;ZI;#lN3M|XJ+ at VL&5q{dXVia
z(K&@qT%XBM?+>OX_uo`85ZT4;>s^PA<;lJ4)^^qceuag3ZCA-vWJ}$p$}dQEOmJlB
zZIol0dh}|NU>5BxvXPI8%1~r*^MPU|wBg68m at k$a*g<rEx16|V$$JlY%P&9{8&@WU
zBMBe%ZSBo5%nhPTsnfnT6v1M=0jnGANO$e1&24B2qQ6ZdRFuv4p)S6C29r08Y?ADn
z*}hUJZda>S610Ii^Qfo-iSPD1fq%$qr9fm~)Z?S40$FVkFonJO#YfMxo<9&4Jw at ss
zD!I9c(l&l!nuWk^HxGYGaNJnYHCo3p`LgLeayqjxeD%d7yNaIx5)P}pe;r?RVa(Rt
z^r1=VqyGlT1s2*Iiw(~^*MAGDbqSzZzmO@<azwk=Fo|xj9ja8<4e>sd1*cDAVl+{6
z;QfrJNRP}>fjetmRler$l?kCZhNm3Euqq9*EoM5Te2h`5Zjvah)l4S5V9IV{J~_|2
z2Eyvyg<*~=$x6P85#j~%ZqVkwD|6FXpv2=s1Fa#hL{xevKI3Usz~30)n()Ha|A7EB
zDCDO74+Nme8-`Q=f&i<u5wiC?hCa-J5P&=y1YRBg3j+W+1k1QR^51ORmxQ!vz1Hr3
zyN%Tt4_>8Mn9?k1e21v+vPah*)|~4q1_CEn7UOq%`!K9e`AH-Sf00`s4Ek at 6@`^j{
zN2m%;`0g)eAIyke2YcKX;RuqY0Cy0O2zvpIk6IKbH>^mej|&+SGN- at C0%fHuruuzs
zP3-(vi{)9oq`zCNVsek3|KWdHOy~NafB096b8IbU#ljZD22bnxtHC6~iNC4;TtS_A
z7FkY3IDvN=xjp2y+ at w`g*VeCN5+&|51|Os5CdBi`U9~WR@|cNeOVG_%3q50f!J+aV
zMV3e4ZHs2+UbnGi(YnK*m9;l0?&uDE_N6sLT)c(t8^Hz~@Xg(rO3^-+Ze5s3f<GoW
zBu0t;T<BWilVMz)94yVA7Az(5KeDgt51!)b at vddFU;;gQ3b3zA37(QYE_e#zYFoff
zOrw2^2(7S-C*7;AS20R3rpKBEG>_%Myq5Z4UPyhgbF-@|pbFAdRi{b<jUMr9Rqas6
zFJ-t!h;jCKb1R^dqjiujb(dc)hp_7bhO0Nb(+l(9nB5dj&)0)-u$7>;s!_66p^KQZ
zvUaGsqvv1#{~G+S|D4)^jzYjC-UT9aE{G#igQ+ci6%}n2k~j9QV?U7pk*#M^e0~Jn
z!mcK&!%w8=M!|U_ikAF59`H2%P|;n?c{})q6HdzU(TVksdBVO&KtUL!Qo?Xe at a42?
zo?+*3T%!XxF%BN- at OT>@FT&%y at ED~6R}a70eJUC#3N}W at k5(ua;G<KQAM<$Wji|04
z1lM2j6c3;5tS^`al;P(9tP6*A!sA7pgq1?0G71L|p)m>J6{!@1hJuY?oo4R}JHL<X
zBY$^Y$J3PTp?a7h3{yh&jy7LH8?tiI%ru?r%++Zz%J@)x=A;3?{d1kied`yO3 at P5a
zqmA}+wQi<FSHj!<=l9_p$VJu#!1p(rlyhF?ur{sTKQ}I!v=vsZa*Tw9S<d6O2K}S3
zt4Uey2SLkV*Gt_+u<IYsu9%d^!<5TK*tds7p|qAL4e*jx&8E6VBua8y?sH!43h41?
z2w5_Yg&KWO3$It9Yo=&t?V(Sr(pL5x5OB5b6QccyX4aGk-!z``e;uJY4EPBWMG0Ez
z%d}UN5}i$$dV8+OZNmybzmIhpXVW@{%3Mk!K4H_hrmj6wMCSbXg(pK%a=l3rxp3Fu
z-L086sK0TiA}jOJk#)aM^BlK2U*(I$vgz0GAHwR~d0|uB?GcNU)|MDd$`m2Mh<eN$
z`7>lXlI_)Rgnq0NL at aD3QmU*-+;UVXzTk#A>qghqm|?;0?zVL^MxX3 at ll000aA#9q
zURm^3t^Jt%DEz>>{SUX+>mqMQjqJwor>7D at M#0ADw-xY9mBd@&E!n%gfMz`a!#8&O
z3^P}R8P|8OUH$F~-k+~L#YbU_9ab4CrqjKgRjas>DDcjl<0^2PFE^f=WjF`#lm3CO
ze`r3&e2L@<^q^T_j at 8}Wz835am$yT`sYJPT#)j_Hev5s6F`xxPedw^*x*kUzdsg_n
zNlEpdyPbFd_?k}kJ1Eh%#@jXmgzFl42jp0^2jIhjVg;nvHQ0={A(1|gJTfYRE!mwC
zs#GLyTUz41UES3rAc~zrMA+KOeh$V+w0AzzmsP*c?2Ym*k)`T2p0slQ1j-{%>q6d(
zM@#5NQK<8g{wj<kD^X!xF4|1d-{lzDb#K`{xeA<Q{wTx*^^a=5Ggwc!xJ{PhLBBvG
z8zq_-fDT!dnf+w89fBdUk`aIP8Uytmx;G`(;P(z)OrEXi$d#K99!X92Rg{FB9lWvB
z3+QFLzq*V7vsvA|)Y`gwPtNKTTh`)k2l7HUCN`3h{6i2b9qs=ZV;nuR=><`~i+>BJ
z#uuzQH2aIr<T_3AigB at OD9frX)Yd&@V{aOdo$fEJYZPV~f9^<Ixj+m at YY7PnycqCD
z)w9KIAEwjH0ARv*$@K+uXGGZL+E=WuwGDfY6aK5l%_c2Tw-fbeu(L|2M~0*UL~Fp^
zNlfQ0**c}&fcKG9PlmE2Z1aeJL-QlW>UtCh50cE4d0{BLSIP{4A*V7Fi)<0e26ZOS
zr$*^_c+!XKfhBubLOmO{@3F=cDZe*GNhy(F?M;kfUaF0O>i&ckHlI}a5+zPP9(4R^
z*r8zOeru2_@*QhgR|peaL0;Iu-L2{Fy}TfiGmsIkf at S>eS)S04K3xQSTfkJJxJgRJ
z=!>NxnYz5h+8K{DEg&dK5P?lq(iLHc0 at xv&J6_h6*nl3gx?+aQL!>Uu1u^&)UmcFM
zj?Lt>V{MnMGdVA9GdbuQ&E%kA8huYX=$rW)GA&a^;_-s7O-Z at Q&>RgcBX_s+6!(r#
ziq9%onzoYWZSyikarRJ4HA$vf2z#7?9Cz?-+=v!c`qbKpI6y7s`p+~;vzQC72*Ds)
zRGD9CU3nbx+G)*ZO(DwvHX%=ajRmSPc{{=wF`!u5TZs8K9M#30-9 at gttZBi-A?wQW
zrmmwaLTfOG==hN!)DwvnGagM{Pgi_dTIRDdYA;jfWMPNdd5WL$RrvgG{J)m3k33 at L
zffS9P)fqv><6h5V)^_H&ochzktljH&z44YdIz*w(OT0&Wq;Ud4Q~k>nVP!uAK<s|L
zp<f%*x9rIJR`Oolc@(J$#n?hy-FnnVrVws#?jrV$X(^W;4b6Cr%=>Dmx%I=>2aUb*
zCeQo=j45aV4%UcnLxUG&3A0hS#L$#}j3RnTaU)uCyi*$Er5pDl%N&k(LXkC$_*m;h
zXjmS^>~2lJU>s6a$XnSS5AIg`xC at D7ikk+#ycNFOf<iJt+ZDD5UgI0TG|f{ULH at P>
z?Anyu|997_f55P?ZM(Q(0- at uWBvxn6W9HseQTk?SV|vu`nVWu!*?qP~<%Ej_s`_+a
zRed8IyKb|6t6_m0%Fm`ow8-1NS5yJ%0nG7HVb(Piv<$wi<7Iai{N;7L^r}E({YDDe
zirstK-Huh2PWgM`jHj?pz*J$3InuwDNvZwUA&TP)#U3x+>C5rASSyA5f8DgiW_FQl
zB5O4`#z-N5#)2UGE$dTiqtQH65*=CbVe!!1rxR$&6J^wNkY8ZwcQFv~MPY|gyf?2>
z_(3)QocBnnw$6K;2ol%eCk*jG^IC-?TV}^<jDdF2_-qmFyMA~u84>)ekDM?P$9ZI9
z;~V|-s6A9jh}7pPZ07&R)|baMar6&Q!Ui at 3NWcUF0$Csdv>s7FkrEP+BZ$cDfuhJ2
z2vSj4tkyI^!yyF`C9GNwEh at HJTYbdqfogs9DbyRmtEEM(VzK_(qG05ZcP5e6KA-oG
z$?j%%cIWt>Gv6bCCvdNPBgZS>#E9!?bd6yXE_mP3(fgaOkUoHZI&FW<7a9BF&L{7W
zKbTe@=tzk at yR8TGs7|AlUQQkd^#0>Ckk9&0Mlb*A)7SQ&@@K?@S)`qpc*FbJl*Sw=
z0xU6J55`BU#rZnDg``l=6dlJvx(H`JG>;GZP?yMPNsEsi3cNhOQK6MJuGR!2%4xlN
z-_hUa?$7>mo!FDS<>hKWbvZ`pfJ<Wrd}%@g$kk=xuAirO^dEN-=WpH35b7=h^Mak=
zWCL=QmEGt+4mi!bAR${~*s7R{e1eRv-Ri*X(_IWOp7YH&ilWQQ9u4PK{F at _Qxw82R
zQt3Wx`@DVZ at Wx;JdG%%}y|wZL9P(eIIb^EBO%bM1MA_LKsN88314loVa at BzdZJXAS
zF at TOdXAZ!QSbY~)`l!zDTi<yEG3Jo at Iz+9*=_^h6wXM6S=>00~>HP;HJUw^FJ)c#}
ziBqNLE*h9qmR5$cB%ydo3r-6>RonQ}UOPq$%38(Df{%^`56nLnvfwldZZW(tgbRcy
zC<$7Umb_J`$t$~qe4253-NP@|U2%9mpo$mx!7>|Jzo-pKP4;|Do9)3a-s=`s*3R|E
zwX3zs(%RRmvWKIAhLr{RXGiz at u5NFwYQdWqLrzyFvsY2EK$VcpR8ei7P#8Lc+;bzo
zkKgTt>^C3qEhm6dAw^4*AA{%lNmHJ6d2u9P3N&X{1ehVfF73)tn<Cbka%A|`K%h44
zY~uM!1l_$=24fIn!DEO{>HCgWV#Z?>*G4O$A%DIIPhJtAJ8w1FuK4i8kWp=n1eKTN
zxF00TXm<t$^Bui6-2TozwCc-x_t^xl8vOwPirR*D*?zQ1{tfD${KL2EZBWd+SO at IS
ztF_?urAzGHKLeX0$(~_Rg{={It}N9&lIY}9Jl<R13vu5(bzNSCXXHO&0~rk}1ey#4
z8%M(HH+tT3cAn@|(>K;H8&+A}8IyeF?lgMuTw8`N1NhVsJc#4<hgWormwl`^JNrO=
z%oAmi_*75-he8ZLSa~_pa^u0CFIg3GV8g3&N9z^rzVSDxhmxuW at r+b#1r;5P&0;Nb
za1(pMdCdCkC{-Se`OvJWi@}&Xfp*K3P6C(Lp at L~qT!_Gr!?emIKeVZ3NWDnmAy}B%
zciu5rp0bfz9D*&tP!;Mx2v$mToi#>~)rvgNh?+HGH(}716`vSaEn*X~ht$GQ%n?V=
z$BvbhQn{g+3;P`d4{7Zmo2h-Fm~TM54z0V6UsYAf at gtsvG8I(pD@{uYcw{!xqPD{$
zt&zsAK#R-pSShKJn@%++euGD=sozt!VVJAwj38`9-9;)O40D<1^4bk{#|{?_q;y9x
znxV!BVa;a7cpG9VV^x0>%=p{*)Cra{1Hi%B9frxU`&Mop)Q at 49hCU#rR?0Egpw?Yp
zvj>}z!U%j at CqcSZgU)Hbo40<7h4BEJRS_e0`hL at YJbd^rV^ugYkg{}jL0)%6Nw<2d
zYLc8*X-Zv`V<9u6(X!qu0xjz)OuEiO at c3|e`v0t2A1hxHnhTYKJoxcB;n);4e>Sg5
z2>A|O)oGM7gK7kaSoR;|PP{Cd=Pn?72K8lfy+A6_3FZ#DX;-tGI>#go!CaL_4%kic
zqsaakad}1|0eHGn{~683=WCNRp%NO-fY1LdVc-mSodTc#3E8iCR=*LSBe}I3cBln2
zwCVV6QF9 at 9XHjyhA(4C)-zjvz#(dh|d5^R05Z at Y1M@$eN16dVs7hv{c-`bqoZ-ZP&
zkq(4J#MZ;-zR!uv_VtW+o+94GTo#u3iO|D@^9M?Av*GS)yIH$JfkdY_7}T+&JU0Kx
za`ML^xCA2ijDar%#S)(0;F;?W8K!cppzN>td~US4>D at j2Lnw8DD}n!SCugKueu8)o
zM3Q^Xz0}bKm>_PBgtv at lSid}>U|#%04p5+`vZZo-EZWFhkpR%qBG97avv5OXPiA2f
zpNoV9l$E+qnd<8f%$Is_fjKhjw%tiNM_`lflyVn;$Z}77Ezk_iAI_g(T2yod7RcJ{
zz}PszXG!bm%c<H3Y#WV1xi7>%qUBScEySiz3MZ?8bW}N+6>-<y|Fmu=xFVu at 7h)dj
zFS2N?8?X(qynl+oe?Is|SC;aQ85PFfKB0GZ9&f>sIYggwl^;s+W!QeInGjSa83Yw%
zK4(~~{J}SQakZ3lHZiJYZCAGMgOh^Ns3L)urIT{l9{$(SLY$;Z%25xwYFD?yu at 7Hl
zlz!ha6f=x_XX9H#F%*clQcgVB{{MMq-1tmTQ)L};l0!u5-NwZ}z-~@7F2eaA?@<5s
z5}xiIi!^VkE9%9M`_A=~I>5=Xm3kYlE6??B3>LU3W7JltM+PZr+usf0?LrBw<)G|8
z`lYH02TSC!Sr)}%IyDOppt#ll+i+f!+W673M|xR~-9J9c{p$noR_Hc9&)Sn=U~UH-
zh+kBl0WLXRaw1))WU%%?e)B)pV!R(v9lc9{b&|-V!CKz{*}^y5AY0&b^pn*PFTC%%
z*gS~ocu^Lj=R;W_K65$b2^u{M@`u`|h(9dVTbzAxz7>UCGkB>vO#ucWc2&o#b6e3+
z?gSS*c7o<_VmPl3&E{<GiUI2$Ll|Hk4zt${6F2UCJGSw0#W#JrAU`xUMk^Q2muL+`
zUG8Cw`a<4?WeF^IU|9?cq$GnmR=&<hk;hU%*0uPKS7q&TLUI{rRAO>`D8A#xm8ClY
zd3+~uOz0R-T>>TPdLwduR?zXvb#=!pPdo;2bpc$VZa$Er5Vr#{pi8%a-KPV7#+BhG
z>I|VS5JYfefDZPeyBt9%#N5X+j;e6j)42LREJM?>{$EBl4z->IX!o3dGwx?QmkY{+
z(*3q0s`Z5kDL>x`5I5;lws;sf=UR}Z8X}YN>+>{8;ZDN_Blg~ZqfG;~aUaTP^1+`h
zJopNf^~3;<&eu9Kq25xc`wT=bi2+qQy}3~54kF`Yz-65;Ce%F!QC%pEw7Q#BhYXAM
z(qY5Fnv`dY`gC(`kxW^Z8XC<^9S;>YAAmy189QO~A#klGhO=0AZj!Wi)DR&iN&PQ@
z_N~1oceYQJP*N0uD{pi7D-h)VhGJGr>k#T)JOFzM=_ at ipK&|gMA}B`oa_vrD;KCg*
z at P_iDTl?TRy#KqAq>is-IlUc8g+HFE6>Oi_ir{^Pi?k`-L5LZs(T;pm_qpFILlthD
z!ZgWj51RuvH9gqXA2m-aZ~o6teMN&9jgZeCjZgZ)Od6WkF>60 at T^vZxi-2^vc|!Eo
zu#ohmT*S9b4-96S0f3_o7)cjY^A_>#(L2)9lTm#&i0nc@;b-1|Tt*E3k?Tnw=XlPl
zo at _G14jGA$PlpT`+~=Qqllh+XYMHBX8Sv$&r9|-x_7-a#G~cyZ7(aQ;qXwBKk&t4q
zt+AMgV#?f%>kdX5cvN5PHRPU$;-wTuMyD2pElhQFQC~u=H|iI)(WMtHPK-g;l?Gf{
zgO37MU#mLzUzGkY{D+ at M%<2GM(dk9+zQ5}#Y1anQ`QFU6LhRs2oqBBSRVgusyZq*H
z5!fSQ^TkWt5_vF1G#lwd?@0U(vJ<!ThpeaK0vw at u<9&$Eb?&vmtY3{Fd+V^=JGnGZ
zQsu%S?QlzW)7c-5R_Nq?_uar5Z4$1i9Uhr5kZQ{5c%_^rXG*Ge0`GJ=Qxy%5qKPe~
z9&Z$}8i_u}Gy=JRWH?yR7#i(louE7-Aq!jkg&apPl^wMXsL3vCP*)@<Uz at Pk?&>|-
zJ+xmjvE!&ZJUkM|Wzx_F;OtcTy56rRu8p?0j&pNgf3RoM0BcV)NILSSD*W-jldL^^
zoq9R at +Q#<%-C%=ppe>3Wao&(IfwgBnGpWcxlGO){*2yuP6G*>X-ti*nsG!udy596%
zqhMVLlp;$vz3Dx(X&6lvVlLTn6Y97jYN4o=v+uW7?Ov-*Yrx_B$H<tD)11=@36-lR
z<LqAASI9j>bpe?tOpk=9ZnnT+yQ!Ydk!)+2I~;c~{P42u|Dri`or6^Jf6{&3TP`@U
zpB-1|MjM6N&=<B2nDZ=wJF8BPBjSYqJH#Qb=J+7PT{#^Y?)E8vauugC6KAC2n~a9L
zQVyc3K`xxyIyIko%2r6O9^T<>uBt$>28PGicCBaD at uh7BcWDL`Yd!Zp^^*jZzm279
zKvN`T>VAmk_*nl_%0vMPTcaV*u;))Vh{g`=GD%SjK9H<QiE8@%`h*3+ipTM_WWLl}
zJ;7E3ZXxx+mnOmg=7N%#XYJ_WPLcW&((@ic6ms`Ate|<8r)mOM0ebP-y?0ws at 4|F4
z at x%%m5~Mahb~=g-ZtAm!<%VTsN0+BcCjgLugQgr#ndyR(7_~uXi0U;fmOwuL^J7Kv
zTMv8Bp+=BP7Fa-vCjC7p7#WEI`|gmv%{u{mJHqW#A^Sp~-;@#LUEo>Z_9W=p4nU|d
zdq#d0E at D^%(+}>@2-QwVPwsjVb4kEaHRW<t`#D6CoxPcl4!9@&RI=ARNxj~a<mnlz
zB0Z*JK(Vwa!xrsFv^ge!pY9_^SrbNF8AMNWe8-6S`_{mYmxZ(J5wr_FV`2YX#M1qa
z7O}<+8i%!P-_gs9aC&&gVXefe4ZL;%Q^<l5Z&C>8p-md!jbaB6(i at mNs>d=+tK6i;
zVs*!hi^LC~s)fPTPWA7i&L|GijX4&BGa|a2Owa;0r0scQMM$_m|69Tx01(wn_zBRJ
zw+XW(pDo1|6x4oy0s!8_(ElL-2n|!ZxcW*#%EII=e#R+YzqMbj9-6|Dk%PEUVlXS2
zMnj89cO1ss5VL{Ir#75t at PL36>*rP^bi(NvLr&spoaDc3pKNMYn;KWiN)5Dwg}FQ}
z&ko8R;xv8e at ff#_@|M at AbW-LK*L at pN5+iwH#=;7&!jHJDP at 5z#K}NnDW;!J&DvQP7
zqz{KPuXET1MKgH!Bl0ZUh3F%_p2SnM9(+aO^0Xrz+daeq at ha-|6crDj-luGMPjU;g
zV_PHL;5Gv8P_`xvQNx6XI2{?-9P3g{CBD-$<qI-`wdrd9S at crmOw8^pyN-<D!kxT0
zgPlmsuCqm2Nw53Y!%%W9W?9QU!<_;!)i$|{L4a^0F17R4Gm#}j*=OsSq`^l>{T0&R
zihK17(KDaz5tRM!VkfuKxY$`=U+QU~|32HKuC<OUQVUW*G}*k-E};-`CS-o at ulV#K
zktVBB8_gkKAY1xEu`(qR<Upo^c?0}xV&!=xNNi~w9&vMo^n#ZK7=?fq<}-6k?O8rk
zq6@&LCCG7unMA$OOro~|xisVm*d77DtBZTJvXT@{3JS(JZxc$|Ic)=)=a%IiBTb&f
zg}0Q<3Q;n4lizhCuA9t$my-Rj#9Lir)YS&uz7B+%s at d7S>{>`}4GUJ0y&i{3QVz!;
z;R9ld8p(1`qg=Vwq^TUl`vc4SyEu6T*|226lE=v-2LsHaLgY0Cx$ycUSmwhL2ulPf
zuR9K+rzaxUa$-SAgZK)c_H?SeV>~6d<5e#__U3hryKaEg at J5Vfj%YS0fIKB(`US0I
z2f-nsB9bs&tSLgqQfYZ04AJi!e9btk&L}<)ZZ(S2=eHztNXmFVHjCPuh`Blw)rOsY
zgBADUyrM*5VIzQOYGttI-b6h}#2nP}BVP0kil9^)HDSGNmv4YII9(czK#R;5Z|S_~
zFKZ0;{mavJLb^R5sK(^zRC0Y7?SJcQ(|z|$)W7g45|on|&#H}f5(&CCg5CGw4cG_I
z^g<zBwJl6ddw59rA1Db~2%%(M!HuD9e5|fSm1&zGpXob))u0`XLWx<IZ$N+H!QpWO
ze~8}+^5;Tk2LV}9WlXs9T@>P$kgn+3T$NUPX%g;RPlZXw#-T>Q2A(CG+osleb_Wfl
zs`U{Nj)+x3ep(Mj#|wFh!PJ;&-NmP`iTz7XWDYeZX6932GzI731t`KXCFNeOgFb)V
zH+{Qm%Ru5<dLfvU$tSMX#bMEd86VM(B6C<1+RC~(Zt`FT5|-858x at I}b!k2wQPjE>
zn7#UI$b^hJqiaRoi#FOBjq%5xirNr{J-m&SQ^svHte)-lW=5+g*sEP~>@Nd+o}8$#
zH5&S&-q*!(a+ at c;UA=D-9ES2pXwkF3(-R+&^(&N0oG8wYPVRPo9ADEtZiuSpHG5W-
z(6L007d`Ec2wx$e(z<t;@<_s_s*ksrtWTw_I&|M-|7!j4`2Mr!+Ekqix9ZPZS!5_~
zYjyy~r&<%gIWnM7GwtT-1#6 at 8kPX<Qd7Qde%YckzAYTp;T at a0oyJ-vg1%_j!%}&=j
z;Z9S1g?WXt%1P#yivN`C^J&$1)x{CA<|hr}f=7&`bbbn$L2T?8dFq=ZP%;&6AJ`42
z(|KDCsA`6%O7Ew)J#gpj9z3xVToXl=7%I9`Z;~)CGbYZ^9>5P%zALfmtSy=>p96p$
zYh(HcmAevi<!pL7WR3+F<YDookHYQlAobZw%u8M5Wuxl)?o?<q4cnODz=KK}cJ>_i
zydgXEO}WL{bDdwM=`cLKRc3;g2hX01|0-r&T|G{uwxQg7KYo>_hclhq`fYqQnSczT
zX<^7|f72TLaQFMt3r1I^3v<MI%*2 at IpVc8(rM0YJna^gUs}gS9UAn-bR;<E=D<>Y8
zZ?umN7v7{Qg?w|w6`NluCfz+4O{~Az9cjEanyteB#OwdtoiyR~WO(jh at VV;~UQZY1
z*qr)oHhfppqblmBRoD$SdzqE!761{E0YbOKo4%)7k})^h_f$_ZHreO<2>TdLL8B&6
zR1LuSy*G9Un}wkE3r%2zDuxrIi>4Jo2`gfy+(J?nz?48$y-!)}M2S~p4*rh6A%zw#
zO}+R9dEp_nWO0l^E~kXRqa`|$@cNsK{)8N^)UBdgIvZ_4<%Ltlt1$uX3+m8n2ziUE
z{Rfcd89+l?r`%IgwBC1B(T(E8wf+PB$0Ix;7=;g?V(&!^0ohJUbOiXgS&nZ!7+Jm<
z!hhbnX!}#CTA4`40TDhE=QxP4HJ&Tk0Su8hA4rO#Y2EPiD;fmlz5L|1-#ZbWxj2E%
z^?C~fVx?c)qPn>g%zpxzcY*<aS5a$HFwx9S9U~_$1132bHcNga0 at u@xE2yo_0{4L+
zt;}o|j&BcxTH)NKsonI?-%uA)uxZm!zXnpbqn$Uy6YRc^f4sr3HLRW+ZQcvRQ6Hl&
zHGNL;Q!xz(3HAxi7mUXo%@*o#D(0<Dnm+sF^DaYka*){o>#gGstp64cWMELicQRU=
zqdv(vV_OiTgJTy&OR88wd%BW}!^n8UJ659Q0t4}SV(emM6;da at uCO`fW;=U6miiYA
z{;Zg^_*JwEvEH;h67AB#mnmx}zlnc)(+%DfuQ%^bqBf^tqUnet9cmC~m at t-4$PIVv
z at To&WO$IWi?dM1 at mCX;0hT|6d;s|v;4V#)c+xx}r+1A$d1Du<G3PkMfp+_`k?L35p
z!edt*!4GLV8GiQOxnaj at Jp`r~3*PoR3?0|!6 at Ku%I?DvHaO6kfWWMjA`>V30hRyaX
zRBSrtfyA2TPaw~9pUwH>idLrm4c~TEF1xb#0MZW7W-hH?zR at A=YP9D5U!DF0cKX|B
zV#B|Uh?n<C|A+E$_)I+b0eMicbOM*An2s0eK~S#x^dIk$UyTO8zWW~j;u83xqV7mE
zpGhL|$s8k4eMoUKFrMB2`eoG^eXl7042)3w{2NUm!EfF*!Q$ke?4~zYCzem{-p55~
z$veffr)^{m(o{&>H%$Y(Yd3U^q|A#dgJd!q(O3A!lj4SR7m#OGY^-UA%49S1ufUk)
zA48-Ni at Tj%+COA?aeS!V7S$oL<jHgNYMO)*i*Kt=%=GE9ry*A&{~g0u)*>i0p{+8o
z!!a-O?z-Xe1&@t8E;nAA71svtk5b0?(cdn+&_lP%=xFD(*50KplfU|^pjn_bxX&?(
ztHmkZ!M+SHn>xqLv40Pm{o6+f+?CSzSq9g-U1~In06f<UildqZ#eyP1 at hVtYRY-(_
z`kRvr;?n}78$!`ieSF7 at vK)^62%g&ZQ&wVT^LuD>ijfR;hx)g`veH9`o4f^}mB^bB
z@$CNN26O>~Paw)<#DXzMPUr^(hs)Hd`gml?KgxG8$oVnS6BWiy9L7=`kEmi~FH-I`
zA}j3ep0A2V{;R;d62qsfij6Yf=E>bC2AFGzH*gQ(0P(W&qqwy8%|gkya?>GUu&mbd
z3;kT-)Yqp)U%ZySI<n<KLo%j{S9mSngPTLvv0Qz{asU01Oo1CpIa51!Y`v%%NG*O)
zfA2 at gMGxYRkyiflFS-%)huSa-KVIg#IG3z0B}NaYJ~af6O0LO`dfZpC%rZa-X)rTq
ziQ>JBzq;d#t6T7#1Z$2R0TrAj?tDY+7dovMYSy@<LczNDD=vy%EwC#~2*R1LM<S`E
z9C*CH<`Rl{z%QiwGci$Q?G<|9pU5=E#<l=M&7G0AElt8uc-j3ba6|toSqeA1U!%nZ
zUv?*<^>&mau-(amIr`%<lZ|J-GT(U6a{F>yKC at 3ZcM7#43&Q&jMM}l;C6M;^BBNjD
zQTW6$<hMS50WA07e at mUm+t((3sESM}`k{G-8M+UTY<M)}5S{N3>Amq_#aD2^xf{js
zdbx%F#)H?sLfMcFb{9~vk2qvZU$83GRr|w|8RmVuIW9ilz^dPJXCRorLuOwmnt#$z
z`7VlDFPlQz$>xzuEau%<TL06=ui<}o at ITZ@AH$3AKXBA7`)QX>{&1f1S7P(rE*Nth
zmg)7(vk%UHY0%i9;LAz&E1%XS2h!AyIn-_?MliA!-9a8ys}d8c+m>5M?!xIuNglUq
zFy6Pg`K9I`&Z|(4O{npgMZ$YExTVqymVe1XStE*5hrAo*$QH&MJzI%om`>hgq;w<C
zwKAI%sbIF7$%ly2q5A{#4~Hc*193<dAT9(Rj`?ZU;W&8h3&q9|EcOfkS5#UyCdO=P
zdR?jA*_h)bd6rY=5tpvG*jTfNS357<e{?^L`Ysz2(tf3W%f<qEzs&#}<53iB+}sBM
zQ`k0h<-e$)HQ35f6mh08xqC_fk2nKmLfM$^)QZ;XBs!c>73t|4)9bzrrDT at q8bvVZ
z-H)iKgXw~kM!n5;P%$Ypih8mJo3(6-Jj+>Dsa5(S`5En;#S4k6Iq_0!qb}~8jLbXV
zuFuO6+09+vJs+i=7^`xy{Og6?dUGEgn6$RWSWo+yf0)Y6!FcwW<ey|6uq;q$ay+~0
zP5!E|jjGSVHmD8nLrGy40Hr<dibR*=EBJrE_gMf7`8G*wMGA>E-?DriT7-CHyXS$r
zc1Vd*iI2CHxfnU#s4a0}qfL(BCvSFf^CXw2NOZPQsEd8ZO1<m@%cmmpY_s#xoYz~1
zr at sHSoaraVE!B`di$*<(r!Mo-M^A}9(e~Js&L2oEP5UOZV`TC+NSdG0*ecQx4cQt+
zLl#J)wEf at 1qh(aF572nQ|DD3SY0{xQdeqPc`l{9+{eEbVSGd(Y92UKQ0)AvR1mk;?
z&7bx^33|r$vhiv50<TW$O+$ClEJIHhs?9^GK+6g{FV~k{UYwV|MwpoC0L^H+lQb=x
zGABqKF3RbOfPx<`GW^$NP9#*JbHE{yc1yt{hu{<__l2xHjzAX2hXOV8*?r^J(8gBK
z!?4!;J-{U2L$ktWPN<Nv1K6y|ZQ!YB*8Wa%^{xiTQF}2mZe9}yghTgXD-(d2#6Go%
zSOWDkZh*<`I1oH^F(_dZ2gD936PFI6?BH8zV)ACLuj+2xEK-A>-(%*9)ms$6XMJP9
ziqIw+GlJ{oiX6qs^ah at H0iNf(%J4pBXo(>RKqO-pV1}yyRcMlb9C-d;XCylZQ?P!L
zNZTBLvd8k9f#>r9z*W6Y at _5$i#rZHhAbajzJwvPE>}gC6$o^>(@tee2>WE+@>$~ot
z1tfwOWY9trs``L;!;Fhs?c+0Nx*e16RcfV<#?48yKMHa+K?O3+{DNprZ~>tSQ5%38
z(&V3QrI(PAG&=ujlJu&LZIEfN=hL?QgTN%olHTkY>ufUVl at bumIDJ~4>7v;uy}8ee
zY5XB+%?CYGzYSsO6z?U5^~VkE4 at w!}93p!pHS*Id=rVF=t~JSpQ;Tw(*m-d_tcedQ
zSeq!@lm(xC7^Du85WpJU$mhz5*=``%J8(zdqO}inC-b1f*Ocp$l)0c}#pOgslEuZ7
znV2(8%CP3IPpOgT>wt)%1Ex7OUYtQYFPr=t1*`iDK{;A-)fN$l5jLYtmP%_HLDpC>
zLr-fa=cj at dZG6ynitJvFV4?rII?~GVW){e~1AxlT3k=44(eo(<E2s5MmCXa%z}p>@
zKvji>=@_HbMTIw5O}^YzTya-s(S85iy~&pqO%<Ioi=@H6Q_H*hYT}AgX>KCA7Fl$A
zRy#9&LI5^>P9*WP%9(NATF&<N(B!!t>?pAYvLfGKBRyyEtZY6 at Kd`{`7sa8Jo_tMM
zx^^nfVKU{q9uqO*YI*%?YT<fJ at b)x!JvN;tq3YLT>l2$M6PIdHvVoLk9N)`ueCdEo
zLj4L(?1Ci!i`qV=dXl8diD+aT3h9x2yPSLoXrvCz8w&pGzR4-C=#YJhcH6SQqj{@#
zTI+vi-x(X2ODXfP`81L`mWM^q+^OL_Or$=>?{qLhrt9XHa~LSq^Vz-Xqx{Y_jEy3B
z%i6mN*4(ii#soaBgT!_5?d~A^PW~*E7K7BSVbqG70u!D9kbes|anP51+FG=L9$pKZ
ztjo1<>T~ZucuzD?zwu<~%Ua)_?0BW$z(P%mcN~^i!4><Gi`AQH;XHim2bg*byXpMZ
z^NdmEDGlf2ZvOc;R=E+l<ypi+?R451<oZart}I_9iqfK7KsFmHi*3*nA+JA9sRo>G
z(b|&r47Z{fVNlV_NN|C)10YGbwm96m#nSh<6Oo;O<HITXw8rG<JaVx=EoZSmb3onO
z6ql|Aro}0T7S9fe+f~*9E1ey_Us3H(3$OQQrS}7dZxtXz?f~3T*TNwEam(T-0UsrX
zbuagxq{-X(;w{+JSj_1^%4ha3)m!{DY6O{*4Buq$YB955&B&tg?lyMBkTauCyzim+
zBqFb(dJJ=mLGj7V_;ZU_Uyv6k7X`NSI2PSL*a5OR(l6q5z!c at 07FuSNvlsj*BfSgf
zxF>*lzQ^l`QKd6oxko;8s3<7c at lwyo+aA%|d2j6Z-R~JexrlQ%wBXmv**kqd%W{$@
zv at +8}2%4m6xU0R|iFmfS#U!(;-mJn_thU&qY{1|LESUdQpYdFJ`Nk?9x0+N+7zhL-
zTAZ!S`T>n;F59ExEx_U2g?i7&@>EcxGX8&IFXTOJazCJ>ZN at MWyHM5nc0^9LFdEzM
zA6uA at 9aRzkf21l=sEtEJE<SJ8F}I^B0%B8tVqvKFf4F&WjGIlWy8)toA9aj>^5Lje
zP7$25V1H&SuLV!<0;cJ8fD>UIFzv5VS`8SEC*mx~KO at DDdwO0NfepP2gYQ~+2#pZR
zu&LUz8IveFUVXBPZ&wnM at +>ULWlQnv`#mp663`s;C0J3iEO^<yo)P1V>rLBhobYFM
zdXx71KabS at 2*{+a_~LEXgL5ZFNvWnXHejx%HqN2K#&Bx;1}sqRy{*Q<H9S574--Xg
z{b8Eyz^bnD17)Rp|8Uz_Gjf*LtZpf<ja06oyZ#rb`<Fn#5$H|+c<^?J64uZ?=6wBK
zo!&P&aB1_!5Fub!d<lF1vV}R&D+}_u+k)R*0FqULDOgYbA*HIXm6 at U&?#k&jj0E$l
zSbbq6+ztqaHXNHT?}W#^V<8E90Pt9dT}Wc!)k*i>Ye%>mb;;sD8Kllon41mdjdoXj
zUz?5DTCJ2JD9*3KO?<^5`(|8kayF%OfODUL at K(juGYxaz3f}g93?I%e3_Vx@>|$S)
zSC=8isNTcDRLyZ%UH#douCFv|2tc0(FmXohkqLCc858ItK)^5vDeRt9nsRp?;m~Dv
zw32)AfVUTx2O&FwT&!S?9pxS-I~A<R^W3B9OZ>5Qp975cVEo*(&d8~*sUX*PHBf|e
zTWCX5H0c66X^C1|JDR`tmr;xDC%HSwLt;C+f_F*Mx2uhOTuM|V`r|uR|GMa%o=rgY
zM9<9k-&3 at y?u&*erbaaZy$P`4etZl~jqO|9j)j2x7ComS^mG_BQy*2m=3L?tdS>$?
z95b{`q}hyG)~Ec~b#0B<h<0xPBc&_;P#LbL at ASc|Nu59YT!kEGS@@fg1vr*a2SD+f
zW3o{w3bL?L&#@vJM^&>B6!#+kDoB7#G<ivqi`td`Yqi=6&Ysu}Gq<YRV}WX&S~2<b
zZFHiTJohd-Hdu}6_*Ntr5TQEFtWcdnQ2B5mD?rISulFA8I(IK;31E^{kWoe(qu`ML
zk(<U|^zW&NvGA_DcVYG0y0+7@>8l2E0+el(-ew>zK)LO>o;#p`$31$E;d-mybU>|y
zFaAVNAIOBqB0V<n0j$s%0ZHfrd`>b*4tH#0+h4+%1sR8;vv|&osF0L$pGG3jb7}ll
zsBfAKEzoR!nb7g-dw&Op3*YVg>lYgOE2`EoOcN#@_Zz{OWI|NHIxb-N4YXLGqng)(
z9pn%9laNf4Lx5(pqASa3w#Y^UaTtHz2}$1nQ7b>fI%uC!vo>RKp00eN=cqX at 3a<t;
zRWE at QB|Tg)Hj7Jst2WhzgE(@Bv(@aAt$;eZ8H)*g3j=7Bj4)u~4Pn5dKfoQxs;#^e
z2te<$0Okpfz^v5)nQ<!KPYk0c*NNx{hKTOv{q|IV3UfAWQxAU50SSsp<-Rho4$3Xg
zkg+3YQZyTDwtGhhs*XpxthEC!L#`K70~mzoQ0B3eiV!dQhJf<SoBE5(qQ1Sow;~S;
z+Z!O$uYn at X!GJlW3qEToIq|~{Q=(U^sB7~IVl;u(Jx}LDICeX`mwn#d9|ZUk3)G%|
zgr0zsxl^S(KBX=R1gRL1BW53(pLxp}8xA@)U&09BMa=b^9x at 9TOLS3_Dt36;c-I7&
zO1DN%&UqDq-}_J-SaBK(bX{IHc?A&uqCwuM63~WRL5$=<&j_j)#Wnf?`kg|$rdFon
zOWP!MH*9=M)DbS89OpS?5fIOWl6^t!6Z!9P&MuNpy`5)?GlPT*<w*D5;>OG;k<V<Q
z<UcFPZLd?u(K$ifC29si6vQUV^Y0k{e`aT(Sz<|il+BT`Cz06^G!A(hj>;Y5|4Oyr
z&y9*ic~ZL1qXVpS9jRq+bY*IHgf;Zs1`)fc-7yXfJ}-6Io<4IcqYAK}9)FUep3B*%
z>T>3W?kW^dvR-TbbVvPriB}c7{c19BhmHmKB)hd9A<eie92v8UAuqzGOHNdr7K?vQ
zyRC}~bf`7|_IA~?Oo4Bh4ls>%_*eih!@MoBdwE2noKX8+l6xXg0_1yp#MkH(vyKNO
z>#TukR#823WwW04adj4L3R%x?WCm4u6Pmn`YT$Y+BT??ev(cPOxWSM(-mt86FJ*Z5
zz<ZB@>&-=N3&Op7KJkSO^y}EmWKP>x7T(puloTGN_bK1FGetyMr9Tm+iow-5c at U>d
zcWpB96##+iRxEKUeP3`m70W3Ie!VE<I8Imb#Kh42L(A at o_XYpt{yG-YAfcZ}3;m<Z
z#$mlbiz6ec7G|+RD-+kz*M()4aw=o}nWH<ZM!K;(e}4RGc&59*#v%d&=3soB{h%&x
z9@!7|B1mo&I<+RixW+8zcK;S%ljO9u_~W8DA^9 at QrH#h{ueMp4FPPc7(Os*V8qSqZ
z8z3}U{nqMhvv;)O*Ot<seq`rw;a;to4CRhlmG1Qx+tUt(1z77@@LG^<hkR|sV63BO
z#5Z_>=RINfa%p~WjU<@cJ`@2~IwdSQ=&RlVlF-onxv67hz~MsWs$a^ruHF|u5x}E?
zY3)U+1Cp?3)d6<1Q$eum_03BH`~s!o%)s8V0oIGZgc$grUmUIb2I5;Gw1_xZcNeT1
z56sA}BpP$7tnB=QuzlpmxaU)yGc#g^o~gbZ3D~Nd1}n&{K92a=3#4-ctRws*O_6Ox
z#1eRKhZnt!8$gGZro^t4bj0n6q>brpKmoQWj@%<=H#k`wR8hctC>w;3yd1$D5xcmZ
z>yP=|!ZB&>$eJ88F;`WEQni6;1u0;asw&DvQXOUH=S;wk5p!V+;mIUeX3ewdhx$%V
z0uZeFrKvdchvDBKH at 1NDO+b!p>36a3TuwZ?*H_cuPg!ljrn-+c56^_tLcn>?4a;QN
z9$DDETsbPIg#h5{w@%KS!&85&+)b_Af=zZ_!Z$^P7%}Eir58QDGXV3w3u#qr_i|O0
zA4P4!63o4Bm15y5AQtvhLtCI$BBA`YV$K)>DQd-5s0}$%Wm~biymo&Yiu+p*pk8MK
z^*a0K0%bdOXDc>UXmjiS-i0qMj=IEuV~y4lJiF>WRPl08m!%yqSkB0T;u{7f)M9Ro
z<v)Mxafn)|#aw9t)LM9O$|Ja{n{dv5fJ2tx=mrJZGF7xc?a$2}BN20{W3W;Llx>=7
z&ix-$twf=^aXQLH=CY~d)wbKMEX8Hp3)__aajGKgDV8{>A$RF%V=r15q0QrTkMeW9
zgSAk at ousERJH5o)visvG$0E#8w5_YvN`7}UD|FYmb;T>M*$C*8D&ZHZz;rlHuIPG<
zN`jBl+Nn)N*kre6NI&D{LU!Lb*HPyYqqxD>^k3<e3ln^Ruwp|4k2+I?`K!HddC_wr
zof!`aE+z?pk+&Q~))qlU+c)0cg<LSNzi+bziL>)ccGKJAkuD at hnRUdCxo}DhL0E8H
zVoh+!<A5M3F$XpYkakfl_TX*py|vxTTZeC6A_=is!TdwPzU#nx2q_#Zm#f=I${=Je
znNL0jczePOY<bcd9z+%kauDDUVayQ1KrrJbA*6{%NW*8KdmeAjy;}V0{&pnBj2T{z
z5XZqYoPr;Ion)5%3LzbJy%-ZYE%)w0d`6DL7GqA9K_%O|q+0XE1as(@?&TDx1ZuHD
ze;SGbGeMN5PEub#Y+BE<wuD^|aVT8gV^->Chg(V at y{LNc=`w39sOV&^=-cNNn>zh`
zaLWmxM)ktGV$IS!M=eT{7e;4{#_!!012Ku=&peb3kC-33V2wr=N{yRBChF2ZAm*rc
zMVeZ8);KezyeQMgc8_D!g%WILRGgydTrcElVzgDvZW<q!a0pH}7wXwhOQ%Fsm%6Z<
z)a_+ojLL23p~C$AxJhwOVW7K?CK2#B)kBJ}7os*<C#HN^85_sUZ=(WAF~W6If7*~t
zn6AT}gsC7c>~W0dA>VG046Mi0no{ue(@k$EO)193t}ngtg4$h*O`(-h7fZ3}Zo;-M
zh-zN~LUqf_buboie)bM3O4rHFrMx6&Ixk~#9ZA`2!#srn&$6pOwesBQj3EvcJ6v9l
z>((An@#Joh0l2TW4;a1 at K&{+{+1ZWCL5MdX?yWtPAKI*8Ms!Dc+ceFrpvt#lZq{>;
zEPR~{anhV@#_6%I%nni)wqd-v82}rz$Ms{M-hEwGQIDnTz#OPDZhaL3Wr;r^L+io`
zwBnJ(#0yn6UN+5PGT~6h#rc#)8D_7}<@=Kv_{{Jw- at k}gL+3w;*UWc`S3 at TvUdh<1
z=9v@}DLoRnfDVr{6)P at ZDoBe?C95L6A>pF={Rte&718XnIyF0iCo5Sd+IP&j{33UO
zeHKD)D?*J^!`6w{H3LS-W1Kj1+uAPD`z!5ED~Odv8f=+Jwp~@z!q8 at GGJDMgCDK}b
z3^QTWJg20AM-Jldsz=uI)C31e>=xjp2%jSFg2P^&G5J7xZ-|89j7cy(O`?q!7kC7v
zN{LLSnrZi%6cc#Tt)7wWP75D7HARhQ7CH0b%$UQOS%G8+sWrjxzTGnt+7Qo(h<`gn
z%Q{B15MjqCzxGzB!@}_wLy>Qm!CL6JenxxOwf919;hved#NMhMkoa+&8NMA+Jjf^P
zQm5Z6Sw)s;v*RN@{O-V!8H(an#6xzm6P>H0cm<O`{zIY at +mlsMX7Gjf<Sc?&5C?~H
zSCqG;$_8vmNt78>hn5zGsz$>6nP|}VDFduR25~x*f&^I<X=e60n3dhtVv)(KcZdiT
za|CI(i=g<&yz%gMQACLt3<Vtu_1xvm9Edm;8nGT;%h0vlHCug1Kl6J_iz?L)$l*Hc
zd7fQx*t%frIs at FHSmt^2`IF%KWNonDPXW_HbodnCOG!e>EoW)PU=po9nG+13vw8bm
z5PU8OKF5FioJ;m?xr^T={nY%)c7KpxJ7et$PIyC}fm^j3NaHSoqb6^{A%rJnG%S<!
z_MUU$@L7w60-=RY#i_THbVc#}?w|(gEzZ5XVU}<iXM}Tcx6#t7kvb?HAr2aGKu&{z
zIBmNb6ix*Yb>YXtp_<pQRv#jv2qydn6TY8GqHHvi^ycuL9tmCebXe4`@Mo&3M()y>
zm?-yo5k_m%$+#+eJ3Ykz=}=(#Ku)PmA6#tM2H`|NcH!<TcneS*B-%hqf1Eea<~ecU
zOLxje$X}D)CwY!cmm;eCnM2|4igN)@jqPD|klX at fbLsboe46ojwdBV3tVEeNH^B06
zjk6`3f9_D+u|S1#oFTadx#@Aan;%2&IraL at t13cbNj?GekUM~WG@~gnyvvXFyyl-D
znmS2(J%%fTWO&m}NP<oNCc)C{tP%%PwCsJvwR?$8O)6JAy>L&ZTC4QE_$aJ(VE%B_
zf3v&iyPIiblB#J;<otoSN7JLn|4HB9i%H at MwrVFVd6C`;i}9(jyjP&m$b5+;i|iUg
zpo)W~1D04=j_dge1-LIPvtXGAi#II(u=v0tfn~PuYWSQNAyBJM0DJN-AsE~B>uakI
z<Gwbw_>)<UT=sVKf&8M+{~$476-r%TN+<~~t@~zu+r9sc#4pC_u$aSQ0t*Wkl+e`*
z7Bg7b%Sv#||MqA%oORg0T~)!iG%olnOct}cgH-m?@6qn(+PhM<qtQ$i4F_%85f?+c
zsbfBw9pj$?b{WaV-*fEZGf?z1X`NjT%ibSn+4H^fn}LbvpUysYWPgEoYH8l<%lE`k
zqM`e4b;7eL!-`(WUuz%LI9q!S?EWg}P at wC4O>XEej)`xrm+OYpxg6D9^<Hjy at UdW<
zpJ)SLt(ka0%<`?BOlLIXroSghg?^W%E>?wa_H0=VjzU3~mli`8+606O!v!2ntt-V>
z&RScNK4=a?3W0dlw_%6;au>L(YQ&y((H$e}Vr5(>KJnD&AntC6Q91;G>O+Ug8<#jZ
z_~>xfTJ=jAP}MltZ~X6W{?c{1 at i~**MxFK;8A(K^9Ixn-V-eMIi$2|D;LD+f4rP5E
z{VosPu#&!3RYhZ~tZ6e<x84(nH_+Gu;SH1kbV_~!E(&+{x9qU{s&Hev?3?zx602!7
zt#suIwQai2)xd4lj>zTj{wHk@`P3`KayLY{mN%{qPVQ{5Hv6G!Q$I at iykuHssc8RY
zj*7ykqdbd;rv&^4*&w|n?T|c^=WH&CU4YButqC6jcNtacvG8~(Yb};xPK>XLc3RMn
zw%>ISMjREhRRabwKUig#BM4cHOT(QY{)gMigvi98=t0|JlxV>*18Tfo0a(QeFPoQ8
zFHrp{H|hPg=S5?jCb{CcSV;bOjeFh1=CgFIr|B6X2Y;g6nX-L#+%CsO;~u_s!?%<&
z_~E5HNA^vVyIo6v_&RfOy_*3}GVnYr#e-d;yJQR~5PF;6fP|=!+FOOWxs;X4(s(kV
zDw;zi{DPb4H}8D0Z(atzzSg(r+~fQ8iDA at FRhR>vU{J$V*mTR}3T}&~G&YO|<&>9{
z_fE`*)<Y?GVpHOlx9;@&9?@3Fp at h%7<erdw&1ekA8k{cmj6{hbNkz&^Cobsj{W^O1
zzS*bYcDU=1M6>p1X;2enDh$^4kBQf&H1SXtJxJAuwx~`&*@?}gtCtV$4_d7vaK?>v
zukD#XI at 3P5Y_`qk00gU6KSqA4CWxU61QiK1pt_k0$h%2+y%JLT9oBqU#~=h3z-#Xy
zO&-Yu<_SDNu=Xe>5B)0^sNxlq3tExao-yBmwt_h9f#R+@(+A9#OoSx}P)t5~#Q5;Z
z!M`6??LkX&XSg<Vf=sXZC??MxJ7Z=rW?AB3y8qs}d#VZtdhF%CQ`C<-%$5G#&YBvm
zmG&L=O$}!6p)8oBS&~MWvm874jzj6s;+0={f&4o-qp!m6PN=SsW&DqNQ-e7;qW>f~
zy#La8U()6UUN#%gDQ^mM=NJ=Q<lc(r<eMp`2H&TY6qFRxscH%nCG-IfIc+y4u~yjM
za)ReYkj<ZiGC2dX`g=3h2R6%rVwdkP*_~muz-B&Eo;*u6yV~0-r%R5*^Ud&_jm|N~
zlust{+|6^i8Ro0bQC7P#Cll1f8N0FRP8-KKU%%;_D;_ZQ;S{O3uzgTyD5!uMo<pdR
z`fxYqV*)7v_4RJ-GOdv+*n_FkPaC3$CrIfP+%RUClRiJ<Gf0h>L`p~wFek;p>|JWC
z{1x5f)098L`(j{zW}Pt-*Z!qDUo8K~g{`8#5v$^Dz+i|M at PVJ+AnG@6!!6y5WvLr$
zf(`IkfcrV#;bRgW<RvE}y(f2-{G$=KdI|PW)S>)k&NOTcN?LvWa%<8XSfR%F=7K48
zdyR`CZ at z|#vlDEH@!mfgbKU*W2E-noAM&!<ka?(JS{^Ntl6{IXOhRc7Dfy?ET)qCg
zuD}JP-ZXT-#y_-?W*I&mRLlAFw2D8ZZyADCi2T|jxLzF87ji%B`yDUNAjiulKR%jM
z;1%%E;4Qsif~)*_3)m+u_vtT>3;4+Ux!%6+b9j8LXV1<9(Q-Z`xS|Huc at gl@%Wk~|
z{ErcB6AHeixV6|a+JC7JYO%xxOO|v8<#*vGcU&Th{X;rN7Qc}LR;4keBvg2;y!TYS
zKph`FG(5BH(P%h|=(MaDSvI#FHF!?3amMlRj*%aHD4RO$BibQqdmZMi_L#1|m|q1<
zknCOiW`8i+rj9&~_8)znQ2ejRmkL%vtFI&40gfD0ur?g=wMQGdktY?blY_o|v^$It
zjol0jJZHo6D0m*FgXgf^Kwimi0oe=l!O<j#<fjp~7N%q?PG1{u7)W)Xjon9cAX`O3
z-}mPowify}*AdyB-+M|HTMJc$o;ExUk_A(c=RK|M5Atp#*Zi^c!m~~eU;2VWkT3Mi
z at 4_9n9PQ%ZtzCL%x^4 at 0hA+L4f)j1*!S7Cv?)H1us*}@dk704$G2gaz+dLe(I(p;E
zSef70(;{c*bgtSIIG9Syj(8jj+{S~@u)cdmH|N5=^g8oNkcZp)=zv4|n4Ff=<z$(@
zKVz~XSm(0lUqX||Cr1qV(w!I at U5>4cN!obPyB+TSp_0oP&+f`iG9B)YwqCVutFu2h
zCei7c&-&#|#nAA@^e)`WvCCn)L!a3vqe at s`jb5<C_=5bJT&%tE>-o|;v$VA@<&4Y+
zwpRyj;eSUB|0S-yE2k;X>CG8kID3|S=g3Ks1G8%pZhG!NC1oM8xK+q{+zdXqxZlaa
z0wv^Z*}dtCay1YPeE_0Vciu+DGtmb2_2-y|JIO&wibkf6xZ8rG*jf=3JTl}U0#Xrl
zqfdFB$10DbCE at dnZ@zdE>{|uauoyW4foNtiN?qe`=klAN%dBSAqmt&FJisJh!Va8R
zBk(BXVBtImZ)-DI5!nSW&#rnlO8PY_`?h_IXQY1{+7)gqrUY$K at rNhPAqN2i?e0q$
zz&pvuMyp&y1?<CSt1thgIO%f`ID~E<x8St`2PkL|yk_9ge?|t#xxREV0a*4aOZ}&#
ztWsHWTvY|8k?}hLcQy*whTIQa1VhRD=HGnwB-rn=qM at vJUogT6$DZB1q1D~NLvGzG
zB!x5%xgnD07{uYT$vCR-^|`yq_W7x6javS_kockDgMPz`!a5z01oo@;K3gjW<i$)p
z?4V#v&XSKo3ltKiwd2b?&Kr?$bH(sXg9EQ?;r#zYNM~7!ov4pr*M0cFW0fUt$?yT}
z{b&A0RL?6pg8h8IM+~17uwthiT&}?J{thQwKe~Ehec2HS9=cy<(SIq4mQCe)uG86D
zqz}o=+dO;5|Jv^T|Ly1%`p{4v1%LIgk|LZY3A!fEyzI=4q6JlWyISOZAT!@zn>J!{
zMzcnGBR-NyNC2Sg8URrt4%MEn>Z>d)j at GJnnV5H4Fp7HpDhQJeo`{=ATH*MmOLlvd
z<qEIdt;52htu=up7uZ4(d=e=HlTnxxegR;1J8_y?r?HE*X|&SxE;-Pyp?z*}C)jCj
zDLhDbIdgdUm!>_NetG?;!Y%hx_^#K()83?oMz6Y=-loJGEY!7Iz<ly0yg34IRt`@S
z at D^@Q%3x{Vt*lKeJRDnt-%P?~_bOw|Eo&_Sv%mw)FK_{IB$gv6NCqLXVJKB4U^>l0
z4T{n#nGF`PJMj)!ZvZvs(xbmWirg6f=u&tk<k8hZq{%;9RJ(;fpS)>&;E&U=K?$t#
zcN=4~vxu-cQRMFAB0Ftt%yiRyArPSvNo!7K`7G0TrRiK*#g6PPs1a$}Oct!;Enns)
zPdhM`_0N$}Z~A5F&u>3=@ShDaw6Y1d(hN3e=kT<ERIoPm__ypje=KP51a1zeX6n>2
zSa1KZ(2)mOJflAyO<72 at 25aYQM%K?|mnh3|bL|?JZT+{>ua1hp9a-hG at IWj7aerJ|
zCP3(#t_}&J`>ZJSG7j_p-2qO+uE?vS;Ys-c)wXA=P~r%554~8sX8-4vx6CaSCN}$g
zR^k>RyK%g?)HgmPovZygP!@7c#HkoOVQl#5?>1X1ccEu5?z?iLus5Fz0`f8NJ{+kz
zbro3Z;0feS0_Q)r1HTY^2k)r7X>RGrbHI>+o?%Cpm&6s@?Yq$Cq?r8gv3kye%Q*g=
z0%FyzJr?9~oELhWW*@*1bH+~0eqC`ln&^IFRt$9kVa{Tx*&rfii{m+VVtW$misCRx
zJ61vcLT9wCMwXwR-1<qqc#rz2f|-2b9nYN5f%)BwUcvK?Uk^{|anpoBT5dl(jwU<%
z;Cu^;VZze!ZJy`b^KKq#ioX8xn%T|fg at HNV*GzAohR4O%SU1037<ei(aq0TCO;NsS
z=PVl2jH!!}cfcnvP#}p>nPgijp<0MDl#<zedu7&cKIH7Y(9<-t(AIH=F at qeRe)hpv
z=QHCu%-PPwQ)9r%kY0(sw2i7gh)tvWk5S(rgpA!LAjq_05&%E*u<E&Xa&X?d!Q<fG
z+kcQAdc=UuB)SHVYUQsnwSibXd0Q}T(&eV at jgJ*gk3^tabw>^$88Y{K*jFFd8bU*!
zmybs8*F1mO_tkNE#|U at G!A2F2PtA|TG01gjA)z=^T06GpRCs@!vd7xOhX9n~5H`*3
z?G>cltpJnknb at zQzBq(=xopa1dh4c`S5UdklND1K{qQ<aH^o$nB)^kkG^I85<`CxX
zzUhk7AO~!?taiG_p|>Z*;`SAt*39{~e5U`Wo35mDZOu!%%o?esO;`vo%**B#WzDR*
z>~XS!3t!_C#@yFLooK?Q(<-T+CO9m8O(=J9#4X$sb>y?D;}?Qv*_018a-vlEakLF3
zKvod8C}_i0cqEO>YJ<nhnI9zE?O&88yVdSw%}=*2b;+*-CeNuj at 4*|miv%TN<w-Bw
zxP}U^{1|ECSQ{rKsa&CoigOtp$&&a%m0TKw9TWuf+EtY5Fg7^|itA>lGG3=&e{80G
zpMuQuQWgfUlV0xiyYfCoW0E(sMDRM{`eQ{kyiX%vC$Y2VWSE9MR#b-S0-Yj0qaGZ_
zrnt>h@#Is6wr#rI%}>7Pc$1ITD8szNKwgq4sM&FGl)W;La{nCjpk1UEeU1reV(Np>
zF+26)NGoMslvTt_sEF0 at Eh5U`^$mD^Crk9D{hO!PyA(V8mIPQrwZ|gj_eiV$4N+Fg
zKmh7~>ltzU1O9gu{&y(Ks at AkWZm?DpmY)i;yu+|O)s9?(Ts(!bz3cWiRj1suPwC*S
zTnn-8BL`N@^q|wo?M?GRf4Vwpy6kkqbj?ZSTAYytZy<wWd`~W>>Vhx7zmVR)VG(_i
zr|eFD5H6C|zFac(I_DaB3m1iS08Yq%0lm(mGz@~BlXPRp$dvChYy~<FGhDZuhSvH?
zu|GbF+v&-*&W!XbnMuqgRdvsw&(;owXp`41>li;ggRf?9x7My!@qj?J!C>wxP`!dj
zyB5Yrm-RGNA=ImH-?)fuFHfyKxeBV|7HB`&p#!(|R$zG&j^50^z>EHpGG3DfI8;uI
z=L3Pqf+SkpWMKX&C|JQ`kTxiSlDnuFxXE^fHb_+?pVFsPJNZ_+<8!<>fIRyYF`+sR
z_21gJTfOU##r~Gx%4jYiR<$-vd2rna%p)0l%p|l0^f{$RZceBZe_T;aI{q&Sjs$1M
z7*6wP0(tH&fFY?S%*Z%BGvN)G0lzUFePggzJ3mB+yAI4h7JBcOW5H17l$EG%W=VMP
zIN%0Fnzw6%jh*rJ<Q+&Ee~dI&PLDEIb>dUs-FHNBJwv>4qW^a=<>$w at wTr&Hz2%PJ
zunLX<-S0ACugWz>NPXlky=F|O4Hel#5`4f!9}GnVVa{Enn5fRT!x=3*jLWnBJ;O5*
z+5HTP>_dg8)ZY{YWdD2YywFg=?yX$ei8CVR1lUGcU-7gCngdp&=l at _?(ujhr{y1b$
zHBXmicPe>lo~jEze~Zt7b$Q6876DwWw;{GPV at P;Xjm*znr>dcZQ<a3Nw$+=}RcMnZ
zl=7j+imAEMpfV_widcJgf(Onnm(sa_Ay3|%W(e_{wcGwJHRjye*R*u|T^Rvk$CI3n
z0*}~R47h5O4H>J9A%J^Pc<|yR_Lj4Wr7fov22#J>zMutXH>rcK{!k{^UMB1hRayS+
zPNcjfCyq?l1lC%X5{Sp3l&R$fNYxCc+nl=Oj(oC?xFmj9L<Tr!Q at 99C&5Y{8w5gNE
zuSvEAOq#epvM}+(rS9YHp^dqA>0Hd*5i(5u%br&gb;8t{OlxB$+)~QKMQ5J$yfV%+
z)7ns3gerFkBUU&wRnPR;!3w~QO7T1C at y(4QWNas~f1{6RiN#hm+|UiA9*CCm5;*F{
zsKzS}7YDYNXg8e6=y<iP!S_X<+xWH6#<-dK1H%8FIXSN at n_DWX;GP$%B^7dFLFhC_
zB{mHom_HmmwRGO|`V5YGC<qo=z()(cxkt&%5PEYx^U$W_&0mL;&GVy7P~J_OkNv)3
zD=z(hQ0eza*@46lv;0?l;nXDj{;>tHH|qyn4?Z#SbeZ+lZYP(g!f^oBUb?^C3sU=t
zZvy;0y7(-JL23gE&AO$S^jp5esfgJDa|W^xL<hiLsMd2hKPmLVKa{bz`(I8UKI`!G
zo5zZCJ?KN$*1?B#iP7y&j?_qZchAVXA9{FOmil9QbzM^Wrc>YC>={R+G?b=a-KQMK
z;YY0|&=!63_-!?38tDziGV|``V>|uYQ4f9V)lS<*5v8L_Iep&22%KnE0`uf7u-FIS
z5|4qw?aPeAdcVkbyl*-h)~^H73C#S=p?QOFSf`_5m2CUxs8(WG;@a2CFo`uGP|eEa
zkkz}5=jyMscxbUGVKF`rZG+DK4+vJ>w6_0<h-RlKZkGy=y8|@b68qGrwzF8plD_nz
zKIJ~i!IVvp&`1zD0V!=dBXG*Igfax2vv;%tB|d(wmy`T-Af-PPVomZy+OUmYM&L%*
zLyek1^~Mv!QylkafzW0RJ+zr-{(FsrX_BG0f|XWQ)F^0e at p{VzgT^6?ook4+546vD
zXA4pbQw#D6)6Sl=D at WpsO?9imk7TySn}e=1E1WGLYvrKTF=ISO!>ZY(`ZWQmVa|!k
z8x%8AOxFacQ*R~7!9a*M5T&~8-D(Vv^gLcp`+&R0qA^(;SizO!LvGda*Z4$xdNUoH
zlUEwNf45P38T)ql|Izj4aZOy^<M1R*U_yckF+e~t!ya5COGP9k>;q_nEGjBx6M|75
z+=A6QCfKluAcBNZ3*t@}yV#0~1;rhdJ}QE?wyC%k8)|E@#>k at Yy+LgI{XOp=^SN`k
zbGLKPJ?AdxOowJO$7ald8sWC%k?}IsPsj{?cH&`%9mWL22a0-3D;<VG)mtZTEOgEe
zu(o!Ng1bX%u3(e0R{lo~fr;w&SidZMbUx}E8e_q#J0JcBgpFR0hbna==;}~TF^S~~
zAF%-q2*IyU)_Z at byywkU-SF~o at MM>zHZhCds|}g%xY`<ftlPtmtG2d>_Bc-WW)D=9
zDOlu}Em&fcy9LW;lgQeGvzfF3L{I&O>K#24&wYMG;hy4Y7R5bTju-}7rJ7cw$*fEu
zaGsO!d}5OueSLQD=R8aNdbVyqp2(kUA+eQOR5HAL-m3vH?qQyvxf)hVs^amrS^99O
zK&Uv=6r0GM3~!iwN(!qHf{pj)QBn)@Gak<wC)IG{jJzI<_38c;@h0M3iMq)aEJygP
zG1V2->YEimp88|JLN6zldB%G-(Z=(tZ4seW*kSi$!g5Jbh&@>$pvTsZ;>Xb~qgH)b
zx>VPH=JQ=cC;pX>QH@|T at itHqwZ-TTUL<$a>Joy8k`zqqpC8W^?_j1+tNCz=GE69j
zYBx8@!@`y}s1RtA?D{(J`GGGRe6HY2Q!s6X;7b9YjmZh5nH{Ot$kNbQ`(%&JC0m``
zp261+yzl4qg6|oRztjnQ!9=>+e;$$UpXbqp2Ji%PZ at zH{%r5_-vpJLRA$z0y&hTp^
zJGO0gS_uI8AiRmfvq6;Hy7Co#QW5QFA&+KSTvKx at UnwS>>kqmL)w+*V#UlaDLeWT(
zlZ9kE943WDyt_UOs&mcErM0X0 at qpo3^$qHP^6U at ssq$}793?~n at zht}pj&8<sGwu0
zpTnavn|U*Ft?CiNh8ol#$M&Y1(`b*O0S=E44^_`FCS`1-weu$hJGY7*U-v1r)b(TN
z1a(r3CthS$K=V1hyslq6Cy<g$)*Z!AuRIH)^tC>TtQ7`<&v#gGroAjn6UwfrZ+<dg
zfJW&wHf0ZL<E3 at 4^5H`h=R;gP4J_a1J~yj$;@<!MRR7;7(T0r;ZRK_NC<S!DW7q*+
zX1y=H%e$g|EXqsqmTYY(kK53;-ZQw>xb$UaK43}#Qnyjtn@|@ue3_C27?Jqup*0c{
z+iY){e)a);Br45HUdyW3Buca36a#*3!cx(_-sScRmUUy`$_2U~84$C#{TZ^xVhCf%
z4{{ozK?4{DMT^YS!Y}R<-9xO;%(`1R_5YY{fA#%6+agjtH5D-)c+r^@^x!%mA{m$I
z!$IxNCbniGWITaf6C}SPixe#5w}I)o8TX at tE-LE}C=#;tg8gj{SwUYdOy8JGtvrtM
zm9oib1y$w503w+i849FHEk at 7wmsyi#RYR$aTYpM!1Cj+wTIy_V*5<S6fo!Qt2TIJ=
zhi4bCk#$uVYRuNISWtza=0Qpdu>%9bhXg>Kgt<$$jKbOYIraN-)C)r^>ziR5<$MBl
zq`jctIf42H9{ps)71eXh1~BTh=G|+`M@@-`KCl-wfJujWlC{+c!x5l1 at EfyDi}Je7
z6sC>Zdjj>a6rWd&kKaLEIf1 at 2&0?qpgVxNOcMDHf1T3~-YwMej{U;;~_BO}+^~iyx
zi*j#L1Tq48d+U5^+DUYpm^TT3B-&mo>YpFaZ3=_EJ*tIvloT-XE4RaUW7SB^bo?RD
z3GbrHPogqxY-&*5C(%%!nrVo<h*ds at qHy1~vM3gV>Z{<h$2b+?n&%MBB)3o@&8Rzb
z1>t&p*|aR<hm^7z^$H$;%Q=Y0$9p+_n|_BF%oE_f at bMwttOZe%F3;XkGqQczoonAG
zeV1qdh8kwu?o8Oj?4>%J(Mi~;D=|}KhYju2D*z7zaVJ6Cb!y5f)LGpj{`!{~yL2{u
zyE*!9lR(1GNAH1zJs=SOEfPWSz+OLIYfobl)DWlgM_9%8Yv(+1z-;y{tbYCc2z=Wr
z{oJes5|CPmJW-U!8rE=YAc2ro)yM^DgM;C<l%Ayp<P`WDmR7$`o||JCdDltJlJ5C(
z5!8(b-1+cg>9vLEaG%bNF>oMc{iADeF__1FQRvGJc`3tGw-tVVIx$jkJ3^-S%WAKS
zS(H2XQ{lld&+u)MLIhJ4Ap#XcEJ_6fX#WyUU>R3sk8sJEe!S=1n~*-`sfllNuYfh&
zX`E-1TEpelUPS6*4Jnn43X89FVC8BWbPaR`864Qbd6dvI#BMd>a!9C!FPGDbgxdY>
z*RGITzeFSqE~wCMG}{idt*B880hyf*#>#K8t{u<r!5E{`PYkaz0keir+ygU^_X6$w
z5cn#wAjq&9>ULN9T!**w*}?gT017I;9SIO1EH44#cw2WFh&Gtrl;!kLsOu&{O#S{X
zI!W+Uz}XDVwn^)sy_;uC&_)-Wi#R22L2(+7n%9Cl%}uO3Z%{<F%FtbRUhjeCYRK^f
zQ(C`<fSPpN7gj%OpGhFny8phf{6K(0l^xSibsLnEPQNh=2D`+wsnCr#z6_;KwxBLR
zz`xakdaHX%@w{7erG3hPkmJh^tIIR=anSZB=^(-SmM^h@!nyJRftBso%T5c_?f1F=
zhUvS;A_u}0io=S??+2$Aq$BXDEoz<(yD&xoj<Dnk-s=(Wz)R42r at SPnipZ=)ryj<m
zeTMNKl%^FGpb2-FH>kQ+be^LhW^?C=@Z&%iKey+%faqlJ=eD+X6H<49vOJA?O at l-F
z*JOqJZ<EaA(S56m|M9x*LO)oa&Yv`c)ja<7H}!E>im64X(FrcI>3d(qXkt6;l!9f{
z9!qGFYKu!X68UZad;_1VK8-F`i)CWfiH|Iy((cigp<%pgORkwK_$%oP{l%o3vI)Xj
z0Xl>i^T({uz4 at +fdS}`9e<Ty4AAl>d5zb2Z+4|l*Po&8=9F;>w5lXRQ{6L2oQN4`E
zSNrMbD#h{KTaD1Ka3AQ17q6b7PbD4I?O>!Ht4W(u*I{P??OPT9$fi(jI at ACTn;M}1
zyQyBm2xm+?xH&FWG0E#2&9b{zn-5o3V>T~$4^>7{GISUW71RJpKEP~%WZ^ba1jOBy
z)yVZOz>T`o<61 at O7hYs)LcLtA7aG3q-Pn+WQ2l4n$>Rnu99Xv~K4R6Ph1EX|c2XW~
zsHZv<O(bs$r`#M#+NOFZ#d5Uan(zPkix9OkaBk|9y;mxlFo*e<y^GAddwYzrYv*IM
z_U}3E)6-OjDepbMXYPnf(C`PKBMPA^8*^u!^U6Xtc5=@?u8a=xfd2_y*5^9;p}#)(
z0hARFI=cy(xDfFEjC`8lV7+kfmA8P-06^7$1DfZlsp;evnku7(vwYV$tb{fTRcAmi
zSAt%q^r=vVk6HQL*BAq;Lg;F^|0{)`MLoS%|G<1wGhv*hW|T=>(--gf!6Z#|10GgX
zsWo{*RTq-&gVge~XaIlBy?DpZLwB^Sjn^zOD{2H|P8~aoMyqG`8E#kx at G%Qf%|r)f
zHhj%0bPe#pyp;0-?E?HU%Ytyt0)`!e=5^1V<@}f0B_~U>0EP$XFkW6V2%DddkSFH)
z!!YyzahW4|n}(1#m)SYn31|{K5cUoXLlAQ5Dnv!uA~Wql*bCvT0zWGA9O at EK*#d^W
z%&kzC?=VV7w1)~yeOKB<JYK@@)O%bnN at cK%QvXUSRxS8Do;r386{W8kiFZ5^LGv!i
z)`x{;AyIwGO%wASu8085nN;toj~KxRUOxCPn##BT0yF#(E0$ak`se$EK--=+74VhI
zRm{d1qapTv-}?fvL45j>pwbHFXeoqpVLTOl9u?r1CgTtD;H?PdZFXKQ=J}S|BuTJJ
z?~^}KYtN%|S?3YHF+-ct?6jhl>O7Ci_<I|nz8(URY&Ti?9`knwf*X&*FQ9z2%cqc?
zkG2gx5ly3|RuAQd5tyM1h=s|}^`q-kx?bPkYStC`)?YRiZW#L^@c)~PXj{vNTA74j
zjdZU!|A)f=rdpwfbupDTf~9wEW$dw4{zI3G;sJZ_+FbJ{KkZ%W*adVU{rSh#xQpma
z=BHs{>+Kcp?_H+ey@*QG=5v5s37Sy%3zyGCoiV at YS~j+K1NUvl{^1RSQGbs0yTs@@
z!dw5`zy0GKyaJ~@vxt5RL;Noo)}wxqM-KC-#}a^mId6c7%|K>=VV&_7$e;fLVlnCm
zdER}KXUw1Yw;#Zm^+mUd+p7D)>f?EPf=G%G{kgtt=y?f)GqR|9Xls{g`hUiccYPR1
zB6M;NW+V4t74<1KK~&u()XjRsmF%8L2(P*rrP?o{{`53&>eVIGp8l+lvcHT at qCeA9
zVV6-ab=oz3*x1BOJ29&N-L2!=6=S6=eZJD5_)+KL+0SQr0>K&ou|6JOx4S`n^?Uk{
z+9$5fmC*zq+c$+-i4wS^7!y{anDs!YHqPGS9K}&+{!4BVSd77bb`?zeY5K4VTY_~7
z*Q7xeZ;N#Ts_!y7PTgfN8~7p5yjrV$=-M1}M031SF%8L28e6Na%-b2PXn-z7rJ{^k
zy}e!{jpsj6X7|tKAFoX}Wtz7(7^Tw!dN3LY_bC1a$xj<$A5;ZGbV5U0ZwCDa!_)fM
z2UokA!{(`9^W`P2?Sqdi=au609=2BBS+0TCar6(^+UNWb-^lkc4`cRM at y5y8Olci0
zW27jNS)h%Ick!6BXJq%_W2lZ6+H7AEPM4EagH!I^kBU#*KKK|8fq?_U7ig4;7cG&>
zdDaZY<?_8|ZsxP1&<9;??OJ|_niEx`u~yB;_{L~WM4Spl-g!4%^}dN6RZl~KWO5ps
z*S at qy9}e8uOG<sXqzH;i02#O#<Ig$3<ztMavB2$a<;I-I6W*T6DKo3Fm^!ESuBTiJ
zRax*P@?u!Y)fYF~Zt({dw#7T08Lfhtnd;FDaMc5=iX+dP+xYzJV3!zYkhqnLN^~3f
z at UVD`YS3M%3fcyBVic$H_paMc<J_IfDTYU>Ak4|Yp-GMF=yGELJq_y7NT{~H345Tj
z+L{4jE3CK&Qg3be?<iuHxUF4{jb9suO<1eW!5qwq;CbuG!G~krHgFjLRD&*EH#h|r
zd?2Z$c>E>j+5M{)`g^q?vmnkG{{WmW&6lfw#PvDaqwq^TA0c~DB6J7SD8qPP8%K7B
zFeHTl2Wer&a0j|z;wY{e|FGptZh$g&#f#Nykv>&Y5zNSYPB6bcC7+%31mJ*U*Nd_q
z!UAxov&WD)m7@=9iC2AB_Qh~m!u(i#1W#`_oG8WNj`C?BLj(GUtZP`5`}{AA5vRgz
zJev at SG|OSV*<$k3Xdm*Ed16r6z%!!FWlA<?o%ylfub@)uA>v1K;sB61%ba*6NbEC~
zIBW|@%z&z<ns?u8J)S;#QVBJHJ{uC4rJ}M2!;wGKc+-C7;%3!F<U2obPx<mnp{VQE
z6wmGMRk$x&piz)N40={xj&%;ZS+!^V%NzU2U#pS68nu8CYlls(v|NUq1}!mItG^?Y
za_nnUqte%k;<Gl+*2k63mt~RNi`mIx*aWiM#D~W0>+e_<M(Ql4*JN_l<U0hm++iN#
zuK<F^N*7GR-$Rqsh=s=YwX)_#p)CNpCqx!t<Fo(75V at ywZNr_$!z$oUSwbKN^}Z3C
zjk_~{zqd=aX8mKXzj2Kw8b(TV)rdlvCzM<V^7qb*dU6LyY(l1!$47f+a9Np5;$SNR
z(lZi0ovztfHP|kJvii=*&i^-UsmwPEDOhTYU~*5omXqXEqhuq(hN)Y%>Vd5OmBr3m
zi=hke-5U1h3E`!nAQ7i5+kYI^>vJq^H6yGLRw#rPvWEPXK*|oo4ITpNaB<~Gc0pSf
zG8T~ShR$*E3sY89M{T(-)gEw-$iE-x`p~!(Ebm2_P36V87?5E61CkMT{!xVOqT|>6
z(5;wyOr=9YrY`Cl>hgr=BM7 at 7TN48>5E*`_amXYAGm27kKqki2-5Xv~g7462YT8-S
z at k~2B*hz6AL<t9l+ur=+amRzPvirkf#=VB9^$w*XNFj}dqZTNdS3rvt*i<q?hLSad
zJ~7T9FC(tF`P3grSmgwsRDdxexd>e$`mL?`RDLU%)(ogi=N<l;HWpX`8sBlfkl!ul
zNYsm~haPb7PM&=!Lad**(zA+YU+Iy;n{Y9@=1CPHic=}Z`|gX!*WOUDUS#R#COAW@
za|+goPT>y1#cQMVsjNE8vjz0n)uZO{(e!ftTvpvCn*34UiN=|DTYeITS6{r`BC*97
z6-iJs4ndWt2uuw%8D;JW>Ptbz9AmCFtj}=T2_PBkb5OB?fPWO$2MXisQ#0QO>5J1!
z-|EfP!T3?yVcMmY5h>H=#AIl6P~8*Vld~-aC6GSDD;ilL;7h6qn at USCtH2UGuv8zH
zJRehAr)YyQqo+1g?!D;=l-u1((@LM*+Jp}a_C6+U5U#O69|z=qXGu)g(7ca?M=D?C
zSnh6lrE}xDwx?Xo6KeXn`3=d!5^4QNn&WDWae&6z=D3<*K%+TIVK6#)DSBr at 0IS5X
z4`ZCVq}UB;%mS&6$)5AvyT&_MjbF&049%<x_%U`Xq?dX%Inp|O!AD)*+f-4QWuC(_
z-wrzo>X<pqZeGOxoUFhY^x{|ba5wvS4g|zQRI|iF;iJaGBO>2HNT|%SrKWvSTs4?6
z8sEUzlCUl0b&QdmfH9S9NRu!IOk>Q5SgBI?hPX*=|B<j8pDx)s*nVy2jsND2C)|b4
z6-}xHj3!QGW<<}3wRo?|7MYXnq&?#VX3<-qf2WhgTho^6GBJ~>_t{t;VL({Xn{)^u
z2eeD~`&aJU>0sL2KasAM%mefLy#^@|9;Q^RUBZ^=CUWH6eI<s~fQg+4TEZW#T!Rn2
z6auL1d=q!$|HcJlq8&)|atF}DLvLaF<nD18hW_P%dZzyRCNKAGUUlG^>GX04*mn&Q
z^(K=mXbBV4K676A{koBpgY8i8WP8|@1%@IY?8nj{lNG!D%K-v8T~FGnpV-?0&0ADj
z=0P(TjL$^1GD*=2q0 at Lynd9nZVo6aewk>c`dg{cC&Wfv;r%|bo6BJ;c1KIkxUUy4P
zjJRR2gOc4q-Cg3G>m6Mr6(BC_pJ}u*a}v!Bbi#zU!Olez3<k%zEVhnK#yl%6spB_L
zH;leKsO5l8pGNiGKpoY~s)w$$V>SVcFdHv~B?}VC%Z%Cmt7G(-4UfSwD<A%Iy~62X
z<ESoZ<7auo?51%zS<4lz+11Kq_6)Q8lo#A%z`7}|dmZ2EB<;xS-pO9kvkCES5SAa<
z^{QT!G|@%8gPA$4=EFH-JNz?m<NO6*(-G?ZF4Ueky2s3`jpD{Ui9ZDQn5n&8XhanK
zj8KyadQ(zWiYFIf%+G%UDIbic^laMe&#S)VaTlQ<Qr;NUNAeM8RykOQG77_l=gn&l
z?Jk2=Y}iLlx{3Ozr{whz2$;{zs1Ge{R`D@}$P7=a*db<a_DQ8RL@!GJiwkBM9|%XF
z{~A2ww0#D0BA_$$RsI+PNV)B*1k57R4v}oKTZT;9f#mlmD+CW85f-d+h3MfU6O&jS
zo at A!f{*x;bTsdWuDrj~E^Mp%9Y`+ at rt?J_%gYaHyoiLfK2Ylts{`vLkugLZu7c5zc
zahmeSwt_%EO#S#UuR6*fEaOv4dw!hBL-9XTE?_o>3Es?~0S&s+5R4KV!jqKNUR<)N
zK^oH&&vp69Jj1Lu6%p28 at k2Jqop$CHO|*9G#- at tZ09m7FY_*p(54J-ZkT5zOtpHLN
zsB3JIxsgs<gT#fl+#wkKd%E*Vojw$P66SMlo7{bRjikH9Yc;2#&`n-haz7$%N2O&c
zVvHP&zw`k&-#80=f%@=b`Bw{?2RW7PYj;@+XNDab-2sZ?symlhT!G_Nc|F+0Y!If6
zKIn)b2lG9ymE1)a)~dRtj7rNEH^FK|c-JdmTko>@P=|AiSG4E!!U6vD65cv#G2P+&
z9V8XZ>S&UTYY*6Hi7%;sUAk;kfyeWr7Ow$?ApurET0a;GDliW2<Ur+d%0z|Q%pIMG
zQ at DR~V{lUOijbIq*}Bl|77;?quu0^FV3#nVRM&jxZj0AO%_6Tkn#F&<*EKX_ywEGA
zMd(@=)xWyycC at zcm;TiwMJ<-ax!O>t at z=I&dA`v(>VQSi{FBc2qZ%}9NsWRg+ZxRz
zKaRzCg1t{WZc1sOQ5<o&J)XGrI(;w&<sMA7L+mA0QnvPmK92gS2X%DZ8tiguNRz|7
zJ!~bd|4SBCuVL~orj*OJQsZu+uC$*h at h#MjmQF?8LVZzbUE&IJfNgrP%UyJ9jqoW)
z+q<~ybwVb!{}$@)5E*PGC<q=G<AQJ+eB{LiD>RFX`})^Wy|=(Lc(27po2$vam)JFQ
zq2PZfj9H6Kg4N-9Z#pHpHL5}Nn?uk{lbBfsCQE;Ju$M6sn)6hPW12QvZt>3(cI*fi
z5caKJ*A`xU6*FJrLM#ejm~D&TiMH0<n46eq^PT+9JDP%7YDrNwGG$6-VaM%Y7O|sM
z(3 at C2M6`jSTWUyf_mtOUI7`1Tn|?GYp(YlGyZ^=#v+8Xe8jouiwY>%%ha3oXDhDey
zP5TtYHGnuk?do&{&S9k0fJL<v#G#dz4JdHgpNR|#Xrb-^t#TW1lgAyPT`QN^Leq8E
zwn^+T97I$|YynVOWhDrwfpFj_z$$$W`k4^Pfs2AwyAHT);O at CIk^V9Bn8dMov2?Td
z#laWUlJC)EwKZTBzZ{N$;sRMg;FWgyC6Li3m5DT!N6Onxv2X4v#xGQ8qCRug&pGWP
z?MR6LB19p^fY*60J?dW>unEI}%p;6Cqw$R$`DsN5kd5OWh^LclF@|{wT8&H>x`Y*x
z-GuAd5~O5%bJX%j^71$!K7 at VqLp|qwi;Yof%7{$BTuAeR*C18Fe<5Zq;f_vk_36P*
zP+26Qr1E1(w?A{&6J?G6KMi>F?*=Tc{C5NT3?XVJ*$t+yXI#++(e;ngE+*B~kCfM}
zTO9l!SQ#LlO)yuco0$EN7I?rGOiL(R1Y00~#3_$Mfc*0vL5s~Zw;by;Nc=_{K};FV
zx49Vp|0|zoS7ls;8nZ5IgfflvJ64T1M_NU22Ez4mCPDAbyd-m?^0-xCi0<iS5B8;%
zv$)=zS5SzmlA`8T{zqU3dqeVGh^x84Bv>G36T1qq0&Cy&*i4?8#VBht!}#J~Fld(4
z7k5y{Wl}Op>JR&Rw2E70!+<}KA4)q6`<EryM3WTZ)5!(kyX8k$Ei^>I`x)>;(wOnM
zeLDw#m*^U#V|O=5273k!@2~?%umCVFfI+!)x$#p<{3B||<l|3y-1Mi)7V6y}QTs{i
z;=v1mt;UL7rf+WEonJQ$Rv%U9-<x!Q5-Wu8V2X&Ow*82 at C9Rk~XPc^GDjskH!!FSD
zVNQScoeb!~u!Y+ZA63zyk0Edwnjd45LO1W3lrQ(6bGX1=9~wX+Sb#IaReB5ENQaet
zm2%Lv_`W7aduYZ^3jGQ7%x;%4RZZz=fl{NqwIP0OL9`*|13#f#!AeB7e&(R7T at S({
z9fU#PgGYWe!0EQJw552-{b`w@*#s`RFokB+=)>Wik5%ti4{5xEmpqomBNws*QQxeD
zxG&c9Z#?xewe2S~eCEV6ZDk(QGUInSHr8kz8{U-%s}d7)rqrzEY#Tq%YdTSvGbL$-
z9R3Fq`kX2J6`V@&Ka0Zj=*$U_e+nDf4HzXrN=QcuT|zs;8UZ5O?OoI&J?e~$_QW`#
zQZf;HXX()}B;{_f&AkoPFSeX&r5he9oeX at cR*%lGfR(wTN8e>j>z}V#IUnOm>;Ful
zJbp%TG&=XHFGc)}2CDlE!xI52Xw8I2H;Rb&uUxxw*59?$EX_B;%d;2*Z?1Z#x4QLb
zNcZ6MKHcWYkPRz<R+;Ne3*di`JK*uaVkhY#L{7`nw#Fo-(v~MxBkS%2+sGO6%8Jj#
zLed|g$^=9xw23Q%;%-d0f`vV7B#;>~)k9kzQr34- at 065jkPk{xeo%_TCF$<j%SGY`
z^thCZ0M!Df(EF4RW_tBmFXTn at 4+eaP(St<n&+cOQL*ugk)j-miL`EP|vI(Pe8m+z~
zYvDSINL!b54dwn!l>zYTP3<DULJ3qk7+1&*D at tj|69TSfp|XQOng>rbL>6GS@<(P~
z%{C<!RCix68?t4P at Tc9oTr`lOk;xwdH%lYCdtuZM-9AHb2o%+n2eC<T;n)c6xg-(H
zKILmv?kO+nNJ at 2Go+PDBk%RWcB*kK)?5@|fdIAyG(>L1Q=_-e6e9Ar>mJO$O4IO&^
z!}eRVT-&H6y{MPl2MvA7{vc?_DKG<xhdNiUd9V+SVEE(mb#Ra0b|-bP7ZoM={Xuh9
z*~Q~4qxE5MU*>*p!jN!{AH9CphCiHp1Z+S)@RxUP!^@bc(H&8#?3~PJCVaxgWjJH@
zKh<D1YgGtFmWcgFfZ&*sNlm<mPIgF#?}Ls-OY2+~LT${XT?+>O)2Z}(DDK7SWBf)|
z2~emtxMHT5LxOfM=Hu=8pAjO%dx+UzGmScY4|P?WHRm_q>1#MO(zq*@8nw*Ve5dhq
zv)^IVKMZ8$LwkhfnOCn}8S%o~LFd)_)(EG39eu6j>zNIOnbWT~rt#Y-@*_W_^*gJg
zx at U9Jv)7L9)g~-ro#!2owug3ZjK|>a)9BIvD0A-dp>5 at M6Za##^;S`rt+tpmCQE4&
zTN5+3hQRM7R6k>dP|EwLle&4smkj~$VUEzc+CSGA-xm_cN^Lu?&}m$xSrc-}Er2=i
z#^~TbZ6uz+pMlnv&JT7p+b_D{HaOr>S>lM%5B^wB;N>|$00J(r=kk`A8+pQdyUjH*
zbqMFKR9 at WW!6|Ch1y9=79AvP24^uPT%xopb=&+Y?+HY;N>;-IP%w)h;CdFY^tq68a
z(Dp;jf{m8Z3{GuFfWrD=qcs-uUNGy!HJYgQ9f0|{5p30`!&&4G0#zO)L~v#fcq}X?
zyQP4gn6rmGfum#(<_0U3%*Xim5&-jcSEDRhp^0`~qV5_h>@1W4wlg;6xp=xHwrl87
zy>p$)4oqRI6*kudQLiR2+Dk|)Fuqn!td0fdZTZ0zPwv6>7ks%!_m87W^0lGluECBG
z-M?8?*kZD{Wn7Fi;P7bEi(~XHoJ%h>ic)6V(3aazgsw}fhbF6YM*)_^X`;xmt|99y
zEsk2o)RP8-AAM~PfmQGYG)Ya1Tc6=)x2Ro(EWjql0C~tJW(PKv1eGlfYGJ`$>T81b
zpJMK|SQ0l{t(ZF?OYk08^;_JU7hNcaTW#Kj2rB6 at F=IU2nm`Y{&R*W?LD*vqO7jq%
zFf#%0R$xBEEq(%()(>p}7&1hhlsLu&D1tzT)5s!hYRnEV(Q80nw(x`9;HEg1M0Gtx
z6KOKa>k%q6zoI1`p*}P&wfYg7M~kC+AE9wsan3q0j=K<SOmH5l8Z|~-2mKkqufsgc
zL3p%h<z~Qn`A`0htywz*+RVtUgrrCK*X1H0xYHr)2wZE(I-0E^hq?hj<nXC&zo4^e
zA5d3*LA~hvPf!EDpxf2b`qeg-ALe2bu0%J{S|ppu22<u<qAm;}pP8&h#F#%5_$3yu
zi>hBJV*&Y(0^=TqS-{KrfB6Jkt8~buC at Rq_h7vHy+7^1B?!mOKzVe#2$pjY1H!<Lj
zl<L1p+f%<QIYCxo)=$6;g2VESt6M1!0xbFrBN(~GM7w*=oWKGmXaxyw9i`kJqmxju
zCQYW|AES~9gC^9Fp$uYe!)#dFoY)Iv!;}8o_-YsATd0p8qcdTLK1TgqK!-x at CIl{6
zjRS at +zZmjO!C6Q;$9v;zO8hG-m=BP}zv8JMef9ibB9?z8MTfWBnuN%$kxhrZrm6+;
zX5+%M`(8gw)**-;_~wDHg;4zpIWd4-<KZy~fIgk15|R7Lt`~8Li37TM&#$PLx^KBq
zRCab$uX|ci+QB8dO_;<ET2R)8!hPHB4~5%Ub_AkaEu0CTR$dc~>x5R9hwG<XN~+QY
zs&&&X$%=GAYFgKj(@e-$0YP2i{~bIu2s$j>7IrcEOTeSy<P`YG at Ud#t0AIq;cYzqA
zdAB!n5457ed#BW%nqvTj_G`>yAWjooQA;4kaE*)%tsdHX6#j!bNy{|!8D32a^c9SQ
zOa6enCI|RM&_I!K^nU`Y0+3-ahE{(G*a1z*WcedSar7af=04Z8-I%S9Fn*|CB3{GH
zif-CUho|~vgu-v(i3r*A0-?J%KdUVap4P(zSL^owI2K7p1RaC7e*&0<i05Bw4=+-V
ztW!9S7=c>=+$!MO0(U!bxzx0Nbb|W4!1827FeV4g9BD^jPiionjA+IBm{||&KKn#;
zH7fK06j25gT3J++28G;eQD%Qcpeq45T0idd9yoVfv3l>rs|V8mPnvrKymZWj{bTlv
z0si!0IK1yGsghvLr-a+off)o1CV~Od`r-BFtBT>jgpuVFB_z|2-r7^LxANg29;K6c
z)LqrjudMPzR&Inml<-KDPUDydPtLgt*2oJklDcnE`AMzGnP*>W|4uk2OFZO`RNNYi
zbJ}*2VX`sDWeH at 4-p269cP6X5;rLq{Ow0qjgh#;Idr(xf$E7UmZ^O=?$+WWU0EB@~
zox2s<x-JVGJ>!P|_iKfv at Y>Yv-uNt4(OmzmRc_@*)%Y{X9{Zb&s>D{{o&YZJ-*5Wy
zHejtO93R>6h2`^r$EM6g&C1MhwPw|S^Y<34U!RVv_NH at H_~^^Dm(EfoQh?y9RK%u{
zi}!vs65ZsRh|G<x5~IcsG=vI8+zsvGS)fp-$mf_xki%T3yzaT<BX3}yU`?7qCIJ>Z
z310k^wtELl+gJ=P{sV(kTvxG-D<~kaR-*d#e#7psx7&Im`K`NlnCd?qov9%gsrgS(
zq55E{C)pk%l-yn+Rj~Ko8-Z%%4yQ0A3!vY%w_<>>I=94-K(?29rg+LKrhs$<xqver
zjc+4uGky!nLQ))86PAFyzfCJCHw8>__-ERTwu&;~&j<cnW`FO-c-0 at dfixr=CUE*S
z=~I=0hq%~eJf7k}j57n8Q##cPbWX+PQNYhadm>}I2~k#P&F3ne!h-uDHuW>tict3(
zNe2rSYGo3;6;dG{rsXKc{r<vzQLf&}wG&hf=`(DkQ%inF1!8I4tW6+hrHjknCqMwV
z0kN38FL*esr at W><rR&+^4TZ8JKoB=Z9!rz=wfsaK{2lf11td0 at bW*oNN|arNS{L81
zm6?`QKWiT*5J-6v<`X#JgE9DK2`WM;{gxX19i6S-_o|*{$HjjF<KbMij4Q31nPxVE
zVaMf~!%CJR@<#G!^E(|udOJMn<j^?9&3E>l83 at ycOA3Rr<~tc at 213XFT~AB6!I;tf
zB<9{1or2+^-0nT&Ao7xJ=J+q5I5mK4GeG<v1q6H_2#DCnqqaUkJFMY7J{VT|eAH~m
zb@%=`fsDDd#xG9&C9$0X1o9Cp*rt7eb^ItL7=tg5K00A;Cu07$8ijQW*UG%sXo%+B
zv#AMBQAa0k2TU|-DU_^WGY8y}m8v3zh3qEv?o)IkPn+$y#e74(JD!`WNEovAqc%N7
z-QDi#lcev)bGJ0SD$r&QZj{tx)`s at KEqsKXkEYH)MgNn!-Ss}N+V#GK2B!UP*ZYAw
zxf`6t at DTK~5xvZCrT2B^D at TjKGYX$zmSXbLGEIgwD<G%hih|XWsk;C5jQ06fpJ2Xw
z#J at x>_uPbNW9VBRd}90bF74LH#s}24KhbX|WDC3{I-%4Usf`$*$IHni%vza7AP;s7
zKBblppfc7bR#xX#`n%@<k4=3!fV!!P>LEifV9qbcbM?12+<_xu(B}yaS62w3Ev(4Z
zm`z{SiVKnogp+1Br*@=1uzinQD>FuFG8>+)5GvC!&qx#yT`;1>`jQf3WPG?$sST49
zzKyd4qxpB-8g0Z_+_{a~NVOc_T--Q2tF1LN;QJIi%-uH}UD|v{Sm#}*&1F^W;^iL)
zlF|u4y=xuWfsG1B`PZ+i?034}tDxTatD!&RUeF1Q26}Ohy#7@^<OjeY(j-;5u;F>*
zaoDI+wwy9fpZaH27{-}W8w{wr$rfO{+Um;*S)EaZUY78hHf%*?6lT>p`{~mPFioM!
z8nh)%YrfxDHwut+AbgSwFjnm93G?9 at B}6mdg#_M${nozk`=I`TFij}vwQ+C$;RY8A
z!nrXm;{p&TEs8U>p~+#G#ro`J^)Ys8z)Lw)BiG+|LU}aXDRA#cUX)f24>&;~7Gs6T
zJvhbJzMnJv=H$&4>SUJK`XVZ*T&os{!k|SU{`H8+*96z~6m~FXxC;0zMlc2|W4H=j
zQ0W0TZa!%b%Jaq;ut6Pa7XmlT28+F0zg(Qw^=yleK_#&j(81Wq_ATssQ3mh5)vXW`
zpas_tzB%E)Hyr-b84!$MWU3c}$P})wy(#G28Tk8vK|F{}y`<0*m1r<?_i*E<`TlbQ
z^OF7O>y{akE4qW3s{qsZ&B<U|OzITW7^@}J&AZRkm+ggj7GAfzVXo~^|HO;1!mz#r
z8_tKV6MiTGEr3rn;jq;Gu8|#A^s5Fp_k_XWA~i?YjkEFI33t4=<$X2G_I at M~n}^X=
zqX6m0HO~I}K46#WfKIxB9vk<#$b>>Sw|372$aj&N4eF}^E9K;^U`&~2E(p-6BPhst
zKBh-tEx%~h2;ZX&cxy9GT`t)=xPMV@;%pOIZy&#g48m;6_6`F~$E9R4E*08!Hj)%B
zH7?g?B(FlS*aR?it1(9YH>s`)yY$B?s25kLD|H3K${5iB_A5>sYP3+t%Y{89C1iz@
zn{wPvC$bQ88*q)6r-3llYK$GVPeaeOm^cpVp2!8f^keQs8}onRL}oGsezCkf at eeO&
zWtJ99TLLj$H8I?OP*gyRJyIKtQMPY5T<*>({^2_UQ%4AkeqIE|e?AvYTd)kxdl8H!
zs{JR^2HgAQhO16a<aJ~^IUgFSeLYi^fN@~Uuj(<+greysuv=jm7_PdgLJiuI+w>!R
zbYB*&m626|4dx5PM^6rpknP?+E;qdKRGqg^YSjpKG<VVaE>#;|zkE7{mH-3`gRN_4
z#dgd_*xgsMK0D at 1HE8*GFb|nePGC3)*!Bj)1 at a5#1P%F<5uvb1Uh??PpkA71V#C(u
z3VOd2HVF at XFqNk{b;A5cgkG`0#kGF{fd!o~F%Mxu&!GC5G0OS?EMuA2W3W8MuS&~!
zb}VucW+`FJ4FW@<woIOfVBm)iK5IDT;M`8IV%Hj7FU1G?rdluO6V|zo4#TSSJt(}j
z5#$S}l{k<@!Fsh at dPY(O at WV~Bta<nAFX7tNr}GrSMhx!niIu>o=CzQHz$pr703UD5
z7nS0Pst9BlI|As1I;fv?K!kU*ZypEpl+}FaOdY&BkO#s*M)=gr(t1A5X?Vo0dEV15
zs^|!YYqSLzB9{a2YnB0o4TUy=x9){>1kCvf=3%l<D5^Xxu?52k!s31a)XugVnKu>h
z%wKQ5yyL-i!KXLa at rsAl#E}lTs1)7f%1IR%$G^b07JMhJ1qD_i*@5Xu)|WpF_DJ&p
zS5+7-S~@S$RdqN|3W$kaqc478 at vqT!9S>i>oK&Ov&z@;W8ku^`0D2?y+!BDqfaafD
zq79R`^%V=BoBzWlv?H`P|B>JyQ$vrk1>qP~ny4Tv`Bo5- at k0{EP^Q5xc`rvG-bTSE
z-G-|zHcu!&-a55G1^2FVYfNlq1~T2a_P%U6?B=yFtrn7AmtjD9JCX<_?xu<HFZ)$L
zY@)#@;CENZi<1*Di{%AQOot8^v9RG{<6-K;OVoS(II_Ei$?;bId>|X<F)=6EP_JI1
zPHK7I%WI&~%!G^P-9TpG*DiQJ|BQP@&6&w3gHmiII>N)rnqHcBj2$HC3C8Y5+&m^u
zWG<b at zJCPn$g^yMvDSpHq0CiH#y5{g at Z0I}VfuETUqz*R%sXZWRv*sr|LT)o<5D~f
z at Nz>p?Et#`N-)XzXtmGB>D5CqSzt<^9}a(W0D`<&f~Wz_;gH8tMz`EbFb3SR<TQ>v
zA-lyw;dhOP;hBffhE>vs;urF-w6IqtV76&ET|2U}YiQ}^U at Wg2h&nus5xc|0B)g at P
zq;;>8CDjBH^s4OS*o`LVR`opbi?hCgXJ*n%A5;&vnG>8YJ2`fZNurZZa&G-QjgoC*
z!kJ1sLiPLc+yZB9IN*7nRifbk0sO!B%>C@;`p)>a$3*UyIq*Nm13ApIx2D5?-*6<I
z$Son at f9xRzYgp~%df_uXB*XtjNY>Mjfcp%5e}I1~Bx@)fd}{EiLb6WRpZ=YPU*YpK
zu21VmKtc8$w6}%Ycd*9_<=JnYK31r<X!ECIg=!<e{&=j=KjZY_5i;~6o+e{J4Sse<
z$h2F5=T9DTMFhTy;Bx{W4;1JE!k;$ZdASEl${90V+Y(N at +z^k)BcpL^evGH=U|0+D
zlLd!jz96YsO!+DvS2<eSRHD*A>wEK%RTq7c)Nh$b0;pKgtIWZ8g*2<}Gkj6*Hdohn
z0Ou@#qmHyC=tn?zr~W^H`u+`Q?$^w{{}<36SLuc0#IQ^efcHj at V7Tfmh69Ovd?+h0
zp45F{y}-(1&x&rqu5#hoq{&K3`O#ld{cGSZDtR4nz~4;Mhe;~pxheyKlJ;QjNWyHS
zdwTQ0%u1_#1?^f1*zh{j{vE<nc%y=njiAm9;hzevfyx*``Rew6S-eX- at H%=AtHRM;
zR5Q{2J_c_omEup1`SI3X$7ppUgYjU<0J%|2_ at lQ(BiS|hvd*PHRY{t-!bg{NaL7PB
z{v1<GcpYcUSL2wCIqcCW?8;Xmv at w2~Rgvnm+%J_z{WXHxszGlRoYRK`=`?le#aIvV
z8a#4d9{os~Z7f!wcQj0W!`oF_CFYQxv6BEUBvn3&M<jH9jmlB&@1K5f4e|b#Ii!^}
zcF9ej#N%1h$!-GomwBv-a|Z<<A6;fd+=(+lqr{@9iQZ-2g)&l<{<uMZSy%3-4_C(q
z%)`MDiRKP??;ntrhYBA=pD=DTZ1T59*CcS$5#s$4LP?fNQ$BV&m~bN(HAWaB>t6P!
z at OT|`sAx7tOFI~cg2Ea{3v1f+OZakQDsB0TO at JK4BkME~E6tV7bY4Rcpt4+Rn$hEJ
zW!0dz&THbh0KoZwGRnJzB6K1?YEpipgM at 2~ujYm<Zz;ii95u*6Wv;hRW^{ils2~n2
zBH7Lr=>hF1GnRTnnH?^&|LpRz1H-bNSGDPYJ+S~EOH`wnJ?w$EB}%BxuTgt-3&rI^
z+Oz$c!g^_|7qUPnu;9I8O@~8BcH24%Bf5rUKWU<&=2Sq;Eu?j`lgKRsw2_hZu;QtL
z^+zl7$bu%Y)a`Zh0fd+ZS>a7U9$llep5$B%PoUme0XItI$zMepv$e8qzkU at C-9F`E
zZb~HP$&eRvijCP{g|`6Fr!>_x4zM;;$q2C&^2KSK)t3)6^{aHj3`e!F)W<s*5KW$f
zb*2iDHt3i&4%7-MX$4K4+l&xERyUhFKY&ezSMlI39K6nZH>dhVY28>DHr0Hc{G(%O
zke!Zs^>6-+RUXZ}1|%Bs8hV_8pMV(i`ZpT(Cm`hQd0bsLV|HpBr%(Fx_w&9Al at vh>
z%robtFaYLjmHrUhy;jnqj2 at bFAn{I+*oht2d1#`CWuubufgCW)()F^>CO;uqyHXj;
zkNeTrs)uC~eyPZJ4K0S;J7}U-&=`)aT^oj=k|6UY>UJ8#!`i%(BnW3V`ckK9410Bb
zPk)?wDeJsnF?Mw)dU{x4><+L at zqvSPu#`?x7lBFJYb#2PbgCh{#}<P(H-=p{`E=A_
zuE7}otI&c|>@;3p7I+jc+by&hI|*~Z0x-fZP?P9c+b?<$5H1(PBWXH=r#_OLgK at zp
z0G}=R9Id^1d-pc)7*=H@&T_%zTG9q%f at ROKI4ys3!sW*O9d;5L5N3wf3RsmY7 at pq0
z5-y9bfI<<UwqQif3Ssk|UG<KuC0Kh+FjHDL>pjPU7A9fWN|V+}BKGYv-|S;RtsEH(
z)m_hSx)C_2C2hVRy%?})4O5y3oV;Kbtpu$={wo_nImXp^zHv=h`T{!>b5$6|9j!$5
zP$9hq(`IOLBrdQ}VFRq#Cm4ZrB%{-ftF#%#Li)izrDE#*ozC~6ae7J83TdUKlZ}MG
zLTb-d_4ds)yysfhI~-Pg|Ch{xtmA1ydRt at K6nSyqxb${o`d8s2H%i%khI*0Fy<I-d
zVTF*amSBB`K~G9+!6>Eer)*G$gZj8 at e3qVg+#V<vSVIk^Q54N8#^bAfhI6KIi+(QI
zT~Rv^|Lb$H=!MS2?&Q+WdWErMfqMxwnU8ryI%6IZXkE at OP82D|JSFuQZLnbcDNf_-
zYk^;ZaDKe7EKbZce(*&^>`mM;%>%1ZB}<VcK4$sm&8*tIy=UfoDmF2-_p~y=f4OYL
zdfWG%9PEg3euD&bhy=WY97X8e{A7e9adB&}YX->Uj37)#`j-3L-p8$hcze`08cU<B
ze+ at i`<9>!smF~I!9*_qPdhFQowEh!YQv>bR$kR1}(anPG!*CzpUUy<5gK?hDoXh3D
zUR*tNNkbW|7!%Z6^MuP!tdPPJmlzk|X6xg;XX0%gb{M^R!`#-9B0u_;|BSAJyxK>&
zF>drEH6)9k*tt+MxCrHJ4a}g&y>tfc|6I(}PsM5qa=wU&3`RU)d}prak0d@~IS{T{
zVpQtG3(_^R;p;&|ttPZ1je!-ZjS39`P-tRKFKwk`pyq0_GvWogdDalY2KXur;>gSL
zD_00R?9l1tIz%b~sB>KoCfQC~cB=oJVm)834cG*5KNE9^shP)J73s at WKex74+s(y>
z<Lx>~r5l>cpcfm at X_k<(6+(kHB*=VaNqS6eSaU@!%2Ck5uZGa>`L01y#aUoA%tns*
z=b&q1>cCRJ6Yvv}zR0 at gwrm@MfAC3xn>I4pLLBLg1m=5iiniFbpx2UvX=;bLSVa%l
zYKCquyM0FQkfh!XU<x5J`e+oD)B3{zeRfC=Kn at Qp2@zoCV;wUaLeALYsN}4=yrzD_
zoG(;<?RfUB2t=hr#>Ev9uExnAV?uveoD1O!G7xVvuq9{9YxF#jp7A!lb6g4GV@|&T
zq_-e^{%`sbn7;UJdWX29goinOCP=ULBs~5{0iUWKzRlnscY>G#Gi)mZ8T^PT|1-Vj
zZTf)rS>_&K*MHwTG!UsFB(#vLpxf=?y8+{5bGM6fazL-2rr%e4wITn>Un(tvnG3Rz
zuy)31X3%|8g;m!Y4O&15jX1mhDF}}T06hK)VDr5gudnubJw-Oi-Pnx<M}sl%WUft2
zjkOJ^h;>CW*UCYMAoWMD9lCa~QX8~S{;g!kXeAmQvL5Cr3f19PEzg^Q*m7h={{x8g
zTOglQ77fIja)S18K9Y?87m$C#sQDi-L}M at t7$)UFj47ht)wBkR55~#r{{^H?_dkG4
zdke(YL`Zlct^mk93Ge@}B5eo%2aKRG7^?dro&$0Xv05EK-zUD?I|RmOvgGFf1FZK=
ztD62VFfde+Z+pgjNpXV{PrIN8!vKa)BTE1yVN67}oEXD=I>h{GV|XKF;^+%}(fbw4
z`E}|w*W$BMMXrw{M_A$*y9B^hgXxq6YUpWVXWz<1QaxolOl-ypCcp`AviJ?~i=)8p
z7|3Bs7pS<;n~J9cys)&m8Ivpw0-x^zg<j_5C@*srNIS~H%u1y!#&qv|CNrp`BvrCN
zi5>nM$zTUg+TQ%zBA1|Tw$_N&Dz_9_J|D0!S)(kB`L=d_3ntlh$kYP&J5LC|5WSel
zfX1-r?{#9AJs9OD%>=$a)qZ*RCS?7i(mjiH!t$|A82C<TKR5lc!6 at UlGWNE`xTpt3
zLEi*p&8MbT1RVuT>AB(15UV-01>yZG+BTwzssJe;Uf|l|A{3EZ5^1WOawg+XgmbYR
z;n~$8){#3Aj}J4ihI_3<h^WT1R>sUhS at v_pao_u0FV+^eV$M1)Ms}OTsve9HMQJRQ
z7i57WmRxj`QX5gpHF=y?uQx<xpQT%`PAH6xJcf7yE)hf!qI^oqhf7OhJ?2 at dH3>%V
z)i6IMubb#&+J_P=5WX>6A6C)h#FW at UMUhYigVg_Aur@<=5wjS%d+OJ}Pqx(U at bZ||
zCkVc0l{R$zv;4p(4qPlsb(<?9dvd&;X23%St_b?oO9BQVE2fk>46CXpj+4-Gyqso$
zmfTj`J=rz+3f$NF at 1fB%@5)y>?>x??2FEj;bB4oWIS&%QTGte%KFB|qVk4{7JMMk#
zE#X?KGBL40IWn%)WyH$OJL at Z@?U_#VO}}ykq0=}OAm2iD(JtNNoE8*bgV;B#w^zN&
zt;D;D%bu3ZL&zVJYMy&2SoyO!+b9`_Vej?2Gcbb|E#Y&WRcnV)!@~xqvrf;5 at v+?I
z^|2;Myn~rDtwyt!+Q?zdu}lMNF<D9dm&2HZvOMu2YM8^=NPm5j+Q4OG(nr3ee&#ZQ
z(7UZM2PkJ-M*B2__3O?hI&;k`N9+`=p_z5_6AMFWA}yDDw|#GWz%FduyB?bJhKCY%
zP$b3UF{VzCGd+=J<@RB=a-N>iU%tcS^0loA7CiijTEt^a^HWH&+Cs9Bjhu_oy1{)t
z>zEwbmchoJHBqe^u2&0U5!Gsbtvecjutx!0>RTRT7X9_7l#$0c>PN8Hn-H-dJ<e-J
z*+TCc0XtUuAmu=M at RG-c-`f~3hs3>_TmAZYm9TVl27qB%O5GXHm`H#85Dw2I=f{Ty
zF0s=eWK6F$Id)=zzj9^Cylc3E*!%|>l#I`Cq3xsI<1;)geaqns1gezJP^rPp8N0~2
zUx2s6lO1 at gqkg>>u>7wa@*P4r-i2H?&;QDd3ckYe%nSl0uQ!Z`BEZ)9PL}37Er#A_
zZ_<d(X%gTW*F5f8%Lb;mPQdo%Uzt()Dw>&J{;GaV2+2zZ{v)sI(?R5P_)KSnLEy<M
z1bGqOzgkjNiWrV#)~%qB`x9L|Pp2dK at R&(rJ6dq&1lQj{m|EClbwVj65cx5FZT9Vk
z at p0Zx0#z7hvlI_wEk)?8irR+p)K7MdP_+nNys{Mq*qc~OZNpd<_Ci;KrEtnp+jN$>
z=G-gZpyobj5?`5HF85adoPS&B+IXY)S>4AlFKAVli3wUb4PHnCG^Rb+7Jr-#S_(H~
zSXE9Fjw%+de7?Zs0(+z$l$WA%(pA{oiq^q0>q7hEl=EywIk{$FK4)$MVB9N{xAI3@
z#2R+8g*aaK&YbkTWCat%Tht5tH+UBc*gXCfcThRz86Koxzl7~6h?1=p#fKF%CeQ#Z
z)|njumi-lvS_g&;N1A{^g~t^R^YAs-`u{^sabV!@ByJhKl$PK$t~ciMcx~nOU`#0t
z at t@ASZ6ci~x~ZZt4)K14EV0RlHk&cwaJfn`UXw;`c3^lc8hi<aau36|-abEb&$LS!
zes1atc)$2e=YB5!n6wklBy)jqve3z;S=ArMd*_OOViSvYV%f2bKXwm3AIm%Upzw=W
zN- at 6o(Wz at +3B)fUZKxG6bmrSiI|U36er(!<<fgD;Su4J`UH!1+M6CKjGId?R2v_sR
zD1TnkCL}O&F50J*x{QUfbOOiqd at -V`Lb$4`o%E;^8cw7R!8v_rerMH-5q*5u(EhDs
zbH=Q$iTTHuuj<)FU+;v9y4Ujw+$#%_p%q{6Y#zL}=SNS at HfRUo)uyi3qR3#3<)Yq1
z8-}{fQ*tbY$5tZivf9E1vf}ewKYH?G0?PYbS~s#Ve_k~0?A9kgI$vC7m0W;XIqL{f
zwho)H=$3bx<cC}uqX{ve3AGE_44ZqRcix{~o8$IT&;z+Arx at M_fm@|!>%?NA>+tqL
zgM=oWB5&OEo3bv1(WqWu{j6)qYKyX!!0RR242h!pMZ&l6WncA>*HK|9Jv*o_rY=uv
z%+yAZRq&+~=1JJC5Dv?_hB7_nWsa+ZX+Y>?_8I<=z~i{lw6*cUKrq6gVC0g*9<W%H
z``jL^FmxaY)JQNKz|Lt-D~0Q-8f5bERmh8t8MO<6Xx*{5dGNa!{hLf&6D^pY at mQb?
zW`c~U@!`?PK103`D$emZME40eSPIXQ=+IEx{PAHWmGexj*luhpT;Al%;eH?7{m$wX
zHl-bgn?oal^v)6Po>~8R>aO<L at SI(`Rz9i&`PMv5=%nkOol*6L7Vv6#<t6qk_#VEl
z9 at O4OjE?L+)h;Ot;lcvRMO{O7@`NF_yDLi85X|Hrj0r`P5h7t|xxcg>2;RR*mNoqf
z3TBhciI$^_O8LgI=UEwrT(1>bYD3hm{82pxlen&(*$BeO6}Wc3DSS38e5A_6lvK2f
z-h}zVFhh at t4Z}LcZ9{MMBKQsZIO{NX<0MTEr|<H2Q2D at m6yX|)+Br{>;LU-Ap}7W#
zq;Rb+x4iXnQi6(NIy0hZK2*Fj!@=DrvI((J#v=mq7|vDQ0<J%B=Zi%oC4_NYWjs~p
z%vdk+A$NPbs&61T;O(cVdO#T)zgQN@#jKQEF;`V9oT~E2Y?GT1E8sc;mjmMH=C~%|
zR7&Q;kkUdZjSIs$<orbZaegfjla at mX^{^MTLga08=4}1@`iN4Ww%72XuktQ7iHrgG
zb~or at U_EA2eYvDCMu^$e{XyMvVR#4hu3&(<^v+UU4l6H7hLV&mGM-9 at Ml0E>B*I5p
zw{uQ@?Fz<H9gmgAXV0kU&cPD5Q}0Y<B*rbl(bhZmSJti4%1903NZup>Cfho6S at E=_
zLyNU`xpwKus_LQG9=7Iw0Jep!LD(+I`->N+PNOf?t)wq*FxSqed3V4Os(T`1=^Sa@
zx)^dxi}hHWh-I^qM%$!5*E=~Ut6uPBakS`<&5?!3J0Pdq*Nn}Z_bu*vW_?<Qx<roG
z3X?gtcV=GOD(opKqO?MW2im;b<_qeGkTFwT=jZ at hW-nk2{{)NA0mYBCka{nlT48N&
zA?$$~6T9<!+V{CT2Y(*^X*zwe&=&jQ(AILt at wVLQ_B)w|^Cp`6kAr7B1xTCq+H|Ih
zLil7i!c;kcxOFC)VM&8+jDsKj-`%3#{*Jj{x<S9>jrPkYTv+I8)&x~%(PGf;XJH`@
zE0JulF2hQ0IJ~tqrq&NBO9o=#4ilTKZ5h|R`>$<5U%`rx3%>W!h9C2LY!MsE#P-n9
zxY8Om$BvKCl{@EgS9$t!rIlQSES$>*%<s4ab#~^KA1V0^4_yYbS+})RqH_f`9~*$4
z^0H5dBLxMeBEn?~b0B<h&InqH8jI=q#%O)GqyXonP5qt{J}<9%p0q;9>HF~-w3g*n
zhcIIJw#Wrf`8Kbe at ZT3n^_CYWXJWQfx`UZXVHkIVm%OYv{i|^GQe6T)##w5WJRfs}
zG|+WP*Ne<a>a*wEk7Z=r=CDd%9S?OZ{M6CF1T#j-ow2TlEBfhC+M%`w)kL=KIn<FB
z!pyc^Yfg90qBOh><QrCUMfDdO8U&0L_$#;LGQg~azi>MoCd?XNoZTd#XE&9hf4$#*
z-kASNy&%xJbV_#9R&?CV>6_oZ(YGVpwhaxuIAT@$+u`U|AS>hr$TinP4`*zPKb&5=
z;&9fWgS_ne2Zxtt>zL?&I~qScc6RXIVwbu0fnFi5frr(c|NhYUVN7ZZmUxRnJ7cFF
zSA74guuGYyg;xjL{@h|W1<O7-hiRXYTny%G at rxL>Y0m4~jhOccVrO6jgt6ly-`yGf
zbyx}hbyqyB=Og_6cN({b at i}EF+9}w9<R$}yk3dtsmQlJwJ{Ut+^)`gLS?P;J=}Z&B
zzvE`ZJfvxtn&a}*-5~>Eas**Mo0lWAKsfuoM`<On*Ic^q4rSYhqlDVo1dp#5#W=Sx
zFJ->UE&;WT<NtrGy?H<r*V at 2+CS<}S0ZCW`f`pwYN at P(~kgx~TvZIIyh^&gB5U5KC
zC?HZ1QQ{Hn)}j at w)h;4kv|_crsI)E>tG2W*wNk9D8%R;~drl@=Z|}YDd%y4f{y6!a
z{XA!#=VWHicrfIFj5^w%nf#GRl$3v9X;zy^FsD6wN=?RrWm#=p!R53AYU20v@&n})
zte$sp91PYCyUQ;BxwgnplZDo+E;bu`BqPO+ez~8jZIG+uCW at bGY`Uvcf}Vt9fl-MI
z;%W9+8&$4(voie3R)&!*V#W?fLBZdOtS at EmQIgBhfu(yQ{l-tW`?zMt_yc8oruoSy
zOFsU`44(r9duI48o-F+Ms~Nrr7VL at kE1GPSHH@sut}8l=!Kv2AI*&+>b;{#GdyS4`
z3a}DQ#yjLavkdy`<6`B$U(5ZTRmW+Vf=#R^8yM18FOHSBeJ}Sb{{RwQ0>6ZizP=9-
zYJWq(XXC8ut54ErHs at s+Lr$^mnbXpzv4|EmJR@%%Bfs`H2<`aWrib(m?LK`VuW36+
z|Mx0K_xEa|CRPfPxT~FNvo at uNE0W~1g4^H7<=?Rsa4)>IF3Wb&n|uj9NC#*On0>>C
zgEZaKsc+hzHAfZP%pqGo*eB$`=vMq`geIxavFDb>%^q<tvLL;BgXzed?2(rWYjs<;
zRj&dToz+Ajsigf4BpVowGS!-z9r9;EqV&0r^SZWv5-Ybb`fgAaEOkF7+-^wTKn<w0
zAIE06bJNQ+G|l9E^*@wSxwkZa+H|MBYj<vhZ_if*2UPAbeD>$3eSzXAPJJ(26YEJ~
zv2th$cPP;BNnN<2_-yUGuqp$&?ZG&zv^-pal`gc%Z<^Ae at 7m}aAqy^vsB(kd!DkbU
zsDQ>IwC&dF!~2HU1`V!gyGN?4YvTl`KDiT=3~BIs7uuYOCNBa&590kUv=g-mpL3x-
zqR8PGEzb?>XCHjlO!WJPXQ|YJN9D{@CcV>EYd<k?>z|<o-AXEd$)Ir`Pf3y6)roPi
z at MVcnVzvD`QrxqUsZnw5INX&E46KPo{kxAaVcJ#5i5z8dYxREJL%o>d!jLn2 at nG-K
z)9k~(-}kTHrGMzxfP~?buC$bUL*Vcm?scUdsKr>|Mu%yX<j53%P~A+L`@)}Ip4>@v
zOY-rEzIvrJpi0T;?d}29O6nCmpV*I_o7_p>I(X?{r8Ih(mR8a)?OdfXu|H+wbN-5>
zQ3_ru%;1#-La-+<2{xD;a2^r|y|i<jer78U>Y{bNo5KCkFN`$6V#q;ncL})o!mcz>
zpBr+xo&S71tWqY#FZJxFUj>-I4Ci`T6r-Ys^)YCbBJTOxFD0W^%!+%mwy}MlJ8e!;
zL%2*vM^SU|7c%-?j%hnyG#Yl!rmOL~(X<W6v<1IAnr^o8uPu0<l(nAWZWc+uC!I#l
zW^Sm#v&Yb{arXRz-yK6|SVX~fP=3k+_8jYn9LPhUH8<{rV5tXfMRD5wJZO8$8Y;+H
zcvK?oa%nR#4M-evm{XQYo4$Qpj*G_964SvaeTDfS44D);&7WTc>eH5ac*|JYMw#O%
z>j+3>WSw?H4xJW>QdK at 93rG~XFYX>R326SbuVfoyAlwmZ>ACG{TD5wk(kM&J<C1@!
zR)h at 69ux)_mx}t5 at zb&N$dK?QaVrZTy31(t-nq6Mk(Mes5hEICgRTwg(}g=XN|0cV
z-cQ#{oP{oJt8_x=pTq~o(GvfNH}(bpJ%kkKB_${N4zw$c8bmv+u3r9k at pL)N|4%t2
zzRcm3vPC4^=-aao**H5mf*)A<oT|uSrffW~Vqv<jVR4 at BLEC&cJld0X5r-8-MDU-i
zem^)Yju8ZI`zQgYd(sxdoXH<=by1`j=G;- at 3Qt-R3PGB_5y)O`$zCH>rOb$}2m8Xe
z{eDL|FsC9yQmQl_9kb#2WkrPS*ePT`kk=Rf;%Xn!#_+cufSi8tq-P1Pu6x!@o^udj
zJXKCxa)3#4x{n*T#pFhN=y=+X;+Y=4?b>%1uk at l_IiG&s{;n7OrvbGZ at 0vh6Qp@l^
zCeTufgL@~?5!5a$pGX&Le7ZQw>wJVRXCXt>d{V-VwLoj@%@d7O+d%*OYLG92E$hN=
zFWB}D@};odZA-s18^V#QZI)g?yv*-Aq6_1?9zopvvpPF9=1aqh+|A2=kX$4ys*(}b
zr#dX~jdffcDR)=BCz2Fp9ttYx#ve*JBQ<(2AMHZ-Yn}%bFTS<5KBqSXGzJ-H4DNp<
zk)#Sgl~pWfah_b1>NB#&VmuOj;dnTx{(W!L{_(M<i}MsxHH0VC#3)K54$Ze{WCYgd
z3!LlMZ!zgIRbKZUj|{qOl=orx;%IG`?pK<3C<v}n)*9H#i at QcC@B20~B*OKuYKU+=
zU8>%+&{=YRkWYjmLKSusAqI&GY6uzLpFyWr-R&kjj6pu=;DRu4lXzXGwI_Ui(Nt+0
zL+L*1*QBHbq3IG;vF>qfDS36`=<w=YKWy$e)zE08p~-{O&=J>K(!+C;HpFC>#)lU9
zR4=4yEe930?y$=LOvy~;54j)6RdR*RN~Z3_(_l3}R#dL2R{UTqJ)M^6S at Tu;owDKe
zL+<3PFW+5!SM>&l9*|XKTxlBeIMpQL+Bb<rhGV%~)!ooS?VFZ{d7|oLdEqhTL7J){
zl3*aKV%`;tArGdb<4MiD at Yj>tXJwXY)A{PuSdm?5+FBZ|tp33^{dA=Hkh at D|AQL9#
z%jM0PosnCU4YsNK)UceoM>Z9qpCn8EBsCVU-7LxaV4lEs5wzOZ>3*u%ynrw<*SubW
zPFaIuKw2uU`dRbnF&mL$fp0l#&k0qOX$Pr+8$_x*i4Q`m!dyP!poUo8MwMxJh7g`V
znO0L-_{L<~gQHo8MN?=Ov)V!DkK5+=L`tg;wrqSqJaFst9ITu|@8m}0o<{h$DfD^D
z4S()WkEN3FZ~k;FxTXfsW5vn7Vrqhm&s3zg8gd|C|H3N*=+#sr=1!$EsCDhxQ)z3;
zX|-UM$Zs(D!eimD@%&QqxvovKxGq{LbSuO4%iK)$HRHDfX*a4KpAMvDko-{~Ew^<0
zIQCJG<lLYA*TZAV*2f~X_Bq{`g(oZM84#sbLEAw!-cf)wiFi;!yMSv{5IqtwIf(Y9
z7+e%YPaK;_9>NT$8uCzA+E_WaIig4lk#u?bg at +IJ+1G`)1 at RxS*~^PE?<BTg41#>Z
z{}E+NuFo!eDMZ<<+`m1aJxzGS>KIYK&yYilM;}zY!ZKf|q#M>N`Af5k){)y7!xP}z
z8_b5SXkLZ`LugBCDNYKZ$5UHzZ3sPz8}UZ|XZYO^x+gYaNia%LH^v~9bjX2x3XWXA
zKDqk59(0|ACB+qUBVjZM?P5pdkAv;oEicjVZ8 at 3{RlqE_8eu?se(jq>7fx+Hafig8
zmsydFFNe}oGzm+*(9Ewl!c>_*$dQLgi97l0#&k*P<nVc^w=~u2H7VBlZz at oK6I{z1
zmG%YO3cB*$c6fr&ob9_?);$@)K&1u^^kQT*hzGewckMsE%ZD-4th6Vm&Xcfl#g)18
z5PsgcVBWI6JyFb=*()E)Gd29Y2(5zF%QRb_$<K?u_5N19I|bbN<1!8A>fPzOa2NT0
zy*riEtL50UZ4J*Pw!tn=>;4i{!VA#GNLA7T=Eq-kEzJ3``sO;&$kvj#nDoM?E;S>K
zwhb1_$KVOIkLB*H$Ijuj!xVBs{b|U7ye-nOjeKe{JUwY5%+Eh673!1F3kSs>Drt^)
z?Z%yP0WrJJ{=VXl;%<V1DV+(|=!$Sq7?SbkaQcev#Oav at iAwaoO<;#+-5`fNPgOo$
zU_3CbBD at dRN6@3J6WkCp0>Xp=Yi^usxW#a?`t#9%OHTqm89^_n6T}E)3WcFVC&XHU
z^|F!<)T9WjV^PvXZh9%VGHh6!?=uio5i(HGlfdg=yQ?ixj0|8`AO5DoXuh^oAi22E
z#W~5}B!98SkW at W(?A!G`U+(%z)e7?+VdhPT_lnH at n?$nZSYu-JQ^ynA0F9xbBoRHz
zFQ7 at 2rdm7QZD^DkSf48bKaGjxqQ>8#>&Fuh!yQv9^XC>hJjxd_7w?G17h8!O#y5$i
zKkc}6(>cK(X}BV(I^$V(mW6^_WF6Q+HrVQV2|sh>^A7i*TG;}_REL3;y-N8B=#Q_^
z0{KG_F7WMo-&7<C-%%Opn~VhEZ&prmX+~bp!?;zW7}0w at cN2D{YF2dY8PK$+sb(`1
zt~z$@8z{R|2CGmR>BBe7749m<Q6rN*$DV`sDGl>s3?`ISDK7P`4O(tbCWk_#=D?N9
z*W2;Ya<E%@n?9PNbT`R)-cxU-<Oq$FG#Fzrl#o1oWCR20AZ$-=dHD_hB$k(p-b&H<
ziW!bqd}8)DiE{VSkk;7xi!t(w9iIs;e37JZ6FFX-k&;Kc?c40D$R|v7S2H>mk-}9R
zUDw5^I$}_D$7BoV?$>=>Gx^~XixC38i?kw48|1ir6NxLAsxd<SpG2F7wJ}mC16Ayp
zY~@;9frZmRaZiXfdb=LannthS)O~<2O{2$K?Dy4HPz{ZsYnN`8MY?p<bi54%(snvM
z$F%CY{U`IqjB|VihZ<p-V^I4YuA5Ff(YL(Z%l^P0PNy>|4{SMucG8r!4W9-biyTlN
z?XaP`>Q_iOUJ41LD7Q)xr|OpdCz?vB<R_RL<gP*Sdi{F0Dn>Lh9294A_R}v<6}nmG
zU6DQ97$d6g(A6E4@}|ce=1*N#yHQcBu2=BYmz3_)IQn)uG0oj}b*h8tjyd!|eU!W0
zK+2B(lQZZ!MjKYWIC?)Y7kj)$OQsXsi=*2~;R6Ok4o at OtGJE!$<CU)yH7G{Zv24QQ
zxSGIw#$0KquQ_8vUaOv`XnRCDh2v7VPQMf^!0TV59XZF=;X|*{-Ws*ADpopY5~}I{
zgbWzDGk at zZ!4NHrh&In%+Bw{qYe=5hi`x=-?^eA6g<V3NNL&5jS{cBc+6rppUV+1Q
zw>j^q@?G7Nnn)eJP|xz+Pme_HjErv^L)|U)=a<qWYn4r|etj9Wk?~dYDD?&sPXiG(
z7oMM9Q72VzP$C$acjcKdHC%SqYt|@{g*j+<12NK`-}Y>>XhWv;?cSbse;5hkweu+9
z_s`E~eaT~9#2+fIh>Y|=yK<br*a<U4GtzA8u0Z2F`PJRGcak_uGEqT6x1HdQ8ro|u
ztTM1XcA1FKRdqcp@$ln4n{aP5ou`?|4H{r#f_p@{y}lJl at Q0-m-OhjJLhh2)6_FF=
zpQ&3kvvVIMc*`G6^!6(GZqV?I;`q&R31GiSj!23=R{x#SBmAQdZarpn>4c|VD0}u*
zHzd-|!b7oAm>RJ#HKf%YQ at AF#pLfBqmsaeUVk{*G?UMNvT}|eceU-4<8>zc(R=HP=
z;>E2Dyoc|_fRbLZ7BjK5t>(h_o at a*XczRn(+>>j$-l#19uYvM7Y{((Ng7j88QX?`O
z&5KmWNqu8Qb0$f4se;H%gRl+}f4WOZ%_Y}x#o}862eQ1(TY~Z~-HJ&s4SB01ZC(0!
z)yi0T(nJ!TE(ut<w{u=BS}2c~Y7*voRpk7+SQl6X1q2NUtI}zsVC@%lco9UN6cCU*
zC^wTP&_*kpF71g)SG70u=60QKn%ic_*A+Am6$D%yWm}&}1WT8zLM|JQohcWoVOzi4
zinM*8rSAI?i**Vwm%M20o-m3|S{ryTX{$za at 2olO0=C6b>h3s1zKQ|ep9E?hhrIQe
z)n+aTZ>OB{_u7ngZsW*^Qkx7HL(*!prcvBLi)_O!XJbWWA{fsm{!D{diOAHcE3+|q
zF=aq|mxOPu<oLERkXI$w#O?WW^2TLdNKAT<W|Xw|LC8=H`4&i+IpY=m^X=UYTqV8y
zL7*Vf9QOZODc`=yepf-0l988m#3pKmV;i2ujxBJ3{r at K}=YM~+#ei-@(kWqAwe?AP
zE-3|9tLrUc-!ZdDu4-)N+g={z+Mbgb**+b~*L at or%&D=bT70#P<wDpZXq<F=gd~9l
zc#zdssEw7DRC~FrwuzV$ZMN(DCbCkMyPFzt&{Drx<XahKd<u5wX^tU>BeSGC$=?9|
zl|v3Ix7xq^Ter8of8wC*lncLtY!!EOM{zWE0;%=!h0MZ4FL%u?x5M>`iSEPNL{ye}
zI8<UWs1cqT8~L`cmOpx=eq&|<_7^*?S0$x%f|k4#RQE>3A=q`jJIL>{sl73@;E>{O
zx0gf(@ua?pBWWa?8ls&`xDfuJ-W=lAk^7_zrP4MJl)T at oS~?zECeWib<bLVh#D&uN
zZRMQ$ZXE>@hzI40rjc^nrV7~nB;+9%QP(J4ex{4-7Bcg-34(>@V&s6?tpkyp6I8f%
zn38rL747_O<&Da)z-^hye3y>T*gepiN#xUh>d>PUAGS4`TM3$7s_uA7bv4C4{Ah)c
zJSLIs(y>3_+Z+S0_&!a2VvfP?RU#B774279C><W8_XJhl`ee;OR7He(<qBq>L-=f!
zcF;MzvVw2gZM5}he?n8wmqtzGG(6Q0kaou)9XDHiquxBnz<Kq*<n!@Bl;&kdDXA`+
z8l9Az*NkT+1W7LrISp5{3F5ArTpx(+2 at Wt<I_z^K`=N>m-<@mxI-6E7YBPp*GS{8N
zY7mLpIOH~GRyX6=P^IKQ2qO2-M3y9dey`HOtr at wkN>?mdrs-Dl8)(KjCqM4->`sOz
zAEJHqE#njx$B4<pzyHXNNmD->a#7b4A!g^6E!1V?RZ_|bRB?=?WC>$X63z%4ss>GT
z1@;UY>1yY~{n+$yjCnqj(M9f9lJ{h8Fb<t@;o=(sjY=k7v=5~rPK{<*p4quBd3Nq7
z7l%%zb+~exB_p*r<iHhRs^=L_<%0(;Q<v at Dp=1IoU1d)$Uwdrg99*MI6EZt at t}abj
zZh%(lPBK(iK9fQ^>oXkcLG+C)ySmIBI^)&zs4V#iM2-yY6kmIy8qaX-Cz`$ky4N4A
zAB at r%>AzZdZ>VAR()c>qNVhx<8g8@^zG%V;dwPPE{P5hP+(8};K#!OHpY;S+rJL9K
z3!J_VSi?54?(e`PWWDkZBWS)j<nWeXW^bI0=%#vO0CWA#p5UQ<(^V_az?x^QM0IbI
zax||L^ya at WXky`iDCpAvn}U=mA&H^D at Ll~8?`7VakXH&lR^jq8Amv4&4!@DFE31~g
zQ$)Uq0o!8dKt3zP^*47eR^|o8l*BQ77zb27<MhqCFL(5j&o+=p!eB>|ySSlN`e0Q|
zrs at -Nhc!u9Fq3eJu)u1e%ltM!p$6tYSZsuUd`JG%2o$}${`KGOy+`qf(|!BMBh^R1
zkT>sZ>;qT+k-Xvg3fn<pcw2>$?wJZZrPO-f3g&j-8t(V++OHF8w{WBP?Ch$y@)nh4
zzxc-Rh9|>T9}d7m>X61st6Fu9Q>gCWVk9rz at bGEnU>@&fW}B5#m`Z&0;tfw$_&oSi
zxVfBfnp0R4JTY+fCtHra$9~B&ZJjEKkxNRC at FSZ7xYgMxdSDt#8;%E+&Cu(q(6$^!
zI-{L|U&0EW*%Q^Uo_(R1d}$5aCezMSpN{m)c_KMCNS at mE?RJv)oxU4bYv<2D)g55e
zd2xlYZAHhG+ at 4SWcxO)F%1HAgTxH@>dgXj>X34=pVc%(7o=lH%s~K{5aV|NzWR#v*
z8<u53p at vudqY7^>Yd at DvFQ)h}UlGMoDYPB`<!dpxh&cZW-IPKHX>_5cyV)4Ww%D&+
z_??ZRyJ!@zE;C$Fu7GjiI^_KQ?!O*-ByZ`kH7sZHJ8kTot2weI4rq?Lafev|HRSx_
z`=7-BK`^Ahy~9im{wZ7R*Xd3>yzw+hU2E-MSd{88EXGN5XbVF#b>)zA9}h2?Lr;_}
zt;p*WXLg<WLUEpqDN-)^cuyZbK8LoUitrC}Xo-hS%;b+pJUw=^-ke-0$R|;3jES-q
zxJ_M7^fCSW^5~OKkM76PR63P<3zw(TlTxDW5_Q*D<leO1I2=<Z@=Q*8-&cdi@(@mu
zYcLg at Oru?-VacCOunngcSd}9ev8(7=Mvp!%xy*sTCE1>Hio(Pc!=}Neb7_xxXOEDV
zjLDlgi&M>;N-8~(+Dhr(u-+5pH!Gd at 1yu!+aJAyXlc-FF_J?s4)iG#7lqS$6j}g{i
zWSCE`27a#ADX7OjCx1*otz}%)q5isiDtPBy+S&>{`!}+gktaOK`$22O5O{7bZBCw9
znuvSn(i1h|TQ8>ns{8+l9+K6cBQJ#CnM<Al`*PW!y)Nfof93&5MRJC?gAmt&#0{wS
zXI8*e3bR*Ab!WYOt8~|K;~>8wdyvu{6_Zhw9%)w)s9q}#R3}-RhHtEJCwcZ)R4E!n
z3+)3My{4M$3W;18STm1!`ZHh5xidGQ@^kB!d{W at GUJ_9qd*O-TS0!r6=t;xp(&!v(
zG5PN((HseNhjVCSQOPzrDh=t0!ZGReNGb|1Os8d34&IbbJ6J$IJAYNL_h<Tk8IpZI
zzfV<n{mxw6l}@|a at ml9xc-}BIJiWxACyJbNzAp%PKHrZJi!x|UDoOn(`IsXVDbq<S
z16{D1ZEW3#9ckh>Xh$Bb0f~PlM-Z at Kq*)<MIVd3UwgpsV2X2d57@!^Gj*d}1Z)r|j
zi+{_YQz-v-<vhCAfb(P{_R6L+&0?HxcAX1+(vq<*)Oj~|O4N*-YTTMldq`&6Hmvzx
z>u(aex0cCG8f9 at RVY9??j?+#2TQ)7{{_&x3Etclc;nZZDlSA82p8UJTT!vCx9kH(p
zsamu$duqzF`4^tQfx2Id#6)BBFsZRCTzS>;@*C<VMsTV$KpODH3M13kobKU{9NJRz
zPw5xFNH0hnbRmy>^q>DX=|kA`u(O(3 at 8i!2#|lYuQh~k0$N!X9?#sMJ`WqLtNAQoG
zv9Ud{DF&_CF+DxYSIL;pa=NJ&Pal*_zije^?BD||a`;agaCR<@9X{Qp6oeLd5Do9t
zSboK&{5!9a-3934rm@?M4Enypqw?tG)DL(|9&Jx8#-HZVq0}<`Jde)c%>Dt-%cnD`
zGx)1~x|s6BlNZq8(;K2zeH}R3IO)%~Hr5A at IWhl*TYUBH`dF8a!@lN-XZEd_A1D(f
zIDdykfn$y-e8<<0^F<Ymue6rQF&ym^ky~f_=k=5$_}l{8O;di7p4jSQf%smTDC+j=
z-|b-`nHDGJpujO7z3!SRm<3r1;~E9hCBdA$+lD82XHOse!9|NE8EO&ZJ6y}eYn`Yr
z8|He}-fSe*A`_C%*PMZP at BVS>@`)!KuKL^;?shmGC~KY-Ey(`OH at SiVWq%`>RdH>&
zbRlhNq|D7uh->6X;~I0F at z#a3ToQene(qI_LgU($2rgX4kz+e{LIs=f&kJckjj2_j
zW2b+|leoroE>v&4uMgryx}df|nfa2FwBzP1Z74TBfkE-+W2i7KC51W|kR0R4O9n}d
ziK%6{v+1UP$h&?(eSu at XSxlPCx2J*$9CI|yx2 at I)@^$t}uPTm!I{Fkd#a$BWxcI8+
z+DMo8-*U|qY7`M|j0hTRzE4?2aabv10``Q&B!(L(dw=n5UX>GM7<KB0n at _^D268B1
zmI~syXe;;|HdtPV%%wi4q8J)UxZ$el4cB17Ebv2Sx5Wm^{J7~p^SH%ObxjEf9oEe-
zagD)JRU#rUvG7#g3`$JmF(xOgJ!-M-B03ZoEuzge4Rup{#x>REcKUTZQNbA4utoIH
ztC&)l2u_{#DXJ*$vh8 at 11#5DkyU%i;QdA5bjy`cXupi_yhDuT(yP@;ml at lB4Hr<Uk
zA5A(E%H^OqNMmZ%$b&q+V8i3}iG%X!*{H#1CnX&ZOSH(K>oV$_;ZkAU1U<kBlr30x
zd-ZSbP>B`JMU at KY$DlkI71B}-DCOkoq7jgdaESpY-*jTFPnMR;A&;GdKYcdJ^J at qb
zsoIcp7mOJg2V7--OnPKiYt at y?p|!4=oLLYL-CkWt`*t(D=%|Ok->z}tsE#7zEUm4;
zwYY9pryQ!-osYJzM^AjUNVw+Qi6=srmfjvoN92{RS!ghD^r{)RYmSbB_C#bb3SD;g
z#<w|9usRD)Nl<Us<>yb#zFRcXD+Gm3$gEJ at t~qR3Ro`9<!jrdDT*=_Y_X=qriK*33
zjuG0G6K>Zmwhoj96#Q8^^B_zKAG~5Q?V~ZNtNY!j2o*;Qnx6Z%K^vVzeV=6XZ-;q_
zKDl1Ie at 3XHz0(>L`b5Ocm_ASITFjYsW)?LFyAtEXQicl^H6NFW$N at hlCw-0f->&)1
z0-9IoW&Y3$=<2(RKZZOIev<3>aeO1+02)gQeJBc))yy)nZKuxSjv_kLBTQ@{SLTi{
zi58gu7|~WY;Wlr#2MFm;=CJckgl-%D=xZ^Xp#o)d7h{jbv;<FwA5DDs7)p#f4#NoG
zKr?dUW(QpGSyEdZ7S5Q2nImbI_Ba=&>vU)p@@A(YbQ=ds=bD_J_BBkk394r3lB1#A
zE=k7|m=y}2bfy at ngnT-d6jv%?RB>S>IcAAPkWPer6sQ<#Y;?Qk7khG|rtUMbv_CR|
z1ScYLqj)BDojqAvK7ztV7`8FYl82mp=psdlIb#3`Z6mZ5$TtzD223Xx?J6$R5jy65
zmpHKi){`g%O=_|vZe>1n{UqbO;5L{-j7uAmLt5dIxK(MeHVCrzE<)f>`Q&J-isQ9m
zRGcUnC6YxWYGjvl5v73nsDOoo7q4ZIYh2wdpCza`u2Cvg=GVq#$rd5V+_CH2Pfv0T
zD<{Nj`BZ6oMX>V;B>J<`qyYpl3Y5hxx?NLg8D`FK!hA?yO^=-+Q)po@^Sdq at +=Ifo
zVCODzDy|HN8hJIGu6&lI?cl2XnX$s%j;G?*2TRH7W+G5N$IivH!YJwTlyBp;L6k)~
z!*8!BrmxVrav436leHgjUq(A>tW&;u<D%!@;;6f#_a<gMsB+UB`XcDjH#;4QJ*U5Y
zWoOgQ2!WxUV)#o#zi+>p7czD6^FKbFRFT;tTr|hbOEz~#appq<*FCd7Rd6>Qly4Zf
zBwI8ee`Z$7asJNf)Xr%}H at ANyG#&G6PV(zm^8Dxhf_n!xM=ZQ_{Bt{=*=G~R*&TgP
zbD+O;`{d`5m*RLi=8HLJyq1r9E(lxvV}(2CyvgG|vJJ0&l((i>FsFRw&%r+LesjDv
zbZ+H6 at 0I7bS9A>h at R_uG&$`31&*D{=<5DhNzrFL#Q!yI((1zBLu~kLfQ&wfUkH4=>
zF!xT`<2PnqUhZAx4vy^E!F!TxZyosH+mW+k{)~9f^vnU3R<~&CjI?q~PkT|4;XRA?
zjz+qbKiOPV9K$ur%%VlXSyrfU(e#k8C5m8Q=~TD4G`FyL>Bh#7JREYurLK<2(<eEG
zzT(%O{U$xyV7!;0I3xYUMJa8S5od-Hi%dBsSw4=^Vlyjg_H~0K*CgqT(3<oT57TJr
z46Bi8WfWesozC%mHTuL6#q$k9inBN&*%>!agiC$Lg{DzfF7s!H%*YtwUsm$Laf9|h
zw$ou8{<6VV)DP82!vSy6R+`i+t>`g0OEj&h6vzV}0$OirMH7LF&s$MDaNe?3bQtJ$
zxfM+y at i(`k?|>#ia(rffU at Phd8bf+=l;*Jq{9Y|^{IgbM4)g#v0Zq$W*;bsQ6GMZf
zpSB`c|B(&w5pd?@R^&?x2DSlb0DXW_lUc#Mp0uJeV9;__ at Pr{&@Q5K+;Ls_oz$=DW
zLDQ$Of=?M at 1&tnJ1)T!<T+|vtO`v88<N(lR?Q`Fz*HN0OBiI%?{v*GaNMvcmN|d>l
zm1x;oR-z>1Rx|+2?P5zVF=k8lUdxs|rk*X?xSlO}N<CZCz^~bw#2q6NK+TQWCR<Uj
zYbrBT4j!cKLVz=Y4#w@}yXbc<HJo4abUC1J^K at -R8j?un_HeJRO`?nPkgJ~WkerM2
zbe)uUA`g)l8GW+ykR@=!1OB!9qz%XCq47XvUMunj7SVa=1TfV*Pgk&Lpci=oxx4qG
zEYexl%X<;gd@^w!8YBrU^Ux09y5s!bS-_8g;lRWa88QP-Qpu1rA-JoEppRvU3v`Bj
zB1qGIm52TWj)HhC`U(Z<ISgj#H-2vqslcLMWTzbkZQI+5mXn(O$iMap8D1;%(D%UK
z!QCEugzlu=T!Txbv}IAz+dE67lxS(O7nKuEj|eL at GcE}kX&9;+X*MIPrLn3#?Q{AR
z<-7PHMTsR9l*^S0DnwI3*{!Ld;=xUU+YFdR!ocK!aRU<uhQ?oZ(DoV%tOj7zU^HL?
z!Pr5vRA9jrumkPEOaikU%oH#V#uZdDFa^v=Fk`_Kf|&uv7)&%66EJyTWMCG6i3Gz3
zGYyOoOzQp$%J)izhAM-?62Vx2nF+=U%y=-~U}C|D!DNBS0TTv>1``3s5R3zu%>ThS
zfe9jQ0>%JL02mFJKvF?4_E*fHW?)$k#v05>Fa_=P$LV%TGs{e-8<)iJV`REnLq_=G
z4Km%#A!92F{K+gJ<90s8CnU3IKE!#fPg}B4rkmTue*)MC^!8$~Pt?bW1ADvPo(1*^
zWSo-0Y!4ZcX-5Wl5CnAV?I~bS&=>3v1wYbfssg)(UeF1UR;%~VhWJhT_=aGgsV~eJ
z;$Xdf9{8UODv@%Gq`@xo_TZEB19OgBa{GiUw5!Efhp{l8zyyMs1ZE_dJTO8qiO`wF
zU~<4Xfl0$_ey4XB=Xq36WD<-42DkhEL3<jE40M$iS&57DBwXEPL0TM}Fgj_P%lwC0
z)Smf(UTmZ(TLh^RJJ3wRi^tJoLTrGF2`yKlc*5^aAQ!^6>&T6;Jrg+)mfl1`z<%v<
z6hesKLK?#Un<x!fqU}J|gpe=Erv!fi*E-;(6Uc<H?JW(8B$oaRq=H#gQgR(lB!mKH
z5<&svfseG6D4wuefpQ2zV3OgZi$N%ixD!}GAAJ{sGKf3r1acw-fddHJ9og`SZ=+P=
zKHP%R2p?;1prynzkjX}X0;ho6SGx+O5Plbo#uCm9K_-NdF^T8f)`Dcj{Wudv5<<F(
z{0gcKYHURaH7+K^At;Lw(uEPWy at fIfp@l+#J{o8`4YA-8D2)&#UQXD46QuwTL3kk{
zghvxX_yR%*pT;L0u0a2nF4X)teHj0 at K8)A*VLaQ1ETIc^gf7&voo!Llg}RpgH(gj(
z3oFw9-iMB8W-Z%yy6~5M_gB}&*8b03r|YtR+jW}%uJ7V&*}iil?7xl-3ENwc6XD~V
z$N=c0Wovp!&;O=t0yVY&x9RnN?HbL0>YM*=di|$q^<Q_5=08p=o%{dmwEC~RLi3_8
zg8$c*F8=@5u3%fPMDyQGlmD?RbnaKW;_tIW=l%~1oaTR at CO1$T2;e*LSC>qxWxHf#
zE!!o9gqVYj39VKl8Q~@a6iEo9Tu2DzBr?F6U!d`XmqL)3sc_TvVHWX#8blCIyonr`
zzxN?tMDw<5ct&MeT&sBtlTda}l3 at Pp9~|d;T#MDZkqdro1VSH3-J~>=SG4$p3(^;H
zy*9D_Q#p&~I|Xrl$A`o$v@(_kB~43=fA}B5QbXJmPnsE^*biRK(|PoNk?EpB$Do?g
zrI_aN%B;911qma(%a*wCO2Qq+hedcv3+BTmx_vp1cgrN4%gZRHc?I*Ff)b=6aYjxO
zy(FV0s7*=>mSrW0vofx&;(C~dl;z$;mQs6>wBYTX7o{9w#-hcs39d<oOA2`*c_pRV
z_PLh4FQj8km|SG}d#+9mE(MlNW9<QTxhN2f^e*e3*_n$q#k56x`b1tY<<A{ipx=mw
z=FyzuVrvwdWo22CD;H-Jm?cZYxZ=VkNy4lQhag|64R28nwTe46$<Jl}YBARUhfd;M
z(?AYNE93bK%|<T at cW}vDNCo+NC%G<JVl9?Nx{mobDH{#Y|Cq*Ng3^pLKZ_f(FiXNM
z$xWIoP5I#X11ag_f0J(1i-fuVHc`97WS%9*_CMF7(V*SlpT{?~OqNqr3Yd{#3c!p7
z<0)^S`WkP7%*^%uJe at K(dP1H~(-cm~Bds_Ica-riYSzK7kL<B(^t->KK%(OP3Ofv<
z$6f~#9d<vE=&z{|PI8+CB)QE5lIq0)iM|>MBx+;;*`bjADY(h*Fc{oqcX;h5{xzbe
zVj!rfVdw|25dE|cNVbQc{lxDjI_ZI**d28$knE`AfkZD22NIpM1V}b}`H-%C)>595
zXYC%Ar`yTet!DR)lep}@F%o~G;q4G|d3ib&+<%v at 0hYG^P{9i|(l|I!I^C0`bkf^N
zYD#Y>IT+~eq-6s1cG5b5dOK+$JH4G0VXwE7mYSrulh&G|x04pLX6+iCnm<w>K$>o>
z-cFj&Q*S3tXsoxBW;D^;NmI)7cB1i*(c4Lj^7VGoszSY;w5;z=iXxTOY5Y4itb;VM
zg+72Zvz6XXntJ?BHZf`LV!fT1Sbdy$AZf8IAZe`}eH<r!c$hxiP#>NNBrQn++caQN
zgM~C<AW+wQK;54fKq7q#kO(*yNQ5)i7a-FYFil at TqLeLQyp$~<9!R>$P0Hr)AZ7C>
z at yqn-HIMZHrTTyYJxKu}Qnr8qDO*6QzJN(U(mhjvq-(5!q+3Qx*>nZ^bYyQ^qW351
zX6OYY+e#vsv6RZtNfa$*CCbwa5-DW`5dz7WD7#KkisP*)?;1tD8|`TNq6=mYRZ_41
zTlab@`)5u8knH|!ukd^E(*~Y1-|KoSdO-eA!m{<eiGoyFE?PqV7n9-q^}J0P4v^qO
z(h~X%ruVS_-Vi?0(^t=Xz(v8W=mVhHBpH&Eg0Hor_x1GF^CLY;epxu9k!NO+^<6J|
zRbJK0AkDuEGW5y&7r*RJW$49xec at -~&H9zR;wMOL{TIJk{dxc5rwouGv#m1kfAaM0
zM#yG8yPTlcTVMYDM2uULf+F)s(}Q2zz;mUov@%qJzuwAoG5{;yv4Q78aqyQLcy3fW
zz6;<?%EOi$d9EBE3p^D_=W8KnoVthS#7R`)b>PJ$s at TG?sEKEb*B8 at VDiZf>ggj<r
zx{2q;HMqyWhUHB>XU-T7PHKYO98TbJ!VxF%JA`TN_#48ciFkmpd?FsD1*YD@;e?B_
z at FE~J18cRAZ!$j0;ugU;Y`h61RgcCKHbI<7oC;1V1y>VacNcsBd^u*j at Fhb3UHBPc
z!7l8IA$A0wfg!dh-iCQrcrE6MAir(Ii@{&AxJ$st7MmeE#}qtuGbAre!P$h1Qt&#$
z#JBKaJ%0pJ(=go((U)Gs<C?*HNjgp<j7Z1jKqHeJc6qlj%6c7F6w|g;KK_~{@a at F|
zBx2gPc+?iiCmDxrfzs`80l_4!1#nCU at aH6OEWQO!13PUVHhGih!V&Dp6W)YAij9|{
zHr%+8=S11!>Ng>USt&jMA)HJVzC`H!2tNZttz5Q3 at FG+E+E$*cqggTAlSx{3Oj1|b
zKV4!XSo*KTo3`>sb1YKv7h8E=oWxW-K&VN^qqhOGlkr at _oMgO#(0dO4ig2eB9wL-F
z;c?r6c0G6=VPFs5MEFrNezu)wgMZ%6lW at Fr4lmA!&Dd)PFt!<I6N;Ph7D7=o{)RBV
z8FO|5<C^gVLbGO^PiWeVw-cUk#uo@<nlbM!;JIcznJ}vvFCx6vjNc}l-;6I2{@jcO
zZv(BL;i-g at XLt$Wv~v6o;hA!LmC&FWk7xk~H{)Q!sB&CNC at jZ6w(#umKU#PeoIIVw
zizCy~7LVHn`p^QsV;*sgDaQwPL3F$eqDSf+UL1ZozCoyJ#+JK*zRfs_a6~ySCv0!V
z9}-Sz#=j6AZpJq6kdA1^uMs9R<CTOK&G;~(wi)*knm6N7dw@;NIF4{;Gp-^0t{Hzy
z_ at o^FPMBPdKX2t(<HA-RjTNmtbIz4=oYV>-v&wND;bmP6Xr*%efUsGY(h~dc<=Jv1
z<#_g9 at ch0UuOpmYj=vzhT8;+ at N0#H!?*eVg at m#`!a=d|XVLASaaBMjqB7CnLkJ|_I
zD97^%_m|^Mgl#Z1_Q5oLZy(PP_wEDnd~`luoI^TFaMXUD4W|r7$bN{X-p?D!d8`ll
zkc5=#LcELzn%RpSF?Bc=^PKR#tvoI#3C7NQ5c#$DAo3->V<mA|=^S31#W1P}$HS;P
z04#=4MYse;6`?nbDnjFOe2LJg919KtU7GP!Lg!|@gm70geuprp8DAxIgHiQ9a1V?s
z!jxyYlyKxT{4Qa^GyEgr*k{=E1JX3la5$lBGhRj*){GAjhBo6Hgfxtx4}sM%f(W_I
zxSTLTM{9fremLPUY(4_VbK)@6JG|kC!_zsuI2kaY2-9Ie5jwztB9y{_It0vw0Yx|u
z1{9$a3 at E~&X8b!L)r=k6fFaE|iICHb>j+mi<If4z&G-S~a5Hv23|!HS*ByqHpyV*D
z1W$DiFHS%+{(|smGaexHZ^onB$+FXo=Mp||Zr{+(`<>FvJtRZ>h}M?G{;M66$7%w?
znKJab{$|KA;M at V3uIss8dr=|Lfq;Jy&EVl)-IwJu{A9?Kq+cpSN6Do#qE~mb!}L4$
zkLr$Y{<U9#)j)D{gvpm7N1_ks*2qvc(P4Reb+>n%zm%bkz!9DNUOV9I;=Sk`QJ%78
z=rqx22Kl{}<gUsIe(x%BLkd=I4pCJMWv~dtMSljn at Gk0-p-V)WUnfJ?flJ29P&&Ew
z_L at w0_a$+k3_aIsKo`!Fp@*cPUu9?oQBeA1XaiBkE%VTOz`{})DgZ8Rlp!_Il}%-+
z95 at +B)YZiA**jdmAGe~rWam}XtJC;Ji+kA(NF94mFX1$MlQ8-g``3ERp<a|s^x-*e
zz32+i5iTVRQ0^l`i%1j0CFOT=>kPVREJ?UthBlFek9yH!ax(!)Zge3R8Ok9y16SrD
zL!t#%?M16ezF+P|+ejCN?L{+){<|knx0|rd$U`1Pafkdg2Z;hcMux at _HS&%OksDq9
zrL1md2nGK at nh=`!1HB$a%=m#k6g$9P_na2AzEqXQLstcZ8J}87z0lW64zL<w#(S+V
zRjx;Re_zu7B!DQ#-b(iN$%{=DiBP6bNR;+<L+sX*_z&p)b at y=la&>zr)eyV&Bs{EV
zqMqG)Cg^!lPYcrj#G=)EnCnUUY2r=x-m9*bud&kmeZwk;#Y<V?V!vhY|CE{U)d|1o
zJbT}#{G3dukkcn+Iz2h3sTUQKmQL(_sa!s40<E?E&m+9mlqT&%1=SBqs6DU*xD;3l
zoCLH4E(dM`P5~|kCIcS<t${>&O#!w6M*@9-1;9hVu|O+eAutQ*3A_cI0W1R=10Q!o
zFGPc70K*2sOF>P9fIM(d0Lp+ExB%D<90RlfMgp}!KF}OE4cG(}0%^!+Ddh7da5*p(
zm<(L{2K)b}ua@&qW}>#e{1|VMizXzR-8Z=aGx?$HzFhB at 1&sWa^$XJbnE^xaNu8gQ
z-Y*`gdd&J|>ixt(O&sgzp!bUfCURN74AxJByup(8^GRJ78R{bz0~fDkBSz@`#simU
zvVOGQZ!s`7fb|R0`&j`~uCV#J>HTH`vp!?}a`b){qzt9#q;6akJgwAuCPudp-QtxC
zG}Z^mzLrAC2gnt;5>3&w3>XUjo}LtC2~6=M``$`q?a78O_oQ at x_u6@q^a>Q9V<j at s
zg?At)PqIB#pbSq+_irw(XP7>H4jWH{;`Iq*bs1J7Z(V=_E!HQn()m+praob!zJQ53
zQm9N%Uwybr?-m|p(@i_by7_u{<Uuyx7#;m9(Sn0)figYw^bt(-38VEi*89)U)AL~a
zhxd6Oj?hF3iKG;o0Zati3CUj#l_*unCZzT5FumJbNH*k^s95h#6q2S at pvX7Kh8+rc
zgUx58&J9if23w&08{{ts1+sgCZK)8}Jq-ovJ)GWPGt7L0t%-v^Va6M5)eZIGv_5{A
z-tDGm&KvFHD8si$Qrp|l+ZwL6<q2^IWxNH?on#msPKkQat7aLP*I#kZ(sMQ#gBOg4
z>$KiqH4i50hW1}387`wV-o=$vT|Po~4=Z&`%tYWLbC_UWl~joZLa86ZA`jst9`U!+
zhm&~y7Hm8cPU6++<CQeA at d!yg;!on$y%I0$VkNb}oYF9S3ySHts6f8=I;c8}3Z}n_
z;#w3zV#`@b$4%BOt^Qz%e`lF+faS%zEE5Y at c8_IgewJm^Yb-6+vDD5$(~8KIs~)HU
z%cWY@!*VmrO at FYoTEr52vP>vod2u1j#P?WspJi#@z_Mu_ON&<v(wFlQTM-?hBGWV<
zu{F_oKuvUnn&=2M(GhB*Bh*AksELkHlcnBl0XintvIN0(1i^I#!F2?|bp*k61i>{r
z3rMabNUo#Bzh+GOtpqaC5i-&dGSU$;(h>5}5%SRy^3f6U(Tx+W5zCpiEEC?-u$GJa
zStfe0>~3IbK7wUa7fXwO&4>)Ne!QRM#j`9EO;~n+&C+~2%ceUlwYBU3PSEUUEs1AY
zcAKy?|C(jfbp1$Q%Mucj5#Dd!#j?qmrG*hoEjyNoA%l&y9x<f5h`_{<7BRlli{gtr
zC^7x8g9>}t{^L}`ub5zyr|chDnsm^M^>(7H=j!c51(~pdwbzmV6<_$9Q^+i?k`l+^
zUm^@g@#bmr&^*m*fzl8R(=Jf*ZIZby27j2gUu)r;`D+Tv>$1*!SK2o08uARNKjuol
z`#w%o6QfQL^W#Jn;c_*nXk2mC3eyj1%PwWdozGjvgZ6fphCjbD<avfuebe;tQNF2Z
zsk`ZiM=4WYsr2b)@!$@@rQxR!hdlotcI1_?uq4JrQi_*c<C|-$6B^=d4DvIIM5+WC
z-}KN?+O{Nz>P%E3kZkI>rZulM#DV*wlKCfhVuZDUID+al-@>=+9^`+%dGerh8`s;+
zs!;6ZQ!4dpI!gUvp3AK_k7Dc+VnvHT%of=AD*2{ON4WtPbEqX>uHM=3&XCm0;?Pm%
z>seH<*`+52M8q`a((sCX*ycKang&`W*+MD3xkh|XQ`!?ZdgG+wJBI>okE|CDYJz(r
zKn{b&Uo&GtE_d<OmGAAFPL2^yI~dR`9(+7;hoB)&!cCNRRM%hn=QQ01p(R9 at hReSn
z^2{=K6eK1wu36?%fo+o1L~SbKms#bRfS(h-b{*PBxO?Z-2671Ytn#r=Lg_WNu?J1Q
z{Y at lli1T2e4?|z{q5H4f#ZfAyJCUd%bjUN#hB+S4_*ZG<Z7bm{#u&nF`mBaL59f%|
zRrZ61e at pZ2iyAe=iE!Z!zL(~}kZ1Jnv^~P=RCD#3?dEP{GrK)9pNIV|-Tha~YDt>9
zV0J`LN?=Lorht<}owlVmeDVTd)VDk2<1%?M`SW6=zK%I&-Ob{A0X-4xMt?ihWn1da
z at lD8PY%WY=peNm0PDN}B&_<8fm{Empi*}0d>3ZkPkmp}LHRM_Uo9=U7<fDqV_2Oyn
z*Y5lhv7ntCnk?YajYzVn1cug^TO at QFa=7cObf{07=4iV*)p5b59E1Cxxr%(XgS5JF
zkQ*Qxqyiclh8!TiVMM9xaN`!*`6q;qS(s|jHk97^qSc0_MSrTT7#I0Qez4F*`e#F2
zE&9A+SILFMx0Yu$GiXxA^niJW+@@g=(%$OQ at X<GiJRe!?9lmgBSJ at g1iJf1ZH>Y1U
z&S=MOVM9u{K#<Zij-R$CW!*RPYSXXUjib`8Pg|R!6-d9|HfWt<DKJPGr5R`NQ}vm(
zm#R5yN7|1wPP?|C;hP1uirG8H(P_ID)Qh<s?H3t4<DOR=Nh~CchsJr<cJ;aGa*f3Z
z at rAgZ@j&Zg8%^g8zO-|zu at dDc|1|`LtK+G%6i!TO-t_q8D<&WIdWb at QHVSn%bqsgT
zvh_!*eni=7vg5`5=OXy$=a8?Ao1*?kWTZMDPYn;R-qj)tT-VSTA?~zz`f?({o`v$u
zMnz#4kf<-1aeC%_C;EP~_~}n3mxcrChCJt3C|0{BA_EcztvFX~!`a#pH^|YuQ-v;X
z_cp|FjZ|}XSU@}<&3u23bF77;I_y3pf5zQ9r|;R?Y?GY8;Vf9t&pB*L3vX8#sv42c
zi@`O`EJofoJICq%uT!nV+ba3fCL)pQzS5x9ZD>0Ayw!|f_iQ+2D?J?-$J~$fkhe|E
zL?!ANv2~erh5-yh<V#-o4n|V-VqJckn423vz40LOS;EtN$apBnX(sMY8OVM=)MSt5
z4?bP7rKFTGEQw=y8XB3anu_G=ByX=r{n>t<i*JP7xt}OfCwYm~-BJk4me^c~ayOe;
z=$6=x-0IJHd-=v at GZ0TfR$Zgc+giULwsQ|<uM29)SQ~WtR!@rkd5zmU>L$5+&xXBM
z+|l+C(l*9~oEtZ}>aVE+)5M~|l^NUjfUQA^Z=frw=?`l^y+LZ(H3$9Km2mtC^t)-k
zY{=8hx6tj_+ at 2I45i0ikFwZ_*O9hzPggYN?oq9+95H16cYhpfb65rD;WSTgMY5o(5
zh1yEYx02?V-TyU4I%g|8ZyVxZEHuFsOY$~-bkW`~|E$y~Rg&51`V|U2!=bO~X31{p
z9azH{y?to3S>V at i*XpM*OlR^s^NX;SiwRq|O>yWX!oVudz16z$o<`L}J}v6V%hHBY
z+vF0DmdG1xecwXGX<pN-dS*AB>CyW2`8A?~k2mQhj+2<==WQM_E#6uf-l#B|7ALh@
z`OQ>c6Su&h?6nP5pQl5b$hKd at nh>YvMtD(@d{(jl?m(W87!?nkf>s%iiieY%y43gm
z8Es~-MghBN>lahzu6Eg<ci%^lVUaZ8`)f}Ye#`c6z~yUCY->nC at wTdVIa2+=On at 1{
zggrnMIgwphj;vH#rGel}7?^h%V=@3E7sec}$BZ%Q9_Xg?;BJ4>MW0KYp1Zw=Lft27
zGP^$Zx$xMLr#boR%2)UHQ^nRZJ+m7cvn}`LZ3%K!AqOwGo(0s4P}`bp!@YT-MXC3%
zZ1O&z=l4SR at 4HvG6<9I?pLE+|zb5E+Oc{~4OC4RvcecZB3hNPa6iIuRn$JKwL5g7M
z*JKp0_N!L%)fKR!nZY&uy&=!YRK!>RFpXND(>qPf1Xs(qaf*a4j=gRMqI=|R=p{Lh
z3cni>e1U(JqABEX+Jf#Fq~Z;d7wRG-?UYnY_&epZ(pSt4sJ4?zvPY4#ey7!&$Dkg{
zq$Z$y&;rs at oe6f*1(p%Abc0H3ZurIu;|ETM(@4aY>?(yMn~fZ85nXjEk)g?F=+*B-
z>u}%#w0g)>D3PH$Cyqk3DMk*hP&2(GbnP+`cYbNkSJA`O46UxMbtj9 at xTcyFc-F6c
zmuMd)svrN)*XsLiaD{3WKYejk6V}h*x_6H<)zvo3 at y?6d`r=@5{<J|Z7^D39JbU-e
zle=)|uYC8=oVgbs*J&8q?OpM`pNuaJYc at hIx{tO?3`!c2!B%-+>DFhv6w)>cdhM-e
z+YXyNRZI;-yHuOLmaf0uJD)7X*r$*0&#iKG_!yV;@vqy%rJh{&$8UL|1}KfKv!x~j
zvc7nm!PRf#k~@3_XLvO}e21^00`P?2_ at g<)JMg^U_%)JQ>Ep|@7gkIUXrv5NU8Ze<
zPWBYulK#5sE?+W&oLJv- at ydbO5r;He<=FKu-yveR?>5Fr)la at j)4_kRpej9 at 3a)`v
z{v`5fGig`;m3T^(ku!3}G4r+R4E744y2fxw<3{90dc$P&&A)=z-Q|zgv_x|EtEI4F
zB<67sFPL3aHevSbC52O$ml$@(dYDo1;VqO=6(ibPzw2-PaGn`kZ^q^c9To$53i?iX
zqyA!VPD$z1<^AUeCl5n&q`?)&zhlVLwW(sNF8qB6&z`!h?#iGWXe*kR>Wb;6DrcY7
z;(ISTHb-0GVOm3-KmEa=rD-^I-Q_6qYAKnze8wd6^{VPYag|cKCejl%wJe&tyzR?D
zzG*l*4%f<<mh7p^Q|0DOs>&k%qk0)#bG<4!TwBSn%BWUc at 46ZJnzQ0Tyw5r&YxihD
z=PV6efaiM)tmzHAY=h&hv-+oqYtj#;?UH=?P at R}FlITm at -is+zzt1p%xD$C9MpxG-
z%8gWb2e*FQ5u;A)jwkkZ0>)M=Fo>7eGPXzaZ0PDBG@$5;^{P5bufP85jFt0HaB2Q*
zMZe(+{<k3s!4opOLON%m&Tv>|N;H>{3$3k0_1 at kBmE|~dT6-K7EJ>93YrRC}+Ck57
zE0Nnz>Vq{8a-vs5Q>Tk<-d@`f7hrq}9~BffB16 at 7Z{*YM&3WYGPk*fS=U>X%qsUDi
zMMoQ6IOvmMUR>W4Wdb`9!`!A(Mky1EVAnFpCA=c}@JwWrH%IztQxO`j_vWZCCW?mZ
z;hI=a+%`PxY;saE8pId>;LF{~$ZCi?%?y~gbcSy`&YimTdEtQO{b>Wv6?wPwpP?`O
z^#k4G9^b>U9CjmLtav{rc~nfG<9p&qy5$ix)*Jg?=wEo*J^pLq(B(caG}{*Q@`E?{
z>Agz3Ee3zre(No3rG-g<)7k4^tN~bXpYO_epD(Z<aO_FJe)suuu6TCb5xnp|Kg2C1
zzhMSB|C}3O9_{aI&Y0VtlW-4dC!d(SSix6M%=0bip5fnj1Yf$(Urs&3aS!;(R0`hz
zfG^?r at 5Wy};5%}woZs4ue|x~Urd=7w+kIH at kUx^ziCrJ^$8kC@;-rUs|M1BtTF+R1
z<NMVNciV1>87YVKWJ+p$JFJq{aM`5Yo3<OOx)}jz#X`^v9P=BdbDrjtv-)kQ%jbJi
zhBr(;jW0jsPomCZ(?@(SQRl@}>P{Krs;#_H*;1%k!XthHXZQqu_YpsP`tz at bJi~DX
zt^2HE(;!hF1I0EU?jLRTV3>SU^i1GU=F8U at bM;BNxmqQ1n>c|n&iGjT)E?&J(LaVf
z)#v;v|2pxYy5}E9 at tl6X-N;)lWLqQ6YJ-({i+*c(67-Vq@)2(8=ZDU`X&v~ruo at K0
zi(5vxH;ozr+dE%n`grw&mKRsGL8INXeD6P<)j#-BQ;B1wDR<!tcS(PR+gik^k|f5q
zN8&w7v+oo}zZH!=2l&>S(AB4pBxW;)cmCebEB{*STbA5T`1^kE{>?z=SND6L+a2rl
zGDD&BGv+ye8sk{^6F0ENloRf((`skm*wzpymkkuhgbXaWQ>giY8Lc at f4^+P?HXeMT
z3Y%FJy5VyJeD`z{w}9t-3#EbT5b{~;`7D%ZZ$7)lMrBgDNZpX*RMZwD at A*Ld=%?+=
zo`SN>4`_;Z7(HU=T^~zS+>iB3-^W9qphS-jsGd67)fNfWR!V73^o7Uk>iSf8)?>cA
zW?WO{!qH~;e!C at E_Ostd%;>2W(OwUn?i7BqWyiMqT8ZtNZcWYP^{nnlO81rON*4A1
z3RlthUY5><cvX|vGlJXspWBf115p+8KG|~cz&^j=EW6G<)hZvvnOudeOY;wegn>!{
z`l)|_n8D8<^Jx%bRru(QpZ*pojza~1?}5+%>H%^JMR;SyIAP-q9+#HY`OVDXpWiye
zkW1&)`6Yq<CPHcqOa)ry at DKTIT>T&q6{)||n4hdZePsVkB|6#)g9}yxGJ<p0jN<0k
z=V<unGj(T$l2fg~81bW4DWobNIVyE}C)BS=AdM<Ky22-OZLy?UcbqR;$_?bY7FQ_F
z{k|tk(El|rYPCS>lTlmjlfe{6MIT+E`hXE at Ht##7YGlk48xdz{+OFwSs_dn&R7 at b<
zmt%IRM*L`pNW<2S96`sSGuM6P7?Y{0o-sZ!lbOHl>_6&~=^5j1YdhRv$6ZsGxih3R
zvmzJ at SAw6j?%2AR-p-`-3gyz>>D#h_V2 at n7Te=nOkwxZ=3;4g600jG3 at ZS&iv972>
z;rG7WTD^J$YSY{xwTD{S%H5%0 at oP)XHp05W52)UNN}l~2sT+vYe+m7nP)l8k*8bh^
z?5xVK|JCpK-4}j7f7K|6^Y at 5>nY<aqPpCEGlW$DIOo|fEeo&7+hG5<vQKGt=PZjDl
zHYU0+3TzQxcWI;KCqt`S?M1<>)w70NMw<k7<qzhV{T67{JP?BBt6_5yzneiPss(jR
z1FUIv!jOZyUMa0FiQ=5G at wuPh_}B7Zb$9$`^~oHAOI!Y`@vEN^*O2dsLu9FNcS|2E
zHZ(Z`PhDwa_=+$#I$;ch-`N+|lXm0v3s2sD$G%pmO{EqzZLxl}Fmlv_a;ay`E9;5k
z=3Dk_*&2WN9_Tpw(}u_Zgb`jP$AM4yJk2<AShB=NSY0a((=t3Ylime+*hS<DCxSlq
zTY;Go|0k|dRq67I at SKmKBHR8S!oEDNsbg(;5(1o at fFzJWKp+PsY(<SMibzaY0s%n~
zh&vTQ1fvvN2-eo)2{s^75m6v&L9}jdZEfuptzM~1wZ*Ef8(Otot=5XDw-x~rLBD4L
z2- at E7{bPPJXZCq!o^_Vf{m|F$_RnX2RXi&Z>0 at L3^xNgN1lu%@J0qULIIN+~WM1Z$
z#(}V4Ci^h9It~8&e7WCKXEpVGdUpz`qtM7claukMXIxk2w4__Dt0H9D(=0 at fbF+~&
z-8IZ;q7?MTK7x<URI8`yqfgHx%uByFJs|X@=?6^}uB<-;Us-QvU+;zWwrUXi_^F>;
z-f4|JH{a;$H at d{~?reolJ6V5wQ`+6VdnWVlRq4RLdZ*Z@?$}i9B|_rtqRrf#eO;DQ
zMjqeqRYeT*c!Kzfw at vR7aslmG;5hhEyWPD#k+&DN9HmeA5k2QZS_f=tZRuY{cy%8-
zul-~lsu at 4=FYP;o^!s#u%%lbQf96BWFhdH>9W3<ggl{jrEHtXW&>~!jkPK}oA!w38
zdtXhpKA>#q%5|u0&(C``Qwc78j*#3a{JFkItT^RfGV#=vE&3>Ij=cM^puJz}x3WL>
zLva at K#i90}Hx&LlNsNED=SSQqwAs-ke$n_p3YnV<naYIyXOd)~%+H4YGC$%nbipfS
ztlusPc{b3&#fQ7z8t7oBZ`WJQ|EDqbU}J?3CwcTW28B{^ne>v0jsMUXIkd6B(-Zv%
z8lx>I`kNjm@{dewey^pmACk-<_!oQ?e)sO7^H6|gv+KyOlg2_NKnXjS!4!;zDfqf4
z;`V}nnCt8z)26-fm|WG@(T3Oy&&ZR2ZB~H2f=$%nW!>4a46uegtGqcy7Y%EkT>MbJ
zmZA7MqYNBH=^VgSQ&cS^PH>Io1OM>3_S>GQkl6$*xGA2xDy<mvlL2i!M`Oj!5yo4G
z-_5E6x)zaNi_CgwUU;@@eW5bS_<}P-s$A3Kz2#o-If5L}#`iDU8Ft{UUC~~deBNCm
z<M$e7cYy7Z%;wp(3zTVf4=uMlom;&jsFX09VZIJIuRHiaUggT+2oVw8 at xzK4=7ibL
z(@~Fii7U&mT0$)wf_hU{by at feOFVL>z8Zgi;}HGVYQDusw-xUAr^^Z9gdz2p`==O~
z8?2bcj;bt4-yJtGulIbNOjKLQQ!gDe8_N;n4kS{k2LzAs*1?fuFzPFHvgoRCTbzDo
zEy9LX7p*f$E`53Vy05ZEoWGkWbNK{RW{@|0?OvQ=hoRNFYJ#n(d69wtb6pBbW-80A
zk!~zuqzxcIJ~<$fWAQI%Up%otZ&w0<$1<pjFvCOwBv<@qs715$&8wM(O1qlxTC+}1
zEc~r=!B=5RrRQqAOVns#)7xB~XaT3D<*P8ddL42pKlor_<qR93*lvT`fz{0cYK=Q(
zi%L9V*E1L-0xRpryp?$FN;}q}_Kue$R7xufIe3JlD$C{pNw?@5WtQFfB7n+9LA%NL
z4VC!^mUui|w;b8--%inGiBx-FUmgEgwjz;guI(#Z&LqvUd<AqB0J_>fQEgjg-}~c3
z`Hp(Qn0)opphZLZ4t`{=Gy_&Q2s1Z~0=M`02IeTspgeeOPI=D0S4s5whAg{thX>aL
zgGn#u%Jan3&HF<#?~ZF-Vi-BTWN1UJq~c6gh}+S&w<9;v=Luhvq_x;Pk3K;Xswy;A
zMzh~JJ$uV(gWvcPX;I-QJbJ-3|1U6O!taQczHqYY{&;3~vzy{X|L at sj5Hx)B?+qXP
z<aN&4lL)BwK(EZHer-etyCfK|jlZ)<X~uuVf}!9_nrU_6^~x}~K*Mt6RlV9MfOYok
zjY7rmWmXVW4|?P3ga<I^_biKz*=#bN+4r}?aepg(GHb%JB7tlPMQ|~-(sqL`RY92d
z$q2^}50MeL{{#i~(y_0}7jxDO>}kpR=`G=PNbqP5;O6qjCMA!PaOa2Ows3<|Q$Uz&
z8z~8Gq$D>wcI`K&nUND2rVKxeh#Lce<`qb3(_mp#4=xPTgMhcYBW?Y;wt>k+o_xcA
zJU~!bHkgBTzMDYN23|j`NM+Gwu3Vb?5A{~`*UJo4{GB1rb|!Uh*SCW9zDl2S`-o6c
z!Aq!YT+aF at sMzk$l)VO()fg&0AHFoG5!yovVa*<(1)$xgZ=Pe4;GlCX=Fh)X_B;Re
zX_NnuHKF(4|2%Ec*)go4qTT<5<j%p(G}G^oYoX2~d?uK#CAhas1dm<^W$1|^pzQDM
z>zz$<wf^lNJ6rp|*4TxiawtHP`A2Y4{}(u0H%Jt~e9RACQ#9~umV0Ab;U!LM{D%&n
zd#!_e)Y*lL$7VRE^<V=6V;Xh5OnW~*82CI9{1p}y;>TklVRFw8E9iGj5^OAQ$JXwb
zJ$GDA{Ev0;`qZt#!U%3?pySuNe<+1Iq2tV#JeTDZgDZlbxBU4xg0u19Yn6Qtpyj=|
zx2t*ptnM2GJ$R}PKYBS;pYtm5RBitI{O@`dlXx|Fv)91H4M;8i8R*@VsRTzmTkQ?L
zRn0f|<96*ibO*xbeV~4^2S82ze>(g+h5Q^qtsa{p?gRA at tcuPi1N)%Kn9%AU!I|`?
z^{xK{oZj+EHygT&l60osk82$bwB-_EE}sTU(tb%PUbKHF<Bl6&sgr>ftDat{Ob+6j
z^$Q)5L(vJy^4~%E#cQCfRpX!f{sj5|Cv?<H1DCxH9b5Yn8S_uzflee1Av(nWU`Pl5
z59pX<!Bw7ug;pRyu7tuweD?G~hAsrkDB8sQeRLnZN+>YNRlmDJnRRG at GMbd;2os?Z
z62z+`ZJuVTqkOQA)?d5EltoW`zy1C2yd=Ip2Jh<k(;D-=B}^Z&k)H!1QRZYnLqv>h
zfDzOI|2X_7$acCx;nDYEcQbI$#{kONgJM%g^R~3+X$ou51-F=F2Iy3Y+gpDJf86VG
zgKZRb>j;zEt)>$RGH@}GH-J|7T*2x|`slz2P9D9szk{m)#Y&o$-$L3D at ckWn#@C?-
zeC18*+)(J at b+vY`J`F?fAL#!)_kSR%!(aUOu3?~qeFhEaMA84~M9tr5{cxc5{O7m3
zm9N#o{O^%$`1?o<*6t;*j>Oann}?T|BU%KFY=uV54C<kc^u4YN8qd at XmZcf`w9a%x
zoci6u>3#JC4=kv@$AUdG&|6(%hex_Gn}t{!8mc%Xo(D;F`+zQQT*D)WGaV*b)NRlP
zBK1i6&!ALYo|K4y6qMkDt}dc6D8FhkYB=<~f+zeRM6zUX3&#XFXEhaj(vKLRkyh7_
zGy=={LhG7nlb(Iy3G?xdtWSD29O}}(0}*)_o|FayJ!<L?&w{W<jbfbDte9qnUG1no
z_TRQ^PU$T%=o%3Iaj%&Fsxa-Z1R*PJZ~!L4`*}|Nt0HD%A#_$RU|#mtRN28-D>Gzr
zOJ1)`QPUIgx5_q}Dto0a-i=r5O4?*~^!2)IyqF_r|5n+(zgPC*l~*gXt={4B_m1_d
zUa#xioqwq7w;^>gCXfZZ`?sEDJ^%S{mHopgV^dxm<u$8gL+jcdH#4o)aqgKc?F-L7
zooI?fKIPAU(qT}lXN*m=I-~B>H?dApJ&Y9fFUTPkT0c at R4PG?ZIgB)QLVPM{Yj9d4
zop#|_$xnUyXTgflIIIlowj<e`uh`oIrx@~d0>VrsC)f#LPBj_`=XVe+7fU|>zY*+t
zw9v=x_623$wYA$@QXoF%H-gKY at 0pq1{zN9G>*LH4R3W9;?@i9o%|c?@sAhGASF1w`
zC<uoVCTVO_`0DbcP=Y=Ojo(3YJF|a^$gD(EvkcwKEWP-swkNZ at Ev-7{cqpfYG1j1k
zx`{rzAcC!75oT+Z{JEXld(nP*W||=bW?*hTEy^Mk#HwADan+G6xjGR+DntVQo6$GJ
z?tg&9oePg;rW}Lb9wWFNHT=1CnUAY9kVh_}2<X7HiGnW5kH<<ebwsSZS2^Nd{BN5K
z5#Ri%IPX&IJaXYmHA-oM@=XNS)EN<Bmc5oDXnR-7Z=N%=<lQhz4J2&c&_}tMn(onM
z7XxhDpCF=Bw`Y!bJ^nk$0#sJ1K&vN(hqv()({=R;L3gz;>?eGs_I_DT59MGD(G`Ph
zDEUd2-Nhli4Zk at quY$%MC_+9{*IjP3=97HJp?kDk;KaYXR`BR$$%|03bg*RESSv0)
zKi>M_CP^JIKH({ioP&41$WQvzbZI>rqmBty`zNz<22OAcFgl*NZyUju-G%5&YAVKK
zOXUECGN?9hU_2M2`A4^X62^5#r&UNl#&v7P8k4D?aBJ!1-#lxG+Pt9)pKUQ2IpPWY
z-_m4F2Fvp>vW_~UCkrxAW|<J7X1;r4S765Pr!5L^(T<8ncfzf4PP$~JBL5u&u0!=E
zA?&K`t7muI&amXn5v-^Kdd7We>TtiH3d9 at k5wU94yyQa5R>aAyAT6Rtb1Il7R~Owr
zf>K>ZMDa~!O3?nrmM*&<K5L6K%<cIGV9x~zodnp{I?3uM6I`sG2TfL^PL)1p4i%0!
zlA{DO{XgH9;=Ve!Kuxqo;&`?}zPGRJ^CrerSkM-(SC;cl1*Wv}@RShto$iKQ`9YY5
zGw=Nu2!%bC8NM+-mputnDm7!(-fbfcxyv>Tq at VR~3s*+We^(zS4_C8Z)>EbS(48j`
zbf##aGro3;GwB2ciy=XFim6Fp_tYftA4lAe8Zfi<76F*6^yaxIR at cmy9%(ehZ{Cnx
z8_!B`Pbk(kAu4;7t2B6Ps?TO6Qt2**a@$5ghpzBB4uv_Awsb>QmIr$aZY(<cl$Ys@
z)TP5*1(%QLD~DOXeY8_ePCd*DF~-Xjq68V!GRo~iK^DrqL%nz0ROt>}shY?vqAX_A
ziw&wO<R=Eub&mL_it$-T!a~=Hkb=wDXf7kveo5MfE8bS$6aLf+InqTeE?uAM;i=Rs
zgDa5M5C?;i$FPE>sebn>)r`lfUnDJFTlA6MS192e538aEe%g;!lL^#AoP0rx5T`TZ
zwsPUyp~UFxhpyt^vum0Vq91!vOcP<ARKfPp-jPf!d!j}--myUKrv1%}tE)&vwUvWg
zN#9*Tj-4a)vB9674bC?Vn)r_|W6Hu5O+OOPwUwuJ#vDnRO|)b2zc%o5rpj#Un(prO
zO26>9G#MmfiEK1IO{Sn{U3j)C<9 at QdjL$8|?8>1XkC at E=rCWQ#0W~c>wzA#IcR+*x
zO5}HZpXDn&t)DL$7rw)HN=r|^kl^FNu3d6ZQ;?=tdfwD4*IH(^B;ffqQbKYB%i9<!
zBu6r926cvS`6GUPK2LYuKk%{t!+Nm|KELesb at v}OyA)><POdCgB at x3^?+}&;ug%%)
zW#x7vQ;5v(Y8j6q9Sft&)Cm8?=9lCmC7$Ai^=fo1RIkLC(EC*%CLF%dJvw-AEYX?L
zaoZoSOidGkI_;UGJo80VWAM#qp9nYerBx_+h?GTs_w~!839ce?6o>xAcegQ7L`oTT
z_h|83i!F6p!oAZ+zd+((yM1usI9ZwgyFfB$Og;R#CqAeF*?EQ{0d8RE7T|Z=1|cyq
z1L^9^kVWfrgmeNi_vBBAJ!3nIQzt!L6m->OKTrsq*44nmlrZ!iWHZO@=i;b(Jtx-K
z#absVFTG&?r@^!-WqrAK;%Y#%s>5cv`_yi@(U;PO!#LZa61A5#^WEG-f}SV8*YV4f
z4x7<s8_ZQ(kzI^bZ`hWVxL9{U&F;L^-QpgBl#A at +WYHCRG~plu_)l^4j;`8*%2F0n
zx(Y}0 at gNc8S520cwJ#W#+mVQLV+JKrwf4Qppbmobs?x#y9Ahu$On%_CeZpRCpz1tf
z=fq)`B&}s*g5nU;j5u^bg11VD%!=<NYIK(;I%|Z;Ql&zIU;#sMbyJmox at wtav$VVj
zGV!C<>-j-b5HD&y%OYtliL at t?RqC%dpFtsEu%L^rz9R9N^gER6K$f~`;OjP!P|g<g
z{_p{YVe4>%t^J&^#%Sjsbi*R#cC>ioTYJL%MK}1rq$Wnt#%SWRpag}SsUSEP#?*Z{
zQ1H0Oc6-}Gell%LaFbt3 at Q^np_{jyKW{=(W%)N at foUhq{tlO^aGAio4+?G at vHdD1B
z%itT758V+ at XoQ5b>H at OW@@3pkU2Ej2E8s6}4Tk|(HebgBARKg;(J=5ONdgk7gapOZ
zc-bcF><RYGfA`JZHsQ~!S6xvEPfg2_$a2_u(N!$g9Dz;osv3eVnn`fe$BkaO>Q}<I
zv3eP4Vh*rIdP}-TtD4YQc at o91&2%?(W^%stGV-Z6J3d^kws$0BfTSHU at cHjIrSWyf
zE^DgZ3T18_#u05q3>%*a!)NZE8%>=5G~O`<Rv8o2OjzVp{>V1{5H3h8v)!K`*tyVv
zX}>e?j at xx?Rm)9eadg4}Qg;q{&=Fa@@4n=2nIlfSNn8JDtJ9e1zkoLKowa6$$iZ?>
zRt+;jWw)7o^w9T=^vAN(c#9bS8X5l^kib79is>cN9`vqNQ~nW1Ew3BU{bg3ocYdhM
z*C19>QZ|)Yg at mdp$TmrkhGv{xK(u;k_&O~goxIk4FQyI_?$?wJo#^G`(&T5Rz2)VT
zaK~~_()n04^`Yg?9`ViVbcLr+N3tlE$Q;9AJCEjjztE9xr=3py)mkg&I9rlb*?orh
zjhH#k+pgr-j{MWW9f>ydRv=XS!N5*R3F1nXtBMzVmGt(%4_zC;YvW-@(wX7y*w%=5
znqNm;z at d4sBJPoMK^@3kRFAN&W@>AF_voCJGptqh$nMk)AkKAN<`A~U;Ux<{SDu=-
z!D at VwKYxG5=So~IN9c7{Re^CXywrqq6 at YUuP!7Ly*`B#7z>!m~avoG*rsYdU0?r6D
z^?)}W$Ps)SKu~W$XkyXS4K7d#f6 at U&(H#^8>3mv8 at e2yd)MaBgS<oqJZ)}4xQKbL&
zsgdm6*UDh2%Tga^9WZ|7M83h8`mQQOcBb1MCPE}bE*|B at 1K-<(RyDd}lkL%z*J~R}
zFY6rqhO)Lp%cj0wcI7K&(`>8r?OQK<`NVtNuc0q7YU=iyzH2DuNmI;qReYrD;G>P^
zKUYetIB3FGcugb($qN$XDh-m=JpF2RZAh6qX-XRU-t7L2Qw|e}noF%J`Q1Y&lPY4V
zRn12XnhpZVD<~l?N~Cm!Y6>(GLUW$rK)e+=b8yz$Z)HNPh_o_Zl%=jpO at MGg#MsLm
zT<+{LY7-ChIu$$PG at ZyiSOn=Qp=3i6NW{P4&be`Dk&>gk1biajiTmUFF4m9h21ghp
zfe!B&Bm)U<HpTMQYQi>a&WfaQHXo>eC9F?XH;}ZX#{!pOc$r&T0Bl_Pv3fMju31m*
z9`-zx#Llen<;<*;58JmeDlIj5TO*lfq66lb4y<}0Ow$=njiy9rf5<l3E%x>(88?2V
z?h16wQp`HCUQO6!P3+CN2&DW{06WPR{Ph9s!->dQ2Wa0i(d}k(Z5YFn*jZK4dl9F$
zFt}x52Vdw=OOUF1!Vg>G2aI328o~_t{@BCb87*D&>;J$aIR4=kwok3iYMIV6lprkc
zCvP=p1z!nZcT^)TT_GMjVk&61EHzQq7QoJb6mJ>h5<kpavzaAtqPV?@ml|mSQ!-Lj
zNU$4<5Z5G%3DjsBOhu9qagv${O1^eb)Y=`VkJbG}Al*rV(A^<ewhsF(de;pqGDpmR
zbT7*dC339#rK?*vA5XfgMnk2m(=7n0t=K;OycRk>gXd)^q568RVx7y?&jlIK48*6*
z9RG;{ceM(RT+}r#%E$^ecDaxvEUC=P?nwKs(cP7FXVluI(;J4g|1B}%*KN;I45jgd
z?cdcN8J=)wh#<A;%guPFAB!e^XS4!PQ0Hu`g-rn{pWo#dRmHZ5GE#0)2Pn#C$7Wag
zr5vtY*hNMi;MiLDAnJaH+FUGDv&2nm1{bz{|E=HS?^mmlT#&<!+V{L7>cCOX_Lz>R
z_)p82E6`km)x+P?c)Ps+uGdAunfj?yknS_SuzN#BOM`!Ut7>C7SJe<ssA|JWRZ%$S
z<WDR at V&_6Eyc_QxW$d<US+n4eoU#Rfv_36SRfgS5jxu^!Kik5@`zk7jjW0V9z~1fo
zU9|Vn&6bn)Cs}4*iT45^lEFz%=Hg#Wd4kLS(vHd&xsu+$ZML3dOk!oGXuaP5tIOA0
zxq0N8$ctMttN859st-89vly4)>wI+M>dhBkO=7m>!m!X_yGfk)A9Xnbqafj1j=x1h
z#4byyPU2)bXuaTr?2j}Hwu@!W at m#(Kugg%0qLHUc^+ at tmtjZEmr~IQ6^jp8Fc-Cxw
z`LEuOJY9Ok{I20u-8RWhbNz3hJ9OJ<MUnn&@Rbxv`5DajY#fj;@D}iy(4)_Kz1><&
zl+C1M7AgnA#?=%#g0UUktQT8>$Y};TtXQrYVry~`$p)=2wx|H1yn@)7?{);L-DpcR
zzS(0%ap+5p5C6JOAFY!i_s-U)m_0wJy$$lZ)w)3BZW}m0sOQ%`JcIm3nITxR*$_OZ
z=K2+80~aF7g96d8hr;;|+y)t?GfI4H$Bvh26A`7mlI0Wk7m$W&S=_j{y?jJfGIXoc
z@*@==@i8-=a_30>%p1E_wO*d&i3w=}hg~c$LgRJo)!ad~Rn4W%aYxz3192GAxA;`!
zw{|&Ei<gHrC!SE5uR7z*zJ?Er8Be%@w0;6m?z_G%p<4vig3m1uKya3bZ>YVKV$cPt
zt%geGCo2c7V>6`6axR5F+$VJCYA(IlmFlIeZf;*)+0m|c>wH6>Mb{1Kp%CJH^;x}#
zUV;%Z;kQ#Z>n^LkX%{sYCl1N%o$+*aW%In0V?a&qVQ%aMPRBpT^VeFZ_P*+jT3f$S
zdjONS$St~B#I5u4O1*P+bKG7p4+dWpy8 at v63w!|S_Ng`btywaT38aBYXbL}vun?s6
z*2||oL5QJjDLiqbEDS+6%4SWQZ^?agl%*j^QX{W|upHcB<Wt*TyqyM^OZY1cgB=Au
z$6cS*5De;JN1x>%AlcX}C}DN#3nOzXKeF-ol<ig at S3;P;Kl^ygiAeK<5?T04`9`LD
z?9X>nDs}jpN?n4?KLdsRlBCa;{N?2hN-mXDL4wGSI3dmPP9YA2bt at xt)KyDH2H&O}
zb(gV#jBM(FDYoW<B%(tc4U7($B1rIRlp;htSmhk>EkFW{Vx)f-pL>7j4E1KlCU|Fw
zPsyU4vsPtE7 at PKlW8cvo5Sg{inVjk*OqC;JY7nX-ry`-Qhp|bOD~+b`5ggW6lT(vf
zy74o)^0KaxG4_Ye3|jp%n=HkRoZYXkle8}mn+>3pG0_8*+k at Ssncr5{=gjN47o<Vl
z_6-9zA*6G0`Pr~Yy!Ch0Wke}9_RB?}sda8Unl-?_ix%i(V3aQ1)`^kL^o3`o{z at ws
zb5yCTGHo08vG~n{VHJn4y>W7iW&UseNOw+68GAfP$^*;x7!mV@$b}JQ*%jBdhSL>Z
z6mve>?VUSzMgD6K6Go+!bY!WGGo`>vupGY?$cMan*XO==N6wb|6e_1kQ56%JYv4N5
zu3ND+%Jp(Dy{UUNy~@ebqn7Qab%*gcC-Ms%vV1*$&}T^;!grOgx0*08WGv~nUi0G&
z-l+vCXDY#O9R?zHP$;4O+|LTDX}Tj6V?!T+fC3W6f&VS|`_-JNhC;KbBP=V;a$@+1
zj at 6Yx8q+@BaNSgb4ZeNBBK^Cq>7YzhrV0<~gf+{<3~Acr{!S%kjhG<~UqOqzeNT1b
zJWyw+9~=0Xv#x*`9(8~v2H)||X<k06JB+2V`}(eLsyi%qD!%ly2zhMzSy>7pom&S~
zptk!VOkOTsKVuv;EY8`l_CCCEU>okxpSBKFLo{1MT6t7|2Y!Fq0Vy=(;QiNT5zsHI
zL1J8G|B at KTC-oO%WsL~TFr<|&@#Dx>0mvnndqa<Rk1iY1Xg_&+Y2?8O=buL|#Q!m(
zj~%+dO<)Z7B0U+wwU1Y0RU&w<+4RmBeT-=%O5Htrd;k_A7Z5SC<3sR$iisI!(_>Oj
zd)!%jvE9YWq1~nYVpn at q{Me`}#yqNuh11o+8S&#nY!g;F=cjVE9$eqmZm#6&K$g?&
z3$=ngHbFw<8&ySF#avq8kdqQ>m7 at t@P<xXtYEOoY=fwihT1kPm-q15-L(}sTvYu5H
zOU$aZMfsnGnukeQ2G7buVa%n){N)+dF`j{imgZG at 6m4Fv&z%}-U7*y at Em*8ipK?dO
zGqa(TbIttc6~ngc+seKVwf20ZpQ5To9O#I*=NbL%r1MNR0vVm+W}@A(MW!=;CRVy~
zzCQW}wW8QF4J97D_U9M09bq<9&;+5;d{!lNss=h$m&Vlz)C4eg3i2y^E4(~hno7)*
z&Zl`KozLd<uJrN~oyT$gewCM>>i4 at lOl_I&xMv=%g&vJeSx$&BC}&8I?t#%EO%+g=
zU(_gO89=8ZnU${qFdFrNKxcjXwopD^jk!~9z1nK)MnTWZX)ha`_K6wn<@hJavsY8y
zps8ojmt>BeN%{qKSqUr4r-WLk4V`nkAGLSKHD$zTCb7ILH*;b%$=v*`#T+^Xd at tY@
zzMM~Vfy4+b0pRn5&+G8 at QRtinFx_=S;;Njuv_qGJ at vsj$Qa;TDT9?+3AfdkzEL!9*
zX>hp_xvBbs>dWGRPBgqsH=U4%GR9H9<ZxDuG1iy#a`_^Z{ioyH#u?I^4UP7M`;7cV
zDs@?IQU7u1HNNB<tbF4kU(yLU{Ek%s$~8k}n-ePO!5LDt=F~m_sof;E24c~*u`ang
zZL*f1&7E*q{F7Jt+LhCOUTb)JO}M2G@?JR8Z}@T`Oc=e59&eC=!)@&<-4k{tZNIC1
zE`*xC5WPuQ1iynEdpEsj%zJ|zHS1<Fw{*o~E8SinPRzHa2^(j5kMItzcrnLwF-(A^
z-|&H<4xLC$2LCpZUk*-WmiC3h*!2eK7NZ^t!!AXPCIB@%UU*!(wr`TsB at P|6Yu9&`
z?g!n5g&b);pWoXw$^G>SE3G!B`;pQZcEd}8e&GfA>EJ|N2uj$QAT7uL(DMbv37auC
zz&7>a4>jM9zCUAzqnG!%DnI^Ai_;&?*yrUPf5&o<@sb}&F~6;Eusc3-#ZE;{PgG_@
zff at Jbx<m5HM81oDuz7l8GK;*XCPF}f2(bfxKR at 9O&0&Hixk&i>N1!=r2LT2qRsge<
z*khtEXT<tvAs0if%x553=0*#AziX6c17VI42j8KUS0#)t)5J51kR%wlkz&zCnd6O<
zyY{In2~z8*M)T+D=YmTI!6HLkAY;wp+7!3u66R`+Y<$6!NG0?Bg=e>&FFYZ$Ft&;9
z+akJ^4KFWv9=4(*W!!>1eRjippq{1pxpc<%9S!KSJBeK}ImioUe!DKqpwtB!M3{4@
zm at ThV<C9r|qbgS>;S-btu%$0`xyY-!oaF^wj;cU{Z2h;4+kDq at r(6WI<oqa3LJ_ab
z#*2B at lU;u=G&krT)|yp?$Xy47>**(Amg2+t7Th`~&WWHo<vHuJc-xZ=Q9+ at I@Q at 5z
z!UR}1P<0UIa_*;3VLH-1HArM!JBoB+hKQ|LFvfoZ#oJ at jib8j~EQ>eq-mdCFcAUjK
z*TF~Aiqurks=hdUsFha)@lO)@y5pelr>cWgBb7y~nic!NUnyVj#$S>bnb>h(;jbF0
zFOKm*2LC)^VjJ(%@EA&8#7K99b7F5adOlwBEbL4$>Qaq7YEXF`Er!fRa&tBH%a%_g
zlDus{5fvh`=d(9XX+A~Pn!Sk9Y(ze7MSGOL+}aa<b^e|xO$FkE6Km>CrYCH665f#V
z6Ln80O1FgK*UE{?f at OTAPC)TpJj8~A1^hIZ>Tj7-3q~BR*Aybfd^<Glj8gwh&ZA__
z)65$S@`P!+AWEj&Maf(y!*@P>gO01a2ril8>n?yxqWA^L!bIIP2>%P>1K at iGG?EA3
zZScJkoF#;d!C64sXvo_E;X4qY3Ex2sWcGrHoe*)1q6#edi(NRJE*JBy_x#thA~c at L
z>NAh@*FzQN?FBTXO#lRS6mPE;%x#UCpIw=?4dshIMG}o4Dh5}1##`AtKM&0Zmjy0c
zv;z$XfARbX^fvhK%pU<5mWK*7Fb$fKN`r<OsVvrvL`9I%O#>j;c<5JZMjkEFxS?vu
zP$}Aoq!3pH&Is{U;EWpYqdQlZKxgs*Dv6PcUBU!MYnS}?r)VqktSUo+Bhm#&Q<DTO
zPYwYj12|o}I7(Kqo4;5$3`YDNK)?<L{1FUzIK^iQP5}gF!TgLBZwIhax_^V402vN}
z3xNVRpuk=TpN05%_}&5eZQy$id_M%21K|hY7D3v-g^4a2PNR#h*pNC^(D;Q&xVpea
znC4=?_4HLCx|i_*3d`7r!ZmyKHtDyK3e+X0<tks<a at ASiay9g5%T+>o55o7Z@=+JW
zcR?83QE=!fKxiEJ&mbP0{u#tS)70w`I076?Q>f>HZvk$Yra^D1Dbn*HY^$lzJ3(V{
z8Pm;wZ;mx at tR*>J0G$UeB0+oen~b2bA%IvdA0ssA9#OImTS_Juhz&Xqit5-;@jJ$X
zdjbwt at DiGz)=>cA^#CnfPEW^02>%87-Ujyw!i&NE3mh!MB{N`kPc?twGReGAw*%r%
zLYyaG*|8GBJ0QOl+;)mDXSmSV&PMC`cC7UIw^_M1{zAjq5OGPtME>FiOQB(DUgTok
zap)MLWVAQr{R6@`pprY_U<EG;f`;PFAEd at ZL-Qc65ITpTbH^b39W)XFd90yfH}C~8
z01D!6gUf*QTQL6}>5y<6=9mQ$b&w!|?|XdZlK=7-FL at BTIG-b2TwocwxWF0~oWI+D
zuSOnie7q=falI>a<Xv!QDSpE^SUX`*_6Rry)blO4iBQiAsP_X1UxoM?;C_MdbZ{Sm
zgT>e2DP|0{2nv4(5l<;T?MhTGX at bVDL&0!}D}zGTP|;Qx0W7{HJNRi!wnK*mk&E+s
zgn+7U_n<@9rCV8US5r_+x*b{y{xkRvI&+DA8ou9C`5}XxmniF81$BJ^ZY0$EIXFM4
z?*Ic0-Gq-nAt4tc8lWLA_=Nx}0^&}Cn*`}Uf{TUt^^hNfZa2ig0pA+|N*kceLI~GF
z8Eu+O=R#5WMsN-kKffBBJ-A$9V)J->`Yw at bU!OI6-aX4=S_BM<>6dcxf#RzoFV>QZ
ztl<?q5>c-Q`{O`=ecnF*X^(UjuH1xU>-U8J>&MdI`dGp_F at Z1t0UuHhB^cH)r}1ki
z+mGi at cGXoPGmVI_;MKfZmu`|iEHGT3H-$qP_E{U-X{fLJ_?H at 7AA=)<J4}@daiz=o
zC38=SWJGUWnz)m-J^h;7_KXP}#L`t$1oPz_1FtAi*1S&fgPI6Rd}{vL_}EVyJ*B at C
zxCc8rii0b7EL9cq&aAp6qJ;v^7>YDsDtg1+<&uwiOVMVrw5rg(#B1XF6*~y)=jl;O
zhZiyiHGebl*T)Ho;qA3uE(yo%KD+(CUD0xm%v&emd*=p0&!ar at m`J6!%grCR-|AQw
zm0ja%^{sy4v3>XaZ<lT}EW&qFms)Rd{q>i+XVUfp_csq at o6o-FLM`k7E(#6ejs~((
zp1eXE7~?@1UOw_wl at L7nb4F6KySL}ff(Z!*`~sLnbjH|g=x43M-R1I%L`qjXsEnv)
z5+0B*4xcmc*N`btR?G&{CuL^65fQL4Md0IZ2#!!A@%$tF!#A9XyX$=J9}g`}Q;i|0
zvXoDr(#HhyVtz?_6(hWPOf_aXO4ZAPX>MYd-1*8=I?vT|DbjSwy&zog%I+F9`LF+o
zFFkD#PkuVi7)!i6J?KK48JaUEFuXWZ6OPWMub!K|(Up65Bzw#0%Vuqd((XrZ%bBU(
zuK~^cau at mHBnsu$+>g!{x^m|%>0&XO1t`WPlqD at Hbf<1zz4_$$GDF&*UWrLhZa+(W
zoO^Tb!h(2D$N4-i%q3+E9!HL0tvH|^M{3#Z2ffD2<H-<?x+^HrC=4OpSlf+bL&yUX
zkc8)oUtBF65vhdrJ)vTUKsKLmP}*AT5ZaF2VQ;jWK=#=FJHVj5rEoi%8N?<}HP5$S
z$Td2Jl5epqb{I=T$?>ey#uK6B?;Q2JQ2FO_Qj8P6my at 4y=G|LqH0Dnv<2Y(>NINl+
z?6kGq?!<q-K at IXOG{`gMIHMqC7GG|k at A+?;k*y>rtJT>s_ZcO5<?c=g#)dmj`-P8A
z;iGdO_fFYl#?IoAPlD5A)usn`qIo+$z6KK3aI^0`QE+uM*Nh!YWNu9tsneD%G;UCm
zE-bZizmjx~z}+*6XDoqC!l7E^B at 3=;#uSpNR at BPK6F=5=etau^p|Fw4o_XQL?NHfc
zxd4l8o_u>_qc>iVbVZ2KA&ivCIn&dYWrI>O=Bl%rlK()M53Hi3A{#@(t*h1NdmGJ?
zo3yOpxkxL%#OGef*d9J!IC*?*?%6n_A&i_I63d*Oyg;<s6a4rE6`S30ioBQ+=652_
z>`E8n{xrgxJ|`zYsrs+#GU6mvvC-D)7oMD6X><xF-C4Jd@^I2YVD>=(yThnPFxG5H
zezwh+8BS7y?+EGAtKG-2=q+Ji?(KbItPUq#o!@*O$2xKH$6AxDYTA_$2VR`py~s4t
z=fcTs?^yb5+)~4QhkuXS5&_}KOHV>LV2cXEQ<k2X at 9^bzE9=;tv&qJ^2y&kEv0ZDf
zc5k;$(3Ld%yYF9kQhL10(&XRlGBf$ZyUgzz??sT#OlkM%(&K%5F-b*|ojGflqo>Yl
z0{0u^w!9*XcfMgjV?pB!Mi}Be7o$k>MPIz>`tN!{&kY3H&+mOleDMf?1VjhzL%iUs
zSZVQ$(JQcBH#(bOVQb8{S=fB~;?&Zn1><6Kd<U&%_`R3%yNK#oHGEW16%t2P={+3_
z4ihtK)}i{?5-K<5IrlL6d7~nOmp<oqv~d<lz%Huvm9y-#oN_~qKShEjz0BAeNseIM
zH4ameZPdCqM;xO+Ids)Og1v0uBB1tMBL8URq2_f-BaRuVC~`Dwo-r|sbg=YM$&lHk
zP~%%sq$3ll6A}*i<b*1eaA<wsWNWq31R at bQ7l^k7-zmv8^s&|es?*ZeNdL;i`1jQg
z;A4BOWL49VV(=+BK4~FP<6oY;$*(||ujaJgS31gPUTW0+70*^VBmd|h)~|+iKTzK?
z!I#EX;^Q5OL+yxtI|)5nnWJvKWTdVhSwIIobyfIO1RAAXCL6E25KpKA(HL0&u1Qna
zsP$dY6+0=e%Y$79LL6SHi(in_8lH54P3f?15s3Vu9>=l at s|lxE;*o46<g at 8-v><06
z<8&hH-^LBmp#L^QRhlM5KtHw6Y=9iwp#9Z05FX33UQQ)=h8tF0I%4?cyD#TnWqp}Z
zcS=Ul`z1bfoR`m%^N6bJU0<)OCnO<mFr3R0AJsl&rcFeA-9Ad7y9|CH_*46a3Tb>(
z+7*cFz?&u%!_w)p>|*Z2L~MtN*bWm>2@|m$In6n_%c$Cp?2^`!RPYZ_pfjF;w7yBG
zG))4_GzpcaNnpVwkP!Ab$E;oqz8}q(u~I9#pVqkOl}S|uN)jQe^t&Eqo0lPtwqA$o
z*wlmE^9*t<m{lEjAmV<KpJoFm*ggPtjE(1g`@SJ;O?3LI>-Gs2_{A*HRe9wVX&m~}
zD4up(to;dt|3T^ALSo?Hrrc4{SnAG6O!c$c-t0}agp5TqpM)o-1C1-`HCUC!=lUB|
zLL>|M4ozPA*Mf05D#X>b2e9)Q1I*|b&}f at Pif4X*7D}d{hD?ZR&|5WGA- at sk>gv=>
zKNxj^$Pb^X;O(G(EKib*@5dz{?YVds_!3C>cm83MW$~|GTRSrisyWEExZx`xNh}~q
zpLLHe(-793DueRt2dis3j8=ipZDNj7AhCfdn9Ip1$W6>hdt>4up0$|lbYBzZZE&@^
z1r+X9xum50d9pwkp`>X0WVZscN7-8u??`j;qfJ(#+<G+{7N7oMfRkI}vtLK?PLzFJ
zawv5a&p*N}Lh+<atScn^Yo5+>9F^c+I?FzhYADPotUeh~j*<IFT`V>fGba4S``#GL
z8NWx at 1*=ls at 2?j-wnglT=$XBTC$Ac2c^wM3?@Aapq at bxB-YLZAbq+rT8qlglx**&!
zd~`;QIwSPaa at IPO%2pih4&S5FE(1NCGAL;WV&t0ZeY-sgJDBHH!`pw@|M2{BM3=#e
zY!5*BIyG9O!gH at i?_b`-12#s5Ov9t||Kxccwmn6!!4`$3vcVV6 at J-W?zrteD(Kq)^
zJT^OMFTs1 at wVa|?Sy|B53&!P+Q}BnL!8`H<2C^0T=tk}b0{kwDC}2=>ZQbCeH*X^%
zXrq%gjjdpUz8BQA=ZtSoBAt?tY#oGv_8g$ov<*%!Tz380b{K$B>?p6IxV07UUF})>
z-Y<a0{$57}kMO%j%gV7KM@`+W`d~u%&gZo`kC#(HTanrBGttJ=lSrxZ$gY0|?Na~2
zk#<JvqZBpIqsxMZlAn0AYxAL#Mp+zb?|pPtsg#peuwZh!?uJClmFi1_-$qM<Po}<c
zU!$f%PTC^f)_8NRtMRQkaySE3s_GFNNUnt5*G~lt2$6{jP9<DwREc>Q^Hs|U2cUxX
zm<oQM*$Si_IpEEbb2INVLnmTVy=fB>lOGAa7T^)s<vKJS+Oo`Qy!m*>2~%4F1{$-+
zq_Q>L%Wp}QsW4a9N!ieA<3peUpP_{Tfnw<Nb?9y7{iNV4u|&uftMRYHpe<}qSdaL~
zsXmU0m)Vh1SO&lx5_9Cc!(@-W9KY&(xFnjGR~;)QoU2m#wjzPqeV^q>E>Q3XOuy?k
z`MkV&Y5XLf9M7crdpBE9XXYUG&f?iNE81=uR3MXO at iMn`Z%aup!^rVu+oAK)iVu7S
zW)ZNik1?+Ey)E7QfyV&73SarW7N2Hri!j9P-7p}g4~}M=5Y at PJcp2$c_-!BpAI6Gi
zMpdo~-yLUAnjX%x>x&#!SyHe~7`H}uaS>bn-tOs&Cy7+*W<gKiOOJhV+6Rf0%WH9-
z87M_sp&vfb(R|~fNAfC(VvTcxKH=mK`?Sm5Z0Jfqe2XEHC;hm!JgJ1Ca;7TyL$@h=
zw+%UN{}u4;<Sk)Ad}Q$-|NUX2P-G!$Ktzy`7(?4lB1GVWm_RifUXC_U{a*NDwG`>!
z{|j-OIn%3ai at 25eG~~PvF=wJE3w$+#sj;*bJ`S)IGLJ(_xArJiZiMi+O@&H2rG)6I
zDe)QdlFFH!#MRtY%?g7Gcv#97WD#;wO-&X||D at S`x*_%2`bJ%~jHSCsj5S?=12GHV
zWEt|3iur3VshDU~X$D57?~^*19Xp;qkScw2_M12%^9X`h8}FhJB>;--jK<*fUYF(c
z-p`vy_($+&43dW|-}in7y?&<*>Fy-*FVzgZ$TSp^EJs~+7TG at J4V$)beH6`7ql4Fu
ztl`xrQj$VJyM5pMNu*jHuB at -(8!L=&C6XhU2?UE?t)?>ikHh at 2YCh3wHHkBC<N8M~
zUspVH!G}YRy>}Z+u#r{aXkJw!Ar*~5x+a3#dFjwi)nA0w{>qHsfJX{;kv1zp=n<W?
zLbfUnvOh^62bBkMQ;CrjBrEr_dc>iH31eDI62{|lWig0j<WC_9=K0)?i#j<$$i+g?
z1J6B`q<}b7xmg at rKlHT7S%08mF at u|%O*5h at E)DlxhvqM|4{*0FrhJ-3>grnE#Yzny
z*_4?FP#Jpz+|%1ApIQ%yk2J-5mc32+q>hAd=VQ+rHXQmTDUoETH80ld*W6gYLM0&B
zTE3Upk_zN~qr+~yPCyI`ag=$}ARr|rL8k<SAmk(DEjhb>XIT(b6bM{C#m=Caf>5vv
z<(H~jU!^$@VTSUk-LS3Y$gMkVJ_KJDx5Kg;-$>~{fgOfVDin()E9jVHmac^%sNRkJ
z8`_no+m>cSN3PcHN}2T7imTg*&?hH1^IuELriYxlnsnEsuA8XdlM%b3{Q(Q2w&{Iy
zJEOV90Zw9DH^2(&aR8QOa#t$&_{t|UfR^9<IgyO5?|bLEZxbt^WMT%I at mkzBWl<pa
z2q%t|R{^SB&f*q-oyGN;2^?C3oKs;S67J>R7Y5TJc6zevP*cpjn=4<J_|>tyBV!g(
z_;!r#R7}~Rp*&y?cw>?`v_V^kVfJPD(c*bm0&F{~2g$5j`$^)qlPT4@`d4Yo6a4@*
zj1!Z|DPdBeT9KHN$&;`DYY2Kdb)Ph$7S;S&-}4&Vgx8OV!q9j;ih at i-SRa*K6>dD2
zObVIhZQY|!iTaf3QI(~O%ai1+%piL*v)+|GHlr}IXKw4enN>=c(%*W*UfwKe`Set)
zD4xiDt&9H|zVq$DYqHE4oeatI`N%H8EPRJVXloF^MUZ_;`_}tFT}IL;2nI()j;dTa
z&lKU1NJVAn=hFxKfX&>5RRiJ?y$X0gzFu&`^k!^$51(q3|1fw-GKfOF&jSZLvpa4}
z-iac!jlnCUz0cMT?$z*C14o&D;c at AU0nWlVou8m!ISGH?wEmIqknz7Mqz at xd2m)-E
z_`Ws+pAD|Z(yc{d>e%qbAkO%Lrm{HMQOPDxPC;*T{89YJrK=TBPOtD62!slAlCZ`8
zlPM1QH~snD<MdJLnY$OAA at q%dFN2KY$!K=LsJ!y*ntGhh{5``!Axu~YGGnj|yk;NN
zM3|r9D}T{!MQ_ZqM?(53#V^R4`1ZUjQ1-puiw?z);vI?`#mo9);ML<%JZXKqO#2|q
zxBI(9S?cEiViO?-V#aJd)FrQ!D7s|{B?F94Gn23wWPW1aP;6c2MBScP^CAyM%x~T9
z$ldRB<fvvNL8N;hX}m=^bah%3DtiU4R^IDet$wuY;`%>Ev;A3uVNoCGM*vPp2kY^D
z<R2t(W(JSX0rQ(0i)9iXFg_bDsVt$-4I+!J!y5L`i;j?ISlhOVa{~(|&fVB_cW=*-
zJzIK}(`$rx%`4ZQyVILe<SD}fG>Bk^C3vWJ(pO9mK8FdM)_q={L~-e<YRYs|i at 4k?
z|EPQP`|qex at 7lp{d085lHWJcj-KK+T{pBFefspoW8qB8=67KXlH945)v>(Lzib4qv
zZ8}?+h7U3|&-U2M_K^#e!M$vXpMP8*^`WrahrZOs!Vkoij%dvqIEaWjeXx1F`NOFf
zUbu^?n^W${_j%{PPEbEp558`1{9_vFI<ffc0QUx6deJO<Vx*=5S<JGhKrPPlDGngW
z@`64!?D(RfKX_%!34AhX;PPHh1rXh at jp5VD5iGHB{&aH8cpo~|%dKDi-eFR|S^esF
z;7j$}v0wdm98kaUQ8VMY>7<7}J~#!e)=qmenso}a1zjijA|pA2q}U<PjD9o7AjY#b
zU+X7x?2I;LouEAlit2jE`VRPZ6gPFNWIH}AxBPK*eGPu??$UMpq2en5VEQ0&^6teC
z-km7gR^p#$nTgNztPBbN0KdNHJ?FxUkG+Il$46c1kULN<_xoi$@c<ckwsP=~30V3t
zw$C5~-H#`ym+d#VStA!wrWYNH1NQJVRfO46*<k{c98zP9ok_YdKAn1fW|DyHy9#g}
z;hO+6R29fl%kMjn*KaPd)Zy*eKx6}HY_D_gUF^40IQH8qxcz1dYYhj9!1dXSIQ?b{
z8M3Rrv@;IMJDAS!6(rh}O2Dr${xOpj`i49k9{^udeAw6$q!JQ*?FTZ)g2-0Y-J<Su
zszAcSWO16_8fo;HMfy=kPI_8z74v)WL($5rbYxK#Ktzeck?bM6;Pg_nd&b4H$PuZ(
zsI}qmCRKnm0lJVnJ$xDX67Xr9ExP$TJ`l>dvUb4ephko*fI|Gcr<byx-Bw*Ha{0!p
z at Ic{_ at sLMV)^tRUU)kPzsPCH9@)p~h#z(VA7qjU<9W(N0lS0{w4>_5-OI<c}H6cCd
z^y161YQhZbyktd}6^^^BePJaLp<T at z`YtFKQ)ZKX?A{XNirJ(u^YSeHPAt+gr*@BM
zomRTDCz at V``SAvup@?&$XvC*Op3FMC*=lt0P-7ybx%2M0pDIr}OvL`-#~R>CHSLMX
z^nR=i<M)TazYM-ZB3~CqF%tTK!VMHXC%}$AO>;j?e4t6wbO3)C_>z6WmmblbXnZG~
zm>>y^tJYl(aPK(a<@P*duNvE+H17}|x_p9wynadNNtCn}ARh>er+^p%zGIor%j0>*
zS87-|K7f6r>GR+Rf<J}va$~CS6)8$VuR|`h2zq9VDBV;@%ul3rA5fz^6AY1>Bx01b
z9*v9neN`n?>YS29xX1;GRN-F8-|jY=K0xuCPevQ%DvGbOS6Bk^b)2#KIrreTx*A^G
za*8gq;?mqfZ8hfMs!CY|6*-T22Ss4sWBPapMauH1$ds)_aO-xNPr=fiF{&bDIl(-9
z`v`OP4!Q<LS3z=Q$yDU1B>lS~Z?6AT7C=SL57RFTwwyw}eUcLEG6)Zxr|u6gw>k6d
zzL1TeB1Ilb!^?DMwYzPQz;WU>Lb@#G!ZYT0q2!Z~fmRHCBmT*VQE$)FT_5r4+;2Mw
z{Ak!K?8w2yj+|k%q^Gyu`4v7m)A#%!O9AHVV2hd^=RN at GbeKt~bjTtC-|1%FlvjYL
zaMB+&>j#uSWTksLg%7<&bfH9wAp-=!a{fDLE)L^qfN&0m)O<VrTe>P_V+v>JbFo3U
zKfD<Gv6WDVo7H$wP3&H`?c(%Nd5r#@zN6w(WYC~DeG^j at 6Q~GXnnWu3DV|V;f{wG5
zumCjmNIKtV=+$-hb?`>lt^@rI(yyB`v<5GqK66Ju=xa<S4-eP4L98ifl4O7m4TRHg
zS^vi54v!E<w+x#-1}eslCh<uVEx~abX}F>F{eB2JCnDVk{o!Ucr!SqoQu_vub3-(z
z-#@7)@S>Dg;3q9^d at HXqy?yM$^q&`_a+j#RZ`br)na77rVg4Qs5eZEEL0TVXiTT3~
zw4#_E-YvzdPT3PRo3<NfCSQdw3=_kiKaTz!d<*TlDY7Me<g9zz$FvLb^wD$*;akop
zthdc=p2M>iyJ<r<jHfPpRWE<I#6)adc~xp}x@@RSV<UV`rV-PZ6rqZm=d+9{b4e;`
zK%wf*zVNK{XD7E)qD2x6!%^WVO;Ph?YR|7APy$S#`7}*E8aB%w!-K`AIc|KNLtk2c
zo<1_A9+{b5-Y77BKbMroC-(6}GV4U7)u$3!coF?e_elEEVJv5lG+A{jC3|jhO+S(`
z&3N#Mcp`W%n%6M>!m~*>lZds8TT(%kcHTe!ev&abog8DgV{7*|VM3X_!gQJ4B<>iO
zrIX%_{M+u)?$a;4DE)R6&vsn73~MsZ`}>TUugIo*6J at _17?4fzI~$6J{wDLs;}G82
zWLD~*KkVm@)PIP74HG1GYk6rfN^xKPbFM+9naAD<el+;?S2^gHKKmrKfZts6-c=2S
z{Iny16aGt04K+$?&xr-2B8FOA*`u+=6*|g!X>lE}aBV!)1nEITEL_x*M<#;=qzT%M
zt22Oc0UV5<XOMnkJZ@~t#7)sByGP4%*zZose013OD1#I+pLLH8|JU={oUfOAV?*fu
zGtuiuiqaYZNz5KLLC1}oY+e;%ZN?5Rl`c1V1yJJZS)9&!UE$d-ZfE2!gtT~;WJTvZ
zL$pN3-Z5aE!$-tT%PNJC+IYP<E2)?4#Or!CHV`HhN%oX_aNa3cx_^#DGrG8U%7qsr
z%&4QeOAZsoE|Uy4Sq(q+%pS$dFCbiC1(CDtS-{WS_^F!?J<~NHZpw1P$}<#M<F_SB
zuMi|JjxguNA!Ph at 9_i-TWP8(2lp{HH^~JNb+LjrzTK2oq*{AqkW=8u=(%o56^XI}c
z0~Rlx6nI;XKGDFUe!2PVu9jgNQ!>dZ45g;zC$h-1#RHcKyR7CEJ+H!-tqy~mT_u*3
zMsODEs;@d|mx=9lLP8W}WI55+o17r*uL&efQ-0&Y-CcwG7ky7Ne)waT^?;ca-(pGF
zA=%C|FF_3 at f}T3SIR(CS at UXm3rC>hj9_=l3wUw_OMBToZE=#hv32oM#5 at nI^6=wN9
z`PZQSS=O%L3^mW?2EA&9fAY=H$ADU=eVpCW7~AB=rLV|*KxD9=ERQqR%_nVDAYW*l
z2 at gpSv7-U2I98W?dspLgp?%?H2m2lhG5s#fdO466v44;_t!40*gg&jt!q_>V^yPaU
zxpyI<;JOjk#w6Yy>a<aoMN&+<Uh)~1roSDy?E{n{W~8i09b32PC1uz+aER8lnw;gU
z7KGq;VFjCP51WjS(N>(BsYhe6^}}x=I~uS`h&NF{I`wqqW6WCQ6XWs77&2`U7ck3q
z0JESz#v9Y6(qCUOX9MmxJUsP#-D%5gBDA++v(4-J&CpAFPVLd3;rIScZ|?li#g=39
zX%JzKU(n2O&$xNs`<Kt~+t>K4NPBIc;{Km41Kij+Ihzb)g&EgolcEV__}Qv;sNn<r
zD&aarmrGXPB5pRu`yoRwF|DVUzon)3{ALS$SEKEA>-*ZHAmnYx^1U#I{i*S0HtA(v
z^E~GM45QToa=4%dUykm+YWWfPsPiyH2QMI3FqX!)h%O~>Be0{5FJEvWZ?70!4*2;8
ztg at JD_sbeFuSz+duI-lM9Yo7d396T$_TcXILw~m2?$5)`@?CvfpG9Bomd4B2h8Yb`
z2JWL9&s1X}TyJKmd3t|_=LW=E{>i+fG;@w1zs<hzc$Le{Tz5~!iFglWkZ&A6Y=)oM
zuyjw7EGK0-Y5)Ye^)E at uw~K?GmOo$a78_`@g0|i~48K(YjV9toJ1#?`kM;AR(UJ7I
zP~zte;lB<WGf5u^gTnS4Y;20DJj~^7SdL_7)D#{vYsDKt%$c?9?g7CWh>_tIpK7tW
z`{Gah%=yqXJX`rigJ&*GCw(@`xXmR4)Id#fH=q`2g%S<qaWsTK1v&c-d6he&SAy^+
z3Scj}FLTT{sL`}4LZ}ceV2IOB?8lyq&1RW0)edA*Bax8hZ>~DJ4?2al%a&lLw4<I)
z$dL#=`s{bxwC}V2GYIl_7L5M7egOvgHl482#lv=W&E(ek{&{9|)~%cP9j3saC3QSl
zofV!>Q!;KZp*Z at D0a3JonP7I|H+CW&G{O8gVsZ+8I0auC-Nq!Z(Nz)dq)y at qAot!H
zOr7zxV=DonsGLiogy}h1u9LMVLh4~hk30o>wG-&p&hWWtb?4kd{Ld$GuOOM@!gp)b
zH4(PiWv;%NO}<on8M0KRBC72JltNcMGy9ggDed;Wi`1tr!rKxeLJpUeB2Ke- at zeYc
zL^#_gb9C#vM5?(^U>h#*K8f>q^7ZP|?C>^xJ-FTe(O=_7Ea3fgRq<C at J7K1%d9jEt
z>ib>Zx%AbMJ+k)G1wn}Tsb%!@?&HSnPv+a5abKWor}0bCfqEsAb2^?#7-Rc+{6jNw
zYLU<|f1T}TUE#V;)m}u&i_Y49t=%!>=afW#^KUDSASL?l?p+<`nFJlMJ^m=9?)gSg
zk|}xNS^n3#JEnZO0EOwM-Lo8d39w+LfUqffUZr5kymc!B{Fi*HM!S3UY4QrbH;g_k
z|I-ERsFixg8r%DtTeIo_?A{w|P}lC>9_8=0_-BQ%!W-Cb@><C#JjX%FFvsgnE8N!_
zdA8uK&HVL=8Tq at _=zvhs$SX>9 at 1@cjyEVd^f%%u#D+6KvAL04m9jnav?+1|o)A%5T
zC?TkH8*YdBhlaj>wIQw^bp=0~L==b=NB^l2|2&RzXd`o0A#SP^@``d4Y8Nq|77=dq
z1ZtilgFDl)VB)Zx1B)c`iitLk1#0gyrhbv+lxQ7#qFf}oTeU(#mpPI65uBwv(#jkQ
z2q_eLKiu--YG=RXzyfiPlC~z?Kpb7xE~RdIe*mO!Xvarn`L;>fpO)L9 at dfYyk=?C(
zrIYWeW1lJUpc?SL=7Cyj;S(80+56Fg?jM3}KhNYNYR3XnIY)(dy6i~V-dtt7vn#x#
zBQp?D<BQcqa4;IL>zGJwORR6n^@!W4dlDbgQsL at geDoGMhWW+v6R%@8AD3~}pmQMG
zY>_Ju7tF69EHeWMDxv7&>aOV>kJ{4rEbX*c9Npc!Q|Z0l)q2?6YsH>Zka+@#5qM|R
z^l!!cptl@&2Q@=nxQFeYO68Yn_Z@%|Ho35NUEO&`y77<WEmu8%t at J3Jo5^~M at H~b%
z9v}b69Qv>0l}9}vZnlhV8p at lVWxw1xJ(^2;vk$E_w&s$d?7M4>-iygpvzhD~W65ID
z&BouhWVat)GDk;XrNj8mV$z#)T0WxH`1 at jfIL7SuKED>zTdoZ;HHTUFt&Ur5hfb-Y
z2uEA5+~T|17w)>Lgd<m~-_RDJpF78ry|YuRk5yz?rh)cD4Y at 2s<pwG^L(SW_5B6=h
zy?AVUGd8_hsSw$sg0?O1c%O5%12Ju>VCKin>g0SiYF*uJ6IeZ0Ftt-{SyrjG5j7F4
zvT+Jl*?k4K>@$T`*=~jTi1&nsIcxjmgKa{XeR1pjGc|>$@t|CN**nVDtGz|X2rlig
z4(+SJZ}GjDj0Yskpr)J_o3-ApItEgUlL;m8$~jZRx at K#~e8uk<K76rs`D1w^$~S^;
zBlYJ$|2X8wpen9^&Y0B!U&rZV&sBwli>lPrK!uauR8yTkhPkql?4^@RP$TUKJYVXM
z#{Iv(zC5m}V|#oO2;AI&BuFHnK!C7_B4JZ%2?@w at 0WC`am!~Cy2x6&J2o_7cLBk>y
z5F|z|xGQdTc|Wk#CyGj2Q2MGU?i82$wD|f}Q4s^kZzdrm*!KOA&%JjtGiR1FXPG&3
z&ezqzZ)!i=aJ~?WicccA`QNAGm%hPV;*BLhGk->C0_7`l_enqhn6Obg7lFrIGJkgC
z36*>h<Ft0IMSakFRm)18N6M}T`6I=%k7o$98q}I1Z%C!?F-yFP`yR>{H}ScxveIfW
zrxn&XL02Om1g^(CPThIF!DSzXTK32z(7%!5^Id*?{N<{AyE%^c8~(XU+d)}q6DGS3
zJJA9=m?n?trG|f!Yden&S>#OJElf2DN9S at fbHLoevnYNWTsRA+CCb*@G7WoNeJAL?
zVeC_eIRS*<T`s(kw)2a$s!%MWh6%!pzOF>ZSc}eoT~usM9Fi6VB3m%N-**RJrH&_C
zcQcWqf;sOB*!lE{k{di(R`_Qi2;oMypnY<2PnLJtg~3^?X`pmbnnelGCY`Oy&c$sg
zdsJn)xC7;q>QFB3W_<xN`a%pBOKD&vberY08pW5Yr at 457G2`*>XDX2t=a81xYy4!f
z{fy`SV-cJ2QriaIeSB&B{up5 at ZP`$jEyJ*VsC+@}o1V|jfLwZgj(PFJPiDP&fYEk-
z3034$U-0He0mj=3 at o_#{pj3>A8eE9T?H-=!=%U9@$QnV_%u8*x0LZF1<22HskyaX9
zWu5MEVMa)WjH7nas9g2$hwmm at Db@s!{J%NfqwE)Xy2A|1y_K7gUDUf(;YzvY_AgpE
z5E!G{Quxq;8B!$Js&?|p0YqO*NTNS?j(1os#zp3G0eq56k!_mooq#^F`QEZkG2@}2
zU^DaW9Dm2}XTD~`^c%4|SAKPI+%zc at uyU;cHHIhDTpMI9 at M)@yAH-U%#<_hJ0_pOb
z7<<I~k^1)}^PFQVJH|F#HSDHYbS+JoyDG+Z`N<4(*x9FKEN(8n3a~cPj?Y}wvuRx}
z{7B^8-&yhe+PZ%aUt8O at 1*m&x9S9Ce1!-f4`@JiX4<zZC!+xghm|~dksRP at hqF4e#
zrEJ{1t48$B?Km(o7zHmPYG^hZfk-RNlT4uSoBs2pruHyZB=e8=CcC5tL+YLG at zBlk
zNadzLx-1q|*8DF0?93mfMVRvkm3~wmFT9|y6!7gXJ=s`$7>H!o;=RYz`9-=%h`;55
zN54I(MN<ut-2?IujT6NvMj(l`)kv7qlTepry>II|i+R=_E(-QB#rDdoF!ROpI)?vg
zD=M at 5IidKCJ7!+8SWcV~L7nrMoM^4V at NV8(1ypi9{oi0FwLgW6l6>Zc%%~JGWv5+P
zuQvx`0ww@<cFD*PeriMp=CkMe{G&y;1L;s2a)xP>87`z#E82r5*qAwN*`!<+ at a?6(
z%g?-BK$*T6ND{XKv)Z5b=b-m-=S{zz?g%6^=|ritlW8oyZV6VsTp-c}J`6$BcpyuI
zfChYh)iQ{rLajg|<p9ugw$#(F59C0>lB>x}8e;q*I8=@yWg3jXj(G at c-{qoA-4Rwb
zt2T~Q=#lPGYARm}hu#CNic{N;mFs|NNd6 at 1fC1Kf=m6#_XTE?e2S>=veuEjqcQb^{
zB*JQR>rQjW_?_Ad{y~Eo%r%wYiK$Fi%6-C%(Dh)jU85F0^94-?a=J_7T65i+t{gvy
zA35m^z3yFMgx^JZPLBkbE#d){bi6OH`-U}$?!f!cE5%Sp-k#KSmPEaEmR&zXv2Z&(
ztm(-pu~<8ih<d+7)?7e=J#ij4HAa!0gc(=ZG+!&0gi53(q#wcNGxNmq3|TquDN6{N
zg0>AU(%1Y-&L)t_FIP4mGq*@T`+s2^_+Boi=N%V?I;i-p*WY30WUK(|=90<9(T#j7
zINavulN_HaQsf!YsscK!m?cFOC*YpK+Cd4b7*0oiWDVi|L|N#RD;<&XZ839UZU2|2
z>mb|zaRDLafmwOkpUkoo9_*hqU2G=(6r*;q6rxrrCw9#gABPm#yf3;x8XY|Qm!7`!
znk-|zK!@~0->bd+l<?j1#t^w3>1gRTMYjP at ri|l5jvFAXWV*jMI+{@XlOlL}id-@?
zjNm2%YB7>!7~2T$lM}2L$Z^{6DYaJ*kKoqc=?tGb#dsk^I-7uIFmH$J1%<3yfXUXv
z2B%V2_ATGLQdZoAk@;!hEK2O=i5v3MM76T&SZ>~7Et~&!_vl8u6>JC>rn%3kWOC+k
zvAxM}O!vvEnb;!up0`vH3<ai4+3JpgkQb)kA{!KaW0+<dGY}T!Uz^ol<qZ^ioqvo1
z5-={DYEm=Tk>B1gZfV(Z04@{fpxWVOj16vF<lIa;^XVn~b+b13H)6Q`iT8DkDyYp&
z;I at 8nLOou<(rgiFC}hv2bo}8VgHTdaQT-bmsyl=)b-}_ITZw7*4<gQmHQEA`1y>{f
z)wi}MES|{)@m20z0jnCw4ms>qNeXcG;*s5h8AsDSez%Zk?r^)XxAKa}%+4i75j1y^
z(I-6lMU9+y$8tlxGxIe%>|-m%;2%mHBiVVF5t|8rd6-Ud50e2Cw6>pQuJM&hfk}Fh
z>P7+XVfJgv(^i=r*z9O|Qlm1H;Vxmcep<MSVlJz}JO>HLK`3QTT}}7<=@z0gop^>U
zpdi&rfJ|aF^5?;y#f|%#Y1DIbr#waKhfV1 at tICt%Q^<>F=m8VZwFeBB#lq?JRY*`M
zU5$|lq^41qv{eVZ0JAhv9UtqYJj at gA2{eVkJkR?Bb7g?0-++LE)`H=3IQldsj=s4C
ziC`OG<`MGnp0g~jj0-q<P@`H2)iyGBeLowu at 8*5u9O=n^=4mLfSBAH8(ZGIJj<#i*
zC`kWra*|vsuW9AVMlYKG!(<He+YG3X`OPku>KX`aq`B1~Z+)R?MZ*~R#Rzg&8 at oD<
z+(eFe$^kpZ`Nyn9>|MGDnA2&Zuk*7P8Ph%BfYwo0vuxKM(Z%&G&k8Mytnr1)X%M65
zD_?4^Rgk%WJx&na8Au6N&N7Arz6|ZdhxA7r;OD@}nB;tEda7K~8*(&MP%}<Y{s%#~
zzZY=?5!PgLQo9n61tvs5#hF+*oaYEEFB^PS+~u~br#+B<Gj3N-^u|DXt{>z-PV$U=
z7x}UB?=`^8!j%_o_r&k|Dxbf>HzRR7&8>zrCI7gc@$y&#>yA5^qpQd9*6B83D)`LZ
z{=oYiT|2+pe(zFEhI|V39m!=_z=F(}PBZU}qU|QACz)Hc8UUm#KvswhdgGX at n2>W?
z1ezUU4!1Md1c<cTVvB;eblcw;3OuIv%4(Pc40{_8wgnI9v^76bsx>?+_z}f8Mjqxd
zM?tB!TvMmoi;O8kn}HbC7c8HZ%%>vrFUyFGR#UVG%BWj|A(M?rJ9PT9k}HFN+t}*K
zs3NpWt2vgaaoA9n0#*!d|Klz-(P1qzhho|8u7l|nAz>C3GPA8XGO^YXQUSYP<5pVp
zU7;p5TfCZ&QcVl7Hal$#QLBe4q3*(lIuEQgB7;srl|I}u(xXk9>xu?}y8u)AiU2c9
z97-QT$z8S+Hc%UQoE0N-QcO%@a*}TjTl});Ze^Ochso3}!;j0YNT&CU1_{4T>9F at 9
zM{^FOsqAEyB6zUwm_?eulL?##j-Y|*KKCY*>+r|rN<*L%rA~^wNi62wqGu%|=|UFN
zeKn&JteA~9HBj7@(a3T?{M7JciY3{%n7Kk@|4kyJurk<_EgWY?Q7hMhYF6BxX0><W
zdb9dpJtUVrHc~{=Fkt4^wfd6DL5$~C%Nk6MJ>NF;Pp0wbsq$sHX at IWa$+uL#!f7i)
zXI4Cau%XtUAn5-(9rJO>p7(WvDjjR^FoO7CCfwv}dGGXlCE6N5|D}xnnK<@OMil}2
z_Jn6cu`LIVfX)9I?Vs~U!ZN<@q|DDIwfQnN_ at yRlr7;2Wa^%PmFEb*8;f8uo<)v2i
z8pWpOIjdH$#V3+!yVY8!GIInd8)Ki-C68;vKL^|&{eF6QwkTEBIo~46-_U2i$px8#
z9_P at QytmAI=d4H`C~{4ei#|8<T`O$@C=@8+y+vp9JC&|A!dtrl&b~1^0U;Sj2=`*U
z=(Ug+E_SdE*{1=Tw)+yyVEO^T7Y2uwTm;B_#D06v^@vJN9>MLVMHj~a$gWOkW1A0G
zsJ*;LaJpc>+UvQ;xm(o9sTG<=N`MG9P*u4OAIBopUO!4es$ID*uj=SJ+ at 3_`vu+4E
zhBWf-Uj0_NW>dIpDqV*~nG3TVkS6})eZ}H#(~x?7U-TXK81M7%vJ-=1WLb#Xabm0P
zI%({7sTJS2&v}2av<^^mw*r#>rX0{CUF0>6C_b>Ac3Zn|U328k`>~<2Dn7j{OI#o6
zDX)?KfH}LI0D<~Am96f3Zq0m^03{jO+dqUcJVuFZT>-tXEjG1llYVee=g?WkXy>-;
zWq|o%Q&8`;Ti_ZWC|mXCKY}smKf|}&R4)~{C#fFlOY2z!1p;v9iu!Wj1^ME>9(gii
zO&W+@$m3fnkQqUu?yd3omdV<-``bNM#<iU`_Xk|h0H)!T6U!!s8lJQWMkrE&0uq9e
zYj-*-h3Kdk=`!4Q!LfbEkS((BSI=%*@Y$u&z=iNzFnTR_!$)*GJ|z#0^;SSZ!;DOZ
z_$qDWJv7Wi$fZw80S1RUWYH3FJ at PFK)#2G_n57C}WDpW`Lhmej<PPp#6?x{kzNdde
zoMQdhhJPa;FMCUH`*;nc?DR;PyV^3c>c1}Y2+rpa!_CvK6VAIIu|F>wj&!U$IDKuy
zfmIo?snQaR^vuk_XqgY)xbJSMFC*78y7|(*qxnL{d}D`EcnLO$Aut%qV=lr=Zh^uJ
z3>pCvk}yi|o}m2SJlemJbuJ6goxH&n>X5l?i+!4(2lsgc>a4xK<u`7pkI(#09&T`G
z?62aN;OwcVzzSKX=8{r4S`#eW>J7+=@Y&B{dLn`8EN}%-O!ZWKQG$;r6^{>mA8&7Z
zwT~xXYG_A!mP5Ag#<)+1j4{ZaN*#41&~*!#>i+w7t1;x`j!6fsqZv8j(v7Gl1d(~V
zZS`R$P&2c8#Em^5X4iOyC$bih5Fq4Y!glFv2Xczx9#7~`u{Pg55nv9?wZ#UFNoJUr
z0*(7d$lB1E<R8@^z1zMgXc?@W9>)9etQ0DcGmC&#-_oPOVylNB%M%z&6ENp9rTYG6
z%^r&~H!i1-w=O4LC##hGCWgJS+?+!Fus7usks(wBg*X(!BBrEIxwwb*S~H!<Abvf^
z;)C*B!(F(fEoXX at Y72TTJM15g5UQn`__#^1L8L*8tc&y}iHB$ZJ5hEe9Zy3M7OQo)
zY6&wUMMUtksH@}B_#4LG;M)kUr(<dR;!JaQ`vAW`mYRl133Hfd9?BD;45q+5b^;a5
zQ>e|;_yp#eLEtb?hG26#rpjH9bKK)xHlB&fiVcfOfH{w8bNU~LIkSb-Y7X;0s%=`T
zF`;T$kAF<sL6&LzY56lL>NN|ya8gfGCP|<Q5H%XzK0#QK8NJLn%NoO>_%qlIM<fXH
z{Ybk&h#PAtXs<hs#-#RA13z1mz-MJYI!P)P$A<XX4blbIp;lD82BcMSsDdgcQ+Az?
zeX+7D%6Tv8uz{x(VG&9rAgIdX{_1of<X7&2&|h5-gnt!^yzWYvXum&x`^Oh;Xd+Bn
zn+T+d5-jh*&d50~AquV%n1#WoU}YTji%OWc2Dx5+&rfTDfC|%{Jq|84`ML9<Wcg-S
z&h#4G!-nlj|8m)e#r>cAzYOyOQ)Of*q!Do)1MAQCgwHX1xF06E$U+HlSTy?W3BR$!
zqGz+hI@>t#+o^IRx_L7g+{EPmSD*|smW>DWq4<sgCokiJCzmTEu(2;%-Yjp*D6}^c
zE2Al5W;EqJ1p1=XrK9|JK$k(~p)Xt>3GpX{jL2wnLM-0HJheT8!)=#ZVJ;_^^vs`Q
ze1ES%iFs6Rgau+b=9z9H_cz<%svoa*wA|fo+*D=eo9~1h*%aZ<oT784HZ-&8ZFVF(
z>*Nk=|Ef|m0bA|ZcDs8ZbM+Z)T>rTjQQsN5rN1c|L29k`f?}7(s5jKEI)>5Eg<hzK
z#ZChzv(Z8DsXON?W$Ov#kKXmv9kOz5t;2z`S>ci--+8HiKWR_zcjMgO1S~j`;*Nnb
zV^WAjDxQ)$`5p(fRaS905V(HJd7IzM!O<;eQcGNro7dz=C3`D>Q*)tS>M>OmXFff3
zXBe-l5KPOFi+*+885S9Cxi_K_<9-zuXP4$L;x}<5_wh9nZUI}wmqI~s$>Z*C*j0f0
zskK>6K~bXnqFqKMF0}wS|E#OGFzBgg*3W6cm@;kd4(rTR0y{gGrgleX?hL!Nhgf0M
zy{ToE4O5&Kx0X--hpAz!;gEf)r_itgN)cC96=#u^=@5v&mH_zf2^$rV%Z{^Pz%*4r
zIX=m!lP03)Dj~|=l)z`di at y~GL at 0p?8$O>XcM7!><m+s7l|C7}F(mu1s<<5YCSwFu
z8aww8$TyK?5Uf7PNWjLp25Iid(LDZ7!tv2|y?MgZvwAj|>9&K`PQ{u9ECN(+{EP;_
z?K#(X&`>><8+TZ*%vrY(Vu^d3C*`<*6~^Gz-~i8sU70`<4(;|tGlwH;<#6P!U)_we
zgo_Kv=EC2N{+XHrCosl_YhAC at kGr?BVPOPJR;6}qx5t_<r1Z at 1S(t_OT*q7x8us*w
zn1fF+S|tlE(u&Wxa1!a9s?WGw&GUl}oP- at 9M|w~v>yc%?Q at b<jPy;v=L7oJ3YgRbH
zRs5#fDt0+fNo$It&Pj-Jzr4M$7h#e+&TX%~+?7;WWs6S>+hIM&Go{!?DF>CT{vd5S
zRJfOfXRl0|m$PP5ztKn<kbV=s>SRQ0&d^PvrD|#=Zbo_xmvQ~CVp#PZ{}+Y=yniQ#
zaS{lgzS(i+Syx3&=_3(WnwpM3+hG_QNZ1<kpybF1UQ>C6kk$bsR{_1BF$%dRJnd(W
z<I^x8XKuZcZ7gGRCPLJUGgz*-VhyD`L@?*10R^v7ge_6#QNz-x3aFIY(>gIq)?1;a
zq4`qGkj5RK25&cSgj$R>%tg)G_(85?`dqL(z at IGwxpi?&e>Mv^t0bVHj-dBOH-sPQ
zWODo)`YHHtSuV&@hZoEQD<vRw(iM)q0M at BLM>sv<uj^C6M!1j~qmVC>ItCb%Az?`>
zwX$#%K8L7tC7c$c;N1Y$J$_jjl%!UBJjYxH(S0?zIL;nMzGl#-bn;Pw3G<^g6#?*f
zODEjPx5Jj-bhRm{ImEoZ8=ovzOs2$yO|0mj*Z2aVUcn$jJzuK7pU_e(Gq`Je{p at Rf
z3=)JoL8+8a!wcocXEGYwG^jU4^=TD8)oyh!#9WJNw&jL)`_>1UU+|f48S>EfX5kCR
z?@z1htMKnBmsFB!yohWTT3YagB_XR;6z}?8haCcp$h`ffY-1B$7FuAeAC?`~^(Cpz
zF^Mx9Dp`YOpXWB7pRaP|-ekv5?pxjy?(e<cSpfC!O6F8tT(ui>V`9|I7E!=pHGv7L
z)RP}39gj+@!@&IgIJe~C at yxU)43JGluDn;e3TPu0Tn)s;RmGYLYF&(jM=IcnuU7mi
zZN>QwN0zQzAhDacxP5+twlQtjM;Zf3lC$yqW4cAzRs&b_w^>j+n(BM%j at J(OKWVO~
zPnZju*Hd?nRR|I=7eiY1A57Rz<ylnp*a|RjNW;ogwXC+MNq`BI>dB~=L-4;$2Lh{P
z#+gd{;OhT&hm8$A3u|K&G<{ugb!UYrBOwhFl*9QwNsgr@&l>gfYq)0WE_TgDYv$}z
z^(AQ at HV#TNFA##A*`x`eIydH`TZNtlpTQ0X_ee*-*=MlIjd9e at Bc4xTV+=b?D^qpW
z;LfD3ZS^JUj!G8h8EAmNTdp9-192vKsVE$xcDE%W19OBDfR&HcD}K02ZfUu|`Bn9=
z(_i__!lLzYx@{T4RD3C;E}e1iS-S1NpT%+=W=s1K-xRDb_2fU|#zu5ec`?qR<o<l6
ztJzI9lw%E8e)WRs_fxm)X$Xp^RlCw^@4|y-_4gbdn}<U+Wo!(~SXzHfm0fY2x*|os
zOi-_9EU0YK`q-T02WB;II$PZ{COfwC$3uyMS+YcIMIOSk{Kt})PflPiV&);tAYNzt
zWh(Zl7wyjY&dUkB=}PZrYs3TtqIZXYz$gD}i+&Oj;7(`9Rs at ViSbi(E`U_ZO;r|A9
z=JsC#EBIf)7%h&!|0S at YKf@vsFl0m2Zj0SNJ>6={qWwYr8;*n~C;w)lh at 1)(q#I|W
zU0BUtrNpDH`#%T6gE|jaEU^E~nU^$dQJeHWd`TmR%BhaCT<F265zO<r-2HzCKN(1p
z at MYE#u55ycD^QZ`B}yihtwgxw3;eG8f`$YX&ma~o-1nZWYrk{x)q>jhTN%nYewRD9
zHOwD#Kl^!Cl#GqJK->j+{|~-j;R7j4?O66m5u6zmL_Hj?2yV9mS2Bb6oMht=1 at f;o
zc>Df9>h+Q%{z^HmvTCX6x*ZN1%H01GGPrY7f3E68#0lG-?L+KRuG8FeYrjj${O=zM
zGt>NVG8^P5T`6le$5Brr;pm1drS5UUw%k31kxw3|U$NI<6dA*n@@b8&vAD*Wa+0fF
z2uTPd#9COS+krqN#>L7W@@$OO&AW`WM>bpqp@(P7iTu}t#x$h~5Z6pG%3q>|K~E%2
zVO>V^UE~#6<W)0cvmb_Dx-u)tvUWaC_U1E6{@!e`j}udx at 1F=3xx}n(zcn~enzd6L
zX%|aRG&kPcxA>ROiWj$L7E4+)ic?yb1~h{-!TNq1n$;E%u$UUHp&nU4;iBY%G^LXX
zo`iUr1Plc at K5(rCllrFYoXblH1o(|{c4Yo*WNexUM`0XWpwL{{50A(on0u}#)aLGA
zI$@hvoOx*mADm3d!osd%OdCi}R;he|w2n08)GRgGHZ7L9IVFpm?;q>%b!H;ioHCBn
zad*XCPL&y}{oddJO-TV?HNbqI!#uoLiy2DN^eaF3O^>xn^v@!>`Hy2w4qbwYZ!Ccw
z&tcvD{Ep#h%Ahel(UoHDVzGWjrz_>N#m(tx1?)Vf!)AeT%MTR?4Fw&;6+%x;$B%p$
z5Rz1bxg>i#l<3)5hChE6Bt9%EkDtShy<AH={!SL*Tmgju?e~X=ciNmE=t~#H4NctG
zKe5Ih7f+UBZkd1<mVsgL9WQIXMHTNW#oU$xGxddl*dgmE?6Pg^gJ~0x*l at -;EK5{`
zhCghvTv5JxG_7PLt++S!*}~qGXA6&P8d;i-y0!Vt at J=8B1a@)UFZTJkH{4d`ZNn!E
zy~mQee@$3yu=smZ<f5UGpufUrYOfd<%VN~cudh&kZ@)e~u)apM`WxI~N{xh>yC{&J
zbrmXRMH=xuis9lsFb3ZFSbkaNAYFBD8}8su56c3 at k!()jSn_jMw95dx4q5~&*hH24
z4IUuUR@%>ps*39eC6^f9$=8*P3uS(b+L_h>Owt<1QB?A8a1I%^R8+i+<8%4&#e_p;
z6>;WUAQn3ObnfS)iGdWSR0lFEK`W{)dSWUse-lXODk;nr6V71mw+f!&H*9GxHC#?w
zBA{g5)aL8 at e&$8QP!Tho?*cYNvX_}=ortqcI%*s%+e^@i_D2J*&V?DS;|qxk5e;Mn
zt??OHxGCHHWTvkrd)3DigV at Wk6~7biW4QKFJ*P3`+L^yd!0ShyF_E3NX7jBb+&-Ci
z?!k|l0oh44EPBiY&NRbeY5C#k`o1uEgkdyT{w5JUeOk?im5`TC(OBhEAdrJ<uTSO)
z&l{?GEk8^<Ww04%cWQk|&e at DlR(`!eHM0(PqbyLR)ZsHI9ja}0xE;L!vTtf;hy!2M
zT!&kIw(4p>cfK)mFFzHog)Nld%V)#^hy|eGcE6P-?G{W+8c93fZ-mk!l))zDiP|*3
z+pa)X^j_l<4!Kui?2og&x6-Nj-?C7Nw9W?-_{((*^0Z`6CEAWV8VP&mtCnoXJt=Og
z>g{+G*<Gdgs3>dE)_QN3-WI#(&PZAz>-C?~zWIxMC;l?+&t-RM(oEw$#2v%yDXNqm
zc(kT*$9HHN_v;SagFN?N&5aCO#$(6Z=!^v&g`w-D=Z4f?aPdeOE>3Es45O<Z<PB~3
zm$4JO{b16)kFSj~TnH=b!C0m|t~|m9l;~HJL3z at vdfSYSdD+r6dXDYbUVWC?TV2c?
zvqd7l>H%Qh7k at _&#Y_)iX+2=_cmG#cGhd2XPAHF)J`ee)Opl1nZY1Zp-!%xdjg*iW
zqq8T+uJrCDu;DU&!-ef-vjPha{pXV$J9BPp-;!rgn_p^bu_%IGm=c8%5-F)Ud$7AP
zB#>+G!9<W5kpP9aK|W+6GD_L-eT>B1Q=(sc$Zl0w`<fWj;5##}=$FPnCOS06G>$6O
zjaocdb(?T*F`ludy{7q&&Xth!8|@a1>cuXNQQ#yK!wICf5m at vp0!y9WF+h)j?}-Eu
z*1lPcHaOOw8Qa3gr}V>g%GTi+%0quX76BeN>GMppg7vv-4uU}eliLdGBK4ISc#qHk
zYt>wd3uQdstws&QZMEJ6Mzv3t#wo{$!2bczt$K`uKq=9zF+lY&H<N#fns9<2WEhOC
zaUg2Yd;(LyD>*Q-ePEBMMch8{ZHxJg(#Rz{>-FjZ$7bw*_xI^8zv;&Q at -6v&)F1(A
zps2Ud>bDv)NsD^nJ(OvlM7l=EPNx?>B*2qO)@y`Cfl9SkpzdbVYqgiKwl7*%PGCJx
zgqDJ<^C^aV|Gy7tJxJ(?FRIhM#@<g>zSM-YSY+!CQNLI0?*xP_SI+0lpDjejUtCXa
z3u5JPRCrTs46pD8TpN3W>Yxx@)pr8^|H`lvWskb%vS`gG4S|lpd;wvSV}L$FCt!a8
z)Y95+!v6va|DXPMK$md1&CAE9+y4A`=0zdf6(p-LmouYUAUU$JHBId<yJDz83M~iq
zQKs>XCz?a|F#vk*>9#O*dHy`iaOz~5sY``Z7t`@pGW~;5B}d)sn3jIn!-uzixzzk6
zT#|D*lz-HrVe<vKH+;eC?|i9ms-__q0rr}G$LR#6T!p?VlQiGI5p-Uov9F at hzOsA*
zN-xAU>0JasX-V~v)^pa}ZGrE+tQ&etK}0>y_7R(Ys-qN$;3F at 8s=<A@`?!Dn261=4
zn(LR!Syp#k<+C5E*C+I+%9>-T@;E2yCJ{&K%b_i4T!Tk6Vx02CM5fH2#bl@?oURR8
zMw;T!ZCMcqiNRcqc52(XI!zS$=NJm9Yoj=BU#Yp=_FT7LNQJrwoQ`UP^?gVSmqdU^
zV{mJRh+~5QlzqZ6jhbP&&mC}o^y~z(y2|$exNo%oD2Tm?w)_P0-cdE&WqRY~@Gn}Y
zt<38oR`Eo~EBs2ogGK%DaMs&?7IGnrmvHPpU||6-4aw)%&mg6-3&hH62uxV}etFD3
zhhii?{FXYnu=qjXXS1wVR1kLa&EVP|8srG?KFKUV$6Ur1>BHUShXW~XRszi8iQtc+
zQr2KHI at 47^4y0_h4gW at NXSk`S)xtu`LiSk2Y-p=Nq)g8(hC-*BS<YDK)6N8!b;sa6
z%Q-$LChz+B)hr<Hn>9NzZ6mO0y0UseWp)5 at f$?>&<yPq)Pp_uqPwO#HDIarBYSpv$
z%J}604<5zl$Ts at kaXkYVvdw2;_lD=ue;~JNjttJBSh~XQ-L1b|D%=z2lT<7crK$J<
zFAkS3u>rB%MK3lfcvXC`R_Ikm=YehQmc;!q3gEx5Z&(`U2*~MNZ%pVK0z}yqrw8vJ
zG^AhnsUbYg4zuC1fRNMT<DQptGCYmK!A-8--hY4c#3G_!8cS at EW<-`sB?L#B?KX)?
zOOr>@Yd at OL76(%(ZWN}C_&lBBCTCiRMes at CFvKA+UCuEV0}QBl2c&kp7#B~^+zj!M
zl;*m<VVbAaQt4 at LfX%-e=_Pjitk!NVq8B;rOOV?rBa5ZVOPF{Ppo-%tMq(xg#MyMC
zjog6b++_iw1)J^7#7u}$#@l&ARTwwM|4Kc&@{L>gQe~YHC5eduXd?^}Kx{ReDz*xx
z8j`P;<S at 7OvhiNP&^Z)?MVQqt49{2?l2WwoCIK>ggQ#uK!!weqjdP?o2`qhX$E)@3
zR`6ZB3w7{GEH}AcYjAPyyxMC8On+am{x at 9I3sr*$aXX7%ZCsW`*-u*sZ>if<?uSsM
zSFJGst#_8 at bWx-7_biX`gOrP$`2`eT9>(}1DmF7a0=u0_?3S{*blJ5CY{^0R?10bT
z;qwH1UWU)(@HquO#qc>9K9M_!W$@_ at pV9Ei=YN!3;G+;=j_t(9%>xg_axzr5i2y4j
z?rw^obazKmBEaA`HbhTt?MRq;HX#uRi&7S3d=bqL7;2r+DwFyYXK?TT9OJZbzbq4q
z)Wwju&v2wm&uZT3(SGp#wC3G7dM<oFs(CkyPJr)+2yQP#k+YJHfj#%q-X~be$E$ad
z3%>l~xyI|3&Zi%4=+iIcV#Ica`5G*<1 at eAJi?aDNf+i@^n5<!u2c)xy+^zeiRRkr{
zZac at NaoyzVI{_EaBt~RJTOOX>GrzJPuBXaaW*<|HXa+kXgE1YdJaz&$lR5Y1G=P&g
zIH;i0-xl1Yb`-FfAo=D|kl8|7sCO|+1w{mHKJ8D9prc0k<S=6Xwyy9$H-gl(;)X3M
znDDm+AL|<71=3i6wV-Yyt=8ok(VKQW*jeFF!GQE9^UY5+=<Y5`m#rKbrP?(VOY3`9
znP=U+9?t3s?<v8Ay=e-Ovm$xJLr8n*E+TRZB&SY#kv8B3vHG!SbRAq<JshC~6XI`u
zd`&0XPP)B%0H#q4)4J}gex*y(i&)JsN6wyTJ<EN7v?iVMpA{W%qtnoOiL=gq<ik`a
zlM0cg?>)cv){uUkH?cj}M~{dm>Et-Rj9M@)r!-bjls<FQ+)z>XeytdWJc}8~bPor)
zj;#b!N+Kpk0O^{(Fhxl9HfFDGWsQ8l82u)-2`_aCu&@kSC-_zB<AFbXv3elu%^L9G
zNLkLf$1~(T@#nORjqU=rhCGO9Lj1zjS}rmu(+fv;c3y;B)Ue-xgXWpaMc=QQwo>#p
zfyHl`^w7d>%{>7euJb7!uPTlO!F0ayP%LE8M}q9a*U2rv|9HL$REy}*jgUS((hh6c
zbW6|`(=qVy)#|rU-6 at D~{`gu at DiDXSqcG~W at 6XTbOlNI9*BM1*OAE^OEXa5rH)kf~
zz9g-_v}&LZvfj5JYgw<~O~>(x at g1+Cdi(u^wdy(L-gA86GpAfU$M at 8o%A at 7u=lELG
zzwbT}*D-wQWWQthI+1&TuP=C$%i+K&n`pRuU}?S3(qQ+1dIk~YP5o5JnbXS?`$1)q
zNE?2ZQ9c<6l<B^fx6>z{+v at 86dT~QYPkj`2c|l7r`d?A#b3pN5n}cG1Iz_yZLQ$uj
z48FWT0sm92$)SZCFPzl2_Pgd|_?>XNkIxKme|`YpTeYVTKS7P{P)&P_^Hi(f;#0?I
P|NF?_4{ZEJHu(PmooYtq

delta 306161
zc-n-#d0bOR7dJi$3EV6|2#JKvT$TVTU<9J5goOQqBD)(Rn-GoSO0d|*8*EslVk8hy
z3*v^_TDMl*9;wvg^WavOifdERYO$cLML`-t-<hDceSh!g^ZSF(%$+$ibLPxhzGv<Y
zM_-OR`p39Ujut!fZ&$ncOyN4&JQPRZDM{_(1KxZ<?~C{{Y~$_wuetRFp#72X<UiZU
zZ{Ad^-z0%o)BrH>%aOJHn6t0Ak@|^$?Pnk9lJ&qvSN+=6^5&nd*G=Oa#Wfol6WwLG
zyiYcMGB?W=pPS|EH8(4_lM7sRr+TDmLf=@v9{l=!&997r#Dv>(pH^9gVCkLZ2jlZV
zv#vS>D{jvEs%oXo^F68eA%Y$EqtLf%1x7#5*HfN%4T`0;dJyC?=q1Zul?G`jVE3SC
z^5eX3YZfv+Jz32=dUeTzR-QYkZhgNPleiAo+yhq8W)ZP6LMWy-?~m+FsX5H#k5AHr
zqXeA%y3n^#ObhQ%Oav1<314-4E2g`q2Mv?(M+Iq+rhyRdng++bWV+Fl at -2TTsBvOB
zkGWC)Wqh6-vP=M$<66p&kFLMw-Y@@BV$k4HYZI<?mV^EQRMyOA#Z9#Q9ivYxCn&nx
z8CR6$O at Rrj%(DODTDeDi`N5wygL}H_CI?ANg|*aR^09xlkE*UR`9N9z%nGBV)ZlCv
z_hS0#4Oax;4VmYyHsQjSOl|mMv)J|`9vary%x6#YfW3utOt^>#0Q0#ZB*#i4S9-~P
z`qh{SPVLrk!I)lii7jHmQdeyUww^t8v1W+9z-9NiJM^K=r+U<-dSJAbb+BL=L=}vm
zIotVa%_r8Lk!Q!dwZ90DTwbZf==;4(<c;I@$Ys_Xp7a(0m^r{#l?p;!Mc2z4PU<PE
z3g#}Hm#eyaS^y_9z=@U%e9RL)vi78|>#1SdxH{~Cf}*r?wm;QXW4N?vvy;?NfGNFd
zLTwx<;+mN at 6MeH|2}~#0{7ijA4+<}YX8-lIP|GspTY3pWma0D81-4_^z8GC65EyGt
z*oeqmPHZV(kFBd0Fwn}foU8=(`WVK!Lwf8)O$Gkd3Oz=@>@>maGzcE{$$l~nrKY~B
z$JRDEF{4{8si%g^|0CsJ at cA-PGA!j|B3Vx5$LpKtW*Hr`FI6%1SQLhLNUzD*U)85u
z>*xw5-`*Imc9eCXde?o-j~ozbvvpd6!K#7_waVCiF~%_cUBTIbNKGtkr?9Hl`Xq>K
z%i at j@Y-N&y75R<AX?sZ`zWj6J3~8DySefLD$#P at XE}IFJ^03f%4%Gex9{yxmDts0r
zYY3#i93_(=%a9tHg5emc!k`I)<y2)7LAt9`_1N$*Bz__E#rShLajVcm(4?Z6y1137
zj#>9iAlN-qxuAa%fpyoukV1(8Je0toL9g_$)qL{n`g}~9mdH^-2FxW~Se8qu3LFSG
zB=N2mj4s`z$4<Y6eSsqzIk;aBx}TD;;cL_Y&HFg42cWtP=x)#Y8QLf|?;HV$tmIUw
z0mF5(J%`_wL!uTi(Yzx*+7TSLO6V)9rrK~vO#s9iMV9Wr1RK&!LJPflF(R?GD~&U{
zm2a(gZ>f21EVUcVbiFw|Om>~>Q64tg78we`M+RTuWC+0$1TnvxCtWG at g}a?3%U)8{
z6K`e``*Z_rr;qF){u{W1E`lAf3WP&Z`XN11e*tx)@cLWkRC9ZTGAV}Qc~>xzomacR
zATWuunj`0^DNsl41}7*V6KoO=1bb_%Uu8gF_{mk%cqv0L7K(LE%tD5RF4+lZFRc9{
zZ$}QjYQQ{UG@|dBFvvDD7%B7}!m~T7B(PqNm_mI}hr*3vgmS at 0O3dx4dio$mU1c5{
zt4zAXFOFJL6<x1k#-$OSPzgyU_YY%u)h#nY6xv~XZXmV4QxA48or9YfDHHlau?8Tq
zUgDg6qI)c${{2k-4T&0#oi?JJgf9^X+j(by)BS30pFX!%_~pZnD;LiFL9nHpguZpN
zIln*#Xp<kiZ0lB%q@|Sew>T9CA<;FVuV)K&%*s`oY~<ObX&8<evs at -{E~YcLr5oa~
z^hUySL%uProz6e0)4sDBC&z17a*g5dcE;r1GKT9m&-$UbRNqukudwiJg8H<8z=}(+
zZ<AJGbZtRxMRz)Xj40Zm882;D*l#@mnW%;fy at EvN=6#j!IwDFq at r!{dV|c>DJ9Y8Z
zBW)@Diz!@(8ywR*WBA3g at BVxrH=ybMa_J{|4~iQ#VtYObeJHYk3 at HI1^G(vLBYI@<
zcEkb{d*Fr>g}$?)k}tE%w~YEF9u&aSkk&xuwjVK!{1xz-i_BL~DStqKD+0%#hc;Kg
z&Y<1=Q~ir+e0OcVtCX)`L_XF7&q09|q{GT=0>R5VVvH+#X#Il#QjQ*b0CgnJ4w`1R
z^E_z(WA at fOuur9ot(nLhOD5kt-lJ`A-3O1Xz}EZi&*6LDG_v>#rg)Yy9K{|_!#Zw~
z=<w<Px at +aJu26wFdJx^G2flti=@L7Q$o|$oCh^f{vvr$bXmec)l;!f^;d4z6aRYMB
zC(eqoo_kGW%t0km<{+&$xt$vB-V!%p at _9!`I>Z%0!mW^S#|J{;2f`wgkGUN6uB>}M
zFcGL$C2?N84B$x1;n=44V^KSS>ozqx^t?g!4+}ZOje_e4Ann@^>#(HNq{;0ALESro
zdmjia5F;P at gWmPO{?PCEfzhCUETnoz_v{0m%Lh8udpa4_vt=FsBKgzyzw~;$=lkV7
z=_|u2F>&?pxtCG*hxZUGlS?Aw9Nz78Krwdrtq+qjKTPUi@?kZu1qf!b@;qLTt*L%%
zw7U7H>?Cw6P<M77h4Y=4Iq2+~9O4Vk?v?UQK8pKO9wX`2%o{b1a<Hai6iyCTta**5
zei=lJha_$v>JSPfG^22u$SFFj4IA40j_xQS`#^{4 at 8~LXd(!ht7_ at j=R;l_b0d$)%
z`W3<Ou>INeK*VP5D7;PD3Dvrqz?6{$EiM50bIcD{M#?6l4%=?o6=|m|RGE~{(9Qm7
zD6Ws7As45cz4 at uM6MCizLf@KH2Pp~LiXUq>%5s@=is|fa_P5d}cJnuc$Z~Slz$mmJ
z?i;uOw7ET7ATIl!puoT|0nUTU$;iH5eXIwoBlTb=&)gP-+R7W@{3{3w8u!r*J=V6y
zA1vePv9tNG{kgdv{HoMrDZBK5JobYgi}TWBzcmn)V)_A{v=$OA7y9aE_Yaxt-w1sZ
zZbx4+*8_#VS2hRy(Or8u(ER*0+%+l#-jy&6U%Bn`hq;cT8jNDnT4b|hlFddB;{<ua
zG#(yuA**>8I%M*#5qScGX*}9F^ky_!_KI2EwU&P7NnjL{<(ym8ZMban$?Y}g5$EzD
zJ$5Bu4?18RSAI)SpwWlzt*(AyM3c8eZ9(I-h>@#*bQ`X+P}qe><kOei6N91}V#s#y
znJazSJ*mnh6vLyCNRmK5RI{5Wp^Lg*{f8_!IvH~Lk=@p_2R^9cMl<K1*lkU2L|MSj
z0zIWvXl4LLwtP$f7lFWaOZ5xn+GO9G#uw8In$Y3{9-1uOW|vFS_(8ZSJr>r1Xs2O5
zwWEbn>&t_qi}SiSR2|cUU}nu$M`t&Yf~kNS@{*_Uh#jZNSKl%D{g5*~OY^C4-^1Hi
zE~H$nx#=jJ2KDCT-TNEOx&)C+!sfC!<~l?#-3B`W(gmc4-G+6zxqSsfHH?Mk`g5T#
zt1;i|;^{YAkko7BPI8xdgU$E8N+qa#9<Y=`WpO$t-0pti%7xS^i#OCXI0<Oly-n+D
zPB{5`{W`TLx`EXb-80J at f3xX|DdQeyt^5=l-yrH)sBCYtNv at 8=A(Cf03oR}fXVv&R
zi$|R{n#Ru%$e$NaSVV)k3KKZ6gOy*^taP4~bAcV~G9X||>kF7SlY7-4PaqiGd{^7z
z2}ypHjU>OIh4AakIhI*`?%5dx0ndgUi!F9bqN;L)66Q^tU`Y_h>@ks61)a!1!`>8&
z(F#e_6;*`KZI`wVN$sf`mdk91J-P)ZeA&c<*j$4bqo@`RP$?`}_iNU;_>;1n%yg~;
zS3KDb#-2w@=-vEo?_#&jcCanT#R|6lPr(dL- at OXb#l)>9d{BT6&D_31r(HrXn3c#W
z{0N>{iEvy)uyGEdB(h=)<i~ZJ*umz$ssDGM=GgwQs<7xSZ8WHb7nQw)wddr#*&Co{
zEst5qoLCd&>d7rW=eI$9H3ZAMrUWu;J!bu&M(G;r!wvAfHjvk|a3FT%1d^+9kX-G9
zYb}`-1IoYKYp%NTsHcrJzq;aM%eM7}SA|{dTlYM=MMGcq_|9%o>EJ|ZiNZqE?8TWc
za2Qk{9xW!$7cQ(3k9Kj-KC$LiM=k1PGKyUtsYG#PVoFOKMV)GL8)>guI at +JwbD(A$
zEJUR>Ka5Tnk!XSN=dGn)jFq(lo7jS`-Ds~3L{GZT8|@!z^VXUf!U>f48jUcRcIEc$
zA8JkueW;aK&9A~4o_mi}zi_2P^X)T at S6#yZw5U|>s3uS4o2F3(4jA*wZPC-3+4$t7
zL;zIv0&4I#m<U-X#F_Zmnl(n3PQhsPjSl>ZVEfx4AvPAJ1^+o)C*Sz9)%Koq0?KLE
z3qBV^!~Wc}0a&P0G0{*3^hIdB|I|FhWn@(#r at t<cTL at F%RQEyJ_}SOrR=&lUQae56
zwxz5iA!5qui&V;k at Lg{jQCyJNmDqW<$N`EKmA?!{#D4L+-18pblx5Ubs|;dx(Goyr
zirA%@blWl%6Xv);n?IUNQ&ssg99QarYF~+bSs~_En2cE<*iDAL^@qSej)?U<T(5ha
z!cg7w2U5LaY<_v7xMeLD7=^iI>N(e6GoK3Vr98q-N5|+r at p@1SgO9ot!(};*VX=PV
z7QGYqmk%<(n8<1Q%j8zoH+`~11sE<fAu at grfI2CVT71|aNSc9*7Zmeljz0-5C5Bz_
z$_1(ODT3W9et`vF1+dL at NYnycWv}9V_$`2g7(~of$`EsLqlmaT;!^5&7nHV8TJtfB
z;>S16BuUTK#y&o?p=wDCBT^@ztLq3KZ_Dd1DswOk-R4hzIL}W81+NH3UzjmWeP_-2
zV$n}$`f?U(<Z6gqh3g^53lZld)`E6(Y2J5#DLHU~d@)b`EgU=%vp^zz`QUHy?d%zm
zo~SyEp?mCPm2MzB5Obm<VQk&6gOCZBHTzwEyVIe@$s>&NpPG3dV<_yJGLO+ at anylB
z at Z`X-p#widZ**T=PhdhGt4z1~-dpc94y!Lmn>7%jiBZE7Y&#?HuR0b&2|DqpJ^Iry
zb~pbMzp7d3>?5<Uzpj)GQl+WrU=+;mR!pSR`a+~mJMe8{i?O|bTmyHKy;%7a=DkhE
z)Ma(~mUmkTALUa8IX3 at DqIh|uaXxE924%5B{;0dHO<XASQ8K$Mj<NNPA!qZqw_#F@
zxyLwBk8I9`89uSbe?Nh-8VFGNU?|+IdT#-zM}A?v9d@?%%IvnGWiJW0zATttl<tP<
zg+G9ckBVI&ZZ>O{<2%iIl_)-Xn;aZtp8P6?Gw5Io%D!DOylvS;n3d-c(Na5tfp#Q2
zV+>C>D4gIRd_|QpH8=~bMMCD<+mE_*gEFZ5l?yTioZTuOW+7`Bj!pMFyW4XM)lK>J
zh#DSMDm<<;m$a*YGI at mNf|-SBfKiMuvW+I|H4{_@%s0B8?fpY8Em5Tsb5xH{_ at o;W
z at zpJ2P&8?K*lX7U`f+VRN4i1IQ5D9SC8KIlIE9eLRK~ft6^IeptC1b8U16NR<*sZ4
zx<A?5m&|aF?!P%|Gw<xOR~TKE^Jjv0r+_1Bp-SG{3Fp0`tbT5C3vGD2pr%d4Bh3oC
z0F8KF3>%YK8`e^!IwX<;_4qBh9W$e*9PQ?t#H_8E6)XcmvE57lgdm~1N)A*Gi>wM}
zCV>@)<>2KC!Yz71PD#2$8gOm?tZWD>iu<GPlQ7!Zcp7LEB!-d at X-xq>^pii+wE442
z+ivnok12`dNDMGK&3Zq{2*CnF0P~wQ*Iz&UzWXH1F9GwW!14VgBa0+)3JrGPyVB1#
zdZuwe4#Xt3du8_#W8JlG5>_Jth at 7xk_($m8tOX4)GV7`Xsf8<hQ|47 at Oc2Mr_^+y3
z?pf`*&gHX2i at VYic=*=_>F)?Z>(@d}rANq;^xyC7{A5?nfY<1G?S;{&L+Sb6OHQPZ
ztD1%}yZP5RQ9QtdrDeOy@>}h4%Wr>9J{~Qo%C}r{A`a84qEC;wF9kFIp2A7`jWIkx
z6C~cdddgw{cV40Woc3h9I{I|Ya&JCma!r}{XmVu5>3Mne?@4G|sv_CJj#oRt#|{O!
zmt^)j6(21z&Ah}#?sUDX9%G(k172}d>gk4Y*r?*D8wa9-FzUeKx>z-g=$;WyF7O%e
z8mpNH`x*+;FeaouP*sOBR67Af6%_zfEwCOnNV@(1?&S*H%N4kn+8}YXfnxEY{dNAR
zqt}e#C|_s6an1+dR6i8p9kP1JfLzQ__3JT)MyNp-44>=@{W$sKkhN#>Le`FVbh~7K
zb}Lo1r45e?A%W%FM2rdZiD&k=wp!c2*=n8n(8lt$%`+T6Q%yOExvD$)R%aGZ&tp`C
zew at 23WbHS2$l9k2w at Y!>=b}Vgz6Vhu at 8>vkDQ?-h$hhHik?-e#&r#+%cI8`r<25~R
z9aF)|*u|<ycO~#E4-&JC<maJJhO069$-A-xGtW71{CL7Mk)X<-63U3fx+|w?>;Py!
z=qYPw88*|n6C=4*JcaXppMo~;63pS|^`rSen~vr5c^r#A9<=Ymx8TdOzEJE?OD5*a
zLDUqNtTByuO-~?(0X;S&5^44yq?jcJH8;-oTm;FT*kuVP<KE;Rjs7{{SeUfBK=iR&
z{-^^{(|qF8=c0T^dE<9(o1T1_V9JLHaP at k~6g85&D=T#I{U>X#7t at a(h~i;9Sbo)#
zsvHzdx0xbX&z>OT+e~0>K}V}_E~?64G_44kx8&pr+ndazWYoJweLuFy9|e`nM+@~c
z)9}WS(EP>#9RMzCcrz1mdphy@>+to$3RW%Qw&TR9dnh<fqvMw#;I&4ItKZ6fuG12L
z)j+XTr)JnJP916II at FA+`VB3f!B|{3qU3~fT4MX<-J6vJDfxW|^c?F>WL6-<@ZoG@
zKZMWJ6T%8J1Eq>_6Rx>ZdT)t?R|+3yH7yRAcP4M+^xYp_jXS(T^_t7=;x4S+W|?$p
zlXhXrHfo&gTtw*qCR^69o%inAhIXkKS5!5bW)GkDd1qa2<={`BO=2_rjBD<8^RME?
zWS_vUI5KIxYG#u)^XDW^PS5?%KAuOxRV`^g$CLr^&kfcIu<cT6gQ}iAsUS_vP@`ku
z5#ZxKcJT4t&n_RY^LtW!I1XFQlXX<)hAw__4x{%)m}cu}3YO7OK$jNT1Vaf@)Ybx8
zbbX17kCVfY)Ub_;EQv&>^s5mQDY0Mf&x>CiZ1n}eduJgrV%QwI9=o*8WRlq>gRT2R
zD3uSiVR?4IGUjsTXL00(<VZ2V`*NXFD&<L%+NrjA)l9p%_zTIzM`I%2L~ydy_4%Wg
ziZ~#1Po~yY8i!Re*HQ|OD4dN3SFE>4%o$R;l6db#M5LJd;v5TmlwXmhl3-LReVR|6
zL~i+{=gq7<17?X9la`XUX?7SjuHZs4s{y^;Snr44YNXD@=(Zx;vYAntT3JryN34dm
zpa<P7Wh$7D|7Y?UxtBoK8tcl at ogsRTBY%i~b_ at j-62lPjFuHW{w_`M(J$3Po$3uBu
zApzz^a|Fv{%vV^vxMe>?d+Zi&fX*G$+w7roC+?vZ?H#u<VfSKfk;Hc6A3^5VEsR_m
zb%V2UuAs5Pn5aAhb3q%$Snpe{7|b$7RX6@#i=F=ZY|>**?I^NbxDlnDKh`T)FPm8#
zpkn~(4NGbMcTGLHzm+#!ash)}`((?Bbm|wntL8;q(mPE)=85Y3X*xRs%sf7ABSgw!
zh%t55?~M18XNKFBr3_mgN0*YGtyDLzL$W)%th{@peDkFSO>g6WwOQl}8V1($O=D+1
zzH{)$dI2My at 8qZ~CVX<kcnzyJDVW~hA;2Z{N4t?e_TF{ZuoOe|`H$~xOISQTO?B+9
zJ)%c?<h=zOyWb6u7|4xYzBbI5gvPW!^WMb`*h7V5{QP+YR+UPCeOn}NNglKaoFp%?
zAokhwAQ5+!;vKrj0wEGLm%E2ra0~?@8>XO|0D>Df!LU6tl%H?qe=Z56{wW46a+?Wp
zvLC`{+!&Ec at sH?=%N1M8AI<Cw-xvm!(eh2swj}0!CT0Kdd+Aj85Ux(<S9!VT%Nt_-
z!ng0ybM3DV(D6vMVF=SD`qQ}Xd#J(LV9n>eB-{Nq5GS1p=Dm~1S7wRSm?aX3cBlT{
zdvDG332x+j2^=DDHDli(ltN@?9<O%wrV+`hUwiMBmcaS#A at XT>yXJGlUsFF%V^99^
zY575&mkEc*2GnWEjDf}5Bj&rM at Kh;FK-IV;>q at 0iLf)_m-J#sRI6Z9~)vFUQiX5B|
zJ at H!j$9!=LyJ+c%q)D_$p at U-VZ=&!j=@ygU5BXc8z4`$yPBO?Ih%zO at MHSGKuBqHP
zB8h=rC1E>)ySfBxop}E|?!BL4e(#UF^|JTg0R|qCDY|!DXaBce{XcYyG%J;;MKiu<
z&LIZUDaSRYv0ef|g_E1Z_0(<zbD`+rAVeFmiW1ST4LX5z!<qj(<rnRiMt?0b0$xML
zrPSJtmejf}?IR26=h}Zi5P3Ay<3Z}S#s<4VSI<Npd9J(`&XJ=}w*Q42K<=TwTh!e<
zgv0S{q`EnEn-^IM30|N at -uE9)Zn@&C$LQ^skFF1hpsa*CCwR}K*KtgAvs0ruJ7f%3
z-++2~A3|j(<Bam0eJaluw;-=orHa1XeJk1b-}WM%<O={jEeP19P2~Z{_oDsmNQGMm
zQZfkAw?0Kup#+$9jP_2)^#2xRO`AWD7O;vMUvt~vgB+189IAJ+zup(FiN0BF3`f&I
ziY#QYE6$k>*2BzScOqU0jH&6Dp`grhZAPLnD56De at d>8WVsv6n!n}Y8s#5pgM4&8j
zwO)KR$?D`7Xggb6t+%R>I*+Jvp}S&iaIZ$O;v6|Lc|b%@R$dTOy51#tcbBp*HpqU%
zs#G4J9;};&p;BEj$d?-27^?a~yGysvyk3|(+6poD{&Zst+G^X|Yfq}>L)e$xt3%H9
zV(THo)i$qi at x;bNZC1C^=zZxC=n3)&Su|jwiMn*@{_D&ls{?stArs_jmooFTVV<ud
zrbno6DyMjt0 at gtL-!7%`ruQz78>!n=ybd4q0-Eczhq^yPzI=k=ci^1|=+ICCprJ6g
zX2dXlG&s>(=U#u!VkJ at MzZQezaW)eW&U)=*6TE!AUwe9O9JVT$?8t#A at yAXDi+m|c
z*ofYk{Af6YJ>~gRmc4Vt0jn$$d*&>qe9kk8(4y?&w=Z%%*^Qyz_#<-noko`3)z8$t
zB%scz-97&`)B3+2?7auLwj0Z`re~?b(_N5}ec569U0tJKPWj##{%+1iJ#!ROf2{wC
zp`L9L!Ssz>`~K5`L_X3*ZPxyn9V_9kT;Eyg2D1w~M2tah#^XWE2D5wlb;QX|q=)a-
z)vzbe-<9H``VpgdE8k2ggvV9TKXPp6c_G+n_UwbIS~k<UaaWn(s!gz<>NKOcE)M&+
zZqTZDkaV<EL0xv~bfOinFu7Hw`GaFw+f}+vYDV1f4>46Y4$|k-Q+TeW(@NEj2QF{9
zOEx&(F2>VuK#`{btM_s5<$1+eul;}Ttik+!0EUn1XKwVmW_C-oU#4Gwku&%DTh?j<
zaCv(G%ml$NBx-CHZeSVoShxtL;lB*Y7YOjK#fcf7!*-)RMI}J|N58Bz$YT2{uGbT>
zY)5!=bdAPpTaL5tV|zX3Jsq<ih||Q$a at Kq_B#?FV?b1ZA{<`4uYiHOu)!Y}otJ*04
z7WVnnj&^<0^J`>xqv*D%8i*IPP(4ZMEjxi4$1v{1C*n-c?>8*Du@;=o*&h2Y`UBnU
z#w%t>QJUeVW{mdrsja{jn?f)A(SHUqg(IfGJEm-oQ@`vHWQ5wN9WXz2nI0>-M1Y4r
zZXG`}N0`#hHvVMpi)|UymBwMLstl5{c(oW`f8^Kj#go>8u5U~P;%bB`1*_4(#EZ8%
zvfncl*Ete)CPRfnZ{;c%nC9&W&gz)MBk=vW`E^kdmKlQ0p_$xR^VV8lpKM#Hw)SQ8
zMHnN{I~nOmP32`dha)_8XX;q|0wG&O9zAj1HIUk$MgW at V=n2Q7)0ixG#>{)Cgd17a
zFt$|@nDR;>=pT?XRL2DNQ5 at j@7aL$1^K#1X-BL`6GAt6N at G+2Pz(SpF5pKaN^%(mh
z&M2C<hg7HP!HUNaS#HUo^wtu<Cuuab&#Q+d7B&-eL>#T|4FUF(!$Wc{eadEtUnBS9
zp^INK-Ja at Ka=KdWFuJrl5ibffM)c)sbEGuFGmQsWX(7NlO$^4tq<m`raxe|HS;Dqa
zu+0m$O at wXJQ_^xRyZ}gy-l3tL&XU}NVrDN+Q#f7jHT{GZMaMd at t7mlqkIf)ijTo*^
z=6s*R52FNI2L`NGG>5a(;(RWSru3n6mzFA~Jig+Et*sT%ujR}oRx9>~@6F#3b}{+8
zKT*a|a2VjKYmVcK*<1W2b{H$VhT{KMzS!sfFt<7SxW+~JeKM}T5$yJ+joZA?YvE5l
z-use{2P-cKIBYwZCy{o$igqj-{9nTo?`lktFqX}9q}VtKN+1T}+c1lFPxBf5#hXT?
zEF+xDan&ut=i{gXx8PC*>(U`F5L8RxX)OTPy at Bwv*$$UnQ%pTsPT-k!Ooqw;ES9Ck
zi7$?>?Stbnh>PS98N?#VN-io`KYr$Cj6e^^wkTM?Tr@^-!^b=nH&R#GIZ+$N+QXw*
z!}(rod1{}?P=c%VrW#hTB)qp28ymY|lU5s5enLmX#;R|?V`?%+#91e<=8m#<k1H_E
zL-(r>r7(>xt-yZ~WOeQ3;BCup5mXfHbbD*o1y802sBZ|T)U*XVTkO$!)%+anM4qI%
zJzZF}%`z^bdYRVm=t;GM$t|v+dS%?@>Q(CX`Ig0{!Iye(=6e|*DD0aLU`*Yne5=W&
z!B1iTM|nH)oqZ}s)71`ykJ6ohrUiY;uAvC>LHQm8xME!}i*A1K1kYE1Bl|NM6x3rD
zec?SHOZi+-^oj;y?QKV<<TS=;t(DW at d9hphgN)&{3g6^#y9YJe$rHj- at 35kGP<YU1
z=PSR&{L*%mIIHKjT)23u?K=fE;9OBYnBUFsXMOuqXPR#>HMNn^mL$mrEF|6j9~G>G
zh#L1P?&Ocvim`hxoBW1 at -JZZWh8K$isfEOj!dTuEzq~XYL>|?6t?TYhk?ht4s^yUO
z3zKh`<HEtbMjSk?=eVpeOz<3jX|-3!sRS@`B=>&}PqCUwjqKNW>95<rkd~Ny^Ga#p
zTioN$May+phXijs*o%1U<448Vd1fT%af<ThCQ5DuawRti?7cBa?FcH0Ra^%#XTO^^
zN7vj00Sa at v`HMFz?rz;xf`U?VS<Y`u3Q_?_6&1iy*W#RvYN56=q9=Xe)86HUEr5z%
z{Wb*mF0b*KI)-nK09gz*g!6nJCM?R*L at 9r$$)D;jU-K1mt?>ZywI|O%*)t=UozOCJ
z1CUVq#_)Ih6e}rzkOJ*r&YhS<OR274Y72PlYdWU7_;k(4DH%|uv>IKq?x7DGT-F at 4
zl=1=RetJqvan#n+>7xRvtJm}_s$qu&kv+WxP<|m}D92%b8?rT-vYgu7g47XpB$SD%
z9@#ln>CmpyT1xEijf$5fwC~*)yI`NTPz>x<G$2*a)?<{70&8jgi2wCs8N++Z<0;E%
zwB~_jy+kk{^ULeREb|POwBQqZta~ik_7KB6dZsk7rKQtI^m5V>y}S$_gq(U3Si*vo
z7FkZ+3|*NVsGbXG!AJC1<EPrNo~V(<)$8Dbeg9ZcXbjhtAww^*M++xVBkSHR?2*UA
zEblH)IZ=GhY8zDfX(TP7JbBikPw#r`)}K!ev6hsOm`$MpxRO=rHYgL)iJEAaeggN}
zY3waRad at fvw#g4+rW{xNQFJ}UYUH*V(P+#cuLwEe<uJ$a;EsZ4V0ehdx(IAy(*!K#
zmrY*FU>=+NzeLWn*H+qC<Dey^vAi^oa&NA;?Rx!O&O<Xj>4MSEcS;$$ybwlgLkKMv
zCcUvgh0xDKFt&)ljTM_p5vvMAC~vYfS+S{ZVprF<7lJ38rps!X*!fx)y!VTEv2QMY
zrq7MhjL%D#)kW90)8>e}zKyOop|a}YHaSmyE8cR(?6wE7X(^Qc^C6hq?L}=zop(JV
z*N4!^;4v&~VP4F}ye+`7_eKb1tqYUp!XI=!UpsEpqUzC>o?lSiB=ah;p3X#$BvIj^
zFCU`x=uf=~9uv==&kmuGyhT{{iBqQFw1i+uKV})6=}5I21AK&s<3vr_rbJy{e6Tt(
zj`Ai?6SsfjUlEc&VIVj{c`t2}CTfvSY^QD5V(Sg9DKUf{oJEP`imsGRt4)}o{1Sl1
zhh1;eJFO1sX1^Y;;sINAe?pK~2(bEaTrQwT&*fda57w2bolSmGo!F?NaaXj`YRr1W
zIAet5F=k!1XnLZ`pTJ at VWv^p}Ll#k;fc67hb3yf(1OX3hXC$k#<up}20II(PR8=RK
z5^eaN&g3l;R at D-=u}u`3il5=){kh!`Ot%gV^P3>k8X;V?OZ6w1l01pKPp2QDVT^6t
ze7+vt+UT+U!4#f~FBqLy9mnj;shgG8BDYN8F#$8u%kj<P?Vl8O0&F44-$wbP)@EXH
zE}Fm<@8zX9s<LcCp)W1WI|2u~!+{bwkP`=BX_pcdN4+WBp)R}zFz=%R_LP<KoT`<{
zg1l4=la`0djyH71el=A~Bv at K~+54D7A-lX7Y6AyMnze{_%+MKw7WGkWvw5$`B;1MY
z{Z8VHCXW$<(bBx?aHiC5kt at 1$N(q9Qhyk;M+*5C6!o~aH;<W;6Z-c;7YOo32wMt9C
zIwyf{^;PdN4rg_j7c^-O$F#I=x>T{e|Kk^fw$k!bHjt@(y>%QrvMU8VT(ErLb?zX^
zND%4DB#(jlY!u43A=B#N8EbJ{bzcax;N~E+a3+SQ&cqysl<|RSGqFihLqdr3&LB%w
zgiV~14TJ;p4;I1tBpX5U7r|prI>z#)w5#riR>(Fn at v`j7upwwUWY{970Q!}6LOqlI
z1~;bZ=?PjW;cTga#BB#W4kw})Ilh{<*=6}{GmDmJ<i3j;DP>DL63cS-grSL&`<Z2B
zSru{@DMp8;3QaE_JAb3;#T$8D?D+-=3~QPAj^OKWnSCLalMTy(syC3TJ{;=4EG<4r
z#>c_%(@;ieZ9))I=!|DwZ=ut(Pk3atx0^H=M99H>mP=SdB+zwi$@YkV6p$TNjd5=u
z*Jj;5rk$Qzjae$c!K{^m$d&<6!wEvolR`%L@#e*6u*a`Ee*>CXL|tt5WcN$9inmW#
z<r%cH-%7&tF^4|wzGwO!#jZ;Y^53}jhpAtSxFyhWiO8}=#z^u}>Yk$I#tcabki?D>
zFcCxv=MV=QC*0nvt{)r+^Cs8Wra`}xTQi%Y>*Z{Oxuy*$oIN|eIK%wSbjdZ$vXRqv
zX9+}-k3U0gVxYdZ2rH%^Z&Ft|*+5rqzEkj?Wenf%(KGvspzWUT?}O;*NiDjfkG&5Q
zv?+KO*I@!xS>bD?jLHYEZ at Ag22Qa3rVJIV32%*5tR^~sQQDKb2<B?l<CESI3ZyK+{
z^-;_QbGw&ftaqSBA#@1e`^%%$gQ^=4{55`Ml`A=`4Oj&d)u|qwqHN8AWIHBJT}^u9
znT7TTrWoU$rZ|Xs0|h-1Q9R5-83kzSqc}r-6P7`+oC*6DoBKHCzFV-ZAC|LVsUkos
z4`UT}V)o}9+!*Q>1<SME3$*ZIU4qeJu&EUGmusV%0atp9z{SEHT?usC((|quJ%Ch@
zWh)()l at fKW%(x~!=A#xfj6<ori}E?kRds{3xMZB8s*`hy7Hi at bw9KXQA(rTvh0$A+
zVIsdJgjL`GCCC4dt at 29(zvH60S9O at eP!$eQ_e6nJM&F2*w_SOrv76S-aojYTNAkyr
z^I8Pdwy^C*L_Le*NMD4J%)$apSwL}gb&WXI&Huu+s_uR4PnxGrOvDSP8pEa4A(jK~
zn(TpxJBnmEX#~tBFR<DbPM%OAbIOGt_AMLfsYRGwyY*N58m}IXL*M1hUQsZ8hKuGQ
z`M`U(q!D1!b}=o(FF||0)|a}M at 7C554=f9_0cl^>rHK|Stq=(%F4n#E9XRyO7JJ>Y
zyI{zis2Tv6u#QQ2oHgYy)lC2jIs<{uVbFD{tHbkwaQRaEiGu?5E3vRC!?rAKEhg+X
zd`%<x0&CSwOc-6ijwXeP92|$4vMb~#KH2oWaklE>fYKN_)EL4j2ohVV>dDg-X}d7w
zUT4hSt<N`XmUMD~YA3|c=i;%8bKCx`s$6Q}JC2fhcT`|NAsrjFz4-d;3&#V2<k3M(
zMjF7?OB^{H3vbWxrN>(aPj;d#Ss8CLB|;w4Q_!$dxkBhwrHz?v^~;v2+yICV_!Zc(
zG%#QF7ht<~cD+tGGRNa3ncmi>;yW?+Yyj at p{HM>)OI2D8$k1Sc at V~n6 at c%AqSgGz7
zhAcZa=o<Y^i8Hc*p^v^hkAhIFpSTu*5cM6?#44y0Rktu&RUJlGcMMuXaLAUf$E;xh
z1FC*t;qt!}$I8|eO6AWOvs|GK6URWGvxvY*=(S!~8qtoI2$w-1kG`ZZX9<`7mO?Dw
z47WyX_zz?Fkl at Vua5qka(HZYhH3I7sRWLDl?qnB`OPzi3n=Dutut(tAAoV>=^ZwBo
zUb(Ahk)#z9!0>HhblH9{x<y0Mi*i9!m#QNYeM;l=q{GMO{NK?j)=#qsc`G4 at TZ&-T
zzyf3BaA^}8Lb1^j6|gkU&gxm#4?<MSKes`WX_-Fa8&qo)V^;)*m#GD&iHJ^>2BgSi
zzN$3FNen<x at DkEIR<PE*B&{kM$+jevkoWECh=<~Hzj{rZEh<gH<7)NTp;6y{i-5$y
zSWUL9VR$~|+&Zonb4N(_OpMSEG7_XK1DyUPf!zLjSh6sB&*yqTB<ED!L$3O19Ck;r
z{Z2ZptDY`$UDk<NcN=cH5B+q|BK=k%cQv`NH!Au#g=%zZyYok9jNPu7K?XFP8AgHT
z4)dlH8!?vPDQk!5Ri5y0%brPxg7fGi`PPhc8){dtH19 at Ia4TLc%lUQA&`<uB=y}=!
zf6F@|ntP^ob3dBrF6(%RxpnB*a=veL+Y<)!ZcE7yU at 75Yl7btFfGnIkm<^K<iD~ED
zg$<svj!KUbxtdYo*2BOrMW4|?5Gg;P3c)O*TT#8Ou_rAM6wZ`SZWM)=qAM;W?jnF(
zF+ at RE2dRY|V866JUMx-01Mg at d4#ym7YPPLYmnbY^k2AJke%yUXS{(@b(J^VqlD3oQ
zncXG+jQ(RQg2jVwm0>PYFZ{Rz)9(^Nxrbo0?1&xqE611yalQ}oa*`0Zg9n&|fq at F7
zblu8tnfy*n62$>x$J!?Tok;m_FKgGF?F%~?=2%Pk at OJ=#V=X*_W$0tbcyVtn=BK;;
z*AG!R3A}zLQd-`pO22-xz4(2q)Xn$dI?4mZg-fHCyLxgrAg~$xtgRV=RrIN(N(`i}
z%SP^E%~F`F82hI?%ozl*j|Zemi)q*$sGta2JUliy4(g80yQId~)_d*mN(-3&kp at h%
z%ebMoa5ZLea;t5XDhR^k77Z=n1&Ew%QcRsbzB1M<1(@WyNbSUFxEDU`z~KoE7{e5A
zOhXrYtZN0r9l_h5s at do|%M`AorArUa5>7^LT=_|&<M9PjtV|GIuG0!})}1B7IW#?n
zO~u;_ZV4xohzN#V_kiWrv$Z)#$$`hl at T-|1Q#~=53gMRX9NH40?snP_>Z&=mO7Vy-
zN7leez0H%B>a;M9Hw&AEEyCu9SXaj%uG=3C)19q`s|lZm#1RHQo}h`l58g3QMYt7<
zuqMQKrN>^9IBQYA1m*@bLDgl;hL^wLEK#yHZ?`+``Qb0lesoB5y(L?_AdkL~_WZ<e
zXNUC7S6mK#P8sHKf__yT%X-<{+~4rcT*mOVLCQ)`+7?;oGyK}Y)K%)VI}Fbq6p$A*
zoff?yP`|fm%HhLVky%9^@>M@=@q2PjQlH=O>1{^r7!qjnG)lBMzv23C_}5vH^3}P6
z(?2>Oy8e`xC@##EhsCIzwS`|b{|Fam408q<qE<P``_qTkX0c~h7r&19gID3>LFd(G
zh-i(7ffW*9?WF=VX*Hy6!9iZjblUT)i>`k3STt}XD{}cfQDmJI()nkuscs-o&S8j3
zI3N#?q_uqtl8P3Oa3*TT0Aj3d7YI|;|K<r93oFW%C#R{Lzbbs%_2Q%bW(Fq|y<;%A
zc{xX2wV5I62O#f=4^2=41VzfanJ(p<8L at sq!^|(hRd#?`PC9K`!b`$e=f0WsoFi)^
zD?LI#e&y%ZCfcImazp(es8b0%)>E at vN5h!^`HvlA6;9xyY7JLroy8bfY>cqO*6qGX
zE&YX6wH8O%E)%C}ho75zdN!>28NKu(;*uA792I_bvg-XjiFp5U1uOl$9YYp5ZjjFd
zRCMRsm#Za}%fuwEf?zV`NG0>)Tx}m~O9pRoeIl;<T;crF at g6d>bmZ#8r+>7C^nVKH
z at 9KNVft)?WGv0KX?oA at tdFss;^o>I0m_$xxPcl$D{Bx{Oi*6}*LZvKo9l!2XSkG$K
z%hau^TmP_(auR9ry0RzE_|s+oG#RVEO=jnlQ%~}<G}Bd`7#o)H5a%%<-t!w0kR2>~
z#TYdCKuOPPXy20$j{3(OWg~OIxi9@|Zp-(UBg8AooeiHT^Ta^aES#j`VbuIAkP1sC
zEYr|uZm^u$GZ$y5761kUohokvptoyiQ8lOQk~bai`s^9p)y;n_uxDgbW^=P%BJ2y(
z#H!o$;MnRr7SQigrFMg~WBI*nrPVlxRDFgfyqK_)v%TZIYk_d-KX;%Q;dIy1p4IC0
zPBzH?bH9seg1%zD*;hO=hR at wC{Ibz?&+0Tkc?+66xC;VSzkJJQ6MEIr^<j3BAdG4h
zWZkA$1AGY&W=2bw!y|WOgo)aY-w|Yyw}<BWQzvhC<EU2pQ&mBLddCIahVGLYZFozA
z;+_l7a1YXf);UArQha+yfK`I_Urgpp83Cg362#<i^}m?RB6zKofgWRcH|I>73Wo0B
z2N!*=-rQScHH=XvKe;5`<3i>h9t__YmJlthv}(a9R(615wHu at 8HZT1{>UgHZyf85o
zCiU6=<o_cb%E<ZtKNik0OUJx0**5uWH`;*P?ltNg&_ur(GbVqvM#-{9*NdM|-bq63
z6uOTu6BIeK{xLxqnm|2o&_<b6f&WW+w11y%<<5q+5NgxBazS`<b-1UxG at d%8C7wA&
zBBu>3-o0kQDzHfHNOp{Ty;I?{4Ca8yOfSvTbU-sLL^md++Sw#(b&_?w@(5l0>OklN
z-<yD;x+Y-VOx!E?&f`#FdS*Wmr;Ubyl=^K~UY{M%>^^t_vu0IcbOcI<t1;}A8-!&B
zj0u&o?U))YS6#d3Y^xxLrF_E2#GGB}8b#DKie~RAQgBwOlF)1a7jscmeEu6C&0kW*
zTcRvxJPrNk^C5;mft;EhN^AkBZ;xcJN7roV-I)~jbJvZ%cH!C_3#cQW1*w>IR1mO7
z5Wb-Pq7P!uX6Ws6v>`N?x>{hNv=&e$2Bd`Y+Y1ahYuA}Kjeob3?>n;oua5Wa?(f^F
zu$``I!Cd=tdp|;Ll4{`Obqz?+MZQFk)p0e~7<poPy4OIIHbN?gIFEmvG7zPSF8mY2
z5V&P;)<&o`gb%8RFCu*U+%)-W5<SEbJ_927fa)y5tq<2`o9h_iHn2bw25lGnbiAxh
z_hv0cg5e!QuH#w3HV3_w2Mc6H(4xv8f`}pvq^Q;rK2U+NZvGM9SQmDX3xwh78w7sx
z?wJGJ(oAioTS)}hYMB-}D|J-}CHK$NgQQAx&+;FNmqygKGLT(Y9j(B9Yn=omF`t0Z
z1S;Pn82g8%lmPm=bpz){%&IsLj8Qw-0gHOzs1C|vs3t*2RSzB2_xKnU6?asvgU at w1
z!+5oOFLY*0p;NPj<+7f$kY)!wfAvjRaf3uNVYwZa5?DTfCHg87hb2tIGj8u~PUV5A
zg)q&A<wRIo!ZK9YqN`<XfDUZOP`HeeP?il*5K_XjY-1$DvTgmrfBO17#CZ6p5U|({
zSI?m=lc2sxW0=%XAcQ-g*&fB-f_8u3D!dt)7d1Dh>W9S*pQtI`K5rC>a#fGFTgHN#
zs<dhiC0K^z{XBna6b-Xb->F%e=|p;Efd#{{Fg;ZJJ1sC2QPXAdp>zYVoL7s45if&v
z?mQl>Q;|T%U{DAJJ#!a{kWhNgF0vgF$|622m-n27$9jAW1J+l-Hg8z2>^VDz4$D<=
zj1ZQEP>?RLRK1f4IrW`TkZ^2}aLg~7 at H1^NTkBwLB5<F6T&SLf3!D1AA-3KAB-S<1
zy*~}3bn`9ovYg&k%HNyD$#RnO)m6|2-Xp!gFp)OL7{2QhhzMu>H7b^m`KgjIE7eNO
z7ShH*TDuWi5)$hWu|}bah6MSTEtE7(7Zc~g+6-OAcSB*r95YV6<a9fAv#OH-EbH`t
z`n+hf&--c6^8X4oG4DeSa;Cw>f$poxJ*!m)AUg5aW at aA6-IBQ+XQ;`mr!mK(K~|o~
z-7>Ev%PtLIBL5jngylJ!=#zKJ4OO;*?#5jEBQ^r=Iyl%bPfN9Y#(QhMD@!iVU%`nG
z^1eOFD(}F{GHllci@~e`&4@$>_Hr@@mcqXRPNsUM9y_<B0xw7%Q7ipc-Y->>#Z!Db
zw^2yx`6a at eZmd#Sj<<5S`fm}o8?dowL!d#W09*BSfi<P_+L<P0WLBVQkgl4E`5%M0
zbhLMF+o at xoXI)z7&`#|ZUEh_h$w%*-i|I?6;9Q)Mx#rLYch)cW5QR5$9ggq@;*Msn
zH0v|QtlU3DhNJk at ZXL27ns>w;t<Xcw&gZPT>?Rz@>sjq@`7bL^eJ|3gS$~HYIB5Xv
z%R_x;=&&K*>uv;vr#8fg&e^~bNE*GcVZMz8#6KYTAqOk^<zTexJIwuXexy9Uo0RPc
zwZ at pb+Xa^wR&8Ue9rW09AG}?bb38A&_cXS!gd^4#{MagP65SO};_j9;yq*5eawD>X
zv!0+h7n}_eV{64iwMsl*{ZcGb7wWO~9Q;y2-3Wt(GG)5 at s+0otN^&GGGAq9O%#l#*
zL5g}h#w;eI{<CqoBKT6CAm90`G>m!OFJYrc9$6L at 1+aNd08TiY_U#E#7ZmM+*xJ(!
zo#4jrP<we&JK<y<9b-a96U(|l=78#WCR`{BEu at xz!a&~+Rc_}L4kt at qcXQshg;Q)d
zwhFdC(VeS+R at 1XO(*raMMWB>arwTkKubL4o>BLxvwwy9e&V`sJC<H^l^@@sS2SwL!
zV(vRPnm%~~=AkavW40F)Q`EP_jEvE{23H@&uvskt+t_RN+6?}87+nheMuscd5iX)`
z_+#suyP_5<4ZY`3e>ccfQ?^<u$0u at D*D1zc!^79XM4U{7d8f#1ZjBT$uxNKq;o;x9
zq>h*UybS_crf2eQ-R#)=mA?!{nj<!JkO?{N+E%#pw7HmNS`KCd|E%DjE&SuaKY=-#
z<J#%cYF{?Y2I$>N8S`}FxsG?yyevaP>?w+QAJNG_mIma4Y0&Xl%5sjakns~aL5&<B
zDa08?(+)=<ebA4`=vQw4Zx}{yo-F6m4D^fdwguZ)p`A9C{&peZk=5=Z94syp1EpXk
z;db5?21~jg+j9z|vo51gRQ1 at FMvSi89QX!}{mKS1WeAv}loR+J(gmPQn=;`!Mo0f}
zA!Z>4cGU_uROX^!C$O{aCZD2U*sZ*84@)0eu1mqt?KP&JAvcDq4t-r?lqZx5H-t~H
z-Iz&Vrp=v at uo0cFx+;ZIB;FqB@^CX%S+yC>UF2W8QLamdM|EA`+!vvp{@;9K1gYHO
zW~;6vFqkxtnv<r-W=zH(6`=R}VKDwIfPSD!%ozll7^uDD%#0X<Sja`^NZlT_+n!#Z
z(y7D>>Nt$ah7FkCjS#FnTPv4ROrECC=6;mvLjY+hj2$meQ_wfspA}&uH&`+kg<vP|
z${JuYJ?%WYm9N}8B=7sQM2<kxFu%gj43bu}CtvfJo;I;~dZFsL`J>B>`D^dCEO8L}
zK>+oS9YLkD(*ucn&9=GTlm7M=)6I at qI4FQ&+Jb?B&yZ&P3zWwEozc_`&GpT>vbpnj
zbV7#)F?#X2Jx!=Sem(ksBHx%#?oc>JA4-I=G7t)}PhhRyQvDkJEKhpJG#(vJw=&bS
z>g8yf`L}2lz>E=p4<c~%JQjL|Edw=`=@UqWq#wfs)gx^0)MI`~0amq{x3nT=;l&_b
zGC{wxnels7KXlTyqpf54Ksb!@#XkpGAN=z-a0CC9VrN~@#U at PYqEaXsOwM){Pt4Bn
zv at H$3;lvWPSXe5 at kNjE;*<H~slUvaM3FKauK>o;3^V0bG&bptD_bwUuEWB`lGh=1p
zGsv`9z(zlMn6VjLjrG&)UeHf?=KU!LQFIIszUDMp$QPCeSS{0ZD?@$H*D6?Rp2Y=_
z)nZ?jR_NKYs3)o at A4E^N3D~O01lxwa#>ftyjWbM;ET@#hxu1&#>Y9`DY)D5&+G&cE
zpWqpMOOGuz!_Fmm&-a*nLq9}>{Q#(62GgUPDb}I28Q7CKZci7^&VI^QVvK=ly-Sos
z7<QGrFS4*1AUrLJAC<_t-?HX9`pwdp8zKIF23q!q^)9*pD8_I#dB=3r-}JBkaB%!R
z!Oewx<;u&!tk`GrmVXIr(B#%=t0977G^-{*U^^b$Fs0*6zA<C+12<05^4=vi6&bZO
z?$)u_YVi3%)Sq|P%$z@#RDEtov&B-5M;!sUBgYL_TPzt<$N|*UYE0(H1CFX7m}dS3
z1u<)pq~Hc+a#1`rLX|woE=mORpbyD#rGqkvji-n5!I&a{D2c`l3fwi2 at PLmw;j^?g
zCw%JEl|Dt;^ODuIdhGT&bO?~)iyBfM6r)`QCyJCz0MsoQep at 956Vz3K;>u1uxN!`-
zyvQSbffNTk)t_QUQF>kG6fLTc at ti^jyrP*0BM^XZwM&dpRWG5fcLf)eG_knRq&V7W
z2QDH6*=Q$6B_mqG-rE>>c6aioI9ilJLmNrt$ar^{$&H;NiT9XtbP2661|+0;YBY|W
z6i=1N4Oa=xZ7FG<Z5nl%m at yo7{q_3E;xVccwg6$zk0p>9p_rli6sDZF#<)#62cJj7
z`f-?kE(eP<q-~{-!VgBlvb>9aFgimD>biUn#-I}7*yS$dBZ%C0z(LXvgI1tUm$R^a
zJ8B;zf^DnJ6NDU$><c>>Rk#|=m`bD2RL#(%zJTR!SgwNQe_`48u6^aZ_EK0rhNTuB
zVWEJAr1ggZ(27=vE?)C25RirFMa+T_MnN6AFke0u5&V85gfiDEp#s&HRU%Dy_DA)l
zk(hPyxw2Mtb#-!ULRGAnX1Dr=9qnVBO+(&A`Y-QdM;nc?zf!fpzUu<q?7kNmBMQ?1
zC3Pld1!Iw|x`-f=8~2<8Czl#Z<OT12-QR9JPN#(op2e)uZ*h8}2AyMh0-6-Mr^@W!
zC9)N?W;G5i7rL!w$pnttd&GKd_SbP(Yyn4`XOO$5r2%)yFpNV>($Cjo){{jmnh>Ln
zw3~l^`zL7{FNF#6gh_w~-H0r?zx!BRr_cu?W9A3HH7xUlv1I(s?b_*45{&!9By68L
zP3D;@!7Sgqn<x?H8C8mLg~#W9rM%|tmboD1K$;!q9y}ZOY31g06a at j=ZR_nTu8upn
zY~&5|AQM4|U1Xk7F5?d}(A!#8JdA+7L*ak9z_YrFoMHICoZ%$o46~pwd=BKnSs+t&
z2gCL~9!*6tsM})u<DgMs)xnwnkl-CLCo~Lr4#2#^j8`_WC&FW5D%B%LW&XW%XsKyD
z^kO3ADYj))E5?CmHQIbuIq<AHF?3dxgmeEpj(%49>s1KJ(f!vyBQ0GMyWb6c+<K-1
zy}&7c+<XunL)EO_B|(;8)zIxzccTEnr`${klG?%kyuoj)g3#N6ZLEM*Y;x7Vc8HtY
zdcFj_Rv0=i+(w|)7 at yGirjZqu!Fv_<WEt8iy6X(Gz*Ze*o>xFuI$AaIeU!7x6O0lR
zVf3OFKrMf`y|Dbj_EqT9l^@)et+Sahz9i}nM!lX*TXn|Qwp at 8hF}D3AW--=|#GiJ#
z_b7_wAQC#EaEOQ^GJL^tK|W<n;{w~V!fG&yXrPR7ElenrZ~%`m0^D`JZFz>L<{0r4
zz#Eq)z<S%U>k6J`^(Fv}p`6lIUtJm3emTfXlLOCHCG!2#5_461nbr-~mnXNhn|^Qj
zl$P87HHYnBP>gjaWtwc=RoLl at e&R+j(mF9lUoLlnT0oxPq<E6Nld=8Dz)oZ2v2i~{
z7p?;H=+zi)K?%V+s+gVYnm6UB%Y8>i3;<Nv&OMqnJ6Bb|99LJH+wcw-yyG}(D{XR+
zY^eyenZVg(3|dy&{q>l(!e(r=e;&|~!<nE%y#O2AXVs*^PnwMGd{P^m at k|zOb^BB4
z>~j}~@2t6t#6{oH%4F0J(RKPo7<$(^^=pDLB>*1L9t7v!H2UziIX%R>o^&&_+HNY1
z34IZou>JBLqA$Xj at Cw$851Ynxd1zvKG>Kv(as91(h^$@rCWB-&6%WY=G(Cjcn$6Tj
zL+C*_jZu~pxGuT^*4Y#G%j at LoNDfUMG%|3fx2z5QwnnlAFqU~zwW<s-E-D)Y^!J3$
zDZMXtQ5~7i%<BPkCtl5IsljW4nx7mT at 0x%9FWDTss|9;vgFip at KphEOic+*$IWgqD
zdZitH$#Lxv7VS`CT{RF#z3BAogQ`v;?p*??M`zYvY!tXZ+2`kW$?G&=NUfLCRJBev
z^iF_%{y4Qx<$%%DSM?xJFvvKasQMk<0*2GZZ#=}q+tn4$|4apQVaA?sP6au at M^)b|
zSa71|xr+26ytsG${%ok&Bmbk5 at R_kAaD5>UV|Ep^g`s@%TZI`dA5>ZkEaEyx-VD>L
z%s&RgE6?sI7V!ZVKQR$g)dt&(Isq;I7_3(ZJ9!!?K-Ln>6}5an>7N#Mtk2}O- at _PN
zdDfIvH7XG&RrEn>9DR^3s-}P{ULxLaz~~V9zMa-P$VLnt*te#mU=2ox>3t0J`3>ln
zc$wn*i?1t$2ZIyAf}I%tMCdWTZ0SE?YN-?xa^79M at 1%yQ9DehB3Vp&(I at zwW1Jvjm
zjdM%k_1BCG|A((Pk8A4a9)~9(fg1=AFoA$zF8d;CWKl$7!hS)K2t);?vIxN_;=)By
z(*zBO6pRoeXaRS$wYB<GY_+1aMH`j2Zn!pzT8qZ6D3K!QJClg*^ZdS__mBITyUsmx
z=FC}U&YZ(ljKAviNmQISu#9U5$hF&H%~5Eg9mBBM&!F<*43&?PCf73hiO&k%@$b#*
zd!R{upKMa!G26|#Z`Jq1nT3n|p|Fyj;rKrtXNwda#GYj>=1C3{=6(~qthZ7om>HHr
zC(KoRmxXjuG;>@1c4C(Q9G{agVnYoIHBHd6#_6o~heJCuWcBXV;f;_G%afT4df>hD
z_1LT(dA~l`DbCaPuQs4LQyY2}UdDEPHzz^gLSY;8^wHIO%cD!KU{gmpD=<B|N)_K2
zZQJ|n)|g>M_GR7cd}@inX^)N`idn{g5ly87jA3u#cqm^PNN>M at Q5%IIh5Tw9qj1+a
z)Dn-4578XLpTL-?TqxhP0h3{h?zklYTijoOH6JW<ia$uPh~K0fi{qH(mi>+;^58+Y
z_=8H at 1T=5egH5l6U1h&`QY8XVQE>%Y$$cGIp{+-EAvdQR at _b>xN4mJQICK6~$V^JJ
zx5fzSSU3bSR{ng219>yVajG*c*)szK<t(n?`XHr0DtgW91kvi8$38=gacj(P4>mb|
zAI08(+c+Fo0n2L9PA0w|WArY2laT%xo3gJobM3&~oz&iC1&U~rt(X9zno{c&;#jg|
zel&S=kalwM{OHnUj<F-oIl9`L2wHm+v=xsrFEsImTHL}>9&d3GeNouhO80vVm|ADi
z7qtx;mSH_;;RR=v-cv=%oe2*?c|AokRna}eAuC`hn*fJL%nS>4dGut3{ninO*WvaD
z|9%~w14=LG- at JlQhw+|b0jYJ?wA*acRAh at J6=Q{4;XHX5B+BiuJPu1IScby#CM*YF
zIS-a3EN{T_1uW;natg(TZ1mvCZ^G;2 at cKkD1KF+eE0I_q$8nmC;(G$bpDmvu`wA)r
z5B*%iw7jWkcZB+ugZ?wN->dVuAx6&f!xdM+q(#4Jv}7vAjo<+Y0PZ5+4$DwjI>B-P
zmN#KZ!g3xgU%>JPET_P7E(HSM;UaH@*C*h$o6uy#J`50ENZQNo)um)ls(kYCFS)Hn
zZRsuTZ4wC-qb0RN55gDk5~BUM<VU>f_%F&isSY?uW#KrwcZ20>PnKfLhzEdY%s)al
z-`5<Gjf)O{yi0ie`%_oKf5zeMwt3B}qfx@#v1 at JILmXec@bi~w{Q?SNO!q{^bK$4b
zBPFJ4a!l2f!fNc6jukHa2ar$*hzW?#{tqC42?$z5FZ{Z|R1<ynt<5Jjg-e6n%FZ3C
zwP}LC{ld?GD*SEo&)?Pbapw4)S!F2G99<eDEIa34YtsT>aQ5 at RcPqlc`??+rJH)Fp
zZHsAnAMk$JS?RADXZwR#vnTu_eD)=;3PNBhck}ajeJesUcA1FsRI_jy<oODrO-+bn
zmV58da at Gv2`K}>;SmqZ18;k!EBTh3GH_LfL{Auz=gRqYiHV&#aCVk1KtIFe4gh!{p
zs))BLVbR9ESyx|uw7&{0Ai;jJVUY4|Bv>r(S;jk$i%aB<^%y5ExcaDgNSx6F#UqUX
z&FZ5uE~WLDVp*9=<Wh=x@$hKX?Q=86+H?~@b}2b{Mo$*gZ+_P$`Ml&{om=Nne7kZ?
zy!LBHldr-2^KZ~Mr>g>nu4J at qfPh&RPf3nA<L~*T`6Qrq><HIAD;{LRAA=q91|A?^
zB-ncEL=F}RSsA9z$LQ4uObyW#7kN#ZbFa8Rk}|Eg9%Ifp+Zq3bGEA1uoh0*bnizH~
z;BVx;MD73-vI8)t{aKIQ(|ldTRrsS9%N^wy7JzUDyVVr at DEtvWK;FooW-JuPpja<s
zBhGeu_W;)Gv1fIr&Z&7H<2~A0Y3*UZv2{6=Q7uD*6WpG3hd+qKj<-L(*2lT*fe5Z6
zEPA8g%ZOhRj=FvZ?^)Tn&!Lg+NtV?QO+t06X8v+}LDK({KyMqbW|Ra3UrI0fE5|Xz
zAJ=0~_wZB*0jUnrpyh++#lqY;LbHE)jNknKt$}lFl!zcpOMf4rueJZt*cD4A+_&LE
zovHIu>_cp~ZUjn;<u^trg(tJ1mXKx)P%c5PA$=@ir)FER2jz<9KgIF0{{Pgfx7reb
z+S0Ul&%EHXzeb-G@!+$_(Px_26&_=)6rDC40zhVDYxrvp7^vV0<FuOs4o4a0YLqLS
zZL`922AP67ocrQ0eU at hb3U8;6f9!q3X$O{21K9tNm8~<D>toeY&Ak;9C|Mfj%CzKG
z^AoeedQ#d}qQ3R_Pw3uqgoE$u!Tw|dps*$C*YD#U_-@@{KV|lp%iG?Uv;)Dky&kNV
z-!|{R4SMhPY3su at pR8P%={PmmSDr4$^FP<8qa{dm-F-Rsmijya(2 at -DZ5ah6>=>{-
zxw5U~hrc%;vb(3*6u#EQ{$u-j!=ytJJuVbb%|7yj%>I}o3lGoG<gSXMWN7xUN}|@b
zYW`g1;j&8%UdW)KjGH#?M2)&;-T6fmxH^otWU)5ahNH#CCKX>_SxjQ|zJ}NtiSDN{
zw7mL7tLFXH6H^^`MtqaMCl?oRQX-}uC2(Qxp<DsG9?bP0v=6_|576&?`ga-q=a!;I
zv*%}5T=Pj|EZX%8m4#c=ehNQU5ALCOl{@C(tABi!2a)@FwTnxZp97a!uo|SPU*oK-
zk6vpNy^ro`0kBv2B`zV-RR1Cgynphw7QQn_{d)A<RBpZmfUF&_wWWC=72fB!-{pr7
zr@`+wl(^gMOrz-kNZ(#M at NBtef5|ec>xUXgG8XGQSRe)S)Rmg|NIyj-fHDJ0QZIcH
z8H!oM`lHn7-gca&|4pMKucQ5O^<e65!XKew>Ngl&nB$P{vhFnYy at UYrx_Zi=sc8A>
z{Q!BbtHr2?BJEQ#_s?@sDeBZ`Wt^h`a!oyO&f&Vom110SF2;&W#T?>RVJ-?`p4&Qj
zgA3WZ0~wFG#5Z;_`j at Iia%DaEojzzGv!Jl#Q$kn+J#hT>h(W2pVaeibu&zXljVo!#
zoapTY_>CP5!nE}u^P7+U-t%SI(`Qa*<k#=y^rE$}%RTyN!Il{=ecGpZ<%6~r{a&gZ
z)M<UTDOnpgW*=N5Pd|+bDmo}-^e%P3mohhe55W-hJsp4_P)!7oUXR&ls6>~?D03rk
zJ^lN~CZ9K>_q!f$K2>xxl9>_b06OXR>hQJ6VTnON)yFyEr|B)7rnv6-Ykkwn3(^*c
z!TY=$BY!>%m%id&9vq_`vJc&kJI)&*kg-LP-5RuuoKL<Qo<A@&>K{tG1hLqqk4D-8
znumAD%ssuYfmi!;-f+|io~<ilXL<aqv45cjKBJF5I@$t!;vPn8%=&Hf3G3qPB8L20
zJ+|Xl&E7R$OSQ;TXVCrbZ&thFwG_ at rSH@Y$uVY>Udcx#=b2mVZrH?=Aw(RKq7l2hJ
z8UyvwP$c-Ayd$iI9gWrwz^(zVt-4agB0~u<1O+POwJIBJ6GPwtjofYZm|-VRrQxsT
zc- at 5mqYE&ojwhdSSLp2f6!(hSBQe38tFL^laUELS(G;%574T<{iOG%!j6SNx`<Cfr
zn_J37hqkp^{uf1^S0?sTAXV*tMjXd-dh^`~OT*@5Ah%*M<TqLDtT48!T1J5Ub|#Hn
z2`GYH_1NL1o>fIt36K7z`ly!i2ctIq@{D-VwC+JZ)SS68z;yRXQ6(m)dhLe*cp8Pu
z0{O0CCR(Uc&tLsozJ+Tu+8L??n!qxiqK!*Ov4m&jfkiWYc at x63!EBiY4vc3FOKx+s
z at 7|aT_1 at 4lM(IU;l27{!zU;6xP<2?$&pWSw?{eDyRl+=GX@(C_GcaXSyjIEBn%TA{
zd=RtU`kOwf{vM}ac36z(9o5fPS4v$U82swG#c{V${NvGUMYs6eZS{H6wEWtM4OJUV
zaW3gM{*rGRnq<E??Tgugj!F~>a=ph4OVbZz`Xm7hj_|Xv+y-r}Vn;ywiULTd5YHEA
zVsLthXGtOg9=~g9$eFek)4rrkBlp&0C%$Dim7GWxghPq%@T#w)Xr5TXV$XrNco!RS
zUbatrPLO&VpFzGP at bxR~u=Oee)LtGNsIJ6u^wZlckr^w;U3uzCF{`s7;&uI1PJeKk
zQ>^+I3WMxh0mxb|x7O*dJ;baPYN at U*!WbOmlnxteYd1gbSRZFVaAWSQ6{V{bh9v?m
z4qnzli0AhXB7VB<8v=~EG3W%3v1rj^Wpfo?bb|1QmZnvBVe;fYj?_uuVCK!?P%m+0
zn?r*KtmaK9K5km at z<&B}&<+lRz_J7QSyT#hH8GH9d-QP at dX=pVp$<$*=3hFO%vVos
zD*FA%b@*Wq^0KjILb2o2zv<8#dB(>V*ISuBa6oKfTEU=gS=_p<;l~KPk5daY8`gU(
zRJ)|E6W5q$>h>0P>PB2}9T|z)hObY?&etkwKXN+<i|Lp(586T}ch1;4qII>CKPRXr
z at _S=;STb7cqorEq)bM_sM&6LxNIzq!R&56~@@C3pvIkhj4FFoipBQF%pFgc-Kzcm<
zI~<xN$(V!<Cb-Cwy1HBD({wGv2M^f&dhk>E^LmUMtxwW2p>b6UfPDKITCK!fsb<y&
zm*8ATG%83m%Ld2z90$Pqn<g8#YpyO2Ca7XQUk$rLg#-DrK^rs`F|=A0{{xeyY21)K
zW_bi(3`k1?N32 at VQ;)f=*I3K_D3+RFxwqofQ+RtJ@~|!m#jMiX!C1rH*^>=-3IDPR
zvSxvkD-*e0$WGgZ#lh!(x}jcKoY{AUya~%tSkA*djZ2h?jsf;tYkghcF$sjE^*BT@
z(#&j`k%{h at MVK3~5jKxxAQ$0?$q-&eKY^`ZNuYREPU9AOZoQX#D4KAcADhOG#EP6*
zR(H6Cx?d%jMSqMcDp1_;qyCQ5#YO(S2{Rh9C`(JEHZ2``kF+`~%CiO?PEH0k_3yEI
z1soQbdefI5-oV1-$9+Ngb^>r4Fi(PGimoS at XI_1E)z`k-UXoj(STK$N3t9<Una|o!
z_iz<DG+6`rDn5+&UNGkCW5el9T-k>JjBE)31M@^c9u`7%=i<MH9l%_YdtNi_{m%Yq
z4sTih5b0ifZE&5SE(i;b0gKhN1^=+jOAs4=W^&655N{{hfM!e+D;CTD%3_-21`5m;
zclsm9<YUMy7$3#CN-Da(vSa{C=ynXhuX61u+}6sxdbKLPaN9Tw?{-?SU`v73AzJSR
z;^O?+Lf3%d?{dR)r)&=ihFwON7ls+qB)M1y-IukYp~)qmZ3oJ1ci56W7++8^1T};~
zYeA#pU(osLqfKkF1T-{`m?!+=B!EA<hZ_P{1-asbQRzYE06sJ`Fu53`p1kvWD^xlD
z>HDv+3C8hgQxw7`g;}~<OlCzg8_2q9uQ)EC at t(Kf&thjqC=}`Ngf=U<cpe;qx1BC#
zrFM0b+htQ_RhUI;9n~A^K^77cj;K(~=0sJ**Ah2iXI!LAl5eWVu12C|GOkUZY=#%f
z0(M9XFe;R}W#|6xAVYy23RhhCQ$#mJwVi!m>6>B+fuZ|;TOz)OdVLbf2X+c!?(`MM
zojjk^er57Mjs06s;PNeK2El`8EXvFtn3CZbzo~poSw(e+Z-X+3pNET+aa<K&PT`jQ
zCxmL8N8tTA%BV$vTB&Zz|NV)JM>p0yNE6f$Ah9`;Qs2sYzV^$A+xadcuqY>GYuNi3
zWtFpi#et8n{h9SgjiSM{Aaoy0GZz1nKSZ)?&~`7Gi<m_c(!iBr(Q32}Y^nrcJG3I^
z?w#x^at~%J*VJQzXK55tMEGZ1_hri)Ma+$|daR?JMI+ff-;7vaTL03{xJ33c5Z_pC
zD|d!k<js0)!lOB0<pBUf+g+`jZ{L6AI90)R65bT!YZmKgqt>i}t#J%<utN`Jf1nr<
zC at 5idIJ!n&wPf6BhKoZ8t0WycmTX#EJa5ni-Osu(bhpp<_+Rkcfj437!P>w`hKn`?
zynrZ|Kt_m|;h7c6!W$9C2^0*D+i2(7tiS)NOtF0?wthQCHC!L0{pou3O?5{k<E%px
z%>(V;@nBAY(9_D|?$pTBchRSexqOi4)7?1I`sKxl5#}c)q%YH1%cUpw5dLXeD at tvn
zFLSb%YYVSE(6zjJ-IFs!`|pA+RTD6N?<?aHeeBD;&ZzL%ERUtzBAFN5e1T<X14L!7
zCUs+=f{<mz@>m<&)T+U8VLiaNk5lL}QU_ at 6T6P0T5;Sx4os7kDG4L*3tXz^c8MJ$O
zU at c@iq|XK{P(A<0AJEp6<|)Dp)m{~%5mxrE@~wb9(!5r;bP9_$@3GaV>T at Ezv{0EH
zuc6qgrMrC3ELFwSHo|*LwrXB&^vF*3e^@!9B|xfGiZXr=h0Y{CIf?Q=7?&Q6w(k at E
zFj5yuVfctX at P&g&z!`K)*~dOmzZ5X_&EdMGhgnRC=^x1e$<g1xcBLWKR2zW293v^A
zw<9iVHf-|Dv}*HdFAwih1#N-Nt%L+NWy+dnk>mDzo at v@BN}}6c=R;S<`FMY{aa=;-
z7T>h=Ss?$T0#KkW0Abs6SV_en7T3Ngu)O!ppbI=Ns%^)pyS!&ss&D-=ta-6%BK141
z##<GqfHd5mEDa3uQZA9-9`ceU`-1daL)Q$!U()=P7~?ZGGt8!zIq|)(9Q-LxEQVs7
zP-oL6cYJW_Br?=J`mOFO_gZysHckf$d0(s5=ms&xIjgqr=C234x|mfcHIMrFE{ow7
zS2P1_BX~PwA9PJ0t?+ls`E?{65qvNR)mqbs#XwiO_((z`3F)#ulBzz(=aa{l1qkRk
zJ~F&4Aop8kfh8Sl7}&7OB5 at aiCrJcU+5Jd1M4g*y_j(qAX=h_}N9S9cdHIS;OpjT}
z$AC%luRE+6+lOtYJ)ZN)a0}*CePB3lF&9_#j?h~zPf;DK@}62930`eApGe9S at mLVz
z%eySj6lAU#;OjhU8+887ZQ<EY4S-SdwJXE733wtFlc0?PigW^RxpgGrl#jaF7f=@`
zNeKMvxy|J_#BD3D%sIH4TS_oS0pmcnaw<u<g_DWV6BjbWBW)Ci28B5jGppN%<4_<l
zVwbC(IV76Zk;Ec?dwsprx1)goAR}b?N3~l1^Zd^*;Pb1<pG_?mO)C}slDn(eyjci6
z at BWFRa~$)zBibxv*e-G*S&;Krg*Xm4nFmSNIp&vYg~}1=?Q)*HYfT*i$QH~tVlGnF
z0+DuzE&33-&a|0aY8HKl?vH1Nv4MA3C<wSTB4Uu2AqyJd1%&Z|x9oB%KlwvbV6a^#
z8u*Fwj7VCr&;;Zd*kwFZms!j1qwk7%3RqD<q8_0qlA5>>xRkB}F{Q6TTGrWh22ZJC
zBj-Jgj(#SH7fmDQ)Kj(xD89Ejm*w$68W52;$1(h~AVy5FuB<-xY2V0%Kij}#p`Srh
zTRdZ2*-9cPUMphQdrzvgUz}TEq!(9Ra3dy>G~h{k14ST|N%oc8Nt?<Fk5DsL3%8uS
z!)uX?Q3{<09_PK4320vypLW_-9xGuf+6m@`h47k!*<K2rNR^AvxFMgX#Tee%f$jd4
ztN at m-an5QeA(~AA=iumi*(?p5z*9=$01hlWT91viRN?Vj&uId!(6d>oP-g#e7sa)L
z{rPEjL;Y2!M?9<OHudE}4^9W5$iBxh`AsB1VL6W(dQX5Ik>6m3tzW|oi*FQJAIr{M
ztIv?#uSG#9*I)tO$EX1Uttk8 at rW6ITgx%F%zvRldRAD2kssO(`L%;Vw(u++%O_B!A
z at t}UBR$LacGh;ogil;z(PYP|~jjZSOcbxjwDqjY_LF$^LO|tA3Z+xmgkFE(X;Z12^
zj#kW9sPyked*yAdDG|qzU!-^ov?)PJ10GP_O!kQbz%xM$=n<F2_Di(0{RMRxz28qC
zlhiXi9Qj}0n)ht^Y&W8sybc%&`P>vi*(#h-x|Ei7|FP9(*?SQT0ejFk^JT)8WVYGR
zH-w599d{yh at MBLDY6zBrD7;YFYMi0x5ZlQcm=g!GTG{8A(?KU;CyEG#jQynza5TN6
z4eB(<F{>=$XxeP*ivBFhGj at n((H3jPgFzOQVD=`Z!Kb&f1H}t=hVuI|v~qs0!qMoL
zCG-5y`bpN6^afIb9REBxW&g>t>8p1b+{L>w@}}6Z3Z*FGSFkMeO-D39<7I<~h#_yp
ze99^=wr*XjjJH3i_}!)!)jh+`_cX9aP9yBIuA7d at qprT%>nQ9(VcQ`IHfx5rc(eA&
zp1m*3-4+M6K$^N~zh1+y=I~(ml{88N1IH_+XjDDw+R?iB8D^U{FrFgJ-MC7#xO%$7
zEx#5PQ$7bu=UB{E>LTpY9IYNVaorP}TJzYicXj?&h6%eL>YiTcICS#Kkc8cg_y)pM
z at M>ErVuG6C>bdXjehqCpZxl+HI^8s{g`J)*)FlUr8V^kncJECDI(HZRiTove?u~c-
z=F<3zY-s%#(!X&glClc#hex9gw1IJv0GB&UT`Mn%@%7RA*_xvtOrB?#9E>_sz=1|e
zJDPaOW{_8)(egLE4&(8|w7`+W20>w=m at jgnU^v113XzNa8fH7QAD+K9pUalP?=BO#
zF<%ueY<{&|6JFz?_yH=(ZNssPS$OY=!#{jJ at zZVlQ4{Y2#OITP6Mr(-;ciK7x9^Mm
zF;Q>6w(lFhpO|GncU|CFl^MjU(zmX=kfx2JoMIM#kc^A8m5XO(m(B)hrK at I1^2KJZ
z1{qdRqC2E+JugM&PVdwvx?xkG^+o7<HZbKoAroi|0VQ8RwmBD)0NQDw0QMtU=XB&{
zoY5kjUrEjxq^?*pa0 at lq(-H5g9h2cHJCsF({qzayr=7oAecbJ4 at w7`7`4JMYvieiQ
zJUTR6+pXzjDds3?2bQwmd=-G-5JJ^|xb7T+SoQ}bd5M{>-;9Bnft(9!Ki$7w=Q0n^
zpoz(nFaHrfpYl)Cr#fHb at lC471oAcpl6tCqLXBW`7!CsBMzCN*71vt6UBs3*)Pw!A
z2_WggpalR>Y-~$Gc`DzyUV({Ab7x6z_w1}(q8w-WyBLT{m)GP-Ae$UqKJeEWrO%yx
zTOa25HJyBND()Ya`9+~L(6Zunz{jvvGdN2CBo9{cUsBh_&wOz!AJ$HCm>;hHh+SXA
zuEKAm9*@7b>V!z3EuycV?8_S0AjYSpLksZiOe{{}v$4T&PwE=*g?=`)FC0GI3Hz=+
zk5Zbaj7J-?<y#_dr)l#j{jswa7qJN+!IpJT&@}g=T+hl=cA$yWa+!xz;~0mov|5 at 1
z>OtU)5IFyrN*T|2W1H8D9a|w#>{Sf}NXDbJzG)lh`%y4<91B=N0mD)lb9P3%ZFcu=
zU2MWcdiBSIf9-XQzG4aaOkPXi7u<JQT;OoW|KVt6zb#8>X~rcB^RwvomGVxhwdFG`
zP+qwKv)YegkR{WW<<PRTIwFSr%E5#<zWFD-u8Wnu&mYFN=3`=`=^ukMNITDdBY6sb
zSO;+Tiv-kBovU*5Ah(SP91xqCN%HvGTHx+~?^-u`d{lE at v<$5yL(#}}r&HUL!yvst
zK4N_lmZ`A(r3%js;x at VK)3=jTb$DUxu{W|qkdQ-1M at jCM1-H!SeKLi>i$hm7%8rSE
z{!^QS(5PkkOIqzlQ8~3m8W`|Qxr982u~0OSv>q#pVfn7<AwG_u_?_l*&??uPmt3yA
zUPyT~*?ub&B-VT8Uwxi*0kc-m&;L>GTo1+tC^}6u0si<CG!qbZ09b5=7*?NirKTvL
zssA>s#b5h&=(DnXvQ;)aM1X80a6K0ocAj~?qk4R~Xc4`*QeLCO)#s`}ehzTSkYIsV
zr``I{DAmXKKW()XNX!Ov&R- at s4#uut`wBQDy#zO<<C~s31d%wwiwGl}XA7{_EFWyU
zyAO9e$-!(DB?Ev0nHh!r3(D|wz*gV_RVY5*T@*~bO#qiY%e3DvTPZ{9Ti<wf?=r?5
zHAN$E^Z4~#Ts$^bK9<juPvuXNpTKNU%Dtomn2%A$DmJcz$0~Rz;IS4SW%`(mbLgF@
zKgd+fm0X2s66)+6JcQ at twVl*)(4Kk*ZLpnZGzE1Y&Tf8t08Kt?kl}@UbQbDb9gws-
z7OrWnbEd4(oTwY8$oX3Avfe`<Z8J-U%Z^!FlUn7JqA|>=E2k~{9>V1!zXjn6gK#yU
zx+Bb8l;0mSB!)c at BRj@t%LiDjRga#{DeLzOxV7!n9UY_h6<VZ+FgcI~m<x9~;V+5D
z*ajU+SW<qOY(#bVyk|3uYgL`6j0(eWg)V$E0Q#(}uO6P0?nq|?3sYRhfT3vP-U?C5
zVo%k1*gF}{m>2A+!^UjbQ@^#^{kx~udn*_6{<N=<VP}6ZD)h0&O-EySVcm`LWA)f&
z90ETE0`K_iMcA0}^07#-ea<lEAC2kbd`$^+Q(!jnEv8xPj5s!CHS-`~7*{?MLEXc}
zuz<&xeHg+TI0#q+&1nwgGynuvy3O)2xV-=l63 at DbzA!h;vMQkSO at 5ChFkx;oRD2IW
zx~1`%<N%9S`p8gdOftkb4?dfjH7&amVkZz{$E#@-Mo*z_)EX2z9zQDpuk`zc<(5Ii
z=#m1=SKSnKPj(DUGA04>fEy4R6G4jn+HXR%R at PEc8+9qT{OgU6YHC`3T6a}e6+}CD
zq4zn`xLUlPEjKK{=o#ngu`AYR&xiMd`KZ4q&!6EF->3{io0}mWyS&d*y?5si)gogi
zty8h++%*-a1;ZpQn1$aLL*L475mu797^kd%##mAdcr8CbI)#;7hUy*K(;s at D$49H7
z#bV~v;_dI~doiT%MW_pqD^oLmG*(s*Sfml>jp!jwv;&@`6muH|U=40(UDiJfOuvaK
zOwfuCp#&A)>D3<%N6ELi+L-$nEyzf%ovifH#@N9nEwFD(S142Dwa~b^!Q&S>i2~%M
zW2xaN64K2Oswt|<8wx{Sl13rVLJebkh~t`IT8y!{D>;mX at jlEMbBOK$EQ=Wdy;W at d
zRs84S&g3=)aP&Xd>hk2oFS*a!CE=ygt%d%e)h50Ux7>1l*E4@*tL>aFxyqkDNE=}c
zQaTtbCdg%j%=lwWdi*giO;A3_K&xiMKmBeo_U0X`djPKeRFW1zTBJ=QMZjTT1k%m^
zv5fFJASFBpWEdVImLz(W-;U8y@{nRhDKy!(H!+)C2IGn)gKl})pF{gH^+^VatG&R1
zU>^1~to!n#8G=N2v|k)zV~jGPB3B<R+dE_8q4cY7KG?|h4vPd9zLCIw=3I!GdV*=1
z^t+4phJyfOiat88tEOR%T%Xj}-}^lN3+34Uf_Jl<GZiEY5}b;__pR0^p_m;fn+)sv
zWUmABLoqs(VR$WMCbbP%U<X%W+BFN+1AkLA$?b&ozxsXw(lg7L!q7Ml<`{8~z-K#P
zJLOmST=``_Ca=G1(?z3inYlfIo3jgtoF10ELCZK6rWhl;!t)xI0T;OuJpeAo4M(Dq
zdOV;(gwdg at Pe-c0r!}t2-vOBsql$upPn?Gg2$l=C(<g0K(*UD%i9Ytw<5v6s;@~t8
zP`X4Zt?4tZ3vh>9q&7`Y314}ILx2D${38w^Hzq|0E0l!xXz`I$sMJ`@W^k)X4l&iY
z8PFhC2h$%DzOohqA6j}O`uT?uy7=}^+i-j*J!#8X&qF(A{94#F<M)eosG<<o8div7
z3G0Z(A5MH1dAqgG9G~44Gapa1oa2L6?CVKakt7QLW`1^oEBbq87ra(9@&P#$vQl_+
zX8#}qRh-d<VrA|hV_b4Hu8hv=xZ{{o9p4xg+#jP#5^!d)1sn_)d^dyDAEio$*OvVv
z)ofT&`x8vhY5no4Stwh>$~MUTCPVJWUUtd2M4Vz2ADdlP(Y*Eaty6al;kdp0DBndv
zei7s#YYJjV{E%>HST=(yxPjXn<vp_!*;!W7+ovu-UNCJ~HfZw>wf7-v`ygryAzCMT
zy)gI$St)cE`Lf7rpN!*v0YWWsX*rj$KV!hpJLPf0CpvELP`p-YJ#KCmMZjsL%}84X
zjL2=#0f)e`6kKvjaySW<97!rRS+WWXMT}zX07RDrSRqFsGeB*tk(yxTMqmc#XClO)
z3^o|%C;a4G%ayiS at EfOa4i;c|fLW-y-9Ki;Aq<M9XWS^_L6#d1S?**q9t(v+X&Q<>
zWY8r~h8&SDZ&UzhJ@@rRv<zVrPk`z}!?Vy{$dYnk0R at fQyH=ltg2qP~Ujvzu&5!@Z
z_2MAq|0vi3`MxTMs-|HRlKO(|%750!tji6qM%%SVD$H)KJE`3tj4Yz*^tTS{!UizL
z<?%<NIEoH{$;VjW_c_Itkabdxe;>XGr4!M|@ph7HFnU>Bc1K((77>?<g`EEc_Tl_v
zD2^O<{zDK%HemD;5~>|5QHmE}i=t$<cSSOwOrV<LhZ$iXUx8&QZr?G7cENo<?E={V
zm?YYMa3$hy&uq+T22z%a+Jfvn6Fili_b?`kWb|E-efgrf0IXTm8AYI3;~RiE%msrZ
zZYf-pZ$x4Mwi!ND)lPfO>m4qNr!8lppmL9-9Vt6X81q^0>3tNHumOw<62#UmiVc4N
zztRGeFq?`TCz?tLfBe>|rz!N5N`wictc|dj3V%cswqa`{8D~}>B~T;(Qw3#C?4WJN
zW~k}ix^z!|9rJ|sB~*Vl92M4rCg}i+(do#061WYBmO7ccrHfwik!JtSP+FhtD+kR_
zJGpqyS7Mh|oA+O<Rme&=IVZBnrGr$&2T><#*dI<>qFQj%<j%-y`7+}BpLb~f>{z+C
zG85gqVNH>=D?{P%|6ajCF-n!e(8{n%@4+ajM6<h=9<T>)gaFT->-ykGrOKcIAen$`
z;lN?ZW`<BhZxC<O*K!|dKKamt^1bGV51p3f9EM}*;EXXc?98vI>Y3pnfSku?mxkyi
zCUBf^)_~g|^dq5zW8P6B`o<5Azhc#5XcyQ$`m^^r+9r~9;?$5@>Pkm({%Y=3MAgnU
z|1#_^%+k at hfvpiYk5z#99ZJSbOELJCQV*QMprHH;v-oko)lUo`(W%iSN at 467Aq@Y{
zj}3P*uRcz!_f~P+DkwIl`$|FVp0!usjCa6$p*7=mDjYjRE)_BE`(XRY517+Ynrj51
zbISg;`=Sp*9ST?^!-jv1J$Vf~<;&m|8Uuu38WhvJ&2O4?Prg2SpRYa(nj)526YxqB
z2Ua0;?31i7r;YU0M4*iT$tdLK>s+v6;Q4KLgmT2Ghl#7NE{&VPPpYuS(5i>NG2;8X
zH<Q?iE{A2vM{sZ|3A^gIV5q$zz5GThkdp+{6pKjqy~taB6aHLKB_bV^p at b|a7V;pg
zQQv6v13}`|SN}=eyA}2Ou*@2h>`?~8PGJp<K)qrmYsJ9Gpw(!nJU9sJnyO5wu>vvr
zFvkOEy>RcLb<ZFzFlOF-*Y}qpyHKQ%&}{67d}PO+`)6!o3Ea4EXyJLN*xnFRvrAWt
z^S;?V?c7r5Q67_1f&wP&^AfKhD*!0<(#Ohclc#@}pIc!Hm^&d`^+R!686>vK+ucZ0
zpEVh|5S?!mr|@i}5B72X6NrK&6*-$R{-8wxAq`U|?pvo%LaKU}2VRL(^l3+-p1Be%
z5;XtzO6q}k70nwRO+Hl+fO*J!1}z?Y2E4g|;!>cn#eJMQULWVdbaT2e0*g3C07EU|
zkLFV6twYYjD8sYvw4jcllvNNNuw;}eDu~m4ocgfvV_a+W;$ob at gt^fxU`2uICf2Y(
zi!;bZF(6xJhbQ`g{dP6H8sukR_IS@$X3_P-9S%Dg`5hSDUi#VhMHyFLeaH*}18kkY
zY<UP+xMS!(nguTI+I*s at LFaGSP5@zUd46%vGFzE at k*#4nm#RRLaiq_c#@})3l4Z~B
zy?ucmogw=yVv$*iJT*}%YlF7#8jOC}PoHJD=IV~_l}TKgh7fq4J;Tprf@;AeRr2O9
zLszd at U7EK^RMfL<0+hb~Z{OvTB*5UXvEqeIsyysx$b^7VFL0JAZ1dZhme#RF6W+dP
zg-W#)0CG93ym8rtd at aq=dTx>JungI^$ruz=4(P`v5S{rgG)qekO|`P;H{06l1lX`G
z;?kx0qQ6ibTbH8xX25TDF}G%;M!3 at Cw|ify&!Ku?{ZF`*(=0_^_k(M-(edRX+KxMC
zYu at HJ_fe;EssH3U=TbTxFl!V72pQbZqs!xw?Ewjko}P&@)bs1VM|*k^=NtRf!(Ps&
zz=KP5NhkdC+XGFFt8J*l<I9z_(}e?1{`C(ZzT(|as_-J%0$P5<;gQRO&gi9y4I87?
zsmmrzAINC9a3f=z_uWAzExX|`JU$XQuz>vLvI!k^usmL5yRTqIF8_xax!!j%Ya845
zAr0ANC%Q*sDB(3>EhXfgC<po+)=OhBYcNG6O5BruTsEe_SJ8JtS>Wh2*~z<oBkz)%
z=ifK_V?{5^c!BWRIiY=~U%!{KAaT#`6DWWEovzIvqv++TFlGy)a;Yocb#mu|U1y{V
z^GJ?q*Aiw}iJTBTx_Rw970N7h?nfaoDacbG09vW*?shT0AxxiM)M&a^m~VvYXQLl<
z2|hmJIHrdcoMxT5?{BNteWkl&1R_2@(mMY3^QNUeNfjQru~-!)sl&XHGAs+32vRC+
zYEaCn=$}V(*}$J%LzTmN*Xz at ZQwuCFbcE~PJJ!mO*A7yiK8)O;AG>Q>zW;J6<F=yr
zY2jR!`;$egY+>_fvkPlmX(#U}K0VYjbT2d;ENS_)N>o^ZVXv3fr{srGyoFU#8}GcG
zWe`YTpJNu0`%dycK^fkT9Io=0@^=3mcC5;!=yQ}4$wuw;g-y%cT{By}R5mpz0YyGo
zPF2 at g)8~F?26XNpuvEYkUb{`JV<!7SeXGk=-_yX|r*0E4<+6W!4_;%3Cm2?uYwJhS
zK>RZ?U!JXhulA at IH#QFX!5?hx&Wl|!@-Rsm8tt~EyYv35sq%!Hd~p(3(8F>V<IG~c
zf5iqby=ngO0>Kd$tkdm%jssBaq<ZQKYpo~cvkR>AwNc)82W+qfa;eR^3sP6sSNhpD
zweN$PuaxnEI;qXc5A`wfE&_LS3J*rvz0O^L1XUW$8d#(f)o*wCtGkMNTQ-Kkpe-`H
z9_{PTkElWUwUf at zpg}F&CvWD}=X;gBs%X0X*5K8kOd#PYf)XJE+IH5Q<*VrKkO8gM
zpj`DnkN{Dn%~f>j9$8)88<bvp!{wn#@>*A0fkezA_ws_|*9R^BHB1=-EhIwDu5eiS
zdRTdoIqye-Ron=C{}IYrkMb%jI!xc^p>)@ZJ at -u)4|zdosO)pVJJE+|(|dI$!A!c0
zk}1Cr7Ckb@?O)F)kcX6$O$#*VUp7reQPt5;y1RfuT~{;B at WWwRsE6B<dvls{GeZ}Y
z=Wi$k3sVo%@;j2f(fu3F%KZG>1X!eW_f|v)Ov+cZ&-5NnJVXxvbcBjlbKW at EScm4h
zE#X80D#`>V=UCe>jA!|mTw#V~@{+Lie-dbB*a at YpeaOOf&?u%Iob%+*5;n$)*T!14
zRH?Gn2c*`$m&7dNPtrg_V2a4;1G%qHI0ZzP0;R}T38tc{QHTwiLcrn$B~Acs0y+U?
zOHs;MF{|b1x>tf83`Z{r9N*<Z$BZ$Cgi|A%zmoBW{1KXACB7&P`66q)8%aaIa+W=s
zOYgVP&p}<7_*-wAIcR@$n;NYy%8pP4J;Gqw9E={__PV8v4HPW0qQEll5mZ4NP2S+x
z|K;9Z`Oxg%?p6_rshiZl*|>8#55-S(@>)J)q^j<fDLZ)W&?GVx8y|;bxZ8J4)+pYC
zFpo)8e{0_4v#5f%A0_k)jsarTxf5H|v;xb%OA1w7w;Q-PZjEQnjh8c<`n?Xto;WzZ
zdA+-tRn9mjwK?*KG=g<7RwS|E1)_W~Kf7f2?kX`5{|lti)3ChkKW0DsKpVVUPG?RJ
zWZ}QoN_76+09+I#n(A`JPl|DAftdpyQH<Wm*Uv_|8OQ^0nEj!Tft>J@;rSn5y8j1z
zg|V2OZCnD&mF#SJyPdV912g%h at 6Tf&x~om5{>_7$>%(O0xBjN3P|!FXot2qwa^LYl
zxzWu&K=K{+*wjs`92EKArw&Z6<VJ5)pqq($Xdz!2bc7FlP*5!1RO){9{L4R#zSw!%
ze6Q@>$s+<Q!e?K$Dlu}~3`6zPiGare&3d%`@dkk{!Z%h5bJ@$Eb3LD+m96_e^S8?-
zZ(Ds9Hq!EKt4FWtdd2LkkA+(nXr+OyS55I{---D>n;-_x>fbAPy!qomyNBPa>vl~G
zjlq_5|8)PAVw<~%oDD}rDvR|Z;m~R{-cf`iw0*%CqZFaQh<%)Fzy3T`jvQh0Xc3QR
zMcpsV6(&303AskBE7;I2?z&{+uBK}Rx<R|8K3`y||B%2VDomyS>~dc9L!J7f_l}9+
z{cp`<UzgXm;tNUJ%6Mq~jPuI!Sb9w8xj2&WzHcEqLN at ZJ=^xkZUlVIs8R|ttawE3z
z92TTVWnqy0f)xq7Gs^z9!5-^QU0piBv=*XlD!uO5GsTU1>^j3v at SL0XMB$Bn+L0;K
z#qTSJLg;L>DbA>tz=-VB^rT|(2K$4r at 2lr`bt9GS at u_<3cJbAh at gE|8>H;VIPFP_a
zyQWKE_$1!B+(V#Eu@*Q8O<L}l_4;Te;$iCxgJT>sO|5@>oegg+P at jk5@+C^F3|~ld
z%u at d{$PjQ+tdUqnp&oNT;8oes2|T?N1Mr}rpZws*+AZg#d6ZVRB|*K8_9GWOQ7jHt
z#l45o2&>LlC~UBCpFT at -`6DmN1kH<&e&odcah(~KUx(56<)}nqG+;@{@<p0kAG=T9
z&b354zsR{5t&qb4W2a=%qz)e4wHm;a_hfl54FvWhO%8)RwC4P3-8I7uP2k~)3JCw=
zv~mn2NeFM$&OHyXKx2Ti;IPN6e6(C`e^B_Vjcouhb>xRx42E^*$>#Bf;&#_;ouEtV
zy65CjfV|F?*F0XIa$}A%$}2XaW`UOQKGlNowt&`U+kU8)4d2 at Vad=lB9dw;w!a9G?
z at ab%xd%$bjR%3pT2vt}%S?W6GuqqLa_A~PhggTx%*%+%#P_vNNgO;_}HK+60JR!3`
z0VR`jxuRix!ll8J=bE5TycLel5|%MZAB{{^>u5(%$~O?QXgETyFvA6#O(1d*i1G^N
zWCS9Vs8Hvmjf^%MKZf=IWAw88 at wNNrz5RAG{FY|=cI^LrOHt2P>CNAony7f!M%E;>
z0i_=E`FxOzng#JY|3<2cP_r=n%u)k!I7lf%T-b3w`zi`W+MkfV!hI~Rt0_Qx0AM3x
z_0j&-t#<GF<2P(Vzn5wW^2$tU;eCSEbw6m1&XYKqQ8BRx{`W)IK}MHt*danzFblTA
zN6=7@^(;ga9O4m8;iu#9tM{N_Hm!7#P{tM3j<ahVw)*t2-?L;$c1(jr)As2&YV2dp
z`A<Em)n_$^Pg7~B5yER4(UJMIZ>C at WOw)XXq$Fq at KbxQs?_;NI<xR)v!Evq)I?e`4
zA7?kG`s?A?)Tza)%8cTT3&O5`C9fG|4D%n{jkNLjRc2G=HIg1lgEokrTMu`JE}-*G
zTq!nA{*pgQZsZGhxeGU=NPm!U$3X&iCgU;Q7D))TolQ{D29YgU^&r9n+O(d^9H at 6F
z&g^Ll|25xOFgBMnsq&kJq7`GNxHI$b6pYP3P%!ql>!&G&oK~B{+Ck=p26z0~b$5FH
z>w+=)<ppDk&(+k_zGgO^xE{%nbO2D>xQs{UVzm4mFvjE7c-?8P at B+%Fv<yn|(s8}I
zI1h{}+x)Lx^xqJkHHtOJf|jmD#O50bxF`kJz*VR%-^Xm#+e~RJBjxEs{?m^Vj7K9i
z4QrO|UnS6bGUS{j%uO3YUHOa;<aM(r3pj&z at n<P^0<ACO#ghH2gq$Sr>AORyr5_WN
zDQsb9b)G3}sW8=*eN}K}$O8(^nJ7S#!WcW0enX<DIE>TsOS26N4EOjhWJR(qd^s%G
z&%Q#|&1dL6>?_sVLae7qS*zFlEMA?JBib%+NDc{XERW)rwpyXwin3;@^=_!rg<;Y_
zhr7xp(e!Wjt2L3B+gz^It^)Rclvl7TE^J4)Th!C~t1jP~@)6bx6>M`tUMHH4V~!6e
z8!O at u99_l>&!)~x<Van|tx?6PS*|YLb=O{$v;qcso)0#DT3~f=zmVNO)AX%VlH$YE
zALlEdpb=vFW}fLAchfg}pqYO@#BomJGNHPu>kpSw!oN0snGkX8^bZtJyQ+h1`@zuH
z?>=6niiaQDf8%D3X^o%`UQLf5)tUmY41NFZT|ZSceAi#LSrk4(kHnlNf3R82illot
zT^lU<YnjkA&gqd>YL at xDvR4_EICm)Ej)(mRhQUb2W<|mAMS++9RpEG5>|v2E=Krkl
z=06oe1qbz~mvPh41X!WRHw#U?AS$taC;*+CHylQCM}Leq93~!r_Y4wXq>GyM6ex7=
zov$*|R|Ju=6`{uF#<fs&Ut^QM`&r<%e*qPuf_&3e_`g8?yz|=NK+XT#N;$m>N3BFZ
z+vkv?hR;}DG<A)OEXWRNVy_pYcbK%pqN9ogp at Y}cdrLCcN`}%KkiNOdd*)_gu0=+z
z1hbZpsmESeq%m3^{tKAtsyK)t(f<Oocn1XL(f<of^KLWB%`M-BAz<D;vsJ){VdjUu
zxo`UiqN%wS^O9S2FnG>)zmPZ1u$4ECUOTp_n;h at A>_<F35+l|XW(z8Z0(={k!gm1L
zo3LfMzy8__)3n|JM6gRhS;fXP|N5>(5IYo5thlKU^z~Qzmu3U;g<HH^ZrXb6?4Lsy
z-c`m^CBe$9|J~aEqL*hX0*ScF+}W#3X$E3dYI)QsMgrKaeAG%L_7ZQvMj_0IVc*9_
z+M{pc1~8U_zZ72)zfWnC?44ba&!1&!{XWa3zxegMeXBFqmaGtqzn?I6lYq_&pL~-w
zdELqr`7Ti`?yBO~i{d6^SJaYK6ZkXn6>;<^N0+Y&EWbV0GCz!P;9gng9rqW;%GX9)
zqI@~r9`jJ`s-W*cj4o+_ at I=BW?>45GpjMe5B0!R1rSPSbGM%}F_2XQ>HHq6Tkytnj
z%tlyv>3K9hW6 at AR;`N1;T}x4)ViRDCtWb;IRXl=CIP8(R!u{6J_Z<~gUin$T#klln
zLKVI973X~vNlETkJQu~NQ((>+u^3gDXG|;_fPk20L0zxbUVnG~5Q)%t6(62qUHo;;
zCz45Kpb42wEY(sh9H(xl3gVz at -yDg-bC%%TP{3X0tRrNF-X~oGD9<KCCX~QuZTWmV
zadw4i==yafw{J;QaE3fgiJMnKE6TxxNj4A+i3Bier-nEV%!90WvnTk6*Ut`teBR~)
z#}_~zzs|(t_d*^&9`bmnoZfxo-w{`=Ks6LFQWuFqnd0>SV6Do8wLrO5q?H0O62Uf}
zXM`sfsNR;%K>jzSbKCEjm5oBNiAt|WQe at rrSm1*8OaC5*kTB^vO{XsOan|9rwx*Ul
z_6H&$h61ei0PKH<Xz at +qTXw(QdvmU7wpM}7$fGPzjbQi3-QGv*r~@=on?@<UXF^f9
zyz#W1dRrQUEL+AavJ%lsWu5Wnt`K>X&Qj|~-<`I*{9GSR_5e?4X|cl20c-CAP#9f^
z#86b6M_+f?eOWgYl+Feo=65Ln^Nzy&(#ijNN%VhK<f1pfBS67xX|S&;W*Vs9>Dqf?
zo`9}aLE!67(;siUHb~}YQNp)@l&~IPeZv2(!Ca(_LPQGh*%WSRjew<Pp(4FC at -6iC
z=;h(7<8?JqCkVR&tO?nY75$Pi4W^1UDD#hqMmiIoU)2iP?=Z0EwB6Nr7!bLe>ZqUa
z<ll8{UVc1Uts10`67i#55UZ+-{sP9Jwc_2)A5Yt<^7YYidJyWD^-}128rYf$vx1=H
zb=|H>oXFf$sxfyD`SV-Fr15Rm at s*I@&l~dBae80zqKYe<$J3&OLH3mw=3!Lzl at 3Pn
zY7|N0S#BX`oYjSSzCfr&95KtHHML5S6F${^vDEP`Ix}6LzeDGh)AS{Et<IxB=H4^|
z30p}m3LTaI&Q6X~Z-C$!E2!1dV#&rx`uT~+7wH;?yi=&m3jKce=IFoHb^V at k_=N-q
z)DrJ`gQKqY>I0!>t>yS$l(_ at tQ-_3hMGOWW^Ze1C=+Pg$rI<4|)t+E73?-U-C&!Lu
z>m~B*JX4BFX!0@;%c?#!oRWCxa<+zj$~!%`{4^$y)!{PC>!+qw%Xk+!?$~T^<wL<1
zY(moGAZB@=J_eCk--C5u*Vns#W2B=Xc|lf(<IP<Be9_U^jI5!6)L?eMj0?wvlVO3T
z<`kEj`>Cewl!r4K!k+TYk#uO$fG`QLd7^EdZumoU at 6<RN>h=1sa8s%A{tAzWWWxN$
zLmz$CVUYVTGGIcou>KbXFjZ20G(_5GrSmdZ47*%?v*ni=>k=ojl_WhmxM-E8`YWEo
z)VC?B3lgZHqP`Ua-pHL(I#b_D{?)f at tN!U)@?RrGBA}^Nk!XjOH`J`DVKj{Tp8}QW
zyst7>edQ7shhv_M at 6LYp%?5EEc at 8o@P7zNkd*e1rj|xbTkW)g{d5x*Uzhu~(ANT5h
zy!aI0PXrn?GNjh-GxgC&?hgHeX5CQtuK89P$d;OOVR?m$xAN%h{iS~5#aR!e4JUIP
zz`{^w3ku6*Mg<5U8>Q9{A3ONJm$08iIe1WRce5IZDM+LT&UTI7EFU}Mb)4foI1twA
zhCUok2JimIe)3-*tpE4>hSOQhXD7_qKtcZN at 3?kCLZ7C;Gh}!Nth*_p*9RyfJ=*>^
zBM+?jdorJ9jL9Sh(iNDuu=(|Bcr!m72YHK1?l!{frK6qr at PkR%9rh8RR(%G1zXP+9
zSa&r(bxPJ!C(PTpL?1Kyp6hyjbnP+BB6ZoM>ds+(%z}mvEM8kaF5ku4x^mHXs- at e6
z>>n53Z5(~Ka+hNzy#X+a70&<tz~%j?{<Sto7;+kBq0S#2l5<0ii72`I?8smUJ at Usj
zl;bqH1dc3?2aRmUY|UZzOm6k2L=HE1E3 at Nh7#@Dv)#Tx7wiTkE5=qO5xcvY>94B7A
z2-+PA9{u_8cdf8!E4zFfTFB0rPao$a#@J<_pP-3mRfYdY%7}GGz+ at J#S%wr3&JG#o
z at vEcroKUYE;Z|e*(I|QBAot5P=$ZCQwMuHupQn%Z)^2p1<8$<M<-?;<{kh6`+2&m#
zYSy4>#>Vw4eKZ{C3Wh1Z?A~F~-)@BEhyw~n$aODsBYe}tfMpyVIQGAHWN{oH;Flwh
z<Vyqq5AVadqyyv>>AVOueRMEV*ct7Sx3xwJDZH-ApX35tl=7}f%w!~ejn*XjIQfMK
zpS&p+KISgH#k{F_hEm{3TmVxtSplf=?d42K7_g~j<Kd)}ISf};D7S&!{tm4m`jIKq
zXVl+rRd^f@@KKEIYX>g(<F0*C!UrsphS`)nhAdizBC(rxAy8j57WfWvJ#>Vucx~-~
zSzHscA~D)ni6U(KD8c|^UsSmGh8DQUoxh}~#6+CQFO2A~ZDg^QTkKB!?J#DoMu7yh
z1x`avYjw|VysKmdic*0p>2_1TI(bJ}gBHW8_kJSsDRl$W>0;iNtw&-bvT%Os(o7Lq
zz!J4oyw;+Hb5u at m5l_lIFs4#*%dc(GE#J2Igm#P)(FM3D+y%q}7dg|tkeCu3+aR<1
zZ>EqoLPu<z%W1wYUM;U9{A>J_(zqVX(Z28OJ<e^+Vp at m?O at 7?$#Pxq+&5%iWxZT)=
zrH-T at Dn&b$D#8?BPV=Hn%PP9|1wx-%RWOCOy2 at 6dm5zxz?9N~WDi5U{*n&-)KHYXo
zj50gS1z_QwpjgOR0`}GGqguM#HXzhr{t2WRWz<-CV-c at Db8IiH$LU^<G-Tgrm<8md
zj%f~Cz?YAvbEia`>+o#?mXKdekohV^;R8Rh93p!l7lf2)s`!Hnk>4bbPPDG<SoC>E
z92*3?X|otm0a+ct=^kSy$!Bc5Xi`X)#&0ssM;FF#;xcAB^BLsoCE({B*ZwROWEPs-
z6Widsf0*8t1X)Z at 3$mCphjELi+a`TF%i&zd at okEnr$ms&4+*|NQDg-GR)~3YqlN8u
zcE)(Q^N`n~N9iguECj5P>qX7eXJwP~pcr>r0Z0kg77f#x#z98BR%wr<sb4v;8D-gA
z1scXE=h__B8Wz+kz9j&pBOl*p;3f;?v*Zz&b)W2wyFy+|cp%>I=seFCCEz^dmeXDQ
zIK8cUotQ-$&`S!z=sSdL`K-&l(TXuTihyAr33F`oD?}`k3V&>+k2cM^{6yd=JF#iq
z(kE}LV4E2*&+mXsX#y0BD8oCQP~h?{|E#>6o`3b#y7{}D at 7&v54TTc4 at wlI!km~0P
zQ8 at NmGgE0EuM(YFW?$W(do)VTA}qrqF@|Zpzhp85-+AEVO+JhKLX4*$&}?O1d-E*f
zKJeyU*KGb$%E~6|25D%w4_P-lv=xI4gI!)XieyNIOoShU6C at i<NOb2jO1*YR<*uSE
z82;&q1G*2-7m_;w<8J62eC6heY<Qi;Uk&f)mA_Z|ClCeamE}OfnppO at v$^>A9Iz%v
zKT}Z02WzemdC2QrCwgm at e6^+dy6E~~kf5O+>{3wpk01(7lZo6ueRL at RqWE&<SO(sC
zD88IB(O|ddSD`H=q>Oq{8Vyx<UvtHAS}I-OFys-Q0|;}FsCq0t`s$n8JL<t#Q}JE~
zy|Zc*<=k&!mx<w!jK%22I7337gNN>~hp{WFWf)z7T;p5Dw~2(dEa$MB1hCEp-efum
zb@#ctx%p&0_7mj!VHfMcdyyDkbd$gglZDnvSL(qdO3tt0*&qY?wD#v35|E3cUt-vw
z|Fn|uS8wA|cid5&MlF3AkVeThGMh%ur8i`CGaE{xOx>#Ro!QB?k&k%`={|jQpX?K%
zz28T_3G;SlLY;B!yH;$5t+;G%MSrv*q4oxBsWskN)I$Kn<Uw0RKgeeR0?{w1C4ew*
zC~g$9E_qPcR1GpV;2t_3E#RY_ap5^{3jSs*2t2MCctersm;`yZr_~~rnl{W3yh!n7
zGyr>fPs+sR!(u=l^PuR%hz9Zs<|Mfd7?KBo0uK!BOuN&aeuyLqtWPVn6Xvz7FS at bI
zS+-sbrnU_EzXJe at c46~=LU08&rXH+vwcmPy1Mk~-!B)M^2&CD6F3duA>UYgg=iC)k
z!W*J?P3a0{Y|7(<jqrSFsYn?sVFAy$P~h92XIKhLJ_)ZO`q6o)={(1D9&9?#Hl0r~
zofjFF`mO*X)A?f4d93NY*mO>y^P1(R^I1tZKmfaRreSH)=YwIsE0jcOwlcPlWAxY5
zoDcHsdNICP_|g|EX at J(P)1bpBgaRbNkRSR*&7Jc;cDLltP)0kymC+j8?}Sv!FPhok
z#Z7oCxz9q$eYW#7ETbPJoPFsfE-`wwmHBULwSh?UKkTWW4~6DpP3L!<@izwDQ at G!C
z7aa#Qc|{0yz=;5tU14w6x>|;N)nmuk4l;|c6BxQzuj9nUK+aT~K#4jA+2m3wMf}NY
z?L*At$;+7XD70jAqS!RAZXv4;aV%M^&(ed=+i=L)p6T@&x at 1ZDQvko+r_^NX#`(_A
zDawP~m6=rhqO9mrLV(qyu~f&*&_`+7SdcFPl-fqAP4XU1tIo-DA8 at 6aUi%b&{k1DY
zO6@;?8a7 at 1y1?>Yn{@p5mo%?+I0i3#rQ_i at uXSF$%|*Nm?$D+`K+s)Q2{11eZ|j(w
zGMo3Hd>(U6W}^{ZaOdS0SQ-j<M=jdqwH2{UG}aG~=#%X`cr^$T&4vr%){b*S9|;yp
z$F_~poVnntaEuP^MN7l|lk_nHP7xig?mN1Me(l}9(SPFV&8310X#~|KR+K)67l at wO
z_bG-=>{#{GzjH$u at wxZJJa3C1Vtw`~!RCk2tDHHe1-k4wHa0H51GpGv<uRTKDJo&}
z(U=h}cYJ#-V3eSBGb3<_y8$%wE(R$iX;Hb<`}sO8c at vUBBQJsgso99oiQd#~B&<fG
z0;ZN0PT8?5qPXl;!vDwEn};=ZZU4jPga9WbKnMXs1QO<eqLD$75)$Ts0#QJ%N<|QY
zQ3?t{L1Ur~qeKc34k(C<qAk|eUeW4xK#LWXR;A+9Mp0|Ap;kpeWb(In0=4(v at B2LO
zALlve?0H;kefF at HMey->3u$nqZP<_T7I_4PAbP_WsWc<s9^)@ckb-V;L$u_J)TT{+
z at qS8$_rI;zUA=18^QPifI%5<u!R!pvnWIR$5z86 at EI@8ckyavRXIC8wv#w3Jc>d$S
zRilUyfeFOZJqg~se7Saa7<9mC33ki7-e0}KFy<8sJy`6JLYkRx59C8-f?*=$#C}KM
zP+CLGybb!g6mvB{EdSHH#+U2XjhMmS%D?Ox at b9p$HzrXqb0K^4Wg$X~s-<7tMKvhB
z_SHlKxp0CDFvS9R8-Qm8B<UZ)6O(SuvSuT)ySl`!GOa<a(T-VZ)eCs-hNee)rfWi)
z#^I){`r36TIrN&7a&Y6ET;-B>L)DQUAUrQkUbHICkXS!^KumHWC<SSB6Jxt>hFLqs
zzO>!c{s;*7U3}|wG~R*?O`8z;hCWUwqCwd}dsx1ekQ1vhBNbgty6OStXX;TYUFft(
z_N1gE2d>lEwcW_kgaEW50=(6*XZh{OQ|jzan|b#DG^Sd0V<wV+bLm6#wGonkW7zKD
z;_oC++&#jdMb^j?N;v-|H4Cgir(aaJbuu!-V#FrFFW_F at u&E&(BV~01An-;L0`mKL
zqc4J0D7nPa`UTl(Hu`c3*BGt_VT~j9d~XJ1LeOktgB&1WOf_SvM{1AiCw*8NX!5@^
z6a2`Lf5=R1VpQCmlY3&#t6TA!kgNCKkGk)tn*1}tr-S7O2dw{@sStw+o at YB>RlR`j
z`oybt`nt(fUnAod>qxQ^hVhIgy8h$Qz<@F$e!mM;q#s_btWeHW_x@<*8+_c>w6vSA
zGzk-f(LGGDOBP#*j)p3A``#84Tv!p8!-`0n%?a*MI1p~GX_lzDKjoSUCF_OI972V=
z*yLid`rDt}T%t1v@*&8jt?+#U-X^pax$td3TX6!u$+Q&%Pt;>S*%1y`sF^pI-WNX;
z&{ujHoNRII4h58H)B9rb=a52eo*ha0aR)qe3Et#JTkEAKo at iCz+eDpy!$IC|_|+G%
z at 1t@3n$46%Ikjd}c3 at v<>8}@xp(*iz7f7Ie-P-%n#g1&*UH$5f&e%mIh15SENzQXZ
zvZaOk_!qBYu0t-GkWcIKAMZ^I+5nn^wCo`32&<KKaEb_wy#2`hT>#0v49<Eu%Ow?R
z+D#`SoRez*n{1lV+MwuQ+~36epfA07?aW2Nm1 at b&0Q#AY at ulkyLx3vE$#aIntRGwb
z-A#f2^F1T)(<<qN2>eT<v`U6a$GxYcJ#Y5qKX@!YT|o_EaV2$vxWqMte)oO(s^<&M
zKCWKGp0lP;s^;FZMOUk%Z%sFzthRc~Ek3$jefCzIl`5lhFVXgPGErtVwQRj1OwI0M
z$-QMY`Uc3SbE!$Ie=hVFAn73}^=MvBbDY~7L{NTzdOu@>h+|((waZI=65MAkpv$bN
zfqvB{q>RG7MB^_wSf7o4H3p=b(c)ORGR}pflvQE`zziVz@`dEKI7PHI$@ku&Jjs!K
zX*Xt+cn9$vX-T<WR<L(R=~RyinlR_7?SS at hRjJ<~1}Fj7SbB=j4Y-W3hEk7(v!oq`
zkVNPEFo{rlf?_?Kx at 1!T?;xBHH$5_SMp`GMtmv}$uw8IWc1lQ1Ohky3 at C9YyO<_re
zHB%!1y7A!*wNoGH at +8t~e0|k7yJi`mfrZ+3U2XL9EcpT;(ykIApD5_Nq{en8eYe5)
zKKib_<-=m{)P1P|Z;&YPP6zM!oxEkq(&XXgN0&fEQH2fuqTgg3+yhlK?OCL{gL%Pw
zm4kJdDLkOM at qOT@4-XELNC;AA_pd6%<!De)wEdn%Q_X@@rd!Kj%+`d=|0bI<Sj`|c
z?ALCD*ttJM8O7T+Ji{<ifq30J)4^nzmql3#*{&7{(p0c4d5|8&te=i~4W%gsy;g)7
zJCYR<;LVwT=Reco-4c1^r7FY~_eNd<xor^ui43^i0 at q<^Hd5~>uYGd;p|MH(gH6uM
zG6rxe>7=A4pP#ZRv1vJwxwEOHUoJ=PlBw2s_gc-FJEIF;fmZ}qFdQB=>Bd~%3YjGj
z8#2^{FzrRi;GoWq!~Z#5qXk^{&}MqFZ1?p0($|P-K&D*89vqyUvkCek3weOOA%aVf
zYi8_qBS at 3HD8<rBK7EYlq}4UsIm}5Gh6d*4h|=-^4jZZVf8O_cfxo=Y|9QbW!7*ty
z7-{hI$8P(ZL(z)pSd)-K=f{+zyzzvC8bDri=VB(Z%F0owp>K=4dt{cXRqtR=yz~0P
zP4JKZ<NxKztP^ynj;61mwkv*zPW36q?(o0Mm=1APZ?(ev|G-$z|Any}A at Z<ia9{ot
zVgXstQVy^cDb>NT<4p*}LBsZwi5h1q{}W%GTm;8HzoXYGh0L!%5)Art0X%yB*11nO
zfTgyj4GN9=Qzzuog@`HCvsket;6w!@<I#1(wx|5mN+GoT2+t8l+wfg_s{@&tKMOIk
zN+|yu@~V!24C6m!==HJRHCSrtw0N}i(Xx!(#Z|~@3wG!K1#|uhZ?=F!hFpxiAk|>p
zBlNvQ{jwS%ccmBQkWAN&2d28wSr#ToeTQ;HtA{50(f at NKVcu*L!)N<`e$}v0P^0Th
z-OA%2GBjTirSHpxz0w?v0B?;yu`@68f6XM_V2u44eV4@<_s{-8vPtMsK1(5i3qrk;
zEv~tV2$tB5xrE=sTzJ)Hj6 at CQ=Kq>alq~|VO5P1V;=$8}SwjpZ at rm&THN^5=Z=9dP
zNHjC^A{|Bo5DAWjx(64&f&+E&uk(5U1-2(w3O$BXf+Us2A<1^_9>Y833$mg8zbCKO
z4DZ~!AiJj^=ezks^1uftSVth~nv6FM#*_auVy{(*dq#o-v^Rb5JC7=CZoIwe8A;Ar
zo%`+ertnxLOyCKF4aPx;v&njv8 at T~mFPNz74?QY~-8RwCA9+j=V90kdgKi<m1mHio
zKlE6LYpVd+Y$yW6{zyp0gphO3St$rm3gzs3PmTmT><1A;j|qSWJHSw%VEKFyIpkPy
zzF{JDDCJ17&aY6&0sgZ-0U7ZsGud!Gu0M1nVW>$H8qMD$g at +gyMNjMEk?d!z9iTeK
zunlU~Ev9nk+PI<XQ%lmNJd9{qiI}EQO^niRnGgfs%cD8N(XCIQNHdj?Wv>K*2?;&3
zHvRukNS_W_wH1YCRA4%AmvRf6PwbCWtgN6i>9)5KmdqNNHIz9KsqLgv$Gc(wFQHPm
zbW^Dl-I=a0=t3;^?8*}IE+KmhiQUn{hC4Rfb9mK47g_p<N0t<0r!5vD{@qLp-@=Ec
zDqE>IUVG-b?50jpytxdI^OY{fOnxc^X;cf at V<zm53ZfAEXtvnW*hibldd->}9akTJ
zV)e{L#?zZ~Z_tG<a_57ra at e0PID+s2M(Si at mo}s#VE`}FI_`Zxx_S0ON?Nr584S-x
zPD<uuo4;8|Sg)dxpkGj{**q|!eO-Y6LRX}G^LjXNzrP@*BQ$$Do22=QrG#no5`%0%
zIxeKlzZ>fha29)v4cw|@xp at f^`K!?*(9+OnMw_|1H}{jXtfNn;tDcWPpWboCG!i{{
zsbwI at DhW&EAY|UIIFMmuV8H80^tVebgF#j-w}ADLw(S#r at 8BLBcuf4i@u3YSFi5<+
z!vtRUupw_D+g4h`AO-#s&_S--ipf+$B+7mU)>|Eb$_nK|G~jrgKgURf%&Cs`Uwd2P
zyTNeTuGBi#PC!(28YNI5D#P>QG608<gbE!e3j at YToIg})A(U)PFw2Plwn7<c>v#c%
zfdzo*JjP%0(=b#GYv at 1Q8<EoE{Nb5m2SY?D6~SvhfL_Q88FK-_V25ACTx7RJ>^vJy
zX!v7{#<Pl>lW2!gqFfOruhfw^lts;z^@4G6wdEZkEN+R9v3d7*X+rx`fcrN<0vqgL
z^Sarj2FlVJ>0QjgDiARNj{#^AAMjAY!vK#3cx(ZkF_8FRCS^?;fgI9wav_CO-UK96
zk=RplL5Te2xG#!-H`+;V>O&xVVutl0+XN?t`$8!{^ZUZ9G1{j;Tb7om(~@O(9g(5+
zqU=Y%)z!3}-+K9M!#dA2dLR<vLfy8~kfD at XLER~}BtAaEnb at 7$`RpemGNJz0OCTKT
z1jMFfjeIHJ6f+EQ4&9k+g;2x&5MQm<1Z6$4M+>afJLR9-V{5<EpB3*<)e3kjcri&K
zI4RLC&Ps@}mux^d(oI!JvSDi5<DZvhm}-k#t#>C}dXcb#w3Z%?sS<?f^W8RM+qHX%
zK~`%})h?k8R9Fen%_RVbFPYHg7Kn{CkkBfG?D^f1 at Xg_;5I&(C^7}5+Mohlia^?xm
za;{s{3`J|xY1U41wV3(63A at cZ6xl@EP5)kZycWEL1qDLjR#5T7a-)C76-E~bq2^~0
zw;aSJhuv66efzmLb%dl8(0u07JCiWM^#@8;2|Rl1w1ZWmvq%#1f0 at P6DRZ9<51 at OJ
z*?;mXDf6NW^?pqj<~xC(Z;L>goHiRXv};<&5(4>f%^`IGkcld4fBZ>x7b8KfI4<;I
zQ at E-G$2G-ReMjTOOpF7RV~7d0>aco$=y?m;2!lZr0pfV*M$8YlZBPe3wDabt%=uJx
z3Udu#jIo4CRhZ9xWF at ch#V;}&%vqVP*dlAJ!VcBJ<S`Fj@;2(ShtrIECsD)Ehtmvo
zLb1B at p^Jd>{$RE&44IebuL*(Y>UoJ(h{<ZoJZ+>8O|v_oGvX9VfqDrup<xZTNVMsh
zJ-ctQ&{U_|X}7~IHTRLjjFG?K)@DeHh$<zCJx%2baok+mLFWN@^QD8`61q*0){WVU
z1KDj7Q+2^3hajla62$KBv}+roS)Ssus5Gdx$tj;3gG?SWHG_*`4bO`AY3zFL!$YS_
z*JsA5=#duFyw!IextW09Mew)jklLsxB9;?nyt6NH0k>E3-ll1RCP`Y2_ at 3OT6(_kO
zt(mPtwoCPP$LqBQ at 1pE8`9N9 at Uy0C)WVTi4`uJf3s5Q)`a=YV>&kf$m&?>a%j(T^`
zTr^DG)iZY?5Z5Qn7$!p!P1uyW`3q*l=CA=(lZsG<lFggEvwc?&c`7o>pK3xReL`1$
z%8AuvQv at LslZfNhd!g+hU0+|ipkDUaTYl*@5M7PWk+zF9A&!jq9kg%hPhG2#K$kDJ
zdyv!E58`tdAljf2b9S at PxMDV~FxIu;(-o=1;W8^OTQ&&zZyJ}KmvbyJyb_ at Wq(xh+
z;)8he6WCO#6g(S;?dBiHFu1MI at UUl8RT<<dvx=sxP6o}8=`If=u6C+{AlBp$N7Wj{
z1Ocp7H9>ZhZVsy3LFQ`i6NVg?N>*h-w{Pzm#n7Hn=@%GhZ#t4K+bBdb5*poyu7)H?
z*?}a?uxB*!EJiO)T11jA1P#?5h*mH<-bd|%-&I)lteHlirBjm!qdvBXxDZ14<t}FZ
zt6lQd-fDqaLySV=y9CMMe at 0>Qt<0FJZi+K_JC}C9lbbBRi+SA-Q~V*^6^QXuTvBDW
z?>j;s-#-?1y at WIL8N7-LhTUsGNE<XRpx0+f?GRIvr(jRS1%*x-_{Xlu-o|If%J5di
zDe)X;8gUNgMqJniH_7rN&MA!idoV)3lQOy2%8*o1BxD13X>_-ETJKjQ7xVAReFy`0
z)?r!JdL`vm4;*e*C^1u+WfijFC#7I$ZF8PXQH8zkz)bU973ENei~kQkwA{toHL!Ls
zPaud?#5CdInCFyU-H;%?$$|Vd_Ff)kc&2|g_%{4V#iKA#UR<NQZ<``VnuvIT!W;4A
zlM2o+?En#Ziiis3Fdb at Cf>)1CLWhmvOo3LOvl8`%@<a4C0W_#%yDUNIbo#-{qcA+b
z{(VMMhEf1)3k$sDg(h0J at AN4&x1dK9P(sL>w2c5N`r3Ivt6c71okZ;WTjzY95i8g7
z1oUvNM0{y`=}#poT<W9MKNm-+6~v!#R!M|<8wFZCO(_Sol*E3XI-6Rbmlm}4R)0d3
z)K8xd=<jr2ks=37npGf8H$Z^=hr+rSYr8O4$pVBbtBSXk_Rhe{XKCc2afarFF0Cjb
zaWQ64;54f&x{}S3;S8p~p$~22>V4rC#PD9L!h-VEVA)H2A);|N-%dF+SfU*rHsz)g
zgo~~e7hUp;D}#o4FYI<SA6oNGu*_y5`z_U*(|WWDwHborhiU4ID04uI*e22VSNXYN
zH9R&D2D;^#6A+Fkr}-8kC~*oXtuH(>cxJ%3PIpwSOXvts*_(XCVwWA(p~I`3ZU;Np
z<DiAA=udq^DLLU52-`mmDvjBSjBV??Kc-lF|MUaaQQZQ1WV9WSsR3_|NAtSJLZuCe
z+i!L10jYlpdq}=^TQF at q{b}lYr*c_47#xuZ5JR~fsXETW?=faT;vltBI_5%hRg_*!
zj}4VN&NK|L6hQ0qRuR>xZYwzd%^E-dRmkd_-->dFR+g^{@WM>}1~EetU>>=pTPRT)
zAo3(sVGXYA9{-C-c*LGyVpjLCS47=5SNW8NeS?c4>cU)wc*sK&GXEqO8SnDA3XRFY
zJ&H3wBF54Ls9$}Z%e2c2cNrCK`m0eq9NNFCJ7RoU*Jw$7w-ENN??xnNOoAXXk&pui
znl9ZYk*!7guqm8fpoJkJO;(B(k_u&z2N3M!vjb+w`9eL90k4Hvz^h at lUZphUBk5&;
z-Wq077<n at dp$0q_FHV{N1|;Ub#;>SHv8KJSp>(KS6Veb9vKkUEeOF<GEnsl&hytU2
zpWe11Z2q!+ at P-+?XYX=Nm|q=28Lt$2vbqzRHSux~II+=PH_{hSi~v<K^1FzUzYC)#
z^D57b#JIMdh`_gzr%b~cjDl$jSgFcpAyQdgh1u at Y8_wLZJl#n3HX4Jf at SDU+!Rg&A
z>v`3~1~79~0%qDDt%yFoyRrO;GryBum_(GR_L}J`Du;S>?t(<QiU_@;ZGK0KyC_>a
zUc#<&VD&@mEbBw{)>+`cYvn~wi`UH5upP at S{l+n<lgEH^u(fP{jo8zmMZ`U!hSvxb
zW|V`{x_a6~0`Gp$XcY~_JATov;&(_36oSm+t?Yp#^PcTx?+cgTNxLfW^Fzola~N}I
zHT0*TA3Y=sFwEb$mgrv?%?T(JV47+BI{aD at hPKOMo{SAf`N>F9`(`#nwva&paSb5*
z_HV615-C8i+rgw+7$ViYg<{Xo?uxkC<(f~(bwVuB3iE>YDSIUo at JgIlzN?@C%&O4Q
z10}2 at 6%$FswRg876_>e)bX?3dxC&}LTN67qeIWegbeFLAdct*(ptWJw!Avn$<iw?<
z6lyW`#PcxWg&Tf}h(TrokQjP=2pd-)%Td(;ac0%9;nG!^(u_(fGVNsCyy(kfvgCyY
zQO?#|cmkwR*W_S6JC`{JZ4SGxF8jkNWM)puqAF|FO>bu`L}JM$N#6izlIl$zD^^5I
zx<^VZ_0i!NgTf@)3d365n<HfDF{WC%`maBpMAK}BoT4%XN||wxhfEcNc`eO&chrVI
zsUA<3eA5yDp3WF<)QT9tTn1uU)TfC)Qk+apvJ at 0a6CB7>Ld9olHM4KJad?vB?(X8F
z>IHpFd1TY>SLL;SB%W#XEirl7=#{$CtBvpS4c8(4#U at 3|X5Ua;#W6zK=joRDg`4&^
zQxJoyT2;q+N#H8wC*Ir7RSg?9rg|$g82f%2e*>DSfnlQE&M=L#W>BgWF&#@SGPlTZ
zp$k9dcy4A5mDn%Qep)$a=7uJxy_D!5hg~w%&-xh7YCu?%6cG~a!jC4u2}b)Cr(;To
z8{2uG^NAIPm}`3>uU5_elR<1RJokk<@J~B=)iTzllEAjn7Dq)C51sIky}<|-wO1ze
zvrC9Y)t at y5VScWT#gJu-R+d>U!-%r5a|BY&7(8}F;N7ai?k`~yt4e<CaDHZ92*wkk
ze}-ZeudWJXaxPpX8v<c$pL#g&RnS_=ixN(Y`$(9q&0^jJb(;WCUG?2RozUg#kw2a6
zgp#c*hQbsp&V_W1dZue;Y)^Tf2xYUGyHpu!{}*0K<Lg{G>b*q3Vm(x^q8%AG_4A)_
z0rR@#3T;gCiIQ=l0k1UHmzNhCIO>5Bhvq9HWr8Zq=Eg8<(V%f%*PY+z_YI(S(vxJz
z&5lC$-)WSpFTHSLz$=z3s<(0=UFx+-?f_%oHgB^wQ9bs;#g0}La4Wjo!efZ)v`X5|
z_0L-yE0!+iB7;ipdUfDmw)3R{uxuO^9Wxz+%2{c;t&K0C^+>x%(@3&y!v^GPA*Wml
z#dy{ms4Rrs&_c_wcOcvfz=DTX2|{{POTttcjdtpNe>s^MAGG$kUYP%Er;66^`$T>7
zuVAmL5_T*@@I=xmqVn>H`~BElyK_!o7v2Gl>E9 at x*7>y?mF4>N4%)*LPbAOPK`-sm
zQ1yzJtJxPdjb=25O~geDL)hVo2w{AOyO%w at _}uR9C9h^Vt9xF~vP%R$bV>g;x^|Yk
zON=YAJTF at mE`3WSRzC<(Pk&{HCaQ(6+>Mn{4w#9gQJwe7iCA&Zd0bup%HNvzJ(zjN
z^cRqIi;m#C*G#Q_6-_u)rk?Y<#m8!xG=}Z_DgBBf-A$qJbgNZ(t$Y$gI8k=y@#=Mo
z9M(5$u!+^pf)n=&;Qt2ed$~{4^nQ15p(KP#%m>huv|JfhL5)YHUvh~JwIdy>=xbO+
zgMdMM==)@TJC`c^7iN+dsYpMp&g`E?)43i8uJ`q>lJ)A{{SJEPQ(WqJ>)+1T`W at uZ
z*>_`hPKRyV=>B&-qi#9dw#aM{7g-xCFe@<-yP6o}b<Xe_c0B-nn%j*9M&R!~h0nWJ
zkBQoD$Vz6g7LGTx%6eIWnI~qj!Ux|v>AvqmcV4yb`}PbL7>g?;>zRhonB3{z7rxHA
z7<qU%mr}|bDp!l&1fsd>gKyTNfokf29Z^?%?f{3 at S%w+*hmJ&75V at qWYZ$w}S}hrH
za6A3L{Q__fgQri!=|Y0!Gt9Z(RlBMF8&N7?xCT!bcD-r1qCPgj<OaO|xU6#rLLB==
zOzI>LPmgFs4dJF|=Z at hS5slldf3@AGjY>{F^xSD8S2xav2OQ;T!zK}p0s_r?6B}OE
z-ZZKSom_l>9-Z~?Pi3Yim?jW;;2y{@;N8|QKW{Gt;<j?w`aThPa1@|FS-X(bTm8ri
z$dMTTb0Gx)66DLpLLey*lX%^jm+n77udntS7cdo6>DCV}0YT+!CdEi&m;7Mlh<fj!
zm)mH($OK9A(CfYz3<#)DcXX3PKh&1py|P0^XL*R#uLtesWn-rNl*Rc_E{6g at OJMvr
z>wJamezsB!Wvv`|L6M*g(R~xZ_i9D(yd&T{SRFBx>iXG~2_JcecMg(O@%b-i;GGTs
zr}kjCf2RIvC}`<_Isu9sG~(#SK#Zfj+N%G at Zvyz)>HP5j@!LA$c$F?f1}@8uph_9_
z>bGmc)5a)g+tv(EJWlHu*V+sWSnV~A21v-;M!qfVaVY|un$!yqz at 0NKy?x&z3c#j}
zf18-dt)fX<D at 7y>*D^;<8(u`LdcbN^XAC=fP1nTbTa9=S!;hYB+9X;JxCq-j6cr4u
z)`T{2i6MjEil~EyV$c0|Bj>e`s!tBH$kwbmo+Tp>m4i1b)IG!gVM2yBOx6x$rch1j
z%6`yvuA0!Y at 5clypA<KHnk9EuRF<&Y2X0i1A)?_loNGF$+_ey at 8wq^VIPdhb1Lf`G
z=Jo0o at 77TzZ&>bRmCoFppvsIjM}6;|9fM|rQM;IWMMFS%PI*{PRzhVHYRU+M>7LN_
zb}a80CbydI?Usm80IJGT`2msPvN~wQ*<cPxWA(@i+Wq-3QKdk6x%h}oA!IX~)m<ar
z2 at igcJR%KveocAV_&Z50#Yov+{9S&eJLXpjt)h+z4t`&J1c*_VFS~_^xLSdnH>T{8
zs##t@&PUJh(iVJuNWT>&D<7G4GP60G_Q1DGy>!%$AS+krjk=<N|EeGT2nDnD-q;GG
zCw*da{dIM~xZ`r6jPzj*Ytbd<8%c382^s)`_X+jN6TttK$$#(3|H#SzH<SNAO#bKS
z*Sb=Yk+_x_>XYLRgkEp;opC3VpN$>avYK?x&&6uOgtHt#>2R;M6D=Of=x{H^35iMS
zpWuBG8tH3cYoc9Rw>vHT>cCf5YmpIIyEx!&PMAQ-VR=>*0a41*oBH~tHv4b)j7fL3
zH}%mg_v*jh*Rnj_l95dyEw9MdYjdXD2XU6C9C$3%W#X0c)!!a>KV<NJl#Aqw6%jO_
z5~^#V!n{6OS16EB^xTGxf4f^ux;tIBW8bge^S8U*RQQ=WrMXub$mrjB%+=*#tt&0>
z1<1ta??|k}>Ur<k?qVU^3W&=UMak5>^_pl6L-0$GRTAod+yRB##r*GMxZ;L_AJmHX
zLSmHz`;EHuy?b12MG at u&P&apBn&O1>#o}X4B+*{!-4S-UAK_$+2Q_<RQQ%h9$rwK%
ztCE#OyOMZE)WE+dh8J%UjPg?~L&+)xIY3Q*4y`J-1XYKi^U$xVx1iJH+3lv=zi_P-
zI8E6y8 at i#*2LH}2Uc?;fU7bNLq|n at aXE>Y0hUWO%i6H!O!OW)9tYiM`kvM+=5(5{;
zTuWHTK9$B><hg36(&Ya$P47@*Ff@;LW9gL_WLqEa!Ebz=a*um9x at E=3aBtKGkCSbK
zEcmJRqJKnK4id1L`o{$*YQ_8Dx%R(O&ulu*I<}&kLdtDLs8 at gGKj$oTm|K=AN}keN
z_8=XvLeVm+P@)hy?`Q4QMkYC~UD8OwXAscYrao|gAqGjEO(>T%;}Qbu%+qa<V_etP
zU=rLPhq|LfiuGDx&S&bc4^R5LR?+CUrYvaq9~WC*e1u;kpiy#ekm)daCXQeOrx=u>
z6h(yplOU5`dTLwZwrxzZ3d4pxo44k>zCFKe23D(a;I}(<+_=_Z!0v$iS5PS%tf1^`
z5j&|SpdU7$xtKo at cZghQT|B>haWT0Z+F28Q0lKOth8Jc3i at zTmAs@2<QhO7dl()=5
z6Ybx_!*Z(;TYif3`hF)x%1tY3j`TUSfc(8J{*3|ZLTNexz_AZVy0`g9yvG2wlPklE
zzmrVxFnIADAf)_6Iug+0(VPd<>9s1HH$-gClZ8ReFyCu{q#OYiDU_u{g$U30>I)1;
zez%C7yI+%VQlg0l<G3rl8YOmq-qz9LrHStR6}<=lt7z=5&Rv456~D)DPcvs7?W7{t
zhS27;JgA~5?bGHw=%D+4rVRG)3B>rRze#u&G2C9s7GoY&_cri9E_CD9{}r2CJ at S3r
zv&cg?>3srg!&!y-hh84bgn&x7e51(KpBs7K0bBSYJGBV!A%dz(v at wXec*~!%nkpps
z5|^UE3*Na_ZsS(`0KRwXzGt^>(Zm7(X?SvN-_|5Ar1eF&kevwLZt2J-$r=&+T%h^(
zrrDGV>G5?0$r^ptrOukzSGx<|N%n(pC;hi}5PUmMy0?IDw#G{L14)Q?s6klM>&Rnp
z^5dTyqSo^D=WTHz$7(;qu*DHXnl&FYc@}w~Zx`mpPbrP;o#oh`7>xMc7a-5wv%B6r
z9tn8V{~0y8;g^q;QYm663&Tuq-1G08`sSw&$HMO+i6WApViD?>gc!ho{~jbxW{eSf
ztqcQYpCNX6X$m1+F58U$8+S88=Y)MSeH{zdQu;;{yT7*JUDRrJO~nuEOm#JdwRo+G
z<<=FvyRT3T+a`$E1LKgk>fLm;AJW9)`;1TqbxE;8JXM_h!t4sX!wB`2pMFqwl-mf?
z-FKqmhd at l1*8@%L@!EpdkU>PP?g8#zSbYsOIroSc2Ew(%!2{iNVIOL<;rD$(+j9w{
z3gJyeHuqL<cY;0o`m`4kfuj`IK#!skN>bg(bzU`MXWt!pNLx6AbX8L&N9O;)Fq%Ts
zLpFNu-;}J0nXrG~0TpLKi at G}fc%TP3y8^MbbRlQPE@)!5BpnXUcV}2-FdU?<6=ET0
zilj$b?M0y}3;DNTrre{w)Xj`@jr6G1qJvYkOLoo^I#3V6Y0+*<sD(oT1UL)=nCJs=
z5ow=@oqY|oq6>zGvml{TvAkflAl==(KwA)jD|{s)A42XTO*CGDp#pkCq*g9%#oS)d
zs}SiCKw$56Jj8#+P)D1iY?AC>%L&nmdcZjZldEHS;dBz}XkH}bfSO0cYdITFXxHFj
zB$UgrV0x=6775wA&$CL(Qi;jZnnr7FX+S4l4txn2|HjXg&^g2he_g4>he^6Ag%My|
zNSb|+ji2i2q$E^C&7I#D%i?ZVLPHM{5kqGLqQzUA>Dr2V3Zu8JoARrF9<;e3G9=d?
zTTmo}mr}bKUT(FB9Rv%m4<RAIOm<!b6bOvclR*Mo*&QnK)>)JzJ8l-BIuWx9a1-JC
z%sU84R>&kvyAfh0F2sP$`EOYfW at 7f8`Dak(gS!XgN6w7GLXIcuHCVtxN`HWb)Zga=
zQg_0WH}}8P-lE#sR09a7jxjp9QColyn4qDdaN${Rt^r1~1ktG5i)5oCt~6)?s}%r<
zpBY3QW&A}jPgdjOy>V&t){pBk>kU^9t0fMYt9TqQAfwLcb9^ruwIPRK);H~y!Tc1n
zG`x+BdO3rVCGD{oTPeDD^=*nav-4Nvmj*9|_>nv9;M1`yJ84FZE;yBf2G0fo?H`Q%
z)#3x&QedzBVG9O%71 at 3(R`djJk~C7_axlREMR2?ZKF7CHP`_EQ0%lOVNBv_MvCR{t
zp8m*~cCZ4-oxdc~l{)KlpmMEMV$Zkc`0o_d(RC+nPNR!tOjkQ=Ss7*`6IEfo42Bix
zAq%*{0Ls4#pJ9r6If at agbX~3K)bi-~eR!_PAWRuq{GIO;BuD!_USNtciB-$k-{ZBW
z=xhU!GTv#5`g>9i`kjeTD=2=|hzYzx_;86LSmIzYL${P`PqE*;ei&u-UMbo=6Q5~@
zdL`;k_QQLIu)0G{T7AtXhnIH_VI8blh#@p!1tv~4YWxqs%ywdVovcmQWL|#0$ShqM
zgNwhzzcEAYt;7m3;OU;)@EBgiDbx-cTs`$G{siW#&*dCwzgTT%RHmQ?=EAZ8y+ai3
zZMa;%D|ZkKjAvqU!GLjz_ASFmr;g_gT;_Za<h at 3#2L at QJ)CwX_c&;IanEJZ-D8AYp
z6~ak%%p47k{8`L=vw6~LW&?r at xog72o4ei~Xl9iV(z13I+0WXpd<?2=psO- at YBc6B
z`eKV%pt?7MOna?pG~Azx&T`jH!V`XCPj?@vT`c5~^X-Jad6^$3=!p|zPZu)2lZsAT
z0?5KnPhF}yV{3jZN-!8?y<9)e;fC#B>uk3DZKM!J-zfGR=+&8^a`Gc$vpDs8jXn&o
zi#EdO?V=hB)XRLblqbH`U(3b=Ep)RW*#fokatWs+27g->y)$W5bTPC^&w_qbo!?y`
z+-&Uo6hCNzrVt87aEyj7AVR4HUrIy$?f5COHM-M>y46Op$-pE1{x{+0;&S{b4Rthj
zuP9-47c24GG?Z;pQQP<<#Nus- at d+AgPu4fa7oawKa5qcTb<%+&_I&S!FSbN~BKBG>
zbi_Gy^kW`W)Vdhc={yA#*+8#LwbAXon3^T)9;WEcf?Rxjgu2%XA}1Y+^3kKHmKpeY
zI_g16;#mMJu%Ry;e?>=G@@P%1VmRxL9tHpj3{&CIlD+=FUvMlKk|mlon1v0E)>(9x
z*VHn@{Uw+w+<j}Z;CGTOGFg-SNC!6>+^&Y-t%=P6$dAKa*)^&z0nlSbTi**D8kySf
z2r<ODDpqrh7rxU96k at -a$pgH7%Vi+It%U-dV?X5OTiSsn#72yGpX+Q>QH!34a<)`r
zrdO at Ro*+DT%T>)MF!>`3hE2e9AplW$x}<`N<%J##hVJt}6|&*`W9DRaf{z80ZMSmH
zao}d5`A$Q+0*MHDZyYGQsMkvg8-A!*>?!vk>~}uFI+l4i(RQ$Ux1D#Wt_|k+CYR(y
zUmiA at dH2Iq!!xW=mivdHyHr1Px18^beT3-DayfrokI;wG`jWMB{FpUrZKA!Egi0Lt
zT1yt-KUt%`=m>6LgNC{4`hCbp>^W$uNY_m$(XhqTBpd3|-{i*E*`TvYfS5#i-Q3mS
zg*V%v4(#^u1Ems7{^M9l!CzL(Fp}0F5Y3!i-3NZ(;lJ6So`f?)IF*6ATO_BkNr25^
zgfw<3kv4c3$At`ZKN^Z_8EEuOn&meHovA=e%oLi8lr9oadp3vNBSYbejfH<6^>EI2
za|=lRU+-aScj76wXr#qISb}#Bd4u)`{ERK?JpI2ovP|0-J4N~=2cR)!om at eyC~9=W
zF(&Fu)JdZPCh8av2~EAz5Y3(YHN6(>-yXGJDLUgvIU-YI7?A0RZmEdCe^;&l$>c(T
z>MekIwGofNcd+xgF}{b1dQO)C at q`8-!n2MG(*~~Wlvy?!ORF*WtV#ep+_(OiH8eae
z>#ffJYy1 at xNQ+U^73s1SBhD%ux(e%Y#x#_La&iA at XpGHdALP9fJA-gy9W;A-WhY)g
z4P~Rt at pIGA=}RGDhpfCMT3aw<EjnK(Ar%MBd>IZ!DlotStde~*g-{&3py<_klW-r3
zVpkJ&VLW+I^J}Z-lYh=RTwsUVqDA;JJ2cp58IZj=x|C&LM%lI9e>rzD^?!@l1)KD#
zx0_ad2UB;g3~{LV0sqMkwO%BYD06K$2y}J~%ASk`zfIj1EIC`k_Fsi0oMw9O<<K3B
zApQDM*!BKvcm3JZHy>$2RMwN~eQPF1li{}|5ZXu%<8$m$hZXIwr`IPkFzlY~vCV$p
zAhb~_y#!L|c0=zY-Z{jmszr`%GRBA#;Mc~`(oufl_*d=Y)9d|OF<OR|18FSu*yew#
zzR+!v9vA~`wQno_jXg>?Iadc{xf?oG at sm9|EgY~48IymtzM)Sj1x#vyf*62NVLjy8
z7dG at +hfum0qxM?;Y_ at 1Fkg5cjOJiDAG3nPT%>O(t7>ZCtJ>v0;wU_ak4rnO3?gc-@
zc>6&B^A_P-98k`j)6A|5|7?jHGbdZ3_<vi1W)nq#EzxU+KX5=@r+v8pQP{ywyN}s6
zK7$9?8P*b0oXJ9G$x{Jm`4_YdRQNMs!HzN&QzsZyxQcak^cxp at x}DOq$_kN?&AT!K
zt02bsNxl%Gl0pEt>t_H!`e(STltK6>ejwLEnBMfKkeaXxJjvim1y4%Z#j)VHC--X%
zTj4y8B*_gGOv=*agw(9L!@hA(?>D!rB1s(z|BkhH-6)H9F${TyLJmByk%FYQ59hWH
zKmpir8+a6vBtwK at +26D+0>odHp>i<SDj5bm6j0ZSg5Ou7Pz7xjYHya>F`PTttBZ$<
zNf?s){PCV;n^th-9U(;Xk0E0D6RH{?2a^=cduDw+lAL#9S;oeV)a1cZ78ma8Mzku7
zt+pWy*-Zey>sxaD|0QIfUiP&rL$7kWxy*S|<iZsmx_J-^aKk<}0CpgB1PJvf&z9d&
z#@-gpgNHYAg`Dx{e_Z9K#N at sW?GyT2bzo^4#3;%R^LmsP-^x$fv=)rakLG_~g=OzX
z%y~&xS7nmfNZvZ_r&;^yhh#PjW)H1YL~1XuL9$MjI1jA`IKa3Hd(A}5Ww|CMnHw<z
zD?yhIFBE!)FT(7{Bp at -(Ff}|8!TLj$$pwb9%5rzT7=;PR?8ZnpYW;uZ%y{1kuVs!G
zt_cvI9eIU+?ufFfd09wFk}I-HwoS;+znoc*w>hHRIr)YcRZ(_<q_W3jAu<((G;S4x
zz^2Tq5jvLZY&s}J`qhRD9lHwzUrGTIJy?gkIid5>h4=<1)D7#kI^_aq9lp;A^(Pd(
zz#llFo<OW9G{P}w)DiW;J)O}Q)7^=5#2bo at r5#!^u5?CcqG#}bIis;&Q)3hpd%g-)
zr0b055s?7SxxHrpF@~=K|2Ozd7u17Tlu>&IU+#kX5e{F#t6b2XgmZUsCs!bQ$?*tR
z)DIQoTU=3wTv$+?9AAea at IW45%BrjcK1IJPtq`e-0*Pi;aoe=TF-XyGu^Tj92?rZ4
z86S*Fg6D?SGl!mP#r>brv-1{f#c#vFJ5ehhBGLu+cC_XzGb$7^Q6TX^<Vz)qRfVNT
z^N5kF;?+gzePN~6TTIeUNQ}}dIb^h>#?~m)x{O^<#2wsFr#Up6s|YkPk#|ii_B)RF
zottD~dXk1_(k!o1!6a>N3Db(L>X1OvETj&^&2vK?EyMsr_?h%GJg(9MiTRh?>+vIQ
zC>sbbcFs)vM>o_C72sMo)H#y4PYwhnt~<J_=ROhnV<>GnQR<5X45dxXw at VMQ&rB2|
z!sLV$l`&!~^{I7;X#L&{UYFC&#cfISwK+mI?GC*SPjE-s0yy2l%uMDCI=DdBp1vo7
zwPDemIU!0xednW5vzB2Rzg`i}!S~X2sURQ~6r=)8ZhL1_ at e}T-$WGXnklJ*%K3JHY
zu!=S(o7$A7`%b1k1o^NzD3^Mg`O()=_L!5bhKJ?5x>w-I95e<Do?{&JBUmvG>W=<~
z(>zdTxj<lN|Db0S)N%IVug=_ at 8dwKB<Q-+9M1eh%-4RiU{s#d(!36~HJ>bH+MNJ`x
zUtheq?EA6cDEkuZZLlURcRyme@@enMV>V#i>&{>ouZ9QYLcUKZmnH^cysBY0XzeCH
zJi6REvpdqF$!VA%Ilv??U7xv0cbt=nU-Lj61pE}k5UC3i(7al^Ms{03J-4Q7bj`&;
zEO1fR=uZqGRLByx=#*_U^&!iH>1)2DciyTV$*&!3-XAxvJ#daI#W|ip{`cN>#|Gcz
ziLwl`4jbURJyFk@?cv^a&X0?CCUhf~(r$$JH`5IN_B(i~G7-2*2N7QGMZ{9V!uvf@
zH-hg)oH-q361LpL=S)YPi2T&?One1!p&iD at ew}3msY(MC`6d4u{~TU29SyK9xEYnH
zI0cu8W%oxsbLoiX^1<Sr_`T^UJFK^Q!r`YZMO5OsZI%EYn?6El${S1HYh<?pDy~hP
zAeV1tgE38(sp at nlmx0i`Q0pb44w#8OUwRVuw}fe;@xU4A3}Sw`?|FRP4AhQruof?y
zfrb#<a|_SnH)o(O%<F3yrc*3vB3=_>d3V@`Z<TJW8p6%IP&bOCVz+UxWaYH;86Y)*
z7aC=JSFtL;Fm5mYxfe=jQ(}&uzOYIe$*Ww*eQW9MAGdW at QQHc|syJgpbAI7V72fWJ
zy2|r_fU~9T54S*M`i|t`$n&7H?q~P>VR>hmnMxGa$QDxk&Q+ax&|5tVfh$+<N8Rh9
z4kkBGEp_St*@vNc6<&?bX+O8 at SXGzP&rwJB9jy2rGX%5EkJ~`VBd0mtuUPZ}A51A;
z$1`T4RQWG)Lbm_$Dh%B*LE_iH&&;Gk{qWd~{8vJb<X9DQ;~@~{9y+yY$3<-Uj!E<~
z^<S!qttjFmxo^^~Sq!n~gi6Gf at 6>#vqJx&2`~O`6xWNcDE6Yei{OwHCMZPB7m7uIB
z5>TaQ05r2ksDq`uO(g&`P3!>}DHrAf>ifHUool6mWz%f9RRjIF#4Qk0MNSHZKOQ&&
z*Ed0!8Im0z)a`$@r*c&HT{AK(b54+9d;5VSuEz~#Hi5oNk`bD(*2<BQF$pOC9ssx!
zHJ`wx1c|xO at t%|ZSf{<Gpvr!%eAmDUlqCI at X$)2CPd~~us3<~^+#^iG4@(a*TzG2c
z{cYU}BGr$I%<|4L2!l9!w>-YY|9Cbd&#o$xU;o!a5SJ=_U2Ey*ixHA=TP{lR7 at VxG
zC8$n at zB+J$dka+)3v+zp%<nvK at 5VJJV?36NIt3XUneU9KR1hN6D73CQYQh;N!Z)Fr
zRR#~AR)|59y at gHoS-{^zM*sg&({cP57iBKxr+gYSUa7<NI;~CS-|KOG2*CAYD~=hl
zeni<aUlH|W>co;L7wk~%Hp}vGP+|!Y^H@}A;v%JDMgi{;k4N3=qHro^EV;#{N^4lo
zID0la%~%=5!c2Mt at Q~T46Yan!0wPNzK4{gA*~5iK$G3RiY}Cz+Ruph4YkAjuZ3mNF
zQG|av8=VFC=7ZU&FTLQVcMfIKKX!sVK>#Ojlp`O}YC8*ljrxju5c+N~+`b*E|7saC
zZc=)ERr({Sy*o-Nx5pei{M8I|{Z_c=+%%~ZmULS_DvT~!T53PyB3F%JBR?-l*d84@
z&-m#c@;}3YFv(gAr%uV2pw-F)hN2EqPl8r7)`hYE5GaGU4JI^<$`)XTWe0+m8NbAT
z_eR$_=!@vuddU at p+SJH~7K;Uxh8K~i;08FJ?Sr~_UVMZg_JLW-7{slkx0-Jf&c<98
zMS3f<{1Bq-HbR#raA(N|st}BG>bwt1M&+POCknxQdn{saa at WK{%bM`u(S19`y9%*z
zmRl--gqAzF-tlH4csD}>++RqyB5<zJ=I*eD{@$Tx%OS<!Rl#(?pnogkZsKV^foZ{0
zAmbK#jbe~y&ItwnFZGJxDsCbqT<C|I1;K7H%YqG`CsJhUg!w9jB>TMzx&AqWCB22A
z0C|%#3LOk at CN^*6r)F&hz(Tic)Luxa!*}_iZZq|*)4Afad+o~YrH_#9MX&?&#EMKP
z_kI1#l)u4!m=FHk5A^{^)ou=2F)t}M6%~?Pku&+v7tMQQ6>=C-`7c3e?;P_4klJ^$
zUjcWW4Q)muB<U+3WB{P-yw`wE|27BpGOiY}^NE^RoG}-*cdy1wy+h3lK*yTO5<uHR
zPlhITXtj1dXh+05-h68d55!zC7j at Oed;wyXfSAD`X4G%o=KqL!@k7k0Ke>mS<_Y%Z
zB?fJN at U*;kz*k2)%;7{{TcI22zt2VUh>;cs1U%Uv2#FJ)>9`CFa+#(EmJ(hLf~&7^
zQ}ytkfR2BMTb6Tk*b5_D$%H5?H|qPPU2g-_tnK7*vB~@2uIycWIkM({4ESEI%@{Yt
zyqL2sOFn9hLGP{6>(lfDvN}Anuuyxh8eOLTdc4wMhW_G_PI;)6zh47l^s(VOgNo0Y
z#MN)n#Z4Qu%W=v)l)<cGI`vC1Xl7_xhF|IM2gbMu51NPC_{;);`>7(>ztEN;sjEVM
z8WB42s;iLcqe7$nXCGb2=K>A`{+rLUO6DD}LjHA(Rf3nyL)}gFD|3l@#(<xlhuX7*
z3}UVoVxZc!z%pSmhJI{Sg*cyESptMkqoslsTkzp|K)g=E?E+9v24F+|i5W- at Je-hD
zMRLI-t at wdUk~V=30gPd5vnF;qWE3s>jkT?Z^#AX*?sc8iOIIs?m}%4?rDo?IiQz(e
zA7D7sD8{Sp#Ei{^C>`^GalX?e;70=hxE+J at 7OvG*R3?*#x^!Gnw}!X1{BN$P|5s~b
zKUhe@*jY<3L%><r74>MMi<7n4fJgUt(g`DQla@!V!umG=Ibf;cc_tpi<=6i%fcGZu
zuTVVKEg&rxct{rk>E*JKn5^3oO8y9)hgRUbKSBdJ##PX2mv^Yq2APVBY<VMQj>PH9
zLYo`y203)L4dk8p#78Jow5)<v5`xa!*|tR!2BpjjaR=xA7UcPz#o9GlG?v%-Xkzxz
zhGp4<v-L}weSbCQ4XsfI^Hbk~G=P-;Dw!%x*3T*Fr(jlO1fnwlC~ZgwvMifl|7<JI
zR^9>G48O6F?pnER?iAaZ{O9Wyf~*?p?aHbW?|6d{ct)CR%J7uz5wK-`KJ3AT2z&hM
zG(#zX7}K5^*TC9Et){mAUAvsWYe&`9u3O_8t8Xsk4=4ckO5QucYU<VKj0xZd0Nj+q
z{duSzLs(Fr(XdgU1pL-*A5*}LUdIE{E<Yu6K7JO2<FH~tqu<3${Cg0N^d%s_cEe<V
z!PZOtVz}n+r(gIV$GlGOUUs%72!%>R6(Zav2%T&2WfKYiBnb6Dqw$g;)P>OW7(W(-
z+S)|xmZLj?kj6nyNa;X0rXrThI`D@<sI#$1nS7dQcoxU_sN=^)0z~T1Fn~m&<hWk;
z(73GX8LS6!X9-T|aKAG#S$eXBecdXgRQ7t3Oxh6vPg|5BGZ=9#YucB4M^v-*1&+C%
zD+7X$;honLgZOqn>M^g`GxlPq?CuD=&`)tnO2_;n at NKgs$AQ%4=R+N=LXg2yA7t>R
zPIH`P)<zb0>fRUr8y{Vm=%Wb%qW?k7(jKiwuuq%oi&>sb4oOYAe4+5LchjX7e?e*v
zKEfuowf*78z>Fl0R9nC75+ue7Ih^*zr-Za|1S8$o8>@n+$HoL*qeanpnE(wS7(T{-
z5THEJa>QUXnF*<RXT3q6FuHUdiwiiXDBb9unfYg6BySBygQ)qJ=hkN?=y?jw#)OM^
z2BU1k#Ao<l!Dv7%ZEwJ>db at oKB2I0ij4$aLZ91)q{*@uPs<RJzTgdK}Yzl%+9OEHG
z;1vRih(S76IqWV?MEvs8;s9ktDAHVp2|Vo&a?A?>2(SQe4?$NXOzi at DE$w>$yfcQI
zpLX->tVD!#F0^Y at 3vc>Lg0Q#FGjoie-Zzb?Q&8fblpnNb?0Yiy>rA7ny-rWyA%*mZ
znuK5OGQl7(wLYKRC&6<=!8AHdX18AuD+NKR$Oh?t%-+0r%{Ty}Ug30Pjt~&R&KKF#
zUzd6hJEbC9t}_-rl^mdupe<6FiuoT~&rQ>)yQFsoMA;c1LPKBi0ciFG5-ocX`}wC{
za1#5_q+e;*`=%1tbap%%T`4v$&t0+&XN93;Lh*KdMi at HFa!rgE;l!a@^{cX4%&=Fo
zl?R&P(=ap+72)T at P#X)b`S$RSkvXy&%t==^CH{LDy3A95D5N{KKSU8JYYXCJt)a}Z
z>u0z_IeAdX{76=(ACKqSaY;Cuh_1og!U6hve;<Dsj(QT_e~p_&pbi*0&GC<>+wK=|
zZUjW+%hZiih at 79=CBw5p7<z0y9KSQx8hnzMjKsmqU7&~uBG8!*D}Qr81u`W=D}4}q
zL}qkwD;Ax_O4ii~B**c;BG75*aoi*lT`RxA^oP`GWI8;c)kdD8R+Ilm|HKfP^&c=q
zEJN^Gw_hVUZ!<qi?8z?{aa#w1c$04Q`7<Zo@`7gO`U0E`ru>sVHm^>2?Ild at -EOU>
zA#$m443BrS3L6tMru`#h at Bb=DK*bM2M>t?<RX4s8Mwbg+kGFmFv8&)LK>j3&h)Kv_
z&orC_Pt;s|>c&HvKy?c7kiN1t(JV!tXWiEC+-?1S*bFkVmQc;~XiZq#^QkKm?U%RL
z!7CDF`@RX631YZKO!77;_w`o0FeC=}ULhI`VOq$kilSt0-d#YETm-F0yCKWE at riaj
z)3B;O=6Y4F>2(!dh{`G(IO2N$=WAO*4K1p$EwM}rtig4cVN<y9(Q9QrZS~TT*B@#b
zZ1A784krHxgwr+uib)JNSKl1-i9rVX<_M;%?g%;1t&0-3v!duMskgo7&7|KniTV4^
z6o7aA+ha_vdk^FOvl#)P$#{|jN$B1s#2l&hFaFx?_?alwBQ;xCuwz}+Z#{pXCmA=_
zW`qCcsXlOGnr{agU_d_bocLbEmHnvsr0n9DfTt3&d4}*b-Zy`O at gEFNlDx<gI_llH
z5Bmj5z1s{tA{upA0Nlp)<`n%N#5vOsCcV2~qrHV0Lh;wX8uRqc;pD(QIhhr_JHz7g
zO}WV6sfE<HRo>L0S&B%S&k^q^N5!f7(=1Q?n`qQlZr$kOn_7|s5Awo-Yi_{^B6i-l
zdYn+^-W*x{dvma~0Wthe6>qUITPaXxn%0d`*_|wQh%&x)EwbM>=m8fmcy=>UvF4HS
z_U5R1%=6r}k&*qj=iiwv at ZO$QM<B?Gsm3{X&r<j)sc~tEzR3KVDy*l7OPM3x6$Bl_
z!vQ^nfutZ1Tqw3$*_`+BuYnY;Ts*B{;7XYch4-3(FnUVtIr`?**7>Lf>H~NkEUwry
z=?f8e<6g}tDsMM>cv}4FMm9~kAGEvSJ!NuKq8mLURT<3N)HV9*FZ|L1G>SY at l&*-D
zp;gG2t+;gz>gLd1=v{Y{sR;>6MH6 at W&sPks4O&|;aCi?qAR-yVm&Kqyj&SR235%=!
znQ1bxxa-Z%S;G{b#V`sLdQ1j87K6^0!(fBDU{qZ&#<0=%Zu^4$jv&ZH)REx#Gj at Mm
zdpVw-^5jYxYap_ED5Y8W;^sN at oz-+}w?xDYs=}6hD>k|CqllUtAok4i-hQm<w<|kg
z*p6N02A{l*r!-8Sl&M<gd@(9h(JGAIxfGt1X<BtmK-ZTA!@!K<sCEh2W{<Cw;pMS_
zPoBlE#iBuSnDRii*z<-D?Z{Nhg{z1H*^>V)!GM+6^JU<NaN*UM6R2>6s#}O9CL)IV
z%(%$PRq at IIdxSmYd@1;y)j9MNM!bvETfiP#FA_a+BsRxfrhk>UX#W~{(oPRd9zNaL
zsuHvKpUh|=vpF9!!@r3`>H6aSEcRUDLOTe3;H9#$dj%Z<-+X9)xP-de@<L}>YO{bF
z3g8X^NOLw2lTVP at Z4svwMpFbd>71DPR;s@}d-?%ur*3X4Smp5C7{7iZAFhNPC}r)`
z?Q6pmHYqW3gSg+Wv{p<2q3 at Y^nvRuMW0rb1_^(LTPdE!q&i)ab)g6Pv14-HxE;6*a
zIrwE_3<?!<=r5OU<p4|#t;!<27sbtf`xO{Gs1RijDi{NsK<xSZb^Qq$=i66wM|`w*
z<S_&wJJ4RzS#D%oAo$uQ5!arowSU4$?ttcGvl1gMroA|pO>O{Ue?lbM^hq2SUdf{z
z8Z5mR4{t at V%As7VyS~>7#eQ^)5c at ON*8t0bm+s*WyYysq(+4$@V}kKYrdg+5+aE$n
zWmvs@@`8fqvWO}bjyUFBQDh#u>@Yo7gW0*&BTn81=$6&NPA)>mpSdghg`D&pbQ9DF
zF%+#ybQ2+)jQ>zz6GVluk1k>lRtxAdI!0=l16nN=-QsJF<nSyolZUn1%{sN1 at TO4H
z<UPVDO_)&lXRh2k2i+o5Soj7K_dS<U5&!WfAMe3R3MK0VhE*^Y{v=Z|O!+C1OP~d>
zgP#GMIY-~uy=17W5M*Mb05xUXjyDbK^dG_N2Ku8uOf!&nsIHd(sN^6KR5BUK<aF!w
zCCRa}r<yQ77sT?bFDZs`EeI+b05g0IN=kCb9)`^Zy2moN5^;T*n8>kDW7en=eQ1N-
z-W=&JN4E5)?p{GKRJ0-~Tn;nb`ac;y(Ps#WxL+k=aE2|~-C!tcmY!s=-D>3sOCn=h
zOS>`VFEPw|j?%#b26kW4^`@jjyBG{M)B0{={G)*@yA~v32Im%ajh1}`MT+;VvI8Gf
zv_-iftxD7Sx_Uch@=%IMAUn*Z4oz1Ie7CLrA+M$7(wvsQOMksq at 8AL9NmJf(Ex=5~
zm1>jOQh94KTf=I(mQabf?flI07#PKD87bW@!(vq at +X6vNHl@3(Zep(U;VG+kV)DiJ
z#>#X9B$`|Yn%FemO?5MoBejC90mBK|`L4fL=n7+4U#H~@*>0(b&}=`e1TH?F&kp=l
zMHDj|-iyhGqaya^9hwArW-I)Gj=-Tr6H9L38|zI{e_0E)BbGfKi#TXtSF1$o>&CHt
zFX~AlQhV&{A~&`|l$Wd!ZSMn9PRk`dazvC;t1X166`0e_5Jgn at 2F&@!((^BJ7h`rL
zJc+Va6vF{LIO=1wD&+diEd-fy3<reqaEEvKug}nD8kMkxaLY-%1V;MK0-Ytx&1B_n
zz^tm4xm?7P6Hq(3u%LQr)aq|ePOb4Y92T+HKhnfX95GX2boJ8C+rb^H2Zb&zJgvmn
z2+8RW5#>lv#{}@L;sVMuHNleAU{t*1QiD(+hPfj1q{cr6<fdbG70Q|D>grqqRM`UX
zhpV_+;ms at L+OGUdUF0TEB<Gs0xmnz|8y`(T*V#yho`r-<*`ReT5Yf$LiYU?wP={Q6
zYa;4k$4`A1DJx}oEZ^mgBpsTsh`s|g>uM#efh#BQ?-EfKX$dWoUkIx73hzloz0g|R
zY%#hN731Q?D32i~?0XC+ZX9tzk?asc%u7*3 at l%I4;b#}493suegN{F6jJnu?FQ*nq
zeX at C}is&q8YYL3cl8ssk&RK$TtW!@+FDg4U7J1O1zE+9V*A+e47P&haPhWz5Gz|!w
zR-a%76_p<5Q4W}wWP78rwI$`Cthg}%Kf45Vq4!n?A^o9>|3}-K$2E0y594z~0yiN@
zKmq}QTz14QvRI_VggrqhK|paq5oC)}R7ezSyg|bviV-AS^kH#ds%>p6TCG-WwFSkh
zRMe`eTdg$Mr*2?G(RU^RpFZE;@B4ZGdjGheGjnI|+?hFN&N9mxsiFtq5KT^(ZV2B}
zPiA3$esW>wU<c~PdCy at tu7%dP6($;3LQ5JbMAs$QfnWDnZ){>x)6%gqwmW3R$|w4d
zkk|C%+eBI_KOI{~nl>^*<IWXz4dNy9ep=!MZIt-;@g1gkjQ2YLl11OwH!;iNg4;o{
zuM(^*b&AJ-J7>Oen41PBoMJ%D_HrG_=t`|uD9vQ_auG!ST~KVQWf`m`P3*0VQx`xa
zgGD+ at J{z+p{ls*|m3W-n1H92;GDz0N3Ig{*Bwgx5e6cI9T&$WAa@#rqfNIZaiy7~#
zh?hRF*dNrzDkfkngCN-l1GOUcFR##ApzuDh)+;XGnx3+{3(xuUW7F|Drj7=m)c~pX
zLzf2$=>*Ug{6te6(vRDcYq%+FxAE*fs!HIhxY{^gs3X{lt1!$3^npON#Nbs2aJ)6F
zum^Kcr5Kqd{kSh27R-FEJL6e|I_~(*JK9}i4RZOAgn%4tL2f2UP^B8#&|tPHe1_ZD
z`jK5VUjYY|7oe-kf;j!DF#O{-_E4>nek$2WVl{E-<2)DRhh7(vJ1CW#>5M(&tj&q_
z(%*>+bTzc<s-1)IN?t(o9jH`4gbLsha|fF`RxjWft<-VfGfi`(K5;rgLnEhp=bOk8
zk{iPBUW7fHqaZqfZzhoOlz at qPuIU0P%hr2<`a7<Y3T0NGG-MC(U6s?Zfv at PO<fn-$
z!h+ftK8yT(**6JG_{egd%}#`d=D<8>rG&VgrH+FnX$9k{ut#jpd#hhV$arM$WK<a3
zJ<v5PXfY%G=cLe@<^NsbX=2D!QX##PIfz&T!Mr`zni3^$g9 at mR`ZGSw72sZWk_rXa
zNT7lT^{Gt?N1Rm}GyRLO$rC}Gjsxa48y$v6^{lfoto6RdoAOI$z%rIYfo~$QTw3<o
z)OscC;j*kq1*9vMFHlR6pS!b<5|%2CiLA)?wHku8vM|?5b at gKCz<Kj1%At}u%f8OF
zf=nGp<9et6>Go<b6CwH!mE%6!?#69(wnOf}L{@0b{C+_n*~C=G2FIz3o$G@@e~f^q
zs7$mhygD5ZyDq`Qt{G`uF5oD$zycU2 at f%AF@`3Wm5)~oAb2HV6W&>0$_R-;hpOdAX
zslA|uBg5v+yonx3<<k%C%8?bTTG^13jtYY~UBs7UmH!-FEtXHT!<)Z9ap9lWN at u*-
zuwBT-1EA8EYr0Yx(E}7918d8~12K^9638X~P;<0FEct9q^>M_>RJDVhkdsM at Qq4H4
z+vfcPdXHR{sE8#a_Yg0un%w?+e at u(zdv5VJa=D7SeI~8u2yTIP?GNc1?cS&ViF<`y
z0oEuFBvOuv#q%Mh)>z^;J63kTv$wzxAXclmO3)W{R_?9L($A$d8CW7Iup?Gj$iP}T
z3#(tKjv`~n+UDpiytz<K-*(q(E4qwW5sObiuB$!AkzEKs9U`K4dK(<WkjxEXOIRbV
zv3EK^L)!*KO at sL_VHX5HfqJ%F0 at 6ZgM^0bCS at s|F+Dm^Im<5{?6l~B;Bug(t-r0ap
zIDRupi+(r|Ez4G%VuwN;guX$_v{2M_|Hh^BjMH)0kG>8 at n&<U?Rf0P`UjFIonuZ|o
z{mp%iD2xc|3Z(RzuD71Wulkgn$s6-Lzc!b(s=0;jzpRDnuW+|8oQCl%^bU39Qrg_+
zI1=+RWLPim$zw7Cj5J|Af+#T%C1ShKmX1yc(fhtQ%xhd8v%DU{Pa$-G?;RlQfe?OQ
zel-{8xWdBqFiydEDvW2qcm|ALhw(HBXTf+YgxB(z3s0e&Dg+tcLqulB357$Go45T&
zc}gDZ_Dg8D`Q`;YT%gWH`w&bM7^`psQ5O_CYZhQGq}O62Qz-+I(34P=y*h?woA>r-
zYnvcX{p{{{*%QgG`y8TIW#hscA&}d9 at CjOtakMj+XOHfNyC&DfNLFoGjV`D?T428U
z_O_lKDvUARe9L%$v9E at I=>BEY`x3|#;+URVee^d8sMr3Np7?)&qW>QZ`TuVylF)=T
zdCW4ym<rTu&-B!HnHWLt9Mmve_oK6&53WaxL;lSVfV$&x at 3ysG7j6^h- at mWo2MFz8
z8#k%rMA^?{Z|Rc35gln&NDZrtF#-E8WusFzJWR+%tSgTh at zq=1P7cxG$m2fHp38Nt
ziH`S=SM|g>y6WzIxGbeIOe~IeBwf?)9m@${cH1R<;VMrfJKp}&mGQJsS2^<19v~Um
zk%HN(93({kdUu<6vPUAa%XO-$lz2FDdhRW8aKn0?y)HIQbz>|(7U#^6LVlQ*%Y)@G
z<ClNB%Da{x2!EJ}+`ifFd)pOX)RT;s^0L?S_r at MW2lFNVq^;kYx7N;Uz>D<m=hHKw
z9r`M7jORN830cufsQgBEHdSHmu7(v%AMj171M=QR&uotI)G&d1Kl)}9KJ62ecHj*M
z^-t<zUtf?Pia~+v_`YY32Oha*DaS<@5s!`hU{a+)roN<HBumQ}YfDyirX>ap**@-E
z?^*{WE8j3xmlFe2j|3vs0F2KG$Cy1Cyv0<ahdsCW5Xr at fx$lgYp`2!LLUDiNt(Qyq
zr(KG7n%`UdRJ(JWEu4%PVzR1eJ8u;MLX`n(@#7xYi`SqQF%!2{iS2^la at 0{JlkuSZ
zGSZ#p8wplk{_>CPmb{G%mE%Qcko_>QJ95!m&XL^MuhrI&QL{ogfLESXo#p!!xL5Cs
zEFp<Jmj@~6N+R4wx=7acULXHbMl8JvxmK!-Gw?0c9KMtZmg at EMtuGdU9G!-KD!%)5
zyiVY(*vf`75v&xE+)*r{E|a;|kTkh^-y1O!6-C2cS9jC<d&ISo!_NmH*%cFyynp|T
znd7IvSJ;v5d5I at JU*Z5bu{vMp{~@4rN;rVy^CbuzmIB1CN?LJ-cR~ZHuPXhsFXSI;
z0#a++v9XF;EO;ObL=P;|M|zC|dsL~nf*sl12YxvmUi#g%gxFT~C^Ru*T_Ca=m~N`n
zlYwY;{6UY2#pOTUvOzoE?meBomvO=9Zmvx1Qq$dPZMc`0hy6yh{|s_7lGDE?FW~+-
z%|gh|CJ34KK(Pn65H-Dw99Y*8Zz#*4_pN}Hi_k|Xo<b8xUY}kP42Y5|&^p(E;DJSd
zEE-I6IAmgvUzyqC2lMj+e)@p6=b)694I4pMap$sy$*`ggM(5adWegNPKgKvJcAc0Z
zoK3<6mC+`49Yzy6;1i&Dnj_R1eMY)ZB41bnyDxjdM;~c&<@ABMr_jWbN(Q_k&RO at N
z>LG0A2SE|%DE&-UDT%L_psoCJ`|fu;1){TN3FTrj!f)??tB;)d at X==vgb=0V2(Ddx
z9++|JNULeXn2NR_P~1NvJ9`0aHD}|8`pBQN`y&2{^O_aFSy7(n%;-c=z*LksIv>HE
zjH;j(Cgh{5L(gT5TkHVS0}>f0aHl7#Gww`#UfOdswXiv-S4N_#9;m&Ki_4cf%D3|;
zBh5YWGwEh}b23<_5rY>@qfn4dMBct3?v16&&;c_IT1iifW8?1h4DY_lX+TjQM0;6a
z^c~4};fDGF3`gBgZ#NJ+V49<{eqUY?c=53WJkk-q^UvI*l5#QUT>XuR&YDg%i6z0U
zn at x!h^UL{~dAc<Kxdb`(5`7#9O04uz$g!*7IT4ji1~y5~Q!9n*aTa9PlO`6cmCwA?
za-VWFt0~^0WJ4>bWMHO42|6OG`vb~bCiQbJ7U2InNgX%9j25qmk}aw_zz>KST0={_
zhdXi!HH{mtX28d$^r83*ipaxU#)n-%S6#jD0G%40va_zaE&-)`GFxg=>wq#Nh}NH0
z2R`_V%FV;viQziNBxO0&yY67?76=@+E1shI1E4Ppy-V%R!&1rSi!zRa*yzzl%YH2H
z at OisGfV^m3UI&g^i3Q4LS>}tHpuiF*iN$~z;lIEavd=DmwRzt!+CC_eH$+Pd0VKAD
zOf+&(4V9y5iv-0)BtM7%tIxFhq431wwTt8lI77ZJe#-RvD*q-QLw<jgfsB1rF?bn$
z1PRL`(WkvZ5Jg0iNOEa1fodA6F6OLo6a&RO7LE#v at mZ@I&TpCMqo&^HC5Q9Qf_dML
z<o#ZUVB&=DsnWwNBF3hj8WR$A6!{~|(cx}_Vi!|leSWPwYxskDRCw-aS`Ni2z<gqw
z@>s6tWSkdwO()sRyM4Auz|Z3)pDs9;x?9md_x+varhNDF0`6WI-p0R09yAc6j at RZ;
zs|v6&R`&PLJ(Am4QB4Jy2blvILP<PEHh4go7`le%*>SMP>g(C(k_5ljspI&ESzg-V
zJa5<8mk8ZNo$1R8#edbw1R+mRivu~|HQRAkakfv7Jr+TjrgpPONjh(Uj&Cv&>4gf|
z8+6zc at sKFmBo^j-5Vn02SPYb!EOjpAzY<m_w+`gA at GG=$#T>=aM(6vo-t(#&<W6S)
ztbg^OUHWRveVwbW4W?*f<;$p#<(SJN*S}8UkhNxaj6!=}re&A!ldx at g?Y}l1pGy;_
z;y%d1&Cf2=vhN+>SD3d<NkI7KunTXRUB+EXU-viZkx((PK$fZ4wSA3>ssn{8$l_<R
zuv7<NTY4W|pWMETdMw9$yozwv at tdMk$ODhm<M56qHZaC$EChbLH(Lw5h^UMX>^v2`
z7z^g011E?K1B;mjXX)&%)XK$J5M$O^M)?8i at M3HXwwLN!jCs at h99zSv7mKk;SUBaq
z1gnJL&=PDM1UHsov!Z6zZS#4M{8wND;<1ri-Zn>iu$%PuL~lqBj@#0MG;bQiF1*a{
zNPrfVr~DG^*9vIT&#c2gjVKeNrhFixmKS1a+(=l+MpZ=jYgW1m37lrH9bMGzLd<*O
z3u9lAA!-Iu=m=3r59B<btCnQX#%qRPBZtZ*Ahibv&(_6e&Lq;a+rFkIevExU<|Kxe
z^y5HO&%#kMa@=>HO?2FLRlk0gtxp)zNkHxr^*mwic>8BQ`Y45ic#>3zehfgNO%fvK
zsEnNUy40EYq;H1zvZLOTd*lV&%NsdxGLrvNIr_fHK?1BlGgA#|@AM}Jl1+(%Bc4=V
zsE;%iSlC_{eQw>Mw^@BsgRTJgYsT5W*&wmTK>+1u0WMttEh-1GAJQoLp>>uxUR!~@
z7D-$9V->;TN%G5t^F;^S`Vfv9hd-S75D)tvm8-vjbqZ35$mFiTjpG+%AN!vRCoSeQ
zIc&_S1Exa!d)yr><c;ZWH^i?LdstJZWP(g(F-Vm<#pCdYf=km+vTPM*hF6qFZ&VRD
zo-BH%t2rj|M$9^HsKY7A=ZlJ(HVFd_c!a7GUhKwGZzaSoorC81hwKIz20}NEowA4?
zr3fJ3SqW=7oQ$jHE;@1%B7Sr at D^@4=A<F<xmIr|lak2mo$k6YaIiaepf>3Sp7v&?Z
zn4xjlbX2HWn8U>_T^-betS$+t&+Lh)+vA}5J&3&x{a6~Z+HOrx0jT%-GeUaJ4eNUb
zm?7O67A>>I5d-88Rhh~enwSpvQx^SAvd9{{*7BmA4i!fWV4)0ip|n8zs(e>;wKoAj
zgq5L#&^PQpmz>>^*cT3@&#qjt_=DAUc*a7M9&X{+%yDhW-59}z-GAXxqm|S#1yfD!
zqEux at 8md_TJ_(Szk9U*a2_Hp1;-&~y>r=3PO94k8UewUkS0;Al0i$$&9?PgX@%xXZ
zhM4Gwf1I5C$ir6kgzp6jEeH~$6Cy at m9&kp-BHI$Ga71)IZDj)c(SLdlFk{7##v><8
z_<r|;H~X5>(vWj?g00LtJSQd%(B*WTKznGF32Jglm>$@wqLL7Uj*4sRu#?jTY-NEV
z1`&)x*Up6>TMdWZVE7+G5 at Smn-q<FE;H)2oh=uVi at 0@!?#V7zrUI!dhJ%p>GKM~(m
zba)>8DW{1r#3+}jOJEre5Go*a73xS2w!$%-<JSyqx}Ml}6j|ACuQ_I>1;tMDGFN|r
z1b2nQQTtN?C at ueY^IWdO?%gSYRl73FlSn`NoyhK40BDtWgd*J~-sqpD^CjNGh7JNL
zVfV%zTOgOpIQ<nu+dH9aE7q+T9$`7^GRS|O1*CcWmZdu2KEq?V4E2PF>j7F<IBX8l
znJPoPu)%F++^JMchj5#wKAB7bEBVqs5a^c&RwdDGD{LQXHGzIf6`gwAM)h3idN1SL
zPebYFE}WWu?gCm=@+}0;14-(6ss|FLD4VxNI&{)OvqZCqydzrMCJn9wH~n#&&g(*J
zRV36~k3cgrr;({j9rT~^nS&-rA$C?6B)Ik`%vn_;9;=$g@~}O#MU!-9OGQ`%#)M*w
z2^-+{X5QzcN+48KvT)zk>iMFkp#>;jqQobWTo0H}M8r7YQ^GW;yh(1ihLTCnqU^V`
za!w`Cx#94`)H?k47h=d%;&HBn8n?|8{fRbZ-(T|8E03`5cWZskLn=>BPK~@*`FX%7
zk1hj;c#L`s5*Rr30nW&t44N{|ZLIHiL`SLF>>@a{T`|1A?SuD6s2{i%BL?jORxcpU
z0o8}1_G+IpaaTHc9k?Q?vZIynKUAB7DLzMPM>1!o2Yr#sLCjIT69c7DlSpy}&icQ$
zlqcQWQrR^R7*e6SqEO=YX~Dqz92<B`Gay4ky3zyMqO<|PKw+5fsLZD2z&LxkZn4Iv
z4Fp$_MX|D(9_ce)ST*Kf3h$^<^bmfE>y3oaj&M?NS!~4~;GgCVCJcVEBLX>z+w#z=
zQa(SFCFk&ck{SqS#bu+Vu-=H7ywYAaGSWD}r^bPB$|(PJ4}XjV7mOw%?Ig5~X}<xE
zrtRjT&y({k#J|Gf(T20+U*jxN9s~tJoIXOD_7`932CNj^WPz(kl15dR$7*U8(weSj
z_A;-&v5`x<-z|U2KGeSl9bQVCx9f~m<)yI51J5jEV&#`Jg6kf$MT%hD->;ryJCLUl
zkDSa(>P9CcSF<`A-k^JkofTgToK;uYtkimZN@)W at GW)+?g3sm=?Ippu3nUhMQ6md?
z=7B*JKihWm^B4jTCb_v*d>72Q+K_8G7?j;%ir*5O;{3TRT+_DgixVwA9W|dwK=mHe
zX}M0OkGgv8)40>m;$(|d<q``mBQadLLM=XW<iL|FvVA2yWx`ac8<`L+ZAu82x&o#?
z*cOUMFj1O;G4<n<%Fo7}_y*lAuPV=Dmggmg!dA~m=4SaL2_63MbD;yQ#5M_l-THax
zD^wx)%yqW58Vmd-;VoGFp79R8E7S=Gr)VNVm$@(@n&|$HElgoUQn+%KT6|^3zUBQS
z4%jc)fLY=X=n7ZhtKfl&zE0|;p at am)Zc#HG6GfFto<-#zrRN@)#xw8SYrfBoN<QPp
zz6FZYn(nxF8fc6MO5Fu?{zPs0{aNqIcFq!Qt`a75Uj7ouc}A+^gisOeIfvU+e`fX~
zdtY+(^@igqnA_ssF0$yzuR2I5Okqu~m7z2IV?zggE`@*0pDSRhprw#amWd1DP*N^c
zi=TO`b45*Wmkyn^2P>}2vQc_40j-C4eMIO}Fm|Y_z<4EjUolUa7%p{743Rbgra}aq
z_1~TN6ZNoS8gR})VLc3!@cro%<e$<Ez-$&JmAf(8Dd{|zz=R3gVWw8x%ibw~4pmvx
z50shoRSNI2DGJxJX`w5 at RK;u%^&+s458uy2ew!~kCuv}KKKfCOvu(Lq;fUyzW+a9P
z?F#4>55+TH_2jYs4b59+rdkZqnGrgfg!udeT>_alFZ3|v_2_2fQ;Aa<I$*{0X|JCB
z748)nh2?AMiNS@>GuUAaNsFSV1Nd!MC%l|KSQ7fQ8O&iv)&%>pi(`%eTBsB7P*5EI
z{+>jO96O92>d5hb(c?U3_E&cFLC#U}Wdn$W=^ih8E?R_Ia{N=t9*+N!9%l<gG@>3v
zH29SAC;GJVrN-#*((5njllw0WLG4J9-X0TrFUWp5v3JE^<ry}8JrYKmL)nMS-tApQ
z4{db{81B`%PgS+s1*Z{$&^Nmh`JsQ9?xew06uOcILMIOAO;4jEs>~mpPa`(X{-u`8
zv1_L*LU3A+T?B%x9J at 1gRGHR=gR(o}3mUS2jr$_+hr7?2!RPUFKLhWYOI2R8k3y}+
z8)&q2Sg|!cE2{&*zpqEc;X)L;(c7unM+MFcJY5>JIe_`%E1rj&RXY{iO6P}WHaeQ}
z&V)QC!ZZ;?vKDL=aHgFBV->U2`CcB9O)tJeg`)W3IX5j_w)rkyx8~rKy(<uX{FMrv
zUwp-anvlTx5;^+V$xKb;uDm~{w`OYMKbk-KTYFpa+84!O?2G3d|J4dx9sF?vtWbT9
zorW$^fw9eGl5W&TNn4a+`YNRi4MB3>^6tM=>-4iT4gS2V at 9ubtD^!ypC4VgISREp+
zco~VP9L8&5fiUi-&^9p60NOdc%HwdJEL+%UWZHolI;npAXnPymbrmH?7f5dl9l8r`
zE2OPL*Y3n5jnrMpwPSQ2wZprQ*<1a+?%rxBlINW3yAyJw@(!7Hr~E%-RU=Mf+ at OTc
z=U%IvpppK)k?ws9a8Bpo7Jf}@WoW}kIwVwK4OCJ~;+)I#>cCbW(IxDGj0X;3#NUNF
z#3 at IZ(Of1})aMBs%vZWEcrEcp)(^jpud$Aict~$c00~VUU@{?16LZPLG7Zf57evWL
zvA<%iKC<R&I3wm1 at bnD_^fx at RGvpkOPw2xORKJGZG$xgcU9I9RRjj-l1z3w^chs~`
z=zlE*`mm%*sB&RNep>bZ=7O$4Y-`G%<W<IR%5Ty~Jvsf$ORuUZS0Rg;-JR;YS3kG@
zf-*~1tlARC?7%j^%b0!QRn4W=Fa-xEe!hIiD5dZT`zXaH*usf}uUOvVTf%a8tlQ0Y
zlQgwZWbc=>R$dJUwN at P`$FILp6iLA19u9Nf&B0d`eKkfv`{q-DN+zDVzDXas^`@xh
zk#2EFVK9{Hl>oH475Ej-GPhkK-<oOv!9m1stUIsPfh~53E6kg>8n!t-bKYXKA>V$E
z<7Mx*wG%HiZT}NpHT#%~7MJk&0caiuUE=-v%M*8h%rV5oXJ1Seo`w4IH3_wAH8z<%
zTOLrQ)g%fao5>8F3|S7A80;U?VhJ(hf#(0}=J>XEHhG=Dd|e+IuQSi<m!C-thWQtT
z3Sbx{PCo9R$MnL&OTX120X%Px+Y_--(w>&<#@MWZ at eH>c?M4XYAr9)Xqp!WPM{(C4
z-e^19&7^KXemGWmmLFai43*_^CS}=b#uXNj<j-4#yx at dv&0|`vgU~sTSxvicT<s at t
z4$-=^?Hz+KRkV>6m`zI`?esH1 at xUlrIvUw}?^*o{2CQ5}3mv%yC~uF056{Bwve?MH
z4PLnk^Q<QY>C<W)5R;97tYE*3WBj#T)~G?h at 9JFoUIk`@m31!T2D_lSQRlLF&_}2C
zt#dgz2-Dy*?lpV|pM$S!WEivLt6bKHy$}XMm=ED|2oFM74B<EkpF#L3gv%iefUq3G
zJ_s2Q`Ynb54Gb6{q?=ZJSvQ-eeG>6uLfs0da`F1>r*&{(EuvPg!T4Aj)wl*D2#Awk
z4tmr?K>forW(fDJd7SrQhlSTA;rcixt`2=n-B^RU#Y|CWikO1XfjC*VJ~_mIMhIH?
zy2RV}bKwg!l?Bs+XagY<G-V~p&8}Dp1(PIqv}GxZBc(NbCly9wW6hW8Q28Y0Mw)JN
zSi^#Jm!UnEhzpy8Xe;t2Mg>gML~D-R{7mz3+Tx$~NSNv3v}`!&zerjH#~Vj!uQ}y%
zGF_0CBjM*d at u$X(EhETHnp1PoyIjcv!Ppo5aZ?w9Nfov}MVhP+zR-N-_jkp!5B at H%
zbDFfdQ<zLZCgiW|OXiR-Qvx|;sQuoG4F0;(J(pVwKM*h#&3P{KZ^?+_8~W5j>c8S2
zp at 9)t?6mak+3Ew*@lTGLPPg#a;Du?BxdcIx`p7hx7Q<)m2sgTeuK8ITH at 5st+*B_x
zG0KZEF~!Rg?Q(cU+84gev;OHb_=CS?#PR|3!~cqZH2RlU_Gp?9{kX2q_ZR7S4yFCW
z=sCU5=<{sXv}`LHWRI8xyOh4}vD8iC`K$oVZ;m4Zi@{<|mOfGf=FNrAyt)?OUr-rR
zZ<CumnyI`NcUT~L at gr=7+ZtTRoyHp}<ZOBMaf&Fz#!NS<Qr3(@5t?XFdaYdqG4YwO
z9<tpz=2>KY==QrEZZ4LZoSJVg-H5sfu{l>_Ov at a<7>lk^=1$=s&-LX`&2{8|LsgVv
zp6QyCE+;idT)smXd(fA>_spw}hx+Z7 at R1)TPXW;$nh8o!orRkv76(0J#fVeSe-1nG
z2O&Pdq(`b~x4uSNy5uuB4%Iv+Y9sn*!&=ONG<9AL#Mb<Obf!7}5zI74?!lp}YB8eZ
ztV~cm|9!`{Lrj|HiPB~B<{;0}IYaS;M80iNN!;34tp@%`9OrDc*Tvd at v^!H|2kns2
zP=tJ)=NvzZ?3l)NB^IZ}`%9M28$GAyI^-~WjjR#$&(~9X*J7Te)epGH%$Z<8+k-gk
zi{|9__Y_#}%9)d2;<OZ~>I*<&TAuZp!+dm2c*WVaIp3kph-e8JEn8ocYoZ|ECbXOs
zrqT&5BeN&NxVO-95K3*A0Do!A1i7!+zrT(hELk~k$-#&+v2PDxOP<VIzDsT(CE8d#
z;F?S=)pB43x0{Wj^riEbr;Fz;fvqk~C+2;eE|^!;n48D?D+M{JHWW!#{cFj!WK9BE
zyDn;;`e*A3gXG|NwYXF;I2PHWzuxdT4;$*OWgzo1kM-LFz<GMm{O#F`pEkm8rRdv9
zEhPMSl>t_QJrx~MME+?su!ZK2;fKHGIvOrRDV%DSQfJQv9GBx{m-a1hjItPrW82=@
zqfLiqWmnvRc4fpK!{}2t8nJjF<0*9FvCU!j<>+?Vsk`_awQm9N#EFhKje{5DHzdT5
z{5*|BOBXYhAGbvOUbp3m{*;}ub at a6%;X7ZqqH~WLs6`sgBLsOQPn|X?yT__rej6fL
zH_dl?H(;v5+PAc(v3DzN`jkmo^xgBb45eg4Gtsi*aI`^9ozP&D;-H;+`sPpSyua^0
z7iC?Ny4?V;yng^6AE38jr|2Do%bK0ldD9l&TXa9mTQMKEMc2SI4fZKXZWCBMfYW9!
zv#o&N<x_%kYyy@~%`eA1Iq7zV5uZDnb;!D#zCTc#%P}50JYz6a^Cwe>%Q2PRY!@Dq
zuIuib*BgKPo0?XE$s?O&?S_$=L1<smd}_tP at +=&`wC8Pej1H%v4zjL&D=5v$|J;?Q
zetoG?^IKu<@joAJHuuZZ>6D=YbHmsaUWo;XR*tM?1-E&52kOjgPx{kuO=}ovy+iwU
z_+9J!ce;^x&8^g`N^Fc>T#$Y9R*1JYj8+=c$d><$+FOaa)AhG^bW$Can0Fw;to9rt
zCBQk^m5AlE;iFuC+D03}I+PJu<b%BC>Rrf*4BDhixmRH>^G|k3 at El#1WsVNFGn3_x
zPFI2YwJMb_`thDxKK&~(v-yO>?kOdPnX#1GVRrrSy!A4qA-Gtppt`N76pU3^iGx+p
zh~!C)79->Lw+mE573S$1M|9W?*<}h8Ap$~Sh2y?UfuuC&U*93etU^2SRD}V47e at V7
zg?R^bY*M8{Q<Tl)mqtTrbg9szY1jVb at 1ypomDZ2qqGfw#JLu5XwoawSugAO?v+A~S
zpHivoF_FdRyO>l1d}o19ke^(SrF?+A1lh1-4jqS(IW%%cH~!WrVH!R`e#ynzmj~?X
z)QP>%J!Qp;FO9tV*6 at WKCKX$a`7mb<j8o^@JIU!(Nj2u}i8}FRR$1g5*DCM!+khOH
zu8$7Iz;bkZ-HIjp48t$fiE7M~t|)8gP<N}bP`W|~L#`Vzf0wg1jP(P#n%MPj{P6W$
z9!r&$=W=zfX-Q at N25e07OLR}W1WcTj%yEs#Dj&!JnWx%}j5oJ&M}J=C&ozsa39cl%
z;{`jJaK-SwFE&C3N+<BP5H#^;UJ82kfRoua(>#r(3Zl+$z@$)1aoC6 at u-FpV0lU;T
z$j|gf%-vq!ai%l2Ts_Ly70?b*am=UFsBIfDmzmKt_D;o at g7M8g{I+u!C5|(#cn5}3
z&Ac7<L!eKaI{5p5Bdb-n|Ba*SqWy*BIjhRsY{DprBBJE;0jIwnlnBE(wfebOr!t?u
zP!UhDYOugjk95@&(fD1o)ziDlK*iT!ao8iOt_Jh*nx(SJWART3IIjlPxmwL?eCUdK
z<!VJ$?9!PY>BZkQQ#Wg{1q?Vu`Nyego3IGjGW90RHTd?ty9R*;5oy;h*cf|E&G2ax
z2M1fwi<2JiJL*SxeUB!s6;O~r*gSX_GJ3iywUt3#-h_G65jH8~CM=wVLTNoX&G0=n
zO^f-`>s<VPpz^iY2X^VzJKl(qpERLP<gMC1*h?MOV*WIKA9YiUx$)D{emd0d|G_WV
zW`03AZpJ2&CxNq`5q0$V&3B)x*5eGr)n834N6P?Hm5V`?Qf`>VljpHoU&7|UQA at 9L
z^pWT?7POcr<xZRYuM_+Vq$_ at Q%j};}B5zLcX^V81#5XT7`RKbW<1C-`cJ)XnESSt@
zBF|bQOWxGk&DaEnM|$?rW@=zF7C^fhM0wU?f#I#kWt<fY^pQx29Q4%3qy3;mVYX}C
zuC~9ncUo)-aXsys7d=Y(F+D|Dh^_`&14i0NZLY;!$vI!~tE{0NGLxWZ4qcedN6bTz
z0-4QiqC*%BLQmcr^ikFDoZ%l#`xnrvE=q@`Pf7l3`M##h;@+mz?R^6ehpkPn#Po+7
zH}3ZSgK07Rd)zHY;>c&Ckc$&L(!0s$bN$RZ)NiZ0U&bFWhmQ{Bxvab+BNk;q6{g|;
z^X?<GRj+!M1Vfd*!6SNw$dIBF;LQUWky?q!E)X0!1qbKf!`~0bP2Z2xe}wptwib;z
z*Gw>!+5NKm2c-X@;Rw|S*2t<X^<y0tDTef$In&hl&=$Wc1IuSce(Xl~I`2wXzeX)$
zc>=Y{LR|Nvpv4O9;y^n$5Q4j!G`(lfva2Y`7RV4=aF>A2)J$f-F4I{d$7$#=3|bZ#
zSZsFvSu|^8otJ9Zg84dLy5aZO%z!00I&sqv8F8-#)x8A^@K at tJHe#=*J~1(A6J8+y
zd;sxrM61EQgyqOVU+gK$yB-pH+f3 at Cdd$fJN_Hy09&`0aOUXkQQ!A7uhE?ePakK)`
zHj`(Iyepq{7InU-x<fGc#FzhRzCCO{q|?YuSJ- at Xg|>BlCR6yZa__-V$ak*~5(WV^
zP>=CH+#w^ftjsrzNmlJ#8W`oUNc$sh6B4Y(B=Inw0^@(ML(!QFgu;K0e at dpqxa31v
zK$&^_G%O&si&Nf<RP;x3a&+N~_wNj*O;T4OUQzz_`j61TXZVBEE(e(Qhr|YXzqMvm
z5h`Zms1r2%Ds<;)>rXO{?pj_z at 89Y?)vtp-K00ym_p2SMTz9a`k2V+b at A$9}kqXL;
zjeZt7rnH0~QwC_H*2p&3^6*9%2it1l7Kue08(3%=;_(V at Uf9)JvErE?v9e`!U;j1r
zc`Wyf_=J?niP*djac at Q!(Q(kDFN>=Jxa+PuJob^8t>9)@hSq{y?*nW7?B>`vBZUU(
z7fw1)D!Ty_lCYJMz$k9Msg*BbD=TG0wl!?!OR;l*eO>^J3t)VH&6aQ+<$br{YP;e(
zB(ZuKp}UJa{?~Wh|M4AHKOb#cG<*W}baWHpL?Z*i>K8`r4kNumQ9py?Qy9-C8If{e
zu}ykio!?U`n!-FtXpH3fL>?4qS3QLM<wIe)I8;PitJZ3g!AuYOQiXcX(h at Ye>N`x)
z)y>4>;P=x`0;DCk`~n$eyGGpPu-!0V&_}9LB}C0+39x-6d^}Ve1gd8s5y;!ESkDeN
z5AwSP;d)p;;jlCzqq}l1I<3&v0Sv*}oPy at hs>JnP>V<FFbxApPQD`+L>IMh&sYd^Y
zvrM;=Fws6OmaWlUB|}yf+KSbhKnWT#C!bkpkrzfY;RxD;+S9K_7jCvPtZmldrd7zR
z?Y-2JMvNevIG~rW;8%#Un?FJ+$qx^26g3$an%64Ty~pRQIEgBNB+6}9b#D_#+&kmk
zo$?%=*e<7yMmI?sSVj_e5-MZHNEydnPHWN8*>~@Zmj5JGhnZ$~$J)yhFeK}ythZtz
zbn9k5K}B!HCXd#j{={jwZ)f&O96;z$e)mhNYAfbT{;SEflB&clf4vP%Mnh*$CPxu(
zRxMuGpsqPdyI~ZYxb%&ApwE=YDU;Jb-NeD63VE+nn#Q9Im*bGu*3PN9YG%4=x(?3B
zth;}`J4?hhGvJenChNasI_VGunrC-EX96RQ;eZo`Gg~bnyQ2w5GA2NJ)79Z29zmc#
z-~7WH>30o~j>SI~8KUGdxtxoeJ@~4lOCgJFkmQtkjz&L>)3rMtE7e3G5w!KPN2mPT
zDq_Z!d~d at lKW|a(DWBv;?YbG0;{kPO8)hBiEsrreqaNRS8|zfH`}x1kGsJ{G9ag(G
zC%T}tG;aG?q0SA5V>>Div^!Ccw_)BmY at vPn!oo<3_b-Tbn1>tcWUl(Dl3|v4EQsco
z(*156$2hL3?^kDOGLQG;Skr{ts2NuuQ8PF+qBA*}m`UtSNDFD_9!U?m`yYuY;3x|X
zQ7Dh14cM9L0rMzyz<IcT-B8}N-1a)(MnL)pG|*=E1;3w5XSF<l1L%@EJ}`xruGPpu
z$-d!b&S|J|W{KDK^+}J6==M5o4oVxAqOD?%Dju7p`VtcjB+`<GB;Bv^1Lpo8QG#-_
z*Qu2A)cKuPC4iXU{d$*@?0y~ZJ6u3>9Vof~50Uz-jL6&iKg6v0-A8AmEe>?0Y6ekD
zl5+%2T}|xskS*hAn!{Qp0iI*uby{l>dp6tRrZM!yOp$tM9tb(mz`4Zt<&jD#0GH>n
z{(Py9S6RFri_})M7pW-3v|cOgUz?Cxcnv8rK=!8QHO*sX_v;OV;Y{m|P^@p{6V at A{
z95`D=NaQ=k@~ZJPNL>I at m#yjuw2KQgv0i6Vn=<~Pn*|m-O3$9%w*C%4x>+(9h4|R1
zNQd1}NbG|;SY$I6=DYG+h=y<RfD}6qOshG?zINh|CBFOBfry`5=Xl*rNj;Ct4^umv
zvFRq+`=l9jwo&1X<1X($UkX|6SUKg`g1LvzpN%tY_q}<HBzpM%5pfJzHP?-R@?qIO
zG%u)iv3-;O`s%2{uHBYe(t;8GFW7~AGgX03shj!h&xA>u;e8Z*k5Df|-A%u4>Ilp&
ze!+I(j^r*1F=MP)by#AWmMM83k2l3<0%pjJ6s$Vaj2-xI2g;!pn_y!)*kbms(fk?p
zQ7a}LZLvO$XY1#RTa6fvrO&BPTQOg;M7}*Uuo#o5ti)4SETTvCJH27cagQ!xmC=1f
z(Rky3?@!1axWWxaXXKR&p+H&~x)1qAq&VBLQ1W)Vy3f2<0_tn$&Bz~E7n`Zr<`Qb=
zyzRZQx--70ue6M00hGfgSv-?a$DL)YTW@#q$-btmcYBd6o|mw_4-yb|eA}gss`Wgp
zk#CS(Dm^Z6F8xIvhcsF=!4`OszaOUaQ3e7U^8N~Stauq+;C%Er%zSBis4|NlxuS;p
zV>{-7Y*_#M6nh8eI_m1bpswA_W1^$1+Bj;;4$N;da{qH8i0Ds+BQRte^Z2%-UyS&9
zw{DKZWZ%B6Exgj`AKRuTVvk{jHjmo019K$PvBCvHU2AxLjXNDOqy;q&5 at 1+19rNe5
z*o2+tS1l-is|!2*cB^eUUqge6b-G<)2Fy2~#B3|O<Nj7FB5}Io$>~2d7d(oQ-fp4!
z=)g4d9^e|z{%x-w_ch3XqS(BVxF<;;Iok(ps++_4;g=dK>{R*0G)v@&T$v5T(s^;r
zgwfinvvFSQ!@O+Q=cGl_q)jYZDVOJdFsec9zuDcTq8G~kep7+aI68?*98WPN@?DaY
zelg~H$~Sm|PvnN<a{^9MD|ccOu&=1SJFyL1w7;Pzj_GmQXkps-a31Y at pkjAnKFM~S
zZmkxb+{SSswYX&lJ5$$|M^9F?8<`<{aNpQ<VtV0GBi}!<h4s%?X*EXIqJI8Z`Q=a>
zRA5R!Dlm-AX6PEJle at 5qw77ce@h;4nS*(w&ITyzaOr%Eb#$sI;*hWTh3A%@(K4rXe
z$=>-T-~IWEpqaKbE`NgswRAT&jtoa<rb^E}YqD-O?;|eRV;(fizSc*<cf_?!+0v1l
zqg3UIjFq8N&-vXPd}ltm;I$Q<05<u?{$YEm at C=6|dXh1I at zuPr<F|ZyLY)z__4cAB
zQsPjBV~`*tEoIB4^dntKd-%JN7JDso3dmH*FrasJFuGO#`bt=N{gvu7ce^egxUr8z
z+!flnu$r6DM4A5;vnOG)V?b{Bgi76m5l)vHPydFtCTh<Cpm-u79 at fxl;f-O`hCSFA
zm++rIc?#7pzwnEnER$dmc75_h!aVMxJw>(e!JNsT3INvuSlheVZtCPpXj*gJvW{zt
zvxeiN?9Fke_NPpy;#wVE$wZE~C73Bb6Sp|%r_V_A0c|j^^FRTze4u`4glYXFY3)Z~
znk(WAAvz3)VGk5u1R2097#TavGEmst90r3hJbw5C1`PWQhizbZ!f at CEhCR*s#jjy_
z((rp03=33FeA5Y9>f~N*8mZn`x-i8#!)Zgg$a{LZa`AnQL|=s)tOaz{)k1z{xa}tH
zd>m6b;S*x6;Fw{nEP5cXdG#e;NtaOP>p-5{R#ELOe%+Vq>pT)(O!+$XJDsE}X5elq
zwKz at 04Wfly2&bRk5>J1dRewS6V_P2Etfrq#Z at VNXck<}5IyKR|{?DNj?w;;{zdjtB
z(#8U(3%4te6#=p8N;*qXj&oxxF@~~OJtsx6mL<0Uglf4nGj at xbPnH=O+6q7 at mXEQS
zPKlX{Ux2gXm2nhI;|1#uJe at K_Eq)_M at 5D@Hl3J3o?0X=}`dpG_7<`SC3;fOP&n at kp
z66h3tKUNTx;*T5h3$U7cob~f~NwtcLGelWy(sOjdZXX6o at HAJPe$*+u-5Bik2V`Vd
zN_`BQR1L5 at 8;}omQ3u-5MIGLc#n_02R(6c-I&yQSvm1w^9l$n_Yxx4zWdT_6ZcyS?
z)_Ta=o6S^|feFgzKy3Jd?>|)TVr`I{8B_O%W|y7Qvay0!Y#F~gNx;1GS5RfxIeoC<
z2M^{zkt}<tc8hU^PpoWB1bxPxV0x`8xC8vk#XX;SXciiN#aRbq4U)u!wG9nZt;<zT
zgJVgwR#1|9cqWW^n8I at pC%g~OI2`#toN_q%eK_H;1cl at G;f#Ul`lw~CCwh?*r(B|5
zo#udhLa2f;pqU$4k>&ts&D^z>5b|KW0YW<nbr8BVb7^Ef4DjIxYan!o2^t7JU;_HU
z3c_*-9bq~Np%Y9;aa;IaSCj_$Di1e2KYiijG=DG#rlD^*5K<62G;_a4dATr-{xKTH
zQMwz1s8XX~r644MB`gfp${s?>ROt5ih5EousF3mSBaLAkW~(ayC>*}i7=pubVXYmA
zawM1v4zN`b1XCHUN$|~7Cur#~-Ui=qfiMKZ(Ga2=S$=^K-N=#xVL!T59YRt812bUY
z1%zKBN9+(zhVU4Khb06oFnwc?KI-X)6R%)+Ws{p)JVS?r8C*a(-pe~`$5>n5bms6(
zd5(ao8sdKddnz+G6O=%>5JClnSr95A%!Y6Ugo_|t31OjfwK|8K?L#YvFG}HykKv2l
z;rJ>TFM{#B;rJ&oz7)puhvTc!)=~&nP*U2e7Q)Kj_aicN0_M=u!Sg>ZmK87f_fHKo
zIQc|Pn+Q1>_KrW26e<@aP1Zh2ni`l5(!!oX0ok53E&M+t<=qWvMOpaNsy&gGbK$nf
zO|(*hHX at w7Jowr)0v_li(Mg&6Xh{d1RHZr(VPnX5IvMEiF%1 at r_gP<?@BWGO%HG7j
zbNWII#PEQW-mXZ~V?H`HJry$UKB)P^-vPu2FWkUxYU%%p$LZDrE!`N{A-wxqH5#`O
zW$TKi-s&T;9Pfc>ecAwB9V_e+^Z1LhNX at M^FmPn?-jER7>sGp$*LtK6g(u&dGaZL8
zByP{*uLi9)Mi*HN#;P7I at emzb{B^01fT=vaKf?XM!J|wbFsMe?0oMh%h5T#y1ex5O
zU}qUY`)AY=;8!=lv1zq9<5{FeJe`u at 15pq<N&HpF<rI&6_zq1ZqTOj;TNh~Vqj|wj
zG)(|9k9;=QLe%tn_K3y#^y~1CcMX|+#hI<m%vVT?o8}UOB*Y_KFOJR~R|_Qmmv|4~
zqEkVyTmdt~LtLSZ)<=JF)65|2T*kI5mjdywhmVf#pR8#?Jj&$2W$HoP%Pe(89bG)E
zS8i8D6hYk*No0GcF7M$>CboSJ(e^sml9`&xR9%<QMNN+*N56dK<Wr{hM2=}lE_~mX
zYqd+|pmr@|m*0Lo_`9kOs#!jBzR2nK1aI6XPT at M>qvkxDIPKPQ7G}yn)4avAX^yN|
zb;ay22F-CAI7HX5)O+Ql1Yk`q%g0v%Xr!p=-6tlyUo3tF8yX=jt0GSMZ}07J%d?<=
z8!9XGp?@l(J_(8~Tgn*7IUF$%U|2k3t!p>ADKRvb5?hse$iUF=ak`4EBN1eMA<j#c
zfKP&qFpXyK(*_&TBk?Zv5aMs6jx4+`uZqg2bA*3nAC36!)9uSht{(|Pbbd@>t<hzK
z!5^>8bNP79=%c%eHZHs{Gp_yp`+IpVzg$<xj;J%}Vva~Gdy_H~h_&ac2y{Bpw;hN(
zf9LlG)T^VJtoHpV?f0!)o+xIE#+c6eEdzMnoUuPZB?Bm~;5LdF5 at 3oPz|?9$ILxe2
zaDxK-8vql^)d`AZfKC4ydF&L}s!|1fRhnSZK+c?%&9$}f&`r9?Q5%{l8}l=KpW9a|
zUyj>A9kJLthq$SoVGhUTS79iO$YlC?bGe&z(~7Mg7=2B7Ngt03+8GjXeA}(h4PJst
zsx-dnO{4j$-k~oBC%q5X!=LGZvmSqY9_>9x^jYWum?(}~`G)iMJlc<A^*~HlHK6Hf
z2pxk!iIdntbscBjcFpXx^~=*wzr-8WT&2lGlS-l2WgN19uIUz{Y87wL$LxS8&iTBR
zM~A&rq97+&%rHC$qJdnHG?1f at oCayd<mqT<pS&;?s=c~8 at a;EzUz0CoSW!LW+S6&9
z1}8m|r;W1R_gNPjRKusfP0RIO8ve#=&$0;9-FdYbn)f6vnJjSd_Z<*Njl(#K0c?mT
z`akhB at RL3gzGEmN06q3=wS_7b_krkPi?Y2IAUcSdiQB{|adylMoDsWD?P2bElRH|5
z?W2FcgYVe}FTMzQWE|;PbC@)D?FNTw{;1GR(rMZ6aWjk>SiqhCJ8IDR&TAzjsM$6f
zw>f at O*@|W}AIW*+{#Vq at 8ph2dxtvv6-m5jO3t6ChV-qcX+R8kT;mfy*+^fB8?w$0d
z^HvLMAnv~8IEP$qouXKdvlX#8LymX9Tkmcj8IkwmPE+i!F<1K87`H}h{MVSrXr<A8
z>X#X8zh*n*9fxZ}{SOSwsm!l2E;+@>IAw=hAU`ilrzeEI%U9e)>Kd|45bp at XysG^-
zwqU}VT;HS(`QZ!p2slGW3VwJ at NtpJHtG<T~!@TDhEy#KSD7m$Jy8Y<S9DTmr<-hCI
zqm%M(3E}=Fe<M1i%Kf1)s_mQOU3ol at uH)O at wanGE+WmDbo<`QqpZFj!%6<{rh%;B0
z=W^>pJPpQkv_DP+=$cm%l^1a9f=sZ8rJs-Z(`qKsF=U7Hk>5X5v1hwtmp1cu-9<e;
z{TJLuXg4iDBiYj!d-`(7oX~lnD&%60qOEZh!puN{I(L)UP!iGxIMA^6fNV#I+&Co+
z%tMoPh)LrX1MzC9s(l(~PAJ}}XObPN%OX2bc719JXB>tuqwtLc399xwu(QWdLLEAS
zd6D6T^~lc$h(YV8i+DskYNRH1Ph-kLFDyiWk5&@urH`E!yZhI-Fz&`_qQ1-1MC at 9q
z5eIVZxTiQS*vqJi$%{&s*pzzRWGDsdg-VV(%Zp*Z_tcKRUPoHp*rKYh!<#PphR>|W
zeS{1wRCP at R9_dQCrpYV@Cj%QQZ-ExNjH4LJwM^PT&1u72$hvI-54vuz?XVxM<(Mc)
zHj-|~wvmJ#IUfWz_n&p2>V06Xz&gj{Mv6E9<oKI!r|0gA^o$LX$;1mHC2vA^^a>q}
z0rFt`wXJcolKWxvwyES2Ox0=RzX`q9E9^0jc at ygK=YtS?jc|jJ^(J(o!7Id`)CjAM
zOqjtSOfy=)2_+1w9-|F}e+s!qrf at xOqmjZMI%11$&IFk%0FAFREj<6U7HIRdTl9`u
z*j32eaaPDBfC?BHpK!yzYC3Mjgf<dd?2dLO9IFBR$)bwVhi6V at o!h8UhWKJD8nfG#
z*<eu)u%yivk)C at lGW<FjAPZFI8?9qo+pSaTZ84N#w#c0JjU(BfUptPrxPH1x!BW)}
z&?msbTSYBpD(ZR6<2V2QuIbHew-H6`y_S at 2aYLJ9w)UrdX5KvkwJ%~twmuEAJUq#J
zQbi8g#$n0Hv9vTL&M@%8 at zQdajc8w)oE(p*LAGRgT!&j7;BT_7&%pZXB|wu1d!vns
z8Tv3nr2*hho^3@*lsanRH>;k7)Z&CtM at -`TBvmM*)T>oWVv>qmhyS#D!AA7Gss;^E
z2_dXN7fhi!#M6J1<^soIsWWkUhWA=chz=huKR`?xSi~tBC^!-!*9*YFayLxKZNZWr
zR#Hh1^Y+3#R)*KGkQ;l4tee(gBgBl>hggXowyGWpcvKbk<mR2cPf@<KNZjI)?f_PO
z?~VAZkbUU7p?$V_P=;HqhJ^U<V^}~ctVmU1sxNrFuy0LCHjpJg at dfkiWt<E$x?y=-
z-<rw0i0GewRts_lqQRmdAWNRGQxnqz=xFA#sD$G*Stp<?8U&n|_e>j9tPCew?WiT+
zV0`k3;RxGG#2sY?ITeofz%*?!h=sLKTwk3=M>0WZR|n=DLNw3wC?(?X;F9gr3mZ7#
znj9=pr51pso?OQysgd^kbg*C`r$KUQ7L0eYEn%6K3J2h6x+52 at h24|j)%Q(42{%<|
zsWbf{!UlGd265{`O{V;uFR^lApEQIEMy>LhyWda8qX~*>^JCgN3E_|5*gU=vExX#v
z at n_6-ssCxLy*g$&I*z-0_A*#O-c<=em$#|bXJF6J1#WO43)c(Sisk}H9cs|$C}Nnm
zfO$0zNQWnkb{e8n+Opvgr*j%rv-m!-6%O?|R5B>}LjZ1bcKoz=u{f(cD_WM*C(dTf
z4Lfpoj5-$m^bW(mB5e-3XDML}<Z`jg;5(rkiq{0FWN~8?>?F)fyxsps616(}Km59T
z%oIamM)&LFmpo?_mUjmM<<&F}si+UK54nmnj^A8xsOD-A?PwbE{Qh<|lKT)Hj7M_v
zL;sEL_JL7g9{Lb@%}e$H<%mW_O+#_=b9}$4JpwS&T0c1WvbON6vN|rEw>m8$;MlP;
zyvlX-{b8>p_L!QUr&DuaxdcS5)ur^`Xa5BQwg|`iDgjgPZCjzxfoUJ{)Xzg+3_gbN
zSsTym#v+}Ab^GdavETs_9j6EOQZ4|>`47Y&d8_ZouA|wSPQ6>`lTG}x>FkZOXLs$V
z?w-KLOn~MP8t4M1qOx_=j4P1@^0OsJ=hx2#f{fqe8hn?6Oi`PRPzLGKDF1J<RDtq=
zJ`LuQ7-pGs=^w=H{;#k4{>N8`zQsNykEHB~z(P1UYqM`}iqr=jsak;!a^kFR(G-K!
z8|Z?cR~17|-(vX+^>Wym5|WGiXmi9&RRdHZw!;oYXYZB*N!ZVE`$LBFLAfSFC)Sif
zeaZ6hf8;G=;jj!Dss<`!U@=FQt at sw5y~AnfhO>P<N_i6VBUzKGXUv4-o%`t+#JJvU
z9{jU;WrG;4)%~q9%rtG1tsTp$yx)KXnVVs`3nR8o%@o$xfxUP7qUN8=+ly`scKQl3
zId1NhWZzv4W=$f<vp*I2HIM*^ROYiRgBYsL3?ZWqxLv~;P4hGnk97HC?5*7p=C at 1z
zH=}E?^TyphO$D67R*{<*mcemXF4n~CsY=mVVHLe_Jd{~sCq8FZEw7JbS}ovth4cWd
zNS5o^TRZKKx%GB{Pb>lQ__3VhH&3 at h6U!UDGjR4s-3{Mg>|9GYD+{(q{N}Vh@{@&h
zj<V=bNvWO~s{m{^*8z-C&FOx<;T>*q{AN*8NIxL)A3bavzPo&)Lppz)g>(TsyfF3T
zs5SL&curgHm}l3`E7CbSj4Az10_yy<73&*Ljv710f9T$avtB?&k-5014nO?B$SjSS
zyiv9Olx5MiaF%a9#&o7mT9DjAn$)Qdr%r`iTuN6DhVTv>g*uM^9R}^t?r3_HvV`3J
z$ydwgNLDC8lwu!?$T`WO<qRF5=M4GNi8h>>b8bJqriVqKFwf0s&Ac`e#=Xg84riA4
z-{m6bczVs}0_L6Yq<VhZ7v=I+2 at zjWMQG`9_ at a_imW5ZLvAh1n4XD$^#`NHHNGh at K
zkM9b_AU+J8<+4m-!Gr`kT|gfwFvLJBM3&ZrTS1uYf1jYMX0`-PyI<fUy~CawOIfg>
zeHI}9g33LOdE<|$n5Q_W`3hBc8VhvamAmQVpKP>c!j_4klxr4;@n0tsaKQNYe at Wdx
zjRkNt(NLOkG0Zm#{_zUmi*jwpc>jDGYkC{qj*TbnKlqGh&>A5_-Clg}&57RFV-^C}
z9tlxYf6|)IokT^xtJFxtaT|H-YKKbY)@bSVLcX_d?bJA(7)aeDxU at -vNnIsi#s{{Q
z-HfDi31rkA!4PL3i=9;^0;cM at 9mj^sbVeszZ+P at 1X%c<DNogAe{@PqX7uLFvSf?Xy
zvz*V at -SkV^hHeR7yFwG8xu=P|b1vMnA|q+7P&Wz8h#OsB at yDi!oLU;g^b<X9)2T3y
zmpB&Cb3(vqK9^4||4&6-D_8t)6`cq|n<ZcxgG0E5*lN2Ox#q$oGfz2}#w at ErW3#Z0
z!&WXmJZJWsI&dZ>+*<y*2U9g5X7cq`6>!+Qg?T1yQ#~)B7p8^VYR at HLH4Y<rBmiQH
zaHfxP(Zu+C12rLWip~<S78Q=AE}y~NNjNlhqCi0u<gIpUL2wkkSh<{*5Ajlk at M5^%
z$U?U|C^kU;QxXW4>5MkNx&i~_QEr5e4$!|Ly)1<0ai&rXvY}9z>1G4!xxu(Qgbffn
zKC=KR$~X|E9CMUh9#^D>`7@=ioKUx`;dY&(5FtnCTnD-~gj-bc<MD-IaI8)bXIW1`
zLVpQ}rPMrY9Wt*;ZBaw6W#7&d2190Ez?_%RqIjgAPwoF6^CVY2!`=LB-|+6f)~4qS
zSvwD_a8QE_dtLc2#Kf#>_-m`PG~yk`6IbM9IR1!R-~bsQu{+9V{~``?S7n13+eC1P
za<T4e0<Ts#4))G%HnIz6wKBFf8!c|>WI*w#)ynlt0Y~+19nk9dyLWb8I)C?6hDQ?V
zX<IR{vn<kc)@ilxe(^NZ+|yt9gxRTeK$Jh8h9sPA_12ot%je|xJ56L(+>2d0lSnWA
z?lYqeT7eLZCZg?d+D0TTCSEaZjma!YH6JZUGkT)z>L}AHM;m4{yxI|hmXJxV8#<p7
zMTWF7g<LKcLe4-+Z6>E=snOfKkuDRg_L2CHOa(sDS({dvmlxBL5lqYhntv9QSV*gg
zi2<7T<+u%RXQhk5i+f_uP;V<unlYX&-{r?v)Q01+)C?Xhhm10PoO8DvR)jO?W4qzU
z+?r@}ruPMKR&!w?S*^5+KMu#pbD)aU!~Y;TeC?5zsgo*aXYjpa6oA$w-M(PClXa#1
ziojKIo$qByf1k#Y*FipYYkS1|^nSiq3lpW2rVRG*<2mmWU-G?vb4H0UT>F1Wd-J%a
zj;;ZC?j?bn5Fj9tfIz|$7DbILf|QuBg$pk1xKfZ+BPcGxVvUI!78Qyh;i_eE*H&w7
zAJJ-EsCB`uSSpIvJfha3L93!*1krCML2IA)dEejn{k}i$Z)VPHXU?3NIcH|>8J at eW
znl&6%4A)0 at SvD_Fo<i6~#sk;Tk)ZrSQUfDW^9n at Y_Mt<h33-*!N4v3qz at rz?{s{+G
ziVZN%)=n?4KaO|X3PHLccI`Q3w(c{ul?@B at m&p=s<?TZeL-2rhA|Szt7^`rWE)s at C
zAE at wx7x+u&!N^YotV#{xVqPF5X+*$xKrkb6o=wT0x at 3<W5FzVf1$q<$Qo2gTm`%+C
zs2h-(9tfMPl&(?H?345?Lq-kY(=|VV*;G9L6&z9V5o~of2bjV%I22JF1KbH)$ItX8
zXvhaxgAkz`Kce#*Eg^M9%whYTuDeLy3TD>M1oLl_<HxSeEQ=s{BIfK~rS0tY4w`$y
zJAgY?t~)2weJ1k}vQoWcOYFal9|2x|BLwxgqE5_gKfhsSuUQ59-#}3#v6WAw{yK*_
z$Gj;M-0I?VV;9{ezt3++2T^(~R$x_n!PeM{3pMe4#i$Y6*RoF!IM7(@wHA8^WLG8Z
zz6JLpA>vLBXU!@cUPT?1okZo0usT9|R=jj(pd(?2x92xe5*_BK?3q$M_c*Mm=<Jr`
z|5?$w9M~1 at z_49x*hZb*`Fe4tiQK at f9tILmm-T$atk)p3YCmGuE<?8rF*?6#@siaN
zBctm+^Y{~_!?Kn9XpSH5dFZ1d^9w9!w{gh8L|KrDX#W at yrZCNNV<kvoLX3&JFjb(^
zMD_w4F{hEqj1|dzSYilAUCD%9iAQBSRKc!wudtJND=4M6May*6K$f+{9Cxx>AD!$?
z{LcbNFw`QNyonbGE44MW`m6-VHwta#M+!jgSKh4unGa6?l+d<N2`8{?hBQz{VS^=<
zw^MX#2<s@<?wMR!KQxSnIMYCONLpA4U)BRF{FN7YAxY at 2t^RLAON2*02OilRTc*da
z|BO>qkzme*{TI+(Fj$r_;kz(Cbp4Tgxx?fc^NhDJbR=G`ga!CQtl8@{O3sDb-t2P%
zT{3D(LIBh_dcpV);}s6eH)Z`D>IVm<21>vo=aGws7=fk4$EwAd7Z;S|9F%5h;>=4P
zK;Fm&By51c{JaQ*q_^zLJ{Z|jR}B_;gs at tm9J&^+{%+Z^%3|YqC-}c)d>GHPLO-=+
z%ZedJSq75eu(8#C(cc06vkiV#e+Oi$h=3--Uy$SoU~9%~n~-+}#%G}xCwv#fhyJ-k
z!`GJi(%UjRRgaPXL1m9zCCD?7dE4Kd3b`~Ca_f-~T%HS-{)5YRK?c0?fy-&~9lSuO
zdPEM*qPFt;Jh#a9GTTov<1`#E0%}>c#P*KMhj1|p^Q>W5X#l7U2^v2nP#F^3!OTl9
z7&Fuu!qy)O&=}H>`;guc-}s?I6^f_b8E0%|d;r)f>&Y2j9+zWUew9glK>Q{zQ2G9*
z!3W@%MoKKs#3y}#{cePz3kDxxM?a*C`v7|lVTSw6TVI#Hhy4f{nB!;TdBaG(w9#YN
z%!q_td`FiIsj4&rUB<3C_h(%Ml4cEwhZ_?&dZWZKI2z-I!@;3_sP}tQ{sqL6Y|VCn
z_NczLP+l403Gaor^KdlOitOfri|*j}`N_s({K~g+R<7T^-JEf=@?vv^53MJh!Y at O4
zu1gbRdkJ6tTvU-W{KB*ThvO%2l5}QnjTT!}gZ`|Ua|0fR&}QG5$Md at 3EO7s7b&&NI
zn~Gc-``Iu}zg6IkFw?;AJ^hjnWxCqfjWMmbp39UTF;@vRAgH1#mwE1cbG1yUH at C6-
z#>2gd=9VzRQxD^OE1<mpyM_(YwwhComobL2^F)rvg at U;)r!%+4JDAWmW!sSeN?Fa(
zJRyxyCrS5pw$s<AoKjEC!hc0bM9sZun(NAbiI6bm1k%&4S<s#Qedu}DM$qGu=Gr^?
z8^0Mz*%m8 at e`bMEf5V*om*GzS4E*o#T;)fR|KGof)O`GN>T}$Z@@7u66EL&v#xc|F
z{;xcFOq<&ACW=~PIL}TwfoWxz#$?*@O+Fp&X5v at NG+78EC)a*rf)db&k2jw_{67nc
zwH#r91zF0bO|<mCo^Dof-Q5hujW}dXlXWP-`u{@Q=DLlU=XIeO-SN7wnb~z)Gnea3
z_7X#8OKbK}q7hW+FPN?JcRfo={Y)#OGrySyHLJuXHxu7*$GKuE*P->4cB;s>nppNW
z1m9V=@mb>@Yki~b^})A&$L`4v_FLf`2^MEd2WIVZ+WY`#F8UnXow-5n$iI*_y*(ai
z$FWpL)(XMZM>n_V$0lv92QH6Gx(>|~RS^udA3|OG1><wo#dUjS_34Cy9R~t5mcwOZ
zES+P|=V~ZcE9RvvdT{P!PmC%G9a62lPlCR1l|&(FblVpYw!SA^715KSn!`wKbPLni
zl-v!UNjA;Z(?uMT-{-1I*Hs(RN40WayhR5G3JHlp7{8CE3KiKlx<Q!1z{<+EBwrCh
zVnq*DHyB{H)!@x5wM6z#I67pjLs*%jnxs|6=NXltGlWIgl(rY-uP|H%!{-SL-z6Zj
zOC}mYb+$qYWaK4nc-?`u66rP->o~t{V6BNRLe_?U05UPW<W}^+qroay{8VJiw?c=z
z$ti?Sau^{HRfRCc8DHdxG^Dsspvn<BRTIw!a?LxBdVpyf?yxZdV}O-9Q$64q$Cqai
z^wv$|o{HGWPZF)0zI#$(H-_j5->VG!oJKNaE33hA4k7SmPw+zRdGT1A0Q=Yr^)cED
zWmKSj)QO*Wo^o)M-336tifaYcEK41YMQAvyOGPyhxjP}=m76l(RJ23dWY?Y&Y4}!s
zpBzkyeb7}?xI#63#w`-)q$Ch$Y??YVX!e%Ex^0o)BrD@>w%<CxwzcqY%x8EI%vSE*
z$D%3-yXnDBshwqt9zKjIt_D8N$R&xQ?39X%WD<+{wHiD-r(0S?^Rp>@2|y}8R&8^O
zds;W`05c&WhCj3RTk{b&{<1`O>;Lj2=t!+vunu-~q%H~}-Ip8H9Ui3d1HHCGq+Mww
zZBcR0aS;cRoNtw8+d?U>hQJQ2CQi*H=vKLkw?XM<Suxj)NB`R2v|(<KZhp~u%7d0t
z1G`RRVz8_pjIlS#Ia-(Qnif9Q`76d%iZeILVDl`xH0?CR(^)r}?!rWVMEvB{`?EQg
zpty^zR2&zw3+L&=X8 at ktgd`U$MJY+-<f#_GZz25h&_&?~0|#dzcWe6zn#h{%_3zB`
z7=;O8(K_Az4Rl8fs(={9&%8m5R+y1Qmu3O$@@$pzMf{VV8VFz&3Gj-(2vxKQ(nXQs
zK at -;eAGEWBGz%F+6Kz0!K{6nj-0Qv~2?Mz at jO6O#TpWfNrR8Rh>D;)sSB#4!fquC7
zBFDf;Zita&XO%op5j&kNzfRDP&U{)~xf2$e;K9zDhghEE=PUs$L{%`p3T+j?P#WT^
zQKg3PvVG%f3*ZP2?cy|X4gO4n-~4?!L+LVQmj!RT7&o4!<(^W at +MtBVe+N3b`y&(+
zAcpEnZ35bZPTmGgWaSf{2347UhQfEYY7 at NnIWyV>m1QVgI)87(zHz#U+(g+=l{={e
zzhOM(*+%Qj?B;=J%7w4EZfS;ku#Gofht}c6OH>KcCKWBFN{@-ECoxxY$dTC^iIawN
z`mlkIek24lZi#_7vt^3x^8DMVXx$;eSKJT=o!%|Do~8QjS(DDswXfX<_}BQk7ABE|
zbO(l`Hz*wcrDr(%%>xczDn3x0aJF>zOQm%+SnJc^6x;Jcw^(+N%DIM(RwlS_+xTor
zwJxG=ifut*k!^u|JYi9}sqsp*7Iu at Zh*tMho3K`+{9d+=Y2mxrUQ!dTi<o~So at d@B
zWWU)F&wrW1935%BhCP?wAPRnxv_-o)|KZ%}vR_Clp1t%>A^UihlS_9}qct*0#?cU#
z`^I%IjQq}g>|B*Iy>5!KJD<}8EGu`$vjeUOg at d#2Wz0|Fd3r2aFL at 7#N}up;-MtLP
z$Y+~nu+n#$bavqaZ9?!9v$e9@>7Z}Hhu-m#UEX)Qa_7A9S^hER;!Jfe?5)2TBMS_@
z!`TMR5DDw1unP*)v<WwF5%eBqc)!Fgl=Dqro{qe&mIMu!5Q4sW>WF<39Z7E|tQIG%
znv}=~xZ)~dB0AgejSATEvb;=?EClj1dImZb_6Py=bE9<0b*b6}=?Mv=awp*Rg&&BJ
z7ZP5<kpz7(p>1Guz7a`?#4u#Y4meq at Ra_+*%7ot1RkHHePdxTE3x^VnKv=`DD+=cf
z0|m13qmN;jKNN2V)1$BrI#J4-W4owu<<!MZ0VLpXzzE)pbV7c(n&8`5RiFxt<xfE6
z1C$@FB(MxN8hInH5K1~)YBufACVZHg_GrT at cd{AzP!jC4S4q2MA)`N#jfYx+Dz#aZ
zTIR0LvH{_;@}ehG-B(>5LXMBpCRVv&NiJaI9~*5J6-FCdp0o{&LJeVz+;DVYG}=I}
z22FnmwF&MN0D{fGJqwrs8E<-HD;$b%LLhcuA48MgS_fpc2nyn6<yUh at be^Cl-oTtV
z3Ft!28m-poHfs}D#dT|`f*WwY9CrP+OZF}tdw;IEADMxgqYljpS7p4O-S$F#Q=6dR
zplcXCODcDw>lcBIZr-yS8gC`l6c&t$_g^|WDL;iI&RM7=t(*8y>N%?qEvzD;epn4w
zd+JA^sco5`Rk6o$z(Q;L?B9>mM0B|PO#kDtsF+l`C{zR!PTJ`)$t3^$U!|)o- at I${
z6<9lYK0t|_uZZBHiKc{Guk5$@FV!Z@{Eo3HrG~Ib4qB~-NX<uA>1A!ew$DT*MejqO
z+^J1~qZjkoD={77h)g3#NN7XhEZAZ8`F5$^Q~yw^dJH|$1e{>R^bbAP{WqasnxogV
z(zs<*3!k%+;7mOOI-#<eqRR{6jG%W=ikCv3qA!G_I|+D=qD!?U^6uE^m&ZrgRF8NT
zIg{{6lmlEHyK7Un900U?+ac=?3xI?50ymF;fp?QdM9(1kJ^9+niM^w+=neqxbVfC`
zu=!SZ?wqfo+;3uW%q~rUI}`#mIyJTOCdSK*Aia8Wby3x~M!vAx({MSmkl at W|@bT>8
z6pGNip~K4n+Ju2FUqlBy#fcE_EhdH$gjb$_1mr0MFS-s`4OTCIRML5H!MSEt?%MVz
zJY;uU@*`a1HaY%Pdke~=H<ZL^8 at s9ON;SkV3$EwZq=hUZm)SS1ZGh#dP2l;jFP$;k
zkfD{7?T=H$i7dCxZhOVDStZH$7t at VTi0;orXRP%KokGUz_xd>98mr9aUw%6EJFH{8
zxNdohs0x)28wcyE+*zQsSJccK|HLkyA8>`_dxV)wx-`G at +#W at pke#dsM~k!x<&)m7
zK%2tqfXVx#DaiEkBta{#TVJ^|$24-2*wsH*y`*^!9IYEs*qRm+A#17JDRw;r)1$aM
z+dhud{WES));}^{fHNiT=vGa<k!cey=-~GVeh=XXr~C_l!S4zDpjap3#Il32ed_~G
z0HS(}&t2I>Pj60DF7x at WW1Z*bB9m4(SL{VUM;&RvPE=8{-!WHw at H^^@-?6dE>^C&U
zMxSwg9@^y9IS1nv?bTqSTOwoWn1eB08jf{PI!?~;s0OEfA&h at 8MV$G0l!q-A7(E(F
zI=!SjlwM+ at wL-?=4ki&<1x&iE^RDWCm~4>*1&Y6Bs-^LQt?C)3ypTROX}bKE6SR}_
z<1!C_pU#rQK_*JpGpUf<7~8Vw!8dh~S6Jxm&?JPKc^h*x5xTTcs at s?Z|Kv4w`ZgxE
zSiav)x8BoRtl96OTTfYPF*jw=!5E|#+`SFPDnvls_Z-Cby#i^9kSAiuIiSAy;H-1K
z>SZVmOJt;zjz;otY*&-#rf9=wupyTTwBcT54Or~<&AWbcjc9P9*sO$1uuxGY1WSLz
z)6%Z^75_*hy%>DS7P*x0(m0(yj2bU3Rhgl!hKTrVa9mao<-7Sq^4&GPsS&Q)Z-5WU
zeg5`yT4oRi*^jSS`{Z{d%e_59jD`{fCeHjhG1eX5y)=Q~@`Pc<+y!WAoorrd7q&~$
zj4p(r at RSiqH$h at A_g8~{qnv{Zd0hz$L^_G4Vg!2Lr0(m98SXR3(3Ez7zqH667un`A
zWL6}gWnbG@@p7G8ymIv+g<U-R)px$^H(PRpTfdEvTsPs3RM=rWML_Pz-&^B^`3&u+
zx?>(-CfB9;&I5Jiur at s(F0lwH26B&=Egw)^RT37c$0n2!7JZTG(AJLak1Kb!c+v8&
z?K_rA2-f?<c}!DbkI1$(hv4=_s-!cBCk82Y<vVQbi8 at 3DLU0GHE>Uz;gZ5Y21jqZi
z=4W5-I-l6&itleH!7qPk6Jm=emBMoQ594ypFOIX+w?Ei?!2d<cGDR*2-Kq$ZFPN_l
zO_aNWYKKujXZMnHWG8RmxT%W^dvp;P6ED{tD&se%$1S<n at u2U=R>)>h=)Y at za6xQ)
zE`{bm#Wgy65H3_(N)ZAi>q#={CC;FxRqll80<{U$hC7%et-8VI1$FQa#!-%Jj)$wU
z;Wq27_1dr<cgxkv+k$`hMWY*M=q^Szc<K&m0>eC^O-a!%kGhI~883j?*!^PKHworR
ztR<nw38nb?SVi^xV6XNDGh|O}Fr;lDCcqG;zYn|BTR-DLu~1R(VX>lyH%^JJcDelV
zZUBAB8UWDOGiT;!TKl$Fmtsg at l{>N9e1SJ`z1VuOvyo&7>+u!Vx3*VQCKzuoDE3b(
zhJsO&I)Jr*;RE}Utfg^;9IfITpoCwMiwQ5Q!=O-}k>(y&?CS at V+y&LZ0dMi at aZzQ!
zu!T}_n;5xiF<M4Xrc+ltF|QPwMDPQH%YQh_QOHp4GcO$*$}6Tt368lptrlLo&DYl-
zQ%P<7#`^oZ5uqN|)3+-)ypgl6K_(pM%YJ#Gdl`B}=kl}&$+EM&kv2}&oZqkInwxz|
zO}&c^$30u9oV!p|Pa-UI7rHNtti=p*=E23^A<@EdX1dmX&gC7ey2E34xRpTOq$AC_
zOB3jl5MW+>spHN-wAQc*kgm904LbgUg2L5m&_WvXRa_)N>vY~_!{z`SSc6U^K!OAd
zuI)%u7iX^e3{Ff?#9uy5DbO^7qFtY#5>*fafhHaLPkh at GrjnxRCCnNX9LKM}Ra$I(
zAGxVp)&P}LsNi;<D{Xk%j>bYDKlbc-HM-kw{zg}{Fxe=zgvm*ZE*Z~p7OW6mu`yn)
z8ABIUHQJ&udLflo>^SagxTu#w&tB2mGG;cHuy1 at 2RddjR-<-4=m>lm|-rtv{jrd%c
z$2`8_*sa!%eUGU__b^vt`8@?3q$^KT|GtMg)5MwUQfu#HUbf=QWpecRYulWIQ_tzt
z%V0R43b~Jsw${S&&CYySE>g{@+gA<F^Qh(bF$ZN)WX4I6#&|Vfah&vqs3}p?zoZ*>
zAiR;Vwfpk<Mzq<m1}+(^+}@qrj&1;*cq<HA1eWKs8;4h(1&qR2ZG`*;z~r{TW1r{l
zC?v3%6tY6lD<J6Q+V_I)k1ui^QUXkVyspuPK}kmGq2E3`GxhAvTF#5^up)Yl*S}q7
z78J;~hV_T-4Lh2<H5|I(=yV&-9ROWZdipP(r_X#W9EsASHWU1lpBlDdSowY)?skIk
zO>>JI{Bw5M9Qd-{aM^@0ixX^poa at rUh0@K|&)QzBmQBq3>Bfk1v_9t-DjVr);pF`l
z<6&#Na>mE5x1O+!FC_Z9w8jdy>CI4Q{e3q|PiLG}es#jDZD8G(2Ae$6o#BE_XF^!}
z3j^2(6r4nBxm#D5XtOh>@a4AzaQEKw7zQLopCku0IylzKWt+_|w7=7Nfd&%;MU;pn
ztB8 at 6Y8&v<8VKdZe!`_qe!fjmyL>s^Pl&AFzLX1rHX5qzv!Fi(fWnBbu;@AxWN*$H
zW)m1&3e|g#$eN(rn8mH`o1^<Yrk&>%?IdC>oF=AQWm%O}(nSO*`(|lhsES1OEd45k
zxUn at ZGtGZ`t at 6&<@)}=QiIbPzplIVpz0<SunsF#>X*Z~dcOD}>rA9Zq9LydOF1OAm
z)j7Q=uUUkwMm)6v^?#OcD1iPG?W~$-&|SKT#Kd(ElRx at Dro+FGSn_^5JX=!&PG at e7
z(NT at C+!ETvOiY;w3wGObw!BUV3lLo{uUP`!UZD-p>dQCyAw;a~22Vi5PTXYG^q at +%
zkw9k-W#y&Ng|aeo&viptnL>UxSkZof1~p#m{%hr%-lF_YcFz at eoO#kyH(*0B%aN3-
zU`ua#T^vIEmXcNDh6)vQhc``c8<6P`W=xdOUwX=%);e7>0R1BAsl5m$3=Iyeb9l_E
zdwQ3(DHY|bCNZn7qB{Z&Y;ib0eEn6d!(R%PAhQSSliWJ8MPGoToq5bbbt4|_C~=e@
zlF$@QjrgDj`d>l6@^B-5!ItUTIkJ24=i^A)(V5Fm!HNj!saV<!LFXyyseFV)zx2dZ
z=r-%oJ<gtt-IK+cTMBiF at o<rd!E}knEx9Ec2Mf5ovlrK}%qN`Jo6I<a-m3ZL+gZuS
z>1oC0m7T8Li*<?CUW<m0uwlUwb#h^MxH3rNhl|>~4xzhRMYj53vov}$W5&@9?=x1U
zL at _!iIM8NsSlA9^wiM0 at Ki7?+U%193X5F?7f{FtNZ5~3^n=_*kZ64YH#h>rXY#g%!
zQg-iobisKH%|C~>By}`j?U9Ln_Ou-+f!vO3TF>7tL4wKR8uY|5i=|6s(R7J%U@*&8
zjsC64pHEvO=Oc>=zFzsGXbmqk==2#~)Q6-jhW?s7rVfgDat`di`VzLZ(F`$HnzY^&
zxigGqOJH4%V`7dpj+xaC{Y{NybjOq)VD=o{%s-%l)>}G>_FxNi&%(K2 at Bj^QZlo>Y
zx;Rm__ at T4iV13m_z35F+iG270nr|kUo!fV;Iezr&LtUCff$AxOO^M%GVJLm%IKuy(
zt*32(h8GA&j<caM|Hd(qD+zv2c)z4irVW>sqD_xvnmjbc8|#ZvM^v&4{N*VgG_j^}
z%&>Q_U1n({pitJFqK<<4bgvn9xdU9aw;wu(=X9*$ojqS;Jd3AlA7P`E#UMy=s+u^J
zSq5y*Ml~gVH<X1f1j}SjgzTg<4XJV!H3SwQAS|aQ#q*c`DfBv2mB5wTnfpX%?Nw(t
zF-4B0dQ8+7FHG at Nho-Vt*NQVLk}7J-fNy}c(^yCY`9f!l><1DP>qp9(x;1)CVb8Wb
zEUP7x@*V8nz)057j{euO7<9YqUDSXJ9L2Aab~}x*du_;g7G}JwsHv-h85_O`nwSX`
zzuU$GbT{Av_w;~F at 5GXwY+xvA^oGNKDny3~lzeq){k2S87v~~C=l(%eARbjxSKdAa
zQM=5kc|e?5G`%7MZG5+fE2wJ1bA0TYiXOIYt{s~eX~%Y-I=?oyb47KEv}u)vjo&xy
z#DHiFJz)<=xJ6Oq@`mWymO*Y$%4>oH*#2|u_Cr|k{`^{!7d at NwQkG{U6Qlpyd)-DG
z_Fg{xaXm3oouv(nPSTqzYK8V_ugPnYo_=}y#SU~{_W3v=Lve&08GIJ-`sN>qjA?ga
zC~kxhvVXzPPj5Z6vxoU6*h}WFYOshF0FD15)sl>GRV)-xygW@${j{Cnw_Hz;QyP9#
zmlr!Y2ZRuWxXw=Md4g>w+90NXO}4$;<!H6~0w<T*k!dt!)|ApVP;(Idg{S*G1dck*
z=Xwj-0zW(;iJ%|da;Ne*S803=efyixrV7B2Uk9VPg+eoJ%U3M{^?=y0YIk at p*X40!
zJD_K8#_>jha%>6uL2d*qv*ZE?3zS#6OpqTEGPG5KOE<S22<N~|f7y+(j${L2U4`-I
z^NMS}Y(<UGyD;`Z_%^uW+U^q(`N;&1wwZOALWcZE9J|oNuu}(uBMD{_7nq{I;tanO
zT5tol$31LW>QAr(0Kt_ikBlF;?T7x~r5XwTp8Ubz=}oNm6knEVFy?z$N1!&Wq7X0?
z#eVoQWo?19Da>5jwAE62WR0Uox{55KXMAC9A3_w-w-34ZzF2qKXnnsjD#jN2CHGhH
z4j at YqJtnGfS2vLESUi)hygO%VguLCC-4|ZFFuN(n)au!t%Gs2k?=)`$t9(oH_6 at 2f
zid6*G`AL#QQ8km{7^bH=N+1R5+3dFq%gM65>YPh9WzQ<#t|Szj{lLp*skHgi{6H^y
z?tMd!X}qabiJ~xHeDv0`{S|?6z<*<ql|X|FV*Lr?=&e)A6BWaA>>};;rby^i$@TaN
zbOEi>_(*Q%PTp!kQ>d$_hA<U0;R5L5QcA@%hZ3C2L7sZpjn{mLBtSn<48P62n%_<k
zBDS8P;E-NLXM4Uu|AvLRWPTwJ0i$&mlY{<f`0bfI8_xEl9c)sj&$^m#n?w?jqfOnL
zXu&oe+^gs*%+7DBiIZB=Yd8!So&CN7y}-cve$3*M{m0&z at d+Y-8f2`1R8|8NT!YT!
zj_UjtE(uVptgv0gFd#objrj|6z&pRCV*bKh#u}_Fi!^#V;>;cC=<iE$bF}-xZS_Ev
z?is-5A_ESE6Qz<A&*@=@*HT+xW`{8@^rWm^O!v<DK?xllodcJXW4tao59<j&Mg0Qf
zY3gFfuc*g=VfM-!=hu5~V_PcB42Md@@$+bSsG^G^eJh~Y2jrXLg^MD6gHAlK_U~h>
zLzOCGG<u%pxPzFBPJE)qMcevMQ!NqE-!hac2uHSRDkie_4H}tepPM#X<S9P0op5Ox
zY_YzqiLSlW^Z>B5n}b^B|0 at oRk#8d0a!0uQA#Wl)ve*PVMv5GhP at I(bCl37FZOffJ
zPOD#phlMZV=bAKMp}v2L#n7S#qit)SVdG36dXCmt9isxDVFF=7k7MUcDyVtBJHnb6
zeJsGHO#U6=0R_}lbfe(XZMTP6H8^^9DdN(g+e51S8RpJKx6a{mm6~-BxWAbl2b})A
zss8EF)iYGfGc4Z3+NFhZe2$GXgB9J2>W-(9o at 1WMQqNCZnxk)r5U|Rh3|G}}dS8e<
z0chiM93=|{u_bcIN1Dus1#6*%aJ>GQuT{Y6-Tr}KNhvM1{6Y;}KXa`;m;HJL*`$iN
z)M4^4$jn1{hr2<)B=_FJM&<4WKP0lPo7$bc8|4i}G5*Rmiw+SM=zXNObJS!-t<oc8
z3peT6+K#eVWsQgtOCQ!yNqb{)_7^~0(yh5x at f}I;(}hJ8vg<RWM at x2Q^-0{J at D({G
zjGh!U%p>SFSEV21UVZ%vR at VJ;ia@>>u(FfNXmf2FtP+zmiM6wt{IpsTW6>dCfy!Qe
zR~x=IX$58|f8?<1k;><QC=2QwsQ5Q2K=v)~+V5!j;ZV?-pbhVe-f+bia5!SlTv`8B
z{nfZ7@;m#n{)~;soLH*jZ2NUIk7qy<bPTgiqto`J%6~f+|3rK!d&U}?H67G+j#NwN
z;{YRZCk~v(utOTYRCXsG#Bnj*&vj+3D*eVnhb?pI&P-+J%b<kR?2UEIS*~6urpsT8
za;k|}1Z}@Oc}lR81+1v4jJCA)QBQUggO=TNiRQVPun}lL2-=GXasv$Qk6-l%1+&>r
z?QHf$_`Pk<WnOkePjng{VrhZhXQH$41MwUDK-^V7{9kQwY*bBjMT+44aaPJNL{%jH
z{vwC+3mn7k+;4^={sFI?KIckB0H7(7Q?dEeCekO_AwQhd=65gb%kIt><+i<IK1PO}
zR=T`)M0NszWa<si at AR&_qx2#C=HOH)?A6AB!W6W-do1hB74xGNzxlb=&rr6#V1B1(
z9Nlv2c+fKkM(nP%ow853-UcL|pD*vyTnav!yGJe)|6qzX1czW_Pi8 at wTQDv5Y}Brb
z8*q#)GA<35yLZb`%VUev_FMIq)*>S)A`1shR6dbed48g$u|WjX*58hkXAo8*rG^;Y
zTc at 3zaK5y5#m&xv_X)%q#ZzQ%=+!SLdhViQottloPvGvEkSan(>Rr#KLkxbiKCG4u
zj`XuZM%9?rs1fh#{#zqjH{I9%XCqoSWwxS5DF6So!pc*8+t7;tr4g0fyMO&>Bf at A_
zUmzR!ecM4nQ{xsTO}cHBL+0bs-IZDWd?_VCCg8wZ6TL~@MeVf8DnD at LV(E4im;b05
z+;wxXsc0K|zJUkVrBW!Umjd>Q28mZMfD7F<$P<T27F<TKE=`Pgg?|)r#kuEaWNaS}
zTN2KPWHd*@9z-U=|AcaJuCf};Sug`PYyzLt(=MF>FLrF_?KZD6*gr!S`?C#CGL-T`
z2yTQWY1aC`;Tx=OlT!p+sr*8OkOcHj<T~0{A%xPoy%V>vP=%2eTQ%IZC_k)JiQ*=C
zK^T=|0+u4dsY3Y|DMkr%7MtdXtaG_pM~s!V?&WPo=3!AKsRCiim(NRgkF-d?3 at L&y
zy^bC)UC+qBPP&xK(If6-+K~CPus=%=AWB{8kUT^A3NuaTODR5m=*fZkK5;{cDpO5F
z8fPB&T0Br10PnaAZiV66FB!@2tTnn at HSb%9T5T}1r8NBBx>RHVrRoZ!(YAHt3HrL9
z--O!)eoOoAhhu|-RRq1xX*U^MEXI%lqJ<R6M29Lic6J^z;@#yUTAWa>67mNdM%{d)
zny<W>$c_NXRfKzt+J&#U!Shul at q*1+EBPW#E|GQQ!y^jdrk%?}t1e}$V)FY|aCt at q
zJ8Sdhd3+<eJ8PdN8 at oVzYBYKojGQuhJB8vVTBmcDy=AA%?^c7(IZeN#xWXmMlFy!`
z4E660R50?x3f%yEg|zL(<Mbf}Lb(nGl7^e+NH?m`{=9*qAc<w7VVKv;=X#3;)KJ>h
zq<5EWsT-t<#L#_X52~f7Ryi8{{DUP1*Xx-Y?W5Ewf2k%`o<-uqO-wPYnh-O^&AuFK
z8)W2OM5I4{6{?N!xr9woR2b|IAo~Lb+XJa}f7>2VBu!+0WN(0uHu)dc8{<W-=$~|+
z82$LZ=UnHjztfTYzHC+KbaAF`MbJ1uy!RC=WMLq0^vR{V<tGbge%1?HbK8Ze@&5@*
zQ^`gOy$Nl5 at t3)7p5mH>ePUkQKzN|CWkb%xthVkiLN|Cm%p7{=*WY at JYdyv4$GFN9
z^;1F+p_2u^B|*=OrM&2Fk1DD~e#lW^ioY at b`;wqV#`qHrQ~agWy8t5#(-rwQ3<f3*
zX++8I)98If)~KWT+$J9Bjrt<l;+fjK-tacjE|fQ3Ahh4Vk6*X+Bf$R3Y(2BJqyI8>
zydM)-Wcx7sBGr->PBpmbL;cl{*(ncB%<NoGf^1C&-CVyCgR6=A1@!kqsV``%7uw5<
zp?p}XO*W3pgC!7An-7RmA0w)_Fqj!Z$nr>r5#FON1VGZ0IdiU}JoXT(dI+!bYO}D4
z9yj&EV04OAlpR<nN<f4Bk|)&B#zNQ4P@%i9BsTk2vEvE0_p<Q>Kg9%BCnpe=XhZb}
zHFa_Tb5Jh1ub&<35~db~kzS(YYOoh0$D-M7qKxFD&6J5Fp$p+9DI_7gWV{WB%IVTv
zaq7v?&w}6VFDB|gg^P&VToVscMuGIEdJ;(2sN5z=34y5iJuxP_q6Sp5!-`RPRZ|Uq
zWii at 8@6u=mr~$2;+^&cc&^<G^%OcIhF^X#wJ>3%92G)}k=iK~;r<xQ;@)dMrfww<v
zd$)E4RB-Ab;$b8UmO&F0lLRbOjW)Tx<_|Sw;!s0Y7#m{hfbOo at X%Q?&2G{e9w6+)P
zkCDIz4kPn=30pB707W2R4>lZo^nU)Xd}~-Zy!@N}_`Mrf5@=x%(fMA-S9zZny20r(
z-c**K1m}A+HD{RSz!3nE<n#TTr{E{%whc79+o-N4?Jiu(2E*h+Ac~d#PPKBguY`>%
zeOo{DB!gkzcD%~95K)8xE|r6qig{%{8L!iPt{JsvN;Qb(k26?)dlPD-<NhHk=EK2k
z#B9kuX+g at U=}S)hoamypbF3Nk;<p4n2b1p4pq$@g9<<cazB?)ME#}BRu%&(W at DBfb
z`6H3yonJ>SeT(t&CVQ&(E#?-x7(I0UF5CSTU at JDqgzQPw#=QL*8T=2mzZ$)JzO2PC
z;jv#dtD>Pi=#?#G@|XImrtemihgR(K!`lO=xcRR>b{7#Yb at bw$6!8vonh^+ at Tcc-%
z%#io5n9=*%++rn=l{Wgtz?t;bb6 at t0OKJ%+ at nNnZ`G^o>GU<7ODis@@L!e%HzqAL`
z8qP0><5x+jDpnIAiPXw>*mzcx6PE>L3V~JE#8#^L9mY{E*IPKbdIvm7Mi(32F%!<0
z at 9a(a at Qjlg9C@b5_;k;3t95SKV at tMil`ZBRgB46T<qAs{M=jUX9i3qzvdx3a at 6$SN
zq245#lP4C}y-ihIJ5E41o4X*7XYLe*?fAw4AL_kg^rkp^E?impmOC~~kom>?)_4>E
zNxko%QdvlY;e~WWp2bU6&5|C$yz94bTXgyMyMb0)()Du}<J$j9R6F^J9Q7;|JaXf>
zA)B3C=1(&&RD+v&YE;I)LG*tv33lw`sio8^++0Ht;!M`c*j+rO+G^KZ4f^kl$3IO$
z6-!>XuX}Qjn<^txN)Rwy_)!>x;pOkc(EoYezPQ-F^zO;>6ateM5=6F!jq9QTuP;+a
zGE)FgVcY0;%+6}v3_8gW7596aJK1x*ZaCXMrQ&@TT|lqNDcOXgSdUAOs4Oo#6VE-C
ztoclLBoA<F46mu9y$Qmo`g7?MIjM~9WY~&#o+m5cip`Ah_n#Pt3!6l=*3WfWZp5Ng
zfz8g{OAdwJ(3M3c(&u4P$vgVbp^~h$L+?b~x)|4!1#&&IJt9>4;gdYZt()$7h-?4X
zHPS^|74D>9>upD0Bi*GN!?~h(y_v|`&vpC_(!0WLI!iR{OS)*Io+gU>66=YKkOb~|
zM-ymN<Ne)KOBA$Rzcuwx*p=oE>r5=mO8A0T-f|mzI6FSoySrwR%b5<WbB2Ju3$4KD
zYRU<A=VPU36PpGrwUEsvM(VyG2s9s{zw8geiAmF(YTsQ$61h>qhon1HG-Sb3bSKyE
z^k$Ml7AfW`BCIFmu=OijJF1`N*Fw04B-Bs7*`$bI2mR%yUyR;P_JlJ!GSS`_p`HV~
z&_c1P8szSFu#x at 2<w&=wlq~l(?xs7^rE{gqxXj+($Aav3F7v)U|6z7JVSn_Na(}ia
zlU87_Y&O^MymPHPn}-mldp<aJTET&$9kN59xxnwzbXs}&H((;pT;eWThnj3k>Z)@6
zfQG~q8l0OIXV^ihn<u&=Q&&P0NOi!ReuAy+eC+A}zf*wzeNt^U?DM%vdfEx%ckD!2
z?kAm>NFw1=rykVG9<puVo`d*|m&)1ByoMm~sD*0MDPP>PqkDcf0Q4O*p&Z#Xkq#%S
zXg9QLvy!0OFBTCkH7giMwOgkg5aZ@`h{?pb at q_x@Z!5tCK4U|qJMayl0W;}$Dyzrs
ze!`_M_57eFE-k7i3{==AV}TmN$1Ojjcvgxpd&;ivO1>rxMEZmA6;uI?<1&JG>1k8H
z;gxZro(aVVSO-Cv*T*}CYT`%d$05V45-(-p;<wW}#~zTNExUzw at fPwL7A;f&R9Tt~
zb0cRv1ezDe<H>9Z|7C@*mwZ(^bT?Vwz71O3S2csECP&Z#{Y7eDcHifF!;t$db8lEh
zlZ3DJN<YK5wgnwmVSHV(m-d@*HFBry3Rk(G;(K2{1IFo|F10Oh(lpxrJW{6+ar(Wo
zvuT*u=FH9mb4kp+0#U?h;>#-c)Ei_Iu9l9w<DxIAFHG?$DxZ$qV6Bvjj?cil44`3m
z^z at j@cyY8w$R2F;!?l~28{((qAx$X34D5aIim`~bX77ver>>geT-unL(gNzS8J-5A
zlL>q>A1VMgdnWHc)7JRqMP%x3u^DaW6$h7=$dv at G&Q3dt`hmc`y|?D^vzk`mT&Q26
znPBLbSxes~Rti$~V|pE_n^ozV%e=LUVlr?~j#D~NY>LMhF at -?xDM?S!<k4kLl$3$*
z!@fPz!@&Q- at cdWQJ#&02Ek=20GUd<0C%fAW`_ at B2czOkDJjaTwa!1~J?&&o}aQRyW
z<>?a$!+k4U*HSxK_*|m;)|jj0@*gK3v9-Y27!3yRQ(l(1qw?ZHRZRbO>9WI7+OYL_
z(zBRAq!~->6?M7Hi?Q0U58-n#JW85-IO1=ZJOIM1{toxjV7U9E at L3qX^ienxhX3_Z
z_)M;ndGX7S01>&&OOrkdm%{KTABD|e`2I)X5*YsNqp&FqulXo^K9|`tUmFJbg)g!e
zJ0O+6B~csZp3Vj+%|2J>tt&~{NeME_%s9huF=iwL_7IUCtITF9-3sR_k2+||^J~#D
zY*tqOwOr=@7aoA(=ot~&d+I;=4zlBB(qK)eOSjTCI_cb+%kALa+PI%u;wPUj71#H#
zgp%ZV?eyvax8>FEE-su$IIGb^rIQFKk~rl<Z8L2LPwk!rxB(jALf5#1**8)#xU%rA
z&YnLC+1(B<J8&RsBtTy5&2~(ID$Fz}hImkxY<#@)cjjY4_nSlo?Oz?m-H%5R`+wG3
zN-4}y)C>_lOJ%U}K>JZ#6LehIna`!$*xh7T{$ZxBu!Yg>)c0(Bq(k*ByVnV~#@>^y
z@$}A!(#`FQ)Jf~ib<(bqBYkZA6AVkDd~NVt!K%0Q7e+^K&u`BobeVdFJ*Uwb%_Ws@
zQyC5MZzM5rDM<U0I%$L7!9tES48t=q><NW)a1VzqC*N-N+Td*K)$VK!Wo=>aH*9u3
zwGWrQqry0NsYNAkY(>&0Q at HHf$SSGp9DF90ON|?jdths+>BI5KY;xww&v-wV9vYN+
zj*fcSb%Z)J9FK5!I1$I!T68|FUOo11WwsB|Rmks5h at 0y!`;i#y at VxW~hv!{CQjT``
zXzUmjV~4LpV|g~!VTVs=_3-#-pt`iPZ-q9Q3gO}&xaZeY78n1@@|K>#*Qmg#vt}i8
zHyxu!*yG9gkz8uAJwDBP6|dZ@#@X`Bl^>5HT}zfh-Ll7B38)5^qZhI$ngc$WFwb_q
zX$Vbsz~^HY)ENg{j+s)yBk&QSru{C)sW%myKOC<2;aI`i4WK2PgMrGw<B-JU3I!6c
zm#f%Ze@&iOR?}zZ!N`2^TdHsb9?o#m({6M5I@$gsr$^w^FzgZK;DnDGHtFsBol7e>
zOrG%Tv_10X6^C-_%cxJCaJMNVBw*>}em*Q71os+GF6xC)CtD)SsoX7Ozj&d_h)M2u
zM^<bQymGfS+h+cISUf+)2ZSD;6)#*Q^$mL6O8w%5dq>5lJ~+5b%$WzguE9kXy{IMS
zgQthzZeHiM3MqTBshtOR35W4xty{kTW_<c43EJwGHodd_;p{P!Nl>JPg{Bv^QWKr=
z5wTJL4$n%Z&%b66Fk_P+e7{FwFNTus6o8Dd<Of0#`lTN}J{hWV#d`LZx~F9er^T_C
zPS0gNdCD7A7o?q0JyZBwbiQQIzEE8XwbvPUv?Pl*O9D0#rfFT9OAc+M+MMx1Zj5+$
zWPX!To<5}Enj<k+uK9^irSovRQKU{E2l{@5x}UV)JH}#nBqEsMjHxOPBx at 4b+3j)c
z!u#EcJG`mwJbau<;*NRLbsj#!EwOSp!B?nABJ&Wh9M1P)(N4L{yenlcvN9hGS=@j0
z6XnatL#-2g+-M0)T}XOgj4ETFv^$Yf^YNv4UMtnl#~tvzZ>ixf_-Gz1kEAKCiijDk
ze)nkf^V6X+H=R39>&rmhLuI(&?$Z88KI6*x(p3^W>6&mBvMN(?grIv)YkP6ek>9z{
zAJ7!GT;{MF$H3w2-C@$ERkWb9TQFHAQZ1COkdRo<YDlchF1V*MQD&KbSyW1l>@is-
zf$Oe&y-+(-#34qOyQ$MFe>GUXwCo8#P at r>%B-zckFPyKE^hK)Db=Gqp-`v=p*psQ9
znal?`gh>>u`rU(m0+JI*+?hzyIuecXD6Y?hy+ls+yNi-yg~qZ7L7&@1RXWOC`74S4
z*Ti-oC;pJu<b7J|peydn-_!IWdiSEaan3d{Ep5lV#N*kE39v7!JF&z_HQWskr at O-;
zwwsD^!*iIV>~zxAVcIaAA9c(PUrSHy$$({%?r>cUzOZLs<!&*t{IkR#hG(V~i`x6$
zp<01^vgZ8pQr-VE>>rR^NLVJP5bVB4HQ8grRw`0R0 at a4F>=CHbMG$j{iA9eaYz@{e
zsk?nJJUN3HF1lubgMAYYMxxfBJU#Q(l6 at 0Y8O!gU|M483JwvH at MbZrsuzBY^j5LLr
znE$T|oA-~x{!tbcBEX|9_E!UIXYmCQCl_1xHB~LZQ at H)0V_#poHoRv=w<PxLo;^Bu
zAFSkoc4n;y9%$f49P%U9V%zVY90Gu62w at ssGmmq4K58$O;(<>{v`05F&dq^E%;`>i
zQx at D^x!Z@}@vTaS&q-5jWCTr=WaO*9$U|wORV0pZa<9T5?uXML5e)=uoo;#g at Kgks
zKsa^J19$u6Hbi}nT2faDNs*z-DEaeXSo&vYUnts13nRTr+*oA4`vSjrXVztOCo14<
zS#l3HSK^7=(yAMTcd6-~cr<27ZTG|@xSmZ=m-uGOFq^VO$V;p5btf(!hcBwTO}+KR
z?Xe7s>xGBl|Ne?f at xq;l2m6s*<eXUlWJdtx$-wq-Oh{g<hFa%^yI~sYfEPY`bRt~i
z**UPj3w8X53YD0J=7DvY()1Lc>6wRrH{4dtGHiimZ>XaPZ`_~t at x(=u-nb+CidFTt
z9yge0)bz~TCk0ojrQWzuSumiUEHvSh){+f%{-A8hptZ~&nSwN^?)e*PI9x#Vht-l7
z-N|bC4QE<1gjHNK?%*e9SJw=stM%IGOcPu4+5Td}V%?56l0O`fL|W$34JXp1 at BTTF
z3YuJm`$A#8OZZAMKEJxozo2XhI-is`5vKC91V{^C{)4ERZ6EM#6H`>oCJM7v8QF9`
zU7TsR6g|)A$>N{c;SK8K8iL<53id3VQLe(lTHmalxnfgrcVA?GXl#0#8o^sTEdDaG
z5lKLJ80y9z*oC6CjrNthl_WUlYM2R>eG4Hg!*SS?)16rNRy(sN^I)i9Hpn1M;cP$;
zzEJul8kZ=&VG8<=YtobT&$KWd=E-vTqrL#ajAi!a8sjowmL6E_hA)ckO{$e!H`>E;
zqVFg{3uUaBU>XOic4mFSdt?YEN~AF9caPCD+9O2ZM^o78c{>09f;epDf2+9iS26gz
zOcJ0m^1czuH{4S#_ZaCdgPJmz8Bi+h8M`XH`HeQ5!3TT$u`j>YX;>3lhyGA|!`{|~
zt}DFBi73eKmJ~QV5TFNW$SBQE<3GL4Dp&NDt46z%yX(1kyMxB%iRW^heRb|}{KET&
z`8ETN1tuDVU782{!!pAlR08AhQe~i3K+K5^s<;p at T*fBB;sn*FY3}C5m257fjc&CT
z@&|V!I=8eX!PF4)YdL31ko{sOqPrH*`W81tLIDs9eolgpg!b?@zrF!pZ_-XVMU0*_
zWZ`;mT-&?#<F_tR#Iy~ZzI(oG+h=V9OiWn at 7A`$b+lH)E+8c*yU$}~_JFA)t#S<Sz
z95Vj+?iX~!M^QS_bjKpNIzK9H=<`;|koeLQrV2IKGyGatRGO=j9=(-T88j}2n95rD
zL)enUFBT+|UY2)<t*d+s*b4b31~R(W;c_6<sO!eDUn<wLfuobHUOM8&;H%h2DHs0O
zf{ZO^d$Mfbl$zb>?elvS7x@)626Mpo?=gq4Pi{Piu$aiN>?Xo=ah?nabGtFv7x*Y5
z{_9<}n8WE)dkEV%QDbhrR@`X_^w>CeDopp8=WyFM5u<PPDt0vZdTh-76v6gzY~Ls&
zTy8v9{M0ZmUY4vjBpe14IzZTt29NlW@)`(Ru*b&s%^B+(gNnKa!N`pxKAj(L*oPv9
z_N*B2qrr~_KRWy@;D;1xCj3m`hctUr_*uda?PFP0z7?ZAEVK=w#Gp76p{M{>X)b9c
zC0*T#g?XxoXr~qcUGkNbmXJ!us!IM`6{;XeFV3fgMMA)&^@=t9K6MvqaZ6nYfz{da
zoy(T1NCbmRC at r`k1cOTmJ(&wY5Qon&yf<g&3kqLZh9uBwn!eojydGE8+{|mN{i(gm
z@~w*}pU;)sLguoC%#|F%%1>tbRkX7{Sy;mg{#?kK&?S2}_JXa5mfcH?2v|uFQ+;S#
z3X2XD!b&XUY=Rs7T7(6O_}+5Lfe~#q`V$?cF&X~(B0W#~<tm^3|1y>pm<0Kx_BexV
zXWKSfT%{D8SYftO1cvow8Vd^^2N;TgSpVpnDFk}pAiI~Oov5n!O7;S*x!Pk_f}f!$
z0AfXGp^!nDJJpL^4aFD!zf*QEvkakaP_)-GQQCET-b5taDBZmyI<}(tk5v(OC!{~A
ztSaO8WKN8EvQU-Y=e8;0?U(Z}#_sr8t-R#$dk>lr6wQ#s&yZ%BFS`yXt{RUL3L3TH
z?+;%>(%N3FdwC?S%y5X)I8J0OVkw$e&|Q<$)R016mmRU6&|IK9C}h7Q+g?p-kHVJe
zZtk7-FUPX_O(!2tpVO5u)u>o9ZYp#BFyJG%1tCrkqLjObj)zw$RgJ+z{*{j35;*ef
znpe=ob*~p2PF_t+R}Q%fV;q6^xT)uK!r`|=mHGJYmlY8QeyIk_<kg_(&uXxEdc2MF
zmpDmJ;-Lulln^V~vv{H6VOnw7o5K-B_DT-au(mRnDlNT4zrt4kRC>Vh?wuoezS2&}
zUQuif>P{cK^w#a3BpbaKE`{>;4mP(SN*gB53`m}}G>KaEKu3DKDx0p;6C)K7ap2{Z
zes6cM7VBcVU4<}#0oK~@ed})S(Y_dU=;aP at 0sSqDw1Ahb$nbE#_ZuZwd?Djf>qUKV
z<*IrPUK5=LM}oMuxSq4RCb|(=-4R!opr8E}rF^S9KcVL!SB1Mw*m}9Lsv5+J`45W(
z_WK8`NPf(DW4EBk21I9k91U)yk3Di@&iXj*<HNND%61AB+x}>~*dQChWqziz&s8-?
zG`!#4Dp&DlVG_CpHi_X?Ln51jM6{OY?ci^<Y3<E4y;n^O;K&HBv5yJCAaj3*hmR^+
zT=yz7n#$+FDY`_o!H5L1p{8D_%3(}<V+M5rN7&a~XByNyuf?-(yAbM-dwMJ5v2lq~
z`P7#5s%QuH^{KuCLnrtvbMjQPVJ3U%ek$7wTb~0F>xJ&BJbLuWq2u8?U at t!eyybGf
zl?deBG$O|5DRTK^6+c&lfZax93RkE;mBUGPh7W|f81l0H at 8`Px`vz(1AFfm_K@$ym
zJ0Cq45^ck=T0O*ECN0zoX8Me_cbQ>r18dBTr${09(OHA9mw&e(-s?Y9*gYX3ui8Qz
zzQ=ss4$UO>Os9B!(IX+dcR+7CvySBd?j$4%!~5eZX^@8=<?&?+LeTqT9#E8e+e9lH
z@(9IM=y5h;YvrkYI_%vsB7r at ZhAc(O?s<B@?&!ame3QV23ub*4-4txlD$zdl6hZn<
zWD^%I$(F_w{Pdl0X+~yh<1(&MbKL}OyN>Ou21`$wt44p?Hn6q^BAxPHJ56PFQ-*sB
zFi<s#@S++RvAfLGMg?8WY|TVVvXG}J5sp=u4jnD#w!K)J4qzDY`n<anvzyk at _DxVr
zO8$h(JQTj8lereNI9ygxJC}j%AR)>Q4Qa*DMG8gXWL0$brj5 at E>HQHlhrd?Z$TISX
z6YSBCugealw|rU+u6E3$wWM%8qHEdS^X!hBXIle$wu>V(i^IlehPAHA-u5T0OS8+8
zOmVOpDs;udTA}~ot>9aE?Gjr>yB;g@%tt$Nc9ryMaBXDknhPnp%tHg(u(@3RW7I&T
zy(r?uCi|k4-3F};VOdXCNsw at eW<z6GJqfB2Lpm2p7-9W}H1At;k_+c_(T6)Ois%5Y
zEo3+n#pfoqy&^6e^XZx))k=X_VYb4eOEzfcc9yj>n(}e%veT4|n&Dp!mK=jEZ{ym$
zZxQ7lfcvET*8|=ip~>N*z184lprPl)eI_7Q at iPDg_qQ%8`T at d^4UGqwR<Q~gc|YO<
z%szEA%rA(me1Fv<HJh!L`vZ1i7_8-B0Pd}%tE7b?P|Sqt^bQ;TW8>`KIBpOMN)=rn
zw_P2B+J3+mu8~Kc5}qu#2Z(lk5r5OIFXEpxgJDCSqYi0bC~D)`DWke`6lY)~MuFH9
zu>6=2Bp}`sk4hhp+mB)iY4w}>TN0XV)#>Mqvoe%XFX7{2D+(X0;(9WNG#E3NPHN|P
z+?$c0EPE5*HgK_nx;`Ek+0N6A4543060t7Z0zHFz!?f}|MR^9|PI#^@B at M*Ib_r=^
z#>s;8CfiR~gmG5y6xR)eQ+0uO0bX#QvJAq92Nm3(x>z34;w{~#VoX}r;xg%ai`%3?
z!#RF|A+E8-(-4=^GG>MV)EV at kxokBxI|%3E{`FL05bmb@*#`9f_BVT=M8Q5*n?;3i
zE_>i(QqtR<SWAzk4CnK^`Br`74<_|wp at BElfA<~eXr*7et)Fi=IycBMLsvd-{<B=f
zj$Sp+Y{Sk9WhAvDS$o3#Lt&XQM8*2QGg1B%aETHz+lXGMnPlPxl~sRBFFJQr1ey!d
z!K?GC3?mmqG~btY56$JQovUReFq;7g0~+`F<d`ng6(T2NngZwhl5XoEKaU-I$C_8H
zbBE3JFl<s02K_Hs*s;EEk%5JL-nYYeQ3?tjnJZ`&WBzA5AC&#}a^3guX at m;wPBhXs
zb`xSdxNb~&k1)~?D}QZ4hUUqKNq}A8{4h+~sA9Z|L at erVyd^N(%;#sc2P1L<R(*-=
zSe_%V*ie8wU_awgwZXVYJfajVI5Niv77h!mk7vjBjqOe>d9IxqD}ZX8=fQZRx^<DL
zI2PlTv&2+UaVmsWqV?Ri=X8Hxbo+5SnG`3Kf3*VNI<xJa8)fkc-heHl_J4vGVJ?(M
z2!0q3Za?zx5L}Akrz$CriMT86yg#d+nmiHrH~Q2Q@#BsjhjIuHf41<57P`GTULJD2
z7gT>-Y^r6p)NC>2zkffX3dQ(TrMPZ#!pYp3pY^KrbhJlrX>+i@!Xtz at 8LXQn8^Lp3
zJPemz;KYHzfAzaWH30@`^pD<hq4evzNwk8ctB(@`P4n=|4e`9~x6iL-p0Q>xq~bu+
zD-p3TV&>eX$;NVI7mpLVqx~*t96|G#B`Qh6S<i#}B6SuYDp`Ei^AHs$!8wehC at 0EA
zEs)@T!~U%_%hD{xFF566_8a1 at PRe)z)FBBTIzEO?^vctLLY_ykhBXi1gI!;7IeEn8
zB&?ZvRmnqs_k(;OgXsq4`9zUjobbt}U}{t-?qO+wSu%@i<AnDiEDgdeV!ZLsYgy*e
zGQLXoEma+gyR*8!;y`US0DiI<>U1dXg9TGhL-A3 at 2vZng3L`wia3PGC7KV>CMzCQ7
z8%9(^$e3?^fjkkSc}N03B_|3!_MjoGVG?VI8pF^87}r-IP1n}J;=}MjcJQqz4HyHH
z4Ts5w%VLg<564|iZMqH|`<X5XD+%B*Mqlt|td at OyL>7&kVVFI&I0pBF&TgY~D+V76
z9p)t58?!j#KM7}G=C>@lMS;m6|3TL_ikyt|X{ZaSyvewu(O3S#w|_FuGePwKWisw$
z at ccCyx1ToDk9lI>OnO%325UAx|4<t8!+!i9ai;%koG-gD_v1L~(<!*Up_b)S at CnKf
zsdaY!F4;{q{Etb8(x6{}Q0uBbcHe$+BeQY?n{8KP&E7r#@3^{2-DxO}Wzsx=;-}U4
zvfDBZ at opc-S8hmV%VoaozWM(d7YBMD<^5gh<>}z{zGx%*x|}>Q3ZsH$bN=_Z1^;VY
zGP|(uKjWx|skpuJ<AnVmRnY$*h4jB~)xFIB8gFRzBFfv<J_oj>`#)ONjT)ALWi>hA
z|BMg*IDsqnzhyq-*!<!@<EVmI+}6l5WwH3E_kBn5jo7}Yvsz-n_9ISsA76hfs?<>E
zzJ7tZMZD1I;_}nzrE1Rr!dz#cJIwiKy&3eIkVOr76%-6Viu00d^t6Nq&*yMS1muLq
z6^RG`AKKnLuBqeuAHKOHctcncNFb~Udr+*%VkspM_5fNoK@^eQV3ew8aH%0d!y>YX
z5-uW(`%<-~3sx;EZWWbQM5z{wdyB at Uih>aVe=|2h(a-n!^Z6sMnR(ASXU?42Cv#`0
zq_{#VNhZhLqfs$4W(8<)Ert%%UVUAMlMV=INp$>RG-ww!zubuiErHaHt76d4O`eV>
zbkLDIC7$~NR$0ezHuan@#64rt$zT4~w-1b|+~qpHr1oUt6tE~I&vuko^i1$y50yTw
zbf>?{P(+D2Lled7HCRW_yO-h<F~%``&@<J?qF?wwm$B^j=RCOJaAA{qbv9{kH61zp
zJLtaZV~jR|?n|$e?zYPLaJs{02OBRIVoA?HR;nnem}FXv(P7xVG2_tqBr_qea$__n
zuYNQ%ti>B?5Gw*IJ7dt8*TzWi`QjpK?~twj?K5xn&brh8)oOFWk-FBrD#or<++?8l
zfI$b#F76C#M3LFDQZEF!TdIg`mg8sRP+QV1{NFfK$<X6h0ZE)TLedOnlOA3+6Xn{B
zHMh!Z#YOGCA1KZdY2g=VqEjao&m-wnIOM%Es at K@Ejj$ypW=c3vpu}rb^bMs914_QE
ze~LTBqf=S$vz~q~tVLrtkljV`=ojW7|I%p!Xamk+aXgY|`8WVx!X&<hpNK~-z_5q+
z#G{fa8f_=Ey at iz-+J#@(r1zm}33-}sLlf5^#`6=<I0{jq_ at 4=AfVQ#KwPNlWq(!i!
z(!u$J|3HN5lQ`Je7<B6Y5&u5}*(Y%@{j3&4@~3f*O1*Um7%5E;^_*XiZ<~d3Wzft$
z5Bm1OF?Qh0kZop59xBxMCw>|Sn<qTe at o799I*Ha+4!=<2Llr)Wi(waKjE4QMI_sz(
z)Db44cJ#%EK&4&h<%O8&- at N>?J|174h}zg~s&nfXufrVc9aY)lvx|_n^yV;Qvn{55
zXzCrX4s{Uw;l~ouSutRUzA*X1W-w-1WGZ9z!1!eW{Ki}*!Vz1838{_$rC(x)g8=Ka
zKJ?B@$T}2%?Lba~kQz&m;5H?Zt4A2N4?EOG&)2^=^A?m@`fQX>`tFx)v(eQg`q1M$
z>4HFJ^*aOa7TILgJbYpjYJq1bq1jeLVUKgotK#X>nZN|`Io$FeJ&c!o<l72YpPBi~
zlO&W)5`H#SzQ}yP at vib3_&RYcH*db*oK@@8RE5jBlF*;z`i at f(WM`TpHJl~1Q#h>K
zH at vdz?T!<iQk0QVAvun)X^!@#!iX~~@#)DZ+x=08?G))@(Znamoq0DBT`$0cIA?>M
z_T`ZR6|oxw$s^&;lSdgY4`(jH5c5KqB3_e>Mxak_;`fr#B%|ka{k$|mboIFyBN}Y-
z)8~N}8IONG51p(Nv1kI`I1luvFV&>I*N?q4SLRUQc{ec#*Ux*r!dz+SJr?fy+j$=d
zPaO-3m$@O5tBa6Z(O^#3&6!qS&G8FSB5r`j^COxUi;!=Y!Vh_bSm}1+5v at B5pPT#g
zH|F?9c}^*kmI-;${K684l+Y-J6quq^-ee}u!1N9Teh{oufx3`2E}RMyjvW`?0>UvL
z!gzfOY8|ft8c-tabmv>{fiF6XHDRax at Q=c7ehWSdd-{DG at 1DQvLwF7eH%vt>N#EiV
zQ&DTjz at 2HTfXfa^2ifKx=n9dF2oFVVj~O4v7XeaE1(7RCB?FkE9xO{oG^X&bA|-kU
zkP`5HfJk-|5|NCgzYOulZ213Yx!g+lKqG##2$9{2AI~J82AKHcnFb0M!H;y&kFawD
zruPw6Okg at 6Vdn{q_7S$5z;v~kOauNyfQBCt?j^7ZA7On2X7mwOKw$Kbuu}xa{s>z~
zV2qEjGcp1+{|MYpV9bxOy98$S5w?@SSRY~c3C#K<tbxFcKf-zm%pz1a9&92&laB~*
z6PV>k*l_|g{RkT&Fq at CClLTh=5%!M2IAfTM0Jjhz-0Em=1;5PN&Cds3#Murs=i82J
z7IsVa<+P7)RxPbL9pjso<m0fX*T-S^f#V;Ar?ni<k&Oe~=(1 at UO18m=b`&#t$1bmr
znB3^EFO$=H>&7bru&d;>hEK8U<h0~Zv76*H>yI!Q0B-|<TR$P(2?TzM?F9lq#SQ?0
zpJLwwdG()QKLL54V!r at +vQNQZfxu6(lR#j at C)he5 at KdZ92>cY=0OWm&RRVd98cg;c
z+zbRZenN-?fuCYqfxu6(CLpkBJSN~tR=}C;;ecU=ZTkglA at 4Yr`pDfG-Q%{n>m}_u
z(K8xUGB6p1R;xWTwj9191ty`#)l at LqlyiQMK+UZdak(v at Az|S6b82GX%&epec<NO1
z|6e{Pw5~(lmQhljmdR69+c4X5GY{hd(-?Y7fg630^f<RTy*JW+7pEeskW&O^4+Z9w
z7|<ML)^Ppa^LRojn<WDii<(84b+-#SQ|XC at 7LHauRQ)?+p=XSH=+mEr6!f;2 at Od1E
zC2SpYvXGYrR^`_JxH!ztvMbaDv@~UmdyG=xJ=hQ`3|&SJ%xe(D)QG>2&f3M)JLVX}
zUA0*d!}%xW(1WX+qMzN}T<X~J4k<Y_I)Cmu7rPrfzY7q{;AIOYVZ6-cmK5T?I7g(6
z*lZ)aBZuK at gy#^t^rSxJ>uMMDqC at IUD`g|K!wR`Mm*GZF_cePZSuA2_ZUGn at xq0-)
z(2L*@^0%}GV9hIF(a<Dtdp)2K%y3D^*Z2A>?yiD26EGOL8Jn`3ygckA^W|Bxk#NbI
zLFYNb6+Dsso1-4q(rZp^2 at c<=cEXYmjVj?`>6}@hSeo42mg)Q)l*vdy+qi_Q$0pYr
zUT|E$(J6?MY7XYRlkgl{!ZpjWtsE6u+V;|sK^=tvCVu1YcfmKDz6&+PN4K~IaijBM
zk*rnq5i;Gm=RCMxK${lRtyI5_Y8sd?k^Sgu1HVqSe(2^?<Y(QHJe%#K4VMz+FUt4B
zr|95}r_R#kbcLsL72QygrL#ra>GxS|9q$xyCn~bm?JtiJ>8$(@bBx?5(otUr?jQ(1
zQkwuC1IS}sV?YM9=EgNL15e;F0)T0`DIhuzh;iWF2W~fTPhpNnd)^(SHE0%)i?7GB
zb7l&uJ}n}h(e0yEz at -U~j4GYI*am!N6y3O{+yVZ*K8Bl|KW6C`heoQ5EV!Y?B-*hS
zz#lKtnRjxu3MhQFQZ_0i-B>n9_^L)5 at zZD(5TaW-stMmZOc1^}FfvED-1IUXB%}|u
z2j<ne^}}ctzdDK at T3n!`#XSl9$Y_-|Yzo8kngQJwZ^O_D>xx2~jrU|R^ca8c$Ft#|
zk+RV^uQ!#Wb>2BkK^ZFrTuE*WJy~_TaPDrA?Hjg$o5vVUnEL~$WM2sAl5H-YR`Y at X
z2;p}p{N99rTJQ|=(cEQ7(t{Z_i^-ES_T^?EIdfl&NN=`?Ound6lXJilTYW}oRDKQA
zi at R#7aAoFlpp;A}w7__eE_Yo~-<{i4-!w)z+1HIK;m21w-5&^vx4g|~lZC5xE-Gh2
zfkLCBJtymF4H*13DLO9$2 at A#FQJykqOn^uK4~)oDA)b(dggV6|Q at xvJn9ggN@AQq%
z0#fK^5=VDG;`+Foj5M{#MwKpkjpU_D%&>BFt_1{dw*btOz-Rz7BnUw(0AW4xNweVw
zy3ZpAo1sU$tdFT2ELT6?HD};4NOVk*aG;36({2R04R}%tN0n0e$jfd7kraENrPpey
z70S^nh|?%BZV56EByG^;kLcHFei_Dkei^pwFjDb7bzF)aqLfsV$Py(V%QmyImkc2K
zudJ{al9 at E@=jrq|NegXCoiTZrw8cheFijl|IxoaZA;g5KnG5d6FRLC*3(SfSS>2k6
zcp{r(fUC3{i_dnFAo at E+1)<WT$NrTGmt-yv-<By6wq at p-oGde64m3Bx%b1dG#K4%v
zFfq1enAJC7l+qo<hp^FkI!NSqrrYierWFME*T0LZ;B9Wsrr0<x<zWWiLx@#gDv~AX
zrrG9yWo49g9HZCovoU~w?v!q0AXAm<36cOre{exy#w<d)U>UM<dDrVwTL$uVMol2p
z?4kL#r_!op&wyeph0ilr3F(=up#rq>`KGrrV~oNR+>pac*#w6cE*KX|5WQI(C- at bD
zg34OoK-Z)GcbU5+*)gC-(p^7UbYs$+xPl1!Gb8Sj<K{;mS^V=;Wy%>R-s)xCRH^xq
zc8h;xSIf`NAn%K7iJ%9lWOY8u(nCvK5Q7D=HYCF>=!T^&2>g67dTBLckQa!=JXv^0
z;Jn35U0U8q_TCtQ<<b4yXbK at RGXW!>W(7ZrK83aAFY5>_Bp*Zn(ic&UU&HG<v57{`
z{==XzX_6K=Q6(*Gqqyz}dXDV66V<<kt#>vAD4`6bKLx_q%4`gv5I>fPdX|5(JuxjO
z1>VVj)~oEhP`m)%K%W5xau~*njFIBQXZdB{<#>9~CG!=jku&{hXT3TOx at PFa@JSdv
ziW|mP-+2p)YALPEgZ}C)*<7L|Qza}0B2|W2%50mgxC at ygs%;b5LCPX?q&R~vQ-)14
zR^15zxVbHd>_XtzwfG|~-WX<)xg~63ra6QDt`=Ctx6z<Xue%gjj!HJ at E-eE;qMwIW
zv%3?pw+>{iyb)L at e!V})SnwAo+tb at G%P!iUDdD*-1BA=uS#5LuR=;^8<Vwq(%t57j
z88|Jf%sh{+$ESNB1Gvx;<X)d|q9&Q=ioO(n9=zvsoQ{2?By%O8iCRmHin6Q`Y=3v7
zLFt30(~rBOxsnDoso!1 at b1Q=zJD9mO#3iwjmYT?XC^e_6x3D|kn#`2hP(KSq1a9`+
z=oJM>Y?e6HU?J0;mlqT&Nbo=ct*I$R3z}@GVGM-cx~+1!#VvaHEz<U8FwHw)MacOL
z3zz*(ejL9BivS7sIL`Y1vD+Gwe<zK+pvuM>%4%GuS`K)ztg3Znqe7a3uXJ*mS0f_j
z|Mr*S%?0)3a2eAIZTy-bB0(a4wUZ0Jn^qFLns;jFHv~>4 at b35cmGbLAL6K@XfwSJ@
zFJSZZQX=%E7FrqHRE$`>Z$T(7AkTIbRKPa~!mTkhZDrT%4QIf-VmFvqgd8Wy?rlAG
zFH0$4#jy_PNjLK`c%W><mt3+`iP=f7 at v%O!OfSA0!=SKs_#b|-&;W#~;VfWsSXpN@
zlIN)V_Vc!w4X^cSG!)-;N0uv{sPk%~$<ISl$x>D{((R?57@*?++5|JIEI{IzlXM)r
z3%_7>V=~N9X=|I^Xf{mkP%VFa-5v4zgn1 at iO$$@D5lrqP`w+l{xo4O_m-LQ|=u6 at e
zD at ivU`Rkv)Vu=JXFwd760hgi*7n!_y>x4X6pjy5@(>v%Ji<52X^lj}XSC3g1-}^VP
z4`dYGAWJzY(&s+t6X#pp2fY+6trZ*0d>jkHPVBrz{(FDB^U}Y5SbVS>jE*g8ssrwT
zgtW-rz)G2GUhumcJytF&Q5;SU4KX=P&p>2)%X6^OQ^TR*`!W~tHZ~ec4TL0k$;zf4
zx4WBexpl%jX)oVEhV;4j_eJ>cTi_;(gHs`SR+;VnZ$oz%=!EVSkO6_JzxL<@!w1OS
zZ(fN0RsVeSL49+h-cluEQ0B1n+hNfi!Q)M8_t3p^JBPgvNb~IM8*>Nf)HS_1`VKoC
z=(;R=jfCaGoGn2Mby?9HrIZ*n*^$0SQqA$o8o@}jPudrzzmNyyy2%4%t6F8wvv+d~
z(^KUEu#7>+k$N^nQ5&~AfCRssjN04I9TdyMdFA-<TAmPFSS_T^QF?G!B!nhjVdp$@
zh<yk8c{;lO#+kQSbc~dBMUTu5iLtw4b?Bj9Kb<V?&LM at gmXOV9F=(ln<F$Tw;Ig}Q
zIjRtAIoW)JO!hgPc0aesxu<VA`cl+=@>C{wCHfn>b(>xn1EJtK=(G5#q_vN-N#!+e
zwvs=E)RGm7z$_)o3RWU0zi<I5Q;8z{Vg at E*wcGN~s>yt1yX~NTXkusvIaeA;=Orwh
zzpVepyY6&`d@;06Zkv2DcXl6=#n2_E3uN-exdHN=tSw}e%K%^uN=^si+`IA|huC~0
z)l5*a9La^&j^whrUWtm^^k_v&Hmfkxk-PzhQ+OcE`w%~9LXI0WoF983LlB=XVgf%5
zze`x}p!J)KivzSNvWK^K>n%^EO1IO==6D_Xg3EgO&eYJvn3DqA<41AzT46jdO)0ac
zIHJX_b{XGxgprSSga#k$hzdT^5l%i<=8&<k%+Y=yKfG~5#DkRk{0ogb5f5%Z=VOf&
z5bozwZAfeGL_Peg*L>|?qvkud{9(Sy^Dn=c%r8Z}%+E!b%v0tUkeMf*3dVXaEPp>%
zGRb=*DN%pQ{e9XQO|;Bx0dk?U>EVRMMr)m}Ae4|Q#1{H5baGS^7Dvgom>u*3y2rpB
zqjQFSK=%gF7ick0=%27+POUIGPUaxF=EiMUG^bjaynyuV+EkZ at V2kSZCN(9Pj?gL-
zEUMQ%4vv;IGkCSNxSAVyxdeVc1SYDy<mGdI5&j)x2bNtid13g9oteSW4JEjG8!B7B
z at MjH;<jN8rHDi-d$N}M&4`KFvHMPj*<XX2N88=$rY3F`0N_~|j4aSBhmxenwAXBZ5
zGk9}DE*EJ>u&9>~WnX<R^Er}9Cu737TS>#~L2D2;8bXsh at kn&X0yzTBK60(mV5D7b
z(6JJ^)FD86Ix>+*P)0%^GUG}7_sH=o4>##RO!f6kp+cbG)I8ZFK}Htt?k!DEohm7g
zalbM*;NjpT!Lonm{Q1~AEac%xM8U(}Na!yFZotElNG%>&@G$wtU;kN)=ugkgE_|4r
z81O_2!pAMhh0$K at 3V+9FMe>;|j~$b)Jw9YXUQc%nu7DM^!Hr%d4Wd6XOcP`nikNA#
zK?8Dnp27T#74-tqGZ7Q`$!UWh!f8!z(TY67(8a6jqcfl&77#QK2<oNNiv|q^nMpU^
zy-7C)Erx_FCL?VxvrbJUrvra3D*q4$eh|MTYs3o8Lda;=sc)?S&5~R at xok<60stfX
ztkV1COWHH$qz*i%`^MvSv<tQu)_MJmn9!HWm*~w;Wk?RIA+~u8%Q6>|S+$7CWo~RC
zpP{yK2i>o++2tbO1{7IWu1#@@Duh^+?PW#TBE{F2S5zuu&5R0-Cqya0NNBrLq{!y~
z4aOgsC_lKmI>wUuX2j&_WBoIrCsR0}>Hoa at r>!h>Wi@|#(O^`IFl(wlniXJ2vio83
zZ>OKk4?L`V$0;(~D(5QBAYcs0b|?m8Lp{kYK~TLh=48A#AAk2(dJK}|@Du2CP<aj)
zLHyUhVx}Em=XycwPtTK?0CStn&uI8N<(Kq8`H~9`>*d!Ef0lmzbl|c&u^?kbv;9`D
zyO_Q{*Z$i~?mWF|$kt5ODNMg!A#d+EbLJ)W`I)!!biuM)X at X@>Ma-qi+1Z`)G)?&J
zZ1FYo5-F9-#r*AlIdm5I$z1M#NEY{7GP~r7twVagkxV{6dfA(L!EzO3*mCI3=>oyB
zZ>s6kVbE{Cc><=}Vks(qF8h4;KUm>6ucSI>GX%>_7Y1epnaRBLa#Kl?GXm`Pb6Mf~
zYUWbunaK!tEgo5`q$Ah6HF452 at d!0T5S<}n#=!XXX7Na#)w{6tsmP+-bh&Jid44=1
zNq=XMZYN*l#qu-YDiJCRxWH^?tMWh`(~z^ui-Alqqa&Ud4A~bPE)<wo$0JKYA}xRA
zkj$$Yh%<~kl|yov$<~Px(F+ri=qbtn+{Qy3xP at oAo1#_b?mXtXRPKtt9|i5E at jUC|
zcYlSra*Glvvf~C^#%nMboF<1jq$*bRGI%CtbY9MnI)&zi at w@>gowrPMSOEPipnrnK
z9}oR~8h>8;=qz^C<jG*{E#bCcm|kWoeV}Rbq>sY4)%uPNa`<KU5UnHM_Cb)Mc7&VS
zE|uj8xn=gfL1S|@Ft=YkHjnd8Ll$`dAi^@Y%<zW$Iz}SDTlxm9E!u85B)dw;^WKOg
z?48DKyUApGhqe?L^OcytfBjG at U-=!vkLr4RkuRdz_6oU#e at JuNQ;D$<@vna!l+^8k
z$X>Y#G5)Nsw-LcY>~gw1#lQaTN(Du^zCTc&a<pg4_k5+0*C!rf at L6h0kbo&cI~Ai`
z&LC*h`7CWhBA5{7NcbCt*a%1n%Z8uhjTrHjV0|$n<ofIsBDC6kMB%t|y?7m*gu2V<
zgZ8RWb7c+&FFK243XxW*VTBNZmlr at YNwy<a(vqW3ysHqgcaw-WJ8$#a;9&BB(7Uu^
zNfp92W-u&!Qkk`L_v<T147lxsVpaaJTVeZRV*(L4krCI<*ZoGv1NDNJP{XsNyWw5F
zaU{uECxoK}>+g{##XrJ}uw0kl)P+}$mfW7N`}PGk`DJ3)OYA?)pnN07Jvzs~!sL2|
z0iQ7iGukWtyL>t32u!$w&%(ICT?XPjrJYj{qrD>?S~}$DoTig-HeF&N#E#B6c at RE=
zgEdBTN*hEvZ;m?A&2Tl9FJq}m!)*Wd(hP-wOlEC?mvR1ABSa#rg_wW+;Ii^=3+ko0
zf_``%fVSL&;U})ra_y$Vc?;@S2RS9;FXx+vSh97FQ$37d)y&rosS|SjnAY5KW~56t
zE6m(>grMh2LNKH3jZ3Wu)4y9nYd{dwdu%gxL-l5LLoH+Yw%MN}@7}?O{cxvmP_Yai
zH!@_)+sbD_X86V(eB{j~s$xP-c!YG{0=O+xVk!h{gb_5OVhEm~j-H>6M61$bxPTs$
zIKrnYwf<ci8F_B%koWOn<KlnQrV;ArD;A4L*YU?PNo->Fi at BRcj5iPcCJ|uuV}SAc
zvy}RJAg(`l?!NwvrlGgM|5BAEBE3;Tfxs1u7%P>2Y{;{c<>F at ivjHii4$|?i5Og^%
zc7XQ^Xl*kIxjz$fyR>q<KwMY$dfCuB5V%S(JktvP8Yr_~?E{(KP+i;r;hpSiNXNTN
z(1jC%?>^iFv4<LLgO-;DcuUomM1p%^g4w5t%yp;<MX&E7lsK(b;&iO at +<m8aifX2l
zC+{qQ<v&-6AQSc at -d{N&_Z;@GoyMr!bVyaonTmT#(Hz;KQKhzmOs^cBuX{^A+F)}1
zm}TWCv at 4k|*{!KCdG2bdcDWs=m!Mq;?owM2+hxm;8QN{Luf!3cOYMg7WV$p|W>h&E
z#(486jC8$5ot!Xt-;33oMz<t at A^`q=aeEj;=GW6#oG_Qy4{Vy6FgN>ULgK!ck;P%4
z9Aribb05Ae-vIp8VW2$JE`aU|V7?OhQy4>%GjI#|yMUlBD9G<7A*ZYSB}i~_7%;t`
zD+u4wO9*3lEtdQa=<WdeJ6TF5TD}R;TmUrTesSg?;%?+C5TF5}JB~dCiQZMs0|Xn?
z)<D21z;p`Un&bTT&TBw>YD<s*L4chG{?kOlSBZpy{R7A#x1`a%cz-_XLnb at k--o-&
zP^Rmfn_)UFKW!L&bJNObArq7+2oEgldbeXUrv$F%W-#YZfOdzSIlcsNh{JYa2s{|T
z&sST))s%A;9gU2$&>g(*H|NbSYVzPeesflB5ZS+3Cv>o91s28{^7 at T8mD%-2DpKKJ
zbnxH+{5(wW2<O{C%9IMJK3m7lgBumuVSlk~abOGw>%z-hh$8^cWT>f=@g99<zs{WO
zf$nH;iP9J2M~mzS;HN)7a7t-~CEVxPU2mNx;S=R(8fh+GCP)44E#c>7igdZizy4i5
z+^L(G9%CG1A>fW=ve7blj^;W3OpbC$=D1-2>a`$ggMC4e7fJ51*d)d+!6Q_#bT?*T
zY?6q0O~vSWw#f7YA&=wk*pUO1O}QNaw at dMuKkXYGIum{mIhyr2?(RKu;J}X)KhGMN
zhzTRk&NX=nYUveY#Cm1d+jJeHN~sBEaF$$CiytgNJ?9D|&dp5mAh_*DvqGb-Gkq$=
z7wF6s*2K at xlBd-sMrSTa<Ys19#^_P%t;2jg*L)W48T8rg%-3N$Z?@!co+XDa$qyhe
z8~G9Ph$bHTerWQ}_?iHH*Nks*-?b>)u*@-IpI5KkBfMTTaq=5HeJ$#fdZ>G7GDqT5
z;Z%!|X9gfh>9)`2yxHnaB|Gli2mg4215 at nz;=|Ia&!|rmJdjs2fvu}xpI=!4ht*eJ
zAPmNe@*3bb^~K;=BD_yvVCd~%0ag#_WRfpFaUC%13_M~T8b-3jH?2c6WvhR`;7Dp_
zwIF)t)p7cz;wCfkH$v)xz&WYQom5HU&C$p&+u`x81xANcU|7g=RFX^&1i){5V$Ab0
zM#K1&Xk_{8As4X|$Bxg4Mn3<2$QFJFl-aTzg>fMKf5qt$apvP9fe_n{+wWfX+&#a(
zp&PGIpdMz{smPkm#LWTJvmtwq#8z>UO+9X>@EZ!0 at 9Z}deH=_K$q$PTPCmG{DC?0v
zlJc_n=izzI&LOY*eu?c0<Qf<0lX2fdREYj5!ix&gdAf=FMJC7I;;KT_BG9?m<y_gM
z$1?BaXr%Yrv5R2lV1Id%cZ@`NgnA;;>#g|Yf{spmMUZpx{<HlPAImzo4Fw)cG+BSY
z_t<Gj+jA2SEkbh*zj!J#`SN>_{js+qk8g1Nw<5F%iw&L9ulVmkEk3gt6_SPFN9W?(
zicy}EaMjVdu@;lt6b}y63TOW!h-e(9D!;;zKJhyrKI^GJze;3(vk!k(jGA&GSGa3i
zac~HN at RxSI-C=a{th6C)D(`^E{-TfZHr$~Eb<hPNlZ{RIS0(5a9j0vuE-yj9WQ3RQ
z91bu({I}aMJ at rX!#TR$*juLdH?CgwbM^;_U;Yg}6X3 at Q$Lsrqs?1kd<Yp!Fxf$%~x
zn!!ch<tJtJGxgzR=N9C|rG1OanPH55Xc*P at B-|EV!j&!*k`^%;$c#dGznDtMS2lSR
z-D?iu<DyBn at 8Dfv`6Q!0{}Gcj$0idm3alA>QNSN>T8~->lPSttU_R2mbqhRmx`l`^
ztuKed6d+o^n8GBD`4>=_2ubVD=Cq_JfV)Vzv~OWeDQd3cw(TNrRf;;06(rU^Jh&9K
zr_DHF4W~DL3ysg<xuxhtvO*U`Z7T)!e-i#jDQZoM$DfoE%|L$x%H#I2I^E!7JC%u5
zx1qa=;&}*;e(;Y-Mb0lr at R=J>S2At4-CJC-0d*v8#=qTw+L1r2-XO#~VHEJKtSLj;
z=;#P;QHI)~qrc*QWuPOc{bTnAUsHw#1Cp{}{A?M at gT8G1c^O~>qiH?PEeCx5Z*ZS-
zz~}!xKCc`!%qo0OIU0eUyo>jjgIUp>U87szCEm0xY}SPRG^9}?Pd_Q2rOsE{uuC)K
zY0 at e%6W*dn?NdE-hgY53ZGn^750`&~ro)pO)LD*f^SKCbfrBp<!Rx|?UKAfa_Ui&2
zr*4E|b-tF$XGOV3Foh2AW}hFv-?OqIr8f{5;>$h%#pIJNSo5*Loy1jf6M&Ev at T$1j
zb9>iG<)Gmd`CJ6T>Qr|ah!-o$jeo_T3Wc1=z)dSrQ6wCPTIgo(8Kl)a2PPDX|Bj{i
zo|{lCo)=5c@{C3X?yIRF?i+;xYhPRyhR`INtAUHc0vODfysQk1umZCR-Moz6aJ;<|
z&7k-(dVV~JyKO`Tx=mmTd161Fw-I$F1>ubw(MS$VZVTOpr?|uu&hA^%l=W|L1m1{-
zRtXHd{t4THV^yf5?0`Zr_~7yM(32!R;wrT*bbariBFH{J&2Ue-|5GcRBExjyCF-y~
z!Ko0{wXJkl_2%cjKC{#fn>VW^z4=@>6ExC^UYeM-JDtiePxj72QYm2JunJ6<J`c+-
zp%2~ctAp=m&8!Ob3MXy9x$bS_mRnA9oAKr<bOuQuAFV>?qqbY{`I}H@%FATO#@YC$
zO{hI%d9tghilI&cxf}U&^;MN0esL4(WI>py5JSF{m~4D+qPddSm0`HvW|U(-p$TzT
zViU?Y6Yr+dM+;+-!NrdktAg;r&5)e}*jrHKr>s4xz}2t|poQ_Zn?cn+jqlrxN-TkG
zROdg`A!vuO|D$p5YSh8CKSL$pZ;VEkomK?&>qJKlW<H*7ag<XEub7w2!R+D#F$(w@
z{3`05ftOUHrSze at _0Zx}4Q;&_Zl^?BT&9a3ETK#AT5^NU<A8d5Rf5k?u+u>h8l{9c
z7@!cu$7+Ps)S#KVeXf7LIKCbi*P#AEM=W&2Z$U>?WljN0UM at VmYSC4EbWm5;HdiS`
ze13r=hNjAVaKoq>zcP?=&}k{ipi6jCgF49c3q!v3!9k3r+F<ca;LeFc^$RJ#esySc
z3ymS<I at Au`ZCvTM;Dm=DL(-t{Ezb2rL%0aKs+r>-$<+6OH^h`0l8vM@;|%gdj|0l9
zWh9srnmNdcc`|iji^yW}ZaN}uScDLz*McEgO0ix}{1T+8b`-C~QHr5{Vd0TXB}zLm
z;ui^etsOWzg8`c at _fUMY?Lwx9n{+;~K`m-dGQurtQ7e6)i~K^w|Mq0GxM2z&Sc~R>
zqHC^2r^$RS_S-+64!f_h+8fotDRa1vAomMK8^+w6pKIAkPs5Ie{(HXqt9XBF9~_zs
zEbhFLsZDj`dk*+Hdp_2GhMppwndr*fXyd{wvf=S`Y&a at SUDIpOf1CraNeFjbvZox+
z+Jf59K(XdffDT2VUR7*C&8C9NM6(7%M|?CfWH>4X2JoUp>3Sj3ho!bjS(vSAT8T at a
zc=QYStb$J){^u4n%;>Ei7>zy{0C%k;ED&0U`WPmriUTs0TpBFZbP8TkhfXw3rx2yv
zV47&r1 at Y}G at QZbzqepO69cu4<KvVg|Z;38X at 6Pm^Jge$DeZA at h@Ua!d=Lb;b?}21I
zx1zCDJ{Jc`9}G!r0I3u%AQPz-;ybpYpOMcN>XzWwwxXYte#Q0c(J;=h;jAHEHcjl~
z%;r8Ue*|l?5M&^Kf`ih5tLnjX>(Ky`75;NQ>P2$ERrM$zaPk_^DZoi=K!ec}JMqQ_
z)QP;w!u=)Q-hldp2&|Ea_ihAb{0+XR5uFM`HyTkc_E~ks5_mOMO%wVBi1KLyVt>V#
zG@&V^0KBsa4Kwr78%#x{#POwk?lAYx1^DoqDh&T at 8)~Z)soI9eZbN4>i<Mb1D23lW
z<m!azq-J$bL at IUhV}OJt#Q)xghIoL1dyT&@W;!)eQAuZ$iAloT8Q$>;n2zC-y+0Us
zod3!D2d>eexH&YI5~=88T{XjJZb$9SgfphEttm=x{%Uspkjr5ayc+&?h1dzN*p9k*
zB;^L8k%K$-2*a(1Y+<B7OU)8H33$tkd@*m^A=?wxsw6K4$-gLl&oVLHeHbvRwu4Se
zh|_nVA*5nFVF&7IGqddGk13U45(4E-FS4GpwsNCJ$I^SMBz)fv)ZRX6MliP;z*Iu@
zhJ36jdCJ;V=R7MkI&q**&vu}b%wSIKeX$GGeCk+EOI45KaJQXcl<u*`BX$BCC*ks)
z=oClYr%vzM;iP8GPHb{G;Fw6yc#<`OkuT}4eX%op&dL>wRYLsQPSk}Ij*sp{1*rZL
zT(AqQ(XMzkkI<}qN#?n3Q>3ppAy at 8MP{LWQRR4 at g0<<`#qBKJVG)^6_F+v!I3=EY@
zXj}$p2<yW8LdIzP(`PIhiw~q2Re)kVu?q}~Zuq~u&>-MU+zpoPVbb7tX5TV$Z<n5d
zq at xXi{}g}scWv8+j9ox1uw%HjfHx4?ih%`?ElhTR2R|Y}Qo)QrsXiKcbActqG=BLw
zf7{~^enkDjFBs>S1HVj2flCLksZ>PB5<2jeaP|-K)(sL=4%xz91LhwRS8jxNYvyBh
zRHM at RPWdG%s}&<KYb_Ry4Eb87w*Ss9xOrhr+3Y1$N$z_(p5mTDAf?jTd0B$A!wY*O
zoxVub&8*z`7o}3yjp~VL3C;6KgWCzs-(IN49NZ^x)@rqX8(s}*W*dMi^2Z+3QdSIF
z(*ukvJv-#0e~z_Zb%WzwKS{Ny at _~rTJ}(c2FC|pc!>H`vRKogLE&dz8H)`>7<M49;
zr)%-E<M6WpH__sMjKlwshsyYyv=P6Li})Qd7;Ev4ad-!OB~s`Fal4}&@71?w*V!Fq
zP;*S<NO_1#Sor`x;R-Ly4x<Y1i}pi4aWUZA*_!}28et|)Ym?f<#UPVLy$Qy(NwPM;
zU<;}Sh}b$VVk^X5H2BSN_)UmU)Zj^{#|b(OaC at zsarjn<PtwX6hu?%a#=k0q5te7>
zbU1G{ZnZo^VPd4iAuuQY_JDw}K*=bP6Cq?IpX)v<J?n1=tC{{e<<T*LWZ;MN5heuw
zE0jmRto${TnMfNakFZS1;}7zTWwl$o2!Vu#mR%n-wCsWmP$0- at mqx*)E}$U!@G8R8
zliw@&+eZq13vqrYRHS>KMv?A)nM at 1XI6guV?5b$L?7b$nH%}2J=_E{eN|WH$Qy at W9
z%V;;2VEf?s1eN=V1Y==>@y9d?#vjXM&Y_LtBNA-CKQ8CBmaqt97-R%xqb-7)un6df
zV+clv_X+;{QG)vb?y4<<Z^sn@%=u>;oOSF2&N at aY*hMIKM62MDOr|&OaE$DILYi9p
z@*@pT5eaE3+o^Gt?G%xa20t?nKSNlsi?E<JLt9~nxQCY!b-<-RLmmp!F}GU at x|M`@
zx>S}RGa{dh2Nh){?LAStmdI601ZY6<blRoL1saq3^TsSAyfxl3tY3*rSVdUis3xbZ
zqnS(}+BiN<MlWgjWLnKTiON<*RKiYeYv?3VP=!`0+xMEQKPUwh2f|m=-qVaJesH|v
zTRSPt5=2Ym at LtZZ1dU89ND0criuRspOwiNuf-J94nA9;ruI~kXIbI<psCaW}?`g*5
z<cyb-1mp;j!&$wN9XDhF52c+$wwX*D8U)I2Xu=ex9-=jw<NIdz?4xFOgfMk9(af~9
zzWZ1vcOLDBmGAioQ?pxUE|Vm1yv4;bf1(#{0lg^8e=^aF$`*0F*YEOMX154T7IzK@
zDB4;3z0*juq8yEiLf9A<;){{$C-o-u2PvY!bkJpct>2~feJWwfy%}ib1Nbp#6v_`3
z@?cz+r!LaDP$h&Pbyhwga9aW&nD`#IfAd#`T_O?Z0^?*^p5#xN9AHF9H-e33?Gg0c
z4cl<Q>pKC!U9~vr6WmdYQ$N8cYjN@?xSbZ)2e at opgg;LkG2vqde-|xI{{$aXl>G at l
zmN4 at Ze4-X-eZXZzguOPx`Xh$lgkubpPw+8%gHP~DS{(fZchcf|pWvT`%QO)>V-Yv(
zL0Qj`2WS~+pD;|(;<_K>{#-3?_z7;S#f?6}$BL36`y^tlEX~L8$_E#%1~I$S;Vdvn
z{Wj#{{R2_y+`?I4{beG=wtIKIwe#e*UA*4T&2%F>WU;0rS!@iE#2`o}i%Z)YKc%RC
z5;<TEj!|w0_uv_?!oF)~#RC~!eTnj-jCaXz!adDX(_RmU*|PS)5TgoW=2e>G&!^vM
zuiQwdP6IP7FuO&5w${$dF8X4ynG&-*dwJ?{`nD%0M8Rnirka+;qN65P8JJUsu0Tp3
zvi;tX+wRng=n#AhFg<DXkZo20VnW<utCYd(@&w*eWXL6_n!|<DUWY2wB{vWOvpP0u
z&Mr<#X?kdM3Z2_te2*MEqPGV7Dj-hotv>^)jESZ%H<kx%uk|@s5gZzwA3%<MUAafH
zyyejgDr<&k#x+sB#1qkz&=DPp8$xr~joQwgo~lx9&E-j0x!zLN8cZy^I^+s-0sk9u
z4?<Gim!V7BS(~uUp~QR>;g{37IXK;1a?K4}x~w;{awA3oO7e{DQ6#H?j;``?qdsL#
zS!?fb=EMb-8}+r-kS)Ys*T0{NYG_GxG<L$7!|YrT*8t;U5Gn7>VVP5gPKbG~9t8 at Z
zItmoBYm5A~j9Br#!zqIS#HvZ}fW{>rtQea#hg-K|DhW{5WGp=2DU(G<a&R|fMZt&3
zH8g#L1-C7VGNout4t!7z_+>C)X!XN;Vv^zxL7)pJ&MxiR@?QRDD;8d@^(XjJ;p`kf
z4O1%cTa}+7NWTesOXCS=e!NicMqL4Nm-{(q9bu7b5dI5Vq?O7j6zn3fZh)C<th8c_
ztW}>#n5|tBafnK#fRA2f6|hk_tA9=Y%ZASwvaQq=@|;qsfd>M5BjE#RuPFq^1(*P0
z9ai#o;7_aE2;vH&=>yNzCa|(q>SB|}_ at vQed;}&q;57!4hHL?lIv5Pg7+zbBAhhaa
zhaOL(3iq%m`Sx0d`Zo6G$jCWj^KSG<G?L`>OT<rT6v>RZn>ruKs$!%3Dmq;Xs*3Df
zZzSIQGs+TaBmL{Y4b-}!a18|SZ(KdW7X#s$@c+5h^ELGi8ll%X^{f>I3|<>CuJ}<b
zJu5+oeAApm`DUsR>oJoH;5#^u>ow~_esvC|-uv+q+_eR at o&=aB5jEjfpm;_$`n+*&
zq3iIKhEv(s480H7A6!l_u(S-zTfo}89j|Lar_KGWx-c4UJ;0sKB{c#TpC#m$gE6{4
zP#$(UasBV*-I#%YhGUwvoNdapvhA32?EVqm%{zbm@}-)|XTrPUdlQY#>fD8^FDyFk
z&>QG)Af&=mt3vUGnYim=)LNF9!zpUu6w#C(Nbj7kckKr(42aeE{ovGB8`LDe0Y=G)
z>w4M#){p96|1vyh*HBN!)jKbZ`iB3=xg;d><2bHHeQVz3v;%(^$F)zqhW0eI>+M~~
zCD-}g!YSey4gX#0l5T#tKUW+hL<U2KzPfL*<Pr$;+yMaZPyOoX9HX+YZup-9pzRn@
zq*)xP)JI5;pmV at v6LZXn?0P9|#fPBY2~(W7?W=Z2H%Y5J(1GO*jtj5(GvQwNfA`fE
z{p+SnBslzk&7b`(J>$tfr;HBua>>8&?GOJ9{fxyDKwsm}gr+!KxMz#zHAMgRLBO{u
z;sam#B+au8nip{_fCc&&YW(gV=-;!u-uC~cdHpUFC($c)V~~MDAunb(cMojLxq&*#
z5miD`<wi9HGU4sN0KF{*$g9dBE|^tN?XPJbgj;;A$!x~t9mUdXLp;#NcF~kV%$UWn
z)uu{O4GQRMjt=qepVL0WrxfVJO+&bs2CHsVVUz;8+IM?UuWLfm<=WEU?R&?b?IY>;
zDT{q}b{FrFX<nd{_iKfdjrwFy;7hCb3piyvK;wq^;Euy7poifuzP<^`y<;)$V0R2z
zqEs8h_nmUdYR~rxNy4y92HQXix<(;u6Vm^)+R;B_V)B&E7b-prW-7g?lA$&oqhCIM
zj&=6HE4AL(3qz7E#BP+KJBz`CH at DUtMOm^j;%*_5F`~)Ar5kPiV>|{!8tgw{em#zw
zO8jB-KKB;- at M5chxkFsoTS2*%qatj!VzdhGzG$pR(xx9tje2mt1>Tkp`FXQ!^v{;>
zIf|-WaiB*`5|C=n2&4oa{PXqUlv at c#Ma|S~)%Ec03s)8Hf4`wsdQY>rLsM?TuCm9r
zh!BK#&4veuuEC(*NC%~y?zWjKVASns-8+T;%2J639z&f{;onVjmH7x!zN?9{SCnRq
z1`!phB|>LxTdMT_aO6m#Nbei*;)=sB&)2|P0|s{t3HVj6j7su+-Du~I&9^5T6~o)O
z`RV?=_->4JcBw%H-hK at IMkh)291r~!Eo6OrI3zUM`oZ4T{$NEEzhDh@&0j+*{LZha
zsrS$`KEo9?5Fo#_!6&|~g_QmYKZL;xGE~on6xheBJlKwKoHpv-`}1IshF_(Jf7Xhc
zeW54h{U#=7EMJwwiLynD`ZE=oe+3UYik+Ig_%q=j+K9fSnmrk^t9}(u?srwBQkg;&
zu;;g;mY)Omwl$Dlh(h*3ogX5#DWfoDNjyS59Q?87tvx{V&Q{cX5={H+acPSc*?;M3
z(<bgh0flRrj}_em-9Ga;`VGki-*_DLmK`0sT9MQ}^E(NsW%sf-z4hs3Q!hP#*MI4V
zp#M@^+l$ZwlD_y$HtqgESWDga%(`9u#m7#R%vouj<@M}RaNAw!Ol)GG_-{(m>EgpD
zQs-nZzlIn|Hz!jUP7z|Xa!~%AHrARlcW)j0YbvkBj_H1lxXV_DTXzEg>I7<PXKZH4
ztW*dMKsD5d{|xxClF5A=HDlV_t*TscGhTE8%`hvR;iF1gL<#>}-#dJ+{?za${V%p3
zJEpEViOv*wIG(%!|6#fZ#;clL9K{K{;n2ag1%ZP>L&BxzciKl{O30Pu8Sbk8Zy|o6
zn0*2(vhX%{ZBd at DJlenh*G04r;^iD;8fAu_G`z%Ngj_=U<F06jBmr}Bp4Ig_af&N8
z7%7jqjRY1;=3{n7eK{RCyA2KcJojOJ%&<iHl+%OW*viS06%C7H`G-J*-6~LnPW0EW
z54UQbpM at Gf`<_z*-D8RPCctd at M~zUL$Mqjc?t1I9R@<Vi@{yxG%Np?KZD^p+-n}4x
z3XGqUG%mjG)<M{gkJdG|YTXlr+w*l3bo<1s+4!PUC|{O at apFTUCIB>y7GV{{)P}vS
z{b~Fn+oN^!4n3UR^{&!__-{o4bu*l;=_HKye%>*LRn%#)KJgdEW7za)h=Cc3GTHdf
zmd($5OBlmVaCS0s?3uWE$S6h`hv2-^sGTf?6jyCRva8M|ecdgh?I={6g>IJX3$qss
zB5ggm)`gYL&|h9<Nj5gUKCQgj!)_p6L^DrOFAuFEQ6nu0f9%)S0Phb at Zsog;wn2VC
z>lW!q at Na~EcDxYPZHd|l)A%jct4~W~7b(kyL{SAWP=3*p0$hi<9|UM*hBl!vwSY({
z4J2^I&x{ZdJuoJK8#&d3yF67rpYSITN}86h*YNIm?Pp8yW<tL)BDqV%Gb8VTc&PAz
zF(Q+s69PhE#Fn0ShhPHPlSh9It&&qC-2qVxV00uHb<5v)a0i%vZiN3Vz}&9WB25U)
z(VYqWg9N4%nMYuz0Mm&aATYg134t*HrWaX5U}&VNhYW%!08x0V?d$mYpZ{S166^yS
z?wPN9Xh(NEQ0NQujP6+1NKy=-L(0!v!koMN)xY~1Siu1L<CFrVywJmLc_C2vryPCu
zS+xh?o4RmN?FDFj-K%ZP%6|ZSb(Z}i at w+Jin*{xFN?8D@{0h*f*~X at v0TQhWBQ0E^
zwuFh=Wvh(=p|xr4%@^fA1DfisFUk`D&7WaZyN7B$f at Xo50*k`5Ht7Yso2Z9ieV`Dq
z=O3qXoC9|q?cp4!)#sD?bq>q;l!H`G=;ETIJ+}`U7p5ps+s>vz+1H3{q~__{(_U at s
z22&7O%8Rn<ylx?e+IKcdXI*m2j6OE_SWi|O7`9k3TwlT)DV$BVd67(7I8BHYFYBHD
z$Mf4 at h;OA=p7-;I;Ye~T{lJvzscYA_()-hTr>C+H- at 4EuG^jj3Y*;>s8HBEryK4C^
zNw2liWq{FzV2p-Bz!dIxz?j)Pecjj7qt^}re^&2wE9Ed2{z!Tf2qFV|XMTJuy}TKl
zeE$dL!L>KxHK4uI!*(+_uD#)p42!YJ at FC;{_eYw1Z`^qc<HGM8Z{$~LlmK#|Ul;hX
z$Qq%H+y8a%^z}?XeE^d0PrZ5aPR8`;K=qy1{CFW33d-t6i1|V3_Th+iFOihnJpUTd
zGp<?RI%3*jzE-jB5t5QJrBd-@*yX|>&6?JE&BM6sp3hmbeBqoWueyzqfi*&;9Nu<(
z+t-Gj=gSVa_GK75-zb(cebEc1GQLs!tTl9a(&(a39BJU)O`UMOm1djN^>PQ3+rIc;
z%pfw?S2uKf0Xe5wt+Uw7*YHA%HI`W*z_OHITb9oR;Wp0D<t(4pFvrTZ;ilG<$A9|j
zT`;xAnzHHw!cA$E1*}GW|EZn0)J#qGnuF<$bo$x=CD`HhzKn30m9Ketvae3s(Wh@&
z^Dr_ at T=?g4quUcs at 48fMLFThS4t5E3`-9}+;@d();6~K{2Xbbn)^{}_g~+qJgNhcn
z1qJv7o?Q4d$7MavalCr2tbQ7<b^&;-f6U1ue$~)O|36{M3yo@>jvGj4h;l6wp0iKk
zDN-ymP4k)cMzYd|C8iIf;!Yo`>lwo|3ky8<JnA4D8u6TlEPEYVC at 6Q38b&!*7KQE<
zm})4!r%-Qj-l*AT&y#<=s<yVfu1;<ldefK{D#+av9oW*Xp4`zc=nOAGF4#L%7KxJq
z&paPWxNY<H5QUB#&-(f>NR>X8YG^@_sf9)7f!kTZdn8=7E=f;tvWcb)6-a)H4!m7E
zG*Z)!ej&Rpq=IoS4A_Ar-OM)vE&^N>xCX$r0WKN1Y~bnxmm$9G5923*FbZ5l;KC0u
z>EheI6GHJbdf}d}H0jyndPaNwhBv*QS(Nw9oF$TFbCy_#G_B)b6LPz{iwj&$&`ADu
zA(!)_xX`^kq*X`3*FT}~pWa$-Dx?5qLbZhw+Vjg_`$LZS@;cfORcWt~+n)pDa8)}R
zPC9{mUO+!LI_RA`nzW at S<v6rP{S$ok1(YN6 at TI~IA~!5b(QaiyfhPm}>)V&p>OoVS
z>5JJWcD>uWF{O+cUF$)+H_J!ViCr%j3)tHAp?2QeFfQ)I{}FdK-*&tAwstAimFlcG
zc3ow>20L0;bV#O|K&KoGNx*1eo&D~$hx?Eu52HQ3nnVV!?#`uivIk5Nj`Vt+z9bMc
z%qp;>Jo_$XU+6j#3giD9 at I$j%YDVa~0xKeX9nj9I(*ynq!(zY_3y;IANv+(o!zsH{
zcKvZMWgk=yOlYW~g`>7rnqwDiawsm>=PPrt10!$|G}?fs8C6(}p0CAQFQRUwZ}F!W
zQA^(;zm5a92hRV(D-mMx at dyS_9!bGiUwJ-<16+z~!%&BLt`Pg}t|E0+RzSJ5+=2 at q
z-nrRZd>9YDgu2spzsq at q+3^b(aq4u8O2uE|MVHV_^ll~o<Pyr2eXDn}1I`~@sUQAj
zHro5*-Ppg(Fz(=t4{?2B3&!}k#pC~-uKzo6d|YjyW}dRC!p1mB8BJfSio~+3Y^YI%
zG{s90|JLv`84?Bpa1vu$Yxx|0g#bSeS at qBM<6`Y2TsiT?Td+uSXK!RjBGSfZxFG{$
zn~ulelfUo%fNsb(F?F#JtU1Z6vi6rl|K-}R{)^nqHf$(Sq*m at 0>3w}Qnm+K0$o_$C
zV5yWX8*=PZhMEJyh(2Ye6>uZ_#N{6FKi){D=8F at X3?X*3r>7i#nQ%m;$<gH-de08s
z98&e`^hSeuw3GWXQlv24U&xsdxTms{pwaQK-!4d7+4XjGs!<W}r-oa#Qp2m^mkI8?
z<iM_XZwi1?vXb`#vY-IsWy>u?jz#Is!GK9ZBy#^fO*W*-rJ&m at J6#QqTI?+QM2UqT
zln_~DZt}&9oO!?hmf0K(Kck2t%MSsb3dl2N32cBXvhUJ+at^2efm)Fnbw3`$-TpxB
z4PrXxwyB_0C=pNn17%tbm#ls(EypIq*P(W1DgyR8bK9iRzE~^3 at r{r at EIZN(Zzk9s
zTS$KI+3x^$u6UugrkI0SDkIsU=$<@HT4rMo7Apaa9^-nPc^S30k8xjyO2!zae+^9z
zpN#AVqnR^I^+=i`K)ev2a~XB!=nmQDczK{Ja^&+lp9k)4&>Av42iYTxxHui(b{X}O
zT^y^N^PNJh1>TZBt*Hxf0Z%eO$0P+!hOt!<T)2EW>#1MiH5D<;X4;@$48&?$I+CiI
z<;?Zh9IPQloeSFyx(lN|@g#Gxy$3Szr=Nb#ETL`L{N4Z~=e_^IU00#_;!3cbBCcfv
z{TuP1h2Ov;_=+4 at ly%z}!+g^Iv41$WtL9b1WeJxo7M7cd%y&#sQ-D9BoC*B8 at Ci)V
zCE%MnQAeYu at lDF+d;GUfV5Sz190un#aO6)tHG72CCfv672V?H5l5qVis5!|Ace;Y6
zGh=&v+RAaz!<r`BQ76i`D*kakg4bU`6Fpy>c&`{@cd9LwLq<@g*hZh{KqV9L4?v|=
zkCwo at Q5vuI1&{7{m<X~E$gr?Gg!8)40JEjm1`ELqa4(DdVBa|#Cm2b~;=aY at U7%lC
zxXuarfhC)!cU3*X=#Ks_Nva~vC?vQ>!WHQ(tkTB4UVsJOcRoQYhnrnOJutz|hMQgu
zZsfq_&xah|pLF>LUgxc|5FTHlDg8Z9WWs77#L8yLVMPoYu3i0>&+_;51r-r?B@;Iz
zRKddQwKRCl1m|5vZGjmguA)|Y&U<F-BfE0X7c224S5Y>}8DD=DokL2(9{?g}*o&AC
z*&ePV_J;I6>z=Rs$5S=6>*nAM_Dr||%ti@`uGdgkboePg=Nf9sf=pX|F<^OpXn8QH
z7l|$L(rX~mJ@~<EsN-ZvQHwc>>HU8b9o1Gah<6UzF21aGfcLfzY)vvuswUz)#7_9=
zHPp->l39L6{Gqb=sM;Lv_=mF~tC~`ju1b=2!uTOu>N(lIBO>2?sAcT=!5e&~8vZ}>
zEk3gw^#XY=?M9u at I2!(AH#!mfszEL|@zdit{6ROG6O|H2UH?jzG=qF+7fgkE&c9Z|
z#N5G{WckuwC7eOpv729o=}6BGIY_Gj?LCOy+dH^G9$I-Nj#_H(=9^5h+SAliwrlQ=
z)tB&Xf1)f$NgQ<tNp==>oKj&dTD&%=2DHyyl`x#uN)j>!-fK>%4aCKG&z~q4EpEVv
zf$JG(_GACpF(n#{?wy6_aA5hw%rI8;i+)atnQmM}WevG%>jH6d3Xi^yTFKt`C&b?z
zF~~rb8zOns8=0jHK;XX-V;nRkn<}-g(*b=t1#Z)}p6LyQ2mbDPFSuCoL)`9Rv?TqG
z&%v}lrL#v4nB%~$*^KQz71B;Xd%HJ~)51{z8KnPeggme|2snFAci#cq-gx5JWqcK8
zE#0^YiKVk?U<L)Zy#-CynB&=VMMo<Y#2-UQPWAsLPHO->p8v~(&%FVrNbuhl6Z5=Q
zOiX`1tj(k5&yduQ&WFJRad{ukkg<*7Q*PV6xox?&q$N_yB4m~Aajf#nhr at EYfuyCY
znxWkOk-%cOd1#?$<m~iJyQx?PTMsCqp&O{3tWJ=={-(s2DrD(le+)JU8O6(r#OQal
za3&v1DZErMn=I5TxT9KlvqekuvN?!D(D+i#JL&W_uX7x49$o-x>t~bsSX79ts2<z4
z6!ObhhTedm1o>BO)9~MlX%4!aMWkT_Xk?JF5)e at dqEs!>%;umd2|<Kv6xmP)Xefjt
zHCja;0UC|6dRiK&>;!_wQ%m!_IjAy(pkZrhXpQ{qbWVy!0Y*4e2Ej<6xxXR7IG|;G
z-5k^<k(B}>U9IqP(^Gq^37T12nrF>H at RM-@`%{ZO1qo&m7FedWz!yL^q139o+RV*r
z4%!qiD+M%?@L3unUqD1Bi0){K;+unFH43ma3Pd&l8hs+M<=VtvH3u1MXpFT=!i*R|
z8vJ<=%5)_Pw^Ku%bi<7*jq!65qXKhDvj$@^k*Og}Y+^+q;BdQ%vOHkq^Y at WnAkw=c
zTeZ;36S3FiCzUGM<VGD#Xbw`}80sIW2aGFkqE=RLhN-Emr2O&c9YMXjj5psz&G}AE
zR5;;+e_imEO;k9G+qqbkq+){6ccTy)41)e4ThP1F#7;s?#l*M($A+W5-c*L+x__hL
zEMkNG#0uD<r51vjI3Wzr{2O(}X#d!$iT7n||3-y&ePS2l+%mCi$==ouTh*(CAzR{M
zV&Xkl9PLG?SbINS0zcr@{JE<ckjHl0V_fmCdQmQY=+VqPOdtFxP8pPR6(7&<MO`QQ
zyxH@$D#7_UoyKPhZDE`L`V!^{KeR~aWwakz-g2E*mXE-*i1;-iCAe9r)`zdCRo)06
z*6hQ>Ol;dV-c<hSF6m><9%}HC{83yO?tKe&X8ljk2TzdV%Wt8);8lfb^;-11(u`e!
z-q(N-w-2XfrCZ9VV}GKv^UEf_S-T0#HGJQ{f<z{Mjo-P2nrCHNP>B=M#3ZABwtu>7
zMtL^ufHCX>YZK;CFvi4Y)08pX6+!Uh6*o*`(Bzq=3_`{xD1m!9Wtv416z&={K6f75
z at p-pVb6KR6sr?&uDjgNS%jM>!&lN~nLh_)XEG?s&cw1PP7h|K_ at 1&B!Z%o6K1!$Zy
zfTVrO4ZgH&+qmrCkj5NEmS<4eGWd;ZSj&1eu7yU*QeuW-Eu&SSP?bQAjyBE>9^UWI
zc)YT5RHivFpSf}K^A)MXg4lka(<4<*`g7T-ZGPR!)Shc)^*?tTBYC$&msmR(mw9nZ
zFk`c=WXBdc1I}G<Bk1nR=w9!y9NO*@^QIp6gOP`aj08#vSmW at JJl1S%3TrW at t6Yez
zR(^&|R(^qGD^rjNCFBvDapS}J)Iat&<7ReXS^MWB!{Q+$y3!dDDVHFhDgPf`Umws^
z^*(-gx53>QZbJqG#ci;`Fp#NGs0_yB<pLV-DkkwRIwcetYI(iW#%tmP8CMNN!?&_B
z`-o;AQ8Ox3N+U@#Db!3IX at -I{K!4}lfm)y6_YXL`=lz`LInQ~XbDrlp4p_Q~iLEe;
z5KnUnLYkK%!DfHN-Hg*d<18zvk9$y8a)r0xjb&ZgwkR%JEgWQz{qCFnv9>x78t^u$
zNw5o5UwZaidc~&;e^#dEg)-WYqpGJp&zIVQpw+4u>Nxn%`p6eDGOJ5~fL0pq7Gc`v
zpstzVI992?1+fQ9duCyZt+1ru{-f$T4141+ZOtzjKFn2AZ?&Z**LWfsZPPvb%cWA{
zvQ*ln-&z_~W0)EI%XDe~14Ka7PZz9C+!htQ6MU<X at lt{UKaxfh at F}b02dQ7Kqmr0!
zG5=)3i`gm;Ylq^v?v(XOqW_tr)pu|#UbcQuUyd=nd3altx>PD1c`fMteFYGC@{Jm>
z-P?gb`|4MHkx~8Ys2hOQ3ZT~AK=T=q)NeOX8R<&4-8dV6?$-&@JJ3xf^cZ5fE|m}x
zS-a{>Acwg~TStVt;AFxRCF^nNO)Tf)LFvM!?1PDd)~nxafD?0NqM_Xuo*oU6v$jw(
z8X88!)1x7BZZ!Rz-)M%>h|}jrFDM;p`@B}%YsP=AzH?YedtWmkLZ943MT~E$uWzC=
z9A9g=c={@F5ogfUllL1soe at ZBenVXu(bR(9P>(QeMg<tn8q-#cef(-?lPZUiu+XeR
z9$(`+6638hP?Qyx6TURE1d|Z<7&~=6Cb?}6cZ4nrW_|eP1?tFesDjZ$T?IiHWL}d0
zp#Tpx?Q5*QFUmWi7oVs1dEL-}7FT%Za3jIQhu%WL(!We!RAt{nXED!r$5Fd(p{|0s
ze{M5Rsc&wfrPvcqZxOMjDUeF}9ZirtY=Q-?{J_hKX-?(@hCX4?rL_ixTNiuJ-S#H+
z<?pC3OMek$fABl%%u5XOY#k}ZCMSLM&1aP0HY#R;wJxXpZlej}`wzXHf6OsN9h5Cx
zLrlSCeYsH0;d}yBcN-06J-*yaQWtNdFQe8c6m|#Qz&Jux-9aS`59)(EsFLwH^}`+X
zjS1Uc6+mUuf>fS5+N?p|TCsvNVivQ0OzaJ(7TpDc+*PXNE|4k8sBL%AXhsm#a~Jg(
zm--|s*ZFmax1?fbi+LvHU_mE>B&7w7Vca`bWI?Af;7bJideNEUncnf0-rEpf%%!GD
zWw$<w(&d3&f2-sbYOog##`+t2iRz^iDHZ$&I+byQ(*1$XV$7%Z{egxt8mZs^K*J|Y
zG(CY{F2pQ1v+wxou5G-vuD;IpjZbQ3o}#q((4QF(s7d!xU(h~&AC-8`tOooaXmI at 6
zOq<X6IM+n!BeOspXe9aY5eD5aRMmYno^g-5dLIoFE(F5q%PO~lI7 at 1zGvcJ{qbC1}
z`j3AZn&~;PE0AH2M8}flyO!x5P`W=sGo at 7BpXglB=#4+o$u6cR66x4EnnP(iW7#Y1
zh($wrK0y707Fcd#?5gJ9waezMNA9I{KKAGzWXlhuzCly5i6+7GqeHqdeSx>Ji84Mw
zWgMG<6%@rket;^-XI4`-cHo(0S^y=}(cf>p at VoGZ-z#b9Rg})A?^roMjtoo~#lRo4
zT%8}4?*n;?a_-ULs+;|ESbXyq9qM!FZz}08bdqY|;Qy2>87;SZwA`A}a%*8ZYS&+=
z$PKbNrB)eyvC_6OZ0ruSdH4%pR~&WcFLZ|M*-_h{Y79*doQ#}k?-}Cf-yf!e`_Sa^
z3&P+<)nv?nZKQ8Q;Y$IC<riva9~v|jpF8J9S=v{s0OE+%_qErYKU^Okv7(zH*zfVP
zeKS#W at 8=CS3{eu5wv at PH^?L0G`$H7#A?iE*YeQDqBL2pK8-{Sg&FY`ACu;9nHs|Av
z_oDU?HGaIXh6hCHVnehv2$S-I0?LoO$8VxC9|CF{MAbh;BcbimLv#&!TO{}Jc7Ezk
zT=e7dZx0QhO~q-0LCMsBa{ldEPxim$*%P(Fz&oMr9LlznwGnPl+i5l~;yM3w)}ufY
z*042=s6K(IGCGG|=^@`fD_RcYmT^}+=Ytf7l at iHUJ|CyCkv-~Cfw(BITL!&BZ-Oe4
zc~ixxyv86E7YTv~zDx*z6r&OoedRUOqep=1sVMh;)E`VV-jDhSlO1K!BLk6!d^H<q
z9gGHinxP+np`6;$k9u-%o0}PZIbB-7jDFn@%EnQD^rMnAx)5<u%^@_lLJcX>_VP^V
z3e at UL6Zh|MB at uzKO#;jj=4)>5)|l)E86)ne+JCFr`k;h496lo0)j at DDZ21w)cfiN6
zbn`0Ec<unIMa#|9fdO<9S>EV9kCpYSR9j6xOprd(fwrQ$<0{?4?{rKw43QMnl~eIr
z7zqNsg^NN{pSis3y=oz7)86V!q+p8XF56<N%IQrGGBR9&2>Og3!^55ao6iq-M)OFX
z<p~(u3a(jw;afJZnI)UxnzJ45gEdr|E*}x at WYKZWki&h9&L!<8tINcajixQ`ZbCL<
zG}&<-AuD{c at JI&7A1USdY07j at an_TFihQEM>Ni^P$8;rUMj2zU=@A?tWJlxDH=le{
z0j<`EYIi==k{KpKu$;E?o%g!L9JOeWp*F`)i{G2EhwkyV^;kmb4GUhBv at u>>GG+%S
zp><}970V^CBNKMOlL%b7DU045)<DHC8^im*ar7C-mO(U-H`Cy}BhTe0M&BL~b8!$=
zxPgfoUdI#jBa-V)f<bN+Wngx$+LsL0 at wmTH*ErZ>-v68t%zJS|gaBB5x*q>GP>T2c
z6DZV*ztOl?#ti(To*VdOn08<J{3`!8*?n>c*hg5HBB_Qe*C$~vGyg^ce(l~`)?lUj
z{zk(A*AQq0q`I7X-HN(S82%)xA!c83Y6<3YF}t^T+;H^n;1yE7<d6J1YKs+By&jhB
zSzLH81cR?R9>4nZ(7XT1FlCD~+vDYhWiAYUnP~w&TsSX;6GbstP}g+w79?CP+{sXH
z3BgPYDy|(h)7_(mh`$a$ADvBppe7BWug`HhdP<s98~Omy{byGK_umDmJe)uIt(V}H
zfK>tahPk{m`_-cS@#kvty<*?D`i>p6w|%wmK#c$C`r6KE7pe9k)Wi`%1;GnfjDJ#@
z!)W3x2!RiAsQoRY)vNq)?4Z{2TEiB at 6`cpv3ySuQFuC#IH3v~T$bm*!ahKEVUA8%&
zq5c>~Js59M+!1tg1XU&AylxKQkYmb3)$65B8^zvkZHa=Qu4w|YB_F+?+4;07E%eP*
ze$1ot77Z)91xG+07kt?l5w~?ar%-D~P=!M+Ji3IpFk%<#zzFKciY1TCp{|Uefm-lu
zuDk{m6l$d<Y;7fffA%kh1-7k$s1}2nHn92oci$fq`JUlQiB&!-Ex-B%l}v{yB{60J
z?#P&S%_=80h|$=`px;3Hz2A#Vo4tFJi)4&-7Ig at g)@_voiGD4$>j^3%SBkl at k1>B+
zM$F%s-K_<*da^~1OCeDp*ddsjVU;I+RbHQVZP5PDz_jsn`|H4-!2nSI9$-reX8-kV
z8xbK+TjkZRVJ<fRsM8**x2Q3%-I9;0GHo5$;p0#lkMPSZLTN{VOPEVG%;@C0P^zv`
zWAOC8s>hZwtvdv3>@zGjeUAhXv<if~Qm at 7Aquw^Sf|1d3eLxMSs6OKE0OO|wf=0tf
z>)JBtI5zr#8mj&&>XTuoLIwm at nO{GEI$(w$1{*c%L>$vC!xU;!Es~OiE1{0#;VO8E
zHRz!h;eI0(@Kn1N>6(MFp#!s4Htn4Q?N7nj>%h0Aagaw`!hJ6+ID5f7k?G5LYK~%h
z1%$m|1M3m6F|46XS9oc;1m1LpG>`3M^tA at 9n`Yj|3|1Y#I*yjctF8}g9tfm=M73@}
zp%O1Wf}aM_wRP at H!qxWud2{!IdIr-&Rv0u0-H*MR3;k%XN7gprvNv3D+ABoB-F)}`
z(Nrjd>1lVUh5o&m!Hk`P>%LtwM&uxgAFc)a1*{{LMmZT&)H}V7l{9=AM=V9uFAS!;
zo#oZer!RR at PZ&&BCR9=uqf9AzTQ^Hc)U<M<%w8z;D4YpI1<&S;3frZzts-#=j(mPC
z{{wXmjs)$gv`d+Xafk{W8wfGx5*}7RfZvV-x!ntn?|9>*Fvmgr;u4J4Kz+FGyKAPu
z)pZ4qP$e2(F1|G#aF1UMYez~eWa=fILkIn(oIgOrQd(#F1j<y9zl)z8_8e-;ci*>l
z)X&PM^$gexi<tK24c2;7SV|Jc8<=g#i2LeaW&Ud`13>V+r4Z?}hM?P$gW&=)BdDDs
zQh6A$cm?uEC*u>&I6 at B0K9-T9#dvW?|5a)8|8~Su1PjRmh*TWw10CV}<XkIo!8s6n
z+e(jCv^j1*V1rS{rff`l=W+H1?a24j(c=De)y^WzYnI(OG9v70KN!9{9Pj8E;!(Ja
zGY~-+-gZDB>i`UZClT8 at bU`&8S-u{sPnI`P!%U{qlkQUQ^Dd1+sqyqPkVmnYlkDhx
z4wR0?44^^Yz+#HY{|<G<x0Yg_xCrC&eU5%NVg`Ir$_WPF=jCrRuJerZz5>kw39Ps{
zgrRJi<Yv5Xc`b;&L7_G;4?7sWJKUI+k~FMa3-H=TZVufY^jB9S{EYtn`(a0l=V1^?
z;~=V7I-~)__fmd_^A!qAczFiVP6e=;9$4+d>0dg%63n7f*vz1SHJwl6kzq_+g82>P
z8t|}&D~sH+r>o{Af}Ut>)+fW4rD4QnDSv?MT}mBcGnM3_3;FKHe;oz(zF~a#Ot8V_
znaXEvJ;CkE0(>(1tFh<J&Zo)F at un!s3wm#S6ZQ}EYX;afWX4>>Vq%fiFYEZszo8yY
zbdYI7a}p$f8<>FH at gj?`Ftr)JUd+-ys;`hjvt&F~6-E>Ry4+YnA~PRqQWt*iTv6f&
zfr&xGSy_4E7wK!+D+K)wPY9(@&Fr~%Zb7ei2wU_z#tRiK#bU07u!FM at -LCC3M~1PZ
z-xbO`_BSnZHm(Mh2X$}Y4$L-c+f$zSZd+{ilsBTXT6;n1BUc<5xOFT8rcD!Rn{Ud|
zO(SM<*nxR7djF0Go3<rX;GB4tq#QzH%GP}MkKav at 1`1mpHZHc!PW2}$o?g_1MQvBG
zwqFg~2`SRX-yw~C&9m*>qX(wVwwu$c)mwsem|b(*{^+tdsKWRw35Y(sKoYNrH)0+*
z<E-lww_kmd_8q_4WGeh41U*YqbC4h~sxZ;3D6G`MWLp}No6&pS7KdSdXoMzH5wQ8f
z0*8*mnh@;FqTZwnSI%D;Wqme5W19<C-svuUDGV#mK9Vsl8PV{4w0q+O?%W^7Th_+M
z+2X@;{O3S57os{&TqO$F2=Bx4#j<uX)_ejRP#Cimr31*?y?<2~&I?1zvyG9{6iyqZ
zfJk#caA(6jL|ZNLp)q4qm2^YIiQvq;Ws;;_F%v74Nvi|izOdk(UkY8M?T>Rtu}p;{
zec^^Eg1L^9lj6ClAn0D0<tLm01dNzz?4*s;rXytBICn{LDw2hek7c}WaZda79~Lfg
zyivX{sAhvxjPp-CsPa54e%cNVWW>4<4l!QMDiUemR&T3CTvSgxXoTH095s^Q+c8eT
z-!Q^PSdz&2(wOuUEP%MNvbCL$54<EjO&!6Qq2ie%-<{?U>btO4pvYO4J16sHABb-h
zm&5dvzIj8m9%HEMPOt`i4f({{&Y>G2E502gT~oTLc^u{>aobn*2PU?*@-`~8`%OlK
zMf6QaSGNI9coT=27BZ_s`l{IQ#j`^11NLEAxAubgbURUtIbIO+uEBLv_M2^fz}j$Z
zlA^{OXTE76CF3$>%9($ww<ihmrnXBX=V59Kw?GnvY~Vttp=x8RW0McM$8 at m*v2ZCJ
zmnjKqv%GQsB(G;|U!*bidV-WJH!LBp4NkVLH(Z8a0&8srj#N&9Ymhq0WlqK*#^P^Y
zD5f58nNq2f>(5fL4iL$<RxZT#25L^GetZZ|=N*UjWCMDqa$veiw1pLYS at mn0WZKf>
zJDN6+)Fd;i!bi#US1y&*5(lO~xu$cdd8R=FHVL~i8WB^sJgi*=@SrYZ6J(MdY7&vv
z0u7 at 7)+z;Co<r<0n{f`V`#zy>cDL60URNT`s4lZHsunOlAWzD4 at K#0yZ(5pMi&nk8
z2yBH)c?)2S{m)Qize)H3jYn)1U~F3j7#m(GpDci0^12h-*i$MxCL-;$YKrX;z~5Fm
zE<G4-$UOPRKk}V at roxgi+OXNGl(b0pyocFrM4*XAqnoT}Bw>(LkJ)ClTE@&_G+v`N
z7OcM6i!$}13gwcElO}zrPZWSz5D+Fm3_hO6zrFJsQRB{ubE%NRkzAXYc at Fw^slJ3c
zLT2mCcNNkT3H^7}m4m!cPP;Vkx{fxbu?VCcg(;ZhZJm3_NDYax?`*d|NmQIU>U{!X
z=_c#A4vtWTDU=1d;}ei8sh3n#&7P8#yCqGLal>XnGA2~6JC4K7U||jIvG99 at 1z+|X
z<Ug}=acy$Fc5PQXkz!S<s|Ps;XZ5aAoAa?;cqz4gJ(fg%^UThMy&yY0wm>-O_-u;O
z`uo-9!ST;3qhMv3XW=Nv?0E`ZX;T^F2ZFx)aCwiK<3K@`!QX%C9vp;P6w2<)8GIdt
zBB%m&NG3ZAdA35SJC}@o#kLr}eK+6z+iwRaKr^TF8#g|H84KfZBrYFk#ZAR|aY;B9
zr^2!Q&eFDmmN0kP{E7YXf!fytFCLuLtvw029U`K0Xd^!80;blz(DfgAI+x^hJ}s2F
zb6;%lZdO0}hq^12aRT<H*>=}XH at pb25>uaxe-I3Xr*O<Gy>sZp^X_&pR<eJT?Q&?u
zZKuVz$@|Bzk|tQshjVNmg8{hcN9!MTSf$llrXxYZ3R#qy!H%NH)2`}G&{S=y-O)Am
z^N35^*lIy7;>pPRtvVG~hUGlX=ATKa)4ST<qBIGga6sGw+VdEsrp-3bV-5fzV?0!R
zHE8r*j at U7Fz}CV2fR8*3;yxmPI5ir#C#PF`XQH%2%?ZKs$iT^V+%|zAWByXrAUEgq
z+FN0#&ZGEWKwR4guP2~ICqMsCH#FiTs)1~1A8!QW6*uZ_27fB3cpsC$xjHZbdD#qj
z!c;$oQ?#V4+9k}@Cdtfj8HnuG(pF9lAsi?`yqgR4o7Q7_L3U{Ajrth!NZ#+--joDs
zv3ZcKs9_ at 2&R`2SC#ZtVAy}?Zi=CeVZ5U~31G%mHbJm!(!j3$fwZigG;xJ|Eq^W3L
z;bteFfQ_oHoJfaTURTC+qymrRcnQolcRgVZr?RS#J^P(geI&%^dBWvq2^rOwp8Zb$
zd2hxhQ#AFlfH~onhwi**{?2HSyRqrMeD#0CkLIrzGCh*VyQ44qN*g<iT27 at amR*9D
z9AzKDbE;8~Ty&cM<@M6vgqb}%m;9bh at Ft;rpB2CSyjSw!nAa|9g^)RM+&wd>`OC4I
zsU1S5uj8UW-N|RJ>8OiBrY!AUkn79~?T;Q=-J{Z3u>G)xGkO1Rzu*$o<Wybwcl`3Q
zbf5f2;a~>m$B~gCD%Ob!-4_)*G1E!f3m=4*n4W><H~&2|+fn8BlWb}6|4v)Lbug#P
z2}dx}{i+c#(oHY=C$r_*W-A-_ at 3OY|h(EsncS54H at r!S^_=p57K+Cw$bC?B5!t%Os
z=+6tYIW at C&_TB5YvQ*u8W_TJr?hdpW4v(4X6|_tj1g1=PIx;`eqpER`qX?4n>D&J!
zFXlrKRJd&O?%>QjBY?{G&9*Lz-#_U)dnGn?+5G(RjJK&N&dexsN?m!TDQR3#$o85c
z54#`#I<dhT at YafMzhy}wKz_H)?S+;Y>XBIRH&m<>ZOvy#*>oUEOk3R17!jtRb-}Wp
zImU7Z0~FG>zL6~>blP>RtWX((4Mf_?HCJ?NKHxt6wkpR$;zdatR=?;Niaz~qetvgm
zyPSm9d?&E5E~^YGNkMTRS_GaI#q!__hX2TO>3{M#{!boiEDzcpM-_{hQyF&DJ`poD
zK6z35>7Uv~R(atcw9T><R$;P>WvctEGNMw<vW&~=sE!7kO~ILCCL!i{{A$?8&{B>_
z!KFH|rT!_;xpTe@?K^(;RJG2VigjU5V0crDU6>LQo~Jot3L8rTf7{p-xCK=%fahvR
zJCKd}v@<90TRjgRmjQ|W%i##)ZRlmoaEz1}mJxv4D00o%P`QYn at dZHQS2R|za*Brv
zBxk!qICyF+o0Bpu&<Q^shVk96Wc5HUm}0pyg^UT5i!0Mt2x>chG{zZI02p$cW1%LR
zD>Ih`M?!t($_yI+-w at 8(E;WxhZS_03#b!BJFJ?L~q{muap$s<T(lJdzz^Gat=Y+m_
zH4k2x7&UX}A;*Y at xhlvS4lqJr^Q^RbjRf~u3cuR4Y1LL+Wfzn8tt>v``_~7;zF%!t
zjno at r<^)-D{)Dd&Sue`pM`e!l(PK%!%y at Wuks)><#*jboTj;`NUDO9+<|K3(MV%8f
z-IY%JCZRWToj0xCl0Tt+mY}kDZ9y1OhWnZjZF$mnGj0YSwt9l_0mX9zlJ`P|;86M`
z?M6^z^gslxZLZ2xn?GLnrt_}VTMEKp$KzRO*?`=b3rh8Y(q6<x6!|s9dCyonUk=j^
zOJK{UT1+9|j>=Y>F+Z3F>+RDRm-XEMbyHR^*z&8(fBsKjv?1E0avEPI-wlR^qsP21
zrR*$O3Jo-=qi)RkHq@{kwd%Z~`w93xXh)+-HTEoCErj2+{t(oTtU_1vO>KeQCMVa^
zTZz5-laplu8wd=Olfr|>Bw;2JGttL4^0$=w5*=&`3POOHP3el*!4Xsy|7gtmGbrC{
zp+dWvJRK6caA&?D+_V)}Zd)9}8SpeN9=LHhx;iL-{DIzru)f)b at PQsUVOGyR?Xirq
zOpsTaR7U(|wLp_suRy0w5Q=$*Y_{bE)ET7+b~Xsx;w37lvJZsQMwCIPzC9z0-xTlP
zK{-rdrjW3U45AivaX}Y;)lN_WyZCWnJ`;9PT!Q%z$YBpc7<4a-LKpx{u$NKQM{sG<
z)fo>n7}~Pa>uh-}wfBCFsl%0hUPfJC&tV*_gjL0Bt^P?OC!?*W2<$22th1VB>nZQW
zu2Pl>OwTzxeu#d53bZUQK=(o6fEW+;&?kNC20Fv{+1U-3?reuNm&QJ$25MD at Wn(G%
z?5wstXT&c5OP^YzO~ohX)ne->_m)r#CNd|ojBPCks5KJ-HJGNZ!Li$BZ6JMaJ|E{)
z|7bfoeZ|RUCh$rEj;UeTi8DHzrdWN<n4P?Z6`b_$6e~Z!`(E=4nvU?&t}qp2gk^Jz
zt1rQ)V&Of)nQx(fn1k7!1>%z&8ex1bHu63!lWp at ET;&;+xq5s;4#Cvql$e_WTLscT
zbVWe?2{&e09twhIT>go}T|UUko2nJ27GaJiJB+OxvR%uZ6qD@^W=wWl)EqoUtqZ5F
zXG!w58jqa&{CjGR2Q!>>HO&4x+mP!bL!p7I>iELGQ`%!s8kJp>907AKJ-)D at 36207
za#zWsGK-Z7IVJnsk)m(H%KK(-&^BH+;KbGn- at Gq8*`KpERuGk;6NpPEFrpj at Q@_?Z
zlzBa6kNz^CGr7iam>zc-WA9(z`A|9xxYhZ%G?ehb9M#6Am%<uab0z)d^|y78UV=|K
zJ2(S!=@G_>&y6>h_CP~9v0PmWz3iyMBx<dZ*w&=dO{PjFF#|YCc${v#JfFm at 4SDF0
z(|-O5(xVeB4^x*)6t{I#-~k>sjCT%gvp`pxkdI1l8sian?zi1Tgf%p!QtKp4-|^R%
zvtycg!7&ov)R>*T8M4nmAEZ8$Fz5N5X><U*y2Bh;L2rYt(5Dfj;j1s|lPuUv&6F~I
z9BCgM^n<^QnH=g3DKlRE*Rv>qK<Nw}KFO|Q5pudifV6wB+8D0OZVDtsk}$B*%yaNa
zmn}Q89_dIyF6Nbr;pLJQ)T;IqkDIoNk)m56d8r||J59GDLC}B8DjU;MzA6i-n#+6d
z2(d+t!TTqWclq<Y)ax>)C)8?oi1C*i|4~Qds9&9Iq;O>Cy`Rxk$wt0U`h|k|AZ@)w
z-GEzOGx<o=G5$T&!SGStziiqAqd)B~Qy{jF@!xgqA9cQE>sRwK+FwMPP20F={-0y2
z#*g+{Wpo1{K5w97k>Sc{1EW`q%-6tn1_px0y;ym%-RPj<HIid3_UJ=uo+mS$kxXs#
zWKQHx$zf{x0=j3z;}K8h1kUp*xZ%n4WC;<&M-=A8OwFjp*kKK;V{$W**MZD*)<Kxg
z7#2v|b@)z}4<qNd=GSO1l4sR5fKxiSlA{OU8BFVZc;=h(<HwfLE-SC9Yk*9>1(O!O
zGl<e$)yH5d3X1+{t_8dI2`{D+gEl|>+aAAAe|Ry)c8|O)q{)ur%9;K?bmcn1v?p}I
z0C=Yk$ZRd$=v8>ntrL8DAFwO0%b9M>I9((4rkwc_=?U2z@}r#8I&->$XC`K1T!-rQ
z*swUWUH3kQMV4S}e*URH3;PiX5E$LI?6zo@)h9~(t98O at tB}mwX6x^|BCvA};fVEs
zq>5HnEtQl(>_u9ib9~1adYpO at vrh*~PpfMZ5xbRpry+VTYO;d)QV_hC`@s-Zo_&No
z7;Vs;oK3qFH9}xR&yPeYj=b?`kk%bo*95=a`2Z+Y3g(3I`=@*MUrrDN-Fgmw>N5pX
z>8w8R=8*R`#Bs{|7<*HKF`{9o1*aY<n9#_=#hW>sQBE!NW=`{?dA?*^IiNFytHV2o
z-c$7b{n-+m(gM6pA|kB5Bg&%Q=B1$gXWq<-E?2Ln9MISQ%qCL8W<Xnx=FIK|mYbBt
zn>pVHuw?zSY+GUbrFD+F#QysSXDwU+yV&y83te2|!<;I60To+vtg-`JX53qLHvw68
zRN$6JaUG%aTOa036s-IKAEqZt$|!dwfZTpS>W_dTKfk!7KG_T1sL(pAU)t|<aMT4u
zLKW6fk^`MSLB$bb6Xr{t4Z&InIJjNs2f~kJm;~;MDb7E+!NE18WVXkMaHZQ~t8c*T
zEq~LzdUXiar={}=0bk+@<H*O&bOiI0cWo6xDFGI0-qgJyiZa+KTEaOmF0(*qt1Nnx
z<m0NW-sCd)0>%s+D`FQK at QGIW$)&xtx`>*#y`ZfC_$D|&Fkyk6&j$$V^f7G#gKAhm
z1Bk1;dYbZSoe}z)72r<huv=!k>HFzO{~dRGHDj^McjpDc8E}7l73^<^V}(hVU+$&W
z`7(XTXLU|nWmhythityX3M35)$XT}{93gms5ldVySqI>&o1hW&w=b9YrC62lTs`g*
zj#baMD&2~jCWbW(5%jYA7RTJcau~>?owuHaziqV8g2#A(iR59Jjh>R?aWMrK_y1#p
z7QRS)`BeZCXQ90*E&`I$a@(YKG<<RPA7$pyle)PoYqWtm^yQtS?mpCT25V%4*x_^3
zslv1u(8C7C)loY&MeziX3Cto#R}My-(sOqAXP^H{fKeUP0Q^2NnJH!XP~DT6ZgT+h
zhe%uCrGx3Bc$}i;3$GX3KT`Xw&nzg2^#5HTiDws<!E=A~6|x+Zv5)Ptoq5k`rnE0H
zHSXn&<o7rWn#n+ledOi~>!IN#rUy9+_ah at OAa;SuOvC+|r(Mmc_uWy~FE at s@KAzIw
zg4Sd9`gvGj5W-NNUbi8<b=#YFCAp+=Kx)Vx_#Me04qFvOwb;Jn+J-AH4rArv?gctQ
zPRGrzls&AH!ro*m#E&^EIPU+a0DgR-`r}ZM#M?&Jh>t-it(`3F8hAT&>E3S=kn}-&
z>X09pKs|NQj~V1TPTJA at hE40*q<~Oh{zRJ at PV{Gr(doOXm;IUVDEA2;El^yfB&8fP
z?^eo|#=R-jui%?-KBxTr+@@`vciW{w6A|Wq>aIU?BBPVCo5Hj(+^N5&FjujfZryIB
zmIN at Dao?2JI3vk58s-kFJAkQRyh$-t%vi>k)T=76Q%$+ef0Zg$F(3QRJ?ZhZy=r!-
z?%Tup-01;FqMY{6l8R~&yI+0}#Xo%ONF?|@&goOJH&r*4DHktmoozDiv8x2Js8j7v
zE+FJO)uyqii&L2u%A|4A9*XuNa;JUnb|CcYObWj4v at gvY<Pw2z1s>P4B<a<uKTw8g
z%q#f#Z~T~VUCW<- at 7sLOTZrW=Q7Iw at Ii2yeFXrHJH#0?t5p?`F(JzCziFn%SMYXkp
z(;$uu@(E#$pjUy$tj))%UDKIjR&2(RIO at c7rpoEt|KxKOrUEJcW at zzS?8Po$>!>Hw
znO<Ya<g9#wFKGB`kVYmNfcvZ0L8mJJkr*6U6^!u at g-F?rsLXz_*PLyT@`>&@EnpAy
zh;)A2_n;<ZPOe$S8Q7wdNYtnI6UA0JQRyBUBLaKlBX`HVm3F)eRnL&+T|jFBakjcz
zz$53+U&_KlP7h6REG%mzSeoGn7}xau2~L#R;Lw+?$((<g!AieHmZyAyAP3xXI?khC
zTpzg@!Z^Cx@><Z;4Ql945#+UxXS3?2!n_KWIYW<`_2xki<SNu|PigNko<lEML{GRd
z8j{~WvsDn`(%fy<>&sjd1^pkX1R-rrftFo14iPM$@Xl{adX-g^lu6%gulMW6?E)Vd
zR>j}kUbajb@!o3cXXbOSSr|LH-;Pn;1;cTS-Qt|n$FFuZoj;?w3EeN!_F|6fmC%>I
zu9RH*vbx$`vS39a{^!wX&U<$50=4<10^V9(Sn!`epoz4}PKD@&xDuYMRM$syqPP!k
z!vpObCH=oQFKW4~27FRjLw~03H!-K-yPsH7gc#ew4b)XGX2HYqb9-UEVn=8d4WDH>
ze)Z|jVR7i+Q1)6&?tS^hvqn5{rPptysrhZ&aip?-(gcT^#r7X<4qfZ_EAAaQp0!F{
z4Mr9C5(6Ibi?M}E9(@2h6x;c at Y8Q^MzH0dl`W>@9{~>m}fdSS)koiaa^w&Q6s9xi{
zQRl|n+=X!=gZD(&@^`CSSUV}djUe9`pESOAG5%bKzqEb#n$D+{my;QKk10qLwIQI^
zUD#<1;%$B{NGx2~;wJd{$ToYMqsN|e8HiJvDG_eHhA94R^1BzwNX$nM_CPYirwun2
zyLjKAcbxM<X3Q<91rwUKBp~|h`K0^aZ<_3lYTo91$217hqEZp1Vz;0gjDKX+uC!wX
zqh2Qu7_!tJRzI-s%ZQlHp{kL=aqt+U?`C%*B#+0I=X=GxWLOL>oZCQM^j3EP)EB4`
z5JzmsTiEm|NZ&?H&iz77rs&>;O^{J7_>o*}cQ6M`U$mGTn`%>KnDgJoE+1{CUvk-p
z$^$k-9 at +BubY%5%3l8mC055TlxWo_)TsCSZ15vfWbx at f9X6M6=sAX+oEP(ws8umOW
zA%-<Pod<D%(^ACAD9za8Aj+RS?clDYXER75{4%u%PwZx-N9PO0w<>7z?vbd>5~-9$
zg-11Vp|ew@(7-tMS>8FhunyVSG`j+Xg1n&ciEptI-BQid1dnqLM8uncEIl=3d8Ef;
z at 56I0ln-AEa545CiMr~tX{z^@(?GJ61rQP7uZ`iWU*YDcuAJ^kuFj2GvvTqvr^BxO
z#%0p<PM$Cqy_|SqL%dA8M@~LP=5Fy;+2 at JgJG3L^gMy$F_AgJb)8y at 0j^-U%&OIwR
zfxf(|LR0?R4(-|WL2;g&n46a-K;t(!e{^rV;;JOvedoy){XfUc1Inkl9x99Z6<5m5
z8s2#^^Y7eshR9phQWBE~)geL7h)1IT#=YX2P|uh=<g-ul3!CCDYTWe2iN5o4Hib{a
zFKmt*pueSy%_?QdOMmO+Q=Qp(Sg2c2AmT9~-GrOa-j#Bhvr}BX%6FtLlp_}y5lb0^
zKj7WFQsN;CXg%9ABo~U1NZ}WpxJ4RYeX)+4yPPyc%0(hcWGR!qd2v*teNKY*QFd_n
zqN_9ef&_?1?_{S8x}d_$2>WlSbLGioq-u%Ax1=~KQM4){NnI1ltPBNlakjYIISEPq
z*};jh{3-WSH4=#|V8EM|3<r|Bm$#4D8?$E}tXqzFz_bjqW`{X>OAHeyH8VWAXIdi#
z6^!q$ocdz(8;vn=1i2xG$heebr1F=j#LRgr*-4$ZlCD67c=R_k#^6s>(zT16GKfeJ
z?|!l`cab47xs=0<TPh37sNw8cS8tmE-0h?vOzZTNd<erV_mgKVGPMIKag>FD46(O=
z?|BR>mAK0IL}Vh8Z;nNiMKR3HOB>Q4tmG|H#QULPP4bC2W-+J$j^LC#ua*!Ak?-@`
zDbN8%C}@m`)XXR;ZVdNcWmo|_pBw}_Q=KSYpy1W5d#ZAKntvet?6pL(YffXVTvkU4
zzL@>KHk2v;P~XMiXMDfi$oVUl7tIdan!6l~{0in7*6 at V190aSu%*A at L2lMm#5VyE5
zHEtg1{JLA;<)UD92+|__kJ$z?xE78MR|^95fr(1joWT|N34!k#J)M?>hp73RLk8#K
zBWnKsw#2r~7E<8T<dJ_G7WzEv!aEij=tSbBvgt49w<SLAIl7rSxI`b(Ih1{QW?!Wq
zcA$49?AYebgV_M_T%=^@Q|@5^|4(6BLpYqNv-1;`E;;ov++1(*I(kOb_ONpq!b9Z%
zX$2OUK)GHYYKQ-#MkS<e`d6y==UswpyJEOEwiq;UY9W8CaT&l|M}hBp(0d{>8OeS#
ze*5(aw$AQ1!u%rS)YV_Nj$!%dcY22C(XUh6<#jSAes?A8FB%^jIZRlmMb_jrtUJN}
zV)lV>xawBpmUdFK9bwrLV|f!r5cW+@{SCW{uCMQWc;oKOCnO!Gk`Oz=&b8yv#~^PM
z7`X^`R^q5qc0cSHitAG|;~uIV;yzWo$2lb`Bi-`b!^%SykZ?&HL#IGQjw?x2ekIO7
zO)tM!5|wNT{LLiUaW(6tpqEiJ)~;5Mk2|KG5cf#!64x&alN^Q^94f?DgIQA0Geb8%
ztOJ!z%5R5M5tfBBK(uMx(mnFqL7MMhW&o0<YFDt59^gV-+0B{38X6oRpGT{ES?(M|
z)TtdLXV<#=5ME^o*zu&cME#>Cr)@PS*uTmSg!eZLCdtw|pT1MdkPvNZE-6}y^?HKk
z2J)5YsYEbBq at u&tG29i#HHJeN1I&-gQ#eda-U|lR65<GFD~^Jp2+4EiOpNOa0kchd
zB$IV9%;I%mRB}W_FFinPVp0Y6#d>c>$Y^h2rLe+LIMOp<IrdLDj)IX+3rk&!0VIvO
z{Y%edh`bIJu=89xE)BskzR#0y&#yQc3_9gRMhY1YYM;<=_V8Fp66L-TOiMJV#EH0l
za;n_ygoIJvSYUlJvif2}BEarwnhtmYI>2^do`2UO1`H>f>t~2g7C8WpU*p>iz(TM6
zMIbJS!Hf$?6kqY@?Rnaj7 at TDWRL~69e!@yZ!7F?8w2_RJtLp^q*X|);1X!p{+~6Tz
zf8OcXy1 at 7HO=ZV-NK9aMqNla+cQuJr!C&V)#S;;ssKgP_gJWP-M5uz9W^dJ_rM+3O
z)BO!mv%AFk9dzRWpY|hPJc1p9-}0$|4c_PNLFZK>P8QF<<CBX?4xIjI7(q{eL?U+0
ztU~(hyd58ajJw^xcu?|ILwKZc0|G~%oWNnC^9xJC-rxkwjg{#UsgOrCq4v+di&e-g
z=1{inTV=0zhO-F35CLZBm!6@~d`KRtQz1w1dSfe=4z4h+8Z0mt4K6dT99(K#F_>>$
zJ(y=)-W$9BG$74jbR92E|K{^Gb?0BX0Qd1w at 6Cz3iukwJkHC&p)`toJe4{PL?jc|n
zKTKzf>-5f{ldmuAe0uIIY?zBp6lvV(#ywzp^|-hPYI`#7FZIN at Pt>Bg!)lMXPPNm`
z<Z<m|(+Lr18-Ujug?JCFuq5+<_SgNkv{59B9z(KopV=CLaWx)iN}<qFF&xT<n4icp
z>}~Y5m4l6|0g~gXa3 at V9>HQt7UwUfv$Kal9hz4sI0sB0nFNZS&3WDjDuw@`mqSz%b
zAz@%yaAGlxm)j}?@c<uGN&q(5qtSRyN+>(o$YD03tmJNgUR`=*I|UnVzZ5HvRG;M}
zp8!kq5t)c(mZ*@DOQC$Z=m-*NW?*sk0DdW;@#avTTx1q_=P*_#cP(WWhX6bY0S%6q
z at nJ=B(E%iK`vxrer=?6lT#9>^q8SolLVdUYoIM$l?fYS#<o=~L`~n?{Y{jtLVSqzm
zyZ>$*`4I9J1Ef4S94;^J9SfIUMpMI?#c&C#AU2OKxge2XSf>&Yjo#w*Any%n{u$U&
z8p}oD%;21-smZ%-G+sHdlN(!SQ*OE2GqZ1#f43IW1rX01i|@G1kPIlSuO5{3W|8*q
zBQN*5gfVQY`^R5~y;am8FMDNWSHJeCK=PwMfAf!y at tdyyJkx5gh%W=3ivs(9w7T)W
zN9>QGKEvWuS7;rI!^2vl8s|Xg^5cK}Bm~~ELn+F%B~iLs0NC*!c#~w6;qH-h9)^dk
zkMu}m|M>bYa{ckE at h1+vd+%3mbcO+&7-l~ZIcnXuvUBL|HxgE54D#ywyV{l2IN*vm
zK?~F!ztFC;%p?n5ZaA20k#il-giGInW=+z|%R<)W)+ey^UvPP6(-WLam`5{`q6>{`
zit9(TrLm^XM{=s269P*ZWJGQWT9KzUYxjCN^G!+SjD7G1X!UGO($Qs_qzvyl`~0WP
zsb6JGSheb%gq#M?>~G`qBxQBkA<F}o9?fWP5D0(CF+}8jG6!j*wENYRRZ+FusLc)1
zV0l5B at wqh`hY6|f8{)&=8<uRD#Gvitw at eyWm2C(oYE*oJOsPdUve84Fa>?e=LmXwR
zc-I{XQ&RS4zZ;W2PY%Hx)%3xf`=sh4?>a+ICu1H^bTxw$ZFz7hJd6AD=ZANvIAiSQ
zrSQUDQwIf+XC_N->5Se>)6wEbI5x9oP(Z31F9 at P2!?>sx1NUC)bf at BaoLAk2bE@lb
z7JL+N%vA##$=@8GRcK62!bITDBeDqmf#1?KKwvpEYUnr-;S-M#2~n)ZpzE#Mx~H>V
z`#fVayySZi%WQ`ldvpDJ%y}UwTKlQs`iIAG5;>@ar|8;xsBxQ at 8iBwAK8s!xoWbXB
zgpTpjz=+gl+?OaFw1=9K^hnh}4r~+frkX(-keUYMy|mH<G+2?F4N at pguTB*p^UOe`
z+kzui?+wqc<)d~!JZW2yaf4V5HMA)3=SqTq_2AD1_f6|og%L+^>|ivl{w)R-`=_OY
zxJOob at jT4Iqift$5ON3ITn7U^c5-6!1V;I8gS54DT(GyGBJ))4rShs0+66d8xLTD*
z7sJb3Cq%z6kzWO9%#rN@$dlY%D|LctBZ>MI`xctHj%qT&Dl3e`eWOkpSn4e}dnPBo
z$}#J7x!PIHA(&Qq;Ts9a+nU;^e at +uSu3Jz$^k=b{<Gl@;pcbi|k5sAxS8hy5 at qcgo
z?%etU37LSijhPks@%y#=bxxmlEHtY)RabDO*PgQ0hn|KQI8zt4g$!rxwrip7Mb=?l
zQZ2Ol7QTi6fpEIC|3}&*y(UA78e5Axhq&38^qxoOP~`{&Q8pMAE;9*|IhFlDmcOX^
zDYgZhtP^~4Z~N6#CfFF%b>@6UzM~dm+_0R#Qx}>6(h9Az;LN84Z8zF#;GGb3KCRl#
zn|fi}x^56puB6ZJe?mC=!-$)HD(J{3R$q{iN81S=0`V%V5`3rAa6bvY{{s0|f_x9?
ze2EUcbk;KAdS#wMjJo-vdx+{pgpdc65tvHQpQcjvU*Y;?Tr6)S8gLdavZ({W(-n9f
zppGFshsr&sS#26%0L$|VH&096lJP_nm9TntR6O?$f$HUDb#r4nvhPG1HBw0#y16eu
zWO;5%fka|NO?`RBtV(CA!gh$2L0kGcW=Tt<^W3+LSp-(y9M<Y<5I=n>q9Cdfq$EO<
zaL+ySPML>ujh at 5+m8wW^)>kG3>N#BAlc<WkU+wst$3GP^_0EWAOaqP{j5TV&@5%Z=
z#7iR8mLK0i?t}&(<u~dhO0NsziFw-?jZ^6hiv4Frt&C@;hz&NM<Rc_N#%HF8ziWw2
zJGp><&}ZIc#|BJcG7j1+YLt>ESw;<@TI at VTfST+C9R2neZ6E(xaI_qYaKn6CN3{TM
z{2rz0uMu$asKqbmimvj!r?Rtt)eo{_u<$!%1D7>fFzruhNtKK3I^FI;*G0ZqnS0bR
zgNI_T()Yf1R7S;#y1Bx;o_pZK9;92MirAyw>z!oGQg?9`#_Wo`>Lc4m9Wm8K$`2c)
zc^e#%%4<D$DlhH2JDO*)?y1%9-A|zgZlbEcMio4K7KmPE0ao&5_o!C`lHN2JJv;9G
za3)f+absSFfxaf#{v4+8^wMG3^V3UO*LWC5OhTxXp*2II1Yw-lDnR3zyuI=Jw{LJ0
z at oG*4OM3<^2^qwE%<JnO!(#CpIQw86H1EB!udxs8pztL>5 at 7YIufH)4<Qbw(0$YVp
zL3vcEiji@%+^p`xy!1(!-2fMfC+5 at 6yB1jA>n%B&Yx6h;wpss!;g+?}zD1DgVeG2i
z!{M#cUF~5ku#ePFaJpY?bH at c;Zkdds_RHrjmyvEMr2UwmE?oD+nllkcqD)3WwQk|;
z@@z|VjHni=SSNOVQO$Sn!EP;lQ=_U$jE=?c{cpF{tHb_S+$DGMZHvo<js?iyrfuPW
z7S_L at d;Ck_UjWR~kDXt0XkH0v3QE>Pr8T%~9ZI*|<*id=?9rXh&ie$yrS*?mF)lRw
z4G_!P;WcKM;|Z)U*Am^F37^El*ba{A@?|aS5rTn96=r3S#f{5>M&%~x*3cPe!0Qn{
z)HKPV_lcju3SsbR-hqTpbu^khN+s?$tAhJQTzSTW^2Uye(+~UdjjzVEe>r4Id<J`&
z&$!H<hKtA at zPzw3ja48qZ3*Elshq at 8cP$TVkVC3y_=!k?56IZG^p=RF9kOk~cXr$=
zKMCC$LTmV6MsUY7i!9NSmW(}BWEN65vgO{-dMzf$JP0P%P>W#w&)08Q&cK`(y!jxQ
z&x_7OUASXuGdu)>^<4$D|HZWvx3O}CE6{3Zq4JB;*|c+}GtAnzzVl*M<q88GQfn}=
zda+bW{Ac<!vLCuQPD`G;y6yK|&SdHP4#p1TsC#CI9+Tc-xAY>vMSQ$+hI4|i-n`U5
z)fus0JB<`AYKg=4h}$0M`+2jtk9-B8b?I2D5}CNOBct at U>6>To!P*{_=zHG)`T1)f
zF6Dzzuy&ddVY^5<`eNSnT=P5!5GP#wsgOh%^+JRJ5=vIQT9oek_EEW6id5*eiS{n-
zvckFwsocy0-<lMUu6DWYTY%(ko5RXeAdJ?nR~aLTiAct+jMBWk2-cA-tLDeFr}F_5
zig2&FF*Z$yzoqo=#&-Cdg>WB<ISR7@;U<j>`td4R8`sm8lBlPy at FGJnr`ThIoLH*D
zui at 4ePFTxQj13z3Pu})5ZfUV-Pxkw(!8hxrpoo2hIToEL8f1`(3->PXf`ZCYEb1_W
zbwRB8dFLC`jEkaIC`<AxqRDNaUwLaP7n7P1$G1LlaD2Vy)gX0^A7foi+xdaq?%8X}
zPlbpOPD_n=#@gvCkUX>4)jI^?zR2Ij4Pe}o-3X?u at M9!B`R3GZ!_3>o-54u!9_HA^
zLzH1Te})%;t-Jc7Z5hiSBLe9C&N`=Co2Jlg(hW@)^cRCRgo6{;PE`p?mRe at 7#C_X~
z8xaRmSBnVrKT0LUWf0B-;e1?~8i**_ftX#?G1Q0QxUnVb7}rZLK%{TDtZ*APPoJPq
zWvKM?2HC}j5xZ(<Mj(-TcNRMc<9mOFjQ77Xv!{9<A}v{iXiC;<w2!;MZ&ITz0ik}i
zfHBaO$<ezE^7^1FE72gy=*xCml|C0QOZSK~Hbf`P)_?CKTU~<$5SOLC`mG?G55n=F
z_lIRO^sh+W(uY&_R7q8w#`>A(`efa+-RhUB0WyWa_a!ElfP4=$JiQ2n(-EFN6@;G-
zhQitWpu+luo)vAk_PL)x^0{+C^kzy!RfNiUAj>j4(ixHKA`uqxQ_m2n+|#lFR5YH!
zBFr+5J_v+eGEQUn%sV1y#G$wg<E1zw?sVgS4LZ&cft6y$LgBKbmAoP=d>`i<avN0}
z!i!{R1|isWhbSwM5Ob|^f~>Kz&ef$qxdb2FKECLilr7z_f7l+o7jrbRS~1!@n}PYd
zl^}j4Ifi_Tu;_l0U<qqLXIT$I#Qj1_MWY%qr{7Ac(?3pg`Dqg_g=G&)q2)E2<yL}C
zhA)*78o*0l at bUHN!W6nTAKx1}y>Zo-FqEwB!noCSfP~In at 0esCP)=;}gL>Kt(|j^E
zzJ0rUc8n-(98~|0yFB)gu^;>F5jD${H^_#f+S<MRlZAIfu(PRZM!WMm)=zD<$Sy(O
zeTPNsk@%bcG5++>5TS0wd@}^--mr$J>%dMK-Np+2%*j5Wl#^aT`c*u_kz at se^mxrl
zDd at tm>eN{5ygRc`ZO(VkIm+3SacfiEx1wbmz^FjSx&de~fiBd?_ljWGUD>vKLqv_5
zMKIU#2*9x3P(A&sD)aZ{PCkWYcsIu3q)%eDIfj0gd^i>X;rq!OFr+!tm?@e4^Rbw^
z6CAvY1O<VhnSCsyYSg<!n&sW+T+hAB?)H#*fKR9msG-be^?gAXpLWYJYUSWsSOPYn
zO;CTrCh_VQ1J?f7a)olMVSR5`0;10ebzD*7I#_jR5})^T*wxc{-E&Wp-91ANjnBR9
zj8^7SxcXm}ZLrEt>i4afyw$LpuB<1N7rZ-t^0FUs?v-Rv(f_xev3K0vxeb;l5glU9
zl{_;hir)LA1|laM7zx=Tay!@8vI~=$M&Htc?38y>r3U(V8VK*EU9ya^Q0qDWo42yg
zv;7}=OVb%6yS5JM_a_U}9W&d5n{dCli_e_lIP#0fAI*^zS;5v%`Uig&>RxykbBr%e
zK6=xmuNOr62LBz(FRa34lGO3X;_5MJ;aSWvcrcV#SPAk)Bp*9|HSD8zUy9gSKqWBr
zS>17 at E076Vz;u5EzOzTagTS{5eCLdQ9|7N>all3M!*Y7l3qOayNyHv}tm1qXcD$+?
zS_Fi3Y{|NlGK=%2af|Fu!jE@;pS^R+utwer7|h*}D^{_{X_ at U$a`)k5x)%=BD%O*8
z-EkmpCG-U9onILT9i{~D0u8<o($3Rqt8{{*`>KbG6=%15-i7HiU^-c;VhtN$hCMLD
zFK4&EcLye}g^3 at 6w2d%r7f9>-4iu!*phFMn-WGNk!uq}T_;ahx>5QF0U!=B5rR}j_
zVHjK~bf*C;pV)F{4-hulP&|Xuk2Sk%c4Es$D1fp_i5F;SiHh~q4oIhY4R6AS!$Bfl
zK;mhY{j7Cv=-;hktv?%pf%J7C{g1QTZ`@fZ0_itE*#MAM5rB}FBw;$ir`L49jhhZ+
zK^DLhHdMSj`GIBLThjs%*m?4j%8h_vdUN!-C&%@q5=?j0M;z%NvE=~U9dW6NHTq&<
z9)Pvnp=|73@#>W!*sQ5A%~w#AWJsO$39gig9LgpOiiTrEF#gp*7{93H)fwt7m}8m;
z5NywaGAn%rvmPWM`%*P4u4?k0j{iZ(Q2+G#RWRG#<9{H93_wt%k%5Rah`2CnviC9Q
zl=dEbJqAy+;Pc*kIUu3#neC7XB}PfMgGUG!JR{Vr at PiNxAmx!}VbS04f;u=jR9g6c
z2*!^X-{Li?&jRA)!D~ZBh3z0;N^(o{#G*SOP7%B&)UJ^HGXzs_1=1`P$}ao^{2q_^
zHZBAN3G4e3zDWh)tE`(e;n-S$guB7A6uhH(tktX<5z9`qoe at r6Aj*A`+Z~st5bR0r
zpNv3r80&irmrRn|T=7AA0AEA{b*PTb0d>?sNeSS at 1?ir|HtAk+gk7a*U9fN1WCxgx
zegu1t)#sGshEM$s3sknD?UfhLv`eP(n!4TJYcJ`?Fp%GIVmW}NXU?5*Z4&DkGCI_x
zGl=R*Qh!P2A7I`4^Yh7HM at 8-rZE~fGQzF~97U0SV_)T(3JonK^M<;mgf(iGb3u6F=
z4?(Xzj_GY9&oc|q;p~J}zrMn2Xm!hMCo56660p`Y`T&yU&dJU84r}|@h&}Hmtj98D
zZ#BlV_+ at ePpM#B`JN{_1Tai`$JsE-(7k55<XB{9i2STtJpM^3D&jC2Gl3 at l2JJ};W
z07ppQA1{Cdbui<;C-BapcRXn`sTW9YI%An|n^c?S+(5`#d%ks-wnLinRGQiIWa&R?
z#>njMxV5Agmq{zs-oe<gLQh`N at Yqy7gL|tDX3r|h`xo)4S?rx#2bSYa01kx>?xrW8
zBVF4#kj_8*b{=zuPS?%42c2DvMNHm`XqHi<evu7U*_fZGF*~<^q$B^EUgh<BLQ{Tk
zei&y^IkKe!BeSL%X*G<uF(&cQDjSi0I!IJ64PN3pX&imzbK0AAS%i at a;x>@|WI64F
z#VwD%t~RhvtkK_6y8-y^oiwp3n>N;3N;uk{%6!okRKEsekGX;xJvHTJzI*S7jj582
z+JX#&c5cQ-v_P@}ohx};OJr=&rf0m35>2#tU;Npacuz`9(64Jz(uSfJ48SneDu%{;
zRcSVSXVtPxC4n|l#q%%@R78p_!5lAaJ3b5 at d6$SR^Nhdow^`%@WeJm|eUvyyn1LkM
z(;jhJ5(Ii)KKIp|Ha$LEcXeII#MAA%E!HO%UDpEIYMT^VWyV8?K8vkD!obeQ=JpC_
zln8p0pKw`P{i=NnW`yBL at synQgV76@=(j%i=sV`QS0|8lIK4**raeSn)fZuo>Py1l
z8Q+iA!FpB)Hde>6*e2I&4brpF3><cVgm&YmEzk)+=xx=%duy=3<5RwmxC5$AL4VkN
zIbf7QGCom9drR^B`bO_swTM0;wLP<QV|eyRX6Ml0L}^<AWqYNv?W=L`rzs4FXhrzn
zG3mkZg)92|e{%MlfRYR8lgJuu^wIVv*Pxb4WsCwbnuIv7T931<18Wh_An9*@%UI#I
zytquwhF;lhd7(`V^qf=mpcctxNKXf6BI}M{J at t`lIzu!5rjTi0gJ3bvnRnD4Dj~7!
z-p?^S=^gbYtG{{+j@{Og&Qo;dI3s9krN_W*s}>$U!{5*iLTsDW_i?0C;lNU-Lbdy@
zyVdozh`b=^!kEi~4-a)k&~6HXF#mYALwRHoCNh1`;H%wp?wq=+u;#TQZs((z57eSi
zUx4*&TR9x7e%vm7R*qEs9|i4L57g#RM^MmXv><Z)YQ`z}>_zR4mwN^#11V;-Bj2^;
zyMOfGZY?};fbRIJyh4_LSMZvX>PtofxreuZb<V;i-EO-(ns;``<vH6Sv~ST$cP88?
z$XD({YigVc&G;eVfuvI_<X2~C`Q=e9PkCTV#*|`NM{F0D9j%DpAa6xw at rsW95@$ha
zzs{)LwiuHF#1mxrX!qWfqaW(-2D4ggDv;*zg=^ju=Cn1;7-kPTmt0qy2PGNKWI4cr
z;71p6#ETWb`K&WeBDZy77n`>SwIlS%LTm(L(e at -(?b&n6B(rlJn$>c7)Vqszpm{^M
zIt7<KrY)-ft2!uqHCtb1^AQTB*|o1ZYDNFv#olRb{zi*hH#0?xIeO)uHW4ZC-CoQw
z?q#ry!73rj!L02)ftie?tuWN*t5^yOm)Z))rRZjk6- at ierxsQ;tOFw17HIXu082HW
z`_Xs+0#PUf+DpBoz#VPAB&KZhx}Nf(9^i_ at um6Z^&|k)}xGwOQiX*qpPgt;=0~v4Y
z0Lb({?J;Zjux1$Wa5hKUI5x2vkj@&hGaNMy>mkgahCRUe9d2oCXt*^3b;hpa$PH!A
z9e{AxPe31^W_aBeioScR{A8gsH2twXzk(y5JbC8O>IUG96<x?b{ri7U*iTy>Uk>+b
zxO~LfVnIxhrc4sV-y9Q!7|BZs&id|zKz&0fKV}9}R$ZLH(u=w57!MF`2ca6-8xx}0
zgZjjmRd(Y{@}ineo?hqJ-w=_KUZ&k^N*JZGKheI=NZR??n79RZEBR#vfg95Q6+&_i
zm#9fF`jnqf*LUz9 at V&Eu3%*<+;pcyHpQs))3N`#q-y;M-ZyXUtdUJ(Bb(4{BKGzsd
z1n;*J2_()kB?cgBp^CGv+A3RU4)fuNGuusDY;jP(exVsq#zv5Cw#wkC#lQ_?IK15s
zcja$fXg+~?XBsjOhJT_}ZwCx)q?a_K)M?-5@*hkoHJHQsap8URW)+T2t^^xcN6rQf
zUGFBVEH4#d<&oPxS)c)XeI2eOQvh9umJ733&H66fo3O`GFBa>NzH52dnRT>FHs4NP
zqlRG4!Eyrs89%_?Ge^yy!?DFDBK>;<5bqprp1OwX=p~17;5(litrl_t5)Wf}X$Xr*
zEp#L!``?yE{`I!913NuLYPkODQY&pst#8%j>ASGW&}UcWZ-%9Pv#lx6HN?s<$amml
zVo<AbWjFk7O(B>#<F at WUfmMre>84i<OJUmA$-@}@9$0KmY1M+fm&kWOK56VNoDK52
zf;1TzAc^qz*AIgaYyecs-|zBg<!_}L%O-3x<c22SuMYRTyy-y0zBkX4l>oua=afFX
zAIqU5x0i0=NYbQPH$&q7A7yVI*TmKRk54iQOdvp50s(;xOV|`e7DY--0D%ETb{AX#
z5u#BFDnX@=2{tUEh#+B5K~zw*sI{$Vv7%^QP|;ch*QTP?!V|QM3Q{(|_a at r*c|N~?
zet*nsX6`n3?mhRM_qoeCog+7l<w6&W_o!jiX4V1!{T-q-W^kCwiL2da*?~V;%QP&Q
zcek;qEY?Q9NOCHuC}VscbS#zL>}+7HcPe>{)^KHycD{dyBj(UfZY_2r>>$9XK$_Q6
zpQfU=m^M3I>O at tfq7!K=sq?8QUq5+x(s{XNBlSELojdu?Iq*?q?Uc={a~M(C$}0Pj
z$JE&&gD5L``!fvhYvt_k*eKu}r&5-ofedIto!Y+)U0?=vPs4&@e2h8nKh|A=l*Up9
zY3Kyn1j;21&0vI^=F_R2X{a;j_EF4Z&|Q%MmtSDTsmmaAl1ce$5eVJ%M1M<zw0MTP
z--3 at DvRCt;TL-*xi`d6L-|*Kjt^$WX<rTkT%3?X{?{%=z1-Z}Vv7nhEEx*ynv_4`p
zjdiDf;X9NSnQVz+-%(aIwP`u(MDw8bgPVL=gq;C)-C`y3qEw8us)$KKuGbWDap%Yc
zF3p6rqVdTpJKS|a#YpNL%#w_$o8eM}u+86?;-wZD)0VH-p8Vj3QDW23ZUnRWetYrs
zt%RG-*7Hv*04LO%eQJ3$@wk>*uy45CoSA=-?84j!-A~JVRhG4OS^pv2h!t52;+qc|
z?0zKQ4$rVq3(`>sS`L+$j)rjcILP4lhd%=<k+8n}@W%9R9=-k|)tQd^(PmRv2Fj-q
zlpDC|FVOrl#L^g3b2Cs!%x)&$Gbznx9<?C at oeff4&On{z`?l8k$`b$%lmUpH808hN
zLO20mAtvOh=ozwkn03HZ at H`L=*M|*1ISHO+(SER5wOTHFGfjJ3rgHzyQQrRcnk)Tr
z at N9_F<)VFak0cjEkPCIp9J%&LjKkj^SPpn0o6 at u%Smgi3qMx-NebDaJGcwK6R{V5t
zQue%c#rRv>{cX10Hf;Z|R_bTI9WqQG;L-W7wGEI6r)s9e4h+EtxXu#;g at l7hzdyVV
zG>j!k&&{;tFrY{K+yg+5Jj848ho%zdMS0nF^3XeRhu4xN@}qx6>u))1;%YGlg~>;p
zp#8g2ozpm_@`L;3og5^c+Q$$y<WH|pnHBf8+<-0T?qzk{`C$ak4{4X<e;Ez(LTTA>
z#cVJ?CXECfH8Bn|O5eSLe!=754S2v;Xj;rVRH~Q^xBq9#@7MW~U3^hQ|C9I9J9j&_
z?$w?A^@^uu$96a>)1NZT(-VV{GCczWILq;+v%EcS-im3JJ4;$L(tzT%`csOcmq!;|
za=lPUGB;tQHO6dTJd+7GIkUQS1|b<@0#`0qq>^1T*}{Awo$MmqL^bm^5>^;f4n-+Z
z1#2~vL0IZ6MlysLQ<jT)&9)+tJ*xt;lGRJi;Q1Ta8jQ}5r)}q_{QFp8IQjRQa0pcC
zfMh-VL9#XoS?!GRbfwrV+@#>}61l=mL`VD{VknTPa;-=O;`Z=(XmJLg3O*#P8g?2h
z036X)D{_@!Gzu#0vPvS<ulSCxoN}^CC#G|s&PtGhxIyRQ43kD}K96*j9s>}iPL+G{
z&t#{eii70<f`b+={t1h5kZqUiBL3ybT0H88_l at 0|<E?*GfdqsS`$!dP-O95X8dL3~
z3ClUG^;X&LG7B#xF+sQ73T+ty+`r=VHm&hh3|f(er)gOZNCV3gIV^o|;Qm at tyxclt
z6ZZFto84vvy6|(Ab2)|(qA`B{$6p3SG|*Q@%I;Tpd!>K6{5?8AI_2|!yV0AU_OHM3
zy4US`LT>TzHDH)-f*~{=tVLo4_QfBqYPR^rh)9(ICO07Faz62d=22F=E%xy-OQaBv
z%*vZXQaHFnwR$uZ9$V+9Eh`-BMnr>CkZ7`K5)ICzZ+UiF{?0`m!hRt7BfT}0X1#0^
zHrwyPUXmJOKYc4+K3`V1{qS~#-T6Y&(Ak at ylywEt!&P(yJU7S^1L?zdW%6QA at UUDp
zjUG|An;k)!B5i`Q?YXNJG0!Ab;s`1cksXzr6!xDaKH8zr-K0nma-&6w7MNk8FGdII
z+jY0M_C{_y?b&9hf7TnWAKzVZXnglGEVEDUz^SZV_+n&+LrPmtb!JbyUC)R~?}gts
z_HbCEKPGanrpb at w>dBrd7R~1%u~aq^mNp*Fe*D9T!98QY$M-m#+pDS~4CZB9kWyp6
zjZ^n9Kt&BoEliOR%Ge)TXPRM@?Jsnlcy)%wO1rto$9IRFp)svh*~k{@5IyWnKHXXs
z&z2>uz!v+><v<7syQFDse^8DJGiiVD{fI_h?SLd7A6J#&zlL15Ep}Lyt(|1 at O}7@)
z0gOV-u1<KGZi^wpa@<0uios>eBohw)?t+t)m&u?^DK1=MvIS^M9;9LutKFz)q*t}U
zF)IOXRwCTSB0ERsu%TTFuPK8$%9LK|4DT$PgEzp?wu|@mpqK1di{)P!yzhYgJeX;A
z?AkL<a<ZS<;j<1C7;qinp#PeYSF$CveUV?LybfthSrKb*5bum2<Cpwn{isN{p~&Vx
z{mYjCF`K6;wIpZ(<x%(x&hVe{eq#D?a1~L%=Wxmju01{84?*JnFuI7l5-D8)xa2dP
z`LI{<)^e9-Vl?Po2+)2kFb@(drj=crO>?UxX#LP`&o^p^QMW52Bsa=?MX9|-1ea$w
zx%&8}`i!I%>m?THGA_YvjpJPZG)+B6WQ6N4Ne?(xY5;ddssA>?Uvh9%EZka*x3>Rq
z+qz7g_Lk at PxV19Mi@a=r&V4DrwihU)R!~KUE;x4N#iR+JvXukf?U<WW{mX5IG0&oZ
zd3e~mNW89#cTiI^3U at cmWQw-y(hDOxM^2whTH$*H%8pTDOa(aR-SDGes2#a(=Za at Y
zPR@!ecXOWGxJ&6 at 8I6MQZ^?33{8!0WMBGj{=Rvv4A>y&m;mFV=%qyV56;JHO(71Bk
z`GLc6F}X|UzH`*y;rYUD7vy5Kf8VNaCeh>beUZzdjOut51Ch at Gl8@`c4pJF-#<yY|
zC#FSZEid47x&;F<`+34I7kJo^OjR at Gkr7rSQ(>N7b!Q)sif2B`1j4T7Sbwhkb$EYV
zi_NF!%pOhnWxQUqalA>KFqp=PUxKB*9LkVgxpEu9ZfZg<18TovsLXIlSskq~?;Y?r
zdp+T)*`*109rewWLzjN|)w*n}SYGOa+co>(``NRLlh>H<E3}@yB^qZGCLSs&k_0a+
zB<x;_dPbf_tojjgUczKlic~IgXF1GZ#HgNLUNT+wAB-MPE<;4-oUy at mJ<)so?$ovN
zZV!bXXVng;l|=OX*%Q60+r|A#y7!Lr;^s$yxiI57%aHikW%S`^NyOXj+MSecBzrf{
zt<v7q|4UpnxV(x81)A|#YUc>^QyatnfufeVNBCdp%wxsrX2rF<|I+9z*nc&<G~x=I
z>6iG9tCZ4WSNHYh;n??Yu3dO|MPgvmQtUn!k at 5<35hE_f&3Q(tgOF53(Gn9dnp>>S
z);#5$jk at _Ky$j!3YQcAx-oZRV<A8k4Kd%oPU3!#oK5G<k7GNu;iR-CXu-(&r8A$wY
zF&(u3JW833;*85m`y<p5_+)l(!Y@=uHo()cJ1O=W)Qbb~^sQcw=;AX&ydBi^4mAga
zGQd+0rC5VnFd&st)oW0 at v}-F72y0d>?R>vshSvz(w%RnMKT8u5hm`aIsQ|`Jhb`@*
z%ermi+YjXZ5nM06Fu8NY?kV4;uxIYtCHfA1W||4T3-7zIk_9FOW95O2^ll83vL|uk
zEij}~`ky5fZ!Id82RNB*i&Je;fZwuDuMyMbl^l!tDi{4*g4spTt>37)b7b*d9z&?Y
zO~`kIGiVYkkk-<q_Zv0fNATI6umHF_(Ezul0FS$A;3&U?BV$Tyz4R-Ni2OY=MOf$F
zH=bI&EMO~+h at OTw?(sUmdw5Gy_RrRx@^_Ab4$q-Wg9E&@mo0mqwBEd`cwH)!7+RMp
zB>ZO9vAk8)AtpF>Y)t7Bu>1=G4vwesDi6BcD0*tZpMY$BSVCL%w%W|>#)PNiA<7ha
zw>2}q;07nY;1az)!(aT_I)CxVs_m&a?}`8XIQ6WvSq2q&xlV%*Htnc;BFs`goq=CW
z1b+ucGbSvbME at Z*s}Ksx$#A|RDv)(`q9Ov&q`8T!=oPdrOz!h<U*+av at mrd5R%-R|
zjR;#8i)2+GO_>6n_3qdgO*bhTOL)bPs659YELz!v&tsD7jM^IqHw-PCVx87^Q-1a0
z9}tJsf2)O$*DpCtDFY&dPu>An47kh*oV?}0C*OkW40x{q-S8*4))4sBOeNv1-?3{j
z`a=cFfUcXNp3~!`h`9P?Of*>$$kGG_vZ|(TgA;laLF;aZl@?a`w>K_ZeG at tWkqfT`
zviG3TTj5JYq7aaK1+ptJ`g7q{@OKsdeJl at TYcw;u5Kt1w3Jfw{u8<j#*lM&TB_^4S
z?Hu`5lP~s9L2>~d2!y6yQ-mOFvT-1bn}jiDsStX*TibhC62<{~ulv<kjJUBb%qhNG
zio}~bA)r!n4`J=_q&2yi=bCw#hr#`LhU~taW^3WbT2^iK$Cg at qbZfUrS(@O+3i3dT
z`z>M+yCTyeJ4Q at dEAQA3psO5b-ye3YPwE_L@BrMshKO?lV5`jg*v-LYMP&TciO6Yz
z*<tuWp``PjiQw2x`20_t-0ZNZX3mO;ZXaZzi@=`F=o~4r31opk-Vvs{$N)-Q>G>YP
z at XVU`pTTYd_cSfbX&RkXXxp)i93XHY0nA?4D+%Z)4qWuaTnyC|;0$PxtS)^@VPY@{
z3&sq}7_fUdS#`{gqQNZnoGWuNPLJG4K at 9RiUsVNSps%pO2rYpbwmiye)%MjM|8|MF
zLmy~fbj4PC0bEcMUeS4ajvrixSmz2cOD8j>sOEMiS#C1{3{L~-9lBS#2z4%?yZb2>
zwD at koXl0<eLEJectxxl#V7zZ~TE|e1UsoVByQ0OLx3rLPR)ifq#qD51-Urv?JdLni
z#8&pG=SZBu-<|;#oCS!hAtrh-r$3$AnTzrmElCO6tJb4DxyF#d;}WAwG&cnup_?(Y
z2rlN?YVh)UXc%VKNOQOh>SYJOfL{EcfYbnMF=GaQ4i61)T at i4y6w2Yo|9_v?wofe>
zfcIT|!Jwn+a#1!do=RAcddXq?z`W3VHn|I9UhP##8$WTltO+U>G#2`|?OU%*vCeg|
zov#vNpnm$o?9P!X?KVtJkF7xflTo9#h08w!zq-^Q_ANFZJ2Iz3H-+jswe0>(R~641
zx-%@h7R&Lw<;58<h(j`~R`U;3pM3(-9-qLx$gQjMBdSO+UI13pnhwwk7~Tfd)oxC>
z!?rC~kAgnm8At<tPP;lqu^9BZd&{Hf?bPB8=mgUn2WDuy+ at bRGKJlB7{$*702Gn7K
zjgThwh;&OY$0iUpgd6BjH;@Q7as8%)y1W5hxae at cSXfTzX$<iWjc_%;SNez#h{6Xl
z1ueBXDHb2#t-fCSTYq}kUK$e`h+dyk5b_$p2hcGBA!{m&OlZfY?A3hO(4bPr(XN*o
zdZpWZs0|xYp?ofZyKw<0vbj7$&ew69YmHT6a#kP)C$nHL!`5AON4H?!x;yWu+SkgU
zGLG(DSe^INRs5g#F&NKL26^n%h4)I$=`~;XuRDjOwS#BIP>$?g^r7U#%UF0jpeRSm
zHxG5AYqn8K^HA&1bg~N|&t5N)a7pJ#J?iih5*TQ)NG)fEgrRh?lBOv`AZIS at QKrPp
z9FfA*({eMW*_O}@%%SB`+zIMj9_mf2pnlIoXC!@LaN$<4smTuQX8dLc6aK64Ly(Go
znc7h{7*Zu3Ggy5?lN^XO26bH{n+b%>$EGb at GLt@tw#N#A2qyi!rnG{}jI;2b^Aq#6
zT^H?SQrK8XZTSqHL at z3#PJV_a&|PVi-X_$MadoBS9yMtbIzb+OK3yTXsdwp at e@w at Y
z1_J<F74z=lLGb}h03|+vF@>)~l)<&B>JWIJmcbL3F(iiKUkF^NG%zY-Kx2~qaZqM|
z`f+p1_CQQ3I?v4d0?6i47v#59NhxaU)DAb#3mx>S(K}wJ_2&R!jJc1(QFjWX1r`G_
zRs;TJ5VI83+zbco&3Vktp^wExj*_4)nx<5V7uE%`23cSfZt72$a`*y at L81?7E2*DJ
zG&%JtkWPc($^~WQ5J=&|tSy>NJT_bknwf at VzLuN}a}}-~6jplipWKpAS^ptep}Cm3
ztMGNNFad<AL0Abv2Vqtq-3y_W7rzdMZ6%;-r3tP=YTstmlV(hHY(_(9*%U{Px-l**
z0CEbHL$uWi(AFk7I!O=uC55J8<){^Qtr$NqQH#HzZpl%5hjbDYI+&vfYuWSbmyl{Q
ziF35q=}>ekLt6I?-=NqE)PeRpHCcg9q<ujpDNtAaDZy!W)x+&nu>uv*BB*u+YAfFp
zQn_`Bz@$*f>bZ4+i#b7d9NpGfGz!?sdw22j+zpzI=P}2Zy_)U&{f=M;P&z*U0q%o_
z8+$Hv814kX@&SR2VfcT}GU&wz{8MiAO0T<<1s{5^IuL^g`8ToF4jMccb*{3A_F8uG
z{t(IBN0*ASxi|pHON*zEN6tNxd<1mocG#WNhJ19oJnrF+V&rtXS{z!7U^CNbaS*Bb
zr_$z<yL6oh2kk=RV+MJ5^tVc8;FltnASPqw{_QSD6w at H#M%bOBNj-&_Fn<#Rj25dM
zXW=Zki*+(&nQJjmhYg)0Y?k+f2#deN1frT*;;cD=tax9!2SRYYM6KY5uW!HF3_k7&
z;i6**B3|7kXW8>tPFdPK#IlVuz<?BY1Jd73P>zU}tLWH`=gDp9+>8k at 9Kwo^d1jh|
zJk;NL96%liK{L!F*5y%sIzg!5aHc;;_ at q46)Gaq9K};3^QrwA8A#)9Bo(VBiw$_i&
zPgezVOS?Hpo~$ZsDFx!o0eY^>d!SsVOm*QQE+&mJ at E}Nf&DSRh7-rIV=Qcd=0R`$}
zOff9=1f*>$)H<$#=RH1zk7&bp>cZt9B6MrzIrbaJIWZ;Tp~)W-4MFGHTNj0iH;Wm;
z>O*-C78dC;xLCaZkf!age}4dkyL|{B{`Ut!xb4lg$epaq?3yRmK#E2bh>L}7BSoo-
z2qA5gT-#@jt2^HmKMIQhAB!7PVIIOOULrojOeysoo&=iK3UrA(L}oQ#z<AISoWIi)
z!Za}MwG$&wE(lhV=77`g%zIE43%Khb!XFfe#qf9L-SBHDMuc`B@)mqdGe at gExsNLH
z9?ZU{%K##7fPQmtt;l--<6hHC0mnCW|1l%`C<Ip~jqlsXY%W}fPFbO)VaYDjp*q8R
zV*{U4xk at zOB)Ma8$bV|yXl-gZNuwye0 at R+)*-E*9yIj)X-?QqBhp^_Fde&G>#rr#}
z5AJv~A+0abB}KL9zSvs!V+u#sHd#;Ri|`UXQ>dYgffvwpTq{vALjH*{dsX!|<id)P
zAv;lfFwJC#G|B}r6419q;bK+of;lN<*Fv^ijXmqg1cwf2=cCD6o!s#g(r#wH*plyM
zCU5XCb$I#9?z3+JO5<DEBFAL+iv_-e_`1+B%v)2;GZlU?>2zb`!NMO>6_EwY)WKxc
z30lkW;p0HLVvGTGU?{`yIh^)b&coa4vUHY9;D@}|u~vQfanG8={web++wp8`&puZR
zxXBRFKa(ZjA9Ts-NGy-}3g@;W*v9>{-9Fo2#}rz>`p*g{xQMfaHdek*YuBpD2Nr0u
z9u&9|+O>N9c|p+Na`h}<7Jk|F1#fDZM2yICc&yhUM}o@=B{rICbruoN|0pVZ!Q++{
zBAkJ()us{8vnw?N5}Vp7>bYfw1kRQ3MtDNde3`}=Q<P>y)@N$+pz$qfj1N6Ws*cp$
zg;q8(qh8G;4g}OU^=OxXhznYd;XQD9Y*=Pd1OK*Wt~y!JoR5C^TMxI0eYDX70T1I3
zInm7a*?u2?zzK~%G!Z3+`!@;ikD$=xj^B?MCSUCf?ZXZ`7#d+7zH1cgHWpU1;698W
zWV5PBe6`0b3yk>%N8SM~(0p`UP?izHIrEjoqv97u27fwS2p(elsStO!%6<AD`&iI?
zNqCt-6%R5QA$AP2hNfBjbD`~)gER3S;ZA}9yVU(lL~bqf%W&gtMP}r#g9+zU<%WR%
zwF1p|F$Vuks7}aCzzm4I{^i~wM#)W{G3$hl4Zqe*Y{xr>5RLRmExzhBhc)Mg{-Gw<
ze6c1G=(O`Pc(a~`9}I1tIVHWB?I)^zlp^I3Zo-I)kv9Y3jgk=AQ$G&kE`8;K<W|ZF
z=SE!Ac956S4j{C{Yl%9@%)DIhI at iT*UZuofR~lTKBaotHim;?D{1V-kxP5vbE!M!6
z7<;N;!}p>e at +i-{CD}FeqU)CdgHdn2rVeHy!DKV$PKDc4uef4wxV{|21`C7N%*PS;
zF)I77=mLJjN%@)q4K(y)c)1vdO?Z9r5?Y*9^cL4g!@q$K#J~>-`}J$Qne+o?cLG^w
zElf(Tb1{RKvtuVB)PZd0QwZXB5o2eT2Qmn*A<f`&HQRX*K at 8>%vFt3|Sw)htwd(3+
z?InE=Q5e4UWlWlE+gyp--l5OQIq$Um`Tm%+x7&v74^%t08}!6m*V^Zuo^j;<AGTZX
zj^;j!Neh{l+EY3}Fm#shf3hU+2-)r2O$@&m7+Z>6xTSY=i)-&fiw^Y65X+~Y83z5!
zq~CKyBI*zZ*?f-nV&|?uWMrU`TX!H$Ze`Du9YXYqmd}Y<WQ9OOt8%o-RUwuh25O|m
zOtzmLVi;CSgRXsY{kVvp=59PI*X-~-Gv-aDMjnVh5k{9rB--$1|A`>v8yjPCmyVE*
z_MT%C+*XF)6<wvaOB4~lVaU2rJH%VojW9Cb5e$>%Wrbx-p}}S5ncaR&#MC7i5pVRA
zi!E|fi<fUnS457#fQ&_Ku>_vYv?Y*4kTJ3w^N<Yoydk<U%w?TI{2BiootuxCa+?wB
z6ZbPP&Q at E?eJSG2xyt}y9vHr7#OV1evb)&8_g7?HJLTn^>$E=>l<92eX;vs)Q!$ct
zG=;ImlU*SD#>c26k-!q=;3E;0kyyAOS^<>gm4+QWy)aci9VpTCFbXvmS`0CuTgBI@
z$~l*BHGV5y#zxD=Mf7^n_uE(B_rc#%KKLoh$8l4pGNfLj460961`D4^0yN*5`g5_*
ztLjsSiNBPeFlSty!!(%BchOm~-wZu%Xw5Fkwfwkd%k_%58FxN9A+dh2k(I3CH$cLy
z*vEMj-^`-9q$vnlIl at _e-wPp|5M0)5Z4 at gw*Z|ll=T)Uv2M+mP_S;cIAO6UGD+)Pp
zq)#O_c>}ITI(7z+q|KmjFILCPS?gzOa>86hg|3Gb<}M8i_l=!C$lGo+WJz61N8O5l
z7>?h7el;9sWiim>wU{$t at 56y7o@8#?cVu8Ohx1#OIGZoXDl}$@-x$n;Ub0h=vBlxm
z;;3r&P>OgR*)_x%S|-jOOrN_>b~6^4=Oees9;kx}30kP&Ss~d~H>GXUSV%;-3*uEN
z#$^}c9b`RqpM>pFI7hjNRj#`+20%I{+VPL-Dt13k;-Q%sTuAbUJzEP1oMd8Xujb5j
zax22l%~H=It?H)8p%H>@-JxeE$crP~3y(!FvuM~Hq)e%CUkHVYH36ExQ|sHMf<Pi_
z9_vGc<$eo_G3^KRB_6xBQIEEx6PZ9tYZ57gQdG#@4!u}guT9|$@MDq1?pWndW+~68
z#ib~3ag-pX2->$wSIsgF6)Y=qwMDE*YKQ~FqMVl%0STj at uF}&>=OVgz9->cHRUoqG
zLk8)-#voj53e&>4u-yvAIimRo_%&EAbq9QbKCqb5l%fLpgUsCl52c;pueav)LGy%T
zcuITLeGJna=h>366(gUg5iFn+L+*LxgDCfSejg0kCd at P5)QL98R0l&RjAMNP|EH|~
zE6z=peWWKSOG?`1nAWezfv@?;{=ZnW at U4z!AjW_;+6J8!shWy#mN<&Xgu5lddy2#?
z?fKKaNgJBofnItU!&~;8IRWjHlWhb|QvuR26+uFaIw$fnfy3P}>M4paP!>&8(-cmc
zg1|r+=pas;wn{06&NRzVcc<itS1Cni=1VvqhLlHtqDA%ko&3qLR)cjCk3Nc$mZ7_8
zQ_nDV0=0-Xg_>24PC>70PEon#D4zwAt(QtXCK^)v%2BI{aawm}T3)wPt`3gxcA`~$
z4F=Tj03G~@G5u^YHfV6WdlJnWs;3;a at FJwY5>cL8DhE9jE5>bsh*l2Sene6``_;jv
z_jD{hUgku*9BOrha;`vq^phiw;{`QusHGJsF3;<$ug$wY`&}JV`ik!g4Z}%ULpW^r
zNJE~Dw*5Z`eH#M9*#Xuu#s<7{0^ubX2M8PUu4qoN(V1LhRQRxGL<5E$On-Bnzzj>Z
z3r7&D_554N-Rc2d#i1W^db at ky@_rXapMEMMMK)UZ3B}ljI#`1g(}E=)JHPvYI4VGj
z)B|fY-qg%psDK4X!<ek7n9)hC-i6|pEqSf28&eIi^(ugXRB5!=Vnw)=MIGFQPNI8{
zQ+Gg?s5Q#vt1Mh*ECo`2=Qc$cJT_+1D}Ms(Ia>p8?IirU=fCK&<lxC5{#27flitSP
z_R1_OVP{5U{&A`-L*i6XL<Lu(PV-k{%+Z*Nkr1Z5y#!}u=Zf>i298<(CCj7U=zg>8
z4rZi at D@Mq242|wxq8|7qF!c`Zcxm)Pa2kDOa2m~Wp*i^mFcRrZQ|eqL8pxJzi@`UX
zKP at kOrk+bNRH(bj!%V(rYe2_xAYqqm%ezhms!+R$R^1Vk%~tbghX=AUyH at kzxh_%d
zjg=8xiH){|J?ez4Z!$3P=YUd_Dilwvs0er#!Hx0Sn5JG at I(Uxlm0U5>5qOS9bg$<3
zY9@#vPO_{doQ0qfO78)dSmon5VCiE9(CHE#I$h0g3CKNHb6NB0?nm-E$0Of7hGl%?
zasKOPJiNUn=>nx+g*v#w&U8J%V+prn%-V1A#rhhAZe~@^h_7{`0o|GAwTm^^Fx{b@
ziUFxZXY>bWIw>lzmMQ2iwg>>^=Z6O6-EpvcD&icsyI3eDTz~jvWM^t$JY?FVwHUMI
z(UY>UI)wq;P&wNL3TNtc6*`%*<6wU<)mMcQ_MEMRoBW;ebZB_c(N)y`Z-#WFnVL(X
zE_xE8^WE3|R33#o(vN&a?W0f|dif{RSqjB%$y#}p at pS7LcED#=nYd7uY4meae{hti
zqEgyK4N|Cmu%tNPer6)5%bvOuhNaM;_4^;BQGD0jG$b at j4?|t55hi4dC{xt_8n8tO
zKL497QuC_OIC)b0wcTg#_lyWDhnT`dI6*Kdg}zUZ^sW18#WbLpF#cOH5j4|3`KXux
z6^z3cn0y|E2di8{wk&X^aah7q%m9+~%|weMfOLHzEv_$+cue~8<A4few=!LjgzA91
zVJd~3u~5)f+yC#xTO=Okh6)MaD!8$%0-oPf21UEtJsB$y>1PQ{3gAhmKCV4C?2Ll9
z at oOLYse2sOVgSpFdeyV8cjFw{ae^H;-J+qZ&Wll7J=|WpEu3|EgvW$w-*yvdgc>ub
zowHTU<sr;5m7G02jLJ9E${f%Ah2u<9HqDYpv-giV!GDp^kSi$&D)oW~!w?oZFAgdB
z0w}6?kQsxskr2{6Q{?B1OuBA|SgZM2N;{)A)pc93^%LgzXU4Jt^ZEf`O<$m0Z56X*
zcT!lS6~dCqaTd7?+{eM)9E8hbjYY8o`%nFxxPMbbcijv*7sEIHVT#Cc<3ONvvShwG
zU7;{TLBuzQ(l+)10;(5t$P3#82XCl at H~vAmwMKT1c;87lBC`ao6%Hq9$DGM70yl9L
zjl(@Vz0&tMbgKh&OouUEO2 at w?9Y at gIM*myXJq&n2o!o=k(vuHRxA&ma=<hU?-d^+*
zdDCpSpB?rGjTmJbohi)hgUmciu%%MOO+m;D&_w*eCYN)F9VEcn&+Sd2Q(Rc98yDkQ
zvM5Z at np81@cw)@i`w13V4xp5a3ww1cBO8v?ftoqlq{U<Xe<PjdHxiE<6N9%vqyt8=
z5xd2v?i`r_H&>0uQ5}0xH(N-zpRI$R9$yYvJsTkT#ADuook~Xq6sHEY3#kI%reg+h
z5FjaV&_>q at EeL^D=9gkdqMEmBwKhJjY?z>EXSjD1i_`g at GqivO56h|S8q|Kym-|{x
zb>TM*2qV7lf+`Z4=fp9Cz*yN$VFD&Fk+j}2EZwL7Ke)s3Bkp*1#B?ax at ZQ)DUr~>0
zP?20aH6i}%-|arOKks^gr^&XcDY~)bQEpM8uGuwex7TzOW{s|o`0 at -dX3ShQY%)!i
zO=DJq-maX0MP5m$%x#~$R%Wg3hCINpEH{2_Bam5OdQGmHq(uzmc=D_54eLoHp1coK
zrTYP9^426!e+*-4;xgPIgXRmi?6CL!yp_y1_4mUur`XE}PyKuq&c6PBj*haAL*ZdI
zy$%<Yiv!dC+P&j>w~Zl$2ERWFcmy3(YxQmPeTVL&{ZU|SPHLKoh-IsjaJTIMDglt$
zJVysIj}Pd}wQ6kHn?SZCp4JA5ps|$4I#;Vh3YSBtx4_MuiT4oeQY&3p#iJR2$b2z9
z5Uzdi%`|SCSLxzAuTobr?+^yD)+%PpU at DR}n59ne8^8>`>V`Xg(-bRfj~9zq6kyo+
z>Wb)eQ=0REAtInNqK3fDtnBs3-d6S#*Wg1^?0v^a*s`h-^91CSBvcK#9+N?7eeO1-
zXt*Wi=68UqLNEcGO39C<p6x>&<*OPAcOcabAcaKEfFyW+vSZ&j4}}((pv8t?L;pUZ
zMrKK1+-{8K&w0NTwpJSJecQQ(enVQ6Qvkc}O)4Y<z|sZLuC>4YO{wgCCLiksD9Q=W
z89=HcgDOV86~6BPvWz*`@Q~9mRa}R9(e_X+bts=6TunWyL!%9!ssYeCSqU)zGs<^A
z>O*s-R_sUla_t~HJw at W-x=KfZgX!v7-_9w<-HJhH?WQ{jYjw;x^R*5|NGr~c`!yqW
zuXc)^Nhp_d!QIlwF=twxOV$|?qqTjwJ(P=h`>U;a8!K%LyhD%#Gs`+>jR-+xXKaij
zyX*9YDlZQCO|+ggisOPLLH1ASL}<GWWqAM%GEMHVoi*}tOh}{ZOsN$I&}f!UDSN74
zNwpn7xpGfUPQ|`}A2qvUaLE+)T<Oyo&XQ5rV*p+J=pAnw-z3!JL_1 at ZvMV@e$@SsK
z(k6d);wjAZ<Ql(`l6p-}t`9QH^##x5?=k|_bG2;XEi at rgfe?IAyJhv_i%@s{U+5?s
z)UR~ZfhwrdF;WKX7a0mcuVqz9Y at XkD;n-Ksb{{@M<sL+*Oi1*hs}Ik(IGp(Jc{AMA
z%={#sYCDKdFo&<cAE(hO&U4;KimBfYqBdb`ML^WMX=gS64`)mi|C=+48M#@EnB1Hv
z!F)e?A)K<24Is>gYA~|p)ZBXXGl^DeD^fZZD{s_4)USb38*YY#%C_sv;rklzv)bc+
z$*OUcTcthQY<js~z_#(-(aqX-RGaP?KpI^@mL(E2pw+X00v=?x#r8+27i2wuSa at -w
zLl5QEfKHmcxz&r6o27`Ts0z3wC~%mp_l?unQuEc8Uh7y<Hy796to{D)I4`L=RnmaE
z7zdU~0&1FOiLEWudTJu6^9`sa*68Zcrd_rAsR6ak$o_0Np^O1_Z*Ro+s}H*N6W#sY
zZ-JjmedX;3Ie6deG>usEXDl*M06o3yjDWiyKs=%O>#{3Rn3hoivG~IR<M&!Gne?DP
z-HzJRz0zpnGCgYPA=Jj~?!>eXxab<Shkv-lX>yu4iYhsTPM{s84j)2Y7Oxt^JmD-I
z1YAJ3nCn(qjQ2kNhd{VLNj&yF)`6qTejOJeVEer*Loc*c%#mHF=4w8z`{Y*TBjeg)
zWlEZR at Cj|6R*6SaK=2OA?J&A9WWk)2!F_X=$vng?bu3VP9OD?7lUDOH{V)Sj&FjVF
zRvV$9xyQFGLwDj17NGib*x{GA(8nca(DJDM1a<i^>Oi|r{dyR6!QX8f=+*oTAbD#H
zp0-Fm7am-`d`rJtP~H<z_yPd at NsZ`)2{$5~kyC at q)rk>Zu9KEYG at B!=T=7IzAYEfj
zEo($w=#M<8l16kYt&}>~h<f-B|E8Ox=B9jf6)TOEy#(B!v!c}AmKxPR4kt-T^C%-(
zEJBm5K>&aIVomQ9%KixY39X4r0yo!!fV-KeU068}hVN>;zoj+Fv`*Mk_Dl-?Li=0x
zI!dR`9YJvyphz>I`JlY#tNA6zM}y$d{CCTDHNlpr=tog+(|!u`925Z6a~In$OqK6$
zLxmniQ^k3GaLIrvz^Y}TA7*mw0VF)BqpY72I^U%F;_aE{1k!kV`1x2l&nE6l(K*Sr
zo;Puv6hs<G{dyF2GAjPi(=O0 at IA!?-%GW;#brZfP75D{e&j_#I^9Qx`3v?R8%xa%A
zRs99(>{XWxPklj(#gV{fKn{7JLmo%!b;Mk`S#}k^6HcQ05)bL)7_YQ%)Jv(CU!cD7
zM86=8^c#%%Xgk0783%8N7*$pf#CZw0)w2`)BS5ek{xb>w{q%pM2{PYCul7S#PXqL=
z!L=+yV7QyW at AWD&M75tTF8O{m$a3f6i(V*w_TcBxdzH17sOHnuvGO>U%rcg$YeMbl
z{V%BVP3SZ^WQpf9PRMiSb-r28(G8O06<U|T?W4SuKA>XaC#=F*;#&(@QoAAJcAjFS
zer3{zf%zZ8ZV$2AdEyc0W`>Vhwe3aA?TarOvyqX>i7+0>)D=+9{^$1(lR<?L^`)&b
z-x0P;p)W1<@iD8tQncUiE6nd at 7mky^MIpVa<)7%*DT021namW6FABM!eG@*kGesRf
zhEA5t4g at j6>gC*)N6E*?t-5}%-PrlwFdX!nB}|KW1$J?~rr+ndk3SSVn3O{x9bUAH
zEqnaFbh&CM4#+?@!r7Sm at i?}uM~6NL>3?#dy{lZ4{4lZ&5L>z;vRAsp30AtvRlP)}
zLZ)Z##Ebyfq2iCD*79iAh2xW&!5{tEd!FA7)QaWmS!Zu=KQfS@%aFJm5ov!W?Bb8Y
zN~naLSw(K;(LYN5{=Jazz{+CGD9>euUeTQ+-?jl1!mU68O&u<i)@ki&YXZ)}DXPG)
zlUDdmB(P`+|A|mlH)XSxshmTz{O{R%*bU0&rRPcx7KrOp3xcB4EtGbVop0Qn*`>LS
zag1paWy<UXc-ZxxjcYfDeGUP<Nc{ny6}VPQ3BOT8qs>_IFF^5nrk=I&TOa&w!Z|Ep
zRus*ocjZ{gv#^+XJ`3UkRhjJDf5>+=1>D#%Svwv4p$i6TeUO~4mB=W-OpYr$-xxF#
z$S>u?J!Gkkp7%Ol&c7Ml{HMbXr5wWWvy(sxyN?4Aqcsy{ym6heFPTusbpDF&E>wyA
z-(d<dd1u%i(rTt9oFC25V;#xs>zqHq;yP3#;nbjE0jxkf9y%qZ2#%<5RghP&G?_=1
z#?xen2~0<T&kA87kGpmsUf!?c2cSE+gXx+TgR?YYHHP3C>Yq)CzeEKSA(*$l+6OtI
zQy05t;BLE{)8od|t~lPaNL_Sl&rs2~(r2#jp)bO#sGVP;HjX;(3GxhSxhE&Mh+Hr%
zC{2Wz!Xm{kK-58Xe2MbpfnQ-BEsxFsvgNsJ6;${A1+FhJ)_2;~F=dKw;5+$M#09kJ
z+;tBby6(qNvi$5{gUdCWYgC%edDp}DkX?1mg#u)|c2d^!V3Ah{_(f!Y(Ps{?1Uw^1
zRbtNA&$0NLLy>NwMm+^#%?h|M^2rKqLZhC-k2AEE=N4ZCYMu~Eelvc#Ui6E`(^9M$
z&s>i&rJrLSH3H2Fn?JAZ(dbe8PNL2Md42VtDpHbN=?(A%FhoG!>uj_lqbV{eyVflA
zWm><kp(gxqLyew9ZRB}<eUCqi8k;r$ZY;x6fX+B6|21hF at d~T@$OCor&j*!4E(e)^
zUv3vFIH<I&S$y$T_iUE1e26xaYlp8ggOq?EzPq#sL>h#u51eC{jzrhXpI6O#wdd?l
zAAet{nrZTJa+=wU&|bACBC^VllmF0(_-_%VzsDloZ0691xqcQTCAj_;%rM!Z&5Q3Z
z at G=Kvhevq1BA7F at C@HFWxiQmX5u=ZP{8nk-KjLW8ub<$38y!|NKVxQM(6QK>Lz#ll
z9K at V~pJ%&;diE5+js=A<Be-=;O8hm7;}uB(oj|<9!zfWAnHe%LO5 at 0y0q!n0z%=@G
z2&MQM^$ph1vyBm8FWST4byW8pp~~3D|1aE~ydM>qXn`5~_u$s#yeQ$mpCmP5R6aZD
z{<UqT2|n~C-TL{`pQypFQO}jvK|&W97>VHS1n&B7p*V{)v!`8{0~Oq`n`Y*(8KpZv
zjO?v8dctnZ1Aee({b5;|Qeq(eel=od&8v}BM)`s=^!!u7N9QkLzYagLsqRx)hF-s!
z`PU3;`!}ewp*YHh5zRCyTv44zefJGIO>kNB>CMgge_q;DO1v+?P^oD#o at EJ`l-4XU
z-y5FDkv3A6r+{K~mI^<G{)Ktg1+?GpD>_0E&FEAs6P#5t$BQlF)?qi-((aNV54ZxT
zoy{n&*Z-x&rpBB)-Hb*qu9<i^2a3u&RqEh7^C!oPqXIaVK#EPgqF-2Qk&VbSptrx4
zur99bd=ptf;HB9ZUE9d{Hu}!BbO&io3};oOI{717D%*uQmBte2zE}DesKuwzNsLer
zM<uoWH0p03 at IwEnhJ|-*Ob;&ePeo)oDac}`O5qKjv&ssoXQ$EW^2^x>DPSmpM$B}n
zLHN?uHmo;J-QvOY{xIokANqPYYvqG6C0mEP!&Efi58=q$IEjH~TMTDlDg-ael)jzA
z>dfo9bT=2YJ^h$2C*eb0D&IhgBAh|rs(I<V#S=>B>GHD&mTP^dtbh=MYB+<=G|)c|
z>iqJD1u5gy%QL7ujifBUMW^8{Nqf#|4_X75kTpMslhXi8(6RQ4M*+{M)!(AHg?4Mm
zpB}=bT$2(A95)J{)lvJuMKi6d#MWvvhdwfaV=e3wyUT!ld$K5;71B+)w4k53&l0m_
zu{>Kp3uIy#MKc9=$GtKOC1j4$nh*bK3t*%lRnme6%Fm9z;GG?S2RNh;E0FIW=q3p3
zs{$7rtNdB!_dY}5Hh!`|JVVB*a{{HgXPqiWq(^FzRRg+7#<Vr at +evc*6Xw at B!9%F7
zD`bB_y<#v at DJDT!*aZb$TN{;vL0S#bV0my4fJv`xoLpH!(1affkG`C6Sk@)BmYL6X
ztG%fdo9ZhHtUo7MnhMPG^|Dh$i%s4>Yl at g8N{if_nE>*Y>;67 at BFMubjHI))?mF>v
zj(EGLy+fb22`zQIYsw_liL-!xnhQQ<nORO_)@KC9PUw~xhERVQe^-hLUT0{+$ru8G
zlhd^nVKf-32{+um#9>u4&%}^Ru#28)!oAla2?Up5nYg|fyUrzyY|8m1K=Bg`RT%~o
zx-$&Cc at FL7mp((xuG+OJ!&+O$$}uB&aIK8t#d<PujVk+!Wk`LxN^5$}yk?Y&`wn%Q
zFe?xfmU<&gJWY0d&=ojPS17wu$EJ3Ehw^DL)XDEqiv`h*lW!T;R<m52IRS9lH|&fe
zF!-YW at xgrctg-S)%hSsl31mV5BSLVf;Yj(}akXvR!&f^IWQ>j+A_0#YIE`44U2sj~
zl`mO}SO9#MT=$}pqHNEh&T?;yX?mHJP?z28teGdV`PDw9L;9T;vVMwYGuiIyzN8!I
zJ~_Ki&6Vsrd-~h6e-19zgvD`i20U#v=-9AfaMQ7vmZYT at 3?E9&e|-~hTX}qXH9Q*U
z_M^RlzXgXw7D&*hF&88X=+$P;<GYoIrXMXEmpC;&j$+08iIWk{8IW--;C9*g66aNx
zAY!jJ;$Pt+CQ!8TWZbN9aM{eHro9}u9};a;tGiqrges21dLYn5raopyXUA1=;iFcr
zp5<>LF>e~HGkYYa>|4>5G)t<u74_qO#WVEt#rPLi9To?9ZYgkC_kM$BFV)$KItEX?
z^3iC^%UK<Z+lI?_M)@j_pE(-ej3KgajP<cL(Ab}-=6zzWg{bZ0*QBV#Y41B~+Idvq
zYT4u(lSaNN#(@AZupQ(vB302->%%pY<*IDM%<ibEZg2P5OTVJFoJYNRdkodV(kxTX
zO3OVgO}=qpuoL}QWb${JRL6P11b;Pl=%7Z=qs|MO>ftn6%Oo-eG*7Jv;LsL+WF_XQ
zY&cU4o^8SoC>ZBbnjgUhK6t8Bs==5|u7`sFr5J4t-NX2n5%r0?U0OR-Q+^USv at 08@
z?<TIlT0m{MfZ8%5r+_b3UqGW1O at u$DaB8=XtNaVRIfJPu#Pb$U_&$JHXCgGyg+Jq@
zv=4r+o)szoE_2}#n}*!%{51gw>eyL+;WVdv(KF1s>CAws8G1igMo%@r--LZ~vd)AG
zY(sH+Q!BN!4dn~wVuCp4Y^A8??uOq1OutDFdS<wNGk$+RXtjbUU$`r!X(n~B4V5w?
zqd~nm7oiV0`QA8c(nZvdHji3%5p}eE6asfoA#Q5Mv9 at 06dzxk*!pS+X$5)$h|3wt{
zXGa}td1Xm>E?b8zf(HzwaK|4-V49Id?80RygIgZS&wE$SLo&N`@1PXDc?%w2qJ}P_
zKB3yvHYFEFgZzf_I-n8hvMa^-kM%&8 at kKlmn-O0S=H%9G&q at TO@oZs%IKr;oM6*4U
zKl{t?GRX?epjSFRh03{v#)uCZ)nC2oo&Wt9U*2Bgpdm;W+n_8A!tr5uX%T at pO;Q9&
z*~R$Aum5=;D`0;D?dZG?QAbmZ?@=!^*cR==o{_rc(aHnRUi={{?0a<a(&V~_3-O`a
z)tr=^14DjcpXVEq6y|Kwc;V;zIY}#WI&q$wk<v!q!RRK9qMyQvv)gad^Iw;mB8+zx
zoE*`xe&Lay)5k?D0$I#@$PjT?Vx|2!W6TX<$ZtrhsxG748MkpptMi2p*yR~%`O>m+
z8xuoS4Cmc;iNSvlnl0_nav}6!?69F?<gS{Udl{Wfzl&0vFQcBUjnEcvL;ds?>eOY_
z9lfERPxV|zZ8>RcJKtS8%imtItU*kc0&-zrK|TES8xq%INMam at fr|z%7PuJTVz=yB
zcFfy%n(?)3`p3*T(~Mglz26Q`Id`T7u6`6keR>73`VVytDjUzRd=!Esq66cq4`Cr?
z<8>yvX*BJ9Z5k2_(zrYdN#V%^DVW{SaTOpXgv=jT%}~L-9E7ZmLUiRI_*j88KX+Yz
z(5rWwk+BsOBZo3|hpEY~nKLu1=6Gp`g at C?L>0hArm0JuVCS|R}m at NUmtzRyOTh9Kg
zV8GYdtlV{oSThgj3^3sqA at H7th+#nuJjNemO5L`hu@!yoEde>DRLWJ<O7Ll>6^$jk
zlZ~ub+1Pi~d_Us$WX=1UUm5XF-d-z;Zo-(N+Rz-T<|;ag4qD{KRn(ro_dcb$ismoz
zCMkY^Pz8+#Y8C*A=@7}CvZdG7p^x7kUJ0~K=J}rV;hTB|ua})19y+u8ujtICA;SZ_
z{e6-^ye)Ir at X)Kf4_P;_ at H}#G1l8cs3u)a%6W7B(WK9EI*M1G1D%eBdK*9t8Cb<@j
zAThK9B6<o7=b1{~syQw^#JF}fW#5iE+Q34OR}2q*(gnnSRh`MgLp)_-E5ejMq>|cE
zz8tqPAQLbTSsccMmbpYV)v3BYu$?0Z&E%I$95qBM5AP at oV;jJ&BOiwh$t=dnZET;9
z at 9&%xK^wh?-5dTRXcOk|vw_2`EKJPEl_-KdcBXfP<+pJPp24(?pm%c>L4Mr`yD3~L
zUY2f(Fx$BRw*VH%XYd-9uy~cZQ#siK49Jh)&nP)K8YC?m_qr!lNB_G5>AMkYlF9Zd
z<E%s?eN490$#miO7AS(sIPFOK7{Uz87n{^fq>`?q;uLM`u%t#d?z-k at zOMgNLwqb1
zl!C#Q@~qBlKfeYVt5Nv0?m2tC!t9ej%zS>Pm;JaBOGrd$LJOR2#}i!-&Bg4cyS=86
zgI*$d$g;+t8orLY>t7 at nNIWL0DUTbd4G&NtCIb}s8hw_sVgdeA#y}jeT`W3CExv*J
zPM%oWN at FFCvdVTD7?p0u45S?(=TS+(#QzLC!p#QIf{-+rZ6IVwY<@1M&fh?N94-*p
zycY at 8vbP-0{QDf_{qC0QZ@%3%WT!A4s$<_98|71GH&K`1(QE#a5#F64xN?^rG<lBG
zK>}%w>l{&}2C|d%O}2IL+TPd%MsF3UaHMn%fx$TZPUFtfID)24N2Bs?qEqbjV~_#W
z5C`f|qMG%=0+kpkwIbNsB;M53o2cK^s)!{7R%>-K_|F-uud}!W(kuPlbCHU`CF?ui
zDE=TY!&~miGXUL8T>mrHk{58En$&?t%Wn(0=P;8-_gj<RLRY^tZT~*q at Q{F8T9$dq
zJ4Ys1+2BIcSbR+p&U^JO{}9==S|qAzkY?SCK^9LnDTsJ6db;rG$zT&d!ven7W6Gp4
z>sHopv7C7mIVrz`^hpi;qa|qy at kZuqM7F7O#PI~b*xRq%EH|DS?m+DslPh;5QMR{G
zHya}F)pFrwexQE}vL at 6PW0I7_X0N$2Sh|K<dJ7G3n};m=W6~cO3eRekOc-*7 at lD_J
z1BInFCS(=n=~YW#XS(OocB<_bYB6c=FEFQ#9l57`#Ex<APf^S8l+yWP2Fay4lU?G#
zTF*;LkYj_Pz at fkDHfl|aqHJ!XL8d<+N$PxG!Wd%0;=)(7qtxo#=oF6!!cs5B5?`K5
z&Ez%6xR??5B4Q~02Ji)-aFra?xrAut$=e&LE4NVxY+D_mbcV*5`t3FvCVwq_{WEEO
zp}oWj$VH?7m5cdeFovf7J&3_b*yyE;^Dx9;f;eA~oq~?^0n9o*5wRYcHuEmPKTF9{
z0*Bsr1~;igX5PM5DB~fXP!*obYwKxTarCXQoM0Ee5 at ++fCdo}AoRQ`-24Qrf5;IDi
zhhf5bk7;BAAp*~|#AQI><YFv;QzTo+1?b`RoIu-qJpE0(^M-}p;QfsV%h;p{%2=(4
zT^NS(XD5UBZl0wO<d;q)7@&-4FkYx41R#wVT*2T90apwNkIh&uSHyvrcx~q3If24m
zE3Go8;e1jBt~Z282=7Xf+lS0Se`f|C1O at z)S1>2AN7gp)+#XOdcs%3{!55Z;yOLmn
zbYg8KH-WsHK7JVF-K2;gly5p2J=<%@XU3Y9`kD6$X3d_H(PZvSC#g%FAHYlqv;za;
z7$DB*L!9NuIOvE7#94tj`iD6E|B2&f&L<3D9ArY>zi1X|{y<Df6*QKJc|uzxa{8|g
z>*nT}fAco6bL7;;fR|gl<flTL5wpYth~w?)*by=@h9i67z>(btEa)3>`49-SFMFPM
z;j!VNVtjB*elVF!;Gi3oWehQ+)u!k1<F<qb+2=sx(f4AEnXPC)Bd=MUe5IF)i!;Fe
zuhog>UXdIO<zgIZv6tLrFkKT0sMZ4X6$<XQ!{gy!Nb~9fq&J5QNuI02l5UI-tt8wr
zJR!bga3Tm!0mdrv(#Y~CUglS~tlgH{GhU}DQc9<LP2F;YK-M3LI6<l+F&ieapInqT
zTwlIBURI6K<1K;_JNGS0K&Z46>$j)AUiNHxzndKBX7gf^HAM*0Y`4-+Yh>;?=CLWM
zb7Z$rbZ4fimzz4t`-jq%fKwfhH_h!G4U+A~7|*xwdMmSwLB`S<)RG(v<>I64f_G{T
zql=f)erNKDpgUG4#IHk61mEGt<P7$o2zkL~Bd_P22!*W##HS at tN*MqO;}LQYFb<Vc
zU&QPQ8Q+}t(B%B`^c3f4=Pk-W*Nh*g#j;bP9cC5!sSt)bDW+Yn;vnnqtz^8iR*uN1
zAy(o&gf3$GIIceu>2}k8*0bao0{0)Xb691Cc%?|pi=!_;shwYrV5NNoGKeaJ(wk=?
z@*fcnIa<w5_e1pLj!lA25!Z+Aw=xD_zbZI%JsuT!$0{bxE+ at W0xck;5udL2De~s{r
zBj4&~=Jqa92iHq<OhwC(jUYVw+eEj?vj at YPK~x>1`6h;wdr9K)WP0!pxXxpCNM~vF
z!k+Q+XA3Gux|;Y3aF>sCQP8MR#mK2cAOOSLO&S^M%sXP1>@<%*6OE~oSw5TqKCWGL
z*n92phB75IV4sc1`hAd%-9GfpgmG4{G}S!Ia>(fKN`9#hhL(?{j&RrIW_;UM1oL&c
zI;bM)lV?QUYXYvtF)fg3iz{LO%d)KpO5Ftk_1V at zDtDIvr)+CqmAgm4K~w9b6~SrV
zD^7g&+j;&GI3rsU%t%>ckM~VZ00nA~1tin!r7<b8U5n6<K4m<9l-MZa)xo74CQIfQ
z&ybb#J%#guU>F9Bsf%zfV<LRA5}87BL0b70L^PO&L=UDQ$%7Jgu%88HF3ZJe0B<3p
z+K9EKkRYwWUs!LZNn8!L2)US`CCTQ3^IZfHG2^iGZV+EH32PY++LtvQ6XXD#1{a5F
z-el-Kx+Jk7&VX($Q74SKdG|+VefO!bLgE3!yw(@1m-3sFm2$&b8I}sSFLzWd4g94B
zKN%^l$l%Owg4P2hHbs;sWZ^ZwQ>X3Bk%U~#JhT;Yls(0`EKG4$Hh|e4!mqp`xnhp&
z^d9DQZZ$*5GDDUaBMq_;F(a87T?qG8tNl$%3sVk-g*DPWHD7{1{}FDWKW1R?+=sKW
z+sp)!jUssN+QX>^&*QCg-%$6uQCE3d3{v(}fEh^7k)81|dsaLA7KnkVvSwrwxX%E0
zflP&Xf at fdAHh`FIcZ1eF$L<6&itJ2252F-}xPrpN+8;LMaNaGlXwRKdAimC1Jo2`R
zE_k=Hf8~<Lbt9R%i2fGoIU|F6Jo5-Hk50Zj$AV&B4%h$|QL~UaC_fnq1NK6{1XY;j
z)hWs_Ah{W>%pqDUH;{SdHbTGM$A4mY1%R&DKz0~KV at FiR(@H`}#{6{wC&NBhuy(8k
zN?^vk92s}W8YqWsMk<2UXC|$<)tyjSdnMs;tqnlZMh?&WtQ|VCoM$!&t>4S9Yc1>%
zK-zPPak#N(qdwjSP&?Zt5MgCjh*{)mp1EJOd%N4keR^;@H at Y`m2}j&pH;G52EB$EM
zE|`YRI=x)IBx;iQjEI)vCEEaKcD6c5SPSUx2h3^ELy<9fO&zQ?v{{<XA%F2PllVcc
zN?tKiyFt5=ZIf^p!GuJ;J4EYBTKU07F`oQO(c!Y?!+4mA#{J;49C_;(%UM$d at mQ?a
znj!*QyDlHvJzlytE`N!rCOgL^1)0-wcK5MR9C74YAm%b(%=*=jJY$f5QCYdzT6Q`G
zA#=dUpM9FZGu9!C;NiMj9AS|_Hhp%PXOiQK at p4m;OlC71Ig_ED72VkM1n{C+EyH)u
z8}8nW9RND-pL81|QLRH}W_KXg5|Fi>s(FCA$AhM6zAf>{o&=hvf<5C-ntIk)K?M>t
z{f}3EGQ{xrF0rlbz87cg$q at 7AKE+*WmKUcrJ^K-9Re`jO^Ie!YrWbaA&dRjX4SPcR
zJ3;XtqPR=TBjNdXA??Av8YPD%K#IXXIfgZBkMZQmED#=fxdLgvNG*McPH@<f$#<zi
z7-4k^eHrvAlfLVG;WLHQIu}}Ftw4Hms67u+M~^S+-JP9MD{G;d$kNwdtg+b at Bb}>L
zV4quUwBT9#U#>P^SQBMbJ5K%j5ZxSU7c4=W`s+-g!=*5lf-m*(;*bGxNap{e?9Jnv
zI=cVy$p$wICSU at A0tq{)Xk<~O#DuT~T-bsOm4YH$ltP6>Q7<=WK%^i-2~i7b#ic%0
zYg<9_5yh<!D6NWOD at s+=VzE9h6pSqLn at ObY=kxjg^ZO&Odoy?L+*!_?^FA|Y&S^AN
z7Qdds=uch$#Sy2(%oDdTi`TOL4a}XeS0DO<K|N+skS5%NE2 at FGNq?-HVkas|HH8*Q
zJ>S=IBD{Kp9o at 4ax<&9c;(z-fUB0+G++TTMkB?j9CWlMfO<VPbZpspJWR*VdF2%=Q
zQon7<*+g<Q&YNrHvCHeH at b6``L!VX;1hR=s`n`84Tq?{V)t|acnI`P(S57b6R~r1~
zI{#j#1!mC_S3R<R8qvnorJLnZoG$69_b7e at n#H0#dVEA9<{~c62-N0<N{3DerY!k1
zJ4wv-<>V*Gu{533%(amk5S9J!LNPCcbmVFV<+rt+<CFr^)z(lA?tF(_r%5^W&pr0{
zDGA2kF~R<+NDX^2>-n?FoMKXXtb|YT>nwuK&PX0b?tI9p(rrn!4n5xWjw-2Jy>txw
zZVcIx-kKq7%}Kx*&ASp>8VdJrz_+mIm1&r_PY75yl-85rK6A-F6;EWV(tEfj={$r<
zRjfHs-aEr`e?$h;Xh15wF&eYnxY7Xd3Oi=Uz0G&}zeh_uM9)$*vzz`Hc2dRwQ18e!
zY}zU(WiHyyLbgNAr+=tN6Eo*_A#iIHGEFa;-bt_?c0$k4k_WQaIQxm|Oc8qa#yexm
zyB8)4=p&)jJe9SHJIIwUH$oz|QgJZ5N-d-k;-oKlb25pt%ElM?H~NxKG at +BPezTc7
zeSr at C-*f_5vL;tlEJj!27;`7Oj-Nr-KHbmW$O}Gln_uQkPD$c|8kKJ>Sj&+D^@t)>
z^=w#(Z^fpd7(ji>qwW*)>k^H9>WCAE7+RT_LR{qjY*4v4a>I+<r<!|$z}>47Q$7hx
zO!+t>F>~z=gD||vM-X0Q?HIn<%CTX6V#*swnEwMua(EHLHoRyGKYX*C-|$Id%8L(R
zI@^&NzIi&MAw4l=cSd67whTbv3d{nXpq)4uR_V6K$0yG$7}2&sBqNOH!Vu3YnEHho
z+BR0k8#9DfTLoP(?ww6$1>S5><PGgfTsH at fXJ5aU2kU_9R8xN9x|x4|#Ei_|e(;~e
z;`hO at lkp6Ri;%9mhz`G!KCS37(E&s&p2;pVN|tbzZG`1e+Ifr6I>(p~UImc~%v5n3
z*s31-at1%Y!$%=8`;>(wbZQpTf)msW^O*-4t{$0h3Jy5kI)-z?dXG<?y#J$04>V)X
zGf_yjKIQl<{nz&?wjWIQCFgVJTBF)H&k{b()|>jj+Aip!{=t0;*E%{Q;u^k{PeZJD
z>N6|g&<FXxyPolYGR^hfuQ`9gpfjL?h6*M`Ft^176ly=IPkcb}NY1nZsx2Jbf?G(a
zj3*(FBpy1x<gaYS2211V0Mse9h8Zy3*_eLbK%2<31xl)hp7NSMZz1x^IhG3VA@`!O
z``$g*KX^dl@~abrZm8h2LdRK*Q%YgF>RAsdZc`uetq>!DFlV4+d&uvVPwY4*c#tur
z{aK7?own!W3Plj?P6<=L>>-8EY7V at y2hM6(VdZ+g<{`z_gENcc1ApP4YnW3$FOjb5
zk_)Z;W^vFrdeM4tmmR%%c=#KA>qClw^pXC-LrO4F+7lyJzD|ksmL4+F(|c<HcAwpg
z>_zVb*@dyUMtXx2u--=Aj6`h1rT at R;b(KP_1Ge}@lGhm2U6S^hyk`W7Ee&+M0uv6c
z?B5`0G%;`wRp&tOM|^fvf(b3ldtx|i4G=La<eqhWlTT8g8b6W#UN2>eT}Iu)b(6o(
ze}$PfJ7o*Ht=MJxRE!KOy;CoIMDZq(^$Q<SrckSQ1$F8-KBDlsRyHl1p|BoVWkeLW
z*Ym+se0$(e`mY{Q{A5n&e67aDA{v!v<1p3DSfT%qBF~{>cz-=sn0M`2ss|5vq79wb
zX^5m+W(|dDrAFh%`UuO0j0mTOBE92diVxBMY&Ur#v{>7D%=@YR-j1a_xl{dsCcU})
zT;*6XpEB|MlM&1Xl_9&h<!p9>h+3u;xHB!_9QuA28A)MD>X(u5ojqmy5_9ucCFZK~
z64wppV-_%vm&(^ySk?&he&@?6TWs%CaSNb;Tm($8$EXSnDL<IW=U|pYS`bD<6t%Kg
z&ZO<cu$4s&W~oE#NE$~-O{fCa35~!Jr(p~{xO3!}t$a5A3W-tJ`$Z78y*BP%XW_et
z-B8pB1j+WvpSF#D_57};Hzp4+hT7XQO?Y!+%h4}Xgy{$tqAQ;~%5t=YU&5Cai+2uB
zSqjyId0+9(O>F9Y;jQSHRtqMWZMDC0@@fn5=UE=vw at k3EZKr{Sdb_$isI^kN+Je>y
zsLvH9NdVIxROqwJ#h>#jrV-f)U><>x&;enEjj4c5M32l??E_R**#cXI+}VEUugtSh
zW=<-QR_Nd7{jf)NVdJx4zFO{#^2n8cuDh at droomWr`(!g6s%DbE~#6a5?-WXo$-W|
z>Yg#~t at KSu(8lfyrI>rGCXo<V0M at 2{zBR6ghycR#vumWO$whFSJUC#^;w);;O^66u
zLe0`z=2O#Of~8L_Q#(ecCT1qIAwyY_mpW6L_l}~;jI(4=`<M2Ip>xuKuNT+_u1Poh
z(L$QCxJd2^apqF^zFFEBW-KE;7c4=;5=H!*_#~_fn9m9+m5u`CFUfmiL at HNdfa*W+
zs)g4B!T|MbsA=<nS?S)Gn6Yhc-R<_m?tm|B8P~5!gH<(4SewQ_|JMgkKL6_78ui=C
zcM)FZkJ7EXFEFsxT>vB<ey3BXg89g(8I3>YFfsNHXHeu2I6H|pG|ucpNgdy~3!mmt
zmmS2F7^U)ZDZt^}-#69%t9oS87u*-JevtL`pNkFFu!Xdogw=vrH&9+tJD15=WZ)Rn
zZmkx`-GGL#HdxN(oq_5kW;Uwi0D(8Vq~b4Oyl2Nys3uB at rT%f%?ED2Wk+52VcIq|y
zAC8Nm2txO*Tg<+l7_${V#HD?0l~?+wr*8A-0*-qtkZxZCRI0As%y8ZKUy3sQ1;qS~
z23yZ|<8(HrZQ27BXKQ4rXlFK&w)K0=8(GevFvLA)PLB|9-n!A<T1$-qGkm6lS*i9?
ze?P$CH3ByJApD4(I{@+)-D=8Hog)Xoj#;n|5r0TJ?Ed=DW=M<`30JTND=V#wn^lSG
zQ@~QG0FB1O*s54yk&}=cfFJe=z_}bO$;OU8Jx&ut(_w6wPH^A at 4qn3n#s_&CDUAov
z15edqA5T>c2TMTdG9dL%h!Lt>F(+Iz9f&I!7U}U|K2&UC(nEj(op?F at bOwM(kQvWA
z53+yec={J*1|U1t*CFMy`#`pZ-S_Msif^$rwR42=jL)yTLQSb(LUfLk1KDLrk3;jj
z(abczk%>2oZ(>Ax at 7-0Hcm%Cb9u=24al}2^wNsxQyrTFcy+}0V5+FTkGo4KEqC68^
zrTedb9Qq1sQl2HfJ)zn6e{V+y&J0J)qPg4mn7AU{z54=$v4pidc0$KDtDlK#oJ&&m
z%Z0;EnvA_L^N at M!rK{x7M`agAgYk+|44K%RFhdoc*rr4kGN0%2Sg}oY8$SEb|9LjQ
zayx4dUk&K>_VW*_KDP@*DxcAa^)jI5R{>i>^$=jC*RPEroFEU<jHHodj4w~QJglUN
zv2*)YTruP)TynVMHjHo2U}z3$!pF9(=vQK=p7%L8{}fQb2`Ku)?d~79R||$BwZZd#
z<1_wuU`51m{J#a0e|`{?tDbjp37n4EW7<+rRXs+975O0PwTvuP=SpKX{G2;8vhG3J
zv+r_URsDd9^Yp*=Q$De3POPstVp%BOl~a%q(trGnl0mw7@`q;>8i^F7 at A!ifPr~%V
z=aiLX>@$7IbINosyYH8=$X~_mY)d(9C<^h=F_FIQIYsO?N!Ti1WM_s?HZjs7-yYe_
zWt}5VR#u??mxz=2=NO|hO+V$olvSiQeeHiKE~Hud)BmOT&WPvJ-mim!irHe;kg|L}
z(mYOW>>SWYUK=9yd<!{3o at wzl?2Pdr_4Y3ybXl$sdO>j at E-wfuUQs7|H}ApnJxK?1
z!%yCDXC3wb;$-~6HFGVKoLAkPhlK?JI@)MEQ!g at C@$4z9EP*S|Q(C?w9!gLDX#P!(
z&1yl|AVy+mNdEAK)UlO>`Y4K&HUz+v3e0vq#{YTv$yPG!fd3bGn;pF&OA{V26FwgV
zfJm#yY?EEio?WfKV`i(yyz^nDSFnkWuOS~p8!ao`i8kcZ0Wr$3dN6CWJ_hs%XO#Fq
z1e`iqk+hv>M-gwATc92*&FGP#?N-^vh;vXa%T(OJ%)+`btI8Xbi=!V--U4|cvLkTK
zzYT1{&SS2DuQCYVDNj&L$E_p>`_nXe)_)a5%>t at 1u4Ce+S7JqUz};IISyETH{KJ{Y
zXb5zXQ=)@VT61^Owhu+`(|+A!+keJ~qv8pn{s*|KpM|#S?ElP<(7_LK0lB~z>Hv%9
ze;9B-u(jYjuMg}|gj4I)7R%NW#)z|Ka|SY58(yvUcGWop#%()#!2q)1niOQKumn!l
ze5&K9dC7*CC>rf7W_B0LU-{D{|AO!0sj38)e}B*<f0T~~^A)_@<GA7FY72MB^$T7?
zf!#RC-+iq{Y7E1<!W4#68H7=k-@~6Tl#`P!3c=`->XELag3{jWl~;DSJj>9pd_|c_
z`cYr|isDGbRf7lU1eWAYlqcl8oY#>(A0u}L&BNGH<Xe5HAtqNfV2U1NWkZMr`74SO
zPktl3v9w1Pu&>QCZBTBOI4CCxMAcgg(w<fZ_>gSXxF)jTNp59!0&-7R4L;Tc4v1r_
zfwf4|R+cg>t8<uU3<|iEh7l0 at 3&*3M9BPDrAWGLpAa(evz~l$tvNU;{vz1fZmfoi1
z*CE5QSGEtHCde at M5#jMr6ux-y%<<3*8#y`151_bO?upW7%zl=K_R`V)=o>jEE(Q|u
z7lF^jma7HuU2{p at l5BC+YQfc&DE}v&Bh#IaFGQJxlZ<Y1q+`<Rk!wCe_K?T%NMrhL
zIaq4W5Ed>ua^<QWb>PCr;|qW2*RGY+<<2W>8(lcmK+aWXJu6h_g2X%a;F*7oaYb*^
z1bSm2^tL!-ifp#kR=se5;%d$IupVFfAEc)E%_>=OJOY*!sg&vy2Phv<IG$trbpw=G
zw%hwRpJcc^b|N3v|1v<aXZ0y}`(-PTiniOY=}!uUWS-;y1at2X(K7}qbN%|1`OZH)
zIIchpU)vvqAuD+8Czv<-FDyGgKaMtUOHc#^7qvl{Y7nD0CvMuK-#AF|qc+?1p4Fd#
zWsuDE1A~+`%ujs*-nFF(h0)UI4pBsL&AV3B$u_^MuY6aC;T17JW#&Xz=k#YRrICQc
z;_4A|SH4}C8e^#zVN~Qk8F_G))Gu2C|FcwTjHU|5EW-7z^w+DjQd|mUj9UMCh$3;?
z at 8kJAb47)^cGb~YwMV{&2<@YIe?Xpd80tvyS!0zx?hPe0+<b3|Anr>^T~oT7KL7#i
zNptGms*BM<g*&r|HlrP=ej>(^pjn9#9dB7Ak*fBt846c)#CdOC^)AUn{k=C7Na_cP
z{HEVuD|bGZ+&7Oq(5K86U0-%^{m>LmmZa{~Jf&1Fykp<m-<R7tu#!!*qJ53;45lCo
zc*P!TeSm>7gOsJuG*Fy~eSEU=n889>;cJ!OHJ?;bBcUs}zy<|XIA at BRF2w1j!h9V@
z`BvUJ^21zVM@|-Ik)McB3({EU at U56zeisIY+|c2fkMc6NI+9E8fVS)eV-Hht9Y!nL
zJ1TwKvBx?eV3UyfR6yw8E=Y+n7e#8dG7b!-nVdv7tyZM|S at 99Kpf}b`wMgL4xD7Kl
z6YRA%k~U<i4K;QP+y;d>s|MXpl2)cxE=+de)HwL(Xr0zoj}t6Dqkq`WLX=96zq(^{
z8;=VZ^*u3pssTPXz{k!KzXcKcKsA_sAJFj=d~*tJ&azj2qu=(H;z(^i?e~rT_*;qt
zsYL(NTgp_ at uzvV0RQ1>yj`z^sr-_M-i>~ucJ3Hbnh5#{72n#YyvbD*ySf<Ek6r?Wj
zWqTYOwVliXqc^e{{of!qXk6}){IL9ZNVLZnKdQLcY}2v3YM_2$pc=1jr9!BTJDK9P
zjL$bMAZR1|bQHqQ<Pa0k?_bWSP2gg%g?t--A;z#|gJRq!V{-nr7~w{J&%)I^3!dOH
zjx2Gkfgbr>v>!fmfzL#ELC?qNBSVLfyK)Q)c1`59C9)R{yGCVhcK}FE<!V*+P_MlC
zhg*MpR!8`knn at F3vdZ=lz*ZfNT5JW>oc{IRU#xG-S#0VJ2zV*g-ID8_Q+s5eajiho
z%Pj|w1fcF77Q(I<!j at X*lt}5gp2Nwj*~RL(NBV{5hcVK0R8r2L at PpyL<h7YSQQ3Nk
z!qvN2f7<e1s(1#va$gd*iYsA5dNfZUxEQ5B(asxn^-yO2`s^+eQ2lJ6K?Lqzc^TgC
zb7JEPSU|0ajepcRQc8nUR0GHPrkvg!xcg|Fxs?`IoWb(rFpFpr8BUm4MmH*qCd9HI
zt_}DuiHF~EWHop1sn1pzD6re*l2m%~SGFlX1%UCj1oC=$mVd4d?F=60r#xNOl;wcO
zbdF~|T<Yk+iUn|@gY3tOnjZhjC*p!+Wq!`oydjTLX<>y`NukB$Gf}TB1J-c%;sRPo
z`QyaejCa9b$<U4<UcvtWr|)8z_8wB`>U>UK{Z_&LIrS1hQK~R5Lf0y+8%reC<)-Zq
z9+rI_Ty}B46ket1j9T)ALrry$iezIPr;ZjLhr9S^4rfD6mgu=Z=Kbxu&JmK-j<ITR
z%Xi{6d{R5lo%?aEfhtzJQ#aV9wq7NN^g?|35ndq&P%te_ScFafLD>^>J0>PK$qCe`
zVxS6WwAEVR8(Bvz_%PBQ(D%5pi`{e at AEjlsAg9(8;lrvHP?1)2mOtKYtCj at 3WyJ^w
zZ;I$c8;*r0v;bC^J?4tuQE)LcaTP|cq{=Z!z^)6W;1wJ`*M&>KOMi&p+=GDmdxE2=
zzK!9if9sL)#sGG0iPWGXxPTk!AQvtjiV><QJt1?x6;gYinD0;M0+a&L0^}%+p}K=v
ze5Kt at YAF`kstZumaZIEPg9J7Nr{^npRm1D2Xfap>aT^Et=Q~l+a7}b``C?6qUmP`0
zM*F;mcLR_+Z<_wg4PL8>Ig%7twNjJSpKm#{kP{Pv9|E5EZK12`1n^QF6uLSrfS at 8a
z#Z_fJ!wtS{mKX!?IWwH$z3V9EWeAv`^4zaln>XyN$r%Tk-7iUAFNdGWV%eqS{RL$y
zGdC%Ho!3+xm*d^TcaW>t&L at 2}Q09EFbXgF&KRoCIi*}xns-E4m%x^%G*Z(gsi}VbT
zfaY`9N&SU)6o2}%mGzjbT<*2HcAR2w58G(BGD8z;y<^__gsxI9yk3M?`)d9-SM>qo
z6gSdq{m0`F`g`iX8>dtd!M1O*$schs=M7K^+fa)!q7OCpL?-d4AR8)|aWTtkRuhPC
zTtF%~!Nj(<3!d at 2GCl}7vYLd_3VD+}tsEU+7Wli10&1A_4cl3kRz5I4Zvn-&Cga19
zBkov0EsGzoTR_1lPvbZ58f=O5PhoB953<~G=l+QMYTa3?nHf4C<q at U3LUp8~;n4j-
zb)e1eS1aG?Cy}U5mL(f}4KA-k!ljF5E|FzFW;g1kB&wgCJPU+IdV?)!D_yKhp{jVR
z1<LQ?&sV>VM0ICL>c*s|qeNq=`c at KEK%}AInoNg6&pt*<>;E>_d)S}}E;w#7EvgL9
z7T`42oQY>8z3|zqVXwOS)e^iFvlxZaP<jHh*s?+!j8 at aGHwyM4JH-EOzVyDF_vTB)
z|J#1ah05NBLdBFM?K;uM+vCEt_<vWhb>rU^eE;qo^sarwY5 at dE1INz_4w5a|mBye4
zv*E8PgOap1XHznnRe~%%x+TIRrR~c+ym&YEOp4>kgpmnJq&>=hd1W{&5Y;$>#x8Pk
zn^BCs2##@t9Vh_X;CCGA-CqLRwXT}2dV31hdp5%k`D(WdZ;(=R6b43)-awUmf&7NF
zxlz?y40O4dBon!|xa|^iXzZ_-!C}3ILiHj>?JUsCXIC0C(~K{s%#Dg<hQ|~J53f|V
zn_ftpsWgKxovMsw(4u95+pe0Ozlq!}FI|T0?ms2!acT at K+!f``)?+03Qjia8*jyQF
zV5rt$lZTd<FORbV7wL-OX#!Q?w#b?`PY<YN>OHAcjw~Zc_yEbVyIqG4pc&VvJZh0s
z3)uK9I|{76yg at lPN>%?qYnQw|@b|PXXVCv+hKuSm{dy{O7Dv85U13$N5jA}H-blNZ
zO6Bn&=3VR36%oE?ldI&jHej-1)Av)U;fnPl_z^V%r{((xtqt_>of<NJE5l9*-x)k$
zm;}3q`@>XiG&|#8W7*ai4ShiCDl9d|`Sl(4N`1WLp#PVeK=&QM3%=_LKW?Sh(x{%q
zV9T(#Jr6>z8oALLomrXT(i5Zl1LkmUXc>(d{bhYW;`N`}K4=RQV`Qj=goiD{99~b;
zrogYEpcoEySE#vzzB_2)jT$m4x#AYARh5B`%77Dx%~zAy$=>V|c+ZclBe4bE(Ixq7
zFthw{jF^<4j+rAcf-3UiaXEb!cl>-WC*^7Kqb=I0m%5LOEghT=ec;tWv&788tH{>j
zRZ^Sq?*oLYDqz)sYceJr$GJ7`bw|s|a^<@ebZAjr6eCnA<z5Xrnv4!k>xj6 at U}3y&
zH_*{Fj0<KdL<E?&@J9SrC>g`vc9a7DAPn2mFID_RTUNIxX at xed2+ZpCs4U$*&Hezc
zjAyC3<Phx2G20m6q0)&sWm}n3?9H<!Xpi at 5T|@gC^JwiHpBC~KUi7Ag_Uxi)w+q at d
zxA`E>Cc3!Y2CCetw3P+EnD?^5EQi2Xths at N2uU_zDQLX5#krWhTgAaBt7ijx{iw&m
zj$5FA>-E;(A?9O_-kVOIC1WjKsk0*A-tt)~bHO`0`Y)+l6T at 7P;#F@)w3mhKmzp2O
zJTvaBzta&K+9p|OppOb4v={JlIe#jX{0`k&-_sFFy&_r2;mlIjMu(r&(1`k`&|KT8
zkFL2V02;bq>iy{2vXfaeJQq3Ar!6wDP}<HJkFG&6i}oZagKr^j{8<x$fF{Bdc!iz0
zY3I?TxhZNO75{r;Z?;(a_URuqwASgo(77}$2+V at i>8<L*X0s3N`VoR*!c*xC@!`PU
z0yi!Ij7wf31hKZJ>@C1;ayg?)C)=dt%WbM!%p1<$R0QFh?T+k*_>dbs1(ZK)G~vm(
zMDR%EhjA;lrvJD?B5Gb=e60DjureS8EGuw{rI)0>3t#p<a@$7h7_H}119-k*@Mq#Z
zJg+5j&`t{kpMunxtp`*JRv at xj`9~bBzyjY~psMR%8|i=ocP5dZb at _t)69zlM;1=zi
z_eNcxcKMQ*>Zdbv5- at 9|%Foz|p>2U>>_g-CP{SU15N&8(=ZJH7?%M4clzd`#j|@>S
zqT0ypwqiuVs#h4x=z74YD^!D?slp2oP<{-dR~T9>QVjye16r-T-67t#r!C^-aal~8
z*j_(Uzx}4cL7Ue7%1hXR$6$2Vy8tX-*ZD at 69h0EqwU7drYclRAFjoPMC`o}(k7_<j
zC+IbCr0iSBIDXNJij|PdbP1`d*B(v at IuX66XZXtPgrdl}*c7U=*JBzwOYG0bu*jQ&
zr(uJb&|WNJsaN$RMBW!%c`!v2^(e7(;D at _=)vUX32W)9j3;Q!0D|iqKK1n?h%*fBi
zR9#?pxK3jU)7bUAi(8a034-_Q>b>eY1F^!g!yL at P?c!!e{v@`f5@|l4PLAVvf;f&)
z2w!BNfR6~Wp*U)l5m9XB0ud`|F45l0acZ-24z-#$7|VI{#D_EVwlqS!8XS&X{#0KV
z6_cvE69e)>=BI3Ob-H9#LT<IBftoN5Fq7PQFe1vEPglfxU#KHOGko*^6Dqy+i(rZ+
z00(?h8PcCx1<#l}lcw#SG8!D|fMG{GG%5XoM$adc3f4m6sg(nymE&cHyT!j&gA;G`
z|7B1et$mZ6%f%dI6mZ&dtV-^MsDFT`cV<#ur=5Qh_5@(^fCnR214-A>!h+0+Tt0c`
zppBcX6hPSo=)U2(5Uu3BW9rv1sqTEu5E=^)r{6-pTE(o03)s|_9;g}GW3NBXr1I_W
z3j-_un|(rx({0TPs5 at 9V4=tD)=#shwx&ASe>f*n4toS2Z^YF`UaH3Kw(x4JIPa9m2
z2GD=s20h5fYk at 1i2(!@k_OIoup{kQ{`B!}qi~0dA{<H0y+x5#>)FtF~n7)Zc^_k>B
zN`2h$M6ti;iE%4^h(&dDtT(&;>TK!ojH}-B_x1dIvn{F1<0LNuFwwUAg#o>f1$D-U
z1IL4#yT3pB&dI3_3IP&2t0-y5ETHh9qg9jU?!2Qf+)~jq`YFG{Hx1tj4wi)ktsV$+
zdaSRrp!%^2nLQ!QorS_nFQ?Y&?^#e?hz+S_g8gW5Z%VOTh|E=fO6>_5;5)Us=Yf^H
zMqsDS)a<<f`&W_T>J*OZ<U3o)qZJX2*yKp3Uk)iJPY0j*MOnX3bB%Q3pD?E7hDvvw
zIDH4D$9l`^l#`DE_f(C7r^D<=>Ly`*y7PSP6aCKST_0bpcY)BUeH!M5u0K($!LsF@
z1D`Q5H at B)*4pI=Nr(&5dMS`#A)+CWv*~mT9beLHizqJjmF1>f?3-HC2&)V~=M=GiW
zrA!?*d%q9sjHG^2zW&}M>W9SI0U1=BmsF1w24fU<-?@&a^#1iYgxA<EK*w#e%(H9S
zgpi<%<pq?ONY at 9&4X+e+s>usJ%=ZH}1#T(lkkdQdCi+8&a_K4?A^rX!Yk$&U`Cfdi
zynOHkEaSB=dC-Ox6s|9#<#REcJ|$uAk<$6*l2i^hhzLY2{To{BByBP$&eut{!lz at r
zSoT-S)h=-Anzv?Yq6${Vvd<{dg3BZaSb&2HU_N0u5E2z~;gAxYU|s4yd{t2jS-y8g
z4d&du>)e?!T at 2WCz=6C<@t%9{0<S8yG3?|tdCC1CYH^YZ+oEb at eTWgQ7e^#|Y|4gO
z7W2|C7YDXJUXnU1RhD|`z at u#y3T(>m%NhGu>e9&@tc?*Z!6--Ah62y$+=9F-sdI#L
zOi=zlT4r!q3z&sh0HB^m&Bqgb$!oKFqOz at x%Ln9u;#>}XA4>CvB+pE{^P{R-N0v%~
zIS}G12O%vJ!&<bCq!y~F(7@|*k~o&+)sxsca`B>_rGFPjw*R*!Ft-L=yoNMKb(_yZ
zTbUOd3{-T at oyOkwC7)<3;6{<rncqu;Q|ksos3|=bto=QtqrZCu151+*i%r2Vk>;pz
z5TaTG_1T;rLWa-3;wf4__za!Qyfiws&fg8QbGOp06c at d9O}CVlh&c~B#<*`iRbOF}
zvjLM07WEnfE|_e{_OoR-`V@^0rIs(}NimG)2|zk;i6)u$=tT79N2ktmQhpq2Z;Wyw
zo60EI*W*Nx#vNZ%q`^tI92wKQvPkX;1fWkt+mv4zsAo?3j#Ok~G}O&_ak_PPi-?1t
zXE8PivYmci(<CjZjlwq60!+1r#8=~5DIA7lIf at D4TIA#Mr2vIqZj+c_Z`ea?-GYA$
zCuQvpT7flG#JRw|f(yC)O%e)2Ls#VoG0*~>idcj>r>B63$lKYpt#|f}41}O1q9iPV
z3Ve93V3Ljn%y>b-4w)(>1Yy+l?I4=R2fXx`AQGlK2>j)>;w7CUYr3}_YoN=wCG+I9
zsvq7jF)hOUcr>sd<`cmDa?`31gawKedeRt6>(HgxOQ;g$Kye!|QMlAE1B4xjcX<x(
zW=yO({MmN~gDu-8sZ(abR!Go6!pFRn)@L at b<+7e&c@||EGABVMHvHXihV$eg0rFat
zV=aLsOt;w!Io4u2 at E!MIPHmD<c8SPF_ at ITxVJ-fdAZBOZ#%Q){#F+aTz+(4#y=X|&
zE_W-A7xpP9`J&C$B`!oOVk2VGTq;_qMWJwd|1Bsjb1RY}kJ=9lss|K5 at L7|bW^6vi
zGSHKq*;}GrI<^cEwYg4cc|3!l$9K6<P+8BXQ1umwG3^c(RNeD##K#Fmt*X{wDR!9a
zjDOlWa*`|>Ug71`hSO8qaGNu9Lw at I*tw$0w8>eCv$jQwfF6|r$p$jiHWowkk?Va*F
z*h395oIys0%b({qQt^>tmxJZNJUZj9KC<f!U7N1SIA>?o02>3RrX3qL(p<dNok~mF
zbt<h3BRLT$MqW3u`)c_4SGeuD_7!yDQ*>ZD-w(6#@c=dI<p)DfEhEwQ_|J!oBc~*8
zw$=WyM9kWLGe+B6&^i8P)F_L=b!QbHu-bQZVbLqqLqK}nD_vvrb5`JJ45tmh^Ld*}
zKi3oX#G6x7`1WN7G#ha$W+BL*u|-lh{t;1}UcTJ^8(*KsOiQ}AHJsPCuqn;EQoqLa
za~ZI;Z(?RzmBJR8 at e6}ULt&c8QDqDL4D6{B-sdil4Y;#JHMy?1l9-KOzv9`a9G`Ku
z at cgS${<-!tmjj_=Uj at GXJt5Pe;$vK>mQ8;ngP6BAmor$0e2x;6auTbFk)faY!U^31
z$}~pU0Wd3J2SzXWP%bRJ-a4YF0yYpJfv_(D7lI`r%p*u20P@!|t&Ht4{u6So)@;YB
zg9J>nieQ)cWbD$2YtGQcMH{jHg`MMol6uL53%KGM`LyLwjA?#}qo at 6BBHp-e0$i|a
zY8A>Mc0}N~?BQr|>Zf^?sun={S2U?3sq6DLwIrrcHDDA*yd0bN{Jb0VB8N^YH<G#P
zcD6utGVtw!5{a>g`jofCV>&xVR1M}fG{r>B>_dlp{JQ}y|2II+4+9)|+r<&O!#Ybb
z at m}Zf?;_c#vo%rquK{_}iXItS2uD)z0Sgs+A{nJOcT09>D<-BLHO6TFX_Ej{T~O*>
zR+Ol2V{W*)ge0juI3FD>`xk at gm^cFhfwgR`7{iFL6<XvhMA>gdc|pW}%;_;tiP6#N
z*5|v24JTE5LvBo+uduiW2}dF2sPuq?Gj}mZx1a9LKk at rZIyYM)zJpCcEqZ?x^I`OV
z6#LcbJyAXK);sx)zrW1qI<@gX!KQ44bP~Wa#YRG_#7thcpxr@?*{+d;&I5vN at INt;
zfWg+CE$bZ(L(Bo^VNT1}RSzUMmkQ}_(wz(4qBj}m^xE27v~%Z_^7ou>Jdza{>A<1i
zrBU~%>4UIr8 at aF~<!xjnZ?y!CckgS(F;%URxcRo~GbA__{hxl|)M1?BwZv)(n&Y1}
zCuY{AH@?WffstM}{H9p-rxCdUNnJraUcqPQU&cu9xBX1>{c(niYDAM^yMA~|OBKej
z%W*Ev-oCyqyJ|Z9RB;eJ`VGlLodwHLn9Au>HqF2*mhydeSdJD3lNTl>o^K!H!LkTc
z*h5ocr#27Iva_b{aQLyjhWCxBB~JXp?unMHcmrF~h0*qTIX#W<N+sF<o5NDotd^Wj
z=^Xitm$=S8t#Q;CX7}J|NQtdrQ^2PnX$*Vt$5<>x^0WEOa6M at nk`>O=gvjwKlm!L{
zqV5|E!$Z-@%<(Y10`o==vYRXn%(@v9>0 at y)-J*F|bPVEbf7J>Mq>9NU$de1?{p&jF
zz%bJ2 at J*vw<#mHA<Z$ezTx9r4P{lk<IOM8LnYpBMTqAsGsK^hZ+E#f5hMyENAV08x
zDg;64Q_h)eUo0o#p(F_c6H@!!=M9_D1{)N`tU at Y^ALx at 2U7}coO at cpj_+yJ>MKkaw
zIkslDU~`|6XDyDEV at sEbBsipvlp!c$Z<7T0VlOPSYPX$9kj-Ul-L`MdS7YW%dG)xT
z_xovVN02U{#QZpnoxcW~G+5UoLxBwC+!m^gXLT^HQBWasv-%qL&Qb)iA{|OS(e#;q
zQ?Xs8kD;MBzWMo`1I&M8-T|lf*f;M=J{!rC3!A%>>(4+$#H5uPjdlFIgqOsYL6FFk
z%TYK>=AAwE0!91 at F_F>vX44CZXpM!%1Lw5PH_Xu(zB*MCF=<L%5jq4|W+BIr?=%$2
z-2SNCDUNpcbCk|GE!c(tM*+7KLq{f5uE2G)zT5ov_V?CBaCjoUb8D at tTgg97-K0UW
z2J-oUqIw4`@cEec80;<L(A-)nZjMp<=&6t2H6*UH7*=T2YoE!7HXk&m_g^jr*KIYC
zLs`#4$L*Zk0$ec4(3EGPgvq02aJxe(K#nxT6~0zI?Z5xnrz|9oRo$hRru2Ujow}m<
z{#ZnfH{vVnO?+iR{ps%3jm6Tm1Tq6kKw^@87oTRU#$1M6QK6!sB%1xfJ>BK|)2m|^
z)-T!K=5WvY3h$F3tV#V${w4%gDpU^YJ&L5NK}4W((0`dhAu13sl><{5=veKjbgZfr
zWA~lyARa;y-$l^ZhxwG^FECohnf0wl?VX;caT$y>i2sZg_$&qT?a1x_>EWk7MIje#
zT~pg0b|z*P_bRliL5UFd1g(!Qd|WPrJ(2b-^xaBnZm>?`G?a$kyM77RVb*Bh3i&h=
zS0Hb{og)W3Yo!6}=lk|wwqqeiWpP at tA9?mdHogUri!MxKZ>l6NBR?pZYt9ExhbN|#
zPoCK-)0o};d at FC*4ILP5wwrWz3`6 at _$T>DF{6Vc$bpx}gzxFINZP3{)t#K0Rd5s+n
zeaQbXa`j`R8R4kV1ZLcB0U%HWo{-dyWL=e!UcYY8gi9=9FrrL}c_R*3F()xI?~BCT
z9^2)ARLG&gxHuXt-dc*Bp}N7TXo2$F98Jtz=I+!cM*fE_o=b*8H7f)jaR*MpXI)K+
znJa2d?`Jwe!Sk*VLrV(JYvkCMaQ at G!7nGr6Q)8Aptj=(pI*<clD3FK=PpeG-rGVwm
zhm=_zcoqJq<5ni8k&W{rEE_6gEwbID!u&JFE65Mp#TUg3<36i#8IGU13dpHIBXVtx
zrLC0KgnzFwAG0(tMft6<u~bkVwo+Du?!(e#wN~OPAv#O5lrL$uvZ-=?9YUakpkD<e
zfGJ63ZY)UC)EA_2b{Du|#|jQ?-^Q$$11nyY5Itx2jlW>l=W<j|yJ$2Wpv}Ey3|fO3
z!6~;I2)M$IY=5~>Op?=+NwShY-6mgADt%GxlLvJhL~<-}CbBfxV~;?r7*;~y2=f!B
z7cAbt;ADDX at 6rGB!Y%j$-}nK~*J+yIWI#swDev?DpASH3`c1);2VWPYdG5Zp1l;S>
z?e*`|$tGXhaefpjF3sKJ=h%Hj4}rK^HJfa9jlZb_a=CTacF68WyFnO5F%MQ1VpKOL
z09MdCwNXWKuPE~v;IO!JBwY~%r`Gl!$mu+NLO|rTUw-&W=`QsgRGz`aykVzA9Y%}V
zKI|m6j1j8BTQJ0|+^)+()QXMRPzb_)F>?}iBKoGIaza?SeFmWaa{nqi5}l}%3+cb?
zx$5%RcK73|APm-ehOywOrh<+4|1#aT8@&~LPI`Z3h;>Nle9rlj-`gIp)6kIPx1HUR
zqim0Re~5K07+w`4bcleJ&p(5`_R=gzl}h)I3c|$jf!bb^(x;qEDOsV78VWJqQ(<o;
zn~u*G0u=A%S*?VQPN~YXXi}u{prbp=ZG7W8$kiQ`VSTHB>PFc2FUsLc%$3Ea%*v4r
zO5W at qneuV0L$;d`6ke|eist at BofU#@=w#D`V-A<lz;e;b*4Tt1ircjv@}HE?VmY7g
z_u;(zZTNbhE>(<HR%dDjTF;u at Or}omiC0MI2sbuv#@vwNX(Hec(lGb{yS8Lghkmt?
zIyExxv+b1Oc>iEh_(>A2zaD`6aRUqaJYx4ro_i`BEh=i{w78E+uZ9~0rNiGq_3d&J
zN!$B0++#MmM3g#dp(qbFZkfwn{R1I2l&rp~cXy)73Dd^@$rl{(Ny9<ubMAbMS)Xne
zwheQGx(u8&g_yC!Y+xTitg3Z8z5{jGKByw at W3tOoR1CiQ3^tT at A{o-6(Kij8T+fkJ
znrJ{67kloz3ejZxq6pztvel+w5n2)-qG_car5b~BvWSY$`yBIr?W{>h35TpCt;{M3
zTDIaMr1m;QyS#jbCK$J`1}A34f;TIDfU0iN95F9Cz&KJ%D0g2!)JlEgfi!L*>6PBk
znL0~$?i;l7hI|B1R5~t^bbcrlMF5gmi73K2OU>~L<ygk##%CDKt*U5l<rBUIehdAF
zG`_57q5f-Us*t$f_^yhnGj-3bzE}?YI_J#`t<>tf^R7NFK;5lHYhV-4GbW$VL)v at P
zqsXrPUuh3}7Mj-ACN1k&2Hsj#pC?C7lNL8L3(7?yLesEXl1SlI#<Pqu`}o2(Nh+I=
zdDou4a<{`nt7;^X#5xDeIObeFJt7k$8SfRwd#dqXZ at ecP?`w_s9CSa}Z at d>8({1?l
z=`|XuYtc=RCY?f!;-VAM85F<&U~XuC<k}9}DAPgiRG!ikjNc-vK at -IIyIk01wrgOf
zi(=#20V2)<w};0dF~zI%Hl?)RlU)5+4+-2=2sXZ}20XWP>#%Knv;KN2$baW+m9LMo
zKzS3=F6bI^Y8Sq!MZ}d0R9k$((k_qkgzQ$Gv7%Fb$t_Pjv|URy!`TV2Ja1Uwo^cP2
zN=KT6js&I-dT5uWwd&%w3d(zbxpw8^&(+}7E%ae3XX88lC$3ayf++>V2~Rf_+e6-y
z;0G)dgn)aehLfjSG}lI4Qw?tKkOP=zAEy<3-HSOr9jl79X!7CY-rvwUuyu8K$|BK{
z)WIVWq=slAUH$2^73f`uk05HZl#>dcWNtGyYK)UtpVT>Wd$Q!xzU!4&e)}$Pz&Nw&
zTv)^X(|kcb3M-}$)PLXxSxD|16!Zsy#qs*+Vy3pjvKrjt+p!jfesS?wnZc~UEx0nc
zf9&+LBc^V-&wqWl;;ZQ(d$Eb<Xwx`5ucc0uajq`?kl<f38he{@JU8u_d{#PrMHM|U
z6MyWXO(-H!>mPAak}i8_(kW!+JVp?KNm6a`b{+~5WBIEjRk)GqVCv`eJhD=(PB-t~
zRSlNy5tJZ?wIB@~MB at wRNIdFFWaU{twI>A5H-EJ2*O%G(=E6=vY447}k%9yAZD?Gt
zE)x#t|2ylVsu<&^S^ANeUJ at NpeT$J9OE{iQ=k;^lsjG-Be;W(n6~1IK9LYOU=}5&b
zIY33+S&}khB!MHoWc;~@wr7cSB!?@fLw-g=&(l*kWr<<G-F`FCC)=B$avlN6 at fgn9
z$$@;TB9P85L!N>>_MW~RS511^#v67;+q09(1^>bzqqRp2TA$)U<r0HaP1K5~caD?4
z6_i%KOCmk<D+EedP5+stVv`dhxhI^P at jI8b4x6ed9FZM*S8wWeU-BTz|EwB(gm;dV
z-U?bhNm~uF=<`!lP_);!rkhi~MCBHODF13u#}l?8EK$A&iFzvn%6jQ6DC-wbPo=Iz
zvc5^tIk2x$P<p%fH`ywhNmk4~;w~CpzB|!#`)>LlCk_7L-;;PzW2oXjoUw6BKBQs}
zUbTxUauLQS$y-Olw`gdpV!+6}VIZ~8%ju_AE{Ygh5xy8wx2#a$>yv*nR`jVW2-x^D
z;p;Pa0sxhboq3$WqcqlSZ at u3NR-Q@+glP)w1Jg=B#zwUt`|9)+I1r?->WA-#>!pnP
zN7NYA1%X$FWz(yMti+T*ZRFJOB8|oCl*G*ZD+UtshCu%poSyA)dOA3DM5hUgWs8%G
zpqfWhpmV2(hFft$zh?%VcfdX?dCP*7lmj#_;N)<pV=o+?p0*TYWJMy(oQPShSS#6#
z9E+#-eOPA2Z{i~sx*$8{fUptcgu!b!I+sx;#$G{bYS9q*CelHS^^2#`A(;6IJ!|Jp
zgOc(3f4_y#50p-W6Cn1#%4f$gB3e6jTh!REVa5W}QVu-uI3Gy^8ZZro7uXLta|?G(
z_2D$}&Aq_PRVU?`6}O2Kxl*cs&%@VQHIc0=e|XR18{{rl)nx0))tZ{h-wX_)4p0zJ
z4+~2<VCC1u@!>Y{CA<v!MSp{XSO>3-F@!Mx)WpjflM9Kzgu^<qWroYzH!-68>pdSc
ze=I~cYfC1cxfBV?%UtFv3(Ym at M!7m}^)-~Miz9?rgcEs0d61^^w&cHd36-ke3Z_iR
z+DNC?6GmBk6Ny?vla3OMvbOl|imcrNCDq}7NUw>sZ+aF+r*doT53_WJi_*NAI?O^|
zfXO>Jt-l!Mrs93Rrk;gi0JvWz-+qKv-PwKT?ji7+J%oBS1&sb;bgvzkKs at QxyH#oU
z|L9J?e{`oO>`p(oZ#9-i at rYh9<#+gJ{)TT+Zxl(5Lzt6t0GSr{bA*2w|ECBKK`7 at F
zzEfl2z5 at h(b$K^K*1)PCyA5g1i(f<h`HR81qYd=?rEJftKPn5^Nj}(CLn#f#c?|YY
zcyH*t`PDhg!a3N+8yx<<*y at 30e4Eh|-n%&_`^ERISsDWd)uwy=)6O@}fs$6lmf?rV
zk-Tca_jBq<1AvwZVSW at 8RQ|L1Br#e9aVR7JN^qDgY|UPT^aY8TNnarOBc5=TzuACz
z!oqSvDJsxhhhgooKw7O}6Voz at gm2x=fO6Zo&Um62^F}<dJQ+%^nM+dFU6iHx3+2Kv
z4sia(=U5z+fX>aka?VCNoWTUT86^nftkn?^<M{S0WZD|}eB5*}X&w6zagBXQ(u2H2
zqAfUwTWGs<Shyiqj>hpvG_RdE3ram}99_|oC)5)-eORb;vIJ`wq0+s($fY%pG{HnT
zXXa!ZPC(%ei8Y!9v6nbs*Y8ctjm=10_kBW2Ko8WIdBjXWmK}Uo&(s+sDgLuHM)bRS
z_6{pkSMQnQ7lLKM)*0>LVCzEsg)y8>N`_PBc8pFe@|uy>NOyJIE+}Wx+5qwhzFyt-
z8P5BkWg;u{u_`FjJK{-dZg?(%wyWpvlvqn*srv;O>yUaLNKmhsuejf;s8OxOobgN3
zu&e$eHeQ47&swSy0127%xARCdaNb!?MQsokupAhJ#Fg2^lj`R+8p;V-o&z at jApZHD
zzyvPloPYx?yhX!D8zJE>BtNDF<|fw7wS=>Un0(?W9D>tu2p~bQJqn-a+%&BNJlSfx
zu57_9;(jGv at 3<~Sho>El6|li9I_$xfxK5aUOWI$dhyU-9etG}@nUYO(h;=CB(Ef9-
zx|I;3ebvIWc(3fdhr#kJbExbP5C_-qKn^nRi;YHu<15jAkL(LU=?YBPCf+Isp5;#L
z<OHJRf4&IcD at P{j)96+a+&aV$=I+G2!xmu_!MAMfyvG3G)ppbl1L+qR8ds~TJVVEC
zk!B2~8`h!W95Wvlc5V#)mpu`xXjgp>Y*ai54i$0?kA=j=Id`dFWGP%rnHXOYOT9t5
z7AmjX9?zHNI^KX9#>%~sef>p}r#eSFTp_iuPplsK^ZR<R>Vz>`6iK`tX;Cd0tZWKG
z2e(gC!_>+inYhMaiH6E*8haZ8LWHF5-IAy`*p!UB58j07FlXdEN^CsjDfy!l58b7L
zM0VmR#(-Vh8 at W2AM#(<cv2Xk7E8dPyuy>3-fED#x5iM|5q<x6~Ls~)ixQRwkdg)MN
zN{{XGjz{|h2O;{Pii<JQk+I>8a8~#mr-fe#D=%y&a2BN9thpM~`ZD_A=d~}c6at?R
z>ZiCx#^g_L_AC at M3bcPIq{nAaxjxQig3_|oxmk~IObQU+Flmj2kM at 45ly{E%>=TrW
zt1^7A%-Xdz-i-mG6EY}M?&^nTP<_a|geRwns5BB0Gf`grx51>LhTqaAA{3#;@U<;5
zoIz!VOOgxuXys&gx^+zwYgI1Nb$vL6Iu1zo;ArdpIW?+9Sw7ka`ok^7*@9EwzN043
z6qGb{yR}<cHwoi(Qb6b3rHw_#jr1?iqGm5%FvtEjpAs;WPkt*Rme5XrwOSzHQkp7n
zn0&8CKP&&b>yr#-?qhoSEe_F!VxdE}Fkz%+s?={8E(BYX&i1g{Kcxy`kybO$^4;eD
zoaU9<xzx9I_xI%dZUxjNlTiu;QFH!S{@Y5_NOX)_OB?_ at eDX-E<dO7^=#2Iw>ilEs
z<pJ^cmiOl)sd}}=Wq1M9_M`pgm#8z4;z+)ZUw3!?xW?V@*7AVRd&_%d{aSbGx>|SY
z`WkoY$3|f(1%D3D!#uf;G-DJ2C=v$m_2(nM`6!&nwoG(SqT<)*(v~P6LhN`;PD4Z=
zy}dslUAHdk&(G<q2Hd9x`n4U!J;>yFCrxt6bGzdts9zcn*!=2#=t4X%go0>mMX8_^
z?aUADE0RI=-x>`?tuNKX_LJymirxEMB$vWZlB`Qbtt05k>&^Y2=%v0?5m~L%uYuV(
zvy4`><Gs~_vR+u+KK)@|>Qp-fnbNqf<Yhmf!5~jq at 3~`cM<(B?L-|bqUtcPpINRr{
zBLi`@59kS)+wTg=0o~u at pG7frAym=MHyN2<<RGYG^x`T^X<KdWD;!*G;v!bH6j!t_
zS8*!_{Fz{&i&8}~;_5qQ^DIoT9zGXUYGc6(T@==EAi8lvJ>599N9IcC&Vy;(YGAQl
z at KxE0-(=5zhNBe9MzOZxjAx__1sfM}O5SWTNsFdNI|kd2e8A6#nm5ML8gQP$9vwz$
zu%jCA8Uqcvk8<I|d#;=|cH{JwQRM>4H+8>X5nDRYU#H1})to~q9xE}6gs%V)Lk*B9
zJ1fVaa_rfXq8k0Dq__2UYMYSssfnEfWqE%|dVu~rvxFV*1w91`dP&__A{6vXB6LO6
z2|<sBp;y}ZrgtB_huVL3Ewc6dyVsytB+A`%MXU;LEQmdjZtZ@!R{g?yuABIlNn1GE
zxW^pXQZ0n)46}+)3D;@NCML(mh#pzl#n4=1mroYOybd#=g at QbU78dwH)x-rYamRlo
z2Z68Tu1NdWJ^?$2LbXwyHZ at n^$G?`*h<~)0{dbE|RAR=0zgzrhDQxj{*aB0Fsi?(l
zk8^*Z7Ee!Q7XGuv`+Cj)Jy~DQLwZ#&XYW&SCX}bq{OR at sb`<9njWnk=myYZC(>m(5
zT&*B(#c<y2H_+W0zvNBJj{!-)Ns2AN`8y;=>+U_drZ^yoU8s-7aPqw~T<}y=ERcru
z(6rmB(p3M|Spj7iM`fkAKpP at VyvA3QEm&;8EgUVvzvbA4e~UT%_qKr>ejM1Ed(p8~
zUA_UT+XhznaSk*5IL06*3`+659@*>Ez3Q}Y9T^X%Dx~5aPwsq|Rl7L6v6T|u7)%L2
zd7dHW7-;wn166EkAiWOOO8ffL9SK+ILGjMhR}dJ(Yt!8$r+68V;+p)}T%Xg$nv0e>
zmEV$p>WzWk at e8}{simXW8SIZX_^zGDrPIV^bX+pJZ`*y<B5aaMjhU;$G4|g_^{Pjd
zOJi-z4s*c9npk)B>b>f~uKQaV`IG#a<@_m1&mG>XM!@xn2chTyg<nW{9$Iscn0ZyS
z)WS*&m3ML&RN7Df`J>(Rq?<d^Lx4<Gg)!kZ1YXV3LkJKGZzjQnFtIM0T=|Ya4XT at 5
zAK&){26OWeSdVCg1$r~IsIcjH{O1X<;6MowIy}5tqlSegz(V0Q6kg3xu-XJ2HmUL*
z1ZMW5QdJA!CV94MJ3pwoVt;uT!#NK~U+A-JQ0xmaQ3JbEXCR4r5+CjFC!6IM{HQNA
zZ`;D6u($uoV5%PmT0n|7nz`W7J+gV08BF5bm-C|)a2g>uVp+^(P(<+LnRLb5|NJBG
z3z*kBgIW0K at 4VV4dz+6q^(+(o8KE0hW-vef_m}gDiHC9B<d^87pSdOv--Xc%-iqvd
zteo10SDi at nu;g=&DSiakE9VD$+bwTvSe3YL5dGf<|MMTTzgyGvEPS(uJn`}MaBAYV
zlC~pbtr2C;AV$45CO2u0u+5PsDN)&D)Qm%?FYwi?C7qLNh%4eEbR^(iZVT<l57UyU
zX4}>|YXa5-dQ!93NZMr~sZSX<dGm_*b30y|y5iBn+!wPPtXIvJyG^iWzYJ|&K#d(I
zV5Xh<1b$eb+#^fi14xvZ3kuunY=Jg>_#Vt+z)=mdAkTpB3W=+t3=gMPTg*x;7>uY<
zTJY%szIGo(hXkIzN~XOQUpFamO^udRwmeS at Tlx0~D8_SyLR9!ZD at li}0nT?!__Qew
zq^Q at vKkPCsusLmqGf;gBz}StQu4DA{fGan8b5<=*=e+&X!RZhU;$p^O{hC0kvz7M1
z_N~Z+&%9M~aFQ!&Ym(^?!gL7i<`rIX1qS4UVpSK!*k%Sg+R`XE at Ujwp6vEr5ITK@i
zVEd_tY;uaKb_cz=Td>WzZ>N7h#CDV$O6**RrMawFH3+B$K1ogiRbZoOI539onsj&f
z!`hVQUE>vF#ZUp at EUQ&1u_%jqOWw2NZ#mQ?eYQYc!NBhK_N(jjH7S0JOY at emlXeLF
z*(G9IIe0KxBTW{PwZe6s<G*nnC|kLXqy`5RBH;YX27SecR2x~J@^kad+EMzdTO88J
zN87I^-Fq;C_5=&ddzP)a3~BS}gORQZ%%a5-_^C5Ms5(Weko+tsAzwZ#;yd4 at N9lV%
zq`HvW^=3g-C*oXLXSQUh;ozbqH)*jS-Z{Yb6h2UmVHRkK7b0WEg&=K8pYk2ZR5%*_
zok187YIM0%QR*qW2&rJ{MG+c&4_D!XlWX^e<R1W(IVGo%A(Ta at pymp@Z~Vuni4a-5
zIdpU>4`_KU05cIt at k3?>!JiFj{I3y*B)THOL%O?%|Fq3L2#7+9K01@>;5c=1V>vH#
z`)==KXYih1rn`r2!zf!;XtJ7jC7-dR%8IX_JQV-BS1MbdQzQ*|4CsQj at p{zYpnylx
zRkg^u9V8a{f&k>4G9d_H$Z)xrfXdAW(?Cs+!_&5j)})Pjl3N1yK2|v(i}H8t;uAta
z&Mk~Kl&pzBJ8Kj3=5?4x>K8%H8`^v at 4ni)L at m%F`ch*du9Rs3;e3fv4Z%&sn4)=Xz
ze219)Mwo|tMo<QoW-AmyfKVrEQu^zCfa*(2Of1ZBiF^eo*!S+3ACKd?#^qq#;)M9>
zKBdPTBoAfFp at y}Ur5mz=3hReU@(eTPDo;Mc7(=0&bmQ{QB*B!hE^HPQ(!oPC(|=@i
zX<Vs+?~R3eyd{`Wjr^GMu!94-E1&QQ<5JDZ_86i1v~j6s)>ZPa#-$pxY1Z at 9Lpwbc
z<Rb9K)X5pmyRNmMEf{f?oH69AUETs!#CZ#1!5a_QfbFI&7zF&#n4`U(e{Q!})m{K-
zyQQqbw4$E$)T0TnB8J<=;TRUc1{{35r7a=k*!mYsg}9BcciH!VqyA`aROBm;<r<em
zQEwu8!=6F-(vW^|9;5|2)X;+KJBz~oS~Yp9G=O!SG$F=*Ups1?BW0k1n_<`Xr^k2r
zB}*?{m_a%D3V5nNl7^0#9)5a5+9O;4lle}Z2$hpggmw<N_()pONp!pls%>zLZXU#F
z^JbV<R+C{(hc?Ob)EsSeSP&*W-G69T|4EVn=caH}HpuY%TxI{i<kKWP4)A{|<l;5T
zS^0h#CoYb1p+nKyhO}@v-qV<98#39{di7*k%37hX72&YVW6U at N%`w8YCwmk*{+LC+
zAK+;Bi%xYYG<O=B1z+R0qNv)V at PABecf+@WuMy7wXV=QJEENB at Ylqv1RveT+Z(M+7
z-~OA~E9)1~vv0{suR}BueM*U~2z5hCm0T#`$!n9`<hAt(g#BRtZ at owgx##`e$N at p`
zSwR^be=zTf9J4x%+y%q5<q*`ZfWI~H2Q^S;@jDTmTCDzBJ2PfQ66vqK!2`!jjmrcT
zut#6LU(q`v at PK*UFn-FF?Cn{z&SuE+lC2FScCSYh)VSiOztQCSy##qfL>ec5Y!RGR
z>2go}k{n3t0<zHX#6N)QeHRAAmPUtm;fP?L-%7WRRKkkw7L-B^^))0!;XfBTtZGAy
zZqdpvPXF|A)g5xAn^XsTA-qrN?uFmNyy2D6d;D;F+*^;*t9;P!x1uzUNN5CtBV+r+
zUg+Vp)bC&waOYv&C*JLhE`FyI#gpgZ^-vXa_3>1FCa3nZ0UzeEc<Z*FRp7dd{`N_;
zg(EGC9A*hz|3A9kJg%u at e*m3?6F4D20wxj=NLV6ZU7~<RN=Vqk0i^7TD2gCPf>acO
zVvPwJ7AX-?!chd=g<h?#{YhP}R@!RCs#OtOn at U}Z#d=i`j4bkI5@>txd+(3=oOQPE
z%zXFx&ZLU>4JePY0SNU^Jv9Y7HTBQdjlhNKe)vCr3#}Dj0n4e0loXNLU;)Xb4SJRy
zSF5ZAko!BZT$8S4#|h_UO5z97$!wa&8qDaJWKBDWyMBQ|7O2EP8SsP{RG1P{_}Q+c
zchtLqsM0HTFM6kUCc~u(S=P;JE542fPVF51?$Q-cb<%M)^+iWKIH^<din4 at SBwvp7
zd8!NZsVg8dvoYE<%v3&LWURHTpq%x^pPrTIKG%Lbh$-V~61=`Wm32I1!h!$eX;2iH
z0&o6>gZs|(ol&rlLebg>f_(O at e4r#EZC3JFc4eYngYHK2kQ2YBa&2)iTDqrP!Bhna
z#eQ-Q7W-RbX+XW0?U*>>3}gnWMXGEe7;%)han9lRn}Z*Ge<J63c#v(HtH`#Ig4X{S
zkupO&QukY{E-<Rac1<jP*Ftt?=@z}XCY%lI0xlB#fN-&05*wIDT at un2Hwpd`eq5&F
z76Fho=Q9 at QS)!4!26CRSUGM5cb(n%%o1*s<K!t*5-v6A}OckuE+;<8R9;dVPNREht
ze3ZZ5wxqJcO_~S6p8wDd67ZNd{$-9;0JHo2fBbxLs;3UO;;?b**=@+rB`$xYI^O`P
zBIES^(Jyk7##YBu*5^nU$<Xa|_F^?+(w1V|5Ltdz^leBtnnbD*#P`Aiugjkku7Q!T
zm#27YIOAhX^7UX6q8){w=|hb)<TGMw?_<qUv at _5U!j|YAd)j_|^nC5Vk at W>ikjRDX
z?A?GiQ#6biP<4?2>kpWuOY{wCc^gW2n!lbop{5s%l5(T1SWivwf+7jG`DUXX@?}Ef
zd$k_C+ukl}e+cYQ1U$iki=LXoOltO(6!l|~j_~d#wPBdOYIYwK!H&q>*EOk^$J*N+
zJQCSh<aN`<Wqh?YeQWz>kIn6o;k)Y}WPSb#Sgu<R{A&3eh+G?*7qyR8>@rxKzAyg5
z3mw5Q$w2+5APZ58W!1$P>!L$@zhr2Q{ydY%{CVD^zQ#WBq-l^zi}VV|W-_ijx(j{y
ziP2X49&%YY=0~|o)`eq}`SH{CH^?)1-tVM5K`fiV4?MLfk^d4v7u6VyXC0DV;aG&l
zkG}C(zTB0ZF2$lSl!e?N#md7VN;AgLN~kmI6||^@?j9juXg?d*Vf--J-8JM3xK8N<
z-wlQ}Z*%cmvf2xG(&h5dazLddj701ri3rS<`47Jkas8`Ua$N-GAM{Nb(pisQRaO)D
zkr~Aj<qd*Xb*Y>Wuk^<=W4FR9<?&3W7G43oRzV7F-oxPk39mLiSIGZFU~cB|*xrVQ
zz2rm!bDiV;&K-8r9vAdx=;zW}fRX6gd5#)2Z6noxE6cz64WA;%#aEH_*A_q!<`I|#
z`&H<En>;~aYU<lja&{!<7P4Wp&#eBIF>|7skFdWM-BbKW$lX{32QV4hc%k!8>%aH(
z<GPMi<NV%?l%<9F`nhF#)n?@cf>L#ftc%3LXT%ec^p#8a2^!HZnc3_kaMG+Boc2G~
zfMb>OO{)%8ZWD!ht1M=5sy!e<p(@8{0Cf-VFvDRZ?##)ic<lg^=j=F8xTr at W((%Lt
z?wY0D^5YB<jVD&Bk!#U$D~9t%WQR(m74t#3fLb=a#q at vuBDGXRK})e?SVY5V at HvCo
zl=QOV(Xhm;=DiRiy85--q`c_~_s!Y`EyVz}o+m`DADm*`1nSFmmhMwqPOY2sG{+th
ztNs*33A^RPz6|X+Vd9$;MXYpkI0|zzpI%cjSB8-;(HK`1c$MLdVhsffk!Q`U?YvSE
z2cr8L0|lvAdTMzU<B&;yYlO_!M>_`}K>437g73E~re`vvQ&;rQhf9L}jT>Bzt`PT}
zLy>BY0fLQafN-UT4}R9I`|cwVX92~itNdC<|6vCK&Z^?thbmGCd<31yTWZqJY}Y{i
z0I$za8N-6oB{5t!Vhzxd(c*fS`ICWViYFUbBJ0q^LkaY(P69_hb||4WncL|DL?t}+
zI6hmmm#2n!tN at v;qjAuqylBfGWbKQOWyi2c-?^9{L+MB>>g6&{uLoa{1#_`2lw$Jz
zT<lZIr{ww=Y}$k<MKur)%O^3S?@SInsoM at 1uH=~*%u}@@o5HvbD~9Q#Z}|AbL+^DJ
z8UOId!kAmfh0){#XL009(Jf!XLkg?EoWYE~P37g|&R~D($&1}7j~BJ~5nM;iWhQSj
z>>Q4uiQc*TAypm0S5 at Y#gJS`;^t9vkbK{KhKMPK9#9GG-Mhr9BQTPAx&u`=ZM2iW2
z-M7fQ$fyf98z1`4lSt1^fRLuD%72uh`l}Ek+m`r;JDWrM6VLJp9fdEq1VGWkWh4xn
z4F2`ydn4p5p1^WG>d~09)Zb;~Ar=$GAU|NuZ(EgwTQj>=*R$Aw#@GdWzw3XYrt)h3
ztL6Dz%m1ph|E~)E?rAFa!`S}^jWn;RNUz)iS;j&xCaPuuix%Ed2Is$xgPnh%o*Vd(
zBM>z0u{9w2@&4ZWJ3T>zOkdR<SG)W1?R^zx1}-F+^H(f{gd^Ahsjqksl1D4*3|7cT
zQd>iSNVv)v&fdVt*T%KKU4IyXc{}+2<aW>!6wi8lcos|i##0mjblcHS!&ZW->h0jf
zk?kPl-ga=U5=Af{^Afs@)8J$dL!n+&D0p15 at g!Ve0TT))$GVy#x%cTzo0({g?98C7
z(Jg+_8>$H#$TIrV2v66&Jl3rP!fst_fVh4z7*fBpCTGvlv&ez&bn5(XJ#<S!bbmaU
zt&3v9e?Rol?FHg_+kw8)v@*S3#RFemkc#f1>jLnH08{`%ZZWxTCo(lgNsgcJn{had
zYWeZj7qr;SG}%~f=Ab<F&In(<3`2PA3JVt?f6B`&lWp$n2FMkl^Xok%tkH?gO;xtY
zVO0Fk<mo3KVKk^ro+96 at lg80AM+-f4Ss><wv(@vYcyLGOZ{wkR0<`w=AW`RU?V<Y$
z#B|1kZMpyqRhF at vR}Qhc*-LUG at X)#AJ+$qBr8D`?cpQ2QDlWvcZgTlouMNbrZs|^$
zd9=8LoW<><j3%6RoeQop8se>URRRDC`y;r15gJJlhc`LPPeOx?l-^jud0u(9eB%em
zkI{IN;GeMdo*S+sGJt}AOLZ+4Qr%}%DY=Y`j4S)U=2aj$X#Z(mg$a`Tn<6=bUJU1P
z0`CebvB?$AXsX)M=%g|_d;f!&C0&YRy(u3Q{L at g6C~L!GX<WL1)m->g66ail#<kol
z5i;6^W{?x#tY(=waUak>kpO|)0<L_sOp=w5z9>_H4rS94aCN|Uc?imqWR5YvKL+Q7
z3f#KrSsCLYDWTZ{VU}$e<&)ZlmdKLqW-GpcCQZ)rmMh4?-{{x{K+i~Zu2}OZF2C^3
zzSW*jxtyM}$fXI;750v1MM88|L5#5KB4Fv~Z6ETyVA|8yEgzW~4uFSE>*ya0>j?bG
zO at ySNd~`_lUWc|W)PEk5sS9_jw4+pe$fodHS9J(2_SQL-!`9P~CgyM at uv{ewI~>ez
z<7eHop=mqIC%z3Wmh^6(`-#FAZ9so$rc6THo`P5=URd-eWTI)xB*Odj{Z(H;2w9`=
zNRRkvG^xCy-&2F|Oq8n3magIx{G=9Oi7Xl0E}2}{Gan=!Y}kXSq{Q~Wd~oGFYe+Tu
z;!N{-A~rq^UK7TRO-YX-qvWm+F)Aq`bL^H0f>$Ny(G`0ftr-nLRtAT!dt)J=e7er!
z3rq*FWjZQD#b|J}dN~jWa*w>Pt_U655I=cutNi(7`i2 at G>YL;^kXFvyJO1q4 at 2S?O
zv<~HFFQhrv at tUvh1b3_6$AOV!yylk$8~I9fsOdi%EY(pM#sIt at agB$STd)CcLd8Z(
zs{$S^mw*#T#Y92j84XY(zq1jXW%1jLwwx^7=&=hcDtD}VzsqD`b at 3dhaPszO+^fb#
zaE`V2&vTkOoAol#oHmHO at W8v=4gw!=Lx$I=p9dn<5z1DigPv9hX^TY^Y0{Z&s8;Q<
z7)(4A*}Nd<N7TxU+2RZTOSzJ?CdviZt5GemZnuB>yc&YaZ2I@;s?Hq$`zLti2&@oc
zQM={8+A6hNF7p2E%~1!7;IcjPVLX7S8JyT<QawdM1cua3e&+x_qDqI{SEb&y$&ufN
z8jv&95i^1a3J7S{BjTehZ{!U8Hnx|>xK!;9Ce&fC1uYV<s<{7gbFeP=g0$mkZX99<
zgWi`u(nv0I2s*N|d_re#LS6*ja&vDuIh_$jRhdZYzKGPf5nHmkzdie#0^-yDJ=gfN
z^L{UM*oGLKuCxEbs93WV0|;89V(kM*Q}5m!{9Camf<#H(Z1lM?iz+jL`b}t$N}<E4
zCLg^tO5>_Q0wO6 at Vnhp_FV7$#jmN2j&1g-&*X at Vnuh<88EhrdlRci!VQVL&S+4azn
z6X}fBH&;+}VW+^a8kiS`0Ew5T(X}vC9lElE0x?{km*UPOi-Kz09pV&oX?2KGVZJ)W
zEnl6NRqbWD^0ox%-$b<3z2tpnVXFf8fh at J;fJ_~HV5vreRKcR+JeHEl;)*%~adG{7
zg>s9P|LOZn&M(tt;1MOf{b<Hld_Nre-)h5s9!A~PUK5ehXLMY7C}1D#_q5y8m$`4X
zf(3Y=&j*QxIjJfAGp**VY6lMba7SIc3id1`;sFUOTJEs1oS$_TO#0{Y*}_3bFO*MJ
zb_8K7YF&)l+bt|8Ss^WMIp0E|19UyDtwcfcCMVwpn389p#-e8(-y+Sgt)ws~E;H>7
z(vMQsUHlo~kzFI-jt_DDV|A1&xdgD4H;pRfc?)Wgen~21Sd9^!bAdS8JJA5K)~0Vw
zCijdpNQsu_s<i%_!|8a6#6I!Wx1lD1XG67^>N`Q5e{<5 at B;{MeBRLQUXgUAdmQ<@q
zmIdtFZJ=MU@@potC#W`{$Y5D)7PU82A04jyj+ at momnLV4ul~O(88KC|B*Ua8HdfN7
z&R0Cesg*1oN3ni;W)n!jVxY<r?qjWrew;esfmDvH0wsyK=m*#Ztfg7YmQC3QiCxEY
zmC=3N8Zis=J;WD~bzIt_rXey~x1YC(>3M!6_g`@BJ8$%g#h9g!9r({g+l)-aOQrTK
zZo$Tl9tUX2BF6-`T9b=&^d&TRMwcK7?7!zpIt$H{kjI0Sstb??sNguXKd~sc0037U
z0<67CR=T3aWXXm<&mIU<O9w3VA%Ye#8!1oHo>^%8bzDeTRy!aaDDf#`CLUgsKM!(1
z+WW4|q;y41Hnt`r-~{qKkM3Mxg$~JtEZTX*^`J8h5I-SY(%#o@$K0wCm7K+)d`TBK
z9Fhv>w+~gGhs=SFusMA{;_P3T>=P3vlYeAd>u-Pm8<YLNH(79vD7yk8o*&)R85<V1
z4 at HZ_RHVa-u%+;Otj^+#xA3-BxEoiBDpSvL?V8mGqGPj&TIYKo7?Syb3X>V~5=K7o
z(YFaaDG)fodpnr;FuB6y2GeB7Y+gl5RmjZ}2s#C!`cR})MN#EW*PZ|3bRF7VB)*Ou
z#3OWOKxE5jDH;ja<Y}#?qH1{ma4Pbba%DMJBm51y(>k686*PPI7(4xII!i&C?uRFl
zg$pq^Rl1g^F?yOq7Hd)N_cb2H2Y{5M7<G~Ta!0elh}x*EmZ?++ASAWPK0vWEE>n>a
zL5VE!p{|vMWKzg6S8&13(+E;XrzzRR(;x=-rq1Z$u3nVYTAQWwfMxK>1L-jTn!oa^
z{wg5Bk#=jm0I&mfAdU9ChM<l4ou{8pl^uh_<CRtHK~-*vp!`<uaYd?ATY12aYT5CW
zqNl1Vl$SCINlE9g8p-r9iojT4f$pCi2^ck+{FAnWf)CLFa~p9{wMxiDA20oc at H&CR
zidM*n>L?=i*ggs~Q{zx0U<3OK^EYKTEJ1z;hG;ke`Ab3qG~F^Nl$xXe0e{10E_HW@
zry42aVB_cm2U1rQkP(z+)ZZ?k?RTO|A2;PSld=xEhV*zhP#}-Tr6FZXRxy}>Tse%+
z-Kn2ajzH!loZot=;W0a1kxB-oVP2}dFUN#>e*Fjf*dlwAFaO9hK^u~*f4ha&S(gWb
zqu1p|3!`QMbz?Ju{pG*UA^6&fMi*f8yrSVTE3d$e at IpBFQ4_EE$jGp?<oVyH03VU`
zd?J62^GkE$()BJ+lWO&&#*lD6vu0L%IF%82$us at j$VG(rxw-(-Y%w-P)o|7<M$p=H
z_ at 3v!rG~-x`%a&^tn84v>;CT?Lm|Z{S{%gjDYpDSBff*YS5oUx)T+3Av<v*P1FPZf
z0w7V)&{hx-=iK309wSieO7)&<cqKI+{#zoQr}%s17fY%pSX#?|DBJIMPVLk1m at jD<
z^;D<H)MOSn15D=^wGTbx<?`fPWbT;{2eYW0O$U{=gHy!!vfA#Ovv&4>4JAlHY#GW}
z5JcWzjQLnVsW%~k_K0LJ!KN`btF!$M0;b*erL)MnOE5Q9z_S5MEUYjeOH%mB+}Yja
z#wD1KD#FLEVOPLabn;nIvLi=%gTT6b+5?S;FyA1o;QfqcIt<S`Cow}RL-;%`epFR6
z%Fk>=TQGn5a+v`RZC=Cmq?)u&Pfhp?2|0Nuuv#y}oAndKS3{n9R!+~PZV=|vQ?Jy!
zwTVh(KIyl at Bz_xsQxIQ*BN<{kpvIB@>6pjj@!vJMJ9kEU+#su-axINm<gsi5`+OXK
z&G-6`P0w*GMHTGD`8eU4AN7k-QGfl{0RQ`0pY-4&qOqtfZaFNg>A-RFOgeU*8N0wn
za1(&&m>>`L=Ji*|ol7xy$`$hLQf!j_m1u`}R^b74u%HHj^L5v^d9-+d`eWpOmSWBn
zF=>^7IWDUI86jAtrs{iyycr2RS;t_7&qFe=cP=^*3tbiP`P=0^^K#i at cWsS$7LtMc
z=EpgFlL-sgu|V{)@p~LZ3rzR0qD>jt6f7nFm4y5%17lA~S^Y}V(-7?ir%vtQVP+ko
z7ih<-NXG{oTL at g7xh@S^hVy0Qe=;!MN3lUPfiD+`O5!MbSm7^?NPnN+_R_eq$rX%j
zH&~%1lcX#EKzU<32=(!yD&eT1nNAX!m|#W$l+ZUp$*n(PW at Je;ZlI2_4~KY at dqXr5
zi<vmSHNwPD{W|OOUa~$Dn>rP>w>NX^(%ulY at egMA#$T>;onDOV55fhTYEe&OFElli
zZ!$48E2P`Aa(O;A4qcO4)Kf^!GR#+{ujd;+?MKZ~pG0BI8Dl$oVE!i42upxsA=mjY
z*Le>KOL+#_(IA8{b(3}x<=J8~5py<m=@8n*ittdwfT at d#PdqhOc7iKJk^Qn+p;+c$
zv+KHSLd|z^uKYFT`i~J+jKNw@)Z4vJ8vE!DKML1a>KBtKS(soN#5D~sJ=MwSt+nHN
zKz0>AWxzwd9C^;l1>#mHw#7jhCG_Wz|H{Iqq^9I8+Az!3mU at tN<26qJ8JZ(%3n&A?
z<u$?UsuOsyOeeul-yMACRAYd%r*E#Q*CC`)XE5#imKQbIW{7b?26<=8y}wO<TajWi
z;E>aoW1cE_`(_8EiIZos`o7di5^mFexJpQ_pgo0XNk!<2-88wUKEE2LzBk_KH#=ab
zAH?z3{@b*q6wy7aHOt^XN#Ft6EWyz6yk+t2eFDgV?BD&*a{PB*jRSxDvz)M+bFiQi
z{l{oL^*e!KAsm5UxZtO%_h?r(0L~|%q^L3KH)hKJXa5%3K8E&akz5(ZSM?u3<H_e1
zY#t|Ggcq~v{nc at antcTqApSAKtE=tb*C6tQNPN8~*x4X!AI+E(TLJN5973c}-W(L}
zIrCi)E^}WRs?Mgf#{+DhZ>`AGNWzZ;c5l=EU}=kl`Xbp`kX8K2Bq(mEg16oseJ9;4
z!E(8-t;h@|zwU^^NtE7j+i1 at 8mD;P>^?L at B#_cbE8GgtyElW=73O^FrO(j+$t-<8W
z2oVN~^`O)S;wU15^rV_wl)c-cz7tE-zqwSi<DzFdq^2t#TvVCJD#Mw;7|tl at E{-D-
zjkqO+&WtUB at LIcJY)zie7NQwGJ8!2%Y;9w9B_y~P4TwIky{|$vwmR-70A($@PY25T
z1`JVQv>J at _3a$`1x0*b4I0hwsI?}`@sL;qm$vSq7rGN9~nDjIwRvqbtJVplN)+`lQ
zRAKluWk(#paK1hi9WjI&I6c#HT@@yzD|QGS6t{%ldiK$_<B$U{pRQTfyGk7~%N<Kz
z>(OI)E0Di)S)ZXDxOAkP(}`Qd+4 at LnZ<@U-<?^2XriAvs at 84e99k3T-`89FOE&n=}
zFS_xuFkoq{Uosb<)*@DZZN<LfU~C_tplIGfbOJQ&sm+Uh>RGeEI>-a!UwZC**#|$o
zo{Z0{Ig95e+p_HWEY_U)ler6x(Y%8np~x8`t&H)*Yg~}9lvj})f={5so(aU(1n3T2
zc>zT>a9B?Ml#K~u&cPh7ui~vg5i5$qAURtY|3!#aM3ec<>*Gy9 at 8lIS_j!GB!on}~
zi;?mgNz9j>t?0wQ95X9A^`#}m)e9F+<kGLFEFL8T<#4XY<z;9W&WC8YDG<NTZTuPj
z at hNhN4Q0ag2);{c)L&kex=tCBQSzW=x&`_UuS|GVAr3G!EylO#P)t?0FJKo5;qxM^
zz at kIit+4jPMz0HVm=2o`F<6r6rg<=by5;q|&ZB<5z@}$#doWNxmpC*CLQkN~>NXS%
zUgE8=m&{Sjx0+LQXxh1=ui!g-_zpHwZD}kBe}$uNIZT~!>k}^Nl!MK2FTs&;Hd<jY
z&{6z3<Ts5N_Zu4mDyMc5K%7|=L9WZe__UQX^dU`TLk{MlI=awGbSE8C+8Z4VFwS?l
z<%Bz*aFsUzXh?!QZw&la`?op0;(+PgYNUY{R0Ci1Zxy!Oe3GAO+6-RPNQecKh*|Dt
z>k!gI-+M!wBa&NyFuWS at TZ5b9f1TN!2%r5SZy1h6e*P+q3|ol_F(TVBk6gDBbDE%e
zik~{-+L>s#{lMg_9j*5cyt5#iR$?BMyX4iCSTN`GbWoIp;$`EOegK%8&QvGea<Roy
zbYkCubbU(CW4PGiIx5Q2YoP!_6X|fivcy0w%1VRJ5^MB)mVi9!K4d3wG><xAlB92U
z%O>R7lRxHSGZ&<2o;H_PY2^NhNk$g54j#WXH%V-3GW$0-qs`T0R(zv~rI at 4-MQ2Zp
zR6AP#Rp51lrJoK=SXFDvmvG<w5gGRh#&Jkhyi+s)>q412*Q>M9Y&?Vg4szos*jkmb
zJani`6p-)4-4NSyd=B at oa_uh$F$SX5($kJJ8%4HU>&n$g(dD#k*L_v}fV}6^v)s|P
z3Re^H8!_i!D6-4t{p!msZJFTu4DrWyGF7SHNV$(gaOD()n&sX5<W&<so+)C-&Jj7B
zZ&PL1y0$HGTUF-lebns7=e4U<7y(8pnQh(j`4(5G#jgwI;Z7)`GS3uInFE>g9(Z*q
z?ZPtqzlQIfnI#2la8`j7XBRBTxji$^T5AsOJY99;V;@+_N3n;N9C~oEuEI;xNSB_J
zu%x<8w%R*BZUsp`c5m!`R8-$2gQavwF?Qt_ at H(h=4RAj6UWXiTyy9J`s%ij~H at H|3
zhYxrsjPEd2HJ^{}6)jK*ZUIzy^@dl=+moBaj4>`bxT^>bdBt4bWTazsTnw5Ev#DXq
zZrP;1AM#ukCmlo$1?r`~^YHwim#9*!R~`p^g~nlen(y}~U at NT(6G7;Il7nodJJj^(
z+Bjj_OzL6Z*;e_AgSe%%NsTu7uP8VU1hkpBxqm#!K>xSo{vP@~83+{@6K58RQ&S4q
zL3HU3V?co9o&sAZXJSVcDsO9gDuFhbD<bmz6>OhbZ&bAup~7}I?Z(R1P`gy>t&q(7
z+LfIYmcn-DhiM{ei&uLiP1+JlC2)GufvljMw=WHJ0=FzsZXvuX3y}b9 at wiGOc0zLw
zxv~^Qs28OLet$yQC^I8<fHm;7J|s$EnoH#WK^a2>yp<T3GvEnA2PW%7RLFr at Qv%8v
z5HJ5SU3`I9VOfCgA6kpA-rh@%Q`7>k@?F}DoZ96Re?6GYQj$I_-yb7vCyBp{Dp;dl
z)MZ^8`67HHKyKvS)_YrhDVqEn6KfYcmF*N4lmK_y2|$;&6w{FIQre<s(lo$aS`uQG
zIwz#u*Hxp+SDZi}DD>XYFp1)#t*bpgp~mUG1FO&-q__oxyeCh#ht22!{sZ?Og*Gm&
z3|{6Z!JWz|Kyf1vDDH60V4;@MlN2*zg}KBe=E at k?_Vd(;B&4kF&Mv41W<_ityZ+fQ
zPdCh?<#MXvT)6YYnV<dVtFi at 7I<AF62gg>YwuU%_O02*Zp+a)^!HI}8u at C{@UR4~d
zWOe=71L;Z6euKGRGQfJ)!TU)Dn(;oCYt?YUUox at AKvAMIN`6VBG^S(Wiq4dY{?!fq
zoQ|KodRK;oDftG<;Gc1sX{Wv4eH at nmbuZ_8NrL!}H|DR-b{_DMgnSCu|4|2$nvV%+
zNsb1Ka&l at u#v8kh%g3fsoXL&(*qT&NNB)I+bofBS0+#<pAJ!WxU at M>yRT!s^f)hXk
zX|^K at D0+Z)IJ`^r-9i+NP@#hZANJRG%Wr(*!uO`yZ^^kt at l|fOH9TbA9_hCyqYAK4
zN&&gG0E?z{llKcSf$Au?!_f?xq%5&qn&|{*@iA`4N?MVi?cAz6GRE7Nxipcj*vUB0
zAac#wtq*bN;QIUP_?SYsl2-p=Q*iR{02JKB%^VGvcAYDUqDIyOw*Ky!wqHMU#_Nx`
zOmMgm!&<S$#hT|s%uuRrg?@YkJ$xo$(rZ+KxN^cZFXU`pzE>N}=L%mWKLQ}b>wMc^
zlY7KeDdbTiBKOP%k at Xa?M-W>=@I<t-M?Hn9?=J0vsDgTV(OLYRUdSJKdN`?H3oOyb
z`B at g%OD`wI2v=0QSSdMCcyueQm=BndHC&b*&93yON+=0Y+zG_}pPZxnZy5DNF4#=j
zXL at Z-ASJRfkdf5`X#Uk;ZTM|~JL%5S6oI&P>F+_GE at A2yAuVuG-yX&{>Ce||YprIF
zO&hEJJL|73?36W?E%#6Ntr5}-R}Os~sc&OO7rM|qXYT#YcLG0OTQh<^PG}!el}~Av
zlrC+JDorm5zRY1+>HV;Sik6sw=ygFJr|VYNU#@ZH*I7v#l^rZh*^+3bcpW2rdZX*@
z{ihLM22R-fhwlU|e^@@&EAlM<nePTGk*xi#<yx-&Wll`M)>ntuI~9nmO423a3+{Fe
ziR-7WKxICkch+o0b)(8cJ5gx0Nxlb%J+q?!C_d$ta`E~S4!cGn7tzo(j2>~ZvFHI5
zx}|z20%7l5wbVBh%U41HYwZ2*a5i8n_5o_-gNH*A0%ozYV+<-M&e9&gyLW6j4?C*l
zORUoRWhW<HY&xv%kXY&OAt<RJm}Dj}DdwHGX#cRiDcaVB){|N+_5FdJ?@qhXq`VU}
zZSSY;qn{NG+vI8jDY+Jb^mE2 at I)Qms17JmO3lcCrKO058YD at tNMMt*J<YW-|rpCW(
zSZ<nh;?>we<D}!7pfn&*%e(G%4V{ju8?DSOJc~D^0*R96jSb6zlcFZundm%6N1Hbg
zD1D}#r9e=bU#@k=pW7SEF5i1NRKFJ}(mIn$x3q=jjYCTQo(x)txtSBsyjMOhBA2hj
zg69jj)H=FFCPm{Bg4oRutRx4QbXFd$C^z^;PE4>+d?mDKNa3_8<SVIeKLXVl4l?`k
z=@^)jS5lik`05hGKk30KE#HTG0H*c}2!R6f{W@%tDjBvdf=fdkccih8D&&Edib9+n
zfQe}E%KF$AZ!XO2N$S)BJoy};+-pK at B)p`%M(IWc@&6Hc#lhiFo_lQR<@$0u-I>B4
z$o at D{L4^yZ*oDgb5U$o%v|4exmMx?=a6nCAR!<UI<>j0xs!ADYd$mEtERmic#TE#_
z(X39KHMtWwTDmz^i^^^poX=%GQ{EE{j`xc<KK#iz4dPWSpqAcDdm8btXVos&@)Tmm
zz~zuQ<0xeTCZb%Py8sQ5PS0H|o8KI8gMQbYcNGDRH2(<@+3!nKQ52Fudf8HS)Dl)m
z84A=|VbwNoOLB~7Kp#kreE4vv&8us4&OVT&@_64A$w{L;|M4F^yI{+QJ)?~GOkp30
zH$n-s{>b=>hK(Fs(MmK|`(;gu#hDZ|*T0_0+#*U<jjhP|7$NKd&2e7F7QX}Re6N)6
zt}8o at 4U<0fH#LmGax~ilr_Fj=>n=sdu$9fL(Jn0+XaR=>xIXxx4KaI>w*ha7AFfg8
z0+|6NkW=3~9Qrn-SW?h}n|&-`mZF_iN5moNN<LsK8?AgVtLkNwMm}X~_s!uyg`#I5
zvCgu<bfqVuYtO`TkUJletZE<7|CK5Jjl!KUO9%<<(!RFxg}t*;umK;E$7xcXk)_G)
zT@@t1yu&cHzjOVST=iJqw?5Q at V#0!;zlzhIB&-Q~?>cQifvFNU1wPWY5Z0P><|*wR
z!qRS&NT?+VhKB!TxwezANuUO{263{1n8Tu{@ncK-R-TZqW&<n#Lr!>3M-;9!ur92I
z<9*Q at FrkbxMfv!e at 9Fz5wW~S;>4Qh+rf;e+csX?BT7Ue0$8nS|ARnVEI$}S(oQ$rP
z?)c?SSdb;KP;h{~qQ)C at DmX_OUe`XfCgv>uq5~qiRphJ<SUcqrNmF8pUKw0|*HKGc
z5Lp9eDBl1vI`}YZ$xOE5JC(UE5+o|Nx!9zvenpUKB^K{6Hfa|Rk55_%F~|(`q>w#I
z%u%(3NlkAMP!A69^^1C}aLVnsK%yWaoojHh7CRG6-(ZlhtcR1C2AE@>|H1`_aE*UM
zqPM~oaxH5i*+%<G;iwcc4fDfkxX^!_qh(>RI`{<G8k}s4GwxD4!>8s@(ypi9YCI9J
zH8>#15CmCm7sw8%%%<j0<F+mVtCe5j^r at 35QQ;JvdP)dpE(wk(b)<m$G)P|BZznYt
zE<T(;7;-FMTkT_~D9|rbvi4XMx~hXAGN<}u&K^0PQC at fXn&9X+L5{I;LVx9P0t9?x
zaFw16Hru+Ya)tkF?!+KY>?9G*V2703(vz)DRoyDvInEclh6<OegB1dtF)T+J1L&r$
zfUy&XxndN-kP_l<S9$N#!$i=wH1EbG5JJaO5nu1`RaQ4WXB$B~p!}W4=>ROn%$+VS
zJOjfkqLE?zzTJf<s$+R&_?8DJR|9`(8O6f%zR}W%yHv*s>z}`Pzw01l{o{fbU<bis
zfj*=ieXo1|(tus5P`^G<^?Qu$6NLfEsc7{S?8D6xK3rA$bBg5V$hH`>wzNFH^X{g*
zmg#QAe!Flir{Blz&GF at 4lTJ0bKDXof_XNh8p;N2GoaL62eipKnJ0N6k8|<ak5=<qk
zHrRz9$K7s>R0enT{T^DV8hkCE31vREDN}A|G``*O%PWshU;nZ<^q90a1nnRo_`Os(
z1jhX^7_P{}yb4!!NuIMmU}<X at 6sMX+PJ34B7Y#fO303li6vd8fR<P&RqK4~M)BO at E
z?k&?V5-Y+=2Uu~cB*l)H>8nZ;J^IhZc#1i(o-f&nGy59 at v9fec`s-9kFSjRB*8cV`
zeYF&yI*<Y4lw_3K=ByoCA!+dNtme{+E(TIPTfnp{QlU^u;&^y9&c6|GEb+EybNCex
zz#E7-wxBGhISfIyF!9TT<PykZu>-N;^6H at mOm+LUvTbliB<zu}fttt2a(j26BdM{!
zBgjljs;wvcs&N~3YhN_mgm=yjn<AHl_k&rJ1A)`+o(jq2n}CxN{3`NV3ia8q^1!)2
zHGdq^zdexNE7gQ5%?3RfF%hnj7A){~i;ZPuaw0{~BS#D4^^2Y-2U+{8!lJ#r9LZ5d
zp^GKjXoCVq^w%GbfHOU!s=Hj^`%0aE at fz-?_#Id;JAUhxLKcY4qJ5 at e$~KND7UO*B
zo>2k3y22}@U9BkQ?=&dIQ=$jrK-%hz62HCbe8ooGdtv7oIhZ*8FS(!(k^>c8(7F>5
zFkwy5beP!<X0}$`2H3KlJ6`GEbqzV1x9(QjHUP(xs!Fevq-%<KxLMD{L`uWXsxqmL
zMYsEc+2DT%IY0!VW0zc|<S4ye(7H#-l1*51kiOTyrW_!Fluif#3ZIAb!tdc!#cP<t
z0nRO)Dx*d^pQT53N<2muv=3?Ntx at PC71$7}A|Bw1<v2f}mY{6yzg3Y8dj^vmOjBU;
zzje*?{~$$1$BObHg0oovtL)#o$&mIuX*%rQ>3I?&IjZqn%4FbML;ku6n=<)-hx*7|
z{UZ4YK?w)IEnqc4pUqKyC+CvWH)E4rCUVUo9B{WxkT)#%p=NaiVa9%*gY&+6kd$r4
zk}dmwD90ifC4vGS`Qv6Nlbj<hHJA&=5bXVfoT`DcPy?B&!9L_f22zIe+J`F5^ox)f
z+GF*CCyyi#Yp^LE39s+f4ZpHF>YDVe0~GQE5dNOZBmxCt?_=<MsQnYawI<(aFn8Lb
zb3YBXkxnI;8)YLYh8O2Ge75oiB!&-!Y-O^OJKeIiLKzoGdA*^1D7uB*Sc17nLw>HQ
zcJMz?h!9A1qf~T!nd|!Yw_8}}7_y5KTerx2l9VO3-qtv%RqQZOM*7Y|X?~R2tsQ*S
zUk~xz1OtWM;UnCV)00I0S%NtU=u^(w5O+2(q&r4!wQqf9RlrrDSHl{r!88abH}rgt
zoK}iCQKpkorPw6*V;TwUkO#9n=x5Y<NT#vtT=4t~Nq8jt0T1okJ<eo#DHf>e`@x5r
z2S;QyJgii~2bkif<1|~Vkdm!Mw{|$wLP~!A$ZnIkUXW3?^dRwqJZp`lArU&C=eWV4
zs at oKB1w|=9IzHGOYIqCa!;V`9OeAOljj`sBi}r8z+Y9oc5XAStm}m>@;0@#-3km-f
zpqUcPzRL$m3eH)pc`b~pYXy54a5}LIGvK1RZCo@~ihh8 at g=38tPHqxlr(J}+lrESu
z at 9n*<NRlGeWtanHB3W042`G!m)-r4oy!-;6(!v8N$V~)JywzxSOqrnix!JstVQUS$
z74BHPu*;$%z#g|2*%}ztA3R%tcA=iA7ku|Zd!{4654Rqluqa<-XM#l*WWLJM=f+L`
zGpTM%BDuI6v$yZYU3+dL>>gw8RqH~BxYWGo`ruWvvK*Tcn<Oh4d;}?v5RpD+lWI`J
z;<NN at C@=p}?j2oI?#gT$ZL9d#FfmSGO1p}KC+jG)cpO&Efb6Tes0FsE`x~kf66pm5
zX}JaC2b}3yHX!lH(&5e?nP6GO(|Gl7miF%y!Ht+oT at Ie@9voTL2|RobfMrFQxuoFu
zMb`2BW;HAokju7U-V{r6>lSR9JHM?n5%f<3eC16axBdjcdgvQclBFXo#hf&H7H9dS
zh63`}Etprr#^*UTyKNv%#g2&8(uDh!mAG!zVL0UOaL6Ywb=Wv~WfYcj+{bOLOe4{D
z`nV~UYeJH%aUopfAlw)5 at 2)yrAZ=08qtjx2?aF3Uktr3JyNYvU?z`1U!-D+V65d)g
zU0&qO&q=~@F^8Dp+lN6h_oo?GiUBqPx%ZLXkbBoQVp%#c8w!b=--bgG8e-}2PMnYQ
z9M0Z&vC_`RuH{FG$H4OM!~83+(IMjV<Q58<d)UlUB_s`JAu=fcit7jQ+l<IgmA_+8
zk#V;12If9rf1n>CuXRSmHUrJJrvCMpa!J73(_xxzoK76OqJ*qwJD;u~;Wc58gU$+A
zLnOxce;pers)_YYbC#5C=@e@$=kcu+i|oMKpL&cM8qqdL1S25zEeNZHlo?YV$5 at 4`
zthgj)^|i at pFn=4o{__%Mssyof3Mbs`a)*fekbk}ua{oiomo`{!mbVf;1%N#etKQ%n
zSDufCX)puCD_J7Ui_M};m_3J9Gg%YdDAR-<SgHv at 5g~j*W&We|a;e21U`{dz2%t1e
zD|#iOKFN3_$?;2bS2fBZPVGj#M3fgq36sy?uT;Bs1X+u=Lk{UyAgx<20&s!Pme0j;
zDA}^$2;05+ia^>`p*Ha>cFIoZp|o}O2!D;cLh|9A(*b3tHv}bMz`*ibjAJYIxLEtQ
z$67$h*ay5ZSVQvRZn}@Pi1sE_#;Fl-8y4sb{FB*0Xru?P3BF9H#-$|`NLeNImpgDX
zO}ctT*LnyE5 at K9(0~Ip0 at dcCYUn#zF!7e8|<9pT{V#8Z-*BdW>CmPc=#N8JL0#bA@
z{|jkuIc&l$;6jiXK6|6*-soqk+JrR6 at DUa6ibC~2f0KsgbP^bB9WDBnkhLW2R*Ba|
z7kcdLTP4x)LNFjXEcLocc;u`xu)S(r=*bu1e<#QO)40%?zrp|f#{S#pGPyVSm{dC<
z#=_!rFf*s~tknumBMU-N;Q2>aA6zqT5PAZb+>%w0dxAGpw7#%4{kT{7O$f#j-1~VF
zfguo~25FP8bMED`!jw>^8Hm(K#u3?(xrPK$4WC{pH7t{s72CrxhLr_cJ<~OsM~4$s
z2u%S@(_nIgX^Pe!mf6n7lyNZafN275rV?#41W3yyvs0G7BK-Ps+LRq2>v>!pP<$_<
zKH7ceQTa<aQ3?U3yycA}oRCvP;PoGdWQzDJ=&(?C(GAnS&GJv69KsIbN3wBu6MJXk
z?zTd4p?jpOuQxL;Q*kraPZU4)|6IuBl?1Ek(Mfu<oFq8@{kZTOyuGiY1JWjV-y3->
zxHm+<2ys!GWni&_6j~_AkE~A70<qYdoo4 at A5u-{tRq;y<SAH~>tE{UY(!=+oe+<s3
zI5JGEx?@s;S2dZeJ2_?gkTY!YPx5stf*&QFN<G4lTc#`__&=r(h8^L9{IuQcpZ|7L
zl1FwD*2(j5cbJ0wU-OyD2{73KY{30+zE`q~S#lvh9VSnhX22xW`tf<nnJ|3?lMtrY
zFs+8^6-;@2-oV1c3iw|DOg;)<V4ggy5TAUb=5S%biRwPo;`g<XOL8_=P<W#ngevCy
zP+QmpbzjQ%KF7d3 at QvJ+lr><^s)3bX5j;+GX<&H!Q1VRv)!Zag7d40cPZ at 1eRU5sO
zT1WG76{xY>U+P29K_mO~p0$bVM{{6BbfsN3mfL}hhTBK8%6R(|N_dBJzoxJhwQ0UN
zul6|0yKKRG*1oVWjssAbb9luHjtdo{X4MR3_+QEoigKQ8(upt6SoqWO_{x1gZo9G)
zHPRhaJ6a2F{<2>@E#RVTQcKAh=J at yO@I=igWFAX-r_QP};#gQ^@Uc)RVMP_}f(&kf
z?bNh4_Zo+VRa>(<Ey3H2y<wLZvDoi3<I)Qg)xq+6u_Ey;6>b)83%tbj{JDPpfIhGp
zi&Ng>dCPAE*ry3XPOh45WwYu-2~bXS<oM}uvv2eEe*D5O!uG)EPK(uEz}oVuxb=Bw
z5Y4y|uQP}uO5P6Qwtbx6ABLN~t~5=a;nBevliBJI3qo*y!93inAOZK7KeehH-n&Ms
z8YxUAi^AjiUN5yvt}46ya62e?ch;Pkzrd{bY1t;rw=6KfU?xy}mkqQvxb=d4uZSrP
zAgg=9@?VA<4CayP&6;Jm-8|$K=p^S4gr(2J^1gx;5Hc!@PCI^kE}9O267pI8WzKkx
zJuySf5m_5mrZ>8Vw4H(0D#&0l{W<~t^24Cn%3Wv8U)sLE3rXFFM*jXHZfPWWPLSm7
z2(<LOiDRczSADx`86+M{YnMPl7mMyRd?Y<tjN}2|4Rzwn!*YYave at 7s?<*;J(~$jR
z at As0B-&ZvyW^ueMpHL1*`JQ|FLq&VG^XdDBv-0mH6ENqL?L(Od3HNJRzr9;AuhAVc
z3Q^m!k3?I_CCfMx4`m#SpZo+jGi=!2mw9|SzUGAgvolZcH7;QqQU@{)M>#Ezc7>SI
zGSVJ*L(V!Qs`jCDjQoB(HqCm8mVMS*oDe~QERBI2-j4ZEmXfn}VBU#~9$vU~Vpxvj
zkX!J0(P`v2r#~*j_8>(<tiVcV#A_WmPygtvxb>GK>WsyU)T<tfLz=qfK@`T;jr at 1!
z6yZQNHALAh`(O$4<gp#t9I9&3z`l^BN<L1zp5?Q3#V;<DPcB+~=64XEEMFWzE67xb
z&~(8-n at j;pqiHD(HxkZmwp^G8M}D(~@Yy#6N_-q(2`Md~u}d~-Z9 at W3CZV;VvKfyz
zVAn`_<cR{Ut}~aQJ$k0234+i9G5ze<{rAsGSV-Y-r`Sjzcg;^W>Fvu?7RC_K6CKSH
zF3L{A6;9oEcl{OeU at hiGEvqKmYO!;wh$yEcBPJU?3h7yp2^P`z0lVW_J=uj5)bp3|
zEg4SjT&IDo=TiAfC|uvhX|gSYol;#fW9%K(*<s(G&m4aHa|L(bi-L5RU#AASvrYer
zaG2-K*nOK1c+)a=Uye?q1auPHiMg-_d#Vn}%xZs#V-=Liri5)KXYGV+r;J>*6BDRp
zfTfta6BF6W9A+`$eF@(|aRvYd4N|ka)7KnmB0!VQ|4B|q1m!>zmu|N+`n!~+xyiYm
z1a7yJf$ry<?xTMQ3*Yr+E_=CU{qF?e&?G03*Xe#6{u3zcFr_+*jg&058SmAb4uXdM
zsojOSJFgvKef7S{OW14f$0|{>VLy->O$)`uHt&_BWEbXV#^MRcb-S>OlqNE$4pU}*
zgIvb7$zrOO9YIeyWGIN<4;&QpV?+uTuv7?v1>)2rR(xi5fX&=0Z${s^6!{|fT?i~s
zt^OO8FI?ryRFdBcl}UD>KimiS!K&8^Onf5A-;HI*H`Rt2=Qku4PPe(3hyw}F*D=16
zI?Mj65wouHnFFzh3l_Lgu#vl6L#G4m>LFpVL5=ax1Ktf|l<<8md4D%HX_EQjwMp}E
z>WjlZc57E0E}WWANfoq!S$1y4lSx)RMtH2P>I{xj7|f;n)Pd3i6zj-opholT{O8(N
zCi+5TyR0NP)MLEh^_D*vc;n<{;t#+fZJ}RJWn$2$es2v94Tpn1eKTrc&dLXI8bZBA
zTN}qJ><ju-aou2r-r4ORH79?m#}-fyld~JJ)Tk9aeMmtkZg$(%MAPP-ApoPwwA&cU
zPBy-~OayZH5G3i3ha(G$f!Tsmw27zm8UhG|iPMfpwhuj+O5Sh4KBXKY=QUz3s?&AN
z^$aG3Uzlw&I=s6mW4wLpZ-;CGF$FTl+6I4)-F- at Xj6%ln{mh?@48<|NGDb^@zb&%$
z#`vKopcP8cV4}c8hY5qp3MOlqj7KRNMYmnROi2%7{OSj4l%%6IgpCRT$MRo8knTe6
zPd3oiSM)H3g;f3LZ3(7tggXDg(#qH);*cz7%^!CmWio%$aOX7?acEh7QM0qE!R!O+
zwF{h_?_pV-HcZQAfw!I6c*TL?5T%x&$=4G=ex(g;*g1H`&jWb0SOK>xM|Mr*(PE;$
z`mrQut%^lo^wi>u&5!h9{<L8nxw=)!0N<H`X;j}pBL7wb^wyY8RKvw;mPzs^%r*t?
zJW!mvwqkaWeGCccicv1Zj}1OR)^AIXu0KQ_jpm|SgV~gA>i8eEYO9=Q1n^2ZGs?Vp
z>15AU7N(q^jZNyX(8}I*^~I=61=x%gVAghTM%zqc`_PGWM~<k&U<M0dwB37o#rQ7N
z(VY48(n+m-9tOFaP;rCBvKc8Cu8cf5b6MUfoS~dA6e|~QA6jksyl`P>Ql$bSfcm37
zMNn3=QAlx%v4DB$XJJ{T7;_UkXhfwf2{JFs&`3m_ASycOUZe}c(0-2*$buelK7YY~
zDOlqYF`?$kmL0DOZH9xng*c_`5jygwO)T1iTgw9Zt#WJbhYB{}zz%%${f4>eS)GCS
zLZ`V~6~6#X(V2#M?nZ}&Y0_Kfmg7V=Z{<~|P0ut>PVMAbgxDXh>H};=2cQ=|)dVYE
z0}R;~<_k#bK5Uli?%RL|eusdgbi=3>=Nxd<b`t2=Jjb4w5}^3dpQ=a(*5dl&$Z04N
z;~xaBtOipRN!tNC$aHRxsM?h`kiIwc#`E99AdA&d at n~-tS{F`TJDmrX>ca-y^=YDF
zILvEfI8GrfE>n?6Hc8vxUJwE1KvttF*kEb at O8K(U#%Ox9#DKHT-ay?DaA$HR_{5o$
z4H(W`8+3}v$cpwMw|f at NCPl=ivj=K;l_*lo2)3I(%vH6GIIJEmzW~~bT+>^XNqO9c
zWM(P)cY4j{xG6j4yyO;&@SH1oTzj3j`)~@oP0864_;iVCu!}w{9 at J!{=B-)&JOj#A
zRGKXYRwlFT>r**xN;yvZ|1<j`b0)Ubn1|9^s*wyV)vUUi_$aJ#ZDsJl(~#ixtfr+;
zE|K#;&u+?aSaZhOznX8QPr)uLbOdhL(Eq4n|8S_kYAGdZeC+k;ti4I)UVbHN9~*Y-
z_ezdz%I^oyT-N;Qf2zlp|ECiT4xtK!78ZfTh8Xt2wcB!ea89`REl~SJI?LQ^t5}#w
zC-bSjGLtn at GU)z(nKW+6jjT5L<vkSnmP+4*c8gaDw=Mdr;w`N`4pCiCH3vLZ$#w=j
zQDA^$w;jXmzQ$PSqpbxvc;WFsGsD6^m-)>56oe?I4NgT{4hqvjSRo&T6beBow-C_N
zY?-C#luP(tiW;=^RKT;I8kzg*YMIY!*ce_iqjJ1bR3{P1pGz#@t5OPFLH0jeggzEv
zKrr at 0I{Nm%jaj`JHpU({W}T at q7gkXdoeK~|Y*{5VR#X4iwqX9mT=72Gh=!#hA<h$F
zp2x^DGbCZj#D79YwTF_L@!1wsnPzJ7&i`$Q#)Hxf-+vAp<X#nT2NWSb!qqFEC!(Vu
z&eff{yxs1jSMd9(s+-w(P$pO|m&m4k at VSuH-zfwQ0W(UByF~0E1g;Ny$jt2a`pI!D
zd?$`SD)*mn*lBCns0x;ZUlYVtjeKqD*`h~wrBypDtz~B4 at 4eEy=~06a3+Xp~g9XEa
z{uuN?J&v7xqihLh?!j~1r#*>J(}70=)io<TgzBeP`=Ev=*x_A4&Vz2~-#x!q9`voC
z&<ht+Lkm-=iTXQ(J$^v#Bis|vr9xx$nw0sxt{xPqlCtra4(&q~XCW=K+K7Ag=Zblm
zGfM3mr`+6=KNzOu?4&A=;~sw|1EKPbkFX$bYjFIuO$R^u0}2x!>VxtOC@|cFOI(K|
zM8!~YxR&9*fU3zjp*nqkPZbJ~fLyKvglM;38huaEuu3wZ?je-ce|vz-%Lsmzv>e`B
z%{(Hhl_<j?KKG3i>WTKzN3+EjjG;eH?sU#=@c#bPp?`A<c7NXKN#i=a+3k(4Oy9ac
zI^dNdZIYPZoO*cv^<;y!@np*eg5NEF?}OZ~jAyg3x~}p1XGhdbs~<GH at PiEC8y~xd
zeyeR;vP`GXy+~~z`ss|bbr$=RNh5sI8E+g0Zq3jFKrT9rO{JcDK~@}w1fDR^le7~6
zc*wzOKC~ymdD}gKhw5&<Qg|B773XjZk#0|5jr@=JdI^@KxWyA3OMkxpz|*F~j|GrO
z-zGrMYG=!U-(+7Vo(rc;4g^+ at hws&<8Ja#n4haPNm7|?937-NbKP-F=P6?OdbaDMi
z&Nq=gNl-4f^5X;2vk9AOKlTK%_c?%xc8x0^NO=?H<2sZ__tkk at YRNqM39UD+2R;Yu
zyv at akqdO5nX*MIjZNhvf4_<NZXMwdBRnFH~)XT{UxP!LCmL3WbVBqe-D_QJ`mSvq0
z`$%px7S1X0v3pC}(yK2vHEG$f7{3U*>v?ibGd7K~mE7A5!P0aHDOsYcack6({ZmF;
zLuT4l4jf>`Dhm=RYfFKoFyiBowVU8okt#vvwf^aq^iR_5_kFxfee<%jEjMdoxobfK
zFnd8J`u4|~+$J+P;)?{=d*ziyF=kHni5?0v&qGNjy7qsXEefdJ<1CKH4)MY`mzAXG
zb8J!wWYgz;v;5uipPyQkeuOxI3)vWaUi_x+%$1Kw3SDs{TL7Qu{rpr`3%^qo at 6wn#
zvzME{nE6~O)df38yODLDW8Ut*N)F*Yux0%%JvaTX(+#fW5wSYLHv;5CQNP7$UaW&$
zLjL|a=1Bph&A%`n<wJ7%zc721SB#C^Io2ln4HVdFxmMAZ at cC!>d^=n4g+tIEKX=Nu
z2h0z$hN6&F^r{$}p0%+yatQzpe|8Nyz2efMr^eVs=m6{PCq1(6Yh8WHFbYtZ*?Rc#
zaaUS3U at q#2Wd{6;)6T}V4}Dp;{y~~x)5%p6g)HSdv at 2XmRl&koigkRJ{+sm=lpTOI
z(4h%Fo%*nm)`?>ab<9I^$UQCt_jj}vo_W3uZLr-mQ@`lRHQ=GVA at nTFkNdbV=lL>K
zm{81X2q|NF7Cnqo?M}#I2Z9$h1afMfQwsT-pFAWFaynRizgnRee^u(vp6_shsQ4(2
z+5Jv+{hO7BH6jWWmJ4wgqc?0JJ`s7tmSr`E9aySPM>gijX782qr(AP~<vwnH$tHWV
z@~tffXS28V_DUWUpQxs1z*FiBR%72>@49M2l(ht(n-OFVuU;Ze5Vbd09jvT{43-8r
z3ygyTea!|aBlp>|3t1;r;nlcs2`xcmG`%0c&J8%Y%ek#%m(%LyxQqXn|K=9Pf#8;0
z&C<b~W1#^@O~Qs<t;ScAODWf6=tCaQacWTBWnFe|OR7<H5R~NGV7fc4O;`9atRv2r
zjWhrvObC=a2)@nh#Log$7vYRsgbSSVpiuclBk3-#emkx#ge%>`)>=|>qVCL%0DGKv
zZu{Q~L&%L6DELB$ksIspD_A&nt87BW-Di6 at e3}V(13AaSl6`Rz3ZcrB1&uJSnNH&_
z%m=BO3{848s`Dn-9I=Zkh=wiUk6uV$JH4hfsw#m16^|g-<hA!1H^b4%Zqt;TKixED
zupHwrY08eENzreEyxxVxW$J%Vs?G3FT|iE%Cg-rZz-fR>kKp4N{NE$D1?GL at LoJw(
zCY;y{?L{5PQb!0cbqz6P=T$$WgC(Ch at VjIW2LID*h7PUdt(=w5NU)o5aw23-54)e>
z9qraVwi0PsbVY}Z{=+?V?B?LB7rrKptap0Wda7y2+^-r?8(5ONC<Mug<(gm=HZMb*
zc>!VNi~D&8(Rso9*0uK~eayv-=-wHHp;xt!-kZLr7xp-!+cLfNAG<$^-cWt)xwfpf
zk!q`%Q&{|~<IbV456LDZ*{dT4X!;Q8fmcq^3Ky!f+B7sH-wn=i^LBlf+4%SK74wqb
zii4@^Xag+zYWr+FN*VCguzW0!3jVa=wkeayA at iB?X4asnsrs#c>^;o<8fDHt5nJWS
z<qthuV0%^X?D|YLef{z6Z|`mG`vJGMtB9?S^rP;HeoufohobNczwle5Q+%kr$w7Yv
zUd$Tomb(T%l?6OT<=EU3yt<Pa at U_<q7y8Hz16}pl*7ZVf=wR%RS^Cfg9D-lzsSowK
z>|&LifqTK^jWFq~A3zwKy$<>OIA(_IR(Vvh$~mAGr^RlLJ%^6#T(E21_uU?&*Q5t-
z`QpOXp?C5dt<Fy5kfPs(u6%C54ru{9Hls$T(Ea3voCbNi>ow6n30Uq#v1&|ScU?&o
zxfM9g3Hm6ykD$&u6piy+aB)_P4fdG6W^n5x&DvATVMRy%M`ircYf~r1MPzX?%cn8G
z!J-GSAvph0QNW2TU{3WI1)$#lC$IDO?`=X*IsoTG1qW6-U;K|cRc-}Y at xTGHX4z2q
zb(7CE_0X~))@-$*Yp6HpU|bL<nbni|eyx+vo!fA?YiQMqARh$Q(~i%!La^RMVD(%q
z$=BV_8ua=Df;G-Shfsa;zfg@>8E|~6Nn7GiYXKCa=0sJ9&vbfYQk at LM1?3D2*+&%@
zae;4Mb3U at q`8UQ36Lm&#TMusfN_reN$_R<i*8Qi+9f5qc1wna5{53iE$R_0d7U5d@
zfj)#WcOzd(CvbTgTs6BS{v&yafwBrflUr0R at rQL@RlyfNkc-N5()qCZNgq~$eVrLr
z@?y7kKFsvqU`8x`6{}4WvrS<E_U%H^_!&Ccgh$T-7y*Da61;u%12JMzWR&g4(FXYG
z8DpBU3pvS1GbW?Y-C+v+h}fJJS{J6BI{N>i>&xSsxVFb9VImU(Cd2>%!Gt|1Y6MY=
z2?=4FfHugYf?7bpU=&dysI9{U8x|2nkuYjOtZQ3apZ1AXAE<SyV6iF{x0- at mX@k~2
ztcYy>?oGt at z2E!(F`t>c%(>gS=bm%#x#xTvRir}~&~nK6AaFryz`c7tbZKlgX}&6}
zblYJktr^dJn$*vfGWwalOLTI#Cme*h%Hgc-;Bd%G63imH6=hb%OR%A>mgxp(3=jvs
z=eo;_wMP+pFn<+B at Br}v;+~eb1|gswBg0j%$yyG7L{qDZI!V&(vV!O~u2H*as>u2J
z22FLQ>-&KL`B~Kwt{;r2!R<|`JrC{e#xE}l`!u+#OPqTBT-%eowe-fjZuRb_b at 54v
zSHg`+v`9AuO)yTfij7|(BOU6Io}^Gu@|6$z(XNcHZ<aRx!gXBBZFTVBEOa5yvFsPS
ze;S<Dq9)%`J$+Wuj<!X*JJ9>}TdH at Yc?W0}<JP}JzZ#e--KJ(KZu at ZNQ`Lz3*wByY
zjU43mHXr5(U{$MFW(-T<Oril8W?KZB2k^=h4T1O4q{R{}w#3KpgBl6e7pYI{Hmn{`
zY~s^nYAsu0<f_Bi<SISp4R4X5<?8YDlRgM_K=1{;@hIA=_Pb!(ZCzicPlNlUtIo!8
z@=vHeAG<5c3I2e0`6IpjkwDmzL&>ZxD`ByR*?vuZAtKuPU;mZ<$A4k#v+62{N<R6n
zCVw2VxL*<_s+sKFzs?bFXQlx$zFxCOFb!JhEL15JnGIS5dNG?D1|B!?kl>jGo*Xsv
z#$@oss+n<4{VpKStSD=pJQa;`O!C at Ty4l6!1+-bi<?Ww{r%j6lPda!AltF&J3uXBI
z%c~I$;_|%x;Tum22z&cp41dBGh%@^<cZ6RX-o9nC%PIiK58=+3iH1-ro2n6jTvW8P
zVtzDJahqgUji|?8_$lQ4;o%|0 at U}Q4=#)S-T<l^c-72#(TmS1ZDh_*^7A(o8wP<;9
z94$5NIO>Gr+2Tdi?Bl2q)rW1`L9IHDZlYyT1IN)or>t_jxif`&?GwZn?#%oe)0Jk<
z69H=Il!bU{JBBbBV*{;)H&No+EOvg?)3cV^+6c9#mEOW)i-$z_mb#bv*};@by7m}`
z`s7&QWp9j0M6DnIJRw8;vn}Nrx-iE at 6J9)<$4B8clJZBjanRU5ypQ5~fFn#zZXY~f
z39SL`<~+PJU>e0)@5Xc3D9%=0hxh$J2i$=j;4>u8<fL^iZ;$p<)RYOEvh-nG&P<vt
zBdM at 2^YxNkz;kdNXChSG3Dk{Df^!sdsnvroc>T7j at Q|kO>EAwr4&=HGf6Qc67K&1>
z*d^T>(lJx?pli9Knq{jFUNztF6GQ2Md2ji5Xx at b$upsScABx(ivx9L^v{<rRaO5F=
zbC7k|e36*_cZB at 2`!9ryNcPrMD!qioXOq$WYk`Q=x6Bw0YKJB?FF}Yn9J$8tXd{Z%
zEbOD;wCwbUQ6ZN!_50NE8Akrzb50o{M{SG0`iv5vM0uLH$>=6(n+pSoWFACV``~62
zqi0Q*+Ysg31{Z_LykXzKR9I4`tBn`DikG)fo~bo}62VH5RbY#(-G-rkS^5?8w;`x`
zkP<^3z<}^TZN`v^n5T4;1<vpb>c~md2jgy- at B*e$_fMkEw6#><Ni-mM^{EfP*S^H;
zv^OxCtnRDuGhN;T-;W7<6u_HF%b_rDqP7}g(BXWTN$bn%PsstCqIodVzCpdl{P9{n
zE`A|Z{tY@~%7vaLtT#g!4K3eS1}(I5jGOS{_{z`>*xPJh*~q at kl<XfV9D!Svn;WU$
zzd@&ntH-YO5^XIL^~{UoG%8?kTkO?Bd<n>7<W_CvBHFBKq%}bJ7!pNl_9;}3jZO`!
z<`f#{$D4wvidhw-C at MAdGtEq!9W+dZ31hXmdyZ2ylfI1_IfZ&MopJXQ%cf*t;nc*_
zsE<Vd^2`>lc&(7#edc$w*KOWfA-tDJHycpYrKz&E*9>o6c5i*w(<;D(SXu5nV(r`$
z5gt^<X>=m?VXM+#e$ezKbq2u0Kw2+I<5EvgqpqZq{`D_PhcsJwt<!R)6Gs#mtapRT
ziGqTKPtAHZU4h)@j_zV;Q&>A4VU;|ro&C%Svx6ttFPZS#tL!VYDM;r+1R_rqrL%!G
z+#HM}#I|bWBGTYw8j;b>MifD~Grjsv$Eu}cB0F73*6VvOngCAFU*F4Xh6?T17U(;#
z-C+#(?h9T2<QgRQb2+by0yt-XlVjT3>cAJJVx-`9gxnaI(NY(al0D}O!G48z_!emq
zf at zBpzLp^tEd~SVI0z at OoTGI_IK<3A?#r8nNVn$n*inP3M5W7E??zI`!IydAb+~C^
zm9N at rT4@~TW#fQ*Fx2&SvX$geg2|x{@D`*%54TcMiv{|<E!VElxBml?GB}_ at yU;8L
z%)YXQ6aX?CsDC+9vCz;W%<8}xW~GrV_nxYF%*MnNwgsmn9|SwR)g2EpeF%-dYy9G%
zs;#Xg_W<;F at UNjDKEm?hBhI%Cmm{=1%)x&-Jq#MR;R>lEP3T0v*u`uy%}!STA~VMx
zr&*XkuWag%CR9j^r|g?impO~;E}B+GHOtYR_ulO8_0%mP#^Fp=cU>ElS3DO~zi5ev
zCgFcru9?M0p(T%%G}3Iv|4hzXn{J>>yc>%=F6uXKqSiH|ZnR at mZ8Pdi{#ho>xiv>7
zt6QTwvFspOk#3x=bOVf-lN9S-zQ_&AUK$S^E8lCBpW%}&@GSK2Faz?emO_{Uv7(r`
zGcdUz4S~0CEh5ZLi~&SmmaIM|XPDFb8noUeCoz!zXD##;K-R-_^wa>_K*`Ube3V;z
z(UDqo2A%8tPt5LKh2XPbw?L1Vx8y>tW1vTVZ6Q+kJ at wrg)MpAD(myAuJy*CZN&tEE
z+^pq&25qdv`n28G4O~QRcfPHUr{);tauyx$Hif?Dl~Nbe>Y(8-qjrzc8Zh=Iw`wHv
zc8}6zpyJP>3&~@0vG(LAW6Z`X%`HO}xYB!pncev_ at rdzKVomvYfjG#3aFx&B`>LDg
ze$MDBzw<l^7u^MKshvQ~JyGH_*BfaJ2uD at WoP_3>dfba2#fbKGoN!H`@qNv)IL at s@
zFs$}`@nf8L%{1c&gfrO!M(S6Ruq$&Pa^=(hrR9AIk3uwGTd+6C_*YYb%*}?o)bG+3
zt0(%r(k<(>-gvO88ndfX=U$7V<S0B)=!?`TiAT_G<QtFSVj$+Osz$EY;zF?}J+ at ht
zcJb8`U6_x%%>vWcT^kyfBGln?=%lfy`}VC(iHlgBvY`6@=@IJjIn<k!qY1>10`DJ(
z6Srt*B#*H)TzBXBpSY-*A>=If-*ct15p(+PVb6N=?%wXcl>B)Zt>q58WooL{<p06T
z2j-4w1Py-#I-<y!nB!#bERIhGvZ0Oh?XOkeg?hnnZgmN#jTiRYzSp3vIMCUR$b<#Z
zSXwTPzrS9v=gK=k&~{GsUx4O%>uTCKMg3LZ3B&<;POFAAFc0YEM$pTY at dIeW2hKX1
zuQ3L+k}&QSD}?I$7WMWizRP at 8Gk&bJ#=_?vyBp{H(L`NzgHTairSJEK7Bi$<L#RpT
z(IDQj!8qry!nQZ%$LSWC%{78Cr}EFE(OEKCeKZlo!>mL#6Zo3PfF>jg{DQnNAI<e(
zo4SO9c}w$<`LQpTu^kK;H~8OjXX3W`dtA_TY)rlZ^Kt!i8J1InV<2ukj4Q~{%^%XN
zMzoYYGSe{)Azp!^f-j%~huuwJaLYZ4<hf23Y7w8pyiTpSfV!gQuZjz(h&=W@&iP~n
z&9 at -Sr~uMqRJW#ZVy at E_5uhOx>uJV_VPWs<M^~+>T*o7rX=;pEdQl+B^$TSHWO1&n
z1?<lEm|dSzhktsf>lI*Yg!DxrWtB`zc^4y_J`Y%Bhxbi1Dk at hbyA>=&axzxuRY9$R
zC=cP|oLiVP0Cd|grxx>mM^F-_Se0-8 at 6_yz=p0rNRHD(Rv(<@4YX3!4PP(5Bq`yqU
z5$V=`>jkTG7B5K8NrP7Q0H03l4Toor9RB@<?Ss;0XvihneqT{EZH%h=O*VmJP_|P>
z!*?LvnB4y6;bv%y;IDA`WVk~dh`{fE64CbKztqd6ylUiTiupSXeET6UO9VRBrNy*i
zEUj%bW4Ha^jk>5G+3v~Dwrsgj6_?Nj^!$_5FPG4n%tH#rdPlWqLKWrn9V#WwIc~-4
z!X|DVXp1^)zRR@?9ta%v*M+S=YB?N$-%x+R5?*Q}|I)Il^DcbsuW<FQId}bESVg~s
zA^r~-HkL5>=b!MO4 at NV9h@)?Th#`>5yI|a>y#w;^{{UiT34?#We*4d8_~c*V>Rngw
zQu52FgWx=aJ)BZKxOsp7)Rp7hA4d`hotTZ;sk~UlvN~ESm46xaunB3+>X?Y&N}t)(
zp3CTTm$>K9(I_s;pnbBXtsgPD at j0T^X=*F+UF!GC=tR2s8s*Z0`h><&mV9s~&Lu5o
zW<6T3UBOiHw0RoS%AX8w-aR~)cV!JO{HZ=pxcC=n!)K#o`~;g9Ro_vCEvOs&IS?SN
zMu8mtH}ype>Pen3t%mF at Nsi>lb8TKIzdU!S>X#`<ZsO>I>x*l!H&<EF00WB4MCtE!
zb at _;N{(r{;mkSl2<)`(h!>$WrlufDsmo6-0I=f1%z<B-_tQNkD{}{&8EBr5 at 3Ui!y
z*%Y$mu`bNCe!zct+XlO+dRj<SLlL}1a3!i<$87g+t0Hb-jPC+<_y&3V;Myle^0EAL
z58y#wqy(eamFkwl!#Z5)o1Gtp2{RHyw!kz^D+e9C69VHm^f7}Y@(ct10&U2as87r{
z6s|Pk+UKAw=9U#HB>vI~VG}PgFXB?DD-b8nFlq9CWpvo;&9 at O};lh|h{+uclyi5FT
z4h!{ixbTDV#QU<2#&v6S9^kD6?@29<5-z`B68BS!nF at PY!IB5iRE5OB{hQOR`pjdS
zn8$~l38w+?zJ0Y}EkP0&egQd&8y^kNH)(8vok|Z6Sh;ShlK6IJdsYXIFkiwG-yzqk
zY8ytK8;wom=Lq032MXZETf_5E8oT-Dkk<S)7!UM-YyMKqL0PBv%)7xsQw;;20<dJd
zWrl2la7|ZX97y|=ChJ>ISM{x<rxIk}fage7R2<AS+HLy%w4DH;BLFy|YA!6ee`<|M
z^8S_yyCtzhi8XF*(0=kpM{yoAeM(;GhAhrSG~UtXp?C4dnVNC9FcqPfNXKA|Em``s
zUWGoEa0P6Qi~P%!7HIl(qhsbv+za5^!+->47^z{qw<&M(dF<jB$3p`8IZ^dRs9N&|
zmDVn`-ZH_0g!%)tQ&svF(Pw_-HJ09&J;D+GO4v164R3q9C0x-U`F;WNBI;wE193Cd
zl}H2<I#|?eKE>?38<C&@&RVfJftfzHjs9il<;y3UUCy>lX$6%^xkfgbGyefHA2er{
zg3Q6AnFX&dpCFviwm{pfFIMs`q6~CirH<)5kp`9E0MU*7k``a15E7ekBxxQt{^|XJ
zUwR)wR>^NcK;F1zxYBQffI~lUIMO)hj2qdyU?4m(z-8_9Yy9}1b8eC{tS`bi+tuKL
z9`-aUS#vPEi^C(8&{YC-lTdY;lw=_o<C~?NTw(^s$Qbt3ugRmUG>d^`5buU1Ey2c1
z9VXa_GsY~AG+0Tq9dKq(4Ni+Jz{W#CdX+yw?ipeMae_0QFyKg;q-)T01`#w&jxFuY
z=uwrCi7i%VA0FtnLqB_+^>2(rL?9qDH06V*@e6QoXib>+1LiSwXW)BnJT?yYO!TzP
z;=*FwCet24R9P-HL_O}U3Bf0u^Zx7q&r24^A=)l`k=6moNcH&S=;xQe))rvnk{fV@
zG)1kDB at 1xG6eaMhi|komVze%*d(yL9>Be#Xc}Z=I^U`LFxQ`><25tyfxOO^V;96Pw
zGNH<QY6+mxcAAxe^dLtGc4~n5lBf)1KlX~q-Sns<eA9KA9_rW}_AQe4Wf~)ZI6{B9
zT5hXNatVg2FTTwjU(<7BGNR4nkLlLPT%o`K5*UOv)C6iD-0ljdTOywsMUm_v5I=d>
zKtJ`zRdfpZ?Ky}O3dYne$!@r)x?Zs5?YA&?rUWa0IHc&?W5U-vm5CsQ>?^W3k~ozE
z9ZO)7rL7_NJW<sasl5c7wyt{6bJE#1sB1&q6#E$gF`JfMJ^1|;Q1(rWtsGWGAx-tz
zw^3T@!ib!Qu}_hwr*0uC)hv3kdR*_n;)MC6G131dpQ(}U5K8SsUG>jC{l<G6%?r;i
zlmqrr0viUu^^ZaPF`ECrQ>hiibsUq`zfLm8Tk`wtJC<6(s=<+gk<!yZVzeW+g|ajs
z;v(W^zuB5m{L9N{r4E>o1gwy6UDeTWP#e|;9MrZKAeke7Y`5u5 at Lz?we;$xPUkeKZ
zGV>8u-8=KQ2uz2xBf2qG2(3geeib3le`B^1Nh^7HG<;}5_26Evur22$F6_-T&IYrJ
zF15$)sxAxJeVU`BqGX9KYJ(gUTnlBpH+ihO9oDRE0J(%|E!sxRwdykBTu`8kX8YC-
zL67klUyf7)IoPjv-_eMY#e$+F1;*a<df<lh8jSI18heZL8k_+=;b?YC(9_RLcf|*>
zN=;E1Bcw(B$qBV_fy}Pok^R!Q)>kULm^+CCt)0*3DIHeGzU$I0mDLH?pQ-36&_-cn
za-5b0v^q#p=Osh7>_drHiAsz?FBz$a>P#n=LO at _mc~2}5Jn60(76lAIdSiMYnM%~O
zOpL9bD}JR52=4S(Y$C2>jHGyssR at CE3}e7Ned!Uav|XVdQqul!8E*=w3NBqfu|6yD
zNX|IilelZ1dbH80_d%mQGCRvff7V4&Bz*_;uYA%t8yYmN-QVB!V)P$DkfQi)J_Jlt
z8W3MppYCw#-`F#OE}aXfY;!{>;Qsw9^B37l4HMX^o4z%sJiwyP1ufxODklr3S3m$&
zZEw?V{CAoJ6KzMLmpg$L9stwd0 at E*hx6=>|FK>+FEdK57zns7R6@=1BGvI(cB<k%?
z?w}=1Q2QlwD-_MC-H>FHE%V|Qo(~Q~KH7_={Yq5snqC1AY1bc#JB$;$TA>G|s>?Y7
z=ppIw)LOZ;c!gk>6}#Md%`&mHxEb3LoRYS9LV8;zv_Pma&gK_j-o07I*<GGGrMQ7U
zaD{ShM?KwUyVg6qNh?8G#^3Yk<>CgAWl=jie*C*=*J3FKqm^z8ZDNuz at 2bmGbvx>T
zo!5jkRsJdvQcdlsGx^)VU4g^(Lw%WX8H6XGfnec0jj%TniJ?s8VvMog`@xs^hv5q>
z=A1VM at C!JckG5e}$$HxU7TyMQ58&gEMN4Q<X`tL2vteE3GoB?mqlyDl>sj>zVbutN
zh!Q8biMKPCOsUzpYIKW!=4~Nw{?~MbO8gOZ<XSd~;qs+?wzU>+5>p#~L?fckpAqPm
zfZmjDD-$LaV9c-XgPd;{I`76klX2z56`ctEfab=B#z-FG%Bm0x`qGOOf(zX>5RW<;
ztP)ccHRdMjN4h|*+WLl+?1Ds;Nf^}F<0t(d%sZ+5qMF at aQAI_5(5N2}bHET`R;vM(
z#4dqZN1 at Jy0g&<I=v1OsjA>V~uztSNA6mt3TYOD;;s&s+<BIUaN}ihk_z4haD+;|X
zcMr&+lm)kGiR%)~v;yvnlE&HU5Mh_BPOzS+Phb|z>`~Tdj1VmyU`5qn?8e;DeH_pS
zlRq=SB^>&MF6;PdCR~G(FJgA4Grr890b6iof&>L)lBoIJheI?rgep7YIBp&0*=0St
zNQUIP?8q*jVB>rfn+)+Znw-W85Zu0e0?z*jmZ at kB5W0Y@u}9`ay68<!ZnWi25>)zb
zs&mVBZ4rE~@VmA}<vF!Rdb7!A4ZESpLseD!Fd}t()#WmzFLEI6yN@`zeeZ!M*ce`-
zIy&F9qS<XQNKr)m+oCZ4;!qstWQf|6TytT-yCmOY at R3|7&(Q8{5h_2xCOSwEMg>6E
z*6lg6dbf at HTk8-(=ZxHv)*qK4t;VJ)Yn)WYOQKUhb|}Q?O2;M+KEIjIyglUHZ3-2@
z9Zj`CCu{u?M>P==pJ`VI?zZIb91FK#pg}lI!rKaLQj?yb0uxJCgerq(8N#xfL<k|r
zCK4AVZVG|SaOz%Xv(E-yiqCA_!he6zJ~%B(;G=A^um|n8t&1UhFkIX;rX*V*w#(|;
zrcEz5xJK=>3JIv2E{<x@*-C5Fw6J5*O#0CnjLTa)t at TG4t?F_Udvw|)qhmSylN=C7
z={A|I{*`eyb?z4GJc}i9`)*LT6g0<LR{y643LxA|$rWM8xJbd9lyxVzN!(Ho(yM~)
z;Wj2t3$brv;kP9|?C$NuRN8ISfo4Tbyp0B+r&69)nj`G3ByOGP<{H5tY<<_l_BZhn
zRLO1B*GVq1<`+oDD%}uvgP*FTV1;gBNq5gO>f&wG&-0rmH+{A)`$0nc;6=v&k&$x;
z<@v8U3l9Lr%yPfQw4R$1pT0=wt&@CD*|=fMrs+9?*6k8L?%3>eZ9(xc6?X at 9B%dE?
zZIrO2#ns3Pud1Tf+Y%POy_w&YP(6q at HTm>rnxZ|uRW<3ZvODEdk0r*}#0cTC-&bn3
zmo0=|;95lI-hfU+9<6q%kZ!|i`aeKg14siXQ)j at 1Y({DgSV#dsgQHcK8!+&;Jv`O4
z61tjuv~XJ07U*m4(X?w7U^z#?dkf?z9!;yNgibBMy9&h9Ks*TJU}e4r!%T?W;EjTn
zx(>W;!F%_;vGmWF$ED6C3uPM*oge6<<af~|G8RY5|1lI1KQBf|RN}%ahuqSt%gYc#
zlR(pYCBNIrS~I8~w|J^9>aaWH$Yrg`5f~%32!l3>=-)l*Q3VxZm`@WTh&rna(7!p-
z+zMpj*hk{2L_WqaFFSe2RDqkK7&=KCU3N4fzHCzUL{$-Mi!l`cyj%anV3S>+rawJ0
z9&;nii(Esf7Jdsb8!6}QVm5O545%y;Ut0B9vx}@1N&w}D{*MMc`L71d|IY at 18Awhc
zZi4CR9b0_b{`x1WmlA90hbwB<E|jc<m4V7X=E~f}XZ@`OUa$pI;x`q*7O0-ED`J7T
z!MX~@_NBSyfKBYpv@`<uxBR!U1b+X=f8Om?u at Mr?ru>jm{)LU~DyznqE!&2(d&7;h
z`}tiz<|LXkRm83aL-fEXe^dl`O^!v90|*6>g?j%d)QQZ)>|$1f)jr?SL8(66GPu~6
zpELh*<UfA_9kY_}20QT4y7m_~p5_s<lLj<|5{a_uu(K_7EMKGoOo8e^>Or%J#V at 2u
zi-l8(`QW(~NY^ef;X%{Nq)=6r9QFG4>5kK#QbR+id7A<zGHj>8_*MsaRRFLnfGye8
z-MxdTcNwo;gIPa42`W9`*)>}?!I>*wE9L?rQX_M7U)}*3xPBB$p#%yVMFWlc<??C3
z4r3*5Q#YR4mD>Q>T`kMJ6UR1h#jTnTHJqy7;0kKZebi&({YkUSwUv{FK{qh$BF(6{
z_dtCrr~|_mY(@OE#RGn(lx1kHvR`IOq0Zb#oyPeHJP4;%JgsKHz2u=z8NbV>o%;1Y
zw52C!Y8%tg0*y{{>%+MGf at ssij{*fA1*;JG`k4dn4jl-Ka1sQ72Oiwf4oS#!P}C}Y
zIAzH`5*JD@`qTP!#&D$rE`)2cZk%LM_PRLaVpcF3kP#nyB(EoTU at LFOiIpkqUM2yV
zZ+*XQ)IJ(R=`BA2L^YJEFrt1lnP<<HdrevLYlHJY^xK`c%l|3SawaeJN0+lVR&Tp{
z2d`V|AMue2e9yUy8$tX>?2keGUFxY3ojD$|SBl|XfR6%Hhj5nCrL-?u!zt~9x7(=D
zpHWv~_F1J9DkBoG8JWivNOGsd?!kxEuQs(b(@oYI7n6bd at Mm<I6{se4<Y)AK+fyNL
z8dlB2xTivLw at _FoDnzH$Y)Pd2JJDcQS^Y~TKpH)yQTq%QoPBuZ+LiCT+|N<EPL$^}
z(m61-+puvG^y5%a2(7~RFNEJ6>451|o1&#1xX5KLb-EKB?+k=)fn97d6uOl+0l#wy
zN2V#O2RGGIzjva($?s1=@Fn5NnptH+xGHsiTUsoBM2}6r1n at 1$pAI;cOrLI>1>9)f
z{-CQE{WM~GxDyjT?pxNg90(Z`f!Ho18ZkQiQ0ebxOH~&US at WXy!E7D1vJ3T9&uI|>
zj*72cig5%SMR9UNjsP-}8YPaXx(BaD7GU<OCuTOyK6x<|#wE6(I*E|}r#>hx?oHRp
zRgb|tLnrUNXbHo&to{!*AnA6R2y7x;Kd7ND)Ma96u`)3R6J at o(sojMm;(Gdq=<FCy
zRlI~*et1Yel-54z-FA2D?MdzzDft7`$767Jx29(-w8#{kj>IV*M4!FpWqV*46aHGU
z7H;AL^euaUisIMYpt))t;)JWBEjNuHX2%Z-QUdAqJ3oBx+QGLa5^>?{d(>A%CA{K{
zXtfS5=A(_8+x;AdE9Q8=2D8i8A{bFBo<6K>A54#==nv6JP9%<$E;$}8t8*)a_LK?e
zv1Qk~N-E+ZD)i~rcrb`<d=%RKt(+-l6M*OYX{@j%_b at IpH6!Nmd<UxhA?i*JTm10(
zo;f|-y)%Xy5Lv?A&E~L^B at FNAWK|0)mVAHh%6UiOIhD7nc0qb~&eze`O23}jP_$&~
z^+Tz=a}@DOAkuu*y0q@;?6j<W%SITtwv>mjpOjgpkK^<mhwPN)gx<n}dwpzQwY8t~
ziNkv9sLR%y%|9l|Xj1!rW=st(d=Ov#g0+r%{}Jj!hK#?yS#UK`uf6qlhwVwxDF|4<
z%BX1G#zkJ9tVR~Hg^vLX&LF62<W^SMWa+jkNVjH~SF*}tmHf>=n><Q>m*=G(oTP_1
zYhemxcA8F!7ry{ucTQF5>m4>4l&%sFrLhHRN7<$K=yx^?v?N&y8A#$L;GpI;TLX at Z
z(`{<<2Mna0s at Qdh)&WS#|B#Gj-p<C9(k4Ex315)PxK^cf9O4icn?3jiO<u}d)ksnz
z=3$;@_K at Lh@^Ap+5<FFjlwjPX4h$u>%WSJI3z@`Ai3j`8(>7vb6Pt*TIG;)(WzECI
zVgXU&&jU<mEExF+>t+N4OsCR0u^O5G8K1fIsZI$PE at iG`(^$Ac{_39`WX**=QB(4C
z@{cYyje)LSHDk*V=neBUQneYn at H&mC%D_J{y$)t(Eq0AHyZCDdmZ1+#jMQp|#_TAN
z08aU5che*@z$Oo9=8=8q&GXjjYL>_6(40{q9q^V|C67;&)--v@>Yv3^oF}Nmdjm~?
zaf9B5 at HS;<(-`~)=(g=})&Jl<(2X9aQZD`j*2K36L8Tr2Or`g^#s~53Z=P(WK6rw<
z&xCyhW+~jS$I(**x%B`U2Jz=oXJwE&<nbXJ8c~c*R&MtZy#YjH6D9G0A|&QWop^#K
z(9Tmfzn}v1eO3QoP(K=vn)eHuLz_)q`~{6AXS*6=G3%WOHYy1ZZ?m`zu7hDP9K#08
zy8^^Vdsl4)Y}NEhPi=Mi)1XHS=M9jc2>vWB29h`(@`d1S1NlO;&*Ie{APiY|z*xFZ
zE#azF8x=FBejG4URcd%2L!gq8UPEo^Mg_E4)RAt~hyL&gb*mfQN}jD-V^{TYHYVjr
z4HIlc@(H$J=J+HS6bSL6-$sOwhL?b_)XF`j`ju&>kWEAZl!(HtpxN#qM+r30Ix&h$
z at KI8H22tBY?>0Od-`-tOlb?iRvAli;)cXh;Ox(KoYUv4L8)owiuxCU}``|y_ca{l3
zgjKg`coMOxpVoQaoWTlafKCW+J*LL|hE7Dm3X?=l{|%LnU)hhE<eCuH7R-*d#l?0(
zOnBlChemcneub*|4V?))`!_W3J<!=e{`JO%{53+r>E)I{?njb=q;+eWXqA@&>3`mG
zw)Kyt$zyo^XbcZ?uVmsvfJLd4*o5-vZ!S<#CRE at CSSK*E$MuE}EC7I}5>x{6P}BY@
z7U^dLPHdwI^_ec)ZBmqfYq{s0TAaFnk)aUlT>{-5!!yTfB(YYoh2?-Fnqq-W%D|EJ
z2f$Kx--Pld_ohNV31d{L^Pj<!&kxTCwkR%@ehHW^A>l7<IkhXg%Iw)FIezf!GmLR+
zm--0wc!94gTtta`03CgTS at p*1Vk&EKq%T}2C&H=+H<!R~eHcMoVv^MlhX)7n$HIlV
z*HgE&+cYu at x(VvDd`qBHDmXUQU-NB)8j(q0&0QCLK%jfbac}9%GDh@$Y+NkPV`fA*
zvdm}eM1(ppg^ZBDED%iW=4G7w0G^q{4Bs!>J209^M1&lNIyga0T!gPGTm;n_>1wqz
z{TJ|F3f at KFO#^Qocq4#iy)dM>Tj$H1lgTd8N)S8gCJ82;8$WnzEH&jR5XRKpjK_6{
zKNo!;74`@U9=&S4JgQNLLJqXWp}{lQ9S3Y`Am?QVoV3kYz4G9i-n9S9^8iPn(IePN
z=CBwbM+YXX<l#W{l47S$ckT{O$7wK+C7in3tTY(@%VGslF+oZ&1L at 5jrF*L~2ZT`u
zxmVp4<NT^^fyk;2klhh{8D-Ep=fFd6j+#a9<{*ndO{w at s-|vcN7cQC+j>!`acp{az
zM$=rje8cFsgK3oT8OkG5_6t6PUMEF0yWPq&{&K5)Sgx061tE<1ML%7DPO8g;EyvC9
z`(drchig#(hi%vA8zYA5kBkXkFBA^{3%vWmdlq=F1MkyE#%MVRJ<03giM}AK=Jld9
zG4W}dkZ_+eW<s#l$tB^);x$Y1kUXf$q;SvJ67N0xi^X0 at sWwp{A~x}zH0$ET+Gv?D
zvIFDxO+vyKx1YY_6NkuyXNq~m4V6vsOg<y{gxCu@&q at 06FaHFJN7lQ|7sWWgqdZ6M
z at UAmky^-AJo!k5CKeq1|Ah(9k7EvL;qXIIb%$sNl6-aNdkohwAJQ#)s-3}%*r1N3e
zy{obpw?4nf6iu|0c_(|zEB!&f-fXa%S<=rD_UTVUGmvEGHTW1nx!>iLR`dt?JN-Rx
z`nk$-5Y7eRTjp at rhB)o>>|h#_1v9wZNc=*p<|1x(>A(6r;bYB!W|vL&;UmJz%ND>d
z!a5>jZsMYhu$r&52DR1oQ`qFg?v-JlHxl<3EPywhSI7iHg}z(kJLZ*VO19C(y$w_h
z={9YcM#-O}eDSGW%f19DtK8i7JOhHW9Z1DM>bQ)KikkZ5_7 at 8m7s<Z_0(4*G at l;i}
z<PBB!9Q6Ve at YP)E=yTM;xzg<C4~w6N3jwDJZxtcXmO<Gw>gVU^EV5{%p5?$1-e<5&
zT#J`+PNlq8Y4$$hz~PwVN|zz3L&PwQ+sjXD0ce)arm;)d-Q`bv75Z>#5p)}9)7cv~
z`dx06awJ%vhdvF&-*4j&4QAimJr<%Tan7866^c2%LVY?&Z&O3S4}qXocFW>q1CVxq
z^Mykgcg*51Be=Lh7R;DKQ-2lmr_|mbG=JC=wh4N3{A7UygN}|qIbm)mV*Vaufptr$
zm;2=D at Kd`!qTc+0I>&5vf|<;^dm^IJmf7oxtkM>%ts*}Oj$3OOwEI19kMdaups at D+
z99e0g$Le1#dj9eEY%f3uhs4b|&SG`^pbeK=@^94BgJ(>Vy&uQf)G$(@Uox;kT94V7
zzWf_XU$CYQ{Tp4mn1g$8xwwav*6+%7#65xyDi1h+tKORY_~J^}o2n6KtKhS0Kj}F2
zq}~`^x-26|QF%qpYKqsIzMj at H&-!yLV7K^}sO8>;2=@oUw~s!z|D%(3Yk2r9wWb&S
z*Z9YL-`)(9yf0E8(Myk05s8?MCKX2>Z6D~O at E53@H6qGr`=0*(dB8GL+h3p_WXr%^
zseOYC8j>(Q1w`JXXT7*{pxwCu7fFl7GU?rcd&flXZ2)O(0prKZuAJZlI3;gFXPQxB
zEG_Mej0^8u4%V!q6#`8v<{gP*Hoflpw0CK_5F_5Dae93%X~gvvf?gke8rgZdwDgQ9
z%~bi7KSor?3Gaus5ANM?^TiNd*7EeE%Q(^230y#6t&T4}xPUty_o^C+W=e1L)8B^u
z&EdH!uHe9kVYDY7L39Qzc~SvpZF&s}e8VJ&C4hs>CFUhtLDZ`}jtGcbyU4KvdsEU9
zZkw+Gg!Nj*sTy9Emgb218SntH+mPuD_fu5G=CeBp&_>D;3JAxg{M%o+3j{%64jhWT
z1~r9}Z6%m#3SdzfVi__2?Kcg`myQx_eU{%@sU2W{Y9&~&2PYRQ8ebPmu*d=uvjK_q
zXVjtT$u+4u^9gueAx*js6jEy`1m0Iux`7{lcq=Ath31lRQM3Vp_N}ZU<1s6EO=0d7
z;l<p~F<}$-wB^$~1NV9rx-g}KSl0a0z&-F5^kwVAk`x%L+i)OA(3q;Hdr#e>A|LxU
z!dYqJ<_KhUZ(=l_xG0BOA%N#JAgq8Ax^saP^u&RwmLvJp3OX%gi^@x0>vrSA7GHPw
zu4Hu1G-3Zh2NCCw_D(W}D|rH$>5PkW at HD<HbRw>K+|MXUJE~x-H~-A_W|t;+U=xP`
zpXMQZ(?-G;LsQo(Pj-paP$nYELZ0tR5Ny)@q7Q at m>Z3zK6!TGETE^o_Jsc|Cl7f!X
zQm9O3>f%rPc<JoKoMYx8RP>>7s!ovh$-~4t<CBV-m)j9`-^xew$_{w0=w{Wh4h(aK
zZi(i7fRIrbX&ry5wA5UXP at h%+3d;RKg625knC1 at VU9v<Up*nY{^w6w~b2s*EI=xTb
zqqfJ+pO893=PdfPq&1i=c<drmFgkeCr8J>L>##H!44aI&=@I~tH>hvp(eQ*u4KlnH
z4C&1>sHg1#FZF=J?GDW%h39^HT-to{LtR>5tX=^kZ8fQgtZ!+`s<q1>E?Yhy)cU3y
zv+`!W-||Fg`Qc&Oa-I+Xzk+=qGWN#=?GmIHOxYnY-utqk+njzT#1VLc?t!_te7erR
zRq9YC!i-}>;IV90$HcKfmUmP-_&7gJ*UNp$_JLcuGcj*%JjRBOVat1wsl+_YJH9x#
z1Rm&oZ<Jufb!4h^Vf*0b{**MMb9!6l at 8)anUVsh=;YsE~|4Aik?>!IVIoV$E+eAn_
zM<gtBxXX&#r<-iLSrL?6<BQBR40uT^``rOWnrvzY$oih}T<!@(KoYziT&UR{r+bUt
zK~V4q85nDN!79a!UDQuMG&!SV-%@kyXvA!c!MeMXBdx#2&FO$H(fh|{Z`}>JRTXz%
z+QYErJvahrz#LWmNIm55;gys1wz$xTtCJs@(zXu}q_E&XFci0i{#pkiDIh2iaDvlK
zC};p{olmb$;eTMxERoX$rqrn)8r56d(*ad1RI}ie@`=}l!=Bo_4i^Ia2y0e=@Am-r
z2^(Q}+lUgJ38yBcA#i$j8@$=WqTc at DZ9cB?8G3ng1*8v{jTX#*dT<CJvninK&zjHq
zp$&g4sRIX at cAI2FAW_Xav?(s=nbHAJESN99e>`D at c}p445ASe(Bp^!hm%3}<FcD4?
zEcO#z1cuWlzF2h-P&(0iZ@;st`^KC!YgJ4aYym^Y?tQ42ul92q>Lgd>>XV`{R}kp{
z9yjoCPt<PzQ~PZKQ>**L7Ir;glTrih?frwpkYxTEu|P1~UDLO(MRh2Y_lJk~?U#La
zzs}Y!#T*W80s at 3?g$y9Et0on&Oz!%0Q!0?-;Wt?6 at 7BEi_5t5Og1L9QbQcL07Kc9X
zo^{GaD`ZmImv#a$1zQs_M#6L)AufWRF%H~oP253`I;k74 at q~NVZnS+%P3z(Qb9V6r
znu+D(+?$~fi(G at b!CBCnh$FE-_A~y&k<{Hn+7RZ{-?>6n0vc$wyuih&)lDpDxYSLn
zp^grqzT>Qcn9pSU$~ym=MU-g(bs<eF0NLh&;W`6)pEoBkd)sd2mFj-l*AXvH`ya=V
zp=|@d67_uh^?^AkAR`llPtO&<`Zgd~@Z$0bs0|I{PTeE_v2UkEk)5 at zg6ZRq$p8HG
z)Z+$=@&o^UdBWb{GR$tZ9<i0xg`^IP0$xjb*yI4td!*=8$hCSwqhLP^HE+(h03s>V
zE&=pr9%g?O02tWYffF}DB^R|1V&7v7fDX>4Gv?zK=kI>$Q4Nc}?rBXzr}nMZrKS4P
z_si-Oc}fR915oBk#7&t;B at bili*J8X{uuX!szo3C>o3(KaRSNAgqm7Jz03nDHoy$2
z|N2Ycs6E1Ehd9BK2dV~)_Bf#E at _;;ql%i@@Zz@<4CL?<D_abAsrZ7(U5>vDOcy9UD
zI;&YPCcXVG0(p9j;dMg;ad@^K?<Myc!z1MAPA-B6fcK6FxqcJ)2FOvK2A)OWnFpSv
zicO(;Lo-7&R8KEc=7QY+R;bTkg^t+%t<dtn6}tIdq1lIpq3P56LNj_(Let6Vy&&*A
z2+Rx37@~tG6g(l|nFR`*9-7gV*gjZYfg|igLv5- at cWdZm)T((t3-X$ufL_``PEWWy
z5lP@<bk(KH4N5QM;7F!1ydr)iUz{O~h&F`r5_ZbzGJ6{={<q7Y4D2<Ae@{<%V1|<m
z;P@^e^UiDnfYkp9C?FhJ^q+v_UjHAU^WhIzm3$w#;hXAVYv>C{GKp<CqMz*iO~L^T
zxln9VzFz9gAQA`M;b~aqycqiTE*}5(HXstn?Go43R*H|N7!}gWIF8nYpoHTxG$#?W
zd+ickSIL9w4q#?g@@=8^-rj!-%2M`^?4<lhP*)Pn=e1whJ-XI*Up83gpi>4UAPWFj
zZ1s1pm{lnd?t24;J!el*%>>Vf*q&bryE5Uk<AL1#>lh6VMimO0UZfs>?U!hSbm!^U
zb#6U#HIjag;K^kQ_9aM%gF3z`!JbD7F*|cy7EYRhSB-?yM%ijs<zm0(fs1Lo6Ms?d
zo;Q?4RF=6DOn(fHe!+QTIH=&_%u6v|;yhu*_xC-2O|_4~>Q^39kT-nYW!uDT!aHUn
z=<~#?tT;qU=hbMP$?4P6_UGy6RBs}zZLse=j7d0Nj6+s!x}5aNi}eIZdBVbpiZ~Od
zffkBIQ4 at U2eT(FTDDBq<<7KKM&=?*QG*`I#Qh at 0Gje(Y4c}1AuQR(r%4W`2Bj%Z#y
zCk at ftRhMZbWwPYYT=vJ`$VU4jOi^|HJ+U~h#{m!M4pmcPQBc+)OIeMDzl1NRF1<mW
zNPPsT8^?y$=k at oxx#q=k;O at y^3uM*EPJsxWAY>K8%YYM{q#S$U8cyhPX#?ixtV8x|
ze)aWR65TTwR7VJlm2TyTjH|#h)K}&W4;3KO{rA2u-!~-R at x9)#kTKSZCu}jSVDMw4
zr5w&M_-AXF+9tEv2bpi+TjA at 9aX4VaO?ziSMEjt8vo0DCVGIy*D_PyF4~b208NNT%
ztj<%+&*nD*B1|{@z;Gl_r8qahtuK}2Xk=fOUcTkGqv7z~tvMKy9EmYhMeLHktfS%3
znphdXe=MNElZgnxmOEA>sbkk%-q&bh<N7k6Er9mepcng+MeL2s+i_dX?lM2KA{tlC
zDl9@|4F+b76SYD{Si>7FK2Es9iup3LH}QSgWT-v|_uAkNcIUk6H)T6V;{cZf)xH-V
zPX)ZfE9H)U#^G5#8z6a<K{uuq(adYdM-1XTdaTJ1kM!mA<eI{%(=<j{_-uB!?B_dk
zkA?yE%1%}{vmluPuw1X14lo<>Sw)NL^U|dO**8S$Aa-8srHdYtgH|4eW(C2F0xbIB
ziBu?^;q3h at QOS30jt4azh~uoCsEdNN-YXP7C2lq_q|UMy^Y-TkI>U=J^DOZKnK~3S
z{0rGccK66o%yx_c-p{4gP(iL?#weK|)w+qEswjeaM)loHFJu!(RZ$m5y3`OiEem0)
zk7AQ11hm<$(66-)bC+Pk-vn0dl3iA+@;`5W_^`D`LSp(fJ!FX8q^sKpkLUe_0<OR<
z1j_yVLT2v;PHJBsc-DYtH78XtXTDzLBP$KwhG>K1ki7KZv=)K~*pfLvQ328HjixhA
z7+$kNaBA0Y4atkasy$u8G{L>+;}RyI(r;QFq%?7A`ykhLg$#FSrnxU5+XsJaSRrWT
zNwIV=THEOo+bfR+FP7f~aUk=lU4CClw at I*czW=w)K#VLON#+2VDGCZ#sdn^|Q}<*I
ztLI_-)e4N0S>%E3OB3c2jh0Guo3to|ArNy*V4*fcD+Fxy`sY$ZlkMtw%wC23L=7i^
zsloj&nih5p at UypZyYq{TvvU)1rt_L;zt7{UU)U6-ZlSxgw}^B&B4&4WX;Uz9N!PFQ
z2|J9LjFx#d-yJaadA6vgIIR#6)ly7WZ=6Tvql_}z5^5M_IFVnqeAx2ZcFub_PJzgu
zj)C<2TXThZ*LpG at bwoF6&h%TgT}Q4*+HV9XG*=jORV*Sr53Z4R2$`wVXO|E+a3rY%
z!9wlD?+K=J^@1md_8-r0e_`|GoM|AQY1>KmMDj3h$R(Li(sUpZG$Xb#26rZL8?yq$
z-U<+V((HEh3?LTtNL2;Y4(Q9*D at Kt3AOIZybU6Od+r#u)7h5>~sTm<nKu#@TGSW6Z
z<aGVo94u^!`loIT!HGi(=E1uY)8%kG1~Nxp+qeHw|G9mC1MSxE3o<zR6o2c`IKu$j
z(GZDn3 at 07OFwWAMRUFQnh1G-KHBdiejPWF%BUnBYaHAP;zJhm_akj5Wc&^m}qs!{^
z;)ja^>E*WoKCiZDh1h?Lc^q~(%4H5*B;P9zdHIDvq+FaptEXjbwC$ALiR2+%*!K6Q
z&EBQG5r-^ZYTx$qiaS$#8y6DYm`xRmFrk_10ULVx&8rwjCK)l5C>6^(-S84ZgqPF@
z;w9Q2CD^H5ooA&<fIBs+Dfi%jE6xQ?7(kT?+BKMf-CZ%F^p@|>OhUXOU6CnV-|JLg
zS{zCANoZj4iky;HoJcy^V8IT!u*I+I&3rI$sn+y^eKMWexu8KD8))A1U*x=`ft-2P
zUWiJ+t*8lV1q-}-E&>)J<isX>TRTjpS5B7i2b at LZlnh4V^rdK?(&y->L-k_Y#s0I)
zwbNRJO5+gL+Hu-eSz}`p?9h*9-HJfocX0i*!G)`bg#t+_rVo8R$8-z`HGM*~{*SIf
zsFl>`cbqi!UJ)%-leF;fL(l&h$wxw(w{fhe84#pkWq(?4m<}i8XM#Wcl3gy{3VxXM
z_J^e~zv7Y4IV9{|{(^qIS8mSlQlHSjOv?GM{DtQHF{AmleWBvsXmft7o=oVUE4}ew
zKb$fDFz?+D)uG(pC><`P6`D-PLPMZ_?*GWYWHi5<#I at Mm14#%rq`|%WCh63%*Fd+w
z!o7PlbU5gC*z2~i*GZ$t>@T$ETZCoCx2<tc%pd)^H$oR3o6;Z#^S~*|0XYbOO@{Z)
z{|>-y4ezsOGiKK=9^?LNWU`f5=@4(5l_;T+iJ;<6{kB=RmLLTg$osMPaF5sqP>FT8
z$7m&FOd*NB5~i%Pi|2i52J+tj0HS>dBqg>JpBQ@%03q;+e*^NLFeLv2hW$GjOJg_U
zp0Sqz3?c5>n?e2`KxF>|NWwcHYhp|BNwHf25N~|a|5=fM{{bWL9gM=*>$nd=mNuir
z-4%i%4FJZ)ef~dSinqXm{s*u~3$VrB=k!=G!0dVtwE0fgVDI}n9PlqrKirYs7{&Z%
zi1`T?yiq%4JYK3U3jco0$L*wY>d{Y`h^|EinDfG863n-QZwIE69jM{l$|R1p6GSN4
zqJw6f-~pVNql<ySl~2ge-vVc9opE1K at tC(2XRZYmpZQ#3tNAB*0{c;DIY8+uVY03k
zil8B<^|hn+ZU#udQSGa~k9A?|rw#at$|kse6MS>X7<~KnuweolT6lo^`{2!h+6VBq
zxb;Nt##6igv4!Ql*m3#ILPVC~qF!haR8+mQTP>&%y_&#)eyivG>|$H~$iiv9z1kxp
zm<>*A at -}J(o+P`Z%3c-l>4NIP3#V0Ls2ZZ6Wo(I*AVO17jv&Yj;m1qk$`?<Tl^o&-
zyMoh^)YrUK)7=)<v=}EZ&>I=E_iJwqVZWnd=YmNo3y$Byu$W>F&uz}sl2a+VsuqW3
zNR|V}s5}NFmz#m~waZNSn)ssFtPZ-3^wNM|C3(YTT-_vj=2|DvB_(2e?T;7(CP?jF
z=oZBoyYtX$OJ$IZ2kHN|&6sy3WjP7p)@ISQFEK`yz8}ry;TSZ~=m4f|#r)%`y>ujk
zsKp%r>j+@?UXfG3cH0DdDP!r3Ph5A{kXa7Mm at In?)gS+83v@@DWe>wP_WM4u at bcE5
zBf{M)_30NuI%vrln?Lzzh}o*Liaxr_eQ|^JKb|`B8NrP{n3RHPKK$N{BXOf9#LL|!
zE3)~?yqy=zguXjDe60jQ1$%k5Gjb7<9Ikmb_%KPfaj%xtz5ZsvyZlqAU3j*QPGeVI
zTvhrdS-jJbozjFt&4*9l>*^v`dzAV%a%`t0aS`HfV$Dl0H7ixdE*Arll&HbMda%l?
zpiZBra8MiqOzhR*bXv5O$8pu>51}UO2E^51WGMZ{Z1MR_7b4z1hM8r5FQ9^2#bL}I
z1J~^{&#3bp#zZta8>3Tya2OltorkEE_KYQTqLpg5XM~_{_A3uj94 at 0}$`>|o+7^NN
z0jgRx?4V{1y{em+P!vWJ={cOvmOU*&JF&6vd+9EitfjUeW>I6tF(!|XV|pW}G at Kz@
z&2=NAr(%1*+t>E}si5EuMb!J_7*kl?(u{MV8OR3qC2Oj597DjgHVo|VP{ZIq#xdTb
zlZ}*V9OGD^l4V<nhy&@dKGVt<_}1`kFRm{=vM)`tDErhMyS~ezv2Td#7c)u)Wfr7g
zIwN}l^#hMFfu4Pb`klv^7?Qn<?{;yu^_i)){myL|?OPvrmfW|7!@sDtK65hb;DUrk
zIvrv}f`N|oeekju!m*4v74N|C8dF^fuNF`n92i<?FMd>gb1z at m0#ARSc1Qg>eVVL(
zcy_K+DBHJ)V~ejUUsK6bI~Tg+C~>`EJQNx>=edl5W83|z>&4qVtIT;6 at O*48Cx1)>
z;%ngBE=Vh11CLo!%SLvNN-Q}^ApF_L&NPsiYc?m$z=cU#1bG$Svs}8Z3^C2XY??tK
zOPKC$XVQ>dcoZeIw-o%)$^9vaBL!ym6Gv3Xd9_)$8^*`_y709M%q~-?U}Yk7R%LC&
zc<Q<%BaBRix>ok0Ajf`IroDny=_v3sy%2b3+NZJ1HJ6vK1U2_73?DJKyxTNlmwQ{_
zr at qnkqOKGE3tDx)p9xx+0}0JuPFjn^UifQPJZ at HHVA;EjKc-Gu^>Ti{8|;yKP+qdu
z#Zc*JFIo%ABsH9d8Jg?%qNUkpV19)c05Ey^^36O;i&$4(>>-NR1<g*&Nm4UGx>dbx
zPmXU9-xg0R*MQ0~3+X`cKL3kicR`dqUlgY(I22C<uvmp316bMRnPl+}+u)Nb4jlR5
zMiqBogJlkj!|C?1nltejys=v8WZ~Q?A)g_f!P#z6Py_VHL-|#lzG|xk)9enNK9zgB
zpKzVvp^d`W`m6M^ghoHwEXMeQ6<YPU;%=&d&+tk){TfL0UZ!AQzn?j0TV#wt53<rS
z|M$ZCpAG^Ukqu;>1ukw!{%n|muPe__Xk^h&E<2w7eAnrhqyNs?FE|oIsmDFIefqnj
zeDQ0uO!+6DVKD16RX8)ec#uXlDu(3E!aXhI<I)os3G07Q7o8d5r0eMFkds)51V_$6
zyEQWIXdKJH=LFq3J*aI&gwGNKx%EGtegmk=^N0PX2ie_cJ3&74Y6FjnxjQ`CA%=Dy
z9@)uquw_cOi4kqF+WF1O>K8F%UFb?TT*R&OXqVOf5*J at AD1rCzcKt|3e;$+jNv7F7
zf*waA71&t*%23e|kU=;5xcJ*12-<nBsW!s(mQX<4T82pNIY`6R=mR0a+|S)=R&liE
z6Qxy%)`n!)4b;qbJx8)N-{S}n{-Lf++Hil at V7F!@NW;N}b<O&8_1x+g0ne;AabHGP
zcAL(QO(Abz-rO7B6W??WWHg<%g_rnb^=H?^i+bv*Djk0fhDk4B-tg`eab1d?-vBUM
z^M<K(T_ID}NHO;X)vpfjNiCy$t14jLu0Vabz$&!_=0CbrpBDA8j<qjczZ?h<G~8hW
z^VGmcRpk$0 at 1|DJ(cB6Wcg1L3v-IJqfwEHY)26pS`N5x>_B<O@@|tMzL5h!$DXZVC
zu@#;>vob2KP>#kAC&Jr8*kppaqLo-Q;9uz|V*p7ENMtkOG?;ta=r%|BxgoizrVJtM
z%KRGQO!%l7$tq3*7FACpeJnPMZKu68cA(QPvlu(L6{idHj0ma7=BKwsc3||n1A2LE
zBPj49W_8Nt+p5<o6TV99z-UsQ5G8mPHKr=xg3j`N#bHgtuGY#H1Ys2~wk4Po#)!8w
zm)hU+s2shGm0ra0S&;!MlS^7^Gm+!omW3dUY`%Nj+X~Hs6&l{w&y-fSh~CBp!Z?#d
zzb%Yw6Q3J=XVxHaz|YlydG<}zEoFC?4nx}k>rsT$hu6-2mI!qb;s>vegSrTCeXbaD
z>$AjoZSfr&EyZwSC}w#PcYWQ-8;G!Bc-#SPBPIy30s{CgfmdWBVx_4 at _{4D`M|%sr
zr-S!AkVcu)IGSo|qZ?yA&5IgxV>o->5OcJ(0#EI9%s#0Ru?BBv at McGHFuDe&H3~eb
z;0X*FZ6>vD0>d>_?k#+rTZ_B*E;kQcK9p^{$DaMRo-{_3`JH<+Tnu=Z25cgsY#&_G
z8S*%|9<!^yT&hzFFuS at Qs(k{(7Zg1(f#E)GQEu%DMy7$w%Hi2gtGu}s<Frvz1dIf~
z48Z>0bG)*4wO&r>5NF~?oO$X)w7K1yt0$bAZ1l_ZnZv8A2d`YDz7R0RTQ|TBuN;zU
z6EHHTbZcHtCN?$MjMh<~wR5MXj^z2SNlP>8`Tr=17Cqk>S%l2cG*BN18BW%|*ES0}
zO7+wRA;Sxm)vYU}_6r#^Y0cDqArSai<|eMNF<0|$$i2#>IOO<O{j^=NOE%p)u(>?b
zflFW5uwr6nV+!kJT2ESKjf`!ooQr5HNjC=`VrKWWJjCW1uVKQz^d7=AU1AeO>Fl9V
zB+%DB62Qm4$Eqrk)?<uTC#khcOg|v2e}X$Z*(26~LmRqJPN8QS*1$q+7zPfqFlkBg
zttaX)7dA+&q6}}~mWM}W5 at z-3!uB_ZPOGNDTht$|mW<Klx}cecb at a-lxk!Fv49#X<
z8q at eB`XCVZ=SDZO=rb~OX~9W>^q2Ex$k6>G^pK--5uSl$FKob(L{M?qA#mp}ilmcQ
zSdlpbGJ;)_%)^BhQ;WifoztG>D=@Dr6c;4T!#ECw7z3&o!L6#j_uSbHFBA3Jn-XTG
zVJV$^IdMPyp6iWNlyq at O;&?KnB#oP!`b at na${5M0J<{r}+7fe1$R?&sG3SD2XZE2t
zKa?LlE_bGJM5O*wL&G_b<7u<*fB1A0r)x0lD4mvNkJ9M{<I5J6azr1gkEh4-I3nGp
z1`6gI5uT7A1++2Cp3W*8IT3a~yeus0(~)iE!lJNzY|pu1Hx4I<;&4dqxQa{fV`J#a
z3FX6cVK`w^>BEDOCTET)Pkk_A at 5|1QgCkl<AP;<tD(mLB2h&2|3oatrW6yPetaP2j
z4gQvc{HZ>eT>tc7)`!)s^6TWmg<HZ7rj)HXxcIaadvmLUkM*jWE7*Alc6qYiA8Y at u
zqT<i&A?&*)^7!_&qY9xb!rbIm<{5jr+)7c*Gb}cq9su})Wf?g1Ll3%Mfp6sO4U%LV
zjc*1`ACUef505I69YQ6Q<*S%l=py%aAoAzSK>A|N-XGlVbPh%v0+G)I;QM~Vpwe5s
z$7UYlOz-~iiO3biT~8f!yV)@4m1K+9EaHexb|CL<)Nn*|w5syTjyR;=PgT;&^T!mN
zsi3l<%<q;QRmkezgege}RX|oFY7^qg;bb}aaYF(mw2-|V&T1#sjF61CaSv6p@;yU}
z#^C?Q+M5S7ajgy9XF?`S2uOec0YSpPxDZ(sktOT_MRs=tMFgTK3c<R>0R_Yb5G4#+
z*SarN+lo}H7MJ#-Vzt(#+ETY#DQevSBeHzY$pqWmd++<+?|Z*L4!^T6&w0+7=M0${
zNmKireNE)>RjA-JBA+FDdn-%ZL=nT0u;QkcdIcgR4%`UWzo*`u-dUW4!g);E#dpD7
z!NX^loUVKRQ)hUQ94=QbnLdW-%azEORx$o&U+TyD9WK}#<9F0w^d&EL)Zqnt$NIhU
z*Z(pqHsEmf-f?~}{W)Jo#s(&tbGImc*ppSV3Xy`fa!Rl^L27$x at i|v>F(*(R$7$Pw
zQ0E4XXR`=Q=)^TLh}UD|bZKT9x9A~9cSH;qNFj~Zhe&D91=n(=dW8cm(q&q&G1gTk
z{E%jzAe`@nguUwxsBxcy(Hka7QVw6?fLW7{5<1Pca?-4Ah^LJ1HtJ*TZB)Z%A#@~E
zAfrQU_)<qnQdG$b2V2orL7&zBrZdI#;~!3^9}lUxAxDv=z13pUfIF%tj)%WM^Ue^B
zQe9);0cKkJ*vq-Tc(gobj_&o5GAmX6EX(YVU;|y5AerwZ5qEAt?wuYeW7`AQlHL$u
zdYb8s3!6_QNX-pzYm}i9w_dZY`uLg9z+$^$xIV9Zy>ar8{`XOuN%^XO$R$#5=;5w4
z4)>ovjNGb_g$5RH8_ at gCzb)7#hEvgs|3ilxOOS#j+ at L|fo){*`g>*>9qq^_$Fl_cM
zA+bzvcj(n*Ln5#`4{dq;kNSf>YeO_k>tA9U7QbUt`PmwWeo4g5+*Fdy9b}~<W86jz
z=ccDNfBnYnE`E>B3J2zx3+YH?Fh9DGLt^l6{de~1S8ZZ?H)3nNsyCIG-M)<KrqY{i
z)ONwao8OJgy(uRYr5dBQH*#X838GRG;cE4(2}&uo(;lXK!-8Vg!MV<r3=ZZcppM<A
zs0j56<haYOGW7Av!`ffuG6Xl!Tw~V%tK8F<*k9`Y)Uk4p?iagyIE`s`B_-TP0rvNq
zm#(BeAz at 72$Ot-Guyz^3yS|}&n>_CE-Ue)h;CBeOEs;wCOXQT!?-p1pC;sB+V}IO*
zy$$$Tfe-N|a>Ea0Njdq!&y^c#^Z%;N&-pVCEjRc}V|srnAOQcA1)+M=0>6jCAs_r4
z$6wijt17Im6fQEi_TMN;pm~?Q&hH#}qu(#rQ(fz_hs8S_E^)><F7 at i-ZvsUh(z#yd
z`6#byT|8PLOYB>lD;~6TV&eO?qZ$<Mq=+CEGqeX81M_*wgFL{wUd$8 at CI=0=ep;h{
zBK`P`ozsuc^mRjMwneb%>oF}MRu{7Lu2(Rh4<<KS`j+SRjn7<1aqEPVpYTNDFQ!%T
zm>EOJaU9pj%;!VM=|jgjsR`*tbFlH(b=l*efJWPH^I_v+C_Kf at 7V`7&MkaWyR%|nB
zkPRj62x1D8K8zGa%dG-F%IpzwGVgFXvtMtsToAT=PWJ{AjU92T=lz?u1&X6x#(9o2
zXXb(Rvndq8b|5!YZRoPktmbl58{~$W-><f*=%kEXnbX5aTcV5kX&7luuax;M4eN4$
zJufuBP}nx*#Cw at r!Fdp9N|${bU+NdQ_v?$93E|xGZhQ}Fd2V0|<?JD(o2ROmAuP~>
z^YOyYdeDFnHr=UO3|qS{PCJ>LInMPfOmTe*ZCfc4rO3-oSp#_*<c2gD)RuRDT)FyS
z=)cSCCBg61#TozSeE(eO|DKo42OSLV&mhDZ41c)#hRw9i$lzyo6pkhM4Wn#DUipG_
zoNp?Vqy2rZ!iDjYlFl at p8x_Uxi8>k at kw_VwSp2jCEF%14C{Cst=1U#IO$nvAlcW5<
z+&oy8e*5M&@4#d#IB?bTpQ?mXV^yuxZW}qKEMfsQ;KbsCXWE*PoytOpuH0SxJO0Sj
z=1*aLOxxz&IkhNCTqrm4h+p6Lqg9l9 at At^A6HXnO^#jD5%=*>bsCtU87`M%v`Bh3z
zbl7yJcVnPB%k0u_7fI*zV>8lhV>nBOdULiO=-tA`Gt-8XZCumZS<;5FUZfwvlP?M=
zXscpYdy_7luF8hby~%faL at 9G<B<Vn$WUh`RC4>?4awHi=>|y-;$b2GzIpjy$(xiqj
z%s{d^H@%P&P9739l03uydaYkLRA+Y%{wAxoLX?71JCbW!HlDnU{mPm<e1)xsP#nr7
z at xSCxfpc3oNZf2Hf3Ql3e$4a at K~|)g8)c3t$WJNFb1A&G at N2vw9}nlF`!k*ktsU!M
z+W+OWRPJmp*e61;PfRu$<BYz;kwLSy{1qHQoUClq{R$PwLd2wIcw|G7U-KaOE8l7g
zr$2}&h4i!O5|!l~C-L_h`xoOA9Og&M{FJo`ocTFYVT;qiGIKB^&N;v}(Z`!M?KqZT
zIzLAyQ9*|BW%07YF~??_S5tac-{(5vM=tP7r>lCcxwsP**x<bd73RpOj?HykY at b$$
zOpuvnI)rgPNc&DER_3P&RW)Khe%|)=^xi0QUlfE#E~pmk!PaJ}7$`#pW4k2tZqWEw
z5s}&R`5JyRNB%MbA*q)cPiA!^58V at gt~uGW@~cyI8LbDdz3GXox7!t0YPSo&t;4CF
z<9 at nSChYN$G&R`{;kW6P+aC;tV{!;Lap at 0mD9kL12_y~?RSBnv%$o`#vtD76d79!j
zTT|cvgA%V(wrtYF?^JtDJ7^1#s-i>G!N}x{c0~Zy%%i at KLL5YroRzqtq6eZ3)jgR|
zWgNgi7#g0wc1C>u($D4?#p%VB52 at W|smK5+nFJ7|nuF%$Xo#iaubZCx3Z<JiJ^rcL
zlsXII9%7Rxb(`NIq?A|YAh9`?R4}Cow(NFOmJSjN)OB3vQVw!-=9J-HwS~hKB_dwB
zP~D~dIX+exX3l6*MT9eLqsbwh;0i_ at KsuXwXq>*RpV<;EDLJxp!_i2vH?x`e0CGE5
z at Ytb?X%8U3CtR3s1IeMV54Q)B2 at r}5B8Qqx at iievIQs-4m1UQG+M|_wn35oJB at x9K
z29wi?*oL{mq!r;<YA{jgr<rv9tsp0fU$`8FDQhQkoz)WjbylulMjg>s#~hHsdGrc%
zT}HY?@opI at wRlpN(B2}x_O9bWWc<Q)2}q^xBiq86&=4{fvaAb%{X3jF90I+GstqNb
zZNs%c=#278Lh)4zlw{ucW*;mBr{R4F7YikQ34-}36b_V8%+XNN%506@>d5*K{%f{=
zX<o+DsD_`RCL%Q|#s- at Q&ie^OST8 at cRl&X#*z9z?u*0Xze&>)j7<rL}Vzr#CS|{fR
zXXqESb%GX+fJ=WUo3?c0$+oI>2}Z}gBD0^}<Hi>}iqB|>S>)6<ikTKp4ks#^b>ZY7
z?#k7QCCumHWJ^L)Z20{>s_J;8lyupL?(N-zFP$gu_Elg*EH?My?r8HaH-T-!0L3tD
z-g*gx`lM(?OfI#=a)2IQ6l*{3x_+_l{8OAiBJ-0y%>4**G at TS1oxb<VhIDcJL=6X9
zz_HQW_gtw?7b`DC&PaVsm#S7xvBK-9qXtZiYPntRmfU8A%QjaS1ZV5+ot5tgP%uc1
z9@`Cv<5eaa?)aaBUO(r9jk!^7hu1YuOL)HikTi^+Gc1%`&{h^hU7o!BjWmPi=UlEU
zde8Rh;Vx+gKPTa_utFE!17Ss!n($)74#%|V&g(Yo#;_NUYv<R!TdI1+Hlfarm49|r
z%nMY<OO%pa>X+ZO66gF<`lu4Dhqd?tDYmnp>|JDrg|;Qte)e04gwd~Ar+1kd5=Gi4
z;S2Y at E_=K#s<!m1S39!rd->={u}pOVX5om*5Tzu`d-as<iGlIEul}+0Y3%c48C5u;
zZAxr-W0^uY;}2gSO7Pqw9u<BSnu!euW_uKQCuzjkjNBACI%*x<NLOk&_y=6e#u^xP
zjwy;fP?7r`{(;r)Pl`jn-tPC{6H0PLB@|Nm>a9kdt}Q99h#CN81c9p_UaZQ5OJ|1y
zbvn1CFwJsu37I4)g3gbPCacJ#HJ^d^el!_OPY!+Hx;8dFy`d+f+|BM4Wgkf0Z>`Fl
zLq>kwXgE_{$jP|5c9(C83DUF7C9SR{7)Ot{^EJ4o)1j-m<cK%BWWF7gpt)P`WoAb-
zktrO&F&H0jcY3n*dV^cE?S&s3-|#wCe&VYxB7-k>Nv77$ac=st at x8(LTr#?rPB0y`
zcj&LYxBn=WUu%3{@gw(r=24zO=DKhqvs%x>CMLnCETcRuvw8(#&?uyQZ|0KPw{udG
zrd(05{_5?&WxkcQM&p<2-<>WxWWyKkJv~me&SsUN`l`2ZP3o1kC8uqKJ6pb4yX&-}
zXuI- at as!`7`|^G7AXAq*<WoRTrY!bYHSX+T7Pm!ArbK%~ufJWr6CZtg`LW^Y4Le}p
zad4G1&a0MMscMCyIQtc4am6btb*t()T<^r+&)oi%Z#`x3eeU*?_|e`qM>GcA)_qM&
zt@@e*z%3Q`HK~BjLUdP}1WHunc-be3%6|tsG)u+AOG_KSGK?@mk|oX>GJ4MGlJ6{F
zefe7J;m?Eg;0jMrq+pBoGp6_&II?YvOnCY`*P_^*^m?z1lv#1g1g_C5DSCSWFXsfJ
zV~Z5|Y#0E?VW~vLAT(k>V=$JSL~2`Rvd5B3If9+cZ)3^f=7(Wgh^lHh3KZ74M>{u`
zHGTq$I3$*wYMOW{=*>(M$|<RcLkzIU(yQ3UY>FivNhdG2kB%_sV#y3*DC07YbflH_
zJ(s|0!|$PwvtM7D_#G4+E`fqEgln;olXy4i4P7h|--ES+|I?7aPPZSPh!>8G1REZ|
zCF*{+Oe at oz8TCEY@k0BTt|hUVk_Lb8#vId6mU$U*B~88}O8<4JMuCUl{(g*`&B|2!
zry at CND5!{Wlj=!W1^;mzIn~hYgzoM7yRE)tWO1Z;EcW%kogFvasn=!yJ}N$=<&cP3
z{t-U!#tR!4k9hl+#*Fb~J`AaEH?HqhbDZaWm~>`W9O=O6t6-YqNN at ThK}mwdhL6fd
z?8mD@>crptTPSRG4Y+SJ++Yf;v-R=s1Wjv~c|ER>p@>_E6K#X@%7on~1F4Ifv&;lv
z7}#%how`S<aB(w#>{@=gPVe%TeFKLs(svO~tEn3lEjmJ3Z3!fjhAW6(55G{$8p;v>
z#_*SU^z}EFmaUek*2|G`R^K1m$iWWx1J&t#m4#-Ib2aj63r-g*8#K0pAHM!!k);c=
ztnoHpby5~S^&8i<xS_86qUh)$Xjhigx$P(J(v=@O2JH?u%8}mP{bUCS8?`SHbMKZu
zS%)8Q#j+5<*4Z*l(uCW(qW5O+CWcBNb7(0yq~pi<&=z5Kt8Wo9cwr$&PZYg=_+M<R
z^X2HoUAwBC^yKXJWN&HvNN=x#+Zz4Lva^qdC4>J4<!rpSx4GiBd`RRMjob=`a at PK9
zE=I%0W{37^Kv)g)jwMLOOSuW{ns`ZR<7lq&lfLGP8}X8&ZKI7OC+-GU*wte@#jeB{
zC at A$ts+-m;+)4)VOqVb7VuXpL1qW3zZi%D~ZFc*GWe=G|Zkdw!-hQe#TB!I_Io?Ke
z*#~NG1Er&2SZER1lKQqS2|^pbcvt(PcvQ449d&Dj{ISkqWw%@+W%Hd3?D6FxB6j=n
zTaV+ at 3&VC4q*bO5Z$FtJ9WTY{>EgiS`!A4lw%6kwAR>AO-SBR{HZgC!R20(jQ%Sn`
z#`fROk&$_jc~qc%cDvL}k|e$%X}h&IK3&<ckvFaRQq8n_TfVlTi0uu5HwK9^I$TR4
z=4@~H^wz`yF8M{WK+yp07ZYMk at fQ<<0<h)VZ57-kP^TJg%^a2}_#(<g;C&KgO52sV
zg8k&G7L)jK$%m`#%CCZu at iU*(Exk=s*LOXd7oQ+pC<KGEY6uvXvv`|2rxLSo#!zOr
zURYv-^k<v&OW3LiRLk9-DEh!;(&@B6nDM^e4($w-g}Pc`4_#BMeKb=NQH)GgtK^ax
zdN<ewTq$4mg<P_wsU<A%#(<GAmJ&XGePD`+8Y<W*CSVF|bDbr~uBLaRG`uk(He6O}
z^ZaA;7qxjpWpy3jrdMNZb4 at I?`9&ju1IPgKGb9-uF?mPD%^c?`DU;Q6McPk3!`UIh
zG-0v~soq+_Sz)~PtUx<j;@6wA-*AwIabyWxv^LY6KxRLf5ZDe_9U7FA>Kt}Pn!!ys
zHutPl2qn)J`6ZzCji)G=3?jX19UUyN+Q^OktjM}Tn7~Qcg6~JSaj)*?RQ84)n`vck
zWf)~rj at s^O3?)E`x(JEC$)zeRpfh3_jh32O>CSEG;O{?j{k5kB+MW_0I;wqa!=%}|
z{B?y0j!~;)I98=~+$diJ`BKD6CRfsbuFJg%=?CC2V_p8Rt!<7(Qa=PuI^<O<8NLc-
zlKZ$qdnPi4bfDYX>I|)_O at snQ!`0F<S7KESZPy3kwuNIX**bG?z=^9KPH4E!LFEsv
z%uSHJr4 at gsI+??sBjnV<p6;;H2Sqbg6<|m>*p;1*Uf*~BWD-&MGkYNFmQrMAOi@%*
z%~Gl=p&Y^Wm*(=F8~3kiF|0fNjbV-UrO=z?F7lj^j}%)ph9#NYFGpn9r2FFcUx1yA
ze}`lCobu>&DpD+;(Gu#k2cex&lhZpyK}M0Mi}YPiA%n=%1Q$Q>ow!MOt>Q+O-mjl&
z_$8T6b$_pCgBsUE>nd_VXvO`=cw49VLmdfh4^?Iqc`&+I_MreA=c-EN{MR8ZA^2R-
z>BL>oJ^VDmH>W&QH at b$h8~kr0`t!(h0>^faX$cJ!$?dh}&r*(xa{nIVU7}se>)rg!
z?Z({Kbb3oj;GM-6pUghup}K>=FI()QS}*lf9g_yDd=D8$%%aQ{CX!~{iO3a2#@dRu
z5Oyj{<f-x{f;)3Kah=&Mp*!c`Uo07)uSn5#_F$IT$Y5yPNJ9ixun*+C-Wjy`*U#WY
zXYS(uJfmoOnm%V29c&cjeVKFql{WEokRZ(|w5&&((NsBha`sdg`=-P);kDN at O45^r
z2T`{|Zf^&Lpp4`)XN9)R%oB1HXriq!{h=_UxiW8Z_RlW%t at 4W@AI0tDGnO^NQA^bL
z1^anUDh2Yp=NwvkD)0JxgG(*ay;d2t_VchmIypXF!>fFVZ(In-a>+akR)nUtS-gYx
zK?>g=O2aB{g90Xeh?i*N50;MU#h(ZS5g&BGR(!Fs?ay}aRhG|4M<?UTV1AaK=_|@%
z$B)jh6_n$5mEYJs#a}VN4`#9L(EW22B>Q&_L45LmXh{G6O+$fddt+6Ny|LXl$+gPc
zAL`CNNb4GX)Umdv;~JY#^4O}pztPt#@JEx2#pB!r%iA0&gEo_lXSfpwnw)zV*+ZjW
z6P_v&=)v at s(5{1HmCIMlDS?q3t^TB2*36;K^$6{snILq`>V^q&v=9%#)VB~DSY0y_
z##+=F(%3W4ViOPF;E1X3a?2Jd{9VP8)`~UQB7({)mQiV8KQXIpH*w?kN?Ix`yoC#A
zX at 7cA`8w<vy?x^P_ko69o%pHy7n9cabsy6hMAjD>_J2C~#NvmQA0Mz=J42Y>%5kO3
z3PLH-k&VyqLHrSrbf&Jdv_pZ_rwI-jy8B666B at WF?GT5ITkEB7SG;}E^}aPzbZ;WJ
zLB^`ja_ugP0tord(}v1O%0W4cayhXnc<qz}X_W$Xf~4^L+Hky!SMj>+`(Gl?$S0Fd
zL4BTnS?|TyH28<%zBe7EZ3fSS%WVVr7jFg{Hr-fiWK-05C%dKVk3Ca^mq&|Eapfte
z$>lS-83ji)f;I!@z+`f;>t8C>H5T#r#;$+-<)w!1$>e;(^Dob%v+}Ugn|FH|a{7$p
zz96w^VwKRE)Bkf9?GI-*PbF>n9||$&rjj8>+Emlsx*Wn(($?``s$E7Y<kq%MrBJOs
znyRYaHjs%=B`u8xs)#P9DVyvnwPg!ZNk{#Gs^TuEwl~byRC1*FqoN#8sOHP(WZz>=
z#XsW2AKW>>JWnO9BjTdX1x7YCN!%8zjHZg4Qwi5i8O;~(^u6Dd=l|t^?ynzJi15CT
zKWt)cgl)69tZmP*`Ncj~gx}(@kjIRjMy3+Q%z<g-sK7C{DcIOwhTLkl8bvaMu{48|
z-bQMS;PRX25=w+lBGE1^OVAt`Rw^;uav5?qaS`@TZyCc#(nwo^#{{L3Lwu^f#!n~X
z2Yg<oi)sprJ(0>%?pC$V6DcOjoeqYSgy3|Q3=E+y6d8~N)MK`$k#@!_Wq#e|l(Q;4
zK>HsWra6tY@`T8a4Q!bzq1+8WT(ruhO}_cY{Z{;50I+e~wa<t<l%xl5?h0W<>EuWn
zlGA_3?-B?kyWA_T;pfkvCgNX%g&)({;XB~ntpU_)=n8HJ@@gQjJ<f~2KDab~{riX)
za>-I`8~-48({h7`uc!ul4ZlQYdP#b;ZEmn?tt41A-pVv`Ly;S<v!kd)RwbNc7g+5T
zB+ at n#Jtr7{O}I)JK%JZVG%>LFjMYvB+jpE1f1TLicR8x4v6C>}>139b6*k#YL`a~0
z#fLfp6~Jk+FbpKTbUHbZ7{k;}C*4O*vF4X;u`7f5EW>>%dsq~bvVby%wQc-d<ZW7z
zkDJ*3yJ}qk)wZk4{mjg^MXMh?O=L9FNmpCreN(UZRp~{h7wEN&2{eHVX$bIpg&!sp
zFoUF1ap`v;Tp1Rwb|CKTcNwv?u&@J39H+6xzq5hC{H`MV)3C%LO|CJ(`L+x%nsvgz
z`D?IrxgPP#zRA1N${BG6Ifd|TD99jN^*B9A%(N^r!%VowrTJR$`<>G(!<}|>M<;Ih
z=rVI7iyR`h4yao7lRCgSe1AEWJ${h+#pF7%m(Lm(Mx0GbxqZh3<;>V at GLl~Whxs&$
zP+6X`D+w!^Q&Asa5LA;&_*J8{N#k?v?7#e{^tsDt1x at Ko2Fn-S92d>t7b_1jF0-At
z9KWSaRYMtEEDV$co?B{Y>as=(JJ{D1UI83f6hoset;PSQzB$WjU4;fI8s}(BsPOxL
zQ(+ieVesbO2^BuLLfOBoEW5vR1_J|(avP%fy+2sn9IlN=tG10z&-9g3rlK`2s<9gJ
z*dLAG<0E{ac^0436UVI2AsPFxYUKvuxkIpBcyTDd=$7JX$P!EKU3b%jErxn+Bom_`
zmk?8#Zxy5+ at sjyXL536l%;4GNbdGg5Q#qT=Af7U>XOsEF5oXpLGBQ5c!>Hhi{yFZu
z9UCfw2cJ*q4-0lXv_)kLI0?>;$9+YJ2evu?NtxaNr`t&QWaW!tzQfCh`Jy7qS5i&|
zdDO*6Wv at 1U_u!{(jAjn$YBGEMUB5TZ=7|4f<sUq+3>3pib4gMBf>2J*y9e*TPOLVN
zygPgCl)f5KzCGnslG>4Iwx%Ay$)6`tBje2dvyihIjS3$8#Ya~!9e8o^$Mf&yitF*g
z?sZ`&c3e8;JE at 2=nVfitsmUcJ!jg#Hb&1s+Nn&-j(~0R{9%34ENvYT?AB88@%aL+C
zWfVQMaXSp8My`09$53-gKRU5Go$Kp^c+t+N{z+N7MW#BOYie0;+7!_E9)>nNLQP1T
ze at 1Od$rQqMCW!_U@|+<b$+O+(1P}ghTq1r*WjtjJqR|T;e0nSvjc<LqA=K;SlTYRQ
zq?hDJ;nB4eQNwB~CpU|Uv(e5+cerE-WKs1LEsVQ#@MjRr%!oqD7?=zd at J|rMr!M~d
z=zWA*Pb!a at EOS;DfdHojK&28NRFn_m5%?@D$~UzfE?j at t^q~^Ux`Y}`gmh%~#6&M;
zJjL~y!Oh1HfEPf=)>~WrkXRimQKmp=)rhCON#Rd<7)RXXP!tnBj|_KuclPR9pF)%$
z?B+BXsxyKya5L2u3E6nQ^+*84oS5zNND=LmSCrpu)A$}zB~Qw}^nb#eNj=g3f`C~@
zFj4|a=sWFSJ~Bz<0S7KbB|<(^%WC{pZ?6b7 at _J|QdgOw*@r_)OC at WASz2+ZLTdZ?Y
z4a@>3B9YR6vhtamQ(m#`Nf|R3W)r>JG5U<}u5xelW%&0z<xFrMX)cFG20(>^1$rDs
zrkabN#U};M+wVY}P+5<hnn6)67%e{ms=$rT+*jg~!I=noknc^3=kyk#VD~HZ3H$x0
znL~M`c&4eP)X7(k1Xp8Tbg#O0{(Z2=imA;LktWVy>(vv}tIn8gTE7M4hkWu-e$2eD
za<S^+kJ~5JI})&s8(b8l*5)7k-kWaqKj#&O!bfBj$xQBgeTvl-hGYc7b75 at elRk8?
zyLEg7Y~n5A#yfY4Pksu@?enDUH at 9H-tTAyh>MO%CcuSkFp*C1$DA?oKbU1D|M5&9V
z7fMI2g4v^D$Iei@<Z~t}q1F at jhG&A^Jn~WsDK3mnG%N$jl5P$rF8CTA3U)uX5Ckd!
z=i<AIKln*mw4OAdV>>3Pny&{!kyIIs?uL2QGc_ysI$_^jIqJ&cuNj*KWVl<C)&2Jo
zCVJA6Z>mo`Da&^nmS48i=@CMBotjUkh>7V_m!1f at c$itcfE4>>s`&_1cK~!?P^MaJ
z0Bb=XX4xrIEhAx|q-pJG$*`KLcoWok9JGN0V&?cPD9>lIu{a_kK?y}jlBqt+1wrwl
zCViMf4hWYED{n;R>2Pkdxbc0ko99?q95SDD3N+MVX6F962*UC>gR4I;$S;<Io<M%&
zkZB@>vO=ufhOpOazW_ at HAY<qSN57te)8T2+f;SumOp>fXMA3Mq*hHy|kP=puvw8&=
z=3_*ni2-aOF$m-eRw~6^khokCw>sd8QBG*Rb3KxlL^#(eH)>z~BUq5QA`O<lL834e
zfhOp|DOOf))%e~=hVq^A2>c2L8Hj{ewOaNxNlhV_#MKjh7NGpZYKbJ%ot}&0R(D@*
zzIN|@oI&z0!S1>9*Wb0j{x0O`;UqPmC`>O3bvloP&=JEYW#<f_Gem at l;zal$;R)hw
zrEd!2B^Aigu$nb9V%=qGNar`-(0d8Xn+sCqfMg;w)s5UIWl}d~05vpmU8n>)ZJU%_
zPB|5G?46j*0<b|LI{}Lezb}PflDmH&2vP!a2yBS|2cOhuiWiduIl1GQt&2$q+Va=u
z7UJaZMi0|WIyU{I(TC0a1gGa6etNW^<?ibR|FCl2Suk$3YgJG1$-I~EOxJqZr8%BF
z7qxEpD36$>+X(adr!EaS(y=Li%J<K15%=%Mx{Tc|FfhyBe at 1C^;9Ox%z@{%h{_^$D
z#IqVp^TY3-eX at 4|RgUC&KWELl?KvZgYq_q6b{aZ*hI;8o`j2fdS--I~O>5t9W^m!-
z=w}8Ji;9F*Ki(g;zE?7X`|?Vr`CJFDQoFqMw}~0zz(o-eUTe2{9nHv}e#P{Y+m&V=
zzyHb^ksQ5m-{ey>K9i%*=jA<_z9{+q^M4rYd3$^vGPv05#=^meemQvC=fXCh<L*(8
zC&(WZ(YC8he_o<gYxhvCEA%?hgr)S-yrHq0+{bU&^)czD$8fii=?yj8$Z!sS%%Xj$
z19FBl4|b52^sGDk&|3%&?AwP5ffML`=oqeS(>^p3=zV4%Y5-by?L)_bev|g05jelq
zK6D#sQ at 0PL07nJyLpOmzP~IFk;uZhC8aM#LBA}{wAF2V40pgBYeWmRNjjTrRLj}0N
z$$h9Dm;r<(iRJ+7f%E<MAs^r at f3{;B;6mWg_iV={OW2N&Ucz>G(N}DT4VSPTo%9vk
zab*|VQSUCcqXMYshT0GzE<_~bhPxU#JIP9d&aPx7bp03pecU72TDC_6jo2O;7_mKa
zsMv=(fx>3CWo`xAvdV~UIkSRoIlqE!Sy{o3G{=w~34bZ>0Yb?}tjG)(YegkO10W-o
zohNVta7x8K#%?QV+aTLbuC<_pvvRccOf}8XN(_q=_iyT({aVTJU*;ee9rpm^-sEVf
zYBnba;Rgssk8_X(@W^Za{a3)?&vFoc*fc6<AMys8mgb=ISfXF#Xq&fL*owS>V<Y#Y
zOgv>q?^_YJGL|IgAPq3RHV19PqHW~2P6XaK%WsVYI<~tbGu%O?J95G-a7QJ$+z5BX
z#Zw3Mz`ly&qjJzYJS83OXs2#KAv*S8oqWn~ZNVL%+lp+}gJ7i4(<Klw^A~>W31EU=
z4*Ch$1>uI)Q)Cm7<TWBTe*Dn5<RFi6QCL0nCWI-u4l`$RdHMN?2_y8B+PK8bft;MV
z{=B(a#0u9TVYLVm!bSO`dAYGBmhrPW4s+&MA<3)<dgF2ahTCVziv*qFO%Ma?iU?0}
z5n<F<L?~Ak5xEc+KzJx{9!>)n3(g2!95`ceIpEyE%?39ZTr at a7xG}gaIA18g5L^m4
zb8wb-iiiootkK{H4hQEgE*eB6fX4*f;EEz53784a8JsJ)2<B!ZX-9{FR}Y*DTp+j!
zhl+?`U at EvYaCYDpfg1&GG&n18Q@{-bHxFDaxHxde;BvsZ<L1Cc{|}B2ZVWi(ogxpy
z7dk%@TnadIJP>fh!FhvA0A~iy8C+Had5&x#XiqbDtqx;1VuQPOo#8c+xZYj6*03I$
zLp)wLSjY7tKPFyx`jF?XuB;{GDb&U1gTGVfp9%hvx;!NK8+86i at Q=VcjTK)E72$=7
z7sE10xT*7x1%I-x;YHAJyROpl;5XNGG#|>Ub at BF)zeblIfq#OoF%QVY==^~Ye<7qm
z!ZDPDI!hZ)ULaqKIJR{ShwqRs=0gX63OWJKd?<(voHMu#aDm{`z)b=d3yu$NK0~}9
zw;5#&0ntOn1kk_X(-)+tUW4W}nP*57e?Uq~BMQX4aTWz*GJ41s(_#f0g?altnuJ;Z
z08PPc$Uw1}g^!RiutR+oxnnXr5FfMS5%Qf|L=>nS(R at s(7uQq3oI at r!eCs^Q!mQsx
zBYo`Yn2sDV3m%{_OlTkw6B<YbwyTTLD9oEOWQ7SG#uc{T2tfmJIGOEe`|U8~iNoX1
zqc}|Ha5QFv1Dihb6C}Xl<2#WrtjzYe^g}cfdpa}N4A9^N2>Ys6py8OeLs0_egfNta
z2^HgfzV$m%1P;H=K>C<aE(}-?Bc?H7#I~4B7#fWU<pyHb??6VFAR%|44-KN at V-Is4
z`SO9#V{^=gM`$?k7^ItELb@|1q?4GCZqLV)DntL5DWw0KIn>VGU*=HDTdX8t4q3t!
zY6(-QWdkcwJcU}x{+lTz_(k-8F^3K)kk8JYHvPlg{W*1Z{Qr6Cv{UwPr;h&b=57?9
zox3TR9S_hv%!ZvP4)g6JG#gKunjPse9sirD8AJ2`Z_DfdIyLlvnw$S_dHttl^<Pg7
z{U4W=HvIo}S^d{jLHEx^=>NLYjr#v}Dp<)C(Er^s`5&i38~)2w{C$;Z!~bD}qyP71
z@(}r!13Ukml9Y0GO7hFuDKWuhI4Bd-ayg2?tkpyMn4skun9z<M=7e)774udYT2x--
zs-45pI08m66m#Sw6kGoHIb=9I-c}}FpO at G0qdxCf;|8vn*C_GGq_WY{dD&WH&;b~7
zne{6K*@zEr=nyun7v1oOAFr2ShK%O at +^{czXU1uG5yX3CVln13f=~`82w!ju!HooG
zKD?nbo;SkXY{u{$?RDCGM2^;o$QzNv94R12F&{1F-Jm}PgA$wC>vTtfDj>dkcR)Ng
zQJw>_d2#}XO_L))T-yO4u5AYpn<G<!*c6!p#1?`f)Pqfs at esyGg|QIEM};@{_^sFi
z`3(rxM+EYO1Z;Y!Ap)Nj)&Q}&aR!LZjZcC2c(wf=|2{T3CIGRy5drbo=3fGA5H97(
zc~;7Z9PP1YaX5Q?$Sq-y55CO&<-BczjItc9bv4adD}Y4}H7j`GhV<xjgx0LUC9QOR
zTza6+k82pJ^JB?)>ik$bMmj&1kg?8>n{e0pv7`p;{8(CiogYg~!1`&e1?L;eCScKx
z)cLXa%yoV&LQ9<=i*dNluRZVS{MeW?(fP4N&2)Y&RcD<aOV$<qc(7QyWGKxBu!!|_
z30TbbIzJY*qpmO(cZkl9U6?M93Wy~}1F^JHb$P6G>1n$3QM&X=K<#l8SWkmz9(b?_
zjeuJ50r6<~K-_!f4uZfP90|mov)sWp;Jt%wAae)XK-3Pl0mmI|11cb%Cfgls{iAoV
z_2c{tb>-=|x`aYqLZ^<nfm~e!p1KC&bPWs!;_2Z7 at ze-_cv^hzb at Oh|ma`WZY0Kew
zTyBCr+cA7#z#X%+C#GwAG~b@>QNBIfktBPzBhEmq6A?h!*?lPg0YMyyb1?0nf++uD
z;;(l{^itWA{WKsp>@)80?=#2N^PKqOAM8V~@q%O?tmln1;P1~y3vkc(GY%VgwbM<Z
zz~}gAtgB#j3wxBuY}e6O$Ctplq5IHhSRY2YBPqUVaep5=s-w4#U+9SI3u8iRcxL9K
zELzcD`>XtrME|>_z+*Z861ViEJL+GrAL2h};|l%~7ni#4U*g93<orvV=#)E}zS*7m
zp at wJTkZr<lAwxC$KHPc0E?7}a;I$KL%kb1Z7d?(*ALFU!IU9n9-7O3jOlOW3kT%3e
zj7rUOH3~S(9-}NxqB05QvjTD;C;NBiJ6t$Rox|MQ&vPcc8QWT(D<`RgiLB+hV9o^!
zOy9AMr%USbMrBJZWKKgq?$MY0R;IO<=fsgOX9h4(!jZ#_z;xp<(=f*rFlCsb4a{Lo
zMFVpSlXPNwF at qj6E_FN?B7upm<GB(>jFQC`j9JV#08Y*U<`0~Q%b0J3*uhL7fU|fv
zGixK%pmb&`F=sh5$1ww)nO}f}9z$+|-1*E<j0G5$%$!X;Ara1~Hfd|$jbX`L0dS`N
z#B^?g;)8!;27L_l_=$<cG&;x3)v*=`*-w8A*+Zr?zv1XH)0qLAfztcT2u#HjW*U%4
zW=c0hwi!9hVH~Y8Wp3f<6s8BF34g|U3!spR1#lz_nZhlQ=)-J*prN6nRV!=~O`ofs
zKu-J+<`2j~l1Xq%XQFF)j>KFha4XEIU1zIy+c(qC$auicX=(>kxfPmpP%_82YCGHl
zIXQ0Y8QwOYi$l~KR-g0~tTHaS%W4HTie<1KGj1EtgQLHhS-g$s#fjR?9L9{TV;*8o
ztz#^<15 at jm7|f6sW*O$m`^@K<{`Z;RFpX^)>m5KNTV@<)G0iN;L^N|8vxsKeFvDnO
z&?i7Wnn}du&`cSoie^q?E~S}2Fav4EVJ9$vX2xTlr<pT5dA7{nojh|+s5aomIY%?E
zF=?7{*#+#QnaP;TXr>agmuAjk3WAtUOoJfCV>d99W~O02rkVAaLuuw)%sDjEg*lUE
zhV215(@gIko(;2X56^;=uM2#R1K!$zE%Rg#bSFU@@Zy+gX~m4$%d_Gn=>jwkn9<Cp
zy^te|X1>F8r5VmXpp<4tV3yL10+UNKTY*L;x{IQAn_<3J^BfuBb{>}#MKiqpkS~&E
z{4w=uW-jJRn)w8iM>DrD%V@^n0B}0Z1Ytg)nFW{^`<P!2 at +_EB2Y5D|F at 4Nk9C^8q
z8E_C7qooxy1^#d@^)ZDwQqad7z+9s(2_o!cOb-D&XeJV~fMynBw$sdEOkbLLi0MN!
z7M}ta(o76yA<Znq97!{uV>ZytZ<r%!#`-YuIL(a1+zWbx=>mF#xd-$HGXnJH2=E(i
zco36!geT&JYa=b0Ek}3*ITt{KaE^4)Ak6z(iW&c-JZp}<E-)7dGC+NfLSWV=o&^u@
zosQZFP;SsCOd06YXFvk<3DXkv3DW}f2{V{xIx&N2#^ZC~8PF%pRM00(ThJ%WEucqV
zfVhQUfVh=?H~<prV`gA3>|<&%NA at w7Fh}$;y_hyM<8=&}Ml-W8r-ANZ+JWw1ZUfz^
z2Mz+=!CVBogZUBY4(2E=t(d3qhvTOU*d2$!63`YPlY|3{wE-{AXkFx2IMN^V2S-i<
z{b>MB1pUFZ0{y|9LNj|X2hz-4%v_oo at Fj2v&4gkeqM1U>c{FnX^99ZPf;pFFOiuv+
z0Ik9F1g*h50$PJP473I_7PRIh at Cw}!bCUN5L67luM+aes{BN;0FVlW!uXd3W+|e1`
z{qe7X)IxXdHfQIxAI$^C0AFD9G=D!zz~+dbJ2J&Hy~rJ%1`gr1YVUvBS+Msb?QZZ}
zf5Z0D4gUQoty#MtIbhq^hv$xF;eWc6?bqJ%pYe at 5+5r5#iQj6ASLo~g=o<c~%Pe<v
z2_H)|{MKUNiu3&YE3n-JdpHMoP~RPm$NwRSW%pg>Sa);_II+?lJpl5Cx}$Xb&!2Jb
z+8gp_2i;Mhnnoxq#~r=FcQ$`_M@#V?{Wf>B9-E>TIp|Yth!?t}Tx>@HRrp^ertWAN
zHfe#_bk(<J|Md|*Y9D%zZQqxzTI+v|v{idj at DQ;7><Jsg{`W}mn7xB)<J*cRVcVD*
z--_<w+qG~dp|mEEJDRIC*xk_|_<t=hMMH6g>)cT-K8Pt>(R|=Xz*pMSjyuZ2mY`k^
z(#OY?lKp5UK7xF+A8o<5HZT?#Ju^ppvIu&RgN9&Z-NYTyNAO4nyQ5)PbWhz8{@;gN
zCu^rohK7H}_lrTqpXqEW>|7V-ps0oHWzX~Jz7HnU4A6yKaE_acKWwg%o~(5^aooNS
zHd(ta-WSh5PQX{(>2mfidH(?mXIQ8!hz)q|JN6ig<2!Zn+GFVKZ0$MfO&5C%#XPQK
zijFsROxE#+j^^rltVgYj5b22L$<2ZNryTCR^>=LV$HcLA8+ylfZq^U%ZT|V9{o2mE
zf6w0DA9c-LYn+E&aM#+*qs?1UJ|0}dj<0zPLC59Eh>n{uRlovZ4zLjD4zvKy2G#-x
z1Lp&yf$cy(&=)ucSPv8ceSpd at WW+I`FVGUW5SR%Z349Dp0WJiZ1K-|6v(N<abTVK<
z14lx_eBcP+a3BNB2i^pF1I>X6KsC?=C;}z{Yk+1z66(nTegm8h3<pNzdK+xd at m4z1
zxs~kEC>WT*4`+>OT^tRJ{+*4RqKgXzhA|hkaaOuG6;Sz>jhm#4(*x3pY}{yFTo^Eg
z%f>BX<7h;HC+*h at +L;@r%NPQjznsmuNEhb_T#~`Y+3DgkfC+(YT$(P<9ysL=Tc52i
zZaOgYD>g1w7pITgkP9!c3#6x58yQvE at Odk5nE@@BgO9ER8Z!r*BE^WWV+1f9;?02;
zK;;~Kv at J%0XKZ@(GeUbK&-fWGFGHSM7Neos^hRX$44*({Xvs4|d!Nou$248}R5l-t
zRJwv;+6s#ip-qsX3|#?xZ9IXd>k3Bc8X&bKP=t=Iy7Vkv*jZODQx`VVg_CsoOtcIr
zMhUtGy>-mjWf-n2IA2FgUHk+c&7U<W+IgQ3pp)ddrv#b+OaU4<;kyaND6WYuXr~LO
z>B2-4K64kN5M4N`35!;SlA7?D92#h1>+#iwLG(>*gYMDzu7V61N3)X3Wy5386kUW>
zG+W`MXm%u{quGK>qS>L3(xuz!@~7#-wmPOpH~glj|H(jNQNt=b{gpO6vm1?s`Nxb!
zfPQG?*mbSwuWq3bwrAm=;S`;J0&tv;_CK_uVY+nX3|Nox4O;{B7ZWt`c`>nC0XvU(
zv34gRf$bt#U|$py1?I3J<iXwz={O&bH`b-&d>!U&KAev8t=8o$sA2PA;(RzB=Ue at k
ze3>_jiP<88rugOr)nQ(QoTZJ#YV#thqlVz>zk<RR6Oop+RxB-Fuw?#VnS7Y#jpr;=
za#`LS%2ITdWz9I2=9Mhfu_$vsz93ZqY4F at CXCo}?Sk}H^X*riA<H<5Pm*tH)EK@#Z
zdGjhuQ5DOYN|xq-ZAjP7OLiby!ay?Vm+VNi5ik-hVI*3 at NVJ5JXbB_H5=NpWjAZsp
zwgD~2m$QV9YY83K5<0FWbX-g5xR%gyTI+$HYY9Eq()?d5#`9JH6=?|-X$ci+2^DDx
z^=Jw8XbJUb3H508L~Y1&LOILiPifY3;}FY~AuMlJu at ntpS<}qY{9h}=iq^p#VtL~#
z%M at dlH?Oc1jb&N$l%=|yRp4a$5bH^~%JQZ$OVJgUHDh&}zLq5v#2VfqYGzqu#M0c5
zrJB_x?69(7>0yVb3wIbhED_PuRuuMmBSDbfjYO(<Lv4uuw^XQ+ioI7wr-K=z^J5!)
zoX(Fe3!iS*zZ&1~>W>!@DDa13LhlD=YmELNUSwYmitJl?E=C_5)o?C`Z#}7 at v4H%N
z!wu+(__g8wPQF<HJ at a)~SG?2y<u+ALU7mpzU%TMPFiqqRn^nms{6t|<q*TSp8<t<P
zKt9QCX0yEU>6v{d8avxtJ!c+vd0ys}K9VnbIYusDG+jRFWsKZyQF?csiDsL at t)8WI
zU7mkWJN1{ei1C!MxR6<JpD&_I(yJ1!^%RbILS?c$Uq1ikIGchjB05Trpl3k>=TDld
z5+VGpocgD5RFu_uB8rISZQ|SB)bP*Lbv<>e=Xzf#opNeo-lFu0(_hBC5M^^KL@|_Y
za)NOF=d%n3j*|1`(_fAaypcs*Kf7{Il}ndoqWS!n(N`uCtueX3OvYVIqo9i`80!c8
zF{vPxN#=6Nqg5s^>B5#Ij}4=Gp85vcoLXn1p+j4updWe`x2d7fFSn|dU7q-%62U~u
z2*TEFx4S%#X9?4lzi0-;DCKV2JmFoQrnMPPY<}k32YfGjSk3a7szf;wOk6h9Q6Ram
zG8#g5<NBe!s>C4_%usm$47vTjRs6TQc!Aa0zQ_-b)xPcYNZ>{j&D)XNcvXpFZi=L+
ztYX4H_xEl!j0N&nB?|cyEG5j6hx}o5S(j(r?zFvv(o~UZ)mAI~CA1+Kec^v=Yeaur
zRf(DaIpsd5>Pfk?&&#6xwgWkK^F;U|s$duVn6&DJevwxgcZqzF-B>7ZtFY<v#Caka
znbCUjk;_5mvkWeM+A>wqBS$|b1WczF9Q>kHx`7`G!k7xepmhFhkEHq*l~r()_Um^_
zjayv!rgFFNL8kcqwDj#fiPCqVtwTNvf8h(tv#w4YxK3lN8B;5F+b~GawDu87s+XaP
z8<eEtrrf=vMlMM!?Nxu$boJ8t^W~D!%9;wL`VtkCf#~U{_pws*Fq1sX&7llb)vO|@
z&UShBh`nBndN9`a48`5mnXyYbz$UmX^E8FEGdL={NmP~C>@&dMtYK7oH<eou>lw)u
z*-S|>(3_GvjC-$CP+?KZSv$~X7?pN^aOHQ?%Vm={4?}6Y2CuE~87A1a`*P)!TH3&1
z%GO~9X?s7e{BCA>`rWC+IB5^otetYhK=RYiQg>C)9OBmSRkCSD6ZfbRR!htSDCbe1
z8Bj}(jrCjP1oWXet3T-u?`h3!ihCTjyI%zkjxCnC)D(FY>_&R7PIW$614QduE?#R&
zj0#%PEe)@XRwGg2^x8BR`dE>(Mcw7|&~t8<x(NSz-3ba>Y`)YoWtA<g5m+Lt%!R0a
z)hzu1d$?R>O_HH<ht#z&|LM%m=<=vG(?eXCvZ+zoa=ofVuAy>jl3`)a)0wLEu;Ptj
zw`lJ2+&TNtFx}qeIn`XYvaKM=Fm-8oExqu2siE>`sZVE8dDcHpY}&Rg<of$HgN6L-
z8GAx)W_g?X-a-=PD^|JMPX~EK4|%!Qbp4|dV|=`Y?V=!SWj*qFozokB{grEZLZ)PM
zTd-89s>*V#eG at OOe`ku652&F&c~rh%EhwQ{#)Ubbr>v#|*!qHL7lnb`@!^&GZ=m9O
zTycd9W%w%k`g?;hNql86VW+x9cy`V!4^eg?g8Ym!j{Krn6ux%Ksci06A4xrB992(o
zQy^`<&5_H&CbO&uekb87uWOtmzmN?HhaD-qlrr*3cgkNpD{0l!n^uNFq=tw)n^bWy
zxG1X4kfw+T6XbBM{<n;$6H<h#@m|8t^uwY3OJ(49uuPOKQ&sWX^w|**;_L0~NEHU!
zQ3^YLkC)o)HR-;$b#Zr9;w<sN?=}S;3=Yj#N at Bfj3cZo-&v!n#t(V?>eSxSBzb~Zw
zbdF#DHuap|y0|H~oigxAx5+m>{%C}Ab%;s-x&>Vz$a-WP*-%XGtvPu<1;TN9hDQor
zCuje-UAJ96>GJ$@>+JGey|+8$&*fY$>HbR^-?L~<+ at m{t-kgsj9<1?e;(MS~H2wzU
zgxf+iyry;3 at kkhH*SZU~T*>bdn-S-m?~u>qPd2<%hUNJ8_ju^XU7F_;f`-kp at Rs<d
z1bI%nx9xI9%JugGK4tXCKcm(4Qxsm&Bqds$jm!EkX=~?&F0iG}?E<MJDkbIIZ`M*i
z(dJvw>{21kwcY$-*Yr`i)eTRD3dw59xLaZ6qMKiS$L87?+>nbBnI<^PN>y*9u1a(1
z$kZS2zdy0b?o(waLRbkwe=JnVSOMduK7JaGDj81?Ow(JKqI#2;>=a$1db4USrw;FJ
zhzq0r&jfAmTOu&}%g$#;H-|o0c^F@!V(4EcPa~6Tl<T5Qb{N<<^<S;L%uu*o<38uh
z8k3j0&JR!+i3KW46TYP+mVkNZ6r at n3aaLbX*C&&+>l}ldW{4$Ci$t+_^D<R<b$Qwv
z$x8j`<T3W^qFQ52kgQa?g_9?6c4*q`DQq98?lNAG<skFZL|GYkKMV=1&JCV at GhU+P
zY4~1YD7xffNoYoLQoUit^Nrc0Tq0gDhzs#!Dn#*;mJs8zz;86>P}Zbu$itA?7I3}Z
zSjUZQC^EwJX!E7uGVzjdoH;HbuB4Mw6oS9u15!{#Wv{l_S(CPQwIfHStc{nZzPeM^
zofp1#v5-5nFzegco>Gcbm6y9g-f1S*UZ<I*zw at 2P9FwDp#J^pk_hy;h-DJ{^uUsBx
z!Oea*Q at O5Ns^7P8Z at uc<%f1KEmkBjdjL~qx87i*i*tymDUtwPU&UbThop$~0>SYx9
zqyc8m=vGg_{w`1Ui`rtnf at -9<d1PDR<{l=fjc?7Bi{0liQ``6f+{DlIUo)HA_z&#h
zvW+j{!#DL`(&a{0vn0ly?rq7|ntyC$Hb3RdII6A8FHiY2af+GtjPJowRWhre at ymiN
z>eif{HK%B7U^Sti>O7_vCe0J}SktORq+j at W&oaLQ-kf at ooTFN~lnZGAg2xW;cHX#i
zIL-JNy?G=v?m6F{*vsTS=ZlBoB)GUWD<&lo$_H5kd%hB_RXy<Lbl}$zOs6<lio<G3
z7l01=Dkd?<pYuKFM~k?JR1##UOv&LMpFKHm;mFA!70e4-yz1)B_#tLQV&qQ3&@>V~
zs&M|Bz|T`dE6mtBO{_m(3w0W_6~h($4d`QG&|-u08m}IZM;crTPWN_s!lfoin?4-U
zX9X=5T-FQ&(}VtCd&qMJ&GA{;Z?~ADg%LqZeBXX8-AM;6>G2V*Q+}bbEs<~E==BE4
zcFqr4(&8<uQJ&TeD3KSf+L<1-_ at S?;PPtoSShDZy{g5Y}`Vlo*`o<LnmUyFfQ6MpI
zde`3Ft2eYO54c#}n<0x&v&=(pchby+NJ}CA_2t at mu0BH1xMKl)t68a(xq>p3f8;)=
z?dr+zB0{O*D)Si5Jm-03(LZYpBT^7&@5GK<7gO at MTQ*sj(dIdbu5}qjM_AX~Uz{xS
zQB&?Gy at rLZpFg4GY1C3mS%M6PI1<r(QL}_B5h71+9_py at hAo58SJKz=P`g^=A8CmM
zQ#$g{F|{~Y;v0>k>II<V-UgZ1DT~+oM~duEfMz1FRVqPJ$)`9?me!IjzKtc3>JV-u
zQ*0G|;|huv8FJ at N*I!{>Z(12R*@Q5cXo%qP2q|yb60=i=S(9oolx|{5(7f*g2q>o~
zX__c$iexDA!c<A)WgAHo4xgEOEKQmrNsLmTmonWi_)<5lS$I3^6zyz^+;Wx+JK5Y$
z`skQWr=pxEie7XsK&R=+FZn|p`rdbWo?Ch}e$t@$V24jl+O?MjFh3t2goA}8=tBqd
z$xHsYP?++i{bu#f%iZB=p~ht|YX7EZ-)jUt)z<odHB(C-*KO39*CSr>U8pzbbL~1E
zTBb5HU-6|}LFSG&rtTF#%yp{bWGpXIUCa#>#Rd3^D3Q%IG547I<az)3GQMhLj&JVG
z*nqYGhVz=g1di#;Uh^jnoT^%h-*XmgW78>ipB9)_HvLPJms%y>#=L&bcL+*cum38^
z93lKB=WDkg%AVH5`FvX;<9=J!Xi)Wpa>(ku|3;~%4E*zAeIpsJq2DWO!v7^@l>X86
z_m>_piEsGBIMLrS%ir(=h?C6MZ}_%uaEuw}R<l)Kd6P1TR2K<wHHwpCIo*mpl&Q8R
ze*C^=>b+n8ag5=%^G6ZiF+uHoFJbhzsl?NTh^w;nMhh3g;EUS%$sE-S=2km at mIJ-E
z3)`q<pc-tH8jVrE9qVECx(B~K{qjI&S_gli@$oKC)wKX3U^N(RTTV7J<sE$6fx8{M
zU<;FE*2CtzNq3(6smn8F-p7edV+TJxAVVB{MNk at L68-I_0d6&e2Edstz_f16+1ES6
z^I!|FeRE!8xO<}StL}*%nm;dGl;rv5#Z8Q?lW)nL8MnijnbOI(qGKL1(^6(p`cH5D
z?F at 6Qe=pDo_dWjSGg0Cu{j-mBXB>PcI%E5F6TVQ+oIb;8ah}8Kd)(kMe0IT`lVJDu
zJ5`BN_s;zIuuiZ~>7OYN`hqlA^|6WOp7AYyPhf4AC$_?B-}2qkpD4OTd~>;;@)+`2
z>)9L58jmK13ne;Zb8oz~<uj9Z_WG{j2iC;dw;6AL?qh-SI~d(|w;E1DXDN at s(jX5P
z8w8hXxg=}s^|zI4+ZHk9&<ZVZmi**l_VU?d@#0_ozMwpU%;UUXJ3gIxV$;2C73E@^
zRX6D}|8 at PQu!*6sMBB2~08IV#L+f0~SK_~pGI*jmGYFUOj47INV$+c$VE$y<Ha#g-
z`XG*f39>3w91e>>$RSW27Z7MdF`gPeNt;Yw{;9`?uHImiM3nn?;cxF3J{<VgdP_Qz
zmP!0>XYsv^V+WYltvTm+3;Y9OjZNzWXF=IHF!|@P(nH$WQE4E)9Td-?W0t|@-|h_P
z7N<A$AL>0e_&s~F(f=akr_aXiw%etBy$`rs>0Q~r)yT>v1Ihfpi6!XjS-gSYnV>G=
zaT!iuov}SE=B8AbHhsg&FUx4r_w%~sbhQaVOH7D`l36YTze7^hF$2QC8A((f5{Z(D
zak%bzC{(fTPpy$FW+f*M5;U?~2aS)zb|oA#qw=$+#Z7)k*Q4hTv(|0yJsN`jzGGqJ
zHp|c=E<&mjnEaIxw*-InVwvQfA(xNCZ;wfU;MWKLZSd=peAPAZo7e-v9}oT!_WaK9
z_zYEP>~NR7BKZ?_qYWN-DD50p=@N=$*XHj at _EUK~EKDzvEy|Q_`FoE`J~i3jze(Z_
zV at VWd6otCvYb&$<dt7h^IpyEPE%|#Ky~z3H*1tzyomhMi#|hMi{K5<r3JWMku-hK?
zelcJ7YL0)Bh)=Z~t$x%kQ?0T#W?%Lm>Ec{ZNKMVmxpu<Pm8ywd&QFBFjf#)5%*J{d
zZt4GMbJA{#Y3Smc((U*o%|5UGI%t at p>#7S`dbifHHzGXD?3<fyir&NSD6qLHHo_<0
zd%{~iK_C!(-(Yn{QTn`}y4tFCXX$zW5HBnkndLFjH*~p5+~quZmtFaZyM2e*cXSLQ
zUL3Qt|Er$U-aE6*Zk_pXcSZK7*lsNzbX4|5lYckpo|x<JSHHk&AodZImP;bk6i-E^
zH{+93RJOoWdvC$akbjSBSW>v8DAKjmq<z~K|35s;K72kpCVEKGuD~r62k*)FY2HNG
z8jYaQBoph<ihlpFn&JZO>ih6r>19LS*~lf|&ge>3O3+aDb`fLH%^yTx`m{?9t52%9
zOd!=rd*jZTPw7cFCBdqV?5>V)F|D0Y6m at wQMXvr<`&O4D`18m;)&D9Htw6r|Qy>Qn
zf}2mf*|(nDue)Ia7lTu96!f&pXw|qletVh6rC;@b4i!HOZfBQB6)u45qDX8~aSPPM
zKM|=WBv>fxV*>EI*^Enj)y8<$*RwD7dbld+^6l+Kk at y~*>khEsSp%A~IJ=U0@~MCO
z6LrXd$_ at A{U_+?W2Fo<v;^2$_T!#Koi1<q(tIGQRLcMo%g?_|^RE7W45O at BUi@Un7
z`QJ$yPZ3ZqIHS}5z3Liecdz*Baa_)!Jm})T>7ZeMTfuY&Z$jmHwy}G~#(TQOeNF$N
z5c#1{1~0YpaetY(mAW#Q{!Iss=9e$-YI`m*R at JOWd4y(m+f&N9b7 at iZnDemsws(io
zk8)ZYRTqX(-PgK)@4t=sdiK$<y?y at QEA~Sn15JXWlyd%d1{B(*Efo4F8<(N%{;7=O
zXz1SG{J+PNfDX>hxXDUFr5_ZieTR!z`2WM$m&Y}6w2x0hkj(}qfdm4AS?)v7ltU>R
ziJSpJLL^?5${_@!R8$tLb=_!#A{7B427LkVt6FXQinhKYo-H12l?sZMSF5#HsI5go
zih#eFgmAQdzn|Y9^O at P%otbBzdFHw1*p!wvPwW3uj-J at Dc&MP&p}Lmz{|*)$+bg8+
z{ts+$hG8Sl>QLx26Of^m{V at n5aLRi9UOHA3`(dUnlm^_%1cq&G{k|yVU75481~4OG
zP?pjFS3)BV2F}()-*4?%c}i-fouwV~$E=S;kkH(|2Ozqrzv at xNp!sjPnlEIJ(TOx6
zb)tg8FlGw5-I5ihE8(H5T?{<$iSxB$g~)mBu$kds);(%&&bmd<nnva~(H|Lw<-T&!
zaZ%93jaIFp-$m)(Olhz=aXt1!9x;xU`ZTY%z2&N4sPdz6(^g8KdlsabG2hWX;~hbg
z{?#Elk^Cv|Ir6>Nb at WWU-|4BHkj|cq-p4Eg2L`>Y#&5agrz%(fX1SPl`poEXKmZhm
z5BA0ia#iOc*KV|nNsK%aJ3p0i*DXTV0u`nNfX&f8vIfzK>*_Sje9{tV3Wsk4k}IAX
zW8<X-H%iW5GcveqlOgs-839n)`0tVvRY!UBb4g3|R at nG41A4Zt1G3c<vZx~XvfWt8
zKNkK_PB<Os8Ojzb-mw_bs}G@`b7HVlh8v8BiwNzL(l52y>@No;xrt3fLV>El$IQU#
zmMc3PPo?$B8eZdUp>TwJ*~w{8R9iL-I`m;#B*V~O)7yiFxZ%;bHWGe!(exd<1uE?E
z*IPUGy^dQn6?3C(3 at VEKyEIo5MWeqryhyam-R;k%epLlT9F34xmGNGh)={V=%pD4%
zT_^0*>#tt~KbkluN0-c?imFEds7_Vc+}b~=-5O*Py3um;9~x=)_L1z`|7f>}g~m?*
z6BBn|SUa+-*4w`(U>BYb?<%^6s{Q0hd>UH(Y-EcKqKVftN-?4rjBlRutDMLSXruK@
z&G2~oFF1k&v12%n3Lp1GXm3ag(1pN~3X=rF2qcY=^jKTkGjZ_FG5-JP{yC#7#|X^A
zt-}{+e35iGR0pjxh}(5940aAH;mIa_N0?Ts%)`vpGD1Y at 3DJX2&l-Ie3!g^UZ9%FW
z9N_ay%6I;~u`fpUJobue%7#Nc at hSpiBNnHIwiH!5Fn13S_lM~P1gg_hnDX at ZzaT}n
z+JEUFQfP#gOWHVV+gIE}=a52xFw)O9ROs$JRN;<w3{+wJ-zp1ue>jFYm1xOG8)xF%
z30J;8{kW><(mZp_{L6cE9s2R!@XpdBdb at RGZzW%=rZA8Gb8jb<=VuMqg8nB43r5yy
zy<OBW&yuO_O6ifp at 8}Vg@*F<@<o~PEvVQ=y=$`?N&Whm=tMe~dqzBQM^?##Lb+FR)
z)9HvUx|~~Bz~MpS+&qp=js6GVsz(5KTzkdIaI<G`p^4z*#p?0#!B8S%!Sts{c*nop
z)*c_Irm;}Tz)YCBesCrn=Lr7COxQYnCWy8o<p4EeQj_jo+w?DL1seA^$Ix}O|3r{9
z>b><Tch-n$3JFqsrK;ku1j(Dft?K`SAS3=SO!}vT_mgI0EVW4H1!LM$Jz-a<>XV))
z at WI?jrFADDmHyA^qj-0SX&D;Wq2e%ialw0LTA69=T`G9J25t1*AQq4PGZtxx#`6CY
zjb4&+XDdnv`38SiXxpzazKxkn<}|!cJ1#0jJi7hw0DeCLz$!?bRUSfWC*(^AsGY-@
z9Q_X!Sf4szJF)^9ffR at Ti>bgyFZ>NFd;SMj{xgIX`hODFj{g%Y=(;M#)aH=a30F4h
zjYLMDLl<L~q-s)@@G<PK0BZfbzx<mh_(nn(cy2NgnZaHRH_Z9JRnRhbKoIpBfofk{
z^j4jlOi0fS<hre-EDVeAhF*4Md^+7otb2=)$9vf%U#u%a6NBDE^$KxR{*d+q6@<2I
zmD%T4hAQ{5NpBhat><oo at P_~uIKTJz9*q=k`=))cp={@<*iD!pWyiA at X-)IpurlsK
zMev9q0&_NUPi>Ts&GX-iX*89J{!g at R9*H(6D<-|-4#yhel>e)|Z1r0?e=A=t>M)h3
zhgBf`9~I2~3pI~rp5Su(9~=0$0p&)w0HmY!kRuBIfg={0hHa2tkHz-2(}VmURbT*M
zc7+8;hhf at pAj@1?FpOm)+Av-N3Kf5=XHDw>wI0I^6}>i8G+2-EMoy at 5U0e(-j)36y
zK!ZZ#JhYfFajEsG{r&@9;%_bSvGhNGGN=^CJb80~Q}q_e)n#F58)p4o&1<N4vj2(y
zX|s<MjKCK(%ww<kVkZ7)dB3h6&Xp5tT5gq=)$q#YXVu4aZ$(JAIv-}Ngc|m0$Zi at 3
z((_?jDFZQ%GDb{Gs7=*?2=YI*u<()4xgMpjMF}lND!`u=96Ds2yim6?@YC$3k*Z-+
z$C_6rAYmQ!>uaBktVD5-b8&bjp_RR<f2-uth)P~_#*VDRdb=BQcpX-rZ+`u29k=eR
zdF^(D9;)Ocn~{~s7K at jT1f(zRZ<V}3l?<yx@|VsySe_qVN2 at xNHKLApP$iE>RucQ-
zuf5qn%2dhGxcMnn_Nh0fRlW%`+9puDC;Yix)3s9V(j$j&$N+L{I!!1qUZ>Bo!UY2a
zHmtIr{Iz~>e>vQFx2CFpM;OCuYpvJrr=gYIi=y;zSl<c3(+19o>sw|3McypUB6<h!
zEeQd<cDY+_?^?2Dx??TjMQvyByHd+zGHQH?+zS}n&MoBg3?hwKP~Z&nt#d_ at FZ6WO
zhwE)4gD~#f+h<^^O)oTTpgBSYVN6Lm`m;oWND0$>Dh6CQA3=&2VD9K<agu>?Ca}1S
zWH+!sZ_}e#HV!H($IIA`7WAZyDxCR?Zk*!`E)aGt;igjClf9J;3~!GJ;J(ZlF+{Xk
z_~gdyeRo4IIDPHtx8x$gD7#o}QOzi~?JmEl5Fn>5tQSFO7fJ3ud<`ox`=XzK-^ehf
z00QvS46l9R^RqhLxD2usfV_>5q^;L8`a6j2F`G}9$8L{!8ZFT|v#4?y_&^91e2m)e
z<c!MhBwtibc%Bstdr80-Q?UUnyRBH!JwEF6dRtO}2|_ZHx#+HcM_o4~Ru}3L=&W5C
zsR7(PWy6cYRWsj`@CM64)4v-U&zSoVfd(ytLpk7w)xXEXUFkbL6D2$cD^-a>5j4<f
z>5nR#n`ez|5LPj^DMhm|a9+cUv>>8>S?5_xStB;u>QHFka8tLmRxYmk(6pzco82}h
z{f4M!;X$L*d)kt?e5i<&%88b9uwH{$R&j2e5Zlwq>;39KFc;hBosg%mN<19)+R^BW
zm255`MBg_bym4Z&zi9(NupofhIore1{7F)UQ{$HMPCEd|>D_En2Z)8~A!mCw%zr<q
z5K6**z2UuH#8WJ}z<pwC^WGQZZ+u8~E*6{Wx#<EG+VTMFJ~uOZ(|d_hg0vm$y!r=w
zBKK|m3$l?*JRlt^Gx~7Wl3c)}O2rn*<_Q}!o=9zEW6!@9s%3r&z*-BD9L3wY_mh1|
zE?br*UAQh0LX((z;gUp$xp(<!QY2qO5 at kaY)%Q&7t#a^^2xNXJf1zjCAyjrkdEwH1
zNi;0nDf8-b)h<H?c3DDO at D>^p%(lyAWL}@>O+6?78|Fu!6*y<)6JwE`C<&7>U}cHX
zSsb at w#W(&PVbbu-_chZ;=F5QO7I5oI*Q8LxfPz>Gqv#?TnCZK$;M<I}f{>beLZ#uo
ze05qh1?|Uz=mwp)uX$acw*C*!7S-4nN7<TOq4UESN5E<+34U4~c`(O|JI<So1m+u4
zv{DGvs7Wfv6k(nWlSqFd`aU%_HnrEVHOJgpnEq>q4jYwv*S$Y at 6K!?1Jb_6Ee-?{%
zB?UD|HUn1GdRXbl2XoxGXD*;hJJO_5<sB}|t_q6C#B5PVnnwCh6{9V7)E!{gB20gZ
z&n7HLUA(yRD5|&SR+{W-eO`_RUF^v9x+V7RD=6zG%~VrhXSO|0JxC{dB~~*ex5VIL
z%I(Y4mE=*%PK=0b!MtkKSFU%Z=Su}@3?myc;%WZ4z!-spRogT4Q)hxj>aa<QQk+HI
z_9WItw<*;f-D3^Ql)9y&j_GahEBJ;B6N62Y?{fa=9S9Jr(7XGV;?Rmgr_aT;MbkqY
zuVMY_^6R8NTU4|)+TP-E1vh)P*s5!3`%2X^II|mMn7Ud#k(wh8rQT_HT~OJsmK1T>
zc^TbHDf_y5gY#z(9M2*L3%5N?=VEsi9$qBpc7CPu;j1*6qRC+gd=j7bA}n0JD|%Y8
z>X)Rv6phq_^H3u#Q9Ye${olX_eTe{fWf1z40^E<@ZQ4G0&8y$nwY%uIzXOGD`3q3b
zjX)(sk%X7PX}AYDhwAG0Vnn?}SKvhzB#2+Q8fb>wk$!q%mn)hL%>9O$G+$ALjLlF%
zg19JF1}21jMzAPdf`8%O-sw?pj#^6H!fu}}2jpABoPl<y!~?u+n=L+pm3-Xig#NNE
z?oLCoAbc;!f>dKJUEZ3-B0KA0tvFa3Zd1qU8wRxP?Trtr1vVa2fe?+?Fj0VC$~SRA
zYv2^YsBh`?+z*+Jm*3p->v>B)Rpd5eX4 at xo4<P>#+7TdW?3tLiR+A*pTdI-9j0 at m)
zHij~b%0ta!L{srizqGG{Kqz at TR}>X13c%Iv4nj$Z98{GLYw*({?Xz_ZeJS+}ulH5P
zE(iTtJ6uT5{MED0B^*eX+Qx~aOEqB1m%xomv?ro<yFpP>4ndaMo4@^;Kh*tZii^m_
zla~dK#Mid@<1PhtVk7KlPQp}9c4M5ltzxEF^oQ7uIwf+Wsyv-nL5{Jj&n6#|z9 at tz
zW>>j?M{6T9fW-`wVCQAaBgvET=(cjJphRG1_;Jz$F`KLjaOtd(`jWN*F1dF+o%_?<
zBH;w(^{NRr*%|Luq?e4UjP9Nd%kjx3Fb2ks&+K5i(=uXhfyrP~;XkiG^DC9)NvygR
zE&Lbf_}aNEo-GbBr=zi>ml7sNvM}b{v}f5ND`Z5MswZyue at q3}j*;w;F_mr at Go(aj
z9&$^@3Q3fCZCsomc9(e~eS%na*hz3=)0th{3KS(w;_7zs<SMc(U&+Pz!2*I!kz!Bs
zw8$-zj|tR~XGg)<rjmdiXab{92PnD=SdepIBG1!{)`{6&;cbygZh-T^y)GXOY};h0
zj8ylIitRi*Mwpjq0o5#!_q!%iVL at vjxZgb_G7rsPVMpgvHnnCK%?(muHqU|iNwGrA
zB45ZRDr<mQZ`E<;qIn8tM(G&V{9O{x{Yd`qydR6gGHS-KXh98N79}aU at 4B=0zZ)bx
zM(Pb4my$Rcd#@YJj^n-3KB#oGFu3{D9U-GmkAC#D&OZAymCc367<27rC{3Io_x~Na
zoE-de8v#4Y4!Gw<YqG8H1vbpuVaBK>QtInY153o<mz>0ylkyx>dX431L&0TA3=ggB
zPwm)Sxw=~&)QZ+F(GNn<A5LpwDD+t`rPu||NZON|Fp<faK>Ll<(- at Xyx#vWuQZ67n
z#lGZePp`D}Pa__twa>Whc>V?YrR*B(;sQ7i1EA6Fr{HF>zFOS2PQi@@>I&M^EmY^r
zRaeLW^&Upd;%cx^0XMjDXU4q at UZEph62MfHx09z-+hg9ygI?pdi?PCwdlf-7z~*Z8
zPL_e%j};Jk=^)#r3G at kb`Zg~9RI&U&XYLvImdIGe3ShO+xp-4#ALinp4p!t at YLbGQ
zF@~5Pn7n9lbXkzhc{q26Q|s~2v}&8nIVR<kw^O*uJ9*t`0{htH-0)2jbF2JL<j45!
z))w6sb6a5Ay+*^Fl7Dv0>CFAo=o%rIk}u^u1^s+b^o^J>Ohre-R3vuwmFX6cHE=F6
z#QdtD-#5x^#awc`$W6TsPNkCs7g8yo421D)$P;){J|(c{vY*uzM3!RQ8BGJb2|59n
zA_;C at UXiRQXcq5L!M)AuTViqYGu27`R7ZR~ZJ^=E^}xokFB`%QX%jfP6>l^>@8erm
zk{b<cyM}K)_kpycRYT9{H&Ui=eZD{QCPp;$&f^7;4ZfSjzd^27nO(TBYm9;$Ml_$p
z%sayAp1CG+ak~xBO{e?}9hVbxP7apqX1;~UBILPD6p|yhO#b!j?O%nq&#2qv=?h6H
zrESz%TybU7S=H5tFWT045}~DXQQ<CvPw8X?6zQ0MI7pF{Izzk=Zd4=8SHf_c;ENi+
z-X7VBF*{P*XDI0=03-saKnSLCBD(;iZJo$<Q<i2y at YjSLc{?6cHi6MGc9;*O|8)qs
zq(%%2Y6Rv`CO9qQ*SQpx*SQX1s(33TANdd`&`S3N at 2O9SOwcl;t=22%B;->`XU#gy
zH*9$LFJAA$(M^3c)eKR{$0kV>1h*=~Mf=^7uyjv7mzdM}(H7Ypdu9wF)%5J?UuEC~
zw;?BZ@@A7 at JzyF(6Tk}Id<&ILVcp$A*Y#2;)J8#CkI62-=5iMOdQ2zufZW_XO7A%y
z#x7C%tA2TTz%cU at _Oi7Lgb(Qpkm$vEDv*)2c^rRUtx!wZiMd at -M)!%)BjsR8&2M;}
z#!fwd?xA~65mdL0|D!>UqhwZfU~gETPQ^L!pWvLF^7v6vdW{*$$B1nIX#t^?J<BD6
z?rBka#?-ArRvUunBwMzZ%UDYI{)#2$^(umvr*tjJm!bkt-6AA97dRB2Y_idlMU{@6
zaMVT+*p&_<y3#-rRSvZsI9p8<u+IFNOVMvrvFvXKl$GBfzL?=51H+Y-SS93_dyr$X
zzX~cqb2-`q!rB!v!99_To69t*2y&<*Wn_OoEd*NOjsuVf>I+1;tA!||$pxsV=|30Y
zF7!5saSv;^nKl~~P48dYd4Fbi-34 at V$Wwdfjzrb)>YDY)_OFi}Y9AR%Q97xew{jdS
zO2_anN(=z2?gTKEB>~o%;XldSSINwUd>OmQF2K66dQLZ4TFsZ-&Sp!>vsth#t&2K+
zag29#wHf;1n~<OFR@@(8y;Aj4WKot(bhHl&1#Zf(R5=uvdwLd_CfNR>^Hw*6nhx|Y
z(gfy)j~_5CkBv6Btc*9e+_FY3m;QHN`So0Z+NV72>4M<00OrxmJ9BRqUYh;whI=J+
zq?2>ITL3d^(UBFwHgqiGzw*W?-z6=PHEus=wl__)@oeIb3T}XkvR(YdvE)0S1lz<i
zK6tA;P&CU4t5*M<+nzLy=~>PlEovAOxG(l+Rl7WXeDF>#$k0Pgo-8}cOfEZ;q1(Xf
zRV!H8dbQ^V%j12fHI4}?3RGBT*um!<^qj&b_1$KkGa9+Lr~y9M4P<VQ_pv&_JXRz$
z{3}VsDFT2Kne3+U2;JN&Ag=mHCusJ3QTn>Yyy=g=mNoa=ruA6OYE1Qie6#0~ez!C3
z&xG-9XPof0-Wl+{317%4y)pIt>pm~%r-nH`U?rK-dcp;o(@wQJjgM$~9?n2BkF$U)
zQ4YCNE}I`1bdpX>2bm-Re4_Sg_#M+VF{Bu{P$C(7nB~TX`Ozr9tF1Bi_*XJ7#e=E$
z$UxvC%lR&^_lM&g#e=i=6<@D?s`&cs)BAVm3bx`w at BN@aFy<LQ)2 at EAm>~5cH`)8&
z<v>9}katwx$A5%I^BfiXc&ewjKqm%|x}tYRasgMtO96>b>S`RmYu(&7XNHHOG?qwU
zF*i!`!P{in2%x+=QZ&;MP_<tSnWsqpKeFQz_2;sqa at I|6N!&JH`0$1!^B&qnrB8B&
zTKN_9GjF3W{}G(whJ#E4SbRso)mA-8(vmeY%i$XMmH!NB;CWAHrjeq!V4pG|W8+{m
zITd(B)oH9Diew`02JO^}VFol`<_xWERo|JRJQ{%r)qE?|E!c$^$@&omywaPulsly-
zU4VKOTGX(aP_9{o#<A^@%&XZEw6*;%bAz0B)Uy2M{Q47~p2<&|tB>#TbfZgwB}6S7
zqSg|j_DkE!+%|VH%YfQIz&E7(qv at TIeBjnL=emdDRxBaoq5+&RN^$?}{deYMTGYQc
z!9sC=>Qjjhrr9tQ0Pm`oQHLmqd(^w(MA0=vGhM`GZrpK?t~S^(`+BA5?|zi<;jevH
zgp7&*;=Nobzi_orpu&ILEa$$$pc%N5hISw{go<Ctn2;)2G42{|$Y;<(Fi!}kK2!%P
zc+i+F^(1Jh`6qYU<Ofeqz(tL%de{TA%9w*|m4Uzl>B;15%*^x6nI=e3j$|WY4;6b1
zDe at AXGrQ_aQaRb^%x)PQTF<!*ZJcrO*5Af_rzu!^aDE at nrLDHI>o&lL1vN7<K8%yu
zByF{<6RIv0V3B>aRkB2?!)L?iwJ5DAH>5*pE4DlMVuH}QzUbyu&eiP_yf3=p_1+2M
z{^3*0+D_n+y3<52)2yKEa?D$;jWWqD{d0HR-fjcb`U=+E$X?X>OOO(<Usmv*8>g=a
zE}U8SL(jynedkpsl_h^MoRuVS>KQGMXrUTj7ru~MI+=rVX#ATGsr*A}Xq#9+xMCFe
zllt@<J#ZH{B-7D^%;f_oTA;G2 at N5e=;yK#++K)Dy=T84EMt{Qtw`Y8${}~pbkr3ar
z(|CBbzaDa)1HG|*`C>r!6?pl3F5Ga@$!dd%JdrN?FOt8->8I!|Xu`SInBlTmMb^Ns
zMVHn7L+5AcC#?tPHOh#=L$m_Is_%z0SD~gY+*5Jp=~tO;k;wuLT at Ev>VPZRs9g+p-
z(X&lLr)7EVlPx95g8DLQQnz_jozzlto3NrL0V_%m<5$3{YixTiv?&-~oz)g at wM=Kp
zdeMXdp#0EJH$)a;2a9da+M#b?op$r|0oKb&AfhG(Smy at 8IB+La2I&;w*?Xp;E!fvW
zC3bCS>TEr&uIL_3-IUlF)=r>pPljP!-xsjqAfbbVC$ltBKpPG at hQ_p{txYLDV5I-N
zpH!|tIfoUZy_94gX6N-swd3$|GIiSE&V+3-5Muw8cq)QevcB8)E0rc1zO>_HINvQ+
zbdPB8a%BD>H{WI~w*-}=F7&jed+Qs#a1XleH>j;_p2c|SiMiGq7KuWBD^|pXAO$ko
zJmJIOfB^8a(Hgw;oI3j4ttuk8#4HK2xP>s52fqja`0W5-_yecUK`Qsonjd3+SnL!V
zWc6WisaaSMA3!~h;KeB6H?yT|(k1{Xl~c_fyM&`-ltRlW-Flj((yjM|AG&3q6tm%+
zu+M8ZuCp5Txmo69(gcu@&)M=_1?Y~sodcFvL14+L=H at j_;Ak<+{^jf((5YLD#q4sh
zib(?A6a&~(8Zk&2#j1GI=!83;`Mx{1qH(6RAa46YwxyPAl(LgqHx5y)o^DP$+S6B1
zI*XC}RgbiG at L<td%Pu!f79|q1TjCmCUz?BlbS)mPWI~1U_5?;k{){d2GBjHReBdP!
zK*3%rW|R2^gyL2ftM9g_o8XqG+auL_nIbX84do5Q0LFyp=L7rmXec>y*Gbt<N%eZ_
z<p3)0!`|r#z;>4&O>j at pL+lXjjPn%`jm%E5jE$5zQOlVJNHQ&(EwkLS!@yOH66xg7
z;hx+_#y_a8Ju3F50A?N;hy_0Y7qzklJ-#tX#^Ii89B<4Ft+H^Q?EU3vTw_Lzat6bz
zyqXoGoW;(~%wbVUF!q2_!iRO348&ZKC_ at 0C6N$m8%$X8C=8DQATI$m|z+vnb>66Ce
zeo)24O%=mNm_um at U0$uzgNU8m8zN6^G|imaVSJ@;Fs(l~9v{o7*WVkDdpgaW%KY6v
zwSJ!a?z(zg%w=A#oJd}~EPr69?l at n3JmaN4))#k>Z`&z+G|&C~mXS<Y$DQX6wp=}l
zsBwmKEw=RDB&THutyI&#SvKXY at LSK~l1+2IE730B8fM`Qyq3)O9lNf?I4krgeeuAt
zms#eU6Amf%x2pS{U`?M0-o-`*uK at OaJJ0CN{O}2LQfILXH{@87pLw%l&P}z1iuyE*
zUofxW(l-k|ay03bh3{BXcOl+<hT+XhqC9Ik3{w9=O|0_Gbo~}T+&Si>;dtqpSd<SN
z&@osl^&4;VMr^bP|BcAv7vSY__{~^o9i-;vXwouj3Ru&ilpbsdl6&DDeU~5Z9*+-4
zxYZ%Ld-!uhP{P3k_hR&uD<6;Nn(6Z(A54Dsb at f*h+h@$P_w<^q^W{2tT>sa+lb&Aj
zPoj_M7frwkI<=+N=Az$*gQ1nZF&VXaX6)~FospEwxlS4*&FtedkFlRTI4Th&xJdX3
zKF|nVxRoWVpvu)Al#QIIvZwP+A^;M;-(~}UfqFn&f`>xjcqrMIwSQ%!jQuTNc9^;i
zM^TQBX39W_qT4cfMFKq$nrBR9Ir`%ehPMTa84s>R at 0aKZ2E~9u11kdAB9Bx};-2m^
z_o&+vOP(dr#q7D5->R<TPpj;I7tOZpS27|t-$1(tKsIG+qM>%geL!s3*s4CqoR^FF
zJTBlpH at T~_yNv8W@*bTCmTv-}#%Zx#wqC|S_YXV}H1$pW1djHOA>2~8yPYJuZbwO8
zxBUR1?3PvtDB>fxCa at sGE3)zoechWy{xWr0=hMQ^dZm%;feQ(F&7X&bjL?rVN7bKj
zU^U$DZO*n)alW+CMg>g;n44(G66PWMAhHuPm#~lg35O%iLkS%9gcx_C2h~=C2?F-j
z^;a2w&TdUy)<$lwXbT+@!?G;#f=TH at X-Bv=Vz{vZ^B4KA1n))qflZR<DO~agxv20<
z7%z~yB-LoRH{!tS*nh)kk(?l_<lM9XZPo+lh?KnFBjj{^XK_*QtkmCEF!%-J5%^Jc
z3PFxb;pY9Wo!(p0UjKmT$?3SnPpNWnzSiZ<dQK)0;$$~$zY}-QFEf9%DGbqmXBl#t
zAjldRf(Wj`#S}<z^Hv>+QXT-d%2F^+Sp)2pwLqlI2VOAkET{rz%JpDM`eGh^KCgwF
zlDB}HlNT6~lI)rKoANU-Nmm58g7rX{ISb5%;T`zw1fQ*8Wgak0fR%W{fE=M>!2vJ^
z#{Mur1jYfdk!diVoEZ*eFvMi81hFv8fFTZk%ZG6i%vZvAcBU&0=E1~#n6U_kj7%G_
zGP4Y<TI<Z~mM~y1t@!(EKj<hE9DzOXI={)kj4?;B1NeT&<nN!imUX$s+`OC2BgCW=
zA#PdAt0x!3-k*m-3NgUp%gISFy$52(89wv4QZf}jKZMU!Fs_7wc7!il;fE#g;Q at TH
z5I#SHA4&+W(?sEZ at +QoC0|O1;_rrI++#ILR``aKehagto_P1fG7Q5~~{bCD0r)8FT
zeT%NY?LZN5UA*_<Nu{smK(pKVtId3Ht(kTHn$i#KhZyit`f2tn-82W4e&_eoN at vX>
zm^c7?H34Rxgy9r?J_!SiH8rq+7 at 9O!o4L}f&5oL@&6xBWjIT9wK{L#2hG`hi!vOBV
zZzauM=bypx4LDGA(aQfZSO<q~isV~}omBIuRWkE>QcH+y1wt(u2|Kizpb3%<d+LIf
z=V at TCV_;@I?ClX4ykYt<3|_F;dWfM8m~MypOJHb&X*I#^)WIMixT{jRDV=<nzC&>P
z1X%g1Y_7Dk20ouAh`!OVv9IeG=^p}F`aTe&Jfd+uuz9`2{RptWkwtI#F7q)X%DoB%
zDL>PU&z!}GPJ0YyDN8jr${NjB7;IsH6s)mRuGffQ>;i)iti%Jxf$+PjFa*K01O|T?
zAQ5T;;I~s?g9)%fdFDz+1Pqaxt_&HB<(c7(L>Lq>Ju8iV4CcRB#LbZqnAXW`&$Am}
zn7xJoBrClhZgj7@#PzoU??Ir_VaS2`?<#$F=fi?YFhB}s%+54p%z+Kfh7HYu&nYmZ
zW|lD)!FVZbBpb%>!G at Q^cm at 1+CCpn30|lSg!9deWKSG-p08*8HyR}NU-5ZsD54B3?
z-J2i)n-FoO*?>g|2>5)k<0EcPr)9lWjMwvxO5c>z%}L-Y{60VJ63BpM%VF3KpUYu@
z at opWgHw)H(K<P#tQo5xaQ2M1nTHC!J21tAl_rng+OJL!p at S_?SPAey-)WF71!h*}1
z7l8U^xwO7{fu_D$28nM0BtGf+s}P_S5CA=lS9WaT=Bzp!k&|0Oh*y2c&mmo5ybC@*
zmy4+r at Of{FxFtBX?Z$29(`Gri3+uZJ>w)1s44^qJfChOmaUZ_84`1Ae4LybNQ`itH
z&<^w4;WG^9VF29_Fbc*!Fuw=p_cTYG?}24r!}M!d=5?em*r+UJFk!%zH4HNtI53Qg
z^alB8N1S`<dKYc{<_dKhh8ZrzL7FGp at y{tghAGOK1bXSNTkq0!F)UFeD?11^AEG*C
z%k)#9hhA7XE}k1ISnPLqr8W+2Hs6?5kov*oIOi#^;=HG<0t|9Hfjy{MsQqhQlsV6f
zBE(*+9v at O#9L5NTeCy+<ibAg}94GdoJFDXPhDui%E2SA{u|)H|+O!p#v<Akpum*4}
zoGgd at +T5kQ@W)=M`)BK23QkO067hP^^eN at jdVdd0I&glG&GDr{@x;1vXnXRwK>reB
z2ddmw(zh+KcgwQOf690)Z4ZL-enx+UR<^l<O2V<2Jr$*i?gXuk{iNQ5mr7{&<!+sR
zDktdso2`Z6kv!lvDa?L0gxpubEr?zb2GaB%^LN-SkJeOYZcROPWbuXHT|+NRF7d!L
zR#yG9RZ_5_O)fAi8*lA&+uJ;=bQ~W_QP>~?G%S at QWQ6DsC{@2OZ7P9U%3BHIutRiz
zRa$~?b4(@FG7dnktyhy{60OY(Wkie{(3*^qef%3Is9W&6uQBt%6GY)XQflD+(YS7<
zHez$d?~~<<SC0>7cch<MxFY-W&5H%&Ty7ShT)1w%IG8Hs2H(+X76m3fUrB4sgDE;r
z99)=QlIEe%L}hqm_7+*#wCe1Vv;wz>uVI?oy3_sMti at p<G7H0C%!EV5*!Lf83Ym$y
zQI1^8$+~zfL27Yq3I7*sYDa+osiX7RZ2{dDQJXGVl1gB)PrW&!s`0_=wg4yg628y4
zqH^3a+TCiy#?%Pu%d$5t$6obPQHR-%2%fi#_S%8^QHvSl>~1EUTo`)y%nSXEVEiq{
z`qTZvxSGlQ-C3`mf`_oQ37aeQho|7q3^)C?Dfnp-)Pz%oZ<-5TQI)DG@;aV4ldF}=
zyu=G+?~51dcTdH8t<PN0svm_qpU((l;#XTTZ8 at X#$0hiCOnIGt+%)`c#x?!iY4}ep
zM6-HnC at w@V=7-`Rvu^+Xb*Ubc;&CkPbog$r6z{T*KD1NZUm=6KENqZt_#$OGE*>?p
zIn(3JSNiSK at tHEDJq4y0tSokMI6W!Man4;XxQh0`?d?n4dC5V=u{s@`BHk_o;xcyh
zgz~~LXtIsHbl(F6Z;xhQa)`w;_M{0|`OiMq`-b68jF0rOVfZ*BcuT`@p=WH^j<Bx1
zkJ6U#>xr!S4R7{M6~B=1RGh?C53a4g-perYN_+H2!*H>yrDgsnhoSlLR<omwkPM?A
zMZT3b;ZgH;|KIifVYn^pa!pf}UKoxq2)SHqdu*|w+T(I<)2_v()h_6bWFyVb?E<U?
z<xW`p91M9nFe}x$-y)j;OQB<eJ#!mgUANF5564{?`}DWMaXa3ne?dc4F9R$H0DS#A
zUH at k|PVm-a?yH+a&Lh%Z$ZYC6cSP?Kfsb>1pp9e1s&|B;bq3 at vEbbQuexKU2)G&;T
zBJeCPZEaK4YHg<7ncm&uS_tCmD=>Xwcciv<_VLx1GwmieTaMP&*q+e8jKCMUch(Ku
zL~<v^R`o%{tHO)j7KZp?x0xXx+ikAWQ<1nM4Q;E!i^f$BMZV}@cF8*Mr=tu*aL2e2
zT1lyj({#dkAf{LW-p+H?#(Cs`2>gvP-*D!%jMt0qj9Axe+<b_7aI~*CI_M<e1nXkm
zH_n at g++hy9d!N at Lci1@<+II5h>gvYDlQXk at ET@=Ud}xPtu?i5Ko5xNF(g9(VPUB&p
zcNUvhxee6JC?J-_^s~?6$Ld4VInsrXE%fh5uyUu!v`z2WsvLd~7FLqCCva|X!F8zf
zTE1f&Yil~lrl$1kqHtG+O20P>?;vDrisGolXPW)PnQI3>k;}Q~%g?mPVvFMRC!_I+
zbOv?7(~G_Zh?Y*917s-}6A~&W$R?3nq!^gZpa^fW2>_^Zv#SJg2dPt at zN>U%cHYXi
zNN9c8q5Tt)Q!zWT5i`18m4rR{5{6uYO`eAFWTTrAT2wab$Y_SoCYav^V+$DP$*l at S
z`k&|Hwsddvnx3FQjB~{j1b*utx1r^j!^V(Z at S8-)WT(UUW+?iVvEOhnVq_^`w%&U9
zA~F!TsJ8(wc?Y)lJz7&B*e$m$^bmf}V1d}4{1lRCm#1&?6V=%PnBPM1hS&{`NYIpG
zg_xU{-4?EBU_w&^@RWhTpVR^SBA(@xt4{GiyvaCp at H-+e`y at U8rRod4R}8d*$$tYD
zB_LR&0D`&!g8I1(p<;?;HUz_tt`BpwK1Nl_Cq8PmIo!-Vkv2){`6RLwvuWi$yrAGR
z-N;hRF61 at fcC9_W9Cpb<eM`(Ew~Jg2P at Du7Ft&%W73!|xU5(-0D454bKgAiNEC-IV
z)xSk_WO5aGBv%1(&&c}##*;Cus#mTcPkB1`haZfC1?++a1jC4T7?;XWSuaUBOqa+;
z!L+x;4yJF#+lKCeaU$j&Sq|JQb#3dYd{02>Jh9~cqWy)g+K66|0;!W7L2afT+(?Kk
z$FD1hw#a#w&l=-7ketT`+d5b$T=;$?S{eGbbJNHB*z#)9wucZjV&>mwwJi^QrShqJ
zAs1Iwm~LOdMi=huogM_ufvaLr-}Pafk~~=86>~oHu3OaxpTx=B+Ot(+cJeX)e)22J
zz=z4_Aprt`FTI2r<|HKU!bT^n<!JPUEGIUzrtF4gW!1dPH^{_pwsI=)Rqp`yRi(z=
zQEUHz6X7!{AcF!xCs*VbTn^(rV4wHS_PF1hvP0XNG4l=&O=^PiRwY$*RskqhbX%fB
zhm!nrAyIW2=ITEdPtI->`O$C^GJ*gY#Xc{(dpMB3aZ0V3-tF>p*b?PB at a4U_>aauo
zRl&<ac2FtC37!rXqf_pIjwuh(DZAA#9k>!*f_?9T37mv|>G^1aFMAeH{En at hc*%;j
z-M0dyJXji1!}(_A&R(Yp9RF~$8Lxksz&VpVfnz=S8n=HJkM1 at e_{7Y^9vg4Is_Z%#
z=~Y(kk{u``#!OH9=)SECe9&|p6`mV1XRx5D9NHC;G@*RsTA#8r{RVCX0YeK^5*<c#
zxoJ~F)0vr^qFAq)w=DkE5q>;el8 at n{@`Tfd15HJ=;Z`Siby0=eBOy at _DN+!nV>rTI
zanRUHbYm>;qu!Jzj6uDtD;r{0oGQz=O)L=t;vQQ0<~@Y1Q`0Ukc;+D$cV%6g`-n?C
z?Hrp@@7UpB9a}TBgY0s?^^tAkTsufVF0diRU at XZ3wxk;vXL6)*b^wghJB+4~1C!U(
z*ZT`%e)`|yaEDo;M~CrDIpiF3DjX2aeDf00k6vgm(Lrukx~93e<jh?-mHk`MA>skL
zp>E5FR^5m8VF&xGvR|wtg7yHjqc<Rrj>p}lp__*)HtmF%`nYG}aJJPIp@|Bu?3Wb<
z4GDx|MLbYdt@%oSJ|4IA(tK3t&PvH!JTr|PC-P&vYYHI!<ON?z9^bB%5g}Ks0T~u=
zuBP?<@%UI8al#tN8dzcxb#j0;<Y59h5M$anBELui*v&M*QATw^F8B&@Z(nnDB!FBP
zEtSNFwEZ}I5T<bzw{Rl^%)^`w3~<%(_eLh!S@~&{f#aSeL^SmZfV`acTty-i7z*=&
zopLtj92@`};Eo*O4j&EOs=EN%BI8Ge3KB-G77yViShq`{wvsuAn9D%n0i&cgkk}1G
zVGb;#v~8Q8-M-5*`{N2*e*w=7YOBt`t44*z&tLPLqmy|(t{mJwj=%iS=pWZlO~Bu#
zANqT}OAwbA0_MSu3#>MDJkmy*ruM$1v?4^CueP4K<zD*XIMWEiSvVjoKc4IU*@t!p
zNWFU|hHZjMJx0`{6MCOjm{t;odb*DfDxEr8Pf?rEoi&&l(g11R&Wp#6#%ZM at B1}u!
z7&AFf_T1mckK0Oqzm&PH+UG*(D>;!|&FeMJOk<w<S2^MImpqSjkmO#f8EXPGS0D1c
zBfU+!)iFVX&aSF=I9pNWzG(Y>M06G&P^>7RiR`9O?(hZezWl*^N#BCvS-jd@>Ycaj
zaAFi=?zWa7VL2&~vZ+teT{<Z+7Ww&ygF(|}^&cvSMSGNhtQr#t$J<9R6>w(NVoW$D
z{OraVm^F+gIu*94NyWB!q+%CZ&~^2NuJYx5Eg3z1`PgVWGEFNf;q at XX>AKT!Ruu{T
z{^ZL=g;ioGyR28_Eju0oc}=9C0^ov5V0Lf|FoUwlqidn at Od4{jqw~)q%cef+hoN-e
zkH+=?;(-%lLF<9pF-xyM9 at 15p<Uw4(sZ$-FvoK$z4bF|lLUJMNkANoSlVn%x$yWaD
zHgZC=h4<2kYLTC{jg`OuEKZUE-8EOZrtyb-XmFJwHxQUzj<l&Tv7L at EO%%nDLC*hX
z3#Up>?9v$PvqlxF3sGY#pEduMix+D2qZGJnYBR>5w#bO|Vx#W)^X5#f?c*7&MLWu#
zC)bv~c0yZ2+RwBhEjL0J1{UdDvDt#R090VuUANCXjQj($ysN0D;0W?IF|0O3x&Z-H
zqO9Sxx4nV^yU3~fLIv(Y_e6JoA6(aF6FfP9V2zv8OP(Lc at trX(Udc6VezgcbM|kHg
zZH$O2wSC)nhI%^8cZK=mQ9k*7w?BO5!e?QS8p9MNaHh*~V(Xi--CG}&?TzGNP&4uL
zTvZCZ9(0zSBzf4FkSSs>3M!Eb1=Oc_7|m1O!l3Pr*~1ts3WAm1BG}1EHv5%{00i3;
zzR8hgI^`{xrU^GvFvGbweEW=rn`a3M=R$U{7b((o{ZHw=)BAV at jEzFk1}bJ2gZu>}
z`p}&$<DiN08c~sh+3>;Hw$uCk41Y^Dxq}Aa at Re$-zr4If4epidUO?>}+63}NL^Kwd
zJ^%eq8wb0&DGR7`E2b?E%$~N=;t|q3>SeJt1NRpjmTV8nX4r*t2k!Yb%&p+-kVktC
z%cEiDExIuQYANg)av6XV#6p&`U>yt;WD%Am3DDAgG~yD7QZ9dE_63^xRcD6C(Y at xS
zSp6%co-gI%<TEC<2{yDFa&xqvXgd;!FLrf1`3LbvMV;1|`3z at _U%c+-pxq}UuyN1(
z(!dUOrV>x22O*%s at Be#9R;nD<e2Hin@~Oi{$oBE?*9oSBw<#rX%*)VDH}wMD#mRKH
z+B&cDEQYQ!6|tN8-rVh(cvWCDi8&cA_lgw~Mn;e=o>4Q7IVpX8L~m-_@(i8Ssqja-
zclzMY*r!LXs at vkRWwS@}uUnfAE*}*3qrux`4#PWnTxvaa7xU}=;@N$}`W8By at sm;J
zqUQ(b`A<kFatwDbbps-CSiXr7L-~ZG?-0}ErOsDWp&oFwGNNnW5Su?5$686+HuHv~
zZZ)C8|C at eL=Fj8t2Lajw#lhT$7lr-91z-Vz801eo%bt@{^rvRy-VCAs;cQ$$>r6K@
z)!nEySNSa31I-8<IY>UtKDc5 at e}p)l2#?m85qDH+Mf1l+dj+oAGMyHvycTuF+KMS=
z-u248SE<XYkRSdNAx$23+4wuQiFUaU{ki?0oN4*z_r^S$+=2$x`0?x0nkdsbykdov
zMctMYd7pE0Nb3olWC^oISp&G%&b(0uiTT at -3jz1quLkTq)BIPdxow+I!wtUXu8C`+
z9iQqWGDf9qdx~|d#r~w(7-P11{h_{pK^+zi4E=e}#BAHY2r2W1*M&dA9<OYVT*^<t
znXcHeT6A;Ho?fX>nI at wzzrbsWGTC*Bvd+iVoL`<7Iw3Xiz4=+4WuaVZ*j)IaHCk9y
zWm+$f#um*+2iKB0a2{F(m(YNwZiaG)X7u4)(?B9ARy5Z6yfuU82!mDI6vGYcPR6|y
z4&32{a5>*>$MBm$ik`?u|92iYoth&fltOHj;VyTqsZVmMXQGmiSxHI_XQQS^(^)c`
zV#SzHq;VTE;4`|VOTfpNqLYtnrVc9z^Kj~>jA{C=SV6F<GR*z#&Y^G4B@*lhthw8%
zM#EyiVHy>y62+^yGOrbi^-Gl5;2?FmpIyww%!|rJ#5A;ROMTI>2x`<(_Z^%be7i!@
zs;14T&0?_O%Vekazs$c6{xsd;u0JymA2-e7QGiP=nFehb%uiVgAbp@)<5b=j=@?#|
z!%ELvCQrY(H0Wn2ma#ownD!>dW7(zAP)E?)&c|ID&H9k}_*-wgQOSdw%?}LhH8;8>
zptK!OJnhLQfEEJn$=SxOg>A=0uKNA+aW~t4b~xz&J0B;QYkIc7g9p*>ZSSjn#r9p%
zhA*ceg_tUXU#@_$4HQg!MEf5>4R76x=+l*L(7wNYf2 at QzL?PQ8d<HKL=zL<hDh>bO
z7diK2rpmRU at W3mPUD%=Go85M;>VEU9KZ)*HWMQGy=4uNQweSbX<;$VV;YEJ>8}HzO
zQsz5pMW at WIwn_v9p!86EN<Yp~>M*m_;<FgyDEJ*2K=)Gg2Jf!le7jB?^5u8IXFmPz
z?Oi___v!1U3vhdjTVi|UL(r!z!1<F}Z=GovbdYo!9V8^Fvhleh8?9sk0Sr!1wp+v4
zVd0fl<T$aZx~2bk0q*6qrswSd<c9HP!Y|w-`50IIq1ZkzqAjX*W6#aVK+Fvq9_+li
zZISxk1-LJ>|B~J(8Fye!Xthkz%aY-kKGiQx#vMH-w2ofqpAO=RUc%WIR1ct)X(fKf
zd_THHYWq0ycD~aWmg~Dd(H~F7?acnP{#9R}j5|duzP<XRu;jIkuE#2{Ym_*#6LUv<
zzCT>d${=rdTT$CFcPo{orD!{5MkS)NUeHE|d9CU<mLdT-)KX#G0k8Lc7lKAL>*v3V
z`_O}jR1O-nimT|9MB%~SXliq`aM7I#i{Vq++HNa%kf+BPT|t9_33Ad0)=ho=P#4{l
z*7NT20U5FHw#BYUH_QfFQDdML#e}g1jB)>!AOps<b!-VCq9#KuE`ijShuOffv4>+L
zqPk!_hY;;bw%Hizh1ro}%q}ttbB~+~ETYOZ)`}7wG;i{Brb~%X>K1UK1h7n^ryH$<
zv!xW4h2|KA>I&?3gq9eXw+WhqTxiNEFgF<6!`N3*LgN4(I#RB{T*+JvgAk1;OMw-9
z=>%2$EEs!8t`HNcS#mDfAtw}duu{@_B9$xiaxZ-;Mz&>=0<(r<0I%%QM#7jA+oZxq
zJ03glGPmK)-f3?xK%>1rNSN|;Nb<?Kin>H%Im=lXNMmyD`p*U)t|oG46V^G;KW~qW
zgogZ0AGwrls$f$U-Ry;vprMrLNzjdn;^i#=;NO2!oxS;8lzcghaDM&ZV2n7N2v-(;
zdYZcBN%X6#-i6p9ZhjplMeje at V|>43!KHdhnMxR#v-SP1NG-CvW9h<6z0;{8%fSto
zNa6E$<~bfO8_D2amqD5FuVFI7&LA@!q0GQNyfpmbbRtt9k(%fP3P)U})37==Ok2Ka
zjzQPMVGzdtEF+*Kr^6Euh>w{psbm4D5wC<jIpDuvEk{^^^R$T&p0-D6Gz2jH4#E;Q
zr|uq{yR#Fyu!o>-K5~o>q`yRQC<E4UYMf=<M)K51C#m`tdhgGz`vTHKDGf%6XTb)w
zD{7FBz<|d5oYS7XLziZn$8F1_<T=!x0A?p7EThL1*ck!*yastq2hyj9o9>a2!qqHK
zZ at Lt*W&}6{dJFOzcl(Zuo49ef|A3^MYB7fksxOd}VPFgqAoiw;6}O;u!8Q63P+s%g
zef6e>o98~RhfE~Pn0CD?X*6Qs+>xF>Lte#?4~?<&j}ig2KLce1T9d&;WB}c7i*_Z^
zNDo`~YRFgM^L@{6aQqewitYhs9;jEj#*Ei2eqgcT;L*qyX{eyvR-(szRyjC7Mdxd4
z-|@Mw77{G#j>ymLGp2X46R0srSEwLS5!h(TrpKE~>SnZZ>GPkIgw&s2yF0 at 1QN>%f
zNGX5zY8^NWr^#@={M8pjdvy at OP`5*;LW+G?ADE643X_r3mjzX#1PAA<f~6vazeKJ0
zSZL*|HN8Jf;Gn)If8xI%f-nXue-Jke?o`Z~OWGOVwNyI)m{bGI3^z}3^#{{&_xMC8
z%>FQJGex^~p+ZdE?eU{-pGB8%_(f;2?a(cFkJyGgXN``U%kfxnDp*uIx8e1Sr8BUS
zoTtf9uXQ~2c6+2=xCnpCCSy<cK7K;cpne0 at 6#arlxEGC_aEM71o}0kA{LP0ukbzNI
zV{%1K;0&5LZ{*?yFn_=^j4tDUHg~{W;(RlU(Q-DVp6#dk=n)$+8s|YqgO0#|w+u3+
zMa+XRj)rkfGYi}`I{Apj+?L8U%}N6Js*gdT_HP+6+_R^a3waa5(>9y at rS7FnALK8U
zt@${|<S!j`6={*Hh$$YX^b)H+Gg$ZV9q+k*X$J0O2JxWZl7agQQNInBRKcdsec3Zn
zoXvdy`rP%+`kNU@`|p_;_V50x?0|J%$eY;yt3_G1Af+Bo5VL2E5ODoYi;-&PzQZP3
zEh>SkCH!teBQ|=5wp)<kYQ2#veRdyn!bW$vX)^mhgW5i$sjp9mc3Hy-5d`THN=nWc
z%-pmbHrKFm|6*@+&~9KO%*005I~BNvR`%pUb9x-2vgPkLyxyxo%TEjum20G?+&s)0
zQPNHyP~j9=uV2`hw4F at CMnlm%rq<!jRm%R&RsH!)+}Xa#`k{>=TXePg&Fd2N(|O`5
zDD$)GJya}xPbTi-_~pG-)kRvQ0y>1EH8AROErYoG at HJ9B^}#AU(dtJTA-Sx=zu9Q?
zkmxH^xYJvd(3a$5f+#)1ff~Kj0jB+xftX=jAN+dgfbj?=I}rJ|QGY)=qW at Wii|7r|
z#Mo*yfauFT6TSH3oFpYfdY#ekDTvy~x7vDD07bxeDxX)?gZE}TKHg!xP15MHGHCz9
z&NTasIC!}?>uG&#qcfYjBlf0FhuY4R#O>4<WZ}F>$o7?vn42gFJ5XEkzkFD9z2V15
zqt|&+MMD4K()4JYCZ&?4|8ExV!)^WamxhGA`+7LdW<+Og7VCwJae{Wyh(1Q@>)-(x
z!wffHw{4r}AA>V|*cL at Z8AVRc55L&Xdyd#l=mx{#gE+KsnQdY4E--U1i~O=XWkd)|
z{5JXhQg7tgx97@<n$UzX_I#DYnwCM=H;rzMF#qyiXz_3%kvp&91>w%`4I6)_lUiOt
zv^V|Dp71f@&*8Sk5p>(S;ZB(+-OK^fHAlBL?sH3jc+0Ee2y*YCqrESy5&@KM;6aIL
z^;SPgjZgPfn-*n?4nvK32mDyK4M;vgmo9AswI7MLpjdKHU#-R+xCyP%TD2z>xArQZ
zv{2?AeZ3m at e5<-YrhP`={Lc2ns*_<EDLsGC+p?ebTL>#DVQ4+`$=B5iMHaE<YV=MR
zgRZmfGxWp~d;=Z5T~azNl(Pehm>omh{ozUDJvjULVMWv*J#9w=+UDJG)Z9h8^haAV
zwXP at 8VI;e5s<eQh*wv%XFs%!W-+-sv8YCA*T;_qJk*q~j6_+3F8FzfQgYXDUv)*m}
zy86t8q{B`-_th^Ljk(v-JJah!E8ozZOK&<jMN%T!(|Uj09Ip6o at Zo!&p9x2EbeJ!?
z87=IP_3`vG{W?xbvfG~El=@xoMddiTS#LS&-!{*^Ml%LB+8`1$4;0HW_ZY!8uvT+0
zYF=ghXrqTG?UQ1~REB^4!u^HmQ7N<i=cebC8E;mh9~?A|1ZIw|U+YV0c<tg!Tt+X4
z-pL66aHbTIq3Jos4ea+wVM+&&g_Mffxtrz04};DZ?#jHy(6X_Xf%noivQWWd?79Q<
zg+~rEOrmoER3}u>1OYU2RlC^!rH2eC-I-fVA4zm6?A(9Da0YU|OX!B}#T;t%ESA&g
z1=~q=iwk8{ZDT^Y|4OqIYny4{0f4=~*=;;RQYD&zDCFhODxa;ZG?`R$k53U6$_lj8
ztn^6PAT8W?D2yz{yvp3^Sp~TVFyXNb{SuESz#QGljP^SOI|4wJ(T?{{_U{N|P2AeG
zPo9&T4<}ct&>Y<yWYtRldTx<CJ#Tzmdf`(@vi35>m8H2=7^5$r%OZmcygV9#x1<QL
z`l^HLm)LMwuWy3-svyfvEnMfP<P!|29nyblrF|^d=Z&BL{w|O7`tIDCpUFl5vKKS>
zq+l at zR^Ymil#{SPJu2|AL;Cq2zn8D<8b3d4)p&GzHs1eK`To_8wzF7;zjO<bwYAww
zBQ^f0EFMdE%lcUSOfzBCT$}ozKeqn3JB;l5_UW5%io7v1NON=gFmXG5Gi^&muQ;$d
zF9=}Yb}##-=b}EVXuMdQ7p|3lae6NPrRSN^&=``b`vGXt_Ul5;#lh6302ilgs;c6C
zF#*3z`J!g-s4v~mn33jSOl8wtbM$>+ns(*UzAdR9VL*1>miZiEm0B+&ieT at n3PAV6
zCG%ySNwKuo^>NIOkh=aI5*{H;{<y!Clb`I;N2JvEDEXC$!YgMY3YU7oG4 at 9kel%8^
zzHqY)*jIpVwg&V--WH5pB0pK9U&~dG89x3&VmSWq7{`A!@OTQp?+$(*i{%MI&l}tE
z{98jI!yEeTLwS1ck@%o#`qE{%kVaLm7+IxLh2~G>B|+;{*)<qOmGHbIw%fp~OG`yF
z<_N9r^JK(~*-J$dUN;ws%+Pf9YWuuxV3#FvW0 at VyFM;3IEft}w^ZWFot+{8O+zp-s
zK6r$s)KidyKHB8{N7sixXZ4W$O4<ab|4P>Tve<4p0)i9+Yp)NhM~&#WtIDUrlle)p
zO+8Z0t)G^T8yDG#jk>wBa;;<s*PAT;(kw3@!*cBb!?Oa6F${VZgfD!5Y(nI$Q?O3H
z;&Su}RXF)@nOodJ@>P5Ytb;L5e>Vqzi|&p-stT`pD1n9mdD;nEV#~EBOBn>!#I>hN
zW3egKi$Rf>3=45h at DJP9Ulj~7UA<_3nB%xvzT|BgR@^TGNBg$RezFdE0gVZ33mw3V
z`_~Z?dnfNR>#K3d_gGow)t3L=;xzi*G2N_Z|9%wR%ao>GOPjf<rTI+{Q5gIV3;&5|
zYo8O!8ZMO{pENpX^v9OtUd$f7zG*o=m3gRG&tHKjn>jE)(dVwfovj8KhkMO=AH>h~
z`&Zyztmr<Di~i;cD3G0O9-s7mYPj#QHm33{qZUr9i(j?YLF?Y$+H=`Ps5SYJvoU+N
zyYycj;hI$RJEtzSCN?zPVx>eEN(>$7aNxx at 4)fYOOfz`x+pbyv8k>ep6l;*zv3rHr
z&2ctR(OS)O*jssMB9}J&lqzt0DsOg|%%Z4VW+iCE7)7T-8Aa`(?4plDEsKtZn!B#y
zYZsObX$2;k7&u1d+JGN^2`R&+BaFX@;$wKL?n0npvl}m=;A%M(!0!GauWTEr6cCs1
zL*idmVx*eDY?Y74Y1(-2Pq7U)+N!nxTX!9U39XUD=o*fT`ivB;{kKs3=jU at hslp?F
zDzqt3sv9e8*`II(Vk5SL88tK4VQyIR6y`x_Kqp4)%v`>!xbUoq96nZ48CUt9Rtaw5
zCm~jzcSVMT->n#MuIZQO;+~F0{YfR{9689<WA5rWbcKf)B)DwYV0CEP8~w>#+>P$a
z=$<Jl#mv#J2eBV>^$ZL&Q})}yf~oX*j(LGsf*W(=!l;QGYXMPD6>I~eCpVN)&C at 2%
z5X*?Ji<)Q?pyV^mJT!gODq~&7;e^l2JkA0R>O582bM<P4^V3>I!|NhJggkf2o3#s<
zOKEQIzbnQ@>_12B{(vRzJTuo3VFO|yx?TWvAN4j6$bt=J3^jx>0xJ$jcN0;g0e6?1
z)y7xT*N4MA1^R`=a9XjpJLh6 at H=?DDgp9QOcmBK7e6=%|cuU~K$k4^ThrP2<hGnLJ
z=}oWhf0TJ1NMi(I`{bqHpAK%DHo>5a4m5&#pA)7 at SvGs*bh%zO(BLM07m53gw}lcc
zd}jzKNY1d at q|F??Bf&XLi&$~5qlaTsx+cxADg#wc$$tIJJY2;1N&j9R?rDcS at 9Qyq
z7G(bkj4*U)%z8q(R-r$ZhbPe!%0HUzWAo-l8b&;&MmunZ_fn?*b1fzB=KNms7r-8y
z0PC5k(yb2;j at kxl%nFEQwtxH1x#;>g!DJOMA0x2Z5KJ&~MM0vCR-U0hMCmjZVUc`#
zKcwyeMBOLbR6fOD8yL4MDFmSH4d%CV!m<KVhY at fVXxB~Grd0lj*aDNiO)>43;n-=J
z(ISbRAspjY#dIEc&w}s&5OKruB|Cat&_1K<DFL9C<ZID+TGZAmrOIc^ER9MunYP|v
zTqftXIENhyoWxo=#y3twm7 at J;@oy{3F_*VLbw+7P<foWR$SJ5_1SZ&yS-Wh5IyMF7
zTfW`IJG}IRS-_h-$zYRu8L|5dUa#SB)1N&PHw$Xn|BXMq3^I6r$SR~VV59fE-|*^M
zO)VBOIe=N%04+RPT^Cp{NM?pi9%ti}B<ALB#{K9d;FfGYapToW&>gan;YJFaiQ3HX
z%eT%c+YvHO404akh!4!I0Xcmny8mBiUmDlc(LH<<61WLL5=bPV$R&hDTnI}PeF#Jl
zxFAT_Tx(@924ksKiPq(EqXGgN5hRA%pjJ_6ZLMv^rHZ1WMWt1FL at O<=h4#^g`d3jA
zBgi|G5Ek2hc|YWrd*{xaIdkUBnR8}2C-ygmOM5_bfAI%db}?f?z9ObwjB5x(bs0ec
zOi|9VB>%SIRB%-Il1X6>H6^=37=(;zw`k)1{l@<9PUYmIeD7n3^)Ql7C at TxS3CS75
zMInMB*VgJ%{XIlVl)VKsS>d~C(h$tH^7<YKQ<aZ;y#><`k9|$XL7=d&mER(4!f}yc
zxycXVo3<F<SqiTfafJQn at Zai6x7*(xUqM+>kopmd5h-UW_76fItHvVEqdu&E0^hqQ
z<fYpy`fm_h>nMa1D(G9^{F=E-%Ki0)O|{4a2)aBgYW$>&$CHn5vWns1<Dqw#v{NLf
zXCDWcj1Rz=KE`d2;UdT)cukZIY}!V+!74$C6zE at v;<ILcUV2xf&6kXFHf0fpRxN6=
zsSd{2lr>hLN9eCe!`E1KDpU0cP2Pgg=X<8<qw>|JFrOwDsa_ at qEVn2KO=H9FHRSny
z>P7-Zrh_Iuy6BH;ZCDCTr@{~#QEKK^3&%H&-Q3#H at MYlu$J3#tyRHU##G4DCR$&Hs
z5$5^SO#~R)(L5 at yA23&HnLpM(ws5^eRYya0C9IEBVew+f&4d$c+PeK|T%rX$r$TOq
zTy4J3##s<hSCRzMZ-ehC14Ay|0a?3nfz)*IR)W&)tIz!(9Mi+qoVEDikoKKDF=2DS
zWzfh(T2(i at bD1g?!Bhl7`hr6C!cVF037D+<WrnG>#=+K>q4e~5&Hb~kn_4m`E7tld
zd^I=JOR1iqwPkVsF?zZ^(UQzky&u8|utIR=QwbVbi-`KDSR*Mz?PfWkc93cw<J-T7
z=h1*|;R^$ebxk1Sj<&I}#!>wGoAS#_YUJ at v4nzubQeK8Si!nBo4X*(bDQss+5#WO@
zp;QJJ06xA+L~KFr!r;=6wHferX$VEaDMOy`qKt*6L5#TmGgyJclfdosJ&`XbPOyqr
z(GX__rT*h-HOt1t at ang9FRxl9A@l3d8x=@@^R2uzKw7~pYbmW;zCS{L`Y>)jaa2et
zNs5<%ZV+(xT>Ju>b`E-OyXqE-h>`(U``c2dgcqjGer0n+LT97hR!1YD(nGkS%+q^*
zJ(}>ljmaa~<nqE*N8&n_3BP|=d(d+M{{1xRVb||d4wG%;FIEwIQ4i2!C6Q8w<m^YO
z%^Y=XBQR2PnqeA{f~UaqS=6IxC)H at t87y|C>IFa~0;F-Qs8d$a(!lVfDd(deQ!)_n
zjIbnhl(`SPm=~t+mBaMm$jDO>l5SoZwe>DZ>fz*Y5u5bj=GPfZxHXo(en|xa#h3c2
z(xJKk0QG!BQfVyW;&rJ|>}zP;pqH|{l{HaNJN2wZ0tn5B4P_SzCyX}Si$J at 6&=H>u
z!k!wDqVV0e7z_!g at M^eb&^5azTzN*sUbDgw^<YZcePx69_*AVowx|^MxiL at OYx@y`
z*wPZ&YuTXUBb%i2Q;j}ed}I_1FJ%HaPT~7dr;E*Hj-l@<JF5`rl)21tqoWZkK_r1#
z6Sq;{2g=+jDivb=AWXM6m+8y;HR)kJp+=ndHB at VLw{w}Ek)j at Yl#XIYl%tbih>&X+
ziUn<T_j?%j(qaqsp*!&~{p-0vzO0A-E(Ur)aCg5tLluNhF!bv}N#+E~VV#m>x+T__
zAp}1`B24l1 at +?XwI?1zCiqwUJ at m$msl0zVLkrjXh(1oam>0c6njC8`O40$mRjPn?T
zy#`lD0qCs&ED03#l0%IcZ1_ocg-02by!VWrb%L~On({`B7<MUo^4*bh)wV+lmu-DL
zV=WC*1tG3C`0D at b%Xi_AR6+XQgWoLb#(Ym{<tTB&W-zHbld46C9fPheT(@!&4My>W
zTDt8akB15x`w86U{9aO?7gHXHoaBaD!(9(RRmQ9o9Nn-olm^qMK-p#Wh7qQJlcVG(
zvH?xlxzJb9CfsNGWt=iK^~H}8?kI_pk7Gl8n<wpFrdAMoob)-}TC!Kd16GzG+iiXK
zgEKMQ?f$Q at Q1=)v#TiT&Gl(r^NZaVp6Q;^i1CbL`dxBpHSkqp8?aJ!BokYoYVEJdY
zjGH9k?eKq%nc*1jg)j{3%MjJ2o-uoUFV(ISu)_X&)t>R!@=sRh&H?3Wr_=5vwo5zj
zk~li<=jfvY+COzlraG-F;^<6aEp`0QW7Dq10N%7^<)R6m_63ion!-{za26z;ElJ{Y
zg0(}f?Y24``N%1rc5cZr^MNCmjJkv6ZabhG^zIqz2w2Y66Q1e8O(8J|9_rqWsh8A|
zrw7!{ZNR?CcgwToC5l{W_B-IdjZG<vO0+;`<e33k7A^q*R27ao at ZTrwfU@)i9xCc<
zfdOrE(NBW!*Z<{&QikLnj%v&fli|A~Tml<-_J;_P;dH+p5JQMHNE89P#dJ~61az|r
zC}M7rKo9Tj4G*%Uszs)BWp;iD*VLfHYfE6~6CdQI_g21dFBkh-3&wa{8S^eXc=6qP
z3?|;gkRJ=@@V-Lq;R0w~4TrP<vq_jC$ZMU$=KnOt<C<KIbL1R>wY-$c*{yRc99Aj4
zxALg{l3G6VgwBi%+%4(rG*QL9*A^<^6U{db2jXWa*H1)KGEhotxanlM>HO)z^2MK@
zi0PH~vdQ~@MY^I?(IwFT^R1|LzIS`pdLWUi)N!s4K6QFd+}i65C)V1y!a#Y80O at 8@
zQ&n6b?~065$lKR^erwm@*F!J-W}pA;_>|FM^}y`MERuZj?s(dY)L6mwap*IUj=uGc
zW%@=Ae$2&s`B<aK5oEvsBd)AS3y!X^>nR^RkZlK}KgaKJtAg?TBwB=BS7^S>)Zb!m
z{oVU{X_W^K=bUnnm(;&=c=guy!>g|9ai7J&V1coiZ9N4)!fQam>G2Zy&e?OIlJxy=
z|M$W7EeV3UBXQD9qGi5Kta!MibAjdXlF9XY at rB-`bu<~KY7-%SjmsL}w?WEPEiho<
zM26)stbc|1bXy;clVQ4dbpA&PC);iQSd_UK3ExV5WkP;VANi5dFMDnnf4DFBpLSa+
zGcCgA`wyOE*t&zi2FHG-&nie50%C$OyuvSaG5Ji41JJmVhGe>GEMIi%^O at tw|DPJ&
z#IVNA1(JWO(f9n1wn7|(L9tYA6Ip|9Btj5|mqIO_O+nPIa-_<29zr&%xH6>8Z$-iI
zn1VmKXBI?WMzKgP;t)Jf#$NLpnMst%M3q`|FvN3JM!z~v7;22gKLfMV=!#W1cIAKS
zEGqqCRV0FVnfs6WISd~jD<0UnFnKoTrwt1JNQj)b`8J-(3COS$%aRehJ^epc>n;=k
zJL=oMZn+^hsniEKd((KW`=UC%+n`=d4BVq54?~aKg$QAVTDkdC3(Q!AZ$HST>06xd
zzxFzd*bnEVyhDXW7Jq;PS3PC|S*ZtDo6ghQ#+k(v$ECdzMzSp?t9tRsT$Bp55_k`l
z`PFBG7h2)ForTV!EVlx$bOh3Q|Dt(_iNvb!vcoJShHiy}(-9(^4#=E`V8QdCZ(SK%
z^_@(#W)2b#y^&hTOuWRgZeO*sz|G+>30nl_tOaJe4i86QU2mal)W>QUQz7ATlK6Ij
zGI}$U4V>sTGg*zL<zYzm(zO32$+Bpmzr9lVh(OuyJ?Yht#%lnUtrvpelG1Nq0m_pm
z(i=vZ+}T><M^cC4N21KPNqDhi`{yr4TSyDZxT^1Bht1yNBfT>uT6cSb at 7`E;#l8zr
zl?FriTK3nn_ZfR0y<|HtF5SZ)YG|mbr5z3 at JVp~mgXi- at l7l`&qE4#m>$vfD$uCeU
z6ipeYfSuNYBi#|^Gpn|LV68e)5tB>yehI+4ra#Q$yZ<#(t{gxh<ZhvQ>4;!$2YP38
zZ`l;F7#Q%xPEN0BC;fKH=WV6aUUdeI9JqH&6^`#MH~FC&ihyRPa49>&MvUxZhU8iU
zi6ngDm^TS-^B=&G at JlIsRVue>!!@aywKC_E4<x7?dvk#W5IiN(r!{eyX;LFJe8KOY
z-`1C1wC|F0GqCIp2)A2tR0@=L)^xfTqm_T`XH^Sg*BxUzb8Kq9ucPRPSTQ-G#X+FO
z)MR!$qPhE4OAd`}iN+-th?8haOkOl6hOU@!3EuXE;s&y45r2e)#+Nx~4ISNks|*PX
z_58h1-l3X8OQ9oiKco^j6-+sdL{K(3##nfU6c=Sv*C%>D`NHvz$XRk*fyxgh+T<Jv
zKx$i-+C-{wJCJ7{%oDAZ27x at T5*^61$(-kT-BKG}+%~4r=X!;@Gd5cm8JhyWerf)i
za|u9L8AdJRv+tW~kxRGhDz-8IL-N9Q1-iVe=~O_3Iq1a`!;r24ntQB;O8ZZ(e=xR%
z&m^2o2Sl*R<vVb=TmA{3Y@~W7Y~OlcI%CT6ymZG)96L at nJCC0sp>WdK1w~w(?s0ta
zc3UkQ%hs7=VMp>V at Jp<X?zWX=A|mDi<z9<p^$|5QesQmf_{F;>@)ysVXy{-T{Fo(g
z6pnk=9-k3Um*!zwgcS+?*V#xBLZ6DLQq#ac9 at gZ7UIck3Lr<d_6KVPr%k$D4%H9od
zy!$0JYtuNZWN`$AbbJp@=0;eZQ+u{*{uDW{iBd;Ll3YZ1x|RG~xm6n6=K>NV)zK2I
zas1%>Oz_S#jyF6N(awrR&Z=ETcX-VNE(#MxI5MjR^;L0E0f3>G-{Vsyn-q={zFBJh
z{qpv-<-5I*&~mTwq2){~BlU!|=Y8>0kXHz1m5I<T7Yyc3hMYG|+w;QgdMJbjVGuX@
zc1ka)&x<`cLO2 at TL4ippmKYYs)9zPEc&P7 at 8KLVZeAkHGnZJL-n`OtPZ(>eJHQC2!
z{1W0<z<kbkF?36 at zEq&+>=e<c)y9TZms1LgYr-6c#o1(PURw_E8c9EWgW>%I<97X8
zKa_53mx}?LO2(1y*TCy;r(63qpp`yQcAjoMzkRdbt)@64Ds4{Syv*mnns?<hnAq<U
zj)>8g-2A%uG8qQ-O`#TO^?c-NNhzNldvdsebW7H|b0{QkLOuy}OB8F=Uu&CNQW{9j
ziM_H^n8HTZMJ8g;wE^sIkDADLIo!h`AA#qHnn+;|n=k%~fiAxItBzO7K*e7nn6UH#
z!pu#>774AkdOh1LWrriucb!tUtF%4N7PxJ5#Vr>POEW(xUpT6gFc4iCB{MP`Qa)Fa
zqZjgsF(O9aO4XA$LEW8avs68k=Y}~97g`U$u$<0Hbd_tR7*U#NpRIHgGoJ(ID@~jv
z7fXY4c!~D5Fs(Zc&Ec^|0Y=3(%!OO0fErscEPHnul4_7La<qVH at 1}wO9#1isf{csS
zBGx?caDz|lH%YTYf<}1V95M&dpj%bK^e5var8qP!!VLm=E*-^YIpJs@#L&HS19XPk
zJFodQa~1C1v3Kay!NWtA<paaQ%CxAg4>Y(B;B5Dca>GKy+HAUki=#xT(H$@hyY~TL
z7*3+Y2d6>nMki88E$PbBqPCJXAkB_UW2o%FZ~G|grg31LY0**OXQTPXR6qm at OjaxR
z*)iXwVcl5(I2XlAc7ku3_fUOsC&B0K16&O`a-Y+x)mz>nZX11?TnaBbmj<v2ZZ_sz
znrix&><n`l+Ok+Tc%!0{4mwP^PIq)Cb97u%^Yq`6Jugt?b+Od=lvtnZdpC8#nW%<|
zHJLlxg*lnF&nbRVMuDeRjg)YD{xis2OQKe;%9yu0cUO-UOw+MTnPbxoSBo+6EfmF-
zcjAV0Zz+x7W!p(^4WT4V;R{!-MmDaBKnRd`&{-pt2I0SLJzBEFhyk0OD%>PRqY*1F
z38Tl>RLjm%rc<IL7zRUESR?m-I;5OI2`EK!Dihga9tW|~r6C(Dfi3xRC5<TOj~QOB
zY>)VfrJSy}lsSeRM{hx?*_ at HXd;8O&^E5)O6pfc7dBR#Lx<osN8Y!pdNw~Pcx#1oS
z at Ga+H`kOf`Ibrq1nNf1U+YHs^WuDnD-{PbKOE9RBs7C5^d&-#Zq)A8oU{3RETLTak
za|*fk-sBs=DL13&33<Xhh?C((HrjO%$gNwbXYWUYY>U99+2ZEBS#lAZn(&8Pt>eot
z?Xq~|tdoNnl*g;TTK`5G9R5yuEXsFXhG=R)r)Gz1A@@Y-q?{qKB7_7zS2J8M3C*M|
zjM}88oy`(ogTq~!rOVjGoakzN3b@?9jOVbuX<XxP$|oZBOI!8Kruwia?x&{fj_hKd
zqFmQ4DQD)BGr}C~g<)I6*RCk|<dlUJ611#Ue2dsw#~@~I91LLrD+sm2S^CpPpNy6{
zCp2*rsmY}WP;WL$h0{oH8IDRyjpOG#d0}^XN#nbh8*s6Ik%xqbV<qgYklpUIyzb0n
z3l<CgcI?Jz<uKw4nS86j1VBH5He&#QFox%aJ+lCy4*<C3C4Bu>+L36 at jOzik`+x%W
z61$0Z5E(|phVui+U~oRuEZFDN`lHR663$r)m^^RtOU+$)Z9a~Le8eFK`Uv%e{dv0e
zv0jpbdRjzKSLP!r5Nz%R?VYP}-bBU&<#`SSe*TL0Zk&fBN2CTkp4EOh>GF4KSQ+F2
z$PW)(vw!FF&Y~L!dBEJKF+8J>L=#9APqi at K`)1DT)c<{u#9vlal~ku8eZiUah9<;~
zm at 6^KM$UpVsG6I?J{j&0O`=zMMt7yh;5!Q6O)V}ui-rs!qPxGF=|jS%nYd-L(T9-X
zc9!N=+=OyG(RxiL43(D)7j36<TDvqbG~&FpcXFb1Y6pkW+os^_TjvEtptFWzG`rY7
z&|3N1Rw``YJX5&Lu9jhLajKqy*iw^39hhwL1NxE#kC}(pX}w6+T^`UIPYw?*Gkwaz
zy_SvJ%%<zq#tzXXOcp&~D(pH~6rG%U0L?x=a_}cyKs}Qa51 at 4y?+*rOgGR%gLfPuY
zzp=_+v^4rW^mT6%If7{(b@(Eg`x%;D3t^DMfcy%8us=hG1JHW7!$lL>WcHT0p+dvT
z-23-3whh>y|5)brurlP^g=p^oT<FVxuP7R86#iqGPyeY5P~-9wsqeHuINTJXHj*7x
zZ!UQ*MX}gQnP`zhkjJY-7)=5A{oHRnN?teYu<QQrda-j^qJ8lkFwZw|*x9;l55U$>
zcy%b_%{K>2USHW^&-)5x@=8%#aVd^4pK}m75a)1)h|<oWM`<tE!IMj#T5F`_O(OLK
z&=(*-HF1%8LL(yi1jl7mi8YE6Hvx<Ck(=PzGg6EAcvQJ<Pq?sEJ4<JrD4{2c7Ikjb
zMv74%LJ$2u;j~_*aiVgJ6nSymh$a2h-3b_M))LhH{_Lvy_IoowXA;{BQE~~nb^m(h
z|9;(kA^cAE{scNeBDvhws;TwTGvyP~Cb^unvSK7i&(syKfAlT$$BzkqnjyJ-0%b*u
z7v;V5`iR&EIJTSaw)OsLi_x;rNtr2QEZ2h3avK%+Lwg*?TfYnppsg%kQOinXwbqOB
z*RuU{&6R9qG4FU$=InMrRBn9X9YxgIP35xHq2Haq9C-`nUL at 1^CkZm$$QV6~k7+4L
z%vc%Hs3dL1G3*OGxfoym5lT6FDTK0Oa|mO_mJoEzla!;C6!(Xkpp}eA+GI*jo=Hfs
zb1G#>s+Nt+y-V7|X%9|$30*09Yu2dobxRWMVzi{qh8z|zW|FiD1624$l^1S0j0od-
z^&T|(1wW-GI=*~7fpxF%saK{w$>)iLMD2U-LLHTw=!tA+-pQso-hDhdV6_{`FJ<vr
zi~C=*0pc6PORe`LWn=4(%h-*|l}L_u6bIxBu8-KC>^UbKVcr?#4Bn at C24Q@VmeTao
znNE<#RcI+L;Z9*>ewe<8ENa=vf at F_rbD<@ddr-1XGm+cYK^3}1!Mvdx2&e}*dAPh_
zq$-$SCI^SlDMvjQ`wx@>d0d|)Vjmm|@Tt9!$OixHuINJPn~1#h-g%sd#mbE=u at a@p
zJxSDBUh_Vs+GTc6CI7$ui=1!2s^ib at S*z?{`pxoS*~^T$#f!8Khm#K#GQ)U*)DQ55
zwotpc+LFf3`8g3;mBE$f?CY at _OnYY_%?(Ekhj7$z=-#B^$l}U-^M)*G9FZ_w%~*=B
z>h|iH<0Zjw<^C|eV(^v(O5~d^OvX+w-=1MAJy5vzmP}Nv?4{^rl}xt at l*nvkYYdk!
zgkjsD!VCj8hN+Ey37!rGq6kcuNMnD|bi4m`5m#po3ixpW-mW2N_S2E#<3|74LD69;
zIyu}bPPf038BCgS=<)NaKqib(*A`5vC(4GkZ~({WS0RpUj_NL(y`j9qF4<F!uC8 at B
z0RGLC{WB4Xr}L|F#)hC at b_QM_^`!qI>)s>4iwv^3=_gi9`ATGW2H$Q#w<GhEu07ls
zZYq*f>tcJA2S&{-(q_eN86{QBW~s{g))pmD`2$qkpneI4U}gw9_72~#X&ioORiHYl
zD=j7Im0l)&X)9aVxAi at t^URg(z1s1D!kd>~N1aR?J^REg^b|kfsf06JOaD*MU^vp@
znx^uHG~{_lOMFa=3v0fUoA>N_WXBa{@X9&m97e)u{@YY)?~WW=jWHchr`+j#v)Smk
zqRg~Psj!s`3?)g)lx;UgT4tT_4h_e=ROWiRFnsm7tl6u!ozcC&kLgW0quafYIhC?f
z_rpG>E4jf|?r~4K-_3uib}7Q!86}n%uzkcIB_g0lklG79*nAqhN|Xtv5Uo_GnQBfK
zU+v+V)9QtqIRk0;daPjD<V>qLO{zKV`Bg837>J_M4s0=7B+=pLRf2*ah?!}s$^hh@
zL(J=y3)YxLzAk4!)7>i2uuxaApE-%*rMt498B6}WX=uHbXfT8Qxpe4=w83Q{?W at 11
zwQU=4G(J4-lfS3^{K-GSD>c<?lkA(^++Va$xBC<3EE96Se_}$;;Q-T at 3_EAKA>qPV
z(512LP3^M-L#f*62l^*1I*S<qjaInCdA7vtJ9wlbW26Qg|3zr&<I}D7C2xHn&5Hm2
z%s&Y=@Qn-tABUp9c6_uu=;P3JOFkVwNWFxMwF+j*cmFIIli9uqu58O1GVn$WaNi|=
zdil(S<=g(LJPEk8jNQ?YANnbA)63_l3d;({g0wd0^d`-Qk<y|>6Yad|r1|cMuVYwK
zaYV?*FHX!}U1^6kb}#9aNq9?be#nkyNY}@rw8-zzSbRoHu9)wk*vg at 6XH&S7B-=j@
zww91dBMmac(Sgw0pvw-VG{0mV9EpHom*wKh!ZB{OCDnrlaP0uQU&TGjnu9x<%IjM#
zm-IbeY&{H3*y}&mcO>MyRoQBBcS2(x>!eu%|B^MhWUK5QE8&HX20yyJcU?dDXTddy
zqB<P0R}f9ZP5H7tQ}0{K*?af3nexqj3*o9kgc)5KJ*lP*+93qU0Y-Q|$UqPX`oeU{
zZ06+hZLyFN%>UrXh((bK%kx{6sV(O0LWZO~)a|Xx%oh6P(2s`rfE*^RTBi=)|DN1}
zGwc<TU%E0nWrHMMYay}1<>6x)R{0I*Iqci>T}Hp`ppoAeePeO)(L*07k4O%<sUb2W
zx|=*~!5EOYI_y`tvCWG7{&W~m!H^np<iU1xC3TODe$ZpUV%D9$b4QJSVfyZMga%H%
zVGfd8^C`nc=dzPSobFa at 4oI%xVvWr|t+}_N6pV-?Ui`V*Sf6CEfJzz;!7$LF=)VH{
zW+brT>n6DJ{=DIVn at g%ijLIGVP~oRT6%N!FJWwC`_X-dGdxZ`3trh=PA)y)PS+<w`
z)KC(OCTo4E#7&%KG4lpZznep*ACLh;^9*MOe9E$VIS^ufo}pvpjI`{`+hhgfd;=Wk
znloLQoih6eeUJW?ijPN at ZU6DcwF_Cz&x%MMpR%xWsr3)pfk at 7sK;-$!K<bOq$?zuq
zIMdQ!5>C<R;5%ik>0OF5gtfHkNr1GP(J*}z)08g35tufo8i;UyXe%Ur_MH(j;Zi`d
z&AS$v0L3_9%!Ru5YM4HwK5hdN!pn#SW%8F*exW;1!}K64hGK=D16Gc37a|agk?GmD
zIc!^}05&1+VPUl>e at SgFl?T$HwR5_aJWps`gg|DDGKC+X25)(ue+-`s!$aQxAsf6u
z2>TVTOZEX1U at fpOKsN}6<^%np7$6U(!Ig7(*$7gH&w-O~@fZA2u~Ua1f7Va26o5|V
ze0GlW59KYQFHeH*C`$X=Z0<aLI at jz@lyf_r+l&KBJ%uhD`f1rydic<}DO1kpjZ{Z}
zlbHpRNg9&YK!_B?@OmgP${jNeI%<Hv%f=%YrzLD}zO?3EK(u|q=kuGNF(=?i`-<k*
z`>n8tk3fqBnc_Dw<!2e7l4m<sZ-O_VcxIomfykpr+pAtYACd*8Wnp*+G0*4+?-Df7
zN$)`^)i-k at t0CUzBj_E}vg;gB{)_O at ocFFuni?^c5XHRZY<E=<>I2j3N=X}eA4(rC
zs=Y!GRs*fNP{URD{#mJD{`m@>q!NMrc|%ioblmj9NDOtq-kDONB1fZEpTO-t?_@^N
z3lk6g1Y=wlpYNSf6`?uRG#dX+p3kNhmAhYiV{<$+AOcx3eP1G$_{Xo>tFFoJs=7qM
zoXxWIHm>06MY`+*)w9%KVwK2ejmL?li at y%vZp|KZ$l9M)Km?`wta;}|R5S-c>pi9E
zCzQvd^P)5rWYo)hyDyx*(RHEgMmz0N=my!*l+9D*(hU2^>F18Ag5^2sap_Z51}}M@
z9+xrYy<i3SPd||ryaJ?WoLCZ^*~iapOh!<u+?CC|9}v1+`YMU*%$u3Fmdoa<f+}p1
z7f~qQu58=nHU`C8&$de*iy$lVV|J)?UK4Y6dy(S_t(WBavj0USFQr%|UuIY>PxTtV
zCi8z0o$Nvkn&#pKC~9AQ{s%BrSxPsIrP7)M-AJ at vjA=SAhQAIM4wv<R7NNe+DlEDK
z*<{PXS$dDCtarjQ^7q`u5#_2->ea_lS#!#0t5tU=<EZysARzp>;KjVi^ze)fTU>4S
zuLdWb6(GI8ckAhfnboIsAASxr;gja at Ag(JPHunBFy)pPhnP^SBER(n;Vh|@~?6zqR
z>VQjBnR$<|Bnh5Ffp;-12LK at ROn(ZsmxK^F2~B?jC0v4JcLlpEg^!@AT+|CZKLP*V
z;QuN37lHo{@bAC7Le at oshsodpX7B_5Fhel-hZ&|tiqN2^9h)K&JbunsDgP7^mr+52
z+^>M28ye!A>%mg-Pyw*zW`@~?PS#IzXQ@`zq1UN+hgXtXdPSqAo&B)(cgcA7hp6cO
zYlt+M-(7h0`kkg{Zm2VOCXbn3T0%!T^VQ9!=hRR;@Z2RS#pwhy^Wg*Kxgh-ncgCV|
z2b->2qyIJelNva at VR^P()vXR8>x(lCxP-Sau%P|ej4pYe6dofx0A=@ouzH(M5zOAx
zzMxYqV|TL^%s)y=&Xav?&^G{pKDceZgOjV!vv$jP<<5b@{S5S34vxxe1=b6-q)j#~
zxC<8i$8v&_ow$!&>uY@@(||MQ><j#%BTw2TKQ`lUNYDq6Afx^nSioxAgnvU~1uXc-
zzm`j}AhAHp_Hlh=n|D at jzztvH^!aq-cw5(83a;!(Q-*r`wMQ6m((pAJW+v0(?Y89#
z=K6=<mBH(@%B}kXiB&jVk`D^$b1}$h3{T|a;ldwRw#PNZR}V@(m?v6`jCKJ378Oja
zi>4g86 at aM96%^(3!HpT_KwgppGY_e|>Zb$yMs@=kOy9%wJvneqS42=ZUVlf>D9Kk$
z*FKvm-B)E+wV)HNL7h)!nL-ntaykOo&$i at A8{)hxni{FbA%9vH9ghq|775&c?>ZQ|
zn)Y+Z`(K<0&6FBZPf4DF`TfxKS at V0<TknU=??>W7S4%gbo at IO39hR8Yz%2V5HXu7F
z7x_EIybA|SFLF=9IXDeM(uV&QeI8B#UQTN1umUN7#5HT8)zagKErHCCB}D#0ZovK^
zk%Xt9Tu5ntJ*x%>lnN5rd*?oO0O^q}C<d=I?AWj%t1teW6USC8NPEEz<+CC+ry)hb
zbm|hCiM&gmZted9VoHM_)V~NpVoKB&iZx6N_TbYTfT5@<P&i+h8de{*Ws_%c;4E~f
z{NW5yC3U0iArFJ)z--W6cgNJE=4Y`sJ=4PU#<`lW;$eK(jhg?)2Lc20tY%kypnY}d
zqlbyj{nw`S_(W}yV!?rdB=X`ppA8toapcZ)`=IA9jSfe_oGyI002mcW59?s2*<Au$
z$9+c&RH!?nIvn;2?k95?l#A}2v2e|%w)l;<D>HOfZjmCe`MMW>W4V`m4&1t;gKwX`
z(W<lvV*csA&7n`Geelhgpp(+CnXOR_f6+95e^Ia~K<Dv_`4#o%4c*aKOrg&BiaBwV
P>6^buBu0euC|UmxM(-+z

-- 
2.18.0



From wenst at chromium.org  Thu Dec 29 02:37:41 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Thu, 29 Dec 2022 18:37:41 +0800
Subject: [PATCH v5 0/7] MediaTek watchdog: Convert mtk-wdt.txt to dt-schema
In-Reply-To: <20221108033209.22751-1-allen-kh.cheng@mediatek.com>
References: <20221108033209.22751-1-allen-kh.cheng@mediatek.com>
Message-ID: <CAGXv+5EkPWF77ATVRhxygVOyYmxXgdTNPmOefP7jGeOMeZw_MA@mail.gmail.com>

On Tue, Nov 8, 2022 at 12:03 PM Allen-KH Cheng
<allen-kh.cheng at mediatek.com> wrote:
>
> Based on git/groeck/linux-staging.git, watchdog-next.
> We use [1] and [2] as references to send a new series.
>
> This series converts mtk-wdt.txt to dt-schema and contains
> - Fix watchdog compatibles for MT7986, MT8186, MT8188 and MT8195,
> - Fix the watchdog name of mt8516
> - Add mt6795 and MT8173 watchdog compatible
>
> Changes since v4:
>  - Drop label for watchdog node in mt8516
>
> Changes since v3:
>  - Drop label for watchdog example in yaml
>
> Changes since v2:
>  - Drop merged patch from series
>  - Rebase to watchdog-next (for mt8188)
>
> Changes since v1:
>  - Drop "items" for a single enum?
>
> Changes since [1]:
>   - Update the commit message with some details
>  - Drop "timeout-sec: true" and use unevaluatedProperties
> [1] https://lore.kernel.org/all/20221005113517.70628-1-angelogioacchino.delregno at collabora.com/
> [2] https://lore.kernel.org/all/20220422121017.23920-3-allen-kh.cheng at mediatek.com/
>
> Allen-KH Cheng (3):
>   arm64: dts: mediatek: mt7986: Fix watchdog compatible
>   arm64: dts: mediatek: mt8516: Fix the watchdog node name
>   dt-bindings: watchdog: mediatek,mtk-wdt: Add compatible for MT8173
>
> AngeloGioacchino Del Regno (4):
>   arm64: dts: mediatek: mt8186: Fix watchdog compatible
>   arm64: dts: mediatek: mt8195: Fix watchdog compatible

Looks like the dt-bindings have been merged, but the dts fixes haven't.

Matthias, could you queue them up?


Thanks
ChenYu

>   dt-bindings: watchdog: mediatek: Convert mtk-wdt to json-schema
>   dt-bindings: watchdog: mediatek,mtk-wdt: Add compatible for MT6795
>
>  .../bindings/watchdog/mediatek,mtk-wdt.yaml   | 80 +++++++++++++++++++
>  .../devicetree/bindings/watchdog/mtk-wdt.txt  | 43 ----------
>  arch/arm64/boot/dts/mediatek/mt7986a.dtsi     |  3 +-
>  arch/arm64/boot/dts/mediatek/mt8186.dtsi      |  3 +-
>  arch/arm64/boot/dts/mediatek/mt8195.dtsi      |  3 +-
>  arch/arm64/boot/dts/mediatek/mt8516.dtsi      |  2 +-
>  6 files changed, 84 insertions(+), 50 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/watchdog/mediatek,mtk-wdt.yaml
>  delete mode 100644 Documentation/devicetree/bindings/watchdog/mtk-wdt.txt
>
> --
> 2.18.0
>
>


From krzysztof.kozlowski at linaro.org  Thu Dec 29 04:47:05 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Thu, 29 Dec 2022 13:47:05 +0100
Subject: [PATCH v2 16/23] arm64: dts: Update cache properties for qcom
In-Reply-To: <20221107155825.1644604-17-pierre.gondois@arm.com>
References: <20221107155825.1644604-1-pierre.gondois@arm.com>
 <20221107155825.1644604-17-pierre.gondois@arm.com>
Message-ID: <7b04573f-8f54-8e38-83ab-f5865da81b88@linaro.org>

On 07/11/2022 16:57, Pierre Gondois wrote:
> The DeviceTree Specification v0.3 specifies that the cache node
> 'compatible' and 'cache-level' properties are 'required'. Cf.
> s3.8 Multi-level and Shared Cache Nodes
> The 'cache-unified' property should be present if one of the
> properties for unified cache is present ('cache-size', ...).
> 
> Update the Device Trees accordingly.

Any progress on this? Pierre, are you going to resend to target specific
maintainers or SoC?

Best regards,
Krzysztof



From bvanassche at acm.org  Thu Dec 29 06:12:27 2022
From: bvanassche at acm.org (Bart Van Assche)
Date: Thu, 29 Dec 2022 06:12:27 -0800
Subject: [PATCH 1/1] ufs: update the timeout timer after resume
In-Reply-To: <20221229030645.11558-1-ed.tsai@mediatek.com>
References: <20221229030645.11558-1-ed.tsai@mediatek.com>
Message-ID: <46b4a936-c59a-ba04-4395-ed53fb72a67d@acm.org>

On 12/28/22 19:06, Ed Tsai wrote:
> The tags allocation is limited by the number of active queues and a
> queue is marked as inactive by the queue timeout worker after up to 30Hz
> by default.
> 
> Therefore, tags for the general I/O may be limited to half of the max
> depth up to 30HZ after resume. To make sure the ufs request queue for pm
> usage can be inactive immediately, trigger the timeout worker to release
> the tag set.
> 
> Signed-off-by: Ed Tsai <ed.tsai at mediatek.com>
> ---
>   drivers/ufs/core/ufshcd.c | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index e18c9f4463ec..c77570caa3a8 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -8842,6 +8842,7 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
>   		hba->curr_dev_pwr_mode = pwr_mode;
>   	}
>   
> +	mod_timer(&sdp->request_queue->timeout, 0);
>   	scsi_device_put(sdp);
>   	hba->host->eh_noresume = 0;
>   	return ret;

Where is the code that restores the timeout to the original value?

Additionally, I think that only the block layer core should manipulate 
the request queue timer directly. Please add a helper function in the 
block layer and call that helper function from the UFS driver.

Thanks,

Bart.


From linux at fw-web.de  Thu Dec 29 06:50:20 2022
From: linux at fw-web.de (Frank Wunderlich)
Date: Thu, 29 Dec 2022 15:50:20 +0100
Subject: [PATCH v8 2/5] arm64: dts: mt7986: add usb related device nodes
In-Reply-To: <20221229145023.55713-1-linux@fw-web.de>
References: <20221229145023.55713-1-linux@fw-web.de>
Message-ID: <20221229145023.55713-3-linux@fw-web.de>

From: Sam Shih <sam.shih at mediatek.com>

This patch adds USB support for MT7986.

Signed-off-by: Sam Shih <sam.shih at mediatek.com>
Signed-off-by: Frank Wunderlich <frank-w at public-files.de>
Reviewed-by: Chunfeng Yun <chunfeng.yun at mediatek.com>
---
changes compared to sams original version:
- reorder xhci-clocks based on yaml binding

v5:
 - update ranges/reg of usb-phy
 - not added RB from AngeloGioacchino for v4 because of these changes

v6:
- remove unused usb regulators
- remove 3v3 regulator (will be added with emmc-patch)
---
 arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts |  8 +++
 arch/arm64/boot/dts/mediatek/mt7986a.dtsi    | 55 ++++++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt7986b-rfb.dts |  8 +++
 3 files changed, 71 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts b/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts
index 9b83925893b7..58089fcf4d16 100644
--- a/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts
+++ b/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts
@@ -140,6 +140,10 @@ &spi1 {
 	status = "okay";
 };
 
+&ssusb {
+	status = "okay";
+};
+
 &switch {
 	ports {
 		#address-cells = <1>;
@@ -201,6 +205,10 @@ &uart2 {
 	status = "okay";
 };
 
+&usb_phy {
+	status = "okay";
+};
+
 &wifi {
 	status = "okay";
 	pinctrl-names = "default", "dbdc";
diff --git a/arch/arm64/boot/dts/mediatek/mt7986a.dtsi b/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
index 0e9406fc63e2..9ff2968152ae 100644
--- a/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
@@ -323,6 +323,61 @@ spi1: spi at 1100b000 {
 			status = "disabled";
 		};
 
+		ssusb: usb at 11200000 {
+			compatible = "mediatek,mt7986-xhci",
+				     "mediatek,mtk-xhci";
+			reg = <0 0x11200000 0 0x2e00>,
+			      <0 0x11203e00 0 0x0100>;
+			reg-names = "mac", "ippc";
+			interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&infracfg CLK_INFRA_IUSB_SYS_CK>,
+				 <&infracfg CLK_INFRA_IUSB_CK>,
+				 <&infracfg CLK_INFRA_IUSB_133_CK>,
+				 <&infracfg CLK_INFRA_IUSB_66M_CK>,
+				 <&topckgen CLK_TOP_U2U3_XHCI_SEL>;
+			clock-names = "sys_ck",
+				      "ref_ck",
+				      "mcu_ck",
+				      "dma_ck",
+				      "xhci_ck";
+			phys = <&u2port0 PHY_TYPE_USB2>,
+			       <&u3port0 PHY_TYPE_USB3>,
+			       <&u2port1 PHY_TYPE_USB2>;
+			status = "disabled";
+		};
+
+		usb_phy: t-phy at 11e10000 {
+			compatible = "mediatek,mt7986-tphy",
+				     "mediatek,generic-tphy-v2";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0 0 0x11e10000 0x1700>;
+			status = "disabled";
+
+			u2port0: usb-phy at 0 {
+				reg = <0x0 0x700>;
+				clocks = <&topckgen CLK_TOP_DA_U2_REFSEL>,
+					 <&topckgen CLK_TOP_DA_U2_CK_1P_SEL>;
+				clock-names = "ref", "da_ref";
+				#phy-cells = <1>;
+			};
+
+			u3port0: usb-phy at 700 {
+				reg = <0x700 0x900>;
+				clocks = <&topckgen CLK_TOP_USB3_PHY_SEL>;
+				clock-names = "ref";
+				#phy-cells = <1>;
+			};
+
+			u2port1: usb-phy at 1000 {
+				reg = <0x1000 0x700>;
+				clocks = <&topckgen CLK_TOP_DA_U2_REFSEL>,
+					 <&topckgen CLK_TOP_DA_U2_CK_1P_SEL>;
+				clock-names = "ref", "da_ref";
+				#phy-cells = <1>;
+			};
+		};
+
 		ethsys: syscon at 15000000 {
 			 #address-cells = <1>;
 			 #size-cells = <1>;
diff --git a/arch/arm64/boot/dts/mediatek/mt7986b-rfb.dts b/arch/arm64/boot/dts/mediatek/mt7986b-rfb.dts
index 243760cd3011..188ce82ae56c 100644
--- a/arch/arm64/boot/dts/mediatek/mt7986b-rfb.dts
+++ b/arch/arm64/boot/dts/mediatek/mt7986b-rfb.dts
@@ -167,10 +167,18 @@ &spi1 {
 	status = "okay";
 };
 
+&ssusb {
+	status = "okay";
+};
+
 &uart0 {
 	status = "okay";
 };
 
+&usb_phy {
+	status = "okay";
+};
+
 &wifi {
 	status = "okay";
 	pinctrl-names = "default", "dbdc";
-- 
2.34.1



From linux at fw-web.de  Thu Dec 29 06:50:22 2022
From: linux at fw-web.de (Frank Wunderlich)
Date: Thu, 29 Dec 2022 15:50:22 +0100
Subject: [PATCH v8 4/5] arm64: dts: mt7986: add pcie related device nodes
In-Reply-To: <20221229145023.55713-1-linux@fw-web.de>
References: <20221229145023.55713-1-linux@fw-web.de>
Message-ID: <20221229145023.55713-5-linux@fw-web.de>

From: Sam Shih <sam.shih at mediatek.com>

This patch adds PCIe support for MT7986.

Signed-off-by: Jieyy Yang <jieyy.yang at mediatek.com>
Signed-off-by: Sam Shih <sam.shih at mediatek.com>
Signed-off-by: Frank Wunderlich <frank-w at public-files.de>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
changes compared to sams original version:

- add clock-names to pcie node
- update clocks to new binding
---
bindings-patches:
https://patchwork.kernel.org/project/linux-mediatek/list/?series=690172
---
 arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts | 16 ++++++
 arch/arm64/boot/dts/mediatek/mt7986a.dtsi    | 52 ++++++++++++++++++++
 2 files changed, 68 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts b/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts
index c7a2ac764a30..4f18b4a9a8c8 100644
--- a/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts
+++ b/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts
@@ -93,6 +93,15 @@ &mmc0 {
 	non-removable;
 	no-sd;
 	no-sdio;
+};
+
+&pcie {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie_pins>;
+	status = "okay";
+};
+
+&pcie_phy {
 	status = "okay";
 };
 
@@ -155,6 +164,13 @@ conf-rst {
 		};
 	};
 
+	pcie_pins: pcie-pins {
+		mux {
+			function = "pcie";
+			groups = "pcie_clk", "pcie_wake", "pcie_pereset";
+		};
+	};
+
 	spi_flash_pins: spi-flash-pins {
 		mux {
 			function = "spi";
diff --git a/arch/arm64/boot/dts/mediatek/mt7986a.dtsi b/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
index 9c552442c02d..f6e980771b69 100644
--- a/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
@@ -8,6 +8,7 @@
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/clock/mt7986-clk.h>
 #include <dt-bindings/reset/mt7986-resets.h>
+#include <dt-bindings/phy/phy.h>
 
 / {
 	compatible = "mediatek,mt7986a";
@@ -361,6 +362,57 @@ mmc0: mmc at 11230000 {
 			status = "disabled";
 		};
 
+		pcie: pcie at 11280000 {
+			compatible = "mediatek,mt7986-pcie",
+				     "mediatek,mt8192-pcie";
+			device_type = "pci";
+			#address-cells = <3>;
+			#size-cells = <2>;
+			reg = <0x00 0x11280000 0x00 0x4000>;
+			reg-names = "pcie-mac";
+			interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
+			bus-range = <0x00 0xff>;
+			ranges = <0x82000000 0x00 0x20000000 0x00
+				  0x20000000 0x00 0x10000000>;
+			clocks = <&infracfg CLK_INFRA_IPCIE_PIPE_CK>,
+				 <&infracfg CLK_INFRA_IPCIE_CK>,
+				 <&infracfg CLK_INFRA_IPCIER_CK>,
+				 <&infracfg CLK_INFRA_IPCIEB_CK>;
+			clock-names = "pl_250m", "tl_26m", "peri_26m", "top_133m";
+			status = "disabled";
+
+			phys = <&pcie_port PHY_TYPE_PCIE>;
+			phy-names = "pcie-phy";
+
+			#interrupt-cells = <1>;
+			interrupt-map-mask = <0 0 0 0x7>;
+			interrupt-map = <0 0 0 1 &pcie_intc 0>,
+					<0 0 0 2 &pcie_intc 1>,
+					<0 0 0 3 &pcie_intc 2>,
+					<0 0 0 4 &pcie_intc 3>;
+			pcie_intc: interrupt-controller {
+				#address-cells = <0>;
+				#interrupt-cells = <1>;
+				interrupt-controller;
+			};
+		};
+
+		pcie_phy: t-phy at 11c00000 {
+			compatible = "mediatek,mt7986-tphy",
+				     "mediatek,generic-tphy-v2";
+			#address-cells = <2>;
+			#size-cells = <2>;
+			ranges;
+			status = "disabled";
+
+			pcie_port: pcie-phy at 11c00000 {
+				reg = <0 0x11c00000 0 0x20000>;
+				clocks = <&clk40m>;
+				clock-names = "ref";
+				#phy-cells = <1>;
+			};
+		};
+
 		usb_phy: t-phy at 11e10000 {
 			compatible = "mediatek,mt7986-tphy",
 				     "mediatek,generic-tphy-v2";
-- 
2.34.1



From linux at fw-web.de  Thu Dec 29 06:50:19 2022
From: linux at fw-web.de (Frank Wunderlich)
Date: Thu, 29 Dec 2022 15:50:19 +0100
Subject: [PATCH v8 1/5] dt-bindings: phy: mediatek,tphy: add support for mt7986
In-Reply-To: <20221229145023.55713-1-linux@fw-web.de>
References: <20221229145023.55713-1-linux@fw-web.de>
Message-ID: <20221229145023.55713-2-linux@fw-web.de>

From: Frank Wunderlich <frank-w at public-files.de>

Add compatible string for mt7986.

Signed-off-by: Frank Wunderlich <frank-w at public-files.de>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Reviewed-by: Chunfeng Yun <chunfeng.yun at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>
---
 Documentation/devicetree/bindings/phy/mediatek,tphy.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/phy/mediatek,tphy.yaml b/Documentation/devicetree/bindings/phy/mediatek,tphy.yaml
index 5613cc5106e3..230a17f24966 100644
--- a/Documentation/devicetree/bindings/phy/mediatek,tphy.yaml
+++ b/Documentation/devicetree/bindings/phy/mediatek,tphy.yaml
@@ -79,6 +79,7 @@ properties:
           - enum:
               - mediatek,mt2712-tphy
               - mediatek,mt7629-tphy
+              - mediatek,mt7986-tphy
               - mediatek,mt8183-tphy
               - mediatek,mt8186-tphy
               - mediatek,mt8192-tphy
-- 
2.34.1



From linux at fw-web.de  Thu Dec 29 06:50:21 2022
From: linux at fw-web.de (Frank Wunderlich)
Date: Thu, 29 Dec 2022 15:50:21 +0100
Subject: [PATCH v8 3/5] arm64: dts: mt7986: add mmc related device nodes
In-Reply-To: <20221229145023.55713-1-linux@fw-web.de>
References: <20221229145023.55713-1-linux@fw-web.de>
Message-ID: <20221229145023.55713-4-linux@fw-web.de>

From: Sam Shih <sam.shih at mediatek.com>

This patch adds mmc support for MT7986.

Signed-off-by: Sam Shih <sam.shih at mediatek.com>
Signed-off-by: Frank Wunderlich <frank-w at public-files.de>
---
v2:
- update mmc-node because clocks changed

v3:
- fix pullups/pulldowns for mt7986a-rfb to have generic bias-pull-*

v6:
- add 3v3 regulator in mt7986a-rfb (was in usb patch before)
- dropped AngeloGioacchino RB because of this change
---
 arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts | 96 ++++++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt7986a.dtsi    | 15 +++
 2 files changed, 111 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts b/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts
index 58089fcf4d16..c7a2ac764a30 100644
--- a/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts
+++ b/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts
@@ -5,6 +5,8 @@
  */
 
 /dts-v1/;
+#include <dt-bindings/pinctrl/mt65xx.h>
+
 #include "mt7986a.dtsi"
 
 / {
@@ -23,6 +25,24 @@ memory at 40000000 {
 		device_type = "memory";
 		reg = <0 0x40000000 0 0x40000000>;
 	};
+
+	reg_1p8v: regulator-1p8v {
+		compatible = "regulator-fixed";
+		regulator-name = "fixed-1.8V";
+		regulator-min-microvolt = <1800000>;
+		regulator-max-microvolt = <1800000>;
+		regulator-boot-on;
+		regulator-always-on;
+	};
+
+	reg_3p3v: regulator-3p3v {
+		compatible = "regulator-fixed";
+		regulator-name = "fixed-3.3V";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		regulator-boot-on;
+		regulator-always-on;
+	};
 };
 
 &crypto {
@@ -58,7 +78,83 @@ switch: switch at 0 {
 	};
 };
 
+&mmc0 {
+	pinctrl-names = "default", "state_uhs";
+	pinctrl-0 = <&mmc0_pins_default>;
+	pinctrl-1 = <&mmc0_pins_uhs>;
+	bus-width = <8>;
+	max-frequency = <200000000>;
+	cap-mmc-highspeed;
+	mmc-hs200-1_8v;
+	mmc-hs400-1_8v;
+	hs400-ds-delay = <0x14014>;
+	vmmc-supply = <&reg_3p3v>;
+	vqmmc-supply = <&reg_1p8v>;
+	non-removable;
+	no-sd;
+	no-sdio;
+	status = "okay";
+};
+
 &pio {
+	mmc0_pins_default: mmc0-pins {
+		mux {
+			function = "emmc";
+			groups = "emmc_51";
+		};
+		conf-cmd-dat {
+			pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2",
+			       "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5",
+			       "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD";
+			input-enable;
+			drive-strength = <4>;
+			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
+		};
+		conf-clk {
+			pins = "EMMC_CK";
+			drive-strength = <6>;
+			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
+		};
+		conf-ds {
+			pins = "EMMC_DSL";
+			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
+		};
+		conf-rst {
+			pins = "EMMC_RSTB";
+			drive-strength = <4>;
+			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
+		};
+	};
+
+	mmc0_pins_uhs: mmc0-uhs-pins {
+		mux {
+			function = "emmc";
+			groups = "emmc_51";
+		};
+		conf-cmd-dat {
+			pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2",
+			       "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5",
+			       "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD";
+			input-enable;
+			drive-strength = <4>;
+			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
+		};
+		conf-clk {
+			pins = "EMMC_CK";
+			drive-strength = <6>;
+			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
+		};
+		conf-ds {
+			pins = "EMMC_DSL";
+			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
+		};
+		conf-rst {
+			pins = "EMMC_RSTB";
+			drive-strength = <4>;
+			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
+		};
+	};
+
 	spi_flash_pins: spi-flash-pins {
 		mux {
 			function = "spi";
diff --git a/arch/arm64/boot/dts/mediatek/mt7986a.dtsi b/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
index 9ff2968152ae..9c552442c02d 100644
--- a/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
@@ -346,6 +346,21 @@ ssusb: usb at 11200000 {
 			status = "disabled";
 		};
 
+		mmc0: mmc at 11230000 {
+			compatible = "mediatek,mt7986-mmc";
+			reg = <0 0x11230000 0 0x1000>,
+			      <0 0x11c20000 0 0x1000>;
+			interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&topckgen CLK_TOP_EMMC_416M_SEL>,
+				 <&infracfg CLK_INFRA_MSDC_HCK_CK>,
+				 <&infracfg CLK_INFRA_MSDC_CK>,
+				 <&infracfg CLK_INFRA_MSDC_133M_CK>,
+				 <&infracfg CLK_INFRA_MSDC_66M_CK>;
+			clock-names = "source", "hclk", "source_cg", "bus_clk",
+				      "sys_cg";
+			status = "disabled";
+		};
+
 		usb_phy: t-phy at 11e10000 {
 			compatible = "mediatek,mt7986-tphy",
 				     "mediatek,generic-tphy-v2";
-- 
2.34.1



From linux at fw-web.de  Thu Dec 29 06:50:18 2022
From: linux at fw-web.de (Frank Wunderlich)
Date: Thu, 29 Dec 2022 15:50:18 +0100
Subject: [PATCH v8 0/5] Add BananaPi R3
Message-ID: <20221229145023.55713-1-linux@fw-web.de>

From: Frank Wunderlich <frank-w at public-files.de>

This Series adds some Nodes to mt7986 devicetree and the BananaPi R3

This version is rebased on linux 6.2-rc1 and i dropped already applied
Patches from v7.

i had run full dtbs-check but i end up with some strange warnings in
ethernet-node that should not come up as phy-handle and sfp/managed
properties are already defined. These errors also came up for mt7986a-rfb.

phy-handle made optional
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/net/mediatek,net.yaml#n265

property sfp/managed (which is included for mac subnode in yaml above):
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/net/ethernet-controller.yaml#n137

changes:
v8:
- drop model string override in emmc-dtso
- drop cs-gpios from spi-nodes
- add interrupt-settings for mt7531 switch

v7:
- rebase on next so dropped already applied patches
- squashed overlay-patch into the bpi-r3 base support
- moved regulators from mmc-dts to common dtsi
- changed dtsi to dts (as board base dtb) and mmc-dts to overlays
- renamed overlays to dtso
- removed angelos RB because of changes in bpi-r3 patch

v6:
- dropped regulators from usb-patch as suggested by chunfeng yun
- moved 3v3 regulator to mmc-patch as it is needed for emmc to work
  rfbs were tested by sam shih, r3 by me
- dropped RB from AngeloGioacchino from mmc-patch due to this change
- fixed links in coverletter which were broken in v5
- i hope this series is sent without errors now (my mailprovider limited
  mails last 2 times while sending part 10)

v5:
- changed usb ranges/reg/unit-adress
- added reviewd-by's except usb-part due to changes

v4:
- dropped RFC prefix
- rebase on matthias' mtk dts-next (for 6.2) branch
- added author information to overlays
- fixed sfp binding error
- added fix for moving wed_pcie node
- readded missing compatible patches

v3:
- changed mmc pull-ups
- added patch for board binding (sent separately before)
- added pcie node in mt7986 (not yet again in r3)
- added dt overlays

Frank Wunderlich (2):
  dt-bindings: phy: mediatek,tphy: add support for mt7986
  arm64: dts: mt7986: add Bananapi R3

Sam Shih (3):
  arm64: dts: mt7986: add usb related device nodes
  arm64: dts: mt7986: add mmc related device nodes
  arm64: dts: mt7986: add pcie related device nodes

 .../bindings/phy/mediatek,tphy.yaml           |   1 +
 arch/arm64/boot/dts/mediatek/Makefile         |   5 +
 .../mt7986a-bananapi-bpi-r3-emmc.dtso         |  29 ++
 .../mt7986a-bananapi-bpi-r3-nand.dtso         |  55 +++
 .../mediatek/mt7986a-bananapi-bpi-r3-nor.dtso |  68 +++
 .../mediatek/mt7986a-bananapi-bpi-r3-sd.dtso  |  24 +
 .../dts/mediatek/mt7986a-bananapi-bpi-r3.dts  | 450 ++++++++++++++++++
 arch/arm64/boot/dts/mediatek/mt7986a-rfb.dts  | 120 +++++
 arch/arm64/boot/dts/mediatek/mt7986a.dtsi     | 122 +++++
 arch/arm64/boot/dts/mediatek/mt7986b-rfb.dts  |   8 +
 10 files changed, 882 insertions(+)
 create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso
 create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso
 create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso
 create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso
 create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts

-- 
2.34.1



From linux at fw-web.de  Thu Dec 29 06:50:23 2022
From: linux at fw-web.de (Frank Wunderlich)
Date: Thu, 29 Dec 2022 15:50:23 +0100
Subject: [PATCH v8 5/5] arm64: dts: mt7986: add Bananapi R3
In-Reply-To: <20221229145023.55713-1-linux@fw-web.de>
References: <20221229145023.55713-1-linux@fw-web.de>
Message-ID: <20221229145023.55713-6-linux@fw-web.de>

From: Frank Wunderlich <frank-w at public-files.de>

Add support for Bananapi R3 SBC.

- SD/eMMC support (switching first 4 bits of data-bus with sw6/D)
- SPI-NAND/NOR support (switched CS by sw5/C)
- all rj45 ports and both SFP working (eth1/lan4)
- all USB-Ports + SIM-Slot tested
- i2c and all uarts tested
- wifi tested (with eeprom calibration data)

The device can boot from all 4 storage options. Both, SPI and MMC, can
be switched using hardware switches on the board, see
https://wiki.banana-pi.org/Banana_Pi_BPI-R3#Jumper_setting

Signed-off-by: Frank Wunderlich <frank-w at public-files.de>
---
changes:
v8:
- drop model string override in emmc-dtso
- drop cs-gpios from spi-nodes
- add interrupt-settings for mt7531 switch

v7:
- squashed overlay-patch and converted sd/emmc dts to overlay too
- moved mmc-regulators to base dts
- changed common dtsi to (base dts) and overlay extension to dtso

v6:
- drop usb 5v regulator from bpi-r3
  based on chunfengs response it is only needed if regulator is
  switched (like for otg), usb works without it.

v4:
- add PCIe nodes
- fix sfp-properties of sfp-1 (need to be plural)
  thx to Denis Odintsov for this

v3:
- rename factory-key to reset-key
- add dcin regulator and add it as input for 3v3 (with renaming)
- remove memory-node
- dropped wifi eeprom (calibration) data
- move mmc0 pinctrl to common dtsi and drop sdcard comment
- change mmc pull-up/down to have generic bias-pull*

v2:
- remove pcie to be added later (discussion about clocks)
- some fixes based on suggestions on ML
  - add key suffix like it's done in mt7622-bpi-r64 devicetree
  - add dash in sfp node names
  - use reg as unit for switch-node
  - drop "-3-4" suffix from i2c-pins node name
  - fix order in Makefile
---
 arch/arm64/boot/dts/mediatek/Makefile         |   5 +
 .../mt7986a-bananapi-bpi-r3-emmc.dtso         |  29 ++
 .../mt7986a-bananapi-bpi-r3-nand.dtso         |  55 +++
 .../mediatek/mt7986a-bananapi-bpi-r3-nor.dtso |  68 +++
 .../mediatek/mt7986a-bananapi-bpi-r3-sd.dtso  |  24 +
 .../dts/mediatek/mt7986a-bananapi-bpi-r3.dts  | 450 ++++++++++++++++++
 6 files changed, 631 insertions(+)
 create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso
 create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso
 create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso
 create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso
 create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts

diff --git a/arch/arm64/boot/dts/mediatek/Makefile b/arch/arm64/boot/dts/mediatek/Makefile
index 813e735c5b96..d5cd7b3e09cf 100644
--- a/arch/arm64/boot/dts/mediatek/Makefile
+++ b/arch/arm64/boot/dts/mediatek/Makefile
@@ -8,6 +8,11 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += mt6797-evb.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt6797-x20-dev.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt7622-rfb1.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt7622-bananapi-bpi-r64.dtb
+dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3.dtb
+dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-emmc.dtbo
+dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-nand.dtbo
+dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-nor.dtbo
+dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-sd.dtbo
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-rfb.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986b-rfb.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8167-pumpkin.dtb
diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso
new file mode 100644
index 000000000000..779dc6782bb1
--- /dev/null
+++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2021 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih at mediatek.com>
+ */
+
+/dts-v1/;
+/plugin/;
+
+/ {
+	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
+
+	fragment at 0 {
+		target-path = "/soc/mmc at 11230000";
+		__overlay__ {
+			bus-width = <8>;
+			max-frequency = <200000000>;
+			cap-mmc-highspeed;
+			mmc-hs200-1_8v;
+			mmc-hs400-1_8v;
+			hs400-ds-delay = <0x14014>;
+			non-removable;
+			no-sd;
+			no-sdio;
+			status = "okay";
+		};
+	};
+};
+
diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso
new file mode 100644
index 000000000000..15ee8c568f3c
--- /dev/null
+++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
+/*
+ * Authors: Daniel Golle <daniel at makrotopia.org>
+ *          Frank Wunderlich <frank-w at public-files.de>
+ */
+
+/dts-v1/;
+/plugin/;
+
+/ {
+	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
+
+	fragment at 0 {
+		target-path = "/soc/spi at 1100a000";
+		__overlay__ {
+			#address-cells = <1>;
+			#size-cells = <0>;
+			spi_nand: spi_nand at 0 {
+				compatible = "spi-nand";
+				reg = <0>;
+				spi-max-frequency = <10000000>;
+				spi-tx-buswidth = <4>;
+				spi-rx-buswidth = <4>;
+
+				partitions {
+					compatible = "fixed-partitions";
+					#address-cells = <1>;
+					#size-cells = <1>;
+
+					partition at 0 {
+						label = "bl2";
+						reg = <0x0 0x80000>;
+						read-only;
+					};
+
+					partition at 80000 {
+						label = "reserved";
+						reg = <0x80000 0x300000>;
+					};
+
+					partition at 380000 {
+						label = "fip";
+						reg = <0x380000 0x200000>;
+						read-only;
+					};
+
+					partition at 580000 {
+						label = "ubi";
+						reg = <0x580000 0x7a80000>;
+					};
+				};
+			};
+		};
+	};
+};
diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso
new file mode 100644
index 000000000000..84aa229e80f3
--- /dev/null
+++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
+/*
+ * Authors: Daniel Golle <daniel at makrotopia.org>
+ *          Frank Wunderlich <frank-w at public-files.de>
+ */
+
+/dts-v1/;
+/plugin/;
+
+/ {
+	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
+
+	fragment at 0 {
+		target-path = "/soc/spi at 1100a000";
+		__overlay__ {
+			#address-cells = <1>;
+			#size-cells = <0>;
+			flash at 0 {
+				compatible = "jedec,spi-nor";
+				reg = <0>;
+				spi-max-frequency = <10000000>;
+
+				partitions {
+					compatible = "fixed-partitions";
+					#address-cells = <1>;
+					#size-cells = <1>;
+
+					partition at 0 {
+						label = "bl2";
+						reg = <0x0 0x20000>;
+						read-only;
+					};
+
+					partition at 20000 {
+						label = "reserved";
+						reg = <0x20000 0x20000>;
+					};
+
+					partition at 40000 {
+						label = "u-boot-env";
+						reg = <0x40000 0x40000>;
+					};
+
+					partition at 80000 {
+						label = "reserved2";
+						reg = <0x80000 0x80000>;
+					};
+
+					partition at 100000 {
+						label = "fip";
+						reg = <0x100000 0x80000>;
+						read-only;
+					};
+
+					partition at 180000 {
+						label = "recovery";
+						reg = <0x180000 0xa80000>;
+					};
+
+					partition at c00000 {
+						label = "fit";
+						reg = <0xc00000 0x1400000>;
+					};
+				};
+			};
+		};
+	};
+};
diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso
new file mode 100644
index 000000000000..08af778d8adc
--- /dev/null
+++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2021 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih at mediatek.com>
+ */
+
+/dts-v1/;
+/plugin/;
+
+/ {
+	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
+	model = "Bananapi BPI-R3 (sdmmc)";
+
+	fragment at 0 {
+		target-path = "/soc/mmc at 11230000";
+		__overlay__ {
+			bus-width = <4>;
+			max-frequency = <52000000>;
+			cap-sd-highspeed;
+			status = "okay";
+		};
+	};
+};
+
diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
new file mode 100644
index 000000000000..33bd6febc160
--- /dev/null
+++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
@@ -0,0 +1,450 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2021 MediaTek Inc.
+ * Authors: Sam.Shih <sam.shih at mediatek.com>
+ *          Frank Wunderlich <frank-w at public-files.de>
+ *          Daniel Golle <daniel at makrotopia.org>
+ */
+
+/dts-v1/;
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/pinctrl/mt65xx.h>
+
+#include "mt7986a.dtsi"
+
+/ {
+	model = "Bananapi BPI-R3";
+	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
+
+	aliases {
+		serial0 = &uart0;
+		ethernet0 = &gmac0;
+		ethernet1 = &gmac1;
+	};
+
+	chosen {
+		stdout-path = "serial0:115200n8";
+	};
+
+	dcin: regulator-12vd {
+		compatible = "regulator-fixed";
+		regulator-name = "12vd";
+		regulator-min-microvolt = <12000000>;
+		regulator-max-microvolt = <12000000>;
+		regulator-boot-on;
+		regulator-always-on;
+	};
+
+	gpio-keys {
+		compatible = "gpio-keys";
+
+		reset-key {
+			label = "reset";
+			linux,code = <KEY_RESTART>;
+			gpios = <&pio 9 GPIO_ACTIVE_LOW>;
+		};
+
+		wps-key {
+			label = "wps";
+			linux,code = <KEY_WPS_BUTTON>;
+			gpios = <&pio 10 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	/* i2c of the left SFP cage (wan) */
+	i2c_sfp1: i2c-gpio-0 {
+		compatible = "i2c-gpio";
+		sda-gpios = <&pio 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+		scl-gpios = <&pio 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+		i2c-gpio,delay-us = <2>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+	};
+
+	/* i2c of the right SFP cage (lan) */
+	i2c_sfp2: i2c-gpio-1 {
+		compatible = "i2c-gpio";
+		sda-gpios = <&pio 18 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+		scl-gpios = <&pio 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+		i2c-gpio,delay-us = <2>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		green_led: led-0 {
+			color = <LED_COLOR_ID_GREEN>;
+			function = LED_FUNCTION_POWER;
+			gpios = <&pio 69 GPIO_ACTIVE_HIGH>;
+			default-state = "on";
+		};
+
+		blue_led: led-1 {
+			color = <LED_COLOR_ID_BLUE>;
+			function = LED_FUNCTION_STATUS;
+			gpios = <&pio 86 GPIO_ACTIVE_HIGH>;
+			default-state = "off";
+		};
+	};
+
+	reg_1p8v: regulator-1p8v {
+		compatible = "regulator-fixed";
+		regulator-name = "1.8vd";
+		regulator-min-microvolt = <1800000>;
+		regulator-max-microvolt = <1800000>;
+		regulator-boot-on;
+		regulator-always-on;
+		vin-supply = <&dcin>;
+	};
+
+	reg_3p3v: regulator-3p3v {
+		compatible = "regulator-fixed";
+		regulator-name = "3.3vd";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		regulator-boot-on;
+		regulator-always-on;
+		vin-supply = <&dcin>;
+	};
+
+	/* left SFP cage (wan) */
+	sfp1: sfp-1 {
+		compatible = "sff,sfp";
+		i2c-bus = <&i2c_sfp1>;
+		los-gpios = <&pio 46 GPIO_ACTIVE_HIGH>;
+		mod-def0-gpios = <&pio 49 GPIO_ACTIVE_LOW>;
+		tx-disable-gpios = <&pio 20 GPIO_ACTIVE_HIGH>;
+		tx-fault-gpios = <&pio 7 GPIO_ACTIVE_HIGH>;
+	};
+
+	/* right SFP cage (lan) */
+	sfp2: sfp-2 {
+		compatible = "sff,sfp";
+		i2c-bus = <&i2c_sfp2>;
+		los-gpios = <&pio 31 GPIO_ACTIVE_HIGH>;
+		mod-def0-gpios = <&pio 47 GPIO_ACTIVE_LOW>;
+		tx-disable-gpios = <&pio 15 GPIO_ACTIVE_HIGH>;
+		tx-fault-gpios = <&pio 48 GPIO_ACTIVE_HIGH>;
+	};
+};
+
+&crypto {
+	status = "okay";
+};
+
+&eth {
+	status = "okay";
+
+	gmac0: mac at 0 {
+		compatible = "mediatek,eth-mac";
+		reg = <0>;
+		phy-mode = "2500base-x";
+
+		fixed-link {
+			speed = <2500>;
+			full-duplex;
+			pause;
+		};
+	};
+
+	gmac1: mac at 1 {
+		compatible = "mediatek,eth-mac";
+		reg = <1>;
+		phy-mode = "2500base-x";
+		sfp = <&sfp1>;
+		managed = "in-band-status";
+	};
+
+	mdio: mdio-bus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+	};
+};
+
+&mdio {
+	switch: switch at 31 {
+		compatible = "mediatek,mt7531";
+		reg = <31>;
+		interrupt-controller;
+		#interrupt-cells = <1>;
+		interrupt-parent = <&pio>;
+		interrupts = <66 IRQ_TYPE_LEVEL_HIGH>;
+		reset-gpios = <&pio 5 GPIO_ACTIVE_HIGH>;
+	};
+};
+
+&mmc0 {
+	pinctrl-names = "default", "state_uhs";
+	pinctrl-0 = <&mmc0_pins_default>;
+	pinctrl-1 = <&mmc0_pins_uhs>;
+	vmmc-supply = <&reg_3p3v>;
+	vqmmc-supply = <&reg_1p8v>;
+};
+
+&i2c0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&i2c_pins>;
+	status = "okay";
+};
+
+&pcie {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie_pins>;
+	status = "okay";
+};
+
+&pcie_phy {
+	status = "okay";
+};
+
+&pio {
+	i2c_pins: i2c-pins {
+		mux {
+			function = "i2c";
+			groups = "i2c";
+		};
+	};
+
+	mmc0_pins_default: mmc0-pins {
+		mux {
+			function = "emmc";
+			groups = "emmc_51";
+		};
+		conf-cmd-dat {
+			pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2",
+			       "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5",
+			       "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD";
+			input-enable;
+			drive-strength = <4>;
+			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
+		};
+		conf-clk {
+			pins = "EMMC_CK";
+			drive-strength = <6>;
+			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
+		};
+		conf-ds {
+			pins = "EMMC_DSL";
+			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
+		};
+		conf-rst {
+			pins = "EMMC_RSTB";
+			drive-strength = <4>;
+			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
+		};
+	};
+
+	mmc0_pins_uhs: mmc0-uhs-pins {
+		mux {
+			function = "emmc";
+			groups = "emmc_51";
+		};
+		conf-cmd-dat {
+			pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2",
+			       "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5",
+			       "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD";
+			input-enable;
+			drive-strength = <4>;
+			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
+		};
+		conf-clk {
+			pins = "EMMC_CK";
+			drive-strength = <6>;
+			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
+		};
+		conf-ds {
+			pins = "EMMC_DSL";
+			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
+		};
+		conf-rst {
+			pins = "EMMC_RSTB";
+			drive-strength = <4>;
+			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
+		};
+	};
+
+	pcie_pins: pcie-pins {
+		mux {
+			function = "pcie";
+			groups = "pcie_clk", "pcie_pereset";
+		};
+	};
+
+	spi_flash_pins: spi-flash-pins {
+		mux {
+			function = "spi";
+			groups = "spi0", "spi0_wp_hold";
+		};
+	};
+
+	spic_pins: spic-pins {
+		mux {
+			function = "spi";
+			groups = "spi1_0";
+		};
+	};
+
+	uart1_pins: uart1-pins {
+		mux {
+			function = "uart";
+			groups = "uart1_rx_tx";
+		};
+	};
+
+	uart2_pins: uart2-pins {
+		mux {
+			function = "uart";
+			groups = "uart2_0_rx_tx";
+		};
+	};
+
+	wf_2g_5g_pins: wf-2g-5g-pins {
+		mux {
+			function = "wifi";
+			groups = "wf_2g", "wf_5g";
+		};
+		conf {
+			pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
+			       "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
+			       "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
+			       "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
+			       "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
+			       "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
+			       "WF1_TOP_CLK", "WF1_TOP_DATA";
+			drive-strength = <4>;
+		};
+	};
+
+	wf_dbdc_pins: wf-dbdc-pins {
+		mux {
+			function = "wifi";
+			groups = "wf_dbdc";
+		};
+		conf {
+			pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
+			       "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
+			       "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
+			       "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
+			       "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
+			       "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
+			       "WF1_TOP_CLK", "WF1_TOP_DATA";
+			drive-strength = <4>;
+		};
+	};
+
+	wf_led_pins: wf-led-pins {
+		mux {
+			function = "led";
+			groups = "wifi_led";
+		};
+	};
+};
+
+&spi0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&spi_flash_pins>;
+	status = "okay";
+};
+
+&spi1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&spic_pins>;
+	status = "okay";
+};
+
+&ssusb {
+	status = "okay";
+};
+
+&switch {
+	ports {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		port at 0 {
+			reg = <0>;
+			label = "wan";
+		};
+
+		port at 1 {
+			reg = <1>;
+			label = "lan0";
+		};
+
+		port at 2 {
+			reg = <2>;
+			label = "lan1";
+		};
+
+		port at 3 {
+			reg = <3>;
+			label = "lan2";
+		};
+
+		port at 4 {
+			reg = <4>;
+			label = "lan3";
+		};
+
+		port5: port at 5 {
+			reg = <5>;
+			label = "lan4";
+			phy-mode = "2500base-x";
+			sfp = <&sfp2>;
+			managed = "in-band-status";
+		};
+
+		port at 6 {
+			reg = <6>;
+			label = "cpu";
+			ethernet = <&gmac0>;
+			phy-mode = "2500base-x";
+
+			fixed-link {
+				speed = <2500>;
+				full-duplex;
+				pause;
+			};
+		};
+	};
+};
+
+&trng {
+	status = "okay";
+};
+
+&uart0 {
+	status = "okay";
+};
+
+&uart1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart1_pins>;
+	status = "okay";
+};
+
+&uart2 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart2_pins>;
+	status = "okay";
+};
+
+&usb_phy {
+	status = "okay";
+};
+
+&watchdog {
+	status = "okay";
+};
+
+&wifi {
+	status = "okay";
+	pinctrl-names = "default", "dbdc";
+	pinctrl-0 = <&wf_2g_5g_pins>, <&wf_led_pins>;
+	pinctrl-1 = <&wf_dbdc_pins>, <&wf_led_pins>;
+};
+
-- 
2.34.1



From daniel at makrotopia.org  Thu Dec 29 07:06:11 2022
From: daniel at makrotopia.org (Daniel Golle)
Date: Thu, 29 Dec 2022 15:06:11 +0000
Subject: [PATCH v8 5/5] arm64: dts: mt7986: add Bananapi R3
In-Reply-To: <20221229145023.55713-6-linux@fw-web.de>
References: <20221229145023.55713-1-linux@fw-web.de>
 <20221229145023.55713-6-linux@fw-web.de>
Message-ID: <Y62s4+zMm1ECnMlH@makrotopia.org>

On Thu, Dec 29, 2022 at 03:50:23PM +0100, Frank Wunderlich wrote:
> From: Frank Wunderlich <frank-w at public-files.de>
> 
> Add support for Bananapi R3 SBC.
> 
> - SD/eMMC support (switching first 4 bits of data-bus with sw6/D)
> - SPI-NAND/NOR support (switched CS by sw5/C)
> - all rj45 ports and both SFP working (eth1/lan4)
> - all USB-Ports + SIM-Slot tested
> - i2c and all uarts tested
> - wifi tested (with eeprom calibration data)
> 
> The device can boot from all 4 storage options. Both, SPI and MMC, can
> be switched using hardware switches on the board, see
> https://wiki.banana-pi.org/Banana_Pi_BPI-R3#Jumper_setting
> 
> Signed-off-by: Frank Wunderlich <frank-w at public-files.de>
> ---
> changes:
> v8:
> - drop model string override in emmc-dtso
> - drop cs-gpios from spi-nodes
> - add interrupt-settings for mt7531 switch
> 
> v7:
> - squashed overlay-patch and converted sd/emmc dts to overlay too
> - moved mmc-regulators to base dts
> - changed common dtsi to (base dts) and overlay extension to dtso
> 
> v6:
> - drop usb 5v regulator from bpi-r3
>   based on chunfengs response it is only needed if regulator is
>   switched (like for otg), usb works without it.
> 
> v4:
> - add PCIe nodes
> - fix sfp-properties of sfp-1 (need to be plural)
>   thx to Denis Odintsov for this
> 
> v3:
> - rename factory-key to reset-key
> - add dcin regulator and add it as input for 3v3 (with renaming)
> - remove memory-node
> - dropped wifi eeprom (calibration) data
> - move mmc0 pinctrl to common dtsi and drop sdcard comment
> - change mmc pull-up/down to have generic bias-pull*
> 
> v2:
> - remove pcie to be added later (discussion about clocks)
> - some fixes based on suggestions on ML
>   - add key suffix like it's done in mt7622-bpi-r64 devicetree
>   - add dash in sfp node names
>   - use reg as unit for switch-node
>   - drop "-3-4" suffix from i2c-pins node name
>   - fix order in Makefile
> ---
>  arch/arm64/boot/dts/mediatek/Makefile         |   5 +
>  .../mt7986a-bananapi-bpi-r3-emmc.dtso         |  29 ++
>  .../mt7986a-bananapi-bpi-r3-nand.dtso         |  55 +++
>  .../mediatek/mt7986a-bananapi-bpi-r3-nor.dtso |  68 +++
>  .../mediatek/mt7986a-bananapi-bpi-r3-sd.dtso  |  24 +
>  .../dts/mediatek/mt7986a-bananapi-bpi-r3.dts  | 450 ++++++++++++++++++
>  6 files changed, 631 insertions(+)
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso
>  create mode 100644 arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
> 
> diff --git a/arch/arm64/boot/dts/mediatek/Makefile b/arch/arm64/boot/dts/mediatek/Makefile
> index 813e735c5b96..d5cd7b3e09cf 100644
> --- a/arch/arm64/boot/dts/mediatek/Makefile
> +++ b/arch/arm64/boot/dts/mediatek/Makefile
> @@ -8,6 +8,11 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += mt6797-evb.dtb
>  dtb-$(CONFIG_ARCH_MEDIATEK) += mt6797-x20-dev.dtb
>  dtb-$(CONFIG_ARCH_MEDIATEK) += mt7622-rfb1.dtb
>  dtb-$(CONFIG_ARCH_MEDIATEK) += mt7622-bananapi-bpi-r64.dtb
> +dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3.dtb
> +dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-emmc.dtbo
> +dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-nand.dtbo
> +dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-nor.dtbo
> +dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-sd.dtbo
>  dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-rfb.dtb
>  dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986b-rfb.dtb
>  dtb-$(CONFIG_ARCH_MEDIATEK) += mt8167-pumpkin.dtb
> diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso
> new file mode 100644
> index 000000000000..779dc6782bb1
> --- /dev/null
> +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtso
> @@ -0,0 +1,29 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +/*
> + * Copyright (C) 2021 MediaTek Inc.
> + * Author: Sam.Shih <sam.shih at mediatek.com>
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +/ {
> +	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
> +
> +	fragment at 0 {
> +		target-path = "/soc/mmc at 11230000";
> +		__overlay__ {
> +			bus-width = <8>;
> +			max-frequency = <200000000>;
> +			cap-mmc-highspeed;
> +			mmc-hs200-1_8v;
> +			mmc-hs400-1_8v;
> +			hs400-ds-delay = <0x14014>;
> +			non-removable;
> +			no-sd;
> +			no-sdio;
> +			status = "okay";
> +		};
> +	};
> +};
> +
> diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso
> new file mode 100644
> index 000000000000..15ee8c568f3c
> --- /dev/null
> +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso
> @@ -0,0 +1,55 @@
> +/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
> +/*
> + * Authors: Daniel Golle <daniel at makrotopia.org>
> + *          Frank Wunderlich <frank-w at public-files.de>
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +/ {
> +	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
> +
> +	fragment at 0 {
> +		target-path = "/soc/spi at 1100a000";
> +		__overlay__ {
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +			spi_nand: spi_nand at 0 {
> +				compatible = "spi-nand";
> +				reg = <0>;
> +				spi-max-frequency = <10000000>;
> +				spi-tx-buswidth = <4>;
> +				spi-rx-buswidth = <4>;
> +
> +				partitions {
> +					compatible = "fixed-partitions";
> +					#address-cells = <1>;
> +					#size-cells = <1>;
> +
> +					partition at 0 {
> +						label = "bl2";
> +						reg = <0x0 0x80000>;
> +						read-only;
> +					};
> +
> +					partition at 80000 {
> +						label = "reserved";
> +						reg = <0x80000 0x300000>;
> +					};
> +
> +					partition at 380000 {
> +						label = "fip";
> +						reg = <0x380000 0x200000>;
> +						read-only;
> +					};
> +
> +					partition at 580000 {
> +						label = "ubi";
> +						reg = <0x580000 0x7a80000>;
> +					};
> +				};
> +			};
> +		};
> +	};
> +};
> diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso
> new file mode 100644
> index 000000000000..84aa229e80f3
> --- /dev/null
> +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nor.dtso
> @@ -0,0 +1,68 @@
> +/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
> +/*
> + * Authors: Daniel Golle <daniel at makrotopia.org>
> + *          Frank Wunderlich <frank-w at public-files.de>
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +/ {
> +	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
> +
> +	fragment at 0 {
> +		target-path = "/soc/spi at 1100a000";
> +		__overlay__ {
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +			flash at 0 {
> +				compatible = "jedec,spi-nor";
> +				reg = <0>;
> +				spi-max-frequency = <10000000>;
> +
> +				partitions {
> +					compatible = "fixed-partitions";
> +					#address-cells = <1>;
> +					#size-cells = <1>;
> +
> +					partition at 0 {
> +						label = "bl2";
> +						reg = <0x0 0x20000>;
> +						read-only;
> +					};
> +
> +					partition at 20000 {
> +						label = "reserved";
> +						reg = <0x20000 0x20000>;
> +					};
> +
> +					partition at 40000 {
> +						label = "u-boot-env";
> +						reg = <0x40000 0x40000>;
> +					};
> +
> +					partition at 80000 {
> +						label = "reserved2";
> +						reg = <0x80000 0x80000>;
> +					};
> +
> +					partition at 100000 {
> +						label = "fip";
> +						reg = <0x100000 0x80000>;
> +						read-only;
> +					};
> +
> +					partition at 180000 {
> +						label = "recovery";
> +						reg = <0x180000 0xa80000>;
> +					};
> +
> +					partition at c00000 {
> +						label = "fit";
> +						reg = <0xc00000 0x1400000>;
> +					};
> +				};
> +			};
> +		};
> +	};
> +};
> diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso
> new file mode 100644
> index 000000000000..08af778d8adc
> --- /dev/null
> +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso
> @@ -0,0 +1,24 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +/*
> + * Copyright (C) 2021 MediaTek Inc.
> + * Author: Sam.Shih <sam.shih at mediatek.com>
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +/ {
> +	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
> +	model = "Bananapi BPI-R3 (sdmmc)";

There is another model string here which shouldn't be.

> +
> +	fragment at 0 {
> +		target-path = "/soc/mmc at 11230000";
> +		__overlay__ {
> +			bus-width = <4>;
> +			max-frequency = <52000000>;
> +			cap-sd-highspeed;
> +			status = "okay";
> +		};
> +	};
> +};
> +
> diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
> new file mode 100644
> index 000000000000..33bd6febc160
> --- /dev/null
> +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
> @@ -0,0 +1,450 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +/*
> + * Copyright (C) 2021 MediaTek Inc.
> + * Authors: Sam.Shih <sam.shih at mediatek.com>
> + *          Frank Wunderlich <frank-w at public-files.de>
> + *          Daniel Golle <daniel at makrotopia.org>
> + */
> +
> +/dts-v1/;
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +#include <dt-bindings/leds/common.h>
> +#include <dt-bindings/pinctrl/mt65xx.h>
> +
> +#include "mt7986a.dtsi"
> +
> +/ {
> +	model = "Bananapi BPI-R3";
> +	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
> +
> +	aliases {
> +		serial0 = &uart0;
> +		ethernet0 = &gmac0;
> +		ethernet1 = &gmac1;
> +	};
> +
> +	chosen {
> +		stdout-path = "serial0:115200n8";
> +	};
> +
> +	dcin: regulator-12vd {
> +		compatible = "regulator-fixed";
> +		regulator-name = "12vd";
> +		regulator-min-microvolt = <12000000>;
> +		regulator-max-microvolt = <12000000>;
> +		regulator-boot-on;
> +		regulator-always-on;
> +	};
> +
> +	gpio-keys {
> +		compatible = "gpio-keys";
> +
> +		reset-key {
> +			label = "reset";
> +			linux,code = <KEY_RESTART>;
> +			gpios = <&pio 9 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		wps-key {
> +			label = "wps";
> +			linux,code = <KEY_WPS_BUTTON>;
> +			gpios = <&pio 10 GPIO_ACTIVE_LOW>;
> +		};
> +	};
> +
> +	/* i2c of the left SFP cage (wan) */
> +	i2c_sfp1: i2c-gpio-0 {
> +		compatible = "i2c-gpio";
> +		sda-gpios = <&pio 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		scl-gpios = <&pio 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		i2c-gpio,delay-us = <2>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +	};
> +
> +	/* i2c of the right SFP cage (lan) */
> +	i2c_sfp2: i2c-gpio-1 {
> +		compatible = "i2c-gpio";
> +		sda-gpios = <&pio 18 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		scl-gpios = <&pio 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		i2c-gpio,delay-us = <2>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +
> +		green_led: led-0 {
> +			color = <LED_COLOR_ID_GREEN>;
> +			function = LED_FUNCTION_POWER;
> +			gpios = <&pio 69 GPIO_ACTIVE_HIGH>;
> +			default-state = "on";
> +		};
> +
> +		blue_led: led-1 {
> +			color = <LED_COLOR_ID_BLUE>;
> +			function = LED_FUNCTION_STATUS;
> +			gpios = <&pio 86 GPIO_ACTIVE_HIGH>;
> +			default-state = "off";
> +		};
> +	};
> +
> +	reg_1p8v: regulator-1p8v {
> +		compatible = "regulator-fixed";
> +		regulator-name = "1.8vd";
> +		regulator-min-microvolt = <1800000>;
> +		regulator-max-microvolt = <1800000>;
> +		regulator-boot-on;
> +		regulator-always-on;
> +		vin-supply = <&dcin>;
> +	};
> +
> +	reg_3p3v: regulator-3p3v {
> +		compatible = "regulator-fixed";
> +		regulator-name = "3.3vd";
> +		regulator-min-microvolt = <3300000>;
> +		regulator-max-microvolt = <3300000>;
> +		regulator-boot-on;
> +		regulator-always-on;
> +		vin-supply = <&dcin>;
> +	};
> +
> +	/* left SFP cage (wan) */
> +	sfp1: sfp-1 {
> +		compatible = "sff,sfp";
> +		i2c-bus = <&i2c_sfp1>;
> +		los-gpios = <&pio 46 GPIO_ACTIVE_HIGH>;
> +		mod-def0-gpios = <&pio 49 GPIO_ACTIVE_LOW>;
> +		tx-disable-gpios = <&pio 20 GPIO_ACTIVE_HIGH>;
> +		tx-fault-gpios = <&pio 7 GPIO_ACTIVE_HIGH>;
> +	};
> +
> +	/* right SFP cage (lan) */
> +	sfp2: sfp-2 {
> +		compatible = "sff,sfp";
> +		i2c-bus = <&i2c_sfp2>;
> +		los-gpios = <&pio 31 GPIO_ACTIVE_HIGH>;
> +		mod-def0-gpios = <&pio 47 GPIO_ACTIVE_LOW>;
> +		tx-disable-gpios = <&pio 15 GPIO_ACTIVE_HIGH>;
> +		tx-fault-gpios = <&pio 48 GPIO_ACTIVE_HIGH>;
> +	};
> +};
> +
> +&crypto {
> +	status = "okay";
> +};
> +
> +&eth {
> +	status = "okay";
> +
> +	gmac0: mac at 0 {
> +		compatible = "mediatek,eth-mac";
> +		reg = <0>;
> +		phy-mode = "2500base-x";
> +
> +		fixed-link {
> +			speed = <2500>;
> +			full-duplex;
> +			pause;
> +		};
> +	};
> +
> +	gmac1: mac at 1 {
> +		compatible = "mediatek,eth-mac";
> +		reg = <1>;
> +		phy-mode = "2500base-x";
> +		sfp = <&sfp1>;
> +		managed = "in-band-status";
> +	};
> +
> +	mdio: mdio-bus {
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +	};
> +};
> +
> +&mdio {
> +	switch: switch at 31 {
> +		compatible = "mediatek,mt7531";
> +		reg = <31>;
> +		interrupt-controller;
> +		#interrupt-cells = <1>;
> +		interrupt-parent = <&pio>;
> +		interrupts = <66 IRQ_TYPE_LEVEL_HIGH>;
> +		reset-gpios = <&pio 5 GPIO_ACTIVE_HIGH>;
> +	};
> +};
> +
> +&mmc0 {
> +	pinctrl-names = "default", "state_uhs";
> +	pinctrl-0 = <&mmc0_pins_default>;
> +	pinctrl-1 = <&mmc0_pins_uhs>;
> +	vmmc-supply = <&reg_3p3v>;
> +	vqmmc-supply = <&reg_1p8v>;
> +};
> +
> +&i2c0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&i2c_pins>;
> +	status = "okay";
> +};
> +
> +&pcie {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pcie_pins>;
> +	status = "okay";
> +};
> +
> +&pcie_phy {
> +	status = "okay";
> +};
> +
> +&pio {
> +	i2c_pins: i2c-pins {
> +		mux {
> +			function = "i2c";
> +			groups = "i2c";
> +		};
> +	};
> +
> +	mmc0_pins_default: mmc0-pins {
> +		mux {
> +			function = "emmc";
> +			groups = "emmc_51";
> +		};
> +		conf-cmd-dat {
> +			pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2",
> +			       "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5",
> +			       "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD";
> +			input-enable;
> +			drive-strength = <4>;
> +			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
> +		};
> +		conf-clk {
> +			pins = "EMMC_CK";
> +			drive-strength = <6>;
> +			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
> +		};
> +		conf-ds {
> +			pins = "EMMC_DSL";
> +			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
> +		};
> +		conf-rst {
> +			pins = "EMMC_RSTB";
> +			drive-strength = <4>;
> +			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
> +		};
> +	};
> +
> +	mmc0_pins_uhs: mmc0-uhs-pins {
> +		mux {
> +			function = "emmc";
> +			groups = "emmc_51";
> +		};
> +		conf-cmd-dat {
> +			pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2",
> +			       "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5",
> +			       "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD";
> +			input-enable;
> +			drive-strength = <4>;
> +			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
> +		};
> +		conf-clk {
> +			pins = "EMMC_CK";
> +			drive-strength = <6>;
> +			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
> +		};
> +		conf-ds {
> +			pins = "EMMC_DSL";
> +			bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
> +		};
> +		conf-rst {
> +			pins = "EMMC_RSTB";
> +			drive-strength = <4>;
> +			bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
> +		};
> +	};
> +
> +	pcie_pins: pcie-pins {
> +		mux {
> +			function = "pcie";
> +			groups = "pcie_clk", "pcie_pereset";
> +		};
> +	};
> +
> +	spi_flash_pins: spi-flash-pins {
> +		mux {
> +			function = "spi";
> +			groups = "spi0", "spi0_wp_hold";
> +		};
> +	};
> +
> +	spic_pins: spic-pins {
> +		mux {
> +			function = "spi";
> +			groups = "spi1_0";
> +		};
> +	};
> +
> +	uart1_pins: uart1-pins {
> +		mux {
> +			function = "uart";
> +			groups = "uart1_rx_tx";
> +		};
> +	};
> +
> +	uart2_pins: uart2-pins {
> +		mux {
> +			function = "uart";
> +			groups = "uart2_0_rx_tx";
> +		};
> +	};
> +
> +	wf_2g_5g_pins: wf-2g-5g-pins {
> +		mux {
> +			function = "wifi";
> +			groups = "wf_2g", "wf_5g";
> +		};
> +		conf {
> +			pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
> +			       "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
> +			       "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
> +			       "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
> +			       "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
> +			       "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
> +			       "WF1_TOP_CLK", "WF1_TOP_DATA";
> +			drive-strength = <4>;
> +		};
> +	};
> +
> +	wf_dbdc_pins: wf-dbdc-pins {
> +		mux {
> +			function = "wifi";
> +			groups = "wf_dbdc";
> +		};
> +		conf {
> +			pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
> +			       "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
> +			       "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
> +			       "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
> +			       "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
> +			       "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
> +			       "WF1_TOP_CLK", "WF1_TOP_DATA";
> +			drive-strength = <4>;
> +		};
> +	};
> +
> +	wf_led_pins: wf-led-pins {
> +		mux {
> +			function = "led";
> +			groups = "wifi_led";
> +		};
> +	};
> +};
> +
> +&spi0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&spi_flash_pins>;
> +	status = "okay";
> +};
> +
> +&spi1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&spic_pins>;
> +	status = "okay";
> +};
> +
> +&ssusb {
> +	status = "okay";
> +};
> +
> +&switch {
> +	ports {
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		port at 0 {
> +			reg = <0>;
> +			label = "wan";
> +		};
> +
> +		port at 1 {
> +			reg = <1>;
> +			label = "lan0";
> +		};
> +
> +		port at 2 {
> +			reg = <2>;
> +			label = "lan1";
> +		};
> +
> +		port at 3 {
> +			reg = <3>;
> +			label = "lan2";
> +		};
> +
> +		port at 4 {
> +			reg = <4>;
> +			label = "lan3";
> +		};
> +
> +		port5: port at 5 {
> +			reg = <5>;
> +			label = "lan4";
> +			phy-mode = "2500base-x";
> +			sfp = <&sfp2>;
> +			managed = "in-band-status";
> +		};
> +
> +		port at 6 {
> +			reg = <6>;
> +			label = "cpu";
> +			ethernet = <&gmac0>;
> +			phy-mode = "2500base-x";
> +
> +			fixed-link {
> +				speed = <2500>;
> +				full-duplex;
> +				pause;
> +			};
> +		};
> +	};
> +};
> +
> +&trng {
> +	status = "okay";
> +};
> +
> +&uart0 {
> +	status = "okay";
> +};
> +
> +&uart1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart1_pins>;
> +	status = "okay";
> +};
> +
> +&uart2 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart2_pins>;
> +	status = "okay";
> +};
> +
> +&usb_phy {
> +	status = "okay";
> +};
> +
> +&watchdog {
> +	status = "okay";
> +};
> +
> +&wifi {
> +	status = "okay";
> +	pinctrl-names = "default", "dbdc";
> +	pinctrl-0 = <&wf_2g_5g_pins>, <&wf_led_pins>;
> +	pinctrl-1 = <&wf_dbdc_pins>, <&wf_led_pins>;
> +};
> +
> -- 
> 2.34.1
> 
> 


From frank-w at public-files.de  Thu Dec 29 07:11:48 2022
From: frank-w at public-files.de (Frank Wunderlich)
Date: Thu, 29 Dec 2022 16:11:48 +0100
Subject: Aw: Re: [PATCH v8 5/5] arm64: dts: mt7986: add Bananapi R3
In-Reply-To: <Y62s4+zMm1ECnMlH@makrotopia.org>
References: <20221229145023.55713-1-linux@fw-web.de>
 <20221229145023.55713-6-linux@fw-web.de> <Y62s4+zMm1ECnMlH@makrotopia.org>
Message-ID: <trinity-f4c66c53-204d-43c7-90f5-1ecf75e4bbad-1672326708689@3c-app-gmx-bap35>

Hi

> Gesendet: Donnerstag, 29. Dezember 2022 um 16:06 Uhr
> Von: "Daniel Golle" <daniel at makrotopia.org>

> > diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso
> > new file mode 100644
> > index 000000000000..08af778d8adc
> > --- /dev/null
> > +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-sd.dtso
> > @@ -0,0 +1,24 @@
> > +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> > +/*
> > + * Copyright (C) 2021 MediaTek Inc.
> > + * Author: Sam.Shih <sam.shih at mediatek.com>
> > + */
> > +
> > +/dts-v1/;
> > +/plugin/;
> > +
> > +/ {
> > +	compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
> > +	model = "Bananapi BPI-R3 (sdmmc)";
>
> There is another model string here which shouldn't be.

sorry, missed this one, will drop it in next version

@all: anything else i need to change?

regards Frank


From daniel.lezcano at linaro.org  Thu Dec 29 07:49:13 2022
From: daniel.lezcano at linaro.org (Daniel Lezcano)
Date: Thu, 29 Dec 2022 16:49:13 +0100
Subject: [PATCH v7 4/4] thermal: mediatek: add another get_temp ops for
 thermal sensors
In-Reply-To: <COUMF3IZ9Y63.LA3KFHJSUZIC@amjad-ThinkPad-T490>
References: <20221018-up-i350-thermal-bringup-v7-0-ebf08ff2eddb@baylibre.com>
 <20221018-up-i350-thermal-bringup-v7-4-ebf08ff2eddb@baylibre.com>
 <4121bb6b-30db-7a23-f4c8-40afdda7a0b5@linaro.org>
 <COTTJX635TNF.1WL2TEZN7VW9O@amjad-ThinkPad-T490>
 <adfe41f7-00e5-876b-7803-3127919fba13@linaro.org>
 <COUMF3IZ9Y63.LA3KFHJSUZIC@amjad-ThinkPad-T490>
Message-ID: <0644aede-c281-3919-50e0-4466f6587d81@linaro.org>

On 06/12/2022 10:18, Amjad Ouled-Ameur wrote:
> Hi Daniel,
> On Mon Dec 5, 2022 at 8:39 PM CET, Daniel Lezcano wrote:
>>
>> Hi Amjad,
>>
>>
>> On 05/12/2022 11:41, Amjad Ouled-Ameur wrote:
>>
>> [ ... ]
>>
>>>>> @@ -1161,11 +1197,24 @@ static int mtk_thermal_probe(struct platform_device *pdev)
>>>>>     
>>>>>     	platform_set_drvdata(pdev, mt);
>>>>>     
>>>>> -	tzdev = devm_thermal_of_zone_register(&pdev->dev, 0, mt,
>>>>> -					      &mtk_thermal_ops);
>>>>> -	if (IS_ERR(tzdev)) {
>>>>> -		ret = PTR_ERR(tzdev);
>>>>> -		goto err_disable_clk_peri_therm;
>>>>> +	for (i = 0; i < mt->conf->num_sensors + 1; i++) {
>>>>> +		tz = devm_kmalloc(&pdev->dev, sizeof(*tz), GFP_KERNEL);
>>>>> +		if (!tz)
>>>>> +			return -ENOMEM;
>>>>> +
>>>>> +		tz->mt = mt;
>>>>> +		tz->id = i;
>>>>> +
>>>>> +		tzdev = devm_thermal_of_zone_register(&pdev->dev, i, tz, (i == 0) ?
>>>>> +							     &mtk_thermal_ops :
>>>>> +							     &mtk_thermal_sensor_ops);
>>>>
>>>> Here you use again the aggregation
>>> I addressed this concern in V6, could you please take a look and let me
>>> know what you think [0].
>>>
>>> [0]: https://lore.kernel.org/all/5eb0cdc2-e9f9-dd42-bf80-b7dcd8bcc196 at baylibre.com/
>>
>> May I misunderstanding but AFAICS, this patch is setting the
>> mtk_thermal_ops if the sensor id is zero. The get_temp is computing the
>> max temperature in this ops which is what we don't want to do.
> 
> Correct, but I think that is out of scope of this patchset, as the current
> driver already uses mtk_thermal_ops for sensor 0. The focus of this patchset
> is to add support for the other sensors.
> 
> Besides, what do you suggest as a clean implementation if the current one
> no longer meets thermal core requirements ?

IIUC, there is a sensor per couple of cores. 1 x 2Bigs, 1 x 2Bigs, 1 x 4 
Little, right ?

If it is the case, then a thermal zone per sensor with the trip points 
and a cooling device for each of them.

The two thermal zones for the big will share the same cooling device. 
The little thermal zone will have its own cooling device.

If there is the GPU, then its own cooling device also with devfreq.


>> <http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs
>>
>> Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
>> <http://twitter.com/#!/linaroorg> Twitter |
>> <http://www.linaro.org/linaro-blog/> Blog
> 

-- 
<http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog



From andersson at kernel.org  Thu Dec 29 09:23:41 2022
From: andersson at kernel.org (Bjorn Andersson)
Date: Thu, 29 Dec 2022 11:23:41 -0600
Subject: (subset) [PATCH v2 16/23] arm64: dts: Update cache properties for qcom
In-Reply-To: <20221107155825.1644604-17-pierre.gondois@arm.com>
References: <20221107155825.1644604-1-pierre.gondois@arm.com> <20221107155825.1644604-17-pierre.gondois@arm.com>
Message-ID: <167233461757.1099840.14261373049741719746.b4-ty@kernel.org>

On Mon, 7 Nov 2022 16:57:09 +0100, Pierre Gondois wrote:
> The DeviceTree Specification v0.3 specifies that the cache node
> 'compatible' and 'cache-level' properties are 'required'. Cf.
> s3.8 Multi-level and Shared Cache Nodes
> The 'cache-unified' property should be present if one of the
> properties for unified cache is present ('cache-size', ...).
> 
> Update the Device Trees accordingly.
> 
> [...]

Applied, thanks!

[16/23] arm64: dts: Update cache properties for qcom
        commit: 9435294c6517dc70bb608505b79097a58ea7c6a3

Best regards,
-- 
Bjorn Andersson <andersson at kernel.org>


From vishalrao at gmail.com  Thu Dec 29 09:55:23 2022
From: vishalrao at gmail.com (Vishal Rao)
Date: Thu, 29 Dec 2022 23:25:23 +0530
Subject: Wifi 6E 6ghz not working on MediaTek MT7922 (AMD RZ616)
In-Reply-To: <Y6isrKS7zgMrNe3S@makrotopia.org>
References: <CAMWtyy1sSHc_DYQ3kq+FWMJKK5Wo3QEgO1yd6wQXx3x0Lp4Uog@mail.gmail.com>
 <Y6isrKS7zgMrNe3S@makrotopia.org>
Message-ID: <CAMWtyy2EhZMd7Yf6CWXpM7f6EbzbYDu+ifpAnwpDiAP8zPoP0g@mail.gmail.com>

Hello Daniel !

Thank you for your response - apologies for being slow to follow up -
I will post the info you asked for soon [tm] but I note there appears
to be some new firmware for the mt7922 (a few hours ago) which I will
also try when gathering the info.

Off the top of my head the regulatory info/region is set to US while I
am located in India and I have tried the latest firmware off git
master as well as another (?) location suggested by Nick Morrow with
no luck (same results) but allow me some time (likely this weekend) to
re-check and get back to you.

Regards,
Vishal

On Mon, 26 Dec 2022 at 01:34, Daniel Golle <daniel at makrotopia.org> wrote:
>
> Hi!
>
> On Sun, Dec 25, 2022 at 08:19:15PM +0530, Vishal Rao wrote:
> > Hello!
> >
> > Using Ubuntu 22.04 LTS based distro elementary OS 7 with the latest
> > available Ubuntu mainline kernel 6.1 RC5 build the wifi does not
> > connect to the 6GHZ band (Wifi 6E) and it only even shows the 6ghz
> > SSID name *after* I have connected to the 5ghz wifi band.
> >
> > This is on a new ASUS ZenBook laptop model UM5302TA with the AMD Ryzen
> > 6800U CPU platform which includes the AMD-Mediatek co-developed RZ616
> > wifi chip I believe.
> >
> > Pastebin of lspci -vvnn output: https://pastebin.ubuntu.com/p/QwM58ZkptG
> >
> > Let me know what further information I should provide - happy to do so!
>
>
> Please also share the output of `iw list` which will tell if we are
> dealing with a driver problem or a regulatory/configuration problem.
> Did you configure the wireless regulatory domain the device is located
> in?
>
> To have access to 6 GHz bands the regulatory region needs to be known,
> I read that on Ubuntu it works like this:
>
> https://askubuntu.com/questions/701709/how-can-i-change-my-wireless-cards-regulatory-domain-dbm-higher-than-30



-- 
"The World is a book, and those who do not travel read only a page." -
St. Augustine.


From broonie at kernel.org  Thu Dec 29 12:24:49 2022
From: broonie at kernel.org (Mark Brown)
Date: Thu, 29 Dec 2022 20:24:49 +0000
Subject: [PATCH] ASoC: mediatek: mt8186: Add machine support for max98357a
In-Reply-To: <20221228115756.28014-1-allen-kh.cheng@mediatek.com>
References: <20221228115756.28014-1-allen-kh.cheng@mediatek.com>
Message-ID: <167234548928.88546.3169179138497536747.b4-ty@kernel.org>

On Wed, 28 Dec 2022 19:57:56 +0800, Allen-KH Cheng wrote:
> Add support for mt8186 with mt6366 and max98357a.
> 
> 

Applied to

   broonie/sound.git for-next

Thanks!

[1/1] ASoC: mediatek: mt8186: Add machine support for max98357a
      commit: 8a54f666db581bbf07494cca44a0124acbced581

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


From broonie at kernel.org  Thu Dec 29 14:50:14 2022
From: broonie at kernel.org (Mark Brown)
Date: Thu, 29 Dec 2022 22:50:14 +0000
Subject: [PATCH 0/2] Add new AMP MAX98360A for RT5682S
In-Reply-To: <20221228122230.3818533-1-tongjian@huaqin.corp-partner.google.com>
References: <20221228122230.3818533-1-tongjian@huaqin.corp-partner.google.com>
Message-ID: <167235421493.130379.3520267907504978837.b4-ty@kernel.org>

On Wed, 28 Dec 2022 20:22:28 +0800, tongjian wrote:
> Add MAX98360A for RT5682S, MAX98360A works same as rt1019. So, it can
> be supported.
> 
> tongjian (2):
>   ASoC: mediatek: mt8186: support rt5682s_max98360
>   ASoC: dt-bindings: mt8186-mt6366: add new compatible for max98360a
> 
> [...]

Applied to

   broonie/sound.git for-next

Thanks!

[1/2] ASoC: mediatek: mt8186: support rt5682s_max98360
      commit: 6e1dbf694d7cd1737ee14866e9e05016ccc9ac40
[2/2] ASoC: dt-bindings: mt8186-mt6366: add new compatible for max98360a
      commit: 2d3dd559751ce19ba84f9690c6c7c5a4b39129df

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


From kuba at kernel.org  Thu Dec 29 17:15:28 2022
From: kuba at kernel.org (Jakub Kicinski)
Date: Thu, 29 Dec 2022 17:15:28 -0800
Subject: [PATCH v6 0/2] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <20221228063331.10756-1-biao.huang@mediatek.com>
References: <20221228063331.10756-1-biao.huang@mediatek.com>
Message-ID: <20221229171528.510b7a37@kernel.org>

On Wed, 28 Dec 2022 14:33:28 +0800 Biao Huang wrote:
> Changes in v6:
> 1. add reviewed-by as Angelo's comments
> 2. remove fix_mac_speed in driver as Andrew's comments.
> 
> Changes in v5:
> 1. reorder the clocks as Angelo's comments
> 2. add a driver patch to fix rgmii-id issue, then we can
> use a ususal way rgmii/rgmii-id as Andrew's comments.
> 
> Changes in v4:
> 1. remove {address,size}-cells = <0> to avoid warning as Angelo's feedback.
> 2. Add reviewd-by as Angelo's comments.
> 
> Changes in v3:
> 1. move stmmac-axi-config, rx-queues-config, tx-queues-configs inside ethernet
> node as Angelo's comments.
> 2. add {address,size}-cells = <0> in ethernet node as Angelo's comments.
> 
> Changes in v2:
> 1. modify pinctrl node used by ethernet to match rules in pinctrl-mt8195.yaml,
> which is pointed by Krzysztof.
> 2. remove "mac-address" property in ethernet node as comments of Krzysztof.

Please make sure to CC netdev@ on the next version of the patches.


From Biao.Huang at mediatek.com  Thu Dec 29 18:10:41 2022
From: Biao.Huang at mediatek.com (=?utf-8?B?QmlhbyBIdWFuZyAo6buE5b2qKQ==?=)
Date: Fri, 30 Dec 2022 02:10:41 +0000
Subject: [PATCH v6 0/2] arm64: dts: mt8195: Add Ethernet controller
In-Reply-To: <20221229171528.510b7a37@kernel.org>
References: <20221228063331.10756-1-biao.huang@mediatek.com>
	 <20221229171528.510b7a37@kernel.org>
Message-ID: <dd571d0ef3dc72d319ab20a0e1a960145c23845a.camel@mediatek.com>

On Thu, 2022-12-29 at 17:15 -0800, Jakub Kicinski wrote:
> On Wed, 28 Dec 2022 14:33:28 +0800 Biao Huang wrote:
> > Changes in v6:
> > 1. add reviewed-by as Angelo's comments
> > 2. remove fix_mac_speed in driver as Andrew's comments.
> > 
> > Changes in v5:
> > 1. reorder the clocks as Angelo's comments
> > 2. add a driver patch to fix rgmii-id issue, then we can
> > use a ususal way rgmii/rgmii-id as Andrew's comments.
> > 
> > Changes in v4:
> > 1. remove {address,size}-cells = <0> to avoid warning as Angelo's
> > feedback.
> > 2. Add reviewd-by as Angelo's comments.
> > 
> > Changes in v3:
> > 1. move stmmac-axi-config, rx-queues-config, tx-queues-configs
> > inside ethernet
> > node as Angelo's comments.
> > 2. add {address,size}-cells = <0> in ethernet node as Angelo's
> > comments.
> > 
> > Changes in v2:
> > 1. modify pinctrl node used by ethernet to match rules in pinctrl-
> > mt8195.yaml,
> > which is pointed by Krzysztof.
> > 2. remove "mac-address" property in ethernet node as comments of
> > Krzysztof.
> 
> Please make sure to CC netdev@ on the next version of the patches.
Thanks for your kindly reminder.

Best Regards!
Biao

From kuba at kernel.org  Thu Dec 29 20:07:36 2022
From: kuba at kernel.org (Jakub Kicinski)
Date: Thu, 29 Dec 2022 20:07:36 -0800
Subject: [PATCH net v2 4/5] net: ethernet: mtk_eth_soc: drop generic
 vlan rx offload, only use DSA untagging
In-Reply-To: <20221227140807.48413-4-nbd@nbd.name>
References: <20221227140807.48413-1-nbd@nbd.name>
	<20221227140807.48413-4-nbd@nbd.name>
Message-ID: <20221229200736.008f5ad1@kernel.org>

On Tue, 27 Dec 2022 15:08:06 +0100 Felix Fietkau wrote:
> Through testing I found out that hardware vlan rx offload support seems to
> have some hardware issues. At least when using multiple MACs and when receiving
> tagged packets on the secondary MAC, the hardware can sometimes start to emit
> wrong tags on the first MAC as well.
> 
> In order to avoid such issues, drop the feature configuration and use the
> offload feature only for DSA hardware untagging on MT7621/MT7622 devices which
> only use one MAC.

Does not apply cleanly, could you rebase and repost?


From wenst at chromium.org  Thu Dec 29 20:37:44 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 12:37:44 +0800
Subject: [PATCH v2 05/23] clk: mediatek: clk-mtk: Propagate struct device
 for composites
In-Reply-To: <20221223094259.87373-6-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-6-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5EdiiQwN7yXtp9-K9+kYPgwk3sbtAk+JNFePefuwMyDcA@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Like done for cpumux clocks, propagate struct device for composite
> clocks registered through clk-mtk helpers to be able to get runtime
> pm support for MTK clocks.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Same comment as the previous patches, could we move struct device
to the first parameter?

Otherwise this looks good to me.

ChenYu


From wenst at chromium.org  Thu Dec 29 20:43:45 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 12:43:45 +0800
Subject: [PATCH v2 06/23] clk: mediatek: clk-mux: Propagate struct device
 for mtk-mux
In-Reply-To: <20221223094259.87373-7-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-7-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5FPDxxSd54478+6t0r9P7ytFYn7u6H3ezi4jYU=0R2CpA@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Like done for other clocks, propagate struct device for mtk mux clocks
> registered through clk-mux helpers to enable runtime pm support.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Same comment as the previous patches, could we move struct device
to the first parameter?

Otherwise this looks good to me.

ChenYu


From wenst at chromium.org  Thu Dec 29 20:58:39 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 12:58:39 +0800
Subject: [PATCH v2 09/23] clk: mediatek: mt8173: Remove mtk_clk_enable_critical()
In-Reply-To: <20221223094259.87373-10-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-10-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5Hk8kguJ=joLXF3OrRXxGvuFAJFKYoK+y7q+wqDBS-wtQ@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> The entire point of mtk_clk_enable_critical() is to raise the refcount
> of some clocks so that they won't be turned off during runtime, but
> this is the same as what the CLK_IS_CRITICAL flag does.
>
> Set CLK_IS_CRITICAL on all of the critical clocks and remove the
> aforementioned function as a cleanup.
>
> No functional changes.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>


Looks good to me,

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>

However, if you move this patch before the previous one ...

> ---
>  drivers/clk/mediatek/clk-mt8173.c | 41 ++++++++++++-------------------
>  1 file changed, 16 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173.c
> index 70cdc0719658..02231f8ba6d9 100644
> --- a/drivers/clk/mediatek/clk-mt8173.c
> +++ b/drivers/clk/mediatek/clk-mt8173.c
> @@ -546,8 +546,11 @@ static const struct mtk_composite cpu_muxes[] = {
>  static const struct mtk_composite top_muxes[] = {
>         /* CLK_CFG_0 */
>         MUX(CLK_TOP_AXI_SEL, "axi_sel", axi_parents, 0x0040, 0, 3),
> -       MUX(CLK_TOP_MEM_SEL, "mem_sel", mem_parents, 0x0040, 8, 1),
> -       MUX_GATE(CLK_TOP_DDRPHYCFG_SEL, "ddrphycfg_sel", ddrphycfg_parents, 0x0040, 16, 1, 23),
> +       MUX_FLAGS(CLK_TOP_MEM_SEL, "mem_sel", mem_parents, 0x0040, 8, 1,
> +                 CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
> +       MUX_GATE_FLAGS(CLK_TOP_DDRPHYCFG_SEL, "ddrphycfg_sel",
> +                      ddrphycfg_parents, 0x0040, 16, 1, 23,
> +                      CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
>         MUX_GATE(CLK_TOP_MM_SEL, "mm_sel", mm_parents, 0x0040, 24, 4, 31),
>         /* CLK_CFG_1 */
>         MUX_GATE(CLK_TOP_PWM_SEL, "pwm_sel", pwm_parents, 0x0050, 0, 2, 7),
> @@ -581,7 +584,9 @@ static const struct mtk_composite top_muxes[] = {
>          */
>         MUX_GATE_FLAGS(CLK_TOP_DPI0_SEL, "dpi0_sel", dpi0_parents, 0x00a0, 0, 3, 7, 0),
>         MUX_GATE(CLK_TOP_IRDA_SEL, "irda_sel", irda_parents, 0x00a0, 8, 2, 15),
> -       MUX_GATE(CLK_TOP_CCI400_SEL, "cci400_sel", cci400_parents, 0x00a0, 16, 3, 23),
> +       MUX_GATE_FLAGS(CLK_TOP_CCI400_SEL, "cci400_sel",
> +                      cci400_parents, 0x00a0, 16, 3, 23,
> +                      CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
>         MUX_GATE(CLK_TOP_AUD_1_SEL, "aud_1_sel", aud_1_parents, 0x00a0, 24, 2, 31),
>         /* CLK_CFG_7 */
>         MUX_GATE(CLK_TOP_AUD_2_SEL, "aud_2_sel", aud_2_parents, 0x00b0, 0, 2, 7),
> @@ -596,7 +601,8 @@ static const struct mtk_composite top_muxes[] = {
>         MUX_GATE(CLK_TOP_MSDC50_2_H_SEL, "msdc50_2_h_sel", msdc50_2_h_parents, 0x00d0, 0, 3, 7),
>         MUX_GATE(CLK_TOP_HDCP_SEL, "hdcp_sel", hdcp_parents, 0x00d0, 8, 2, 15),
>         MUX_GATE(CLK_TOP_HDCP_24M_SEL, "hdcp_24m_sel", hdcp_24m_parents, 0x00d0, 16, 2, 23),
> -       MUX(CLK_TOP_RTC_SEL, "rtc_sel", rtc_parents, 0x00d0, 24, 2),
> +       MUX_FLAGS(CLK_TOP_RTC_SEL, "rtc_sel", rtc_parents, 0x00d0, 24, 2,
> +                 CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
>
>         DIV_GATE(CLK_TOP_APLL1_DIV0, "apll1_div0", "aud_1_sel", 0x12c, 8, 0x120, 4, 24),
>         DIV_GATE(CLK_TOP_APLL1_DIV1, "apll1_div1", "aud_1_sel", 0x12c, 9, 0x124, 8, 0),
> @@ -846,23 +852,8 @@ static const struct mtk_clk_rst_desc clk_rst_desc[] = {
>         }
>  };
>
> -static struct clk_hw_onecell_data *mt8173_top_clk_data;
> -static struct clk_hw_onecell_data *mt8173_pll_clk_data;

You wouldn't have to touch these lines twice?

ChenYu

>  static struct clk_hw_onecell_data *infra_clk_data;
>
> -static void mtk_clk_enable_critical(void)
> -{
> -       if (!mt8173_top_clk_data || !mt8173_pll_clk_data)
> -               return;
> -
> -       clk_prepare_enable(mt8173_pll_clk_data->hws[CLK_APMIXED_ARMCA15PLL]->clk);
> -       clk_prepare_enable(mt8173_pll_clk_data->hws[CLK_APMIXED_ARMCA7PLL]->clk);
> -       clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_MEM_SEL]->clk);
> -       clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_DDRPHYCFG_SEL]->clk);
> -       clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_CCI400_SEL]->clk);
> -       clk_prepare_enable(mt8173_top_clk_data->hws[CLK_TOP_RTC_SEL]->clk);
> -}
> -
>  static int clk_mt8173_topck_probe(struct platform_device *pdev)
>  {
>         struct device_node *node = pdev->dev.of_node;
> @@ -874,7 +865,7 @@ static int clk_mt8173_topck_probe(struct platform_device *pdev)
>         if (IS_ERR(base))
>                 return PTR_ERR(base);
>
> -       mt8173_top_clk_data = clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
> +       clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
>         if (IS_ERR_OR_NULL(clk_data))
>                 return -ENOMEM;
>
> @@ -895,7 +886,6 @@ static int clk_mt8173_topck_probe(struct platform_device *pdev)
>         if (r)
>                 goto unregister_composites;
>
> -       mtk_clk_enable_critical();
>         return 0;
>
>  unregister_composites:
> @@ -1048,8 +1038,10 @@ static const struct mtk_pll_div_table mmpll_div_table[] = {
>  };
>
>  static const struct mtk_pll_data plls[] = {
> -       PLL(CLK_APMIXED_ARMCA15PLL, "armca15pll", 0x200, 0x20c, 0, 0, 21, 0x204, 24, 0x0, 0x204, 0),
> -       PLL(CLK_APMIXED_ARMCA7PLL, "armca7pll", 0x210, 0x21c, 0, 0, 21, 0x214, 24, 0x0, 0x214, 0),
> +       PLL(CLK_APMIXED_ARMCA15PLL, "armca15pll", 0x200, 0x20c, 0, PLL_AO,
> +           21, 0x204, 24, 0x0, 0x204, 0),
> +       PLL(CLK_APMIXED_ARMCA7PLL, "armca7pll", 0x210, 0x21c, 0, PLL_AO,
> +           21, 0x214, 24, 0x0, 0x214, 0),
>         PLL(CLK_APMIXED_MAINPLL, "mainpll", 0x220, 0x22c, 0xf0000100, HAVE_RST_BAR, 21, 0x220, 4, 0x0, 0x224, 0),
>         PLL(CLK_APMIXED_UNIVPLL, "univpll", 0x230, 0x23c, 0xfe000000, HAVE_RST_BAR, 7, 0x230, 4, 0x0, 0x234, 14),
>         PLL_B(CLK_APMIXED_MMPLL, "mmpll", 0x240, 0x24c, 0, 0, 21, 0x244, 24, 0x0, 0x244, 0, mmpll_div_table),
> @@ -1076,7 +1068,7 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
>         if (!base)
>                 return PTR_ERR(base);
>
> -       mt8173_pll_clk_data = clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
> +       clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
>         if (IS_ERR_OR_NULL(clk_data))
>                 return -ENOMEM;
>
> @@ -1101,7 +1093,6 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
>         if (r)
>                 goto unregister_ref2usb;
>
> -       mtk_clk_enable_critical();
>         return 0;
>
>  unregister_ref2usb:
> --
> 2.39.0
>


From wenst at chromium.org  Thu Dec 29 21:12:35 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 13:12:35 +0800
Subject: [PATCH v2 11/23] clk: mediatek: Switch to mtk_clk_simple_probe()
 where possible
In-Reply-To: <20221223094259.87373-12-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-12-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5GYk2wr-UnnshT3R2uDUSn7-i5KifyJ4qDDZbptSQ9G7A@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> mtk_clk_simple_probe() is a function that registers mtk gate clocks
> and, if reset data is present, a reset controller and across all of
> the MTK clock drivers, such a function is duplicated many times:
> switch to the common mtk_clk_simple_probe() function for all of the
> clock drivers that are registering as platform drivers.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> ---
>  drivers/clk/mediatek/clk-mt2701-aud.c   | 26 +++----
>  drivers/clk/mediatek/clk-mt2701-eth.c   | 34 +++------
>  drivers/clk/mediatek/clk-mt2701-g3d.c   | 56 +++-----------
>  drivers/clk/mediatek/clk-mt2701-hif.c   | 36 +++------
>  drivers/clk/mediatek/clk-mt2712.c       | 83 ++++++++-------------
>  drivers/clk/mediatek/clk-mt6779.c       | 42 ++++++-----
>  drivers/clk/mediatek/clk-mt7622-aud.c   | 49 +++----------
>  drivers/clk/mediatek/clk-mt7622-eth.c   | 82 ++++-----------------
>  drivers/clk/mediatek/clk-mt7622-hif.c   | 85 ++++-----------------
>  drivers/clk/mediatek/clk-mt7629-hif.c   | 85 ++++-----------------
>  drivers/clk/mediatek/clk-mt8183-audio.c | 19 +++--
>  drivers/clk/mediatek/clk-mt8183.c       | 75 ++++++++-----------
>  drivers/clk/mediatek/clk-mt8192-aud.c   | 25 +++----
>  drivers/clk/mediatek/clk-mt8192.c       | 98 ++++++++-----------------
>  14 files changed, 236 insertions(+), 559 deletions(-)

This looks mostly good, however ...

> diff --git a/drivers/clk/mediatek/clk-mt2701-aud.c b/drivers/clk/mediatek/clk-mt2701-aud.c
> index ab13ab618fb5..1fd6d96b34dc 100644
> --- a/drivers/clk/mediatek/clk-mt2701-aud.c
> +++ b/drivers/clk/mediatek/clk-mt2701-aud.c
> @@ -76,6 +76,7 @@ static const struct mtk_gate_regs audio3_cg_regs = {
>  };
>
>  static const struct mtk_gate audio_clks[] = {
> +       GATE_DUMMY(CLK_DUMMY, "aud_dummy"),
>         /* AUDIO0 */
>         GATE_AUDIO0(CLK_AUD_AFE, "audio_afe", "aud_intbus_sel", 2),
>         GATE_AUDIO0(CLK_AUD_HDMI, "audio_hdmi", "audpll_sel", 20),
> @@ -138,29 +139,26 @@ static const struct mtk_gate audio_clks[] = {
>         GATE_AUDIO3(CLK_AUD_MEM_ASRC5, "audio_mem_asrc5", "asm_h_sel", 14),
>  };
>
> +static const struct mtk_clk_desc audio_desc = {
> +       .clks = audio_clks,
> +       .num_clks = ARRAY_SIZE(audio_clks),
> +};
> +
>  static const struct of_device_id of_match_clk_mt2701_aud[] = {
> -       { .compatible = "mediatek,mt2701-audsys", },
> -       {}
> +       { .compatible = "mediatek,mt2701-audsys", .data = &audio_desc },
> +       { /* sentinel */ }
>  };
>
>  static int clk_mt2701_aud_probe(struct platform_device *pdev)
>  {
> -       struct clk_hw_onecell_data *clk_data;
> -       struct device_node *node = pdev->dev.of_node;
>         int r;
>
> -       clk_data = mtk_alloc_clk_data(CLK_AUD_NR);
> -
> -       mtk_clk_register_gates(node, audio_clks, ARRAY_SIZE(audio_clks),
> -                              clk_data, &pdev->dev);
> -
> -       r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
> +       r = mtk_clk_simple_probe(pdev);
>         if (r) {
>                 dev_err(&pdev->dev,
>                         "could not register clock provider: %s: %d\n",
>                         pdev->name, r);
> -
> -               goto err_clk_provider;
> +               return r;
>         }
>
>         r = devm_of_platform_populate(&pdev->dev);
> @@ -170,13 +168,13 @@ static int clk_mt2701_aud_probe(struct platform_device *pdev)
>         return 0;
>
>  err_plat_populate:
> -       of_clk_del_provider(node);
> -err_clk_provider:
> +       mtk_clk_simple_remove(pdev);
>         return r;
>  }
>
>  static struct platform_driver clk_mt2701_aud_drv = {
>         .probe = clk_mt2701_aud_probe,
> +       .remove = mtk_clk_simple_remove,

I'm not a big fan of mixing devres and non-devres teardown code. Automatic
devres teardown happens after the remove callback returns, so in this
case you could have child devices being unregistered that touch clocks
or resets that have already been unregistered and freed in the remove
callback.

>         .driver = {
>                 .name = "clk-mt2701-aud",
>                 .of_match_table = of_match_clk_mt2701_aud,

[...]

> --- a/drivers/clk/mediatek/clk-mt2712.c
> +++ b/drivers/clk/mediatek/clk-mt2712.c

[...]

> @@ -1482,7 +1459,11 @@ static struct platform_driver clk_mt2712_drv = {
>
>  static int __init clk_mt2712_init(void)
>  {
> -       return platform_driver_register(&clk_mt2712_drv);
> +       int ret = platform_driver_register(&clk_mt2712_drv);
> +
> +       if (ret)
> +               return ret;
> +       return platform_driver_register(&clk_mt2712_simple_drv);
>  }
>
>  arch_initcall(clk_mt2712_init);

Would this get cleaned up even more? I.e. have just one driver left and
we could have the nice *_platform_driver() macros.

Thanks
ChenYu


From wenst at chromium.org  Thu Dec 29 21:17:11 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 13:17:11 +0800
Subject: [PATCH v2 14/23] clk: mediatek: clk-mt8192: Move
 CLK_TOP_CSW_F26M_D2 in top_divs
In-Reply-To: <20221223094259.87373-15-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-15-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5H26DA6McV_6XJiquM44MkrhYh1HmGQr+sB-82EOGvinQ@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> This driver is registered early in clk_mt8192_top_init_early() and
> then again in clk_mt8192_top_probe(): the difference between the
> two is that the early one is probed with CLK_OF_DECLARE_DRIVER and
> the latter is regularly probed as a platform_driver.
>
> Knowing that it is not necessary for this platform to register the
> TOP_CSW_F26M_D2 clock that early, move it to top_divs and register
> it with the others during platform_driver probe for topckgen;
>
> While at it, since the only reason why the early probe existed was
> to register that clock, remove that entirely - leaving this driver
> to use only platform_driver.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

I had some other changes dealing with this, but since the systimer DT
fixes have been merged, and this is cleaner,

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>


From wenst at chromium.org  Thu Dec 29 21:19:21 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 13:19:21 +0800
Subject: [PATCH v2 07/23] clk: mediatek: clk-mtk: Add dummy clock ops
In-Reply-To: <20221223094259.87373-8-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-8-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5H=eq0WRc=vvjD-xEKuc1tkM_t4GCHVwe8EZzSJPdEDOQ@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> In order to migrate some (few) old clock drivers to the common
> mtk_clk_simple_probe() function, add dummy clock ops to be able
> to insert a dummy clock with ID 0 at the beginning of the list.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> ---
>  drivers/clk/mediatek/clk-mtk.c | 15 +++++++++++++++
>  drivers/clk/mediatek/clk-mtk.h | 19 +++++++++++++++++++
>  2 files changed, 34 insertions(+)
>
> diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
> index a1ab34305b95..d05364e17e95 100644
> --- a/drivers/clk/mediatek/clk-mtk.c
> +++ b/drivers/clk/mediatek/clk-mtk.c
> @@ -18,6 +18,21 @@
>  #include "clk-mtk.h"
>  #include "clk-gate.h"
>
> +const struct mtk_gate_regs cg_regs_dummy = { 0, 0, 0 };

You could probably just use an empty { }, since the contents don't matter.
It would make any possible future changes to |struct mtk_gate_regs| touch
one less place.

Otherwise,

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>

> +
> +static int mtk_clk_dummy_enable(struct clk_hw *hw)
> +{
> +       return 0;
> +}
> +
> +static void mtk_clk_dummy_disable(struct clk_hw *hw) { }
> +
> +const struct clk_ops mtk_clk_dummy_ops = {
> +       .enable         = mtk_clk_dummy_enable,
> +       .disable        = mtk_clk_dummy_disable,
> +};
> +EXPORT_SYMBOL_GPL(mtk_clk_dummy_ops);
> +
>  static void mtk_init_clk_data(struct clk_hw_onecell_data *clk_data,
>                               unsigned int clk_num)
>  {
> diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
> index 15122504c02d..dd43235285db 100644
> --- a/drivers/clk/mediatek/clk-mtk.h
> +++ b/drivers/clk/mediatek/clk-mtk.h
> @@ -22,6 +22,25 @@
>
>  struct platform_device;
>
> +/*
> + * We need the clock IDs to start from zero but to maintain devicetree
> + * backwards compatibility we can't change bindings to start from zero.
> + * Only a few platforms are affected, so we solve issues given by the
> + * commonized MTK clocks probe function(s) by adding a dummy clock at
> + * the beginning where needed.
> + */
> +#define CLK_DUMMY              0
> +
> +extern const struct clk_ops mtk_clk_dummy_ops;
> +extern const struct mtk_gate_regs cg_regs_dummy;
> +
> +#define GATE_DUMMY(_id, _name) {                               \
> +               .id = _id,                                      \
> +               .name = _name,                                  \
> +               .regs = &cg_regs_dummy,                         \
> +               .ops = &mtk_clk_dummy_ops,                      \
> +       }
> +
>  struct mtk_fixed_clk {
>         int id;
>         const char *name;
> --
> 2.39.0
>


From wenst at chromium.org  Thu Dec 29 21:23:52 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 13:23:52 +0800
Subject: [PATCH v2 22/23] clk: mediatek: clk-mt7986-topckgen: Properly
 keep some clocks enabled
In-Reply-To: <20221223094259.87373-23-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-23-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5GcBCrHRUJHZG1XAXbh+BJxGnuYSbF-QgPY6Sh5nPEt1A@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Instead of calling clk_prepare_enable() on a bunch of clocks at probe
> time, set the CLK_IS_CRITICAL flag to the same as these are required
> to be always on, and this is the right way of achieving that.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>


From miles.chen at mediatek.com  Thu Dec 29 21:55:18 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Fri, 30 Dec 2022 13:55:18 +0800
Subject: [PATCH v2 20/23] clk: mediatek: clk-mt8186-topckgen: Migrate to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-21-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-21-angelogioacchino.delregno@collabora.com>
Message-ID: <20221230055518.16113-1-miles.chen@mediatek.com>

> As done with MT8192, migrate MT8186 topckgen away from a custom probe
> function and use mtk_clk_simple_{probe, remove}().
> 
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Miles Chen <miles.chen at mediatek.com> 


From trevor.wu at mediatek.com  Thu Dec 29 21:54:35 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:35 +0800
Subject: [PATCH v4 05/13] ASoC: mediatek: mt8188: support etdm in platform driver
In-Reply-To: <20221230055443.16024-1-trevor.wu@mediatek.com>
References: <20221230055443.16024-1-trevor.wu@mediatek.com>
Message-ID: <20221230055443.16024-6-trevor.wu@mediatek.com>

Add mt8188 etdm dai driver support.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 sound/soc/mediatek/mt8188/mt8188-dai-etdm.c | 2591 +++++++++++++++++++
 1 file changed, 2591 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-etdm.c

diff --git a/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c b/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
new file mode 100644
index 000000000000..f8e69d655706
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
@@ -0,0 +1,2591 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MediaTek ALSA SoC Audio DAI eTDM Control
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#include <linux/bitfield.h>
+#include <linux/pm_runtime.h>
+#include <linux/regmap.h>
+#include <sound/pcm_params.h>
+#include "mt8188-afe-clk.h"
+#include "mt8188-afe-common.h"
+#include "mt8188-reg.h"
+
+#define MT8188_ETDM_MAX_CHANNELS 16
+#define MT8188_ETDM_NORMAL_MAX_BCK_RATE 24576000
+#define ETDM_TO_DAI_ID(x) ((x) + MT8188_AFE_IO_ETDM_START)
+#define ENUM_TO_STR(x)	#x
+
+enum {
+	MTK_DAI_ETDM_FORMAT_I2S = 0,
+	MTK_DAI_ETDM_FORMAT_LJ,
+	MTK_DAI_ETDM_FORMAT_RJ,
+	MTK_DAI_ETDM_FORMAT_EIAJ,
+	MTK_DAI_ETDM_FORMAT_DSPA,
+	MTK_DAI_ETDM_FORMAT_DSPB,
+};
+
+enum {
+	MTK_DAI_ETDM_DATA_ONE_PIN = 0,
+	MTK_DAI_ETDM_DATA_MULTI_PIN,
+};
+
+enum {
+	ETDM_IN,
+	ETDM_OUT,
+};
+
+enum {
+	COWORK_ETDM_NONE = 0,
+	COWORK_ETDM_IN1_M = 2,
+	COWORK_ETDM_IN1_S = 3,
+	COWORK_ETDM_IN2_M = 4,
+	COWORK_ETDM_IN2_S = 5,
+	COWORK_ETDM_OUT1_M = 10,
+	COWORK_ETDM_OUT1_S = 11,
+	COWORK_ETDM_OUT2_M = 12,
+	COWORK_ETDM_OUT2_S = 13,
+	COWORK_ETDM_OUT3_M = 14,
+	COWORK_ETDM_OUT3_S = 15,
+};
+
+enum {
+	ETDM_RELATCH_TIMING_A1A2SYS,
+	ETDM_RELATCH_TIMING_A3SYS,
+	ETDM_RELATCH_TIMING_A4SYS,
+};
+
+enum {
+	ETDM_SYNC_NONE,
+	ETDM_SYNC_FROM_IN1 = 2,
+	ETDM_SYNC_FROM_IN2 = 4,
+	ETDM_SYNC_FROM_OUT1 = 10,
+	ETDM_SYNC_FROM_OUT2 = 12,
+	ETDM_SYNC_FROM_OUT3 = 14,
+};
+
+struct etdm_con_reg {
+	unsigned int con0;
+	unsigned int con1;
+	unsigned int con2;
+	unsigned int con3;
+	unsigned int con4;
+	unsigned int con5;
+};
+
+struct mtk_dai_etdm_rate {
+	unsigned int rate;
+	unsigned int reg_value;
+};
+
+struct mtk_dai_etdm_priv {
+	unsigned int clock_mode;
+	unsigned int data_mode;
+	bool slave_mode;
+	bool lrck_inv;
+	bool bck_inv;
+	unsigned int format;
+	unsigned int slots;
+	unsigned int lrck_width;
+	unsigned int mclk_freq;
+	unsigned int mclk_fixed_apll;
+	unsigned int mclk_apll;
+	unsigned int mclk_dir;
+	int cowork_source_id; //dai id
+	unsigned int cowork_slv_count;
+	int cowork_slv_id[MT8188_AFE_IO_ETDM_NUM - 1]; //dai_id
+	bool in_disable_ch[MT8188_ETDM_MAX_CHANNELS];
+	unsigned int en_ref_cnt;
+	bool is_prepared;
+};
+
+static const struct mtk_dai_etdm_rate mt8188_etdm_rates[] = {
+	{ .rate = 8000, .reg_value = 0, },
+	{ .rate = 12000, .reg_value = 1, },
+	{ .rate = 16000, .reg_value = 2, },
+	{ .rate = 24000, .reg_value = 3, },
+	{ .rate = 32000, .reg_value = 4, },
+	{ .rate = 48000, .reg_value = 5, },
+	{ .rate = 96000, .reg_value = 7, },
+	{ .rate = 192000, .reg_value = 9, },
+	{ .rate = 384000, .reg_value = 11, },
+	{ .rate = 11025, .reg_value = 16, },
+	{ .rate = 22050, .reg_value = 17, },
+	{ .rate = 44100, .reg_value = 18, },
+	{ .rate = 88200, .reg_value = 19, },
+	{ .rate = 176400, .reg_value = 20, },
+	{ .rate = 352800, .reg_value = 21, },
+};
+
+static int get_etdm_fs_timing(unsigned int rate)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(mt8188_etdm_rates); i++)
+		if (mt8188_etdm_rates[i].rate == rate)
+			return mt8188_etdm_rates[i].reg_value;
+
+	return -EINVAL;
+}
+
+static unsigned int get_etdm_ch_fixup(unsigned int channels)
+{
+	if (channels > 16)
+		return 24;
+	else if (channels > 8)
+		return 16;
+	else if (channels > 4)
+		return 8;
+	else if (channels > 2)
+		return 4;
+	else
+		return 2;
+}
+
+static int get_etdm_reg(unsigned int dai_id, struct etdm_con_reg *etdm_reg)
+{
+	switch (dai_id) {
+	case MT8188_AFE_IO_ETDM1_IN:
+		etdm_reg->con0 = ETDM_IN1_CON0;
+		etdm_reg->con1 = ETDM_IN1_CON1;
+		etdm_reg->con2 = ETDM_IN1_CON2;
+		etdm_reg->con3 = ETDM_IN1_CON3;
+		etdm_reg->con4 = ETDM_IN1_CON4;
+		etdm_reg->con5 = ETDM_IN1_CON5;
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		etdm_reg->con0 = ETDM_IN2_CON0;
+		etdm_reg->con1 = ETDM_IN2_CON1;
+		etdm_reg->con2 = ETDM_IN2_CON2;
+		etdm_reg->con3 = ETDM_IN2_CON3;
+		etdm_reg->con4 = ETDM_IN2_CON4;
+		etdm_reg->con5 = ETDM_IN2_CON5;
+		break;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		etdm_reg->con0 = ETDM_OUT1_CON0;
+		etdm_reg->con1 = ETDM_OUT1_CON1;
+		etdm_reg->con2 = ETDM_OUT1_CON2;
+		etdm_reg->con3 = ETDM_OUT1_CON3;
+		etdm_reg->con4 = ETDM_OUT1_CON4;
+		etdm_reg->con5 = ETDM_OUT1_CON5;
+		break;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		etdm_reg->con0 = ETDM_OUT2_CON0;
+		etdm_reg->con1 = ETDM_OUT2_CON1;
+		etdm_reg->con2 = ETDM_OUT2_CON2;
+		etdm_reg->con3 = ETDM_OUT2_CON3;
+		etdm_reg->con4 = ETDM_OUT2_CON4;
+		etdm_reg->con5 = ETDM_OUT2_CON5;
+		break;
+	case MT8188_AFE_IO_ETDM3_OUT:
+	case MT8188_AFE_IO_DPTX:
+		etdm_reg->con0 = ETDM_OUT3_CON0;
+		etdm_reg->con1 = ETDM_OUT3_CON1;
+		etdm_reg->con2 = ETDM_OUT3_CON2;
+		etdm_reg->con3 = ETDM_OUT3_CON3;
+		etdm_reg->con4 = ETDM_OUT3_CON4;
+		etdm_reg->con5 = ETDM_OUT3_CON5;
+		break;
+	default:
+		return -EINVAL;
+	}
+	return 0;
+}
+
+static int get_etdm_dir(unsigned int dai_id)
+{
+	switch (dai_id) {
+	case MT8188_AFE_IO_ETDM1_IN:
+	case MT8188_AFE_IO_ETDM2_IN:
+		return ETDM_IN;
+	case MT8188_AFE_IO_ETDM1_OUT:
+	case MT8188_AFE_IO_ETDM2_OUT:
+	case MT8188_AFE_IO_ETDM3_OUT:
+		return ETDM_OUT;
+	default:
+		return -EINVAL;
+	}
+}
+
+static int get_etdm_wlen(unsigned int bitwidth)
+{
+	return bitwidth <= 16 ? 16 : 32;
+}
+
+static bool is_valid_etdm_dai(int dai_id)
+{
+	switch (dai_id) {
+	case MT8188_AFE_IO_ETDM1_IN:
+		fallthrough;
+	case MT8188_AFE_IO_ETDM2_IN:
+		fallthrough;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		fallthrough;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		fallthrough;
+	case MT8188_AFE_IO_DPTX:
+		fallthrough;
+	case MT8188_AFE_IO_ETDM3_OUT:
+		return true;
+	default:
+		return false;
+	}
+}
+
+static int is_cowork_mode(struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	return (etdm_data->cowork_slv_count > 0 ||
+		etdm_data->cowork_source_id != COWORK_ETDM_NONE);
+}
+
+static int sync_to_dai_id(int source_sel)
+{
+	switch (source_sel) {
+	case ETDM_SYNC_FROM_IN1:
+		return MT8188_AFE_IO_ETDM1_IN;
+	case ETDM_SYNC_FROM_IN2:
+		return MT8188_AFE_IO_ETDM2_IN;
+	case ETDM_SYNC_FROM_OUT1:
+		return MT8188_AFE_IO_ETDM1_OUT;
+	case ETDM_SYNC_FROM_OUT2:
+		return MT8188_AFE_IO_ETDM2_OUT;
+	case ETDM_SYNC_FROM_OUT3:
+		return MT8188_AFE_IO_ETDM3_OUT;
+	default:
+		return 0;
+	}
+}
+
+static int get_etdm_cowork_master_id(struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	int dai_id;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+	dai_id = etdm_data->cowork_source_id;
+
+	if (dai_id == COWORK_ETDM_NONE)
+		dai_id = dai->id;
+
+	return dai_id;
+}
+
+static int mtk_dai_etdm_get_cg_id_by_dai_id(int dai_id)
+{
+	int cg_id = -1;
+
+	switch (dai_id) {
+	case MT8188_AFE_IO_DPTX:
+		cg_id = MT8188_CLK_AUD_HDMI_OUT;
+		break;
+	case MT8188_AFE_IO_ETDM1_IN:
+		cg_id = MT8188_CLK_AUD_TDM_IN;
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		cg_id = MT8188_CLK_AUD_I2SIN;
+		break;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		cg_id = MT8188_CLK_AUD_TDM_OUT;
+		break;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		cg_id = MT8188_CLK_AUD_I2S_OUT;
+		break;
+	case MT8188_AFE_IO_ETDM3_OUT:
+		cg_id = MT8188_CLK_AUD_HDMI_OUT;
+		break;
+	default:
+		break;
+	}
+
+	return cg_id;
+}
+
+static int mtk_dai_etdm_get_clk_id_by_dai_id(int dai_id)
+{
+	int clk_id = -1;
+
+	switch (dai_id) {
+	case MT8188_AFE_IO_DPTX:
+		clk_id = MT8188_CLK_TOP_DPTX_M_SEL;
+		break;
+	case MT8188_AFE_IO_ETDM1_IN:
+		clk_id = MT8188_CLK_TOP_I2SI1_M_SEL;
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		clk_id = MT8188_CLK_TOP_I2SI2_M_SEL;
+		break;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		clk_id = MT8188_CLK_TOP_I2SO1_M_SEL;
+		break;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		clk_id = MT8188_CLK_TOP_I2SO2_M_SEL;
+		break;
+	case MT8188_AFE_IO_ETDM3_OUT:
+	default:
+		break;
+	}
+
+	return clk_id;
+}
+
+static int mtk_dai_etdm_get_clkdiv_id_by_dai_id(int dai_id)
+{
+	int clk_id = -1;
+
+	switch (dai_id) {
+	case MT8188_AFE_IO_DPTX:
+		clk_id = MT8188_CLK_TOP_APLL12_DIV9;
+		break;
+	case MT8188_AFE_IO_ETDM1_IN:
+		clk_id = MT8188_CLK_TOP_APLL12_DIV0;
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		clk_id = MT8188_CLK_TOP_APLL12_DIV1;
+		break;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		clk_id = MT8188_CLK_TOP_APLL12_DIV2;
+		break;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		clk_id = MT8188_CLK_TOP_APLL12_DIV3;
+		break;
+	case MT8188_AFE_IO_ETDM3_OUT:
+	default:
+		break;
+	}
+
+	return clk_id;
+}
+
+static int mtk_dai_etdm_enable_mclk(struct mtk_base_afe *afe, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	int clkdiv_id = mtk_dai_etdm_get_clkdiv_id_by_dai_id(dai_id);
+
+	if (clkdiv_id < 0)
+		return -EINVAL;
+
+	mt8188_afe_enable_clk(afe, afe_priv->clk[clkdiv_id]);
+
+	return 0;
+}
+
+static int mtk_dai_etdm_disable_mclk(struct mtk_base_afe *afe, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	int clkdiv_id = mtk_dai_etdm_get_clkdiv_id_by_dai_id(dai_id);
+
+	if (clkdiv_id < 0)
+		return -EINVAL;
+
+	mt8188_afe_disable_clk(afe, afe_priv->clk[clkdiv_id]);
+
+	return 0;
+}
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o048_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN48, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN48, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN48_1, 14, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN48_2, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o049_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN49, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN49, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN49_1, 15, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN49_2, 7, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o050_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN50, 24, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN50_1, 16, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o051_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN51, 25, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN51_1, 17, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o052_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN52, 26, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN52_1, 18, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o053_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN53, 27, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN53_1, 19, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o054_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN54, 28, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN54_1, 20, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o055_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN55, 29, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN55_1, 21, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o056_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I030 Switch", AFE_CONN56, 30, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I054 Switch", AFE_CONN56_1, 22, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o057_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I031 Switch", AFE_CONN57, 31, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I055 Switch", AFE_CONN57_1, 23, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o058_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I032 Switch", AFE_CONN58_1, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I056 Switch", AFE_CONN58_1, 24, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o059_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I033 Switch", AFE_CONN59_1, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I057 Switch", AFE_CONN59_1, 25, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o060_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I034 Switch", AFE_CONN60_1, 2, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I058 Switch", AFE_CONN60_1, 26, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o061_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I035 Switch", AFE_CONN61_1, 3, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I059 Switch", AFE_CONN61_1, 27, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o062_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I036 Switch", AFE_CONN62_1, 4, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I060 Switch", AFE_CONN62_1, 28, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o063_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I037 Switch", AFE_CONN63_1, 5, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I061 Switch", AFE_CONN63_1, 29, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o072_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN72, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN72, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN72_1, 14, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN72_2, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o073_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN73, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN73, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN73_1, 15, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN73_2, 7, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o074_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN74, 24, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN74_1, 16, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o075_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN75, 25, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN75_1, 17, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o076_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN76, 26, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN76_1, 18, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o077_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN77, 27, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN77_1, 19, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o078_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN78, 28, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN78_1, 20, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o079_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN79, 29, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN79_1, 21, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o080_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I030 Switch", AFE_CONN80, 30, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I054 Switch", AFE_CONN80_1, 22, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o081_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I031 Switch", AFE_CONN81, 31, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I055 Switch", AFE_CONN81_1, 23, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o082_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I032 Switch", AFE_CONN82_1, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I056 Switch", AFE_CONN82_1, 24, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o083_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I033 Switch", AFE_CONN83_1, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I057 Switch", AFE_CONN83_1, 25, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o084_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I034 Switch", AFE_CONN84_1, 2, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I058 Switch", AFE_CONN84_1, 26, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o085_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I035 Switch", AFE_CONN85_1, 3, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I059 Switch", AFE_CONN85_1, 27, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o086_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I036 Switch", AFE_CONN86_1, 4, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I060 Switch", AFE_CONN86_1, 28, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_etdm_o087_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I037 Switch", AFE_CONN87_1, 5, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I061 Switch", AFE_CONN87_1, 29, 1, 0),
+};
+
+static const char * const mt8188_etdm_clk_src_sel_text[] = {
+	"26m",
+	"a1sys_a2sys",
+	"a3sys",
+	"a4sys",
+};
+
+static SOC_ENUM_SINGLE_EXT_DECL(etdmout_clk_src_enum,
+	mt8188_etdm_clk_src_sel_text);
+
+static const char * const hdmitx_dptx_mux_map[] = {
+	"Disconnect", "Connect",
+};
+
+static int hdmitx_dptx_mux_map_value[] = {
+	0, 1,
+};
+
+/* HDMI_OUT_MUX */
+static SOC_VALUE_ENUM_SINGLE_AUTODISABLE_DECL(hdmi_out_mux_map_enum,
+				SND_SOC_NOPM,
+				0,
+				1,
+				hdmitx_dptx_mux_map,
+				hdmitx_dptx_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_out_mux_control =
+	SOC_DAPM_ENUM("HDMI_OUT_MUX", hdmi_out_mux_map_enum);
+
+/* DPTX_OUT_MUX */
+static SOC_VALUE_ENUM_SINGLE_AUTODISABLE_DECL(dptx_out_mux_map_enum,
+				SND_SOC_NOPM,
+				0,
+				1,
+				hdmitx_dptx_mux_map,
+				hdmitx_dptx_mux_map_value);
+
+static const struct snd_kcontrol_new dptx_out_mux_control =
+	SOC_DAPM_ENUM("DPTX_OUT_MUX", dptx_out_mux_map_enum);
+
+/* HDMI_CH0_MUX ~ HDMI_CH7_MUX */
+static const char *const afe_conn_hdmi_mux_map[] = {
+	"CH0", "CH1", "CH2", "CH3", "CH4", "CH5", "CH6", "CH7",
+};
+
+static int afe_conn_hdmi_mux_map_value[] = {
+	0, 1, 2, 3, 4, 5, 6, 7,
+};
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch0_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				0,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch0_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH0_MUX", hdmi_ch0_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch1_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				4,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch1_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH1_MUX", hdmi_ch1_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch2_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				8,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch2_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH2_MUX", hdmi_ch2_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch3_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				12,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch3_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH3_MUX", hdmi_ch3_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch4_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				16,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch4_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH4_MUX", hdmi_ch4_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch5_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				20,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch5_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH5_MUX", hdmi_ch5_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch6_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				24,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch6_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH6_MUX", hdmi_ch6_mux_map_enum);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(hdmi_ch7_mux_map_enum,
+				AFE_TDMOUT_CONN0,
+				28,
+				0xf,
+				afe_conn_hdmi_mux_map,
+				afe_conn_hdmi_mux_map_value);
+
+static const struct snd_kcontrol_new hdmi_ch7_mux_control =
+	SOC_DAPM_ENUM("HDMI_CH7_MUX", hdmi_ch7_mux_map_enum);
+
+static int mt8188_etdm_clk_src_sel_put(struct snd_kcontrol *kcontrol,
+				       struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
+	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	unsigned int source = ucontrol->value.enumerated.item[0];
+	unsigned int val;
+	unsigned int old_val;
+	unsigned int mask;
+	unsigned int reg;
+	unsigned int shift;
+
+	if (source >= e->items)
+		return -EINVAL;
+
+	if (!strcmp(kcontrol->id.name, "ETDM_OUT1_Clock_Source")) {
+		reg = ETDM_OUT1_CON4;
+		mask = ETDM_OUT_CON4_CLOCK_MASK;
+		shift = ETDM_OUT_CON4_CLOCK_SHIFT;
+		val = FIELD_PREP(ETDM_OUT_CON4_CLOCK_MASK, source);
+	} else if (!strcmp(kcontrol->id.name, "ETDM_OUT2_Clock_Source")) {
+		reg = ETDM_OUT2_CON4;
+		mask = ETDM_OUT_CON4_CLOCK_MASK;
+		shift = ETDM_OUT_CON4_CLOCK_SHIFT;
+		val = FIELD_PREP(ETDM_OUT_CON4_CLOCK_MASK, source);
+	} else if (!strcmp(kcontrol->id.name, "ETDM_OUT3_Clock_Source")) {
+		reg = ETDM_OUT3_CON4;
+		mask = ETDM_OUT_CON4_CLOCK_MASK;
+		shift = ETDM_OUT_CON4_CLOCK_SHIFT;
+		val = FIELD_PREP(ETDM_OUT_CON4_CLOCK_MASK, source);
+	} else if (!strcmp(kcontrol->id.name, "ETDM_IN1_Clock_Source")) {
+		reg = ETDM_IN1_CON2;
+		mask = ETDM_IN_CON2_CLOCK_MASK;
+		shift = ETDM_IN_CON2_CLOCK_SHIFT;
+		val = FIELD_PREP(ETDM_IN_CON2_CLOCK_MASK, source);
+	} else if (!strcmp(kcontrol->id.name, "ETDM_IN2_Clock_Source")) {
+		reg = ETDM_IN2_CON2;
+		mask = ETDM_IN_CON2_CLOCK_MASK;
+		shift = ETDM_IN_CON2_CLOCK_SHIFT;
+		val = FIELD_PREP(ETDM_IN_CON2_CLOCK_MASK, source);
+	} else {
+		return -EINVAL;
+	}
+
+	regmap_read(afe->regmap, reg, &old_val);
+	old_val &= mask;
+	old_val >>= shift;
+
+	if (old_val == val)
+		return 0;
+
+	regmap_update_bits(afe->regmap, reg, mask, val);
+
+	return 1;
+}
+
+static int mt8188_etdm_clk_src_sel_get(struct snd_kcontrol *kcontrol,
+				       struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component =
+		snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	unsigned int value;
+	unsigned int reg;
+	unsigned int mask;
+	unsigned int shift;
+
+	if (!strcmp(kcontrol->id.name, "ETDM_OUT1_Clock_Source")) {
+		reg = ETDM_OUT1_CON4;
+		mask = ETDM_OUT_CON4_CLOCK_MASK;
+		shift = ETDM_OUT_CON4_CLOCK_SHIFT;
+	} else if (!strcmp(kcontrol->id.name, "ETDM_OUT2_Clock_Source")) {
+		reg = ETDM_OUT2_CON4;
+		mask = ETDM_OUT_CON4_CLOCK_MASK;
+		shift = ETDM_OUT_CON4_CLOCK_SHIFT;
+	} else if (!strcmp(kcontrol->id.name, "ETDM_OUT3_Clock_Source")) {
+		reg = ETDM_OUT3_CON4;
+		mask = ETDM_OUT_CON4_CLOCK_MASK;
+		shift = ETDM_OUT_CON4_CLOCK_SHIFT;
+	} else if (!strcmp(kcontrol->id.name, "ETDM_IN1_Clock_Source")) {
+		reg = ETDM_IN1_CON2;
+		mask = ETDM_IN_CON2_CLOCK_MASK;
+		shift = ETDM_IN_CON2_CLOCK_SHIFT;
+	} else if (!strcmp(kcontrol->id.name, "ETDM_IN2_Clock_Source")) {
+		reg = ETDM_IN2_CON2;
+		mask = ETDM_IN_CON2_CLOCK_MASK;
+		shift = ETDM_IN_CON2_CLOCK_SHIFT;
+	} else {
+		return -EINVAL;
+	}
+
+	regmap_read(afe->regmap, reg, &value);
+
+	value &= mask;
+	value >>= shift;
+	ucontrol->value.enumerated.item[0] = value;
+	return 0;
+}
+
+static const struct snd_kcontrol_new mtk_dai_etdm_controls[] = {
+	SOC_ENUM_EXT("ETDM_OUT1_Clock_Source", etdmout_clk_src_enum,
+		     mt8188_etdm_clk_src_sel_get,
+		     mt8188_etdm_clk_src_sel_put),
+	SOC_ENUM_EXT("ETDM_OUT2_Clock_Source", etdmout_clk_src_enum,
+		     mt8188_etdm_clk_src_sel_get,
+		     mt8188_etdm_clk_src_sel_put),
+	SOC_ENUM_EXT("ETDM_OUT3_Clock_Source", etdmout_clk_src_enum,
+		     mt8188_etdm_clk_src_sel_get,
+		     mt8188_etdm_clk_src_sel_put),
+	SOC_ENUM_EXT("ETDM_IN1_Clock_Source", etdmout_clk_src_enum,
+		     mt8188_etdm_clk_src_sel_get,
+		     mt8188_etdm_clk_src_sel_put),
+	SOC_ENUM_EXT("ETDM_IN2_Clock_Source", etdmout_clk_src_enum,
+		     mt8188_etdm_clk_src_sel_get,
+		     mt8188_etdm_clk_src_sel_put),
+};
+
+static const struct snd_soc_dapm_widget mtk_dai_etdm_widgets[] = {
+	/* eTDM_IN2 */
+	SND_SOC_DAPM_MIXER("I012", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I013", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I014", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I015", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I016", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I017", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I018", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I019", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I188", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I189", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I190", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I191", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I192", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I193", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I194", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I195", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	/* eTDM_IN1 */
+	SND_SOC_DAPM_MIXER("I072", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I073", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I074", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I075", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I076", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I077", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I078", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I079", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I080", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I081", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I082", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I083", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I084", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I085", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I086", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I087", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	/* eTDM_OUT2 */
+	SND_SOC_DAPM_MIXER("O048", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o048_mix, ARRAY_SIZE(mtk_dai_etdm_o048_mix)),
+	SND_SOC_DAPM_MIXER("O049", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o049_mix, ARRAY_SIZE(mtk_dai_etdm_o049_mix)),
+	SND_SOC_DAPM_MIXER("O050", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o050_mix, ARRAY_SIZE(mtk_dai_etdm_o050_mix)),
+	SND_SOC_DAPM_MIXER("O051", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o051_mix, ARRAY_SIZE(mtk_dai_etdm_o051_mix)),
+	SND_SOC_DAPM_MIXER("O052", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o052_mix, ARRAY_SIZE(mtk_dai_etdm_o052_mix)),
+	SND_SOC_DAPM_MIXER("O053", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o053_mix, ARRAY_SIZE(mtk_dai_etdm_o053_mix)),
+	SND_SOC_DAPM_MIXER("O054", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o054_mix, ARRAY_SIZE(mtk_dai_etdm_o054_mix)),
+	SND_SOC_DAPM_MIXER("O055", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o055_mix, ARRAY_SIZE(mtk_dai_etdm_o055_mix)),
+	SND_SOC_DAPM_MIXER("O056", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o056_mix, ARRAY_SIZE(mtk_dai_etdm_o056_mix)),
+	SND_SOC_DAPM_MIXER("O057", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o057_mix, ARRAY_SIZE(mtk_dai_etdm_o057_mix)),
+	SND_SOC_DAPM_MIXER("O058", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o058_mix, ARRAY_SIZE(mtk_dai_etdm_o058_mix)),
+	SND_SOC_DAPM_MIXER("O059", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o059_mix, ARRAY_SIZE(mtk_dai_etdm_o059_mix)),
+	SND_SOC_DAPM_MIXER("O060", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o060_mix, ARRAY_SIZE(mtk_dai_etdm_o060_mix)),
+	SND_SOC_DAPM_MIXER("O061", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o061_mix, ARRAY_SIZE(mtk_dai_etdm_o061_mix)),
+	SND_SOC_DAPM_MIXER("O062", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o062_mix, ARRAY_SIZE(mtk_dai_etdm_o062_mix)),
+	SND_SOC_DAPM_MIXER("O063", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o063_mix, ARRAY_SIZE(mtk_dai_etdm_o063_mix)),
+
+	/* eTDM_OUT1 */
+	SND_SOC_DAPM_MIXER("O072", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o072_mix, ARRAY_SIZE(mtk_dai_etdm_o072_mix)),
+	SND_SOC_DAPM_MIXER("O073", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o073_mix, ARRAY_SIZE(mtk_dai_etdm_o073_mix)),
+	SND_SOC_DAPM_MIXER("O074", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o074_mix, ARRAY_SIZE(mtk_dai_etdm_o074_mix)),
+	SND_SOC_DAPM_MIXER("O075", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o075_mix, ARRAY_SIZE(mtk_dai_etdm_o075_mix)),
+	SND_SOC_DAPM_MIXER("O076", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o076_mix, ARRAY_SIZE(mtk_dai_etdm_o076_mix)),
+	SND_SOC_DAPM_MIXER("O077", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o077_mix, ARRAY_SIZE(mtk_dai_etdm_o077_mix)),
+	SND_SOC_DAPM_MIXER("O078", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o078_mix, ARRAY_SIZE(mtk_dai_etdm_o078_mix)),
+	SND_SOC_DAPM_MIXER("O079", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o079_mix, ARRAY_SIZE(mtk_dai_etdm_o079_mix)),
+	SND_SOC_DAPM_MIXER("O080", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o080_mix, ARRAY_SIZE(mtk_dai_etdm_o080_mix)),
+	SND_SOC_DAPM_MIXER("O081", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o081_mix, ARRAY_SIZE(mtk_dai_etdm_o081_mix)),
+	SND_SOC_DAPM_MIXER("O082", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o082_mix, ARRAY_SIZE(mtk_dai_etdm_o082_mix)),
+	SND_SOC_DAPM_MIXER("O083", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o083_mix, ARRAY_SIZE(mtk_dai_etdm_o083_mix)),
+	SND_SOC_DAPM_MIXER("O084", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o084_mix, ARRAY_SIZE(mtk_dai_etdm_o084_mix)),
+	SND_SOC_DAPM_MIXER("O085", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o085_mix, ARRAY_SIZE(mtk_dai_etdm_o085_mix)),
+	SND_SOC_DAPM_MIXER("O086", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o086_mix, ARRAY_SIZE(mtk_dai_etdm_o086_mix)),
+	SND_SOC_DAPM_MIXER("O087", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_etdm_o087_mix, ARRAY_SIZE(mtk_dai_etdm_o087_mix)),
+
+	/* eTDM_OUT3 */
+	SND_SOC_DAPM_MUX("HDMI_OUT_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_out_mux_control),
+	SND_SOC_DAPM_MUX("DPTX_OUT_MUX", SND_SOC_NOPM, 0, 0,
+			 &dptx_out_mux_control),
+
+	SND_SOC_DAPM_MUX("HDMI_CH0_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch0_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH1_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch1_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH2_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch2_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH3_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch3_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH4_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch4_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH5_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch5_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH6_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch6_mux_control),
+	SND_SOC_DAPM_MUX("HDMI_CH7_MUX", SND_SOC_NOPM, 0, 0,
+			 &hdmi_ch7_mux_control),
+
+	SND_SOC_DAPM_INPUT("ETDM_INPUT"),
+	SND_SOC_DAPM_OUTPUT("ETDM_OUTPUT"),
+};
+
+static const struct snd_soc_dapm_route mtk_dai_etdm_routes[] = {
+	{"I012", NULL, "ETDM2_IN"},
+	{"I013", NULL, "ETDM2_IN"},
+	{"I014", NULL, "ETDM2_IN"},
+	{"I015", NULL, "ETDM2_IN"},
+	{"I016", NULL, "ETDM2_IN"},
+	{"I017", NULL, "ETDM2_IN"},
+	{"I018", NULL, "ETDM2_IN"},
+	{"I019", NULL, "ETDM2_IN"},
+	{"I188", NULL, "ETDM2_IN"},
+	{"I189", NULL, "ETDM2_IN"},
+	{"I190", NULL, "ETDM2_IN"},
+	{"I191", NULL, "ETDM2_IN"},
+	{"I192", NULL, "ETDM2_IN"},
+	{"I193", NULL, "ETDM2_IN"},
+	{"I194", NULL, "ETDM2_IN"},
+	{"I195", NULL, "ETDM2_IN"},
+
+	{"I072", NULL, "ETDM1_IN"},
+	{"I073", NULL, "ETDM1_IN"},
+	{"I074", NULL, "ETDM1_IN"},
+	{"I075", NULL, "ETDM1_IN"},
+	{"I076", NULL, "ETDM1_IN"},
+	{"I077", NULL, "ETDM1_IN"},
+	{"I078", NULL, "ETDM1_IN"},
+	{"I079", NULL, "ETDM1_IN"},
+	{"I080", NULL, "ETDM1_IN"},
+	{"I081", NULL, "ETDM1_IN"},
+	{"I082", NULL, "ETDM1_IN"},
+	{"I083", NULL, "ETDM1_IN"},
+	{"I084", NULL, "ETDM1_IN"},
+	{"I085", NULL, "ETDM1_IN"},
+	{"I086", NULL, "ETDM1_IN"},
+	{"I087", NULL, "ETDM1_IN"},
+
+	{"UL8", NULL, "ETDM1_IN"},
+	{"UL3", NULL, "ETDM2_IN"},
+
+	{"ETDM2_OUT", NULL, "O048"},
+	{"ETDM2_OUT", NULL, "O049"},
+	{"ETDM2_OUT", NULL, "O050"},
+	{"ETDM2_OUT", NULL, "O051"},
+	{"ETDM2_OUT", NULL, "O052"},
+	{"ETDM2_OUT", NULL, "O053"},
+	{"ETDM2_OUT", NULL, "O054"},
+	{"ETDM2_OUT", NULL, "O055"},
+	{"ETDM2_OUT", NULL, "O056"},
+	{"ETDM2_OUT", NULL, "O057"},
+	{"ETDM2_OUT", NULL, "O058"},
+	{"ETDM2_OUT", NULL, "O059"},
+	{"ETDM2_OUT", NULL, "O060"},
+	{"ETDM2_OUT", NULL, "O061"},
+	{"ETDM2_OUT", NULL, "O062"},
+	{"ETDM2_OUT", NULL, "O063"},
+
+	{"ETDM1_OUT", NULL, "O072"},
+	{"ETDM1_OUT", NULL, "O073"},
+	{"ETDM1_OUT", NULL, "O074"},
+	{"ETDM1_OUT", NULL, "O075"},
+	{"ETDM1_OUT", NULL, "O076"},
+	{"ETDM1_OUT", NULL, "O077"},
+	{"ETDM1_OUT", NULL, "O078"},
+	{"ETDM1_OUT", NULL, "O079"},
+	{"ETDM1_OUT", NULL, "O080"},
+	{"ETDM1_OUT", NULL, "O081"},
+	{"ETDM1_OUT", NULL, "O082"},
+	{"ETDM1_OUT", NULL, "O083"},
+	{"ETDM1_OUT", NULL, "O084"},
+	{"ETDM1_OUT", NULL, "O085"},
+	{"ETDM1_OUT", NULL, "O086"},
+	{"ETDM1_OUT", NULL, "O087"},
+
+	{"O048", "I020 Switch", "I020"},
+	{"O049", "I021 Switch", "I021"},
+
+	{"O048", "I022 Switch", "I022"},
+	{"O049", "I023 Switch", "I023"},
+	{"O050", "I024 Switch", "I024"},
+	{"O051", "I025 Switch", "I025"},
+	{"O052", "I026 Switch", "I026"},
+	{"O053", "I027 Switch", "I027"},
+	{"O054", "I028 Switch", "I028"},
+	{"O055", "I029 Switch", "I029"},
+	{"O056", "I030 Switch", "I030"},
+	{"O057", "I031 Switch", "I031"},
+	{"O058", "I032 Switch", "I032"},
+	{"O059", "I033 Switch", "I033"},
+	{"O060", "I034 Switch", "I034"},
+	{"O061", "I035 Switch", "I035"},
+	{"O062", "I036 Switch", "I036"},
+	{"O063", "I037 Switch", "I037"},
+
+	{"O048", "I046 Switch", "I046"},
+	{"O049", "I047 Switch", "I047"},
+	{"O050", "I048 Switch", "I048"},
+	{"O051", "I049 Switch", "I049"},
+	{"O052", "I050 Switch", "I050"},
+	{"O053", "I051 Switch", "I051"},
+	{"O054", "I052 Switch", "I052"},
+	{"O055", "I053 Switch", "I053"},
+	{"O056", "I054 Switch", "I054"},
+	{"O057", "I055 Switch", "I055"},
+	{"O058", "I056 Switch", "I056"},
+	{"O059", "I057 Switch", "I057"},
+	{"O060", "I058 Switch", "I058"},
+	{"O061", "I059 Switch", "I059"},
+	{"O062", "I060 Switch", "I060"},
+	{"O063", "I061 Switch", "I061"},
+
+	{"O048", "I070 Switch", "I070"},
+	{"O049", "I071 Switch", "I071"},
+
+	{"O072", "I020 Switch", "I020"},
+	{"O073", "I021 Switch", "I021"},
+
+	{"O072", "I022 Switch", "I022"},
+	{"O073", "I023 Switch", "I023"},
+	{"O074", "I024 Switch", "I024"},
+	{"O075", "I025 Switch", "I025"},
+	{"O076", "I026 Switch", "I026"},
+	{"O077", "I027 Switch", "I027"},
+	{"O078", "I028 Switch", "I028"},
+	{"O079", "I029 Switch", "I029"},
+	{"O080", "I030 Switch", "I030"},
+	{"O081", "I031 Switch", "I031"},
+	{"O082", "I032 Switch", "I032"},
+	{"O083", "I033 Switch", "I033"},
+	{"O084", "I034 Switch", "I034"},
+	{"O085", "I035 Switch", "I035"},
+	{"O086", "I036 Switch", "I036"},
+	{"O087", "I037 Switch", "I037"},
+
+	{"O072", "I046 Switch", "I046"},
+	{"O073", "I047 Switch", "I047"},
+	{"O074", "I048 Switch", "I048"},
+	{"O075", "I049 Switch", "I049"},
+	{"O076", "I050 Switch", "I050"},
+	{"O077", "I051 Switch", "I051"},
+	{"O078", "I052 Switch", "I052"},
+	{"O079", "I053 Switch", "I053"},
+	{"O080", "I054 Switch", "I054"},
+	{"O081", "I055 Switch", "I055"},
+	{"O082", "I056 Switch", "I056"},
+	{"O083", "I057 Switch", "I057"},
+	{"O084", "I058 Switch", "I058"},
+	{"O085", "I059 Switch", "I059"},
+	{"O086", "I060 Switch", "I060"},
+	{"O087", "I061 Switch", "I061"},
+
+	{"O072", "I070 Switch", "I070"},
+	{"O073", "I071 Switch", "I071"},
+
+	{"HDMI_CH0_MUX", "CH0", "DL10"},
+	{"HDMI_CH0_MUX", "CH1", "DL10"},
+	{"HDMI_CH0_MUX", "CH2", "DL10"},
+	{"HDMI_CH0_MUX", "CH3", "DL10"},
+	{"HDMI_CH0_MUX", "CH4", "DL10"},
+	{"HDMI_CH0_MUX", "CH5", "DL10"},
+	{"HDMI_CH0_MUX", "CH6", "DL10"},
+	{"HDMI_CH0_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH1_MUX", "CH0", "DL10"},
+	{"HDMI_CH1_MUX", "CH1", "DL10"},
+	{"HDMI_CH1_MUX", "CH2", "DL10"},
+	{"HDMI_CH1_MUX", "CH3", "DL10"},
+	{"HDMI_CH1_MUX", "CH4", "DL10"},
+	{"HDMI_CH1_MUX", "CH5", "DL10"},
+	{"HDMI_CH1_MUX", "CH6", "DL10"},
+	{"HDMI_CH1_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH2_MUX", "CH0", "DL10"},
+	{"HDMI_CH2_MUX", "CH1", "DL10"},
+	{"HDMI_CH2_MUX", "CH2", "DL10"},
+	{"HDMI_CH2_MUX", "CH3", "DL10"},
+	{"HDMI_CH2_MUX", "CH4", "DL10"},
+	{"HDMI_CH2_MUX", "CH5", "DL10"},
+	{"HDMI_CH2_MUX", "CH6", "DL10"},
+	{"HDMI_CH2_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH3_MUX", "CH0", "DL10"},
+	{"HDMI_CH3_MUX", "CH1", "DL10"},
+	{"HDMI_CH3_MUX", "CH2", "DL10"},
+	{"HDMI_CH3_MUX", "CH3", "DL10"},
+	{"HDMI_CH3_MUX", "CH4", "DL10"},
+	{"HDMI_CH3_MUX", "CH5", "DL10"},
+	{"HDMI_CH3_MUX", "CH6", "DL10"},
+	{"HDMI_CH3_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH4_MUX", "CH0", "DL10"},
+	{"HDMI_CH4_MUX", "CH1", "DL10"},
+	{"HDMI_CH4_MUX", "CH2", "DL10"},
+	{"HDMI_CH4_MUX", "CH3", "DL10"},
+	{"HDMI_CH4_MUX", "CH4", "DL10"},
+	{"HDMI_CH4_MUX", "CH5", "DL10"},
+	{"HDMI_CH4_MUX", "CH6", "DL10"},
+	{"HDMI_CH4_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH5_MUX", "CH0", "DL10"},
+	{"HDMI_CH5_MUX", "CH1", "DL10"},
+	{"HDMI_CH5_MUX", "CH2", "DL10"},
+	{"HDMI_CH5_MUX", "CH3", "DL10"},
+	{"HDMI_CH5_MUX", "CH4", "DL10"},
+	{"HDMI_CH5_MUX", "CH5", "DL10"},
+	{"HDMI_CH5_MUX", "CH6", "DL10"},
+	{"HDMI_CH5_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH6_MUX", "CH0", "DL10"},
+	{"HDMI_CH6_MUX", "CH1", "DL10"},
+	{"HDMI_CH6_MUX", "CH2", "DL10"},
+	{"HDMI_CH6_MUX", "CH3", "DL10"},
+	{"HDMI_CH6_MUX", "CH4", "DL10"},
+	{"HDMI_CH6_MUX", "CH5", "DL10"},
+	{"HDMI_CH6_MUX", "CH6", "DL10"},
+	{"HDMI_CH6_MUX", "CH7", "DL10"},
+
+	{"HDMI_CH7_MUX", "CH0", "DL10"},
+	{"HDMI_CH7_MUX", "CH1", "DL10"},
+	{"HDMI_CH7_MUX", "CH2", "DL10"},
+	{"HDMI_CH7_MUX", "CH3", "DL10"},
+	{"HDMI_CH7_MUX", "CH4", "DL10"},
+	{"HDMI_CH7_MUX", "CH5", "DL10"},
+	{"HDMI_CH7_MUX", "CH6", "DL10"},
+	{"HDMI_CH7_MUX", "CH7", "DL10"},
+
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH0_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH1_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH2_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH3_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH4_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH5_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH6_MUX"},
+	{"HDMI_OUT_MUX", "Connect", "HDMI_CH7_MUX"},
+
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH0_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH1_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH2_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH3_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH4_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH5_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH6_MUX"},
+	{"DPTX_OUT_MUX", "Connect", "HDMI_CH7_MUX"},
+
+	{"ETDM3_OUT", NULL, "HDMI_OUT_MUX"},
+	{"DPTX", NULL, "DPTX_OUT_MUX"},
+
+	{"ETDM_OUTPUT", NULL, "DPTX"},
+	{"ETDM_OUTPUT", NULL, "ETDM1_OUT"},
+	{"ETDM_OUTPUT", NULL, "ETDM2_OUT"},
+	{"ETDM_OUTPUT", NULL, "ETDM3_OUT"},
+	{"ETDM1_IN", NULL, "ETDM_INPUT"},
+	{"ETDM2_IN", NULL, "ETDM_INPUT"},
+};
+
+static int mt8188_afe_enable_etdm(struct mtk_base_afe *afe, int dai_id)
+{
+	int ret = 0;
+	struct etdm_con_reg etdm_reg;
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	unsigned long flags;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+
+	dev_dbg(afe->dev, "%s [%d]%d\n", __func__, dai_id, etdm_data->en_ref_cnt);
+	spin_lock_irqsave(&afe_priv->afe_ctrl_lock, flags);
+	etdm_data->en_ref_cnt++;
+	if (etdm_data->en_ref_cnt == 1) {
+		ret = get_etdm_reg(dai_id, &etdm_reg);
+		if (ret < 0)
+			goto out;
+
+		regmap_set_bits(afe->regmap, etdm_reg.con0, ETDM_CON0_EN);
+	}
+
+out:
+	spin_unlock_irqrestore(&afe_priv->afe_ctrl_lock, flags);
+	return ret;
+}
+
+static int mt8188_afe_disable_etdm(struct mtk_base_afe *afe, int dai_id)
+{
+	int ret = 0;
+	struct etdm_con_reg etdm_reg;
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	unsigned long flags;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+
+	dev_dbg(afe->dev, "%s [%d]%d\n", __func__, dai_id, etdm_data->en_ref_cnt);
+	spin_lock_irqsave(&afe_priv->afe_ctrl_lock, flags);
+	if (etdm_data->en_ref_cnt > 0) {
+		etdm_data->en_ref_cnt--;
+		if (etdm_data->en_ref_cnt == 0) {
+			ret = get_etdm_reg(dai_id, &etdm_reg);
+			if (ret < 0)
+				goto out;
+			regmap_clear_bits(afe->regmap, etdm_reg.con0,
+					  ETDM_CON0_EN);
+		}
+	}
+
+out:
+	spin_unlock_irqrestore(&afe_priv->afe_ctrl_lock, flags);
+	return ret;
+}
+
+static int etdm_cowork_slv_sel(int id, int slave_mode)
+{
+	if (slave_mode) {
+		switch (id) {
+		case MT8188_AFE_IO_ETDM1_IN:
+			return COWORK_ETDM_IN1_S;
+		case MT8188_AFE_IO_ETDM2_IN:
+			return COWORK_ETDM_IN2_S;
+		case MT8188_AFE_IO_ETDM1_OUT:
+			return COWORK_ETDM_OUT1_S;
+		case MT8188_AFE_IO_ETDM2_OUT:
+			return COWORK_ETDM_OUT2_S;
+		case MT8188_AFE_IO_ETDM3_OUT:
+			return COWORK_ETDM_OUT3_S;
+		default:
+			return -EINVAL;
+		}
+	} else {
+		switch (id) {
+		case MT8188_AFE_IO_ETDM1_IN:
+			return COWORK_ETDM_IN1_M;
+		case MT8188_AFE_IO_ETDM2_IN:
+			return COWORK_ETDM_IN2_M;
+		case MT8188_AFE_IO_ETDM1_OUT:
+			return COWORK_ETDM_OUT1_M;
+		case MT8188_AFE_IO_ETDM2_OUT:
+			return COWORK_ETDM_OUT2_M;
+		case MT8188_AFE_IO_ETDM3_OUT:
+			return COWORK_ETDM_OUT3_M;
+		default:
+			return -EINVAL;
+		}
+	}
+}
+
+static int etdm_cowork_sync_sel(int id)
+{
+	switch (id) {
+	case MT8188_AFE_IO_ETDM1_IN:
+		return ETDM_SYNC_FROM_IN1;
+	case MT8188_AFE_IO_ETDM2_IN:
+		return ETDM_SYNC_FROM_IN2;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		return ETDM_SYNC_FROM_OUT1;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		return ETDM_SYNC_FROM_OUT2;
+	case MT8188_AFE_IO_ETDM3_OUT:
+		return ETDM_SYNC_FROM_OUT3;
+	default:
+		return -EINVAL;
+	}
+}
+
+static int mt8188_etdm_sync_mode_slv(struct mtk_base_afe *afe, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	unsigned int reg = 0;
+	unsigned int mask;
+	unsigned int val;
+	int cowork_source_sel;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+
+	cowork_source_sel = etdm_cowork_slv_sel(etdm_data->cowork_source_id,
+						true);
+	if (cowork_source_sel < 0)
+		return cowork_source_sel;
+
+	switch (dai_id) {
+	case MT8188_AFE_IO_ETDM1_IN:
+		reg = ETDM_COWORK_CON1;
+		mask = ETDM_IN1_SLAVE_SEL_MASK;
+		val = FIELD_PREP(ETDM_IN1_SLAVE_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		reg = ETDM_COWORK_CON2;
+		mask = ETDM_IN2_SLAVE_SEL_MASK;
+		val = FIELD_PREP(ETDM_IN2_SLAVE_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		reg = ETDM_COWORK_CON0;
+		mask = ETDM_OUT1_SLAVE_SEL_MASK;
+		val = FIELD_PREP(ETDM_OUT1_SLAVE_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		reg = ETDM_COWORK_CON2;
+		mask = ETDM_OUT2_SLAVE_SEL_MASK;
+		val = FIELD_PREP(ETDM_OUT2_SLAVE_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM3_OUT:
+		reg = ETDM_COWORK_CON2;
+		mask = ETDM_OUT3_SLAVE_SEL_MASK;
+		val = FIELD_PREP(ETDM_OUT3_SLAVE_SEL_MASK, cowork_source_sel);
+		break;
+	default:
+		return 0;
+	}
+
+	regmap_update_bits(afe->regmap, reg, mask, val);
+
+	return 0;
+}
+
+static int mt8188_etdm_sync_mode_mst(struct mtk_base_afe *afe, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	struct etdm_con_reg etdm_reg;
+	unsigned int reg = 0;
+	unsigned int mask;
+	unsigned int val;
+	int cowork_source_sel;
+	int ret;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+
+	cowork_source_sel = etdm_cowork_sync_sel(etdm_data->cowork_source_id);
+	if (cowork_source_sel < 0)
+		return cowork_source_sel;
+
+	switch (dai_id) {
+	case MT8188_AFE_IO_ETDM1_IN:
+		reg = ETDM_COWORK_CON1;
+		mask = ETDM_IN1_SYNC_SEL_MASK;
+		val = FIELD_PREP(ETDM_IN1_SYNC_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		reg = ETDM_COWORK_CON2;
+		mask = ETDM_IN2_SYNC_SEL_MASK;
+		val = FIELD_PREP(ETDM_IN2_SYNC_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM1_OUT:
+		reg = ETDM_COWORK_CON0;
+		mask = ETDM_OUT1_SYNC_SEL_MASK;
+		val = FIELD_PREP(ETDM_OUT1_SYNC_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM2_OUT:
+		reg = ETDM_COWORK_CON2;
+		mask = ETDM_OUT2_SYNC_SEL_MASK;
+		val = FIELD_PREP(ETDM_OUT2_SYNC_SEL_MASK, cowork_source_sel);
+		break;
+	case MT8188_AFE_IO_ETDM3_OUT:
+		reg = ETDM_COWORK_CON2;
+		mask = ETDM_OUT3_SYNC_SEL_MASK;
+		val = FIELD_PREP(ETDM_OUT3_SYNC_SEL_MASK, cowork_source_sel);
+		break;
+	default:
+		return 0;
+	}
+
+	ret = get_etdm_reg(dai_id, &etdm_reg);
+	if (ret < 0)
+		return ret;
+
+	regmap_update_bits(afe->regmap, reg, mask, val);
+
+	regmap_set_bits(afe->regmap, etdm_reg.con0, ETDM_CON0_SYNC_MODE);
+
+	return 0;
+}
+
+static int mt8188_etdm_sync_mode_configure(struct mtk_base_afe *afe, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+
+	if (etdm_data->cowork_source_id == COWORK_ETDM_NONE)
+		return 0;
+
+	if (etdm_data->slave_mode)
+		mt8188_etdm_sync_mode_slv(afe, dai_id);
+	else
+		mt8188_etdm_sync_mode_mst(afe, dai_id);
+
+	return 0;
+}
+
+/* dai ops */
+static int mtk_dai_etdm_startup(struct snd_pcm_substream *substream,
+				struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *mst_etdm_data;
+	int cg_id;
+	int mst_dai_id;
+	int slv_dai_id;
+	int i;
+
+	if (is_cowork_mode(dai)) {
+		mst_dai_id = get_etdm_cowork_master_id(dai);
+		if (!is_valid_etdm_dai(mst_dai_id))
+			return -EINVAL;
+		mtk_dai_etdm_enable_mclk(afe, mst_dai_id);
+
+		cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(mst_dai_id);
+		if (cg_id >= 0)
+			mt8188_afe_enable_clk(afe, afe_priv->clk[cg_id]);
+
+		mst_etdm_data = afe_priv->dai_priv[mst_dai_id];
+
+		for (i = 0; i < mst_etdm_data->cowork_slv_count; i++) {
+			slv_dai_id = mst_etdm_data->cowork_slv_id[i];
+			cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(slv_dai_id);
+			if (cg_id >= 0)
+				mt8188_afe_enable_clk(afe,
+						      afe_priv->clk[cg_id]);
+		}
+	} else {
+		mtk_dai_etdm_enable_mclk(afe, dai->id);
+
+		cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(dai->id);
+		if (cg_id >= 0)
+			mt8188_afe_enable_clk(afe, afe_priv->clk[cg_id]);
+	}
+
+	return 0;
+}
+
+static void mtk_dai_etdm_shutdown(struct snd_pcm_substream *substream,
+				  struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *mst_etdm_data;
+	int cg_id;
+	int mst_dai_id;
+	int slv_dai_id;
+	int i;
+	int ret = 0;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return;
+	mst_etdm_data = afe_priv->dai_priv[dai->id];
+
+	dev_dbg(afe->dev, "%s(), dai id %d, prepared %d\n", __func__, dai->id,
+		mst_etdm_data->is_prepared);
+
+	if (mst_etdm_data->is_prepared) {
+		mst_etdm_data->is_prepared = false;
+
+		if (is_cowork_mode(dai)) {
+			mst_dai_id = get_etdm_cowork_master_id(dai);
+			if (!is_valid_etdm_dai(mst_dai_id))
+				return;
+			mst_etdm_data = afe_priv->dai_priv[mst_dai_id];
+
+			ret |= mt8188_afe_disable_etdm(afe, mst_dai_id);
+			for (i = 0; i < mst_etdm_data->cowork_slv_count; i++) {
+				slv_dai_id = mst_etdm_data->cowork_slv_id[i];
+				ret |= mt8188_afe_disable_etdm(afe, slv_dai_id);
+			}
+		} else {
+			ret = mt8188_afe_disable_etdm(afe, dai->id);
+		}
+
+		if (ret)
+			dev_dbg(afe->dev, "%s disable failed\n", __func__);
+	}
+
+	if (is_cowork_mode(dai)) {
+		mst_dai_id = get_etdm_cowork_master_id(dai);
+		if (!is_valid_etdm_dai(mst_dai_id))
+			return;
+		cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(mst_dai_id);
+		if (cg_id >= 0)
+			mt8188_afe_disable_clk(afe, afe_priv->clk[cg_id]);
+
+		mst_etdm_data = afe_priv->dai_priv[mst_dai_id];
+		for (i = 0; i < mst_etdm_data->cowork_slv_count; i++) {
+			slv_dai_id = mst_etdm_data->cowork_slv_id[i];
+			cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(slv_dai_id);
+			if (cg_id >= 0)
+				mt8188_afe_disable_clk(afe,
+						       afe_priv->clk[cg_id]);
+		}
+		mtk_dai_etdm_disable_mclk(afe, mst_dai_id);
+	} else {
+		cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(dai->id);
+		if (cg_id >= 0)
+			mt8188_afe_disable_clk(afe, afe_priv->clk[cg_id]);
+
+		mtk_dai_etdm_disable_mclk(afe, dai->id);
+	}
+}
+
+static int mtk_dai_etdm_fifo_mode(struct mtk_base_afe *afe,
+				  int dai_id, unsigned int rate)
+{
+	unsigned int mode = 0;
+	unsigned int reg = 0;
+	unsigned int val = 0;
+	unsigned int mask = (ETDM_IN_AFIFO_MODE_MASK | ETDM_IN_USE_AFIFO);
+
+	if (rate != 0)
+		mode = mt8188_afe_fs_timing(rate);
+
+	switch (dai_id) {
+	case MT8188_AFE_IO_ETDM1_IN:
+		reg = ETDM_IN1_AFIFO_CON;
+		if (rate == 0)
+			mode = MT8188_ETDM_IN1_1X_EN;
+		break;
+	case MT8188_AFE_IO_ETDM2_IN:
+		reg = ETDM_IN2_AFIFO_CON;
+		if (rate == 0)
+			mode = MT8188_ETDM_IN2_1X_EN;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	val = (mode | ETDM_IN_USE_AFIFO);
+
+	regmap_update_bits(afe->regmap, reg, mask, val);
+	return 0;
+}
+
+static int mtk_dai_etdm_in_configure(struct mtk_base_afe *afe,
+				     unsigned int rate,
+				     unsigned int channels,
+				     int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	struct etdm_con_reg etdm_reg;
+	bool slave_mode;
+	unsigned int data_mode;
+	unsigned int lrck_width;
+	unsigned int val = 0;
+	unsigned int mask = 0;
+	int i;
+	int ret;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+	slave_mode = etdm_data->slave_mode;
+	data_mode = etdm_data->data_mode;
+	lrck_width = etdm_data->lrck_width;
+
+	dev_dbg(afe->dev, "%s rate %u channels %u, id %d\n",
+		__func__, rate, channels, dai_id);
+
+	ret = get_etdm_reg(dai_id, &etdm_reg);
+	if (ret < 0)
+		return ret;
+
+	/* afifo */
+	if (slave_mode)
+		mtk_dai_etdm_fifo_mode(afe, dai_id, 0);
+	else
+		mtk_dai_etdm_fifo_mode(afe, dai_id, rate);
+
+	/* con1 */
+	if (lrck_width > 0) {
+		mask |= (ETDM_IN_CON1_LRCK_AUTO_MODE |
+			ETDM_IN_CON1_LRCK_WIDTH_MASK);
+		val |= FIELD_PREP(ETDM_IN_CON1_LRCK_WIDTH_MASK, lrck_width - 1);
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con1, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	/* con2 */
+	if (!slave_mode) {
+		mask |= ETDM_IN_CON2_UPDATE_GAP_MASK;
+		if (rate == 352800 || rate == 384000)
+			val |= FIELD_PREP(ETDM_IN_CON2_UPDATE_GAP_MASK, 4);
+		else
+			val |= FIELD_PREP(ETDM_IN_CON2_UPDATE_GAP_MASK, 3);
+	}
+	mask |= (ETDM_IN_CON2_MULTI_IP_2CH_MODE |
+		ETDM_IN_CON2_MULTI_IP_TOTAL_CH_MASK);
+	if (data_mode == MTK_DAI_ETDM_DATA_MULTI_PIN) {
+		val |= ETDM_IN_CON2_MULTI_IP_2CH_MODE |
+		       FIELD_PREP(ETDM_IN_CON2_MULTI_IP_TOTAL_CH_MASK, channels - 1);
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con2, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	/* con3 */
+	mask |= ETDM_IN_CON3_DISABLE_OUT_MASK;
+	for (i = 0; i < channels; i += 2) {
+		if (etdm_data->in_disable_ch[i] &&
+		    etdm_data->in_disable_ch[i + 1])
+			val |= ETDM_IN_CON3_DISABLE_OUT(i >> 1);
+	}
+	if (!slave_mode) {
+		mask |= ETDM_IN_CON3_FS_MASK;
+		val |= FIELD_PREP(ETDM_IN_CON3_FS_MASK, get_etdm_fs_timing(rate));
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con3, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	/* con4 */
+	mask |= (ETDM_IN_CON4_MASTER_LRCK_INV | ETDM_IN_CON4_MASTER_BCK_INV |
+		ETDM_IN_CON4_SLAVE_LRCK_INV | ETDM_IN_CON4_SLAVE_BCK_INV);
+	if (slave_mode) {
+		if (etdm_data->lrck_inv)
+			val |= ETDM_IN_CON4_SLAVE_LRCK_INV;
+		if (etdm_data->bck_inv)
+			val |= ETDM_IN_CON4_SLAVE_BCK_INV;
+	} else {
+		if (etdm_data->lrck_inv)
+			val |= ETDM_IN_CON4_MASTER_LRCK_INV;
+		if (etdm_data->bck_inv)
+			val |= ETDM_IN_CON4_MASTER_BCK_INV;
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con4, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	/* con5 */
+	mask |= ETDM_IN_CON5_LR_SWAP_MASK;
+	mask |= ETDM_IN_CON5_ENABLE_ODD_MASK;
+	for (i = 0; i < channels; i += 2) {
+		if (etdm_data->in_disable_ch[i] &&
+		    !etdm_data->in_disable_ch[i + 1]) {
+			val |= ETDM_IN_CON5_LR_SWAP(i >> 1);
+			val |= ETDM_IN_CON5_ENABLE_ODD(i >> 1);
+		} else if (!etdm_data->in_disable_ch[i] &&
+			   etdm_data->in_disable_ch[i + 1]) {
+			val |= ETDM_IN_CON5_ENABLE_ODD(i >> 1);
+		}
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con5, mask, val);
+	return 0;
+}
+
+static int mtk_dai_etdm_out_configure(struct mtk_base_afe *afe,
+				      unsigned int rate,
+				      unsigned int channels,
+				      int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	struct etdm_con_reg etdm_reg;
+	bool slave_mode;
+	unsigned int lrck_width;
+	unsigned int val = 0;
+	unsigned int mask = 0;
+	int ret;
+	int fs = 0;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+	slave_mode = etdm_data->slave_mode;
+	lrck_width = etdm_data->lrck_width;
+
+	dev_dbg(afe->dev, "%s rate %u channels %u, id %d\n",
+		__func__, rate, channels, dai_id);
+
+	ret = get_etdm_reg(dai_id, &etdm_reg);
+	if (ret < 0)
+		return ret;
+
+	/* con0 */
+	mask = ETDM_OUT_CON0_RELATCH_DOMAIN_MASK;
+	val = FIELD_PREP(ETDM_OUT_CON0_RELATCH_DOMAIN_MASK,
+			 ETDM_RELATCH_TIMING_A1A2SYS);
+	regmap_update_bits(afe->regmap, etdm_reg.con0, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	/* con1 */
+	if (lrck_width > 0) {
+		mask |= (ETDM_OUT_CON1_LRCK_AUTO_MODE |
+			ETDM_OUT_CON1_LRCK_WIDTH_MASK);
+		val |= FIELD_PREP(ETDM_OUT_CON1_LRCK_WIDTH_MASK, lrck_width - 1);
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con1, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	if (!slave_mode) {
+		/* con4 */
+		mask |= ETDM_OUT_CON4_FS_MASK;
+		val |= FIELD_PREP(ETDM_OUT_CON4_FS_MASK, get_etdm_fs_timing(rate));
+	}
+
+	mask |= ETDM_OUT_CON4_RELATCH_EN_MASK;
+	if (dai_id == MT8188_AFE_IO_ETDM1_OUT)
+		fs = MT8188_ETDM_OUT1_1X_EN;
+	else if (dai_id == MT8188_AFE_IO_ETDM2_OUT)
+		fs = MT8188_ETDM_OUT2_1X_EN;
+
+	val |= FIELD_PREP(ETDM_OUT_CON4_RELATCH_EN_MASK, fs);
+
+	regmap_update_bits(afe->regmap, etdm_reg.con4, mask, val);
+
+	mask = 0;
+	val = 0;
+
+	/* con5 */
+	mask |= (ETDM_OUT_CON5_MASTER_LRCK_INV | ETDM_OUT_CON5_MASTER_BCK_INV |
+		ETDM_OUT_CON5_SLAVE_LRCK_INV | ETDM_OUT_CON5_SLAVE_BCK_INV);
+	if (slave_mode) {
+		if (etdm_data->lrck_inv)
+			val |= ETDM_OUT_CON5_SLAVE_LRCK_INV;
+		if (etdm_data->bck_inv)
+			val |= ETDM_OUT_CON5_SLAVE_BCK_INV;
+	} else {
+		if (etdm_data->lrck_inv)
+			val |= ETDM_OUT_CON5_MASTER_LRCK_INV;
+		if (etdm_data->bck_inv)
+			val |= ETDM_OUT_CON5_MASTER_BCK_INV;
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con5, mask, val);
+
+	return 0;
+}
+
+static int mtk_dai_etdm_mclk_configure(struct mtk_base_afe *afe, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	int clk_id = mtk_dai_etdm_get_clk_id_by_dai_id(dai_id);
+	int clkdiv_id = mtk_dai_etdm_get_clkdiv_id_by_dai_id(dai_id);
+	int apll;
+	int apll_clk_id;
+	struct etdm_con_reg etdm_reg;
+	int ret = 0;
+
+	if (clk_id < 0 || clkdiv_id < 0)
+		return 0;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+
+	ret = get_etdm_reg(dai_id, &etdm_reg);
+	if (ret < 0)
+		return ret;
+
+	if (etdm_data->mclk_dir == SND_SOC_CLOCK_OUT)
+		regmap_set_bits(afe->regmap, etdm_reg.con1,
+				ETDM_CON1_MCLK_OUTPUT);
+	else
+		regmap_clear_bits(afe->regmap, etdm_reg.con1,
+				  ETDM_CON1_MCLK_OUTPUT);
+
+	if (etdm_data->mclk_freq) {
+		apll = etdm_data->mclk_apll;
+		apll_clk_id = mt8188_afe_get_mclk_source_clk_id(apll);
+		if (apll_clk_id < 0)
+			return apll_clk_id;
+
+		/* select apll */
+		ret = mt8188_afe_set_clk_parent(afe, afe_priv->clk[clk_id],
+						afe_priv->clk[apll_clk_id]);
+		if (ret)
+			return ret;
+
+		/* set rate */
+		ret = mt8188_afe_set_clk_rate(afe, afe_priv->clk[clkdiv_id],
+					      etdm_data->mclk_freq);
+	} else {
+		if (etdm_data->mclk_dir == SND_SOC_CLOCK_OUT)
+			dev_dbg(afe->dev, "%s mclk freq = 0\n", __func__);
+	}
+
+	return ret;
+}
+
+static int mtk_dai_etdm_configure(struct mtk_base_afe *afe,
+				  unsigned int rate,
+				  unsigned int channels,
+				  unsigned int bit_width,
+				  int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	struct etdm_con_reg etdm_reg;
+	bool slave_mode;
+	unsigned int etdm_channels;
+	unsigned int val = 0;
+	unsigned int mask = 0;
+	unsigned int bck;
+	unsigned int wlen = get_etdm_wlen(bit_width);
+	int ret;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+	slave_mode = etdm_data->slave_mode;
+
+	ret = get_etdm_reg(dai_id, &etdm_reg);
+	if (ret < 0)
+		return ret;
+
+	dev_dbg(afe->dev, "%s fmt %u data %u lrck %d-%u bck %d, clock %u slv %u\n",
+		__func__, etdm_data->format, etdm_data->data_mode,
+		etdm_data->lrck_inv, etdm_data->lrck_width, etdm_data->bck_inv,
+		etdm_data->clock_mode, etdm_data->slave_mode);
+	dev_dbg(afe->dev, "%s rate %u channels %u bitwidth %u, id %d\n",
+		__func__, rate, channels, bit_width, dai_id);
+
+	etdm_channels = (etdm_data->data_mode == MTK_DAI_ETDM_DATA_ONE_PIN) ?
+			get_etdm_ch_fixup(channels) : 2;
+
+	bck = rate * etdm_channels * wlen;
+	if (bck > MT8188_ETDM_NORMAL_MAX_BCK_RATE) {
+		dev_err(afe->dev, "%s bck rate %u not support\n",
+			__func__, bck);
+		return -EINVAL;
+	}
+
+	/* con0 */
+	mask |= ETDM_CON0_BIT_LEN_MASK;
+	val |= FIELD_PREP(ETDM_CON0_BIT_LEN_MASK, bit_width - 1);
+	mask |= ETDM_CON0_WORD_LEN_MASK;
+	val |= FIELD_PREP(ETDM_CON0_WORD_LEN_MASK, wlen - 1);
+	mask |= ETDM_CON0_FORMAT_MASK;
+	val |= FIELD_PREP(ETDM_CON0_FORMAT_MASK, etdm_data->format);
+	mask |= ETDM_CON0_CH_NUM_MASK;
+	val |= FIELD_PREP(ETDM_CON0_CH_NUM_MASK, etdm_channels - 1);
+
+	mask |= ETDM_CON0_SLAVE_MODE;
+	if (slave_mode) {
+		if (dai_id == MT8188_AFE_IO_ETDM1_OUT) {
+			dev_err(afe->dev, "%s id %d only support master mode\n",
+				__func__, dai_id);
+			return -EINVAL;
+		}
+		val |= ETDM_CON0_SLAVE_MODE;
+	}
+	regmap_update_bits(afe->regmap, etdm_reg.con0, mask, val);
+
+	if (get_etdm_dir(dai_id) == ETDM_IN)
+		mtk_dai_etdm_in_configure(afe, rate, channels, dai_id);
+	else
+		mtk_dai_etdm_out_configure(afe, rate, channels, dai_id);
+
+	return 0;
+}
+
+static int mtk_dai_etdm_hw_params(struct snd_pcm_substream *substream,
+				  struct snd_pcm_hw_params *params,
+				  struct snd_soc_dai *dai)
+{
+	int ret = 0;
+	unsigned int rate = params_rate(params);
+	unsigned int bit_width = params_width(params);
+	unsigned int channels = params_channels(params);
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *mst_etdm_data;
+	int mst_dai_id;
+	int slv_dai_id;
+	int i;
+
+	dev_dbg(afe->dev, "%s '%s' period %u-%u\n",
+		__func__, snd_pcm_stream_str(substream),
+		params_period_size(params), params_periods(params));
+
+	if (is_cowork_mode(dai)) {
+		mst_dai_id = get_etdm_cowork_master_id(dai);
+		if (!is_valid_etdm_dai(mst_dai_id))
+			return -EINVAL;
+
+		ret = mtk_dai_etdm_mclk_configure(afe, mst_dai_id);
+		if (ret)
+			return ret;
+
+		ret = mtk_dai_etdm_configure(afe, rate, channels,
+					     bit_width, mst_dai_id);
+		if (ret)
+			return ret;
+
+		mst_etdm_data = afe_priv->dai_priv[mst_dai_id];
+		for (i = 0; i < mst_etdm_data->cowork_slv_count; i++) {
+			slv_dai_id = mst_etdm_data->cowork_slv_id[i];
+			ret = mtk_dai_etdm_configure(afe, rate, channels,
+						     bit_width, slv_dai_id);
+			if (ret)
+				return ret;
+
+			ret = mt8188_etdm_sync_mode_configure(afe, slv_dai_id);
+			if (ret)
+				return ret;
+		}
+	} else {
+		ret = mtk_dai_etdm_mclk_configure(afe, dai->id);
+		if (ret)
+			return ret;
+
+		ret = mtk_dai_etdm_configure(afe, rate, channels,
+					     bit_width, dai->id);
+	}
+
+	return ret;
+}
+
+static int mtk_dai_etdm_prepare(struct snd_pcm_substream *substream,
+				struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *mst_etdm_data;
+	int mst_dai_id;
+	int slv_dai_id;
+	int i;
+	int ret = 0;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	mst_etdm_data = afe_priv->dai_priv[dai->id];
+
+	dev_dbg(afe->dev, "%s(), dai id %d, prepared %d\n", __func__, dai->id,
+		mst_etdm_data->is_prepared);
+
+	if (mst_etdm_data->is_prepared)
+		return 0;
+
+	mst_etdm_data->is_prepared = true;
+
+	if (is_cowork_mode(dai)) {
+		mst_dai_id = get_etdm_cowork_master_id(dai);
+		if (!is_valid_etdm_dai(mst_dai_id))
+			return -EINVAL;
+		mst_etdm_data = afe_priv->dai_priv[mst_dai_id];
+
+		for (i = 0; i < mst_etdm_data->cowork_slv_count; i++) {
+			slv_dai_id = mst_etdm_data->cowork_slv_id[i];
+			ret |= mt8188_afe_enable_etdm(afe, slv_dai_id);
+		}
+
+		ret |= mt8188_afe_enable_etdm(afe, mst_dai_id);
+	} else {
+		ret = mt8188_afe_enable_etdm(afe, dai->id);
+	}
+
+	return ret;
+}
+
+static int mtk_dai_etdm_cal_mclk(struct mtk_base_afe *afe, int freq, int dai_id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	int apll;
+	int apll_rate;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+
+	if (freq == 0) {
+		etdm_data->mclk_freq = freq;
+		return 0;
+	}
+
+	if (etdm_data->mclk_fixed_apll == 0)
+		apll = mt8188_afe_get_default_mclk_source_by_rate(freq);
+	else
+		apll = etdm_data->mclk_apll;
+
+	apll_rate = mt8188_afe_get_mclk_source_rate(afe, apll);
+
+	if (freq > apll_rate) {
+		dev_err(afe->dev, "freq %d > apll rate %d\n", freq, apll_rate);
+		return -EINVAL;
+	}
+
+	if (apll_rate % freq != 0) {
+		dev_err(afe->dev, "APLL%d cannot generate freq Hz\n", apll);
+		return -EINVAL;
+	}
+
+	if (etdm_data->mclk_fixed_apll == 0)
+		etdm_data->mclk_apll = apll;
+	etdm_data->mclk_freq = freq;
+
+	return 0;
+}
+
+static int mtk_dai_etdm_set_sysclk(struct snd_soc_dai *dai,
+				   int clk_id, unsigned int freq, int dir)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	int dai_id;
+
+	dev_dbg(dai->dev, "%s id %d freq %u, dir %d\n",
+		__func__, dai->id, freq, dir);
+	if (is_cowork_mode(dai))
+		dai_id = get_etdm_cowork_master_id(dai);
+	else
+		dai_id = dai->id;
+
+	if (!is_valid_etdm_dai(dai_id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai_id];
+	etdm_data->mclk_dir = dir;
+	return mtk_dai_etdm_cal_mclk(afe, freq, dai_id);
+}
+
+static int mtk_dai_etdm_set_tdm_slot(struct snd_soc_dai *dai,
+				     unsigned int tx_mask, unsigned int rx_mask,
+				     int slots, int slot_width)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	dev_dbg(dai->dev, "%s id %d slot_width %d\n",
+		__func__, dai->id, slot_width);
+
+	etdm_data->slots = slots;
+	etdm_data->lrck_width = slot_width;
+	return 0;
+}
+
+static int mtk_dai_etdm_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+	case SND_SOC_DAIFMT_I2S:
+		etdm_data->format = MTK_DAI_ETDM_FORMAT_I2S;
+		break;
+	case SND_SOC_DAIFMT_LEFT_J:
+		etdm_data->format = MTK_DAI_ETDM_FORMAT_LJ;
+		break;
+	case SND_SOC_DAIFMT_RIGHT_J:
+		etdm_data->format = MTK_DAI_ETDM_FORMAT_RJ;
+		break;
+	case SND_SOC_DAIFMT_DSP_A:
+		etdm_data->format = MTK_DAI_ETDM_FORMAT_DSPA;
+		break;
+	case SND_SOC_DAIFMT_DSP_B:
+		etdm_data->format = MTK_DAI_ETDM_FORMAT_DSPB;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+	case SND_SOC_DAIFMT_NB_NF:
+		etdm_data->bck_inv = false;
+		etdm_data->lrck_inv = false;
+		break;
+	case SND_SOC_DAIFMT_NB_IF:
+		etdm_data->bck_inv = false;
+		etdm_data->lrck_inv = true;
+		break;
+	case SND_SOC_DAIFMT_IB_NF:
+		etdm_data->bck_inv = true;
+		etdm_data->lrck_inv = false;
+		break;
+	case SND_SOC_DAIFMT_IB_IF:
+		etdm_data->bck_inv = true;
+		etdm_data->lrck_inv = true;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
+	case SND_SOC_DAIFMT_BC_FC:
+		etdm_data->slave_mode = true;
+		break;
+	case SND_SOC_DAIFMT_BP_FP:
+		etdm_data->slave_mode = false;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int mtk_dai_hdmitx_dptx_startup(struct snd_pcm_substream *substream,
+				       struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	int cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(dai->id);
+
+	if (cg_id >= 0)
+		mt8188_afe_enable_clk(afe, afe_priv->clk[cg_id]);
+
+	mtk_dai_etdm_enable_mclk(afe, dai->id);
+
+	return 0;
+}
+
+static void mtk_dai_hdmitx_dptx_shutdown(struct snd_pcm_substream *substream,
+					 struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	int cg_id = mtk_dai_etdm_get_cg_id_by_dai_id(dai->id);
+	struct mtk_dai_etdm_priv *etdm_data;
+	int ret = 0;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	if (etdm_data->is_prepared) {
+		etdm_data->is_prepared = false;
+		/* disable etdm_out3 */
+		ret = mt8188_afe_disable_etdm(afe, dai->id);
+
+		if (ret)
+			dev_dbg(afe->dev, "%s disable failed\n", __func__);
+
+		/* disable dptx interface */
+		if (dai->id == MT8188_AFE_IO_DPTX)
+			regmap_clear_bits(afe->regmap, AFE_DPTX_CON,
+					  AFE_DPTX_CON_ON);
+	}
+
+	mtk_dai_etdm_disable_mclk(afe, dai->id);
+
+	if (cg_id >= 0)
+		mt8188_afe_disable_clk(afe, afe_priv->clk[cg_id]);
+}
+
+static unsigned int mtk_dai_get_dptx_ch_en(unsigned int channel)
+{
+	switch (channel) {
+	case 1 ... 2:
+		return AFE_DPTX_CON_CH_EN_2CH;
+	case 3 ... 4:
+		return AFE_DPTX_CON_CH_EN_4CH;
+	case 5 ... 6:
+		return AFE_DPTX_CON_CH_EN_6CH;
+	case 7 ... 8:
+		return AFE_DPTX_CON_CH_EN_8CH;
+	default:
+		return AFE_DPTX_CON_CH_EN_2CH;
+	}
+}
+
+static unsigned int mtk_dai_get_dptx_ch(unsigned int ch)
+{
+	return (ch > 2) ?
+		AFE_DPTX_CON_CH_NUM_8CH : AFE_DPTX_CON_CH_NUM_2CH;
+}
+
+static unsigned int mtk_dai_get_dptx_wlen(snd_pcm_format_t format)
+{
+	return snd_pcm_format_physical_width(format) <= 16 ?
+		AFE_DPTX_CON_16BIT : AFE_DPTX_CON_24BIT;
+}
+
+static int mtk_dai_hdmitx_dptx_hw_params(struct snd_pcm_substream *substream,
+					 struct snd_pcm_hw_params *params,
+					 struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	unsigned int rate = params_rate(params);
+	unsigned int channels = params_channels(params);
+	snd_pcm_format_t format = params_format(params);
+	int width = snd_pcm_format_physical_width(format);
+	int ret;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	/* dptx configure */
+	if (dai->id == MT8188_AFE_IO_DPTX) {
+		regmap_update_bits(afe->regmap, AFE_DPTX_CON,
+				   AFE_DPTX_CON_CH_EN_MASK,
+				   mtk_dai_get_dptx_ch_en(channels));
+		regmap_update_bits(afe->regmap, AFE_DPTX_CON,
+				   AFE_DPTX_CON_CH_NUM_MASK,
+				   mtk_dai_get_dptx_ch(channels));
+		regmap_update_bits(afe->regmap, AFE_DPTX_CON,
+				   AFE_DPTX_CON_16BIT_MASK,
+				   mtk_dai_get_dptx_wlen(format));
+
+		if (mtk_dai_get_dptx_ch(channels) == AFE_DPTX_CON_CH_NUM_8CH) {
+			etdm_data->data_mode = MTK_DAI_ETDM_DATA_ONE_PIN;
+			channels = 8;
+		} else {
+			channels = 2;
+		}
+	} else {
+		etdm_data->data_mode = MTK_DAI_ETDM_DATA_MULTI_PIN;
+	}
+
+	ret = mtk_dai_etdm_mclk_configure(afe, dai->id);
+	if (ret)
+		return ret;
+
+	ret = mtk_dai_etdm_configure(afe, rate, channels, width, dai->id);
+
+	return ret;
+}
+
+static int mtk_dai_hdmitx_dptx_prepare(struct snd_pcm_substream *substream,
+				       struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	int ret;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	dev_dbg(afe->dev, "%s(), dai id %d, prepared %d\n", __func__, dai->id,
+		etdm_data->is_prepared);
+
+	if (etdm_data->is_prepared)
+		return 0;
+
+	etdm_data->is_prepared = true;
+
+	/* enable dptx interface */
+	if (dai->id == MT8188_AFE_IO_DPTX)
+		regmap_set_bits(afe->regmap, AFE_DPTX_CON, AFE_DPTX_CON_ON);
+
+	/* enable etdm_out3 */
+	ret = mt8188_afe_enable_etdm(afe, dai->id);
+
+	return ret;
+}
+
+static int mtk_dai_hdmitx_dptx_set_sysclk(struct snd_soc_dai *dai,
+					  int clk_id,
+					  unsigned int freq,
+					  int dir)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+
+	if (!is_valid_etdm_dai(dai->id))
+		return -EINVAL;
+	etdm_data = afe_priv->dai_priv[dai->id];
+
+	dev_dbg(dai->dev, "%s id %d freq %u, dir %d\n",
+		__func__, dai->id, freq, dir);
+
+	etdm_data->mclk_dir = dir;
+	return mtk_dai_etdm_cal_mclk(afe, freq, dai->id);
+}
+
+static const struct snd_soc_dai_ops mtk_dai_etdm_ops = {
+	.startup = mtk_dai_etdm_startup,
+	.shutdown = mtk_dai_etdm_shutdown,
+	.hw_params = mtk_dai_etdm_hw_params,
+	.prepare = mtk_dai_etdm_prepare,
+	.set_sysclk = mtk_dai_etdm_set_sysclk,
+	.set_fmt = mtk_dai_etdm_set_fmt,
+	.set_tdm_slot = mtk_dai_etdm_set_tdm_slot,
+};
+
+static const struct snd_soc_dai_ops mtk_dai_hdmitx_dptx_ops = {
+	.startup	= mtk_dai_hdmitx_dptx_startup,
+	.shutdown	= mtk_dai_hdmitx_dptx_shutdown,
+	.hw_params	= mtk_dai_hdmitx_dptx_hw_params,
+	.prepare	= mtk_dai_hdmitx_dptx_prepare,
+	.set_sysclk	= mtk_dai_hdmitx_dptx_set_sysclk,
+	.set_fmt	= mtk_dai_etdm_set_fmt,
+};
+
+/* dai driver */
+#define MTK_ETDM_RATES (SNDRV_PCM_RATE_8000_192000)
+
+#define MTK_ETDM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
+			  SNDRV_PCM_FMTBIT_S24_LE |\
+			  SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_driver mtk_dai_etdm_driver[] = {
+	{
+		.name = "DPTX",
+		.id = MT8188_AFE_IO_DPTX,
+		.playback = {
+			.stream_name = "DPTX",
+			.channels_min = 1,
+			.channels_max = 8,
+			.rates = MTK_ETDM_RATES,
+			.formats = MTK_ETDM_FORMATS,
+		},
+		.ops = &mtk_dai_hdmitx_dptx_ops,
+	},
+	{
+		.name = "ETDM1_IN",
+		.id = MT8188_AFE_IO_ETDM1_IN,
+		.capture = {
+			.stream_name = "ETDM1_IN",
+			.channels_min = 1,
+			.channels_max = 16,
+			.rates = MTK_ETDM_RATES,
+			.formats = MTK_ETDM_FORMATS,
+		},
+		.ops = &mtk_dai_etdm_ops,
+	},
+	{
+		.name = "ETDM2_IN",
+		.id = MT8188_AFE_IO_ETDM2_IN,
+		.capture = {
+			.stream_name = "ETDM2_IN",
+			.channels_min = 1,
+			.channels_max = 16,
+			.rates = MTK_ETDM_RATES,
+			.formats = MTK_ETDM_FORMATS,
+		},
+		.ops = &mtk_dai_etdm_ops,
+	},
+	{
+		.name = "ETDM1_OUT",
+		.id = MT8188_AFE_IO_ETDM1_OUT,
+		.playback = {
+			.stream_name = "ETDM1_OUT",
+			.channels_min = 1,
+			.channels_max = 16,
+			.rates = MTK_ETDM_RATES,
+			.formats = MTK_ETDM_FORMATS,
+		},
+		.ops = &mtk_dai_etdm_ops,
+	},
+	{
+		.name = "ETDM2_OUT",
+		.id = MT8188_AFE_IO_ETDM2_OUT,
+		.playback = {
+			.stream_name = "ETDM2_OUT",
+			.channels_min = 1,
+			.channels_max = 16,
+			.rates = MTK_ETDM_RATES,
+			.formats = MTK_ETDM_FORMATS,
+		},
+		.ops = &mtk_dai_etdm_ops,
+	},
+	{
+		.name = "ETDM3_OUT",
+		.id = MT8188_AFE_IO_ETDM3_OUT,
+		.playback = {
+			.stream_name = "ETDM3_OUT",
+			.channels_min = 1,
+			.channels_max = 8,
+			.rates = MTK_ETDM_RATES,
+			.formats = MTK_ETDM_FORMATS,
+		},
+		.ops = &mtk_dai_hdmitx_dptx_ops,
+	},
+};
+
+static void mt8188_etdm_update_sync_info(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	struct mtk_dai_etdm_priv *mst_data;
+	int i;
+	int mst_dai_id;
+
+	for (i = MT8188_AFE_IO_ETDM_START; i < MT8188_AFE_IO_ETDM_END; i++) {
+		etdm_data = afe_priv->dai_priv[i];
+		if (etdm_data->cowork_source_id != COWORK_ETDM_NONE) {
+			mst_dai_id = etdm_data->cowork_source_id;
+			mst_data = afe_priv->dai_priv[mst_dai_id];
+			if (mst_data->cowork_source_id != COWORK_ETDM_NONE)
+				dev_err(afe->dev, "%s [%d] wrong sync source\n",
+					__func__, i);
+			mst_data->cowork_slv_id[mst_data->cowork_slv_count] = i;
+			mst_data->cowork_slv_count++;
+		}
+	}
+}
+
+static void mt8188_dai_etdm_parse_of(struct mtk_base_afe *afe)
+{
+	const struct device_node *of_node = afe->dev->of_node;
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_data;
+	int i, j;
+	char prop[48];
+	u8 disable_chn[MT8188_ETDM_MAX_CHANNELS];
+	int max_chn = MT8188_ETDM_MAX_CHANNELS;
+	u32 sel;
+	int ret;
+	int dai_id;
+	unsigned int sync_id;
+	struct {
+		const char *name;
+		const unsigned int sync_id;
+	} of_afe_etdms[MT8188_AFE_IO_ETDM_NUM] = {
+		{"etdm-in1", ETDM_SYNC_FROM_IN1},
+		{"etdm-in2", ETDM_SYNC_FROM_IN2},
+		{"etdm-out1", ETDM_SYNC_FROM_OUT1},
+		{"etdm-out2", ETDM_SYNC_FROM_OUT2},
+		{"etdm-out3", ETDM_SYNC_FROM_OUT3},
+	};
+
+	for (i = 0; i < MT8188_AFE_IO_ETDM_NUM; i++) {
+		dai_id = ETDM_TO_DAI_ID(i);
+		etdm_data = afe_priv->dai_priv[dai_id];
+
+		ret = snprintf(prop, sizeof(prop),
+			       "mediatek,%s-multi-pin-mode",
+			       of_afe_etdms[i].name);
+		if (ret < 0) {
+			dev_err(afe->dev, "%s snprintf err=%d\n",
+				__func__, ret);
+			return;
+		}
+		etdm_data->data_mode = of_property_read_bool(of_node, prop);
+
+		ret = snprintf(prop, sizeof(prop),
+			       "mediatek,%s-cowork-source",
+			       of_afe_etdms[i].name);
+		if (ret < 0) {
+			dev_err(afe->dev, "%s snprintf err=%d\n",
+				__func__, ret);
+			return;
+		}
+		ret = of_property_read_u32(of_node, prop, &sel);
+		if (ret == 0) {
+			if (sel >= MT8188_AFE_IO_ETDM_NUM) {
+				dev_err(afe->dev, "%s invalid id=%d\n",
+					__func__, sel);
+				etdm_data->cowork_source_id = COWORK_ETDM_NONE;
+			} else {
+				sync_id = of_afe_etdms[sel].sync_id;
+				etdm_data->cowork_source_id =
+					sync_to_dai_id(sync_id);
+			}
+		} else {
+			etdm_data->cowork_source_id = COWORK_ETDM_NONE;
+		}
+	}
+
+	/* etdm in only */
+	for (i = 0; i < 2; i++) {
+		ret = snprintf(prop, sizeof(prop),
+			       "mediatek,%s-chn-disabled",
+			       of_afe_etdms[i].name);
+		if (ret < 0) {
+			dev_err(afe->dev, "%s snprintf err=%d\n",
+				__func__, ret);
+			return;
+		}
+		ret = of_property_read_variable_u8_array(of_node, prop,
+							 disable_chn,
+							 1, max_chn);
+		if (ret < 0)
+			continue;
+
+		for (j = 0; j < ret; j++) {
+			if (disable_chn[j] >= MT8188_ETDM_MAX_CHANNELS)
+				dev_err(afe->dev, "%s [%d] invalid chn %u\n",
+					__func__, j, disable_chn[j]);
+			else
+				etdm_data->in_disable_ch[disable_chn[j]] = true;
+		}
+	}
+	mt8188_etdm_update_sync_info(afe);
+}
+
+static int init_etdm_priv_data(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_etdm_priv *etdm_priv;
+	int i;
+
+	for (i = MT8188_AFE_IO_ETDM_START; i < MT8188_AFE_IO_ETDM_END; i++) {
+		etdm_priv = devm_kzalloc(afe->dev,
+					 sizeof(struct mtk_dai_etdm_priv),
+					 GFP_KERNEL);
+		if (!etdm_priv)
+			return -ENOMEM;
+
+		afe_priv->dai_priv[i] = etdm_priv;
+	}
+
+	afe_priv->dai_priv[MT8188_AFE_IO_DPTX] =
+		afe_priv->dai_priv[MT8188_AFE_IO_ETDM3_OUT];
+
+	mt8188_dai_etdm_parse_of(afe);
+	return 0;
+}
+
+int mt8188_dai_etdm_register(struct mtk_base_afe *afe)
+{
+	struct mtk_base_afe_dai *dai;
+
+	dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
+	if (!dai)
+		return -ENOMEM;
+
+	list_add(&dai->list, &afe->sub_dais);
+
+	dai->dai_drivers = mtk_dai_etdm_driver;
+	dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_etdm_driver);
+
+	dai->dapm_widgets = mtk_dai_etdm_widgets;
+	dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_etdm_widgets);
+	dai->dapm_routes = mtk_dai_etdm_routes;
+	dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_etdm_routes);
+	dai->controls = mtk_dai_etdm_controls;
+	dai->num_controls = ARRAY_SIZE(mtk_dai_etdm_controls);
+
+	return init_etdm_priv_data(afe);
+}
-- 
2.18.0



From trevor.wu at mediatek.com  Thu Dec 29 21:54:39 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:39 +0800
Subject: [PATCH v4 09/13] ASoC: mediatek: mt8188: add control for timing select
In-Reply-To: <20221230055443.16024-1-trevor.wu@mediatek.com>
References: <20221230055443.16024-1-trevor.wu@mediatek.com>
Message-ID: <20221230055443.16024-10-trevor.wu@mediatek.com>

Add mixer control for irq and memif timing selection.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c | 506 +++++++++++++++++++++
 1 file changed, 506 insertions(+)

diff --git a/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c b/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
index 6bef980846fa..57a31330e5f4 100644
--- a/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
+++ b/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
@@ -1394,6 +1394,510 @@ static const struct snd_soc_dapm_route mt8188_memif_routes[] = {
 	{"O041", "I169 Switch", "I169"},
 };
 
+static const char * const mt8188_afe_1x_en_sel_text[] = {
+	"a1sys_a2sys", "a3sys", "a4sys",
+};
+
+static const unsigned int mt8188_afe_1x_en_sel_values[] = {
+	0, 1, 2,
+};
+
+static SOC_VALUE_ENUM_SINGLE_DECL(dl2_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 18, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl3_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 20, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl6_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 22, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl7_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 24, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl8_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 26, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl10_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 28, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl11_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 30, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul1_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 0, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul2_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 2, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul3_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 4, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul4_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 6, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul5_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 8, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul6_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 10, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul8_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 12, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul9_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 14, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul10_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL1, 16, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq1_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 0, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq2_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 2, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq3_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 4, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq4_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 6, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq5_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 8, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq6_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 10, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq7_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 12, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq8_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 14, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq9_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 16, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq10_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 18, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq11_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 20, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq12_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 22, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq13_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 24, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq14_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 26, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq15_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 28, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq16_1x_en_sel_enum,
+				  A3_A4_TIMING_SEL6, 30, 0x3,
+				  mt8188_afe_1x_en_sel_text,
+				  mt8188_afe_1x_en_sel_values);
+
+static const char * const mt8188_afe_fs_timing_sel_text[] = {
+	"asys",
+	"etdmout1_1x_en",
+	"etdmout2_1x_en",
+	"etdmout3_1x_en",
+	"etdmin1_1x_en",
+	"etdmin2_1x_en",
+	"etdmin1_nx_en",
+	"etdmin2_nx_en",
+};
+
+static const unsigned int mt8188_afe_fs_timing_sel_values[] = {
+	0,
+	MT8188_ETDM_OUT1_1X_EN,
+	MT8188_ETDM_OUT2_1X_EN,
+	MT8188_ETDM_OUT3_1X_EN,
+	MT8188_ETDM_IN1_1X_EN,
+	MT8188_ETDM_IN2_1X_EN,
+	MT8188_ETDM_IN1_NX_EN,
+	MT8188_ETDM_IN2_NX_EN,
+};
+
+static SOC_VALUE_ENUM_SINGLE_DECL(dl2_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl3_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl6_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl8_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(dl11_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul2_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul4_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul5_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul9_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+static SOC_VALUE_ENUM_SINGLE_DECL(ul10_fs_timing_sel_enum,
+				  SND_SOC_NOPM, 0, 0,
+				  mt8188_afe_fs_timing_sel_text,
+				  mt8188_afe_fs_timing_sel_values);
+
+static int mt8188_memif_1x_en_sel_put(struct snd_kcontrol *kcontrol,
+				      struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component =
+		snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_memif_priv *memif_priv;
+	unsigned int dai_id = kcontrol->id.device;
+	long val = ucontrol->value.integer.value[0];
+	int ret = 0;
+
+	memif_priv = afe_priv->dai_priv[dai_id];
+
+	if (val == memif_priv->asys_timing_sel)
+		return 0;
+
+	ret = snd_soc_put_enum_double(kcontrol, ucontrol);
+
+	memif_priv->asys_timing_sel = val;
+
+	return ret;
+}
+
+static int mt8188_asys_irq_1x_en_sel_put(struct snd_kcontrol *kcontrol,
+					 struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component =
+		snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	unsigned int id = kcontrol->id.device;
+	long val = ucontrol->value.integer.value[0];
+	int ret = 0;
+
+	if (val == afe_priv->irq_priv[id].asys_timing_sel)
+		return 0;
+
+	ret = snd_soc_put_enum_double(kcontrol, ucontrol);
+
+	afe_priv->irq_priv[id].asys_timing_sel = val;
+
+	return ret;
+}
+
+static int mt8188_memif_fs_timing_sel_get(struct snd_kcontrol *kcontrol,
+					  struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_memif_priv *memif_priv;
+	unsigned int dai_id = kcontrol->id.device;
+	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
+
+	memif_priv = afe_priv->dai_priv[dai_id];
+
+	ucontrol->value.enumerated.item[0] =
+		snd_soc_enum_val_to_item(e, memif_priv->fs_timing);
+
+	return 0;
+}
+
+static int mt8188_memif_fs_timing_sel_put(struct snd_kcontrol *kcontrol,
+					  struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_memif_priv *memif_priv;
+	unsigned int dai_id = kcontrol->id.device;
+	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
+	unsigned int *item = ucontrol->value.enumerated.item;
+	unsigned int prev_item = 0;
+
+	if (item[0] >= e->items)
+		return -EINVAL;
+
+	memif_priv = afe_priv->dai_priv[dai_id];
+
+	prev_item = snd_soc_enum_val_to_item(e, memif_priv->fs_timing);
+
+	if (item[0] == prev_item)
+		return 0;
+
+	memif_priv->fs_timing = snd_soc_enum_item_to_val(e, item[0]);
+
+	return 1;
+}
+
+static const struct snd_kcontrol_new mt8188_memif_controls[] = {
+	MT8188_SOC_ENUM_EXT("dl2_1x_en_sel",
+			    dl2_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL2),
+	MT8188_SOC_ENUM_EXT("dl3_1x_en_sel",
+			    dl3_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL3),
+	MT8188_SOC_ENUM_EXT("dl6_1x_en_sel",
+			    dl6_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL6),
+	MT8188_SOC_ENUM_EXT("dl7_1x_en_sel",
+			    dl7_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL7),
+	MT8188_SOC_ENUM_EXT("dl8_1x_en_sel",
+			    dl8_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL8),
+	MT8188_SOC_ENUM_EXT("dl10_1x_en_sel",
+			    dl10_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL10),
+	MT8188_SOC_ENUM_EXT("dl11_1x_en_sel",
+			    dl11_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_DL11),
+	MT8188_SOC_ENUM_EXT("ul1_1x_en_sel",
+			    ul1_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL1),
+	MT8188_SOC_ENUM_EXT("ul2_1x_en_sel",
+			    ul2_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL2),
+	MT8188_SOC_ENUM_EXT("ul3_1x_en_sel",
+			    ul3_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL3),
+	MT8188_SOC_ENUM_EXT("ul4_1x_en_sel",
+			    ul4_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL4),
+	MT8188_SOC_ENUM_EXT("ul5_1x_en_sel",
+			    ul5_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL5),
+	MT8188_SOC_ENUM_EXT("ul6_1x_en_sel",
+			    ul6_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL6),
+	MT8188_SOC_ENUM_EXT("ul8_1x_en_sel",
+			    ul8_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL8),
+	MT8188_SOC_ENUM_EXT("ul9_1x_en_sel",
+			    ul9_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL9),
+	MT8188_SOC_ENUM_EXT("ul10_1x_en_sel",
+			    ul10_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_memif_1x_en_sel_put,
+			    MT8188_AFE_MEMIF_UL10),
+	MT8188_SOC_ENUM_EXT("asys_irq1_1x_en_sel",
+			    asys_irq1_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_13),
+	MT8188_SOC_ENUM_EXT("asys_irq2_1x_en_sel",
+			    asys_irq2_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_14),
+	MT8188_SOC_ENUM_EXT("asys_irq3_1x_en_sel",
+			    asys_irq3_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_15),
+	MT8188_SOC_ENUM_EXT("asys_irq4_1x_en_sel",
+			    asys_irq4_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_16),
+	MT8188_SOC_ENUM_EXT("asys_irq5_1x_en_sel",
+			    asys_irq5_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_17),
+	MT8188_SOC_ENUM_EXT("asys_irq6_1x_en_sel",
+			    asys_irq6_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_18),
+	MT8188_SOC_ENUM_EXT("asys_irq7_1x_en_sel",
+			    asys_irq7_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_19),
+	MT8188_SOC_ENUM_EXT("asys_irq8_1x_en_sel",
+			    asys_irq8_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_20),
+	MT8188_SOC_ENUM_EXT("asys_irq9_1x_en_sel",
+			    asys_irq9_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_21),
+	MT8188_SOC_ENUM_EXT("asys_irq10_1x_en_sel",
+			    asys_irq10_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_22),
+	MT8188_SOC_ENUM_EXT("asys_irq11_1x_en_sel",
+			    asys_irq11_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_23),
+	MT8188_SOC_ENUM_EXT("asys_irq12_1x_en_sel",
+			    asys_irq12_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_24),
+	MT8188_SOC_ENUM_EXT("asys_irq13_1x_en_sel",
+			    asys_irq13_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_25),
+	MT8188_SOC_ENUM_EXT("asys_irq14_1x_en_sel",
+			    asys_irq14_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_26),
+	MT8188_SOC_ENUM_EXT("asys_irq15_1x_en_sel",
+			    asys_irq15_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_27),
+	MT8188_SOC_ENUM_EXT("asys_irq16_1x_en_sel",
+			    asys_irq16_1x_en_sel_enum,
+			    snd_soc_get_enum_double,
+			    mt8188_asys_irq_1x_en_sel_put,
+			    MT8188_AFE_IRQ_28),
+	MT8188_SOC_ENUM_EXT("dl2_fs_timing_sel",
+			    dl2_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_DL2),
+	MT8188_SOC_ENUM_EXT("dl3_fs_timing_sel",
+			    dl3_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_DL3),
+	MT8188_SOC_ENUM_EXT("dl6_fs_timing_sel",
+			    dl6_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_DL6),
+	MT8188_SOC_ENUM_EXT("dl8_fs_timing_sel",
+			    dl8_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_DL8),
+	MT8188_SOC_ENUM_EXT("dl11_fs_timing_sel",
+			    dl11_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_DL11),
+	MT8188_SOC_ENUM_EXT("ul2_fs_timing_sel",
+			    ul2_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_UL2),
+	MT8188_SOC_ENUM_EXT("ul4_fs_timing_sel",
+			    ul4_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_UL4),
+	MT8188_SOC_ENUM_EXT("ul5_fs_timing_sel",
+			    ul5_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_UL5),
+	MT8188_SOC_ENUM_EXT("ul9_fs_timing_sel",
+			    ul9_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_UL9),
+	MT8188_SOC_ENUM_EXT("ul10_fs_timing_sel",
+			    ul10_fs_timing_sel_enum,
+			    mt8188_memif_fs_timing_sel_get,
+			    mt8188_memif_fs_timing_sel_put,
+			    MT8188_AFE_MEMIF_UL10),
+};
+
 static const struct snd_soc_component_driver mt8188_afe_pcm_dai_component = {
 	.name = "mt8188-afe-pcm-dai",
 };
@@ -2583,6 +3087,8 @@ static int mt8188_dai_memif_register(struct mtk_base_afe *afe)
 	dai->num_dapm_widgets = ARRAY_SIZE(mt8188_memif_widgets);
 	dai->dapm_routes = mt8188_memif_routes;
 	dai->num_dapm_routes = ARRAY_SIZE(mt8188_memif_routes);
+	dai->controls = mt8188_memif_controls;
+	dai->num_controls = ARRAY_SIZE(mt8188_memif_controls);
 
 	return init_memif_priv_data(afe);
 }
-- 
2.18.0



From miles.chen at mediatek.com  Thu Dec 29 22:04:26 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Fri, 30 Dec 2022 14:04:26 +0800
Subject: [PATCH v2 22/23] clk: mediatek: clk-mt7986-topckgen: Properly keep some clocks enabled
In-Reply-To: <20221223094259.87373-23-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-23-angelogioacchino.delregno@collabora.com>
Message-ID: <20221230060426.16415-1-miles.chen@mediatek.com>

> Instead of calling clk_prepare_enable() on a bunch of clocks at probe
> time, set the CLK_IS_CRITICAL flag to the same as these are required
> to be always on, and this is the right way of achieving that.
> 
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Miles Chen <miles.chen at mediatek.com> 


From miles.chen at mediatek.com  Thu Dec 29 22:05:34 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Fri, 30 Dec 2022 14:05:34 +0800
Subject: [PATCH v2 23/23] clk: mediatek: clk-mt7986-topckgen: Migrate to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-24-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-24-angelogioacchino.delregno@collabora.com>
Message-ID: <20221230060534.16492-1-miles.chen@mediatek.com>

> There are no more non-common calls in clk_mt7986_topckgen_probe():
> migrate this driver to mtk_clk_simple_probe().
> 
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>
Reviewed-by: Miles Chen <miles.chen at mediatek.com> 


From miles.chen at mediatek.com  Thu Dec 29 21:56:43 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Fri, 30 Dec 2022 13:56:43 +0800
Subject: [PATCH v2 21/23] clk: mediatek: clk-mt6795-topckgen: Migrate to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-22-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-22-angelogioacchino.delregno@collabora.com>
Message-ID: <20221230055643.16176-1-miles.chen@mediatek.com>

>Migrate away from custom probe functions and use the commonized
>mtk_clk_simple_{probe, remove}().
>
>Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
>
Reviewed-by: Miles Chen <miles.chen at mediatek.com> 


From miles.chen at mediatek.com  Thu Dec 29 22:13:09 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Fri, 30 Dec 2022 14:13:09 +0800
Subject: [PATCH v2 00/23] MediaTek clocks cleanups and improvements
In-Reply-To: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com>
Message-ID: <20221230061309.16643-1-miles.chen@mediatek.com>


> Changes in v2:
>  - Moved dt-bindings CLK_DUMMY to clk-mtk.h instead
> 
> 
> This series performs cleanups and improvements on MediaTek clock
> drivers, greatly reducing code duplication (hence also reducing
> kernel size).
> 
> There would be a lot to say about it, but summarizing:
> 
> * Propagates struct device where possible in order to introduce the
>   possibility of using Runtime PM on clock drivers as needed,
>   possibly enhancing reliability of some platforms (obviously, this
>   will do nothing unless power-domains are added to devicetree);
> 
> * Cleans up some duplicated clock(s) registration attempt(s): on
>   some platforms the 26M fixed factor clock is registered early,
>   but then upon platform_driver probe, an attempt to re-register
>   that clock was performed;
> 
> * Removes some early clock registration where possible, moving
>   everything to platform_driver clock probe;
> 
> * Breaks down the big MT8173 clock driver in multiple ones, as it's
>   already done with the others, cleans it up and adds possibility
>   possibility to compile non-boot-critical clock drivers (for 8173)
>   as modules;
> 
> * Extends the common mtk_clk_simple_probe() function to be able to
>   register multiple MediaTek clock types;
> 
> * Removes duplicated [...]_probe functions from multiple MediaTek SoC
>   clock drivers, migrating almost everything to the common functions
>   mtk_clk_simple_probe();
> 
> * Adds a .remove() callback, pointing to the common mtk_clk_simple_remove()
>   function to all clock drivers that were migrated to the common probe;
> 
> * Some more spare cleanups here and there.
> 
> All of this was manually tested on various Chromebooks (with different MTK
> SoCs) and no regression was detected.
> 
> Cheers!

I tested this v2 series on mt6779 and mt8192 without any problem.

thanks,
Miles


From trevor.wu at mediatek.com  Thu Dec 29 21:54:34 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:34 +0800
Subject: [PATCH v4 04/13] ASoC: mediatek: mt8188: support adda in platform driver
In-Reply-To: <20221230055443.16024-1-trevor.wu@mediatek.com>
References: <20221230055443.16024-1-trevor.wu@mediatek.com>
Message-ID: <20221230055443.16024-5-trevor.wu@mediatek.com>

Add mt8188 adda dai driver support.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
I don't add Reviewed-by tag because a clock parent name was updated
in accordance with the latest relationship in CCF.
---
 sound/soc/mediatek/mt8188/mt8188-dai-adda.c | 632 ++++++++++++++++++++
 1 file changed, 632 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-adda.c

diff --git a/sound/soc/mediatek/mt8188/mt8188-dai-adda.c b/sound/soc/mediatek/mt8188/mt8188-dai-adda.c
new file mode 100644
index 000000000000..d71696901553
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-dai-adda.c
@@ -0,0 +1,632 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MediaTek ALSA SoC Audio DAI ADDA Control
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#include <linux/bitfield.h>
+#include <linux/delay.h>
+#include <linux/regmap.h>
+#include "mt8188-afe-clk.h"
+#include "mt8188-afe-common.h"
+#include "mt8188-reg.h"
+
+#define ADDA_HIRES_THRES 48000
+
+enum {
+	SUPPLY_SEQ_CLOCK_SEL,
+	SUPPLY_SEQ_ADDA_DL_ON,
+	SUPPLY_SEQ_ADDA_MTKAIF_CFG,
+	SUPPLY_SEQ_ADDA_UL_ON,
+	SUPPLY_SEQ_ADDA_AFE_ON,
+};
+
+enum {
+	MTK_AFE_ADDA_DL_RATE_8K = 0,
+	MTK_AFE_ADDA_DL_RATE_11K = 1,
+	MTK_AFE_ADDA_DL_RATE_12K = 2,
+	MTK_AFE_ADDA_DL_RATE_16K = 3,
+	MTK_AFE_ADDA_DL_RATE_22K = 4,
+	MTK_AFE_ADDA_DL_RATE_24K = 5,
+	MTK_AFE_ADDA_DL_RATE_32K = 6,
+	MTK_AFE_ADDA_DL_RATE_44K = 7,
+	MTK_AFE_ADDA_DL_RATE_48K = 8,
+	MTK_AFE_ADDA_DL_RATE_96K = 9,
+	MTK_AFE_ADDA_DL_RATE_192K = 10,
+};
+
+enum {
+	MTK_AFE_ADDA_UL_RATE_8K = 0,
+	MTK_AFE_ADDA_UL_RATE_16K = 1,
+	MTK_AFE_ADDA_UL_RATE_32K = 2,
+	MTK_AFE_ADDA_UL_RATE_48K = 3,
+	MTK_AFE_ADDA_UL_RATE_96K = 4,
+	MTK_AFE_ADDA_UL_RATE_192K = 5,
+};
+
+enum {
+	DELAY_DATA_MISO1 = 0,
+	DELAY_DATA_MISO0 = 1,
+};
+
+struct mtk_dai_adda_priv {
+	unsigned int dl_rate;
+	unsigned int ul_rate;
+};
+
+static unsigned int afe_adda_dl_rate_transform(struct mtk_base_afe *afe,
+					       unsigned int rate)
+{
+	switch (rate) {
+	case 8000:
+		return MTK_AFE_ADDA_DL_RATE_8K;
+	case 11025:
+		return MTK_AFE_ADDA_DL_RATE_11K;
+	case 12000:
+		return MTK_AFE_ADDA_DL_RATE_12K;
+	case 16000:
+		return MTK_AFE_ADDA_DL_RATE_16K;
+	case 22050:
+		return MTK_AFE_ADDA_DL_RATE_22K;
+	case 24000:
+		return MTK_AFE_ADDA_DL_RATE_24K;
+	case 32000:
+		return MTK_AFE_ADDA_DL_RATE_32K;
+	case 44100:
+		return MTK_AFE_ADDA_DL_RATE_44K;
+	case 48000:
+		return MTK_AFE_ADDA_DL_RATE_48K;
+	case 96000:
+		return MTK_AFE_ADDA_DL_RATE_96K;
+	case 192000:
+		return MTK_AFE_ADDA_DL_RATE_192K;
+	default:
+		dev_info(afe->dev, "%s(), rate %u invalid, use 48kHz!!!\n",
+			 __func__, rate);
+		return MTK_AFE_ADDA_DL_RATE_48K;
+	}
+}
+
+static unsigned int afe_adda_ul_rate_transform(struct mtk_base_afe *afe,
+					       unsigned int rate)
+{
+	switch (rate) {
+	case 8000:
+		return MTK_AFE_ADDA_UL_RATE_8K;
+	case 16000:
+		return MTK_AFE_ADDA_UL_RATE_16K;
+	case 32000:
+		return MTK_AFE_ADDA_UL_RATE_32K;
+	case 48000:
+		return MTK_AFE_ADDA_UL_RATE_48K;
+	case 96000:
+		return MTK_AFE_ADDA_UL_RATE_96K;
+	case 192000:
+		return MTK_AFE_ADDA_UL_RATE_192K;
+	default:
+		dev_info(afe->dev, "%s(), rate %u invalid, use 48kHz!!!\n",
+			 __func__, rate);
+		return MTK_AFE_ADDA_UL_RATE_48K;
+	}
+}
+
+static int mt8188_adda_mtkaif_init(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtkaif_param *param = &afe_priv->mtkaif_params;
+	int delay_data;
+	int delay_cycle;
+	unsigned int mask = 0;
+	unsigned int val = 0;
+
+	/* set rx protocol 2 & mtkaif_rxif_clkinv_adc inverse */
+	regmap_set_bits(afe->regmap, AFE_ADDA_MTKAIF_CFG0,
+			MTKAIF_RXIF_CLKINV_ADC | MTKAIF_RXIF_PROTOCOL2);
+
+	regmap_set_bits(afe->regmap, AFE_AUD_PAD_TOP, RG_RX_PROTOCOL2);
+
+	if (!param->mtkaif_calibration_ok) {
+		dev_info(afe->dev, "%s(), calibration fail\n",  __func__);
+		return 0;
+	}
+
+	/* set delay for ch1, ch2 */
+	if (param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0] >=
+	    param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1]) {
+		delay_data = DELAY_DATA_MISO1;
+		delay_cycle =
+			param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0] -
+			param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1];
+	} else {
+		delay_data = DELAY_DATA_MISO0;
+		delay_cycle =
+			param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1] -
+			param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0];
+	}
+
+	val = 0;
+	mask = (MTKAIF_RXIF_DELAY_DATA | MTKAIF_RXIF_DELAY_CYCLE_MASK);
+	val |= FIELD_PREP(MTKAIF_RXIF_DELAY_CYCLE_MASK, delay_cycle);
+	val |= FIELD_PREP(MTKAIF_RXIF_DELAY_DATA, delay_data);
+	regmap_update_bits(afe->regmap, AFE_ADDA_MTKAIF_RX_CFG2, mask, val);
+
+	return 0;
+}
+
+static int mtk_adda_mtkaif_cfg_event(struct snd_soc_dapm_widget *w,
+				     struct snd_kcontrol *kcontrol,
+				     int event)
+{
+	struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+
+	dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n",
+		__func__, w->name, event);
+
+	switch (event) {
+	case SND_SOC_DAPM_PRE_PMU:
+		mt8188_adda_mtkaif_init(afe);
+		break;
+	default:
+		break;
+	}
+
+	return 0;
+}
+
+static int mtk_adda_dl_event(struct snd_soc_dapm_widget *w,
+			     struct snd_kcontrol *kcontrol,
+			     int event)
+{
+	struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+
+	dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n",
+		__func__, w->name, event);
+
+	switch (event) {
+	case SND_SOC_DAPM_POST_PMD:
+		/* should delayed 1/fs(smallest is 8k) = 125us before afe off */
+		usleep_range(125, 135);
+		break;
+	default:
+		break;
+	}
+
+	return 0;
+}
+
+static void mtk_adda_ul_mictype(struct mtk_base_afe *afe, bool dmic)
+{
+	unsigned int reg = AFE_ADDA_UL_SRC_CON0;
+	unsigned int val;
+
+	val = (UL_SDM3_LEVEL_CTL | UL_MODE_3P25M_CH1_CTL |
+	       UL_MODE_3P25M_CH2_CTL);
+
+	/* turn on dmic, ch1, ch2 */
+	if (dmic)
+		regmap_set_bits(afe->regmap, reg, val);
+	else
+		regmap_clear_bits(afe->regmap, reg, val);
+}
+
+static int mtk_adda_ul_event(struct snd_soc_dapm_widget *w,
+			     struct snd_kcontrol *kcontrol,
+			     int event)
+{
+	struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtkaif_param *param = &afe_priv->mtkaif_params;
+
+	dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n",
+		__func__, w->name, event);
+
+	switch (event) {
+	case SND_SOC_DAPM_PRE_PMU:
+		mtk_adda_ul_mictype(afe, param->mtkaif_dmic_on);
+		break;
+	case SND_SOC_DAPM_POST_PMD:
+		/* should delayed 1/fs(smallest is 8k) = 125us before afe off */
+		usleep_range(125, 135);
+		break;
+	default:
+		break;
+	}
+
+	return 0;
+}
+
+static int mtk_audio_hires_event(struct snd_soc_dapm_widget *w,
+				 struct snd_kcontrol *kcontrol,
+				 int event)
+{
+	struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct clk *clk = afe_priv->clk[MT8188_CLK_TOP_AUDIO_H_SEL];
+	struct clk *clk_parent;
+
+	dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n",
+		__func__, w->name, event);
+
+	switch (event) {
+	case SND_SOC_DAPM_PRE_PMU:
+		clk_parent = afe_priv->clk[MT8188_CLK_APMIXED_APLL1];
+		break;
+	case SND_SOC_DAPM_POST_PMD:
+		clk_parent = afe_priv->clk[MT8188_CLK_XTAL_26M];
+		break;
+	default:
+		return 0;
+	}
+	mt8188_afe_set_clk_parent(afe, clk, clk_parent);
+
+	return 0;
+}
+
+static int mtk_afe_adc_hires_connect(struct snd_soc_dapm_widget *source,
+				     struct snd_soc_dapm_widget *sink)
+{
+	struct snd_soc_dapm_widget *w = source;
+	struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_adda_priv *adda_priv;
+
+	adda_priv = afe_priv->dai_priv[MT8188_AFE_IO_ADDA];
+
+	if (!adda_priv) {
+		dev_err(afe->dev, "%s adda_priv == NULL", __func__);
+		return 0;
+	}
+
+	return !!(adda_priv->ul_rate > ADDA_HIRES_THRES);
+}
+
+static int mtk_afe_dac_hires_connect(struct snd_soc_dapm_widget *source,
+				     struct snd_soc_dapm_widget *sink)
+{
+	struct snd_soc_dapm_widget *w = source;
+	struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_adda_priv *adda_priv;
+
+	adda_priv = afe_priv->dai_priv[MT8188_AFE_IO_ADDA];
+
+	if (!adda_priv) {
+		dev_err(afe->dev, "%s adda_priv == NULL", __func__);
+		return 0;
+	}
+
+	return !!(adda_priv->dl_rate > ADDA_HIRES_THRES);
+}
+
+static const struct snd_kcontrol_new mtk_dai_adda_o176_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN176, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I002 Switch", AFE_CONN176, 2, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN176, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN176, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN176_2, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_adda_o177_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN177, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I003 Switch", AFE_CONN177, 3, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN177, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN177, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN177_2, 7, 1, 0),
+};
+
+static const char * const adda_dlgain_mux_map[] = {
+	"Bypass", "Connect",
+};
+
+static SOC_ENUM_SINGLE_DECL(adda_dlgain_mux_map_enum,
+			    SND_SOC_NOPM, 0,
+			    adda_dlgain_mux_map);
+
+static const struct snd_kcontrol_new adda_dlgain_mux_control =
+	SOC_DAPM_ENUM("DL_GAIN_MUX", adda_dlgain_mux_map_enum);
+
+static const struct snd_soc_dapm_widget mtk_dai_adda_widgets[] = {
+	SND_SOC_DAPM_MIXER("I168", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I169", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	SND_SOC_DAPM_MIXER("O176", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_adda_o176_mix,
+			   ARRAY_SIZE(mtk_dai_adda_o176_mix)),
+	SND_SOC_DAPM_MIXER("O177", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_adda_o177_mix,
+			   ARRAY_SIZE(mtk_dai_adda_o177_mix)),
+
+	SND_SOC_DAPM_SUPPLY_S("ADDA Enable", SUPPLY_SEQ_ADDA_AFE_ON,
+			      AFE_ADDA_UL_DL_CON0,
+			      ADDA_AFE_ON_SHIFT, 0,
+			      NULL,
+			      0),
+
+	SND_SOC_DAPM_SUPPLY_S("ADDA Playback Enable", SUPPLY_SEQ_ADDA_DL_ON,
+			      AFE_ADDA_DL_SRC2_CON0,
+			      DL_2_SRC_ON_TMP_CTRL_PRE_SHIFT, 0,
+			      mtk_adda_dl_event,
+			      SND_SOC_DAPM_POST_PMD),
+
+	SND_SOC_DAPM_SUPPLY_S("ADDA Capture Enable", SUPPLY_SEQ_ADDA_UL_ON,
+			      AFE_ADDA_UL_SRC_CON0,
+			      UL_SRC_ON_TMP_CTL_SHIFT, 0,
+			      mtk_adda_ul_event,
+			      SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
+
+	SND_SOC_DAPM_SUPPLY_S("AUDIO_HIRES", SUPPLY_SEQ_CLOCK_SEL,
+			      SND_SOC_NOPM,
+			      0, 0,
+			      mtk_audio_hires_event,
+			      SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
+
+	SND_SOC_DAPM_SUPPLY_S("ADDA_MTKAIF_CFG", SUPPLY_SEQ_ADDA_MTKAIF_CFG,
+			      SND_SOC_NOPM,
+			      0, 0,
+			      mtk_adda_mtkaif_cfg_event,
+			      SND_SOC_DAPM_PRE_PMU),
+
+	SND_SOC_DAPM_MUX("DL_GAIN_MUX", SND_SOC_NOPM, 0, 0,
+			 &adda_dlgain_mux_control),
+
+	SND_SOC_DAPM_PGA("DL_GAIN", AFE_ADDA_DL_SRC2_CON0,
+			 DL_2_GAIN_ON_CTL_PRE_SHIFT, 0, NULL, 0),
+
+	SND_SOC_DAPM_INPUT("ADDA_INPUT"),
+	SND_SOC_DAPM_OUTPUT("ADDA_OUTPUT"),
+
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_dac"),
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_adc"),
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_dac_hires"),
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_adc_hires"),
+};
+
+static const struct snd_soc_dapm_route mtk_dai_adda_routes[] = {
+	{"ADDA Capture", NULL, "ADDA Enable"},
+	{"ADDA Capture", NULL, "ADDA Capture Enable"},
+	{"ADDA Capture", NULL, "ADDA_MTKAIF_CFG"},
+	{"ADDA Capture", NULL, "aud_adc"},
+	{"ADDA Capture", NULL, "aud_adc_hires", mtk_afe_adc_hires_connect},
+	{"aud_adc_hires", NULL, "AUDIO_HIRES"},
+
+	{"I168", NULL, "ADDA Capture"},
+	{"I169", NULL, "ADDA Capture"},
+
+	{"ADDA Playback", NULL, "ADDA Enable"},
+	{"ADDA Playback", NULL, "ADDA Playback Enable"},
+	{"ADDA Playback", NULL, "aud_dac"},
+	{"ADDA Playback", NULL, "aud_dac_hires", mtk_afe_dac_hires_connect},
+	{"aud_dac_hires", NULL, "AUDIO_HIRES"},
+
+	{"DL_GAIN", NULL, "O176"},
+	{"DL_GAIN", NULL, "O177"},
+
+	{"DL_GAIN_MUX", "Bypass", "O176"},
+	{"DL_GAIN_MUX", "Bypass", "O177"},
+	{"DL_GAIN_MUX", "Connect", "DL_GAIN"},
+
+	{"ADDA Playback", NULL, "DL_GAIN_MUX"},
+
+	{"O176", "I000 Switch", "I000"},
+	{"O177", "I001 Switch", "I001"},
+
+	{"O176", "I002 Switch", "I002"},
+	{"O177", "I003 Switch", "I003"},
+
+	{"O176", "I020 Switch", "I020"},
+	{"O177", "I021 Switch", "I021"},
+
+	{"O176", "I022 Switch", "I022"},
+	{"O177", "I023 Switch", "I023"},
+
+	{"O176", "I070 Switch", "I070"},
+	{"O177", "I071 Switch", "I071"},
+
+	{"ADDA Capture", NULL, "ADDA_INPUT"},
+	{"ADDA_OUTPUT", NULL, "ADDA Playback"},
+};
+
+static int mt8188_adda_dmic_get(struct snd_kcontrol *kcontrol,
+				struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtkaif_param *param = &afe_priv->mtkaif_params;
+
+	ucontrol->value.integer.value[0] = param->mtkaif_dmic_on;
+	return 0;
+}
+
+static int mt8188_adda_dmic_set(struct snd_kcontrol *kcontrol,
+				struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtkaif_param *param = &afe_priv->mtkaif_params;
+	int dmic_on;
+
+	dmic_on = !!ucontrol->value.integer.value[0];
+
+	dev_dbg(afe->dev, "%s(), kcontrol name %s, dmic_on %d\n",
+		__func__, kcontrol->id.name, dmic_on);
+
+	if (param->mtkaif_dmic_on == dmic_on)
+		return 0;
+
+	param->mtkaif_dmic_on = dmic_on;
+	return 1;
+}
+
+static const struct snd_kcontrol_new mtk_dai_adda_controls[] = {
+	SOC_SINGLE("ADDA_DL_GAIN", AFE_ADDA_DL_SRC2_CON1,
+		   DL_2_GAIN_CTL_PRE_SHIFT, 65535, 0),
+	SOC_SINGLE_BOOL_EXT("MTKAIF_DMIC Switch", 0,
+			    mt8188_adda_dmic_get, mt8188_adda_dmic_set),
+};
+
+static int mtk_dai_da_configure(struct mtk_base_afe *afe,
+				unsigned int rate, int id)
+{
+	unsigned int val = 0;
+	unsigned int mask = 0;
+
+	/* set sampling rate */
+	mask |= DL_2_INPUT_MODE_CTL_MASK;
+	val |= FIELD_PREP(DL_2_INPUT_MODE_CTL_MASK,
+			  afe_adda_dl_rate_transform(afe, rate));
+
+	/* turn off saturation */
+	mask |= DL_2_CH1_SATURATION_EN_CTL;
+	mask |= DL_2_CH2_SATURATION_EN_CTL;
+
+	/* turn off mute function */
+	mask |= DL_2_MUTE_CH1_OFF_CTL_PRE;
+	mask |= DL_2_MUTE_CH2_OFF_CTL_PRE;
+	val |= DL_2_MUTE_CH1_OFF_CTL_PRE;
+	val |= DL_2_MUTE_CH2_OFF_CTL_PRE;
+
+	/* set voice input data if input sample rate is 8k or 16k */
+	mask |= DL_2_VOICE_MODE_CTL_PRE;
+	if (rate == 8000 || rate == 16000)
+		val |= DL_2_VOICE_MODE_CTL_PRE;
+
+	regmap_update_bits(afe->regmap, AFE_ADDA_DL_SRC2_CON0, mask, val);
+
+	/* new 2nd sdm */
+	regmap_set_bits(afe->regmap, AFE_ADDA_DL_SDM_DCCOMP_CON,
+			DL_USE_NEW_2ND_SDM);
+
+	return 0;
+}
+
+static int mtk_dai_ad_configure(struct mtk_base_afe *afe,
+				unsigned int rate, int id)
+{
+	unsigned int val;
+	unsigned int mask;
+
+	mask = UL_VOICE_MODE_CTL_MASK;
+	val = FIELD_PREP(UL_VOICE_MODE_CTL_MASK,
+			 afe_adda_ul_rate_transform(afe, rate));
+
+	regmap_update_bits(afe->regmap, AFE_ADDA_UL_SRC_CON0,
+			   mask, val);
+	return 0;
+}
+
+static int mtk_dai_adda_hw_params(struct snd_pcm_substream *substream,
+				  struct snd_pcm_hw_params *params,
+				  struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_adda_priv *adda_priv = afe_priv->dai_priv[dai->id];
+	unsigned int rate = params_rate(params);
+	int id = dai->id;
+	int ret = 0;
+
+	dev_dbg(afe->dev, "%s(), id %d, stream %d, rate %u\n",
+		__func__, id, substream->stream, rate);
+
+	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+		adda_priv->dl_rate = rate;
+		ret = mtk_dai_da_configure(afe, rate, id);
+	} else {
+		adda_priv->ul_rate = rate;
+		ret = mtk_dai_ad_configure(afe, rate, id);
+	}
+
+	return ret;
+}
+
+static const struct snd_soc_dai_ops mtk_dai_adda_ops = {
+	.hw_params = mtk_dai_adda_hw_params,
+};
+
+/* dai driver */
+#define MTK_ADDA_PLAYBACK_RATES (SNDRV_PCM_RATE_8000_48000 |\
+				 SNDRV_PCM_RATE_96000 |\
+				 SNDRV_PCM_RATE_192000)
+
+#define MTK_ADDA_CAPTURE_RATES (SNDRV_PCM_RATE_8000 |\
+				SNDRV_PCM_RATE_16000 |\
+				SNDRV_PCM_RATE_32000 |\
+				SNDRV_PCM_RATE_48000 |\
+				SNDRV_PCM_RATE_96000 |\
+				SNDRV_PCM_RATE_192000)
+
+#define MTK_ADDA_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
+			  SNDRV_PCM_FMTBIT_S24_LE |\
+			  SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_driver mtk_dai_adda_driver[] = {
+	{
+		.name = "ADDA",
+		.id = MT8188_AFE_IO_ADDA,
+		.playback = {
+			.stream_name = "ADDA Playback",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_ADDA_PLAYBACK_RATES,
+			.formats = MTK_ADDA_FORMATS,
+		},
+		.capture = {
+			.stream_name = "ADDA Capture",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_ADDA_CAPTURE_RATES,
+			.formats = MTK_ADDA_FORMATS,
+		},
+		.ops = &mtk_dai_adda_ops,
+	},
+};
+
+static int init_adda_priv_data(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_adda_priv *adda_priv;
+
+	adda_priv = devm_kzalloc(afe->dev, sizeof(struct mtk_dai_adda_priv),
+				 GFP_KERNEL);
+	if (!adda_priv)
+		return -ENOMEM;
+
+	afe_priv->dai_priv[MT8188_AFE_IO_ADDA] = adda_priv;
+
+	return 0;
+}
+
+int mt8188_dai_adda_register(struct mtk_base_afe *afe)
+{
+	struct mtk_base_afe_dai *dai;
+
+	dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
+	if (!dai)
+		return -ENOMEM;
+
+	list_add(&dai->list, &afe->sub_dais);
+
+	dai->dai_drivers = mtk_dai_adda_driver;
+	dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_adda_driver);
+
+	dai->dapm_widgets = mtk_dai_adda_widgets;
+	dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_adda_widgets);
+	dai->dapm_routes = mtk_dai_adda_routes;
+	dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_adda_routes);
+	dai->controls = mtk_dai_adda_controls;
+	dai->num_controls = ARRAY_SIZE(mtk_dai_adda_controls);
+
+	return init_adda_priv_data(afe);
+}
-- 
2.18.0



From trevor.wu at mediatek.com  Thu Dec 29 21:54:36 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:36 +0800
Subject: [PATCH v4 06/13] ASoC: mediatek: mt8188: support pcmif in platform driver
In-Reply-To: <20221230055443.16024-1-trevor.wu@mediatek.com>
References: <20221230055443.16024-1-trevor.wu@mediatek.com>
Message-ID: <20221230055443.16024-7-trevor.wu@mediatek.com>

Add mt8188 pcmif dai driver support

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 sound/soc/mediatek/mt8188/mt8188-dai-pcm.c | 367 +++++++++++++++++++++
 1 file changed, 367 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-pcm.c

diff --git a/sound/soc/mediatek/mt8188/mt8188-dai-pcm.c b/sound/soc/mediatek/mt8188/mt8188-dai-pcm.c
new file mode 100644
index 000000000000..3f1696dcf81c
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-dai-pcm.c
@@ -0,0 +1,367 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MediaTek ALSA SoC Audio DAI PCM I/F Control
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#include <linux/bitfield.h>
+#include <linux/regmap.h>
+#include <sound/pcm_params.h>
+#include "mt8188-afe-clk.h"
+#include "mt8188-afe-common.h"
+#include "mt8188-reg.h"
+
+enum {
+	MTK_DAI_PCM_FMT_I2S,
+	MTK_DAI_PCM_FMT_EIAJ,
+	MTK_DAI_PCM_FMT_MODEA,
+	MTK_DAI_PCM_FMT_MODEB,
+};
+
+enum {
+	MTK_DAI_PCM_CLK_A1SYS,
+	MTK_DAI_PCM_CLK_A2SYS,
+	MTK_DAI_PCM_CLK_26M_48K,
+	MTK_DAI_PCM_CLK_26M_441K,
+};
+
+struct mtk_dai_pcm_rate {
+	unsigned int rate;
+	unsigned int reg_value;
+};
+
+struct mtk_dai_pcmif_priv {
+	unsigned int slave_mode;
+	unsigned int lrck_inv;
+	unsigned int bck_inv;
+	unsigned int format;
+};
+
+static const struct mtk_dai_pcm_rate mtk_dai_pcm_rates[] = {
+	{ .rate = 8000, .reg_value = 0, },
+	{ .rate = 16000, .reg_value = 1, },
+	{ .rate = 32000, .reg_value = 2, },
+	{ .rate = 48000, .reg_value = 3, },
+	{ .rate = 11025, .reg_value = 1, },
+	{ .rate = 22050, .reg_value = 2, },
+	{ .rate = 44100, .reg_value = 3, },
+};
+
+static int mtk_dai_pcm_mode(unsigned int rate)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(mtk_dai_pcm_rates); i++)
+		if (mtk_dai_pcm_rates[i].rate == rate)
+			return mtk_dai_pcm_rates[i].reg_value;
+
+	return -EINVAL;
+}
+
+static const struct snd_kcontrol_new mtk_dai_pcm_o000_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN0, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN0_2, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new mtk_dai_pcm_o001_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN1, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN1_2, 7, 1, 0),
+};
+
+static const struct snd_soc_dapm_widget mtk_dai_pcm_widgets[] = {
+	SND_SOC_DAPM_MIXER("I002", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I003", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("O000", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_pcm_o000_mix,
+			   ARRAY_SIZE(mtk_dai_pcm_o000_mix)),
+	SND_SOC_DAPM_MIXER("O001", SND_SOC_NOPM, 0, 0,
+			   mtk_dai_pcm_o001_mix,
+			   ARRAY_SIZE(mtk_dai_pcm_o001_mix)),
+
+	SND_SOC_DAPM_SUPPLY("PCM_1_EN", PCM_INTF_CON1, 0, 0, NULL, 0),
+
+	SND_SOC_DAPM_INPUT("PCM1_INPUT"),
+	SND_SOC_DAPM_OUTPUT("PCM1_OUTPUT"),
+
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_asrc11"),
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_asrc12"),
+	SND_SOC_DAPM_CLOCK_SUPPLY("aud_pcmif"),
+};
+
+static const struct snd_soc_dapm_route mtk_dai_pcm_routes[] = {
+	{"I002", NULL, "PCM1 Capture"},
+	{"I003", NULL, "PCM1 Capture"},
+
+	{"O000", "I000 Switch", "I000"},
+	{"O001", "I001 Switch", "I001"},
+
+	{"O000", "I070 Switch", "I070"},
+	{"O001", "I071 Switch", "I071"},
+
+	{"PCM1 Playback", NULL, "O000"},
+	{"PCM1 Playback", NULL, "O001"},
+
+	{"PCM1 Playback", NULL, "PCM_1_EN"},
+	{"PCM1 Playback", NULL, "aud_asrc12"},
+	{"PCM1 Playback", NULL, "aud_pcmif"},
+
+	{"PCM1 Capture", NULL, "PCM_1_EN"},
+	{"PCM1 Capture", NULL, "aud_asrc11"},
+	{"PCM1 Capture", NULL, "aud_pcmif"},
+
+	{"PCM1_OUTPUT", NULL, "PCM1 Playback"},
+	{"PCM1 Capture", NULL, "PCM1_INPUT"},
+};
+
+static int mtk_dai_pcm_configure(struct snd_pcm_substream *substream,
+				 struct snd_soc_dai *dai)
+{
+	struct snd_pcm_runtime * const runtime = substream->runtime;
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_pcmif_priv *pcmif_priv = NULL;
+	unsigned int slave_mode;
+	unsigned int lrck_inv;
+	unsigned int bck_inv;
+	unsigned int fmt;
+	unsigned int bit_width = dai->sample_bits;
+	unsigned int val = 0;
+	unsigned int mask = 0;
+	int fs = 0;
+	int mode = 0;
+
+	if (dai->id < 0)
+		return -EINVAL;
+
+	pcmif_priv = afe_priv->dai_priv[dai->id];
+	slave_mode = pcmif_priv->slave_mode;
+	lrck_inv = pcmif_priv->lrck_inv;
+	bck_inv = pcmif_priv->bck_inv;
+	fmt = pcmif_priv->format;
+
+	/* sync freq mode */
+	fs = mt8188_afe_fs_timing(runtime->rate);
+	if (fs < 0)
+		return -EINVAL;
+
+	val |= FIELD_PREP(PCM_INTF_CON2_SYNC_FREQ_MODE_MASK, fs);
+	mask |= PCM_INTF_CON2_SYNC_FREQ_MODE_MASK;
+
+	/* clk domain sel */
+	if (runtime->rate % 8000)
+		val |= FIELD_PREP(PCM_INTF_CON2_CLK_DOMAIN_SEL_MASK,
+				  MTK_DAI_PCM_CLK_26M_441K);
+	else
+		val |= FIELD_PREP(PCM_INTF_CON2_CLK_DOMAIN_SEL_MASK,
+				  MTK_DAI_PCM_CLK_26M_48K);
+	mask |= PCM_INTF_CON2_CLK_DOMAIN_SEL_MASK;
+
+	regmap_update_bits(afe->regmap, PCM_INTF_CON2, mask, val);
+
+	val = 0;
+	mask = 0;
+
+	/* pcm mode */
+	mode = mtk_dai_pcm_mode(runtime->rate);
+	if (mode < 0)
+		return -EINVAL;
+
+	val |= FIELD_PREP(PCM_INTF_CON1_PCM_MODE_MASK, mode);
+	mask |= PCM_INTF_CON1_PCM_MODE_MASK;
+
+	/* pcm format */
+	val |= FIELD_PREP(PCM_INTF_CON1_PCM_FMT_MASK, fmt);
+	mask |= PCM_INTF_CON1_PCM_FMT_MASK;
+
+	/* pcm sync length */
+	if (fmt == MTK_DAI_PCM_FMT_MODEA ||
+	    fmt == MTK_DAI_PCM_FMT_MODEB)
+		val |= FIELD_PREP(PCM_INTF_CON1_SYNC_LENGTH_MASK, 1);
+	else
+		val |= FIELD_PREP(PCM_INTF_CON1_SYNC_LENGTH_MASK, bit_width);
+	mask |= PCM_INTF_CON1_SYNC_LENGTH_MASK;
+
+	/* pcm bits, word length */
+	if (bit_width > 16) {
+		val |= PCM_INTF_CON1_PCM_24BIT;
+		val |= PCM_INTF_CON1_PCM_WLEN_64BCK;
+	} else {
+		val |= PCM_INTF_CON1_PCM_16BIT;
+		val |= PCM_INTF_CON1_PCM_WLEN_32BCK;
+	}
+	mask |= PCM_INTF_CON1_PCM_BIT_MASK;
+	mask |= PCM_INTF_CON1_PCM_WLEN_MASK;
+
+	/* master/slave */
+	if (!slave_mode) {
+		val |= PCM_INTF_CON1_PCM_MASTER;
+
+		if (lrck_inv)
+			val |= PCM_INTF_CON1_SYNC_OUT_INV;
+		if (bck_inv)
+			val |= PCM_INTF_CON1_BCLK_OUT_INV;
+		mask |= PCM_INTF_CON1_CLK_OUT_INV_MASK;
+	} else {
+		val |= PCM_INTF_CON1_PCM_SLAVE;
+
+		if (lrck_inv)
+			val |= PCM_INTF_CON1_SYNC_IN_INV;
+		if (bck_inv)
+			val |= PCM_INTF_CON1_BCLK_IN_INV;
+		mask |= PCM_INTF_CON1_CLK_IN_INV_MASK;
+
+		// TODO: add asrc setting for slave mode
+	}
+	mask |= PCM_INTF_CON1_PCM_M_S_MASK;
+
+	regmap_update_bits(afe->regmap, PCM_INTF_CON1, mask, val);
+
+	return 0;
+}
+
+/* dai ops */
+static int mtk_dai_pcm_prepare(struct snd_pcm_substream *substream,
+			       struct snd_soc_dai *dai)
+{
+	if (dai->playback_widget->active || dai->capture_widget->active)
+		return 0;
+
+	return mtk_dai_pcm_configure(substream, dai);
+}
+
+static int mtk_dai_pcm_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_pcmif_priv *pcmif_priv = NULL;
+
+	dev_dbg(dai->dev, "%s fmt 0x%x\n", __func__, fmt);
+
+	if (dai->id < 0)
+		return -EINVAL;
+
+	pcmif_priv = afe_priv->dai_priv[dai->id];
+
+	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+	case SND_SOC_DAIFMT_I2S:
+		pcmif_priv->format = MTK_DAI_PCM_FMT_I2S;
+		break;
+	case SND_SOC_DAIFMT_DSP_A:
+		pcmif_priv->format = MTK_DAI_PCM_FMT_MODEA;
+		break;
+	case SND_SOC_DAIFMT_DSP_B:
+		pcmif_priv->format = MTK_DAI_PCM_FMT_MODEB;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+	case SND_SOC_DAIFMT_NB_NF:
+		pcmif_priv->bck_inv = 0;
+		pcmif_priv->lrck_inv = 0;
+		break;
+	case SND_SOC_DAIFMT_NB_IF:
+		pcmif_priv->bck_inv = 0;
+		pcmif_priv->lrck_inv = 1;
+		break;
+	case SND_SOC_DAIFMT_IB_NF:
+		pcmif_priv->bck_inv = 1;
+		pcmif_priv->lrck_inv = 0;
+		break;
+	case SND_SOC_DAIFMT_IB_IF:
+		pcmif_priv->bck_inv = 1;
+		pcmif_priv->lrck_inv = 1;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
+	case SND_SOC_DAIFMT_BC_FC:
+		pcmif_priv->slave_mode = 1;
+		break;
+	case SND_SOC_DAIFMT_BP_FP:
+		pcmif_priv->slave_mode = 0;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static const struct snd_soc_dai_ops mtk_dai_pcm_ops = {
+	.prepare	= mtk_dai_pcm_prepare,
+	.set_fmt	= mtk_dai_pcm_set_fmt,
+};
+
+/* dai driver */
+#define MTK_PCM_RATES (SNDRV_PCM_RATE_8000_48000)
+
+#define MTK_PCM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
+			 SNDRV_PCM_FMTBIT_S24_LE |\
+			 SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_driver mtk_dai_pcm_driver[] = {
+	{
+		.name = "PCM1",
+		.id = MT8188_AFE_IO_PCM,
+		.playback = {
+			.stream_name = "PCM1 Playback",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.capture = {
+			.stream_name = "PCM1 Capture",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mtk_dai_pcm_ops,
+		.symmetric_rate = 1,
+		.symmetric_sample_bits = 1,
+	},
+};
+
+static int init_pcmif_priv_data(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_pcmif_priv *pcmif_priv;
+
+	pcmif_priv = devm_kzalloc(afe->dev, sizeof(struct mtk_dai_pcmif_priv),
+				  GFP_KERNEL);
+	if (!pcmif_priv)
+		return -ENOMEM;
+
+	afe_priv->dai_priv[MT8188_AFE_IO_PCM] = pcmif_priv;
+	return 0;
+}
+
+int mt8188_dai_pcm_register(struct mtk_base_afe *afe)
+{
+	struct mtk_base_afe_dai *dai;
+
+	dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
+	if (!dai)
+		return -ENOMEM;
+
+	list_add(&dai->list, &afe->sub_dais);
+
+	dai->dai_drivers = mtk_dai_pcm_driver;
+	dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_pcm_driver);
+
+	dai->dapm_widgets = mtk_dai_pcm_widgets;
+	dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_pcm_widgets);
+	dai->dapm_routes = mtk_dai_pcm_routes;
+	dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_pcm_routes);
+
+	return init_pcmif_priv_data(afe);
+}
-- 
2.18.0



From trevor.wu at mediatek.com  Thu Dec 29 21:54:42 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:42 +0800
Subject: [PATCH v4 12/13] ASoC: mediatek: mt8188: add machine driver with mt6359
In-Reply-To: <20221230055443.16024-1-trevor.wu@mediatek.com>
References: <20221230055443.16024-1-trevor.wu@mediatek.com>
Message-ID: <20221230055443.16024-13-trevor.wu@mediatek.com>

Add support for mt8188 board with mt6359.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
Reported-by: kernel test robot <lkp at intel.com>
---
 sound/soc/mediatek/Kconfig                |  11 +
 sound/soc/mediatek/mt8188/Makefile        |   3 +
 sound/soc/mediatek/mt8188/mt8188-mt6359.c | 785 ++++++++++++++++++++++
 3 files changed, 799 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-mt6359.c

diff --git a/sound/soc/mediatek/Kconfig b/sound/soc/mediatek/Kconfig
index 799894e6dc3e..6eaa4991d99a 100644
--- a/sound/soc/mediatek/Kconfig
+++ b/sound/soc/mediatek/Kconfig
@@ -218,6 +218,17 @@ config SND_SOC_MT8188
 	  Select Y if you have such device.
 	  If unsure select "N".
 
+config SND_SOC_MT8188_MT6359
+	tristate "ASoC Audio driver for MT8188 with MT6359 and I2S codecs"
+	depends on SND_SOC_MT8188 && MTK_PMIC_WRAP
+	select SND_SOC_MT6359
+	select SND_SOC_HDMI_CODEC
+	help
+	  This adds support for ASoC machine driver for MediaTek MT8188
+	  boards with the MT6359 and other I2S audio codecs.
+	  Select Y if you have such device.
+	  If unsure select "N".
+
 config SND_SOC_MT8192
 	tristate "ASoC support for Mediatek MT8192 chip"
 	depends on ARCH_MEDIATEK
diff --git a/sound/soc/mediatek/mt8188/Makefile b/sound/soc/mediatek/mt8188/Makefile
index fa5d383c5e47..781e61cbb22b 100644
--- a/sound/soc/mediatek/mt8188/Makefile
+++ b/sound/soc/mediatek/mt8188/Makefile
@@ -10,3 +10,6 @@ snd-soc-mt8188-afe-objs := \
 	mt8188-dai-pcm.o
 
 obj-$(CONFIG_SND_SOC_MT8188) += snd-soc-mt8188-afe.o
+
+# machine driver
+obj-$(CONFIG_SND_SOC_MT8188_MT6359) += mt8188-mt6359.o
diff --git a/sound/soc/mediatek/mt8188/mt8188-mt6359.c b/sound/soc/mediatek/mt8188/mt8188-mt6359.c
new file mode 100644
index 000000000000..919d74ea1934
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-mt6359.c
@@ -0,0 +1,785 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * mt8188-mt6359.c  --  MT8188-MT6359 ALSA SoC machine driver
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Trevor Wu <trevor.wu at mediatek.com>
+ */
+
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/pm_runtime.h>
+#include <sound/jack.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include "mt8188-afe-common.h"
+#include "../../codecs/mt6359.h"
+#include "../common/mtk-afe-platform-driver.h"
+#include "../common/mtk-soundcard-driver.h"
+
+/* FE */
+SND_SOC_DAILINK_DEFS(playback2,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL2")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(playback3,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL3")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(playback6,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL6")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(playback7,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL7")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(playback8,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL8")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(playback10,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL10")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(playback11,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DL11")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture1,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL1")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture2,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL2")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture3,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL3")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture4,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL4")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture5,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL5")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture6,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL6")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture8,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL8")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture9,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL9")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(capture10,
+		     DAILINK_COMP_ARRAY(COMP_CPU("UL10")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+/* BE */
+SND_SOC_DAILINK_DEFS(adda,
+		     DAILINK_COMP_ARRAY(COMP_CPU("ADDA")),
+		     DAILINK_COMP_ARRAY(COMP_CODEC("mt6359-sound",
+						   "mt6359-snd-codec-aif1")),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(dptx,
+		     DAILINK_COMP_ARRAY(COMP_CPU("DPTX")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(etdm1_in,
+		     DAILINK_COMP_ARRAY(COMP_CPU("ETDM1_IN")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(etdm2_in,
+		     DAILINK_COMP_ARRAY(COMP_CPU("ETDM2_IN")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(etdm1_out,
+		     DAILINK_COMP_ARRAY(COMP_CPU("ETDM1_OUT")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(etdm2_out,
+		     DAILINK_COMP_ARRAY(COMP_CPU("ETDM2_OUT")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(etdm3_out,
+		     DAILINK_COMP_ARRAY(COMP_CPU("ETDM3_OUT")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+SND_SOC_DAILINK_DEFS(pcm1,
+		     DAILINK_COMP_ARRAY(COMP_CPU("PCM1")),
+		     DAILINK_COMP_ARRAY(COMP_DUMMY()),
+		     DAILINK_COMP_ARRAY(COMP_EMPTY()));
+
+struct mt8188_mt6359_priv {
+	struct snd_soc_jack dp_jack;
+	struct snd_soc_jack hdmi_jack;
+};
+
+struct mt8188_card_data {
+	const char *name;
+	unsigned long quirk;
+};
+
+static const struct snd_soc_dapm_widget mt8188_mt6359_widgets[] = {
+	SND_SOC_DAPM_HP("Headphone", NULL),
+	SND_SOC_DAPM_MIC("Headset Mic", NULL),
+};
+
+static const struct snd_kcontrol_new mt8188_mt6359_controls[] = {
+	SOC_DAPM_PIN_SWITCH("Headphone"),
+	SOC_DAPM_PIN_SWITCH("Headset Mic"),
+};
+
+#define CKSYS_AUD_TOP_CFG 0x032c
+#define CKSYS_AUD_TOP_MON 0x0330
+
+static int mt8188_mt6359_mtkaif_calibration(struct snd_soc_pcm_runtime *rtd)
+{
+	struct snd_soc_component *cmpnt_afe =
+		snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME);
+	struct snd_soc_component *cmpnt_codec =
+		asoc_rtd_to_codec(rtd, 0)->component;
+	struct mtk_base_afe *afe;
+	struct mt8188_afe_private *afe_priv;
+	struct mtkaif_param *param;
+	int chosen_phase_1, chosen_phase_2;
+	int prev_cycle_1, prev_cycle_2;
+	int test_done_1, test_done_2;
+	int cycle_1, cycle_2;
+	int mtkaif_chosen_phase[MT8188_MTKAIF_MISO_NUM];
+	int mtkaif_phase_cycle[MT8188_MTKAIF_MISO_NUM];
+	int mtkaif_calibration_num_phase;
+	bool mtkaif_calibration_ok;
+	unsigned int monitor = 0;
+	int counter;
+	int phase;
+	int i;
+
+	if (!cmpnt_afe)
+		return -EINVAL;
+
+	afe = snd_soc_component_get_drvdata(cmpnt_afe);
+	afe_priv = afe->platform_priv;
+	param = &afe_priv->mtkaif_params;
+
+	dev_dbg(afe->dev, "%s(), start\n", __func__);
+
+	param->mtkaif_calibration_ok = false;
+	for (i = 0; i < MT8188_MTKAIF_MISO_NUM; i++) {
+		param->mtkaif_chosen_phase[i] = -1;
+		param->mtkaif_phase_cycle[i] = 0;
+		mtkaif_chosen_phase[i] = -1;
+		mtkaif_phase_cycle[i] = 0;
+	}
+
+	if (IS_ERR(afe_priv->topckgen)) {
+		dev_info(afe->dev, "%s() Cannot find topckgen controller\n",
+			 __func__);
+		return 0;
+	}
+
+	pm_runtime_get_sync(afe->dev);
+	mt6359_mtkaif_calibration_enable(cmpnt_codec);
+
+	/* set test type to synchronizer pulse */
+	regmap_update_bits(afe_priv->topckgen,
+			   CKSYS_AUD_TOP_CFG, 0xffff, 0x4);
+	mtkaif_calibration_num_phase = 42;	/* mt6359: 0 ~ 42 */
+	mtkaif_calibration_ok = true;
+
+	for (phase = 0;
+	     phase <= mtkaif_calibration_num_phase && mtkaif_calibration_ok;
+	     phase++) {
+		mt6359_set_mtkaif_calibration_phase(cmpnt_codec,
+						    phase, phase, phase);
+
+		regmap_set_bits(afe_priv->topckgen, CKSYS_AUD_TOP_CFG, 0x1);
+
+		test_done_1 = 0;
+		test_done_2 = 0;
+
+		cycle_1 = -1;
+		cycle_2 = -1;
+
+		counter = 0;
+		while (!(test_done_1 & test_done_2)) {
+			regmap_read(afe_priv->topckgen,
+				    CKSYS_AUD_TOP_MON, &monitor);
+			test_done_1 = (monitor >> 28) & 0x1;
+			test_done_2 = (monitor >> 29) & 0x1;
+
+			if (test_done_1 == 1)
+				cycle_1 = monitor & 0xf;
+
+			if (test_done_2 == 1)
+				cycle_2 = (monitor >> 4) & 0xf;
+
+			/* handle if never test done */
+			if (++counter > 10000) {
+				dev_info(afe->dev, "%s(), test fail, cycle_1 %d, cycle_2 %d, monitor 0x%x\n",
+					 __func__,
+					 cycle_1, cycle_2, monitor);
+				mtkaif_calibration_ok = false;
+				break;
+			}
+		}
+
+		if (phase == 0) {
+			prev_cycle_1 = cycle_1;
+			prev_cycle_2 = cycle_2;
+		}
+
+		if (cycle_1 != prev_cycle_1 &&
+		    mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] < 0) {
+			mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] = phase - 1;
+			mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0] = prev_cycle_1;
+		}
+
+		if (cycle_2 != prev_cycle_2 &&
+		    mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] < 0) {
+			mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] = phase - 1;
+			mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1] = prev_cycle_2;
+		}
+
+		regmap_clear_bits(afe_priv->topckgen, CKSYS_AUD_TOP_CFG, 0x1);
+
+		if (mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] >= 0 &&
+		    mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] >= 0)
+			break;
+	}
+
+	if (mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] < 0) {
+		mtkaif_calibration_ok = false;
+		chosen_phase_1 = 0;
+	} else {
+		chosen_phase_1 = mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0];
+	}
+
+	if (mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] < 0) {
+		mtkaif_calibration_ok = false;
+		chosen_phase_2 = 0;
+	} else {
+		chosen_phase_2 = mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1];
+	}
+
+	mt6359_set_mtkaif_calibration_phase(cmpnt_codec,
+					    chosen_phase_1,
+					    chosen_phase_2,
+					    0);
+
+	mt6359_mtkaif_calibration_disable(cmpnt_codec);
+	pm_runtime_put(afe->dev);
+
+	param->mtkaif_calibration_ok = mtkaif_calibration_ok;
+	param->mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] = chosen_phase_1;
+	param->mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] = chosen_phase_2;
+
+	for (i = 0; i < MT8188_MTKAIF_MISO_NUM; i++)
+		param->mtkaif_phase_cycle[i] = mtkaif_phase_cycle[i];
+
+	dev_info(afe->dev, "%s(), end, calibration ok %d\n",
+		 __func__, param->mtkaif_calibration_ok);
+
+	return 0;
+}
+
+static int mt8188_mt6359_init(struct snd_soc_pcm_runtime *rtd)
+{
+	struct snd_soc_component *cmpnt_codec =
+		asoc_rtd_to_codec(rtd, 0)->component;
+
+	/* set mtkaif protocol */
+	mt6359_set_mtkaif_protocol(cmpnt_codec,
+				   MT6359_MTKAIF_PROTOCOL_2_CLK_P2);
+
+	/* mtkaif calibration */
+	mt8188_mt6359_mtkaif_calibration(rtd);
+
+	return 0;
+}
+
+enum {
+	DAI_LINK_DL2_FE,
+	DAI_LINK_DL3_FE,
+	DAI_LINK_DL6_FE,
+	DAI_LINK_DL7_FE,
+	DAI_LINK_DL8_FE,
+	DAI_LINK_DL10_FE,
+	DAI_LINK_DL11_FE,
+	DAI_LINK_UL1_FE,
+	DAI_LINK_UL2_FE,
+	DAI_LINK_UL3_FE,
+	DAI_LINK_UL4_FE,
+	DAI_LINK_UL5_FE,
+	DAI_LINK_UL6_FE,
+	DAI_LINK_UL8_FE,
+	DAI_LINK_UL9_FE,
+	DAI_LINK_UL10_FE,
+	DAI_LINK_ADDA_BE,
+	DAI_LINK_DPTX_BE,
+	DAI_LINK_ETDM1_IN_BE,
+	DAI_LINK_ETDM2_IN_BE,
+	DAI_LINK_ETDM1_OUT_BE,
+	DAI_LINK_ETDM2_OUT_BE,
+	DAI_LINK_ETDM3_OUT_BE,
+	DAI_LINK_PCM1_BE,
+};
+
+static int mt8188_dptx_hw_params(struct snd_pcm_substream *substream,
+				 struct snd_pcm_hw_params *params)
+{
+	struct snd_soc_pcm_runtime *rtd = substream->private_data;
+	unsigned int rate = params_rate(params);
+	unsigned int mclk_fs_ratio = 256;
+	unsigned int mclk_fs = rate * mclk_fs_ratio;
+	struct snd_soc_dai *dai = asoc_rtd_to_cpu(rtd, 0);
+
+	return snd_soc_dai_set_sysclk(dai, 0, mclk_fs, SND_SOC_CLOCK_OUT);
+}
+
+static const struct snd_soc_ops mt8188_dptx_ops = {
+	.hw_params = mt8188_dptx_hw_params,
+};
+
+static int mt8188_dptx_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
+				       struct snd_pcm_hw_params *params)
+{
+	/* fix BE i2s format to 32bit, clean param mask first */
+	snd_mask_reset_range(hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT),
+			     0, (__force unsigned int)SNDRV_PCM_FORMAT_LAST);
+
+	params_set_format(params, SNDRV_PCM_FORMAT_S32_LE);
+
+	return 0;
+}
+
+static int mt8188_hdmi_codec_init(struct snd_soc_pcm_runtime *rtd)
+{
+	struct mt8188_mt6359_priv *priv = snd_soc_card_get_drvdata(rtd->card);
+	struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component;
+	int ret = 0;
+
+	ret = snd_soc_card_jack_new(rtd->card, "HDMI Jack", SND_JACK_LINEOUT,
+				    &priv->hdmi_jack);
+	if (ret) {
+		dev_info(rtd->dev, "%s, new jack failed: %d\n", __func__, ret);
+		return ret;
+	}
+
+	ret = snd_soc_component_set_jack(component, &priv->hdmi_jack, NULL);
+	if (ret)
+		dev_info(rtd->dev, "%s, set jack failed on %s (ret=%d)\n",
+			 __func__, component->name, ret);
+
+	return ret;
+}
+
+static int mt8188_dptx_codec_init(struct snd_soc_pcm_runtime *rtd)
+{
+	struct mt8188_mt6359_priv *priv = snd_soc_card_get_drvdata(rtd->card);
+	struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component;
+	int ret = 0;
+
+	ret = snd_soc_card_jack_new(rtd->card, "DP Jack", SND_JACK_LINEOUT,
+				    &priv->dp_jack);
+	if (ret) {
+		dev_info(rtd->dev, "%s, new jack failed: %d\n", __func__, ret);
+		return ret;
+	}
+
+	ret = snd_soc_component_set_jack(component, &priv->dp_jack, NULL);
+	if (ret)
+		dev_info(rtd->dev, "%s, set jack failed on %s (ret=%d)\n",
+			 __func__, component->name, ret);
+
+	return ret;
+}
+
+static struct snd_soc_dai_link mt8188_mt6359_dai_links[] = {
+	/* FE */
+	[DAI_LINK_DL2_FE] = {
+		.name = "DL2_FE",
+		.stream_name = "DL2 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback2),
+	},
+	[DAI_LINK_DL3_FE] = {
+		.name = "DL3_FE",
+		.stream_name = "DL3 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback3),
+	},
+	[DAI_LINK_DL6_FE] = {
+		.name = "DL6_FE",
+		.stream_name = "DL6 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback6),
+	},
+	[DAI_LINK_DL7_FE] = {
+		.name = "DL7_FE",
+		.stream_name = "DL7 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_PRE,
+			SND_SOC_DPCM_TRIGGER_PRE,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback7),
+	},
+	[DAI_LINK_DL8_FE] = {
+		.name = "DL8_FE",
+		.stream_name = "DL8 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback8),
+	},
+	[DAI_LINK_DL10_FE] = {
+		.name = "DL10_FE",
+		.stream_name = "DL10 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback10),
+	},
+	[DAI_LINK_DL11_FE] = {
+		.name = "DL11_FE",
+		.stream_name = "DL11 Playback",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(playback11),
+	},
+	[DAI_LINK_UL1_FE] = {
+		.name = "UL1_FE",
+		.stream_name = "UL1 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_PRE,
+			SND_SOC_DPCM_TRIGGER_PRE,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture1),
+	},
+	[DAI_LINK_UL2_FE] = {
+		.name = "UL2_FE",
+		.stream_name = "UL2 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture2),
+	},
+	[DAI_LINK_UL3_FE] = {
+		.name = "UL3_FE",
+		.stream_name = "UL3 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture3),
+	},
+	[DAI_LINK_UL4_FE] = {
+		.name = "UL4_FE",
+		.stream_name = "UL4 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture4),
+	},
+	[DAI_LINK_UL5_FE] = {
+		.name = "UL5_FE",
+		.stream_name = "UL5 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture5),
+	},
+	[DAI_LINK_UL6_FE] = {
+		.name = "UL6_FE",
+		.stream_name = "UL6 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_PRE,
+			SND_SOC_DPCM_TRIGGER_PRE,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture6),
+	},
+	[DAI_LINK_UL8_FE] = {
+		.name = "UL8_FE",
+		.stream_name = "UL8 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture8),
+	},
+	[DAI_LINK_UL9_FE] = {
+		.name = "UL9_FE",
+		.stream_name = "UL9 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture9),
+	},
+	[DAI_LINK_UL10_FE] = {
+		.name = "UL10_FE",
+		.stream_name = "UL10 Capture",
+		.trigger = {
+			SND_SOC_DPCM_TRIGGER_POST,
+			SND_SOC_DPCM_TRIGGER_POST,
+		},
+		.dynamic = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(capture10),
+	},
+	/* BE */
+	[DAI_LINK_ADDA_BE] = {
+		.name = "ADDA_BE",
+		.no_pcm = 1,
+		.dpcm_playback = 1,
+		.dpcm_capture = 1,
+		.init = mt8188_mt6359_init,
+		SND_SOC_DAILINK_REG(adda),
+	},
+	[DAI_LINK_DPTX_BE] = {
+		.name = "DPTX_BE",
+		.ops = &mt8188_dptx_ops,
+		.be_hw_params_fixup = mt8188_dptx_hw_params_fixup,
+		.no_pcm = 1,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(dptx),
+	},
+	[DAI_LINK_ETDM1_IN_BE] = {
+		.name = "ETDM1_IN_BE",
+		.no_pcm = 1,
+		.dai_fmt = SND_SOC_DAIFMT_I2S |
+			SND_SOC_DAIFMT_NB_NF |
+			SND_SOC_DAIFMT_CBP_CFP,
+		.dpcm_capture = 1,
+		.ignore_suspend = 1,
+		SND_SOC_DAILINK_REG(etdm1_in),
+	},
+	[DAI_LINK_ETDM2_IN_BE] = {
+		.name = "ETDM2_IN_BE",
+		.no_pcm = 1,
+		.dai_fmt = SND_SOC_DAIFMT_I2S |
+			SND_SOC_DAIFMT_NB_NF |
+			SND_SOC_DAIFMT_CBP_CFP,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(etdm2_in),
+	},
+	[DAI_LINK_ETDM1_OUT_BE] = {
+		.name = "ETDM1_OUT_BE",
+		.no_pcm = 1,
+		.dai_fmt = SND_SOC_DAIFMT_I2S |
+			SND_SOC_DAIFMT_NB_NF |
+			SND_SOC_DAIFMT_CBC_CFC,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(etdm1_out),
+	},
+	[DAI_LINK_ETDM2_OUT_BE] = {
+		.name = "ETDM2_OUT_BE",
+		.no_pcm = 1,
+		.dai_fmt = SND_SOC_DAIFMT_I2S |
+			SND_SOC_DAIFMT_NB_NF |
+			SND_SOC_DAIFMT_CBC_CFC,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(etdm2_out),
+	},
+	[DAI_LINK_ETDM3_OUT_BE] = {
+		.name = "ETDM3_OUT_BE",
+		.no_pcm = 1,
+		.dai_fmt = SND_SOC_DAIFMT_I2S |
+			SND_SOC_DAIFMT_NB_NF |
+			SND_SOC_DAIFMT_CBC_CFC,
+		.dpcm_playback = 1,
+		SND_SOC_DAILINK_REG(etdm3_out),
+	},
+	[DAI_LINK_PCM1_BE] = {
+		.name = "PCM1_BE",
+		.no_pcm = 1,
+		.dai_fmt = SND_SOC_DAIFMT_I2S |
+			SND_SOC_DAIFMT_NB_NF |
+			SND_SOC_DAIFMT_CBC_CFC,
+		.dpcm_playback = 1,
+		.dpcm_capture = 1,
+		SND_SOC_DAILINK_REG(pcm1),
+	},
+};
+
+static struct snd_soc_card mt8188_mt6359_soc_card = {
+	.owner = THIS_MODULE,
+	.dai_link = mt8188_mt6359_dai_links,
+	.num_links = ARRAY_SIZE(mt8188_mt6359_dai_links),
+	.dapm_widgets = mt8188_mt6359_widgets,
+	.num_dapm_widgets = ARRAY_SIZE(mt8188_mt6359_widgets),
+	.controls = mt8188_mt6359_controls,
+	.num_controls = ARRAY_SIZE(mt8188_mt6359_controls),
+};
+
+static int mt8188_mt6359_dev_probe(struct platform_device *pdev)
+{
+	struct snd_soc_card *card = &mt8188_mt6359_soc_card;
+	struct device_node *platform_node;
+	struct mt8188_mt6359_priv *priv;
+	struct mt8188_card_data *card_data;
+	struct snd_soc_dai_link *dai_link;
+	int ret, i;
+
+	card_data = (struct mt8188_card_data *)of_device_get_match_data(&pdev->dev);
+	card->dev = &pdev->dev;
+
+	ret = snd_soc_of_parse_card_name(card, "model");
+	if (ret)
+		return dev_err_probe(&pdev->dev, ret, "%s new card name parsing error\n",
+				     __func__);
+
+	if (!card->name)
+		card->name = card_data->name;
+
+	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return  -ENOMEM;
+
+	if (of_property_read_bool(pdev->dev.of_node, "audio-routing")) {
+		ret = snd_soc_of_parse_audio_routing(card, "audio-routing");
+		if (ret)
+			return ret;
+	}
+
+	platform_node = of_parse_phandle(pdev->dev.of_node,
+					 "mediatek,platform", 0);
+	if (!platform_node) {
+		ret = -EINVAL;
+		return dev_err_probe(&pdev->dev, ret, "Property 'platform' missing or invalid\n");
+	}
+
+	ret = parse_dai_link_info(card);
+	if (ret)
+		goto err;
+
+	for_each_card_prelinks(card, i, dai_link) {
+		if (!dai_link->platforms->name)
+			dai_link->platforms->of_node = platform_node;
+
+		if (strcmp(dai_link->name, "DPTX_BE") == 0) {
+			if (strcmp(dai_link->codecs->dai_name, "snd-soc-dummy-dai"))
+				dai_link->init = mt8188_dptx_codec_init;
+		} else if (strcmp(dai_link->name, "ETDM3_OUT_BE") == 0) {
+			if (strcmp(dai_link->codecs->dai_name, "snd-soc-dummy-dai"))
+				dai_link->init = mt8188_hdmi_codec_init;
+		}
+	}
+
+	snd_soc_card_set_drvdata(card, priv);
+
+	ret = devm_snd_soc_register_card(&pdev->dev, card);
+	if (ret)
+		dev_err_probe(&pdev->dev, ret, "%s snd_soc_register_card fail\n",
+			      __func__);
+err:
+	of_node_put(platform_node);
+	clean_card_reference(card);
+	return ret;
+}
+
+static struct mt8188_card_data mt8188_evb_card = {
+	.name = "mt8188_mt6359",
+};
+
+static const struct of_device_id mt8188_mt6359_dt_match[] = {
+	{
+		.compatible = "mediatek,mt8188-mt6359-evb",
+		.data = &mt8188_evb_card,
+	},
+	{},
+};
+MODULE_DEVICE_TABLE(of, mt8188_mt6359_dt_match);
+
+static struct platform_driver mt8188_mt6359_driver = {
+	.driver = {
+		.name = "mt8188_mt6359",
+		.of_match_table = mt8188_mt6359_dt_match,
+		.pm = &snd_soc_pm_ops,
+	},
+	.probe = mt8188_mt6359_dev_probe,
+};
+
+module_platform_driver(mt8188_mt6359_driver);
+
+/* Module information */
+MODULE_DESCRIPTION("MT8188-MT6359 ALSA SoC machine driver");
+MODULE_AUTHOR("Trevor Wu <trevor.wu at mediatek.com>");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("mt8188 mt6359 soc card");
-- 
2.18.0



From trevor.wu at mediatek.com  Thu Dec 29 21:54:40 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:40 +0800
Subject: [PATCH v4 10/13] dt-bindings: mediatek: mt8188: add audio afe document
In-Reply-To: <20221230055443.16024-1-trevor.wu@mediatek.com>
References: <20221230055443.16024-1-trevor.wu@mediatek.com>
Message-ID: <20221230055443.16024-11-trevor.wu@mediatek.com>

Add mt8188 audio afe document.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 .../bindings/sound/mediatek,mt8188-afe.yaml   | 208 ++++++++++++++++++
 1 file changed, 208 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/mediatek,mt8188-afe.yaml

diff --git a/Documentation/devicetree/bindings/sound/mediatek,mt8188-afe.yaml b/Documentation/devicetree/bindings/sound/mediatek,mt8188-afe.yaml
new file mode 100644
index 000000000000..7402bf7750ac
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/mediatek,mt8188-afe.yaml
@@ -0,0 +1,208 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/sound/mediatek,mt8188-afe.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek AFE PCM controller for mt8188
+
+maintainers:
+  - Trevor Wu <trevor.wu at mediatek.com>
+
+properties:
+  compatible:
+    const: mediatek,mt8188-afe
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  resets:
+    maxItems: 1
+
+  reset-names:
+    const: audiosys
+
+  mediatek,topckgen:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description: The phandle of the mediatek topckgen controller
+
+  power-domains:
+    maxItems: 1
+
+  clocks:
+    items:
+      - description: 26M clock
+      - description: audio pll1 clock
+      - description: audio pll2 clock
+      - description: clock divider for i2si1_mck
+      - description: clock divider for i2si2_mck
+      - description: clock divider for i2so1_mck
+      - description: clock divider for i2so2_mck
+      - description: clock divider for dptx_mck
+      - description: a1sys hoping clock
+      - description: audio intbus clock
+      - description: audio hires clock
+      - description: audio local bus clock
+      - description: mux for dptx_mck
+      - description: mux for i2so1_mck
+      - description: mux for i2so2_mck
+      - description: mux for i2si1_mck
+      - description: mux for i2si2_mck
+      - description: audio 26m clock
+
+  clock-names:
+    items:
+      - const: clk26m
+      - const: apll1
+      - const: apll2
+      - const: apll12_div0
+      - const: apll12_div1
+      - const: apll12_div2
+      - const: apll12_div3
+      - const: apll12_div9
+      - const: a1sys_hp_sel
+      - const: aud_intbus_sel
+      - const: audio_h_sel
+      - const: audio_local_bus_sel
+      - const: dptx_m_sel
+      - const: i2so1_m_sel
+      - const: i2so2_m_sel
+      - const: i2si1_m_sel
+      - const: i2si2_m_sel
+      - const: adsp_audio_26m
+
+  mediatek,etdm-in1-cowork-source:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      etdm modules can share the same external clock pin. Specify
+      which etdm clock source is required by this etdm in module.
+    enum:
+      - 1 # etdm2_in
+      - 2 # etdm1_out
+      - 3 # etdm2_out
+
+  mediatek,etdm-in2-cowork-source:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      etdm modules can share the same external clock pin. Specify
+      which etdm clock source is required by this etdm in module.
+    enum:
+      - 0 # etdm1_in
+      - 2 # etdm1_out
+      - 3 # etdm2_out
+
+  mediatek,etdm-out1-cowork-source:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: |
+      etdm modules can share the same external clock pin. Specify
+      which etdm clock source is required by this etdm out module.
+    enum:
+      - 0 # etdm1_in
+      - 1 # etdm2_in
+      - 3 # etdm2_out
+
+  mediatek,etdm-out2-cowork-source:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: |
+      etdm modules can share the same external clock pin. Specify
+      which etdm clock source is required by this etdm out module.
+    enum:
+      - 0 # etdm1_in
+      - 1 # etdm2_in
+      - 2 # etdm1_out
+
+patternProperties:
+  "^mediatek,etdm-in[1-2]-chn-disabled$":
+    $ref: /schemas/types.yaml#/definitions/uint8-array
+    minItems: 1
+    maxItems: 16
+    description:
+      This is a list of channel IDs which should be disabled.
+      By default, all data received from ETDM pins will be outputed to
+      memory. etdm in supports disable_out in direct mode(w/o interconn),
+      so user can disable the specified channels by the property.
+    uniqueItems: true
+    items:
+      minimum: 0
+      maximum: 15
+
+  "^mediatek,etdm-in[1-2]-multi-pin-mode$":
+    type: boolean
+    description: if present, the etdm data mode is I2S.
+
+  "^mediatek,etdm-out[1-3]-multi-pin-mode$":
+    type: boolean
+    description: if present, the etdm data mode is I2S.
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - resets
+  - reset-names
+  - mediatek,topckgen
+  - power-domains
+  - clocks
+  - clock-names
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    afe at 10b10000 {
+        compatible = "mediatek,mt8188-afe";
+        reg = <0x10b10000 0x10000>;
+        interrupts = <GIC_SPI 822 IRQ_TYPE_LEVEL_HIGH 0>;
+        resets = <&watchdog 14>;
+        reset-names = "audiosys";
+        mediatek,topckgen = <&topckgen>;
+        power-domains = <&spm 13>; //MT8188_POWER_DOMAIN_AUDIO
+        mediatek,etdm-in2-cowork-source = <2>;
+        mediatek,etdm-out2-cowork-source = <0>;
+        mediatek,etdm-in1-multi-pin-mode;
+        mediatek,etdm-in1-chn-disabled = /bits/ 8 <0x0 0x2>;
+        clocks = <&clk26m>,
+                 <&apmixedsys 9>, //CLK_APMIXED_APLL1
+                 <&apmixedsys 10>, //CLK_APMIXED_APLL2
+                 <&topckgen 186>, //CLK_TOP_APLL12_CK_DIV0
+                 <&topckgen 187>, //CLK_TOP_APLL12_CK_DIV1
+                 <&topckgen 188>, //CLK_TOP_APLL12_CK_DIV2
+                 <&topckgen 189>, //CLK_TOP_APLL12_CK_DIV3
+                 <&topckgen 191>, //CLK_TOP_APLL12_CK_DIV9
+                 <&topckgen 83>, //CLK_TOP_A1SYS_HP
+                 <&topckgen 31>, //CLK_TOP_AUD_INTBUS
+                 <&topckgen 32>, //CLK_TOP_AUDIO_H
+                 <&topckgen 69>, //CLK_TOP_AUDIO_LOCAL_BUS
+                 <&topckgen 81>, //CLK_TOP_DPTX
+                 <&topckgen 77>, //CLK_TOP_I2SO1
+                 <&topckgen 78>, //CLK_TOP_I2SO2
+                 <&topckgen 79>, //CLK_TOP_I2SI1
+                 <&topckgen 80>, //CLK_TOP_I2SI2
+                 <&adsp_audio26m 0>; //CLK_AUDIODSP_AUDIO26M
+        clock-names = "clk26m",
+                      "apll1",
+                      "apll2",
+                      "apll12_div0",
+                      "apll12_div1",
+                      "apll12_div2",
+                      "apll12_div3",
+                      "apll12_div9",
+                      "a1sys_hp_sel",
+                      "aud_intbus_sel",
+                      "audio_h_sel",
+                      "audio_local_bus_sel",
+                      "dptx_m_sel",
+                      "i2so1_m_sel",
+                      "i2so2_m_sel",
+                      "i2si1_m_sel",
+                      "i2si2_m_sel",
+                      "adsp_audio_26m";
+    };
+
+...
-- 
2.18.0



From trevor.wu at mediatek.com  Thu Dec 29 21:54:33 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:33 +0800
Subject: [PATCH v4 03/13] ASoC: mediatek: mt8188: support audsys clock
In-Reply-To: <20221230055443.16024-1-trevor.wu@mediatek.com>
References: <20221230055443.16024-1-trevor.wu@mediatek.com>
Message-ID: <20221230055443.16024-4-trevor.wu@mediatek.com>

Add mt8188 audio cg clock control. Audio clock gates are registered to CCF
for reference count and clock parent management.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 sound/soc/mediatek/mt8188/mt8188-audsys-clk.c | 205 ++++++++++++++++++
 sound/soc/mediatek/mt8188/mt8188-audsys-clk.h |  15 ++
 .../soc/mediatek/mt8188/mt8188-audsys-clkid.h |  83 +++++++
 3 files changed, 303 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clk.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clkid.h

diff --git a/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
new file mode 100644
index 000000000000..be1c53bf4729
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
@@ -0,0 +1,205 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * mt8188-audsys-clk.c  --  MediaTek 8188 audsys clock control
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/clkdev.h>
+#include "mt8188-afe-common.h"
+#include "mt8188-audsys-clk.h"
+#include "mt8188-audsys-clkid.h"
+#include "mt8188-reg.h"
+
+struct afe_gate {
+	int id;
+	const char *name;
+	const char *parent_name;
+	int reg;
+	u8 bit;
+	const struct clk_ops *ops;
+	unsigned long flags;
+	u8 cg_flags;
+};
+
+#define GATE_AFE_FLAGS(_id, _name, _parent, _reg, _bit, _flags, _cgflags) {\
+		.id = _id,					\
+		.name = _name,					\
+		.parent_name = _parent,				\
+		.reg = _reg,					\
+		.bit = _bit,					\
+		.flags = _flags,				\
+		.cg_flags = _cgflags,				\
+	}
+
+#define GATE_AFE(_id, _name, _parent, _reg, _bit)		\
+	GATE_AFE_FLAGS(_id, _name, _parent, _reg, _bit,		\
+		       CLK_SET_RATE_PARENT, CLK_GATE_SET_TO_DISABLE)
+
+#define GATE_AUD0(_id, _name, _parent, _bit)			\
+	GATE_AFE(_id, _name, _parent, AUDIO_TOP_CON0, _bit)
+
+#define GATE_AUD1(_id, _name, _parent, _bit)			\
+	GATE_AFE(_id, _name, _parent, AUDIO_TOP_CON1, _bit)
+
+#define GATE_AUD3(_id, _name, _parent, _bit)			\
+	GATE_AFE(_id, _name, _parent, AUDIO_TOP_CON3, _bit)
+
+#define GATE_AUD4(_id, _name, _parent, _bit)			\
+	GATE_AFE(_id, _name, _parent, AUDIO_TOP_CON4, _bit)
+
+#define GATE_AUD5(_id, _name, _parent, _bit)			\
+	GATE_AFE(_id, _name, _parent, AUDIO_TOP_CON5, _bit)
+
+#define GATE_AUD6(_id, _name, _parent, _bit)			\
+	GATE_AFE(_id, _name, _parent, AUDIO_TOP_CON6, _bit)
+
+static const struct afe_gate aud_clks[CLK_AUD_NR_CLK] = {
+	/* AUD0 */
+	GATE_AUD0(CLK_AUD_AFE, "aud_afe", "top_a1sys_hp", 2),
+	GATE_AUD0(CLK_AUD_LRCK_CNT, "aud_lrck_cnt", "top_a1sys_hp", 4),
+	GATE_AUD0(CLK_AUD_SPDIFIN_TUNER_APLL, "aud_spdifin_tuner_apll", "top_apll4", 10),
+	GATE_AUD0(CLK_AUD_SPDIFIN_TUNER_DBG, "aud_spdifin_tuner_dbg", "top_apll4", 11),
+	GATE_AUD0(CLK_AUD_UL_TML, "aud_ul_tml", "top_a1sys_hp", 18),
+	GATE_AUD0(CLK_AUD_APLL1_TUNER, "aud_apll1_tuner", "top_apll1", 19),
+	GATE_AUD0(CLK_AUD_APLL2_TUNER, "aud_apll2_tuner", "top_apll2", 20),
+	GATE_AUD0(CLK_AUD_TOP0_SPDF, "aud_top0_spdf", "top_aud_iec_clk", 21),
+	GATE_AUD0(CLK_AUD_APLL, "aud_apll", "top_apll1", 23),
+	GATE_AUD0(CLK_AUD_APLL2, "aud_apll2", "top_apll2", 24),
+	GATE_AUD0(CLK_AUD_DAC, "aud_dac", "top_a1sys_hp", 25),
+	GATE_AUD0(CLK_AUD_DAC_PREDIS, "aud_dac_predis", "top_a1sys_hp", 26),
+	GATE_AUD0(CLK_AUD_TML, "aud_tml", "top_a1sys_hp", 27),
+	GATE_AUD0(CLK_AUD_ADC, "aud_adc", "top_a1sys_hp", 28),
+	GATE_AUD0(CLK_AUD_DAC_HIRES, "aud_dac_hires", "top_audio_h", 31),
+
+	/* AUD1 */
+	GATE_AUD1(CLK_AUD_A1SYS_HP, "aud_a1sys_hp", "top_a1sys_hp", 2),
+	GATE_AUD1(CLK_AUD_AFE_DMIC1, "aud_afe_dmic1", "top_a1sys_hp", 10),
+	GATE_AUD1(CLK_AUD_AFE_DMIC2, "aud_afe_dmic2", "top_a1sys_hp", 11),
+	GATE_AUD1(CLK_AUD_AFE_DMIC3, "aud_afe_dmic3", "top_a1sys_hp", 12),
+	GATE_AUD1(CLK_AUD_AFE_DMIC4, "aud_afe_dmic4", "top_a1sys_hp", 13),
+	GATE_AUD1(CLK_AUD_AFE_26M_DMIC_TM, "aud_afe_26m_dmic_tm", "top_a1sys_hp", 14),
+	GATE_AUD1(CLK_AUD_UL_TML_HIRES, "aud_ul_tml_hires", "top_audio_h", 16),
+	GATE_AUD1(CLK_AUD_ADC_HIRES, "aud_adc_hires", "top_audio_h", 17),
+
+	/* AUD3 */
+	GATE_AUD3(CLK_AUD_LINEIN_TUNER, "aud_linein_tuner", "top_apll5", 5),
+	GATE_AUD3(CLK_AUD_EARC_TUNER, "aud_earc_tuner", "top_apll3", 7),
+
+	/* AUD4 */
+	GATE_AUD4(CLK_AUD_I2SIN, "aud_i2sin", "top_a1sys_hp", 0),
+	GATE_AUD4(CLK_AUD_TDM_IN, "aud_tdm_in", "top_a1sys_hp", 1),
+	GATE_AUD4(CLK_AUD_I2S_OUT, "aud_i2s_out", "top_a1sys_hp", 6),
+	GATE_AUD4(CLK_AUD_TDM_OUT, "aud_tdm_out", "top_a1sys_hp", 7),
+	GATE_AUD4(CLK_AUD_HDMI_OUT, "aud_hdmi_out", "top_a1sys_hp", 8),
+	GATE_AUD4(CLK_AUD_ASRC11, "aud_asrc11", "top_a1sys_hp", 16),
+	GATE_AUD4(CLK_AUD_ASRC12, "aud_asrc12", "top_a1sys_hp", 17),
+	GATE_AUD4(CLK_AUD_MULTI_IN, "aud_multi_in", "mphone_slave_b", 19),
+	GATE_AUD4(CLK_AUD_INTDIR, "aud_intdir", "top_intdir", 20),
+	GATE_AUD4(CLK_AUD_A1SYS, "aud_a1sys", "top_a1sys_hp", 21),
+	GATE_AUD4(CLK_AUD_A2SYS, "aud_a2sys", "top_a2sys", 22),
+	GATE_AUD4(CLK_AUD_PCMIF, "aud_pcmif", "top_a1sys_hp", 24),
+	GATE_AUD4(CLK_AUD_A3SYS, "aud_a3sys", "top_a3sys", 30),
+	GATE_AUD4(CLK_AUD_A4SYS, "aud_a4sys", "top_a4sys", 31),
+
+	/* AUD5 */
+	GATE_AUD5(CLK_AUD_MEMIF_UL1, "aud_memif_ul1", "top_a1sys_hp", 0),
+	GATE_AUD5(CLK_AUD_MEMIF_UL2, "aud_memif_ul2", "top_a1sys_hp", 1),
+	GATE_AUD5(CLK_AUD_MEMIF_UL3, "aud_memif_ul3", "top_a1sys_hp", 2),
+	GATE_AUD5(CLK_AUD_MEMIF_UL4, "aud_memif_ul4", "top_a1sys_hp", 3),
+	GATE_AUD5(CLK_AUD_MEMIF_UL5, "aud_memif_ul5", "top_a1sys_hp", 4),
+	GATE_AUD5(CLK_AUD_MEMIF_UL6, "aud_memif_ul6", "top_a1sys_hp", 5),
+	GATE_AUD5(CLK_AUD_MEMIF_UL8, "aud_memif_ul8", "top_a1sys_hp", 7),
+	GATE_AUD5(CLK_AUD_MEMIF_UL9, "aud_memif_ul9", "top_a1sys_hp", 8),
+	GATE_AUD5(CLK_AUD_MEMIF_UL10, "aud_memif_ul10", "top_a1sys_hp", 9),
+	GATE_AUD5(CLK_AUD_MEMIF_DL2, "aud_memif_dl2", "top_a1sys_hp", 18),
+	GATE_AUD5(CLK_AUD_MEMIF_DL3, "aud_memif_dl3", "top_a1sys_hp", 19),
+	GATE_AUD5(CLK_AUD_MEMIF_DL6, "aud_memif_dl6", "top_a1sys_hp", 22),
+	GATE_AUD5(CLK_AUD_MEMIF_DL7, "aud_memif_dl7", "top_a1sys_hp", 23),
+	GATE_AUD5(CLK_AUD_MEMIF_DL8, "aud_memif_dl8", "top_a1sys_hp", 24),
+	GATE_AUD5(CLK_AUD_MEMIF_DL10, "aud_memif_dl10", "top_a1sys_hp", 26),
+	GATE_AUD5(CLK_AUD_MEMIF_DL11, "aud_memif_dl11", "top_a1sys_hp", 27),
+
+	/* AUD6 */
+	GATE_AUD6(CLK_AUD_GASRC0, "aud_gasrc0", "top_asm_h", 0),
+	GATE_AUD6(CLK_AUD_GASRC1, "aud_gasrc1", "top_asm_h", 1),
+	GATE_AUD6(CLK_AUD_GASRC2, "aud_gasrc2", "top_asm_h", 2),
+	GATE_AUD6(CLK_AUD_GASRC3, "aud_gasrc3", "top_asm_h", 3),
+	GATE_AUD6(CLK_AUD_GASRC4, "aud_gasrc4", "top_asm_h", 4),
+	GATE_AUD6(CLK_AUD_GASRC5, "aud_gasrc5", "top_asm_h", 5),
+	GATE_AUD6(CLK_AUD_GASRC6, "aud_gasrc6", "top_asm_h", 6),
+	GATE_AUD6(CLK_AUD_GASRC7, "aud_gasrc7", "top_asm_h", 7),
+	GATE_AUD6(CLK_AUD_GASRC8, "aud_gasrc8", "top_asm_h", 8),
+	GATE_AUD6(CLK_AUD_GASRC9, "aud_gasrc9", "top_asm_h", 9),
+	GATE_AUD6(CLK_AUD_GASRC10, "aud_gasrc10", "top_asm_h", 10),
+	GATE_AUD6(CLK_AUD_GASRC11, "aud_gasrc11", "top_asm_h", 11),
+};
+
+int mt8188_audsys_clk_register(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct clk *clk;
+	struct clk_lookup *cl;
+	int i;
+
+	afe_priv->lookup = devm_kcalloc(afe->dev, CLK_AUD_NR_CLK,
+					sizeof(*afe_priv->lookup),
+					GFP_KERNEL);
+
+	if (!afe_priv->lookup)
+		return -ENOMEM;
+
+	for (i = 0; i < ARRAY_SIZE(aud_clks); i++) {
+		const struct afe_gate *gate = &aud_clks[i];
+
+		clk = clk_register_gate(afe->dev, gate->name, gate->parent_name,
+					gate->flags, afe->base_addr + gate->reg,
+					gate->bit, gate->cg_flags, NULL);
+
+		if (IS_ERR(clk)) {
+			dev_err(afe->dev, "Failed to register clk %s: %ld\n",
+				gate->name, PTR_ERR(clk));
+			continue;
+		}
+
+		/* add clk_lookup for devm_clk_get(SND_SOC_DAPM_CLOCK_SUPPLY) */
+		cl = kzalloc(sizeof(*cl), GFP_KERNEL);
+		if (!cl)
+			return -ENOMEM;
+
+		cl->clk = clk;
+		cl->con_id = gate->name;
+		cl->dev_id = dev_name(afe->dev);
+		cl->clk_hw = NULL;
+		clkdev_add(cl);
+
+		afe_priv->lookup[i] = cl;
+	}
+
+	return 0;
+}
+
+void mt8188_audsys_clk_unregister(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct clk *clk;
+	struct clk_lookup *cl;
+	int i;
+
+	if (!afe_priv)
+		return;
+
+	for (i = 0; i < CLK_AUD_NR_CLK; i++) {
+		cl = afe_priv->lookup[i];
+		if (!cl)
+			continue;
+
+		clk = cl->clk;
+		clk_unregister_gate(clk);
+
+		clkdev_drop(cl);
+	}
+}
diff --git a/sound/soc/mediatek/mt8188/mt8188-audsys-clk.h b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.h
new file mode 100644
index 000000000000..6c5f463ad7e4
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.h
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * mt8188-audsys-clk.h  --  MediaTek 8188 audsys clock definition
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#ifndef _MT8188_AUDSYS_CLK_H_
+#define _MT8188_AUDSYS_CLK_H_
+
+int mt8188_audsys_clk_register(struct mtk_base_afe *afe);
+void mt8188_audsys_clk_unregister(struct mtk_base_afe *afe);
+
+#endif
diff --git a/sound/soc/mediatek/mt8188/mt8188-audsys-clkid.h b/sound/soc/mediatek/mt8188/mt8188-audsys-clkid.h
new file mode 100644
index 000000000000..6f34ffc760e0
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-audsys-clkid.h
@@ -0,0 +1,83 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * mt8188-audsys-clkid.h  --  MediaTek 8188 audsys clock id definition
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#ifndef _MT8188_AUDSYS_CLKID_H_
+#define _MT8188_AUDSYS_CLKID_H_
+
+enum{
+	CLK_AUD_AFE,
+	CLK_AUD_LRCK_CNT,
+	CLK_AUD_SPDIFIN_TUNER_APLL,
+	CLK_AUD_SPDIFIN_TUNER_DBG,
+	CLK_AUD_UL_TML,
+	CLK_AUD_APLL1_TUNER,
+	CLK_AUD_APLL2_TUNER,
+	CLK_AUD_TOP0_SPDF,
+	CLK_AUD_APLL,
+	CLK_AUD_APLL2,
+	CLK_AUD_DAC,
+	CLK_AUD_DAC_PREDIS,
+	CLK_AUD_TML,
+	CLK_AUD_ADC,
+	CLK_AUD_DAC_HIRES,
+	CLK_AUD_A1SYS_HP,
+	CLK_AUD_AFE_DMIC1,
+	CLK_AUD_AFE_DMIC2,
+	CLK_AUD_AFE_DMIC3,
+	CLK_AUD_AFE_DMIC4,
+	CLK_AUD_AFE_26M_DMIC_TM,
+	CLK_AUD_UL_TML_HIRES,
+	CLK_AUD_ADC_HIRES,
+	CLK_AUD_LINEIN_TUNER,
+	CLK_AUD_EARC_TUNER,
+	CLK_AUD_I2SIN,
+	CLK_AUD_TDM_IN,
+	CLK_AUD_I2S_OUT,
+	CLK_AUD_TDM_OUT,
+	CLK_AUD_HDMI_OUT,
+	CLK_AUD_ASRC11,
+	CLK_AUD_ASRC12,
+	CLK_AUD_MULTI_IN,
+	CLK_AUD_INTDIR,
+	CLK_AUD_A1SYS,
+	CLK_AUD_A2SYS,
+	CLK_AUD_PCMIF,
+	CLK_AUD_A3SYS,
+	CLK_AUD_A4SYS,
+	CLK_AUD_MEMIF_UL1,
+	CLK_AUD_MEMIF_UL2,
+	CLK_AUD_MEMIF_UL3,
+	CLK_AUD_MEMIF_UL4,
+	CLK_AUD_MEMIF_UL5,
+	CLK_AUD_MEMIF_UL6,
+	CLK_AUD_MEMIF_UL8,
+	CLK_AUD_MEMIF_UL9,
+	CLK_AUD_MEMIF_UL10,
+	CLK_AUD_MEMIF_DL2,
+	CLK_AUD_MEMIF_DL3,
+	CLK_AUD_MEMIF_DL6,
+	CLK_AUD_MEMIF_DL7,
+	CLK_AUD_MEMIF_DL8,
+	CLK_AUD_MEMIF_DL10,
+	CLK_AUD_MEMIF_DL11,
+	CLK_AUD_GASRC0,
+	CLK_AUD_GASRC1,
+	CLK_AUD_GASRC2,
+	CLK_AUD_GASRC3,
+	CLK_AUD_GASRC4,
+	CLK_AUD_GASRC5,
+	CLK_AUD_GASRC6,
+	CLK_AUD_GASRC7,
+	CLK_AUD_GASRC8,
+	CLK_AUD_GASRC9,
+	CLK_AUD_GASRC10,
+	CLK_AUD_GASRC11,
+	CLK_AUD_NR_CLK,
+};
+
+#endif
-- 
2.18.0



From trevor.wu at mediatek.com  Thu Dec 29 21:54:38 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:38 +0800
Subject: [PATCH v4 08/13] ASoC: mediatek: mt8188: add platform driver
In-Reply-To: <20221230055443.16024-1-trevor.wu@mediatek.com>
References: <20221230055443.16024-1-trevor.wu@mediatek.com>
Message-ID: <20221230055443.16024-9-trevor.wu@mediatek.com>

Add mt8188 platform driver.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
Reported-by: kernel test robot <lkp at intel.com>
---
 sound/soc/mediatek/Kconfig                 |   12 +
 sound/soc/mediatek/Makefile                |    1 +
 sound/soc/mediatek/mt8188/Makefile         |   12 +
 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c | 2853 ++++++++++++++++++++
 4 files changed, 2878 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/Makefile
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c

diff --git a/sound/soc/mediatek/Kconfig b/sound/soc/mediatek/Kconfig
index 363fa4d47680..799894e6dc3e 100644
--- a/sound/soc/mediatek/Kconfig
+++ b/sound/soc/mediatek/Kconfig
@@ -206,6 +206,18 @@ config SND_SOC_MTK_BTCVSD
 	  Select Y if you have such device.
 	  If unsure select "N".
 
+config SND_SOC_MT8188
+	tristate "ASoC support for MediaTek MT8188 chip"
+	depends on ARCH_MEDIATEK || COMPILE_TEST
+	depends on COMMON_CLK
+	select SND_SOC_MEDIATEK
+	select MFD_SYSCON if SND_SOC_MT6359
+	help
+	  This adds ASoC platform driver support for MediaTek MT8188 chip
+	  that can be used with other codecs.
+	  Select Y if you have such device.
+	  If unsure select "N".
+
 config SND_SOC_MT8192
 	tristate "ASoC support for Mediatek MT8192 chip"
 	depends on ARCH_MEDIATEK
diff --git a/sound/soc/mediatek/Makefile b/sound/soc/mediatek/Makefile
index 5571c640a288..3de38cfc69e5 100644
--- a/sound/soc/mediatek/Makefile
+++ b/sound/soc/mediatek/Makefile
@@ -5,5 +5,6 @@ obj-$(CONFIG_SND_SOC_MT6797) += mt6797/
 obj-$(CONFIG_SND_SOC_MT8173) += mt8173/
 obj-$(CONFIG_SND_SOC_MT8183) += mt8183/
 obj-$(CONFIG_SND_SOC_MT8186) += mt8186/
+obj-$(CONFIG_SND_SOC_MT8188) += mt8188/
 obj-$(CONFIG_SND_SOC_MT8192) += mt8192/
 obj-$(CONFIG_SND_SOC_MT8195) += mt8195/
diff --git a/sound/soc/mediatek/mt8188/Makefile b/sound/soc/mediatek/mt8188/Makefile
new file mode 100644
index 000000000000..fa5d383c5e47
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/Makefile
@@ -0,0 +1,12 @@
+# SPDX-License-Identifier: GPL-2.0
+
+# platform driver
+snd-soc-mt8188-afe-objs := \
+	mt8188-afe-clk.o \
+	mt8188-afe-pcm.o \
+	mt8188-audsys-clk.o \
+	mt8188-dai-adda.o \
+	mt8188-dai-etdm.o \
+	mt8188-dai-pcm.o
+
+obj-$(CONFIG_SND_SOC_MT8188) += snd-soc-mt8188-afe.o
diff --git a/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c b/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
new file mode 100644
index 000000000000..6bef980846fa
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
@@ -0,0 +1,2853 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MediaTek ALSA SoC AFE platform driver for 8188
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#include <linux/arm-smccc.h>
+#include <linux/delay.h>
+#include <linux/dma-mapping.h>
+#include <linux/module.h>
+#include <linux/mfd/syscon.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_platform.h>
+#include <linux/pm_runtime.h>
+#include <linux/reset.h>
+#include <sound/pcm_params.h>
+#include "mt8188-afe-common.h"
+#include "mt8188-afe-clk.h"
+#include "mt8188-reg.h"
+#include "../common/mtk-afe-platform-driver.h"
+#include "../common/mtk-afe-fe-dai.h"
+
+#define MT8188_MEMIF_BUFFER_BYTES_ALIGN  (0x40)
+#define MT8188_MEMIF_DL7_MAX_PERIOD_SIZE (0x3fff)
+
+#define MEMIF_AXI_MINLEN 9 /* register default value */
+
+struct mtk_dai_memif_priv {
+	unsigned int asys_timing_sel;
+	unsigned int fs_timing;
+};
+
+static const struct snd_pcm_hardware mt8188_afe_hardware = {
+	.info = SNDRV_PCM_INFO_MMAP |
+		SNDRV_PCM_INFO_INTERLEAVED |
+		SNDRV_PCM_INFO_MMAP_VALID,
+	.formats = SNDRV_PCM_FMTBIT_S16_LE |
+		   SNDRV_PCM_FMTBIT_S24_LE |
+		   SNDRV_PCM_FMTBIT_S32_LE,
+	.period_bytes_min = 64,
+	.period_bytes_max = 256 * 1024,
+	.periods_min = 2,
+	.periods_max = 256,
+	.buffer_bytes_max = 256 * 2 * 1024,
+};
+
+struct mt8188_afe_rate {
+	unsigned int rate;
+	unsigned int reg_value;
+};
+
+static const struct mt8188_afe_rate mt8188_afe_rates[] = {
+	{ .rate = 8000, .reg_value = 0, },
+	{ .rate = 12000, .reg_value = 1, },
+	{ .rate = 16000, .reg_value = 2, },
+	{ .rate = 24000, .reg_value = 3, },
+	{ .rate = 32000, .reg_value = 4, },
+	{ .rate = 48000, .reg_value = 5, },
+	{ .rate = 96000, .reg_value = 6, },
+	{ .rate = 192000, .reg_value = 7, },
+	{ .rate = 384000, .reg_value = 8, },
+	{ .rate = 7350, .reg_value = 16, },
+	{ .rate = 11025, .reg_value = 17, },
+	{ .rate = 14700, .reg_value = 18, },
+	{ .rate = 22050, .reg_value = 19, },
+	{ .rate = 29400, .reg_value = 20, },
+	{ .rate = 44100, .reg_value = 21, },
+	{ .rate = 88200, .reg_value = 22, },
+	{ .rate = 176400, .reg_value = 23, },
+	{ .rate = 352800, .reg_value = 24, },
+};
+
+int mt8188_afe_fs_timing(unsigned int rate)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(mt8188_afe_rates); i++)
+		if (mt8188_afe_rates[i].rate == rate)
+			return mt8188_afe_rates[i].reg_value;
+
+	return -EINVAL;
+}
+
+static int mt8188_memif_fs(struct snd_pcm_substream *substream,
+			   unsigned int rate)
+{
+	struct snd_soc_pcm_runtime *rtd = substream->private_data;
+	struct snd_soc_component *component = NULL;
+	struct mtk_base_afe *afe = NULL;
+	struct mt8188_afe_private *afe_priv = NULL;
+	struct mtk_base_afe_memif *memif = NULL;
+	struct mtk_dai_memif_priv *memif_priv = NULL;
+	int fs = mt8188_afe_fs_timing(rate);
+	int id = asoc_rtd_to_cpu(rtd, 0)->id;
+
+	if (id < 0)
+		return -EINVAL;
+
+	component = snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME);
+	if (!component)
+		return -EINVAL;
+
+	afe = snd_soc_component_get_drvdata(component);
+	memif = &afe->memif[id];
+
+	switch (memif->data->id) {
+	case MT8188_AFE_MEMIF_DL10:
+		fs = MT8188_ETDM_OUT3_1X_EN;
+		break;
+	case MT8188_AFE_MEMIF_UL8:
+		fs = MT8188_ETDM_IN1_NX_EN;
+		break;
+	case MT8188_AFE_MEMIF_UL3:
+		fs = MT8188_ETDM_IN2_NX_EN;
+		break;
+	default:
+		afe_priv = afe->platform_priv;
+		memif_priv = afe_priv->dai_priv[id];
+		if (memif_priv->fs_timing)
+			fs = memif_priv->fs_timing;
+		break;
+	}
+
+	return fs;
+}
+
+static int mt8188_irq_fs(struct snd_pcm_substream *substream,
+			 unsigned int rate)
+{
+	int fs = mt8188_memif_fs(substream, rate);
+
+	switch (fs) {
+	case MT8188_ETDM_IN1_NX_EN:
+		fs = MT8188_ETDM_IN1_1X_EN;
+		break;
+	case MT8188_ETDM_IN2_NX_EN:
+		fs = MT8188_ETDM_IN2_1X_EN;
+		break;
+	default:
+		break;
+	}
+
+	return fs;
+}
+
+enum {
+	MT8188_AFE_CM0,
+	MT8188_AFE_CM1,
+	MT8188_AFE_CM2,
+	MT8188_AFE_CM_NUM,
+};
+
+struct mt8188_afe_channel_merge {
+	int id;
+	int reg;
+	unsigned int sel_shift;
+	unsigned int sel_maskbit;
+	unsigned int sel_default;
+	unsigned int ch_num_shift;
+	unsigned int ch_num_maskbit;
+	unsigned int en_shift;
+	unsigned int en_maskbit;
+	unsigned int update_cnt_shift;
+	unsigned int update_cnt_maskbit;
+	unsigned int update_cnt_default;
+};
+
+static const struct mt8188_afe_channel_merge
+	mt8188_afe_cm[MT8188_AFE_CM_NUM] = {
+	[MT8188_AFE_CM0] = {
+		.id = MT8188_AFE_CM0,
+		.reg = AFE_CM0_CON,
+		.sel_shift = 30,
+		.sel_maskbit = 0x1,
+		.sel_default = 1,
+		.ch_num_shift = 2,
+		.ch_num_maskbit = 0x3f,
+		.en_shift = 0,
+		.en_maskbit = 0x1,
+		.update_cnt_shift = 16,
+		.update_cnt_maskbit = 0x1fff,
+		.update_cnt_default = 0x3,
+	},
+	[MT8188_AFE_CM1] = {
+		.id = MT8188_AFE_CM1,
+		.reg = AFE_CM1_CON,
+		.sel_shift = 30,
+		.sel_maskbit = 0x1,
+		.sel_default = 1,
+		.ch_num_shift = 2,
+		.ch_num_maskbit = 0x1f,
+		.en_shift = 0,
+		.en_maskbit = 0x1,
+		.update_cnt_shift = 16,
+		.update_cnt_maskbit = 0x1fff,
+		.update_cnt_default = 0x3,
+	},
+	[MT8188_AFE_CM2] = {
+		.id = MT8188_AFE_CM2,
+		.reg = AFE_CM2_CON,
+		.sel_shift = 30,
+		.sel_maskbit = 0x1,
+		.sel_default = 1,
+		.ch_num_shift = 2,
+		.ch_num_maskbit = 0x1f,
+		.en_shift = 0,
+		.en_maskbit = 0x1,
+		.update_cnt_shift = 16,
+		.update_cnt_maskbit = 0x1fff,
+		.update_cnt_default = 0x3,
+	},
+};
+
+static int mt8188_afe_memif_is_ul(int id)
+{
+	if (id >= MT8188_AFE_MEMIF_UL_START && id < MT8188_AFE_MEMIF_END)
+		return 1;
+	else
+		return 0;
+}
+
+static const struct mt8188_afe_channel_merge *
+	mt8188_afe_found_cm(struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	int id = -EINVAL;
+
+	if (mt8188_afe_memif_is_ul(dai->id) == 0)
+		return NULL;
+
+	switch (dai->id) {
+	case MT8188_AFE_MEMIF_UL9:
+		id = MT8188_AFE_CM0;
+		break;
+	case MT8188_AFE_MEMIF_UL2:
+		id = MT8188_AFE_CM1;
+		break;
+	case MT8188_AFE_MEMIF_UL10:
+		id = MT8188_AFE_CM2;
+		break;
+	default:
+		break;
+	}
+
+	if (id < 0) {
+		dev_dbg(afe->dev, "%s, memif %d cannot find CM!\n", __func__, dai->id);
+		return NULL;
+	}
+
+	return &mt8188_afe_cm[id];
+}
+
+static int mt8188_afe_config_cm(struct mtk_base_afe *afe,
+				const struct mt8188_afe_channel_merge *cm,
+				unsigned int channels)
+{
+	if (!cm)
+		return -EINVAL;
+
+	regmap_update_bits(afe->regmap,
+			   cm->reg,
+			   cm->sel_maskbit << cm->sel_shift,
+			   cm->sel_default << cm->sel_shift);
+
+	regmap_update_bits(afe->regmap,
+			   cm->reg,
+			   cm->ch_num_maskbit << cm->ch_num_shift,
+			   (channels - 1) << cm->ch_num_shift);
+
+	regmap_update_bits(afe->regmap,
+			   cm->reg,
+			   cm->update_cnt_maskbit << cm->update_cnt_shift,
+			   cm->update_cnt_default << cm->update_cnt_shift);
+
+	return 0;
+}
+
+static int mt8188_afe_enable_cm(struct mtk_base_afe *afe,
+				const struct mt8188_afe_channel_merge *cm,
+				bool enable)
+{
+	if (!cm)
+		return -EINVAL;
+
+	regmap_update_bits(afe->regmap,
+			   cm->reg,
+			   cm->en_maskbit << cm->en_shift,
+			   enable << cm->en_shift);
+
+	return 0;
+}
+
+static int mt8188_afe_fe_startup(struct snd_pcm_substream *substream,
+				 struct snd_soc_dai *dai)
+{
+	struct snd_soc_pcm_runtime *rtd = substream->private_data;
+	struct snd_pcm_runtime *runtime = substream->runtime;
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	int id = asoc_rtd_to_cpu(rtd, 0)->id;
+	int ret;
+
+	ret = mtk_afe_fe_startup(substream, dai);
+
+	snd_pcm_hw_constraint_step(runtime, 0,
+				   SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
+				   MT8188_MEMIF_BUFFER_BYTES_ALIGN);
+
+	if (id != MT8188_AFE_MEMIF_DL7)
+		goto out;
+
+	ret = snd_pcm_hw_constraint_minmax(runtime,
+					   SNDRV_PCM_HW_PARAM_PERIOD_SIZE, 1,
+					   MT8188_MEMIF_DL7_MAX_PERIOD_SIZE);
+	if (ret < 0)
+		dev_dbg(afe->dev, "hw_constraint_minmax failed\n");
+out:
+	return ret;
+}
+
+static void mt8188_afe_fe_shutdown(struct snd_pcm_substream *substream,
+				   struct snd_soc_dai *dai)
+{
+	mtk_afe_fe_shutdown(substream, dai);
+}
+
+static int mt8188_afe_fe_hw_params(struct snd_pcm_substream *substream,
+				   struct snd_pcm_hw_params *params,
+				   struct snd_soc_dai *dai)
+{
+	struct snd_soc_pcm_runtime *rtd = substream->private_data;
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	int id = asoc_rtd_to_cpu(rtd, 0)->id;
+	struct mtk_base_afe_memif *memif = &afe->memif[id];
+	const struct mtk_base_memif_data *data = memif->data;
+	const struct mt8188_afe_channel_merge *cm = mt8188_afe_found_cm(dai);
+	unsigned int channels = params_channels(params);
+
+	mt8188_afe_config_cm(afe, cm, channels);
+
+	if (data->ch_num_reg >= 0) {
+		regmap_update_bits(afe->regmap, data->ch_num_reg,
+				   data->ch_num_maskbit << data->ch_num_shift,
+				   channels << data->ch_num_shift);
+	}
+
+	return mtk_afe_fe_hw_params(substream, params, dai);
+}
+
+static int mt8188_afe_fe_trigger(struct snd_pcm_substream *substream, int cmd,
+				 struct snd_soc_dai *dai)
+{
+	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
+	const struct mt8188_afe_channel_merge *cm = mt8188_afe_found_cm(dai);
+	struct snd_soc_pcm_runtime *rtd = substream->private_data;
+	struct snd_pcm_runtime * const runtime = substream->runtime;
+	int id = asoc_rtd_to_cpu(rtd, 0)->id;
+	struct mtk_base_afe_memif *memif = &afe->memif[id];
+	struct mtk_base_afe_irq *irqs = &afe->irqs[memif->irq_usage];
+	const struct mtk_base_irq_data *irq_data = irqs->irq_data;
+	unsigned int counter = runtime->period_size;
+	int fs;
+	int ret;
+
+	switch (cmd) {
+	case SNDRV_PCM_TRIGGER_START:
+	case SNDRV_PCM_TRIGGER_RESUME:
+		mt8188_afe_enable_cm(afe, cm, true);
+
+		ret = mtk_memif_set_enable(afe, id);
+		if (ret) {
+			dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n",
+				__func__, id, ret);
+			return ret;
+		}
+
+		/* set irq counter */
+		regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg,
+				   irq_data->irq_cnt_maskbit << irq_data->irq_cnt_shift,
+				   counter << irq_data->irq_cnt_shift);
+
+		/* set irq fs */
+		fs = afe->irq_fs(substream, runtime->rate);
+
+		if (fs < 0)
+			return -EINVAL;
+
+		if (irq_data->irq_fs_reg >= 0)
+			regmap_update_bits(afe->regmap, irq_data->irq_fs_reg,
+					   irq_data->irq_fs_maskbit << irq_data->irq_fs_shift,
+					   fs << irq_data->irq_fs_shift);
+
+		/* delay for uplink */
+		if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
+			u32 sample_delay;
+
+			sample_delay = ((MEMIF_AXI_MINLEN + 1) * 64 +
+					(runtime->channels * runtime->sample_bits - 1)) /
+					(runtime->channels * runtime->sample_bits) + 1;
+
+			udelay(sample_delay * 1000000 / runtime->rate);
+		}
+
+		/* enable interrupt */
+		regmap_set_bits(afe->regmap, irq_data->irq_en_reg,
+				BIT(irq_data->irq_en_shift));
+		return 0;
+	case SNDRV_PCM_TRIGGER_STOP:
+	case SNDRV_PCM_TRIGGER_SUSPEND:
+		mt8188_afe_enable_cm(afe, cm, false);
+
+		ret = mtk_memif_set_disable(afe, id);
+		if (ret)
+			dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n",
+				__func__, id, ret);
+
+		/* disable interrupt */
+
+		regmap_clear_bits(afe->regmap, irq_data->irq_en_reg,
+				  BIT(irq_data->irq_en_shift));
+		/* and clear pending IRQ */
+		regmap_write(afe->regmap, irq_data->irq_clr_reg,
+			     BIT(irq_data->irq_clr_shift));
+		return ret;
+	default:
+		return -EINVAL;
+	}
+}
+
+static const struct snd_soc_dai_ops mt8188_afe_fe_dai_ops = {
+	.startup	= mt8188_afe_fe_startup,
+	.shutdown	= mt8188_afe_fe_shutdown,
+	.hw_params	= mt8188_afe_fe_hw_params,
+	.hw_free	= mtk_afe_fe_hw_free,
+	.prepare	= mtk_afe_fe_prepare,
+	.trigger	= mt8188_afe_fe_trigger,
+};
+
+#define MTK_PCM_RATES (SNDRV_PCM_RATE_8000_48000 |\
+		       SNDRV_PCM_RATE_88200 |\
+		       SNDRV_PCM_RATE_96000 |\
+		       SNDRV_PCM_RATE_176400 |\
+		       SNDRV_PCM_RATE_192000 |\
+		       SNDRV_PCM_RATE_352800 |\
+		       SNDRV_PCM_RATE_384000)
+
+#define MTK_PCM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
+			 SNDRV_PCM_FMTBIT_S24_LE |\
+			 SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_driver mt8188_memif_dai_driver[] = {
+	/* FE DAIs: memory intefaces to CPU */
+	{
+		.name = "DL2",
+		.id = MT8188_AFE_MEMIF_DL2,
+		.playback = {
+			.stream_name = "DL2",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "DL3",
+		.id = MT8188_AFE_MEMIF_DL3,
+		.playback = {
+			.stream_name = "DL3",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "DL6",
+		.id = MT8188_AFE_MEMIF_DL6,
+		.playback = {
+			.stream_name = "DL6",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "DL7",
+		.id = MT8188_AFE_MEMIF_DL7,
+		.playback = {
+			.stream_name = "DL7",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "DL8",
+		.id = MT8188_AFE_MEMIF_DL8,
+		.playback = {
+			.stream_name = "DL8",
+			.channels_min = 1,
+			.channels_max = 16,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "DL10",
+		.id = MT8188_AFE_MEMIF_DL10,
+		.playback = {
+			.stream_name = "DL10",
+			.channels_min = 1,
+			.channels_max = 8,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "DL11",
+		.id = MT8188_AFE_MEMIF_DL11,
+		.playback = {
+			.stream_name = "DL11",
+			.channels_min = 1,
+			.channels_max = 32,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL1",
+		.id = MT8188_AFE_MEMIF_UL1,
+		.capture = {
+			.stream_name = "UL1",
+			.channels_min = 1,
+			.channels_max = 8,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL2",
+		.id = MT8188_AFE_MEMIF_UL2,
+		.capture = {
+			.stream_name = "UL2",
+			.channels_min = 1,
+			.channels_max = 8,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL3",
+		.id = MT8188_AFE_MEMIF_UL3,
+		.capture = {
+			.stream_name = "UL3",
+			.channels_min = 1,
+			.channels_max = 16,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL4",
+		.id = MT8188_AFE_MEMIF_UL4,
+		.capture = {
+			.stream_name = "UL4",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL5",
+		.id = MT8188_AFE_MEMIF_UL5,
+		.capture = {
+			.stream_name = "UL5",
+			.channels_min = 1,
+			.channels_max = 2,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL6",
+		.id = MT8188_AFE_MEMIF_UL6,
+		.capture = {
+			.stream_name = "UL6",
+			.channels_min = 1,
+			.channels_max = 8,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL8",
+		.id = MT8188_AFE_MEMIF_UL8,
+		.capture = {
+			.stream_name = "UL8",
+			.channels_min = 1,
+			.channels_max = 24,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL9",
+		.id = MT8188_AFE_MEMIF_UL9,
+		.capture = {
+			.stream_name = "UL9",
+			.channels_min = 1,
+			.channels_max = 32,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+	{
+		.name = "UL10",
+		.id = MT8188_AFE_MEMIF_UL10,
+		.capture = {
+			.stream_name = "UL10",
+			.channels_min = 1,
+			.channels_max = 4,
+			.rates = MTK_PCM_RATES,
+			.formats = MTK_PCM_FORMATS,
+		},
+		.ops = &mt8188_afe_fe_dai_ops,
+	},
+};
+
+static const struct snd_kcontrol_new o002_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN2, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN2, 12, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN2, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN2, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN2_2, 6, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN2_2, 8, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN2_5, 8, 1, 0),
+};
+
+static const struct snd_kcontrol_new o003_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN3, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN3, 13, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN3, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN3, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN3_2, 7, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN3_2, 9, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN3_5, 9, 1, 0),
+};
+
+static const struct snd_kcontrol_new o004_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN4, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I014 Switch", AFE_CONN4, 14, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN4, 24, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I074 Switch", AFE_CONN4_2, 10, 1, 0),
+};
+
+static const struct snd_kcontrol_new o005_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN5, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I015 Switch", AFE_CONN5, 15, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN5, 25, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I075 Switch", AFE_CONN5_2, 11, 1, 0),
+};
+
+static const struct snd_kcontrol_new o006_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN6, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I016 Switch", AFE_CONN6, 16, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN6, 26, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I076 Switch", AFE_CONN6_2, 12, 1, 0),
+};
+
+static const struct snd_kcontrol_new o007_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN7, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I017 Switch", AFE_CONN7, 17, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN7, 27, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I077 Switch", AFE_CONN7_2, 13, 1, 0),
+};
+
+static const struct snd_kcontrol_new o008_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I018 Switch", AFE_CONN8, 18, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN8, 28, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I078 Switch", AFE_CONN8_2, 14, 1, 0),
+};
+
+static const struct snd_kcontrol_new o009_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I019 Switch", AFE_CONN9, 19, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN9, 29, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I079 Switch", AFE_CONN9_2, 15, 1, 0),
+};
+
+static const struct snd_kcontrol_new o010_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN10, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I030 Switch", AFE_CONN10, 30, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN10_1, 14, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN10_2, 8, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I080 Switch", AFE_CONN10_2, 16, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I188 Switch", AFE_CONN10_5, 28, 1, 0),
+};
+
+static const struct snd_kcontrol_new o011_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN11, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I031 Switch", AFE_CONN11, 31, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN11_1, 15, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN11_2, 9, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I081 Switch", AFE_CONN11_2, 17, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I189 Switch", AFE_CONN11_5, 29, 1, 0),
+};
+
+static const struct snd_kcontrol_new o012_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN12, 24, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I032 Switch", AFE_CONN12_1, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN12_1, 16, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I074 Switch", AFE_CONN12_2, 10, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I082 Switch", AFE_CONN12_2, 18, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I190 Switch", AFE_CONN12_5, 30, 1, 0),
+};
+
+static const struct snd_kcontrol_new o013_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN13, 25, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I033 Switch", AFE_CONN13_1, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN13_1, 17, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I075 Switch", AFE_CONN13_2, 11, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I083 Switch", AFE_CONN13_2, 19, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I191 Switch", AFE_CONN13_5, 31, 1, 0),
+};
+
+static const struct snd_kcontrol_new o014_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN14, 26, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I034 Switch", AFE_CONN14_1, 2, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN14_1, 18, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I076 Switch", AFE_CONN14_2, 12, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I084 Switch", AFE_CONN14_2, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I192 Switch", AFE_CONN14_6, 0, 1, 0),
+};
+
+static const struct snd_kcontrol_new o015_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN15, 27, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I035 Switch", AFE_CONN15_1, 3, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN15_1, 19, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I077 Switch", AFE_CONN15_2, 13, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I085 Switch", AFE_CONN15_2, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I193 Switch", AFE_CONN15_6, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new o016_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN16, 28, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I036 Switch", AFE_CONN16_1, 4, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN16_1, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I078 Switch", AFE_CONN16_2, 14, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I086 Switch", AFE_CONN16_2, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I194 Switch", AFE_CONN16_6, 2, 1, 0),
+};
+
+static const struct snd_kcontrol_new o017_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN17, 29, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I037 Switch", AFE_CONN17_1, 5, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN17_1, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I079 Switch", AFE_CONN17_2, 15, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I087 Switch", AFE_CONN17_2, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I195 Switch", AFE_CONN17_6, 3, 1, 0),
+};
+
+static const struct snd_kcontrol_new o018_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I080 Switch", AFE_CONN18_2, 16, 1, 0),
+};
+
+static const struct snd_kcontrol_new o019_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I081 Switch", AFE_CONN19_2, 17, 1, 0),
+};
+
+static const struct snd_kcontrol_new o020_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I082 Switch", AFE_CONN20_2, 18, 1, 0),
+};
+
+static const struct snd_kcontrol_new o021_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I083 Switch", AFE_CONN21_2, 19, 1, 0),
+};
+
+static const struct snd_kcontrol_new o022_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I084 Switch", AFE_CONN22_2, 20, 1, 0),
+};
+
+static const struct snd_kcontrol_new o023_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I085 Switch", AFE_CONN23_2, 21, 1, 0),
+};
+
+static const struct snd_kcontrol_new o024_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I086 Switch", AFE_CONN24_2, 22, 1, 0),
+};
+
+static const struct snd_kcontrol_new o025_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I087 Switch", AFE_CONN25_2, 23, 1, 0),
+};
+
+static const struct snd_kcontrol_new o026_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN26_1, 14, 1, 0),
+};
+
+static const struct snd_kcontrol_new o027_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN27_1, 15, 1, 0),
+};
+
+static const struct snd_kcontrol_new o028_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN28_1, 16, 1, 0),
+};
+
+static const struct snd_kcontrol_new o029_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN29_1, 17, 1, 0),
+};
+
+static const struct snd_kcontrol_new o030_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN30_1, 18, 1, 0),
+};
+
+static const struct snd_kcontrol_new o031_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN31_1, 19, 1, 0),
+};
+
+static const struct snd_kcontrol_new o032_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN32_1, 20, 1, 0),
+};
+
+static const struct snd_kcontrol_new o033_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN33_1, 21, 1, 0),
+};
+
+static const struct snd_kcontrol_new o034_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN34, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I002 Switch", AFE_CONN34, 2, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN34, 12, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN34, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN34_2, 6, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN34_2, 8, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN34_5, 8, 1, 0),
+};
+
+static const struct snd_kcontrol_new o035_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN35, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I003 Switch", AFE_CONN35, 3, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN35, 13, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN35, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN35_2, 7, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN35_2, 9, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN35_5, 8, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN35_5, 9, 1, 0),
+};
+
+static const struct snd_kcontrol_new o036_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN36, 0, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN36, 12, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN36, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN36_2, 6, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN36_5, 8, 1, 0),
+};
+
+static const struct snd_kcontrol_new o037_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN37, 1, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN37, 13, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN37, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN37_2, 7, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN37_5, 9, 1, 0),
+};
+
+static const struct snd_kcontrol_new o038_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN38, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN38_5, 8, 1, 0),
+};
+
+static const struct snd_kcontrol_new o039_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN39, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN39_5, 9, 1, 0),
+};
+
+static const struct snd_kcontrol_new o040_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I002 Switch", AFE_CONN40, 2, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN40, 12, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN40, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN40_5, 8, 1, 0),
+};
+
+static const struct snd_kcontrol_new o041_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I003 Switch", AFE_CONN41, 3, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN41, 13, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN41, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN41_5, 9, 1, 0),
+};
+
+static const struct snd_kcontrol_new o042_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I014 Switch", AFE_CONN42, 14, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN42, 24, 1, 0),
+};
+
+static const struct snd_kcontrol_new o043_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I015 Switch", AFE_CONN43, 15, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN43, 25, 1, 0),
+};
+
+static const struct snd_kcontrol_new o044_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I016 Switch", AFE_CONN44, 16, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN44, 26, 1, 0),
+};
+
+static const struct snd_kcontrol_new o045_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I017 Switch", AFE_CONN45, 17, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN45, 27, 1, 0),
+};
+
+static const struct snd_kcontrol_new o046_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I018 Switch", AFE_CONN46, 18, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN46, 28, 1, 0),
+};
+
+static const struct snd_kcontrol_new o047_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I019 Switch", AFE_CONN47, 19, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN47, 29, 1, 0),
+};
+
+static const struct snd_kcontrol_new o182_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN182, 20, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN182, 22, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN182, 24, 1, 0),
+};
+
+static const struct snd_kcontrol_new o183_mix[] = {
+	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN183, 21, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN183, 23, 1, 0),
+	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN183, 25, 1, 0),
+};
+
+static const char * const dl8_dl11_data_sel_mux_text[] = {
+	"dl8", "dl11",
+};
+
+static SOC_ENUM_SINGLE_DECL(dl8_dl11_data_sel_mux_enum,
+			    AFE_DAC_CON2, 0, dl8_dl11_data_sel_mux_text);
+
+static const struct snd_kcontrol_new dl8_dl11_data_sel_mux =
+	SOC_DAPM_ENUM("DL8_DL11 Sink",
+		      dl8_dl11_data_sel_mux_enum);
+
+static const struct snd_soc_dapm_widget mt8188_memif_widgets[] = {
+	/* DL6 */
+	SND_SOC_DAPM_MIXER("I000", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I001", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	/* DL3 */
+	SND_SOC_DAPM_MIXER("I020", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I021", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	/* DL11 */
+	SND_SOC_DAPM_MIXER("I022", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I023", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I024", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I025", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I026", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I027", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I028", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I029", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I030", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I031", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I032", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I033", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I034", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I035", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I036", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I037", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	/* DL11/DL8 */
+	SND_SOC_DAPM_MIXER("I046", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I047", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I048", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I049", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I050", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I051", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I052", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I053", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I054", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I055", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I056", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I057", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I058", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I059", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I060", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I061", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	/* DL2 */
+	SND_SOC_DAPM_MIXER("I070", SND_SOC_NOPM, 0, 0, NULL, 0),
+	SND_SOC_DAPM_MIXER("I071", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+	SND_SOC_DAPM_MUX("DL8_DL11 Mux",
+			 SND_SOC_NOPM, 0, 0, &dl8_dl11_data_sel_mux),
+
+	/* UL9 */
+	SND_SOC_DAPM_MIXER("O002", SND_SOC_NOPM, 0, 0,
+			   o002_mix, ARRAY_SIZE(o002_mix)),
+	SND_SOC_DAPM_MIXER("O003", SND_SOC_NOPM, 0, 0,
+			   o003_mix, ARRAY_SIZE(o003_mix)),
+	SND_SOC_DAPM_MIXER("O004", SND_SOC_NOPM, 0, 0,
+			   o004_mix, ARRAY_SIZE(o004_mix)),
+	SND_SOC_DAPM_MIXER("O005", SND_SOC_NOPM, 0, 0,
+			   o005_mix, ARRAY_SIZE(o005_mix)),
+	SND_SOC_DAPM_MIXER("O006", SND_SOC_NOPM, 0, 0,
+			   o006_mix, ARRAY_SIZE(o006_mix)),
+	SND_SOC_DAPM_MIXER("O007", SND_SOC_NOPM, 0, 0,
+			   o007_mix, ARRAY_SIZE(o007_mix)),
+	SND_SOC_DAPM_MIXER("O008", SND_SOC_NOPM, 0, 0,
+			   o008_mix, ARRAY_SIZE(o008_mix)),
+	SND_SOC_DAPM_MIXER("O009", SND_SOC_NOPM, 0, 0,
+			   o009_mix, ARRAY_SIZE(o009_mix)),
+	SND_SOC_DAPM_MIXER("O010", SND_SOC_NOPM, 0, 0,
+			   o010_mix, ARRAY_SIZE(o010_mix)),
+	SND_SOC_DAPM_MIXER("O011", SND_SOC_NOPM, 0, 0,
+			   o011_mix, ARRAY_SIZE(o011_mix)),
+	SND_SOC_DAPM_MIXER("O012", SND_SOC_NOPM, 0, 0,
+			   o012_mix, ARRAY_SIZE(o012_mix)),
+	SND_SOC_DAPM_MIXER("O013", SND_SOC_NOPM, 0, 0,
+			   o013_mix, ARRAY_SIZE(o013_mix)),
+	SND_SOC_DAPM_MIXER("O014", SND_SOC_NOPM, 0, 0,
+			   o014_mix, ARRAY_SIZE(o014_mix)),
+	SND_SOC_DAPM_MIXER("O015", SND_SOC_NOPM, 0, 0,
+			   o015_mix, ARRAY_SIZE(o015_mix)),
+	SND_SOC_DAPM_MIXER("O016", SND_SOC_NOPM, 0, 0,
+			   o016_mix, ARRAY_SIZE(o016_mix)),
+	SND_SOC_DAPM_MIXER("O017", SND_SOC_NOPM, 0, 0,
+			   o017_mix, ARRAY_SIZE(o017_mix)),
+	SND_SOC_DAPM_MIXER("O018", SND_SOC_NOPM, 0, 0,
+			   o018_mix, ARRAY_SIZE(o018_mix)),
+	SND_SOC_DAPM_MIXER("O019", SND_SOC_NOPM, 0, 0,
+			   o019_mix, ARRAY_SIZE(o019_mix)),
+	SND_SOC_DAPM_MIXER("O020", SND_SOC_NOPM, 0, 0,
+			   o020_mix, ARRAY_SIZE(o020_mix)),
+	SND_SOC_DAPM_MIXER("O021", SND_SOC_NOPM, 0, 0,
+			   o021_mix, ARRAY_SIZE(o021_mix)),
+	SND_SOC_DAPM_MIXER("O022", SND_SOC_NOPM, 0, 0,
+			   o022_mix, ARRAY_SIZE(o022_mix)),
+	SND_SOC_DAPM_MIXER("O023", SND_SOC_NOPM, 0, 0,
+			   o023_mix, ARRAY_SIZE(o023_mix)),
+	SND_SOC_DAPM_MIXER("O024", SND_SOC_NOPM, 0, 0,
+			   o024_mix, ARRAY_SIZE(o024_mix)),
+	SND_SOC_DAPM_MIXER("O025", SND_SOC_NOPM, 0, 0,
+			   o025_mix, ARRAY_SIZE(o025_mix)),
+	SND_SOC_DAPM_MIXER("O026", SND_SOC_NOPM, 0, 0,
+			   o026_mix, ARRAY_SIZE(o026_mix)),
+	SND_SOC_DAPM_MIXER("O027", SND_SOC_NOPM, 0, 0,
+			   o027_mix, ARRAY_SIZE(o027_mix)),
+	SND_SOC_DAPM_MIXER("O028", SND_SOC_NOPM, 0, 0,
+			   o028_mix, ARRAY_SIZE(o028_mix)),
+	SND_SOC_DAPM_MIXER("O029", SND_SOC_NOPM, 0, 0,
+			   o029_mix, ARRAY_SIZE(o029_mix)),
+	SND_SOC_DAPM_MIXER("O030", SND_SOC_NOPM, 0, 0,
+			   o030_mix, ARRAY_SIZE(o030_mix)),
+	SND_SOC_DAPM_MIXER("O031", SND_SOC_NOPM, 0, 0,
+			   o031_mix, ARRAY_SIZE(o031_mix)),
+	SND_SOC_DAPM_MIXER("O032", SND_SOC_NOPM, 0, 0,
+			   o032_mix, ARRAY_SIZE(o032_mix)),
+	SND_SOC_DAPM_MIXER("O033", SND_SOC_NOPM, 0, 0,
+			   o033_mix, ARRAY_SIZE(o033_mix)),
+
+	/* UL4 */
+	SND_SOC_DAPM_MIXER("O034", SND_SOC_NOPM, 0, 0,
+			   o034_mix, ARRAY_SIZE(o034_mix)),
+	SND_SOC_DAPM_MIXER("O035", SND_SOC_NOPM, 0, 0,
+			   o035_mix, ARRAY_SIZE(o035_mix)),
+
+	/* UL5 */
+	SND_SOC_DAPM_MIXER("O036", SND_SOC_NOPM, 0, 0,
+			   o036_mix, ARRAY_SIZE(o036_mix)),
+	SND_SOC_DAPM_MIXER("O037", SND_SOC_NOPM, 0, 0,
+			   o037_mix, ARRAY_SIZE(o037_mix)),
+
+	/* UL10 */
+	SND_SOC_DAPM_MIXER("O038", SND_SOC_NOPM, 0, 0,
+			   o038_mix, ARRAY_SIZE(o038_mix)),
+	SND_SOC_DAPM_MIXER("O039", SND_SOC_NOPM, 0, 0,
+			   o039_mix, ARRAY_SIZE(o039_mix)),
+	SND_SOC_DAPM_MIXER("O182", SND_SOC_NOPM, 0, 0,
+			   o182_mix, ARRAY_SIZE(o182_mix)),
+	SND_SOC_DAPM_MIXER("O183", SND_SOC_NOPM, 0, 0,
+			   o183_mix, ARRAY_SIZE(o183_mix)),
+
+	/* UL2 */
+	SND_SOC_DAPM_MIXER("O040", SND_SOC_NOPM, 0, 0,
+			   o040_mix, ARRAY_SIZE(o040_mix)),
+	SND_SOC_DAPM_MIXER("O041", SND_SOC_NOPM, 0, 0,
+			   o041_mix, ARRAY_SIZE(o041_mix)),
+	SND_SOC_DAPM_MIXER("O042", SND_SOC_NOPM, 0, 0,
+			   o042_mix, ARRAY_SIZE(o042_mix)),
+	SND_SOC_DAPM_MIXER("O043", SND_SOC_NOPM, 0, 0,
+			   o043_mix, ARRAY_SIZE(o043_mix)),
+	SND_SOC_DAPM_MIXER("O044", SND_SOC_NOPM, 0, 0,
+			   o044_mix, ARRAY_SIZE(o044_mix)),
+	SND_SOC_DAPM_MIXER("O045", SND_SOC_NOPM, 0, 0,
+			   o045_mix, ARRAY_SIZE(o045_mix)),
+	SND_SOC_DAPM_MIXER("O046", SND_SOC_NOPM, 0, 0,
+			   o046_mix, ARRAY_SIZE(o046_mix)),
+	SND_SOC_DAPM_MIXER("O047", SND_SOC_NOPM, 0, 0,
+			   o047_mix, ARRAY_SIZE(o047_mix)),
+};
+
+static const struct snd_soc_dapm_route mt8188_memif_routes[] = {
+	{"I000", NULL, "DL6"},
+	{"I001", NULL, "DL6"},
+
+	{"I020", NULL, "DL3"},
+	{"I021", NULL, "DL3"},
+
+	{"I022", NULL, "DL11"},
+	{"I023", NULL, "DL11"},
+	{"I024", NULL, "DL11"},
+	{"I025", NULL, "DL11"},
+	{"I026", NULL, "DL11"},
+	{"I027", NULL, "DL11"},
+	{"I028", NULL, "DL11"},
+	{"I029", NULL, "DL11"},
+	{"I030", NULL, "DL11"},
+	{"I031", NULL, "DL11"},
+	{"I032", NULL, "DL11"},
+	{"I033", NULL, "DL11"},
+	{"I034", NULL, "DL11"},
+	{"I035", NULL, "DL11"},
+	{"I036", NULL, "DL11"},
+	{"I037", NULL, "DL11"},
+
+	{"DL8_DL11 Mux", "dl8", "DL8"},
+	{"DL8_DL11 Mux", "dl11", "DL11"},
+
+	{"I046", NULL, "DL8_DL11 Mux"},
+	{"I047", NULL, "DL8_DL11 Mux"},
+	{"I048", NULL, "DL8_DL11 Mux"},
+	{"I049", NULL, "DL8_DL11 Mux"},
+	{"I050", NULL, "DL8_DL11 Mux"},
+	{"I051", NULL, "DL8_DL11 Mux"},
+	{"I052", NULL, "DL8_DL11 Mux"},
+	{"I053", NULL, "DL8_DL11 Mux"},
+	{"I054", NULL, "DL8_DL11 Mux"},
+	{"I055", NULL, "DL8_DL11 Mux"},
+	{"I056", NULL, "DL8_DL11 Mux"},
+	{"I057", NULL, "DL8_DL11 Mux"},
+	{"I058", NULL, "DL8_DL11 Mux"},
+	{"I059", NULL, "DL8_DL11 Mux"},
+	{"I060", NULL, "DL8_DL11 Mux"},
+	{"I061", NULL, "DL8_DL11 Mux"},
+
+	{"I070", NULL, "DL2"},
+	{"I071", NULL, "DL2"},
+
+	{"UL9", NULL, "O002"},
+	{"UL9", NULL, "O003"},
+	{"UL9", NULL, "O004"},
+	{"UL9", NULL, "O005"},
+	{"UL9", NULL, "O006"},
+	{"UL9", NULL, "O007"},
+	{"UL9", NULL, "O008"},
+	{"UL9", NULL, "O009"},
+	{"UL9", NULL, "O010"},
+	{"UL9", NULL, "O011"},
+	{"UL9", NULL, "O012"},
+	{"UL9", NULL, "O013"},
+	{"UL9", NULL, "O014"},
+	{"UL9", NULL, "O015"},
+	{"UL9", NULL, "O016"},
+	{"UL9", NULL, "O017"},
+	{"UL9", NULL, "O018"},
+	{"UL9", NULL, "O019"},
+	{"UL9", NULL, "O020"},
+	{"UL9", NULL, "O021"},
+	{"UL9", NULL, "O022"},
+	{"UL9", NULL, "O023"},
+	{"UL9", NULL, "O024"},
+	{"UL9", NULL, "O025"},
+	{"UL9", NULL, "O026"},
+	{"UL9", NULL, "O027"},
+	{"UL9", NULL, "O028"},
+	{"UL9", NULL, "O029"},
+	{"UL9", NULL, "O030"},
+	{"UL9", NULL, "O031"},
+	{"UL9", NULL, "O032"},
+	{"UL9", NULL, "O033"},
+
+	{"UL4", NULL, "O034"},
+	{"UL4", NULL, "O035"},
+
+	{"UL5", NULL, "O036"},
+	{"UL5", NULL, "O037"},
+
+	{"UL10", NULL, "O038"},
+	{"UL10", NULL, "O039"},
+	{"UL10", NULL, "O182"},
+	{"UL10", NULL, "O183"},
+
+	{"UL2", NULL, "O040"},
+	{"UL2", NULL, "O041"},
+	{"UL2", NULL, "O042"},
+	{"UL2", NULL, "O043"},
+	{"UL2", NULL, "O044"},
+	{"UL2", NULL, "O045"},
+	{"UL2", NULL, "O046"},
+	{"UL2", NULL, "O047"},
+
+	{"O004", "I000 Switch", "I000"},
+	{"O005", "I001 Switch", "I001"},
+
+	{"O006", "I000 Switch", "I000"},
+	{"O007", "I001 Switch", "I001"},
+
+	{"O010", "I022 Switch", "I022"},
+	{"O011", "I023 Switch", "I023"},
+	{"O012", "I024 Switch", "I024"},
+	{"O013", "I025 Switch", "I025"},
+	{"O014", "I026 Switch", "I026"},
+	{"O015", "I027 Switch", "I027"},
+	{"O016", "I028 Switch", "I028"},
+	{"O017", "I029 Switch", "I029"},
+
+	{"O010", "I046 Switch", "I046"},
+	{"O011", "I047 Switch", "I047"},
+	{"O012", "I048 Switch", "I048"},
+	{"O013", "I049 Switch", "I049"},
+	{"O014", "I050 Switch", "I050"},
+	{"O015", "I051 Switch", "I051"},
+	{"O016", "I052 Switch", "I052"},
+	{"O017", "I053 Switch", "I053"},
+
+	{"O002", "I022 Switch", "I022"},
+	{"O003", "I023 Switch", "I023"},
+	{"O004", "I024 Switch", "I024"},
+	{"O005", "I025 Switch", "I025"},
+	{"O006", "I026 Switch", "I026"},
+	{"O007", "I027 Switch", "I027"},
+	{"O008", "I028 Switch", "I028"},
+	{"O009", "I029 Switch", "I029"},
+	{"O010", "I030 Switch", "I030"},
+	{"O011", "I031 Switch", "I031"},
+	{"O012", "I032 Switch", "I032"},
+	{"O013", "I033 Switch", "I033"},
+	{"O014", "I034 Switch", "I034"},
+	{"O015", "I035 Switch", "I035"},
+	{"O016", "I036 Switch", "I036"},
+	{"O017", "I037 Switch", "I037"},
+	{"O026", "I046 Switch", "I046"},
+	{"O027", "I047 Switch", "I047"},
+	{"O028", "I048 Switch", "I048"},
+	{"O029", "I049 Switch", "I049"},
+	{"O030", "I050 Switch", "I050"},
+	{"O031", "I051 Switch", "I051"},
+	{"O032", "I052 Switch", "I052"},
+	{"O033", "I053 Switch", "I053"},
+
+	{"O002", "I000 Switch", "I000"},
+	{"O003", "I001 Switch", "I001"},
+	{"O002", "I020 Switch", "I020"},
+	{"O003", "I021 Switch", "I021"},
+	{"O002", "I070 Switch", "I070"},
+	{"O003", "I071 Switch", "I071"},
+
+	{"O034", "I000 Switch", "I000"},
+	{"O035", "I001 Switch", "I001"},
+	{"O034", "I002 Switch", "I002"},
+	{"O035", "I003 Switch", "I003"},
+	{"O034", "I012 Switch", "I012"},
+	{"O035", "I013 Switch", "I013"},
+	{"O034", "I020 Switch", "I020"},
+	{"O035", "I021 Switch", "I021"},
+	{"O034", "I070 Switch", "I070"},
+	{"O035", "I071 Switch", "I071"},
+	{"O034", "I072 Switch", "I072"},
+	{"O035", "I073 Switch", "I073"},
+
+	{"O036", "I000 Switch", "I000"},
+	{"O037", "I001 Switch", "I001"},
+	{"O036", "I012 Switch", "I012"},
+	{"O037", "I013 Switch", "I013"},
+	{"O036", "I020 Switch", "I020"},
+	{"O037", "I021 Switch", "I021"},
+	{"O036", "I070 Switch", "I070"},
+	{"O037", "I071 Switch", "I071"},
+	{"O036", "I168 Switch", "I168"},
+	{"O037", "I169 Switch", "I169"},
+
+	{"O038", "I022 Switch", "I022"},
+	{"O039", "I023 Switch", "I023"},
+	{"O182", "I024 Switch", "I024"},
+	{"O183", "I025 Switch", "I025"},
+
+	{"O038", "I168 Switch", "I168"},
+	{"O039", "I169 Switch", "I169"},
+
+	{"O182", "I020 Switch", "I020"},
+	{"O183", "I021 Switch", "I021"},
+
+	{"O182", "I022 Switch", "I022"},
+	{"O183", "I023 Switch", "I023"},
+
+	{"O040", "I022 Switch", "I022"},
+	{"O041", "I023 Switch", "I023"},
+	{"O042", "I024 Switch", "I024"},
+	{"O043", "I025 Switch", "I025"},
+	{"O044", "I026 Switch", "I026"},
+	{"O045", "I027 Switch", "I027"},
+	{"O046", "I028 Switch", "I028"},
+	{"O047", "I029 Switch", "I029"},
+
+	{"O040", "I002 Switch", "I002"},
+	{"O041", "I003 Switch", "I003"},
+
+	{"O002", "I012 Switch", "I012"},
+	{"O003", "I013 Switch", "I013"},
+	{"O004", "I014 Switch", "I014"},
+	{"O005", "I015 Switch", "I015"},
+	{"O006", "I016 Switch", "I016"},
+	{"O007", "I017 Switch", "I017"},
+	{"O008", "I018 Switch", "I018"},
+	{"O009", "I019 Switch", "I019"},
+	{"O010", "I188 Switch", "I188"},
+	{"O011", "I189 Switch", "I189"},
+	{"O012", "I190 Switch", "I190"},
+	{"O013", "I191 Switch", "I191"},
+	{"O014", "I192 Switch", "I192"},
+	{"O015", "I193 Switch", "I193"},
+	{"O016", "I194 Switch", "I194"},
+	{"O017", "I195 Switch", "I195"},
+
+	{"O040", "I012 Switch", "I012"},
+	{"O041", "I013 Switch", "I013"},
+	{"O042", "I014 Switch", "I014"},
+	{"O043", "I015 Switch", "I015"},
+	{"O044", "I016 Switch", "I016"},
+	{"O045", "I017 Switch", "I017"},
+	{"O046", "I018 Switch", "I018"},
+	{"O047", "I019 Switch", "I019"},
+
+	{"O002", "I072 Switch", "I072"},
+	{"O003", "I073 Switch", "I073"},
+	{"O004", "I074 Switch", "I074"},
+	{"O005", "I075 Switch", "I075"},
+	{"O006", "I076 Switch", "I076"},
+	{"O007", "I077 Switch", "I077"},
+	{"O008", "I078 Switch", "I078"},
+	{"O009", "I079 Switch", "I079"},
+	{"O010", "I080 Switch", "I080"},
+	{"O011", "I081 Switch", "I081"},
+	{"O012", "I082 Switch", "I082"},
+	{"O013", "I083 Switch", "I083"},
+	{"O014", "I084 Switch", "I084"},
+	{"O015", "I085 Switch", "I085"},
+	{"O016", "I086 Switch", "I086"},
+	{"O017", "I087 Switch", "I087"},
+
+	{"O010", "I072 Switch", "I072"},
+	{"O011", "I073 Switch", "I073"},
+	{"O012", "I074 Switch", "I074"},
+	{"O013", "I075 Switch", "I075"},
+	{"O014", "I076 Switch", "I076"},
+	{"O015", "I077 Switch", "I077"},
+	{"O016", "I078 Switch", "I078"},
+	{"O017", "I079 Switch", "I079"},
+	{"O018", "I080 Switch", "I080"},
+	{"O019", "I081 Switch", "I081"},
+	{"O020", "I082 Switch", "I082"},
+	{"O021", "I083 Switch", "I083"},
+	{"O022", "I084 Switch", "I084"},
+	{"O023", "I085 Switch", "I085"},
+	{"O024", "I086 Switch", "I086"},
+	{"O025", "I087 Switch", "I087"},
+
+	{"O002", "I168 Switch", "I168"},
+	{"O003", "I169 Switch", "I169"},
+
+	{"O034", "I168 Switch", "I168"},
+	{"O035", "I168 Switch", "I168"},
+	{"O035", "I169 Switch", "I169"},
+
+	{"O040", "I168 Switch", "I168"},
+	{"O041", "I169 Switch", "I169"},
+};
+
+static const struct snd_soc_component_driver mt8188_afe_pcm_dai_component = {
+	.name = "mt8188-afe-pcm-dai",
+};
+
+static const struct mtk_base_memif_data memif_data[MT8188_AFE_MEMIF_NUM] = {
+	[MT8188_AFE_MEMIF_DL2] = {
+		.name = "DL2",
+		.id = MT8188_AFE_MEMIF_DL2,
+		.reg_ofs_base = AFE_DL2_BASE,
+		.reg_ofs_cur = AFE_DL2_CUR,
+		.reg_ofs_end = AFE_DL2_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON0,
+		.fs_shift = 10,
+		.fs_maskbit = 0x1f,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 18,
+		.hd_reg = AFE_DL2_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 18,
+		.ch_num_reg = AFE_DL2_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x1f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 18,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 18,
+	},
+	[MT8188_AFE_MEMIF_DL3] = {
+		.name = "DL3",
+		.id = MT8188_AFE_MEMIF_DL3,
+		.reg_ofs_base = AFE_DL3_BASE,
+		.reg_ofs_cur = AFE_DL3_CUR,
+		.reg_ofs_end = AFE_DL3_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON0,
+		.fs_shift = 15,
+		.fs_maskbit = 0x1f,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 19,
+		.hd_reg = AFE_DL3_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 19,
+		.ch_num_reg = AFE_DL3_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x1f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 19,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 19,
+	},
+	[MT8188_AFE_MEMIF_DL6] = {
+		.name = "DL6",
+		.id = MT8188_AFE_MEMIF_DL6,
+		.reg_ofs_base = AFE_DL6_BASE,
+		.reg_ofs_cur = AFE_DL6_CUR,
+		.reg_ofs_end = AFE_DL6_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON1,
+		.fs_shift = 0,
+		.fs_maskbit = 0x1f,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 22,
+		.hd_reg = AFE_DL6_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 22,
+		.ch_num_reg = AFE_DL6_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x1f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 22,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 22,
+	},
+	[MT8188_AFE_MEMIF_DL7] = {
+		.name = "DL7",
+		.id = MT8188_AFE_MEMIF_DL7,
+		.reg_ofs_base = AFE_DL7_BASE,
+		.reg_ofs_cur = AFE_DL7_CUR,
+		.reg_ofs_end = AFE_DL7_END,
+		.fs_reg = -1,
+		.fs_shift = 0,
+		.fs_maskbit = 0,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 23,
+		.hd_reg = AFE_DL7_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 23,
+		.ch_num_reg = AFE_DL7_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x1f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 23,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 23,
+	},
+	[MT8188_AFE_MEMIF_DL8] = {
+		.name = "DL8",
+		.id = MT8188_AFE_MEMIF_DL8,
+		.reg_ofs_base = AFE_DL8_BASE,
+		.reg_ofs_cur = AFE_DL8_CUR,
+		.reg_ofs_end = AFE_DL8_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON1,
+		.fs_shift = 10,
+		.fs_maskbit = 0x1f,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 24,
+		.hd_reg = AFE_DL8_CON0,
+		.hd_shift = 6,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 24,
+		.ch_num_reg = AFE_DL8_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x3f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 24,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 24,
+	},
+	[MT8188_AFE_MEMIF_DL10] = {
+		.name = "DL10",
+		.id = MT8188_AFE_MEMIF_DL10,
+		.reg_ofs_base = AFE_DL10_BASE,
+		.reg_ofs_cur = AFE_DL10_CUR,
+		.reg_ofs_end = AFE_DL10_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON1,
+		.fs_shift = 20,
+		.fs_maskbit = 0x1f,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 26,
+		.hd_reg = AFE_DL10_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 26,
+		.ch_num_reg = AFE_DL10_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x1f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 26,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 26,
+	},
+	[MT8188_AFE_MEMIF_DL11] = {
+		.name = "DL11",
+		.id = MT8188_AFE_MEMIF_DL11,
+		.reg_ofs_base = AFE_DL11_BASE,
+		.reg_ofs_cur = AFE_DL11_CUR,
+		.reg_ofs_end = AFE_DL11_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON1,
+		.fs_shift = 25,
+		.fs_maskbit = 0x1f,
+		.mono_reg = -1,
+		.mono_shift = 0,
+		.int_odd_flag_reg = -1,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 27,
+		.hd_reg = AFE_DL11_CON0,
+		.hd_shift = 7,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 27,
+		.ch_num_reg = AFE_DL11_CON0,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0x7f,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 27,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 27,
+	},
+	[MT8188_AFE_MEMIF_UL1] = {
+		.name = "UL1",
+		.id = MT8188_AFE_MEMIF_UL1,
+		.reg_ofs_base = AFE_UL1_BASE,
+		.reg_ofs_cur = AFE_UL1_CUR,
+		.reg_ofs_end = AFE_UL1_END,
+		.fs_reg = -1,
+		.fs_shift = 0,
+		.fs_maskbit = 0,
+		.mono_reg = AFE_UL1_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL1_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 1,
+		.hd_reg = AFE_UL1_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 0,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 0,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 0,
+	},
+	[MT8188_AFE_MEMIF_UL2] = {
+		.name = "UL2",
+		.id = MT8188_AFE_MEMIF_UL2,
+		.reg_ofs_base = AFE_UL2_BASE,
+		.reg_ofs_cur = AFE_UL2_CUR,
+		.reg_ofs_end = AFE_UL2_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON2,
+		.fs_shift = 5,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL2_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL2_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 2,
+		.hd_reg = AFE_UL2_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 1,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 1,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 1,
+	},
+	[MT8188_AFE_MEMIF_UL3] = {
+		.name = "UL3",
+		.id = MT8188_AFE_MEMIF_UL3,
+		.reg_ofs_base = AFE_UL3_BASE,
+		.reg_ofs_cur = AFE_UL3_CUR,
+		.reg_ofs_end = AFE_UL3_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON2,
+		.fs_shift = 10,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL3_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL3_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 3,
+		.hd_reg = AFE_UL3_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 2,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 2,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 2,
+	},
+	[MT8188_AFE_MEMIF_UL4] = {
+		.name = "UL4",
+		.id = MT8188_AFE_MEMIF_UL4,
+		.reg_ofs_base = AFE_UL4_BASE,
+		.reg_ofs_cur = AFE_UL4_CUR,
+		.reg_ofs_end = AFE_UL4_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON2,
+		.fs_shift = 15,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL4_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL4_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 4,
+		.hd_reg = AFE_UL4_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 3,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 3,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 3,
+	},
+	[MT8188_AFE_MEMIF_UL5] = {
+		.name = "UL5",
+		.id = MT8188_AFE_MEMIF_UL5,
+		.reg_ofs_base = AFE_UL5_BASE,
+		.reg_ofs_cur = AFE_UL5_CUR,
+		.reg_ofs_end = AFE_UL5_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON2,
+		.fs_shift = 20,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL5_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL5_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 5,
+		.hd_reg = AFE_UL5_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 4,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 4,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 4,
+	},
+	[MT8188_AFE_MEMIF_UL6] = {
+		.name = "UL6",
+		.id = MT8188_AFE_MEMIF_UL6,
+		.reg_ofs_base = AFE_UL6_BASE,
+		.reg_ofs_cur = AFE_UL6_CUR,
+		.reg_ofs_end = AFE_UL6_END,
+		.fs_reg = -1,
+		.fs_shift = 0,
+		.fs_maskbit = 0,
+		.mono_reg = AFE_UL6_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL6_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 6,
+		.hd_reg = AFE_UL6_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 5,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 5,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 5,
+	},
+	[MT8188_AFE_MEMIF_UL8] = {
+		.name = "UL8",
+		.id = MT8188_AFE_MEMIF_UL8,
+		.reg_ofs_base = AFE_UL8_BASE,
+		.reg_ofs_cur = AFE_UL8_CUR,
+		.reg_ofs_end = AFE_UL8_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON3,
+		.fs_shift = 5,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL8_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL8_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 8,
+		.hd_reg = AFE_UL8_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 7,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 7,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 7,
+	},
+	[MT8188_AFE_MEMIF_UL9] = {
+		.name = "UL9",
+		.id = MT8188_AFE_MEMIF_UL9,
+		.reg_ofs_base = AFE_UL9_BASE,
+		.reg_ofs_cur = AFE_UL9_CUR,
+		.reg_ofs_end = AFE_UL9_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON3,
+		.fs_shift = 10,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL9_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL9_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 9,
+		.hd_reg = AFE_UL9_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 8,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 8,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 8,
+	},
+	[MT8188_AFE_MEMIF_UL10] = {
+		.name = "UL10",
+		.id = MT8188_AFE_MEMIF_UL10,
+		.reg_ofs_base = AFE_UL10_BASE,
+		.reg_ofs_cur = AFE_UL10_CUR,
+		.reg_ofs_end = AFE_UL10_END,
+		.fs_reg = AFE_MEMIF_AGENT_FS_CON3,
+		.fs_shift = 15,
+		.fs_maskbit = 0x1f,
+		.mono_reg = AFE_UL10_CON0,
+		.mono_shift = 1,
+		.int_odd_flag_reg = AFE_UL10_CON0,
+		.int_odd_flag_shift = 0,
+		.enable_reg = AFE_DAC_CON0,
+		.enable_shift = 10,
+		.hd_reg = AFE_UL10_CON0,
+		.hd_shift = 5,
+		.agent_disable_reg = AUDIO_TOP_CON5,
+		.agent_disable_shift = 9,
+		.ch_num_reg = -1,
+		.ch_num_shift = 0,
+		.ch_num_maskbit = 0,
+		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,
+		.msb_shift = 9,
+		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,
+		.msb_end_shift = 9,
+	},
+};
+
+static const struct mtk_base_irq_data irq_data[MT8188_AFE_IRQ_NUM] = {
+	[MT8188_AFE_IRQ_1] = {
+		.id = MT8188_AFE_IRQ_1,
+		.irq_cnt_reg = -1,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0,
+		.irq_fs_reg = -1,
+		.irq_fs_shift = 0,
+		.irq_fs_maskbit = 0,
+		.irq_en_reg = AFE_IRQ1_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg = AFE_IRQ_MCU_CLR,
+		.irq_clr_shift = 0,
+		.irq_status_shift = 16,
+	},
+	[MT8188_AFE_IRQ_2] = {
+		.id = MT8188_AFE_IRQ_2,
+		.irq_cnt_reg = -1,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0,
+		.irq_fs_reg = -1,
+		.irq_fs_shift = 0,
+		.irq_fs_maskbit = 0,
+		.irq_en_reg = AFE_IRQ2_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg = AFE_IRQ_MCU_CLR,
+		.irq_clr_shift = 1,
+		.irq_status_shift = 17,
+	},
+	[MT8188_AFE_IRQ_3] = {
+		.id = MT8188_AFE_IRQ_3,
+		.irq_cnt_reg = AFE_IRQ3_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = -1,
+		.irq_fs_shift = 0,
+		.irq_fs_maskbit = 0,
+		.irq_en_reg = AFE_IRQ3_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg = AFE_IRQ_MCU_CLR,
+		.irq_clr_shift = 2,
+		.irq_status_shift = 18,
+	},
+	[MT8188_AFE_IRQ_8] = {
+		.id = MT8188_AFE_IRQ_8,
+		.irq_cnt_reg = -1,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0,
+		.irq_fs_reg = -1,
+		.irq_fs_shift = 0,
+		.irq_fs_maskbit = 0,
+		.irq_en_reg = AFE_IRQ8_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg = AFE_IRQ_MCU_CLR,
+		.irq_clr_shift = 7,
+		.irq_status_shift = 23,
+	},
+	[MT8188_AFE_IRQ_9] = {
+		.id = MT8188_AFE_IRQ_9,
+		.irq_cnt_reg = AFE_IRQ9_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = -1,
+		.irq_fs_shift = 0,
+		.irq_fs_maskbit = 0,
+		.irq_en_reg = AFE_IRQ9_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg = AFE_IRQ_MCU_CLR,
+		.irq_clr_shift = 8,
+		.irq_status_shift = 24,
+	},
+	[MT8188_AFE_IRQ_10] = {
+		.id = MT8188_AFE_IRQ_10,
+		.irq_cnt_reg = -1,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0,
+		.irq_fs_reg = -1,
+		.irq_fs_shift = 0,
+		.irq_fs_maskbit = 0,
+		.irq_en_reg = AFE_IRQ10_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg = AFE_IRQ_MCU_CLR,
+		.irq_clr_shift = 9,
+		.irq_status_shift = 25,
+	},
+	[MT8188_AFE_IRQ_13] = {
+		.id = MT8188_AFE_IRQ_13,
+		.irq_cnt_reg = ASYS_IRQ1_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ1_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ1_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 0,
+		.irq_status_shift = 0,
+	},
+	[MT8188_AFE_IRQ_14] = {
+		.id = MT8188_AFE_IRQ_14,
+		.irq_cnt_reg = ASYS_IRQ2_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ2_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ2_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 1,
+		.irq_status_shift = 1,
+	},
+	[MT8188_AFE_IRQ_15] = {
+		.id = MT8188_AFE_IRQ_15,
+		.irq_cnt_reg = ASYS_IRQ3_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ3_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ3_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 2,
+		.irq_status_shift = 2,
+	},
+	[MT8188_AFE_IRQ_16] = {
+		.id = MT8188_AFE_IRQ_16,
+		.irq_cnt_reg = ASYS_IRQ4_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ4_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ4_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 3,
+		.irq_status_shift = 3,
+	},
+	[MT8188_AFE_IRQ_17] = {
+		.id = MT8188_AFE_IRQ_17,
+		.irq_cnt_reg = ASYS_IRQ5_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ5_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ5_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 4,
+		.irq_status_shift = 4,
+	},
+	[MT8188_AFE_IRQ_18] = {
+		.id = MT8188_AFE_IRQ_18,
+		.irq_cnt_reg = ASYS_IRQ6_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ6_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ6_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 5,
+		.irq_status_shift = 5,
+	},
+	[MT8188_AFE_IRQ_19] = {
+		.id = MT8188_AFE_IRQ_19,
+		.irq_cnt_reg = ASYS_IRQ7_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ7_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ7_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 6,
+		.irq_status_shift = 6,
+	},
+	[MT8188_AFE_IRQ_20] = {
+		.id = MT8188_AFE_IRQ_20,
+		.irq_cnt_reg = ASYS_IRQ8_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ8_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ8_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 7,
+		.irq_status_shift = 7,
+	},
+	[MT8188_AFE_IRQ_21] = {
+		.id = MT8188_AFE_IRQ_21,
+		.irq_cnt_reg = ASYS_IRQ9_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ9_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ9_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 8,
+		.irq_status_shift = 8,
+	},
+	[MT8188_AFE_IRQ_22] = {
+		.id = MT8188_AFE_IRQ_22,
+		.irq_cnt_reg = ASYS_IRQ10_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ10_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ10_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 9,
+		.irq_status_shift = 9,
+	},
+	[MT8188_AFE_IRQ_23] = {
+		.id = MT8188_AFE_IRQ_23,
+		.irq_cnt_reg = ASYS_IRQ11_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ11_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ11_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 10,
+		.irq_status_shift = 10,
+	},
+	[MT8188_AFE_IRQ_24] = {
+		.id = MT8188_AFE_IRQ_24,
+		.irq_cnt_reg = ASYS_IRQ12_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ12_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ12_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 11,
+		.irq_status_shift = 11,
+	},
+	[MT8188_AFE_IRQ_25] = {
+		.id = MT8188_AFE_IRQ_25,
+		.irq_cnt_reg = ASYS_IRQ13_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ13_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ13_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 12,
+		.irq_status_shift = 12,
+	},
+	[MT8188_AFE_IRQ_26] = {
+		.id = MT8188_AFE_IRQ_26,
+		.irq_cnt_reg = ASYS_IRQ14_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ14_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ14_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 13,
+		.irq_status_shift = 13,
+	},
+	[MT8188_AFE_IRQ_27] = {
+		.id = MT8188_AFE_IRQ_27,
+		.irq_cnt_reg = ASYS_IRQ15_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ15_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ15_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 14,
+		.irq_status_shift = 14,
+	},
+	[MT8188_AFE_IRQ_28] = {
+		.id = MT8188_AFE_IRQ_28,
+		.irq_cnt_reg = ASYS_IRQ16_CON,
+		.irq_cnt_shift = 0,
+		.irq_cnt_maskbit = 0xffffff,
+		.irq_fs_reg = ASYS_IRQ16_CON,
+		.irq_fs_shift = 24,
+		.irq_fs_maskbit = 0x1ffff,
+		.irq_en_reg = ASYS_IRQ16_CON,
+		.irq_en_shift = 31,
+		.irq_clr_reg =  ASYS_IRQ_CLR,
+		.irq_clr_shift = 15,
+		.irq_status_shift = 15,
+	},
+};
+
+static const int mt8188_afe_memif_const_irqs[MT8188_AFE_MEMIF_NUM] = {
+	[MT8188_AFE_MEMIF_DL2] = MT8188_AFE_IRQ_13,
+	[MT8188_AFE_MEMIF_DL3] = MT8188_AFE_IRQ_14,
+	[MT8188_AFE_MEMIF_DL6] = MT8188_AFE_IRQ_15,
+	[MT8188_AFE_MEMIF_DL7] = MT8188_AFE_IRQ_1,
+	[MT8188_AFE_MEMIF_DL8] = MT8188_AFE_IRQ_16,
+	[MT8188_AFE_MEMIF_DL10] = MT8188_AFE_IRQ_17,
+	[MT8188_AFE_MEMIF_DL11] = MT8188_AFE_IRQ_18,
+	[MT8188_AFE_MEMIF_UL1] = MT8188_AFE_IRQ_3,
+	[MT8188_AFE_MEMIF_UL2] = MT8188_AFE_IRQ_19,
+	[MT8188_AFE_MEMIF_UL3] = MT8188_AFE_IRQ_20,
+	[MT8188_AFE_MEMIF_UL4] = MT8188_AFE_IRQ_21,
+	[MT8188_AFE_MEMIF_UL5] = MT8188_AFE_IRQ_22,
+	[MT8188_AFE_MEMIF_UL6] = MT8188_AFE_IRQ_9,
+	[MT8188_AFE_MEMIF_UL8] = MT8188_AFE_IRQ_23,
+	[MT8188_AFE_MEMIF_UL9] = MT8188_AFE_IRQ_24,
+	[MT8188_AFE_MEMIF_UL10] = MT8188_AFE_IRQ_25,
+};
+
+static bool mt8188_is_volatile_reg(struct device *dev, unsigned int reg)
+{
+	/* these auto-gen reg has read-only bit, so put it as volatile */
+	/* volatile reg cannot be cached, so cannot be set when power off */
+	switch (reg) {
+	case AUDIO_TOP_CON0:
+	case AUDIO_TOP_CON1:
+	case AUDIO_TOP_CON3:
+	case AUDIO_TOP_CON4:
+	case AUDIO_TOP_CON5:
+	case AUDIO_TOP_CON6:
+	case ASYS_IRQ_CLR:
+	case ASYS_IRQ_STATUS:
+	case ASYS_IRQ_MON1:
+	case ASYS_IRQ_MON2:
+	case AFE_IRQ_MCU_CLR:
+	case AFE_IRQ_STATUS:
+	case AFE_IRQ3_CON_MON:
+	case AFE_IRQ_MCU_MON2:
+	case ADSP_IRQ_STATUS:
+	case AUDIO_TOP_STA0:
+	case AUDIO_TOP_STA1:
+	case AFE_GAIN1_CUR:
+	case AFE_GAIN2_CUR:
+	case AFE_IEC_BURST_INFO:
+	case AFE_IEC_CHL_STAT0:
+	case AFE_IEC_CHL_STAT1:
+	case AFE_IEC_CHR_STAT0:
+	case AFE_IEC_CHR_STAT1:
+	case AFE_SPDIFIN_CHSTS1:
+	case AFE_SPDIFIN_CHSTS2:
+	case AFE_SPDIFIN_CHSTS3:
+	case AFE_SPDIFIN_CHSTS4:
+	case AFE_SPDIFIN_CHSTS5:
+	case AFE_SPDIFIN_CHSTS6:
+	case AFE_SPDIFIN_DEBUG1:
+	case AFE_SPDIFIN_DEBUG2:
+	case AFE_SPDIFIN_DEBUG3:
+	case AFE_SPDIFIN_DEBUG4:
+	case AFE_SPDIFIN_EC:
+	case AFE_SPDIFIN_CKLOCK_CFG:
+	case AFE_SPDIFIN_BR_DBG1:
+	case AFE_SPDIFIN_CKFBDIV:
+	case AFE_SPDIFIN_INT_EXT:
+	case AFE_SPDIFIN_INT_EXT2:
+	case SPDIFIN_FREQ_STATUS:
+	case SPDIFIN_USERCODE1:
+	case SPDIFIN_USERCODE2:
+	case SPDIFIN_USERCODE3:
+	case SPDIFIN_USERCODE4:
+	case SPDIFIN_USERCODE5:
+	case SPDIFIN_USERCODE6:
+	case SPDIFIN_USERCODE7:
+	case SPDIFIN_USERCODE8:
+	case SPDIFIN_USERCODE9:
+	case SPDIFIN_USERCODE10:
+	case SPDIFIN_USERCODE11:
+	case SPDIFIN_USERCODE12:
+	case AFE_LINEIN_APLL_TUNER_MON:
+	case AFE_EARC_APLL_TUNER_MON:
+	case AFE_CM0_MON:
+	case AFE_CM1_MON:
+	case AFE_CM2_MON:
+	case AFE_MPHONE_MULTI_DET_MON0:
+	case AFE_MPHONE_MULTI_DET_MON1:
+	case AFE_MPHONE_MULTI_DET_MON2:
+	case AFE_MPHONE_MULTI2_DET_MON0:
+	case AFE_MPHONE_MULTI2_DET_MON1:
+	case AFE_MPHONE_MULTI2_DET_MON2:
+	case AFE_ADDA_MTKAIF_MON0:
+	case AFE_ADDA_MTKAIF_MON1:
+	case AFE_AUD_PAD_TOP:
+	case AFE_ADDA6_MTKAIF_MON0:
+	case AFE_ADDA6_MTKAIF_MON1:
+	case AFE_ADDA6_SRC_DEBUG_MON0:
+	case AFE_ADDA6_UL_SRC_MON0:
+	case AFE_ADDA6_UL_SRC_MON1:
+	case AFE_ASRC11_NEW_CON8:
+	case AFE_ASRC11_NEW_CON9:
+	case AFE_ASRC12_NEW_CON8:
+	case AFE_ASRC12_NEW_CON9:
+	case AFE_LRCK_CNT:
+	case AFE_DAC_MON0:
+	case AFE_DL2_CUR:
+	case AFE_DL3_CUR:
+	case AFE_DL6_CUR:
+	case AFE_DL7_CUR:
+	case AFE_DL8_CUR:
+	case AFE_DL10_CUR:
+	case AFE_DL11_CUR:
+	case AFE_UL1_CUR:
+	case AFE_UL2_CUR:
+	case AFE_UL3_CUR:
+	case AFE_UL4_CUR:
+	case AFE_UL5_CUR:
+	case AFE_UL6_CUR:
+	case AFE_UL8_CUR:
+	case AFE_UL9_CUR:
+	case AFE_UL10_CUR:
+	case AFE_DL8_CHK_SUM1:
+	case AFE_DL8_CHK_SUM2:
+	case AFE_DL8_CHK_SUM3:
+	case AFE_DL8_CHK_SUM4:
+	case AFE_DL8_CHK_SUM5:
+	case AFE_DL8_CHK_SUM6:
+	case AFE_DL10_CHK_SUM1:
+	case AFE_DL10_CHK_SUM2:
+	case AFE_DL10_CHK_SUM3:
+	case AFE_DL10_CHK_SUM4:
+	case AFE_DL10_CHK_SUM5:
+	case AFE_DL10_CHK_SUM6:
+	case AFE_DL11_CHK_SUM1:
+	case AFE_DL11_CHK_SUM2:
+	case AFE_DL11_CHK_SUM3:
+	case AFE_DL11_CHK_SUM4:
+	case AFE_DL11_CHK_SUM5:
+	case AFE_DL11_CHK_SUM6:
+	case AFE_UL1_CHK_SUM1:
+	case AFE_UL1_CHK_SUM2:
+	case AFE_UL2_CHK_SUM1:
+	case AFE_UL2_CHK_SUM2:
+	case AFE_UL3_CHK_SUM1:
+	case AFE_UL3_CHK_SUM2:
+	case AFE_UL4_CHK_SUM1:
+	case AFE_UL4_CHK_SUM2:
+	case AFE_UL5_CHK_SUM1:
+	case AFE_UL5_CHK_SUM2:
+	case AFE_UL6_CHK_SUM1:
+	case AFE_UL6_CHK_SUM2:
+	case AFE_UL8_CHK_SUM1:
+	case AFE_UL8_CHK_SUM2:
+	case AFE_DL2_CHK_SUM1:
+	case AFE_DL2_CHK_SUM2:
+	case AFE_DL3_CHK_SUM1:
+	case AFE_DL3_CHK_SUM2:
+	case AFE_DL6_CHK_SUM1:
+	case AFE_DL6_CHK_SUM2:
+	case AFE_DL7_CHK_SUM1:
+	case AFE_DL7_CHK_SUM2:
+	case AFE_UL9_CHK_SUM1:
+	case AFE_UL9_CHK_SUM2:
+	case AFE_BUS_MON1:
+	case UL1_MOD2AGT_CNT_LAT:
+	case UL2_MOD2AGT_CNT_LAT:
+	case UL3_MOD2AGT_CNT_LAT:
+	case UL4_MOD2AGT_CNT_LAT:
+	case UL5_MOD2AGT_CNT_LAT:
+	case UL6_MOD2AGT_CNT_LAT:
+	case UL8_MOD2AGT_CNT_LAT:
+	case UL9_MOD2AGT_CNT_LAT:
+	case UL10_MOD2AGT_CNT_LAT:
+	case AFE_MEMIF_BUF_FULL_MON:
+	case AFE_MEMIF_BUF_MON1:
+	case AFE_MEMIF_BUF_MON3:
+	case AFE_MEMIF_BUF_MON4:
+	case AFE_MEMIF_BUF_MON5:
+	case AFE_MEMIF_BUF_MON6:
+	case AFE_MEMIF_BUF_MON7:
+	case AFE_MEMIF_BUF_MON8:
+	case AFE_MEMIF_BUF_MON9:
+	case AFE_MEMIF_BUF_MON10:
+	case DL2_AGENT2MODULE_CNT:
+	case DL3_AGENT2MODULE_CNT:
+	case DL6_AGENT2MODULE_CNT:
+	case DL7_AGENT2MODULE_CNT:
+	case DL8_AGENT2MODULE_CNT:
+	case DL10_AGENT2MODULE_CNT:
+	case DL11_AGENT2MODULE_CNT:
+	case UL1_MODULE2AGENT_CNT:
+	case UL2_MODULE2AGENT_CNT:
+	case UL3_MODULE2AGENT_CNT:
+	case UL4_MODULE2AGENT_CNT:
+	case UL5_MODULE2AGENT_CNT:
+	case UL6_MODULE2AGENT_CNT:
+	case UL8_MODULE2AGENT_CNT:
+	case UL9_MODULE2AGENT_CNT:
+	case UL10_MODULE2AGENT_CNT:
+	case AFE_DMIC0_SRC_DEBUG_MON0:
+	case AFE_DMIC0_UL_SRC_MON0:
+	case AFE_DMIC0_UL_SRC_MON1:
+	case AFE_DMIC1_SRC_DEBUG_MON0:
+	case AFE_DMIC1_UL_SRC_MON0:
+	case AFE_DMIC1_UL_SRC_MON1:
+	case AFE_DMIC2_SRC_DEBUG_MON0:
+	case AFE_DMIC2_UL_SRC_MON0:
+	case AFE_DMIC2_UL_SRC_MON1:
+	case AFE_DMIC3_SRC_DEBUG_MON0:
+	case AFE_DMIC3_UL_SRC_MON0:
+	case AFE_DMIC3_UL_SRC_MON1:
+	case DMIC_GAIN1_CUR:
+	case DMIC_GAIN2_CUR:
+	case DMIC_GAIN3_CUR:
+	case DMIC_GAIN4_CUR:
+	case ETDM_IN1_MONITOR:
+	case ETDM_IN2_MONITOR:
+	case ETDM_OUT1_MONITOR:
+	case ETDM_OUT2_MONITOR:
+	case ETDM_OUT3_MONITOR:
+	case AFE_ADDA_SRC_DEBUG_MON0:
+	case AFE_ADDA_SRC_DEBUG_MON1:
+	case AFE_ADDA_DL_SDM_FIFO_MON:
+	case AFE_ADDA_DL_SRC_LCH_MON:
+	case AFE_ADDA_DL_SRC_RCH_MON:
+	case AFE_ADDA_DL_SDM_OUT_MON:
+	case AFE_GASRC0_NEW_CON8:
+	case AFE_GASRC0_NEW_CON9:
+	case AFE_GASRC0_NEW_CON12:
+	case AFE_GASRC1_NEW_CON8:
+	case AFE_GASRC1_NEW_CON9:
+	case AFE_GASRC1_NEW_CON12:
+	case AFE_GASRC2_NEW_CON8:
+	case AFE_GASRC2_NEW_CON9:
+	case AFE_GASRC2_NEW_CON12:
+	case AFE_GASRC3_NEW_CON8:
+	case AFE_GASRC3_NEW_CON9:
+	case AFE_GASRC3_NEW_CON12:
+	case AFE_GASRC4_NEW_CON8:
+	case AFE_GASRC4_NEW_CON9:
+	case AFE_GASRC4_NEW_CON12:
+	case AFE_GASRC5_NEW_CON8:
+	case AFE_GASRC5_NEW_CON9:
+	case AFE_GASRC5_NEW_CON12:
+	case AFE_GASRC6_NEW_CON8:
+	case AFE_GASRC6_NEW_CON9:
+	case AFE_GASRC6_NEW_CON12:
+	case AFE_GASRC7_NEW_CON8:
+	case AFE_GASRC7_NEW_CON9:
+	case AFE_GASRC7_NEW_CON12:
+	case AFE_GASRC8_NEW_CON8:
+	case AFE_GASRC8_NEW_CON9:
+	case AFE_GASRC8_NEW_CON12:
+	case AFE_GASRC9_NEW_CON8:
+	case AFE_GASRC9_NEW_CON9:
+	case AFE_GASRC9_NEW_CON12:
+	case AFE_GASRC10_NEW_CON8:
+	case AFE_GASRC10_NEW_CON9:
+	case AFE_GASRC10_NEW_CON12:
+	case AFE_GASRC11_NEW_CON8:
+	case AFE_GASRC11_NEW_CON9:
+	case AFE_GASRC11_NEW_CON12:
+		return true;
+	default:
+		return false;
+	};
+}
+
+static const struct regmap_config mt8188_afe_regmap_config = {
+	.reg_bits = 32,
+	.reg_stride = 4,
+	.val_bits = 32,
+	.volatile_reg = mt8188_is_volatile_reg,
+	.max_register = AFE_MAX_REGISTER,
+	.num_reg_defaults_raw = ((AFE_MAX_REGISTER / 4) + 1),
+	.cache_type = REGCACHE_FLAT,
+};
+
+#define AFE_IRQ_CLR_BITS (0x387)
+#define ASYS_IRQ_CLR_BITS (0xffff)
+
+static irqreturn_t mt8188_afe_irq_handler(int irq_id, void *dev_id)
+{
+	struct mtk_base_afe *afe = dev_id;
+	unsigned int val = 0;
+	unsigned int asys_irq_clr_bits = 0;
+	unsigned int afe_irq_clr_bits = 0;
+	unsigned int irq_status_bits = 0;
+	unsigned int irq_clr_bits = 0;
+	unsigned int mcu_irq_mask = 0;
+	int i = 0;
+	int ret = 0;
+
+	ret = regmap_read(afe->regmap, AFE_IRQ_STATUS, &val);
+	if (ret) {
+		dev_err(afe->dev, "%s irq status err\n", __func__);
+		afe_irq_clr_bits = AFE_IRQ_CLR_BITS;
+		asys_irq_clr_bits = ASYS_IRQ_CLR_BITS;
+		goto err_irq;
+	}
+
+	ret = regmap_read(afe->regmap, AFE_IRQ_MASK, &mcu_irq_mask);
+	if (ret) {
+		dev_err(afe->dev, "%s read irq mask err\n", __func__);
+		afe_irq_clr_bits = AFE_IRQ_CLR_BITS;
+		asys_irq_clr_bits = ASYS_IRQ_CLR_BITS;
+		goto err_irq;
+	}
+
+	/* only clr cpu irq */
+	val &= mcu_irq_mask;
+
+	for (i = 0; i < MT8188_AFE_MEMIF_NUM; i++) {
+		struct mtk_base_afe_memif *memif = &afe->memif[i];
+		struct mtk_base_irq_data const *irq_data;
+
+		if (memif->irq_usage < 0)
+			continue;
+
+		irq_data = afe->irqs[memif->irq_usage].irq_data;
+
+		irq_status_bits = BIT(irq_data->irq_status_shift);
+		irq_clr_bits = BIT(irq_data->irq_clr_shift);
+
+		if (!(val & irq_status_bits))
+			continue;
+
+		if (irq_data->irq_clr_reg == ASYS_IRQ_CLR)
+			asys_irq_clr_bits |= irq_clr_bits;
+		else
+			afe_irq_clr_bits |= irq_clr_bits;
+
+		snd_pcm_period_elapsed(memif->substream);
+	}
+
+err_irq:
+	/* clear irq */
+	if (asys_irq_clr_bits)
+		regmap_write(afe->regmap, ASYS_IRQ_CLR, asys_irq_clr_bits);
+	if (afe_irq_clr_bits)
+		regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, afe_irq_clr_bits);
+
+	return IRQ_HANDLED;
+}
+
+static int mt8188_afe_runtime_suspend(struct device *dev)
+{
+	struct mtk_base_afe *afe = dev_get_drvdata(dev);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)
+		goto skip_regmap;
+
+	mt8188_afe_disable_main_clock(afe);
+
+	regcache_cache_only(afe->regmap, true);
+	regcache_mark_dirty(afe->regmap);
+
+skip_regmap:
+	mt8188_afe_disable_reg_rw_clk(afe);
+
+	return 0;
+}
+
+static int mt8188_afe_runtime_resume(struct device *dev)
+{
+	struct mtk_base_afe *afe = dev_get_drvdata(dev);
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct arm_smccc_res res;
+
+	arm_smccc_smc(MTK_SIP_AUDIO_CONTROL,
+		      MTK_AUDIO_SMC_OP_DOMAIN_SIDEBANDS,
+		      0, 0, 0, 0, 0, 0, &res);
+
+	mt8188_afe_enable_reg_rw_clk(afe);
+
+	if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)
+		goto skip_regmap;
+
+	regcache_cache_only(afe->regmap, false);
+	regcache_sync(afe->regmap);
+
+	mt8188_afe_enable_main_clock(afe);
+skip_regmap:
+	return 0;
+}
+
+static int mt8188_afe_component_probe(struct snd_soc_component *component)
+{
+	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
+	int ret;
+
+	snd_soc_component_init_regmap(component, afe->regmap);
+
+	ret = mtk_afe_add_sub_dai_control(component);
+
+	return ret;
+}
+
+static const struct snd_soc_component_driver mt8188_afe_component = {
+	.name = AFE_PCM_NAME,
+	.pointer       = mtk_afe_pcm_pointer,
+	.pcm_construct = mtk_afe_pcm_new,
+	.probe         = mt8188_afe_component_probe,
+};
+
+static int init_memif_priv_data(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	struct mtk_dai_memif_priv *memif_priv;
+	int i;
+
+	for (i = MT8188_AFE_MEMIF_START; i < MT8188_AFE_MEMIF_END; i++) {
+		memif_priv = devm_kzalloc(afe->dev,
+					  sizeof(struct mtk_dai_memif_priv),
+					  GFP_KERNEL);
+		if (!memif_priv)
+			return -ENOMEM;
+
+		afe_priv->dai_priv[i] = memif_priv;
+	}
+
+	return 0;
+}
+
+static int mt8188_dai_memif_register(struct mtk_base_afe *afe)
+{
+	struct mtk_base_afe_dai *dai;
+
+	dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
+	if (!dai)
+		return -ENOMEM;
+
+	list_add(&dai->list, &afe->sub_dais);
+
+	dai->dai_drivers = mt8188_memif_dai_driver;
+	dai->num_dai_drivers = ARRAY_SIZE(mt8188_memif_dai_driver);
+
+	dai->dapm_widgets = mt8188_memif_widgets;
+	dai->num_dapm_widgets = ARRAY_SIZE(mt8188_memif_widgets);
+	dai->dapm_routes = mt8188_memif_routes;
+	dai->num_dapm_routes = ARRAY_SIZE(mt8188_memif_routes);
+
+	return init_memif_priv_data(afe);
+}
+
+typedef int (*dai_register_cb)(struct mtk_base_afe *);
+static const dai_register_cb dai_register_cbs[] = {
+	mt8188_dai_adda_register,
+	mt8188_dai_etdm_register,
+	mt8188_dai_pcm_register,
+	mt8188_dai_memif_register,
+};
+
+static const struct reg_sequence mt8188_afe_reg_defaults[] = {
+	{ AFE_IRQ_MASK, 0x387ffff },
+	{ AFE_IRQ3_CON, BIT(30) },
+	{ AFE_IRQ9_CON, BIT(30) },
+	{ ETDM_IN1_CON4, 0x12000100 },
+	{ ETDM_IN2_CON4, 0x12000100 },
+};
+
+static const struct reg_sequence mt8188_cg_patch[] = {
+	{ AUDIO_TOP_CON0, 0xfffffffb },
+	{ AUDIO_TOP_CON1, 0xfffffff8 },
+};
+
+static int mt8188_afe_init_registers(struct mtk_base_afe *afe)
+{
+	return regmap_multi_reg_write(afe->regmap,
+				      mt8188_afe_reg_defaults,
+				      ARRAY_SIZE(mt8188_afe_reg_defaults));
+}
+
+static int mt8188_afe_parse_of(struct mtk_base_afe *afe,
+			       struct device_node *np)
+{
+#if IS_ENABLED(CONFIG_SND_SOC_MT6359)
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	afe_priv->topckgen = syscon_regmap_lookup_by_phandle(afe->dev->of_node,
+							     "mediatek,topckgen");
+	if (IS_ERR(afe_priv->topckgen))
+		return dev_err_probe(afe->dev,  PTR_ERR(afe_priv->topckgen),
+				     "%s() Cannot find topckgen controller\n",
+				     __func__);
+#endif
+	return 0;
+}
+
+static int mt8188_afe_pcm_dev_probe(struct platform_device *pdev)
+{
+	struct mtk_base_afe *afe;
+	struct mt8188_afe_private *afe_priv;
+	struct device *dev;
+	int i, irq_id, ret;
+	struct snd_soc_component *component;
+	struct reset_control *rstc;
+
+	ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(33));
+	if (ret)
+		return ret;
+
+	afe = devm_kzalloc(&pdev->dev, sizeof(*afe), GFP_KERNEL);
+	if (!afe)
+		return -ENOMEM;
+
+	afe->platform_priv = devm_kzalloc(&pdev->dev, sizeof(*afe_priv),
+					  GFP_KERNEL);
+	if (!afe->platform_priv)
+		return -ENOMEM;
+
+	afe_priv = afe->platform_priv;
+	afe->dev = &pdev->dev;
+	dev = afe->dev;
+
+	afe->base_addr = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(afe->base_addr))
+		return dev_err_probe(dev, PTR_ERR(afe->base_addr),
+				     "AFE base_addr not found\n");
+
+	/* reset controller to reset audio regs before regmap cache */
+	rstc = devm_reset_control_get_exclusive(dev, "audiosys");
+	if (IS_ERR(rstc))
+		return dev_err_probe(dev, PTR_ERR(rstc),
+				     "could not get audiosys reset\n");
+
+	ret = reset_control_reset(rstc);
+	if (ret) {
+		dev_err(dev, "failed to trigger audio reset:%d\n", ret);
+		return ret;
+	}
+
+	/* initial audio related clock */
+	ret = mt8188_afe_init_clock(afe);
+	if (ret)
+		return dev_err_probe(dev, ret, "init clock error");
+
+	ret = devm_add_action_or_reset(dev, mt8188_afe_deinit_clock, (void *)afe);
+	if (ret)
+		return ret;
+
+	spin_lock_init(&afe_priv->afe_ctrl_lock);
+
+	mutex_init(&afe->irq_alloc_lock);
+
+	/* irq initialize */
+	afe->irqs_size = MT8188_AFE_IRQ_NUM;
+	afe->irqs = devm_kcalloc(dev, afe->irqs_size, sizeof(*afe->irqs),
+				 GFP_KERNEL);
+	if (!afe->irqs)
+		return -ENOMEM;
+
+	for (i = 0; i < afe->irqs_size; i++)
+		afe->irqs[i].irq_data = &irq_data[i];
+
+	/* init memif */
+	afe->memif_size = MT8188_AFE_MEMIF_NUM;
+	afe->memif = devm_kcalloc(dev, afe->memif_size, sizeof(*afe->memif),
+				  GFP_KERNEL);
+	if (!afe->memif)
+		return -ENOMEM;
+
+	for (i = 0; i < afe->memif_size; i++) {
+		afe->memif[i].data = &memif_data[i];
+		afe->memif[i].irq_usage = mt8188_afe_memif_const_irqs[i];
+		afe->memif[i].const_irq = 1;
+		afe->irqs[afe->memif[i].irq_usage].irq_occupyed = true;
+	}
+
+	/* request irq */
+	irq_id = platform_get_irq(pdev, 0);
+	if (irq_id < 0)
+		return dev_err_probe(dev, irq_id < 0 ? irq_id : -ENXIO,
+				     "no irq found");
+
+	ret = devm_request_irq(dev, irq_id, mt8188_afe_irq_handler,
+			       IRQF_TRIGGER_NONE, "asys-isr", (void *)afe);
+	if (ret)
+		return dev_err_probe(dev, ret, "could not request_irq for asys-isr\n");
+
+	/* init sub_dais */
+	INIT_LIST_HEAD(&afe->sub_dais);
+
+	for (i = 0; i < ARRAY_SIZE(dai_register_cbs); i++) {
+		ret = dai_register_cbs[i](afe);
+		if (ret)
+			return dev_err_probe(dev, ret, "dai register i %d fail\n", i);
+	}
+
+	/* init dai_driver and component_driver */
+	ret = mtk_afe_combine_sub_dai(afe);
+	if (ret)
+		return dev_err_probe(dev, ret, "mtk_afe_combine_sub_dai fail\n");
+
+	afe->mtk_afe_hardware = &mt8188_afe_hardware;
+	afe->memif_fs = mt8188_memif_fs;
+	afe->irq_fs = mt8188_irq_fs;
+
+	afe->runtime_resume = mt8188_afe_runtime_resume;
+	afe->runtime_suspend = mt8188_afe_runtime_suspend;
+
+	platform_set_drvdata(pdev, afe);
+
+	ret = mt8188_afe_parse_of(afe, pdev->dev.of_node);
+	if (ret)
+		return ret;
+
+	ret = devm_pm_runtime_enable(dev);
+	if (ret)
+		return ret;
+
+	/* enable clock for regcache get default value from hw */
+	afe_priv->pm_runtime_bypass_reg_ctl = true;
+	ret = pm_runtime_resume_and_get(dev);
+	if (ret)
+		return dev_err_probe(dev, ret, "failed to resume device\n");
+
+	afe->regmap = devm_regmap_init_mmio(&pdev->dev, afe->base_addr,
+					    &mt8188_afe_regmap_config);
+	if (IS_ERR(afe->regmap)) {
+		ret = PTR_ERR(afe->regmap);
+		goto err_pm_put;
+	}
+
+	ret = regmap_register_patch(afe->regmap, mt8188_cg_patch,
+				    ARRAY_SIZE(mt8188_cg_patch));
+	if (ret < 0) {
+		dev_info(dev, "Failed to apply cg patch\n");
+		goto err_pm_put;
+	}
+
+	/* register component */
+	ret = devm_snd_soc_register_component(dev, &mt8188_afe_component,
+					      NULL, 0);
+	if (ret) {
+		dev_warn(dev, "err_platform\n");
+		goto err_pm_put;
+	}
+
+	component = devm_kzalloc(&pdev->dev, sizeof(*component), GFP_KERNEL);
+	if (!component) {
+		ret = -ENOMEM;
+		goto err_pm_put;
+	}
+
+	ret = snd_soc_component_initialize(component,
+					   &mt8188_afe_pcm_dai_component,
+					   &pdev->dev);
+	if (ret)
+		goto err_pm_put;
+#ifdef CONFIG_DEBUG_FS
+	component->debugfs_prefix = "pcm";
+#endif
+	ret = snd_soc_add_component(component,
+				    afe->dai_drivers,
+				    afe->num_dai_drivers);
+	if (ret) {
+		dev_warn(dev, "err_add_component\n");
+		goto err_pm_put;
+	}
+
+	mt8188_afe_init_registers(afe);
+
+	pm_runtime_put_sync(&pdev->dev);
+	afe_priv->pm_runtime_bypass_reg_ctl = false;
+
+	regcache_cache_only(afe->regmap, true);
+	regcache_mark_dirty(afe->regmap);
+
+	return 0;
+err_pm_put:
+	pm_runtime_put_sync(dev);
+
+	return ret;
+}
+
+static int mt8188_afe_pcm_dev_remove(struct platform_device *pdev)
+{
+	snd_soc_unregister_component(&pdev->dev);
+
+	return 0;
+}
+
+static const struct of_device_id mt8188_afe_pcm_dt_match[] = {
+	{ .compatible = "mediatek,mt8188-afe", },
+	{},
+};
+MODULE_DEVICE_TABLE(of, mt8188_afe_pcm_dt_match);
+
+static const struct dev_pm_ops mt8188_afe_pm_ops = {
+	SET_RUNTIME_PM_OPS(mt8188_afe_runtime_suspend,
+			   mt8188_afe_runtime_resume, NULL)
+};
+
+static struct platform_driver mt8188_afe_pcm_driver = {
+	.driver = {
+		   .name = "mt8188-audio",
+		   .of_match_table = mt8188_afe_pcm_dt_match,
+		   .pm = &mt8188_afe_pm_ops,
+	},
+	.probe = mt8188_afe_pcm_dev_probe,
+	.remove = mt8188_afe_pcm_dev_remove,
+};
+
+module_platform_driver(mt8188_afe_pcm_driver);
+
+MODULE_DESCRIPTION("MediaTek SoC AFE platform driver for ALSA 8188");
+MODULE_AUTHOR("Chun-Chia.Chiu <chun-chia.chiu at mediatek.com>");
+MODULE_LICENSE("GPL");
-- 
2.18.0



From trevor.wu at mediatek.com  Thu Dec 29 21:54:31 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:31 +0800
Subject: [PATCH v4 01/13] ASoC: mediatek: common: add SMC ops and SMC CMD
In-Reply-To: <20221230055443.16024-1-trevor.wu@mediatek.com>
References: <20221230055443.16024-1-trevor.wu@mediatek.com>
Message-ID: <20221230055443.16024-2-trevor.wu@mediatek.com>

SMC call is required to communicate with ATF for some secure operations,
so we add SMC ops IDs and SMC CMD ID to common header.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 sound/soc/mediatek/common/mtk-base-afe.h | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/sound/soc/mediatek/common/mtk-base-afe.h b/sound/soc/mediatek/common/mtk-base-afe.h
index ef83e78c22a8..f51578b6c50a 100644
--- a/sound/soc/mediatek/common/mtk-base-afe.h
+++ b/sound/soc/mediatek/common/mtk-base-afe.h
@@ -9,7 +9,26 @@
 #ifndef _MTK_BASE_AFE_H_
 #define _MTK_BASE_AFE_H_
 
+#include <linux/soc/mediatek/mtk_sip_svc.h>
+
 #define MTK_STREAM_NUM (SNDRV_PCM_STREAM_LAST + 1)
+#define MTK_SIP_AUDIO_CONTROL MTK_SIP_SMC_CMD(0x517)
+
+/* SMC CALL Operations */
+enum mtk_audio_smc_call_op {
+	MTK_AUDIO_SMC_OP_INIT = 0,
+	MTK_AUDIO_SMC_OP_DRAM_REQUEST,
+	MTK_AUDIO_SMC_OP_DRAM_RELEASE,
+	MTK_AUDIO_SMC_OP_SRAM_REQUEST,
+	MTK_AUDIO_SMC_OP_SRAM_RELEASE,
+	MTK_AUDIO_SMC_OP_ADSP_REQUEST,
+	MTK_AUDIO_SMC_OP_ADSP_RELEASE,
+	MTK_AUDIO_SMC_OP_DOMAIN_SIDEBANDS,
+	MTK_AUDIO_SMC_OP_BTCVSD_WRITE,
+	MTK_AUDIO_SMC_OP_BTCVSD_UPDATE_CTRL_CLEAR,
+	MTK_AUDIO_SMC_OP_BTCVSD_UPDATE_CTRL_UNDERFLOW,
+	MTK_AUDIO_SMC_OP_NUM
+};
 
 struct mtk_base_memif_data {
 	int id;
-- 
2.18.0



From trevor.wu at mediatek.com  Thu Dec 29 21:54:30 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:30 +0800
Subject: [PATCH v4 00/13] ASoC: mediatek: Add support for MT8188 SoC
Message-ID: <20221230055443.16024-1-trevor.wu@mediatek.com>

This series of patches adds support for Mediatek AFE of MT8188 SoC.
Patches are based on broonie tree "for-next" branch.

Changes since v3:
  - replace apll_ck with apll to sync with the relationship in CCF
  - add mtk-soundcard-driver.c to support codec parsing
  - drop mclk-always-on-rates support in mt8188-dai-etdm.c
  - refine dt-binding files based on reviewer's suggestions

Changes since v2:
  - drop CLK_IGNORE_UNUSED flag
  - include bitfield.h to reslove the issue reported by kernel test robot
  - rename mt8188-afe-pcm.yaml to mt8188-afe.yaml
  - refine dt-binding files based on reviewer's suggestions

Changes since v1:
  - remove bus protection functions in case of unmerged dependency problem
  - replace some bit operation macro with FIELD_PREP
  - simplify register control by regmap_set_bits and regmap_clear_bits
  - fix dt-binding errors
  - rename compatible string for recognition

Trevor Wu (13):
  ASoC: mediatek: common: add SMC ops and SMC CMD
  ASoC: mediatek: mt8188: add common header
  ASoC: mediatek: mt8188: support audsys clock
  ASoC: mediatek: mt8188: support adda in platform driver
  ASoC: mediatek: mt8188: support etdm in platform driver
  ASoC: mediatek: mt8188: support pcmif in platform driver
  ASoC: mediatek: mt8188: support audio clock control
  ASoC: mediatek: mt8188: add platform driver
  ASoC: mediatek: mt8188: add control for timing select
  dt-bindings: mediatek: mt8188: add audio afe document
  ASoC: mediatek: common: add soundcard driver common code
  ASoC: mediatek: mt8188: add machine driver with mt6359
  dt-bindings: mediatek: mt8188: add mt8188-mt6359 document

 .../bindings/sound/mediatek,mt8188-afe.yaml   |  208 +
 .../sound/mediatek,mt8188-mt6359.yaml         |   93 +
 sound/soc/mediatek/Kconfig                    |   23 +
 sound/soc/mediatek/Makefile                   |    1 +
 sound/soc/mediatek/common/Makefile            |    2 +-
 sound/soc/mediatek/common/mtk-base-afe.h      |   19 +
 .../mediatek/common/mtk-soundcard-driver.c    |   79 +
 .../mediatek/common/mtk-soundcard-driver.h    |   14 +
 sound/soc/mediatek/mt8188/Makefile            |   15 +
 sound/soc/mediatek/mt8188/mt8188-afe-clk.c    |  658 ++++
 sound/soc/mediatek/mt8188/mt8188-afe-clk.h    |  115 +
 sound/soc/mediatek/mt8188/mt8188-afe-common.h |  151 +
 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c    | 3359 +++++++++++++++++
 sound/soc/mediatek/mt8188/mt8188-audsys-clk.c |  205 +
 sound/soc/mediatek/mt8188/mt8188-audsys-clk.h |   15 +
 .../soc/mediatek/mt8188/mt8188-audsys-clkid.h |   83 +
 sound/soc/mediatek/mt8188/mt8188-dai-adda.c   |  632 ++++
 sound/soc/mediatek/mt8188/mt8188-dai-etdm.c   | 2591 +++++++++++++
 sound/soc/mediatek/mt8188/mt8188-dai-pcm.c    |  367 ++
 sound/soc/mediatek/mt8188/mt8188-mt6359.c     |  785 ++++
 sound/soc/mediatek/mt8188/mt8188-reg.h        | 3180 ++++++++++++++++
 21 files changed, 12594 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/sound/mediatek,mt8188-afe.yaml
 create mode 100644 Documentation/devicetree/bindings/sound/mediatek,mt8188-mt6359.yaml
 create mode 100644 sound/soc/mediatek/common/mtk-soundcard-driver.c
 create mode 100644 sound/soc/mediatek/common/mtk-soundcard-driver.h
 create mode 100644 sound/soc/mediatek/mt8188/Makefile
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-clk.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-clk.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-common.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clk.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-audsys-clkid.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-adda.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-dai-pcm.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-mt6359.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-reg.h

-- 
2.18.0



From trevor.wu at mediatek.com  Thu Dec 29 21:54:37 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:37 +0800
Subject: [PATCH v4 07/13] ASoC: mediatek: mt8188: support audio clock control
In-Reply-To: <20221230055443.16024-1-trevor.wu@mediatek.com>
References: <20221230055443.16024-1-trevor.wu@mediatek.com>
Message-ID: <20221230055443.16024-8-trevor.wu@mediatek.com>

Add audio clock wrapper and audio tuner control.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
I don't add Reviewed-by tag because clock names were updated
in accordance with the latest relationship in CCF.
---
 sound/soc/mediatek/mt8188/mt8188-afe-clk.c | 658 +++++++++++++++++++++
 sound/soc/mediatek/mt8188/mt8188-afe-clk.h | 115 ++++
 2 files changed, 773 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-clk.c
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-clk.h

diff --git a/sound/soc/mediatek/mt8188/mt8188-afe-clk.c b/sound/soc/mediatek/mt8188/mt8188-afe-clk.c
new file mode 100644
index 000000000000..743d6a162cb9
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-afe-clk.c
@@ -0,0 +1,658 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * mt8188-afe-clk.c  --  MediaTek 8188 afe clock ctrl
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#include <linux/clk.h>
+
+#include "mt8188-afe-common.h"
+#include "mt8188-afe-clk.h"
+#include "mt8188-audsys-clk.h"
+#include "mt8188-reg.h"
+
+static const char *aud_clks[MT8188_CLK_NUM] = {
+	/* xtal */
+	[MT8188_CLK_XTAL_26M] = "clk26m",
+
+	/* pll */
+	[MT8188_CLK_APMIXED_APLL1] = "apll1",
+	[MT8188_CLK_APMIXED_APLL2] = "apll2",
+
+	/* divider */
+	[MT8188_CLK_TOP_APLL12_DIV0] = "apll12_div0",
+	[MT8188_CLK_TOP_APLL12_DIV1] = "apll12_div1",
+	[MT8188_CLK_TOP_APLL12_DIV2] = "apll12_div2",
+	[MT8188_CLK_TOP_APLL12_DIV3] = "apll12_div3",
+	[MT8188_CLK_TOP_APLL12_DIV9] = "apll12_div9",
+
+	/* mux */
+	[MT8188_CLK_TOP_A1SYS_HP_SEL] = "top_a1sys_hp",
+	[MT8188_CLK_TOP_AUD_INTBUS_SEL] = "top_aud_intbus",
+	[MT8188_CLK_TOP_AUDIO_H_SEL] = "top_audio_h",
+	[MT8188_CLK_TOP_AUDIO_LOCAL_BUS_SEL] = "top_audio_local_bus",
+	[MT8188_CLK_TOP_DPTX_M_SEL] = "top_dptx",
+	[MT8188_CLK_TOP_I2SO1_M_SEL] = "top_i2so1",
+	[MT8188_CLK_TOP_I2SO2_M_SEL] = "top_i2so2",
+	[MT8188_CLK_TOP_I2SI1_M_SEL] = "top_i2si1",
+	[MT8188_CLK_TOP_I2SI2_M_SEL] = "top_i2si2",
+
+	/* clock gate */
+	[MT8188_CLK_ADSP_AUDIO_26M] = "adsp_audio_26m",
+	/* afe clock gate */
+	[MT8188_CLK_AUD_AFE] = "aud_afe",
+	[MT8188_CLK_AUD_APLL1_TUNER] = "aud_apll1_tuner",
+	[MT8188_CLK_AUD_APLL2_TUNER] = "aud_apll2_tuner",
+	[MT8188_CLK_AUD_APLL] = "aud_apll",
+	[MT8188_CLK_AUD_APLL2] = "aud_apll2",
+	[MT8188_CLK_AUD_DAC] = "aud_dac",
+	[MT8188_CLK_AUD_ADC] = "aud_adc",
+	[MT8188_CLK_AUD_DAC_HIRES] = "aud_dac_hires",
+	[MT8188_CLK_AUD_A1SYS_HP] = "aud_a1sys_hp",
+	[MT8188_CLK_AUD_ADC_HIRES] = "aud_adc_hires",
+	[MT8188_CLK_AUD_I2SIN] = "aud_i2sin",
+	[MT8188_CLK_AUD_TDM_IN] = "aud_tdm_in",
+	[MT8188_CLK_AUD_I2S_OUT] = "aud_i2s_out",
+	[MT8188_CLK_AUD_TDM_OUT] = "aud_tdm_out",
+	[MT8188_CLK_AUD_HDMI_OUT] = "aud_hdmi_out",
+	[MT8188_CLK_AUD_ASRC11] = "aud_asrc11",
+	[MT8188_CLK_AUD_ASRC12] = "aud_asrc12",
+	[MT8188_CLK_AUD_A1SYS] = "aud_a1sys",
+	[MT8188_CLK_AUD_A2SYS] = "aud_a2sys",
+	[MT8188_CLK_AUD_PCMIF] = "aud_pcmif",
+	[MT8188_CLK_AUD_MEMIF_UL1] = "aud_memif_ul1",
+	[MT8188_CLK_AUD_MEMIF_UL2] = "aud_memif_ul2",
+	[MT8188_CLK_AUD_MEMIF_UL3] = "aud_memif_ul3",
+	[MT8188_CLK_AUD_MEMIF_UL4] = "aud_memif_ul4",
+	[MT8188_CLK_AUD_MEMIF_UL5] = "aud_memif_ul5",
+	[MT8188_CLK_AUD_MEMIF_UL6] = "aud_memif_ul6",
+	[MT8188_CLK_AUD_MEMIF_UL8] = "aud_memif_ul8",
+	[MT8188_CLK_AUD_MEMIF_UL9] = "aud_memif_ul9",
+	[MT8188_CLK_AUD_MEMIF_UL10] = "aud_memif_ul10",
+	[MT8188_CLK_AUD_MEMIF_DL2] = "aud_memif_dl2",
+	[MT8188_CLK_AUD_MEMIF_DL3] = "aud_memif_dl3",
+	[MT8188_CLK_AUD_MEMIF_DL6] = "aud_memif_dl6",
+	[MT8188_CLK_AUD_MEMIF_DL7] = "aud_memif_dl7",
+	[MT8188_CLK_AUD_MEMIF_DL8] = "aud_memif_dl8",
+	[MT8188_CLK_AUD_MEMIF_DL10] = "aud_memif_dl10",
+	[MT8188_CLK_AUD_MEMIF_DL11] = "aud_memif_dl11",
+};
+
+struct mt8188_afe_tuner_cfg {
+	unsigned int id;
+	int apll_div_reg;
+	unsigned int apll_div_shift;
+	unsigned int apll_div_maskbit;
+	unsigned int apll_div_default;
+	int ref_ck_sel_reg;
+	unsigned int ref_ck_sel_shift;
+	unsigned int ref_ck_sel_maskbit;
+	unsigned int ref_ck_sel_default;
+	int tuner_en_reg;
+	unsigned int tuner_en_shift;
+	unsigned int tuner_en_maskbit;
+	int upper_bound_reg;
+	unsigned int upper_bound_shift;
+	unsigned int upper_bound_maskbit;
+	unsigned int upper_bound_default;
+	spinlock_t ctrl_lock; /* lock for apll tuner ctrl*/
+	int ref_cnt;
+};
+
+static struct mt8188_afe_tuner_cfg
+	mt8188_afe_tuner_cfgs[MT8188_AUD_PLL_NUM] = {
+	[MT8188_AUD_PLL1] = {
+		.id = MT8188_AUD_PLL1,
+		.apll_div_reg = AFE_APLL_TUNER_CFG,
+		.apll_div_shift = 4,
+		.apll_div_maskbit = 0xf,
+		.apll_div_default = 0x7,
+		.ref_ck_sel_reg = AFE_APLL_TUNER_CFG,
+		.ref_ck_sel_shift = 1,
+		.ref_ck_sel_maskbit = 0x3,
+		.ref_ck_sel_default = 0x2,
+		.tuner_en_reg = AFE_APLL_TUNER_CFG,
+		.tuner_en_shift = 0,
+		.tuner_en_maskbit = 0x1,
+		.upper_bound_reg = AFE_APLL_TUNER_CFG,
+		.upper_bound_shift = 8,
+		.upper_bound_maskbit = 0xff,
+		.upper_bound_default = 0x3,
+	},
+	[MT8188_AUD_PLL2] = {
+		.id = MT8188_AUD_PLL2,
+		.apll_div_reg = AFE_APLL_TUNER_CFG1,
+		.apll_div_shift = 4,
+		.apll_div_maskbit = 0xf,
+		.apll_div_default = 0x7,
+		.ref_ck_sel_reg = AFE_APLL_TUNER_CFG1,
+		.ref_ck_sel_shift = 1,
+		.ref_ck_sel_maskbit = 0x3,
+		.ref_ck_sel_default = 0x1,
+		.tuner_en_reg = AFE_APLL_TUNER_CFG1,
+		.tuner_en_shift = 0,
+		.tuner_en_maskbit = 0x1,
+		.upper_bound_reg = AFE_APLL_TUNER_CFG1,
+		.upper_bound_shift = 8,
+		.upper_bound_maskbit = 0xff,
+		.upper_bound_default = 0x3,
+	},
+	[MT8188_AUD_PLL3] = {
+		.id = MT8188_AUD_PLL3,
+		.apll_div_reg = AFE_EARC_APLL_TUNER_CFG,
+		.apll_div_shift = 4,
+		.apll_div_maskbit = 0x3f,
+		.apll_div_default = 0x3,
+		.ref_ck_sel_reg = AFE_EARC_APLL_TUNER_CFG,
+		.ref_ck_sel_shift = 24,
+		.ref_ck_sel_maskbit = 0x3,
+		.ref_ck_sel_default = 0x0,
+		.tuner_en_reg = AFE_EARC_APLL_TUNER_CFG,
+		.tuner_en_shift = 0,
+		.tuner_en_maskbit = 0x1,
+		.upper_bound_reg = AFE_EARC_APLL_TUNER_CFG,
+		.upper_bound_shift = 12,
+		.upper_bound_maskbit = 0xff,
+		.upper_bound_default = 0x4,
+	},
+	[MT8188_AUD_PLL4] = {
+		.id = MT8188_AUD_PLL4,
+		.apll_div_reg = AFE_SPDIFIN_APLL_TUNER_CFG,
+		.apll_div_shift = 4,
+		.apll_div_maskbit = 0x3f,
+		.apll_div_default = 0x7,
+		.ref_ck_sel_reg = AFE_SPDIFIN_APLL_TUNER_CFG1,
+		.ref_ck_sel_shift = 8,
+		.ref_ck_sel_maskbit = 0x1,
+		.ref_ck_sel_default = 0,
+		.tuner_en_reg = AFE_SPDIFIN_APLL_TUNER_CFG,
+		.tuner_en_shift = 0,
+		.tuner_en_maskbit = 0x1,
+		.upper_bound_reg = AFE_SPDIFIN_APLL_TUNER_CFG,
+		.upper_bound_shift = 12,
+		.upper_bound_maskbit = 0xff,
+		.upper_bound_default = 0x4,
+	},
+	[MT8188_AUD_PLL5] = {
+		.id = MT8188_AUD_PLL5,
+		.apll_div_reg = AFE_LINEIN_APLL_TUNER_CFG,
+		.apll_div_shift = 4,
+		.apll_div_maskbit = 0x3f,
+		.apll_div_default = 0x3,
+		.ref_ck_sel_reg = AFE_LINEIN_APLL_TUNER_CFG,
+		.ref_ck_sel_shift = 24,
+		.ref_ck_sel_maskbit = 0x1,
+		.ref_ck_sel_default = 0,
+		.tuner_en_reg = AFE_LINEIN_APLL_TUNER_CFG,
+		.tuner_en_shift = 0,
+		.tuner_en_maskbit = 0x1,
+		.upper_bound_reg = AFE_LINEIN_APLL_TUNER_CFG,
+		.upper_bound_shift = 12,
+		.upper_bound_maskbit = 0xff,
+		.upper_bound_default = 0x4,
+	},
+};
+
+static struct mt8188_afe_tuner_cfg *mt8188_afe_found_apll_tuner(unsigned int id)
+{
+	if (id >= MT8188_AUD_PLL_NUM)
+		return NULL;
+
+	return &mt8188_afe_tuner_cfgs[id];
+}
+
+static int mt8188_afe_init_apll_tuner(unsigned int id)
+{
+	struct mt8188_afe_tuner_cfg *cfg = mt8188_afe_found_apll_tuner(id);
+
+	if (!cfg)
+		return -EINVAL;
+
+	cfg->ref_cnt = 0;
+	spin_lock_init(&cfg->ctrl_lock);
+
+	return 0;
+}
+
+static int mt8188_afe_setup_apll_tuner(struct mtk_base_afe *afe, unsigned int id)
+{
+	const struct mt8188_afe_tuner_cfg *cfg = mt8188_afe_found_apll_tuner(id);
+
+	if (!cfg)
+		return -EINVAL;
+
+	regmap_update_bits(afe->regmap,
+			   cfg->apll_div_reg,
+			   cfg->apll_div_maskbit << cfg->apll_div_shift,
+			   cfg->apll_div_default << cfg->apll_div_shift);
+
+	regmap_update_bits(afe->regmap,
+			   cfg->ref_ck_sel_reg,
+			   cfg->ref_ck_sel_maskbit << cfg->ref_ck_sel_shift,
+			   cfg->ref_ck_sel_default << cfg->ref_ck_sel_shift);
+
+	regmap_update_bits(afe->regmap,
+			   cfg->upper_bound_reg,
+			   cfg->upper_bound_maskbit << cfg->upper_bound_shift,
+			   cfg->upper_bound_default << cfg->upper_bound_shift);
+
+	return 0;
+}
+
+static int mt8188_afe_enable_tuner_clk(struct mtk_base_afe *afe,
+				       unsigned int id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	switch (id) {
+	case MT8188_AUD_PLL1:
+		mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL]);
+		mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL1_TUNER]);
+		break;
+	case MT8188_AUD_PLL2:
+		mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL2]);
+		mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL2_TUNER]);
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int mt8188_afe_disable_tuner_clk(struct mtk_base_afe *afe,
+					unsigned int id)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	switch (id) {
+	case MT8188_AUD_PLL1:
+		mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL1_TUNER]);
+		mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL]);
+		break;
+	case MT8188_AUD_PLL2:
+		mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL2_TUNER]);
+		mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_APLL2]);
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int mt8188_afe_enable_apll_tuner(struct mtk_base_afe *afe, unsigned int id)
+{
+	struct mt8188_afe_tuner_cfg *cfg = mt8188_afe_found_apll_tuner(id);
+	unsigned long flags;
+	int ret;
+
+	if (!cfg)
+		return -EINVAL;
+
+	ret = mt8188_afe_setup_apll_tuner(afe, id);
+	if (ret)
+		return ret;
+
+	ret = mt8188_afe_enable_tuner_clk(afe, id);
+	if (ret)
+		return ret;
+
+	spin_lock_irqsave(&cfg->ctrl_lock, flags);
+
+	cfg->ref_cnt++;
+	if (cfg->ref_cnt == 1)
+		regmap_update_bits(afe->regmap,
+				   cfg->tuner_en_reg,
+				   cfg->tuner_en_maskbit << cfg->tuner_en_shift,
+				   BIT(cfg->tuner_en_shift));
+
+	spin_unlock_irqrestore(&cfg->ctrl_lock, flags);
+
+	return 0;
+}
+
+static int mt8188_afe_disable_apll_tuner(struct mtk_base_afe *afe, unsigned int id)
+{
+	struct mt8188_afe_tuner_cfg *cfg = mt8188_afe_found_apll_tuner(id);
+	unsigned long flags;
+	int ret;
+
+	if (!cfg)
+		return -EINVAL;
+
+	spin_lock_irqsave(&cfg->ctrl_lock, flags);
+
+	cfg->ref_cnt--;
+	if (cfg->ref_cnt == 0)
+		regmap_update_bits(afe->regmap,
+				   cfg->tuner_en_reg,
+				   cfg->tuner_en_maskbit << cfg->tuner_en_shift,
+				   0 << cfg->tuner_en_shift);
+	else if (cfg->ref_cnt < 0)
+		cfg->ref_cnt = 0;
+
+	spin_unlock_irqrestore(&cfg->ctrl_lock, flags);
+
+	ret = mt8188_afe_disable_tuner_clk(afe, id);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+int mt8188_afe_get_mclk_source_clk_id(int sel)
+{
+	switch (sel) {
+	case MT8188_MCK_SEL_26M:
+		return MT8188_CLK_XTAL_26M;
+	case MT8188_MCK_SEL_APLL1:
+		return MT8188_CLK_APMIXED_APLL1;
+	case MT8188_MCK_SEL_APLL2:
+		return MT8188_CLK_APMIXED_APLL2;
+	default:
+		return -EINVAL;
+	}
+}
+
+int mt8188_afe_get_mclk_source_rate(struct mtk_base_afe *afe, int apll)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	int clk_id = mt8188_afe_get_mclk_source_clk_id(apll);
+
+	if (clk_id < 0) {
+		dev_dbg(afe->dev, "invalid clk id\n");
+		return 0;
+	}
+
+	return clk_get_rate(afe_priv->clk[clk_id]);
+}
+
+int mt8188_afe_get_default_mclk_source_by_rate(int rate)
+{
+	return ((rate % 8000) == 0) ?
+		MT8188_MCK_SEL_APLL1 : MT8188_MCK_SEL_APLL2;
+}
+
+int mt8188_afe_init_clock(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+	int i, ret;
+
+	ret = mt8188_audsys_clk_register(afe);
+	if (ret) {
+		dev_err(afe->dev, "register audsys clk fail %d\n", ret);
+		return ret;
+	}
+
+	afe_priv->clk =
+		devm_kcalloc(afe->dev, MT8188_CLK_NUM, sizeof(*afe_priv->clk),
+			     GFP_KERNEL);
+	if (!afe_priv->clk)
+		return -ENOMEM;
+
+	for (i = 0; i < MT8188_CLK_NUM; i++) {
+		afe_priv->clk[i] = devm_clk_get(afe->dev, aud_clks[i]);
+		if (IS_ERR(afe_priv->clk[i])) {
+			dev_err(afe->dev, "%s(), devm_clk_get %s fail, ret %ld\n",
+				__func__, aud_clks[i],
+				PTR_ERR(afe_priv->clk[i]));
+			return PTR_ERR(afe_priv->clk[i]);
+		}
+	}
+
+	/* initial tuner */
+	for (i = 0; i < MT8188_AUD_PLL_NUM; i++) {
+		ret = mt8188_afe_init_apll_tuner(i);
+		if (ret) {
+			dev_info(afe->dev, "%s(), init apll_tuner%d failed",
+				 __func__, (i + 1));
+			return -EINVAL;
+		}
+	}
+
+	return 0;
+}
+
+void mt8188_afe_deinit_clock(void *priv)
+{
+	struct mtk_base_afe *afe = priv;
+
+	mt8188_audsys_clk_unregister(afe);
+}
+
+int mt8188_afe_enable_clk(struct mtk_base_afe *afe, struct clk *clk)
+{
+	int ret;
+
+	if (clk) {
+		ret = clk_prepare_enable(clk);
+		if (ret) {
+			dev_dbg(afe->dev, "%s(), failed to enable clk\n",
+				__func__);
+			return ret;
+		}
+	} else {
+		dev_dbg(afe->dev, "NULL clk\n");
+	}
+	return 0;
+}
+EXPORT_SYMBOL_GPL(mt8188_afe_enable_clk);
+
+void mt8188_afe_disable_clk(struct mtk_base_afe *afe, struct clk *clk)
+{
+	if (clk)
+		clk_disable_unprepare(clk);
+	else
+		dev_dbg(afe->dev, "NULL clk\n");
+}
+EXPORT_SYMBOL_GPL(mt8188_afe_disable_clk);
+
+int mt8188_afe_set_clk_rate(struct mtk_base_afe *afe, struct clk *clk,
+			    unsigned int rate)
+{
+	int ret;
+
+	if (clk) {
+		ret = clk_set_rate(clk, rate);
+		if (ret) {
+			dev_dbg(afe->dev, "%s(), failed to set clk rate\n",
+				__func__);
+			return ret;
+		}
+	}
+
+	return 0;
+}
+
+int mt8188_afe_set_clk_parent(struct mtk_base_afe *afe, struct clk *clk,
+			      struct clk *parent)
+{
+	int ret;
+
+	if (clk && parent) {
+		ret = clk_set_parent(clk, parent);
+		if (ret) {
+			dev_dbg(afe->dev, "%s(), failed to set clk parent\n",
+				__func__);
+			return ret;
+		}
+	}
+
+	return 0;
+}
+
+static unsigned int get_top_cg_reg(unsigned int cg_type)
+{
+	switch (cg_type) {
+	case MT8188_TOP_CG_A1SYS_TIMING:
+	case MT8188_TOP_CG_A2SYS_TIMING:
+	case MT8188_TOP_CG_26M_TIMING:
+		return ASYS_TOP_CON;
+	default:
+		return 0;
+	}
+}
+
+static unsigned int get_top_cg_mask(unsigned int cg_type)
+{
+	switch (cg_type) {
+	case MT8188_TOP_CG_A1SYS_TIMING:
+		return ASYS_TOP_CON_A1SYS_TIMING_ON;
+	case MT8188_TOP_CG_A2SYS_TIMING:
+		return ASYS_TOP_CON_A2SYS_TIMING_ON;
+	case MT8188_TOP_CG_26M_TIMING:
+		return ASYS_TOP_CON_26M_TIMING_ON;
+	default:
+		return 0;
+	}
+}
+
+static unsigned int get_top_cg_on_val(unsigned int cg_type)
+{
+	switch (cg_type) {
+	case MT8188_TOP_CG_A1SYS_TIMING:
+	case MT8188_TOP_CG_A2SYS_TIMING:
+	case MT8188_TOP_CG_26M_TIMING:
+		return get_top_cg_mask(cg_type);
+	default:
+		return 0;
+	}
+}
+
+static unsigned int get_top_cg_off_val(unsigned int cg_type)
+{
+	switch (cg_type) {
+	case MT8188_TOP_CG_A1SYS_TIMING:
+	case MT8188_TOP_CG_A2SYS_TIMING:
+	case MT8188_TOP_CG_26M_TIMING:
+		return 0;
+	default:
+		return get_top_cg_mask(cg_type);
+	}
+}
+
+static int mt8188_afe_enable_top_cg(struct mtk_base_afe *afe, unsigned int cg_type)
+{
+	unsigned int reg = get_top_cg_reg(cg_type);
+	unsigned int mask = get_top_cg_mask(cg_type);
+	unsigned int val = get_top_cg_on_val(cg_type);
+
+	regmap_update_bits(afe->regmap, reg, mask, val);
+
+	return 0;
+}
+
+static int mt8188_afe_disable_top_cg(struct mtk_base_afe *afe, unsigned int cg_type)
+{
+	unsigned int reg = get_top_cg_reg(cg_type);
+	unsigned int mask = get_top_cg_mask(cg_type);
+	unsigned int val = get_top_cg_off_val(cg_type);
+
+	regmap_update_bits(afe->regmap, reg, mask, val);
+
+	return 0;
+}
+
+int mt8188_afe_enable_reg_rw_clk(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	/* bus clock for AFE external access, like DRAM */
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_TOP_AUDIO_LOCAL_BUS_SEL]);
+
+	/* bus clock for AFE internal access, like AFE SRAM */
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_TOP_AUD_INTBUS_SEL]);
+
+	/* audio 26m clock source */
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_ADSP_AUDIO_26M]);
+
+	/* AFE hw clock */
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_AFE]);
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A1SYS_HP]);
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A1SYS]);
+
+	return 0;
+}
+
+int mt8188_afe_disable_reg_rw_clk(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A1SYS]);
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A1SYS_HP]);
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_AFE]);
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_ADSP_AUDIO_26M]);
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_TOP_AUD_INTBUS_SEL]);
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_TOP_AUDIO_LOCAL_BUS_SEL]);
+
+	return 0;
+}
+
+static int mt8188_afe_enable_afe_on(struct mtk_base_afe *afe)
+{
+	regmap_update_bits(afe->regmap, AFE_DAC_CON0, 0x1, 0x1);
+	return 0;
+}
+
+static int mt8188_afe_disable_afe_on(struct mtk_base_afe *afe)
+{
+	regmap_update_bits(afe->regmap, AFE_DAC_CON0, 0x1, 0x0);
+	return 0;
+}
+
+static int mt8188_afe_enable_timing_sys(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A1SYS]);
+	mt8188_afe_enable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A2SYS]);
+
+	mt8188_afe_enable_top_cg(afe, MT8188_TOP_CG_A1SYS_TIMING);
+	mt8188_afe_enable_top_cg(afe, MT8188_TOP_CG_A2SYS_TIMING);
+	mt8188_afe_enable_top_cg(afe, MT8188_TOP_CG_26M_TIMING);
+
+	return 0;
+}
+
+static int mt8188_afe_disable_timing_sys(struct mtk_base_afe *afe)
+{
+	struct mt8188_afe_private *afe_priv = afe->platform_priv;
+
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A1SYS]);
+	mt8188_afe_disable_clk(afe, afe_priv->clk[MT8188_CLK_AUD_A2SYS]);
+
+	mt8188_afe_disable_top_cg(afe, MT8188_TOP_CG_26M_TIMING);
+	mt8188_afe_disable_top_cg(afe, MT8188_TOP_CG_A2SYS_TIMING);
+	mt8188_afe_disable_top_cg(afe, MT8188_TOP_CG_A1SYS_TIMING);
+
+	return 0;
+}
+
+int mt8188_afe_enable_main_clock(struct mtk_base_afe *afe)
+{
+	mt8188_afe_enable_timing_sys(afe);
+
+	mt8188_afe_enable_afe_on(afe);
+
+	mt8188_afe_enable_apll_tuner(afe, MT8188_AUD_PLL1);
+	mt8188_afe_enable_apll_tuner(afe, MT8188_AUD_PLL2);
+
+	return 0;
+}
+
+int mt8188_afe_disable_main_clock(struct mtk_base_afe *afe)
+{
+	mt8188_afe_disable_apll_tuner(afe, MT8188_AUD_PLL2);
+	mt8188_afe_disable_apll_tuner(afe, MT8188_AUD_PLL1);
+
+	mt8188_afe_disable_afe_on(afe);
+
+	mt8188_afe_disable_timing_sys(afe);
+
+	return 0;
+}
diff --git a/sound/soc/mediatek/mt8188/mt8188-afe-clk.h b/sound/soc/mediatek/mt8188/mt8188-afe-clk.h
new file mode 100644
index 000000000000..084fdfb1d877
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-afe-clk.h
@@ -0,0 +1,115 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * mt8188-afe-clk.h  --  MediaTek 8188 afe clock ctrl definition
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#ifndef _MT8188_AFE_CLK_H_
+#define _MT8188_AFE_CLK_H_
+
+enum {
+	/* xtal */
+	MT8188_CLK_XTAL_26M,
+	/* pll */
+	MT8188_CLK_APMIXED_APLL1,
+	MT8188_CLK_APMIXED_APLL2,
+	/* divider */
+	MT8188_CLK_TOP_APLL12_DIV0,
+	MT8188_CLK_TOP_APLL12_DIV1,
+	MT8188_CLK_TOP_APLL12_DIV2,
+	MT8188_CLK_TOP_APLL12_DIV3,
+	MT8188_CLK_TOP_APLL12_DIV9,
+	/* mux */
+	MT8188_CLK_TOP_A1SYS_HP_SEL,
+	MT8188_CLK_TOP_AUD_INTBUS_SEL,
+	MT8188_CLK_TOP_AUDIO_H_SEL,
+	MT8188_CLK_TOP_AUDIO_LOCAL_BUS_SEL,
+	MT8188_CLK_TOP_DPTX_M_SEL,
+	MT8188_CLK_TOP_I2SO1_M_SEL,
+	MT8188_CLK_TOP_I2SO2_M_SEL,
+	MT8188_CLK_TOP_I2SI1_M_SEL,
+	MT8188_CLK_TOP_I2SI2_M_SEL,
+	/* clock gate */
+	MT8188_CLK_ADSP_AUDIO_26M,
+	MT8188_CLK_AUD_AFE,
+	MT8188_CLK_AUD_APLL1_TUNER,
+	MT8188_CLK_AUD_APLL2_TUNER,
+	MT8188_CLK_AUD_TOP0_SPDF,
+	MT8188_CLK_AUD_APLL,
+	MT8188_CLK_AUD_APLL2,
+	MT8188_CLK_AUD_DAC,
+	MT8188_CLK_AUD_ADC,
+	MT8188_CLK_AUD_DAC_HIRES,
+	MT8188_CLK_AUD_A1SYS_HP,
+	MT8188_CLK_AUD_ADC_HIRES,
+	MT8188_CLK_AUD_I2SIN,
+	MT8188_CLK_AUD_TDM_IN,
+	MT8188_CLK_AUD_I2S_OUT,
+	MT8188_CLK_AUD_TDM_OUT,
+	MT8188_CLK_AUD_HDMI_OUT,
+	MT8188_CLK_AUD_ASRC11,
+	MT8188_CLK_AUD_ASRC12,
+	MT8188_CLK_AUD_A1SYS,
+	MT8188_CLK_AUD_A2SYS,
+	MT8188_CLK_AUD_PCMIF,
+	MT8188_CLK_AUD_MEMIF_UL1,
+	MT8188_CLK_AUD_MEMIF_UL2,
+	MT8188_CLK_AUD_MEMIF_UL3,
+	MT8188_CLK_AUD_MEMIF_UL4,
+	MT8188_CLK_AUD_MEMIF_UL5,
+	MT8188_CLK_AUD_MEMIF_UL6,
+	MT8188_CLK_AUD_MEMIF_UL8,
+	MT8188_CLK_AUD_MEMIF_UL9,
+	MT8188_CLK_AUD_MEMIF_UL10,
+	MT8188_CLK_AUD_MEMIF_DL2,
+	MT8188_CLK_AUD_MEMIF_DL3,
+	MT8188_CLK_AUD_MEMIF_DL6,
+	MT8188_CLK_AUD_MEMIF_DL7,
+	MT8188_CLK_AUD_MEMIF_DL8,
+	MT8188_CLK_AUD_MEMIF_DL10,
+	MT8188_CLK_AUD_MEMIF_DL11,
+	MT8188_CLK_NUM,
+};
+
+enum {
+	MT8188_AUD_PLL1,
+	MT8188_AUD_PLL2,
+	MT8188_AUD_PLL3,
+	MT8188_AUD_PLL4,
+	MT8188_AUD_PLL5,
+	MT8188_AUD_PLL_NUM,
+};
+
+enum {
+	MT8188_MCK_SEL_26M,
+	MT8188_MCK_SEL_APLL1,
+	MT8188_MCK_SEL_APLL2,
+	MT8188_MCK_SEL_APLL3,
+	MT8188_MCK_SEL_APLL4,
+	MT8188_MCK_SEL_APLL5,
+	MT8188_MCK_SEL_NUM,
+};
+
+struct mtk_base_afe;
+
+int mt8188_afe_get_mclk_source_clk_id(int sel);
+int mt8188_afe_get_mclk_source_rate(struct mtk_base_afe *afe, int apll);
+int mt8188_afe_get_default_mclk_source_by_rate(int rate);
+int mt8188_afe_init_clock(struct mtk_base_afe *afe);
+void mt8188_afe_deinit_clock(void *priv);
+int mt8188_afe_enable_clk(struct mtk_base_afe *afe, struct clk *clk);
+void mt8188_afe_disable_clk(struct mtk_base_afe *afe, struct clk *clk);
+int mt8188_afe_set_clk_rate(struct mtk_base_afe *afe, struct clk *clk,
+			    unsigned int rate);
+int mt8188_afe_set_clk_parent(struct mtk_base_afe *afe, struct clk *clk,
+			      struct clk *parent);
+int mt8188_afe_enable_main_clock(struct mtk_base_afe *afe);
+int mt8188_afe_disable_main_clock(struct mtk_base_afe *afe);
+int mt8188_afe_enable_reg_rw_clk(struct mtk_base_afe *afe);
+int mt8188_afe_disable_reg_rw_clk(struct mtk_base_afe *afe);
+
+#endif
-- 
2.18.0



From trevor.wu at mediatek.com  Thu Dec 29 21:54:43 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:43 +0800
Subject: [PATCH v4 13/13] dt-bindings: mediatek: mt8188: add mt8188-mt6359 document
In-Reply-To: <20221230055443.16024-1-trevor.wu@mediatek.com>
References: <20221230055443.16024-1-trevor.wu@mediatek.com>
Message-ID: <20221230055443.16024-14-trevor.wu@mediatek.com>

Add document for mt8188 board with mt6359.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 .../sound/mediatek,mt8188-mt6359.yaml         | 93 +++++++++++++++++++
 1 file changed, 93 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/mediatek,mt8188-mt6359.yaml

diff --git a/Documentation/devicetree/bindings/sound/mediatek,mt8188-mt6359.yaml b/Documentation/devicetree/bindings/sound/mediatek,mt8188-mt6359.yaml
new file mode 100644
index 000000000000..5754c1d460db
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/mediatek,mt8188-mt6359.yaml
@@ -0,0 +1,93 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/sound/mediatek,mt8188-mt6359.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek MT8188 ASoC sound card
+
+maintainers:
+  - Trevor Wu <trevor.wu at mediatek.com>
+
+properties:
+  compatible:
+    const: mediatek,mt8188-mt6359-evb
+
+  model:
+    $ref: /schemas/types.yaml#/definitions/string
+    description: User specified audio sound card name
+
+  audio-routing:
+    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
+    description:
+      A list of the connections between audio components. Each entry is a
+      sink/source pair of strings. Valid names could be the input or output
+      widgets of audio components, power supplies, MicBias of codec and the
+      software switch.
+
+  mediatek,platform:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description: The phandle of MT8188 ASoC platform.
+
+patternProperties:
+  "^dai-link-[0-9]+$":
+    type: object
+    description: |
+      Container for dai-link level properties and CODEC sub-nodes.
+
+    properties:
+      dai-link-name:
+        description: |
+          This property corresponds to the name of the BE dai-link to which
+          we are going to update parameters in this node.
+        items:
+          enum:
+            - ADDA_BE
+            - DPTX_BE
+            - ETDM1_IN_BE
+            - ETDM2_IN_BE
+            - ETDM1_OUT_BE
+            - ETDM2_OUT_BE
+            - ETDM3_OUT_BE
+            - PCM1_BE
+
+      codec:
+        description: Holds subnode which indicates codec dai.
+        type: object
+        additionalProperties: false
+        properties:
+          sound-dai:
+            minItems: 1
+            maxItems: 2
+
+    required:
+      - dai-link-name
+      - codec
+
+additionalProperties: false
+
+required:
+  - compatible
+  - mediatek,platform
+
+examples:
+  - |
+    sound {
+        compatible = "mediatek,mt8188-mt6359-evb";
+        mediatek,platform = <&afe>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&aud_pins_default>;
+        audio-routing =
+            "Headphone", "Headphone L",
+            "Headphone", "Headphone R",
+            "AIN1", "Headset Mic";
+        dai-link-0 {
+            dai-link-name = "ETDM3_OUT_BE";
+
+            codec {
+                sound-dai = <&hdmi0>;
+            };
+        };
+    };
+
+...
-- 
2.18.0



From trevor.wu at mediatek.com  Thu Dec 29 21:54:32 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:32 +0800
Subject: [PATCH v4 02/13] ASoC: mediatek: mt8188: add common header
In-Reply-To: <20221230055443.16024-1-trevor.wu@mediatek.com>
References: <20221230055443.16024-1-trevor.wu@mediatek.com>
Message-ID: <20221230055443.16024-3-trevor.wu@mediatek.com>

Add header files for register definition and structure.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 sound/soc/mediatek/mt8188/mt8188-afe-common.h |  151 +
 sound/soc/mediatek/mt8188/mt8188-reg.h        | 3180 +++++++++++++++++
 2 files changed, 3331 insertions(+)
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-afe-common.h
 create mode 100644 sound/soc/mediatek/mt8188/mt8188-reg.h

diff --git a/sound/soc/mediatek/mt8188/mt8188-afe-common.h b/sound/soc/mediatek/mt8188/mt8188-afe-common.h
new file mode 100644
index 000000000000..eb7e57c239bd
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-afe-common.h
@@ -0,0 +1,151 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * mt8188-afe-common.h  --  MediaTek 8188 audio driver definitions
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#ifndef _MT_8188_AFE_COMMON_H_
+#define _MT_8188_AFE_COMMON_H_
+
+#include <linux/list.h>
+#include <linux/regmap.h>
+#include <sound/soc.h>
+#include "../common/mtk-base-afe.h"
+
+enum {
+	MT8188_DAI_START,
+	MT8188_AFE_MEMIF_START = MT8188_DAI_START,
+	MT8188_AFE_MEMIF_DL2 = MT8188_AFE_MEMIF_START,
+	MT8188_AFE_MEMIF_DL3,
+	MT8188_AFE_MEMIF_DL6,
+	MT8188_AFE_MEMIF_DL7,
+	MT8188_AFE_MEMIF_DL8,
+	MT8188_AFE_MEMIF_DL10,
+	MT8188_AFE_MEMIF_DL11,
+	MT8188_AFE_MEMIF_UL_START,
+	MT8188_AFE_MEMIF_UL1 = MT8188_AFE_MEMIF_UL_START,
+	MT8188_AFE_MEMIF_UL2,
+	MT8188_AFE_MEMIF_UL3,
+	MT8188_AFE_MEMIF_UL4,
+	MT8188_AFE_MEMIF_UL5,
+	MT8188_AFE_MEMIF_UL6,
+	MT8188_AFE_MEMIF_UL8,
+	MT8188_AFE_MEMIF_UL9,
+	MT8188_AFE_MEMIF_UL10,
+	MT8188_AFE_MEMIF_END,
+	MT8188_AFE_MEMIF_NUM = (MT8188_AFE_MEMIF_END - MT8188_AFE_MEMIF_START),
+	MT8188_AFE_IO_START = MT8188_AFE_MEMIF_END,
+	MT8188_AFE_IO_ADDA = MT8188_AFE_IO_START,
+	MT8188_AFE_IO_DMIC_IN,
+	MT8188_AFE_IO_DPTX,
+	MT8188_AFE_IO_ETDM_START,
+	MT8188_AFE_IO_ETDM1_IN = MT8188_AFE_IO_ETDM_START,
+	MT8188_AFE_IO_ETDM2_IN,
+	MT8188_AFE_IO_ETDM1_OUT,
+	MT8188_AFE_IO_ETDM2_OUT,
+	MT8188_AFE_IO_ETDM3_OUT,
+	MT8188_AFE_IO_ETDM_END,
+	MT8188_AFE_IO_ETDM_NUM =
+		(MT8188_AFE_IO_ETDM_END - MT8188_AFE_IO_ETDM_START),
+	MT8188_AFE_IO_PCM = MT8188_AFE_IO_ETDM_END,
+	MT8188_AFE_IO_END,
+	MT8188_AFE_IO_NUM = (MT8188_AFE_IO_END - MT8188_AFE_IO_START),
+	MT8188_DAI_END = MT8188_AFE_IO_END,
+	MT8188_DAI_NUM = (MT8188_DAI_END - MT8188_DAI_START),
+};
+
+enum {
+	MT8188_TOP_CG_A1SYS_TIMING,
+	MT8188_TOP_CG_A2SYS_TIMING,
+	MT8188_TOP_CG_26M_TIMING,
+	MT8188_TOP_CG_NUM,
+};
+
+enum {
+	MT8188_AFE_IRQ_1,
+	MT8188_AFE_IRQ_2,
+	MT8188_AFE_IRQ_3,
+	MT8188_AFE_IRQ_8,
+	MT8188_AFE_IRQ_9,
+	MT8188_AFE_IRQ_10,
+	MT8188_AFE_IRQ_13,
+	MT8188_AFE_IRQ_14,
+	MT8188_AFE_IRQ_15,
+	MT8188_AFE_IRQ_16,
+	MT8188_AFE_IRQ_17,
+	MT8188_AFE_IRQ_18,
+	MT8188_AFE_IRQ_19,
+	MT8188_AFE_IRQ_20,
+	MT8188_AFE_IRQ_21,
+	MT8188_AFE_IRQ_22,
+	MT8188_AFE_IRQ_23,
+	MT8188_AFE_IRQ_24,
+	MT8188_AFE_IRQ_25,
+	MT8188_AFE_IRQ_26,
+	MT8188_AFE_IRQ_27,
+	MT8188_AFE_IRQ_28,
+	MT8188_AFE_IRQ_NUM,
+};
+
+enum {
+	MT8188_ETDM_OUT1_1X_EN = 9,
+	MT8188_ETDM_OUT2_1X_EN = 10,
+	MT8188_ETDM_OUT3_1X_EN = 11,
+	MT8188_ETDM_IN1_1X_EN = 12,
+	MT8188_ETDM_IN2_1X_EN = 13,
+	MT8188_ETDM_IN1_NX_EN = 25,
+	MT8188_ETDM_IN2_NX_EN = 26,
+};
+
+enum {
+	MT8188_MTKAIF_MISO_0,
+	MT8188_MTKAIF_MISO_1,
+	MT8188_MTKAIF_MISO_NUM,
+};
+
+struct mtk_dai_memif_irq_priv {
+	unsigned int asys_timing_sel;
+};
+
+struct mtkaif_param {
+	bool mtkaif_calibration_ok;
+	int mtkaif_chosen_phase[MT8188_MTKAIF_MISO_NUM];
+	int mtkaif_phase_cycle[MT8188_MTKAIF_MISO_NUM];
+	int mtkaif_dmic_on;
+};
+
+struct clk;
+
+struct mt8188_afe_private {
+	struct clk **clk;
+	struct clk_lookup **lookup;
+	struct regmap *topckgen;
+	int pm_runtime_bypass_reg_ctl;
+	spinlock_t afe_ctrl_lock; /* Lock for afe control */
+	struct mtk_dai_memif_irq_priv irq_priv[MT8188_AFE_IRQ_NUM];
+	struct mtkaif_param mtkaif_params;
+
+	/* dai */
+	void *dai_priv[MT8188_DAI_NUM];
+};
+
+int mt8188_afe_fs_timing(unsigned int rate);
+/* dai register */
+int mt8188_dai_adda_register(struct mtk_base_afe *afe);
+int mt8188_dai_etdm_register(struct mtk_base_afe *afe);
+int mt8188_dai_pcm_register(struct mtk_base_afe *afe);
+
+#define MT8188_SOC_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put, id) \
+{ \
+	.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
+	.info = snd_soc_info_enum_double, \
+	.get = xhandler_get, .put = xhandler_put, \
+	.device = id, \
+	.private_value = (unsigned long)&(xenum), \
+}
+
+#endif
diff --git a/sound/soc/mediatek/mt8188/mt8188-reg.h b/sound/soc/mediatek/mt8188/mt8188-reg.h
new file mode 100644
index 000000000000..51cd1a83dd9d
--- /dev/null
+++ b/sound/soc/mediatek/mt8188/mt8188-reg.h
@@ -0,0 +1,3180 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * mt8188-reg.h  --  MediaTek 8188 audio driver reg definition
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Bicycle Tsai <bicycle.tsai at mediatek.com>
+ *         Trevor Wu <trevor.wu at mediatek.com>
+ *         Chun-Chia Chiu <chun-chia.chiu at mediatek.com>
+ */
+
+#ifndef _MT8188_REG_H_
+#define _MT8188_REG_H_
+
+#define AUDIO_TOP_CON0                    (0x0000)
+#define AUDIO_TOP_CON1                    (0x0004)
+#define AUDIO_TOP_CON2                    (0x0008)
+#define AUDIO_TOP_CON3                    (0x000c)
+#define AUDIO_TOP_CON4                    (0x0010)
+#define AUDIO_TOP_CON5                    (0x0014)
+#define AUDIO_TOP_CON6                    (0x0018)
+#define AFE_MAS_HADDR_MSB                 (0x0020)
+#define AFE_MEMIF_ONE_HEART               (0x0024)
+#define AFE_MUX_SEL_CFG                   (0x0044)
+#define PWR1_ASM_CON1                     (0x0108)
+#define ASYS_IRQ_CONFIG                   (0x0110)
+#define ASYS_IRQ1_CON                     (0x0114)
+#define ASYS_IRQ2_CON                     (0x0118)
+#define ASYS_IRQ3_CON                     (0x011c)
+#define ASYS_IRQ4_CON                     (0x0120)
+#define ASYS_IRQ5_CON                     (0x0124)
+#define ASYS_IRQ6_CON                     (0x0128)
+#define ASYS_IRQ7_CON                     (0x012c)
+#define ASYS_IRQ8_CON                     (0x0130)
+#define ASYS_IRQ9_CON                     (0x0134)
+#define ASYS_IRQ10_CON                    (0x0138)
+#define ASYS_IRQ11_CON                    (0x013c)
+#define ASYS_IRQ12_CON                    (0x0140)
+#define ASYS_IRQ13_CON                    (0x0144)
+#define ASYS_IRQ14_CON                    (0x0148)
+#define ASYS_IRQ15_CON                    (0x014c)
+#define ASYS_IRQ16_CON                    (0x0150)
+#define ASYS_IRQ_CLR                      (0x0154)
+#define ASYS_IRQ_STATUS                   (0x0158)
+#define ASYS_IRQ_MON1                     (0x015c)
+#define ASYS_IRQ_MON2                     (0x0160)
+#define AFE_IRQ1_CON                      (0x0164)
+#define AFE_IRQ2_CON                      (0x0168)
+#define AFE_IRQ3_CON                      (0x016c)
+#define AFE_IRQ_MCU_CLR                   (0x0170)
+#define AFE_IRQ_STATUS                    (0x0174)
+#define AFE_IRQ_MASK                      (0x0178)
+#define ASYS_IRQ_MASK                     (0x017c)
+#define AFE_IRQ3_CON_MON                  (0x01b0)
+#define AFE_IRQ_MCU_MON2                  (0x01b4)
+#define AFE_IRQ8_CON                      (0x01b8)
+#define AFE_IRQ9_CON                      (0x01bc)
+#define AFE_IRQ10_CON                     (0x01c0)
+#define AFE_IRQ9_CON_MON                  (0x01c4)
+#define ADSP_IRQ_MASK                     (0x01c8)
+#define ADSP_IRQ_STATUS                   (0x01cc)
+#define AFE_SINEGEN_CON0                  (0x01f0)
+#define AFE_SINEGEN_CON1                  (0x01f4)
+#define AFE_SINEGEN_CON2                  (0x01f8)
+#define AFE_SINEGEN_CON3                  (0x01fc)
+#define AFE_SPDIF_OUT_CON0                (0x0380)
+#define AFE_TDMOUT_CONN0                  (0x0390)
+#define PWR1_ASM_CON2                     (0x03b0)
+#define PWR1_ASM_CON3                     (0x03b4)
+#define AFE_APLL_TUNER_CFG                (0x03f8)
+#define AFE_APLL_TUNER_CFG1               (0x03fc)
+#define AUDIO_TOP_STA0                    (0x0400)
+#define AUDIO_TOP_STA1                    (0x0404)
+#define AFE_GAIN1_CON0                    (0x0410)
+#define AFE_GAIN1_CON1                    (0x0414)
+#define AFE_GAIN1_CON2                    (0x0418)
+#define AFE_GAIN1_CON3                    (0x041c)
+#define AFE_GAIN1_CUR                     (0x0424)
+#define AFE_GAIN2_CON0                    (0x0428)
+#define AFE_GAIN2_CON1                    (0x042c)
+#define AFE_GAIN2_CON2                    (0x0430)
+#define AFE_GAIN2_CON3                    (0x0434)
+#define AFE_GAIN2_CUR                     (0x043c)
+#define AFE_IEC_CFG                       (0x0480)
+#define AFE_IEC_NSNUM                     (0x0484)
+#define AFE_IEC_BURST_INFO                (0x0488)
+#define AFE_IEC_BURST_LEN                 (0x048c)
+#define AFE_IEC_NSADR                     (0x0490)
+#define AFE_IEC_CHL_STAT0                 (0x04a0)
+#define AFE_IEC_CHL_STAT1                 (0x04a4)
+#define AFE_IEC_CHR_STAT0                 (0x04a8)
+#define AFE_IEC_CHR_STAT1                 (0x04ac)
+#define AFE_SPDIFIN_CFG0                  (0x0500)
+#define AFE_SPDIFIN_CFG1                  (0x0504)
+#define AFE_SPDIFIN_CHSTS1                (0x0508)
+#define AFE_SPDIFIN_CHSTS2                (0x050c)
+#define AFE_SPDIFIN_CHSTS3                (0x0510)
+#define AFE_SPDIFIN_CHSTS4                (0x0514)
+#define AFE_SPDIFIN_CHSTS5                (0x0518)
+#define AFE_SPDIFIN_CHSTS6                (0x051c)
+#define AFE_SPDIFIN_DEBUG1                (0x0520)
+#define AFE_SPDIFIN_DEBUG2                (0x0524)
+#define AFE_SPDIFIN_DEBUG3                (0x0528)
+#define AFE_SPDIFIN_DEBUG4                (0x052c)
+#define AFE_SPDIFIN_EC                    (0x0530)
+#define AFE_SPDIFIN_CKLOCK_CFG            (0x0534)
+#define AFE_SPDIFIN_BR                    (0x053c)
+#define AFE_SPDIFIN_BR_DBG1               (0x0540)
+#define AFE_SPDIFIN_CKFBDIV               (0x0544)
+#define AFE_SPDIFIN_INT_EXT               (0x0548)
+#define AFE_SPDIFIN_INT_EXT2              (0x054c)
+#define SPDIFIN_FREQ_INFO                 (0x0550)
+#define SPDIFIN_FREQ_INFO_2               (0x0554)
+#define SPDIFIN_FREQ_INFO_3               (0x0558)
+#define SPDIFIN_FREQ_STATUS               (0x055c)
+#define SPDIFIN_USERCODE1                 (0x0560)
+#define SPDIFIN_USERCODE2                 (0x0564)
+#define SPDIFIN_USERCODE3                 (0x0568)
+#define SPDIFIN_USERCODE4                 (0x056c)
+#define SPDIFIN_USERCODE5                 (0x0570)
+#define SPDIFIN_USERCODE6                 (0x0574)
+#define SPDIFIN_USERCODE7                 (0x0578)
+#define SPDIFIN_USERCODE8                 (0x057c)
+#define SPDIFIN_USERCODE9                 (0x0580)
+#define SPDIFIN_USERCODE10                (0x0584)
+#define SPDIFIN_USERCODE11                (0x0588)
+#define SPDIFIN_USERCODE12                (0x058c)
+#define AFE_SPDIFIN_APLL_TUNER_CFG        (0x0594)
+#define AFE_SPDIFIN_APLL_TUNER_CFG1       (0x0598)
+#define ASYS_TOP_CON                      (0x0600)
+#define AFE_LINEIN_APLL_TUNER_CFG         (0x0610)
+#define AFE_LINEIN_APLL_TUNER_MON         (0x0614)
+#define AFE_EARC_APLL_TUNER_CFG           (0x0618)
+#define AFE_EARC_APLL_TUNER_MON           (0x061c)
+#define PWR2_TOP_CON0                     (0x0634)
+#define PWR2_TOP_CON1                     (0x0638)
+#define PCM_INTF_CON1                     (0x063c)
+#define PCM_INTF_CON2                     (0x0640)
+#define AFE_CM0_CON                       (0x0660)
+#define AFE_CM1_CON                       (0x0664)
+#define AFE_CM2_CON                       (0x0668)
+#define AFE_CM0_MON                       (0x0670)
+#define AFE_CM1_MON                       (0x0674)
+#define AFE_CM2_MON                       (0x0678)
+#define AFE_MPHONE_MULTI_CON0             (0x06a4)
+#define AFE_MPHONE_MULTI_CON1             (0x06a8)
+#define AFE_MPHONE_MULTI_CON2             (0x06ac)
+#define AFE_MPHONE_MULTI_MON              (0x06b0)
+#define AFE_MPHONE_MULTI_DET_REG_CON0     (0x06b4)
+#define AFE_MPHONE_MULTI_DET_REG_CON1     (0x06b8)
+#define AFE_MPHONE_MULTI_DET_REG_CON2     (0x06bc)
+#define AFE_MPHONE_MULTI_DET_REG_CON3     (0x06c0)
+#define AFE_MPHONE_MULTI_DET_MON0         (0x06c4)
+#define AFE_MPHONE_MULTI_DET_MON1         (0x06c8)
+#define AFE_MPHONE_MULTI_DET_MON2         (0x06d0)
+#define AFE_MPHONE_MULTI2_CON0            (0x06d4)
+#define AFE_MPHONE_MULTI2_CON1            (0x06d8)
+#define AFE_MPHONE_MULTI2_CON2            (0x06dc)
+#define AFE_MPHONE_MULTI2_MON             (0x06e0)
+#define AFE_MPHONE_MULTI2_DET_REG_CON0    (0x06e4)
+#define AFE_MPHONE_MULTI2_DET_REG_CON1    (0x06e8)
+#define AFE_MPHONE_MULTI2_DET_REG_CON2    (0x06ec)
+#define AFE_MPHONE_MULTI2_DET_REG_CON3    (0x06f0)
+#define AFE_MPHONE_MULTI2_DET_MON0        (0x06f4)
+#define AFE_MPHONE_MULTI2_DET_MON1        (0x06f8)
+#define AFE_MPHONE_MULTI2_DET_MON2        (0x06fc)
+#define AFE_ADDA_IIR_COEF_02_01           (0x0700)
+#define AFE_ADDA_IIR_COEF_04_03           (0x0704)
+#define AFE_ADDA_IIR_COEF_06_05           (0x0708)
+#define AFE_ADDA_IIR_COEF_08_07           (0x070c)
+#define AFE_ADDA_IIR_COEF_10_09           (0x0710)
+#define AFE_ADDA_ULCF_CFG_02_01           (0x0714)
+#define AFE_ADDA_ULCF_CFG_04_03           (0x0718)
+#define AFE_ADDA_ULCF_CFG_06_05           (0x071c)
+#define AFE_ADDA_ULCF_CFG_08_07           (0x0720)
+#define AFE_ADDA_ULCF_CFG_10_09           (0x0724)
+#define AFE_ADDA_ULCF_CFG_12_11           (0x0728)
+#define AFE_ADDA_ULCF_CFG_14_13           (0x072c)
+#define AFE_ADDA_ULCF_CFG_16_15           (0x0730)
+#define AFE_ADDA_ULCF_CFG_18_17           (0x0734)
+#define AFE_ADDA_ULCF_CFG_20_19           (0x0738)
+#define AFE_ADDA_ULCF_CFG_22_21           (0x073c)
+#define AFE_ADDA_ULCF_CFG_24_23           (0x0740)
+#define AFE_ADDA_ULCF_CFG_26_25           (0x0744)
+#define AFE_ADDA_ULCF_CFG_28_27           (0x0748)
+#define AFE_ADDA_ULCF_CFG_30_29           (0x074c)
+#define AFE_ADDA6_IIR_COEF_02_01          (0x0750)
+#define AFE_ADDA6_IIR_COEF_04_03          (0x0754)
+#define AFE_ADDA6_IIR_COEF_06_05          (0x0758)
+#define AFE_ADDA6_IIR_COEF_08_07          (0x075c)
+#define AFE_ADDA6_IIR_COEF_10_09          (0x0760)
+#define AFE_ADDA6_ULCF_CFG_02_01          (0x0764)
+#define AFE_ADDA6_ULCF_CFG_04_03          (0x0768)
+#define AFE_ADDA6_ULCF_CFG_06_05          (0x076c)
+#define AFE_ADDA6_ULCF_CFG_08_07          (0x0770)
+#define AFE_ADDA6_ULCF_CFG_10_09          (0x0774)
+#define AFE_ADDA6_ULCF_CFG_12_11          (0x0778)
+#define AFE_ADDA6_ULCF_CFG_14_13          (0x077c)
+#define AFE_ADDA6_ULCF_CFG_16_15          (0x0780)
+#define AFE_ADDA6_ULCF_CFG_18_17          (0x0784)
+#define AFE_ADDA6_ULCF_CFG_20_19          (0x0788)
+#define AFE_ADDA6_ULCF_CFG_22_21          (0x078c)
+#define AFE_ADDA6_ULCF_CFG_24_23          (0x0790)
+#define AFE_ADDA6_ULCF_CFG_26_25          (0x0794)
+#define AFE_ADDA6_ULCF_CFG_28_27          (0x0798)
+#define AFE_ADDA6_ULCF_CFG_30_29          (0x079c)
+#define AFE_ADDA_MTKAIF_CFG0              (0x07a0)
+#define AFE_ADDA_MTKAIF_SYNCWORD_CFG      (0x07a8)
+#define AFE_ADDA_MTKAIF_RX_CFG0           (0x07b4)
+#define AFE_ADDA_MTKAIF_RX_CFG1           (0x07b8)
+#define AFE_ADDA_MTKAIF_RX_CFG2           (0x07bc)
+#define AFE_ADDA_MTKAIF_MON0              (0x07c8)
+#define AFE_ADDA_MTKAIF_MON1              (0x07cc)
+#define AFE_AUD_PAD_TOP                   (0x07d4)
+#define AFE_ADDA6_MTKAIF_MON0             (0x07d8)
+#define AFE_ADDA6_MTKAIF_MON1             (0x07dc)
+#define AFE_ADDA6_MTKAIF_CFG0             (0x07e0)
+#define AFE_ADDA6_MTKAIF_RX_CFG0          (0x07e4)
+#define AFE_ADDA6_MTKAIF_RX_CFG1          (0x07e8)
+#define AFE_ADDA6_MTKAIF_RX_CFG2          (0x07ec)
+#define AFE_ADDA6_TOP_CON0                (0x07f0)
+#define AFE_ADDA6_UL_SRC_CON0             (0x07f4)
+#define AFE_ADDA6_UL_SRC_CON1             (0x07f8)
+#define AFE_ADDA6_SRC_DEBUG               (0x0800)
+#define AFE_ADDA6_SRC_DEBUG_MON0          (0x0804)
+#define AFE_ADDA6_UL_SRC_MON0             (0x0818)
+#define AFE_ADDA6_UL_SRC_MON1             (0x081c)
+#define AFE_CONN0_5                       (0x0830)
+#define AFE_CONN1_5                       (0x0834)
+#define AFE_CONN2_5                       (0x0838)
+#define AFE_CONN3_5                       (0x083c)
+#define AFE_CONN4_5                       (0x0840)
+#define AFE_CONN5_5                       (0x0844)
+#define AFE_CONN6_5                       (0x0848)
+#define AFE_CONN7_5                       (0x084c)
+#define AFE_CONN8_5                       (0x0850)
+#define AFE_CONN9_5                       (0x0854)
+#define AFE_CONN10_5                      (0x0858)
+#define AFE_CONN11_5                      (0x085c)
+#define AFE_CONN12_5                      (0x0860)
+#define AFE_CONN13_5                      (0x0864)
+#define AFE_CONN14_5                      (0x0868)
+#define AFE_CONN15_5                      (0x086c)
+#define AFE_CONN16_5                      (0x0870)
+#define AFE_CONN17_5                      (0x0874)
+#define AFE_CONN18_5                      (0x0878)
+#define AFE_CONN19_5                      (0x087c)
+#define AFE_CONN20_5                      (0x0880)
+#define AFE_CONN21_5                      (0x0884)
+#define AFE_CONN22_5                      (0x0888)
+#define AFE_CONN23_5                      (0x088c)
+#define AFE_CONN24_5                      (0x0890)
+#define AFE_CONN25_5                      (0x0894)
+#define AFE_CONN26_5                      (0x0898)
+#define AFE_CONN27_5                      (0x089c)
+#define AFE_CONN28_5                      (0x08a0)
+#define AFE_CONN29_5                      (0x08a4)
+#define AFE_CONN30_5                      (0x08a8)
+#define AFE_CONN31_5                      (0x08ac)
+#define AFE_CONN32_5                      (0x08b0)
+#define AFE_CONN33_5                      (0x08b4)
+#define AFE_CONN34_5                      (0x08b8)
+#define AFE_CONN35_5                      (0x08bc)
+#define AFE_CONN36_5                      (0x08c0)
+#define AFE_CONN37_5                      (0x08c4)
+#define AFE_CONN38_5                      (0x08c8)
+#define AFE_CONN39_5                      (0x08cc)
+#define AFE_CONN40_5                      (0x08d0)
+#define AFE_CONN41_5                      (0x08d4)
+#define AFE_CONN42_5                      (0x08d8)
+#define AFE_CONN43_5                      (0x08dc)
+#define AFE_CONN44_5                      (0x08e0)
+#define AFE_CONN45_5                      (0x08e4)
+#define AFE_CONN46_5                      (0x08e8)
+#define AFE_CONN47_5                      (0x08ec)
+#define AFE_CONN48_5                      (0x08f0)
+#define AFE_CONN49_5                      (0x08f4)
+#define AFE_CONN50_5                      (0x08f8)
+#define AFE_CONN51_5                      (0x08fc)
+#define AFE_CONN52_5                      (0x0900)
+#define AFE_CONN53_5                      (0x0904)
+#define AFE_CONN54_5                      (0x0908)
+#define AFE_CONN55_5                      (0x090c)
+#define AFE_CONN56_5                      (0x0910)
+#define AFE_CONN57_5                      (0x0914)
+#define AFE_CONN58_5                      (0x0918)
+#define AFE_CONN59_5                      (0x091c)
+#define AFE_CONN60_5                      (0x0920)
+#define AFE_CONN61_5                      (0x0924)
+#define AFE_CONN62_5                      (0x0928)
+#define AFE_CONN63_5                      (0x092c)
+#define AFE_CONN64_5                      (0x0930)
+#define AFE_CONN65_5                      (0x0934)
+#define AFE_CONN66_5                      (0x0938)
+#define AFE_CONN67_5                      (0x093c)
+#define AFE_CONN68_5                      (0x0940)
+#define AFE_CONN69_5                      (0x0944)
+#define AFE_CONN70_5                      (0x0948)
+#define AFE_CONN71_5                      (0x094c)
+#define AFE_CONN72_5                      (0x0950)
+#define AFE_CONN73_5                      (0x0954)
+#define AFE_CONN74_5                      (0x0958)
+#define AFE_CONN75_5                      (0x095c)
+#define AFE_CONN76_5                      (0x0960)
+#define AFE_CONN77_5                      (0x0964)
+#define AFE_CONN78_5                      (0x0968)
+#define AFE_CONN79_5                      (0x096c)
+#define AFE_CONN80_5                      (0x0970)
+#define AFE_CONN81_5                      (0x0974)
+#define AFE_CONN82_5                      (0x0978)
+#define AFE_CONN83_5                      (0x097c)
+#define AFE_CONN84_5                      (0x0980)
+#define AFE_CONN85_5                      (0x0984)
+#define AFE_CONN86_5                      (0x0988)
+#define AFE_CONN87_5                      (0x098c)
+#define AFE_CONN88_5                      (0x0990)
+#define AFE_CONN89_5                      (0x0994)
+#define AFE_CONN90_5                      (0x0998)
+#define AFE_CONN91_5                      (0x099c)
+#define AFE_CONN92_5                      (0x09a0)
+#define AFE_CONN93_5                      (0x09a4)
+#define AFE_CONN94_5                      (0x09a8)
+#define AFE_CONN95_5                      (0x09ac)
+#define AFE_CONN96_5                      (0x09b0)
+#define AFE_CONN97_5                      (0x09b4)
+#define AFE_CONN98_5                      (0x09b8)
+#define AFE_CONN99_5                      (0x09bc)
+#define AFE_CONN100_5                     (0x09c0)
+#define AFE_CONN101_5                     (0x09c4)
+#define AFE_CONN102_5                     (0x09c8)
+#define AFE_CONN103_5                     (0x09cc)
+#define AFE_CONN104_5                     (0x09d0)
+#define AFE_CONN105_5                     (0x09d4)
+#define AFE_CONN106_5                     (0x09d8)
+#define AFE_CONN107_5                     (0x09dc)
+#define AFE_CONN108_5                     (0x09e0)
+#define AFE_CONN109_5                     (0x09e4)
+#define AFE_CONN110_5                     (0x09e8)
+#define AFE_CONN111_5                     (0x09ec)
+#define AFE_CONN112_5                     (0x09f0)
+#define AFE_CONN113_5                     (0x09f4)
+#define AFE_CONN114_5                     (0x09f8)
+#define AFE_CONN115_5                     (0x09fc)
+#define AFE_CONN116_5                     (0x0a00)
+#define AFE_CONN117_5                     (0x0a04)
+#define AFE_CONN118_5                     (0x0a08)
+#define AFE_CONN119_5                     (0x0a0c)
+#define AFE_CONN120_5                     (0x0a10)
+#define AFE_CONN121_5                     (0x0a14)
+#define AFE_CONN122_5                     (0x0a18)
+#define AFE_CONN123_5                     (0x0a1c)
+#define AFE_CONN124_5                     (0x0a20)
+#define AFE_CONN125_5                     (0x0a24)
+#define AFE_CONN126_5                     (0x0a28)
+#define AFE_CONN127_5                     (0x0a2c)
+#define AFE_CONN128_5                     (0x0a30)
+#define AFE_CONN129_5                     (0x0a34)
+#define AFE_CONN130_5                     (0x0a38)
+#define AFE_CONN131_5                     (0x0a3c)
+#define AFE_CONN132_5                     (0x0a40)
+#define AFE_CONN133_5                     (0x0a44)
+#define AFE_CONN134_5                     (0x0a48)
+#define AFE_CONN135_5                     (0x0a4c)
+#define AFE_CONN136_5                     (0x0a50)
+#define AFE_CONN137_5                     (0x0a54)
+#define AFE_CONN138_5                     (0x0a58)
+#define AFE_CONN139_5                     (0x0a5c)
+#define AFE_CONN_RS_5                     (0x0a60)
+#define AFE_CONN_DI_5                     (0x0a64)
+#define AFE_CONN_16BIT_5                  (0x0a68)
+#define AFE_CONN_24BIT_5                  (0x0a6c)
+#define AFE_SECURE_MASK_CONN53_5          (0x0a70)
+#define AFE_SECURE_MASK_CONN54_5          (0x0a74)
+#define AFE_SECURE_MASK_CONN55_5          (0x0a78)
+#define AFE_SECURE_MASK_CONN56_5          (0x0a7c)
+#define AFE_SECURE_MASK_CONN57_5          (0x0a80)
+#define AFE_SECURE_MASK_CONN58_5          (0x0a84)
+#define AFE_SECURE_MASK_CONN59_5          (0x0a88)
+#define AFE_SECURE_MASK_CONN60_5          (0x0a8c)
+#define AFE_SECURE_MASK_CONN61_5          (0x0a90)
+#define AFE_SECURE_MASK_CONN62_5          (0x0a94)
+#define AFE_SECURE_MASK_CONN63_5          (0x0a98)
+#define AFE_SECURE_MASK_CONN64_5          (0x0a9c)
+#define AFE_SECURE_MASK_CONN65_5          (0x0aa0)
+#define AFE_SECURE_MASK_CONN66_5          (0x0aa4)
+#define AFE_SECURE_MASK_CONN67_5          (0x0aa8)
+#define AFE_SECURE_MASK_CONN68_5          (0x0aac)
+#define AFE_SECURE_MASK_CONN69_5          (0x0ab0)
+#define AFE_SECURE_MASK_CONN70_5          (0x0ab4)
+#define AFE_SECURE_MASK_CONN71_5          (0x0ab8)
+#define AFE_SECURE_MASK_CONN72_5          (0x0abc)
+#define AFE_SECURE_MASK_CONN73_5          (0x0ac0)
+#define AFE_SECURE_MASK_CONN74_5          (0x0ac4)
+#define AFE_SECURE_MASK_CONN75_5          (0x0ac8)
+#define AFE_SECURE_MASK_CONN76_5          (0x0acc)
+#define AFE_SECURE_MASK_CONN77_5          (0x0ad0)
+#define AFE_SECURE_MASK_CONN78_5          (0x0ad4)
+#define AFE_SECURE_MASK_CONN79_5          (0x0ad8)
+#define AFE_SECURE_MASK_CONN80_5          (0x0adc)
+#define AFE_SECURE_MASK_CONN81_5          (0x0ae0)
+#define AFE_SECURE_MASK_CONN82_5          (0x0ae4)
+#define AFE_SECURE_MASK_CONN83_5          (0x0ae8)
+#define AFE_SECURE_MASK_CONN84_5          (0x0aec)
+#define AFE_SECURE_MASK_CONN85_5          (0x0af0)
+#define AFE_SECURE_MASK_CONN86_5          (0x0af4)
+#define AFE_SECURE_MASK_CONN87_5          (0x0af8)
+#define AFE_SECURE_MASK_CONN88_5          (0x0afc)
+#define AFE_SECURE_MASK_CONN89_5          (0x0b00)
+#define AFE_SECURE_MASK_CONN90_5          (0x0b04)
+#define AFE_SECURE_MASK_CONN91_5          (0x0b08)
+#define AFE_SECURE_MASK_CONN92_5          (0x0b0c)
+#define AFE_SECURE_MASK_CONN93_5          (0x0b10)
+#define AFE_SECURE_MASK_CONN94_5          (0x0b14)
+#define AFE_SECURE_MASK_CONN95_5          (0x0b18)
+#define AFE_SECURE_MASK_CONN96_5          (0x0b1c)
+#define AFE_SECURE_MASK_CONN97_5          (0x0b20)
+#define AFE_SECURE_MASK_CONN98_5          (0x0b24)
+#define AFE_SECURE_MASK_CONN99_5          (0x0b28)
+#define AFE_SECURE_MASK_CONN100_5         (0x0b2c)
+#define AFE_SECURE_MASK_CONN101_5         (0x0b30)
+#define AFE_SECURE_MASK_CONN102_5         (0x0b34)
+#define AFE_SECURE_MASK_CONN103_5         (0x0b38)
+#define AFE_SECURE_MASK_CONN104_5         (0x0b3c)
+#define AFE_SECURE_MASK_CONN105_5         (0x0b40)
+#define AFE_SECURE_MASK_CONN106_5         (0x0b44)
+#define AFE_SECURE_MASK_CONN107_5         (0x0b48)
+#define AFE_SECURE_MASK_CONN108_5         (0x0b4c)
+#define AFE_SECURE_MASK_CONN109_5         (0x0b50)
+#define AFE_SECURE_MASK_CONN110_5         (0x0b54)
+#define AFE_SECURE_MASK_CONN111_5         (0x0b58)
+#define AFE_SECURE_MASK_CONN112_5         (0x0b5c)
+#define AFE_SECURE_MASK_CONN113_5         (0x0b60)
+#define AFE_SECURE_MASK_CONN114_5         (0x0b64)
+#define AFE_SECURE_MASK_CONN115_5         (0x0b68)
+#define AFE_SECURE_MASK_CONN116_5         (0x0b6c)
+#define AFE_SECURE_MASK_CONN117_5         (0x0b70)
+#define AFE_SECURE_MASK_CONN118_5         (0x0b74)
+#define AFE_SECURE_MASK_CONN119_5         (0x0b78)
+#define AFE_SECURE_MASK_CONN120_5         (0x0b7c)
+#define AFE_SECURE_MASK_CONN121_5         (0x0b80)
+#define AFE_SECURE_MASK_CONN122_5         (0x0b84)
+#define AFE_SECURE_MASK_CONN123_5         (0x0b88)
+#define AFE_SECURE_MASK_CONN124_5         (0x0b8c)
+#define AFE_SECURE_MASK_CONN125_5         (0x0b90)
+#define AFE_SECURE_MASK_CONN126_5         (0x0b94)
+#define AFE_SECURE_MASK_CONN127_5         (0x0b98)
+#define AFE_SECURE_MASK_CONN128_5         (0x0b9c)
+#define AFE_SECURE_MASK_CONN129_5         (0x0ba0)
+#define AFE_SECURE_MASK_CONN130_5         (0x0ba4)
+#define AFE_SECURE_MASK_CONN131_5         (0x0ba8)
+#define AFE_SECURE_MASK_CONN132_5         (0x0bac)
+#define AFE_SECURE_MASK_CONN133_5         (0x0bb0)
+#define AFE_SECURE_MASK_CONN134_5         (0x0bb4)
+#define AFE_SECURE_MASK_CONN135_5         (0x0bb8)
+#define AFE_SECURE_MASK_CONN136_5         (0x0bbc)
+#define AFE_SECURE_MASK_CONN137_5         (0x0bc0)
+#define AFE_SECURE_MASK_CONN138_5         (0x0bc4)
+#define AFE_SECURE_MASK_CONN139_5         (0x0bc8)
+#define AFE_SECURE_MASK_CONN_RS_5         (0x0bcc)
+#define AFE_SECURE_MASK_CONN_16BIT_5      (0x0bd0)
+#define AFE_SECURE_MASK_CONN_24BIT_5      (0x0bd4)
+#define AFE_ASRC11_NEW_CON0               (0x0d80)
+#define AFE_ASRC11_NEW_CON1               (0x0d84)
+#define AFE_ASRC11_NEW_CON2               (0x0d88)
+#define AFE_ASRC11_NEW_CON3               (0x0d8c)
+#define AFE_ASRC11_NEW_CON4               (0x0d90)
+#define AFE_ASRC11_NEW_CON5               (0x0d94)
+#define AFE_ASRC11_NEW_CON6               (0x0d98)
+#define AFE_ASRC11_NEW_CON7               (0x0d9c)
+#define AFE_ASRC11_NEW_CON8               (0x0da0)
+#define AFE_ASRC11_NEW_CON9               (0x0da4)
+#define AFE_ASRC11_NEW_CON10              (0x0da8)
+#define AFE_ASRC11_NEW_CON11              (0x0dac)
+#define AFE_ASRC11_NEW_CON13              (0x0db4)
+#define AFE_ASRC11_NEW_CON14              (0x0db8)
+#define AFE_ASRC12_NEW_CON0               (0x0dc0)
+#define AFE_ASRC12_NEW_CON1               (0x0dc4)
+#define AFE_ASRC12_NEW_CON2               (0x0dc8)
+#define AFE_ASRC12_NEW_CON3               (0x0dcc)
+#define AFE_ASRC12_NEW_CON4               (0x0dd0)
+#define AFE_ASRC12_NEW_CON5               (0x0dd4)
+#define AFE_ASRC12_NEW_CON6               (0x0dd8)
+#define AFE_ASRC12_NEW_CON7               (0x0ddc)
+#define AFE_ASRC12_NEW_CON8               (0x0de0)
+#define AFE_ASRC12_NEW_CON9               (0x0de4)
+#define AFE_ASRC12_NEW_CON10              (0x0de8)
+#define AFE_ASRC12_NEW_CON11              (0x0dec)
+#define AFE_ASRC12_NEW_CON13              (0x0df4)
+#define AFE_ASRC12_NEW_CON14              (0x0df8)
+#define AFE_SECURE_MASK_CONN176           (0x0fe0)
+#define AFE_SECURE_MASK_CONN176_1         (0x0fe4)
+#define AFE_SECURE_MASK_CONN176_2         (0x0fe8)
+#define AFE_SECURE_MASK_CONN176_3         (0x0fec)
+#define AFE_SECURE_MASK_CONN176_4         (0x0ff0)
+#define AFE_SECURE_MASK_CONN176_5         (0x0ff4)
+#define AFE_SECURE_MASK_CONN177           (0x0ff8)
+#define AFE_SECURE_MASK_CONN177_1         (0x0ffc)
+#define AFE_LRCK_CNT                      (0x1018)
+#define AFE_SECURE_MASK_CONN177_2         (0x1020)
+#define AFE_SECURE_MASK_CONN177_3         (0x1024)
+#define AFE_SECURE_MASK_CONN177_4         (0x1028)
+#define AFE_SECURE_MASK_CONN177_5         (0x102c)
+#define AFE_SECURE_MASK_CONN182           (0x1090)
+#define AFE_SECURE_MASK_CONN182_1         (0x1094)
+#define AFE_SECURE_MASK_CONN182_2         (0x1098)
+#define AFE_SECURE_MASK_CONN182_3         (0x109c)
+#define AFE_SECURE_MASK_CONN182_4         (0x10a0)
+#define AFE_SECURE_MASK_CONN182_5         (0x10a4)
+#define AFE_SECURE_MASK_CONN183           (0x10a8)
+#define AFE_SECURE_MASK_CONN183_1         (0x10ac)
+#define AFE_SECURE_MASK_CONN183_2         (0x10b0)
+#define AFE_SECURE_MASK_CONN183_3         (0x10b4)
+#define AFE_SECURE_MASK_CONN183_4         (0x10b8)
+#define AFE_SECURE_MASK_CONN183_5         (0x10bc)
+#define AFE_DAC_CON0                      (0x1200)
+#define AFE_DAC_CON1                      (0x1204)
+#define AFE_DAC_CON2                      (0x1208)
+#define AFE_DAC_MON0                      (0x1218)
+#define AFE_DL1_BASE                      (0x1240)
+#define AFE_DL1_CUR                       (0x1244)
+#define AFE_DL1_END                       (0x1248)
+#define AFE_DL1_CON0                      (0x124c)
+#define AFE_DL2_BASE                      (0x1250)
+#define AFE_DL2_CUR                       (0x1254)
+#define AFE_DL2_END                       (0x1258)
+#define AFE_DL2_CON0                      (0x125c)
+#define AFE_DL3_BASE                      (0x1260)
+#define AFE_DL3_CUR                       (0x1264)
+#define AFE_DL3_END                       (0x1268)
+#define AFE_DL3_CON0                      (0x126c)
+#define AFE_DL6_BASE                      (0x1290)
+#define AFE_DL6_CUR                       (0x1294)
+#define AFE_DL6_END                       (0x1298)
+#define AFE_DL6_CON0                      (0x129c)
+#define AFE_DL7_BASE                      (0x12a0)
+#define AFE_DL7_CUR                       (0x12a4)
+#define AFE_DL7_END                       (0x12a8)
+#define AFE_DL7_CON0                      (0x12ac)
+#define AFE_DL8_BASE                      (0x12b0)
+#define AFE_DL8_CUR                       (0x12b4)
+#define AFE_DL8_END                       (0x12b8)
+#define AFE_DL8_CON0                      (0x12bc)
+#define AFE_DL10_BASE                     (0x12d0)
+#define AFE_DL10_CUR                      (0x12d4)
+#define AFE_DL10_END                      (0x12d8)
+#define AFE_DL10_CON0                     (0x12dc)
+#define AFE_DL11_BASE                     (0x12e0)
+#define AFE_DL11_CUR                      (0x12e4)
+#define AFE_DL11_END                      (0x12e8)
+#define AFE_DL11_CON0                     (0x12ec)
+#define AFE_UL1_BASE                      (0x1300)
+#define AFE_UL1_CUR                       (0x1304)
+#define AFE_UL1_END                       (0x1308)
+#define AFE_UL1_CON0                      (0x130c)
+#define AFE_UL2_BASE                      (0x1310)
+#define AFE_UL2_CUR                       (0x1314)
+#define AFE_UL2_END                       (0x1318)
+#define AFE_UL2_CON0                      (0x131c)
+#define AFE_UL3_BASE                      (0x1320)
+#define AFE_UL3_CUR                       (0x1324)
+#define AFE_UL3_END                       (0x1328)
+#define AFE_UL3_CON0                      (0x132c)
+#define AFE_UL4_BASE                      (0x1330)
+#define AFE_UL4_CUR                       (0x1334)
+#define AFE_UL4_END                       (0x1338)
+#define AFE_UL4_CON0                      (0x133c)
+#define AFE_UL5_BASE                      (0x1340)
+#define AFE_UL5_CUR                       (0x1344)
+#define AFE_UL5_END                       (0x1348)
+#define AFE_UL5_CON0                      (0x134c)
+#define AFE_UL6_BASE                      (0x1350)
+#define AFE_UL6_CUR                       (0x1354)
+#define AFE_UL6_END                       (0x1358)
+#define AFE_UL6_CON0                      (0x135c)
+#define AFE_UL8_BASE                      (0x1370)
+#define AFE_UL8_CUR                       (0x1374)
+#define AFE_UL8_END                       (0x1378)
+#define AFE_UL8_CON0                      (0x137c)
+#define AFE_UL9_BASE                      (0x1380)
+#define AFE_UL9_CUR                       (0x1384)
+#define AFE_UL9_END                       (0x1388)
+#define AFE_UL9_CON0                      (0x138c)
+#define AFE_UL10_BASE                     (0x13d0)
+#define AFE_UL10_CUR                      (0x13d4)
+#define AFE_UL10_END                      (0x13d8)
+#define AFE_UL10_CON0                     (0x13dc)
+#define AFE_DL8_CHK_SUM1                  (0x1400)
+#define AFE_DL8_CHK_SUM2                  (0x1404)
+#define AFE_DL8_CHK_SUM3                  (0x1408)
+#define AFE_DL8_CHK_SUM4                  (0x140c)
+#define AFE_DL8_CHK_SUM5                  (0x1410)
+#define AFE_DL8_CHK_SUM6                  (0x1414)
+#define AFE_DL10_CHK_SUM1                 (0x1418)
+#define AFE_DL10_CHK_SUM2                 (0x141c)
+#define AFE_DL10_CHK_SUM3                 (0x1420)
+#define AFE_DL10_CHK_SUM4                 (0x1424)
+#define AFE_DL10_CHK_SUM5                 (0x1428)
+#define AFE_DL10_CHK_SUM6                 (0x142c)
+#define AFE_DL11_CHK_SUM1                 (0x1430)
+#define AFE_DL11_CHK_SUM2                 (0x1434)
+#define AFE_DL11_CHK_SUM3                 (0x1438)
+#define AFE_DL11_CHK_SUM4                 (0x143c)
+#define AFE_DL11_CHK_SUM5                 (0x1440)
+#define AFE_DL11_CHK_SUM6                 (0x1444)
+#define AFE_UL1_CHK_SUM1                  (0x1450)
+#define AFE_UL1_CHK_SUM2                  (0x1454)
+#define AFE_UL2_CHK_SUM1                  (0x1458)
+#define AFE_UL2_CHK_SUM2                  (0x145c)
+#define AFE_UL3_CHK_SUM1                  (0x1460)
+#define AFE_UL3_CHK_SUM2                  (0x1464)
+#define AFE_UL4_CHK_SUM1                  (0x1468)
+#define AFE_UL4_CHK_SUM2                  (0x146c)
+#define AFE_UL5_CHK_SUM1                  (0x1470)
+#define AFE_UL5_CHK_SUM2                  (0x1474)
+#define AFE_UL6_CHK_SUM1                  (0x1478)
+#define AFE_UL6_CHK_SUM2                  (0x147c)
+#define AFE_UL8_CHK_SUM1                  (0x1488)
+#define AFE_UL8_CHK_SUM2                  (0x148c)
+#define AFE_DL1_CHK_SUM1                  (0x1490)
+#define AFE_DL1_CHK_SUM2                  (0x1494)
+#define AFE_DL2_CHK_SUM1                  (0x14a0)
+#define AFE_DL2_CHK_SUM2                  (0x14a4)
+#define AFE_DL3_CHK_SUM1                  (0x14b0)
+#define AFE_DL3_CHK_SUM2                  (0x14b4)
+#define AFE_DL6_CHK_SUM1                  (0x14e0)
+#define AFE_DL6_CHK_SUM2                  (0x14e4)
+#define AFE_DL7_CHK_SUM1                  (0x14f0)
+#define AFE_DL7_CHK_SUM2                  (0x14f4)
+#define AFE_UL9_CHK_SUM1                  (0x1528)
+#define AFE_UL9_CHK_SUM2                  (0x152c)
+#define AFE_BUS_MON1                      (0x1540)
+#define AFE_UL10_CHK_SUM1                 (0x1550)
+#define AFE_UL10_CHK_SUM2                 (0x1554)
+#define UL1_MOD2AGT_CNT_LAT               (0x1568)
+#define UL2_MOD2AGT_CNT_LAT               (0x156c)
+#define UL3_MOD2AGT_CNT_LAT               (0x1570)
+#define UL4_MOD2AGT_CNT_LAT               (0x1574)
+#define UL5_MOD2AGT_CNT_LAT               (0x1578)
+#define UL6_MOD2AGT_CNT_LAT               (0x157c)
+#define UL8_MOD2AGT_CNT_LAT               (0x1588)
+#define UL9_MOD2AGT_CNT_LAT               (0x158c)
+#define UL10_MOD2AGT_CNT_LAT              (0x1590)
+#define AFE_MEMIF_AGENT_FS_CON0           (0x15a0)
+#define AFE_MEMIF_AGENT_FS_CON1           (0x15a4)
+#define AFE_MEMIF_AGENT_FS_CON2           (0x15a8)
+#define AFE_MEMIF_AGENT_FS_CON3           (0x15ac)
+#define AFE_MEMIF_BURST_CFG               (0x1600)
+#define AFE_MEMIF_BUF_FULL_MON            (0x1610)
+#define AFE_MEMIF_BUF_MON0                (0x1618)
+#define AFE_MEMIF_BUF_MON1                (0x161c)
+#define AFE_MEMIF_BUF_MON3                (0x1624)
+#define AFE_MEMIF_BUF_MON4                (0x1628)
+#define AFE_MEMIF_BUF_MON5                (0x162c)
+#define AFE_MEMIF_BUF_MON6                (0x1630)
+#define AFE_MEMIF_BUF_MON7                (0x1634)
+#define AFE_MEMIF_BUF_MON8                (0x1638)
+#define AFE_MEMIF_BUF_MON9                (0x163c)
+#define AFE_MEMIF_BUF_MON10               (0x1640)
+#define DL1_AGENT2MODULE_CNT              (0x1674)
+#define DL2_AGENT2MODULE_CNT              (0x1678)
+#define DL3_AGENT2MODULE_CNT              (0x167c)
+#define DL6_AGENT2MODULE_CNT              (0x1688)
+#define DL7_AGENT2MODULE_CNT              (0x168c)
+#define DL8_AGENT2MODULE_CNT              (0x1690)
+#define DL10_AGENT2MODULE_CNT             (0x1698)
+#define DL11_AGENT2MODULE_CNT             (0x169c)
+#define UL1_MODULE2AGENT_CNT              (0x16a0)
+#define UL2_MODULE2AGENT_CNT              (0x16a4)
+#define UL3_MODULE2AGENT_CNT              (0x16a8)
+#define UL4_MODULE2AGENT_CNT              (0x16ac)
+#define UL5_MODULE2AGENT_CNT              (0x16b0)
+#define UL6_MODULE2AGENT_CNT              (0x16b4)
+#define UL8_MODULE2AGENT_CNT              (0x16bc)
+#define UL9_MODULE2AGENT_CNT              (0x16c0)
+#define UL10_MODULE2AGENT_CNT             (0x16c4)
+#define AFE_SECURE_CON2                   (0x1798)
+#define AFE_SECURE_CON1                   (0x179c)
+#define AFE_SECURE_CON                    (0x17a0)
+#define AFE_SRAM_BOUND                    (0x17a4)
+#define AFE_SE_SECURE_CON                 (0x17a8)
+#define AFE_SECURE_MASK_LOOPBACK          (0x17bc)
+#define AFE_SRAM_SECURE_CON               (0x1800)
+#define AFE_SRAM_SECURE_CON1              (0x1804)
+#define AFE_SRAM_SECURE_CON2              (0x1808)
+#define AFE_SECURE_SIDEBAND0              (0x1908)
+#define AFE_SECURE_SIDEBAND1              (0x190c)
+#define AFE_SECURE_SIDEBAND2              (0x1910)
+#define AFE_SECURE_SIDEBAND3              (0x1914)
+#define AFE_SECURE_MASK_BASE_ADR_MSB      (0x1920)
+#define AFE_SECURE_MASK_END_ADR_MSB       (0x1924)
+#define AFE_NORMAL_BASE_ADR_MSB           (0x192c)
+#define AFE_NORMAL_END_ADR_MSB            (0x1930)
+#define AFE_SECURE_MASK_LOOPBACK0         (0x1940)
+#define AFE_SECURE_MASK_LOOPBACK1         (0x1944)
+#define AFE_SECURE_MASK_LOOPBACK2         (0x1948)
+#define AFE_LOOPBACK_CFG0                 (0x1950)
+#define AFE_LOOPBACK_CFG1                 (0x1954)
+#define AFE_LOOPBACK_CFG2                 (0x1958)
+#define AFE_DMIC0_UL_SRC_CON0             (0x1a00)
+#define AFE_DMIC0_UL_SRC_CON1             (0x1a04)
+#define AFE_DMIC0_SRC_DEBUG               (0x1a08)
+#define AFE_DMIC0_SRC_DEBUG_MON0          (0x1a0c)
+#define AFE_DMIC0_UL_SRC_MON0             (0x1a10)
+#define AFE_DMIC0_UL_SRC_MON1             (0x1a14)
+#define AFE_DMIC0_IIR_COEF_02_01          (0x1a18)
+#define AFE_DMIC0_IIR_COEF_04_03          (0x1a1c)
+#define AFE_DMIC0_IIR_COEF_06_05          (0x1a20)
+#define AFE_DMIC0_IIR_COEF_08_07          (0x1a24)
+#define AFE_DMIC0_IIR_COEF_10_09          (0x1a28)
+#define AFE_DMIC1_UL_SRC_CON0             (0x1a68)
+#define AFE_DMIC1_UL_SRC_CON1             (0x1a6c)
+#define AFE_DMIC1_SRC_DEBUG               (0x1a70)
+#define AFE_DMIC1_SRC_DEBUG_MON0          (0x1a74)
+#define AFE_DMIC1_UL_SRC_MON0             (0x1a78)
+#define AFE_DMIC1_UL_SRC_MON1             (0x1a7c)
+#define AFE_DMIC1_IIR_COEF_02_01          (0x1a80)
+#define AFE_DMIC1_IIR_COEF_04_03          (0x1a84)
+#define AFE_DMIC1_IIR_COEF_06_05          (0x1a88)
+#define AFE_DMIC1_IIR_COEF_08_07          (0x1a8c)
+#define AFE_DMIC1_IIR_COEF_10_09          (0x1a90)
+#define AFE_DMIC2_UL_SRC_CON0             (0x1ad0)
+#define AFE_DMIC2_UL_SRC_CON1             (0x1ad4)
+#define AFE_DMIC2_SRC_DEBUG               (0x1ad8)
+#define AFE_DMIC2_SRC_DEBUG_MON0          (0x1adc)
+#define AFE_DMIC2_UL_SRC_MON0             (0x1ae0)
+#define AFE_DMIC2_UL_SRC_MON1             (0x1ae4)
+#define AFE_DMIC2_IIR_COEF_02_01          (0x1ae8)
+#define AFE_DMIC2_IIR_COEF_04_03          (0x1aec)
+#define AFE_DMIC2_IIR_COEF_06_05          (0x1af0)
+#define AFE_DMIC2_IIR_COEF_08_07          (0x1af4)
+#define AFE_DMIC2_IIR_COEF_10_09          (0x1af8)
+#define AFE_DMIC3_UL_SRC_CON0             (0x1b38)
+#define AFE_DMIC3_UL_SRC_CON1             (0x1b3c)
+#define AFE_DMIC3_SRC_DEBUG               (0x1b40)
+#define AFE_DMIC3_SRC_DEBUG_MON0          (0x1b44)
+#define AFE_DMIC3_UL_SRC_MON0             (0x1b48)
+#define AFE_DMIC3_UL_SRC_MON1             (0x1b4c)
+#define AFE_DMIC3_IIR_COEF_02_01          (0x1b50)
+#define AFE_DMIC3_IIR_COEF_04_03          (0x1b54)
+#define AFE_DMIC3_IIR_COEF_06_05          (0x1b58)
+#define AFE_DMIC3_IIR_COEF_08_07          (0x1b5c)
+#define AFE_DMIC3_IIR_COEF_10_09          (0x1b60)
+#define DMIC_BYPASS_HW_GAIN               (0x1bf0)
+#define DMIC_GAIN1_CON0                   (0x1c00)
+#define DMIC_GAIN1_CON1                   (0x1c04)
+#define DMIC_GAIN1_CON2                   (0x1c08)
+#define DMIC_GAIN1_CON3                   (0x1c0c)
+#define DMIC_GAIN1_CUR                    (0x1c10)
+#define DMIC_GAIN2_CON0                   (0x1c20)
+#define DMIC_GAIN2_CON1                   (0x1c24)
+#define DMIC_GAIN2_CON2                   (0x1c28)
+#define DMIC_GAIN2_CON3                   (0x1c2c)
+#define DMIC_GAIN2_CUR                    (0x1c30)
+#define DMIC_GAIN3_CON0                   (0x1c40)
+#define DMIC_GAIN3_CON1                   (0x1c44)
+#define DMIC_GAIN3_CON2                   (0x1c48)
+#define DMIC_GAIN3_CON3                   (0x1c4c)
+#define DMIC_GAIN3_CUR                    (0x1c50)
+#define DMIC_GAIN4_CON0                   (0x1c60)
+#define DMIC_GAIN4_CON1                   (0x1c64)
+#define DMIC_GAIN4_CON2                   (0x1c68)
+#define DMIC_GAIN4_CON3                   (0x1c6c)
+#define DMIC_GAIN4_CUR                    (0x1c70)
+#define ETDM_OUT1_DSD_FADE_CON            (0x2260)
+#define ETDM_OUT1_DSD_FADE_CON1           (0x2264)
+#define ETDM_OUT3_DSD_FADE_CON            (0x2280)
+#define ETDM_OUT3_DSD_FADE_CON1           (0x2284)
+#define ETDM_IN1_AFIFO_CON                (0x2294)
+#define ETDM_IN2_AFIFO_CON                (0x2298)
+#define ETDM_IN1_MONITOR                  (0x22c0)
+#define ETDM_IN2_MONITOR                  (0x22c4)
+#define ETDM_OUT1_MONITOR                 (0x22d0)
+#define ETDM_OUT2_MONITOR                 (0x22d4)
+#define ETDM_OUT3_MONITOR                 (0x22d8)
+#define ETDM_COWORK_SEC_CON0              (0x22e0)
+#define ETDM_COWORK_SEC_CON1              (0x22e4)
+#define ETDM_COWORK_SEC_CON2              (0x22e8)
+#define ETDM_COWORK_SEC_CON3              (0x22ec)
+#define ETDM_COWORK_CON0                  (0x22f0)
+#define ETDM_COWORK_CON1                  (0x22f4)
+#define ETDM_COWORK_CON2                  (0x22f8)
+#define ETDM_COWORK_CON3                  (0x22fc)
+#define ETDM_IN1_CON0                     (0x2300)
+#define ETDM_IN1_CON1                     (0x2304)
+#define ETDM_IN1_CON2                     (0x2308)
+#define ETDM_IN1_CON3                     (0x230c)
+#define ETDM_IN1_CON4                     (0x2310)
+#define ETDM_IN1_CON5                     (0x2314)
+#define ETDM_IN1_CON6                     (0x2318)
+#define ETDM_IN1_CON7                     (0x231c)
+#define ETDM_IN2_CON0                     (0x2320)
+#define ETDM_IN2_CON1                     (0x2324)
+#define ETDM_IN2_CON2                     (0x2328)
+#define ETDM_IN2_CON3                     (0x232c)
+#define ETDM_IN2_CON4                     (0x2330)
+#define ETDM_IN2_CON5                     (0x2334)
+#define ETDM_IN2_CON6                     (0x2338)
+#define ETDM_IN2_CON7                     (0x233c)
+#define ETDM_OUT1_CON0                    (0x2380)
+#define ETDM_OUT1_CON1                    (0x2384)
+#define ETDM_OUT1_CON2                    (0x2388)
+#define ETDM_OUT1_CON3                    (0x238c)
+#define ETDM_OUT1_CON4                    (0x2390)
+#define ETDM_OUT1_CON5                    (0x2394)
+#define ETDM_OUT1_CON6                    (0x2398)
+#define ETDM_OUT1_CON7                    (0x239c)
+#define ETDM_OUT2_CON0                    (0x23a0)
+#define ETDM_OUT2_CON1                    (0x23a4)
+#define ETDM_OUT2_CON2                    (0x23a8)
+#define ETDM_OUT2_CON3                    (0x23ac)
+#define ETDM_OUT2_CON4                    (0x23b0)
+#define ETDM_OUT2_CON5                    (0x23b4)
+#define ETDM_OUT2_CON6                    (0x23b8)
+#define ETDM_OUT2_CON7                    (0x23bc)
+#define ETDM_OUT3_CON0                    (0x23c0)
+#define ETDM_OUT3_CON1                    (0x23c4)
+#define ETDM_OUT3_CON2                    (0x23c8)
+#define ETDM_OUT3_CON3                    (0x23cc)
+#define ETDM_OUT3_CON4                    (0x23d0)
+#define ETDM_OUT3_CON5                    (0x23d4)
+#define ETDM_OUT3_CON6                    (0x23d8)
+#define ETDM_OUT3_CON7                    (0x23dc)
+#define ETDM_OUT3_CON8                    (0x23e0)
+#define ETDM_OUT1_CON8                    (0x23e4)
+#define ETDM_OUT2_CON8                    (0x23e8)
+#define GASRC_TIMING_CON0                 (0x2414)
+#define GASRC_TIMING_CON1                 (0x2418)
+#define GASRC_TIMING_CON2                 (0x241c)
+#define GASRC_TIMING_CON3                 (0x2420)
+#define GASRC_TIMING_CON4                 (0x2424)
+#define GASRC_TIMING_CON5                 (0x2428)
+#define A3_A4_TIMING_SEL0                 (0x2440)
+#define A3_A4_TIMING_SEL1                 (0x2444)
+#define A3_A4_TIMING_SEL2                 (0x2448)
+#define A3_A4_TIMING_SEL3                 (0x244c)
+#define A3_A4_TIMING_SEL4                 (0x2450)
+#define A3_A4_TIMING_SEL5                 (0x2454)
+#define A3_A4_TIMING_SEL6                 (0x2458)
+#define ASYS_TOP_DEBUG                    (0x2500)
+#define AFE_DPTX_CON                      (0x2558)
+#define AFE_DPTX_MON                      (0x255c)
+#define AFE_ADDA_DL_SRC2_CON0             (0x2d00)
+#define AFE_ADDA_DL_SRC2_CON1             (0x2d04)
+#define AFE_ADDA_TOP_CON0                 (0x2d0c)
+#define AFE_ADDA_UL_DL_CON0               (0x2d10)
+#define AFE_ADDA_SRC_DEBUG                (0x2d14)
+#define AFE_ADDA_SRC_DEBUG_MON0           (0x2d18)
+#define AFE_ADDA_SRC_DEBUG_MON1           (0x2d20)
+#define AFE_ADDA_PREDIS_CON0              (0x2d24)
+#define AFE_ADDA_PREDIS_CON1              (0x2d28)
+#define AFE_ADDA_PREDIS_CON2              (0x2d2c)
+#define AFE_ADDA_PREDIS_CON3              (0x2d30)
+#define AFE_ADDA_DL_SDM_DCCOMP_CON        (0x2d34)
+#define AFE_ADDA_DL_SDM_TEST              (0x2d38)
+#define AFE_ADDA_DL_DC_COMP_CFG0          (0x2d3c)
+#define AFE_ADDA_DL_DC_COMP_CFG1          (0x2d40)
+#define AFE_ADDA_DL_SDM_FIFO_MON          (0x2d44)
+#define AFE_ADDA_DL_SRC_LCH_MON           (0x2d50)
+#define AFE_ADDA_DL_SRC_RCH_MON           (0x2d54)
+#define AFE_ADDA_DL_SDM_OUT_MON           (0x2d58)
+#define AFE_ADDA_DL_SDM_DITHER_CON        (0x2d5c)
+#define AFE_ADDA_DL_SDM_AUTO_RESET_CON    (0x2d60)
+#define AFE_ADDA_UL_SRC_CON0              (0x2e3c)
+#define AFE_ADDA_UL_SRC_CON1              (0x2e40)
+#define AFE_CONN0                         (0x3000)
+#define AFE_CONN0_1                       (0x3004)
+#define AFE_CONN0_2                       (0x3008)
+#define AFE_CONN0_3                       (0x300c)
+#define AFE_CONN0_4                       (0x3010)
+#define AFE_CONN1                         (0x3014)
+#define AFE_CONN1_1                       (0x3018)
+#define AFE_CONN1_2                       (0x301c)
+#define AFE_CONN1_3                       (0x3020)
+#define AFE_CONN1_4                       (0x3024)
+#define AFE_CONN2                         (0x3028)
+#define AFE_CONN2_1                       (0x302c)
+#define AFE_CONN2_2                       (0x3030)
+#define AFE_CONN2_3                       (0x3034)
+#define AFE_CONN2_4                       (0x3038)
+#define AFE_CONN3                         (0x303c)
+#define AFE_CONN3_1                       (0x3040)
+#define AFE_CONN3_2                       (0x3044)
+#define AFE_CONN3_3                       (0x3048)
+#define AFE_CONN3_4                       (0x304c)
+#define AFE_CONN4                         (0x3050)
+#define AFE_CONN4_1                       (0x3054)
+#define AFE_CONN4_2                       (0x3058)
+#define AFE_CONN4_3                       (0x305c)
+#define AFE_CONN4_4                       (0x3060)
+#define AFE_CONN5                         (0x3064)
+#define AFE_CONN5_1                       (0x3068)
+#define AFE_CONN5_2                       (0x306c)
+#define AFE_CONN5_3                       (0x3070)
+#define AFE_CONN5_4                       (0x3074)
+#define AFE_CONN6                         (0x3078)
+#define AFE_CONN6_1                       (0x307c)
+#define AFE_CONN6_2                       (0x3080)
+#define AFE_CONN6_3                       (0x3084)
+#define AFE_CONN6_4                       (0x3088)
+#define AFE_CONN7                         (0x308c)
+#define AFE_CONN7_1                       (0x3090)
+#define AFE_CONN7_2                       (0x3094)
+#define AFE_CONN7_3                       (0x3098)
+#define AFE_CONN7_4                       (0x309c)
+#define AFE_CONN8                         (0x30a0)
+#define AFE_CONN8_1                       (0x30a4)
+#define AFE_CONN8_2                       (0x30a8)
+#define AFE_CONN8_3                       (0x30ac)
+#define AFE_CONN8_4                       (0x30b0)
+#define AFE_CONN9                         (0x30b4)
+#define AFE_CONN9_1                       (0x30b8)
+#define AFE_CONN9_2                       (0x30bc)
+#define AFE_CONN9_3                       (0x30c0)
+#define AFE_CONN9_4                       (0x30c4)
+#define AFE_CONN10                        (0x30c8)
+#define AFE_CONN10_1                      (0x30cc)
+#define AFE_CONN10_2                      (0x30d0)
+#define AFE_CONN10_3                      (0x30d4)
+#define AFE_CONN10_4                      (0x30d8)
+#define AFE_CONN11                        (0x30dc)
+#define AFE_CONN11_1                      (0x30e0)
+#define AFE_CONN11_2                      (0x30e4)
+#define AFE_CONN11_3                      (0x30e8)
+#define AFE_CONN11_4                      (0x30ec)
+#define AFE_CONN12                        (0x30f0)
+#define AFE_CONN12_1                      (0x30f4)
+#define AFE_CONN12_2                      (0x30f8)
+#define AFE_CONN12_3                      (0x30fc)
+#define AFE_CONN12_4                      (0x3100)
+#define AFE_CONN13                        (0x3104)
+#define AFE_CONN13_1                      (0x3108)
+#define AFE_CONN13_2                      (0x310c)
+#define AFE_CONN13_3                      (0x3110)
+#define AFE_CONN13_4                      (0x3114)
+#define AFE_CONN14                        (0x3118)
+#define AFE_CONN14_1                      (0x311c)
+#define AFE_CONN14_2                      (0x3120)
+#define AFE_CONN14_3                      (0x3124)
+#define AFE_CONN14_4                      (0x3128)
+#define AFE_CONN15                        (0x312c)
+#define AFE_CONN15_1                      (0x3130)
+#define AFE_CONN15_2                      (0x3134)
+#define AFE_CONN15_3                      (0x3138)
+#define AFE_CONN15_4                      (0x313c)
+#define AFE_CONN16                        (0x3140)
+#define AFE_CONN16_1                      (0x3144)
+#define AFE_CONN16_2                      (0x3148)
+#define AFE_CONN16_3                      (0x314c)
+#define AFE_CONN16_4                      (0x3150)
+#define AFE_CONN17                        (0x3154)
+#define AFE_CONN17_1                      (0x3158)
+#define AFE_CONN17_2                      (0x315c)
+#define AFE_CONN17_3                      (0x3160)
+#define AFE_CONN17_4                      (0x3164)
+#define AFE_CONN18                        (0x3168)
+#define AFE_CONN18_1                      (0x316c)
+#define AFE_CONN18_2                      (0x3170)
+#define AFE_CONN18_3                      (0x3174)
+#define AFE_CONN18_4                      (0x3178)
+#define AFE_CONN19                        (0x317c)
+#define AFE_CONN19_1                      (0x3180)
+#define AFE_CONN19_2                      (0x3184)
+#define AFE_CONN19_3                      (0x3188)
+#define AFE_CONN19_4                      (0x318c)
+#define AFE_CONN20                        (0x3190)
+#define AFE_CONN20_1                      (0x3194)
+#define AFE_CONN20_2                      (0x3198)
+#define AFE_CONN20_3                      (0x319c)
+#define AFE_CONN20_4                      (0x31a0)
+#define AFE_CONN21                        (0x31a4)
+#define AFE_CONN21_1                      (0x31a8)
+#define AFE_CONN21_2                      (0x31ac)
+#define AFE_CONN21_3                      (0x31b0)
+#define AFE_CONN21_4                      (0x31b4)
+#define AFE_CONN22                        (0x31b8)
+#define AFE_CONN22_1                      (0x31bc)
+#define AFE_CONN22_2                      (0x31c0)
+#define AFE_CONN22_3                      (0x31c4)
+#define AFE_CONN22_4                      (0x31c8)
+#define AFE_CONN23                        (0x31cc)
+#define AFE_CONN23_1                      (0x31d0)
+#define AFE_CONN23_2                      (0x31d4)
+#define AFE_CONN23_3                      (0x31d8)
+#define AFE_CONN23_4                      (0x31dc)
+#define AFE_CONN24                        (0x31e0)
+#define AFE_CONN24_1                      (0x31e4)
+#define AFE_CONN24_2                      (0x31e8)
+#define AFE_CONN24_3                      (0x31ec)
+#define AFE_CONN24_4                      (0x31f0)
+#define AFE_CONN25                        (0x31f4)
+#define AFE_CONN25_1                      (0x31f8)
+#define AFE_CONN25_2                      (0x31fc)
+#define AFE_CONN25_3                      (0x3200)
+#define AFE_CONN25_4                      (0x3204)
+#define AFE_CONN26                        (0x3208)
+#define AFE_CONN26_1                      (0x320c)
+#define AFE_CONN26_2                      (0x3210)
+#define AFE_CONN26_3                      (0x3214)
+#define AFE_CONN26_4                      (0x3218)
+#define AFE_CONN27                        (0x321c)
+#define AFE_CONN27_1                      (0x3220)
+#define AFE_CONN27_2                      (0x3224)
+#define AFE_CONN27_3                      (0x3228)
+#define AFE_CONN27_4                      (0x322c)
+#define AFE_CONN28                        (0x3230)
+#define AFE_CONN28_1                      (0x3234)
+#define AFE_CONN28_2                      (0x3238)
+#define AFE_CONN28_3                      (0x323c)
+#define AFE_CONN28_4                      (0x3240)
+#define AFE_CONN29                        (0x3244)
+#define AFE_CONN29_1                      (0x3248)
+#define AFE_CONN29_2                      (0x324c)
+#define AFE_CONN29_3                      (0x3250)
+#define AFE_CONN29_4                      (0x3254)
+#define AFE_CONN30                        (0x3258)
+#define AFE_CONN30_1                      (0x325c)
+#define AFE_CONN30_2                      (0x3260)
+#define AFE_CONN30_3                      (0x3264)
+#define AFE_CONN30_4                      (0x3268)
+#define AFE_CONN31                        (0x326c)
+#define AFE_CONN31_1                      (0x3270)
+#define AFE_CONN31_2                      (0x3274)
+#define AFE_CONN31_3                      (0x3278)
+#define AFE_CONN31_4                      (0x327c)
+#define AFE_CONN32                        (0x3280)
+#define AFE_CONN32_1                      (0x3284)
+#define AFE_CONN32_2                      (0x3288)
+#define AFE_CONN32_3                      (0x328c)
+#define AFE_CONN32_4                      (0x3290)
+#define AFE_CONN33                        (0x3294)
+#define AFE_CONN33_1                      (0x3298)
+#define AFE_CONN33_2                      (0x329c)
+#define AFE_CONN33_3                      (0x32a0)
+#define AFE_CONN33_4                      (0x32a4)
+#define AFE_CONN34                        (0x32a8)
+#define AFE_CONN34_1                      (0x32ac)
+#define AFE_CONN34_2                      (0x32b0)
+#define AFE_CONN34_3                      (0x32b4)
+#define AFE_CONN34_4                      (0x32b8)
+#define AFE_CONN35                        (0x32bc)
+#define AFE_CONN35_1                      (0x32c0)
+#define AFE_CONN35_2                      (0x32c4)
+#define AFE_CONN35_3                      (0x32c8)
+#define AFE_CONN35_4                      (0x32cc)
+#define AFE_CONN36                        (0x32d0)
+#define AFE_CONN36_1                      (0x32d4)
+#define AFE_CONN36_2                      (0x32d8)
+#define AFE_CONN36_3                      (0x32dc)
+#define AFE_CONN36_4                      (0x32e0)
+#define AFE_CONN37                        (0x32e4)
+#define AFE_CONN37_1                      (0x32e8)
+#define AFE_CONN37_2                      (0x32ec)
+#define AFE_CONN37_3                      (0x32f0)
+#define AFE_CONN37_4                      (0x32f4)
+#define AFE_CONN38                        (0x32f8)
+#define AFE_CONN38_1                      (0x32fc)
+#define AFE_CONN38_2                      (0x3300)
+#define AFE_CONN38_3                      (0x3304)
+#define AFE_CONN38_4                      (0x3308)
+#define AFE_CONN39                        (0x330c)
+#define AFE_CONN39_1                      (0x3310)
+#define AFE_CONN39_2                      (0x3314)
+#define AFE_CONN39_3                      (0x3318)
+#define AFE_CONN39_4                      (0x331c)
+#define AFE_CONN40                        (0x3320)
+#define AFE_CONN40_1                      (0x3324)
+#define AFE_CONN40_2                      (0x3328)
+#define AFE_CONN40_3                      (0x332c)
+#define AFE_CONN40_4                      (0x3330)
+#define AFE_CONN41                        (0x3334)
+#define AFE_CONN41_1                      (0x3338)
+#define AFE_CONN41_2                      (0x333c)
+#define AFE_CONN41_3                      (0x3340)
+#define AFE_CONN41_4                      (0x3344)
+#define AFE_CONN42                        (0x3348)
+#define AFE_CONN42_1                      (0x334c)
+#define AFE_CONN42_2                      (0x3350)
+#define AFE_CONN42_3                      (0x3354)
+#define AFE_CONN42_4                      (0x3358)
+#define AFE_CONN43                        (0x335c)
+#define AFE_CONN43_1                      (0x3360)
+#define AFE_CONN43_2                      (0x3364)
+#define AFE_CONN43_3                      (0x3368)
+#define AFE_CONN43_4                      (0x336c)
+#define AFE_CONN44                        (0x3370)
+#define AFE_CONN44_1                      (0x3374)
+#define AFE_CONN44_2                      (0x3378)
+#define AFE_CONN44_3                      (0x337c)
+#define AFE_CONN44_4                      (0x3380)
+#define AFE_CONN45                        (0x3384)
+#define AFE_CONN45_1                      (0x3388)
+#define AFE_CONN45_2                      (0x338c)
+#define AFE_CONN45_3                      (0x3390)
+#define AFE_CONN45_4                      (0x3394)
+#define AFE_CONN46                        (0x3398)
+#define AFE_CONN46_1                      (0x339c)
+#define AFE_CONN46_2                      (0x33a0)
+#define AFE_CONN46_3                      (0x33a4)
+#define AFE_CONN46_4                      (0x33a8)
+#define AFE_CONN47                        (0x33ac)
+#define AFE_CONN47_1                      (0x33b0)
+#define AFE_CONN47_2                      (0x33b4)
+#define AFE_CONN47_3                      (0x33b8)
+#define AFE_CONN47_4                      (0x33bc)
+#define AFE_CONN48                        (0x33c0)
+#define AFE_CONN48_1                      (0x33c4)
+#define AFE_CONN48_2                      (0x33c8)
+#define AFE_CONN48_3                      (0x33cc)
+#define AFE_CONN48_4                      (0x33d0)
+#define AFE_CONN49                        (0x33d4)
+#define AFE_CONN49_1                      (0x33d8)
+#define AFE_CONN49_2                      (0x33dc)
+#define AFE_CONN49_3                      (0x33e0)
+#define AFE_CONN49_4                      (0x33e4)
+#define AFE_CONN50                        (0x33e8)
+#define AFE_CONN50_1                      (0x33ec)
+#define AFE_CONN50_2                      (0x33f0)
+#define AFE_CONN50_3                      (0x33f4)
+#define AFE_CONN50_4                      (0x33f8)
+#define AFE_CONN51                        (0x33fc)
+#define AFE_CONN51_1                      (0x3400)
+#define AFE_CONN51_2                      (0x3404)
+#define AFE_CONN51_3                      (0x3408)
+#define AFE_CONN51_4                      (0x340c)
+#define AFE_CONN52                        (0x3410)
+#define AFE_CONN52_1                      (0x3414)
+#define AFE_CONN52_2                      (0x3418)
+#define AFE_CONN52_3                      (0x341c)
+#define AFE_CONN52_4                      (0x3420)
+#define AFE_CONN53                        (0x3424)
+#define AFE_CONN53_1                      (0x3428)
+#define AFE_CONN53_2                      (0x342c)
+#define AFE_CONN53_3                      (0x3430)
+#define AFE_CONN53_4                      (0x3434)
+#define AFE_CONN54                        (0x3438)
+#define AFE_CONN54_1                      (0x343c)
+#define AFE_CONN54_2                      (0x3440)
+#define AFE_CONN54_3                      (0x3444)
+#define AFE_CONN54_4                      (0x3448)
+#define AFE_CONN55                        (0x344c)
+#define AFE_CONN55_1                      (0x3450)
+#define AFE_CONN55_2                      (0x3454)
+#define AFE_CONN55_3                      (0x3458)
+#define AFE_CONN55_4                      (0x345c)
+#define AFE_CONN56                        (0x3460)
+#define AFE_CONN56_1                      (0x3464)
+#define AFE_CONN56_2                      (0x3468)
+#define AFE_CONN56_3                      (0x346c)
+#define AFE_CONN56_4                      (0x3470)
+#define AFE_CONN57                        (0x3474)
+#define AFE_CONN57_1                      (0x3478)
+#define AFE_CONN57_2                      (0x347c)
+#define AFE_CONN57_3                      (0x3480)
+#define AFE_CONN57_4                      (0x3484)
+#define AFE_CONN58                        (0x3488)
+#define AFE_CONN58_1                      (0x348c)
+#define AFE_CONN58_2                      (0x3490)
+#define AFE_CONN58_3                      (0x3494)
+#define AFE_CONN58_4                      (0x3498)
+#define AFE_CONN59                        (0x349c)
+#define AFE_CONN59_1                      (0x34a0)
+#define AFE_CONN59_2                      (0x34a4)
+#define AFE_CONN59_3                      (0x34a8)
+#define AFE_CONN59_4                      (0x34ac)
+#define AFE_CONN60                        (0x34b0)
+#define AFE_CONN60_1                      (0x34b4)
+#define AFE_CONN60_2                      (0x34b8)
+#define AFE_CONN60_3                      (0x34bc)
+#define AFE_CONN60_4                      (0x34c0)
+#define AFE_CONN61                        (0x34c4)
+#define AFE_CONN61_1                      (0x34c8)
+#define AFE_CONN61_2                      (0x34cc)
+#define AFE_CONN61_3                      (0x34d0)
+#define AFE_CONN61_4                      (0x34d4)
+#define AFE_CONN62                        (0x34d8)
+#define AFE_CONN62_1                      (0x34dc)
+#define AFE_CONN62_2                      (0x34e0)
+#define AFE_CONN62_3                      (0x34e4)
+#define AFE_CONN62_4                      (0x34e8)
+#define AFE_CONN63                        (0x34ec)
+#define AFE_CONN63_1                      (0x34f0)
+#define AFE_CONN63_2                      (0x34f4)
+#define AFE_CONN63_3                      (0x34f8)
+#define AFE_CONN63_4                      (0x34fc)
+#define AFE_CONN64                        (0x3500)
+#define AFE_CONN64_1                      (0x3504)
+#define AFE_CONN64_2                      (0x3508)
+#define AFE_CONN64_3                      (0x350c)
+#define AFE_CONN64_4                      (0x3510)
+#define AFE_CONN65                        (0x3514)
+#define AFE_CONN65_1                      (0x3518)
+#define AFE_CONN65_2                      (0x351c)
+#define AFE_CONN65_3                      (0x3520)
+#define AFE_CONN65_4                      (0x3524)
+#define AFE_CONN66                        (0x3528)
+#define AFE_CONN66_1                      (0x352c)
+#define AFE_CONN66_2                      (0x3530)
+#define AFE_CONN66_3                      (0x3534)
+#define AFE_CONN66_4                      (0x3538)
+#define AFE_CONN67                        (0x353c)
+#define AFE_CONN67_1                      (0x3540)
+#define AFE_CONN67_2                      (0x3544)
+#define AFE_CONN67_3                      (0x3548)
+#define AFE_CONN67_4                      (0x354c)
+#define AFE_CONN68                        (0x3550)
+#define AFE_CONN68_1                      (0x3554)
+#define AFE_CONN68_2                      (0x3558)
+#define AFE_CONN68_3                      (0x355c)
+#define AFE_CONN68_4                      (0x3560)
+#define AFE_CONN69                        (0x3564)
+#define AFE_CONN69_1                      (0x3568)
+#define AFE_CONN69_2                      (0x356c)
+#define AFE_CONN69_3                      (0x3570)
+#define AFE_CONN69_4                      (0x3574)
+#define AFE_CONN70                        (0x3578)
+#define AFE_CONN70_1                      (0x357c)
+#define AFE_CONN70_2                      (0x3580)
+#define AFE_CONN70_3                      (0x3584)
+#define AFE_CONN70_4                      (0x3588)
+#define AFE_CONN71                        (0x358c)
+#define AFE_CONN71_1                      (0x3590)
+#define AFE_CONN71_2                      (0x3594)
+#define AFE_CONN71_3                      (0x3598)
+#define AFE_CONN71_4                      (0x359c)
+#define AFE_CONN72                        (0x35a0)
+#define AFE_CONN72_1                      (0x35a4)
+#define AFE_CONN72_2                      (0x35a8)
+#define AFE_CONN72_3                      (0x35ac)
+#define AFE_CONN72_4                      (0x35b0)
+#define AFE_CONN73                        (0x35b4)
+#define AFE_CONN73_1                      (0x35b8)
+#define AFE_CONN73_2                      (0x35bc)
+#define AFE_CONN73_3                      (0x35c0)
+#define AFE_CONN73_4                      (0x35c4)
+#define AFE_CONN74                        (0x35c8)
+#define AFE_CONN74_1                      (0x35cc)
+#define AFE_CONN74_2                      (0x35d0)
+#define AFE_CONN74_3                      (0x35d4)
+#define AFE_CONN74_4                      (0x35d8)
+#define AFE_CONN75                        (0x35dc)
+#define AFE_CONN75_1                      (0x35e0)
+#define AFE_CONN75_2                      (0x35e4)
+#define AFE_CONN75_3                      (0x35e8)
+#define AFE_CONN75_4                      (0x35ec)
+#define AFE_CONN76                        (0x35f0)
+#define AFE_CONN76_1                      (0x35f4)
+#define AFE_CONN76_2                      (0x35f8)
+#define AFE_CONN76_3                      (0x35fc)
+#define AFE_CONN76_4                      (0x3600)
+#define AFE_CONN77                        (0x3604)
+#define AFE_CONN77_1                      (0x3608)
+#define AFE_CONN77_2                      (0x360c)
+#define AFE_CONN77_3                      (0x3610)
+#define AFE_CONN77_4                      (0x3614)
+#define AFE_CONN78                        (0x3618)
+#define AFE_CONN78_1                      (0x361c)
+#define AFE_CONN78_2                      (0x3620)
+#define AFE_CONN78_3                      (0x3624)
+#define AFE_CONN78_4                      (0x3628)
+#define AFE_CONN79                        (0x362c)
+#define AFE_CONN79_1                      (0x3630)
+#define AFE_CONN79_2                      (0x3634)
+#define AFE_CONN79_3                      (0x3638)
+#define AFE_CONN79_4                      (0x363c)
+#define AFE_CONN80                        (0x3640)
+#define AFE_CONN80_1                      (0x3644)
+#define AFE_CONN80_2                      (0x3648)
+#define AFE_CONN80_3                      (0x364c)
+#define AFE_CONN80_4                      (0x3650)
+#define AFE_CONN81                        (0x3654)
+#define AFE_CONN81_1                      (0x3658)
+#define AFE_CONN81_2                      (0x365c)
+#define AFE_CONN81_3                      (0x3660)
+#define AFE_CONN81_4                      (0x3664)
+#define AFE_CONN82                        (0x3668)
+#define AFE_CONN82_1                      (0x366c)
+#define AFE_CONN82_2                      (0x3670)
+#define AFE_CONN82_3                      (0x3674)
+#define AFE_CONN82_4                      (0x3678)
+#define AFE_CONN83                        (0x367c)
+#define AFE_CONN83_1                      (0x3680)
+#define AFE_CONN83_2                      (0x3684)
+#define AFE_CONN83_3                      (0x3688)
+#define AFE_CONN83_4                      (0x368c)
+#define AFE_CONN84                        (0x3690)
+#define AFE_CONN84_1                      (0x3694)
+#define AFE_CONN84_2                      (0x3698)
+#define AFE_CONN84_3                      (0x369c)
+#define AFE_CONN84_4                      (0x36a0)
+#define AFE_CONN85                        (0x36a4)
+#define AFE_CONN85_1                      (0x36a8)
+#define AFE_CONN85_2                      (0x36ac)
+#define AFE_CONN85_3                      (0x36b0)
+#define AFE_CONN85_4                      (0x36b4)
+#define AFE_CONN86                        (0x36b8)
+#define AFE_CONN86_1                      (0x36bc)
+#define AFE_CONN86_2                      (0x36c0)
+#define AFE_CONN86_3                      (0x36c4)
+#define AFE_CONN86_4                      (0x36c8)
+#define AFE_CONN87                        (0x36cc)
+#define AFE_CONN87_1                      (0x36d0)
+#define AFE_CONN87_2                      (0x36d4)
+#define AFE_CONN87_3                      (0x36d8)
+#define AFE_CONN87_4                      (0x36dc)
+#define AFE_CONN88                        (0x36e0)
+#define AFE_CONN88_1                      (0x36e4)
+#define AFE_CONN88_2                      (0x36e8)
+#define AFE_CONN88_3                      (0x36ec)
+#define AFE_CONN88_4                      (0x36f0)
+#define AFE_CONN89                        (0x36f4)
+#define AFE_CONN89_1                      (0x36f8)
+#define AFE_CONN89_2                      (0x36fc)
+#define AFE_CONN89_3                      (0x3700)
+#define AFE_CONN89_4                      (0x3704)
+#define AFE_CONN90                        (0x3708)
+#define AFE_CONN90_1                      (0x370c)
+#define AFE_CONN90_2                      (0x3710)
+#define AFE_CONN90_3                      (0x3714)
+#define AFE_CONN90_4                      (0x3718)
+#define AFE_CONN91                        (0x371c)
+#define AFE_CONN91_1                      (0x3720)
+#define AFE_CONN91_2                      (0x3724)
+#define AFE_CONN91_3                      (0x3728)
+#define AFE_CONN91_4                      (0x372c)
+#define AFE_CONN92                        (0x3730)
+#define AFE_CONN92_1                      (0x3734)
+#define AFE_CONN92_2                      (0x3738)
+#define AFE_CONN92_3                      (0x373c)
+#define AFE_CONN92_4                      (0x3740)
+#define AFE_CONN93                        (0x3744)
+#define AFE_CONN93_1                      (0x3748)
+#define AFE_CONN93_2                      (0x374c)
+#define AFE_CONN93_3                      (0x3750)
+#define AFE_CONN93_4                      (0x3754)
+#define AFE_CONN94                        (0x3758)
+#define AFE_CONN94_1                      (0x375c)
+#define AFE_CONN94_2                      (0x3760)
+#define AFE_CONN94_3                      (0x3764)
+#define AFE_CONN94_4                      (0x3768)
+#define AFE_CONN95                        (0x376c)
+#define AFE_CONN95_1                      (0x3770)
+#define AFE_CONN95_2                      (0x3774)
+#define AFE_CONN95_3                      (0x3778)
+#define AFE_CONN95_4                      (0x377c)
+#define AFE_CONN96                        (0x3780)
+#define AFE_CONN96_1                      (0x3784)
+#define AFE_CONN96_2                      (0x3788)
+#define AFE_CONN96_3                      (0x378c)
+#define AFE_CONN96_4                      (0x3790)
+#define AFE_CONN97                        (0x3794)
+#define AFE_CONN97_1                      (0x3798)
+#define AFE_CONN97_2                      (0x379c)
+#define AFE_CONN97_3                      (0x37a0)
+#define AFE_CONN97_4                      (0x37a4)
+#define AFE_CONN98                        (0x37a8)
+#define AFE_CONN98_1                      (0x37ac)
+#define AFE_CONN98_2                      (0x37b0)
+#define AFE_CONN98_3                      (0x37b4)
+#define AFE_CONN98_4                      (0x37b8)
+#define AFE_CONN99                        (0x37bc)
+#define AFE_CONN99_1                      (0x37c0)
+#define AFE_CONN99_2                      (0x37c4)
+#define AFE_CONN99_3                      (0x37c8)
+#define AFE_CONN99_4                      (0x37cc)
+#define AFE_CONN100                       (0x37d0)
+#define AFE_CONN100_1                     (0x37d4)
+#define AFE_CONN100_2                     (0x37d8)
+#define AFE_CONN100_3                     (0x37dc)
+#define AFE_CONN100_4                     (0x37e0)
+#define AFE_CONN101                       (0x37e4)
+#define AFE_CONN101_1                     (0x37e8)
+#define AFE_CONN101_2                     (0x37ec)
+#define AFE_CONN101_3                     (0x37f0)
+#define AFE_CONN101_4                     (0x37f4)
+#define AFE_CONN102                       (0x37f8)
+#define AFE_CONN102_1                     (0x37fc)
+#define AFE_CONN102_2                     (0x3800)
+#define AFE_CONN102_3                     (0x3804)
+#define AFE_CONN102_4                     (0x3808)
+#define AFE_CONN103                       (0x380c)
+#define AFE_CONN103_1                     (0x3810)
+#define AFE_CONN103_2                     (0x3814)
+#define AFE_CONN103_3                     (0x3818)
+#define AFE_CONN103_4                     (0x381c)
+#define AFE_CONN104                       (0x3820)
+#define AFE_CONN104_1                     (0x3824)
+#define AFE_CONN104_2                     (0x3828)
+#define AFE_CONN104_3                     (0x382c)
+#define AFE_CONN104_4                     (0x3830)
+#define AFE_CONN105                       (0x3834)
+#define AFE_CONN105_1                     (0x3838)
+#define AFE_CONN105_2                     (0x383c)
+#define AFE_CONN105_3                     (0x3840)
+#define AFE_CONN105_4                     (0x3844)
+#define AFE_CONN106                       (0x3848)
+#define AFE_CONN106_1                     (0x384c)
+#define AFE_CONN106_2                     (0x3850)
+#define AFE_CONN106_3                     (0x3854)
+#define AFE_CONN106_4                     (0x3858)
+#define AFE_CONN107                       (0x385c)
+#define AFE_CONN107_1                     (0x3860)
+#define AFE_CONN107_2                     (0x3864)
+#define AFE_CONN107_3                     (0x3868)
+#define AFE_CONN107_4                     (0x386c)
+#define AFE_CONN108                       (0x3870)
+#define AFE_CONN108_1                     (0x3874)
+#define AFE_CONN108_2                     (0x3878)
+#define AFE_CONN108_3                     (0x387c)
+#define AFE_CONN108_4                     (0x3880)
+#define AFE_CONN109                       (0x3884)
+#define AFE_CONN109_1                     (0x3888)
+#define AFE_CONN109_2                     (0x388c)
+#define AFE_CONN109_3                     (0x3890)
+#define AFE_CONN109_4                     (0x3894)
+#define AFE_CONN110                       (0x3898)
+#define AFE_CONN110_1                     (0x389c)
+#define AFE_CONN110_2                     (0x38a0)
+#define AFE_CONN110_3                     (0x38a4)
+#define AFE_CONN110_4                     (0x38a8)
+#define AFE_CONN111                       (0x38ac)
+#define AFE_CONN111_1                     (0x38b0)
+#define AFE_CONN111_2                     (0x38b4)
+#define AFE_CONN111_3                     (0x38b8)
+#define AFE_CONN111_4                     (0x38bc)
+#define AFE_CONN112                       (0x38c0)
+#define AFE_CONN112_1                     (0x38c4)
+#define AFE_CONN112_2                     (0x38c8)
+#define AFE_CONN112_3                     (0x38cc)
+#define AFE_CONN112_4                     (0x38d0)
+#define AFE_CONN113                       (0x38d4)
+#define AFE_CONN113_1                     (0x38d8)
+#define AFE_CONN113_2                     (0x38dc)
+#define AFE_CONN113_3                     (0x38e0)
+#define AFE_CONN113_4                     (0x38e4)
+#define AFE_CONN114                       (0x38e8)
+#define AFE_CONN114_1                     (0x38ec)
+#define AFE_CONN114_2                     (0x38f0)
+#define AFE_CONN114_3                     (0x38f4)
+#define AFE_CONN114_4                     (0x38f8)
+#define AFE_CONN115                       (0x38fc)
+#define AFE_CONN115_1                     (0x3900)
+#define AFE_CONN115_2                     (0x3904)
+#define AFE_CONN115_3                     (0x3908)
+#define AFE_CONN115_4                     (0x390c)
+#define AFE_CONN116                       (0x3910)
+#define AFE_CONN116_1                     (0x3914)
+#define AFE_CONN116_2                     (0x3918)
+#define AFE_CONN116_3                     (0x391c)
+#define AFE_CONN116_4                     (0x3920)
+#define AFE_CONN117                       (0x3924)
+#define AFE_CONN117_1                     (0x3928)
+#define AFE_CONN117_2                     (0x392c)
+#define AFE_CONN117_3                     (0x3930)
+#define AFE_CONN117_4                     (0x3934)
+#define AFE_CONN118                       (0x3938)
+#define AFE_CONN118_1                     (0x393c)
+#define AFE_CONN118_2                     (0x3940)
+#define AFE_CONN118_3                     (0x3944)
+#define AFE_CONN118_4                     (0x3948)
+#define AFE_CONN119                       (0x394c)
+#define AFE_CONN119_1                     (0x3950)
+#define AFE_CONN119_2                     (0x3954)
+#define AFE_CONN119_3                     (0x3958)
+#define AFE_CONN119_4                     (0x395c)
+#define AFE_CONN120                       (0x3960)
+#define AFE_CONN120_1                     (0x3964)
+#define AFE_CONN120_2                     (0x3968)
+#define AFE_CONN120_3                     (0x396c)
+#define AFE_CONN120_4                     (0x3970)
+#define AFE_CONN121                       (0x3974)
+#define AFE_CONN121_1                     (0x3978)
+#define AFE_CONN121_2                     (0x397c)
+#define AFE_CONN121_3                     (0x3980)
+#define AFE_CONN121_4                     (0x3984)
+#define AFE_CONN122                       (0x3988)
+#define AFE_CONN122_1                     (0x398c)
+#define AFE_CONN122_2                     (0x3990)
+#define AFE_CONN122_3                     (0x3994)
+#define AFE_CONN122_4                     (0x3998)
+#define AFE_CONN123                       (0x399c)
+#define AFE_CONN123_1                     (0x39a0)
+#define AFE_CONN123_2                     (0x39a4)
+#define AFE_CONN123_3                     (0x39a8)
+#define AFE_CONN123_4                     (0x39ac)
+#define AFE_CONN124                       (0x39b0)
+#define AFE_CONN124_1                     (0x39b4)
+#define AFE_CONN124_2                     (0x39b8)
+#define AFE_CONN124_3                     (0x39bc)
+#define AFE_CONN124_4                     (0x39c0)
+#define AFE_CONN125                       (0x39c4)
+#define AFE_CONN125_1                     (0x39c8)
+#define AFE_CONN125_2                     (0x39cc)
+#define AFE_CONN125_3                     (0x39d0)
+#define AFE_CONN125_4                     (0x39d4)
+#define AFE_CONN126                       (0x39d8)
+#define AFE_CONN126_1                     (0x39dc)
+#define AFE_CONN126_2                     (0x39e0)
+#define AFE_CONN126_3                     (0x39e4)
+#define AFE_CONN126_4                     (0x39e8)
+#define AFE_CONN127                       (0x39ec)
+#define AFE_CONN127_1                     (0x39f0)
+#define AFE_CONN127_2                     (0x39f4)
+#define AFE_CONN127_3                     (0x39f8)
+#define AFE_CONN127_4                     (0x39fc)
+#define AFE_CONN128                       (0x3a00)
+#define AFE_CONN128_1                     (0x3a04)
+#define AFE_CONN128_2                     (0x3a08)
+#define AFE_CONN128_3                     (0x3a0c)
+#define AFE_CONN128_4                     (0x3a10)
+#define AFE_CONN129                       (0x3a14)
+#define AFE_CONN129_1                     (0x3a18)
+#define AFE_CONN129_2                     (0x3a1c)
+#define AFE_CONN129_3                     (0x3a20)
+#define AFE_CONN129_4                     (0x3a24)
+#define AFE_CONN130                       (0x3a28)
+#define AFE_CONN130_1                     (0x3a2c)
+#define AFE_CONN130_2                     (0x3a30)
+#define AFE_CONN130_3                     (0x3a34)
+#define AFE_CONN130_4                     (0x3a38)
+#define AFE_CONN131                       (0x3a3c)
+#define AFE_CONN131_1                     (0x3a40)
+#define AFE_CONN131_2                     (0x3a44)
+#define AFE_CONN131_3                     (0x3a48)
+#define AFE_CONN131_4                     (0x3a4c)
+#define AFE_CONN132                       (0x3a50)
+#define AFE_CONN132_1                     (0x3a54)
+#define AFE_CONN132_2                     (0x3a58)
+#define AFE_CONN132_3                     (0x3a5c)
+#define AFE_CONN132_4                     (0x3a60)
+#define AFE_CONN133                       (0x3a64)
+#define AFE_CONN133_1                     (0x3a68)
+#define AFE_CONN133_2                     (0x3a6c)
+#define AFE_CONN133_3                     (0x3a70)
+#define AFE_CONN133_4                     (0x3a74)
+#define AFE_CONN134                       (0x3a78)
+#define AFE_CONN134_1                     (0x3a7c)
+#define AFE_CONN134_2                     (0x3a80)
+#define AFE_CONN134_3                     (0x3a84)
+#define AFE_CONN134_4                     (0x3a88)
+#define AFE_CONN135                       (0x3a8c)
+#define AFE_CONN135_1                     (0x3a90)
+#define AFE_CONN135_2                     (0x3a94)
+#define AFE_CONN135_3                     (0x3a98)
+#define AFE_CONN135_4                     (0x3a9c)
+#define AFE_CONN136                       (0x3aa0)
+#define AFE_CONN136_1                     (0x3aa4)
+#define AFE_CONN136_2                     (0x3aa8)
+#define AFE_CONN136_3                     (0x3aac)
+#define AFE_CONN136_4                     (0x3ab0)
+#define AFE_CONN137                       (0x3ab4)
+#define AFE_CONN137_1                     (0x3ab8)
+#define AFE_CONN137_2                     (0x3abc)
+#define AFE_CONN137_3                     (0x3ac0)
+#define AFE_CONN137_4                     (0x3ac4)
+#define AFE_CONN138                       (0x3ac8)
+#define AFE_CONN138_1                     (0x3acc)
+#define AFE_CONN138_2                     (0x3ad0)
+#define AFE_CONN138_3                     (0x3ad4)
+#define AFE_CONN138_4                     (0x3ad8)
+#define AFE_CONN139                       (0x3adc)
+#define AFE_CONN139_1                     (0x3ae0)
+#define AFE_CONN139_2                     (0x3ae4)
+#define AFE_CONN139_3                     (0x3ae8)
+#define AFE_CONN139_4                     (0x3aec)
+#define AFE_CONN_RS                       (0x3af0)
+#define AFE_CONN_RS_1                     (0x3af4)
+#define AFE_CONN_RS_2                     (0x3af8)
+#define AFE_CONN_RS_3                     (0x3afc)
+#define AFE_CONN_RS_4                     (0x3b00)
+#define AFE_CONN_16BIT                    (0x3b04)
+#define AFE_CONN_16BIT_1                  (0x3b08)
+#define AFE_CONN_16BIT_2                  (0x3b0c)
+#define AFE_CONN_16BIT_3                  (0x3b10)
+#define AFE_CONN_16BIT_4                  (0x3b14)
+#define AFE_CONN_24BIT                    (0x3b18)
+#define AFE_CONN_24BIT_1                  (0x3b1c)
+#define AFE_CONN_24BIT_2                  (0x3b20)
+#define AFE_CONN_24BIT_3                  (0x3b24)
+#define AFE_CONN_24BIT_4                  (0x3b28)
+#define AFE_CONN_DI                       (0x3b2c)
+#define AFE_CONN_DI_1                     (0x3b30)
+#define AFE_CONN_DI_2                     (0x3b34)
+#define AFE_CONN_DI_3                     (0x3b38)
+#define AFE_CONN_DI_4                     (0x3b3c)
+#define AFE_CONN176                       (0x3ea0)
+#define AFE_CONN176_1                     (0x3ea4)
+#define AFE_CONN176_2                     (0x3ea8)
+#define AFE_CONN176_3                     (0x3eac)
+#define AFE_CONN176_4                     (0x3eb0)
+#define AFE_CONN176_5                     (0x3eb4)
+#define AFE_CONN177                       (0x3eb8)
+#define AFE_CONN177_1                     (0x3ebc)
+#define AFE_CONN177_2                     (0x3ec0)
+#define AFE_CONN177_3                     (0x3ec4)
+#define AFE_CONN177_4                     (0x3ec8)
+#define AFE_CONN177_5                     (0x3ecc)
+#define AFE_CONN182                       (0x3f30)
+#define AFE_CONN182_1                     (0x3f34)
+#define AFE_CONN182_2                     (0x3f38)
+#define AFE_CONN182_3                     (0x3f3c)
+#define AFE_CONN182_4                     (0x3f40)
+#define AFE_CONN182_5                     (0x3f44)
+#define AFE_CONN183                       (0x3f48)
+#define AFE_CONN183_1                     (0x3f4c)
+#define AFE_CONN183_2                     (0x3f50)
+#define AFE_CONN183_3                     (0x3f54)
+#define AFE_CONN183_4                     (0x3f58)
+#define AFE_CONN183_5                     (0x3f5c)
+#define AFE_SECURE_MASK_CONN0             (0x4000)
+#define AFE_SECURE_MASK_CONN0_1           (0x4004)
+#define AFE_SECURE_MASK_CONN0_2           (0x4008)
+#define AFE_SECURE_MASK_CONN0_3           (0x400c)
+#define AFE_SECURE_MASK_CONN0_4           (0x4010)
+#define AFE_SECURE_MASK_CONN1             (0x4014)
+#define AFE_SECURE_MASK_CONN1_1           (0x4018)
+#define AFE_SECURE_MASK_CONN1_2           (0x401c)
+#define AFE_SECURE_MASK_CONN1_3           (0x4020)
+#define AFE_SECURE_MASK_CONN1_4           (0x4024)
+#define AFE_SECURE_MASK_CONN2             (0x4028)
+#define AFE_SECURE_MASK_CONN2_1           (0x402c)
+#define AFE_SECURE_MASK_CONN2_2           (0x4030)
+#define AFE_SECURE_MASK_CONN2_3           (0x4034)
+#define AFE_SECURE_MASK_CONN2_4           (0x4038)
+#define AFE_SECURE_MASK_CONN3             (0x403c)
+#define AFE_SECURE_MASK_CONN3_1           (0x4040)
+#define AFE_SECURE_MASK_CONN3_2           (0x4044)
+#define AFE_SECURE_MASK_CONN3_3           (0x4048)
+#define AFE_SECURE_MASK_CONN3_4           (0x404c)
+#define AFE_SECURE_MASK_CONN4             (0x4050)
+#define AFE_SECURE_MASK_CONN4_1           (0x4054)
+#define AFE_SECURE_MASK_CONN4_2           (0x4058)
+#define AFE_SECURE_MASK_CONN4_3           (0x405c)
+#define AFE_SECURE_MASK_CONN4_4           (0x4060)
+#define AFE_SECURE_MASK_CONN5             (0x4064)
+#define AFE_SECURE_MASK_CONN5_1           (0x4068)
+#define AFE_SECURE_MASK_CONN5_2           (0x406c)
+#define AFE_SECURE_MASK_CONN5_3           (0x4070)
+#define AFE_SECURE_MASK_CONN5_4           (0x4074)
+#define AFE_SECURE_MASK_CONN6             (0x4078)
+#define AFE_SECURE_MASK_CONN6_1           (0x407c)
+#define AFE_SECURE_MASK_CONN6_2           (0x4080)
+#define AFE_SECURE_MASK_CONN6_3           (0x4084)
+#define AFE_SECURE_MASK_CONN6_4           (0x4088)
+#define AFE_SECURE_MASK_CONN7             (0x408c)
+#define AFE_SECURE_MASK_CONN7_1           (0x4090)
+#define AFE_SECURE_MASK_CONN7_2           (0x4094)
+#define AFE_SECURE_MASK_CONN7_3           (0x4098)
+#define AFE_SECURE_MASK_CONN7_4           (0x409c)
+#define AFE_SECURE_MASK_CONN8             (0x40a0)
+#define AFE_SECURE_MASK_CONN8_1           (0x40a4)
+#define AFE_SECURE_MASK_CONN8_2           (0x40a8)
+#define AFE_SECURE_MASK_CONN8_3           (0x40ac)
+#define AFE_SECURE_MASK_CONN8_4           (0x40b0)
+#define AFE_SECURE_MASK_CONN9             (0x40b4)
+#define AFE_SECURE_MASK_CONN9_1           (0x40b8)
+#define AFE_SECURE_MASK_CONN9_2           (0x40bc)
+#define AFE_SECURE_MASK_CONN9_3           (0x40c0)
+#define AFE_SECURE_MASK_CONN9_4           (0x40c4)
+#define AFE_SECURE_MASK_CONN10            (0x40c8)
+#define AFE_SECURE_MASK_CONN10_1          (0x40cc)
+#define AFE_SECURE_MASK_CONN10_2          (0x40d0)
+#define AFE_SECURE_MASK_CONN10_3          (0x40d4)
+#define AFE_SECURE_MASK_CONN10_4          (0x40d8)
+#define AFE_SECURE_MASK_CONN11            (0x40dc)
+#define AFE_SECURE_MASK_CONN11_1          (0x40e0)
+#define AFE_SECURE_MASK_CONN11_2          (0x40e4)
+#define AFE_SECURE_MASK_CONN11_3          (0x40e8)
+#define AFE_SECURE_MASK_CONN11_4          (0x40ec)
+#define AFE_SECURE_MASK_CONN12            (0x40f0)
+#define AFE_SECURE_MASK_CONN12_1          (0x40f4)
+#define AFE_SECURE_MASK_CONN12_2          (0x40f8)
+#define AFE_SECURE_MASK_CONN12_3          (0x40fc)
+#define AFE_SECURE_MASK_CONN12_4          (0x4100)
+#define AFE_SECURE_MASK_CONN13            (0x4104)
+#define AFE_SECURE_MASK_CONN13_1          (0x4108)
+#define AFE_SECURE_MASK_CONN13_2          (0x410c)
+#define AFE_SECURE_MASK_CONN13_3          (0x4110)
+#define AFE_SECURE_MASK_CONN13_4          (0x4114)
+#define AFE_SECURE_MASK_CONN14            (0x4118)
+#define AFE_SECURE_MASK_CONN14_1          (0x411c)
+#define AFE_SECURE_MASK_CONN14_2          (0x4120)
+#define AFE_SECURE_MASK_CONN14_3          (0x4124)
+#define AFE_SECURE_MASK_CONN14_4          (0x4128)
+#define AFE_SECURE_MASK_CONN15            (0x412c)
+#define AFE_SECURE_MASK_CONN15_1          (0x4130)
+#define AFE_SECURE_MASK_CONN15_2          (0x4134)
+#define AFE_SECURE_MASK_CONN15_3          (0x4138)
+#define AFE_SECURE_MASK_CONN15_4          (0x413c)
+#define AFE_SECURE_MASK_CONN16            (0x4140)
+#define AFE_SECURE_MASK_CONN16_1          (0x4144)
+#define AFE_SECURE_MASK_CONN16_2          (0x4148)
+#define AFE_SECURE_MASK_CONN16_3          (0x414c)
+#define AFE_SECURE_MASK_CONN16_4          (0x4150)
+#define AFE_SECURE_MASK_CONN17            (0x4154)
+#define AFE_SECURE_MASK_CONN17_1          (0x4158)
+#define AFE_SECURE_MASK_CONN17_2          (0x415c)
+#define AFE_SECURE_MASK_CONN17_3          (0x4160)
+#define AFE_SECURE_MASK_CONN17_4          (0x4164)
+#define AFE_SECURE_MASK_CONN18            (0x4168)
+#define AFE_SECURE_MASK_CONN18_1          (0x416c)
+#define AFE_SECURE_MASK_CONN18_2          (0x4170)
+#define AFE_SECURE_MASK_CONN18_3          (0x4174)
+#define AFE_SECURE_MASK_CONN18_4          (0x4178)
+#define AFE_SECURE_MASK_CONN19            (0x417c)
+#define AFE_SECURE_MASK_CONN19_1          (0x4180)
+#define AFE_SECURE_MASK_CONN19_2          (0x4184)
+#define AFE_SECURE_MASK_CONN19_3          (0x4188)
+#define AFE_SECURE_MASK_CONN19_4          (0x418c)
+#define AFE_SECURE_MASK_CONN20            (0x4190)
+#define AFE_SECURE_MASK_CONN20_1          (0x4194)
+#define AFE_SECURE_MASK_CONN20_2          (0x4198)
+#define AFE_SECURE_MASK_CONN20_3          (0x419c)
+#define AFE_SECURE_MASK_CONN20_4          (0x41a0)
+#define AFE_SECURE_MASK_CONN21            (0x41a4)
+#define AFE_SECURE_MASK_CONN21_1          (0x41a8)
+#define AFE_SECURE_MASK_CONN21_2          (0x41ac)
+#define AFE_SECURE_MASK_CONN21_3          (0x41b0)
+#define AFE_SECURE_MASK_CONN21_4          (0x41b4)
+#define AFE_SECURE_MASK_CONN22            (0x41b8)
+#define AFE_SECURE_MASK_CONN22_1          (0x41bc)
+#define AFE_SECURE_MASK_CONN22_2          (0x41c0)
+#define AFE_SECURE_MASK_CONN22_3          (0x41c4)
+#define AFE_SECURE_MASK_CONN22_4          (0x41c8)
+#define AFE_SECURE_MASK_CONN23            (0x41cc)
+#define AFE_SECURE_MASK_CONN23_1          (0x41d0)
+#define AFE_SECURE_MASK_CONN23_2          (0x41d4)
+#define AFE_SECURE_MASK_CONN23_3          (0x41d8)
+#define AFE_SECURE_MASK_CONN23_4          (0x41dc)
+#define AFE_SECURE_MASK_CONN24            (0x41e0)
+#define AFE_SECURE_MASK_CONN24_1          (0x41e4)
+#define AFE_SECURE_MASK_CONN24_2          (0x41e8)
+#define AFE_SECURE_MASK_CONN24_3          (0x41ec)
+#define AFE_SECURE_MASK_CONN24_4          (0x41f0)
+#define AFE_SECURE_MASK_CONN25            (0x41f4)
+#define AFE_SECURE_MASK_CONN25_1          (0x41f8)
+#define AFE_SECURE_MASK_CONN25_2          (0x41fc)
+#define AFE_SECURE_MASK_CONN25_3          (0x4200)
+#define AFE_SECURE_MASK_CONN25_4          (0x4204)
+#define AFE_SECURE_MASK_CONN26            (0x4208)
+#define AFE_SECURE_MASK_CONN26_1          (0x420c)
+#define AFE_SECURE_MASK_CONN26_2          (0x4210)
+#define AFE_SECURE_MASK_CONN26_3          (0x4214)
+#define AFE_SECURE_MASK_CONN26_4          (0x4218)
+#define AFE_SECURE_MASK_CONN27            (0x421c)
+#define AFE_SECURE_MASK_CONN27_1          (0x4220)
+#define AFE_SECURE_MASK_CONN27_2          (0x4224)
+#define AFE_SECURE_MASK_CONN27_3          (0x4228)
+#define AFE_SECURE_MASK_CONN27_4          (0x422c)
+#define AFE_SECURE_MASK_CONN28            (0x4230)
+#define AFE_SECURE_MASK_CONN28_1          (0x4234)
+#define AFE_SECURE_MASK_CONN28_2          (0x4238)
+#define AFE_SECURE_MASK_CONN28_3          (0x423c)
+#define AFE_SECURE_MASK_CONN28_4          (0x4240)
+#define AFE_SECURE_MASK_CONN29            (0x4244)
+#define AFE_SECURE_MASK_CONN29_1          (0x4248)
+#define AFE_SECURE_MASK_CONN29_2          (0x424c)
+#define AFE_SECURE_MASK_CONN29_3          (0x4250)
+#define AFE_SECURE_MASK_CONN29_4          (0x4254)
+#define AFE_SECURE_MASK_CONN30            (0x4258)
+#define AFE_SECURE_MASK_CONN30_1          (0x425c)
+#define AFE_SECURE_MASK_CONN30_2          (0x4260)
+#define AFE_SECURE_MASK_CONN30_3          (0x4264)
+#define AFE_SECURE_MASK_CONN30_4          (0x4268)
+#define AFE_SECURE_MASK_CONN31            (0x426c)
+#define AFE_SECURE_MASK_CONN31_1          (0x4270)
+#define AFE_SECURE_MASK_CONN31_2          (0x4274)
+#define AFE_SECURE_MASK_CONN31_3          (0x4278)
+#define AFE_SECURE_MASK_CONN31_4          (0x427c)
+#define AFE_SECURE_MASK_CONN32            (0x4280)
+#define AFE_SECURE_MASK_CONN32_1          (0x4284)
+#define AFE_SECURE_MASK_CONN32_2          (0x4288)
+#define AFE_SECURE_MASK_CONN32_3          (0x428c)
+#define AFE_SECURE_MASK_CONN32_4          (0x4290)
+#define AFE_SECURE_MASK_CONN33            (0x4294)
+#define AFE_SECURE_MASK_CONN33_1          (0x4298)
+#define AFE_SECURE_MASK_CONN33_2          (0x429c)
+#define AFE_SECURE_MASK_CONN33_3          (0x42a0)
+#define AFE_SECURE_MASK_CONN33_4          (0x42a4)
+#define AFE_SECURE_MASK_CONN34            (0x42a8)
+#define AFE_SECURE_MASK_CONN34_1          (0x42ac)
+#define AFE_SECURE_MASK_CONN34_2          (0x42b0)
+#define AFE_SECURE_MASK_CONN34_3          (0x42b4)
+#define AFE_SECURE_MASK_CONN34_4          (0x42b8)
+#define AFE_SECURE_MASK_CONN35            (0x42bc)
+#define AFE_SECURE_MASK_CONN35_1          (0x42c0)
+#define AFE_SECURE_MASK_CONN35_2          (0x42c4)
+#define AFE_SECURE_MASK_CONN35_3          (0x42c8)
+#define AFE_SECURE_MASK_CONN35_4          (0x42cc)
+#define AFE_SECURE_MASK_CONN36            (0x42d0)
+#define AFE_SECURE_MASK_CONN36_1          (0x42d4)
+#define AFE_SECURE_MASK_CONN36_2          (0x42d8)
+#define AFE_SECURE_MASK_CONN36_3          (0x42dc)
+#define AFE_SECURE_MASK_CONN36_4          (0x42e0)
+#define AFE_SECURE_MASK_CONN37            (0x42e4)
+#define AFE_SECURE_MASK_CONN37_1          (0x42e8)
+#define AFE_SECURE_MASK_CONN37_2          (0x42ec)
+#define AFE_SECURE_MASK_CONN37_3          (0x42f0)
+#define AFE_SECURE_MASK_CONN37_4          (0x42f4)
+#define AFE_SECURE_MASK_CONN38            (0x42f8)
+#define AFE_SECURE_MASK_CONN38_1          (0x42fc)
+#define AFE_SECURE_MASK_CONN38_2          (0x4300)
+#define AFE_SECURE_MASK_CONN38_3          (0x4304)
+#define AFE_SECURE_MASK_CONN38_4          (0x4308)
+#define AFE_SECURE_MASK_CONN39            (0x430c)
+#define AFE_SECURE_MASK_CONN39_1          (0x4310)
+#define AFE_SECURE_MASK_CONN39_2          (0x4314)
+#define AFE_SECURE_MASK_CONN39_3          (0x4318)
+#define AFE_SECURE_MASK_CONN39_4          (0x431c)
+#define AFE_SECURE_MASK_CONN40            (0x4320)
+#define AFE_SECURE_MASK_CONN40_1          (0x4324)
+#define AFE_SECURE_MASK_CONN40_2          (0x4328)
+#define AFE_SECURE_MASK_CONN40_3          (0x432c)
+#define AFE_SECURE_MASK_CONN40_4          (0x4330)
+#define AFE_SECURE_MASK_CONN41            (0x4334)
+#define AFE_SECURE_MASK_CONN41_1          (0x4338)
+#define AFE_SECURE_MASK_CONN41_2          (0x433c)
+#define AFE_SECURE_MASK_CONN41_3          (0x4340)
+#define AFE_SECURE_MASK_CONN41_4          (0x4344)
+#define AFE_SECURE_MASK_CONN42            (0x4348)
+#define AFE_SECURE_MASK_CONN42_1          (0x434c)
+#define AFE_SECURE_MASK_CONN42_2          (0x4350)
+#define AFE_SECURE_MASK_CONN42_3          (0x4354)
+#define AFE_SECURE_MASK_CONN42_4          (0x4358)
+#define AFE_SECURE_MASK_CONN43            (0x435c)
+#define AFE_SECURE_MASK_CONN43_1          (0x4360)
+#define AFE_SECURE_MASK_CONN43_2          (0x4364)
+#define AFE_SECURE_MASK_CONN43_3          (0x4368)
+#define AFE_SECURE_MASK_CONN43_4          (0x436c)
+#define AFE_SECURE_MASK_CONN44            (0x4370)
+#define AFE_SECURE_MASK_CONN44_1          (0x4374)
+#define AFE_SECURE_MASK_CONN44_2          (0x4378)
+#define AFE_SECURE_MASK_CONN44_3          (0x437c)
+#define AFE_SECURE_MASK_CONN44_4          (0x4380)
+#define AFE_SECURE_MASK_CONN45            (0x4384)
+#define AFE_SECURE_MASK_CONN45_1          (0x4388)
+#define AFE_SECURE_MASK_CONN45_2          (0x438c)
+#define AFE_SECURE_MASK_CONN45_3          (0x4390)
+#define AFE_SECURE_MASK_CONN45_4          (0x4394)
+#define AFE_SECURE_MASK_CONN46            (0x4398)
+#define AFE_SECURE_MASK_CONN46_1          (0x439c)
+#define AFE_SECURE_MASK_CONN46_2          (0x43a0)
+#define AFE_SECURE_MASK_CONN46_3          (0x43a4)
+#define AFE_SECURE_MASK_CONN46_4          (0x43a8)
+#define AFE_SECURE_MASK_CONN47            (0x43ac)
+#define AFE_SECURE_MASK_CONN47_1          (0x43b0)
+#define AFE_SECURE_MASK_CONN47_2          (0x43b4)
+#define AFE_SECURE_MASK_CONN47_3          (0x43b8)
+#define AFE_SECURE_MASK_CONN47_4          (0x43bc)
+#define AFE_SECURE_MASK_CONN48            (0x43c0)
+#define AFE_SECURE_MASK_CONN48_1          (0x43c4)
+#define AFE_SECURE_MASK_CONN48_2          (0x43c8)
+#define AFE_SECURE_MASK_CONN48_3          (0x43cc)
+#define AFE_SECURE_MASK_CONN48_4          (0x43d0)
+#define AFE_SECURE_MASK_CONN49            (0x43d4)
+#define AFE_SECURE_MASK_CONN49_1          (0x43d8)
+#define AFE_SECURE_MASK_CONN49_2          (0x43dc)
+#define AFE_SECURE_MASK_CONN49_3          (0x43e0)
+#define AFE_SECURE_MASK_CONN49_4          (0x43e4)
+#define AFE_SECURE_MASK_CONN50            (0x43e8)
+#define AFE_SECURE_MASK_CONN50_1          (0x43ec)
+#define AFE_SECURE_MASK_CONN50_2          (0x43f0)
+#define AFE_SECURE_MASK_CONN50_3          (0x43f4)
+#define AFE_SECURE_MASK_CONN50_4          (0x43f8)
+#define AFE_SECURE_MASK_CONN51            (0x43fc)
+#define AFE_SECURE_MASK_CONN51_1          (0x4400)
+#define AFE_SECURE_MASK_CONN51_2          (0x4404)
+#define AFE_SECURE_MASK_CONN51_3          (0x4408)
+#define AFE_SECURE_MASK_CONN51_4          (0x440c)
+#define AFE_SECURE_MASK_CONN52            (0x4410)
+#define AFE_SECURE_MASK_CONN52_1          (0x4414)
+#define AFE_SECURE_MASK_CONN52_2          (0x4418)
+#define AFE_SECURE_MASK_CONN52_3          (0x441c)
+#define AFE_SECURE_MASK_CONN52_4          (0x4420)
+#define AFE_SECURE_MASK_CONN53            (0x4424)
+#define AFE_SECURE_MASK_CONN53_1          (0x4428)
+#define AFE_SECURE_MASK_CONN53_2          (0x442c)
+#define AFE_SECURE_MASK_CONN53_3          (0x4430)
+#define AFE_SECURE_MASK_CONN53_4          (0x4434)
+#define AFE_SECURE_MASK_CONN54            (0x4438)
+#define AFE_SECURE_MASK_CONN54_1          (0x443c)
+#define AFE_SECURE_MASK_CONN54_2          (0x4440)
+#define AFE_SECURE_MASK_CONN54_3          (0x4444)
+#define AFE_SECURE_MASK_CONN54_4          (0x4448)
+#define AFE_SECURE_MASK_CONN55            (0x444c)
+#define AFE_SECURE_MASK_CONN55_1          (0x4450)
+#define AFE_SECURE_MASK_CONN55_2          (0x4454)
+#define AFE_SECURE_MASK_CONN55_3          (0x4458)
+#define AFE_SECURE_MASK_CONN55_4          (0x445c)
+#define AFE_SECURE_MASK_CONN56            (0x4460)
+#define AFE_SECURE_MASK_CONN56_1          (0x4464)
+#define AFE_SECURE_MASK_CONN56_2          (0x4468)
+#define AFE_SECURE_MASK_CONN56_3          (0x446c)
+#define AFE_SECURE_MASK_CONN56_4          (0x4470)
+#define AFE_SECURE_MASK_CONN57            (0x4474)
+#define AFE_SECURE_MASK_CONN57_1          (0x4478)
+#define AFE_SECURE_MASK_CONN57_2          (0x447c)
+#define AFE_SECURE_MASK_CONN57_3          (0x4480)
+#define AFE_SECURE_MASK_CONN57_4          (0x4484)
+#define AFE_SECURE_MASK_CONN58            (0x4488)
+#define AFE_SECURE_MASK_CONN58_1          (0x448c)
+#define AFE_SECURE_MASK_CONN58_2          (0x4490)
+#define AFE_SECURE_MASK_CONN58_3          (0x4494)
+#define AFE_SECURE_MASK_CONN58_4          (0x4498)
+#define AFE_SECURE_MASK_CONN59            (0x449c)
+#define AFE_SECURE_MASK_CONN59_1          (0x44a0)
+#define AFE_SECURE_MASK_CONN59_2          (0x44a4)
+#define AFE_SECURE_MASK_CONN59_3          (0x44a8)
+#define AFE_SECURE_MASK_CONN59_4          (0x44ac)
+#define AFE_SECURE_MASK_CONN60            (0x44b0)
+#define AFE_SECURE_MASK_CONN60_1          (0x44b4)
+#define AFE_SECURE_MASK_CONN60_2          (0x44b8)
+#define AFE_SECURE_MASK_CONN60_3          (0x44bc)
+#define AFE_SECURE_MASK_CONN60_4          (0x44c0)
+#define AFE_SECURE_MASK_CONN61            (0x44c4)
+#define AFE_SECURE_MASK_CONN61_1          (0x44c8)
+#define AFE_SECURE_MASK_CONN61_2          (0x44cc)
+#define AFE_SECURE_MASK_CONN61_3          (0x44d0)
+#define AFE_SECURE_MASK_CONN61_4          (0x44d4)
+#define AFE_SECURE_MASK_CONN62            (0x44d8)
+#define AFE_SECURE_MASK_CONN62_1          (0x44dc)
+#define AFE_SECURE_MASK_CONN62_2          (0x44e0)
+#define AFE_SECURE_MASK_CONN62_3          (0x44e4)
+#define AFE_SECURE_MASK_CONN62_4          (0x44e8)
+#define AFE_SECURE_MASK_CONN63            (0x44ec)
+#define AFE_SECURE_MASK_CONN63_1          (0x44f0)
+#define AFE_SECURE_MASK_CONN63_2          (0x44f4)
+#define AFE_SECURE_MASK_CONN63_3          (0x44f8)
+#define AFE_SECURE_MASK_CONN63_4          (0x44fc)
+#define AFE_SECURE_MASK_CONN64            (0x4500)
+#define AFE_SECURE_MASK_CONN64_1          (0x4504)
+#define AFE_SECURE_MASK_CONN64_2          (0x4508)
+#define AFE_SECURE_MASK_CONN64_3          (0x450c)
+#define AFE_SECURE_MASK_CONN64_4          (0x4510)
+#define AFE_SECURE_MASK_CONN65            (0x4514)
+#define AFE_SECURE_MASK_CONN65_1          (0x4518)
+#define AFE_SECURE_MASK_CONN65_2          (0x451c)
+#define AFE_SECURE_MASK_CONN65_3          (0x4520)
+#define AFE_SECURE_MASK_CONN65_4          (0x4524)
+#define AFE_SECURE_MASK_CONN66            (0x4528)
+#define AFE_SECURE_MASK_CONN66_1          (0x452c)
+#define AFE_SECURE_MASK_CONN66_2          (0x4530)
+#define AFE_SECURE_MASK_CONN66_3          (0x4534)
+#define AFE_SECURE_MASK_CONN66_4          (0x4538)
+#define AFE_SECURE_MASK_CONN67            (0x453c)
+#define AFE_SECURE_MASK_CONN67_1          (0x4540)
+#define AFE_SECURE_MASK_CONN67_2          (0x4544)
+#define AFE_SECURE_MASK_CONN67_3          (0x4548)
+#define AFE_SECURE_MASK_CONN67_4          (0x454c)
+#define AFE_SECURE_MASK_CONN68            (0x4550)
+#define AFE_SECURE_MASK_CONN68_1          (0x4554)
+#define AFE_SECURE_MASK_CONN68_2          (0x4558)
+#define AFE_SECURE_MASK_CONN68_3          (0x455c)
+#define AFE_SECURE_MASK_CONN68_4          (0x4560)
+#define AFE_SECURE_MASK_CONN69            (0x4564)
+#define AFE_SECURE_MASK_CONN69_1          (0x4568)
+#define AFE_SECURE_MASK_CONN69_2          (0x456c)
+#define AFE_SECURE_MASK_CONN69_3          (0x4570)
+#define AFE_SECURE_MASK_CONN69_4          (0x4574)
+#define AFE_SECURE_MASK_CONN70            (0x4578)
+#define AFE_SECURE_MASK_CONN70_1          (0x457c)
+#define AFE_SECURE_MASK_CONN70_2          (0x4580)
+#define AFE_SECURE_MASK_CONN70_3          (0x4584)
+#define AFE_SECURE_MASK_CONN70_4          (0x4588)
+#define AFE_SECURE_MASK_CONN71            (0x458c)
+#define AFE_SECURE_MASK_CONN71_1          (0x4590)
+#define AFE_SECURE_MASK_CONN71_2          (0x4594)
+#define AFE_SECURE_MASK_CONN71_3          (0x4598)
+#define AFE_SECURE_MASK_CONN71_4          (0x459c)
+#define AFE_SECURE_MASK_CONN72            (0x45a0)
+#define AFE_SECURE_MASK_CONN72_1          (0x45a4)
+#define AFE_SECURE_MASK_CONN72_2          (0x45a8)
+#define AFE_SECURE_MASK_CONN72_3          (0x45ac)
+#define AFE_SECURE_MASK_CONN72_4          (0x45b0)
+#define AFE_SECURE_MASK_CONN73            (0x45b4)
+#define AFE_SECURE_MASK_CONN73_1          (0x45b8)
+#define AFE_SECURE_MASK_CONN73_2          (0x45bc)
+#define AFE_SECURE_MASK_CONN73_3          (0x45c0)
+#define AFE_SECURE_MASK_CONN73_4          (0x45c4)
+#define AFE_SECURE_MASK_CONN74            (0x45c8)
+#define AFE_SECURE_MASK_CONN74_1          (0x45cc)
+#define AFE_SECURE_MASK_CONN74_2          (0x45d0)
+#define AFE_SECURE_MASK_CONN74_3          (0x45d4)
+#define AFE_SECURE_MASK_CONN74_4          (0x45d8)
+#define AFE_SECURE_MASK_CONN75            (0x45dc)
+#define AFE_SECURE_MASK_CONN75_1          (0x45e0)
+#define AFE_SECURE_MASK_CONN75_2          (0x45e4)
+#define AFE_SECURE_MASK_CONN75_3          (0x45e8)
+#define AFE_SECURE_MASK_CONN75_4          (0x45ec)
+#define AFE_SECURE_MASK_CONN76            (0x45f0)
+#define AFE_SECURE_MASK_CONN76_1          (0x45f4)
+#define AFE_SECURE_MASK_CONN76_2          (0x45f8)
+#define AFE_SECURE_MASK_CONN76_3          (0x45fc)
+#define AFE_SECURE_MASK_CONN76_4          (0x4600)
+#define AFE_SECURE_MASK_CONN77            (0x4604)
+#define AFE_SECURE_MASK_CONN77_1          (0x4608)
+#define AFE_SECURE_MASK_CONN77_2          (0x460c)
+#define AFE_SECURE_MASK_CONN77_3          (0x4610)
+#define AFE_SECURE_MASK_CONN77_4          (0x4614)
+#define AFE_SECURE_MASK_CONN78            (0x4618)
+#define AFE_SECURE_MASK_CONN78_1          (0x461c)
+#define AFE_SECURE_MASK_CONN78_2          (0x4620)
+#define AFE_SECURE_MASK_CONN78_3          (0x4624)
+#define AFE_SECURE_MASK_CONN78_4          (0x4628)
+#define AFE_SECURE_MASK_CONN79            (0x462c)
+#define AFE_SECURE_MASK_CONN79_1          (0x4630)
+#define AFE_SECURE_MASK_CONN79_2          (0x4634)
+#define AFE_SECURE_MASK_CONN79_3          (0x4638)
+#define AFE_SECURE_MASK_CONN79_4          (0x463c)
+#define AFE_SECURE_MASK_CONN80            (0x4640)
+#define AFE_SECURE_MASK_CONN80_1          (0x4644)
+#define AFE_SECURE_MASK_CONN80_2          (0x4648)
+#define AFE_SECURE_MASK_CONN80_3          (0x464c)
+#define AFE_SECURE_MASK_CONN80_4          (0x4650)
+#define AFE_SECURE_MASK_CONN81            (0x4654)
+#define AFE_SECURE_MASK_CONN81_1          (0x4658)
+#define AFE_SECURE_MASK_CONN81_2          (0x465c)
+#define AFE_SECURE_MASK_CONN81_3          (0x4660)
+#define AFE_SECURE_MASK_CONN81_4          (0x4664)
+#define AFE_SECURE_MASK_CONN82            (0x4668)
+#define AFE_SECURE_MASK_CONN82_1          (0x466c)
+#define AFE_SECURE_MASK_CONN82_2          (0x4670)
+#define AFE_SECURE_MASK_CONN82_3          (0x4674)
+#define AFE_SECURE_MASK_CONN82_4          (0x4678)
+#define AFE_SECURE_MASK_CONN83            (0x467c)
+#define AFE_SECURE_MASK_CONN83_1          (0x4680)
+#define AFE_SECURE_MASK_CONN83_2          (0x4684)
+#define AFE_SECURE_MASK_CONN83_3          (0x4688)
+#define AFE_SECURE_MASK_CONN83_4          (0x468c)
+#define AFE_SECURE_MASK_CONN84            (0x4690)
+#define AFE_SECURE_MASK_CONN84_1          (0x4694)
+#define AFE_SECURE_MASK_CONN84_2          (0x4698)
+#define AFE_SECURE_MASK_CONN84_3          (0x469c)
+#define AFE_SECURE_MASK_CONN84_4          (0x46a0)
+#define AFE_SECURE_MASK_CONN85            (0x46a4)
+#define AFE_SECURE_MASK_CONN85_1          (0x46a8)
+#define AFE_SECURE_MASK_CONN85_2          (0x46ac)
+#define AFE_SECURE_MASK_CONN85_3          (0x46b0)
+#define AFE_SECURE_MASK_CONN85_4          (0x46b4)
+#define AFE_SECURE_MASK_CONN86            (0x46b8)
+#define AFE_SECURE_MASK_CONN86_1          (0x46bc)
+#define AFE_SECURE_MASK_CONN86_2          (0x46c0)
+#define AFE_SECURE_MASK_CONN86_3          (0x46c4)
+#define AFE_SECURE_MASK_CONN86_4          (0x46c8)
+#define AFE_SECURE_MASK_CONN87            (0x46cc)
+#define AFE_SECURE_MASK_CONN87_1          (0x46d0)
+#define AFE_SECURE_MASK_CONN87_2          (0x46d4)
+#define AFE_SECURE_MASK_CONN87_3          (0x46d8)
+#define AFE_SECURE_MASK_CONN87_4          (0x46dc)
+#define AFE_SECURE_MASK_CONN88            (0x46e0)
+#define AFE_SECURE_MASK_CONN88_1          (0x46e4)
+#define AFE_SECURE_MASK_CONN88_2          (0x46e8)
+#define AFE_SECURE_MASK_CONN88_3          (0x46ec)
+#define AFE_SECURE_MASK_CONN88_4          (0x46f0)
+#define AFE_SECURE_MASK_CONN89            (0x46f4)
+#define AFE_SECURE_MASK_CONN89_1          (0x46f8)
+#define AFE_SECURE_MASK_CONN89_2          (0x46fc)
+#define AFE_SECURE_MASK_CONN89_3          (0x4700)
+#define AFE_SECURE_MASK_CONN89_4          (0x4704)
+#define AFE_SECURE_MASK_CONN90            (0x4708)
+#define AFE_SECURE_MASK_CONN90_1          (0x470c)
+#define AFE_SECURE_MASK_CONN90_2          (0x4710)
+#define AFE_SECURE_MASK_CONN90_3          (0x4714)
+#define AFE_SECURE_MASK_CONN90_4          (0x4718)
+#define AFE_SECURE_MASK_CONN91            (0x471c)
+#define AFE_SECURE_MASK_CONN91_1          (0x4720)
+#define AFE_SECURE_MASK_CONN91_2          (0x4724)
+#define AFE_SECURE_MASK_CONN91_3          (0x4728)
+#define AFE_SECURE_MASK_CONN91_4          (0x472c)
+#define AFE_SECURE_MASK_CONN92            (0x4730)
+#define AFE_SECURE_MASK_CONN92_1          (0x4734)
+#define AFE_SECURE_MASK_CONN92_2          (0x4738)
+#define AFE_SECURE_MASK_CONN92_3          (0x473c)
+#define AFE_SECURE_MASK_CONN92_4          (0x4740)
+#define AFE_SECURE_MASK_CONN93            (0x4744)
+#define AFE_SECURE_MASK_CONN93_1          (0x4748)
+#define AFE_SECURE_MASK_CONN93_2          (0x474c)
+#define AFE_SECURE_MASK_CONN93_3          (0x4750)
+#define AFE_SECURE_MASK_CONN93_4          (0x4754)
+#define AFE_SECURE_MASK_CONN94            (0x4758)
+#define AFE_SECURE_MASK_CONN94_1          (0x475c)
+#define AFE_SECURE_MASK_CONN94_2          (0x4760)
+#define AFE_SECURE_MASK_CONN94_3          (0x4764)
+#define AFE_SECURE_MASK_CONN94_4          (0x4768)
+#define AFE_SECURE_MASK_CONN95            (0x476c)
+#define AFE_SECURE_MASK_CONN95_1          (0x4770)
+#define AFE_SECURE_MASK_CONN95_2          (0x4774)
+#define AFE_SECURE_MASK_CONN95_3          (0x4778)
+#define AFE_SECURE_MASK_CONN95_4          (0x477c)
+#define AFE_SECURE_MASK_CONN96            (0x4780)
+#define AFE_SECURE_MASK_CONN96_1          (0x4784)
+#define AFE_SECURE_MASK_CONN96_2          (0x4788)
+#define AFE_SECURE_MASK_CONN96_3          (0x478c)
+#define AFE_SECURE_MASK_CONN96_4          (0x4790)
+#define AFE_SECURE_MASK_CONN97            (0x4794)
+#define AFE_SECURE_MASK_CONN97_1          (0x4798)
+#define AFE_SECURE_MASK_CONN97_2          (0x479c)
+#define AFE_SECURE_MASK_CONN97_3          (0x47a0)
+#define AFE_SECURE_MASK_CONN97_4          (0x47a4)
+#define AFE_SECURE_MASK_CONN98            (0x47a8)
+#define AFE_SECURE_MASK_CONN98_1          (0x47ac)
+#define AFE_SECURE_MASK_CONN98_2          (0x47b0)
+#define AFE_SECURE_MASK_CONN98_3          (0x47b4)
+#define AFE_SECURE_MASK_CONN98_4          (0x47b8)
+#define AFE_SECURE_MASK_CONN99            (0x47bc)
+#define AFE_SECURE_MASK_CONN99_1          (0x47c0)
+#define AFE_SECURE_MASK_CONN99_2          (0x47c4)
+#define AFE_SECURE_MASK_CONN99_3          (0x47c8)
+#define AFE_SECURE_MASK_CONN99_4          (0x47cc)
+#define AFE_SECURE_MASK_CONN100           (0x47d0)
+#define AFE_SECURE_MASK_CONN100_1         (0x47d4)
+#define AFE_SECURE_MASK_CONN100_2         (0x47d8)
+#define AFE_SECURE_MASK_CONN100_3         (0x47dc)
+#define AFE_SECURE_MASK_CONN100_4         (0x47e0)
+#define AFE_SECURE_MASK_CONN101           (0x47e4)
+#define AFE_SECURE_MASK_CONN101_1         (0x47e8)
+#define AFE_SECURE_MASK_CONN101_2         (0x47ec)
+#define AFE_SECURE_MASK_CONN101_3         (0x47f0)
+#define AFE_SECURE_MASK_CONN101_4         (0x47f4)
+#define AFE_SECURE_MASK_CONN102           (0x47f8)
+#define AFE_SECURE_MASK_CONN102_1         (0x47fc)
+#define AFE_SECURE_MASK_CONN102_2         (0x4800)
+#define AFE_SECURE_MASK_CONN102_3         (0x4804)
+#define AFE_SECURE_MASK_CONN102_4         (0x4808)
+#define AFE_SECURE_MASK_CONN103           (0x480c)
+#define AFE_SECURE_MASK_CONN103_1         (0x4810)
+#define AFE_SECURE_MASK_CONN103_2         (0x4814)
+#define AFE_SECURE_MASK_CONN103_3         (0x4818)
+#define AFE_SECURE_MASK_CONN103_4         (0x481c)
+#define AFE_SECURE_MASK_CONN104           (0x4820)
+#define AFE_SECURE_MASK_CONN104_1         (0x4824)
+#define AFE_SECURE_MASK_CONN104_2         (0x4828)
+#define AFE_SECURE_MASK_CONN104_3         (0x482c)
+#define AFE_SECURE_MASK_CONN104_4         (0x4830)
+#define AFE_SECURE_MASK_CONN105           (0x4834)
+#define AFE_SECURE_MASK_CONN105_1         (0x4838)
+#define AFE_SECURE_MASK_CONN105_2         (0x483c)
+#define AFE_SECURE_MASK_CONN105_3         (0x4840)
+#define AFE_SECURE_MASK_CONN105_4         (0x4844)
+#define AFE_SECURE_MASK_CONN106           (0x4848)
+#define AFE_SECURE_MASK_CONN106_1         (0x484c)
+#define AFE_SECURE_MASK_CONN106_2         (0x4850)
+#define AFE_SECURE_MASK_CONN106_3         (0x4854)
+#define AFE_SECURE_MASK_CONN106_4         (0x4858)
+#define AFE_SECURE_MASK_CONN107           (0x485c)
+#define AFE_SECURE_MASK_CONN107_1         (0x4860)
+#define AFE_SECURE_MASK_CONN107_2         (0x4864)
+#define AFE_SECURE_MASK_CONN107_3         (0x4868)
+#define AFE_SECURE_MASK_CONN107_4         (0x486c)
+#define AFE_SECURE_MASK_CONN108           (0x4870)
+#define AFE_SECURE_MASK_CONN108_1         (0x4874)
+#define AFE_SECURE_MASK_CONN108_2         (0x4878)
+#define AFE_SECURE_MASK_CONN108_3         (0x487c)
+#define AFE_SECURE_MASK_CONN108_4         (0x4880)
+#define AFE_SECURE_MASK_CONN109           (0x4884)
+#define AFE_SECURE_MASK_CONN109_1         (0x4888)
+#define AFE_SECURE_MASK_CONN109_2         (0x488c)
+#define AFE_SECURE_MASK_CONN109_3         (0x4890)
+#define AFE_SECURE_MASK_CONN109_4         (0x4894)
+#define AFE_SECURE_MASK_CONN110           (0x4898)
+#define AFE_SECURE_MASK_CONN110_1         (0x489c)
+#define AFE_SECURE_MASK_CONN110_2         (0x48a0)
+#define AFE_SECURE_MASK_CONN110_3         (0x48a4)
+#define AFE_SECURE_MASK_CONN110_4         (0x48a8)
+#define AFE_SECURE_MASK_CONN111           (0x48ac)
+#define AFE_SECURE_MASK_CONN111_1         (0x48b0)
+#define AFE_SECURE_MASK_CONN111_2         (0x48b4)
+#define AFE_SECURE_MASK_CONN111_3         (0x48b8)
+#define AFE_SECURE_MASK_CONN111_4         (0x48bc)
+#define AFE_SECURE_MASK_CONN112           (0x48c0)
+#define AFE_SECURE_MASK_CONN112_1         (0x48c4)
+#define AFE_SECURE_MASK_CONN112_2         (0x48c8)
+#define AFE_SECURE_MASK_CONN112_3         (0x48cc)
+#define AFE_SECURE_MASK_CONN112_4         (0x48d0)
+#define AFE_SECURE_MASK_CONN113           (0x48d4)
+#define AFE_SECURE_MASK_CONN113_1         (0x48d8)
+#define AFE_SECURE_MASK_CONN113_2         (0x48dc)
+#define AFE_SECURE_MASK_CONN113_3         (0x48e0)
+#define AFE_SECURE_MASK_CONN113_4         (0x48e4)
+#define AFE_SECURE_MASK_CONN114           (0x48e8)
+#define AFE_SECURE_MASK_CONN114_1         (0x48ec)
+#define AFE_SECURE_MASK_CONN114_2         (0x48f0)
+#define AFE_SECURE_MASK_CONN114_3         (0x48f4)
+#define AFE_SECURE_MASK_CONN114_4         (0x48f8)
+#define AFE_SECURE_MASK_CONN115           (0x48fc)
+#define AFE_SECURE_MASK_CONN115_1         (0x4900)
+#define AFE_SECURE_MASK_CONN115_2         (0x4904)
+#define AFE_SECURE_MASK_CONN115_3         (0x4908)
+#define AFE_SECURE_MASK_CONN115_4         (0x490c)
+#define AFE_SECURE_MASK_CONN116           (0x4910)
+#define AFE_SECURE_MASK_CONN116_1         (0x4914)
+#define AFE_SECURE_MASK_CONN116_2         (0x4918)
+#define AFE_SECURE_MASK_CONN116_3         (0x491c)
+#define AFE_SECURE_MASK_CONN116_4         (0x4920)
+#define AFE_SECURE_MASK_CONN117           (0x4924)
+#define AFE_SECURE_MASK_CONN117_1         (0x4928)
+#define AFE_SECURE_MASK_CONN117_2         (0x492c)
+#define AFE_SECURE_MASK_CONN117_3         (0x4930)
+#define AFE_SECURE_MASK_CONN117_4         (0x4934)
+#define AFE_SECURE_MASK_CONN118           (0x4938)
+#define AFE_SECURE_MASK_CONN118_1         (0x493c)
+#define AFE_SECURE_MASK_CONN118_2         (0x4940)
+#define AFE_SECURE_MASK_CONN118_3         (0x4944)
+#define AFE_SECURE_MASK_CONN118_4         (0x4948)
+#define AFE_SECURE_MASK_CONN119           (0x494c)
+#define AFE_SECURE_MASK_CONN119_1         (0x4950)
+#define AFE_SECURE_MASK_CONN119_2         (0x4954)
+#define AFE_SECURE_MASK_CONN119_3         (0x4958)
+#define AFE_SECURE_MASK_CONN119_4         (0x495c)
+#define AFE_SECURE_MASK_CONN120           (0x4960)
+#define AFE_SECURE_MASK_CONN120_1         (0x4964)
+#define AFE_SECURE_MASK_CONN120_2         (0x4968)
+#define AFE_SECURE_MASK_CONN120_3         (0x496c)
+#define AFE_SECURE_MASK_CONN120_4         (0x4970)
+#define AFE_SECURE_MASK_CONN121           (0x4974)
+#define AFE_SECURE_MASK_CONN121_1         (0x4978)
+#define AFE_SECURE_MASK_CONN121_2         (0x497c)
+#define AFE_SECURE_MASK_CONN121_3         (0x4980)
+#define AFE_SECURE_MASK_CONN121_4         (0x4984)
+#define AFE_SECURE_MASK_CONN122           (0x4988)
+#define AFE_SECURE_MASK_CONN122_1         (0x498c)
+#define AFE_SECURE_MASK_CONN122_2         (0x4990)
+#define AFE_SECURE_MASK_CONN122_3         (0x4994)
+#define AFE_SECURE_MASK_CONN122_4         (0x4998)
+#define AFE_SECURE_MASK_CONN123           (0x499c)
+#define AFE_SECURE_MASK_CONN123_1         (0x49a0)
+#define AFE_SECURE_MASK_CONN123_2         (0x49a4)
+#define AFE_SECURE_MASK_CONN123_3         (0x49a8)
+#define AFE_SECURE_MASK_CONN123_4         (0x49ac)
+#define AFE_SECURE_MASK_CONN124           (0x49b0)
+#define AFE_SECURE_MASK_CONN124_1         (0x49b4)
+#define AFE_SECURE_MASK_CONN124_2         (0x49b8)
+#define AFE_SECURE_MASK_CONN124_3         (0x49bc)
+#define AFE_SECURE_MASK_CONN124_4         (0x49c0)
+#define AFE_SECURE_MASK_CONN125           (0x49c4)
+#define AFE_SECURE_MASK_CONN125_1         (0x49c8)
+#define AFE_SECURE_MASK_CONN125_2         (0x49cc)
+#define AFE_SECURE_MASK_CONN125_3         (0x49d0)
+#define AFE_SECURE_MASK_CONN125_4         (0x49d4)
+#define AFE_SECURE_MASK_CONN126           (0x49d8)
+#define AFE_SECURE_MASK_CONN126_1         (0x49dc)
+#define AFE_SECURE_MASK_CONN126_2         (0x49e0)
+#define AFE_SECURE_MASK_CONN126_3         (0x49e4)
+#define AFE_SECURE_MASK_CONN126_4         (0x49e8)
+#define AFE_SECURE_MASK_CONN127           (0x49ec)
+#define AFE_SECURE_MASK_CONN127_1         (0x49f0)
+#define AFE_SECURE_MASK_CONN127_2         (0x49f4)
+#define AFE_SECURE_MASK_CONN127_3         (0x49f8)
+#define AFE_SECURE_MASK_CONN127_4         (0x49fc)
+#define AFE_SECURE_MASK_CONN128           (0x4a00)
+#define AFE_SECURE_MASK_CONN128_1         (0x4a04)
+#define AFE_SECURE_MASK_CONN128_2         (0x4a08)
+#define AFE_SECURE_MASK_CONN128_3         (0x4a0c)
+#define AFE_SECURE_MASK_CONN128_4         (0x4a10)
+#define AFE_SECURE_MASK_CONN129           (0x4a14)
+#define AFE_SECURE_MASK_CONN129_1         (0x4a18)
+#define AFE_SECURE_MASK_CONN129_2         (0x4a1c)
+#define AFE_SECURE_MASK_CONN129_3         (0x4a20)
+#define AFE_SECURE_MASK_CONN129_4         (0x4a24)
+#define AFE_SECURE_MASK_CONN130           (0x4a28)
+#define AFE_SECURE_MASK_CONN130_1         (0x4a2c)
+#define AFE_SECURE_MASK_CONN130_2         (0x4a30)
+#define AFE_SECURE_MASK_CONN130_3         (0x4a34)
+#define AFE_SECURE_MASK_CONN130_4         (0x4a38)
+#define AFE_SECURE_MASK_CONN131           (0x4a3c)
+#define AFE_SECURE_MASK_CONN131_1         (0x4a40)
+#define AFE_SECURE_MASK_CONN131_2         (0x4a44)
+#define AFE_SECURE_MASK_CONN131_3         (0x4a48)
+#define AFE_SECURE_MASK_CONN131_4         (0x4a4c)
+#define AFE_SECURE_MASK_CONN132           (0x4a50)
+#define AFE_SECURE_MASK_CONN132_1         (0x4a54)
+#define AFE_SECURE_MASK_CONN132_2         (0x4a58)
+#define AFE_SECURE_MASK_CONN132_3         (0x4a5c)
+#define AFE_SECURE_MASK_CONN132_4         (0x4a60)
+#define AFE_SECURE_MASK_CONN133           (0x4a64)
+#define AFE_SECURE_MASK_CONN133_1         (0x4a68)
+#define AFE_SECURE_MASK_CONN133_2         (0x4a6c)
+#define AFE_SECURE_MASK_CONN133_3         (0x4a70)
+#define AFE_SECURE_MASK_CONN133_4         (0x4a74)
+#define AFE_SECURE_MASK_CONN134           (0x4a78)
+#define AFE_SECURE_MASK_CONN134_1         (0x4a7c)
+#define AFE_SECURE_MASK_CONN134_2         (0x4a80)
+#define AFE_SECURE_MASK_CONN134_3         (0x4a84)
+#define AFE_SECURE_MASK_CONN134_4         (0x4a88)
+#define AFE_SECURE_MASK_CONN135           (0x4a8c)
+#define AFE_SECURE_MASK_CONN135_1         (0x4a90)
+#define AFE_SECURE_MASK_CONN135_2         (0x4a94)
+#define AFE_SECURE_MASK_CONN135_3         (0x4a98)
+#define AFE_SECURE_MASK_CONN135_4         (0x4a9c)
+#define AFE_SECURE_MASK_CONN136           (0x4aa0)
+#define AFE_SECURE_MASK_CONN136_1         (0x4aa4)
+#define AFE_SECURE_MASK_CONN136_2         (0x4aa8)
+#define AFE_SECURE_MASK_CONN136_3         (0x4aac)
+#define AFE_SECURE_MASK_CONN136_4         (0x4ab0)
+#define AFE_SECURE_MASK_CONN137           (0x4ab4)
+#define AFE_SECURE_MASK_CONN137_1         (0x4ab8)
+#define AFE_SECURE_MASK_CONN137_2         (0x4abc)
+#define AFE_SECURE_MASK_CONN137_3         (0x4ac0)
+#define AFE_SECURE_MASK_CONN137_4         (0x4ac4)
+#define AFE_SECURE_MASK_CONN138           (0x4ac8)
+#define AFE_SECURE_MASK_CONN138_1         (0x4acc)
+#define AFE_SECURE_MASK_CONN138_2         (0x4ad0)
+#define AFE_SECURE_MASK_CONN138_3         (0x4ad4)
+#define AFE_SECURE_MASK_CONN138_4         (0x4ad8)
+#define AFE_SECURE_MASK_CONN139           (0x4adc)
+#define AFE_SECURE_MASK_CONN139_1         (0x4ae0)
+#define AFE_SECURE_MASK_CONN139_2         (0x4ae4)
+#define AFE_SECURE_MASK_CONN139_3         (0x4ae8)
+#define AFE_SECURE_MASK_CONN139_4         (0x4aec)
+#define AFE_SECURE_MASK_CONN_RS           (0x4af0)
+#define AFE_SECURE_MASK_CONN_RS_1         (0x4af4)
+#define AFE_SECURE_MASK_CONN_RS_2         (0x4af8)
+#define AFE_SECURE_MASK_CONN_RS_3         (0x4afc)
+#define AFE_SECURE_MASK_CONN_RS_4         (0x4b00)
+#define AFE_SECURE_MASK_CONN_16BIT        (0x4b04)
+#define AFE_SECURE_MASK_CONN_16BIT_1      (0x4b08)
+#define AFE_SECURE_MASK_CONN_16BIT_2      (0x4b0c)
+#define AFE_SECURE_MASK_CONN_16BIT_3      (0x4b10)
+#define AFE_SECURE_MASK_CONN_16BIT_4      (0x4b14)
+#define AFE_SECURE_MASK_CONN_24BIT        (0x4b18)
+#define AFE_SECURE_MASK_CONN_24BIT_1      (0x4b1c)
+#define AFE_SECURE_MASK_CONN_24BIT_2      (0x4b20)
+#define AFE_SECURE_MASK_CONN_24BIT_3      (0x4b24)
+#define AFE_SECURE_MASK_CONN_24BIT_4      (0x4b28)
+#define AFE_SECURE_MASK_CONN0_5           (0x4b2c)
+#define AFE_SECURE_MASK_CONN1_5           (0x4b30)
+#define AFE_SECURE_MASK_CONN2_5           (0x4b34)
+#define AFE_SECURE_MASK_CONN3_5           (0x4b38)
+#define AFE_SECURE_MASK_CONN4_5           (0x4b3c)
+#define AFE_SECURE_MASK_CONN5_5           (0x4b40)
+#define AFE_SECURE_MASK_CONN6_5           (0x4b44)
+#define AFE_SECURE_MASK_CONN7_5           (0x4b48)
+#define AFE_SECURE_MASK_CONN8_5           (0x4b4c)
+#define AFE_SECURE_MASK_CONN9_5           (0x4b50)
+#define AFE_SECURE_MASK_CONN10_5          (0x4b54)
+#define AFE_SECURE_MASK_CONN11_5          (0x4b58)
+#define AFE_SECURE_MASK_CONN12_5          (0x4b5c)
+#define AFE_SECURE_MASK_CONN13_5          (0x4b60)
+#define AFE_SECURE_MASK_CONN14_5          (0x4b64)
+#define AFE_SECURE_MASK_CONN15_5          (0x4b68)
+#define AFE_SECURE_MASK_CONN16_5          (0x4b6c)
+#define AFE_SECURE_MASK_CONN17_5          (0x4b70)
+#define AFE_SECURE_MASK_CONN18_5          (0x4b74)
+#define AFE_SECURE_MASK_CONN19_5          (0x4b78)
+#define AFE_SECURE_MASK_CONN20_5          (0x4b7c)
+#define AFE_SECURE_MASK_CONN21_5          (0x4b80)
+#define AFE_SECURE_MASK_CONN22_5          (0x4b84)
+#define AFE_SECURE_MASK_CONN23_5          (0x4b88)
+#define AFE_SECURE_MASK_CONN24_5          (0x4b8c)
+#define AFE_SECURE_MASK_CONN25_5          (0x4b90)
+#define AFE_SECURE_MASK_CONN26_5          (0x4b94)
+#define AFE_SECURE_MASK_CONN27_5          (0x4b98)
+#define AFE_SECURE_MASK_CONN28_5          (0x4b9c)
+#define AFE_SECURE_MASK_CONN29_5          (0x4ba0)
+#define AFE_SECURE_MASK_CONN30_5          (0x4ba4)
+#define AFE_SECURE_MASK_CONN31_5          (0x4ba8)
+#define AFE_SECURE_MASK_CONN32_5          (0x4bac)
+#define AFE_SECURE_MASK_CONN33_5          (0x4bb0)
+#define AFE_SECURE_MASK_CONN34_5          (0x4bb4)
+#define AFE_SECURE_MASK_CONN35_5          (0x4bb8)
+#define AFE_SECURE_MASK_CONN36_5          (0x4bbc)
+#define AFE_SECURE_MASK_CONN37_5          (0x4bc0)
+#define AFE_SECURE_MASK_CONN38_5          (0x4bc4)
+#define AFE_SECURE_MASK_CONN39_5          (0x4bc8)
+#define AFE_SECURE_MASK_CONN40_5          (0x4bcc)
+#define AFE_SECURE_MASK_CONN41_5          (0x4bd0)
+#define AFE_SECURE_MASK_CONN42_5          (0x4bd4)
+#define AFE_SECURE_MASK_CONN43_5          (0x4bd8)
+#define AFE_SECURE_MASK_CONN44_5          (0x4bdc)
+#define AFE_SECURE_MASK_CONN45_5          (0x4be0)
+#define AFE_SECURE_MASK_CONN46_5          (0x4be4)
+#define AFE_SECURE_MASK_CONN47_5          (0x4be8)
+#define AFE_SECURE_MASK_CONN48_5          (0x4bec)
+#define AFE_SECURE_MASK_CONN49_5          (0x4bf0)
+#define AFE_SECURE_MASK_CONN50_5          (0x4bf4)
+#define AFE_SECURE_MASK_CONN51_5          (0x4bf8)
+#define AFE_SECURE_MASK_CONN52_5          (0x4bfc)
+#define AFE_GASRC0_NEW_CON0               (0x4c40)
+#define AFE_GASRC0_NEW_CON1               (0x4c44)
+#define AFE_GASRC0_NEW_CON2               (0x4c48)
+#define AFE_GASRC0_NEW_CON3               (0x4c4c)
+#define AFE_GASRC0_NEW_CON4               (0x4c50)
+#define AFE_GASRC0_NEW_CON5               (0x4c54)
+#define AFE_GASRC0_NEW_CON6               (0x4c58)
+#define AFE_GASRC0_NEW_CON7               (0x4c5c)
+#define AFE_GASRC0_NEW_CON8               (0x4c60)
+#define AFE_GASRC0_NEW_CON9               (0x4c64)
+#define AFE_GASRC0_NEW_CON10              (0x4c68)
+#define AFE_GASRC0_NEW_CON11              (0x4c6c)
+#define AFE_GASRC0_NEW_CON12              (0x4c70)
+#define AFE_GASRC0_NEW_CON13              (0x4c74)
+#define AFE_GASRC0_NEW_CON14              (0x4c78)
+#define AFE_GASRC1_NEW_CON0               (0x4c80)
+#define AFE_GASRC1_NEW_CON1               (0x4c84)
+#define AFE_GASRC1_NEW_CON2               (0x4c88)
+#define AFE_GASRC1_NEW_CON3               (0x4c8c)
+#define AFE_GASRC1_NEW_CON4               (0x4c90)
+#define AFE_GASRC1_NEW_CON5               (0x4c94)
+#define AFE_GASRC1_NEW_CON6               (0x4c98)
+#define AFE_GASRC1_NEW_CON7               (0x4c9c)
+#define AFE_GASRC1_NEW_CON8               (0x4ca0)
+#define AFE_GASRC1_NEW_CON9               (0x4ca4)
+#define AFE_GASRC1_NEW_CON10              (0x4ca8)
+#define AFE_GASRC1_NEW_CON11              (0x4cac)
+#define AFE_GASRC1_NEW_CON12              (0x4cb0)
+#define AFE_GASRC1_NEW_CON13              (0x4cb4)
+#define AFE_GASRC1_NEW_CON14              (0x4cb8)
+#define AFE_GASRC2_NEW_CON0               (0x4cc0)
+#define AFE_GASRC2_NEW_CON1               (0x4cc4)
+#define AFE_GASRC2_NEW_CON2               (0x4cc8)
+#define AFE_GASRC2_NEW_CON3               (0x4ccc)
+#define AFE_GASRC2_NEW_CON4               (0x4cd0)
+#define AFE_GASRC2_NEW_CON5               (0x4cd4)
+#define AFE_GASRC2_NEW_CON6               (0x4cd8)
+#define AFE_GASRC2_NEW_CON7               (0x4cdc)
+#define AFE_GASRC2_NEW_CON8               (0x4ce0)
+#define AFE_GASRC2_NEW_CON9               (0x4ce4)
+#define AFE_GASRC2_NEW_CON10              (0x4ce8)
+#define AFE_GASRC2_NEW_CON11              (0x4cec)
+#define AFE_GASRC2_NEW_CON12              (0x4cf0)
+#define AFE_GASRC2_NEW_CON13              (0x4cf4)
+#define AFE_GASRC2_NEW_CON14              (0x4cf8)
+#define AFE_GASRC3_NEW_CON0               (0x4d00)
+#define AFE_GASRC3_NEW_CON1               (0x4d04)
+#define AFE_GASRC3_NEW_CON2               (0x4d08)
+#define AFE_GASRC3_NEW_CON3               (0x4d0c)
+#define AFE_GASRC3_NEW_CON4               (0x4d10)
+#define AFE_GASRC3_NEW_CON5               (0x4d14)
+#define AFE_GASRC3_NEW_CON6               (0x4d18)
+#define AFE_GASRC3_NEW_CON7               (0x4d1c)
+#define AFE_GASRC3_NEW_CON8               (0x4d20)
+#define AFE_GASRC3_NEW_CON9               (0x4d24)
+#define AFE_GASRC3_NEW_CON10              (0x4d28)
+#define AFE_GASRC3_NEW_CON11              (0x4d2c)
+#define AFE_GASRC3_NEW_CON12              (0x4d30)
+#define AFE_GASRC3_NEW_CON13              (0x4d34)
+#define AFE_GASRC3_NEW_CON14              (0x4d38)
+#define AFE_GASRC4_NEW_CON0               (0x4d40)
+#define AFE_GASRC4_NEW_CON1               (0x4d44)
+#define AFE_GASRC4_NEW_CON2               (0x4d48)
+#define AFE_GASRC4_NEW_CON3               (0x4d4c)
+#define AFE_GASRC4_NEW_CON4               (0x4d50)
+#define AFE_GASRC4_NEW_CON5               (0x4d54)
+#define AFE_GASRC4_NEW_CON6               (0x4d58)
+#define AFE_GASRC4_NEW_CON7               (0x4d5c)
+#define AFE_GASRC4_NEW_CON8               (0x4d60)
+#define AFE_GASRC4_NEW_CON9               (0x4d64)
+#define AFE_GASRC4_NEW_CON10              (0x4d68)
+#define AFE_GASRC4_NEW_CON11              (0x4d6c)
+#define AFE_GASRC4_NEW_CON12              (0x4d70)
+#define AFE_GASRC4_NEW_CON13              (0x4d74)
+#define AFE_GASRC4_NEW_CON14              (0x4d78)
+#define AFE_GASRC5_NEW_CON0               (0x4d80)
+#define AFE_GASRC5_NEW_CON1               (0x4d84)
+#define AFE_GASRC5_NEW_CON2               (0x4d88)
+#define AFE_GASRC5_NEW_CON3               (0x4d8c)
+#define AFE_GASRC5_NEW_CON4               (0x4d90)
+#define AFE_GASRC5_NEW_CON5               (0x4d94)
+#define AFE_GASRC5_NEW_CON6               (0x4d98)
+#define AFE_GASRC5_NEW_CON7               (0x4d9c)
+#define AFE_GASRC5_NEW_CON8               (0x4da0)
+#define AFE_GASRC5_NEW_CON9               (0x4da4)
+#define AFE_GASRC5_NEW_CON10              (0x4da8)
+#define AFE_GASRC5_NEW_CON11              (0x4dac)
+#define AFE_GASRC5_NEW_CON12              (0x4db0)
+#define AFE_GASRC5_NEW_CON13              (0x4db4)
+#define AFE_GASRC5_NEW_CON14              (0x4db8)
+#define AFE_GASRC6_NEW_CON0               (0x4dc0)
+#define AFE_GASRC6_NEW_CON1               (0x4dc4)
+#define AFE_GASRC6_NEW_CON2               (0x4dc8)
+#define AFE_GASRC6_NEW_CON3               (0x4dcc)
+#define AFE_GASRC6_NEW_CON4               (0x4dd0)
+#define AFE_GASRC6_NEW_CON5               (0x4dd4)
+#define AFE_GASRC6_NEW_CON6               (0x4dd8)
+#define AFE_GASRC6_NEW_CON7               (0x4ddc)
+#define AFE_GASRC6_NEW_CON8               (0x4de0)
+#define AFE_GASRC6_NEW_CON9               (0x4de4)
+#define AFE_GASRC6_NEW_CON10              (0x4de8)
+#define AFE_GASRC6_NEW_CON11              (0x4dec)
+#define AFE_GASRC6_NEW_CON12              (0x4df0)
+#define AFE_GASRC6_NEW_CON13              (0x4df4)
+#define AFE_GASRC6_NEW_CON14              (0x4df8)
+#define AFE_GASRC7_NEW_CON0               (0x4e00)
+#define AFE_GASRC7_NEW_CON1               (0x4e04)
+#define AFE_GASRC7_NEW_CON2               (0x4e08)
+#define AFE_GASRC7_NEW_CON3               (0x4e0c)
+#define AFE_GASRC7_NEW_CON4               (0x4e10)
+#define AFE_GASRC7_NEW_CON5               (0x4e14)
+#define AFE_GASRC7_NEW_CON6               (0x4e18)
+#define AFE_GASRC7_NEW_CON7               (0x4e1c)
+#define AFE_GASRC7_NEW_CON8               (0x4e20)
+#define AFE_GASRC7_NEW_CON9               (0x4e24)
+#define AFE_GASRC7_NEW_CON10              (0x4e28)
+#define AFE_GASRC7_NEW_CON11              (0x4e2c)
+#define AFE_GASRC7_NEW_CON12              (0x4e30)
+#define AFE_GASRC7_NEW_CON13              (0x4e34)
+#define AFE_GASRC7_NEW_CON14              (0x4e38)
+#define AFE_GASRC8_NEW_CON0               (0x4e40)
+#define AFE_GASRC8_NEW_CON1               (0x4e44)
+#define AFE_GASRC8_NEW_CON2               (0x4e48)
+#define AFE_GASRC8_NEW_CON3               (0x4e4c)
+#define AFE_GASRC8_NEW_CON4               (0x4e50)
+#define AFE_GASRC8_NEW_CON5               (0x4e54)
+#define AFE_GASRC8_NEW_CON6               (0x4e58)
+#define AFE_GASRC8_NEW_CON7               (0x4e5c)
+#define AFE_GASRC8_NEW_CON8               (0x4e60)
+#define AFE_GASRC8_NEW_CON9               (0x4e64)
+#define AFE_GASRC8_NEW_CON10              (0x4e68)
+#define AFE_GASRC8_NEW_CON11              (0x4e6c)
+#define AFE_GASRC8_NEW_CON12              (0x4e70)
+#define AFE_GASRC8_NEW_CON13              (0x4e74)
+#define AFE_GASRC8_NEW_CON14              (0x4e78)
+#define AFE_GASRC9_NEW_CON0               (0x4e80)
+#define AFE_GASRC9_NEW_CON1               (0x4e84)
+#define AFE_GASRC9_NEW_CON2               (0x4e88)
+#define AFE_GASRC9_NEW_CON3               (0x4e8c)
+#define AFE_GASRC9_NEW_CON4               (0x4e90)
+#define AFE_GASRC9_NEW_CON5               (0x4e94)
+#define AFE_GASRC9_NEW_CON6               (0x4e98)
+#define AFE_GASRC9_NEW_CON7               (0x4e9c)
+#define AFE_GASRC9_NEW_CON8               (0x4ea0)
+#define AFE_GASRC9_NEW_CON9               (0x4ea4)
+#define AFE_GASRC9_NEW_CON10              (0x4ea8)
+#define AFE_GASRC9_NEW_CON11              (0x4eac)
+#define AFE_GASRC9_NEW_CON12              (0x4eb0)
+#define AFE_GASRC9_NEW_CON13              (0x4eb4)
+#define AFE_GASRC9_NEW_CON14              (0x4eb8)
+#define AFE_GASRC10_NEW_CON0              (0x4ec0)
+#define AFE_GASRC10_NEW_CON1              (0x4ec4)
+#define AFE_GASRC10_NEW_CON2              (0x4ec8)
+#define AFE_GASRC10_NEW_CON3              (0x4ecc)
+#define AFE_GASRC10_NEW_CON4              (0x4ed0)
+#define AFE_GASRC10_NEW_CON5              (0x4ed4)
+#define AFE_GASRC10_NEW_CON6              (0x4ed8)
+#define AFE_GASRC10_NEW_CON7              (0x4edc)
+#define AFE_GASRC10_NEW_CON8              (0x4ee0)
+#define AFE_GASRC10_NEW_CON9              (0x4ee4)
+#define AFE_GASRC10_NEW_CON10             (0x4ee8)
+#define AFE_GASRC10_NEW_CON11             (0x4eec)
+#define AFE_GASRC10_NEW_CON12             (0x4ef0)
+#define AFE_GASRC10_NEW_CON13             (0x4ef4)
+#define AFE_GASRC10_NEW_CON14             (0x4ef8)
+#define AFE_GASRC11_NEW_CON0              (0x4f00)
+#define AFE_GASRC11_NEW_CON1              (0x4f04)
+#define AFE_GASRC11_NEW_CON2              (0x4f08)
+#define AFE_GASRC11_NEW_CON3              (0x4f0c)
+#define AFE_GASRC11_NEW_CON4              (0x4f10)
+#define AFE_GASRC11_NEW_CON5              (0x4f14)
+#define AFE_GASRC11_NEW_CON6              (0x4f18)
+#define AFE_GASRC11_NEW_CON7              (0x4f1c)
+#define AFE_GASRC11_NEW_CON8              (0x4f20)
+#define AFE_GASRC11_NEW_CON9              (0x4f24)
+#define AFE_GASRC11_NEW_CON10             (0x4f28)
+#define AFE_GASRC11_NEW_CON11             (0x4f2c)
+#define AFE_GASRC11_NEW_CON12             (0x4f30)
+#define AFE_GASRC11_NEW_CON13             (0x4f34)
+#define AFE_GASRC11_NEW_CON14             (0x4f38)
+
+#define AFE_IEC_BURST_INFO_MON            (0x64b0)
+#define AFE_SPDIFOUT_IP_VERSION           (0x64b4)
+#define AFE_SPDIF_OUT_CFG0                (0x64b8)
+#define AFE_SPDIF_OUT_CFG1                (0x64bc)
+#define AFE_SPDIF_OUT_CHSTS1              (0x64c0)
+#define AFE_SPDIF_OUT_CHSTS2              (0x64c4)
+#define AFE_SPDIF_OUT_CHSTS3              (0x64c8)
+#define AFE_SPDIF_OUT_CHSTS4              (0x64cc)
+#define AFE_SPDIF_OUT_CHSTS5              (0x64d0)
+#define AFE_SPDIF_OUT_CHSTS6              (0x64d4)
+#define AFE_SPDIF_OUT_USERCODE1           (0x64d8)
+#define AFE_SPDIF_OUT_USERCODE2           (0x64dc)
+#define AFE_SPDIF_OUT_USERCODE3           (0x64e0)
+#define AFE_SPDIF_OUT_USERCODE4           (0x64e4)
+#define AFE_SPDIF_OUT_USERCODE5           (0x64e8)
+#define AFE_SPDIF_OUT_USERCODE6           (0x64ec)
+#define AFE_SPDIF_OUT_BURST_PRE0          (0x64f0)
+#define AFE_SPDIF_OUT_BURST_PRE1          (0x64f4)
+#define AFE_SPDIF_OUT_MON0                (0x64f8)
+#define AFE_SPDIF_OUT_MON1                (0x64fc)
+#define AFE_SPDIF_OUT_MON2                (0x6500)
+#define AFE_SPDIF_OUT_MON3                (0x6504)
+#define AFE_SPDIF_OUT_MON4                (0x6508)
+#define AFE_SPDIF_OUT_MON5                (0x650c)
+#define AFE_CONN0_6                       (0x7000)
+#define AFE_CONN1_6                       (0x7004)
+#define AFE_CONN2_6                       (0x7008)
+#define AFE_CONN3_6                       (0x700c)
+#define AFE_CONN4_6                       (0x7010)
+#define AFE_CONN5_6                       (0x7014)
+#define AFE_CONN6_6                       (0x7018)
+#define AFE_CONN7_6                       (0x701c)
+#define AFE_CONN8_6                       (0x7020)
+#define AFE_CONN9_6                       (0x7024)
+#define AFE_CONN10_6                      (0x7028)
+#define AFE_CONN11_6                      (0x702c)
+#define AFE_CONN12_6                      (0x7030)
+#define AFE_CONN13_6                      (0x7034)
+#define AFE_CONN14_6                      (0x7038)
+#define AFE_CONN15_6                      (0x703c)
+#define AFE_CONN16_6                      (0x7040)
+#define AFE_CONN17_6                      (0x7044)
+#define AFE_CONN18_6                      (0x7048)
+#define AFE_CONN19_6                      (0x704c)
+#define AFE_CONN20_6                      (0x7050)
+#define AFE_CONN21_6                      (0x7054)
+#define AFE_CONN22_6                      (0x7058)
+#define AFE_CONN23_6                      (0x705c)
+#define AFE_CONN24_6                      (0x7060)
+#define AFE_CONN25_6                      (0x7064)
+#define AFE_CONN26_6                      (0x7068)
+#define AFE_CONN27_6                      (0x706c)
+#define AFE_CONN28_6                      (0x7070)
+#define AFE_CONN29_6                      (0x7074)
+#define AFE_CONN30_6                      (0x7078)
+#define AFE_CONN31_6                      (0x707c)
+#define AFE_CONN32_6                      (0x7080)
+#define AFE_CONN33_6                      (0x7084)
+#define AFE_CONN34_6                      (0x7088)
+#define AFE_CONN35_6                      (0x708c)
+#define AFE_CONN36_6                      (0x7090)
+#define AFE_CONN37_6                      (0x7094)
+#define AFE_CONN38_6                      (0x7098)
+#define AFE_CONN39_6                      (0x709c)
+#define AFE_CONN40_6                      (0x70a0)
+#define AFE_CONN41_6                      (0x70a4)
+#define AFE_CONN42_6                      (0x70a8)
+#define AFE_CONN43_6                      (0x70ac)
+#define AFE_CONN44_6                      (0x70b0)
+#define AFE_CONN45_6                      (0x70b4)
+#define AFE_CONN46_6                      (0x70b8)
+#define AFE_CONN47_6                      (0x70bc)
+#define AFE_CONN48_6                      (0x70c0)
+#define AFE_CONN49_6                      (0x70c4)
+#define AFE_CONN50_6                      (0x70c8)
+#define AFE_CONN51_6                      (0x70cc)
+#define AFE_CONN52_6                      (0x70d0)
+#define AFE_CONN53_6                      (0x70d4)
+#define AFE_CONN54_6                      (0x70d8)
+#define AFE_CONN55_6                      (0x70dc)
+#define AFE_CONN56_6                      (0x70e0)
+#define AFE_CONN57_6                      (0x70e4)
+#define AFE_CONN58_6                      (0x70e8)
+#define AFE_CONN59_6                      (0x70ec)
+#define AFE_CONN60_6                      (0x70f0)
+#define AFE_CONN61_6                      (0x70f4)
+#define AFE_CONN62_6                      (0x70f8)
+#define AFE_CONN63_6                      (0x70fc)
+#define AFE_CONN64_6                      (0x7100)
+#define AFE_CONN65_6                      (0x7104)
+#define AFE_CONN66_6                      (0x7108)
+#define AFE_CONN67_6                      (0x710c)
+#define AFE_CONN68_6                      (0x7110)
+#define AFE_CONN69_6                      (0x7114)
+#define AFE_CONN70_6                      (0x7118)
+#define AFE_CONN71_6                      (0x711c)
+#define AFE_CONN72_6                      (0x7120)
+#define AFE_CONN73_6                      (0x7124)
+#define AFE_CONN74_6                      (0x7128)
+#define AFE_CONN75_6                      (0x712c)
+#define AFE_CONN76_6                      (0x7130)
+#define AFE_CONN77_6                      (0x7134)
+#define AFE_CONN78_6                      (0x7138)
+#define AFE_CONN79_6                      (0x713c)
+#define AFE_CONN80_6                      (0x7140)
+#define AFE_CONN81_6                      (0x7144)
+#define AFE_CONN82_6                      (0x7148)
+#define AFE_CONN83_6                      (0x714c)
+#define AFE_CONN84_6                      (0x7150)
+#define AFE_CONN85_6                      (0x7154)
+#define AFE_CONN86_6                      (0x7158)
+#define AFE_CONN87_6                      (0x715c)
+#define AFE_CONN88_6                      (0x7160)
+#define AFE_CONN89_6                      (0x7164)
+#define AFE_CONN90_6                      (0x7168)
+#define AFE_CONN91_6                      (0x716c)
+#define AFE_CONN92_6                      (0x7170)
+#define AFE_CONN93_6                      (0x7174)
+#define AFE_CONN94_6                      (0x7178)
+#define AFE_CONN95_6                      (0x717c)
+#define AFE_CONN96_6                      (0x7180)
+#define AFE_CONN97_6                      (0x7184)
+#define AFE_CONN98_6                      (0x7188)
+#define AFE_CONN99_6                      (0x718c)
+#define AFE_CONN100_6                     (0x7190)
+#define AFE_CONN101_6                     (0x7194)
+#define AFE_CONN102_6                     (0x7198)
+#define AFE_CONN103_6                     (0x719c)
+#define AFE_CONN104_6                     (0x71a0)
+#define AFE_CONN105_6                     (0x71a4)
+#define AFE_CONN106_6                     (0x71a8)
+#define AFE_CONN107_6                     (0x71ac)
+#define AFE_CONN108_6                     (0x71b0)
+#define AFE_CONN109_6                     (0x71b4)
+#define AFE_CONN110_6                     (0x71b8)
+#define AFE_CONN111_6                     (0x71bc)
+#define AFE_CONN112_6                     (0x71c0)
+#define AFE_CONN113_6                     (0x71c4)
+#define AFE_CONN114_6                     (0x71c8)
+#define AFE_CONN115_6                     (0x71cc)
+#define AFE_CONN116_6                     (0x71d0)
+#define AFE_CONN117_6                     (0x71d4)
+#define AFE_CONN118_6                     (0x71d8)
+#define AFE_CONN119_6                     (0x71dc)
+#define AFE_CONN120_6                     (0x71e0)
+#define AFE_CONN121_6                     (0x71e4)
+#define AFE_CONN122_6                     (0x71e8)
+#define AFE_CONN123_6                     (0x71ec)
+#define AFE_CONN124_6                     (0x71f0)
+#define AFE_CONN125_6                     (0x71f4)
+#define AFE_CONN126_6                     (0x71f8)
+#define AFE_CONN127_6                     (0x71fc)
+#define AFE_CONN128_6                     (0x7200)
+#define AFE_CONN129_6                     (0x7204)
+#define AFE_CONN130_6                     (0x7208)
+#define AFE_CONN131_6                     (0x720c)
+#define AFE_CONN132_6                     (0x7210)
+#define AFE_CONN133_6                     (0x7214)
+#define AFE_CONN134_6                     (0x7218)
+#define AFE_CONN135_6                     (0x721c)
+#define AFE_CONN136_6                     (0x7220)
+#define AFE_CONN137_6                     (0x7224)
+#define AFE_CONN138_6                     (0x7228)
+#define AFE_CONN139_6                     (0x722c)
+#define AFE_CONN176_6                     (0x72c0)
+#define AFE_CONN177_6                     (0x72c4)
+#define AFE_CONN182_6                     (0x72d8)
+#define AFE_CONN183_6                     (0x72dc)
+
+#define AFE_MAX_REGISTER                  (AFE_CONN183_6)
+
+/* PWR1_ASM_CON1 */
+#define PWR1_ASM_CON1_GASRC0_CALI_CK_SEL_MASK   BIT(2)
+#define PWR1_ASM_CON1_GASRC1_CALI_CK_SEL_MASK   BIT(5)
+#define PWR1_ASM_CON1_GASRC2_CALI_CK_SEL_MASK   BIT(20)
+#define PWR1_ASM_CON1_GASRC3_CALI_CK_SEL_MASK   BIT(23)
+
+/* PWR1_ASM_CON2 */
+#define PWR1_ASM_CON2_GASRC4_CALI_CK_SEL_MASK   BIT(2)
+#define PWR1_ASM_CON2_GASRC5_CALI_CK_SEL_MASK   BIT(7)
+#define PWR1_ASM_CON2_GASRC6_CALI_CK_SEL_MASK   BIT(12)
+#define PWR1_ASM_CON2_GASRC7_CALI_CK_SEL_MASK   BIT(17)
+#define PWR1_ASM_CON2_GASRC8_CALI_CK_SEL_MASK   BIT(22)
+#define PWR1_ASM_CON2_GASRC9_CALI_CK_SEL_MASK   BIT(27)
+
+/* PWR1_ASM_CON3 */
+#define PWR1_ASM_CON3_GASRC10_CALI_CK_SEL_MASK   BIT(2)
+#define PWR1_ASM_CON3_GASRC11_CALI_CK_SEL_MASK   BIT(7)
+
+/* AUDIO_TOP_CON0 */
+#define AUDIO_TOP_CON0_PDN_AFE            BIT(2)
+#define AUDIO_TOP_CON0_PDN_APLL           BIT(23)
+#define AUDIO_TOP_CON0_PDN_APLL_TUNER     BIT(19)
+#define AUDIO_TOP_CON0_PDN_APLL2          BIT(24)
+#define AUDIO_TOP_CON0_PDN_APLL2_TUNER    BIT(20)
+#define AUDIO_TOP_CON0_PDN_DAC            BIT(25)
+#define AUDIO_TOP_CON0_PDN_DAC_HIRES      BIT(31)
+#define AUDIO_TOP_CON0_PDN_DAC_PREDIS     BIT(26)
+#define AUDIO_TOP_CON0_PDN_SPDIFIN_TUNER  BIT(10)
+#define AUDIO_TOP_CON0_PDN_ADC            BIT(28)
+#define AUDIO_TOP_CON0_PDN_SPDF           BIT(21)
+#define AUDIO_TOP_CON0_PDN_TML            BIT(27)
+#define AUDIO_TOP_CON0_PDN_UL_TML         BIT(18)
+
+/* AUDIO_TOP_CON1 */
+#define AUDIO_TOP_CON1_PDN_ADC_HIRES      BIT(17)
+#define AUDIO_TOP_CON1_PDN_ADDA6_ADC      BIT(18)
+#define AUDIO_TOP_CON1_PDN_ADDA6_HIRES    BIT(19)
+#define AUDIO_TOP_CON1_PDN_UL_TML_HIRES   BIT(16)
+#define AUDIO_TOP_CON1_PDN_DMIC_TML       BIT(14)
+#define AUDIO_TOP_CON1_PDN_A1SYS_HOPING   BIT(2)
+#define AUDIO_TOP_CON1_PDN_DMIC0          BIT(10)
+#define AUDIO_TOP_CON1_PDN_DMIC1          BIT(11)
+#define AUDIO_TOP_CON1_PDN_DMIC2          BIT(12)
+#define AUDIO_TOP_CON1_PDN_DMIC3          BIT(13)
+
+/* AUDIO_TOP_CON3 */
+#define AUDIO_TOP_CON3_PDN_EARC_TUNER     BIT(7)
+#define AUDIO_TOP_CON3_PDN_LINEIN_TUNER   BIT(5)
+
+/* AUDIO_TOP_CON4 */
+#define AUDIO_TOP_CON4_PDN_I2S_IN          BIT(0)
+#define AUDIO_TOP_CON4_PDN_TDM_IN          BIT(1)
+#define AUDIO_TOP_CON4_PDN_I2S_OUT         BIT(6)
+#define AUDIO_TOP_CON4_PDN_TDM_OUT         BIT(7)
+#define AUDIO_TOP_CON4_PDN_HDMI_OUT        BIT(8)
+#define AUDIO_TOP_CON4_PDN_ASRC11          BIT(16)
+#define AUDIO_TOP_CON4_PDN_ASRC12          BIT(17)
+#define AUDIO_TOP_CON4_PDN_A1SYS           BIT(21)
+#define AUDIO_TOP_CON4_PDN_A2SYS           BIT(22)
+#define AUDIO_TOP_CON4_PDN_A3SYS           BIT(30)
+#define AUDIO_TOP_CON4_PDN_A4SYS           BIT(31)
+#define AUDIO_TOP_CON4_PDN_PCMIF           BIT(24)
+#define AUDIO_TOP_CON4_PDN_INTDIR          BIT(20)
+#define AUDIO_TOP_CON4_PDN_MULTI_IN        BIT(19)
+
+/* AUDIO_TOP_CON6 */
+#define AUDIO_TOP_CON6_PDN_GASRC11         BIT(11)
+#define AUDIO_TOP_CON6_PDN_GASRC10         BIT(10)
+#define AUDIO_TOP_CON6_PDN_GASRC9          BIT(9)
+#define AUDIO_TOP_CON6_PDN_GASRC8          BIT(8)
+#define AUDIO_TOP_CON6_PDN_GASRC7          BIT(7)
+#define AUDIO_TOP_CON6_PDN_GASRC6          BIT(6)
+#define AUDIO_TOP_CON6_PDN_GASRC5          BIT(5)
+#define AUDIO_TOP_CON6_PDN_GASRC4          BIT(4)
+#define AUDIO_TOP_CON6_PDN_GASRC3          BIT(3)
+#define AUDIO_TOP_CON6_PDN_GASRC2          BIT(2)
+#define AUDIO_TOP_CON6_PDN_GASRC1          BIT(1)
+#define AUDIO_TOP_CON6_PDN_GASRC0          BIT(0)
+
+/* AFE_GAINx_CON0 */
+#define AFE_GAIN_CON0_SAMPLE_PER_STEP_MASK  GENMASK(15, 8)
+#define AFE_GAIN_CON0_GAIN_MODE_MASK        GENMASK(7, 3)
+#define AFE_GAIN_CON0_GAIN_ON_MASK          BIT(0)
+
+/* AFE_GAINx_CON1 */
+#define AFE_GAIN_CON1_TARGET_MASK           GENMASK(19, 0)
+
+/* AFE_GAINx_CON2 */
+#define AFE_GAIN_CON2_DOWN_STEP_MASK        GENMASK(19, 0)
+
+/* AFE_GAINx_CON3 */
+#define AFE_GAIN_CON3_UP_STEP_MASK          GENMASK(19, 0)
+
+/* AFE_GAINx_CUR */
+#define AFE_GAIN_CUR_GAIN_MASK              GENMASK(19, 0)
+
+/* ASYS_TOP_CON */
+#define ASYS_TOP_CON_A1SYS_TIMING_ON       BIT(0)
+#define ASYS_TOP_CON_A2SYS_TIMING_ON       BIT(1)
+#define ASYS_TOP_CON_A3SYS_TIMING_ON       BIT(4)
+#define ASYS_TOP_CON_A4SYS_TIMING_ON       BIT(5)
+#define ASYS_TOP_CON_26M_TIMING_ON         BIT(2)
+
+/* PWR2_TOP_CON0 */
+#define PWR2_TOP_CON_DMIC8_SRC_SEL_MASK     GENMASK(31, 29)
+#define PWR2_TOP_CON_DMIC7_SRC_SEL_MASK     GENMASK(28, 26)
+#define PWR2_TOP_CON_DMIC6_SRC_SEL_MASK     GENMASK(25, 23)
+#define PWR2_TOP_CON_DMIC5_SRC_SEL_MASK     GENMASK(22, 20)
+#define PWR2_TOP_CON_DMIC4_SRC_SEL_MASK     GENMASK(19, 17)
+#define PWR2_TOP_CON_DMIC3_SRC_SEL_MASK     GENMASK(16, 14)
+#define PWR2_TOP_CON_DMIC2_SRC_SEL_MASK     GENMASK(13, 11)
+#define PWR2_TOP_CON_DMIC1_SRC_SEL_MASK     GENMASK(10, 8)
+
+/* PWR2_TOP_CON1 */
+#define PWR2_TOP_CON1_DMIC_CKDIV_ON        BIT(1)
+
+/* PCM_INTF_CON1 */
+#define PCM_INTF_CON1_SYNC_OUT_INV     BIT(23)
+#define PCM_INTF_CON1_BCLK_OUT_INV     BIT(22)
+#define PCM_INTF_CON1_CLK_OUT_INV_MASK GENMASK(23, 22)
+#define PCM_INTF_CON1_SYNC_IN_INV      BIT(21)
+#define PCM_INTF_CON1_BCLK_IN_INV      BIT(20)
+#define PCM_INTF_CON1_CLK_IN_INV_MASK  GENMASK(21, 20)
+#define PCM_INTF_CON1_PCM_24BIT        BIT(16)
+#define PCM_INTF_CON1_PCM_16BIT        (0 << 16)
+#define PCM_INTF_CON1_PCM_BIT_MASK     BIT(16)
+#define PCM_INTF_CON1_PCM_WLEN_32BCK   (0 << 14)
+#define PCM_INTF_CON1_PCM_WLEN_64BCK   BIT(14)
+#define PCM_INTF_CON1_PCM_WLEN_MASK    BIT(14)
+#define PCM_INTF_CON1_SYNC_LENGTH_MASK GENMASK(13, 9)
+#define PCM_INTF_CON1_PCM_SLAVE        BIT(5)
+#define PCM_INTF_CON1_PCM_MASTER       (0 << 5)
+#define PCM_INTF_CON1_PCM_M_S_MASK     BIT(5)
+#define PCM_INTF_CON1_PCM_MODE_MASK    GENMASK(4, 3)
+#define PCM_INTF_CON1_PCM_FMT_MASK     GENMASK(2, 1)
+#define PCM_INTF_CON1_PCM_EN           BIT(0)
+
+/* PCM_INTF_CON2 */
+#define PCM_INTF_CON2_CLK_DOMAIN_SEL_MASK GENMASK(24, 23)
+#define PCM_INTF_CON2_SYNC_FREQ_MODE_MASK GENMASK(16, 12)
+#define PCM_INTF_CON2_PCM_TX2RX_LPBK      BIT(8)
+
+/* AFE_MPHONE_MULTIx_CON0 */
+#define AFE_MPHONE_MULTI_CON0_16BIT_SWAP       BIT(3)
+#define AFE_MPHONE_MULTI_CON0_16BIT_SWAP_MASK  BIT(3)
+#define AFE_MPHONE_MULTI_CON0_24BIT_DATA       (0x1 << 1)
+#define AFE_MPHONE_MULTI_CON0_16BIT_DATA       (0x0 << 1)
+#define AFE_MPHONE_MULIT_CON0_24BIT_DATA_MASK  BIT(1)
+#define AFE_MPHONE_MULTI_CON0_EN               BIT(0)
+
+/* AFE_MPHONE_MULTIx_CON1 */
+#define AFE_MPHONE_MULTI_CON1_SYNC_ON                BIT(24)
+#define AFE_MPHONE_MULTI_CON1_24BIT_SWAP_BYPASS      BIT(22)
+#define AFE_MPHONE_MULTI_CON1_NON_COMPACT_MODE       (0x1 << 19)
+#define AFE_MPHONE_MULTI_CON1_COMPACT_MODE           (0x0 << 19)
+#define AFE_MPHONE_MULTI_CON1_NON_COMPACT_MODE_MASK  BIT(19)
+#define AFE_MPHONE_MULTI_CON1_HBR_MODE               BIT(18)
+#define AFE_MPHONE_MULTI_CON1_LRCK_32_CYCLE          (0x2 << 16)
+#define AFE_MPHONE_MULTI_CON1_LRCK_24_CYCLE          (0x1 << 16)
+#define AFE_MPHONE_MULTI_CON1_LRCK_16_CYCLE          (0x0 << 16)
+#define AFE_MPHONE_MULTI_CON1_LRCK_CYCLE_SEL_MASK    GENMASK(17, 16)
+#define AFE_MPHONE_MULTI_CON1_LRCK_INV               BIT(15)
+#define AFE_MPHONE_MULTI_CON1_DELAY_DATA             BIT(14)
+#define AFE_MPHONE_MULTI_CON1_LEFT_ALIGN             BIT(13)
+#define AFE_MPHONE_MULTI_CON1_BIT_NUM_MASK           GENMASK(12, 8)
+#define AFE_MPHONE_MULTI_CON1_BCK_INV                BIT(6)
+#define AFE_MPHONE_MULTI_CON1_CH_NUM_MASK            GENMASK(1, 0)
+
+/* AFE_MPHONE_MULTIx_CON2 */
+#define AFE_MPHONE_MULTI_CON2_SEL_SPDIFIN        BIT(19)
+/* AFE_AUD_PAD_TOP */
+#define RG_RX_PROTOCOL2			BIT(3)
+#define RG_RX_FIFO_ON			BIT(0)
+
+/* AFE_ADDA_MTKAIF_CFG0 */
+#define MTKAIF_RXIF_CLKINV_ADC		BIT(31)
+#define MTKAIF_RXIF_PROTOCOL2		BIT(16)
+#define MTKAIF_TXIF_PROTOCOL2		BIT(4)
+#define MTKAIF_TXIF_8TO5		BIT(2)
+#define MTKAIF_RXIF_8TO5		BIT(1)
+#define MTKAIF_IF_LOOPBACK1		BIT(0)
+
+/* AFE_ADDA_MTKAIF_RX_CFG2 */
+#define MTKAIF_RXIF_DELAY_CYCLE_MASK	GENMASK(15, 12)
+#define MTKAIF_RXIF_DELAY_DATA		BIT(8)
+
+/* AFE_ADDA_MTKAIF_SYNCWORD_CFG */
+#define ADDA6_MTKAIF_RX_SYNC_WORD2_DISABLE	BIT(23)
+
+/* AFE_DMICx_UL_SRC_CON0 */
+#define AFE_DMIC_UL_SRC_CON0_UL_PHASE_SEL_CH1(x)	(((x) & 0x7) << 27)
+#define AFE_DMIC_UL_SRC_CON0_UL_PHASE_SEL_CH2(x)	(((x) & 0x7) << 24)
+#define AFE_DMIC_UL_SRC_CON0_UL_PHASE_SEL_MASK		GENMASK(29, 24)
+#define AFE_DMIC_UL_SRC_CON0_UL_TWO_WIRE_MODE_CTL	BIT(23)
+#define AFE_DMIC_UL_SRC_CON0_UL_MODE_3P25M_CH2_CTL	BIT(22)
+#define AFE_DMIC_UL_SRC_CON0_UL_MODE_3P25M_CH1_CTL	BIT(21)
+
+#define AFE_DMIC_UL_VOICE_MODE_MASK			GENMASK(19, 17)
+#define AFE_DMIC_UL_CON0_VOCIE_MODE_8K			AFE_DMIC_UL_VOICE_MODE(0)
+#define AFE_DMIC_UL_CON0_VOCIE_MODE_16K			AFE_DMIC_UL_VOICE_MODE(1)
+#define AFE_DMIC_UL_CON0_VOCIE_MODE_32K			AFE_DMIC_UL_VOICE_MODE(2)
+#define AFE_DMIC_UL_CON0_VOCIE_MODE_48K			AFE_DMIC_UL_VOICE_MODE(3)
+#define AFE_DMIC_UL_CON0_VOCIE_MODE_96K			AFE_DMIC_UL_VOICE_MODE(4)
+#define AFE_DMIC_UL_SRC_CON0_UL_IIR_MODE_CTL_MASK	GENMASK(9, 7)
+#define AFE_DMIC_UL_SRC_CON0_UL_IIR_ON_TMP_CTL		BIT(10)
+#define AFE_DMIC_UL_SRC_CON0_UL_SDM_3_LEVEL_CTL		BIT(1)
+#define AFE_DMIC_UL_SRC_CON0_UL_SRC_ON_TMP_CTL		BIT(0)
+
+/* DMIC_BYPASS_HW_GAIN */
+#define DMIC_BYPASS_HW_GAIN4_ONE_HEART		BIT(10)
+#define DMIC_BYPASS_HW_GAIN3_ONE_HEART		BIT(9)
+#define DMIC_BYPASS_HW_GAIN2_ONE_HEART		BIT(8)
+#define DMIC_BYPASS_HW_GAIN_DMIC4_BYPASS	BIT(4)
+#define DMIC_BYPASS_HW_GAIN_DMIC3_BYPASS	BIT(3)
+#define DMIC_BYPASS_HW_GAIN_DMIC2_BYPASS	BIT(2)
+#define DMIC_BYPASS_HW_GAIN_DMIC1_BYPASS	BIT(1)
+
+/* DMIC_GAINx_CON0 */
+#define DMIC_GAIN_CON0_GAIN_ON			BIT(0)
+#define DMIC_GAIN_CON0_SAMPLE_PER_STEP_MASK	GENMASK(15, 8)
+
+/* DMIC_GAINx_CON1 */
+#define DMIC_GAIN_CON1_TARGET_MASK	GENMASK(27, 0)
+
+/* DMIC_GAINx_CON2 */
+#define DMIC_GAIN_CON2_DOWN_STEP	GENMASK(19, 0)
+
+/* DMIC_GAINx_CON3 */
+#define DMIC_GAIN_CON3_UP_STEP		GENMASK(19, 0)
+
+/* DMIC_GAINx_CUR */
+#define DMIC_GAIN_CUR_GAIN_MASK		GENMASK(27, 0)
+
+/* ETDM_INx_AFIFO_CON */
+#define ETDM_IN_USE_AFIFO		BIT(8)
+#define ETDM_IN_AFIFO_CLOCK_MASK	GENMASK(7, 5)
+#define ETDM_IN_AFIFO_MODE_MASK		GENMASK(4, 0)
+
+/* ETDM_COWORK_CON0 */
+#define ETDM_OUT1_SLAVE_SEL_MASK	GENMASK(23, 20)
+#define ETDM_OUT1_SLAVE_SEL_SHIFT	20
+#define ETDM_OUT1_SYNC_SEL_MASK		GENMASK(19, 16)
+#define ETDM_OUT1_SYNC_SEL_SHIFT	16
+
+/* ETDM_COWORK_CON1 */
+#define ETDM_IN1_SDATA_SEL_MASK		GENMASK(23, 20)
+#define ETDM_IN1_SDATA_SEL_SHIFT	20
+#define ETDM_IN1_SDATA0_SEL_MASK	GENMASK(19, 16)
+#define ETDM_IN1_SDATA0_SEL_SHIFT	16
+#define ETDM_IN1_SYNC_SEL_MASK		GENMASK(15, 12)
+#define ETDM_IN1_SYNC_SEL_SHIFT		12
+#define ETDM_IN1_SLAVE_SEL_MASK		GENMASK(11, 8)
+#define ETDM_IN1_SLAVE_SEL_SHIFT	8
+
+/* ETDM_COWORK_CON2 */
+#define ETDM_IN2_SYNC_SEL_MASK		GENMASK(31, 28)
+#define ETDM_IN2_SYNC_SEL_SHIFT		28
+#define ETDM_IN2_SLAVE_SEL_MASK		GENMASK(27, 24)
+#define ETDM_IN2_SLAVE_SEL_SHIFT	24
+#define ETDM_OUT3_SLAVE_SEL_MASK	GENMASK(23, 20)
+#define ETDM_OUT3_SLAVE_SEL_SHIFT	20
+#define ETDM_OUT3_SYNC_SEL_MASK		GENMASK(19, 16)
+#define ETDM_OUT3_SYNC_SEL_SHIFT	16
+#define ETDM_OUT2_SLAVE_SEL_MASK	GENMASK(11, 8)
+#define ETDM_OUT2_SLAVE_SEL_SHIFT	8
+#define ETDM_OUT2_SYNC_SEL_MASK		GENMASK(7, 4)
+#define ETDM_OUT2_SYNC_SEL_SHIFT	4
+
+/* ETDM_COWORK_CON3 */
+#define ETDM_IN2_SDATA_SEL_MASK		GENMASK(7, 4)
+#define ETDM_IN2_SDATA_SEL_SHIFT	4
+#define ETDM_IN2_SDATA0_SEL_MASK	GENMASK(3, 0)
+#define ETDM_IN2_SDATA0_SEL_SHIFT	0
+
+/* ETDM_x_CONx */
+#define ETDM_CON0_CH_NUM_MASK		GENMASK(27, 23)
+#define ETDM_CON0_WORD_LEN_MASK		GENMASK(20, 16)
+#define ETDM_CON0_BIT_LEN_MASK		GENMASK(15, 11)
+#define ETDM_CON0_FORMAT_MASK		GENMASK(8, 6)
+#define ETDM_CON0_SLAVE_MODE		BIT(5)
+#define ETDM_CON0_SYNC_MODE		BIT(1)
+#define ETDM_CON0_EN			BIT(0)
+
+#define ETDM_OUT_CON0_RELATCH_DOMAIN_MASK	GENMASK(29, 28)
+
+#define ETDM_CON1_MCLK_OUTPUT			BIT(16)
+
+#define ETDM_IN_CON1_LRCK_AUTO_MODE		BIT(31)
+#define ETDM_IN_CON1_LRCK_WIDTH_MASK		GENMASK(29, 20)
+
+#define ETDM_OUT_CON1_LRCK_AUTO_MODE		BIT(29)
+#define ETDM_OUT_CON1_LRCK_WIDTH_MASK		GENMASK(28, 19)
+
+#define ETDM_IN_CON2_MULTI_IP_2CH_MODE		BIT(31)
+#define ETDM_IN_CON2_MULTI_IP_TOTAL_CH_MASK	GENMASK(19, 15)
+#define ETDM_IN_CON2_CLOCK_MASK			GENMASK(12, 10)
+#define ETDM_IN_CON2_CLOCK_SHIFT		10
+#define ETDM_IN_CON2_UPDATE_GAP_MASK		GENMASK(9, 5)
+
+#define ETDM_OUT_CON2_LRCK_DELAY_BCK_INV	BIT(30)
+#define ETDM_OUT_CON2_LRCK_DELAY_0P5T_EN	BIT(29)
+
+#define ETDM_IN_CON3_FS_MASK			GENMASK(30, 26)
+#define ETDM_IN_CON3_DISABLE_OUT(x)		BIT(((x) & 0xffff))
+#define ETDM_IN_CON3_DISABLE_OUT_MASK		GENMASK(15, 0)
+
+#define ETDM_IN_CON4_MASTER_LRCK_INV		BIT(19)
+#define ETDM_IN_CON4_MASTER_BCK_INV		BIT(18)
+#define ETDM_IN_CON4_SLAVE_LRCK_INV		BIT(17)
+#define ETDM_IN_CON4_SLAVE_BCK_INV		BIT(16)
+
+#define ETDM_OUT_CON4_RELATCH_EN_MASK		GENMASK(28, 24)
+#define ETDM_OUT_CON4_CLOCK_MASK		GENMASK(8, 6)
+#define ETDM_OUT_CON4_CLOCK_SHIFT		6
+#define ETDM_OUT_CON4_FS_MASK			GENMASK(4, 0)
+
+#define ETDM_IN_CON5_LR_SWAP(x)			BIT(((x) & 0xffff) + 16)
+#define ETDM_IN_CON5_LR_SWAP_MASK		GENMASK(31, 16)
+#define ETDM_IN_CON5_ENABLE_ODD(x)		BIT(((x) & 0xffff))
+#define ETDM_IN_CON5_ENABLE_ODD_MASK		GENMASK(15, 0)
+
+#define ETDM_OUT_CON5_MASTER_LRCK_INV		BIT(10)
+#define ETDM_OUT_CON5_MASTER_BCK_INV		BIT(9)
+#define ETDM_OUT_CON5_SLAVE_LRCK_INV		BIT(8)
+#define ETDM_OUT_CON5_SLAVE_BCK_INV		BIT(7)
+
+/* GASRC_TIMING_CON0 */
+#define GASRC_TIMING_CON0_GASRC0_IN_MODE_MASK   GENMASK(4, 0)
+#define GASRC_TIMING_CON0_GASRC1_IN_MODE_MASK   GENMASK(9, 5)
+#define GASRC_TIMING_CON0_GASRC2_IN_MODE_MASK   GENMASK(14, 10)
+#define GASRC_TIMING_CON0_GASRC3_IN_MODE_MASK   GENMASK(19, 15)
+#define GASRC_TIMING_CON0_GASRC4_IN_MODE_MASK   GENMASK(24, 20)
+#define GASRC_TIMING_CON0_GASRC5_IN_MODE_MASK   GENMASK(29, 25)
+
+/* GASRC_TIMING_CON1 */
+#define GASRC_TIMING_CON1_GASRC6_IN_MODE_MASK   GENMASK(4, 0)
+#define GASRC_TIMING_CON1_GASRC7_IN_MODE_MASK   GENMASK(9, 5)
+#define GASRC_TIMING_CON1_GASRC8_IN_MODE_MASK   GENMASK(14, 10)
+#define GASRC_TIMING_CON1_GASRC9_IN_MODE_MASK   GENMASK(19, 15)
+#define GASRC_TIMING_CON1_GASRC10_IN_MODE_MASK  GENMASK(24, 20)
+#define GASRC_TIMING_CON1_GASRC11_IN_MODE_MASK  GENMASK(29, 25)
+
+/* GASRC_TIMING_CON2 */
+#define GASRC_TIMING_CON2_GASRC12_IN_MODE_MASK  GENMASK(4, 0)
+#define GASRC_TIMING_CON2_GASRC13_IN_MODE_MASK  GENMASK(9, 5)
+#define GASRC_TIMING_CON2_GASRC14_IN_MODE_MASK  GENMASK(14, 10)
+#define GASRC_TIMING_CON2_GASRC15_IN_MODE_MASK  GENMASK(19, 15)
+#define GASRC_TIMING_CON2_GASRC16_IN_MODE_MASK  GENMASK(24, 20)
+#define GASRC_TIMING_CON2_GASRC17_IN_MODE_MASK  GENMASK(29, 25)
+
+/* GASRC_TIMING_CON3 */
+#define GASRC_TIMING_CON3_GASRC18_IN_MODE_MASK  GENMASK(4, 0)
+#define GASRC_TIMING_CON3_GASRC19_IN_MODE_MASK  GENMASK(9, 5)
+
+/* GASRC_TIMING_CON4 */
+#define GASRC_TIMING_CON4_GASRC0_OUT_MODE_MASK   GENMASK(4, 0)
+#define GASRC_TIMING_CON4_GASRC1_OUT_MODE_MASK   GENMASK(9, 5)
+#define GASRC_TIMING_CON4_GASRC2_OUT_MODE_MASK   GENMASK(14, 10)
+#define GASRC_TIMING_CON4_GASRC3_OUT_MODE_MASK   GENMASK(19, 15)
+#define GASRC_TIMING_CON4_GASRC4_OUT_MODE_MASK   GENMASK(24, 20)
+#define GASRC_TIMING_CON4_GASRC5_OUT_MODE_MASK   GENMASK(29, 25)
+
+/* GASRC_TIMING_CON5 */
+#define GASRC_TIMING_CON5_GASRC6_OUT_MODE_MASK   GENMASK(4, 0)
+#define GASRC_TIMING_CON5_GASRC7_OUT_MODE_MASK   GENMASK(9, 5)
+#define GASRC_TIMING_CON5_GASRC8_OUT_MODE_MASK   GENMASK(14, 10)
+#define GASRC_TIMING_CON5_GASRC9_OUT_MODE_MASK   GENMASK(19, 15)
+#define GASRC_TIMING_CON5_GASRC10_OUT_MODE_MASK  GENMASK(24, 20)
+#define GASRC_TIMING_CON5_GASRC11_OUT_MODE_MASK  GENMASK(29, 25)
+
+/* AFE_DPTX_CON */
+#define AFE_DPTX_CON_CH_EN_2CH		GENMASK(9, 8)
+#define AFE_DPTX_CON_CH_EN_4CH		GENMASK(11, 8)
+#define AFE_DPTX_CON_CH_EN_6CH		GENMASK(13, 8)
+#define AFE_DPTX_CON_CH_EN_8CH		GENMASK(15, 8)
+#define AFE_DPTX_CON_CH_EN_MASK		GENMASK(15, 8)
+#define AFE_DPTX_CON_16BIT		(0x1 << 2)
+#define AFE_DPTX_CON_24BIT		(0x0 << 2)
+#define AFE_DPTX_CON_16BIT_MASK		BIT(2)
+#define AFE_DPTX_CON_CH_NUM_2CH		(0x0 << 1)
+#define AFE_DPTX_CON_CH_NUM_8CH		(0x1 << 1)
+#define AFE_DPTX_CON_CH_NUM_MASK	BIT(1)
+#define AFE_DPTX_CON_ON			BIT(0)
+
+/* AFE_ADDA_DL_SRC2_CON0 */
+#define DL_2_INPUT_MODE_CTL_MASK	GENMASK(31, 28)
+#define DL_2_CH1_SATURATION_EN_CTL	BIT(27)
+#define DL_2_CH2_SATURATION_EN_CTL	BIT(26)
+#define DL_2_MUTE_CH1_OFF_CTL_PRE	BIT(12)
+#define DL_2_MUTE_CH2_OFF_CTL_PRE	BIT(11)
+#define DL_2_VOICE_MODE_CTL_PRE		BIT(5)
+#define DL_2_GAIN_ON_CTL_PRE_SHIFT	1
+#define DL_2_SRC_ON_TMP_CTRL_PRE_SHIFT	0
+
+/* AFE_ADDA_DL_SRC2_CON1 */
+#define DL_2_GAIN_CTL_PRE_MASK		GENMASK(31, 16)
+#define DL_2_GAIN_CTL_PRE_SHIFT		16
+
+/* AFE_ADDA_TOP_CON0 */
+#define C_LOOPBACK_MODE_CTL_MASK	GENMASK(15, 12)
+#define DL_INPUT_FROM_SINEGEN		(4 << 12)
+
+/* AFE_ADDA_UL_DL_CON0 */
+#define ADDA_AFE_ON_SHIFT		0
+
+/* AFE_ADDA_DL_SDM_DCCOMP_CON */
+#define DL_USE_NEW_2ND_SDM		BIT(30)
+#define ATTGAIN_CTL_MASK		GENMASK(5, 0)
+
+/* AFE_ADDA_UL_SRC_CON0 */
+#define UL_MODE_3P25M_CH2_CTL		BIT(22)
+#define UL_MODE_3P25M_CH1_CTL		BIT(21)
+#define UL_VOICE_MODE_CTL_MASK		GENMASK(19, 17)
+#define UL_LOOPBACK_MODE_CTL		BIT(2)
+#define UL_SDM3_LEVEL_CTL		BIT(1)
+#define UL_SRC_ON_TMP_CTL_SHIFT		0
+
+/* AFE_GASRCx_NEW_CON0 */
+#define AFE_GASRC_NEW_CON0_ONE_HEART                BIT(31)
+#define AFE_GASRC_NEW_CON0_CHSET0_CLR_IIR_HISTORY   BIT(17)
+#define AFE_GASRC_NEW_CON0_CHSET0_OFS_SEL_MASK      GENMASK(15, 14)
+#define AFE_GASRC_NEW_CON0_CHSET0_OFS_SEL_TX        (0 << 14)
+#define AFE_GASRC_NEW_CON0_CHSET0_OFS_SEL_RX        BIT(14)
+#define AFE_GASRC_NEW_CON0_CHSET0_IFS_SEL_MASK      GENMASK(13, 12)
+#define AFE_GASRC_NEW_CON0_CHSET0_IFS_SEL_TX        (3 << 12)
+#define AFE_GASRC_NEW_CON0_CHSET0_IFS_SEL_RX        (2 << 12)
+#define AFE_GASRC_NEW_CON0_CHSET0_IIR_EN            BIT(11)
+#define AFE_GASRC_NEW_CON0_CHSET0_IIR_STAGE_MASK    GENMASK(10, 8)
+#define AFE_GASRC_NEW_CON0_CHSET_STR_CLR            BIT(4)
+#define AFE_GASRC_NEW_CON0_COEFF_SRAM_CTRL          BIT(1)
+#define AFE_GASRC_NEW_CON0_ASM_ON                   BIT(0)
+
+/* AFE_GASRCx_NEW_CON5 */
+#define AFE_GASRC_NEW_CON5_CALI_LRCK_SEL_MASK   GENMASK(3, 1)
+#define AFE_GASRC_NEW_CON5_SOFT_RESET           BIT(0)
+
+/* AFE_GASRCx_NEW_CON6 */
+#define AFE_GASRC_NEW_CON6_FREQ_CALI_CYCLE_MASK     GENMASK(31, 16)
+#define AFE_GASRC_NEW_CON6_AUTO_TUNE_FREQ3          BIT(12)
+#define AFE_GASRC_NEW_CON6_COMP_FREQ_RES_EN         BIT(11)
+#define AFE_GASRC_NEW_CON6_CALI_SIG_MUX_SEL_MASK    GENMASK(9, 8)
+#define AFE_GASRC_NEW_CON6_FREQ_CALI_BP_DGL         BIT(7)
+#define AFE_GASRC_NEW_CON6_AUTO_TUNE_FREQ2          BIT(3)
+#define AFE_GASRC_NEW_CON6_FREQ_CALI_AUTO_RESTART   BIT(2)
+#define AFE_GASRC_NEW_CON6_CALI_USE_FREQ_OUT        BIT(1)
+#define AFE_GASRC_NEW_CON6_CALI_EN                  BIT(0)
+
+/* AFE_GASRCx_NEW_CON7 */
+#define AFE_GASRC_NEW_CON7_FREQ_CALC_DENOMINATOR_MASK    GENMASK(23, 0)
+#define AFE_GASRC_NEW_CON7_FREQ_CALC_DENOMINATOR_49M     (0x3c00)
+#define AFE_GASRC_NEW_CON7_FREQ_CALC_DENOMINATOR_45M     (0x3720)
+
+#endif
-- 
2.18.0



From trevor.wu at mediatek.com  Thu Dec 29 21:54:41 2022
From: trevor.wu at mediatek.com (Trevor Wu)
Date: Fri, 30 Dec 2022 13:54:41 +0800
Subject: [PATCH v4 11/13] ASoC: mediatek: common: add soundcard driver common code
In-Reply-To: <20221230055443.16024-1-trevor.wu@mediatek.com>
References: <20221230055443.16024-1-trevor.wu@mediatek.com>
Message-ID: <20221230055443.16024-12-trevor.wu@mediatek.com>

Add common code to support of_node of codec parsing, so codec phandle
can be assigned by sound-dai in dts.

Signed-off-by: Trevor Wu <trevor.wu at mediatek.com>
---
 sound/soc/mediatek/common/Makefile            |  2 +-
 .../mediatek/common/mtk-soundcard-driver.c    | 79 +++++++++++++++++++
 .../mediatek/common/mtk-soundcard-driver.h    | 14 ++++
 3 files changed, 94 insertions(+), 1 deletion(-)
 create mode 100644 sound/soc/mediatek/common/mtk-soundcard-driver.c
 create mode 100644 sound/soc/mediatek/common/mtk-soundcard-driver.h

diff --git a/sound/soc/mediatek/common/Makefile b/sound/soc/mediatek/common/Makefile
index 576deb7f8cce..42e636c10c1e 100644
--- a/sound/soc/mediatek/common/Makefile
+++ b/sound/soc/mediatek/common/Makefile
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0
 # platform driver
-snd-soc-mtk-common-objs := mtk-afe-platform-driver.o mtk-afe-fe-dai.o mtk-dsp-sof-common.o
+snd-soc-mtk-common-objs := mtk-afe-platform-driver.o mtk-afe-fe-dai.o mtk-dsp-sof-common.o mtk-soundcard-driver.o
 obj-$(CONFIG_SND_SOC_MEDIATEK) += snd-soc-mtk-common.o
 
 obj-$(CONFIG_SND_SOC_MTK_BTCVSD) += mtk-btcvsd.o
diff --git a/sound/soc/mediatek/common/mtk-soundcard-driver.c b/sound/soc/mediatek/common/mtk-soundcard-driver.c
new file mode 100644
index 000000000000..e250b2b624ee
--- /dev/null
+++ b/sound/soc/mediatek/common/mtk-soundcard-driver.c
@@ -0,0 +1,79 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * mtk-soundcard-driver.c  --  MediaTek soundcard driver common
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Trevor Wu <trevor.wu at mediatek.com>
+ */
+
+#include <linux/module.h>
+#include <linux/of.h>
+#include <sound/soc.h>
+
+#include "mtk-soundcard-driver.h"
+
+static int set_card_codec_info(struct snd_soc_card *card,
+			       struct device_node *sub_node,
+			       struct snd_soc_dai_link *dai_link)
+{
+	struct device *dev = card->dev;
+	struct device_node *codec_node;
+	int ret;
+
+	codec_node = of_get_child_by_name(sub_node, "codec");
+	if (!codec_node)
+		return -EINVAL;
+
+	/* set card codec info */
+	ret = snd_soc_of_get_dai_link_codecs(dev, codec_node, dai_link);
+
+	of_node_put(codec_node);
+
+	if (ret < 0)
+		return dev_err_probe(dev, ret, "%s: codec dai not found\n",
+				     dai_link->name);
+
+	return 0;
+}
+
+int parse_dai_link_info(struct snd_soc_card *card)
+{
+	struct device *dev = card->dev;
+	struct device_node *sub_node;
+	struct snd_soc_dai_link *dai_link;
+	const char *dai_link_name;
+	int ret, i;
+
+	/* Loop over all the dai link sub nodes */
+	for_each_available_child_of_node(dev->of_node, sub_node) {
+		if (of_property_read_string(sub_node, "dai-link-name",
+					    &dai_link_name))
+			return -EINVAL;
+
+		for_each_card_prelinks(card, i, dai_link) {
+			if (!strcmp(dai_link_name, dai_link->name))
+				break;
+		}
+
+		if (i >= card->num_links)
+			return -EINVAL;
+
+		ret = set_card_codec_info(card, sub_node, dai_link);
+		if (ret < 0)
+			return ret;
+	}
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(parse_dai_link_info);
+
+void clean_card_reference(struct snd_soc_card *card)
+{
+	struct snd_soc_dai_link *dai_link;
+	int i;
+
+	/* release codec reference gotten by set_card_codec_info */
+	for_each_card_prelinks(card, i, dai_link)
+		snd_soc_of_put_dai_link_codecs(dai_link);
+}
+EXPORT_SYMBOL_GPL(clean_card_reference);
diff --git a/sound/soc/mediatek/common/mtk-soundcard-driver.h b/sound/soc/mediatek/common/mtk-soundcard-driver.h
new file mode 100644
index 000000000000..d92cac1d7b72
--- /dev/null
+++ b/sound/soc/mediatek/common/mtk-soundcard-driver.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * mtk-soundcard-driver.h  --  MediaTek soundcard driver common definition
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Trevor Wu <trevor.wu at mediatek.com>
+ */
+
+#ifndef _MTK_SOUNDCARD_DRIVER_H_
+#define _MTK_SOUNDCARD_DRIVER_H_
+
+int parse_dai_link_info(struct snd_soc_card *card);
+void clean_card_reference(struct snd_soc_card *card);
+#endif
-- 
2.18.0



From wenst at chromium.org  Thu Dec 29 22:42:39 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 14:42:39 +0800
Subject: [PATCH v2 00/23] MediaTek clocks cleanups and improvements
In-Reply-To: <20221230061309.16643-1-miles.chen@mediatek.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221230061309.16643-1-miles.chen@mediatek.com>
Message-ID: <CAGXv+5HqLc2xsz6b_d5hrPiAu363aMcJkQrqX32ukA2pcsj6kQ@mail.gmail.com>

On Fri, Dec 30, 2022 at 2:13 PM Miles Chen <miles.chen at mediatek.com> wrote:
> > Changes in v2:
> >  - Moved dt-bindings CLK_DUMMY to clk-mtk.h instead
> >
> >
> > This series performs cleanups and improvements on MediaTek clock
> > drivers, greatly reducing code duplication (hence also reducing
> > kernel size).
> >
> > There would be a lot to say about it, but summarizing:
> >
> > * Propagates struct device where possible in order to introduce the
> >   possibility of using Runtime PM on clock drivers as needed,
> >   possibly enhancing reliability of some platforms (obviously, this
> >   will do nothing unless power-domains are added to devicetree);
> >
> > * Cleans up some duplicated clock(s) registration attempt(s): on
> >   some platforms the 26M fixed factor clock is registered early,
> >   but then upon platform_driver probe, an attempt to re-register
> >   that clock was performed;
> >
> > * Removes some early clock registration where possible, moving
> >   everything to platform_driver clock probe;
> >
> > * Breaks down the big MT8173 clock driver in multiple ones, as it's
> >   already done with the others, cleans it up and adds possibility
> >   possibility to compile non-boot-critical clock drivers (for 8173)
> >   as modules;
> >
> > * Extends the common mtk_clk_simple_probe() function to be able to
> >   register multiple MediaTek clock types;
> >
> > * Removes duplicated [...]_probe functions from multiple MediaTek SoC
> >   clock drivers, migrating almost everything to the common functions
> >   mtk_clk_simple_probe();
> >
> > * Adds a .remove() callback, pointing to the common mtk_clk_simple_remove()
> >   function to all clock drivers that were migrated to the common probe;
> >
> > * Some more spare cleanups here and there.
> >
> > All of this was manually tested on various Chromebooks (with different MTK
> > SoCs) and no regression was detected.
> >
> > Cheers!
>
> I tested this v2 series on mt6779 and mt8192 without any problem.

Please give Tested-by. :)


From wenst at chromium.org  Thu Dec 29 23:14:29 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 15:14:29 +0800
Subject: [PATCH v2 12/23] clk: mediatek: clk-mtk: Extend mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-13-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-13-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5HC3BpO0RKUgpkNxsRtLJ+0+-WgfU8H55JSJ3ETTeRPVg@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> As a preparation to increase probe functions commonization across
> various MediaTek SoC clock controller drivers, extend function
> mtk_clk_simple_probe() to be able to register not only gates, but
> also fixed clocks, factors, muxes and composites.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> ---
>  drivers/clk/mediatek/clk-mtk.c | 101 ++++++++++++++++++++++++++++++---
>  drivers/clk/mediatek/clk-mtk.h |  10 ++++
>  2 files changed, 103 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
> index d05364e17e95..b0a6225cd7b2 100644
> --- a/drivers/clk/mediatek/clk-mtk.c
> +++ b/drivers/clk/mediatek/clk-mtk.c
> @@ -11,12 +11,14 @@
>  #include <linux/mfd/syscon.h>
>  #include <linux/module.h>
>  #include <linux/of.h>
> +#include <linux/of_address.h>
>  #include <linux/of_device.h>
>  #include <linux/platform_device.h>
>  #include <linux/slab.h>
>
>  #include "clk-mtk.h"
>  #include "clk-gate.h"
> +#include "clk-mux.h"
>
>  const struct mtk_gate_regs cg_regs_dummy = { 0, 0, 0 };
>
> @@ -465,20 +467,71 @@ int mtk_clk_simple_probe(struct platform_device *pdev)
>         const struct mtk_clk_desc *mcd;
>         struct clk_hw_onecell_data *clk_data;
>         struct device_node *node = pdev->dev.of_node;
> -       int r;
> +       void __iomem *base;
> +       int num_clks, r;
>
>         mcd = of_device_get_match_data(&pdev->dev);
>         if (!mcd)
>                 return -EINVAL;
>
> -       clk_data = mtk_alloc_clk_data(mcd->num_clks);
> +       /* Composite clocks needs us to pass iomem pointer */
> +       if (mcd->composite_clks) {
> +               if (!mcd->shared_io)
> +                       base = devm_platform_ioremap_resource(pdev, 0);
> +               else
> +                       base = of_iomap(node, 0);
> +
> +               if (IS_ERR_OR_NULL(base))
> +                       return IS_ERR(base) ? PTR_ERR(base) : -ENOMEM;
> +       }
> +
> +       /* Calculate how many clk_hw_onecell_data entries to allocate */
> +       num_clks = mcd->num_clks + mcd->num_composite_clks;
> +       num_clks += mcd->num_fixed_clks + mcd->num_factor_clks;
> +       num_clks += mcd->num_mux_clks;
> +
> +       clk_data = mtk_alloc_clk_data(num_clks);
>         if (!clk_data)
>                 return -ENOMEM;
>
> -       r = mtk_clk_register_gates(node, mcd->clks, mcd->num_clks,
> -                                  clk_data, &pdev->dev);
> -       if (r)
> -               goto free_data;
> +       if (mcd->fixed_clks) {
> +               r = mtk_clk_register_fixed_clks(mcd->fixed_clks,
> +                                               mcd->num_fixed_clks, clk_data);
> +               if (r)
> +                       goto free_data;
> +       }
> +
> +       if (mcd->factor_clks) {
> +               r = mtk_clk_register_factors(mcd->factor_clks,
> +                                            mcd->num_factor_clks, clk_data);
> +               if (r)
> +                       goto unregister_fixed_clks;
> +       }
> +
> +       if (mcd->mux_clks) {
> +               r = mtk_clk_register_muxes(mcd->mux_clks, mcd->num_mux_clks,
> +                                          node, mcd->clk_lock, clk_data,
> +                                          &pdev->dev);
> +               if (r)
> +                       goto unregister_factors;
> +       };
> +
> +       if (mcd->composite_clks) {
> +               /* We don't check composite_lock because it's optional */
> +               r = mtk_clk_register_composites(mcd->composite_clks,
> +                                               mcd->num_composite_clks,
> +                                               base, mcd->clk_lock,
> +                                               clk_data, &pdev->dev);
> +               if (r)
> +                       goto unregister_muxes;
> +       }
> +
> +       if (mcd->clks) {
> +               r = mtk_clk_register_gates(node, mcd->clks, mcd->num_clks,
> +                                          clk_data, &pdev->dev);
> +               if (r)
> +                       goto unregister_composites;
> +       }
>
>         r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
>         if (r)
> @@ -496,9 +549,28 @@ int mtk_clk_simple_probe(struct platform_device *pdev)
>         return r;
>
>  unregister_clks:
> -       mtk_clk_unregister_gates(mcd->clks, mcd->num_clks, clk_data);
> +       if (mcd->clks)
> +               mtk_clk_unregister_gates(mcd->clks, mcd->num_clks, clk_data);
> +unregister_composites:
> +       if (mcd->composite_clks)
> +               mtk_clk_unregister_composites(mcd->composite_clks,
> +                                             mcd->num_composite_clks, clk_data);
> +unregister_muxes:
> +       if (mcd->mux_clks)
> +               mtk_clk_unregister_muxes(mcd->mux_clks,
> +                                        mcd->num_mux_clks, clk_data);
> +unregister_factors:
> +       if (mcd->factor_clks)
> +               mtk_clk_unregister_factors(mcd->factor_clks,
> +                                          mcd->num_factor_clks, clk_data);
> +unregister_fixed_clks:
> +       if (mcd->fixed_clks)
> +               mtk_clk_unregister_fixed_clks(mcd->fixed_clks,
> +                                             mcd->num_fixed_clks, clk_data);
>  free_data:
>         mtk_free_clk_data(clk_data);
> +       if (mcd->shared_io && base)
> +               iounmap(base);
>         return r;
>  }
>  EXPORT_SYMBOL_GPL(mtk_clk_simple_probe);
> @@ -510,7 +582,20 @@ int mtk_clk_simple_remove(struct platform_device *pdev)
>         struct device_node *node = pdev->dev.of_node;
>
>         of_clk_del_provider(node);
> -       mtk_clk_unregister_gates(mcd->clks, mcd->num_clks, clk_data);
> +       if (mcd->clks)
> +               mtk_clk_unregister_gates(mcd->clks, mcd->num_clks, clk_data);
> +       if (mcd->composite_clks)
> +               mtk_clk_unregister_composites(mcd->composite_clks,
> +                                             mcd->num_composite_clks, clk_data);
> +       if (mcd->mux_clks)
> +               mtk_clk_unregister_muxes(mcd->mux_clks,
> +                                        mcd->num_mux_clks, clk_data);
> +       if (mcd->factor_clks)
> +               mtk_clk_unregister_factors(mcd->factor_clks,
> +                                          mcd->num_factor_clks, clk_data);
> +       if (mcd->fixed_clks)
> +               mtk_clk_unregister_fixed_clks(mcd->fixed_clks,
> +                                             mcd->num_fixed_clks, clk_data);
>         mtk_free_clk_data(clk_data);
>
>         return 0;
> diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
> index dd43235285db..1d036ba6ca07 100644
> --- a/drivers/clk/mediatek/clk-mtk.h
> +++ b/drivers/clk/mediatek/clk-mtk.h
> @@ -220,7 +220,17 @@ void mtk_clk_unregister_ref2usb_tx(struct clk_hw *hw);
>  struct mtk_clk_desc {
>         const struct mtk_gate *clks;
>         size_t num_clks;

I would've suggested renaming this to "gates" as well, but that seems
likely to cause additional unnecessary churn. Maybe you could leave
a comment in the header about this "historical reason"?

> +       const struct mtk_composite *composite_clks;
> +       size_t num_composite_clks;
> +       const struct mtk_fixed_clk *fixed_clks;
> +       size_t num_fixed_clks;
> +       const struct mtk_fixed_factor *factor_clks;
> +       size_t num_factor_clks;
> +       const struct mtk_mux *mux_clks;
> +       size_t num_mux_clks;

Nit: I would order these based on the order they are used/registered.

Otherwise,

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>

>         const struct mtk_clk_rst_desc *rst_desc;
> +       spinlock_t *clk_lock;
> +       bool shared_io;
>  };
>
>  int mtk_clk_simple_probe(struct platform_device *pdev);
> --
> 2.39.0
>


From wenst at chromium.org  Thu Dec 29 23:15:49 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 15:15:49 +0800
Subject: [PATCH v2 13/23] clk: mediatek: mt8173: Migrate pericfg/topckgen
 to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-14-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-14-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5GBREamLPmjURz5Rb+dYe4oKAxw+gKNqeeSBns_h37=Ng@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Function mtk_clk_simple_probe() gained the ability to register multiple
> clock types: migrate MT8173's pericfg and topckgen to this common
> probe function to reduce duplication and code size.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>


From miles.chen at mediatek.com  Thu Dec 29 23:19:12 2022
From: miles.chen at mediatek.com (Miles Chen)
Date: Fri, 30 Dec 2022 15:19:12 +0800
Subject: [PATCH v2 00/23] MediaTek clocks cleanups and improvements
In-Reply-To: <CAGXv+5HqLc2xsz6b_d5hrPiAu363aMcJkQrqX32ukA2pcsj6kQ@mail.gmail.com>
References: <CAGXv+5HqLc2xsz6b_d5hrPiAu363aMcJkQrqX32ukA2pcsj6kQ@mail.gmail.com>
Message-ID: <20221230071912.18135-1-miles.chen@mediatek.com>

>> >
>> > All of this was manually tested on various Chromebooks (with different MTK
>> > SoCs) and no regression was detected.
>> >
>> > Cheers!
>>
>> I tested this v2 series on mt6779 and mt8192 without any problem.
>
>Please give Tested-by. :)

Sure for v2 and I expect a v3 series (I will newer series)

Tested-by: Miles Chen <miles.chen at mediatek.com> 


From nbd at nbd.name  Thu Dec 29 23:31:43 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Fri, 30 Dec 2022 08:31:43 +0100
Subject: [PATCH net v3 3/5] net: ethernet: mtk_eth_soc: fix flow_offload related refcount bug
In-Reply-To: <20221230073145.53386-1-nbd@nbd.name>
References: <20221230073145.53386-1-nbd@nbd.name>
Message-ID: <20221230073145.53386-3-nbd@nbd.name>

Since we call flow_block_cb_decref on FLOW_BLOCK_UNBIND, we need to call
flow_block_cb_incref unconditionally, even for a newly allocated cb.
Fixes a use-after-free bug

Fixes: 502e84e2382d ("net: ethernet: mtk_eth_soc: add flow offloading support")
Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 .../net/ethernet/mediatek/mtk_ppe_offload.c   | 21 ++++++++++++-------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
index 81afd5ee3fbf..412d215b9571 100644
--- a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
+++ b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
@@ -554,6 +554,7 @@ mtk_eth_setup_tc_block(struct net_device *dev, struct flow_block_offload *f)
 	struct mtk_eth *eth = mac->hw;
 	static LIST_HEAD(block_cb_list);
 	struct flow_block_cb *block_cb;
+	bool register_block = false;
 	flow_setup_cb_t *cb;
 
 	if (!eth->soc->offload_version)
@@ -568,16 +569,20 @@ mtk_eth_setup_tc_block(struct net_device *dev, struct flow_block_offload *f)
 	switch (f->command) {
 	case FLOW_BLOCK_BIND:
 		block_cb = flow_block_cb_lookup(f->block, cb, dev);
-		if (block_cb) {
-			flow_block_cb_incref(block_cb);
-			return 0;
+		if (!block_cb) {
+			block_cb = flow_block_cb_alloc(cb, dev, dev, NULL);
+			if (IS_ERR(block_cb))
+				return PTR_ERR(block_cb);
+
+			register_block = true;
 		}
-		block_cb = flow_block_cb_alloc(cb, dev, dev, NULL);
-		if (IS_ERR(block_cb))
-			return PTR_ERR(block_cb);
 
-		flow_block_cb_add(block_cb, f);
-		list_add_tail(&block_cb->driver_list, &block_cb_list);
+		flow_block_cb_incref(block_cb);
+
+		if (register_block) {
+			flow_block_cb_add(block_cb, f);
+			list_add_tail(&block_cb->driver_list, &block_cb_list);
+		}
 		return 0;
 	case FLOW_BLOCK_UNBIND:
 		block_cb = flow_block_cb_lookup(f->block, cb, dev);
-- 
2.38.1



From nbd at nbd.name  Thu Dec 29 23:31:45 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Fri, 30 Dec 2022 08:31:45 +0100
Subject: [PATCH net v3 5/5] net: ethernet: mtk_eth_soc: ppe: fix L2 offloading with DSA untagging offload enabled
In-Reply-To: <20221230073145.53386-1-nbd@nbd.name>
References: <20221230073145.53386-1-nbd@nbd.name>
Message-ID: <20221230073145.53386-5-nbd@nbd.name>

Check for skb metadata in order to detect the case where the DSA header is not
present.

Fixes: 2d7605a72906 ("net: ethernet: mtk_eth_soc: enable hardware DSA untagging")
Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 6 +++---
 drivers/net/ethernet/mediatek/mtk_ppe.c     | 5 ++++-
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index ab6c571a39ae..cec2fcab3dfa 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -2039,9 +2039,6 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
 			skb_checksum_none_assert(skb);
 		skb->protocol = eth_type_trans(skb, netdev);
 
-		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
-			mtk_ppe_check_skb(eth->ppe[0], skb, hash);
-
 		/* When using VLAN untagging in combination with DSA, the
 		 * hardware treats the MTK special tag as a VLAN and untags it.
 		 */
@@ -2054,6 +2051,9 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
 				skb_dst_set_noref(skb, &eth->dsa_meta[port]->dst);
 		}
 
+		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
+			mtk_ppe_check_skb(eth->ppe[0], skb, hash);
+
 		skb_record_rx_queue(skb, 0);
 		napi_gro_receive(napi, skb);
 
diff --git a/drivers/net/ethernet/mediatek/mtk_ppe.c b/drivers/net/ethernet/mediatek/mtk_ppe.c
index 269208a841c7..e366a83cf516 100644
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
@@ -8,6 +8,7 @@
 #include <linux/platform_device.h>
 #include <linux/if_ether.h>
 #include <linux/if_vlan.h>
+#include <net/dst_metadata.h>
 #include <net/dsa.h>
 #include "mtk_eth_soc.h"
 #include "mtk_ppe.h"
@@ -700,7 +701,9 @@ void __mtk_ppe_check_skb(struct mtk_ppe *ppe, struct sk_buff *skb, u16 hash)
 		    skb->dev->dsa_ptr->tag_ops->proto != DSA_TAG_PROTO_MTK)
 			goto out;
 
-		tag += 4;
+		if (!skb_metadata_dst(skb))
+			tag += 4;
+
 		if (get_unaligned_be16(tag) != ETH_P_8021Q)
 			break;
 
-- 
2.38.1



From nbd at nbd.name  Thu Dec 29 23:31:41 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Fri, 30 Dec 2022 08:31:41 +0100
Subject: [PATCH net v3 1/5] net: ethernet: mtk_eth_soc: account for vlan in rx header length
Message-ID: <20221230073145.53386-1-nbd@nbd.name>

The network stack assumes that devices can handle an extra VLAN tag without
increasing the MTU

Reviewed-by: Vladimir Oltean <olteanv at gmail.com>
Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 drivers/net/ethernet/mediatek/mtk_eth_soc.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
index 18a50529ce7b..877cee9bcc66 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -34,7 +34,7 @@
 #define MTK_QDMA_RING_SIZE	2048
 #define MTK_DMA_SIZE		512
 #define MTK_MAC_COUNT		2
-#define MTK_RX_ETH_HLEN		(ETH_HLEN + ETH_FCS_LEN)
+#define MTK_RX_ETH_HLEN		(VLAN_ETH_HLEN + ETH_FCS_LEN)
 #define MTK_RX_HLEN		(NET_SKB_PAD + MTK_RX_ETH_HLEN + NET_IP_ALIGN)
 #define MTK_DMA_DUMMY_DESC	0xffffffff
 #define MTK_DEFAULT_MSG_ENABLE	(NETIF_MSG_DRV | \
-- 
2.38.1



From nbd at nbd.name  Thu Dec 29 23:31:42 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Fri, 30 Dec 2022 08:31:42 +0100
Subject: [PATCH net v3 2/5] net: ethernet: mtk_eth_soc: work around issue with sending small fragments
In-Reply-To: <20221230073145.53386-1-nbd@nbd.name>
References: <20221230073145.53386-1-nbd@nbd.name>
Message-ID: <20221230073145.53386-2-nbd@nbd.name>

When lots of frames are sent with a number of very small fragments, an
internal FIFO can overflow, causing the DMA engine to lock up lock up and
transmit attempts time out.

Fix this on MT7986 by increasing the reserved FIFO space.
Fix this on older chips by detecting the presence of small fragments and use
skb_gso_segment + skb_linearize to deal with them.

Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
v2: add proper fix for MT7986, limit workaround to NETSYS v1
v3: fix a regression on mt7986

 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 38 +++++++++++++++++++--
 drivers/net/ethernet/mediatek/mtk_eth_soc.h |  2 +-
 2 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index e3de9a53b2d9..04b75c7ad5b0 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1441,12 +1441,28 @@ static void mtk_wake_queue(struct mtk_eth *eth)
 	}
 }
 
+static bool mtk_skb_has_small_frag(struct sk_buff *skb)
+{
+	int min_size = 16;
+	int i;
+
+	if (skb_headlen(skb) < min_size)
+		return true;
+
+	for (i = 0; i < skb_shinfo(skb)->nr_frags; i++)
+		if (skb_frag_size(&skb_shinfo(skb)->frags[i]) < min_size)
+			return true;
+
+	return false;
+}
+
 static netdev_tx_t mtk_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct mtk_mac *mac = netdev_priv(dev);
 	struct mtk_eth *eth = mac->hw;
 	struct mtk_tx_ring *ring = &eth->tx_ring;
 	struct net_device_stats *stats = &dev->stats;
+	struct sk_buff *segs, *next;
 	bool gso = false;
 	int tx_num;
 
@@ -1468,6 +1484,18 @@ static netdev_tx_t mtk_start_xmit(struct sk_buff *skb, struct net_device *dev)
 		return NETDEV_TX_BUSY;
 	}
 
+	if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) &&
+	    skb_is_gso(skb) && mtk_skb_has_small_frag(skb)) {
+		segs = skb_gso_segment(skb, dev->features & ~NETIF_F_ALL_TSO);
+		if (IS_ERR(segs))
+			goto drop;
+
+		if (segs) {
+			consume_skb(skb);
+			skb = segs;
+		}
+	}
+
 	/* TSO: fill MSS info in tcp checksum field */
 	if (skb_is_gso(skb)) {
 		if (skb_cow_head(skb, 0)) {
@@ -1483,8 +1511,14 @@ static netdev_tx_t mtk_start_xmit(struct sk_buff *skb, struct net_device *dev)
 		}
 	}
 
-	if (mtk_tx_map(skb, dev, tx_num, ring, gso) < 0)
-		goto drop;
+	skb_list_walk_safe(skb, skb, next) {
+		if ((!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) &&
+		     mtk_skb_has_small_frag(skb) && skb_linearize(skb)) ||
+		    mtk_tx_map(skb, dev, tx_num, ring, gso) < 0) {
+				stats->tx_dropped++;
+				dev_kfree_skb_any(skb);
+		}
+	}
 
 	if (unlikely(atomic_read(&ring->free_count) <= ring->thresh))
 		netif_tx_stop_all_queues(dev);
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
index 877cee9bcc66..420a7d412f24 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -247,7 +247,7 @@
 #define MTK_CHK_DDONE_EN	BIT(28)
 #define MTK_DMAD_WR_WDONE	BIT(26)
 #define MTK_WCOMP_EN		BIT(24)
-#define MTK_RESV_BUF		(0x40 << 16)
+#define MTK_RESV_BUF		(0x80 << 16)
 #define MTK_MUTLI_CNT		(0x4 << 12)
 #define MTK_LEAKY_BUCKET_EN	BIT(11)
 
-- 
2.38.1



From nbd at nbd.name  Thu Dec 29 23:31:44 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Fri, 30 Dec 2022 08:31:44 +0100
Subject: [PATCH net v3 4/5] net: ethernet: mtk_eth_soc: drop generic vlan rx offload, only use DSA untagging
In-Reply-To: <20221230073145.53386-1-nbd@nbd.name>
References: <20221230073145.53386-1-nbd@nbd.name>
Message-ID: <20221230073145.53386-4-nbd@nbd.name>

Through testing I found out that hardware vlan rx offload support seems to
have some hardware issues. At least when using multiple MACs and when receiving
tagged packets on the secondary MAC, the hardware can sometimes start to emit
wrong tags on the first MAC as well.

In order to avoid such issues, drop the feature configuration and use the
offload feature only for DSA hardware untagging on MT7621/MT7622 devices which
only use one MAC.

Tested-By: Frank Wunderlich <frank-w at public-files.de>
Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
v3: rebase

 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 101 ++++++++------------
 drivers/net/ethernet/mediatek/mtk_eth_soc.h |   1 -
 2 files changed, 39 insertions(+), 63 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 04b75c7ad5b0..ab6c571a39ae 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -2042,29 +2042,16 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
 		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
 			mtk_ppe_check_skb(eth->ppe[0], skb, hash);
 
-		if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX) {
-			if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
-				if (trxd.rxd3 & RX_DMA_VTAG_V2)
-					__vlan_hwaccel_put_tag(skb,
-						htons(RX_DMA_VPID(trxd.rxd4)),
-						RX_DMA_VID(trxd.rxd4));
-			} else if (trxd.rxd2 & RX_DMA_VTAG) {
-				__vlan_hwaccel_put_tag(skb, htons(RX_DMA_VPID(trxd.rxd3)),
-						       RX_DMA_VID(trxd.rxd3));
-			}
-		}
-
 		/* When using VLAN untagging in combination with DSA, the
 		 * hardware treats the MTK special tag as a VLAN and untags it.
 		 */
-		if (skb_vlan_tag_present(skb) && netdev_uses_dsa(netdev)) {
-			unsigned int port = ntohs(skb->vlan_proto) & GENMASK(2, 0);
+		if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) &&
+		    (trxd.rxd2 & RX_DMA_VTAG) && netdev_uses_dsa(netdev)) {
+			unsigned int port = RX_DMA_VPID(trxd.rxd3) & GENMASK(2, 0);
 
 			if (port < ARRAY_SIZE(eth->dsa_meta) &&
 			    eth->dsa_meta[port])
 				skb_dst_set_noref(skb, &eth->dsa_meta[port]->dst);
-
-			__vlan_hwaccel_clear_tag(skb);
 		}
 
 		skb_record_rx_queue(skb, 0);
@@ -2889,29 +2876,11 @@ static netdev_features_t mtk_fix_features(struct net_device *dev,
 
 static int mtk_set_features(struct net_device *dev, netdev_features_t features)
 {
-	struct mtk_mac *mac = netdev_priv(dev);
-	struct mtk_eth *eth = mac->hw;
 	netdev_features_t diff = dev->features ^ features;
-	int i;
 
 	if ((diff & NETIF_F_LRO) && !(features & NETIF_F_LRO))
 		mtk_hwlro_netdev_disable(dev);
 
-	/* Set RX VLAN offloading */
-	if (!(diff & NETIF_F_HW_VLAN_CTAG_RX))
-		return 0;
-
-	mtk_w32(eth, !!(features & NETIF_F_HW_VLAN_CTAG_RX),
-		MTK_CDMP_EG_CTRL);
-
-	/* sync features with other MAC */
-	for (i = 0; i < MTK_MAC_COUNT; i++) {
-		if (!eth->netdev[i] || eth->netdev[i] == dev)
-			continue;
-		eth->netdev[i]->features &= ~NETIF_F_HW_VLAN_CTAG_RX;
-		eth->netdev[i]->features |= features & NETIF_F_HW_VLAN_CTAG_RX;
-	}
-
 	return 0;
 }
 
@@ -3211,30 +3180,6 @@ static int mtk_open(struct net_device *dev)
 	struct mtk_eth *eth = mac->hw;
 	int i, err;
 
-	if (mtk_uses_dsa(dev) && !eth->prog) {
-		for (i = 0; i < ARRAY_SIZE(eth->dsa_meta); i++) {
-			struct metadata_dst *md_dst = eth->dsa_meta[i];
-
-			if (md_dst)
-				continue;
-
-			md_dst = metadata_dst_alloc(0, METADATA_HW_PORT_MUX,
-						    GFP_KERNEL);
-			if (!md_dst)
-				return -ENOMEM;
-
-			md_dst->u.port_info.port_id = i;
-			eth->dsa_meta[i] = md_dst;
-		}
-	} else {
-		/* Hardware special tag parsing needs to be disabled if at least
-		 * one MAC does not use DSA.
-		 */
-		u32 val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
-		val &= ~MTK_CDMP_STAG_EN;
-		mtk_w32(eth, val, MTK_CDMP_IG_CTRL);
-	}
-
 	err = phylink_of_phy_connect(mac->phylink, mac->of_node, 0);
 	if (err) {
 		netdev_err(dev, "%s: could not attach PHY: %d\n", __func__,
@@ -3273,6 +3218,39 @@ static int mtk_open(struct net_device *dev)
 	phylink_start(mac->phylink);
 	netif_tx_start_all_queues(dev);
 
+	if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
+		return 0;
+
+	if (mtk_uses_dsa(dev) && !eth->prog) {
+		for (i = 0; i < ARRAY_SIZE(eth->dsa_meta); i++) {
+			struct metadata_dst *md_dst = eth->dsa_meta[i];
+
+			if (md_dst)
+				continue;
+
+			md_dst = metadata_dst_alloc(0, METADATA_HW_PORT_MUX,
+						    GFP_KERNEL);
+			if (!md_dst)
+				return -ENOMEM;
+
+			md_dst->u.port_info.port_id = i;
+			eth->dsa_meta[i] = md_dst;
+		}
+	} else {
+		/* Hardware special tag parsing needs to be disabled if at least
+		 * one MAC does not use DSA.
+		 */
+		u32 val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
+		val &= ~MTK_CDMP_STAG_EN;
+		mtk_w32(eth, val, MTK_CDMP_IG_CTRL);
+
+		val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
+		val &= ~MTK_CDMQ_STAG_EN;
+		mtk_w32(eth, val, MTK_CDMQ_IG_CTRL);
+
+		mtk_w32(eth, 0, MTK_CDMP_EG_CTRL);
+	}
+
 	return 0;
 }
 
@@ -3599,10 +3577,9 @@ static int mtk_hw_init(struct mtk_eth *eth)
 	if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
 		val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
 		mtk_w32(eth, val | MTK_CDMP_STAG_EN, MTK_CDMP_IG_CTRL);
-	}
 
-	/* Enable RX VLan Offloading */
-	mtk_w32(eth, 1, MTK_CDMP_EG_CTRL);
+		mtk_w32(eth, 1, MTK_CDMP_EG_CTRL);
+	}
 
 	/* set interrupt delays based on current Net DIM sample */
 	mtk_dim_rx(&eth->rx_dim.work);
@@ -4203,7 +4180,7 @@ static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
 		eth->netdev[id]->hw_features |= NETIF_F_LRO;
 
 	eth->netdev[id]->vlan_features = eth->soc->hw_features &
-		~(NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX);
+		~NETIF_F_HW_VLAN_CTAG_TX;
 	eth->netdev[id]->features |= eth->soc->hw_features;
 	eth->netdev[id]->ethtool_ops = &mtk_ethtool_ops;
 
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
index 420a7d412f24..e8bb8b511f06 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -48,7 +48,6 @@
 #define MTK_HW_FEATURES		(NETIF_F_IP_CSUM | \
 				 NETIF_F_RXCSUM | \
 				 NETIF_F_HW_VLAN_CTAG_TX | \
-				 NETIF_F_HW_VLAN_CTAG_RX | \
 				 NETIF_F_SG | NETIF_F_TSO | \
 				 NETIF_F_TSO6 | \
 				 NETIF_F_IPV6_CSUM |\
-- 
2.38.1



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:46 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:46 +0800
Subject: [PATCH v3 08/19] clk: mediatek: Add MT8188 imgsys clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-9-Garmin.Chang@mediatek.com>

Add MT8188 imgsys clock controllers which provide clock gate
control for image IP blocks.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile         |   2 +-
 drivers/clk/mediatek/clk-mt8188-img.c | 110 ++++++++++++++++++++++++++
 2 files changed, 111 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-img.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index dbd140b81763..be835d5e179d 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -85,7 +85,7 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-mcu.o clk-mt8186-topckgen.o clk-mt
 				   clk-mt8186-cam.o clk-mt8186-mdp.o clk-mt8186-ipe.o
 obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o \
 				   clk-mt8188-peri_ao.o clk-mt8188-infra_ao.o \
-				   clk-mt8188-cam.o clk-mt8188-ccu.o
+				   clk-mt8188-cam.o clk-mt8188-ccu.o clk-mt8188-img.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-img.c b/drivers/clk/mediatek/clk-mt8188-img.c
new file mode 100644
index 000000000000..b6ac0a9a2446
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-img.c
@@ -0,0 +1,110 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs imgsys_cg_regs = {
+	.set_ofs = 0x4,
+	.clr_ofs = 0x8,
+	.sta_ofs = 0x0,
+};
+
+#define GATE_IMGSYS(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &imgsys_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+static const struct mtk_gate imgsys_main_clks[] = {
+	GATE_IMGSYS(CLK_IMGSYS_MAIN_LARB9, "imgsys_main_larb9", "top_img", 0),
+	GATE_IMGSYS(CLK_IMGSYS_MAIN_TRAW0, "imgsys_main_traw0", "top_img", 1),
+	GATE_IMGSYS(CLK_IMGSYS_MAIN_TRAW1, "imgsys_main_traw1", "top_img", 2),
+	GATE_IMGSYS(CLK_IMGSYS_MAIN_VCORE_GALS, "imgsys_main_vcore_gals", "top_img", 3),
+	GATE_IMGSYS(CLK_IMGSYS_MAIN_DIP0, "imgsys_main_dip0", "top_img", 8),
+	GATE_IMGSYS(CLK_IMGSYS_MAIN_WPE0, "imgsys_main_wpe0", "top_img", 9),
+	GATE_IMGSYS(CLK_IMGSYS_MAIN_IPE, "imgsys_main_ipe", "top_img", 10),
+	GATE_IMGSYS(CLK_IMGSYS_MAIN_WPE1, "imgsys_main_wpe1", "top_img", 12),
+	GATE_IMGSYS(CLK_IMGSYS_MAIN_WPE2, "imgsys_main_wpe2", "top_img", 13),
+	GATE_IMGSYS(CLK_IMGSYS_MAIN_GALS, "imgsys_main_gals", "top_img", 31),
+};
+
+static const struct mtk_gate imgsys_wpe1_clks[] = {
+	GATE_IMGSYS(CLK_IMGSYS_WPE1_LARB11, "imgsys_wpe1_larb11", "top_img", 0),
+	GATE_IMGSYS(CLK_IMGSYS_WPE1, "imgsys_wpe1", "top_img", 1),
+};
+
+static const struct mtk_gate imgsys_wpe2_clks[] = {
+	GATE_IMGSYS(CLK_IMGSYS_WPE2_LARB11, "imgsys_wpe2_larb11", "top_img", 0),
+	GATE_IMGSYS(CLK_IMGSYS_WPE2, "imgsys_wpe2", "top_img", 1),
+};
+
+static const struct mtk_gate imgsys_wpe3_clks[] = {
+	GATE_IMGSYS(CLK_IMGSYS_WPE3_LARB11, "imgsys_wpe3_larb11", "top_img", 0),
+	GATE_IMGSYS(CLK_IMGSYS_WPE3, "imgsys_wpe3", "top_img", 1),
+};
+
+static const struct mtk_gate imgsys1_dip_top_clks[] = {
+	GATE_IMGSYS(CLK_IMGSYS1_DIP_TOP_LARB10, "imgsys1_dip_larb10", "top_img", 0),
+	GATE_IMGSYS(CLK_IMGSYS1_DIP_TOP_DIP_TOP, "imgsys1_dip_dip_top", "top_img", 1),
+};
+
+static const struct mtk_gate imgsys1_dip_nr_clks[] = {
+	GATE_IMGSYS(CLK_IMGSYS1_DIP_NR_LARB15, "imgsys1_dip_nr_larb15", "top_img", 0),
+	GATE_IMGSYS(CLK_IMGSYS1_DIP_NR_DIP_NR, "imgsys1_dip_nr_dip_nr", "top_img", 1),
+};
+
+static const struct mtk_clk_desc imgsys_main_desc = {
+	.clks = imgsys_main_clks,
+	.num_clks = ARRAY_SIZE(imgsys_main_clks),
+};
+
+static const struct mtk_clk_desc imgsys_wpe1_desc = {
+	.clks = imgsys_wpe1_clks,
+	.num_clks = ARRAY_SIZE(imgsys_wpe1_clks),
+};
+
+static const struct mtk_clk_desc imgsys_wpe2_desc = {
+	.clks = imgsys_wpe2_clks,
+	.num_clks = ARRAY_SIZE(imgsys_wpe2_clks),
+};
+
+static const struct mtk_clk_desc imgsys_wpe3_desc = {
+	.clks = imgsys_wpe3_clks,
+	.num_clks = ARRAY_SIZE(imgsys_wpe3_clks),
+};
+
+static const struct mtk_clk_desc imgsys1_dip_top_desc = {
+	.clks = imgsys1_dip_top_clks,
+	.num_clks = ARRAY_SIZE(imgsys1_dip_top_clks),
+};
+
+static const struct mtk_clk_desc imgsys1_dip_nr_desc = {
+	.clks = imgsys1_dip_nr_clks,
+	.num_clks = ARRAY_SIZE(imgsys1_dip_nr_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8188_imgsys_main[] = {
+	{ .compatible = "mediatek,mt8188-imgsys", .data = &imgsys_main_desc,},
+	{ .compatible = "mediatek,mt8188-imgsys-wpe1", .data = &imgsys_wpe1_desc },
+	{ .compatible = "mediatek,mt8188-imgsys-wpe2", .data = &imgsys_wpe2_desc },
+	{ .compatible = "mediatek,mt8188-imgsys-wpe3", .data = &imgsys_wpe3_desc },
+	{ .compatible = "mediatek,mt8188-imgsys1-dip-top", .data = &imgsys1_dip_top_desc},
+	{ .compatible = "mediatek,mt8188-imgsys1-dip-nr", .data = &imgsys1_dip_nr_desc},
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8188_imgsys_main_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8188-imgsys_main",
+		.of_match_table = of_match_clk_mt8188_imgsys_main,
+	},
+};
+
+builtin_platform_driver(clk_mt8188_imgsys_main_drv);
+MODULE_LICENSE("GPL");
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:45 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:45 +0800
Subject: [PATCH v3 07/19] clk: mediatek: Add MT8188 ccusys clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-8-Garmin.Chang@mediatek.com>

Add MT8188 ccusys clock controller which provides clock gate
control in Camera Computing Unit.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile         |  2 +-
 drivers/clk/mediatek/clk-mt8188-ccu.c | 48 +++++++++++++++++++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-ccu.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index dc247bf67e8b..dbd140b81763 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -85,7 +85,7 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-mcu.o clk-mt8186-topckgen.o clk-mt
 				   clk-mt8186-cam.o clk-mt8186-mdp.o clk-mt8186-ipe.o
 obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o \
 				   clk-mt8188-peri_ao.o clk-mt8188-infra_ao.o \
-				   clk-mt8188-cam.o
+				   clk-mt8188-cam.o clk-mt8188-ccu.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-ccu.c b/drivers/clk/mediatek/clk-mt8188-ccu.c
new file mode 100644
index 000000000000..b7380060f906
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-ccu.c
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs ccu_cg_regs = {
+	.set_ofs = 0x4,
+	.clr_ofs = 0x8,
+	.sta_ofs = 0x0,
+};
+
+#define GATE_CCU(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &ccu_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+static const struct mtk_gate ccu_clks[] = {
+	GATE_CCU(CLK_CCU_LARB27, "ccu_larb27", "top_ccu", 0),
+	GATE_CCU(CLK_CCU_AHB, "ccu_ahb", "top_ccu", 1),
+	GATE_CCU(CLK_CCU_CCU0, "ccu_ccu0", "top_ccu", 2),
+};
+
+static const struct mtk_clk_desc ccu_desc = {
+	.clks = ccu_clks,
+	.num_clks = ARRAY_SIZE(ccu_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8188_ccu[] = {
+	{ .compatible = "mediatek,mt8188-ccusys", .data = &ccu_desc},
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8188_ccu_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8188-ccu",
+		.of_match_table = of_match_clk_mt8188_ccu,
+	},
+};
+
+builtin_platform_driver(clk_mt8188_ccu_drv);
+MODULE_LICENSE("GPL");
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:55 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:55 +0800
Subject: [PATCH v3 17/19] clk: mediatek: Add MT8188 wpesys clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-18-Garmin.Chang@mediatek.com>

Add MT8188 wpesys clock controllers which provide clock gate
control in Wrapping Engine.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile         |   2 +-
 drivers/clk/mediatek/clk-mt8188-wpe.c | 101 ++++++++++++++++++++++++++
 2 files changed, 102 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-wpe.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index 37663de293bf..ed35546819a9 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -88,7 +88,7 @@ obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o
 				   clk-mt8188-cam.o clk-mt8188-ccu.o clk-mt8188-img.o \
 				   clk-mt8188-ipe.o clk-mt8188-mfg.o clk-mt8188-vdec.o \
 				   clk-mt8188-vdo0.o clk-mt8188-vdo1.o clk-mt8188-venc.o \
-				   clk-mt8188-vpp0.o clk-mt8188-vpp1.o
+				   clk-mt8188-vpp0.o clk-mt8188-vpp1.o clk-mt8188-wpe.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-wpe.c b/drivers/clk/mediatek/clk-mt8188-wpe.c
new file mode 100644
index 000000000000..d104402ae80b
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-wpe.c
@@ -0,0 +1,101 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs wpe_top_cg_regs = {
+	.set_ofs = 0x0,
+	.clr_ofs = 0x0,
+	.sta_ofs = 0x0,
+};
+
+static const struct mtk_gate_regs wpe_vpp0_0_cg_regs = {
+	.set_ofs = 0x58,
+	.clr_ofs = 0x58,
+	.sta_ofs = 0x58,
+};
+
+static const struct mtk_gate_regs wpe_vpp0_1_cg_regs = {
+	.set_ofs = 0x5c,
+	.clr_ofs = 0x5c,
+	.sta_ofs = 0x5c,
+};
+
+#define GATE_WPE_TOP(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &wpe_top_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv)
+
+#define GATE_WPE_VPP0_0(_id, _name, _parent, _shift)		\
+	GATE_MTK(_id, _name, _parent, &wpe_vpp0_0_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv)
+
+#define GATE_WPE_VPP0_1(_id, _name, _parent, _shift)		\
+	GATE_MTK(_id, _name, _parent, &wpe_vpp0_1_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv)
+
+static const struct mtk_gate wpe_top_clks[] = {
+	GATE_WPE_TOP(CLK_WPE_TOP_WPE_VPP0, "wpe_wpe_vpp0", "top_wpe_vpp", 16),
+	GATE_WPE_TOP(CLK_WPE_TOP_SMI_LARB7, "wpe_smi_larb7", "top_wpe_vpp", 18),
+	GATE_WPE_TOP(CLK_WPE_TOP_WPESYS_EVENT_TX, "wpe_wpesys_event_tx", "top_wpe_vpp", 20),
+	GATE_WPE_TOP(CLK_WPE_TOP_SMI_LARB7_PCLK_EN, "wpe_smi_larb7_p_en", "top_wpe_vpp", 24),
+};
+
+static const struct mtk_gate wpe_vpp0_clks[] = {
+	/* WPE_VPP00 */
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_VGEN, "wpe_vpp0_vgen", "top_img", 0),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_EXT, "wpe_vpp0_ext", "top_img", 1),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_VFC, "wpe_vpp0_vfc", "top_img", 2),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_CACH0_TOP, "wpe_vpp0_cach0_top", "top_img", 3),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_CACH0_DMA, "wpe_vpp0_cach0_dma", "top_img", 4),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_CACH1_TOP, "wpe_vpp0_cach1_top", "top_img", 5),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_CACH1_DMA, "wpe_vpp0_cach1_dma", "top_img", 6),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_CACH2_TOP, "wpe_vpp0_cach2_top", "top_img", 7),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_CACH2_DMA, "wpe_vpp0_cach2_dma", "top_img", 8),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_CACH3_TOP, "wpe_vpp0_cach3_top", "top_img", 9),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_CACH3_DMA, "wpe_vpp0_cach3_dma", "top_img", 10),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_PSP, "wpe_vpp0_psp", "top_img", 11),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_PSP2, "wpe_vpp0_psp2", "top_img", 12),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_SYNC, "wpe_vpp0_sync", "top_img", 13),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_C24, "wpe_vpp0_c24", "top_img", 14),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_MDP_CROP, "wpe_vpp0_mdp_crop", "top_img", 15),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_ISP_CROP, "wpe_vpp0_isp_crop", "top_img", 16),
+	GATE_WPE_VPP0_0(CLK_WPE_VPP0_TOP, "wpe_vpp0_top", "top_img", 17),
+	/* WPE_VPP0_1 */
+	GATE_WPE_VPP0_1(CLK_WPE_VPP0_VECI, "wpe_vpp0_veci", "top_img", 0),
+	GATE_WPE_VPP0_1(CLK_WPE_VPP0_VEC2I, "wpe_vpp0_vec2i", "top_img", 1),
+	GATE_WPE_VPP0_1(CLK_WPE_VPP0_VEC3I, "wpe_vpp0_vec3i", "top_img", 2),
+	GATE_WPE_VPP0_1(CLK_WPE_VPP0_WPEO, "wpe_vpp0_wpeo", "top_img", 3),
+	GATE_WPE_VPP0_1(CLK_WPE_VPP0_MSKO, "wpe_vpp0_msko", "top_img", 4),
+};
+
+static const struct mtk_clk_desc wpe_top_desc = {
+	.clks = wpe_top_clks,
+	.num_clks = ARRAY_SIZE(wpe_top_clks),
+};
+
+static const struct mtk_clk_desc wpe_vpp0_desc = {
+	.clks = wpe_vpp0_clks,
+	.num_clks = ARRAY_SIZE(wpe_vpp0_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8188_wpe[] = {
+	{ .compatible = "mediatek,mt8188-wpesys", .data = &wpe_top_desc },
+	{ .compatible = "mediatek,mt8188-wpesys-vpp0", .data = &wpe_vpp0_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8188_wpe_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8188-wpe",
+		.of_match_table = of_match_clk_mt8188_wpe,
+	},
+};
+
+builtin_platform_driver(clk_mt8188_wpe_drv);
+MODULE_LICENSE("GPL");
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:50 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:50 +0800
Subject: [PATCH v3 12/19] clk: mediatek: Add MT8188 vdosys0 clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-13-Garmin.Chang@mediatek.com>

Add MT8188 vdosys0 clock controller which provides clock gate
control in video system. This is integrated with mtk-mmsys
driver which will populate device by platform_device_register_data
to start vdosys clock driver.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile          |   3 +-
 drivers/clk/mediatek/clk-mt8188-vdo0.c | 134 +++++++++++++++++++++++++
 2 files changed, 136 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-vdo0.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index 7d09e9fc6538..df78c0777fef 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -86,7 +86,8 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-mcu.o clk-mt8186-topckgen.o clk-mt
 obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o \
 				   clk-mt8188-peri_ao.o clk-mt8188-infra_ao.o \
 				   clk-mt8188-cam.o clk-mt8188-ccu.o clk-mt8188-img.o \
-				   clk-mt8188-ipe.o clk-mt8188-mfg.o clk-mt8188-vdec.o
+				   clk-mt8188-ipe.o clk-mt8188-mfg.o clk-mt8188-vdec.o \
+				   clk-mt8188-vdo0.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-vdo0.c b/drivers/clk/mediatek/clk-mt8188-vdo0.c
new file mode 100644
index 000000000000..30dd64374ace
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-vdo0.c
@@ -0,0 +1,134 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs vdo0_0_cg_regs = {
+	.set_ofs = 0x104,
+	.clr_ofs = 0x108,
+	.sta_ofs = 0x100,
+};
+
+static const struct mtk_gate_regs vdo0_1_cg_regs = {
+	.set_ofs = 0x114,
+	.clr_ofs = 0x118,
+	.sta_ofs = 0x110,
+};
+
+static const struct mtk_gate_regs vdo0_2_cg_regs = {
+	.set_ofs = 0x124,
+	.clr_ofs = 0x128,
+	.sta_ofs = 0x120,
+};
+
+#define GATE_VDO0_0(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vdo0_0_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+#define GATE_VDO0_1(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vdo0_1_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+#define GATE_VDO0_2(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vdo0_2_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+#define GATE_VDO0_2_FLAGS(_id, _name, _parent, _shift, _flags)		\
+	GATE_MTK_FLAGS(_id, _name, _parent, &vdo0_2_cg_regs, _shift,	\
+	&mtk_clk_gate_ops_setclr, _flags)
+
+static const struct mtk_gate vdo0_clks[] = {
+	/* VDO0_0 */
+	GATE_VDO0_0(CLK_VDO0_DISP_OVL0, "vdo0_disp_ovl0", "top_vpp", 0),
+	GATE_VDO0_0(CLK_VDO0_FAKE_ENG0, "vdo0_fake_eng0", "top_vpp", 2),
+	GATE_VDO0_0(CLK_VDO0_DISP_CCORR0, "vdo0_disp_ccorr0", "top_vpp", 4),
+	GATE_VDO0_0(CLK_VDO0_DISP_MUTEX0, "vdo0_disp_mutex0", "top_vpp", 6),
+	GATE_VDO0_0(CLK_VDO0_DISP_GAMMA0, "vdo0_disp_gamma0", "top_vpp", 8),
+	GATE_VDO0_0(CLK_VDO0_DISP_DITHER0, "vdo0_disp_dither0", "top_vpp", 10),
+	GATE_VDO0_0(CLK_VDO0_DISP_WDMA0, "vdo0_disp_wdma0", "top_vpp", 17),
+	GATE_VDO0_0(CLK_VDO0_DISP_RDMA0, "vdo0_disp_rdma0", "top_vpp", 19),
+	GATE_VDO0_0(CLK_VDO0_DSI0, "vdo0_dsi0", "top_vpp", 21),
+	GATE_VDO0_0(CLK_VDO0_DSI1, "vdo0_dsi1", "top_vpp", 22),
+	GATE_VDO0_0(CLK_VDO0_DSC_WRAP0, "vdo0_dsc_wrap0", "top_vpp", 23),
+	GATE_VDO0_0(CLK_VDO0_VPP_MERGE0, "vdo0_vpp_merge0", "top_vpp", 24),
+	GATE_VDO0_0(CLK_VDO0_DP_INTF0, "vdo0_dp_intf0", "top_vpp", 25),
+	GATE_VDO0_0(CLK_VDO0_DISP_AAL0, "vdo0_disp_aal0", "top_vpp", 26),
+	GATE_VDO0_0(CLK_VDO0_INLINEROT0, "vdo0_inlinerot0", "top_vpp", 27),
+	GATE_VDO0_0(CLK_VDO0_APB_BUS, "vdo0_apb_bus", "top_vpp", 28),
+	GATE_VDO0_0(CLK_VDO0_DISP_COLOR0, "vdo0_disp_color0", "top_vpp", 29),
+	GATE_VDO0_0(CLK_VDO0_MDP_WROT0, "vdo0_mdp_wrot0", "top_vpp", 30),
+	GATE_VDO0_0(CLK_VDO0_DISP_RSZ0, "vdo0_disp_rsz0", "top_vpp", 31),
+	/* VDO0_1 */
+	GATE_VDO0_1(CLK_VDO0_DISP_POSTMASK0, "vdo0_disp_postmask0", "top_vpp", 0),
+	GATE_VDO0_1(CLK_VDO0_FAKE_ENG1, "vdo0_fake_eng1", "top_vpp", 1),
+	GATE_VDO0_1(CLK_VDO0_DL_ASYNC2, "vdo0_dl_async2", "top_vpp", 5),
+	GATE_VDO0_1(CLK_VDO0_DL_RELAY3, "vdo0_dl_relay3", "top_vpp", 6),
+	GATE_VDO0_1(CLK_VDO0_DL_RELAY4, "vdo0_dl_relay4", "top_vpp", 7),
+	GATE_VDO0_1(CLK_VDO0_SMI_GALS, "vdo0_smi_gals", "top_vpp", 10),
+	GATE_VDO0_1(CLK_VDO0_SMI_COMMON, "vdo0_smi_common", "top_vpp", 11),
+	GATE_VDO0_1(CLK_VDO0_SMI_EMI, "vdo0_smi_emi", "top_vpp", 12),
+	GATE_VDO0_1(CLK_VDO0_SMI_IOMMU, "vdo0_smi_iommu", "top_vpp", 13),
+	GATE_VDO0_1(CLK_VDO0_SMI_LARB, "vdo0_smi_larb", "top_vpp", 14),
+	GATE_VDO0_1(CLK_VDO0_SMI_RSI, "vdo0_smi_rsi", "top_vpp", 15),
+	/* VDO0_2 */
+	GATE_VDO0_2(CLK_VDO0_DSI0_DSI, "vdo0_dsi0_dsi", "top_dsi_occ", 0),
+	GATE_VDO0_2(CLK_VDO0_DSI1_DSI, "vdo0_dsi1_dsi", "top_dsi_occ", 8),
+	GATE_VDO0_2_FLAGS(CLK_VDO0_DP_INTF0_DP_INTF, "vdo0_dp_intf0_dp_intf",
+		"top_edp", 16, CLK_SET_RATE_PARENT),
+};
+
+static int clk_mt8188_vdo0_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct device_node *node = dev->parent->of_node;
+	struct clk_hw_onecell_data *clk_data;
+	int r;
+
+	clk_data = mtk_alloc_clk_data(CLK_VDO0_NR_CLK);
+	if (!clk_data)
+		return -ENOMEM;
+
+	r = mtk_clk_register_gates(node, vdo0_clks, ARRAY_SIZE(vdo0_clks), clk_data);
+	if (r)
+		goto free_vdo0_data;
+
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	if (r)
+		goto unregister_gates;
+
+	platform_set_drvdata(pdev, clk_data);
+
+	return r;
+
+unregister_gates:
+	mtk_clk_unregister_gates(vdo0_clks, ARRAY_SIZE(vdo0_clks), clk_data);
+free_vdo0_data:
+	mtk_free_clk_data(clk_data);
+	return r;
+}
+
+static int clk_mt8188_vdo0_remove(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct device_node *node = dev->parent->of_node;
+	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
+
+	of_clk_del_provider(node);
+	mtk_clk_unregister_gates(vdo0_clks, ARRAY_SIZE(vdo0_clks), clk_data);
+	mtk_free_clk_data(clk_data);
+
+	return 0;
+}
+
+static struct platform_driver clk_mt8188_vdo0_drv = {
+	.probe = clk_mt8188_vdo0_probe,
+	.remove = clk_mt8188_vdo0_remove,
+	.driver = {
+		.name = "clk-mt8188-vdo0",
+	},
+};
+builtin_platform_driver(clk_mt8188_vdo0_drv);
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:51 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:51 +0800
Subject: [PATCH v3 13/19] clk: mediatek: Add MT8188 vdosys1 clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-14-Garmin.Chang@mediatek.com>

Add MT8188 vdosys1 clock controller which provides clock gate
control in video system. This is integrated with mtk-mmsys
driver which will populate device by platform_device_register_data
to start vdosys clock driver.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile          |   2 +-
 drivers/clk/mediatek/clk-mt8188-vdo1.c | 181 +++++++++++++++++++++++++
 2 files changed, 182 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-vdo1.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index df78c0777fef..c654f4288e09 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -87,7 +87,7 @@ obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o
 				   clk-mt8188-peri_ao.o clk-mt8188-infra_ao.o \
 				   clk-mt8188-cam.o clk-mt8188-ccu.o clk-mt8188-img.o \
 				   clk-mt8188-ipe.o clk-mt8188-mfg.o clk-mt8188-vdec.o \
-				   clk-mt8188-vdo0.o
+				   clk-mt8188-vdo0.o clk-mt8188-vdo1.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-vdo1.c b/drivers/clk/mediatek/clk-mt8188-vdo1.c
new file mode 100644
index 000000000000..be658c6a95bf
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-vdo1.c
@@ -0,0 +1,181 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs vdo1_0_cg_regs = {
+	.set_ofs = 0x104,
+	.clr_ofs = 0x108,
+	.sta_ofs = 0x100,
+};
+
+static const struct mtk_gate_regs vdo1_1_cg_regs = {
+	.set_ofs = 0x114,
+	.clr_ofs = 0x118,
+	.sta_ofs = 0x110,
+};
+
+static const struct mtk_gate_regs vdo1_2_cg_regs = {
+	.set_ofs = 0x124,
+	.clr_ofs = 0x128,
+	.sta_ofs = 0x120,
+};
+
+static const struct mtk_gate_regs vdo1_3_cg_regs = {
+	.set_ofs = 0x134,
+	.clr_ofs = 0x138,
+	.sta_ofs = 0x130,
+};
+
+static const struct mtk_gate_regs vdo1_4_cg_regs = {
+	.set_ofs = 0x144,
+	.clr_ofs = 0x148,
+	.sta_ofs = 0x140,
+};
+
+#define GATE_VDO1_0(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vdo1_0_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+#define GATE_VDO1_1(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vdo1_1_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+#define GATE_VDO1_2(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vdo1_2_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+#define GATE_VDO1_3(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vdo1_3_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+#define GATE_VDO1_3_FLAGS(_id, _name, _parent, _shift, _flags)		\
+	GATE_MTK_FLAGS(_id, _name, _parent, &vdo1_3_cg_regs, _shift,	\
+		       &mtk_clk_gate_ops_setclr, _flags)
+
+#define GATE_VDO1_4(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vdo1_4_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+static const struct mtk_gate vdo1_clks[] = {
+	/* VDO1_0 */
+	GATE_VDO1_0(CLK_VDO1_SMI_LARB2, "vdo1_smi_larb2", "top_vpp", 0),
+	GATE_VDO1_0(CLK_VDO1_SMI_LARB3, "vdo1_smi_larb3", "top_vpp", 1),
+	GATE_VDO1_0(CLK_VDO1_GALS, "vdo1_gals", "top_vpp", 2),
+	GATE_VDO1_0(CLK_VDO1_FAKE_ENG0, "vdo1_fake_eng0", "top_vpp", 3),
+	GATE_VDO1_0(CLK_VDO1_FAKE_ENG1, "vdo1_fake_eng1", "top_vpp", 4),
+	GATE_VDO1_0(CLK_VDO1_MDP_RDMA0, "vdo1_mdp_rdma0", "top_vpp", 5),
+	GATE_VDO1_0(CLK_VDO1_MDP_RDMA1, "vdo1_mdp_rdma1", "top_vpp", 6),
+	GATE_VDO1_0(CLK_VDO1_MDP_RDMA2, "vdo1_mdp_rdma2", "top_vpp", 7),
+	GATE_VDO1_0(CLK_VDO1_MDP_RDMA3, "vdo1_mdp_rdma3", "top_vpp", 8),
+	GATE_VDO1_0(CLK_VDO1_VPP_MERGE0, "vdo1_vpp_merge0", "top_vpp", 9),
+	GATE_VDO1_0(CLK_VDO1_VPP_MERGE1, "vdo1_vpp_merge1", "top_vpp", 10),
+	GATE_VDO1_0(CLK_VDO1_VPP_MERGE2, "vdo1_vpp_merge2", "top_vpp", 11),
+	/* VDO1_1 */
+	GATE_VDO1_1(CLK_VDO1_VPP_MERGE3, "vdo1_vpp_merge3", "top_vpp", 0),
+	GATE_VDO1_1(CLK_VDO1_VPP_MERGE4, "vdo1_vpp_merge4", "top_vpp", 1),
+	GATE_VDO1_1(CLK_VDO1_VPP2_TO_VDO1_DL_ASYNC, "vdo1_vpp2_to_vdo1_dl_async", "top_vpp", 2),
+	GATE_VDO1_1(CLK_VDO1_VPP3_TO_VDO1_DL_ASYNC, "vdo1_vpp3_to_vdo1_dl_async", "top_vpp", 3),
+	GATE_VDO1_1(CLK_VDO1_DISP_MUTEX, "vdo1_disp_mutex", "top_vpp", 4),
+	GATE_VDO1_1(CLK_VDO1_MDP_RDMA4, "vdo1_mdp_rdma4", "top_vpp", 5),
+	GATE_VDO1_1(CLK_VDO1_MDP_RDMA5, "vdo1_mdp_rdma5", "top_vpp", 6),
+	GATE_VDO1_1(CLK_VDO1_MDP_RDMA6, "vdo1_mdp_rdma6", "top_vpp", 7),
+	GATE_VDO1_1(CLK_VDO1_MDP_RDMA7, "vdo1_mdp_rdma7", "top_vpp", 8),
+	GATE_VDO1_1(CLK_VDO1_DP_INTF0_MMCK, "vdo1_dp_intf0_mmck", "top_vpp", 9),
+	GATE_VDO1_1(CLK_VDO1_DPI0_MM, "vdo1_dpi0_mm_ck", "top_vpp", 10),
+	GATE_VDO1_1(CLK_VDO1_DPI1_MM, "vdo1_dpi1_mm_ck", "top_vpp", 11),
+	GATE_VDO1_1(CLK_VDO1_MERGE0_DL_ASYNC, "vdo1_merge0_dl_async", "top_vpp", 13),
+	GATE_VDO1_1(CLK_VDO1_MERGE1_DL_ASYNC, "vdo1_merge1_dl_async", "top_vpp", 14),
+	GATE_VDO1_1(CLK_VDO1_MERGE2_DL_ASYNC, "vdo1_merge2_dl_async", "top_vpp", 15),
+	GATE_VDO1_1(CLK_VDO1_MERGE3_DL_ASYNC, "vdo1_merge3_dl_async", "top_vpp", 16),
+	GATE_VDO1_1(CLK_VDO1_MERGE4_DL_ASYNC, "vdo1_merge4_dl_async", "top_vpp", 17),
+	GATE_VDO1_1(CLK_VDO1_DSC_VDO1_DL_ASYNC, "vdo1_dsc_vdo1_dl_async", "top_vpp", 18),
+	GATE_VDO1_1(CLK_VDO1_MERGE_VDO1_DL_ASYNC, "vdo1_merge_vdo1_dl_async", "top_vpp", 19),
+	GATE_VDO1_1(CLK_VDO1_PADDING0, "vdo1_padding0", "top_vpp", 20),
+	GATE_VDO1_1(CLK_VDO1_PADDING1, "vdo1_padding1", "top_vpp", 21),
+	GATE_VDO1_1(CLK_VDO1_PADDING2, "vdo1_padding2", "top_vpp", 22),
+	GATE_VDO1_1(CLK_VDO1_PADDING3, "vdo1_padding3", "top_vpp", 23),
+	GATE_VDO1_1(CLK_VDO1_PADDING4, "vdo1_padding4", "top_vpp", 24),
+	GATE_VDO1_1(CLK_VDO1_PADDING5, "vdo1_padding5", "top_vpp", 25),
+	GATE_VDO1_1(CLK_VDO1_PADDING6, "vdo1_padding6", "top_vpp", 26),
+	GATE_VDO1_1(CLK_VDO1_PADDING7, "vdo1_padding7", "top_vpp", 27),
+	GATE_VDO1_1(CLK_VDO1_DISP_RSZ0, "vdo1_disp_rsz0", "top_vpp", 28),
+	GATE_VDO1_1(CLK_VDO1_DISP_RSZ1, "vdo1_disp_rsz1", "top_vpp", 29),
+	GATE_VDO1_1(CLK_VDO1_DISP_RSZ2, "vdo1_disp_rsz2", "top_vpp", 30),
+	GATE_VDO1_1(CLK_VDO1_DISP_RSZ3, "vdo1_disp_rsz3", "top_vpp", 31),
+	/* VDO1_2 */
+	GATE_VDO1_2(CLK_VDO1_HDR_VDO_FE0, "vdo1_hdr_vdo_fe0", "top_vpp", 0),
+	GATE_VDO1_2(CLK_VDO1_HDR_GFX_FE0, "vdo1_hdr_gfx_fe0", "top_vpp", 1),
+	GATE_VDO1_2(CLK_VDO1_HDR_VDO_BE, "vdo1_hdr_vdo_be", "top_vpp", 2),
+	GATE_VDO1_2(CLK_VDO1_HDR_VDO_FE1, "vdo1_hdr_vdo_fe1", "top_vpp", 16),
+	GATE_VDO1_2(CLK_VDO1_HDR_GFX_FE1, "vdo1_hdr_gfx_fe1", "top_vpp", 17),
+	GATE_VDO1_2(CLK_VDO1_DISP_MIXER, "vdo1_disp_mixer", "top_vpp", 18),
+	GATE_VDO1_2(CLK_VDO1_HDR_VDO_FE0_DL_ASYNC, "vdo1_hdr_vdo_fe0_dl_async", "top_vpp", 19),
+	GATE_VDO1_2(CLK_VDO1_HDR_VDO_FE1_DL_ASYNC, "vdo1_hdr_vdo_fe1_dl_async", "top_vpp", 20),
+	GATE_VDO1_2(CLK_VDO1_HDR_GFX_FE0_DL_ASYNC, "vdo1_hdr_gfx_fe0_dl_async", "top_vpp", 21),
+	GATE_VDO1_2(CLK_VDO1_HDR_GFX_FE1_DL_ASYNC, "vdo1_hdr_gfx_fe1_dl_async", "top_vpp", 22),
+	GATE_VDO1_2(CLK_VDO1_HDR_VDO_BE_DL_ASYNC, "vdo1_hdr_vdo_be_dl_async", "top_vpp", 23),
+	/* VDO1_3 */
+	GATE_VDO1_3(CLK_VDO1_DPI0, "vdo1_dpi0_ck", "top_vpp", 0),
+	GATE_VDO1_3(CLK_VDO1_DISP_MONITOR_DPI0, "vdo1_disp_monitor_dpi0_ck", "top_vpp", 1),
+	GATE_VDO1_3(CLK_VDO1_DPI1, "vdo1_dpi1_ck", "top_vpp", 8),
+	GATE_VDO1_3(CLK_VDO1_DISP_MONITOR_DPI1, "vdo1_disp_monitor_dpi1_ck", "top_vpp", 9),
+	GATE_VDO1_3_FLAGS(CLK_VDO1_DPINTF, "vdo1_dpintf", "top_dp", 16, CLK_SET_RATE_PARENT),
+	GATE_VDO1_3(CLK_VDO1_DISP_MONITOR_DPINTF, "vdo1_disp_monitor_dpintf_ck", "top_vpp", 17),
+	/* VDO1_4 */
+	GATE_VDO1_4(CLK_VDO1_26M_SLOW, "vdo1_26m_slow_ck", "clk26m", 8),
+};
+
+static int clk_mt8188_vdo1_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct device_node *node = dev->parent->of_node;
+	struct clk_hw_onecell_data *clk_data;
+	int r;
+
+	clk_data = mtk_alloc_clk_data(CLK_VDO1_NR_CLK);
+	if (!clk_data)
+		return -ENOMEM;
+
+	r = mtk_clk_register_gates(node, vdo1_clks, ARRAY_SIZE(vdo1_clks), clk_data);
+	if (r)
+		goto free_vdo1_data;
+
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	if (r)
+		goto unregister_gates;
+
+	platform_set_drvdata(pdev, clk_data);
+
+	return r;
+
+unregister_gates:
+	mtk_clk_unregister_gates(vdo1_clks, ARRAY_SIZE(vdo1_clks), clk_data);
+free_vdo1_data:
+	mtk_free_clk_data(clk_data);
+	return r;
+}
+
+static int clk_mt8188_vdo1_remove(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct device_node *node = dev->parent->of_node;
+	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
+
+	of_clk_del_provider(node);
+	mtk_clk_unregister_gates(vdo1_clks, ARRAY_SIZE(vdo1_clks), clk_data);
+	mtk_free_clk_data(clk_data);
+
+	return 0;
+}
+
+static struct platform_driver clk_mt8188_vdo1_drv = {
+	.probe = clk_mt8188_vdo1_probe,
+	.remove = clk_mt8188_vdo1_remove,
+	.driver = {
+		.name = "clk-mt8188-vdo1",
+	},
+};
+builtin_platform_driver(clk_mt8188_vdo1_drv);
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:47 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:47 +0800
Subject: [PATCH v3 09/19] clk: mediatek: Add MT8188 ipesys clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-10-Garmin.Chang@mediatek.com>

Add MT8188 ipesys clock controller which provides clock gate
control for Image Process Engine.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile         |  3 +-
 drivers/clk/mediatek/clk-mt8188-ipe.c | 50 +++++++++++++++++++++++++++
 2 files changed, 52 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-ipe.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index be835d5e179d..4a599122f761 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -85,7 +85,8 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-mcu.o clk-mt8186-topckgen.o clk-mt
 				   clk-mt8186-cam.o clk-mt8186-mdp.o clk-mt8186-ipe.o
 obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o \
 				   clk-mt8188-peri_ao.o clk-mt8188-infra_ao.o \
-				   clk-mt8188-cam.o clk-mt8188-ccu.o clk-mt8188-img.o
+				   clk-mt8188-cam.o clk-mt8188-ccu.o clk-mt8188-img.o \
+				   clk-mt8188-ipe.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-ipe.c b/drivers/clk/mediatek/clk-mt8188-ipe.c
new file mode 100644
index 000000000000..c18afe0d61b3
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-ipe.c
@@ -0,0 +1,50 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs ipe_cg_regs = {
+	.set_ofs = 0x4,
+	.clr_ofs = 0x8,
+	.sta_ofs = 0x0,
+};
+
+#define GATE_IPE(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &ipe_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+static const struct mtk_gate ipe_clks[] = {
+	GATE_IPE(CLK_IPE_DPE, "ipe_dpe", "top_ipe", 0),
+	GATE_IPE(CLK_IPE_FDVT, "ipe_fdvt", "top_ipe", 1),
+	GATE_IPE(CLK_IPE_ME, "ipe_me", "top_ipe", 2),
+	GATE_IPE(CLK_IPESYS_TOP, "ipesys_top", "top_ipe", 3),
+	GATE_IPE(CLK_IPE_SMI_LARB12, "ipe_smi_larb12", "top_ipe", 4),
+};
+
+static const struct mtk_clk_desc ipe_desc = {
+	.clks = ipe_clks,
+	.num_clks = ARRAY_SIZE(ipe_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8188_ipe[] = {
+	{ .compatible = "mediatek,mt8188-ipesys", .data = &ipe_desc, },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8188_ipe_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8188-ipe",
+		.of_match_table = of_match_clk_mt8188_ipe,
+	},
+};
+
+builtin_platform_driver(clk_mt8188_ipe_drv);
+MODULE_LICENSE("GPL");
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:49 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:49 +0800
Subject: [PATCH v3 11/19] clk: mediatek: Add MT8188 vdecsys clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-12-Garmin.Chang@mediatek.com>

Add MT8188 vdec clock controllers which provide clock gate
control for video decoder.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile          |  2 +-
 drivers/clk/mediatek/clk-mt8188-vdec.c | 90 ++++++++++++++++++++++++++
 2 files changed, 91 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-vdec.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index a0fd87a882b5..7d09e9fc6538 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -86,7 +86,7 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-mcu.o clk-mt8186-topckgen.o clk-mt
 obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o \
 				   clk-mt8188-peri_ao.o clk-mt8188-infra_ao.o \
 				   clk-mt8188-cam.o clk-mt8188-ccu.o clk-mt8188-img.o \
-				   clk-mt8188-ipe.o clk-mt8188-mfg.o
+				   clk-mt8188-ipe.o clk-mt8188-mfg.o clk-mt8188-vdec.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-vdec.c b/drivers/clk/mediatek/clk-mt8188-vdec.c
new file mode 100644
index 000000000000..e05a27957136
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-vdec.c
@@ -0,0 +1,90 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs vde0_cg_regs = {
+	.set_ofs = 0x0,
+	.clr_ofs = 0x4,
+	.sta_ofs = 0x0,
+};
+
+static const struct mtk_gate_regs vde1_cg_regs = {
+	.set_ofs = 0x200,
+	.clr_ofs = 0x204,
+	.sta_ofs = 0x200,
+};
+
+static const struct mtk_gate_regs vde2_cg_regs = {
+	.set_ofs = 0x8,
+	.clr_ofs = 0xc,
+	.sta_ofs = 0x8,
+};
+
+#define GATE_VDE0(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vde0_cg_regs, _shift, &mtk_clk_gate_ops_setclr_inv)
+
+#define GATE_VDE1(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vde1_cg_regs, _shift, &mtk_clk_gate_ops_setclr_inv)
+
+#define GATE_VDE2(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vde2_cg_regs, _shift, &mtk_clk_gate_ops_setclr_inv)
+
+static const struct mtk_gate vde1_clks[] = {
+	/* VDE1_0 */
+	GATE_VDE0(CLK_VDE1_SOC_VDEC, "vde1_soc_vdec", "top_vdec", 0),
+	GATE_VDE0(CLK_VDE1_SOC_VDEC_ACTIVE, "vde1_soc_vdec_active", "top_vdec", 4),
+	GATE_VDE0(CLK_VDE1_SOC_VDEC_ENG, "vde1_soc_vdec_eng", "top_vdec", 8),
+	/* VDE1_1 */
+	GATE_VDE1(CLK_VDE1_SOC_LAT, "vde1_soc_lat", "top_vdec", 0),
+	GATE_VDE1(CLK_VDE1_SOC_LAT_ACTIVE, "vde1_soc_lat_active", "top_vdec", 4),
+	GATE_VDE1(CLK_VDE1_SOC_LAT_ENG, "vde1_soc_lat_eng", "top_vdec", 8),
+	/* VDE12 */
+	GATE_VDE2(CLK_VDE1_SOC_LARB1, "vde1_soc_larb1", "top_vdec", 0),
+};
+
+static const struct mtk_gate vde2_clks[] = {
+	/* VDE2_0 */
+	GATE_VDE0(CLK_VDE2_VDEC, "vde2_vdec", "top_vdec", 0),
+	GATE_VDE0(CLK_VDE2_VDEC_ACTIVE, "vde2_vdec_active", "top_vdec", 4),
+	GATE_VDE0(CLK_VDE2_VDEC_ENG, "vde2_vdec_eng", "top_vdec", 8),
+	/* VDE2_1 */
+	GATE_VDE1(CLK_VDE2_LAT, "vde2_lat", "top_vdec", 0),
+	/* VDE2_2 */
+	GATE_VDE2(CLK_VDE2_LARB1, "vde2_larb1", "top_vdec", 0),
+};
+
+static const struct mtk_clk_desc vde1_desc = {
+	.clks = vde1_clks,
+	.num_clks = ARRAY_SIZE(vde1_clks),
+};
+
+static const struct mtk_clk_desc vde2_desc = {
+	.clks = vde2_clks,
+	.num_clks = ARRAY_SIZE(vde2_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8188_vde[] = {
+	{ .compatible = "mediatek,mt8188-vdecsys-soc", .data = &vde1_desc },
+	{ .compatible = "mediatek,mt8188-vdecsys", .data = &vde2_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8188_vde_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8188-vde",
+		.of_match_table = of_match_clk_mt8188_vde,
+	},
+};
+
+builtin_platform_driver(clk_mt8188_vde_drv);
+MODULE_LICENSE("GPL");
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:42 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:42 +0800
Subject: [PATCH v3 04/19] clk: mediatek: Add MT8188 peripheral clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-5-Garmin.Chang@mediatek.com>

Add MT8188 peripheral clock controller which provides clock
gate control for ethernet/flashif/pcie/ssusb.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile             |  3 +-
 drivers/clk/mediatek/clk-mt8188-peri_ao.c | 56 +++++++++++++++++++++++
 2 files changed, 58 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-peri_ao.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index 89b1b331cad0..b8a3042f4809 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -83,7 +83,8 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-mcu.o clk-mt8186-topckgen.o clk-mt
 				   clk-mt8186-mfg.o clk-mt8186-mm.o clk-mt8186-wpe.o \
 				   clk-mt8186-img.o clk-mt8186-vdec.o clk-mt8186-venc.o \
 				   clk-mt8186-cam.o clk-mt8186-mdp.o clk-mt8186-ipe.o
-obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o
+obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o \
+				   clk-mt8188-peri_ao.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-peri_ao.c b/drivers/clk/mediatek/clk-mt8188-peri_ao.c
new file mode 100644
index 000000000000..683010453a10
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-peri_ao.c
@@ -0,0 +1,56 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs peri_ao_cg_regs = {
+	.set_ofs = 0x10,
+	.clr_ofs = 0x14,
+	.sta_ofs = 0x18,
+};
+
+#define GATE_PERI_AO(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &peri_ao_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+static const struct mtk_gate peri_ao_clks[] = {
+	GATE_PERI_AO(CLK_PERI_AO_ETHERNET, "peri_ao_ethernet", "top_axi", 0),
+	GATE_PERI_AO(CLK_PERI_AO_ETHERNET_BUS, "peri_ao_ethernet_bus", "top_axi", 1),
+	GATE_PERI_AO(CLK_PERI_AO_FLASHIF_BUS, "peri_ao_flashif_bus", "top_axi", 3),
+	GATE_PERI_AO(CLK_PERI_AO_FLASHIF_26M, "peri_ao_flashif_26m", "clk26m", 4),
+	GATE_PERI_AO(CLK_PERI_AO_FLASHIFLASHCK, "peri_ao_flashiflashck", "top_spinor", 5),
+	GATE_PERI_AO(CLK_PERI_AO_SSUSB_2P_BUS, "peri_ao_ssusb_2p_bus", "top_usb_top_2p", 9),
+	GATE_PERI_AO(CLK_PERI_AO_SSUSB_2P_XHCI, "peri_ao_ssusb_2p_xhci", "top_ssusb_xhci_2p", 10),
+	GATE_PERI_AO(CLK_PERI_AO_SSUSB_3P_BUS, "peri_ao_ssusb_3p_bus", "top_usb_top_3p", 11),
+	GATE_PERI_AO(CLK_PERI_AO_SSUSB_3P_XHCI, "peri_ao_ssusb_3p_xhci", "top_ssusb_xhci_3p", 12),
+	GATE_PERI_AO(CLK_PERI_AO_SSUSB_BUS, "peri_ao_ssusb_bus", "top_usb_top", 13),
+	GATE_PERI_AO(CLK_PERI_AO_SSUSB_XHCI, "peri_ao_ssusb_xhci", "top_ssusb_xhci", 14),
+	GATE_PERI_AO(CLK_PERI_AO_ETHERNET_MAC, "peri_ao_ethernet_mac_clk", "top_snps_eth_250m", 16),
+	GATE_PERI_AO(CLK_PERI_AO_PCIE_P0_FMEM, "peri_ao_pcie_p0_fmem", "hd_466m_fmem_ck", 24),
+};
+
+static const struct mtk_clk_desc peri_ao_desc = {
+	.clks = peri_ao_clks,
+	.num_clks = ARRAY_SIZE(peri_ao_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8188_peri_ao[] = {
+	{ .compatible = "mediatek,mt8188-pericfg-ao", .data = &peri_ao_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8188_peri_ao_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8188-peri_ao",
+		.of_match_table = of_match_clk_mt8188_peri_ao,
+	},
+};
+builtin_platform_driver(clk_mt8188_peri_ao_drv);
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:54 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:54 +0800
Subject: [PATCH v3 16/19] clk: mediatek: Add MT8188 vppsys1 clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-17-Garmin.Chang@mediatek.com>

Add MT8188 vppsys1 clock controller which provides clock gate
controller for Video Processor Pipe.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile          |   2 +-
 drivers/clk/mediatek/clk-mt8188-vpp1.c | 138 +++++++++++++++++++++++++
 2 files changed, 139 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-vpp1.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index 48deecc6b520..37663de293bf 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -88,7 +88,7 @@ obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o
 				   clk-mt8188-cam.o clk-mt8188-ccu.o clk-mt8188-img.o \
 				   clk-mt8188-ipe.o clk-mt8188-mfg.o clk-mt8188-vdec.o \
 				   clk-mt8188-vdo0.o clk-mt8188-vdo1.o clk-mt8188-venc.o \
-				   clk-mt8188-vpp0.o
+				   clk-mt8188-vpp0.o clk-mt8188-vpp1.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-vpp1.c b/drivers/clk/mediatek/clk-mt8188-vpp1.c
new file mode 100644
index 000000000000..2bff3a52c93f
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-vpp1.c
@@ -0,0 +1,138 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs vpp1_0_cg_regs = {
+	.set_ofs = 0x104,
+	.clr_ofs = 0x108,
+	.sta_ofs = 0x100,
+};
+
+static const struct mtk_gate_regs vpp1_1_cg_regs = {
+	.set_ofs = 0x114,
+	.clr_ofs = 0x118,
+	.sta_ofs = 0x110,
+};
+
+#define GATE_VPP1_0(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vpp1_0_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+#define GATE_VPP1_1(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vpp1_1_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+static const struct mtk_gate vpp1_clks[] = {
+	/* VPP1_0 */
+	GATE_VPP1_0(CLK_VPP1_SVPP1_MDP_OVL, "vpp1_svpp1_mdp_ovl", "top_vpp", 0),
+	GATE_VPP1_0(CLK_VPP1_SVPP1_MDP_TCC, "vpp1_svpp1_mdp_tcc", "top_vpp", 1),
+	GATE_VPP1_0(CLK_VPP1_SVPP1_MDP_WROT, "vpp1_svpp1_mdp_wrot", "top_vpp", 2),
+	GATE_VPP1_0(CLK_VPP1_SVPP1_VPP_PAD, "vpp1_svpp1_vpp_pad", "top_vpp", 3),
+	GATE_VPP1_0(CLK_VPP1_SVPP2_MDP_WROT, "vpp1_svpp2_mdp_wrot", "top_vpp", 4),
+	GATE_VPP1_0(CLK_VPP1_SVPP2_VPP_PAD, "vpp1_svpp2_vpp_pad", "top_vpp", 5),
+	GATE_VPP1_0(CLK_VPP1_SVPP3_MDP_WROT, "vpp1_svpp3_mdp_wrot", "top_vpp", 6),
+	GATE_VPP1_0(CLK_VPP1_SVPP3_VPP_PAD, "vpp1_svpp3_vpp_pad", "top_vpp", 7),
+	GATE_VPP1_0(CLK_VPP1_SVPP1_MDP_RDMA, "vpp1_svpp1_mdp_rdma", "top_vpp", 8),
+	GATE_VPP1_0(CLK_VPP1_SVPP1_MDP_FG, "vpp1_svpp1_mdp_fg", "top_vpp", 9),
+	GATE_VPP1_0(CLK_VPP1_SVPP2_MDP_RDMA, "vpp1_svpp2_mdp_rdma", "top_vpp", 10),
+	GATE_VPP1_0(CLK_VPP1_SVPP2_MDP_FG, "vpp1_svpp2_mdp_fg", "top_vpp", 11),
+	GATE_VPP1_0(CLK_VPP1_SVPP3_MDP_RDMA, "vpp1_svpp3_mdp_rdma", "top_vpp", 12),
+	GATE_VPP1_0(CLK_VPP1_SVPP3_MDP_FG, "vpp1_svpp3_mdp_fg", "top_vpp", 13),
+	GATE_VPP1_0(CLK_VPP1_VPP_SPLIT, "vpp1_vpp_split", "top_vpp", 14),
+	GATE_VPP1_0(CLK_VPP1_SVPP2_VDO0_DL_RELAY, "vpp1_svpp2_vdo0_dl_relay", "top_vpp", 15),
+	GATE_VPP1_0(CLK_VPP1_SVPP1_MDP_RSZ, "vpp1_svpp1_mdp_rsz", "top_vpp", 16),
+	GATE_VPP1_0(CLK_VPP1_SVPP1_MDP_TDSHP, "vpp1_svpp1_mdp_tdshp", "top_vpp", 17),
+	GATE_VPP1_0(CLK_VPP1_SVPP1_MDP_COLOR, "vpp1_svpp1_mdp_color", "top_vpp", 18),
+	GATE_VPP1_0(CLK_VPP1_SVPP3_VDO1_DL_RELAY, "vpp1_svpp3_vdo1_dl_relay", "top_vpp", 19),
+	GATE_VPP1_0(CLK_VPP1_SVPP2_MDP_RSZ, "vpp1_svpp2_mdp_rsz", "top_vpp", 20),
+	GATE_VPP1_0(CLK_VPP1_SVPP2_VPP_MERGE, "vpp1_svpp2_vpp_merge", "top_vpp", 21),
+	GATE_VPP1_0(CLK_VPP1_SVPP2_MDP_TDSHP, "vpp1_svpp2_mdp_tdshp", "top_vpp", 22),
+	GATE_VPP1_0(CLK_VPP1_SVPP2_MDP_COLOR, "vpp1_svpp2_mdp_color", "top_vpp", 23),
+	GATE_VPP1_0(CLK_VPP1_SVPP3_MDP_RSZ, "vpp1_svpp3_mdp_rsz", "top_vpp", 24),
+	GATE_VPP1_0(CLK_VPP1_SVPP3_VPP_MERGE, "vpp1_svpp3_vpp_merge", "top_vpp", 25),
+	GATE_VPP1_0(CLK_VPP1_SVPP3_MDP_TDSHP, "vpp1_svpp3_mdp_tdshp", "top_vpp", 26),
+	GATE_VPP1_0(CLK_VPP1_SVPP3_MDP_COLOR, "vpp1_svpp3_mdp_color", "top_vpp", 27),
+	GATE_VPP1_0(CLK_VPP1_GALS5, "vpp1_gals5", "top_vpp", 28),
+	GATE_VPP1_0(CLK_VPP1_GALS6, "vpp1_gals6", "top_vpp", 29),
+	GATE_VPP1_0(CLK_VPP1_LARB5, "vpp1_larb5", "top_vpp", 30),
+	GATE_VPP1_0(CLK_VPP1_LARB6, "vpp1_larb6", "top_vpp", 31),
+	/* VPP1_1 */
+	GATE_VPP1_1(CLK_VPP1_SVPP1_MDP_HDR, "vpp1_svpp1_mdp_hdr", "top_vpp", 0),
+	GATE_VPP1_1(CLK_VPP1_SVPP1_MDP_AAL, "vpp1_svpp1_mdp_aal", "top_vpp", 1),
+	GATE_VPP1_1(CLK_VPP1_SVPP2_MDP_HDR, "vpp1_svpp2_mdp_hdr", "top_vpp", 2),
+	GATE_VPP1_1(CLK_VPP1_SVPP2_MDP_AAL, "vpp1_svpp2_mdp_aal", "top_vpp", 3),
+	GATE_VPP1_1(CLK_VPP1_SVPP3_MDP_HDR, "vpp1_svpp3_mdp_hdr", "top_vpp", 4),
+	GATE_VPP1_1(CLK_VPP1_SVPP3_MDP_AAL, "vpp1_svpp3_mdp_aal", "top_vpp", 5),
+	GATE_VPP1_1(CLK_VPP1_DISP_MUTEX, "vpp1_disp_mutex", "top_vpp", 7),
+	GATE_VPP1_1(CLK_VPP1_SVPP2_VDO1_DL_RELAY, "vpp1_svpp2_vdo1_dl_relay", "top_vpp", 8),
+	GATE_VPP1_1(CLK_VPP1_SVPP3_VDO0_DL_RELAY, "vpp1_svpp3_vdo0_dl_relay", "top_vpp", 9),
+	GATE_VPP1_1(CLK_VPP1_VPP0_DL_ASYNC, "vpp1_vpp0_dl_async", "top_vpp", 10),
+	GATE_VPP1_1(CLK_VPP1_VPP0_DL1_RELAY, "vpp1_vpp0_dl1_relay", "top_vpp", 11),
+	GATE_VPP1_1(CLK_VPP1_LARB5_FAKE_ENG, "vpp1_larb5_fake_eng", "top_vpp", 12),
+	GATE_VPP1_1(CLK_VPP1_LARB6_FAKE_ENG, "vpp1_larb6_fake_eng", "top_vpp", 13),
+	GATE_VPP1_1(CLK_VPP1_HDMI_META, "vpp1_hdmi_meta", "top_vpp", 16),
+	GATE_VPP1_1(CLK_VPP1_VPP_SPLIT_HDMI, "vpp1_vpp_split_hdmi", "top_vpp", 17),
+	GATE_VPP1_1(CLK_VPP1_DGI_IN, "vpp1_dgi_in", "top_vpp", 18),
+	GATE_VPP1_1(CLK_VPP1_DGI_OUT, "vpp1_dgi_out", "top_vpp", 19),
+	GATE_VPP1_1(CLK_VPP1_VPP_SPLIT_DGI, "vpp1_vpp_split_dgi", "top_vpp", 20),
+	GATE_VPP1_1(CLK_VPP1_DL_CON_OCC, "vpp1_dl_con_occ", "top_vpp", 21),
+	GATE_VPP1_1(CLK_VPP1_VPP_SPLIT_26M, "vpp1_vpp_split_26m", "top_vpp", 26),
+};
+
+static int clk_mt8188_vpp1_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct device_node *node = dev->parent->of_node;
+	struct clk_hw_onecell_data *clk_data;
+	int r;
+
+	clk_data = mtk_alloc_clk_data(CLK_VPP1_NR_CLK);
+	if (!clk_data)
+		return -ENOMEM;
+
+	r = mtk_clk_register_gates(node, vpp1_clks, ARRAY_SIZE(vpp1_clks), clk_data);
+	if (r)
+		goto free_vpp1_data;
+
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	if (r)
+		goto unregister_gates;
+
+	platform_set_drvdata(pdev, clk_data);
+
+	return r;
+
+unregister_gates:
+	mtk_clk_unregister_gates(vpp1_clks, ARRAY_SIZE(vpp1_clks), clk_data);
+free_vpp1_data:
+	mtk_free_clk_data(clk_data);
+	return r;
+}
+
+static int clk_mt8188_vpp1_remove(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct device_node *node = dev->parent->of_node;
+	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
+
+	of_clk_del_provider(node);
+	mtk_clk_unregister_gates(vpp1_clks, ARRAY_SIZE(vpp1_clks), clk_data);
+	mtk_free_clk_data(clk_data);
+
+	return 0;
+}
+
+static struct platform_driver clk_mt8188_vpp1_drv = {
+	.probe = clk_mt8188_vpp1_probe,
+	.remove = clk_mt8188_vpp1_remove,
+	.driver = {
+		.name = "clk-mt8188-vpp1",
+	},
+};
+builtin_platform_driver(clk_mt8188_vpp1_drv);
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:53 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:53 +0800
Subject: [PATCH v3 15/19] clk: mediatek: Add MT8188 vppsys0 clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-16-Garmin.Chang@mediatek.com>

Add MT8188 vppsys0 clock controller which provides clock gate
controller for Video Processor Pipe.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile          |   3 +-
 drivers/clk/mediatek/clk-mt8188-vpp0.c | 143 +++++++++++++++++++++++++
 2 files changed, 145 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-vpp0.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index 22a3840160fc..48deecc6b520 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -87,7 +87,8 @@ obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o
 				   clk-mt8188-peri_ao.o clk-mt8188-infra_ao.o \
 				   clk-mt8188-cam.o clk-mt8188-ccu.o clk-mt8188-img.o \
 				   clk-mt8188-ipe.o clk-mt8188-mfg.o clk-mt8188-vdec.o \
-				   clk-mt8188-vdo0.o clk-mt8188-vdo1.o clk-mt8188-venc.o
+				   clk-mt8188-vdo0.o clk-mt8188-vdo1.o clk-mt8188-venc.o \
+				   clk-mt8188-vpp0.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-vpp0.c b/drivers/clk/mediatek/clk-mt8188-vpp0.c
new file mode 100644
index 000000000000..e7b46142d653
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-vpp0.c
@@ -0,0 +1,143 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs vpp0_0_cg_regs = {
+	.set_ofs = 0x24,
+	.clr_ofs = 0x28,
+	.sta_ofs = 0x20,
+};
+
+static const struct mtk_gate_regs vpp0_1_cg_regs = {
+	.set_ofs = 0x30,
+	.clr_ofs = 0x34,
+	.sta_ofs = 0x2c,
+};
+
+static const struct mtk_gate_regs vpp0_2_cg_regs = {
+	.set_ofs = 0x3c,
+	.clr_ofs = 0x40,
+	.sta_ofs = 0x38,
+};
+
+#define GATE_VPP0_0(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vpp0_0_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+#define GATE_VPP0_1(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vpp0_1_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+#define GATE_VPP0_2(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &vpp0_2_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+static const struct mtk_gate vpp0_clks[] = {
+	/* VPP0_0 */
+	GATE_VPP0_0(CLK_VPP0_MDP_FG, "vpp0_mdp_fg", "top_vpp", 1),
+	GATE_VPP0_0(CLK_VPP0_STITCH, "vpp0_stitch", "top_vpp", 2),
+	GATE_VPP0_0(CLK_VPP0_PADDING, "vpp0_padding", "top_vpp", 7),
+	GATE_VPP0_0(CLK_VPP0_MDP_TCC, "vpp0_mdp_tcc", "top_vpp", 8),
+	GATE_VPP0_0(CLK_VPP0_WARP0_ASYNC_TX, "vpp0_warp0_async_tx", "top_vpp", 10),
+	GATE_VPP0_0(CLK_VPP0_WARP1_ASYNC_TX, "vpp0_warp1_async_tx", "top_vpp", 11),
+	GATE_VPP0_0(CLK_VPP0_MUTEX, "vpp0_mutex", "top_vpp", 13),
+	GATE_VPP0_0(CLK_VPP02VPP1_RELAY, "vpp02vpp1_relay", "top_vpp", 14),
+	GATE_VPP0_0(CLK_VPP0_VPP12VPP0_ASYNC, "vpp0_vpp12vpp0_async", "top_vpp", 15),
+	GATE_VPP0_0(CLK_VPP0_MMSYSRAM_TOP, "vpp0_mmsysram_top", "top_vpp", 16),
+	GATE_VPP0_0(CLK_VPP0_MDP_AAL, "vpp0_mdp_aal", "top_vpp", 17),
+	GATE_VPP0_0(CLK_VPP0_MDP_RSZ, "vpp0_mdp_rsz", "top_vpp", 18),
+	/* VPP0_1 */
+	GATE_VPP0_1(CLK_VPP0_SMI_COMMON_MMSRAM, "vpp0_smi_common_mmsram", "top_vpp", 0),
+	GATE_VPP0_1(CLK_VPP0_GALS_VDO0_LARB0_MMSRAM, "vpp0_gals_vdo0_larb0_mmsram", "top_vpp", 1),
+	GATE_VPP0_1(CLK_VPP0_GALS_VDO0_LARB1_MMSRAM, "vpp0_gals_vdo0_larb1_mmsram", "top_vpp", 2),
+	GATE_VPP0_1(CLK_VPP0_GALS_VENCSYS_MMSRAM, "vpp0_gals_vencsys_mmsram", "top_vpp", 3),
+	GATE_VPP0_1(CLK_VPP0_GALS_VENCSYS_CORE1_MMSRAM,
+		    "vpp0_gals_vencsys_core1_mmsram", "top_vpp", 4),
+	GATE_VPP0_1(CLK_VPP0_GALS_INFRA_MMSRAM, "vpp0_gals_infra_mmsram", "top_vpp", 5),
+	GATE_VPP0_1(CLK_VPP0_GALS_CAMSYS_MMSRAM, "vpp0_gals_camsys_mmsram", "top_vpp", 6),
+	GATE_VPP0_1(CLK_VPP0_GALS_VPP1_LARB5_MMSRAM, "vpp0_gals_vpp1_larb5_mmsram", "top_vpp", 7),
+	GATE_VPP0_1(CLK_VPP0_GALS_VPP1_LARB6_MMSRAM, "vpp0_gals_vpp1_larb6_mmsram", "top_vpp", 8),
+	GATE_VPP0_1(CLK_VPP0_SMI_REORDER_MMSRAM, "vpp0_smi_reorder_mmsram", "top_vpp", 9),
+	GATE_VPP0_1(CLK_VPP0_SMI_IOMMU, "vpp0_smi_iommu", "top_vpp", 10),
+	GATE_VPP0_1(CLK_VPP0_GALS_IMGSYS_CAMSYS, "vpp0_gals_imgsys_camsys", "top_vpp", 11),
+	GATE_VPP0_1(CLK_VPP0_MDP_RDMA, "vpp0_mdp_rdma", "top_vpp", 12),
+	GATE_VPP0_1(CLK_VPP0_MDP_WROT, "vpp0_mdp_wrot", "top_vpp", 13),
+	GATE_VPP0_1(CLK_VPP0_GALS_EMI0_EMI1, "vpp0_gals_emi0_emi1", "top_vpp", 16),
+	GATE_VPP0_1(CLK_VPP0_SMI_SUB_COMMON_REORDER, "vpp0_smi_sub_common_reorder", "top_vpp", 17),
+	GATE_VPP0_1(CLK_VPP0_SMI_RSI, "vpp0_smi_rsi", "top_vpp", 18),
+	GATE_VPP0_1(CLK_VPP0_SMI_COMMON_LARB4, "vpp0_smi_common_larb4", "top_vpp", 19),
+	GATE_VPP0_1(CLK_VPP0_GALS_VDEC_VDEC_CORE1, "vpp0_gals_vdec_vdec_core1", "top_vpp", 20),
+	GATE_VPP0_1(CLK_VPP0_GALS_VPP1_WPESYS, "vpp0_gals_vpp1_wpesys", "top_vpp", 21),
+	GATE_VPP0_1(CLK_VPP0_GALS_VDO0_VDO1_VENCSYS_CORE1,
+		    "vpp0_gals_vdo0_vdo1_vencsys_core1", "top_vpp", 22),
+	GATE_VPP0_1(CLK_VPP0_FAKE_ENG, "vpp0_fake_eng", "top_vpp", 23),
+	GATE_VPP0_1(CLK_VPP0_MDP_HDR, "vpp0_mdp_hdr", "top_vpp", 24),
+	GATE_VPP0_1(CLK_VPP0_MDP_TDSHP, "vpp0_mdp_tdshp", "top_vpp", 25),
+	GATE_VPP0_1(CLK_VPP0_MDP_COLOR, "vpp0_mdp_color", "top_vpp", 26),
+	GATE_VPP0_1(CLK_VPP0_MDP_OVL, "vpp0_mdp_ovl", "top_vpp", 27),
+	GATE_VPP0_1(CLK_VPP0_DSIP_RDMA, "vpp0_dsip_rdma", "top_vpp", 28),
+	GATE_VPP0_1(CLK_VPP0_DISP_WDMA, "vpp0_disp_wdma", "top_vpp", 29),
+	GATE_VPP0_1(CLK_VPP0_MDP_HMS, "vpp0_mdp_hms", "top_vpp", 30),
+	/* VPP0_2 */
+	GATE_VPP0_2(CLK_VPP0_WARP0_RELAY, "vpp0_warp0_relay", "top_wpe_vpp", 0),
+	GATE_VPP0_2(CLK_VPP0_WARP0_ASYNC, "vpp0_warp0_async", "top_wpe_vpp", 1),
+	GATE_VPP0_2(CLK_VPP0_WARP1_RELAY, "vpp0_warp1_relay", "top_wpe_vpp", 2),
+	GATE_VPP0_2(CLK_VPP0_WARP1_ASYNC, "vpp0_warp1_async", "top_wpe_vpp", 3),
+};
+
+static int clk_mt8188_vpp0_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct device_node *node = dev->parent->of_node;
+	struct clk_hw_onecell_data *clk_data;
+	int r;
+
+	clk_data = mtk_alloc_clk_data(CLK_VPP0_NR_CLK);
+	if (!clk_data)
+		return -ENOMEM;
+
+	r = mtk_clk_register_gates(node, vpp0_clks, ARRAY_SIZE(vpp0_clks), clk_data);
+	if (r)
+		goto free_vpp0_data;
+
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	if (r)
+		goto unregister_gates;
+
+	platform_set_drvdata(pdev, clk_data);
+
+	return r;
+
+unregister_gates:
+	mtk_clk_unregister_gates(vpp0_clks, ARRAY_SIZE(vpp0_clks), clk_data);
+free_vpp0_data:
+	mtk_free_clk_data(clk_data);
+	return r;
+}
+
+static int clk_mt8188_vpp0_remove(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct device_node *node = dev->parent->of_node;
+	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
+
+	of_clk_del_provider(node);
+	mtk_clk_unregister_gates(vpp0_clks, ARRAY_SIZE(vpp0_clks), clk_data);
+	mtk_free_clk_data(clk_data);
+
+	return 0;
+}
+
+static struct platform_driver clk_mt8188_vpp0_drv = {
+	.probe = clk_mt8188_vpp0_probe,
+	.remove = clk_mt8188_vpp0_remove,
+	.driver = {
+		.name = "clk-mt8188-vpp0",
+	},
+};
+builtin_platform_driver(clk_mt8188_vpp0_drv);
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:57 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:57 +0800
Subject: [PATCH v3 19/19] clk: mediatek: Add MT8188 adsp clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-20-Garmin.Chang@mediatek.com>

Add MT8188 adsp clock controller which provides clock gate
control for Audio DSP.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile                 |  2 +-
 .../clk/mediatek/clk-mt8188-adsp_audio26m.c   | 45 +++++++++++++++++++
 2 files changed, 46 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-adsp_audio26m.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index 8befaedfdd3d..b56ae9bee1d8 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -89,7 +89,7 @@ obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o
 				   clk-mt8188-ipe.o clk-mt8188-mfg.o clk-mt8188-vdec.o \
 				   clk-mt8188-vdo0.o clk-mt8188-vdo1.o clk-mt8188-venc.o \
 				   clk-mt8188-vpp0.o clk-mt8188-vpp1.o clk-mt8188-wpe.o \
-				   clk-mt8188-imp_iic_wrap.o
+				   clk-mt8188-imp_iic_wrap.o clk-mt8188-adsp_audio26m.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-adsp_audio26m.c b/drivers/clk/mediatek/clk-mt8188-adsp_audio26m.c
new file mode 100644
index 000000000000..f91381a1316c
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-adsp_audio26m.c
@@ -0,0 +1,45 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs adsp_audio26m_cg_regs = {
+	.set_ofs = 0x80,
+	.clr_ofs = 0x80,
+	.sta_ofs = 0x80,
+};
+
+#define GATE_ADSP_FLAGS(_id, _name, _parent, _shift)		\
+	GATE_MTK_FLAGS(_id, _name, _parent, &adsp_audio26m_cg_regs, _shift,		\
+		&mtk_clk_gate_ops_no_setclr, CLK_IGNORE_UNUSED)
+
+static const struct mtk_gate adsp_audio26m_clks[] = {
+	GATE_ADSP_FLAGS(CLK_AUDIODSP_AUDIO26M, "audiodsp_audio26m", "clk26m", 3),
+};
+
+static const struct mtk_clk_desc adsp_audio26m_desc = {
+	.clks = adsp_audio26m_clks,
+	.num_clks = ARRAY_SIZE(adsp_audio26m_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8188_adsp_audio26m[] = {
+	{ .compatible = "mediatek,mt8188-adsp-audio26m", .data = &adsp_audio26m_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8188_adsp_audio26m_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8188-adsp_audio26m",
+		.of_match_table = of_match_clk_mt8188_adsp_audio26m,
+	},
+};
+builtin_platform_driver(clk_mt8188_adsp_audio26m_drv);
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:40 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:40 +0800
Subject: [PATCH v3 02/19] clk: mediatek: Add MT8188 apmixedsys clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-3-Garmin.Chang@mediatek.com>

Add MT8188 apmixedsys clock controller which provides Plls
generated from SoC 26m and ssusb clock gate control.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Kconfig                 |  11 ++
 drivers/clk/mediatek/Makefile                |   1 +
 drivers/clk/mediatek/clk-mt8188-apmixedsys.c | 154 +++++++++++++++++++
 3 files changed, 166 insertions(+)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-apmixedsys.c

diff --git a/drivers/clk/mediatek/Kconfig b/drivers/clk/mediatek/Kconfig
index 22e8e79475ee..f02b679f71d0 100644
--- a/drivers/clk/mediatek/Kconfig
+++ b/drivers/clk/mediatek/Kconfig
@@ -565,6 +565,17 @@ config COMMON_CLK_MT8186
 	help
 	  This driver supports MediaTek MT8186 clocks.
 
+config COMMON_CLK_MT8188
+	bool "Clock driver for MediaTek MT8188"
+	depends on ARM64 || COMPILE_TEST
+	select COMMON_CLK_MEDIATEK
+	default ARCH_MEDIATEK
+	help
+	  This driver supports MediaTek MT8188 basic clocks and clocks
+	  required for various peripheral found on MediaTek. Choose
+	  M or Y here if you want to use clocks such as peri_ao,
+	  infra_ao, etc.
+
 config COMMON_CLK_MT8192
 	bool "Clock driver for MediaTek MT8192"
 	depends on ARM64 || COMPILE_TEST
diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index e24080fd6e7f..13ab8deb362c 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -83,6 +83,7 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-mcu.o clk-mt8186-topckgen.o clk-mt
 				   clk-mt8186-mfg.o clk-mt8186-mm.o clk-mt8186-wpe.o \
 				   clk-mt8186-img.o clk-mt8186-vdec.o clk-mt8186-venc.o \
 				   clk-mt8186-cam.o clk-mt8186-mdp.o clk-mt8186-ipe.o
+obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-apmixedsys.c b/drivers/clk/mediatek/clk-mt8188-apmixedsys.c
new file mode 100644
index 000000000000..8d73ae3a0da8
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-apmixedsys.c
@@ -0,0 +1,154 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+#include "clk-pll.h"
+
+static const struct mtk_gate_regs apmixed_cg_regs = {
+	.set_ofs = 0x8,
+	.clr_ofs = 0x8,
+	.sta_ofs = 0x8,
+};
+
+#define GATE_APMIXED(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &apmixed_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv)
+
+static const struct mtk_gate apmixed_clks[] = {
+	GATE_APMIXED(CLK_APMIXED_PLL_SSUSB26M_EN, "pll_ssusb26m_en", "clk26m", 1),
+};
+
+#define MT8188_PLL_FMAX		(3800UL * MHZ)
+#define MT8188_PLL_FMIN		(1500UL * MHZ)
+#define MT8188_INTEGER_BITS	8
+
+#define PLL(_id, _name, _reg, _pwr_reg, _en_mask, _flags,		\
+	    _rst_bar_mask, _pcwbits, _pd_reg, _pd_shift,		\
+	    _tuner_reg, _tuner_en_reg, _tuner_en_bit,			\
+	    _pcw_reg, _pcw_shift, _pcw_chg_reg,				\
+	    _en_reg, _pll_en_bit) {					\
+		.id = _id,						\
+		.name = _name,						\
+		.reg = _reg,						\
+		.pwr_reg = _pwr_reg,					\
+		.en_mask = _en_mask,					\
+		.flags = _flags,					\
+		.rst_bar_mask = _rst_bar_mask,				\
+		.fmax = MT8188_PLL_FMAX,				\
+		.fmin = MT8188_PLL_FMIN,				\
+		.pcwbits = _pcwbits,					\
+		.pcwibits = MT8188_INTEGER_BITS,			\
+		.pd_reg = _pd_reg,					\
+		.pd_shift = _pd_shift,					\
+		.tuner_reg = _tuner_reg,				\
+		.tuner_en_reg = _tuner_en_reg,				\
+		.tuner_en_bit = _tuner_en_bit,				\
+		.pcw_reg = _pcw_reg,					\
+		.pcw_shift = _pcw_shift,				\
+		.pcw_chg_reg = _pcw_chg_reg,				\
+		.en_reg = _en_reg,					\
+		.pll_en_bit = _pll_en_bit,				\
+	}
+
+static const struct mtk_pll_data plls[] = {
+	PLL(CLK_APMIXED_ETHPLL, "ethpll", 0x044C, 0x0458, 0,
+	    0, 0, 22, 0x0450, 24, 0, 0, 0, 0x0450, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_MSDCPLL, "msdcpll", 0x0514, 0x0520, 0,
+	    0, 0, 22, 0x0518, 24, 0, 0, 0, 0x0518, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_TVDPLL1, "tvdpll1", 0x0524, 0x0530, 0,
+	    0, 0, 22, 0x0528, 24, 0, 0, 0, 0x0528, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_TVDPLL2, "tvdpll2", 0x0534, 0x0540, 0,
+	    0, 0, 22, 0x0538, 24, 0, 0, 0, 0x0538, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_MMPLL, "mmpll", 0x0544, 0x0550, 0xff000000,
+	    HAVE_RST_BAR, BIT(23), 22, 0x0548, 24, 0, 0, 0, 0x0548, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_MAINPLL, "mainpll", 0x045C, 0x0468, 0xff000000,
+	    HAVE_RST_BAR, BIT(23), 22, 0x0460, 24, 0, 0, 0, 0x0460, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_IMGPLL, "imgpll", 0x0554, 0x0560, 0,
+	    0, 0, 22, 0x0558, 24, 0, 0, 0, 0x0558, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_UNIVPLL, "univpll", 0x0504, 0x0510, 0xff000000,
+	    HAVE_RST_BAR, BIT(23), 22, 0x0508, 24, 0, 0, 0, 0x0508, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_ADSPPLL, "adsppll", 0x042C, 0x0438, 0,
+	    0, 0, 22, 0x0430, 24, 0, 0, 0, 0x0430, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_APLL1, "apll1", 0x0304, 0x0314, 0,
+	    0, 0, 32, 0x0308, 24, 0x0034, 0x0000, 12, 0x030C, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_APLL2, "apll2", 0x0318, 0x0328, 0,
+	    0, 0, 32, 0x031C, 24, 0x0038, 0x0000, 13, 0x0320, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_APLL3, "apll3", 0x032C, 0x033C, 0,
+	    0, 0, 32, 0x0330, 24, 0x003C, 0x0000, 14, 0x0334, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_APLL4, "apll4", 0x0404, 0x0414, 0,
+	    0, 0, 32, 0x0408, 24, 0x0040, 0x0000, 15, 0x040C, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_APLL5, "apll5", 0x0418, 0x0428, 0,
+	    0, 0, 32, 0x041C, 24, 0x0044, 0x0000, 16, 0x0420, 0, 0, 0, 9),
+	PLL(CLK_APMIXED_MFGPLL, "mfgpll", 0x0340, 0x034C, 0,
+	    0, 0, 22, 0x0344, 24, 0, 0, 0, 0x0344, 0, 0, 0, 9),
+};
+
+static const struct of_device_id of_match_clk_mt8188_apmixed[] = {
+	{ .compatible = "mediatek,mt8188-apmixedsys", },
+	{}
+};
+
+static int clk_mt8188_apmixed_probe(struct platform_device *pdev)
+{
+	struct clk_hw_onecell_data *clk_data;
+	struct device_node *node = pdev->dev.of_node;
+	int r;
+
+	clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
+	if (!clk_data)
+		return -ENOMEM;
+
+	r = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
+	if (r)
+		goto free_apmixed_data;
+
+	r = mtk_clk_register_gates_with_dev(node, apmixed_clks,
+		ARRAY_SIZE(apmixed_clks), clk_data, NULL);
+	if (r)
+		goto unregister_plls;
+
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+	if (r)
+		goto unregister_gates;
+
+	platform_set_drvdata(pdev, clk_data);
+
+	return r;
+
+unregister_gates:
+	mtk_clk_unregister_gates(apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data);
+unregister_plls:
+	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+free_apmixed_data:
+	mtk_free_clk_data(clk_data);
+	return r;
+}
+
+static int clk_mt8188_apmixed_remove(struct platform_device *pdev)
+{
+	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);
+
+	of_clk_del_provider(node);
+	mtk_clk_unregister_gates(apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data);
+	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
+	mtk_free_clk_data(clk_data);
+
+	return 0;
+}
+
+static struct platform_driver clk_mt8188_apmixed_drv = {
+	.probe = clk_mt8188_apmixed_probe,
+	.remove = clk_mt8188_apmixed_remove,
+	.driver = {
+		.name = "clk-mt8188-apmixed",
+		.of_match_table = of_match_clk_mt8188_apmixed,
+	},
+};
+builtin_platform_driver(clk_mt8188_apmixed_drv);
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:52 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:52 +0800
Subject: [PATCH v3 14/19] clk: mediatek: Add MT8188 vencsys clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-15-Garmin.Chang@mediatek.com>

Add MT8188 vencsys clock controllers which provide clock gate
control for video encoder.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile          |  2 +-
 drivers/clk/mediatek/clk-mt8188-venc.c | 52 ++++++++++++++++++++++++++
 2 files changed, 53 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-venc.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index c654f4288e09..22a3840160fc 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -87,7 +87,7 @@ obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o
 				   clk-mt8188-peri_ao.o clk-mt8188-infra_ao.o \
 				   clk-mt8188-cam.o clk-mt8188-ccu.o clk-mt8188-img.o \
 				   clk-mt8188-ipe.o clk-mt8188-mfg.o clk-mt8188-vdec.o \
-				   clk-mt8188-vdo0.o clk-mt8188-vdo1.o
+				   clk-mt8188-vdo0.o clk-mt8188-vdo1.o clk-mt8188-venc.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-venc.c b/drivers/clk/mediatek/clk-mt8188-venc.c
new file mode 100644
index 000000000000..375ef99e2349
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-venc.c
@@ -0,0 +1,52 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs ven1_cg_regs = {
+	.set_ofs = 0x4,
+	.clr_ofs = 0x8,
+	.sta_ofs = 0x0,
+};
+
+#define GATE_VEN1(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &ven1_cg_regs, _shift, &mtk_clk_gate_ops_setclr_inv)
+
+static const struct mtk_gate ven1_clks[] = {
+	GATE_VEN1(CLK_VEN1_CKE0_LARB, "ven1_cke0_larb", "top_venc", 0),
+	GATE_VEN1(CLK_VEN1_CKE1_VENC, "ven1_cke1_venc", "top_venc", 4),
+	GATE_VEN1(CLK_VEN1_CKE2_JPGENC, "ven1_cke2_jpgenc", "top_venc", 8),
+	GATE_VEN1(CLK_VEN1_CKE3_JPGDEC, "ven1_cke3_jpgdec", "top_venc", 12),
+	GATE_VEN1(CLK_VEN1_CKE4_JPGDEC_C1, "ven1_cke4_jpgdec_c1", "top_venc", 16),
+	GATE_VEN1(CLK_VEN1_CKE5_GALS, "ven1_cke5_gals", "top_venc", 28),
+	GATE_VEN1(CLK_VEN1_CKE6_GALS_SRAM, "ven1_cke6_gals_sram", "top_venc", 31),
+};
+
+static const struct mtk_clk_desc ven1_desc = {
+	.clks = ven1_clks,
+	.num_clks = ARRAY_SIZE(ven1_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8188_ven1[] = {
+	{ .compatible = "mediatek,mt8188-vencsys", .data = &ven1_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8188_ven1_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8188-ven1",
+		.of_match_table = of_match_clk_mt8188_ven1,
+	},
+};
+
+builtin_platform_driver(clk_mt8188_ven1_drv);
+MODULE_LICENSE("GPL");
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:56 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:56 +0800
Subject: [PATCH v3 18/19] clk: mediatek: Add MT8188 imp i2c wrapper clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-19-Garmin.Chang@mediatek.com>

Add MT8188 imp i2c wrapper clock controllers which provide clock gate
control in I2C IP blocks.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile                 |  3 +-
 .../clk/mediatek/clk-mt8188-imp_iic_wrap.c    | 78 +++++++++++++++++++
 2 files changed, 80 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-imp_iic_wrap.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index ed35546819a9..8befaedfdd3d 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -88,7 +88,8 @@ obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o
 				   clk-mt8188-cam.o clk-mt8188-ccu.o clk-mt8188-img.o \
 				   clk-mt8188-ipe.o clk-mt8188-mfg.o clk-mt8188-vdec.o \
 				   clk-mt8188-vdo0.o clk-mt8188-vdo1.o clk-mt8188-venc.o \
-				   clk-mt8188-vpp0.o clk-mt8188-vpp1.o clk-mt8188-wpe.o
+				   clk-mt8188-vpp0.o clk-mt8188-vpp1.o clk-mt8188-wpe.o \
+				   clk-mt8188-imp_iic_wrap.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-imp_iic_wrap.c b/drivers/clk/mediatek/clk-mt8188-imp_iic_wrap.c
new file mode 100644
index 000000000000..e9b951f95fba
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-imp_iic_wrap.c
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs imp_iic_wrap_cg_regs = {
+	.set_ofs = 0xe08,
+	.clr_ofs = 0xe04,
+	.sta_ofs = 0xe00,
+};
+
+#define GATE_IMP_IIC_WRAP(_id, _name, _parent, _shift)			\
+	GATE_MTK_FLAGS(_id, _name, _parent, &imp_iic_wrap_cg_regs, _shift,			\
+		&mtk_clk_gate_ops_setclr, CLK_OPS_PARENT_ENABLE)
+
+static const struct mtk_gate imp_iic_wrap_c_clks[] = {
+	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_C_AP_CLOCK_I2C0,
+			  "imp_iic_wrap_c_ap_clock_i2c0", "top_i2c", 0),
+	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_C_AP_CLOCK_I2C2,
+			  "imp_iic_wrap_c_ap_clock_i2c2", "top_i2c", 1),
+	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_C_AP_CLOCK_I2C3,
+			  "imp_iic_wrap_c_ap_clock_i2c3", "top_i2c", 2),
+};
+
+static const struct mtk_gate imp_iic_wrap_w_clks[] = {
+	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_W_AP_CLOCK_I2C1,
+			  "imp_iic_wrap_w_ap_clock_i2c1", "top_i2c", 0),
+	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_W_AP_CLOCK_I2C4,
+			  "imp_iic_wrap_w_ap_clock_i2c4", "top_i2c", 1),
+};
+
+static const struct mtk_gate imp_iic_wrap_en_clks[] = {
+	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_EN_AP_CLOCK_I2C5,
+			  "imp_iic_wrap_en_ap_clock_i2c5", "top_i2c", 0),
+	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_EN_AP_CLOCK_I2C6,
+			  "imp_iic_wrap_en_ap_clock_i2c6", "top_i2c", 1),
+};
+
+static const struct mtk_clk_desc imp_iic_wrap_c_desc = {
+	.clks = imp_iic_wrap_c_clks,
+	.num_clks = ARRAY_SIZE(imp_iic_wrap_c_clks),
+};
+
+static const struct mtk_clk_desc imp_iic_wrap_w_desc = {
+	.clks = imp_iic_wrap_w_clks,
+	.num_clks = ARRAY_SIZE(imp_iic_wrap_w_clks),
+};
+
+static const struct mtk_clk_desc imp_iic_wrap_en_desc = {
+	.clks = imp_iic_wrap_en_clks,
+	.num_clks = ARRAY_SIZE(imp_iic_wrap_en_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8188_imp_iic_wrap[] = {
+	{ .compatible = "mediatek,mt8188-imp-iic-wrap-c", .data = &imp_iic_wrap_c_desc },
+	{ .compatible = "mediatek,mt8188-imp-iic-wrap-w", .data = &imp_iic_wrap_w_desc },
+	{ .compatible = "mediatek,mt8188-imp-iic-wrap-en", .data = &imp_iic_wrap_en_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8188_imp_iic_wrap_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8188-imp_iic_wrap",
+		.of_match_table = of_match_clk_mt8188_imp_iic_wrap,
+	},
+};
+
+builtin_platform_driver(clk_mt8188_imp_iic_wrap_drv);
+MODULE_LICENSE("GPL");
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:38 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:38 +0800
Subject: [PATCH v3 00/19] MediaTek MT8188 clock support
Message-ID: <20221230073357.18503-1-Garmin.Chang@mediatek.com>

Base on tag: next-20221226, linux-next/master

changes since v2:
- remove underscores in devicetree compatibles
- modify yaml file
- use devm_clk_hw_register_mux()
- use mtk_clk_register_gates_with_dev()
- modify clk-mt8188-mfg.c for GPU DVFS
- remove dummy tvdpll1_ck and tvdpll2_ck

Garmin.Chang (19):
  dt-bindings: ARM: MediaTek: Add new document bindings of MT8188 clock
  clk: mediatek: Add MT8188 apmixedsys clock support
  clk: mediatek: Add MT8188 topckgen clock support
  clk: mediatek: Add MT8188 peripheral clock support
  clk: mediatek: Add MT8188 infrastructure clock support
  clk: mediatek: Add MT8188 camsys clock support
  clk: mediatek: Add MT8188 ccusys clock support
  clk: mediatek: Add MT8188 imgsys clock support
  clk: mediatek: Add MT8188 ipesys clock support
  clk: mediatek: Add MT8188 mfgcfg clock support
  clk: mediatek: Add MT8188 vdecsys clock support
  clk: mediatek: Add MT8188 vdosys0 clock support
  clk: mediatek: Add MT8188 vdosys1 clock support
  clk: mediatek: Add MT8188 vencsys clock support
  clk: mediatek: Add MT8188 vppsys0 clock support
  clk: mediatek: Add MT8188 vppsys1 clock support
  clk: mediatek: Add MT8188 wpesys clock support
  clk: mediatek: Add MT8188 imp i2c wrapper clock support
  clk: mediatek: Add MT8188 adsp clock support

 .../arm/mediatek/mediatek,mt8188-clock.yaml   |   71 +
 .../mediatek/mediatek,mt8188-sys-clock.yaml   |   55 +
 drivers/clk/mediatek/Kconfig                  |   11 +
 drivers/clk/mediatek/Makefile                 |    7 +
 .../clk/mediatek/clk-mt8188-adsp_audio26m.c   |   45 +
 drivers/clk/mediatek/clk-mt8188-apmixedsys.c  |  154 ++
 drivers/clk/mediatek/clk-mt8188-cam.c         |  118 ++
 drivers/clk/mediatek/clk-mt8188-ccu.c         |   48 +
 drivers/clk/mediatek/clk-mt8188-img.c         |  110 ++
 .../clk/mediatek/clk-mt8188-imp_iic_wrap.c    |   78 +
 drivers/clk/mediatek/clk-mt8188-infra_ao.c    |  190 +++
 drivers/clk/mediatek/clk-mt8188-ipe.c         |   50 +
 drivers/clk/mediatek/clk-mt8188-mfg.c         |   47 +
 drivers/clk/mediatek/clk-mt8188-peri_ao.c     |   56 +
 drivers/clk/mediatek/clk-mt8188-topckgen.c    | 1352 +++++++++++++++++
 drivers/clk/mediatek/clk-mt8188-vdec.c        |   90 ++
 drivers/clk/mediatek/clk-mt8188-vdo0.c        |  134 ++
 drivers/clk/mediatek/clk-mt8188-vdo1.c        |  181 +++
 drivers/clk/mediatek/clk-mt8188-venc.c        |   52 +
 drivers/clk/mediatek/clk-mt8188-vpp0.c        |  143 ++
 drivers/clk/mediatek/clk-mt8188-vpp1.c        |  138 ++
 drivers/clk/mediatek/clk-mt8188-wpe.c         |  101 ++
 .../dt-bindings/clock/mediatek,mt8188-clk.h   |  733 +++++++++
 23 files changed, 3964 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-clock.yaml
 create mode 100644 Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-sys-clock.yaml
 create mode 100644 drivers/clk/mediatek/clk-mt8188-adsp_audio26m.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-apmixedsys.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-cam.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-ccu.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-img.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-imp_iic_wrap.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-infra_ao.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-ipe.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-mfg.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-peri_ao.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-topckgen.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-vdec.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-vdo0.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-vdo1.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-venc.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-vpp0.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-vpp1.c
 create mode 100644 drivers/clk/mediatek/clk-mt8188-wpe.c
 create mode 100644 include/dt-bindings/clock/mediatek,mt8188-clk.h

-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:43 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:43 +0800
Subject: [PATCH v3 05/19] clk: mediatek: Add MT8188 infrastructure clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-6-Garmin.Chang@mediatek.com>

Add MT8188 infrastructure clock controller which provides
clock gate control for basic IP like pwm, uart, spi and so on.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile              |   2 +-
 drivers/clk/mediatek/clk-mt8188-infra_ao.c | 190 +++++++++++++++++++++
 2 files changed, 191 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-infra_ao.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index b8a3042f4809..a3393782f7e1 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -84,7 +84,7 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-mcu.o clk-mt8186-topckgen.o clk-mt
 				   clk-mt8186-img.o clk-mt8186-vdec.o clk-mt8186-venc.o \
 				   clk-mt8186-cam.o clk-mt8186-mdp.o clk-mt8186-ipe.o
 obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o \
-				   clk-mt8188-peri_ao.o
+				   clk-mt8188-peri_ao.o clk-mt8188-infra_ao.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-infra_ao.c b/drivers/clk/mediatek/clk-mt8188-infra_ao.c
new file mode 100644
index 000000000000..cdea09883320
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-infra_ao.c
@@ -0,0 +1,190 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs infra_ao0_cg_regs = {
+	.set_ofs = 0x80,
+	.clr_ofs = 0x84,
+	.sta_ofs = 0x90,
+};
+
+static const struct mtk_gate_regs infra_ao1_cg_regs = {
+	.set_ofs = 0x88,
+	.clr_ofs = 0x8c,
+	.sta_ofs = 0x94,
+};
+
+static const struct mtk_gate_regs infra_ao2_cg_regs = {
+	.set_ofs = 0xa4,
+	.clr_ofs = 0xa8,
+	.sta_ofs = 0xac,
+};
+
+static const struct mtk_gate_regs infra_ao3_cg_regs = {
+	.set_ofs = 0xc0,
+	.clr_ofs = 0xc4,
+	.sta_ofs = 0xc8,
+};
+
+static const struct mtk_gate_regs infra_ao4_cg_regs = {
+	.set_ofs = 0xe0,
+	.clr_ofs = 0xe4,
+	.sta_ofs = 0xe8,
+};
+
+#define GATE_INFRA_AO0_FLAGS(_id, _name, _parent, _shift, _flag)                \
+	GATE_MTK_FLAGS(_id, _name, _parent, &infra_ao0_cg_regs, _shift, \
+		&mtk_clk_gate_ops_setclr, _flag)
+
+#define GATE_INFRA_AO0(_id, _name, _parent, _shift)	\
+	GATE_INFRA_AO0_FLAGS(_id, _name, _parent, _shift, 0)
+
+#define GATE_INFRA_AO1_FLAGS(_id, _name, _parent, _shift, _flag)		\
+	GATE_MTK_FLAGS(_id, _name, _parent, &infra_ao1_cg_regs, _shift,	\
+		&mtk_clk_gate_ops_setclr, _flag)
+
+#define GATE_INFRA_AO1(_id, _name, _parent, _shift)	\
+	GATE_INFRA_AO1_FLAGS(_id, _name, _parent, _shift, 0)
+
+#define GATE_INFRA_AO2(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &infra_ao2_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+#define GATE_INFRA_AO3_FLAGS(_id, _name, _parent, _shift, _flag)		\
+	GATE_MTK_FLAGS(_id, _name, _parent, &infra_ao3_cg_regs, _shift,	\
+		&mtk_clk_gate_ops_setclr, _flag)
+
+#define GATE_INFRA_AO3(_id, _name, _parent, _shift)	\
+	GATE_INFRA_AO3_FLAGS(_id, _name, _parent, _shift, 0)
+
+#define GATE_INFRA_AO4_FLAGS(_id, _name, _parent, _shift, _flag)		\
+	GATE_MTK_FLAGS(_id, _name, _parent, &infra_ao4_cg_regs, _shift,	\
+		&mtk_clk_gate_ops_setclr, _flag)
+
+#define GATE_INFRA_AO4(_id, _name, _parent, _shift)	\
+	GATE_INFRA_AO4_FLAGS(_id, _name, _parent, _shift, 0)
+
+static const struct mtk_gate infra_ao_clks[] = {
+	/* INFRA_AO0 */
+	GATE_INFRA_AO0(CLK_INFRA_AO_PMIC_TMR, "infra_ao_pmic_tmr", "top_pwrap_ulposc", 0),
+	GATE_INFRA_AO0(CLK_INFRA_AO_PMIC_AP, "infra_ao_pmic_ap", "top_pwrap_ulposc", 1),
+	GATE_INFRA_AO0(CLK_INFRA_AO_PMIC_MD, "infra_ao_pmic_md", "top_pwrap_ulposc", 2),
+	GATE_INFRA_AO0(CLK_INFRA_AO_PMIC_CONN, "infra_ao_pmic_conn", "top_pwrap_ulposc", 3),
+	/* infra_ao_sej is main clock is for secure engine with JTAG support */
+	GATE_INFRA_AO0_FLAGS(CLK_INFRA_AO_SEJ, "infra_ao_sej", "top_axi", 5, CLK_IS_CRITICAL),
+	GATE_INFRA_AO0(CLK_INFRA_AO_APXGPT, "infra_ao_apxgpt", "top_axi", 6),
+	GATE_INFRA_AO0(CLK_INFRA_AO_GCE, "infra_ao_gce", "top_axi", 8),
+	GATE_INFRA_AO0(CLK_INFRA_AO_GCE2, "infra_ao_gce2", "top_axi", 9),
+	GATE_INFRA_AO0(CLK_INFRA_AO_THERM, "infra_ao_therm", "top_axi", 10),
+	GATE_INFRA_AO0(CLK_INFRA_AO_PWM_HCLK, "infra_ao_pwm_h", "top_axi", 15),
+	GATE_INFRA_AO0(CLK_INFRA_AO_PWM1, "infra_ao_pwm1", "top_pwm", 16),
+	GATE_INFRA_AO0(CLK_INFRA_AO_PWM2, "infra_ao_pwm2", "top_pwm", 17),
+	GATE_INFRA_AO0(CLK_INFRA_AO_PWM3, "infra_ao_pwm3", "top_pwm", 18),
+	GATE_INFRA_AO0(CLK_INFRA_AO_PWM4, "infra_ao_pwm4", "top_pwm", 19),
+	GATE_INFRA_AO0(CLK_INFRA_AO_PWM, "infra_ao_pwm", "top_pwm", 21),
+	GATE_INFRA_AO0(CLK_INFRA_AO_UART0, "infra_ao_uart0", "top_uart", 22),
+	GATE_INFRA_AO0(CLK_INFRA_AO_UART1, "infra_ao_uart1", "top_uart", 23),
+	GATE_INFRA_AO0(CLK_INFRA_AO_UART2, "infra_ao_uart2", "top_uart", 24),
+	GATE_INFRA_AO0(CLK_INFRA_AO_UART3, "infra_ao_uart3", "top_uart", 25),
+	GATE_INFRA_AO0(CLK_INFRA_AO_UART4, "infra_ao_uart4", "top_uart", 26),
+	GATE_INFRA_AO0(CLK_INFRA_AO_GCE_26M, "infra_ao_gce_26m", "clk26m", 27),
+	GATE_INFRA_AO0(CLK_INFRA_AO_CQ_DMA_FPC, "infra_ao_dma", "pad_fpc_ck", 28),
+	GATE_INFRA_AO0(CLK_INFRA_AO_UART5, "infra_ao_uart5", "top_uart", 29),
+	/* INFRA_AO1 */
+	GATE_INFRA_AO1(CLK_INFRA_AO_HDMI_26M, "infra_ao_hdmi_26m", "clk26m", 0),
+	GATE_INFRA_AO1(CLK_INFRA_AO_SPI0, "infra_ao_spi0", "top_spi", 1),
+	GATE_INFRA_AO1(CLK_INFRA_AO_MSDC0, "infra_ao_msdc0", "top_msdc5hclk", 2),
+	GATE_INFRA_AO1(CLK_INFRA_AO_MSDC1, "infra_ao_msdc1", "top_axi", 4),
+	GATE_INFRA_AO1(CLK_INFRA_AO_MSDC2, "infra_ao_msdc2", "top_axi", 5),
+	GATE_INFRA_AO1(CLK_INFRA_AO_MSDC0_SRC, "infra_ao_msdc0_clk", "top_msdc50_0", 6),
+	/* infra_ao_dvfsrc is for internal DVFS usage, should not be handled by Linux. */
+	GATE_INFRA_AO1_FLAGS(CLK_INFRA_AO_DVFSRC, "infra_ao_dvfsrc",
+			     "clk26m", 7, CLK_IS_CRITICAL),
+	GATE_INFRA_AO1(CLK_INFRA_AO_TRNG, "infra_ao_trng", "top_axi", 9),
+	GATE_INFRA_AO1(CLK_INFRA_AO_AUXADC, "infra_ao_auxadc", "clk26m", 10),
+	GATE_INFRA_AO1(CLK_INFRA_AO_CPUM, "infra_ao_cpum", "top_axi", 11),
+	GATE_INFRA_AO1(CLK_INFRA_AO_HDMI_32K, "infra_ao_hdmi_32k", "clk32k", 12),
+	GATE_INFRA_AO1(CLK_INFRA_AO_CEC_66M_HCLK, "infra_ao_cec_66m_hclk", "top_axi", 13),
+	GATE_INFRA_AO1(CLK_INFRA_AO_PCIE_TL_26M, "infra_ao_pcie_tl_26m", "clk26m", 15),
+	GATE_INFRA_AO1(CLK_INFRA_AO_MSDC1_SRC, "infra_ao_msdc1_clk", "top_msdc30_1", 16),
+	GATE_INFRA_AO1(CLK_INFRA_AO_CEC_66M_BCLK, "infra_ao_cec_66m_bclk", "top_axi", 17),
+	GATE_INFRA_AO1(CLK_INFRA_AO_PCIE_TL_96M, "infra_ao_pcie_tl_96m", "top_tl", 18),
+	/* infra_ao_dapc is for device access permission control module */
+	GATE_INFRA_AO1_FLAGS(CLK_INFRA_AO_DEVICE_APC, "infra_ao_dapc",
+			     "top_axi", 20, CLK_IS_CRITICAL),
+	GATE_INFRA_AO1(CLK_INFRA_AO_ECC_66M_HCLK, "infra_ao_ecc_66m_hclk", "top_axi", 23),
+	GATE_INFRA_AO1(CLK_INFRA_AO_DEBUGSYS, "infra_ao_debugsys", "top_axi", 24),
+	GATE_INFRA_AO1(CLK_INFRA_AO_AUDIO, "infra_ao_audio", "top_axi", 25),
+	GATE_INFRA_AO1(CLK_INFRA_AO_PCIE_TL_32K, "infra_ao_pcie_tl_32k", "clk32k", 26),
+	GATE_INFRA_AO1(CLK_INFRA_AO_DBG_TRACE, "infra_ao_dbg_trace", "top_axi", 29),
+	GATE_INFRA_AO1(CLK_INFRA_AO_DRAMC_F26M, "infra_ao_dramc26", "clk26m", 31),
+	/* INFRA_AO2 */
+	GATE_INFRA_AO2(CLK_INFRA_AO_IRTX, "infra_ao_irtx", "top_axi", 0),
+	GATE_INFRA_AO2(CLK_INFRA_AO_DISP_PWM, "infra_ao_disp_pwm", "top_disp_pwm0", 2),
+	GATE_INFRA_AO2(CLK_INFRA_AO_CLDMA_BCLK, "infra_ao_cldmabclk", "top_axi", 3),
+	GATE_INFRA_AO2(CLK_INFRA_AO_AUDIO_26M_BCLK, "infra_ao_audio26m", "clk26m", 4),
+	GATE_INFRA_AO2(CLK_INFRA_AO_SPI1, "infra_ao_spi1", "top_spi", 6),
+	GATE_INFRA_AO2(CLK_INFRA_AO_SPI2, "infra_ao_spi2", "top_spi", 9),
+	GATE_INFRA_AO2(CLK_INFRA_AO_SPI3, "infra_ao_spi3", "top_spi", 10),
+	GATE_INFRA_AO2(CLK_INFRA_AO_FSSPM, "infra_ao_fsspm", "top_sspm", 15),
+	GATE_INFRA_AO2(CLK_INFRA_AO_SSPM_BUS_HCLK, "infra_ao_sspm_hclk", "top_axi", 17),
+	GATE_INFRA_AO2(CLK_INFRA_AO_APDMA_BCLK, "infra_ao_apdma_bclk", "top_axi", 18),
+	GATE_INFRA_AO2(CLK_INFRA_AO_SPI4, "infra_ao_spi4", "top_spi", 25),
+	GATE_INFRA_AO2(CLK_INFRA_AO_SPI5, "infra_ao_spi5", "top_spi", 26),
+	GATE_INFRA_AO2(CLK_INFRA_AO_CQ_DMA, "infra_ao_cq_dma", "top_axi", 27),
+	/* INFRA_AO3 */
+	GATE_INFRA_AO3(CLK_INFRA_AO_MSDC0_SELF, "infra_ao_msdc0sf", "top_msdc50_0", 0),
+	GATE_INFRA_AO3(CLK_INFRA_AO_MSDC1_SELF, "infra_ao_msdc1sf", "top_msdc50_0", 1),
+	GATE_INFRA_AO3(CLK_INFRA_AO_MSDC2_SELF, "infra_ao_msdc2sf", "top_msdc50_0", 2),
+	GATE_INFRA_AO3(CLK_INFRA_AO_I2S_DMA, "infra_ao_i2s_dma", "top_axi", 5),
+	GATE_INFRA_AO3(CLK_INFRA_AO_AP_MSDC0, "infra_ao_ap_msdc0", "top_msdc50_0", 7),
+	GATE_INFRA_AO3(CLK_INFRA_AO_MD_MSDC0, "infra_ao_md_msdc0", "top_msdc50_0", 8),
+	GATE_INFRA_AO3(CLK_INFRA_AO_MSDC30_2, "infra_ao_msdc30_2", "top_msdc30_2", 9),
+	GATE_INFRA_AO3(CLK_INFRA_AO_GCPU, "infra_ao_gcpu", "top_gcpu", 10),
+	GATE_INFRA_AO3(CLK_INFRA_AO_PCIE_PERI_26M, "infra_ao_pcie_peri_26m", "clk26m", 15),
+	GATE_INFRA_AO3(CLK_INFRA_AO_GCPU_66M_BCLK, "infra_ao_gcpu_66m_bclk", "top_axi", 16),
+	GATE_INFRA_AO3(CLK_INFRA_AO_GCPU_133M_BCLK, "infra_ao_gcpu_133m_bclk", "top_axi", 17),
+	GATE_INFRA_AO3(CLK_INFRA_AO_DISP_PWM1, "infra_ao_disp_pwm1", "top_disp_pwm1", 20),
+	GATE_INFRA_AO3(CLK_INFRA_AO_FBIST2FPC, "infra_ao_fbist2fpc", "top_msdc50_0", 24),
+	/* infra_ao_dapc_sync is for device access permission control module */
+	GATE_INFRA_AO3_FLAGS(CLK_INFRA_AO_DEVICE_APC_SYNC, "infra_ao_dapc_sync",
+			     "top_axi", 25, CLK_IS_CRITICAL),
+	GATE_INFRA_AO3(CLK_INFRA_AO_PCIE_P1_PERI_26M, "infra_ao_pcie_p1_peri_26m", "clk26m", 26),
+	/* INFRA_AO4 */
+	/* infra_ao_133m_mclk_set/infra_ao_66m_mclk_set are main clocks of peripheral */
+	GATE_INFRA_AO4_FLAGS(CLK_INFRA_AO_133M_MCLK_CK, "infra_ao_133m_mclk_set",
+			     "top_axi", 0, CLK_IS_CRITICAL),
+	GATE_INFRA_AO4_FLAGS(CLK_INFRA_AO_66M_MCLK_CK, "infra_ao_66m_mclk_set",
+			     "top_axi", 1, CLK_IS_CRITICAL),
+	GATE_INFRA_AO4(CLK_INFRA_AO_PCIE_PL_P_250M_P0, "infra_ao_pcie_pl_p_250m_p0",
+		       "pextp_pipe", 7),
+	GATE_INFRA_AO4(CLK_INFRA_AO_RG_AES_MSDCFDE_CK_0P,
+		       "infra_ao_aes_msdcfde_0p", "top_aes_msdcfde", 18),
+};
+
+static const struct mtk_clk_desc infra_ao_desc = {
+	.clks = infra_ao_clks,
+	.num_clks = ARRAY_SIZE(infra_ao_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8188_infra_ao[] = {
+	{ .compatible = "mediatek,mt8188-infracfg-ao", .data = &infra_ao_desc },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8188_infra_ao_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8188-infra_ao",
+		.of_match_table = of_match_clk_mt8188_infra_ao,
+	},
+};
+builtin_platform_driver(clk_mt8188_infra_ao_drv);
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:44 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:44 +0800
Subject: [PATCH v3 06/19] clk: mediatek: Add MT8188 camsys clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-7-Garmin.Chang@mediatek.com>

Add MT8188 camsys clock controllers which provide clock gate
control for camera IP blocks.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile         |   3 +-
 drivers/clk/mediatek/clk-mt8188-cam.c | 118 ++++++++++++++++++++++++++
 2 files changed, 120 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-cam.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index a3393782f7e1..dc247bf67e8b 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -84,7 +84,8 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-mcu.o clk-mt8186-topckgen.o clk-mt
 				   clk-mt8186-img.o clk-mt8186-vdec.o clk-mt8186-venc.o \
 				   clk-mt8186-cam.o clk-mt8186-mdp.o clk-mt8186-ipe.o
 obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o \
-				   clk-mt8188-peri_ao.o clk-mt8188-infra_ao.o
+				   clk-mt8188-peri_ao.o clk-mt8188-infra_ao.o \
+				   clk-mt8188-cam.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-cam.c b/drivers/clk/mediatek/clk-mt8188-cam.c
new file mode 100644
index 000000000000..5f7cf9db12f2
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-cam.c
@@ -0,0 +1,118 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs cam_cg_regs = {
+	.set_ofs = 0x4,
+	.clr_ofs = 0x8,
+	.sta_ofs = 0x0,
+};
+
+#define GATE_CAM(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &cam_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
+
+static const struct mtk_gate cam_main_clks[] = {
+	GATE_CAM(CLK_CAM_MAIN_LARB13, "cam_main_larb13", "top_cam", 0),
+	GATE_CAM(CLK_CAM_MAIN_LARB14, "cam_main_larb14", "top_cam", 1),
+	GATE_CAM(CLK_CAM_MAIN_CAM, "cam_main_cam", "top_cam", 2),
+	GATE_CAM(CLK_CAM_MAIN_CAM_SUBA, "cam_main_cam_suba", "top_cam", 3),
+	GATE_CAM(CLK_CAM_MAIN_CAM_SUBB, "cam_main_cam_subb", "top_cam", 4),
+	GATE_CAM(CLK_CAM_MAIN_CAMTG, "cam_main_camtg", "top_cam", 7),
+	GATE_CAM(CLK_CAM_MAIN_SENINF, "cam_main_seninf", "top_cam", 8),
+	GATE_CAM(CLK_CAM_MAIN_GCAMSVA, "cam_main_gcamsva", "top_cam", 9),
+	GATE_CAM(CLK_CAM_MAIN_GCAMSVB, "cam_main_gcamsvb", "top_cam", 10),
+	GATE_CAM(CLK_CAM_MAIN_GCAMSVC, "cam_main_gcamsvc", "top_cam", 11),
+	GATE_CAM(CLK_CAM_MAIN_GCAMSVD, "cam_main_gcamsvd", "top_cam", 12),
+	GATE_CAM(CLK_CAM_MAIN_GCAMSVE, "cam_main_gcamsve", "top_cam", 13),
+	GATE_CAM(CLK_CAM_MAIN_GCAMSVF, "cam_main_gcamsvf", "top_cam", 14),
+	GATE_CAM(CLK_CAM_MAIN_GCAMSVG, "cam_main_gcamsvg", "top_cam", 15),
+	GATE_CAM(CLK_CAM_MAIN_GCAMSVH, "cam_main_gcamsvh", "top_cam", 16),
+	GATE_CAM(CLK_CAM_MAIN_GCAMSVI, "cam_main_gcamsvi", "top_cam", 17),
+	GATE_CAM(CLK_CAM_MAIN_GCAMSVJ, "cam_main_gcamsvj", "top_cam", 18),
+	GATE_CAM(CLK_CAM_MAIN_CAMSV_TOP, "cam_main_camsv", "top_cam", 19),
+	GATE_CAM(CLK_CAM_MAIN_CAMSV_CQ_A, "cam_main_camsv_cq_a", "top_cam", 20),
+	GATE_CAM(CLK_CAM_MAIN_CAMSV_CQ_B, "cam_main_camsv_cq_b", "top_cam", 21),
+	GATE_CAM(CLK_CAM_MAIN_CAMSV_CQ_C, "cam_main_camsv_cq_c", "top_cam", 22),
+	GATE_CAM(CLK_CAM_MAIN_FAKE_ENG, "cam_main_fake_eng", "top_cam", 28),
+	GATE_CAM(CLK_CAM_MAIN_CAM2MM0_GALS, "cam_main_cam2mm0_gals", "top_cam", 29),
+	GATE_CAM(CLK_CAM_MAIN_CAM2MM1_GALS, "cam_main_cam2mm1_gals", "top_cam", 30),
+	GATE_CAM(CLK_CAM_MAIN_CAM2SYS_GALS, "cam_main_cam2sys_gals", "top_cam", 31),
+};
+
+static const struct mtk_gate cam_rawa_clks[] = {
+	GATE_CAM(CLK_CAM_RAWA_LARBX, "cam_rawa_larbx", "top_cam", 0),
+	GATE_CAM(CLK_CAM_RAWA_CAM, "cam_rawa_cam", "top_cam", 1),
+	GATE_CAM(CLK_CAM_RAWA_CAMTG, "cam_rawa_camtg", "top_cam", 2),
+};
+
+static const struct mtk_gate cam_rawb_clks[] = {
+	GATE_CAM(CLK_CAM_RAWB_LARBX, "cam_rawb_larbx", "top_cam", 0),
+	GATE_CAM(CLK_CAM_RAWB_CAM, "cam_rawb_cam", "top_cam", 1),
+	GATE_CAM(CLK_CAM_RAWB_CAMTG, "cam_rawb_camtg", "top_cam", 2),
+};
+
+static const struct mtk_gate cam_yuva_clks[] = {
+	GATE_CAM(CLK_CAM_YUVA_LARBX, "cam_yuva_larbx", "top_cam", 0),
+	GATE_CAM(CLK_CAM_YUVA_CAM, "cam_yuva_cam", "top_cam", 1),
+	GATE_CAM(CLK_CAM_YUVA_CAMTG, "cam_yuva_camtg", "top_cam", 2),
+};
+
+static const struct mtk_gate cam_yuvb_clks[] = {
+	GATE_CAM(CLK_CAM_YUVB_LARBX, "cam_yuvb_larbx", "top_cam", 0),
+	GATE_CAM(CLK_CAM_YUVB_CAM, "cam_yuvb_cam", "top_cam", 1),
+	GATE_CAM(CLK_CAM_YUVB_CAMTG, "cam_yuvb_camtg", "top_cam", 2),
+};
+
+static const struct mtk_clk_desc cam_main_desc = {
+	.clks = cam_main_clks,
+	.num_clks = ARRAY_SIZE(cam_main_clks),
+};
+
+static const struct mtk_clk_desc cam_rawa_desc = {
+	.clks = cam_rawa_clks,
+	.num_clks = ARRAY_SIZE(cam_rawa_clks),
+};
+
+static const struct mtk_clk_desc cam_rawb_desc = {
+	.clks = cam_rawb_clks,
+	.num_clks = ARRAY_SIZE(cam_rawb_clks),
+};
+
+static const struct mtk_clk_desc cam_yuva_desc = {
+	.clks = cam_yuva_clks,
+	.num_clks = ARRAY_SIZE(cam_yuva_clks),
+};
+
+static const struct mtk_clk_desc cam_yuvb_desc = {
+	.clks = cam_yuvb_clks,
+	.num_clks = ARRAY_SIZE(cam_yuvb_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8188_cam[] = {
+	{ .compatible = "mediatek,mt8188-camsys", .data = &cam_main_desc },
+	{ .compatible = "mediatek,mt8188-camsys-rawa", .data = &cam_rawa_desc },
+	{ .compatible = "mediatek,mt8188-camsys-rawb", .data = &cam_rawb_desc },
+	{ .compatible = "mediatek,mt8188-camsys-yuva", .data = &cam_yuva_desc },
+	{ .compatible = "mediatek,mt8188-camsys-yuvb", .data = &cam_yuvb_desc },
+	{ /* sentinel */}
+};
+
+static struct platform_driver clk_mt8188_cam_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8188-cam",
+		.of_match_table = of_match_clk_mt8188_cam,
+	},
+};
+
+builtin_platform_driver(clk_mt8188_cam_drv);
+MODULE_LICENSE("GPL");
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:48 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:48 +0800
Subject: [PATCH v3 10/19] clk: mediatek: Add MT8188 mfgcfg clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-11-Garmin.Chang@mediatek.com>

Add MT8188 mfg clock controller which provides clock gate
control for GPU.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile         |  2 +-
 drivers/clk/mediatek/clk-mt8188-mfg.c | 47 +++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-mfg.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index 4a599122f761..a0fd87a882b5 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -86,7 +86,7 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-mcu.o clk-mt8186-topckgen.o clk-mt
 obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o \
 				   clk-mt8188-peri_ao.o clk-mt8188-infra_ao.o \
 				   clk-mt8188-cam.o clk-mt8188-ccu.o clk-mt8188-img.o \
-				   clk-mt8188-ipe.o
+				   clk-mt8188-ipe.o clk-mt8188-mfg.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-mfg.c b/drivers/clk/mediatek/clk-mt8188-mfg.c
new file mode 100644
index 000000000000..57b0afb5f4df
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-mfg.c
@@ -0,0 +1,47 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/clk-provider.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+
+static const struct mtk_gate_regs mfgcfg_cg_regs = {
+	.set_ofs = 0x4,
+	.clr_ofs = 0x8,
+	.sta_ofs = 0x0,
+};
+
+#define GATE_MFG(_id, _name, _parent, _shift)				\
+	GATE_MTK_FLAGS(_id, _name, _parent, &mfgcfg_cg_regs, _shift,	\
+		       &mtk_clk_gate_ops_setclr, CLK_SET_RATE_PARENT)
+
+static const struct mtk_gate mfgcfg_clks[] = {
+	GATE_MFG(CLK_MFGCFG_BG3D, "mfgcfg_bg3d", "top_mfg_core_tmp", 0),
+};
+
+static const struct mtk_clk_desc mfgcfg_desc = {
+	.clks = mfgcfg_clks,
+	.num_clks = ARRAY_SIZE(mfgcfg_clks),
+};
+
+static const struct of_device_id of_match_clk_mt8188_mfgcfg[] = {
+	{ .compatible = "mediatek,mt8188-mfgcfg", .data = &mfgcfg_desc, },
+	{ /* sentinel */ }
+};
+
+static struct platform_driver clk_mt8188_mfgcfg_drv = {
+	.probe = mtk_clk_simple_probe,
+	.remove = mtk_clk_simple_remove,
+	.driver = {
+		.name = "clk-mt8188-mfgcfg",
+		.of_match_table = of_match_clk_mt8188_mfgcfg,
+	},
+};
+
+builtin_platform_driver(clk_mt8188_mfgcfg_drv);
+MODULE_LICENSE("GPL");
-- 
2.18.0



From wenst at chromium.org  Fri Dec 30 00:06:35 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 16:06:35 +0800
Subject: [PATCH v2 15/23] clk: mediatek: mt8192: Join top_adj_divs and top_muxes
In-Reply-To: <20221223094259.87373-16-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-16-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5H9FqFeng+dev2A-W6FPuWvVuLMgSgVcubwE7NLCy58pw@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> These two are both mtk_composite arrays, one dependent on another, but
> that's something that the clock framework is supposed to sort out and
> anyway registering them separately isn't going to ease the framework's
> job in checking dependencies.
>
> Put the contents of top_adj_divs in top_muxes to join them together
> and register them in one shot.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> ---
>  drivers/clk/mediatek/clk-mt8192.c | 13 ++-----------
>  1 file changed, 2 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c
> index ec9dc7fe848e..702770326286 100644
> --- a/drivers/clk/mediatek/clk-mt8192.c
> +++ b/drivers/clk/mediatek/clk-mt8192.c
> @@ -698,9 +698,7 @@ static struct mtk_composite top_muxes[] = {
>         MUX(CLK_TOP_APLL_I2S7_M_SEL, "apll_i2s7_m_sel", apll_i2s_m_parents, 0x320, 23, 1),
>         MUX(CLK_TOP_APLL_I2S8_M_SEL, "apll_i2s8_m_sel", apll_i2s_m_parents, 0x320, 24, 1),
>         MUX(CLK_TOP_APLL_I2S9_M_SEL, "apll_i2s9_m_sel", apll_i2s_m_parents, 0x320, 25, 1),
> -};
> -
> -static const struct mtk_composite top_adj_divs[] = {
> +       /* APLL_DIV */

This would be CLK_AUDDIV_2 ~ 4 actually. 4 dividers per register.

Otherwise,

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>


From wenst at chromium.org  Fri Dec 30 00:09:59 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 16:09:59 +0800
Subject: [PATCH v2 15/23] clk: mediatek: mt8192: Join top_adj_divs and top_muxes
In-Reply-To: <20221228083123.15298-1-miles.chen@mediatek.com>
References: <20221223094259.87373-16-angelogioacchino.delregno@collabora.com> <20221228083123.15298-1-miles.chen@mediatek.com>
Message-ID: <CAGXv+5Hp3MFjLcP5z0t6QnYHN3VvVg_Og_HhvWNxm5o1q20B=g@mail.gmail.com>

On Wed, Dec 28, 2022 at 4:31 PM Miles Chen <miles.chen at mediatek.com> wrote:
>
> Hi,
>
> > These two are both mtk_composite arrays, one dependent on another, but
> > that's something that the clock framework is supposed to sort out and
> > anyway registering them separately isn't going to ease the framework's
> > job in checking dependencies.
> >
> > Put the contents of top_adj_divs in top_muxes to join them together
> > and register them in one shot.
> >
>
> In mt8192, we can join top_adj_divs and top_muxes:
>
> mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base, &mt8192_clk_lock,
>                 top_clk_data);
> mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base, &mt8192_clk_lock,
>                 top_clk_data);
>
> However, there are other top_adj_divs[] and top_muxes[] in different types so
> we cannot join them.
>
> For example:
> in drivers/clk/mediatek/clk-mt8167.c:mtk_topckgen_init():
>
> mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
>                 &mt8167_clk_lock, clk_data);
> mtk_clk_register_dividers(top_adj_divs, ARRAY_SIZE(top_adj_divs),
>                 base, &mt8167_clk_lock, clk_data);
>
> So we can join top_adj_divs and top_muxes in some platforms, but we
> cannot join top_adj_divs and top_muxes in some other platforms.
>
> I'm afraid that this will confuses people.

I think the confusion comes from the macro names. It's not exactly clear that
DIV_GATE is for composite clocks, while DIV_ADJ is for divider clocks.
Doubly so for the mux related types.

Either way, using the wrong macro or the wrong type will cause the compiler
to complain, so I think it's something we can live with. If it's still not
working out, maybe we should rethink the naming.

ChenYu


From wenst at chromium.org  Fri Dec 30 00:12:44 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 16:12:44 +0800
Subject: [PATCH v2 18/23] clk: mediatek: clk-mtk: Register MFG notifier in mtk_clk_simple_probe()
In-Reply-To: <20221229082103.21064-1-miles.chen@mediatek.com>
References: <20221223094259.87373-19-angelogioacchino.delregno@collabora.com> <20221229082103.21064-1-miles.chen@mediatek.com>
Message-ID: <CAGXv+5Eq=VDfM35u0bxAS_-Dxv9yUpNAFqar_nCyC=5tXbtMFw@mail.gmail.com>

On Thu, Dec 29, 2022 at 4:21 PM Miles Chen <miles.chen at mediatek.com> wrote:
>
> >In preparation for commonizing topckgen probe on various MediaTek SoCs
> >clock drivers, add the ability to register the MFG MUX notifier in
> >mtk_clk_simple_probe() by passing a custom notifier register function
> >pointer, as this function will be slightly different across different
> >SoCs.
> >
> >Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> >---
> > drivers/clk/mediatek/clk-mtk.c | 8 ++++++++
> > drivers/clk/mediatek/clk-mtk.h | 3 +++
> > 2 files changed, 11 insertions(+)
> >
> >diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
> >index b0a6225cd7b2..df6281492fb6 100644
> >--- a/drivers/clk/mediatek/clk-mtk.c
> >+++ b/drivers/clk/mediatek/clk-mtk.c
> >@@ -533,6 +533,14 @@ int mtk_clk_simple_probe(struct platform_device *pdev)
> >                       goto unregister_composites;
> >       }
> >
> >+      if (mcd->clk_notifier_func) {
> >+              struct clk *mfg_mux = clk_data->hws[mcd->mfg_clk_idx]->clk;
> >+
> >+              r = mcd->clk_notifier_func(&pdev->dev, mfg_mux);
> >+              if (r)
> >+                      goto unregister_clks;
> >+      }
>
> Should we have a IS_ERR_OR_NULL() check for clk_data->hws[mcd->mfg_clk_idx]?

With a big warning to signal that something in the driver isn't written
correctly, such as no MFG clock actually being included in the driver.

ChenYu


From wenst at chromium.org  Fri Dec 30 00:13:42 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 16:13:42 +0800
Subject: [PATCH v2 21/23] clk: mediatek: clk-mt6795-topckgen: Migrate to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-22-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-22-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5Eoiaf7RovpHeizYxpFO-xw2NHneig_CUc4cxL-i7Xhew@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Migrate away from custom probe functions and use the commonized
> mtk_clk_simple_{probe, remove}().
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>


From wenst at chromium.org  Fri Dec 30 00:14:24 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 16:14:24 +0800
Subject: [PATCH v2 23/23] clk: mediatek: clk-mt7986-topckgen: Migrate to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-24-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-24-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5HtEE_1wFOHwXLe+gJrcEgs63g-UpiiRXoSqh+fZW=N+Q@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> There are no more non-common calls in clk_mt7986_topckgen_probe():
> migrate this driver to mtk_clk_simple_probe().
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>


From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:39 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:39 +0800
Subject: [PATCH v3 01/19] dt-bindings: ARM: MediaTek: Add new document bindings of MT8188 clock
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-2-Garmin.Chang@mediatek.com>

Add the new binding documentation for system clock
and functional clock on MediaTek MT8188.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 .../arm/mediatek/mediatek,mt8188-clock.yaml   |  71 ++
 .../mediatek/mediatek,mt8188-sys-clock.yaml   |  55 ++
 .../dt-bindings/clock/mediatek,mt8188-clk.h   | 733 ++++++++++++++++++
 3 files changed, 859 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-clock.yaml
 create mode 100644 Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-sys-clock.yaml
 create mode 100644 include/dt-bindings/clock/mediatek,mt8188-clk.h

diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-clock.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-clock.yaml
new file mode 100644
index 000000000000..6654cead71f6
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-clock.yaml
@@ -0,0 +1,71 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/arm/mediatek/mediatek,mt8188-clock.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek Functional Clock Controller for MT8188
+
+maintainers:
+  - Garmin Chang <garmin.chang at mediatek.com>
+
+description: |
+  The clock architecture in MediaTek like below
+  PLLs -->
+          dividers -->
+                      muxes
+                           -->
+                              clock gate
+
+  The devices provide clock gate control in different IP blocks.
+
+properties:
+  compatible:
+    enum:
+      - mediatek,mt8188-adsp-audio26m
+      - mediatek,mt8188-imp-iic-wrap-c
+      - mediatek,mt8188-imp-iic-wrap-en
+      - mediatek,mt8188-imp-iic-wrap-w
+      - mediatek,mt8188-mfgcfg
+      - mediatek,mt8188-vppsys0
+      - mediatek,mt8188-wpesys
+      - mediatek,mt8188-wpesys-vpp0
+      - mediatek,mt8188-vppsys1
+      - mediatek,mt8188-imgsys
+      - mediatek,mt8188-imgsys-wpe1
+      - mediatek,mt8188-imgsys-wpe2
+      - mediatek,mt8188-imgsys-wpe3
+      - mediatek,mt8188-imgsys1-dip-top
+      - mediatek,mt8188-imgsys1-dip-nr
+      - mediatek,mt8188-ipesys
+      - mediatek,mt8188-camsys
+      - mediatek,mt8188-camsys-rawa
+      - mediatek,mt8188-camsys-yuva
+      - mediatek,mt8188-camsys-rawb
+      - mediatek,mt8188-camsys-yuvb
+      - mediatek,mt8188-ccusys
+      - mediatek,mt8188-vdecsys-soc
+      - mediatek,mt8188-vdecsys
+      - mediatek,mt8188-vencsys
+
+  reg:
+    maxItems: 1
+
+  '#clock-cells':
+    const: 1
+
+required:
+  - compatible
+  - reg
+  - '#clock-cells'
+
+additionalProperties: false
+
+examples:
+  - |
+    clock-controller at 11283000 {
+        compatible = "mediatek,mt8188-imp-iic-wrap-c";
+        reg = <0x11283000 0x1000>;
+        #clock-cells = <1>;
+    };
+
diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-sys-clock.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-sys-clock.yaml
new file mode 100644
index 000000000000..2b28df1ff895
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-sys-clock.yaml
@@ -0,0 +1,55 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/arm/mediatek/mediatek,mt8188-sys-clock.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek System Clock Controller for MT8188
+
+maintainers:
+  - Garmin Chang <garmin.chang at mediatek.com>
+
+description: |
+  The clock architecture in MediaTek like below
+  PLLs -->
+          dividers -->
+                      muxes
+                           -->
+                              clock gate
+
+  The apmixedsys provides most of PLLs which generated from SoC 26m.
+  The topckgen provides dividers and muxes which provide the clock source to other IP blocks.
+  The infracfg_ao provides clock gate in peripheral and infrastructure IP blocks.
+  The mcusys provides mux control to select the clock source in AP MCU.
+  The device nodes also provide the system control capacity for configuration.
+
+properties:
+  compatible:
+    items:
+      - enum:
+          - mediatek,mt8188-topckgen
+          - mediatek,mt8188-infracfg-ao
+          - mediatek,mt8188-apmixedsys
+          - mediatek,mt8188-pericfg-ao
+      - const: syscon
+
+  reg:
+    maxItems: 1
+
+  '#clock-cells':
+    const: 1
+
+required:
+  - compatible
+  - reg
+  - '#clock-cells'
+
+additionalProperties: false
+
+examples:
+  - |
+    syscon at 10000000 {
+        compatible = "mediatek,mt8188-topckgen", "syscon";
+        reg = <0x10000000 0x1000>;
+        #clock-cells = <1>;
+    };
diff --git a/include/dt-bindings/clock/mediatek,mt8188-clk.h b/include/dt-bindings/clock/mediatek,mt8188-clk.h
new file mode 100644
index 000000000000..3e37373ca459
--- /dev/null
+++ b/include/dt-bindings/clock/mediatek,mt8188-clk.h
@@ -0,0 +1,733 @@
+/* SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Garmin Chang <garmin.chang at mediatek.com>
+ */
+
+#ifndef _DT_BINDINGS_CLK_MT8188_H
+#define _DT_BINDINGS_CLK_MT8188_H
+
+/* TOPCKGEN */
+#define CLK_TOP_AXI				0
+#define CLK_TOP_SPM				1
+#define CLK_TOP_SCP				2
+#define CLK_TOP_BUS_AXIMEM			3
+#define CLK_TOP_VPP				4
+#define CLK_TOP_ETHDR				5
+#define CLK_TOP_IPE				6
+#define CLK_TOP_CAM				7
+#define CLK_TOP_CCU				8
+#define CLK_TOP_CCU_AHB				9
+#define CLK_TOP_IMG				10
+#define CLK_TOP_CAMTM				11
+#define CLK_TOP_DSP				12
+#define CLK_TOP_DSP1				13
+#define CLK_TOP_DSP2				14
+#define CLK_TOP_DSP3				15
+#define CLK_TOP_DSP4				16
+#define CLK_TOP_DSP5				17
+#define CLK_TOP_DSP6				18
+#define CLK_TOP_DSP7				19
+#define CLK_TOP_MFG_CORE_TMP			20
+#define CLK_TOP_CAMTG				21
+#define CLK_TOP_CAMTG2				22
+#define CLK_TOP_CAMTG3				23
+#define CLK_TOP_UART				24
+#define CLK_TOP_SPI				25
+#define CLK_TOP_MSDC50_0_HCLK			26
+#define CLK_TOP_MSDC50_0			27
+#define CLK_TOP_MSDC30_1			28
+#define CLK_TOP_MSDC30_2			29
+#define CLK_TOP_INTDIR				30
+#define CLK_TOP_AUD_INTBUS			31
+#define CLK_TOP_AUDIO_H				32
+#define CLK_TOP_PWRAP_ULPOSC			33
+#define CLK_TOP_ATB				34
+#define CLK_TOP_SSPM				35
+#define CLK_TOP_DP				36
+#define CLK_TOP_EDP				37
+#define CLK_TOP_DPI				38
+#define CLK_TOP_DISP_PWM0			39
+#define CLK_TOP_DISP_PWM1			40
+#define CLK_TOP_USB_TOP				41
+#define CLK_TOP_SSUSB_XHCI			42
+#define CLK_TOP_USB_TOP_2P			43
+#define CLK_TOP_SSUSB_XHCI_2P			44
+#define CLK_TOP_USB_TOP_3P			45
+#define CLK_TOP_SSUSB_XHCI_3P			46
+#define CLK_TOP_I2C				47
+#define CLK_TOP_SENINF				48
+#define CLK_TOP_SENINF1				49
+#define CLK_TOP_GCPU				50
+#define CLK_TOP_VENC				51
+#define CLK_TOP_VDEC				52
+#define CLK_TOP_PWM				53
+#define CLK_TOP_MCUPM				54
+#define CLK_TOP_SPMI_P_MST			55
+#define CLK_TOP_SPMI_M_MST			56
+#define CLK_TOP_DVFSRC				57
+#define CLK_TOP_TL				58
+#define CLK_TOP_AES_MSDCFDE			59
+#define CLK_TOP_DSI_OCC				60
+#define CLK_TOP_WPE_VPP				61
+#define CLK_TOP_HDCP				62
+#define CLK_TOP_HDCP_24M			63
+#define CLK_TOP_HDMI_APB			64
+#define CLK_TOP_SNPS_ETH_250M			65
+#define CLK_TOP_SNPS_ETH_62P4M_PTP		66
+#define CLK_TOP_SNPS_ETH_50M_RMII		67
+#define CLK_TOP_ADSP				68
+#define CLK_TOP_AUDIO_LOCAL_BUS			69
+#define CLK_TOP_ASM_H				70
+#define CLK_TOP_ASM_L				71
+#define CLK_TOP_APLL1				72
+#define CLK_TOP_APLL2				73
+#define CLK_TOP_APLL3				74
+#define CLK_TOP_APLL4				75
+#define CLK_TOP_APLL5				76
+#define CLK_TOP_I2SO1				77
+#define CLK_TOP_I2SO2				78
+#define CLK_TOP_I2SI1				79
+#define CLK_TOP_I2SI2				80
+#define CLK_TOP_DPTX				81
+#define CLK_TOP_AUD_IEC				82
+#define CLK_TOP_A1SYS_HP			83
+#define CLK_TOP_A2SYS				84
+#define CLK_TOP_A3SYS				85
+#define CLK_TOP_A4SYS				86
+#define CLK_TOP_ECC				87
+#define CLK_TOP_SPINOR				88
+#define CLK_TOP_ULPOSC				89
+#define CLK_TOP_SRCK				90
+#define CLK_TOP_MFG_CK_FAST_REF			91
+#define CLK_TOP_MFGPLL				92
+#define CLK_TOP_MAINPLL				93
+#define CLK_TOP_MAINPLL_D3			94
+#define CLK_TOP_MAINPLL_D4			95
+#define CLK_TOP_MAINPLL_D4_D2			96
+#define CLK_TOP_MAINPLL_D4_D4			97
+#define CLK_TOP_MAINPLL_D4_D8			98
+#define CLK_TOP_MAINPLL_D5			99
+#define CLK_TOP_MAINPLL_D5_D2			100
+#define CLK_TOP_MAINPLL_D5_D4			101
+#define CLK_TOP_MAINPLL_D5_D8			102
+#define CLK_TOP_MAINPLL_D6			103
+#define CLK_TOP_MAINPLL_D6_D2			104
+#define CLK_TOP_MAINPLL_D6_D4			105
+#define CLK_TOP_MAINPLL_D6_D8			106
+#define CLK_TOP_MAINPLL_D7			107
+#define CLK_TOP_MAINPLL_D7_D2			108
+#define CLK_TOP_MAINPLL_D7_D4			109
+#define CLK_TOP_MAINPLL_D7_D8			110
+#define CLK_TOP_MAINPLL_D9			111
+#define CLK_TOP_UNIVPLL				112
+#define CLK_TOP_UNIVPLL_D2			113
+#define CLK_TOP_UNIVPLL_D3			114
+#define CLK_TOP_UNIVPLL_D4			115
+#define CLK_TOP_UNIVPLL_D4_D2			116
+#define CLK_TOP_UNIVPLL_D4_D4			117
+#define CLK_TOP_UNIVPLL_D4_D8			118
+#define CLK_TOP_UNIVPLL_D5			119
+#define CLK_TOP_UNIVPLL_D5_D2			120
+#define CLK_TOP_UNIVPLL_D5_D4			121
+#define CLK_TOP_UNIVPLL_D5_D8			122
+#define CLK_TOP_UNIVPLL_D6			123
+#define CLK_TOP_UNIVPLL_D6_D2			124
+#define CLK_TOP_UNIVPLL_D6_D4			125
+#define CLK_TOP_UNIVPLL_D6_D8			126
+#define CLK_TOP_UNIVPLL_D7			127
+#define CLK_TOP_UNIVPLL_192M			128
+#define CLK_TOP_UNIVPLL_192M_D4			129
+#define CLK_TOP_UNIVPLL_192M_D8			130
+#define CLK_TOP_UNIVPLL_192M_D10		131
+#define CLK_TOP_UNIVPLL_192M_D16		132
+#define CLK_TOP_UNIVPLL_192M_D32		133
+#define CLK_TOP_IMGPLL				134
+#define CLK_TOP_APLL1_D3			135
+#define CLK_TOP_APLL1_D4			136
+#define CLK_TOP_APLL2_D3			137
+#define CLK_TOP_APLL2_D4			138
+#define CLK_TOP_APLL3_D4			139
+#define CLK_TOP_APLL4_D4			140
+#define CLK_TOP_APLL5_D4			141
+#define CLK_TOP_MMPLL				142
+#define CLK_TOP_MMPLL_D4			143
+#define CLK_TOP_MMPLL_D4_D2			144
+#define CLK_TOP_MMPLL_D5			145
+#define CLK_TOP_MMPLL_D5_D2			146
+#define CLK_TOP_MMPLL_D5_D4			147
+#define CLK_TOP_MMPLL_D6			148
+#define CLK_TOP_MMPLL_D6_D2			149
+#define CLK_TOP_MMPLL_D7			150
+#define CLK_TOP_MMPLL_D9			151
+#define CLK_TOP_TVDPLL1				152
+#define CLK_TOP_TVDPLL1_D2			153
+#define CLK_TOP_TVDPLL1_D4			154
+#define CLK_TOP_TVDPLL1_D8			155
+#define CLK_TOP_TVDPLL1_D16			156
+#define CLK_TOP_TVDPLL2				157
+#define CLK_TOP_TVDPLL2_D2			158
+#define CLK_TOP_TVDPLL2_D4			159
+#define CLK_TOP_TVDPLL2_D8			160
+#define CLK_TOP_TVDPLL2_D16			161
+#define CLK_TOP_MSDCPLL				162
+#define CLK_TOP_MSDCPLL_D2			163
+#define CLK_TOP_MSDCPLL_D16			164
+#define CLK_TOP_ETHPLL				165
+#define CLK_TOP_ETHPLL_D2			166
+#define CLK_TOP_ETHPLL_D4			167
+#define CLK_TOP_ETHPLL_D8			168
+#define CLK_TOP_ETHPLL_D10			169
+#define CLK_TOP_ADSPPLL				170
+#define CLK_TOP_ADSPPLL_D2			171
+#define CLK_TOP_ADSPPLL_D4			172
+#define CLK_TOP_ADSPPLL_D8			173
+#define CLK_TOP_ULPOSC1				174
+#define CLK_TOP_ULPOSC1_D2			175
+#define CLK_TOP_ULPOSC1_D4			176
+#define CLK_TOP_ULPOSC1_D8			177
+#define CLK_TOP_ULPOSC1_D7			178
+#define CLK_TOP_ULPOSC1_D10			179
+#define CLK_TOP_ULPOSC1_D16			180
+#define CLK_TOP_MPHONE_SLAVE_BCK		181
+#define CLK_TOP_PAD_FPC				182
+#define CLK_TOP_466M_FMEM			183
+#define CLK_TOP_PEXTP_PIPE			184
+#define CLK_TOP_DSI_PHY				185
+#define CLK_TOP_APLL12_CK_DIV0			186
+#define CLK_TOP_APLL12_CK_DIV1			187
+#define CLK_TOP_APLL12_CK_DIV2			188
+#define CLK_TOP_APLL12_CK_DIV3			189
+#define CLK_TOP_APLL12_CK_DIV4			190
+#define CLK_TOP_APLL12_CK_DIV9			191
+#define CLK_TOP_CFGREG_CLOCK_EN_VPP0		192
+#define CLK_TOP_CFGREG_CLOCK_EN_VPP1		193
+#define CLK_TOP_CFGREG_CLOCK_EN_VDO0		194
+#define CLK_TOP_CFGREG_CLOCK_EN_VDO1		195
+#define CLK_TOP_CFGREG_CLOCK_ISP_AXI_GALS	196
+#define CLK_TOP_CFGREG_F26M_VPP0		197
+#define CLK_TOP_CFGREG_F26M_VPP1		198
+#define CLK_TOP_CFGREG_F26M_VDO0		199
+#define CLK_TOP_CFGREG_F26M_VDO1		200
+#define CLK_TOP_CFGREG_AUD_F26M_AUD		201
+#define CLK_TOP_CFGREG_UNIPLL_SES		202
+#define CLK_TOP_CFGREG_F_PCIE_PHY_REF		203
+#define CLK_TOP_SSUSB_TOP_REF			204
+#define CLK_TOP_SSUSB_PHY_REF			205
+#define CLK_TOP_SSUSB_TOP_P1_REF		206
+#define CLK_TOP_SSUSB_PHY_P1_REF		207
+#define CLK_TOP_SSUSB_TOP_P2_REF		208
+#define CLK_TOP_SSUSB_PHY_P2_REF		209
+#define CLK_TOP_SSUSB_TOP_P3_REF		210
+#define CLK_TOP_SSUSB_PHY_P3_REF		211
+#define CLK_TOP_NR_CLK				212
+
+/* INFRACFG_AO */
+#define CLK_INFRA_AO_PMIC_TMR			0
+#define CLK_INFRA_AO_PMIC_AP			1
+#define CLK_INFRA_AO_PMIC_MD			2
+#define CLK_INFRA_AO_PMIC_CONN			3
+#define CLK_INFRA_AO_SEJ			4
+#define CLK_INFRA_AO_APXGPT			5
+#define CLK_INFRA_AO_GCE			6
+#define CLK_INFRA_AO_GCE2			7
+#define CLK_INFRA_AO_THERM			8
+#define CLK_INFRA_AO_PWM_HCLK			9
+#define CLK_INFRA_AO_PWM1			10
+#define CLK_INFRA_AO_PWM2			11
+#define CLK_INFRA_AO_PWM3			12
+#define CLK_INFRA_AO_PWM4			13
+#define CLK_INFRA_AO_PWM			14
+#define CLK_INFRA_AO_UART0			15
+#define CLK_INFRA_AO_UART1			16
+#define CLK_INFRA_AO_UART2			17
+#define CLK_INFRA_AO_UART3			18
+#define CLK_INFRA_AO_UART4			19
+#define CLK_INFRA_AO_GCE_26M			20
+#define CLK_INFRA_AO_CQ_DMA_FPC			21
+#define CLK_INFRA_AO_UART5			22
+#define CLK_INFRA_AO_HDMI_26M			23
+#define CLK_INFRA_AO_SPI0			24
+#define CLK_INFRA_AO_MSDC0			25
+#define CLK_INFRA_AO_MSDC1			26
+#define CLK_INFRA_AO_MSDC2			27
+#define CLK_INFRA_AO_MSDC0_SRC			28
+#define CLK_INFRA_AO_DVFSRC			29
+#define CLK_INFRA_AO_TRNG			30
+#define CLK_INFRA_AO_AUXADC			31
+#define CLK_INFRA_AO_CPUM			32
+#define CLK_INFRA_AO_HDMI_32K			33
+#define CLK_INFRA_AO_CEC_66M_HCLK		34
+#define CLK_INFRA_AO_PCIE_TL_26M		35
+#define CLK_INFRA_AO_MSDC1_SRC			36
+#define CLK_INFRA_AO_CEC_66M_BCLK		37
+#define CLK_INFRA_AO_PCIE_TL_96M		38
+#define CLK_INFRA_AO_DEVICE_APC			39
+#define CLK_INFRA_AO_ECC_66M_HCLK		40
+#define CLK_INFRA_AO_DEBUGSYS			41
+#define CLK_INFRA_AO_AUDIO			42
+#define CLK_INFRA_AO_PCIE_TL_32K		43
+#define CLK_INFRA_AO_DBG_TRACE			44
+#define CLK_INFRA_AO_DRAMC_F26M			45
+#define CLK_INFRA_AO_IRTX			46
+#define CLK_INFRA_AO_DISP_PWM			47
+#define CLK_INFRA_AO_CLDMA_BCLK			48
+#define CLK_INFRA_AO_AUDIO_26M_BCLK		49
+#define CLK_INFRA_AO_SPI1			50
+#define CLK_INFRA_AO_SPI2			51
+#define CLK_INFRA_AO_SPI3			52
+#define CLK_INFRA_AO_FSSPM			53
+#define CLK_INFRA_AO_SSPM_BUS_HCLK		54
+#define CLK_INFRA_AO_APDMA_BCLK			55
+#define CLK_INFRA_AO_SPI4			56
+#define CLK_INFRA_AO_SPI5			57
+#define CLK_INFRA_AO_CQ_DMA			58
+#define CLK_INFRA_AO_MSDC0_SELF			59
+#define CLK_INFRA_AO_MSDC1_SELF			60
+#define CLK_INFRA_AO_MSDC2_SELF			61
+#define CLK_INFRA_AO_I2S_DMA			62
+#define CLK_INFRA_AO_AP_MSDC0			63
+#define CLK_INFRA_AO_MD_MSDC0			64
+#define CLK_INFRA_AO_MSDC30_2			65
+#define CLK_INFRA_AO_GCPU			66
+#define CLK_INFRA_AO_PCIE_PERI_26M		67
+#define CLK_INFRA_AO_GCPU_66M_BCLK		68
+#define CLK_INFRA_AO_GCPU_133M_BCLK		69
+#define CLK_INFRA_AO_DISP_PWM1			70
+#define CLK_INFRA_AO_FBIST2FPC			71
+#define CLK_INFRA_AO_DEVICE_APC_SYNC		72
+#define CLK_INFRA_AO_PCIE_P1_PERI_26M		73
+#define CLK_INFRA_AO_133M_MCLK_CK		74
+#define CLK_INFRA_AO_66M_MCLK_CK		75
+#define CLK_INFRA_AO_PCIE_PL_P_250M_P0		76
+#define CLK_INFRA_AO_RG_AES_MSDCFDE_CK_0P	77
+#define CLK_INFRA_AO_NR_CLK			78
+
+/* APMIXEDSYS */
+#define CLK_APMIXED_ETHPLL			0
+#define CLK_APMIXED_MSDCPLL			1
+#define CLK_APMIXED_TVDPLL1			2
+#define CLK_APMIXED_TVDPLL2			3
+#define CLK_APMIXED_MMPLL			4
+#define CLK_APMIXED_MAINPLL			5
+#define CLK_APMIXED_IMGPLL			6
+#define CLK_APMIXED_UNIVPLL			7
+#define CLK_APMIXED_ADSPPLL			8
+#define CLK_APMIXED_APLL1			9
+#define CLK_APMIXED_APLL2			10
+#define CLK_APMIXED_APLL3			11
+#define CLK_APMIXED_APLL4			12
+#define CLK_APMIXED_APLL5			13
+#define CLK_APMIXED_MFGPLL			14
+#define CLK_APMIXED_PLL_SSUSB26M_EN		15
+#define CLK_APMIXED_NR_CLK			16
+
+/* AUDIODSP */
+#define CLK_AUDIODSP_AUDIO26M			0
+#define CLK_AUDIODSP_NR_CLK			1
+
+/* PERICFG_AO */
+#define CLK_PERI_AO_ETHERNET			0
+#define CLK_PERI_AO_ETHERNET_BUS		1
+#define CLK_PERI_AO_FLASHIF_BUS			2
+#define CLK_PERI_AO_FLASHIF_26M			3
+#define CLK_PERI_AO_FLASHIFLASHCK		4
+#define CLK_PERI_AO_SSUSB_2P_BUS		5
+#define CLK_PERI_AO_SSUSB_2P_XHCI		6
+#define CLK_PERI_AO_SSUSB_3P_BUS		7
+#define CLK_PERI_AO_SSUSB_3P_XHCI		8
+#define CLK_PERI_AO_SSUSB_BUS			9
+#define CLK_PERI_AO_SSUSB_XHCI			10
+#define CLK_PERI_AO_ETHERNET_MAC		11
+#define CLK_PERI_AO_PCIE_P0_FMEM		12
+#define CLK_PERI_AO_NR_CLK			13
+
+/* IMP_IIC_WRAP_C */
+#define CLK_IMP_IIC_WRAP_C_AP_CLOCK_I2C0	0
+#define CLK_IMP_IIC_WRAP_C_AP_CLOCK_I2C2	1
+#define CLK_IMP_IIC_WRAP_C_AP_CLOCK_I2C3	2
+#define CLK_IMP_IIC_WRAP_C_NR_CLK		3
+
+/* IMP_IIC_WRAP_W */
+#define CLK_IMP_IIC_WRAP_W_AP_CLOCK_I2C1	0
+#define CLK_IMP_IIC_WRAP_W_AP_CLOCK_I2C4	1
+#define CLK_IMP_IIC_WRAP_W_NR_CLK		2
+
+/* IMP_IIC_WRAP_EN */
+#define CLK_IMP_IIC_WRAP_EN_AP_CLOCK_I2C5	0
+#define CLK_IMP_IIC_WRAP_EN_AP_CLOCK_I2C6	1
+#define CLK_IMP_IIC_WRAP_EN_NR_CLK		2
+
+/* MFGCFG */
+#define CLK_MFGCFG_BG3D				0
+#define CLK_MFGCFG_NR_CLK			1
+
+/* VPPSYS0 */
+#define CLK_VPP0_MDP_FG				0
+#define CLK_VPP0_STITCH				1
+#define CLK_VPP0_PADDING			2
+#define CLK_VPP0_MDP_TCC			3
+#define CLK_VPP0_WARP0_ASYNC_TX			4
+#define CLK_VPP0_WARP1_ASYNC_TX			5
+#define CLK_VPP0_MUTEX				6
+#define CLK_VPP02VPP1_RELAY			7
+#define CLK_VPP0_VPP12VPP0_ASYNC		8
+#define CLK_VPP0_MMSYSRAM_TOP			9
+#define CLK_VPP0_MDP_AAL			10
+#define CLK_VPP0_MDP_RSZ			11
+#define CLK_VPP0_SMI_COMMON_MMSRAM		12
+#define CLK_VPP0_GALS_VDO0_LARB0_MMSRAM		13
+#define CLK_VPP0_GALS_VDO0_LARB1_MMSRAM		14
+#define CLK_VPP0_GALS_VENCSYS_MMSRAM		15
+#define CLK_VPP0_GALS_VENCSYS_CORE1_MMSRAM	16
+#define CLK_VPP0_GALS_INFRA_MMSRAM		17
+#define CLK_VPP0_GALS_CAMSYS_MMSRAM		18
+#define CLK_VPP0_GALS_VPP1_LARB5_MMSRAM		19
+#define CLK_VPP0_GALS_VPP1_LARB6_MMSRAM		20
+#define CLK_VPP0_SMI_REORDER_MMSRAM		21
+#define CLK_VPP0_SMI_IOMMU			22
+#define CLK_VPP0_GALS_IMGSYS_CAMSYS		23
+#define CLK_VPP0_MDP_RDMA			24
+#define CLK_VPP0_MDP_WROT			25
+#define CLK_VPP0_GALS_EMI0_EMI1			26
+#define CLK_VPP0_SMI_SUB_COMMON_REORDER		27
+#define CLK_VPP0_SMI_RSI			28
+#define CLK_VPP0_SMI_COMMON_LARB4		29
+#define CLK_VPP0_GALS_VDEC_VDEC_CORE1		30
+#define CLK_VPP0_GALS_VPP1_WPESYS		31
+#define CLK_VPP0_GALS_VDO0_VDO1_VENCSYS_CORE1	32
+#define CLK_VPP0_FAKE_ENG			33
+#define CLK_VPP0_MDP_HDR			34
+#define CLK_VPP0_MDP_TDSHP			35
+#define CLK_VPP0_MDP_COLOR			36
+#define CLK_VPP0_MDP_OVL			37
+#define CLK_VPP0_DSIP_RDMA			38
+#define CLK_VPP0_DISP_WDMA			39
+#define CLK_VPP0_MDP_HMS			40
+#define CLK_VPP0_WARP0_RELAY			41
+#define CLK_VPP0_WARP0_ASYNC			42
+#define CLK_VPP0_WARP1_RELAY			43
+#define CLK_VPP0_WARP1_ASYNC			44
+#define CLK_VPP0_NR_CLK				45
+
+/* WPESYS */
+#define CLK_WPE_TOP_WPE_VPP0			0
+#define CLK_WPE_TOP_SMI_LARB7			1
+#define CLK_WPE_TOP_WPESYS_EVENT_TX		2
+#define CLK_WPE_TOP_SMI_LARB7_PCLK_EN		3
+#define CLK_WPE_TOP_NR_CLK			4
+
+/* WPESYS_VPP0 */
+#define CLK_WPE_VPP0_VECI			0
+#define CLK_WPE_VPP0_VEC2I			1
+#define CLK_WPE_VPP0_VEC3I			2
+#define CLK_WPE_VPP0_WPEO			3
+#define CLK_WPE_VPP0_MSKO			4
+#define CLK_WPE_VPP0_VGEN			5
+#define CLK_WPE_VPP0_EXT			6
+#define CLK_WPE_VPP0_VFC			7
+#define CLK_WPE_VPP0_CACH0_TOP			8
+#define CLK_WPE_VPP0_CACH0_DMA			9
+#define CLK_WPE_VPP0_CACH1_TOP			10
+#define CLK_WPE_VPP0_CACH1_DMA			11
+#define CLK_WPE_VPP0_CACH2_TOP			12
+#define CLK_WPE_VPP0_CACH2_DMA			13
+#define CLK_WPE_VPP0_CACH3_TOP			14
+#define CLK_WPE_VPP0_CACH3_DMA			15
+#define CLK_WPE_VPP0_PSP			16
+#define CLK_WPE_VPP0_PSP2			17
+#define CLK_WPE_VPP0_SYNC			18
+#define CLK_WPE_VPP0_C24			19
+#define CLK_WPE_VPP0_MDP_CROP			20
+#define CLK_WPE_VPP0_ISP_CROP			21
+#define CLK_WPE_VPP0_TOP			22
+#define CLK_WPE_VPP0_NR_CLK			23
+
+/* VPPSYS1 */
+#define CLK_VPP1_SVPP1_MDP_OVL			0
+#define CLK_VPP1_SVPP1_MDP_TCC			1
+#define CLK_VPP1_SVPP1_MDP_WROT			2
+#define CLK_VPP1_SVPP1_VPP_PAD			3
+#define CLK_VPP1_SVPP2_MDP_WROT			4
+#define CLK_VPP1_SVPP2_VPP_PAD			5
+#define CLK_VPP1_SVPP3_MDP_WROT			6
+#define CLK_VPP1_SVPP3_VPP_PAD			7
+#define CLK_VPP1_SVPP1_MDP_RDMA			8
+#define CLK_VPP1_SVPP1_MDP_FG			9
+#define CLK_VPP1_SVPP2_MDP_RDMA			10
+#define CLK_VPP1_SVPP2_MDP_FG			11
+#define CLK_VPP1_SVPP3_MDP_RDMA			12
+#define CLK_VPP1_SVPP3_MDP_FG			13
+#define CLK_VPP1_VPP_SPLIT			14
+#define CLK_VPP1_SVPP2_VDO0_DL_RELAY		15
+#define CLK_VPP1_SVPP1_MDP_RSZ			16
+#define CLK_VPP1_SVPP1_MDP_TDSHP		17
+#define CLK_VPP1_SVPP1_MDP_COLOR		18
+#define CLK_VPP1_SVPP3_VDO1_DL_RELAY		19
+#define CLK_VPP1_SVPP2_MDP_RSZ			20
+#define CLK_VPP1_SVPP2_VPP_MERGE		21
+#define CLK_VPP1_SVPP2_MDP_TDSHP		22
+#define CLK_VPP1_SVPP2_MDP_COLOR		23
+#define CLK_VPP1_SVPP3_MDP_RSZ			24
+#define CLK_VPP1_SVPP3_VPP_MERGE		25
+#define CLK_VPP1_SVPP3_MDP_TDSHP		26
+#define CLK_VPP1_SVPP3_MDP_COLOR		27
+#define CLK_VPP1_GALS5				28
+#define CLK_VPP1_GALS6				29
+#define CLK_VPP1_LARB5				30
+#define CLK_VPP1_LARB6				31
+#define CLK_VPP1_SVPP1_MDP_HDR			32
+#define CLK_VPP1_SVPP1_MDP_AAL			33
+#define CLK_VPP1_SVPP2_MDP_HDR			34
+#define CLK_VPP1_SVPP2_MDP_AAL			35
+#define CLK_VPP1_SVPP3_MDP_HDR			36
+#define CLK_VPP1_SVPP3_MDP_AAL			37
+#define CLK_VPP1_DISP_MUTEX			38
+#define CLK_VPP1_SVPP2_VDO1_DL_RELAY		39
+#define CLK_VPP1_SVPP3_VDO0_DL_RELAY		40
+#define CLK_VPP1_VPP0_DL_ASYNC			41
+#define CLK_VPP1_VPP0_DL1_RELAY			42
+#define CLK_VPP1_LARB5_FAKE_ENG			43
+#define CLK_VPP1_LARB6_FAKE_ENG			44
+#define CLK_VPP1_HDMI_META			45
+#define CLK_VPP1_VPP_SPLIT_HDMI			46
+#define CLK_VPP1_DGI_IN				47
+#define CLK_VPP1_DGI_OUT			48
+#define CLK_VPP1_VPP_SPLIT_DGI			49
+#define CLK_VPP1_DL_CON_OCC			50
+#define CLK_VPP1_VPP_SPLIT_26M			51
+#define CLK_VPP1_NR_CLK				52
+
+/* IMGSYS */
+#define CLK_IMGSYS_MAIN_LARB9			0
+#define CLK_IMGSYS_MAIN_TRAW0			1
+#define CLK_IMGSYS_MAIN_TRAW1			2
+#define CLK_IMGSYS_MAIN_VCORE_GALS		3
+#define CLK_IMGSYS_MAIN_DIP0			4
+#define CLK_IMGSYS_MAIN_WPE0			5
+#define CLK_IMGSYS_MAIN_IPE			6
+#define CLK_IMGSYS_MAIN_WPE1			7
+#define CLK_IMGSYS_MAIN_WPE2			8
+#define CLK_IMGSYS_MAIN_GALS			9
+#define CLK_IMGSYS_MAIN_NR_CLK			10
+
+/* IMGSYS1_DIP_TOP */
+#define CLK_IMGSYS1_DIP_TOP_LARB10		0
+#define CLK_IMGSYS1_DIP_TOP_DIP_TOP		1
+#define CLK_IMGSYS1_DIP_TOP_NR_CLK		2
+
+/* IMGSYS1_DIP_NR */
+#define CLK_IMGSYS1_DIP_NR_LARB15		0
+#define CLK_IMGSYS1_DIP_NR_DIP_NR		1
+#define CLK_IMGSYS1_DIP_NR_NR_CLK		2
+
+/* IMGSYS_WPE1 */
+#define CLK_IMGSYS_WPE1_LARB11			0
+#define CLK_IMGSYS_WPE1				1
+#define CLK_IMGSYS_WPE1_NR_CLK			2
+
+/* IPESYS */
+#define CLK_IPE_DPE				0
+#define CLK_IPE_FDVT				1
+#define CLK_IPE_ME				2
+#define CLK_IPESYS_TOP				3
+#define CLK_IPE_SMI_LARB12			4
+#define CLK_IPE_NR_CLK				5
+
+/* IMGSYS_WPE2 */
+#define CLK_IMGSYS_WPE2_LARB11			0
+#define CLK_IMGSYS_WPE2				1
+#define CLK_IMGSYS_WPE2_NR_CLK			2
+
+/* IMGSYS_WPE3 */
+#define CLK_IMGSYS_WPE3_LARB11			0
+#define CLK_IMGSYS_WPE3				1
+#define CLK_IMGSYS_WPE3_NR_CLK			2
+
+/* CAMSYS */
+#define CLK_CAM_MAIN_LARB13			0
+#define CLK_CAM_MAIN_LARB14			1
+#define CLK_CAM_MAIN_CAM			2
+#define CLK_CAM_MAIN_CAM_SUBA			3
+#define CLK_CAM_MAIN_CAM_SUBB			4
+#define CLK_CAM_MAIN_CAMTG			5
+#define CLK_CAM_MAIN_SENINF			6
+#define CLK_CAM_MAIN_GCAMSVA			7
+#define CLK_CAM_MAIN_GCAMSVB			8
+#define CLK_CAM_MAIN_GCAMSVC			9
+#define CLK_CAM_MAIN_GCAMSVD			10
+#define CLK_CAM_MAIN_GCAMSVE			11
+#define CLK_CAM_MAIN_GCAMSVF			12
+#define CLK_CAM_MAIN_GCAMSVG			13
+#define CLK_CAM_MAIN_GCAMSVH			14
+#define CLK_CAM_MAIN_GCAMSVI			15
+#define CLK_CAM_MAIN_GCAMSVJ			16
+#define CLK_CAM_MAIN_CAMSV_TOP			17
+#define CLK_CAM_MAIN_CAMSV_CQ_A			18
+#define CLK_CAM_MAIN_CAMSV_CQ_B			19
+#define CLK_CAM_MAIN_CAMSV_CQ_C			20
+#define CLK_CAM_MAIN_FAKE_ENG			21
+#define CLK_CAM_MAIN_CAM2MM0_GALS		22
+#define CLK_CAM_MAIN_CAM2MM1_GALS		23
+#define CLK_CAM_MAIN_CAM2SYS_GALS		24
+#define CLK_CAM_MAIN_NR_CLK			25
+
+/* CAMSYS_RAWA */
+#define CLK_CAM_RAWA_LARBX			0
+#define CLK_CAM_RAWA_CAM			1
+#define CLK_CAM_RAWA_CAMTG			2
+#define CLK_CAM_RAWA_NR_CLK			3
+
+/* CAMSYS_YUVA */
+#define CLK_CAM_YUVA_LARBX			0
+#define CLK_CAM_YUVA_CAM			1
+#define CLK_CAM_YUVA_CAMTG			2
+#define CLK_CAM_YUVA_NR_CLK			3
+
+/* CAMSYS_RAWB */
+#define CLK_CAM_RAWB_LARBX			0
+#define CLK_CAM_RAWB_CAM			1
+#define CLK_CAM_RAWB_CAMTG			2
+#define CLK_CAM_RAWB_NR_CLK			3
+
+/* CAMSYS_YUVB */
+#define CLK_CAM_YUVB_LARBX			0
+#define CLK_CAM_YUVB_CAM			1
+#define CLK_CAM_YUVB_CAMTG			2
+#define CLK_CAM_YUVB_NR_CLK			3
+
+/* CCUSYS */
+#define CLK_CCU_LARB27				0
+#define CLK_CCU_AHB				1
+#define CLK_CCU_CCU0				2
+#define CLK_CCU_NR_CLK				3
+
+/* VDECSYS_SOC */
+#define CLK_VDE1_SOC_LARB1			0
+#define CLK_VDE1_SOC_LAT			1
+#define CLK_VDE1_SOC_LAT_ACTIVE			2
+#define CLK_VDE1_SOC_LAT_ENG			3
+#define CLK_VDE1_SOC_VDEC			4
+#define CLK_VDE1_SOC_VDEC_ACTIVE		5
+#define CLK_VDE1_SOC_VDEC_ENG			6
+#define CLK_VDE1_NR_CLK				7
+
+/* VDECSYS */
+#define CLK_VDE2_LARB1				0
+#define CLK_VDE2_LAT				1
+#define CLK_VDE2_VDEC				2
+#define CLK_VDE2_VDEC_ACTIVE			3
+#define CLK_VDE2_VDEC_ENG			4
+#define CLK_VDE2_NR_CLK				5
+
+/* VENCSYS */
+#define CLK_VEN1_CKE0_LARB			0
+#define CLK_VEN1_CKE1_VENC			1
+#define CLK_VEN1_CKE2_JPGENC			2
+#define CLK_VEN1_CKE3_JPGDEC			3
+#define CLK_VEN1_CKE4_JPGDEC_C1			4
+#define CLK_VEN1_CKE5_GALS			5
+#define CLK_VEN1_CKE6_GALS_SRAM			6
+#define CLK_VEN1_NR_CLK				7
+
+/* VDOSYS0 */
+#define CLK_VDO0_DISP_OVL0			0
+#define CLK_VDO0_FAKE_ENG0			1
+#define CLK_VDO0_DISP_CCORR0			2
+#define CLK_VDO0_DISP_MUTEX0			3
+#define CLK_VDO0_DISP_GAMMA0			4
+#define CLK_VDO0_DISP_DITHER0			5
+#define CLK_VDO0_DISP_WDMA0			6
+#define CLK_VDO0_DISP_RDMA0			7
+#define CLK_VDO0_DSI0				8
+#define CLK_VDO0_DSI1				9
+#define CLK_VDO0_DSC_WRAP0			10
+#define CLK_VDO0_VPP_MERGE0			11
+#define CLK_VDO0_DP_INTF0			12
+#define CLK_VDO0_DISP_AAL0			13
+#define CLK_VDO0_INLINEROT0			14
+#define CLK_VDO0_APB_BUS			15
+#define CLK_VDO0_DISP_COLOR0			16
+#define CLK_VDO0_MDP_WROT0			17
+#define CLK_VDO0_DISP_RSZ0			18
+#define CLK_VDO0_DISP_POSTMASK0			19
+#define CLK_VDO0_FAKE_ENG1			20
+#define CLK_VDO0_DL_ASYNC2			21
+#define CLK_VDO0_DL_RELAY3			22
+#define CLK_VDO0_DL_RELAY4			23
+#define CLK_VDO0_SMI_GALS			24
+#define CLK_VDO0_SMI_COMMON			25
+#define CLK_VDO0_SMI_EMI			26
+#define CLK_VDO0_SMI_IOMMU			27
+#define CLK_VDO0_SMI_LARB			28
+#define CLK_VDO0_SMI_RSI			29
+#define CLK_VDO0_DSI0_DSI			30
+#define CLK_VDO0_DSI1_DSI			31
+#define CLK_VDO0_DP_INTF0_DP_INTF		32
+#define CLK_VDO0_NR_CLK				33
+
+/* VDOSYS1 */
+#define CLK_VDO1_SMI_LARB2			0
+#define CLK_VDO1_SMI_LARB3			1
+#define CLK_VDO1_GALS				2
+#define CLK_VDO1_FAKE_ENG0			3
+#define CLK_VDO1_FAKE_ENG1			4
+#define CLK_VDO1_MDP_RDMA0			5
+#define CLK_VDO1_MDP_RDMA1			6
+#define CLK_VDO1_MDP_RDMA2			7
+#define CLK_VDO1_MDP_RDMA3			8
+#define CLK_VDO1_VPP_MERGE0			9
+#define CLK_VDO1_VPP_MERGE1			10
+#define CLK_VDO1_VPP_MERGE2			11
+#define CLK_VDO1_VPP_MERGE3			12
+#define CLK_VDO1_VPP_MERGE4			13
+#define CLK_VDO1_VPP2_TO_VDO1_DL_ASYNC		14
+#define CLK_VDO1_VPP3_TO_VDO1_DL_ASYNC		15
+#define CLK_VDO1_DISP_MUTEX			16
+#define CLK_VDO1_MDP_RDMA4			17
+#define CLK_VDO1_MDP_RDMA5			18
+#define CLK_VDO1_MDP_RDMA6			19
+#define CLK_VDO1_MDP_RDMA7			20
+#define CLK_VDO1_DP_INTF0_MMCK			21
+#define CLK_VDO1_DPI0_MM			22
+#define CLK_VDO1_DPI1_MM			23
+#define CLK_VDO1_MERGE0_DL_ASYNC		24
+#define CLK_VDO1_MERGE1_DL_ASYNC		25
+#define CLK_VDO1_MERGE2_DL_ASYNC		26
+#define CLK_VDO1_MERGE3_DL_ASYNC		27
+#define CLK_VDO1_MERGE4_DL_ASYNC		28
+#define CLK_VDO1_DSC_VDO1_DL_ASYNC		29
+#define CLK_VDO1_MERGE_VDO1_DL_ASYNC		30
+#define CLK_VDO1_PADDING0			31
+#define CLK_VDO1_PADDING1			32
+#define CLK_VDO1_PADDING2			33
+#define CLK_VDO1_PADDING3			34
+#define CLK_VDO1_PADDING4			35
+#define CLK_VDO1_PADDING5			36
+#define CLK_VDO1_PADDING6			37
+#define CLK_VDO1_PADDING7			38
+#define CLK_VDO1_DISP_RSZ0			39
+#define CLK_VDO1_DISP_RSZ1			40
+#define CLK_VDO1_DISP_RSZ2			41
+#define CLK_VDO1_DISP_RSZ3			42
+#define CLK_VDO1_HDR_VDO_FE0			43
+#define CLK_VDO1_HDR_GFX_FE0			44
+#define CLK_VDO1_HDR_VDO_BE			45
+#define CLK_VDO1_HDR_VDO_FE1			46
+#define CLK_VDO1_HDR_GFX_FE1			47
+#define CLK_VDO1_DISP_MIXER			48
+#define CLK_VDO1_HDR_VDO_FE0_DL_ASYNC		49
+#define CLK_VDO1_HDR_VDO_FE1_DL_ASYNC		50
+#define CLK_VDO1_HDR_GFX_FE0_DL_ASYNC		51
+#define CLK_VDO1_HDR_GFX_FE1_DL_ASYNC		52
+#define CLK_VDO1_HDR_VDO_BE_DL_ASYNC		53
+#define CLK_VDO1_DPI0				54
+#define CLK_VDO1_DISP_MONITOR_DPI0		55
+#define CLK_VDO1_DPI1				56
+#define CLK_VDO1_DISP_MONITOR_DPI1		57
+#define CLK_VDO1_DPINTF				58
+#define CLK_VDO1_DISP_MONITOR_DPINTF		59
+#define CLK_VDO1_26M_SLOW			60
+#define CLK_VDO1_NR_CLK				61
+
+#endif /* _DT_BINDINGS_CLK_MT8188_H */
-- 
2.18.0



From Garmin.Chang at mediatek.com  Thu Dec 29 23:33:41 2022
From: Garmin.Chang at mediatek.com (Garmin.Chang)
Date: Fri, 30 Dec 2022 15:33:41 +0800
Subject: [PATCH v3 03/19] clk: mediatek: Add MT8188 topckgen clock support
In-Reply-To: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
Message-ID: <20221230073357.18503-4-Garmin.Chang@mediatek.com>

Add MT8188 topckgen clock controller which provides muxes, dividers
to handle variety clock selection in other IP blocks.

Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
---
 drivers/clk/mediatek/Makefile              |    2 +-
 drivers/clk/mediatek/clk-mt8188-topckgen.c | 1352 ++++++++++++++++++++
 2 files changed, 1353 insertions(+), 1 deletion(-)
 create mode 100644 drivers/clk/mediatek/clk-mt8188-topckgen.c

diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
index 13ab8deb362c..89b1b331cad0 100644
--- a/drivers/clk/mediatek/Makefile
+++ b/drivers/clk/mediatek/Makefile
@@ -83,7 +83,7 @@ obj-$(CONFIG_COMMON_CLK_MT8186) += clk-mt8186-mcu.o clk-mt8186-topckgen.o clk-mt
 				   clk-mt8186-mfg.o clk-mt8186-mm.o clk-mt8186-wpe.o \
 				   clk-mt8186-img.o clk-mt8186-vdec.o clk-mt8186-venc.o \
 				   clk-mt8186-cam.o clk-mt8186-mdp.o clk-mt8186-ipe.o
-obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o
+obj-$(CONFIG_COMMON_CLK_MT8188) += clk-mt8188-apmixedsys.o clk-mt8188-topckgen.o
 obj-$(CONFIG_COMMON_CLK_MT8192) += clk-mt8192.o
 obj-$(CONFIG_COMMON_CLK_MT8192_AUDSYS) += clk-mt8192-aud.o
 obj-$(CONFIG_COMMON_CLK_MT8192_CAMSYS) += clk-mt8192-cam.o
diff --git a/drivers/clk/mediatek/clk-mt8188-topckgen.c b/drivers/clk/mediatek/clk-mt8188-topckgen.c
new file mode 100644
index 000000000000..dd0014b461ff
--- /dev/null
+++ b/drivers/clk/mediatek/clk-mt8188-topckgen.c
@@ -0,0 +1,1352 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Author: Garmin Chang <garmin.chang at mediatek.com>
+
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <dt-bindings/clock/mediatek,mt8188-clk.h>
+
+#include "clk-gate.h"
+#include "clk-mtk.h"
+#include "clk-mux.h"
+
+static DEFINE_SPINLOCK(mt8188_clk_lock);
+
+static const struct mtk_fixed_clk top_fixed_clks[] = {
+	FIXED_CLK(CLK_TOP_ULPOSC1, "ulposc_ck1", NULL, 260000000),
+	FIXED_CLK(CLK_TOP_MPHONE_SLAVE_BCK, "mphone_slave_bck", NULL, 49152000),
+	FIXED_CLK(CLK_TOP_PAD_FPC, "pad_fpc_ck", NULL, 50000000),
+	FIXED_CLK(CLK_TOP_466M_FMEM, "hd_466m_fmem_ck", NULL, 533000000),
+	FIXED_CLK(CLK_TOP_PEXTP_PIPE, "pextp_pipe", NULL, 250000000),
+	FIXED_CLK(CLK_TOP_DSI_PHY, "dsi_phy", NULL, 500000000),
+};
+
+static const struct mtk_fixed_factor top_divs[] = {
+	FACTOR(CLK_TOP_MFGPLL, "mfgpll_ck", "mfgpll", 1, 1),
+	FACTOR(CLK_TOP_MAINPLL, "mainpll_ck", "mainpll", 1, 1),
+	FACTOR(CLK_TOP_MAINPLL_D3, "mainpll_d3", "mainpll_ck", 1, 3),
+	FACTOR(CLK_TOP_MAINPLL_D4, "mainpll_d4", "mainpll_ck", 1, 4),
+	FACTOR(CLK_TOP_MAINPLL_D4_D2, "mainpll_d4_d2", "mainpll_d4", 1, 2),
+	FACTOR(CLK_TOP_MAINPLL_D4_D4, "mainpll_d4_d4", "mainpll_d4", 1, 4),
+	FACTOR(CLK_TOP_MAINPLL_D4_D8, "mainpll_d4_d8", "mainpll_d4", 1, 8),
+	FACTOR(CLK_TOP_MAINPLL_D5, "mainpll_d5", "mainpll_ck", 1, 5),
+	FACTOR(CLK_TOP_MAINPLL_D5_D2, "mainpll_d5_d2", "mainpll_d5", 1, 2),
+	FACTOR(CLK_TOP_MAINPLL_D5_D4, "mainpll_d5_d4", "mainpll_d5", 1, 4),
+	FACTOR(CLK_TOP_MAINPLL_D5_D8, "mainpll_d5_d8", "mainpll_d5", 1, 8),
+	FACTOR(CLK_TOP_MAINPLL_D6, "mainpll_d6", "mainpll_ck", 1, 6),
+	FACTOR(CLK_TOP_MAINPLL_D6_D2, "mainpll_d6_d2", "mainpll_d6", 1, 2),
+	FACTOR(CLK_TOP_MAINPLL_D6_D4, "mainpll_d6_d4", "mainpll_d6", 1, 4),
+	FACTOR(CLK_TOP_MAINPLL_D6_D8, "mainpll_d6_d8", "mainpll_d6", 1, 8),
+	FACTOR(CLK_TOP_MAINPLL_D7, "mainpll_d7", "mainpll_ck", 1, 7),
+	FACTOR(CLK_TOP_MAINPLL_D7_D2, "mainpll_d7_d2", "mainpll_d7", 1, 2),
+	FACTOR(CLK_TOP_MAINPLL_D7_D4, "mainpll_d7_d4", "mainpll_d7", 1, 4),
+	FACTOR(CLK_TOP_MAINPLL_D7_D8, "mainpll_d7_d8", "mainpll_d7", 1, 8),
+	FACTOR(CLK_TOP_MAINPLL_D9, "mainpll_d9", "mainpll_ck", 1, 9),
+	FACTOR(CLK_TOP_UNIVPLL, "univpll_ck", "univpll", 1, 1),
+	FACTOR(CLK_TOP_UNIVPLL_D2, "univpll_d2", "univpll_ck", 1, 2),
+	FACTOR(CLK_TOP_UNIVPLL_D3, "univpll_d3", "univpll_ck", 1, 3),
+	FACTOR(CLK_TOP_UNIVPLL_D4, "univpll_d4", "univpll_ck", 1, 4),
+	FACTOR(CLK_TOP_UNIVPLL_D4_D2, "univpll_d4_d2", "univpll_d4", 1, 2),
+	FACTOR(CLK_TOP_UNIVPLL_D4_D4, "univpll_d4_d4", "univpll_d4", 1, 4),
+	FACTOR(CLK_TOP_UNIVPLL_D4_D8, "univpll_d4_d8", "univpll_d4", 1, 8),
+	FACTOR(CLK_TOP_UNIVPLL_D5, "univpll_d5", "univpll_ck", 1, 5),
+	FACTOR(CLK_TOP_UNIVPLL_D5_D2, "univpll_d5_d2", "univpll_d5", 1, 2),
+	FACTOR(CLK_TOP_UNIVPLL_D5_D4, "univpll_d5_d4", "univpll_d5", 1, 4),
+	FACTOR(CLK_TOP_UNIVPLL_D5_D8, "univpll_d5_d8", "univpll_d5", 1, 8),
+	FACTOR(CLK_TOP_UNIVPLL_D6, "univpll_d6", "univpll_ck", 1, 6),
+	FACTOR(CLK_TOP_UNIVPLL_D6_D2, "univpll_d6_d2", "univpll_d6", 1, 2),
+	FACTOR(CLK_TOP_UNIVPLL_D6_D4, "univpll_d6_d4", "univpll_d6", 1, 4),
+	FACTOR(CLK_TOP_UNIVPLL_D6_D8, "univpll_d6_d8", "univpll_d6", 1, 8),
+	FACTOR(CLK_TOP_UNIVPLL_D7, "univpll_d7", "univpll_ck", 1, 7),
+	FACTOR(CLK_TOP_UNIVPLL_192M, "univpll_192m", "univpll_ck", 1, 13),
+	FACTOR(CLK_TOP_UNIVPLL_192M_D4, "univpll_192m_d4", "univpll_192m", 1, 4),
+	FACTOR(CLK_TOP_UNIVPLL_192M_D8, "univpll_192m_d8", "univpll_192m", 1, 8),
+	FACTOR(CLK_TOP_UNIVPLL_192M_D10, "univpll_192m_d10", "univpll_192m", 1, 10),
+	FACTOR(CLK_TOP_UNIVPLL_192M_D16, "univpll_192m_d16", "univpll_192m", 1, 16),
+	FACTOR(CLK_TOP_UNIVPLL_192M_D32, "univpll_192m_d32", "univpll_192m", 1, 32),
+	FACTOR(CLK_TOP_IMGPLL, "imgpll_ck", "imgpll", 1, 1),
+	FACTOR(CLK_TOP_APLL1_D3, "apll1_d3", "apll1", 1, 3),
+	FACTOR(CLK_TOP_APLL1_D4, "apll1_d4", "apll1", 1, 4),
+	FACTOR(CLK_TOP_APLL2_D3, "apll2_d3", "apll2", 1, 3),
+	FACTOR(CLK_TOP_APLL2_D4, "apll2_d4", "apll2", 1, 4),
+	FACTOR(CLK_TOP_APLL3_D4, "apll3_d4", "apll3", 1, 4),
+	FACTOR(CLK_TOP_APLL4_D4, "apll4_d4", "apll4", 1, 4),
+	FACTOR(CLK_TOP_APLL5_D4, "apll5_d4", "apll5", 1, 4),
+	FACTOR(CLK_TOP_MMPLL, "mmpll_ck", "mmpll", 1, 1),
+	FACTOR(CLK_TOP_MMPLL_D4, "mmpll_d4", "mmpll_ck", 1, 4),
+	FACTOR(CLK_TOP_MMPLL_D4_D2, "mmpll_d4_d2", "mmpll_d4", 1, 2),
+	FACTOR(CLK_TOP_MMPLL_D5, "mmpll_d5", "mmpll_ck", 1, 5),
+	FACTOR(CLK_TOP_MMPLL_D5_D2, "mmpll_d5_d2", "mmpll_d5", 1, 2),
+	FACTOR(CLK_TOP_MMPLL_D5_D4, "mmpll_d5_d4", "mmpll_d5", 1, 4),
+	FACTOR(CLK_TOP_MMPLL_D6, "mmpll_d6", "mmpll_ck", 1, 6),
+	FACTOR(CLK_TOP_MMPLL_D6_D2, "mmpll_d6_d2", "mmpll_d6", 1, 2),
+	FACTOR(CLK_TOP_MMPLL_D7, "mmpll_d7", "mmpll_ck", 1, 7),
+	FACTOR(CLK_TOP_MMPLL_D9, "mmpll_d9", "mmpll_ck", 1, 9),
+	FACTOR(CLK_TOP_TVDPLL1_D2, "tvdpll1_d2", "tvdpll1", 1, 2),
+	FACTOR(CLK_TOP_TVDPLL1_D4, "tvdpll1_d4", "tvdpll1", 1, 4),
+	FACTOR(CLK_TOP_TVDPLL1_D8, "tvdpll1_d8", "tvdpll1", 1, 8),
+	FACTOR(CLK_TOP_TVDPLL1_D16, "tvdpll1_d16", "tvdpll1", 1, 16),
+	FACTOR(CLK_TOP_TVDPLL2_D2, "tvdpll2_d2", "tvdpll2", 1, 2),
+	FACTOR(CLK_TOP_TVDPLL2_D4, "tvdpll2_d4", "tvdpll2", 1, 4),
+	FACTOR(CLK_TOP_TVDPLL2_D8, "tvdpll2_d8", "tvdpll2", 1, 8),
+	FACTOR(CLK_TOP_TVDPLL2_D16, "tvdpll2_d16", "tvdpll2", 1, 16),
+	FACTOR(CLK_TOP_MSDCPLL, "msdcpll_ck", "msdcpll", 1, 1),
+	FACTOR(CLK_TOP_MSDCPLL_D2, "msdcpll_d2", "msdcpll_ck", 1, 2),
+	FACTOR(CLK_TOP_MSDCPLL_D16, "msdcpll_d16", "msdcpll_ck", 1, 16),
+	FACTOR(CLK_TOP_ETHPLL, "ethpll_ck", "ethpll", 1, 1),
+	FACTOR(CLK_TOP_ETHPLL_D2, "ethpll_d2", "ethpll_ck", 1, 2),
+	FACTOR(CLK_TOP_ETHPLL_D4, "ethpll_d4", "ethpll_ck", 1, 4),
+	FACTOR(CLK_TOP_ETHPLL_D8, "ethpll_d8", "ethpll_ck", 1, 8),
+	FACTOR(CLK_TOP_ETHPLL_D10, "ethpll_d10", "ethpll_ck", 1, 10),
+	FACTOR(CLK_TOP_ADSPPLL, "adsppll_ck", "adsppll", 1, 1),
+	FACTOR(CLK_TOP_ADSPPLL_D2, "adsppll_d2", "adsppll_ck", 1, 2),
+	FACTOR(CLK_TOP_ADSPPLL_D4, "adsppll_d4", "adsppll_ck", 1, 4),
+	FACTOR(CLK_TOP_ADSPPLL_D8, "adsppll_d8", "adsppll_ck", 1, 8),
+	FACTOR(CLK_TOP_ULPOSC1_D2, "ulposc1_d2", "ulposc_ck1", 1, 2),
+	FACTOR(CLK_TOP_ULPOSC1_D4, "ulposc1_d4", "ulposc_ck1", 1, 4),
+	FACTOR(CLK_TOP_ULPOSC1_D8, "ulposc1_d8", "ulposc_ck1", 1, 8),
+	FACTOR(CLK_TOP_ULPOSC1_D7, "ulposc1_d7", "ulposc_ck1", 1, 7),
+	FACTOR(CLK_TOP_ULPOSC1_D10, "ulposc1_d10", "ulposc_ck1", 1, 10),
+	FACTOR(CLK_TOP_ULPOSC1_D16, "ulposc1_d16", "ulposc_ck1", 1, 16),
+};
+
+static const char * const axi_parents[] = {
+	"clk26m",
+	"mainpll_d4_d4",
+	"mainpll_d7_d2",
+	"mainpll_d4_d2",
+	"mainpll_d5_d2",
+	"mainpll_d6_d2",
+	"ulposc1_d4"
+};
+
+static const char * const spm_parents[] = {
+	"clk26m",
+	"ulposc1_d10",
+	"mainpll_d7_d4",
+	"clk32k"
+};
+
+static const char * const scp_parents[] = {
+	"clk26m",
+	"univpll_d4",
+	"mainpll_d6",
+	"univpll_d6",
+	"univpll_d4_d2",
+	"mainpll_d4_d2",
+	"univpll_d3",
+	"mainpll_d3"
+};
+
+static const char * const bus_aximem_parents[] = {
+	"clk26m",
+	"mainpll_d7_d2",
+	"mainpll_d4_d2",
+	"mainpll_d5_d2",
+	"mainpll_d6"
+};
+
+static const char * const vpp_parents[] = {
+	"clk26m",
+	"univpll_d6_d2",
+	"mainpll_d5_d2",
+	"mmpll_d6_d2",
+	"univpll_d5_d2",
+	"univpll_d4_d2",
+	"mmpll_d4_d2",
+	"mmpll_d7",
+	"univpll_d6",
+	"mainpll_d4",
+	"mmpll_d5",
+	"tvdpll1",
+	"tvdpll2",
+	"univpll_d4",
+	"mmpll_d4"
+};
+
+static const char * const ethdr_parents[] = {
+	"clk26m",
+	"univpll_d6_d2",
+	"mainpll_d5_d2",
+	"mmpll_d6_d2",
+	"univpll_d5_d2",
+	"univpll_d4_d2",
+	"mmpll_d4_d2",
+	"mmpll_d7",
+	"univpll_d6",
+	"mainpll_d4",
+	"mmpll_d5_d4",
+	"tvdpll1",
+	"tvdpll2",
+	"univpll_d4",
+	"mmpll_d4"
+};
+
+static const char * const ipe_parents[] = {
+	"clk26m",
+	"imgpll_ck",
+	"mainpll_d4",
+	"mmpll_d6",
+	"univpll_d6",
+	"mainpll_d6",
+	"mmpll_d4_d2",
+	"univpll_d4_d2",
+	"mainpll_d4_d2",
+	"mmpll_d6_d2",
+	"univpll_d5_d2",
+	"mainpll_d7"
+};
+
+static const char * const cam_parents[] = {
+	"clk26m",
+	"tvdpll1",
+	"mainpll_d4",
+	"mmpll_d4",
+	"univpll_d4",
+	"univpll_d5",
+	"univpll_d6",
+	"mmpll_d7",
+	"univpll_d4_d2",
+	"mainpll_d4_d2",
+	"imgpll_ck"
+};
+
+static const char * const ccu_parents[] = {
+	"clk26m",
+	"univpll_d6",
+	"mainpll_d4_d2",
+	"mainpll_d4",
+	"univpll_d5",
+	"mainpll_d6",
+	"mmpll_d6",
+	"mmpll_d7",
+	"univpll_d4_d2",
+	"univpll_d7"
+};
+
+static const char * const ccu_ahb_parents[] = {
+	"clk26m",
+	"univpll_d6",
+	"mainpll_d4_d2",
+	"mainpll_d4",
+	"univpll_d5",
+	"mainpll_d6",
+	"mmpll_d6",
+	"mmpll_d7",
+	"univpll_d4_d2",
+	"univpll_d7"
+};
+
+static const char * const img_parents[] = {
+	"clk26m",
+	"imgpll_ck",
+	"univpll_d4",
+	"mainpll_d4",
+	"univpll_d5",
+	"mmpll_d6",
+	"mmpll_d7",
+	"univpll_d6",
+	"mainpll_d6",
+	"mmpll_d4_d2",
+	"univpll_d4_d2",
+	"mainpll_d4_d2",
+	"univpll_d5_d2"
+};
+
+static const char * const camtm_parents[] = {
+	"clk26m",
+	"univpll_d4_d4",
+	"univpll_d6_d2",
+	"univpll_d6_d4"
+};
+
+static const char * const dsp_parents[] = {
+	"clk26m",
+	"univpll_d6_d2",
+	"univpll_d4_d2",
+	"univpll_d5",
+	"univpll_d4",
+	"mmpll_d4",
+	"mainpll_d3",
+	"univpll_d3"
+};
+
+static const char * const dsp1_parents[] = {
+	"clk26m",
+	"univpll_d6_d2",
+	"mainpll_d4_d2",
+	"univpll_d5",
+	"mmpll_d5",
+	"univpll_d4",
+	"mainpll_d3",
+	"univpll_d3"
+};
+
+static const char * const dsp2_parents[] = {
+	"clk26m",
+	"univpll_d6_d2",
+	"mainpll_d4_d2",
+	"univpll_d5",
+	"mmpll_d5",
+	"univpll_d4",
+	"mainpll_d3",
+	"univpll_d3"
+};
+
+static const char * const dsp3_parents[] = {
+	"clk26m",
+	"univpll_d6_d2",
+	"mainpll_d4_d2",
+	"univpll_d5",
+	"mmpll_d5",
+	"univpll_d4",
+	"mainpll_d3",
+	"univpll_d3"
+};
+
+static const char * const dsp4_parents[] = {
+	"clk26m",
+	"univpll_d6_d2",
+	"univpll_d4_d2",
+	"mainpll_d4",
+	"univpll_d4",
+	"mmpll_d4",
+	"mainpll_d3",
+	"univpll_d3"
+};
+
+static const char * const dsp5_parents[] = {
+	"clk26m",
+	"univpll_d6_d2",
+	"univpll_d4_d2",
+	"mainpll_d4",
+	"univpll_d4",
+	"mmpll_d4",
+	"mainpll_d3",
+	"univpll_d3"
+};
+
+static const char * const dsp6_parents[] = {
+	"clk26m",
+	"univpll_d6_d2",
+	"univpll_d4_d2",
+	"mainpll_d4",
+	"univpll_d4",
+	"mmpll_d4",
+	"mainpll_d3",
+	"univpll_d3"
+};
+
+static const char * const dsp7_parents[] = {
+	"clk26m",
+	"univpll_d6_d2",
+	"univpll_d4_d2",
+	"univpll_d5",
+	"univpll_d4",
+	"mmpll_d4",
+	"mainpll_d3",
+	"univpll_d3"
+};
+
+static const char * const mfg_core_tmp_parents[] = {
+	"clk26m",
+	"mainpll_d5_d2",
+	"univpll_d6",
+	"univpll_d7"
+};
+
+static const char * const camtg_parents[] = {
+	"clk26m",
+	"univpll_192m_d8",
+	"univpll_d6_d8",
+	"univpll_192m_d4",
+	"univpll_192m_d10",
+	"clk13m",
+	"univpll_192m_d16",
+	"univpll_192m_d32"
+};
+
+static const char * const camtg2_parents[] = {
+	"clk26m",
+	"univpll_192m_d8",
+	"univpll_d6_d8",
+	"univpll_192m_d4",
+	"univpll_192m_d10",
+	"clk13m",
+	"univpll_192m_d16",
+	"univpll_192m_d32"
+};
+
+static const char * const camtg3_parents[] = {
+	"clk26m",
+	"univpll_192m_d8",
+	"univpll_d6_d8",
+	"univpll_192m_d4",
+	"univpll_192m_d10",
+	"clk13m",
+	"univpll_192m_d16",
+	"univpll_192m_d32"
+};
+
+static const char * const uart_parents[] = {
+	"clk26m",
+	"univpll_d6_d8"
+};
+
+static const char * const spi_parents[] = {
+	"clk26m",
+	"mainpll_d5_d4",
+	"mainpll_d6_d4",
+	"univpll_d6_d4",
+	"univpll_d6_d2",
+	"mainpll_d6_d2",
+	"mainpll_d4_d4",
+	"univpll_d5_d4"
+};
+
+static const char * const msdc5hclk_parents[] = {
+	"clk26m",
+	"mainpll_d4_d2",
+	"mainpll_d6_d2"
+};
+
+static const char * const msdc50_0_parents[] = {
+	"clk26m",
+	"msdcpll_ck",
+	"msdcpll_d2",
+	"univpll_d4_d4",
+	"mainpll_d6_d2",
+	"univpll_d4_d2"
+};
+
+static const char * const msdc30_1_parents[] = {
+	"clk26m",
+	"univpll_d6_d2",
+	"mainpll_d6_d2",
+	"mainpll_d7_d2",
+	"msdcpll_d2"
+};
+
+static const char * const msdc30_2_parents[] = {
+	"clk26m",
+	"univpll_d6_d2",
+	"mainpll_d6_d2",
+	"mainpll_d7_d2",
+	"msdcpll_d2"
+};
+
+static const char * const intdir_parents[] = {
+	"clk26m",
+	"univpll_d6",
+	"mainpll_d4",
+	"univpll_d4"
+};
+
+static const char * const aud_intbus_parents[] = {
+	"clk26m",
+	"mainpll_d4_d4",
+	"mainpll_d7_d4"
+};
+
+static const char * const audio_h_parents[] = {
+	"clk26m",
+	"univpll_d7",
+	"apll1",
+	"apll2"
+};
+
+static const char * const pwrap_ulposc_parents[] = {
+	"clk26m",
+	"ulposc1_d10",
+	"ulposc1_d7",
+	"ulposc1_d8",
+	"ulposc1_d16",
+	"mainpll_d4_d8",
+	"univpll_d5_d8",
+	"tvdpll1_d16"
+};
+
+static const char * const atb_parents[] = {
+	"clk26m",
+	"mainpll_d4_d2",
+	"mainpll_d5_d2"
+};
+
+static const char * const sspm_parents[] = {
+	"clk26m",
+	"mainpll_d7_d2",
+	"mainpll_d6_d2",
+	"mainpll_d5_d2",
+	"mainpll_d9",
+	"mainpll_d4_d2"
+};
+
+static const char * const dp_parents[] = {
+	"clk26m",
+	"tvdpll1_d2",
+	"tvdpll2_d2",
+	"tvdpll1_d4",
+	"tvdpll2_d4",
+	"tvdpll1_d8",
+	"tvdpll2_d8",
+	"tvdpll1_d16",
+	"tvdpll2_d16"
+};
+
+static const char * const edp_parents[] = {
+	"clk26m",
+	"tvdpll1_d2",
+	"tvdpll2_d2",
+	"tvdpll1_d4",
+	"tvdpll2_d4",
+	"tvdpll1_d8",
+	"tvdpll2_d8",
+	"tvdpll1_d16",
+	"tvdpll2_d16"
+};
+
+static const char * const dpi_parents[] = {
+	"clk26m",
+	"tvdpll1_d2",
+	"tvdpll2_d2",
+	"tvdpll1_d4",
+	"tvdpll2_d4",
+	"tvdpll1_d8",
+	"tvdpll2_d8",
+	"tvdpll1_d16",
+	"tvdpll2_d16"
+};
+
+static const char * const disp_pwm0_parents[] = {
+	"clk26m",
+	"univpll_d6_d4",
+	"ulposc1_d2",
+	"ulposc1_d4",
+	"ulposc1_d16",
+	"ethpll_d4"
+};
+
+static const char * const disp_pwm1_parents[] = {
+	"clk26m",
+	"univpll_d6_d4",
+	"ulposc1_d2",
+	"ulposc1_d4",
+	"ulposc1_d16"
+};
+
+static const char * const usb_parents[] = {
+	"clk26m",
+	"univpll_d5_d4",
+	"univpll_d6_d4",
+	"univpll_d5_d2"
+};
+
+static const char * const ssusb_xhci_parents[] = {
+	"clk26m",
+	"univpll_d5_d4",
+	"univpll_d6_d4",
+	"univpll_d5_d2"
+};
+
+static const char * const usb_2p_parents[] = {
+	"clk26m",
+	"univpll_d5_d4",
+	"univpll_d6_d4",
+	"univpll_d5_d2"
+};
+
+static const char * const ssusb_xhci_2p_parents[] = {
+	"clk26m",
+	"univpll_d5_d4",
+	"univpll_d6_d4",
+	"univpll_d5_d2"
+};
+
+static const char * const usb_3p_parents[] = {
+	"clk26m",
+	"univpll_d5_d4",
+	"univpll_d6_d4",
+	"univpll_d5_d2"
+};
+
+static const char * const ssusb_xhci_3p_parents[] = {
+	"clk26m",
+	"univpll_d5_d4",
+	"univpll_d6_d4",
+	"univpll_d5_d2"
+};
+
+static const char * const i2c_parents[] = {
+	"clk26m",
+	"mainpll_d4_d8",
+	"univpll_d5_d4"
+};
+
+static const char * const seninf_parents[] = {
+	"clk26m",
+	"univpll_d4_d4",
+	"univpll_d6_d2",
+	"mainpll_d4_d2",
+	"univpll_d7",
+	"univpll_d6",
+	"mmpll_d6",
+	"univpll_d5"
+};
+
+static const char * const seninf1_parents[] = {
+	"clk26m",
+	"univpll_d4_d4",
+	"univpll_d6_d2",
+	"mainpll_d4_d2",
+	"univpll_d7",
+	"univpll_d6",
+	"mmpll_d6",
+	"univpll_d5"
+};
+
+static const char * const gcpu_parents[] = {
+	"clk26m",
+	"mainpll_d6",
+	"univpll_d4_d2",
+	"mmpll_d5_d2",
+	"univpll_d5_d2"
+};
+
+static const char * const venc_parents[] = {
+	"clk26m",
+	"mmpll_d4_d2",
+	"mainpll_d6",
+	"univpll_d4_d2",
+	"mainpll_d4_d2",
+	"univpll_d6",
+	"mmpll_d6",
+	"mainpll_d5_d2",
+	"mainpll_d6_d2",
+	"mmpll_d9",
+	"univpll_d4_d4",
+	"mainpll_d4",
+	"univpll_d4",
+	"univpll_d5",
+	"univpll_d5_d2",
+	"mainpll_d5"
+};
+
+static const char * const vdec_parents[] = {
+	"clk26m",
+	"mainpll_d5_d2",
+	"mmpll_d6_d2",
+	"univpll_d5_d2",
+	"univpll_d4_d2",
+	"mmpll_d4_d2",
+	"univpll_d6",
+	"mainpll_d5",
+	"univpll_d5",
+	"mmpll_d6",
+	"mainpll_d4",
+	"tvdpll2",
+	"univpll_d4",
+	"imgpll_ck",
+	"univpll_d6_d2",
+	"mmpll_d9"
+};
+
+static const char * const pwm_parents[] = {
+	"clk32k",
+	"clk26m",
+	"univpll_d4_d8",
+	"univpll_d6_d4"
+};
+
+static const char * const mcupm_parents[] = {
+	"clk26m",
+	"mainpll_d6_d2",
+	"mainpll_d7_d4"
+};
+
+static const char * const spmi_p_mst_parents[] = {
+	"clk26m",
+	"clk13m",
+	"ulposc1_d8",
+	"ulposc1_d10",
+	"ulposc1_d16",
+	"ulposc1_d7",
+	"clk32k",
+	"mainpll_d7_d8",
+	"mainpll_d6_d8",
+	"mainpll_d5_d8"
+};
+
+static const char * const spmi_m_mst_parents[] = {
+	"clk26m",
+	"clk13m",
+	"ulposc1_d8",
+	"ulposc1_d10",
+	"ulposc1_d16",
+	"ulposc1_d7",
+	"clk32k",
+	"mainpll_d7_d8",
+	"mainpll_d6_d8",
+	"mainpll_d5_d8"
+};
+
+static const char * const dvfsrc_parents[] = {
+	"clk26m",
+	"ulposc1_d10",
+	"univpll_d6_d8",
+	"msdcpll_d16"
+};
+
+static const char * const tl_parents[] = {
+	"clk26m",
+	"univpll_d5_d4",
+	"mainpll_d4_d4"
+};
+
+static const char * const aes_msdcfde_parents[] = {
+	"clk26m",
+	"mainpll_d4_d2",
+	"mainpll_d6",
+	"mainpll_d4_d4",
+	"univpll_d4_d2",
+	"univpll_d6"
+};
+
+static const char * const dsi_occ_parents[] = {
+	"clk26m",
+	"univpll_d6_d2",
+	"univpll_d5_d2",
+	"univpll_d4_d2"
+};
+
+static const char * const wpe_vpp_parents[] = {
+	"clk26m",
+	"mainpll_d5_d2",
+	"mmpll_d6_d2",
+	"univpll_d5_d2",
+	"mainpll_d4_d2",
+	"univpll_d4_d2",
+	"mmpll_d4_d2",
+	"mainpll_d6",
+	"mmpll_d7",
+	"univpll_d6",
+	"mainpll_d5",
+	"univpll_d5",
+	"mainpll_d4",
+	"tvdpll1",
+	"univpll_d4"
+};
+
+static const char * const hdcp_parents[] = {
+	"clk26m",
+	"univpll_d4_d8",
+	"mainpll_d5_d8",
+	"univpll_d6_d4"
+};
+
+static const char * const hdcp_24m_parents[] = {
+	"clk26m",
+	"univpll_192m_d4",
+	"univpll_192m_d8",
+	"univpll_d6_d8"
+};
+
+static const char * const hdmi_apb_parents[] = {
+	"clk26m",
+	"univpll_d6_d4",
+	"msdcpll_d2"
+};
+
+static const char * const snps_eth_250m_parents[] = {
+	"clk26m",
+	"ethpll_d2"
+};
+
+static const char * const snps_eth_62p4m_ptp_parents[] = {
+	"apll2_d3",
+	"apll1_d3",
+	"clk26m",
+	"ethpll_d8"
+};
+
+static const char * const snps_eth_50m_rmii_parents[] = {
+	"clk26m",
+	"ethpll_d10"
+};
+
+static const char * const adsp_parents[] = {
+	"clk26m",
+	"clk13m",
+	"mainpll_d6",
+	"mainpll_d5_d2",
+	"univpll_d4_d4",
+	"univpll_d4",
+	"ulposc1_d2",
+	"ulposc1_ck1",
+	"adsppll_ck",
+	"adsppll_d2",
+	"adsppll_d4",
+	"adsppll_d8"
+};
+
+static const char * const audio_local_bus_parents[] = {
+	"clk26m",
+	"clk13m",
+	"mainpll_d4_d4",
+	"mainpll_d7_d2",
+	"mainpll_d5_d2",
+	"mainpll_d4_d2",
+	"mainpll_d7",
+	"mainpll_d4",
+	"univpll_d6",
+	"ulposc1_ck1",
+	"ulposc1_d4",
+	"ulposc1_d2"
+};
+
+static const char * const asm_h_parents[] = {
+	"clk26m",
+	"univpll_d6_d4",
+	"univpll_d6_d2",
+	"mainpll_d5_d2"
+};
+
+static const char * const asm_l_parents[] = {
+	"clk26m",
+	"univpll_d6_d4",
+	"univpll_d6_d2",
+	"mainpll_d5_d2"
+};
+
+static const char * const apll1_parents[] = {
+	"clk26m",
+	"apll1_d4"
+};
+
+static const char * const apll2_parents[] = {
+	"clk26m",
+	"apll2_d4"
+};
+
+static const char * const apll3_parents[] = {
+	"clk26m",
+	"apll3_d4"
+};
+
+static const char * const apll4_parents[] = {
+	"clk26m",
+	"apll4_d4"
+};
+
+static const char * const apll5_parents[] = {
+	"clk26m",
+	"apll5_d4"
+};
+
+static const char * const i2so1_parents[] = {
+	"clk26m",
+	"apll1",
+	"apll2",
+	"apll3",
+	"apll4",
+	"apll5"
+};
+
+static const char * const i2so2_parents[] = {
+	"clk26m",
+	"apll1",
+	"apll2",
+	"apll3",
+	"apll4",
+	"apll5"
+};
+
+static const char * const i2si1_parents[] = {
+	"clk26m",
+	"apll1",
+	"apll2",
+	"apll3",
+	"apll4",
+	"apll5"
+};
+
+static const char * const i2si2_parents[] = {
+	"clk26m",
+	"apll1",
+	"apll2",
+	"apll3",
+	"apll4",
+	"apll5"
+};
+
+static const char * const dptx_parents[] = {
+	"clk26m",
+	"apll1",
+	"apll2",
+	"apll3",
+	"apll4",
+	"apll5"
+};
+
+static const char * const aud_iec_parents[] = {
+	"clk26m",
+	"apll1",
+	"apll2",
+	"apll3",
+	"apll4",
+	"apll5"
+};
+
+static const char * const a1sys_hp_parents[] = {
+	"clk26m",
+	"apll1_d4"
+};
+
+static const char * const a2sys_parents[] = {
+	"clk26m",
+	"apll2_d4"
+};
+
+static const char * const a3sys_parents[] = {
+	"clk26m",
+	"apll3_d4",
+	"apll4_d4",
+	"apll5_d4"
+};
+
+static const char * const a4sys_parents[] = {
+	"clk26m",
+	"apll3_d4",
+	"apll4_d4",
+	"apll5_d4"
+};
+
+static const char * const ecc_parents[] = {
+	"clk26m",
+	"mainpll_d4_d4",
+	"mainpll_d5_d2",
+	"mainpll_d4_d2",
+	"mainpll_d6",
+	"univpll_d6"
+};
+
+static const char * const spinor_parents[] = {
+	"clk26m",
+	"clk13m",
+	"mainpll_d7_d8",
+	"univpll_d6_d8"
+};
+
+static const char * const ulposc_parents[] = {
+	"ulposc_ck1",
+	"ethpll_d2",
+	"mainpll_d4_d2",
+	"ethpll_d10"
+};
+
+static const char * const srck_parents[] = {
+	"ulposc1_d10",
+	"clk26m"
+};
+
+static const char * const mfg_fast_ref_parents[] = {
+	"top_mfg_core_tmp",
+	"mfgpll_ck"
+};
+
+static const struct mtk_mux top_mtk_muxes[] = {
+	/*
+	 * CLK_CFG_0
+	 * axi_sel and bus_aximem_sel are bus clocks, should not be closed by Linux.
+	 * spm_sel and scp_sel are main clocks in always-on co-processor.
+	 */
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_AXI, "top_axi", axi_parents,
+				   0x020, 0x024, 0x028, 0, 4, 7, 0x04, 0, CLK_IS_CRITICAL),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SPM, "top_spm", spm_parents,
+				   0x020, 0x024, 0x028, 8, 4, 15, 0x04, 1, CLK_IS_CRITICAL),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SCP, "top_scp", scp_parents,
+				   0x020, 0x024, 0x028, 16, 4, 23, 0x04, 2, CLK_IS_CRITICAL),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_BUS_AXIMEM, "top_bus_aximem", bus_aximem_parents,
+				   0x020, 0x024, 0x028, 24, 4, 31, 0x04, 3, CLK_IS_CRITICAL),
+	/* CLK_CFG_1 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_VPP, "top_vpp",
+			     vpp_parents, 0x02C, 0x030, 0x034, 0, 4, 7, 0x04, 4),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_ETHDR, "top_ethdr",
+			     ethdr_parents, 0x02C, 0x030, 0x034, 8, 4, 15, 0x04, 5),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_IPE, "top_ipe",
+			     ipe_parents, 0x02C, 0x030, 0x034, 16, 4, 23, 0x04, 6),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_CAM, "top_cam",
+			     cam_parents, 0x02C, 0x030, 0x034, 24, 4, 31, 0x04, 7),
+	/* CLK_CFG_2 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_CCU, "top_ccu",
+			     ccu_parents, 0x038, 0x03C, 0x040, 0, 4, 7, 0x04, 8),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_CCU_AHB, "top_ccu_ahb",
+			     ccu_ahb_parents, 0x038, 0x03C, 0x040, 8, 4, 15, 0x04, 9),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_IMG, "top_img",
+			     img_parents, 0x038, 0x03C, 0x040, 16, 4, 23, 0x04, 10),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTM, "top_camtm",
+			     camtm_parents, 0x038, 0x03C, 0x040, 24, 4, 31, 0x04, 11),
+	/* CLK_CFG_3 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP, "top_dsp",
+			     dsp_parents, 0x044, 0x048, 0x04C, 0, 4, 7, 0x04, 12),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP1, "top_dsp1",
+			     dsp1_parents, 0x044, 0x048, 0x04C, 8, 4, 15, 0x04, 13),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP2, "top_dsp2",
+			     dsp2_parents, 0x044, 0x048, 0x04C, 16, 4, 23, 0x04, 14),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP3, "top_dsp3",
+			     dsp3_parents, 0x044, 0x048, 0x04C, 24, 4, 31, 0x04, 15),
+	/* CLK_CFG_4 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP4, "top_dsp4",
+			     dsp4_parents, 0x050, 0x054, 0x058, 0, 4, 7, 0x04, 16),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP5, "top_dsp5",
+			     dsp5_parents, 0x050, 0x054, 0x058, 8, 4, 15, 0x04, 17),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP6, "top_dsp6",
+			     dsp6_parents, 0x050, 0x054, 0x058, 16, 4, 23, 0x04, 18),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP7, "top_dsp7",
+			     dsp7_parents, 0x050, 0x054, 0x058, 24, 4, 31, 0x04, 19),
+	/* CLK_CFG_5 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_MFG_CORE_TMP, "top_mfg_core_tmp",
+			     mfg_core_tmp_parents, 0x05C, 0x060, 0x064, 0, 4, 7, 0x04, 20),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG, "top_camtg",
+			     camtg_parents, 0x05C, 0x060, 0x064, 8, 4, 15, 0x04, 21),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG2, "top_camtg2",
+			     camtg2_parents, 0x05C, 0x060, 0x064, 16, 4, 23, 0x04, 22),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG3, "top_camtg3",
+			     camtg3_parents, 0x05C, 0x060, 0x064, 24, 4, 31, 0x04, 23),
+	/* CLK_CFG_6 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_UART, "top_uart",
+			     uart_parents, 0x068, 0x06C, 0x070, 0, 4, 7, 0x04, 24),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_SPI, "top_spi",
+			     spi_parents, 0x068, 0x06C, 0x070, 8, 4, 15, 0x04, 25),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_MSDC50_0_HCLK, "top_msdc5hclk",
+			     msdc5hclk_parents, 0x068, 0x06C, 0x070, 16, 4, 23, 0x04, 26),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_MSDC50_0, "top_msdc50_0",
+			     msdc50_0_parents, 0x068, 0x06C, 0x070, 24, 4, 31, 0x04, 27),
+	/* CLK_CFG_7 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_MSDC30_1, "top_msdc30_1",
+			     msdc30_1_parents, 0x074, 0x078, 0x07C, 0, 4, 7, 0x04, 28),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_MSDC30_2, "top_msdc30_2",
+			     msdc30_2_parents, 0x074, 0x078, 0x07C, 8, 4, 15, 0x04, 29),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_INTDIR, "top_intdir",
+			     intdir_parents, 0x074, 0x078, 0x07C, 16, 4, 23, 0x04, 30),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_INTBUS, "top_aud_intbus",
+			     aud_intbus_parents, 0x074, 0x078, 0x07C, 24, 4, 31, 0x04, 31),
+	/* CLK_CFG_8 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_AUDIO_H, "top_audio_h",
+			     audio_h_parents, 0x080, 0x084, 0x088, 0, 4, 7, 0x08, 0),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_PWRAP_ULPOSC, "top_pwrap_ulposc",
+			     pwrap_ulposc_parents, 0x080, 0x084, 0x088, 8, 4, 15, 0x08, 1),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_ATB, "top_atb",
+			     atb_parents, 0x080, 0x084, 0x088, 16, 4, 23, 0x08, 2),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_SSPM, "top_sspm",
+			     sspm_parents, 0x080, 0x084, 0x088, 24, 4, 31, 0x08, 3),
+	/* CLK_CFG_9 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DP, "top_dp",
+			     dp_parents, 0x08C, 0x090, 0x094, 0, 4, 7, 0x08, 4),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_EDP, "top_edp",
+			     edp_parents, 0x08C, 0x090, 0x094, 8, 4, 15, 0x08, 5),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DPI, "top_dpi",
+			     dpi_parents, 0x08C, 0x090, 0x094, 16, 4, 23, 0x08, 6),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DISP_PWM0, "top_disp_pwm0",
+			     disp_pwm0_parents, 0x08C, 0x090, 0x094, 24, 4, 31, 0x08, 7),
+	/* CLK_CFG_10 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DISP_PWM1, "top_disp_pwm1",
+			     disp_pwm1_parents, 0x098, 0x09C, 0x0A0, 0, 4, 7, 0x08, 8),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_USB_TOP, "top_usb_top",
+			     usb_parents, 0x098, 0x09C, 0x0A0, 8, 4, 15, 0x08, 9),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_SSUSB_XHCI, "top_ssusb_xhci",
+			     ssusb_xhci_parents, 0x098, 0x09C, 0x0A0, 16, 4, 23, 0x08, 10),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_USB_TOP_2P, "top_usb_top_2p",
+			     usb_2p_parents, 0x098, 0x09C, 0x0A0, 24, 4, 31, 0x08, 11),
+	/* CLK_CFG_11 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_SSUSB_XHCI_2P, "top_ssusb_xhci_2p",
+			     ssusb_xhci_2p_parents, 0x0A4, 0x0A8, 0x0AC, 0, 4, 7, 0x08, 12),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_USB_TOP_3P, "top_usb_top_3p",
+			     usb_3p_parents, 0x0A4, 0x0A8, 0x0AC, 8, 4, 15, 0x08, 13),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_SSUSB_XHCI_3P, "top_ssusb_xhci_3p",
+			     ssusb_xhci_3p_parents, 0x0A4, 0x0A8, 0x0AC, 16, 4, 23, 0x08, 14),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_I2C, "top_i2c",
+			     i2c_parents, 0x0A4, 0x0A8, 0x0AC, 24, 4, 31, 0x08, 15),
+	/* CLK_CFG_12 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF, "top_seninf",
+			     seninf_parents, 0x0B0, 0x0B4, 0x0B8, 0, 4, 7, 0x08, 16),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF1, "top_seninf1",
+			     seninf1_parents, 0x0B0, 0x0B4, 0x0B8, 8, 4, 15, 0x08, 17),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_GCPU, "top_gcpu",
+			     gcpu_parents, 0x0B0, 0x0B4, 0x0B8, 16, 4, 23, 0x08, 18),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_VENC, "top_venc",
+			     venc_parents, 0x0B0, 0x0B4, 0x0B8, 24, 4, 31, 0x08, 19),
+	/*
+	 * CLK_CFG_13
+	 * top_mcupm is main clock in co-processor, should not be handled by Linux.
+	 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_VDEC, "top_vdec",
+			     vdec_parents, 0x0BC, 0x0C0, 0x0C4, 0, 4, 7, 0x08, 20),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_PWM, "top_pwm",
+			     pwm_parents, 0x0BC, 0x0C0, 0x0C4, 8, 4, 15, 0x08, 21),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_MCUPM, "top_mcupm", mcupm_parents,
+				   0x0BC, 0x0C0, 0x0C4, 16, 4, 23, 0x08, 22, CLK_IS_CRITICAL),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_SPMI_P_MST, "top_spmi_p_mst",
+			     spmi_p_mst_parents, 0x0BC, 0x0C0, 0x0C4, 24, 4, 31, 0x08, 23),
+	/*
+	 * CLK_CFG_14
+	 * dvfsrc_sel is for internal DVFS usage, should not be handled by Linux.
+	 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_SPMI_M_MST, "top_spmi_m_mst",
+			     spmi_m_mst_parents, 0x0C8, 0x0CC, 0x0D0, 0, 4, 7, 0x08, 24),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_DVFSRC, "top_dvfsrc", dvfsrc_parents,
+				   0x0C8, 0x0CC, 0x0D0, 8, 4, 15, 0x08, 25, CLK_IS_CRITICAL),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_TL, "top_tl",
+			     tl_parents, 0x0C8, 0x0CC, 0x0D0, 16, 4, 23, 0x08, 26),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_AES_MSDCFDE, "top_aes_msdcfde",
+			     aes_msdcfde_parents, 0x0C8, 0x0CC, 0x0D0, 24, 4, 31, 0x08, 27),
+	/* CLK_CFG_15 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSI_OCC, "top_dsi_occ",
+			     dsi_occ_parents, 0x0D4, 0x0D8, 0x0DC, 0, 4, 7, 0x08, 28),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_WPE_VPP, "top_wpe_vpp",
+			     wpe_vpp_parents, 0x0D4, 0x0D8, 0x0DC, 8, 4, 15, 0x08, 29),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_HDCP, "top_hdcp",
+			     hdcp_parents, 0x0D4, 0x0D8, 0x0DC, 16, 4, 23, 0x08, 30),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_HDCP_24M, "top_hdcp_24m",
+			     hdcp_24m_parents, 0x0D4, 0x0D8, 0x0DC, 24, 4, 31, 0x08, 31),
+	/* CLK_CFG_16 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_HDMI_APB, "top_hdmi_apb",
+			     hdmi_apb_parents, 0x0E0, 0x0E4, 0x0E8, 0, 4, 7, 0x0C, 0),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_SNPS_ETH_250M, "top_snps_eth_250m",
+			     snps_eth_250m_parents, 0x0E0, 0x0E4, 0x0E8, 8, 4, 15, 0x0C, 1),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_SNPS_ETH_62P4M_PTP, "top_snps_eth_62p4m_ptp",
+			     snps_eth_62p4m_ptp_parents, 0x0E0, 0x0E4, 0x0E8, 16, 4, 23, 0x0C, 2),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_SNPS_ETH_50M_RMII, "snps_eth_50m_rmii",
+			     snps_eth_50m_rmii_parents, 0x0E0, 0x0E4, 0x0E8, 24, 4, 31, 0x0C, 3),
+	/* CLK_CFG_17 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_ADSP, "top_adsp",
+			     adsp_parents, 0x0EC, 0x0F0, 0x0F4, 0, 4, 7, 0x0C, 4),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_AUDIO_LOCAL_BUS, "top_audio_local_bus",
+			     audio_local_bus_parents, 0x0EC, 0x0F0, 0x0F4, 8, 4, 15, 0x0C, 5),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_ASM_H, "top_asm_h",
+			     asm_h_parents, 0x0EC, 0x0F0, 0x0F4, 16, 4, 23, 0x0C, 6),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_ASM_L, "top_asm_l",
+			     asm_l_parents, 0x0EC, 0x0F0, 0x0F4, 24, 4, 31, 0x0C, 7),
+	/* CLK_CFG_18 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_APLL1, "top_apll1",
+			     apll1_parents, 0x0F8, 0x0FC, 0x100, 0, 4, 7, 0x0C, 8),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_APLL2, "top_apll2",
+			     apll2_parents, 0x0F8, 0x0FC, 0x100, 8, 4, 15, 0x0C, 9),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_APLL3, "top_apll3",
+			     apll3_parents, 0x0F8, 0x0FC, 0x100, 16, 4, 23, 0x0C, 10),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_APLL4, "top_apll4",
+			     apll4_parents, 0x0F8, 0x0FC, 0x100, 24, 4, 31, 0x0C, 11),
+	/* CLK_CFG_19 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_APLL5, "top_apll5",
+			     apll5_parents, 0x0104, 0x0108, 0x010C, 0, 4, 7, 0x0C, 12),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_I2SO1, "top_i2so1",
+			     i2so1_parents, 0x0104, 0x0108, 0x010C, 8, 4, 15, 0x0C, 13),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_I2SO2, "top_i2so2",
+			     i2so2_parents, 0x0104, 0x0108, 0x010C, 16, 4, 23, 0x0C, 14),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_I2SI1, "top_i2si1",
+			     i2si1_parents, 0x0104, 0x0108, 0x010C, 24, 4, 31, 0x0C, 15),
+	/* CLK_CFG_20 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_I2SI2, "top_i2si2",
+			     i2si2_parents, 0x0110, 0x0114, 0x0118, 0, 4, 7, 0x0C, 16),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_DPTX, "top_dptx",
+			     dptx_parents, 0x0110, 0x0114, 0x0118, 8, 4, 15, 0x0C, 17),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_IEC, "top_aud_iec",
+			     aud_iec_parents, 0x0110, 0x0114, 0x0118, 16, 4, 23, 0x0C, 18),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_A1SYS_HP, "top_a1sys_hp",
+			     a1sys_hp_parents, 0x0110, 0x0114, 0x0118, 24, 4, 31, 0x0C, 19),
+	/* CLK_CFG_21 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_A2SYS, "top_a2sys",
+			     a2sys_parents, 0x011C, 0x0120, 0x0124, 0, 4, 7, 0x0C, 20),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_A3SYS, "top_a3sys",
+			     a3sys_parents, 0x011C, 0x0120, 0x0124, 8, 4, 15, 0x0C, 21),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_A4SYS, "top_a4sys",
+			     a4sys_parents, 0x011C, 0x0120, 0x0124, 16, 4, 23, 0x0C, 22),
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_ECC, "top_ecc",
+			     ecc_parents, 0x011C, 0x0120, 0x0124, 24, 4, 31, 0x0C, 23),
+	/*
+	 * CLK_CFG_22
+	 * top_ulposc/top_srck are clock source of always on co-processor,
+	 * should not be closed by Linux.
+	 */
+	MUX_GATE_CLR_SET_UPD(CLK_TOP_SPINOR, "top_spinor",
+			     spinor_parents, 0x0128, 0x012C, 0x0130, 0, 4, 7, 0x0C, 24),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_ULPOSC, "top_ulposc", ulposc_parents,
+				   0x0128, 0x012C, 0x0130, 8, 4, 15, 0x0C, 25, CLK_IS_CRITICAL),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SRCK, "top_srck", srck_parents,
+				   0x0128, 0x012C, 0x0130, 16, 4, 23, 0x0C, 26, CLK_IS_CRITICAL),
+};
+
+static const struct mtk_composite top_adj_divs[] = {
+	DIV_GATE(CLK_TOP_APLL12_CK_DIV0, "apll12_div0", "top_i2si1", 0x0320, 0, 0x0328, 8, 0),
+	DIV_GATE(CLK_TOP_APLL12_CK_DIV1, "apll12_div1", "top_i2si2", 0x0320, 1, 0x0328, 8, 8),
+	DIV_GATE(CLK_TOP_APLL12_CK_DIV2, "apll12_div2", "top_i2so1", 0x0320, 2, 0x0328, 8, 16),
+	DIV_GATE(CLK_TOP_APLL12_CK_DIV3, "apll12_div3", "top_i2so2", 0x0320, 3, 0x0328, 8, 24),
+	DIV_GATE(CLK_TOP_APLL12_CK_DIV4, "apll12_div4", "top_aud_iec", 0x0320, 4, 0x0334, 8, 0),
+	DIV_GATE(CLK_TOP_APLL12_CK_DIV9, "apll12_div9", "top_dptx", 0x0320, 9, 0x0338, 8, 8),
+};
+static const struct mtk_gate_regs top0_cg_regs = {
+	.set_ofs = 0x238,
+	.clr_ofs = 0x238,
+	.sta_ofs = 0x238,
+};
+
+static const struct mtk_gate_regs top1_cg_regs = {
+	.set_ofs = 0x250,
+	.clr_ofs = 0x250,
+	.sta_ofs = 0x250,
+};
+
+#define GATE_TOP0(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &top0_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv)
+
+#define GATE_TOP1(_id, _name, _parent, _shift)			\
+	GATE_MTK(_id, _name, _parent, &top1_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv)
+
+static const struct mtk_gate top_clks[] = {
+	/* TOP0 */
+	GATE_TOP0(CLK_TOP_CFGREG_CLOCK_EN_VPP0, "cfgreg_clock_vpp0", "top_vpp", 0),
+	GATE_TOP0(CLK_TOP_CFGREG_CLOCK_EN_VPP1, "cfgreg_clock_vpp1", "top_vpp", 1),
+	GATE_TOP0(CLK_TOP_CFGREG_CLOCK_EN_VDO0, "cfgreg_clock_vdo0", "top_vpp", 2),
+	GATE_TOP0(CLK_TOP_CFGREG_CLOCK_EN_VDO1, "cfgreg_clock_vdo1", "top_vpp", 3),
+	GATE_TOP0(CLK_TOP_CFGREG_CLOCK_ISP_AXI_GALS, "cfgreg_clock_isp_axi_gals", "top_vpp", 4),
+	GATE_TOP0(CLK_TOP_CFGREG_F26M_VPP0, "cfgreg_f26m_vpp0", "clk26m", 5),
+	GATE_TOP0(CLK_TOP_CFGREG_F26M_VPP1, "cfgreg_f26m_vpp1", "clk26m", 6),
+	GATE_TOP0(CLK_TOP_CFGREG_F26M_VDO0, "cfgreg_f26m_vdo0", "clk26m", 7),
+	GATE_TOP0(CLK_TOP_CFGREG_F26M_VDO1, "cfgreg_f26m_vdo1", "clk26m", 8),
+	GATE_TOP0(CLK_TOP_CFGREG_AUD_F26M_AUD, "cfgreg_aud_f26m_aud", "clk26m", 9),
+	GATE_TOP0(CLK_TOP_CFGREG_UNIPLL_SES, "cfgreg_unipll_ses", "univpll_d2", 15),
+	GATE_TOP0(CLK_TOP_CFGREG_F_PCIE_PHY_REF, "cfgreg_f_pcie_phy_ref", "clk26m", 18),
+	/* TOP1 */
+	GATE_TOP1(CLK_TOP_SSUSB_TOP_REF, "ssusb_ref", "clk26m", 0),
+	GATE_TOP1(CLK_TOP_SSUSB_PHY_REF, "ssusb_phy_ref", "clk26m", 1),
+	GATE_TOP1(CLK_TOP_SSUSB_TOP_P1_REF, "ssusb_p1_ref", "clk26m", 2),
+	GATE_TOP1(CLK_TOP_SSUSB_PHY_P1_REF, "ssusb_phy_p1_ref", "clk26m", 3),
+	GATE_TOP1(CLK_TOP_SSUSB_TOP_P2_REF, "ssusb_p2_ref", "clk26m", 4),
+	GATE_TOP1(CLK_TOP_SSUSB_PHY_P2_REF, "ssusb_phy_p2_ref", "clk26m", 5),
+	GATE_TOP1(CLK_TOP_SSUSB_TOP_P3_REF, "ssusb_p3_ref", "clk26m", 6),
+	GATE_TOP1(CLK_TOP_SSUSB_PHY_P3_REF, "ssusb_phy_p3_ref", "clk26m", 7),
+};
+
+static const struct of_device_id of_match_clk_mt8188_topck[] = {
+	{ .compatible = "mediatek,mt8188-topckgen", },
+	{}
+};
+
+/* Register mux notifier for MFG mux */
+static int clk_mt8188_reg_mfg_mux_notifier(struct device *dev, struct clk *clk)
+{
+	struct mtk_mux_nb *mfg_mux_nb;
+
+	mfg_mux_nb = devm_kzalloc(dev, sizeof(*mfg_mux_nb), GFP_KERNEL);
+	if (!mfg_mux_nb)
+		return -ENOMEM;
+
+	mfg_mux_nb->ops = &clk_mux_ops;
+	mfg_mux_nb->bypass_index = 0; /* Bypass to TOP_MFG_CORE_TMP */
+
+	return devm_mtk_clk_mux_notifier_register(dev, clk, mfg_mux_nb);
+}
+
+static int clk_mt8188_topck_probe(struct platform_device *pdev)
+{
+	struct clk_hw_onecell_data *top_clk_data;
+	struct device_node *node = pdev->dev.of_node;
+	struct clk_hw *hw;
+	int r;
+	void __iomem *base;
+
+	top_clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
+	if (!top_clk_data)
+		return -ENOMEM;
+
+	base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(base)) {
+		r = PTR_ERR(base);
+		goto free_top_data;
+	}
+
+	r = mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks),
+					top_clk_data);
+	if (r)
+		goto free_top_data;
+
+	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
+	if (r)
+		goto unregister_fixed_clks;
+
+	r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node,
+				   &mt8188_clk_lock, top_clk_data);
+	if (r)
+		goto unregister_factors;
+
+	hw = devm_clk_hw_register_mux(&pdev->dev, "mfg_ck_fast_ref", mfg_fast_ref_parents,
+				      ARRAY_SIZE(mfg_fast_ref_parents), CLK_SET_RATE_PARENT,
+				      (base + 0x250), 8, 1, 0, &mt8188_clk_lock);
+	if (IS_ERR(hw)) {
+		r = PTR_ERR(hw);
+		goto unregister_muxes;
+	}
+	top_clk_data->hws[CLK_TOP_MFG_CK_FAST_REF] = hw;
+
+	r = clk_mt8188_reg_mfg_mux_notifier(&pdev->dev,
+					    top_clk_data->hws[CLK_TOP_MFG_CK_FAST_REF]->clk);
+	if (r)
+		goto unregister_muxes;
+
+	r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
+					&mt8188_clk_lock, top_clk_data);
+	if (r)
+		goto unregister_muxes;
+
+	r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), top_clk_data);
+	if (r)
+		goto unregister_composite_divs;
+
+	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, top_clk_data);
+	if (r)
+		goto unregister_gates;
+
+	platform_set_drvdata(pdev, top_clk_data);
+
+	return r;
+
+unregister_gates:
+	mtk_clk_unregister_gates(top_clks, ARRAY_SIZE(top_clks), top_clk_data);
+unregister_composite_divs:
+	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), top_clk_data);
+unregister_muxes:
+	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), top_clk_data);
+unregister_factors:
+	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
+unregister_fixed_clks:
+	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data);
+free_top_data:
+	mtk_free_clk_data(top_clk_data);
+	return r;
+}
+
+static int clk_mt8188_topck_remove(struct platform_device *pdev)
+{
+	struct clk_hw_onecell_data *top_clk_data = platform_get_drvdata(pdev);
+	struct device_node *node = pdev->dev.of_node;
+
+	of_clk_del_provider(node);
+	mtk_clk_unregister_gates(top_clks, ARRAY_SIZE(top_clks), top_clk_data);
+	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), top_clk_data);
+	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), top_clk_data);
+	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
+	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data);
+	mtk_free_clk_data(top_clk_data);
+
+	return 0;
+}
+
+static struct platform_driver clk_mt8188_topck_drv = {
+	.probe = clk_mt8188_topck_probe,
+	.remove = clk_mt8188_topck_remove,
+	.driver = {
+		.name = "clk-mt8188-topck",
+		.of_match_table = of_match_clk_mt8188_topck,
+	},
+};
+builtin_platform_driver(clk_mt8188_topck_drv);
-- 
2.18.0



From wenst at chromium.org  Fri Dec 30 00:15:52 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 16:15:52 +0800
Subject: [PATCH v2 20/23] clk: mediatek: clk-mt8186-topckgen: Migrate to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-21-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-21-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5E26i6F2BPZYDfRhM-OMei-Br276UNtRVr5=+7pT+HTqg@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> As done with MT8192, migrate MT8186 topckgen away from a custom probe
> function and use mtk_clk_simple_{probe, remove}().
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>


From wenst at chromium.org  Fri Dec 30 00:17:45 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 16:17:45 +0800
Subject: [PATCH v2 16/23] clk: mediatek: mt8186: Join top_adj_div and top_muxes
In-Reply-To: <20221223094259.87373-17-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-17-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5GR7ef8pTVDHa20QH4hBv2rMAqoY2MjKqK5QRdbFdfDKw@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Like done for MT8192, join the two to register them in one shot, as
> there's no point in doing that separately from one another.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> ---
>  drivers/clk/mediatek/clk-mt8186-topckgen.c | 15 ++-------------
>  1 file changed, 2 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/clk/mediatek/clk-mt8186-topckgen.c b/drivers/clk/mediatek/clk-mt8186-topckgen.c
> index d05143891b69..63befb1f492d 100644
> --- a/drivers/clk/mediatek/clk-mt8186-topckgen.c
> +++ b/drivers/clk/mediatek/clk-mt8186-topckgen.c
> @@ -669,9 +669,6 @@ static struct mtk_composite top_muxes[] = {
>         MUX(CLK_TOP_APLL_I2S4_MCK_SEL, "apll_i2s4_mck_sel", apll_mck_parents, 0x0320, 19, 1),
>         MUX(CLK_TOP_APLL_TDMOUT_MCK_SEL, "apll_tdmout_mck_sel", apll_mck_parents,
>                 0x0320, 20, 1),
> -};
> -
> -static const struct mtk_composite top_adj_divs[] = {
>         DIV_GATE(CLK_TOP_APLL12_CK_DIV0, "apll12_div0", "apll_i2s0_mck_sel",
>                         0x0320, 0, 0x0328, 8, 0),
>         DIV_GATE(CLK_TOP_APLL12_CK_DIV1, "apll12_div1", "apll_i2s1_mck_sel",
> @@ -747,26 +744,19 @@ static int clk_mt8186_topck_probe(struct platform_device *pdev)
>         if (r)
>                 goto unregister_muxes;
>
> -       r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base,
> -                                       &mt8186_clk_lock, clk_data, &pdev->dev);
> -       if (r)
> -               goto unregister_composite_muxes;
> -
>         r = clk_mt8186_reg_mfg_mux_notifier(&pdev->dev,
>                                             clk_data->hws[CLK_TOP_MFG]->clk);
>         if (r)
> -               goto unregister_composite_divs;
> +               goto unregister_composite_muxes;
>
>         r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
>         if (r)
> -               goto unregister_composite_divs;
> +               goto unregister_composite_muxes;
>
>         platform_set_drvdata(pdev, clk_data);
>
>         return r;
>
> -unregister_composite_divs:
> -       mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), clk_data);
>  unregister_composite_muxes:
>         mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);
>  unregister_muxes:
> @@ -787,7 +777,6 @@ static int clk_mt8186_topck_remove(struct platform_device *pdev)
>
>         of_clk_del_provider(node);
>         mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), clk_data);
> -       mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), clk_data);

Wrong line? Not sure how this would've compiled.

>         mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), clk_data);
>         mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
>         mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), clk_data);
> --
> 2.39.0
>


From wenst at chromium.org  Fri Dec 30 00:18:28 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 16:18:28 +0800
Subject: [PATCH v2 19/23] clk: mediatek: clk-mt8192: Migrate topckgen to mtk_clk_simple_probe()
In-Reply-To: <20221223094259.87373-20-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-20-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5FzMe_W-p2NW2DWtcPY4KVUVucpc9iL322GOB4bY=w8jQ@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Since the common simple probe function for MediaTek clock drivers can
> now register the MFG MUX notifier, it's possible to migrate MT8192's
> topckgen to that, allowing for some code size reduction.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>


From wenst at chromium.org  Fri Dec 30 00:19:50 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 16:19:50 +0800
Subject: [PATCH v2 17/23] clk: mediatek: clk-mt8183: Join top_aud_muxes
 and top_aud_divs
In-Reply-To: <20221223094259.87373-18-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-18-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5FeUfmw9iUyS=-XhkvGueZ9uMxH8G3V_KnB-2uKy48ccA@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> Join the two to register them in one shot.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>


From wenst at chromium.org  Fri Dec 30 00:22:12 2022
From: wenst at chromium.org (Chen-Yu Tsai)
Date: Fri, 30 Dec 2022 16:22:12 +0800
Subject: [PATCH v2 08/23] clk: mediatek: mt8173: Migrate to platform
 driver and common probe
In-Reply-To: <20221223094259.87373-9-angelogioacchino.delregno@collabora.com>
References: <20221223094259.87373-1-angelogioacchino.delregno@collabora.com> <20221223094259.87373-9-angelogioacchino.delregno@collabora.com>
Message-ID: <CAGXv+5FGJhkhHHoyx8S7v6KzBJ+ifSXU+X1EUVqpkydrRVHGMw@mail.gmail.com>

On Fri, Dec 23, 2022 at 5:43 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno at collabora.com> wrote:
>
> This driver is using CLK_OF_DECLARE() for all clocks: while this
> definitely works, it's not preferred as this makes it impossible
> to compile non boot critical clock drivers as modules and to take
> advantage of clock controller Runtime PM.
>
> As a preparation for a larger cleanup, migrate all of the clock
> controller drivers for MT8173 to platform_driver and use the
> common mtk_clk_simple_probe() where possible.

Should also mention that proper error handling was added. Otherwise,

Reviewed-by: Chen-Yu Tsai <wenst at chromium.org>


From bagasdotme at gmail.com  Fri Dec 30 01:06:10 2022
From: bagasdotme at gmail.com (Bagas Sanjaya)
Date: Fri, 30 Dec 2022 16:06:10 +0700
Subject: [V2] media: jpeg: Fix multi-hw judgement
In-Reply-To: <0846a7d726135d28f1da2a94eaa4c978754f9d2f.camel@mediatek.com>
References: <20221216035247.18816-1-irui.wang@mediatek.com>
 <Y6w2wG2MlIiHlkr/@debian.me>
 <0846a7d726135d28f1da2a94eaa4c978754f9d2f.camel@mediatek.com>
Message-ID: <69095f6d-2f1d-07ab-26ac-5f35ea80a58a@gmail.com>

On 12/29/22 15:19, Kyrie Wu (??) wrote:
> On Wed, 2022-12-28 at 19:29 +0700, Bagas Sanjaya wrote:
>> On Fri, Dec 16, 2022 at 11:52:47AM +0800, Irui Wang wrote:
>> > From: kyrie wu <kyrie.wu at mediatek.com>
>> > 
>> > some chips have multi-hw, but others have only one,
>> > modify the condition of multi-hw judgement
>> 
>> nit: s/judgement/conditional block/ ...
>> 
>> > -if (list_empty(&pdev->dev.devres_head)) {
>> > +if (!jpeg->variant->hw_arch) {
>> 
>> ... like here (if block).
>> 
>> Thanks.
> 
> Hi Bagas,
> 
> I can't get your suggestion exactly.
> Do you mean to change if (...) as follows:
> if (jpeg->variant->hw_arch)

No, not what I mean. I pointed you at the correct terminology
with your code as example.

Thanks.

-- 
An old man doll... just what I always wanted! - Clara



From krzysztof.kozlowski at linaro.org  Fri Dec 30 02:41:10 2022
From: krzysztof.kozlowski at linaro.org (Krzysztof Kozlowski)
Date: Fri, 30 Dec 2022 11:41:10 +0100
Subject: [PATCH v3 01/19] dt-bindings: ARM: MediaTek: Add new document
 bindings of MT8188 clock
In-Reply-To: <20221230073357.18503-2-Garmin.Chang@mediatek.com>
References: <20221230073357.18503-1-Garmin.Chang@mediatek.com>
 <20221230073357.18503-2-Garmin.Chang@mediatek.com>
Message-ID: <33196eef-b1d5-8dd2-7c59-16a73327e8c0@linaro.org>

On 30/12/2022 08:33, Garmin.Chang wrote:
> Add the new binding documentation for system clock
> and functional clock on MediaTek MT8188.
> 

Subject: drop second, redundant "document bindings of".

> Signed-off-by: Garmin.Chang <Garmin.Chang at mediatek.com>
> ---
>  .../arm/mediatek/mediatek,mt8188-clock.yaml   |  71 ++
>  .../mediatek/mediatek,mt8188-sys-clock.yaml   |  55 ++
>  .../dt-bindings/clock/mediatek,mt8188-clk.h   | 733 ++++++++++++++++++
>  3 files changed, 859 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-clock.yaml
>  create mode 100644 Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-sys-clock.yaml
>  create mode 100644 include/dt-bindings/clock/mediatek,mt8188-clk.h
> 
> diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-clock.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-clock.yaml
> new file mode 100644
> index 000000000000..6654cead71f6
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-clock.yaml

Clock controllers do not go to arm but to clock. It's so suprising
directory that I missed to notice it in v1... Why putting it in some
totally irrelevant directory?


> @@ -0,0 +1,71 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/arm/mediatek/mediatek,mt8188-clock.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: MediaTek Functional Clock Controller for MT8188
> +
> +maintainers:
> +  - Garmin Chang <garmin.chang at mediatek.com>
> +
> +description: |
> +  The clock architecture in MediaTek like below
> +  PLLs -->
> +          dividers -->
> +                      muxes
> +                           -->
> +                              clock gate
> +
> +  The devices provide clock gate control in different IP blocks.
> +
> +properties:
> +  compatible:
> +    enum:
> +      - mediatek,mt8188-adsp-audio26m
> +      - mediatek,mt8188-imp-iic-wrap-c
> +      - mediatek,mt8188-imp-iic-wrap-en
> +      - mediatek,mt8188-imp-iic-wrap-w
> +      - mediatek,mt8188-mfgcfg
> +      - mediatek,mt8188-vppsys0
> +      - mediatek,mt8188-wpesys
> +      - mediatek,mt8188-wpesys-vpp0
> +      - mediatek,mt8188-vppsys1
> +      - mediatek,mt8188-imgsys
> +      - mediatek,mt8188-imgsys-wpe1
> +      - mediatek,mt8188-imgsys-wpe2
> +      - mediatek,mt8188-imgsys-wpe3
> +      - mediatek,mt8188-imgsys1-dip-top
> +      - mediatek,mt8188-imgsys1-dip-nr
> +      - mediatek,mt8188-ipesys
> +      - mediatek,mt8188-camsys
> +      - mediatek,mt8188-camsys-rawa
> +      - mediatek,mt8188-camsys-yuva
> +      - mediatek,mt8188-camsys-rawb
> +      - mediatek,mt8188-camsys-yuvb
> +      - mediatek,mt8188-ccusys
> +      - mediatek,mt8188-vdecsys-soc
> +      - mediatek,mt8188-vdecsys
> +      - mediatek,mt8188-vencsys
> +
> +  reg:
> +    maxItems: 1
> +
> +  '#clock-cells':
> +    const: 1
> +
> +required:
> +  - compatible
> +  - reg
> +  - '#clock-cells'
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    clock-controller at 11283000 {
> +        compatible = "mediatek,mt8188-imp-iic-wrap-c";
> +        reg = <0x11283000 0x1000>;
> +        #clock-cells = <1>;
> +    };
> +
> diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-sys-clock.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-sys-clock.yaml
> new file mode 100644
> index 000000000000..2b28df1ff895
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mt8188-sys-clock.yaml

Wrong directory.

> @@ -0,0 +1,55 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/arm/mediatek/mediatek,mt8188-sys-clock.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: MediaTek System Clock Controller for MT8188
> +
> +maintainers:
> +  - Garmin Chang <garmin.chang at mediatek.com>
> +
> +description: |
> +  The clock architecture in MediaTek like below
> +  PLLs -->
> +          dividers -->
> +                      muxes
> +                           -->
> +                              clock gate
> +
> +  The apmixedsys provides most of PLLs which generated from SoC 26m.
> +  The topckgen provides dividers and muxes which provide the clock source to other IP blocks.
> +  The infracfg_ao provides clock gate in peripheral and infrastructure IP blocks.
> +  The mcusys provides mux control to select the clock source in AP MCU.
> +  The device nodes also provide the system control capacity for configuration.
> +
> +properties:
> +  compatible:
> +    items:
> +      - enum:
> +          - mediatek,mt8188-topckgen
> +          - mediatek,mt8188-infracfg-ao
> +          - mediatek,mt8188-apmixedsys
> +          - mediatek,mt8188-pericfg-ao
> +      - const: syscon
> +
> +  reg:
> +    maxItems: 1
> +
> +  '#clock-cells':
> +    const: 1
> +
> +required:
> +  - compatible
> +  - reg
> +  - '#clock-cells'
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    syscon at 10000000 {

clock-controller

> +        compatible = "mediatek,mt8188-topckgen", "syscon";
> +        reg = <0x10000000 0x1000>;
> +        #clock-cells = <1>;



Best regards,
Krzysztof



From frank-w at public-files.de  Fri Dec 30 03:46:58 2022
From: frank-w at public-files.de (Frank Wunderlich)
Date: Fri, 30 Dec 2022 12:46:58 +0100
Subject: Aw: [PATCH net v3 4/5] net: ethernet: mtk_eth_soc: drop generic
 vlan rx offload, only use DSA untagging
In-Reply-To: <20221230073145.53386-4-nbd@nbd.name>
References: <20221230073145.53386-1-nbd@nbd.name>
 <20221230073145.53386-4-nbd@nbd.name>
Message-ID: <trinity-a07d48f4-11cf-4a24-a797-03ad4b1150d9-1672400818371@3c-app-gmx-bap18>

Hi,

v2 or v3 seems to break vlan on mt7986 over eth0 (mt7531 switch). v1 was working on next from end of November. But my rebased tree with v1 on 6.2-rc1 has same issue, so something after next 2711 was added which break vlan over mt7531.

Directly over eth1 it works (was not working before).

if i made no mistake there is still something wrong.

btw. mt7622/r64 can also use second gmac (over vlan aware bridge with aux-port of switch to wan-port) it is only not default in mainline. But maybe this should not be used as decision for dropping "dsa-tag" (wrongly vlan-tag).

regards Frank


From nbd at nbd.name  Fri Dec 30 04:56:23 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Fri, 30 Dec 2022 13:56:23 +0100
Subject: Aw: [PATCH net v3 4/5] net: ethernet: mtk_eth_soc: drop generic
 vlan rx offload, only use DSA untagging
In-Reply-To: <trinity-a07d48f4-11cf-4a24-a797-03ad4b1150d9-1672400818371@3c-app-gmx-bap18>
References: <20221230073145.53386-1-nbd@nbd.name>
 <20221230073145.53386-4-nbd@nbd.name>
 <trinity-a07d48f4-11cf-4a24-a797-03ad4b1150d9-1672400818371@3c-app-gmx-bap18>
Message-ID: <82821d48-9259-9508-cc80-fc07f4d3ba14@nbd.name>

On 30.12.22 12:46, Frank Wunderlich wrote:
> Hi,
> 
> v2 or v3 seems to break vlan on mt7986 over eth0 (mt7531 switch). v1 was working on next from end of November. But my rebased tree with v1 on 6.2-rc1 has same issue, so something after next 2711 was added which break vlan over mt7531.
> 
> Directly over eth1 it works (was not working before).
> 
> if i made no mistake there is still something wrong.
> 
> btw. mt7622/r64 can also use second gmac (over vlan aware bridge with aux-port of switch to wan-port) it is only not default in mainline. But maybe this should not be used as decision for dropping "dsa-tag" (wrongly vlan-tag).
> 
> regards Frank
Thanks for reporting.
Please try this patch on top of the series:
---
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3218,10 +3218,8 @@ static int mtk_open(struct net_device *dev)
  	phylink_start(mac->phylink);
  	netif_tx_start_all_queues(dev);
  
-	if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
-		return 0;
-
-	if (mtk_uses_dsa(dev) && !eth->prog) {
+	if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) &&
+	    mtk_uses_dsa(dev) && !eth->prog) {
  		for (i = 0; i < ARRAY_SIZE(eth->dsa_meta); i++) {
  			struct metadata_dst *md_dst = eth->dsa_meta[i];
  
@@ -3244,10 +3242,6 @@ static int mtk_open(struct net_device *dev)
  		val &= ~MTK_CDMP_STAG_EN;
  		mtk_w32(eth, val, MTK_CDMP_IG_CTRL);
  
-		val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
-		val &= ~MTK_CDMQ_STAG_EN;
-		mtk_w32(eth, val, MTK_CDMQ_IG_CTRL);
-
  		mtk_w32(eth, 0, MTK_CDMP_EG_CTRL);
  	}
  



From frank-w at public-files.de  Fri Dec 30 05:56:05 2022
From: frank-w at public-files.de (Frank Wunderlich)
Date: Fri, 30 Dec 2022 14:56:05 +0100
Subject: Aw: Re:  [PATCH net v3 4/5] net: ethernet: mtk_eth_soc: drop
 generic vlan rx offload, only use DSA untagging
In-Reply-To: <82821d48-9259-9508-cc80-fc07f4d3ba14@nbd.name>
References: <20221230073145.53386-1-nbd@nbd.name>
 <20221230073145.53386-4-nbd@nbd.name>
 <trinity-a07d48f4-11cf-4a24-a797-03ad4b1150d9-1672400818371@3c-app-gmx-bap18>
 <82821d48-9259-9508-cc80-fc07f4d3ba14@nbd.name>
Message-ID: <trinity-ace28b50-2929-4af3-9dd2-765f848c4d99-1672408565903@3c-app-gmx-bap18>

Hi

thanks for fast response

> Gesendet: Freitag, 30. Dezember 2022 um 13:56 Uhr
> Von: "Felix Fietkau" <nbd at nbd.name>
> An: "Frank Wunderlich" <frank-w at public-files.de>
> Cc: netdev at vger.kernel.org, "John Crispin" <john at phrozen.org>, "Sean Wang" <sean.wang at mediatek.com>, "Mark Lee" <Mark-MC.Lee at mediatek.com>, "Lorenzo Bianconi" <lorenzo at kernel.org>, "David S. Miller" <davem at davemloft.net>, "Eric Dumazet" <edumazet at google.com>, "Jakub Kicinski" <kuba at kernel.org>, "Paolo Abeni" <pabeni at redhat.com>, "Matthias Brugger" <matthias.bgg at gmail.com>, "Russell King" <linux at armlinux.org.uk>, linux-arm-kernel at lists.infradead.org, linux-mediatek at lists.infradead.org, linux-kernel at vger.kernel.org
> Betreff: Re: Aw: [PATCH net v3 4/5] net: ethernet: mtk_eth_soc: drop generic vlan rx offload, only use DSA untagging
>
> On 30.12.22 12:46, Frank Wunderlich wrote:
> > Hi,
> >
> > v2 or v3 seems to break vlan on mt7986 over eth0 (mt7531 switch). v1 was working on next from end of November. But my rebased tree with v1 on 6.2-rc1 has same issue, so something after next 2711 was added which break vlan over mt7531.
> >
> > Directly over eth1 it works (was not working before).
> >
> > if i made no mistake there is still something wrong.
> >
> > btw. mt7622/r64 can also use second gmac (over vlan aware bridge with aux-port of switch to wan-port) it is only not default in mainline. But maybe this should not be used as decision for dropping "dsa-tag" (wrongly vlan-tag).
> >
> > regards Frank
> Thanks for reporting.
> Please try this patch on top of the series:
> ---
> --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
> +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
> @@ -3218,10 +3218,8 @@ static int mtk_open(struct net_device *dev)
>   	phylink_start(mac->phylink);
>   	netif_tx_start_all_queues(dev);
>
> -	if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
> -		return 0;
> -
> -	if (mtk_uses_dsa(dev) && !eth->prog) {
> +	if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) &&
> +	    mtk_uses_dsa(dev) && !eth->prog) {
>   		for (i = 0; i < ARRAY_SIZE(eth->dsa_meta); i++) {
>   			struct metadata_dst *md_dst = eth->dsa_meta[i];
>
> @@ -3244,10 +3242,6 @@ static int mtk_open(struct net_device *dev)
>   		val &= ~MTK_CDMP_STAG_EN;
>   		mtk_w32(eth, val, MTK_CDMP_IG_CTRL);
>
> -		val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
> -		val &= ~MTK_CDMQ_STAG_EN;
> -		mtk_w32(eth, val, MTK_CDMQ_IG_CTRL);
> -
>   		mtk_w32(eth, 0, MTK_CDMP_EG_CTRL);
>   	}
>
>
>

seems not helping...this is how i test it:

ip link set eth1 up
ip link add link eth1 name vlan500 type vlan id 500
ip link add link wan name vlan600 type vlan id 600
ip addr add 192.168.50.1/24 dev vlan500
ip addr add 192.168.60.1/24 dev vlan600
ip link set vlan500 up
ip link set wan up
ip link set vlan600 up

#do this on the other side:
#netif=enp3s0
#sudo ip link add link $netif name vlan500 type vlan id 500
#sudo ip link add link $netif name vlan600 type vlan id 600
#sudo ip link set vlan500 up
#sudo ip link set vlan600 up
#sudo ip addr add 192.168.50.2/24 dev vlan500
#sudo ip addr add 192.168.60.2/24 dev vlan600

verified all used ports on my switch are in trunk-mode with vlan-membership of these 2 vlan.



booted 6.1 and there is vlan on dsa-port broken too, so either my test-setup is broken or code...but wonder why 6.1 is broken too...

with tcp-dump on my laptop i see that some packets came in for both vlan, but they seem not valid, arp only for vlan 500 (eth1 on r3).

$ sudo tcpdump -i enp3s0 -nn -e  vlan
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on enp3s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
14:49:09.548909 e4:b9:7a:f7:c4:8b > 33:33:00:00:83:84, ethertype 802.1Q (0x8100), length 524: vlan 500, p 0, ethertype IPv6 (0x86dd), fe80::e6b9:7aff:fef7:c48b.34177 > ff12::8384.21027: UDP, length 458
14:49:09.548929 e4:b9:7a:f7:c4:8b > 33:33:00:00:83:84, ethertype 802.1Q (0x8100), length 524: vlan 600, p 0, ethertype IPv6 (0x86dd), fe80::e6b9:7aff:fef7:c48b.34177 > ff12::8384.21027: UDP, length 458
14:49:09.549470 e4:b9:7a:f7:c4:8b > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 504: vlan 500, p 0, ethertype IPv4 (0x0800), 192.168.50.2.33050 > 192.168.50.255.21027: UDP, length 458
14:49:09.549522 e4:b9:7a:f7:c4:8b > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 504: vlan 600, p 0, ethertype IPv4 (0x0800), 192.168.60.2.33050 > 192.168.60.255.21027: UDP, length 458
14:49:26.324503 92:65:f3:ec:b0:19 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 60: vlan 500, p 0, ethertype ARP (0x0806), Request who-has 192.168.50.2 tell 192.168.50.1, length 42
14:49:26.324525 e4:b9:7a:f7:c4:8b > 92:65:f3:ec:b0:19, ethertype 802.1Q (0x8100), length 46: vlan 500, p 0, ethertype ARP (0x0806), Reply 192.168.50.2 is-at e4:b9:7a:f7:c4:8b, length 28
14:49:26.325091 92:65:f3:ec:b0:19 > e4:b9:7a:f7:c4:8b, ethertype 802.1Q (0x8100), length 102: vlan 500, p 0, ethertype IPv4 (0x0800), 192.168.50.1 > 192.168.50.2: ICMP echo request, id 44246, seq 1, length 64
14:49:26.325158 e4:b9:7a:f7:c4:8b > 92:65:f3:ec:b0:19, ethertype 802.1Q (0x8100), length 102: vlan 500, p 0, ethertype IPv4 (0x0800), 192.168.50.2 > 192.168.50.1: ICMP echo reply, id 44246, seq 1, length 64

on r3 i see these packets going out (so far it looks good):

root at bpi-r3:~# ping 192.168.60.2
PING 192.168.60.2 (192.168.60.2) 56(84) bytes of data.
13:30:29.782003 08:22:33:44:55:77 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 600, p 0, ethertype ARP (0x0806),
 Request who-has 192.168.60.2 tell 192.168.60.1, length 28
13:30:30.788175 08:22:33:44:55:77 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 600, p 0, ethertype ARP (0x0806),
 Request who-has 192.168.60.2 tell 192.168.60.1, length 28
13:30:31.828181 08:22:33:44:55:77 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 600, p 0, ethertype ARP (0x0806),
 Request who-has 192.168.60.2 tell 192.168.60.1, length 28
From 192.168.60.1 icmp_seq=1 Destination Host Unreachable
13:30:32.868205 08:22:33:44:55:77 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 600, p 0, ethertype ARP (0x0806),
 Request who-has 192.168.60.2 tell 192.168.60.1, length 28
13:30:33.908171 08:22:33:44:55:77 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 600, p 0, ethertype ARP (0x0806),
 Request who-has 192.168.60.2 tell 192.168.60.1, length 28

HTH, maybe daniel or anyone other can confirm this

regards Frank



From nbd at nbd.name  Fri Dec 30 06:58:29 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Fri, 30 Dec 2022 15:58:29 +0100
Subject: Aw: Re: [PATCH net v3 4/5] net: ethernet: mtk_eth_soc: drop
 generic vlan rx offload, only use DSA untagging
In-Reply-To: <trinity-ace28b50-2929-4af3-9dd2-765f848c4d99-1672408565903@3c-app-gmx-bap18>
References: <20221230073145.53386-1-nbd@nbd.name>
 <20221230073145.53386-4-nbd@nbd.name>
 <trinity-a07d48f4-11cf-4a24-a797-03ad4b1150d9-1672400818371@3c-app-gmx-bap18>
 <82821d48-9259-9508-cc80-fc07f4d3ba14@nbd.name>
 <trinity-ace28b50-2929-4af3-9dd2-765f848c4d99-1672408565903@3c-app-gmx-bap18>
Message-ID: <fc09b981-282e-26cd-661e-86fdc72bedf9@nbd.name>

On 30.12.22 14:56, Frank Wunderlich wrote:
> Hi
> 
> thanks for fast response
> 
>> Gesendet: Freitag, 30. Dezember 2022 um 13:56 Uhr
>> Von: "Felix Fietkau" <nbd at nbd.name>
>> An: "Frank Wunderlich" <frank-w at public-files.de>
>> Cc: netdev at vger.kernel.org, "John Crispin" <john at phrozen.org>, "Sean Wang" <sean.wang at mediatek.com>, "Mark Lee" <Mark-MC.Lee at mediatek.com>, "Lorenzo Bianconi" <lorenzo at kernel.org>, "David S. Miller" <davem at davemloft.net>, "Eric Dumazet" <edumazet at google.com>, "Jakub Kicinski" <kuba at kernel.org>, "Paolo Abeni" <pabeni at redhat.com>, "Matthias Brugger" <matthias.bgg at gmail.com>, "Russell King" <linux at armlinux.org.uk>, linux-arm-kernel at lists.infradead.org, linux-mediatek at lists.infradead.org, linux-kernel at vger.kernel.org
>> Betreff: Re: Aw: [PATCH net v3 4/5] net: ethernet: mtk_eth_soc: drop generic vlan rx offload, only use DSA untagging
>>
>> On 30.12.22 12:46, Frank Wunderlich wrote:
>> > Hi,
>> >
>> > v2 or v3 seems to break vlan on mt7986 over eth0 (mt7531 switch). v1 was working on next from end of November. But my rebased tree with v1 on 6.2-rc1 has same issue, so something after next 2711 was added which break vlan over mt7531.
>> >
>> > Directly over eth1 it works (was not working before).
>> >
>> > if i made no mistake there is still something wrong.
>> >
>> > btw. mt7622/r64 can also use second gmac (over vlan aware bridge with aux-port of switch to wan-port) it is only not default in mainline. But maybe this should not be used as decision for dropping "dsa-tag" (wrongly vlan-tag).
>> >
>> > regards Frank
>> Thanks for reporting.
>> Please try this patch on top of the series:
>> ---
>> --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
>> +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
>> @@ -3218,10 +3218,8 @@ static int mtk_open(struct net_device *dev)
>>   	phylink_start(mac->phylink);
>>   	netif_tx_start_all_queues(dev);
>>
>> -	if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
>> -		return 0;
>> -
>> -	if (mtk_uses_dsa(dev) && !eth->prog) {
>> +	if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) &&
>> +	    mtk_uses_dsa(dev) && !eth->prog) {
>>   		for (i = 0; i < ARRAY_SIZE(eth->dsa_meta); i++) {
>>   			struct metadata_dst *md_dst = eth->dsa_meta[i];
>>
>> @@ -3244,10 +3242,6 @@ static int mtk_open(struct net_device *dev)
>>   		val &= ~MTK_CDMP_STAG_EN;
>>   		mtk_w32(eth, val, MTK_CDMP_IG_CTRL);
>>
>> -		val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
>> -		val &= ~MTK_CDMQ_STAG_EN;
>> -		mtk_w32(eth, val, MTK_CDMQ_IG_CTRL);
>> -
>>   		mtk_w32(eth, 0, MTK_CDMP_EG_CTRL);
>>   	}
>>
>>
>>
> 
> seems not helping...this is how i test it:
> 
> ip link set eth1 up
> ip link add link eth1 name vlan500 type vlan id 500
> ip link add link wan name vlan600 type vlan id 600
> ip addr add 192.168.50.1/24 dev vlan500
> ip addr add 192.168.60.1/24 dev vlan600
> ip link set vlan500 up
> ip link set wan up
> ip link set vlan600 up
> 
> #do this on the other side:
> #netif=enp3s0
> #sudo ip link add link $netif name vlan500 type vlan id 500
> #sudo ip link add link $netif name vlan600 type vlan id 600
> #sudo ip link set vlan500 up
> #sudo ip link set vlan600 up
> #sudo ip addr add 192.168.50.2/24 dev vlan500
> #sudo ip addr add 192.168.60.2/24 dev vlan600
> 
> verified all used ports on my switch are in trunk-mode with vlan-membership of these 2 vlan.
> 
> 
> 
> booted 6.1 and there is vlan on dsa-port broken too, so either my test-setup is broken or code...but wonder why 6.1 is broken too...
> 
> with tcp-dump on my laptop i see that some packets came in for both vlan, but they seem not valid, arp only for vlan 500 (eth1 on r3).
> 
> $ sudo tcpdump -i enp3s0 -nn -e  vlan
> tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
> listening on enp3s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
> 14:49:09.548909 e4:b9:7a:f7:c4:8b > 33:33:00:00:83:84, ethertype 802.1Q (0x8100), length 524: vlan 500, p 0, ethertype IPv6 (0x86dd), fe80::e6b9:7aff:fef7:c48b.34177 > ff12::8384.21027: UDP, length 458
> 14:49:09.548929 e4:b9:7a:f7:c4:8b > 33:33:00:00:83:84, ethertype 802.1Q (0x8100), length 524: vlan 600, p 0, ethertype IPv6 (0x86dd), fe80::e6b9:7aff:fef7:c48b.34177 > ff12::8384.21027: UDP, length 458
> 14:49:09.549470 e4:b9:7a:f7:c4:8b > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 504: vlan 500, p 0, ethertype IPv4 (0x0800), 192.168.50.2.33050 > 192.168.50.255.21027: UDP, length 458
> 14:49:09.549522 e4:b9:7a:f7:c4:8b > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 504: vlan 600, p 0, ethertype IPv4 (0x0800), 192.168.60.2.33050 > 192.168.60.255.21027: UDP, length 458
> 14:49:26.324503 92:65:f3:ec:b0:19 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 60: vlan 500, p 0, ethertype ARP (0x0806), Request who-has 192.168.50.2 tell 192.168.50.1, length 42
> 14:49:26.324525 e4:b9:7a:f7:c4:8b > 92:65:f3:ec:b0:19, ethertype 802.1Q (0x8100), length 46: vlan 500, p 0, ethertype ARP (0x0806), Reply 192.168.50.2 is-at e4:b9:7a:f7:c4:8b, length 28
> 14:49:26.325091 92:65:f3:ec:b0:19 > e4:b9:7a:f7:c4:8b, ethertype 802.1Q (0x8100), length 102: vlan 500, p 0, ethertype IPv4 (0x0800), 192.168.50.1 > 192.168.50.2: ICMP echo request, id 44246, seq 1, length 64
> 14:49:26.325158 e4:b9:7a:f7:c4:8b > 92:65:f3:ec:b0:19, ethertype 802.1Q (0x8100), length 102: vlan 500, p 0, ethertype IPv4 (0x0800), 192.168.50.2 > 192.168.50.1: ICMP echo reply, id 44246, seq 1, length 64
> 
> on r3 i see these packets going out (so far it looks good):
> 
> root at bpi-r3:~# ping 192.168.60.2
> PING 192.168.60.2 (192.168.60.2) 56(84) bytes of data.
> 13:30:29.782003 08:22:33:44:55:77 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 600, p 0, ethertype ARP (0x0806),
>   Request who-has 192.168.60.2 tell 192.168.60.1, length 28
> 13:30:30.788175 08:22:33:44:55:77 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 600, p 0, ethertype ARP (0x0806),
>   Request who-has 192.168.60.2 tell 192.168.60.1, length 28
> 13:30:31.828181 08:22:33:44:55:77 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 600, p 0, ethertype ARP (0x0806),
>   Request who-has 192.168.60.2 tell 192.168.60.1, length 28
>  From 192.168.60.1 icmp_seq=1 Destination Host Unreachable
> 13:30:32.868205 08:22:33:44:55:77 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 600, p 0, ethertype ARP (0x0806),
>   Request who-has 192.168.60.2 tell 192.168.60.1, length 28
> 13:30:33.908171 08:22:33:44:55:77 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 600, p 0, ethertype ARP (0x0806),
>   Request who-has 192.168.60.2 tell 192.168.60.1, length 28
> 
> HTH, maybe daniel or anyone other can confirm this
Does this help?
---
--- a/net/dsa/tag_mtk.c
+++ b/net/dsa/tag_mtk.c
@@ -25,6 +25,14 @@ static struct sk_buff *mtk_tag_xmit(stru
  	u8 xmit_tpid;
  	u8 *mtk_tag;
  
+	/* The Ethernet switch we are interfaced with needs packets to be at
+	 * least 64 bytes (including FCS) otherwise their padding might be
+	 * corrupted. With tags enabled, we need to make sure that packets are
+	 * at least 68 bytes (including FCS and tag).
+	 */
+	if (__skb_put_padto(skb, ETH_ZLEN + MTK_HDR_LEN, false))
+		return NULL;
+
  	/* Build the special tag after the MAC Source Address. If VLAN header
  	 * is present, it's required that VLAN header and special tag is
  	 * being combined. Only in this way we can allow the switch can parse




From frank-w at public-files.de  Fri Dec 30 07:33:04 2022
From: frank-w at public-files.de (Frank Wunderlich)
Date: Fri, 30 Dec 2022 16:33:04 +0100
Subject: Aw: Re:  Re: [PATCH net v3 4/5] net: ethernet: mtk_eth_soc: drop
 generic vlan rx offload, only use DSA untagging
In-Reply-To: <fc09b981-282e-26cd-661e-86fdc72bedf9@nbd.name>
References: <20221230073145.53386-1-nbd@nbd.name>
 <20221230073145.53386-4-nbd@nbd.name>
 <trinity-a07d48f4-11cf-4a24-a797-03ad4b1150d9-1672400818371@3c-app-gmx-bap18>
 <82821d48-9259-9508-cc80-fc07f4d3ba14@nbd.name>
 <trinity-ace28b50-2929-4af3-9dd2-765f848c4d99-1672408565903@3c-app-gmx-bap18>
 <fc09b981-282e-26cd-661e-86fdc72bedf9@nbd.name>
Message-ID: <trinity-b52833dd-883d-4f5e-b221-29bb4d942873-1672414384681@3c-app-gmx-bap18>

Hi

> Gesendet: Freitag, 30. Dezember 2022 um 15:58 Uhr
> Von: "Felix Fietkau" <nbd at nbd.name>

> Does this help?
> ---
> --- a/net/dsa/tag_mtk.c
> +++ b/net/dsa/tag_mtk.c
> @@ -25,6 +25,14 @@ static struct sk_buff *mtk_tag_xmit(stru
>   	u8 xmit_tpid;
>   	u8 *mtk_tag;
>
> +	/* The Ethernet switch we are interfaced with needs packets to be at
> +	 * least 64 bytes (including FCS) otherwise their padding might be
> +	 * corrupted. With tags enabled, we need to make sure that packets are
> +	 * at least 68 bytes (including FCS and tag).
> +	 */
> +	if (__skb_put_padto(skb, ETH_ZLEN + MTK_HDR_LEN, false))
> +		return NULL;
> +
>   	/* Build the special tag after the MAC Source Address. If VLAN header
>   	 * is present, it's required that VLAN header and special tag is
>   	 * being combined. Only in this way we can allow the switch can parse

no, i verified my vlan-setup ist right by adding additional device (my r2) into the same 2 vlans. My Laptop can ping both vlans of R2, but on r3/mt7986 only vlan500 (on eth1) works, not 600 on wan-port of mt7986.

see arp going out on r3, but not received in the other side (laptop/r2)....

any debug i can add for this? ethtool does not show stats for vlans, for wan i see no CRC/drops

regards Frank


From frank-w at public-files.de  Fri Dec 30 07:38:31 2022
From: frank-w at public-files.de (Frank Wunderlich)
Date: Fri, 30 Dec 2022 16:38:31 +0100
Subject: Aw: Re:  Re: [PATCH net v3 4/5] net: ethernet: mtk_eth_soc: drop
 generic vlan rx offload, only use DSA untagging
In-Reply-To: <fc09b981-282e-26cd-661e-86fdc72bedf9@nbd.name>
References: <20221230073145.53386-1-nbd@nbd.name>
 <20221230073145.53386-4-nbd@nbd.name>
 <trinity-a07d48f4-11cf-4a24-a797-03ad4b1150d9-1672400818371@3c-app-gmx-bap18>
 <82821d48-9259-9508-cc80-fc07f4d3ba14@nbd.name>
 <trinity-ace28b50-2929-4af3-9dd2-765f848c4d99-1672408565903@3c-app-gmx-bap18>
 <fc09b981-282e-26cd-661e-86fdc72bedf9@nbd.name>
Message-ID: <trinity-01eda9f9-b989-4554-ba35-a7f7a18da786-1672414711074@3c-app-gmx-bap18>

seems only tx is affected on r3, as i see packets on the vlan from my laptop

tcpdump on R3 (e4:b9:7a:f7:c4:8b is mac from laptop):

13:47:05.265508 e4:b9:7a:f7:c4:8b > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 577: vlan 500, p 0, ethertype IPv4 (0x0800), 192.168.50.2.59389 > 192.168.50.255.21027: UDP, length 531
13:47:05.265548 e4:b9:7a:f7:c4:8b > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 577: vlan 600, p 0, ethertype IPv4 (0x0800), 192.168.60.2.59389 > 192.168.60.255.21027: UDP, length 531

regards Frank


From nbd at nbd.name  Fri Dec 30 08:13:01 2022
From: nbd at nbd.name (Felix Fietkau)
Date: Fri, 30 Dec 2022 17:13:01 +0100
Subject: Aw: Re: Re: [PATCH net v3 4/5] net: ethernet: mtk_eth_soc: drop
 generic vlan rx offload, only use DSA untagging
In-Reply-To: <trinity-01eda9f9-b989-4554-ba35-a7f7a18da786-1672414711074@3c-app-gmx-bap18>
References: <20221230073145.53386-1-nbd@nbd.name>
 <20221230073145.53386-4-nbd@nbd.name>
 <trinity-a07d48f4-11cf-4a24-a797-03ad4b1150d9-1672400818371@3c-app-gmx-bap18>
 <82821d48-9259-9508-cc80-fc07f4d3ba14@nbd.name>
 <trinity-ace28b50-2929-4af3-9dd2-765f848c4d99-1672408565903@3c-app-gmx-bap18>
 <fc09b981-282e-26cd-661e-86fdc72bedf9@nbd.name>
 <trinity-01eda9f9-b989-4554-ba35-a7f7a18da786-1672414711074@3c-app-gmx-bap18>
Message-ID: <904dfc35-ecae-97dc-e9d9-a7df83ff89d4@nbd.name>

On 30.12.22 16:38, Frank Wunderlich wrote:
> seems only tx is affected on r3, as i see packets on the vlan from my laptop
> 
> tcpdump on R3 (e4:b9:7a:f7:c4:8b is mac from laptop):
> 
> 13:47:05.265508 e4:b9:7a:f7:c4:8b > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 577: vlan 500, p 0, ethertype IPv4 (0x0800), 192.168.50.2.59389 > 192.168.50.255.21027: UDP, length 531
> 13:47:05.265548 e4:b9:7a:f7:c4:8b > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 577: vlan 600, p 0, ethertype IPv4 (0x0800), 192.168.60.2.59389 > 192.168.60.255.21027: UDP, length 531
> 
> regards Frank
I don't have a setup to test 6.2 on my MT7986 board right now, but I did 
test latest OpenWrt with my changes and couldn't reproduce the issue there.
I checked the diff between my tree and upstream and didn't find any 
relevant differences in mtk_eth_soc.c
Not sure what's going on or how to narrow it down further.

- Felix


From bero at baylibre.com  Fri Dec 30 12:35:34 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Fri, 30 Dec 2022 21:35:34 +0100
Subject: [PATCH v6 0/7] Add minimal MT8365 and MT8365-EVK support
Message-ID: <20221230203541.146807-1-bero@baylibre.com>

This adds minimal support for the MediaTek 8365 SOC and the EVK reference
board, allowing the board to boot to initramfs with serial port I/O.

v6:
  - Add systimer in mt8365.dtsi
  - Add I/D caches and L2 cache details in mt8365.dtsi
  - Move bl31_secmon_reserved from mt8365.dtsi to mt8365-evk.dts
  - Fix inconsistent indentation in mt8365-pinctrl example
  - Further mt8365.dtsi cleanups
  - Submit to additional maintainers spotted by get_maintainer.pl

v5:
  - Reorder top-level entries in mediatek,mt8365-pinctrl.yaml to match
    example-schema
  - Use consistent quotes

v4:
  - Remove pins-are-numbered references that have been holding things up
    now that the patches removing it from dt-bindings have landed in linux-next

v3:
  - Remove a number of components that are not yet supported (they will
    come back alongside the corresponding drivers)
  - Address issues found by dt_binding_check (mostly fixing pinctrl
    bindings)
  - Address issues pointed out in comments
  - Reorder patches

v2:
  - Add missing dt-bindings documentation
  - Small cleanups addressing issues in v1 pointed out by Krzysztof Kozlowski


Bernhard Rosenkr?nzer (4):
  dt-bindings: arm64: dts: mediatek: Add mt8365-evk board
  dt-bindings: irq: mtk, sysirq: add support for mt8365
  dt-bindings: mfd: syscon: Add mt8365-syscfg
  dt-bindings: pinctrl: add bindings for Mediatek MT8365 SoC

Fabien Parent (3):
  dt-bindings: usb: mediatek,mtu3: add MT8365 SoC bindings
  dt-bindings: usb: mediatek,mtk-xhci: add MT8365 SoC bindings
  arm64: dts: mediatek: Initial mt8365-evk support

 .../devicetree/bindings/arm/mediatek.yaml     |   4 +
 .../interrupt-controller/mediatek,sysirq.txt  |   1 +
 .../devicetree/bindings/mfd/syscon.yaml       |   1 +
 .../pinctrl/mediatek,mt8365-pinctrl.yaml      | 197 +++++++++
 .../bindings/usb/mediatek,mtk-xhci.yaml       |   1 +
 .../bindings/usb/mediatek,mtu3.yaml           |   1 +
 arch/arm64/boot/dts/mediatek/Makefile         |   1 +
 arch/arm64/boot/dts/mediatek/mt8365-evk.dts   | 169 ++++++++
 arch/arm64/boot/dts/mediatek/mt8365.dtsi      | 374 ++++++++++++++++++
 9 files changed, 749 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
 create mode 100644 arch/arm64/boot/dts/mediatek/mt8365-evk.dts
 create mode 100644 arch/arm64/boot/dts/mediatek/mt8365.dtsi

-- 
2.39.0



From bero at baylibre.com  Fri Dec 30 12:35:36 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Fri, 30 Dec 2022 21:35:36 +0100
Subject: [PATCH v6 2/7] dt-bindings: irq: mtk, sysirq: add support for mt8365
In-Reply-To: <20221230203541.146807-1-bero@baylibre.com>
References: <20221230203541.146807-1-bero@baylibre.com>
Message-ID: <20221230203541.146807-3-bero@baylibre.com>

Add binding documentation of mediatek,sysirq for mt8365 SoC.

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>
---
 .../devicetree/bindings/interrupt-controller/mediatek,sysirq.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt b/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt
index 84ced3f4179b9..3ffc60184e445 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt
+++ b/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt
@@ -25,6 +25,7 @@ Required properties:
 	"mediatek,mt6577-sysirq": for MT6577
 	"mediatek,mt2712-sysirq", "mediatek,mt6577-sysirq": for MT2712
 	"mediatek,mt2701-sysirq", "mediatek,mt6577-sysirq": for MT2701
+	"mediatek,mt8365-sysirq", "mediatek,mt6577-sysirq": for MT8365
 - interrupt-controller : Identifies the node as an interrupt controller
 - #interrupt-cells : Use the same format as specified by GIC in arm,gic.txt.
 - reg: Physical base address of the intpol registers and length of memory
-- 
2.39.0



From bero at baylibre.com  Fri Dec 30 12:35:35 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Fri, 30 Dec 2022 21:35:35 +0100
Subject: [PATCH v6 1/7] dt-bindings: arm64: dts: mediatek: Add mt8365-evk board
In-Reply-To: <20221230203541.146807-1-bero@baylibre.com>
References: <20221230203541.146807-1-bero@baylibre.com>
Message-ID: <20221230203541.146807-2-bero@baylibre.com>

Add bindings for the Mediatek mt8365-evk board.

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
---
 Documentation/devicetree/bindings/arm/mediatek.yaml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/mediatek.yaml b/Documentation/devicetree/bindings/arm/mediatek.yaml
index 2275e5d93721b..ae12b1cab9fbd 100644
--- a/Documentation/devicetree/bindings/arm/mediatek.yaml
+++ b/Documentation/devicetree/bindings/arm/mediatek.yaml
@@ -244,6 +244,10 @@ properties:
           - enum:
               - mediatek,mt8183-pumpkin
           - const: mediatek,mt8183
+      - items:
+          - enum:
+              - mediatek,mt8365-evk
+          - const: mediatek,mt8365
       - items:
           - enum:
               - mediatek,mt8516-pumpkin
-- 
2.39.0



From bero at baylibre.com  Fri Dec 30 12:35:37 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Fri, 30 Dec 2022 21:35:37 +0100
Subject: [PATCH v6 3/7] dt-bindings: mfd: syscon: Add mt8365-syscfg
In-Reply-To: <20221230203541.146807-1-bero@baylibre.com>
References: <20221230203541.146807-1-bero@baylibre.com>
Message-ID: <20221230203541.146807-4-bero@baylibre.com>

Document Mediatek mt8365-syscfg

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>
---
 Documentation/devicetree/bindings/mfd/syscon.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/mfd/syscon.yaml b/Documentation/devicetree/bindings/mfd/syscon.yaml
index 1b01bd0104316..7beeb0abc4db0 100644
--- a/Documentation/devicetree/bindings/mfd/syscon.yaml
+++ b/Documentation/devicetree/bindings/mfd/syscon.yaml
@@ -50,6 +50,7 @@ properties:
               - marvell,armada-3700-usb2-host-misc
               - mediatek,mt8135-pctl-a-syscfg
               - mediatek,mt8135-pctl-b-syscfg
+              - mediatek,mt8365-syscfg
               - microchip,lan966x-cpu-syscon
               - microchip,sparx5-cpu-syscon
               - mstar,msc313-pmsleep
-- 
2.39.0



From bero at baylibre.com  Fri Dec 30 12:35:39 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Fri, 30 Dec 2022 21:35:39 +0100
Subject: [PATCH v6 5/7] dt-bindings: usb: mediatek,mtu3: add MT8365 SoC bindings
In-Reply-To: <20221230203541.146807-1-bero@baylibre.com>
References: <20221230203541.146807-1-bero@baylibre.com>
Message-ID: <20221230203541.146807-6-bero@baylibre.com>

From: Fabien Parent <fparent at baylibre.com>

Add binding documentation for the MT8365 SoC.

Signed-off-by: Fabien Parent <fparent at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>
---
 Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml b/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
index 7168110e2f9de..d2655173e108c 100644
--- a/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
+++ b/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
@@ -28,6 +28,7 @@ properties:
           - mediatek,mt8188-mtu3
           - mediatek,mt8192-mtu3
           - mediatek,mt8195-mtu3
+          - mediatek,mt8365-mtu3
       - const: mediatek,mtu3
 
   reg:
-- 
2.39.0



From bero at baylibre.com  Fri Dec 30 12:35:40 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Fri, 30 Dec 2022 21:35:40 +0100
Subject: [PATCH v6 6/7] dt-bindings: usb: mediatek,mtk-xhci: add MT8365 SoC bindings
In-Reply-To: <20221230203541.146807-1-bero@baylibre.com>
References: <20221230203541.146807-1-bero@baylibre.com>
Message-ID: <20221230203541.146807-7-bero@baylibre.com>

From: Fabien Parent <fparent at baylibre.com>

Add binding documentation for the MT8365 SoC.

Signed-off-by: Fabien Parent <fparent at baylibre.com>
[bero at baylibre.com: Cleanups suggested by reviewers]
Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>
---
 Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml b/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml
index a3c37944c6305..c119caa9ad168 100644
--- a/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml
+++ b/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml
@@ -35,6 +35,7 @@ properties:
           - mediatek,mt8188-xhci
           - mediatek,mt8192-xhci
           - mediatek,mt8195-xhci
+          - mediatek,mt8365-xhci
       - const: mediatek,mtk-xhci
 
   reg:
-- 
2.39.0



From bero at baylibre.com  Fri Dec 30 12:35:41 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Fri, 30 Dec 2022 21:35:41 +0100
Subject: [PATCH v6 7/7] arm64: dts: mediatek: Initial mt8365-evk support
In-Reply-To: <20221230203541.146807-1-bero@baylibre.com>
References: <20221230203541.146807-1-bero@baylibre.com>
Message-ID: <20221230203541.146807-8-bero@baylibre.com>

From: Fabien Parent <fparent at baylibre.com>

This adds minimal support for the Mediatek 8365 SOC and the EVK reference
board, allowing the board to boot to initramfs with serial port I/O.

Signed-off-by: Fabien Parent <fparent at baylibre.com>
[bero at baylibre.com: Removed parts depending on drivers that aren't upstream yet, cleanups, add CPU cache layout, add systimer]
Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
Tested-by: Kevin Hilman <khilman at baylibre.com>
---
 arch/arm64/boot/dts/mediatek/Makefile       |   1 +
 arch/arm64/boot/dts/mediatek/mt8365-evk.dts | 169 +++++++++
 arch/arm64/boot/dts/mediatek/mt8365.dtsi    | 374 ++++++++++++++++++++
 3 files changed, 544 insertions(+)
 create mode 100644 arch/arm64/boot/dts/mediatek/mt8365-evk.dts
 create mode 100644 arch/arm64/boot/dts/mediatek/mt8365.dtsi

diff --git a/arch/arm64/boot/dts/mediatek/Makefile b/arch/arm64/boot/dts/mediatek/Makefile
index 813e735c5b96d..d78523c5a7dd6 100644
--- a/arch/arm64/boot/dts/mediatek/Makefile
+++ b/arch/arm64/boot/dts/mediatek/Makefile
@@ -47,4 +47,5 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += mt8195-cherry-tomato-r2.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8195-cherry-tomato-r3.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8195-demo.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8195-evb.dtb
+dtb-$(CONFIG_ARCH_MEDIATEK) += mt8365-evk.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8516-pumpkin.dtb
diff --git a/arch/arm64/boot/dts/mediatek/mt8365-evk.dts b/arch/arm64/boot/dts/mediatek/mt8365-evk.dts
new file mode 100644
index 0000000000000..275ea3a0e7085
--- /dev/null
+++ b/arch/arm64/boot/dts/mediatek/mt8365-evk.dts
@@ -0,0 +1,169 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2021-2022 BayLibre, SAS.
+ * Authors:
+ * Fabien Parent <fparent at baylibre.com>
+ * Bernhard Rosenkr?nzer <bero at baylibre.com>
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/pinctrl/mt8365-pinfunc.h>
+#include "mt8365.dtsi"
+
+/ {
+	model = "MediaTek MT8365 Open Platform EVK";
+	compatible = "mediatek,mt8365-evk", "mediatek,mt8365";
+
+	aliases {
+		serial0 = &uart0;
+	};
+
+	chosen {
+		stdout-path = "serial0:921600n8";
+	};
+
+	firmware {
+		optee {
+			compatible = "linaro,optee-tz";
+			method = "smc";
+		};
+	};
+
+	gpio-keys {
+		compatible = "gpio-keys";
+		input-name = "gpio-keys";
+		pinctrl-names = "default";
+		pinctrl-0 = <&gpio_keys>;
+
+		key-volume-up {
+			gpios = <&pio 24 GPIO_ACTIVE_LOW>;
+			label = "volume_up";
+			linux,code = <KEY_VOLUMEUP>;
+			wakeup-source;
+			debounce-interval = <15>;
+		};
+	};
+
+	memory at 40000000 {
+		device_type = "memory";
+		reg = <0 0x40000000 0 0xc0000000>;
+	};
+
+	usb_otg_vbus: regulator-0 {
+		compatible = "regulator-fixed";
+		regulator-name = "otg_vbus";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		gpio = <&pio 16 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
+	reserved-memory {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+
+		/* 128 KiB reserved for ARM Trusted Firmware (BL31) */
+		bl31_secmon_reserved: secmon at 43000000 {
+			no-map;
+			reg = <0 0x43000000 0 0x20000>;
+		};
+
+		/* 12 MiB reserved for OP-TEE (BL32)
+		 * +-----------------------+ 0x43e0_0000
+		 * |      SHMEM 2MiB       |
+		 * +-----------------------+ 0x43c0_0000
+		 * |        | TA_RAM  8MiB |
+		 * + TZDRAM +--------------+ 0x4340_0000
+		 * |        | TEE_RAM 2MiB |
+		 * +-----------------------+ 0x4320_0000
+		 */
+		optee_reserved: optee at 43200000 {
+			no-map;
+			reg = <0 0x43200000 0 0x00c00000>;
+		};
+	};
+};
+
+&pio {
+	gpio_keys: gpio-keys-pins {
+		pins {
+			pinmux = <MT8365_PIN_24_KPCOL0__FUNC_KPCOL0>;
+			bias-pull-up;
+			input-enable;
+		};
+	};
+
+	uart0_pins: uart0-pins {
+		pins {
+			pinmux = <MT8365_PIN_35_URXD0__FUNC_URXD0>,
+				 <MT8365_PIN_36_UTXD0__FUNC_UTXD0>;
+		};
+	};
+
+	uart1_pins: uart1-pins {
+		pins {
+			pinmux = <MT8365_PIN_37_URXD1__FUNC_URXD1>,
+				 <MT8365_PIN_38_UTXD1__FUNC_UTXD1>;
+		};
+	};
+
+	uart2_pins: uart2-pins {
+		pins {
+			pinmux = <MT8365_PIN_39_URXD2__FUNC_URXD2>,
+				 <MT8365_PIN_40_UTXD2__FUNC_UTXD2>;
+		};
+	};
+
+	usb_pins: usb-pins {
+		pins-id {
+			pinmux = <MT8365_PIN_17_GPIO17__FUNC_GPIO17>;
+			input-enable;
+			bias-pull-up;
+		};
+
+		pins-usb0-vbus {
+			pinmux = <MT8365_PIN_16_GPIO16__FUNC_USB_DRVVBUS>;
+			output-high;
+		};
+
+		pin-usb1-vbus {
+			pinmux = <MT8365_PIN_18_GPIO18__FUNC_GPIO18>;
+			output-high;
+		};
+	};
+
+	pwm_pins: pwm-pins {
+		pins {
+			pinmux = <MT8365_PIN_19_DISP_PWM__FUNC_PWM_A>,
+				 <MT8365_PIN_116_I2S_BCK__FUNC_PWM_C>;
+		};
+	};
+};
+
+&pwm {
+	pinctrl-0 = <&pwm_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&uart0 {
+	pinctrl-0 = <&uart0_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&uart1 {
+	pinctrl-0 = <&uart1_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&uart2 {
+	pinctrl-0 = <&uart2_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
diff --git a/arch/arm64/boot/dts/mediatek/mt8365.dtsi b/arch/arm64/boot/dts/mediatek/mt8365.dtsi
new file mode 100644
index 0000000000000..60a211ba91dbd
--- /dev/null
+++ b/arch/arm64/boot/dts/mediatek/mt8365.dtsi
@@ -0,0 +1,374 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * (C) 2018 MediaTek Inc.
+ * Copyright (C) 2022 BayLibre SAS
+ * Fabien Parent <fparent at baylibre.com>
+ * Bernhard Rosenkr?nzer <bero at baylibre.com>
+ */
+#include <dt-bindings/clock/mediatek,mt8365-clk.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/phy/phy.h>
+#include <dt-bindings/thermal/thermal.h>
+
+/ {
+	compatible = "mediatek,mt8365";
+	interrupt-parent = <&sysirq>;
+	#address-cells = <2>;
+	#size-cells = <2>;
+
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cpu-map {
+			cluster0 {
+				core0 {
+					cpu = <&cpu0>;
+				};
+				core1 {
+					cpu = <&cpu1>;
+				};
+				core2 {
+					cpu = <&cpu2>;
+				};
+				core3 {
+					cpu = <&cpu3>;
+				};
+			};
+		};
+
+		cpu0: cpu at 0 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a53";
+			reg = <0x0>;
+			#cooling-cells = <2>;
+			enable-method = "psci";
+			i-cache-size = <0x8000>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <0x8000>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
+			next-level-cache = <&l2>;
+		};
+
+		cpu1: cpu at 1 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a53";
+			reg = <0x1>;
+			#cooling-cells = <2>;
+			enable-method = "psci";
+			i-cache-size = <0x8000>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <0x8000>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
+			next-level-cache = <&l2>;
+		};
+
+		cpu2: cpu at 2 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a53";
+			reg = <0x2>;
+			#cooling-cells = <2>;
+			enable-method = "psci";
+			i-cache-size = <0x8000>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <0x8000>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
+			next-level-cache = <&l2>;
+		};
+
+		cpu3: cpu at 3 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a53";
+			reg = <0x3>;
+			#cooling-cells = <2>;
+			enable-method = "psci";
+			i-cache-size = <0x8000>;
+			i-cache-line-size = <64>;
+			i-cache-sets = <256>;
+			d-cache-size = <0x8000>;
+			d-cache-line-size = <64>;
+			d-cache-sets = <256>;
+			next-level-cache = <&l2>;
+		};
+
+		l2: l2-cache {
+			compatible = "cache";
+			cache-level = <2>;
+			cache-size = <0x80000>;
+			cache-line-size = <64>;
+			cache-sets = <512>;
+			cache-unified;
+		};
+	};
+
+	clk26m: oscillator {
+		compatible = "fixed-clock";
+		#clock-cells = <0>;
+		clock-frequency = <26000000>;
+		clock-output-names = "clk26m";
+	};
+
+	psci {
+		compatible = "arm,psci-1.0";
+		method = "smc";
+	};
+
+	soc {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		compatible = "simple-bus";
+		ranges;
+
+		gic: interrupt-controller at c000000 {
+			compatible = "arm,gic-v3";
+			#interrupt-cells = <4>;
+			interrupt-parent = <&gic>;
+			interrupt-controller;
+			reg = <0 0x0c000000 0 0x80000>, <0 0x0c080000 0 0x80000>;
+
+			interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH 0>;
+		};
+
+		topckgen: syscon at 10000000 {
+			compatible = "mediatek,mt8365-topckgen", "syscon";
+			reg = <0 0x10000000 0 0x1000>;
+			#clock-cells = <1>;
+		};
+
+		infracfg: syscon at 10001000 {
+			compatible = "mediatek,mt8365-infracfg", "syscon";
+			reg = <0 0x10001000 0 0x1000>;
+			#clock-cells = <1>;
+		};
+
+		pericfg: syscon at 10003000 {
+			compatible = "mediatek,mt8365-pericfg", "syscon";
+			reg = <0 0x10003000 0 0x1000>;
+			#clock-cells = <1>;
+		};
+
+		syscfg_pctl: syscfg-pctl at 10005000 {
+			compatible = "mediatek,mt8365-syscfg", "syscon";
+			reg = <0 0x10005000 0 0x1000>;
+		};
+
+		pio: pinctrl at 1000b000 {
+			compatible = "mediatek,mt8365-pinctrl";
+			reg = <0 0x1000b000 0 0x1000>;
+			mediatek,pctl-regmap = <&syscfg_pctl>;
+			gpio-controller;
+			#gpio-cells = <2>;
+			interrupt-controller;
+			#interrupt-cells = <2>;
+			interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
+		};
+
+		apmixedsys: syscon at 1000c000 {
+			compatible = "mediatek,mt8365-apmixedsys", "syscon";
+			reg = <0 0x1000c000 0 0x1000>;
+			#clock-cells = <1>;
+		};
+
+		keypad: keypad at 10010000 {
+			compatible = "mediatek,mt6779-keypad";
+			reg = <0 0x10010000 0 0x1000>;
+			wakeup-source;
+			interrupts = <GIC_SPI 124 IRQ_TYPE_EDGE_FALLING>;
+			clocks = <&clk26m>;
+			clock-names = "kpd";
+			status = "disabled";
+		};
+
+		mcucfg: syscon at 10200000 {
+			compatible = "mediatek,mt8365-mcucfg", "syscon";
+			reg = <0 0x10200000 0 0x2000>;
+			#clock-cells = <1>;
+		};
+
+		sysirq: interrupt-controller at 10200a80 {
+			compatible = "mediatek,mt8365-sysirq", "mediatek,mt6577-sysirq";
+			interrupt-controller;
+			#interrupt-cells = <3>;
+			interrupt-parent = <&gic>;
+			reg = <0 0x10200a80 0 0x20>;
+		};
+
+		infracfg_nao: infracfg at 1020e000 {
+			compatible = "mediatek,mt8365-infracfg", "syscon";
+			reg = <0 0x1020e000 0 0x1000>;
+		};
+
+		rng: rng at 1020f000 {
+			compatible = "mediatek,mt8365-rng", "mediatek,mt7623-rng";
+			reg = <0 0x1020f000 0 0x100>;
+			clocks = <&infracfg CLK_IFR_TRNG>;
+			clock-names = "rng";
+		};
+
+		apdma: dma-controller at 11000280 {
+			compatible = "mediatek,mt8365-uart-dma", "mediatek,mt6577-uart-dma";
+			reg = <0 0x11000280 0 0x80>,
+			      <0 0x11000300 0 0x80>,
+			      <0 0x11000380 0 0x80>,
+			      <0 0x11000400 0 0x80>,
+			      <0 0x11000580 0 0x80>,
+			      <0 0x11000600 0 0x80>;
+			interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 46 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 47 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 48 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 51 IRQ_TYPE_LEVEL_LOW>,
+				     <GIC_SPI 52 IRQ_TYPE_LEVEL_LOW>;
+			dma-requests = <6>;
+			clocks = <&infracfg CLK_IFR_AP_DMA>;
+			clock-names = "apdma";
+			#dma-cells = <1>;
+		};
+
+		uart0: serial at 11002000 {
+			compatible = "mediatek,mt8365-uart", "mediatek,mt6577-uart";
+			reg = <0 0x11002000 0 0x1000>;
+			interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&clk26m>, <&infracfg CLK_IFR_UART0>;
+			clock-names = "baud", "bus";
+			dmas = <&apdma 0>, <&apdma 1>;
+			dma-names = "tx", "rx";
+			status = "disabled";
+		};
+
+		uart1: serial at 11003000 {
+			compatible = "mediatek,mt8365-uart", "mediatek,mt6577-uart";
+			reg = <0 0x11003000 0 0x1000>;
+			interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&clk26m>, <&infracfg CLK_IFR_UART1>;
+			clock-names = "baud", "bus";
+			dmas = <&apdma 2>, <&apdma 3>;
+			dma-names = "tx", "rx";
+			status = "disabled";
+		};
+
+		uart2: serial at 11004000 {
+			compatible = "mediatek,mt8365-uart", "mediatek,mt6577-uart";
+			reg = <0 0x11004000 0 0x1000>;
+			interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&clk26m>, <&infracfg CLK_IFR_UART2>;
+			clock-names = "baud", "bus";
+			dmas = <&apdma 4>, <&apdma 5>;
+			dma-names = "tx", "rx";
+			status = "disabled";
+		};
+
+		pwm: pwm at 11006000 {
+			compatible = "mediatek,mt8365-pwm";
+			reg = <0 0x11006000 0 0x1000>;
+			#pwm-cells = <2>;
+			interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&infracfg CLK_IFR_PWM_HCLK>,
+				 <&infracfg CLK_IFR_PWM>,
+				 <&infracfg CLK_IFR_PWM1>,
+				 <&infracfg CLK_IFR_PWM2>,
+				 <&infracfg CLK_IFR_PWM3>;
+			clock-names = "top", "main", "pwm1", "pwm2", "pwm3";
+		};
+
+		spi: spi at 1100a000 {
+			compatible = "mediatek,mt8365-spi", "mediatek,mt7622-spi";
+			reg = <0 0x1100a000 0 0x100>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+			interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_LOW>;
+			clocks = <&topckgen CLK_TOP_UNIVPLL2_D4>,
+				 <&topckgen CLK_TOP_SPI_SEL>,
+				 <&infracfg CLK_IFR_SPI0>;
+			clock-names = "parent-clk", "sel-clk", "spi-clk";
+			status = "disabled";
+		};
+
+		ssusb: usb at 11201000 {
+			compatible = "mediatek,mt8365-mtu3", "mediatek,mtu3";
+			reg = <0 0x11201000 0 0x2e00>, <0 0x11203e00 0 0x0100>;
+			reg-names = "mac", "ippc";
+			interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_LOW>;
+			phys = <&u2port0 PHY_TYPE_USB2>,
+			       <&u2port1 PHY_TYPE_USB2>;
+			clocks = <&topckgen CLK_TOP_SSUSB_TOP_CK_EN>,
+				 <&infracfg CLK_IFR_SSUSB_REF>,
+				 <&infracfg CLK_IFR_SSUSB_SYS>,
+				 <&infracfg CLK_IFR_ICUSB>;
+			clock-names = "sys_ck", "ref_ck", "mcu_ck", "dma_ck";
+			#address-cells = <2>;
+			#size-cells = <2>;
+			ranges;
+			status = "disabled";
+
+			usb_host: usb at 11200000 {
+				compatible = "mediatek,mt8365-xhci", "mediatek,mtk-xhci";
+				reg = <0 0x11200000 0 0x1000>;
+				reg-names = "mac";
+				interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_LOW>;
+				clocks = <&topckgen CLK_TOP_SSUSB_TOP_CK_EN>,
+					 <&infracfg CLK_IFR_SSUSB_REF>,
+					 <&infracfg CLK_IFR_SSUSB_SYS>,
+					 <&infracfg CLK_IFR_ICUSB>,
+					 <&infracfg CLK_IFR_SSUSB_XHCI>;
+				clock-names = "sys_ck", "ref_ck", "mcu_ck",
+					      "dma_ck", "xhci_ck";
+				status = "disabled";
+			};
+		};
+
+		u3phy: phy at 11cc0000 {
+			compatible = "mediatek,mt8365-tphy", "mediatek,generic-tphy-v2";
+			#address-cells = <2>;
+			#size-cells = <2>;
+			#phy-cells = <1>;
+			ranges;
+
+			u2port0: usb-phy at 11cc0000 {
+				reg = <0 0x11cc0000 0 0x400>;
+				clocks = <&topckgen CLK_TOP_SSUSB_PHY_CK_EN>,
+					 <&topckgen CLK_TOP_USB20_48M_EN>;
+				clock-names = "ref", "da_ref";
+				#phy-cells = <1>;
+			};
+
+			u2port1: usb-phy at 11cc1000 {
+				reg = <0 0x11cc1000 0 0x400>;
+				clocks = <&topckgen CLK_TOP_SSUSB_PHY_CK_EN>,
+					 <&topckgen CLK_TOP_USB20_48M_EN>;
+				clock-names = "ref", "da_ref";
+				#phy-cells = <1>;
+			};
+		};
+	};
+
+	timer {
+		compatible = "arm,armv8-timer";
+		interrupt-parent = <&gic>;
+		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW 0>,
+			     <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW 0>,
+			     <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW 0>,
+			     <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW 0>;
+	};
+
+	system_clk: dummy13m {
+		compatible = "fixed-clock";
+		clock-frequency = <13000000>;
+		#clock-cells = <0>;
+	};
+
+	systimer: timer at 10017000 {
+		compatible = "mediatek,mt6795-systimer";
+		reg = <0 0x10017000 0 0x10>;
+		interrupts = <GIC_SPI 138 IRQ_TYPE_LEVEL_LOW>;
+		clocks = <&system_clk>;
+		clock-names = "clk13m";
+	};
+};
-- 
2.39.0



From bero at baylibre.com  Fri Dec 30 12:35:38 2022
From: bero at baylibre.com (=?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?=)
Date: Fri, 30 Dec 2022 21:35:38 +0100
Subject: [PATCH v6 4/7] dt-bindings: pinctrl: add bindings for Mediatek MT8365 SoC
In-Reply-To: <20221230203541.146807-1-bero@baylibre.com>
References: <20221230203541.146807-1-bero@baylibre.com>
Message-ID: <20221230203541.146807-5-bero@baylibre.com>

Add devicetree bindings for Mediatek MT8365 pinctrl driver.

Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
---
 .../pinctrl/mediatek,mt8365-pinctrl.yaml      | 197 ++++++++++++++++++
 1 file changed, 197 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml

diff --git a/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
new file mode 100644
index 0000000000000..4b96884a1afc7
--- /dev/null
+++ b/Documentation/devicetree/bindings/pinctrl/mediatek,mt8365-pinctrl.yaml
@@ -0,0 +1,197 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/pinctrl/mediatek,mt8365-pinctrl.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Mediatek MT8365 Pin Controller
+
+maintainers:
+  - Zhiyong Tao <zhiyong.tao at mediatek.com>
+  - Bernhard Rosenkr?nzer <bero at baylibre.com>
+
+description: |
+  The MediaTek's MT8365 Pin controller is used to control SoC pins.
+
+properties:
+  compatible:
+    const: mediatek,mt8365-pinctrl
+
+  reg:
+    maxItems: 1
+
+  mediatek,pctl-regmap:
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      maxItems: 1
+    minItems: 1
+    maxItems: 2
+    description: |
+      Should be phandles of the syscfg node.
+
+  gpio-controller: true
+
+  "#gpio-cells":
+    const: 2
+    description: |
+      Number of cells in GPIO specifier. Since the generic GPIO
+      binding is used, the amount of cells must be specified as 2. See the below
+      mentioned gpio binding representation for description of particular cells.
+
+  interrupt-controller: true
+
+  interrupts:
+    maxItems: 1
+
+  "#interrupt-cells":
+    const: 2
+
+patternProperties:
+  "-pins$":
+    type: object
+    additionalProperties: false
+    patternProperties:
+      "pins$":
+        type: object
+        additionalProperties: false
+        description: |
+          A pinctrl node should contain at least one subnode representing the
+          pinctrl groups available on the machine. Each subnode will list the
+          pins it needs, and how they should be configured, with regard to muxer
+          configuration, pullups, drive strength, input enable/disable and input
+          schmitt.
+        $ref: /schemas/pinctrl/pincfg-node.yaml
+
+        properties:
+          pinmux:
+            description:
+              integer array, represents gpio pin number and mux setting.
+              Supported pin number and mux varies for different SoCs, and are
+              defined as macros in <soc>-pinfunc.h directly.
+
+          bias-disable: true
+
+          bias-pull-up:
+            description: |
+              Besides generic pinconfig options, it can be used as the pull up
+              settings for 2 pull resistors, R0 and R1. User can configure those
+              special pins.
+
+          bias-pull-down: true
+
+          input-enable: true
+
+          input-disable: true
+
+          output-low: true
+
+          output-high: true
+
+          input-schmitt-enable: true
+
+          input-schmitt-disable: true
+
+          mediatek,drive-strength-adv:
+            description: |
+              Describe the specific driving setup property.
+              For I2C pins, the existing generic driving setup can only support
+              2/4/6/8/10/12/14/16mA driving. But in specific driving setup, they
+              can support 0.125/0.25/0.5/1mA adjustment. If we enable specific
+              driving setup, the existing generic setup will be disabled.
+              The specific driving setup is controlled by E1E0EN.
+              When E1=0/E0=0, the strength is 0.125mA.
+              When E1=0/E0=1, the strength is 0.25mA.
+              When E1=1/E0=0, the strength is 0.5mA.
+              When E1=1/E0=1, the strength is 1mA.
+              EN is used to enable or disable the specific driving setup.
+              Valid arguments are described as below:
+              0: (E1, E0, EN) = (0, 0, 0)
+              1: (E1, E0, EN) = (0, 0, 1)
+              2: (E1, E0, EN) = (0, 1, 0)
+              3: (E1, E0, EN) = (0, 1, 1)
+              4: (E1, E0, EN) = (1, 0, 0)
+              5: (E1, E0, EN) = (1, 0, 1)
+              6: (E1, E0, EN) = (1, 1, 0)
+              7: (E1, E0, EN) = (1, 1, 1)
+              So the valid arguments are from 0 to 7.
+            $ref: /schemas/types.yaml#/definitions/uint32
+            enum: [0, 1, 2, 3, 4, 5, 6, 7]
+
+          mediatek,pull-up-adv:
+            description: |
+              Pull up setings for 2 pull resistors, R0 and R1. User can
+              configure those special pins. Valid arguments are described as below:
+              0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
+              1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
+              2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
+              3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
+            $ref: /schemas/types.yaml#/definitions/uint32
+            enum: [0, 1, 2, 3]
+
+          mediatek,pull-down-adv:
+            description: |
+              Pull down settings for 2 pull resistors, R0 and R1. User can
+              configure those special pins. Valid arguments are described as below:
+              0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
+              1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
+              2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
+              3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
+            $ref: /schemas/types.yaml#/definitions/uint32
+            enum: [0, 1, 2, 3]
+
+          mediatek,tdsel:
+            description: |
+              An integer describing the steps for output level shifter duty
+              cycle when asserted (high pulse width adjustment). Valid arguments
+              are from 0 to 15.
+            $ref: /schemas/types.yaml#/definitions/uint32
+
+          mediatek,rdsel:
+            description: |
+              An integer describing the steps for input level shifter duty cycle
+              when asserted (high pulse width adjustment). Valid arguments are
+              from 0 to 63.
+            $ref: /schemas/types.yaml#/definitions/uint32
+
+        required:
+          - pinmux
+
+required:
+  - compatible
+  - reg
+  - gpio-controller
+  - "#gpio-cells"
+
+allOf:
+  - $ref: pinctrl.yaml#
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/pinctrl/mt8365-pinfunc.h>
+    soc {
+      #address-cells = <2>;
+      #size-cells = <2>;
+
+      pio: pinctrl at 1000b000 {
+        compatible = "mediatek,mt8365-pinctrl";
+        reg = <0 0x1000b000 0 0x1000>;
+        mediatek,pctl-regmap = <&syscfg_pctl>;
+        gpio-controller;
+        #gpio-cells = <2>;
+        interrupt-controller;
+        #interrupt-cells = <2>;
+        interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
+
+        pio-pins {
+          pins {
+            pinmux = <MT8365_PIN_59_SDA1__FUNC_SDA1_0>, <MT8365_PIN_60_SCL1__FUNC_SCL1_0>;
+            mediatek,pull-up-adv = <3>;
+            mediatek,drive-strength-adv = <00>;
+            bias-pull-up;
+          };
+        };
+      };
+    };
-- 
2.39.0



From maz at kernel.org  Fri Dec 30 14:39:36 2022
From: maz at kernel.org (Marc Zyngier)
Date: Fri, 30 Dec 2022 22:39:36 +0000
Subject: [PATCH v6 7/7] arm64: dts: mediatek: Initial mt8365-evk support
In-Reply-To: <20221230203541.146807-8-bero@baylibre.com>
References: <20221230203541.146807-1-bero@baylibre.com>
	<20221230203541.146807-8-bero@baylibre.com>
Message-ID: <87v8lsect3.wl-maz@kernel.org>

On Fri, 30 Dec 2022 20:35:41 +0000,
Bernhard Rosenkr?nzer <bero at baylibre.com> wrote:
> 
> From: Fabien Parent <fparent at baylibre.com>
> 
> This adds minimal support for the Mediatek 8365 SOC and the EVK reference
> board, allowing the board to boot to initramfs with serial port I/O.
> 
> Signed-off-by: Fabien Parent <fparent at baylibre.com>
> [bero at baylibre.com: Removed parts depending on drivers that aren't upstream yet, cleanups, add CPU cache layout, add systimer]
> Signed-off-by: Bernhard Rosenkr?nzer <bero at baylibre.com>
> Tested-by: Kevin Hilman <khilman at baylibre.com>

[...]

> +	soc {
> +		#address-cells = <2>;
> +		#size-cells = <2>;
> +		compatible = "simple-bus";
> +		ranges;
> +
> +		gic: interrupt-controller at c000000 {
> +			compatible = "arm,gic-v3";
> +			#interrupt-cells = <4>;

Why 4 cells? All the SPIs routed via sysirq are perfectly happy with 3
cells, and all the PPIs have 0 for the 4th cell (none of them use any
form of partitioning that'd require 4 cells). So where is this coming
from?

> +			interrupt-parent = <&gic>;
> +			interrupt-controller;
> +			reg = <0 0x0c000000 0 0x80000>, <0 0x0c080000 0 0x80000>;
> +

The first region is obviously wrong (512kB for the distributor?
that's... most generous, but the architecture states that it is 64kB,
and that's wasteful enough).

This is also missing the GICC/GICH/GICV regions that Cortex-A53
implements, and that must be provided as per the binding.

> +			interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH 0>;
> +		};

Thanks,

	M.

-- 
Without deviation from the norm, progress is not possible.


From deren.wu at mediatek.com  Sat Dec 31 01:01:10 2022
From: deren.wu at mediatek.com (Deren Wu)
Date: Sat, 31 Dec 2022 17:01:10 +0800
Subject: [PATCH] wifi: mt76: mt7921: fix invalid remain_on_channel duration
Message-ID: <09a2d41d349593e1cf4a542d076c1a49bd135d3e.1672476252.git.deren.wu@mediatek.com>

round_jiffies_up() may change the duration reported from chip. We should
take the real timeout for current channel privilege.

Fixes: 034ae28b56f1 ("wifi: mt76: mt7921: introduce remain_on_channel support")
Signed-off-by: Deren Wu <deren.wu at mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7921/mcu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
index 8930b5a4467c..ba344b2e059d 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
@@ -174,7 +174,7 @@ mt7921_mcu_uni_roc_event(struct mt7921_dev *dev, struct sk_buff *skb)
 	wake_up(&dev->phy.roc_wait);
 	duration = le32_to_cpu(grant->max_interval);
 	mod_timer(&dev->phy.roc_timer,
-		  round_jiffies_up(jiffies + msecs_to_jiffies(duration)));
+		  jiffies + msecs_to_jiffies(duration));
 }
 
 static void
-- 
2.18.0



From arinc.unal at arinc9.com  Sat Dec 31 01:35:40 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 12:35:40 +0300
Subject: [PATCH v2 0/6] Enhance Ralink pinctrl documentation
Message-ID: <20221231093546.8881-1-arinc.unal@arinc9.com>

Ho ho ho,

This series mainly enhances the Ralink pinctrl documentation, and make a
small variable name change on the subdrivers.

I've compile-tested all the subdrivers.
I've tested the dt-binding changes with:
make dt_binding_check DT_SCHEMA_FILES=pinctrl/ralink

v2:
- Add maxItems:1 to "groups" description.
- Change oneOf cases to anyOf.
- Add Krzystof's acked-by to the first patch.

Ar?n? ?NAL (6):
  pinctrl: ralink: rename variables which point out the pin group
  dt-bindings: pinctrl: mt7620: add proper function muxing binding
  dt-bindings: pinctrl: mt7621: add proper function muxing binding
  dt-bindings: pinctrl: rt2880: add proper function muxing binding
  dt-bindings: pinctrl: rt305x: add proper function muxing binding
  dt-bindings: pinctrl: rt3883: add proper function muxing binding

 .../bindings/pinctrl/ralink,mt7620-pinctrl.yaml | 633 +++++++++++++++++--
 .../bindings/pinctrl/ralink,mt7621-pinctrl.yaml | 205 +++++-
 .../bindings/pinctrl/ralink,rt2880-pinctrl.yaml |  86 ++-
 .../bindings/pinctrl/ralink,rt305x-pinctrl.yaml | 236 ++++++-
 .../bindings/pinctrl/ralink,rt3883-pinctrl.yaml | 205 +++++-
 drivers/pinctrl/ralink/pinctrl-mt7620.c         | 164 ++---
 drivers/pinctrl/ralink/pinctrl-mt7621.c         |  48 +-
 drivers/pinctrl/ralink/pinctrl-rt2880.c         |  28 +-
 drivers/pinctrl/ralink/pinctrl-rt305x.c         |  82 +--
 drivers/pinctrl/ralink/pinctrl-rt3883.c         |  44 +-
 10 files changed, 1467 insertions(+), 264 deletions(-)




From arinc.unal at arinc9.com  Sat Dec 31 01:35:44 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 12:35:44 +0300
Subject: [PATCH v2 4/6] dt-bindings: pinctrl: rt2880: add proper function muxing binding
In-Reply-To: <20221231093546.8881-1-arinc.unal@arinc9.com>
References: <20221231093546.8881-1-arinc.unal@arinc9.com>
Message-ID: <20221231093546.8881-5-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 .../pinctrl/ralink,rt2880-pinctrl.yaml        | 85 +++++++++++++++++--
 1 file changed, 79 insertions(+), 6 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml
index 56e5becabcfd..f59ddd5e6c2b 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml
@@ -29,18 +29,92 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [i2c, spi, uartlite, jtag, mdio, sdram, pci]
-
           function:
-            description: The mux function to select.
+            description:
+              A string containing the name of the function to mux to the group.
             enum: [gpio, i2c, spi, uartlite, jtag, mdio, sdram, pci]
 
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
+
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  enum: [i2c, spi, uartlite, jtag, mdio, sdram, pci]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: uartlite
+            then:
+              properties:
+                groups:
+                  enum: [uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [jtag]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: sdram
+            then:
+              properties:
+                groups:
+                  enum: [sdram]
+
+          - if:
+              properties:
+                function:
+                  const: pci
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -54,7 +128,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,rt2880-pinctrl";
-- 
2.37.2



From arinc.unal at arinc9.com  Sat Dec 31 01:35:43 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 12:35:43 +0300
Subject: [PATCH v2 3/6] dt-bindings: pinctrl: mt7621: add proper function muxing binding
In-Reply-To: <20221231093546.8881-1-arinc.unal@arinc9.com>
References: <20221231093546.8881-1-arinc.unal@arinc9.com>
Message-ID: <20221231093546.8881-4-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 .../pinctrl/ralink,mt7621-pinctrl.yaml        | 204 +++++++++++++++++-
 1 file changed, 197 insertions(+), 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
index 61e5c847e8c8..0efb03f1d88e 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
@@ -29,21 +29,212 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [i2c, jtag, mdio, pcie, rgmii1, rgmii2, sdhci, spi, uart1,
-                   uart2, uart3, wdt]
-
           function:
-            description: The mux function to select.
+            description:
+              A string containing the name of the function to mux to the group.
             enum: [gpio, i2c, i2s, jtag, mdio, nand1, nand2, pcie refclk,
                    pcie rst, pcm, rgmii1, rgmii2, sdhci, spdif2, spdif3, spi,
                    uart1, uart2, uart3, wdt refclk, wdt rst]
 
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
+
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  enum: [i2c, jtag, mdio, pcie, rgmii1, rgmii2, sdhci, spi,
+                         uart1, uart2, uart3, wdt]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: i2s
+            then:
+              properties:
+                groups:
+                  enum: [uart3]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [jtag]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: nand1
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: nand2
+            then:
+              properties:
+                groups:
+                  enum: [sdhci]
+
+          - if:
+              properties:
+                function:
+                  const: pcie refclk
+            then:
+              properties:
+                groups:
+                  enum: [pcie]
+
+          - if:
+              properties:
+                function:
+                  const: pcie rst
+            then:
+              properties:
+                groups:
+                  enum: [pcie]
+
+          - if:
+              properties:
+                function:
+                  const: pcm
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii1
+            then:
+              properties:
+                groups:
+                  enum: [rgmii1]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii2
+            then:
+              properties:
+                groups:
+                  enum: [rgmii2]
+
+          - if:
+              properties:
+                function:
+                  const: sdhci
+            then:
+              properties:
+                groups:
+                  enum: [sdhci]
+
+          - if:
+              properties:
+                function:
+                  const: spdif2
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: spdif3
+            then:
+              properties:
+                groups:
+                  enum: [uart3]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: uart1
+            then:
+              properties:
+                groups:
+                  enum: [uart1]
+
+          - if:
+              properties:
+                function:
+                  const: uart2
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: uart3
+            then:
+              properties:
+                groups:
+                  enum: [uart3]
+
+          - if:
+              properties:
+                function:
+                  const: wdt refclk
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
+          - if:
+              properties:
+                function:
+                  const: wdt rst
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -57,7 +248,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,mt7621-pinctrl";
-- 
2.37.2



From arinc.unal at arinc9.com  Sat Dec 31 01:35:45 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 12:35:45 +0300
Subject: [PATCH v2 5/6] dt-bindings: pinctrl: rt305x: add proper function muxing binding
In-Reply-To: <20221231093546.8881-1-arinc.unal@arinc9.com>
References: <20221231093546.8881-1-arinc.unal@arinc9.com>
Message-ID: <20221231093546.8881-6-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 .../pinctrl/ralink,rt305x-pinctrl.yaml        | 235 ++++++++++++++++--
 1 file changed, 210 insertions(+), 25 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml
index f602a5d6e13a..30779a1a90b0 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml
@@ -30,38 +30,224 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [
-              # common
-              i2c, jtag, led, mdio, rgmii, spi, spi_cs1, uartf, uartlite,
-
-              # For RT3050, RT3052 and RT3350 SoCs
-              sdram,
-
-              # For RT3352 SoC
-              lna, pa
-            ]
-
           function:
-            description: The mux function to select.
-            enum: [
-              # common
-              gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag, led, mdio,
-              pcm gpio, pcm i2s, pcm uartf, rgmii, spi, spi_cs1, uartf,
-              uartlite, wdg_cs1,
+            description:
+              A string containing the name of the function to mux to the group.
+            anyOf:
+              - description: For RT3050, RT3052 and RT3350 SoCs
+                enum: [gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag, mdio,
+                       pcm gpio, pcm i2s, pcm uartf, rgmii, sdram, spi, uartf,
+                       uartlite]
 
-              # For RT3050, RT3052 and RT3350 SoCs
-              sdram,
+              - description: For RT3352 SoC
+                enum: [gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag, led,
+                       lna, mdio, pa, pcm gpio, pcm i2s, pcm uartf, rgmii, spi,
+                       spi_cs1, uartf, uartlite, wdg_cs1]
 
-              # For RT3352 SoC
-              lna, pa
-            ]
+              - description: For RT5350 SoC
+                enum: [gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag, led,
+                       pcm gpio, pcm i2s, pcm uartf, spi, spi_cs1, uartf,
+                       uartlite, wdg_cs1]
+
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
 
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  oneOf:
+                    - description: For RT3050, RT3052 and RT3350 SoCs
+                      enum: [i2c, jtag, mdio, rgmii, sdram, spi, uartf,
+                             uartlite]
+
+                    - description: For RT3352 SoC
+                      enum: [i2c, jtag, led, lna, mdio, pa, rgmii, spi, spi_cs1,
+                             uartf, uartlite]
+
+                    - description: For RT5350 SoC
+                      enum: [i2c, jtag, led, spi, spi_cs1, uartf, uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: gpio i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: gpio uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: i2s uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [jtag]
+
+          - if:
+              properties:
+                function:
+                  const: led
+            then:
+              properties:
+                groups:
+                  enum: [led]
+
+          - if:
+              properties:
+                function:
+                  const: lna
+            then:
+              properties:
+                groups:
+                  enum: [lna]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: pa
+            then:
+              properties:
+                groups:
+                  enum: [pa]
+
+          - if:
+              properties:
+                function:
+                  const: pcm gpio
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii
+            then:
+              properties:
+                groups:
+                  enum: [rgmii]
+
+          - if:
+              properties:
+                function:
+                  const: sdram
+            then:
+              properties:
+                groups:
+                  enum: [sdram]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: spi_cs1
+            then:
+              properties:
+                groups:
+                  enum: [spi_cs1]
+
+          - if:
+              properties:
+                function:
+                  const: uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: uartlite
+            then:
+              properties:
+                groups:
+                  enum: [uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: wdg_cs1
+            then:
+              properties:
+                groups:
+                  enum: [spi_cs1]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -75,7 +261,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,rt305x-pinctrl";
-- 
2.37.2



From arinc.unal at arinc9.com  Sat Dec 31 01:35:42 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 12:35:42 +0300
Subject: [PATCH v2 2/6] dt-bindings: pinctrl: mt7620: add proper function muxing binding
In-Reply-To: <20221231093546.8881-1-arinc.unal@arinc9.com>
References: <20221231093546.8881-1-arinc.unal@arinc9.com>
Message-ID: <20221231093546.8881-3-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../pinctrl/ralink,mt7620-pinctrl.yaml        | 632 +++++++++++++++++-
 1 file changed, 596 insertions(+), 36 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
index 6f17f3991640..06880c80ba80 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
@@ -29,47 +29,608 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [
-              # common
-              i2c, spi, wdt,
-
-              # For MT7620 SoC
-              ephy, mdio, nd_sd, pa, pcie, rgmii1, rgmii2, spi refclk,
-              uartf, uartlite, wled,
-
-              # For MT7628 and MT7688 SoCs
-              gpio, i2s, p0led_an, p0led_kn, p1led_an, p1led_kn, p2led_an,
-              p2led_kn, p3led_an, p3led_kn, p4led_an, p4led_kn, perst, pwm0,
-              pwm1, refclk, sdmode, spi cs1, spis, uart0, uart1, uart2,
-              wled_an, wled_kn,
-            ]
-
           function:
-            description: The mux function to select.
-            enum: [
-              # common
-              gpio, i2c, refclk, spi,
-
-              # For MT7620 SoC
-              ephy, gpio i2s, gpio uartf, i2s uartf, mdio, nand, pa,
-              pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf,
-              rgmii1, rgmii2, sd, spi refclk, uartf, uartlite, wdt refclk,
-              wdt rst, wled,
-
-              # For MT7628 and MT7688 SoCs
-              antenna, debug, i2s, jtag, p0led_an, p0led_kn,
-              p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
-              p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2,
-              rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi cs1,
-              spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -,
-            ]
+            description:
+              A string containing the name of the function to mux to the group.
+            anyOf:
+              - description: For MT7620 SoC
+                enum: [ephy, gpio, gpio i2s, gpio uartf, i2c, i2s uartf, mdio, nand, pa,
+                       pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf, refclk,
+                       rgmii1, rgmii2, sd, spi, spi refclk, uartf, uartlite, wdt refclk,
+                       wdt rst, wled]
+
+              - description: For MT7628 and MT7688 SoCs
+                enum: [antenna, debug, gpio, i2c, i2s, jtag, p0led_an, p0led_kn,
+                       p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
+                       p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2,
+                       refclk, rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi, spi cs1,
+                       spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -]
+
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
 
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: antenna
+            then:
+              properties:
+                groups:
+                  enum: [i2s]
+
+          - if:
+              properties:
+                function:
+                  const: debug
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: ephy
+            then:
+              properties:
+                groups:
+                  enum: [ephy]
+
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  oneOf:
+                    - description: For MT7620 SoC
+                      enum: [ephy, i2c, mdio, nd_sd, pa, pcie, rgmii1, rgmii2,
+                             spi, spi refclk, uartf, uartlite, wdt, wled]
+
+                    - description: For MT7628 and MT7688 SoCs
+                      enum: [gpio, i2c, i2s, p0led_an, p0led_kn, p1led_an,
+                             p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
+                             p4led_an, p4led_kn, perst, pwm0, pwm1, refclk,
+                             sdmode, spi, spi cs1, spis, uart0, uart1, uart2,
+                             wdt, wled_an, wled_kn]
+
+          - if:
+              properties:
+                function:
+                  const: gpio i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: gpio uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: i2s
+            then:
+              properties:
+                groups:
+                  enum: [i2s]
+
+          - if:
+              properties:
+                function:
+                  const: i2s uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [p0led_an, p0led_kn, p1led_an, p1led_kn, p2led_an,
+                         p2led_kn, p3led_an, p3led_kn, p4led_an, p4led_kn,
+                         sdmode]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: nand
+            then:
+              properties:
+                groups:
+                  enum: [nd_sd]
+
+          - if:
+              properties:
+                function:
+                  const: p0led_an
+            then:
+              properties:
+                groups:
+                  enum: [p0led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p0led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p0led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: p1led_an
+            then:
+              properties:
+                groups:
+                  enum: [p1led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p1led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p1led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: p2led_an
+            then:
+              properties:
+                groups:
+                  enum: [p2led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p2led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p2led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: p3led_an
+            then:
+              properties:
+                groups:
+                  enum: [p3led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p3led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p3led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: p4led_an
+            then:
+              properties:
+                groups:
+                  enum: [p4led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p4led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p4led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: pa
+            then:
+              properties:
+                groups:
+                  enum: [pa]
+
+          - if:
+              properties:
+                function:
+                  const: pcie
+            then:
+              properties:
+                groups:
+                  enum: [gpio]
+
+          - if:
+              properties:
+                function:
+                  const: pcie refclk
+            then:
+              properties:
+                groups:
+                  enum: [pcie]
+
+          - if:
+              properties:
+                function:
+                  const: pcie rst
+            then:
+              properties:
+                groups:
+                  enum: [pcie]
+
+          - if:
+              properties:
+                function:
+                  const: pcm
+            then:
+              properties:
+                groups:
+                  enum: [i2s]
+
+          - if:
+              properties:
+                function:
+                  const: pcm gpio
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: perst
+            then:
+              properties:
+                groups:
+                  enum: [perst]
+
+          - if:
+              properties:
+                function:
+                  const: pwm
+            then:
+              properties:
+                groups:
+                  enum: [uart1, uart2]
+
+          - if:
+              properties:
+                function:
+                  const: pwm0
+            then:
+              properties:
+                groups:
+                  enum: [pwm0]
+
+          - if:
+              properties:
+                function:
+                  const: pwm1
+            then:
+              properties:
+                groups:
+                  enum: [pwm1]
+
+          - if:
+              properties:
+                function:
+                  const: pwm_uart2
+            then:
+              properties:
+                groups:
+                  enum: [spis]
+
+          - if:
+              properties:
+                function:
+                  const: refclk
+            then:
+              properties:
+                groups:
+                  oneOf:
+                    - description: For MT7620 SoC
+                      enum: [mdio]
+
+                    - description: For MT7628 and MT7688 SoCs
+                      enum: [gpio, refclk, spi cs1]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii1
+            then:
+              properties:
+                groups:
+                  enum: [rgmii1]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii2
+            then:
+              properties:
+                groups:
+                  enum: [rgmii2]
+
+          - if:
+              properties:
+                function:
+                  const: rsvd
+            then:
+              properties:
+                groups:
+                  enum: [p0led_an, p0led_kn, wled_an, wled_kn]
+
+          - if:
+              properties:
+                function:
+                  const: sd
+            then:
+              properties:
+                groups:
+                  enum: [nd_sd]
+
+          - if:
+              properties:
+                function:
+                  const: sdxc
+            then:
+              properties:
+                groups:
+                  enum: [sdmode]
+
+          - if:
+              properties:
+                function:
+                  const: sdxc d5 d4
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: sdxc d6
+            then:
+              properties:
+                groups:
+                  enum: [pwm1]
+
+          - if:
+              properties:
+                function:
+                  const: sdxc d7
+            then:
+              properties:
+                groups:
+                  enum: [pwm0]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: spi cs1
+            then:
+              properties:
+                groups:
+                  enum: [spi cs1]
+
+          - if:
+              properties:
+                function:
+                  const: spi refclk
+            then:
+              properties:
+                groups:
+                  enum: [spi refclk]
+
+          - if:
+              properties:
+                function:
+                  const: spis
+            then:
+              properties:
+                groups:
+                  enum: [spis]
+
+          - if:
+              properties:
+                function:
+                  const: sw_r
+            then:
+              properties:
+                groups:
+                  enum: [uart1]
+
+          - if:
+              properties:
+                function:
+                  const: uart0
+            then:
+              properties:
+                groups:
+                  enum: [uart0]
+
+          - if:
+              properties:
+                function:
+                  const: uart1
+            then:
+              properties:
+                groups:
+                  enum: [uart1]
+
+          - if:
+              properties:
+                function:
+                  const: uart2
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: uartlite
+            then:
+              properties:
+                groups:
+                  enum: [uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: utif
+            then:
+              properties:
+                groups:
+                  enum: [p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an,
+                         p3led_kn, p4led_an, p4led_kn, pwm0, pwm1, sdmode, spis]
+
+          - if:
+              properties:
+                function:
+                  const: wdt
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
+          - if:
+              properties:
+                function:
+                  const: wdt refclk
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
+          - if:
+              properties:
+                function:
+                  const: wdt rst
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
+          - if:
+              properties:
+                function:
+                  const: wled
+            then:
+              properties:
+                groups:
+                  enum: [wled]
+
+          - if:
+              properties:
+                function:
+                  const: wled_an
+            then:
+              properties:
+                groups:
+                  enum: [wled_an]
+
+          - if:
+              properties:
+                function:
+                  const: wled_kn
+            then:
+              properties:
+                groups:
+                  enum: [wled_kn]
+
+          - if:
+              properties:
+                function:
+                  const: "-"
+            then:
+              properties:
+                groups:
+                  enum: [i2c, spi cs1, uart0]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -83,7 +644,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,mt7620-pinctrl";
-- 
2.37.2



From arinc.unal at arinc9.com  Sat Dec 31 01:35:46 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 12:35:46 +0300
Subject: [PATCH v2 6/6] dt-bindings: pinctrl: rt3883: add proper function muxing binding
In-Reply-To: <20221231093546.8881-1-arinc.unal@arinc9.com>
References: <20221231093546.8881-1-arinc.unal@arinc9.com>
Message-ID: <20221231093546.8881-7-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 .../pinctrl/ralink,mt7620-pinctrl.yaml        |   5 +-
 .../pinctrl/ralink,mt7621-pinctrl.yaml        |   1 +
 .../pinctrl/ralink,rt2880-pinctrl.yaml        |   1 +
 .../pinctrl/ralink,rt305x-pinctrl.yaml        |   3 +-
 .../pinctrl/ralink,rt3883-pinctrl.yaml        | 205 +++++++++++++++++-
 5 files changed, 205 insertions(+), 10 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
index 06880c80ba80..1e63ea34146a 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
@@ -49,6 +49,7 @@ patternProperties:
           groups:
             description:
               An array of strings. Each string contains the name of a group.
+            maxItems: 1
 
         required:
           - groups
@@ -89,7 +90,7 @@ patternProperties:
             then:
               properties:
                 groups:
-                  oneOf:
+                  anyOf:
                     - description: For MT7620 SoC
                       enum: [ephy, i2c, mdio, nd_sd, pa, pcie, rgmii1, rgmii2,
                              spi, spi refclk, uartf, uartlite, wdt, wled]
@@ -389,7 +390,7 @@ patternProperties:
             then:
               properties:
                 groups:
-                  oneOf:
+                  anyOf:
                     - description: For MT7620 SoC
                       enum: [mdio]
 
diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
index 0efb03f1d88e..1b1d37b981d9 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
@@ -39,6 +39,7 @@ patternProperties:
           groups:
             description:
               An array of strings. Each string contains the name of a group.
+            maxItems: 1
 
         required:
           - groups
diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml
index f59ddd5e6c2b..7fd0df880a76 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml
@@ -37,6 +37,7 @@ patternProperties:
           groups:
             description:
               An array of strings. Each string contains the name of a group.
+            maxItems: 1
 
         required:
           - groups
diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml
index 30779a1a90b0..4d66ca752a30 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml
@@ -52,6 +52,7 @@ patternProperties:
           groups:
             description:
               An array of strings. Each string contains the name of a group.
+            maxItems: 1
 
         required:
           - groups
@@ -65,7 +66,7 @@ patternProperties:
             then:
               properties:
                 groups:
-                  oneOf:
+                  anyOf:
                     - description: For RT3050, RT3052 and RT3350 SoCs
                       enum: [i2c, jtag, mdio, rgmii, sdram, spi, uartf,
                              uartlite]
diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,rt3883-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,rt3883-pinctrl.yaml
index feb6e66dcb61..008d93181aea 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,rt3883-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,rt3883-pinctrl.yaml
@@ -29,21 +29,213 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [ge1, ge2, i2c, jtag, lna a, lna g, mdio, pci, spi, uartf,
-                   uartlite]
-
           function:
-            description: The mux function to select.
+            description:
+              A string containing the name of the function to mux to the group.
             enum: [ge1, ge2, gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag,
                    lna a, lna g, mdio, pci-dev, pci-fnc, pci-host1, pci-host2,
                    pcm gpio, pcm i2s, pcm uartf, spi, uartf, uartlite]
 
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
+            maxItems: 1
+
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: ge1
+            then:
+              properties:
+                groups:
+                  enum: [ge1]
+
+          - if:
+              properties:
+                function:
+                  const: ge2
+            then:
+              properties:
+                groups:
+                  enum: [ge2]
+
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  enum: [ge1, ge2, i2c, jtag, lna a, lna g, mdio, pci, spi,
+                         uartf, uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: gpio i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: gpio uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: i2s uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [jtag]
+
+          - if:
+              properties:
+                function:
+                  const: lna a
+            then:
+              properties:
+                groups:
+                  enum: [lna a]
+
+          - if:
+              properties:
+                function:
+                  const: lna g
+            then:
+              properties:
+                groups:
+                  enum: [lna g]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: pci-dev
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
+          - if:
+              properties:
+                function:
+                  const: pci-fnc
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
+          - if:
+              properties:
+                function:
+                  const: pci-host1
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
+          - if:
+              properties:
+                function:
+                  const: pci-host2
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
+          - if:
+              properties:
+                function:
+                  const: pcm gpio
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: uartlite
+            then:
+              properties:
+                groups:
+                  enum: [uartlite]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -57,7 +249,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,rt3883-pinctrl";
-- 
2.37.2



From arinc.unal at arinc9.com  Sat Dec 31 01:35:41 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 12:35:41 +0300
Subject: [PATCH v2 1/6] pinctrl: ralink: rename variables which point out the pin group
In-Reply-To: <20221231093546.8881-1-arinc.unal@arinc9.com>
References: <20221231093546.8881-1-arinc.unal@arinc9.com>
Message-ID: <20221231093546.8881-2-arinc.unal@arinc9.com>

These variables define a list of functions which can be muxed to the pin
group which the name of the pin group was originally intended to be pointed
out on the name of the said variables.

Therefore, rename "func" to "grp" across all subdrivers where this applies.

Fixes: 18653d4bd8ab ("pinctrl: ralink: rename variable names for functions on MT7620 and MT7621")
Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 drivers/pinctrl/ralink/pinctrl-mt7620.c | 164 ++++++++++++------------
 drivers/pinctrl/ralink/pinctrl-mt7621.c |  48 +++----
 drivers/pinctrl/ralink/pinctrl-rt2880.c |  28 ++--
 drivers/pinctrl/ralink/pinctrl-rt305x.c |  82 ++++++------
 drivers/pinctrl/ralink/pinctrl-rt3883.c |  44 +++----
 5 files changed, 183 insertions(+), 183 deletions(-)

diff --git a/drivers/pinctrl/ralink/pinctrl-mt7620.c b/drivers/pinctrl/ralink/pinctrl-mt7620.c
index 22ff16eff02f..4e8d26bb3430 100644
--- a/drivers/pinctrl/ralink/pinctrl-mt7620.c
+++ b/drivers/pinctrl/ralink/pinctrl-mt7620.c
@@ -54,20 +54,20 @@
 #define MT7620_GPIO_MODE_EPHY		15
 #define MT7620_GPIO_MODE_PA		20
 
-static struct ralink_pmx_func i2c_func[] =  { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
-static struct ralink_pmx_func mdio_func[] = {
+static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
+static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
+static struct ralink_pmx_func mdio_grp[] = {
 	FUNC("mdio", MT7620_GPIO_MODE_MDIO, 22, 2),
 	FUNC("refclk", MT7620_GPIO_MODE_MDIO_REFCLK, 22, 2),
 };
-static struct ralink_pmx_func rgmii1_func[] = { FUNC("rgmii1", 0, 24, 12) };
-static struct ralink_pmx_func refclk_func[] = { FUNC("spi refclk", 0, 37, 3) };
-static struct ralink_pmx_func ephy_func[] = { FUNC("ephy", 0, 40, 5) };
-static struct ralink_pmx_func rgmii2_func[] = { FUNC("rgmii2", 0, 60, 12) };
-static struct ralink_pmx_func wled_func[] = { FUNC("wled", 0, 72, 1) };
-static struct ralink_pmx_func pa_func[] = { FUNC("pa", 0, 18, 4) };
-static struct ralink_pmx_func uartf_func[] = {
+static struct ralink_pmx_func rgmii1_grp[] = { FUNC("rgmii1", 0, 24, 12) };
+static struct ralink_pmx_func refclk_grp[] = { FUNC("spi refclk", 0, 37, 3) };
+static struct ralink_pmx_func ephy_grp[] = { FUNC("ephy", 0, 40, 5) };
+static struct ralink_pmx_func rgmii2_grp[] = { FUNC("rgmii2", 0, 60, 12) };
+static struct ralink_pmx_func wled_grp[] = { FUNC("wled", 0, 72, 1) };
+static struct ralink_pmx_func pa_grp[] = { FUNC("pa", 0, 18, 4) };
+static struct ralink_pmx_func uartf_grp[] = {
 	FUNC("uartf", MT7620_GPIO_MODE_UARTF, 7, 8),
 	FUNC("pcm uartf", MT7620_GPIO_MODE_PCM_UARTF, 7, 8),
 	FUNC("pcm i2s", MT7620_GPIO_MODE_PCM_I2S, 7, 8),
@@ -76,202 +76,202 @@ static struct ralink_pmx_func uartf_func[] = {
 	FUNC("gpio uartf", MT7620_GPIO_MODE_GPIO_UARTF, 7, 4),
 	FUNC("gpio i2s", MT7620_GPIO_MODE_GPIO_I2S, 7, 4),
 };
-static struct ralink_pmx_func wdt_func[] = {
+static struct ralink_pmx_func wdt_grp[] = {
 	FUNC("wdt rst", 0, 17, 1),
 	FUNC("wdt refclk", 0, 17, 1),
 	};
-static struct ralink_pmx_func pcie_rst_func[] = {
+static struct ralink_pmx_func pcie_rst_grp[] = {
 	FUNC("pcie rst", MT7620_GPIO_MODE_PCIE_RST, 36, 1),
 	FUNC("pcie refclk", MT7620_GPIO_MODE_PCIE_REF, 36, 1)
 };
-static struct ralink_pmx_func nd_sd_func[] = {
+static struct ralink_pmx_func nd_sd_grp[] = {
 	FUNC("nand", MT7620_GPIO_MODE_NAND, 45, 15),
 	FUNC("sd", MT7620_GPIO_MODE_SD, 47, 13)
 };
 
 static struct ralink_pmx_group mt7620a_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, MT7620_GPIO_MODE_I2C),
-	GRP("uartf", uartf_func, MT7620_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, MT7620_GPIO_MODE_I2C),
+	GRP("uartf", uartf_grp, MT7620_GPIO_MODE_UART0_MASK,
 		MT7620_GPIO_MODE_UART0_SHIFT),
-	GRP("spi", spi_func, 1, MT7620_GPIO_MODE_SPI),
-	GRP("uartlite", uartlite_func, 1, MT7620_GPIO_MODE_UART1),
-	GRP_G("wdt", wdt_func, MT7620_GPIO_MODE_WDT_MASK,
+	GRP("spi", spi_grp, 1, MT7620_GPIO_MODE_SPI),
+	GRP("uartlite", uartlite_grp, 1, MT7620_GPIO_MODE_UART1),
+	GRP_G("wdt", wdt_grp, MT7620_GPIO_MODE_WDT_MASK,
 		MT7620_GPIO_MODE_WDT_GPIO, MT7620_GPIO_MODE_WDT_SHIFT),
-	GRP_G("mdio", mdio_func, MT7620_GPIO_MODE_MDIO_MASK,
+	GRP_G("mdio", mdio_grp, MT7620_GPIO_MODE_MDIO_MASK,
 		MT7620_GPIO_MODE_MDIO_GPIO, MT7620_GPIO_MODE_MDIO_SHIFT),
-	GRP("rgmii1", rgmii1_func, 1, MT7620_GPIO_MODE_RGMII1),
-	GRP("spi refclk", refclk_func, 1, MT7620_GPIO_MODE_SPI_REF_CLK),
-	GRP_G("pcie", pcie_rst_func, MT7620_GPIO_MODE_PCIE_MASK,
+	GRP("rgmii1", rgmii1_grp, 1, MT7620_GPIO_MODE_RGMII1),
+	GRP("spi refclk", refclk_grp, 1, MT7620_GPIO_MODE_SPI_REF_CLK),
+	GRP_G("pcie", pcie_rst_grp, MT7620_GPIO_MODE_PCIE_MASK,
 		MT7620_GPIO_MODE_PCIE_GPIO, MT7620_GPIO_MODE_PCIE_SHIFT),
-	GRP_G("nd_sd", nd_sd_func, MT7620_GPIO_MODE_ND_SD_MASK,
+	GRP_G("nd_sd", nd_sd_grp, MT7620_GPIO_MODE_ND_SD_MASK,
 		MT7620_GPIO_MODE_ND_SD_GPIO, MT7620_GPIO_MODE_ND_SD_SHIFT),
-	GRP("rgmii2", rgmii2_func, 1, MT7620_GPIO_MODE_RGMII2),
-	GRP("wled", wled_func, 1, MT7620_GPIO_MODE_WLED),
-	GRP("ephy", ephy_func, 1, MT7620_GPIO_MODE_EPHY),
-	GRP("pa", pa_func, 1, MT7620_GPIO_MODE_PA),
+	GRP("rgmii2", rgmii2_grp, 1, MT7620_GPIO_MODE_RGMII2),
+	GRP("wled", wled_grp, 1, MT7620_GPIO_MODE_WLED),
+	GRP("ephy", ephy_grp, 1, MT7620_GPIO_MODE_EPHY),
+	GRP("pa", pa_grp, 1, MT7620_GPIO_MODE_PA),
 	{ 0 }
 };
 
-static struct ralink_pmx_func pwm1_func_mt76x8[] = {
+static struct ralink_pmx_func pwm1_grp_mt76x8[] = {
 	FUNC("sdxc d6", 3, 19, 1),
 	FUNC("utif", 2, 19, 1),
 	FUNC("gpio", 1, 19, 1),
 	FUNC("pwm1", 0, 19, 1),
 };
 
-static struct ralink_pmx_func pwm0_func_mt76x8[] = {
+static struct ralink_pmx_func pwm0_grp_mt76x8[] = {
 	FUNC("sdxc d7", 3, 18, 1),
 	FUNC("utif", 2, 18, 1),
 	FUNC("gpio", 1, 18, 1),
 	FUNC("pwm0", 0, 18, 1),
 };
 
-static struct ralink_pmx_func uart2_func_mt76x8[] = {
+static struct ralink_pmx_func uart2_grp_mt76x8[] = {
 	FUNC("sdxc d5 d4", 3, 20, 2),
 	FUNC("pwm", 2, 20, 2),
 	FUNC("gpio", 1, 20, 2),
 	FUNC("uart2", 0, 20, 2),
 };
 
-static struct ralink_pmx_func uart1_func_mt76x8[] = {
+static struct ralink_pmx_func uart1_grp_mt76x8[] = {
 	FUNC("sw_r", 3, 45, 2),
 	FUNC("pwm", 2, 45, 2),
 	FUNC("gpio", 1, 45, 2),
 	FUNC("uart1", 0, 45, 2),
 };
 
-static struct ralink_pmx_func i2c_func_mt76x8[] = {
+static struct ralink_pmx_func i2c_grp_mt76x8[] = {
 	FUNC("-", 3, 4, 2),
 	FUNC("debug", 2, 4, 2),
 	FUNC("gpio", 1, 4, 2),
 	FUNC("i2c", 0, 4, 2),
 };
 
-static struct ralink_pmx_func refclk_func_mt76x8[] = { FUNC("refclk", 0, 37, 1) };
-static struct ralink_pmx_func perst_func_mt76x8[] = { FUNC("perst", 0, 36, 1) };
-static struct ralink_pmx_func wdt_func_mt76x8[] = { FUNC("wdt", 0, 38, 1) };
-static struct ralink_pmx_func spi_func_mt76x8[] = { FUNC("spi", 0, 7, 4) };
+static struct ralink_pmx_func refclk_grp_mt76x8[] = { FUNC("refclk", 0, 37, 1) };
+static struct ralink_pmx_func perst_grp_mt76x8[] = { FUNC("perst", 0, 36, 1) };
+static struct ralink_pmx_func wdt_grp_mt76x8[] = { FUNC("wdt", 0, 38, 1) };
+static struct ralink_pmx_func spi_grp_mt76x8[] = { FUNC("spi", 0, 7, 4) };
 
-static struct ralink_pmx_func sd_mode_func_mt76x8[] = {
+static struct ralink_pmx_func sd_mode_grp_mt76x8[] = {
 	FUNC("jtag", 3, 22, 8),
 	FUNC("utif", 2, 22, 8),
 	FUNC("gpio", 1, 22, 8),
 	FUNC("sdxc", 0, 22, 8),
 };
 
-static struct ralink_pmx_func uart0_func_mt76x8[] = {
+static struct ralink_pmx_func uart0_grp_mt76x8[] = {
 	FUNC("-", 3, 12, 2),
 	FUNC("-", 2, 12, 2),
 	FUNC("gpio", 1, 12, 2),
 	FUNC("uart0", 0, 12, 2),
 };
 
-static struct ralink_pmx_func i2s_func_mt76x8[] = {
+static struct ralink_pmx_func i2s_grp_mt76x8[] = {
 	FUNC("antenna", 3, 0, 4),
 	FUNC("pcm", 2, 0, 4),
 	FUNC("gpio", 1, 0, 4),
 	FUNC("i2s", 0, 0, 4),
 };
 
-static struct ralink_pmx_func spi_cs1_func_mt76x8[] = {
+static struct ralink_pmx_func spi_cs1_grp_mt76x8[] = {
 	FUNC("-", 3, 6, 1),
 	FUNC("refclk", 2, 6, 1),
 	FUNC("gpio", 1, 6, 1),
 	FUNC("spi cs1", 0, 6, 1),
 };
 
-static struct ralink_pmx_func spis_func_mt76x8[] = {
+static struct ralink_pmx_func spis_grp_mt76x8[] = {
 	FUNC("pwm_uart2", 3, 14, 4),
 	FUNC("utif", 2, 14, 4),
 	FUNC("gpio", 1, 14, 4),
 	FUNC("spis", 0, 14, 4),
 };
 
-static struct ralink_pmx_func gpio_func_mt76x8[] = {
+static struct ralink_pmx_func gpio_grp_mt76x8[] = {
 	FUNC("pcie", 3, 11, 1),
 	FUNC("refclk", 2, 11, 1),
 	FUNC("gpio", 1, 11, 1),
 	FUNC("gpio", 0, 11, 1),
 };
 
-static struct ralink_pmx_func p4led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p4led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 30, 1),
 	FUNC("utif", 2, 30, 1),
 	FUNC("gpio", 1, 30, 1),
 	FUNC("p4led_kn", 0, 30, 1),
 };
 
-static struct ralink_pmx_func p3led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p3led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 31, 1),
 	FUNC("utif", 2, 31, 1),
 	FUNC("gpio", 1, 31, 1),
 	FUNC("p3led_kn", 0, 31, 1),
 };
 
-static struct ralink_pmx_func p2led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p2led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 32, 1),
 	FUNC("utif", 2, 32, 1),
 	FUNC("gpio", 1, 32, 1),
 	FUNC("p2led_kn", 0, 32, 1),
 };
 
-static struct ralink_pmx_func p1led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p1led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 33, 1),
 	FUNC("utif", 2, 33, 1),
 	FUNC("gpio", 1, 33, 1),
 	FUNC("p1led_kn", 0, 33, 1),
 };
 
-static struct ralink_pmx_func p0led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p0led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 34, 1),
 	FUNC("rsvd", 2, 34, 1),
 	FUNC("gpio", 1, 34, 1),
 	FUNC("p0led_kn", 0, 34, 1),
 };
 
-static struct ralink_pmx_func wled_kn_func_mt76x8[] = {
+static struct ralink_pmx_func wled_kn_grp_mt76x8[] = {
 	FUNC("rsvd", 3, 35, 1),
 	FUNC("rsvd", 2, 35, 1),
 	FUNC("gpio", 1, 35, 1),
 	FUNC("wled_kn", 0, 35, 1),
 };
 
-static struct ralink_pmx_func p4led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p4led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 39, 1),
 	FUNC("utif", 2, 39, 1),
 	FUNC("gpio", 1, 39, 1),
 	FUNC("p4led_an", 0, 39, 1),
 };
 
-static struct ralink_pmx_func p3led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p3led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 40, 1),
 	FUNC("utif", 2, 40, 1),
 	FUNC("gpio", 1, 40, 1),
 	FUNC("p3led_an", 0, 40, 1),
 };
 
-static struct ralink_pmx_func p2led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p2led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 41, 1),
 	FUNC("utif", 2, 41, 1),
 	FUNC("gpio", 1, 41, 1),
 	FUNC("p2led_an", 0, 41, 1),
 };
 
-static struct ralink_pmx_func p1led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p1led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 42, 1),
 	FUNC("utif", 2, 42, 1),
 	FUNC("gpio", 1, 42, 1),
 	FUNC("p1led_an", 0, 42, 1),
 };
 
-static struct ralink_pmx_func p0led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p0led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 43, 1),
 	FUNC("rsvd", 2, 43, 1),
 	FUNC("gpio", 1, 43, 1),
 	FUNC("p0led_an", 0, 43, 1),
 };
 
-static struct ralink_pmx_func wled_an_func_mt76x8[] = {
+static struct ralink_pmx_func wled_an_grp_mt76x8[] = {
 	FUNC("rsvd", 3, 44, 1),
 	FUNC("rsvd", 2, 44, 1),
 	FUNC("gpio", 1, 44, 1),
@@ -309,55 +309,55 @@ static struct ralink_pmx_func wled_an_func_mt76x8[] = {
 #define MT76X8_GPIO_MODE_GPIO		0
 
 static struct ralink_pmx_group mt76x8_pinmux_data[] = {
-	GRP_G("pwm1", pwm1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("pwm1", pwm1_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_PWM1),
-	GRP_G("pwm0", pwm0_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("pwm0", pwm0_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_PWM0),
-	GRP_G("uart2", uart2_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("uart2", uart2_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_UART2),
-	GRP_G("uart1", uart1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("uart1", uart1_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_UART1),
-	GRP_G("i2c", i2c_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("i2c", i2c_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_I2C),
-	GRP("refclk", refclk_func_mt76x8, 1, MT76X8_GPIO_MODE_REFCLK),
-	GRP("perst", perst_func_mt76x8, 1, MT76X8_GPIO_MODE_PERST),
-	GRP("wdt", wdt_func_mt76x8, 1, MT76X8_GPIO_MODE_WDT),
-	GRP("spi", spi_func_mt76x8, 1, MT76X8_GPIO_MODE_SPI),
-	GRP_G("sdmode", sd_mode_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP("refclk", refclk_grp_mt76x8, 1, MT76X8_GPIO_MODE_REFCLK),
+	GRP("perst", perst_grp_mt76x8, 1, MT76X8_GPIO_MODE_PERST),
+	GRP("wdt", wdt_grp_mt76x8, 1, MT76X8_GPIO_MODE_WDT),
+	GRP("spi", spi_grp_mt76x8, 1, MT76X8_GPIO_MODE_SPI),
+	GRP_G("sdmode", sd_mode_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_SDMODE),
-	GRP_G("uart0", uart0_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("uart0", uart0_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_UART0),
-	GRP_G("i2s", i2s_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("i2s", i2s_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_I2S),
-	GRP_G("spi cs1", spi_cs1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("spi cs1", spi_cs1_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_CS1),
-	GRP_G("spis", spis_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("spis", spis_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_SPIS),
-	GRP_G("gpio", gpio_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("gpio", gpio_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_GPIO),
-	GRP_G("wled_an", wled_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("wled_an", wled_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_WLED_AN),
-	GRP_G("p0led_an", p0led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p0led_an", p0led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P0LED_AN),
-	GRP_G("p1led_an", p1led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p1led_an", p1led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P1LED_AN),
-	GRP_G("p2led_an", p2led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p2led_an", p2led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P2LED_AN),
-	GRP_G("p3led_an", p3led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p3led_an", p3led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P3LED_AN),
-	GRP_G("p4led_an", p4led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p4led_an", p4led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P4LED_AN),
-	GRP_G("wled_kn", wled_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("wled_kn", wled_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_WLED_KN),
-	GRP_G("p0led_kn", p0led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p0led_kn", p0led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P0LED_KN),
-	GRP_G("p1led_kn", p1led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p1led_kn", p1led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P1LED_KN),
-	GRP_G("p2led_kn", p2led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p2led_kn", p2led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P2LED_KN),
-	GRP_G("p3led_kn", p3led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p3led_kn", p3led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P3LED_KN),
-	GRP_G("p4led_kn", p4led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p4led_kn", p4led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P4LED_KN),
 	{ 0 }
 };
diff --git a/drivers/pinctrl/ralink/pinctrl-mt7621.c b/drivers/pinctrl/ralink/pinctrl-mt7621.c
index b47968f40e0c..eddc0ba6d468 100644
--- a/drivers/pinctrl/ralink/pinctrl-mt7621.c
+++ b/drivers/pinctrl/ralink/pinctrl-mt7621.c
@@ -34,59 +34,59 @@
 #define MT7621_GPIO_MODE_SDHCI_SHIFT	18
 #define MT7621_GPIO_MODE_SDHCI_GPIO	1
 
-static struct ralink_pmx_func uart1_func[] =  { FUNC("uart1", 0, 1, 2) };
-static struct ralink_pmx_func i2c_func[] =  { FUNC("i2c", 0, 3, 2) };
-static struct ralink_pmx_func uart3_func[] = {
+static struct ralink_pmx_func uart1_grp[] =  { FUNC("uart1", 0, 1, 2) };
+static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 3, 2) };
+static struct ralink_pmx_func uart3_grp[] = {
 	FUNC("uart3", 0, 5, 4),
 	FUNC("i2s", 2, 5, 4),
 	FUNC("spdif3", 3, 5, 4),
 };
-static struct ralink_pmx_func uart2_func[] = {
+static struct ralink_pmx_func uart2_grp[] = {
 	FUNC("uart2", 0, 9, 4),
 	FUNC("pcm", 2, 9, 4),
 	FUNC("spdif2", 3, 9, 4),
 };
-static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 13, 5) };
-static struct ralink_pmx_func wdt_func[] = {
+static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 13, 5) };
+static struct ralink_pmx_func wdt_grp[] = {
 	FUNC("wdt rst", 0, 18, 1),
 	FUNC("wdt refclk", 2, 18, 1),
 };
-static struct ralink_pmx_func pcie_rst_func[] = {
+static struct ralink_pmx_func pcie_rst_grp[] = {
 	FUNC("pcie rst", MT7621_GPIO_MODE_PCIE_RST, 19, 1),
 	FUNC("pcie refclk", MT7621_GPIO_MODE_PCIE_REF, 19, 1)
 };
-static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 20, 2) };
-static struct ralink_pmx_func rgmii2_func[] = { FUNC("rgmii2", 0, 22, 12) };
-static struct ralink_pmx_func spi_func[] = {
+static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 20, 2) };
+static struct ralink_pmx_func rgmii2_grp[] = { FUNC("rgmii2", 0, 22, 12) };
+static struct ralink_pmx_func spi_grp[] = {
 	FUNC("spi", 0, 34, 7),
 	FUNC("nand1", 2, 34, 7),
 };
-static struct ralink_pmx_func sdhci_func[] = {
+static struct ralink_pmx_func sdhci_grp[] = {
 	FUNC("sdhci", 0, 41, 8),
 	FUNC("nand2", 2, 41, 8),
 };
-static struct ralink_pmx_func rgmii1_func[] = { FUNC("rgmii1", 0, 49, 12) };
+static struct ralink_pmx_func rgmii1_grp[] = { FUNC("rgmii1", 0, 49, 12) };
 
 static struct ralink_pmx_group mt7621_pinmux_data[] = {
-	GRP("uart1", uart1_func, 1, MT7621_GPIO_MODE_UART1),
-	GRP("i2c", i2c_func, 1, MT7621_GPIO_MODE_I2C),
-	GRP_G("uart3", uart3_func, MT7621_GPIO_MODE_UART3_MASK,
+	GRP("uart1", uart1_grp, 1, MT7621_GPIO_MODE_UART1),
+	GRP("i2c", i2c_grp, 1, MT7621_GPIO_MODE_I2C),
+	GRP_G("uart3", uart3_grp, MT7621_GPIO_MODE_UART3_MASK,
 		MT7621_GPIO_MODE_UART3_GPIO, MT7621_GPIO_MODE_UART3_SHIFT),
-	GRP_G("uart2", uart2_func, MT7621_GPIO_MODE_UART2_MASK,
+	GRP_G("uart2", uart2_grp, MT7621_GPIO_MODE_UART2_MASK,
 		MT7621_GPIO_MODE_UART2_GPIO, MT7621_GPIO_MODE_UART2_SHIFT),
-	GRP("jtag", jtag_func, 1, MT7621_GPIO_MODE_JTAG),
-	GRP_G("wdt", wdt_func, MT7621_GPIO_MODE_WDT_MASK,
+	GRP("jtag", jtag_grp, 1, MT7621_GPIO_MODE_JTAG),
+	GRP_G("wdt", wdt_grp, MT7621_GPIO_MODE_WDT_MASK,
 		MT7621_GPIO_MODE_WDT_GPIO, MT7621_GPIO_MODE_WDT_SHIFT),
-	GRP_G("pcie", pcie_rst_func, MT7621_GPIO_MODE_PCIE_MASK,
+	GRP_G("pcie", pcie_rst_grp, MT7621_GPIO_MODE_PCIE_MASK,
 		MT7621_GPIO_MODE_PCIE_GPIO, MT7621_GPIO_MODE_PCIE_SHIFT),
-	GRP_G("mdio", mdio_func, MT7621_GPIO_MODE_MDIO_MASK,
+	GRP_G("mdio", mdio_grp, MT7621_GPIO_MODE_MDIO_MASK,
 		MT7621_GPIO_MODE_MDIO_GPIO, MT7621_GPIO_MODE_MDIO_SHIFT),
-	GRP("rgmii2", rgmii2_func, 1, MT7621_GPIO_MODE_RGMII2),
-	GRP_G("spi", spi_func, MT7621_GPIO_MODE_SPI_MASK,
+	GRP("rgmii2", rgmii2_grp, 1, MT7621_GPIO_MODE_RGMII2),
+	GRP_G("spi", spi_grp, MT7621_GPIO_MODE_SPI_MASK,
 		MT7621_GPIO_MODE_SPI_GPIO, MT7621_GPIO_MODE_SPI_SHIFT),
-	GRP_G("sdhci", sdhci_func, MT7621_GPIO_MODE_SDHCI_MASK,
+	GRP_G("sdhci", sdhci_grp, MT7621_GPIO_MODE_SDHCI_MASK,
 		MT7621_GPIO_MODE_SDHCI_GPIO, MT7621_GPIO_MODE_SDHCI_SHIFT),
-	GRP("rgmii1", rgmii1_func, 1, MT7621_GPIO_MODE_RGMII1),
+	GRP("rgmii1", rgmii1_grp, 1, MT7621_GPIO_MODE_RGMII1),
 	{ 0 }
 };
 
diff --git a/drivers/pinctrl/ralink/pinctrl-rt2880.c b/drivers/pinctrl/ralink/pinctrl-rt2880.c
index 811e12df1133..3e2f1aaaf095 100644
--- a/drivers/pinctrl/ralink/pinctrl-rt2880.c
+++ b/drivers/pinctrl/ralink/pinctrl-rt2880.c
@@ -15,22 +15,22 @@
 #define RT2880_GPIO_MODE_SDRAM		BIT(6)
 #define RT2880_GPIO_MODE_PCI		BIT(7)
 
-static struct ralink_pmx_func i2c_func[] = { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 7, 8) };
-static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
-static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
-static struct ralink_pmx_func sdram_func[] = { FUNC("sdram", 0, 24, 16) };
-static struct ralink_pmx_func pci_func[] = { FUNC("pci", 0, 40, 32) };
+static struct ralink_pmx_func i2c_grp[] = { FUNC("i2c", 0, 1, 2) };
+static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 7, 8) };
+static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
+static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
+static struct ralink_pmx_func sdram_grp[] = { FUNC("sdram", 0, 24, 16) };
+static struct ralink_pmx_func pci_grp[] = { FUNC("pci", 0, 40, 32) };
 
 static struct ralink_pmx_group rt2880_pinmux_data_act[] = {
-	GRP("i2c", i2c_func, 1, RT2880_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT2880_GPIO_MODE_SPI),
-	GRP("uartlite", uartlite_func, 1, RT2880_GPIO_MODE_UART0),
-	GRP("jtag", jtag_func, 1, RT2880_GPIO_MODE_JTAG),
-	GRP("mdio", mdio_func, 1, RT2880_GPIO_MODE_MDIO),
-	GRP("sdram", sdram_func, 1, RT2880_GPIO_MODE_SDRAM),
-	GRP("pci", pci_func, 1, RT2880_GPIO_MODE_PCI),
+	GRP("i2c", i2c_grp, 1, RT2880_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT2880_GPIO_MODE_SPI),
+	GRP("uartlite", uartlite_grp, 1, RT2880_GPIO_MODE_UART0),
+	GRP("jtag", jtag_grp, 1, RT2880_GPIO_MODE_JTAG),
+	GRP("mdio", mdio_grp, 1, RT2880_GPIO_MODE_MDIO),
+	GRP("sdram", sdram_grp, 1, RT2880_GPIO_MODE_SDRAM),
+	GRP("pci", pci_grp, 1, RT2880_GPIO_MODE_PCI),
 	{ 0 }
 };
 
diff --git a/drivers/pinctrl/ralink/pinctrl-rt305x.c b/drivers/pinctrl/ralink/pinctrl-rt305x.c
index 5b204b7ca1f3..bdaee5ce1ee0 100644
--- a/drivers/pinctrl/ralink/pinctrl-rt305x.c
+++ b/drivers/pinctrl/ralink/pinctrl-rt305x.c
@@ -31,9 +31,9 @@
 #define RT3352_GPIO_MODE_LNA		18
 #define RT3352_GPIO_MODE_PA		20
 
-static struct ralink_pmx_func i2c_func[] =  { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartf_func[] = {
+static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
+static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct ralink_pmx_func uartf_grp[] = {
 	FUNC("uartf", RT305X_GPIO_MODE_UARTF, 7, 8),
 	FUNC("pcm uartf", RT305X_GPIO_MODE_PCM_UARTF, 7, 8),
 	FUNC("pcm i2s", RT305X_GPIO_MODE_PCM_I2S, 7, 8),
@@ -42,65 +42,65 @@ static struct ralink_pmx_func uartf_func[] = {
 	FUNC("gpio uartf", RT305X_GPIO_MODE_GPIO_UARTF, 7, 4),
 	FUNC("gpio i2s", RT305X_GPIO_MODE_GPIO_I2S, 7, 4),
 };
-static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
-static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
-static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
-static struct ralink_pmx_func rt5350_led_func[] = { FUNC("led", 0, 22, 5) };
-static struct ralink_pmx_func rt5350_cs1_func[] = {
+static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
+static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
+static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
+static struct ralink_pmx_func rt5350_led_grp[] = { FUNC("led", 0, 22, 5) };
+static struct ralink_pmx_func rt5350_cs1_grp[] = {
 	FUNC("spi_cs1", 0, 27, 1),
 	FUNC("wdg_cs1", 1, 27, 1),
 };
-static struct ralink_pmx_func sdram_func[] = { FUNC("sdram", 0, 24, 16) };
-static struct ralink_pmx_func rt3352_rgmii_func[] = {
+static struct ralink_pmx_func sdram_grp[] = { FUNC("sdram", 0, 24, 16) };
+static struct ralink_pmx_func rt3352_rgmii_grp[] = {
 	FUNC("rgmii", 0, 24, 12)
 };
-static struct ralink_pmx_func rgmii_func[] = { FUNC("rgmii", 0, 40, 12) };
-static struct ralink_pmx_func rt3352_lna_func[] = { FUNC("lna", 0, 36, 2) };
-static struct ralink_pmx_func rt3352_pa_func[] = { FUNC("pa", 0, 38, 2) };
-static struct ralink_pmx_func rt3352_led_func[] = { FUNC("led", 0, 40, 5) };
-static struct ralink_pmx_func rt3352_cs1_func[] = {
+static struct ralink_pmx_func rgmii_grp[] = { FUNC("rgmii", 0, 40, 12) };
+static struct ralink_pmx_func rt3352_lna_grp[] = { FUNC("lna", 0, 36, 2) };
+static struct ralink_pmx_func rt3352_pa_grp[] = { FUNC("pa", 0, 38, 2) };
+static struct ralink_pmx_func rt3352_led_grp[] = { FUNC("led", 0, 40, 5) };
+static struct ralink_pmx_func rt3352_cs1_grp[] = {
 	FUNC("spi_cs1", 0, 45, 1),
 	FUNC("wdg_cs1", 1, 45, 1),
 };
 
 static struct ralink_pmx_group rt3050_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, RT305X_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI),
-	GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
+	GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
 		RT305X_GPIO_MODE_UART0_SHIFT),
-	GRP("uartlite", uartlite_func, 1, RT305X_GPIO_MODE_UART1),
-	GRP("jtag", jtag_func, 1, RT305X_GPIO_MODE_JTAG),
-	GRP("mdio", mdio_func, 1, RT305X_GPIO_MODE_MDIO),
-	GRP("rgmii", rgmii_func, 1, RT305X_GPIO_MODE_RGMII),
-	GRP("sdram", sdram_func, 1, RT305X_GPIO_MODE_SDRAM),
+	GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
+	GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
+	GRP("mdio", mdio_grp, 1, RT305X_GPIO_MODE_MDIO),
+	GRP("rgmii", rgmii_grp, 1, RT305X_GPIO_MODE_RGMII),
+	GRP("sdram", sdram_grp, 1, RT305X_GPIO_MODE_SDRAM),
 	{ 0 }
 };
 
 static struct ralink_pmx_group rt3352_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, RT305X_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI),
-	GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
+	GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
 		RT305X_GPIO_MODE_UART0_SHIFT),
-	GRP("uartlite", uartlite_func, 1, RT305X_GPIO_MODE_UART1),
-	GRP("jtag", jtag_func, 1, RT305X_GPIO_MODE_JTAG),
-	GRP("mdio", mdio_func, 1, RT305X_GPIO_MODE_MDIO),
-	GRP("rgmii", rt3352_rgmii_func, 1, RT305X_GPIO_MODE_RGMII),
-	GRP("lna", rt3352_lna_func, 1, RT3352_GPIO_MODE_LNA),
-	GRP("pa", rt3352_pa_func, 1, RT3352_GPIO_MODE_PA),
-	GRP("led", rt3352_led_func, 1, RT5350_GPIO_MODE_PHY_LED),
-	GRP("spi_cs1", rt3352_cs1_func, 2, RT5350_GPIO_MODE_SPI_CS1),
+	GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
+	GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
+	GRP("mdio", mdio_grp, 1, RT305X_GPIO_MODE_MDIO),
+	GRP("rgmii", rt3352_rgmii_grp, 1, RT305X_GPIO_MODE_RGMII),
+	GRP("lna", rt3352_lna_grp, 1, RT3352_GPIO_MODE_LNA),
+	GRP("pa", rt3352_pa_grp, 1, RT3352_GPIO_MODE_PA),
+	GRP("led", rt3352_led_grp, 1, RT5350_GPIO_MODE_PHY_LED),
+	GRP("spi_cs1", rt3352_cs1_grp, 2, RT5350_GPIO_MODE_SPI_CS1),
 	{ 0 }
 };
 
 static struct ralink_pmx_group rt5350_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, RT305X_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI),
-	GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
+	GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
 		RT305X_GPIO_MODE_UART0_SHIFT),
-	GRP("uartlite", uartlite_func, 1, RT305X_GPIO_MODE_UART1),
-	GRP("jtag", jtag_func, 1, RT305X_GPIO_MODE_JTAG),
-	GRP("led", rt5350_led_func, 1, RT5350_GPIO_MODE_PHY_LED),
-	GRP("spi_cs1", rt5350_cs1_func, 2, RT5350_GPIO_MODE_SPI_CS1),
+	GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
+	GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
+	GRP("led", rt5350_led_grp, 1, RT5350_GPIO_MODE_PHY_LED),
+	GRP("spi_cs1", rt5350_cs1_grp, 2, RT5350_GPIO_MODE_SPI_CS1),
 	{ 0 }
 };
 
diff --git a/drivers/pinctrl/ralink/pinctrl-rt3883.c b/drivers/pinctrl/ralink/pinctrl-rt3883.c
index 44a66c3d2d2a..392208662355 100644
--- a/drivers/pinctrl/ralink/pinctrl-rt3883.c
+++ b/drivers/pinctrl/ralink/pinctrl-rt3883.c
@@ -39,9 +39,9 @@
 #define RT3883_GPIO_MODE_LNA_G_GPIO	0x3
 #define RT3883_GPIO_MODE_LNA_G		_RT3883_GPIO_MODE_LNA_G(RT3883_GPIO_MODE_LNA_G_MASK)
 
-static struct ralink_pmx_func i2c_func[] =  { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartf_func[] = {
+static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
+static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct ralink_pmx_func uartf_grp[] = {
 	FUNC("uartf", RT3883_GPIO_MODE_UARTF, 7, 8),
 	FUNC("pcm uartf", RT3883_GPIO_MODE_PCM_UARTF, 7, 8),
 	FUNC("pcm i2s", RT3883_GPIO_MODE_PCM_I2S, 7, 8),
@@ -50,34 +50,34 @@ static struct ralink_pmx_func uartf_func[] = {
 	FUNC("gpio uartf", RT3883_GPIO_MODE_GPIO_UARTF, 7, 4),
 	FUNC("gpio i2s", RT3883_GPIO_MODE_GPIO_I2S, 7, 4),
 };
-static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
-static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
-static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
-static struct ralink_pmx_func lna_a_func[] = { FUNC("lna a", 0, 32, 3) };
-static struct ralink_pmx_func lna_g_func[] = { FUNC("lna g", 0, 35, 3) };
-static struct ralink_pmx_func pci_func[] = {
+static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
+static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
+static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
+static struct ralink_pmx_func lna_a_grp[] = { FUNC("lna a", 0, 32, 3) };
+static struct ralink_pmx_func lna_g_grp[] = { FUNC("lna g", 0, 35, 3) };
+static struct ralink_pmx_func pci_grp[] = {
 	FUNC("pci-dev", 0, 40, 32),
 	FUNC("pci-host2", 1, 40, 32),
 	FUNC("pci-host1", 2, 40, 32),
 	FUNC("pci-fnc", 3, 40, 32)
 };
-static struct ralink_pmx_func ge1_func[] = { FUNC("ge1", 0, 72, 12) };
-static struct ralink_pmx_func ge2_func[] = { FUNC("ge2", 0, 84, 12) };
+static struct ralink_pmx_func ge1_grp[] = { FUNC("ge1", 0, 72, 12) };
+static struct ralink_pmx_func ge2_grp[] = { FUNC("ge2", 0, 84, 12) };
 
 static struct ralink_pmx_group rt3883_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, RT3883_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT3883_GPIO_MODE_SPI),
-	GRP("uartf", uartf_func, RT3883_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, RT3883_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT3883_GPIO_MODE_SPI),
+	GRP("uartf", uartf_grp, RT3883_GPIO_MODE_UART0_MASK,
 		RT3883_GPIO_MODE_UART0_SHIFT),
-	GRP("uartlite", uartlite_func, 1, RT3883_GPIO_MODE_UART1),
-	GRP("jtag", jtag_func, 1, RT3883_GPIO_MODE_JTAG),
-	GRP("mdio", mdio_func, 1, RT3883_GPIO_MODE_MDIO),
-	GRP("lna a", lna_a_func, 1, RT3883_GPIO_MODE_LNA_A),
-	GRP("lna g", lna_g_func, 1, RT3883_GPIO_MODE_LNA_G),
-	GRP("pci", pci_func, RT3883_GPIO_MODE_PCI_MASK,
+	GRP("uartlite", uartlite_grp, 1, RT3883_GPIO_MODE_UART1),
+	GRP("jtag", jtag_grp, 1, RT3883_GPIO_MODE_JTAG),
+	GRP("mdio", mdio_grp, 1, RT3883_GPIO_MODE_MDIO),
+	GRP("lna a", lna_a_grp, 1, RT3883_GPIO_MODE_LNA_A),
+	GRP("lna g", lna_g_grp, 1, RT3883_GPIO_MODE_LNA_G),
+	GRP("pci", pci_grp, RT3883_GPIO_MODE_PCI_MASK,
 		RT3883_GPIO_MODE_PCI_SHIFT),
-	GRP("ge1", ge1_func, 1, RT3883_GPIO_MODE_GE1),
-	GRP("ge2", ge2_func, 1, RT3883_GPIO_MODE_GE2),
+	GRP("ge1", ge1_grp, 1, RT3883_GPIO_MODE_GE1),
+	GRP("ge2", ge2_grp, 1, RT3883_GPIO_MODE_GE2),
 	{ 0 }
 };
 
-- 
2.37.2



From arinc.unal at arinc9.com  Sat Dec 31 08:08:43 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 19:08:43 +0300
Subject: [PATCH v3 0/6] Enhance Ralink pinctrl documentation
Message-ID: <20221231160849.40544-1-arinc.unal@arinc9.com>

Ho ho ho,

This series mainly enhances the Ralink pinctrl documentation, and make a
small variable name change on the subdrivers.

I've compile-tested all the subdrivers.
I've tested the dt-binding changes with:
make dt_binding_check DT_SCHEMA_FILES=pinctrl/ralink

v3:
- Changes on v2 were put on the last patch. Fix that.

v2:
- Add maxItems:1 to "groups" description.
- Change oneOf cases to anyOf.
- Add Krzystof's acked-by to the first patch.

Ar?n? ?NAL (6):
  pinctrl: ralink: rename variables which point out the pin group
  dt-bindings: pinctrl: mt7620: add proper function muxing binding
  dt-bindings: pinctrl: mt7621: add proper function muxing binding
  dt-bindings: pinctrl: rt2880: add proper function muxing binding
  dt-bindings: pinctrl: rt305x: add proper function muxing binding
  dt-bindings: pinctrl: rt3883: add proper function muxing binding

 .../bindings/pinctrl/ralink,mt7620-pinctrl.yaml | 633 +++++++++++++++++--
 .../bindings/pinctrl/ralink,mt7621-pinctrl.yaml | 205 +++++-
 .../bindings/pinctrl/ralink,rt2880-pinctrl.yaml |  86 ++-
 .../bindings/pinctrl/ralink,rt305x-pinctrl.yaml | 236 ++++++-
 .../bindings/pinctrl/ralink,rt3883-pinctrl.yaml | 205 +++++-
 drivers/pinctrl/ralink/pinctrl-mt7620.c         | 164 ++---
 drivers/pinctrl/ralink/pinctrl-mt7621.c         |  48 +-
 drivers/pinctrl/ralink/pinctrl-rt2880.c         |  28 +-
 drivers/pinctrl/ralink/pinctrl-rt305x.c         |  82 +--
 drivers/pinctrl/ralink/pinctrl-rt3883.c         |  44 +-
 10 files changed, 1467 insertions(+), 264 deletions(-)




From arinc.unal at arinc9.com  Sat Dec 31 08:08:44 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 19:08:44 +0300
Subject: [PATCH v3 1/6] pinctrl: ralink: rename variables which point out the pin group
In-Reply-To: <20221231160849.40544-1-arinc.unal@arinc9.com>
References: <20221231160849.40544-1-arinc.unal@arinc9.com>
Message-ID: <20221231160849.40544-2-arinc.unal@arinc9.com>

These variables define a list of functions which can be muxed to the pin
group which the name of the pin group was originally intended to be pointed
out on the name of the said variables.

Therefore, rename "func" to "grp" across all subdrivers where this applies.

Fixes: 18653d4bd8ab ("pinctrl: ralink: rename variable names for functions on MT7620 and MT7621")
Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 drivers/pinctrl/ralink/pinctrl-mt7620.c | 164 ++++++++++++------------
 drivers/pinctrl/ralink/pinctrl-mt7621.c |  48 +++----
 drivers/pinctrl/ralink/pinctrl-rt2880.c |  28 ++--
 drivers/pinctrl/ralink/pinctrl-rt305x.c |  82 ++++++------
 drivers/pinctrl/ralink/pinctrl-rt3883.c |  44 +++----
 5 files changed, 183 insertions(+), 183 deletions(-)

diff --git a/drivers/pinctrl/ralink/pinctrl-mt7620.c b/drivers/pinctrl/ralink/pinctrl-mt7620.c
index 22ff16eff02f..4e8d26bb3430 100644
--- a/drivers/pinctrl/ralink/pinctrl-mt7620.c
+++ b/drivers/pinctrl/ralink/pinctrl-mt7620.c
@@ -54,20 +54,20 @@
 #define MT7620_GPIO_MODE_EPHY		15
 #define MT7620_GPIO_MODE_PA		20
 
-static struct ralink_pmx_func i2c_func[] =  { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
-static struct ralink_pmx_func mdio_func[] = {
+static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
+static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
+static struct ralink_pmx_func mdio_grp[] = {
 	FUNC("mdio", MT7620_GPIO_MODE_MDIO, 22, 2),
 	FUNC("refclk", MT7620_GPIO_MODE_MDIO_REFCLK, 22, 2),
 };
-static struct ralink_pmx_func rgmii1_func[] = { FUNC("rgmii1", 0, 24, 12) };
-static struct ralink_pmx_func refclk_func[] = { FUNC("spi refclk", 0, 37, 3) };
-static struct ralink_pmx_func ephy_func[] = { FUNC("ephy", 0, 40, 5) };
-static struct ralink_pmx_func rgmii2_func[] = { FUNC("rgmii2", 0, 60, 12) };
-static struct ralink_pmx_func wled_func[] = { FUNC("wled", 0, 72, 1) };
-static struct ralink_pmx_func pa_func[] = { FUNC("pa", 0, 18, 4) };
-static struct ralink_pmx_func uartf_func[] = {
+static struct ralink_pmx_func rgmii1_grp[] = { FUNC("rgmii1", 0, 24, 12) };
+static struct ralink_pmx_func refclk_grp[] = { FUNC("spi refclk", 0, 37, 3) };
+static struct ralink_pmx_func ephy_grp[] = { FUNC("ephy", 0, 40, 5) };
+static struct ralink_pmx_func rgmii2_grp[] = { FUNC("rgmii2", 0, 60, 12) };
+static struct ralink_pmx_func wled_grp[] = { FUNC("wled", 0, 72, 1) };
+static struct ralink_pmx_func pa_grp[] = { FUNC("pa", 0, 18, 4) };
+static struct ralink_pmx_func uartf_grp[] = {
 	FUNC("uartf", MT7620_GPIO_MODE_UARTF, 7, 8),
 	FUNC("pcm uartf", MT7620_GPIO_MODE_PCM_UARTF, 7, 8),
 	FUNC("pcm i2s", MT7620_GPIO_MODE_PCM_I2S, 7, 8),
@@ -76,202 +76,202 @@ static struct ralink_pmx_func uartf_func[] = {
 	FUNC("gpio uartf", MT7620_GPIO_MODE_GPIO_UARTF, 7, 4),
 	FUNC("gpio i2s", MT7620_GPIO_MODE_GPIO_I2S, 7, 4),
 };
-static struct ralink_pmx_func wdt_func[] = {
+static struct ralink_pmx_func wdt_grp[] = {
 	FUNC("wdt rst", 0, 17, 1),
 	FUNC("wdt refclk", 0, 17, 1),
 	};
-static struct ralink_pmx_func pcie_rst_func[] = {
+static struct ralink_pmx_func pcie_rst_grp[] = {
 	FUNC("pcie rst", MT7620_GPIO_MODE_PCIE_RST, 36, 1),
 	FUNC("pcie refclk", MT7620_GPIO_MODE_PCIE_REF, 36, 1)
 };
-static struct ralink_pmx_func nd_sd_func[] = {
+static struct ralink_pmx_func nd_sd_grp[] = {
 	FUNC("nand", MT7620_GPIO_MODE_NAND, 45, 15),
 	FUNC("sd", MT7620_GPIO_MODE_SD, 47, 13)
 };
 
 static struct ralink_pmx_group mt7620a_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, MT7620_GPIO_MODE_I2C),
-	GRP("uartf", uartf_func, MT7620_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, MT7620_GPIO_MODE_I2C),
+	GRP("uartf", uartf_grp, MT7620_GPIO_MODE_UART0_MASK,
 		MT7620_GPIO_MODE_UART0_SHIFT),
-	GRP("spi", spi_func, 1, MT7620_GPIO_MODE_SPI),
-	GRP("uartlite", uartlite_func, 1, MT7620_GPIO_MODE_UART1),
-	GRP_G("wdt", wdt_func, MT7620_GPIO_MODE_WDT_MASK,
+	GRP("spi", spi_grp, 1, MT7620_GPIO_MODE_SPI),
+	GRP("uartlite", uartlite_grp, 1, MT7620_GPIO_MODE_UART1),
+	GRP_G("wdt", wdt_grp, MT7620_GPIO_MODE_WDT_MASK,
 		MT7620_GPIO_MODE_WDT_GPIO, MT7620_GPIO_MODE_WDT_SHIFT),
-	GRP_G("mdio", mdio_func, MT7620_GPIO_MODE_MDIO_MASK,
+	GRP_G("mdio", mdio_grp, MT7620_GPIO_MODE_MDIO_MASK,
 		MT7620_GPIO_MODE_MDIO_GPIO, MT7620_GPIO_MODE_MDIO_SHIFT),
-	GRP("rgmii1", rgmii1_func, 1, MT7620_GPIO_MODE_RGMII1),
-	GRP("spi refclk", refclk_func, 1, MT7620_GPIO_MODE_SPI_REF_CLK),
-	GRP_G("pcie", pcie_rst_func, MT7620_GPIO_MODE_PCIE_MASK,
+	GRP("rgmii1", rgmii1_grp, 1, MT7620_GPIO_MODE_RGMII1),
+	GRP("spi refclk", refclk_grp, 1, MT7620_GPIO_MODE_SPI_REF_CLK),
+	GRP_G("pcie", pcie_rst_grp, MT7620_GPIO_MODE_PCIE_MASK,
 		MT7620_GPIO_MODE_PCIE_GPIO, MT7620_GPIO_MODE_PCIE_SHIFT),
-	GRP_G("nd_sd", nd_sd_func, MT7620_GPIO_MODE_ND_SD_MASK,
+	GRP_G("nd_sd", nd_sd_grp, MT7620_GPIO_MODE_ND_SD_MASK,
 		MT7620_GPIO_MODE_ND_SD_GPIO, MT7620_GPIO_MODE_ND_SD_SHIFT),
-	GRP("rgmii2", rgmii2_func, 1, MT7620_GPIO_MODE_RGMII2),
-	GRP("wled", wled_func, 1, MT7620_GPIO_MODE_WLED),
-	GRP("ephy", ephy_func, 1, MT7620_GPIO_MODE_EPHY),
-	GRP("pa", pa_func, 1, MT7620_GPIO_MODE_PA),
+	GRP("rgmii2", rgmii2_grp, 1, MT7620_GPIO_MODE_RGMII2),
+	GRP("wled", wled_grp, 1, MT7620_GPIO_MODE_WLED),
+	GRP("ephy", ephy_grp, 1, MT7620_GPIO_MODE_EPHY),
+	GRP("pa", pa_grp, 1, MT7620_GPIO_MODE_PA),
 	{ 0 }
 };
 
-static struct ralink_pmx_func pwm1_func_mt76x8[] = {
+static struct ralink_pmx_func pwm1_grp_mt76x8[] = {
 	FUNC("sdxc d6", 3, 19, 1),
 	FUNC("utif", 2, 19, 1),
 	FUNC("gpio", 1, 19, 1),
 	FUNC("pwm1", 0, 19, 1),
 };
 
-static struct ralink_pmx_func pwm0_func_mt76x8[] = {
+static struct ralink_pmx_func pwm0_grp_mt76x8[] = {
 	FUNC("sdxc d7", 3, 18, 1),
 	FUNC("utif", 2, 18, 1),
 	FUNC("gpio", 1, 18, 1),
 	FUNC("pwm0", 0, 18, 1),
 };
 
-static struct ralink_pmx_func uart2_func_mt76x8[] = {
+static struct ralink_pmx_func uart2_grp_mt76x8[] = {
 	FUNC("sdxc d5 d4", 3, 20, 2),
 	FUNC("pwm", 2, 20, 2),
 	FUNC("gpio", 1, 20, 2),
 	FUNC("uart2", 0, 20, 2),
 };
 
-static struct ralink_pmx_func uart1_func_mt76x8[] = {
+static struct ralink_pmx_func uart1_grp_mt76x8[] = {
 	FUNC("sw_r", 3, 45, 2),
 	FUNC("pwm", 2, 45, 2),
 	FUNC("gpio", 1, 45, 2),
 	FUNC("uart1", 0, 45, 2),
 };
 
-static struct ralink_pmx_func i2c_func_mt76x8[] = {
+static struct ralink_pmx_func i2c_grp_mt76x8[] = {
 	FUNC("-", 3, 4, 2),
 	FUNC("debug", 2, 4, 2),
 	FUNC("gpio", 1, 4, 2),
 	FUNC("i2c", 0, 4, 2),
 };
 
-static struct ralink_pmx_func refclk_func_mt76x8[] = { FUNC("refclk", 0, 37, 1) };
-static struct ralink_pmx_func perst_func_mt76x8[] = { FUNC("perst", 0, 36, 1) };
-static struct ralink_pmx_func wdt_func_mt76x8[] = { FUNC("wdt", 0, 38, 1) };
-static struct ralink_pmx_func spi_func_mt76x8[] = { FUNC("spi", 0, 7, 4) };
+static struct ralink_pmx_func refclk_grp_mt76x8[] = { FUNC("refclk", 0, 37, 1) };
+static struct ralink_pmx_func perst_grp_mt76x8[] = { FUNC("perst", 0, 36, 1) };
+static struct ralink_pmx_func wdt_grp_mt76x8[] = { FUNC("wdt", 0, 38, 1) };
+static struct ralink_pmx_func spi_grp_mt76x8[] = { FUNC("spi", 0, 7, 4) };
 
-static struct ralink_pmx_func sd_mode_func_mt76x8[] = {
+static struct ralink_pmx_func sd_mode_grp_mt76x8[] = {
 	FUNC("jtag", 3, 22, 8),
 	FUNC("utif", 2, 22, 8),
 	FUNC("gpio", 1, 22, 8),
 	FUNC("sdxc", 0, 22, 8),
 };
 
-static struct ralink_pmx_func uart0_func_mt76x8[] = {
+static struct ralink_pmx_func uart0_grp_mt76x8[] = {
 	FUNC("-", 3, 12, 2),
 	FUNC("-", 2, 12, 2),
 	FUNC("gpio", 1, 12, 2),
 	FUNC("uart0", 0, 12, 2),
 };
 
-static struct ralink_pmx_func i2s_func_mt76x8[] = {
+static struct ralink_pmx_func i2s_grp_mt76x8[] = {
 	FUNC("antenna", 3, 0, 4),
 	FUNC("pcm", 2, 0, 4),
 	FUNC("gpio", 1, 0, 4),
 	FUNC("i2s", 0, 0, 4),
 };
 
-static struct ralink_pmx_func spi_cs1_func_mt76x8[] = {
+static struct ralink_pmx_func spi_cs1_grp_mt76x8[] = {
 	FUNC("-", 3, 6, 1),
 	FUNC("refclk", 2, 6, 1),
 	FUNC("gpio", 1, 6, 1),
 	FUNC("spi cs1", 0, 6, 1),
 };
 
-static struct ralink_pmx_func spis_func_mt76x8[] = {
+static struct ralink_pmx_func spis_grp_mt76x8[] = {
 	FUNC("pwm_uart2", 3, 14, 4),
 	FUNC("utif", 2, 14, 4),
 	FUNC("gpio", 1, 14, 4),
 	FUNC("spis", 0, 14, 4),
 };
 
-static struct ralink_pmx_func gpio_func_mt76x8[] = {
+static struct ralink_pmx_func gpio_grp_mt76x8[] = {
 	FUNC("pcie", 3, 11, 1),
 	FUNC("refclk", 2, 11, 1),
 	FUNC("gpio", 1, 11, 1),
 	FUNC("gpio", 0, 11, 1),
 };
 
-static struct ralink_pmx_func p4led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p4led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 30, 1),
 	FUNC("utif", 2, 30, 1),
 	FUNC("gpio", 1, 30, 1),
 	FUNC("p4led_kn", 0, 30, 1),
 };
 
-static struct ralink_pmx_func p3led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p3led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 31, 1),
 	FUNC("utif", 2, 31, 1),
 	FUNC("gpio", 1, 31, 1),
 	FUNC("p3led_kn", 0, 31, 1),
 };
 
-static struct ralink_pmx_func p2led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p2led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 32, 1),
 	FUNC("utif", 2, 32, 1),
 	FUNC("gpio", 1, 32, 1),
 	FUNC("p2led_kn", 0, 32, 1),
 };
 
-static struct ralink_pmx_func p1led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p1led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 33, 1),
 	FUNC("utif", 2, 33, 1),
 	FUNC("gpio", 1, 33, 1),
 	FUNC("p1led_kn", 0, 33, 1),
 };
 
-static struct ralink_pmx_func p0led_kn_func_mt76x8[] = {
+static struct ralink_pmx_func p0led_kn_grp_mt76x8[] = {
 	FUNC("jtag", 3, 34, 1),
 	FUNC("rsvd", 2, 34, 1),
 	FUNC("gpio", 1, 34, 1),
 	FUNC("p0led_kn", 0, 34, 1),
 };
 
-static struct ralink_pmx_func wled_kn_func_mt76x8[] = {
+static struct ralink_pmx_func wled_kn_grp_mt76x8[] = {
 	FUNC("rsvd", 3, 35, 1),
 	FUNC("rsvd", 2, 35, 1),
 	FUNC("gpio", 1, 35, 1),
 	FUNC("wled_kn", 0, 35, 1),
 };
 
-static struct ralink_pmx_func p4led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p4led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 39, 1),
 	FUNC("utif", 2, 39, 1),
 	FUNC("gpio", 1, 39, 1),
 	FUNC("p4led_an", 0, 39, 1),
 };
 
-static struct ralink_pmx_func p3led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p3led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 40, 1),
 	FUNC("utif", 2, 40, 1),
 	FUNC("gpio", 1, 40, 1),
 	FUNC("p3led_an", 0, 40, 1),
 };
 
-static struct ralink_pmx_func p2led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p2led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 41, 1),
 	FUNC("utif", 2, 41, 1),
 	FUNC("gpio", 1, 41, 1),
 	FUNC("p2led_an", 0, 41, 1),
 };
 
-static struct ralink_pmx_func p1led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p1led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 42, 1),
 	FUNC("utif", 2, 42, 1),
 	FUNC("gpio", 1, 42, 1),
 	FUNC("p1led_an", 0, 42, 1),
 };
 
-static struct ralink_pmx_func p0led_an_func_mt76x8[] = {
+static struct ralink_pmx_func p0led_an_grp_mt76x8[] = {
 	FUNC("jtag", 3, 43, 1),
 	FUNC("rsvd", 2, 43, 1),
 	FUNC("gpio", 1, 43, 1),
 	FUNC("p0led_an", 0, 43, 1),
 };
 
-static struct ralink_pmx_func wled_an_func_mt76x8[] = {
+static struct ralink_pmx_func wled_an_grp_mt76x8[] = {
 	FUNC("rsvd", 3, 44, 1),
 	FUNC("rsvd", 2, 44, 1),
 	FUNC("gpio", 1, 44, 1),
@@ -309,55 +309,55 @@ static struct ralink_pmx_func wled_an_func_mt76x8[] = {
 #define MT76X8_GPIO_MODE_GPIO		0
 
 static struct ralink_pmx_group mt76x8_pinmux_data[] = {
-	GRP_G("pwm1", pwm1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("pwm1", pwm1_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_PWM1),
-	GRP_G("pwm0", pwm0_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("pwm0", pwm0_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_PWM0),
-	GRP_G("uart2", uart2_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("uart2", uart2_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_UART2),
-	GRP_G("uart1", uart1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("uart1", uart1_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_UART1),
-	GRP_G("i2c", i2c_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("i2c", i2c_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_I2C),
-	GRP("refclk", refclk_func_mt76x8, 1, MT76X8_GPIO_MODE_REFCLK),
-	GRP("perst", perst_func_mt76x8, 1, MT76X8_GPIO_MODE_PERST),
-	GRP("wdt", wdt_func_mt76x8, 1, MT76X8_GPIO_MODE_WDT),
-	GRP("spi", spi_func_mt76x8, 1, MT76X8_GPIO_MODE_SPI),
-	GRP_G("sdmode", sd_mode_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP("refclk", refclk_grp_mt76x8, 1, MT76X8_GPIO_MODE_REFCLK),
+	GRP("perst", perst_grp_mt76x8, 1, MT76X8_GPIO_MODE_PERST),
+	GRP("wdt", wdt_grp_mt76x8, 1, MT76X8_GPIO_MODE_WDT),
+	GRP("spi", spi_grp_mt76x8, 1, MT76X8_GPIO_MODE_SPI),
+	GRP_G("sdmode", sd_mode_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_SDMODE),
-	GRP_G("uart0", uart0_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("uart0", uart0_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_UART0),
-	GRP_G("i2s", i2s_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("i2s", i2s_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_I2S),
-	GRP_G("spi cs1", spi_cs1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("spi cs1", spi_cs1_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_CS1),
-	GRP_G("spis", spis_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("spis", spis_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_SPIS),
-	GRP_G("gpio", gpio_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("gpio", gpio_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_GPIO),
-	GRP_G("wled_an", wled_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("wled_an", wled_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_WLED_AN),
-	GRP_G("p0led_an", p0led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p0led_an", p0led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P0LED_AN),
-	GRP_G("p1led_an", p1led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p1led_an", p1led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P1LED_AN),
-	GRP_G("p2led_an", p2led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p2led_an", p2led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P2LED_AN),
-	GRP_G("p3led_an", p3led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p3led_an", p3led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P3LED_AN),
-	GRP_G("p4led_an", p4led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p4led_an", p4led_an_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P4LED_AN),
-	GRP_G("wled_kn", wled_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("wled_kn", wled_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_WLED_KN),
-	GRP_G("p0led_kn", p0led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p0led_kn", p0led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P0LED_KN),
-	GRP_G("p1led_kn", p1led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p1led_kn", p1led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P1LED_KN),
-	GRP_G("p2led_kn", p2led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p2led_kn", p2led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P2LED_KN),
-	GRP_G("p3led_kn", p3led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p3led_kn", p3led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P3LED_KN),
-	GRP_G("p4led_kn", p4led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
+	GRP_G("p4led_kn", p4led_kn_grp_mt76x8, MT76X8_GPIO_MODE_MASK,
 				1, MT76X8_GPIO_MODE_P4LED_KN),
 	{ 0 }
 };
diff --git a/drivers/pinctrl/ralink/pinctrl-mt7621.c b/drivers/pinctrl/ralink/pinctrl-mt7621.c
index b47968f40e0c..eddc0ba6d468 100644
--- a/drivers/pinctrl/ralink/pinctrl-mt7621.c
+++ b/drivers/pinctrl/ralink/pinctrl-mt7621.c
@@ -34,59 +34,59 @@
 #define MT7621_GPIO_MODE_SDHCI_SHIFT	18
 #define MT7621_GPIO_MODE_SDHCI_GPIO	1
 
-static struct ralink_pmx_func uart1_func[] =  { FUNC("uart1", 0, 1, 2) };
-static struct ralink_pmx_func i2c_func[] =  { FUNC("i2c", 0, 3, 2) };
-static struct ralink_pmx_func uart3_func[] = {
+static struct ralink_pmx_func uart1_grp[] =  { FUNC("uart1", 0, 1, 2) };
+static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 3, 2) };
+static struct ralink_pmx_func uart3_grp[] = {
 	FUNC("uart3", 0, 5, 4),
 	FUNC("i2s", 2, 5, 4),
 	FUNC("spdif3", 3, 5, 4),
 };
-static struct ralink_pmx_func uart2_func[] = {
+static struct ralink_pmx_func uart2_grp[] = {
 	FUNC("uart2", 0, 9, 4),
 	FUNC("pcm", 2, 9, 4),
 	FUNC("spdif2", 3, 9, 4),
 };
-static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 13, 5) };
-static struct ralink_pmx_func wdt_func[] = {
+static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 13, 5) };
+static struct ralink_pmx_func wdt_grp[] = {
 	FUNC("wdt rst", 0, 18, 1),
 	FUNC("wdt refclk", 2, 18, 1),
 };
-static struct ralink_pmx_func pcie_rst_func[] = {
+static struct ralink_pmx_func pcie_rst_grp[] = {
 	FUNC("pcie rst", MT7621_GPIO_MODE_PCIE_RST, 19, 1),
 	FUNC("pcie refclk", MT7621_GPIO_MODE_PCIE_REF, 19, 1)
 };
-static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 20, 2) };
-static struct ralink_pmx_func rgmii2_func[] = { FUNC("rgmii2", 0, 22, 12) };
-static struct ralink_pmx_func spi_func[] = {
+static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 20, 2) };
+static struct ralink_pmx_func rgmii2_grp[] = { FUNC("rgmii2", 0, 22, 12) };
+static struct ralink_pmx_func spi_grp[] = {
 	FUNC("spi", 0, 34, 7),
 	FUNC("nand1", 2, 34, 7),
 };
-static struct ralink_pmx_func sdhci_func[] = {
+static struct ralink_pmx_func sdhci_grp[] = {
 	FUNC("sdhci", 0, 41, 8),
 	FUNC("nand2", 2, 41, 8),
 };
-static struct ralink_pmx_func rgmii1_func[] = { FUNC("rgmii1", 0, 49, 12) };
+static struct ralink_pmx_func rgmii1_grp[] = { FUNC("rgmii1", 0, 49, 12) };
 
 static struct ralink_pmx_group mt7621_pinmux_data[] = {
-	GRP("uart1", uart1_func, 1, MT7621_GPIO_MODE_UART1),
-	GRP("i2c", i2c_func, 1, MT7621_GPIO_MODE_I2C),
-	GRP_G("uart3", uart3_func, MT7621_GPIO_MODE_UART3_MASK,
+	GRP("uart1", uart1_grp, 1, MT7621_GPIO_MODE_UART1),
+	GRP("i2c", i2c_grp, 1, MT7621_GPIO_MODE_I2C),
+	GRP_G("uart3", uart3_grp, MT7621_GPIO_MODE_UART3_MASK,
 		MT7621_GPIO_MODE_UART3_GPIO, MT7621_GPIO_MODE_UART3_SHIFT),
-	GRP_G("uart2", uart2_func, MT7621_GPIO_MODE_UART2_MASK,
+	GRP_G("uart2", uart2_grp, MT7621_GPIO_MODE_UART2_MASK,
 		MT7621_GPIO_MODE_UART2_GPIO, MT7621_GPIO_MODE_UART2_SHIFT),
-	GRP("jtag", jtag_func, 1, MT7621_GPIO_MODE_JTAG),
-	GRP_G("wdt", wdt_func, MT7621_GPIO_MODE_WDT_MASK,
+	GRP("jtag", jtag_grp, 1, MT7621_GPIO_MODE_JTAG),
+	GRP_G("wdt", wdt_grp, MT7621_GPIO_MODE_WDT_MASK,
 		MT7621_GPIO_MODE_WDT_GPIO, MT7621_GPIO_MODE_WDT_SHIFT),
-	GRP_G("pcie", pcie_rst_func, MT7621_GPIO_MODE_PCIE_MASK,
+	GRP_G("pcie", pcie_rst_grp, MT7621_GPIO_MODE_PCIE_MASK,
 		MT7621_GPIO_MODE_PCIE_GPIO, MT7621_GPIO_MODE_PCIE_SHIFT),
-	GRP_G("mdio", mdio_func, MT7621_GPIO_MODE_MDIO_MASK,
+	GRP_G("mdio", mdio_grp, MT7621_GPIO_MODE_MDIO_MASK,
 		MT7621_GPIO_MODE_MDIO_GPIO, MT7621_GPIO_MODE_MDIO_SHIFT),
-	GRP("rgmii2", rgmii2_func, 1, MT7621_GPIO_MODE_RGMII2),
-	GRP_G("spi", spi_func, MT7621_GPIO_MODE_SPI_MASK,
+	GRP("rgmii2", rgmii2_grp, 1, MT7621_GPIO_MODE_RGMII2),
+	GRP_G("spi", spi_grp, MT7621_GPIO_MODE_SPI_MASK,
 		MT7621_GPIO_MODE_SPI_GPIO, MT7621_GPIO_MODE_SPI_SHIFT),
-	GRP_G("sdhci", sdhci_func, MT7621_GPIO_MODE_SDHCI_MASK,
+	GRP_G("sdhci", sdhci_grp, MT7621_GPIO_MODE_SDHCI_MASK,
 		MT7621_GPIO_MODE_SDHCI_GPIO, MT7621_GPIO_MODE_SDHCI_SHIFT),
-	GRP("rgmii1", rgmii1_func, 1, MT7621_GPIO_MODE_RGMII1),
+	GRP("rgmii1", rgmii1_grp, 1, MT7621_GPIO_MODE_RGMII1),
 	{ 0 }
 };
 
diff --git a/drivers/pinctrl/ralink/pinctrl-rt2880.c b/drivers/pinctrl/ralink/pinctrl-rt2880.c
index 811e12df1133..3e2f1aaaf095 100644
--- a/drivers/pinctrl/ralink/pinctrl-rt2880.c
+++ b/drivers/pinctrl/ralink/pinctrl-rt2880.c
@@ -15,22 +15,22 @@
 #define RT2880_GPIO_MODE_SDRAM		BIT(6)
 #define RT2880_GPIO_MODE_PCI		BIT(7)
 
-static struct ralink_pmx_func i2c_func[] = { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 7, 8) };
-static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
-static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
-static struct ralink_pmx_func sdram_func[] = { FUNC("sdram", 0, 24, 16) };
-static struct ralink_pmx_func pci_func[] = { FUNC("pci", 0, 40, 32) };
+static struct ralink_pmx_func i2c_grp[] = { FUNC("i2c", 0, 1, 2) };
+static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 7, 8) };
+static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
+static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
+static struct ralink_pmx_func sdram_grp[] = { FUNC("sdram", 0, 24, 16) };
+static struct ralink_pmx_func pci_grp[] = { FUNC("pci", 0, 40, 32) };
 
 static struct ralink_pmx_group rt2880_pinmux_data_act[] = {
-	GRP("i2c", i2c_func, 1, RT2880_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT2880_GPIO_MODE_SPI),
-	GRP("uartlite", uartlite_func, 1, RT2880_GPIO_MODE_UART0),
-	GRP("jtag", jtag_func, 1, RT2880_GPIO_MODE_JTAG),
-	GRP("mdio", mdio_func, 1, RT2880_GPIO_MODE_MDIO),
-	GRP("sdram", sdram_func, 1, RT2880_GPIO_MODE_SDRAM),
-	GRP("pci", pci_func, 1, RT2880_GPIO_MODE_PCI),
+	GRP("i2c", i2c_grp, 1, RT2880_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT2880_GPIO_MODE_SPI),
+	GRP("uartlite", uartlite_grp, 1, RT2880_GPIO_MODE_UART0),
+	GRP("jtag", jtag_grp, 1, RT2880_GPIO_MODE_JTAG),
+	GRP("mdio", mdio_grp, 1, RT2880_GPIO_MODE_MDIO),
+	GRP("sdram", sdram_grp, 1, RT2880_GPIO_MODE_SDRAM),
+	GRP("pci", pci_grp, 1, RT2880_GPIO_MODE_PCI),
 	{ 0 }
 };
 
diff --git a/drivers/pinctrl/ralink/pinctrl-rt305x.c b/drivers/pinctrl/ralink/pinctrl-rt305x.c
index 5b204b7ca1f3..bdaee5ce1ee0 100644
--- a/drivers/pinctrl/ralink/pinctrl-rt305x.c
+++ b/drivers/pinctrl/ralink/pinctrl-rt305x.c
@@ -31,9 +31,9 @@
 #define RT3352_GPIO_MODE_LNA		18
 #define RT3352_GPIO_MODE_PA		20
 
-static struct ralink_pmx_func i2c_func[] =  { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartf_func[] = {
+static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
+static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct ralink_pmx_func uartf_grp[] = {
 	FUNC("uartf", RT305X_GPIO_MODE_UARTF, 7, 8),
 	FUNC("pcm uartf", RT305X_GPIO_MODE_PCM_UARTF, 7, 8),
 	FUNC("pcm i2s", RT305X_GPIO_MODE_PCM_I2S, 7, 8),
@@ -42,65 +42,65 @@ static struct ralink_pmx_func uartf_func[] = {
 	FUNC("gpio uartf", RT305X_GPIO_MODE_GPIO_UARTF, 7, 4),
 	FUNC("gpio i2s", RT305X_GPIO_MODE_GPIO_I2S, 7, 4),
 };
-static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
-static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
-static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
-static struct ralink_pmx_func rt5350_led_func[] = { FUNC("led", 0, 22, 5) };
-static struct ralink_pmx_func rt5350_cs1_func[] = {
+static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
+static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
+static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
+static struct ralink_pmx_func rt5350_led_grp[] = { FUNC("led", 0, 22, 5) };
+static struct ralink_pmx_func rt5350_cs1_grp[] = {
 	FUNC("spi_cs1", 0, 27, 1),
 	FUNC("wdg_cs1", 1, 27, 1),
 };
-static struct ralink_pmx_func sdram_func[] = { FUNC("sdram", 0, 24, 16) };
-static struct ralink_pmx_func rt3352_rgmii_func[] = {
+static struct ralink_pmx_func sdram_grp[] = { FUNC("sdram", 0, 24, 16) };
+static struct ralink_pmx_func rt3352_rgmii_grp[] = {
 	FUNC("rgmii", 0, 24, 12)
 };
-static struct ralink_pmx_func rgmii_func[] = { FUNC("rgmii", 0, 40, 12) };
-static struct ralink_pmx_func rt3352_lna_func[] = { FUNC("lna", 0, 36, 2) };
-static struct ralink_pmx_func rt3352_pa_func[] = { FUNC("pa", 0, 38, 2) };
-static struct ralink_pmx_func rt3352_led_func[] = { FUNC("led", 0, 40, 5) };
-static struct ralink_pmx_func rt3352_cs1_func[] = {
+static struct ralink_pmx_func rgmii_grp[] = { FUNC("rgmii", 0, 40, 12) };
+static struct ralink_pmx_func rt3352_lna_grp[] = { FUNC("lna", 0, 36, 2) };
+static struct ralink_pmx_func rt3352_pa_grp[] = { FUNC("pa", 0, 38, 2) };
+static struct ralink_pmx_func rt3352_led_grp[] = { FUNC("led", 0, 40, 5) };
+static struct ralink_pmx_func rt3352_cs1_grp[] = {
 	FUNC("spi_cs1", 0, 45, 1),
 	FUNC("wdg_cs1", 1, 45, 1),
 };
 
 static struct ralink_pmx_group rt3050_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, RT305X_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI),
-	GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
+	GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
 		RT305X_GPIO_MODE_UART0_SHIFT),
-	GRP("uartlite", uartlite_func, 1, RT305X_GPIO_MODE_UART1),
-	GRP("jtag", jtag_func, 1, RT305X_GPIO_MODE_JTAG),
-	GRP("mdio", mdio_func, 1, RT305X_GPIO_MODE_MDIO),
-	GRP("rgmii", rgmii_func, 1, RT305X_GPIO_MODE_RGMII),
-	GRP("sdram", sdram_func, 1, RT305X_GPIO_MODE_SDRAM),
+	GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
+	GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
+	GRP("mdio", mdio_grp, 1, RT305X_GPIO_MODE_MDIO),
+	GRP("rgmii", rgmii_grp, 1, RT305X_GPIO_MODE_RGMII),
+	GRP("sdram", sdram_grp, 1, RT305X_GPIO_MODE_SDRAM),
 	{ 0 }
 };
 
 static struct ralink_pmx_group rt3352_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, RT305X_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI),
-	GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
+	GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
 		RT305X_GPIO_MODE_UART0_SHIFT),
-	GRP("uartlite", uartlite_func, 1, RT305X_GPIO_MODE_UART1),
-	GRP("jtag", jtag_func, 1, RT305X_GPIO_MODE_JTAG),
-	GRP("mdio", mdio_func, 1, RT305X_GPIO_MODE_MDIO),
-	GRP("rgmii", rt3352_rgmii_func, 1, RT305X_GPIO_MODE_RGMII),
-	GRP("lna", rt3352_lna_func, 1, RT3352_GPIO_MODE_LNA),
-	GRP("pa", rt3352_pa_func, 1, RT3352_GPIO_MODE_PA),
-	GRP("led", rt3352_led_func, 1, RT5350_GPIO_MODE_PHY_LED),
-	GRP("spi_cs1", rt3352_cs1_func, 2, RT5350_GPIO_MODE_SPI_CS1),
+	GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
+	GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
+	GRP("mdio", mdio_grp, 1, RT305X_GPIO_MODE_MDIO),
+	GRP("rgmii", rt3352_rgmii_grp, 1, RT305X_GPIO_MODE_RGMII),
+	GRP("lna", rt3352_lna_grp, 1, RT3352_GPIO_MODE_LNA),
+	GRP("pa", rt3352_pa_grp, 1, RT3352_GPIO_MODE_PA),
+	GRP("led", rt3352_led_grp, 1, RT5350_GPIO_MODE_PHY_LED),
+	GRP("spi_cs1", rt3352_cs1_grp, 2, RT5350_GPIO_MODE_SPI_CS1),
 	{ 0 }
 };
 
 static struct ralink_pmx_group rt5350_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, RT305X_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI),
-	GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),
+	GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,
 		RT305X_GPIO_MODE_UART0_SHIFT),
-	GRP("uartlite", uartlite_func, 1, RT305X_GPIO_MODE_UART1),
-	GRP("jtag", jtag_func, 1, RT305X_GPIO_MODE_JTAG),
-	GRP("led", rt5350_led_func, 1, RT5350_GPIO_MODE_PHY_LED),
-	GRP("spi_cs1", rt5350_cs1_func, 2, RT5350_GPIO_MODE_SPI_CS1),
+	GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),
+	GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),
+	GRP("led", rt5350_led_grp, 1, RT5350_GPIO_MODE_PHY_LED),
+	GRP("spi_cs1", rt5350_cs1_grp, 2, RT5350_GPIO_MODE_SPI_CS1),
 	{ 0 }
 };
 
diff --git a/drivers/pinctrl/ralink/pinctrl-rt3883.c b/drivers/pinctrl/ralink/pinctrl-rt3883.c
index 44a66c3d2d2a..392208662355 100644
--- a/drivers/pinctrl/ralink/pinctrl-rt3883.c
+++ b/drivers/pinctrl/ralink/pinctrl-rt3883.c
@@ -39,9 +39,9 @@
 #define RT3883_GPIO_MODE_LNA_G_GPIO	0x3
 #define RT3883_GPIO_MODE_LNA_G		_RT3883_GPIO_MODE_LNA_G(RT3883_GPIO_MODE_LNA_G_MASK)
 
-static struct ralink_pmx_func i2c_func[] =  { FUNC("i2c", 0, 1, 2) };
-static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
-static struct ralink_pmx_func uartf_func[] = {
+static struct ralink_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };
+static struct ralink_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
+static struct ralink_pmx_func uartf_grp[] = {
 	FUNC("uartf", RT3883_GPIO_MODE_UARTF, 7, 8),
 	FUNC("pcm uartf", RT3883_GPIO_MODE_PCM_UARTF, 7, 8),
 	FUNC("pcm i2s", RT3883_GPIO_MODE_PCM_I2S, 7, 8),
@@ -50,34 +50,34 @@ static struct ralink_pmx_func uartf_func[] = {
 	FUNC("gpio uartf", RT3883_GPIO_MODE_GPIO_UARTF, 7, 4),
 	FUNC("gpio i2s", RT3883_GPIO_MODE_GPIO_I2S, 7, 4),
 };
-static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
-static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
-static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
-static struct ralink_pmx_func lna_a_func[] = { FUNC("lna a", 0, 32, 3) };
-static struct ralink_pmx_func lna_g_func[] = { FUNC("lna g", 0, 35, 3) };
-static struct ralink_pmx_func pci_func[] = {
+static struct ralink_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
+static struct ralink_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };
+static struct ralink_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };
+static struct ralink_pmx_func lna_a_grp[] = { FUNC("lna a", 0, 32, 3) };
+static struct ralink_pmx_func lna_g_grp[] = { FUNC("lna g", 0, 35, 3) };
+static struct ralink_pmx_func pci_grp[] = {
 	FUNC("pci-dev", 0, 40, 32),
 	FUNC("pci-host2", 1, 40, 32),
 	FUNC("pci-host1", 2, 40, 32),
 	FUNC("pci-fnc", 3, 40, 32)
 };
-static struct ralink_pmx_func ge1_func[] = { FUNC("ge1", 0, 72, 12) };
-static struct ralink_pmx_func ge2_func[] = { FUNC("ge2", 0, 84, 12) };
+static struct ralink_pmx_func ge1_grp[] = { FUNC("ge1", 0, 72, 12) };
+static struct ralink_pmx_func ge2_grp[] = { FUNC("ge2", 0, 84, 12) };
 
 static struct ralink_pmx_group rt3883_pinmux_data[] = {
-	GRP("i2c", i2c_func, 1, RT3883_GPIO_MODE_I2C),
-	GRP("spi", spi_func, 1, RT3883_GPIO_MODE_SPI),
-	GRP("uartf", uartf_func, RT3883_GPIO_MODE_UART0_MASK,
+	GRP("i2c", i2c_grp, 1, RT3883_GPIO_MODE_I2C),
+	GRP("spi", spi_grp, 1, RT3883_GPIO_MODE_SPI),
+	GRP("uartf", uartf_grp, RT3883_GPIO_MODE_UART0_MASK,
 		RT3883_GPIO_MODE_UART0_SHIFT),
-	GRP("uartlite", uartlite_func, 1, RT3883_GPIO_MODE_UART1),
-	GRP("jtag", jtag_func, 1, RT3883_GPIO_MODE_JTAG),
-	GRP("mdio", mdio_func, 1, RT3883_GPIO_MODE_MDIO),
-	GRP("lna a", lna_a_func, 1, RT3883_GPIO_MODE_LNA_A),
-	GRP("lna g", lna_g_func, 1, RT3883_GPIO_MODE_LNA_G),
-	GRP("pci", pci_func, RT3883_GPIO_MODE_PCI_MASK,
+	GRP("uartlite", uartlite_grp, 1, RT3883_GPIO_MODE_UART1),
+	GRP("jtag", jtag_grp, 1, RT3883_GPIO_MODE_JTAG),
+	GRP("mdio", mdio_grp, 1, RT3883_GPIO_MODE_MDIO),
+	GRP("lna a", lna_a_grp, 1, RT3883_GPIO_MODE_LNA_A),
+	GRP("lna g", lna_g_grp, 1, RT3883_GPIO_MODE_LNA_G),
+	GRP("pci", pci_grp, RT3883_GPIO_MODE_PCI_MASK,
 		RT3883_GPIO_MODE_PCI_SHIFT),
-	GRP("ge1", ge1_func, 1, RT3883_GPIO_MODE_GE1),
-	GRP("ge2", ge2_func, 1, RT3883_GPIO_MODE_GE2),
+	GRP("ge1", ge1_grp, 1, RT3883_GPIO_MODE_GE1),
+	GRP("ge2", ge2_grp, 1, RT3883_GPIO_MODE_GE2),
 	{ 0 }
 };
 
-- 
2.37.2



From arinc.unal at arinc9.com  Sat Dec 31 08:08:45 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 19:08:45 +0300
Subject: [PATCH v3 2/6] dt-bindings: pinctrl: mt7620: add proper function muxing binding
In-Reply-To: <20221231160849.40544-1-arinc.unal@arinc9.com>
References: <20221231160849.40544-1-arinc.unal@arinc9.com>
Message-ID: <20221231160849.40544-3-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
---
 .../pinctrl/ralink,mt7620-pinctrl.yaml        | 633 +++++++++++++++++-
 1 file changed, 597 insertions(+), 36 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
index 6f17f3991640..1e63ea34146a 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
@@ -29,47 +29,609 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [
-              # common
-              i2c, spi, wdt,
-
-              # For MT7620 SoC
-              ephy, mdio, nd_sd, pa, pcie, rgmii1, rgmii2, spi refclk,
-              uartf, uartlite, wled,
-
-              # For MT7628 and MT7688 SoCs
-              gpio, i2s, p0led_an, p0led_kn, p1led_an, p1led_kn, p2led_an,
-              p2led_kn, p3led_an, p3led_kn, p4led_an, p4led_kn, perst, pwm0,
-              pwm1, refclk, sdmode, spi cs1, spis, uart0, uart1, uart2,
-              wled_an, wled_kn,
-            ]
-
           function:
-            description: The mux function to select.
-            enum: [
-              # common
-              gpio, i2c, refclk, spi,
-
-              # For MT7620 SoC
-              ephy, gpio i2s, gpio uartf, i2s uartf, mdio, nand, pa,
-              pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf,
-              rgmii1, rgmii2, sd, spi refclk, uartf, uartlite, wdt refclk,
-              wdt rst, wled,
-
-              # For MT7628 and MT7688 SoCs
-              antenna, debug, i2s, jtag, p0led_an, p0led_kn,
-              p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
-              p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2,
-              rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi cs1,
-              spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -,
-            ]
+            description:
+              A string containing the name of the function to mux to the group.
+            anyOf:
+              - description: For MT7620 SoC
+                enum: [ephy, gpio, gpio i2s, gpio uartf, i2c, i2s uartf, mdio, nand, pa,
+                       pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf, refclk,
+                       rgmii1, rgmii2, sd, spi, spi refclk, uartf, uartlite, wdt refclk,
+                       wdt rst, wled]
+
+              - description: For MT7628 and MT7688 SoCs
+                enum: [antenna, debug, gpio, i2c, i2s, jtag, p0led_an, p0led_kn,
+                       p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
+                       p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2,
+                       refclk, rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi, spi cs1,
+                       spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -]
+
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
+            maxItems: 1
 
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: antenna
+            then:
+              properties:
+                groups:
+                  enum: [i2s]
+
+          - if:
+              properties:
+                function:
+                  const: debug
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: ephy
+            then:
+              properties:
+                groups:
+                  enum: [ephy]
+
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  anyOf:
+                    - description: For MT7620 SoC
+                      enum: [ephy, i2c, mdio, nd_sd, pa, pcie, rgmii1, rgmii2,
+                             spi, spi refclk, uartf, uartlite, wdt, wled]
+
+                    - description: For MT7628 and MT7688 SoCs
+                      enum: [gpio, i2c, i2s, p0led_an, p0led_kn, p1led_an,
+                             p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
+                             p4led_an, p4led_kn, perst, pwm0, pwm1, refclk,
+                             sdmode, spi, spi cs1, spis, uart0, uart1, uart2,
+                             wdt, wled_an, wled_kn]
+
+          - if:
+              properties:
+                function:
+                  const: gpio i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: gpio uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: i2s
+            then:
+              properties:
+                groups:
+                  enum: [i2s]
+
+          - if:
+              properties:
+                function:
+                  const: i2s uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [p0led_an, p0led_kn, p1led_an, p1led_kn, p2led_an,
+                         p2led_kn, p3led_an, p3led_kn, p4led_an, p4led_kn,
+                         sdmode]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: nand
+            then:
+              properties:
+                groups:
+                  enum: [nd_sd]
+
+          - if:
+              properties:
+                function:
+                  const: p0led_an
+            then:
+              properties:
+                groups:
+                  enum: [p0led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p0led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p0led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: p1led_an
+            then:
+              properties:
+                groups:
+                  enum: [p1led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p1led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p1led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: p2led_an
+            then:
+              properties:
+                groups:
+                  enum: [p2led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p2led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p2led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: p3led_an
+            then:
+              properties:
+                groups:
+                  enum: [p3led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p3led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p3led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: p4led_an
+            then:
+              properties:
+                groups:
+                  enum: [p4led_an]
+
+          - if:
+              properties:
+                function:
+                  const: p4led_kn
+            then:
+              properties:
+                groups:
+                  enum: [p4led_kn]
+
+          - if:
+              properties:
+                function:
+                  const: pa
+            then:
+              properties:
+                groups:
+                  enum: [pa]
+
+          - if:
+              properties:
+                function:
+                  const: pcie
+            then:
+              properties:
+                groups:
+                  enum: [gpio]
+
+          - if:
+              properties:
+                function:
+                  const: pcie refclk
+            then:
+              properties:
+                groups:
+                  enum: [pcie]
+
+          - if:
+              properties:
+                function:
+                  const: pcie rst
+            then:
+              properties:
+                groups:
+                  enum: [pcie]
+
+          - if:
+              properties:
+                function:
+                  const: pcm
+            then:
+              properties:
+                groups:
+                  enum: [i2s]
+
+          - if:
+              properties:
+                function:
+                  const: pcm gpio
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: perst
+            then:
+              properties:
+                groups:
+                  enum: [perst]
+
+          - if:
+              properties:
+                function:
+                  const: pwm
+            then:
+              properties:
+                groups:
+                  enum: [uart1, uart2]
+
+          - if:
+              properties:
+                function:
+                  const: pwm0
+            then:
+              properties:
+                groups:
+                  enum: [pwm0]
+
+          - if:
+              properties:
+                function:
+                  const: pwm1
+            then:
+              properties:
+                groups:
+                  enum: [pwm1]
+
+          - if:
+              properties:
+                function:
+                  const: pwm_uart2
+            then:
+              properties:
+                groups:
+                  enum: [spis]
+
+          - if:
+              properties:
+                function:
+                  const: refclk
+            then:
+              properties:
+                groups:
+                  anyOf:
+                    - description: For MT7620 SoC
+                      enum: [mdio]
+
+                    - description: For MT7628 and MT7688 SoCs
+                      enum: [gpio, refclk, spi cs1]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii1
+            then:
+              properties:
+                groups:
+                  enum: [rgmii1]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii2
+            then:
+              properties:
+                groups:
+                  enum: [rgmii2]
+
+          - if:
+              properties:
+                function:
+                  const: rsvd
+            then:
+              properties:
+                groups:
+                  enum: [p0led_an, p0led_kn, wled_an, wled_kn]
+
+          - if:
+              properties:
+                function:
+                  const: sd
+            then:
+              properties:
+                groups:
+                  enum: [nd_sd]
+
+          - if:
+              properties:
+                function:
+                  const: sdxc
+            then:
+              properties:
+                groups:
+                  enum: [sdmode]
+
+          - if:
+              properties:
+                function:
+                  const: sdxc d5 d4
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: sdxc d6
+            then:
+              properties:
+                groups:
+                  enum: [pwm1]
+
+          - if:
+              properties:
+                function:
+                  const: sdxc d7
+            then:
+              properties:
+                groups:
+                  enum: [pwm0]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: spi cs1
+            then:
+              properties:
+                groups:
+                  enum: [spi cs1]
+
+          - if:
+              properties:
+                function:
+                  const: spi refclk
+            then:
+              properties:
+                groups:
+                  enum: [spi refclk]
+
+          - if:
+              properties:
+                function:
+                  const: spis
+            then:
+              properties:
+                groups:
+                  enum: [spis]
+
+          - if:
+              properties:
+                function:
+                  const: sw_r
+            then:
+              properties:
+                groups:
+                  enum: [uart1]
+
+          - if:
+              properties:
+                function:
+                  const: uart0
+            then:
+              properties:
+                groups:
+                  enum: [uart0]
+
+          - if:
+              properties:
+                function:
+                  const: uart1
+            then:
+              properties:
+                groups:
+                  enum: [uart1]
+
+          - if:
+              properties:
+                function:
+                  const: uart2
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: uartlite
+            then:
+              properties:
+                groups:
+                  enum: [uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: utif
+            then:
+              properties:
+                groups:
+                  enum: [p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an,
+                         p3led_kn, p4led_an, p4led_kn, pwm0, pwm1, sdmode, spis]
+
+          - if:
+              properties:
+                function:
+                  const: wdt
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
+          - if:
+              properties:
+                function:
+                  const: wdt refclk
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
+          - if:
+              properties:
+                function:
+                  const: wdt rst
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
+          - if:
+              properties:
+                function:
+                  const: wled
+            then:
+              properties:
+                groups:
+                  enum: [wled]
+
+          - if:
+              properties:
+                function:
+                  const: wled_an
+            then:
+              properties:
+                groups:
+                  enum: [wled_an]
+
+          - if:
+              properties:
+                function:
+                  const: wled_kn
+            then:
+              properties:
+                groups:
+                  enum: [wled_kn]
+
+          - if:
+              properties:
+                function:
+                  const: "-"
+            then:
+              properties:
+                groups:
+                  enum: [i2c, spi cs1, uart0]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -83,7 +645,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,mt7620-pinctrl";
-- 
2.37.2



From arinc.unal at arinc9.com  Sat Dec 31 08:08:46 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 19:08:46 +0300
Subject: [PATCH v3 3/6] dt-bindings: pinctrl: mt7621: add proper function muxing binding
In-Reply-To: <20221231160849.40544-1-arinc.unal@arinc9.com>
References: <20221231160849.40544-1-arinc.unal@arinc9.com>
Message-ID: <20221231160849.40544-4-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 .../pinctrl/ralink,mt7621-pinctrl.yaml        | 205 +++++++++++++++++-
 1 file changed, 198 insertions(+), 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
index 61e5c847e8c8..1b1d37b981d9 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7621-pinctrl.yaml
@@ -29,21 +29,213 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [i2c, jtag, mdio, pcie, rgmii1, rgmii2, sdhci, spi, uart1,
-                   uart2, uart3, wdt]
-
           function:
-            description: The mux function to select.
+            description:
+              A string containing the name of the function to mux to the group.
             enum: [gpio, i2c, i2s, jtag, mdio, nand1, nand2, pcie refclk,
                    pcie rst, pcm, rgmii1, rgmii2, sdhci, spdif2, spdif3, spi,
                    uart1, uart2, uart3, wdt refclk, wdt rst]
 
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
+            maxItems: 1
+
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  enum: [i2c, jtag, mdio, pcie, rgmii1, rgmii2, sdhci, spi,
+                         uart1, uart2, uart3, wdt]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: i2s
+            then:
+              properties:
+                groups:
+                  enum: [uart3]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [jtag]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: nand1
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: nand2
+            then:
+              properties:
+                groups:
+                  enum: [sdhci]
+
+          - if:
+              properties:
+                function:
+                  const: pcie refclk
+            then:
+              properties:
+                groups:
+                  enum: [pcie]
+
+          - if:
+              properties:
+                function:
+                  const: pcie rst
+            then:
+              properties:
+                groups:
+                  enum: [pcie]
+
+          - if:
+              properties:
+                function:
+                  const: pcm
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii1
+            then:
+              properties:
+                groups:
+                  enum: [rgmii1]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii2
+            then:
+              properties:
+                groups:
+                  enum: [rgmii2]
+
+          - if:
+              properties:
+                function:
+                  const: sdhci
+            then:
+              properties:
+                groups:
+                  enum: [sdhci]
+
+          - if:
+              properties:
+                function:
+                  const: spdif2
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: spdif3
+            then:
+              properties:
+                groups:
+                  enum: [uart3]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: uart1
+            then:
+              properties:
+                groups:
+                  enum: [uart1]
+
+          - if:
+              properties:
+                function:
+                  const: uart2
+            then:
+              properties:
+                groups:
+                  enum: [uart2]
+
+          - if:
+              properties:
+                function:
+                  const: uart3
+            then:
+              properties:
+                groups:
+                  enum: [uart3]
+
+          - if:
+              properties:
+                function:
+                  const: wdt refclk
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
+          - if:
+              properties:
+                function:
+                  const: wdt rst
+            then:
+              properties:
+                groups:
+                  enum: [wdt]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -57,7 +249,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,mt7621-pinctrl";
-- 
2.37.2



From arinc.unal at arinc9.com  Sat Dec 31 08:08:47 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 19:08:47 +0300
Subject: [PATCH v3 4/6] dt-bindings: pinctrl: rt2880: add proper function muxing binding
In-Reply-To: <20221231160849.40544-1-arinc.unal@arinc9.com>
References: <20221231160849.40544-1-arinc.unal@arinc9.com>
Message-ID: <20221231160849.40544-5-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 .../pinctrl/ralink,rt2880-pinctrl.yaml        | 86 +++++++++++++++++--
 1 file changed, 80 insertions(+), 6 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml
index 56e5becabcfd..7fd0df880a76 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,rt2880-pinctrl.yaml
@@ -29,18 +29,93 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [i2c, spi, uartlite, jtag, mdio, sdram, pci]
-
           function:
-            description: The mux function to select.
+            description:
+              A string containing the name of the function to mux to the group.
             enum: [gpio, i2c, spi, uartlite, jtag, mdio, sdram, pci]
 
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
+            maxItems: 1
+
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  enum: [i2c, spi, uartlite, jtag, mdio, sdram, pci]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: uartlite
+            then:
+              properties:
+                groups:
+                  enum: [uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [jtag]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: sdram
+            then:
+              properties:
+                groups:
+                  enum: [sdram]
+
+          - if:
+              properties:
+                function:
+                  const: pci
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -54,7 +129,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,rt2880-pinctrl";
-- 
2.37.2



From arinc.unal at arinc9.com  Sat Dec 31 08:08:49 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 19:08:49 +0300
Subject: [PATCH v3 6/6] dt-bindings: pinctrl: rt3883: add proper function muxing binding
In-Reply-To: <20221231160849.40544-1-arinc.unal@arinc9.com>
References: <20221231160849.40544-1-arinc.unal@arinc9.com>
Message-ID: <20221231160849.40544-7-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 .../pinctrl/ralink,rt3883-pinctrl.yaml        | 205 +++++++++++++++++-
 1 file changed, 198 insertions(+), 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,rt3883-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,rt3883-pinctrl.yaml
index feb6e66dcb61..008d93181aea 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,rt3883-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,rt3883-pinctrl.yaml
@@ -29,21 +29,213 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [ge1, ge2, i2c, jtag, lna a, lna g, mdio, pci, spi, uartf,
-                   uartlite]
-
           function:
-            description: The mux function to select.
+            description:
+              A string containing the name of the function to mux to the group.
             enum: [ge1, ge2, gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag,
                    lna a, lna g, mdio, pci-dev, pci-fnc, pci-host1, pci-host2,
                    pcm gpio, pcm i2s, pcm uartf, spi, uartf, uartlite]
 
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
+            maxItems: 1
+
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: ge1
+            then:
+              properties:
+                groups:
+                  enum: [ge1]
+
+          - if:
+              properties:
+                function:
+                  const: ge2
+            then:
+              properties:
+                groups:
+                  enum: [ge2]
+
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  enum: [ge1, ge2, i2c, jtag, lna a, lna g, mdio, pci, spi,
+                         uartf, uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: gpio i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: gpio uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: i2s uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [jtag]
+
+          - if:
+              properties:
+                function:
+                  const: lna a
+            then:
+              properties:
+                groups:
+                  enum: [lna a]
+
+          - if:
+              properties:
+                function:
+                  const: lna g
+            then:
+              properties:
+                groups:
+                  enum: [lna g]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: pci-dev
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
+          - if:
+              properties:
+                function:
+                  const: pci-fnc
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
+          - if:
+              properties:
+                function:
+                  const: pci-host1
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
+          - if:
+              properties:
+                function:
+                  const: pci-host2
+            then:
+              properties:
+                groups:
+                  enum: [pci]
+
+          - if:
+              properties:
+                function:
+                  const: pcm gpio
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: uartlite
+            then:
+              properties:
+                groups:
+                  enum: [uartlite]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -57,7 +249,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,rt3883-pinctrl";
-- 
2.37.2



From arinc.unal at arinc9.com  Sat Dec 31 08:08:48 2022
From: arinc.unal at arinc9.com (=?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?=)
Date: Sat, 31 Dec 2022 19:08:48 +0300
Subject: [PATCH v3 5/6] dt-bindings: pinctrl: rt305x: add proper function muxing binding
In-Reply-To: <20221231160849.40544-1-arinc.unal@arinc9.com>
References: <20221231160849.40544-1-arinc.unal@arinc9.com>
Message-ID: <20221231160849.40544-6-arinc.unal@arinc9.com>

Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.

Signed-off-by: Ar?n? ?NAL <arinc.unal at arinc9.com>
---
 .../pinctrl/ralink,rt305x-pinctrl.yaml        | 236 ++++++++++++++++--
 1 file changed, 211 insertions(+), 25 deletions(-)

diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml
index f602a5d6e13a..4d66ca752a30 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,rt305x-pinctrl.yaml
@@ -30,38 +30,225 @@ patternProperties:
         $ref: pinmux-node.yaml#
 
         properties:
-          groups:
-            description: The pin group to select.
-            enum: [
-              # common
-              i2c, jtag, led, mdio, rgmii, spi, spi_cs1, uartf, uartlite,
-
-              # For RT3050, RT3052 and RT3350 SoCs
-              sdram,
-
-              # For RT3352 SoC
-              lna, pa
-            ]
-
           function:
-            description: The mux function to select.
-            enum: [
-              # common
-              gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag, led, mdio,
-              pcm gpio, pcm i2s, pcm uartf, rgmii, spi, spi_cs1, uartf,
-              uartlite, wdg_cs1,
+            description:
+              A string containing the name of the function to mux to the group.
+            anyOf:
+              - description: For RT3050, RT3052 and RT3350 SoCs
+                enum: [gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag, mdio,
+                       pcm gpio, pcm i2s, pcm uartf, rgmii, sdram, spi, uartf,
+                       uartlite]
 
-              # For RT3050, RT3052 and RT3350 SoCs
-              sdram,
+              - description: For RT3352 SoC
+                enum: [gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag, led,
+                       lna, mdio, pa, pcm gpio, pcm i2s, pcm uartf, rgmii, spi,
+                       spi_cs1, uartf, uartlite, wdg_cs1]
 
-              # For RT3352 SoC
-              lna, pa
-            ]
+              - description: For RT5350 SoC
+                enum: [gpio, gpio i2s, gpio uartf, i2c, i2s uartf, jtag, led,
+                       pcm gpio, pcm i2s, pcm uartf, spi, spi_cs1, uartf,
+                       uartlite, wdg_cs1]
+
+          groups:
+            description:
+              An array of strings. Each string contains the name of a group.
+            maxItems: 1
 
         required:
           - groups
           - function
 
+        allOf:
+          - if:
+              properties:
+                function:
+                  const: gpio
+            then:
+              properties:
+                groups:
+                  anyOf:
+                    - description: For RT3050, RT3052 and RT3350 SoCs
+                      enum: [i2c, jtag, mdio, rgmii, sdram, spi, uartf,
+                             uartlite]
+
+                    - description: For RT3352 SoC
+                      enum: [i2c, jtag, led, lna, mdio, pa, rgmii, spi, spi_cs1,
+                             uartf, uartlite]
+
+                    - description: For RT5350 SoC
+                      enum: [i2c, jtag, led, spi, spi_cs1, uartf, uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: gpio i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: gpio uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: i2c
+            then:
+              properties:
+                groups:
+                  enum: [i2c]
+
+          - if:
+              properties:
+                function:
+                  const: i2s uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: jtag
+            then:
+              properties:
+                groups:
+                  enum: [jtag]
+
+          - if:
+              properties:
+                function:
+                  const: led
+            then:
+              properties:
+                groups:
+                  enum: [led]
+
+          - if:
+              properties:
+                function:
+                  const: lna
+            then:
+              properties:
+                groups:
+                  enum: [lna]
+
+          - if:
+              properties:
+                function:
+                  const: mdio
+            then:
+              properties:
+                groups:
+                  enum: [mdio]
+
+          - if:
+              properties:
+                function:
+                  const: pa
+            then:
+              properties:
+                groups:
+                  enum: [pa]
+
+          - if:
+              properties:
+                function:
+                  const: pcm gpio
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm i2s
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: pcm uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: rgmii
+            then:
+              properties:
+                groups:
+                  enum: [rgmii]
+
+          - if:
+              properties:
+                function:
+                  const: sdram
+            then:
+              properties:
+                groups:
+                  enum: [sdram]
+
+          - if:
+              properties:
+                function:
+                  const: spi
+            then:
+              properties:
+                groups:
+                  enum: [spi]
+
+          - if:
+              properties:
+                function:
+                  const: spi_cs1
+            then:
+              properties:
+                groups:
+                  enum: [spi_cs1]
+
+          - if:
+              properties:
+                function:
+                  const: uartf
+            then:
+              properties:
+                groups:
+                  enum: [uartf]
+
+          - if:
+              properties:
+                function:
+                  const: uartlite
+            then:
+              properties:
+                groups:
+                  enum: [uartlite]
+
+          - if:
+              properties:
+                function:
+                  const: wdg_cs1
+            then:
+              properties:
+                groups:
+                  enum: [spi_cs1]
+
         additionalProperties: false
 
     additionalProperties: false
@@ -75,7 +262,6 @@ required:
 additionalProperties: false
 
 examples:
-  # Pinmux controller node
   - |
     pinctrl {
       compatible = "ralink,rt305x-pinctrl";
-- 
2.37.2



From sashal at kernel.org  Sat Dec 31 12:04:36 2022
From: sashal at kernel.org (Sasha Levin)
Date: Sat, 31 Dec 2022 15:04:36 -0500
Subject: [PATCH AUTOSEL 6.1 4/7] ASoC: SOF: mediatek: initialize panic_info to zero
In-Reply-To: <20221231200439.1748686-1-sashal@kernel.org>
References: <20221231200439.1748686-1-sashal@kernel.org>
Message-ID: <20221231200439.1748686-4-sashal@kernel.org>

From: YC Hung <yc.hung at mediatek.com>

[ Upstream commit 7bd220f2ba9014b78f0304178103393554b8c4fe ]

Coverity spotted that panic_info is not initialized to zero in
mtk_adsp_dump. Using uninitialized value panic_info.linenum when
calling snd_sof_get_status. Fix this coverity by initializing
panic_info struct as zero.

Signed-off-by: YC Hung <yc.hung at mediatek.com>
Reviewed-by: Curtis Malainey <cujomalainey at chromium.org>
Link: https://lore.kernel.org/r/20221213115617.25086-1-yc.hung at mediatek.com
Signed-off-by: Mark Brown <broonie at kernel.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 sound/soc/sof/mediatek/mtk-adsp-common.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/sof/mediatek/mtk-adsp-common.c b/sound/soc/sof/mediatek/mtk-adsp-common.c
index 1e0769c668a7..de8dbe27cd0d 100644
--- a/sound/soc/sof/mediatek/mtk-adsp-common.c
+++ b/sound/soc/sof/mediatek/mtk-adsp-common.c
@@ -60,7 +60,7 @@ void mtk_adsp_dump(struct snd_sof_dev *sdev, u32 flags)
 {
 	char *level = (flags & SOF_DBG_DUMP_OPTIONAL) ? KERN_DEBUG : KERN_ERR;
 	struct sof_ipc_dsp_oops_xtensa xoops;
-	struct sof_ipc_panic_info panic_info;
+	struct sof_ipc_panic_info panic_info = {};
 	u32 stack[MTK_ADSP_STACK_DUMP_SIZE];
 	u32 status;
 
-- 
2.35.1



From sashal at kernel.org  Sat Dec 31 12:04:59 2022
From: sashal at kernel.org (Sasha Levin)
Date: Sat, 31 Dec 2022 15:04:59 -0500
Subject: [PATCH AUTOSEL 6.0 4/7] ASoC: SOF: mediatek: initialize panic_info to zero
In-Reply-To: <20221231200502.1748784-1-sashal@kernel.org>
References: <20221231200502.1748784-1-sashal@kernel.org>
Message-ID: <20221231200502.1748784-4-sashal@kernel.org>

From: YC Hung <yc.hung at mediatek.com>

[ Upstream commit 7bd220f2ba9014b78f0304178103393554b8c4fe ]

Coverity spotted that panic_info is not initialized to zero in
mtk_adsp_dump. Using uninitialized value panic_info.linenum when
calling snd_sof_get_status. Fix this coverity by initializing
panic_info struct as zero.

Signed-off-by: YC Hung <yc.hung at mediatek.com>
Reviewed-by: Curtis Malainey <cujomalainey at chromium.org>
Link: https://lore.kernel.org/r/20221213115617.25086-1-yc.hung at mediatek.com
Signed-off-by: Mark Brown <broonie at kernel.org>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
 sound/soc/sof/mediatek/mtk-adsp-common.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/sof/mediatek/mtk-adsp-common.c b/sound/soc/sof/mediatek/mtk-adsp-common.c
index 1e0769c668a7..de8dbe27cd0d 100644
--- a/sound/soc/sof/mediatek/mtk-adsp-common.c
+++ b/sound/soc/sof/mediatek/mtk-adsp-common.c
@@ -60,7 +60,7 @@ void mtk_adsp_dump(struct snd_sof_dev *sdev, u32 flags)
 {
 	char *level = (flags & SOF_DBG_DUMP_OPTIONAL) ? KERN_DEBUG : KERN_ERR;
 	struct sof_ipc_dsp_oops_xtensa xoops;
-	struct sof_ipc_panic_info panic_info;
+	struct sof_ipc_panic_info panic_info = {};
 	u32 stack[MTK_ADSP_STACK_DUMP_SIZE];
 	u32 status;
 
-- 
2.35.1



From executive at no2yanshuf.co.il  Tue Dec 27 07:40:37 2022
From: executive at no2yanshuf.co.il (Khalid)
Date: 27 Dec 2022 15:40:37 +0000
Subject: LOAN  FUNDING
Message-ID: <20221227154036.99C44F262D7022AA@no2yanshuf.co.il>

Dear Sir/Madam,

I recommend credible Entrepreneur/viable projects to a Consortium 
of Private Investors who are looking for good business 
plan/Entrepreneurs to invest and manage funds on a short and long 
term at interest rate of 3% for duration of 10 years.

The investor is ready to fund any kind of project that requires 
funding, 

revert back if you are interested 
(adnakhalid at alrashidprojects.co)

Best Regards,
Adana khalid.


